ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDU0MDVmN2EuLjhkZmM2NzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMTMwLDggKzEzMCw2IEBACiAJLSBpbmZvcm1hdGlvbiBvbiBFREFDIC0gRXJyb3IgRGV0ZWN0aW9uIEFuZCBDb3JyZWN0aW9uCiBlaXNhLnR4dAogCS0gaW5mbyBvbiBFSVNBIGJ1cyBzdXBwb3J0LgotZXhjZXB0aW9uLnR4dAotCS0gaG93IExpbnV4IHYyLjIgaGFuZGxlcyBleGNlcHRpb25zIHdpdGhvdXQgdmVyaWZ5X2FyZWEgZXRjLgogZmF1bHQtaW5qZWN0aW9uLwogCS0gZGlyIHdpdGggZG9jcyBhYm91dCB0aGUgZmF1bHQgaW5qZWN0aW9uIGNhcGFiaWxpdGllcyBpbmZyYXN0cnVjdHVyZS4KIGZiLwpAQCAtMjM0LDYgKzIzMiw4IEBACiAJLSBpbmZvIG9uIHR5cGljYWwgTGludXggbWVtb3J5IHByb2JsZW1zLgogbWlwcy8KIAktIGRpcmVjdG9yeSB3aXRoIGluZm8gYWJvdXQgTGludXggb24gTUlQUyBhcmNoaXRlY3R1cmUuCittbWMvCisJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIGFib3V0IHRoZSBNTUMgc3Vic3lzdGVtCiBtb25vLnR4dAogCS0gaG93IHRvIGV4ZWN1dGUgTW9uby1iYXNlZCAuTkVUIGJpbmFyaWVzIHdpdGggdGhlIGhlbHAgb2YgQklORk1UX01JU0MuCiBtdXRleC1kZXNpZ24udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU2YTkyYS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotV2hhdDoJCS9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS8KLURhdGU6CQlKdWx5IDIwMDgKLUNvbnRhY3Q6CUVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUgPGVkdWFyZC5tdW50ZWFudUBsaW51eDM2MC5ybz4KLURlc2NyaXB0aW9uOgotCi1JbiBrbWVtdHJhY2UtZW5hYmxlZCBrZXJuZWxzLCB0aGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjcmVhdGVkOgotCi0vc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvCi0JY3B1PG4+CQkoMDQwMCkJUGVyLUNQVSB0cmFjaW5nIGRhdGEsIHNlZSBiZWxvdy4gKGJpbmFyeSkKLQl0b3RhbF9vdmVycnVucwkoMDQwMCkJVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIHdlcmUgZHJvcHBlZCBmcm9tCi0JCQkJY3B1PG4+IGZpbGVzIGJlY2F1c2Ugb2YgZnVsbCBidWZmZXIgY29uZGl0aW9uLAotCQkJCW5vbi1iaW5hcnkuICh0ZXh0KQotCWFiaV92ZXJzaW9uCSgwNDAwKQlLZXJuZWwncyBrbWVtdHJhY2UgQUJJIHZlcnNpb24uICh0ZXh0KQotCi1FYWNoIHBlci1DUFUgZmlsZSBzaG91bGQgYmUgcmVhZCBhY2NvcmRpbmcgdG8gdGhlIHJlbGF5IGludGVyZmFjZS4gVGhhdCBpcywKLXRoZSByZWFkZXIgc2hvdWxkIHNldCBhZmZpbml0eSB0byB0aGF0IHNwZWNpZmljIENQVSBhbmQsIGFzIGN1cnJlbnRseSBkb25lIGJ5Ci10aGUgdXNlcnNwYWNlIGFwcGxpY2F0aW9uICh0aG91Z2ggdGhlcmUgYXJlIG90aGVyIG1ldGhvZHMpLCB1c2UgcG9sbCgpIHdpdGgKLWFuIGluZmluaXRlIHRpbWVvdXQgYmVmb3JlIGV2ZXJ5IHJlYWQoKS4gT3RoZXJ3aXNlLCBlcnJvbmVvdXMgZGF0YSBtYXkgYmUKLXJlYWQuIFRoZSBiaW5hcnkgZGF0YSBoYXMgdGhlIGZvbGxvd2luZyBfY29yZV8gZm9ybWF0OgotCi0JRXZlbnQgSUQJKDEgYnl0ZSkJVW5zaWduZWQgaW50ZWdlciwgb25lIG9mOgotCQkwIC0gcmVwcmVzZW50cyBhbiBhbGxvY2F0aW9uIChLTUVNVFJBQ0VfRVZFTlRfQUxMT0MpCi0JCTEgLSByZXByZXNlbnRzIGEgZnJlZWluZyBvZiBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkKLQkJICAgIChLTUVNVFJBQ0VfRVZFTlRfRlJFRSkKLQlUeXBlIElECQkoMSBieXRlKQlVbnNpZ25lZCBpbnRlZ2VyLCBvbmUgb2Y6Ci0JCTAgLSB0aGlzIGlzIGEga21hbGxvYygpIC8ga2ZyZWUoKQotCQkxIC0gdGhpcyBpcyBhIGttZW1fY2FjaGVfYWxsb2MoKSAvIGttZW1fY2FjaGVfZnJlZSgpCi0JCTIgLSB0aGlzIGlzIGEgX19nZXRfZnJlZV9wYWdlcygpIGV0IGFsLgotCUV2ZW50IHNpemUJKDIgYnl0ZXMpCVVuc2lnbmVkIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZQotCQkJCQlzaXplIG9mIHRoaXMgZXZlbnQuIFVzZWQgdG8gZXh0ZW5kCi0JCQkJCWttZW10cmFjZS4gRGlzY2FyZCB0aGUgYnl0ZXMgeW91Ci0JCQkJCWRvbid0IGtub3cgYWJvdXQuCi0JU2VxdWVuY2UgbnVtYmVyCSg0IGJ5dGVzKQlTaWduZWQgaW50ZWdlciB1c2VkIHRvIHJlb3JkZXIgZGF0YQotCQkJCQlsb2dnZWQgb24gU01QIG1hY2hpbmVzLiBXcmFwYXJvdW5kCi0JCQkJCW11c3QgYmUgdGFrZW4gaW50byBhY2NvdW50LCBhbHRob3VnaAotCQkJCQlpdCBpcyB1bmxpa2VseS4KLQlDYWxsZXIgYWRkcmVzcwkoOCBieXRlcykJUmV0dXJuIGFkZHJlc3MgdG8gdGhlIGNhbGxlci4KLQlQb2ludGVyIHRvIG1lbQkoOCBieXRlcykJUG9pbnRlciB0byB0YXJnZXQgbWVtb3J5IGFyZWEuIENhbiBiZQotCQkJCQlOVUxMLCBidXQgbm90IGFsbCBzdWNoIGNhbGxzIG1pZ2h0IGJlCi0JCQkJCXJlY29yZGVkLgotCi1JbiBjYXNlIG9mIEtNRU1UUkFDRV9FVkVOVF9BTExPQyBldmVudHMsIHRoZSBuZXh0IGZpZWxkcyBmb2xsb3c6Ci0KLQlSZXF1ZXN0ZWQgYnl0ZXMJKDggYnl0ZXMpCVRvdGFsIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMsCi0JCQkJCXVuc2lnbmVkLCBtdXN0IG5vdCBiZSB6ZXJvLgotCUFsbG9jYXRlZCBieXRlcyAoOCBieXRlcykJVG90YWwgbnVtYmVyIG9mIGFjdHVhbGx5IGFsbG9jYXRlZAotCQkJCQlieXRlcywgdW5zaWduZWQsIG11c3Qgbm90IGJlIGxvd2VyCi0JCQkJCXRoYW4gcmVxdWVzdGVkIGJ5dGVzLgotCVJlcXVlc3RlZCBmbGFncwkoNCBieXRlcykJR0ZQIGZsYWdzIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0JVGFyZ2V0IENQVQkoNCBieXRlcykJU2lnbmVkIGludGVnZXIsIHZhbGlkIGZvciBldmVudCBpZCAxLgotCQkJCQlJZiBlcXVhbCB0byAtMSwgdGFyZ2V0IENQVSBpcyB0aGUgc2FtZQotCQkJCQlhcyBvcmlnaW4gQ1BVLCBidXQgdGhlIHJldmVyc2UgbWlnaHQKLQkJCQkJbm90IGJlIHRydWUuCi0KLVRoZSBkYXRhIGlzIG1hZGUgYXZhaWxhYmxlIGluIHRoZSBzYW1lIGVuZGlhbm5lc3MgdGhlIG1hY2hpbmUgaGFzLgotCi1PdGhlciBldmVudCBpZHMgYW5kIHR5cGUgaWRzIG1heSBiZSBkZWZpbmVkIGFuZCBhZGRlZC4gT3RoZXIgZmllbGRzIG1heSBiZQotYWRkZWQgYnkgaW5jcmVhc2luZyBldmVudCBzaXplLCBidXQgc2VlIGJlbG93IGZvciBkZXRhaWxzLgotRXZlcnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBBQkksIGluY2x1ZGluZyBuZXcgaWQgZGVmaW5pdGlvbnMsIGFyZSBmb2xsb3dlZAotYnkgYnVtcGluZyB0aGUgQUJJIHZlcnNpb24gYnkgb25lLgotCi1BZGRpbmcgbmV3IGRhdGEgdG8gdGhlIHBhY2tldCAoZmVhdHVyZXMpIGlzIGRvbmUgYXQgdGhlIGVuZCBvZiB0aGUgbWFuZGF0b3J5Ci1kYXRhOgotCUZlYXR1cmUgc2l6ZQkoMiBieXRlKQotCUZlYXR1cmUgSUQJKDEgYnl0ZSkKLQlGZWF0dXJlIGRhdGEJKEZlYXR1cmUgc2l6ZSAtIDMgYnl0ZXMpCi0KLQotVXNlcnM6Ci0Ja21lbXRyYWNlLXVzZXIgLSBnaXQ6Ly9yZXBvLm9yLmN6L2ttZW10cmFjZS11c2VyLmdpdAotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1pMmMtZGV2aWNlcy1obTYzNTIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1pMmMtZGV2aWNlcy1obTYzNTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViMmU0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWkyYy1kZXZpY2VzLWhtNjM1MgpAQCAtMCwwICsxLDIxIEBACitXaGVyZToJCS9zeXMvYnVzL2kyYy9kZXZpY2VzLy4uLi9oZWFkaW5nMF9pbnB1dAorRGF0ZToJCUFwcmlsIDIwMTAKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzY/CitDb250YWN0OglhbGFuLmNveEBpbnRlbC5jb20KK0Rlc2NyaXB0aW9uOglSZXBvcnRzIHRoZSBjdXJyZW50IGhlYWRpbmcgZnJvbSB0aGUgY29tcGFzcyBhcyBhIGZsb2F0aW5nCisJCXBvaW50IHZhbHVlIGluIGRlZ3JlZXMuCisKK1doZXJlOgkJL3N5cy9idXMvaTJjL2RldmljZXMvLi4uL3Bvd2VyX3N0YXRlCitEYXRlOgkJQXByaWwgMjAxMAorS2VybmVsIFZlcnNpb246IDIuNi4zNj8KK0NvbnRhY3Q6CWFsYW4uY294QGludGVsLmNvbQorRGVzY3JpcHRpb246CVNldHMgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBkZXZpY2UuIDAgc2V0cyB0aGUgZGV2aWNlIGludG8KKwkJc2xlZXAgbW9kZSwgMSB3YWtlcyBpdCB1cC4KKworV2hlcmU6CQkvc3lzL2J1cy9pMmMvZGV2aWNlcy8uLi4vY2FsaWJyYXRpb24KK0RhdGU6CQlBcHJpbCAyMDEwCitLZXJuZWwgVmVyc2lvbjogMi42LjM2PworQ29udGFjdDoJYWxhbi5jb3hAaW50ZWwuY29tCitEZXNjcmlwdGlvbjoJU2V0cyB0aGUgY2FsaWJyYXRpb24gb24gb3Igb2ZmICgxID0gb24sIDAgPSBvZmYpLiBTZWUgdGhlCisJCWNoaXAgZGF0YSBzaGVldC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCmluZGV4IDI1YmUzMjUuLmY5NzlkODIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKQEAgLTEzOSwzICsxMzksMzAgQEAKIERlc2NyaXB0aW9uOgogCQlUaGlzIHN5bWJvbGljIGxpbmsgcG9pbnRzIHRvIHRoZSBQQ0kgaG90cGx1ZyBjb250cm9sbGVyIGRyaXZlcgogCQltb2R1bGUgdGhhdCBtYW5hZ2VzIHRoZSBob3RwbHVnIHNsb3QuCisKK1doYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vbGFiZWwKK0RhdGU6CQlKdWx5IDIwMTAKK0NvbnRhY3Q6CU5hcmVuZHJhIEsgPG5hcmVuZHJhX2tAZGVsbC5jb20+LCBsaW51eC1idWdzQGRlbGwuY29tCitEZXNjcmlwdGlvbjoKKwkJUmVhZGluZyB0aGlzIGF0dHJpYnV0ZSB3aWxsIHByb3ZpZGUgdGhlIGZpcm13YXJlCisJCWdpdmVuIG5hbWUoU01CSU9TIHR5cGUgNDEgc3RyaW5nKSBvZiB0aGUgUENJIGRldmljZS4KKwkJVGhlIGF0dHJpYnV0ZSB3aWxsIGJlIGNyZWF0ZWQgb25seSBpZiB0aGUgZmlybXdhcmUKKwkJaGFzIGdpdmVuIGEgbmFtZSB0byB0aGUgUENJIGRldmljZS4KK1VzZXJzOgorCQlVc2Vyc3BhY2UgYXBwbGljYXRpb25zIGludGVyZXN0ZWQgaW4ga25vd2luZyB0aGUKKwkJZmlybXdhcmUgYXNzaWduZWQgbmFtZSBvZiB0aGUgUENJIGRldmljZS4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9pbmRleAorRGF0ZToJCUp1bHkgMjAxMAorQ29udGFjdDoJTmFyZW5kcmEgSyA8bmFyZW5kcmFfa0BkZWxsLmNvbT4sIGxpbnV4LWJ1Z3NAZGVsbC5jb20KK0Rlc2NyaXB0aW9uOgorCQlSZWFkaW5nIHRoaXMgYXR0cmlidXRlIHdpbGwgcHJvdmlkZSB0aGUgZmlybXdhcmUKKwkJZ2l2ZW4gaW5zdGFuY2UoU01CSU9TIHR5cGUgNDEgZGV2aWNlIHR5cGUgaW5zdGFuY2UpCisJCW9mIHRoZSBQQ0kgZGV2aWNlLiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgY3JlYXRlZAorCQlvbmx5IGlmIHRoZSBmaXJtd2FyZSBoYXMgZ2l2ZW4gYSBkZXZpY2UgdHlwZSBpbnN0YW5jZQorCQl0byB0aGUgUENJIGRldmljZS4KK1VzZXJzOgorCQlVc2Vyc3BhY2UgYXBwbGljYXRpb25zIGludGVyZXN0ZWQgaW4ga25vd2luZyB0aGUKKwkJZmlybXdhcmUgYXNzaWduZWQgZGV2aWNlIHR5cGUgaW5zdGFuY2Ugb2YgdGhlIFBDSQorCQlkZXZpY2UgdGhhdCBjYW4gaGVscCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBmaXJtd2FyZQorCQlpbnRlbmRlZCBvcmRlciBvZiB0aGUgUENJIGRldmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wbGF0Zm9ybS1fVURDXy1nYWRnZXQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtcGxhdGZvcm0tX1VEQ18tZ2FkZ2V0CmluZGV4IDM0MDM0MDIuLmQ1NDhlYWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1wbGF0Zm9ybS1fVURDXy1nYWRnZXQKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXBsYXRmb3JtLV9VRENfLWdhZGdldApAQCAtNywzICs3LDE1IEBACiAJCTAgLT4gcmVzdW1lZAogCiAJCShfVURDXyBpcyB0aGUgbmFtZSBvZiB0aGUgVVNCIERldmljZSBDb250cm9sbGVyIGRyaXZlcikKKworV2hhdDogICAgICAgICAgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9fVURDXy9nYWRnZXQvZ2FkZ2V0LWx1blgvbm9mdWEKK0RhdGU6ICAgICAgICAgICBKdWx5IDIwMTAKK0NvbnRhY3Q6ICAgICAgICBBbmR5IFNoZXZjaGVua28gPGFuZHkuc2hldmNoZW5rb0BnbWFpbC5jb20+CitEZXNjcmlwdGlvbjoKKwkJU2hvdyBvciBzZXQgdGhlIHJlYWN0aW9uIG9uIHRoZSBGVUEgKEZvcmNlIFVuaXQgQWNjZXNzKSBiaXQgaW4KKwkJdGhlIFNDU0kgV1JJVEUoMTAsMTIpIGNvbW1hbmRzIHdoZW4gYSBnYWRnZXQgaW4gVVNCIE1hc3MKKwkJU3RvcmFnZSBtb2RlLgorCisJCVBvc3NpYmxlIHZhbHVlcyBhcmU6CisJCQkxIC0+IGlnbm9yZSB0aGUgRlVBIGZsYWcKKwkJCTAgLT4gb2JleSB0aGUgRlVBIGZsYWcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtaTJjLWJtcDA4NSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtaTJjLWJtcDA4NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODU5NjJhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1pMmMtYm1wMDg1CkBAIC0wLDAgKzEsMzEgQEAKK1doYXQ6CQkvc3lzL2J1cy9pMmMvZGV2aWNlcy88YnVzbnVtPi08ZGV2YWRkcj4vcHJlc3N1cmUwX2lucHV0CitEYXRlOgkJSnVuZSAyMDEwCitDb250YWN0OglDaHJpc3RvcGggTWFpciA8Y2hyaXN0b3BoLm1haXJAZ21haWwuY29tPgorRGVzY3JpcHRpb246CVN0YXJ0IGEgcHJlc3N1cmUgbWVhc3VyZW1lbnQgYW5kIHJlYWQgdGhlIHJlc3VsdC4gVmFsdWVzCisJCXJlcHJlc2VudCB0aGUgYW1iaWVudCBhaXIgcHJlc3N1cmUgaW4gcGFzY2FsICgwLjAxIG1pbGxpYmFyKS4KKworCQlSZWFkaW5nOiByZXR1cm5zIHRoZSBjdXJyZW50IGFpciBwcmVzc3VyZS4KKworCitXaGF0OgkJL3N5cy9idXMvaTJjL2RldmljZXMvPGJ1c251bT4tPGRldmFkZHI+L3RlbXAwX2lucHV0CitEYXRlOgkJSnVuZSAyMDEwCitDb250YWN0OglDaHJpc3RvcGggTWFpciA8Y2hyaXN0b3BoLm1haXJAZ21haWwuY29tPgorRGVzY3JpcHRpb246CU1lYXN1cmUgdGhlIGFtYmllbnQgdGVtcGVyYXR1cmUuIFRoZSByZXR1cm5lZCB2YWx1ZSByZXByZXNlbnRzCisJCXRoZSBhbWJpZW50IHRlbXBlcmF0dXJlIGluIHVuaXRzIG9mIDAuMSBkZWdyZWUgY2Vsc2l1cy4KKworCQlSZWFkaW5nOiByZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlLgorCisKK1doYXQ6CQkvc3lzL2J1cy9pMmMvZGV2aWNlcy88YnVzbnVtPi08ZGV2YWRkcj4vb3ZlcnNhbXBsaW5nCitEYXRlOgkJSnVuZSAyMDEwCitDb250YWN0OglDaHJpc3RvcGggTWFpciA8Y2hyaXN0b3BoLm1haXJAZ21haWwuY29tPgorRGVzY3JpcHRpb246CVRlbGwgdGhlIGJtcDA4NSB0byB1c2UgbW9yZSBzYW1wbGVzIHRvIGNhbGN1bGF0ZSBhIHByZXNzdXJlCisJCXZhbHVlLiBXaGVuIHdyaXRpbmcgdG8gdGhpcyBmaWxlIHRoZSBjaGlwIHdpbGwgdXNlIDJeeCBzYW1wbGVzCisJCXRvIGNhbGN1bGF0ZSB0aGUgbmV4dCBwcmVzc3VyZSB2YWx1ZSB3aXRoIHggYmVpbmcgdGhlIHZhbHVlCisJCXdyaXR0ZW4uIFVzaW5nIHRoaXMgZmVhdHVyZSB3aWxsIGRlY3JlYXNlIFJNUyBub2lzZSBhbmQKKwkJaW5jcmVhc2UgdGhlIG1lYXN1cmVtZW50IHRpbWUuCisKKwkJUmVhZGluZzogcmV0dXJucyB0aGUgY3VycmVudCBvdmVyc2FtcGxpbmcgc2V0dGluZy4KKworCQlXcml0aW5nOiBzZXRzIGEgbmV3IG92ZXJzYW1wbGluZyBzZXR0aW5nLgorCQlBY2NlcHRlZCB2YWx1ZXM6IDAuLjMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEktSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLUhPV1RPLnR4dAppbmRleCA5OGNlNTE3Li4zYzRlMDcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEktSE9XVE8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS1IT1dUTy50eHQKQEAgLTc1Myw2ICs3NTMsMTYgQEAKICAgIGFsaWdubWVudCBjb25zdHJhaW50cyAoZS5nLiB0aGUgYWxpZ25tZW50IGNvbnN0cmFpbnRzIGFib3V0IDY0LWJpdAogICAgb2JqZWN0cykuCiAKKzMpIFN1cHBvcnRpbmcgbXVsdGlwbGUgdHlwZXMgb2YgSU9NTVVzCisKKyAgIElmIHlvdXIgYXJjaGl0ZWN0dXJlIG5lZWRzIHRvIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgSU9NTVVzLCB5b3UKKyAgIGNhbiB1c2UgaW5jbHVkZS9saW51eC9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1jb21tb24uaC4gSXQncyBhCisgICBsaWJyYXJ5IHRvIHN1cHBvcnQgdGhlIERNQSBBUEkgd2l0aCBtdWx0aXBsZSB0eXBlcyBvZiBJT01NVXMuIExvdHMKKyAgIG9mIGFyY2hpdGVjdHVyZXMgKHg4NiwgcG93ZXJwYywgc2gsIGFscGhhLCBpYTY0LCBtaWNyb2JsYXplIGFuZAorICAgc3BhcmMpIHVzZSBpdC4gQ2hvb3NlIG9uZSB0byBzZWUgaG93IGl0IGNhbiBiZSB1c2VkLiBJZiB5b3UgbmVlZCB0bworICAgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBJT01NVXMgaW4gYSBzaW5nbGUgc3lzdGVtLCB0aGUgZXhhbXBsZSBvZgorICAgeDg2IG9yIHBvd2VycGMgaGVscHMuCisKIAkJCSAgIENsb3NpbmcKIAogVGhpcyBkb2N1bWVudCwgYW5kIHRoZSBBUEkgaXRzZWxmLCB3b3VsZCBub3QgYmUgaW4gaXRzIGN1cnJlbnQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDA1ZTJhZTIuLmZlMjMyNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dApAQCAtNDU2LDEyICs0NTYsNiBAQAogZG1hX2FsbG9jX25vbmNvaGVyZW50KCkpLgogCiBpbnQKLWRtYV9pc19jb25zaXN0ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotCi1SZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBkZXYgaXMgcGVyZm9ybWluZyBjb25zaXN0ZW50IERNQSBvbiB0aGUgbWVtb3J5Ci1hcmVhIHBvaW50ZWQgdG8gYnkgdGhlIGRtYV9oYW5kbGUuCi0KLWludAogZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKIAogUmV0dXJucyB0aGUgcHJvY2Vzc29yIGNhY2hlIGFsaWdubWVudC4gIFRoaXMgaXMgdGhlIGFic29sdXRlIG1pbmltdW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCBjN2U1ZGM3Li4zNDkyOWYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC0zNSw3ICszNSw3IEBACiBQSE9OWSArPSB4bWxkb2NzIHNnbWxkb2NzIHBzZG9jcyBwZGZkb2NzIGh0bWxkb2NzIG1hbmRvY3MgaW5zdGFsbG1hbmRvY3MgY2xlYW5kb2NzIHhtbGRvY2xpbmtzCiAKIEJPT0tTIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChET0NCT09LUykpCi14bWxkb2NzOiAkKEJPT0tTKSB4bWxkb2NsaW5rcworeG1sZG9jczogJChCT09LUykKIHNnbWxkb2NzOiB4bWxkb2NzCiAKIFBTIDo9ICQocGF0c3Vic3QgJS54bWwsICUucHMsICQoQk9PS1MpKQpAQCAtNDUsNyArNDUsNyBAQAogcGRmZG9jczogJChQREYpCiAKIEhUTUwgOj0gJChzb3J0ICQocGF0c3Vic3QgJS54bWwsICUuaHRtbCwgJChCT09LUykpKQotaHRtbGRvY3M6ICQoSFRNTCkKK2h0bWxkb2NzOiAkKEhUTUwpIHhtbGRvY2xpbmtzCiAJJChjYWxsIGJ1aWxkX21haW5faW5kZXgpCiAJJChjYWxsIGJ1aWxkX2ltYWdlcykKIApAQCAtOTUsNyArOTUsNyBAQAogICAgICAgICApID4gJChkaXIgJEApLiQobm90ZGlyICRAKS5jbWQKIGVuZGVmCiAKLSUueG1sOiAlLnRtcGwgRk9SQ0UKKyUueG1sOiAlLnRtcGwgeG1sZG9jbGlua3MgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLGRvY3Byb2MpCiAKICMjIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCAxYjJkZDRmLi5lY2QzNWU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtMTExLDYgKzExMSw3IEBACiA8IS0tCiBYIUVkcml2ZXJzL2Jhc2UvaW50ZXJmYWNlLmMKIC0tPgorIUlpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCiAhRWRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCiAhRWRyaXZlcnMvYmFzZS9idXMuYwogICAgICA8L3NlY3QxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggNDRiM2RlZi4uYTIwYzZmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC0xMzIsNyArMTMyLDYgQEAKICAgICAgPHRpdGxlPkZJRk8gQnVmZmVyPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5rZmlmbyBpbnRlcmZhY2U8L3RpdGxlPgogIUlpbmNsdWRlL2xpbnV4L2tmaWZvLmgKLSFFa2VybmVsL2tmaWZvLmMKICAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2xpcmNfZGV2aWNlX2ludGVyZmFjZS54bWwKaW5kZXggMDQxMzIzNC4uNjgxMzRjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9saXJjX2RldmljZV9pbnRlcmZhY2UueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbGlyY19kZXZpY2VfaW50ZXJmYWNlLnhtbApAQCAtMjI5LDYgKzIyOSwyMiBAQAogICAgICAgYW5kIExJUkNfU0VUVVBfRU5ELiBEcml2ZXJzIGNhbiBhbHNvIGNob29zZSB0byBpZ25vcmUgdGhlc2UgaW9jdGxzLjwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICA8L3Zhcmxpc3RlbnRyeT4KKyAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT5MSVJDX1NFVF9XSURFQkFORF9SRUNFSVZFUjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT5Tb21lIHJlY2VpdmVycyBhcmUgZXF1aXBwZWQgd2l0aCBzcGVjaWFsIHdpZGUgYmFuZCByZWNlaXZlciB3aGljaCBpcyBpbnRlbmRlZAorICAgICAgdG8gYmUgdXNlZCB0byBsZWFybiBvdXRwdXQgb2YgZXhpc3RpbmcgcmVtb3RlLgorICAgICAgQ2FsbGluZyB0aGF0IGlvY3RsIHdpdGggKDEpIHdpbGwgZW5hYmxlIGl0LCBhbmQgd2l0aCAoMCkgZGlzYWJsZSBpdC4KKyAgICAgIFRoaXMgbWlnaHQgYmUgdXNlZnVsIG9mIHJlY2VpdmVycyB0aGF0IGhhdmUgb3RoZXJ3aXNlIG5hcnJvdyBiYW5kIHJlY2VpdmVyCisgICAgICB0aGF0IHByZXZlbnRzIHRoZW0gdG8gYmUgdXNlZCB3aXRoIHNvbWUgcmVtb3Rlcy4KKyAgICAgIFdpZGUgYmFuZCByZWNlaXZlciBtaWdodCBhbHNvIGJlIG1vcmUgcHJlY2lzZQorICAgICAgT24gdGhlIG90aGVyIGhhbmQgaXRzIGRpc2FkdmFudGFnZSBpdCB1c3VhbGx5IHJlZHVjZWQgcmFuZ2Ugb2YgcmVjZXB0aW9uLgorICAgICAgTm90ZTogd2lkZSBiYW5kIHJlY2VpdmVyIG1pZ2h0IGJlIGltcGxpY3RseSBlbmFibGVkIGlmIHlvdSBlbmFibGUKKyAgICAgIGNhcnJpZXIgcmVwb3J0cy4gSW4gdGhhdCBjYXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQgYXMgc29vbiBhcyB5b3UgZGlzYWJsZQorICAgICAgY2FycmllciByZXBvcnRzLiBUcnlpbmcgdG8gZGlzYWJsZSB3aWRlIGJhbmQgcmVjZWl2ZXIgd2hpbGUgY2FycmllcgorICAgICAgcmVwb3J0cyBhcmUgYWN0aXZlIHdpbGwgZG8gbm90aGluZy48L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC92YXJsaXN0ZW50cnk+CiA8L3ZhcmlhYmxlbGlzdD4KIAogPC9zZWN0aW9uPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQtcGFja2VkLXJnYi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbAppbmRleCBkMmRkNjk3Li4yNmU4NzkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC1wYWNrZWQtcmdiLnhtbApAQCAtMjQwLDYgKzI0MCw0NSBAQAogCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUJHUjY2NiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjY2NjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidCR1JIJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgogCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUJHUjI0Ij4KIAkgICAgPGVudHJ5Pjxjb25zdGFudD5WNEwyX1BJWF9GTVRfQkdSMjQ8L2NvbnN0YW50PjwvZW50cnk+CiAJICAgIDxlbnRyeT4nQkdSMyc8L2VudHJ5PgpAQCAtNzAwLDYgKzczOSw0NSBAQAogCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgIDwvcm93PgorCSAgPHJvdyBpZD0iVjRMMi1QSVgtRk1ULUJHUjY2NiI+CisJICAgIDxlbnRyeT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX0JHUjY2NjwvY29uc3RhbnQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PidCR1JIJzwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PmI8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD40PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjU8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgPGVudHJ5PjwvZW50cnk+CisJICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICA8ZW50cnk+PC9lbnRyeT4KKwkgIDwvcm93PgogCSAgPHJvdz48IS0tIGlkPSJWNEwyLVBJWC1GTVQtQkdSMjQiIC0tPgogCSAgICA8ZW50cnk+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9CR1IyNDwvY29uc3RhbnQ+PC9lbnRyeT4KIAkgICAgPGVudHJ5PidCR1IzJzwvZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCA3MjY1MWY3Li42ODllMjM3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTk4LDYgKzk4LDE3IEBACiBJZiB5b3VyIGRlc2NyaXB0aW9uIHN0YXJ0cyB0byBnZXQgbG9uZywgdGhhdCdzIGEgc2lnbiB0aGF0IHlvdSBwcm9iYWJseQogbmVlZCB0byBzcGxpdCB1cCB5b3VyIHBhdGNoLiAgU2VlICMzLCBuZXh0LgogCitXaGVuIHlvdSBzdWJtaXQgb3IgcmVzdWJtaXQgYSBwYXRjaCBvciBwYXRjaCBzZXJpZXMsIGluY2x1ZGUgdGhlCitjb21wbGV0ZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQganVzdGlmaWNhdGlvbiBmb3IgaXQuICBEb24ndCBqdXN0CitzYXkgdGhhdCB0aGlzIGlzIHZlcnNpb24gTiBvZiB0aGUgcGF0Y2ggKHNlcmllcykuICBEb24ndCBleHBlY3QgdGhlCitwYXRjaCBtZXJnZXIgdG8gcmVmZXIgYmFjayB0byBlYXJsaWVyIHBhdGNoIHZlcnNpb25zIG9yIHJlZmVyZW5jZWQKK1VSTHMgdG8gZmluZCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gYW5kIHB1dCB0aGF0IGludG8gdGhlIHBhdGNoLgorSS5lLiwgdGhlIHBhdGNoIChzZXJpZXMpIGFuZCBpdHMgZGVzY3JpcHRpb24gc2hvdWxkIGJlIHNlbGYtY29udGFpbmVkLgorVGhpcyBiZW5lZml0cyBib3RoIHRoZSBwYXRjaCBtZXJnZXIocykgYW5kIHJldmlld2Vycy4gIFNvbWUgcmV2aWV3ZXJzCitwcm9iYWJseSBkaWRuJ3QgZXZlbiByZWNlaXZlIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIHBhdGNoLgorCitJZiB0aGUgcGF0Y2ggZml4ZXMgYSBsb2dnZWQgYnVnIGVudHJ5LCByZWZlciB0byB0aGF0IGJ1ZyBlbnRyeSBieQorbnVtYmVyIGFuZCBVUkwuCiAKIAogMykgU2VwYXJhdGUgeW91ciBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vMDAtSU5ERVgKaW5kZXggYzM0ZTEyNC4uMmRmMDM2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluLzAwLUlOREVYCkBAIC0xLDExICsxLDggQEAKIDAwLUlOREVYCiAJLSBUaGlzIGZpbGUKIAotY2FjaGVmZWF0dXJlcy50eHQKLQktIFN1cHBvcnRlZCBjYWNoZSBmZWF0dXJlcy4KLQotRmlsZXN5c3RlbXMKLQktIFJlcXVpcmVtZW50cyBmb3IgbW91bnRpbmcgdGhlIHJvb3QgZmlsZSBzeXN0ZW0uCi0KLWJmaW4tZ3Bpby1ub3RlLnR4dAorYmZpbi1ncGlvLW5vdGVzLnR4dAogCS0gTm90ZXMgaW4gZGV2ZWxvcGluZy91c2luZyBiZmluLWdwaW8gZHJpdmVyLgorCitiZmluLXNwaS1ub3Rlcy50eHQKKwktIE5vdGVzIGZvciB1c2luZyBiZmluIHNwaSBidXMgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9GaWxlc3lzdGVtcyBiL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vRmlsZXN5c3RlbXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMjYwYTEuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9GaWxlc3lzdGVtcworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogRmlsZTogICAgICAgICBEb2N1bWVudGF0aW9uL2JsYWNrZmluL0ZpbGVzeXN0ZW1zCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKLSAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCi0gKgotICogUmV2OiAgICAgICAgICAkSWQ6IEZpbGVzeXN0ZW1zIDIzODQgMjAwNi0xMS0wMSAwNDoxMjo0M1ogbWFnaWN5YW5nICQKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKi8KLQotCQlIb3cgdG8gbW91bnQgdGhlIHJvb3QgZmlsZSBzeXN0ZW0gaW4gdUNsaW51eC9CbGFja2ZpbgotCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0xCU1vdW50aW5nIEVYVDMgRmlsZSBzeXN0ZW0uCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQlDcmVhdGluZyBhbiBFWFQzIEZpbGUgc3lzdGVtIGZvciB1Q2xpbnV4L0JsYWNrZmluOgotCi0KLVBsZWFzZSBmb2xsb3cgdGhlIHN0ZXBzIHRvIGZvcm0gdGhlIEVYVDMgRmlsZSBzeXN0ZW0gYW5kIG1vdW50IHRoZSBzYW1lIGFzIHJvb3QKLWZpbGUgc3lzdGVtLgotCi1hCU1ha2UgYW4gZXh0MyBmaWxlIHN5c3RlbSBhcyBsYXJnZSBhcyB5b3Ugd2FudCB0aGUgZmluYWwgcm9vdCBmaWxlCi0Jc3lzdGVtLgotCi0JCW1rZnMuZXh0MyAgL2Rldi9yYW0wIDx5b3VyLXJvb3Rmcy1zaXplLWluLTFrLWJsb2Nrcz4KLQotYglNb3VudCB0aGlzIEVtcHR5IGZpbGUgc3lzdGVtIG9uIGEgZnJlZSBkaXJlY3RvcnkgYXM6Ci0KLQkJbW91bnQgLXQgZXh0MyAvZGV2L3JhbTAgIC4vdGVzdAotCQkJd2hlcmUgLi90ZXN0IGlzIHRoZSBlbXB0eSBkaXJlY3RvcnkuCi0KLWMJQ29weSB5b3VyIHJvb3QgZnMgZGlyZWN0b3J5IHRoYXQgeW91IGhhdmUgc28gY2FyZWZ1bGx5IG1hZGUgb3Zlci4KLQotCQljcCAtYWYgIC90bXAvbXlfZmluYWxfcm9vdGZzX2ZpbGVzLyogLi90ZXN0Ci0KLQkJKEZvciBleDogY3AgLWFmIHVDbGludXgtZGlzdC9yb21mcy8qIC4vdGVzdCkKLQotZAlJZiB5b3UgaGF2ZSBkb25lIGV2ZXJ5dGhpbmcgcmlnaHQgdGlsbCBub3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIHNlZQotCXRoZSByZXF1aXJlZCAicm9vdCIgZGlyJ3MgKHRoYXQncyBldGMsIHJvb3QsIGJpbiwgbGliLCBzYmluLi4uKQotCi1lCU5vdyB1bm1vdW50IHRoZSBmaWxlIHN5c3RlbQotCi0JCXVtb3VudCAgLi90ZXN0Ci0KLWYJQ3JlYXRlIHRoZSByb290IGZpbGUgc3lzdGVtIGltYWdlLgotCi0JCWRkIGlmPS9kZXYvcmFtMCBicz0xayBjb3VudD08eW91ci1yb290ZnMtc2l6ZS1pbi0xay1ibG9ja3M+IFwKLQkJPiBleHQzZnMuaW1nCi0KLQotTm93IHlvdSBoYXZlIHRvIHRlbGwgdGhlIGtlcm5lbCB0aGF0IHdpbGwgYmUgbW91bnRpbmcgdGhpcyBmaWxlIHN5c3RlbSBhcwotcm9vdGZzLgotU28gZG8gYSBtYWtlIG1lbnVjb25maWcgdW5kZXIga2VybmVsIGFuZCBzZWxlY3QgdGhlIEV4dDMgam91cm5hbGluZyBmaWxlIHN5c3RlbQotc3VwcG9ydCB1bmRlciBGaWxlIHN5c3RlbSAtLT4gc3VibWVudS4KLQotCi0yLglNb3VudGluZyBFWFQyIEZpbGUgc3lzdGVtLgotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQnkgZGVmYXVsdCB0aGUgZXh0MiBmaWxlIHN5c3RlbSBpbWFnZSB3aWxsIGJlIGNyZWF0ZWQgaWYgeW91IGludm9rZSBtYWtlIGZyb20KLXRoZSB0b3AgdUNsaW51eC1kaXN0IGRpcmVjdG9yeS4KLQotCi0zLglNb3VudGluZyBDUkFNRlMgRmlsZSBTeXN0ZW0KLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGNyZWF0ZSBhIENSQU1GUyBmaWxlIHN5c3RlbSBpbWFnZSBleGVjdXRlIHRoZSBjb21tYW5kCi0KLQlta2ZzLmNyYW1mcyAuL3Rlc3QgY3JhbWZzLmltZwotCi0Jd2hlcmUgLi90ZXN0IGlzIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgotCi0KLTQuCU1vdW50aW5nIFJPTUZTIEZpbGUgU3lzdGVtCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gY3JlYXRlIGEgUk9NRlMgZmlsZSBzeXN0ZW0gaW1hZ2UgZXhlY3V0ZSB0aGUgY29tbWFuZAotCi0JZ2Vucm9tZnMgLXYgLVYgIlJPTWRpc2siIC1mIHJvbWZzLmltZyAtZCAuL3Rlc3QKLQotCXdoZXJlIC4vdGVzdCBpcyB0aGUgdGFyZ2V0IGRpcmVjdG9yeQotCi0KLTUuCU1vdW50aW5nIHRoZSBKRkZTMiBGaWxlc3lzdGVtCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gY3JlYXRlIGEgY29tcHJlc3NlZCBKRkZTIGZpbGVzeXN0ZW0gKEpGRlMyKSwgcGxlYXNlIGV4ZWN1dGUgdGhlIGNvbW1hbmQKLQotCW1rZnMuamZmczIgLWQgLi90ZXN0IC1vIGpmZnMyLmltZwotCi0Jd2hlcmUgLi90ZXN0IGlzIHRoZSB0YXJnZXQgZGlyZWN0b3J5LgotCi1Ib3dldmVyLCBwbGVhc2UgbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgaXMgaW4geW91ciBrZXJuZWwgY29uZmlnLgotCi0vKgotICogUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSAqLwotI2RlZmluZSBDT05GSUdfTVREX0NGSSAxCi0jZGVmaW5lIENPTkZJR19NVERfUk9NIDEKLS8qCi0gKiBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0gKi8KLSNkZWZpbmUgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIDEKLSNkZWZpbmUgQ09ORklHX01URF9CRjUzMyAxCi0jdW5kZWYgQ09ORklHX01URF9VQ0xJTlVYCi0KLVRocm91Z2ggdGhlIHUtYm9vdCBib290IGxvYWRlciwgdXNlIHRoZSBqZmZzMi5pbWcgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLXBhcnRpdGlvbiBtYWRlIGluIGxpbnV4LTIuNi54L2RyaXZlcnMvbXRkL21hcHMvYmY1MzNfZmxhc2guYy4KLQotTk9URSAtIAlDdXJyZW50bHkgdGhlIEZsYXNoIGRyaXZlciBpcyBhdmFpbGFibGUgb25seSBmb3IgRVpLSVQuIFdhdGNoIG91dCBmb3IgYQotCVNUQU1QIGRyaXZlciBzb29uLgotCi0KLTYuIAlNb3VudGluZyB0aGUgTkZTIEZpbGUgc3lzdGVtCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCUZvciBtb3VudGluZyB0aGUgTkZTIHBsZWFzZSBkbyB0aGUgZm9sbG93aW5nIGluIHRoZSBrZXJuZWwgY29uZmlnLgotCi0JSW4gTmV0d29ya2luZyBTdXBwb3J0IC0tPiBOZXR3b3JraW5nIG9wdGlvbnMgLS0+IFRDUC9JUCBuZXR3b3JraW5nIC0tPgotCQlJUDoga2VybmVsIGxldmVsIGF1dG9jb25maWd1cmF0aW9uCi0KLQlFbmFibGUgQk9PVFAgU3VwcG9ydC4KLQotCUluIEtlcm5lbCBoYWNraW5nIC0tPiBDb21waWxlZC1pbiBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgYWRkIHRoZSBmb2xsb3dpbmcKLQotCQlyb290PS9kZXYvbmZzIHJ3IGlwPWJvb3RwCi0KLQlJbiBGaWxlIHN5c3RlbSAtLT4gTmV0d29yayBGaWxlIHN5c3RlbSwgRW5hYmxlCi0KLQkJTkZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgLS0+IE5GU3YzIGNsaWVudCBzdXBwb3J0Ci0JCVJvb3QgRmlsZSBzeXN0ZW0gb24gTkZTCi0KLQlpbiB1Q2xpYmMgbWVudWNvbmZpZywgZG8gdGhlIGZvbGxvd2luZwotCUluIE5ldHdvcmtpbmcgU3VwcG9ydAotCQllbmFibGUgUmVtb3RlIFByb2NlZHVyZSBDYWxsIChSUEMpIHN1cHBvcnQKLQkJCUZ1bGwgUlBDIFN1cHBvcnQKLQotCU9uIHRoZSBIb3N0IHNpZGUsIGVuc3VyZSB0aGF0IC9ldGMvZGhjcGQuY29uZiBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzCi0KLQkJZGRucy11cGRhdGUtc3R5bGUgYWQtaG9jOwotCQlhbGxvdyBib290cDsKLQkJc3VibmV0IDEwLjEwMC40LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKLQkJZGVmYXVsdC1sZWFzZS10aW1lIDEyMjIwOTYwMDsKLQkJbWF4LWxlYXNlLXRpbWUgMzE1NTc2MDA7Ci0JCWdyb3VwIHsKLQkJCWhvc3QgYmY1MzMgewotCQkJCWhhcmR3YXJlIGV0aGVybmV0IDAwOkNGOjUyOjQ5OkMzOjAxOwotCQkJCWZpeGVkLWFkZHJlc3MgMTAuMTAwLjQuNTA7Ci0JCQkJb3B0aW9uIHJvb3QtcGF0aCAiL2hvbWUvbmZzbW91bnQiOwotCQkJfQotCQl9Ci0KLQllbnN1cmUgdGhhdCAvZXRjL2V4cG9ydHMgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpcwotCQkvaG9tZS9uZnNtb3VudCAqKHJ3LG5vX3Jvb3Rfc3F1YXNoLG5vX2FsbF9zcXVhc2gpCi0KLQkgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXMgcm9vdCAobWF5IGRpZmZlciBkZXBlbmRpbmcgb24geW91cgotCSBkaXN0cmlidXRpb24pIDoKLQkJLSAgc2VydmljZSBuZnMgc3RhcnQKLQkJLSAgc2VydmljZSBwb3J0bWFwIHN0YXJ0Ci0JCS0gIHNlcnZpY2UgZGhjcGQgc3RhcnQKLQkJLSAgL3Vzci9zYmluL2V4cG9ydGZzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2JmaW4tc3BpLW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vYmZpbi1zcGktbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NmZhODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2JmaW4tc3BpLW5vdGVzLnR4dApAQCAtMCwwICsxLDE0IEBACitTUEkgQ2hpcCBTZWxlY3QgYmVoYXZpb3I6CisKK1dpdGggdGhlIEJsYWNrZmluIG9uLWNoaXAgU1BJIHBlcmlwaGVyYWwsIHRoZXJlIGlzIHNvbWUgbG9naWMgdGllZCB0byB0aGUgQ1BIQQorYml0IHdoZXRoZXIgdGhlIFNsYXZlIFNlbGVjdCBMaW5lIGlzIGNvbnRyb2xsZWQgYnkgaGFyZHdhcmUgKENQSEE9MCkgb3IKK2NvbnRyb2xsZWQgYnkgc29mdHdhcmUgKENQSEE9MSkuIEhvd2V2ZXIsIHRoZSBMaW51eCBTUEkgYnVzIGRyaXZlciBhc3N1bWVzIHRoYXQKK3RoZSBTbGF2ZSBTZWxlY3QgaXMgYWx3YXlzIHVuZGVyIHNvZnR3YXJlIGNvbnRyb2wgYW5kIGJlaW5nIGFzc2VydGVkIGR1cmluZwordGhlIGVudGlyZSBTUEkgdHJhbnNmZXIuIC0gQW5kIG5vdCBqdXN0IGJpdHNfcGVyX3dvcmQgZHVyYXRpb24uCisKK0luIG1vc3QgY2FzZXMgeW91IGNhbiB1dGlsaXplIFNQSSBNT0RFXzMgaW5zdGVhZCBvZiBNT0RFXzAgdG8gd29yay1hcm91bmQgdGhpcworYmVoYXZpb3IuIElmIHlvdXIgU1BJIHNsYXZlIGRldmljZSBpbiBxdWVzdGlvbiByZXF1aXJlcyBTUEkgTU9ERV8wIG9yIE1PREVfMgordGltaW5nLCB5b3UgY2FuIHV0aWxpemUgdGhlIEdQSU8gY29udHJvbGxlZCBTUEkgU2xhdmUgU2VsZWN0IG9wdGlvbiBpbnN0ZWFkLgorCitZb3UgY2FuIGV2ZW4gdXNlIHRoZSBzYW1lIHBpbiB3aG9zZSBwZXJpcGhlcmFsIHJvbGUgaXMgYSBTU0VMLAorYnV0IHVzZSBpdCBhcyBhIEdQSU8gaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vY2FjaGVmZWF0dXJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlZmVhdHVyZXMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWRlNTFmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vY2FjaGVmZWF0dXJlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogRmlsZTogICAgICAgICBEb2N1bWVudGF0aW9uL2JsYWNrZmluL2NhY2hlZmVhdHVyZXMudHh0Ci0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKLSAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCi0gKgotICogUmV2OiAgICAgICAgICAkSWQ6IGNhY2hlZmVhdHVyZXMudHh0IDIzODQgMjAwNi0xMS0wMSAwNDoxMjo0M1ogbWFnaWN5YW5nICQKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKi8KLQotCS0gSW5zdHJ1Y3Rpb24gYW5kIERhdGEgY2FjaGUgaW5pdGlhbGl6YXRpb24uCi0JCWljYWNoZV9pbml0KCk7Ci0JCWRjYWNoZV9pbml0KCk7Ci0KLQktICBJbnN0cnVjdGlvbiBhbmQgRGF0YSBjYWNoZSBJbnZhbGlkYXRpb24gUm91dGluZXMsIHdoZW4gZmx1c2hpbmcgdGhlCi0JICAgc2FtZSBpcyBub3QgcmVxdWlyZWQuCi0JCV9pY2FjaGVfaW52YWxpZGF0ZSgpOwotCQlfZGNhY2hlX2ludmFsaWRhdGUoKTsKLQotCUFsc28sIGZvciBpbnZhbGlkYXRpbmcgdGhlIGVudGlyZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZSwgdGhlIGJlbG93Ci0Jcm91dGluZXMgYXJlIHByb3ZpZGVkIChhbm90aGVyIG1ldGhvZCBmb3IgaW52YWxpZGF0aW9uLCByZWZlciBwYWdlIG5vIDI2NyBhbmQgMjg3IG9mCi0JQURTUC1CRjUzMyBIYXJkd2FyZSBSZWZlcmVuY2UgbWFudWFsKQotCi0JCWludmFsaWRhdGVfZW50aXJlX2RjYWNoZSgpOwotCQlpbnZhbGlkYXRlX2VudGlyZV9pY2FjaGUoKTsKLQotCS1FeHRlcm5hbCBGbHVzaGluZyBvZiBJbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZSByb3V0aW5lcy4KLQotCQlmbHVzaF9pbnN0cnVjdGlvbl9jYWNoZSgpOwotCQlmbHVzaF9kYXRhX2NhY2hlKCk7Ci0KLQktIEludGVybmFsIEZsdXNoaW5nIG9mIEluc3RydWN0aW9uIGFuZCBEYXRhIENhY2hlLgotCi0JCWljcGxiX2ZsdXNoKCk7Ci0JCWRjcGxiX2ZsdXNoKCk7Ci0KLQktIE1pc2NlbGxhbmVvdXMgY2FjaGUgZnVuY3Rpb25zLgotCi0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCQlmbHVzaF9jYWNoZV9tbSgpOwotCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgpOwotCQlmbHVzaF9kY2FjaGVfcmFuZ2UoKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UoKTsKLQkJZmx1c2hfY2FjaGVfcmFuZ2UoKTsKLQkJZmx1c2hfY2FjaGVfcGFnZSgpOwotCQlpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSgpOwotCQlmbHVzaF9wYWdlX3RvX3JhbSgpOwotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggYmU3MDMwZS4uODQyYWE5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMTE2LDI5ICsxMTYsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG5lZWRlZCBmb3IgcGNtY2lhLWNzIFtjYXJkbWdyLCBjYXJkY3RsXSkKLVdoZW46CTIuNi4zNS8yLjYuMzYKLUZpbGVzOglkcml2ZXJzL3BjbWNpYS86IHBjbWNpYV9pb2N0bC5jCi1XaHk6CVdpdGggdGhlIDE2LWJpdCBQQ01DSUEgc3Vic3lzdGVtIG5vdyBiZWhhdmluZyAoYWxtb3N0KSBsaWtlIGEKLQlub3JtYWwgaG90cGx1Z2dhYmxlIGJ1cywgYW5kIHdpdGggaXQgdXNpbmcgdGhlIGRlZmF1bHQga2VybmVsCi0JaW5mcmFzdHJ1Y3R1cmUgKGhvdHBsdWcsIGRyaXZlciBjb3JlLCBzeXNmcykga2VlcGluZyB0aGUgUENNQ0lBCi0JY29udHJvbCBpb2N0bCBuZWVkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBmcm9tIHBjbWNpYS1jcyBpcwotCXVubmVjZXNzYXJ5IGFuZCBwb3RlbnRpYWxseSBoYXJtZnVsIChpdCBkb2VzIG5vdCBwcm92aWRlIGZvcgotCXByb3BlciBsb2NraW5nKSwgYW5kIG1ha2VzIGZ1cnRoZXIgY2xlYW51cHMgYW5kIGludGVncmF0aW9uIG9mIHRoZQotCVBDTUNJQSBzdWJzeXN0ZW0gaW50byB0aGUgTGludXgga2VybmVsIGRldmljZSBkcml2ZXIgbW9kZWwgbW9yZQotCWRpZmZpY3VsdC4gVGhlIGZlYXR1cmVzIHByb3ZpZGVkIGJ5IGNhcmRtZ3IgYW5kIGNhcmRjdGwgYXJlIGVpdGhlcgotCWhhbmRsZWQgYnkgdGhlIGtlcm5lbCBpdHNlbGYgbm93IG9yIGFyZSBhdmFpbGFibGUgaW4gdGhlIG5ldwotCXBjbWNpYXV0aWxzIHBhY2thZ2UgYXZhaWxhYmxlIGF0Ci0JaHR0cDovL2tlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9wY21jaWEvCi0KLQlGb3IgYWxsIGFyY2hpdGVjdHVyZXMgZXhjZXB0IEFSTSwgdGhlIGFzc29jaWF0ZWQgY29uZmlnIHN5bWJvbAotCWhhcyBiZWVuIHJlbW92ZWQgZnJvbSBrZXJuZWwgMi42LjM0OyBmb3IgQVJNLCBpdCB3aWxsIGJlIGxpa2VseQotCWJlIHJlbW92ZWQgZnJvbSBrZXJuZWwgMi42LjM1LiBUaGUgYWN0dWFsIGNvZGUgd2lsbCB0aGVuIGxpa2VseQotCWJlIHJlbW92ZWQgZnJvbSBrZXJuZWwgMi42LjM2LgotV2hvOglEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglzeXNfc3lzY3RsCiBXaGVuOglTZXB0ZW1iZXIgMjAxMAogT3B0aW9uOiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKQEAgLTE3NCw2ICsxNTEsMzEgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CS9wcm9jLzxwaWQ+L29vbV9hZGoKK1doZW46CUF1Z3VzdCAyMDEyCitXaHk6CS9wcm9jLzxwaWQ+L29vbV9hZGogYWxsb3dzIHVzZXJzcGFjZSB0byBpbmZsdWVuY2UgdGhlIG9vbSBraWxsZXIncworCWJhZG5lc3MgaGV1cmlzdGljIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHRhc2sgdG8ga2lsbCB3aGVuIHRoZSBrZXJuZWwKKwlpcyBvdXQgb2YgbWVtb3J5LgorCisJVGhlIGJhZG5lc3MgaGV1cmlzdGljIGhhcyBzaW5jZSBiZWVuIHJld3JpdHRlbiBzaW5jZSB0aGUgaW50cm9kdWN0aW9uIG9mCisJdGhpcyB0dW5hYmxlIHN1Y2ggdGhhdCBpdHMgbWVhbmluZyBpcyBkZXByZWNhdGVkLiAgVGhlIHZhbHVlIHdhcworCWltcGxlbWVudGVkIGFzIGEgYml0c2hpZnQgb24gYSBzY29yZSBnZW5lcmF0ZWQgYnkgdGhlIGJhZG5lc3MoKQorCWZ1bmN0aW9uIHRoYXQgZGlkIG5vdCBoYXZlIGFueSBwcmVjaXNlIHVuaXRzIG9mIG1lYXN1cmUuICBXaXRoIHRoZQorCXJld3JpdGUsIHRoZSBzY29yZSBpcyBnaXZlbiBhcyBhIHByb3BvcnRpb24gb2YgYXZhaWxhYmxlIG1lbW9yeSB0byB0aGUKKwl0YXNrIGFsbG9jYXRpbmcgcGFnZXMsIHNvIHVzaW5nIGEgYml0c2hpZnQgd2hpY2ggZ3Jvd3MgdGhlIHNjb3JlCisJZXhwb25lbnRpYWxseSBpcywgdGh1cywgaW1wb3NzaWJsZSB0byB0dW5lIHdpdGggZmluZSBncmFudWxhcml0eS4KKworCUEgbXVjaCBtb3JlIHBvd2VyZnVsIGludGVyZmFjZSwgL3Byb2MvPHBpZD4vb29tX3Njb3JlX2Fkaiwgd2FzCisJaW50cm9kdWNlZCB3aXRoIHRoZSBvb20ga2lsbGVyIHJld3JpdGUgdGhhdCBhbGxvd3MgdXNlcnMgdG8gaW5jcmVhc2Ugb3IKKwlkZWNyZWFzZSB0aGUgYmFkbmVzcygpIHNjb3JlIGxpbmVhcmx5LiAgVGhpcyBpbnRlcmZhY2Ugd2lsbCByZXBsYWNlCisJL3Byb2MvPHBpZD4vb29tX2Fkai4KKworCUEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWQgdG8gdGhlIGtlcm5lbCBsb2cgaWYgYW4gYXBwbGljYXRpb24gdXNlcyB0aGlzCisJZGVwcmVjYXRlZCBpbnRlcmZhY2UuICBBZnRlciBpdCBpcyBwcmludGVkIG9uY2UsIGZ1dHVyZSB3YXJuaW5ncyB3aWxsIGJlCisJc3VwcHJlc3NlZCB1bnRpbCB0aGUga2VybmVsIGlzIHJlYm9vdGVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDoJcmVtb3ZlIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCkKIFdoZW46CUF1Z3VzdCAyMDA2CiBGaWxlczoJYXJjaC8qL2tlcm5lbC8qX2tzeW1zLmMKQEAgLTM1OCwxNCArMzYwLDYgQEAKIFdoeToJU2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHVzZXJzcGFjZSwgcG9saWN5IGRhZW1vbi4KIFdobzoJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoYXQ6CUNPTkZJR19JTk9USUZZCi1XaGVuOgkyLjYuMzMKLVdoeToJbGFzdCB1c2VyIChhdWRpdCkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIG5ld2VyIG1vcmUgZ2VuZXJpYwotCWFuZCBtb3JlIGVhc2lseSBtYWludGFpbmVkIGZzbm90aWZ5IHN1YnN5c3RlbQotV2hvOglFcmljIFBhcmlzIDxlcGFyaXNAcmVkaGF0LmNvbT4KLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0Oglzb3VuZC1zbG90L3NlcnZpY2UtKiBtb2R1bGUgYWxpYXNlcyBhbmQgcmVsYXRlZCBjbHV0dGVycyBpbgpAQCAtNDY4LDE2ICs0NjIsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CXh0aW1lLCB3YWxsX3RvX21vbm90b25pYwotV2hlbjoJMi42LjM2KwotRmlsZXM6CWtlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgaW5jbHVkZS9saW51eC90aW1lLmgKLVdoeToJQ2xlYW5pbmcgdXAgdGltZWtlZXBpbmcgaW50ZXJuYWwgdmFsdWVzLiBQbGVhc2UgdXNlCi0JZXhpc3RpbmcgdGltZWtlZXBpbmcgYWNjZXNzb3IgZnVuY3Rpb25zIHRvIGFjY2VzcwotCXRoZSBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkuCi1XaG86CUpvaG4gU3R1bHR6IDxqb2huc3R1bEB1cy5pYm0uY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CUtWTSBwYXJhdmlydCBtbXUgaG9zdCBzdXBwb3J0CiBXaGVuOglKYW51YXJ5IDIwMTEKIFdoeToJVGhlIHBhcmF2aXJ0IG1tdSBob3N0IHN1cHBvcnQgaXMgc2xvd2VyIHRoYW4gbm9uLXBhcmF2aXJ0IG1tdSwgYm90aApAQCAtNTYzLDMgKzU0NywyMCBAQAogV2hvOglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDogCVBDSSBETUEgdW5tYXAgc3RhdGUgQVBJCitXaGVuOglBdWd1c3QgMjAxMgorV2h5OglQQ0kgRE1BIHVubWFwIHN0YXRlIEFQSSAoaW5jbHVkZS9saW51eC9wY2ktZG1hLmgpIHdhcyByZXBsYWNlZAorCXdpdGggRE1BIHVubWFwIHN0YXRlIEFQSSAoRE1BIHVubWFwIHN0YXRlIEFQSSBjYW4gYmUgdXNlZCBmb3IKKwlhbnkgYnVzKS4KK1dobzoJRlVKSVRBIFRvbW9ub3JpIDxmdWppdGEudG9tb25vcmlAbGFiLm50dC5jby5qcD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OiAJRE1BX3h4QklUX01BU0sgbWFjcm9zCitXaGVuOglKdW4gMjAxMQorV2h5OglETUFfeHhCSVRfTUFTSyBtYWNyb3Mgd2VyZSByZXBsYWNlZCB3aXRoIERNQV9CSVRfTUFTSygpIG1hY3Jvcy4KK1dobzoJRlVKSVRBIFRvbW9ub3JpIDxmdWppdGEudG9tb25vcmlAbGFiLm50dC5jby5qcD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggOTZkNDI5My4uYmJjYzE1NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtOTIsOCArOTIsOCBAQAogCXZvaWQgKCpkZXN0cm95X2lub2RlKShzdHJ1Y3QgaW5vZGUgKik7CiAJdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOwogCWludCAoKndyaXRlX2lub2RlKSAoc3RydWN0IGlub2RlICosIGludCk7Ci0Jdm9pZCAoKmRyb3BfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7Ci0Jdm9pZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKKwlpbnQgKCpkcm9wX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCXZvaWQgKCpldmljdF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKIAl2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCXZvaWQgKCp3cml0ZV9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIAlpbnQgKCpzeW5jX2ZzKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CkBAIC0xMDEsMTQgKzEwMSwxMyBAQAogCWludCAoKnVuZnJlZXplX2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKnN0YXRmcykgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiAJaW50ICgqcmVtb3VudF9mcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKLQl2b2lkICgqY2xlYXJfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAJdm9pZCAoKnVtb3VudF9iZWdpbikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIAlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CiAJc3NpemVfdCAoKnF1b3RhX3JlYWQpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QpOwogCXNzaXplX3QgKCpxdW90YV93cml0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CiAKIGxvY2tpbmcgcnVsZXM6Ci0JQWxsIG1heSBibG9jay4KKwlBbGwgbWF5IGJsb2NrIFtub3QgdHJ1ZSwgc2VlIGJlbG93XQogCU5vbmUgaGF2ZSBCS0wKIAkJCXNfdW1vdW50CiBhbGxvY19pbm9kZToKQEAgLTExNiwyMiArMTE1LDI1IEBACiBkaXJ0eV9pbm9kZToJCQkJKG11c3Qgbm90IHNsZWVwKQogd3JpdGVfaW5vZGU6CiBkcm9wX2lub2RlOgkJCQkhISFpbm9kZV9sb2NrISEhCi1kZWxldGVfaW5vZGU6CitldmljdF9pbm9kZToKIHB1dF9zdXBlcjoJCXdyaXRlCiB3cml0ZV9zdXBlcjoJCXJlYWQKIHN5bmNfZnM6CQlyZWFkCiBmcmVlemVfZnM6CQlyZWFkCiB1bmZyZWV6ZV9mczoJCXJlYWQKLXN0YXRmczoJCQlubwotcmVtb3VudF9mczoJCW1heWJlCQkoc2VlIGJlbG93KQotY2xlYXJfaW5vZGU6CitzdGF0ZnM6CQkJbWF5YmUocmVhZCkJKHNlZSBiZWxvdykKK3JlbW91bnRfZnM6CQl3cml0ZQogdW1vdW50X2JlZ2luOgkJbm8KIHNob3dfb3B0aW9uczoJCW5vCQkobmFtZXNwYWNlX3NlbSkKIHF1b3RhX3JlYWQ6CQlubwkJKHNlZSBiZWxvdykKIHF1b3RhX3dyaXRlOgkJbm8JCShzZWUgYmVsb3cpCiAKLS0+cmVtb3VudF9mcygpIHdpbGwgaGF2ZSB0aGUgc191bW91bnQgZXhjbHVzaXZlIGxvY2sgaWYgaXQncyBhbHJlYWR5IG1vdW50ZWQuCi1XaGVuIGNhbGxlZCBmcm9tIGdldF9zYl9zaW5nbGUsIGl0IGRvZXMgTk9UIGhhdmUgdGhlIHNfdW1vdW50IGxvY2suCistPnN0YXRmcygpIGhhcyBzX3Vtb3VudCAoc2hhcmVkKSB3aGVuIGNhbGxlZCBieSB1c3RhdCgyKSAobmF0aXZlIG9yCitjb21wYXQpLCBidXQgdGhhdCdzIGFuIGFjY2lkZW50IG9mIGJhZCBBUEk7IHNfdW1vdW50IGlzIHVzZWQgdG8gcGluCit0aGUgc3VwZXJibG9jayBkb3duIHdoZW4gd2Ugb25seSBoYXZlIGRldl90IGdpdmVuIHVzIGJ5IHVzZXJsYW5kIHRvCitpZGVudGlmeSB0aGUgc3VwZXJibG9jay4gIEV2ZXJ5dGhpbmcgZWxzZSAoc3RhdGZzKCksIGZzdGF0ZnMoKSwgZXRjLikKK2RvZXNuJ3QgaG9sZCBpdCB3aGVuIGNhbGxpbmcgLT5zdGF0ZnMoKSAtIHN1cGVyYmxvY2sgaXMgcGlubmVkIGRvd24KK2J5IHJlc29sdmluZyB0aGUgcGF0aG5hbWUgcGFzc2VkIHRvIHN5c2NhbGwuCiAtPnF1b3RhX3JlYWQoKSBhbmQgLT5xdW90YV93cml0ZSgpIGZ1bmN0aW9ucyBhcmUgYm90aCBndWFyYW50ZWVkIHRvCiBiZSB0aGUgb25seSBvbmVzIG9wZXJhdGluZyBvbiB0aGUgcXVvdGEgZmlsZSBieSB0aGUgcXVvdGEgY29kZSAodmlhCiBkcWlvX3NlbSkgKHVubGVzcyBhbiBhZG1pbiByZWFsbHkgd2FudHMgdG8gc2NyZXcgdXAgc29tZXRoaW5nIGFuZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0CmluZGV4IGE5MWUyZTIuLjc3MDI2N2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQKQEAgLTM0Myw4ICszNDMsOCBAQAogCVtyb290QGFuZHJvbWVkYSB+XSMgaGVhZCAvcHJvYy9mcy9mc2NhY2hlL29iamVjdHMKIAlPQkpFQ1QgICBQQVJFTlQgICBTVEFUIENITEROIE9QUyBPT1AgSVBSIEVYIFJFQURTIEVNIEVWIEYgUyB8IE5FVEZTX0NPT0tJRV9ERUYgVFkgRkwgTkVURlNfREFUQSAgICAgICBPQkpFQ1RfS0VZLCBBVVhfREFUQQogCT09PT09PT09ID09PT09PT09ID09PT0gPT09PT0gPT09ID09PSA9PT0gPT0gPT09PT0gPT0gPT0gPSA9IHwgPT09PT09PT09PT09PT09PSA9PSA9PSA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT0KLQkgICAxN2U0YiAgICAgICAgMiBBQ1RWICAgICAwICAgMCAgIDAgICAwICAwICAgICAwIDdiICA0IDAgOCB8IE5GUy5maCAgICAgICAgICAgRFQgIDAgZmZmZjg4MDAxZGQ4MjgyMCAwMTAwMDYwMTdlZGNmOGJiYzkzYjQzMjk4ZmRmYmU3MWU1MGI1N2IxM2ExNzJjMDExN2YzODQ3MiwgZTU2NzYzNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2M2YyNDA0YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGM5MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDYzZjI0MDRhCi0JICAgMTY5M2EgICAgICAgIDIgQUNUViAgICAgMCAgIDAgICAwICAgMCAgMCAgICAgMCA3YiAgNCAwIDggfCBORlMuZmggICAgICAgICAgIERUICAwIGZmZmY4ODAwMmRiMjMzODAgMDEwMDA2MDE3ZWRjZjhiYmM5M2I0MzI5OGZkZmJlNzFlNTBiNTdiMWUwMTYyYzAxYTJkZjBlYTYsIDQyMGViYzRhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIwZWJjNGEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZTE4MDEwMDAwMDAwMDAwMDAwMDAwMDA0MjBlYmM0YQorCSAgIDE3ZTRiICAgICAgICAyIEFDVFYgICAgIDAgICAwICAgMCAgIDAgIDAgICAgIDAgN2IgIDQgMCAwIHwgTkZTLmZoICAgICAgICAgICBEVCAgMCBmZmZmODgwMDFkZDgyODIwIDAxMDAwNjAxN2VkY2Y4YmJjOTNiNDMyOThmZGZiZTcxZTUwYjU3YjEzYTE3MmMwMTE3ZjM4NDcyLCBlNTY3NjM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzZjI0MDRhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzkwMzAwMDAwMDAwMDAwMDAwMDAwMDAwNjNmMjQwNGEKKwkgICAxNjkzYSAgICAgICAgMiBBQ1RWICAgICAwICAgMCAgIDAgICAwICAwICAgICAwIDdiICA0IDAgMCB8IE5GUy5maCAgICAgICAgICAgRFQgIDAgZmZmZjg4MDAyZGIyMzM4MCAwMTAwMDYwMTdlZGNmOGJiYzkzYjQzMjk4ZmRmYmU3MWU1MGI1N2IxZTAxNjJjMDFhMmRmMGVhNiwgNDIwZWJjNGEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MjBlYmM0YTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBlMTgwMTAwMDAwMDAwMDAwMDAwMDAwMDQyMGViYzRhCiAKIHdoZXJlIHRoZSBmaXJzdCBzZXQgb2YgY29sdW1ucyBiZWZvcmUgdGhlICd8JyBkZXNjcmliZSB0aGUgb2JqZWN0OgogCkBAIC0zNjIsNyArMzYyLDcgQEAKIAlFTQlPYmplY3QncyBldmVudCBtYXNrCiAJRVYJRXZlbnRzIHJhaXNlZCBvbiB0aGlzIG9iamVjdAogCUYJT2JqZWN0IGZsYWdzCi0JUwlPYmplY3Qgc2xvdy13b3JrIHdvcmsgaXRlbSBmbGFncworCVMJT2JqZWN0IHdvcmsgaXRlbSBidXN5IHN0YXRlIG1hc2sgKDE6cGVuZGluZyAyOnJ1bm5pbmcpCiAKIGFuZCB0aGUgc2Vjb25kIHNldCBvZiBjb2x1bW5zIGRlc2NyaWJlIHRoZSBvYmplY3QncyBjb29raWUsIGlmIHByZXNlbnQ6CiAKQEAgLTM5NSw4ICszOTUsOCBAQAogCXcJU2hvdyBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBwZW5kaW5nIHdyaXRlcwogCVIJU2hvdyBvYmplY3RzIHRoYXQgaGF2ZSBvdXRzdGFuZGluZyByZWFkcwogCXIJU2hvdyBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBvdXRzdGFuZGluZyByZWFkcwotCVMJU2hvdyBvYmplY3RzIHRoYXQgaGF2ZSBzbG93IHdvcmsgcXVldWVkCi0JcwlTaG93IG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIHNsb3cgd29yayBxdWV1ZWQKKwlTCVNob3cgb2JqZWN0cyB0aGF0IGhhdmUgd29yayBxdWV1ZWQKKwlzCVNob3cgb2JqZWN0cyB0aGF0IGRvbid0IGhhdmUgd29yayBxdWV1ZWQKIAogSWYgbmVpdGhlciBzaWRlIG9mIGEgbGV0dGVyIHBhaXIgaXMgZ2l2ZW4sIHRoZW4gYm90aCBhcmUgaW1wbGllZC4gIEZvciBleGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKaW5kZXggZDNlNzY3My4uZDVjMGNlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uaWxmczIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dApAQCAtNDksNyArNDksMTAgQEAKIE5JTEZTMiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIG1vdW50IG9wdGlvbnM6CiAoKikgPT0gZGVmYXVsdAogCi1ub2JhcnJpZXIJCURpc2FibGVzIGJhcnJpZXJzLgorYmFycmllcigqKQkJVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1c2Ugb2Ygd3JpdGUgYmFycmllcnMuICBUaGlzCitub2JhcnJpZXIJCXJlcXVpcmVzIGFuIElPIHN0YWNrIHdoaWNoIGNhbiBzdXBwb3J0IGJhcnJpZXJzLCBhbmQKKwkJCWlmIG5pbGZzIGdldHMgYW4gZXJyb3Igb24gYSBiYXJyaWVyIHdyaXRlLCBpdCB3aWxsCisJCQlkaXNhYmxlIGFnYWluIHdpdGggYSB3YXJuaW5nLgogZXJyb3JzPWNvbnRpbnVlCQlLZWVwIGdvaW5nIG9uIGEgZmlsZXN5c3RlbSBlcnJvci4KIGVycm9ycz1yZW1vdW50LXJvKCopCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgogZXJyb3JzPXBhbmljCQlQYW5pYyBhbmQgaGFsdCB0aGUgbWFjaGluZSBpZiBhbiBlcnJvciBvY2N1cnMuCkBAIC03NCw5ICs3NywxMCBAQAogCQkJVGhpcyBkaXNhYmxlcyBldmVyeSB3cml0ZSBhY2Nlc3Mgb24gdGhlIGRldmljZSBmb3IKIAkJCXJlYWQtb25seSBtb3VudHMgb3Igc25hcHNob3RzLiAgVGhpcyBvcHRpb24gd2lsbCBmYWlsCiAJCQlmb3Igci93IG1vdW50cyBvbiBhbiB1bmNsZWFuIHZvbHVtZS4KLWRpc2NhcmQJCQlJc3N1ZSBkaXNjYXJkL1RSSU0gY29tbWFuZHMgdG8gdGhlIHVuZGVybHlpbmcgYmxvY2sKLQkJCWRldmljZSB3aGVuIGJsb2NrcyBhcmUgZnJlZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3IgU1NECi0JCQlkZXZpY2VzIGFuZCBzcGFyc2UvdGhpbmx5LXByb3Zpc2lvbmVkIExVTnMuCitkaXNjYXJkCQkJVGhpcyBlbmFibGVzL2Rpc2FibGVzIHRoZSB1c2Ugb2YgZGlzY2FyZC9UUklNIGNvbW1hbmRzLgorbm9kaXNjYXJkKCopCQlUaGUgZGlzY2FyZC9UUklNIGNvbW1hbmRzIGFyZSBzZW50IHRvIHRoZSB1bmRlcmx5aW5nCisJCQlibG9jayBkZXZpY2Ugd2hlbiBibG9ja3MgYXJlIGZyZWVkLiAgVGhpcyBpcyB1c2VmdWwKKwkJCWZvciBTU0QgZGV2aWNlcyBhbmQgc3BhcnNlL3RoaW5seS1wcm92aXNpb25lZCBMVU5zLgogCiBOSUxGUzIgdXNhZ2UKID09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nCmluZGV4IGE3ZTk3NDYuLmIxMmM4OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcKQEAgLTI3MywzICsyNzMsNDggQEAKIGRlbGliZXJhdGU7IGFzIHNvb24gYXMgc3RydWN0IGJsb2NrX2RldmljZSAqIGlzIHByb3BhZ2F0ZWQgaW4gYSByZWFzb25hYmxlCiB3YXkgYnkgdGhhdCBjb2RlIGZpeGluZyB3aWxsIGJlY29tZSB0cml2aWFsOyB1bnRpbCB0aGVuIG5vdGhpbmcgY2FuIGJlCiBkb25lLgorCitbbWFuZGF0b3J5XQorCisJYmxvY2sgdHJ1bmNhdGF0aW9uIG9uIGVycm9yIGV4aXQgZnJvbSAtPndyaXRlX2JlZ2luLCBhbmQgLT5kaXJlY3RfSU8KK21vdmVkIGZyb20gZ2VuZXJpYyBtZXRob2RzIChibG9ja193cml0ZV9iZWdpbiwgY29udF93cml0ZV9iZWdpbiwKK25vYmhfd3JpdGVfYmVnaW4sIGJsb2NrZGV2X2RpcmVjdF9JTyopIHRvIGNhbGxlcnMuICBUYWtlIGEgbG9vayBhdAorZXh0Ml93cml0ZV9mYWlsZWQgYW5kIGNhbGxlcnMgZm9yIGFuIGV4YW1wbGUuCisKK1ttYW5kYXRvcnldCisKKwktPnRydW5jYXRlIGlzIGdvaW5nIGF3YXkuICBUaGUgd2hvbGUgdHJ1bmNhdGUgc2VxdWVuY2UgbmVlZHMgdG8gYmUKK2ltcGxlbWVudGVkIGluIC0+c2V0YXR0ciwgd2hpY2ggaXMgbm93IG1hbmRhdG9yeSBmb3IgZmlsZXN5c3RlbXMKK2ltcGxlbWVudGluZyBvbi1kaXNrIHNpemUgY2hhbmdlcy4gIFN0YXJ0IHdpdGggYSBjb3B5IG9mIHRoZSBvbGQgaW5vZGVfc2V0YXR0cgorYW5kIHZtdHJ1bmNhdGUsIGFuZCB0aGUgcmVvcmRlciB0aGUgdm10cnVuY2F0ZSArIGZvb2ZzX3ZtdHJ1bmNhdGUgc2VxdWVuY2UgdG8KK2JlIGluIG9yZGVyIG9mIHplcm9pbmcgYmxvY2tzIHVzaW5nIGJsb2NrX3RydW5jYXRlX3BhZ2Ugb3Igc2ltaWxhciBoZWxwZXJzLAorc2l6ZSB1cGRhdGUgYW5kIG9uIGZpbmFsbHkgb24tZGlzayB0cnVuY2F0aW9uIHdoaWNoIHNob3VsZCBub3QgZmFpbC4KK2lub2RlX2NoYW5nZV9vayBub3cgaW5jbHVkZXMgdGhlIHNpemUgY2hlY2tzIGZvciBBVFRSX1NJWkUgYW5kIG11c3QgYmUgY2FsbGVkCitpbiB0aGUgYmVnaW5uaW5nIG9mIC0+c2V0YXR0ciB1bmNvbmRpdGlvbmFsbHkuCisKK1ttYW5kYXRvcnldCisKKwktPmNsZWFyX2lub2RlKCkgYW5kIC0+ZGVsZXRlX2lub2RlKCkgYXJlIGdvbmU7IC0+ZXZpY3RfaW5vZGUoKSBzaG91bGQKK2JlIHVzZWQgaW5zdGVhZC4gIEl0IGdldHMgY2FsbGVkIHdoZW5ldmVyIHRoZSBpbm9kZSBpcyBldmljdGVkLCB3aGV0aGVyIGl0IGhhcworcmVtYWluaW5nIGxpbmtzIG9yIG5vdC4gIENhbGxlciBkb2VzICpub3QqIGV2aWN0IHRoZSBwYWdlY2FjaGUgb3IgaW5vZGUtYXNzb2NpYXRlZAorbWV0YWRhdGEgYnVmZmVyczsgZ2V0dGluZyByaWQgb2YgdGhvc2UgaXMgcmVzcG9uc2liaWxpdHkgb2YgbWV0aG9kLCBhcyBpdCBoYWQKK2JlZW4gZm9yIC0+ZGVsZXRlX2lub2RlKCkuCisJLT5kcm9wX2lub2RlKCkgcmV0dXJucyBpbnQgbm93OyBpdCdzIGNhbGxlZCBvbiBmaW5hbCBpcHV0KCkgd2l0aCBpbm9kZV9sb2NrCitoZWxkIGFuZCBpdCByZXR1cm5zIHRydWUgaWYgZmlsZXN5c3RlbXMgd2FudHMgdGhlIGlub2RlIHRvIGJlIGRyb3BwZWQuICBBcyBiZWZvcmUsCitnZW5lcmljX2Ryb3BfaW5vZGUoKSBpcyBzdGlsbCB0aGUgZGVmYXVsdCBhbmQgaXQncyBiZWVuIHVwZGF0ZWQgYXBwcm9wcmlhdGVseS4KK2dlbmVyaWNfZGVsZXRlX2lub2RlKCkgaXMgYWxzbyBhbGl2ZSBhbmQgaXQgY29uc2lzdHMgc2ltcGx5IG9mIHJldHVybiAxLiAgTm90ZSB0aGF0CithbGwgYWN0dWFsIGV2aWN0aW9uIHdvcmsgaXMgZG9uZSBieSBjYWxsZXIgYWZ0ZXIgLT5kcm9wX2lub2RlKCkgcmV0dXJucy4KKwljbGVhcl9pbm9kZSgpIGlzIGdvbmU7IHVzZSBlbmRfd3JpdGViYWNrKCkgaW5zdGVhZC4gIEFzIGJlZm9yZSwgaXQgbXVzdAorYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBvbiBlYWNoIGNhbGwgb2YgLT5ldmljdF9pbm9kZSgpIChhcyBpdCB1c2VkIHRvIGJlIGZvcgorZWFjaCBjYWxsIG9mIC0+ZGVsZXRlX2lub2RlKCkpLiAgVW5saWtlIGJlZm9yZSwgaWYgeW91IGFyZSB1c2luZyBpbm9kZS1hc3NvY2lhdGVkCittZXRhZGF0YSBidWZmZXJzIChpLmUuIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCkpLCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8KK2NhbGwgaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKCkgYmVmb3JlIGVuZF93cml0ZWJhY2soKS4KKwlObyBhc3luYyB3cml0ZWJhY2sgKGFuZCB0aHVzIG5vIGNhbGxzIG9mIC0+d3JpdGVfaW5vZGUoKSkgd2lsbCBoYXBwZW4KK2FmdGVyIGVuZF93cml0ZWJhY2soKSByZXR1cm5zLCBzbyBhY3Rpb25zIHRoYXQgc2hvdWxkIG5vdCBvdmVybGFwIHdpdGggLT53cml0ZV9pbm9kZSgpCisoZS5nLiBmcmVlaW5nIG9uLWRpc2sgaW5vZGUgaWYgaV9ubGluayBpcyAwKSBvdWdodCB0byBiZSBkb25lIGFmdGVyIHRoYXQgY2FsbC4KKworCU5PVEU6IGNoZWNraW5nIGlfbmxpbmsgaW4gdGhlIGJlZ2lubmluZyBvZiAtPndyaXRlX2lub2RlKCkgYW5kIGJhaWxpbmcgb3V0CitpZiBpdCdzIHplcm8gaXMgbm90ICphbmQqICpuZXZlciogKmhhZCogKmJlZW4qIGVub3VnaC4gIEZpbmFsIHVubGluaygpIGFuZCBpcHV0KCkKK21heSBoYXBwZW4gd2hpbGUgdGhlIGlub2RlIGlzIGluIHRoZSBtaWRkbGUgb2YgLT53cml0ZV9pbm9kZSgpOyBlLmcuIGlmIHlvdSBibGluZGx5CitmcmVlIHRoZSBvbi1kaXNrIGlub2RlLCB5b3UgbWF5IGVuZCB1cCBkb2luZyB0aGF0IHdoaWxlIC0+d3JpdGVfaW5vZGUoKSBpcyB3cml0aW5nCit0byBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDhmZTg4OTUuLmE2YWNhODcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMzMsNyArMzMsOCBAQAogICAyCU1vZGlmeWluZyBTeXN0ZW0gUGFyYW1ldGVycwogCiAgIDMJUGVyLVByb2Nlc3MgUGFyYW1ldGVycwotICAzLjEJL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQorICAzLjEJL3Byb2MvPHBpZD4vb29tX2FkaiAmIC9wcm9jLzxwaWQ+L29vbV9zY29yZV9hZGogLSBBZGp1c3QgdGhlIG9vbS1raWxsZXIKKwkJCQkJCQkJc2NvcmUKICAgMy4yCS9wcm9jLzxwaWQ+L29vbV9zY29yZSAtIERpc3BsYXkgY3VycmVudCBvb20ta2lsbGVyIHNjb3JlCiAgIDMuMwkvcHJvYy88cGlkPi9pbyAtIERpc3BsYXkgdGhlIElPIGFjY291bnRpbmcgZmllbGRzCiAgIDMuNAkvcHJvYy88cGlkPi9jb3JlZHVtcF9maWx0ZXIgLSBDb3JlIGR1bXAgZmlsdGVyaW5nIHNldHRpbmdzCkBAIC0xMjM0LDQyICsxMjM1LDY0IEBACiBDSEFQVEVSIDM6IFBFUi1QUk9DRVNTIFBBUkFNRVRFUlMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0zLjEgL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszLjEgL3Byb2MvPHBpZD4vb29tX2FkaiAmIC9wcm9jLzxwaWQ+L29vbV9zY29yZV9hZGotIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBmaWxlIGNhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgc2NvcmUgdXNlZCB0byBzZWxlY3Qgd2hpY2ggcHJvY2Vzc2VzCi1zaG91bGQgYmUga2lsbGVkIGluIGFuICBvdXQtb2YtbWVtb3J5ICBzaXR1YXRpb24uICBHaXZpbmcgaXQgYSBoaWdoIHNjb3JlIHdpbGwKLWluY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcHJvY2VzcyBiZWluZyBraWxsZWQgYnkgdGhlIG9vbS1raWxsZXIuICBWYWxpZAotdmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgLTE2IHRvICsxNSwgcGx1cyB0aGUgc3BlY2lhbCB2YWx1ZSAtMTcsIHdoaWNoIGRpc2FibGVzCi1vb20ta2lsbGluZyBhbHRvZ2V0aGVyIGZvciB0aGlzIHByb2Nlc3MuCitUaGVzZSBmaWxlIGNhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgYmFkbmVzcyBoZXVyaXN0aWMgdXNlZCB0byBzZWxlY3Qgd2hpY2gKK3Byb2Nlc3MgZ2V0cyBraWxsZWQgaW4gb3V0IG9mIG1lbW9yeSBjb25kaXRpb25zLgogCi1UaGUgcHJvY2VzcyB0byBiZSBraWxsZWQgaW4gYW4gb3V0LW9mLW1lbW9yeSBzaXR1YXRpb24gaXMgc2VsZWN0ZWQgYW1vbmcgYWxsIG90aGVycwotYmFzZWQgb24gaXRzIGJhZG5lc3Mgc2NvcmUuIFRoaXMgdmFsdWUgZXF1YWxzIHRoZSBvcmlnaW5hbCBtZW1vcnkgc2l6ZSBvZiB0aGUgcHJvY2VzcwotYW5kIGlzIHRoZW4gdXBkYXRlZCBhY2NvcmRpbmcgdG8gaXRzIENQVSB0aW1lICh1dGltZSArIHN0aW1lKSBhbmQgdGhlCi1ydW4gdGltZSAodXB0aW1lIC0gc3RhcnQgdGltZSkuIFRoZSBsb25nZXIgaXQgcnVucyB0aGUgc21hbGxlciBpcyB0aGUgc2NvcmUuCi1CYWRuZXNzIHNjb3JlIGlzIGRpdmlkZWQgYnkgdGhlIHNxdWFyZSByb290IG9mIHRoZSBDUFUgdGltZSBhbmQgdGhlbiBieQotdGhlIGRvdWJsZSBzcXVhcmUgcm9vdCBvZiB0aGUgcnVuIHRpbWUuCitUaGUgYmFkbmVzcyBoZXVyaXN0aWMgYXNzaWducyBhIHZhbHVlIHRvIGVhY2ggY2FuZGlkYXRlIHRhc2sgcmFuZ2luZyBmcm9tIDAKKyhuZXZlciBraWxsKSB0byAxMDAwIChhbHdheXMga2lsbCkgdG8gZGV0ZXJtaW5lIHdoaWNoIHByb2Nlc3MgaXMgdGFyZ2V0ZWQuICBUaGUKK3VuaXRzIGFyZSByb3VnaGx5IGEgcHJvcG9ydGlvbiBhbG9uZyB0aGF0IHJhbmdlIG9mIGFsbG93ZWQgbWVtb3J5IHRoZSBwcm9jZXNzCittYXkgYWxsb2NhdGUgZnJvbSBiYXNlZCBvbiBhbiBlc3RpbWF0aW9uIG9mIGl0cyBjdXJyZW50IG1lbW9yeSBhbmQgc3dhcCB1c2UuCitGb3IgZXhhbXBsZSwgaWYgYSB0YXNrIGlzIHVzaW5nIGFsbCBhbGxvd2VkIG1lbW9yeSwgaXRzIGJhZG5lc3Mgc2NvcmUgd2lsbCBiZQorMTAwMC4gIElmIGl0IGlzIHVzaW5nIGhhbGYgb2YgaXRzIGFsbG93ZWQgbWVtb3J5LCBpdHMgc2NvcmUgd2lsbCBiZSA1MDAuCiAKLVN3YXBwZWQgb3V0IHRhc2tzIGFyZSBraWxsZWQgZmlyc3QuIEhhbGYgb2YgZWFjaCBjaGlsZCdzIG1lbW9yeSBzaXplIGlzIGFkZGVkIHRvCi10aGUgcGFyZW50J3Mgc2NvcmUgaWYgdGhleSBkbyBub3Qgc2hhcmUgdGhlIHNhbWUgbWVtb3J5LiBUaHVzIGZvcmtpbmcgc2VydmVycwotYXJlIHRoZSBwcmltZSBjYW5kaWRhdGVzIHRvIGJlIGtpbGxlZC4gSGF2aW5nIG9ubHkgb25lICdodW5ncnknIGNoaWxkIHdpbGwgbWFrZQotcGFyZW50IGxlc3MgcHJlZmVyYWJsZSB0aGFuIHRoZSBjaGlsZC4KK1RoZXJlIGlzIGFuIGFkZGl0aW9uYWwgZmFjdG9yIGluY2x1ZGVkIGluIHRoZSBiYWRuZXNzIHNjb3JlOiByb290Citwcm9jZXNzZXMgYXJlIGdpdmVuIDMlIGV4dHJhIG1lbW9yeSBvdmVyIG90aGVyIHRhc2tzLgogCi0vcHJvYy88cGlkPi9vb21fc2NvcmUgc2hvd3MgcHJvY2VzcycgY3VycmVudCBiYWRuZXNzIHNjb3JlLgorVGhlIGFtb3VudCBvZiAiYWxsb3dlZCIgbWVtb3J5IGRlcGVuZHMgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlIG9vbSBraWxsZXIKK3dhcyBjYWxsZWQuICBJZiBpdCBpcyBkdWUgdG8gdGhlIG1lbW9yeSBhc3NpZ25lZCB0byB0aGUgYWxsb2NhdGluZyB0YXNrJ3MgY3B1c2V0CitiZWluZyBleGhhdXN0ZWQsIHRoZSBhbGxvd2VkIG1lbW9yeSByZXByZXNlbnRzIHRoZSBzZXQgb2YgbWVtcyBhc3NpZ25lZCB0byB0aGF0CitjcHVzZXQuICBJZiBpdCBpcyBkdWUgdG8gYSBtZW1wb2xpY3kncyBub2RlKHMpIGJlaW5nIGV4aGF1c3RlZCwgdGhlIGFsbG93ZWQKK21lbW9yeSByZXByZXNlbnRzIHRoZSBzZXQgb2YgbWVtcG9saWN5IG5vZGVzLiAgSWYgaXQgaXMgZHVlIHRvIGEgbWVtb3J5CitsaW1pdCAob3Igc3dhcCBsaW1pdCkgYmVpbmcgcmVhY2hlZCwgdGhlIGFsbG93ZWQgbWVtb3J5IGlzIHRoYXQgY29uZmlndXJlZAorbGltaXQuICBGaW5hbGx5LCBpZiBpdCBpcyBkdWUgdG8gdGhlIGVudGlyZSBzeXN0ZW0gYmVpbmcgb3V0IG9mIG1lbW9yeSwgdGhlCithbGxvd2VkIG1lbW9yeSByZXByZXNlbnRzIGFsbCBhbGxvY2F0YWJsZSByZXNvdXJjZXMuCiAKLVRoZSBmb2xsb3dpbmcgaGV1cmlzdGljcyBhcmUgdGhlbiBhcHBsaWVkOgotICogaWYgdGhlIHRhc2sgd2FzIHJlbmljZWQsIGl0cyBzY29yZSBkb3VibGVzCi0gKiBzdXBlcnVzZXIgb3IgZGlyZWN0IGhhcmR3YXJlIGFjY2VzcyB0YXNrcyAoQ0FQX1NZU19BRE1JTiwgQ0FQX1NZU19SRVNPVVJDRQotIAlvciBDQVBfU1lTX1JBV0lPKSBoYXZlIHRoZWlyIHNjb3JlIGRpdmlkZWQgYnkgNAotICogaWYgb29tIGNvbmRpdGlvbiBoYXBwZW5lZCBpbiBvbmUgY3B1c2V0IGFuZCBjaGVja2VkIHByb2Nlc3MgZG9lcyBub3QgYmVsb25nCi0gCXRvIGl0LCBpdHMgc2NvcmUgaXMgZGl2aWRlZCBieSA4Ci0gKiB0aGUgcmVzdWx0aW5nIHNjb3JlIGlzIG11bHRpcGxpZWQgYnkgdHdvIHRvIHRoZSBwb3dlciBvZiBvb21fYWRqLCBpLmUuCi0JcG9pbnRzIDw8PSBvb21fYWRqIHdoZW4gaXQgaXMgcG9zaXRpdmUgYW5kCi0JcG9pbnRzID4+PSAtKG9vbV9hZGopIG90aGVyd2lzZQorVGhlIHZhbHVlIG9mIC9wcm9jLzxwaWQ+L29vbV9zY29yZV9hZGogaXMgYWRkZWQgdG8gdGhlIGJhZG5lc3Mgc2NvcmUgYmVmb3JlIGl0CitpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCB0YXNrIHRvIGtpbGwuICBBY2NlcHRhYmxlIHZhbHVlcyByYW5nZSBmcm9tIC0xMDAwCisoT09NX1NDT1JFX0FESl9NSU4pIHRvICsxMDAwIChPT01fU0NPUkVfQURKX01BWCkuICBUaGlzIGFsbG93cyB1c2Vyc3BhY2UgdG8KK3BvbGFyaXplIHRoZSBwcmVmZXJlbmNlIGZvciBvb20ga2lsbGluZyBlaXRoZXIgYnkgYWx3YXlzIHByZWZlcnJpbmcgYSBjZXJ0YWluCit0YXNrIG9yIGNvbXBsZXRlbHkgZGlzYWJsaW5nIGl0LiAgVGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSwgLTEwMDAsIGlzCitlcXVpdmFsZW50IHRvIGRpc2FibGluZyBvb20ga2lsbGluZyBlbnRpcmVseSBmb3IgdGhhdCB0YXNrIHNpbmNlIGl0IHdpbGwgYWx3YXlzCityZXBvcnQgYSBiYWRuZXNzIHNjb3JlIG9mIDAuCiAKLVRoZSB0YXNrIHdpdGggdGhlIGhpZ2hlc3QgYmFkbmVzcyBzY29yZSBpcyB0aGVuIHNlbGVjdGVkIGFuZCBpdHMgY2hpbGRyZW4KLWFyZSBraWxsZWQsIHByb2Nlc3MgaXRzZWxmIHdpbGwgYmUga2lsbGVkIGluIGFuIE9PTSBzaXR1YXRpb24gd2hlbiBpdCBkb2VzCi1ub3QgaGF2ZSBjaGlsZHJlbiBvciBzb21lIG9mIHRoZW0gZGlzYWJsZWQgb29tIGxpa2UgZGVzY3JpYmVkIGFib3ZlLgorQ29uc2VxdWVudGx5LCBpdCBpcyB2ZXJ5IHNpbXBsZSBmb3IgdXNlcnNwYWNlIHRvIGRlZmluZSB0aGUgYW1vdW50IG9mIG1lbW9yeSB0bworY29uc2lkZXIgZm9yIGVhY2ggdGFzay4gIFNldHRpbmcgYSAvcHJvYy88cGlkPi9vb21fc2NvcmVfYWRqIHZhbHVlIG9mICs1MDAsIGZvcgorZXhhbXBsZSwgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGFsbG93aW5nIHRoZSByZW1haW5kZXIgb2YgdGFza3Mgc2hhcmluZyB0aGUKK3NhbWUgc3lzdGVtLCBjcHVzZXQsIG1lbXBvbGljeSwgb3IgbWVtb3J5IGNvbnRyb2xsZXIgcmVzb3VyY2VzIHRvIHVzZSBhdCBsZWFzdAorNTAlIG1vcmUgbWVtb3J5LiAgQSB2YWx1ZSBvZiAtNTAwLCBvbiB0aGUgb3RoZXIgaGFuZCwgd291bGQgYmUgcm91Z2hseQorZXF1aXZhbGVudCB0byBkaXNjb3VudGluZyA1MCUgb2YgdGhlIHRhc2sncyBhbGxvd2VkIG1lbW9yeSBmcm9tIGJlaW5nIGNvbnNpZGVyZWQKK2FzIHNjb3JpbmcgYWdhaW5zdCB0aGUgdGFzay4KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMga2VybmVscywgL3Byb2MvPHBpZD4vb29tX2FkaiBtYXkgYWxzbworYmUgdXNlZCB0byB0dW5lIHRoZSBiYWRuZXNzIHNjb3JlLiAgSXRzIGFjY2VwdGFibGUgdmFsdWVzIHJhbmdlIGZyb20gLTE2CisoT09NX0FESlVTVF9NSU4pIHRvICsxNSAoT09NX0FESlVTVF9NQVgpIGFuZCBhIHNwZWNpYWwgdmFsdWUgb2YgLTE3CisoT09NX0RJU0FCTEUpIHRvIGRpc2FibGUgb29tIGtpbGxpbmcgZW50aXJlbHkgZm9yIHRoYXQgdGFzay4gIEl0cyB2YWx1ZSBpcworc2NhbGVkIGxpbmVhcmx5IHdpdGggL3Byb2MvPHBpZD4vb29tX3Njb3JlX2Fkai4KKworV3JpdGluZyB0byAvcHJvYy88cGlkPi9vb21fc2NvcmVfYWRqIG9yIC9wcm9jLzxwaWQ+L29vbV9hZGogd2lsbCBjaGFuZ2UgdGhlCitvdGhlciB3aXRoIGl0cyBzY2FsZWQgdmFsdWUuCisKK05PVElDRTogL3Byb2MvPHBpZD4vb29tX2FkaiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQsIHBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dC4KKworQ2F2ZWF0OiB3aGVuIGEgcGFyZW50IHRhc2sgaXMgc2VsZWN0ZWQsIHRoZSBvb20ga2lsbGVyIHdpbGwgc2FjcmlmaWNlIGFueSBmaXJzdAorZ2VuZXJhdGlvbiBjaGlsZHJlbiB3aXRoIHNlcGVyYXRlIGFkZHJlc3Mgc3BhY2VzIGluc3RlYWQsIGlmIHBvc3NpYmxlLiAgVGhpcworYXZvaWRzIHNlcnZlcnMgYW5kIGltcG9ydGFudCBzeXN0ZW0gZGFlbW9ucyBmcm9tIGJlaW5nIGtpbGxlZCBhbmQgbG9zZXMgdGhlCittaW5pbWFsIGFtb3VudCBvZiB3b3JrLgorCiAKIDMuMiAvcHJvYy88cGlkPi9vb21fc2NvcmUgLSBEaXNwbGF5IGN1cnJlbnQgb29tLWtpbGxlciBzY29yZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zcXVhc2hmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NxdWFzaGZzLnR4dAppbmRleCAyMDNmNzIwLi42NjY5OWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NxdWFzaGZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NxdWFzaGZzLnR4dApAQCAtMiw3ICsyLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09CiAKIFNxdWFzaGZzIGlzIGEgY29tcHJlc3NlZCByZWFkLW9ubHkgZmlsZXN5c3RlbSBmb3IgTGludXguCi1JdCB1c2VzIHpsaWIgY29tcHJlc3Npb24gdG8gY29tcHJlc3MgZmlsZXMsIGlub2RlcyBhbmQgZGlyZWN0b3JpZXMuCitJdCB1c2VzIHpsaWIvbHpvIGNvbXByZXNzaW9uIHRvIGNvbXByZXNzIGZpbGVzLCBpbm9kZXMgYW5kIGRpcmVjdG9yaWVzLgogSW5vZGVzIGluIHRoZSBzeXN0ZW0gYXJlIHZlcnkgc21hbGwgYW5kIGFsbCBibG9ja3MgYXJlIHBhY2tlZCB0byBtaW5pbWlzZQogZGF0YSBvdmVyaGVhZC4gQmxvY2sgc2l6ZXMgZ3JlYXRlciB0aGFuIDRLIGFyZSBzdXBwb3J0ZWQgdXAgdG8gYSBtYXhpbXVtCiBvZiAxTWJ5dGVzIChkZWZhdWx0IGJsb2NrIHNpemUgMTI4SykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKaW5kZXggODUzNTRiMy4uNzRlYWFjMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dApAQCAtMzksNyArMzksNyBAQAogICAgICAgIGxvY2FsX2NwdXMJICAgbmVhcmJ5IENQVSBtYXNrIChjcHVtYXNrLCBybykKICAgICAgICByZW1vdmUJCSAgIHJlbW92ZSBkZXZpY2UgZnJvbSBrZXJuZWwncyBsaXN0IChhc2NpaSwgd28pCiAgICAgICAgcmVzb3VyY2UJCSAgIFBDSSByZXNvdXJjZSBob3N0IGFkZHJlc3NlcyAoYXNjaWksIHJvKQotICAgICAgIHJlc291cmNlMC4uTgkgICBQQ0kgcmVzb3VyY2UgTiwgaWYgcHJlc2VudCAoYmluYXJ5LCBtbWFwKQorICAgICAgIHJlc291cmNlMC4uTgkgICBQQ0kgcmVzb3VyY2UgTiwgaWYgcHJlc2VudCAoYmluYXJ5LCBtbWFwLCByd1sxXSkKICAgICAgICByZXNvdXJjZTBfd2MuLk5fd2MgIFBDSSBXQyBtYXAgcmVzb3VyY2UgTiwgaWYgcHJlZmV0Y2hhYmxlIChiaW5hcnksIG1tYXApCiAgICAgICAgcm9tCQkgICBQQ0kgUk9NIHJlc291cmNlLCBpZiBwcmVzZW50IChiaW5hcnksIHJvKQogICAgICAgIHN1YnN5c3RlbV9kZXZpY2UJICAgUENJIHN1YnN5c3RlbSBkZXZpY2UgKGFzY2lpLCBybykKQEAgLTU0LDEzICs1NCwxNiBAQAogICBiaW5hcnkgLSBmaWxlIGNvbnRhaW5zIGJpbmFyeSBkYXRhCiAgIGNwdW1hc2sgLSBmaWxlIGNvbnRhaW5zIGEgY3B1bWFzayB0eXBlCiAKK1sxXSBydyBmb3IgUkVTT1VSQ0VfSU8gKEkvTyBwb3J0KSByZWdpb25zIG9ubHkKKwogVGhlIHJlYWQgb25seSBmaWxlcyBhcmUgaW5mb3JtYXRpb25hbCwgd3JpdGVzIHRvIHRoZW0gd2lsbCBiZSBpZ25vcmVkLCB3aXRoCiB0aGUgZXhjZXB0aW9uIG9mIHRoZSAncm9tJyBmaWxlLiAgV3JpdGFibGUgZmlsZXMgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybQogYWN0aW9ucyBvbiB0aGUgZGV2aWNlIChlLmcuIGNoYW5naW5nIGNvbmZpZyBzcGFjZSwgZGV0YWNoaW5nIGEgZGV2aWNlKS4KIG1tYXBhYmxlIGZpbGVzIGFyZSBhdmFpbGFibGUgdmlhIGFuIG1tYXAgb2YgdGhlIGZpbGUgYXQgb2Zmc2V0IDAgYW5kIGNhbiBiZQogdXNlZCB0byBkbyBhY3R1YWwgZGV2aWNlIHByb2dyYW1taW5nIGZyb20gdXNlcnNwYWNlLiAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zCiBkb24ndCBzdXBwb3J0IG1tYXBwaW5nIG9mIGNlcnRhaW4gcmVzb3VyY2VzLCBzbyBiZSBzdXJlIHRvIGNoZWNrIHRoZSByZXR1cm4KLXZhbHVlIGZyb20gYW55IGF0dGVtcHRlZCBtbWFwLgordmFsdWUgZnJvbSBhbnkgYXR0ZW1wdGVkIG1tYXAuICBUaGUgbW9zdCBub3RhYmxlIG9mIHRoZXNlIGFyZSBJL08gcG9ydAorcmVzb3VyY2VzLCB3aGljaCBhbHNvIHByb3ZpZGUgcmVhZC93cml0ZSBhY2Nlc3MuCiAKIFRoZSAnZW5hYmxlJyBmaWxlIHByb3ZpZGVzIGEgY291bnRlciB0aGF0IGluZGljYXRlcyBob3cgbWFueSB0aW1lcyB0aGUgZGV2aWNlIAogaGFzIGJlZW4gZW5hYmxlZC4gIElmIHRoZSAnZW5hYmxlJyBmaWxlIGN1cnJlbnRseSByZXR1cm5zICc0JywgYW5kIGEgJzEnIGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMudHh0CmluZGV4IDkzMWM4MDYuLjVkMTMzNWZhZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQKQEAgLTQsNyArNCw3IEBACiBQYXRyaWNrIE1vY2hlbAk8bW9jaGVsQG9zZGwub3JnPgogTWlrZSBNdXJwaHkgPG1hbXVycGhAY3MuY2xlbXNvbi5lZHU+CiAKLVJldmlzZWQ6ICAgIDIyIEZlYnJ1YXJ5IDIwMDkKK1JldmlzZWQ6ICAgIDE1IEp1bHkgMjAxMAogT3JpZ2luYWw6ICAgMTAgSmFudWFyeSAyMDAzCiAKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAKIHN0cnVjdCBzeXNmc19vcHMgewogICAgICAgICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLCBjaGFyICopOwotICAgICAgICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBhdHRyaWJ1dGUgKiwgY29uc3QgY2hhciAqKTsKKyAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYXR0cmlidXRlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKIFsgU3Vic3lzdGVtcyBzaG91bGQgaGF2ZSBhbHJlYWR5IGRlZmluZWQgYSBzdHJ1Y3Qga29ial90eXBlIGFzIGEKQEAgLTEzOSwxOCArMTM5LDIyIEBACiAKIFRvIGlsbHVzdHJhdGU6CiAKKyNkZWZpbmUgdG9fZGV2KG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZSwga29iaikKICNkZWZpbmUgdG9fZGV2X2F0dHIoX2F0dHIpIGNvbnRhaW5lcl9vZihfYXR0ciwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUsIGF0dHIpCi0jZGVmaW5lIHRvX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRldmljZSwga29iaikKIAotc3RhdGljIHNzaXplX3QKLWRldl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwgY2hhciAqIGJ1ZikKK3N0YXRpYyBzc2l6ZV90IGRldl9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZikKIHsKLSAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBkZXZfYXR0ciA9IHRvX2Rldl9hdHRyKGF0dHIpOwotICAgICAgICBzdHJ1Y3QgZGV2aWNlICogZGV2ID0gdG9fZGV2KGtvYmopOwotICAgICAgICBzc2l6ZV90IHJldCA9IDA7CisgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciA9IHRvX2Rldl9hdHRyKGF0dHIpOworICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iaik7CisgICAgICAgIHNzaXplX3QgcmV0ID0gLUVJTzsKIAogICAgICAgICBpZiAoZGV2X2F0dHItPnNob3cpCi0gICAgICAgICAgICAgICAgcmV0ID0gZGV2X2F0dHItPnNob3coZGV2LCBidWYpOworICAgICAgICAgICAgICAgIHJldCA9IGRldl9hdHRyLT5zaG93KGRldiwgZGV2X2F0dHIsIGJ1Zik7CisgICAgICAgIGlmIChyZXQgPj0gKHNzaXplX3QpUEFHRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgcHJpbnRfc3ltYm9sKCJkZXZfYXR0cl9zaG93OiAlcyByZXR1cm5lZCBiYWQgY291bnRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWRldl9hdHRyLT5zaG93KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xNjMsMTAgKzE2Nyw5IEBACiBzcGVjaWZpZWQgd2hlbiBkZWNsYXJpbmcgdGhlIGF0dHJpYnV0ZS4gVGhlIG1ldGhvZCB0eXBlcyBzaG91bGQgYmUgYXMKIHNpbXBsZSBhcyB0aG9zZSBkZWZpbmVkIGZvciBkZXZpY2UgYXR0cmlidXRlczoKIAotc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKLSAgICAgICAgICAgICAgICBjaGFyICogYnVmKTsKLXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAotICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogYnVmKTsKK3NzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiAKIElPVywgdGhleSBzaG91bGQgdGFrZSBvbmx5IGFuIG9iamVjdCwgYW4gYXR0cmlidXRlLCBhbmQgYSBidWZmZXIgYXMgcGFyYW1ldGVycy4KIApAQCAtMjA5LDggKzIxMiw4IEBACiAKIC0gc2hvdygpIHNob3VsZCBhbHdheXMgdXNlIHNucHJpbnRmKCkuIAogCi0tIHN0b3JlKCkgc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgZnJvbSB0aGUgYnVmZmVyLiBUaGlzCi0gIGNhbiBiZSBkb25lIHVzaW5nIHN0cmxlbigpLgorLSBzdG9yZSgpIHNob3VsZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZyb20gdGhlIGJ1ZmZlci4gSWYgdGhlCisgIGVudGlyZSBidWZmZXIgaGFzIGJlZW4gdXNlZCwganVzdCByZXR1cm4gdGhlIGNvdW50IGFyZ3VtZW50LgogCiAtIHNob3coKSBvciBzdG9yZSgpIGNhbiBhbHdheXMgcmV0dXJuIGVycm9ycy4gSWYgYSBiYWQgdmFsdWUgY29tZXMKICAgdGhyb3VnaCwgYmUgc3VyZSB0byByZXR1cm4gYW4gZXJyb3IuCkBAIC0yMjMsMTUgKzIyNiwxOCBAQAogCiBBIHZlcnkgc2ltcGxlIChhbmQgbmFpdmUpIGltcGxlbWVudGF0aW9uIG9mIGEgZGV2aWNlIGF0dHJpYnV0ZSBpczoKIAotc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgZGV2LT5uYW1lKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfbmFtZShzdHJ1Y3QgZGV2aWNlICogZGV2LCBjb25zdCBjaGFyICogYnVmKQorc3RhdGljIHNzaXplX3Qgc3RvcmVfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzc2NhbmYoYnVmLCAiJTIwcyIsIGRldi0+bmFtZSk7Ci0JcmV0dXJuIHN0cm5sZW4oYnVmLCBQQUdFX1NJWkUpOworICAgICAgICBzbnByaW50ZihkZXYtPm5hbWUsIHNpemVvZihkZXYtPm5hbWUpLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgIChpbnQpbWluKGNvdW50LCBzaXplb2YoZGV2LT5uYW1lKSAtIDEpLCBidWYpOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHNob3dfbmFtZSwgc3RvcmVfbmFtZSk7CkBAIC0zMjcsNyArMzMzLDcgQEAKIHN0cnVjdCBidXNfYXR0cmlidXRlIHsKICAgICAgICAgc3RydWN0IGF0dHJpYnV0ZSAgICAgICAgYXR0cjsKICAgICAgICAgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBidXNfdHlwZSAqLCBjaGFyICogYnVmKTsKLSAgICAgICAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgYnVzX3R5cGUgKiwgY29uc3QgY2hhciAqIGJ1Zik7CisgICAgICAgIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGJ1c190eXBlICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCiBEZWNsYXJpbmc6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0IGIvRG9jdW1lbnRhdGlvbi9maXJtd2FyZV9jbGFzcy9ob3RwbHVnLXNjcmlwdAppbmRleCAxOTkwMTMwLi44MTQzYTk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Zpcm13YXJlX2NsYXNzL2hvdHBsdWctc2NyaXB0CisrKyBiL0RvY3VtZW50YXRpb24vZmlybXdhcmVfY2xhc3MvaG90cGx1Zy1zY3JpcHQKQEAgLTYsMTEgKzYsMTIgQEAKIAogSE9UUExVR19GV19ESVI9L3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZS8KIAotZWNobyAxID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCi1jYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXMvJERFVlBBVEgvZGF0YQotZWNobyAwID4gL3N5cy8kREVWUEFUSC9sb2FkaW5nCi0KLSMgVG8gY2FuY2VsIHRoZSBsb2FkIGluIGNhc2Ugb2YgZXJyb3I6Ci0jCi0jCWVjaG8gLTEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKLSMKK2lmIFsgIiRTVUJTWVNURU0iID09ICJmaXJtd2FyZSIgLWEgIiRBQ1RJT04iID09ICJhZGQiIF07IHRoZW4KKyAgaWYgWyAtZiAkSE9UUExVR19GV19ESVIvJEZJUk1XQVJFIF07IHRoZW4KKyAgICBlY2hvIDEgPiAvc3lzLyRERVZQQVRIL2xvYWRpbmcKKyAgICBjYXQgJEhPVFBMVUdfRldfRElSLyRGSVJNV0FSRSA+IC9zeXMvJERFVlBBVEgvZGF0YQorICAgIGVjaG8gMCA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworICBlbHNlCisgICAgZWNobyAtMSA+IC9zeXMvJERFVlBBVEgvbG9hZGluZworICBmaQorZmkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IGMyYzZlOWIuLmQ5NmE2ZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtMTU4LDEwICsxNTgsMTEgQEAKIFNwaW5sb2NrLVNhZmUgR1BJTyBhY2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1vc3QgR1BJTyBjb250cm9sbGVycyBjYW4gYmUgYWNjZXNzZWQgd2l0aCBtZW1vcnkgcmVhZC93cml0ZSBpbnN0cnVjdGlvbnMuCi1UaGF0IGRvZXNuJ3QgbmVlZCB0byBzbGVlcCwgYW5kIGNhbiBzYWZlbHkgYmUgZG9uZSBmcm9tIGluc2lkZSBJUlEgaGFuZGxlcnMuCi0oVGhhdCBpbmNsdWRlcyBoYXJkaXJxIGNvbnRleHRzIG9uIFJUIGtlcm5lbHMuKQorVGhvc2UgZG9uJ3QgbmVlZCB0byBzbGVlcCwgYW5kIGNhbiBzYWZlbHkgYmUgZG9uZSBmcm9tIGluc2lkZSBoYXJkCisobm9udGhyZWFkZWQpIElSUSBoYW5kbGVycyBhbmQgc2ltaWxhciBjb250ZXh0cy4KIAotVXNlIHRoZXNlIGNhbGxzIHRvIGFjY2VzcyBzdWNoIEdQSU9zOgorVXNlIHRoZSBmb2xsb3dpbmcgY2FsbHMgdG8gYWNjZXNzIHN1Y2ggR1BJT3MsCitmb3Igd2hpY2ggZ3Bpb19jYW5zbGVlcCgpIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSAoc2VlIGJlbG93KToKIAogCS8qIEdQSU8gSU5QVVQ6ICByZXR1cm4gemVybyBvciBub256ZXJvICovCiAJaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwpAQCAtMjEwLDkgKzIxMSwzMSBAQAogCS8qIEdQSU8gT1VUUFVULCBtaWdodCBzbGVlcCAqLwogCXZvaWQgZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKTsKIAotT3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0IHRoZXNlIGNhbGxzIG1pZ2h0IHNsZWVwLCBhbmQgd2lsbCBub3QgYmUgaWdub3JlZAotZm9yIEdQSU9zIHRoYXQgY2FuJ3QgYmUgYWNjZXNzZWQgZnJvbSBJUlEgaGFuZGxlcnMsIHRoZXNlIGNhbGxzIGFjdCB0aGUKLXNhbWUgYXMgdGhlIHNwaW5sb2NrLXNhZmUgY2FsbHMuCisKK0FjY2Vzc2luZyBzdWNoIEdQSU9zIHJlcXVpcmVzIGEgY29udGV4dCB3aGljaCBtYXkgc2xlZXAsICBmb3IgZXhhbXBsZQorYSB0aHJlYWRlZCBJUlEgaGFuZGxlciwgYW5kIHRob3NlIGFjY2Vzc29ycyBtdXN0IGJlIHVzZWQgaW5zdGVhZCBvZgorc3BpbmxvY2stc2FmZSBhY2Nlc3NvcnMgd2l0aG91dCB0aGUgY2Fuc2xlZXAoKSBuYW1lIHN1ZmZpeC4KKworT3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0IHRoZXNlIGFjY2Vzc29ycyBtaWdodCBzbGVlcCwgYW5kIHdpbGwgd29yaworb24gR1BJT3MgdGhhdCBjYW4ndCBiZSBhY2Nlc3NlZCBmcm9tIGhhcmRJUlEgaGFuZGxlcnMsIHRoZXNlIGNhbGxzIGFjdAordGhlIHNhbWUgYXMgdGhlIHNwaW5sb2NrLXNhZmUgY2FsbHMuCisKKyAgKiogSU4gQURESVRJT04gKiogY2FsbHMgdG8gc2V0dXAgYW5kIGNvbmZpZ3VyZSBzdWNoIEdQSU9zIG11c3QgYmUgbWFkZQorZnJvbSBjb250ZXh0cyB3aGljaCBtYXkgc2xlZXAsIHNpbmNlIHRoZXkgbWF5IG5lZWQgdG8gYWNjZXNzIHRoZSBHUElPCitjb250cm9sbGVyIGNoaXAgdG9vOiAgKFRoZXNlIHNldHVwIGNhbGxzIGFyZSB1c3VhbGx5IG1hZGUgZnJvbSBib2FyZAorc2V0dXAgb3IgZHJpdmVyIHByb2JlL3RlYXJkb3duIGNvZGUsIHNvIHRoaXMgaXMgYW4gZWFzeSBjb25zdHJhaW50LikKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KCkKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoKQorCWdwaW9fcmVxdWVzdCgpCisKKyMjIAlncGlvX3JlcXVlc3Rfb25lKCkKKyMjCWdwaW9fcmVxdWVzdF9hcnJheSgpCisjIyAJZ3Bpb19mcmVlX2FycmF5KCkKKworCWdwaW9fZnJlZSgpCisJZ3Bpb19zZXRfZGVib3VuY2UoKQorCiAKIAogQ2xhaW1pbmcgYW5kIFJlbGVhc2luZyBHUElPcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcCBiL0RvY3VtZW50YXRpb24vaHdtb24vY29yZXRlbXAKaW5kZXggOTIyNjdiNi4uMjU1NjhmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2NvcmV0ZW1wCkBAIC0yMSw4ICsyMSw4IEBACiAxIGRlZ3JlZSBDLiBWYWxpZCB0ZW1wZXJhdHVyZXMgYXJlIGZyb20gMCB0byBUak1heCBkZWdyZWVzIEMsIGJlY2F1c2UKIHRoZSBhY3R1YWwgdmFsdWUgb2YgdGVtcGVyYXR1cmUgcmVnaXN0ZXIgaXMgaW4gZmFjdCBhIGRlbHRhIGZyb20gVGpNYXguCiAKLVRlbXBlcmF0dXJlIGtub3duIGFzIFRqTWF4IGlzIHRoZSBtYXhpbXVtIGp1bmN0aW9uIHRlbXBlcmF0dXJlIG9mIHByb2Nlc3Nvci4KLUludGVsIGRlZmluZXMgdGhpcyB0ZW1wZXJhdHVyZSBhcyA4NUMgb3IgMTAwQy4gQXQgdGhpcyB0ZW1wZXJhdHVyZSwgcHJvdGVjdGlvbgorVGVtcGVyYXR1cmUga25vd24gYXMgVGpNYXggaXMgdGhlIG1heGltdW0ganVuY3Rpb24gdGVtcGVyYXR1cmUgb2YgcHJvY2Vzc29yLAord2hpY2ggZGVwZW5kcyBvbiB0aGUgQ1BVIG1vZGVsLiBTZWUgdGFibGUgYmVsb3cuIEF0IHRoaXMgdGVtcGVyYXR1cmUsIHByb3RlY3Rpb24KIG1lY2hhbmlzbSB3aWxsIHBlcmZvcm0gYWN0aW9ucyB0byBmb3JjaWJseSBjb29sIGRvd24gdGhlIHByb2Nlc3Nvci4gQWxhcm0KIG1heSBiZSByYWlzZWQsIGlmIHRoZSB0ZW1wZXJhdHVyZSBncm93cyBlbm91Z2ggKG1vcmUgdGhhbiBUak1heCkgdG8gdHJpZ2dlcgogdGhlIE91dC1PZi1TcGVjIGJpdC4gRm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGV4cG9ydGVkIHN5c2ZzIGZpbGVzOgpAQCAtMzgsMyArMzgsMTA0IEBACiBUaGUgVGpNYXggdGVtcGVyYXR1cmUgaXMgc2V0IHRvIDg1IGRlZ3JlZXMgQyBpZiB1bmRvY3VtZW50ZWQgbW9kZWwgc3BlY2lmaWMKIHJlZ2lzdGVyIChVTVNSKSAweGVlIGhhcyBiaXQgMzAgc2V0LiBJZiBub3QgdGhlIFRqTWF4IGlzIDEwMCBkZWdyZWVzIEMgYXMKIChzb21ldGltZXMpIGRvY3VtZW50ZWQgaW4gcHJvY2Vzc29yIGRhdGFzaGVldC4KKworQXBwZW5kaXggQS4gS25vd24gVGpNYXggbGlzdHMgKFRCRCk6CitTb21lIGluZm9ybWF0aW9uIGNvbWVzIGZyb20gYXJrLmludGVsLmNvbQorCitQcm9jZXNzCQlQcm9jZXNzb3IJCQkJCVRqTWF4KEMpCisKKzMybm0JCUNvcmUgaTMvaTUvaTcgUHJvY2Vzc29ycworCQlpNyA2NjBVTS82NDAvNjIwLCA2NDBMTS82MjAsIDYyME0sIDYxMEUJCTEwNQorCQlpNSA1NDBVTS81MjAvNDMwLCA1NDBNLzUyMC80NTAvNDMwCQkxMDUKKwkJaTMgMzMwRSwgMzcwTS8zNTAvMzMwCQkJCTkwIHJQR0EsIDEwNSBCR0EKKwkJaTMgMzMwVU0JCQkJCTEwNQorCiszMm5tCQlDb3JlIGk3IEV4dHJlbWUgUHJvY2Vzc29ycworCQk5ODBYCQkJCQkJMTAwCisKKzMybm0JCUNlbGVyb24gUHJvY2Vzc29ycworCQlVMzQwMAkJCQkJCTEwNQorCQlQNDUwNS9QNDUwMCAJCQkJCTkwCisKKzQ1bm0JCVhlb24gUHJvY2Vzc29ycyA1NDAwIFF1YWQtQ29yZQorCQlYNTQ5MiwgWDU0ODIsIFg1NDcyLCBYNTQ3MCwgWDU0NjAsIFg1NDUwCTg1CisJCUU1NDcyLCBFNTQ2MiwgRTU0NTAvNDAvMzAvMjAvMTAvMDUJCTg1CisJCUw1NDA4CQkJCQkJOTUKKwkJTDU0MzAsIEw1NDIwLCBMNTQxMAkJCQk3MAorCis0NW5tCQlYZW9uIFByb2Nlc3NvcnMgNTIwMCBEdWFsLUNvcmUKKwkJWDUyODIsIFg1MjcyLCBYNTI3MCwgWDUyNjAJCQk5MAorCQlFNTI0MAkJCQkJCTkwCisJCUU1MjA1LCBFNTIyMAkJCQkJNzAsIDkwCisJCUw1MjQwCQkJCQkJNzAKKwkJTDUyMzgsIEw1MjE1CQkJCQk5NQorCis0NW5tCQlBdG9tIFByb2Nlc3NvcnMKKwkJRDUyNS81MTAvNDI1LzQxMAkJCQkxMDAKKwkJWjU2MC81NTAvNTQwLzUzMFAvNTMwLzUyMFBULzUyMC81MTUvNTEwUFQvNTEwUAk5MAorCQlaNTEwLzUwMAkJCQkJOTAKKwkJTjQ3NS80NzAvNDU1LzQ1MAkJCQkxMDAKKwkJTjI4MC8yNzAJCQkJCTkwCisJCTMzMC8yMzAJCQkJCQkxMjUKKworNDVubQkJQ29yZTIgUHJvY2Vzc29ycworCQlTb2xvIFVMViBTVTM1MDAvMzMwMAkJCQkxMDAKKwkJVDk5MDAvOTgwMC85NjAwLzk1NTAvOTUwMC85NDAwLzkzMDAvODMwMC84MTAwCTEwNQorCQlUNjY3MC82NTAwLzY0MDAJCQkJCTEwNQorCQlUNjYwMAkJCQkJCTkwCisJCVNVOTYwMC85NDAwLzkzMDAJCQkJMTA1CisJCVNQOTYwMC85NDAwCQkJCQkxMDUKKwkJU0w5NjAwLzk0MDAvOTM4MC85MzAwCQkJCTEwNQorCQlQOTcwMC85NjAwLzk1MDAvODgwMC84NzAwLzg2MDAvODQwMC83NTcwCTEwNQorCQlQNzU1MC83NDUwCQkJCQk5MAorCis0NW5tCQlDb3JlMiBRdWFkIFByb2Nlc3NvcnMKKwkJUTkxMDAvOTAwMAkJCQkJMTAwCisKKzQ1bm0JCUNvcmUyIEV4dHJlbWUgUHJvY2Vzc29ycworCQlYOTEwMC85MDAwCQkJCQkxMDUKKwkJUVg5MzAwCQkJCQkJMTAwCisKKzQ1bm0JCUNvcmUgaTMvaTUvaTcgUHJvY2Vzc29ycworCQlpNyA5NDBYTS85MjAJCQkJCTEwMAorCQlpNyA4NDBRTS84MjAvNzQwLzcyMAkJCQkxMDAKKworNDVubQkJQ2VsZXJvbiBQcm9jZXNzb3JzCisJCVNVMjMwMAkJCQkJCTEwMAorCQk5MDAgCQkJCQkJMTA1CisKKzY1bm0JCUNvcmUyIER1byBQcm9jZXNzb3JzCisJCVNvbG8gVTIyMDAsIFUyMTAwCQkJCTEwMAorCQlVNzcwMC83NjAwLzc1MDAJCQkJCTEwMAorCQlUNzgwMC83NzAwLzc2MDAvNzUwMC83NDAwLzczMDAvNzI1MC83MjAwLzcxMDAJMTAwCisJCVQ1ODcwLzU2NzAvNTYwMC81NTUwLzU1MDAvNTQ3MC81NDUwLzUzMDAvNTI3MAkxMDAKKwkJVDUyNTAJCQkJCQkxMDAKKwkJVDU4MDAvNTc1MC81MjAwCQkJCQk4NQorCQlMNzcwMC83NTAwLzc0MDAvNzMwMC83MjAwCQkJMTAwCisKKzY1bm0JCUNvcmUyIEV4dHJlbWUgUHJvY2Vzc29ycworCQlYNzkwMC83ODAwCQkJCQkxMDAKKworNjVubQkJQ29yZSBEdW8gUHJvY2Vzc29ycworCQlVMjUwMC8yNDAwCQkJCQkxMDAKKwkJVDI3MDAvMjYwMC8yNDUwLzI0MDAvMjM1MC8yMzAwRS8yMzAwLzIyNTAvMjA1MAkxMDAKKwkJTDI1MDAvMjQwMC8yMzAwCQkJCQkxMDAKKworNjVubQkJQ29yZSBTb2xvIFByb2Nlc3NvcnMKKwkJVTE1MDAvMTQwMC8xMzAwCQkJCQkxMDAKKwkJVDE0MDAvMTM1MC8xMzAwLzEyNTAJCQkJMTAwCisKKzY1bm0JCVhlb24gUHJvY2Vzc29ycyA1MDAwIFF1YWQtQ29yZQorCQlYNTAwMAkJCQkJCTkwLTk1CisJCUU1MDAwCQkJCQkJODAKKwkJTDUwMDAJCQkJCQk3MAorCQlMNTMxOAkJCQkJCTk1CisKKzY1bm0JCVhlb24gUHJvY2Vzc29ycyA1MDAwIER1YWwtQ29yZQorCQk1MDgwLCA1MDYzLCA1MDYwLCA1MDUwLCA1MDMwCQkJODAtOTAKKwkJNTE2MCwgNTE1MCwgNTE0OCwgNTE0MCwgNTEzMCwgNTEyMCwgNTExMAk4MAorCQlMNTEzOAkJCQkJCTEwMAorCis2NW5tCQlDZWxlcm9uIFByb2Nlc3NvcnMKKwkJVDE3MDAvMTYwMAkJCQkJMTAwCisJCTU2MC81NTAvNTQwLzUzMAkJCQkJMTAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2Y3MTg4MmZnIGIvRG9jdW1lbnRhdGlvbi9od21vbi9mNzE4ODJmZwppbmRleCBhNzk1MmMyLi4xYTA3ZmQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2Y3MTg4MmZnCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZjcxODgyZmcKQEAgLTIsNiArMiwxMCBAQAogPT09PT09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6CisgICogRmludGVrIEY3MTgwOEUKKyAgICBQcmVmaXg6ICdmNzE4MDhmZycKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogbm9uZSwgYWRkcmVzcyByZWFkIGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZQorICAgIERhdGFzaGVldDogTm90IHB1YmxpYwogICAqIEZpbnRlayBGNzE4NThGRwogICAgIFByZWZpeDogJ2Y3MTg1OGZnJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU3NmVmMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgpAQCAtMCwwICsxLDk3IEBACitLZXJuZWwgZHJpdmVyIGpjNDIKKz09PT09PT09PT09PT09PT09PQorCitTdXBwb3J0ZWQgY2hpcHM6CisgICogQW5hbG9nIERldmljZXMgQURUNzQwOAorICAgIFByZWZpeDogJ2FkdDc0MDgnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgorICAgIERhdGFzaGVldHM6CisJaHR0cDovL3d3dy5hbmFsb2cuY29tL3N0YXRpYy9pbXBvcnRlZC1maWxlcy9kYXRhX3NoZWV0cy9BRFQ3NDA4LnBkZgorICAqIElEVCBUU0UyMDAyQjMsIFRTMzAwMEIzCisgICAgUHJlZml4OiAndHNlMjAwMmIzJywgJ3RzMzAwMGIzJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWYKKyAgICBEYXRhc2hlZXRzOgorCWh0dHA6Ly93d3cuaWR0LmNvbS9wcm9kdWN0cy9nZXRkb2MuY2ZtP2RvY2lkPTE4NzE1NjkxCisJaHR0cDovL3d3dy5pZHQuY29tL3Byb2R1Y3RzL2dldGRvYy5jZm0/ZG9jaWQ9MTg3MTU2OTIKKyAgKiBNYXhpbSBNQVg2NjA0CisgICAgUHJlZml4OiAnbWF4NjYwNCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFmCisgICAgRGF0YXNoZWV0czoKKwlodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYNjYwNC5wZGYKKyAgKiBNaWNyb2NoaXAgTUNQOTgwNSwgTUNQOTgyNDIsIE1DUDk4MjQzLCBNQ1A5ODQzCisgICAgUHJlZml4ZXM6ICdtY3A5ODA1JywgJ21jcDk4MjQyJywgJ21jcDk4MjQzJywgJ21jcDk4NDMnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgorICAgIERhdGFzaGVldHM6CisJaHR0cDovL3d3MS5taWNyb2NoaXAuY29tL2Rvd25sb2Fkcy9lbi9EZXZpY2VEb2MvMjE5NzdiLnBkZgorCWh0dHA6Ly93dzEubWljcm9jaGlwLmNvbS9kb3dubG9hZHMvZW4vRGV2aWNlRG9jLzIxOTk2YS5wZGYKKwlodHRwOi8vd3cxLm1pY3JvY2hpcC5jb20vZG93bmxvYWRzL2VuL0RldmljZURvYy8yMjE1M2MucGRmCisgICogTlhQIFNlbWljb25kdWN0b3JzIFNFOTcsIFNFOTdCCisgICAgUHJlZml4OiAnc2U5NycKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFmCisgICAgRGF0YXNoZWV0czoKKwlodHRwOi8vd3d3Lm54cC5jb20vZG9jdW1lbnRzL2RhdGFfc2hlZXQvU0U5Ny5wZGYKKwlodHRwOi8vd3d3Lm54cC5jb20vZG9jdW1lbnRzL2RhdGFfc2hlZXQvU0U5N0IucGRmCisgICogTlhQIFNlbWljb25kdWN0b3JzIFNFOTgKKyAgICBQcmVmaXg6ICdzZTk4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWYKKyAgICBEYXRhc2hlZXRzOgorCWh0dHA6Ly93d3cubnhwLmNvbS9kb2N1bWVudHMvZGF0YV9zaGVldC9TRTk4LnBkZgorICAqIE9OIFNlbWljb25kdWN0b3IgQ0FUMzRUUzAyLCBDQVQ2MDk1CisgICAgUHJlZml4OiAnY2F0MzR0czAyJywgJ2NhdDYwOTUnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgorICAgIERhdGFzaGVldDoKKwlodHRwOi8vd3d3Lm9uc2VtaS5jb20vcHViX2xpbmsvQ29sbGF0ZXJhbC9DQVQzNFRTMDItRC5QREYKKwlodHRwOi8vd3d3Lm9uc2VtaS5jb20vcHViL0NvbGxhdGVyYWwvQ0FUNjA5NS1ELlBERgorICAqIFNUIE1pY3JvZWxlY3Ryb25pY3MgU1RUUzQyNCwgU1RUUzQyNEUwMgorICAgIFByZWZpeDogJ3N0dHM0MjQnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgorICAgIERhdGFzaGVldHM6CisJaHR0cDovL3d3dy5zdC5jb20vc3RvbmxpbmUvcHJvZHVjdHMvbGl0ZXJhdHVyZS9kcy8xMzQ0Ny9zdHRzNDI0LnBkZgorCWh0dHA6Ly93d3cuc3QuY29tL3N0b25saW5lL3Byb2R1Y3RzL2xpdGVyYXR1cmUvZHMvMTM0NDgvc3R0czQyNGUwMi5wZGYKKyAgKiBKRURFQyBKQyA0Mi40IGNvbXBsaWFudCB0ZW1wZXJhdHVyZSBzZW5zb3IgY2hpcHMKKyAgICBQcmVmaXg6ICdqYzQyJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWYKKyAgICBEYXRhc2hlZXQ6IC0KKworQXV0aG9yOgorCUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMuCitUaGUgZHJpdmVyIGF1dG8tZGV0ZWN0cyB0aGUgY2hpcHMgbGlzdGVkIGFib3ZlLCBidXQgY2FuIGJlIG1hbnVhbGx5IGluc3RhbnRpYXRlZAordG8gc3VwcG9ydCBvdGhlciBKQyA0Mi40IGNvbXBsaWFudCBjaGlwcy4KKworRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYSBnZW5lcmljIEpDIDQyLjQgY29tcGxpYW50Cit0ZW1wZXJhdHVyZSBzZW5zb3IgYXQgYWRkcmVzcyAweDE4IG9uIEkyQyBidXMgIzE6CisKKyMgbW9kcHJvYmUgamM0MgorIyBlY2hvIGpjNDIgMHgxOCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0xL25ld19kZXZpY2UKKworQSBKQyA0Mi40IGNvbXBsaWFudCBjaGlwIHN1cHBvcnRzIGEgc2luZ2xlIHRlbXBlcmF0dXJlIHNlbnNvci4gTWluaW11bSwgbWF4aW11bSwKK2FuZCBjcml0aWNhbCB0ZW1wZXJhdHVyZSBjYW4gYmUgY29uZmlndXJlZC4gVGhlcmUgYXJlIGFsYXJtcyBmb3IgaGlnaCwgbG93LAorYW5kIGNyaXRpY2FsIHRocmVzaG9sZHMuCisKK1RoZXJlIGlzIGFsc28gYW4gaHlzdGVyZXNpcyB0byBjb250cm9sIHRoZSB0aHJlc2hvbGRzIGZvciByZXNldHRpbmcgYWxhcm1zLgorUGVyIEpDIDQyLjQgc3BlY2lmaWNhdGlvbiwgdGhlIGh5c3RlcmVzaXMgdGhyZXNob2xkIGNhbiBiZSBjb25maWd1cmVkIHRvIDAsIDEuNSwKKzMuMCwgYW5kIDYuMCBkZWdyZWVzIEMuIENvbmZpZ3VyZWQgaHlzdGVyZXNpcyB2YWx1ZXMgd2lsbCBiZSByb3VuZGVkIHRvIHRob3NlCitsaW1pdHMuIFRoZSBjaGlwIHN1cHBvcnRzIG9ubHkgYSBzaW5nbGUgcmVnaXN0ZXIgdG8gY29uZmlndXJlIHRoZSBoeXN0ZXJlc2lzLAord2hpY2ggYXBwbGllcyB0byBhbGwgbGltaXRzLiBUaGlzIHJlZ2lzdGVyIGNhbiBiZSB3cml0dGVuIGJ5IHdyaXRpbmcgaW50bwordGVtcDFfY3JpdF9oeXN0LiBPdGhlciBoeXN0ZXJlc2lzIGF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seS4KKworU3lzZnMgZW50cmllcworLS0tLS0tLS0tLS0tLQorCit0ZW1wMV9pbnB1dAkJVGVtcGVyYXR1cmUgKFJPKQordGVtcDFfbWluCQlNaW5pbXVtIHRlbXBlcmF0dXJlIChSVykKK3RlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZSAoUlcpCit0ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlIChSVykKKwordGVtcDFfY3JpdF9oeXN0CQlDcml0aWNhbCBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlIChSVykKK3RlbXAxX21heF9oeXN0CQlNYXhpbXVtIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUgKFJPKQorCit0ZW1wMV9taW5fYWxhcm0JCVRlbXBlcmF0dXJlIGxvdyBhbGFybQordGVtcDFfbWF4X2FsYXJtCQlUZW1wZXJhdHVyZSBoaWdoIGFsYXJtCit0ZW1wMV9jcml0X2FsYXJtCVRlbXBlcmF0dXJlIGNyaXRpY2FsIGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3BrZ3RlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BrZ3RlbXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMWZiMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vcGtndGVtcApAQCAtMCwwICsxLDM2IEBACitLZXJuZWwgZHJpdmVyIHBrZ3RlbXAKKz09PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIEludGVsIGZhbWlseQorICAgIFByZWZpeDogJ3BrZ3RlbXAnCisgICAgQ1BVSUQ6CisgICAgRGF0YXNoZWV0OiBJbnRlbCA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKKyAgICAgICAgICAgICAgIFZvbHVtZSAzQTogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlCisKK0F1dGhvcjogRmVuZ2h1YSBZdQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgcGVybWl0cyByZWFkaW5nIHBhY2thZ2UgbGV2ZWwgdGVtcGVyYXR1cmUgc2Vuc29yIGVtYmVkZGVkIGluc2lkZQorSW50ZWwgQ1BVIHBhY2thZ2UuIFRoZSBzZW5zb3JzIGNhbiBiZSBpbiBjb3JlLCB1bmNvcmUsIG1lbW9yeSBjb250cm9sbGVyLCBvcgorb3RoZXIgY29tcG9uZW50cyBpbiBhIHBhY2thZ2UuIFRoZSBmZWF0dXJlIGlzIGZpcnN0IGltcGxlbWVudGVkIGluIEludGVsIFNhbmR5CitCcmlkZ2UgcGxhdGZvcm0uCisKK1RlbXBlcmF0dXJlIGlzIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcworMSBkZWdyZWUgQy4gVmFsaWQgdGVtcGVyYXR1cmVzIGFyZSBmcm9tIDAgdG8gVGpNYXggZGVncmVlcyBDLCBiZWNhdXNlIHRoZSBhY3R1YWwKK3ZhbHVlIG9mIHRlbXBlcmF0dXJlIHJlZ2lzdGVyIGlzIGluIGZhY3QgYSBkZWx0YSBmcm9tIFRqTWF4LgorCitUZW1wZXJhdHVyZSBrbm93biBhcyBUak1heCBpcyB0aGUgbWF4aW11bSBqdW5jdGlvbiB0ZW1wZXJhdHVyZSBvZiBwYWNrYWdlLgorV2UgZ2V0IHRoaXMgZnJvbSBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQuIElmIHRoZSBNU1IgaXMgbm90IGFjY2Vzc2libGUsCit3ZSBkZWZpbmUgVGpNYXggYXMgMTAwIGRlZ3JlZXMgQ2Vsc2l1cy4gQXQgdGhpcyB0ZW1wZXJhdHVyZSwgcHJvdGVjdGlvbgorbWVjaGFuaXNtIHdpbGwgcGVyZm9ybSBhY3Rpb25zIHRvIGZvcmNpYmx5IGNvb2wgZG93biB0aGUgcGFja2FnZS4gQWxhcm0KK21heSBiZSByYWlzZWQsIGlmIHRoZSB0ZW1wZXJhdHVyZSBncm93cyBlbm91Z2ggKG1vcmUgdGhhbiBUak1heCkgdG8gdHJpZ2dlcgordGhlIE91dC1PZi1TcGVjIGJpdC4gRm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIGV4cG9ydGVkIHN5c2ZzIGZpbGVzOgorCit0ZW1wMV9pbnB1dAkgIC0gUGFja2FnZSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMpLgordGVtcDFfbWF4ICAgICAgICAtIEFsbCBjb29saW5nIGRldmljZXMgc2hvdWxkIGJlIHR1cm5lZCBvbi4KK3RlbXAxX2NyaXQJICAtIE1heGltdW0ganVuY3Rpb24gdGVtcGVyYXR1cmUgKGluIG1pbGxpZGVncmVlcyBDZWxzaXVzKS4KK3RlbXAxX2NyaXRfYWxhcm0gLSBTZXQgd2hlbiBPdXQtb2Ytc3BlYyBiaXQgaXMgc2V0LCBuZXZlciBjbGVhcnMuCisJCSAgICBDb3JyZWN0IENQVSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIGd1YXJhbnRlZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NSBiL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjBmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NQpAQCAtMCwwICsxLDE1NyBAQAorS2VybmVsIGRyaXZlciBzbW02NjUKKz09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBTdW1taXQgTWljcm9lbGVjdHJvbmljcyBTTU00NjUKKyAgICBQcmVmaXg6ICdzbW00NjUnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6CisgICAgICBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTQ2NS9TTU00NjVEUy5wZGYKKyAgKiBTdW1taXQgTWljcm9lbGVjdHJvbmljcyBTTU02NjUsIFNNTTY2NUIKKyAgICBQcmVmaXg6ICdzbW02NjUnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6CisgICAgICBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTY2NS9TTU02NjVCXzIwODlfMjAucGRmCisgICogU3VtbWl0IE1pY3JvZWxlY3Ryb25pY3MgU01NNjY1QworICAgIFByZWZpeDogJ3NtbTY2NWMnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6CisgICAgICBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTY2NUMvU01NNjY1Q18yMTI1LnBkZgorICAqIFN1bW1pdCBNaWNyb2VsZWN0cm9uaWNzIFNNTTc2NAorICAgIFByZWZpeDogJ3NtbTc2NCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDoKKyAgICAgIGh0dHA6Ly93d3cuc3VtbWl0bWljcm8uY29tL3Byb2Rfc2VsZWN0L3N1bW1hcnkvU01NNzY0L1NNTTc2NF8yMDk4LnBkZgorICAqIFN1bW1pdCBNaWNyb2VsZWN0cm9uaWNzIFNNTTc2NiwgU01NNzY2QgorICAgIFByZWZpeDogJ3NtbTc2NicKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldHM6CisgICAgICBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTc2Ni9TTU03NjZfMjA4Ni5wZGYKKyAgICAgIGh0dHA6Ly93d3cuc3VtbWl0bWljcm8uY29tL3Byb2Rfc2VsZWN0L3N1bW1hcnkvU01NNzY2Qi9TTU03NjZCXzIxMjIucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworTW9kdWxlIFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKyogdnJlZjogaW50CisgIERlZmF1bHQ6IDEyNTAgKG1WKQorICBSZWZlcmVuY2Ugdm9sdGFnZSBvbiBWUkVGX0FEQyBwaW4gaW4gbVYuIEl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIHNldAorICB0aGlzIHBhcmFtZXRlciB1bmxlc3MgYSBub24tZGVmYXVsdCByZWZlcmVuY2Ugdm9sdGFnZSBpcyB1c2VkLgorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitbRnJvbSBkYXRhc2hlZXRdIFRoZSBTTU02NjUgaXMgYW4gQWN0aXZlIERDIE91dHB1dCBwb3dlciBzdXBwbHkgQ29udHJvbGxlcgordGhhdCBtb25pdG9ycywgbWFyZ2lucyBhbmQgY2FzY2FkZSBzZXF1ZW5jZXMgcG93ZXIuIFRoZSBwYXJ0IG1vbml0b3JzIHNpeAorcG93ZXIgc3VwcGx5IGNoYW5uZWxzIGFzIHdlbGwgYXMgVkRELCAxMlYgaW5wdXQsIHR3byBnZW5lcmFsLXB1cnBvc2UgYW5hbG9nCitpbnB1dHMgYW5kIGFuIGludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciB1c2luZyBhIDEwLWJpdCBBREMuCisKK0VhY2ggbW9uaXRvcmVkIGNoYW5uZWwgaGFzIGl0cyBvd24gaGlnaCBhbmQgbG93IGxpbWl0cywgcGx1cyBhIGNyaXRpY2FsCitsaW1pdC4KKworU3VwcG9ydCBmb3IgU01NNDY1LCBTTU03NjQsIGFuZCBTTU03NjYgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnV0IGlzIHVudGVzdGVkLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgZGV2aWNlcywgc2luY2UgdGhlcmUgaXMgbm8gcmVnaXN0ZXIgd2hpY2gKK2NhbiBiZSBzYWZlbHkgdXNlZCB0byBpZGVudGlmeSB0aGUgY2hpcC4gWW91IHdpbGwgaGF2ZSB0byBpbnN0YW50aWF0ZQordGhlIGRldmljZXMgZXhwbGljaXRseS4gV2hlbiBpbnN0YW50aWF0aW5nIHRoZSBkZXZpY2UsIHlvdSBoYXZlIHRvIHNwZWNpZnkKK2l0cyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MuCisKK0V4YW1wbGU6IHRoZSBmb2xsb3dpbmcgd2lsbCBsb2FkIHRoZSBkcml2ZXIgZm9yIGFuIFNNTTY2NSBhdCBhZGRyZXNzIDB4NTcKK29uIEkyQyBidXMgIzE6CiskIG1vZHByb2JlIHNtbTY2NQorJCBlY2hvIHNtbTY2NSAweDU3ID4gL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTEvbmV3X2RldmljZQorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgdXNlcyB0aGUgdmFsdWVzIGluIHRoZSBkYXRhc2hlZXQgdG8gY29udmVydCBBREMgcmVnaXN0ZXIgdmFsdWVzCitpbnRvIHRoZSB2YWx1ZXMgc3BlY2lmaWVkIGluIHRoZSBzeXNmcy1pbnRlcmZhY2UgZG9jdW1lbnQuIEFsbCBhdHRyaWJ1dGVzIGFyZQorcmVhZCBvbmx5LgorCitNaW4sIG1heCwgbGNyaXQsIGFuZCBjcml0IHZhbHVlcyBhcmUgdXNlZCBieSB0aGUgY2hpcCB0byB0cmlnZ2VyIGV4dGVybmFsIHNpZ25hbHMKK2FuZC9vciBvdGhlciBhY3Rpdml0eS4gVHJpZ2dlcmVkIHNpZ25hbHMgY2FuIGluY2x1ZGUgSEVBTFRIWSwgUlNULCBQb3dlciBPZmYsCitvciBGYXVsdCBkZXBlbmRpbmcgb24gdGhlIGNoaXAgY29uZmlndXJhdGlvbi4gVGhlIGRyaXZlciByZXBvcnRzIHZhbHVlcyBhcyBsY3JpdAorb3IgY3JpdCBpZiBleGNlZWRpbmcgdGhlIGxpbWl0cyB0cmlnZ2VycyBSU1QsIFBvd2VyIE9mZiwgb3IgRmF1bHQsIGFuZCBhcyBtaW4gb3IKK21heCBvdGhlcndpc2UuIEZvciBkZXRhaWxzIHBsZWFzZSBzZWUgdGhlIFNNTTY2NSBkYXRhc2hlZXQuCisKK0ZvciBTTU00NjUgYW5kIFNNTTc2NCwgdmFsdWVzIGZvciBDaGFubmVsIEUgYW5kIEYgYXJlIHJlcG9ydGVkIGJ1dCB1bmRlZmluZWQuCisKK2luMV9pbnB1dAkJMTJWIGlucHV0IHZvbHRhZ2UgKG1WKQoraW4yX2lucHV0CQkzLjNWIChWREQpIGlucHV0IHZvbHRhZ2UgKG1WKQoraW4zX2lucHV0CQlDaGFubmVsIEEgdm9sdGFnZSAobVYpCitpbjRfaW5wdXQJCUNoYW5uZWwgQiB2b2x0YWdlIChtVikKK2luNV9pbnB1dAkJQ2hhbm5lbCBDIHZvbHRhZ2UgKG1WKQoraW42X2lucHV0CQlDaGFubmVsIEQgdm9sdGFnZSAobVYpCitpbjdfaW5wdXQJCUNoYW5uZWwgRSB2b2x0YWdlIChtVikKK2luOF9pbnB1dAkJQ2hhbm5lbCBGIHZvbHRhZ2UgKG1WKQoraW45X2lucHV0CQlBSU4xIHZvbHRhZ2UgKG1WKQoraW4xMF9pbnB1dAkJQUlOMiB2b2x0YWdlIChtVikKKworaW4xX21pbgkJCTEydiBpbnB1dCBtaW5pbXVtIHZvbHRhZ2UgKG1WKQoraW4yX21pbgkJCTMuM1YgKFZERCkgaW5wdXQgbWluaW11bSB2b2x0YWdlIChtVikKK2luM19taW4JCQlDaGFubmVsIEEgbWluaW11bSB2b2x0YWdlIChtVikKK2luNF9taW4JCQlDaGFubmVsIEIgbWluaW11bSB2b2x0YWdlIChtVikKK2luNV9taW4JCQlDaGFubmVsIEMgbWluaW11bSB2b2x0YWdlIChtVikKK2luNl9taW4JCQlDaGFubmVsIEQgbWluaW11bSB2b2x0YWdlIChtVikKK2luN19taW4JCQlDaGFubmVsIEUgbWluaW11bSB2b2x0YWdlIChtVikKK2luOF9taW4JCQlDaGFubmVsIEYgbWluaW11bSB2b2x0YWdlIChtVikKK2luOV9taW4JCQlBSU4xIG1pbmltdW0gdm9sdGFnZSAobVYpCitpbjEwX21pbgkJQUlOMiBtaW5pbXVtIHZvbHRhZ2UgKG1WKQorCitpbjFfbWF4CQkJMTJ2IGlucHV0IG1heGltdW0gdm9sdGFnZSAobVYpCitpbjJfbWF4CQkJMy4zViAoVkREKSBpbnB1dCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW4zX21heAkJCUNoYW5uZWwgQSBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW40X21heAkJCUNoYW5uZWwgQiBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW41X21heAkJCUNoYW5uZWwgQyBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW42X21heAkJCUNoYW5uZWwgRCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW43X21heAkJCUNoYW5uZWwgRSBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW44X21heAkJCUNoYW5uZWwgRiBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW45X21heAkJCUFJTjEgbWF4aW11bSB2b2x0YWdlIChtVikKK2luMTBfbWF4CQlBSU4yIG1heGltdW0gdm9sdGFnZSAobVYpCisKK2luMV9sY3JpdAkJMTJ2IGlucHV0IGNyaXRpY2FsIG1pbmltdW0gdm9sdGFnZSAobVYpCitpbjJfbGNyaXQJCTMuM1YgKFZERCkgaW5wdXQgY3JpdGljYWwgbWluaW11bSB2b2x0YWdlIChtVikKK2luM19sY3JpdAkJQ2hhbm5lbCBBIGNyaXRpY2FsIG1pbmltdW0gdm9sdGFnZSAobVYpCitpbjRfbGNyaXQJCUNoYW5uZWwgQiBjcml0aWNhbCBtaW5pbXVtIHZvbHRhZ2UgKG1WKQoraW41X2xjcml0CQlDaGFubmVsIEMgY3JpdGljYWwgbWluaW11bSB2b2x0YWdlIChtVikKK2luNl9sY3JpdAkJQ2hhbm5lbCBEIGNyaXRpY2FsIG1pbmltdW0gdm9sdGFnZSAobVYpCitpbjdfbGNyaXQJCUNoYW5uZWwgRSBjcml0aWNhbCBtaW5pbXVtIHZvbHRhZ2UgKG1WKQoraW44X2xjcml0CQlDaGFubmVsIEYgY3JpdGljYWwgbWluaW11bSB2b2x0YWdlIChtVikKK2luOV9sY3JpdAkJQUlOMSBjcml0aWNhbCBtaW5pbXVtIHZvbHRhZ2UgKG1WKQoraW4xMF9sY3JpdAkJQUlOMiBjcml0aWNhbCBtaW5pbXVtIHZvbHRhZ2UgKG1WKQorCitpbjFfY3JpdAkJMTJ2IGlucHV0IGNyaXRpY2FsIG1heGltdW0gdm9sdGFnZSAobVYpCitpbjJfY3JpdAkJMy4zViAoVkREKSBpbnB1dCBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW4zX2NyaXQJCUNoYW5uZWwgQSBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW40X2NyaXQJCUNoYW5uZWwgQiBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW41X2NyaXQJCUNoYW5uZWwgQyBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW42X2NyaXQJCUNoYW5uZWwgRCBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW43X2NyaXQJCUNoYW5uZWwgRSBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW44X2NyaXQJCUNoYW5uZWwgRiBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQoraW45X2NyaXQJCUFJTjEgY3JpdGljYWwgbWF4aW11bSB2b2x0YWdlIChtVikKK2luMTBfY3JpdAkJQUlOMiBjcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UgKG1WKQorCitpbjFfY3JpdF9hbGFybQkJMTJ2IGlucHV0IGNyaXRpY2FsIGFsYXJtCitpbjJfY3JpdF9hbGFybQkJMy4zViAoVkREKSBpbnB1dCBjcml0aWNhbCBhbGFybQoraW4zX2NyaXRfYWxhcm0JCUNoYW5uZWwgQSBjcml0aWNhbCBhbGFybQoraW40X2NyaXRfYWxhcm0JCUNoYW5uZWwgQiBjcml0aWNhbCBhbGFybQoraW41X2NyaXRfYWxhcm0JCUNoYW5uZWwgQyBjcml0aWNhbCBhbGFybQoraW42X2NyaXRfYWxhcm0JCUNoYW5uZWwgRCBjcml0aWNhbCBhbGFybQoraW43X2NyaXRfYWxhcm0JCUNoYW5uZWwgRSBjcml0aWNhbCBhbGFybQoraW44X2NyaXRfYWxhcm0JCUNoYW5uZWwgRiBjcml0aWNhbCBhbGFybQoraW45X2NyaXRfYWxhcm0JCUFJTjEgY3JpdGljYWwgYWxhcm0KK2luMTBfY3JpdF9hbGFybQkJQUlOMiBjcml0aWNhbCBhbGFybQorCit0ZW1wMV9pbnB1dAkJQ2hpcCB0ZW1wZXJlcmF0dXJlCit0ZW1wMV9taW4JCU1pbWltdW0gY2hpcCB0ZW1wZXJlcmF0dXJlCit0ZW1wMV9tYXgJCU1heGltdW0gY2hpcCB0ZW1wZXJlcmF0dXJlCit0ZW1wMV9jcml0CQlDcml0aWNhbCBjaGlwIHRlbXBlcmVyYXR1cmUKK3RlbXAxX2NyaXRfYWxhcm0JVGVtcGVyYXR1cmUgY3JpdGljYWwgYWxhcm0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCAyZWMzZDdkLi4zMzIyM2ZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC03OSw2ICs3OSw3IEBACiAweDIyCWFsbAlzY3NpL3NnLmgKICcjJwkwMC0zRglJRUVFIDEzOTQgU3Vic3lzdGVtCUJsb2NrIGZvciB0aGUgZW50aXJlIHN1YnN5c3RlbQogJyQnCTAwLTBGCWxpbnV4L3BlcmZfY291bnRlci5oLCBsaW51eC9wZXJmX2V2ZW50LmgKKycmJwkwMC0wNwlkcml2ZXJzL2ZpcmV3aXJlL25vc3ktdXNlci5oCiAnMScJMDAtMUYJPGxpbnV4L3RpbWVwcHMuaD4JUFBTIGtpdCBmcm9tIFVscmljaCBXaW5kbAogCQkJCQk8ZnRwOi8vZnRwLmRlLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RhZW1vbnMvbnRwL1BQUy8+CiAnMicJMDEtMDQJbGludXgvaTJvLmgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZjcyYmE3Mi4uODczYjY4MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTczLDcgKzczLDYgQEAKIAlNVEQJTVREIChNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2UpIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlORVQJQXBwcm9wcmlhdGUgbmV0d29yayBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTlVNQQlOVU1BIHN1cHBvcnQgaXMgZW5hYmxlZC4KLQlHRU5FUklDX1RJTUUgVGhlIGdlbmVyaWMgdGltZW9mZGF5IGNvZGUgaXMgZW5hYmxlZC4KIAlORlMJQXBwcm9wcmlhdGUgTkZTIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlPU1MJT1NTIHNvdW5kIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlQVl9PUFMJQSBwYXJhdmlydHVhbGl6ZWQga2VybmVsIGlzIGVuYWJsZWQuCkBAIC0yODIsMTkgKzI4MSwxMiBAQAogCQkJbm86IEFDUEkgT3BlcmF0aW9uUmVnaW9ucyBhcmUgbm90IG1hcmtlZCBhcyByZXNlcnZlZCwKIAkJCW5vIGZ1cnRoZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQuCiAKLQlhZDE4NDg9CQlbSFcsT1NTXQotCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8dHlwZT4KLQogCWFkZF9lZmlfbWVtbWFwCVtFRkk7IFg4Nl0gSW5jbHVkZSBFRkkgbWVtb3J5IG1hcCBpbgogCQkJa2VybmVsJ3MgbWFwIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCBSQU0uCiAKIAlhZHZhbnN5cz0JW0hXLFNDU0ldCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9hZHZhbnN5cy5jLgogCi0JYWVkc3AxNj0JW0hXLE9TU10gQXVkaW8gRXhjZWwgRFNQIDE2Ci0JCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPG1zc19pbz4sPG1wdV9pbz4sPG1wdV9pcnE+Ci0JCQlTZWUgYWxzbyBoZWFkZXIgb2Ygc291bmQvb3NzL2FlZHNwMTYuYy4KLQogCWFncD0JCVtBR1BdCiAJCQl7IG9mZiB8IHRyeV91bnN1cHBvcnRlZCB9CiAJCQlvZmY6IGRpc2FibGUgQUdQIHN1cHBvcnQKQEAgLTMxMyw2ICszMDUsOSBAQAogCWFpYzc5eHg9CVtIVyxTQ1NJXQogCQkJU2VlIERvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dC4KIAorCUFMU0EJCVtIVyxBTFNBXQorCQkJU2VlIERvY3VtZW50YXRpb24vc291bmQvYWxzYS9hbHNhLXBhcmFtZXRlcnMudHh0CisKIAlhbGlnbm1lbnQ9CVtLTkwsQVJNXQogCQkJQWxsb3cgdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGFsaWdubWVudCBmYXVsdCBoYW5kbGVyCiAJCQliZWhhdmlvdXIgdG8gYmUgc3BlY2lmaWVkLiAgQml0IDAgZW5hYmxlcyB3YXJuaW5ncywKQEAgLTQ3MCw3ICs0NjUsNyBAQAogCQkJY2xvY2tzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSwgaXQgZGVmYXVsdHMgdG8gUElULgogCQkJRm9ybWF0OiB7IHBpdCB8IHRzYyB8IGN5Y2xvbmUgfCBwbXRtciB9CiAKLQljbG9ja3NvdXJjZT0JW0dFTkVSSUNfVElNRV0gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2xvY2tzb3VyY2UKKwljbG9ja3NvdXJjZT0JT3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2xvY2tzb3VyY2UKIAkJCUZvcm1hdDogPHN0cmluZz4KIAkJCU92ZXJyaWRlIHRoZSBkZWZhdWx0IGNsb2Nrc291cmNlIGFuZCB1c2UgdGhlIGNsb2Nrc291cmNlCiAJCQl3aXRoIHRoZSBuYW1lIHNwZWNpZmllZC4KQEAgLTY1Nyw4ICs2NTIsNiBAQAogCQkJRGlzYWJsZSBQSU4gMSBvZiBBUElDIHRpbWVyCiAJCQlDYW4gYmUgdXNlZnVsIHRvIHdvcmsgYXJvdW5kIGNoaXBzZXQgYnVncy4KIAotCWRtYXNvdW5kPQlbSFcsT1NTXSBTb3VuZCBzdWJzeXN0ZW0gYnVmZmVycwotCiAJZG1hX2RlYnVnPW9mZglJZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggRE1BX0FQSV9ERUJVRyBzdXBwb3J0LAogCQkJdGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGRlYnVnZ2luZyBjb2RlIGF0IGJvb3QuCiAKQEAgLTY4OCw4ICs2ODEsMTEgQEAKIAllYXJseWNvbj0JW0tOTF0gT3V0cHV0IGVhcmx5IGNvbnNvbGUgZGV2aWNlIGFuZCBvcHRpb25zLgogCQl1YXJ0WzgyNTBdLGlvLDxhZGRyPlssb3B0aW9uc10KIAkJdWFydFs4MjUwXSxtbWlvLDxhZGRyPlssb3B0aW9uc10KKwkJdWFydFs4MjUwXSxtbWlvMzIsPGFkZHI+WyxvcHRpb25zXQogCQkJU3RhcnQgYW4gZWFybHksIHBvbGxlZC1tb2RlIGNvbnNvbGUgb24gdGhlIDgyNTAvMTY1NTAKIAkJCVVBUlQgYXQgdGhlIHNwZWNpZmllZCBJL08gcG9ydCBvciBNTUlPIGFkZHJlc3MuCisJCQlNTUlPIGludGVyLXJlZ2lzdGVyIGFkZHJlc3Mgc3RyaWRlIGlzIGVpdGhlciA4Yml0IChtbWlvKQorICAgICAgICAgICAgICAgICAgICAgICAgb3IgMzJiaXQgKG1taW8zMikuCiAJCQlUaGUgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIHR0eVMsIGFib3ZlLgogCiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCkBAIC05MTksOSArOTE1LDYgQEAKIAkJCSAgICAgY29udHJvbGxlcgogCWk4MDQyLm5vcG5wCVtIV10gRG9uJ3QgdXNlIEFDUElQblAgLyBQblBCSU9TIHRvIGRpc2NvdmVyIEtCRC9BVVgKIAkJCSAgICAgY29udHJvbGxlcnMKLQlpODA0Mi5wYW5pY2JsaW5rPQotCQkJW0hXXSBGcmVxdWVuY3kgd2l0aCB3aGljaCBrZXlib2FyZCBMRURzIHNob3VsZCBibGluawotCQkJICAgICB3aGVuIGtlcm5lbCBwYW5pY3MgKGRlZmF1bHQgaXMgMC41IHNlYykKIAlpODA0Mi5yZXNldAlbSFddIFJlc2V0IHRoZSBjb250cm9sbGVyIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwCiAJaTgwNDIudW5sb2NrCVtIV10gVW5sb2NrIChpZ25vcmUpIHRoZSBrZXlsb2NrCiAKQEAgLTE1MjgsOSArMTUyMSw2IEBACiAJCQl0aGF0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzYWJsZSBmb3IgYWxsIGFsbG9jYXRpb25zCiAJCQlpcyBub3QgdG9vIHNtYWxsLgogCi0JbXB1NDAxPQkJW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPgotCiAJTVREX1BhcnRpdGlvbj0JW01URF0KIAkJCUZvcm1hdDogPG5hbWU+LDxyZWdpb24tbnVtYmVyPiw8c2l6ZT4sPG9mZnNldD4KIApAQCAtMTgxNiw2ICsxODA2LDggQEAKIAogCW5vdXNiCQlbVVNCXSBEaXNhYmxlIHRoZSBVU0Igc3Vic3lzdGVtCiAKKwlub3dhdGNoZG9nCVtLTkxdIERpc2FibGUgdGhlIGxvY2t1cCBkZXRlY3Rvci4KKwogCW5vd2IJCVtBUk1dCiAKIAlub3gyYXBpYwlbWDg2LTY0LEFQSUNdIERvIG5vdCBlbmFibGUgeDJBUElDIG1vZGUuCkBAIC0xODUzLDkgKzE4NDUsNiBAQAogCQkJRm9yIGV4YW1wbGUsIHRvIG92ZXJyaWRlIEkyQyBidXMyOgogCQkJb21hcF9tdXg9aTJjMl9zY2wuaTJjMl9zY2w9MHgxMDAsaTJjMl9zZGEuaTJjMl9zZGE9MHgxMDAKIAotCW9wbDM9CQlbSFcsT1NTXQotCQkJRm9ybWF0OiA8aW8+Ci0KIAlvcHJvZmlsZS50aW1lcj0JW0hXXQogCQkJVXNlIHRpbWVyIGludGVycnVwdCBpbnN0ZWFkIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXJzCiAKQEAgLTE4NjcsNiArMTg1Niw5IEBACiAJCQkJcGVyZm1vbiBvbiBJbnRlbCBDUFVzIGluc3RlYWQgb2YgdGhlCiAJCQkJQ1BVIHNwZWNpZmljIGV2ZW50IHNldC4KIAorCU9TUwkJW0hXLE9TU10KKwkJCVNlZSBEb2N1bWVudGF0aW9uL3NvdW5kL29zcy9vc3MtcGFyYW1ldGVycy50eHQKKwogCW9zc3Q9CQlbSFcsU0NTSV0gU0NTSSBUYXBlIERyaXZlcgogCQkJRm9ybWF0OiA8YnVmZmVyX3NpemU+LDx3cml0ZV90aHJlc2hvbGQ+CiAJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0LgpAQCAtMTkwMyw5ICsxODk1LDYgQEAKIAkJCUN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIGtub3dzIDY4NmEgYW5kIDgyMzEgY2hpcHMuCiAJCQlGb3JtYXQ6IFtzcHB8cHMyfGVwcHxlY3B8ZWNwZXBwXQogCi0JcGFzMj0JCVtIVyxPU1NdIEZvcm1hdDoKLQkJCTxpbz4sPGlycT4sPGRtYT4sPGRtYTE2Piw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxzYl9kbWExNj4KLQogCXBhczE2PQkJW0hXLFNDU0ldCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvc2NzaS9wYXMxNi5jLgogCkBAIC0xOTc0LDYgKzE5NjMsOCBAQAogCQlub3JvbQkJW1g4Nl0gRG8gbm90IGFzc2lnbiBhZGRyZXNzIHNwYWNlIHRvCiAJCQkJZXhwYW5zaW9uIFJPTXMgdGhhdCBkbyBub3QgYWxyZWFkeSBoYXZlCiAJCQkJQklPUyBhc3NpZ25lZCBhZGRyZXNzIHJhbmdlcy4KKwkJbm9iYXIJCVtYODZdIERvIG5vdCBhc3NpZ24gYWRkcmVzcyBzcGFjZSB0byB0aGUKKwkJCQlCQVJzIHRoYXQgd2VyZW4ndCBhc3NpZ25lZCBieSB0aGUgQklPUy4KIAkJaXJxbWFzaz0weE1NTU0JW1g4Nl0gU2V0IGEgYml0IG1hc2sgb2YgSVJRcyBhbGxvd2VkIHRvIGJlCiAJCQkJYXNzaWduZWQgYXV0b21hdGljYWxseSB0byBQQ0kgZGV2aWNlcy4gWW91IGNhbgogCQkJCW1ha2UgdGhlIGtlcm5lbCBleGNsdWRlIElSUXMgb2YgeW91ciBJU0EgY2FyZHMKQEAgLTIxNzUsMTAgKzIxNjYsNiBAQAogCQkJW0hXLE1PVVNFXSBDb250cm9scyBMb2dpdGVjaCBzbWFydHNjcm9sbCBhdXRvcmVwZWF0LgogCQkJMCA9IGRpc2FibGVkLCAxID0gZW5hYmxlZCAoZGVmYXVsdCkuCiAKLQlwc3M9CQlbSFcsT1NTXSBQZXJzb25hbCBTb3VuZCBTeXN0ZW0gKEVDSE8gRVNDNjE0KQotCQkJRm9ybWF0OgotCQkJPGlvPiw8bXNzX2lvPiw8bXNzX2lycT4sPG1zc19kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgotCiAJcHQuCQlbUEFSSURFXQogCQkJU2VlIERvY3VtZW50YXRpb24vYmxvY2tkZXYvcGFyaWRlLnR4dC4KIApAQCAtMjM5NCwxMjggKzIzODEsNiBAQAogCQkJCTE6IEZhc3QgcGluIHNlbGVjdCAoZGVmYXVsdCkKIAkJCQkyOiBBVEMgSVJNb2RlCiAKLQlzbmQtYWQxODE2YT0JW0hXLEFMU0FdCi0KLQlzbmQtYWQxODQ4PQlbSFcsQUxTQV0KLQotCXNuZC1hbGk1NDUxPQlbSFcsQUxTQV0KLQotCXNuZC1hbHMxMDA9CVtIVyxBTFNBXQotCi0Jc25kLWFsczQwMDA9CVtIVyxBTFNBXQotCi0Jc25kLWF6dDIzMjA9CVtIVyxBTFNBXQotCi0Jc25kLWNtaTgzMzA9CVtIVyxBTFNBXQotCi0Jc25kLWNtaXBjaT0JW0hXLEFMU0FdCi0KLQlzbmQtY3M0MjMxPQlbSFcsQUxTQV0KLQotCXNuZC1jczQyMzI9CVtIVyxBTFNBXQotCi0Jc25kLWNzNDIzNj0JW0hXLEFMU0FdCi0KLQlzbmQtY3M0MjgxPQlbSFcsQUxTQV0KLQotCXNuZC1jczQ2eHg9CVtIVyxBTFNBXQotCi0Jc25kLWR0MDE5eD0JW0hXLEFMU0FdCi0KLQlzbmQtZHVtbXk9CVtIVyxBTFNBXQotCi0Jc25kLWVtdTEwazE9CVtIVyxBTFNBXQotCi0Jc25kLWVuczEzNzA9CVtIVyxBTFNBXQotCi0Jc25kLWVuczEzNzE9CVtIVyxBTFNBXQotCi0Jc25kLWVzOTY4PQlbSFcsQUxTQV0KLQotCXNuZC1lczE2ODg9CVtIVyxBTFNBXQotCi0Jc25kLWVzMTh4eD0JW0hXLEFMU0FdCi0KLQlzbmQtZXMxOTM4PQlbSFcsQUxTQV0KLQotCXNuZC1lczE5Njg9CVtIVyxBTFNBXQotCi0Jc25kLWZtODAxPQlbSFcsQUxTQV0KLQotCXNuZC1ndXNjbGFzc2ljPQlbSFcsQUxTQV0KLQotCXNuZC1ndXNleHRyZW1lPQlbSFcsQUxTQV0KLQotCXNuZC1ndXNtYXg9CVtIVyxBTFNBXQotCi0Jc25kLWhkc3A9CVtIVyxBTFNBXQotCi0Jc25kLWljZTE3MTI9CVtIVyxBTFNBXQotCi0Jc25kLWludGVsOHgwPQlbSFcsQUxTQV0KLQotCXNuZC1pbnRlcndhdmU9CVtIVyxBTFNBXQotCi0Jc25kLWludGVyd2F2ZS1zdGI9Ci0JCQlbSFcsQUxTQV0KLQotCXNuZC1rb3JnMTIxMj0JW0hXLEFMU0FdCi0KLQlzbmQtbWFlc3RybzM9CVtIVyxBTFNBXQotCi0Jc25kLW1wdTQwMT0JW0hXLEFMU0FdCi0KLQlzbmQtbXRwYXY9CVtIVyxBTFNBXQotCi0Jc25kLW5tMjU2PQlbSFcsQUxTQV0KLQotCXNuZC1vcGwzc2EyPQlbSFcsQUxTQV0KLQotCXNuZC1vcHRpOTJ4LWFkMTg0OD0KLQkJCVtIVyxBTFNBXQotCi0Jc25kLW9wdGk5MngtY3M0MjMxPQotCQkJW0hXLEFMU0FdCi0KLQlzbmQtb3B0aTkzeD0JW0hXLEFMU0FdCi0KLQlzbmQtcG1hYz0JW0hXLEFMU0FdCi0KLQlzbmQtcm1lMzI9CVtIVyxBTFNBXQotCi0Jc25kLXJtZTk2PQlbSFcsQUxTQV0KLQotCXNuZC1ybWU5NjUyPQlbSFcsQUxTQV0KLQotCXNuZC1zYjg9CVtIVyxBTFNBXQotCi0Jc25kLXNiMTY9CVtIVyxBTFNBXQotCi0Jc25kLXNiYXdlPQlbSFcsQUxTQV0KLQotCXNuZC1zZXJpYWw9CVtIVyxBTFNBXQotCi0Jc25kLXNnYWxheHk9CVtIVyxBTFNBXQotCi0Jc25kLXNvbmljdmliZXM9CVtIVyxBTFNBXQotCi0Jc25kLXN1bi1hbWQ3OTMwPQotCQkJW0hXLEFMU0FdCi0KLQlzbmQtc3VuLWNzNDIzMT0JW0hXLEFMU0FdCi0KLQlzbmQtdHJpZGVudD0JW0hXLEFMU0FdCi0KLQlzbmQtdXNiLWF1ZGlvPQlbSFcsQUxTQSxVU0JdCi0KLQlzbmQtdmlhODJ4eD0JW0hXLEFMU0FdCi0KLQlzbmQtdmlybWlkaT0JW0hXLEFMU0FdCi0KLQlzbmQtd2F2ZWZyb250PQlbSFcsQUxTQV0KLQotCXNuZC15bWZwY2k9CVtIVyxBTFNBXQotCiAJc29mdGxvY2t1cF9wYW5pYz0KIAkJCVtLTkxdIFNob3VsZCB0aGUgc29mdC1sb2NrdXAgZGV0ZWN0b3IgZ2VuZXJhdGUgcGFuaWNzLgogCkBAIC0yNTMwLDkgKzIzOTUsNiBAQAogCXNwaWFfcGVkcj0KIAlzcGlhX3BlZGRyPQogCi0Jc3NjYXBlPQkJW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KLQogCXN0PQkJW0hXLFNDU0ldIFNDU0kgdGFwZSBwYXJhbWV0ZXJzIChidWZmZXJzLCBldGMuKQogCQkJU2VlIERvY3VtZW50YXRpb24vc2NzaS9zdC50eHQuCiAKQEAgLTI2NzIsMTAgKzI1MzQsNiBAQAogCQkJdG8gZmFjaWxpdGF0ZSBlYXJseSBib290IGRlYnVnZ2luZy4KIAkJCVNlZSBhbHNvIERvY3VtZW50YXRpb24vdHJhY2UvZXZlbnRzLnR4dAogCi0JdHJpeD0JCVtIVyxPU1NdIE1lZGlhVHJpeCBBdWRpb1RyaXggUHJvCi0JCQlGb3JtYXQ6Ci0JCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgotCiAJdHNjPQkJRGlzYWJsZSBjbG9ja3NvdXJjZS1tdXN0LXZlcmlmeSBmbGFnIGZvciBUU0MuCiAJCQlGb3JtYXQ6IDxzdHJpbmc+CiAJCQlbeDg2XSByZWxpYWJsZTogbWFyayB0c2MgY2xvY2tzb3VyY2UgYXMgcmVsaWFibGUsIHRoaXMKQEAgLTI2OTIsMTIgKzI1NTAsNiBAQAogCXUxNC0zNGY9CVtIVyxTQ1NJXSBVbHRyYVN0b3IgMTRGLzM0RiBTQ1NJIGhvc3QgYWRhcHRlcgogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvdTE0LTM0Zi5jLgogCi0JdWFydDQwMT0JW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPgotCi0JdWFydDY4NTA9CVtIVyxPU1NdCi0JCQlGb3JtYXQ6IDxpbz4sPGlycT4KLQogCXVoYXNoX2VudHJpZXM9CVtLTkwsTkVUXQogCQkJU2V0IG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIFVEUC9VRFAtTGl0ZSBjb25uZWN0aW9ucwogCkBAIC0yODYzLDkgKzI3MTUsNiBAQAogCQkJb3ZlcnJpZGRlbiBieSBpbmRpdmlkdWFsIGRyaXZlcnMuIDAgd2lsbCBoaWRlCiAJCQljdXJzb3JzLCAxIHdpbGwgZGlzcGxheSB0aGVtLgogCi0Jd2F2ZWFydGlzdD0JW0hXLE9TU10KLQkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4KLQogCXdkMzNjOTM9CVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvd2QzM2M5My5jLgogCkBAIC0yOTA4LDUgKzI3NTcsNCBAQAogCiBUT0RPOgogCi0JQWRkIGRvY3VtZW50YXRpb24gZm9yIEFMU0Egb3B0aW9ucy4KIAlBZGQgbW9yZSBEUk0gZHJpdmVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW1jLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9tbWMvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhNTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbW1jLzAwLUlOREVYCkBAIC0wLDAgKzEsNCBAQAorMDAtSU5ERVgKKyAgICAgICAgLSB0aGlzIGZpbGUKK21tYy1kZXYtYXR0cnMudHh0CisgICAgICAgIC0gaW5mbyBvbiBTRCBhbmQgTU1DIGRldmljZSBhdHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tYy9tbWMtZGV2LWF0dHJzLnR4dCBiL0RvY3VtZW50YXRpb24vbW1jL21tYy1kZXYtYXR0cnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21tYy9tbWMtZGV2LWF0dHJzLnR4dApAQCAtMCwwICsxLDU2IEBACitTRCBhbmQgTU1DIERldmljZSBBdHRyaWJ1dGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FsbCBhdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKKwljaWQJCQlDYXJkIElkZW50aWZhY3Rpb24gUmVnaXN0ZXIKKwljc2QJCQlDYXJkIFNwZWNpZmljIERhdGEgUmVnaXN0ZXIKKwlzY3IJCQlTRCBDYXJkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKFNEIG9ubHkpCisJZGF0ZQkJCU1hbnVmYWN0dXJpbmcgRGF0ZSAoZnJvbSBDSUQgUmVnaXN0ZXIpCisJZndyZXYJCQlGaXJtd2FyZS9Qcm9kdWN0IFJldmlzaW9uIChmcm9tIENJRCBSZWdpc3RlcikgKFNEIGFuZCBNTUN2MSBvbmx5KQorCWh3cmV2CQkJSGFyZHdhcmUvUHJvZHVjdCBSZXZpc2lvbiAoZnJvbSBDSUQgUmVnaXN0ZXIpIChTRCBhbmQgTU1DdjEgb25seSkKKwltYW5maWQJCQlNYW51ZmFjdHVyZXIgSUQgKGZyb20gQ0lEIFJlZ2lzdGVyKQorCW5hbWUJCQlQcm9kdWN0IE5hbWUgKGZyb20gQ0lEIFJlZ2lzdGVyKQorCW9lbWlkCQkJT0VNL0FwcGxpY2F0aW9uIElEIChmcm9tIENJRCBSZWdpc3RlcikKKwlzZXJpYWwJCQlQcm9kdWN0IFNlcmlhbCBOdW1iZXIgKGZyb20gQ0lEIFJlZ2lzdGVyKQorCWVyYXNlX3NpemUJCUVyYXNlIGdyb3VwIHNpemUKKwlwcmVmZXJyZWRfZXJhc2Vfc2l6ZQlQcmVmZXJyZWQgZXJhc2Ugc2l6ZQorCitOb3RlIG9uIEVyYXNlIFNpemUgYW5kIFByZWZlcnJlZCBFcmFzZSBTaXplOgorCisJImVyYXNlX3NpemUiIGlzIHRoZSAgbWluaW11bSBzaXplLCBpbiBieXRlcywgb2YgYW4gZXJhc2UKKwlvcGVyYXRpb24uICBGb3IgTU1DLCAiZXJhc2Vfc2l6ZSIgaXMgdGhlIGVyYXNlIGdyb3VwIHNpemUKKwlyZXBvcnRlZCBieSB0aGUgY2FyZC4gIE5vdGUgdGhhdCAiZXJhc2Vfc2l6ZSIgZG9lcyBub3QgYXBwbHkKKwl0byB0cmltIG9yIHNlY3VyZSB0cmltIG9wZXJhdGlvbnMgd2hlcmUgdGhlIG1pbmltdW0gc2l6ZSBpcworCWFsd2F5cyBvbmUgNTEyIGJ5dGUgc2VjdG9yLiAgRm9yIFNELCAiZXJhc2Vfc2l6ZSIgaXMgNTEyCisJaWYgdGhlIGNhcmQgaXMgYmxvY2stYWRkcmVzc2VkLCAwIG90aGVyd2lzZS4KKworCVNEL01NQyBjYXJkcyBjYW4gZXJhc2UgYW4gYXJiaXRyYXJpbHkgbGFyZ2UgYXJlYSB1cCB0byBhbmQKKwlpbmNsdWRpbmcgdGhlIHdob2xlIGNhcmQuICBXaGVuIGVyYXNpbmcgYSBsYXJnZSBhcmVhIGl0IG1heQorCWJlIGRlc2lyYWJsZSB0byBkbyBpdCBpbiBzbWFsbGVyIGNodW5rcyBmb3IgdGhyZWUgcmVhc29uczoKKwkJMS4gQSBzaW5nbGUgZXJhc2UgY29tbWFuZCB3aWxsIG1ha2UgYWxsIG90aGVyIEkvTyBvbgorCQl0aGUgY2FyZCB3YWl0LiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIGlmIHRoZSB3aG9sZSBjYXJkCisJCWlzIGJlaW5nIGVyYXNlZCwgYnV0IGVyYXNpbmcgb25lIHBhcnRpdGlvbiB3aWxsIG1ha2UKKwkJSS9PIGZvciBhbm90aGVyIHBhcnRpdGlvbiBvbiB0aGUgc2FtZSBjYXJkIHdhaXQgZm9yIHRoZQorCQlkdXJhdGlvbiBvZiB0aGUgZXJhc2UgLSB3aGljaCBjb3VsZCBiZSBhIHNldmVyYWwKKwkJbWludXRlcy4KKwkJMi4gVG8gYmUgYWJsZSB0byBpbmZvcm0gdGhlIHVzZXIgb2YgZXJhc2UgcHJvZ3Jlc3MuCisJCTMuIFRoZSBlcmFzZSB0aW1lb3V0IGJlY29tZXMgdG9vIGxhcmdlIHRvIGJlIHZlcnkKKwkJdXNlZnVsLiAgQmVjYXVzZSB0aGUgZXJhc2UgdGltZW91dCBjb250YWlucyBhIG1hcmdpbgorCQl3aGljaCBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBzaXplIG9mIHRoZSBlcmFzZSBhcmVhLAorCQl0aGUgdmFsdWUgY2FuIGVuZCB1cCBiZWluZyBzZXZlcmFsIG1pbnV0ZXMgZm9yIGxhcmdlCisJCWFyZWFzLgorCisJImVyYXNlX3NpemUiIGlzIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdW5pdCB0byBlcmFzZQorCShlc3BlY2lhbGx5IGZvciBTRCB3aGVyZSBpdCBpcyBqdXN0IG9uZSBzZWN0b3IpLAorCWhlbmNlICJwcmVmZXJyZWRfZXJhc2Vfc2l6ZSIgcHJvdmlkZXMgYSBnb29kIGNodW5rCisJc2l6ZSBmb3IgZXJhc2luZyBsYXJnZSBhcmVhcy4KKworCUZvciBNTUMsICJwcmVmZXJyZWRfZXJhc2Vfc2l6ZSIgaXMgdGhlIGhpZ2gtY2FwYWNpdHkKKwllcmFzZSBzaXplIGlmIGEgY2FyZCBzcGVjaWZpZXMgb25lLCBvdGhlcndpc2UgaXQgaXMKKwliYXNlZCBvbiB0aGUgY2FwYWNpdHkgb2YgdGhlIGNhcmQuCisKKwlGb3IgU0QsICJwcmVmZXJyZWRfZXJhc2Vfc2l6ZSIgaXMgdGhlIGFsbG9jYXRpb24gdW5pdAorCXNpemUgc3BlY2lmaWVkIGJ5IHRoZSBjYXJkLgorCisJInByZWZlcnJlZF9lcmFzZV9zaXplIiBpcyBpbiBieXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZDFlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CkBAIC0wLDAgKzEsMTQ2IEBACisJCQkgICAgID09PT09PT09PT09PT09PT09PT0KKwkJCSAgICAgRE5TIFJlc29sdmVyIE1vZHVsZQorCQkJICAgICA9PT09PT09PT09PT09PT09PT09CisKK0NvbnRlbnRzOgorCisgLSBPdmVydmlldy4KKyAtIENvbXBpbGF0aW9uLgorIC0gU2V0dGluZyB1cC4KKyAtIFVzYWdlLgorIC0gTWVjaGFuaXNtLgorIC0gRGVidWdnaW5nLgorCisKKz09PT09PT09CitPVkVSVklFVworPT09PT09PT0KKworVGhlIEROUyByZXNvbHZlciBtb2R1bGUgcHJvdmlkZXMgYSB3YXkgZm9yIGtlcm5lbCBzZXJ2aWNlcyB0byBtYWtlIEROUyBxdWVyaWVzCitieSB3YXkgb2YgcmVxdWVzdGluZyBhIGtleSBvZiBrZXkgdHlwZSBkbnNfcmVzb2x2ZXIuICBUaGVzZSBxdWVyaWVzIGFyZQordXBjYWxsZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggL3NiaW4vcmVxdWVzdC1rZXkuCisKK1RoZXNlIHJvdXRpbmVzIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHVzZXJzcGFjZSB0b29scyBkbnMudXBjYWxsLCBjaWZzLnVwY2FsbCBhbmQKK3JlcXVlc3Qta2V5LiAgSXQgaXMgdW5kZXIgZGV2ZWxvcG1lbnQgYW5kIGRvZXMgbm90IHlldCBwcm92aWRlIHRoZSBmdWxsIGZlYXR1cmUKK3NldC4gIFRoZSBmZWF0dXJlcyBpdCBkb2VzIHN1cHBvcnQgaW5jbHVkZToKKworICgqKSBJbXBsZW1lbnRzIHRoZSBkbnNfcmVzb2x2ZXIga2V5X3R5cGUgdG8gY29udGFjdCB1c2Vyc3BhY2UuCisKK0l0IGRvZXMgbm90IHlldCBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgQUZTIGZlYXR1cmVzOgorCisgKCopIERucyBxdWVyeSBzdXBwb3J0IGZvciBBRlNEQiByZXNvdXJjZSByZWNvcmQuCisKK1RoaXMgY29kZSBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgQ0lGUyBmaWxlc3lzdGVtLgorCisKKz09PT09PT09PT09CitDT01QSUxBVElPTgorPT09PT09PT09PT0KKworVGhlIG1vZHVsZSBzaG91bGQgYmUgZW5hYmxlZCBieSB0dXJuaW5nIG9uIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zOgorCisJQ09ORklHX0ROU19SRVNPTFZFUgktIHRyaXN0YXRlICJETlMgUmVzb2x2ZXIgc3VwcG9ydCIKKworCis9PT09PT09PT09CitTRVRUSU5HIFVQCis9PT09PT09PT09CisKK1RvIHNldCB1cCB0aGlzIGZhY2lsaXR5LCB0aGUgL2V0Yy9yZXF1ZXN0LWtleS5jb25mIGZpbGUgbXVzdCBiZSBhbHRlcmVkIHNvIHRoYXQKKy9zYmluL3JlcXVlc3Qta2V5IGNhbiBhcHByb3ByaWF0ZWx5IGRpcmVjdCB0aGUgdXBjYWxscy4gIEZvciBleGFtcGxlLCB0byBoYW5kbGUKK2Jhc2ljIGRuYW1lIHRvIElQdjQvSVB2NiBhZGRyZXNzIHJlc29sdXRpb24sIHRoZSBmb2xsb3dpbmcgbGluZSBzaG91bGQgYmUKK2FkZGVkOgorCisJI09QCVRZUEUJCURFU0MJQ08tSU5GTwlQUk9HUkFNIEFSRzEgQVJHMiBBUkczIC4uLgorCSM9PT09PT0JPT09PT09PT09PT09CT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PQorCWNyZWF0ZQlkbnNfcmVzb2x2ZXIgIAkqCSoJL3Vzci9zYmluL2NpZnMudXBjYWxsICVrCisKK1RvIGRpcmVjdCBhIHF1ZXJ5IGZvciBxdWVyeSB0eXBlICdmb28nLCBhIGxpbmUgb2YgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYWRkZWQKK2JlZm9yZSB0aGUgbW9yZSBnZW5lcmFsIGxpbmUgZ2l2ZW4gYWJvdmUgYXMgdGhlIGZpcnN0IG1hdGNoIGlzIHRoZSBvbmUgdGFrZW4uCisKKwljcmVhdGUJZG5zX3Jlc29sdmVyICAJZm9vOioJKgkvdXNyL3NiaW4vZG5zLmZvbyAlaworCisKKworPT09PT0KK1VTQUdFCis9PT09PQorCitUbyBtYWtlIHVzZSBvZiB0aGlzIGZhY2lsaXR5LCBvbmUgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGhhdCBhcmUKK2ltcGxlbWVudGVkIGluIHRoZSBtb2R1bGUgY2FuIGJlIGNhbGxlZCBhZnRlciBkb2luZzoKKworCSNpbmNsdWRlIDxsaW51eC9kbnNfcmVzb2x2ZXIuaD4KKworICgxKSBpbnQgZG5zX3F1ZXJ5KGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorCQkgICBjb25zdCBjaGFyICpvcHRpb25zLCBjaGFyICoqX3Jlc3VsdCwgdGltZV90ICpfZXhwaXJ5KTsKKworICAgICBUaGlzIGlzIHRoZSBiYXNpYyBhY2Nlc3MgZnVuY3Rpb24uICBJdCBsb29rcyBmb3IgYSBjYWNoZWQgRE5TIHF1ZXJ5IGFuZCBpZgorICAgICBpdCBkb2Vzbid0IGZpbmQgaXQsIGl0IHVwY2FsbHMgdG8gdXNlcnNwYWNlIHRvIG1ha2UgYSBuZXcgRE5TIHF1ZXJ5LCB3aGljaAorICAgICBtYXkgdGhlbiBiZSBjYWNoZWQuICBUaGUga2V5IGRlc2NyaXB0aW9uIGlzIGNvbnN0cnVjdGVkIGFzIGEgc3RyaW5nIG9mIHRoZQorICAgICBmb3JtOgorCisJCVs8dHlwZT46XTxuYW1lPgorCisgICAgIHdoZXJlIDx0eXBlPiBvcHRpb25hbGx5IHNwZWNpZmllcyB0aGUgcGFydGljdWxhciB1cGNhbGwgcHJvZ3JhbSB0byBpbnZva2UsCisgICAgIGFuZCB0aHVzIHRoZSB0eXBlIG9mIHF1ZXJ5IHRvIGRvLCBhbmQgPG5hbWU+IHNwZWNpZmllcyB0aGUgc3RyaW5nIHRvIGJlCisgICAgIGxvb2tlZCB1cC4gIFRoZSBkZWZhdWx0IHF1ZXJ5IHR5cGUgaXMgYSBzdHJhaWdodCBob3N0bmFtZSB0byBJUCBhZGRyZXNzCisgICAgIHNldCBsb29rdXAuCisKKyAgICAgVGhlIG5hbWUgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZCB0byBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZywgYW5kIGl0cworICAgICBsZW5ndGggc2hvdWxkIGJlIGdpdmVuIGJ5IHRoZSBuYW1lbGVuIGFyZ3VtZW50LgorCisgICAgIFRoZSBvcHRpb25zIHBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBpdCBtYXkgYmUgYSBzZXQgb2Ygb3B0aW9ucworICAgICBhcHByb3ByaWF0ZSB0byB0aGUgcXVlcnkgdHlwZS4KKworICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nIGFwcHJvcHJpYXRlIHRvIHRoZSBxdWVyeSB0eXBlLiAgRm9yIGluc3RhbmNlLAorICAgICBmb3IgdGhlIGRlZmF1bHQgcXVlcnkgdHlwZSBpdCBpcyBqdXN0IGEgbGlzdCBvZiBjb21tYS1zZXBhcmF0ZWQgSVB2NCBhbmQKKyAgICAgSVB2NiBhZGRyZXNzZXMuICBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGUgcmVzdWx0LgorCisgICAgIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcgaXMgcmV0dXJuZWQgb24gc3VjY2VzcywgYW5kIGEgbmVnYXRpdmUKKyAgICAgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBvdGhlcndpc2UuICAtRUtFWVJFSkVDVEVEIHdpbGwgYmUgcmV0dXJuZWQgaWYgdGhlCisgICAgIEROUyBsb29rdXAgZmFpbGVkLgorCisgICAgIElmIF9leHBpcnkgaXMgbm9uLU5VTEwsIHRoZSBleHBpcnkgdGltZSAoVFRMKSBvZiB0aGUgcmVzdWx0IHdpbGwgYmUKKyAgICAgcmV0dXJuZWQgYWxzby4KKworCis9PT09PT09PT0KK01FQ0hBTklTTQorPT09PT09PT09CisKK1RoZSBkbnNyZXNvbHZlciBtb2R1bGUgcmVnaXN0ZXJzIGEga2V5IHR5cGUgY2FsbGVkICJkbnNfcmVzb2x2ZXIiLiAgS2V5cyBvZgordGhpcyB0eXBlIGFyZSB1c2VkIHRvIHRyYW5zcG9ydCBhbmQgY2FjaGUgRE5TIGxvb2t1cCByZXN1bHRzIGZyb20gdXNlcnNwYWNlLgorCitXaGVuIGRuc19xdWVyeSgpIGlzIGludm9rZWQsIGl0IGNhbGxzIHJlcXVlc3Rfa2V5KCkgdG8gc2VhcmNoIHRoZSBsb2NhbAora2V5cmluZ3MgZm9yIGEgY2FjaGVkIEROUyByZXN1bHQuICBJZiB0aGF0IGZhaWxzIHRvIGZpbmQgb25lLCBpdCB1cGNhbGxzIHRvCit1c2Vyc3BhY2UgdG8gZ2V0IGEgbmV3IHJlc3VsdC4KKworVXBjYWxscyB0byB1c2Vyc3BhY2UgYXJlIG1hZGUgdGhyb3VnaCB0aGUgcmVxdWVzdF9rZXkoKSB1cGNhbGwgdmVjdG9yLCBhbmQgYXJlCitkaXJlY3RlZCBieSBtZWFucyBvZiBjb25maWd1cmF0aW9uIGxpbmVzIGluIC9ldGMvcmVxdWVzdC1rZXkuY29uZiB0aGF0IHRlbGwKKy9zYmluL3JlcXVlc3Qta2V5IHdoYXQgcHJvZ3JhbSB0byBydW4gdG8gaW5zdGFudGlhdGUgdGhlIGtleS4KKworVGhlIHVwY2FsbCBoYW5kbGVyIHByb2dyYW0gaXMgcmVzcG9uc2libGUgZm9yIHF1ZXJ5aW5nIHRoZSBETlMsIHByb2Nlc3NpbmcgdGhlCityZXN1bHQgaW50byBhIGZvcm0gc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gdGhlIGtleWN0bF9pbnN0YW50aWF0ZV9rZXkoKQorcm91dGluZS4gIFRoaXMgdGhlbiBwYXNzZXMgdGhlIGRhdGEgdG8gZG5zX3Jlc29sdmVyX2luc3RhbnRpYXRlKCkgd2hpY2ggc3RyaXBzCitvZmYgYW5kIHByb2Nlc3NlcyBhbnkgb3B0aW9ucyBpbmNsdWRlZCBpbiB0aGUgZGF0YSwgYW5kIHRoZW4gYXR0YWNoZXMgdGhlCityZW1haW5kZXIgb2YgdGhlIHN0cmluZyB0byB0aGUga2V5IGFzIGl0cyBwYXlsb2FkLgorCitUaGUgdXBjYWxsIGhhbmRsZXIgcHJvZ3JhbSBzaG91bGQgc2V0IHRoZSBleHBpcnkgdGltZSBvbiB0aGUga2V5IHRvIHRoYXQgb2YgdGhlCitsb3dlc3QgVFRMIG9mIGFsbCB0aGUgcmVjb3JkcyBpdCBoYXMgZXh0cmFjdGVkIGEgcmVzdWx0IGZyb20uICBUaGlzIG1lYW5zIHRoYXQKK3RoZSBrZXkgd2lsbCBiZSBkaXNjYXJkZWQgYW5kIHJlY3JlYXRlZCB3aGVuIHRoZSBkYXRhIGl0IGhvbGRzIGhhcyBleHBpcmVkLgorCitkbnNfcXVlcnkoKSByZXR1cm5zIGEgY29weSBvZiB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gdGhlIGtleSwgb3IgYW4gZXJyb3IgaWYKK3RoYXQgaXMgaW5kaWNhdGVkIGluc3RlYWQuCisKK1NlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2tleXMtcmVxdWVzdC1rZXkudHh0PiBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dAorcmVxdWVzdC1rZXkgZnVuY3Rpb24uCisKKworPT09PT09PT09CitERUJVR0dJTkcKKz09PT09PT09PQorCitEZWJ1Z2dpbmcgbWVzc2FnZXMgY2FuIGJlIHR1cm5lZCBvbiBkeW5hbWljYWxseSBieSB3cml0aW5nIGEgMSBpbnRvIHRoZQorZm9sbG93aW5nIGZpbGU6CisKKyAgICAgICAgL3N5cy9tb2R1bGUvZG5zcmVzb2x2ZXIvcGFyYW1ldGVycy9kZWJ1ZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lnYi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjJkNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lnYi50eHQKQEAgLTAsMCArMSwxMzIgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRlbCBHaWdhYml0IExpbnV4IGRyaXZlci4KK0NvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KKworQ29udGVudHMKKz09PT09PT09CisKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBhbGwgODI1NzUsIDgyNTc2IGFuZCA4MjU4MC1iYXNlZCBJbnRlbCAoUikgZ2lnYWJpdCBuZXR3b3JrCitjb25uZWN0aW9ucy4KKworRm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKK0RyaXZlciBJRCBHdWlkZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L2dvL25ldHdvcmsvYWRhcHRlci9pZGd1aWRlLmh0bQorCitDb21tYW5kIExpbmUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK21heF92ZnMKKy0tLS0tLS0KK1ZhbGlkIFJhbmdlOiAgIDAtNworRGVmYXVsdCBWYWx1ZTogMAorCitUaGlzIHBhcmFtZXRlciBhZGRzIHN1cHBvcnQgZm9yIFNSLUlPVi4gIEl0IGNhdXNlcyB0aGUgZHJpdmVyIHRvIHNwYXduIHVwIHRvCittYXhfdmZzIHdvcnRoIG9mIHZpcnR1YWwgZnVuY3Rpb24uCisKK0FkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBKdW1ibyBGcmFtZXMKKyAgLS0tLS0tLS0tLS0tCisgIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuCisgIHRoZSBkZWZhdWx0IG9mIDE1MDAuICBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gaW5jcmVhc2UgdGhlIE1UVSBzaXplLgorICBGb3IgZXhhbXBsZToKKworICAgICAgIGlmY29uZmlnIGV0aDx4PiBtdHUgOTAwMCB1cAorCisgIFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKyAgTm90ZXM6CisKKyAgLSBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDkyMTYuICBUaGlzIHZhbHVlIGNvaW5jaWRlcworICAgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgOTIzNCBieXRlcy4KKworICAtIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAxMCBvciAxMDAgTWJwcyBtYXkgcmVzdWx0IGluIHBvb3IgcGVyZm9ybWFuY2Ugb3IKKyAgICBsb3NzIG9mIGxpbmsuCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKKyAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KKworICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKyAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LgorCisgIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggRXRodG9vbCwgcmVmZXIgdG8gdGhlIEV0aHRvb2wgbWFuIHBhZ2UuCisKKyAgV29MIHdpbGwgYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtIGR1cmluZyB0aGUgbmV4dCBzaHV0IGRvd24gb3IgcmVib290LgorICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGlnYiBkcml2ZXIgbXVzdCBiZQorICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgorCisgIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBvZiBtdWx0aS1wb3J0IGFkYXB0ZXJzLgorCisgIFdha2UgT24gTEFOIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBJbnRlbChSKSBHaWdhYml0IFZUIFF1YWQgUG9ydCBTZXJ2ZXIKKyAgQWRhcHRlci4KKworICBNdWx0aXF1ZXVlCisgIC0tLS0tLS0tLS0KKyAgSW4gdGhpcyBtb2RlLCBhIHNlcGFyYXRlIE1TSS1YIHZlY3RvciBpcyBhbGxvY2F0ZWQgZm9yIGVhY2ggcXVldWUgYW5kIG9uZQorICBmb3IgIm90aGVyIiBpbnRlcnJ1cHRzIHN1Y2ggYXMgbGluayBzdGF0dXMgY2hhbmdlIGFuZCBlcnJvcnMuICBBbGwKKyAgaW50ZXJydXB0cyBhcmUgdGhyb3R0bGVkIHZpYSBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gIEludGVycnVwdCBtb2RlcmF0aW9uCisgIG11c3QgYmUgdXNlZCB0byBhdm9pZCBpbnRlcnJ1cHQgc3Rvcm1zIHdoaWxlIHRoZSBkcml2ZXIgaXMgcHJvY2Vzc2luZyBvbmUKKyAgaW50ZXJydXB0LiAgVGhlIG1vZGVyYXRpb24gdmFsdWUgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIHRoZSBleHBlY3RlZAorICB0aW1lIGZvciB0aGUgZHJpdmVyIHRvIHByb2Nlc3MgYW4gaW50ZXJydXB0LiBNdWx0aXF1ZXVlIGlzIG9mZiBieSBkZWZhdWx0LgorCisgIFJFUVVJUkVNRU5UUzogTVNJLVggc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgTXVsdGlxdWV1ZS4gSWYgTVNJLVggaXMgbm90CisgIGZvdW5kLCB0aGUgc3lzdGVtIHdpbGwgZmFsbGJhY2sgdG8gTVNJIG9yIHRvIExlZ2FjeSBpbnRlcnJ1cHRzLgorCisgIExSTworICAtLS0KKyAgTGFyZ2UgUmVjZWl2ZSBPZmZsb2FkIChMUk8pIGlzIGEgdGVjaG5pcXVlIGZvciBpbmNyZWFzaW5nIGluYm91bmQgdGhyb3VnaHB1dAorICBvZiBoaWdoLWJhbmR3aWR0aCBuZXR3b3JrIGNvbm5lY3Rpb25zIGJ5IHJlZHVjaW5nIENQVSBvdmVyaGVhZC4gSXQgd29ya3MgYnkKKyAgYWdncmVnYXRpbmcgbXVsdGlwbGUgaW5jb21pbmcgcGFja2V0cyBmcm9tIGEgc2luZ2xlIHN0cmVhbSBpbnRvIGEgbGFyZ2VyCisgIGJ1ZmZlciBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIGhpZ2hlciB1cCB0aGUgbmV0d29ya2luZyBzdGFjaywgdGh1cyByZWR1Y2luZworICB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBoYXZlIHRvIGJlIHByb2Nlc3NlZC4gTFJPIGNvbWJpbmVzIG11bHRpcGxlCisgIEV0aGVybmV0IGZyYW1lcyBpbnRvIGEgc2luZ2xlIHJlY2VpdmUgaW4gdGhlIHN0YWNrLCB0aGVyZWJ5IHBvdGVudGlhbGx5CisgIGRlY3JlYXNpbmcgQ1BVIHV0aWxpemF0aW9uIGZvciByZWNlaXZlcy4KKworICBOT1RFOiBZb3UgbmVlZCB0byBoYXZlIGluZXRfbHJvIGVuYWJsZWQgdmlhIGVpdGhlciB0aGUgQ09ORklHX0lORVRfTFJPIG9yCisgIENPTkZJR19JTkVUX0xST19NT0RVTEUga2VybmVsIGNvbmZpZyBvcHRpb24uIEFkZGl0aW9uYWxseSwgaWYKKyAgQ09ORklHX0lORVRfTFJPX01PRFVMRSBpcyB1c2VkLCB0aGUgaW5ldF9scm8gbW9kdWxlIG5lZWRzIHRvIGJlIGxvYWRlZAorICBiZWZvcmUgdGhlIGlnYiBkcml2ZXIuCisKKyAgWW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgZHJpdmVyIGlzIHVzaW5nIExSTyBieSBsb29raW5nIGF0IHRoZXNlIGNvdW50ZXJzIGluCisgIEV0aHRvb2w6CisKKyAgbHJvX2FnZ3JlZ2F0ZWQgLSBjb3VudCBvZiB0b3RhbCBwYWNrZXRzIHRoYXQgd2VyZSBjb21iaW5lZAorICBscm9fZmx1c2hlZCAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgZmx1c2hlZCBvdXQgb2YgTFJPCisgIGxyb19ub19kZXNjIC0gY291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgYW4gTFJPIGRlc2NyaXB0b3Igd2FzIG5vdCBhdmFpbGFibGUKKyAgZm9yIHRoZSBMUk8gcGFja2V0CisKKyAgTk9URTogSVB2NiBhbmQgVURQIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IExSTy4KKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIHd3dy5pbnRlbC5jb20vc3VwcG9ydC8KKworb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CisKKyAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZ2J2Zi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdidmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NjAyODEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWdidmYudHh0CkBAIC0wLDAgKzEsNzggQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnRlbCBHaWdhYml0IExpbnV4IGRyaXZlci4KK0NvcHlyaWdodChjKSAxOTk5IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4KKworQ29udGVudHMKKz09PT09PT09CisKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpZ2J2ZiBMaW51eCogQmFzZSBEcml2ZXIgZm9yIEludGVsIE5ldHdvcmsgQ29ubmVjdGlvbi4KKworVGhlIGlnYnZmIGRyaXZlciBzdXBwb3J0cyA4MjU3Ni1iYXNlZCB2aXJ0dWFsIGZ1bmN0aW9uIGRldmljZXMgdGhhdCBjYW4gb25seQorYmUgYWN0aXZhdGVkIG9uIGtlcm5lbHMgdGhhdCBzdXBwb3J0IFNSLUlPVi4gU1ItSU9WIHJlcXVpcmVzIHRoZSBjb3JyZWN0CitwbGF0Zm9ybSBhbmQgT1Mgc3VwcG9ydC4KKworVGhlIGlnYnZmIGRyaXZlciByZXF1aXJlcyB0aGUgaWdiIGRyaXZlciwgdmVyc2lvbiAyLjAgb3IgbGF0ZXIuIFRoZSBpZ2J2ZgorZHJpdmVyIHN1cHBvcnRzIHZpcnR1YWwgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSB0aGUgaWdiIGRyaXZlciB3aXRoIGEgbWF4X3ZmcwordmFsdWUgb2YgMSBvciBncmVhdGVyLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbWF4X3ZmcyBwYXJhbWV0ZXIgcmVmZXIKK3RvIHRoZSBSRUFETUUgaW5jbHVkZWQgd2l0aCB0aGUgaWdiIGRyaXZlci4KKworVGhlIGd1ZXN0IE9TIGxvYWRpbmcgdGhlIGlnYnZmIGRyaXZlciBtdXN0IHN1cHBvcnQgTVNJLVggaW50ZXJydXB0cy4KKworVGhpcyBkcml2ZXIgaXMgb25seSBzdXBwb3J0ZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUgYXQgdGhpcyB0aW1lLiAgSW50ZWwgaXMKK25vdCBzdXBwbHlpbmcgcGF0Y2hlcyBhZ2FpbnN0IHRoZSBrZXJuZWwgc291cmNlIHRvIGFsbG93IGZvciBzdGF0aWMgbGlua2luZworb2YgdGhlIGRyaXZlci4gIEZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgR2lnYWJpdCBhZGFwdGVyLiAgQWxsIGhhcmR3YXJlCityZXF1aXJlbWVudHMgbGlzdGVkIGFwcGx5IHRvIHVzZSB3aXRoIExpbnV4LgorCitJbnN0cnVjdGlvbnMgb24gdXBkYXRpbmcgZXRodG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHNlY3Rpb24gIkFkZGl0aW9uYWwKK0NvbmZpZ3VyYXRpb25zIiBsYXRlciBpbiB0aGlzIGRvY3VtZW50LgorCitWTEFOczogVGhlcmUgaXMgYSBsaW1pdCBvZiBhIHRvdGFsIG9mIDMyIHNoYXJlZCBWTEFOcyB0byAxIG9yIG1vcmUgVkZzLgorCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgaWdidmYgZHJpdmVyIHN1cHBvcnRzIDgyNTc2LWJhc2VkIHZpcnR1YWwgZnVuY3Rpb24gZGV2aWNlcyB0aGF0IGNhbiBvbmx5CitiZSBhY3RpdmF0ZWQgb24ga2VybmVscyB0aGF0IHN1cHBvcnQgU1ItSU9WLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbyB0byB0aGUgQWRhcHRlciAmCitEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9nby9uZXR3b3JrL2FkYXB0ZXIvaWRndWlkZS5odG0KKworRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZword2Vic2l0ZS4gIEluIHRoZSBzZWFyY2ggZmllbGQsIGVudGVyIHlvdXIgYWRhcHRlciBuYW1lIG9yIHR5cGUsIG9yIHVzZSB0aGUKK25ldHdvcmtpbmcgbGluayBvbiB0aGUgbGVmdCB0byBzZWFyY2ggZm9yIHlvdXIgYWRhcHRlcjoKKworICAgIGh0dHA6Ly9kb3dubG9hZGNlbnRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi1leHRlcm5hbC9TdXBwb3J0X0ludGVsLmFzcHgKKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIEV0aHRvb2wKKyAgLS0tLS0tLQorICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uCisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLgorCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK29yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0OgorCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMAorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCit0byB0aGUgaXNzdWUgdG8gZTEwMDAtZGV2ZWxAbGlzdHMuc2YubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZTBhYzQuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3dhdmVsYW4udHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotCVRoZSBXYXZlbGFuIGRyaXZlcnMgc2FnYQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0JQnkgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgotCi0JVGhlIFdhdmVsYW4gaXMgYSBSYWRpbyBuZXR3b3JrIGFkYXB0ZXIgZGVzaWduZWQgYnkKLUx1Y2VudC4gVW5kZXIgdGhpcyBnZW5lcmljIG5hbWUgaXMgaGlkZGVuIHF1aXRlIGEgdmFyaWV0eSBvZiBoYXJkd2FyZSwKLWFuZCBtYW55IExpbnV4IGRyaXZlciB0byBzdXBwb3J0IGl0LgotCVRoZSBnZXQgdGhlIGZ1bGwgc3Rvcnkgb24gV2lyZWxlc3MgTEFOcywgcGxlYXNlIGNvbnN1bHQgOgotCQlodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4LwotCi0id2F2ZWxhbiIgZHJpdmVyIChvbGQgSVNBIFdhdmVsYW4pCi0tLS0tLS0tLS0tLS0tLS0tCi0JbyBDb25maWcgOglOZXR3b3JrIGRldmljZSAtPiBXaXJlbGVzcyBMQU4gLT4gQVQmVCBXYXZlTEFOCi0JbyBMb2NhdGlvbiA6CS4uLi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuKgotCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKLQlvIG9uLWxpbmUgZG9jIDoKLQkgICAgaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9XYXZlbGFuLmh0bWwKLQotCVRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIElTQSB2ZXJzaW9uIG9mIHRoZSBmaXJzdCBnZW5lcmF0aW9uCi1vZiB0aGUgV2F2ZWxhbiwgbm93IGRpc2NvbnRpbnVlZC4gVGhlIGRldmljZSBpcyAyIE1iL3MsIGNvbXBvc2VkIG9mIGEKLUludGVsIDgyNTg2IGNvbnRyb2xsZXIgYW5kIGEgTHVjZW50IE1vZGVtLCBhbmQgaXMgTk9UIDgwMi4xMSBjb21wbGlhbnQuCi0JVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKLQlvIFdhdmVsYW4gSVNBIDkxNSBNSHogKGZ1bGwgbGVuZ3RoIElTQSBjYXJkKSAKLQlvIFdhdmVsYW4gSVNBIDkxNSBNSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCkgCi0JbyBXYXZlbGFuIElTQSAyLjQgR0h6IChmdWxsIGxlbmd0aCBJU0EgY2FyZCwgZml4ZWQgZnJlcXVlbmN5KSAKLQlvIFdhdmVsYW4gSVNBIDIuNCBHSHogMi4wIChoYWxmIGxlbmd0aCBJU0EgY2FyZCwgZnJlcXVlbmN5IHNlbGVjdGFibGUpIAotCW8gQWJvdmUgY2FyZHMgd2l0aCB0aGUgb3B0aW9uYWwgREVTIGVuY3J5cHRpb24gZmVhdHVyZSAKLQotIndhdmVsYW5fY3MiIGRyaXZlciAob2xkIFBjbWNpYSBXYXZlbGFuKQotLS0tLS0tLS0tLS0tLS0tLS0tLQotCW8gQ29uZmlnIDoJTmV0d29yayBkZXZpY2UgLT4gUENNQ0lBIG5ldHdvcmsgLT4KLQkJCQlQY21jaWEgV2lyZWxlc3MgTEFOIC0+IEFUJlQvTHVjZW50IFdhdmVMQU4KLQlvIExvY2F0aW9uIDoJLi4uL2RyaXZlcnMvbmV0L3BjbWNpYS93YXZlbGFuKgotCW8gaW4tbGluZSBkb2MgOgkuLi4vZHJpdmVycy9uZXQvcGNtY2lhL3dhdmVsYW5fY3MuaAotCW8gb24tbGluZSBkb2MgOgotCSAgICBodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1dhdmVsYW4uaHRtbAotCi0JVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgUENNQ0lBIHZlcnNpb24gb2YgdGhlIGZpcnN0Ci1nZW5lcmF0aW9uIG9mIHRoZSBXYXZlbGFuLCBub3cgZGlzY29udGludWVkLiBUaGUgZGV2aWNlIGlzIDIgTWIvcywKLWNvbXBvc2VkIG9mIGEgSW50ZWwgODI1OTMgY29udHJvbGxlciAodG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgODI1ODYpCi1hbmQgYSBMdWNlbnQgTW9kZW0sIGFuZCBOT1QgODAyLjExIGNvbXBhdGlibGUuCi0JVGhlIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlIDoKLQlvIFdhdmVsYW4gUGNtY2lhIDkxNSBNSHogMi4wIChQY21jaWEgY2FyZCArIHNlcGFyYXRlCi0JCQkJCW1vZGVtL2FudGVubmEgYmxvY2spIAotCW8gV2F2ZWxhbiBQY21jaWEgMi40IEdIeiAyLjAgKFBjbWNpYSBjYXJkICsgc2VwYXJhdGUKLQkJCQkJbW9kZW0vYW50ZW5uYSBibG9jaykgCi0KLSJ3dmxhbl9jcyIgZHJpdmVyIChXYXZlbGFuIElFRUUsIEdQTCkKLS0tLS0tLS0tLS0tLS0tLS0tCi0JbyBDb25maWcgOglOb3QgeWV0IGluIGtlcm5lbAotCW8gTG9jYXRpb24gOglQY21jaWEgcGFja2FnZSAzLjEuMTArCi0JbyBvbi1saW5lIGRvYyA6Ci0JaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvKi9odHRwOi8vd3d3LmZhc3RhLmZoLWRvcnRtdW5kLmRlL3VzZXJzL2FuZHkvd3ZsYW4vCQotCi0JVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgY3VycmVudCBnZW5lcmF0aW9uIG9mIFdhdmVsYW4gSUVFRSwKLXdoaWNoIGlzIDgwMi4xMSBjb21wYXRpYmxlLiBEZXBlbmRpbmcgb24gdmVyc2lvbiwgaXQgaXMgMiBNYi9zIG9yIDExCi1NYi9zLCB3aXRoIG9yIHdpdGhvdXQgZW5jcnlwdGlvbiwgYWxsIGltcGxlbWVudGVkIGluIEx1Y2VudCBzcGVjaWZpYwotRFNQICh0aGUgSGVybWVzKS4KLQlUaGlzIGlzIGEgR1BMIGZ1bGwgc291cmNlIFBDTUNJQSBkcml2ZXIgKElTQSBpcyBqdXN0IGEgUGNtY2lhCi1jYXJkIHdpdGggSVNBLVBjbWNpYSBicmlkZ2UpLgotCi0id2F2ZWxhbjJfY3MiIGRyaXZlciAoV2F2ZWxhbiBJRUVFLCBiaW5hcnkpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCW8gQ29uZmlnIDoJTm90IHlldCBpbiBrZXJuZWwKLQlvIExvY2F0aW9uIDoJZnRwOi8vc291cmNlZm9yZ2Uub3JnL3BjbWNpYS9jb250cmliLwotCi0JVGhpcyBkcml2ZXIgc3VwcG9ydCBleGFjdGx5IHRoZSBzYW1lIGhhcmR3YXJlIGFzIHRoZSBwcmV2aW91cwotZHJpdmVyLCB0aGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgaXMgYmFzZWQgb24gYSBiaW5hcnkgbGlicmFyeQotYW5kIHN1cHBvcnRlZCBieSBMdWNlbnQuCi0KLQlJIGhvcGUgaXQgY2xlYXJzIHRoZSBjb25mdXNpb24gOy0pCi0KLQlKZWFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BhZGF0YS50eHQgYi9Eb2N1bWVudGF0aW9uL3BhZGF0YS50eHQKaW5kZXggNDczZWJmMi4uN2RkZmUyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wYWRhdGEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGFkYXRhLnR4dApAQCAtMTksNyArMTksNyBAQAogCiBUaGUgcGNwdW1hc2sgZGVzY3JpYmVzIHdoaWNoIHByb2Nlc3NvcnMgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgd29yawogc3VibWl0dGVkIHRvIHRoaXMgaW5zdGFuY2UgaW4gcGFyYWxsZWwuIFRoZSBjYmNwdW1hc2sgZGVmaW5lcyB3aGljaAotcHJvY2Vzc29ycyBhcmUgYWxsb3dlZCB0byB1c2UgYXMgdGhlIHNlcmlhbGl6YXRpb24gY2FsbGJhY2sgcHJvY2Vzc29yLgorcHJvY2Vzc29ycyBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGFzIHRoZSBzZXJpYWxpemF0aW9uIGNhbGxiYWNrIHByb2Nlc3Nvci4KIFRoZSB3b3JrcXVldWUgd3EgaXMgd2hlcmUgdGhlIHdvcmsgd2lsbCBhY3R1YWxseSBiZSBkb25lOyBpdCBzaG91bGQgYmUKIGEgbXVsdGl0aHJlYWRlZCBxdWV1ZSwgbmF0dXJhbGx5LgogCkBAIC0zMCwxMCArMzAsMTAgQEAKIAogTm90ZTogUGFkYXRhIG1haW50YWlucyB0d28ga2luZHMgb2YgY3B1bWFza3MgaW50ZXJuYWxseS4gVGhlIHVzZXIgc3VwcGxpZWQKIGNwdW1hc2tzLCBzdWJtaXR0ZWQgYnkgcGFkYXRhX2FsbG9jL3BhZGF0YV9hbGxvY19wb3NzaWJsZSBhbmQgdGhlICd1c2FibGUnCi1jcHVtYXNrcy4gVGhlIHVzYWJsZSBjcHVtYXNrcyBhcmUgYWx3YXlzIHRoZSBzdWJzZXQgb2YgYWN0aXZlIGNwdXMgaW4gdGhlCi11c2VyIHN1cHBsaWVkIGNwdW1hc2tzLCB0aGVzZSBhcmUgdGhlIGNwdW1hc2tzIHBhZGF0YSBhY3R1YWxseSB1c2UuIFNvCi1pdCBpcyBsZWdhbCB0byBzdXBwbHkgYSBjcHVtYXNrIHRvIHBhZGF0YSB0aGF0IGNvbnRhaW5zIG9mZmxpbmUgY3B1cy4KLU9uY2UgYSBvZmZsaW5lIGNwdSBpbiB0aGUgdXNlciBzdXBwbGllZCBjcHVtYXNrIGNvbWVzIG9ubGluZSwgcGFkYXRhCitjcHVtYXNrcy4gVGhlIHVzYWJsZSBjcHVtYXNrcyBhcmUgYWx3YXlzIGEgc3Vic2V0IG9mIGFjdGl2ZSBDUFVzIGluIHRoZQordXNlciBzdXBwbGllZCBjcHVtYXNrczsgdGhlc2UgYXJlIHRoZSBjcHVtYXNrcyBwYWRhdGEgYWN0dWFsbHkgdXNlcy4gU28KK2l0IGlzIGxlZ2FsIHRvIHN1cHBseSBhIGNwdW1hc2sgdG8gcGFkYXRhIHRoYXQgY29udGFpbnMgb2ZmbGluZSBDUFVzLgorT25jZSBhbiBvZmZsaW5lIENQVSBpbiB0aGUgdXNlciBzdXBwbGllZCBjcHVtYXNrIGNvbWVzIG9ubGluZSwgcGFkYXRhCiBpcyBnb2luZyB0byB1c2UgaXQuCiAKIFRoZXJlIGFyZSBmdW5jdGlvbnMgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhlIGluc3RhbmNlOgpAQCAtNDQsNyArNDQsNyBAQAogVGhlc2UgZnVuY3Rpb25zIGFyZSBzZXR0aW5nIG9yIGNsZWFyaW5nIHRoZSAiUEFEQVRBX0lOSVQiIGZsYWc7CiBpZiB0aGF0IGZsYWcgaXMgbm90IHNldCwgb3RoZXIgZnVuY3Rpb25zIHdpbGwgcmVmdXNlIHRvIHdvcmsuCiBwYWRhdGFfc3RhcnQgcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgKGZsYWcgc2V0KSBvciAtRUlOVkFMIGlmIHRoZQotcGFkYXRhIGNwdW1hc2sgY29udGFpbnMgbm8gYWN0aXZlIGNwdSAoZmxhZyBub3Qgc2V0KS4KK3BhZGF0YSBjcHVtYXNrIGNvbnRhaW5zIG5vIGFjdGl2ZSBDUFUgKGZsYWcgbm90IHNldCkuCiBwYWRhdGFfc3RvcCBjbGVhcnMgdGhlIGZsYWcgYW5kIGJsb2NrcyB1bnRpbCB0aGUgcGFkYXRhIGluc3RhbmNlCiBpcyB1bnVzZWQuCiAKQEAgLTYzLDExICs2MywxMSBAQAogCiBJdCdzIHBvc3NpYmxlIHRvIGNoYW5nZSBib3RoIGNwdW1hc2tzIG9mIGEgcGFkYXRhIGluc3RhbmNlIHdpdGgKIHBhZGF0YV9zZXRfY3B1bWFza3MgYnkgc3BlY2lmeWluZyB0aGUgY3B1bWFza3MgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbiAocGNwdW1hc2spCi1hbmQgZm9yIHRoZSBzZXJpYWwgY2FsbGJhY2sgZnVuY3Rpb24gKGNiY3B1bWFzaykuIHBhZGF0YV9zZXRfY3B1bWFzayBpcyB0bworYW5kIGZvciB0aGUgc2VyaWFsIGNhbGxiYWNrIGZ1bmN0aW9uIChjYmNwdW1hc2spLiBwYWRhdGFfc2V0X2NwdW1hc2sgaXMgdXNlZCB0bwogY2hhbmdlIGp1c3Qgb25lIG9mIHRoZSBjcHVtYXNrcy4gSGVyZSBjcHVtYXNrX3R5cGUgaXMgb25lIG9mIFBBREFUQV9DUFVfU0VSSUFMLAogUEFEQVRBX0NQVV9QQVJBTExFTCBhbmQgY3B1bWFzayBzcGVjaWZpZXMgdGhlIG5ldyBjcHVtYXNrIHRvIHVzZS4KLVRvIHNpbXBseSBhZGQgb3IgcmVtb3ZlIG9uZSBjcHUgZnJvbSBhIGNlcnRhaW4gY3B1bWFzayB0aGUgZnVuY3Rpb25zCi1wYWRhdGFfYWRkX2NwdS9wYWRhdGFfcmVtb3ZlX2NwdSBhcmUgdXNlZC4gY3B1IHNwZWNpZmllcyB0aGUgY3B1IHRvIGFkZCBvcgorVG8gc2ltcGx5IGFkZCBvciByZW1vdmUgb25lIENQVSBmcm9tIGEgY2VydGFpbiBjcHVtYXNrIHRoZSBmdW5jdGlvbnMKK3BhZGF0YV9hZGRfY3B1L3BhZGF0YV9yZW1vdmVfY3B1IGFyZSB1c2VkLiBjcHUgc3BlY2lmaWVzIHRoZSBDUFUgdG8gYWRkIG9yCiByZW1vdmUgYW5kIG1hc2sgaXMgb25lIG9mIFBBREFUQV9DUFVfU0VSSUFMLCBQQURBVEFfQ1BVX1BBUkFMTEVMLgogCiBJZiBhIHVzZXIgaXMgaW50ZXJlc3RlZCBpbiBwYWRhdGEgY3B1bWFzayBjaGFuZ2VzLCBoZSBjYW4gcmVnaXN0ZXIgdG8KQEAgLTgyLDcgKzgyLDcgQEAKIAkJCQkJICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYmxvY2spOwogCiBUaGUgcGFkYXRhIGNwdW1hc2sgY2hhbmdlIG5vdGlmaWVyIG5vdGlmaWVzIGFib3V0IGNoYW5nZXMgb2YgdGhlIHVzYWJsZQotY3B1bWFza3MsIGkuZS4gdGhlIHN1YnNldCBvZiBhY3RpdmUgY3B1cyBpbiB0aGUgdXNlciBzdXBwbGllZCBjcHVtYXNrLgorY3B1bWFza3MsIGkuZS4gdGhlIHN1YnNldCBvZiBhY3RpdmUgQ1BVcyBpbiB0aGUgdXNlciBzdXBwbGllZCBjcHVtYXNrLgogCiBQYWRhdGEgY2FsbHMgdGhlIG5vdGlmaWVyIGNoYWluIHdpdGg6CiAKQEAgLTkyLDcgKzkyLDcgQEAKIAogSGVyZSBjcHVtYXNrX2NoYW5nZV9ub3RpZmllciBpcyByZWdpc3RlcmVkIG5vdGlmaWVyLCBub3RpZmljYXRpb25fbWFzawogaXMgb25lIG9mIFBBREFUQV9DUFVfU0VSSUFMLCBQQURBVEFfQ1BVX1BBUkFMTEVMIGFuZCBjcHVtYXNrIGlzIGEgcG9pbnRlcgotdG8gYSBzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sgdGhhdCBjb250YWlucyB0aGUgbmV3IGNwdW1hc2sgaW5mb3JtYXRpb25zLgordG8gYSBzdHJ1Y3QgcGFkYXRhX2NwdW1hc2sgdGhhdCBjb250YWlucyB0aGUgbmV3IGNwdW1hc2sgaW5mb3JtYXRpb24uCiAKIEFjdHVhbGx5IHN1Ym1pdHRpbmcgd29yayB0byB0aGUgcGFkYXRhIGluc3RhbmNlIHJlcXVpcmVzIHRoZSBjcmVhdGlvbiBvZiBhCiBwYWRhdGFfcHJpdiBzdHJ1Y3R1cmU6CkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICB9OwogCiBUaGlzIHN0cnVjdHVyZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgZW1iZWRkZWQgd2l0aGluIHNvbWUgbGFyZ2VyCi1zdHJ1Y3R1cmUgc3BlY2lmaWMgdG8gdGhlIHdvcmsgdG8gYmUgZG9uZS4gIE1vc3QgaXRzIGZpZWxkcyBhcmUgcHJpdmF0ZSB0bworc3RydWN0dXJlIHNwZWNpZmljIHRvIHRoZSB3b3JrIHRvIGJlIGRvbmUuICBNb3N0IG9mIGl0cyBmaWVsZHMgYXJlIHByaXZhdGUgdG8KIHBhZGF0YSwgYnV0IHRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHplcm9lZCBhdCBpbml0aWFsaXNhdGlvbiB0aW1lLCBhbmQgdGhlCiBwYXJhbGxlbCgpIGFuZCBzZXJpYWwoKSBmdW5jdGlvbnMgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhvc2UgZnVuY3Rpb25zIHdpbGwKIGJlIGNhbGxlZCBpbiB0aGUgcHJvY2VzcyBvZiBnZXR0aW5nIHRoZSB3b3JrIGRvbmUgYXMgd2Ugd2lsbCBzZWUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dCBiL0RvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci1jaGFuZ2VzLnR4dAppbmRleCA2MWJjNGU5Li4yNmMwZjljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BjbWNpYS9kcml2ZXItY2hhbmdlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wY21jaWEvZHJpdmVyLWNoYW5nZXMudHh0CkBAIC0xLDQgKzEsMTYgQEAKIFRoaXMgZmlsZSBkZXRhaWxzIGNoYW5nZXMgaW4gMi42IHdoaWNoIGFmZmVjdCBQQ01DSUEgY2FyZCBkcml2ZXIgYXV0aG9yczoKKyogcGNtY2lhX3JlcXVlc3RfaW8gY2hhbmdlcyAoYXMgb2YgMi42LjM2KQorICAgSW5zdGVhZCBvZiBpb19yZXFfdCwgZHJpdmVycyBhcmUgbm93IHJlcXVlc3RlZCB0byBmaWxsIG91dAorICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LT5yZXNvdXJjZVswLDFdIGZvciB1cCB0byB0d28gaW9wb3J0CisgICByYW5nZXMuIEFmdGVyIGEgY2FsbCB0byBwY21jaWFfcmVxdWVzdF9pbygpLCB0aGUgcG9ydHMgZm91bmQgdGhlcmUKKyAgIGFyZSByZXNlcnZlZCwgYWZ0ZXIgY2FsbGluZyBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKCksIHRoZXkgbWF5CisgICBiZSB1c2VkLgorCisqIE5vIGRldl9pbmZvX3QsIG5vIGNzX3R5cGVzLmggKGFzIG9mIDIuNi4zNikKKyAgIGRldl9pbmZvX3QgYW5kIGEgZmV3IG90aGVyIHR5cGVkZWZzIGFyZSByZW1vdmVkLiBObyBsb25nZXIgdXNlIHRoZW0KKyAgIGluIFBDTUNJQSBkZXZpY2UgZHJpdmVycy4gQWxzbywgZG8gbm90IGluY2x1ZGUgcGNtY2lhL2NzX3R5cGVzLmgsIGFzCisgICB0aGlzIGZpbGUgaXMgZ29uZS4KKwogKiBObyBkZXZfbm9kZV90IChhcyBvZiAyLjYuMzUpCiAgICBUaGVyZSBpcyBubyBtb3JlIG5lZWQgdG8gZmlsbCBvdXQgYSAiZGV2X25vZGVfdCIgc3RydWN0dXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKaW5kZXggOGEwMDQwNy4uNjRiY2I4YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApAQCAtMTQsNiArMTQsOCBAQAogICAgIHJlcG9ydHMgaW52ZXJ0ZWQgd3JpdGUtcHJvdGVjdCBzdGF0ZTsKICAgLSBzZGhjaSwxLWJpdC1vbmx5IDogKG9wdGlvbmFsKSBzcGVjaWZpZXMgdGhhdCBhIGNvbnRyb2xsZXIgY2FuCiAgICAgb25seSBoYW5kbGUgMS1iaXQgZGF0YSB0cmFuc2ZlcnMuCisgIC0gc2RoY2ksYXV0by1jbWQxMjogKG9wdGlvbmFsKSBzcGVjaWZpZXMgdGhhdCBhIGNvbnRyb2xsZXIgY2FuCisgICAgb25seSBoYW5kbGUgYXV0byBDTUQxMi4KIAogRXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJmNDQ3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0JCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JCSAgICAgU0xPVyBXT1JLIElURU0gRVhFQ1VUSU9OIFRIUkVBRCBQT09MCi0JCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUJ5OiBEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgotCi1UaGUgc2xvdyB3b3JrIGl0ZW0gZXhlY3V0aW9uIHRocmVhZCBwb29sIGlzIGEgcG9vbCBvZiB0aHJlYWRzIGZvciBwZXJmb3JtaW5nCi10aGluZ3MgdGhhdCB0YWtlIGEgcmVsYXRpdmVseSBsb25nIHRpbWUsIHN1Y2ggYXMgbWFraW5nIG1rZGlyIGNhbGxzLgotVHlwaWNhbGx5LCB3aGVuIHByb2Nlc3Npbmcgc29tZXRoaW5nLCB0aGVzZSBpdGVtcyB3aWxsIHNwZW5kIGEgbG90IG9mIHRpbWUKLWJsb2NraW5nIGEgdGhyZWFkIG9uIEkvTywgdGh1cyBtYWtpbmcgdGhhdCB0aHJlYWQgdW5hdmFpbGFibGUgZm9yIGRvaW5nIG90aGVyCi13b3JrLgotCi1UaGUgc3RhbmRhcmQgd29ya3F1ZXVlIG1vZGVsIGlzIHVuc3VpdGFibGUgZm9yIHRoaXMgY2xhc3Mgb2Ygd29yayBpdGVtIGFzIHRoYXQKLWxpbWl0cyB0aGUgb3duZXIgdG8gYSBzaW5nbGUgdGhyZWFkIG9yIGEgc2luZ2xlIHRocmVhZCBwZXIgQ1BVLiAgRm9yIHNvbWUKLXRhc2tzLCBob3dldmVyLCBtb3JlIHRocmVhZHMgLSBvciBmZXdlciAtIGFyZSByZXF1aXJlZC4KLQotVGhlcmUgaXMganVzdCBvbmUgcG9vbCBwZXIgc3lzdGVtLiAgSXQgY29udGFpbnMgbm8gdGhyZWFkcyB1bmxlc3Mgc29tZXRoaW5nCi13YW50cyB0byB1c2UgaXQgLSBhbmQgdGhhdCBzb21ldGhpbmcgbXVzdCByZWdpc3RlciBpdHMgaW50ZXJlc3QgZmlyc3QuICBXaGVuCi10aGUgcG9vbCBpcyBhY3RpdmUsIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpdCBjb250YWlucyBpcyBkeW5hbWljLCB2YXJ5aW5nCi1iZXR3ZWVuIGEgbWF4aW11bSBhbmQgbWluaW11bSBzZXR0aW5nLCBkZXBlbmRpbmcgb24gdGhlIGxvYWQuCi0KLQotPT09PT09PT09PT09PT09PT09PT0KLUNMQVNTRVMgT0YgV09SSyBJVEVNCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIHBvb2wgc3VwcG9ydCB0d28gY2xhc3NlcyBvZiB3b3JrIGl0ZW1zOgotCi0gKCopIFNsb3cgd29yayBpdGVtcy4KLQotICgqKSBWZXJ5IHNsb3cgd29yayBpdGVtcy4KLQotVGhlIGZvcm1lciBhcmUgZXhwZWN0ZWQgdG8gZmluaXNoIG11Y2ggcXVpY2tlciB0aGFuIHRoZSBsYXR0ZXIuCi0KLUFuIG9wZXJhdGlvbiBvZiB0aGUgdmVyeSBzbG93IGNsYXNzIG1heSBkbyBhIGJhdGNoIGNvbWJpbmF0aW9uIG9mIHNldmVyYWwKLWxvb2t1cHMsIG1rZGlycywgYW5kIGEgY3JlYXRlIGZvciBpbnN0YW5jZS4KLQotQW4gb3BlcmF0aW9uIG9mIHRoZSBvcmRpbmFyaWx5IHNsb3cgY2xhc3MgbWF5LCBmb3IgZXhhbXBsZSwgd3JpdGUgc3R1ZmYgb3IKLWV4cGFuZCBmaWxlcywgcHJvdmlkZWQgdGhlIHRpbWUgdGFrZW4gdG8gZG8gc28gaXNuJ3QgdG9vIGxvbmcuCi0KLU9wZXJhdGlvbnMgb2YgYm90aCB0eXBlcyBtYXkgc2xlZXAgZHVyaW5nIGV4ZWN1dGlvbiwgdGh1cyB0eWluZyB1cCB0aGUgdGhyZWFkCi1sb2FuZWQgdG8gaXQuCi0KLUEgZnVydGhlciBjbGFzcyBvZiB3b3JrIGl0ZW0gaXMgYXZhaWxhYmxlLCBiYXNlZCBvbiB0aGUgc2xvdyB3b3JrIGl0ZW0gY2xhc3M6Ci0KLSAoKikgRGVsYXllZCBzbG93IHdvcmsgaXRlbXMuCi0KLVRoZXNlIGFyZSBzbG93IHdvcmsgaXRlbXMgdGhhdCBoYXZlIGEgdGltZXIgdG8gZGVmZXIgcXVldWVpbmcgb2YgdGhlIGl0ZW0gZm9yCi1hIHdoaWxlLgotCi0KLVRIUkVBRC1UTy1DTEFTUyBBTExPQ0FUSU9OCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob3QgYWxsIHRoZSB0aHJlYWRzIGluIHRoZSBwb29sIGFyZSBhdmFpbGFibGUgdG8gd29yayBvbiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KLVRoZSBudW1iZXIgd2lsbCBiZSBiZXR3ZWVuIG9uZSBhbmQgb25lIGZld2VyIHRoYW4gdGhlIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcy4KLVRoaXMgaXMgY29uZmlndXJhYmxlIChzZWUgdGhlICJQb29sIENvbmZpZ3VyYXRpb24iIHNlY3Rpb24pLgotCi1BbGwgdGhlIHRocmVhZHMgYXJlIGF2YWlsYWJsZSB0byB3b3JrIG9uIG9yZGluYXJpbHkgc2xvdyB3b3JrIGl0ZW1zLCBidXQgYQotcGVyY2VudGFnZSBvZiB0aGUgdGhyZWFkcyB3aWxsIHByZWZlciB0byB3b3JrIG9uIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgotCi1UaGUgY29uZmlndXJhdGlvbiBlbnN1cmVzIHRoYXQgYXQgbGVhc3Qgb25lIHRocmVhZCB3aWxsIGJlIGF2YWlsYWJsZSB0byB3b3JrIG9uCi12ZXJ5IHNsb3cgd29yayBpdGVtcywgYW5kIGF0IGxlYXN0IG9uZSB0aHJlYWQgd2lsbCBiZSBhdmFpbGFibGUgdGhhdCB3b24ndCB3b3JrCi1vbiB2ZXJ5IHNsb3cgd29yayBpdGVtcyBhdCBhbGwuCi0KLQotPT09PT09PT09PT09PT09PT09PT09Ci1VU0lORyBTTE9XIFdPUksgSVRFTVMKLT09PT09PT09PT09PT09PT09PT09PQotCi1GaXJzdGx5LCBhIG1vZHVsZSBvciBzdWJzeXN0ZW0gd2FudGluZyB0byBtYWtlIHVzZSBvZiBzbG93IHdvcmsgaXRlbXMgbXVzdAotcmVnaXN0ZXIgaXRzIGludGVyZXN0OgotCi0JIGludCByZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihzdHJ1Y3QgbW9kdWxlICptb2R1bGUpOwotCi1UaGlzIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSAtdmUgZXJyb3IgdXBvbiBmYWlsdXJlLiAgVGhlIG1vZHVsZQotcG9pbnRlciBzaG91bGQgYmUgdGhlIG1vZHVsZSBpbnRlcmVzdGVkIGluIHVzaW5nIHRoaXMgZmFjaWxpdHkgKGFsbW9zdAotY2VydGFpbmx5IFRISVNfTU9EVUxFKS4KLQotCi1TbG93IHdvcmsgaXRlbXMgbWF5IHRoZW4gYmUgc2V0IHVwIGJ5OgotCi0gKDEpIERlY2xhcmluZyBhIHNsb3dfd29yayBzdHJ1Y3QgdHlwZSB2YXJpYWJsZToKLQotCSNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KLQotCXN0cnVjdCBzbG93X3dvcmsgbXlpdGVtOwotCi0gKDIpIERlY2xhcmluZyB0aGUgb3BlcmF0aW9ucyB0byBiZSB1c2VkIGZvciB0aGlzIGl0ZW06Ci0KLQlzdHJ1Y3Qgc2xvd193b3JrX29wcyBteWl0ZW1fb3BzID0gewotCQkuZ2V0X3JlZiA9IG15aXRlbV9nZXRfcmVmLAotCQkucHV0X3JlZiA9IG15aXRlbV9wdXRfcmVmLAotCQkuZXhlY3V0ZSA9IG15aXRlbV9leGVjdXRlLAotCX07Ci0KLSAgICAgWypdIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHMsIHNlZSBzZWN0aW9uICJJdGVtIE9wZXJhdGlvbnMiLgotCi0gKDMpIEluaXRpYWxpc2luZyB0aGUgaXRlbToKLQotCXNsb3dfd29ya19pbml0KCZteWl0ZW0sICZteWl0ZW1fb3BzKTsKLQotICAgICBvcjoKLQotCWRlbGF5ZWRfc2xvd193b3JrX2luaXQoJm15aXRlbSwgJm15aXRlbV9vcHMpOwotCi0gICAgIG9yOgotCi0JdnNsb3dfd29ya19pbml0KCZteWl0ZW0sICZteWl0ZW1fb3BzKTsKLQotICAgICBkZXBlbmRpbmcgb24gaXRzIGNsYXNzLgotCi1BIHN1aXRhYmx5IHNldCB1cCB3b3JrIGl0ZW0gY2FuIHRoZW4gYmUgZW5xdWV1ZWQgZm9yIHByb2Nlc3Npbmc6Ci0KLQlpbnQgcmV0ID0gc2xvd193b3JrX2VucXVldWUoJm15aXRlbSk7Ci0KLVRoaXMgd2lsbCByZXR1cm4gYSAtdmUgZXJyb3IgaWYgdGhlIHRocmVhZCBwb29sIGlzIHVuYWJsZSB0byBnYWluIGEgcmVmZXJlbmNlCi1vbiB0aGUgaXRlbSwgMCBvdGhlcndpc2UsIG9yIChmb3IgZGVsYXllZCB3b3JrKToKLQotCWludCByZXQgPSBkZWxheWVkX3Nsb3dfd29ya19lbnF1ZXVlKCZteWl0ZW0sIG15X2ppZmZ5X2RlbGF5KTsKLQotCi1UaGUgaXRlbXMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLCBzbyB0aGVyZSBvdWdodCB0byBiZSBubyBuZWVkIGZvciBhIGZsdXNoCi1vcGVyYXRpb24uICBCdXQgYXMgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBvcHRpb25hbCwgbWVhbnMgdG8gY2FuY2VsCi1leGlzdGluZyB3b3JrIGl0ZW1zIGFyZSBhbHNvIGluY2x1ZGVkOgotCi0JY2FuY2VsX3Nsb3dfd29yaygmbXlpdGVtKTsKLQljYW5jZWxfZGVsYXllZF9zbG93X3dvcmsoJm15aXRlbSk7Ci0KLWNhbiBiZSB1c2VkIHRvIGNhbmNlbCBwZW5kaW5nIHdvcmsuICBUaGUgYWJvdmUgY2FuY2VsIGZ1bmN0aW9uIHdhaXRzIGZvcgotZXhpc3Rpbmcgd29yayB0byBoYXZlIGJlZW4gZXhlY3V0ZWQgKG9yIHByZXZlbnQgZXhlY3V0aW9uIG9mIHRoZW0sIGRlcGVuZGluZwotb24gdGltaW5nKS4KLQotCi1XaGVuIGFsbCBhIG1vZHVsZSdzIHNsb3cgd29yayBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLCBhbmQgdGhlCi1tb2R1bGUgaGFzIG5vIGZ1cnRoZXIgaW50ZXJlc3QgaW4gdGhlIGZhY2lsaXR5LCBpdCBzaG91bGQgdW5yZWdpc3RlciBpdHMKLWludGVyZXN0OgotCi0Jc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihzdHJ1Y3QgbW9kdWxlICptb2R1bGUpOwotCi1UaGUgbW9kdWxlIHBvaW50ZXIgaXMgdXNlZCB0byB3YWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgd29yayBpdGVtcyBmb3IgdGhhdAotbW9kdWxlIGJlZm9yZSBjb21wbGV0aW5nIHRoZSB1bnJlZ2lzdHJhdGlvbi4gIFRoaXMgcHJldmVudHMgdGhlIHB1dF9yZWYoKSBjb2RlCi1mcm9tIGJlaW5nIHRha2VuIGF3YXkgYmVmb3JlIGl0IGNvbXBsZXRlcy4gIG1vZHVsZSBzaG91bGQgYWxtb3N0IGNlcnRhaW5seSBiZQotVEhJU19NT0RVTEUuCi0KLQotPT09PT09PT09PT09PT09PQotSEVMUEVSIEZVTkNUSU9OUwotPT09PT09PT09PT09PT09PQotCi1UaGUgc2xvdy13b3JrIGZhY2lsaXR5IHByb3ZpZGVzIGEgZnVuY3Rpb24gYnkgd2hpY2ggaXQgY2FuIGJlIGRldGVybWluZWQKLXdoZXRoZXIgb3Igbm90IGFuIGl0ZW0gaXMgcXVldWVkIGZvciBsYXRlciBleGVjdXRpb246Ci0KLQlib29sIHF1ZXVlZCA9IHNsb3dfd29ya19pc19xdWV1ZWQoc3RydWN0IHNsb3dfd29yayAqd29yayk7Ci0KLUlmIGl0IHJldHVybnMgZmFsc2UsIHRoZW4gdGhlIGl0ZW0gaXMgbm90IG9uIHRoZSBxdWV1ZSAoaXQgbWF5IGJlIGV4ZWN1dGluZwotd2l0aCBhIHJlcXVldWUgcGVuZGluZykuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdvcmsgb3V0IHdoZXRoZXIgYW4gaXRlbSBvbiB3aGljaAotYW5vdGhlciBkZXBlbmRzIGlzIG9uIHRoZSBxdWV1ZSwgdGh1cyBhbGxvd2luZyBhIGRlcGVuZGVudCBpdGVtIHRvIGJlIHF1ZXVlZAotYWZ0ZXIgaXQuCi0KLUlmIHRoZSBhYm92ZSBzaG93cyBhbiBpdGVtIG9uIHdoaWNoIGFub3RoZXIgZGVwZW5kcyBub3QgdG8gYmUgcXVldWVkLCB0aGVuIHRoZQotb3duZXIgb2YgdGhlIGRlcGVuZGVudCBpdGVtIG1pZ2h0IG5lZWQgdG8gd2FpdC4gIEhvd2V2ZXIsIHRvIGF2b2lkIGxvY2tpbmcgdXAKLXRoZSB0aHJlYWRzIHVubmVjZXNzYXJpbHkgYmUgc2xlZXBpbmcgaW4gdGhlbSwgaXQgY2FuIG1ha2Ugc2Vuc2UgdW5kZXIgc29tZQotY2lyY3Vtc3RhbmNlcyB0byByZXR1cm4gdGhlIHdvcmsgaXRlbSB0byB0aGUgcXVldWUsIHRodXMgZGVmZXJyaW5nIGl0IHVudGlsCi1zb21lIG90aGVyIGl0ZW1zIGhhdmUgaGFkIGEgY2hhbmNlIHRvIG1ha2UgdXNlIG9mIHRoZSB5aWVsZGVkIHRocmVhZC4KLQotVG8geWllbGQgYSB0aHJlYWQgYW5kIGRlZmVyIGFuIGl0ZW0sIHRoZSB3b3JrIGZ1bmN0aW9uIHNob3VsZCBzaW1wbHkgZW5xdWV1ZQotdGhlIHdvcmsgaXRlbSBhZ2FpbiBhbmQgcmV0dXJuLiAgSG93ZXZlciwgdGhpcyBkb2Vzbid0IHdvcmsgaWYgdGhlcmUncyBub3RoaW5nCi1hY3R1YWxseSBvbiB0aGUgcXVldWUsIGFzIHRoZSB0aHJlYWQganVzdCB2YWNhdGVkIHdpbGwganVtcCBzdHJhaWdodCBiYWNrIGludG8KLXRoZSBpdGVtJ3Mgd29yayBmdW5jdGlvbiwgdGh1cyBidXN5IHdhaXRpbmcgb24gYSBDUFUuCi0KLUluc3RlYWQsIHRoZSBpdGVtIHNob3VsZCB1c2UgdGhlIHRocmVhZCB0byB3YWl0IGZvciB0aGUgZGVwZW5kZW5jeSB0byBnbyBhd2F5LAotYnV0IHJhdGhlciB0aGFuIHVzaW5nIHNjaGVkdWxlKCkgb3Igc2NoZWR1bGVfdGltZW91dCgpIHRvIHNsZWVwLCBpdCBzaG91bGQgdXNlCi10aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgotCi0JYm9vbCByZXF1ZXVlID0gc2xvd193b3JrX3NsZWVwX3RpbGxfdGhyZWFkX25lZWRlZCgKLQkJCXN0cnVjdCBzbG93X3dvcmsgKndvcmssCi0JCQlzaWduZWQgbG9uZyAqX3RpbWVvdXQpOwotCi1UaGlzIHdpbGwgYWRkIGEgc2Vjb25kIHdhaXQgYW5kIHRoZW4gc2xlZXAsIHN1Y2ggdGhhdCBpdCB3aWxsIGJlIHdva2VuIHVwIGlmCi1laXRoZXIgc29tZXRoaW5nIGFwcGVhcnMgb24gdGhlIHF1ZXVlIHRoYXQgY291bGQgdXNlZnVsbHkgbWFrZSB1c2Ugb2YgdGhlCi10aHJlYWQgLSBhbmQgYmVoaW5kIHdoaWNoIHRoaXMgaXRlbSBjYW4gYmUgcXVldWVkLCBvciBpZiB0aGUgZXZlbnQgdGhlIGNhbGxlcgotc2V0IHVwIHRvIHdhaXQgZm9yIGhhcHBlbnMuICBUcnVlIHdpbGwgYmUgcmV0dXJuZWQgaWYgc29tZXRoaW5nIGVsc2UgYXBwZWFyZWQKLW9uIHRoZSBxdWV1ZSBhbmQgdGhpcyB3b3JrIGZ1bmN0aW9uIHNob3VsZCBwZXJoYXBzIHJldHVybiwgb2YgZmFsc2UgaWYKLXNvbWV0aGluZyBlbHNlIHdva2UgaXQgdXAuICBUaGUgdGltZW91dCBpcyBhcyBmb3Igc2NoZWR1bGVfdGltZW91dCgpLgotCi1Gb3IgZXhhbXBsZToKLQotCXdxID0gYml0X3dhaXRxdWV1ZSgmbXlfZmxhZ3MsIE1ZX0JJVCk7Ci0JaW5pdF93YWl0KCZ3YWl0KTsKLQlyZXF1ZXVlID0gZmFsc2U7Ci0JZG8gewotCQlwcmVwYXJlX3RvX3dhaXQod3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmICghdGVzdF9iaXQoTVlfQklULCAmbXlfZmxhZ3MpKQotCQkJYnJlYWs7Ci0JCXJlcXVldWUgPSBzbG93X3dvcmtfc2xlZXBfdGlsbF90aHJlYWRfbmVlZGVkKCZteV93b3JrLAotCQkJCQkJCSAgICAgJnRpbWVvdXQpOwotCX0gd2hpbGUgKHRpbWVvdXQgPiAwICYmICFyZXF1ZXVlKTsKLQlmaW5pc2hfd2FpdCh3cSwgJndhaXQpOwotCWlmICghdGVzdF9iaXQoTVlfQklULCAmbXlfZmxhZ3MpCi0JCWdvdG8gZG9fbXlfdGhpbmc7Ci0JaWYgKHJlcXVldWUpCi0JCXJldHVybjsgLy8gdG8gc2xvd193b3JrCi0KLQotPT09PT09PT09PT09PT09Ci1JVEVNIE9QRVJBVElPTlMKLT09PT09PT09PT09PT09PQotCi1FYWNoIHdvcmsgaXRlbSByZXF1aXJlcyBhIHRhYmxlIG9mIG9wZXJhdGlvbnMgb2YgdHlwZSBzdHJ1Y3Qgc2xvd193b3JrX29wcy4KLU9ubHkgLT5leGVjdXRlKCkgaXMgcmVxdWlyZWQ7IHRoZSBnZXR0aW5nIGFuZCBwdXR0aW5nIG9mIGEgcmVmZXJlbmNlIGFuZCB0aGUKLWRlc2NyaWJpbmcgb2YgYW4gaXRlbSBhcmUgYWxsIG9wdGlvbmFsLgotCi0gKCopIEdldCBhIHJlZmVyZW5jZSBvbiBhbiBpdGVtOgotCi0JaW50ICgqZ2V0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7Ci0KLSAgICAgVGhpcyBhbGxvd3MgdGhlIHRocmVhZCBwb29sIHRvIGF0dGVtcHQgdG8gcGluIGFuIGl0ZW0gYnkgZ2V0dGluZyBhCi0gICAgIHJlZmVyZW5jZSBvbiBpdC4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAwIGlmIHRoZSByZWZlcmVuY2Ugd2FzCi0gICAgIGdyYW50ZWQsIG9yIGEgLXZlIGVycm9yIG90aGVyd2lzZS4gIElmIGFuIGVycm9yIGlzIHJldHVybmVkLAotICAgICBzbG93X3dvcmtfZW5xdWV1ZSgpIHdpbGwgZmFpbC4KLQotICAgICBUaGUgcmVmZXJlbmNlIGlzIGhlbGQgd2hpbHN0IHRoZSBpdGVtIGlzIHF1ZXVlZCBhbmQgd2hpbHN0IGl0IGlzIGJlaW5nCi0gICAgIGV4ZWN1dGVkLiAgVGhlIGl0ZW0gbWF5IHRoZW4gYmUgcmVxdWV1ZWQgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UgaGVsZCwgb3IKLSAgICAgdGhlIHJlZmVyZW5jZSB3aWxsIGJlIHJlbGVhc2VkLgotCi0gKCopIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gYW4gaXRlbToKLQotCXZvaWQgKCpwdXRfcmVmKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKLQotICAgICBUaGlzIGFsbG93cyB0aGUgdGhyZWFkIHBvb2wgdG8gdW5waW4gYW4gaXRlbSBieSByZWxlYXNpbmcgdGhlIHJlZmVyZW5jZSBvbgotICAgICBpdC4gIFRoZSB0aHJlYWQgcG9vbCB3aWxsIG5vdCB0b3VjaCB0aGUgaXRlbSBhZ2FpbiBvbmNlIHRoaXMgaGFzIGJlZW4KLSAgICAgY2FsbGVkLgotCi0gKCopIEV4ZWN1dGUgYW4gaXRlbToKLQotCXZvaWQgKCpleGVjdXRlKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKLQotICAgICBUaGlzIHNob3VsZCBwZXJmb3JtIHRoZSB3b3JrIHJlcXVpcmVkIG9mIHRoZSBpdGVtLiAgSXQgbWF5IHNsZWVwLCBpdCBtYXkKLSAgICAgcGVyZm9ybSBkaXNrIEkvTyBhbmQgaXQgbWF5IHdhaXQgZm9yIGxvY2tzLgotCi0gKCopIFZpZXcgYW4gaXRlbSB0aHJvdWdoIC9wcm9jOgotCi0Jdm9pZCAoKmRlc2MpKHN0cnVjdCBzbG93X3dvcmsgKndvcmssIHN0cnVjdCBzZXFfZmlsZSAqbSk7Ci0KLSAgICAgSWYgc3VwcGxpZWQsIHRoaXMgc2hvdWxkIHByaW50IHRvICdtJyBhIHNtYWxsIHN0cmluZyBkZXNjcmliaW5nIHRoZSB3b3JrCi0gICAgIHRoZSBpdGVtIGlzIHRvIGRvLiAgVGhpcyBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIGFib3V0IDQwIGNoYXJhY3RlcnMsIGFuZAotICAgICBzaG91bGRuJ3QgaW5jbHVkZSBhIG5ld2xpbmUgY2hhcmFjdGVyLgotCi0gICAgIFNlZSB0aGUgJ1ZpZXdpbmcgZXhlY3V0aW5nIGFuZCBxdWV1ZWQgaXRlbXMnIHNlY3Rpb24gYmVsb3cuCi0KLQotPT09PT09PT09PT09PT09PT09Ci1QT09MIENPTkZJR1VSQVRJT04KLT09PT09PT09PT09PT09PT09PQotCi1UaGUgc2xvdy13b3JrIHRocmVhZCBwb29sIGhhcyBhIG51bWJlciBvZiBjb25maWd1cmFibGVzOgotCi0gKCopIC9wcm9jL3N5cy9rZXJuZWwvc2xvdy13b3JrL21pbi10aHJlYWRzCi0KLSAgICAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBzaG91bGQgYmUgaW4gdGhlIHBvb2wgd2hpbHN0IGl0IGlzIGluCi0gICAgIHVzZS4gIFRoaXMgbWF5IGJlIGFueXdoZXJlIGJldHdlZW4gMiBhbmQgbWF4LXRocmVhZHMuCi0KLSAoKikgL3Byb2Mvc3lzL2tlcm5lbC9zbG93LXdvcmsvbWF4LXRocmVhZHMKLQotICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IHNob3VsZCBpbiB0aGUgcG9vbC4gIFRoaXMgbWF5IGJlCi0gICAgIGFueXdoZXJlIGJldHdlZW4gbWluLXRocmVhZHMgYW5kIDI1NSBvciBOUl9DUFVTICogMiwgd2hpY2hldmVyIGlzIGdyZWF0ZXIuCi0KLSAoKikgL3Byb2Mvc3lzL2tlcm5lbC9zbG93LXdvcmsvdnNsb3ctcGVyY2VudGFnZQotCi0gICAgIFRoZSBwZXJjZW50YWdlIG9mIGFjdGl2ZSB0aHJlYWRzIGluIHRoZSBwb29sIHRoYXQgbWF5IGJlIHVzZWQgdG8gZXhlY3V0ZQotICAgICB2ZXJ5IHNsb3cgd29yayBpdGVtcy4gIFRoaXMgbWF5IGJlIGJldHdlZW4gMSBhbmQgOTkuICBUaGUgcmVzdWx0YW50IG51bWJlcgotICAgICBpcyBib3VuZGVkIHRvIGJldHdlZW4gMSBhbmQgb25lIGZld2VyIHRoYW4gdGhlIG51bWJlciBvZiBhY3RpdmUgdGhyZWFkcy4KLSAgICAgVGhpcyBlbnN1cmVzIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBvbmUgdGhyZWFkIHRoYXQgY2FuIHByb2Nlc3MgdmVyeQotICAgICBzbG93IHdvcmsgaXRlbXMsIGFuZCBhbHdheXMgYXQgbGVhc3Qgb25lIHRocmVhZCB0aGF0IHdvbid0LgotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLVZJRVdJTkcgRVhFQ1VUSU5HIEFORCBRVUVVRUQgSVRFTVMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgQ09ORklHX1NMT1dfV09SS19ERUJVRyBpcyBlbmFibGVkLCBhIGRlYnVnZnMgZmlsZSBpcyBtYWRlIGF2YWlsYWJsZToKLQotCS9zeXMva2VybmVsL2RlYnVnL3Nsb3dfd29yay9ydW5xdWV1ZQotCi10aHJvdWdoIHdoaWNoIHRoZSBsaXN0IG9mIHdvcmsgaXRlbXMgYmVpbmcgZXhlY3V0ZWQgYW5kIHRoZSBxdWV1ZXMgb2YgaXRlbXMgdG8KLWJlIGV4ZWN1dGVkIG1heSBiZSB2aWV3ZWQuICBUaGUgb3duZXIgb2YgYSB3b3JrIGl0ZW0gaXMgZ2l2ZW4gdGhlIGNoYW5jZSB0bwotYWRkIHNvbWUgaW5mb3JtYXRpb24gb2YgaXRzIG93bi4KLQotVGhlIGNvbnRlbnRzIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKLQotICAgIFRIUiBQSUQgICBJVEVNIEFERFIgICAgICAgIEZMIE1BUksgIERFU0MKLSAgICA9PT0gPT09PT0gPT09PT09PT09PT09PT09PSA9PSA9PT09PSA9PT09PT09PT09Ci0gICAgICAwICAzMDA1IGZmZmY4ODAwMjNmNTIzNDggIGEgOTUybXMgRlNDOiBPQkoxN2QzOiBMT09LCi0gICAgICAxICAzMDA2IGZmZmY4ODAwMjRlMzM2NjggIDIgMTYwbXMgRlNDOiBPQkoxN2U1IE9QNjBkM2I6IFdyaXRlMS9TdG9yZSBmbD0yCi0gICAgICAyICAzMTY1IGZmZmY4ODAwMjk2ZGQxODAgIGEgNDI0bXMgRlNDOiBPQkoxN2U0OiBMT09LCi0gICAgICAzICA0MDg5IGZmZmY4ODAwMjYyYzhkNzggIGEgMjEybXMgRlNDOiBPQkoxN2VhOiBDUlROCi0gICAgICA0ICA0MDkwIGZmZmY4ODAwMjc5MmJlZDggIDIgMzg4bXMgRlNDOiBPQkoxN2U4IE9QNjBkMzY6IFdyaXRlMS9TdG9yZSBmbD0yCi0gICAgICA1ICA0MDkyIGZmZmY4ODAwMmEwZWYzMDggIDIgMzg4bXMgRlNDOiBPQkoxN2U3IE9QNjBkMmU6IFdyaXRlMS9TdG9yZSBmbD0yCi0gICAgICA2ICA0MDk0IGZmZmY4ODAwMmFiYWY0YjggIDIgMTMybXMgRlNDOiBPQkoxN2UyIE9QNjBkNGU6IFdyaXRlMS9TdG9yZSBmbD0yCi0gICAgICA3ICA0MDk1IGZmZmY4ODAwMmJiMTg4ZTAgIGEgMzg4bXMgRlNDOiBPQkoxN2U5OiBDUlROCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjNkOTk2NjggIDEgMzA4bXMgRlNDOiBPQkoxN2UwIE9QNjBmOTE6IFdyaXRlMS9FblEgZmw9MgotICAgIHZzcSAgICAgLSBmZmZmODgwMDI5NWQxNzQwICAxIDIxMm1zIEZTQzogT0JKMTZiZSBPUDRkNGI2OiBXcml0ZTEvRW5RIGZsPTIKLSAgICB2c3EgICAgIC0gZmZmZjg4MDAyNWJhMzMwOCAgMSAxNjBtcyBGU0M6IE9CSjE3OWEgT1A1OGRlYzogV3JpdGUxL0VuUSBmbD0yCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjRlYzgzZTAgIDEgMTYwbXMgRlNDOiBPQkoxN2FlIE9QNTk5ZjI6IFdyaXRlMS9FblEgZmw9MgotICAgIHZzcSAgICAgLSBmZmZmODgwMDI2NjE4ZTAwICAxIDE2MG1zIEZTQzogT0JKMTdlNiBPUDYwZDMzOiBXcml0ZTEvRW5RIGZsPTIKLSAgICB2c3EgICAgIC0gZmZmZjg4MDAyNWEyYTRiOCAgMSAxMzJtcyBGU0M6IE9CSjE2YTIgT1A0ZDU4MzogV3JpdGUxL0VuUSBmbD0yCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjNjYmU2ZDggIDkgMjEybXMgRlNDOiBPQkoxN2ViOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjRkMzc1OTAgIDkgMjEybXMgRlNDOiBPQkoxN2VjOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjc3NDZjYjAgIDkgMjEybXMgRlNDOiBPQkoxN2VkOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjRkMzdhZTggIDkgMjEybXMgRlNDOiBPQkoxN2VlOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjRkMzdjYjAgIDkgMjEybXMgRlNDOiBPQkoxN2VmOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjUwMzY1NTAgIDkgMjEybXMgRlNDOiBPQkoxN2YwOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjUwMzY4ZTAgIDkgMjEybXMgRlNDOiBPQkoxN2YxOiBMT09LCi0gICAgdnNxICAgICAtIGZmZmY4ODAwMjUwMzZhYTggIDkgMjEybXMgRlNDOiBPQkoxN2YyOiBMT09LCi0KLUluIHRoZSAnVEhSJyBjb2x1bW4sIGV4ZWN1dGluZyBpdGVtcyBzaG93IHRoZSB0aHJlYWQgdGhleSdyZSBvY2N1cHlpbmcgYW5kCi1xdWV1ZWQgdGhyZWFkcyBpbmRpY2F0ZSB3aGljaCBxdWV1ZSB0aGV5J3JlIG9uLiAgJ1BJRCcgc2hvd3MgdGhlIHByb2Nlc3MgSUQgb2YKLWEgc2xvdy13b3JrIHRocmVhZCB0aGF0J3MgZXhlY3V0aW5nIHNvbWV0aGluZy4gICdGTCcgc2hvd3MgdGhlIHdvcmsgaXRlbSBmbGFncy4KLSdNQVJLJyBpbmRpY2F0ZXMgaG93IGxvbmcgc2luY2UgYW4gaXRlbSB3YXMgcXVldWVkIG9yIGJlZ2FuIGV4ZWN1dGluZy4gIExhc3RseSwKLXRoZSAnREVTQycgY29sdW1uIHBlcm1pdHMgdGhlIG93bmVyIG9mIGFuIGl0ZW0gdG8gZ2l2ZSBzb21lIGluZm9ybWF0aW9uLgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDFkMzhiMGQuLjAzNzcxZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0xMTQsNiArMTE0LDExIEBACiAgIHNhbXN1bmctbmMxMAlTYW1zdW5nIE5DMTAgbWluaSBub3RlYm9vawogICBhdXRvCQlhdXRvLWNvbmZpZyByZWFkaW5nIEJJT1MgKGRlZmF1bHQpCiAKK0FMQzY4MAorPT09PT09CisgIGJhc2UJCUJhc2UgbW9kZWwgKEFTVVMgTlg5MCkKKyAgYXV0bwkJYXV0by1jb25maWcgcmVhZGluZyBCSU9TIChkZWZhdWx0KQorCiBBTEM4ODIvODgzLzg4NS84ODgvODg5CiA9PT09PT09PT09PT09PT09PT09PT09CiAgIDNzdGFjay1kaWcJMy1qYWNrIHdpdGggU1BESUYgSS9PCkBAIC0yODIsNiArMjg3LDcgQEAKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCiAgIGhwLWR2NjczNglIUCBkdjY3MzYKICAgaHAtZjcwMAlIUCBDb21wYXEgUHJlc2FyaW8gRjcwMAorICBpZGVhcGFkCUxlbm92byBJZGVhUGFkIGxhcHRvcAogICBsZW5vdm8teDIwMAlMZW5vdm8gWDIwMCBsYXB0b3AKICAgdG9zaGliYQlUb3NoaWJhIFNhdGVsbGl0ZSBNMzAwCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvUHJvY2ZpbGUudHh0CmluZGV4IDA3MzAxZGUuLjdmY2QxYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Qcm9jZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1Byb2NmaWxlLnR4dApAQCAtMTAzLDYgKzEwMyw4IEBACiAJICBiaXQgMiA9IEVuYWJsZSBhZGRpdGlvbmFsIGppZmZpZXMgY2hlY2sKIAkgIGJpdCAzID0gTG9nIGh3cHRyIHVwZGF0ZSBhdCBlYWNoIHBlcmlvZCBpbnRlcnJ1cHQKIAkgIGJpdCA0ID0gTG9nIGh3cHRyIHVwZGF0ZSBhdCBlYWNoIHNuZF9wY21fdXBkYXRlX2h3X3B0cigpCisJICBiaXQgNSA9IFNob3cgbGFzdCAxMCBwb3NpdGlvbnMgb24gZXJyb3IKKwkgIGJpdCA2ID0gRG8gYWJvdmUgb25seSBvbmNlCiAKIAlXaGVuIHRoZSBiaXQgMCBpcyBzZXQsIHRoZSBkcml2ZXIgd2lsbCBzaG93IHRoZSBtZXNzYWdlcyB0bwogCWtlcm5lbCBsb2cgd2hlbiBhbiB4cnVuIGlzIGRldGVjdGVkLiAgVGhlIGRlYnVnIG1lc3NhZ2UgaXMKQEAgLTEyMiw2ICsxMjQsMTIgQEAKIAlCaXRzIDMgYW5kIDQgYXJlIGZvciBsb2dnaW5nIHRoZSBod3B0ciByZWNvcmRzLiAgTm90ZSB0aGF0CiAJdGhlc2Ugd2lsbCBnaXZlIGZsb29kIG9mIGtlcm5lbCBtZXNzYWdlcy4KIAorCVdoZW4gYml0IDUgaXMgc2V0LCB0aGUgZHJpdmVyIGxvZ3MgdGhlIGxhc3QgMTAgeHJ1biBlcnJvcnMgYW5kCisJdGhlIHByb2MgZmlsZSBzaG93cyBlYWNoIGppZmZpZXMsIHBvc2l0aW9uLCBwZXJpb2Rfc2l6ZSwKKwlidWZmZXJfc2l6ZSwgb2xkX2h3X3B0ciwgYW5kIGh3X3B0cl9iYXNlIHZhbHVlcy4KKworCVdoZW4gYml0IDYgaXMgc2V0LCB0aGUgZnVsbCB4cnVuIGxvZyBpcyBzaG93biBvbmx5IG9uY2UuCisKIGNhcmQqL3BjbSovc3ViKi9pbmZvCiAJVGhlIGdlbmVyYWwgaW5mb3JtYXRpb24gb2YgdGhpcyBQQ00gc3ViLXN0cmVhbS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2Fsc2EtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvYWxzYS1wYXJhbWV0ZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmE0MDY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL2Fsc2EtcGFyYW1ldGVycy50eHQKQEAgLTAsMCArMSwxMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUxTQSBLZXJuZWwgUGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NlZSBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBmb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBvbgorc3BlY2lmeWluZyBtb2R1bGUgcGFyYW1ldGVycy4KKworVGhpcyBkb2N1bWVudCBtYXkgbm90IGJlIGVudGlyZWx5IHVwIHRvIGRhdGUgYW5kIGNvbXByZWhlbnNpdmUuIFRoZSBjb21tYW5kCisibW9kaW5mbyAtcCAke21vZHVsZW5hbWV9IiBzaG93cyBhIGN1cnJlbnQgbGlzdCBvZiBhbGwgcGFyYW1ldGVycyBvZiBhIGxvYWRhYmxlCittb2R1bGUuIExvYWRhYmxlIG1vZHVsZXMsIGFmdGVyIGJlaW5nIGxvYWRlZCBpbnRvIHRoZSBydW5uaW5nIGtlcm5lbCwgYWxzbworcmV2ZWFsIHRoZWlyIHBhcmFtZXRlcnMgaW4gL3N5cy9tb2R1bGUvJHttb2R1bGVuYW1lfS9wYXJhbWV0ZXJzLy4gU29tZSBvZiB0aGVzZQorcGFyYW1ldGVycyBtYXkgYmUgY2hhbmdlZCBhdCBydW50aW1lIGJ5IHRoZSBjb21tYW5kCisiZWNobyAtbiAke3ZhbHVlfSA+IC9zeXMvbW9kdWxlLyR7bW9kdWxlbmFtZX0vcGFyYW1ldGVycy8ke3Bhcm19Ii4KKworCisJc25kLWFkMTgxNmE9CVtIVyxBTFNBXQorCisJc25kLWFkMTg0OD0JW0hXLEFMU0FdCisKKwlzbmQtYWxpNTQ1MT0JW0hXLEFMU0FdCisKKwlzbmQtYWxzMTAwPQlbSFcsQUxTQV0KKworCXNuZC1hbHM0MDAwPQlbSFcsQUxTQV0KKworCXNuZC1henQyMzIwPQlbSFcsQUxTQV0KKworCXNuZC1jbWk4MzMwPQlbSFcsQUxTQV0KKworCXNuZC1jbWlwY2k9CVtIVyxBTFNBXQorCisJc25kLWNzNDIzMT0JW0hXLEFMU0FdCisKKwlzbmQtY3M0MjMyPQlbSFcsQUxTQV0KKworCXNuZC1jczQyMzY9CVtIVyxBTFNBXQorCisJc25kLWNzNDI4MT0JW0hXLEFMU0FdCisKKwlzbmQtY3M0Nnh4PQlbSFcsQUxTQV0KKworCXNuZC1kdDAxOXg9CVtIVyxBTFNBXQorCisJc25kLWR1bW15PQlbSFcsQUxTQV0KKworCXNuZC1lbXUxMGsxPQlbSFcsQUxTQV0KKworCXNuZC1lbnMxMzcwPQlbSFcsQUxTQV0KKworCXNuZC1lbnMxMzcxPQlbSFcsQUxTQV0KKworCXNuZC1lczk2OD0JW0hXLEFMU0FdCisKKwlzbmQtZXMxNjg4PQlbSFcsQUxTQV0KKworCXNuZC1lczE4eHg9CVtIVyxBTFNBXQorCisJc25kLWVzMTkzOD0JW0hXLEFMU0FdCisKKwlzbmQtZXMxOTY4PQlbSFcsQUxTQV0KKworCXNuZC1mbTgwMT0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzY2xhc3NpYz0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzZXh0cmVtZT0JW0hXLEFMU0FdCisKKwlzbmQtZ3VzbWF4PQlbSFcsQUxTQV0KKworCXNuZC1oZHNwPQlbSFcsQUxTQV0KKworCXNuZC1pY2UxNzEyPQlbSFcsQUxTQV0KKworCXNuZC1pbnRlbDh4MD0JW0hXLEFMU0FdCisKKwlzbmQtaW50ZXJ3YXZlPQlbSFcsQUxTQV0KKworCXNuZC1pbnRlcndhdmUtc3RiPQorCQkJW0hXLEFMU0FdCisKKwlzbmQta29yZzEyMTI9CVtIVyxBTFNBXQorCisJc25kLW1hZXN0cm8zPQlbSFcsQUxTQV0KKworCXNuZC1tcHU0MDE9CVtIVyxBTFNBXQorCisJc25kLW10cGF2PQlbSFcsQUxTQV0KKworCXNuZC1ubTI1Nj0JW0hXLEFMU0FdCisKKwlzbmQtb3BsM3NhMj0JW0hXLEFMU0FdCisKKwlzbmQtb3B0aTkyeC1hZDE4NDg9CisJCQlbSFcsQUxTQV0KKworCXNuZC1vcHRpOTJ4LWNzNDIzMT0KKwkJCVtIVyxBTFNBXQorCisJc25kLW9wdGk5M3g9CVtIVyxBTFNBXQorCisJc25kLXBtYWM9CVtIVyxBTFNBXQorCisJc25kLXJtZTMyPQlbSFcsQUxTQV0KKworCXNuZC1ybWU5Nj0JW0hXLEFMU0FdCisKKwlzbmQtcm1lOTY1Mj0JW0hXLEFMU0FdCisKKwlzbmQtc2I4PQlbSFcsQUxTQV0KKworCXNuZC1zYjE2PQlbSFcsQUxTQV0KKworCXNuZC1zYmF3ZT0JW0hXLEFMU0FdCisKKwlzbmQtc2VyaWFsPQlbSFcsQUxTQV0KKworCXNuZC1zZ2FsYXh5PQlbSFcsQUxTQV0KKworCXNuZC1zb25pY3ZpYmVzPQlbSFcsQUxTQV0KKworCXNuZC1zdW4tYW1kNzkzMD0KKwkJCVtIVyxBTFNBXQorCisJc25kLXN1bi1jczQyMzE9CVtIVyxBTFNBXQorCisJc25kLXRyaWRlbnQ9CVtIVyxBTFNBXQorCisJc25kLXVzYi1hdWRpbz0JW0hXLEFMU0EsVVNCXQorCisJc25kLXZpYTgyeHg9CVtIVyxBTFNBXQorCisJc25kLXZpcm1pZGk9CVtIVyxBTFNBXQorCisJc25kLXdhdmVmcm9udD0JW0hXLEFMU0FdCisKKwlzbmQteW1mcGNpPQlbSFcsQUxTQV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL29zcy1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL29zcy1wYXJhbWV0ZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWIzOTFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3Mvb3NzLXBhcmFtZXRlcnMudHh0CkBAIC0wLDAgKzEsNTEgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT1NTIEtlcm5lbCBQYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitTZWUgRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgZm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24KK3NwZWNpZnlpbmcgbW9kdWxlIHBhcmFtZXRlcnMuCisKK1RoaXMgZG9jdW1lbnQgbWF5IG5vdCBiZSBlbnRpcmVseSB1cCB0byBkYXRlIGFuZCBjb21wcmVoZW5zaXZlLiBUaGUgY29tbWFuZAorIm1vZGluZm8gLXAgJHttb2R1bGVuYW1lfSIgc2hvd3MgYSBjdXJyZW50IGxpc3Qgb2YgYWxsIHBhcmFtZXRlcnMgb2YgYSBsb2FkYWJsZQorbW9kdWxlLiBMb2FkYWJsZSBtb2R1bGVzLCBhZnRlciBiZWluZyBsb2FkZWQgaW50byB0aGUgcnVubmluZyBrZXJuZWwsIGFsc28KK3JldmVhbCB0aGVpciBwYXJhbWV0ZXJzIGluIC9zeXMvbW9kdWxlLyR7bW9kdWxlbmFtZX0vcGFyYW1ldGVycy8uIFNvbWUgb2YgdGhlc2UKK3BhcmFtZXRlcnMgbWF5IGJlIGNoYW5nZWQgYXQgcnVudGltZSBieSB0aGUgY29tbWFuZAorImVjaG8gLW4gJHt2YWx1ZX0gPiAvc3lzL21vZHVsZS8ke21vZHVsZW5hbWV9L3BhcmFtZXRlcnMvJHtwYXJtfSIuCisKKworCWFkMTg0OD0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPGRtYTI+LDx0eXBlPgorCisJYWVkc3AxNj0JW0hXLE9TU10gQXVkaW8gRXhjZWwgRFNQIDE2CisJCQlGb3JtYXQ6IDxpbz4sPGlycT4sPGRtYT4sPG1zc19pbz4sPG1wdV9pbz4sPG1wdV9pcnE+CisJCQlTZWUgYWxzbyBoZWFkZXIgb2Ygc291bmQvb3NzL2FlZHNwMTYuYy4KKworCWRtYXNvdW5kPQlbSFcsT1NTXSBTb3VuZCBzdWJzeXN0ZW0gYnVmZmVycworCisJbXB1NDAxPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPgorCisJb3BsMz0JCVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4KKworCXBhczI9CQlbSFcsT1NTXSBGb3JtYXQ6CisJCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8c2JfZG1hMTY+CisKKwlwc3M9CQlbSFcsT1NTXSBQZXJzb25hbCBTb3VuZCBTeXN0ZW0gKEVDSE8gRVNDNjE0KQorCQkJRm9ybWF0OgorCQkJPGlvPiw8bXNzX2lvPiw8bXNzX2lycT4sPG1zc19kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgorCisJc3NjYXBlPQkJW0hXLE9TU10KKwkJCUZvcm1hdDogPGlvPiw8aXJxPiw8ZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KKworCXRyaXg9CQlbSFcsT1NTXSBNZWRpYVRyaXggQXVkaW9Ucml4IFBybworCQkJRm9ybWF0OgorCQkJPGlvPiw8aXJxPiw8ZG1hPiw8ZG1hMj4sPHNiX2lvPiw8c2JfaXJxPiw8c2JfZG1hPiw8bXB1X2lvPiw8bXB1X2lycT4KKworCXVhcnQ0MDE9CVtIVyxPU1NdCisJCQlGb3JtYXQ6IDxpbz4sPGlycT4KKworCXVhcnQ2ODUwPQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+CisKKwl3YXZlYXJ0aXN0PQlbSFcsT1NTXQorCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CmluZGV4IDgyYjJkYTEuLmI2MDZjMmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKQEAgLTUxMSw3ICs1MTEsNyBAQAogSWYgdGhpcyBpcyBzZXQgdG8gbm9uLXplcm8sIHRoaXMgaW5mb3JtYXRpb24gaXMgc2hvd24gd2hlbmV2ZXIgdGhlCiBPT00ga2lsbGVyIGFjdHVhbGx5IGtpbGxzIGEgbWVtb3J5LWhvZ2dpbmcgdGFzay4KIAotVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KK1RoZSBkZWZhdWx0IHZhbHVlIGlzIDEgKGVuYWJsZWQpLgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RpbWVycy90aW1lcnMtaG93dG8udHh0IGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVmMjlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dApAQCAtMCwwICsxLDEwNSBAQAorZGVsYXlzIC0gSW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMga2VybmVsIGRlbGF5IC8gc2xlZXAgbWVjaGFuaXNtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IHNlZWtzIHRvIGFuc3dlciB0aGUgY29tbW9uIHF1ZXN0aW9uOiAiV2hhdCBpcyB0aGUKK1JpZ2h0V2F5IChUTSkgdG8gaW5zZXJ0IGEgZGVsYXk/IgorCitUaGlzIHF1ZXN0aW9uIGlzIG1vc3Qgb2Z0ZW4gZmFjZWQgYnkgZHJpdmVyIHdyaXRlcnMgd2hvIGhhdmUgdG8KK2RlYWwgd2l0aCBoYXJkd2FyZSBkZWxheXMgYW5kIHdobyBtYXkgbm90IGJlIHRoZSBtb3N0IGludGltYXRlbHkKK2ZhbWlsaWFyIHdpdGggdGhlIGlubmVyIHdvcmtpbmdzIG9mIHRoZSBMaW51eCBLZXJuZWwuCisKKworSW5zZXJ0aW5nIERlbGF5cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QsIGFuZCBtb3N0IGltcG9ydGFudCwgcXVlc3Rpb24geW91IG5lZWQgdG8gYXNrIGlzICJJcyBteQorY29kZSBpbiBhbiBhdG9taWMgY29udGV4dD8iICBUaGlzIHNob3VsZCBiZSBmb2xsb3dlZCBjbG9zZWx5IGJ5ICJEb2VzCitpdCByZWFsbHkgbmVlZCB0byBkZWxheSBpbiBhdG9taWMgY29udGV4dD8iIElmIHNvLi4uCisKK0FUT01JQyBDT05URVhUOgorCVlvdSBtdXN0IHVzZSB0aGUgKmRlbGF5IGZhbWlseSBvZiBmdW5jdGlvbnMuIFRoZXNlCisJZnVuY3Rpb25zIHVzZSB0aGUgamlmZmllIGVzdGltYXRpb24gb2YgY2xvY2sgc3BlZWQKKwlhbmQgd2lsbCBidXN5IHdhaXQgZm9yIGVub3VnaCBsb29wIGN5Y2xlcyB0byBhY2hpZXZlCisJdGhlIGRlc2lyZWQgZGVsYXk6CisKKwluZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKKwl1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKKwltZGVsYXkodW5zZ2luZWQgbG9uZyBtc2VjcykKKworCXVkZWxheSBpcyB0aGUgZ2VuZXJhbGx5IHByZWZlcnJlZCBBUEk7IG5kZWxheS1sZXZlbAorCXByZWNpc2lvbiBtYXkgbm90IGFjdHVhbGx5IGV4aXN0IG9uIG1hbnkgbm9uLVBDIGRldmljZXMuCisKKwltZGVsYXkgaXMgbWFjcm8gd3JhcHBlciBhcm91bmQgdWRlbGF5LCB0byBhY2NvdW50IGZvcgorCXBvc3NpYmxlIG92ZXJmbG93IHdoZW4gcGFzc2luZyBsYXJnZSBhcmd1bWVudHMgdG8gdWRlbGF5LgorCUluIGdlbmVyYWwsIHVzZSBvZiBtZGVsYXkgaXMgZGlzY291cmFnZWQgYW5kIGNvZGUgc2hvdWxkCisJYmUgcmVmYWN0b3JlZCB0byBhbGxvdyBmb3IgdGhlIHVzZSBvZiBtc2xlZXAuCisKK05PTi1BVE9NSUMgQ09OVEVYVDoKKwlZb3Ugc2hvdWxkIHVzZSB0aGUgKnNsZWVwW19yYW5nZV0gZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKwlUaGVyZSBhcmUgYSBmZXcgbW9yZSBvcHRpb25zIGhlcmUsIHdoaWxlIGFueSBvZiB0aGVtIG1heQorCXdvcmsgY29ycmVjdGx5LCB1c2luZyB0aGUgInJpZ2h0IiBzbGVlcCBmdW5jdGlvbiB3aWxsCisJaGVscCB0aGUgc2NoZWR1bGVyLCBwb3dlciBtYW5hZ2VtZW50LCBhbmQganVzdCBtYWtlIHlvdXIKKwlkcml2ZXIgYmV0dGVyIDopCisKKwktLSBCYWNrZWQgYnkgYnVzeS13YWl0IGxvb3A6CisJCXVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQorCS0tIEJhY2tlZCBieSBocnRpbWVyczoKKwkJdXNsZWVwX3JhbmdlKHVuc2lnbmVkIGxvbmcgbWluLCB1bnNpZ25lZCBsb25nIG1heCkKKwktLSBCYWNrZWQgYnkgamlmZmllcyAvIGxlZ2FjeV90aW1lcnMKKwkJbXNsZWVwKHVuc2lnbmVkIGxvbmcgbXNlY3MpCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHVuc2lnbmVkIGxvbmcgbXNlY3MpCisKKwlVbmxpa2UgdGhlICpkZWxheSBmYW1pbHksIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmlzbQorCWRyaXZpbmcgZWFjaCBvZiB0aGVzZSBjYWxscyB2YXJpZXMsIHRodXMgdGhlcmUgYXJlCisJcXVpcmtzIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YuCisKKworCVNMRUVQSU5HIEZPUiAiQSBGRVciIFVTRUNTICggPCB+MTB1cz8gKToKKwkJKiBVc2UgdWRlbGF5CisKKwkJLSBXaHkgbm90IHVzbGVlcD8KKwkJCU9uIHNsb3dlciBzeXN0ZW1zLCAoZW1iZWRkZWQsIE9SIHBlcmhhcHMgYSBzcGVlZC0KKwkJCXN0ZXBwZWQgUEMhKSB0aGUgb3ZlcmhlYWQgb2Ygc2V0dGluZyB1cCB0aGUgaHJ0aW1lcnMKKwkJCWZvciB1c2xlZXAgKm1heSogbm90IGJlIHdvcnRoIGl0LiBTdWNoIGFuIGV2YWx1YXRpb24KKwkJCXdpbGwgb2J2aW91c2x5IGRlcGVuZCBvbiB5b3VyIHNwZWNpZmljIHNpdHVhdGlvbiwgYnV0CisJCQlpdCBpcyBzb21ldGhpbmcgdG8gYmUgYXdhcmUgb2YuCisKKwlTTEVFUElORyBGT1IgflVTRUNTIE9SIFNNQUxMIE1TRUNTICggMTB1cyAtIDIwbXMpOgorCQkqIFVzZSB1c2xlZXBfcmFuZ2UKKworCQktIFdoeSBub3QgbXNsZWVwIGZvciAoMW1zIC0gMjBtcyk/CisJCQlFeHBsYWluZWQgb3JpZ2luYWxseSBoZXJlOgorCQkJCWh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDcvOC8zLzI1MAorCQkJbXNsZWVwKDF+MjApIG1heSBub3QgZG8gd2hhdCB0aGUgY2FsbGVyIGludGVuZHMsIGFuZAorCQkJd2lsbCBvZnRlbiBzbGVlcCBsb25nZXIgKH4yMCBtcyBhY3R1YWwgc2xlZXAgZm9yIGFueQorCQkJdmFsdWUgZ2l2ZW4gaW4gdGhlIDF+MjBtcyByYW5nZSkuIEluIG1hbnkgY2FzZXMgdGhpcworCQkJaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLgorCisJCS0gV2h5IGlzIHRoZXJlIG5vICJ1c2xlZXAiIC8gV2hhdCBpcyBhIGdvb2QgcmFuZ2U/CisJCQlTaW5jZSB1c2xlZXBfcmFuZ2UgaXMgYnVpbHQgb24gdG9wIG9mIGhydGltZXJzLCB0aGUKKwkJCXdha2V1cCB3aWxsIGJlIHZlcnkgcHJlY2lzZSAoaXNoKSwgdGh1cyBhIHNpbXBsZQorCQkJdXNsZWVwIGZ1bmN0aW9uIHdvdWxkIGxpa2VseSBpbnRyb2R1Y2UgYSBsYXJnZSBudW1iZXIKKwkJCW9mIHVuZGVzaXJlZCBpbnRlcnJ1cHRzLgorCisJCQlXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSByYW5nZSwgdGhlIHNjaGVkdWxlciBpcworCQkJZnJlZSB0byBjb2FsZXNjZSB5b3VyIHdha2V1cCB3aXRoIGFueSBvdGhlciB3YWtldXAKKwkJCXRoYXQgbWF5IGhhdmUgaGFwcGVuZWQgZm9yIG90aGVyIHJlYXNvbnMsIG9yIGF0IHRoZQorCQkJd29yc3QgY2FzZSwgZmlyZSBhbiBpbnRlcnJ1cHQgZm9yIHlvdXIgdXBwZXIgYm91bmQuCisKKwkJCVRoZSBsYXJnZXIgYSByYW5nZSB5b3Ugc3VwcGx5LCB0aGUgZ3JlYXRlciBhIGNoYW5jZQorCQkJdGhhdCB5b3Ugd2lsbCBub3QgdHJpZ2dlciBhbiBpbnRlcnJ1cHQ7IHRoaXMgc2hvdWxkCisJCQliZSBiYWxhbmNlZCB3aXRoIHdoYXQgaXMgYW4gYWNjZXB0YWJsZSB1cHBlciBib3VuZCBvbgorCQkJZGVsYXkgLyBwZXJmb3JtYW5jZSBmb3IgeW91ciBzcGVjaWZpYyBjb2RlIHBhdGguIEV4YWN0CisJCQl0b2xlcmFuY2VzIGhlcmUgYXJlIHZlcnkgc2l0dWF0aW9uIHNwZWNpZmljLCB0aHVzIGl0CisJCQlpcyBsZWZ0IHRvIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSByYW5nZS4KKworCVNMRUVQSU5HIEZPUiBMQVJHRVIgTVNFQ1MgKCAxMG1zKyApCisJCSogVXNlIG1zbGVlcCBvciBwb3NzaWJseSBtc2xlZXBfaW50ZXJydXB0aWJsZQorCisJCS0gV2hhdCdzIHRoZSBkaWZmZXJlbmNlPworCQkJbXNsZWVwIHNldHMgdGhlIGN1cnJlbnQgdGFzayB0byBUQVNLX1VOSU5URVJSVVBUSUJMRQorCQkJd2hlcmVhcyBtc2xlZXBfaW50ZXJydXB0aWJsZSBzZXRzIHRoZSBjdXJyZW50IHRhc2sgdG8KKwkJCVRBU0tfSU5URVJSVVBUSUJMRSBiZWZvcmUgc2NoZWR1bGluZyB0aGUgc2xlZXAuIEluCisJCQlzaG9ydCwgdGhlIGRpZmZlcmVuY2UgaXMgd2hldGhlciB0aGUgc2xlZXAgY2FuIGJlIGVuZGVkCisJCQllYXJseSBieSBhIHNpZ25hbC4gSW4gZ2VuZXJhbCwganVzdCB1c2UgbXNsZWVwIHVubGVzcworCQkJeW91IGtub3cgeW91IGhhdmUgYSBuZWVkIGZvciB0aGUgaW50ZXJydXB0aWJsZSB2YXJpYW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLWRlc2lnbi50eHQKaW5kZXggZjFmODFhZi4uZGM1MmJkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS1kZXNpZ24udHh0CkBAIC0xMyw2ICsxMyw5IEBACiB3YW50IG1vcmUgZXhwbGFuYXRpb24gb2YgYSBmZWF0dXJlIGluIHRlcm1zIG9mIGNvbW1vbiBjb2RlLCByZXZpZXcgdGhlIGNvbW1vbgogZnRyYWNlLnR4dCBmaWxlLgogCitJZGVhbGx5LCBldmVyeW9uZSB3aG8gd2lzaGVzIHRvIHJldGFpbiBwZXJmb3JtYW5jZSB3aGlsZSBzdXBwb3J0aW5nIHRyYWNpbmcgaW4KK3RoZWlyIGtlcm5lbCBzaG91bGQgbWFrZSBpdCBhbGwgdGhlIHdheSB0byBkeW5hbWljIGZ0cmFjZSBzdXBwb3J0LgorCiAKIFByZXJlcXVpc2l0ZXMKIC0tLS0tLS0tLS0tLS0KQEAgLTIxNSw3ICsyMTgsNyBAQAogZXhpdGluZyBvZiBhIGZ1bmN0aW9uLiAgT24gZXhpdCwgdGhlIHZhbHVlIGlzIGNvbXBhcmVkIGFuZCBpZiBpdCBkb2VzIG5vdAogbWF0Y2gsIHRoZW4gaXQgd2lsbCBwYW5pYyB0aGUga2VybmVsLiAgVGhpcyBpcyBsYXJnZWx5IGEgc2FuaXR5IGNoZWNrIGZvciBiYWQKIGNvZGUgZ2VuZXJhdGlvbiB3aXRoIGdjYy4gIElmIGdjYyBmb3IgeW91ciBwb3J0IHNhbmVseSB1cGRhdGVzIHRoZSBmcmFtZQotcG9pbnRlciB1bmRlciBkaWZmZXJlbnQgb3BpdG1pemF0aW9uIGxldmVscywgdGhlbiBpZ25vcmUgdGhpcyBvcHRpb24uCitwb2ludGVyIHVuZGVyIGRpZmZlcmVudCBvcHRpbWl6YXRpb24gbGV2ZWxzLCB0aGVuIGlnbm9yZSB0aGlzIG9wdGlvbi4KIAogSG93ZXZlciwgYWRkaW5nIHN1cHBvcnQgZm9yIGl0IGlzbid0IHRlcnJpYmx5IGRpZmZpY3VsdC4gIEluIHlvdXIgYXNzZW1ibHkgY29kZQogdGhhdCBjYWxscyBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKSwgcGFzcyB0aGUgZnJhbWUgcG9pbnRlciBhcyB0aGUgM3JkIGFyZ3VtZW50LgpAQCAtMjM0LDcgKzIzNyw3IEBACiAKIAogSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBZb3UgbmVlZCB2ZXJ5IGZldyB0aGluZ3MgdG8gZ2V0IHRoZSBzeXNjYWxscyB0cmFjaW5nIGluIGFuIGFyY2guCiAKQEAgLTI1MCwxMiArMjUzLDE1MiBAQAogSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgc2NyaXB0cy9yZWNvcmRtY291bnQucGwgZm9yIG1vcmUgaW5mby4KLQotPGRldGFpbHMgdG8gYmUgZmlsbGVkPgorU2VlIHNjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGZvciBtb3JlIGluZm8uICBKdXN0IGZpbGwgaW4gdGhlIGFyY2gtc3BlY2lmaWMKK2RldGFpbHMgZm9yIGhvdyB0byBsb2NhdGUgdGhlIGFkZHJlc3NlcyBvZiBtY291bnQgY2FsbCBzaXRlcyB2aWEgb2JqZHVtcC4KK1RoaXMgb3B0aW9uIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHdpdGhvdXQgYWxzbyBpbXBsZW1lbnRpbmcgZHluYW1pYyBmdHJhY2UuCiAKIAogSEFWRV9EWU5BTUlDX0ZUUkFDRQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIGZpcnN0IG5lZWQgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRCBhbmQgSEFWRV9GVU5DVElPTl9UUkFDRVIsIHNvCitzY3JvbGwgeW91ciByZWFkZXIgYmFjayB1cCBpZiB5b3UgZ290IG92ZXIgZWFnZXIuCisKK09uY2UgdGhvc2UgYXJlIG91dCBvZiB0aGUgd2F5LCB5b3Ugd2lsbCBuZWVkIHRvIGltcGxlbWVudDoKKwktIGFzbS9mdHJhY2UuaDoKKwkJLSBNQ09VTlRfQUREUgorCQktIGZ0cmFjZV9jYWxsX2FkanVzdCgpCisJCS0gc3RydWN0IGR5bl9hcmNoX2Z0cmFjZXt9CisJLSBhc20gY29kZToKKwkJLSBtY291bnQoKSAobmV3IHN0dWIpCisJCS0gZnRyYWNlX2NhbGxlcigpCisJCS0gZnRyYWNlX2NhbGwoKQorCQktIGZ0cmFjZV9zdHViKCkKKwktIEMgY29kZToKKwkJLSBmdHJhY2VfZHluX2FyY2hfaW5pdCgpCisJCS0gZnRyYWNlX21ha2Vfbm9wKCkKKwkJLSBmdHJhY2VfbWFrZV9jYWxsKCkKKwkJLSBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKCkKKworRmlyc3QgeW91IHdpbGwgbmVlZCB0byBmaWxsIG91dCBzb21lIGFyY2ggZGV0YWlscyBpbiB5b3VyIGFzbS9mdHJhY2UuaC4KKworRGVmaW5lIE1DT1VOVF9BRERSIGFzIHRoZSBhZGRyZXNzIG9mIHlvdXIgbWNvdW50IHN5bWJvbCBzaW1pbGFyIHRvOgorCSNkZWZpbmUgTUNPVU5UX0FERFIgKCh1bnNpZ25lZCBsb25nKW1jb3VudCkKK1NpbmNlIG5vIG9uZSBlbHNlIHdpbGwgaGF2ZSBhIGRlY2wgZm9yIHRoYXQgZnVuY3Rpb24sIHlvdSB3aWxsIG5lZWQgdG86CisJZXh0ZXJuIHZvaWQgbWNvdW50KHZvaWQpOworCitZb3Ugd2lsbCBhbHNvIG5lZWQgdGhlIGhlbHBlciBmdW5jdGlvbiBmdHJhY2VfY2FsbF9hZGp1c3QoKS4gIE1vc3QgcGVvcGxlCit3aWxsIGJlIGFibGUgdG8gc3R1YiBpdCBvdXQgbGlrZSBzbzoKKwlzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcikKKwl7CisJCXJldHVybiBhZGRyOworCX0KKzxkZXRhaWxzIHRvIGJlIGZpbGxlZD4KKworTGFzdGx5IHlvdSB3aWxsIG5lZWQgdGhlIGN1c3RvbSBkeW5fYXJjaF9mdHJhY2Ugc3RydWN0dXJlLiAgSWYgeW91IG5lZWQKK3NvbWUgZXh0cmEgc3RhdGUgd2hlbiBydW50aW1lIHBhdGNoaW5nIGFyYml0cmFyeSBjYWxsIHNpdGVzLCB0aGlzIGlzIHRoZQorcGxhY2UuICBGb3Igbm93IHRob3VnaCwgY3JlYXRlIGFuIGVtcHR5IHN0cnVjdDoKKwlzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKKwkJLyogTm8gZXh0cmEgZGF0YSBuZWVkZWQgKi8KKwl9OworCitXaXRoIHRoZSBoZWFkZXIgb3V0IG9mIHRoZSB3YXksIHdlIGNhbiBmaWxsIG91dCB0aGUgYXNzZW1ibHkgY29kZS4gIFdoaWxlIHdlCitkaWQgYWxyZWFkeSBjcmVhdGUgYSBtY291bnQoKSBmdW5jdGlvbiBlYXJsaWVyLCBkeW5hbWljIGZ0cmFjZSBvbmx5IHdhbnRzIGEKK3N0dWIgZnVuY3Rpb24uICBUaGlzIGlzIGJlY2F1c2UgdGhlIG1jb3VudCgpIHdpbGwgb25seSBiZSB1c2VkIGR1cmluZyBib290CithbmQgdGhlbiBhbGwgcmVmZXJlbmNlcyB0byBpdCB3aWxsIGJlIHBhdGNoZWQgb3V0IG5ldmVyIHRvIHJldHVybi4gIEluc3RlYWQsCit0aGUgZ3V0cyBvZiB0aGUgb2xkIG1jb3VudCgpIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgZnRyYWNlX2NhbGxlcigpCitmdW5jdGlvbi4gIEJlY2F1c2UgdGhlIHR3byBhcmUgaGFyZCB0byBtZXJnZSwgaXQgd2lsbCBtb3N0IGxpa2VseSBiZSBhIGxvdAorZWFzaWVyIHRvIGhhdmUgdHdvIHNlcGFyYXRlIGRlZmluaXRpb25zIHNwbGl0IHVwIGJ5ICNpZmRlZnMuICBTYW1lIGdvZXMgZm9yCit0aGUgZnRyYWNlX3N0dWIoKSBhcyB0aGF0IHdpbGwgbm93IGJlIGlubGluZWQgaW4gZnRyYWNlX2NhbGxlcigpLgorCitCZWZvcmUgd2UgZ2V0IGNvbmZ1c2VkIGFueW1vcmUsIGxldCdzIGNoZWNrIG91dCBzb21lIHBzZXVkbyBjb2RlIHNvIHlvdSBjYW4KK2ltcGxlbWVudCB5b3VyIG93biBzdHVmZiBpbiBhc3NlbWJseToKKwordm9pZCBtY291bnQodm9pZCkKK3sKKwlyZXR1cm47Cit9CisKK3ZvaWQgZnRyYWNlX2NhbGxlcih2b2lkKQoreworCS8qIGltcGxlbWVudCBIQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUIGlmIHlvdSBkZXNpcmUgKi8KKworCS8qIHNhdmUgYWxsIHN0YXRlIG5lZWRlZCBieSB0aGUgQUJJIChzZWUgcGFyYWdyYXBoIGFib3ZlKSAqLworCisJdW5zaWduZWQgbG9uZyBmcm9tcGMgPSAuLi47CisJdW5zaWduZWQgbG9uZyBzZWxmcGMgPSA8cmV0dXJuIGFkZHJlc3M+IC0gTUNPVU5UX0lOU05fU0laRTsKKworZnRyYWNlX2NhbGw6CisJZnRyYWNlX3N0dWIoZnJvbXBjLCBzZWxmcGMpOworCisJLyogcmVzdG9yZSBhbGwgc3RhdGUgbmVlZGVkIGJ5IHRoZSBBQkkgKi8KKworZnRyYWNlX3N0dWI6CisJcmV0dXJuOworfQorCitUaGlzIG1pZ2h0IGxvb2sgYSBsaXR0bGUgb2RkIGF0IGZpcnN0LCBidXQga2VlcCBpbiBtaW5kIHRoYXQgd2Ugd2lsbCBiZSBydW50aW1lCitwYXRjaGluZyBtdWx0aXBsZSB0aGluZ3MuICBGaXJzdCwgb25seSBmdW5jdGlvbnMgdGhhdCB3ZSBhY3R1YWxseSB3YW50IHRvIHRyYWNlCit3aWxsIGJlIHBhdGNoZWQgdG8gY2FsbCBmdHJhY2VfY2FsbGVyKCkuICBTZWNvbmQsIHNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgdHJhY2VyCithY3RpdmUgYXQgYSB0aW1lLCB3ZSB3aWxsIHBhdGNoIHRoZSBmdHJhY2VfY2FsbGVyKCkgZnVuY3Rpb24gaXRzZWxmIHRvIGNhbGwgdGhlCitzcGVjaWZpYyB0cmFjZXIgaW4gcXVlc3Rpb24uICBUaGF0IGlzIHRoZSBwb2ludCBvZiB0aGUgZnRyYWNlX2NhbGwgbGFiZWwuCisKK1dpdGggdGhhdCBpbiBtaW5kLCBsZXQncyBtb3ZlIG9uIHRvIHRoZSBDIGNvZGUgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGRvaW5nIHRoZQorcnVudGltZSBwYXRjaGluZy4gIFlvdSdsbCBuZWVkIGEgbGl0dGxlIGtub3dsZWRnZSBvZiB5b3VyIGFyY2gncyBvcGNvZGVzIGluCitvcmRlciB0byBtYWtlIGl0IHRocm91Z2ggdGhlIG5leHQgc2VjdGlvbi4KKworRXZlcnkgYXJjaCBoYXMgYW4gaW5pdCBjYWxsYmFjayBmdW5jdGlvbi4gIElmIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyBlYXJseSBvbgordG8gaW5pdGlhbGl6ZSBzb21lIHN0YXRlLCB0aGlzIGlzIHRoZSB0aW1lIHRvIGRvIHRoYXQuICBPdGhlcndpc2UsIHRoaXMgc2ltcGxlCitmdW5jdGlvbiBiZWxvdyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgbW9zdCBwZW9wbGU6CisKK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkvKiByZXR1cm4gdmFsdWUgaXMgZG9uZSBpbmRpcmVjdGx5IHZpYSBkYXRhICovCisJKih1bnNpZ25lZCBsb25nICopZGF0YSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworVGhlcmUgYXJlIHR3byBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCB0byBkbyBydW50aW1lIHBhdGNoaW5nIG9mIGFyYml0cmFyeQorZnVuY3Rpb25zLiAgVGhlIGZpcnN0IGlzIHVzZWQgdG8gdHVybiB0aGUgbWNvdW50IGNhbGwgc2l0ZSBpbnRvIGEgbm9wICh3aGljaAoraXMgd2hhdCBoZWxwcyB1cyByZXRhaW4gcnVudGltZSBwZXJmb3JtYW5jZSB3aGVuIG5vdCB0cmFjaW5nKS4gIFRoZSBzZWNvbmQgaXMKK3VzZWQgdG8gdHVybiB0aGUgbWNvdW50IGNhbGwgc2l0ZSBpbnRvIGEgY2FsbCB0byBhbiBhcmJpdHJhcnkgbG9jYXRpb24gKGJ1dAordHlwaWNhbGx5IHRoYXQgaXMgZnRyYWNlcl9jYWxsZXIoKSkuICBTZWUgdGhlIGdlbmVyYWwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbgorbGludXgvZnRyYWNlLmggZm9yIHRoZSBmdW5jdGlvbnM6CisJZnRyYWNlX21ha2Vfbm9wKCkKKwlmdHJhY2VfbWFrZV9jYWxsKCkKK1RoZSByZWMtPmlwIHZhbHVlIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBtY291bnQgY2FsbCBzaXRlIHRoYXQgd2FzIGNvbGxlY3RlZAorYnkgdGhlIHNjcmlwdHMvcmVjb3JkbWNvdW50LnBsIGR1cmluZyBidWlsZCB0aW1lLgorCitUaGUgbGFzdCBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHJ1bnRpbWUgcGF0Y2hpbmcgb2YgdGhlIGFjdGl2ZSB0cmFjZXIuICBUaGlzCit3aWxsIGJlIG1vZGlmeWluZyB0aGUgYXNzZW1ibHkgY29kZSBhdCB0aGUgbG9jYXRpb24gb2YgdGhlIGZ0cmFjZV9jYWxsIHN5bWJvbAoraW5zaWRlIG9mIHRoZSBmdHJhY2VfY2FsbGVyKCkgZnVuY3Rpb24uICBTbyB5b3Ugc2hvdWxkIGhhdmUgc3VmZmljaWVudCBwYWRkaW5nCithdCB0aGF0IGxvY2F0aW9uIHRvIHN1cHBvcnQgdGhlIG5ldyBmdW5jdGlvbiBjYWxscyB5b3UnbGwgYmUgaW5zZXJ0aW5nLiAgU29tZQorcGVvcGxlIHdpbGwgYmUgdXNpbmcgYSAiY2FsbCIgdHlwZSBpbnN0cnVjdGlvbiB3aGlsZSBvdGhlcnMgd2lsbCBiZSB1c2luZyBhCisiYnJhbmNoIiB0eXBlIGluc3RydWN0aW9uLiAgU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gaXM6CisJZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYygpCisKKworSEFWRV9EWU5BTUlDX0ZUUkFDRSArIEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bmN0aW9uIGdyYXBoZXIgbmVlZHMgYSBmZXcgdHdlYWtzIGluIG9yZGVyIHRvIHdvcmsgd2l0aCBkeW5hbWljIGZ0cmFjZS4KK0Jhc2ljYWxseSwgeW91IHdpbGwgbmVlZCB0bzoKKwktIHVwZGF0ZToKKwkJLSBmdHJhY2VfY2FsbGVyKCkKKwkJLSBmdHJhY2VfZ3JhcGhfY2FsbCgpCisJCS0gZnRyYWNlX2dyYXBoX2NhbGxlcigpCisJLSBpbXBsZW1lbnQ6CisJCS0gZnRyYWNlX2VuYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKCkKKwkJLSBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKCkKIAogPGRldGFpbHMgdG8gYmUgZmlsbGVkPgorUXVpY2sgbm90ZXM6CisJLSBhZGQgYSBub3Agc3R1YiBhZnRlciB0aGUgZnRyYWNlX2NhbGwgbG9jYXRpb24gbmFtZWQgZnRyYWNlX2dyYXBoX2NhbGw7CisJICBzdHViIG5lZWRzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBzdXBwb3J0IGEgY2FsbCB0byBmdHJhY2VfZ3JhcGhfY2FsbGVyKCkKKwktIHVwZGF0ZSBmdHJhY2VfZ3JhcGhfY2FsbGVyKCkgdG8gd29yayB3aXRoIGJlaW5nIGNhbGxlZCBieSB0aGUgbmV3CisJICBmdHJhY2VfY2FsbGVyKCkgc2luY2Ugc29tZSBzZW1hbnRpY3MgbWF5IGhhdmUgY2hhbmdlZAorCS0gZnRyYWNlX2VuYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKCkgd2lsbCBydW50aW1lIHBhdGNoIHRoZQorCSAgZnRyYWNlX2dyYXBoX2NhbGwgbG9jYXRpb24gd2l0aCBhIGNhbGwgdG8gZnRyYWNlX2dyYXBoX2NhbGxlcigpCisJLSBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKCkgd2lsbCBydW50aW1lIHBhdGNoIHRoZQorCSAgZnRyYWNlX2dyYXBoX2NhbGwgbG9jYXRpb24gd2l0aCBub3BzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2ttZW10cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2ttZW10cmFjZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMDg3MzUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rbWVtdHJhY2UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLQkJCWttZW10cmFjZSAtIEtlcm5lbCBNZW1vcnkgVHJhY2VyCi0KLQkJCSAgYnkgRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQotCQkJICAgICA8ZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvPgotCi1JLiBJbnRyb2R1Y3Rpb24KLT09PT09PT09PT09PT09PQotCi1rbWVtdHJhY2UgaGVscHMga2VybmVsIGRldmVsb3BlcnMgZmlndXJlIG91dCB0d28gdGhpbmdzOgotMSkgaG93IGRpZmZlcmVudCBhbGxvY2F0b3JzIChTTEFCLCBTTFVCIGV0Yy4pIHBlcmZvcm0KLTIpIGhvdyBrZXJuZWwgY29kZSBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBob3cgbXVjaAotCi1UbyBkbyB0aGlzLCB3ZSB0cmFjZSBldmVyeSBhbGxvY2F0aW9uIGFuZCBleHBvcnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXJzcGFjZQotdGhyb3VnaCB0aGUgcmVsYXkgaW50ZXJmYWNlLiBXZSBleHBvcnQgdGhpbmdzIHN1Y2ggYXMgdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQKLWJ5dGVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAoaS5lLiBpbmNsdWRpbmcgaW50ZXJuYWwKLWZyYWdtZW50YXRpb24pLCB3aGV0aGVyIHRoaXMgaXMgYSBzbGFiIGFsbG9jYXRpb24gb3IgYSBwbGFpbiBrbWFsbG9jKCkgYW5kIHNvCi1vbi4KLQotVGhlIGFjdHVhbCBhbmFseXNpcyBpcyBwZXJmb3JtZWQgYnkgYSB1c2Vyc3BhY2UgdG9vbCAoc2VlIHNlY3Rpb24gSUlJIGZvcgotZGV0YWlscyBvbiB3aGVyZSB0byBnZXQgaXQgZnJvbSkuIEl0IGxvZ3MgdGhlIGRhdGEgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbCwKLXByb2Nlc3NlcyBpdCBhbmQgKGFzIG9mIHdyaXRpbmcgdGhpcykgY2FuIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKLS0gdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBjYWxsLXNpdGUKLS0gdGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBhbGxvY2F0aW9uCi0tIHRvdGFsIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGZyYWdtZW50YXRpb24gaW4gdGhlIGNvbGxlY3RlZCBkYXRhc2V0Ci0tIG51bWJlciBvZiBjcm9zcy1DUFUgYWxsb2NhdGlvbiBhbmQgZnJlZXMgKG1ha2VzIHNlbnNlIGluIE5VTUEgZW52aXJvbm1lbnRzKQotCi1Nb3Jlb3ZlciwgaXQgY2FuIHBvdGVudGlhbGx5IGZpbmQgaW5jb25zaXN0ZW50IGFuZCBlcnJvbmVvdXMgYmVoYXZpb3IgaW4KLWtlcm5lbCBjb2RlLCBzdWNoIGFzIHVzaW5nIHNsYWIgZnJlZSBmdW5jdGlvbnMgb24ga21hbGxvYydlZCBtZW1vcnkgb3IKLWFsbG9jYXRpbmcgbGVzcyBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQgKGJ1dCBub3QgdHJ1bHkgZmFpbGVkIGFsbG9jYXRpb25zKS4KLQota21lbXRyYWNlIGFsc28gbWFrZXMgcHJvdmlzaW9ucyBmb3IgdHJhY2luZyBvbiBzb21lIGFyY2ggYW5kIGFuYWx5c2luZyB0aGUKLWRhdGEgb24gYW5vdGhlci4KLQotSUkuIERlc2lnbiBhbmQgZ29hbHMKLT09PT09PT09PT09PT09PT09PT09Ci0KLWttZW10cmFjZSB3YXMgZGVzaWduZWQgdG8gaGFuZGxlIHJhdGhlciBsYXJnZSBhbW91bnRzIG9mIGRhdGEuIFRodXMsIGl0IHVzZXMKLXRoZSByZWxheSBpbnRlcmZhY2UgdG8gZXhwb3J0IHdoYXRldmVyIGlzIGxvZ2dlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIHRoZW4KLXN0b3JlcyBpdC4gQW5hbHlzaXMgYW5kIHJlcG9ydGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0aGF0IGlzLCBhZnRlciB0aGUKLWRhdGEgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQuIEJ5IGRlc2lnbiwgaXQgYWxsb3dzIG9uZSB0byBsb2cgYW5kIGFuYWx5c2UKLW9uIGRpZmZlcmVudCBtYWNoaW5lcyBhbmQgZGlmZmVyZW50IGFyY2hlcy4KLQotQXMgb2Ygd3JpdGluZyB0aGlzLCB0aGUgQUJJIGlzIG5vdCBjb25zaWRlcmVkIHN0YWJsZSwgdGhvdWdoIGl0IG1pZ2h0IG5vdAotY2hhbmdlIG11Y2guIEhvd2V2ZXIsIG5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgY29tcGF0aWJpbGl0eSB5ZXQuIFdoZW4KLWRlZW1lZCBzdGFibGUsIHRoZSBBQkkgc2hvdWxkIHN0aWxsIGFsbG93IGVhc3kgZXh0ZW5zaW9uIHdoaWxlIG1haW50YWluaW5nCi1iYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBUaGlzIGlzIGRlc2NyaWJlZCBmdXJ0aGVyIGluIERvY3VtZW50YXRpb24vQUJJLgotCi1TdW1tYXJ5IG9mIGRlc2lnbiBnb2FsczoKLQktIGFsbG93IGxvZ2dpbmcgYW5kIGFuYWx5c2lzIHRvIGJlIGRvbmUgYWNyb3NzIGRpZmZlcmVudCBtYWNoaW5lcwotCS0gYmUgZmFzdCBhbmQgYW50aWNpcGF0ZSB1c2FnZSBpbiBoaWdoLWxvYWQgZW52aXJvbm1lbnRzICgqKQotCS0gYmUgcmVhc29uYWJseSBleHRlbnNpYmxlCi0JLSBtYWtlIGl0IHBvc3NpYmxlIGZvciBHTlUvTGludXggZGlzdHJpYnV0aW9ucyB0byBoYXZlIGttZW10cmFjZQotCWluY2x1ZGVkIGluIHRoZWlyIHJlcG9zaXRvcmllcwotCi0oKikgLSBvbmUgb2YgdGhlIHJlYXNvbnMgUGVra2EgRW5iZXJnJ3Mgb3JpZ2luYWwgdXNlcnNwYWNlIGRhdGEgYW5hbHlzaXMKLSAgICB0b29sJ3MgY29kZSB3YXMgcmV3cml0dGVuIGZyb20gUGVybCB0byBDIChhbHRob3VnaCB0aGlzIGlzIG1vcmUgdGhhbiBhCi0gICAgc2ltcGxlIGNvbnZlcnNpb24pCi0KLQotSUlJLiBRdWljayB1c2FnZSBndWlkZQotPT09PT09PT09PT09PT09PT09PT09PQotCi0xKSBHZXQgYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyBrbWVtdHJhY2UgYW5kIGJ1aWxkIGl0IGFjY29yZGluZ2x5IChpLmUuIGVuYWJsZQotQ09ORklHX0tNRU1UUkFDRSkuCi0KLTIpIEdldCB0aGUgdXNlcnNwYWNlIHRvb2wgYW5kIGJ1aWxkIGl0OgotJCBnaXQgY2xvbmUgZ2l0Oi8vcmVwby5vci5jei9rbWVtdHJhY2UtdXNlci5naXQJCSMgY3VycmVudCByZXBvc2l0b3J5Ci0kIGNkIGttZW10cmFjZS11c2VyLwotJCAuL2F1dG9nZW4uc2gKLSQgLi9jb25maWd1cmUKLSQgbWFrZQotCi0zKSBCb290IHRoZSBrbWVtdHJhY2UtZW5hYmxlZCBrZXJuZWwgaWYgeW91IGhhdmVuJ3QsIHByZWZlcmFibHkgaW4gdGhlCi0nc2luZ2xlJyBydW5sZXZlbCAoc28gdGhhdCByZWxheSBidWZmZXJzIGRvbid0IGZpbGwgdXAgZWFzaWx5KSwgYW5kIHJ1bgota21lbXRyYWNlOgotIyAnJCcgZG9lcyBub3QgbWVhbiB1c2VyLCBidXQgcm9vdCBoZXJlLgotJCBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcKLSQgbW91bnQgLXQgcHJvYyBub25lIC9wcm9jCi0kIGNkIHBhdGgvdG8va21lbXRyYWNlLXVzZXIvCi0kIC4va21lbXRyYWNlZAotV2FpdCBhIGJpdCwgdGhlbiBzdG9wIGl0IHdpdGggQ1RSTCtDLgotJCBjYXQgL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlL3RvdGFsX292ZXJydW5zCSMgQ2hlY2sgaWYgd2UgZGlkbid0Ci0JCQkJCQkJIyBvdmVycnVuLCBzaG91bGQKLQkJCQkJCQkjIGJlIHplcm8uCi0kIChPcHRpb25hbGx5KSBbUnVuIGttZW10cmFjZV9jaGVjayBzZXBhcmF0ZWx5IG9uIGVhY2ggY3B1WzAtOV0qLm91dCBmaWxlIHRvCi0JCWNoZWNrIGl0cyBjb3JyZWN0bmVzc10KLSQgLi9rbWVtdHJhY2UtcmVwb3J0Ci0KLU5vdyB5b3Ugc2hvdWxkIGhhdmUgYSBuaWNlIGFuZCBzaG9ydCBzdW1tYXJ5IG9mIGhvdyB0aGUgYWxsb2NhdG9yIHBlcmZvcm1zLgotCi1JVi4gRkFRIGFuZCBrbm93biBpc3N1ZXMKLT09PT09PT09PT09PT09PT09PT09PT09PQotCi1ROiAnY2F0IC9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS90b3RhbF9vdmVycnVucycgaXMgbm9uLXplcm8sIGhvdyBkbyBJIGZpeAotdGhpcz8gU2hvdWxkIEkgd29ycnk/Ci1BOiBJZiBpdCdzIG5vbi16ZXJvLCB0aGlzIGFmZmVjdHMga21lbXRyYWNlJ3MgYWNjdXJhY3ksIGRlcGVuZGluZyBvbiBob3cKLWxhcmdlIHRoZSBudW1iZXIgaXMuIFlvdSBjYW4gZml4IGl0IGJ5IHN1cHBseWluZyBhIGhpZ2hlcgotJ2ttZW10cmFjZS5zdWJidWZzPU4nIGtlcm5lbCBwYXJhbWV0ZXIuCi0tLS0KLQotUToga21lbXRyYWNlX2NoZWNrIHJlcG9ydHMgZXJyb3JzLCBob3cgZG8gSSBmaXggdGhpcz8gU2hvdWxkIEkgd29ycnk/Ci1BOiBUaGlzIGlzIGEgYnVnIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQuIEl0IGNhbiBvY2N1ciBmb3IgYSB2YXJpZXR5IG9mCi1yZWFzb25zOgotCS0gcG9zc2libGUgYnVncyBpbiByZWxheSBjb2RlCi0JLSBwb3NzaWJsZSBtaXN1c2Ugb2YgcmVsYXkgYnkga21lbXRyYWNlCi0JLSB0aW1lc3RhbXBzIGJlaW5nIGNvbGxlY3RlZCB1bm9yZGVybHkKLU9yIHlvdSBtYXkgZml4IGl0IHlvdXJzZWxmIGFuZCBzZW5kIHVzIGEgcGF0Y2guCi0tLS0KLQotUToga21lbXRyYWNlX3JlcG9ydCBzaG93cyBtYW55IGVycm9ycywgaG93IGRvIEkgZml4IHRoaXM/IFNob3VsZCBJIHdvcnJ5PwotQTogVGhpcyBpcyBhIGtub3duIGlzc3VlIGFuZCBJJ20gd29ya2luZyBvbiBpdC4gVGhlc2UgbWlnaHQgYmUgdHJ1ZSBlcnJvcnMKLWluIGtlcm5lbCBjb2RlLCB3aGljaCBtYXkgaGF2ZSBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgKGUuZy4gYWxsb2NhdGluZyBtZW1vcnkKLXdpdGgga21lbV9jYWNoZV9hbGxvYygpIGFuZCBmcmVlaW5nIGl0IHdpdGgga2ZyZWUoKSkuIFBla2thIEVuYmVyZyBwb2ludGVkCi1vdXQgdGhpcyBiZWhhdmlvciBtYXkgd29yayB3aXRoIFNMQUIsIGJ1dCBtYXkgZmFpbCB3aXRoIG90aGVyIGFsbG9jYXRvcnMuCi0KLUl0IG1heSBhbHNvIGJlIGR1ZSB0byBsYWNrIG9mIHRyYWNpbmcgaW4gc29tZSB1bnVzdWFsIGFsbG9jYXRvciBmdW5jdGlvbnMuCi0KLVdlIGRvbid0IHdhbnQgYnVnIHJlcG9ydHMgcmVnYXJkaW5nIHRoaXMgaXNzdWUgeWV0LgotLS0tCi0KLVYuIFNlZSBhbHNvCi09PT09PT09PT09PQotCi1Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAotRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0CmluZGV4IGVjOTQ3NDguLjVmNzdkOTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Uva3Byb2JldHJhY2UudHh0CkBAIC00Miw3ICs0Miw3IEBACiAgICt8LW9mZnMoRkVUQ0hBUkcpIDogRmV0Y2ggbWVtb3J5IGF0IEZFVENIQVJHICt8LSBvZmZzIGFkZHJlc3MuKCoqKQogICBOQU1FPUZFVENIQVJHIDogU2V0IE5BTUUgYXMgdGhlIGFyZ3VtZW50IG5hbWUgb2YgRkVUQ0hBUkcuCiAgIEZFVENIQVJHOlRZUEUgOiBTZXQgVFlQRSBhcyB0aGUgdHlwZSBvZiBGRVRDSEFSRy4gQ3VycmVudGx5LCBiYXNpYyB0eXBlcwotCQkgICh1OC91MTYvdTMyL3U2NC9zOC9zMTYvczMyL3M2NCkgYXJlIHN1cHBvcnRlZC4KKwkJICAodTgvdTE2L3UzMi91NjQvczgvczE2L3MzMi9zNjQpIGFuZCBzdHJpbmcgYXJlIHN1cHBvcnRlZC4KIAogICAoKikgb25seSBmb3IgcmV0dXJuIHByb2JlLgogICAoKiopIHRoaXMgaXMgdXNlZnVsIGZvciBmZXRjaGluZyBhIGZpZWxkIG9mIGRhdGEgc3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI1NTE0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsCkBAIC0wLDAgKzEsNjg2IEBACisjIS91c3IvYmluL3BlcmwKKyMgVGhpcyBpcyBhIFBPQyBmb3IgcmVhZGluZyB0aGUgdGV4dCByZXByZXNlbnRhdGlvbiBvZiB0cmFjZSBvdXRwdXQgcmVsYXRlZCB0bworIyBwYWdlIHJlY2xhaW0uIEl0IG1ha2VzIGFuIGF0dGVtcHQgdG8gZXh0cmFjdCBzb21lIGhpZ2gtbGV2ZWwgaW5mb3JtYXRpb24gb24KKyMgd2hhdCBpcyBnb2luZyBvbi4gVGhlIGFjY3VyYWN5IG9mIHRoZSBwYXJzZXIgbWF5IHZhcnkKKyMKKyMgRXhhbXBsZSB1c2FnZTogdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsIDwgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9waXBlCisjIG90aGVyIG9wdGlvbnMKKyMgICAtLXJlYWQtcHJvY3N0YXQJSWYgdGhlIHRyYWNlIGxhY2tzIHByb2Nlc3MgaW5mbywgZ2V0IGl0IGZyb20gL3Byb2MKKyMgICAtLWlnbm9yZS1waWQJQWdncmVnYXRlIHByb2Nlc3NlcyBvZiB0aGUgc2FtZSBuYW1lIHRvZ2V0aGVyCisjCisjIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uIDIwMDkKKyMgQXV0aG9yOiBNZWwgR29ybWFuIDxtZWxAY3NuLnVsLmllPgordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyMgVHJhY2Vwb2ludCBldmVudHMKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU4JPT4gMTsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fRU5ECT0+IDI7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX0tTV0FQRF9XQUtFCQk9PiAzOwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9LU1dBUERfU0xFRVAJCT0+IDQ7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX0xSVV9TSFJJTktfQUNUSVZFCT0+IDU7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX0xSVV9TSFJJTktfSU5BQ1RJVkUJPT4gNjsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fTFJVX0lTT0xBVEUJCT0+IDc7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX1NZTkMJPT4gODsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQwk9PiA5OwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQwk9PiAxMDsKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fQVNZTkMJPT4gMTE7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX1dSSVRFUEFHRV9BU1lOQwkJPT4gMTI7Cit1c2UgY29uc3RhbnQgRVZFTlRfVU5LTk9XTgkJCT0+IDEzOworCisjIFBlci1vcmRlciBldmVudHMKK3VzZSBjb25zdGFudCBNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU5fUEVST1JERVIgPT4gMTE7Cit1c2UgY29uc3RhbnQgTU1fVk1TQ0FOX1dBS0VVUF9LU1dBUERfUEVST1JERVIgCT0+IDEyOwordXNlIGNvbnN0YW50IE1NX1ZNU0NBTl9LU1dBUERfV0FLRV9QRVJPUkRFUgk9PiAxMzsKK3VzZSBjb25zdGFudCBISUdIX0tTV0FQRF9SRVdBS0VVUF9QRVJPUkRFUgk9PiAxNDsKKworIyBDb25zdGFudHMgdXNlZCB0byB0cmFjayBzdGF0ZQordXNlIGNvbnN0YW50IFNUQVRFX0RJUkVDVF9CRUdJTiAJCT0+IDE1OwordXNlIGNvbnN0YW50IFNUQVRFX0RJUkVDVF9PUkRFUiAJCT0+IDE2OwordXNlIGNvbnN0YW50IFNUQVRFX0tTV0FQRF9CRUdJTgkJCT0+IDE3OwordXNlIGNvbnN0YW50IFNUQVRFX0tTV0FQRF9PUkRFUgkJCT0+IDE4OworCisjIEhpZ2gtbGV2ZWwgZXZlbnRzIGV4dHJhcG9sYXRlZCBmcm9tIHRyYWNlcG9pbnRzCit1c2UgY29uc3RhbnQgSElHSF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZCT0+IDE5OwordXNlIGNvbnN0YW50IEhJR0hfS1NXQVBEX0xBVEVOQ1kJCT0+IDIwOwordXNlIGNvbnN0YW50IEhJR0hfS1NXQVBEX1JFV0FLRVVQCQk9PiAyMTsKK3VzZSBjb25zdGFudCBISUdIX05SX1NDQU5ORUQJCQk9PiAyMjsKK3VzZSBjb25zdGFudCBISUdIX05SX1RBS0VOCQkJPT4gMjM7Cit1c2UgY29uc3RhbnQgSElHSF9OUl9SRUNMQUlNCQkJPT4gMjQ7Cit1c2UgY29uc3RhbnQgSElHSF9OUl9DT05USUdfRElSVFkJCT0+IDI1OworCitteSAlcGVycHJvY2Vzc3BpZDsKK215ICVwZXJwcm9jZXNzOworbXkgJWxhc3RfcHJvY21hcDsKK215ICRvcHRfaWdub3JlcGlkOworbXkgJG9wdF9yZWFkX3Byb2NzdGF0OworCitteSAkdG90YWxfd2FrZXVwX2tzd2FwZDsKK215ICgkdG90YWxfZGlyZWN0X3JlY2xhaW0sICR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCk7CitteSAoJHRvdGFsX2RpcmVjdF9sYXRlbmN5LCAkdG90YWxfa3N3YXBkX2xhdGVuY3kpOworbXkgKCR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdlX2ZpbGVfc3luYywgJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfZmlsZV9hc3luYyk7CitteSAoJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9zeW5jLCAkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX2FzeW5jKTsKK215ICgkdG90YWxfa3N3YXBkX25yX3NjYW5uZWQsICR0b3RhbF9rc3dhcGRfd2FrZSk7CitteSAoJHRvdGFsX2tzd2FwZF93cml0ZXBhZ2VfZmlsZV9zeW5jLCAkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9maWxlX2FzeW5jKTsKK215ICgkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9hbm9uX3N5bmMsICR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fYXN5bmMpOworCisjIENhdGNoIHNpZ2ludCBhbmQgZXhpdCBvbiByZXF1ZXN0CitteSAkc2lnaW50X3JlcG9ydCA9IDA7CitteSAkc2lnaW50X2V4aXQgPSAwOworbXkgJHNpZ2ludF9wZW5kaW5nID0gMDsKK215ICRzaWdpbnRfcmVjZWl2ZWQgPSAwOworc3ViIHNpZ2ludF9oYW5kbGVyIHsKKwlteSAkY3VycmVudF90aW1lID0gdGltZTsKKwlpZiAoJGN1cnJlbnRfdGltZSAtIDIgPiAkc2lnaW50X3JlY2VpdmVkKSB7CisJCXByaW50ICJTSUdJTlQgcmVjZWl2ZWQsIHJlcG9ydCBwZW5kaW5nLiBIaXQgY3RybC1jIGFnYWluIHRvIGV4aXRcbiI7CisJCSRzaWdpbnRfcmVwb3J0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAoISRzaWdpbnRfZXhpdCkgeworCQkJcHJpbnQgIlNlY29uZCBTSUdJTlQgcmVjZWl2ZWQgcXVpY2tseSwgZXhpdGluZ1xuIjsKKwkJfQorCQkkc2lnaW50X2V4aXQrKzsKKwl9CisKKwlpZiAoJHNpZ2ludF9leGl0ID4gMykgeworCQlwcmludCAiTWFueSBTSUdJTlRzIHJlY2VpdmVkLCBleGl0aW5nIG5vdyB3aXRob3V0IHJlcG9ydFxuIjsKKwkJZXhpdDsKKwl9CisKKwkkc2lnaW50X3JlY2VpdmVkID0gJGN1cnJlbnRfdGltZTsKKwkkc2lnaW50X3BlbmRpbmcgPSAxOworfQorJFNJR3tJTlR9ID0gInNpZ2ludF9oYW5kbGVyIjsKKworIyBQYXJzZSBjb21tYW5kIGxpbmUgb3B0aW9ucworR2V0T3B0aW9ucygKKwknaWdub3JlLXBpZCcJID0+CVwkb3B0X2lnbm9yZXBpZCwKKwkncmVhZC1wcm9jc3RhdCcJID0+CVwkb3B0X3JlYWRfcHJvY3N0YXQsCispOworCisjIERlZmF1bHRzIGZvciBkeW5hbWljYWxseSBkaXNjb3ZlcmVkIHJlZ2V4J3MKK215ICRyZWdleF9kaXJlY3RfYmVnaW5fZGVmYXVsdCA9ICdvcmRlcj0oWzAtOV0qKSBtYXlfd3JpdGVwYWdlPShbMC05XSopIGdmcF9mbGFncz0oW0EtWl98XSopJzsKK215ICRyZWdleF9kaXJlY3RfZW5kX2RlZmF1bHQgPSAnbnJfcmVjbGFpbWVkPShbMC05XSopJzsKK215ICRyZWdleF9rc3dhcGRfd2FrZV9kZWZhdWx0ID0gJ25pZD0oWzAtOV0qKSBvcmRlcj0oWzAtOV0qKSc7CitteSAkcmVnZXhfa3N3YXBkX3NsZWVwX2RlZmF1bHQgPSAnbmlkPShbMC05XSopJzsKK215ICRyZWdleF93YWtldXBfa3N3YXBkX2RlZmF1bHQgPSAnbmlkPShbMC05XSopIHppZD0oWzAtOV0qKSBvcmRlcj0oWzAtOV0qKSc7CitteSAkcmVnZXhfbHJ1X2lzb2xhdGVfZGVmYXVsdCA9ICdpc29sYXRlX21vZGU9KFswLTldKikgb3JkZXI9KFswLTldKikgbnJfcmVxdWVzdGVkPShbMC05XSopIG5yX3NjYW5uZWQ9KFswLTldKikgbnJfdGFrZW49KFswLTldKikgY29udGlnX3Rha2VuPShbMC05XSopIGNvbnRpZ19kaXJ0eT0oWzAtOV0qKSBjb250aWdfZmFpbGVkPShbMC05XSopJzsKK215ICRyZWdleF9scnVfc2hyaW5rX2luYWN0aXZlX2RlZmF1bHQgPSAnbHJ1PShbQS1aX10qKSBucl9zY2FubmVkPShbMC05XSopIG5yX3JlY2xhaW1lZD0oWzAtOV0qKSBwcmlvcml0eT0oWzAtOV0qKSc7CitteSAkcmVnZXhfbHJ1X3Nocmlua19hY3RpdmVfZGVmYXVsdCA9ICdscnU9KFtBLVpfXSopIG5yX3NjYW5uZWQ9KFswLTldKikgbnJfcm90YXRlZD0oWzAtOV0qKSBwcmlvcml0eT0oWzAtOV0qKSc7CitteSAkcmVnZXhfd3JpdGVwYWdlX2RlZmF1bHQgPSAncGFnZT0oWzAtOWEtZl0qKSBwZm49KFswLTldKikgZmxhZ3M9KFtBLVpffF0qKSc7CisKKyMgRHlhbmljYWxseSBkaXNjb3ZlcmVkIHJlZ2V4CitteSAkcmVnZXhfZGlyZWN0X2JlZ2luOworbXkgJHJlZ2V4X2RpcmVjdF9lbmQ7CitteSAkcmVnZXhfa3N3YXBkX3dha2U7CitteSAkcmVnZXhfa3N3YXBkX3NsZWVwOworbXkgJHJlZ2V4X3dha2V1cF9rc3dhcGQ7CitteSAkcmVnZXhfbHJ1X2lzb2xhdGU7CitteSAkcmVnZXhfbHJ1X3Nocmlua19pbmFjdGl2ZTsKK215ICRyZWdleF9scnVfc2hyaW5rX2FjdGl2ZTsKK215ICRyZWdleF93cml0ZXBhZ2U7CisKKyMgU3RhdGljIHJlZ2V4IHVzZWQuIFNwZWNpZmllZCBsaWtlIHRoaXMgZm9yIHJlYWRhYmlsaXR5IGFuZCBmb3IgdXNlIHdpdGggL28KKyMgICAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3NfcGlkKSAgICAgKGNwdXMgICAgICApICAgKCB0aW1lICApICAgKHRwb2ludCAgICApIChkZXRhaWxzKQorbXkgJHJlZ2V4X3RyYWNlZXZlbnQgPSAnXHMqKFthLXpBLVowLTktXSopXHMqKFxbWzAtOV0qXF0pXHMqKFswLTkuXSopOlxzKihbYS16QS1aX10qKTpccyooLiopJzsKK215ICRyZWdleF9zdGF0bmFtZSA9ICdbLTAtOV0qXHNcKCguKilcKS4qJzsKK215ICRyZWdleF9zdGF0cHBpZCA9ICdbLTAtOV0qXHNcKC4qXClcc1tBLVphLXpdXHMoWzAtOV0qKS4qJzsKKworc3ViIGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXggeworCW15ICRldmVudCA9IHNoaWZ0OworCW15ICRkZWZhdWx0ID0gc2hpZnQ7CisJbXkgJHJlZ2V4OworCisJIyBSZWFkIHRoZSBldmVudCBmb3JtYXQgb3IgdXNlIHRoZSBkZWZhdWx0CisJaWYgKCFvcGVuIChGT1JNQVQsICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy8kZXZlbnQvZm9ybWF0IikpIHsKKwkJcHJpbnQoIldBUk5JTkc6IEV2ZW50ICRldmVudCBmb3JtYXQgc3RyaW5nIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAkZGVmYXVsdDsKKwl9IGVsc2UgeworCQlteSAkbGluZTsKKwkJd2hpbGUgKCFlb2YoRk9STUFUKSkgeworCQkJJGxpbmUgPSA8Rk9STUFUPjsKKwkJCSRsaW5lID1+IHMvLCBSRUMtPi4qLy87CisJCQlpZiAoJGxpbmUgPX4gL15wcmludCBmbXQ6XHMiKC4qKSIuKi8pIHsKKwkJCQkkcmVnZXggPSAkMTsKKwkJCQkkcmVnZXggPX4gcy8lcy9cKFswLTlhLXpBLVp8X10qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lcC9cKFswLTlhLWZdKlwpL2c7CisJCQkJJHJlZ2V4ID1+IHMvJWQvXChbLTAtOV0qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lbGQvXChbLTAtOV0qXCkvZzsKKwkJCQkkcmVnZXggPX4gcy8lbHUvXChbMC05XSpcKS9nOworCQkJfQorCQl9CisJfQorCisJIyBDYW4ndCBoYW5kbGUgdGhlIHByaW50X2ZsYWdzIHN0dWZmIGJ1dCBpbiB0aGUgY29udGV4dCBvZiB0aGlzCisJIyBzY3JpcHQsIGl0IHJlYWxseSBkb2Vzbid0IG1hdHRlcgorCSRyZWdleCA9fiBzL1woUkVDLipcKSBcPyBfX3ByaW50X2ZsYWdzLiovLzsKKworCSMgVmVyaWZ5IGZpZWxkcyBhcmUgaW4gdGhlIHJpZ2h0IG9yZGVyCisJbXkgJHR1cGxlOworCWZvcmVhY2ggJHR1cGxlIChzcGxpdCAvXHMvLCAkcmVnZXgpIHsKKwkJbXkgKCRrZXksICR2YWx1ZSkgPSBzcGxpdCgvPS8sICR0dXBsZSk7CisJCW15ICRleHBlY3RlZCA9IHNoaWZ0OworCQlpZiAoJGtleSBuZSAkZXhwZWN0ZWQpIHsKKwkJCXByaW50KCJXQVJOSU5HOiBGb3JtYXQgbm90IGFzIGV4cGVjdGVkIGZvciBldmVudCAkZXZlbnQgJyRrZXknICE9ICckZXhwZWN0ZWQnXG4iKTsKKwkJCSRyZWdleCA9fiBzLyRrZXk9XCgoLiopXCkvJGtleT0kMS87CisJCX0KKwl9CisKKwlpZiAoZGVmaW5lZCBzaGlmdCkgeworCQlkaWUoIkZld2VyIGZpZWxkcyB0aGFuIGV4cGVjdGVkIGluIGZvcm1hdCIpOworCX0KKworCXJldHVybiAkcmVnZXg7Cit9CisKKyRyZWdleF9kaXJlY3RfYmVnaW4gPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW4iLAorCQkJJHJlZ2V4X2RpcmVjdF9iZWdpbl9kZWZhdWx0LAorCQkJIm9yZGVyIiwgIm1heV93cml0ZXBhZ2UiLAorCQkJImdmcF9mbGFncyIpOworJHJlZ2V4X2RpcmVjdF9lbmQgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9tbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kIiwKKwkJCSRyZWdleF9kaXJlY3RfZW5kX2RlZmF1bHQsCisJCQkibnJfcmVjbGFpbWVkIik7CiskcmVnZXhfa3N3YXBkX3dha2UgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9tbV92bXNjYW5fa3N3YXBkX3dha2UiLAorCQkJJHJlZ2V4X2tzd2FwZF93YWtlX2RlZmF1bHQsCisJCQkibmlkIiwgIm9yZGVyIik7CiskcmVnZXhfa3N3YXBkX3NsZWVwID0gZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleCgKKwkJCSJ2bXNjYW4vbW1fdm1zY2FuX2tzd2FwZF9zbGVlcCIsCisJCQkkcmVnZXhfa3N3YXBkX3NsZWVwX2RlZmF1bHQsCisJCQkibmlkIik7CiskcmVnZXhfd2FrZXVwX2tzd2FwZCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2FuL21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkIiwKKwkJCSRyZWdleF93YWtldXBfa3N3YXBkX2RlZmF1bHQsCisJCQkibmlkIiwgInppZCIsICJvcmRlciIpOworJHJlZ2V4X2xydV9pc29sYXRlID0gZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleCgKKwkJCSJ2bXNjYW4vbW1fdm1zY2FuX2xydV9pc29sYXRlIiwKKwkJCSRyZWdleF9scnVfaXNvbGF0ZV9kZWZhdWx0LAorCQkJImlzb2xhdGVfbW9kZSIsICJvcmRlciIsCisJCQkibnJfcmVxdWVzdGVkIiwgIm5yX3NjYW5uZWQiLCAibnJfdGFrZW4iLAorCQkJImNvbnRpZ190YWtlbiIsICJjb250aWdfZGlydHkiLCAiY29udGlnX2ZhaWxlZCIpOworJHJlZ2V4X2xydV9zaHJpbmtfaW5hY3RpdmUgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KAorCQkJInZtc2Nhbi9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZSIsCisJCQkkcmVnZXhfbHJ1X3Nocmlua19pbmFjdGl2ZV9kZWZhdWx0LAorCQkJIm5pZCIsICJ6aWQiLAorCQkJImxydSIsCisJCQkibnJfc2Nhbm5lZCIsICJucl9yZWNsYWltZWQiLCAicHJpb3JpdHkiKTsKKyRyZWdleF9scnVfc2hyaW5rX2FjdGl2ZSA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2FuL21tX3Ztc2Nhbl9scnVfc2hyaW5rX2FjdGl2ZSIsCisJCQkkcmVnZXhfbHJ1X3Nocmlua19hY3RpdmVfZGVmYXVsdCwKKwkJCSJuaWQiLCAiemlkIiwKKwkJCSJscnUiLAorCQkJIm5yX3NjYW5uZWQiLCAibnJfcm90YXRlZCIsICJwcmlvcml0eSIpOworJHJlZ2V4X3dyaXRlcGFnZSA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoCisJCQkidm1zY2FuL21tX3Ztc2Nhbl93cml0ZXBhZ2UiLAorCQkJJHJlZ2V4X3dyaXRlcGFnZV9kZWZhdWx0LAorCQkJInBhZ2UiLCAicGZuIiwgImZsYWdzIik7CisKK3N1YiByZWFkX3N0YXRsaW5lKCQpIHsKKwlteSAkcGlkID0gJF9bMF07CisJbXkgJHN0YXRsaW5lOworCisJaWYgKG9wZW4oU1RBVCwgIi9wcm9jLyRwaWQvc3RhdCIpKSB7CisJCSRzdGF0bGluZSA9IDxTVEFUPjsKKwkJY2xvc2UoU1RBVCk7CisJfQorCisJaWYgKCRzdGF0bGluZSBlcSAnJykgeworCQkkc3RhdGxpbmUgPSAiLTEgKFVOS05PV05fUFJPQ0VTU19OQU1FKSBSIDAiOworCX0KKworCXJldHVybiAkc3RhdGxpbmU7Cit9CisKK3N1YiBndWVzc19wcm9jZXNzX3BpZCgkJCkgeworCW15ICRwaWQgPSAkX1swXTsKKwlteSAkc3RhdGxpbmUgPSAkX1sxXTsKKworCWlmICgkcGlkID09IDApIHsKKwkJcmV0dXJuICJzd2FwcGVyLTAiOworCX0KKworCWlmICgkc3RhdGxpbmUgIX4gLyRyZWdleF9zdGF0bmFtZS9vKSB7CisJCWRpZSgiRmFpbGVkIHRvIG1hdGggc3RhdCBsaW5lIGZvciBwcm9jZXNzIG5hbWUgOjogJHN0YXRsaW5lIik7CisJfQorCXJldHVybiAiJDEtJHBpZCI7Cit9CisKKyMgQ29udmVydCBzZWMudXNlYyB0aW1lc3RhbXAgZm9ybWF0CitzdWIgdGltZXN0YW1wX3RvX21zKCQpIHsKKwlteSAkdGltZXN0YW1wID0gJF9bMF07CisKKwlteSAoJHNlYywgJHVzZWMpID0gc3BsaXQgKC9cLi8sICR0aW1lc3RhbXApOworCXJldHVybiAoJHNlYyAqIDEwMDApICsgKCR1c2VjIC8gMTAwMCk7Cit9CisKK3N1YiBwcm9jZXNzX2V2ZW50cyB7CisJbXkgJHRyYWNlZXZlbnQ7CisJbXkgJHByb2Nlc3NfcGlkOworCW15ICRjcHVzOworCW15ICR0aW1lc3RhbXA7CisJbXkgJHRyYWNlcG9pbnQ7CisJbXkgJGRldGFpbHM7CisJbXkgJHN0YXRsaW5lOworCisJIyBSZWFkIGVhY2ggbGluZSBvZiB0aGUgZXZlbnQgbG9nCitFVkVOVF9QUk9DRVNTOgorCXdoaWxlICgkdHJhY2VldmVudCA9IDxTVERJTj4pIHsKKwkJaWYgKCR0cmFjZWV2ZW50ID1+IC8kcmVnZXhfdHJhY2VldmVudC9vKSB7CisJCQkkcHJvY2Vzc19waWQgPSAkMTsKKwkJCSR0aW1lc3RhbXAgPSAkMzsKKwkJCSR0cmFjZXBvaW50ID0gJDQ7CisKKwkJCSRwcm9jZXNzX3BpZCA9fiAvKC4qKS0oWzAtOV0qKSQvOworCQkJbXkgJHByb2Nlc3MgPSAkMTsKKwkJCW15ICRwaWQgPSAkMjsKKworCQkJaWYgKCRwcm9jZXNzIGVxICIiKSB7CisJCQkJJHByb2Nlc3MgPSAkbGFzdF9wcm9jbWFweyRwaWR9OworCQkJCSRwcm9jZXNzX3BpZCA9ICIkcHJvY2Vzcy0kcGlkIjsKKwkJCX0KKwkJCSRsYXN0X3Byb2NtYXB7JHBpZH0gPSAkcHJvY2VzczsKKworCQkJaWYgKCRvcHRfcmVhZF9wcm9jc3RhdCkgeworCQkJCSRzdGF0bGluZSA9IHJlYWRfc3RhdGxpbmUoJHBpZCk7CisJCQkJaWYgKCRvcHRfcmVhZF9wcm9jc3RhdCAmJiAkcHJvY2VzcyBlcSAnJykgeworCQkJCQkkcHJvY2Vzc19waWQgPSBndWVzc19wcm9jZXNzX3BpZCgkcGlkLCAkc3RhdGxpbmUpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5leHQ7CisJCX0KKworCQkjIFBlcmwgU3dpdGNoKCkgc3Vja3MgbWFqb3JseQorCQlpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiIpIHsKKwkJCSR0aW1lc3RhbXAgPSB0aW1lc3RhbXBfdG9fbXMoJHRpbWVzdGFtcCk7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOfSsrOworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0RJUkVDVF9CRUdJTn0gPSAkdGltZXN0YW1wOworCisJCQkkZGV0YWlscyA9ICQ1OworCQkJaWYgKCRkZXRhaWxzICF+IC8kcmVnZXhfZGlyZWN0X2JlZ2luL28pIHsKKwkJCQlwcmludCAiV0FSTklORzogRmFpbGVkIHRvIHBhcnNlIG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbiBhcyBleHBlY3RlZFxuIjsKKwkJCQlwcmludCAiICAgICAgICAgJGRldGFpbHNcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRyZWdleF9kaXJlY3RfYmVnaW5cbiI7CisJCQkJbmV4dDsKKwkJCX0KKwkJCW15ICRvcmRlciA9ICQxOworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTl9QRVJPUkRFUn1bJG9yZGVyXSsrOworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0RJUkVDVF9PUkRFUn0gPSAkb3JkZXI7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kIikgeworCQkJIyBDb3VudCB0aGUgZXZlbnQgaXRzZWxmCisJCQlteSAkaW5kZXggPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0VORH07CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0VORH0rKzsKKworCQkJIyBSZWNvcmQgaG93IGxvbmcgZGlyZWN0IHJlY2xhaW0gdG9vayB0aGlzIHRpbWUKKwkJCWlmIChkZWZpbmVkICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9ESVJFQ1RfQkVHSU59KSB7CisJCQkJJHRpbWVzdGFtcCA9IHRpbWVzdGFtcF90b19tcygkdGltZXN0YW1wKTsKKwkJCQlteSAkb3JkZXIgPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfRElSRUNUX09SREVSfTsKKwkJCQlteSAkbGF0ZW5jeSA9ICgkdGltZXN0YW1wIC0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0RJUkVDVF9CRUdJTn0pOworCQkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WyRpbmRleF0gPSAiJG9yZGVyLSRsYXRlbmN5IjsKKwkJCX0KKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3Ztc2Nhbl9rc3dhcGRfd2FrZSIpIHsKKwkJCSRkZXRhaWxzID0gJDU7CisJCQlpZiAoJGRldGFpbHMgIX4gLyRyZWdleF9rc3dhcGRfd2FrZS9vKSB7CisJCQkJcHJpbnQgIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBtbV92bXNjYW5fa3N3YXBkX3dha2UgYXMgZXhwZWN0ZWRcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRkZXRhaWxzXG4iOworCQkJCXByaW50ICIgICAgICAgICAkcmVnZXhfa3N3YXBkX3dha2VcbiI7CisJCQkJbmV4dDsKKwkJCX0KKworCQkJbXkgJG9yZGVyID0gJDI7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfS1NXQVBEX09SREVSfSA9ICRvcmRlcjsKKwkJCWlmICghJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0tTV0FQRF9CRUdJTn0pIHsKKwkJCQkkdGltZXN0YW1wID0gdGltZXN0YW1wX3RvX21zKCR0aW1lc3RhbXApOworCQkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9Kys7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e1NUQVRFX0tTV0FQRF9CRUdJTn0gPSAkdGltZXN0YW1wOworCQkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0VfUEVST1JERVJ9WyRvcmRlcl0rKzsKKwkJCX0gZWxzZSB7CisJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX1JFV0FLRVVQfSsrOworCQkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9SRVdBS0VVUF9QRVJPUkRFUn1bJG9yZGVyXSsrOworCQkJfQorCQl9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSAibW1fdm1zY2FuX2tzd2FwZF9zbGVlcCIpIHsKKworCQkJIyBDb3VudCB0aGUgZXZlbnQgaXRzZWxmCisJCQlteSAkaW5kZXggPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0tTV0FQRF9TTEVFUH07CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0tTV0FQRF9TTEVFUH0rKzsKKworCQkJIyBSZWNvcmQgaG93IGxvbmcga3N3YXBkIHdhcyBhd2FrZQorCQkJJHRpbWVzdGFtcCA9IHRpbWVzdGFtcF90b19tcygkdGltZXN0YW1wKTsKKwkJCW15ICRvcmRlciA9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9LU1dBUERfT1JERVJ9OworCQkJbXkgJGxhdGVuY3kgPSAoJHRpbWVzdGFtcCAtICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntTVEFURV9LU1dBUERfQkVHSU59KTsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9MQVRFTkNZfVskaW5kZXhdID0gIiRvcmRlci0kbGF0ZW5jeSI7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57U1RBVEVfS1NXQVBEX0JFR0lOfSA9IDA7CisJCX0gZWxzaWYgKCR0cmFjZXBvaW50IGVxICJtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCIpIHsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0rKzsKKworCQkJJGRldGFpbHMgPSAkNTsKKwkJCWlmICgkZGV0YWlscyAhfiAvJHJlZ2V4X3dha2V1cF9rc3dhcGQvbykgeworCQkJCXByaW50ICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQgYXMgZXhwZWN0ZWRcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRkZXRhaWxzXG4iOworCQkJCXByaW50ICIgICAgICAgICAkcmVnZXhfd2FrZXVwX2tzd2FwZFxuIjsKKwkJCQluZXh0OworCQkJfQorCQkJbXkgJG9yZGVyID0gJDM7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUERfUEVST1JERVJ9WyRvcmRlcl0rKzsKKwkJfSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgIm1tX3Ztc2Nhbl9scnVfaXNvbGF0ZSIpIHsKKwkJCSRkZXRhaWxzID0gJDU7CisJCQlpZiAoJGRldGFpbHMgIX4gLyRyZWdleF9scnVfaXNvbGF0ZS9vKSB7CisJCQkJcHJpbnQgIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBtbV92bXNjYW5fbHJ1X2lzb2xhdGUgYXMgZXhwZWN0ZWRcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRkZXRhaWxzXG4iOworCQkJCXByaW50ICIgICAgICAgICAkcmVnZXhfbHJ1X2lzb2xhdGUvb1xuIjsKKwkJCQluZXh0OworCQkJfQorCQkJbXkgJG5yX3NjYW5uZWQgPSAkNDsKKwkJCW15ICRucl9jb250aWdfZGlydHkgPSAkNzsKKwkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX05SX1NDQU5ORUR9ICs9ICRucl9zY2FubmVkOworCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfQ09OVElHX0RJUlRZfSArPSAkbnJfY29udGlnX2RpcnR5OworCQl9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSAibW1fdm1zY2FuX3dyaXRlcGFnZSIpIHsKKwkJCSRkZXRhaWxzID0gJDU7CisJCQlpZiAoJGRldGFpbHMgIX4gLyRyZWdleF93cml0ZXBhZ2UvbykgeworCQkJCXByaW50ICJXQVJOSU5HOiBGYWlsZWQgdG8gcGFyc2UgbW1fdm1zY2FuX3dyaXRlcGFnZSBhcyBleHBlY3RlZFxuIjsKKwkJCQlwcmludCAiICAgICAgICAgJGRldGFpbHNcbiI7CisJCQkJcHJpbnQgIiAgICAgICAgICRyZWdleF93cml0ZXBhZ2VcbiI7CisJCQkJbmV4dDsKKwkJCX0KKworCQkJbXkgJGZsYWdzID0gJDM7CisJCQlteSAkZmlsZSA9IDA7CisJCQlteSAkc3luY19pbyA9IDA7CisJCQlpZiAoJGZsYWdzID1+IC9SRUNMQUlNX1dCX0ZJTEUvKSB7CisJCQkJJGZpbGUgPSAxOworCQkJfQorCQkJaWYgKCRmbGFncyA9fiAvUkVDTEFJTV9XQl9TWU5DLykgeworCQkJCSRzeW5jX2lvID0gMTsKKwkJCX0KKwkJCWlmICgkc3luY19pbykgeworCQkJCWlmICgkZmlsZSkgeworCQkJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX1NZTkN9Kys7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9TWU5DfSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCRmaWxlKSB7CisJCQkJCSRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfQVNZTkN9Kys7CisJCQkJfSBlbHNlIHsKKwkJCQkJJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ30rKzsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57RVZFTlRfVU5LTk9XTn0rKzsKKwkJfQorCisJCWlmICgkc2lnaW50X3BlbmRpbmcpIHsKKwkJCWxhc3QgRVZFTlRfUFJPQ0VTUzsKKwkJfQorCX0KK30KKworc3ViIGR1bXBfc3RhdHMgeworCW15ICRoYXNocmVmID0gc2hpZnQ7CisJbXkgJXN0YXRzID0gJSRoYXNocmVmOworCisJIyBEdW1wIHBlci1wcm9jZXNzIHN0YXRzCisJbXkgJHByb2Nlc3NfcGlkOworCW15ICRtYXhfc3RybGVuID0gMDsKKworCSMgR2V0IHRoZSBtYXhpbXVtIHByb2Nlc3MgbmFtZQorCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVwZXJwcm9jZXNzcGlkKSB7CisJCW15ICRsZW4gPSBsZW5ndGgoJHByb2Nlc3NfcGlkKTsKKwkJaWYgKCRsZW4gPiAkbWF4X3N0cmxlbikgeworCQkJJG1heF9zdHJsZW4gPSAkbGVuOworCQl9CisJfQorCSRtYXhfc3RybGVuICs9IDI7CisKKwkjIFdvcmsgb3V0IGxhdGVuY2llcworCXByaW50ZigiXG4iKSBpZiAhJG9wdF9pZ25vcmVwaWQ7CisJcHJpbnRmKCJSZWNsYWltIGxhdGVuY2llcyBleHByZXNzZWQgYXMgb3JkZXItbGF0ZW5jeV9pbl9tc1xuIikgaWYgISRvcHRfaWdub3JlcGlkOworCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVzdGF0cykgeworCisJCWlmICghJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WzBdICYmCisJCQkJISRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERfTEFURU5DWX1bMF0pIHsKKwkJCW5leHQ7CisJCX0KKworCQlwcmludGYgIiUtIiAuICRtYXhfc3RybGVuIC4gInMgIiwgJHByb2Nlc3NfcGlkIGlmICEkb3B0X2lnbm9yZXBpZDsKKwkJbXkgJGluZGV4ID0gMDsKKwkJd2hpbGUgKGRlZmluZWQgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WyRpbmRleF0gfHwKKwkJCWRlZmluZWQgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9MQVRFTkNZfVskaW5kZXhdKSB7CisKKwkJCWlmICgkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1bJGluZGV4XSkgeworCQkJCXByaW50ZigiJXMgIiwgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WyRpbmRleF0pIGlmICEkb3B0X2lnbm9yZXBpZDsKKwkJCQlteSAoJGR1bW15LCAkbGF0ZW5jeSkgPSBzcGxpdCgvLS8sICRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZfVskaW5kZXhdKTsKKwkJCQkkdG90YWxfZGlyZWN0X2xhdGVuY3kgKz0gJGxhdGVuY3k7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiJXMgIiwgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9MQVRFTkNZfVskaW5kZXhdKSBpZiAhJG9wdF9pZ25vcmVwaWQ7CisJCQkJbXkgKCRkdW1teSwgJGxhdGVuY3kpID0gc3BsaXQoLy0vLCAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX0xBVEVOQ1l9WyRpbmRleF0pOworCQkJCSR0b3RhbF9rc3dhcGRfbGF0ZW5jeSArPSAkbGF0ZW5jeTsKKwkJCX0KKwkJCSRpbmRleCsrOworCQl9CisJCXByaW50ICJcbiIgaWYgISRvcHRfaWdub3JlcGlkOworCX0KKworCSMgUHJpbnQgb3V0IHByb2Nlc3MgYWN0aXZpdHkKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIlLSIgLiAkbWF4X3N0cmxlbiAuICJzICU4cyAlMTBzICAgJThzICAgJThzICU4cyAlOHMgJThzXG4iLCAiUHJvY2VzcyIsICJEaXJlY3QiLCAgIldva2V1cCIsICJQYWdlcyIsICAgIlBhZ2VzIiwgICAiUGFnZXMiLCAgICAgIlRpbWUiKTsKKwlwcmludGYoIiUtIiAuICRtYXhfc3RybGVuIC4gInMgJThzICUxMHMgICAlOHMgICAlOHMgJThzICU4cyAlOHNcbiIsICJkZXRhaWxzIiwgIlJjbG1zIiwgICAiS3N3YXBkIiwgIlNjYW5uZWQiLCAiU3luYy1JTyIsICJBU3luYy1JTyIsICAiU3RhbGxlZCIpOworCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVzdGF0cykgeworCisJCWlmICghJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59KSB7CisJCQluZXh0OworCQl9CisKKwkJJHRvdGFsX2RpcmVjdF9yZWNsYWltICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOfTsKKwkJJHRvdGFsX3dha2V1cF9rc3dhcGQgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH07CisJCSR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfU0NBTk5FRH07CisJCSR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdlX2ZpbGVfc3luYyArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9TWU5DfTsKKwkJJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9zeW5jICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX1NZTkN9OworCQkkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9maWxlX2FzeW5jICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9GSUxFX0FTWU5DfTsKKworCQkkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX2FzeW5jICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX0FTWU5DfTsKKworCQlteSAkaW5kZXggPSAwOworCQlteSAkdGhpc19yZWNsYWltX2RlbGF5ID0gMDsKKwkJd2hpbGUgKGRlZmluZWQgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0RJUkVDVF9SRUNMQUlNX0xBVEVOQ1l9WyRpbmRleF0pIHsKKwkJCSBteSAoJGR1bW15LCAkbGF0ZW5jeSkgPSBzcGxpdCgvLS8sICRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZfVskaW5kZXhdKTsKKwkJCSR0aGlzX3JlY2xhaW1fZGVsYXkgKz0gJGxhdGVuY3k7CisJCQkkaW5kZXgrKzsKKwkJfQorCisJCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOGQgJTEwZCAgICU4dSAgICU4dSAlOHUgJTguM2YiLAorCQkJJHByb2Nlc3NfcGlkLAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fQkVHSU59LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfU0NBTk5FRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9TWU5DfSArICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX1NZTkN9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfQVNZTkN9ICsgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fQVNZTkN9LAorCQkJJHRoaXNfcmVjbGFpbV9kZWxheSAvIDEwMDApOworCisJCWlmICgkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn0pIHsKKwkJCXByaW50ICIgICAgICAiOworCQkJZm9yIChteSAkb3JkZXIgPSAwOyAkb3JkZXIgPCAyMDsgJG9yZGVyKyspIHsKKwkJCQlteSAkY291bnQgPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTl9QRVJPUkRFUn1bJG9yZGVyXTsKKwkJCQlpZiAoJGNvdW50ICE9IDApIHsKKwkJCQkJcHJpbnQgImRpcmVjdC0kb3JkZXI9JGNvdW50ICI7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICgkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XQUtFVVBfS1NXQVBEfSkgeworCQkJcHJpbnQgIiAgICAgICI7CisJCQlmb3IgKG15ICRvcmRlciA9IDA7ICRvcmRlciA8IDIwOyAkb3JkZXIrKykgeworCQkJCW15ICRjb3VudCA9ICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUERfUEVST1JERVJ9WyRvcmRlcl07CisJCQkJaWYgKCRjb3VudCAhPSAwKSB7CisJCQkJCXByaW50ICJ3YWtldXAtJG9yZGVyPSRjb3VudCAiOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX05SX0NPTlRJR19ESVJUWX0pIHsKKwkJCXByaW50ICIgICAgICAiOworCQkJbXkgJGNvdW50ID0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX05SX0NPTlRJR19ESVJUWX07CisJCQlpZiAoJGNvdW50ICE9IDApIHsKKwkJCQlwcmludCAiY29udGlnLWRpcnR5PSRjb3VudCAiOworCQkJfQorCQl9CisKKwkJcHJpbnQgIlxuIjsKKwl9CisKKwkjIFByaW50IG91dCBrc3dhcGQgYWN0aXZpdHkKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIlLSIgLiAkbWF4X3N0cmxlbiAuICJzICU4cyAlMTBzICAgJThzICAgJThzICU4cyAlOHNcbiIsICJLc3dhcGQiLCAgICJLc3dhcGQiLCAgIk9yZGVyIiwgICAgICJQYWdlcyIsICAgIlBhZ2VzIiwgICJQYWdlcyIpOworCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOHMgJTEwcyAgICU4cyAgICU4cyAlOHMgJThzXG4iLCAiSW5zdGFuY2UiLCAiV2FrZXVwcyIsICJSZS13YWtldXAiLCAiU2Nhbm5lZCIsICJTeW5jLUlPIiwgIkFTeW5jLUlPIik7CisJZm9yZWFjaCAkcHJvY2Vzc19waWQgKGtleXMgJXN0YXRzKSB7CisKKwkJaWYgKCEkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9LU1dBUERfV0FLRX0pIHsKKwkJCW5leHQ7CisJCX0KKworCQkkdG90YWxfa3N3YXBkX3dha2UgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9OworCQkkdG90YWxfa3N3YXBkX25yX3NjYW5uZWQgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX05SX1NDQU5ORUR9OworCQkkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9maWxlX3N5bmMgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfU1lOQ307CisJCSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fc3luYyArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9TWU5DfTsKKwkJJHRvdGFsX2tzd2FwZF93cml0ZXBhZ2VfZmlsZV9hc3luYyArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ307CisJCSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fYXN5bmMgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fQVNZTkN9OworCisJCXByaW50ZigiJS0iIC4gJG1heF9zdHJsZW4gLiAicyAlOGQgJTEwZCAgICU4dSAgICU4aSAlOHUiLAorCQkJJHByb2Nlc3NfcGlkLAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9SRVdBS0VVUH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e0hJR0hfTlJfU0NBTk5FRH0sCisJCQkkc3RhdHN7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9TWU5DfSArICRzdGF0c3skcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX1NZTkN9LAorCQkJJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfQVNZTkN9ICsgJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fQVNZTkN9KTsKKworCQlpZiAoJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0V9KSB7CisJCQlwcmludCAiICAgICAgIjsKKwkJCWZvciAobXkgJG9yZGVyID0gMDsgJG9yZGVyIDwgMjA7ICRvcmRlcisrKSB7CisJCQkJbXkgJGNvdW50ID0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0VfUEVST1JERVJ9WyRvcmRlcl07CisJCQkJaWYgKCRjb3VudCAhPSAwKSB7CisJCQkJCXByaW50ICJ3YWtlLSRvcmRlcj0kY291bnQgIjsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKCRzdGF0c3skcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERfUkVXQUtFVVB9KSB7CisJCQlwcmludCAiICAgICAgIjsKKwkJCWZvciAobXkgJG9yZGVyID0gMDsgJG9yZGVyIDwgMjA7ICRvcmRlcisrKSB7CisJCQkJbXkgJGNvdW50ID0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tPntISUdIX0tTV0FQRF9SRVdBS0VVUF9QRVJPUkRFUn1bJG9yZGVyXTsKKwkJCQlpZiAoJGNvdW50ICE9IDApIHsKKwkJCQkJcHJpbnQgInJld2FrZS0kb3JkZXI9JGNvdW50ICI7CisJCQkJfQorCQkJfQorCQl9CisJCXByaW50ZigiXG4iKTsKKwl9CisKKwkjIFByaW50IG91dCBzdW1tYXJpZXMKKwkkdG90YWxfZGlyZWN0X2xhdGVuY3kgLz0gMTAwMDsKKwkkdG90YWxfa3N3YXBkX2xhdGVuY3kgLz0gMTAwMDsKKwlwcmludCAiXG5TdW1tYXJ5XG4iOworCXByaW50ICJEaXJlY3QgcmVjbGFpbXM6ICAgICAJCQkkdG90YWxfZGlyZWN0X3JlY2xhaW1cbiI7CisJcHJpbnQgIkRpcmVjdCByZWNsYWltIHBhZ2VzIHNjYW5uZWQ6CQkkdG90YWxfZGlyZWN0X25yX3NjYW5uZWRcbiI7CisJcHJpbnQgIkRpcmVjdCByZWNsYWltIHdyaXRlIGZpbGUgc3luYyBJL086CSR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdlX2ZpbGVfc3luY1xuIjsKKwlwcmludCAiRGlyZWN0IHJlY2xhaW0gd3JpdGUgYW5vbiBzeW5jIEkvTzoJJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9zeW5jXG4iOworCXByaW50ICJEaXJlY3QgcmVjbGFpbSB3cml0ZSBmaWxlIGFzeW5jIEkvTzoJJHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfZmlsZV9hc3luY1xuIjsKKwlwcmludCAiRGlyZWN0IHJlY2xhaW0gd3JpdGUgYW5vbiBhc3luYyBJL086CSR0b3RhbF9kaXJlY3Rfd3JpdGVwYWdlX2Fub25fYXN5bmNcbiI7CisJcHJpbnQgIldha2Uga3N3YXBkIHJlcXVlc3RzOgkJCSR0b3RhbF93YWtldXBfa3N3YXBkXG4iOworCXByaW50ZiAiVGltZSBzdGFsbGVkIGRpcmVjdCByZWNsYWltOiAJCSUtMS4yZiBzZWNvbmRzXG4iLCAkdG90YWxfZGlyZWN0X2xhdGVuY3k7CisJcHJpbnQgIlxuIjsKKwlwcmludCAiS3N3YXBkIHdha2V1cHM6CQkJCSR0b3RhbF9rc3dhcGRfd2FrZVxuIjsKKwlwcmludCAiS3N3YXBkIHBhZ2VzIHNjYW5uZWQ6CQkJJHRvdGFsX2tzd2FwZF9ucl9zY2FubmVkXG4iOworCXByaW50ICJLc3dhcGQgcmVjbGFpbSB3cml0ZSBmaWxlIHN5bmMgSS9POgkkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9maWxlX3N5bmNcbiI7CisJcHJpbnQgIktzd2FwZCByZWNsYWltIHdyaXRlIGFub24gc3luYyBJL086CSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2Fub25fc3luY1xuIjsKKwlwcmludCAiS3N3YXBkIHJlY2xhaW0gd3JpdGUgZmlsZSBhc3luYyBJL086CSR0b3RhbF9rc3dhcGRfd3JpdGVwYWdlX2ZpbGVfYXN5bmNcbiI7CisJcHJpbnQgIktzd2FwZCByZWNsYWltIHdyaXRlIGFub24gYXN5bmMgSS9POgkkdG90YWxfa3N3YXBkX3dyaXRlcGFnZV9hbm9uX2FzeW5jXG4iOworCXByaW50ZiAiVGltZSBrc3dhcGQgYXdha2U6CQkJJS0xLjJmIHNlY29uZHNcbiIsICR0b3RhbF9rc3dhcGRfbGF0ZW5jeTsKK30KKworc3ViIGFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCkgeworCW15ICRwcm9jZXNzX3BpZDsKKwlteSAkcHJvY2VzczsKKwl1bmRlZiAlcGVycHJvY2VzczsKKworCWZvcmVhY2ggJHByb2Nlc3NfcGlkIChrZXlzICVwZXJwcm9jZXNzcGlkKSB7CisJCSRwcm9jZXNzID0gJHByb2Nlc3NfcGlkOworCQkkcHJvY2VzcyA9fiBzLy0oWzAtOV0pKiQvLzsKKwkJaWYgKCRwcm9jZXNzIGVxICcnKSB7CisJCQkkcHJvY2VzcyA9ICJOT19QUk9DRVNTX05BTUUiOworCQl9CisKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0tTV0FQRF9XQUtFfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0tTV0FQRF9XQUtFfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH07CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfS1NXQVBEX1JFV0FLRVVQfSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERfUkVXQUtFVVB9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntISUdIX05SX1NDQU5ORUR9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntISUdIX05SX1NDQU5ORUR9OworCQkkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0ZJTEVfU1lOQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9TWU5DfTsKKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX1dSSVRFUEFHRV9BTk9OX1NZTkN9ICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fV1JJVEVQQUdFX0FOT05fU1lOQ307CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfRklMRV9BU1lOQ307CisJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ30gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XUklURVBBR0VfQU5PTl9BU1lOQ307CisKKwkJZm9yIChteSAkb3JkZXIgPSAwOyAkb3JkZXIgPCAyMDsgJG9yZGVyKyspIHsKKwkJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTl9QRVJPUkRFUn1bJG9yZGVyXSArPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0JFR0lOX1BFUk9SREVSfVskb3JkZXJdOworCQkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUERfUEVST1JERVJ9WyRvcmRlcl0gKz0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e01NX1ZNU0NBTl9XQUtFVVBfS1NXQVBEX1BFUk9SREVSfVskb3JkZXJdOworCQkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0tTV0FQRF9XQUtFX1BFUk9SREVSfVskb3JkZXJdICs9ICRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tPntNTV9WTVNDQU5fS1NXQVBEX1dBS0VfUEVST1JERVJ9WyRvcmRlcl07CisKKwkJfQorCisJCSMgQWdncmVnYXRlIGRpcmVjdCByZWNsYWltIGxhdGVuY2llcworCQlteSAkd3JfaW5kZXggPSAkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fRElSRUNUX1JFQ0xBSU1fRU5EfTsKKwkJbXkgJHJkX2luZGV4ID0gMDsKKwkJd2hpbGUgKGRlZmluZWQgJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1bJHJkX2luZGV4XSkgeworCQkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57SElHSF9ESVJFQ1RfUkVDTEFJTV9MQVRFTkNZfVskd3JfaW5kZXhdID0gJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfRElSRUNUX1JFQ0xBSU1fTEFURU5DWX1bJHJkX2luZGV4XTsKKwkJCSRyZF9pbmRleCsrOworCQkJJHdyX2luZGV4Kys7CisJCX0KKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0VORH0gPSAkd3JfaW5kZXg7CisKKwkJIyBBZ2dyZWdhdGUga3N3YXBkIGxhdGVuY2llcworCQlteSAkd3JfaW5kZXggPSAkcGVycHJvY2Vzc3skcHJvY2Vzc30tPntNTV9WTVNDQU5fS1NXQVBEX1NMRUVQfTsKKwkJbXkgJHJkX2luZGV4ID0gMDsKKwkJd2hpbGUgKGRlZmluZWQgJHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS0+e0hJR0hfS1NXQVBEX0xBVEVOQ1l9WyRyZF9pbmRleF0pIHsKKwkJCSRwZXJwcm9jZXNzeyRwcm9jZXNzfS0+e0hJR0hfS1NXQVBEX0xBVEVOQ1l9WyR3cl9pbmRleF0gPSAkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LT57SElHSF9LU1dBUERfTEFURU5DWX1bJHJkX2luZGV4XTsKKwkJCSRyZF9pbmRleCsrOworCQkJJHdyX2luZGV4Kys7CisJCX0KKwkJJHBlcnByb2Nlc3N7JHByb2Nlc3N9LT57TU1fVk1TQ0FOX0RJUkVDVF9SRUNMQUlNX0VORH0gPSAkd3JfaW5kZXg7CisJfQorfQorCitzdWIgcmVwb3J0KCkgeworCWlmICghJG9wdF9pZ25vcmVwaWQpIHsKKwkJZHVtcF9zdGF0cyhcJXBlcnByb2Nlc3NwaWQpOworCX0gZWxzZSB7CisJCWFnZ3JlZ2F0ZV9wZXJwcm9jZXNzcGlkKCk7CisJCWR1bXBfc3RhdHMoXCVwZXJwcm9jZXNzKTsKKwl9Cit9CisKKyMgUHJvY2VzcyBldmVudHMgb3Igc2lnbmFscyB1bnRpbCBuZWl0aGVyIGlzIGF2YWlsYWJsZQorc3ViIHNpZ25hbF9sb29wKCkgeworCW15ICRzaWdpbnRfcHJvY2Vzc2VkOworCWRvIHsKKwkJJHNpZ2ludF9wcm9jZXNzZWQgPSAwOworCQlwcm9jZXNzX2V2ZW50cygpOworCisJCSMgSGFuZGxlIHBlbmRpbmcgc2lnbmFscyBpZiBhbnkKKwkJaWYgKCRzaWdpbnRfcGVuZGluZykgeworCQkJbXkgJGN1cnJlbnRfdGltZSA9IHRpbWU7CisKKwkJCWlmICgkc2lnaW50X2V4aXQpIHsKKwkJCQlwcmludCAiUmVjZWl2ZWQgZXhpdCBzaWduYWxcbiI7CisJCQkJJHNpZ2ludF9wZW5kaW5nID0gMDsKKwkJCX0KKwkJCWlmICgkc2lnaW50X3JlcG9ydCkgeworCQkJCWlmICgkY3VycmVudF90aW1lID49ICRzaWdpbnRfcmVjZWl2ZWQgKyAyKSB7CisJCQkJCXJlcG9ydCgpOworCQkJCQkkc2lnaW50X3JlcG9ydCA9IDA7CisJCQkJCSRzaWdpbnRfcGVuZGluZyA9IDA7CisJCQkJCSRzaWdpbnRfcHJvY2Vzc2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IHdoaWxlICgkc2lnaW50X3BlbmRpbmcgfHwgJHNpZ2ludF9wcm9jZXNzZWQpOworfQorCitzaWduYWxfbG9vcCgpOworcmVwb3J0KCk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9laGNpLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CmluZGV4IDE1MzZiN2UuLjlkY2FmYTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2VoY2kudHh0CkBAIC05LDcgKzksNyBAQAogICAgIC0gIkxvdyBTcGVlZCIgMS41IE1iaXQvc2VjCiAKIFVTQiAxLjEgb25seSBhZGRyZXNzZWQgZnVsbCBzcGVlZCBhbmQgbG93IHNwZWVkLiAgSGlnaCBzcGVlZCBkZXZpY2VzCi1jYW4gYmUgdXNlZCBvbiBVU0IgMS4xIHN5c3RlbXMsIGJ1dCB0aGV5IHNsb3cgZG93biB0byBVU0IgMS4xIHNwZWVkcy4gCitjYW4gYmUgdXNlZCBvbiBVU0IgMS4xIHN5c3RlbXMsIGJ1dCB0aGV5IHNsb3cgZG93biB0byBVU0IgMS4xIHNwZWVkcy4KIAogVVNCIDEuMSBkZXZpY2VzIG1heSBhbHNvIGJlIHVzZWQgb24gVVNCIDIuMCBzeXN0ZW1zLiAgV2hlbiBwbHVnZ2VkCiBpbnRvIGFuIEVIQ0kgY29udHJvbGxlciwgdGhleSBhcmUgZ2l2ZW4gdG8gYSBVU0IgMS4xICJjb21wYW5pb24iCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfbXVsdGkudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X211bHRpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGY0ZWYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X211bHRpLnR4dApAQCAtMCwwICsxLDE1MCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvcmcgLSotCisKKyogT3ZlcnZpZXcKKworVGhlIE11bHRpZnVuY3Rpb24gQ29tcG9zaXRlIEdhZGdldCAob3IgZ19tdWx0aSkgaXMgYSBjb21wb3NpdGUgZ2FkZ2V0Cit0aGF0IG1ha2VzIGV4dGVuc2l2ZSB1c2Ugb2YgdGhlIGNvbXBvc2l0ZSBmcmFtZXdvcmsgdG8gcHJvdmlkZQorYS4uLiBtdWx0aWZ1bmN0aW9uIGdhZGdldC4KKworSW4gaXQncyBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGl0IHByb3ZpZGVzIGEgc2luZ2xlIFVTQiBjb25maWd1cmF0aW9uCit3aXRoIFJORElTWzFdICh0aGF0IGlzIEV0aGVybmV0KSwgVVNCIENEQ1syXSBBQ00gKHRoYXQgaXMgc2VyaWFsKSBhbmQKK1VTQiBNYXNzIFN0b3JhZ2UgZnVuY3Rpb25zLgorCitBIENEQyBFQ00gKEV0aGVybmV0KSBmdW5jdGlvbiBtYXkgYmUgdHVybmVkIG9uIHZpYSBhIEtjb25maWcgb3B0aW9uCithbmQgUk5ESVMgY2FuIGJlIHR1cm5lZCBvZmYuICBJZiB0aGV5IGFyZSBib3RoIGVuYWJsZWQgdGhlIGdhZGdldCB3aWxsCitoYXZlIHR3byBjb25maWd1cmF0aW9ucyAtLSBvbmUgd2l0aCBSTkRJUyBhbmQgYW5vdGhlciB3aXRoIENEQyBFQ01bM10uCisKK1BsZWFzZSBub3QgdGhhdCBpZiB5b3UgdXNlIG5vbi1zdGFuZGFyZCBjb25maWd1cmF0aW9uICh0aGF0IGlzIGVuYWJsZQorQ0RDIEVDTSkgeW91IG1heSBuZWVkIHRvIGNoYW5nZSB2ZW5kb3IgYW5kL29yIHByb2R1Y3QgSUQuCisKKyogSG9zdCBkcml2ZXJzCisKK1RvIG1ha2UgdXNlIG9mIHRoZSBnYWRnZXQgb25lIG5lZWRzIHRvIG1ha2UgaXQgd29yayBvbiBob3N0IHNpZGUgLS0KK3dpdGhvdXQgdGhhdCB0aGVyZSdzIG5vIGhvcGUgb2YgYWNoaWV2aW5nIGFueXRoaW5nIHdpdGggdGhlIGdhZGdldC4KK0FzIG9uZSBtaWdodCBleHBlY3QsIHRoaW5ncyBvbmUgbmVlZCB0byBkbyB2ZXJ5IGZyb20gc3lzdGVtIHRvIHN5c3RlbS4KKworKiogTGludXggaG9zdCBkcml2ZXJzCisKK1NpbmNlIHRoZSBnYWRnZXQgdXNlcyBzdGFuZGFyZCBjb21wb3NpdGUgZnJhbWV3b3JrIGFuZCBhcHBlYXJzIGFzIHN1Y2gKK3RvIExpbnV4IGhvc3QgaXQgZG9lcyBub3QgbmVlZCBhbnkgYWRkaXRpb25hbCBkcml2ZXJzIG9uIExpbnV4IGhvc3QKK3NpZGUuICBBbGwgdGhlIGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBieSByZXNwZWN0aXZlIGRyaXZlcnMgZGV2ZWxvcGVkCitmb3IgdGhlbS4KKworVGhpcyBpcyBhbHNvIHRydWUgZm9yIHR3byBjb25maWd1cmF0aW9uIHNldC11cCB3aXRoIFJORElTCitjb25maWd1cmF0aW9uIGJlaW5nIHRoZSBmaXJzdCBvbmUuICBMaW51eCBob3N0IHdpbGwgdXNlIHRoZSBzZWNvbmQKK2NvbmZpZ3VyYXRpb24gd2l0aCBDREMgRUNNIHdoaWNoIHNob3VsZCB3b3JrIGJldHRlciB1bmRlciBMaW51eC4KKworKiogV2luZG93cyBob3N0IGRyaXZlcnMKKworRm9yIHRoZSBnYWRnZXQgdHdvIHdvcmsgdW5kZXIgV2luZG93cyB0d28gY29uZGl0aW9ucyBoYXZlIHRvIGJlIG1ldDoKKworKioqIERldGVjdGluZyBhcyBjb21wb3NpdGUgZ2FkZ2V0CisKK0ZpcnN0IG9mIGFsbCwgV2luZG93cyBuZWVkIHRvIGRldGVjdCB0aGUgZ2FkZ2V0IGFzIGFuIFVTQiBjb21wb3NpdGUKK2dhZGdldCB3aGljaCBvbiBpdHMgb3duIGhhdmUgc29tZSBjb25kaXRpb25zWzRdLiAgSWYgdGhleSBhcmUgbWV0LAorV2luZG93cyBsZXRzIFVTQiBHZW5lcmljIFBhcmVudCBEcml2ZXJbNV0gaGFuZGxlIHRoZSBkZXZpY2Ugd2hpY2ggdGhlbgordHJpZXMgdG8gbXVjaCBkcml2ZXJzIGZvciBlYWNoIGluZGl2aWR1YWwgaW50ZXJmYWNlIChzb3J0IG9mLCBkb24ndAorZ2V0IGludG8gdG9vIG1hbnkgZGV0YWlscykuCisKK1RoZSBnb29kIG5ld3MgaXM6IHlvdSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtb3N0IG9mIHRoZQorY29uZGl0aW9ucyEKKworVGhlIG9ubHkgdGhpbmcgdG8gd29ycnkgaXMgdGhhdCB0aGUgZ2FkZ2V0IGhhcyB0byBoYXZlIGEgc2luZ2xlCitjb25maWd1cmF0aW9uIHNvIGEgZHVhbCBSTkRJUyBhbmQgQ0RDIEVDTSBnYWRnZXQgd29uJ3Qgd29yayB1bmxlc3MgeW91CitjcmVhdGUgYSBwcm9wZXIgSU5GIC0tIGFuZCBvZiBjb3Vyc2UsIGlmIHlvdSBkbyBzdWJtaXQgaXQhCisKKyoqKiBJbnN0YWxsaW5nIGRyaXZlcnMgZm9yIGVhY2ggZnVuY3Rpb24KKworVGhlIG90aGVyLCB0cmlja2llciB0aGluZyBpcyBtYWtpbmcgV2luZG93cyBpbnN0YWxsIGRyaXZlcnMgZm9yIGVhY2gKK2luZGl2aWR1YWwgZnVuY3Rpb24uCisKK0ZvciBtYXNzIHN0b3JhZ2UgaXQgaXMgdHJpdmlhbCBzaW5jZSBXaW5kb3dzIGRldGVjdCBpdCdzIGFuIGludGVyZmFjZQoraW1wbGVtZW50aW5nIFVTQiBNYXNzIFN0b3JhZ2UgY2xhc3MgYW5kIHNlbGVjdHMgYXBwcm9wcmlhdGUgZHJpdmVyLgorCitUaGluZ3MgYXJlIGhhcmRlciB3aXRoIFJETklTIGFuZCBDREMgQUNNLgorCisqKioqIFJORElTCisKK1RvIG1ha2UgV2luZG93cyBzZWxlY3QgUk5ESVMgZHJpdmVycyBmb3IgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZQorZ2FkZ2V0LCBvbmUgbmVlZHMgdG8gdXNlIHRoZSBbW2ZpbGU6bGludXguaW5mXV0gZmlsZSBwcm92aWRlZCB3aXRoIHRoaXMKK2RvY3VtZW50LiAgSXQgImF0dGFjaGVzIiBXaW5kb3cncyBSTkRJUyBkcml2ZXIgdG8gdGhlIGZpcnN0IGludGVyZmFjZQorb2YgdGhlIGdhZGdldC4KKworUGxlYXNlIG5vdGUsIHRoYXQgd2hpbGUgdGVzdGluZyB3ZSBlbmNvdW50ZXJlZCBzb21lIGlzc3Vlc1s2XSB3aGVuCitSTkRJUyB3YXMgbm90IHRoZSBmaXJzdCBpbnRlcmZhY2UuICBZb3UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJ1dCBpdAordW5sZXNzIHlvdSBhcmUgdHJ5aW5nIHRvIGRldmVsb3AgeW91ciBvd24gZ2FkZ2V0IGluIHdoaWNoIGNhc2Ugd2F0Y2gKK291dCBmb3IgdGhpcyBidWcuCisKKyoqKiogQ0RDIEFDTQorCitTaW1pbGFybHksIFtbZmlsZTpsaW51eC1jZGMtYWNtLmluZl1dIGlzIHByb3ZpZGVkIGZvciBDREMgQUNNLgorCisqKioqIEN1c3RvbWlzaW5nIHRoZSBnYWRnZXQKKworSWYgeW91IGludGVuZCB0byBoYWNrIHRoZSBnX211bHRpIGdhZGdldCBiZSBhZHZpc2VkIHRoYXQgcmVhcnJhbmdpbmcKK2Z1bmN0aW9ucyB3aWxsIG9idmlvdXNseSBjaGFuZ2UgaW50ZXJmYWNlIG51bWJlcnMgZm9yIGVhY2ggb2YgdGhlCitmdW5jdGlvbmFsaXR5LiAgQXMgYW4gZWZmZWN0IHByb3ZpZGVkIElORnMgd29uJ3Qgd29yayBzaW5jZSB0aGV5IGhhdmUKK2ludGVyZmFjZSBudW1iZXJzIGhhcmQtY29kZWQgaW4gdGhlbSAoaXQncyBub3QgaGFyZCB0byBjaGFuZ2UgdGhvc2UKK3Rob3VnaFs3XSkuCisKK1RoaXMgYWxzbyBtZWFucywgdGhhdCBhZnRlciBleHBlcmltZW50aW5nIHdpdGggZ19tdWx0aSBhbmQgY2hhbmdpbmcKK3Byb3ZpZGVkIGZ1bmN0aW9ucyBvbmUgc2hvdWxkIGNoYW5nZSBnYWRnZXQncyB2ZW5kb3IgYW5kL29yIHByb2R1Y3QgSUQKK3NvIHRoZXJlIHdpbGwgYmUgbm8gY29sbGlzaW9uIHdpdGggb3RoZXIgY3VzdG9taXNlZCBnYWRnZXRzIG9yIHRoZQorb3JpZ2luYWwgZ2FkZ2V0LgorCitGYWlsaW5nIHRvIGNvbXBseSBtYXkgY2F1c2UgYnJhaW4gZGFtYWdlIGFmdGVyIHdvbmRlcmluZyBmb3IgaG91cnMgd2h5Cit0aGluZ3MgZG9uJ3Qgd29yayBhcyBpbnRlbmRlZCBiZWZvcmUgcmVhbGlzaW5nIFdpbmRvd3MgaGF2ZSBjYWNoZWQKK3NvbWUgZHJpdmVycyBpbmZvcm1hdGlvbiAoY2hhbmdpbmcgVVNCIHBvcnQgbWF5IHNvbWV0aW1lcyBoZWxwIHBsdXMKK3lvdSBtaWdodCB0cnkgdXNpbmcgVVNCRGV2aWV3WzhdIHRvIHJlbW92ZSB0aGUgcGhhbnRvbSBkZXZpY2UpLgorCisqKioqIElORiB0ZXN0aW5nCisKK1Byb3ZpZGVkIElORiBmaWxlcyBoYXZlIGJlZW4gdGVzdGVkIG9uIFdpbmRvd3MgWFAgU1AzLCBXaW5kb3dzIFZpc3RhCithbmQgV2luZG93cyA3LCBhbGwgMzItYml0IHZlcnNpb25zLiAgSXQgc2hvdWxkIHdvcmsgb24gNjQtYml0IHZlcnNpb25zCithcyB3ZWxsLiAgSXQgbW9zdCBsaWtlbHkgd29uJ3Qgd29yayBvbiBXaW5kb3dzIHByaW9yIHRvIFdpbmRvd3MgWFAKK1NQMi4KKworKiogT3RoZXIgc3lzdGVtcworCitBdCB0aGlzIG1vbWVudCwgZHJpdmVycyBmb3IgYW55IG90aGVyIHN5c3RlbXMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQuCitLbm93aW5nIGhvdyBNYWNPUyBpcyBiYXNlZCBvbiBCU0QgYW5kIEJTRCBpcyBhbiBPcGVuIFNvdXJjZSBpdCBpcworYmVsaWV2ZWQgdGhhdCBpdCBzaG91bGQgKHJlYWQ6ICJJIGhhdmUgbm8gaWRlYSB3aGV0aGVyIGl0IHdpbGwiKSB3b3JrCitvdXQtb2YtdGhlLWJveC4KKworRm9yIG1vcmUgZXhvdGljIHN5c3RlbXMgSSBoYXZlIGV2ZW4gbGVzcyB0byBzYXkuLi4KKworQW55IHRlc3RpbmcgYW5kIGRyaXZlcnMgKmFyZSogKndlbGNvbWUqIQorCisqIEF1dGhvcnMKKworVGhpcyBkb2N1bWVudCBoYXMgYmVlbiB3cml0dGVuIGJ5IE1pY2hhbCBOYXphcmV3aWN6CisoW1ttYWlsdG86bWluYTg2QG1pbmE4Ni5jb21dXSkuICBJTkYgZmlsZXMgaGF2ZSBiZWVuIGhhY2tlZCB3aXRoCitzdXBwb3J0IG9mIE1hcmVrIFN6eXByb3dza2kgKFtbbWFpbHRvOm0uc3p5cHJvd3NraUBzYW1zdW5nLmNvbV1dKSBhbmQKK1hpYW9mYW4gQ2hlbiAoW1ttYWlsdG86eGlhb2ZhbmNAZ21haWwuY29tXV0pIGJhc2luZyBvbiB0aGUgTVMgUk5ESVMKK3RlbXBsYXRlWzldLCBNaWNyb2NoaXAncyBDREMgQUNNIElORiBmaWxlIGFuZCBEYXZpZCBCcm93bmVsbCdzCisoW1ttYWlsdG86ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldF1dKSBvcmlnaW5hbCBJTkYgZmlsZXMuCisKKyogRm9vdG5vdGVzCisKK1sxXSBSZW1vdGUgTmV0d29yayBEcml2ZXIgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24sCitbW2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lZTQ4NDQxNC5hc3B4XV0uCisKK1syXSBDb21tdW5pY2F0aW9ucyBEZXZpY2UgQ2xhc3MgQWJzdHJhY3QgQ29udHJvbCBNb2RlbCwgc3BlYyBmb3IgdGhpcworYW5kIG90aGVyIFVTQiBjbGFzc2VzIGNhbiBiZSBmb3VuZCBhdAorW1todHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL11dLgorCitbM10gQ0RDIEV0aGVybmV0IENvbnRyb2wgTW9kZWwuCisKK1s0XSBbW2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9mZjUzNzEwOSh2PVZTLjg1KS5hc3B4XV0KKworWzVdIFtbaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2ZmNTM5MjM0KHY9VlMuODUpLmFzcHhdXQorCitbNl0gVG8gcHV0IGl0IGluIHNvbWUgb3RoZXIgbmljZSB3b3JkcywgV2luZG93cyBmYWlsZWQgdG8gcmVzcG9uZCB0bworYW55IHVzZXIgaW5wdXQuCisKK1s3XSBZb3UgbWF5IGZpbmQgW1todHRwOi8vd3d3LmN5Z25hbC5vcmcvdWJiL0ZvcnVtOS9IVE1MLzAwMTA1MC5odG1sXV0KK3VzZWZ1bC4KKworWzhdIGh0dHA6Ly93d3cubmlyc29mdC5uZXQvdXRpbHMvdXNiX2RldmljZXNfdmlldy5odG1sCisKK1s5XSBbW2h0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9mZjU3MDYyMC5hc3B4XV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2dhZGdldF9zZXJpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3NlcmlhbC50eHQKaW5kZXggZWFjN2RmOS4uNjFlNjdmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3NlcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3NlcmlhbC50eHQKQEAgLTE1MSw4OCArMTUxLDIzIEBACiAKIEluc3RhbGxpbmcgdGhlIFdpbmRvd3MgSG9zdCBBQ00gRHJpdmVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVG8gdXNlIHRoZSBXaW5kb3dzIEFDTSBkcml2ZXIgeW91IG11c3QgaGF2ZSB0aGUgZmlsZXMgImdzZXJpYWwuaW5mIgotYW5kICJ1c2JzZXIuc3lzIiB0b2dldGhlciBpbiBhIGZvbGRlciBvbiB0aGUgV2luZG93cyBtYWNoaW5lLgotCi1UaGUgImdzZXJpYWwuaW5mIiBmaWxlIGlzIGdpdmVuIGhlcmUuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENVVCBIRVJFIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi1bVmVyc2lvbl0KLVNpZ25hdHVyZT0iJFdpbmRvd3MgTlQkIgotQ2xhc3M9UG9ydHMKLUNsYXNzR3VpZD17NEQzNkU5NzgtRTMyNS0xMUNFLUJGQzEtMDgwMDJCRTEwMzE4fQotUHJvdmlkZXI9JUxJTlVYJQotRHJpdmVyVmVyPTA4LzE3LzIwMDQsMC4wLjIuMAotOyBDb3B5cmlnaHQgKEMpIDIwMDQgQWwgQm9yY2hlcnMgKGFsYm9yY2hlcnNAc3RlaW5lcnBvaW50LmNvbSkKLQotW01hbnVmYWN0dXJlcl0KLSVMSU5VWCU9R1NlcmlhbERldmljZUxpc3QKLQotW0dTZXJpYWxEZXZpY2VMaXN0XQotJUdTRVJJQUwlPUdTZXJpYWxJbnN0YWxsLCBVU0JcVklEXzA1MjUmUElEX0E0QTcKLQotW0Rlc3RpbmF0aW9uRGlyc10KLURlZmF1bHREZXN0RGlyPTEwLFN5c3RlbTMyXERyaXZlcnMKLQotW0dTZXJpYWxJbnN0YWxsXQotQ29weUZpbGVzPUdTZXJpYWxDb3B5RmlsZXMKLUFkZFJlZz1HU2VyaWFsQWRkUmVnCi0KLVtHU2VyaWFsQ29weUZpbGVzXQotdXNic2VyLnN5cwotCi1bR1NlcmlhbEFkZFJlZ10KLUhLUiwsRGV2TG9hZGVyLCwqbnRrZXJuCi1IS1IsLE5UTVBEcml2ZXIsLHVzYnNlci5zeXMKLUhLUiwsRW51bVByb3BQYWdlczMyLCwiTXNQb3J0cy5kbGwsU2VyaWFsUG9ydFByb3BQYWdlUHJvdmlkZXIiCi0KLVtHU2VyaWFsSW5zdGFsbC5TZXJ2aWNlc10KLUFkZFNlcnZpY2UgPSB1c2JzZXIsMHgwMDAyLEdTZXJpYWxTZXJ2aWNlCi0KLVtHU2VyaWFsU2VydmljZV0KLURpc3BsYXlOYW1lID0gJUdTRVJJQUxfRElTUExBWV9OQU1FJQotU2VydmljZVR5cGUgPSAxICAgICAgICAgICAgICAgICAgOyBTRVJWSUNFX0tFUk5FTF9EUklWRVIKLVN0YXJ0VHlwZSA9IDMgICAgICAgICAgICAgICAgICAgIDsgU0VSVklDRV9ERU1BTkRfU1RBUlQKLUVycm9yQ29udHJvbCA9IDEgICAgICAgICAgICAgICAgIDsgU0VSVklDRV9FUlJPUl9OT1JNQUwKLVNlcnZpY2VCaW5hcnkgPSAlMTAlXFN5c3RlbTMyXERyaXZlcnNcdXNic2VyLnN5cwotTG9hZE9yZGVyR3JvdXAgPSBCYXNlCi0KLVtTdHJpbmdzXQotTElOVVggPSAiTGludXgiCi1HU0VSSUFMID0gIkdhZGdldCBTZXJpYWwiCi1HU0VSSUFMX0RJU1BMQVlfTkFNRSA9ICJVU0IgR2FkZ2V0IFNlcmlhbCBEcml2ZXIiCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDVVQgSEVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgInVzYnNlci5zeXMiIGZpbGUgY29tZXMgd2l0aCB2YXJpb3VzIHZlcnNpb25zIG9mIFdpbmRvd3MuCi1Gb3IgZXhhbXBsZSwgaXQgY2FuIGJlIGZvdW5kIG9uIFdpbmRvd3MgWFAgdHlwaWNhbGx5IGluCi0KLSAgQzpcV0lORE9XU1xEcml2ZXIgQ2FjaGVcaTM4Nlxkcml2ZXIuY2FiCi0KLU9yIGl0IGNhbiBiZSBmb3VuZCBvbiB0aGUgV2luZG93cyA5OFNFIENEIGluIHRoZSAid2luOTgiIGZvbGRlcgotaW4gdGhlICJEUklWRVIxMS5DQUIiIHRocm91Z2ggIkRSSVZFUjIwLkNBQiIgY2FiIGZpbGVzLiAgWW91IHdpbGwKLW5lZWQgdGhlIERPUyAiZXhwYW5kIiBwcm9ncmFtLCB0aGUgQ3lnd2luICJjYWJleHRyYWN0IiBwcm9ncmFtLCBvcgotYSBzaW1pbGFyIHByb2dyYW0gdG8gdW5wYWNrIHRoZXNlIGNhYiBmaWxlcyBhbmQgZXh0cmFjdCAidXNic2VyLnN5cyIuCi0KLUZvciBleGFtcGxlLCB0byBleHRyYWN0ICJ1c2JzZXIuc3lzIiBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQotb24gV2luZG93cyBYUCwgb3BlbiBhIERPUyB3aW5kb3cgYW5kIHJ1biBhIGNvbW1hbmQgbGlrZQotCi0gIGV4cGFuZCBDOlxXSU5ET1dTXERyaXZlcn4xXGkzODZcZHJpdmVyLmNhYiAtRjp1c2JzZXIuc3lzIC4KLQotKFRoYW5rcyB0byBOaXNoYW50IEthbWF0IGZvciBwb2ludGluZyBvdXQgdGhpcyBET1MgY29tbWFuZC4pCitUbyB1c2UgdGhlIFdpbmRvd3MgQUNNIGRyaXZlciB5b3UgbXVzdCBoYXZlIHRoZSAibGludXgtY2RjLWFjbS5pbmYiCitmaWxlIChwcm92aWRlZCBhbG9uZyB0aGlzIGRvY3VtZW50KSB3aGljaCBzdXBwb3J0cyBhbGwgcmVjZW50IHZlcnNpb25zCitvZiBXaW5kb3dzLgogCiBXaGVuIHRoZSBnYWRnZXQgc2VyaWFsIGRyaXZlciBpcyBsb2FkZWQgYW5kIHRoZSBVU0IgZGV2aWNlIGNvbm5lY3RlZAogdG8gdGhlIFdpbmRvd3MgaG9zdCB3aXRoIGEgVVNCIGNhYmxlLCBXaW5kb3dzIHNob3VsZCByZWNvZ25pemUgdGhlCiBnYWRnZXQgc2VyaWFsIGRldmljZSBhbmQgYXNrIGZvciBhIGRyaXZlci4gIFRlbGwgV2luZG93cyB0byBmaW5kIHRoZQotZHJpdmVyIGluIHRoZSBmb2xkZXIgdGhhdCBjb250YWlucyAiZ3NlcmlhbC5pbmYiIGFuZCAidXNic2VyLnN5cyIuCitkcml2ZXIgaW4gdGhlIGZvbGRlciB0aGF0IGNvbnRhaW5zIHRoZSAibGludXgtY2RjLWFjbS5pbmYiIGZpbGUuCiAKIEZvciBleGFtcGxlLCBvbiBXaW5kb3dzIFhQLCB3aGVuIHRoZSBnYWRnZXQgc2VyaWFsIGRldmljZSBpcyBmaXJzdAogcGx1Z2dlZCBpbiwgdGhlICJGb3VuZCBOZXcgSGFyZHdhcmUgV2l6YXJkIiBzdGFydHMgdXAuICBTZWxlY3QKLSJJbnN0YWxsIGZyb20gYSBsaXN0IG9yIHNwZWNpZmljIGxvY2F0aW9uIChBZHZhbmNlZCkiLCB0aGVuIG9uCi10aGUgbmV4dCBzY3JlZW4gc2VsZWN0ICJJbmNsdWRlIHRoaXMgbG9jYXRpb24gaW4gdGhlIHNlYXJjaCIgYW5kCi1lbnRlciB0aGUgcGF0aCBvciBicm93c2UgdG8gdGhlIGZvbGRlciBjb250YWluaW5nICJnc2VyaWFsLmluZiIgYW5kCi0idXNic2VyLnN5cyIuICBXaW5kb3dzIHdpbGwgY29tcGxhaW4gdGhhdCB0aGUgR2FkZ2V0IFNlcmlhbCBkcml2ZXIKLWhhcyBub3QgcGFzc2VkIFdpbmRvd3MgTG9nbyB0ZXN0aW5nLCBidXQgc2VsZWN0ICJDb250aW51ZSBhbnl3YXkiCi1hbmQgZmluaXNoIHRoZSBkcml2ZXIgaW5zdGFsbGF0aW9uLgorIkluc3RhbGwgZnJvbSBhIGxpc3Qgb3Igc3BlY2lmaWMgbG9jYXRpb24gKEFkdmFuY2VkKSIsIHRoZW4gb24gdGhlCituZXh0IHNjcmVlbiBzZWxlY3QgIkluY2x1ZGUgdGhpcyBsb2NhdGlvbiBpbiB0aGUgc2VhcmNoIiBhbmQgZW50ZXIgdGhlCitwYXRoIG9yIGJyb3dzZSB0byB0aGUgZm9sZGVyIGNvbnRhaW5pbmcgdGhlICJsaW51eC1jZGMtYWNtLmluZiIgZmlsZS4KK1dpbmRvd3Mgd2lsbCBjb21wbGFpbiB0aGF0IHRoZSBHYWRnZXQgU2VyaWFsIGRyaXZlciBoYXMgbm90IHBhc3NlZAorV2luZG93cyBMb2dvIHRlc3RpbmcsIGJ1dCBzZWxlY3QgIkNvbnRpbnVlIGFueXdheSIgYW5kIGZpbmlzaCB0aGUKK2RyaXZlciBpbnN0YWxsYXRpb24uCiAKIE9uIFdpbmRvd3MgWFAsIGluIHRoZSAiRGV2aWNlIE1hbmFnZXIiICh1bmRlciAiQ29udHJvbCBQYW5lbCIsCiAiU3lzdGVtIiwgIkhhcmR3YXJlIikgZXhwYW5kIHRoZSAiUG9ydHMgKENPTSAmIExQVCkiIGVudHJ5IGFuZCB5b3UKQEAgLTM0NSw1ICsyODAsMyBAQAogc2lkZSBhbmQgaG9zdCBzaWRlIHN5c3RlbXMuICBBbnl0aGluZyB5b3UgdHlwZSBvbiB0aGUgdGVybWluYWwKIHdpbmRvdyBvbiB0aGUgZ2FkZ2V0IHNpZGUgc2hvdWxkIGFwcGVhciBpbiB0aGUgdGVybWluYWwgd2luZG93IG9uCiB0aGUgaG9zdCBzaWRlIGFuZCB2aWNlIHZlcnNhLgotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2hvdHBsdWcudHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvaG90cGx1Zy50eHQKaW5kZXggZjUzMTcwNi4uNGM5NDU3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvaG90cGx1Zy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvaG90cGx1Zy50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIAogICAgIC0gQmluZCBhIGRyaXZlciB0byB0aGF0IGRldmljZS4gIEJ1cyBmcmFtZXdvcmtzIGRvIHRoYXQgdXNpbmcgYQogICAgICAgZGV2aWNlIGRyaXZlcidzIHByb2JlKCkgcm91dGluZS4KLSAgICAKKwogICAgIC0gVGVsbCBvdGhlciBzdWJzeXN0ZW1zIHRvIGNvbmZpZ3VyZSB0aGUgbmV3IGRldmljZS4gIFByaW50CiAgICAgICBxdWV1ZXMgbWF5IG5lZWQgdG8gYmUgZW5hYmxlZCwgbmV0d29ya3MgYnJvdWdodCB1cCwgZGlzawogICAgICAgcGFydGl0aW9ucyBtb3VudGVkLCBhbmQgc28gb24uICBJbiBzb21lIGNhc2VzIHRoZXNlIHdpbGwKQEAgLTg0LDcgKzg0LDcgQEAKIEN1cnJlbnQgdmVyc2lvbnMgb2YgbW9kdWxlLWluaXQtdG9vbHMgd2lsbCBjcmVhdGUgYSAibW9kdWxlcy51c2JtYXAiIGZpbGUKIHdoaWNoIGNvbnRhaW5zIHRoZSBlbnRyaWVzIGZyb20gZWFjaCBkcml2ZXIncyBNT0RVTEVfREVWSUNFX1RBQkxFLiAgU3VjaAogZmlsZXMgY2FuIGJlIHVzZWQgYnkgdmFyaW91cyB1c2VyIG1vZGUgcG9saWN5IGFnZW50cyB0byBtYWtlIHN1cmUgYWxsIHRoZQotcmlnaHQgZHJpdmVyIG1vZHVsZXMgZ2V0IGxvYWRlZCwgZWl0aGVyIGF0IGJvb3QgdGltZSBvciBsYXRlci4gCityaWdodCBkcml2ZXIgbW9kdWxlcyBnZXQgbG9hZGVkLCBlaXRoZXIgYXQgYm9vdCB0aW1lIG9yIGxhdGVyLgogCiBTZWUgPGxpbnV4L3VzYi5oPiBmb3IgZnVsbCBpbmZvcm1hdGlvbiBhYm91dCBzdWNoIHRhYmxlIGVudHJpZXM7IG9yIGxvb2sKIGF0IGV4aXN0aW5nIGRyaXZlcnMuICBFYWNoIHRhYmxlIGVudHJ5IGRlc2NyaWJlcyBvbmUgb3IgbW9yZSBjcml0ZXJpYSB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2IvbGludXgtY2RjLWFjbS5pbmYgYi9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC1jZGMtYWNtLmluZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTJlNzIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvbGludXgtY2RjLWFjbS5pbmYKQEAgLTAsMCArMSwxMDcgQEAKKzsgV2luZG93cyBVU0IgQ0RDIEFDTSBTZXR1cCBGaWxlCisKKzsgQmFzZWQgb24gSU5GIHRlbXBsYXRlIHdoaWNoIHdhczoKKzsgICAgIENvcHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKzsgICAgIENvcHlyaWdodCAoYykgMjAwNyBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuCis7IGxpa2VseSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBNTFBMIGFzIGZvdW5kIGF0OgorOyAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9jYzMwMDM4OS5hc3B4I01MUEw+LgorOyBGb3IgdXNlIG9ubHkgb24gV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcy4KKworW1ZlcnNpb25dCitTaWduYXR1cmU9IiRXaW5kb3dzIE5UJCIKK0NsYXNzPVBvcnRzCitDbGFzc0d1aWQ9ezREMzZFOTc4LUUzMjUtMTFDRS1CRkMxLTA4MDAyQkUxMDMxOH0KK1Byb3ZpZGVyPSVMaW51eCUKK0RyaXZlclZlcj0xMS8xNS8yMDA3LDUuMS4yNjAwLjAKKworW01hbnVmYWN0dXJlcl0KKyVMaW51eCU9RGV2aWNlTGlzdCwgTlRhbWQ2NAorCitbRGVzdGluYXRpb25EaXJzXQorRGVmYXVsdERlc3REaXI9MTIKKworCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBXaW5kb3dzIDIwMDAvWFAvVmlzdGEtMzJiaXQgU2VjdGlvbnMKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW0RyaXZlckluc3RhbGwubnRdCitpbmNsdWRlPW1kbWNwcS5pbmYKK0NvcHlGaWxlcz1Ecml2ZXJDb3B5RmlsZXMubnQKK0FkZFJlZz1Ecml2ZXJJbnN0YWxsLm50LkFkZFJlZworCitbRHJpdmVyQ29weUZpbGVzLm50XQordXNic2VyLnN5cywsLDB4MjAKKworW0RyaXZlckluc3RhbGwubnQuQWRkUmVnXQorSEtSLCxEZXZMb2FkZXIsLCpudGtlcm4KK0hLUiwsTlRNUERyaXZlciwsVVNCU0VSLnN5cworSEtSLCxFbnVtUHJvcFBhZ2VzMzIsLCJNc1BvcnRzLmRsbCxTZXJpYWxQb3J0UHJvcFBhZ2VQcm92aWRlciIKKworW0RyaXZlckluc3RhbGwubnQuU2VydmljZXNdCitBZGRTZXJ2aWNlPXVzYnNlciwgMHgwMDAwMDAwMiwgRHJpdmVyU2VydmljZS5udAorCitbRHJpdmVyU2VydmljZS5udF0KK0Rpc3BsYXlOYW1lPSVTRVJWSUNFJQorU2VydmljZVR5cGU9MQorU3RhcnRUeXBlPTMKK0Vycm9yQ29udHJvbD0xCitTZXJ2aWNlQmluYXJ5PSUxMiVcVVNCU0VSLnN5cworCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBWaXN0YS02NGJpdCBTZWN0aW9ucworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbRHJpdmVySW5zdGFsbC5OVGFtZDY0XQoraW5jbHVkZT1tZG1jcHEuaW5mCitDb3B5RmlsZXM9RHJpdmVyQ29weUZpbGVzLk5UYW1kNjQKK0FkZFJlZz1Ecml2ZXJJbnN0YWxsLk5UYW1kNjQuQWRkUmVnCisKK1tEcml2ZXJDb3B5RmlsZXMuTlRhbWQ2NF0KK1VTQlNFUi5zeXMsLCwweDIwCisKK1tEcml2ZXJJbnN0YWxsLk5UYW1kNjQuQWRkUmVnXQorSEtSLCxEZXZMb2FkZXIsLCpudGtlcm4KK0hLUiwsTlRNUERyaXZlciwsVVNCU0VSLnN5cworSEtSLCxFbnVtUHJvcFBhZ2VzMzIsLCJNc1BvcnRzLmRsbCxTZXJpYWxQb3J0UHJvcFBhZ2VQcm92aWRlciIKKworW0RyaXZlckluc3RhbGwuTlRhbWQ2NC5TZXJ2aWNlc10KK0FkZFNlcnZpY2U9dXNic2VyLCAweDAwMDAwMDAyLCBEcml2ZXJTZXJ2aWNlLk5UYW1kNjQKKworW0RyaXZlclNlcnZpY2UuTlRhbWQ2NF0KK0Rpc3BsYXlOYW1lPSVTRVJWSUNFJQorU2VydmljZVR5cGU9MQorU3RhcnRUeXBlPTMKK0Vycm9yQ29udHJvbD0xCitTZXJ2aWNlQmluYXJ5PSUxMiVcVVNCU0VSLnN5cworCisKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgIFZlbmRvciBhbmQgUHJvZHVjdCBJRCBEZWZpbml0aW9ucworOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyBXaGVuIGRldmVsb3BpbmcgeW91ciBVU0IgZGV2aWNlLCB0aGUgVklEIGFuZCBQSUQgdXNlZCBpbiB0aGUgUEMgc2lkZQorOyBhcHBsaWNhdGlvbiBwcm9ncmFtIGFuZCB0aGUgZmlybXdhcmUgb24gdGhlIG1pY3JvY29udHJvbGxlciBtdXN0IG1hdGNoLgorOyBNb2RpZnkgdGhlIGJlbG93IGxpbmUgdG8gdXNlIHlvdXIgVklEIGFuZCBQSUQuICBVc2UgdGhlIGZvcm1hdCBhcyBzaG93bgorOyBiZWxvdy4KKzsgTm90ZTogT25lIElORiBmaWxlIGNhbiBiZSB1c2VkIGZvciBtdWx0aXBsZSBkZXZpY2VzIHdpdGggZGlmZmVyZW50Cis7ICAgICAgIFZJRCBhbmQgUElEcy4gIEZvciBlYWNoIHN1cHBvcnRlZCBkZXZpY2UsIGFwcGVuZAorOyAgICAgICAiLFVTQlxWSURfeHh4eCZQSURfeXl5eSIgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tTb3VyY2VEaXNrc0ZpbGVzXQorW1NvdXJjZURpc2tzTmFtZXNdCitbRGV2aWNlTGlzdF0KKyVERVNDUklQVElPTiU9RHJpdmVySW5zdGFsbCwgVVNCXFZJRF8wNTI1JlBJRF9BNEE3LCBVU0JcVklEXzA1MjUmUElEX0E0QUImTUlfMDIKKworW0RldmljZUxpc3QuTlRhbWQ2NF0KKyVERVNDUklQVElPTiU9RHJpdmVySW5zdGFsbCwgVVNCXFZJRF8wNTI1JlBJRF9BNEE3LCBVU0JcVklEXzA1MjUmUElEX0E0QUImTUlfMDIKKworCis7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBTdHJpbmcgRGVmaW5pdGlvbnMKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKztNb2RpZnkgdGhlc2Ugc3RyaW5ncyB0byBjdXN0b21pemUgeW91ciBkZXZpY2UKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tTdHJpbmdzXQorTGludXggICAgICAgICAgICAgICA9ICJMaW51eCBEZXZlbG9wZXIgQ29tbXVuaXR5IgorREVTQ1JJUFRJT04gICAgICAgICA9ICJHYWRnZXQgU2VyaWFsIgorU0VSVklDRSAgICAgICAgICAgICA9ICJVU0IgUlMtMjMyIEVtdWxhdGlvbiBEcml2ZXIiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYgYi9Eb2N1bWVudGF0aW9uL3VzYi9saW51eC5pbmYKaW5kZXggYWY3MWQ4Ny4uNGRlZTk1OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2IvbGludXguaW5mCisrKyBiL0RvY3VtZW50YXRpb24vdXNiL2xpbnV4LmluZgpAQCAtMSwyMDAgKzEsNjYgQEAKLTsgTVMtV2luZG93cyBkcml2ZXIgY29uZmlnIG1hdGNoaW5nIHNvbWUgYmFzaWMgbW9kZXMgb2YgdGhlCi07IExpbnV4LVVTQiBFdGhlcm5ldC9STkRJUyBnYWRnZXQgZmlybXdhcmU6Ci07Ci07ICAtIFJORElTIHBsdXMgQ0RDIEV0aGVybmV0IC4uLiB0aGlzIG1heSBiZSBmYW1pbGlhciBhcyBhIERPQ1NJUwotOyAgICBjYWJsZSBtb2RlbSBwcm9maWxlLCBhbmQgc3VwcG9ydHMgbW9zdCBub24tTWljcm9zb2Z0IFVTQiBob3N0cwotOwotOyAgLSBSTkRJUyBwbHVzIENEQyBTdWJzZXQgLi4uIHVzZWQgYnkgaGFyZHdhcmUgdGhhdCBpbmNhcGFibGUgb2YKLTsgICAgZnVsbCBDREMgRXRoZXJuZXQgc3VwcG9ydC4KLTsKLTsgTWljcm9zb2Z0IG9ubHkgZGlyZWN0bHkgc3VwcG9ydHMgUk5ESVMgZHJpdmVycywgYW5kIGJ1bmRsZWQgdGhlbSBpbnRvIFhQLgotOyBUaGUgTWljcm9zb2Z0ICJSZW1vdGUgTkRJUyBVU0IgRHJpdmVyIEtpdCIgaXMgY3VycmVudGx5IGZvdW5kIGF0OgotOyAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS93aGRjL2RldmljZS9uZXR3b3JrL25kaXMvcm1uZGlzLm1zcHgKLQorOyBCYXNlZCBvbiB0ZW1wbGF0ZSBJTkYgZmlsZSBmb3VuZCBhdAorOyAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2ZmNTcwNjIwLmFzcHg+Cis7IHdoaWNoIHdhczoKKzsgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKzsgYW5kIHJlbGVhc2VkIHVuZGVyIHRoZSBNTFBMIGFzIGZvdW5kIGF0OgorOyAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9jYzMwMDM4OS5hc3B4I01MUEw+LgorOyBGb3IgdXNlIG9ubHkgb24gV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcy4KIAogW1ZlcnNpb25dCi1TaWduYXR1cmUgICAgICAgICAgID0gIiRDSElDQUdPJCIKK1NpZ25hdHVyZSAgICAgICAgICAgPSAiJFdpbmRvd3MgTlQkIgogQ2xhc3MgICAgICAgICAgICAgICA9IE5ldAogQ2xhc3NHVUlEICAgICAgICAgICA9IHs0ZDM2ZTk3Mi1lMzI1LTExY2UtYmZjMS0wODAwMmJlMTAzMTh9CiBQcm92aWRlciAgICAgICAgICAgID0gJUxpbnV4JQotQ29tcGF0aWJsZSAgICAgICAgICA9IDEKLU1pbGxlbm5pdW1QcmVmZXJyZWQgPSAuTUUKLURyaXZlclZlciAgICAgICAgICAgPSAwMy8zMC8yMDA0LDAuMC4wLjAKLTsgY2F0YWxvZyBmaWxlIHdvdWxkIGJlIHVzZWQgYnkgV0hRTAotO0NhdGFsb2dGaWxlICAgICAgICAgPSBMaW51eC5jYXQKK0RyaXZlclZlciAgICAgICAgICAgPSAwNi8yMS8yMDA2LDYuMC42MDAwLjE2Mzg0CiAKIFtNYW51ZmFjdHVyZXJdCi0lTGludXglICAgICAgICAgID0gTGludXhEZXZpY2VzLE5ULjUuMQorJUxpbnV4JSAgICAgICAgICAgICA9IExpbnV4RGV2aWNlcyxOVHg4NixOVGFtZDY0LE5UaWE2NAogCi1bTGludXhEZXZpY2VzXQotOyBOZXRDaGlwIElEcywgdXNlZCBieSBib3RoIGZpcm13YXJlIG1vZGVzCi0lTGludXhEZXZpY2UlICAgID0gUk5ESVMsIFVTQlxWSURfMDUyNSZQSURfYTRhMgorOyBEZWNvcmF0aW9uIGZvciB4ODYgYXJjaGl0ZWN0dXJlCitbTGludXhEZXZpY2VzLk5UeDg2XQorJUxpbnV4RGV2aWNlJSAgICAgICA9IFJORElTLk5ULjUuMSwgVVNCXFZJRF8wNTI1JlBJRF9hNGEyLCBVU0JcVklEXzA1MjUmUElEX2E0YWImTUlfMDAKIAotW0xpbnV4RGV2aWNlcy5OVC41LjFdCi0lTGludXhEZXZpY2UlICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIKKzsgRGVjb3JhdGlvbiBmb3IgeDY0IGFyY2hpdGVjdHVyZQorW0xpbnV4RGV2aWNlcy5OVGFtZDY0XQorJUxpbnV4RGV2aWNlJSAgICAgICA9IFJORElTLk5ULjUuMSwgVVNCXFZJRF8wNTI1JlBJRF9hNGEyLCBVU0JcVklEXzA1MjUmUElEX2E0YWImTUlfMDAKIAorOyBEZWNvcmF0aW9uIGZvciBpYTY0IGFyY2hpdGVjdHVyZQorW0xpbnV4RGV2aWNlcy5OVGlhNjRdCislTGludXhEZXZpY2UlICAgICAgID0gUk5ESVMuTlQuNS4xLCBVU0JcVklEXzA1MjUmUElEX2E0YTIsIFVTQlxWSURfMDUyNSZQSURfYTRhYiZNSV8wMAorCis7QEBAIFRoaXMgaXMgdGhlIGNvbW1vbiBzZXR0aW5nIGZvciBzZXR1cAogW0NvbnRyb2xGbGFnc10KIEV4Y2x1ZGVGcm9tU2VsZWN0PSoKIAotOyBXaW5kb3dzIDk4LCBXaW5kb3dzIDk4IFNlY29uZCBFZGl0aW9uIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tCi0KLVtSTkRJU10KLURldmljZUlEICAgICAgICA9IHVzYjgwMjMKLU1heEluc3RhbmNlICAgICA9IDUxMgotRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAotQWRkUmVnICAgICAgICAgID0gUk5ESVNfQWRkUmVnXzk4LCBSTkRJU19BZGRSZWdfQ29tbW9uCi0KLVtSTkRJU19BZGRSZWdfOThdCi1IS1IsICwgICAgICAgICAgICAgICBEZXZMb2FkZXIsICAgICAgICAwLCAqbmRpcwotSEtSLCAsICAgICAgICAgICAgICAgRGV2aWNlVnhEcywgICAgICAgMCwgdXNiODAyMy5zeXMKLUhLUiwgTkRJUywgICAgICAgICAgIExvZ0RyaXZlck5hbWUsICAgIDAsICJ1c2I4MDIzIgotSEtSLCBORElTLCAgICAgICAgICAgTWFqb3JOZGlzVmVyc2lvbiwgMSwgNQotSEtSLCBORElTLCAgICAgICAgICAgTWlub3JOZGlzVmVyc2lvbiwgMSwgMAotSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmVXBwZXIsICAgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmTG93ZXIsICAgICAgICAgMCwgImV0aGVybmV0IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgVXBwZXJSYW5nZSwgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgTG93ZXJSYW5nZSwgICAgICAgMCwgImV0aGVybmV0IgotSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczMsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfOTgiCi1IS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzNCwgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF85OCIKLUhLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM1LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsXzk4IgotSEtSLCBOZGksICAgICAgICAgICAgRGV2aWNlSWQsICAgICAgICAgMCwgIlVTQlxWSURfMDUyNSZQSURfYTRhMiIKLQotW1JORElTX0luc3RhbGxfOThdCi1Db3B5RmlsZXM9Uk5ESVNfQ29weUZpbGVzXzk4Ci0KLVtSTkRJU19Db3B5RmlsZXNfOThdCi11c2I4MDIzLnN5cywgdXNiODAyM3cuc3lzLCAsIDAgCi1ybmRpc21wLnN5cywgcm5kaXNtcHcuc3lzLCAsIDAgCi0KLTsgV2luZG93cyBNaWxsZW5uaXVtIEVkaXRpb24gc3BlY2lmaWMgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotW1JORElTLk1FXQotRGV2aWNlSUQgICAgICAgID0gdXNiODAyMwotTWF4SW5zdGFuY2UgICAgID0gNTEyCi1Ecml2ZXJWZXIgICAgICAgICAgID0gMDMvMzAvMjAwNCwwLjAuMC4wCi1BZGRSZWcgICAgICAgICAgPSBSTkRJU19BZGRSZWdfTUUsIFJORElTX0FkZFJlZ19Db21tb24KLUNoYXJhY3RlcmlzdGljcyA9IDB4ODQgICA7IE5DRl9QSFlTSUNBTCArIE5DRl9IQVNfVUkKLUJ1c1R5cGUgICAgICAgICA9IDE1Ci0KLVtSTkRJU19BZGRSZWdfTUVdCi1IS1IsICwgICAgICAgICAgICAgICBEZXZMb2FkZXIsICAgICAgICAwLCAqbmRpcwotSEtSLCAsICAgICAgICAgICAgICAgRGV2aWNlVnhEcywgICAgICAgMCwgdXNiODAyMy5zeXMKLUhLUiwgTkRJUywgICAgICAgICAgIExvZ0RyaXZlck5hbWUsICAgIDAsICJ1c2I4MDIzIgotSEtSLCBORElTLCAgICAgICAgICAgTWFqb3JOZGlzVmVyc2lvbiwgMSwgNQotSEtSLCBORElTLCAgICAgICAgICAgTWlub3JOZGlzVmVyc2lvbiwgMSwgMAotSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmVXBwZXIsICAgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgRGVmTG93ZXIsICAgICAgICAgMCwgImV0aGVybmV0IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgVXBwZXJSYW5nZSwgICAgICAgMCwgIm5kaXMzLG5kaXM0LG5kaXM1IgotSEtSLCBOZGlcSW50ZXJmYWNlcywgTG93ZXJSYW5nZSwgICAgICAgMCwgImV0aGVybmV0IgotSEtSLCBOZGlcSW5zdGFsbCwgICAgbmRpczMsICAgICAgICAgICAgMCwgIlJORElTX0luc3RhbGxfTUUiCi1IS1IsIE5kaVxJbnN0YWxsLCAgICBuZGlzNCwgICAgICAgICAgICAwLCAiUk5ESVNfSW5zdGFsbF9NRSIKLUhLUiwgTmRpXEluc3RhbGwsICAgIG5kaXM1LCAgICAgICAgICAgIDAsICJSTkRJU19JbnN0YWxsX01FIgotSEtSLCBOZGksICAgICAgICAgICAgRGV2aWNlSWQsICAgICAgICAgMCwgIlVTQlxWSURfMDUyNSZQSURfYTRhMiIKLQotW1JORElTX0luc3RhbGxfTUVdCi1Db3B5RmlsZXM9Uk5ESVNfQ29weUZpbGVzX01FCi0KLVtSTkRJU19Db3B5RmlsZXNfTUVdCi11c2I4MDIzLnN5cywgdXNiODAyM20uc3lzLCAsIDAgCi1ybmRpc21wLnN5cywgcm5kaXNtcG0uc3lzLCAsIDAgCi0KLTsgV2luZG93cyAyMDAwIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1bUk5ESVMuTlRdCi1DaGFyYWN0ZXJpc3RpY3MgPSAweDg0ICAgOyBOQ0ZfUEhZU0lDQUwgKyBOQ0ZfSEFTX1VJCi1CdXNUeXBlICAgICAgICAgPSAxNQotRHJpdmVyVmVyICAgICAgICAgICA9IDAzLzMwLzIwMDQsMC4wLjAuMAotQWRkUmVnICAgICAgICAgID0gUk5ESVNfQWRkUmVnX05ULCBSTkRJU19BZGRSZWdfQ29tbW9uCi1Db3B5RmlsZXMgICAgICAgPSBSTkRJU19Db3B5RmlsZXNfTlQKLQotW1JORElTLk5ULlNlcnZpY2VzXQotQWRkU2VydmljZSA9IFVTQl9STkRJUywgMiwgUk5ESVNfU2VydmljZUluc3RfTlQsIFJORElTX0V2ZW50TG9nCi0KLVtSTkRJU19Db3B5RmlsZXNfTlRdCi07IG5vIHJlbmFtZSBvZiBmaWxlcyBvbiBXaW5kb3dzIDIwMDAsIHVzZSB0aGUgJ2snIG5hbWVzIGFzIGlzCi11c2I4MDIzay5zeXMsICwgLCAwIAotcm5kaXNtcGsuc3lzLCAsICwgMCAKLQotW1JORElTX1NlcnZpY2VJbnN0X05UXQotRGlzcGxheU5hbWUgICAgID0gJVNlcnZpY2VEaXNwbGF5TmFtZSUKLVNlcnZpY2VUeXBlICAgICA9IDEgCi1TdGFydFR5cGUgICAgICAgPSAzIAotRXJyb3JDb250cm9sICAgID0gMSAKLVNlcnZpY2VCaW5hcnkgICA9ICUxMiVcdXNiODAyM2suc3lzICAgIAotTG9hZE9yZGVyR3JvdXAgID0gTkRJUwotQWRkUmVnICAgICAgICAgID0gUk5ESVNfV01JX0FkZFJlZ19OVAotCi1bUk5ESVNfV01JX0FkZFJlZ19OVF0KLUhLUiwgLCBNb2ZJbWFnZVBhdGgsIDB4MDAwMjAwMDAsICJTeXN0ZW0zMlxkcml2ZXJzXHJuZGlzbXBrLnN5cyIKLQotOyBXaW5kb3dzIFhQIHNwZWNpZmljIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KKzsgRERJbnN0YWxsIHNlY3Rpb24KKzsgUmVmZXJlbmNlcyB0aGUgaW4tYnVpbGQgTmV0cm5kaXMuaW5mCiBbUk5ESVMuTlQuNS4xXQotQ2hhcmFjdGVyaXN0aWNzID0gMHg4NCAgIDsgTkNGX1BIWVNJQ0FMICsgTkNGX0hBU19VSQotQnVzVHlwZSAgICAgICAgID0gMTUKLURyaXZlclZlciAgICAgICAgICAgPSAwMy8zMC8yMDA0LDAuMC4wLjAKLUFkZFJlZyAgICAgICAgICA9IFJORElTX0FkZFJlZ19OVCwgUk5ESVNfQWRkUmVnX0NvbW1vbgotOyBubyBjb3B5ZmlsZXMgLSB0aGUgZmlsZXMgYXJlIGFscmVhZHkgaW4gcGxhY2UKK0NoYXJhY3RlcmlzdGljcyAgICAgPSAweDg0ICAgOyBOQ0ZfUEhZU0lDQUwgKyBOQ0ZfSEFTX1VJCitCdXNUeXBlICAgICAgICAgICAgID0gMTUKKzsgTkVWRVIgUkVNT1ZFIFRIRSBGT0xMT1dJTkcgUkVGRVJFTkNFIEZPUiBORVRSTkRJUy5JTkYKK2luY2x1ZGUgICAgICAgICAgICAgPSBuZXRybmRpcy5pbmYKK25lZWRzICAgICAgICAgICAgICAgPSBVc2JfUm5kaXMubmRpCitBZGRSZWcgICAgICAgICAgICAgID0gUm5kaXNfQWRkUmVnX1Zpc3RhCiAKKzsgRERJbnN0YWwuU2VydmljZXMgc2VjdGlvbgogW1JORElTLk5ULjUuMS5TZXJ2aWNlc10KLUFkZFNlcnZpY2UgICAgICA9IFVTQl9STkRJUywgMiwgUk5ESVNfU2VydmljZUluc3RfNTEsIFJORElTX0V2ZW50TG9nCitpbmNsdWRlICAgICAgICAgICAgID0gbmV0cm5kaXMuaW5mCituZWVkcyAgICAgICAgICAgICAgID0gVXNiX1JuZGlzLm5kaS5TZXJ2aWNlcwogCi1bUk5ESVNfU2VydmljZUluc3RfNTFdCi1EaXNwbGF5TmFtZSAgICAgPSAlU2VydmljZURpc3BsYXlOYW1lJQotU2VydmljZVR5cGUgICAgID0gMSAKLVN0YXJ0VHlwZSAgICAgICA9IDMgCi1FcnJvckNvbnRyb2wgICAgPSAxIAotU2VydmljZUJpbmFyeSAgID0gJTEyJVx1c2I4MDIzLnN5cyAgICAKLUxvYWRPcmRlckdyb3VwICA9IE5ESVMKLUFkZFJlZyAgICAgICAgICA9IFJORElTX1dNSV9BZGRSZWdfNTEKKzsgT3B0aW9uYWwgcmVnaXN0cnkgc2V0dGluZ3MuIFlvdSBjYW4gbW9kaWZ5IGFzIG5lZWRlZC4KK1tSTkRJU19BZGRSZWdfVmlzdGFdCitIS1IsIE5ESVxwYXJhbXNcVmlzdGFQcm9wZXJ0eSwgUGFyYW1EZXNjLCAgMCwgJVZpc3RhX1Byb3BlcnR5JQorSEtSLCBORElccGFyYW1zXFZpc3RhUHJvcGVydHksIHR5cGUsICAgICAgIDAsICJlZGl0IgorSEtSLCBORElccGFyYW1zXFZpc3RhUHJvcGVydHksIExpbWl0VGV4dCwgIDAsICIxMiIKK0hLUiwgTkRJXHBhcmFtc1xWaXN0YVByb3BlcnR5LCBVcHBlckNhc2UsICAwLCAiMSIKK0hLUiwgTkRJXHBhcmFtc1xWaXN0YVByb3BlcnR5LCBkZWZhdWx0LCAgICAwLCAiICIKK0hLUiwgTkRJXHBhcmFtc1xWaXN0YVByb3BlcnR5LCBvcHRpb25hbCwgICAwLCAiMSIKIAotW1JORElTX1dNSV9BZGRSZWdfNTFdCi1IS1IsICwgTW9mSW1hZ2VQYXRoLCAweDAwMDIwMDAwLCAiU3lzdGVtMzJcZHJpdmVyc1xybmRpc21wLnN5cyIKLQotOyBXaW5kb3dzIDIwMDAgYW5kIFdpbmRvd3MgWFAgY29tbW9uIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVtSTkRJU19BZGRSZWdfTlRdCi1IS1IsIE5kaSwgICAgICAgICAgICAgICBTZXJ2aWNlLCAgICAgICAgMCwgIlVTQl9STkRJUyIKLUhLUiwgTmRpXEludGVyZmFjZXMsICAgIFVwcGVyUmFuZ2UsICAgICAwLCAibmRpczUiIAotSEtSLCBOZGlcSW50ZXJmYWNlcywgICAgTG93ZXJSYW5nZSwgICAgIDAsICJldGhlcm5ldCIKLQotW1JORElTX0V2ZW50TG9nXQotQWRkUmVnID0gUk5ESVNfRXZlbnRMb2dfQWRkUmVnCi0KLVtSTkRJU19FdmVudExvZ19BZGRSZWddCi1IS1IsICwgRXZlbnRNZXNzYWdlRmlsZSwgMHgwMDAyMDAwMCwgIiUlU3lzdGVtUm9vdCUlXFN5c3RlbTMyXG5ldGV2ZW50LmRsbCIKLUhLUiwgLCBUeXBlc1N1cHBvcnRlZCwgICAweDAwMDEwMDAxLCA3Ci0KLTsgQ29tbW9uIFNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotW1JORElTX0FkZFJlZ19Db21tb25dCi1IS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIFBhcmFtRGVzYywgIDAsICVOZXR3b3JrQWRkcmVzcyUKLUhLUiwgTkRJXHBhcmFtc1xOZXR3b3JrQWRkcmVzcywgdHlwZSwgICAgICAgMCwgImVkaXQiCi1IS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIExpbWl0VGV4dCwgIDAsICIxMiIKLUhLUiwgTkRJXHBhcmFtc1xOZXR3b3JrQWRkcmVzcywgVXBwZXJDYXNlLCAgMCwgIjEiCi1IS1IsIE5ESVxwYXJhbXNcTmV0d29ya0FkZHJlc3MsIGRlZmF1bHQsICAgIDAsICIgIgotSEtSLCBORElccGFyYW1zXE5ldHdvcmtBZGRyZXNzLCBvcHRpb25hbCwgICAwLCAiMSIKLQotW1NvdXJjZURpc2tzTmFtZXNdCi0xPSVTb3VyY2VEaXNrJSwsMQotCi1bU291cmNlRGlza3NGaWxlc10KLXVzYjgwMjNtLnN5cz0xCi1ybmRpc21wbS5zeXM9MQotdXNiODAyM3cuc3lzPTEKLXJuZGlzbXB3LnN5cz0xCi11c2I4MDIzay5zeXM9MQotcm5kaXNtcGsuc3lzPTEKLQotW0Rlc3RpbmF0aW9uRGlyc10KLVJORElTX0NvcHlGaWxlc185OCAgICA9IDEwLCBzeXN0ZW0zMi9kcml2ZXJzCi1STkRJU19Db3B5RmlsZXNfTUUgICAgPSAxMCwgc3lzdGVtMzIvZHJpdmVycwotUk5ESVNfQ29weUZpbGVzX05UICAgID0gMTIKKzsgTm8gc3lzIGNvcHlmaWxlcyAtIHRoZSBzeXMgZmlsZXMgYXJlIGFscmVhZHkgaW4tYnVpbGQKKzsgKHBhcnQgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0pLgorOyBXZSBkbyBub3Qgc3VwcG9ydCBYUCBTUDEtLCAyMDAzIFNQMS0sIE1FLCA5eC4KIAogW1N0cmluZ3NdCi1TZXJ2aWNlRGlzcGxheU5hbWUgICAgPSAiVVNCIFJlbW90ZSBORElTIE5ldHdvcmsgRGV2aWNlIERyaXZlciIKLU5ldHdvcmtBZGRyZXNzICAgICAgICA9ICJOZXR3b3JrIEFkZHJlc3MiCiBMaW51eCAgICAgICAgICAgICAgICAgPSAiTGludXggRGV2ZWxvcGVyIENvbW11bml0eSIKIExpbnV4RGV2aWNlICAgICAgICAgICA9ICJMaW51eCBVU0IgRXRoZXJuZXQvUk5ESVMgR2FkZ2V0IgotU291cmNlRGlzayAgICAgICAgICAgID0gIkV0aGVybmV0L1JORElTIEdhZGdldCBEcml2ZXIgSW5zdGFsbCBEaXNrIgotCitWaXN0YV9Qcm9wZXJ0eSAgICAgICAgPSAiT3B0aW9uYWwgVmlzdGEgUHJvcGVydHkiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3Y0bDItY29udHJvbHMudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWNvbnRyb2xzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzczNzc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWNvbnRyb2xzLnR4dApAQCAtMCwwICsxLDY0OCBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhlIFY0TDIgY29udHJvbCBBUEkgc2VlbXMgc2ltcGxlIGVub3VnaCwgYnV0IHF1aWNrbHkgYmVjb21lcyB2ZXJ5IGhhcmQgdG8KK2ltcGxlbWVudCBjb3JyZWN0bHkgaW4gZHJpdmVycy4gQnV0IG11Y2ggb2YgdGhlIGNvZGUgbmVlZGVkIHRvIGhhbmRsZSBjb250cm9scworaXMgYWN0dWFsbHkgbm90IGRyaXZlciBzcGVjaWZpYyBhbmQgY2FuIGJlIG1vdmVkIHRvIHRoZSBWNEwgY29yZSBmcmFtZXdvcmsuCisKK0FmdGVyIGFsbCwgdGhlIG9ubHkgcGFydCB0aGF0IGEgZHJpdmVyIGRldmVsb3BlciBpcyBpbnRlcmVzdGVkIGluIGlzOgorCisxKSBIb3cgZG8gSSBhZGQgYSBjb250cm9sPworMikgSG93IGRvIEkgc2V0IHRoZSBjb250cm9sJ3MgdmFsdWU/IChpLmUuIHNfY3RybCkKKworQW5kIG9jY2FzaW9uYWxseToKKworMykgSG93IGRvIEkgZ2V0IHRoZSBjb250cm9sJ3MgdmFsdWU/IChpLmUuIGdfdm9sYXRpbGVfY3RybCkKKzQpIEhvdyBkbyBJIHZhbGlkYXRlIHRoZSB1c2VyJ3MgcHJvcG9zZWQgY29udHJvbCB2YWx1ZT8gKGkuZS4gdHJ5X2N0cmwpCisKK0FsbCB0aGUgcmVzdCBpcyBzb21ldGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBjZW50cmFsbHkuCisKK1RoZSBjb250cm9sIGZyYW1ld29yayB3YXMgY3JlYXRlZCBpbiBvcmRlciB0byBpbXBsZW1lbnQgYWxsIHRoZSBydWxlcyBvZiB0aGUKK1Y0TDIgc3BlY2lmaWNhdGlvbiB3aXRoIHJlc3BlY3QgdG8gY29udHJvbHMgaW4gYSBjZW50cmFsIHBsYWNlLiBBbmQgdG8gbWFrZQorbGlmZSBhcyBlYXN5IGFzIHBvc3NpYmxlIGZvciB0aGUgZHJpdmVyIGRldmVsb3Blci4KKworTm90ZSB0aGF0IHRoZSBjb250cm9sIGZyYW1ld29yayByZWxpZXMgb24gdGhlIHByZXNlbmNlIG9mIGEgc3RydWN0IHY0bDJfZGV2aWNlCitmb3IgVjRMMiBkcml2ZXJzIGFuZCBzdHJ1Y3QgdjRsMl9zdWJkZXYgZm9yIHN1Yi1kZXZpY2UgZHJpdmVycy4KKworCitPYmplY3RzIGluIHRoZSBmcmFtZXdvcmsKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgdHdvIG1haW4gb2JqZWN0czoKKworVGhlIHY0bDJfY3RybCBvYmplY3QgZGVzY3JpYmVzIHRoZSBjb250cm9sIHByb3BlcnRpZXMgYW5kIGtlZXBzIHRyYWNrIG9mIHRoZQorY29udHJvbCdzIHZhbHVlIChib3RoIHRoZSBjdXJyZW50IHZhbHVlIGFuZCB0aGUgcHJvcG9zZWQgbmV3IHZhbHVlKS4KKwordjRsMl9jdHJsX2hhbmRsZXIgaXMgdGhlIG9iamVjdCB0aGF0IGtlZXBzIHRyYWNrIG9mIGNvbnRyb2xzLiBJdCBtYWludGFpbnMgYQorbGlzdCBvZiB2NGwyX2N0cmwgb2JqZWN0cyB0aGF0IGl0IG93bnMgYW5kIGFub3RoZXIgbGlzdCBvZiByZWZlcmVuY2VzIHRvCitjb250cm9scywgcG9zc2libHkgdG8gY29udHJvbHMgb3duZWQgYnkgb3RoZXIgaGFuZGxlcnMuCisKKworQmFzaWMgdXNhZ2UgZm9yIFY0TDIgYW5kIHN1Yi1kZXZpY2UgZHJpdmVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxKSBQcmVwYXJlIHRoZSBkcml2ZXI6CisKKzEuMSkgQWRkIHRoZSBoYW5kbGVyIHRvIHlvdXIgZHJpdmVyJ3MgdG9wLWxldmVsIHN0cnVjdDoKKworCXN0cnVjdCBmb29fZGV2IHsKKwkJLi4uCisJCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7CisJCS4uLgorCX07CisKKwlzdHJ1Y3QgZm9vX2RldiAqZm9vOworCisxLjIpIEluaXRpYWxpemUgdGhlIGhhbmRsZXI6CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZmb28tPmN0cmxfaGFuZGxlciwgbnJfb2ZfY29udHJvbHMpOworCisgIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBoaW50IHRlbGxpbmcgdGhlIGZ1bmN0aW9uIGhvdyBtYW55IGNvbnRyb2xzIHRoaXMKKyAgaGFuZGxlciBpcyBleHBlY3RlZCB0byBoYW5kbGUuIEl0IHdpbGwgYWxsb2NhdGUgYSBoYXNodGFibGUgYmFzZWQgb24gdGhpcworICBpbmZvcm1hdGlvbi4gSXQgaXMgYSBoaW50IG9ubHkuCisKKzEuMykgSG9vayB0aGUgY29udHJvbCBoYW5kbGVyIGludG8gdGhlIGRyaXZlcjoKKworMS4zLjEpIEZvciBWNEwyIGRyaXZlcnMgZG8gdGhpczoKKworCXN0cnVjdCBmb29fZGV2IHsKKwkJLi4uCisJCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwkJLi4uCisJCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7CisJCS4uLgorCX07CisKKwlmb28tPnY0bDJfZGV2LmN0cmxfaGFuZGxlciA9ICZmb28tPmN0cmxfaGFuZGxlcjsKKworICBXaGVyZSBmb28tPnY0bDJfZGV2IGlzIG9mIHR5cGUgc3RydWN0IHY0bDJfZGV2aWNlLgorCisgIEZpbmFsbHksIHJlbW92ZSBhbGwgY29udHJvbCBmdW5jdGlvbnMgZnJvbSB5b3VyIHY0bDJfaW9jdGxfb3BzOgorICB2aWRpb2NfcXVlcnljdHJsLCB2aWRpb2NfcXVlcnltZW51LCB2aWRpb2NfZ19jdHJsLCB2aWRpb2Nfc19jdHJsLAorICB2aWRpb2NfZ19leHRfY3RybHMsIHZpZGlvY190cnlfZXh0X2N0cmxzIGFuZCB2aWRpb2Nfc19leHRfY3RybHMuCisgIFRob3NlIGFyZSBub3cgbm8gbG9uZ2VyIG5lZWRlZC4KKworMS4zLjIpIEZvciBzdWItZGV2aWNlIGRyaXZlcnMgZG8gdGhpczoKKworCXN0cnVjdCBmb29fZGV2IHsKKwkJLi4uCisJCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwkJLi4uCisJCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBjdHJsX2hhbmRsZXI7CisJCS4uLgorCX07CisKKwlmb28tPnNkLmN0cmxfaGFuZGxlciA9ICZmb28tPmN0cmxfaGFuZGxlcjsKKworICBXaGVyZSBmb28tPnNkIGlzIG9mIHR5cGUgc3RydWN0IHY0bDJfc3ViZGV2LgorCisgIEFuZCBzZXQgYWxsIGNvcmUgY29udHJvbCBvcHMgaW4geW91ciBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdG8gdGhlc2UKKyAgaGVscGVyczoKKworCS5xdWVyeWN0cmwgPSB2NGwyX3N1YmRldl9xdWVyeWN0cmwsCisJLnF1ZXJ5bWVudSA9IHY0bDJfc3ViZGV2X3F1ZXJ5bWVudSwKKwkuZ19jdHJsID0gdjRsMl9zdWJkZXZfZ19jdHJsLAorCS5zX2N0cmwgPSB2NGwyX3N1YmRldl9zX2N0cmwsCisJLmdfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfZ19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzLAorCS5zX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzLAorCisgIE5vdGU6IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gb25seS4gT25jZSBhbGwgVjRMMiBkcml2ZXJzIHRoYXQgZGVwZW5kCisgIG9uIHN1YmRldiBkcml2ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIGNvbnRyb2wgZnJhbWV3b3JrIHRoZXNlIGhlbHBlcnMgd2lsbAorICBubyBsb25nZXIgYmUgbmVlZGVkLgorCisxLjQpIENsZWFuIHVwIHRoZSBoYW5kbGVyIGF0IHRoZSBlbmQ6CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZmb28tPmN0cmxfaGFuZGxlcik7CisKKworMikgQWRkIGNvbnRyb2xzOgorCitZb3UgYWRkIG5vbi1tZW51IGNvbnRyb2xzIGJ5IGNhbGxpbmcgdjRsMl9jdHJsX25ld19zdGQ6CisKKwlzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3X3N0ZChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMsCisJCQl1MzIgaWQsIHMzMiBtaW4sIHMzMiBtYXgsIHUzMiBzdGVwLCBzMzIgZGVmKTsKKworTWVudSBjb250cm9scyBhcmUgYWRkZWQgYnkgY2FsbGluZyB2NGwyX2N0cmxfbmV3X3N0ZF9tZW51OgorCisJc3RydWN0IHY0bDJfY3RybCAqdjRsMl9jdHJsX25ld19zdGRfbWVudShzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMsCisJCQl1MzIgaWQsIHMzMiBtYXgsIHMzMiBza2lwX21hc2ssIHMzMiBkZWYpOworCitUaGVzZSBmdW5jdGlvbnMgYXJlIHR5cGljYWxseSBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIHY0bDJfY3RybF9oYW5kbGVyX2luaXQ6CisKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZmb28tPmN0cmxfaGFuZGxlciwgbnJfb2ZfY29udHJvbHMpOworCXY0bDJfY3RybF9uZXdfc3RkKCZmb28tPmN0cmxfaGFuZGxlciwgJmZvb19jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDI1NSwgMSwgMTI4KTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmZm9vLT5jdHJsX2hhbmRsZXIsICZmb29fY3RybF9vcHMsCisJCQlWNEwyX0NJRF9DT05UUkFTVCwgMCwgMjU1LCAxLCAxMjgpOworCXY0bDJfY3RybF9uZXdfc3RkX21lbnUoJmZvby0+Y3RybF9oYW5kbGVyLCAmZm9vX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCisJCQlWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaLCAwLAorCQkJVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfRElTQUJMRUQpOworCS4uLgorCWlmIChmb28tPmN0cmxfaGFuZGxlci5lcnJvcikgeworCQlpbnQgZXJyID0gZm9vLT5jdHJsX2hhbmRsZXIuZXJyb3I7CisKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmZm9vLT5jdHJsX2hhbmRsZXIpOworCQlyZXR1cm4gZXJyOworCX0KKworVGhlIHY0bDJfY3RybF9uZXdfc3RkIGZ1bmN0aW9uIHJldHVybnMgdGhlIHY0bDJfY3RybCBwb2ludGVyIHRvIHRoZSBuZXcKK2NvbnRyb2wsIGJ1dCBpZiB5b3UgZG8gbm90IG5lZWQgdG8gYWNjZXNzIHRoZSBwb2ludGVyIG91dHNpZGUgdGhlIGNvbnRyb2wgb3BzLAordGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIHN0b3JlIGl0LgorCitUaGUgdjRsMl9jdHJsX25ld19zdGQgZnVuY3Rpb24gd2lsbCBmaWxsIGluIG1vc3QgZmllbGRzIGJhc2VkIG9uIHRoZSBjb250cm9sCitJRCBleGNlcHQgZm9yIHRoZSBtaW4sIG1heCwgc3RlcCBhbmQgZGVmYXVsdCB2YWx1ZXMuIFRoZXNlIGFyZSBwYXNzZWQgaW4gdGhlCitsYXN0IGZvdXIgYXJndW1lbnRzLiBUaGVzZSB2YWx1ZXMgYXJlIGRyaXZlciBzcGVjaWZpYyB3aGlsZSBjb250cm9sIGF0dHJpYnV0ZXMKK2xpa2UgdHlwZSwgbmFtZSwgZmxhZ3MgYXJlIGFsbCBnbG9iYWwuIFRoZSBjb250cm9sJ3MgY3VycmVudCB2YWx1ZSB3aWxsIGJlIHNldAordG8gdGhlIGRlZmF1bHQgdmFsdWUuCisKK1RoZSB2NGwyX2N0cmxfbmV3X3N0ZF9tZW51IGZ1bmN0aW9uIGlzIHZlcnkgc2ltaWxhciBidXQgaXQgaXMgdXNlZCBmb3IgbWVudQorY29udHJvbHMuIFRoZXJlIGlzIG5vIG1pbiBhcmd1bWVudCBzaW5jZSB0aGF0IGlzIGFsd2F5cyAwIGZvciBtZW51IGNvbnRyb2xzLAorYW5kIGluc3RlYWQgb2YgYSBzdGVwIHRoZXJlIGlzIGEgc2tpcF9tYXNrIGFyZ3VtZW50OiBpZiBiaXQgWCBpcyAxLCB0aGVuIG1lbnUKK2l0ZW0gWCBpcyBza2lwcGVkLgorCitOb3RlIHRoYXQgaWYgc29tZXRoaW5nIGZhaWxzLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gTlVMTCBvciBhbiBlcnJvciBhbmQKK3NldCBjdHJsX2hhbmRsZXItPmVycm9yIHRvIHRoZSBlcnJvciBjb2RlLiBJZiBjdHJsX2hhbmRsZXItPmVycm9yIHdhcyBhbHJlYWR5CitzZXQsIHRoZW4gaXQgd2lsbCBqdXN0IHJldHVybiBhbmQgZG8gbm90aGluZy4gVGhpcyBpcyBhbHNvIHRydWUgZm9yCit2NGwyX2N0cmxfaGFuZGxlcl9pbml0IGlmIGl0IGNhbm5vdCBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUuCisKK1RoaXMgbWFrZXMgaXQgZWFzeSB0byBpbml0IHRoZSBoYW5kbGVyIGFuZCBqdXN0IGFkZCBhbGwgY29udHJvbHMgYW5kIG9ubHkgY2hlY2sKK3RoZSBlcnJvciBjb2RlIGF0IHRoZSBlbmQuIFNhdmVzIGEgbG90IG9mIHJlcGV0aXRpdmUgZXJyb3IgY2hlY2tpbmcuCisKK0l0IGlzIHJlY29tbWVuZGVkIHRvIGFkZCBjb250cm9scyBpbiBhc2NlbmRpbmcgY29udHJvbCBJRCBvcmRlcjogaXQgd2lsbCBiZQorYSBiaXQgZmFzdGVyIHRoYXQgd2F5LgorCiszKSBPcHRpb25hbGx5IGZvcmNlIGluaXRpYWwgY29udHJvbCBzZXR1cDoKKworCXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCZmb28tPmN0cmxfaGFuZGxlcik7CisKK1RoaXMgd2lsbCBjYWxsIHNfY3RybCBmb3IgYWxsIGNvbnRyb2xzIHVuY29uZGl0aW9uYWxseS4gRWZmZWN0aXZlbHkgdGhpcworaW5pdGlhbGl6ZXMgdGhlIGhhcmR3YXJlIHRvIHRoZSBkZWZhdWx0IGNvbnRyb2wgdmFsdWVzLiBJdCBpcyByZWNvbW1lbmRlZAordGhhdCB5b3UgZG8gdGhpcyBhcyB0aGlzIGVuc3VyZXMgdGhhdCBib3RoIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYW5kCit0aGUgaGFyZHdhcmUgYXJlIGluIHN5bmMuCisKKzQpIEZpbmFsbHk6IGltcGxlbWVudCB0aGUgdjRsMl9jdHJsX29wcworCisJc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGZvb19jdHJsX29wcyA9IHsKKwkJLnNfY3RybCA9IGZvb19zX2N0cmwsCisJfTsKKworVXN1YWxseSBhbGwgeW91IG5lZWQgaXMgc19jdHJsOgorCisJc3RhdGljIGludCBmb29fc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCisJeworCQlzdHJ1Y3QgZm9vICpzdGF0ZSA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgZm9vLCBjdHJsX2hhbmRsZXIpOworCisJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQkJd3JpdGVfcmVnKDB4MTIzLCBjdHJsLT52YWwpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQl3cml0ZV9yZWcoMHg0NTYsIGN0cmwtPnZhbCk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKK1RoZSBjb250cm9sIG9wcyBhcmUgY2FsbGVkIHdpdGggdGhlIHY0bDJfY3RybCBwb2ludGVyIGFzIGFyZ3VtZW50LgorVGhlIG5ldyBjb250cm9sIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLCBzbyBhbGwgeW91IG5lZWQgdG8gZG8gaXMKK3RvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLgorCitZb3UncmUgZG9uZSEgQW5kIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgbW9zdCBvZiB0aGUgZHJpdmVycyB3ZSBoYXZlLiBObyBuZWVkCit0byBkbyBhbnkgdmFsaWRhdGlvbiBvZiBjb250cm9sIHZhbHVlcywgb3IgaW1wbGVtZW50IFFVRVJZQ1RSTC9RVUVSWU1FTlUuIEFuZAorRy9TX0NUUkwgYXMgd2VsbCBhcyBHL1RSWS9TX0VYVF9DVFJMUyBhcmUgYXV0b21hdGljYWxseSBzdXBwb3J0ZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSByZW1haW5kZXIgb2YgdGhpcyBkb2N1bWVudCBkZWFscyB3aXRoIG1vcmUgYWR2YW5jZWQgdG9waWNzIGFuZCBzY2VuYXJpb3MuCitJbiBwcmFjdGljZSB0aGUgYmFzaWMgdXNhZ2UgYXMgZGVzY3JpYmVkIGFib3ZlIGlzIHN1ZmZpY2llbnQgZm9yIG1vc3QgZHJpdmVycy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0luaGVyaXRpbmcgQ29udHJvbHMKKz09PT09PT09PT09PT09PT09PT0KKworV2hlbiBhIHN1Yi1kZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIGEgVjRMMiBkcml2ZXIgYnkgY2FsbGluZwordjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCkgYW5kIHRoZSBjdHJsX2hhbmRsZXIgZmllbGRzIG9mIGJvdGggdjRsMl9zdWJkZXYKK2FuZCB2NGwyX2RldmljZSBhcmUgc2V0LCB0aGVuIHRoZSBjb250cm9scyBvZiB0aGUgc3ViZGV2IHdpbGwgYmVjb21lCithdXRvbWF0aWNhbGx5IGF2YWlsYWJsZSBpbiB0aGUgVjRMMiBkcml2ZXIgYXMgd2VsbC4gSWYgdGhlIHN1YmRldiBkcml2ZXIKK2NvbnRhaW5zIGNvbnRyb2xzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgVjRMMiBkcml2ZXIsIHRoZW4gdGhvc2Ugd2lsbCBiZQorc2tpcHBlZCAoc28gYSBWNEwyIGRyaXZlciBjYW4gYWx3YXlzIG92ZXJyaWRlIGEgc3ViZGV2IGNvbnRyb2wpLgorCitXaGF0IGhhcHBlbnMgaGVyZSBpcyB0aGF0IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigpIGNhbGxzCit2NGwyX2N0cmxfYWRkX2hhbmRsZXIoKSBhZGRpbmcgdGhlIGNvbnRyb2xzIG9mIHRoZSBzdWJkZXYgdG8gdGhlIGNvbnRyb2xzCitvZiB2NGwyX2RldmljZS4KKworCitBY2Nlc3NpbmcgQ29udHJvbCBWYWx1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgdjRsMl9jdHJsIHN0cnVjdCBjb250YWlucyB0aGVzZSB0d28gdW5pb25zOgorCisJLyogVGhlIGN1cnJlbnQgY29udHJvbCB2YWx1ZS4gKi8KKwl1bmlvbiB7CisJCXMzMiB2YWw7CisJCXM2NCB2YWw2NDsKKwkJY2hhciAqc3RyaW5nOworCX0gY3VyOworCisJLyogVGhlIG5ldyBjb250cm9sIHZhbHVlLiAqLworCXVuaW9uIHsKKwkJczMyIHZhbDsKKwkJczY0IHZhbDY0OworCQljaGFyICpzdHJpbmc7CisJfTsKKworV2l0aGluIHRoZSBjb250cm9sIG9wcyB5b3UgY2FuIGZyZWVseSB1c2UgdGhlc2UuIFRoZSB2YWwgYW5kIHZhbDY0IHNwZWFrIGZvcgordGhlbXNlbHZlcy4gVGhlIHN0cmluZyBwb2ludGVycyBwb2ludCB0byBjaGFyYWN0ZXIgYnVmZmVycyBvZiBsZW5ndGgKK2N0cmwtPm1heGltdW0gKyAxLCBhbmQgYXJlIGFsd2F5cyAwLXRlcm1pbmF0ZWQuCisKK0luIG1vc3QgY2FzZXMgJ2N1cicgY29udGFpbnMgdGhlIGN1cnJlbnQgY2FjaGVkIGNvbnRyb2wgdmFsdWUuIFdoZW4geW91IGNyZWF0ZQorYSBuZXcgY29udHJvbCB0aGlzIHZhbHVlIGlzIG1hZGUgaWRlbnRpY2FsIHRvIHRoZSBkZWZhdWx0IHZhbHVlLiBBZnRlciBjYWxsaW5nCit2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgpIHRoaXMgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBoYXJkd2FyZS4gSXQgaXMgZ2VuZXJhbGx5CithIGdvb2QgaWRlYSB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisKK1doZW5ldmVyIGEgbmV3IHZhbHVlIGlzIHNldCB0aGF0IG5ldyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGNhY2hlZC4gVGhpcyBtZWFucwordGhhdCBtb3N0IGRyaXZlcnMgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoZSBnX3ZvbGF0aWxlX2N0cmwoKSBvcC4gVGhlCitleGNlcHRpb24gaXMgZm9yIGNvbnRyb2xzIHRoYXQgcmV0dXJuIGEgdm9sYXRpbGUgcmVnaXN0ZXIgc3VjaCBhcyBhIHNpZ25hbAorc3RyZW5ndGggcmVhZC1vdXQgdGhhdCBjaGFuZ2VzIGNvbnRpbnVvdXNseS4gSW4gdGhhdCBjYXNlIHlvdSB3aWxsIG5lZWQgdG8KK2ltcGxlbWVudCBnX3ZvbGF0aWxlX2N0cmwgbGlrZSB0aGlzOgorCisJc3RhdGljIGludCBmb29fZ192b2xhdGlsZV9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCisJeworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJCWN0cmwtPmN1ci52YWwgPSByZWFkX3JlZygweDEyMyk7CisJCQlicmVhazsKKwkJfQorCX0KKworVGhlICduZXcgdmFsdWUnIHVuaW9uIGlzIG5vdCB1c2VkIGluIGdfdm9sYXRpbGVfY3RybC4gSW4gZ2VuZXJhbCBjb250cm9scwordGhhdCBuZWVkIHRvIGltcGxlbWVudCBnX3ZvbGF0aWxlX2N0cmwgYXJlIHJlYWQtb25seSBjb250cm9scy4KKworVG8gbWFyayBhIGNvbnRyb2wgYXMgdm9sYXRpbGUgeW91IGhhdmUgdG8gc2V0IHRoZSBpc192b2xhdGlsZSBmbGFnOgorCisJY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKCZzZC0+Y3RybF9oYW5kbGVyLCAuLi4pOworCWlmIChjdHJsKQorCQljdHJsLT5pc192b2xhdGlsZSA9IDE7CisKK0ZvciB0cnkvc19jdHJsIHRoZSBuZXcgdmFsdWVzIChpLmUuIGFzIHBhc3NlZCBieSB0aGUgdXNlcikgYXJlIGZpbGxlZCBpbiBhbmQKK3lvdSBjYW4gbW9kaWZ5IHRoZW0gaW4gdHJ5X2N0cmwgb3Igc2V0IHRoZW0gaW4gc19jdHJsLiBUaGUgJ2N1cicgdW5pb24KK2NvbnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlLCB3aGljaCB5b3UgY2FuIHVzZSAoYnV0IG5vdCBjaGFuZ2UhKSBhcyB3ZWxsLgorCitJZiBzX2N0cmwgcmV0dXJucyAwIChPSyksIHRoZW4gdGhlIGNvbnRyb2wgZnJhbWV3b3JrIHdpbGwgY29weSB0aGUgbmV3IGZpbmFsCit2YWx1ZXMgdG8gdGhlICdjdXInIHVuaW9uLgorCitXaGlsZSBpbiBnX3ZvbGF0aWxlL3MvdHJ5X2N0cmwgeW91IGNhbiBhY2Nlc3MgdGhlIHZhbHVlIG9mIGFsbCBjb250cm9scyBvd25lZAorYnkgdGhlIHNhbWUgaGFuZGxlciBzaW5jZSB0aGUgaGFuZGxlcidzIGxvY2sgaXMgaGVsZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzCit0aGUgdmFsdWUgb2YgY29udHJvbHMgb3duZWQgYnkgb3RoZXIgaGFuZGxlcnMsIHRoZW4geW91IGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsCitub3QgdG8gaW50cm9kdWNlIGRlYWRsb2Nrcy4KKworT3V0c2lkZSBvZiB0aGUgY29udHJvbCBvcHMgeW91IGhhdmUgdG8gZ28gdGhyb3VnaCB0byBoZWxwZXIgZnVuY3Rpb25zIHRvIGdldAorb3Igc2V0IGEgc2luZ2xlIGNvbnRyb2wgdmFsdWUgc2FmZWx5IGluIHlvdXIgZHJpdmVyOgorCisJczMyIHY0bDJfY3RybF9nX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCk7CisJaW50IHY0bDJfY3RybF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCwgczMyIHZhbCk7CisKK1RoZXNlIGZ1bmN0aW9ucyBnbyB0aHJvdWdoIHRoZSBjb250cm9sIGZyYW1ld29yayBqdXN0IGFzIFZJRElPQ19HL1NfQ1RSTCBpb2N0bHMKK2RvLiBEb24ndCB1c2UgdGhlc2UgaW5zaWRlIHRoZSBjb250cm9sIG9wcyBnX3ZvbGF0aWxlL3MvdHJ5X2N0cmwsIHRob3VnaCwgdGhhdAord2lsbCByZXN1bHQgaW4gYSBkZWFkbG9jayBzaW5jZSB0aGVzZSBoZWxwZXJzIGxvY2sgdGhlIGhhbmRsZXIgYXMgd2VsbC4KKworWW91IGNhbiBhbHNvIHRha2UgdGhlIGhhbmRsZXIgbG9jayB5b3Vyc2VsZjoKKworCW11dGV4X2xvY2soJnN0YXRlLT5jdHJsX2hhbmRsZXIubG9jayk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU3RyaW5nIHZhbHVlIGlzICclcydcbiIsIGN0cmwxLT5jdXIuc3RyaW5nKTsKKwlwcmludGsoS0VSTl9JTkZPICJJbnRlZ2VyIHZhbHVlIGlzICclcydcbiIsIGN0cmwyLT5jdXIudmFsKTsKKwltdXRleF91bmxvY2soJnN0YXRlLT5jdHJsX2hhbmRsZXIubG9jayk7CisKKworTWVudSBDb250cm9scworPT09PT09PT09PT09PQorCitUaGUgdjRsMl9jdHJsIHN0cnVjdCBjb250YWlucyB0aGlzIHVuaW9uOgorCisJdW5pb24geworCQl1MzIgc3RlcDsKKwkJdTMyIG1lbnVfc2tpcF9tYXNrOworCX07CisKK0ZvciBtZW51IGNvbnRyb2xzIG1lbnVfc2tpcF9tYXNrIGlzIHVzZWQuIFdoYXQgaXQgZG9lcyBpcyB0aGF0IGl0IGFsbG93cyB5b3UKK3RvIGVhc2lseSBleGNsdWRlIGNlcnRhaW4gbWVudSBpdGVtcy4gVGhpcyBpcyB1c2VkIGluIHRoZSBWSURJT0NfUVVFUllNRU5VCitpbXBsZW1lbnRhdGlvbiB3aGVyZSB5b3UgY2FuIHJldHVybiAtRUlOVkFMIGlmIGEgY2VydGFpbiBtZW51IGl0ZW0gaXMgbm90CitwcmVzZW50LiBOb3RlIHRoYXQgVklESU9DX1FVRVJZQ1RSTCBhbHdheXMgcmV0dXJucyBhIHN0ZXAgdmFsdWUgb2YgMSBmb3IKK21lbnUgY29udHJvbHMuCisKK0EgZ29vZCBleGFtcGxlIGlzIHRoZSBNUEVHIEF1ZGlvIExheWVyIElJIEJpdHJhdGUgbWVudSBjb250cm9sIHdoZXJlIHRoZQorbWVudSBpcyBhIGxpc3Qgb2Ygc3RhbmRhcmRpemVkIHBvc3NpYmxlIGJpdHJhdGVzLiBCdXQgaW4gcHJhY3RpY2UgaGFyZHdhcmUKK2ltcGxlbWVudGF0aW9ucyB3aWxsIG9ubHkgc3VwcG9ydCBhIHN1YnNldCBvZiB0aG9zZS4gQnkgc2V0dGluZyB0aGUgc2tpcAorbWFzayB5b3UgY2FuIHRlbGwgdGhlIGZyYW1ld29yayB3aGljaCBtZW51IGl0ZW1zIHNob3VsZCBiZSBza2lwcGVkLiBTZXR0aW5nCitpdCB0byAwIG1lYW5zIHRoYXQgYWxsIG1lbnUgaXRlbXMgYXJlIHN1cHBvcnRlZC4KKworWW91IHNldCB0aGlzIG1hc2sgZWl0aGVyIHRocm91Z2ggdGhlIHY0bDJfY3RybF9jb25maWcgc3RydWN0IGZvciBhIGN1c3RvbQorY29udHJvbCwgb3IgYnkgY2FsbGluZyB2NGwyX2N0cmxfbmV3X3N0ZF9tZW51KCkuCisKKworQ3VzdG9tIENvbnRyb2xzCis9PT09PT09PT09PT09PT0KKworRHJpdmVyIHNwZWNpZmljIGNvbnRyb2xzIGNhbiBiZSBjcmVhdGVkIHVzaW5nIHY0bDJfY3RybF9uZXdfY3VzdG9tKCk6CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgY3RybF9maWx0ZXIgPSB7CisJCS5vcHMgPSAmY3RybF9jdXN0b21fb3BzLAorCQkuaWQgPSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVIsCisJCS5uYW1lID0gIlNwYXRpYWwgRmlsdGVyIiwKKwkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCisJCS5tYXggPSAxNSwKKwkJLnN0ZXAgPSAxLAorCX07CisKKwljdHJsID0gdjRsMl9jdHJsX25ld19jdXN0b20oJmZvby0+Y3RybF9oYW5kbGVyLCAmY3RybF9maWx0ZXIsIE5VTEwpOworCitUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgcHJpdiBwb2ludGVyIHdoaWNoIGNhbiBiZSBzZXQgdG8gZHJpdmVyLXNwZWNpZmljCitwcml2YXRlIGRhdGEuCisKK1RoZSB2NGwyX2N0cmxfY29uZmlnIHN0cnVjdCBhbHNvIGhhcyBmaWVsZHMgdG8gc2V0IHRoZSBpc19wcml2YXRlIGFuZCBpc192b2xhdGlsZQorZmxhZ3MuCisKK0lmIHRoZSBuYW1lIGZpZWxkIGlzIG5vdCBzZXQsIHRoZW4gdGhlIGZyYW1ld29yayB3aWxsIGFzc3VtZSB0aGlzIGlzIGEgc3RhbmRhcmQKK2NvbnRyb2wgYW5kIHdpbGwgZmlsbCBpbiB0aGUgbmFtZSwgdHlwZSBhbmQgZmxhZ3MgZmllbGRzIGFjY29yZGluZ2x5LgorCisKK0FjdGl2ZSBhbmQgR3JhYmJlZCBDb250cm9scworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBnZXQgbW9yZSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBjb250cm9scywgdGhlbiB5b3UgbWF5IGhhdmUgdG8KK2FjdGl2YXRlIGFuZCBkZWFjdGl2YXRlIGNvbnRyb2xzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIENocm9tYSBBR0MgY29udHJvbCBpcworb24sIHRoZW4gdGhlIENocm9tYSBHYWluIGNvbnRyb2wgaXMgaW5hY3RpdmUuIFRoYXQgaXMsIHlvdSBtYXkgc2V0IGl0LCBidXQKK3RoZSB2YWx1ZSB3aWxsIG5vdCBiZSB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBhcyBsb25nIGFzIHRoZSBhdXRvbWF0aWMgZ2FpbgorY29udHJvbCBpcyBvbi4gVHlwaWNhbGx5IHVzZXIgaW50ZXJmYWNlcyBjYW4gZGlzYWJsZSBzdWNoIGlucHV0IGZpZWxkcy4KKworWW91IGNhbiBzZXQgdGhlICdhY3RpdmUnIHN0YXR1cyB1c2luZyB2NGwyX2N0cmxfYWN0aXZhdGUoKS4gQnkgZGVmYXVsdCBhbGwKK2NvbnRyb2xzIGFyZSBhY3RpdmUuIE5vdGUgdGhhdCB0aGUgZnJhbWV3b3JrIGRvZXMgbm90IGNoZWNrIGZvciB0aGlzIGZsYWcuCitJdCBpcyBtZWFudCBwdXJlbHkgZm9yIEdVSXMuIFRoZSBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gd2l0aGluCitzX2N0cmwuCisKK1RoZSBvdGhlciBmbGFnIGlzIHRoZSAnZ3JhYmJlZCcgZmxhZy4gQSBncmFiYmVkIGNvbnRyb2wgbWVhbnMgdGhhdCB5b3UgY2Fubm90CitjaGFuZ2UgaXQgYmVjYXVzZSBpdCBpcyBpbiB1c2UgYnkgc29tZSByZXNvdXJjZS4gVHlwaWNhbCBleGFtcGxlcyBhcmUgTVBFRworYml0cmF0ZSBjb250cm9scyB0aGF0IGNhbm5vdCBiZSBjaGFuZ2VkIHdoaWxlIGNhcHR1cmluZyBpcyBpbiBwcm9ncmVzcy4KKworSWYgYSBjb250cm9sIGlzIHNldCB0byAnZ3JhYmJlZCcgdXNpbmcgdjRsMl9jdHJsX2dyYWIoKSwgdGhlbiB0aGUgZnJhbWV3b3JrCit3aWxsIHJldHVybiAtRUJVU1kgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHNldCB0aGlzIGNvbnRyb2wuIFRoZQordjRsMl9jdHJsX2dyYWIoKSBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGRyaXZlciB3aGVuIGl0CitzdGFydHMgb3Igc3RvcHMgc3RyZWFtaW5nLgorCisKK0NvbnRyb2wgQ2x1c3RlcnMKKz09PT09PT09PT09PT09PT0KKworQnkgZGVmYXVsdCBhbGwgY29udHJvbHMgYXJlIGluZGVwZW5kZW50IGZyb20gdGhlIG90aGVycy4gQnV0IGluIG1vcmUKK2NvbXBsZXggc2NlbmFyaW9zIHlvdSBjYW4gZ2V0IGRlcGVuZGVuY2llcyBmcm9tIG9uZSBjb250cm9sIHRvIGFub3RoZXIuCitJbiB0aGF0IGNhc2UgeW91IG5lZWQgdG8gJ2NsdXN0ZXInIHRoZW06CisKKwlzdHJ1Y3QgZm9vIHsKKwkJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKKyNkZWZpbmUgQVVESU9fQ0xfVk9MVU1FICgwKQorI2RlZmluZSBBVURJT19DTF9NVVRFICAgKDEpCisJCXN0cnVjdCB2NGwyX2N0cmwgKmF1ZGlvX2NsdXN0ZXJbMl07CisJCS4uLgorCX07CisKKwlzdGF0ZS0+YXVkaW9fY2x1c3RlcltBVURJT19DTF9WT0xVTUVdID0KKwkJdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5jdHJsX2hhbmRsZXIsIC4uLik7CisJc3RhdGUtPmF1ZGlvX2NsdXN0ZXJbQVVESU9fQ0xfTVVURV0gPQorCQl2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmN0cmxfaGFuZGxlciwgLi4uKTsKKwl2NGwyX2N0cmxfY2x1c3RlcihBUlJBWV9TSVpFKHN0YXRlLT5hdWRpb19jbHVzdGVyKSwgc3RhdGUtPmF1ZGlvX2NsdXN0ZXIpOworCitGcm9tIG5vdyBvbiB3aGVuZXZlciBvbmUgb3IgbW9yZSBvZiB0aGUgY29udHJvbHMgYmVsb25naW5nIHRvIHRoZSBzYW1lCitjbHVzdGVyIGlzIHNldCAob3IgJ2dvdHRlbicsIG9yICd0cmllZCcpLCBvbmx5IHRoZSBjb250cm9sIG9wcyBvZiB0aGUgZmlyc3QKK2NvbnRyb2wgKCd2b2x1bWUnIGluIHRoaXMgZXhhbXBsZSkgaXMgY2FsbGVkLiBZb3UgZWZmZWN0aXZlbHkgY3JlYXRlIGEgbmV3Citjb21wb3NpdGUgY29udHJvbC4gU2ltaWxhciB0byBob3cgYSAnc3RydWN0JyB3b3JrcyBpbiBDLgorCitTbyB3aGVuIHNfY3RybCBpcyBjYWxsZWQgd2l0aCBWNEwyX0NJRF9BVURJT19WT0xVTUUgYXMgYXJndW1lbnQsIHlvdSBzaG91bGQgc2V0CithbGwgdHdvIGNvbnRyb2xzIGJlbG9uZ2luZyB0byB0aGUgYXVkaW9fY2x1c3RlcjoKKworCXN0YXRpYyBpbnQgZm9vX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQorCXsKKwkJc3RydWN0IGZvbyAqc3RhdGUgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IGZvbywgY3RybF9oYW5kbGVyKTsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiB7CisJCQlzdHJ1Y3QgdjRsMl9jdHJsICptdXRlID0gY3RybC0+Y2x1c3RlcltBVURJT19DTF9NVVRFXTsKKworCQkJd3JpdGVfcmVnKDB4MTIzLCBtdXRlLT52YWwgPyAwIDogY3RybC0+dmFsKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCQl3cml0ZV9yZWcoMHg0NTYsIGN0cmwtPnZhbCk7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKK0luIHRoZSBleGFtcGxlIGFib3ZlIHRoZSBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQgZm9yIHRoZSBWT0xVTUUgY2FzZToKKworCWN0cmwgPT0gY3RybC0+Y2x1c3RlcltBVURJT19DTF9WT0xVTUVdID09IHN0YXRlLT5hdWRpb19jbHVzdGVyW0FVRElPX0NMX1ZPTFVNRV0KKwljdHJsLT5jbHVzdGVyW0FVRElPX0NMX01VVEVdID09IHN0YXRlLT5hdWRpb19jbHVzdGVyW0FVRElPX0NMX01VVEVdCisKK05vdGUgdGhhdCBjb250cm9scyBpbiBhIGNsdXN0ZXIgbWF5IGJlIE5VTEwuIEZvciBleGFtcGxlLCBpZiBmb3Igc29tZQorcmVhc29uIG11dGUgd2FzIG5ldmVyIGFkZGVkIChiZWNhdXNlIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhhdAorcGFydGljdWxhciBmZWF0dXJlKSwgdGhlbiBtdXRlIHdpbGwgYmUgTlVMTC4gU28gaW4gdGhhdCBjYXNlIHdlIGhhdmUgYQorY2x1c3RlciBvZiAyIGNvbnRyb2xzLCBvZiB3aGljaCBvbmx5IDEgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBUaGUKK29ubHkgcmVzdHJpY3Rpb24gaXMgdGhhdCB0aGUgZmlyc3QgY29udHJvbCBvZiB0aGUgY2x1c3RlciBtdXN0IGFsd2F5cyBiZQorcHJlc2VudCwgc2luY2UgdGhhdCBpcyB0aGUgJ21hc3RlcicgY29udHJvbCBvZiB0aGUgY2x1c3Rlci4gVGhlIG1hc3RlcgorY29udHJvbCBpcyB0aGUgb25lIHRoYXQgaWRlbnRpZmllcyB0aGUgY2x1c3RlciBhbmQgdGhhdCBwcm92aWRlcyB0aGUKK3BvaW50ZXIgdG8gdGhlIHY0bDJfY3RybF9vcHMgc3RydWN0IHRoYXQgaXMgdXNlZCBmb3IgdGhhdCBjbHVzdGVyLgorCitPYnZpb3VzbHksIGFsbCBjb250cm9scyBpbiB0aGUgY2x1c3RlciBhcnJheSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIGVpdGhlcgorYSB2YWxpZCBjb250cm9sIG9yIHRvIE5VTEwuCisKKworVklESU9DX0xPR19TVEFUVVMgU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlvY3RsIGFsbG93IHlvdSB0byBkdW1wIHRoZSBjdXJyZW50IHN0YXR1cyBvZiBhIGRyaXZlciB0byB0aGUga2VybmVsIGxvZy4KK1RoZSB2NGwyX2N0cmxfaGFuZGxlcl9sb2dfc3RhdHVzKGN0cmxfaGFuZGxlciwgcHJlZml4KSBjYW4gYmUgdXNlZCB0byBkdW1wIHRoZQordmFsdWUgb2YgdGhlIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBnaXZlbiBoYW5kbGVyIHRvIHRoZSBsb2cuIFlvdSBjYW4gc3VwcGx5IGEKK3ByZWZpeCBhcyB3ZWxsLiBJZiB0aGUgcHJlZml4IGRpZG4ndCBlbmQgd2l0aCBhIHNwYWNlLCB0aGVuICc6ICcgd2lsbCBiZSBhZGRlZAorZm9yIHlvdS4KKworCitEaWZmZXJlbnQgSGFuZGxlcnMgZm9yIERpZmZlcmVudCBWaWRlbyBOb2RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXN1YWxseSB0aGUgVjRMMiBkcml2ZXIgaGFzIGp1c3Qgb25lIGNvbnRyb2wgaGFuZGxlciB0aGF0IGlzIGdsb2JhbCBmb3IKK2FsbCB2aWRlbyBub2Rlcy4gQnV0IHlvdSBjYW4gYWxzbyBzcGVjaWZ5IGRpZmZlcmVudCBjb250cm9sIGhhbmRsZXJzIGZvcgorZGlmZmVyZW50IHZpZGVvIG5vZGVzLiBZb3UgY2FuIGRvIHRoYXQgYnkgbWFudWFsbHkgc2V0dGluZyB0aGUgY3RybF9oYW5kbGVyCitmaWVsZCBvZiBzdHJ1Y3QgdmlkZW9fZGV2aWNlLgorCitUaGF0IGlzIG5vIHByb2JsZW0gaWYgdGhlcmUgYXJlIG5vIHN1YmRldnMgaW52b2x2ZWQgYnV0IGlmIHRoZXJlIGFyZSwgdGhlbgoreW91IG5lZWQgdG8gYmxvY2sgdGhlIGF1dG9tYXRpYyBtZXJnaW5nIG9mIHN1YmRldiBjb250cm9scyB0byB0aGUgZ2xvYmFsCitjb250cm9sIGhhbmRsZXIuIFlvdSBkbyB0aGF0IGJ5IHNpbXBseSBzZXR0aW5nIHRoZSBjdHJsX2hhbmRsZXIgZmllbGQgaW4KK3N0cnVjdCB2NGwyX2RldmljZSB0byBOVUxMLiBOb3cgdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCkgd2lsbCBubyBsb25nZXIKK21lcmdlIHN1YmRldiBjb250cm9scy4KKworQWZ0ZXIgZWFjaCBzdWJkZXYgd2FzIGFkZGVkLCB5b3Ugd2lsbCB0aGVuIGhhdmUgdG8gY2FsbCB2NGwyX2N0cmxfYWRkX2hhbmRsZXIKK21hbnVhbGx5IHRvIGFkZCB0aGUgc3ViZGV2J3MgY29udHJvbCBoYW5kbGVyIChzZC0+Y3RybF9oYW5kbGVyKSB0byB0aGUgZGVzaXJlZAorY29udHJvbCBoYW5kbGVyLiBUaGlzIGNvbnRyb2wgaGFuZGxlciBtYXkgYmUgc3BlY2lmaWMgdG8gdGhlIHZpZGVvX2RldmljZSBvcgorZm9yIGEgc3Vic2V0IG9mIHZpZGVvX2RldmljZSdzLiBGb3IgZXhhbXBsZTogdGhlIHJhZGlvIGRldmljZSBub2RlcyBvbmx5IGhhdmUKK2F1ZGlvIGNvbnRyb2xzLCB3aGlsZSB0aGUgdmlkZW8gYW5kIHZiaSBkZXZpY2Ugbm9kZXMgc2hhcmUgdGhlIHNhbWUgY29udHJvbAoraGFuZGxlciBmb3IgdGhlIGF1ZGlvIGFuZCB2aWRlbyBjb250cm9scy4KKworSWYgeW91IHdhbnQgdG8gaGF2ZSBvbmUgaGFuZGxlciAoZS5nLiBmb3IgYSByYWRpbyBkZXZpY2Ugbm9kZSkgaGF2ZSBhIHN1YnNldAorb2YgYW5vdGhlciBoYW5kbGVyIChlLmcuIGZvciBhIHZpZGVvIGRldmljZSBub2RlKSwgdGhlbiB5b3Ugc2hvdWxkIGZpcnN0IGFkZAordGhlIGNvbnRyb2xzIHRvIHRoZSBmaXJzdCBoYW5kbGVyLCBhZGQgdGhlIG90aGVyIGNvbnRyb2xzIHRvIHRoZSBzZWNvbmQKK2hhbmRsZXIgYW5kIGZpbmFsbHkgYWRkIHRoZSBmaXJzdCBoYW5kbGVyIHRvIHRoZSBzZWNvbmQuIEZvciBleGFtcGxlOgorCisJdjRsMl9jdHJsX25ld19zdGQoJnJhZGlvX2N0cmxfaGFuZGxlciwgJnJhZGlvX29wcywgVjRMMl9DSURfQVVESU9fVk9MVU1FLCAuLi4pOworCXY0bDJfY3RybF9uZXdfc3RkKCZyYWRpb19jdHJsX2hhbmRsZXIsICZyYWRpb19vcHMsIFY0TDJfQ0lEX0FVRElPX01VVEUsIC4uLik7CisJdjRsMl9jdHJsX25ld19zdGQoJnZpZGVvX2N0cmxfaGFuZGxlciwgJnZpZGVvX29wcywgVjRMMl9DSURfQlJJR0hUTkVTUywgLi4uKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmdmlkZW9fY3RybF9oYW5kbGVyLCAmdmlkZW9fb3BzLCBWNEwyX0NJRF9DT05UUkFTVCwgLi4uKTsKKwl2NGwyX2N0cmxfYWRkX2hhbmRsZXIoJnZpZGVvX2N0cmxfaGFuZGxlciwgJnJhZGlvX2N0cmxfaGFuZGxlcik7CisKK09yIHlvdSBjYW4gYWRkIHNwZWNpZmljIGNvbnRyb2xzIHRvIGEgaGFuZGxlcjoKKworCXZvbHVtZSA9IHY0bDJfY3RybF9uZXdfc3RkKCZ2aWRlb19jdHJsX2hhbmRsZXIsICZvcHMsIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgLi4uKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmdmlkZW9fY3RybF9oYW5kbGVyLCAmb3BzLCBWNEwyX0NJRF9CUklHSFRORVNTLCAuLi4pOworCXY0bDJfY3RybF9uZXdfc3RkKCZ2aWRlb19jdHJsX2hhbmRsZXIsICZvcHMsIFY0TDJfQ0lEX0NPTlRSQVNULCAuLi4pOworCXY0bDJfY3RybF9hZGRfY3RybCgmcmFkaW9fY3RybF9oYW5kbGVyLCB2b2x1bWUpOworCitXaGF0IHlvdSBzaG91bGQgbm90IGRvIGlzIG1ha2UgdHdvIGlkZW50aWNhbCBjb250cm9scyBmb3IgdHdvIGhhbmRsZXJzLgorRm9yIGV4YW1wbGU6CisKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmcmFkaW9fY3RybF9oYW5kbGVyLCAmcmFkaW9fb3BzLCBWNEwyX0NJRF9BVURJT19NVVRFLCAuLi4pOworCXY0bDJfY3RybF9uZXdfc3RkKCZ2aWRlb19jdHJsX2hhbmRsZXIsICZ2aWRlb19vcHMsIFY0TDJfQ0lEX0FVRElPX01VVEUsIC4uLik7CisKK1RoaXMgd291bGQgYmUgYmFkIHNpbmNlIG11dGluZyB0aGUgcmFkaW8gd291bGQgbm90IGNoYW5nZSB0aGUgdmlkZW8gbXV0ZQorY29udHJvbC4gVGhlIHJ1bGUgaXMgdG8gaGF2ZSBvbmUgY29udHJvbCBmb3IgZWFjaCBoYXJkd2FyZSAna25vYicgdGhhdCB5b3UKK2NhbiB0d2lkZGxlLgorCisKK0ZpbmRpbmcgQ29udHJvbHMKKz09PT09PT09PT09PT09PT0KKworTm9ybWFsbHkgeW91IGhhdmUgY3JlYXRlZCB0aGUgY29udHJvbHMgeW91cnNlbGYgYW5kIHlvdSBjYW4gc3RvcmUgdGhlIHN0cnVjdAordjRsMl9jdHJsIHBvaW50ZXIgaW50byB5b3VyIG93biBzdHJ1Y3QuCisKK0J1dCBzb21ldGltZXMgeW91IG5lZWQgdG8gZmluZCBhIGNvbnRyb2wgZnJvbSBhbm90aGVyIGhhbmRsZXIgdGhhdCB5b3UgZG8KK25vdCBvd24uIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0byBmaW5kIGEgdm9sdW1lIGNvbnRyb2wgZnJvbSBhIHN1YmRldi4KKworWW91IGNhbiBkbyB0aGF0IGJ5IGNhbGxpbmcgdjRsMl9jdHJsX2ZpbmQ6CisKKwlzdHJ1Y3QgdjRsMl9jdHJsICp2b2x1bWU7CisKKwl2b2x1bWUgPSB2NGwyX2N0cmxfZmluZChzZC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9BVURJT19WT0xVTUUpOworCitTaW5jZSB2NGwyX2N0cmxfZmluZCB3aWxsIGxvY2sgdGhlIGhhbmRsZXIgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCB3aGVyZSB5b3UKK3VzZSBpdC4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgbm90IGEgZ29vZCBpZGVhOgorCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKKworCXY0bDJfY3RybF9uZXdfc3RkKCZjdHJsX2hhbmRsZXIsICZ2aWRlb19vcHMsIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIC4uLik7CisJdjRsMl9jdHJsX25ld19zdGQoJmN0cmxfaGFuZGxlciwgJnZpZGVvX29wcywgVjRMMl9DSURfQ09OVFJBU1QsIC4uLik7CisKKy4uLmFuZCBpbiB2aWRlb19vcHMuc19jdHJsOgorCisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljb250cmFzdCA9IHY0bDJfZmluZF9jdHJsKCZjdHJsX2hhbmRsZXIsIFY0TDJfQ0lEX0NPTlRSQVNUKTsKKwkJLi4uCisKK1doZW4gc19jdHJsIGlzIGNhbGxlZCBieSB0aGUgZnJhbWV3b3JrIHRoZSBjdHJsX2hhbmRsZXIubG9jayBpcyBhbHJlYWR5IHRha2VuLCBzbworYXR0ZW1wdGluZyB0byBmaW5kIGFub3RoZXIgY29udHJvbCBmcm9tIHRoZSBzYW1lIGhhbmRsZXIgd2lsbCBkZWFkbG9jay4KKworSXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGZyb20gaW5zaWRlIHRoZSBjb250cm9sIG9wcy4KKworCitJbmhlcml0aW5nIENvbnRyb2xzCis9PT09PT09PT09PT09PT09PT09CisKK1doZW4gb25lIGNvbnRyb2wgaGFuZGxlciBpcyBhZGRlZCB0byBhbm90aGVyIHVzaW5nIHY0bDJfY3RybF9hZGRfaGFuZGxlciwgdGhlbgorYnkgZGVmYXVsdCBhbGwgY29udHJvbHMgZnJvbSBvbmUgYXJlIG1lcmdlZCB0byB0aGUgb3RoZXIuIEJ1dCBhIHN1YmRldiBtaWdodAoraGF2ZSBsb3ctbGV2ZWwgY29udHJvbHMgdGhhdCBtYWtlIHNlbnNlIGZvciBzb21lIGFkdmFuY2VkIGVtYmVkZGVkIHN5c3RlbSwgYnV0Citub3Qgd2hlbiBpdCBpcyB1c2VkIGluIGNvbnN1bWVyLWxldmVsIGhhcmR3YXJlLiBJbiB0aGF0IGNhc2UgeW91IHdhbnQgdG8ga2VlcAordGhvc2UgbG93LWxldmVsIGNvbnRyb2xzIGxvY2FsIHRvIHRoZSBzdWJkZXYuIFlvdSBjYW4gZG8gdGhpcyBieSBzaW1wbHkKK3NldHRpbmcgdGhlICdpc19wcml2YXRlJyBmbGFnIG9mIHRoZSBjb250cm9sIHRvIDE6CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgY3RybF9wcml2YXRlID0geworCQkub3BzID0gJmN0cmxfY3VzdG9tX29wcywKKwkJLmlkID0gVjRMMl9DSURfLi4uLAorCQkubmFtZSA9ICJTb21lIFByaXZhdGUgQ29udHJvbCIsCisJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm1heCA9IDE1LAorCQkuc3RlcCA9IDEsCisJCS5pc19wcml2YXRlID0gMSwKKwl9OworCisJY3RybCA9IHY0bDJfY3RybF9uZXdfY3VzdG9tKCZmb28tPmN0cmxfaGFuZGxlciwgJmN0cmxfcHJpdmF0ZSwgTlVMTCk7CisKK1RoZXNlIGNvbnRyb2xzIHdpbGwgbm93IGJlIHNraXBwZWQgd2hlbiB2NGwyX2N0cmxfYWRkX2hhbmRsZXIgaXMgY2FsbGVkLgorCisKK1Y0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgQ29udHJvbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29udHJvbHMgb2YgdGhpcyB0eXBlIGNhbiBiZSB1c2VkIGJ5IEdVSXMgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGNsYXNzLgorQSBmdWxseSBmZWF0dXJlZCBHVUkgY2FuIG1ha2UgYSBkaWFsb2cgd2l0aCBtdWx0aXBsZSB0YWJzIHdpdGggZWFjaCB0YWIKK2NvbnRhaW5pbmcgdGhlIGNvbnRyb2xzIGJlbG9uZ2luZyB0byBhIHBhcnRpY3VsYXIgY29udHJvbCBjbGFzcy4gVGhlIG5hbWUgb2YKK2VhY2ggdGFiIGNhbiBiZSBmb3VuZCBieSBxdWVyeWluZyBhIHNwZWNpYWwgY29udHJvbCB3aXRoIElEIDxjb250cm9sIGNsYXNzIHwgMT4uCisKK0RyaXZlcnMgZG8gbm90IGhhdmUgdG8gY2FyZSBhYm91dCB0aGlzLiBUaGUgZnJhbWV3b3JrIHdpbGwgYXV0b21hdGljYWxseSBhZGQKK2EgY29udHJvbCBvZiB0aGlzIHR5cGUgd2hlbmV2ZXIgdGhlIGZpcnN0IGNvbnRyb2wgYmVsb25naW5nIHRvIGEgbmV3IGNvbnRyb2wKK2NsYXNzIGlzIGFkZGVkLgorCisKK0RpZmZlcmVuY2VzIGZyb20gdGhlIFNwZWMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlcmUgYXJlIGEgZmV3IHBsYWNlcyB3aGVyZSB0aGUgZnJhbWV3b3JrIGFjdHMgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZnJvbSB0aGUKK1Y0TDIgU3BlY2lmaWNhdGlvbi4gVGhvc2UgZGlmZmVyZW5jZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24uIFdlIHdpbGwKK2hhdmUgdG8gc2VlIHdoZXRoZXIgd2UgbmVlZCB0byBhZGp1c3QgdGhlIHNwZWMgb3Igbm90LgorCisxKSBJdCBpcyBubyBsb25nZXIgcmVxdWlyZWQgdG8gaGF2ZSBhbGwgY29udHJvbHMgY29udGFpbmVkIGluIGEKK3Y0bDJfZXh0X2NvbnRyb2wgYXJyYXkgYmUgZnJvbSB0aGUgc2FtZSBjb250cm9sIGNsYXNzLiBUaGUgZnJhbWV3b3JrIHdpbGwgYmUKK2FibGUgdG8gaGFuZGxlIGFueSB0eXBlIG9mIGNvbnRyb2wgaW4gdGhlIGFycmF5LiBZb3UgbmVlZCB0byBzZXQgY3RybF9jbGFzcwordG8gMCBpbiBvcmRlciB0byBlbmFibGUgdGhpcy4gSWYgY3RybF9jbGFzcyBpcyBub24temVybywgdGhlbiBpdCB3aWxsIHN0aWxsCitjaGVjayB0aGF0IGFsbCBjb250cm9scyBiZWxvbmcgdG8gdGhhdCBjb250cm9sIGNsYXNzLgorCitJZiB5b3Ugc2V0IGN0cmxfY2xhc3MgdG8gMCBhbmQgY291bnQgdG8gMCwgdGhlbiBpdCB3aWxsIG9ubHkgcmV0dXJuIGFuIGVycm9yCitpZiB0aGVyZSBhcmUgbm8gY29udHJvbHMgYXQgYWxsLgorCisyKSBDbGFyaWZpZWQgdGhlIHdheSBlcnJvcl9pZHggd29ya3MuIEZvciBnZXQgYW5kIHNldCBpdCB3aWxsIGJlIGVxdWFsIHRvCitjb3VudCBpZiBub3RoaW5nIHdhcyBkb25lIHlldC4gSWYgaXQgaXMgbGVzcyB0aGFuIGNvdW50IHRoZW4gb25seSB0aGUgY29udHJvbHMKK3VwIHRvIGVycm9yX2lkeC0xIHdlcmUgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuCisKKzMpIFdoZW4gYXR0ZW1wdGluZyB0byByZWFkIGEgYnV0dG9uIGNvbnRyb2wgdGhlIGZyYW1ld29yayB3aWxsIHJldHVybiAtRUFDQ0VTCitpbnN0ZWFkIG9mIC1FSU5WQUwgYXMgc3RhdGVkIGluIHRoZSBzcGVjLiBJdCBzZWVtcyB0byBtYWtlIG1vcmUgc2Vuc2Ugc2luY2UKK2J1dHRvbiBjb250cm9scyBhcmUgd3JpdGUtb25seSBjb250cm9scy4KKworNCkgQXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIHJlYWQtb25seSBjb250cm9sIHdpbGwgcmV0dXJuIC1FQUNDRVMgaW5zdGVhZCBvZgorLUVJTlZBTCBhcyB0aGUgc3BlYyBzYXlzLgorCis1KSBUaGUgc3BlYyBkb2VzIG5vdCBtZW50aW9uIHdoYXQgc2hvdWxkIGhhcHBlbiB3aGVuIHlvdSB0cnkgdG8gc2V0L2dldCBhCitjb250cm9sIGNsYXNzIGNvbnRyb2xzLiBpdnR2IGN1cnJlbnRseSByZXR1cm5zIC1FSU5WQUwgKGluZGljYXRpbmcgdGhhdCB0aGUKK2NvbnRyb2wgSUQgZG9lcyBub3QgZXhpc3QpIHdoaWxlIHRoZSBmcmFtZXdvcmsgd2lsbCByZXR1cm4gLUVBQ0NFUywgd2hpY2gKK21ha2VzIG1vcmUgc2Vuc2UuCisKKworUHJvcG9zYWxzIGZvciBFeHRlbnNpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZSBpZGVhcyBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgdG8gdGhlIHNwZWM6CisKKzEpIEFkZCBhIFY0TDJfQ1RSTF9GTEFHX0hFWCB0byBoYXZlIHZhbHVlcyBzaG93biBhcyBoZXhhZGVjaW1hbCBpbnN0ZWFkIG9mCitkZWNpbWFsLiBVc2VmdWwgZm9yIGUuZy4gdmlkZW9fbXV0ZV95dXYuCisKKzIpIEl0IGlzIHBvc3NpYmxlIHRvIG1hcmsgaW4gdGhlIGNvbnRyb2xzIGFycmF5IHdoaWNoIGNvbnRyb2xzIGhhdmUgYmVlbgorc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gYW5kIHdoaWNoIGZhaWxlZCBieSBmb3IgZXhhbXBsZSBhZGRpbmcgYSBiaXQgdG8gdGhlCitjb250cm9sIElELiBOb3Qgc3VyZSBpZiBpdCBpcyB3b3J0aCB0aGUgZWZmb3J0LCB0aG91Z2guCisKKzMpIFRyeWluZyB0byBzZXQgdm9sYXRpbGUgaW5hY3RpdmUgY29udHJvbHMgc2hvdWxkIHJlc3VsdCBpbiAtRUFDQ0VTUy4KKworNCkgQWRkIGEgbmV3IGZsYWcgdG8gbWFyayB2b2xhdGlsZSBjb250cm9scy4gQW55IGFwcGxpY2F0aW9uIHRoYXQgd2FudHMKK3RvIHN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgY29udHJvbHMgY2FuIHRoZW4gc2tpcCB2b2xhdGlsZSBpbmFjdGl2ZSBjb250cm9scy4KK0N1cnJlbnRseSBpdCBpcyBub3QgcG9zc2libGUgdG8gZGV0ZWN0IHN1Y2ggY29udHJvbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni96ZXJvLXBhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi94ODYvemVyby1wYWdlLnR4dAppbmRleCBmZWIzN2UxLi5jZjU0MzdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni96ZXJvLXBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24veDg2L3plcm8tcGFnZS50eHQKQEAgLTE4LDYgKzE4LDcgQEAKIDA4MC8wMTAJQUxMCWhkMF9pbmZvCWhkMCBkaXNrIHBhcmFtZXRlciwgT0JTT0xFVEUhIQogMDkwLzAxMAlBTEwJaGQxX2luZm8JaGQxIGRpc2sgcGFyYW1ldGVyLCBPQlNPTEVURSEhCiAwQTAvMDEwCUFMTAlzeXNfZGVzY190YWJsZQlTeXN0ZW0gZGVzY3JpcHRpb24gdGFibGUgKHN0cnVjdCBzeXNfZGVzY190YWJsZSkKKzBCMC8wMTAJQUxMCW9scGNfb2Z3X2hlYWRlcglPTFBDJ3MgT3BlbkZpcm13YXJlIENJRiBhbmQgZnJpZW5kcwogMTQwLzA4MAlBTEwJZWRpZF9pbmZvCVZpZGVvIG1vZGUgc2V0dXAgKHN0cnVjdCBlZGlkX2luZm8pCiAxQzAvMDIwCUFMTAllZmlfaW5mbwlFRkkgMzIgaW5mb3JtYXRpb24gKHN0cnVjdCBlZmlfaW5mbykKIDFFMC8wMDQJQUxMCWFsa19tZW1fawlBbHRlcm5hdGl2ZSBtZW0gY2hlY2ssIGluIEtCCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDExZTM0ZDUuLjM5ZDhjNWMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC01NzQsNyArNTc0LDYgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbXRkL25hbmQvYmNtX3VtaV9uYW5kLmMKIEY6CWRyaXZlcnMvbXRkL25hbmQvYmNtX3VtaV9iY2guYwotRjoJZHJpdmVycy9tdGQvbmFuZC9iY21fdW1pX2hhbW1pbmcuYwogRjoJZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JjbV91bWkuaAogCiBBUk0vQ0FWSVVNIE5FVFdPUktTIENOUzNYWFggTUFDSElORSBTVVBQT1JUCkBAIC02MTcsMTAgKzYxNiwxMCBAQAogUzoJTWFpbnRhaW5lZAogCiBBUk0vQ09SVElOQSBTWVNURU1TIEdFTUlOSSBBUk0gQVJDSElURUNUVVJFCi1NOglQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQGdtYWlsLmNvbT4KK006CUhhbnMgVWxsaSBLcm9sbCA8dWxsaS5rcm9sbEBnb29nbGVtYWlsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1UOglnaXQgZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9saW51eC1nZW1pbmkvbWFpbmxpbmUuZ2l0Ci1TOglPZGQgRml4ZXMKK1Q6CWdpdCBnaXQ6Ly9naXQuYmVybGlvcy5kZS9nZW1pbmktYm9hcmQKK1M6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtZ2VtaW5pLwogCiBBUk0vRUJTQTExMCBNQUNISU5FIFNVUFBPUlQKQEAgLTY0Miw5ICs2NDEsMTAgQEAKIEY6CWFyY2gvYXJtL21hY2gtcHhhL2V6eC5jCiAKIEFSTS9GQVJBREFZIEZBNTI2IFBPUlQKLU06CVBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgorTToJSGFucyBVbGxpIEtyb2xsIDx1bGxpLmtyb2xsQGdvb2dsZW1haWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKLVM6CU9kZCBGaXhlcworUzoJTWFpbnRhaW5lZAorVDoJZ2l0Oi8vZ2l0LmJlcmxpb3MuZGUvZ2VtaW5pLWJvYXJkCiBGOglhcmNoL2FybS9tbS8qLWZhKgogCiBBUk0vRk9PVEJSSURHRSBBUkNISVRFQ1RVUkUKQEAgLTY5Myw2ICs2OTMsMTMgQEAKIEY6CWFyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYwogRjoJYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2pvcm5hZGE3MjAuaAogCitBUk0vSU5DT01FIFBYQTI3MCBTVVBQT1JUCitNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY29tZS5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gtcHhhL2luY29tZS5oCisKIEFSTS9JTlRFTCBJT1AzMlggQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIE06CURhbiBXaWxsaWFtcyA8ZGFuLmoud2lsbGlhbXNAaW50ZWwuY29tPgpAQCAtOTQ4LDggKzk1NSw5IEBACiBNOglQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPgogTToJTWFnbnVzIERhbW0gPG1hZ251cy5kYW1tQGdtYWlsLmNvbT4KIEw6CWxpbnV4LXNoQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZXRoYWwvZ2VuZXNpcy0yLjYuZ2l0CiBXOglodHRwOi8vb3NzLnJlbmVzYXMuY29tCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1zaC9saXN0LworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZXRoYWwvZ2VuZXNpcy0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWFyY2gvYXJtL21hY2gtc2htb2JpbGUvCiBGOglkcml2ZXJzL3NoLwpAQCAtOTc1LDEyICs5ODMsMTEgQEAKIEY6CWRyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCiBGOglkcml2ZXJzL3dhdGNoZG9nL251YzkwMF93ZHQuYwogRjoJZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYwotRjoJZHJpdmVycy9tdGQvbmFuZC93OTBwOTEwX25hbmQuYworRjoJZHJpdmVycy9tdGQvbmFuZC9udWM5MDBfbmFuZC5jCiBGOglkcml2ZXJzL3J0Yy9ydGMtbnVjOTAwLmMKIEY6CWRyaXZlcnMvc3BpL3NwaV9udWM5MDAuYwogRjoJZHJpdmVycy91c2IvaG9zdC9laGNpLXc5MHg5MDAuYwogRjoJZHJpdmVycy92aWRlby9udWM5MDBmYi5jCi1GOglkcml2ZXJzL3NvdW5kL3NvYy9udWM5MDAvCiAKIEFSTS9VMzAwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KQEAgLTEwMTAsMTQgKzEwMTcsMTQgQEAKIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKLUY6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC1weGEvdnBhYzI3MC5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdnBhYzI3MC5oCiAKIEFSTS9aSVBJVCBaMiBTVVBQT1JUCiBNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtL21hY2gtcHhhL3oyLmMKLUY6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC1weGEvejIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3oyLmgKIAogQVNDNzYyMSBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgogTToJR2VvcmdlIEpvc2VwaCA8Z2VvcmdlLmpvc2VwaEBmYWlydmlldzUuY29tPgpAQCAtMTA4Nyw3ICsxMDk0LDYgQEAKIEFUSEVST1MgQVRIOUsgV0lSRUxFU1MgRFJJVkVSCiBNOgkiTHVpcyBSLiBSb2RyaWd1ZXoiIDxscm9kcmlndWV6QGF0aGVyb3MuY29tPgogTToJSm91bmkgTWFsaW5lbiA8am1hbGluZW5AYXRoZXJvcy5jb20+Ci1NOglTdWppdGggTWFub2hhcmFuIDxTdWppdGguTWFub2hhcmFuQGF0aGVyb3MuY29tPgogTToJVmFzYW50aGFrdW1hciBUaGlhZ2FyYWphbiA8dmFzYW50aEBhdGhlcm9zLmNvbT4KIE06CVNlbnRoaWwgQmFsYXN1YnJhbWFuaWFuIDxzZW50aGlsa3VtYXJAYXRoZXJvcy5jb20+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKQEAgLTEyNTMsOCArMTI1OSw3IEBACiBGOglkcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb20qCiAKIEJFRlMgRklMRSBTWVNURU0KLU06CSJTZXJnZXkgUy4gS29zdHlsaW92IiA8cmF0aGFtYWhhdGFAcGhwNC5ydT4KLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9iZWZzLnR4dAogRjoJZnMvYmVmcy8KIApAQCAtMTczNCw2ICsxNzM5LDggQEAKIE06CU5laWwgSG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+CiBMOglsaW51eC1jcnlwdG9Admdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCitGOgljcnlwdG8vYW5zaV9jcHJuZy5jCitGOgljcnlwdG8vcm5nLmMKIAogQ1M1NTM1IEF1ZGlvIEFMU0EgZHJpdmVyCiBNOglKYXlhIEt1bWFyIDxqYXlha3VtYXIuYWxzYUBnbWFpbC5jb20+CkBAIC0xODkyLDYgKzE4OTksNyBAQAogREVMTCBXTUkgRVhUUkFTIERSSVZFUgogTToJTWF0dGhldyBHYXJyZXR0IDxtamc1OUBzcmNmLnVjYW0ub3JnPgogUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC13bWkuYwogCiBERVZJQ0UgTlVNQkVSIFJFR0lTVFJZCiBNOglUb3JiZW4gTWF0aGlhc2VuIDxkZXZpY2VAbGFuYW5hLm9yZz4KQEAgLTIwMjEsNiArMjAyOSw3IEBACiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FpcmxpZWQvZHJtLTIuNi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZ3B1L2RybS8KK0Y6CWluY2x1ZGUvZHJtLwogCiBEU0NDNCBEUklWRVIKIE06CUZyYW5jb2lzIFJvbWlldSA8cm9taWV1QGZyLnpvcmVpbC5jb20+CkBAIC0yMjAzLDYgKzIyMTIsMTIgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3QvY2I3MTAtbW1jLioKIEY6CWluY2x1ZGUvbGludXgvY2I3MTAuaAogCitFTkUgS0IyNDI2IChFTkUwMTAwL0VORTAyMFhYKSBJTkZSQVJFRCBSRUNFSVZFUgorTToJTWF4aW0gTGV2aXRza3kgPG1heGltbGV2aXRza3lAZ21haWwuY29tPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9tZWRpYS9JUi9lbmVfaXIuYworRjoJZHJpdmVycy9tZWRpYS9JUi9lbmVfaXIuaAorCiBFUFNPTiAxMzU1IEZSQU1FQlVGRkVSIERSSVZFUgogTToJQ2hyaXN0b3BoZXIgSG9vdmVyIDxjaEBtdXJnYXRyb2lkLmNvbT4KIE06CUNocmlzdG9waGVyIEhvb3ZlciA8Y2hAaHBsLmhwLmNvbT4KQEAgLTIyMzcsNiArMjI1Miw3IEBACiBGOglkcml2ZXJzL25ldC9ldGgxNmkuYwogCiBFWFQyIEZJTEUgU1lTVEVNCitNOglKYW4gS2FyYSA8amFja0BzdXNlLmN6PgogTDoJbGludXgtZXh0NEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKQEAgLTIyNDQsOCArMjI2MCw5IEBACiBGOglpbmNsdWRlL2xpbnV4L2V4dDIqCiAKIEVYVDMgRklMRSBTWVNURU0KK006CUphbiBLYXJhIDxqYWNrQHN1c2UuY3o+CiBNOglBbmRyZXcgTW9ydG9uIDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgotTToJQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAc3VuLmNvbT4KK006CUFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyLmtlcm5lbEBkaWxnZXIuY2E+CiBMOglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMjI1NCw3ICsyMjcxLDcgQEAKIAogRVhUNCBGSUxFIFNZU1RFTQogTToJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgotTToJQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAc3VuLmNvbT4KK006CUFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyLmtlcm5lbEBkaWxnZXIuY2E+CiBMOglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnCiBROglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1leHQ0L2xpc3QvCkBAIC0yMzIyLDYgKzIzMzksNyBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9maXJld2lyZS8KIEY6CWluY2x1ZGUvbGludXgvZmlyZXdpcmUqLmgKK0Y6CXRvb2xzL2ZpcmV3aXJlLwogCiBGSVJNV0FSRSBMT0FERVIgKHJlcXVlc3RfZmlybXdhcmUpCiBTOglPcnBoYW4KQEAgLTMyMDcsNiArMzIyNSwxMyBAQAogRjoJZHJpdmVycy9tZWRpYS92aWRlby9pdnR2LwogRjoJaW5jbHVkZS9saW51eC9pdnR2KgogCitKQzQyLjQgVEVNUEVSQVRVUkUgU0VOU09SIERSSVZFUgorTToJR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9od21vbi9qYzQyLmMKK0Y6CURvY3VtZW50YXRpb24vaHdtb24vamM0MgorCiBKRlMgRklMRVNZU1RFTQogTToJRGF2ZSBLbGVpa2FtcCA8c2hhZ2d5QGxpbnV4LnZuZXQuaWJtLmNvbT4KIEw6CWpmcy1kaXNjdXNzaW9uQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApAQCAtMzQwMywxMyArMzQyOCw2IEBACiBGOgltbS9rbWVtbGVhay5jCiBGOgltbS9rbWVtbGVhay10ZXN0LmMKIAotS01FTVRSQUNFCi1NOglFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51IDxlZHVhcmQubXVudGVhbnVAbGludXgzNjAucm8+Ci1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2ttZW10cmFjZS50eHQKLUY6CWluY2x1ZGUvbGludXgva21lbXRyYWNlLmgKLUY6CWtlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwotCiBLUFJPQkVTCiBNOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaSA8YW5hbnRoQGluLmlibS5jb20+CiBNOglBbmlsIFMgS2VzaGF2YW11cnRoeSA8YW5pbC5zLmtlc2hhdmFtdXJ0aHlAaW50ZWwuY29tPgpAQCAtMzUyNSw2ICszNTQzLDcgQEAKIFc6CWh0dHA6Ly93d3cucGVuZ3VpbnBwYy5vcmcvCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZwogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84eHgvCiAKIExJTlVYIEZPUiBQT1dFUlBDIEVNQkVEREVEIFBQQzgzWFggQU5EIFBQQzg1WFgKIE06CUt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CkBAIC0zNjI3LDcgKzM2NDYsNyBAQAogTToJU3VicmF0YSBNb2RhayA8c3VicmF0YUBsaW51eC52bmV0LmlibS5jb20+CiBMOglsdHAtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBXOglodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldC8KLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ2FsYWsvbHRwLmdpdAorVDoJZ2l0IGdpdDovL2x0cC5naXQuc291cmNlZm9yZ2UubmV0L2dpdHJvb3QvbHRwL2x0cC1kZXYKIFM6CU1haW50YWluZWQKIAogTTMyUiBBUkNISVRFQ1RVUkUKQEAgLTQwNDksNyArNDA2OCw3IEBACiBGOgluZXQvd2lyZWxlc3MvCiBGOglpbmNsdWRlL25ldC9pZWVlODAyMTEqCiBGOglpbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKLUY6CWluY2x1ZGUvbGludXgvaXdfaGFuZGxlci5oCitGOglpbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzLwogCiBORVRXT1JLSU5HIERSSVZFUlMKQEAgLTQxOTcsNiArNDIxNiw4IEBACiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy91c2IvKi8qb21hcCoKK0Y6CWFyY2gvYXJtLypvbWFwKi91c2IqCiAKIE9NRlMgRklMRVNZU1RFTQogTToJQm9iIENvcGVsYW5kIDxtZUBib2Jjb3BlbGFuZC5jb20+CkBAIC00NTM3LDcgKzQ1NTgsNyBAQAogUFBQIE9WRVIgTDJUUAogTToJSmFtZXMgQ2hhcG1hbiA8amNoYXBtYW5Aa2F0YWxpeC5jb20+CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL25ldC9wcHBvbDJ0cC5jCitGOgluZXQvbDJ0cC9sMnRwX3BwcC5jCiBGOglpbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKIAogUFBTIFNVUFBPUlQKQEAgLTQ1NjQsMTEgKzQ1ODUsNiBAQAogUzoJT2Jzb2xldGUKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvCiAKLVBST01JU0UgREM0MDMwIENBQ0hJTkcgRElTSyBDT05UUk9MTEVSIERSSVZFUgotTToJUGV0ZXIgRGVuaXNvbiA8cHJvbWlzZUBwbmQtcGMuZGVtb24uY28udWs+Ci1XOglodHRwOi8vd3d3LnBuZC1wYy5kZW1vbi5jby51ay9wcm9taXNlLwotUzoJTWFpbnRhaW5lZAotCiBQUk9NSVNFIFNBVEEgVFgyL1RYNCBDT05UUk9MTEVSIExJQkFUQSBEUklWRVIKIE06CU1pa2FlbCBQZXR0ZXJzc29uIDxtaWtwZUBpdC51dS5zZT4KIEw6CWxpbnV4LWlkZUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTQ2MDEsNiArNDYxNyw3IEBACiBNOglKaW0gUGFyaXMgPGppbUBqdGFuLmNvbT4KIEw6CWNiZS1vc3MtZGV2QG96bGFicy5vcmcKIFM6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvYmxvY2svcHMzdnJhbS5jCiAKIFBUUkFDRSBTVVBQT1JUCiBNOglSb2xhbmQgTWNHcmF0aCA8cm9sYW5kQHJlZGhhdC5jb20+CkBAIC00ODI3LDggKzQ4NDQsOCBAQAogUklDT0ggU01BUlRNRURJQS9YRCBEUklWRVIKIE06CU1heGltIExldml0c2t5IDxtYXhpbWxldml0c2t5QGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbXRkL25hbmQvcjgyMi5jCi1GOglkcml2ZXJzL210ZC9uYW5kL3I4MjIuaAorRjoJZHJpdmVycy9tdGQvbmFuZC9yODUyLmMKK0Y6CWRyaXZlcnMvbXRkL25hbmQvcjg1Mi5oCiAKIFJJU0NPTTggRFJJVkVSCiBTOglPcnBoYW4KQEAgLTUyNTUsNiArNTI3MiwxMyBAQAogUzoJT2RkIEZpeGVzCiBGOglkcml2ZXJzL25ldC9zbWM5MXguKgogCitTTU02NjUgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKK006CUd1ZW50ZXIgUm9lY2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CitGOglkcml2ZXJzL2h3bW9uL3NtbTY2NS5jCisKIFNNU0M0N0IzOTcgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKIE06CSJNYXJrIE0uIEhvZmZtYW4iIDxtaG9mZm1hbkBsaWdodGxpbmsuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpAQCAtNTI3NSwxMSArNTI5OSw2IEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L3Ntc2M5NDIwLioKIAotU01YIFVJTyBJbnRlcmZhY2UKLU06CUJlbiBOaXpldHRlIDxibkBuaWFzZGlnaXRhbC5jb20+Ci1TOglNYWludGFpbmVkCi1GOglkcml2ZXJzL3Vpby91aW9fc214LmMKLQogU04tSUE2NCAoSXRhbml1bSkgU1VCLVBMQVRGT1JNCiBNOglKZXMgU29yZW5zZW4gPGplc0BzZ2kuY29tPgogTDoJbGludXgtYWx0aXhAc2dpLmNvbQpAQCAtNTQwOSw3ICs1NDI4LDggQEAKIEY6CWFyY2gvYXJtL21hY2gtc3BlYXIqL2Nsb2NrLmMKIEY6CWFyY2gvYXJtL21hY2gtc3BlYXIqL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAogRjoJYXJjaC9hcm0vcGxhdC1zcGVhci9jbG9jay5jCi1GOglhcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oIGFuZCBjbGtkZXYuaAorRjoJYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xrZGV2LmgKK0Y6CWFyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKIAogU1BFQVIgUEFEIE1VTFRJUExFWElORyBTVVBQT1JUCiBNOglWaXJlc2ggS3VtYXIgPHZpcmVzaC5rdW1hckBzdC5jb20+CkBAIC01NDg5LDExICs1NTA5LDYgQEAKIFM6CU9kZCBGaXhlcwogRjoJZHJpdmVycy9uZXQvc3RhcmZpcmUqCiAKLVNUQVJNT0RFIFJBRElPIElQIChTVFJJUCkgUFJPVE9DT0wgRFJJVkVSCi1TOglPcnBoYW4KLUY6CWRyaXZlcnMvc3RhZ2luZy9zdHJpcC9zdHJpcC5jCi1GOglpbmNsdWRlL2xpbnV4L2lmX3N0cmlwLmgKLQogU1RSQURJUyBNUEVHLTIgREVDT0RFUiBEUklWRVIKIE06CU5hdGhhbiBMYXJlZG8gPGxhcmVkb0BnbnUub3JnPgogVzoJaHR0cDovL3d3dy5zdHJhZGlzLmNvbS8KQEAgLTU1NjksNiArNTU4NCwxNSBAQAogUzoJTWFpbnRhaW5lZAogRjoJbmV0L2lwdjQvdGNwX2xwLmMKIAorVEVHUkEgU1VQUE9SVAorTToJQ29saW4gQ3Jvc3MgPGNjcm9zc0BhbmRyb2lkLmNvbT4KK006CUVyaWsgR2lsbGluZyA8a29ua2Vyc0BhbmRyb2lkLmNvbT4KK006CU9sb2YgSm9oYW5zc29uIDxvbG9mQGxpeG9tLm5ldD4KK0w6CWxpbnV4LXRlZ3JhQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2FuZHJvaWQuZ2l0Lmtlcm5lbC5vcmcva2VybmVsL3RlZ3JhLmdpdAorUzoJU3VwcG9ydGVkCitGOglhcmNoL2FybS9tYWNoLXRlZ3JhCisKIFRFSFVUSSBFVEhFUk5FVCBEUklWRVIKIE06CUFsZXhhbmRlciBJbmRlbmJhdW0gPGJhdW1AdGVodXRpbmV0d29ya3MubmV0PgogTToJQW5keSBHb3Nwb2RhcmVrIDxhbmR5QGdyZXlob3VzZS5uZXQ+CkBAIC01NjIxLDYgKzU2NDUsMTIgQEAKIEY6CWluY2x1ZGUvbmV0L3RpcGMvCiBGOgluZXQvdGlwYy8KIAorVElMRSBBUkNISVRFQ1RVUkUKK006CUNocmlzIE1ldGNhbGYgPGNtZXRjYWxmQHRpbGVyYS5jb20+CitXOglodHRwOi8vd3d3LnRpbGVyYS5jb20vc2NtLworUzoJU3VwcG9ydGVkCitGOglhcmNoL3RpbGUvCisKIFRMQU4gTkVUV09SSyBEUklWRVIKIE06CVNhbXVlbCBDaGVzc21hbiA8Y2hlc3NtYW5AdHV4Lm9yZz4KIEw6CXRsYW4tZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQpAQCAtNTY4NSw3ICs1NzE1LDcgQEAKIE06CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgogTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgogTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+Ci1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGlwL2xpbnV4LTIuNi10aXAuZ2l0IHBlcmYvY29yZQogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CiBGOglhcmNoLyovKi8qL2Z0cmFjZS5oCkBAIC01NzU4LDYgKzU3ODgsOSBAQAogTToJWW9zaGlub3JpIFNhdG8gPHlzYXRvQHVzZXJzLnNvdXJjZWZvcmdlLmpwPgogVzoJaHR0cDovL3VjbGludXgtaDguc291cmNlZm9yZ2UuanAvCiBTOglTdXBwb3J0ZWQKK0Y6CWFyY2gvaDgzMDAvCitGOglkcml2ZXJzL2lkZS9pZGUtaDgzMDAuYworRjoJZHJpdmVycy9uZXQvbmUtaDgzMDAuYwogCiBVREYgRklMRVNZU1RFTQogTToJSmFuIEthcmEgPGphY2tAc3VzZS5jej4KQEAgLTYwNDksNyArNjA4Miw3IEBACiBGOglpbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAogCiBVU0IgVklERU8gQ0xBU1MKLU06CUxhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAc2t5bmV0LmJlPgorTToJTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgogTDoJbGludXgtdXZjLWRldmVsQGxpc3RzLmJlcmxpb3MuZGUgKHN1YnNjcmliZXJzLW9ubHkpCiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CkBAIC02MTgyLDkgKzYyMTUsMTIgQEAKIAogVklBIFVOSUNIUk9NRShQUk8pL0NIUk9NRTkgRlJBTUVCVUZGRVIgRFJJVkVSCiBNOglKb3NlcGggQ2hhbiA8Sm9zZXBoQ2hhbkB2aWEuY29tLnR3PgotTToJU2NvdHQgRmFuZyA8U2NvdHRGYW5nQHZpYXRlY2guY29tLmNuPgorTToJRmxvcmlhbiBUb2JpYXMgU2NoYW5kaW5hdCA8RmxvcmlhblNjaGFuZGluYXRAZ214LmRlPgogTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCitGOglpbmNsdWRlL2xpbnV4L3ZpYS1jb3JlLmgKK0Y6CWluY2x1ZGUvbGludXgvdmlhLWdwaW8uaAorRjoJaW5jbHVkZS9saW51eC92aWFfaTJjLmgKIEY6CWRyaXZlcnMvdmlkZW8vdmlhLwogCiBWSUEgVkVMT0NJVFkgTkVUV09SSyBEUklWRVIKQEAgLTYyOTgsNiArNjMzNCwxMSBAQAogTDoJd2ltYXhAbGludXh3aW1heC5vcmcKIFM6CVN1cHBvcnRlZAogVzoJaHR0cDovL2xpbnV4d2ltYXgub3JnCitGOglEb2N1bWVudGF0aW9uL3dpbWF4L1JFQURNRS53aW1heAorRjoJaW5jbHVkZS9saW51eC93aW1heC5oCitGOglpbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKK0Y6CWluY2x1ZGUvbmV0L3dpbWF4LmgKK0Y6CW5ldC93aW1heC8KIAogV0lNRURJQSBMTEMgUFJPVE9DT0wgKFdMUCkgU1VCU1lTVEVNCiBNOglEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2NmM5NGFhLi43NDMxYzI4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtNDIwLDcgKzQyMCw3IEBACiBuby1kb3QtY29uZmlnLXRhcmdldHMgOj0gY2xlYW4gbXJwcm9wZXIgZGlzdGNsZWFuIFwKIAkJCSBjc2NvcGUgVEFHUyB0YWdzIGhlbHAgJWRvY3MgY2hlY2slIGNvY2NpY2hlY2sgXAogCQkJIGluY2x1ZGUvbGludXgvdmVyc2lvbi5oIGhlYWRlcnNfJSBcCi0JCQkga2VybmVsdmVyc2lvbgorCQkJIGtlcm5lbHZlcnNpb24gJXNyYy1wa2cKIAogY29uZmlnLXRhcmdldHMgOj0gMAogbWl4ZWQtdGFyZ2V0cyAgOj0gMApAQCAtMTE2OCw2ICsxMTY4LDggQEAKICMgcnBtIHRhcmdldCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiBwYWNrYWdlLWRpcgk6PSAkKHNyY3RyZWUpL3NjcmlwdHMvcGFja2FnZQogCislc3JjLXBrZzogRk9SQ0UKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKHBhY2thZ2UtZGlyKSAkQAogJXBrZzogaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgRk9SQ0UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKHBhY2thZ2UtZGlyKSAkQAogcnBtOiBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSBGT1JDRQpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IGFjZGE1MTIuLjQ4NzdhOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTE1MSw0ICsxNTEsMTEgQEAKIGNvbmZpZyBIQVZFX1VTRVJfUkVUVVJOX05PVElGSUVSCiAJYm9vbAogCitjb25maWcgSEFWRV9QRVJGX0VWRU5UU19OTUkKKwlib29sCisJaGVscAorCSAgU3lzdGVtIGhhcmR3YXJlIGNhbiBnZW5lcmF0ZSBhbiBOTUkgdXNpbmcgdGhlIHBlcmYgZXZlbnQKKwkgIHN1YnN5c3RlbS4gIEFsc28gaGFzIHN1cHBvcnQgZm9yIGNhbGN1bGF0aW5nIENQVSBjeWNsZSBldmVudHMKKwkgIHRvIGRldGVybWluZSBob3cgbWFueSBjbG9jayBjeWNsZXMgaW4gYSBnaXZlbiBwZXJpb2QuCisKIHNvdXJjZSAia2VybmVsL2djb3YvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCAzZTJlNTQwLi5iOTY0N2JiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC00NywxMCArNDcsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfQ01PU19VUERBVEUKICAgICAgICAgZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMWJjZTgxNi4uNDU2N2FjYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNDEsOSArNDEsNyBAQAogCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKQlkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkJZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJCQkoMSkKIAogI2RlZmluZSBkbWFfY2FjaGVfc3luYyhkZXYsIHZhLCBzaXplLCBkaXIpCQkgICgodm9pZCkwKQotI2RlZmluZSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpCQkJICBMMV9DQUNIRV9CWVRFUwogCiAjZW5kaWYJLyogX0FMUEhBX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGEzN2RiMGYuLjUwNTBhYzggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMyw2ICszLDcgQEAKIAogCiBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBpcnFfZXJyX2NvdW50OworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGlycV9wbWlfY291bnQpOwogCiAjaWZkZWYgQ09ORklHX0FMUEhBX0dFTkVSSUMKICNkZWZpbmUgQUNUVUFMX05SX0lSUVMJYWxwaGFfbXYubnJfaXJxcwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggNjdiYjlmNi4uNTk2MTdjMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC04MCw2ICs4MCw3IEBACiAjIGRlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAogIyBkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CiAjIGRlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyMgZGVmaW5lIFRJT0NQS1RfSU9DVEwJCTY0CiAKIAogI2RlZmluZSBUSU9DTk9UVFkJMHg1NDIyCkBAIC05MSw2ICs5Miw3IEBACiAjZGVmaW5lIFRJT0NHU0lECTB4NTQyOSAgLyogUmV0dXJuIHRoZSBzZXNzaW9uIElEIG9mIEZEICovCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgVElPQ1NFUkNPTkZJRwkweDU0NTMKICNkZWZpbmUgVElPQ1NFUkdXSUxECTB4NTQ1NApAQCAtMTA2LDcgKzEwOCw1IEBACiAKICNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KICNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KLSNkZWZpbmUgVElPQ0dIQVlFU0VTUAkweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQCTB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCiAKICNlbmRpZiAvKiBfQVNNX0FMUEhBX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9tZC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzliODIyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS8qICRJZDogbWQuaCx2IDEuMSAxOTk3LzEyLzE1IDE1OjExOjQ4IGpqIEV4cCAkCi0gKiBtZC5oOiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUgCi0gKgotICovCi0gCi0jaWZuZGVmIF9fQVNNX01EX0gKLSNkZWZpbmUgX19BU01fTURfSAotCi0vKiAjZGVmaW5lIEhBVkVfQVJDSF9YT1JCTE9DSyAqLwotCi0jZGVmaW5lIE1EX1hPUkJMT0NLX0FMSUdOTUVOVAlzaXplb2YobG9uZykKLQotI2VuZGlmIC8qIF9fQVNNX01EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggM2JlZjg1Mi4uNDE1N2NkMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTIsOCArMiwxNCBAQAogI2RlZmluZSBfX0FTTV9BTFBIQV9QRVJGX0VWRU5UX0gKIAogLyogQWxwaGEgb25seSBzdXBwb3J0cyBzb2Z0d2FyZSBldmVudHMgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGVyZl9ldmVudF9wZW5kaW5nKHZvaWQpIHsgfQorZXh0ZXJuIHZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKTsKIAogI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVCAwCiAKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKK2V4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkgICAgeyB9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX0FMUEhBX1BFUkZfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IDU3MjhjNTIuLjAxN2Q3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTMsNiArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICh+MFVMKQotCiAjZW5kaWYgLyogIShfQUxQSEFfU0NBVFRFUkxJU1RfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGVybWJpdHMuaAppbmRleCBhZDg1NGE0Li44NzlkZDM1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xODAsNiArMTgwLDcgQEAKICNkZWZpbmUgRkxVU0hPCTB4MDA4MDAwMDAKICNkZWZpbmUgUEVORElOCTB4MjAwMDAwMDAKICNkZWZpbmUgSUVYVEVOCTB4MDAwMDA0MDAKKyNkZWZpbmUgRVhUUFJPQwkweDEwMDAwMDAwCiAKIC8qIFZhbHVlcyBmb3IgdGhlIEFDVElPTiBhcmd1bWVudCB0byBgdGNmbG93Jy4gICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS93cnBlcmZtb24uaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vd3JwZXJmbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5YmY2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vd3JwZXJmbW9uLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIERlZmluaXRpb25zIGZvciB1c2Ugd2l0aCB0aGUgQWxwaGEgd3JwZXJmbW9uIFBBTCBjYWxsLgorICovCisKKyNpZm5kZWYgX19BTFBIQV9XUlBFUkZNT05fSAorI2RlZmluZSBfX0FMUEhBX1dSUEVSRk1PTl9ICisKKy8qIEZvbGxvd2luZyBjb21tYW5kcyBhcmUgaW1wbGVtZW50ZWQgb24gYWxsIENQVXMgKi8KKyNkZWZpbmUgUEVSRk1PTl9DTURfRElTQUJMRSAwCisjZGVmaW5lIFBFUkZNT05fQ01EX0VOQUJMRSAxCisjZGVmaW5lIFBFUkZNT05fQ01EX0RFU0lSRURfRVZFTlRTIDIKKyNkZWZpbmUgUEVSRk1PTl9DTURfTE9HR0lOR19PUFRJT05TIDMKKy8qIEZvbGxvd2luZyBjb21tYW5kcyBvbiBFVjUvRVY1Ni9QQ0E1NiBvbmx5ICovCisjZGVmaW5lIFBFUkZNT05fQ01EX0lOVF9GUkVRIDQKKyNkZWZpbmUgUEVSRk1PTl9DTURfRU5BQkxFX0NMRUFSIDcKKy8qIEZvbGxvd2luZyBjb21tYW5kcyBhcmUgb24gRVY1IGFuZCBiZXR0ZXIgQ1BVcyAqLworI2RlZmluZSBQRVJGTU9OX0NNRF9SRUFEIDUKKyNkZWZpbmUgUEVSRk1PTl9DTURfV1JJVEUgNgorLyogRm9sbG93aW5nIGNvbW1hbmQgYXJlIG9uIEVWNiBhbmQgYmV0dGVyIENQVXMgKi8KKyNkZWZpbmUgUEVSRk1PTl9DTURfRU5BQkxFX1dSSVRFIDcKKy8qIEZvbGxvd2luZyBjb21tYW5kIGFyZSBvbiBFVjY3IGFuZCBiZXR0ZXIgQ1BVcyAqLworI2RlZmluZSBQRVJGTU9OX0NNRF9JX1NUQVQgOAorI2RlZmluZSBQRVJGTU9OX0NNRF9QTVBDIDkKKworCisvKiBFVjUvRVY1Ni9QQ0E1NiBDb3VudGVycyAqLworI2RlZmluZSBFVjVfUENUUl8wICgxVUw8PDApCisjZGVmaW5lIEVWNV9QQ1RSXzEgKDFVTDw8MSkKKyNkZWZpbmUgRVY1X1BDVFJfMiAoMVVMPDwyKQorCisjZGVmaW5lIEVWNV9QQ1RSXzBfQ09VTlRfU0hJRlQgNDgKKyNkZWZpbmUgRVY1X1BDVFJfMV9DT1VOVF9TSElGVCAzMgorI2RlZmluZSBFVjVfUENUUl8yX0NPVU5UX1NISUZUIDE2CisKKyNkZWZpbmUgRVY1X1BDVFJfMF9DT1VOVF9NQVNLIDB4ZmZmZlVMCisjZGVmaW5lIEVWNV9QQ1RSXzFfQ09VTlRfTUFTSyAweGZmZmZVTAorI2RlZmluZSBFVjVfUENUUl8yX0NPVU5UX01BU0sgMHgzZmZmVUwKKworLyogRVY2IENvdW50ZXJzICovCisjZGVmaW5lIEVWNl9QQ1RSXzAgKDFVTDw8MCkKKyNkZWZpbmUgRVY2X1BDVFJfMSAoMVVMPDwxKQorCisjZGVmaW5lIEVWNl9QQ1RSXzBfQ09VTlRfU0hJRlQgMjgKKyNkZWZpbmUgRVY2X1BDVFJfMV9DT1VOVF9TSElGVCA2CisKKyNkZWZpbmUgRVY2X1BDVFJfMF9DT1VOVF9NQVNLIDB4ZmZmZmZVTAorI2RlZmluZSBFVjZfUENUUl8xX0NPVU5UX01BU0sgMHhmZmZmZlVMCisKKy8qIEVWNjcgKGFuZCBzdWJzZXF1ZW50KSBjb3VudGVycyAqLworI2RlZmluZSBFVjY3X1BDVFJfMCAoMVVMPDwwKQorI2RlZmluZSBFVjY3X1BDVFJfMSAoMVVMPDwxKQorCisjZGVmaW5lIEVWNjdfUENUUl8wX0NPVU5UX1NISUZUIDI4CisjZGVmaW5lIEVWNjdfUENUUl8xX0NPVU5UX1NISUZUIDYKKworI2RlZmluZSBFVjY3X1BDVFJfMF9DT1VOVF9NQVNLIDB4ZmZmZmZVTAorI2RlZmluZSBFVjY3X1BDVFJfMV9DT1VOVF9NQVNLIDB4ZmZmZmZVTAorCisKKy8qCisgKiBUaGUgQWxwaGEgQXJjaGl0ZWN1cmUgSGFuZGJvb2ssIHZlcnMuIDQgKDE5OTgpIGFwcGVhcnMgdG8gaGF2ZSBhIG1pc3ByaW50CisgKiAgaW4gVGFibGUgRS0yMyByZWdhcmRpbmcgdGhlIGJpdHMgdGhhdCBzZXQgdGhlIGV2ZW50IFBDVFIgMSBjb3VudHMuCisgKiAgSG9wZWZ1bGx5IHdoYXQgd2UgaGF2ZSBoZXJlIGlzIGNvcnJlY3QuCisgKi8KKyNkZWZpbmUgRVY2X1BDVFJfMF9FVkVOVF9NQVNLIDB4MTBVTAorI2RlZmluZSBFVjZfUENUUl8xX0VWRU5UX01BU0sgMHgwZlVMCisKKy8qIEVWNiBFdmVudHMgKi8KKyNkZWZpbmUgRVY2X1BDVFJfMF9DWUNMRVMgKDBVTCA8PCA0KQorI2RlZmluZSBFVjZfUENUUl8wX0lOU1RSVUNUSU9OUyAoMVVMIDw8IDQpCisKKyNkZWZpbmUgRVY2X1BDVFJfMV9DWUNMRVMgMAorI2RlZmluZSBFVjZfUENUUl8xX0JSQU5DSEVTIDEKKyNkZWZpbmUgRVY2X1BDVFJfMV9CUkFOQ0hfTUlTUFJFRElDVFMgMgorI2RlZmluZSBFVjZfUENUUl8xX0RUQl9TSU5HTEVfTUlTU0VTIDMKKyNkZWZpbmUgRVY2X1BDVFJfMV9EVEJfRE9VQkxFX01JU1NFUyA0CisjZGVmaW5lIEVWNl9QQ1RSXzFfSVRCX01JU1NFUyA1CisjZGVmaW5lIEVWNl9QQ1RSXzFfVU5BTElHTkVEX1RSQVBTIDYKKyNkZWZpbmUgRVY2X1BDVFJfMV9SRVBMWV9UUkFQUyA3CisKKy8qIEZyb20gdGhlIEFscGhhIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgTWFudWFsLCA0dGggZWRuLiwgMjAwMiAqLworI2RlZmluZSBFVjY3X1BDVFJfTU9ERV9NQVNLIDB4MTBVTAorI2RlZmluZSBFVjY3X1BDVFJfRVZFTlRfTUFTSyAweDBDVUwKKworI2RlZmluZSBFVjY3X1BDVFJfTU9ERV9QUk9GSUxFTUUgKDFVTDw8NCkKKyNkZWZpbmUgRVY2N19QQ1RSX01PREVfQUdHUkVHQVRFICgwVUw8PDQpCisKKyNkZWZpbmUgRVY2N19QQ1RSX0lOU1RSX0NZQ0xFUyAoMFVMPDwyKQorI2RlZmluZSBFVjY3X1BDVFJfQ1lDTEVTX1VOREVGICgxVUw8PDIpCisjZGVmaW5lIEVWNjdfUENUUl9JTlNUUl9CQ0FDSEVNSVNTICgyVUw8PDIpCisjZGVmaW5lIEVWNjdfUENUUl9DWUNMRVNfTUJPWCAoM1VMPDwyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNWE2MmZiNC4uMWVlOWI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAKIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vIHBjaV9pb21tdS5vIHBjaS1zeXNmcy5vCiBvYmotJChDT05GSUdfU1JNX0VOVikJKz0gc3JtX2Vudi5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJKz0gbW9kdWxlLm8KK29iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiAKIGlmZGVmIENPTkZJR19BTFBIQV9HRU5FUklDCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggN2Y5MTJiYS4uZmU5MTI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlycV9lcnJfY291bnQ7CitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBpcnFfcG1pX2NvdW50KTsKIAogdm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtNjMsOSArNjQsNyBAQAogaW50CiBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotI2lmZGVmIENPTkZJR19TTVAKIAlpbnQgajsKLSNlbmRpZgogCWludCBpcnEgPSAqKGxvZmZfdCAqKSB2OwogCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExMiw2ICsxMTEsMTAgQEAKIAkJCXNlcV9wcmludGYocCwgIiUxMGx1ICIsIGNwdV9kYXRhW2pdLmlwaV9jb3VudCk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogI2VuZGlmCisJCXNlcV9wdXRzKHAsICJQTUk6ICIpOworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTBsdSAiLCBwZXJfY3B1KGlycV9wbWlfY291bnQsIGopKTsKKwkJc2VxX3B1dHMocCwgIiAgICAgICAgICBQZXJmb3JtYW5jZSBNb25pdG9yaW5nXG4iKTsKIAkJc2VxX3ByaW50ZihwLCAiRVJSOiAlMTBsdVxuIiwgaXJxX2Vycl9jb3VudCk7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCBjZmRlODY1Li41Zjc3YWZiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnQuaD4KIAogI2luY2x1ZGUgInByb3RvLmgiCiAjaW5jbHVkZSAiaXJxX2ltcGwuaCIKQEAgLTExMSw2ICsxMTIsOCBAQAogCXdyZW50KGVudEludCwgMCk7CiAKIAlhbHBoYV9tdi5pbml0X2lycSgpOworCisJaW5pdF9od19wZXJmX2V2ZW50cygpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IGRlOWQzOTcuLjg4MTMxYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTIzNCwxMSArMjM0LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRvX29zZl9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IG9zZl9zdGF0ZnMgX191c2VyICpidWZmZXIsCitkb19vc2Zfc3RhdGZzKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qgb3NmX3N0YXRmcyBfX3VzZXIgKmJ1ZmZlciwKIAkgICAgICB1bnNpZ25lZCBsb25nIGJ1ZnNpeikKIHsKIAlzdHJ1Y3Qga3N0YXRmcyBsaW51eF9zdGF0OwotCWludCBlcnJvciA9IHZmc19zdGF0ZnMoZGVudHJ5LCAmbGludXhfc3RhdCk7CisJaW50IGVycm9yID0gdmZzX3N0YXRmcyhwYXRoLCAmbGludXhfc3RhdCk7CiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBsaW51eF90b19vc2Zfc3RhdGZzKCZsaW51eF9zdGF0LCBidWZmZXIsIGJ1ZnNpeik7CiAJcmV0dXJuIGVycm9yOwkKQEAgLTI1Miw3ICsyNTIsNyBAQAogCiAJcmV0dmFsID0gdXNlcl9wYXRoKHBhdGhuYW1lLCAmcGF0aCk7CiAJaWYgKCFyZXR2YWwpIHsKLQkJcmV0dmFsID0gZG9fb3NmX3N0YXRmcyhwYXRoLmRlbnRyeSwgYnVmZmVyLCBidWZzaXopOworCQlyZXR2YWwgPSBkb19vc2Zfc3RhdGZzKCZwYXRoIGJ1ZmZlciwgYnVmc2l6KTsKIAkJcGF0aF9wdXQoJnBhdGgpOwogCX0KIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJcmV0dmFsID0gLUVCQURGOwogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoZmlsZSkgewotCQlyZXR2YWwgPSBkb19vc2Zfc3RhdGZzKGZpbGUtPmZfcGF0aC5kZW50cnksIGJ1ZmZlciwgYnVmc2l6KTsKKwkJcmV0dmFsID0gZG9fb3NmX3N0YXRmcygmZmlsZS0+Zl9wYXRoLCBidWZmZXIsIGJ1ZnNpeik7CiAJCWZwdXQoZmlsZSk7CiAJfQogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wZXJmX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjMzlmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMCwwICsxLDg0MiBAQAorLyoKKyAqIEhhcmR3YXJlIHBlcmZvcm1hbmNlIGV2ZW50cyBmb3IgdGhlIEFscGhhLgorICoKKyAqIFdlIGltcGxlbWVudCBIVyBjb3VudHMgb24gdGhlIEVWNjcgYW5kIHN1YnNlcXVlbnQgQ1BVcyBvbmx5LgorICoKKyAqIChDKSAyMDEwIE1pY2hhZWwgSi4gQ3JlZQorICoKKyAqIFNvbWV3aGF0IGJhc2VkIG9uIHRoZSBTcGFyYyBjb2RlLCBhbmQgdG8gYSBsZXNzZXIgZXh0ZW50IHRoZSBQb3dlclBDIGFuZAorICogQVJNIGNvZGUsIHdoaWNoIGFyZSBjb3B5cmlnaHQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBhdXRob3JzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxhc20vaHdycGIuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGFzbS9wYWwuaD4KKyNpbmNsdWRlIDxhc20vd3JwZXJmbW9uLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorCisKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBQTUNzIG9uIGFueSBBbHBoYSBDUFUgd2hhdHNvZXZlci4gKi8KKyNkZWZpbmUgTUFYX0hXRVZFTlRTIDMKKyNkZWZpbmUgUE1DX05PX0lOREVYIC0xCisKKy8qIEZvciB0cmFja2luZyBQTUNzIGFuZCB0aGUgaHcgZXZlbnRzIHRoZXkgbW9uaXRvciBvbiBlYWNoIENQVS4gKi8KK3N0cnVjdCBjcHVfaHdfZXZlbnRzIHsKKwlpbnQJCQllbmFibGVkOworCS8qIE51bWJlciBvZiBldmVudHMgc2NoZWR1bGVkOyBhbHNvIG51bWJlciBlbnRyaWVzIHZhbGlkIGluIGFycmF5cyBiZWxvdy4gKi8KKwlpbnQJCQluX2V2ZW50czsKKwkvKiBOdW1iZXIgZXZlbnRzIGFkZGVkIHNpbmNlIGxhc3QgaHdfcGVyZl9kaXNhYmxlKCkuICovCisJaW50CQkJbl9hZGRlZDsKKwkvKiBFdmVudHMgY3VycmVudGx5IHNjaGVkdWxlZC4gKi8KKwlzdHJ1Y3QgcGVyZl9ldmVudAkqZXZlbnRbTUFYX0hXRVZFTlRTXTsKKwkvKiBFdmVudCB0eXBlIG9mIGVhY2ggc2NoZWR1bGVkIGV2ZW50LiAqLworCXVuc2lnbmVkIGxvbmcJCWV2dHlwZVtNQVhfSFdFVkVOVFNdOworCS8qIEN1cnJlbnQgaW5kZXggb2YgZWFjaCBzY2hlZHVsZWQgZXZlbnQ7IGlmIG5vdCB5ZXQgZGV0ZXJtaW5lZAorCSAqIGNvbnRhaW5zIFBNQ19OT19JTkRFWC4KKwkgKi8KKwlpbnQJCQljdXJyZW50X2lkeFtNQVhfSFdFVkVOVFNdOworCS8qIFRoZSBhY3RpdmUgUE1DcycgY29uZmlnIGZvciBlYXN5IHVzZSB3aXRoIHdycGVyZm1vbigpLiAqLworCXVuc2lnbmVkIGxvbmcJCWNvbmZpZzsKKwkvKiBUaGUgYWN0aXZlIGNvdW50ZXJzJyBpbmRpY2VzIGZvciBlYXN5IHVzZSB3aXRoIHdycGVyZm1vbigpLiAqLworCXVuc2lnbmVkIGxvbmcJCWlkeF9tYXNrOworfTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfZXZlbnRzLCBjcHVfaHdfZXZlbnRzKTsKKworCisKKy8qCisgKiBBIHN0cnVjdHVyZSB0byBob2xkIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgUE1DcyBhdmFpbGFibGUgb24gYSBwYXJ0aWN1bGFyCisgKiB0eXBlIG9mIEFscGhhIENQVS4KKyAqLworc3RydWN0IGFscGhhX3BtdV90IHsKKwkvKiBNYXBwaW5nIG9mIHRoZSBwZXJmIHN5c3RlbSBodyBldmVudCB0eXBlcyB0byBpbmRpZ2Vub3VzIGV2ZW50IHR5cGVzICovCisJY29uc3QgaW50ICpldmVudF9tYXA7CisJLyogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBldmVudF9tYXAgKi8KKwlpbnQgIG1heF9ldmVudHM7CisJLyogVGhlIG51bWJlciBvZiBQTUNzIG9uIHRoaXMgQWxwaGEgKi8KKwlpbnQgIG51bV9wbWNzOworCS8qCisJICogQWxsIFBNQyBjb3VudGVycyByZXNpZGUgaW4gdGhlIElCT1ggcmVnaXN0ZXIgUENUUi4gIFRoaXMgaXMgdGhlCisJICogTFNCIG9mIHRoZSBjb3VudGVyLgorCSAqLworCWludCAgcG1jX2NvdW50X3NoaWZ0W01BWF9IV0VWRU5UU107CisJLyoKKwkgKiBUaGUgbWFzayB0aGF0IGlzb2xhdGVzIHRoZSBQTUMgYml0cyB3aGVuIHRoZSBMU0Igb2YgdGhlIGNvdW50ZXIKKwkgKiBpcyBzaGlmdGVkIHRvIGJpdCAwLgorCSAqLworCXVuc2lnbmVkIGxvbmcgcG1jX2NvdW50X21hc2tbTUFYX0hXRVZFTlRTXTsKKwkvKiBUaGUgbWF4aW11bSBwZXJpb2QgdGhlIFBNQyBjYW4gY291bnQuICovCisJdW5zaWduZWQgbG9uZyBwbWNfbWF4X3BlcmlvZFtNQVhfSFdFVkVOVFNdOworCS8qCisJICogVGhlIG1heGltdW0gdmFsdWUgdGhhdCBtYXkgYmUgd3JpdHRlbiB0byB0aGUgY291bnRlciBkdWUgdG8KKwkgKiBoYXJkd2FyZSByZXN0cmljdGlvbnMgaXMgcG1jX21heF9wZXJpb2QgLSBwbWNfbGVmdC4KKwkgKi8KKwlsb25nIHBtY19sZWZ0WzNdOworCSAvKiBTdWJyb3V0aW5lIGZvciBhbGxvY2F0aW9uIG9mIFBNQ3MuICBFbmZvcmNlcyBjb25zdHJhaW50cy4gKi8KKwlpbnQgKCpjaGVja19jb25zdHJhaW50cykoc3RydWN0IHBlcmZfZXZlbnQgKiosIHVuc2lnbmVkIGxvbmcgKiwgaW50KTsKK307CisKKy8qCisgKiBUaGUgQWxwaGEgQ1BVIFBNVSBkZXNjcmlwdGlvbiBjdXJyZW50bHkgaW4gb3BlcmF0aW9uLiAgVGhpcyBpcyBzZXQgZHVyaW5nCisgKiB0aGUgYm9vdCBwcm9jZXNzIHRvIHRoZSBzcGVjaWZpYyBDUFUgb2YgdGhlIG1hY2hpbmUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWxwaGFfcG11X3QgKmFscGhhX3BtdTsKKworCisjZGVmaW5lIEhXX09QX1VOU1VQUE9SVEVEIC0xCisKKy8qCisgKiBUaGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gb2YgdGhlIEVWNjcsIEVWNjgsIEVWNjksIEVWNyBhbmQgRVY3OSBQTVVzCisgKiBmb2xsb3cuIFNpbmNlIHRoZXkgYXJlIGlkZW50aWNhbCB3ZSByZWZlciB0byB0aGVtIGNvbGxlY3RpdmVseSBhcyB0aGUKKyAqIEVWNjcgaGVuY2Vmb3J0aC4KKyAqLworCisvKgorICogRVY2NyBQTUMgZXZlbnQgdHlwZXMKKyAqCisgKiBUaGVyZSBpcyBubyBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhlIHBvc3NpYmxlIGh3IGV2ZW50IHR5cGVzIHRvIHRoZQorICogYWN0dWFsIGNvZGVzIHRoYXQgYXJlIHVzZWQgdG8gcHJvZ3JhbSB0aGUgUE1DcyBoZW5jZSB3ZSBpbnRyb2R1Y2Ugb3VyCisgKiBvd24gaHcgZXZlbnQgdHlwZSBpZGVudGlmaWVycy4KKyAqLworZW51bSBldjY3X3BtY19ldmVudF90eXBlIHsKKwlFVjY3X0NZQ0xFUyA9IDEsCisJRVY2N19JTlNUUlVDVElPTlMsCisJRVY2N19CQ0FDSEVNSVNTLAorCUVWNjdfTUJPWFJFUExBWSwKKwlFVjY3X0xBU1RfRVQKK307CisjZGVmaW5lIEVWNjdfTlVNX0VWRU5UX1RZUEVTIChFVjY3X0xBU1RfRVQtRVY2N19DWUNMRVMpCisKKworLyogTWFwcGluZyBvZiB0aGUgaHcgZXZlbnQgdHlwZXMgdG8gdGhlIHBlcmYgdG9vbCBpbnRlcmZhY2UgKi8KK3N0YXRpYyBjb25zdCBpbnQgZXY2N19wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdCSA9IEVWNjdfQ1lDTEVTLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JID0gRVY2N19JTlNUUlVDVElPTlMsCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSBIV19PUF9VTlNVUFBPUlRFRCwKKwlbUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVNdCSA9IEVWNjdfQkNBQ0hFTUlTUywKK307CisKK3N0cnVjdCBldjY3X21hcHBpbmdfdCB7CisJaW50IGNvbmZpZzsKKwlpbnQgaWR4OworfTsKKworLyoKKyAqIFRoZSBtYXBwaW5nIHVzZWQgZm9yIG9uZSBldmVudCBvbmx5IC0gdGhlc2UgbXVzdCBiZSBpbiBzYW1lIG9yZGVyIGFzIGVudW0KKyAqIGV2NjdfcG1jX2V2ZW50X3R5cGUgZGVmaW5pdGlvbi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBldjY3X21hcHBpbmdfdCBldjY3X21hcHBpbmdbXSA9IHsKKwl7RVY2N19QQ1RSX0lOU1RSX0NZQ0xFUywgMX0sCSAvKiBFVjY3X0NZQ0xFUywgKi8KKwl7RVY2N19QQ1RSX0lOU1RSX0NZQ0xFUywgMH0sCSAvKiBFVjY3X0lOU1RSVUNUSU9OUyAqLworCXtFVjY3X1BDVFJfSU5TVFJfQkNBQ0hFTUlTUywgMX0sIC8qIEVWNjdfQkNBQ0hFTUlTUyAqLworCXtFVjY3X1BDVFJfQ1lDTEVTX01CT1gsIDF9CSAvKiBFVjY3X01CT1hSRVBMQVkgKi8KK307CisKKworLyoKKyAqIENoZWNrIHRoYXQgYSBncm91cCBvZiBldmVudHMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHNjaGVkdWxlZCBvbiB0byB0aGUKKyAqIEVWNjcgUE1VLiAgQWxzbyBhbGxvY2F0ZSBjb3VudGVyIGluZGljZXMgYW5kIGNvbmZpZy4KKyAqLworc3RhdGljIGludCBldjY3X2NoZWNrX2NvbnN0cmFpbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICoqZXZlbnQsCisJCQkJdW5zaWduZWQgbG9uZyAqZXZ0eXBlLCBpbnQgbl9ldikKK3sKKwlpbnQgaWR4MDsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZzsKKworCWlkeDAgPSBldjY3X21hcHBpbmdbZXZ0eXBlWzBdLTFdLmlkeDsKKwljb25maWcgPSBldjY3X21hcHBpbmdbZXZ0eXBlWzBdLTFdLmNvbmZpZzsKKwlpZiAobl9ldiA9PSAxKQorCQlnb3RvIHN1Y2Nlc3M7CisKKwlCVUdfT04obl9ldiAhPSAyKTsKKworCWlmIChldnR5cGVbMF0gPT0gRVY2N19NQk9YUkVQTEFZIHx8IGV2dHlwZVsxXSA9PSBFVjY3X01CT1hSRVBMQVkpIHsKKwkJLyogTUJPWCByZXBsYXkgdHJhcHMgbXVzdCBiZSBvbiBQTUMgMSAqLworCQlpZHgwID0gKGV2dHlwZVswXSA9PSBFVjY3X01CT1hSRVBMQVkpID8gMSA6IDA7CisJCS8qIE9ubHkgY3ljbGVzIGNhbiBhY2NvbXBhbnkgTUJPWCByZXBsYXkgdHJhcHMgKi8KKwkJaWYgKGV2dHlwZVtpZHgwXSA9PSBFVjY3X0NZQ0xFUykgeworCQkJY29uZmlnID0gRVY2N19QQ1RSX0NZQ0xFU19NQk9YOworCQkJZ290byBzdWNjZXNzOworCQl9CisJfQorCisJaWYgKGV2dHlwZVswXSA9PSBFVjY3X0JDQUNIRU1JU1MgfHwgZXZ0eXBlWzFdID09IEVWNjdfQkNBQ0hFTUlTUykgeworCQkvKiBCY2FjaGUgbWlzc2VzIG11c3QgYmUgb24gUE1DIDEgKi8KKwkJaWR4MCA9IChldnR5cGVbMF0gPT0gRVY2N19CQ0FDSEVNSVNTKSA/IDEgOiAwOworCQkvKiBPbmx5IGluc3RydWN0aW9ucyBjYW4gYWNjb21wYW55IEJjYWNoZSBtaXNzZXMgKi8KKwkJaWYgKGV2dHlwZVtpZHgwXSA9PSBFVjY3X0lOU1RSVUNUSU9OUykgeworCQkJY29uZmlnID0gRVY2N19QQ1RSX0lOU1RSX0JDQUNIRU1JU1M7CisJCQlnb3RvIHN1Y2Nlc3M7CisJCX0KKwl9CisKKwlpZiAoZXZ0eXBlWzBdID09IEVWNjdfSU5TVFJVQ1RJT05TIHx8IGV2dHlwZVsxXSA9PSBFVjY3X0lOU1RSVUNUSU9OUykgeworCQkvKiBJbnN0cnVjdGlvbnMgbXVzdCBiZSBvbiBQTUMgMCAqLworCQlpZHgwID0gKGV2dHlwZVswXSA9PSBFVjY3X0lOU1RSVUNUSU9OUykgPyAwIDogMTsKKwkJLyogQnkgdGhpcyBwb2ludCBvbmx5IGN5Y2xlcyBjYW4gYWNjb21wYW55IGluc3RydWN0aW9ucyAqLworCQlpZiAoZXZ0eXBlW2lkeDBeMV0gPT0gRVY2N19DWUNMRVMpIHsKKwkJCWNvbmZpZyA9IEVWNjdfUENUUl9JTlNUUl9DWUNMRVM7CisJCQlnb3RvIHN1Y2Nlc3M7CisJCX0KKwl9CisKKwkvKiBPdGhlcndpc2UsIGRhcm4gaXQsIHRoZXJlIGlzIGEgY29uZmxpY3QuICAqLworCXJldHVybiAtMTsKKworc3VjY2VzczoKKwlldmVudFswXS0+aHcuaWR4ID0gaWR4MDsKKwlldmVudFswXS0+aHcuY29uZmlnX2Jhc2UgPSBjb25maWc7CisJaWYgKG5fZXYgPT0gMikgeworCQlldmVudFsxXS0+aHcuaWR4ID0gaWR4MCBeIDE7CisJCWV2ZW50WzFdLT5ody5jb25maWdfYmFzZSA9IGNvbmZpZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbHBoYV9wbXVfdCBldjY3X3BtdSA9IHsKKwkuZXZlbnRfbWFwID0gZXY2N19wZXJmbW9uX2V2ZW50X21hcCwKKwkubWF4X2V2ZW50cyA9IEFSUkFZX1NJWkUoZXY2N19wZXJmbW9uX2V2ZW50X21hcCksCisJLm51bV9wbWNzID0gMiwKKwkucG1jX2NvdW50X3NoaWZ0ID0ge0VWNjdfUENUUl8wX0NPVU5UX1NISUZULCBFVjY3X1BDVFJfMV9DT1VOVF9TSElGVCwgMH0sCisJLnBtY19jb3VudF9tYXNrID0ge0VWNjdfUENUUl8wX0NPVU5UX01BU0ssICBFVjY3X1BDVFJfMV9DT1VOVF9NQVNLLCAgMH0sCisJLnBtY19tYXhfcGVyaW9kID0geygxVUw8PDIwKSAtIDEsICgxVUw8PDIwKSAtIDEsIDB9LAorCS5wbWNfbGVmdCA9IHsxNiwgNCwgMH0sCisJLmNoZWNrX2NvbnN0cmFpbnRzID0gZXY2N19jaGVja19jb25zdHJhaW50cworfTsKKworCisKKy8qCisgKiBIZWxwZXIgcm91dGluZXMgdG8gZW5zdXJlIHRoYXQgd2UgcmVhZC93cml0ZSBvbmx5IHRoZSBjb3JyZWN0IFBNQyBiaXRzCisgKiB3aGVuIGNhbGxpbmcgdGhlIHdycGVyZm1vbiBQQUxjYWxsLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYWxwaGFfd3JpdGVfcG1jKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXZhbCAmPSBhbHBoYV9wbXUtPnBtY19jb3VudF9tYXNrW2lkeF07CisJdmFsIDw8PSBhbHBoYV9wbXUtPnBtY19jb3VudF9zaGlmdFtpZHhdOworCXZhbCB8PSAoMTw8aWR4KTsKKwl3cnBlcmZtb24oUEVSRk1PTl9DTURfV1JJVEUsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhbHBoYV9yZWFkX3BtYyhpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gd3JwZXJmbW9uKFBFUkZNT05fQ01EX1JFQUQsIDApOworCXZhbCA+Pj0gYWxwaGFfcG11LT5wbWNfY291bnRfc2hpZnRbaWR4XTsKKwl2YWwgJj0gYWxwaGFfcG11LT5wbWNfY291bnRfbWFza1tpZHhdOworCXJldHVybiB2YWw7Cit9CisKKy8qIFNldCBhIG5ldyBwZXJpb2QgdG8gc2FtcGxlIG92ZXIgKi8KK3N0YXRpYyBpbnQgYWxwaGFfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQoreworCWxvbmcgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCWxvbmcgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOworCWludCByZXQgPSAwOworCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKKwkJbGVmdCA9IHBlcmlvZDsKKwkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKKwkJcmV0ID0gMTsKKwl9CisKKwlpZiAodW5saWtlbHkobGVmdCA8PSAwKSkgeworCQlsZWZ0ICs9IHBlcmlvZDsKKwkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKKwkJcmV0ID0gMTsKKwl9CisKKwkvKgorCSAqIEhhcmR3YXJlIHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgdGhlIGNvdW50ZXJzIG11c3Qgbm90IGJlCisJICogd3JpdHRlbiB3aXRoIHZhbHVlcyB0aGF0IGFyZSB0b28gY2xvc2UgdG8gdGhlIG1heGltdW0gcGVyaW9kLgorCSAqLworCWlmICh1bmxpa2VseShsZWZ0IDwgYWxwaGFfcG11LT5wbWNfbGVmdFtpZHhdKSkKKwkJbGVmdCA9IGFscGhhX3BtdS0+cG1jX2xlZnRbaWR4XTsKKworCWlmIChsZWZ0ID4gKGxvbmcpYWxwaGFfcG11LT5wbWNfbWF4X3BlcmlvZFtpZHhdKQorCQlsZWZ0ID0gYWxwaGFfcG11LT5wbWNfbWF4X3BlcmlvZFtpZHhdOworCisJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1bnNpZ25lZCBsb25nKSgtbGVmdCkpOworCisJYWxwaGFfd3JpdGVfcG1jKGlkeCwgKHVuc2lnbmVkIGxvbmcpKC1sZWZ0KSk7CisKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBDYWxjdWxhdGVzIHRoZSBjb3VudCAodGhlICdkZWx0YScpIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhlIFBNQyB3YXMgcmVhZC4KKyAqCisgKiBBcyB0aGUgUE1DcycgZnVsbCBwZXJpb2QgY2FuIGVhc2lseSBiZSBleGNlZWRlZCB3aXRoaW4gdGhlIHBlcmYgc3lzdGVtCisgKiBzYW1wbGluZyBwZXJpb2Qgd2UgY2Fubm90IHVzZSBhbnkgaGlnaCBvcmRlciBiaXRzIGFzIGEgZ3VhcmQgYml0IGluIHRoZQorICogUE1DcyB0byBkZXRlY3Qgb3ZlcmZsb3cgYXMgaXMgZG9uZSBieSBvdGhlciBhcmNoaXRlY3R1cmVzLiAgVGhlIGNvZGUgaGVyZQorICogY2FsY3VsYXRlcyB0aGUgZGVsdGEgb24gdGhlIGJhc2lzIHRoYXQgdGhlcmUgaXMgbm8gb3ZlcmZsb3cgd2hlbiBvdmYgaXMKKyAqIHplcm8uICBUaGUgdmFsdWUgcGFzc2VkIHZpYSBvdmYgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIGNvcnJlY3RzIGZvcgorICogb3ZlcmZsb3cuCisgKgorICogVGhpcyBjYW4gYmUgcmFjZXkgb24gcmFyZSBvY2Nhc2lvbnMgLS0gYSBjYWxsIHRvIHRoaXMgcm91dGluZSBjYW4gb2NjdXIKKyAqIHdpdGggYW4gb3ZlcmZsb3dlZCBjb3VudGVyIGp1c3QgYmVmb3JlIHRoZSBQTUkgc2VydmljZSByb3V0aW5lIGlzIGNhbGxlZC4KKyAqIFRoZSBjaGVjayBmb3IgZGVsdGEgbmVnYXRpdmUgaG9wZWZ1bGx5IGFsd2F5cyByZWN0aWZpZXMgdGhpcyBzaXR1YXRpb24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFscGhhX3BlcmZfZXZlbnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCwgbG9uZyBvdmYpCit7CisJbG9uZyBwcmV2X3Jhd19jb3VudCwgbmV3X3Jhd19jb3VudDsKKwlsb25nIGRlbHRhOworCithZ2FpbjoKKwlwcmV2X3Jhd19jb3VudCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cHJldl9jb3VudCk7CisJbmV3X3Jhd19jb3VudCA9IGFscGhhX3JlYWRfcG1jKGlkeCk7CisKKwlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKKwkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCisJCWdvdG8gYWdhaW47CisKKwlkZWx0YSA9IChuZXdfcmF3X2NvdW50ICAtIChwcmV2X3Jhd19jb3VudCAmIGFscGhhX3BtdS0+cG1jX2NvdW50X21hc2tbaWR4XSkpICsgb3ZmOworCisJLyogSXQgaXMgcG9zc2libGUgb24gdmVyeSByYXJlIG9jY2FzaW9ucyB0aGF0IHRoZSBQTUMgaGFzIG92ZXJmbG93ZWQKKwkgKiBidXQgdGhlIGludGVycnVwdCBpcyB5ZXQgdG8gY29tZS4gIERldGVjdCBhbmQgZml4IHRoaXMgc2l0dWF0aW9uLgorCSAqLworCWlmICh1bmxpa2VseShkZWx0YSA8IDApKSB7CisJCWRlbHRhICs9IGFscGhhX3BtdS0+cG1jX21heF9wZXJpb2RbaWR4XSArIDE7CisJfQorCisJYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKworCXJldHVybiBuZXdfcmF3X2NvdW50OworfQorCisKKy8qCisgKiBDb2xsZWN0IGFsbCBIVyBldmVudHMgaW50byB0aGUgYXJyYXkgZXZlbnRbXS4KKyAqLworc3RhdGljIGludCBjb2xsZWN0X2V2ZW50cyhzdHJ1Y3QgcGVyZl9ldmVudCAqZ3JvdXAsIGludCBtYXhfY291bnQsCisJCQkgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudFtdLCB1bnNpZ25lZCBsb25nICpldnR5cGUsCisJCQkgIGludCAqY3VycmVudF9pZHgpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKnBlOworCWludCBuID0gMDsKKworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZ3JvdXApKSB7CisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtMTsKKwkJZXZlbnRbbl0gPSBncm91cDsKKwkJZXZ0eXBlW25dID0gZ3JvdXAtPmh3LmV2ZW50X2Jhc2U7CisJCWN1cnJlbnRfaWR4W24rK10gPSBQTUNfTk9fSU5ERVg7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkocGUsICZncm91cC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KHBlKSAmJiBwZS0+c3RhdGUgIT0gUEVSRl9FVkVOVF9TVEFURV9PRkYpIHsKKwkJCWlmIChuID49IG1heF9jb3VudCkKKwkJCQlyZXR1cm4gLTE7CisJCQlldmVudFtuXSA9IHBlOworCQkJZXZ0eXBlW25dID0gcGUtPmh3LmV2ZW50X2Jhc2U7CisJCQljdXJyZW50X2lkeFtuKytdID0gUE1DX05PX0lOREVYOworCQl9CisJfQorCXJldHVybiBuOworfQorCisKKworLyoKKyAqIENoZWNrIHRoYXQgYSBncm91cCBvZiBldmVudHMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IHNjaGVkdWxlZCBvbiB0byB0aGUgUE1VLgorICovCitzdGF0aWMgaW50IGFscGhhX2NoZWNrX2NvbnN0cmFpbnRzKHN0cnVjdCBwZXJmX2V2ZW50ICoqZXZlbnRzLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgKmV2dHlwZXMsIGludCBuX2V2KQoreworCisJLyogTm8gSFcgZXZlbnRzIGlzIHBvc3NpYmxlIGZyb20gaHdfcGVyZl9ncm91cF9zY2hlZF9pbigpLiAqLworCWlmIChuX2V2ID09IDApCisJCXJldHVybiAwOworCisJaWYgKG5fZXYgPiBhbHBoYV9wbXUtPm51bV9wbWNzKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gYWxwaGFfcG11LT5jaGVja19jb25zdHJhaW50cyhldmVudHMsIGV2dHlwZXMsIG5fZXYpOworfQorCisKKy8qCisgKiBJZiBuZXcgZXZlbnRzIGhhdmUgYmVlbiBzY2hlZHVsZWQgdGhlbiB1cGRhdGUgY3B1YyB3aXRoIHRoZSBuZXcKKyAqIGNvbmZpZ3VyYXRpb24uICBUaGlzIG1heSBpbnZvbHZlIHNoaWZ0aW5nIGN5Y2xlIGNvdW50cyBmcm9tIG9uZSBQTUMgdG8KKyAqIGFub3RoZXIuCisgKi8KK3N0YXRpYyB2b2lkIG1heWJlX2NoYW5nZV9jb25maWd1cmF0aW9uKHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjKQoreworCWludCBqOworCisJaWYgKGNwdWMtPm5fYWRkZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRmluZCBjb3VudGVycyB0aGF0IGFyZSBtb3ZpbmcgdG8gYW5vdGhlciBQTUMgYW5kIHVwZGF0ZSAqLworCWZvciAoaiA9IDA7IGogPCBjcHVjLT5uX2V2ZW50czsgaisrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpwZSA9IGNwdWMtPmV2ZW50W2pdOworCisJCWlmIChjcHVjLT5jdXJyZW50X2lkeFtqXSAhPSBQTUNfTk9fSU5ERVggJiYKKwkJCWNwdWMtPmN1cnJlbnRfaWR4W2pdICE9IHBlLT5ody5pZHgpIHsKKwkJCWFscGhhX3BlcmZfZXZlbnRfdXBkYXRlKHBlLCAmcGUtPmh3LCBjcHVjLT5jdXJyZW50X2lkeFtqXSwgMCk7CisJCQljcHVjLT5jdXJyZW50X2lkeFtqXSA9IFBNQ19OT19JTkRFWDsKKwkJfQorCX0KKworCS8qIEFzc2lnbiB0byBjb3VudGVycyBhbGwgdW5hc3NpZ25lZCBldmVudHMuICovCisJY3B1Yy0+aWR4X21hc2sgPSAwOworCWZvciAoaiA9IDA7IGogPCBjcHVjLT5uX2V2ZW50czsgaisrKSB7CisJCXN0cnVjdCBwZXJmX2V2ZW50ICpwZSA9IGNwdWMtPmV2ZW50W2pdOworCQlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJnBlLT5odzsKKwkJaW50IGlkeCA9IGh3Yy0+aWR4OworCisJCWlmIChjcHVjLT5jdXJyZW50X2lkeFtqXSAhPSBQTUNfTk9fSU5ERVgpIHsKKwkJCWNwdWMtPmlkeF9tYXNrIHw9ICgxPDxjcHVjLT5jdXJyZW50X2lkeFtqXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFscGhhX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChwZSwgaHdjLCBpZHgpOworCQljcHVjLT5jdXJyZW50X2lkeFtqXSA9IGlkeDsKKwkJY3B1Yy0+aWR4X21hc2sgfD0gKDE8PGNwdWMtPmN1cnJlbnRfaWR4W2pdKTsKKwl9CisJY3B1Yy0+Y29uZmlnID0gY3B1Yy0+ZXZlbnRbMF0tPmh3LmNvbmZpZ19iYXNlOworfQorCisKKworLyogU2NoZWR1bGUgcGVyZiBIVyBldmVudCBvbiB0byBQTVUuCisgKiAgLSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhpcyBtb2R1bGUgdmlhIHRoZSBwbXUgc3RydWN0CisgKiAgICByZXR1cm5lZCBmcm9tIHBlcmYgZXZlbnQgaW5pdGlhbGlzYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgYWxwaGFfcG11X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlpbnQgbjA7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUaGUgU3BhcmMgY29kZSBoYXMgdGhlIElSUSBkaXNhYmxlIGZpcnN0IGZvbGxvd2VkIGJ5IHRoZSBwZXJmCisJICogZGlzYWJsZSwgaG93ZXZlciB0aGlzIGNhbiBsZWFkIHRvIGFuIG92ZXJmbG93ZWQgY291bnRlciB3aXRoIHRoZQorCSAqIFBNSSBkaXNhYmxlZCBvbiByYXJlIG9jY2FzaW9ucy4gIFRoZSBhbHBoYV9wZXJmX2V2ZW50X3VwZGF0ZSgpCisJICogcm91dGluZSBzaG91bGQgZGV0ZWN0IHRoaXMgc2l0dWF0aW9uIGJ5IG5vdGluZyBhIG5lZ2F0aXZlIGRlbHRhLAorCSAqIG5ldmVydGhlbGVzcyB3ZSBkaXNhYmxlIHRoZSBQTUNzIGZpcnN0IHRvIGVuYWJsZSBhIHBvdGVudGlhbAorCSAqIGZpbmFsIFBNSSB0byBvY2N1ciBiZWZvcmUgd2UgZGlzYWJsZSBpbnRlcnJ1cHRzLgorCSAqLworCXBlcmZfZGlzYWJsZSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8qIERlZmF1bHQgdG8gZXJyb3IgdG8gYmUgcmV0dXJuZWQgKi8KKwlyZXQgPSAtRUFHQUlOOworCisJLyogSW5zZXJ0IGV2ZW50IG9uIHRvIFBNVSBhbmQgaWYgc3VjY2Vzc2Z1bCBtb2RpZnkgcmV0IHRvIHZhbGlkIHJldHVybiAqLworCW4wID0gY3B1Yy0+bl9ldmVudHM7CisJaWYgKG4wIDwgYWxwaGFfcG11LT5udW1fcG1jcykgeworCQljcHVjLT5ldmVudFtuMF0gPSBldmVudDsKKwkJY3B1Yy0+ZXZ0eXBlW24wXSA9IGV2ZW50LT5ody5ldmVudF9iYXNlOworCQljcHVjLT5jdXJyZW50X2lkeFtuMF0gPSBQTUNfTk9fSU5ERVg7CisKKwkJaWYgKCFhbHBoYV9jaGVja19jb25zdHJhaW50cyhjcHVjLT5ldmVudCwgY3B1Yy0+ZXZ0eXBlLCBuMCsxKSkgeworCQkJY3B1Yy0+bl9ldmVudHMrKzsKKwkJCWNwdWMtPm5fYWRkZWQrKzsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcGVyZl9lbmFibGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKKworCisvKiBEaXNhYmxlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdAorICogIC0gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoaXMgbW9kdWxlIHZpYSB0aGUgcG11IHN0cnVjdAorICogICAgcmV0dXJuZWQgZnJvbSBwZXJmIGV2ZW50IGluaXRpYWxpc2F0aW9uLgorICovCitzdGF0aWMgdm9pZCBhbHBoYV9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBqOworCisJcGVyZl9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZm9yIChqID0gMDsgaiA8IGNwdWMtPm5fZXZlbnRzOyBqKyspIHsKKwkJaWYgKGV2ZW50ID09IGNwdWMtPmV2ZW50W2pdKSB7CisJCQlpbnQgaWR4ID0gY3B1Yy0+Y3VycmVudF9pZHhbal07CisKKwkJCS8qIFNoaWZ0IHJlbWFpbmluZyBlbnRyaWVzIGRvd24gaW50byB0aGUgZXhpc3RpbmcKKwkJCSAqIHNsb3QuCisJCQkgKi8KKwkJCXdoaWxlICgrK2ogPCBjcHVjLT5uX2V2ZW50cykgeworCQkJCWNwdWMtPmV2ZW50W2ogLSAxXSA9IGNwdWMtPmV2ZW50W2pdOworCQkJCWNwdWMtPmV2dHlwZVtqIC0gMV0gPSBjcHVjLT5ldnR5cGVbal07CisJCQkJY3B1Yy0+Y3VycmVudF9pZHhbaiAtIDFdID0KKwkJCQkJY3B1Yy0+Y3VycmVudF9pZHhbal07CisJCQl9CisKKwkJCS8qIEFic29yYiB0aGUgZmluYWwgY291bnQgYW5kIHR1cm4gb2ZmIHRoZSBldmVudC4gKi8KKwkJCWFscGhhX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCwgMCk7CisJCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CisKKwkJCWNwdWMtPmlkeF9tYXNrICY9IH4oMVVMPDxpZHgpOworCQkJY3B1Yy0+bl9ldmVudHMtLTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXBlcmZfZW5hYmxlKCk7Cit9CisKKworc3RhdGljIHZvaWQgYWxwaGFfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJYWxwaGFfcGVyZl9ldmVudF91cGRhdGUoZXZlbnQsIGh3YywgaHdjLT5pZHgsIDApOworfQorCisKK3N0YXRpYyB2b2lkIGFscGhhX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJY3B1Yy0+aWR4X21hc2sgfD0gMVVMPDxod2MtPmlkeDsKKwl3cnBlcmZtb24oUEVSRk1PTl9DTURfRU5BQkxFLCAoMVVMPDxod2MtPmlkeCkpOworfQorCisKKy8qCisgKiBDaGVjayB0aGF0IENQVSBwZXJmb3JtYW5jZSBjb3VudGVycyBhcmUgc3VwcG9ydGVkLgorICogLSBjdXJyZW50bHkgc3VwcG9ydCBFVjY3IGFuZCBsYXRlciBDUFVzLgorICogLSBhY3R1YWxseSBzb21lIGxhdGVyIHJldmlzaW9ucyBvZiB0aGUgRVY2IGhhdmUgdGhlIHNhbWUgUE1DIG1vZGVsIGFzIHRoZQorICogICAgIEVWNjcgYnV0IHdlIGRvbid0IGRvIHN1ZmZpZW50bHkgZGVlcCBDUFUgZGV0ZWN0aW9uIHRvIGRldGVjdCB0aGVtLgorICogICAgIEJhZCBsdWNrIHRvIHRoZSB2ZXJ5IGZldyBwZW9wbGUgd2hvIG1pZ2h0IGhhdmUgb25lLCBJIGd1ZXNzLgorICovCitzdGF0aWMgaW50IHN1cHBvcnRlZF9jcHUodm9pZCkKK3sKKwlzdHJ1Y3QgcGVyY3B1X3N0cnVjdCAqY3B1OworCXVuc2lnbmVkIGxvbmcgY3B1dHlwZTsKKworCS8qIEdldCBjcHUgdHlwZSBmcm9tIEhXICovCisJY3B1ID0gKHN0cnVjdCBwZXJjcHVfc3RydWN0ICopKChjaGFyICopaHdycGIgKyBod3JwYi0+cHJvY2Vzc29yX29mZnNldCk7CisJY3B1dHlwZSA9IGNwdS0+dHlwZSAmIDB4ZmZmZmZmZmY7CisJLyogSW5jbHVkZSBhbGwgb2YgRVY2NywgRVY2OCwgRVY3LCBFVjc5IGFuZCBFVjY5IGFzIHN1cHBvcnRlZC4gKi8KKwlyZXR1cm4gKGNwdXR5cGUgPj0gRVY2N19DUFUpICYmIChjcHV0eXBlIDw9IEVWNjlfQ1BVKTsKK30KKworCisKK3N0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJLyogTm90aGluZyB0byBiZSBkb25lISAqLworCXJldHVybjsKK30KKworCisKK3N0YXRpYyBpbnQgX19od19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZlbnQtPmF0dHI7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2dHNbTUFYX0hXRVZFTlRTXTsKKwl1bnNpZ25lZCBsb25nIGV2dHlwZXNbTUFYX0hXRVZFTlRTXTsKKwlpbnQgaWR4X3J1YmJpc2hfYmluW01BWF9IV0VWRU5UU107CisJaW50IGV2OworCWludCBuOworCisJLyogV2Ugb25seSBzdXBwb3J0IGEgbGltaXRlZCByYW5nZSBvZiBIQVJEV0FSRSBldmVudCB0eXBlcyB3aXRoIG9uZQorCSAqIG9ubHkgcHJvZ3JhbW1hYmxlIHZpYSBhIFJBVyBldmVudCB0eXBlLgorCSAqLworCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IQVJEV0FSRSkgeworCQlpZiAoYXR0ci0+Y29uZmlnID49IGFscGhhX3BtdS0+bWF4X2V2ZW50cykKKwkJCXJldHVybiAtRUlOVkFMOworCQlldiA9IGFscGhhX3BtdS0+ZXZlbnRfbWFwW2F0dHItPmNvbmZpZ107CisJfSBlbHNlIGlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSkgeworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfSBlbHNlIGlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9SQVcpIHsKKwkJZXYgPSBhdHRyLT5jb25maWcgJiAweGZmOworCX0gZWxzZSB7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlpZiAoZXYgPCAwKSB7CisJCXJldHVybiBldjsKKwl9CisKKwkvKiBUaGUgRVY2NyBkb2VzIG5vdCBzdXBwb3J0IG1vZGUgZXhjbHVzaW9uICovCisJaWYgKGF0dHItPmV4Y2x1ZGVfa2VybmVsIHx8IGF0dHItPmV4Y2x1ZGVfdXNlcgorCQkJfHwgYXR0ci0+ZXhjbHVkZV9odiB8fCBhdHRyLT5leGNsdWRlX2lkbGUpIHsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgorCSAqIFdlIHBsYWNlIHRoZSBldmVudCB0eXBlIGluIGV2ZW50X2Jhc2UgaGVyZSBhbmQgbGVhdmUgY2FsY3VsYXRpb24KKwkgKiBvZiB0aGUgY29kZXMgdG8gcHJvZ3JhbW1lIHRoZSBQTVUgZm9yIGFscGhhX3BtdV9lbmFibGUoKSBiZWNhdXNlCisJICogaXQgaXMgb25seSB0aGVuIHdlIHdpbGwga25vdyB3aGF0IEhXIGV2ZW50cyBhcmUgYWN0dWFsbHkKKwkgKiBzY2hlZHVsZWQgb24gdG8gdGhlIFBNVS4gIEF0IHRoYXQgcG9pbnQgdGhlIGNvZGUgdG8gcHJvZ3JhbW1lIHRoZQorCSAqIFBNVSBpcyBwdXQgaW50byBjb25maWdfYmFzZSBhbmQgdGhlIFBNQyB0byB1c2UgaXMgcGxhY2VkIGludG8KKwkgKiBpZHguICBXZSBpbml0aWFsaXNlIGlkeCAoYmVsb3cpIHRvIFBNQ19OT19JTkRFWCB0byBpbmRpY2F0ZSB0aGF0CisJICogaXQgaXMgeWV0IHRvIGJlIGRldGVybWluZWQuCisJICovCisJaHdjLT5ldmVudF9iYXNlID0gZXY7CisKKwkvKiBDb2xsZWN0IGV2ZW50cyBpbiBhIGdyb3VwIHRvZ2V0aGVyIHN1aXRhYmxlIGZvciBjYWxsaW5nCisJICogYWxwaGFfY2hlY2tfY29uc3RyYWludHMoKSB0byB2ZXJpZnkgdGhhdCB0aGUgZ3JvdXAgYXMgYSB3aG9sZSBjYW4KKwkgKiBiZSBzY2hlZHVsZWQgb24gdG8gdGhlIFBNVS4KKwkgKi8KKwluID0gMDsKKwlpZiAoZXZlbnQtPmdyb3VwX2xlYWRlciAhPSBldmVudCkgeworCQluID0gY29sbGVjdF9ldmVudHMoZXZlbnQtPmdyb3VwX2xlYWRlciwKKwkJCQlhbHBoYV9wbXUtPm51bV9wbWNzIC0gMSwKKwkJCQlldnRzLCBldnR5cGVzLCBpZHhfcnViYmlzaF9iaW4pOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXZ0eXBlc1tuXSA9IGh3Yy0+ZXZlbnRfYmFzZTsKKwlldnRzW25dID0gZXZlbnQ7CisKKwlpZiAoYWxwaGFfY2hlY2tfY29uc3RyYWludHMoZXZ0cywgZXZ0eXBlcywgbiArIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEluZGljYXRlIHRoYXQgUE1VIGNvbmZpZyBhbmQgaWR4IGFyZSB5ZXQgdG8gYmUgZGV0ZXJtaW5lZC4gKi8KKwlod2MtPmNvbmZpZ19iYXNlID0gMDsKKwlod2MtPmlkeCA9IFBNQ19OT19JTkRFWDsKKworCWV2ZW50LT5kZXN0cm95ID0gaHdfcGVyZl9ldmVudF9kZXN0cm95OworCisJLyoKKwkgKiBNb3N0IGFyY2hpdGVjdHVyZXMgcmVzZXJ2ZSB0aGUgUE1VIGZvciB0aGVpciB1c2UgYXQgdGhpcyBwb2ludC4KKwkgKiBBcyB0aGVyZSBpcyBubyBleGlzdGluZyBtZWNoYW5pc20gdG8gYXJiaXRyYXRlIHVzYWdlIGFuZCB0aGVyZQorCSAqIGFwcGVhcnMgdG8gYmUgbm8gb3RoZXIgdXNlciBvZiB0aGUgQWxwaGEgUE1VIHdlIGp1c3QgYXNzdW1lCisJICogdGhhdCB3ZSBjYW4ganVzdCB1c2UgaXQsIGhlbmNlIGEgTk8tT1AgaGVyZS4KKwkgKgorCSAqIE1heWJlIGFuIGFscGhhX3Jlc2VydmVfcG11KCkgcm91dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnV0IGlzCisJICogYW55dGhpbmcgZWxzZSBldmVyIGdvaW5nIHRvIHVzZSBpdD8KKwkgKi8KKworCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IGFscGhhX3BtdS0+cG1jX21heF9wZXJpb2RbMF07CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUgcG11ID0geworCS5lbmFibGUJCT0gYWxwaGFfcG11X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGFscGhhX3BtdV9kaXNhYmxlLAorCS5yZWFkCQk9IGFscGhhX3BtdV9yZWFkLAorCS51bnRocm90dGxlCT0gYWxwaGFfcG11X3VudGhyb3R0bGUsCit9OworCisKKy8qCisgKiBNYWluIGVudHJ5IHBvaW50IHRvIGluaXRpYWxpc2UgYSBIVyBwZXJmb3JtYW5jZSBldmVudC4KKyAqLworY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlpbnQgZXJyOworCisJaWYgKCFhbHBoYV9wbXUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJLyogRG8gdGhlIHJlYWwgaW5pdGlhbGlzYXRpb24gd29yay4gKi8KKwllcnIgPSBfX2h3X3BlcmZfZXZlbnRfaW5pdChldmVudCk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJcmV0dXJuICZwbXU7Cit9CisKKworCisvKgorICogTWFpbiBlbnRyeSBwb2ludCAtIGVuYWJsZSBIVyBwZXJmb3JtYW5jZSBjb3VudGVycy4KKyAqLwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCisJaWYgKGNwdWMtPm5fZXZlbnRzID4gMCkgeworCQkvKiBVcGRhdGUgY3B1YyB3aXRoIGluZm9ybWF0aW9uIGZyb20gYW55IG5ldyBzY2hlZHVsZWQgZXZlbnRzLiAqLworCQltYXliZV9jaGFuZ2VfY29uZmlndXJhdGlvbihjcHVjKTsKKworCQkvKiBTdGFydCBjb3VudGluZyB0aGUgZGVzaXJlZCBldmVudHMuICovCisJCXdycGVyZm1vbihQRVJGTU9OX0NNRF9MT0dHSU5HX09QVElPTlMsIEVWNjdfUENUUl9NT0RFX0FHR1JFR0FURSk7CisJCXdycGVyZm1vbihQRVJGTU9OX0NNRF9ERVNJUkVEX0VWRU5UUywgY3B1Yy0+Y29uZmlnKTsKKwkJd3JwZXJmbW9uKFBFUkZNT05fQ01EX0VOQUJMRSwgY3B1Yy0+aWR4X21hc2spOworCX0KK30KKworCisvKgorICogTWFpbiBlbnRyeSBwb2ludCAtIGRpc2FibGUgSFcgcGVyZm9ybWFuY2UgY291bnRlcnMuCisgKi8KKwordm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCisJaWYgKCFjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMDsKKwljcHVjLT5uX2FkZGVkID0gMDsKKworCXdycGVyZm1vbihQRVJGTU9OX0NNRF9ESVNBQkxFLCBjcHVjLT5pZHhfbWFzayk7Cit9CisKKworLyoKKyAqIE1haW4gZW50cnkgcG9pbnQgLSBkb24ndCBrbm93IHdoZW4gdGhpcyBpcyBjYWxsZWQgYnV0IGl0CisgKiBvYnZpb3VzbHkgZHVtcHMgZGVidWcgaW5mby4KKyAqLwordm9pZCBwZXJmX2V2ZW50X3ByaW50X2RlYnVnKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHBjcjsKKwlpbnQgcGNyMCwgcGNyMTsKKwlpbnQgY3B1OworCisJaWYgKCFzdXBwb3J0ZWRfY3B1KCkpCisJCXJldHVybjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCXBjciA9IHdycGVyZm1vbihQRVJGTU9OX0NNRF9SRUFELCAwKTsKKwlwY3IwID0gKHBjciA+PiBhbHBoYV9wbXUtPnBtY19jb3VudF9zaGlmdFswXSkgJiBhbHBoYV9wbXUtPnBtY19jb3VudF9tYXNrWzBdOworCXBjcjEgPSAocGNyID4+IGFscGhhX3BtdS0+cG1jX2NvdW50X3NoaWZ0WzFdKSAmIGFscGhhX3BtdS0+cG1jX2NvdW50X21hc2tbMV07CisKKwlwcl9pbmZvKCJDUFUjJWQ6IFBDVFIwWyUwNnhdIFBDVFIxWyUwNnhdXG4iLCBjcHUsIHBjcjAsIHBjcjEpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKKy8qCisgKiBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgY2FsbGVkIHdoZW4gYSBQTUMKKyAqIG92ZXJmbG93cy4gIFRoZSBQTUMgdGhhdCBvdmVyZmxvd2VkIGlzIHBhc3NlZCBpbiBsYV9wdHIuCisgKi8KK3N0YXRpYyB2b2lkIGFscGhhX3BlcmZfZXZlbnRfaXJxX2hhbmRsZXIodW5zaWduZWQgbG9uZyBsYV9wdHIsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjOworCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2M7CisJaW50IGlkeCwgajsKKworCV9fZ2V0X2NwdV92YXIoaXJxX3BtaV9jb3VudCkrKzsKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwkvKiBDb21wbGV0ZWx5IGNvdW50aW5nIHRocm91Z2ggdGhlIFBNQydzIHBlcmlvZCB0byB0cmlnZ2VyIGEgbmV3IFBNQworCSAqIG92ZXJmbG93IGludGVycnVwdCB3aGlsZSBpbiB0aGlzIGludGVycnVwdCByb3V0aW5lIGlzIHV0dGVybHkKKwkgKiBkaXNhc3Ryb3VzISAgVGhlIEVWNiBhbmQgRVY2NyBjb3VudGVycyBhcmUgc3VmZmljaWVudGx5IGxhcmdlIHRvCisJICogcHJldmVudCB0aGlzIGJ1dCB0byBiZSByZWFsbHkgc3VyZSBkaXNhYmxlIHRoZSBQTUNzLgorCSAqLworCXdycGVyZm1vbihQRVJGTU9OX0NNRF9ESVNBQkxFLCBjcHVjLT5pZHhfbWFzayk7CisKKwkvKiBsYV9wdHIgaXMgdGhlIGNvdW50ZXIgdGhhdCBvdmVyZmxvd2VkLiAqLworCWlmICh1bmxpa2VseShsYV9wdHIgPj0gcGVyZl9tYXhfZXZlbnRzKSkgeworCQkvKiBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciEgKi8KKwkJaXJxX2Vycl9jb3VudCsrOworCQlwcl93YXJuaW5nKCJQTUk6IHNpbGx5IGluZGV4ICVsZFxuIiwgbGFfcHRyKTsKKwkJd3JwZXJmbW9uKFBFUkZNT05fQ01EX0VOQUJMRSwgY3B1Yy0+aWR4X21hc2spOworCQlyZXR1cm47CisJfQorCisJaWR4ID0gbGFfcHRyOworCisJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwKTsKKwlmb3IgKGogPSAwOyBqIDwgY3B1Yy0+bl9ldmVudHM7IGorKykgeworCQlpZiAoY3B1Yy0+Y3VycmVudF9pZHhbal0gPT0gaWR4KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHVubGlrZWx5KGogPT0gY3B1Yy0+bl9ldmVudHMpKSB7CisJCS8qIFRoaXMgY2FuIG9jY3VyIGlmIHRoZSBldmVudCBpcyBkaXNhYmxlZCByaWdodCBvbiBhIFBNQyBvdmVyZmxvdy4gKi8KKwkJd3JwZXJmbW9uKFBFUkZNT05fQ01EX0VOQUJMRSwgY3B1Yy0+aWR4X21hc2spOworCQlyZXR1cm47CisJfQorCisJZXZlbnQgPSBjcHVjLT5ldmVudFtqXTsKKworCWlmICh1bmxpa2VseSghZXZlbnQpKSB7CisJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyISAqLworCQlpcnFfZXJyX2NvdW50Kys7CisJCXByX3dhcm5pbmcoIlBNSTogTm8gZXZlbnQgYXQgaW5kZXggJWQhXG4iLCBpZHgpOworCQl3cnBlcmZtb24oUEVSRk1PTl9DTURfRU5BQkxFLCBjcHVjLT5pZHhfbWFzayk7CisJCXJldHVybjsKKwl9CisKKwlod2MgPSAmZXZlbnQtPmh3OworCWFscGhhX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50LCBod2MsIGlkeCwgYWxwaGFfcG11LT5wbWNfbWF4X3BlcmlvZFtpZHhdKzEpOworCWRhdGEucGVyaW9kID0gZXZlbnQtPmh3Lmxhc3RfcGVyaW9kOworCisJaWYgKGFscGhhX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChldmVudCwgaHdjLCBpZHgpKSB7CisJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpIHsKKwkJCS8qIEludGVycnVwdHMgY29taW5nIHRvbyBxdWlja2x5OyAidGhyb3R0bGUiIHRoZQorCQkJICogY291bnRlciwgaS5lLiwgZGlzYWJsZSBpdCBmb3IgYSBsaXR0bGUgd2hpbGUuCisJCQkgKi8KKwkJCWNwdWMtPmlkeF9tYXNrICY9IH4oMVVMPDxpZHgpOworCQl9CisJfQorCXdycGVyZm1vbihQRVJGTU9OX0NNRF9FTkFCTEUsIGNwdWMtPmlkeF9tYXNrKTsKKworCXJldHVybjsKK30KKworCisKKy8qCisgKiBJbml0IGNhbGwgdG8gaW5pdGlhbGlzZSBwZXJmb3JtYW5jZSBldmVudHMgYXQga2VybmVsIHN0YXJ0dXAuCisgKi8KK3ZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9ldmVudHModm9pZCkKK3sKKwlwcl9pbmZvKCJQZXJmb3JtYW5jZSBldmVudHM6ICIpOworCisJaWYgKCFzdXBwb3J0ZWRfY3B1KCkpIHsKKwkJcHJfY29udCgiTm8gc3VwcG9ydCBmb3IgeW91ciBDUFUuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXByX2NvbnQoIlN1cHBvcnRlZCBDUFUgdHlwZSFcbiIpOworCisJLyogT3ZlcnJpZGUgcGVyZm9ybWFuY2UgY291bnRlciBJUlEgdmVjdG9yICovCisKKwlwZXJmX2lycSA9IGFscGhhX3BlcmZfZXZlbnRfaXJxX2hhbmRsZXI7CisKKwkvKiBBbmQgc2V0IHVwIFBNVSBzcGVjaWZpY2F0aW9uICovCisJYWxwaGFfcG11ID0gJmV2NjdfcG11OworCXBlcmZfbWF4X2V2ZW50cyA9IGFscGhhX3BtdS0+bnVtX3BtY3M7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCAxZWZiZWQ4Li5lYWNjZWIyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtODIsNiArODMsMjYgQEAKIAogdW5zaWduZWQgbG9uZyBlc3RfY3ljbGVfZnJlcTsKIAorI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworCitERUZJTkVfUEVSX0NQVSh1OCwgcGVyZl9ldmVudF9wZW5kaW5nKTsKKworI2RlZmluZSBzZXRfcGVyZl9ldmVudF9wZW5kaW5nX2ZsYWcoKSAgX19nZXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpID0gMQorI2RlZmluZSB0ZXN0X3BlcmZfZXZlbnRfcGVuZGluZygpICAgICAgX19nZXRfY3B1X3ZhcihwZXJmX2V2ZW50X3BlbmRpbmcpCisjZGVmaW5lIGNsZWFyX3BlcmZfZXZlbnRfcGVuZGluZygpICAgICBfX2dldF9jcHVfdmFyKHBlcmZfZXZlbnRfcGVuZGluZykgPSAwCisKK3ZvaWQgc2V0X3BlcmZfZXZlbnRfcGVuZGluZyh2b2lkKQoreworCXNldF9wZXJmX2V2ZW50X3BlbmRpbmdfZmxhZygpOworfQorCisjZWxzZSAgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCisKKyNkZWZpbmUgdGVzdF9wZXJmX2V2ZW50X3BlbmRpbmcoKSAgICAgIDAKKyNkZWZpbmUgY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCkKKworI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLworCiAKIHN0YXRpYyBpbmxpbmUgX191MzIgcnBjYyh2b2lkKQogewpAQCAtMTc1LDYgKzE5NiwxMSBAQAogCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKICNlbmRpZgogCisJaWYgKHRlc3RfcGVyZl9ldmVudF9wZW5kaW5nKCkpIHsKKwkJY2xlYXJfcGVyZl9ldmVudF9wZW5kaW5nKCk7CisJCXBlcmZfZXZlbnRfZG9fcGVuZGluZygpOworCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZTM5Y2FhOC4uOTI5NTExMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00MywxMCArNDMsNiBAQAogY29uZmlnIEdFTkVSSUNfR1BJTwogCWJvb2wKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtNTYyLDYgKzU1OCwxOCBAQAogCSAgU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgTlVDOTNYIE1DVSxUaGUgTlVDOTNYIGlzIGEKIAkgIGxvdy1wb3dlciBhbmQgaGlnaCBwZXJmb3JtYW5jZSBNUEVHLTQvSlBFRyBtdWx0aW1lZGlhIGNvbnRyb2xsZXIgY2hpcC4KIAorY29uZmlnIEFSQ0hfVEVHUkEKKwlib29sICJOVklESUEgVGVncmEiCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEFSQ0hfSEFTX0JBUlJJRVJTIGlmIENBQ0hFX0wyWDAKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgTlZJRElBIFRlZ3JhIGJhc2VkIHN5c3RlbXMgKFRlZ3JhIEFQWCwKKwkgIFRlZ3JhIDZ4eCBhbmQgVGVncmEgMiBzZXJpZXMpLgorCiBjb25maWcgQVJDSF9QTlg0MDA4CiAJYm9vbCAiUGhpbGlwcyBOZXhwZXJpYSBQTlg0MDA4IE1vYmlsZSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKQEAgLTYzNiw2ICs2NDQsNyBAQAogCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJc2VsZWN0IEhBVkVfUzNDMjQxMF9JMkMKIAloZWxwCiAJICBTYW1zdW5nIFMzQzI0MTBYIENQVSBiYXNlZCBzeXN0ZW1zLCBzdWNoIGFzIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MKIAkgIEJBU1QgKDxodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjExMElUWC8+KSwgdGhlIElQQVEgMTk0MCBvcgpAQCAtNjY1LDYgKzY3NCw4IEBACiAJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBVU0JfQVJDSF9IQVNfT0hDSQogCXNlbGVjdCBTQU1TVU5HX0dQSU9MSUJfNEJJVAorCXNlbGVjdCBIQVZFX1MzQzI0MTBfSTJDCisJc2VsZWN0IEhBVkVfUzNDMjQxMF9XQVRDSERPRwogCWhlbHAKIAkgIFNhbXN1bmcgUzNDNjRYWCBzZXJpZXMgYmFzZWQgc3lzdGVtcwogCkBAIC02NzMsNyArNjg0LDEwIEBACiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCiAJc2VsZWN0IEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJc2VsZWN0IEhBVkVfUzNDMjQxMF9JMkMKKwlzZWxlY3QgSEFWRV9TM0NfUlRDCiAJaGVscAogCSAgU2Ftc3VuZyBTNVA2NDQwIENQVSBiYXNlZCBzeXN0ZW1zCiAKQEAgLTY4Myw2ICs2OTcsNyBAQAogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCiAJaGVscAogCSAgU2Ftc3VuZyBTNVA2NDQyIENQVSBiYXNlZCBzeXN0ZW1zCiAKQEAgLTY5Myw2ICs3MDgsOSBAQAogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAlzZWxlY3QgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX0kyQworCXNlbGVjdCBIQVZFX1MzQ19SVEMKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCiAJaGVscAogCSAgU2Ftc3VuZyBTNVBDMTAwIHNlcmllcyBiYXNlZCBzeXN0ZW1zCiAKQEAgLTcwMyw5ICs3MjEsMjEgQEAKIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKIAlzZWxlY3QgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX0kyQworCXNlbGVjdCBIQVZFX1MzQ19SVEMKKwlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCiAJaGVscAogCSAgU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgc2VyaWVzIGJhc2VkIHN5c3RlbXMKIAorY29uZmlnIEFSQ0hfUzVQVjMxMAorCWJvb2wgIlNhbXN1bmcgUzVQVjMxMC9TNVBDMjEwIgorCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwloZWxwCisJICBTYW1zdW5nIFM1UFYzMTAgc2VyaWVzIGJhc2VkIHN5c3RlbXMKKwogY29uZmlnIEFSQ0hfU0hBUksKIAlib29sICJTaGFyayIKIAlzZWxlY3QgQ1BVX1NBMTEwCkBAIC05MDcsMTAgKzkzNywxNCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczVwdjMxMC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9wbGF0LXN0bXAzeHh4L0tjb25maWciCiAKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC10ZWdyYS9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZyIKQEAgLTEwMzAsNiArMTA2NCwxOCBAQAogCSAgIGlzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgaW4gUEwzMTAgYXMgY2xlYW4gbGluZXMgYXJlIG5vdAogCSAgIGludmFsaWRhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIG9wZXJhdGlvbnMuIE5vdGUgdGhhdCB0aGlzIGVycmF0YQogCSAgIHVzZXMgVGV4YXMgSW5zdHJ1bWVudCdzIHNlY3VyZSBtb25pdG9yIGFwaS4KKworY29uZmlnIEFSTV9FUlJBVEFfNzIwNzg5CisJYm9vbCAiQVJNIGVycmF0YTogVExCSUFTSURJUyBhbmQgVExCSU1WQUlTIG9wZXJhdGlvbnMgY2FuIGJyb2FkY2FzdCBhIGZhdWx0eSBBU0lEIgorCWRlcGVuZHMgb24gQ1BVX1Y3ICYmIFNNUAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHdvcmthcm91bmQgZm9yIHRoZSA3MjA3ODkgQ29ydGV4LUE5IChwcmlvciB0bworCSAgcjJwMCkgZXJyYXR1bS4gQSBmYXVsdHkgQVNJRCBjYW4gYmUgc2VudCB0byB0aGUgb3RoZXIgQ1BVcyBmb3IgdGhlCisJICBicm9hZGNhc3RlZCBDUDE1IFRMQiBtYWludGVuYW5jZSBvcGVyYXRpb25zIFRMQklBU0lESVMgYW5kIFRMQklNVkFJUy4KKwkgIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcyBlcnJhdHVtLCBzb21lIFRMQiBlbnRyaWVzIHdoaWNoIHNob3VsZCBiZQorCSAgaW52YWxpZGF0ZWQgYXJlIG5vdCwgcmVzdWx0aW5nIGluIGFuIGluY29oZXJlbmN5IGluIHRoZSBzeXN0ZW0gcGFnZQorCSAgdGFibGVzLiBUaGUgd29ya2Fyb3VuZCBjaGFuZ2VzIHRoZSBUTEIgZmx1c2hpbmcgcm91dGluZXMgdG8gaW52YWxpZGF0ZQorCSAgZW50cmllcyByZWdhcmRsZXNzIG9mIHRoZSBBU0lELgogZW5kbWVudQogCiBzb3VyY2UgImFyY2gvYXJtL2NvbW1vbi9LY29uZmlnIgpAQCAtMTA5OCwxMCArMTE0NCwxMSBAQAogCWJvb2wgIlN5bW1ldHJpYyBNdWx0aS1Qcm9jZXNzaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIChSRUFMVklFV19FQl9BUk0xMU1QIHx8IFJFQUxWSUVXX0VCX0E5TVAgfHxcCiAJCSBNQUNIX1JFQUxWSUVXX1BCMTFNUCB8fCBNQUNIX1JFQUxWSUVXX1BCWCB8fCBBUkNIX09NQVA0IHx8XAotCQkgQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTX0NBOVg0KQorCQkgQVJDSF9TNVBWMzEwIHx8IEFSQ0hfVEVHUkEgfHwgQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTX0NBOVg0KQogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBVU0VfR0VORVJJQ19TTVBfSEVMUEVSUwotCXNlbGVjdCBIQVZFX0FSTV9TQ1UgaWYgKEFSQ0hfUkVBTFZJRVcgfHwgQVJDSF9PTUFQNCB8fCBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQpCisJc2VsZWN0IEhBVkVfQVJNX1NDVSBpZiBBUkNIX1JFQUxWSUVXIHx8IEFSQ0hfT01BUDQgfHwgQVJDSF9TNVBWMzEwIHx8XAorCQkgQVJDSF9URUdSQSB8fCBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLiBJZiB5b3UgaGF2ZQogCSAgYSBzeXN0ZW0gd2l0aCBvbmx5IG9uZSBDUFUsIGxpa2UgbW9zdCBwZXJzb25hbCBjb21wdXRlcnMsIHNheSBOLiBJZgpAQCAtMTE3MSw5ICsxMjE4LDEwIEBACiAJYm9vbCAiVXNlIGxvY2FsIHRpbWVyIGludGVycnVwdHMiCiAJZGVwZW5kcyBvbiBTTVAgJiYgKFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgXAogCQlSRUFMVklFV19FQl9BOU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfT01BUDQgfHwgXAotCQlBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQpCisJCUFSQ0hfUzVQVjMxMCB8fCBBUkNIX1RFR1JBIHx8IEFSQ0hfVTg1MDAgfHwgQVJDSF9WRVhQUkVTU19DQTlYNCkKIAlkZWZhdWx0IHkKLQlzZWxlY3QgSEFWRV9BUk1fVFdEIGlmIChBUkNIX1JFQUxWSUVXIHx8IEFSQ0hfVkVYUFJFU1MgfHwgQVJDSF9PTUFQNCB8fCBBUkNIX1U4NTAwKQorCXNlbGVjdCBIQVZFX0FSTV9UV0QgaWYgQVJDSF9SRUFMVklFVyB8fCBBUkNIX09NQVA0IHx8IEFSQ0hfUzVQVjMxMCB8fCBcCisJCUFSQ0hfVEVHUkEgfHwgQVJDSF9VODUwMCB8fCBBUkNIX1ZFWFBSRVNTCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGxvY2FsIHRpbWVycyBvbiBTTVAgcGxhdGZvcm1zLCByYXRoZXIgdGhlbiB0aGUKIAkgIGxlZ2FjeSBJUEkgYnJvYWRjYXN0IG1ldGhvZC4gIExvY2FsIHRpbWVycyBhbGxvd3MgdGhlIHN5c3RlbQpAQCAtMTE4NCw3ICsxMjMyLDggQEAKIAogY29uZmlnIEhaCiAJaW50Ci0JZGVmYXVsdCAyMDAgaWYgQVJDSF9FQlNBMTEwIHx8IEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1M1UDY0NDAgfHwgQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMAorCWRlZmF1bHQgMjAwIGlmIEFSQ0hfRUJTQTExMCB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TNVA2NDQwIHx8IFwKKwkJQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMCB8fCBBUkNIX1M1UFYzMTAKIAlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSX0haIGlmIEFSQ0hfT01BUCAmJiBPTUFQXzMyS19USU1FUgogCWRlZmF1bHQgQVQ5MV9USU1FUl9IWiBpZiBBUkNIX0FUOTEKIAlkZWZhdWx0IFNITU9CSUxFX1RJTUVSX0haIGlmIEFSQ0hfU0hNT0JJTEUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNjNkOTk4ZS4uOTliODIwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTE3NCwxMSArMTc0LDEzIEBACiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzVQNjQ0MikJCTo9IHM1cDY0NDIKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TNVBDMTAwKQkJOj0gczVwYzEwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UFYyMTApCQk6PSBzNXB2MjEwCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzVQVjMxMCkJCTo9IHM1cHYzMTAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TQTExMDApCQk6PSBzYTExMDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TSEFSSykJCTo9IHNoYXJrCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpIAk6PSBzaG1vYmlsZQogbWFjaGluZS0kKENPTkZJR19BUkNIX1NUTVAzNzhYKQkJOj0gc3RtcDM3OHgKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TVE1QMzdYWCkJCTo9IHN0bXAzN3h4CittYWNoaW5lLSQoQ09ORklHX0FSQ0hfVEVHUkEpCQk6PSB0ZWdyYQogbWFjaGluZS0kKENPTkZJR19BUkNIX1UzMDApCQk6PSB1MzAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVTg1MDApCQk6PSB1eDUwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkJOj0gdmVyc2F0aWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKaW5kZXggNzYzNmM5Yi4uNjg3NzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMzMsNyArMzMsNyBAQAogT0JKUwkJKz0gaGVhZC14c2NhbGUubwogZW5kaWYKIAotaWZlcSAoJChDT05GSUdfUFhBX1NIQVJQU0wpLHkpCitpZmVxICgkKENPTkZJR19QWEFfU0hBUlBTTF9ERVRFQ1RfTUFDSF9JRCkseSkKIE9CSlMJCSs9IGhlYWQtc2hhcnBzbC5vCiBlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCBhYmY0ZDY1Li42YWY5OTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTE3MCw5ICsxNzAsOCBAQAogCiAJCS50ZXh0CiAJCWFkcglyMCwgTEMwCi0gQVJNKAkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNSwgcjYsIHIxMSwgaXAsIHNwfSkKLSBUSFVNQigJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjUsIHI2LCByMTEsIGlwfQkpCi0gVEhVTUIoCQlsZHIJc3AsIFtyMCwgIzMyXQkJCQkpCisJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjUsIHI2LCByMTEsIGlwfQorCQlsZHIJc3AsIFtyMCwgIzI4XQogI2lmZGVmIENPTkZJR19BVVRPX1pSRUxBRERSCiAJCUAgZGV0ZXJtaW5lIGZpbmFsIGtlcm5lbCBpbWFnZSBhZGRyZXNzCiAJCWFuZAlyNCwgcGMsICMweGY4MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMgYi9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMKaW5kZXggNzk3NGJhYS4uNmMwOTEzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2l0ODE1Mi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYwpAQCAtMjYzLDE0ICsyNjMsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZG1hX25lZWRzX2JvdW5jZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplKQotewotCWRldl9kYmcoZGV2LCAiJXM6IGRtYV9hZGRyICUwOHgsIHNpemUgJTA4eFxuIiwKLQkJX19mdW5jX18sIGRtYV9hZGRyLCBzaXplKTsKLQlyZXR1cm4gKGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpICYmCi0JCSgoZG1hX2FkZHIgKyBzaXplIC0gUEhZU19PRkZTRVQpID49IFNaXzY0TSk7Ci19Ci0KIGludCBfX2luaXQgaXQ4MTUyX3BjaV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKIHsKIAlpdDgxNTJfaW8uc3RhcnQgPSBJVDgxNTJfSU9fQkFTRSArIDB4MTIwMDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQyYmM1MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci1DT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX01BQ0hfT01BUDM1MTdFVk09eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19ORU9OPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0FOPXkKLUNPTkZJR19DQU5fUkFXPXkKLUNPTkZJR19DQU5fQkNNPXkKLUNPTkZJR19DQU5fVkNBTj15Ci1DT05GSUdfQ0FOX0RFVj15Ci1DT05GSUdfQ0FOX0NBTENfQklUVElNSU5HPXkKLUNPTkZJR19DQU5fVElfSEVDQz15Ci1DT05GSUdfQ0FOX0RFQlVHX0RFVklDRVM9eQotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1RJX0RBVklOQ0lfRU1BQz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotQ09ORklHX09NQVAyX0RTUz15Ci1DT05GSUdfT01BUDJfVlJBTV9TSVpFPTQKLUNPTkZJR19PTUFQMl9EU1NfTUlOX0ZDS19QRVJfUENLPTQKLUNPTkZJR19GQl9PTUFQMj15Ci1DT05GSUdfUEFORUxfR0VORVJJQz15Ci1DT05GSUdfUEFORUxfU0hBUlBfTFEwNDNUMURHMDE9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV90MzVfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmIwNjMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY21fdDM1X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAzPXkKLUNPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX01BQ0hfQ01fVDM1PXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19MSUI4MDIxMT1tCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0ZXX0xPQURFUj1tCi1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9PTUFQMj15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfU01TQzkxMVg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci1DT05GSUdfS0VZQk9BUkRfVFdMNDAzMD1tCi0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9bQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfT01BUDI0WFg9eQotQ09ORklHX0dQSU9fU1lTRlM9eQotQ09ORklHX0dQSU9fVFdMNDAzMD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19PTUFQX1dBVENIRE9HPXkKLUNPTkZJR19UV0w0MDMwX0NPUkU9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfT1RHPXkKLUNPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9URVNUPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19UV0w0MDMwX1VTQj15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX1RXTDQwMzA9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19OVEZTX0ZTPW0KLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX1NVTU1BUlk9eQotQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9kZXZraXQ4MDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZGV2a2l0ODAwMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NmNiZTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9kZXZraXQ4MDAwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAzPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfTUFDSF9ERVZLSVQ4MDAwPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMyLDExNTIwMG44IHJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTpob21lL25mc3Jvb3QvY3VycmVudCxob21lL25mc3Jvb3QvY3VycmVudCBpcD1kaGNwIHJ3IG5vaW5pdHJkIHJvb3QgIGRlbGF5PTMiCi1DT05GSUdfRlBFX05XRlBFPXkKLUNPTkZJR19WRlA9eQotQ09ORklHX05FT049eQotQ09ORklHX1BNPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX0lSREE9eQotQ09ORklHX0JUPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX1JBTT15Ci1DT05GSUdfTVREX1JPTT15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX09NQVAyPXkKLUNPTkZJR19NVERfVUJJPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYwCi0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfRE05MDAwPXkKLUNPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci1DT05GSUdfS0VZQk9BUkRfTUFUUklYPXkKLUNPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci1DT05GSUdfU0VSSU9fUkFXPXkKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfUkFXX0RSSVZFUj15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLUNPTkZJR19HUElPX1RXTDQwMzA9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1RXTDQwMzBfQ09SRT15Ci1DT05GSUdfVFdMNDAzMF9QT1dFUj15Ci1DT05GSUdfUkVHVUxBVE9SPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKLUNPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVD15Ci1DT05GSUdfT01BUDJfRFNTPXkKLUNPTkZJR19GQl9PTUFQMj15Ci1DT05GSUdfUEFORUxfR0VORVJJQz15Ci1DT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQ19PTUFQM19CRUFHTEU9eQotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci1DT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfT1RHPXkKLUNPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfREVCVUc9eQotQ09ORklHX1VTQl9TVE9SQUdFPW0KLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKLUNPTkZJR19VU0JfRVRIPW0KLSMgQ09ORklHX1VTQl9FVEhfUk5ESVMgaXMgbm90IHNldAotQ09ORklHX1RXTDQwMzBfVVNCPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19TREhDST15Ci1DT05GSUdfTU1DX1NESENJX1BMVEZNPW0KLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfTU1DX1NQST1tCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfRFJWX1RXTDQwMzA9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX1QxMERJRj1tCi1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZGEwNTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDM9eQotQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLSMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfTUFDSF9JR0VQMDAyMD15Ci1DT05GSUdfQVJNX1RIVU1CRUU9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLSMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNX1VTRVI9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX05FVF9LRVlfTUlHUkFURT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KLUNPTkZJR19CVF9SRkNPTU09bQotQ09ORklHX0JUX1JGQ09NTV9UVFk9eQotQ09ORklHX0JUX0JORVA9bQotQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKLUNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15Ci1DT05GSUdfQlRfSElEUD1tCi1DT05GSUdfQlRfSENJVUFSVD1tCi1DT05GSUdfQlRfSENJVUFSVF9IND15Ci1DT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKLUNPTkZJR19CVF9IQ0lVQVJUX0xMPXkKLUNPTkZJR19CVF9IQ0lWSENJPW0KLUNPTkZJR19CVF9NUlZMPW0KLUNPTkZJR19CVF9NUlZMX1NESU89bQotQ09ORklHX0NGRzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMT15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfT05FTkFORD15Ci1DT05GSUdfTVREX09ORU5BTkRfT01BUDI9eQotQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU09eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTPXkKLUNPTkZJR19MSUJFUlRBU19TRElPPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQMjRYWD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1NTQj1tCi1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19PTUFQMl9EU1M9eQotQ09ORklHX09NQVAyX1ZSQU1fU0laRT0xNAotIyBDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1ZFTkMgaXMgbm90IHNldAotQ09ORklHX09NQVAyX0RTU19EU0k9eQotQ09ORklHX09NQVAyX0RTU19VU0VfRFNJX1BMTD15Ci1DT05GSUdfRkJfT01BUDI9eQotIyBDT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFORUxfR0VORVJJQz15Ci1DT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLSMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQ19JR0VQMDAyMD15Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfREVCVUc9eQotQ09ORklHX01NQ19TREhDST15Ci1DT05GSUdfTU1DX09NQVBfSFM9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0xJQkNSQzMyQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMjQxNzIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci0jIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19UV0w0MDMwX0NPUkU9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9PVEc9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19UV0w0MDMwX1VTQj15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjA3MmU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDM9eQotQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLSMgQ09ORklHX09NQVBfTUNCU1AgaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX09NQVAzRVZNPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9ERUJVRz15Ci1DT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX05FVF9LRVk9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX09ORU5BTkQ9eQotQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15Ci1DT05GSUdfTVREX09ORU5BTkRfT01BUDI9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQMjRYWD15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX09NQVBfV0FUQ0hET0c9eQotQ09ORklHX1RXTDQwMzBfQ09SRT15Ci1DT05GSUdfUkVHVUxBVE9SPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotQ09ORklHX0ZCPXkKLUNPTkZJR19PTUFQMl9EU1M9eQotQ09ORklHX09NQVAyX1ZSQU1fU0laRT00Ci0jIENPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz00Ci1DT05GSUdfRkJfT01BUDI9eQotIyBDT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFORUxfR0VORVJJQz15Ci1DT05GSUdfUEFORUxfU0hBUlBfTFMwMzdWN0RXMDE9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX09URz15Ci1DT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9TVE9SQUdFPXkKLUNPTkZJR19VU0JfVEVTVD15Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX1pFUk89bQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX09NQVBfSFM9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0xJQkNSQzMyQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVhNjIyNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDM9eQotIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX09NQVAzX1BBTkRPUkE9eQotQ09ORklHX0FSTV9USFVNQkVFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iIGRlYnVnICIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19ERVZUTVBGUz15Ci1DT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfT01BUDI9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9ODAwCi1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NDgwCi1DT05GSUdfSU5QVVRfSk9ZREVWPXkKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfR1BJTz15Ci1DT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci0jIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLUNPTkZJR19JTlBVVF9NSVNDPXkKLUNPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTj15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQMjRYWD15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19UV0w0MDMwX0NPUkU9eQotQ09ORklHX1RXTDQwMzBfUE9XRVI9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX0RFQlVHPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotQ09ORklHX0ZCPXkKLUNPTkZJR19PTUFQMl9EU1M9eQotQ09ORklHX0ZCX09NQVAyPXkKLUNPTkZJR19QQU5FTF9UUE9fVEQwNDNNVEVBMT15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLSMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQotQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQz15Ci1DT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUw9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19UV0w0MDMwX1VTQj15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0NJRlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19zdGFsa2VyX2xrc19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3N0YWxrZXJfbGtzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQxYWIwYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3N0YWxrZXJfbGtzX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDM9eQotQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLSMgQ09ORklHX09NQVBfTUNCU1AgaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX1NCQzM1MzA9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19ORU9OPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX0RFQlVHPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfT05FTkFORD15Ci1DT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKLUNPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNU0M5MTFYPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLUNPTkZJR19HUElPX1RXTDQwMzA9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfT01BUF9XQVRDSERPRz15Ci1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9PVEc9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1RFU1Q9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9aRVJPPW0KLUNPTkZJR19UV0w0MDMwX1VTQj15Ci1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19RVU9UQT15Ci1DT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfdG91Y2hib29rX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk4OGVjYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX3RvdWNoYm9va19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2MjEgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci0jIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci1DT05GSUdfVEFTS1NUQVRTPXkKLUNPTkZJR19UQVNLX0RFTEFZX0FDQ1Q9eQotQ09ORklHX1RBU0tfWEFDQ1Q9eQotQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQ9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci1DT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSz15Ci1DT05GSUdfQVJNX1RIVU1CRUU9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0FFQUJJPXkKLSMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9IiBkZWJ1ZyAiCi1DT05GSUdfS0VYRUM9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX0FPVVQ9bQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfUE1fREVCVUc9eQotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19JTkVUX0FIPW0KLUNPTkZJR19JTkVUX0VTUD1tCi1DT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfRElBRz1tCi1DT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQotQ09ORklHX1RDUF9DT05HX0hTVENQPW0KLUNPTkZJR19UQ1BfQ09OR19IWUJMQT1tCi1DT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQotQ09ORklHX1RDUF9DT05HX0xQPW0KLUNPTkZJR19UQ1BfQ09OR19WRU5PPW0KLUNPTkZJR19UQ1BfQ09OR19ZRUFIPW0KLUNPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCi1DT05GSUdfSU5FVDZfQUg9bQotQ09ORklHX0lORVQ2X0VTUD1tCi1DT05GSUdfSU5FVDZfSVBDT01QPW0KLUNPTkZJR19JUFY2X01JUDY9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTj1tCi1DT05GSUdfSVBWNl9UVU5ORUw9bQotQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKLUNPTkZJR19JUFY2X1NVQlRSRUVTPXkKLUNPTkZJR19JUFY2X01ST1VURT15Ci1DT05GSUdfTkVURklMVEVSPXkKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQotQ09ORklHX0lQX1ZTPW0KLUNPTkZJR19JUF9WU19JUFY2PXkKLUNPTkZJR19JUF9WU19ERUJVRz15Ci1DT05GSUdfSVBfVlNfUFJPVE9fVENQPXkKLUNPTkZJR19JUF9WU19QUk9UT19VRFA9eQotQ09ORklHX0lQX1ZTX1BST1RPX0VTUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fQUg9eQotQ09ORklHX0lQX1ZTX1JSPW0KLUNPTkZJR19JUF9WU19XUlI9bQotQ09ORklHX0lQX1ZTX0xDPW0KLUNPTkZJR19JUF9WU19XTEM9bQotQ09ORklHX0lQX1ZTX0xCTEM9bQotQ09ORklHX0lQX1ZTX0xCTENSPW0KLUNPTkZJR19JUF9WU19ESD1tCi1DT05GSUdfSVBfVlNfU0g9bQotQ09ORklHX0lQX1ZTX1NFRD1tCi1DT05GSUdfSVBfVlNfTlE9bQotQ09ORklHX0lQX1ZTX0ZUUD1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotQ09ORklHX0lQX05GX01BVENIX0FIPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX1RUTD1tCi1DT05GSUdfSVBfTkZfRklMVEVSPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLUNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfSVBfTkZfTUFOR0xFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KLUNPTkZJR19JUF9ORl9SQVc9bQotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KLUNPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCi1DT05GSUdfSVA2X05GX1FVRVVFPW0KLUNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCi1DT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KLUNPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCi1DT05GSUdfSVA2X05GX01BVENIX09QVFM9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCi1DT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCi1DT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVA2X05GX0ZJTFRFUj1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQNl9ORl9NQU5HTEU9bQotQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX0lQX0RDQ1A9bQotQ09ORklHX0lQX1NDVFA9bQotQ09ORklHX1RJUEM9bQotQ09ORklHX0FUTT1tCi1DT05GSUdfQVRNX0NMSVA9bQotQ09ORklHX0FUTV9MQU5FPW0KLUNPTkZJR19BVE1fTVBPQT1tCi1DT05GSUdfQVRNX0JSMjY4ND1tCi1DT05GSUdfQlJJREdFPW0KLUNPTkZJR19WTEFOXzgwMjFRPW0KLUNPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQotQ09ORklHX1dBTl9ST1VURVI9bQotQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9DQlE9bQotQ09ORklHX05FVF9TQ0hfSFRCPW0KLUNPTkZJR19ORVRfU0NIX0hGU0M9bQotQ09ORklHX05FVF9TQ0hfQVRNPW0KLUNPTkZJR19ORVRfU0NIX1BSSU89bQotQ09ORklHX05FVF9TQ0hfTVVMVElRPW0KLUNPTkZJR19ORVRfU0NIX1JFRD1tCi1DT05GSUdfTkVUX1NDSF9TRlE9bQotQ09ORklHX05FVF9TQ0hfVEVRTD1tCi1DT05GSUdfTkVUX1NDSF9UQkY9bQotQ09ORklHX05FVF9TQ0hfR1JFRD1tCi1DT05GSUdfTkVUX1NDSF9EU01BUks9bQotQ09ORklHX05FVF9TQ0hfTkVURU09bQotQ09ORklHX05FVF9TQ0hfRFJSPW0KLUNPTkZJR19ORVRfQ0xTX0JBU0lDPW0KLUNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQotQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX0ZXPW0KLUNPTkZJR19ORVRfQ0xTX1UzMj1tCi1DT05GSUdfQ0xTX1UzMl9QRVJGPXkKLUNPTkZJR19DTFNfVTMyX01BUks9eQotQ09ORklHX05FVF9DTFNfUlNWUD1tCi1DT05GSUdfTkVUX0NMU19SU1ZQNj1tCi1DT05GSUdfTkVUX0NMU19GTE9XPW0KLUNPTkZJR19ORVRfQ0xTX0lORD15Ci1DT05GSUdfQlQ9eQotQ09ORklHX0JUX0wyQ0FQPXkKLUNPTkZJR19CVF9TQ089eQotQ09ORklHX0JUX1JGQ09NTT15Ci1DT05GSUdfQlRfUkZDT01NX1RUWT15Ci1DT05GSUdfQlRfQk5FUD15Ci1DT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQotQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKLUNPTkZJR19CVF9ISURQPXkKLUNPTkZJR19CVF9IQ0lCVFVTQj15Ci1DT05GSUdfQlRfSENJQlRTRElPPXkKLUNPTkZJR19CVF9IQ0lVQVJUPXkKLUNPTkZJR19CVF9IQ0lVQVJUX0g0PXkKLUNPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQotQ09ORklHX0JUX0hDSVVBUlRfTEw9eQotQ09ORklHX0JUX0hDSUJDTTIwM1g9eQotQ09ORklHX0JUX0hDSUJQQTEwWD15Ci1DT05GSUdfQlRfSENJQkZVU0I9eQotQ09ORklHX0FGX1JYUlBDPW0KLUNPTkZJR19DRkc4MDIxMT1tCi1DT05GSUdfTElCODAyMTE9eQotQ09ORklHX01BQzgwMjExPW0KLUNPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAotQ09ORklHX1dJTUFYPW0KLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX01URF9OQU5EX09NQVAyPXkKLUNPTkZJR19NVERfTkFORF9QTEFURk9STT15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfRUVQUk9NXzkzQ1g2PXkKLUNPTkZJR19SQUlEX0FUVFJTPW0KLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19CTEtfREVWX1NSPXkKLUNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfQ0hSX0RFVl9TQ0g9bQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLUNPTkZJR19JU0NTSV9UQ1A9bQotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi1DT05GSUdfTURfUkFJRDEwPW0KLUNPTkZJR19NRF9SQUlENDU2PW0KLUNPTkZJR19NRF9NVUxUSVBBVEg9bQotQ09ORklHX01EX0ZBVUxUWT1tCi1DT05GSUdfQkxLX0RFVl9ETT1tCi1DT05GSUdfRE1fQ1JZUFQ9bQotQ09ORklHX0RNX1NOQVBTSE9UPW0KLUNPTkZJR19ETV9NSVJST1I9bQotQ09ORklHX0RNX1pFUk89bQotQ09ORklHX0RNX01VTFRJUEFUSD1tCi1DT05GSUdfRE1fREVMQVk9bQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RVTU1ZPW0KLUNPTkZJR19CT05ESU5HPW0KLUNPTkZJR19NQUNWTEFOPW0KLUNPTkZJR19FUVVBTElaRVI9bQotQ09ORklHX1RVTj1tCi1DT05GSUdfVkVUSD1tCi0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci1DT05GSUdfUFBQX0ZJTFRFUj15Ci1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfU1lOQ19UVFk9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KLUNPTkZJR19QUFBfQlNEQ09NUD1tCi1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19ORVRDT05TT0xFPW0KLUNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQotQ09ORklHX05FVFBPTExfVFJBUD15Ci1DT05GSUdfSU5QVVRfRkZfTUVNTEVTUz15Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0dQSU89eQotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLUNPTkZJR19JTlBVVF9NSVNDPXkKLUNPTkZJR19JTlBVVF9UV0w0MDMwX1BXUkJVVFRPTj15Ci1DT05GSUdfSU5QVVRfVUlOUFVUPXkKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfT01BUDI0WFg9eQotQ09ORklHX1NQSV9TUElERVY9eQotQ09ORklHX0dQSU9fU1lTRlM9eQotQ09ORklHX0dQSU9fVFdMNDAzMD15Ci1DT05GSUdfUE9XRVJfU1VQUExZPXkKLUNPTkZJR19CQVRURVJZX0JRMjd4MDA9eQotQ09ORklHX1RIRVJNQUw9eQotQ09ORklHX1RIRVJNQUxfSFdNT049eQotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfT01BUF9XQVRDSERPRz15Ci1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfRElTUExBWV9TVVBQT1JUPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSPW0KLUNPTkZJR19TTkRfTUlYRVJfT1NTPXkKLUNPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotQ09ORklHX1NORF9IUlRJTUVSPW0KLSMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAotQ09ORklHX1NORF9VU0JfQVVESU89eQotQ09ORklHX1NORF9VU0JfQ0FJQVE9bQotQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQotQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQz15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfT1hVMjEwSFBfSENEPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9PVEc9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfQUNNPW0KLUNPTkZJR19VU0JfUFJJTlRFUj1tCi1DT05GSUdfVVNCX1dETT1tCi1DT05GSUdfVVNCX1RNQz1tCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15Ci1DT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRT1tCi1DT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KLUNPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCi1DT05GSUdfVVNCX1NFUklBTF9DSDM0MT1tCi1DT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQ9bQotQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLUNPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTg9bQotQ09ORklHX1VTQl9TRVJJQUxfRU1QRUc9bQotQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89bQotQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVD1tCi1DT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCi1DT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KLUNPTkZJR19VU0JfU0VSSUFMX0lSPW0KLUNPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUPW0KLUNPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KLUNPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCi1DT05GSUdfVVNCX1NFUklBTF9JUFc9bQotQ09ORklHX1VTQl9TRVJJQUxfSVVVPW0KLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOD15Ci1DT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WD15Ci1DT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEE9eQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCPXkKLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTk9eQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFg9eQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVc9eQotQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVFXPXkKLUNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRST15Ci1DT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5Vz15Ci1DT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTQ5V0xDPXkKLUNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQotQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUPW0KLUNPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KLUNPTkZJR19VU0JfU0VSSUFMX01PUzc3MjA9bQotQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MD1tCi1DT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQT1tCi1DT05GSUdfVVNCX1NFUklBTF9OQVZNQU49bQotQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLUNPTkZJR19VU0JfU0VSSUFMX09USTY4NTg9bQotQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNT1tCi1DT05GSUdfVVNCX1NFUklBTF9IUDRYPW0KLUNPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQotQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEk9bQotQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1M9bQotQ09ORklHX1VTQl9TRVJJQUxfVEk9bQotQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLPW0KLUNPTkZJR19VU0JfU0VSSUFMX1hJUkNPTT1tCi1DT05GSUdfVVNCX1NFUklBTF9PUFRJT049bQotQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCi1DT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KLUNPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KLUNPTkZJR19VU0JfRU1JNjI9bQotQ09ORklHX1VTQl9FTUkyNj1tCi1DT05GSUdfVVNCX1NJU1VTQlZHQT1tCi1DT05GSUdfVVNCX1NJU1VTQlZHQV9DT049eQotQ09ORklHX1VTQl9URVNUPW0KLUNPTkZJR19VU0JfR0FER0VUPW0KLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKLUNPTkZJR19VU0JfWkVSTz1tCi1DT05GSUdfVVNCX1pFUk9fSE5QVEVTVD15Ci1DT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0dBREdFVEZTPW0KLUNPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLUNPTkZJR19VU0JfR19TRVJJQUw9bQotQ09ORklHX1VTQl9NSURJX0dBREdFVD1tCi1DT05GSUdfVVNCX0dfUFJJTlRFUj1tCi1DT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQotQ09ORklHX1VTQl9HUElPX1ZCVVM9eQotQ09ORklHX1RXTDQwMzBfVVNCPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLUNPTkZJR19TRElPX1VBUlQ9eQotQ09ORklHX01NQ19PTUFQX0hTPXkKLUNPTkZJR19NTUNfU1BJPW0KLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci1DT05GSUdfTEVEU19HUElPPXkKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQotQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPW0KLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15Ci1DT05GSUdfVUlPPW0KLUNPTkZJR19VSU9fUERSVj1tCi1DT05GSUdfVUlPX1BEUlZfR0VOSVJRPW0KLUNPTkZJR19TVEFHSU5HPXkKLSMgQ09ORklHX1NUQUdJTkdfRVhDTFVERV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X0ZTPW0KLUNPTkZJR19SRUlTRVJGU19GUz1tCi1DT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPPXkKLUNPTkZJR19SRUlTRVJGU19GU19YQVRUUj15Ci1DT05GSUdfSkZTX0ZTPW0KLUNPTkZJR19YRlNfRlM9bQotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19BVVRPRlM0X0ZTPW0KLUNPTkZJR19GVVNFX0ZTPXkKLUNPTkZJR19JU085NjYwX0ZTPW0KLUNPTkZJR19KT0xJRVQ9eQotQ09ORklHX1pJU09GUz15Ci1DT05GSUdfVURGX0ZTPW0KLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfTlRGU19GUz1tCi1DT05GSUdfTlRGU19SVz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9TVU1NQVJZPXkKLUNPTkZJR19KRkZTMl9GU19YQVRUUj15Ci1DT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfSkZGUzJfTFpPPXkKLUNPTkZJR19KRkZTMl9SVUJJTj15Ci1DT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPPXkKLUNPTkZJR19VQklGU19GUz15Ci1DT05GSUdfVUJJRlNfRlNfWEFUVFI9eQotQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKLUNPTkZJR19TUVVBU0hGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05GU0Q9bQotQ09ORklHX05GU0RfVjNfQUNMPXkKLUNPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19DSUZTPW0KLUNPTkZJR19DSUZTX1NUQVRTPXkKLUNPTkZJR19DSUZTX1NUQVRTMj15Ci1DT05GSUdfQ0lGU19FWFBFUklNRU5UQUw9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfQlNEX0RJU0tMQUJFTD15Ci1DT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKLUNPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQotQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg1Nz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2MT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Mz1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2ND1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2NT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg2OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzNj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk1MD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzkzMj1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzk0OT1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfOD1tCi1DT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9bQotQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPW0KLUNPTkZJR19OTFNfQVNDSUk9bQotQ09ORklHX05MU19JU084ODU5XzE9bQotQ09ORklHX05MU19JU084ODU5XzI9bQotQ09ORklHX05MU19JU084ODU5XzM9bQotQ09ORklHX05MU19JU084ODU5XzQ9bQotQ09ORklHX05MU19JU084ODU5XzU9bQotQ09ORklHX05MU19JU084ODU5XzY9bQotQ09ORklHX05MU19JU084ODU5Xzc9bQotQ09ORklHX05MU19JU084ODU5Xzk9bQotQ09ORklHX05MU19JU084ODU5XzEzPW0KLUNPTkZJR19OTFNfSVNPODg1OV8xND1tCi1DT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotQ09ORklHX05MU19LT0k4X1I9bQotQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX1NDSEVEU1RBVFM9eQotQ09ORklHX1RJTUVSX1NUQVRTPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0ZJUFM9eQotQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fQ1JZUFREPW0KLUNPTkZJR19DUllQVE9fVEVTVD1tCi1DT05GSUdfQ1JZUFRPX0NDTT1tCi1DT05GSUdfQ1JZUFRPX0dDTT1tCi1DT05GSUdfQ1JZUFRPX0NUUz1tCi1DT05GSUdfQ1JZUFRPX0VDQj15Ci1DT05GSUdfQ1JZUFRPX0xSVz1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotQ09ORklHX0NSWVBUT19YVFM9bQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQotQ09ORklHX0NSWVBUT19STUQxMjg9bQotQ09ORklHX0NSWVBUT19STUQxNjA9bQotQ09ORklHX0NSWVBUT19STUQyNTY9bQotQ09ORklHX0NSWVBUT19STUQzMjA9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX0FFUz15Ci1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0ZDUllQVD1tCi1DT05GSUdfQ1JZUFRPX0tIQVpBRD1tCi1DT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQotQ09ORklHX0NSWVBUT19TRUVEPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPXkKLUNPTkZJR19DUkM3PXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzI0MzBzZHBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Y0MTQ3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8yNDMwc2RwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDI9eQotIyBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MgaXMgbm90IHNldAotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDI0MzA9eQotQ09ORklHX01BQ0hfT01BUF8yNDMwU0RQPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyBjb25zb2xlPXR0eVMwLDExNTIwMG44IGluaXRyZD0weDgwNjAwMDAwLDhNIHJhbWRpc2tfc2l6ZT04MTkyIgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1BNPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX0NGST15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX09ORU5BTkQ9eQotQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15Ci1DT05GSUdfTVREX09ORU5BTkRfT01BUDI9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19TQ1NJPW0KLUNPTkZJR19CTEtfREVWX1NEPW0KLUNPTkZJR19DSFJfREVWX1NHPW0KLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19PTUFQX1dBVENIRE9HPXkKLUNPTkZJR19UV0w0MDMwX0NPUkU9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLUNPTkZJR19GQj15Ci1DT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfT01BUD15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfTE9HTz15Ci0jIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPW0KLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049bQotQ09ORklHX1VTQl9NVVNCX0hEUkM9bQotQ09ORklHX1VTQl9NVVNCX09URz15Ci1DT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9TVE9SQUdFPW0KLUNPTkZJR19VU0JfR0FER0VUPW0KLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKLUNPTkZJR19VU0JfWkVSTz1tCi1DT05GSUdfVVNCX0VUSD1tCi1DT05GSUdfVVNCX0dBREdFVEZTPW0KLUNPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLUNPTkZJR19VU0JfR19TRVJJQUw9bQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX09NQVBfSFM9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19USU1FUl9TVEFUUz15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGJlNTk1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19JS0NPTkZJRz15Ci1DT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAzPXkKLUNPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15Ci1DT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX09NQVBfMzQzMFNEUD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMiwxMTUyMDAgcm9vdD0vZGV2L21tY2JsazBwMyByb290d2FpdCBkZWJ1ZyIKLUNPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19ORU9OPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfQkxLX0RFVl9TRD15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX1BIWUxJQj15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTUM5MVg9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj15Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQMjRYWD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQotQ09ORklHX09NQVBfV0FUQ0hET0c9eQotQ09ORklHX1RXTDQwMzBfV0FUQ0hET0c9eQotQ09ORklHX1RXTDQwMzBfQ09SRT15Ci1DT05GSUdfUkVHVUxBVE9SPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15Ci1DT05GSUdfRkI9eQotQ09ORklHX09NQVAyX0RTUz15Ci1DT05GSUdfT01BUDJfVlJBTV9TSVpFPTQKLUNPTkZJR19GQl9PTUFQMj15Ci1DT05GSUdfUEFORUxfR0VORVJJQz15Ci1DT05GSUdfUEFORUxfU0hBUlBfTFMwMzdWN0RXMDE9eQotQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VTUEVORD15Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX0VIQ0lfSENEPW0KLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9PVEc9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1RFU1Q9eQotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9HQURHRVRGUz1tCi1DT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi1DT05GSUdfVVNCX0dfU0VSSUFMPW0KLUNPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCi1DT05GSUdfTU1DPXkKLUNPTkZJR19NTUNfVU5TQUZFX1JFU1VNRT15Ci1DT05GSUdfU0RJT19VQVJUPXkKLUNPTkZJR19NTUNfT01BUF9IUz15Ci1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSUz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19RVU9UQT15Ci1DT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19MTD15Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNjMwc2RwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU4ZjRlOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzYzMHNkcF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAzPXkKLUNPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9ERUJVRz15Ci1DT05GSUdfUE1fVkVSQk9TRT15Ci1DT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk1fVVNFUj15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19QSFlMSUI9eQotQ09ORklHX1NNU0NfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLUNPTkZJR19HUElPX1RXTDQwMzA9eQotQ09ORklHX1cxPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9PVEc9eQotQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9ERUJVRz15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9URVNUPW0KLUNPTkZJR19VU0JfR0FER0VUPW0KLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKLUNPTkZJR19VU0JfWkVSTz1tCi1DT05GSUdfVVNCX0FVRElPPW0KLUNPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfR0FER0VURlM9bQotQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotQ09ORklHX1VTQl9HX1NFUklBTD1tCi1DT05GSUdfVVNCX0NEQ19DT01QT1NJVEU9bQotQ09ORklHX1RXTDQwMzBfVVNCPXkKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQX0hTPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfUVVPVEE9eQotQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX01TRE9TX0ZTPXkKLUNPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19UTVBGUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2Fwb2xsb25fMjQyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIyNDg1OC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfYXBvbGxvbl8yNDIwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDI9eQotIyBDT05GSUdfT01BUF9NQ0JTUCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDI0MjA9eQotQ09ORklHX01BQ0hfT01BUF9BUE9MTE9OPXkKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyBtZW09MTI4TSBjb25zb2xlPXR0eVMwLDExNTIwMG44IGluaXRyZD0weDgwNjAwMDAwLDhNIHJhbWRpc2tfc2l6ZT04MTkyIgotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfT05FTkFORD15Ci1DT05GSUdfTVREX09ORU5BTkRfR0VORVJJQz15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfT01BUF9XQVRDSERPRz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotQ09ORklHX0ZCPXkKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci1DT05GSUdfTE9HTz15Ci0jIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX09NQVA9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0FVVE9GUzRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfQ1JBTUZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0xJQkNSQzMyQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDRfMjQyMF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1OGY5M2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2g0XzI0MjBfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMj15Ci1DT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX0FSQ0hfT01BUDI0MjA9eQotQ09ORklHX01BQ0hfT01BUF9IND15Ci1DT05GSUdfQUVBQkk9eQotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgY29uc29sZT10dHlTMCwxMTUyMDBuOCBpbml0cmQ9MHg4MDYwMDAwMCw4TSByYW1kaXNrX3NpemU9ODE5MiIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19JUkRBPXkKLUNPTkZJR19JUkxBTj15Ci1DT05GSUdfSVJDT01NPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX09NQVA9eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfT01BUD15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19PTUFQX1dBVENIRE9HPXkKLUNPTkZJR19NRU5FTEFVUz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotQ09ORklHX0ZCPXkKLUNPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQl9PTUFQPXkKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19MT0dPPXkKLSMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2IGlzIG5vdCBzZXQKLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19PTUFQPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmI1NTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2xkcF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9PTUFQPXkKLUNPTkZJR19BUkNIX09NQVAzPXkKLUNPTkZJR19PTUFQX01VWF9ERUJVRz15Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX01BQ0hfT01BUF9MRFA9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk1fVVNFUj15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19TTVNDX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLUNPTkZJR19HUElPX1RXTDQwMzA9eQotQ09ORklHX1cxPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi1DT05GSUdfRkI9eQotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLUNPTkZJR19GQl9PTUFQPXkKLUNPTkZJR19GQl9PTUFQX0xDRF9WR0E9eQotQ09ORklHX0ZCX09NQVBfQ09OU0lTVEVOVF9ETUFfU0laRT00Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19MQ0RfUExBVEZPUk09eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0xPR089eQotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX01NQz15Ci1DT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19FWFQzX0ZTPXkKLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjNfQUNMPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19MSUJDUkMzMkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tMl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhN2VkNDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20yX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19TTEFCPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX09NQVA9eQotQ09ORklHX0FSQ0hfT01BUDM9eQotQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfTUFDSF9PTUFQX1pPT00yPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvdXNlci9idWlsZHJvb3QgaXA9MTkyLjE2OC4wLjI6MTkyLjE2OC4wLjE6MTkyLjE2OC4wLjE6MjU1LjI1NS4yNTUuMDp0Z3Q6ZXRoMDpvZmYgcncgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLUNPTkZJR19GUEVfTldGUEU9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1BNPXkKLUNPTkZJR19QTV9ERUJVRz15Ci1DT05GSUdfUE1fVkVSQk9TRT15Ci1DT05GSUdfUE1fUlVOVElNRT15Ci1DT05GSUdfTkVUPXkKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk1fVVNFUj15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19TTVNDX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19TTVNDOTExWD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PXkKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTEKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKLUNPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX09NQVA9eQotQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX09NQVAyNFhYPXkKLUNPTkZJR19HUElPX1RXTDQwMzA9eQotQ09ORklHX1cxPXkKLUNPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19XQVRDSERPR19OT1dBWU9VVD15Ci1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX09URz15Ci1DT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfR0FER0VUPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKLUNPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKLUNPTkZJR19VU0JfWkVSTz1tCi1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX09NQVBfSFM9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19RVU9UQT15Ci1DT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0xJQkNSQzMyQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwODViMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTU1ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci1DT05GSUdfT01BUF9NVVhfREVCVUc9eQotQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKLUNPTkZJR19PTUFQX0RNX1RJTUVSPXkKLUNPTkZJR19BUkNIX09NQVAzNDMwPXkKLUNPTkZJR19NQUNIX09NQVBfWk9PTTM9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjAuMTovaG9tZS91c2VyL2J1aWxkcm9vdCBpcD0xOTIuMTY4LjAuMjoxOTIuMTY4LjAuMToxOTIuMTY4LjAuMToyNTUuMjU1LjI1NS4wOnRndDpldGgwOm9mZiBydyBjb25zb2xlPXR0eVMyLDExNTIwMG44IgotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfVkZQPXkKLUNPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX0RFQlVHPXkKLUNPTkZJR19QTV9WRVJCT1NFPXkKLUNPTkZJR19QTV9SVU5USU1FPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTV9VU0VSPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX1NNU0NfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNU0M5MTFYPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci1DT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfT01BUDI0WFg9eQotQ09ORklHX0dQSU9fVFdMNDAzMD15Ci1DT05GSUdfVzE9eQotQ09ORklHX1BPV0VSX1NVUFBMWT15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19UV0w0MDMwX0NPUkU9eQotQ09ORklHX1JFR1VMQVRPUj15Ci1DT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORD15Ci1DT05GSUdfU05EPXkKLUNPTkZJR19VU0I9eQotQ09ORklHX1VTQl9ERUJVRz15Ci1DT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotQ09ORklHX1VTQl9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX09URz15Ci1DT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQotQ09ORklHX1VTQl9NVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci1DT05GSUdfVVNCX1RFU1Q9bQotQ09ORklHX1VTQl9HQURHRVQ9bQotQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQotQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9aRVJPPW0KLUNPTkZJR19VU0JfQVVESU89bQotQ09ORklHX1VTQl9FVEg9bQotQ09ORklHX1VTQl9HQURHRVRGUz1tCi1DT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCi1DT05GSUdfVVNCX0dfU0VSSUFMPW0KLUNPTkZJR19VU0JfQ0RDX0NPTVBPU0lURT1tCi1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQz15Ci1DT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQotQ09ORklHX01NQ19PTUFQX0hTPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19EUlZfVFdMNDAzMD15Ci1DT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfRVhUM19GUz15Ci0jIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19RVU9UQT15Ci1DT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0xJQkNSQzMyQz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL292ZXJvX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmExYjE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Zlcm9fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0VNQkVEREVEPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotQ09ORklHX01PRFZFUlNJT05TPXkKLUNPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci0jIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF8zMktfVElNRVI9eQotQ09ORklHX09NQVBfRE1fVElNRVI9eQotQ09ORklHX0FSQ0hfT01BUDM0MzA9eQotQ09ORklHX01BQ0hfT1ZFUk89eQotQ09ORklHX0FSTV9USFVNQkVFPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci0jIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTEVEUz15Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSIgZGVidWcgIgotQ09ORklHX0tFWEVDPXkKLUNPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfQklORk1UX0FPVVQ9bQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19ORVQ9eQotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfQlQ9eQotQ09ORklHX0JUX0wyQ0FQPXkKLUNPTkZJR19CVF9TQ089eQotQ09ORklHX0JUX1JGQ09NTT15Ci1DT05GSUdfQlRfUkZDT01NX1RUWT15Ci1DT05GSUdfQlRfQk5FUD15Ci1DT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQotQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKLUNPTkZJR19CVF9ISURQPXkKLUNPTkZJR19CVF9IQ0lVQVJUPXkKLUNPTkZJR19CVF9IQ0lVQVJUX0g0PXkKLUNPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQotQ09ORklHX0JUX0hDSUJDTTIwM1g9eQotQ09ORklHX0JUX0hDSUJQQTEwWD15Ci1DT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX01BQzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKLUNPTkZJR19NQUM4MDIxMV9MRURTPXkKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX05BTkQ9eQotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotQ09ORklHX1JBSURfQVRUUlM9bQotQ09ORklHX1NDU0k9eQotQ09ORklHX0JMS19ERVZfU0Q9eQotQ09ORklHX0NIUl9ERVZfU0c9bQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD1tCi1DT05GSUdfTURfTElORUFSPW0KLUNPTkZJR19NRF9SQUlEMD1tCi1DT05GSUdfTURfUkFJRDE9bQotQ09ORklHX01EX1JBSUQxMD1tCi1DT05GSUdfTURfUkFJRDQ1Nj1tCi1DT05GSUdfTURfTVVMVElQQVRIPW0KLUNPTkZJR19NRF9GQVVMVFk9bQotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLUNPTkZJR19ETV9NVUxUSVBBVEg9bQotQ09ORklHX0RNX0RFTEFZPW0KLUNPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT1tCi1DT05GSUdfVFVOPW0KLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1pEMTIwMT1tCi1DT05GSUdfUlRMODE4Nz1tCi1DT05GSUdfSE9TVEFQPW0KLUNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQotQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci1DT05GSUdfTElCRVJUQVM9eQotQ09ORklHX0xJQkVSVEFTX1VTQj15Ci1DT05GSUdfTElCRVJUQVNfU0RJTz15Ci1DT05GSUdfTElCRVJUQVNfREVCVUc9eQotQ09ORklHX1A1NF9DT01NT049bQotQ09ORklHX1A1NF9VU0I9bQotQ09ORklHX1VTQl9DQVRDPW0KLUNPTkZJR19VU0JfS0FXRVRIPW0KLUNPTkZJR19VU0JfUEVHQVNVUz1tCi1DT05GSUdfVVNCX1JUTDgxNTA9bQotQ09ORklHX1VTQl9VU0JORVQ9eQotQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KLUNPTkZJR19VU0JfTkVUX0dMNjIwQT1tCi1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KLUNPTkZJR19VU0JfTkVUX1BMVVNCPW0KLUNPTkZJR19VU0JfTkVUX01DUzc4MzA9bQotQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCi1DT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KLUNPTkZJR19VU0JfQUxJX001NjMyPXkKLUNPTkZJR19VU0JfQU4yNzIwPXkKLUNPTkZJR19VU0JfRVBTT04yODg4PXkKLUNPTkZJR19VU0JfS0MyMTkwPXkKLUNPTkZJR19VU0JfTkVUX1pBVVJVUz1tCi1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zMgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLUNPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQotQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfT01BUD15Ci1DT05GSUdfU1BJPXkKLUNPTkZJR19TUElfT01BUDI0WFg9eQotQ09ORklHX0RFQlVHX0dQSU89eQotQ09ORklHX0dQSU9fU1lTRlM9eQotQ09ORklHX1BPV0VSX1NVUFBMWT1tCi1DT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKLUNPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TTkQ9eQotQ09ORklHX1NORF9TRVFVRU5DRVI9bQotQ09ORklHX1NORF9NSVhFUl9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKLUNPTkZJR19TTkRfREVCVUc9eQotQ09ORklHX1NORF9VU0JfQVVESU89eQotQ09ORklHX1NORF9VU0JfQ0FJQVE9bQotQ09ORklHX1NORF9VU0JfQ0FJQVFfSU5QVVQ9eQotQ09ORklHX1NORF9TT0M9eQotQ09ORklHX1NORF9PTUFQX1NPQz15Ci1DT05GSUdfVVNCPXkKLUNPTkZJR19VU0JfREVCVUc9eQotQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci1DT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfTU9OPXkKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19NVVNCX1BJT19PTkxZPXkKLUNPTkZJR19VU0JfQUNNPW0KLUNPTkZJR19VU0JfUFJJTlRFUj1tCi1DT05GSUdfVVNCX1dETT15Ci1DT05GSUdfVVNCX1NUT1JBR0U9eQotQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9FTUk2Mj1tCi1DT05GSUdfVVNCX0VNSTI2PW0KLUNPTkZJR19VU0JfTEVHT1RPV0VSPW0KLUNPTkZJR19VU0JfTENEPW0KLUNPTkZJR19VU0JfTEVEPW0KLUNPTkZJR19NTUM9eQotQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKLUNPTkZJR19TRElPX1VBUlQ9eQotQ09ORklHX0xFRFNfQ0xBU1M9eQotQ09ORklHX0xFRFNfR1BJTz15Ci1DT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0VYVDNfRlM9eQotIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19RVU9UQT15Ci1DT05GSUdfUUZNVF9WMj15Ci1DT05GSUdfRlVTRV9GUz1tCi1DT05GSUdfSVNPOTY2MF9GUz1tCi1DT05GSUdfSk9MSUVUPXkKLUNPTkZJR19aSVNPRlM9eQotQ09ORklHX1VERl9GUz1tCi1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX1RNUEZTPXkKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfU1VNTUFSWT15Ci1DT05GSUdfSkZGUzJfRlNfWEFUVFI9eQotQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQotQ09ORklHX0pGRlMyX0xaTz15Ci1DT05GSUdfSkZGUzJfUlVCSU49eQotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19JU084ODU5XzE9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19TQ0hFRFNUQVRTPXkKLUNPTkZJR19USU1FUl9TVEFUUz15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19DUllQVEQ9bQotQ09ORklHX0NSWVBUT19URVNUPW0KLUNPTkZJR19DUllQVE9fTFJXPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0hNQUM9bQotQ09ORklHX0NSWVBUT19YQ0JDPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQotQ09ORklHX0NSWVBUT19TSEE1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLUNPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCi1DT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLUNPTkZJR19DUllQVE9fS0hBWkFEPW0KLUNPTkZJR19DUllQVE9fU0VSUEVOVD1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD15Ci1DT05GSUdfQ1JDNz15Ci1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmFlZjQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfRU1CRURERUQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX1NMQUI9eQotQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfT01BUD15Ci1DT05GSUdfQVJDSF9PTUFQMz15Ci1DT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQotQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQXzMyS19USU1FUj15Ci1DT05GSUdfT01BUF9ETV9USU1FUj15Ci1DT05GSUdfQVJDSF9PTUFQMzQzMD15Ci1DT05GSUdfTUFDSF9OT0tJQV9SWDUxPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19BRUFCST15Ci0jIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCi1DT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJpbml0PS9zYmluL3ByZWluaXQgdWJpLm10ZD1yb290ZnMgcm9vdD11YmkwOnJvb3RmcyByb290ZnN0eXBlPXViaWZzIHJvb3RmbGFncz1idWxrX3JlYWQsbm9fY2hrX2RhdGFfY3JjIHJ3IGNvbnNvbGU9dHR5TVRELGxvZyBjb25zb2xlPXR0eTAgY29uc29sZT10dHlTMiwxMTUyMDBuOCIKLUNPTkZJR19WRlA9eQotQ09ORklHX05FT049eQotQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfUE1fREVCVUc9eQotQ09ORklHX1BNX1JVTlRJTUU9eQotQ09ORklHX05FVD15Ci1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19VTklYPXkKLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotQ09ORklHX0lQX1BOUF9SQVJQPXkKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUj15Ci1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfUEhPTkVUPXkKLUNPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCi1DT05GSUdfQlRfUkZDT01NPW0KLUNPTkZJR19CVF9SRkNPTU1fVFRZPXkKLUNPTkZJR19CVF9CTkVQPW0KLUNPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15Ci1DT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQotQ09ORklHX0JUX0hJRFA9bQotQ09ORklHX0NGRzgwMjExPXkKLUNPTkZJR19NQUM4MDIxMT1tCi1DT05GSUdfTUFDODAyMTFfUkNfUElEPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci1DT05GSUdfTVREX09PUFM9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotQ09ORklHX01URF9PTkVOQU5EPXkKLUNPTkZJR19NVERfT05FTkFORF9PTUFQMj15Ci1DT05GSUdfTVREX1VCST15Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfU0NTST1tCi1DT05GSUdfQkxLX0RFVl9TRD1tCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQotQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15Ci1DT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfVFVOPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX1NNQzkxWD1tCi0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9HUElPPW0KLUNPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci1DT05GSUdfSU5QVVRfTUlTQz15Ci1DT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT049eQotQ09ORklHX0lOUFVUX1VJTlBVVD1tCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19PTUFQPXkKLUNPTkZJR19TUEk9eQotQ09ORklHX1NQSV9PTUFQMjRYWD15Ci1DT05GSUdfR1BJT19TWVNGUz15Ci1DT05GSUdfR1BJT19UV0w0MDMwPXkKLUNPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfT01BUF9XQVRDSERPRz1tCi1DT05GSUdfVFdMNDAzMF9XQVRDSERPRz1tCi1DT05GSUdfVFdMNDAzMF9DT1JFPXkKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKLUNPTkZJR19GQj15Ci1DT05GSUdfT01BUDJfRFNTPXkKLSMgQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NQVAyX0RTU19EUEkgaXMgbm90IHNldAotIyBDT05GSUdfT01BUDJfRFNTX1ZFTkMgaXMgbm90IHNldAotQ09ORklHX09NQVAyX0RTU19TREk9eQotQ09ORklHX0ZCX09NQVAyPXkKLUNPTkZJR19QQU5FTF9BQ1g1NjVBS009eQotQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfU09VTkQ9eQotQ09ORklHX1NORD15Ci0jIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfT01BUF9TT0M9eQotQ09ORklHX0hJRD1tCi1DT05GSUdfVVNCX0hJRD1tCi1DT05GSUdfSElEX0E0VEVDSD1tCi1DT05GSUdfSElEX0FQUExFPW0KLUNPTkZJR19ISURfQkVMS0lOPW0KLUNPTkZJR19ISURfQ0hFUlJZPW0KLUNPTkZJR19ISURfQ0hJQ09OWT1tCi1DT05GSUdfSElEX0NZUFJFU1M9bQotQ09ORklHX0hJRF9FWktFWT1tCi1DT05GSUdfSElEX0dZUkFUSU9OPW0KLUNPTkZJR19ISURfTE9HSVRFQ0g9bQotQ09ORklHX0hJRF9NSUNST1NPRlQ9bQotQ09ORklHX0hJRF9NT05URVJFWT1tCi1DT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KLUNPTkZJR19ISURfUEVUQUxZTlg9bQotQ09ORklHX0hJRF9TQU1TVU5HPW0KLUNPTkZJR19ISURfU09OWT1tCi1DT05GSUdfSElEX1NVTlBMVVM9bQotQ09ORklHX1VTQj15Ci1DT05GSUdfVVNCX0RFQlVHPXkKLUNPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX1NVU1BFTkQ9eQotQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15Ci1DT05GSUdfVVNCX01PTj15Ci1DT05GSUdfVVNCX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX01VU0JfT1RHPXkKLUNPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15Ci1DT05GSUdfVVNCX1NUT1JBR0U9bQotQ09ORklHX1VTQl9MSUJVU1VBTD15Ci1DT05GSUdfVVNCX1RFU1Q9bQotQ09ORklHX1VTQl9HQURHRVQ9bQotQ09ORklHX1VTQl9HQURHRVRfREVCVUc9eQotQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVM9eQotQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlM9eQotQ09ORklHX1VTQl9aRVJPPW0KLUNPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KLUNPTkZJR19VU0JfR19OT0tJQT1tCi1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQz1tCi0jIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFIGlzIG5vdCBzZXQKLUNPTkZJR19NTUNfT01BUF9IUz1tCi1DT05GSUdfTkVXX0xFRFM9eQotQ09ORklHX0xFRFNfQ0xBU1M9bQotQ09ORklHX1JUQ19DTEFTUz1tCi1DT05GSUdfUlRDX0RSVl9UV0w0MDMwPW0KLUNPTkZJR19FWFQyX0ZTPW0KLUNPTkZJR19FWFQzX0ZTPW0KLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX1FVT1RBPXkKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19NU0RPU19GUz1tCi1DT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfVE1QRlM9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19DUkFNRlM9eQotQ09ORklHX05GU19GUz1tCi1DT05GSUdfTkZTX1YzPXkKLUNPTkZJR19ORlNfVjQ9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19USU1FUl9TVEFUUz15Ci1DT05GSUdfUFJPVkVfTE9DS0lORz15Ci1DT05GSUdfTE9DS19TVEFUPXkKLUNPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NFQ1VSSVRZPXkKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fRUNCPXkKLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX0FFUz15Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSQ19DQ0lUVD15Ci1DT05GSUdfQ1JDNz1tCi1DT05GSUdfTElCQ1JDMzJDPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzExMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3M1cGMxMTBfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmMyZDE0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzExMF9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1M1UFYyMTA9eQotQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQ9MQotQ09ORklHX01BQ0hfU01ES0MxMTA9eQotQ09ORklHX1ZNU1BMSVRfMkc9eQotQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgotQ09ORklHX1ZGUD15Ci1DT05GSUdfTkVPTj15Ci1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfU0FNU1VORz15Ci1DT05GSUdfU0VSSUFMX1NBTVNVTkdfQ09OU09MRT15Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19NU0RPU19GUz15Ci1DT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfVE1QRlM9eQotQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci1DT05GSUdfQ1JBTUZTPXkKLUNPTkZJR19ST01GU19GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19CU0RfRElTS0xBQkVMPXkKLUNPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19BU0NJST15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19TUElOTE9DSz15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0RFQlVHX1VTRVI9eQotQ09ORklHX0RFQlVHX0VSUk9SUz15Ci1DT05GSUdfREVCVUdfTEw9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfREVCVUdfUzNDX1VBUlQ9MQotQ09ORklHX0NSQ19DQ0lUVD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZwppbmRleCAxNzUzODM2Li4wNDg4YTFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwdjIxMF9kZWZjb25maWcKQEAgLTcsNiArNywxMSBAQAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUzVQVjIxMD15CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0xCitDT05GSUdfUzNDX0RFVl9GQj15CitDT05GSUdfUzVQVjIxMF9TRVRVUF9GQl8yNEJQUD15CitDT05GSUdfTUFDSF9BUVVJTEE9eQorQ09ORklHX01BQ0hfR09OST15CitDT05GSUdfTUFDSF9TTURLQzExMD15CiBDT05GSUdfTUFDSF9TTURLVjIxMD15CiBDT05GSUdfVk1TUExJVF8yRz15CiBDT05GSUdfUFJFRU1QVD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA2NmMxNjBiLi45ZDYxMjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTE0LDcgKzE0LDcgQEAKICAqIGNhY2hlIGJlZm9yZSB0aGUgdHJhbnNmZXIgaXMgZG9uZSwgY2F1c2luZyBvbGQgZGF0YSB0byBiZSBzZWVuIGJ5CiAgKiB0aGUgQ1BVLgogICovCi0jZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTglMMV9DQUNIRV9CWVRFUworI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTglMMV9DQUNIRV9CWVRFUwogCiAvKgogICogV2l0aCBFQUJJIG9uIEFSTXY1IGFuZCBhYm92ZSB3ZSBtdXN0IGhhdmUgNjQtYml0IGFsaWduZWQgc2xhYiBwb2ludGVycy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDY5Y2UwNzIuLmMyMjZmZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTQ0LDE2ICsxNDQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCXJldHVybiAzMjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSkKLXsKLQlyZXR1cm4gISFhcmNoX2lzX2NvaGVyZW50KCk7Ci19Ci0KIC8qCiAgKiBETUEgZXJyb3JzIGFyZSBkZWZpbmVkIGJ5IGFsbC1iaXRzLXNldCBpbiB0aGUgRE1BIGFkZHJlc3MuCiAgKi8KQEAgLTI5OCw3ICsyODgsMTUgQEAKICAqIERNQSBhY2Nlc3MgYW5kIDEgaWYgdGhlIGJ1ZmZlciBuZWVkcyB0byBiZSBib3VuY2VkLgogICoKICAqLworI2lmZGVmIENPTkZJR19TQTExMTEKIGV4dGVybiBpbnQgZG1hX25lZWRzX2JvdW5jZShzdHJ1Y3QgZGV2aWNlKiwgZG1hX2FkZHJfdCwgc2l6ZV90KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkbWFfbmVlZHNfYm91bmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSAgIHNpemVfdCBzaXplKQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIC8qCiAgKiBUaGUgRE1BIEFQSSwgaW1wbGVtZW50ZWQgYnkgZG1hYm91bmNlLmMuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggNjc1MGI4ZS4uNTc0N2E4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTU5LDYgKzU5LDggQEAKIAogI2RlZmluZSBSX0FSTV9USE1fQ0FMTAkJMTAKICNkZWZpbmUgUl9BUk1fVEhNX0pVTVAyNAkzMAorI2RlZmluZSBSX0FSTV9USE1fTU9WV19BQlNfTkMJNDcKKyNkZWZpbmUgUl9BUk1fVEhNX01PVlRfQUJTCTQ4CiAKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NvcmVzaWdodC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY29yZXNpZ2h0LmgKaW5kZXggZjgyYjI1ZC4uMjEyZTQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY29yZXNpZ2h0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY29yZXNpZ2h0LmgKQEAgLTQ4LDggKzQ4LDYgQEAKIC8qIENvcmVTaWdodCBDb21wb25lbnQgUmVnaXN0ZXJzICovCiAjZGVmaW5lIENTQ1JfQ0xBU1MJMHhmZjQKIAotI2RlZmluZSBDU0NSX1BSU1IJMHgzMTQKLQogI2RlZmluZSBVTkxPQ0tfTUFHSUMJMHhjNWFjY2U1NQogCiAvKiBFVE0gY29udHJvbCByZWdpc3RlciwgIkVUTSBBcmNoaXRlY3R1cmUiLCAzLjMuMSAqLwpAQCAtMTMyLDYgKzEzMCwxMiBAQAogCQkJCUVUTUNUUkxfQlJBTkNIX09VVFBVVCB8IFwKIAkJCQlFVE1DVFJMX0RPX0NPTlRFWFRJRCkKIAorLyogRVRNIG1hbmFnZW1lbnQgcmVnaXN0ZXJzLCAiRVRNIEFyY2hpdGVjdHVyZSIsIDMuNS4yNCAqLworI2RlZmluZSBFVE1NUl9PU0xBUgkweDMwMAorI2RlZmluZSBFVE1NUl9PU0xTUgkweDMwNAorI2RlZmluZSBFVE1NUl9PU1NSUgkweDMwOAorI2RlZmluZSBFVE1NUl9QRFNSCTB4MzE0CisKIC8qIEVUQiByZWdpc3RlcnMsICJDb3JlU2lnaHQgQ29tcG9uZW50cyBUUk0iLCA5LjMgKi8KICNkZWZpbmUgRVRCUl9ERVBUSAkJMHgwNAogI2RlZmluZSBFVEJSX1NUQVRVUwkJMHgwYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmgKaW5kZXggNDY0OTJhNjMuLmViYjNjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc2Nvb3AuaApAQCAtMjIsMTggKzIyLDIzIEBACiAjZGVmaW5lIFNDT09QX0dQV1IgMHgyNAogI2RlZmluZSBTQ09PUF9HUFJSIDB4MjgKIAotI2RlZmluZSBTQ09PUF9HUENSX1BBMjIJKCAxIDw8IDEyICkKLSNkZWZpbmUgU0NPT1BfR1BDUl9QQTIxCSggMSA8PCAxMSApCi0jZGVmaW5lIFNDT09QX0dQQ1JfUEEyMAkoIDEgPDwgMTAgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTkJKCAxIDw8IDkgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTgJKCAxIDw8IDggKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTcJKCAxIDw8IDcgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTYJKCAxIDw8IDYgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTUJKCAxIDw8IDUgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTQJKCAxIDw8IDQgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTMJKCAxIDw8IDMgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTIJKCAxIDw8IDIgKQotI2RlZmluZSBTQ09PUF9HUENSX1BBMTEJKCAxIDw8IDEgKQorI2RlZmluZSBTQ09PUF9DUFJfT1VUCSgxIDw8IDcpCisjZGVmaW5lIFNDT09QX0NQUl9TRF8zVgkoMSA8PCAyKQorI2RlZmluZSBTQ09PUF9DUFJfQ0ZfWFYJKDEgPDwgMSkKKyNkZWZpbmUgU0NPT1BfQ1BSX0NGXzNWCSgxIDw8IDApCisKKyNkZWZpbmUgU0NPT1BfR1BDUl9QQTIyCSgxIDw8IDEyKQorI2RlZmluZSBTQ09PUF9HUENSX1BBMjEJKDEgPDwgMTEpCisjZGVmaW5lIFNDT09QX0dQQ1JfUEEyMAkoMSA8PCAxMCkKKyNkZWZpbmUgU0NPT1BfR1BDUl9QQTE5CSgxIDw8IDkpCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExOAkoMSA8PCA4KQorI2RlZmluZSBTQ09PUF9HUENSX1BBMTcJKDEgPDwgNykKKyNkZWZpbmUgU0NPT1BfR1BDUl9QQTE2CSgxIDw8IDYpCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExNQkoMSA8PCA1KQorI2RlZmluZSBTQ09PUF9HUENSX1BBMTQJKDEgPDwgNCkKKyNkZWZpbmUgU0NPT1BfR1BDUl9QQTEzCSgxIDw8IDMpCisjZGVmaW5lIFNDT09QX0dQQ1JfUEExMgkoMSA8PCAyKQorI2RlZmluZSBTQ09PUF9HUENSX1BBMTEJKDEgPDwgMSkKIAogc3RydWN0IHNjb29wX2NvbmZpZyB7CiAJdW5zaWduZWQgc2hvcnQgaW9fb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IGZlYjk4OGEuLjVhZmY1ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTM2LDcgKzM2LDcgQEAKIGV4dGVybiB2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKIGV4dGVybiB2b2lkIGt1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKLWV4dGVybiB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwogZXh0ZXJuIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKGNvbnN0IHZvaWQgKnB0cik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggN2YwYjZkMS4uMGIzMDg5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NHUlM0ODUgICAgICAweDU0MkUKICNkZWZpbmUgVElPQ1NSUzQ4NSAgICAgIDB4NTQyRgpAQCAtODEsNiArODIsNyBAQAogI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAogI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKICNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwJCTY0CiAKICNkZWZpbmUgVElPQ1NFUl9URU1UCTB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKaW5kZXggZjc4NGQxMS4uNzA0MTM1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGVybWJpdHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xNzcsNiArMTc3LDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYmQ4NjNkOC4uMzNiNTQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zNzgsNyArMzc4LDExIEBACiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0FTSUQpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WN19VSVNfQVNJRCkpCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzIwNzg5CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjMywgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKKyNlbHNlCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjMywgMiIgOiA6ICJyIiAoYXNpZCkgOiAiY2MiKTsKKyNlbmRpZgogCiAJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCkBAIC00MjQsNyArNDI4LDExIEBACiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX1BBR0UpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKHVhZGRyKSA6ICJjYyIpOwogCWlmICh0bGJfZmxhZyhUTEJfVjdfVUlTX1BBR0UpKQorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzcyMDc4OQorCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzMsIDMiIDogOiAiciIgKHVhZGRyICYgUEFHRV9NQVNLKSA6ICJjYyIpOworI2Vsc2UKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGMzLCAxIiA6IDogInIiICh1YWRkcikgOiAiY2MiKTsKKyNlbmRpZgogCiAJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggMmMxZGI3Ny4uZjA1YTM1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwpAQCAtOTIsNzUgKzkyLDExMSBAQAogI2RlZmluZSBDQUxMKHgpIC5sb25nIHgKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKy8qCisgKiBXaGVuIGNvbXBpbGluZyB3aXRoIC1wZywgZ2NjIGluc2VydHMgYSBjYWxsIHRvIHRoZSBtY291bnQgcm91dGluZSBhdCB0aGUKKyAqIHN0YXJ0IG9mIGV2ZXJ5IGZ1bmN0aW9uLiAgSW4gbWNvdW50LCBhcGFydCBmcm9tIHRoZSBmdW5jdGlvbidzIGFkZHJlc3MgKGluCisgKiBsciksIHdlIG5lZWQgdG8gZ2V0IGhvbGQgb2YgdGhlIGZ1bmN0aW9uJ3MgY2FsbGVyJ3MgYWRkcmVzcy4KKyAqCisgKiBPbGRlciBHQ0NzIChwcmUtNC40KSBpbnNlcnRlZCBhIGNhbGwgdG8gYSByb3V0aW5lIGNhbGxlZCBtY291bnQgbGlrZSB0aGlzOgorICoKKyAqCWJsCW1jb3VudAorICoKKyAqIFRoZXNlIHZlcnNpb25zIGhhdmUgdGhlIGxpbWl0YXRpb24gdGhhdCBpbiBvcmRlciBmb3IgdGhlIG1jb3VudCByb3V0aW5lIHRvCisgKiBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgZnVuY3Rpb24ncyBjYWxsZXIncyBhZGRyZXNzLCBhbiBBUENTLXN0eWxlIGZyYW1lCisgKiBwb2ludGVyICh3aGljaCBpcyBzZXQgdXAgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGUgY29kZSBiZWxvdykgaXMgcmVxdWlyZWQuCisgKgorICoJbW92ICAgICBpcCwgc3AKKyAqCXB1c2ggICAge2ZwLCBpcCwgbHIsIHBjfQorICoJc3ViICAgICBmcCwgaXAsICM0CisgKgorICogV2l0aCBFQUJJLCB0aGVzZSBmcmFtZSBwb2ludGVycyBhcmUgbm90IGF2YWlsYWJsZSB1bmxlc3MgLW1hcGNzLWZyYW1lIGlzCisgKiBzcGVjaWZpZWQsIGFuZCBpZiBidWlsZGluZyBhcyBUaHVtYi0yLCBub3QgZXZlbiB0aGVuLgorICoKKyAqIE5ld2VyIEdDQ3MgKDQuNCspIHNvbHZlIHRoaXMgcHJvYmxlbSBieSBpbnRyb2R1Y2luZyBhIG5ldyB2ZXJzaW9uIG9mIG1jb3VudCwKKyAqIHdpdGggY2FsbCBzaXRlcyBsaWtlOgorICoKKyAqCXB1c2gJe2xyfQorICoJYmwJX19nbnVfbWNvdW50X25jCisgKgorICogV2l0aCB0aGVzZSBjb21waWxlcnMsIGZyYW1lIHBvaW50ZXJzIGFyZSBub3QgbmVjZXNzYXJ5LgorICoKKyAqIG1jb3VudCBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIGZ1bmN0aW9uIGNhbGxlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3Vicm91dGluZQorICogY2FsbC4gIEFzIHN1Y2gsIGl0IG5lZWRzIHRvIGJlIHRyYW5zcGFyZW50IGZvciBib3RoIHRoZSBjYWxsZXIgYW5kIHRoZQorICogY2FsbGVlOiB0aGUgb3JpZ2luYWwgbHIgbmVlZHMgdG8gYmUgcmVzdG9yZWQgd2hlbiBsZWF2aW5nIG1jb3VudCwgYW5kIG5vCisgKiByZWdpc3RlcnMgc2hvdWxkIGJlIGNsb2JiZXJlZC4gIChJbiB0aGUgX19nbnVfbWNvdW50X25jIGltcGxlbWVudGF0aW9uLCB3ZQorICogY2xvYmJlciB0aGUgaXAgcmVnaXN0ZXIuICBUaGlzIGlzIE9LIGJlY2F1c2UgdGhlIEFSTSBjYWxsaW5nIGNvbnZlbnRpb24KKyAqIGFsbG93cyBpdCB0byBiZSBjbG9iYmVyZWQgaW4gc3Vicm91dGluZXMgYW5kIGRvZXNuJ3QgdXNlIGl0IHRvIGhvbGQKKyAqIHBhcmFtZXRlcnMuKQorICovCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiBFTlRSWShtY291bnQpCi0Jc3RtZGIgc3AhLCB7cjAtcjMsIGxyfQotCW1vdiByMCwgbHIKLQlzdWIgcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQorCXN0bWRiCXNwISwge3IwLXIzLCBscn0KKwltb3YJcjAsIGxyCisJc3ViCXIwLCByMCwgI01DT1VOVF9JTlNOX1NJWkUKIAogCS5nbG9ibCBtY291bnRfY2FsbAogbWNvdW50X2NhbGw6Ci0JYmwgZnRyYWNlX3N0dWIKLQlsZHIgbHIsIFtmcCwgIy00XQkJCUAgcmVzdG9yZSBscgotCWxkbWlhIHNwISwge3IwLXIzLCBwY30KKwlibAlmdHJhY2Vfc3R1YgorCWxkcglsciwgW2ZwLCAjLTRdCQkJQCByZXN0b3JlIGxyCisJbGRtaWEJc3AhLCB7cjAtcjMsIHBjfQogCiBFTlRSWShmdHJhY2VfY2FsbGVyKQotCXN0bWRiIHNwISwge3IwLXIzLCBscn0KLQlsZHIgcjEsIFtmcCwgIy00XQotCW1vdiByMCwgbHIKLQlzdWIgcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQorCXN0bWRiCXNwISwge3IwLXIzLCBscn0KKwlsZHIJcjEsIFtmcCwgIy00XQorCW1vdglyMCwgbHIKKwlzdWIJcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQogCiAJLmdsb2JsIGZ0cmFjZV9jYWxsCiBmdHJhY2VfY2FsbDoKLQlibCBmdHJhY2Vfc3R1YgotCWxkciBsciwgW2ZwLCAjLTRdCQkJQCByZXN0b3JlIGxyCi0JbGRtaWEgc3AhLCB7cjAtcjMsIHBjfQorCWJsCWZ0cmFjZV9zdHViCisJbGRyCWxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKKwlsZG1pYQlzcCEsIHtyMC1yMywgcGN9CiAKICNlbHNlCiAKIEVOVFJZKF9fZ251X21jb3VudF9uYykKLQlzdG1kYiBzcCEsIHtyMC1yMywgbHJ9Ci0JbGRyIHIwLCA9ZnRyYWNlX3RyYWNlX2Z1bmN0aW9uCi0JbGRyIHIyLCBbcjBdCi0JYWRyIHIwLCBmdHJhY2Vfc3R1YgotCWNtcCByMCwgcjIKLQlibmUgZ251X3RyYWNlCi0JbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KLQltb3YgcGMsIGlwCisJc3RtZGIJc3AhLCB7cjAtcjMsIGxyfQorCWxkcglyMCwgPWZ0cmFjZV90cmFjZV9mdW5jdGlvbgorCWxkcglyMiwgW3IwXQorCWFkcglyMCwgZnRyYWNlX3N0dWIKKwljbXAJcjAsIHIyCisJYm5lCWdudV90cmFjZQorCWxkbWlhCXNwISwge3IwLXIzLCBpcCwgbHJ9CisJbW92CXBjLCBpcAogCiBnbnVfdHJhY2U6Ci0JbGRyIHIxLCBbc3AsICMyMF0JCQlAIGxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lCi0JbW92IHIwLCBscgotCXN1YiByMCwgcjAsICNNQ09VTlRfSU5TTl9TSVpFCi0JbW92IGxyLCBwYwotCW1vdiBwYywgcjIKLQlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQotCW1vdiBwYywgaXAKKwlsZHIJcjEsIFtzcCwgIzIwXQkJCUAgbHIgb2YgaW5zdHJ1bWVudGVkIHJvdXRpbmUKKwltb3YJcjAsIGxyCisJc3ViCXIwLCByMCwgI01DT1VOVF9JTlNOX1NJWkUKKwltb3YJbHIsIHBjCisJbW92CXBjLCByMgorCWxkbWlhCXNwISwge3IwLXIzLCBpcCwgbHJ9CisJbW92CXBjLCBpcAogCiBFTlRSWShtY291bnQpCi0Jc3RtZGIgc3AhLCB7cjAtcjMsIGxyfQotCWxkciByMCwgPWZ0cmFjZV90cmFjZV9mdW5jdGlvbgotCWxkciByMiwgW3IwXQotCWFkciByMCwgZnRyYWNlX3N0dWIKLQljbXAgcjAsIHIyCi0JYm5lIHRyYWNlCi0JbGRyIGxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKLQlsZG1pYSBzcCEsIHtyMC1yMywgcGN9CisJc3RtZGIJc3AhLCB7cjAtcjMsIGxyfQorCWxkcglyMCwgPWZ0cmFjZV90cmFjZV9mdW5jdGlvbgorCWxkcglyMiwgW3IwXQorCWFkcglyMCwgZnRyYWNlX3N0dWIKKwljbXAJcjAsIHIyCisJYm5lCXRyYWNlCisJbGRyCWxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKKwlsZG1pYQlzcCEsIHtyMC1yMywgcGN9CiAKIHRyYWNlOgotCWxkciByMSwgW2ZwLCAjLTRdCQkJQCBsciBvZiBpbnN0cnVtZW50ZWQgcm91dGluZQotCW1vdiByMCwgbHIKLQlzdWIgcjAsIHIwLCAjTUNPVU5UX0lOU05fU0laRQotCW1vdiBsciwgcGMKLQltb3YgcGMsIHIyCi0JbGRyIGxyLCBbZnAsICMtNF0JCQlAIHJlc3RvcmUgbHIKLQlsZG1pYSBzcCEsIHtyMC1yMywgcGN9CisJbGRyCXIxLCBbZnAsICMtNF0JCQlAIGxyIG9mIGluc3RydW1lbnRlZCByb3V0aW5lCisJbW92CXIwLCBscgorCXN1YglyMCwgcjAsICNNQ09VTlRfSU5TTl9TSVpFCisJbW92CWxyLCBwYworCW1vdglwYywgcjIKKwlsZHIJbHIsIFtmcCwgIy00XQkJCUAgcmVzdG9yZSBscgorCWxkbWlhCXNwISwge3IwLXIzLCBwY30KIAogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAJLmdsb2JsIGZ0cmFjZV9zdHViCiBmdHJhY2Vfc3R1YjoKLQltb3YgcGMsIGxyCisJbW92CXBjLCBscgogCiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZXRtLmMgYi9hcmNoL2FybS9rZXJuZWwvZXRtLmMKaW5kZXggODI3NzUzOS4uNTY0MThmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2V0bS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9ldG0uYwpAQCAtNTQzLDcgKzU0Myw5IEBACiAJdC0+ZXRtX3BvcnRzeiA9IDE7CiAKIAlldG1fdW5sb2NrKHQpOwotCXJldCA9IGV0bV9yZWFkbCh0LCBDU0NSX1BSU1IpOworCSh2b2lkKWV0bV9yZWFkbCh0LCBFVE1NUl9QRFNSKTsKKwkvKiBkdW1teSBmaXJzdCByZWFkICovCisJKHZvaWQpZXRtX3JlYWRsKCZ0cmFjZXIsIEVUTU1SX09TU1JSKTsKIAogCXQtPm5jbXBwYWlycyA9IGV0bV9yZWFkbCh0LCBFVE1SX0NPTkZDT0RFKSAmIDB4ZjsKIAlldG1fd3JpdGVsKHQsIDB4NDQwLCBFVE1SX0NUUkwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IGM2MjhiZGYuLjZiNDYwNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTEwMiw3ICsxMDIsOSBAQAogCQl1bnNpZ25lZCBsb25nIGxvYzsKIAkJRWxmMzJfU3ltICpzeW07CiAJCXMzMiBvZmZzZXQ7CisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKIAkJdTMyIHVwcGVyLCBsb3dlciwgc2lnbiwgajEsIGoyOworI2VuZGlmCiAKIAkJb2Zmc2V0ID0gRUxGMzJfUl9TWU0ocmVsLT5yX2luZm8pOwogCQlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiAoc3ltc2VjLT5zaF9zaXplIC8gc2l6ZW9mKEVsZjMyX1N5bSkpKSB7CkBAIC0xODUsNiArMTg3LDcgQEAKIAkJCQkJKG9mZnNldCAmIDB4MGZmZik7CiAJCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCiAJCWNhc2UgUl9BUk1fVEhNX0NBTEw6CiAJCWNhc2UgUl9BUk1fVEhNX0pVTVAyNDoKIAkJCXVwcGVyID0gKih1MTYgKilsb2M7CkBAIC0yMzMsOSArMjM2LDQwIEBACiAJCQkqKHUxNiAqKShsb2MgKyAyKSA9ICh1MTYpKChsb3dlciAmIDB4ZDAwMCkgfAogCQkJCQkJICAoajEgPDwgMTMpIHwgKGoyIDw8IDExKSB8CiAJCQkJCQkgICgob2Zmc2V0ID4+IDEpICYgMHgwN2ZmKSk7CisJCQlicmVhazsKKworCQljYXNlIFJfQVJNX1RITV9NT1ZXX0FCU19OQzoKKwkJY2FzZSBSX0FSTV9USE1fTU9WVF9BQlM6CiAJCQl1cHBlciA9ICoodTE2ICopbG9jOwogCQkJbG93ZXIgPSAqKHUxNiAqKShsb2MgKyAyKTsKKworCQkJLyoKKwkJCSAqIE1PVlQvTU9WVyBpbnN0cnVjdGlvbnMgZW5jb2RpbmcgaW4gVGh1bWItMjoKKwkJCSAqCisJCQkgKiBpCT0gdXBwZXJbMTBdCisJCQkgKiBpbW00CT0gdXBwZXJbMzowXQorCQkJICogaW1tMwk9IGxvd2VyWzE0OjEyXQorCQkJICogaW1tOAk9IGxvd2VyWzc6MF0KKwkJCSAqCisJCQkgKiBpbW0xNiA9IGltbTQ6aTppbW0zOmltbTgKKwkJCSAqLworCQkJb2Zmc2V0ID0gKCh1cHBlciAmIDB4MDAwZikgPDwgMTIpIHwKKwkJCQkoKHVwcGVyICYgMHgwNDAwKSA8PCAxKSB8CisJCQkJKChsb3dlciAmIDB4NzAwMCkgPj4gNCkgfCAobG93ZXIgJiAweDAwZmYpOworCQkJb2Zmc2V0ID0gKG9mZnNldCBeIDB4ODAwMCkgLSAweDgwMDA7CisJCQlvZmZzZXQgKz0gc3ltLT5zdF92YWx1ZTsKKworCQkJaWYgKEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbykgPT0gUl9BUk1fVEhNX01PVlRfQUJTKQorCQkJCW9mZnNldCA+Pj0gMTY7CisKKwkJCSoodTE2ICopbG9jID0gKHUxNikoKHVwcGVyICYgMHhmYmYwKSB8CisJCQkJCSAgICAoKG9mZnNldCAmIDB4ZjAwMCkgPj4gMTIpIHwKKwkJCQkJICAgICgob2Zmc2V0ICYgMHgwODAwKSA+PiAxKSk7CisJCQkqKHUxNiAqKShsb2MgKyAyKSA9ICh1MTYpKChsb3dlciAmIDB4OGYwMCkgfAorCQkJCQkJICAoKG9mZnNldCAmIDB4MDcwMCkgPDwgNCkgfAorCQkJCQkJICAob2Zmc2V0ICYgMHgwMGZmKSk7CiAJCQlicmVhazsKKyNlbmRpZgogCiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIHJlbG9jYXRpb246ICV1XG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggZGUxMjUzNi4uNDE3YzM5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xNjQsMjAgKzE2NCwyMCBAQAogCQkJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKIAkJCWludCBpZHgpCiB7Ci0JczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKKwlzNjQgbGVmdCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CiAJCWxlZnQgPSBwZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKIAkJaHdjLT5sYXN0X3BlcmlvZCA9IHBlcmlvZDsKIAkJcmV0ID0gMTsKIAl9CiAKIAlpZiAodW5saWtlbHkobGVmdCA8PSAwKSkgewogCQlsZWZ0ICs9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KQEAgLTE4NSw3ICsxODUsNyBAQAogCWlmIChsZWZ0ID4gKHM2NClhcm1wbXUtPm1heF9wZXJpb2QpCiAJCWxlZnQgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CiAKIAlhcm1wbXUtPndyaXRlX2NvdW50ZXIoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKIApAQCAtMjA0LDE4ICsyMDQsMTggQEAKIAl1NjQgZGVsdGE7CiAKIGFnYWluOgotCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwlwcmV2X3Jhd19jb3VudCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKIAluZXdfcmF3X2NvdW50ID0gYXJtcG11LT5yZWFkX2NvdW50ZXIoaWR4KTsKIAotCWlmIChhdG9taWM2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCWlmIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCiAJCQkgICAgIG5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQogCQlnb3RvIGFnYWluOwogCiAJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwogCWRlbHRhID4+PSBzaGlmdDsKIAotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7Ci0JYXRvbWljNjRfc3ViKGRlbHRhLCAmaHdjLT5wZXJpb2RfbGVmdCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCWxvY2FsNjRfc3ViKGRlbHRhLCAmaHdjLT5wZXJpb2RfbGVmdCk7CiAKIAlyZXR1cm4gbmV3X3Jhd19jb3VudDsKIH0KQEAgLTQ3OCw3ICs0NzgsNyBAQAogCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CiAJCWh3Yy0+c2FtcGxlX3BlcmlvZCAgPSBhcm1wbXUtPm1heF9wZXJpb2Q7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgICAgPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJfQogCiAJZXJyID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYW02MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKaW5kZXggMDIxMzhhZi4uNDRlYjlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhbTYwLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAqIFNQSSBkZXZpY2VzLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0RBVEFGTEFTSCkKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBfX2luaXRkYXRhIGNhbTYwX3NwaV9wYXJ0aXRpb25zW10gPSB7CitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY2FtNjBfc3BpX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lCT0gIkJPT1QxIiwKIAkJLm9mZnNldAk9IDAsCkBAIC05OCwxNCArOTgsMTQgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgY2FtNjBfc3BpX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgY2FtNjBfc3BpX2ZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUJCT0gInNwaV9mbGFzaCIsCiAJLnBhcnRzCQk9IGNhbTYwX3NwaV9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY2FtNjBfc3BpX3BhcnRpdGlvbnMpCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FtNjBfc3BpX2RldmljZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY2FtNjBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogI2lmIGRlZmluZWQoQ09ORklHX01URF9EQVRBRkxBU0gpCiAJewkvKiBEYXRhRmxhc2ggY2hpcCAqLwogCQkubW9kYWxpYXMJPSAibXRkX2RhdGFmbGFzaCIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBiM2ViZTllLi5kMGI3ZDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtY2xwczcxMXgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTY5LDEzICs2OSw2IEBACiAjZGVmaW5lIFNZU1BMRF9WSVJUX0JBU0UJMHhmZTAwMDAwMAogI2RlZmluZSBTWVNQTERfQkFTRQkJU1lTUExEX1ZJUlRfQkFTRQogCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotI2RlZmluZSBQQ0lPX0JBU0UJCUlPX0JBU0UKLQotI2VuZGlmCi0KLQogI2lmICBkZWZpbmVkIChDT05GSUdfQVJDSF9BVVRDUFUxMikKIAogI2RlZmluZSAgQ1M4OTcxMl9WSVJUX0JBU0UJQ0xQUzcxMTFfVklSVF9CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCmluZGV4IDAzMTZlMjAuLjcxZjkwZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnCkBAIC01MCw2ICs1MCwxMSBAQAogCXNlbGVjdCBBSU5UQwogCXNlbGVjdCBBUkNIX0RBVklOQ0lfRE14CiAKK2NvbmZpZyBBUkNIX0RBVklOQ0lfVE5FVFYxMDdYCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDUF9JTlRDCisJYm9vbCAiVE5FVFYxMDdYIGJhc2VkIHN5c3RlbSIKKwogY29tbWVudCAiRGFWaW5jaSBCb2FyZCBUeXBlIgogCiBjb25maWcgTUFDSF9EQVZJTkNJX0VWTQpAQCAtMTczLDYgKzE3OCwxMyBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1BQ0hfVE5FVFYxMDdYCisJYm9vbCAiVEkgVE5FVFYxMDdYIFJlZmVyZW5jZSBQbGF0Zm9ybSIKKwlkZWZhdWx0IEFSQ0hfREFWSU5DSV9UTkVUVjEwN1gKKwlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9UTkVUVjEwN1gKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgVEkgVE5FVFYxMDdYIEV2YWx1YXRpb24gTW9kdWxlLgorCiBjb25maWcgREFWSU5DSV9NVVgKIAlib29sICJEQVZJTkNJIG11bHRpcGxleGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvTWFrZWZpbGUKaW5kZXggNmFhYzg4MC4uZWFiNGMwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9NYWtlZmlsZQpAQCAtMTYsNiArMTYsOCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSV9ETTM2NSkJKz0gZG0zNjUubyBkZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX0RBVklOQ0lfREE4MzApICAgICAgICArPSBkYTgzMC5vIGRldmljZXMtZGE4eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSV9EQTg1MCkgICAgICAgICs9IGRhODUwLm8gZGV2aWNlcy1kYTh4eC5vCitvYmotJChDT05GSUdfQVJDSF9EQVZJTkNJX1RORVRWMTA3WCkgICAgKz0gdG5ldHYxMDd4Lm8gZGV2aWNlcy10bmV0djEwN3gubworb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSV9UTkVUVjEwN1gpICAgICs9IGdwaW8tdG5ldHYxMDd4Lm8KIAogb2JqLSQoQ09ORklHX0FJTlRDKQkJCSs9IGlycS5vCiBvYmotJChDT05GSUdfQ1BfSU5UQykJCQkrPSBjcF9pbnRjLm8KQEAgLTMwLDYgKzMyLDcgQEAKIG9iai0kKENPTkZJR19NQUNIX0RBVklOQ0lfRE0zNjVfRVZNKQkrPSBib2FyZC1kbTM2NS1ldm0ubwogb2JqLSQoQ09ORklHX01BQ0hfREFWSU5DSV9EQTgzMF9FVk0pCSs9IGJvYXJkLWRhODMwLWV2bS5vCiBvYmotJChDT05GSUdfTUFDSF9EQVZJTkNJX0RBODUwX0VWTSkJKz0gYm9hcmQtZGE4NTAtZXZtLm8KK29iai0kKENPTkZJR19NQUNIX1RORVRWMTA3WCkJCSs9IGJvYXJkLXRuZXR2MTA3eC1ldm0ubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQKIG9iai0kKENPTkZJR19DUFVfRlJFUSkJCQkrPSBjcHVmcmVxLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTgzMC1ldm0uYwppbmRleCAyMTJkOTcwLi5jMzk5NGYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4MzAtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODMwLWV2bS5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkubnVtX3NlcmlhbGl6ZXIgPSBBUlJBWV9TSVpFKGRhODMwX2lpc19zZXJpYWxpemVyX2RpcmVjdGlvbiksCiAJLnRkbV9zbG90cyAgICAgID0gMiwKIAkuc2VyaWFsX2RpciAgICAgPSBkYTgzMF9paXNfc2VyaWFsaXplcl9kaXJlY3Rpb24sCi0JLmV2ZW50cV9ubyAgICAgID0gRVZFTlRRXzAsCisJLmFzcF9jaGFuX3EgICAgID0gRVZFTlRRXzAsCiAJLnZlcnNpb24JPSBNQ0FTUF9WRVJTSU9OXzIsCiAJLnR4bnVtZXZ0CT0gMSwKIAkucnhudW1ldnQJPSAxLApAQCAtNDk0LDEyICs0OTQsNDIgQEAKIAkuYnVzX2RlbGF5CT0gMCwJLyogdXNlYyAqLwogfTsKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgRURNQSBjaGFubmVscy9zbG90cyBhcmUgbm90IGJlaW5nIHVzZWQgYnkgZHJpdmVycyAoZm9yCisgKiBleGFtcGxlOiBUaW1lciwgR1BJTywgVUFSVCBldmVudHMgZXRjKSBvbiBkYTgzMC9vbWFwLWwxMzcgRVZNLCBoZW5jZQorICogdGhleSBhcmUgYmVpbmcgcmVzZXJ2ZWQgZm9yIGNvZGVjcyBvbiB0aGUgRFNQIHNpZGUuCisgKi8KK3N0YXRpYyBjb25zdCBzMTYgZGE4MzBfZG1hX3Jzdl9jaGFuc1tdWzJdID0geworCS8qIChvZmZzZXQsIG51bWJlcikgKi8KKwl7IDgsICAyfSwKKwl7MTIsICAyfSwKKwl7MjQsICA0fSwKKwl7MzAsICAyfSwKKwl7LTEsIC0xfQorfTsKKworc3RhdGljIGNvbnN0IHMxNiBkYTgzMF9kbWFfcnN2X3Nsb3RzW11bMl0gPSB7CisJLyogKG9mZnNldCwgbnVtYmVyKSAqLworCXsgOCwgIDJ9LAorCXsxMiwgIDJ9LAorCXsyNCwgIDR9LAorCXszMCwgMjZ9LAorCXstMSwgLTF9Cit9OworCitzdGF0aWMgc3RydWN0IGVkbWFfcnN2X2luZm8gZGE4MzBfZWRtYV9yc3ZbXSA9IHsKKwl7CisJCS5yc3ZfY2hhbnMJPSBkYTgzMF9kbWFfcnN2X2NoYW5zLAorCQkucnN2X3Nsb3RzCT0gZGE4MzBfZG1hX3Jzdl9zbG90cywKKwl9LAorfTsKKwogc3RhdGljIF9faW5pdCB2b2lkIGRhODMwX2V2bV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRhdmluY2lfc29jX2luZm8gKnNvY19pbmZvID0gJmRhdmluY2lfc29jX2luZm87CiAJaW50IHJldDsKIAotCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2VkbWEoKTsKKwlyZXQgPSBkYTgzMF9yZWdpc3Rlcl9lZG1hKGRhODMwX2VkbWFfcnN2KTsKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJkYTgzMF9ldm1faW5pdDogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRhODUwLWV2bS5jCmluZGV4IGIyODBlZmIuLmZkYzJjYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kYTg1MC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZGE4NTAtZXZtLmMKQEAgLTM0Myw3ICszNDMsNyBAQAogCS5udW1fc2VyaWFsaXplcgk9IEFSUkFZX1NJWkUoZGE4NTBfaWlzX3NlcmlhbGl6ZXJfZGlyZWN0aW9uKSwKIAkudGRtX3Nsb3RzCT0gMiwKIAkuc2VyaWFsX2Rpcgk9IGRhODUwX2lpc19zZXJpYWxpemVyX2RpcmVjdGlvbiwKLQkuZXZlbnRxX25vCT0gRVZFTlRRXzEsCisJLmFzcF9jaGFuX3EJPSBFVkVOVFFfMSwKIAkudmVyc2lvbgk9IE1DQVNQX1ZFUlNJT05fMiwKIAkudHhudW1ldnQJPSAxLAogCS5yeG51bWV2dAk9IDEsCkBAIC02MzcsNiArNjM3LDU2IEBACiB9CiBkZXZpY2VfaW5pdGNhbGwoZGE4NTBfZXZtX2NvbmZpZ19lbWFjKTsKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgRURNQSBjaGFubmVscy9zbG90cyBhcmUgbm90IGJlaW5nIHVzZWQgYnkgZHJpdmVycyAoZm9yCisgKiBleGFtcGxlOiBUaW1lciwgR1BJTywgVUFSVCBldmVudHMgZXRjKSBvbiBkYTg1MC9vbWFwLWwxMzggRVZNLCBoZW5jZQorICogdGhleSBhcmUgYmVpbmcgcmVzZXJ2ZWQgZm9yIGNvZGVjcyBvbiB0aGUgRFNQIHNpZGUuCisgKi8KK3N0YXRpYyBjb25zdCBzMTYgZGE4NTBfZG1hMF9yc3ZfY2hhbnNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyA4LCAgNn0sCisJezI0LCAgNH0sCisJezMwLCAgMn0sCisJey0xLCAtMX0KK307CisKK3N0YXRpYyBjb25zdCBzMTYgZGE4NTBfZG1hMF9yc3Zfc2xvdHNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyA4LCAgNn0sCisJezI0LCAgNH0sCisJezMwLCA1MH0sCisJey0xLCAtMX0KK307CisKK3N0YXRpYyBjb25zdCBzMTYgZGE4NTBfZG1hMV9yc3ZfY2hhbnNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyAwLCAyOH0sCisJezMwLCAgMn0sCisJey0xLCAtMX0KK307CisKK3N0YXRpYyBjb25zdCBzMTYgZGE4NTBfZG1hMV9yc3Zfc2xvdHNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyAwLCAyOH0sCisJezMwLCA5MH0sCisJey0xLCAtMX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyBkYTg1MF9lZG1hX2NjMF9yc3YgPSB7CisJLnJzdl9jaGFucwk9IGRhODUwX2RtYTBfcnN2X2NoYW5zLAorCS5yc3Zfc2xvdHMJPSBkYTg1MF9kbWEwX3Jzdl9zbG90cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyBkYTg1MF9lZG1hX2NjMV9yc3YgPSB7CisJLnJzdl9jaGFucwk9IGRhODUwX2RtYTFfcnN2X2NoYW5zLAorCS5yc3Zfc2xvdHMJPSBkYTg1MF9kbWExX3Jzdl9zbG90cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyAqZGE4NTBfZWRtYV9yc3ZbMl0gPSB7CisJJmRhODUwX2VkbWFfY2MwX3JzdiwKKwkmZGE4NTBfZWRtYV9jYzFfcnN2LAorfTsKKwogc3RhdGljIF9faW5pdCB2b2lkIGRhODUwX2V2bV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTY0Niw3ICs2OTYsNyBAQAogCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogVFBTNjUwNzAgUE1JQyBpbml0IGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKIAotCXJldCA9IGRhOHh4X3JlZ2lzdGVyX2VkbWEoKTsKKwlyZXQgPSBkYTg1MF9yZWdpc3Rlcl9lZG1hKGRhODUwX2VkbWFfcnN2KTsKIAlpZiAocmV0KQogCQlwcl93YXJuaW5nKCJkYTg1MF9ldm1faW5pdDogZWRtYSByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ2eC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTY0NngtZXZtLmMKaW5kZXggNmQ4ODg5My4uNDUwMmYzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtNjQ2eC1ldm0uYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG02NDZ4LWV2bS5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJLm51bV9zZXJpYWxpemVyID0gQVJSQVlfU0laRShkbTY0NnhfaWlzX3NlcmlhbGl6ZXJfZGlyZWN0aW9uKSwKIAkJLnRkbV9zbG90cyAgICAgID0gMiwKIAkJLnNlcmlhbF9kaXIgICAgID0gZG02NDZ4X2lpc19zZXJpYWxpemVyX2RpcmVjdGlvbiwKLQkJLmV2ZW50cV9ubyAgICAgID0gRVZFTlRRXzAsCisJCS5hc3BfY2hhbl9xICAgICA9IEVWRU5UUV8wLAogCX0sCiAJewogCQkudHhfZG1hX29mZnNldCAgPSAweDQwMCwKQEAgLTMzMiw3ICszMzIsNyBAQAogCQkubnVtX3NlcmlhbGl6ZXIgPSBBUlJBWV9TSVpFKGRtNjQ2eF9kaXRfc2VyaWFsaXplcl9kaXJlY3Rpb24pLAogCQkudGRtX3Nsb3RzICAgICAgPSAzMiwKIAkJLnNlcmlhbF9kaXIgICAgID0gZG02NDZ4X2RpdF9zZXJpYWxpemVyX2RpcmVjdGlvbiwKLQkJLmV2ZW50cV9ubyAgICAgID0gRVZFTlRRXzAsCisJCS5hc3BfY2hhbl9xICAgICA9IEVWRU5UUV8wLAogCX0sCiB9OwogCkBAIC03MjEsNiArNzIxLDM5IEBACiAjZGVmaW5lIERNNjQ2WF9FVk1fUEhZX01BU0sJCSgweDIpCiAjZGVmaW5lIERNNjQ2WF9FVk1fTURJT19GUkVRVUVOQ1kJKDIyMDAwMDApIC8qIFBIWSBidXMgZnJlcXVlbmN5ICovCiAKKy8qCisgKiBUaGUgZm9sbG93aW5nIEVETUEgY2hhbm5lbHMvc2xvdHMgYXJlIG5vdCBiZWluZyB1c2VkIGJ5IGRyaXZlcnMgKGZvcgorICogZXhhbXBsZTogVGltZXIsIEdQSU8sIFVBUlQgZXZlbnRzIGV0Yykgb24gZG02NDZ4LCBoZW5jZSB0aGV5IGFyZSBiZWluZworICogcmVzZXJ2ZWQgZm9yIGNvZGVjcyBvbiB0aGUgRFNQIHNpZGUuCisgKi8KK3N0YXRpYyBjb25zdCBzMTYgZG02NDZ4X2RtYV9yc3ZfY2hhbnNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyAwLCAgNH0sCisJezEzLCAgM30sCisJezI0LCAgNH0sCisJezMwLCAgMn0sCisJezU0LCAgM30sCisJey0xLCAtMX0KK307CisKK3N0YXRpYyBjb25zdCBzMTYgZG02NDZ4X2RtYV9yc3Zfc2xvdHNbXVsyXSA9IHsKKwkvKiAob2Zmc2V0LCBudW1iZXIpICovCisJeyAwLCAgNH0sCisJezEzLCAgM30sCisJezI0LCAgNH0sCisJezMwLCAgMn0sCisJezU0LCAgM30sCisJezEyOCwgMzg0fSwKKwl7LTEsIC0xfQorfTsKKworc3RhdGljIHN0cnVjdCBlZG1hX3Jzdl9pbmZvIGRtNjQ2eF9lZG1hX3JzdltdID0geworCXsKKwkJLnJzdl9jaGFucwk9IGRtNjQ2eF9kbWFfcnN2X2NoYW5zLAorCQkucnN2X3Nsb3RzCT0gZG02NDZ4X2RtYV9yc3Zfc2xvdHMsCisJfSwKK307CisKIHN0YXRpYyBfX2luaXQgdm9pZCBldm1faW5pdCh2b2lkKQogewogCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOwpAQCAtNzMyLDYgKzc2NSw4IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhdmluY2lfbmFuZF9kZXZpY2UpOwogCisJZG02NDZ4X2luaXRfZWRtYShkbTY0NnhfZWRtYV9yc3YpOworCiAJaWYgKEhBU19BVEEpCiAJCWRhdmluY2lfaW5pdF9pZGUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLXRuZXR2MTA3eC1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC10bmV0djEwN3gtZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyYTlkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC10bmV0djEwN3gtZXZtLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBUZXhhcyBJbnN0cnVtZW50cyBUTkVUVjEwN1ggRVZNIEJvYXJkIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvZWRtYS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9jcF9pbnRjLmg+CisjaW5jbHVkZSA8bWFjaC90bmV0djEwN3guaD4KKworI2RlZmluZSBFVk1fTU1DX1dQX0dQSU8JCTIxCisjZGVmaW5lIEVWTV9NTUNfQ0RfR1BJTwkJMjQKKworc3RhdGljIGludCBpbml0aWFsaXplX2dwaW8oaW50IGdwaW8sIGNoYXIgKmRlc2MpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCBkZXNjKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoImNhbm5vdCBvcGVuICVzIGdwaW9cbiIsIGRlc2MpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisJcmV0dXJuIGdwaW87Cit9CisKK3N0YXRpYyBpbnQgbW1jX2dldF9jZChpbnQgaW5kZXgpCit7CisJc3RhdGljIGludCBncGlvOworCisJaWYgKCFncGlvKQorCQlncGlvID0gaW5pdGlhbGl6ZV9ncGlvKEVWTV9NTUNfQ0RfR1BJTywgIm1tYyBjYXJkIGRldGVjdCIpOworCisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm4gZ3BpbzsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShncGlvKSA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IG1tY19nZXRfcm8oaW50IGluZGV4KQoreworCXN0YXRpYyBpbnQgZ3BpbzsKKworCWlmICghZ3BpbykKKwkJZ3BpbyA9IGluaXRpYWxpemVfZ3BpbyhFVk1fTU1DX1dQX0dQSU8sICJtbWMgd3JpdGUgcHJvdGVjdCIpOworCisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm4gZ3BpbzsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShncGlvKSA/IDEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IGRhdmluY2lfbW1jX2NvbmZpZyBtbWNfY29uZmlnID0geworCS5nZXRfY2QJCT0gbW1jX2dldF9jZCwKKwkuZ2V0X3JvCQk9IG1tY19nZXRfcm8sCisJLndpcmVzCQk9IDQsCisJLm1heF9mcmVxCT0gNTAwMDAwMDAsCisJLmNhcHMJCT0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQsCisJLnZlcnNpb24JPSBNTUNfQ1RMUl9WRVJTSU9OXzEsCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgc2RpbzFfcGluc1tdIF9faW5pdGRhdGEgPSB7CisJVE5FVFYxMDdYX1NESU8xX0NMS18xLAkJVE5FVFYxMDdYX1NESU8xX0NNRF8xLAorCVRORVRWMTA3WF9TRElPMV9EQVRBMF8xLAlUTkVUVjEwN1hfU0RJTzFfREFUQTFfMSwKKwlUTkVUVjEwN1hfU0RJTzFfREFUQTJfMSwJVE5FVFYxMDdYX1NESU8xX0RBVEEzXzEsCisJVE5FVFYxMDdYX0dQSU8yMSwJCVRORVRWMTA3WF9HUElPMjQsCisJLTEKK307CisKK3N0YXRpYyBjb25zdCBzaG9ydCB1YXJ0MV9waW5zW10gX19pbml0ZGF0YSA9IHsKKwlUTkVUVjEwN1hfVUFSVDFfUkQsCQlUTkVUVjEwN1hfVUFSVDFfVEQsCisJLTEKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBuYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3QgMTIgc2VjdG9ycyAqLworCXsKKwkJLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9ICgxMipTWl8xMjhLKSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIGJvb3Rsb2FkZXIgcGFyYW1zIGluIHRoZSBuZXh0IHNlY3RvciAqLworCXsKKwkJLm5hbWUJCT0gInBhcmFtcyIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZQkJPSBTWl8xMjhLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJLyoga2VybmVsICovCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCQk9IFNaXzRNLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkJLm5hbWUJCT0gImZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9uYW5kX3BkYXRhIG5hbmRfY29uZmlnID0geworCS5tYXNrX2NsZQk9IDB4NDAwMCwKKwkubWFza19hbGUJPSAweDIwMDAsCisJLnBhcnRzCQk9IG5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG5hbmRfcGFydGl0aW9ucyksCisJLmVjY19tb2RlCT0gTkFORF9FQ0NfSFcsCisJLm9wdGlvbnMJPSBOQU5EX1VTRV9GTEFTSF9CQlQsCisJLmVjY19iaXRzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV91YXJ0X2NvbmZpZyBzZXJpYWxfY29uZmlnIF9faW5pdGNvbnN0ID0geworCS5lbmFibGVkX3VhcnRzCT0gQklUKDEpLAorfTsKKworc3RhdGljIHN0cnVjdCB0bmV0djEwN3hfZGV2aWNlX2luZm8gZXZtX2RldmljZV9pbmZvIF9faW5pdGNvbnN0ID0geworCS5zZXJpYWxfY29uZmlnCQk9ICZzZXJpYWxfY29uZmlnLAorCS5tbWNfY29uZmlnWzFdCQk9ICZtbWNfY29uZmlnLAkvKiBjb250cm9sbGVyIDEgKi8KKwkubmFuZF9jb25maWdbMF0JCT0gJm5hbmRfY29uZmlnLAkvKiBjaGlwIHNlbGVjdCAwICovCit9OworCitzdGF0aWMgX19pbml0IHZvaWQgdG5ldHYxMDd4X2V2bV9ib2FyZF9pbml0KHZvaWQpCit7CisJZGF2aW5jaV9jZmdfcmVnX2xpc3Qoc2RpbzFfcGlucyk7CisJZGF2aW5jaV9jZmdfcmVnX2xpc3QodWFydDFfcGlucyk7CisKKwl0bmV0djEwN3hfZGV2aWNlc19pbml0KCZldm1fZGV2aWNlX2luZm8pOworfQorCisjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUKK3N0YXRpYyBpbnQgX19pbml0IHRuZXR2MTA3eF9ldm1fY29uc29sZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIDAsICIxMTUyMDAiKTsKK30KK2NvbnNvbGVfaW5pdGNhbGwodG5ldHYxMDd4X2V2bV9jb25zb2xlX2luaXQpOworI2VuZGlmCisKK01BQ0hJTkVfU1RBUlQoVE5FVFYxMDdYLCAiVE5FVFYxMDdYIEVWTSIpCisJLnBoeXNfaW8JPSBUTkVUVjEwN1hfSU9fQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoVE5FVFYxMDdYX0lPX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IChUTkVUVjEwN1hfRERSX0JBU0UgKyAweDEwMCksCisJLm1hcF9pbwkJPSB0bmV0djEwN3hfaW5pdCwKKwkuaW5pdF9pcnEJPSBjcF9pbnRjX2luaXQsCisJLnRpbWVyCQk9ICZkYXZpbmNpX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSB0bmV0djEwN3hfZXZtX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODMwLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4MzAuYwppbmRleCAyM2U5ZWRhLi5lYzIzYWI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4MzAuYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGE4MzAuYwpAQCAtMTAyNCw3ICsxMDI0LDYgQEAKIAlbSVJRX0RBOFhYX0VWVE9VVDRdCQk9IDcsCiAJW0lSUV9EQThYWF9FVlRPVVQ1XQkJPSA3LAogCVtJUlFfREE4WFhfRVZUT1VUNl0JCT0gNywKLQlbSVJRX0RBOFhYX0VWVE9VVDZdCQk9IDcsCiAJW0lSUV9EQThYWF9FVlRPVVQ3XQkJPSA3LAogCVtJUlFfREE4WFhfQ0NJTlQwXQkJPSA3LAogCVtJUlFfREE4WFhfQ0NFUlJJTlRdCQk9IDcsCkBAIC0xMDQyLDExICsxMDQxLDcgQEAKIAlbSVJRX0RBOFhYX1RJTlQzNF8xXQkJPSA3LAogCVtJUlFfREE4WFhfVUFSVElOVDBdCQk9IDcsCiAJW0lSUV9EQThYWF9LRVlNR1JJTlRdCQk9IDcsCi0JW0lSUV9EQThYWF9TRUNJTlRdCQk9IDcsCi0JW0lSUV9EQThYWF9TRUNLRVlFUlJdCQk9IDcsCiAJW0lSUV9EQTgzMF9NUFVFUlJdCQk9IDcsCi0JW0lSUV9EQTgzMF9JT1BVRVJSXQkJPSA3LAotCVtJUlFfREE4MzBfQk9PVENGR0VSUl0JCT0gNywKIAlbSVJRX0RBOFhYX0NISVBJTlQwXQkJPSA3LAogCVtJUlFfREE4WFhfQ0hJUElOVDFdCQk9IDcsCiAJW0lSUV9EQThYWF9DSElQSU5UMl0JCT0gNywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kYTg1MC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODUwLmMKaW5kZXggNmI4MzMxYi4uNjhlZDU4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RhODUwLmMKQEAgLTY0Myw3ICs2NDMsNiBAQAogCVtJUlFfREE4WFhfRVZUT1VUNF0JCT0gNywKIAlbSVJRX0RBOFhYX0VWVE9VVDVdCQk9IDcsCiAJW0lSUV9EQThYWF9FVlRPVVQ2XQkJPSA3LAotCVtJUlFfREE4WFhfRVZUT1VUNl0JCT0gNywKIAlbSVJRX0RBOFhYX0VWVE9VVDddCQk9IDcsCiAJW0lSUV9EQThYWF9DQ0lOVDBdCQk9IDcsCiAJW0lSUV9EQThYWF9DQ0VSUklOVF0JCT0gNywKQEAgLTY2MSwyNyArNjYwLDcgQEAKIAlbSVJRX0RBOFhYX1RJTlQzNF8xXQkJPSA3LAogCVtJUlFfREE4WFhfVUFSVElOVDBdCQk9IDcsCiAJW0lSUV9EQThYWF9LRVlNR1JJTlRdCQk9IDcsCi0JW0lSUV9EQThYWF9TRUNJTlRdCQk9IDcsCi0JW0lSUV9EQThYWF9TRUNLRVlFUlJdCQk9IDcsCiAJW0lSUV9EQTg1MF9NUFVBRERSRVJSMF0JCT0gNywKLQlbSVJRX0RBODUwX01QVVBST1RFUlIwXQkJPSA3LAotCVtJUlFfREE4NTBfSU9QVUFERFJFUlIwXQk9IDcsCi0JW0lSUV9EQTg1MF9JT1BVUFJPVEVSUjBdCT0gNywKLQlbSVJRX0RBODUwX0lPUFVBRERSRVJSMV0JPSA3LAotCVtJUlFfREE4NTBfSU9QVVBST1RFUlIxXQk9IDcsCi0JW0lSUV9EQTg1MF9JT1BVQUREUkVSUjJdCT0gNywKLQlbSVJRX0RBODUwX0lPUFVQUk9URVJSMl0JPSA3LAotCVtJUlFfREE4NTBfQk9PVENGR19BRERSX0VSUl0JPSA3LAotCVtJUlFfREE4NTBfQk9PVENGR19QUk9UX0VSUl0JPSA3LAotCVtJUlFfREE4NTBfTVBVQUREUkVSUjFdCQk9IDcsCi0JW0lSUV9EQTg1MF9NUFVQUk9URVJSMV0JCT0gNywKLQlbSVJRX0RBODUwX0lPUFVBRERSRVJSM10JPSA3LAotCVtJUlFfREE4NTBfSU9QVVBST1RFUlIzXQk9IDcsCi0JW0lSUV9EQTg1MF9JT1BVQUREUkVSUjRdCT0gNywKLQlbSVJRX0RBODUwX0lPUFVQUk9URVJSNF0JPSA3LAotCVtJUlFfREE4NTBfSU9QVUFERFJFUlI1XQk9IDcsCi0JW0lSUV9EQTg1MF9JT1BVUFJPVEVSUjVdCT0gNywKLQlbSVJRX0RBODUwX01JT1BVX0JPT1RDRkdfRVJSXQk9IDcsCiAJW0lSUV9EQThYWF9DSElQSU5UMF0JCT0gNywKIAlbSVJRX0RBOFhYX0NISVBJTlQxXQkJPSA3LAogCVtJUlFfREE4WFhfQ0hJUElOVDJdCQk9IDcsCkBAIC03MjIsOCArNzAxLDYgQEAKIAlbSVJRX0RBOFhYX0VIUlBXTTFdCQk9IDcsCiAJW0lSUV9EQThYWF9FSFJQV00xVFpdCQk9IDcsCiAJW0lSUV9EQTg1MF9TQVRBSU5UXQkJPSA3LAotCVtJUlFfREE4NTBfVElOVDEyXzJdCQk9IDcsCi0JW0lSUV9EQTg1MF9USU5UMzRfMl0JCT0gNywKIAlbSVJRX0RBODUwX1RJTlRBTExfMl0JCT0gNywKIAlbSVJRX0RBOFhYX0VDQVAwXQkJPSA3LAogCVtJUlFfREE4WFhfRUNBUDFdCQk9IDcsCkBAIC03NTEsOCArNzI4LDYgQEAKIAlbSVJRX0RBODUwX0NDSU5UMV0JCT0gNywKIAlbSVJRX0RBODUwX0NDRVJSSU5UMV0JCT0gNywKIAlbSVJRX0RBODUwX1RDRVJSSU5UMl0JCT0gNywKLQlbSVJRX0RBODUwX1RJTlQxMl8zXQkJPSA3LAotCVtJUlFfREE4NTBfVElOVDM0XzNdCQk9IDcsCiAJW0lSUV9EQTg1MF9USU5UQUxMXzNdCQk9IDcsCiAJW0lSUV9EQTg1MF9NQ0JTUDBSSU5UXQkJPSA3LAogCVtJUlFfREE4NTBfTUNCU1AwWElOVF0JCT0gNywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCmluZGV4IDhjZGE3MjkuLjUyYmM3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwpAQCAtMTExLDE5ICsxMTEsMjEgQEAKIAl7LTEsIC0xfQogfTsKIAotc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRhODMwX2VkbWFfaW5mb1tdID0gewotCXsKLQkJLm5fY2hhbm5lbAkJPSAzMiwKLQkJLm5fcmVnaW9uCQk9IDQsCi0JCS5uX3Nsb3QJCQk9IDEyOCwKLQkJLm5fdGMJCQk9IDIsCi0JCS5uX2NjCQkJPSAxLAotCQkucXVldWVfdGNfbWFwcGluZwk9IGRhOHh4X3F1ZXVlX3RjX21hcHBpbmcsCi0JCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gZGE4eHhfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKLQl9LAorc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRhODMwX2VkbWFfY2MwX2luZm8gPSB7CisJLm5fY2hhbm5lbAkJPSAzMiwKKwkubl9yZWdpb24JCT0gNCwKKwkubl9zbG90CQkJPSAxMjgsCisJLm5fdGMJCQk9IDIsCisJLm5fY2MJCQk9IDEsCisJLnF1ZXVlX3RjX21hcHBpbmcJPSBkYTh4eF9xdWV1ZV90Y19tYXBwaW5nLAorCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gZGE4eHhfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBkYTg1MF9lZG1hX2luZm9bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqZGE4MzBfZWRtYV9pbmZvW0VETUFfTUFYX0NDXSA9IHsKKwkmZGE4MzBfZWRtYV9jYzBfaW5mbywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBkYTg1MF9lZG1hX2NjX2luZm9bXSA9IHsKIAl7CiAJCS5uX2NoYW5uZWwJCT0gMzIsCiAJCS5uX3JlZ2lvbgkJPSA0LApAQCAtMTQ0LDYgKzE0NiwxMSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gKmRhODUwX2VkbWFfaW5mb1tFRE1BX01BWF9DQ10gPSB7CisJJmRhODUwX2VkbWFfY2NfaW5mb1swXSwKKwkmZGE4NTBfZWRtYV9jY19pbmZvWzFdLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTgzMF9lZG1hX3Jlc291cmNlc1tdID0gewogCXsKIAkJLm5hbWUJPSAiZWRtYV9jYzAiLApAQCAtMjQ4LDE4ICsyNTUsMjEgQEAKIAkucmVzb3VyY2UJPSBkYTg1MF9lZG1hX3Jlc291cmNlcywKIH07CiAKLWludCBfX2luaXQgZGE4eHhfcmVnaXN0ZXJfZWRtYSh2b2lkKQoraW50IF9faW5pdCBkYTgzMF9yZWdpc3Rlcl9lZG1hKHN0cnVjdCBlZG1hX3Jzdl9pbmZvICpyc3YpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlkYTgzMF9lZG1hX2NjMF9pbmZvLnJzdiA9IHJzdjsKIAotCWlmIChjcHVfaXNfZGF2aW5jaV9kYTgzMCgpKQotCQlwZGV2ID0gJmRhODMwX2VkbWFfZGV2aWNlOwotCWVsc2UgaWYgKGNwdV9pc19kYXZpbmNpX2RhODUwKCkpCi0JCXBkZXYgPSAmZGE4NTBfZWRtYV9kZXZpY2U7Ci0JZWxzZQotCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYTgzMF9lZG1hX2RldmljZSk7Cit9CiAKLQlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworaW50IF9faW5pdCBkYTg1MF9yZWdpc3Rlcl9lZG1hKHN0cnVjdCBlZG1hX3Jzdl9pbmZvICpyc3ZbMl0pCit7CisJaWYgKHJzdikgeworCQlkYTg1MF9lZG1hX2NjX2luZm9bMF0ucnN2ID0gcnN2WzBdOworCQlkYTg1MF9lZG1hX2NjX2luZm9bMV0ucnN2ID0gcnN2WzFdOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhODUwX2VkbWFfZGV2aWNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkYTh4eF9pMmNfcmVzb3VyY2VzMFtdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtdG5ldHYxMDd4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy10bmV0djEwN3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzE4YTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtdG5ldHYxMDd4LmMKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBUZXhhcyBJbnN0cnVtZW50cyBUTkVUVjEwN1ggU29DIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9lZG1hLmg+CisjaW5jbHVkZSA8bWFjaC90bmV0djEwN3guaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIEJhc2UgYWRkcmVzc2VzIGZvciBvbi1jaGlwIGRldmljZXMgKi8KKyNkZWZpbmUgVE5FVFYxMDdYX1RQQ0NfQkFTRQkJCTB4MDFjMDAwMDAKKyNkZWZpbmUgVE5FVFYxMDdYX1RQVEMwX0JBU0UJCQkweDAxYzEwMDAwCisjZGVmaW5lIFRORVRWMTA3WF9UUFRDMV9CQVNFCQkJMHgwMWMxMDQwMAorI2RlZmluZSBUTkVUVjEwN1hfV0RPR19CQVNFCQkJMHgwODA4NjcwMAorI2RlZmluZSBUTkVUVjEwN1hfU0RJTzBfQkFTRQkJCTB4MDgwODg3MDAKKyNkZWZpbmUgVE5FVFYxMDdYX1NESU8xX0JBU0UJCQkweDA4MDg4ODAwCisjZGVmaW5lIFRORVRWMTA3WF9BU1lOQ19FTUlGX0NOVFJMX0JBU0UJCTB4MDgyMDAwMDAKKyNkZWZpbmUgVE5FVFYxMDdYX0FTWU5DX0VNSUZfREFUQV9DRTBfQkFTRQkweDMwMDAwMDAwCisjZGVmaW5lIFRORVRWMTA3WF9BU1lOQ19FTUlGX0RBVEFfQ0UxX0JBU0UJMHg0MDAwMDAwMAorI2RlZmluZSBUTkVUVjEwN1hfQVNZTkNfRU1JRl9EQVRBX0NFMl9CQVNFCTB4NDQwMDAwMDAKKyNkZWZpbmUgVE5FVFYxMDdYX0FTWU5DX0VNSUZfREFUQV9DRTNfQkFTRQkweDQ4MDAwMDAwCisKKy8qIFRORVRWMTA3WCBzcGVjaWZpYyBFRE1BMyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBFRE1BX1RORVRWMTA3WF9OVU1fRE1BQ0gJNjQKKyNkZWZpbmUgRURNQV9UTkVUVjEwN1hfTlVNX1RDQwkJNjQKKyNkZWZpbmUgRURNQV9UTkVUVjEwN1hfTlVNX1BBUkFNRU5UUlkJMTI4CisjZGVmaW5lIEVETUFfVE5FVFYxMDdYX05VTV9FVlFVRQkyCisjZGVmaW5lIEVETUFfVE5FVFYxMDdYX05VTV9UQwkJMgorI2RlZmluZSBFRE1BX1RORVRWMTA3WF9DSE1BUF9FWElTVAkwCisjZGVmaW5lIEVETUFfVE5FVFYxMDdYX05VTV9SRUdJT05TCTQKKyNkZWZpbmUgVE5FVFYxMDdYX0RNQUNIMkVWRU5UX01BUDAJMHgzQzBDRTAwMHUKKyNkZWZpbmUgVE5FVFYxMDdYX0RNQUNIMkVWRU5UX01BUDEJMHgwMDBGRkZGRnUKKworI2RlZmluZSBUTkVUVjEwN1hfRE1BQ0hfU0RJTzBfUlgJCTI2CisjZGVmaW5lIFRORVRWMTA3WF9ETUFDSF9TRElPMF9UWAkJMjcKKyNkZWZpbmUgVE5FVFYxMDdYX0RNQUNIX1NESU8xX1JYCQkyOAorI2RlZmluZSBUTkVUVjEwN1hfRE1BQ0hfU0RJTzFfVFgJCTI5CisKK3N0YXRpYyBjb25zdCBzOCBlZG1hX3RjX21hcHBpbmdbXVsyXSA9IHsKKwkvKiBldmVudCBxdWV1ZSBubwlUQyBubwkqLworCXsJIDAsCQkgMAl9LAorCXsJIDEsCQkgMQl9LAorCXsJLTEsCQktMQl9Cit9OworCitzdGF0aWMgY29uc3QgczggZWRtYV9wcmlvcml0eV9tYXBwaW5nW11bMl0gPSB7CisJLyogZXZlbnQgcXVldWUgbm8JUHJpbwkqLworCXsJIDAsCQkgMwl9LAorCXsJIDEsCQkgNwl9LAorCXsJLTEsCQktMQl9Cit9OworCitzdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gZWRtYV9jYzBfaW5mbyA9IHsKKwkubl9jaGFubmVsCQk9IEVETUFfVE5FVFYxMDdYX05VTV9ETUFDSCwKKwkubl9yZWdpb24JCT0gRURNQV9UTkVUVjEwN1hfTlVNX1JFR0lPTlMsCisJLm5fc2xvdAkJCT0gRURNQV9UTkVUVjEwN1hfTlVNX1BBUkFNRU5UUlksCisJLm5fdGMJCQk9IEVETUFfVE5FVFYxMDdYX05VTV9UQywKKwkubl9jYwkJCT0gMSwKKwkucXVldWVfdGNfbWFwcGluZwk9IGVkbWFfdGNfbWFwcGluZywKKwkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGVkbWFfcHJpb3JpdHlfbWFwcGluZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqdG5ldHYxMDd4X2VkbWFfaW5mb1tFRE1BX01BWF9DQ10gPSB7CisJJmVkbWFfY2MwX2luZm8sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkbWFfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJlZG1hX2NjMCIsCisJCS5zdGFydAk9IFRORVRWMTA3WF9UUENDX0JBU0UsCisJCS5lbmQJPSBUTkVUVjEwN1hfVFBDQ19CQVNFICsgU1pfMzJLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWFfdGMwIiwKKwkJLnN0YXJ0CT0gVE5FVFYxMDdYX1RQVEMwX0JBU0UsCisJCS5lbmQJPSBUTkVUVjEwN1hfVFBUQzBfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWFfdGMxIiwKKwkJLnN0YXJ0CT0gVE5FVFYxMDdYX1RQVEMxX0JBU0UsCisJCS5lbmQJPSBUTkVUVjEwN1hfVFBUQzFfQkFTRSArIFNaXzFLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gImVkbWEwIiwKKwkJLnN0YXJ0CT0gSVJRX1RORVRWMTA3WF9UUENDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLm5hbWUJPSAiZWRtYTBfZXJyIiwKKwkJLnN0YXJ0CT0gSVJRX1RORVRWMTA3WF9UUENDX0VSUiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVkbWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJlZG1hIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGVkbWFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBlZG1hX3Jlc291cmNlcywKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSB0bmV0djEwN3hfZWRtYV9pbmZvLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSBUTkVUVjEwN1hfVUFSVDBfQkFTRSwKKwkJLmlycQkJPSBJUlFfVE5FVFYxMDdYX1VBUlQwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwKKwkJCQkJVVBGX0ZJWEVEX1RZUEUgfCBVUEZfSU9SRU1BUCwKKwkJLnR5cGUJCT0gUE9SVF9BUjcsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0zMiwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBUTkVUVjEwN1hfVUFSVDFfQkFTRSwKKwkJLmlycQkJPSBJUlFfVE5FVFYxMDdYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwKKwkJCQkJVVBGX0ZJWEVEX1RZUEUgfCBVUEZfSU9SRU1BUCwKKwkJLnR5cGUJCT0gUE9SVF9BUjcsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0zMiwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBUTkVUVjEwN1hfVUFSVDJfQkFTRSwKKwkJLmlycQkJPSBJUlFfVE5FVFYxMDdYX1VBUlQyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwKKwkJCQkJVVBGX0ZJWEVEX1RZUEUgfCBVUEZfSU9SRU1BUCwKKwkJLnR5cGUJCT0gUE9SVF9BUjcsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0zMiwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwl9LAorCXsKKwkJLmZsYWdzCT0gMCwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB0bmV0djEwN3hfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMwX3Jlc291cmNlc1tdID0geworCXsgLyogTWVtb3J5IG1hcHBlZCByZWdpc3RlcnMgKi8KKwkJLnN0YXJ0CT0gVE5FVFYxMDdYX1NESU8wX0JBU0UsCisJCS5lbmQJPSBUTkVUVjEwN1hfU0RJTzBfQkFTRSArIDB4MGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJeyAvKiBNTUMgaW50ZXJydXB0ICovCisJCS5zdGFydAk9IElSUV9UTkVUVjEwN1hfTU1DMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LAorCXsgLyogU0RJTyBpbnRlcnJ1cHQgKi8KKwkJLnN0YXJ0CT0gSVJRX1RORVRWMTA3WF9TRElPMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LAorCXsgLyogRE1BIFJYICovCisJCS5zdGFydAk9IEVETUFfQ1RMUl9DSEFOKDAsIFRORVRWMTA3WF9ETUFDSF9TRElPMF9SWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BCisJfSwKKwl7IC8qIERNQSBUWCAqLworCQkuc3RhcnQJPSBFRE1BX0NUTFJfQ0hBTigwLCBUTkVUVjEwN1hfRE1BQ0hfU0RJTzBfVFgpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQQorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7CisJeyAvKiBNZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLworCQkuc3RhcnQJPSBUTkVUVjEwN1hfU0RJTzFfQkFTRSwKKwkJLmVuZAk9IFRORVRWMTA3WF9TRElPMV9CQVNFICsgMHgwZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwl7IC8qIE1NQyBpbnRlcnJ1cHQgKi8KKwkJLnN0YXJ0CT0gSVJRX1RORVRWMTA3WF9NTUMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCisJeyAvKiBTRElPIGludGVycnVwdCAqLworCQkuc3RhcnQJPSBJUlFfVE5FVFYxMDdYX1NESU8xLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCisJeyAvKiBETUEgUlggKi8KKwkJLnN0YXJ0CT0gRURNQV9DVExSX0NIQU4oMCwgVE5FVFYxMDdYX0RNQUNIX1NESU8xX1JYKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEKKwl9LAorCXsgLyogRE1BIFRYICovCisJCS5zdGFydAk9IEVETUFfQ1RMUl9DSEFOKDAsIFRORVRWMTA3WF9ETUFDSF9TRElPMV9UWCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfRE1BCisJfSwKK307CisKK3N0YXRpYyB1NjQgbW1jMF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgdTY0IG1tYzFfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfZGV2aWNlc1syXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJkYXZpbmNpX21tYyIsCisJCS5pZAkJPSAwLAorCQkuZGV2CQk9IHsKKwkJCS5kbWFfbWFzawkJPSAmbW1jMF9kbWFfbWFzaywKKwkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCX0sCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMwX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG1tYzBfcmVzb3VyY2VzCisJfSwKKwl7CisJCS5uYW1lCQk9ICJkYXZpbmNpX21tYyIsCisJCS5pZAkJPSAxLAorCQkuZGV2CQk9IHsKKwkJCS5kbWFfbWFzawkJPSAmbW1jMV9kbWFfbWFzaywKKwkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCX0sCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzCisJfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgZW1pZl93aW5kb3dzW10gPSB7CisJVE5FVFYxMDdYX0FTWU5DX0VNSUZfREFUQV9DRTBfQkFTRSwgVE5FVFYxMDdYX0FTWU5DX0VNSUZfREFUQV9DRTFfQkFTRSwKKwlUTkVUVjEwN1hfQVNZTkNfRU1JRl9EQVRBX0NFMl9CQVNFLCBUTkVUVjEwN1hfQVNZTkNfRU1JRl9EQVRBX0NFM19CQVNFLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBlbWlmX3dpbmRvd19zaXplc1tdID0geyBTWl8yNTZNLCBTWl82NE0sIFNaXzY0TSwgU1pfNjRNIH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVE5FVFYxMDdYX1dET0dfQkFTRSwKKwkJLmVuZAk9IFRORVRWMTA3WF9XRE9HX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRuZXR2MTA3eF93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJ0bmV0djEwN3hfd2R0IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5hbmRfaW5pdChpbnQgY2hpcHNlbCwgc3RydWN0IGRhdmluY2lfbmFuZF9wZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdTMyCXJhbmdlOworCWludAlyZXQ7CisKKwkvKiBGaWd1cmUgb3V0IHRoZSByZXNvdXJjZSByYW5nZSBmcm9tIHRoZSBhbGUvY2xlIG1hc2tzICovCisJcmFuZ2UgPSBtYXgoZGF0YS0+bWFza19jbGUsIGRhdGEtPm1hc2tfYWxlKTsKKwlyYW5nZSA9IFBBR0VfQUxJR04ocmFuZ2UgKyA0KSAtIDE7CisKKwlpZiAocmFuZ2UgPj0gZW1pZl93aW5kb3dfc2l6ZXNbY2hpcHNlbF0pCisJCXJldHVybiAtRUlOVkFMOworCisJcGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpwZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkZXYtPm5hbWUJCT0gImRhdmluY2lfbmFuZCI7CisJcGRldi0+aWQJCT0gY2hpcHNlbDsKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YQk9IGRhdGE7CisKKwltZW1zZXQocmVzLCAwLCBzaXplb2YocmVzKSk7CisKKwlyZXNbMF0uc3RhcnQJPSBlbWlmX3dpbmRvd3NbY2hpcHNlbF07CisJcmVzWzBdLmVuZAk9IHJlc1swXS5zdGFydCArIHJhbmdlOworCXJlc1swXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJcmVzWzFdLnN0YXJ0CT0gVE5FVFYxMDdYX0FTWU5DX0VNSUZfQ05UUkxfQkFTRTsKKwlyZXNbMV0uZW5kCT0gcmVzWzFdLnN0YXJ0ICsgU1pfNEsgLSAxOworCXJlc1sxXS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHBkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7Cit9CisKK3ZvaWQgX19pbml0IHRuZXR2MTA3eF9kZXZpY2VzX2luaXQoc3RydWN0IHRuZXR2MTA3eF9kZXZpY2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWRtYV9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdG5ldHYxMDd4X3dkdF9kZXZpY2UpOworCisJaWYgKGluZm8tPnNlcmlhbF9jb25maWcpCisJCWRhdmluY2lfc2VyaWFsX2luaXQoaW5mby0+c2VyaWFsX2NvbmZpZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAoaW5mby0+bW1jX2NvbmZpZ1tpXSkgeworCQkJbW1jX2RldmljZXNbaV0uZGV2LnBsYXRmb3JtX2RhdGEgPSBpbmZvLT5tbWNfY29uZmlnW2ldOworCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfZGV2aWNlc1tpXSk7CisJCX0KKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlmIChpbmZvLT5uYW5kX2NvbmZpZ1tpXSkKKwkJCW5hbmRfaW5pdChpLCBpbmZvLT5uYW5kX2NvbmZpZ1tpXSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG0zNTUuYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCmluZGV4IDM4MzQ3ODEuLjNkOTk2YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jCkBAIC01OTEsMTYgKzU5MSwxOCBAQAogCXstMSwgLTF9LAogfTsKIAotc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRtMzU1X2VkbWFfaW5mb1tdID0gewotCXsKLQkJLm5fY2hhbm5lbAkJPSA2NCwKLQkJLm5fcmVnaW9uCQk9IDQsCi0JCS5uX3Nsb3QJCQk9IDEyOCwKLQkJLm5fdGMJCQk9IDIsCi0JCS5uX2NjCQkJPSAxLAotCQkucXVldWVfdGNfbWFwcGluZwk9IHF1ZXVlX3RjX21hcHBpbmcsCi0JCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gcXVldWVfcHJpb3JpdHlfbWFwcGluZywKLQl9LAorc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGVkbWFfY2MwX2luZm8gPSB7CisJLm5fY2hhbm5lbAkJPSA2NCwKKwkubl9yZWdpb24JCT0gNCwKKwkubl9zbG90CQkJPSAxMjgsCisJLm5fdGMJCQk9IDIsCisJLm5fY2MJCQk9IDEsCisJLnF1ZXVlX3RjX21hcHBpbmcJPSBxdWV1ZV90Y19tYXBwaW5nLAorCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gcXVldWVfcHJpb3JpdHlfbWFwcGluZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqZG0zNTVfZWRtYV9pbmZvW0VETUFfTUFYX0NDXSA9IHsKKyAgICAgICAmZWRtYV9jYzBfaW5mbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRtYV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM2NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKaW5kZXggYTE0Njg0OS4uNmI2ZjRjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzY1LmMKQEAgLTgyMiwxNyArODIyLDE5IEBACiAJey0xLCAtMX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gZG0zNjVfZWRtYV9pbmZvW10gPSB7Ci0JewotCQkubl9jaGFubmVsCQk9IDY0LAotCQkubl9yZWdpb24JCT0gNCwKLQkJLm5fc2xvdAkJCT0gMjU2LAotCQkubl90YwkJCT0gNCwKLQkJLm5fY2MJCQk9IDEsCi0JCS5xdWV1ZV90Y19tYXBwaW5nCT0gZG0zNjVfcXVldWVfdGNfbWFwcGluZywKLQkJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBkbTM2NV9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAotCQkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMywKLQl9LAorc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGVkbWFfY2MwX2luZm8gPSB7CisJLm5fY2hhbm5lbAkJPSA2NCwKKwkubl9yZWdpb24JCT0gNCwKKwkubl9zbG90CQkJPSAyNTYsCisJLm5fdGMJCQk9IDQsCisJLm5fY2MJCQk9IDEsCisJLnF1ZXVlX3RjX21hcHBpbmcJPSBkbTM2NV9xdWV1ZV90Y19tYXBwaW5nLAorCS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nCT0gZG0zNjVfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKKwkuZGVmYXVsdF9xdWV1ZQkJPSBFVkVOVFFfMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyAqZG0zNjVfZWRtYV9pbmZvW0VETUFfTUFYX0NDXSA9IHsKKwkmZWRtYV9jYzBfaW5mbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRtYV9yZXNvdXJjZXNbXSA9IHsKQEAgLTEwMjAsNiArMTAyMiw4IEBACiAJLmNsb2Nrc291cmNlX2lkCT0gVDBfVE9QLAogfTsKIAorI2RlZmluZSBETTM2NV9VQVJUMV9CQVNFCShJT19QSFlTICsgMHgxMDYwMDApCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgZG0zNjVfc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gREFWSU5DSV9VQVJUMF9CQVNFLApAQCAtMTAzMCw3ICsxMDM0LDcgQEAKIAkJLnJlZ3NoaWZ0CT0gMiwKIAl9LAogCXsKLQkJLm1hcGJhc2UJPSBEQVZJTkNJX1VBUlQxX0JBU0UsCisJCS5tYXBiYXNlCT0gRE0zNjVfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSBJUlFfVUFSVElOVDEsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfAogCQkJCSAgVVBGX0lPUkVNQVAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKaW5kZXggN2FkMTUyMC4uNDBmZWMzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwpAQCAtNDkyLDE2ICs0OTIsMTggQEAKIAl7LTEsIC0xfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyBkbTY0NHhfZWRtYV9pbmZvW10gPSB7Ci0JewotCQkubl9jaGFubmVsCQk9IDY0LAotCQkubl9yZWdpb24JCT0gNCwKLQkJLm5fc2xvdAkJCT0gMTI4LAotCQkubl90YwkJCT0gMiwKLQkJLm5fY2MJCQk9IDEsCi0JCS5xdWV1ZV90Y19tYXBwaW5nCT0gcXVldWVfdGNfbWFwcGluZywKLQkJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBxdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAotCX0sCitzdGF0aWMgc3RydWN0IGVkbWFfc29jX2luZm8gZWRtYV9jYzBfaW5mbyA9IHsKKwkubl9jaGFubmVsCQk9IDY0LAorCS5uX3JlZ2lvbgkJPSA0LAorCS5uX3Nsb3QJCQk9IDEyOCwKKwkubl90YwkJCT0gMiwKKwkubl9jYwkJCT0gMSwKKwkucXVldWVfdGNfbWFwcGluZwk9IHF1ZXVlX3RjX21hcHBpbmcsCisJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBxdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAorfTsKKworc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvICpkbTY0NHhfZWRtYV9pbmZvW0VETUFfTUFYX0NDXSA9IHsKKwkmZWRtYV9jYzBfaW5mbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRtYV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NnguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NnguYwppbmRleCA5NDA0NTY1Li5lNGEzZGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDZ4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ2eC5jCkBAIC01MjksMTYgKzUyOSwxOCBAQAogCXstMSwgLTF9LAogfTsKIAotc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGRtNjQ2eF9lZG1hX2luZm9bXSA9IHsKLQl7Ci0JCS5uX2NoYW5uZWwJCT0gNjQsCi0JCS5uX3JlZ2lvbgkJPSA2LAkvKiAwLTEsIDQtNyAqLwotCQkubl9zbG90CQkJPSA1MTIsCi0JCS5uX3RjCQkJPSA0LAotCQkubl9jYwkJCT0gMSwKLQkJLnF1ZXVlX3RjX21hcHBpbmcJPSBkbTY0NnhfcXVldWVfdGNfbWFwcGluZywKLQkJLnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcJPSBkbTY0NnhfcXVldWVfcHJpb3JpdHlfbWFwcGluZywKLQl9LAorc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvIGVkbWFfY2MwX2luZm8gPSB7CisJLm5fY2hhbm5lbAkJPSA2NCwKKwkubl9yZWdpb24JCT0gNiwJLyogMC0xLCA0LTcgKi8KKwkubl9zbG90CQkJPSA1MTIsCisJLm5fdGMJCQk9IDQsCisJLm5fY2MJCQk9IDEsCisJLnF1ZXVlX3RjX21hcHBpbmcJPSBkbTY0NnhfcXVldWVfdGNfbWFwcGluZywKKwkucXVldWVfcHJpb3JpdHlfbWFwcGluZwk9IGRtNjQ2eF9xdWV1ZV9wcmlvcml0eV9tYXBwaW5nLAorfTsKKworc3RhdGljIHN0cnVjdCBlZG1hX3NvY19pbmZvICpkbTY0NnhfZWRtYV9pbmZvW0VETUFfTUFYX0NDXSA9IHsKKwkmZWRtYV9jYzBfaW5mbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZWRtYV9yZXNvdXJjZXNbXSA9IHsKQEAgLTg3Nyw2ICs4NzksMTMgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZwaWZfY2FwdHVyZV9kZXYpOwogfQogCitpbnQgX19pbml0IGRtNjQ2eF9pbml0X2VkbWEoc3RydWN0IGVkbWFfcnN2X2luZm8gKnJzdikKK3sKKwllZG1hX2NjMF9pbmZvLnJzdiA9IHJzdjsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ2eF9lZG1hX2RldmljZSk7Cit9CisKIHZvaWQgX19pbml0IGRtNjQ2eF9pbml0KHZvaWQpCiB7CiAJZG02NDZ4X2JvYXJkX3NldHVwX3JlZmNsaygmcmVmX2Nsayk7CkBAIC04ODgsNyArODk3LDYgQEAKIAlpZiAoIWNwdV9pc19kYXZpbmNpX2RtNjQ2eCgpKQogCQlyZXR1cm4gMDsKIAotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG02NDZ4X2VkbWFfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRtNjQ2eF9lbWFjX2RldmljZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG1hLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG1hLmMKaW5kZXggZDMzODI3YS4uMmVkZTU5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbWEuYwpAQCAtOTksOCArOTksNiBAQAogCiAjZGVmaW5lIEVETUFfTUFYX0RNQUNIICAgICAgICAgICA2NAogI2RlZmluZSBFRE1BX01BWF9QQVJBTUVOVFJZICAgICA1MTIKLSNkZWZpbmUgRURNQV9NQVhfQ0MgICAgICAgICAgICAgICAyCi0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMDcsNiArMjA1LDE4IEBACiAJZWRtYV9vcihjdGxyLCBFRE1BX1BBUk0gKyBvZmZzZXQgKyAocGFyYW1fbm8gPDwgNSksIG9yKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXRzKGludCBvZmZzZXQsIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnApCit7CisJZm9yICg7IGxlbiA+IDA7IGxlbi0tKQorCQlzZXRfYml0KG9mZnNldCArIChsZW4gLSAxKSwgcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9iaXRzKGludCBvZmZzZXQsIGludCBsZW4sIHVuc2lnbmVkIGxvbmcgKnApCit7CisJZm9yICg7IGxlbiA+IDA7IGxlbi0tKQorCQljbGVhcl9iaXQob2Zmc2V0ICsgKGxlbiAtIDEpLCBwKTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBhY3R1YWwgbnVtYmVyIG9mIERNQSBjaGFubmVscyBhbmQgc2xvdHMgb24gdGhpcyBzaWxpY29uICovCkBAIC0xMzc2LDExICsxMzg2LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGVkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZWRtYV9zb2NfaW5mbwkqaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBlZG1hX3NvY19pbmZvCSoqaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWNvbnN0IHM4CQkoKnF1ZXVlX3ByaW9yaXR5X21hcHBpbmcpWzJdOwogCWNvbnN0IHM4CQkoKnF1ZXVlX3RjX21hcHBpbmcpWzJdOwotCWludAkJCWksIGosIGZvdW5kID0gMDsKKwlpbnQJCQlpLCBqLCBvZmYsIGxuLCBmb3VuZCA9IDA7CiAJaW50CQkJc3RhdHVzID0gLTE7CisJY29uc3QgczE2CQkoKnJzdl9jaGFucylbMl07CisJY29uc3QgczE2CQkoKnJzdl9zbG90cylbMl07CiAJaW50CQkJaXJxW0VETUFfTUFYX0NDXSA9IHswLCAwfTsKIAlpbnQJCQllcnJfaXJxW0VETUFfTUFYX0NDXSA9IHswLCAwfTsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyW0VETUFfTUFYX0NDXSA9IHtOVUxMfTsKQEAgLTEzOTUsNyArMTQwNyw3IEBACiAJCXNwcmludGYocmVzX25hbWUsICJlZG1hX2NjJWQiLCBqKTsKIAkJcltqXSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCiAJCQkJCQlyZXNfbmFtZSk7Ci0JCWlmICghcltqXSkgeworCQlpZiAoIXJbal0gfHwgIWluZm9bal0pIHsKIAkJCWlmIChmb3VuZCkKIAkJCQlicmVhazsKIAkJCWVsc2UKQEAgLTE0MjYsMTMgKzE0MzgsMTQgQEAKIAkJfQogCQltZW1zZXQoZWRtYV9jY1tqXSwgMCwgc2l6ZW9mKHN0cnVjdCBlZG1hKSk7CiAKLQkJZWRtYV9jY1tqXS0+bnVtX2NoYW5uZWxzID0gbWluX3QodW5zaWduZWQsIGluZm9bal0ubl9jaGFubmVsLAorCQllZG1hX2NjW2pdLT5udW1fY2hhbm5lbHMgPSBtaW5fdCh1bnNpZ25lZCwgaW5mb1tqXS0+bl9jaGFubmVsLAogCQkJCQkJCUVETUFfTUFYX0RNQUNIKTsKLQkJZWRtYV9jY1tqXS0+bnVtX3Nsb3RzID0gbWluX3QodW5zaWduZWQsIGluZm9bal0ubl9zbG90LAorCQllZG1hX2NjW2pdLT5udW1fc2xvdHMgPSBtaW5fdCh1bnNpZ25lZCwgaW5mb1tqXS0+bl9zbG90LAogCQkJCQkJCUVETUFfTUFYX1BBUkFNRU5UUlkpOwotCQllZG1hX2NjW2pdLT5udW1fY2MgPSBtaW5fdCh1bnNpZ25lZCwgaW5mb1tqXS5uX2NjLCBFRE1BX01BWF9DQyk7CisJCWVkbWFfY2Nbal0tPm51bV9jYyA9IG1pbl90KHVuc2lnbmVkLCBpbmZvW2pdLT5uX2NjLAorCQkJCQkJCUVETUFfTUFYX0NDKTsKIAotCQllZG1hX2NjW2pdLT5kZWZhdWx0X3F1ZXVlID0gaW5mb1tqXS5kZWZhdWx0X3F1ZXVlOworCQllZG1hX2NjW2pdLT5kZWZhdWx0X3F1ZXVlID0gaW5mb1tqXS0+ZGVmYXVsdF9xdWV1ZTsKIAkJaWYgKCFlZG1hX2NjW2pdLT5kZWZhdWx0X3F1ZXVlKQogCQkJZWRtYV9jY1tqXS0+ZGVmYXVsdF9xdWV1ZSA9IEVWRU5UUV8xOwogCkBAIC0xNDQ3LDYgKzE0NjAsMzEgQEAKIAkJbWVtc2V0KGVkbWFfY2Nbal0tPmVkbWFfdW51c2VkLCAweGZmLAogCQkJc2l6ZW9mKGVkbWFfY2Nbal0tPmVkbWFfdW51c2VkKSk7CiAKKwkJaWYgKGluZm9bal0tPnJzdikgeworCisJCQkvKiBDbGVhciB0aGUgcmVzZXJ2ZWQgY2hhbm5lbHMgaW4gdW51c2VkIGxpc3QgKi8KKwkJCXJzdl9jaGFucyA9IGluZm9bal0tPnJzdi0+cnN2X2NoYW5zOworCQkJaWYgKHJzdl9jaGFucykgeworCQkJCWZvciAoaSA9IDA7IHJzdl9jaGFuc1tpXVswXSAhPSAtMTsgaSsrKSB7CisJCQkJCW9mZiA9IHJzdl9jaGFuc1tpXVswXTsKKwkJCQkJbG4gPSByc3ZfY2hhbnNbaV1bMV07CisJCQkJCWNsZWFyX2JpdHMob2ZmLCBsbiwKKwkJCQkJCWVkbWFfY2Nbal0tPmVkbWFfdW51c2VkKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFNldCB0aGUgcmVzZXJ2ZWQgc2xvdHMgaW4gaW51c2UgbGlzdCAqLworCQkJcnN2X3Nsb3RzID0gaW5mb1tqXS0+cnN2LT5yc3Zfc2xvdHM7CisJCQlpZiAocnN2X3Nsb3RzKSB7CisJCQkJZm9yIChpID0gMDsgcnN2X3Nsb3RzW2ldWzBdICE9IC0xOyBpKyspIHsKKwkJCQkJb2ZmID0gcnN2X3Nsb3RzW2ldWzBdOworCQkJCQlsbiA9IHJzdl9zbG90c1tpXVsxXTsKKwkJCQkJc2V0X2JpdHMob2ZmLCBsbiwKKwkJCQkJCWVkbWFfY2Nbal0tPmVkbWFfaW51c2UpOworCQkJCX0KKwkJCX0KKwkJfQorCiAJCXNwcmludGYoaXJxX25hbWUsICJlZG1hJWQiLCBqKTsKIAkJaXJxW2pdID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgaXJxX25hbWUpOwogCQllZG1hX2NjW2pdLT5pcnFfcmVzX3N0YXJ0ID0gaXJxW2pdOwpAQCAtMTQ3Niw4ICsxNTE0LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IGVkbWFfY2Nbal0tPm51bV9jaGFubmVsczsgaSsrKQogCQkJbWFwX2RtYWNoX3F1ZXVlKGosIGksIEVWRU5UUV8xKTsKIAotCQlxdWV1ZV90Y19tYXBwaW5nID0gaW5mb1tqXS5xdWV1ZV90Y19tYXBwaW5nOwotCQlxdWV1ZV9wcmlvcml0eV9tYXBwaW5nID0gaW5mb1tqXS5xdWV1ZV9wcmlvcml0eV9tYXBwaW5nOworCQlxdWV1ZV90Y19tYXBwaW5nID0gaW5mb1tqXS0+cXVldWVfdGNfbWFwcGluZzsKKwkJcXVldWVfcHJpb3JpdHlfbWFwcGluZyA9IGluZm9bal0tPnF1ZXVlX3ByaW9yaXR5X21hcHBpbmc7CiAKIAkJLyogRXZlbnQgcXVldWUgdG8gVEMgbWFwcGluZyAqLwogCQlmb3IgKGkgPSAwOyBxdWV1ZV90Y19tYXBwaW5nW2ldWzBdICE9IC0xOyBpKyspCkBAIC0xNDk2LDcgKzE1MzQsNyBAQAogCQlpZiAoZWRtYV9yZWFkKGosIEVETUFfQ0NDRkcpICYgQ0hNQVBfRVhJU1QpCiAJCQltYXBfZG1hY2hfcGFyYW0oaik7CiAKLQkJZm9yIChpID0gMDsgaSA8IGluZm9bal0ubl9yZWdpb247IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5mb1tqXS0+bl9yZWdpb247IGkrKykgewogCQkJZWRtYV93cml0ZV9hcnJheTIoaiwgRURNQV9EUkFFLCBpLCAwLCAweDApOwogCQkJZWRtYV93cml0ZV9hcnJheTIoaiwgRURNQV9EUkFFLCBpLCAxLCAweDApOwogCQkJZWRtYV93cml0ZV9hcnJheShqLCBFRE1BX1FSQUUsIGksIDB4MCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ncGlvLXRuZXR2MTA3eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMDI5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYwpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIFRleGFzIEluc3RydW1lbnRzIFRORVRWMTA3WCBHUElPIENvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvdG5ldHYxMDd4Lmg+CisKK3N0cnVjdCB0bmV0djEwN3hfZ3Bpb19yZWdzIHsKKwl1MzIJaWR2ZXI7CisJdTMyCWRhdGFfaW5bM107CisJdTMyCWRhdGFfb3V0WzNdOworCXUzMglkaXJlY3Rpb25bM107CisJdTMyCWVuYWJsZVszXTsKK307CisKKyNkZWZpbmUgZ3Bpb19yZWdfaW5kZXgoZ3BpbykJKChncGlvKSA+PiA1KQorI2RlZmluZSBncGlvX3JlZ19iaXQoZ3BpbykJQklUKChncGlvKSAmIDB4MWYpCisKKyNkZWZpbmUgZ3Bpb19yZWdfcm13KHJlZywgbWFzaywgdmFsKQlcCisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChyZWcpICYgfihtYXNrKSkgfCAodmFsKSwgKHJlZykpCisKKyNkZWZpbmUgZ3Bpb19yZWdfc2V0X2JpdChyZWcsIGdwaW8pCVwKKwlncGlvX3JlZ19ybXcoKHJlZykgKyBncGlvX3JlZ19pbmRleChncGlvKSwgMCwgZ3Bpb19yZWdfYml0KGdwaW8pKQorCisjZGVmaW5lIGdwaW9fcmVnX2NsZWFyX2JpdChyZWcsIGdwaW8pCVwKKwlncGlvX3JlZ19ybXcoKHJlZykgKyBncGlvX3JlZ19pbmRleChncGlvKSwgZ3Bpb19yZWdfYml0KGdwaW8pLCAwKQorCisjZGVmaW5lIGdwaW9fcmVnX2dldF9iaXQocmVnLCBncGlvKQlcCisJKF9fcmF3X3JlYWRsKChyZWcpICsgZ3Bpb19yZWdfaW5kZXgoZ3BpbykpICYgZ3Bpb19yZWdfYml0KGdwaW8pKQorCisjZGVmaW5lIGNoaXAyY29udHJvbGxlcihjaGlwKQkJXAorCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgZGF2aW5jaV9ncGlvX2NvbnRyb2xsZXIsIGNoaXApCisKKyNkZWZpbmUgVE5FVFYxMDdYX0dQSU9fQ1RMUlMJRElWX1JPVU5EX1VQKFRORVRWMTA3WF9OX0dQSU8sIDMyKQorCitzdGF0aWMgc3RydWN0IGRhdmluY2lfZ3Bpb19jb250cm9sbGVyIGNoaXBzW1RORVRWMTA3WF9HUElPX0NUTFJTXTsKKworc3RhdGljIGludCB0bmV0djEwN3hfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9ncGlvX2NvbnRyb2xsZXIgKmN0bHIgPSBjaGlwMmNvbnRyb2xsZXIoY2hpcCk7CisJc3RydWN0IHRuZXR2MTA3eF9ncGlvX3JlZ3MgX19pb21lbSAqcmVncyA9IGN0bHItPnJlZ3M7CisJdW5zaWduZWQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CisKKwlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5lbmFibGUsIGdwaW8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRuZXR2MTA3eF9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW9fY29udHJvbGxlciAqY3RsciA9IGNoaXAyY29udHJvbGxlcihjaGlwKTsKKwlzdHJ1Y3QgdG5ldHYxMDd4X2dwaW9fcmVncyBfX2lvbWVtICpyZWdzID0gY3Rsci0+cmVnczsKKwl1bnNpZ25lZCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKKworCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZW5hYmxlLCBncGlvKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB0bmV0djEwN3hfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW9fY29udHJvbGxlciAqY3RsciA9IGNoaXAyY29udHJvbGxlcihjaGlwKTsKKwlzdHJ1Y3QgdG5ldHYxMDd4X2dwaW9fcmVncyBfX2lvbWVtICpyZWdzID0gY3Rsci0+cmVnczsKKwl1bnNpZ25lZCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKKworCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bmV0djEwN3hfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW9fY29udHJvbGxlciAqY3RsciA9IGNoaXAyY29udHJvbGxlcihjaGlwKTsKKwlzdHJ1Y3QgdG5ldHYxMDd4X2dwaW9fcmVncyBfX2lvbWVtICpyZWdzID0gY3Rsci0+cmVnczsKKwl1bnNpZ25lZCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKKworCWlmICh2YWx1ZSkKKwkJZ3Bpb19yZWdfc2V0X2JpdCgmcmVncy0+ZGF0YV9vdXQsIGdwaW8pOworCWVsc2UKKwkJZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisKKwlncGlvX3JlZ19jbGVhcl9iaXQoJnJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxyLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0bmV0djEwN3hfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBkYXZpbmNpX2dwaW9fY29udHJvbGxlciAqY3RsciA9IGNoaXAyY29udHJvbGxlcihjaGlwKTsKKwlzdHJ1Y3QgdG5ldHYxMDd4X2dwaW9fcmVncyBfX2lvbWVtICpyZWdzID0gY3Rsci0+cmVnczsKKwl1bnNpZ25lZCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZWdfZ2V0X2JpdCgmcmVncy0+ZGF0YV9pbiwgZ3Bpbyk7CisKKwlyZXR1cm4gcmV0ID8gMSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRuZXR2MTA3eF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9ncGlvX2NvbnRyb2xsZXIgKmN0bHIgPSBjaGlwMmNvbnRyb2xsZXIoY2hpcCk7CisJc3RydWN0IHRuZXR2MTA3eF9ncGlvX3JlZ3MgX19pb21lbSAqcmVncyA9IGN0bHItPnJlZ3M7CisJdW5zaWduZWQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CisKKwlpZiAodmFsdWUpCisJCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKKwllbHNlCisJCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZGF0YV9vdXQsIGdwaW8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0bmV0djEwN3hfZ3Bpb19zZXR1cCh2b2lkKQoreworCWludCBpLCBiYXNlOworCXVuc2lnbmVkIG5ncGlvOworCXN0cnVjdCBkYXZpbmNpX3NvY19pbmZvICpzb2NfaW5mbyA9ICZkYXZpbmNpX3NvY19pbmZvOworCXN0cnVjdCB0bmV0djEwN3hfZ3Bpb19yZWdzICpyZWdzOworCXN0cnVjdCBkYXZpbmNpX2dwaW9fY29udHJvbGxlciAqY3RscjsKKworCWlmIChzb2NfaW5mby0+Z3Bpb190eXBlICE9IEdQSU9fVFlQRV9UTkVUVjEwN1gpCisJCXJldHVybiAwOworCisJbmdwaW8gPSBzb2NfaW5mby0+Z3Bpb19udW07CisJaWYgKG5ncGlvID09IDApIHsKKwkJcHJfZXJyKCJHUElPIHNldHVwOiAgaG93IG1hbnkgR1BJT3M/XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKFdBUk5fT04oVE5FVFYxMDdYX05fR1BJTyA8IG5ncGlvKSkKKwkJbmdwaW8gPSBUTkVUVjEwN1hfTl9HUElPOworCisJcmVncyA9IGlvcmVtYXAoc29jX2luZm8tPmdwaW9fYmFzZSwgU1pfNEspOworCWlmIChXQVJOX09OKCFyZWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwLCBiYXNlID0gMDsgYmFzZSA8IG5ncGlvOyBpKyssIGJhc2UgKz0gMzIpIHsKKwkJY3RsciA9ICZjaGlwc1tpXTsKKworCQljdGxyLT5jaGlwLmxhYmVsCT0gInRuZXR2MTA3eCI7CisJCWN0bHItPmNoaXAuY2FuX3NsZWVwCT0gMDsKKwkJY3Rsci0+Y2hpcC5iYXNlCQk9IGJhc2U7CisJCWN0bHItPmNoaXAubmdwaW8JPSBuZ3BpbyAtIGJhc2U7CisJCWlmIChjdGxyLT5jaGlwLm5ncGlvID4gMzIpCisJCQljdGxyLT5jaGlwLm5ncGlvID0gMzI7CisKKwkJY3Rsci0+Y2hpcC5yZXF1ZXN0CQk9IHRuZXR2MTA3eF9ncGlvX3JlcXVlc3Q7CisJCWN0bHItPmNoaXAuZnJlZQkJCT0gdG5ldHYxMDd4X2dwaW9fZnJlZTsKKwkJY3Rsci0+Y2hpcC5kaXJlY3Rpb25faW5wdXQJPSB0bmV0djEwN3hfZ3Bpb19kaXJfaW47CisJCWN0bHItPmNoaXAuZ2V0CQkJPSB0bmV0djEwN3hfZ3Bpb19nZXQ7CisJCWN0bHItPmNoaXAuZGlyZWN0aW9uX291dHB1dAk9IHRuZXR2MTA3eF9ncGlvX2Rpcl9vdXQ7CisJCWN0bHItPmNoaXAuc2V0CQkJPSB0bmV0djEwN3hfZ3Bpb19zZXQ7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmN0bHItPmxvY2spOworCisJCWN0bHItPnJlZ3MJPSByZWdzOworCQljdGxyLT5zZXRfZGF0YQk9ICZyZWdzLT5kYXRhX291dFtpXTsKKwkJY3Rsci0+Y2xyX2RhdGEJPSAmcmVncy0+ZGF0YV9vdXRbaV07CisJCWN0bHItPmluX2RhdGEJPSAmcmVncy0+ZGF0YV9pbltpXTsKKworCQlncGlvY2hpcF9hZGQoJmN0bHItPmNoaXApOworCX0KKworCXNvY19pbmZvLT5ncGlvX2N0bHJzID0gY2hpcHM7CisJc29jX2luZm8tPmdwaW9fY3RscnNfbnVtID0gRElWX1JPVU5EX1VQKG5ncGlvLCAzMik7CisJcmV0dXJuIDA7Cit9CitwdXJlX2luaXRjYWxsKHRuZXR2MTA3eF9ncGlvX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvYXNwLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2FzcC5oCmluZGV4IDgzNDcyNWYuLjlhYTI0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvYXNwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9hc3AuaApAQCAtNTIsNyArNTIsOCBAQAogc3RydWN0IHNuZF9wbGF0Zm9ybV9kYXRhIHsKIAl1MzIgdHhfZG1hX29mZnNldDsKIAl1MzIgcnhfZG1hX29mZnNldDsKLQllbnVtIGRtYV9ldmVudF9xIGV2ZW50cV9ubzsJLyogZXZlbnQgcXVldWUgbnVtYmVyICovCisJZW51bSBkbWFfZXZlbnRfcSBhc3BfY2hhbl9xOwkvKiBldmVudCBxdWV1ZSBudW1iZXIgZm9yIEFTUCBjaGFubmVsICovCisJZW51bSBkbWFfZXZlbnRfcSByYW1fY2hhbl9xOwkvKiBldmVudCBxdWV1ZSBudW1iZXIgZm9yIFJBTSBjaGFubmVsICovCiAJdW5zaWduZWQgaW50IGNvZGVjX2ZtdDsKIAkvKgogCSAqIEFsbG93aW5nIHRoaXMgaXMgbW9yZSBlZmZpY2llbnQgYW5kIGVsaW1pbmF0ZXMgbGVmdCBhbmQgcmlnaHQgc3dhcHMKQEAgLTYzLDYgKzY0LDQ5IEBACiAJdW5zaWduZWQgc3JhbV9zaXplX3BsYXliYWNrOwogCXVuc2lnbmVkIHNyYW1fc2l6ZV9jYXB0dXJlOwogCisJLyoKKwkgKiBJZiBNY0JTUCBwZXJpcGhlcmFsIGdldHMgdGhlIGNsb2NrIGZyb20gYW4gZXh0ZXJuYWwgcGluLAorCSAqIHRoZXJlIGFyZSB0aHJlZSBjaG9vc2VzLCB0aGF0IGFyZSBNQ0JTUF9DTEtYLCBNQ0JTUF9DTEtSCisJICogYW5kIE1DQlNQX0NMS1MuCisJICogRGVwZW5kaW5nIG9uIGRpZmZlcmVudCBoYXJkd2FyZSBjb25uZWN0aW9ucyBpdCBpcyBwb3NzaWJsZQorCSAqIHRvIHVzZSB0aGlzIHNldHRpbmcgdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgTWNCU1AKKwkgKiBkcml2ZXIuIFRoZSBkbTM2NV9jbGtfaW5wdXRfcGluIGVudW0gaXMgYXZhaWxhYmxlIGZvciBkbTM2NQorCSAqLworCWludCBjbGtfaW5wdXRfcGluOworCisJLyoKKwkgKiBUaGlzIGZsYWcgd29ya3Mgd2hlbiBib3RoIGNsb2NrIGFuZCBGUyBhcmUgb3V0cHV0cyBmb3IgdGhlIGNwdQorCSAqIGFuZCBtYWtlcyBjbG9jayBtb3JlIGFjY3VyYXRlIChGUyBpcyBub3Qgc3ltbWV0cmljYWwgYW5kIHRoZQorCSAqIGNsb2NrIGlzIHZlcnkgZmFzdC4KKwkgKiBUaGUgY2xvY2sgYmVjb21pbmcgZmFzdGVyIGlzIG5hbWVkCisJICogaTJzIGNvbnRpbnVvdXMgc2VyaWFsIGNsb2NrIChJMlNfU0NLKSBhbmQgaXQgaXMgYW4gZXh0ZXJuYWxseQorCSAqIHZpc2libGUgYml0IGNsb2NrLgorCSAqCisJICogZmlyc3QgbGluZSA6IFdvcmRTZWxlY3QKKwkgKiBzZWNvbmQgbGluZSA6IENvbnRpbnVvdXNTZXJpYWxDbG9jaworCSAqIHRoaXJkIGxpbmU6IFNlcmlhbERhdGEKKwkgKgorCSAqIFNZTU1FVFJJQ0FMIEFQUFJPQUNIOgorCSAqICAgX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgTEVGVAorCSAqIF98ICAgICAgICAgUklHSFQgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX3wKKwkgKiAgICAgXyAgIF8gICAgICAgICBfICAgXyAgIF8gICBfICAgICAgICAgXyAgIF8KKwkgKiAgIF98IHxffCB8XyB4MTYgX3wgfF98IHxffCB8X3wgfF8geDE2IF98IHxffCB8XworCSAqICAgICBfICAgXyAgICAgICAgIF8gICBfICAgXyAgIF8gICAgICAgICBfICAgXworCSAqICAgXy8gXF8vIFxfIC4uLiBfLyBcXy8gXF8vIFxfLyBcXyAuLi4gXy8gXF8vIFxfCisJICogICAgXF8vIFxfLyAgICAgICBcXy8gXF8vIFxfLyBcXy8gICAgICAgXF8vIFxfLworCSAqCisJICogQUNDVVJBVEUgQ0xPQ0sgQVBQUk9BQ0g6CisJICogICBfX19fX19fX19fX19fXyAgICAgICAgICBMRUZUCisJICogX3wgICAgIFJJR0hUICAgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCSAqICAgICBfICAgICAgICAgXyAgIF8gICAgICAgICBfICAgXyAgIF8gICBfICAgXyAgIF8KKwkgKiAgIF98IHxfIHgxNiBffCB8X3wgfF8geDE2IF98IHxffCB8X3wgfF98IHxffCB8X3wgfAorCSAqICAgICBfICAgICAgICAgXyAgIF8gICAgICAgICAgXyAgICAgIGR1bW15IGN5Y2xlcworCSAqICAgXy8gXF8gLi4uIF8vIFxfLyBcXyAgLi4uIF8vIFxfX19fX19fX19fX19fX19fX18KKwkgKiAgICBcXy8gICAgICAgXF8vIFxfLyAgICAgICAgXF8vCisJICoKKwkgKi8KKwlib29sIGkyc19hY2N1cmF0ZV9zY2s7CisKIAkvKiBNY0FTUCBzcGVjaWZpYyBmaWVsZHMgKi8KIAlpbnQgdGRtX3Nsb3RzOwogCXU4IG9wX21vZGU7CkBAIC03OCw2ICsxMjIsMTEgQEAKIAlNQ0FTUF9WRVJTSU9OXzIsCS8qIERBOHh4L09NQVBMMXggKi8KIH07CiAKK2VudW0gZG0zNjVfY2xrX2lucHV0X3BpbiB7CisJTUNCU1BfQ0xLUiA9IDAsCQkvKiBETTM2NSAqLworCU1DQlNQX0NMS1MsCit9OworCiAjZGVmaW5lIElOQUNUSVZFX01PREUJMAogI2RlZmluZSBUWF9NT0RFCQkxCiAjZGVmaW5lIFJYX01PREUJCTIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGE4eHguaAppbmRleCAxYjMxYTlhLi4zYzA3MDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RhOHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kYTh4eC5oCkBAIC02Nyw3ICs2Nyw4IEBACiB2b2lkIF9faW5pdCBkYTgzMF9pbml0KHZvaWQpOwogdm9pZCBfX2luaXQgZGE4NTBfaW5pdCh2b2lkKTsKIAotaW50IGRhOHh4X3JlZ2lzdGVyX2VkbWEodm9pZCk7CitpbnQgZGE4MzBfcmVnaXN0ZXJfZWRtYShzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyAqcnN2KTsKK2ludCBkYTg1MF9yZWdpc3Rlcl9lZG1hKHN0cnVjdCBlZG1hX3Jzdl9pbmZvICpyc3ZbMl0pOwogaW50IGRhOHh4X3JlZ2lzdGVyX2kyYyhpbnQgaW5zdGFuY2UsIHN0cnVjdCBkYXZpbmNpX2kyY19wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CiBpbnQgZGE4eHhfcmVnaXN0ZXJfd2F0Y2hkb2codm9pZCk7CiBpbnQgZGE4eHhfcmVnaXN0ZXJfdXNiMjAodW5zaWduZWQgbUEsIHVuc2lnbmVkIHBvdHBndCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggM2NkOTNhOC4uZjc2MWRmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTcsMjIgKzE3LDUwIEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKworI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+CisKICNkZWZpbmUgVUFSVF9TSElGVAkyCiAKKwkJLnB1c2hzZWN0aW9uIC5kYXRhCitkYXZpbmNpX3VhcnRfcGh5czoJLndvcmQJMAorZGF2aW5jaV91YXJ0X3ZpcnQ6CS53b3JkCTAKKwkJLnBvcHNlY3Rpb24KKwogCQkubWFjcm8gYWRkcnVhcnQsIHJ4LCB0bXAKKworCQkvKiBVc2UgZGF2aW5jaV91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KKzEwOgkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlccngsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfcGh5cykKKwkJbGRybmUJXHJ4LCA9ZGF2aW5jaV91YXJ0X3ZpcnQKKwkJbGRyCVxyeCwgW1xyeF0KKwkJY21wCVxyeCwgIzAJCQlAIGlzIHBvcnQgY29uZmlndXJlZD8KKwkJYm5lCTk5ZgkJCUAgYWxyZWFkeSBjb25maWd1cmVkCisKIAkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKIAkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQltb3ZlcQlccngsICMweDAxMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCi0JCW1vdm5lCVxyeCwgIzB4ZmUwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0RBVklOQ0lfREE4WFgpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfREFWSU5DSV9ETXgpCi0jZXJyb3IgQ2Fubm90IGVuYWJsZSBEYVZpbmNpIGFuZCBEQThYWCBwbGF0Zm9ybXMgY29uY3VycmVudGx5Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX0RBVklOQ0lfREE4MzBfRVZNKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfTUFDSF9EQVZJTkNJX0RBODUwX0VWTSkKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMGQwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwotCQlvcnIJXHJ4LCBccngsICMweDAwMDBkMDAwCUAgb2YgVUFSVCAyCi0jZWxzZQotCQlvcnIJXHJ4LCBccngsICMweDAwYzIwMDAwICAgQCBVQVJUIDAKLSNlbmRpZgorCisJCS8qIENvcHkgdWFydCBwaHlzIGFkZHJlc3MgZnJvbSBkZWNvbXByZXNzb3IgdWFydCBpbmZvICovCisJCWxkcmVxCVx0bXAsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfcGh5cykKKwkJbGRybmUJXHRtcCwgPWRhdmluY2lfdWFydF9waHlzCisJCWxkcmVxCVxyeCwgPURBVklOQ0lfVUFSVF9JTkZPCisJCWxkcm5lCVxyeCwgPV9fcGh5c190b192aXJ0KERBVklOQ0lfVUFSVF9JTkZPKQorCQlsZHIJXHJ4LCBbXHJ4LCAjMF0KKwkJc3RyCVxyeCwgW1x0bXBdCisKKwkJLyogQ29weSB1YXJ0IHZpcnQgYWRkcmVzcyBmcm9tIGRlY29tcHJlc3NvciB1YXJ0IGluZm8gKi8KKwkJbGRyZXEJXHRtcCwgPV9fdmlydF90b19waHlzKGRhdmluY2lfdWFydF92aXJ0KQorCQlsZHJuZQlcdG1wLCA9ZGF2aW5jaV91YXJ0X3ZpcnQKKwkJbGRyZXEJXHJ4LCA9REFWSU5DSV9VQVJUX0lORk8KKwkJbGRybmUJXHJ4LCA9X19waHlzX3RvX3ZpcnQoREFWSU5DSV9VQVJUX0lORk8pCisJCWxkcglccngsIFtccngsICM0XQorCQlzdHIJXHJ4LCBbXHRtcF0KKworCQliCTEwYgorOTk6CiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtNjQ2eC5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kbTY0NnguaAppbmRleCBhZGQ2Zjc5Li4wYTI3ZWU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RtNjQ2eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZG02NDZ4LmgKQEAgLTMyLDYgKzMyLDcgQEAKIHZvaWQgX19pbml0IGRtNjQ2eF9pbml0X21jYXNwMChzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIHZvaWQgX19pbml0IGRtNjQ2eF9pbml0X21jYXNwMShzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIHZvaWQgX19pbml0IGRtNjQ2eF9ib2FyZF9zZXR1cF9yZWZjbGsoc3RydWN0IGNsayAqY2xrKTsKK2ludCBfX2luaXQgZG02NDZ4X2luaXRfZWRtYShzdHJ1Y3QgZWRtYV9yc3ZfaW5mbyAqcnN2KTsKIAogdm9pZCBkbTY0NnhfdmlkZW9faW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9lZG1hLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VkbWEuaAppbmRleCBjZWQzMDkyLi5kYzEwZWY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VkbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2VkbWEuaApAQCAtMjMwLDYgKzIzMCw4IEBACiAjZGVmaW5lIEVETUFfQ09OVF9QQVJBTVNfRklYRURfRVhBQ1QJIDEwMDIKICNkZWZpbmUgRURNQV9DT05UX1BBUkFNU19GSVhFRF9OT1RfRVhBQ1QgMTAwMwogCisjZGVmaW5lIEVETUFfTUFYX0NDICAgICAgICAgICAgICAgMgorCiAvKiBhbGxvYy9mcmVlIERNQSBjaGFubmVscyBhbmQgdGhlaXIgZGVkaWNhdGVkIHBhcmFtZXRlciBSQU0gc2xvdHMgKi8KIGludCBlZG1hX2FsbG9jX2NoYW5uZWwoaW50IGNoYW5uZWwsCiAJdm9pZCAoKmNhbGxiYWNrKSh1bnNpZ25lZCBjaGFubmVsLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKSwKQEAgLTI2OSw2ICsyNzEsMTIgQEAKIHZvaWQgZWRtYV9wYXVzZSh1bnNpZ25lZCBjaGFubmVsKTsKIHZvaWQgZWRtYV9yZXN1bWUodW5zaWduZWQgY2hhbm5lbCk7CiAKK3N0cnVjdCBlZG1hX3Jzdl9pbmZvIHsKKworCWNvbnN0IHMxNgkoKnJzdl9jaGFucylbMl07CisJY29uc3QgczE2CSgqcnN2X3Nsb3RzKVsyXTsKK307CisKIC8qIHBsYXRmb3JtX2RhdGEgZm9yIEVETUEgZHJpdmVyICovCiBzdHJ1Y3QgZWRtYV9zb2NfaW5mbyB7CiAKQEAgLTI4MCw2ICsyODgsOSBAQAogCXVuc2lnbmVkCW5fY2M7CiAJZW51bSBkbWFfZXZlbnRfcQlkZWZhdWx0X3F1ZXVlOwogCisJLyogUmVzb3VyY2UgcmVzZXJ2YXRpb24gZm9yIG90aGVyIGNvcmVzICovCisJc3RydWN0IGVkbWFfcnN2X2luZm8JKnJzdjsKKwogCWNvbnN0IHM4CSgqcXVldWVfdGNfbWFwcGluZylbMl07CiAJY29uc3QgczgJKCpxdWV1ZV9wcmlvcml0eV9tYXBwaW5nKVsyXTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDUwNGNjMTguLmZiZWNlMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yNSw2ICsyNSw3IEBACiAKIGVudW0gZGF2aW5jaV9ncGlvX3R5cGUgewogCUdQSU9fVFlQRV9EQVZJTkNJID0gMCwKKwlHUElPX1RZUEVfVE5FVFYxMDdYLAogfTsKIAogLyoKQEAgLTg3LDkgKzg4LDEzIEBACiAJcmV0dXJuIDEgPDwgKGdwaW8gJSAzMik7CiB9CiAKLS8qIFRoZSBnZXQvc2V0L2NsZWFyIGZ1bmN0aW9ucyB3aWxsIGlubGluZSB3aGVuIGNhbGxlZCB3aXRoIGNvbnN0YW50CisvKgorICogVGhlIGdldC9zZXQvY2xlYXIgZnVuY3Rpb25zIHdpbGwgaW5saW5lIHdoZW4gY2FsbGVkIHdpdGggY29uc3RhbnQKICAqIHBhcmFtZXRlcnMgcmVmZXJlbmNpbmcgYnVpbHQtaW4gR1BJT3MsIGZvciBsb3ctb3ZlcmhlYWQgYml0YmFuZ2luZy4KICAqCisgKiBncGlvX3NldF92YWx1ZSgpIHdpbGwgaW5saW5lIG9ubHkgb24gdHJhZGl0aW9uYWwgRGF2aW5jaSBzdHlsZSBjb250cm9sbGVycworICogd2l0aCBkaXN0aW5jdCBzZXQvY2xlYXIgcmVnaXN0ZXJzLgorICoKICAqIE90aGVyd2lzZSwgY2FsbHMgd2l0aCB2YXJpYWJsZSBwYXJhbWV0ZXJzIG9yIHJlZmVyZW5jaW5nIGV4dGVybmFsCiAgKiBHUElPcyAoZS5nLiBvbiBHUElPIGV4cGFuZGVyIGNoaXBzKSB1c2Ugb3V0bGluZWQgZnVuY3Rpb25zLgogICovCkBAIC0xMDAsMTIgKzEwNSwxNSBAQAogCQl1MzIJCQkJbWFzazsKIAogCQljdGxyID0gX19ncGlvX3RvX2NvbnRyb2xsZXIoZ3Bpbyk7Ci0JCW1hc2sgPSBfX2dwaW9fbWFzayhncGlvKTsKLQkJaWYgKHZhbHVlKQotCQkJX19yYXdfd3JpdGVsKG1hc2ssIGN0bHItPnNldF9kYXRhKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKG1hc2ssIGN0bHItPmNscl9kYXRhKTsKLQkJcmV0dXJuOworCisJCWlmIChjdGxyLT5zZXRfZGF0YSAhPSBjdGxyLT5jbHJfZGF0YSkgeworCQkJbWFzayA9IF9fZ3Bpb19tYXNrKGdwaW8pOworCQkJaWYgKHZhbHVlKQorCQkJCV9fcmF3X3dyaXRlbChtYXNrLCBjdGxyLT5zZXRfZGF0YSk7CisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKG1hc2ssIGN0bHItPmNscl9kYXRhKTsKKwkJCXJldHVybjsKKwkJfQogCX0KIAogCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc2VyaWFsLmgKaW5kZXggZjZjNGYzNC4uODA1MTExMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCkBAIC0xMSw4ICsxMSwxOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1NFUklBTF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfU0VSSUFMX0gKIAorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAorLyoKKyAqIFN0b2xlbiBhcmVhIHRoYXQgY29udGFpbnMgZGVidWcgdWFydCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzZXMuICBUaGVzZQorICogYWRkcmVzc2VzIGFyZSBmaWxsZWQgaW4gYnkgdGhlIHVuY29tcHJlc3MuaCBjb2RlLCBhbmQgYXJlIHVzZWQgYnkgdGhlIGRlYnVnCisgKiBtYWNyb3MgaW4gZGVidWctbWFjcm8uUy4KKyAqCisgKiBUaGlzIGFyZWEgc2l0cyBqdXN0IGJlbG93IHRoZSBwYWdlIHRhYmxlcyAoc2VlIGFyY2gvYXJtL2tlcm5lbC9oZWFkLlMpLgorICovCisjZGVmaW5lIERBVklOQ0lfVUFSVF9JTkZPCShQSFlTX09GRlNFVCArIDB4M2ZmOCkKKwogI2RlZmluZSBEQVZJTkNJX1VBUlQwX0JBU0UJKElPX1BIWVMgKyAweDIwMDAwKQogI2RlZmluZSBEQVZJTkNJX1VBUlQxX0JBU0UJKElPX1BIWVMgKyAweDIwNDAwKQogI2RlZmluZSBEQVZJTkNJX1VBUlQyX0JBU0UJKElPX1BIWVMgKyAweDIwODAwKQpAQCAtMjEsMTYgKzMyLDI2IEBACiAjZGVmaW5lIERBOFhYX1VBUlQxX0JBU0UJKElPX1BIWVMgKyAweDEwYzAwMCkKICNkZWZpbmUgREE4WFhfVUFSVDJfQkFTRQkoSU9fUEhZUyArIDB4MTBkMDAwKQogCisjZGVmaW5lIFRORVRWMTA3WF9VQVJUMF9CQVNFCTB4MDgxMDgxMDAKKyNkZWZpbmUgVE5FVFYxMDdYX1VBUlQxX0JBU0UJMHgwODA4ODQwMAorI2RlZmluZSBUTkVUVjEwN1hfVUFSVDJfQkFTRQkweDA4MTA4MzAwCisKKyNkZWZpbmUgVE5FVFYxMDdYX1VBUlQwX1ZJUlQJSU9NRU0oMHhmZWUwODEwMCkKKyNkZWZpbmUgVE5FVFYxMDdYX1VBUlQxX1ZJUlQJSU9NRU0oMHhmZWQ4ODQwMCkKKyNkZWZpbmUgVE5FVFYxMDdYX1VBUlQyX1ZJUlQJSU9NRU0oMHhmZWUwODMwMCkKKwogLyogRGFWaW5jaSBVQVJUIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgVUFSVF9EQVZJTkNJX1BXUkVNVQkJMHgwYwogI2RlZmluZSBVQVJUX0RNNjQ2WF9TQ1IJCQkweDEwCiAjZGVmaW5lIFVBUlRfRE02NDZYX1NDUl9UWF9XQVRFUk1BUksJMHgwOAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogc3RydWN0IGRhdmluY2lfdWFydF9jb25maWcgewogCS8qIEJpdCBmaWVsZCBvZiBVQVJUcyBwcmVzZW50OyBiaXQgMCAtLT4gVUFSVDEgKi8KIAl1bnNpZ25lZCBpbnQgZW5hYmxlZF91YXJ0czsKIH07CiAKIGV4dGVybiBpbnQgZGF2aW5jaV9zZXJpYWxfaW5pdChzdHJ1Y3QgZGF2aW5jaV91YXJ0X2NvbmZpZyAqKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9TRVJJQUxfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC90bmV0djEwN3guaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdG5ldHYxMDd4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyMDY0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvdG5ldHYxMDd4LmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIFRleGFzIEluc3RydW1lbnRzIFRORVRWMTA3WCBTb0MgU3BlY2lmaWMgRGVmaW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfREFWSU5DSV9UTkVUVjEwN1hfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RBVklOQ0lfVE5FVFYxMDdYX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjZGVmaW5lIFRORVRWMTA3WF9ERFJfQkFTRQkweDgwMDAwMDAwCisKKy8qCisgKiBGaXhlZCBtYXBwaW5nIGZvciBlYXJseSBpbml0IHN0YXJ0cyBoZXJlLiBJZiBsb3ctbGV2ZWwgZGVidWcgaXMgZW5hYmxlZCwKKyAqIHRoaXMgYXJlYSBhbHNvIGdldHMgbWFwcGVkIHZpYSBpb19wZ19vZmZzZXQgYW5kIGlvX3BoeXMgYnkgdGhlIGJvb3QgY29kZS4KKyAqIFRvIGZpdCBpbiB3aXRoIHRoZSBpb19wZ19vZmZzZXQgY2FsY3VsYXRpb24sIHRoZSBpbyBiYXNlIGFkZHJlc3Mgc2VsZWN0ZWQKKyAqIGhlcmUgX211c3RfIGJlIGEgbXVsdGlwbGUgb2YgMl4yMC4KKyAqLworI2RlZmluZSBUTkVUVjEwN1hfSU9fQkFTRQkweDA4MDAwMDAwCisjZGVmaW5lIFRORVRWMTA3WF9JT19WSVJUCShJT19WSVJUICsgU1pfMU0pCisKKyNkZWZpbmUgVE5FVFYxMDdYX05fR1BJTwk2NQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+CisKK3N0cnVjdCB0bmV0djEwN3hfZGV2aWNlX2luZm8geworCXN0cnVjdCBkYXZpbmNpX3VhcnRfY29uZmlnCSpzZXJpYWxfY29uZmlnOworCXN0cnVjdCBkYXZpbmNpX21tY19jb25maWcJKm1tY19jb25maWdbMl07ICAvKiAyIGNvbnRyb2xsZXJzICovCisJc3RydWN0IGRhdmluY2lfbmFuZF9wZGF0YQkqbmFuZF9jb25maWdbNF07IC8qIDQgY2hpcHNlbHMgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRuZXR2MTA3eF93ZHRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG5ldHYxMDd4X3NlcmlhbF9kZXZpY2U7CisKK2V4dGVybiB2b2lkIF9faW5pdCB0bmV0djEwN3hfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCB0bmV0djEwN3hfZGV2aWNlc19pbml0KHN0cnVjdCB0bmV0djEwN3hfZGV2aWNlX2luZm8gKik7CitleHRlcm4gdm9pZCBfX2luaXQgdG5ldHYxMDd4X2lycV9pbml0KHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfREFWSU5DSV9UTkVUVjEwN1hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCAzMzc5NmI0Li4xNWE2MTkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMSw4ICsxLDE3IEBACiAvKgogICogU2VyaWFsIHBvcnQgc3R1YnMgZm9yIGtlcm5lbCBkZWNvbXByZXNzIHN0YXR1cyBtZXNzYWdlcwogICoKLSAqICBBdXRob3I6ICAgICBBbmFudCBHb2xlCi0gKiAoQykgQ29weXJpZ2h0IChDKSAyMDA2LCBUZXhhcyBJbnN0cnVtZW50cywgSW5jCisgKiBJbml0aWFsbHkgYmFzZWQgb246CisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIE9yaWdpbmFsIGNvcHlyaWdodHMgZm9sbG93LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBSaWRnZVJ1biwgSW5jLgorICogQXV0aG9yOiBHcmVnIExvbm5vbiA8Z2xvbm5vbkByaWRnZXJ1bi5jb20+CisgKgorICogUmV3cml0dGVuIGJ5OgorICogQXV0aG9yOiA8c291cmNlQG12aXN0YS5jb20+CisgKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CkBAIC0xMSwzMCArMjAsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi1leHRlcm4gdW5zaWduZWQgaW50IF9fbWFjaGluZV9hcmNoX3R5cGU7CisjaW5jbHVkZSA8bWFjaC9zZXJpYWwuaD4KIAogc3RhdGljIHUzMiAqdWFydDsKLQotc3RhdGljIHUzMiAqZ2V0X3VhcnRfYmFzZSh2b2lkKQotewotCWlmIChfX21hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9EQVZJTkNJX0RBODMwX0VWTSB8fAotCQlfX21hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9EQVZJTkNJX0RBODUwX0VWTSkKLQkJcmV0dXJuICh1MzIgKilEQThYWF9VQVJUMl9CQVNFOwotCWVsc2UKLQkJcmV0dXJuICh1MzIgKilEQVZJTkNJX1VBUlQwX0JBU0U7Ci19CitzdGF0aWMgdTMyICp1YXJ0X2luZm8gPSAodTMyICopKERBVklOQ0lfVUFSVF9JTkZPKTsKIAogLyogUE9SVF8xNkM1NTBBLCBpbiBwb2xsZWQgbm9uLWZpZm8gbW9kZSAqLwotCiBzdGF0aWMgdm9pZCBwdXRjKGNoYXIgYykKIHsKLQlpZiAoIXVhcnQpCi0JCXVhcnQgPSBnZXRfdWFydF9iYXNlKCk7Ci0KIAl3aGlsZSAoISh1YXJ0W1VBUlRfTFNSXSAmIFVBUlRfTFNSX1RIUkUpKQogCQliYXJyaWVyKCk7CiAJdWFydFtVQVJUX1RYXSA9IGM7CkBAIC00MiwxMiArMzgsNjEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCiB7Ci0JaWYgKCF1YXJ0KQotCQl1YXJ0ID0gZ2V0X3VhcnRfYmFzZSgpOwotCiAJd2hpbGUgKCEodWFydFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKIAkJYmFycmllcigpOwogfQogCi0jZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdWFydF9pbmZvKHUzMiBwaHlzLCB2b2lkICogX19pb21lbSB2aXJ0KQoreworCXVhcnQgPSAodTMyICopcGh5czsKKwl1YXJ0X2luZm9bMF0gPSBwaHlzOworCXVhcnRfaW5mb1sxXSA9ICh1MzIpdmlydDsKK30KKworI2RlZmluZSBfREVCVUdfTExfRU5UUlkobWFjaGluZSwgcGh5cywgdmlydCkJCQlcCisJaWYgKG1hY2hpbmVfaXNfIyNtYWNoaW5lKCkpIHsJCQkJXAorCQlzZXRfdWFydF9pbmZvKHBoeXMsIHZpcnQpOwkJCVwKKwkJYnJlYWs7CQkJCQkJXAorCX0KKworI2RlZmluZSBERUJVR19MTF9EQVZJTkNJKG1hY2hpbmUsIHBvcnQpCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaGluZSwgREFWSU5DSV9VQVJUIyNwb3J0IyNfQkFTRSwJXAorCQkJSU9fQUREUkVTUyhEQVZJTkNJX1VBUlQjI3BvcnQjI19CQVNFKSkKKworI2RlZmluZSBERUJVR19MTF9EQThYWChtYWNoaW5lLCBwb3J0KQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2hpbmUsIERBOFhYX1VBUlQjI3BvcnQjI19CQVNFLAlcCisJCQlJT19BRERSRVNTKERBOFhYX1VBUlQjI3BvcnQjI19CQVNFKSkKKworI2RlZmluZSBERUJVR19MTF9UTkVUVjEwN1gobWFjaGluZSwgcG9ydCkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2hpbmUsIFRORVRWMTA3WF9VQVJUIyNwb3J0IyNfQkFTRSwJXAorCQkJVE5FVFYxMDdYX1VBUlQjI3BvcnQjI19WSVJUKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBwb3J0IGJhc2VkIG9uIHRoZSBtYWNoaW5lIElEIGZyb20gdGhlIGJvb3Rsb2FkZXIuCisJICogTm90ZSB0aGF0IHdlJ3JlIHVzaW5nIG1hY3JvcyBoZXJlIGluc3RlYWQgb2Ygc3dpdGNoIHN0YXRlbWVudAorCSAqIGFzIG1hY2hpbmVfaXMgZnVuY3Rpb25zIGFyZSBvcHRpbWl6ZWQgb3V0IGZvciB0aGUgYm9hcmRzIHRoYXQKKwkgKiBhcmUgbm90IHNlbGVjdGVkLgorCSAqLworCWRvIHsKKwkJLyogRGF2aW5jaSBib2FyZHMgKi8KKwkJREVCVUdfTExfREFWSU5DSShkYXZpbmNpX2V2bSwJCTApOworCQlERUJVR19MTF9EQVZJTkNJKHNmZnNkciwJCTApOworCQlERUJVR19MTF9EQVZJTkNJKG5ldXJvc19vc2QyLAkJMCk7CisJCURFQlVHX0xMX0RBVklOQ0koZGF2aW5jaV9kbTM1NV9ldm0sCTApOworCQlERUJVR19MTF9EQVZJTkNJKGRtMzU1X2xlb3BhcmQsCQkwKTsKKwkJREVCVUdfTExfREFWSU5DSShkYXZpbmNpX2RtNjQ2N19ldm0sCTApOworCQlERUJVR19MTF9EQVZJTkNJKGRhdmluY2lfZG0zNjVfZXZtLAkwKTsKKworCQkvKiBEQTh4eCBib2FyZHMgKi8KKwkJREVCVUdfTExfREE4WFgoZGF2aW5jaV9kYTgzMF9ldm0sCTIpOworCQlERUJVR19MTF9EQThYWChkYXZpbmNpX2RhODUwX2V2bSwJMik7CisKKwkJLyogVE5FVFYxMDd4IGJvYXJkcyAqLworCQlERUJVR19MTF9UTkVUVjEwN1godG5ldHYxMDd4LAkJMSk7CisJfSB3aGlsZSAoMCk7Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQlfX2FyY2hfZGVjb21wX3NldHVwKGFyY2hfaWQpCiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL3RuZXR2MTA3eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NGU2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvdG5ldHYxMDd4LmMKQEAgLTAsMCArMSw3NTMgQEAKKy8qCisgKiBUZXhhcyBJbnN0cnVtZW50cyBUTkVUVjEwN1ggU29DIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvY3B1dHlwZS5oPgorI2luY2x1ZGUgPG1hY2gvcHNjLmg+CisjaW5jbHVkZSA8bWFjaC9jcF9pbnRjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvdG5ldHYxMDd4Lmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgIm11eC5oIgorCisvKiBCYXNlIGFkZHJlc3NlcyBmb3Igb24tY2hpcCBkZXZpY2VzICovCisjZGVmaW5lIFRORVRWMTA3WF9JTlRDX0JBU0UJCQkweDAzMDAwMDAwCisjZGVmaW5lIFRORVRWMTA3WF9USU1FUjBfQkFTRQkJCTB4MDgwODY1MDAKKyNkZWZpbmUgVE5FVFYxMDdYX1RJTUVSMV9CQVNFCQkJMHgwODA4NjYwMAorI2RlZmluZSBUTkVUVjEwN1hfQ0hJUF9DRkdfQkFTRQkJCTB4MDgwODcwMDAKKyNkZWZpbmUgVE5FVFYxMDdYX0dQSU9fQkFTRQkJCTB4MDgwODgwMDAKKyNkZWZpbmUgVE5FVFYxMDdYX0NMT0NLX0NPTlRST0xfQkFTRQkJMHgwODA4YTAwMAorI2RlZmluZSBUTkVUVjEwN1hfUFNDX0JBU0UJCQkweDA4MDhiMDAwCisKKy8qIFJlZmVyZW5jZSBjbG9jayBmcmVxdWVuY2llcyAqLworI2RlZmluZSBPU0NfRlJFUV9PTkNISVAJCSgyNDAwMCAqIDEwMDApCisjZGVmaW5lIE9TQ19GUkVRX09GRkNISVBfU1lTCSgyNTAwMCAqIDEwMDApCisjZGVmaW5lIE9TQ19GUkVRX09GRkNISVBfRVRICSgyNTAwMCAqIDEwMDApCisjZGVmaW5lIE9TQ19GUkVRX09GRkNISVBfVERNCSgxOTIwMCAqIDEwMDApCisKKyNkZWZpbmUgTl9QTExTCTMKKworLyogQ2xvY2sgQ29udHJvbCBSZWdpc3RlcnMgKi8KK3N0cnVjdCBjbGtfY3RybF9yZWdzIHsKKwl1MzIJcGxsX2J5cGFzczsKKwl1MzIJX3Jlc2VydmVkMDsKKwl1MzIJZ2VtX2xyc3Q7CisJdTMyCV9yZXNlcnZlZDE7CisJdTMyCXBsbF91bmxvY2tfc3RhdDsKKwl1MzIJc3lzX3VubG9jazsKKwl1MzIJZXRoX3VubG9jazsKKwl1MzIJdGRtX3VubG9jazsKK307CisKKy8qIFNTUExMIFJlZ2lzdGVycyAqLworc3RydWN0IHNzcGxsX3JlZ3MgeworCXUzMgltb2RlczsKKwl1MzIJcG9zdF9kaXY7CisJdTMyCXByZV9kaXY7CisJdTMyCW11bHRfZmFjdG9yOworCXUzMglkaXZpZGVyX3JhbmdlOworCXUzMglid19kaXZpZGVyOworCXUzMglzcHJfYW1vdW50OworCXUzMglzcHJfcmF0ZV9kaXY7CisJdTMyCWRpYWc7Cit9OworCisvKiBXYXRjaGRvZyBUaW1lciBSZWdpc3RlcnMgKi8KK3N0cnVjdCB3ZHRfcmVncyB7CisJdTMyCWtpY2tfbG9jazsKKwl1MzIJa2ljazsKKwl1MzIJY2hhbmdlX2xvY2s7CisJdTMyCWNoYW5nZSA7CisJdTMyCWRpc2FibGVfbG9jazsKKwl1MzIJZGlzYWJsZTsKKwl1MzIJcHJlc2NhbGVfbG9jazsKKwl1MzIJcHJlc2NhbGU7Cit9OworCitzdGF0aWMgc3RydWN0IGNsa19jdHJsX3JlZ3MgX19pb21lbSAqY2xrX2N0cmxfcmVnczsKKworc3RhdGljIHN0cnVjdCBzc3BsbF9yZWdzIF9faW9tZW0gKnNzcGxsX3JlZ3NbTl9QTExTXTsKK3N0YXRpYyBpbnQgc3NwbGxfcmVnc19iYXNlW05fUExMU10gPSB7IDB4NDAsIDB4ODAsIDB4YzAgfTsKKworLyogUExMIGJ5cGFzcyBiaXQgc2hpZnRzIGluIGNsa19jdHJsX3JlZ3MtPnBsbF9ieXBhc3MgcmVnaXN0ZXIgKi8KK3N0YXRpYyB1MzIgYnlwYXNzX21hc2tbTl9QTExTXSA9IHsgQklUKDApLCBCSVQoMiksIEJJVCgxKSB9OworCisvKiBvZmZjaGlwIChleHRlcm5hbCkgcmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jaWVzICovCitzdGF0aWMgdTMyIHBsbF9leHRfZnJlcVtdID0geworCU9TQ19GUkVRX09GRkNISVBfU1lTLAorCU9TQ19GUkVRX09GRkNISVBfVERNLAorCU9TQ19GUkVRX09GRkNISVBfRVRICit9OworCisvKiBQU0MgY29udHJvbCByZWdpc3RlcnMgKi8KK3N0YXRpYyB1MzIgcHNjX3JlZ3NbXSBfX2luaXRjb25zdCA9IHsgVE5FVFYxMDdYX1BTQ19CQVNFIH07CisKKy8qIEhvc3QgbWFwIGZvciBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworc3RhdGljIHUzMiBpbnRjX2hvc3RfbWFwW10gPSB7IDB4MDEwMTAwMDAsIDB4MDEwMTAxMDEsIC0xIH07CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19zc3BsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKKworLyogTGV2ZWwgMSAtIHRoZSBQTExzICovCisjZGVmaW5lIGRlZmluZV9wbGxfY2xrKGNuYW1lLCBwbGwsIGRpdm1hc2ssIGJhc2UpCVwKKwlzdGF0aWMgc3RydWN0IHBsbF9kYXRhIHBsbF8jI2NuYW1lIyNfZGF0YSA9IHsJXAorCQkubnVtCQk9IHBsbCwJCQlcCisJCS5kaXZfcmF0aW9fbWFzawk9IGRpdm1hc2ssCQlcCisJCS5waHlzX2Jhc2UJPSBiYXNlICsJCVwKKwkJCVRORVRWMTA3WF9DTE9DS19DT05UUk9MX0JBU0UsCVwKKwl9OwkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBwbGxfIyNjbmFtZSMjX2NsayA9IHsJCVwKKwkJLm5hbWUJCT0gInBsbF8iICNjbmFtZSAiX2NsayIsCVwKKwkJLnBsbF9kYXRhCT0gJnBsbF8jI2NuYW1lIyNfZGF0YSwJXAorCQkuZmxhZ3MJCT0gQ0xLX1BMTCwJCVwKKwkJLnJlY2FsYwkJPSBjbGtfc3NwbGxfcmVjYWxjLAlcCisJfQorCitkZWZpbmVfcGxsX2NsayhzeXMsIDAsIDB4MWZmLCAweDYwMCk7CitkZWZpbmVfcGxsX2Nsayh0ZG0sIDEsIDB4MGZmLCAweDIwMCk7CitkZWZpbmVfcGxsX2NsayhldGgsIDIsIDB4MGZmLCAweDQwMCk7CisKKy8qIExldmVsIDIgLSBkaXZpZGVkIG91dHB1dHMgZnJvbSB0aGUgUExMcyAqLworI2RlZmluZSBkZWZpbmVfcGxsX2Rpdl9jbGsocGxsLCBjbmFtZSwgZGl2KQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIHBsbCMjXyMjY25hbWUjI19jbGsgPSB7CVwKKwkJLm5hbWUJCT0gI3BsbCAiXyIgI2NuYW1lICJfY2xrIixcCisJCS5wYXJlbnQJCT0gJnBsbF8jI3BsbCMjX2NsaywJXAorCQkuZmxhZ3MJCT0gQ0xLX1BMTCwJCVwKKwkJLmRpdl9yZWcJPSBQTExESVYjI2RpdiwJCVwKKwl9CisKK2RlZmluZV9wbGxfZGl2X2NsayhzeXMsIGFybTExNzYsCTEpOworZGVmaW5lX3BsbF9kaXZfY2xrKHN5cywgZHNwLAkJMik7CitkZWZpbmVfcGxsX2Rpdl9jbGsoc3lzLCBkZHIsCQkzKTsKK2RlZmluZV9wbGxfZGl2X2NsayhzeXMsIGZ1bGwsCQk0KTsKK2RlZmluZV9wbGxfZGl2X2NsayhzeXMsIGxjZCwJCTUpOworZGVmaW5lX3BsbF9kaXZfY2xrKHN5cywgdmx5bnFfcmVmLAk2KTsKK2RlZmluZV9wbGxfZGl2X2NsayhzeXMsIHRzYywJCTcpOworZGVmaW5lX3BsbF9kaXZfY2xrKHN5cywgaGFsZiwJCTgpOworCitkZWZpbmVfcGxsX2Rpdl9jbGsoZXRoLCA1bWh6LAkJMSk7CitkZWZpbmVfcGxsX2Rpdl9jbGsoZXRoLCA1MG1oeiwJCTIpOworZGVmaW5lX3BsbF9kaXZfY2xrKGV0aCwgMTI1bWh6LAkJMyk7CitkZWZpbmVfcGxsX2Rpdl9jbGsoZXRoLCAyNTBtaHosCQk0KTsKK2RlZmluZV9wbGxfZGl2X2NsayhldGgsIDI1bWh6LAkJNSk7CisKK2RlZmluZV9wbGxfZGl2X2Nsayh0ZG0sIDAsCQkxKTsKK2RlZmluZV9wbGxfZGl2X2Nsayh0ZG0sIGV4dHJhLAkJMik7CitkZWZpbmVfcGxsX2Rpdl9jbGsodGRtLCAxLAkJMyk7CisKKworLyogTGV2ZWwgMyAtIExQU0MgZ2F0ZWQgY2xvY2tzICovCisjZGVmaW5lIF9fbHBzY19jbGsoY25hbWUsIF9wYXJlbnQsIG1vZCwgZmxnKQkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa18jI2NuYW1lID0gewkJXAorCQkubmFtZQkJPSAjY25hbWUsCQlcCisJCS5wYXJlbnQJCT0gJl9wYXJlbnQsCQlcCisJCS5scHNjCQk9IFRORVRWMTA3WF9MUFNDXyMjbW9kLFwKKwkJLmZsYWdzCQk9IGZsZywJCQlcCisJfQorCisjZGVmaW5lIGxwc2NfY2xrX2VuYWJsZWQoY25hbWUsIHBhcmVudCwgbW9kKQkJXAorCV9fbHBzY19jbGsoY25hbWUsIHBhcmVudCwgbW9kLCBBTFdBWVNfRU5BQkxFRCkKKworI2RlZmluZSBscHNjX2NsayhjbmFtZSwgcGFyZW50LCBtb2QpCQkJXAorCV9fbHBzY19jbGsoY25hbWUsIHBhcmVudCwgbW9kLCAwKQorCitscHNjX2Nsa19lbmFibGVkKGFybSwJCXN5c19hcm0xMTc2X2NsaywgQVJNKTsKK2xwc2NfY2xrX2VuYWJsZWQoZ2VtLAkJc3lzX2RzcF9jbGssCUdFTSk7CitscHNjX2Nsa19lbmFibGVkKGRkcjJfcGh5LAlzeXNfZGRyX2NsaywJRERSMl9QSFkpOworbHBzY19jbGtfZW5hYmxlZCh0cGNjLAkJc3lzX2Z1bGxfY2xrLAlUUENDKTsKK2xwc2NfY2xrX2VuYWJsZWQodHB0YzAsCQlzeXNfZnVsbF9jbGssCVRQVEMwKTsKK2xwc2NfY2xrX2VuYWJsZWQodHB0YzEsCQlzeXNfZnVsbF9jbGssCVRQVEMxKTsKK2xwc2NfY2xrX2VuYWJsZWQocmFtLAkJc3lzX2Z1bGxfY2xrLAlSQU0pOworbHBzY19jbGtfZW5hYmxlZChhZW1pZiwJCXN5c19mdWxsX2NsaywJQUVNSUYpOworbHBzY19jbGtfZW5hYmxlZChjaGlwY2ZnLAlzeXNfaGFsZl9jbGssCUNISVBfQ0ZHKTsKK2xwc2NfY2xrX2VuYWJsZWQocm9tLAkJc3lzX2hhbGZfY2xrLAlST00pOworbHBzY19jbGtfZW5hYmxlZChzZWNjdGwsCXN5c19oYWxmX2NsaywJU0VDQ1RMKTsKK2xwc2NfY2xrX2VuYWJsZWQoa2V5bWdyLAlzeXNfaGFsZl9jbGssCUtFWU1HUik7CitscHNjX2Nsa19lbmFibGVkKGdwaW8sCQlzeXNfaGFsZl9jbGssCUdQSU8pOworbHBzY19jbGtfZW5hYmxlZChkZWJ1Z3NzLAlzeXNfaGFsZl9jbGssCURFQlVHU1MpOworbHBzY19jbGtfZW5hYmxlZChzeXN0ZW0sCXN5c19oYWxmX2NsaywJU1lTVEVNKTsKK2xwc2NfY2xrX2VuYWJsZWQoZGRyMl92cnN0LAlzeXNfZGRyX2NsaywJRERSMl9FTUlGMV9WUlNUKTsKK2xwc2NfY2xrX2VuYWJsZWQoZGRyMl92Y3RsX3JzdCwJc3lzX2Rkcl9jbGssCUREUjJfRU1JRjJfVkNUTF9SU1QpOworbHBzY19jbGtfZW5hYmxlZCh3ZHRfYXJtLAlzeXNfaGFsZl9jbGssCVdEVF9BUk0pOworCitscHNjX2NsayhtYnhfbGl0ZSwJc3lzX2FybTExNzZfY2xrLAlNQlhfTElURSk7CitscHNjX2NsayhldGhzcywJCWV0aF8xMjVtaHpfY2xrLAkJRVRIU1MpOworbHBzY19jbGsodHNjLAkJc3lzX3RzY19jbGssCQlUU0MpOworbHBzY19jbGsodWFydDAsCQlzeXNfaGFsZl9jbGssCQlVQVJUMCk7CitscHNjX2Nsayh1YXJ0MSwJCXN5c19oYWxmX2NsaywJCVVBUlQxKTsKK2xwc2NfY2xrKHVhcnQyLAkJc3lzX2hhbGZfY2xrLAkJVUFSVDIpOworbHBzY19jbGsocGt0c2VjLAlzeXNfaGFsZl9jbGssCQlQS1RTRUMpOworbHBzY19jbGsoa2V5cGFkLAlzeXNfaGFsZl9jbGssCQlLRVlQQUQpOworbHBzY19jbGsobWRpbywJCXN5c19oYWxmX2NsaywJCU1ESU8pOworbHBzY19jbGsoc2RpbzAsCQlzeXNfaGFsZl9jbGssCQlTRElPMCk7CitscHNjX2NsayhzZGlvMSwJCXN5c19oYWxmX2NsaywJCVNESU8xKTsKK2xwc2NfY2xrKHRpbWVyMCwJc3lzX2hhbGZfY2xrLAkJVElNRVIwKTsKK2xwc2NfY2xrKHRpbWVyMSwJc3lzX2hhbGZfY2xrLAkJVElNRVIxKTsKK2xwc2NfY2xrKHdkdF9kc3AsCXN5c19oYWxmX2NsaywJCVdEVF9EU1ApOworbHBzY19jbGsoc3NwLAkJc3lzX2hhbGZfY2xrLAkJU1NQKTsKK2xwc2NfY2xrKHRkbTAsCQl0ZG1fMF9jbGssCQlURE0wKTsKK2xwc2NfY2xrKHRkbTEsCQl0ZG1fMV9jbGssCQlURE0xKTsKK2xwc2NfY2xrKHZseW5xLAkJc3lzX3ZseW5xX3JlZl9jbGssCVZMWU5RKTsKK2xwc2NfY2xrKG1jZG1hLAkJc3lzX2hhbGZfY2xrLAkJTUNETUEpOworbHBzY19jbGsodXNiMCwJCXN5c19oYWxmX2NsaywJCVVTQjApOworbHBzY19jbGsodXNiMSwJCXN5c19oYWxmX2NsaywJCVVTQjEpOworbHBzY19jbGsodXNic3MsCQlzeXNfaGFsZl9jbGssCQlVU0JTUyk7CitscHNjX2NsayhldGhzc19yZ21paSwJZXRoXzI1MG1oel9jbGssCQlFVEhTU19SR01JSSk7CitscHNjX2NsayhpbWNvcCwJCXN5c19kc3BfY2xrLAkJSU1DT1ApOworbHBzY19jbGsoc3BhcmUsCQlzeXNfaGFsZl9jbGssCQlTUEFSRSk7CisKKy8qIExDRCBuZWVkcyBhIGZ1bGwgcG93ZXIgZG93biB0byBjbGVhciBjb250cm9sbGVyIHN0YXRlICovCitfX2xwc2NfY2xrKGxjZCwgc3lzX2xjZF9jbGssIExDRCwgUFNDX1NXUlNURElTQUJMRSk7CisKKworLyogTGV2ZWwgNCAtIGxlYWYgY2xvY2tzIGZvciBMUFNDIG1vZHVsZXMgc2hhcmVkIGFjcm9zcyBkcml2ZXJzICovCitzdGF0aWMgc3RydWN0IGNsayBjbGtfcm5nID0geyAubmFtZSA9ICJybmciLCAucGFyZW50ID0gJmNsa19wa3RzZWMgfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wa2EgPSB7IC5uYW1lID0gInBrYSIsIC5wYXJlbnQgPSAmY2xrX3BrdHNlYyB9OworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgY2xrc1tdID0geworCUNMSyhOVUxMLAkJInBsbF9zeXNfY2xrIiwJCSZwbGxfc3lzX2NsayksCisJQ0xLKE5VTEwsCQkicGxsX2V0aF9jbGsiLAkJJnBsbF9ldGhfY2xrKSwKKwlDTEsoTlVMTCwJCSJwbGxfdGRtX2NsayIsCQkmcGxsX3RkbV9jbGspLAorCUNMSyhOVUxMLAkJInN5c19hcm0xMTc2X2NsayIsCSZzeXNfYXJtMTE3Nl9jbGspLAorCUNMSyhOVUxMLAkJInN5c19kc3BfY2xrIiwJCSZzeXNfZHNwX2NsayksCisJQ0xLKE5VTEwsCQkic3lzX2Rkcl9jbGsiLAkJJnN5c19kZHJfY2xrKSwKKwlDTEsoTlVMTCwJCSJzeXNfZnVsbF9jbGsiLAkJJnN5c19mdWxsX2NsayksCisJQ0xLKE5VTEwsCQkic3lzX2xjZF9jbGsiLAkJJnN5c19sY2RfY2xrKSwKKwlDTEsoTlVMTCwJCSJzeXNfdmx5bnFfcmVmX2NsayIsCSZzeXNfdmx5bnFfcmVmX2NsayksCisJQ0xLKE5VTEwsCQkic3lzX3RzY19jbGsiLAkJJnN5c190c2NfY2xrKSwKKwlDTEsoTlVMTCwJCSJzeXNfaGFsZl9jbGsiLAkJJnN5c19oYWxmX2NsayksCisJQ0xLKE5VTEwsCQkiZXRoXzVtaHpfY2xrIiwJCSZldGhfNW1oel9jbGspLAorCUNMSyhOVUxMLAkJImV0aF81MG1oel9jbGsiLAkmZXRoXzUwbWh6X2NsayksCisJQ0xLKE5VTEwsCQkiZXRoXzEyNW1oel9jbGsiLAkmZXRoXzEyNW1oel9jbGspLAorCUNMSyhOVUxMLAkJImV0aF8yNTBtaHpfY2xrIiwJJmV0aF8yNTBtaHpfY2xrKSwKKwlDTEsoTlVMTCwJCSJldGhfMjVtaHpfY2xrIiwJJmV0aF8yNW1oel9jbGspLAorCUNMSyhOVUxMLAkJInRkbV8wX2NsayIsCQkmdGRtXzBfY2xrKSwKKwlDTEsoTlVMTCwJCSJ0ZG1fZXh0cmFfY2xrIiwJJnRkbV9leHRyYV9jbGspLAorCUNMSyhOVUxMLAkJInRkbV8xX2NsayIsCQkmdGRtXzFfY2xrKSwKKwlDTEsoTlVMTCwJCSJjbGtfYXJtIiwJCSZjbGtfYXJtKSwKKwlDTEsoTlVMTCwJCSJjbGtfZ2VtIiwJCSZjbGtfZ2VtKSwKKwlDTEsoTlVMTCwJCSJjbGtfZGRyMl9waHkiLAkJJmNsa19kZHIyX3BoeSksCisJQ0xLKE5VTEwsCQkiY2xrX3RwY2MiLAkJJmNsa190cGNjKSwKKwlDTEsoTlVMTCwJCSJjbGtfdHB0YzAiLAkJJmNsa190cHRjMCksCisJQ0xLKE5VTEwsCQkiY2xrX3RwdGMxIiwJCSZjbGtfdHB0YzEpLAorCUNMSyhOVUxMLAkJImNsa19yYW0iLAkJJmNsa19yYW0pLAorCUNMSyhOVUxMLAkJImNsa19tYnhfbGl0ZSIsCQkmY2xrX21ieF9saXRlKSwKKwlDTEsoInRuZXR2MTA3eC1mYi4wIiwJTlVMTCwJCQkmY2xrX2xjZCksCisJQ0xLKE5VTEwsCQkiY2xrX2V0aHNzIiwJCSZjbGtfZXRoc3MpLAorCUNMSyhOVUxMLAkJImFlbWlmIiwJCSZjbGtfYWVtaWYpLAorCUNMSyhOVUxMLAkJImNsa19jaGlwY2ZnIiwJCSZjbGtfY2hpcGNmZyksCisJQ0xLKCJ0bmV0djEwN3gtdHMuMCIsCU5VTEwsCQkJJmNsa190c2MpLAorCUNMSyhOVUxMLAkJImNsa19yb20iLAkJJmNsa19yb20pLAorCUNMSyhOVUxMLAkJInVhcnQyIiwJCSZjbGtfdWFydDIpLAorCUNMSyhOVUxMLAkJImNsa19wa3RzZWMiLAkJJmNsa19wa3RzZWMpLAorCUNMSygidG5ldHYxMDd4LXJuZy4wIiwJTlVMTCwJCQkmY2xrX3JuZyksCisJQ0xLKCJ0bmV0djEwN3gtcGthLjAiLAlOVUxMLAkJCSZjbGtfcGthKSwKKwlDTEsoTlVMTCwJCSJjbGtfc2VjY3RsIiwJCSZjbGtfc2VjY3RsKSwKKwlDTEsoTlVMTCwJCSJjbGtfa2V5bWdyIiwJCSZjbGtfa2V5bWdyKSwKKwlDTEsoInRuZXR2MTA3eC1rZXlwYWQuMCIsIE5VTEwsCQkJJmNsa19rZXlwYWQpLAorCUNMSyhOVUxMLAkJImNsa19ncGlvIiwJCSZjbGtfZ3BpbyksCisJQ0xLKE5VTEwsCQkiY2xrX21kaW8iLAkJJmNsa19tZGlvKSwKKwlDTEsoImRhdmluY2lfbW1jLjAiLAlOVUxMLAkJCSZjbGtfc2RpbzApLAorCUNMSyhOVUxMLAkJInVhcnQwIiwJCSZjbGtfdWFydDApLAorCUNMSyhOVUxMLAkJInVhcnQxIiwJCSZjbGtfdWFydDEpLAorCUNMSyhOVUxMLAkJInRpbWVyMCIsCQkmY2xrX3RpbWVyMCksCisJQ0xLKE5VTEwsCQkidGltZXIxIiwJCSZjbGtfdGltZXIxKSwKKwlDTEsoInRuZXR2MTA3eF93ZHQuMCIsCU5VTEwsCQkJJmNsa193ZHRfYXJtKSwKKwlDTEsoTlVMTCwJCSJjbGtfd2R0X2RzcCIsCQkmY2xrX3dkdF9kc3ApLAorCUNMSygidGktc3NwLjAiLAkJTlVMTCwJCQkmY2xrX3NzcCksCisJQ0xLKE5VTEwsCQkiY2xrX3RkbTAiLAkJJmNsa190ZG0wKSwKKwlDTEsoTlVMTCwJCSJjbGtfdmx5bnEiLAkJJmNsa192bHlucSksCisJQ0xLKE5VTEwsCQkiY2xrX21jZG1hIiwJCSZjbGtfbWNkbWEpLAorCUNMSyhOVUxMLAkJImNsa191c2IwIiwJCSZjbGtfdXNiMCksCisJQ0xLKE5VTEwsCQkiY2xrX3RkbTEiLAkJJmNsa190ZG0xKSwKKwlDTEsoTlVMTCwJCSJjbGtfZGVidWdzcyIsCQkmY2xrX2RlYnVnc3MpLAorCUNMSyhOVUxMLAkJImNsa19ldGhzc19yZ21paSIsCSZjbGtfZXRoc3NfcmdtaWkpLAorCUNMSyhOVUxMLAkJImNsa19zeXN0ZW0iLAkJJmNsa19zeXN0ZW0pLAorCUNMSyhOVUxMLAkJImNsa19pbWNvcCIsCQkmY2xrX2ltY29wKSwKKwlDTEsoTlVMTCwJCSJjbGtfc3BhcmUiLAkJJmNsa19zcGFyZSksCisJQ0xLKCJkYXZpbmNpX21tYy4xIiwJTlVMTCwJCQkmY2xrX3NkaW8xKSwKKwlDTEsoTlVMTCwJCSJjbGtfdXNiMSIsCQkmY2xrX3VzYjEpLAorCUNMSyhOVUxMLAkJImNsa191c2JzcyIsCQkmY2xrX3VzYnNzKSwKKwlDTEsoTlVMTCwJCSJjbGtfZGRyMl92cnN0IiwJJmNsa19kZHIyX3Zyc3QpLAorCUNMSyhOVUxMLAkJImNsa19kZHIyX3ZjdGxfcnN0IiwJJmNsa19kZHIyX3ZjdGxfcnN0KSwKKwlDTEsoTlVMTCwJCU5VTEwsCQkJTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG11eF9jb25maWcgcGluc1tdID0geworI2lmZGVmIENPTkZJR19EQVZJTkNJX01VWAorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTAwLAkJMCwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8zMiwJCTAsIDAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTAxLAkJMCwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8zMywJCTAsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTAyLAkJMCwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMzQsCQkwLCAxMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMDMsCQkwLCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8zNSwJCTAsIDE1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0EwNCwJCTAsIDIwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzM2LAkJMCwgMjAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTA1LAkJMCwgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMzcsCQkwLCAyNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMDYsCQkxLCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzM4LAkJMSwgMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMDcsCQkxLCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzM5LAkJMSwgNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMDgsCQkxLCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU80MCwJCTEsIDEwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0EwOSwJCTEsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzQxLAkJMSwgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTEwLAkJMSwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNDIsCQkxLCAyMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMTEsCQkxLCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEJPT1RfU1RSUF8wLAkJMSwgMjUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTEyLAkJMiwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEJPT1RfU1RSUF8xLAkJMiwgMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMTMsCQkyLCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzQzLAkJMiwgNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMTQsCQkyLCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU80NCwJCTIsIDEwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0ExNSwJCTIsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzQ1LAkJMiwgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTE2LAkJMiwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNDYsCQkyLCAyMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMTcsCQkyLCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU80NywJCTIsIDI1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0ExOCwJCTMsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNDgsCQkzLCAwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzFfREFUQTNfMCwJMywgMCwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMTksCQkzLCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzQ5LAkJMywgNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNESU8xX0RBVEEyXzAsCTMsIDUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQTIwLAkJMywgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNTAsCQkzLCAxMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNESU8xX0RBVEExXzAsCTMsIDEwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0EyMSwJCTMsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzUxLAkJMywgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMV9EQVRBMF8wLAkzLCAxNSwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMjIsCQkzLCAyMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81MiwJCTMsIDIwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzFfQ01EXzAsCQkzLCAyMCwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9BMjMsCQkzLCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81MywJCTMsIDI1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzFfQ0xLXzAsCQkzLCAyNSwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9CQV8xLAkJNCwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81NCwJCTQsIDAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTWVNfUExMX0NMSywJCTQsIDAsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQ1MwLAkJNCwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9DUzEsCQk0LCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9DUzIsCQk0LCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFRETV9QTExfQ0xLLAkJNCwgMTUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQ1MzLAkJNCwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBFVEhfUEhZX0NMSywJCTQsIDIwLCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QwMCwJCTQsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzU1LAkJNCwgMjUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDAxLAkJNSwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81NiwJCTUsIDAsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDAyLAkJNSwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81NywJCTUsIDUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDAzLAkJNSwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNTgsCQk1LCAxMCwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9EMDQsCQk1LCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU81OV8wLAkJNSwgMTUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDA1LAkJNSwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNjBfMCwJCTUsIDIwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QwNiwJCTUsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzYxXzAsCQk1LCAyNSwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9EMDcsCQk2LCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzYyXzAsCQk2LCAwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QwOCwJCTYsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNjNfMCwJCTYsIDUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDA5LAkJNiwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNjRfMCwJCTYsIDEwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QxMCwJCTYsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzFfREFUQTNfMSwJNiwgMTUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDExLAkJNiwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMV9EQVRBMl8xLAk2LCAyMCwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9EMTIsCQk2LCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNESU8xX0RBVEExXzEsCTYsIDI1LCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QxMywJCTcsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMV9EQVRBMF8xLAk3LCAwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX0QxNCwJCTcsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMV9DTURfMSwJCTcsIDUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfRDE1LAkJNywgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMV9DTEtfMSwJCTcsIDEwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX09FLAkJNywgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBCT09UX1NUUlBfMiwJCTcsIDE1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX1JOVywJCTcsIDIwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzI5XzAsCQk3LCAyMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9XQUlULAkJNywgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMzBfMCwJCTcsIDI1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQVNSX1dFLAkJOCwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEJPT1RfU1RSUF8zLAkJOCwgMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9XRV9EUU0wLAkJOCwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8zMSwJCTgsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxN18wLAkJOCwgNSwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9XRV9EUU0xLAkJOCwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBBU1JfQkEwXzAsCQk4LCAxMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFZMWU5RX0NMSywJCTksIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMTQsCQk5LCAwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMTlfMCwJCTksIDAsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBWTFlOUV9SWEQwLAkJOSwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8xNSwJCTksIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQyMF8wLAkJOSwgNSwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFZMWU5RX1JYRDEsCQk5LCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8xNiwJCTksIDEwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMjFfMCwJCTksIDEwLCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVkxZTlFfVFhEMCwJCTksIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzE3LAkJOSwgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQyMl8wLAkJOSwgMTUsIDB4MWYsIDB4MWMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBWTFlOUV9UWEQxLAkJOSwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMTgsCQk5LCAyMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDIzXzAsCQk5LCAyMCwgMHgxZiwgMHgxYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNESU8wX0NMSywJCTEwLCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzE5LAkJMTAsIDAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMF9DTUQsCQkxMCwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8yMCwJCTEwLCA1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzBfREFUQTAsCQkxMCwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMjEsCQkxMCwgMTAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTRElPMF9EQVRBMSwJCTEwLCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8yMiwJCTEwLCAxNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNESU8wX0RBVEEyLAkJMTAsIDIwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzIzLAkJMTAsIDIwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU0RJTzBfREFUQTMsCQkxMCwgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMjQsCQkxMCwgMjUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBFTVUwLAkJMTEsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBFTVUxLAkJMTEsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBSVENLLAkJMTIsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBUUlNUX04sCQkxMiwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFRDSywJCQkxMiwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBUREksCQkJMTIsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVERPLAkJCTEyLCAyMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFRNUywJCQkxMiwgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBURE0xX0NMSywJCTEzLCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVERNMV9SWCwJCTEzLCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVERNMV9UWCwJCTEzLCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFRETTFfRlMsCQkxMywgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfUjAsCQkxNCwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEtFWVBBRF9SMSwJCTE0LCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX1IyLAkJMTQsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX1IzLAkJMTQsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX1I0LAkJMTQsIDIwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX1I1LAkJMTQsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX1I2LAkJMTUsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMTIsCQkxNSwgMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEtFWVBBRF9SNywJCTE1LCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzEwLAkJMTUsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzAsCQkxNSwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzEsCQkxNSwgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzIsCQkxNSwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzMsCQkxNSwgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzQsCQkxNiwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEtFWVBBRF9DNSwJCTE2LCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgS0VZUEFEX0M2LAkJMTYsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzEzLAkJMTYsIDEwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVEVTVF9DTEtfSU4sCQkxNiwgMTAsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBLRVlQQURfQzcsCQkxNiwgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMTEsCQkxNiwgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTU1AwXzAsCQkxNywgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNDQ19EQ0xLLAkJMTcsIDAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQyMF8xLAkJMTcsIDAsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTU1AwXzEsCQkxNywgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNDQ19DU19OLAkJMTcsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQyMV8xLAkJMTcsIDUsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTU1AwXzIsCQkxNywgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTQ0NfRCwJCTE3LCAxMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDIyXzEsCQkxNywgMTAsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTU1AwXzMsCQkxNywgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBTQ0NfUkVTRVROLAkJMTcsIDE1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMjNfMSwJCTE3LCAxNSwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNTUDFfMCwJCTE4LCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzI1LAkJMTgsIDAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBVQVJUMl9DVFMsCQkxOCwgMCwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFNTUDFfMSwJCTE4LCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzI2LAkJMTgsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBVQVJUMl9SRCwJCTE4LCA1LCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU1NQMV8yLAkJMTgsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzI3LAkJMTgsIDEwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVUFSVDJfUlRTLAkJMTgsIDEwLCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgU1NQMV8zLAkJMTgsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzI4LAkJMTgsIDE1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVUFSVDJfVEQsCQkxOCwgMTUsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBVQVJUMF9DVFMsCQkxOSwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFVBUlQwX1JELAkJMTksIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBVQVJUMF9SVFMsCQkxOSwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBVQVJUMF9URCwJCTE5LCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFVBUlQxX1JELAkJMTksIDIwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVUFSVDFfVEQsCQkxOSwgMjUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfQUNfTkNTLAkJMjAsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfSFNZTkNfUk5XLAkyMCwgNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9WU1lOQ19BMCwJMjAsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX01DTEssCQkyMCwgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxNl8wLAkJMjAsIDE1LCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BDTEtfRSwJCTIwLCAyMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDAwLAkJMjAsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMDEsCQkyMSwgMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDAyLAkJMjEsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQwMywJCTIxLCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDA0LAkJMjEsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMDUsCQkyMSwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQwNiwJCTIxLCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDA3LAkJMjIsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQwOCwJCTIyLCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzU5XzEsCQkyMiwgNSwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDA5LAkJMjIsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzYwXzEsCQkyMiwgMTAsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxMCwJCTIyLCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFTUl9CQTBfMSwJCTIyLCAxNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU82MV8xLAkJMjIsIDE1LCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMTEsCQkyMiwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPNjJfMSwJCTIyLCAyMCwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDEyLAkJMjIsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzYzXzEsCQkyMiwgMjUsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxMywJCTIzLCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzY0XzEsCQkyMywgMCwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDE0LAkJMjMsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMjlfMSwJCTIzLCA1LCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMTUsCQkyMywgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMzBfMSwJCTIzLCAxMCwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEVJTlQwLAkJMjQsIDAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMDgsCQkyNCwgMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEVJTlQxLAkJMjQsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMDksCQkyNCwgNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8wMCwJCTI0LCAxMCwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDIwXzIsCQkyNCwgMTAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBURE1fQ0xLX0lOXzIsCTI0LCAxMCwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8wMSwJCTI0LCAxNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIExDRF9QRDIxXzIsCQkyNCwgMTUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCAyNE1fQ0xLX09VVF8xLAkyNCwgMTUsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMDIsCQkyNCwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQyMl8yLAkJMjQsIDIwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzAzLAkJMjQsIDI1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMjNfMiwJCTI0LCAyNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEdQSU8wNCwJCTI1LCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMTZfMSwJCTI1LCAwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVVNCMF9SWEVSUiwJCTI1LCAwLCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzA1LAkJMjUsIDUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxN18xLAkJMjUsIDUsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBURE1fQ0xLX0lOXzEsCTI1LCA1LCAweDFmLCAweDBjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgR1BJTzA2LAkJMjUsIDEwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTENEX1BEMTgsCQkyNSwgMTAsIDB4MWYsIDB4MDQsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCAyNE1fQ0xLX09VVF8yLAkyNSwgMTAsIDB4MWYsIDB4MGMsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBHUElPMDcsCQkyNSwgMTUsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBMQ0RfUEQxOV8xLAkJMjUsIDE1LCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVVNCMV9SWEVSUiwJCTI1LCAxNSwgMHgxZiwgMHgwYywgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEVUSF9QTExfQ0xLLAkJMjUsIDE1LCAweDFmLCAweDFjLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTURJTywJCTI2LCAwLCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgTURDLAkJCTI2LCA1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQUlDX01VVEVfU1RBVF9OLAkyNiwgMTAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBURE0wX0NMSywJCTI2LCAxMCwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFJQ19ITlNfRU5fTiwJMjYsIDE1LCAweDFmLCAweDAwLCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgVERNMF9GUywJCTI2LCAxNSwgMHgxZiwgMHgwNCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIEFJQ19IRFNfRU5fU1RBVF9OLAkyNiwgMjAsIDB4MWYsIDB4MDAsIGZhbHNlKQorCU1VWF9DRkcoVE5FVFYxMDdYLCBURE0wX1RYLAkJMjYsIDIwLCAweDFmLCAweDA0LCBmYWxzZSkKKwlNVVhfQ0ZHKFRORVRWMTA3WCwgQUlDX0hORl9FTl9TVEFUX04sCTI2LCAyNSwgMHgxZiwgMHgwMCwgZmFsc2UpCisJTVVYX0NGRyhUTkVUVjEwN1gsIFRETTBfUlgsCQkyNiwgMjUsIDB4MWYsIDB4MDQsIGZhbHNlKQorI2VuZGlmCit9OworCisvKiBGSVEgYXJlIHByaSAwLTE7IG90aGVyd2lzZSAyLTcsIHdpdGggNyBsb3dlc3QgcHJpb3JpdHkgKi8KK3N0YXRpYyB1OCBpcnFfcHJpb3NbVE5FVFYxMDdYX05fQ1BfSU5UQ19JUlFdID0geworCS8qIGZpbGwgaW4gZGVmYXVsdCBwcmlvcml0eSA3ICovCisJWzAgLi4uIChUTkVUVjEwN1hfTl9DUF9JTlRDX0lSUSAtIDEpXQk9IDcsCisJLyogbm93IG92ZXJyaWRlIGFzIG5lZWRlZCwgZS5nLiBbeHh4XSA9IDUgKi8KK307CisKKy8qIENvbnRlbnRzIG9mIEpUQUcgSUQgcmVnaXN0ZXIgdXNlZCB0byBpZGVudGlmeSBleGFjdCBjcHUgdHlwZSAqLworc3RhdGljIHN0cnVjdCBkYXZpbmNpX2lkIGlkc1tdID0geworCXsKKwkJLnZhcmlhbnQJPSAweDAsCisJCS5wYXJ0X25vCT0gMHhiOGExLAorCQkubWFudWZhY3R1cmVyCT0gMHgwMTcsCisJCS5jcHVfaWQJCT0gREFWSU5DSV9DUFVfSURfVE5FVFYxMDdYLAorCQkubmFtZQkJPSAidG5ldHYxMDd4IHJldjEuMCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV90aW1lcl9pbnN0YW5jZSB0aW1lcl9pbnN0YW5jZVsyXSA9IHsKKwl7CisJCS5iYXNlCQk9IFRORVRWMTA3WF9USU1FUjBfQkFTRSwKKwkJLmJvdHRvbV9pcnEJPSBJUlFfVE5FVFYxMDdYX1RJTUVSXzBfVElOVDEyLAorCQkudG9wX2lycQk9IElSUV9UTkVUVjEwN1hfVElNRVJfMF9USU5UMzQsCisJfSwKKwl7CisJCS5iYXNlCQk9IFRORVRWMTA3WF9USU1FUjFfQkFTRSwKKwkJLmJvdHRvbV9pcnEJPSBJUlFfVE5FVFYxMDdYX1RJTUVSXzFfVElOVDEyLAorCQkudG9wX2lycQk9IElSUV9UTkVUVjEwN1hfVElNRVJfMV9USU5UMzQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV90aW1lcl9pbmZvIHRpbWVyX2luZm8gPSB7CisJLnRpbWVycwkJPSB0aW1lcl9pbnN0YW5jZSwKKwkuY2xvY2tldmVudF9pZAk9IFQwX0JPVCwKKwkuY2xvY2tzb3VyY2VfaWQJPSBUMF9UT1AsCit9OworCisvKgorICogVE5FVFYxMDdYIHBsYXRmb3JtcyBkbyBub3QgdXNlIHRoZSBzdGF0aWMgbWFwcGluZ3MgZnJvbSBEYXZpbmNpCisgKiBJT19QSFlTL0lPX1ZJUlQuIFRoaXMgU09DJ3MgaW50ZXJlc3RpbmcgTU1ScyBhcmUgYXQgZGlmZmVyZW50IGFkZHJlc3NlcywKKyAqIGFuZCBjaGFuZ2luZyBJT19QSFlTIHdvdWxkIGJyZWFrIGF3YXkgZnJvbSBleGlzdGluZyBEYXZpbmNpIFNPQ3MuCisgKgorICogVGhlIHByaW1hcnkgaW1wYWN0IG9mIHRoZSBjdXJyZW50IG1vZGVsIGlzIHRoYXQgSU9fQUREUkVTUygpIGlzIG5vdCB0byBiZQorICogdXNlZCB0byBtYXAgcmVnaXN0ZXJzIG9uIFRORVRWMTA3WC4KKyAqCisgKiAxLglUaGUgZmlyc3QgY2h1bmsgaXMgZm9yIElOVEM6ICBUaGlzIG5lZWRzIHRvIGJlIG1hcHBlZCBpbiB2aWEgaW90YWJsZQorICoJYmVjYXVzZSBpb3JlbWFwKCkgZG9lcyBub3Qgc2VlbSB0byBiZSBvcGVyYXRpb25hbCBhdCB0aGUgdGltZSB3aGVuCisgKglpcnFzIGFyZSBpbml0aWFsaXplZC4gIFdpdGhvdXQgdGhpcywgY29uc2lzdGVudCBkbWEgaW5pdCBib21icy4KKyAqCisgKiAyLglUaGUgc2Vjb25kIGNodW5rIG1hcHMgaW4gcmVnaXN0ZXIgYXJlYXMgdGhhdCBuZWVkIHRvIGJlIHBvcHVsYXRlZCBpbnRvCisgKglkYXZpbmNpX3NvY19pbmZvLiAgTm90ZSB0aGF0IGFsaWdubWVudCByZXN0cmljdGlvbnMgY29tZSBpbnRvIHBsYXkgaWYKKyAqCWxvdy1sZXZlbCBkZWJ1ZyBpcyBlbmFibGVkIChzZWUgbm90ZSBpbiA8bWFjaC90bmV0djEwN3guaD4pLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlvX2Rlc2NbXSA9IHsKKwl7CS8qIElOVEMgKi8KKwkJLnZpcnR1YWwJPSBJT19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVE5FVFYxMDdYX0lOVENfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsJLyogTW9zdCBvZiB0aGUgcmVzdCAqLworCQkudmlydHVhbAk9IFRORVRWMTA3WF9JT19WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oVE5FVFYxMDdYX0lPX0JBU0UpLAorCQkubGVuZ3RoCQk9IElPX1NJWkUgLSBTWl8xTSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19zc3BsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludAkJcGxsOworCXVuc2lnbmVkIGxvbmcJbXVsdCA9IDAsIHByZWRpdiA9IDEsIHBvc3RkaXYgPSAxOworCXVuc2lnbmVkIGxvbmcJcmVmID0gT1NDX0ZSRVFfT05DSElQLCByZXQ7CisJdTMyCQl0bXA7CisKKwlpZiAoV0FSTl9PTighY2xrLT5wbGxfZGF0YSkpCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoIWNsa19jdHJsX3JlZ3MpIHsKKwkJdm9pZCBfX2lvbWVtICp0bXA7CisKKwkJdG1wID0gaW9yZW1hcChUTkVUVjEwN1hfQ0xPQ0tfQ09OVFJPTF9CQVNFLCBTWl80Syk7CisKKwkJaWYgKFdBUk4oIXRtcCwgImZhaWxlZCBpb3JlbWFwIGZvciBjbG9jayBjb250cm9sIHJlZ3NcbiIpKQorCQkJcmV0dXJuIGNsay0+cGFyZW50ID8gY2xrLT5wYXJlbnQtPnJhdGUgOiAwOworCisJCWZvciAocGxsID0gMDsgcGxsIDwgTl9QTExTOyBwbGwrKykKKwkJCXNzcGxsX3JlZ3NbcGxsXSA9IHRtcCArIHNzcGxsX3JlZ3NfYmFzZVtwbGxdOworCisJCWNsa19jdHJsX3JlZ3MgPSB0bXA7CisJfQorCisJcGxsID0gY2xrLT5wbGxfZGF0YS0+bnVtOworCisJdG1wID0gX19yYXdfcmVhZGwoJmNsa19jdHJsX3JlZ3MtPnBsbF9ieXBhc3MpOworCWlmICghKHRtcCAmIGJ5cGFzc19tYXNrW3BsbF0pKSB7CisJCW11bHQJPSBfX3Jhd19yZWFkbCgmc3NwbGxfcmVnc1twbGxdLT5tdWx0X2ZhY3Rvcik7CisJCXByZWRpdgk9IF9fcmF3X3JlYWRsKCZzc3BsbF9yZWdzW3BsbF0tPnByZV9kaXYpICsgMTsKKwkJcG9zdGRpdgk9IF9fcmF3X3JlYWRsKCZzc3BsbF9yZWdzW3BsbF0tPnBvc3RfZGl2KSArIDE7CisJfQorCisJdG1wID0gX19yYXdfcmVhZGwoY2xrLT5wbGxfZGF0YS0+YmFzZSArIFBMTENUTCk7CisJaWYgKHRtcCAmIFBMTENUTF9DTEtNT0RFKQorCQlyZWYgPSBwbGxfZXh0X2ZyZXFbcGxsXTsKKworCWNsay0+cGxsX2RhdGEtPmlucHV0X3JhdGUgPSByZWY7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChjbGstPnBsbF9kYXRhLT5iYXNlICsgUExMQ1RMKTsKKwlpZiAoISh0bXAgJiBQTExDVExfUExMRU4pKQorCQlyZXR1cm4gcmVmOworCisJcmV0ID0gcmVmOworCWlmIChtdWx0KQorCQlyZXQgKz0gKCh1bnNpZ25lZCBsb25nIGxvbmcpcmVmICogbXVsdCkgLyAyNTY7CisKKwlyZXQgLz0gKHByZWRpdiAqIHBvc3RkaXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdG5ldHYxMDd4X3dhdGNoZG9nX3Jlc2V0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdkdF9yZWdzIF9faW9tZW0gKnJlZ3M7CisKKwlyZWdzID0gaW9yZW1hcChwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgU1pfNEspOworCisJLyogZGlzYWJsZSB3YXRjaGRvZyAqLworCV9fcmF3X3dyaXRlbCgweDc3NzcsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgweGNjY2MsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgweGRkZGQsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgwLCAmcmVncy0+ZGlzYWJsZSk7CisKKwkvKiBwcm9ncmFtIHByZXNjYWxlICovCisJX19yYXdfd3JpdGVsKDB4NWE1YSwgJnJlZ3MtPnByZXNjYWxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgweGE1YTUsICZyZWdzLT5wcmVzY2FsZV9sb2NrKTsKKwlfX3Jhd193cml0ZWwoMCwgJnJlZ3MtPnByZXNjYWxlKTsKKworCS8qIHByb2dyYW0gY291bnRkb3duICovCisJX19yYXdfd3JpdGVsKDB4NjY2NiwgJnJlZ3MtPmNoYW5nZV9sb2NrKTsKKwlfX3Jhd193cml0ZWwoMHhiYmJiLCAmcmVncy0+Y2hhbmdlX2xvY2spOworCV9fcmF3X3dyaXRlbCgxLCAmcmVncy0+Y2hhbmdlKTsKKworCS8qIGVuYWJsZSB3YXRjaGRvZyAqLworCV9fcmF3X3dyaXRlbCgweDc3NzcsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgweGNjY2MsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgweGRkZGQsICZyZWdzLT5kaXNhYmxlX2xvY2spOworCV9fcmF3X3dyaXRlbCgxLCAmcmVncy0+ZGlzYWJsZSk7CisKKwkvKiBraWNrICovCisJX19yYXdfd3JpdGVsKDB4NTU1NSwgJnJlZ3MtPmtpY2tfbG9jayk7CisJX19yYXdfd3JpdGVsKDB4YWFhYSwgJnJlZ3MtPmtpY2tfbG9jayk7CisJX19yYXdfd3JpdGVsKDEsICZyZWdzLT5raWNrKTsKK30KKworc3RhdGljIHN0cnVjdCBkYXZpbmNpX3NvY19pbmZvIHRuZXR2MTA3eF9zb2NfaW5mbyA9IHsKKwkuaW9fZGVzYwkJPSBpb19kZXNjLAorCS5pb19kZXNjX251bQkJPSBBUlJBWV9TSVpFKGlvX2Rlc2MpLAorCS5pZHMJCQk9IGlkcywKKwkuaWRzX251bQkJPSBBUlJBWV9TSVpFKGlkcyksCisJLmp0YWdfaWRfcmVnCQk9IFRORVRWMTA3WF9DSElQX0NGR19CQVNFICsgMHgwMTgsCisJLmNwdV9jbGtzCQk9IGNsa3MsCisJLnBzY19iYXNlcwkJPSBwc2NfcmVncywKKwkucHNjX2Jhc2VzX251bQkJPSBBUlJBWV9TSVpFKHBzY19yZWdzKSwKKwkucGlubXV4X2Jhc2UJCT0gVE5FVFYxMDdYX0NISVBfQ0ZHX0JBU0UgKyAweDE1MCwKKwkucGlubXV4X3BpbnMJCT0gcGlucywKKwkucGlubXV4X3BpbnNfbnVtCT0gQVJSQVlfU0laRShwaW5zKSwKKwkuaW50Y190eXBlCQk9IERBVklOQ0lfSU5UQ19UWVBFX0NQX0lOVEMsCisJLmludGNfYmFzZQkJPSBUTkVUVjEwN1hfSU5UQ19CQVNFLAorCS5pbnRjX2lycV9wcmlvcwkJPSBpcnFfcHJpb3MsCisJLmludGNfaXJxX251bQkJPSBUTkVUVjEwN1hfTl9DUF9JTlRDX0lSUSwKKwkuaW50Y19ob3N0X21hcAkJPSBpbnRjX2hvc3RfbWFwLAorCS5ncGlvX2Jhc2UJCT0gVE5FVFYxMDdYX0dQSU9fQkFTRSwKKwkuZ3Bpb190eXBlCQk9IEdQSU9fVFlQRV9UTkVUVjEwN1gsCisJLmdwaW9fbnVtCQk9IFRORVRWMTA3WF9OX0dQSU8sCisJLnRpbWVyX2luZm8JCT0gJnRpbWVyX2luZm8sCisJLnNlcmlhbF9kZXYJCT0gJnRuZXR2MTA3eF9zZXJpYWxfZGV2aWNlLAorCS5yZXNldAkJCT0gdG5ldHYxMDd4X3dhdGNoZG9nX3Jlc2V0LAorCS5yZXNldF9kZXZpY2UJCT0gJnRuZXR2MTA3eF93ZHRfZGV2aWNlLAorfTsKKwordm9pZCBfX2luaXQgdG5ldHYxMDd4X2luaXQodm9pZCkKK3sKKwlkYXZpbmNpX2NvbW1vbl9pbml0KCZ0bmV0djEwN3hfc29jX2luZm8pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKaW5kZXggN2YzMDM5Ny4uOGJmM2NlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCkBAIC00Myw3ICs0Myw4IEBACiAKIHN0YXRpYyBpbnQgc2V0X2tleXRjaGNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBpbnQgc2V0X2Rpdl9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLQorc3RhdGljIGludCBzZXRfaTJzX3NjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IHNldF9pMnNfbHJjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa194dGFsaSA9IHsKIAkucmF0ZQkJPSBFUDkzWFhfRVhUX0NMS19SQVRFLApAQCAtMTEyLDYgKzExMywyOSBAQAogCS5zZXRfcmF0ZQk9IHNldF9kaXZfcmF0ZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19pMnNfbWNsayA9IHsKKwkuc3dfbG9ja2VkCT0gMSwKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWLAorCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fQ0xLRElWX0VOQUJMRSwKKwkuc2V0X3JhdGUJPSBzZXRfZGl2X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzX3NjbGsgPSB7CisJLnN3X2xvY2tlZAk9IDEsCisJLnBhcmVudAkJPSAmY2xrX2kyc19tY2xrLAorCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9JMlNDTEtESVYsCisJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfU0VOQSwKKwkuc2V0X3JhdGUJPSBzZXRfaTJzX3NjbGtfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19pMnNfbHJjbGsgPSB7CisJLnN3X2xvY2tlZAk9IDEsCisJLnBhcmVudAkJPSAmY2xrX2kyc19zY2xrLAorCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9JMlNDTEtESVYsCisJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfU0VOQSwKKwkuc2V0X3JhdGUJPSBzZXRfaTJzX2xyY2xrX3JhdGUsCit9OworCiAvKiBETUEgQ2xvY2tzICovCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMCA9IHsKIAkucGFyZW50CQk9ICZjbGtfaCwKQEAgLTE5MSw2ICsyMTUsOSBAQAogCUlOSVRfQ0soImVwOTN4eC1rZXlwYWQiLAlOVUxMLAkJJmNsa19rZXlwYWQpLAogCUlOSVRfQ0soImVwOTN4eC1mYiIsCQlOVUxMLAkJJmNsa192aWRlbyksCiAJSU5JVF9DSygiZXA5M3h4LXNwaS4wIiwJCU5VTEwsCQkmY2xrX3NwaSksCisJSU5JVF9DSygiZXA5M3h4LWkycyIsCQkibWNsayIsCQkmY2xrX2kyc19tY2xrKSwKKwlJTklUX0NLKCJlcDkzeHgtaTJzIiwJCSJzY2xrIiwJCSZjbGtfaTJzX3NjbGspLAorCUlOSVRfQ0soImVwOTN4eC1pMnMiLAkJImxyY2xrIiwJJmNsa19pMnNfbHJjbGspLAogCUlOSVRfQ0soTlVMTCwJCQkicHdtX2NsayIsCSZjbGtfcHdtKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDAiLAkJJmNsa19tMnAwKSwKIAlJTklUX0NLKE5VTEwsCQkJIm0ycDEiLAkJJmNsa19tMnAxKSwKQEAgLTQwMSw2ICs0MjgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXRfaTJzX3NjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCB2YWwgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCisJaWYgKHJhdGUgPT0gY2xrX2kyc19tY2xrLnJhdGUgLyAyKQorCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbCAmIH5FUDkzWFhfSTJTQ0xLRElWX1NESVYsIAorCQkJCQkgICAgIGNsay0+ZW5hYmxlX3JlZyk7CisJZWxzZSBpZiAocmF0ZSA9PSBjbGtfaTJzX21jbGsucmF0ZSAvIDQpCisJCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsIHwgRVA5M1hYX0kyU0NMS0RJVl9TRElWLCAKKwkJCQkJICAgICBjbGstPmVuYWJsZV9yZWcpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljbGtfaTJzX3NjbGsucmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2kyc19scmNsa19yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIHZhbCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJiAKKwkJfkVQOTNYWF9JMlNDTEtESVZfTFJESVZfTUFTSzsKKwkKKwlpZiAocmF0ZSA9PSBjbGtfaTJzX3NjbGsucmF0ZSAvIDMyKQorCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbCB8IEVQOTNYWF9JMlNDTEtESVZfTFJESVYzMiwKKwkJCQkJICAgICBjbGstPmVuYWJsZV9yZWcpOworCWVsc2UgaWYgKHJhdGUgPT0gY2xrX2kyc19zY2xrLnJhdGUgLyA2NCkKKwkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWwgfCBFUDkzWFhfSTJTQ0xLRElWX0xSRElWNjQsCisJCQkJCSAgICAgY2xrLT5lbmFibGVfcmVnKTsKKwllbHNlIGlmIChyYXRlID09IGNsa19pMnNfc2Nsay5yYXRlIC8gMTI4KQorCQllcDkzeHhfc3lzY29uX3N3bG9ja2VkX3dyaXRlKHZhbCB8IEVQOTNYWF9JMlNDTEtESVZfTFJESVYxMjgsCisJCQkJCSAgICAgY2xrLT5lbmFibGVfcmVnKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrX2kyc19scmNsay5yYXRlID0gcmF0ZTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlpZiAoY2xrLT5zZXRfcmF0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCA4ZTM3YTA0Li40Y2I1NWQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC03NTgsNiArNzU4LDczIEBACiB9CiBFWFBPUlRfU1lNQk9MKGVwOTN4eF9rZXlwYWRfcmVsZWFzZV9ncGlvKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVQOTN4eCBJMlMgYXVkaW8gcGVyaXBoZXJhbCBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVwOTN4eF9pMnNfcmVzb3VyY2VbXSA9IHsKKwl7CisJCS5zdGFydAk9IEVQOTNYWF9JMlNfUEhZU19CQVNFLAorCQkuZW5kCT0gRVA5M1hYX0kyU19QSFlTX0JBU0UgKyAweDEwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlcDkzeHhfaTJzX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZXA5M3h4LWkycyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlcDkzeHhfaTJzX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBlcDkzeHhfaTJzX3Jlc291cmNlLAorfTsKKwordm9pZCBfX2luaXQgZXA5M3h4X3JlZ2lzdGVyX2kycyh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2kyc19kZXZpY2UpOworfQorCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU19NQVNLCShFUDkzWFhfU1lTQ09OX0RFVkNGR19JMlNPTlNTUCB8IFwKKwkJCQkJIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU09OQUM5NykKKworI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX01BU0sJCShFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9PUklERSB8IFwKKwkJCQkJIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX1NQT0wpCisKK2ludCBlcDkzeHhfaTJzX2FjcXVpcmUodW5zaWduZWQgaTJzX3BpbnMsIHVuc2lnbmVkIGkyc19jb25maWcpCit7CisJdW5zaWduZWQgdmFsOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKGkyc19waW5zICYgfkVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU19NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaTJzX2NvbmZpZyAmIH5FUDkzWFhfSTJTQ0xLRElWX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTXVzdCBoYXZlIG9ubHkgb25lIG9mIEkyU09OU1NQL0kyU09OQUM5NyBzZXQgKi8KKwlpZiAoKGkyc19waW5zICYgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTT05TU1ApID09CisJICAgIChpMnNfcGlucyAmIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU09OQUM5NykpCisJCXJldHVybiAtRUlOVkFMOworCisJZXA5M3h4X2RldmNmZ19jbGVhcl9iaXRzKEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU19NQVNLKTsKKwllcDkzeHhfZGV2Y2ZnX3NldF9iaXRzKGkyc19waW5zKTsKKworCS8qCisJICogVGhpcyBpcyBwb3RlbnRpYWxseSByYWN5IHdpdGggdGhlIGNsb2NrIGFwaSBmb3IgaTJzX21jbGssIHNjbGsgYW5kIAorCSAqIGxyY2xrLiBTaW5jZSB0aGUgaTJzIGRyaXZlciBpcyB0aGUgb25seSB1c2VyIG9mIHRob3NlIGNsb2NrcyB3ZQorCSAqIHJlbHkgb24gaXQgdG8gcHJldmVudCBwYXJhbGxlbCB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIAorCSAqIGNsb2NrIGFwaSBmb3IgdGhlIGkycyBjbG9ja3MuCisJICovCisJdmFsID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9JMlNDTEtESVYpOworCXZhbCAmPSB+RVA5M1hYX0kyU0NMS0RJVl9NQVNLOworCXZhbCB8PSBpMnNfY29uZmlnOworCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZXA5M3h4X2kyc19hY3F1aXJlKTsKKwordm9pZCBlcDkzeHhfaTJzX3JlbGVhc2Uodm9pZCkKK3sKKwllcDkzeHhfZGV2Y2ZnX2NsZWFyX2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTX01BU0spOworfQorRVhQT1JUX1NZTUJPTChlcDkzeHhfaTJzX3JlbGVhc2UpOwogCiBleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IGIxZTA5NmYuLmM1NGIzZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC05Myw2ICs5Myw3IEBACiAvKiBBUEIgcGVyaXBoZXJhbHMgKi8KICNkZWZpbmUgRVA5M1hYX1RJTUVSX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAxMDAwMCkKIAorI2RlZmluZSBFUDkzWFhfSTJTX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAyMDAwMCkKIAogI2RlZmluZSBFUDkzWFhfU0VDVVJJVFlfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDMwMDAwKQpAQCAtMTk0LDYgKzE5NSwxNSBAQAogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMS0RJVl9FU0VMCSgxPDwxNCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTEtESVZfUFNFTAkoMTw8MTMpCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fQ0xLRElWX1BESVZfU0hJRlQJOAorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVgkJRVA5M1hYX1NZU0NPTl9SRUcoMHg4YykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9JMlNDTEtESVZfU0VOQQkoMTw8MzEpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX09SSURFICAgKDE8PDI5KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9TUE9MCSgxPDwxOSkKKyNkZWZpbmUgRVA5M1hYX0kyU0NMS0RJVl9TRElWCQkoMSA8PCAxNikKKyNkZWZpbmUgRVA5M1hYX0kyU0NMS0RJVl9MUkRJVjMyCSgwIDw8IDE3KQorI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWNjQJKDEgPDwgMTcpCisjZGVmaW5lIEVQOTNYWF9JMlNDTEtESVZfTFJESVYxMjggCSgyIDw8IDE3KQorI2RlZmluZSBFUDkzWFhfSTJTQ0xLRElWX0xSRElWX01BU0sgCSgzIDw8IDE3KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVglFUDkzWFhfU1lTQ09OX1JFRygweDkwKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9UU0VOCSgxPDwzMSkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgkoMTw8MTYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IGE2YzA5MTcuLjMzMzBiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCkBAIC01OCw2ICs1OCw5IEBACiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9rZXlwYWQoc3RydWN0IGVwOTN4eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqZGF0YSk7CiBpbnQgZXA5M3h4X2tleXBhZF9hY3F1aXJlX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiB2b2lkIGVwOTN4eF9rZXlwYWRfcmVsZWFzZV9ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwordm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJzKHZvaWQpOworaW50IGVwOTN4eF9pMnNfYWNxdWlyZSh1bnNpZ25lZCBpMnNfcGlucywgdW5zaWduZWQgaTJzX2NvbmZpZyk7Cit2b2lkIGVwOTN4eF9pMnNfcmVsZWFzZSh2b2lkKTsKIAogdm9pZCBlcDkzeHhfaW5pdF9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgZXA5M3h4X3RpbWVyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3NuYXBwZXJjbDE1LmMKaW5kZXggMzhkZWFlZS4uYTEyYzg5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvc25hcHBlcmNsMTUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9zbmFwcGVyY2wxNS5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAllcDkzeHhfcmVnaXN0ZXJfaTJjKCZzbmFwcGVyY2wxNV9pMmNfZ3Bpb19kYXRhLCBzbmFwcGVyY2wxNV9pMmNfZGF0YSwKIAkJCSAgICBBUlJBWV9TSVpFKHNuYXBwZXJjbDE1X2kyY19kYXRhKSk7CiAJZXA5M3h4X3JlZ2lzdGVyX2ZiKCZzbmFwcGVyY2wxNV9mYl9pbmZvKTsKKwllcDkzeHhfcmVnaXN0ZXJfaTJzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbmFwcGVyY2wxNV9uYW5kX2RldmljZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9LY29uZmlnCmluZGV4IDUxNWI3NWMuLjZmMDY2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvS2NvbmZpZwpAQCAtMiw2ICsyLDEzIEBACiAKIG1lbnUgIkNvcnRpbmEgU3lzdGVtcyBHZW1pbmkgSW1wbGVtZW50YXRpb25zIgogCitjb25maWcgTUFDSF9OQVM0MjIwQgorCWJvb2wgIlJhaWRzb25pYyBOQVMtNDIyMC1CIgorCXNlbGVjdCBHRU1JTklfTUVNX1NXQVAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEKKwkgIFJhaWRzb25pYyBOQVMtNDIyMC1CLgorCiBjb25maWcgTUFDSF9SVVQxMDAKIAlib29sICJUZWx0b25pa2EgUlVUMTAwIgogCXNlbGVjdCBHRU1JTklfTUVNX1NXQVAKQEAgLTksNiArMTYsMjAgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQogCSAgVGVsdG9uaWthIDNHIFJvdXRlciBSVVQxMDAuCiAKK2NvbmZpZyBNQUNIX1dCRDExMQorCWJvb2wgIldpbGlib2FyZCBXQkQtMTExIgorCXNlbGVjdCBHRU1JTklfTUVNX1NXQVAKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEKKwkgIFdpbGlib2FyZCBXQkQtMTExLgorCitjb25maWcgTUFDSF9XQkQyMjIKKyAgICAgICAgYm9vbCAiV2lsaWJvYXJkIFdCRC0yMjIiCisgICAgICAgIHNlbGVjdCBHRU1JTklfTUVNX1NXQVAKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQorICAgICAgICAgIFdpbGlib2FyZCBXQkQtMjIyLgorCiBlbmRtZW51CiAKIGNvbmZpZyBHRU1JTklfTUVNX1NXQVAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKaW5kZXggNzE5NTA1Yi4uYzViMjRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKQEAgLTcsNCArNyw3IEBACiBvYmoteQkJCTo9IGlycS5vIG1tLm8gdGltZS5vIGRldmljZXMubyBncGlvLm8KIAogIyBCb2FyZC1zcGVjaWZpYyBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9OQVM0MjIwQikJKz0gYm9hcmQtbmFzNDIyMGIubwogb2JqLSQoQ09ORklHX01BQ0hfUlVUMTAwKQkrPSBib2FyZC1ydXQxeHgubworb2JqLSQoQ09ORklHX01BQ0hfV0JEMTExKQkrPSBib2FyZC13YmQxMTEubworb2JqLSQoQ09ORklHX01BQ0hfV0JEMjIyKQkrPSBib2FyZC13YmQyMjIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtbmFzNDIyMGIuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLW5hczQyMjBiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmMWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLW5hczQyMjBiLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgUmFpZHNvbmljIE5BUy00MjIwLUIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEphbm9zIExhdWJlIDxqYW5vcy5kZXZAZ21haWwuY29tPgorICoKKyAqIGJhc2VkIG9uIHJ1dDF4eC5jCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGlvLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ2xvYmFsX3JlZy5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGliNDIyMGJfdGltZXIgPSB7CisJLmluaXQJPSBnZW1pbmlfdGltZXJfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgaWI0MjIwYl9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIm5hczQyMjBiOm9yYW5nZTpoZGQiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuZ3BpbwkJCT0gNjAsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAibmFzNDIyMGI6Z3JlZW46b3MiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSA2MiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGliNDIyMGJfbGVkc19kYXRhID0geworCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoaWI0MjIwYl9sZWRzKSwKKwkubGVkcwkJPSBpYjQyMjBiX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpYjQyMjBiX2xlZF9kZXZpY2UgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpYjQyMjBiX2xlZHNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGliNDIyMGJfa2V5c1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX1NFVFVQLAorCQkuZ3BpbwkJPSA2MSwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiQmFja3VwIEJ1dHRvbiIsCisJCS50eXBlCQk9IEVWX0tFWSwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX1JFU1RBUlQsCisJCS5ncGlvCQk9IDYzLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS5kZXNjCQk9ICJTb2Z0cmVzZXQgQnV0dG9uIiwKKwkJLnR5cGUJCT0gRVZfS0VZLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGliNDIyMGJfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gaWI0MjIwYl9rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoaWI0MjIwYl9rZXlzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGliNDIyMGJfa2V5X2RldmljZSA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmliNDIyMGJfa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaWI0MjIwYl9pbml0KHZvaWQpCit7CisJZ2VtaW5pX2dwaW9faW5pdCgpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3VhcnQoKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2goU1pfMTZNLCBOVUxMLCAwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmliNDIyMGJfbGVkX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpYjQyMjBiX2tleV9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKE5BUzQyMjBCLCAiUmFpZHNvbmljIE5BUyBJQi00MjIwLUIiKQorCS5waHlzX2lvCT0gMHg3ZmZmYzAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmZmZmMwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDEwMCwKKwkubWFwX2lvCQk9IGdlbWluaV9tYXBfaW8sCisJLmluaXRfaXJxCT0gZ2VtaW5pX2luaXRfaXJxLAorCS50aW1lcgkJPSAmaWI0MjIwYl90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gaWI0MjIwYl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDExMS5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtd2JkMTExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY1MzhjMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDExMS5jCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogIFN1cHBvcnQgZm9yIFdpbGlib2FyZCBXQkQtMTExCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L21kaW8tZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiB3YmQxMTFfa2V5c1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX1NFVFVQLAorCQkuZ3BpbwkJPSA1LAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS5kZXNjCQk9ICJyZXNldCIsCisJCS50eXBlCQk9IEVWX0tFWSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSB3YmQxMTFfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gd2JkMTExX2tleXMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRSh3YmQxMTFfa2V5cyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3YmQxMTFfa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ3YmQxMTFfa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHdiZDExMV9sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gIkwzcmVkIiwKKwkJLmdwaW8JCQk9IDEsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiTDRncmVlbiIsCisJCS5ncGlvCQkJPSAyLAorCX0sCisJeworCQkubmFtZQkJCT0gIkw0cmVkIiwKKwkJLmdwaW8JCQk9IDMsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiTDNncmVlbiIsCisJCS5ncGlvCQkJPSA1LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgd2JkMTExX2xlZHNfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHdiZDExMV9sZWRzKSwKKwkubGVkcwkJPSB3YmQxMTFfbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHdiZDExMV9sZWRzX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJndiZDExMV9sZWRzX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHdiZDExMV90aW1lciA9IHsKKwkuaW5pdAk9IGdlbWluaV90aW1lcl9pbml0LAorfTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHdiZDExMV9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiUmVkQm9vdCIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gMHgwMjAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9ICwgeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSAweDAyMDAwMCwKKwkJLnNpemUJCT0gMHgxMDAwMDAsCisJfSAsIHsKKwkJLm5hbWUJCT0gInJvb3RmcyIsCisJCS5vZmZzZXQJCT0gMHgxMjAwMDAsCisJCS5zaXplCQk9IDB4NmEwMDAwLAorCX0gLCB7CisJCS5uYW1lCQk9ICJWQ1RMIiwKKwkJLm9mZnNldAkJPSAweDdjMDAwMCwKKwkJLnNpemUJCT0gMHgwMTAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9ICwgeworCQkubmFtZQkJPSAiY2ZnIiwKKwkJLm9mZnNldAkJPSAweDdkMDAwMCwKKwkJLnNpemUJCT0gMHgwMTAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9ICwgeworCQkubmFtZQkJPSAiRklTIiwKKwkJLm9mZnNldAkJPSAweDdlMDAwMCwKKwkJLnNpemUJCT0gMHgwMTAwMDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9Cit9OworI2RlZmluZSB3YmQxMTFfbnVtX3BhcnRpdGlvbnMJQVJSQVlfU0laRSh3YmQxMTFfcGFydGl0aW9ucykKKyNlbHNlCisjZGVmaW5lIHdiZDExMV9wYXJ0aXRpb25zCU5VTEwKKyNkZWZpbmUgd2JkMTExX251bV9wYXJ0aXRpb25zCTAKKyNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KKworc3RhdGljIHZvaWQgX19pbml0IHdiZDExMV9pbml0KHZvaWQpCit7CisJZ2VtaW5pX2dwaW9faW5pdCgpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3VhcnQoKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2goU1pfOE0sIHdiZDExMV9wYXJ0aXRpb25zLAorCQkJCSB3YmQxMTFfbnVtX3BhcnRpdGlvbnMpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmd2JkMTExX2xlZHNfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndiZDExMV9rZXlzX2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoV0JEMTExLCAiV2lsaWJvYXJkIFdCRC0xMTEiKQorCS5waHlzX2lvCT0gMHg3ZmZmYzAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmZmZmMwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDEwMCwKKwkubWFwX2lvCQk9IGdlbWluaV9tYXBfaW8sCisJLmluaXRfaXJxCT0gZ2VtaW5pX2luaXRfaXJxLAorCS50aW1lcgkJPSAmd2JkMTExX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSB3YmQxMTFfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQyMjIuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXdiZDIyMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZThiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ib2FyZC13YmQyMjIuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqICBTdXBwb3J0IGZvciBXaWxpYm9hcmQgV0JELTIyMgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZGlvLWdwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gd2JkMjIyX2tleXNbXSA9IHsKKwl7CisJCS5jb2RlCQk9IEtFWV9TRVRVUCwKKwkJLmdwaW8JCT0gNSwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAicmVzZXQiLAorCQkudHlwZQkJPSBFVl9LRVksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgd2JkMjIyX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHdiZDIyMl9rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUod2JkMjIyX2tleXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2JkMjIyX2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmd2JkMjIyX2tleXNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCB3YmQyMjJfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJMM3JlZCIsCisJCS5ncGlvCQkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIkw0Z3JlZW4iLAorCQkuZ3BpbwkJCT0gMiwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJMNHJlZCIsCisJCS5ncGlvCQkJPSAzLAorCX0sCisJeworCQkubmFtZQkJCT0gIkwzZ3JlZW4iLAorCQkuZ3BpbwkJCT0gNSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHdiZDIyMl9sZWRzX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRSh3YmQyMjJfbGVkcyksCisJLmxlZHMJCT0gd2JkMjIyX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3YmQyMjJfbGVkc19kZXZpY2UgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ3YmQyMjJfbGVkc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN5c190aW1lciB3YmQyMjJfdGltZXIgPSB7CisJLmluaXQJPSBnZW1pbmlfdGltZXJfaW5pdCwKK307CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB3YmQyMjJfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlJlZEJvb3QiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDB4MDIwMDAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSAsIHsKKwkJLm5hbWUJCT0gImtlcm5lbCIsCisJCS5vZmZzZXQJCT0gMHgwMjAwMDAsCisJCS5zaXplCQk9IDB4MTAwMDAwLAorCX0gLCB7CisJCS5uYW1lCQk9ICJyb290ZnMiLAorCQkub2Zmc2V0CQk9IDB4MTIwMDAwLAorCQkuc2l6ZQkJPSAweDZhMDAwMCwKKwl9ICwgeworCQkubmFtZQkJPSAiVkNUTCIsCisJCS5vZmZzZXQJCT0gMHg3YzAwMDAsCisJCS5zaXplCQk9IDB4MDEwMDAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSAsIHsKKwkJLm5hbWUJCT0gImNmZyIsCisJCS5vZmZzZXQJCT0gMHg3ZDAwMDAsCisJCS5zaXplCQk9IDB4MDEwMDAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSAsIHsKKwkJLm5hbWUJCT0gIkZJUyIsCisJCS5vZmZzZXQJCT0gMHg3ZTAwMDAsCisJCS5zaXplCQk9IDB4MDEwMDAwLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfQorfTsKKyNkZWZpbmUgd2JkMjIyX251bV9wYXJ0aXRpb25zCUFSUkFZX1NJWkUod2JkMjIyX3BhcnRpdGlvbnMpCisjZWxzZQorI2RlZmluZSB3YmQyMjJfcGFydGl0aW9ucwlOVUxMCisjZGVmaW5lIHdiZDIyMl9udW1fcGFydGl0aW9ucwkwCisjZW5kaWYgLyogQ09ORklHX01URF9QQVJUSVRJT05TICovCisKK3N0YXRpYyB2b2lkIF9faW5pdCB3YmQyMjJfaW5pdCh2b2lkKQoreworCWdlbWluaV9ncGlvX2luaXQoKTsKKwlwbGF0Zm9ybV9yZWdpc3Rlcl91YXJ0KCk7CisJcGxhdGZvcm1fcmVnaXN0ZXJfcGZsYXNoKFNaXzhNLCB3YmQyMjJfcGFydGl0aW9ucywKKwkJd2JkMjIyX251bV9wYXJ0aXRpb25zKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndiZDIyMl9sZWRzX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3YmQyMjJfa2V5c19kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKFdCRDIyMiwgIldpbGlib2FyZCBXQkQtMjIyIikKKwkucGh5c19pbwk9IDB4N2ZmZmMwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZmZmZjMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgxMDAsCisJLm1hcF9pbwkJPSBnZW1pbmlfbWFwX2lvLAorCS5pbml0X2lycQk9IGdlbWluaV9pbml0X2lycSwKKwkudGltZXIJCT0gJndiZDIyMl90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gd2JkMjIyX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNmMxOTE1Ni4uYzU1YTUyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWg3MjB4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xODIsOCArMTgyLDYgQEAKICNkZWZpbmUgU0VSSUFMX0VOQUJMRV9FTgkoMTw8MCkKIAogLyogR2VuZXJhbCBkZWZpbmVzIHRvIHBhY2lmeSBnY2MgKi8KLSNkZWZpbmUgUENJT19CQVNFIAkJKDApCS8qIGZvciBpbmIsIG91dGIgYW5kIGZyaWVuZHMgKi8KLSNkZWZpbmUgUENJT19WSVJUCQlQQ0lPX0JBU0UKIAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0lOQ01BQ0hfSAogI2luY2x1ZGUgImJvYXJkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtcGNhMTAwLmMKaW5kZXggNmM5MmRlYS4uYTM4OWQxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1wY2ExMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9tYWNoLXBjYTEwMC5jCkBAIC00MDgsNyArNDA4LDcgQEAKIAlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyNyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjYTEwMF9zcGlfYm9hcmRfaW5mbywKIAkJCQlBUlJBWV9TSVpFKHBjYTEwMF9zcGlfYm9hcmRfaW5mbykpOwotCWlteDI3X2FkZF9zcGlfaW14MCgmcGNhMTAwX3NwaV8wX2RhdGEpOworCWlteDI3X2FkZF9zcGlfaW14MCgmcGNhMTAwX3NwaTBfZGF0YSk7CiAjZW5kaWYKIAogCWdwaW9fcmVxdWVzdChPVEdfUEhZX0NTX0dQSU8sICJ1c2Itb3RnLWNzIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggOGUyNjM2MC4uNTdmNTFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMzIsNyArMzIsNiBAQAogI2RlZmluZSBJT19TSVpFCQkJMHgwQjAwMDAwMCAgICAgICAgICAgICAgICAgLy8gSG93IG11Y2g/CiAjZGVmaW5lIElPX1NUQVJUCQlJTlRFR1JBVE9SX0hEUl9CQVNFICAgICAgICAvLyBQQSBvZiBJTwogCi0jZGVmaW5lIFBDSU9fQkFTRQkJUENJX0lPX1ZBRERSCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQlQQ0lfTUVNT1JZX1ZBRERSCiAKICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCBjMzE5MjAwLi41N2I1MDhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCiAvKiBQQ0kgSU8gaW5mbyAqLwotI2RlZmluZSBQQ0lPX0JBU0UJCUlYUDIzWFhfUENJX0lPX1ZJUlQKICNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MDAwMDAwMDAKICNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweGUwMDAwMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDllNTA3MGQuLjZmOTkxYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtMTQwLDYgKzE0MCwxNCBAQAogCSAgRlNHLTMgZGV2aWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHBsYXRmb3JtLAogCSAgc2VlIGh0dHA6Ly93d3cubnNsdTItbGludXgub3JnL3dpa2kvRlNHMy9Ib21lUGFnZQogCitjb25maWcgTUFDSF9BUkNPTV9WVUxDQU4KKwlib29sCisJcHJvbXB0ICJBcmNvbS9FdXJvdGVjaCBWdWxjYW4iCisJc2VsZWN0IFBDSQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IEFyY29tJ3MKKwkgIFZ1bGNhbiBib2FyZC4KKwogIwogIyBDZXJ0YWluIHJlZ2lzdGVycyBhbmQgSVJRcyBhcmUgb25seSBlbmFibGVkIGlmIHN1cHBvcnRpbmcgSVhQNDY1IENQVXMKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggNDdkMWY2MC4uZDgwN2ZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai1wY2ktJChDT05GSUdfTUFDSF9HQVRFV0FZNzAwMSkJKz0gZ2F0ZXdheTcwMDEtcGNpLm8KIG9iai1wY2ktJChDT05GSUdfTUFDSF9XRzMwMlYyKQkJKz0gd2czMDJ2Mi1wY2kubwogb2JqLXBjaS0kKENPTkZJR19NQUNIX0ZTRykJCSs9IGZzZy1wY2kubworb2JqLXBjaS0kKENPTkZJR19NQUNIX0FSQ09NX1ZVTENBTikJKz0gdnVsY2FuLXBjaS5vCiAKIG9iai15CSs9IGNvbW1vbi5vCiAKQEAgLTMxLDYgKzMyLDcgQEAKIG9iai0kKENPTkZJR19NQUNIX1dHMzAyVjIpCSs9IHdnMzAydjItc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfRlNHKQkJKz0gZnNnLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX0dPUkFNT19NTFIpCSs9IGdvcmFtb19tbHIubworb2JqLSQoQ09ORklHX01BQ0hfQVJDT01fVlVMQ0FOKQkrPSB2dWxjYW4tc2V0dXAubwogCiBvYmotJChDT05GSUdfUENJKQkJKz0gJChvYmotcGNpLSQoQ09ORklHX1BDSSkpIGNvbW1vbi1wY2kubwogb2JqLSQoQ09ORklHX0lYUDRYWF9RTUdSKQkrPSBpeHA0eHhfcW1nci5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDg5Mzg3M2UuLjNmYzY2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xNiw4ICsxNiwxMCBAQAogICAgICAgICAgICAgICAgIG1vdmVxICAgXHJ4LCAjMHhjODAwMDAwMAogICAgICAgICAgICAgICAgIG1vdm5lICAgXHJ4LCAjMHhmZjAwMDAwMAogCQlvcnJuZQlccngsIFxyeCwgIzB4MDBiMDAwMDAKKyNpZmRlZiBfX0FSTUVCX18KICAgICAgICAgICAgICAgICBhZGQgICAgIFxyeCxccngsIzMgICAgICAgICAgICAgIEAgVWFydCByZWdzIGFyZSBhdCBvZmYgc2V0IG9mIDMgaWYKIAkJCQkJCUAgYnl0ZSB3cml0ZXMgdXNlZCAtIEJpZyBFbmRpYW4uCisjZW5kaWYKICAgICAgICAgICAgICAgICAuZW5kbQogCiAjZGVmaW5lIFVBUlRfU0hJRlQJMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAppbmRleCA2ZWE3ZTJmLi5kZTI3NGExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMzUzLDcgKzM1Myw3IEBACiAJCXJldHVybiAodW5zaWduZWQgaW50KWluYihwb3J0ICYgUElPX01BU0spOwogCWVsc2UKICNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKLQkJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIocG9ydCk7CisJCXJldHVybiAodW5zaWduZWQgaW50KV9fcmF3X3JlYWRiKGFkZHIpOwogI2Vsc2UKIAkJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19pbmRpcmVjdF9yZWFkYihhZGRyKTsKICNlbmRpZgpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCXJldHVybgkodW5zaWduZWQgaW50KWludyhwb3J0ICYgUElPX01BU0spOwogCWVsc2UKICNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKLQkJcmV0dXJuIGxlMTZfdG9fY3B1KF9fcmF3X3JlYWR3KCh1MzIpcG9ydCkpOworCQlyZXR1cm4gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KV9fcmF3X3JlYWR3KGFkZHIpKTsKICNlbHNlCiAJCXJldHVybiAodW5zaWduZWQgaW50KV9faW5kaXJlY3RfcmVhZHcoYWRkcik7CiAjZW5kaWYKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCQlvdXRiKHZhbHVlLCBwb3J0ICYgUElPX01BU0spOwogCWVsc2UKICNpZm5kZWYgQ09ORklHX0lYUDRYWF9JTkRJUkVDVF9QQ0kKLQkJX19yYXdfd3JpdGViKHZhbHVlLCBwb3J0KTsKKwkJX19yYXdfd3JpdGViKHZhbHVlLCBhZGRyKTsKICNlbHNlCiAJCV9faW5kaXJlY3Rfd3JpdGViKHZhbHVlLCBhZGRyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvdnVsY2FuLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvdnVsY2FuLXBjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTExYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC92dWxjYW4tcGNpLmMKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGFyY2gvYXJjaC9tYWNoLWl4cDR4eC92dWxjYW4tcGNpLmMKKyAqCisgKiBWdWxjYW4gYm9hcmQtbGV2ZWwgUENJIGluaXRpYWxpemF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcmMgWnluZ2llciA8bWF6QG1pc3RlcmpvbmVzLm9yZz4KKyAqCisgKiBiYXNlZCBvbiBpeGRwNDI1LXBjaS5jOgorICoJQ29weXJpZ2h0IChDKSAyMDAyIEludGVsIENvcnBvcmF0aW9uLgorICoJQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIElOVEEJMgorI2RlZmluZSBJTlRCCTMKKwordm9pZCBfX2luaXQgdnVsY2FuX3BjaV9wcmVpbml0KHZvaWQpCit7CisjaWZuZGVmIENPTkZJR19JWFA0WFhfSU5ESVJFQ1RfUENJCisJLyoKKwkgKiBDYXJkYnVzIGJyaWRnZSB3YW50cyB3YXkgbW9yZSB0aGFuIHRoZSBTb0MgY2FuIGFjdHVhbGx5IG9mZmVyLAorCSAqIGFuZCBsZWF2ZXMgdGhlIHdob2xlIFBDSSBidXMgaW4gYSBtZXNzLiBBcnRpZmljaWFsbHkgbGltaXQgaXQKKwkgKiB0byA4TUIgcGVyIHJlZ2lvbi4gT2YgY291cnNlIGluZGlyZWN0IG1vZGUgZG9lc24ndCBoYXZlIHRoaXMKKwkgKiBsaW1pdGF0aW9uLi4uCisJICovCisJcGNpX2NhcmRidXNfbWVtX3NpemUgPSBTWl84TTsKKwlwcl9pbmZvKCJWdWxjYW4gUENJOiBsaW1pdGluZyBDYXJkQnVzIG1lbW9yeSBzaXplIHRvICVkTUJcbiIsCisJCShpbnQpKHBjaV9jYXJkYnVzX21lbV9zaXplID4+IDIwKSk7CisjZW5kaWYKKwlzZXRfaXJxX3R5cGUoSVhQNFhYX0dQSU9fSVJRKElOVEEpLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCXNldF9pcnFfdHlwZShJWFA0WFhfR1BJT19JUlEoSU5UQiksIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJaXhwNHh4X3BjaV9wcmVpbml0KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHZ1bGNhbl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAoc2xvdCA9PSAxKQorCQlyZXR1cm4gSVhQNFhYX0dQSU9fSVJRKElOVEEpOworCisJaWYgKHNsb3QgPT0gMikKKwkJcmV0dXJuIElYUDRYWF9HUElPX0lSUShJTlRCKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IGh3X3BjaSB2dWxjYW5fcGNpIF9faW5pdGRhdGEgPSB7CisJLm5yX2NvbnRyb2xsZXJzCT0gMSwKKwkucHJlaW5pdAk9IHZ1bGNhbl9wY2lfcHJlaW5pdCwKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkuc2V0dXAJCT0gaXhwNHh4X3NldHVwLAorCS5zY2FuCQk9IGl4cDR4eF9zY2FuX2J1cywKKwkubWFwX2lycQk9IHZ1bGNhbl9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCB2dWxjYW5fcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19hcmNvbV92dWxjYW4oKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZ2dWxjYW5fcGNpKTsKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKHZ1bGNhbl9wY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC92dWxjYW4tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L3Z1bGNhbi1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NWNjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC92dWxjYW4tc2V0dXAuYwpAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L3Z1bGNhbi1zZXR1cC5jCisgKgorICogQXJjb20vRXVyb3RlY2ggVnVsY2FuIGJvYXJkLXNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hcmMgWnluZ2llciA8bWF6QG1pc3RlcmpvbmVzLm9yZz4KKyAqCisgKiBiYXNlZCBvbiBmc2ctc2V0dXAuYzoKKyAqCUNvcHlyaWdodCAoQykgMjAwOCBSb2QgV2hpdGJ5IDxyb2RAd2hpdGJ5LmlkLmF1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93MS1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHZ1bGNhbl9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2dWxjYW5fZmxhc2hfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ1bGNhbl9mbGFzaCA9IHsKKwkubmFtZQkJCT0gIklYUDRYWC1GbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZ1bGNhbl9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlCQk9ICZ2dWxjYW5fZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSB2dWxjYW5fc3JhbV9kYXRhID0geworCS5tYXBuYW1lCT0gIlZ1bGNhbiBTUkFNIiwKKwkuYmFua3dpZHRoCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdnVsY2FuX3NyYW1fcmVzb3VyY2UgPSB7CisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ1bGNhbl9zcmFtID0geworCS5uYW1lCQkJPSAibXRkLXJhbSIsCisJLmlkCQkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZ1bGNhbl9zcmFtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJCT0gJnZ1bGNhbl9zcmFtX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZ1bGNhbl91YXJ0X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5lbmQJCT0gSVhQNFhYX1VBUlQxX0JBU0VfUEhZUyArIDB4MGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUywKKwkJLmVuZAkJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTICsgMHgwZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMl0gPSB7CisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB2dWxjYW5fdWFydF9kYXRhW10gPSB7CisJWzBdID0geworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwlbMV0gPSB7CisJCS5tYXBiYXNlCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUywKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlYUDRYWF9VQVJUMl9CQVNFX1ZJUlQgKyBSRUdfT0ZGU0VULAorCQkuaXJxCQk9IElSUV9JWFA0WFhfVUFSVDIsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKKwl9LAorCVsyXSA9IHsKKwkJLmlycQkJPSBJWFA0WFhfR1BJT19JUlEoNCksCisJCS5pcnFmbGFncwk9IElSUUZfVFJJR0dFUl9MT1csCisJCS5mbGFncwkJPSBVUEZfSU9SRU1BUCB8IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnVhcnRjbGsJPSAxODQzMjAwLAorCX0sCisJWzNdID0geworCQkuaXJxCQk9IElYUDRYWF9HUElPX0lSUSg0KSwKKwkJLmlycWZsYWdzCT0gSVJRRl9UUklHR0VSX0xPVywKKwkJLmZsYWdzCQk9IFVQRl9JT1JFTUFQIHwgVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ1bGNhbl91YXJ0ID0geworCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSB2dWxjYW5fdWFydF9kYXRhLAorCX0sCisJLnJlc291cmNlCQk9IHZ1bGNhbl91YXJ0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKHZ1bGNhbl91YXJ0X3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IGV0aF9wbGF0X2luZm8gdnVsY2FuX3BsYXRfZXRoW10gPSB7CisJWzBdID0geworCQkucGh5CQk9IDAsCisJCS5yeHEJCT0gMywKKwkJLnR4cmVhZHlxCT0gMjAsCisJfSwKKwlbMV0gPSB7CisJCS5waHkJCT0gMSwKKwkJLnJ4cQkJPSA0LAorCQkudHhyZWFkeXEJPSAyMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnVsY2FuX2V0aFtdID0geworCVswXSA9IHsKKwkJLm5hbWUJCQk9ICJpeHA0eHhfZXRoIiwKKwkJLmlkCQkJPSBJWFA0WFhfRVRIX05QRUIsCisJCS5kZXYgPSB7CisJCQkucGxhdGZvcm1fZGF0YQk9ICZ2dWxjYW5fcGxhdF9ldGhbMF0sCisJCX0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQkJPSAiaXhwNHh4X2V0aCIsCisJCS5pZAkJCT0gSVhQNFhYX0VUSF9OUEVDLAorCQkuZGV2ID0geworCQkJLnBsYXRmb3JtX2RhdGEJPSAmdnVsY2FuX3BsYXRfZXRoWzFdLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHZ1bGNhbl9tYXg2MzY5X3Jlc291cmNlID0geworCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dWxjYW5fbWF4NjM2OSA9IHsKKwkubmFtZQkJCT0gIm1heDYzNjlfd2R0IiwKKwkuaWQJCQk9IC0xLAorCS5yZXNvdXJjZQkJPSAmdnVsY2FuX21heDYzNjlfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhIHZ1bGNhbl93MV9ncGlvX3BkYXRhID0geworCS5waW4JCQk9IDE0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnVsY2FuX3cxX2dwaW8gPSB7CisJLm5hbWUJCQk9ICJ3MS1ncGlvIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZ2dWxjYW5fdzFfZ3Bpb19wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnZ1bGNhbl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmdnVsY2FuX3VhcnQsCisJJnZ1bGNhbl9mbGFzaCwKKwkmdnVsY2FuX3NyYW0sCisJJnZ1bGNhbl9tYXg2MzY5LAorCSZ2dWxjYW5fZXRoWzBdLAorCSZ2dWxjYW5fZXRoWzFdLAorCSZ2dWxjYW5fdzFfZ3BpbywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2dWxjYW5faW5pdCh2b2lkKQoreworCWl4cDR4eF9zeXNfaW5pdCgpOworCisJLyogRmxhc2ggaXMgc3ByZWFkIG92ZXIgYm90aCBDUzAgYW5kIENTMSAqLworCXZ1bGNhbl9mbGFzaF9yZXNvdXJjZS5zdGFydAkgPSBJWFA0WFhfRVhQX0JVU19CQVNFKDApOworCXZ1bGNhbl9mbGFzaF9yZXNvdXJjZS5lbmQJID0gSVhQNFhYX0VYUF9CVVNfQkFTRSgwKSArIFNaXzMyTSAtIDE7CisJKklYUDRYWF9FWFBfQ1MwID0gSVhQNFhYX0VYUF9CVVNfQ1NfRU4JCXwKKwkJCSAgSVhQNFhYX0VYUF9CVVNfU1RST0JFX1QoMykJfAorCQkJICBJWFA0WFhfRVhQX0JVU19TSVpFKDB4RikJfAorCQkJICBJWFA0WFhfRVhQX0JVU19CWVRFX1JEMTYJfAorCQkJICBJWFA0WFhfRVhQX0JVU19XUl9FTjsKKwkqSVhQNFhYX0VYUF9DUzEgPSAqSVhQNFhYX0VYUF9DUzA7CisKKwkvKiBTUkFNIG9uIENTMiwgKDI1NmtCLCA4Yml0LCB3cml0YWJsZSkgKi8KKwl2dWxjYW5fc3JhbV9yZXNvdXJjZS5zdGFydAk9IElYUDRYWF9FWFBfQlVTX0JBU0UoMik7CisJdnVsY2FuX3NyYW1fcmVzb3VyY2UuZW5kCT0gSVhQNFhYX0VYUF9CVVNfQkFTRSgyKSArIFNaXzI1NksgLSAxOworCSpJWFA0WFhfRVhQX0NTMiA9IElYUDRYWF9FWFBfQlVTX0NTX0VOCQl8CisJCQkgIElYUDRYWF9FWFBfQlVTX1NUUk9CRV9UKDEpCXwKKwkJCSAgSVhQNFhYX0VYUF9CVVNfSE9MRF9UKDIpCXwKKwkJCSAgSVhQNFhYX0VYUF9CVVNfU0laRSg5KQl8CisJCQkgIElYUDRYWF9FWFBfQlVTX1NQTFRfRU4JfAorCQkJICBJWFA0WFhfRVhQX0JVU19XUl9FTgkJfAorCQkJICBJWFA0WFhfRVhQX0JVU19CWVRFX0VOOworCisJLyogWFIxNkwyNTUxIG9uIENTMyAoTW90byBzdHlsZSwgNTEyIGJ5dGVzLCA4Yml0cywgd3JpdGFibGUpICovCisJdnVsY2FuX3VhcnRfcmVzb3VyY2VzWzJdLnN0YXJ0CT0gSVhQNFhYX0VYUF9CVVNfQkFTRSgzKTsKKwl2dWxjYW5fdWFydF9yZXNvdXJjZXNbMl0uZW5kCT0gSVhQNFhYX0VYUF9CVVNfQkFTRSgzKSArIDE2IC0gMTsKKwl2dWxjYW5fdWFydF9kYXRhWzJdLm1hcGJhc2UJPSB2dWxjYW5fdWFydF9yZXNvdXJjZXNbMl0uc3RhcnQ7CisJdnVsY2FuX3VhcnRfZGF0YVszXS5tYXBiYXNlCT0gdnVsY2FuX3VhcnRfZGF0YVsyXS5tYXBiYXNlICsgODsKKwkqSVhQNFhYX0VYUF9DUzMgPSBJWFA0WFhfRVhQX0JVU19DU19FTgkJfAorCQkJICBJWFA0WFhfRVhQX0JVU19TVFJPQkVfVCgzKQl8CisJCQkgIElYUDRYWF9FWFBfQlVTX0NZQ0xFUyhJWFA0WFhfRVhQX0JVU19DWUNMRVNfTU9UT1JPTEEpfAorCQkJICBJWFA0WFhfRVhQX0JVU19XUl9FTgkJfAorCQkJICBJWFA0WFhfRVhQX0JVU19CWVRFX0VOOworCisJLyogR1BJT1Mgb24gQ1M0ICg1MTIgYnl0ZXMsIDhiaXRzLCB3cml0YWJsZSkgKi8KKwkqSVhQNFhYX0VYUF9DUzQgPSBJWFA0WFhfRVhQX0JVU19DU19FTgkJfAorCQkJICBJWFA0WFhfRVhQX0JVU19XUl9FTgkJfAorCQkJICBJWFA0WFhfRVhQX0JVU19CWVRFX0VOOworCisJLyogbWF4NjM2OSBvbiBDUzUgKDUxMiBieXRlcywgOGJpdHMsIHdyaXRhYmxlKSAqLworCXZ1bGNhbl9tYXg2MzY5X3Jlc291cmNlLnN0YXJ0CT0gSVhQNFhYX0VYUF9CVVNfQkFTRSg1KTsKKwl2dWxjYW5fbWF4NjM2OV9yZXNvdXJjZS5lbmQJPSBJWFA0WFhfRVhQX0JVU19CQVNFKDUpOworCSpJWFA0WFhfRVhQX0NTNSA9IElYUDRYWF9FWFBfQlVTX0NTX0VOCQl8CisJCQkgIElYUDRYWF9FWFBfQlVTX1dSX0VOCQl8CisJCQkgIElYUDRYWF9FWFBfQlVTX0JZVEVfRU47CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyh2dWxjYW5fZGV2aWNlcywgQVJSQVlfU0laRSh2dWxjYW5fZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEFSQ09NX1ZVTENBTiwgIkFyY29tL0V1cm90ZWNoIFZ1bGNhbiIpCisJLyogTWFpbnRhaW5lcjogTWFyYyBaeW5naWVyIDxtYXpAbWlzdGVyam9uZXMub3JnPiAqLworCS5waHlzX2lvCT0gSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9QSFlTLAorCS5pb19wZ19vZmZzdAk9ICgoSVhQNFhYX1BFUklQSEVSQUxfQkFTRV9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJml4cDR4eF90aW1lciwKKwkuYm9vdF9wYXJhbXMJPSAweDAxMDAsCisJLmluaXRfbWFjaGluZQk9IHZ1bGNhbl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDlkZDY3YzcuLjFjODJkNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CiAjaW5jbHVkZSA8bWFjaC9icmlkZ2UtcmVncy5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KICNpbmNsdWRlIDxwbGF0L2NhY2hlLWZlcm9jZW9uLWwyLmg+CiAjaW5jbHVkZSA8cGxhdC9laGNpLW9yaW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KQEAgLTg3MSw2ICs4NzIsNDIgQEAKIAkuaW5pdCA9IGtpcmt3b29kX3RpbWVyX2luaXQsCiB9OwogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEF1ZGlvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga2lya3dvb2RfaTJzX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IEFVRElPX1BIWVNfQkFTRSwKKwkJLmVuZCAgICA9IEFVRElPX1BIWVNfQkFTRSArIFNaXzE2SyAtIDEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IElSUV9LSVJLV09PRF9JMlMsCisJCS5lbmQgICAgPSBJUlFfS0lSS1dPT0RfSTJTLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga2lya3dvb2RfYXNvY19wbGF0Zm9ybV9kYXRhIGtpcmt3b29kX2kyc19kYXRhID0geworCS5kcmFtICAgICAgICA9ICZraXJrd29vZF9tYnVzX2RyYW1faW5mbywKKwkuYnVyc3QgICAgICAgPSAxMjgsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBraXJrd29vZF9pMnNfZGV2aWNlID0geworCS5uYW1lCQk9ICJraXJrd29vZC1pMnMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoa2lya3dvb2RfaTJzX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0ga2lya3dvb2RfaTJzX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAma2lya3dvb2RfaTJzX2RhdGEsCisJfSwKK307CisKK3ZvaWQgX19pbml0IGtpcmt3b29kX2F1ZGlvX2luaXQodm9pZCkKK3sKKwlraXJrd29vZF9jbGtfY3RybCB8PSBDR0NfQVVESU87CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9pMnNfZGV2aWNlKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsCkBAIC05MzksNiArOTc2LDcgQEAKIAlraXJrd29vZF9zcGlfcGxhdF9kYXRhLnRjbGsgPSBraXJrd29vZF90Y2xrOwogCWtpcmt3b29kX3VhcnQwX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAJa2lya3dvb2RfdWFydDFfZGF0YVswXS51YXJ0Y2xrID0ga2lya3dvb2RfdGNsazsKKwlraXJrd29vZF9pMnNfZGF0YS50Y2xrID0ga2lya3dvb2RfdGNsazsKIAogCS8qCiAJICogRGlzYWJsZSBwcm9wYWdhdGlvbiBvZiBtYnVzIGVycm9ycyB0byB0aGUgQ1BVIGxvY2FsIGJ1cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCmluZGV4IDViMmMxYzEuLjk1YmIwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaApAQCAtMTcsNiArMTcsNyBAQAogc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG10ZF9wYXJ0aXRpb247CiBzdHJ1Y3QgbXRkX2luZm87CitzdHJ1Y3Qga2lya3dvb2RfYXNvY19wbGF0Zm9ybV9kYXRhOwogCiAjZGVmaW5lIEtXX1BDSUUwCSgxIDw8IDApCiAjZGVmaW5lIEtXX1BDSUUxCSgxIDw8IDEpCkBAIC00Niw2ICs0Nyw3IEBACiB2b2lkIGtpcmt3b29kX3VhcnQxX2luaXQodm9pZCk7CiB2b2lkIGtpcmt3b29kX25hbmRfaW5pdChzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBucl9wYXJ0cywgaW50IGRlbGF5KTsKIHZvaWQga2lya3dvb2RfbmFuZF9pbml0X3JuYihzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBucl9wYXJ0cywgaW50ICgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKikpOwordm9pZCBraXJrd29vZF9hdWRpb19pbml0KHZvaWQpOwogCiBleHRlcm4gaW50IGtpcmt3b29kX3RjbGs7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBraXJrd29vZF90aW1lcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCmluZGV4IGQxNDFhZjQuLjkzZmMyZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaApAQCAtMTExLDYgKzExMSw5IEBACiAKICNkZWZpbmUgU0RJT19QSFlTX0JBU0UJCShLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSB8IDB4OTAwMDApCiAKKyNkZWZpbmUgQVVESU9fUEhZU19CQVNFCQkoS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UgfCAweEEwMDAwKQorI2RlZmluZSBBVURJT19WSVJUX0JBU0UJCShLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSB8IDB4QTAwMDApCisKIC8qCiAgKiBTdXBwb3J0ZWQgZGV2aWNlcyBhbmQgcmV2aXNpb25zLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmQtc2V0dXAuYwppbmRleCBmZDY0Y2QyLi5mZDA2YmU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgpAQCAtNjAsNiArNjEsMTIgQEAKIAkwCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJjczQybDUxIiwgMHg0YSksCisJfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvcGVucmRfaW5pdCh2b2lkKQogewogCS8qCkBAIC04Niw2ICs5MywxMiBAQAogCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX212c2Rpb19kYXRhKTsKIAogCWtpcmt3b29kX2kyY19pbml0KCk7CisKKwlpZiAobWFjaGluZV9pc19vcGVucmRfY2xpZW50KCkpIHsKKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKGkyY19ib2FyZF9pbmZvKSk7CisJCWtpcmt3b29kX2F1ZGlvX2luaXQoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9wZW5yZF9wY2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKaW5kZXggMjQ0NjU1ZC4uMDYyOTM5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvYXNwZW5pdGUuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9hc3Blbml0ZS5jCkBAIC0xNTAsOSArMTUwLDggQEAKIAogTUFDSElORV9TVEFSVChBU1BFTklURSwgIlBYQTE2OC1iYXNlZCBBc3Blbml0ZSBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCiAJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKLQkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAogCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBtbXBfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTE2OF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhMTY4X3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IGNvbW1vbl9pbml0LApAQCAtMTYwLDkgKzE1OSw4IEBACiAKIE1BQ0hJTkVfU1RBUlQoWllMT05JVEUyLCAiUFhBMTY4LWJhc2VkIFp5bG9uaXRlMiBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCiAJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKLQkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAogCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBtbXBfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTE2OF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhMTY4X3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IGNvbW1vbl9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jCmluZGV4IDhjM2ZhNWQxLi42OWJjYmExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9hdmVuZ2Vyc19saXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jCkBAIC00Miw5ICs0Miw4IEBACiAKIE1BQ0hJTkVfU1RBUlQoQVZFTkdFUlNfTElURSwgIlBYQTE2OCBBdmVuZ2VycyBsaXRlIERldmVsb3BtZW50IFBsYXRmb3JtIikKIAkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAotCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IG1tcF9tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gcHhhMTY4X2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGExNjhfdGltZXIsCiAJLmluaXRfbWFjaGluZSAgID0gYXZlbmdlcnNfbGl0ZV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uYwppbmRleCBlMWU2NmMxLi4zYjI5ZmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uYwpAQCAtMzEsNyArMzEsNyBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpCit2b2lkIF9faW5pdCBtbXBfbWFwX2lvKHZvaWQpCiB7CiAJaW90YWJsZV9pbml0KHN0YW5kYXJkX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc3RhbmRhcmRfaW9fZGVzYykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaAppbmRleCBiNGEwYmEwLi5lYzhkNjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaApAQCAtMywxNSArMyw2IEBACiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCiBleHRlcm4gdm9pZCB0aW1lcl9pbml0KGludCBpcnEpOwotZXh0ZXJuIHZvaWQgbW1wMl9jbGVhcl9wbWljX2ludCh2b2lkKTsKLQotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhMTY4X3RpbWVyOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhOTEwX3RpbWVyOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbW1wMl90aW1lcjsKLWV4dGVybiB2b2lkIF9faW5pdCBweGExNjhfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgcHhhOTEwX2luaXRfaXJxKHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IG1tcDJfaW5pdF9pY3Uodm9pZCk7Ci1leHRlcm4gdm9pZCBfX2luaXQgbW1wMl9pbml0X2lycSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IG1tcF9tYXBfaW8odm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9mbGludC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvZmxpbnQuYwppbmRleCA0ZWM3NzA5Li5lNDMxMmQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9mbGludC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2ZsaW50LmMKQEAgLTExNCw5ICsxMTQsOCBAQAogCiBNQUNISU5FX1NUQVJUKEZMSU5ULCAiRmxpbnQgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQogCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCi0JLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKIAkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5tYXBfaW8JCT0gbW1wX21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBtbXAyX2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZtbXAyX3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IGZsaW50X2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaAppbmRleCAxZmEwYTQ5Li5kMGVjN2RhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKQEAgLTEsMyArMSw2IEBACisjaWZuZGVmIF9fTUFDSF9ERVZJQ0VfSAorI2RlZmluZSBfX01BQ0hfREVWSUNFX0gKKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgTUFYX1JFU09VUkNFX0RNQQkyCkBAIC00NywzICs1MCw0IEBACiB9CiAKIGV4dGVybiBpbnQgcHhhX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICosIHZvaWQgKiwgc2l6ZV90KTsKKyNlbmRpZiAvKiBfX01BQ0hfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbW1wMi5oCmluZGV4IGZlYzIyMGIuLmRiYmE2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21tcDIuaApAQCAtMSw2ICsxLDEzIEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfTU1QMl9ICiAjZGVmaW5lIF9fQVNNX01BQ0hfTU1QMl9ICiAKK3N0cnVjdCBzeXNfdGltZXI7CisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG1tcDJfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQgbW1wMl9pbml0X2ljdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBtbXAyX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbW1wMl9jbGVhcl9wbWljX2ludCh2b2lkKTsKKwogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmgKaW5kZXggM2IyYmQ1ZC4uMjdlMWJjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTE2OC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGExNjguaApAQCAtMSw2ICsxLDExIEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfUFhBMTY4X0gKICNkZWZpbmUgX19BU01fTUFDSF9QWEExNjhfSAogCitzdHJ1Y3Qgc3lzX3RpbWVyOworCitleHRlcm4gc3RydWN0IHN5c190aW1lciBweGExNjhfdGltZXI7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhMTY4X2luaXRfaXJxKHZvaWQpOworCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8cGxhdC9pMmMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9weGE5MTAuaAppbmRleCA0ZjBiNGVjLi5mMTNjNDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTkxMC5oCkBAIC0xLDYgKzEsMTEgQEAKICNpZm5kZWYgX19BU01fTUFDSF9QWEE5MTBfSAogI2RlZmluZSBfX0FTTV9NQUNIX1BYQTkxMF9ICiAKK3N0cnVjdCBzeXNfdGltZXI7CisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHB4YTkxMF90aW1lcjsKK2V4dGVybiB2b2lkIF9faW5pdCBweGE5MTBfaW5pdF9pcnEodm9pZCk7CisKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLW1tcDIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS1tbXAyLmMKaW5kZXggY2IxODIyMS4uMDEzNDJiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLW1tcDIuYworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pcnEtbW1wMi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1pY3UuaD4KKyNpbmNsdWRlIDxtYWNoL21tcDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9qYXNwZXIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCmluZGV4IGQ3N2RkNDEuLjgwYzNlN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCkBAIC0xMzUsOSArMTM1LDggQEAKIAogTUFDSElORV9TVEFSVChNQVJWRUxMX0pBU1BFUiwgIkphc3BlciBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCiAJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKLQkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAogCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBtbXBfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IG1tcDJfaW5pdF9pcnEsCiAJLnRpbWVyICAgICAgICAgID0gJm1tcDJfdGltZXIsCiAJLmluaXRfbWFjaGluZSAgID0gamFzcGVyX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9tbXAyLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9tbXAyLmMKaW5kZXggN2Y1ZWIwNS4uZGFmMzk5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvbW1wMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL21tcDIuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLXRhdXJvczIuaD4KIAorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBtdS5oPgpAQCAtMjYsNiArMjcsNyBAQAogI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bWFjaC9tbXAyLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJjbG9jay5oIgpAQCAtMTU4LDYgKzE2MCwyNiBAQAogfQogcG9zdGNvcmVfaW5pdGNhbGwobW1wMl9pbml0KTsKIAorc3RhdGljIHZvaWQgX19pbml0IG1tcDJfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2xrX3JzdDsKKworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfUlNULCBBUEJDX01NUDJfVElNRVJTKTsKKworCS8qCisJICogZW5hYmxlIGJ1cy9mdW5jdGlvbmFsIGNsb2NrLCBlbmFibGUgNi41TUh6IChkaXZpZGVyIDQpLAorCSAqIHJlbGVhc2UgcmVzZXQKKwkgKi8KKwljbGtfcnN0ID0gQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLIHwgQVBCQ19GTkNMS1NFTCgxKTsKKwlfX3Jhd193cml0ZWwoY2xrX3JzdCwgQVBCQ19NTVAyX1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9NTVAyX1RJTUVSMSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbW1wMl90aW1lciA9IHsKKwkuaW5pdAk9IG1tcDJfdGltZXJfaW5pdCwKK307CisKIC8qIG9uLWNoaXAgZGV2aWNlcyAqLwogTU1QMl9ERVZJQ0UodWFydDEsICJweGEyeHgtdWFydCIsIDAsIFVBUlQxLCAweGQ0MDMwMDAwLCAweDMwLCA0LCA1KTsKIE1NUDJfREVWSUNFKHVhcnQyLCAicHhhMnh4LXVhcnQiLCAxLCBVQVJUMiwgMHhkNDAxNzAwMCwgMHgzMCwgMjAsIDIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90YXZvcmV2Yi5jCmluZGV4IDBlMGM5MjIuLmU4MWRiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGF2b3JldmIuYwpAQCAtMTAwLDkgKzEwMCw4IEBACiAKIE1BQ0hJTkVfU1RBUlQoVEFWT1JFVkIsICJQWEE5MTAgRXZhbHVhdGlvbiBCb2FyZCAoYWthIFRhdm9yRVZCKSIpCiAJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKLQkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAogCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLm1hcF9pbwkJPSBtbXBfbWFwX2lvLAogCS5pbml0X2lycSAgICAgICA9IHB4YTkxMF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhOTEwX3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IHRhdm9yZXZiX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKaW5kZXggY2Y3NTY5NC4uNjY1MjgxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYwpAQCAtMjAwLDI0ICsyMDAsMyBAQAogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZja3NyYyk7CiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZja2V2dCk7CiB9Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBtbXAyX3RpbWVyX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa19yc3Q7Ci0KLQlfX3Jhd193cml0ZWwoQVBCQ19BUEJDTEsgfCBBUEJDX1JTVCwgQVBCQ19NTVAyX1RJTUVSUyk7Ci0KLQkvKgotCSAqIGVuYWJsZSBidXMvZnVuY3Rpb25hbCBjbG9jaywgZW5hYmxlIDYuNU1IeiAoZGl2aWRlciA0KSwKLQkgKiByZWxlYXNlIHJlc2V0Ci0JICovCi0JY2xrX3JzdCA9IEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSyB8IEFQQkNfRk5DTEtTRUwoMSk7Ci0JX19yYXdfd3JpdGVsKGNsa19yc3QsIEFQQkNfTU1QMl9USU1FUlMpOwotCi0JdGltZXJfaW5pdChJUlFfTU1QMl9USU1FUjEpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG1tcDJfdGltZXIgPSB7Ci0JLmluaXQJPSBtbXAyX3RpbWVyX2luaXQsCi19OwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMKaW5kZXggYjIyZGVjNC4uZWU2NWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdHRjX2RrYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpAQCAtMTIzLDkgKzEyMyw4IEBACiAKIE1BQ0hJTkVfU1RBUlQoVFRDX0RLQiwgIlBYQTkxMC1iYXNlZCBUVENfREtCIERldmVsb3BtZW50IFBsYXRmb3JtIikKIAkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAotCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCiAJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkubWFwX2lvCQk9IG1tcF9tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gcHhhOTEwX2luaXRfaXJxLAogCS50aW1lciAgICAgICAgICA9ICZweGE5MTBfdGltZXIsCiAJLmluaXRfbWFjaGluZSAgID0gdHRjX2RrYl9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMKaW5kZXggOTZhYWRjYS4uNjg4NzljOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1hcm1hZGlsbG81eDAuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCkBAIC01NTEsOSArNTUxLDkgQEAKIAkvKiBVU0IgKi8KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAl1c2JvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZ1c2JvdGdfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCmluZGV4IDhmNjZmNjUuLjdjMzdkYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGlsbHkuYwpAQCAtMjQ1LDkgKzI0NSw5IEBACiBzdGF0aWMgdm9pZCBsaWxseTExMzFfdXNiX2luaXQodm9pZCkKIHsKIAl1c2JvdGdfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJCVVTQl9PVEdfRFJWX1ZCVVMgfCBVU0JfT1RHX0RSVl9WQlVTX0VYVCk7CisJCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgxLCAmdXNiaDFfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpdGUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpdGUuYwppbmRleCBkYTIzNmM0Li5mNjZhOTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jCkBAIC0yNTYsNyArMjU2LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKIAkvKiBVU0IgKi8KIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKaW5kZXggNjc3NzZiYy4uN2EwNzVlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbW9ib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYwpAQCAtNDEyLDcgKzQxMiw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBtb2JvYXJkX3VzYmgyX2luaXQodm9pZCkKIHsKIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAogCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzcuYwppbmRleCA4YTI5MmRkLi4yMTRkZTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMKQEAgLTY1NCwxMyArNjU0LDEzIEBACiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCiAJaWYgKG90Z19tb2RlX2hvc3QpIHsKIAkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKLQkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCQkJCVVMUElfT1RHX0RSVlZCVVMgfCBVTFBJX09UR19EUlZWQlVTX0VYVCk7CiAKIAkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z19ob3N0LCAmb3RnX3BkYXRhKTsKIAl9CiAKIAl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wNDMuYwppbmRleCA0N2Y1MzExLi4yODg4NmYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQogCWlmIChvdGdfbW9kZV9ob3N0KSB7CiAJCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKwkJCQlVTFBJX09UR19EUlZWQlVTIHwgVUxQSV9PVEdfRFJWVkJVU19FWFQpOwogCiAJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfaG9zdCwgJm90Z19wZGF0YSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLXNtYXJ0Ym90LmMKaW5kZXggNDBjM2U3NS4uNDE3NzU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1zbWFydGJvdC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNtYXJ0Ym90X290Z19ob3N0X2luaXQodm9pZCkKIHsKIAlvdGdfaG9zdF9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCQkJVUxQSV9PVEdfRFJWVkJVUyB8IFVMUElfT1RHX0RSVlZCVVNfRVhUKTsKIAogCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfaG9zdF9wZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggYjE4ZDdjMi4uM2IwMmQzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtMSwzICsxLDcgQEAKK2lmIEFSQ0hfT01BUDEKKworbWVudSAiVEkgT01BUDEgc3BlY2lmaWMgZmVhdHVyZXMiCisKIGNvbW1lbnQgIk9NQVAgQ29yZSBUeXBlIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCkBAIC0yMjQsNiArMjI4LDEyIEBACiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxMjBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgT01BUF9BUk1fOTZNSFoKKwlib29sICJPTUFQIEFSTSA5NiBNSHogQ1BVIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCisJaGVscAorICAgICAgICAgIEVuYWJsZSA5Nk1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBPTUFQX0FSTV82ME1IWgogCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKQEAgLTIzNywzICsyNDcsNiBAQAogCWhlbHAKICAgICAgICAgICBFbmFibGUgMzBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQppbmRleCBlYTIzMWM3Li5mYWNmYWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDkgQEAKIAogbGVkLXkgOj0gbGVkcy5vCiAKK3VzYi1mcy0kKENPTkZJR19VU0IpCQkJOj0gdXNiLm8KK29iai15CQkJCQkrPSAkKHVzYi1mcy1tKSAkKHVzYi1mcy15KQorCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDIpCQkrPSBib2FyZC1oMi5vIGJvYXJkLWgyLW1tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikJKz0gYm9hcmQtaW5ub3ZhdG9yLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDBhOWQ2MWQuLjQxOTkyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJLyogQ2xlYXIgbGF0Y2gyIChOQU5ELCBMQ0QsIG1vZGVtIGVuYWJsZSkgKi8KIAlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKH4wLCAwKTsKIAotCW9tYXBfdXNiX2luaXQoJmFtc19kZWx0YV91c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmYW1zX2RlbHRhX3VzYl9jb25maWcpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfQU1TX0RFTFRBX0ZJUQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwppbmRleCAwNTliYWM2Li4xODBjZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwpAQCAtMjkyLDYgKzI5MiwxOCBAQAogCW9tYXBfY2ZnX3JlZyhMM18xNjEwX0ZMQVNIX0NTMkJfT0UpOwogCW9tYXBfY2ZnX3JlZyhNOF8xNjEwX0ZMQVNIX0NTMkJfV0UpOwogCisJLyogTXV4IHBpbnMgZm9yIGtleXBhZCAqLworCW9tYXBfY2ZnX3JlZyhFMl83WFhfS0JSMCk7CisJb21hcF9jZmdfcmVnKEo3XzdYWF9LQlIxKTsKKwlvbWFwX2NmZ19yZWcoRTFfN1hYX0tCUjIpOworCW9tYXBfY2ZnX3JlZyhGM183WFhfS0JSMyk7CisJb21hcF9jZmdfcmVnKEQyXzdYWF9LQlI0KTsKKwlvbWFwX2NmZ19yZWcoQzJfN1hYX0tCQzApOworCW9tYXBfY2ZnX3JlZyhEM183WFhfS0JDMSk7CisJb21hcF9jZmdfcmVnKEU0XzdYWF9LQkMyKTsKKwlvbWFwX2NmZ19yZWcoRjRfN1hYX0tCQzMpOworCW9tYXBfY2ZnX3JlZyhFM183WFhfS0JDNCk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gZnNhbXBsZV9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDdhNjU2ODQuLjkzYjlhYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC03MiwxMiArNzIsMTIgQEAKIAkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKIAkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKIAotCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTUxMF91c2JfY29uZmlnKTsKKwkJb21hcDFfdXNiX2luaXQoJmdlbmVyaWMxNTEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiAJaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgewotCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTYxMF91c2JfY29uZmlnKTsKKwkJb21hcDFfdXNiX2luaXQoJmdlbmVyaWMxNjEwX3VzYl9jb25maWcpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKaW5kZXggNjhiMmJlZC4uZDJjZGE1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwpAQCAtMjkyLDE1ICsyOTIsNiBAQAogCiAjZGVmaW5lIEgyX0lSREFfRklSU0VMX0dQSU9fUElOCTE3CiAKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKLXN0YXRpYyBpbnQgaDJfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKLXsKLQkvKiBTSVIgd2hlbiBsb3csIGVsc2UgTUlSL0ZJUiB3aGVuIEhJR0ggKi8KLQlncGlvX3NldF92YWx1ZShIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTiwgIShzdGF0ZSAmIElSX1NJUk1PREUpKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJkYV9jb25maWcgaDJfaXJkYV9kYXRhID0gewogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfTUlSTU9ERSB8IElSX0ZJUk1PREUsCiAJLnJ4X2NoYW5uZWwJCT0gT01BUF9ETUFfVUFSVDNfUlgsCkBAIC00MzcsMTQgKzQyOCwxOCBAQAogCS8qIG9tYXBfY2ZnX3JlZyhVMTlfQVJNSU8xKTsgKi8JCS8qIENEICovCiAJb21hcF9jZmdfcmVnKEJBTExPVVRfVjhfQVJNSU8zKTsJLyogV1AgKi8KIAotCS8qIElyZGEgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKLQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKEZVTkNfTVVYX0NUUkxfQSkgfCA3LCBGVU5DX01VWF9DVFJMX0EpOwotCWlmIChncGlvX3JlcXVlc3QoSDJfSVJEQV9GSVJTRUxfR1BJT19QSU4sICJJUkRBIG1vZGUiKSA8IDApCi0JCUJVRygpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChIMl9JUkRBX0ZJUlNFTF9HUElPX1BJTiwgMCk7Ci0JaDJfaXJkYV9kYXRhLnRyYW5zY2VpdmVyX21vZGUgPSBoMl90cmFuc2NlaXZlcl9tb2RlOwotI2VuZGlmCisJLyogTXV4IHBpbnMgZm9yIGtleXBhZCAqLworCW9tYXBfY2ZnX3JlZyhGMThfMTYxMF9LQkMwKTsKKwlvbWFwX2NmZ19yZWcoRDIwXzE2MTBfS0JDMSk7CisJb21hcF9jZmdfcmVnKEQxOV8xNjEwX0tCQzIpOworCW9tYXBfY2ZnX3JlZyhFMThfMTYxMF9LQkMzKTsKKwlvbWFwX2NmZ19yZWcoQzIxXzE2MTBfS0JDNCk7CisJb21hcF9jZmdfcmVnKEcxOF8xNjEwX0tCUjApOworCW9tYXBfY2ZnX3JlZyhGMTlfMTYxMF9LQlIxKTsKKwlvbWFwX2NmZ19yZWcoSDE0XzE2MTBfS0JSMik7CisJb21hcF9jZmdfcmVnKEUyMF8xNjEwX0tCUjMpOworCW9tYXBfY2ZnX3JlZyhFMTlfMTYxMF9LQlI0KTsKKwlvbWFwX2NmZ19yZWcoTjE5XzE2MTBfS0JSNSk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoMl9kZXZpY2VzLCBBUlJBWV9TSVpFKGgyX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IGgyX2NvbmZpZzsKQEAgLTQ1Miw3ICs0NDcsNyBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBoMl9pMmNfYm9hcmRfaW5mbywKIAkJCSAgICAgIEFSUkFZX1NJWkUoaDJfaTJjX2JvYXJkX2luZm8pKTsKLQlvbWFwX3VzYl9pbml0KCZoMl91c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmaDJfdXNiX2NvbmZpZyk7CiAJaDJfbW1jX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCmluZGV4IDBiMDgyNWYuLmMyZWY0ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKQEAgLTM5Nyw2ICszOTcsMTkgQEAKIAkvKiBHUElPMTAgcHVsbHVwL2Rvd24gcmVnaXN0ZXIsIEVuYWJsZSBwdWxsdXAgb24gR1BJTzEwICovCiAJb21hcF9jZmdfcmVnKFYyXzE3MTBfR1BJTzEwKTsKIAorCS8qIE11eCBwaW5zIGZvciBrZXlwYWQgKi8KKwlvbWFwX2NmZ19yZWcoRjE4XzE2MTBfS0JDMCk7CisJb21hcF9jZmdfcmVnKEQyMF8xNjEwX0tCQzEpOworCW9tYXBfY2ZnX3JlZyhEMTlfMTYxMF9LQkMyKTsKKwlvbWFwX2NmZ19yZWcoRTE4XzE2MTBfS0JDMyk7CisJb21hcF9jZmdfcmVnKEMyMV8xNjEwX0tCQzQpOworCW9tYXBfY2ZnX3JlZyhHMThfMTYxMF9LQlIwKTsKKwlvbWFwX2NmZ19yZWcoRjE5XzE2MTBfS0JSMSk7CisJb21hcF9jZmdfcmVnKEgxNF8xNjEwX0tCUjIpOworCW9tYXBfY2ZnX3JlZyhFMjBfMTYxMF9LQlIzKTsKKwlvbWFwX2NmZ19yZWcoRTE5XzE2MTBfS0JSNCk7CisJb21hcF9jZmdfcmVnKE4xOV8xNjEwX0tCUjUpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oaDNfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShoM19zcGlfYm9hcmRfaW5mbykpOwpAQCAtNDA1LDcgKzQxOCw3IEBACiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIGgzX2kyY19ib2FyZF9pbmZvLAogCQkJICAgICAgQVJSQVlfU0laRShoM19pMmNfYm9hcmRfaW5mbykpOwotCW9tYXBfdXNiX2luaXQoJmgzX3VzYl9jb25maWcpOworCW9tYXAxX3VzYl9pbml0KCZoM191c2JfY29uZmlnKTsKIAloM19tbWNfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1odGNoZXJhbGQuYwppbmRleCBkNzBhNGYwLi4zMTE4OTlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWh0Y2hlcmFsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaHRjaGVyYWxkLmMKQEAgLTI4Nyw3ICsyODcsNyBAQAogCWh0Y2hlcmFsZF9kaXNhYmxlX3dhdGNoZG9nKCk7CiAKIAlodGNoZXJhbGRfdXNiX2VuYWJsZSgpOwotCW9tYXBfdXNiX2luaXQoJmh0Y2hlcmFsZF91c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmaHRjaGVyYWxkX3VzYl9jb25maWcpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaHRjaGVyYWxkX2luaXRfaXJxKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCA5MTA2NGIzLi4zZGFmODdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTQyMiwxMyArNDIyLDEzIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQlvbWFwX3VzYl9pbml0KCZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWcpOworCQlvbWFwMV91c2JfaW5pdCgmaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnKTsKIAkJaW5ub3ZhdG9yX2NvbmZpZ1sxXS5kYXRhID0gJmlubm92YXRvcjE1MTBfbGNkX2NvbmZpZzsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAogCWlmIChjcHVfaXNfb21hcDE2MTAoKSkgewotCQlvbWFwX3VzYl9pbml0KCZoMl91c2JfY29uZmlnKTsKKwkJb21hcDFfdXNiX2luaXQoJmgyX3VzYl9jb25maWcpOwogCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCmluZGV4IDhjMjhiMTAuLjUxYTQ1MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9rZXlwYWQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgotI2luY2x1ZGUgPHBsYXQvZHNwX2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvaHdhNzQyLmg+CiAjaW5jbHVkZSA8cGxhdC9sY2RfbWlwaWQuaD4KICNpbmNsdWRlIDxwbGF0L21tYy5oPgpAQCAtMjQyLDEzOCArMjQxLDYgQEAKIH0KICNlbmRpZgogCi0jaWYJZGVmaW5lZChDT05GSUdfT01BUF9EU1ApCi0vKgotICogYXVkaW8gcG93ZXIgY29udHJvbAotICovCi0jZGVmaW5lCUhFQURQSE9ORV9HUElPCQkxNAotI2RlZmluZQlBTVBMSUZJRVJfQ1RSTF9HUElPCTU4Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpkc3B4b3JfY2s7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGF1ZGlvX3B3cl9sb2NrKTsKLS8qCi0gKiBhdWRpb19wd3Jfc3RhdGUKLSAqICstLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIHwtMXxkb3duCQkJfHBvd2VyLXVwIHJlcXVlc3QgLT4gMAkJCXwKLSAqICstLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIHwgMHx1cAkJCXxwb3dlci1kb3duKDEpIHJlcXVlc3QgLT4gMQkJfAotICogfCAgfAkJCQl8cG93ZXItZG93bigyKSByZXF1ZXN0IC0+IChpZ25vcmUpCXwKLSAqICstLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIHwgMXx1cCwJCQl8cG93ZXItdXAgcmVxdWVzdCAtPiAwCQkJfAotICogfCAgfHJlY2VpdmVkIGRvd24oMSkgcmVxdWVzdAl8cG93ZXItZG93bigyKSByZXF1ZXN0IC0+IC0xCQl8Ci0gKiArLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKi8KLXN0YXRpYyBpbnQgYXVkaW9fcHdyX3N0YXRlID0gLTE7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhaWMyM19wb3dlcl91cCh2b2lkKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGFpYzIzX3Bvd2VyX2Rvd24odm9pZCkKLXsKLX0KLQotLyoKLSAqIGF1ZGlvX3B3cl91cCAvIGRvd24gc2hvdWxkIGJlIGNhbGxlZCB1bmRlciBhdWRpb19wd3JfbG9jawotICovCi1zdGF0aWMgdm9pZCBub2tpYTc3MF9hdWRpb19wd3JfdXAodm9pZCkKLXsKLQljbGtfZW5hYmxlKGRzcHhvcl9jayk7Ci0KLQkvKiBUdXJuIG9uIGNvZGVjICovCi0JYWljMjNfcG93ZXJfdXAoKTsKLQotCWlmIChncGlvX2dldF92YWx1ZShIRUFEUEhPTkVfR1BJTykpCi0JCS8qIEhQIG5vdCBjb25uZWN0ZWQsIHR1cm4gb24gYW1wbGlmaWVyICovCi0JCWdwaW9fc2V0X3ZhbHVlKEFNUExJRklFUl9DVFJMX0dQSU8sIDEpOwotCWVsc2UKLQkJLyogSFAgY29ubmVjdGVkLCBkbyBub3QgdHVybiBvbiBhbXBsaWZpZXIgKi8KLQkJcHJpbnRrKCJIUCBjb25uZWN0ZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBjb2RlY19kZWxheWVkX3Bvd2VyX2Rvd24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCW11dGV4X2xvY2soJmF1ZGlvX3B3cl9sb2NrKTsKLQlpZiAoYXVkaW9fcHdyX3N0YXRlID09IC0xKQotCQlhaWMyM19wb3dlcl9kb3duKCk7Ci0JY2xrX2Rpc2FibGUoZHNweG9yX2NrKTsKLQltdXRleF91bmxvY2soJmF1ZGlvX3B3cl9sb2NrKTsKLX0KLQotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGNvZGVjX3Bvd2VyX2Rvd25fd29yaywgY29kZWNfZGVsYXllZF9wb3dlcl9kb3duKTsKLQotc3RhdGljIHZvaWQgbm9raWE3NzBfYXVkaW9fcHdyX2Rvd24odm9pZCkKLXsKLQkvKiBUdXJuIG9mZiBhbXBsaWZpZXIgKi8KLQlncGlvX3NldF92YWx1ZShBTVBMSUZJRVJfQ1RSTF9HUElPLCAwKTsKLQotCS8qIFR1cm4gb2ZmIGNvZGVjOiBzY2hlZHVsZSBkZWxheWVkIHdvcmsgKi8KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNvZGVjX3Bvd2VyX2Rvd25fd29yaywgSFogLyAyMCk7CS8qIDUwbXMgKi8KLX0KLQotc3RhdGljIGludAotbm9raWE3NzBfYXVkaW9fcHdyX3VwX3JlcXVlc3Qoc3RydWN0IGRzcF9rZnVuY19kZXZpY2UgKmtkZXYsIGludCBzdGFnZSkKLXsKLQltdXRleF9sb2NrKCZhdWRpb19wd3JfbG9jayk7Ci0JaWYgKGF1ZGlvX3B3cl9zdGF0ZSA9PSAtMSkKLQkJbm9raWE3NzBfYXVkaW9fcHdyX3VwKCk7Ci0JLyogZm9yY2UgYXVkaW9fcHdyX3N0YXRlID0gMCwgZXZlbiBpZiBpdCB3YXMgMS4gKi8KLQlhdWRpb19wd3Jfc3RhdGUgPSAwOwotCW11dGV4X3VubG9jaygmYXVkaW9fcHdyX2xvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1ub2tpYTc3MF9hdWRpb19wd3JfZG93bl9yZXF1ZXN0KHN0cnVjdCBkc3Bfa2Z1bmNfZGV2aWNlICprZGV2LCBpbnQgc3RhZ2UpCi17Ci0JbXV0ZXhfbG9jaygmYXVkaW9fcHdyX2xvY2spOwotCXN3aXRjaCAoc3RhZ2UpIHsKLQljYXNlIDE6Ci0JCWlmIChhdWRpb19wd3Jfc3RhdGUgPT0gMCkKLQkJCWF1ZGlvX3B3cl9zdGF0ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJaWYgKGF1ZGlvX3B3cl9zdGF0ZSA9PSAxKSB7Ci0JCQlub2tpYTc3MF9hdWRpb19wd3JfZG93bigpOwotCQkJYXVkaW9fcHdyX3N0YXRlID0gLTE7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCW11dGV4X3VubG9jaygmYXVkaW9fcHdyX2xvY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGRzcF9rZnVuY19kZXZpY2Ugbm9raWE3NzBfYXVkaW9fZGV2aWNlID0gewotCS5uYW1lCSA9ICJhdWRpbyIsCi0JLnR5cGUJID0gRFNQX0tGVU5DX0RFVl9UWVBFX0FVRElPLAotCS5lbmFibGUgID0gbm9raWE3NzBfYXVkaW9fcHdyX3VwX3JlcXVlc3QsCi0JLmRpc2FibGUgPSBub2tpYTc3MF9hdWRpb19wd3JfZG93bl9yZXF1ZXN0LAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgb21hcF9kc3BfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlkc3B4b3JfY2sgPSBjbGtfZ2V0KDAsICJkc3B4b3JfY2siKTsKLQlpZiAoSVNfRVJSKGRzcHhvcl9jaykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZG4ndCBhY3F1aXJlIGRzcHhvcl9ja1xuIik7Ci0JCXJldHVybiBQVFJfRVJSKGRzcHhvcl9jayk7Ci0JfQotCi0JcmV0ID0gZHNwX2tmdW5jX2RldmljZV9yZWdpc3Rlcigmbm9raWE3NzBfYXVkaW9fZGV2aWNlKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIktGVU5DIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGQ6ICVzXG4iLAotCQkgICAgICAgbm9raWE3NzBfYXVkaW9fZGV2aWNlLm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0dXJuIDA7Ci0gb3V0OgotCXJldHVybiByZXQ7Ci19Ci0jZWxzZQotI2RlZmluZSBvbWFwX2RzcF9pbml0KCkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCS8qIENPTkZJR19PTUFQX0RTUCAqLwotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9ub2tpYTc3MF9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobm9raWE3NzBfZGV2aWNlcywgQVJSQVlfU0laRShub2tpYTc3MF9kZXZpY2VzKSk7CkBAIC0zODIsMTEgKzI0OSwxMCBAQAogCW9tYXBfZ3Bpb19pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwotCW9tYXBfZHNwX2luaXQoKTsKIAlod2E3NDJfZGV2X2luaXQoKTsKIAlhZHM3ODQ2X2Rldl9pbml0KCk7CiAJbWlwaWRfZGV2X2luaXQoKTsKLQlvbWFwX3VzYl9pbml0KCZub2tpYTc3MF91c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmbm9raWE3NzBfdXNiX2NvbmZpZyk7CiAJbm9raWE3NzBfbW1jX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggZTJhNzJhZi4uNjc5NzQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC01NjAsNyArNTYwLDcgQEAKIAlsIHw9ICgzIDw8IDEpOwogCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKIAotCW9tYXBfdXNiX2luaXQoJm9za191c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmb3NrX3VzYl9jb25maWcpOwogCiAJLyogaXJxIGZvciB0cHM2NTAxMCBjaGlwICovCiAJLyogYm9vdGxvYWRlciBlZmZlY3RpdmVseSBkb2VzOiAgb21hcF9jZmdfcmVnKFUxOV8xNjEwX01QVUlPMSk7ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCA2MWEyMzIxLi43ODJiYjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTIxMyw5MCArMjEzLDYgQEAKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CiAKLSNpZmRlZiBDT05GSUdfQVBNCi0vKgotICogVmFsdWVzIG1lYXN1cmVkIGluIDEwIG1pbnV0ZSBpbnRlcnZhbHMgYXZlcmFnZWQgb3ZlciAxMCBzYW1wbGVzLgotICogTWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIGRldmljZSB0byBkZXZpY2UgYnV0IHNob3VsZCBiZSBhY2N1cmF0ZQotICogZW5vdWdoIHRvIGdpdmUgYmFzaWMgaWRlYSBvZiBiYXR0ZXJ5IGxpZmUgbGVmdCBhbmQgdHJpZ2dlcgotICogcG90ZW50aWFsIGFsZXJ0cy4KLSAqLwotc3RhdGljIGNvbnN0IGludCBwYWxtdGVfYmF0dGVyeV9zYW1wbGVbXSA9IHsKLQkyMTk0LCAyMTU3LCAyMTM4LCAyMTIwLAotCTIxMDQsIDIwODksIDIwNzUsIDIwNjEsCi0JMjA0OCwgMjAzOCwgMjAyNiwgMjAxNiwKLQkyMDA4LCAxOTk4LCAxOTg5LCAxOTgwLAotCTE5NzAsIDE5NTgsIDE5NDUsIDE5MjgsCi0JMTkxMCwgMTg4OCwgMTg2MCwgMTgyNywKLQkxNzkxLCAxNzUxLCAxNzA5LCAxNjU2LAotfTsKLQotI2RlZmluZSBJTlRFUlZBTAkJMTAKLSNkZWZpbmUgQkFUVEVSWV9ISUdIX1RSRVNIT0xECTY2Ci0jZGVmaW5lIEJBVFRFUllfTE9XX1RSRVNIT0xECTMzCi0KLXN0YXRpYyB2b2lkIHBhbG10ZV9nZXRfcG93ZXJfc3RhdHVzKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqaW5mbywgaW50ICpiYXR0ZXJ5KQotewotCWludCBjaGFyZ2luZywgYmF0dCwgaGksIGxvLCBtaWQ7Ci0KLQljaGFyZ2luZyA9ICFncGlvX2dldF92YWx1ZShQQUxNVEVfRENfR1BJTyk7Ci0JYmF0dCA9IGJhdHRlcnlbMF07Ci0JaWYgKGNoYXJnaW5nKQotCQliYXR0IC09IDYwOwotCi0JaGkgPSBBUlJBWV9TSVpFKHBhbG10ZV9iYXR0ZXJ5X3NhbXBsZSk7Ci0JbG8gPSAwOwotCi0JaW5mby0+YmF0dGVyeV9mbGFnID0gMDsKLQlpbmZvLT51bml0cyA9IEFQTV9VTklUU19NSU5TOwotCi0JaWYgKGJhdHQgPiBwYWxtdGVfYmF0dGVyeV9zYW1wbGVbbG9dKSB7Ci0JCWluZm8tPmJhdHRlcnlfbGlmZSA9IDEwMDsKLQkJaW5mby0+dGltZSA9IElOVEVSVkFMICogQVJSQVlfU0laRShwYWxtdGVfYmF0dGVyeV9zYW1wbGUpOwotCX0gZWxzZSBpZiAoYmF0dCA8PSBwYWxtdGVfYmF0dGVyeV9zYW1wbGVbaGkgLSAxXSkgewotCQlpbmZvLT5iYXR0ZXJ5X2xpZmUgPSAwOwotCQlpbmZvLT50aW1lID0gMDsKLQl9IGVsc2UgewotCQl3aGlsZSAoaGkgPiBsbyArIDEpIHsKLQkJCW1pZCA9IChoaSArIGxvKSA+PiAxOwotCQkJaWYgKGJhdHQgPD0gcGFsbXRlX2JhdHRlcnlfc2FtcGxlW21pZF0pCi0JCQkJbG8gPSBtaWQ7Ci0JCQllbHNlCi0JCQkJaGkgPSBtaWQ7Ci0JCX0KLQotCQltaWQgPSBwYWxtdGVfYmF0dGVyeV9zYW1wbGVbbG9dIC0gcGFsbXRlX2JhdHRlcnlfc2FtcGxlW2hpXTsKLQkJaGkgPSBwYWxtdGVfYmF0dGVyeV9zYW1wbGVbbG9dIC0gYmF0dDsKLQkJaW5mby0+YmF0dGVyeV9saWZlID0gMTAwIC0gKDEwMCAqIGxvICsgMTAwICogaGkgLyBtaWQpIC8KLQkJCUFSUkFZX1NJWkUocGFsbXRlX2JhdHRlcnlfc2FtcGxlKTsKLQkJaW5mby0+dGltZSA9IElOVEVSVkFMICogKEFSUkFZX1NJWkUocGFsbXRlX2JhdHRlcnlfc2FtcGxlKSAtCi0JCQkJbG8pIC0gSU5URVJWQUwgKiBoaSAvIG1pZDsKLQl9Ci0KLQlpZiAoY2hhcmdpbmcpIHsKLQkJaW5mby0+YWNfbGluZV9zdGF0dXMgPSBBUE1fQUNfT05MSU5FOwotCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19DSEFSR0lORzsKLQkJaW5mby0+YmF0dGVyeV9mbGFnIHw9IEFQTV9CQVRURVJZX0ZMQUdfQ0hBUkdJTkc7Ci0JfSBlbHNlIHsKLQkJaW5mby0+YWNfbGluZV9zdGF0dXMgPSBBUE1fQUNfT0ZGTElORTsKLQkJaWYgKGluZm8tPmJhdHRlcnlfbGlmZSA+IEJBVFRFUllfSElHSF9UUkVTSE9MRCkKLQkJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0g7Ci0JCWVsc2UgaWYgKGluZm8tPmJhdHRlcnlfbGlmZSA+IEJBVFRFUllfTE9XX1RSRVNIT0xEKQotCQkJaW5mby0+YmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XOwotCQllbHNlCi0JCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTDsKLQl9Ci0KLQlpZiAoaW5mby0+YmF0dGVyeV9saWZlID4gQkFUVEVSWV9ISUdIX1RSRVNIT0xEKQotCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgfD0gQVBNX0JBVFRFUllfRkxBR19ISUdIOwotCWVsc2UgaWYgKGluZm8tPmJhdHRlcnlfbGlmZSA+IEJBVFRFUllfTE9XX1RSRVNIT0xEKQotCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgfD0gQVBNX0JBVFRFUllfRkxBR19MT1c7Ci0JZWxzZQotCQlpbmZvLT5iYXR0ZXJ5X2ZsYWcgfD0gQVBNX0JBVFRFUllfRkxBR19DUklUSUNBTDsKLX0KLSNlbHNlCi0jZGVmaW5lIHBhbG10ZV9nZXRfcG93ZXJfc3RhdHVzCU5VTEwKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBwYWxtdGVfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAl7IE9NQVBfVEFHX0xDRCwJCSZwYWxtdGVfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTM1OSw3ICsyNzUsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBhbG10ZV9zcGlfaW5mbywgQVJSQVlfU0laRShwYWxtdGVfc3BpX2luZm8pKTsKIAlwYWxtdGVfbWlzY19ncGlvX3NldHVwKCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCW9tYXBfdXNiX2luaXQoJnBhbG10ZV91c2JfY29uZmlnKTsKKwlvbWFwMV91c2JfaW5pdCgmcGFsbXRlX3VzYl9jb25maWcpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwppbmRleCAyMWMwMWM2Li4wYjM1ZWY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGFsbXR0X2JvYXJkaW5mbyxBUlJBWV9TSVpFKHBhbG10dF9ib2FyZGluZm8pKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0Jb21hcF91c2JfaW5pdCgmcGFsbXR0X3VzYl9jb25maWcpOworCW9tYXAxX3VzYl9pbml0KCZwYWxtdHRfdXNiX2NvbmZpZyk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKaW5kZXggZjMyNDkyNC4uNjYzNjI5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGFsbXo3MV9ib2FyZGluZm8sCiAJCQkJQVJSQVlfU0laRShwYWxtejcxX2JvYXJkaW5mbykpOwotCW9tYXBfdXNiX2luaXQoJnBhbG16NzFfdXNiX2NvbmZpZyk7CisJb21hcDFfdXNiX2luaXQoJnBhbG16NzFfdXNiX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogCXBhbG16NzFfZ3Bpb19zZXR1cCgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCA4YjVhYjFmLi4zNGFiMzU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yNjAsNiArMjYwLDE4IEBACiAJb21hcF9jZmdfcmVnKEwzXzE2MTBfRkxBU0hfQ1MyQl9PRSk7CiAJb21hcF9jZmdfcmVnKE04XzE2MTBfRkxBU0hfQ1MyQl9XRSk7CiAKKwkvKiBNdXggcGlucyBmb3Iga2V5cGFkICovCisJb21hcF9jZmdfcmVnKEUyXzdYWF9LQlIwKTsKKwlvbWFwX2NmZ19yZWcoSjdfN1hYX0tCUjEpOworCW9tYXBfY2ZnX3JlZyhFMV83WFhfS0JSMik7CisJb21hcF9jZmdfcmVnKEYzXzdYWF9LQlIzKTsKKwlvbWFwX2NmZ19yZWcoRDJfN1hYX0tCUjQpOworCW9tYXBfY2ZnX3JlZyhDMl83WFhfS0JDMCk7CisJb21hcF9jZmdfcmVnKEQzXzdYWF9LQkMxKTsKKwlvbWFwX2NmZ19yZWcoRTRfN1hYX0tCQzIpOworCW9tYXBfY2ZnX3JlZyhGNF83WFhfS0JDMyk7CisJb21hcF9jZmdfcmVnKEUzXzdYWF9LQkM0KTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCiAJb21hcF9ib2FyZF9jb25maWcgPSBwZXJzZXVzMl9jb25maWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCA5OTU1NjZiLi4yZWIxNDhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHN4MV9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKLQlvbWFwX3VzYl9pbml0KCZzeDFfdXNiX2NvbmZpZyk7CisJb21hcDFfdXNiX2luaXQoJnN4MV91c2JfY29uZmlnKTsKIAlzeDFfbW1jX2luaXQoKTsKIAogCS8qIHR1cm4gb24gVVNCIHBvd2VyICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwppbmRleCA0YzQ4M2RjLi42YjNjZjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnID0gdm9pY2VibHVlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh2b2ljZWJsdWVfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0Jb21hcF91c2JfaW5pdCgmdm9pY2VibHVlX3VzYl9jb25maWcpOworCW9tYXAxX3VzYl9pbml0KCZ2b2ljZWJsdWVfdXNiX2NvbmZpZyk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiAKIAkvKiBUaGVyZSBpcyBhIGdvb2QgY2hhbmNlIGJvYXJkIGlzIGdvaW5nIHVwLCBzbyBlbmFibGUgcG93ZXIgTEVECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggNmJiYjFiOC4uYjhjN2ZiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMTEsNyArMTEsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zNCw5ICszMyw5IEBACiBfX3UzMiBhcm1faWRsZWN0MV9tYXNrOwogc3RydWN0IGNsayAqYXBpX2NrX3AsICpja19kcGxsMV9wLCAqY2tfcmVmX3A7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoKICAqIE9tYXAxIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAqLwogCiB1bnNpZ25lZCBsb25nIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTUyMyw3ICs1MjIsOCBAQAogCS5kaXNhYmxlCT0gb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKIH07CiAKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqY2xrKQorLyogWFhYIFNZU0MgcmVnaXN0ZXIgaGFuZGxpbmcgZG9lcyBub3QgYmVsb25nIGluIHRoZSBjbG9jayBmcmFtZXdvcmsgKi8KK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWxfMTZ4eChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdWFydF9jbGsgKnVjbGs7CkBAIC01MzksNyArNTM5LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV91YXJ0X2Z1bmN0aW9uYWwoc3RydWN0IGNsayAqY2xrKQorLyogWFhYIFNZU0MgcmVnaXN0ZXIgaGFuZGxpbmcgZG9lcyBub3QgYmVsb25nIGluIHRoZSBjbG9jayBmcmFtZXdvcmsgKi8KK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbF8xNnh4KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgdWFydF9jbGsgKnVjbGs7CiAKQEAgLTU1MCw5ICs1NTEsMTAgQEAKIAlvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKGNsayk7CiB9CiAKLWNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX3VhcnQgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbCwKLQkuZGlzYWJsZQk9IG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKy8qIFhYWCBTWVNDIHJlZ2lzdGVyIGhhbmRsaW5nIGRvZXMgbm90IGJlbG9uZyBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrICovCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc191YXJ0XzE2eHggPSB7CisJLmVuYWJsZQkJPSBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbF8xNnh4LAorCS5kaXNhYmxlCT0gb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsXzE2eHgsCiB9OwogCiBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQpAQCAtNTcyLDkgKzU3NCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgogICogT21hcDEgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICovCiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCmluZGV4IDc1ZDBkN2QuLmVhZjA5ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHNwY2s7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXk7Ci1leHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfdWFydDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc191YXJ0XzE2eHg7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZ2VuZXJpYzsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCmluZGV4IGFhODU1OGEuLmFmNTQxMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2tfZGF0YS5jCkBAIC04LDYgKzgsMTAgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVG8gZG86CisgKiAtIENsb2NrcyB0aGF0IGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBzb21lIGNoaXBzIHNob3VsZCBiZSBtYXJrZWQgd2l0aCB0aGUKKyAqICAgY2hpcHMgdGhhdCB0aGV5IGFyZSBwcmVzZW50IG9uLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIzLDkgKzI3LDQ5IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyogU29tZSBBUk1fSURMRUNUMSBiaXQgc2hpZnRzIC0gdXNlZCBpbiBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrICovCisjZGVmaW5lIElETF9DTEtPVVRfQVJNX1NISUZUCQkJMTIKKyNkZWZpbmUgSURMVElNX0FSTV9TSElGVAkJCTkKKyNkZWZpbmUgSURMQVBJX0FSTV9TSElGVAkJCTgKKyNkZWZpbmUgSURMSUZfQVJNX1NISUZUCQkJCTYKKyNkZWZpbmUgSURMTEJfQVJNX1NISUZUCQkJCTQJLyogdW5kb2N1bWVudGVkPyAqLworI2RlZmluZSBPTUFQMTUxMF9JRExMQ0RfQVJNX1NISUZUCQkzCS8qIHVuZG9jdW1lbnRlZD8gKi8KKyNkZWZpbmUgSURMUEVSX0FSTV9TSElGVAkJCTIKKyNkZWZpbmUgSURMWE9SUF9BUk1fU0hJRlQJCQkxCisjZGVmaW5lIElETFdEVF9BUk1fU0hJRlQJCQkwCisKKy8qIFNvbWUgTU9EX0NPTkZfQ1RSTF8wIGJpdCBzaGlmdHMgLSB1c2VkIGluIHN0cnVjdCBjbGsuZW5hYmxlX2JpdCAqLworI2RlZmluZSBDT05GX01PRF9VQVJUM19DTEtfTU9ERV9SCQkzMQorI2RlZmluZSBDT05GX01PRF9VQVJUMl9DTEtfTU9ERV9SCQkzMAorI2RlZmluZSBDT05GX01PRF9VQVJUMV9DTEtfTU9ERV9SCQkyOQorI2RlZmluZSBDT05GX01PRF9NTUNfU0RfQ0xLX1JFUV9SCQkyMworI2RlZmluZSBDT05GX01PRF9NQ0JTUDNfQVVYT04JCQkyMAorCisvKiBTb21lIE1PRF9DT05GX0NUUkxfMSBiaXQgc2hpZnRzIC0gdXNlZCBpbiBzdHJ1Y3QgY2xrLmVuYWJsZV9iaXQgKi8KKyNkZWZpbmUgQ09ORl9NT0RfU09TU0lfQ0xLX0VOX1IJCQkxNgorCisvKiBTb21lIE9UR19TWVNDT05fMi1zcGVjaWZpYyBiaXQgZmllbGRzICovCisjZGVmaW5lIE9UR19TWVNDT05fMl9VSE9TVF9FTl9TSElGVAkJOAorCisvKiBTb21lIFNPRlRfUkVRX1JFRyBiaXQgZmllbGRzIC0gdXNlZCBpbiBzdHJ1Y3QgY2xrLmVuYWJsZV9iaXQgKi8KKyNkZWZpbmUgU09GVF9NTUMyX0RQTExfUkVRX1NISUZUCTEzCisjZGVmaW5lIFNPRlRfTU1DX0RQTExfUkVRX1NISUZUCQkxMgorI2RlZmluZSBTT0ZUX1VBUlQzX0RQTExfUkVRX1NISUZUCTExCisjZGVmaW5lIFNPRlRfVUFSVDJfRFBMTF9SRVFfU0hJRlQJMTAKKyNkZWZpbmUgU09GVF9VQVJUMV9EUExMX1JFUV9TSElGVAk5CisjZGVmaW5lIFNPRlRfVVNCX09UR19EUExMX1JFUV9TSElGVAk4CisjZGVmaW5lIFNPRlRfQ0FNX0RQTExfUkVRX1NISUZUCQk3CisjZGVmaW5lIFNPRlRfQ09NX01DS09fUkVRX1NISUZUCQk2CisjZGVmaW5lIFNPRlRfUEVSSVBIX1JFUV9TSElGVAkJNQkvKiBzeXNfY2sgZ2F0ZSBmb3IgVUFSVDIgPyAqLworI2RlZmluZSBVU0JfUkVRX0VOX1NISUZUCQk0CisjZGVmaW5lIFNPRlRfVVNCX1JFUV9TSElGVAkJMwkvKiBzeXNfY2sgZ2F0ZSBmb3IgVVNCIGhvc3Q/ICovCisjZGVmaW5lIFNPRlRfU0RXX1JFUV9TSElGVAkJMgkvKiBzeXNfY2sgZ2F0ZSBmb3IgQmx1ZXRvb3RoPyAqLworI2RlZmluZSBTT0ZUX0NPTV9SRVFfU0hJRlQJCTEJLyogc3lzX2NrIGdhdGUgZm9yIGNvbSBwcm9jPyAqLworI2RlZmluZSBTT0ZUX0RQTExfUkVRX1NISUZUCQkwCisKKy8qCiAgKiBPbWFwMSBjbG9ja3MKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgKi8KIAogc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewogCS5uYW1lCQk9ICJja19yZWYiLApAQCAtNTQsNyArOTgsNyBAQAogCQkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAl9LAotCS5pZGxlY3Rfc2hpZnQJPSAxMiwKKwkuaWRsZWN0X3NoaWZ0CT0gSURMX0NMS09VVF9BUk1fU0hJRlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzb3NzaV9jayA9IHsKQEAgLTYzLDcgKzEwNyw3IEBACiAJLnBhcmVudAkJPSAmY2tfZHBsbDFvdXQuY2xrLAogCS5mbGFncwkJPSBDTE9DS19OT19JRExFX1BBUkVOVCB8IEVOQUJMRV9SRUdfMzJCSVQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMSksCi0JLmVuYWJsZV9iaXQJPSAxNiwKKwkuZW5hYmxlX2JpdAk9IENPTkZfTU9EX1NPU1NJX0NMS19FTl9SLAogCS5yZWNhbGMJCT0gJm9tYXAxX3Nvc3NpX3JlY2FsYywKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3Nvc3NpX3JhdGUsCiB9OwpAQCAtOTEsNyArMTM1LDcgQEAKIAkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCiAJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiAJfSwKLQkuaWRsZWN0X3NoaWZ0CT0gMiwKKwkuaWRsZWN0X3NoaWZ0CT0gSURMUEVSX0FSTV9TSElGVCwKIH07CiAKIC8qCkBAIC0xMTgsNyArMTYyLDcgQEAKIAkJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJfSwKLQkuaWRsZWN0X3NoaWZ0CT0gMSwKKwkuaWRsZWN0X3NoaWZ0CT0gSURMWE9SUF9BUk1fU0hJRlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm10aW1fY2sgPSB7CkBAIC0xMzEsNyArMTc1LDcgQEAKIAkJLmVuYWJsZV9iaXQJPSBFTl9USU1DSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAl9LAotCS5pZGxlY3Rfc2hpZnQJPSA5LAorCS5pZGxlY3Rfc2hpZnQJPSBJRExUSU1fQVJNX1NISUZULAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtd2R0X2NrID0gewpAQCAtMTQ1LDcgKzE4OSw3IEBACiAJCS5maXhlZF9kaXYJPSAxNCwKIAkJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKIAl9LAotCS5pZGxlY3Rfc2hpZnQJPSAwLAorCS5pZGxlY3Rfc2hpZnQJPSBJRExXRFRfQVJNX1NISUZULAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CkBAIC0yMTIsNyArMjU2LDYgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotLyogVGllIEFSTV9JRExFQ1QxOklETElGX0FSTSB0byB0aGlzIGxvZ2ljYWwgY2xvY2sgc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayB0Y19jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAidGNfY2siLApAQCAtMjI0LDcgKzI2Nyw3IEBACiAJCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAogCQkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogCX0sCi0JLmlkbGVjdF9zaGlmdAk9IDYsCisJLmlkbGVjdF9zaGlmdAk9IElETElGX0FSTV9TSElGVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0gewpAQCAtMzA0LDcgKzM0Nyw3IEBACiAJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiAJfSwKLQkuaWRsZWN0X3NoaWZ0CT0gOCwKKwkuaWRsZWN0X3NoaWZ0CT0gSURMQVBJX0FSTV9TSElGVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxiX2NrID0gewpAQCAtMzE3LDcgKzM2MCw3IEBACiAJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAl9LAotCS5pZGxlY3Rfc2hpZnQJPSA0LAorCS5pZGxlY3Rfc2hpZnQJPSBJRExMQl9BUk1fU0hJRlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayByaGVhMV9jayA9IHsKQEAgLTM1OSw5ICs0MDIsMTUgQEAKIAkJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCiAJCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiAJfSwKLQkuaWRsZWN0X3NoaWZ0CT0gMywKKwkuaWRsZWN0X3NoaWZ0CT0gT01BUDE1MTBfSURMTENEX0FSTV9TSElGVCwKIH07CiAKKy8qCisgKiBYWFggVGhlIGVuYWJsZV9iaXQgaGVyZSBpcyBtaXN1c2VkIC0gaXQgc2ltcGx5IHN3aXRjaGVzIGJldHdlZW4gMTJNSHoKKyAqIGFuZCA0OE1Iei4gIFJlaW1wbGVtZW50IHdpdGggY2xrc2VsLgorICoKKyAqIFhYWCBkb2VzIHRoaXMgbmVlZCBTWVNDIHJlZ2lzdGVyIGhhbmRsaW5nPworICovCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCkBAIC0zNzAsMjUgKzQxOSwzNyBAQAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSAyOSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLworCS5lbmFibGVfYml0CT0gQ09ORl9NT0RfVUFSVDFfQ0xLX01PREVfUiwKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X3VhcnRfcmF0ZSwKIAkucmVjYWxjCQk9ICZvbWFwMV91YXJ0X3JlY2FsYywKIH07CiAKKy8qCisgKiBYWFggVGhlIGVuYWJsZV9iaXQgaGVyZSBpcyBtaXN1c2VkIC0gaXQgc2ltcGx5IHN3aXRjaGVzIGJldHdlZW4gMTJNSHoKKyAqIGFuZCA0OE1Iei4gIFJlaW1wbGVtZW50IHdpdGggY2xrc2VsLgorICoKKyAqIFhYWCBTWVNDIHJlZ2lzdGVyIGhhbmRsaW5nIGRvZXMgbm90IGJlbG9uZyBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDFfMTZ4eCA9IHsKIAkuY2xrCT0gewogCQkubmFtZQkJPSAidWFydDFfY2siLAotCQkub3BzCQk9ICZjbGtvcHNfdWFydCwKKwkJLm9wcwkJPSAmY2xrb3BzX3VhcnRfMTZ4eCwKIAkJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkJLnJhdGUJCT0gNDgwMDAwMDAsCiAJCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAotCQkuZW5hYmxlX2JpdAk9IDI5LAorCQkuZW5hYmxlX2JpdAk9IENPTkZfTU9EX1VBUlQxX0NMS19NT0RFX1IsCiAJfSwKIAkuc3lzY19hZGRyCT0gMHhmZmZiMDA1NCwKIH07CiAKKy8qCisgKiBYWFggVGhlIGVuYWJsZV9iaXQgaGVyZSBpcyBtaXN1c2VkIC0gaXQgc2ltcGx5IHN3aXRjaGVzIGJldHdlZW4gMTJNSHoKKyAqIGFuZCA0OE1Iei4gIFJlaW1wbGVtZW50IHdpdGggY2xrc2VsLgorICoKKyAqIFhYWCBkb2VzIHRoaXMgbmVlZCBTWVNDIHJlZ2lzdGVyIGhhbmRsaW5nPworICovCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jayA9IHsKIAkubmFtZQkJPSAidWFydDJfY2siLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtMzk3LDExICs0NTgsMTcgQEAKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAotCS5lbmFibGVfYml0CT0gMzAsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KKwkuZW5hYmxlX2JpdAk9IENPTkZfTU9EX1VBUlQyX0NMS19NT0RFX1IsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCiB9OwogCisvKgorICogWFhYIFRoZSBlbmFibGVfYml0IGhlcmUgaXMgbWlzdXNlZCAtIGl0IHNpbXBseSBzd2l0Y2hlcyBiZXR3ZWVuIDEyTUh6CisgKiBhbmQgNDhNSHouICBSZWltcGxlbWVudCB3aXRoIGNsa3NlbC4KKyAqCisgKiBYWFggZG9lcyB0aGlzIG5lZWQgU1lTQyByZWdpc3RlciBoYW5kbGluZz8KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKIAkubmFtZQkJPSAidWFydDNfY2siLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtNDEwLDIxICs0NzcsMjcgQEAKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAotCS5lbmFibGVfYml0CT0gMzEsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KKwkuZW5hYmxlX2JpdAk9IENPTkZfTU9EX1VBUlQzX0NMS19NT0RFX1IsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCiAJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCiB9OwogCisvKgorICogWFhYIFRoZSBlbmFibGVfYml0IGhlcmUgaXMgbWlzdXNlZCAtIGl0IHNpbXBseSBzd2l0Y2hlcyBiZXR3ZWVuIDEyTUh6CisgKiBhbmQgNDhNSHouICBSZWltcGxlbWVudCB3aXRoIGNsa3NlbC4KKyAqCisgKiBYWFggU1lTQyByZWdpc3RlciBoYW5kbGluZyBkb2VzIG5vdCBiZWxvbmcgaW4gdGhlIGNsb2NrIGZyYW1ld29yaworICovCiBzdGF0aWMgc3RydWN0IHVhcnRfY2xrIHVhcnQzXzE2eHggPSB7CiAJLmNsawk9IHsKIAkJLm5hbWUJCT0gInVhcnQzX2NrIiwKLQkJLm9wcwkJPSAmY2xrb3BzX3VhcnQsCisJCS5vcHMJCT0gJmNsa29wc191YXJ0XzE2eHgsCiAJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJCS5yYXRlCQk9IDQ4MDAwMDAwLAogCQkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKLQkJLmVuYWJsZV9iaXQJPSAzMSwKKwkJLmVuYWJsZV9iaXQJPSBDT05GX01PRF9VQVJUM19DTEtfTU9ERV9SLAogCX0sCiAJLnN5c2NfYWRkcgk9IDB4ZmZmYjk4NTQsCiB9OwpAQCAtNDU3LDcgKzUzMCw3IEBACiAJLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLwogCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhPVEdfQkFTRSArIDB4MDgpLCAvKiBPVEdfU1lTQ09OXzIgKi8KLQkuZW5hYmxlX2JpdAk9IDggLyogVUhPU1RfRU4gKi8sCisJLmVuYWJsZV9iaXQJPSBPVEdfU1lTQ09OXzJfVUhPU1RfRU5fU0hJRlQKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9kY19jayA9IHsKQEAgLTQ2Niw3ICs1MzksNyBAQAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAotCS5lbmFibGVfYml0CT0gNCwKKwkuZW5hYmxlX2JpdAk9IFVTQl9SRVFfRU5fU0hJRlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2s3eHggPSB7CkBAIC00NzUsNyArNTQ4LDI1IEBACiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCi0JLmVuYWJsZV9iaXQJPSA4LAorCS5lbmFibGVfYml0CT0gU09GVF9VU0JfT1RHX0RQTExfUkVRX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfN3h4ID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCisJLmVuYWJsZV9iaXQJPSA5LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfN3h4ID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCisJLmVuYWJsZV9iaXQJPSAxMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTUxMCA9IHsKQEAgLTQ4NCw3ICs1NzUsNyBAQAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAotCS5lbmFibGVfYml0CT0gNiwKKwkuZW5hYmxlX2JpdAk9IFNPRlRfQ09NX01DS09fUkVRX1NISUZULAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0gewpAQCAtNTI0LDkgKzYxNSwxMyBAQAogCS5yYXRlCQk9IDQ4MDAwMDAwLAogCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCi0JLmVuYWJsZV9iaXQJPSAyMywKKwkuZW5hYmxlX2JpdAk9IENPTkZfTU9EX01NQ19TRF9DTEtfUkVRX1IsCiB9OwogCisvKgorICogWFhYIE1PRF9DT05GX0NUUkxfMCBiaXQgMjAgaXMgZGVmaW5lZCBpbiB0aGUgMTUxMCBUUk0gYXMKKyAqIENPTkZfTU9EX01DQlNQM19BVVhPTiA/PworICovCiBzdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewogCS5uYW1lCQk9ICJtbWMyX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKQEAgLTU0Niw3ICs2NDEsNyBAQAogCS5yYXRlCQk9IDQ4MDAwMDAwLAogCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCi0JLmVuYWJsZV9iaXQJPSAxMiwKKwkuZW5hYmxlX2JpdAk9IFNPRlRfTU1DX0RQTExfUkVRX1NISUZULAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CkBAIC02MjAsNyArNzE1LDkgQEAKIAkvKiBVTFBEIGNsb2NrcyAqLwogCUNMSyhOVUxMLAkidWFydDFfY2siLAkmdWFydDFfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCiAJQ0xLKE5VTEwsCSJ1YXJ0MV9jayIsCSZ1YXJ0MV8xNnh4LmNsaywgQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9jayIsCSZ1YXJ0MV83eHgsCUNLXzdYWCksCiAJQ0xLKE5VTEwsCSJ1YXJ0Ml9jayIsCSZ1YXJ0Ml9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkidWFydDJfY2siLAkmdWFydDJfN3h4LAlDS183WFgpLAogCUNMSyhOVUxMLAkidWFydDNfY2siLAkmdWFydDNfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCiAJQ0xLKE5VTEwsCSJ1YXJ0M19jayIsCSZ1YXJ0M18xNnh4LmNsaywgQ0tfMTZYWCksCiAJQ0xLKE5VTEwsCSJ1c2JfY2xrbyIsCSZ1c2JfY2xrbywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwppbmRleCAzNzkxMDBjLi5hYTA3MjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2RldmljZXMuYwpAQCAtNjMsNDQgKzYzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfcnRjKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQotIyAgZGVmaW5lIE9NQVAxX01CT1hfU0laRQkweDIzCi0jICBkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMQlJTlRfMTUxMF9EU1BfTUFJTEJPWDEKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi0jICBkZWZpbmUgT01BUDFfTUJPWF9TSVpFCTB4MmYKLSMgIGRlZmluZSBJTlRfRFNQX01BSUxCT1gxCUlOVF8xNjEwX0RTUF9NQUlMQk9YMQotI2VuZGlmCi0KLSNkZWZpbmUgT01BUDFfTUJPWF9CQVNFCQlPTUFQMTZYWF9NQUlMQk9YX0JBU0UKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYm94X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAxX01CT1hfQkFTRSwKLQkJLmVuZAkJPSBPTUFQMV9NQk9YX0JBU0UgKyBPTUFQMV9NQk9YX1NJWkUsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IElOVF9EU1BfTUFJTEJPWDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWJveF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAxLW1haWxib3giLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobWJveF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1ib3hfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tYm94KHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYm94X2RldmljZSk7Ci19Ci0jZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tYm94KHZvaWQpIHsgfQotI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIzMCw0MiArMTkzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfU1RJKQotCi0jZGVmaW5lIE9NQVAxX1NUSV9CQVNFCQkweGZmZmVhMDAwCi0jZGVmaW5lIE9NQVAxX1NUSV9DSEFOTkVMX0JBU0UJKE9NQVAxX1NUSV9CQVNFICsgMHg0MDApCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAxX1NUSV9CQVNFLAotCQkuZW5kCQk9IE9NQVAxX1NUSV9CQVNFICsgU1pfMUsgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBPTUFQMV9TVElfQ0hBTk5FTF9CQVNFLAotCQkuZW5kCQk9IE9NQVAxX1NUSV9DSEFOTkVMX0JBU0UgKyBTWl8xSyAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IElOVF8xNjEwX1NUSSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInN0aSIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzdGlfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzdGlfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9zdGkodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN0aV9kZXZpY2UpOwotfQotI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpIHt9Ci0jZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggZThhOGNmMy4uNjcxNDA4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0zMyw3ICszMyw3IEBACiAJCS8qIFVzZSBvbWFwX3VhcnRfcGh5cy92aXJ0IGlmIGFscmVhZHkgY29uZmlndXJlZCAqLwogOToJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJ4LCA9b21hcF91YXJ0X3BoeXMJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbGRyZXEJXHJ4LCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X3BoeXMpCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAJCWxkcm5lCVxyeCwgPW9tYXBfdWFydF92aXJ0CUAgdmlydHVhbCBiYXNlCiAJCWxkcglccngsIFtccngsICMwXQogCQljbXAJXHJ4LCAjMAkJCUAgaXMgcG9ydCBjb25maWd1cmVkPwpAQCAtNjgsMTEgKzY4LDE1IEBACiAKIAkJLyogU3RvcmUgYm90aCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3MgZm9yIHRoZSB1YXJ0ICovCiA5ODoJCWFkZAlccngsIFxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzIGJhc2UKLQkJbGRyCVx0bXAsID1vbWFwX3VhcnRfcGh5cworCQltcmMJcDE1LCAwLCBcdG1wLCBjMSwgYzAKKwkJdHN0CVx0bXAsICMxCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlcdG1wLCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X3BoeXMpCisJCWxkcm5lCVx0bXAsID1vbWFwX3VhcnRfcGh5cwogCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCiAJCXN1YglccngsIFxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzIGJhc2UKIAkJYWRkCVxyeCwgXHJ4LCAjMHhmZTAwMDAwMAlAIHZpcnQgYmFzZQotCQlsZHIJXHRtcCwgPW9tYXBfdWFydF92aXJ0CisJCWxkcmVxCVx0bXAsID1fX3ZpcnRfdG9fcGh5cyhvbWFwX3VhcnRfdmlydCkKKwkJbGRybmUJXHRtcCwgPW9tYXBfdWFydF92aXJ0CiAJCXN0cglccngsIFtcdG1wLCAjMF0KIAkJYgk5YgogOTk6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCmluZGV4IDRmNWIzZGEuLjFhODVhNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgRFNQCisgKiBNYWlsYm94IHJlc2VydmF0aW9uIG1vZHVsZXMgZm9yIE9NQVAxCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KQEAgLTksMTMgKzksMTAgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxwbGF0L21haWxib3guaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAogI2RlZmluZSBNQUlMQk9YX0FSTTJEU1AxCQkweDAwCiAjZGVmaW5lIE1BSUxCT1hfQVJNMkRTUDFiCQkweDA0CkBAIC04Myw3ICs4MCw3IEBACiAJc3RydWN0IG9tYXBfbWJveDFfZmlmbyAqZmlmbyA9CiAJCSYoKHN0cnVjdCBvbWFwX21ib3gxX3ByaXYgKiltYm94LT5wcml2KS0+cnhfZmlmbzsKIAotCXJldHVybiAobWJveF9yZWFkX3JlZyhmaWZvLT5mbGFnKSk7CisJcmV0dXJuIG1ib3hfcmVhZF9yZWcoZmlmby0+ZmxhZyk7CiB9CiAKIC8qIGlycSAqLwpAQCAtMTQxLDQ3ICsxMzgsMzcgQEAKIAkub3BzCT0gJm9tYXAxX21ib3hfb3BzLAogCS5wcml2CT0gJm9tYXAxX21ib3hfZHNwX3ByaXYsCiB9OwotRVhQT1JUX1NZTUJPTChtYm94X2RzcF9pbmZvKTsKKworc3RydWN0IG9tYXBfbWJveCAqb21hcDFfbWJveGVzW10gPSB7ICZtYm94X2RzcF9pbmZvLCBOVUxMIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAxX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCBvbWFwX21ib3ggKipsaXN0OwogCi0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiByZXNvdXJjZXM6ICVkXG4iLAotCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlsaXN0ID0gb21hcDFfbWJveGVzOworCWxpc3RbMF0tPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJkc3AiKTsKIAotCS8qIE1CT1ggYmFzZSAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKHVubGlrZWx5KCFyZXMpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWJveF9iYXNlID0gaW9yZW1hcChtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOworCWlmICghbWJveF9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoIW1ib3hfYmFzZSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIERTUCBJUlEgKi8KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwotCWlmICh1bmxpa2VseSghcmVzKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7CisJcmV0ID0gb21hcF9tYm94X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIGxpc3QpOworCWlmIChyZXQpIHsKIAkJaW91bm1hcChtYm94X2Jhc2UpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIHJldDsKIAl9Ci0JbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwogCi0JcmV0dXJuIG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9kc3BfaW5mbyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAxX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jb21hcF9tYm94X3VucmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOwotCisJb21hcF9tYm94X3VucmVnaXN0ZXIoKTsKKwlpb3VubWFwKG1ib3hfYmFzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4OSw3ICsxNzYsNyBAQAogCS5wcm9iZQk9IG9tYXAxX21ib3hfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG9tYXAxX21ib3hfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewotCQkubmFtZQk9ICJvbWFwMS1tYWlsYm94IiwKKwkJLm5hbWUJPSAib21hcC1tYWlsYm94IiwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCmluZGV4IGU5YmRmZjEuLmIzYTc5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgotI2luY2x1ZGUgPHBsYXQvZHNwX2NvbW1vbi5oPgogCiAjZGVmaW5lIERQU19SU1RDVDJfUEVSX0VOCSgxIDw8IDApCiAjZGVmaW5lIERTUF9SU1RDVDJfV0RfUEVSX0VOCSgxIDw8IDEpCkBAIC00Niw3ICs0NSw2IEBACiAJCQkJY2xrX2VuYWJsZShhcGlfY2xrKTsKIAkJCQljbGtfZW5hYmxlKGRzcF9jbGspOwogCi0JCQkJb21hcF9kc3BfcmVxdWVzdF9tZW0oKTsKIAkJCQkvKgogCQkJCSAqIERTUCBleHRlcm5hbCBwZXJpcGhlcmFsIHJlc2V0CiAJCQkJICogRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGRzcCBjb2RlCkBAIC02Miw3ICs2MCw2IEBACiB7CiAJaWYgKGlkID09IE9NQVBfTUNCU1AxIHx8IGlkID09IE9NQVBfTUNCU1AzKSB7CiAJCWlmICgtLWRzcF91c2UgPT0gMCkgewotCQkJb21hcF9kc3BfcmVsZWFzZV9tZW0oKTsKIAkJCWlmICghSVNfRVJSKGFwaV9jbGspKSB7CiAJCQkJY2xrX2Rpc2FibGUoYXBpX2Nsayk7CiAJCQkJY2xrX3B1dChhcGlfY2xrKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IDg0MzQxMzcuLjc4MzVhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtNzAsNiArNzAsMTAgQEAKIE1VWF9DRkdfN1hYKCJTUElfN1hYXzQiLCAgICAgICAgICAgNiwgICAxNywgICAgNCwgICAxNiwgICAxLCAwKQogTVVYX0NGR183WFgoIlNQSV83WFhfNSIsICAgICAgICAgICA4LCAgIDI1LCAgICAwLCAgIDI0LCAgIDAsIDApCiBNVVhfQ0ZHXzdYWCgiU1BJXzdYWF82IiwgICAgICAgICAgIDksICAgIDUsICAgIDAsICAgIDQsICAgMCwgMCkKKworLyogVUFSVCBwaW5zICovCitNVVhfQ0ZHXzdYWCgiVUFSVF83WFhfMSIsICAgICAgICAgIDMsICAgMjEsICAgIDAsICAgMjAsICAgMCwgMCkKK01VWF9DRkdfN1hYKCJVQVJUXzdYWF8yIiwgICAgICAgICAgOCwgICAgMSwgICAgNiwgICAgMCwgICAwLCAwKQogfTsKICNkZWZpbmUgT01BUDdYWF9QSU5TX1NaCQlBUlJBWV9TSVpFKG9tYXA3eHhfcGlucykKICNlbHNlCkBAIC00NDAsNyArNDQ0LDcgQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19PTUFQX01VWF9FUlJPUlMKKyNpZmRlZiBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MKIAlyZXR1cm4gd2FybiA/IC1FVFhUQlNZIDogMDsKICNlbHNlCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCAzNDlkZTkwLi5iNzhkMDc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTEyMiw2ICsxMjIsMTMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNlcmlhbF9wbGF0Zm9ybV9kYXRhKSAtIDE7IGkrKykgewogCisJCS8qIERvbid0IGxvb2sgYXQgVUFSVHMgaGlnaGVyIHRoYW4gMiBmb3Igb21hcDd4eCAqLworCQlpZiAoY3B1X2lzX29tYXA3eHgoKSAmJiBpID4gMSkgeworCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWVtYmFzZSA9IE5VTEw7CisJCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhW2ldLm1lbWJhc2UgPQogCQkJaW9yZW1hcChzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlLCBTWl8ySyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3VzYi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRlMDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS91c2IuYwpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFBsYXRmb3JtIGxldmVsIFVTQiBpbml0aWFsaXphdGlvbiBmb3IgRlMgVVNCIE9URyBjb250cm9sbGVyIG9uIG9tYXAxIGFuZCAyNHh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KKworLyogVGhlc2Ugcm91dGluZXMgc2hvdWxkIGhhbmRsZSB0aGUgc3RhbmRhcmQgY2hpcC1zcGVjaWZpYyBtb2RlcworICogZm9yIHVzYjAvMS8yIHBvcnRzLCBjb3ZlcmluZyBiYXNpYyBtdXggYW5kIHRyYW5zY2VpdmVyIHNldHVwLgorICoKKyAqIFNvbWUgYm9hcmQtKi5jIGZpbGVzIHdpbGwgbmVlZCB0byBzZXQgdXAgYWRkaXRpb25hbCBtdXggb3B0aW9ucywKKyAqIGxpa2UgZm9yIHN1c3BlbmQgaGFuZGxpbmcsIHZidXMgc2Vuc2luZywgR1BJT3MsIGFuZCB0aGUgRCsgcHVsbHVwLgorICovCisKKy8qIFRFU1RFRCBPTjoKKyAqICAtIDE2MTFCIEgyICh3aXRoIHVzYjEgbWluaS1BQikgdXNpbmcgc3RhbmRhcmQgTWluaS1CIG9yIE9URyBjYWJsZXMKKyAqICAtIDU5MTIgT1NLIE9IQ0kgKHdpdGggdXNiMCBzdGFuZGFyZC1BKSwgc3RhbmRhcmQgQS10by1CIGNhYmxlcworICogIC0gNTkxMiBPU0sgVURDLCB3aXRoICpub25zdGFuZGFyZCogQS10by1BIGNhYmxlCisgKiAgLSAxNTEwIElubm92YXRvciBVREMgd2l0aCBidW5kbGVkIHVzYjAgY2FibGUKKyAqICAtIDE1MTAgSW5ub3ZhdG9yIE9IQ0kgd2l0aCBidW5kbGVkIHVzYjEvdXNiMiBjYWJsZQorICogIC0gMTUxMCBJbm5vdmF0b3IgT0hDSSB3aXRoIGN1c3RvbSB1c2IwIGNhYmxlLCBmZWVkaW5nIDVWIFZCVVMKKyAqICAtIDE3MTAgY3VzdG9tIGRldmVsb3BtZW50IGJvYXJkIHVzaW5nIGFsdGVybmF0ZSBwaW4gZ3JvdXAKKyAqICAtIDE3MTAgSDMgKHdpdGggdXNiMSBtaW5pLUFCKSB1c2luZyBzdGFuZGFyZCBNaW5pLUIgb3IgT1RHIGNhYmxlcworICovCisKKyNkZWZpbmUgSU5UX1VTQl9JUlFfR0VOCQlJSDJfQkFTRSArIDIwCisjZGVmaW5lIElOVF9VU0JfSVJRX05JU08JSUgyX0JBU0UgKyAzMAorI2RlZmluZSBJTlRfVVNCX0lSUV9JU08JCUlIMl9CQVNFICsgMjkKKyNkZWZpbmUgSU5UX1VTQl9JUlFfSEdFTglJTlRfVVNCX0hIQ18xCisjZGVmaW5lIElOVF9VU0JfSVJRX09URwkJSUgyX0JBU0UgKyA4CisKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWRjX3Jlc291cmNlc1tdID0geworCS8qIG9yZGVyIGlzIHNpZ25pZmljYW50ISAqLworCXsJCS8qIHJlZ2lzdGVycyAqLworCQkuc3RhcnQJCT0gVURDX0JBU0UsCisJCS5lbmQJCT0gVURDX0JBU0UgKyAweGZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewkJLyogZ2VuZXJhbCBJUlEgKi8KKwkJLnN0YXJ0CQk9IElOVF9VU0JfSVJRX0dFTiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsJCS8qIFBJTyBJUlEgKi8KKwkJLnN0YXJ0CQk9IElOVF9VU0JfSVJRX05JU08sCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CQkvKiBTT0YgSVJRICovCisJCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9JU08sCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCB1ZGNfZG1hbWFzayA9IH4odTMyKTA7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHVkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBfdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZ1ZGNfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1ZGNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1ZGNfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHVkY19kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKKwkvKiBJUlEgbnVtYmVycyBmb3Igb21hcDd4eCAqLworCWlmKGNwdV9pc19vbWFwN3h4KCkpIHsKKwkJdWRjX3Jlc291cmNlc1sxXS5zdGFydCA9IElOVF83WFhfVVNCX0dFTkk7CisJCXVkY19yZXNvdXJjZXNbMl0uc3RhcnQgPSBJTlRfN1hYX1VTQl9OT05fSVNPOworCQl1ZGNfcmVzb3VyY2VzWzNdLnN0YXJ0ID0gSU5UXzdYWF9VU0JfSVNPOworCX0KKwlwZGF0YS0+dWRjX2RldmljZSA9ICZ1ZGNfZGV2aWNlOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWRjX2RldmljZV9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworfQorCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKKworLyogVGhlIGRtYW1hc2sgbXVzdCBiZSBzZXQgZm9yIE9IQ0kgdG8gd29yayAqLworc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9oY2lfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPTUFQX09IQ0lfQkFTRSwKKwkJLmVuZAk9IE9NQVBfT0hDSV9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElOVF9VU0JfSVJRX0hHRU4sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvaGNpX2RldmljZSA9IHsKKwkubmFtZQkJCT0gIm9oY2kiLAorCS5pZAkJCT0gLTEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9ICZvaGNpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob2hjaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBvaGNpX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaGNpX2RldmljZV9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQlvaGNpX3Jlc291cmNlc1sxXS5zdGFydCA9IElOVF83WFhfVVNCX0hIQ18xOworCXBkYXRhLT5vaGNpX2RldmljZSA9ICZvaGNpX2RldmljZTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIG9oY2lfZGV2aWNlX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCit7Cit9CisKKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfVVNCX09URykgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQX09URykKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdGdfcmVzb3VyY2VzW10gPSB7CisJLyogb3JkZXIgaXMgc2lnbmlmaWNhbnQhICovCisJeworCQkuc3RhcnQJCT0gT1RHX0JBU0UsCisJCS5lbmQJCT0gT1RHX0JBU0UgKyAweGZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJCT0gSU5UX1VTQl9JUlFfT1RHLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG90Z19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBfb3RnIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG90Z19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb3RnX2RldmljZV9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCQlvdGdfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gSU5UXzdYWF9VU0JfT1RHOworCXBkYXRhLT5vdGdfZGV2aWNlID0gJm90Z19kZXZpY2U7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdGdfZGV2aWNlX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCit7Cit9CisKKyNlbmRpZgorCit1MzIgX19pbml0IG9tYXAxX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKK3sKKwl1MzIJc3lzY29uMSA9IDA7CisKKwlpZiAobndpcmVzID09IDApIHsKKwkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgeworCQkJdTMyIGw7CisKKwkJCS8qIHB1bGxkb3duIEQrL0QtICovCisJCQlsID0gb21hcF9yZWFkbChVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJCQlsICY9IH4oMyA8PCAxKTsKKwkJCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaXNfZGV2aWNlKSB7CisJCWlmIChjcHVfaXNfb21hcDd4eCgpKSB7CisJCQlvbWFwX2NmZ19yZWcoQUExN183WFhfVVNCX0RNKTsKKwkJCW9tYXBfY2ZnX3JlZyhXMTZfN1hYX1VTQl9QVV9FTik7CisJCQlvbWFwX2NmZ19yZWcoVzE3XzdYWF9VU0JfVkJVU0kpOworCQkJb21hcF9jZmdfcmVnKFcxOF83WFhfVVNCX0RNQ0tfT1VUKTsKKwkJCW9tYXBfY2ZnX3JlZyhXMTlfN1hYX1VTQl9EQ1JTVCk7CisJCX0gZWxzZQorCQkJb21hcF9jZmdfcmVnKFc0X1VTQl9QVUVOKTsKKwl9CisKKwlpZiAobndpcmVzID09IDIpIHsKKwkJdTMyIGw7CisKKwkJLy8gb21hcF9jZmdfcmVnKFA5X1VTQl9EUCk7CisJCS8vIG9tYXBfY2ZnX3JlZyhSOF9VU0JfRE0pOworCisJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkJLyogVGhpcyB3b3JrcyBvbiAxNTEwLUlubm92YXRvciAqLworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBOT1RFUzoKKwkJICogIC0gcGVyaXBoZXJhbCBzaG91bGQgY29uZmlndXJlIFZCVVMgZGV0ZWN0aW9uIQorCQkgKiAgLSBvbmx5IHBlcmlwaGVyYWxzIG1heSB1c2UgdGhlIGludGVybmFsIEQrL0QtIHB1bGxkb3ducworCQkgKiAgLSBPVEcgc3VwcG9ydCBvbiB0aGlzIHBvcnQgbm90IHlldCB3cml0dGVuCisJCSAqLworCisJCS8qIERvbid0IGRvIHRoaXMgZm9yIG9tYXA3eHggLS0gaXQgY2F1c2VzIFVTQiB0byBub3Qgd29yayBjb3JyZWN0bHkgKi8KKwkJaWYgKCFjcHVfaXNfb21hcDd4eCgpKSB7CisJCQlsID0gb21hcF9yZWFkbChVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJCQlsICY9IH4oNyA8PCA0KTsKKwkJCWlmICghaXNfZGV2aWNlKQorCQkJCWwgfD0gKDMgPDwgMSk7CisJCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJCX0KKworCQlyZXR1cm4gMyA8PCAxNjsKKwl9CisKKwkvKiBhbHRlcm5hdGUgcGluIGNvbmZpZywgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJubyB1c2IwIGFsdCBwaW4gY29uZmlnIG9uIDE1eHhcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvbWFwX2NmZ19yZWcoVjZfVVNCMF9UWEQpOworCW9tYXBfY2ZnX3JlZyhXOV9VU0IwX1RYRU4pOworCW9tYXBfY2ZnX3JlZyhXNV9VU0IwX1NFMCk7CisJaWYgKG53aXJlcyAhPSAzKQorCQlvbWFwX2NmZ19yZWcoWTVfVVNCMF9SQ1YpOworCisJLyogTk9URTogIFNQRUVEIGFuZCBTVVNQIGFyZW4ndCBjb25maWd1cmVkIGhlcmUuICBPVEcgaG9zdHMKKwkgKiBtYXkgYmUgYWJsZSB0byB1c2UgSTJDIHJlcXVlc3RzIHRvIHNldCB0aG9zZSBiaXRzIGFsb25nCisJICogd2l0aCBWQlVTIHN3aXRjaGluZyBhbmQgb3ZlcmN1cnJlbnQgZGV0ZWN0aW9uLgorCSAqLworCisJaWYgKG53aXJlcyAhPSA2KSB7CisJCXUzMiBsOworCisJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJbCAmPSB+Q09ORl9VU0IyX1VOSV9SOworCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJfQorCisJc3dpdGNoIChud2lyZXMpIHsKKwljYXNlIDM6CisJCXN5c2NvbjEgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c2NvbjEgPSAzOworCQl7CisJCQl1MzIgbDsKKworCQkJb21hcF9jZmdfcmVnKEFBOV9VU0IwX1ZQKTsKKwkJCW9tYXBfY2ZnX3JlZyhSOV9VU0IwX1ZNKTsKKwkJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJCWwgfD0gQ09ORl9VU0IyX1VOSV9SOworCQkJb21hcF93cml0ZWwobCwgVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAorCQkJMCwgbndpcmVzKTsKKwl9CisKKwlyZXR1cm4gc3lzY29uMSA8PCAxNjsKK30KKwordTMyIF9faW5pdCBvbWFwMV91c2IxX2luaXQodW5zaWduZWQgbndpcmVzKQoreworCXUzMglzeXNjb24xID0gMDsKKworCWlmICghY3B1X2lzX29tYXAxNXh4KCkgJiYgbndpcmVzICE9IDYpIHsKKwkJdTMyIGw7CisKKwkJbCA9IG9tYXBfcmVhZGwoVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOworCQlsICY9IH5DT05GX1VTQjFfVU5JX1I7CisJCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwl9CisJaWYgKG53aXJlcyA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIGV4dGVybmFsIHRyYW5zY2VpdmVyICovCisJb21hcF9jZmdfcmVnKFVTQjFfVFhEKTsKKwlvbWFwX2NmZ19yZWcoVVNCMV9UWEVOKTsKKwlpZiAobndpcmVzICE9IDMpCisJCW9tYXBfY2ZnX3JlZyhVU0IxX1JDVik7CisKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJb21hcF9jZmdfcmVnKFVTQjFfU0VPKTsKKwkJb21hcF9jZmdfcmVnKFVTQjFfU1BFRUQpOworCQkvLyBTVVNQCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDU5MTIoKSkgeworCQlvbWFwX2NmZ19yZWcoVzEzXzE2MTBfVVNCMV9TRTApOworCQlvbWFwX2NmZ19yZWcoUjEzXzE2MTBfVVNCMV9TUEVFRCk7CisJCS8vIFNVU1AKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTcxMCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhSMTNfMTcxMF9VU0IxX1NFMCk7CisJCS8vIFNVU1AKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygidXNiJWQgY3B1IHVucmVjb2duaXplZFxuIiwgMSk7CisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAobndpcmVzKSB7CisJY2FzZSAyOgorCQlnb3RvIGJhZDsKKwljYXNlIDM6CisJCXN5c2NvbjEgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c2NvbjEgPSAzOworCQlvbWFwX2NmZ19yZWcoVVNCMV9WUCk7CisJCW9tYXBfY2ZnX3JlZyhVU0IxX1ZNKTsKKwkJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkgeworCQkJdTMyIGw7CisKKwkJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJCWwgfD0gQ09ORl9VU0IxX1VOSV9SOworCQkJb21hcF93cml0ZWwobCwgVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CitiYWQ6CisJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAorCQkJMSwgbndpcmVzKTsKKwl9CisKKwlyZXR1cm4gc3lzY29uMSA8PCAyMDsKK30KKwordTMyIF9faW5pdCBvbWFwMV91c2IyX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBhbHRfcGluZ3JvdXApCit7CisJdTMyCXN5c2NvbjEgPSAwOworCisJLyogTk9URSBvbWFwMSBlcnJhdHVtOiBtdXN0IGxlYXZlIFVTQjJfVU5JX1Igc2V0IGlmIHVzYjAgaW4gdXNlICovCisJaWYgKGFsdF9waW5ncm91cCB8fCBud2lyZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpICYmIG53aXJlcyAhPSA2KSB7CisJCXUzMiBsOworCisJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJbCAmPSB+Q09ORl9VU0IyX1VOSV9SOworCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJfQorCisJLyogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJb21hcF9jZmdfcmVnKFVTQjJfVFhEKTsKKwkJb21hcF9jZmdfcmVnKFVTQjJfVFhFTik7CisJCW9tYXBfY2ZnX3JlZyhVU0IyX1NFTyk7CisJCWlmIChud2lyZXMgIT0gMykKKwkJCW9tYXBfY2ZnX3JlZyhVU0IyX1JDVik7CisJCS8qIHRoZXJlIGlzIG5vIFVTQjJfU1BFRUQgKi8KKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhWNl9VU0IyX1RYRCk7CisJCW9tYXBfY2ZnX3JlZyhXOV9VU0IyX1RYRU4pOworCQlvbWFwX2NmZ19yZWcoVzVfVVNCMl9TRTApOworCQlpZiAobndpcmVzICE9IDMpCisJCQlvbWFwX2NmZ19yZWcoWTVfVVNCMl9SQ1YpOworCQkvLyBGSVhNRSBvbWFwX2NmZ19yZWcoVVNCMl9TUEVFRCk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInVzYiVkIGNwdSB1bnJlY29nbml6ZWRcbiIsIDEpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvLyBvbWFwX2NmZ19yZWcoVVNCMl9TVVNQKTsKKworCXN3aXRjaCAobndpcmVzKSB7CisJY2FzZSAyOgorCQlnb3RvIGJhZDsKKwljYXNlIDM6CisJCXN5c2NvbjEgPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlicmVhazsKKwljYXNlIDU6CisJCWdvdG8gYmFkOworCWNhc2UgNjoKKwkJc3lzY29uMSA9IDM7CisJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQkJb21hcF9jZmdfcmVnKFVTQjJfVlApOworCQkJb21hcF9jZmdfcmVnKFVTQjJfVk0pOworCQl9IGVsc2UgeworCQkJdTMyIGw7CisKKwkJCW9tYXBfY2ZnX3JlZyhBQTlfVVNCMl9WUCk7CisJCQlvbWFwX2NmZ19yZWcoUjlfVVNCMl9WTSk7CisJCQlsID0gb21hcF9yZWFkbChVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CisJCQlsIHw9IENPTkZfVVNCMl9VTklfUjsKKwkJCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorYmFkOgorCQlwcmludGsoS0VSTl9FUlIgImlsbGVnYWwgdXNiJWQgJWQtd2lyZSB0cmFuc2NlaXZlclxuIiwKKwkJCTIsIG53aXJlcyk7CisJfQorCisJcmV0dXJuIHN5c2NvbjEgPDwgMjQ7Cit9CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTVYWAorCisvKiBVTFBEX0RQTExfQ1RSTCAqLworI2RlZmluZSBEUExMX0lPQgkJKDEgPDwgMTMpCisjZGVmaW5lIERQTExfUExMX0VOQUJMRQkJKDEgPDwgNCkKKyNkZWZpbmUgRFBMTF9MT0NLCQkoMSA8PCAwKQorCisvKiBVTFBEX0FQTExfQ1RSTCAqLworI2RlZmluZSBBUExMX05EUExMX1NXSVRDSAkoMSA8PCAwKQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8xNTEwX3VzYl9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCXUxNiB3OworCisJY29uZmlnLT51c2IwX2luaXQoY29uZmlnLT5waW5zWzBdLCBpc191c2IwX2RldmljZShjb25maWcpKTsKKwljb25maWctPnVzYjFfaW5pdChjb25maWctPnBpbnNbMV0pOworCWNvbmZpZy0+dXNiMl9pbml0KGNvbmZpZy0+cGluc1syXSwgMCk7CisKKwl2YWwgPSBvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMCkgJiB+KDB4M2YgPDwgMSk7CisJdmFsIHw9IChjb25maWctPmhtY19tb2RlIDw8IDEpOworCW9tYXBfd3JpdGVsKHZhbCwgTU9EX0NPTkZfQ1RSTF8wKTsKKworCXByaW50aygiVVNCOiBobWMgJWQiLCBjb25maWctPmhtY19tb2RlKTsKKwlpZiAoY29uZmlnLT5waW5zWzBdKQorCQlwcmludGsoIiwgdXNiMCAlZCB3aXJlcyVzIiwgY29uZmlnLT5waW5zWzBdLAorCQkJaXNfdXNiMF9kZXZpY2UoY29uZmlnKSA/ICIgKGRldikiIDogIiIpOworCWlmIChjb25maWctPnBpbnNbMV0pCisJCXByaW50aygiLCB1c2IxICVkIHdpcmVzIiwgY29uZmlnLT5waW5zWzFdKTsKKwlpZiAoY29uZmlnLT5waW5zWzJdKQorCQlwcmludGsoIiwgdXNiMiAlZCB3aXJlcyIsIGNvbmZpZy0+cGluc1syXSk7CisJcHJpbnRrKCJcbiIpOworCisJLyogdXNlIERQTEwgZm9yIDQ4IE1IeiBmdW5jdGlvbiBjbG9jayAqLworCXByX2RlYnVnKCJBUExMICUwNHggRFBMTCAlMDR4IFJFUSAlMDR4XG4iLCBvbWFwX3JlYWR3KFVMUERfQVBMTF9DVFJMKSwKKwkJCW9tYXBfcmVhZHcoVUxQRF9EUExMX0NUUkwpLCBvbWFwX3JlYWR3KFVMUERfU09GVF9SRVEpKTsKKworCXcgPSBvbWFwX3JlYWR3KFVMUERfQVBMTF9DVFJMKTsKKwl3ICY9IH5BUExMX05EUExMX1NXSVRDSDsKKwlvbWFwX3dyaXRldyh3LCBVTFBEX0FQTExfQ1RSTCk7CisKKwl3ID0gb21hcF9yZWFkdyhVTFBEX0RQTExfQ1RSTCk7CisJdyB8PSBEUExMX0lPQiB8IERQTExfUExMX0VOQUJMRTsKKwlvbWFwX3dyaXRldyh3LCBVTFBEX0RQTExfQ1RSTCk7CisKKwl3ID0gb21hcF9yZWFkdyhVTFBEX1NPRlRfUkVRKTsKKwl3IHw9IFNPRlRfVURDX1JFUSB8IFNPRlRfRFBMTF9SRVE7CisJb21hcF93cml0ZXcodywgVUxQRF9TT0ZUX1JFUSk7CisKKwl3aGlsZSAoIShvbWFwX3JlYWR3KFVMUERfRFBMTF9DVFJMKSAmIERQTExfTE9DSykpCisJCWNwdV9yZWxheCgpOworCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAorCWlmIChjb25maWctPnJlZ2lzdGVyX2RldikgeworCQlpbnQgc3RhdHVzOworCisJCXVkY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CisJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWRjX2RldmljZSk7CisJCWlmIChzdGF0dXMpCisJCQlwcl9kZWJ1ZygiY2FuJ3QgcmVnaXN0ZXIgVURDIGRldmljZSwgJWRcbiIsIHN0YXR1cyk7CisJCS8qIHVkYyBkcml2ZXIgZ2F0ZXMgNDhNSHogYnkgRCsgcHVsbHVwICovCisJfQorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisJaWYgKGNvbmZpZy0+cmVnaXN0ZXJfaG9zdCkgeworCQlpbnQgc3RhdHVzOworCisJCW9oY2lfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gY29uZmlnOworCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9oY2lfZGV2aWNlKTsKKwkJaWYgKHN0YXR1cykKKwkJCXByX2RlYnVnKCJjYW4ndCByZWdpc3RlciBPSENJIGRldmljZSwgJWRcbiIsIHN0YXR1cyk7CisJCS8qIGhjZCBleHBsaWNpdGx5IGdhdGVzIDQ4TUh6ICovCisJfQorI2VuZGlmCit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF8xNTEwX3VzYl9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKmNvbmZpZykge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBvbWFwMV91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKKwlwZGF0YS0+dXNiMF9pbml0ID0gb21hcDFfdXNiMF9pbml0OworCXBkYXRhLT51c2IxX2luaXQgPSBvbWFwMV91c2IxX2luaXQ7CisJcGRhdGEtPnVzYjJfaW5pdCA9IG9tYXAxX3VzYjJfaW5pdDsKKwl1ZGNfZGV2aWNlX2luaXQocGRhdGEpOworCW9oY2lfZGV2aWNlX2luaXQocGRhdGEpOworCW90Z19kZXZpY2VfaW5pdChwZGF0YSk7CisKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkKKwkJb21hcF9vdGdfaW5pdChwZGF0YSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCisJCW9tYXBfMTUxMF91c2JfaW5pdChwZGF0YSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIlVTQjogTm8gaW5pdCBmb3IgeW91ciBjaGlwIHlldFxuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggYjMxYjZmMS4uYjQ4YmFjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMSwyMiArMSw3NyBAQAoraWYgQVJDSF9PTUFQMlBMVVMKKworbWVudSAiVEkgT01BUDIvMy80IFNwZWNpZmljIEZlYXR1cmVzIgorCitjb25maWcgQVJDSF9PTUFQMlBMVVNfVFlQSUNBTAorCWJvb2wgIlR5cGljYWwgT01BUCBjb25maWd1cmF0aW9uIgorCWRlZmF1bHQgeQorCXNlbGVjdCBBRUFCSQorCXNlbGVjdCBSRUdVTEFUT1IKKwlzZWxlY3QgUE0KKwlzZWxlY3QgUE1fUlVOVElNRQorCXNlbGVjdCBWRlAKKwlzZWxlY3QgTkVPTiBpZiBBUkNIX09NQVAzIHx8IEFSQ0hfT01BUDQKKwlzZWxlY3QgU0VSSUFMXzgyNTAKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCXNlbGVjdCBTRVJJQUxfODI1MF9DT05TT0xFCisJc2VsZWN0IEkyQworCXNlbGVjdCBJMkNfT01BUAorCXNlbGVjdCBNRkQKKwlzZWxlY3QgTUVORUxBVVMgaWYgQVJDSF9PTUFQMgorCXNlbGVjdCBUV0w0MDMwX0NPUkUgaWYgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CisJc2VsZWN0IFRXTDQwMzBfUE9XRVIgaWYgQVJDSF9PTUFQMyB8fCBBUkNIX09NQVA0CisJaGVscAorCSAgQ29tcGlsZSBhIGtlcm5lbCBzdWl0YWJsZSBmb3IgYm9vdGluZyBtb3N0IGJvYXJkcworCitjb25maWcgQVJDSF9PTUFQMgorCWJvb2wgIlRJIE9NQVAyIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKKwlkZWZhdWx0IHkKKwlzZWxlY3QgQ1BVX1Y2CisKK2NvbmZpZyBBUkNIX09NQVAzCisJYm9vbCAiVEkgT01BUDMiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUworCWRlZmF1bHQgeQorCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKKwlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKKworY29uZmlnIEFSQ0hfT01BUDQKKwlib29sICJUSSBPTUFQNCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCisJc2VsZWN0IENQVV9WNworCXNlbGVjdCBBUk1fR0lDCisKIGNvbW1lbnQgIk9NQVAgQ29yZSBUeXBlIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCiBjb25maWcgQVJDSF9PTUFQMjQyMAogCWJvb2wgIk9NQVAyNDIwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfRE1fVElNRVIKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb25maWcgQVJDSF9PTUFQMjQzMAogCWJvb2wgIk9NQVAyNDMwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisJZGVmYXVsdCB5CiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAogY29uZmlnIEFSQ0hfT01BUDM0MzAKIAlib29sICJPTUFQMzQzMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQogCXNlbGVjdCBBUkNIX09NQVBfT1RHCiAKK2NvbmZpZyBPTUFQX1BBQ0tBR0VfWkFGCisgICAgICAgYm9vbAorCitjb25maWcgT01BUF9QQUNLQUdFX1pBQworICAgICAgIGJvb2wKKwogY29uZmlnIE9NQVBfUEFDS0FHRV9DQkMKICAgICAgICBib29sCiAKQEAgLTM1LDYgKzkwLDcgQEAKIGNvbmZpZyBNQUNIX09NQVBfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKwlkZWZhdWx0IHkKIAogY29uZmlnIE1BQ0hfT01BUDJfVFVTQjYwMTAKIAlib29sCkBAIC00NCw2MCArMTAwLDc1IEBACiBjb25maWcgTUFDSF9PTUFQX0g0CiAJYm9vbCAiT01BUCAyNDIwIEg0IGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCWRlZmF1bHQgeQorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfWkFGCiAJc2VsZWN0IE9NQVBfREVCVUdfREVWSUNFUwogCiBjb25maWcgTUFDSF9PTUFQX0FQT0xMT04KIAlib29sICJPTUFQIDI0MjAgQXBvbGxvbiBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKwlkZWZhdWx0IHkKKwlzZWxlY3QgT01BUF9QQUNLQUdFX1pBQwogCiBjb25maWcgTUFDSF9PTUFQXzI0MzBTRFAKIAlib29sICJPTUFQIDI0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCWRlZmF1bHQgeQorCXNlbGVjdCBPTUFQX1BBQ0tBR0VfWkFDCiAKIGNvbmZpZyBNQUNIX09NQVAzX0JFQUdMRQogCWJvb2wgIk9NQVAzIEJFQUdMRSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9ERVZLSVQ4MDAwCiAJYm9vbCAiREVWS0lUODAwMCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUwogCXNlbGVjdCBPTUFQX01VWAogCiBjb25maWcgTUFDSF9PTUFQX0xEUAogCWJvb2wgIk9NQVAzIExEUCBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PVkVSTwogCWJvb2wgIkd1bXN0aXggT3Zlcm8gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUDNFVk0KIAlib29sICJPTUFQIDM1MzAgRVZNIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVAzNTE3RVZNCiAJYm9vbCAiT01BUDM1MTcvIEFNMzUxNyBFVk0gYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUDNfUEFORE9SQQogCWJvb2wgIk9NQVAzIFBhbmRvcmEiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUDNfVE9VQ0hCT09LCiAJYm9vbCAiT01BUDMgVG91Y2ggQm9vayIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCiBjb25maWcgTUFDSF9PTUFQXzM0MzBTRFAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX05PS0lBX044MDAKQEAgLTExMiw2ICsxODMsOCBAQAogY29uZmlnIE1BQ0hfTk9LSUFfTjhYMAogCWJvb2wgIk5va2lhIE44MDAvTjgxMCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MjAKKwlkZWZhdWx0IHkKKwlzZWxlY3QgT01BUF9QQUNLQUdFX1pBQwogCXNlbGVjdCBNQUNIX05PS0lBX044MDAKIAlzZWxlY3QgTUFDSF9OT0tJQV9OODEwCiAJc2VsZWN0IE1BQ0hfTk9LSUFfTjgxMF9XSU1BWApAQCAtMTE5LDQyICsxOTIsNTUgQEAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQX1pPT00yCiAJYm9vbCAiT01BUDMgWm9vbTIgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUF9aT09NMwogCWJvb2wgIk9NQVAzNjMwIFpvb20zIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JQCiAKIGNvbmZpZyBNQUNIX0NNX1QzNQogCWJvb2wgIkNvbXB1TGFiIENNLVQzNSBtb2R1bGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DVVMKIAlzZWxlY3QgT01BUF9NVVgKIAogY29uZmlnIE1BQ0hfSUdFUDAwMjAKIAlib29sICJJR0VQIHYyIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMworCWRlZmF1bHQgeQogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX1NCQzM1MzAKIAlib29sICJPTUFQMyBTQkMgU1RBTEtFUiBib2FyZCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlkZWZhdWx0IHkKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUwogCXNlbGVjdCBPTUFQX01VWAogCiBjb25maWcgTUFDSF9PTUFQXzM2MzBTRFAKIAlib29sICJPTUFQMzYzMCBTRFAgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAzCisJZGVmYXVsdCB5CiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQlAKIAogY29uZmlnIE1BQ0hfT01BUF80NDMwU0RQCiAJYm9vbCAiT01BUCA0NDMwIFNEUCBib2FyZCIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDQKKworY29uZmlnIE1BQ0hfT01BUDRfUEFOREEKKwlib29sICJPTUFQNCBQYW5kYSBCb2FyZCIKKwlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDQKIAogY29uZmlnIE9NQVAzX0VNVQpAQCAtMTc2LDMgKzI2Miw2IEBACiAJICB3aXNoIHRvIHNheSBuby4gIFNlbGVjdGluZyB5ZXMgd2l0aG91dCB1bmRlcnN0YW5kaW5nIHdoYXQgaXMKIAkgIGdvaW5nIG9uIGNvdWxkIHJlc3VsdCBpbiBzeXN0ZW0gY3Jhc2hlczsKIAorZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggZWE1MmIwMy4uNjNiMmQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpZC5vIGlvLm8gY29udHJvbC5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubyBncG1jLm8gdGltZXItZ3Aubworb2JqLXkgOj0gaWQubyBpby5vIGNvbnRyb2wubyBtdXgubyBkZXZpY2VzLm8gc2VyaWFsLm8gZ3BtYy5vIHRpbWVyLWdwLm8gcG0ubwogCiBvbWFwLTItMy1jb21tb24JCQkJPSBpcnEubyBzZHJjLm8KIGh3bW9kLWNvbW1vbgkJCQk9IG9tYXBfaHdtb2QubyBcCkBAIC0xNSwxMyArMTUsMTQgQEAKIAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGh3bW9kLWNvbW1vbikKIG9iai0kKENPTkZJR19BUkNIX09NQVAzKSArPSAkKG9tYXAtMi0zLWNvbW1vbikgJChwcmNtLWNvbW1vbikgJChod21vZC1jb21tb24pCi1vYmotJChDT05GSUdfQVJDSF9PTUFQNCkgKz0gJChwcmNtLWNvbW1vbikKK29iai0kKENPTkZJR19BUkNIX09NQVA0KSArPSAkKHByY20tY29tbW9uKSAkKGh3bW9kLWNvbW1vbikKIAogb2JqLSQoQ09ORklHX09NQVBfTUNCU1ApICs9IG1jYnNwLm8KIAogIyBTTVAgc3VwcG9ydCBPTkxZIGF2YWlsYWJsZSBmb3IgT01BUDQKIG9iai0kKENPTkZJR19TTVApCQkJKz0gb21hcC1zbXAubyBvbWFwLWhlYWRzbXAubwogb2JqLSQoQ09ORklHX0xPQ0FMX1RJTUVSUykJCSs9IHRpbWVyLW1wdS5vCitvYmotJChDT05GSUdfSE9UUExVR19DUFUpCQkrPSBvbWFwLWhvdHBsdWcubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBvbWFwNDR4eC1zbWMubyBvbWFwNC1jb21tb24ubwogCiBBRkxBR1Nfb21hcDQ0eHgtc21jLm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQpAQCAtMzYsNiArMzcsOCBAQAogQUZMQUdTX3NyYW0zNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQogCiAjIFBpbiBtdWx0aXBsZXhpbmcKK29iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gbXV4MjQyMC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IG11eDI0MzAubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBtdXgzNHh4Lm8KIAogIyBTTVMvU0RSQwpAQCAtNDcsNiArNTAsNyBAQAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBwbTI0eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzbGVlcDI0eHgubwogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDMpCQkrPSBwbTM0eHgubyBzbGVlcDM0eHgubyBjcHVpZGxlMzR4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vCiBvYmotJChDT05GSUdfUE1fREVCVUcpCQkJKz0gcG0tZGVidWcubwogCiBBRkxBR1Nfc2xlZXAyNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjYKQEAgLTg5LDcgKzkzLDEwIEBACiBvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykJCSs9IG1haWxib3hfbWFjaC5vCiBtYWlsYm94X21hY2gtb2JqcwkJCTo9IG1haWxib3gubwogCi1vYmotJChDT05GSUdfT01BUF9JT01NVSkJCTo9IGlvbW11Mi5vIG9tYXAtaW9tbXUubworb2JqLSQoQ09ORklHX09NQVBfSU9NTVUpCQkrPSBpb21tdTIubworCitpb21tdS0kKENPTkZJR19PTUFQX0lPTU1VKQkJOj0gb21hcC1pb21tdS5vCitvYmoteQkJCQkJKz0gJChpb21tdS1tKSAkKGlvbW11LXkpCiAKIGkyYy1vbWFwLSQoQ09ORklHX0kyQ19PTUFQKQkJOj0gaTJjLm8KIG9iai15CQkJCQkrPSAkKGkyYy1vbWFwLW0pICQoaTJjLW9tYXAteSkKQEAgLTEwNSw2ICsxMTIsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfREVWS0lUODAwMCkgICAgIAkrPSBib2FyZC1kZXZraXQ4MDAwLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8gXAorCQkJCQkgICBib2FyZC1mbGFzaC5vIFwKIAkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT1ZFUk8pCQkrPSBib2FyZC1vdmVyby5vIFwKIAkJCQkJICAgaHNtbWMubwpAQCAtMTE0LDcgKzEyMiw3IEBACiAJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCkJCSs9IGJvYXJkLTM0MzBzZHAubyBcCiAJCQkJCSAgIGhzbW1jLm8gXAotCQkJCQkgICBib2FyZC1zZHAtZmxhc2gubworCQkJCQkgICBib2FyZC1mbGFzaC5vCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9OOFgwKQkJKz0gYm9hcmQtbjh4MC5vCiBvYmotJChDT05GSUdfTUFDSF9OT0tJQV9SWDUxKQkJKz0gYm9hcmQtcng1MS5vIFwKIAkJCQkJICAgYm9hcmQtcng1MS1zZHJhbS5vIFwKQEAgLTEyMywxNCArMTMxLDE3IEBACiAJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfWk9PTTIpCQkrPSBib2FyZC16b29tMi5vIFwKIAkJCQkJICAgYm9hcmQtem9vbS1wZXJpcGhlcmFscy5vIFwKKwkJCQkJICAgYm9hcmQtZmxhc2gubyBcCiAJCQkJCSAgIGhzbW1jLm8gXAogCQkJCQkgICBib2FyZC16b29tLWRlYnVnYm9hcmQubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9aT09NMykJCSs9IGJvYXJkLXpvb20zLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAorCQkJCQkgICBib2FyZC1mbGFzaC5vIFwKIAkJCQkJICAgaHNtbWMubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tZGVidWdib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFApCQkrPSBib2FyZC0zNjMwc2RwLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAorCQkJCQkgICBib2FyZC1mbGFzaC5vIFwKIAkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfQ01fVDM1KQkJKz0gYm9hcmQtY20tdDM1Lm8gXAogCQkJCQkgICBoc21tYy5vCkBAIC0xNDAsMTIgKzE1MSwxNiBAQAogCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzQ0MzBTRFApCQkrPSBib2FyZC00NDMwc2RwLm8gXAogCQkJCQkgICBoc21tYy5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQNF9QQU5EQSkJCSs9IGJvYXJkLW9tYXA0cGFuZGEubyBcCisJCQkJCSAgIGhzbW1jLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfT01BUDM1MTdFVk0pCQkrPSBib2FyZC1hbTM1MTdldm0ubwogCiBvYmotJChDT05GSUdfTUFDSF9TQkMzNTMwKQkJKz0gYm9hcmQtb21hcDNzdGFsa2VyLm8gXAogCQkJCQkgICBoc21tYy5vCiAjIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0IGNvZGUKK3VzYmZzLSQoQ09ORklHX0FSQ0hfT01BUF9PVEcpCQk6PSB1c2ItZnMubworb2JqLXkJCQkJCSs9ICQodXNiZnMtbSkgJCh1c2Jmcy15KQogb2JqLXkJCQkJCSs9IHVzYi1tdXNiLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAyX1RVU0I2MDEwKQkrPSB1c2ItdHVzYjYwMTAubwogb2JqLXkJCQkJCSs9IHVzYi1laGNpLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKaW5kZXggNDJmNDlmNy4uODUzOGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMKQEAgLTMxLDEzICszMSwxMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAorI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgU0RQMjQzMF9DUzBfQkFTRQkweDA0MDAwMDAwCkBAIC0xMjIsMTEgKzEyMiw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBib2FyZF9zbWM5MXhfaW5pdCh2b2lkKQogewotCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQotCQlib2FyZF9zbWM5MXhfZGF0YS5ncGlvX2lycSA9IDY7Ci0JZWxzZQotCQlib2FyZF9zbWM5MXhfZGF0YS5ncGlvX2lycSA9IDI5OwotCisJb21hcF9tdXhfaW5pdF9ncGlvKDE0OSwgT01BUF9QSU5fSU5QVVQpOwogCWdwbWNfc21jOTF4X2luaXQoJmJvYXJkX3NtYzkxeF9kYXRhKTsKIH0KIApAQCAtMjE3LDE3ICsyMTMsMzAgQEAKIAkucGluc1swXQk9IDMsCiB9OwogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBib2FyZF9tdXgJTlVMTAorI2VuZGlmCisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKKwlvbWFwMjQzMF9tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9aQUMpOworCiAJb21hcDI0MzBfaTJjX2luaXQoKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDI0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHAyNDMwX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcDJfaHNtbWNfaW5pdChtbWMpOwotCW9tYXBfdXNiX2luaXQoJnNkcDI0MzBfdXNiX2NvbmZpZyk7CisJb21hcDJfdXNiZnNfaW5pdCgmc2RwMjQzMF91c2JfY29uZmlnKTsKKworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2IwaHNfc3RwIiwgT01BUF9QVUxMX0VOQSB8IE9NQVBfUFVMTF9VUCk7CiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwogCWJvYXJkX3NtYzkxeF9pbml0KCk7CiAKIAkvKiBUdXJuIG9mZiBzZWNvbmRhcnkgTENEIGJhY2tsaWdodCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBkZDljMDMxLi42N2I5NWI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMtc21jOTF4Lmg+CiAKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXNkcC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtZmxhc2guaD4KIAogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpAQCAtNjY3LDYgKzY2NywxOCBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKKy8qCisgKiBTRFAzNDMwIFYyIEJvYXJkIENTIG9yZ2FuaXphdGlvbgorICogRGlmZmVyZW50IGZyb20gU0RQMzQzMCBWMS4gTm93IDQgc3dpdGNoZXMgdXNlZCB0byBzcGVjaWZ5IENTCisgKgorICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCisgKi8KK3N0YXRpYyBjaGFyIGNoaXBfc2VsXzM0MzBbXVtHUE1DX0NTX05VTV0gPSB7CisJe1BEQ19OT1IsIFBEQ19OQU5ELCBQRENfT05FTkFORCwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTExICovCisJe1BEQ19PTkVOQU5ELCBQRENfTkFORCwgUERDX05PUiwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTEwICovCisJe1BEQ19OQU5ELCBQRENfT05FTkFORCwgUERDX05PUiwgREJHX01QREIsIDAsIDAsIDAsIDB9LCAvKiBTODoxMTAxICovCit9OworCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX25vcl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTc5NywyNCArODA5LDE4IEBACiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJYm9hcmRfc21jOTF4X2luaXQoKTsKLQlzZHBfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucyk7CisJYm9hcmRfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucywgY2hpcF9zZWxfMzQzMCk7CiAJc2RwMzQzMF9kaXNwbGF5X2luaXQoKTsKIAllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF8zNDMwc2RwX21hcF9pbyh2b2lkKQotewotCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoT01BUF8zNDMwU0RQLCAiT01BUDM0MzAgMzQzMFNEUCBib2FyZCIpCiAJLyogTWFpbnRhaW5lcjogU3llZCBLaGFzaW0gLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KIAkucGh5c19pbwk9IDB4NDgwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXBfMzQzMHNkcF9tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF8zNDMwc2RwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwXzM0MzBzZHBfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKaW5kZXggNTcyOTBmYi4uYjM1OWMzZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKQEAgLTE4LDEwICsxOCwxMCBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXpvb20uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLWZsYXNoLmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1oeW5peC1oOG1ieDAwdTBtZXItMGVtLmgiCkBAIC02NiwxMiArNjYsNiBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfc2RwX21hcF9pbyh2b2lkKQotewotCW9tYXAyX3NldF9nbG9iYWxzXzM2eHgoKTsKLQlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHNkcF9jb25maWdbXSBfX2luaXRkYXRhID0gewogfTsKIApAQCAtOTMsMTIgKzg3LDEzMSBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKKy8qCisgKiBTRFAzNjMwIENTIG9yZ2FuaXphdGlvbgorICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCisgKi8KK3N0YXRpYyBjaGFyIGNoaXBfc2VsX3NkcFtdW0dQTUNfQ1NfTlVNXSA9IHsKKwl7UERDX05PUiwgUERDX05BTkQsIFBEQ19PTkVOQU5ELCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTEgKi8KKwl7UERDX09ORU5BTkQsIFBEQ19OQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTAgKi8KKwl7UERDX05BTkQsIFBEQ19PTkVOQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfbm9yX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCisJeworCQkubmFtZQkJPSAiQm9vdGxvYWRlci1OT1IiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzI1NkssCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KKwl7CisJCS5uYW1lCQk9ICJQYXJhbXMtTk9SIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzI1NkssCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorCS8qIGtlcm5lbCAqLworCXsKKwkJLm5hbWUJCT0gIktlcm5lbC1OT1IiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfMk0sCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0sCisJLyogZmlsZSBzeXN0ZW0gKi8KKwl7CisJCS5uYW1lCQk9ICJGaWxlc3lzdGVtLU5PUiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwX29uZW5hbmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyLU9uZU5BTkQiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdC1PbmVOQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDIgKiAoNjQgKiAyMDQ4KSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdCBFbnZpcm9ubWVudC1PbmVOQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDEgKiAoNjQgKiAyMDQ4KSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIktlcm5lbC1PbmVOQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDE2ICogKDY0ICogMjA0OCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbS1PbmVOQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJLyogQWxsIHRoZSBwYXJ0aXRpb24gc2l6ZXMgYXJlIGxpc3RlZCBpbiB0ZXJtcyBvZiBOQU5EIGJsb2NrIHNpemUgKi8KKwl7CisJCS5uYW1lCQk9ICJYLUxvYWRlci1OQU5EIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogKDY0ICogMjA0OCksCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDgwMDAwICovCisJCS5zaXplCQk9IDEwICogKDY0ICogMjA0OCksCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJCb290IEVudi1OQU5EIiwKKworCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgxYzAwMDAgKi8KKwkJLnNpemUJCT0gNiAqICg2NCAqIDIwNDgpLAorCX0sCisJeworCQkubmFtZQkJPSAiS2VybmVsLU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUJCT0gNDAgKiAoNjQgKiAyMDQ4KSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkZpbGUgU3lzdGVtIC0gTkFORCIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDc4MDAwMCAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgc2RwX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5wYXJ0cyA9IHNkcF9ub3JfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShzZHBfbm9yX3BhcnRpdGlvbnMpLAorCX0sCisJeworCQkucGFydHMgPSBzZHBfb25lbmFuZF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9vbmVuYW5kX3BhcnRpdGlvbnMpLAorCX0sCisJeworCQkucGFydHMgPSBzZHBfbmFuZF9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9uYW5kX3BhcnRpdGlvbnMpLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9zZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCUCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCXpvb21fcGVyaXBoZXJhbHNfaW5pdCgpOwogCWJvYXJkX3NtYzkxeF9pbml0KCk7CisJYm9hcmRfZmxhc2hfaW5pdChzZHBfZmxhc2hfcGFydGl0aW9ucywgY2hpcF9zZWxfc2RwKTsKIAllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogfQpAQCAtMTA3LDcgKzIyMCw3IEBACiAJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwX3NkcF9tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF9zZHBfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXBfc2RwX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IDRiYjJjNWQuLjk0NDc2NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL29tYXA0LWNvbW1vbi5oPgpAQCAtNDAsNiArNDEsNTQgQEAKICNkZWZpbmUgRVRIX0tTODg1MV9QT1dFUl9PTgkJNDgKICNkZWZpbmUgRVRIX0tTODg1MV9RVUFSVAkJMTM4CiAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgc2RwNDQzMF9ncGlvX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm9tYXA0OmdyZWVuOmRlYnVnMCIsCisJCS5ncGlvCT0gNjEsCisJfSwKKwl7CisJCS5uYW1lCT0gIm9tYXA0OmdyZWVuOmRlYnVnMSIsCisJCS5ncGlvCT0gMzAsCisJfSwKKwl7CisJCS5uYW1lCT0gIm9tYXA0OmdyZWVuOmRlYnVnMiIsCisJCS5ncGlvCT0gNywKKwl9LAorCXsKKwkJLm5hbWUJPSAib21hcDQ6Z3JlZW46ZGVidWczIiwKKwkJLmdwaW8JPSA4LAorCX0sCisJeworCQkubmFtZQk9ICJvbWFwNDpncmVlbjpkZWJ1ZzQiLAorCQkuZ3Bpbwk9IDUwLAorCX0sCisJeworCQkubmFtZQk9ICJvbWFwNDpibHVlOnVzZXIiLAorCQkuZ3Bpbwk9IDE2OSwKKwl9LAorCXsKKwkJLm5hbWUJPSAib21hcDQ6cmVkOnVzZXIiLAorCQkuZ3Bpbwk9IDE3MCwKKwl9LAorCXsKKwkJLm5hbWUJPSAib21hcDQ6Z3JlZW46dXNlciIsCisJCS5ncGlvCT0gMTM5LAorCX0sCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBzZHA0NDMwX2xlZF9kYXRhID0geworCS5sZWRzCT0gc2RwNDQzMF9ncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShzZHA0NDMwX2dwaW9fbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHA0NDMwX2xlZHNfZ3BpbyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNkcDQ0MzBfbGVkX2RhdGEsCisJfSwKK307CiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNkcDQ0MzBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm1vZGFsaWFzICAgICAgICAgICAgICAgPSAia3M4ODUxIiwKQEAgLTExMiw2ICsxNjEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2RwNDQzMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2RwNDQzMF9sY2RfZGV2aWNlLAorCSZzZHA0NDMwX2xlZHNfZ3BpbywKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHNkcDQ0MzBfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewpAQCAtMTU2LDE1ICsyMDYsMTcgQEAKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwNDQzMF92YXV4X3N1cHBseVtdID0geworCXsKKwkJLnN1cHBseSA9ICJ2bW1jIiwKKwkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4xIiwKKwl9LAorfTsKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHA0NDMwX3ZtbWNfc3VwcGx5W10gPSB7CiAJewogCQkuc3VwcGx5ID0gInZtbWMiLAogCQkuZGV2X25hbWUgPSAibW1jaS1vbWFwLWhzLjAiLAogCX0sCi0JewotCQkuc3VwcGx5ID0gInZtbWMiLAotCQkuZGV2X25hbWUgPSAibW1jaS1vbWFwLWhzLjEiLAotCX0sCiB9OwogCiBzdGF0aWMgaW50IG9tYXA0X3R3bDYwMzBfaHNtbWNfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTIxMCw2ICsyNjIsOCBAQAogCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQogCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyAgPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gc2RwNDQzMF92YXV4X3N1cHBseSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHA0NDMwX3ZhdXgyID0gewpAQCAtMjUwLDcgKzMwNCw3IEBACiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IDIsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyAgPSAxLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gc2RwNDQzMF92bW1jX3N1cHBseSwKIH07CiAKQEAgLTM1Myw2ICs0MDcsMTEgQEAKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc2RwNDQzMF90d2xkYXRhLAogCX0sCiB9Oworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNkcDQ0MzBfaTJjXzNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidG1wMTA1IiwgMHg0OCksCisJfSwKK307CiBzdGF0aWMgaW50IF9faW5pdCBvbWFwNF9pMmNfaW5pdCh2b2lkKQogewogCS8qCkBAIC0zNjIsNyArNDIxLDggQEAKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgNDAwLCBzZHA0NDMwX2kyY19ib2FyZGluZm8sCiAJCQlBUlJBWV9TSVpFKHNkcDQ0MzBfaTJjX2JvYXJkaW5mbykpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOwotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIHNkcDQ0MzBfaTJjXzNfYm9hcmRpbmZvLAorCQkJCUFSUkFZX1NJWkUoc2RwNDQzMF9pMmNfM19ib2FyZGluZm8pKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoNCwgNDAwLCBOVUxMLCAwKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCmluZGV4IDdkYTkyZGUuLjRkMGY1ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwpAQCAtNDYxLDE3ICs0NjEsMTEgQEAKIAlhbTM1MTdfZXZtX2V0aGVybmV0X2luaXQoJmFtMzUxN19ldm1fZW1hY19wZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX21hcF9pbyh2b2lkKQotewotCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoT01BUDM1MTdFVk0sICJPTUFQMzUxNy9BTTM1MTcgRVZNIikKIAkucGh5c19pbwk9IDB4NDgwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IGFtMzUxN19ldm1fbWFwX2lvLAorCS5tYXBfaW8JCT0gb21hcDNfbWFwX2lvLAogCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAogCS5pbml0X2lycQk9IGFtMzUxN19ldm1faW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGFtMzUxN19ldm1faW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggYmQ3NTY0Mi4uYzY0MjFhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTM1LDEzICszNSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9sZWQuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKKwogLyogTEVEICYgU3dpdGNoIG1hY3JvcyAqLwogI2RlZmluZSBMRUQwX0dQSU8xMwkJMTMKICNkZWZpbmUgTEVEMV9HUElPMTQJCTE0CkBAIC0yNDQsNyArMjQ1LDcgQEAKIAlhcG9sbG9uX3NtYzkxeF9yZXNvdXJjZXNbMF0uZW5kICAgPSBiYXNlICsgMHgzMGY7CiAJdWRlbGF5KDEwMCk7CiAKLQlvbWFwX2NmZ19yZWcoVzRfXzI0WFhfR1BJTzc0KTsKKwlvbWFwX211eF9pbml0X2dwaW8oNzQsIDApOwogCWlmIChncGlvX3JlcXVlc3QoQVBPTExPTl9FVEhSX0dQSU9fSVJRLCAiU01DOTF4IGlycSIpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTF4IElSUVxuIiwKIAkJCUFQT0xMT05fRVRIUl9HUElPX0lSUSk7CkBAIC0yODYsMTUgKzI4NywxNSBAQAogc3RhdGljIHZvaWQgX19pbml0IGFwb2xsb25fbGVkX2luaXQodm9pZCkKIHsKIAkvKiBMRUQwIC0gQUExMCAqLwotCW9tYXBfY2ZnX3JlZyhBQTEwXzI0MlhfR1BJTzEzKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgidmx5bnFfY2xrLmdwaW9fMTMiLCAwKTsKIAlncGlvX3JlcXVlc3QoTEVEMF9HUElPMTMsICJMRUQwIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExFRDBfR1BJTzEzLCAwKTsKIAkvKiBMRUQxICAtIEFBNiAqLwotCW9tYXBfY2ZnX3JlZyhBQTZfMjQyWF9HUElPMTQpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ2bHlucV9yeDEuZ3Bpb18xNCIsIDApOwogCWdwaW9fcmVxdWVzdChMRUQxX0dQSU8xNCwgIkxFRDEiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTEVEMV9HUElPMTQsIDApOwogCS8qIExFRDIgIC0gQUE0ICovCi0Jb21hcF9jZmdfcmVnKEFBNF8yNDJYX0dQSU8xNSk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInZseW5xX3J4MC5ncGlvXzE1IiwgMCk7CiAJZ3Bpb19yZXF1ZXN0KExFRDJfR1BJTzE1LCAiTEVEMiIpOwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChMRUQyX0dQSU8xNSwgMCk7CiB9CkBAIC0zMDMsMjIgKzMwNCwzNSBAQAogewogCS8qIFVTQiBkZXZpY2UgKi8KIAkvKiBERVZJQ0VfU1VTUEVORCAqLwotCW9tYXBfY2ZnX3JlZyhQMjFfMjQyWF9HUElPMTIpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJtY2JzcDJfY2xreC5ncGlvXzEyIiwgMCk7CiAJZ3Bpb19yZXF1ZXN0KDEyLCAiVVNCIHN1c3BlbmQiKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMTIsIDApOwotCW9tYXBfdXNiX2luaXQoJmFwb2xsb25fdXNiX2NvbmZpZyk7CisJb21hcDJfdXNiZnNfaW5pdCgmYXBvbGxvbl91c2JfY29uZmlnKTsKIH0KIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXQodm9pZCkKIHsKIAl1MzIgdjsKIAorCW9tYXAyNDIwX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX1pBQyk7CisKIAlhcG9sbG9uX2xlZF9pbml0KCk7CiAJYXBvbGxvbl9mbGFzaF9pbml0KCk7CiAJYXBvbGxvbl91c2JfaW5pdCgpOwogCiAJLyogUkVWSVNJVDogd2hlcmUncyB0aGUgY29ycmVjdCBwbGFjZSAqLwotCW9tYXBfY2ZnX3JlZyhXMTlfMjRYWF9TWVNfTklSUSk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uaXJxIiwgT01BUF9QVUxMX0VOQSB8IE9NQVBfUFVMTF9VUCk7CisKKwkvKiBMQ0QgUFdSX0VOICovCisJb21hcF9tdXhfaW5pdF9zaWduYWwoIm1jYnNwMl9kci5ncGlvXzExIiwgT01BUF9QVUxMX0VOQSB8IE9NQVBfUFVMTF9VUCk7CiAKIAkvKiBVc2UgSW50ZXJhbCBsb29wLWJhY2sgaW4gTU1DL1NESU8gTW9kdWxlIElucHV0IENsb2NrIHNlbGVjdGlvbiAqLwogCXYgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCBiYzRjM2Y4Li5lMTBiYzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTYxLDggKzYxLDYgQEAKICNkZWZpbmUgU0JfVDM1X1NNU0M5MTFYX0dQSU8JNjUKIAogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLSNkZWZpbmUgR1BNQ19DUzBfQkFTRQkJMHg2MAotI2RlZmluZSBHUE1DX0NTMF9CQVNFX0FERFIJKE9NQVAzNFhYX0dQTUNfVklSVCArIEdQTUNfQ1MwX0JBU0UpCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CkBAIC0yMjMsMjggKzIyMSwxMiBAQAogCS5ucl9wYXJ0cwkJPSBBUlJBWV9TSVpFKGNtX3QzNV9uYW5kX3BhcnRpdGlvbnMpLAogCS5kbWFfY2hhbm5lbAkJPSAtMSwJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLwogCS5jcwkJCT0gMCwKLQkuZ3BtY19jc19iYXNlYWRkcgk9ICh2b2lkIF9faW9tZW0gKilHUE1DX0NTMF9CQVNFX0FERFIsCi0JLmdwbWNfYmFzZWFkZHIJCT0gKHZvaWQgX19pb21lbSAqKU9NQVAzNFhYX0dQTUNfVklSVCwKIAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbV90MzVfbmFuZF9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbV90MzVfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyLW5hbmQiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJmNtX3QzNV9uYW5kX3Jlc291cmNlLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZjbV90MzVfbmFuZF9kYXRhLAotCX0sCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgY21fdDM1X2luaXRfbmFuZCh2b2lkKQogewotCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNtX3QzNV9uYW5kX2RldmljZSkgPCAwKQorCWlmIChncG1jX25hbmRfaW5pdCgmY21fdDM1X25hbmRfZGF0YSkgPCAwKQogCQlwcl9lcnIoIkNNLVQzNTogVW5hYmxlIHRvIHJlZ2lzdGVyIE5BTkQgZGV2aWNlXG4iKTsKIH0KICNlbHNlCkBAIC03MDgsMTIgKzY5MCw2IEBACiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNV9tYXBfaW8odm9pZCkKLXsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwotfQotCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CiAJLyogbkNTIGFuZCBJUlEgZm9yIENNLVQzNSBldGhlcm5ldCAqLwogCU9NQVAzX01VWChHUE1DX05DUzUsIE9NQVBfTVVYX01PREUwKSwKQEAgLTgzNiw3ICs4MTIsNyBAQAogCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gY21fdDM1X21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBjbV90MzVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGNtX3QzNV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwppbmRleCA5MjJiNzQ2Li5hMDcwODZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lkLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC01OCw5ICs1OSw2IEBACiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKIAotI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCi0jZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKLQogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKIAogI2RlZmluZSBPTUFQX0RNOTAwMF9HUElPX0lSUQkyNQpAQCAtMTA0LDIwICsxMDIsNiBAQAogCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLwogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkZXZraXQ4MDAwX25hbmRfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZGV2a2l0ODAwMF9uYW5kX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcDItbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZkZXZraXQ4MDAwX25hbmRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmZGV2a2l0ODAwMF9uYW5kX3Jlc291cmNlLAotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLApAQCAtMTI2LDU0ICsxMTAsNTAgQEAKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07Ci1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBkZXZraXQ4MDAwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci19OwogCiBzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCAweDgwLCBSRUdfR1BJT0RBVEFESVIxKTsKIAl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgwLCAweDApOwogCisJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZHNzZGV2LT5yZXNldF9ncGlvLCAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CisJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKKwkJZ3Bpb19zZXRfdmFsdWUoZHNzZGV2LT5yZXNldF9ncGlvLCAwKTsKIH0KKwogc3RhdGljIGludCBkZXZraXQ4MDAwX3BhbmVsX2VuYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogeworCWlmIChncGlvX2lzX3ZhbGlkKGRzc2Rldi0+cmVzZXRfZ3BpbykpCisJCWdwaW9fc2V0X3ZhbHVlKGRzc2Rldi0+cmVzZXRfZ3BpbywgMSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogeworCWlmIChncGlvX2lzX3ZhbGlkKGRzc2Rldi0+cmVzZXRfZ3BpbykpCisJCWdwaW9fc2V0X3ZhbHVlKGRzc2Rldi0+cmVzZXRfZ3BpbywgMCk7CiB9CiAKLXN0YXRpYyBpbnQgZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV90dihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci19CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92bW1jMV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjAiKTsKIAogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92bW1jMV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGRldmtpdDgwMDBfdnNpbV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKLX07Ci0KKy8qIGFkczc4NDYgb24gU1BJICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92aW9fc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAic3BpMi4wIik7CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGRldmtpdDgwMDBfbGNkX2RldmljZSA9IHsKIAkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJsY2QiLAotCS5kcml2ZXJfbmFtZSAgICAgICAgICAgID0gImlubm9sdXhfYXRfcGFuZWwiLAorCS5kcml2ZXJfbmFtZSAgICAgICAgICAgID0gImdlbmVyaWNfcGFuZWwiLAogCS50eXBlICAgICAgICAgICAgICAgICAgID0gT01BUF9ESVNQTEFZX1RZUEVfRFBJLAogCS5waHkuZHBpLmRhdGFfbGluZXMgICAgID0gMjQsCisJLnJlc2V0X2dwaW8gICAgICAgICAgICAgPSAtRUlOVkFMLCAvKiB3aWxsIGJlIHJlcGxhY2VkICovCiAJLnBsYXRmb3JtX2VuYWJsZSAgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2VuYWJsZV9sY2QsCiAJLnBsYXRmb3JtX2Rpc2FibGUgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfbGNkLAogfTsKQEAgLTE4Miw2ICsxNjIsNyBAQAogCS5kcml2ZXJfbmFtZSAgICAgICAgICAgID0gImdlbmVyaWNfcGFuZWwiLAogCS50eXBlICAgICAgICAgICAgICAgICAgID0gT01BUF9ESVNQTEFZX1RZUEVfRFBJLAogCS5waHkuZHBpLmRhdGFfbGluZXMgICAgID0gMjQsCisJLnJlc2V0X2dwaW8gICAgICAgICAgICAgPSAtRUlOVkFMLCAvKiB3aWxsIGJlIHJlcGxhY2VkICovCiAJLnBsYXRmb3JtX2VuYWJsZSAgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2VuYWJsZV9kdmksCiAJLnBsYXRmb3JtX2Rpc2FibGUgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfZHZpLAogfTsKQEAgLTE5MSw4ICsxNzIsNiBAQAogCS5kcml2ZXJfbmFtZSAgICAgICAgICAgID0gInZlbmMiLAogCS50eXBlICAgICAgICAgICAgICAgICAgID0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQywKIAkucGh5LnZlbmMudHlwZSAgICAgICAgICA9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCi0JLnBsYXRmb3JtX2VuYWJsZSAgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2VuYWJsZV90diwKLQkucGxhdGZvcm1fZGlzYWJsZSAgICAgICA9IGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV90diwKIH07CiAKIApAQCAtMjE2LDEwICsxOTUsOCBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92ZGRhX2RhY19zdXBwbHkgPSB7Ci0JLnN1cHBseSA9ICJ2ZGRhX2RhYyIsCi0JLmRldgk9ICZkZXZraXQ4MDAwX2Rzc19kZXZpY2UuZGV2LAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBkZXZraXQ4MDAwX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOwogCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfMSksCkBAIC0yNjYsNyArMjQzLDIxIEBACiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJZGV2a2l0ODAwMF92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKLQlkZXZraXQ4MDAwX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisKKwkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMSA9PSBsZWRCLCBQTVVfU1RBVCAob3V0LCBhY3RpdmUgbG93IExFRCkgKi8KKwlncGlvX2xlZHNbMl0uZ3BpbyA9IGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYICsgMTsKKworICAgICAgICAvKiBncGlvICsgMSBpcyAiTENEX1BXUkVOIiAob3V0LCBhY3RpdmUgaGlnaCkgKi8KKwlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IGdwaW8gKyAxOworCWdwaW9fcmVxdWVzdChkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbywgIkxDRF9QV1JFTiIpOworCS8qIERpc2FibGUgdW50aWwgbmVlZGVkICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAwKTsKKworCS8qIGdwaW8gKyA3IGlzICJEVklfUEQiIChvdXQsIGFjdGl2ZSBsb3cpICovCisJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgNzsKKwlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sICJEVkkgUG93ZXJEb3duIik7CisJLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODIsMTYgKzI3Myw4IEBACiAJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92cGxsMl9zdXBwbGllc1tdID0gewotCXsKLQkuc3VwcGx5CQk9ICJ2ZHZpIiwKLQkuZGV2CQk9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UuZGV2LAotCX0sCi0JewotCS5zdXBwbHkJCT0gInZkZHNfZHNpIiwKLQkuZGV2CQk9ICZkZXZraXQ4MDAwX2Rzc19kZXZpY2UuZGV2LAotCX0KLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92cGxsMV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZkZHNfZHNpIiwgIm9tYXBkc3MiKTsKIAogLyogVk1NQzEgZm9yIE1NQzEgcGlucyBDTUQsIENMSywgREFUMC4uREFUMyAoMjAgbUEsIHBsdXMgY2FyZCA9PSBtYXggMjIwIG1BKSAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdm1tYzEgPSB7CkBAIC0zMDgsMjEgKzI5MSw2IEBACiAJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmRldmtpdDgwMDBfdm1tYzFfc3VwcGx5LAogfTsKIAotLyogVlNJTSBmb3IgTU1DMSBwaW5zIERBVDQuLkRBVDcgKDIgbUEsIHBsdXMgY2FyZCA9PSBtYXggNTAgbUEpICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZGV2a2l0ODAwMF92c2ltID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm1pbl91VgkJCT0gMTgwMDAwMCwKLQkJLm1heF91VgkJCT0gMzAwMDAwMCwKLQkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKLQkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCi0JCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSAmZGV2a2l0ODAwMF92c2ltX3N1cHBseSwKLX07Ci0KIC8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKDggbUEgdW5sb2FkZWQsIG1heCA2NSBtQSkgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZkYWMgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMzM3LDEwICszMDUsOSBAQAogCS5jb25zdW1lcl9zdXBwbGllcwk9ICZkZXZraXQ4MDAwX3ZkZGFfZGFjX3N1cHBseSwKIH07CiAKLS8qIFZQTEwyIGZvciBkaWdpdGFsIHZpZGVvIG91dHB1dHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZwbGwyID0geworLyogVlBMTDEgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdnBsbDEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewotCQkubmFtZQkJCT0gIlZEVkkiLAogCQkubWluX3VWCQkJPSAxODAwMDAwLAogCQkubWF4X3VWCQkJPSAxODAwMDAwLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTApAQCAtMzQ4LDggKzMxNSwyMyBAQAogCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCiAJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShkZXZraXQ4MDAwX3ZwbGwyX3N1cHBsaWVzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMJPSBkZXZraXQ4MDAwX3ZwbGwyX3N1cHBsaWVzLAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZkZXZraXQ4MDAwX3ZwbGwxX3N1cHBseSwKK307CisKKy8qIFZBVVg0IGZvciBhZHM3ODQ2IGFuZCBudWJzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZGV2a2l0ODAwMF92aW8gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWICAgICAgICAgICAgICAgICA9IDE4MDAwMDAsCisJCS5tYXhfdVYgICAgICAgICAgICAgICAgID0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWICAgICAgICAgICAgICAgPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzayAgICAgICA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sgICAgICAgICA9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgID0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9ICZkZXZraXQ4MDAwX3Zpb19zdXBwbHksCiB9OwogCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgZGV2a2l0ODAwMF91c2JfZGF0YSA9IHsKQEAgLTM3NCwxNSArMzU2LDE1IEBACiAJLmdwaW8JCT0gJmRldmtpdDgwMDBfZ3Bpb19kYXRhLAogCS5jb2RlYwkJPSAmZGV2a2l0ODAwMF9jb2RlY19kYXRhLAogCS52bW1jMQkJPSAmZGV2a2l0ODAwMF92bW1jMSwKLQkudnNpbQkJPSAmZGV2a2l0ODAwMF92c2ltLAogCS52ZGFjCQk9ICZkZXZraXQ4MDAwX3ZkYWMsCi0JLnZwbGwyCQk9ICZkZXZraXQ4MDAwX3ZwbGwyLAorCS52cGxsMQkJPSAmZGV2a2l0ODAwMF92cGxsMSwKKwkudmlvCQk9ICZkZXZraXQ4MDAwX3ZpbywKIAkua2V5cGFkCQk9ICZkZXZraXQ4MDAwX2twX2RhdGEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGV2a2l0ODAwMF9pMmNfYm9hcmRpbmZvW10gPSB7CiAJewotCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQlJMkNfQk9BUkRfSU5GTygidHBzNjU5MzAiLCAweDQ4KSwKIAkJLmZsYWdzID0gSTJDX0NMSUVOVF9XQUtFLAogCQkuaXJxID0gSU5UXzM0WFhfU1lTX05JUlEsCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmRldmtpdDgwMDBfdHdsZGF0YSwKQEAgLTQ2NCw4ICs0NDYsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9pbml0X2lycSh2b2lkKQogewotCW9tYXBfYm9hcmRfY29uZmlnID0gZGV2a2l0ODAwMF9jb25maWc7Ci0Jb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZGV2a2l0ODAwMF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCiAJCQkgICAgIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKQEAgLTU2MCw2ICs1NDAsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9kbTkwMDBfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGNoYXIgKmV0aF9hZGRyID0gb21hcF9kbTkwMDBfcGxhdGRhdGEuZGV2X2FkZHI7CisJc3RydWN0IG9tYXBfZGllX2lkIG9kaTsKKwogCWlmIChncGlvX3JlcXVlc3QoT01BUF9ETTkwMDBfR1BJT19JUlEsICJkbTkwMDAgaXJxIikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBkbTkwMDAgSVJRXG4iLAogCQkJT01BUF9ETTkwMDBfR1BJT19JUlEpOwpAQCAtNTY3LDYgKzU1MCwxNiBAQAogCQl9CiAKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChPTUFQX0RNOTAwMF9HUElPX0lSUSk7CisKKwkvKiBpbml0IHRoZSBtYWMgYWRkcmVzcyB1c2luZyBESUUgaWQgKi8KKwlvbWFwX2dldF9kaWVfaWQoJm9kaSk7CisKKwlldGhfYWRkclswXSA9IDB4MDI7IC8qIGxvY2FsbHkgYWRtaW5pc3RlcmVkICovCisJZXRoX2FkZHJbMV0gPSBvZGkuaWRfMSAmIDB4ZmY7CisJZXRoX2FkZHJbMl0gPSAob2RpLmlkXzAgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwlldGhfYWRkclszXSA9IChvZGkuaWRfMCAmIDB4MDBmZjAwMDApID4+IDE2OworCWV0aF9hZGRyWzRdID0gKG9kaS5pZF8wICYgMHgwMDAwZmYwMCkgPj4gODsKKwlldGhfYWRkcls1XSA9IChvZGkuaWRfMCAmIDB4MDAwMDAwZmYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2a2l0ODAwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKQEAgLTU4MSw4ICs1NzQsNiBAQAogCXU4IGNzID0gMDsKIAl1OCBuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CiAKLQl1MzIgZ3BtY19iYXNlX2FkZCA9IE9NQVAzNFhYX0dQTUNfVklSVDsKLQogCS8qIGZpbmQgb3V0IHRoZSBjaGlwLXNlbGVjdCBvbiB3aGljaCBOQU5EIGV4aXN0cyAqLwogCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CiAJCXUzMiByZXQgPSAwOwpAQCAtNjA0LDEzICs1OTUsOSBAQAogCiAJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CiAJCWRldmtpdDgwMDBfbmFuZF9kYXRhLmNzID0gbmFuZGNzOwotCQlkZXZraXQ4MDAwX25hbmRfZGF0YS5ncG1jX2NzX2Jhc2VhZGRyID0gKHZvaWQgKikKLQkJCShncG1jX2Jhc2VfYWRkICsgR1BNQ19DUzBfQkFTRSArIG5hbmRjcyAqIEdQTUNfQ1NfU0laRSk7Ci0JCWRldmtpdDgwMDBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKQotCQkJKGdwbWNfYmFzZV9hZGQpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nIE5BTkQgb24gQ1MlZFxuIiwgbmFuZGNzKTsKLQkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGV2a2l0ODAwMF9uYW5kX2RldmljZSkgPCAwKQorCQlpZiAoZ3BtY19uYW5kX2luaXQoJmRldmtpdDgwMDBfbmFuZF9kYXRhKSA8IDApCiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CiAJfQogfQpAQCAtNzk3LDggKzc4NCw2IEBACiAJZGV2a2l0ODAwMF9pMmNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmtpdDgwMDBfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kZXZpY2VzKSk7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBkZXZraXQ4MDAwX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShkZXZraXQ4MDAwX2NvbmZpZyk7CiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZraXQ4MDAwX3NwaV9ib2FyZF9pbmZvLAogCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mbykpOwpAQCAtODE0LDE3ICs3OTksMTEgQEAKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGRldmtpdDgwMDBfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChERVZLSVQ4MDAwLCAiT01BUDMgRGV2a2l0ODAwMCIpCiAJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBkZXZraXQ4MDAwX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBkZXZraXQ4MDAwX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBkZXZraXQ4MDAwX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4MzRhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZmxhc2guYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGJvYXJkLXNkcC1mbGFzaC5jCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC1mbGFzaC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBWaW1hbCBTaW5naCA8dmltYWxzaW5naEB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9vbmVuYW5kLmg+CisjaW5jbHVkZSA8cGxhdC90Yy5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtZmxhc2guaD4KKworI2RlZmluZSBSRUdfRlBHQV9SRVYJCQkweDEwCisjZGVmaW5lIFJFR19GUEdBX0RJUF9TV0lUQ0hfSU5QVVQyCTB4NjAKKyNkZWZpbmUgTUFYX1NVUFBPUlRFRF9HUE1DX0NPTkZJRwkzCisKKyNkZWZpbmUgREVCVUdfQkFTRQkJMHgwODAwMDAwMCAvKiBkZWJ1ZyBib2FyZCAqLworCisvKiB2YXJpb3VzIG1lbW9yeSBzaXplcyAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYxCVNaXzY0TQkvKiBOT1IgZmxhc2ggKDY0IE1lZyBhbGlnbmVkKSAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYyCVNaXzEyOE0JLyogTk9SIGZsYXNoICgyNTYgTWVnIGFsaWduZWQpICovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGJvYXJkX25vcl9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBib2FyZF9ub3JfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYm9hcmRfbm9yX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9ub3JfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmYm9hcmRfbm9yX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQKK19faW5pdCBib2FyZF9ub3JfaW5pdChzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbm9yX3BhcnRzLCB1OCBucl9wYXJ0cywgdTggY3MpCit7CisJaW50IGVycjsKKworCWJvYXJkX25vcl9kYXRhLnBhcnRzCT0gbm9yX3BhcnRzOworCWJvYXJkX25vcl9kYXRhLm5yX3BhcnRzCT0gbnJfcGFydHM7CisKKwkvKiBDb25maWd1cmUgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBvZiBOT1IgZGV2aWNlICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMiAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmYm9hcmRfbm9yX3Jlc291cmNlLnN0YXJ0KTsKKwkJYm9hcmRfbm9yX3Jlc291cmNlLmVuZCA9IGJvYXJkX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjIgLSAxOworCX0gZWxzZSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMSAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmYm9hcmRfbm9yX3Jlc291cmNlLnN0YXJ0KTsKKwkJYm9hcmRfbm9yX3Jlc291cmNlLmVuZCA9IGJvYXJkX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjEgLSAxOworCX0KKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5PUjogQ2FuJ3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZib2FyZF9ub3JfZGV2aWNlKSA8IDApCisJCXByaW50ayhLRVJOX0VSUgkiVW5hYmxlIHRvIHJlZ2lzdGVyIE5PUiBkZXZpY2VcbiIpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT01BUDIpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT01BUDJfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBvbWFwX29uZW5hbmRfcGxhdGZvcm1fZGF0YSBib2FyZF9vbmVuYW5kX2RhdGEgPSB7CisJLmRtYV9jaGFubmVsCT0gLTEsICAgLyogZGlzYWJsZSBETUEgaW4gT01BUCBPbmVOQU5EIGRyaXZlciAqLworfTsKKworc3RhdGljIHZvaWQKK19faW5pdCBib2FyZF9vbmVuYW5kX2luaXQoc3RydWN0IG10ZF9wYXJ0aXRpb24gKm9uZW5hbmRfcGFydHMsCisJCQkJdTggbnJfcGFydHMsIHU4IGNzKQoreworCWJvYXJkX29uZW5hbmRfZGF0YS5jcwkJPSBjczsKKwlib2FyZF9vbmVuYW5kX2RhdGEucGFydHMJPSBvbmVuYW5kX3BhcnRzOworCWJvYXJkX29uZW5hbmRfZGF0YS5ucl9wYXJ0cwk9IG5yX3BhcnRzOworCisJZ3BtY19vbmVuYW5kX2luaXQoJmJvYXJkX29uZW5hbmRfZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK19faW5pdCBib2FyZF9vbmVuYW5kX2luaXQoc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5vcl9wYXJ0cywgdTggbnJfcGFydHMsIHU4IGNzKQoreworfQorI2VuZGlmIC8qIENPTkZJR19NVERfT05FTkFORF9PTUFQMiB8fCBDT05GSUdfTVREX09ORU5BTkRfT01BUDJfTU9EVUxFICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9PTUFQMikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19NVERfTkFORF9PTUFQMl9NT0RVTEUpCisKKy8qIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcyAqLworc3RhdGljIHN0cnVjdCBncG1jX3RpbWluZ3MgbmFuZF90aW1pbmdzID0geworCisJLnN5bmNfY2xrID0gMCwKKworCS5jc19vbiA9IDAsCisJLmNzX3JkX29mZiA9IDM2LAorCS5jc193cl9vZmYgPSAzNiwKKworCS5hZHZfb24gPSA2LAorCS5hZHZfcmRfb2ZmID0gMjQsCisJLmFkdl93cl9vZmYgPSAzNiwKKworCS53ZV9vZmYgPSAzMCwKKwkub2Vfb2ZmID0gNDgsCisKKwkuYWNjZXNzID0gNTQsCisJLnJkX2N5Y2xlID0gNzIsCisJLndyX2N5Y2xlID0gNzIsCisKKwkud3JfYWNjZXNzID0gMzAsCisJLndyX2RhdGFfbXV4X2J1cyA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIGJvYXJkX25hbmRfZGF0YSA9IHsKKwkubmFuZF9zZXR1cAk9IE5VTEwsCisJLmdwbWNfdAkJPSAmbmFuZF90aW1pbmdzLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworCS5kZXZfcmVhZHkJPSBOVUxMLAorCS5kZXZzaXplCT0gMCwJLyogJzAnIGZvciA4LWJpdCwgJzEnIGZvciAxNi1iaXQgZGV2aWNlICovCit9OworCit2b2lkCitfX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICpuYW5kX3BhcnRzLCB1OCBucl9wYXJ0cywgdTggY3MpCit7CisJYm9hcmRfbmFuZF9kYXRhLmNzCQk9IGNzOworCWJvYXJkX25hbmRfZGF0YS5wYXJ0cwkJPSBuYW5kX3BhcnRzOworCWJvYXJkX25hbmRfZGF0YS5ucl9wYXJ0cwkJPSBucl9wYXJ0czsKKworCWdwbWNfbmFuZF9pbml0KCZib2FyZF9uYW5kX2RhdGEpOworfQorI2Vsc2UKK3ZvaWQKK19faW5pdCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydHMsIHU4IG5yX3BhcnRzLCB1OCBjcykKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTVREX05BTkRfT01BUDIgfHwgQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSAqLworCisvKioKKyAqIGdldF9ncG1jMF90eXBlIC0gUmVhZHMgdGhlIEZQR0EgRElQX1NXSVRDSF9JTlBVVF9SRUdJU1RFUjIgdG8gZ2V0CisgKiB0aGUgdmFyaW91cyBjcyB2YWx1ZXMuCisgKi8KK3N0YXRpYyB1OCBnZXRfZ3BtYzBfdHlwZSh2b2lkKQoreworCXU4IGNzID0gMDsKKwl2b2lkIF9faW9tZW0gKmZwZ2FfbWFwX2FkZHI7CisKKwlmcGdhX21hcF9hZGRyID0gaW9yZW1hcChERUJVR19CQVNFLCA0MDk2KTsKKwlpZiAoIWZwZ2FfbWFwX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCEoX19yYXdfcmVhZHcoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX1JFVikpKQorCQkvKiB3ZSBkb250IGhhdmUgYW4gREVCVUcgRlBHQT8/PyAqLworCQkvKiBEZXBlbmQgb24gI2RlZmluZXMhISBkZWZhdWx0IHRvIHN0cmF0YSBib290IHJldHVybiBwYXJhbSAqLworCQlnb3RvIHVubWFwOworCisJLyogUzgtRElQLU9GRiA9IDEsIFM4LURJUC1PTiA9IDAgKi8KKwljcyA9IF9fcmF3X3JlYWR3KGZwZ2FfbWFwX2FkZHIgKyBSRUdfRlBHQV9ESVBfU1dJVENIX0lOUFVUMikgJiAweGY7CisKKwkvKiBFUzIuMCBTRFAncyBvbndhcmRzIDQgZGlwIHN3aXRjaGVzIGFyZSBwcm92aWRlZCBmb3IgQ1MgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMxXzApCisJCS8qIGNoYW5nZSAoUzgtMTo0PURTLTI6MCkgdG8gKFM4LTQ6MT1EUy0yOjApICovCisJCWNzID0gKChjcyAmIDgpID4+IDMpIHwgKChjcyAmIDQpID4+IDEpIHwKKwkJCSgoY3MgJiAyKSA8PCAxKSB8ICgoY3MgJiAxKSA8PCAzKTsKKwllbHNlCisJCS8qIGNoYW5nZSAoUzgtMTozPURTLTI6MCkgdG8gKFM4LTM6MT1EUy0yOjApICovCisJCWNzID0gKChjcyAmIDQpID4+IDIpIHwgKGNzICYgMikgfCAoKGNzICYgMSkgPDwgMik7Cit1bm1hcDoKKwlpb3VubWFwKGZwZ2FfbWFwX2FkZHIpOworCXJldHVybiBjczsKK30KKworLyoqCisgKiBzZHAzNDMwX2ZsYXNoX2luaXQgLSBJZGVudGlmeSBkZXZpY2VzIGNvbm5lY3RlZCB0byBHUE1DIGFuZCByZWdpc3Rlci4KKyAqCisgKiBAcmV0dXJuIC0gdm9pZC4KKyAqLwordm9pZCBib2FyZF9mbGFzaF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHBhcnRpdGlvbl9pbmZvW10sCisJCQkJCWNoYXIgY2hpcF9zZWxfYm9hcmRbXVtHUE1DX0NTX05VTV0pCit7CisJdTgJCWNzID0gMDsKKwl1OAkJbm9yY3MgPSBHUE1DX0NTX05VTSArIDE7CisJdTgJCW5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKwl1OAkJb25lbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCXU4CQlpZHg7CisJdW5zaWduZWQgY2hhcgkqY29uZmlnX3NlbCA9IE5VTEw7CisKKwkvKiBSRVZJU0lUOiBJcyB0aGlzIHJldHVybiBjb3JyZWN0IGlkeCBmb3IgMjQzMCBTRFA/CisJICogZm9yIHdoaWNoIGNzIGNvbmZpZ3VyYXRpb24gbWF0Y2hlcyBmb3IgMjQzMCBTRFA/CisJICovCisJaWR4ID0gZ2V0X2dwbWMwX3R5cGUoKTsKKwlpZiAoaWR4ID49IE1BWF9TVVBQT1JURURfR1BNQ19DT05GSUcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBjaGlwIHNlbGVjdDogJWRcbiIsIF9fZnVuY19fLCBjcyk7CisJCXJldHVybjsKKwl9CisJY29uZmlnX3NlbCA9ICh1bnNpZ25lZCBjaGFyICopKGNoaXBfc2VsX2JvYXJkW2lkeF0pOworCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJc3dpdGNoIChjb25maWdfc2VsW2NzXSkgeworCQljYXNlIFBEQ19OT1I6CisJCQlpZiAobm9yY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlub3JjcyA9IGNzOworCQkJYnJlYWs7CisJCWNhc2UgUERDX05BTkQ6CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCQlicmVhazsKKwkJY2FzZSBQRENfT05FTkFORDoKKwkJCWlmIChvbmVuYW5kY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlvbmVuYW5kY3MgPSBjczsKKwkJCWJyZWFrOworCQl9OworCQljcysrOworCX0KKworCWlmIChub3JjcyA+IEdQTUNfQ1NfTlVNKQorCQlwcmludGsoS0VSTl9JTkZPICJOT1I6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSJpbiBHUE1DXG4iKTsKKwllbHNlCisJCWJvYXJkX25vcl9pbml0KHBhcnRpdGlvbl9pbmZvWzBdLnBhcnRzLAorCQkJCXBhcnRpdGlvbl9pbmZvWzBdLm5yX3BhcnRzLCBub3Jjcyk7CisKKwlpZiAob25lbmFuZGNzID4gR1BNQ19DU19OVU0pCisJCXByaW50ayhLRVJOX0lORk8gIk9uZU5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSJpbiBHUE1DXG4iKTsKKwllbHNlCisJCWJvYXJkX29uZW5hbmRfaW5pdChwYXJ0aXRpb25faW5mb1sxXS5wYXJ0cywKKwkJCQkJcGFydGl0aW9uX2luZm9bMV0ubnJfcGFydHMsIG9uZW5hbmRjcyk7CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSJpbiBHUE1DXG4iKTsKKwllbHNlCisJCWJvYXJkX25hbmRfaW5pdChwYXJ0aXRpb25faW5mb1syXS5wYXJ0cywKKwkJCQlwYXJ0aXRpb25faW5mb1syXS5ucl9wYXJ0cywgbmFuZGNzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKaW5kZXggOTI0MjkwMi4uMzQ4MmI5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgotI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwppbmRleCAxNjcwM2ZkLi5lMDliZDY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CkBAIC00Miw2ICs0MSw4IEBACiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KIAorI2luY2x1ZGUgIm11eC5oIgorCiAjZGVmaW5lIEg0X0ZMQVNIX0NTCTAKICNkZWZpbmUgSDRfU01DOTFYX0NTCTEKIApAQCAtMjQ2LDcgKzI0Nyw3IEBACiAKIAl1ZGVsYXkoMTAwKTsKIAotCW9tYXBfY2ZnX3JlZyhNMTVfMjRYWF9HUElPOTIpOworCW9tYXBfbXV4X2luaXRfZ3Bpbyg5MiwgMCk7CiAJaWYgKGRlYnVnX2NhcmRfaW5pdChjc19tZW1fYmFzZSwgSDRfRVRIUl9HUElPX0lSUSkgPCAwKQogCQlncG1jX2NzX2ZyZWUoZXRoX2NzKTsKIApAQCAtMjcyLDI3ICsyNzMsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaDRfdXNiX2NvbmZpZyBfX2luaXRkYXRhID0gewotI2lmZGVmCUNPTkZJR19NQUNIX09NQVAyX0g0X1VTQjEKLQkvKiBOT1RFOiAgdXNiMSBjb3VsZCBhbHNvIGJlIHVzZWQgd2l0aCAzIHdpcmUgc2lnbmFsaW5nICovCi0JLnBpbnNbMV0JPSA0LAotI2VuZGlmCi0KLSNpZmRlZglDT05GSUdfTUFDSF9PTUFQX0g0X09URwotCS8qIFMxLjEwIE9OIC0tIFVTQiBPVEcgcG9ydAotCSAqIHVzYjAgc3dpdGNoZWQgdG8gTWluaS1BQiBwb3J0IGFuZCBpc3AxMzAxIHRyYW5zY2VpdmVyOwotCSAqIFMyLlBPUzMgPSBPRkYsIFMyLlBPUzQgPSBPTiAuLi4gdG8gYWxsb3cgYmF0dGVyeSBjaGFyZ2luZwotCSAqLwotCS5vdGcJCT0gMSwKLQkucGluc1swXQk9IDQsCi0jaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAotCS8qIHVzZSBPVEcgY2FibGUsIG9yIHN0YW5kYXJkIEEtdG8tTWluaUIgKi8KLQkuaG1jX21vZGUJPSAweDE0LAkvKiAwOmRldi9vdGcgMTpob3N0IDI6ZGlzYWJsZSAqLwotI2VsaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotCS8qIHVzZSBPVEcgY2FibGUsIG9yIE5PTlNUQU5EQVJEIChCLXRvLU1pbmlCKSAqLwotCS5obWNfbW9kZQk9IDB4MTEsCS8qIDA6aG9zdCAxOmhvc3QgMjpkaXNhYmxlICovCi0jZW5kaWYJLyogWFggKi8KLQotI2Vsc2UKIAkvKiBTMS4xMCBPRkYgLS0gdXNiICJkb3dubG9hZCBwb3J0IgogCSAqIHVzYjAgc3dpdGNoZWQgdG8gTWluaS1CIHBvcnQgYW5kIGlzcDExMDUgdHJhbnNjZWl2ZXI7CiAJICogUzIuUE9TMyA9IE9OLCBTMi5QT1M0ID0gT0ZGIC4uLiB0byBlbmFibGUgYmF0dGVyeSBjaGFyZ2luZwpAQCAtMzAxLDcgKzI4MSw2IEBACiAJLnBpbnNbMF0JPSAzLAogLyoJLmhtY19tb2RlCT0gMHgxNCwqLwkvKiAwOmRldiAxOmhvc3QgMjpkaXNhYmxlICovCiAJLmhtY19tb2RlCT0gMHgwMCwJCS8qIDA6ZGV2fG90ZyAxOmRpc2FibGUgMjpkaXNhYmxlICovCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGg0X2NvbmZpZ1tdID0gewpAQCAtMzM4LDMxICszMTcsNTQgQEAKIAl9LAogfTsKIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0KHZvaWQpCiB7CisJb21hcDI0MjBfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfWkFGKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCiAJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCiAJICogaWYgbm90IG5lZWRlZC4KIAkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0lSKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0lSX01PRFVMRSkKLQlvbWFwX2NmZ19yZWcoSzE1XzI0WFhfVUFSVDNfVFgpOwotCW9tYXBfY2ZnX3JlZyhLMTRfMjRYWF9VQVJUM19SWCk7Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVBfTU9EVUxFKQorCW9tYXBfbXV4X2luaXRfZ3Bpbyg4OCwgT01BUF9QVUxMX0VOQSB8IE9NQVBfUFVMTF9VUCk7CisJb21hcF9tdXhfaW5pdF9ncGlvKDg5LCBPTUFQX1BVTExfRU5BIHwgT01BUF9QVUxMX1VQKTsKKwlvbWFwX211eF9pbml0X2dwaW8oMTI0LCBPTUFQX1BVTExfRU5BIHwgT01BUF9QVUxMX1VQKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgibWNic3AyX2RyLmdwaW9fMTEiLCBPTUFQX1BVTExfRU5BIHwgT01BUF9QVUxMX1VQKTsKIAlpZiAob21hcF9oYXNfbWVuZWxhdXMoKSkgeworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19hMTQuZ3BpbzAiLAorCQkJT01BUF9QVUxMX0VOQSB8IE9NQVBfUFVMTF9VUCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ2bHlucV9yeDAuZ3Bpb18xNSIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgiZ3Bpb185OCIsIDApOwogCQlyb3dfZ3Bpb3NbNV0gPSAwOwogCQljb2xfZ3Bpb3NbMl0gPSAxNTsKIAkJY29sX2dwaW9zWzZdID0gMTg7CisJfSBlbHNlIHsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImdwaW9fOTYiLCBPTUFQX1BVTExfRU5BIHwgT01BUF9QVUxMX1VQKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoImdwaW9fMTAwIiwgMCk7CisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJncGlvXzk4IiwgMCk7CiAJfQorCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJncGlvXzkwIiwgMCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoImdwaW9fOTEiLCAwKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgiZ3Bpb18zNiIsIDApOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJtY2JzcDJfY2xreC5ncGlvXzEyIiwgMCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoImdwaW9fOTciLCAwKTsKICNlbmRpZgogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaDRfaTJjX2JvYXJkX2luZm8sCiAJCQlBUlJBWV9TSVpFKGg0X2kyY19ib2FyZF9pbmZvKSk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoNF9kZXZpY2VzLCBBUlJBWV9TSVpFKGg0X2RldmljZXMpKTsKLQlvbWFwX3VzYl9pbml0KCZoNF91c2JfY29uZmlnKTsKKwlvbWFwMl91c2Jmc19pbml0KCZoNF91c2JfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwppbmRleCA3NTllMzlkLi4xNzVmMDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCkBAIC01MzIsMTcgKzUzMiwxMSBAQAogCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19XSUZJX05SRVNFVFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpZ2VwMl9tYXBfaW8odm9pZCkKLXsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwotfQotCiBNQUNISU5FX1NUQVJUKElHRVAwMDIwLCAiSUdFUCB2MiBib2FyZCIpCiAJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBpZ2VwMl9tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gaWdlcDJfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGlnZXAyX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCA5Y2QyNjY5Li4wMGQ5YjEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXpvb20uaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgpAQCAtMzg4LDYgKzM4OSwzOCBAQAogCS5wb3dlcgkJCT0gMTAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGxkcF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyLU5BTkQiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwJLyogNTEyS0IsIDB4ODAwMDAgKi8KKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTAgKiAoNjQgKiAyMDQ4KSwJLyogMS4yNU1CLCAweDE0MDAwMCAqLworCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiQm9vdCBFbnYtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELCAgIC8qIE9mZnNldCA9IDB4MWMwMDAwICovCisJCS5zaXplCQk9IDIgKiAoNjQgKiAyMDQ4KSwJLyogMjU2S0IsIDB4NDAwMDAgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIktlcm5lbC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MDIwMDAwMCovCisJCS5zaXplCQk9IDI0MCAqICg2NCAqIDIwNDgpLAkvKiAzME0sIDB4MUUwMDAwMCAqLworCX0sCisJeworCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0gLSBOQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjAwMDAwMCAqLworCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAkvKiA5Nk1CLCAweDYwMDAwMDAgKi8KKwl9LAorCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC00MDAsMjMgKzQzMywxOSBAQAogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwlib2FyZF9uYW5kX2luaXQobGRwX25hbmRfcGFydGl0aW9ucywKKwkJQVJSQVlfU0laRShsZHBfbmFuZF9wYXJ0aXRpb25zKSwgWk9PTV9OQU5EX0NTKTsKIAogCW9tYXAyX2hzbW1jX2luaXQobW1jKTsKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJbGRwX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChPTUFQX0xEUCwgIk9NQVAgTERQIGJvYXJkIikKIAkucGh5c19pbwk9IDB4NDgwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXBfbGRwX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwX2xkcF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gb21hcF9sZHBfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggMjU2NWZmMC4uYTNlMmI0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxwbGF0L21tYy5oPgogI2luY2x1ZGUgPHBsYXQvc2VyaWFsLmg+CiAKKyNpbmNsdWRlICJtdXguaCIKKwogc3RhdGljIGludCBzbG90MV9jb3Zlcl9vcGVuOwogc3RhdGljIGludCBzbG90Ml9jb3Zlcl9vcGVuOwogc3RhdGljIHN0cnVjdCBkZXZpY2UgKm1tY19kZXZpY2U7CkBAIC02NDksOCArNjUxLDE3IEBACiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorI2lmZGVmIENPTkZJR19PTUFQX01VWAorc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0geworCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworI2Vsc2UKKyNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgbjh4MF9pbml0X21hY2hpbmUodm9pZCkKIHsKKwlvbWFwMjQyMF9tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9aQUMpOwogCS8qIEZJWE1FOiBhZGQgbjgxMCBzcGkgZGV2aWNlcyAqLwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG44MDBfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShuODAwX3NwaV9ib2FyZF9pbmZvKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggMGFiMGMyNi4uODc5NjljNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNDgsOSArNDgsNiBAQAogI2luY2x1ZGUgIm11eC5oIgogI2luY2x1ZGUgImhzbW1jLmgiCiAKLSNkZWZpbmUgR1BNQ19DUzBfQkFTRSAgMHg2MAotI2RlZmluZSBHUE1DX0NTX1NJWkUgICAweDMwCi0KICNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvbWFwM2JlYWdsZV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKQEAgLTkzLDIwICs5MCw2IEBACiAJLmRldl9yZWFkeQk9IE5VTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAzYmVhZ2xlX25hbmRfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNiZWFnbGVfbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyLW5hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmb21hcDNiZWFnbGVfbmFuZF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZvbWFwM2JlYWdsZV9uYW5kX3Jlc291cmNlLAotfTsKLQogLyogRFNTICovCiAKIHN0YXRpYyBpbnQgYmVhZ2xlX2VuYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQpAQCAtNDI0LDggKzQwNyw2IEBACiAJdTggY3MgPSAwOwogCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKIAotCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOwotCiAJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCiAJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKIAkJdTMyIHJldCA9IDA7CkBAIC00NDcsMTIgKzQyOCw5IEBACiAKIAlpZiAobmFuZGNzIDwgR1BNQ19DU19OVU0pIHsKIAkJb21hcDNiZWFnbGVfbmFuZF9kYXRhLmNzID0gbmFuZGNzOwotCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19jc19iYXNlYWRkciA9ICh2b2lkICopCi0JCQkoZ3BtY19iYXNlX2FkZCArIEdQTUNfQ1MwX0JBU0UgKyBuYW5kY3MgKiBHUE1DX0NTX1NJWkUpOwotCQlvbWFwM2JlYWdsZV9uYW5kX2RhdGEuZ3BtY19iYXNlYWRkciA9ICh2b2lkICopIChncG1jX2Jhc2VfYWRkKTsKIAogCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBOQU5EIG9uIENTJWRcbiIsIG5hbmRjcyk7Ci0JCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzYmVhZ2xlX25hbmRfZGV2aWNlKSA8IDApCisJCWlmIChncG1jX25hbmRfaW5pdCgmb21hcDNiZWFnbGVfbmFuZF9kYXRhKSA8IDApCiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBOQU5EIGRldmljZVxuIik7CiAJfQogfQpAQCAtNTA3LDE4ICs0ODUsMTIgQEAKIAliZWFnbGVfZGlzcGxheV9pbml0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChPTUFQM19CRUFHTEUsICJPTUFQMyBCZWFnbGUgQm9hcmQiKQogCS8qIE1haW50YWluZXI6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltIC0gaHR0cDovL2JlYWdsZWJvYXJkLm9yZyAqLwogCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcDNfYmVhZ2xlX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwM19iZWFnbGVfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzX2JlYWdsZV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IGEzZDJlMjguLmY3NmQ5YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTUxNCwxNCArNTE0LDExIEBACiB9OwogCiAvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgb21hcDNfZXZtX3ZwbGwyX3N1cHBseSA9IHsKLQkuc3VwcGx5CQk9ICJ2ZHZpIiwKLQkuZGV2CQk9ICZvbWFwM19ldm1fbGNkX2RldmljZS5kZXYsCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92cGxsMl9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZkZHNfZHNpIiwgIm9tYXBkc3MiKTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXAzX2V2bV92cGxsMiA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lCQkJPSAiVkRWSSIsCiAJCS5taW5fdVYJCQk9IDE4MDAwMDAsCiAJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCiAJCS5hcHBseV91VgkJPSB0cnVlLApAQCAtNzE1LDE4ICs3MTIsMTIgQEAKIAlvbWFwM19ldm1fZGlzcGxheV9pbml0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19ldm1fbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChPTUFQM0VWTSwgIk9NQVAzIEVWTSIpCiAJLyogTWFpbnRhaW5lcjogU3llZCBNb2hhbW1lZCBLaGFzaW0gLSBUZXhhcyBJbnN0cnVtZW50cyAqLwogCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcDNfZXZtX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwM19ldm1faW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzX2V2bV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYzBmNGYxMi4uZGQzYWYyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNSwxMCArMjUsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS93bDEyeHguaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTQxLDE1ICs0NSw0OSBAQAogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKIAorI2RlZmluZSBQQU5ET1JBX1dJRklfSVJRX0dQSU8JCTIxCisjZGVmaW5lIFBBTkRPUkFfV0lGSV9OUkVTRVRfR1BJTwkyMwogI2RlZmluZSBPTUFQM19QQU5ET1JBX1RTX0dQSU8JCTk0CiAKLS8qIGhhcmR3YXJlIGRlYm91bmNlOiAodmFsdWUgKyAxKSAqIDMxdXMgKi8KLSNkZWZpbmUgR1BJT19ERUJPVU5DRV9USU1FCQkxMjcKKyNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQkJU1pfMTI4SworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb21hcDNwYW5kb3JhX25hbmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgICAgID0gInhsb2FkZXIiLAorCQkub2Zmc2V0ICAgICAgICAgPSAwLAorCQkuc2l6ZSAgICAgICAgICAgPSA0ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncyAgICAgPSBNVERfV1JJVEVBQkxFCisJfSwgeworCQkubmFtZSAgICAgICAgICAgPSAidWJvb3QiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICAgICA9IDE1ICogTkFORF9CTE9DS19TSVpFLAorCX0sIHsKKwkJLm5hbWUgICAgICAgICAgID0gInVib290LWVudiIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgICAgID0gMSAqIE5BTkRfQkxPQ0tfU0laRSwKKwl9LCB7CisJCS5uYW1lICAgICAgICAgICA9ICJib290IiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgICAgPSA4MCAqIE5BTkRfQkxPQ0tfU0laRSwKKwl9LCB7CisJCS5uYW1lICAgICAgICAgICA9ICJyb290ZnMiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgcGFuZG9yYV9uYW5kX2RhdGEgPSB7CisJLmNzCQk9IDAsCisJLmRldnNpemUJPSAxLAkvKiAnMCcgZm9yIDgtYml0LCAnMScgZm9yIDE2LWJpdCBkZXZpY2UgKi8KKwkucGFydHMJCT0gb21hcDNwYW5kb3JhX25hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnMpLAorfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBwYW5kb3JhX2dwaW9fbGVkc1tdID0gewogCXsKQEAgLTg4LDYgKzEyNiw3IEBACiAJLnR5cGUJCT0gZXZfdHlwZSwJCQkJXAogCS5jb2RlCQk9IGV2X2NvZGUsCQkJCVwKIAkuYWN0aXZlX2xvdwk9IGFjdF9sb3csCQkJCVwKKwkuZGVib3VuY2VfaW50ZXJ2YWwgPSA0LAkJCQkJXAogCS5kZXNjCQk9ICJidG4gIiBkZXNjciwJCQkJXAogfQogCkBAIC05OSwxNCArMTM4LDE0IEBACiAJR1BJT19CVVRUT05fTE9XKDEwMywJS0VZX0RPV04sCSJkb3duIiksCiAJR1BJT19CVVRUT05fTE9XKDk2LAlLRVlfTEVGVCwJImxlZnQiKSwKIAlHUElPX0JVVFRPTl9MT1coOTgsCUtFWV9SSUdIVCwJInJpZ2h0IiksCi0JR1BJT19CVVRUT05fTE9XKDEwOSwJS0VZX0tQMSwJImdhbWUgMSIpLAotCUdQSU9fQlVUVE9OX0xPVygxMTEsCUtFWV9LUDIsCSJnYW1lIDIiKSwKLQlHUElPX0JVVFRPTl9MT1coMTA2LAlLRVlfS1AzLAkiZ2FtZSAzIiksCi0JR1BJT19CVVRUT05fTE9XKDEwMSwJS0VZX0tQNCwJImdhbWUgNCIpLAotCUdQSU9fQlVUVE9OX0xPVygxMDIsCUJUTl9UTCwJCSJsIiksCi0JR1BJT19CVVRUT05fTE9XKDk3LAlCVE5fVEwyLAkibDIiKSwKLQlHUElPX0JVVFRPTl9MT1coMTA1LAlCVE5fVFIsCQkiciIpLAotCUdQSU9fQlVUVE9OX0xPVygxMDcsCUJUTl9UUjIsCSJyMiIpLAorCUdQSU9fQlVUVE9OX0xPVygxMDksCUtFWV9QQUdFVVAsCSJnYW1lIDEiKSwKKwlHUElPX0JVVFRPTl9MT1coMTExLAlLRVlfRU5ELAkiZ2FtZSAyIiksCisJR1BJT19CVVRUT05fTE9XKDEwNiwJS0VZX1BBR0VET1dOLAkiZ2FtZSAzIiksCisJR1BJT19CVVRUT05fTE9XKDEwMSwJS0VZX0hPTUUsCSJnYW1lIDQiKSwKKwlHUElPX0JVVFRPTl9MT1coMTAyLAlLRVlfUklHSFRTSElGVCwJImwiKSwKKwlHUElPX0JVVFRPTl9MT1coOTcsCUtFWV9LUFBMVVMsCSJsMiIpLAorCUdQSU9fQlVUVE9OX0xPVygxMDUsCUtFWV9SSUdIVENUUkwsCSJyIiksCisJR1BJT19CVVRUT05fTE9XKDEwNywJS0VZX0tQTUlOVVMsCSJyMiIpLAogCUdQSU9fQlVUVE9OX0xPVygxMDQsCUtFWV9MRUZUQ1RSTCwJImN0cmwiKSwKIAlHUElPX0JVVFRPTl9MT1coOTksCUtFWV9NRU5VLAkibWVudSIpLAogCUdQSU9fQlVUVE9OX0xPVygxNzYsCUtFWV9DT0ZGRUUsCSJob2xkIiksCkBAIC0xMjcsMTQgKzE2Niw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBwYW5kb3JhX2tleXNfZ3Bpb19pbml0KHZvaWQpCi17Ci0JLyogc2V0IGRlYm91bmNlIHRpbWUgZm9yIEdQSU8gYmFua3MgNCBhbmQgNiAqLwotCWdwaW9fc2V0X2RlYm91bmNlKDMyICogMywgR1BJT19ERUJPVU5DRV9USU1FKTsKLQlncGlvX3NldF9kZWJvdW5jZSgzMiAqIDUsIEdQSU9fREVCT1VOQ0VfVElNRSk7Ci19Ci0KLXN0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CitzdGF0aWMgY29uc3QgdWludDMyX3QgYm9hcmRfa2V5bWFwW10gPSB7CiAJLyogcm93LCBjb2wsIGNvZGUgKi8KIAlLRVkoMCwgMCwgS0VZXzkpLAogCUtFWSgwLCAxLCBLRVlfOCksCkBAIC0yMjcsNiArMjU5LDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyB2b2lkIHBhbmRvcmFfd2wxMjUxX2luaXRfY2FyZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJLyoKKwkgKiBXZSBoYXZlIFRJIHdsMTI1MSBhdHRhY2hlZCB0byBNTUMzLiBQYXNzIHRoaXMgaW5mb3JtYXRpb24gdG8KKwkgKiBTRElPIGNvcmUgYmVjYXVzZSBpdCBjYW4ndCBiZSBwcm9iZWQgYnkgbm9ybWFsIG1ldGhvZHMuCisJICovCisJY2FyZC0+cXVpcmtzIHw9IE1NQ19RVUlSS19OT05TVERfU0RJTzsKKwljYXJkLT5jY2NyLndpZGVfYnVzID0gMTsKKwljYXJkLT5jaXMudmVuZG9yID0gMHgxMDRjOworCWNhcmQtPmNpcy5kZXZpY2UgPSAweDkwNjY7CisJY2FyZC0+Y2lzLmJsa3NpemUgPSA1MTI7CisJY2FyZC0+Y2lzLm1heF9kdHIgPSAyMDAwMDAwMDsKK30KKwogc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG9tYXAzcGFuZG9yYV9tbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKQEAgLTI0OCw2ICsyOTQsNyBAQAogCQkud2lyZXMJCT0gNCwKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJCS5pbml0X2NhcmQJPSBwYW5kb3JhX3dsMTI1MV9pbml0X2NhcmQsCiAJfSwKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwpAQCAtMjU1LDEyICszMDIsMzMgQEAKIHN0YXRpYyBpbnQgb21hcDNwYW5kb3JhX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaW50IHJldCwgZ3Bpb18zMmtoejsKKwogCS8qIGdwaW8gKyB7MCwxfSBpcyAibW1jezAsMX1fY2QiIChpbnB1dC9JUlEpICovCiAJb21hcDNwYW5kb3JhX21tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CiAJb21hcDNwYW5kb3JhX21tY1sxXS5ncGlvX2NkID0gZ3BpbyArIDE7CiAJb21hcDJfaHNtbWNfaW5pdChvbWFwM3BhbmRvcmFfbW1jKTsKIAorCS8qIGdwaW8gKyAxMyBkcml2ZXMgMzJrSHogYnVmZmVyIGZvciB3aWZpIG1vZHVsZSAqLworCWdwaW9fMzJraHogPSBncGlvICsgMTM7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fMzJraHosICJ3aWZpIDMya0h6Iik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW5ub3QgZ2V0IEdQSU8gbGluZSAlZCwgcmV0PSVkXG4iLCBncGlvXzMya2h6LCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW9fMzJraHosIDEpOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IHNldCBHUElPIGxpbmUgJWQsIHJldD0lZFxuIiwgZ3Bpb18zMmtoeiwgcmV0KTsKKwkJZ290byBmYWlsX2RpcmVjdGlvbjsKKwl9CisKIAlyZXR1cm4gMDsKKworZmFpbF9kaXJlY3Rpb246CisJZ3Bpb19mcmVlKGdwaW9fMzJraHopOworZmFpbDoKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBvbWFwM3BhbmRvcmFfZ3Bpb19kYXRhID0gewpAQCAtNTM5LDEwICs2MDcsNjcgQEAKIAlvbWFwX2dwaW9faW5pdCgpOwogfQogCitzdGF0aWMgdm9pZCBwYW5kb3JhX3dsMTI1MV9zZXRfcG93ZXIoYm9vbCBlbmFibGUpCit7CisJLyoKKwkgKiBLZWVwIHBvd2VyIGFsd2F5cyBvbiB1bnRpbCB3bDEyNTFfc2RpbyBkcml2ZXIgbGVhcm5zIHRvIHJlLWluaXQKKwkgKiB0aGUgY2hpcCBhZnRlciBwb3dlcmluZyBpdCBkb3duIGFuZCBiYWNrIHVwLgorCSAqLworfQorCitzdGF0aWMgc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhIHBhbmRvcmFfd2wxMjUxX3BkYXRhID0geworCS5zZXRfcG93ZXIJPSBwYW5kb3JhX3dsMTI1MV9zZXRfcG93ZXIsCisJLnVzZV9lZXByb20JPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFuZG9yYV93bDEyNTFfZGF0YSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAid2wxMjUxX2RhdGEiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYW5kb3JhX3dsMTI1MV9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgcGFuZG9yYV93bDEyNTFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUEFORE9SQV9XSUZJX0lSUV9HUElPLCAid2wxMjUxIGlycSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChQQU5ET1JBX1dJRklfSVJRX0dQSU8pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfaXJxOworCisJcGFuZG9yYV93bDEyNTFfcGRhdGEuaXJxID0gZ3Bpb190b19pcnEoUEFORE9SQV9XSUZJX0lSUV9HUElPKTsKKwlpZiAocGFuZG9yYV93bDEyNTFfcGRhdGEuaXJxIDwgMCkKKwkJZ290byBmYWlsX2lycTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8sICJ3bDEyNTEgbnJlc2V0Iik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbF9pcnE7CisKKwkvKiBzdGFydCBwb3dlcmVkIHNvIHRoYXQgaXQgcHJvYmVzIHdpdGggTU1DIHN1YnN5c3RlbSAqLworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8sIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfbnJlc2V0OworCisJcmV0dXJuOworCitmYWlsX25yZXNldDoKKwlncGlvX2ZyZWUoUEFORE9SQV9XSUZJX05SRVNFVF9HUElPKTsKK2ZhaWxfaXJxOgorCWdwaW9fZnJlZShQQU5ET1JBX1dJRklfSVJRX0dQSU8pOworZmFpbDoKKwlwcmludGsoS0VSTl9FUlIgIndsMTI1MSBib2FyZCBpbml0aWFsaXNhdGlvbiBmYWlsZWRcbiIpOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcDNwYW5kb3JhX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZwYW5kb3JhX2xlZHNfZ3BpbywKIAkmcGFuZG9yYV9rZXlzX2dwaW8sCiAJJnBhbmRvcmFfZHNzX2RldmljZSwKKwkmcGFuZG9yYV93bDEyNTFfZGF0YSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC01NzUsNiArNzAwLDcgQEAKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwogCW9tYXAzcGFuZG9yYV9pMmNfaW5pdCgpOworCXBhbmRvcmFfd2wxMjUxX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhvbWFwM3BhbmRvcmFfZGV2aWNlcywKIAkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CkBAIC01ODIsMjUgKzcwOCwxOSBAQAogCQkJQVJSQVlfU0laRShvbWFwM3BhbmRvcmFfc3BpX2JvYXJkX2luZm8pKTsKIAlvbWFwM3BhbmRvcmFfYWRzNzg0Nl9pbml0KCk7CiAJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7Ci0JcGFuZG9yYV9rZXlzX2dwaW9faW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CisJZ3BtY19uYW5kX2luaXQoJnBhbmRvcmFfbmFuZF9kYXRhKTsKIAogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9tYXBfaW8odm9pZCkKLXsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwotfQotCiBNQUNISU5FX1NUQVJUKE9NQVAzX1BBTkRPUkEsICJQYW5kb3JhIEhhbmRoZWxkIENvbnNvbGUiKQogCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmEwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCT0gb21hcDNwYW5kb3JhX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwM3BhbmRvcmFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG9tYXAzcGFuZG9yYV9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3N0YWxrZXIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNzdGFsa2VyLmMKaW5kZXggYTA0Y2ZmZC4uYmNkMDFkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3N0YWxrZXIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzc3RhbGtlci5jCkBAIC02NTIsMTggKzY1MiwxMiBAQAogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJfY2tlMSIsIE9NQVBfUElOX09VVFBVVCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19zdGFsa2VyX21hcF9pbyh2b2lkKQotewotCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Ci19Ci0KIE1BQ0hJTkVfU1RBUlQoU0JDMzUzMCwgIk9NQVAzIFNUQUxLRVIiKQogCS8qIE1haW50YWluZXI6IEphc29uIExhbSAtbHpnQGVtYS10ZWNoLmNvbSAqLwogCS5waHlzX2lvCQk9IDB4NDgwMDAwMDAsCiAJLmlvX3BnX29mZnN0CQk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwkJPSAweDgwMDAwMTAwLAotCS5tYXBfaW8JCQk9IG9tYXAzX3N0YWxrZXJfbWFwX2lvLAorCS5tYXBfaW8JCQk9IG9tYXAzX21hcF9pbywKIAkuaW5pdF9pcnEJCT0gb21hcDNfc3RhbGtlcl9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCQk9IG9tYXAzX3N0YWxrZXJfaW5pdCwKIAkudGltZXIJCQk9ICZvbWFwX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCmluZGV4IGYwNWI4NjcuLjY2M2M2MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKQEAgLTU0LDkgKzU0LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKLSNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAotCiAjZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJU1pfMTI4SwogCiAjZGVmaW5lIE9NQVAzX0FDX0dQSU8JCTEzNgpAQCAtMTA2LDIwICsxMDMsNiBAQAogCS5kZXZfcmVhZHkJPSBOVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwM3RvdWNoYm9va19uYW5kX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXAzdG91Y2hib29rX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKLQkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm9tYXAzdG91Y2hib29rX25hbmRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmb21hcDN0b3VjaGJvb2tfbmFuZF9yZXNvdXJjZSwKLX07Ci0KICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewpAQCAtNDU4LDggKzQ0MSw2IEBACiAJdTggY3MgPSAwOwogCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKIAotCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOwotCiAJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCiAJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKIAkJdTMyIHJldCA9IDA7CkBAIC00ODEsMTMgKzQ2Miw5IEBACiAKIAlpZiAobmFuZGNzIDwgR1BNQ19DU19OVU0pIHsKIAkJb21hcDN0b3VjaGJvb2tfbmFuZF9kYXRhLmNzID0gbmFuZGNzOwotCQlvbWFwM3RvdWNoYm9va19uYW5kX2RhdGEuZ3BtY19jc19iYXNlYWRkciA9ICh2b2lkICopCi0JCQkoZ3BtY19iYXNlX2FkZCArIEdQTUNfQ1MwX0JBU0UgKyBuYW5kY3MgKiBHUE1DX0NTX1NJWkUpOwotCQlvbWFwM3RvdWNoYm9va19uYW5kX2RhdGEuZ3BtY19iYXNlYWRkciA9Ci0JCQkJCQkodm9pZCAqKSAoZ3BtY19iYXNlX2FkZCk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgTkFORCBvbiBDUyVkXG4iLCBuYW5kY3MpOwotCQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwM3RvdWNoYm9va19uYW5kX2RldmljZSkgPCAwKQorCQlpZiAoZ3BtY19uYW5kX2luaXQoJm9tYXAzdG91Y2hib29rX25hbmRfZGF0YSkgPCAwKQogCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOwogCX0KIH0KQEAgLTU1OSwxOCArNTM2LDEyIEBACiAJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkcmNfY2tlMSIsIE9NQVBfUElOX09VVFBVVCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChUT1VDSEJPT0ssICJPTUFQMyB0b3VjaGJvb2sgQm9hcmQiKQogCS8qIE1haW50YWluZXI6IEdyZWdvaXJlIEdlbnRpbCAtIGh0dHA6Ly93d3cuYWx3YXlzaW5ub3ZhdGluZy5jb20gKi8KIAkucGh5c19pbwk9IDB4NDgwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXAzX3RvdWNoYm9va19tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcDNfdG91Y2hib29rX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwM190b3VjaGJvb2tfaW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZDFkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDRwYW5kYS5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogQm9hcmQgc3VwcG9ydCBmaWxlIGZvciBPTUFQNDQzMCBiYXNlZCBQYW5kYUJvYXJkLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIEF1dGhvcjogRGF2aWQgQW5kZXJzIDx4MDEzMjQ0NkB0aS5jb20+CisgKgorICogQmFzZWQgb24gbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKyAqCisgKiBBdXRob3I6IFNhbnRvc2ggU2hpbGlta2FyIDxzYW50b3NoLnNoaWxpbWthckB0aS5jb20+CisgKgorICogQmFzZWQgb24gbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvb21hcDQtY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L3RpbWVyLWdwLmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L21tYy5oPgorI2luY2x1ZGUgImhzbW1jLmgiCisKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXA0X3BhbmRhX2luaXRfaXJxKHZvaWQpCit7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCwgTlVMTCk7CisJZ2ljX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VUTUksCisJLm1vZGUJCQk9IE1VU0JfUEVSSVBIRVJBTCwKKwkucG93ZXIJCQk9IDEwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKwl7CisJCS5tbWMJCT0gMSwKKwkJLndpcmVzCQk9IDgsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwl9LAorCXt9CS8qIFRlcm1pbmF0b3IgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBvbWFwNF9wYW5kYV92bW1jX3N1cHBseVtdID0geworCXsKKwkJLnN1cHBseSA9ICJ2bW1jIiwKKwkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4wIiwKKwl9LAorCXsKKwkJLnN1cHBseSA9ICJ2bW1jIiwKKwkJLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4xIiwKKwl9LAorfTsKKworc3RhdGljIGludCBvbWFwNF90d2w2MDMwX2hzbW1jX2xhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsCisJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBTZXR0aW5nIE1NQzEgQ2FyZCBkZXRlY3QgSXJxICovCisJaWYgKHBkZXYtPmlkID09IDApCisJCXBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPSBUV0w2MDMwX0lSUV9CQVNFICsKKwkJCQkJCU1NQ0RFVEVDVF9JTlRSX09GRlNFVDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19pbml0IHZvaWQgb21hcDRfdHdsNjAzMF9oc21tY19zZXRfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlwZGF0YS0+aW5pdCA9CW9tYXA0X3R3bDYwMzBfaHNtbWNfbGF0ZV9pbml0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwNF90d2w2MDMwX2hzbW1jX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmNvbnRyb2xsZXJzKQoreworCXN0cnVjdCBvbWFwMl9oc21tY19pbmZvICpjOworCisJb21hcDJfaHNtbWNfaW5pdChjb250cm9sbGVycyk7CisJZm9yIChjID0gY29udHJvbGxlcnM7IGMtPm1tYzsgYysrKQorCQlvbWFwNF90d2w2MDMwX2hzbW1jX3NldF9sYXRlX2luaXQoYy0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDRfcGFuZGFfdmF1eDEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxMDAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBvbWFwNF9wYW5kYV92YXV4MiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDEyMDAwMDAsCisJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXA0X3BhbmRhX3ZhdXgzID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTAwMDAwMCwKKwkJLm1heF91VgkJCT0gMzAwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCSA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCisvKiBWTU1DMSBmb3IgTU1DMSBjYXJkICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDRfcGFuZGFfdm1tYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDEyMDAwMDAsCisJCS5tYXhfdVYJCQk9IDMwMDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgID0gMiwKKwkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9IG9tYXA0X3BhbmRhX3ZtbWNfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXA0X3BhbmRhX3ZwcCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI1MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXA0X3BhbmRhX3Z1c2ltID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJCT0gMjkwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCSA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDRfcGFuZGFfdmFuYSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDIxMDAwMDAsCisJCS5tYXhfdVYJCQk9IDIxMDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXA0X3BhbmRhX3ZjeGlvID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCSA9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgb21hcDRfcGFuZGFfdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkgPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXA0X3BhbmRhX3Z1c2IgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQkJPSAzMzAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJID0JUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhIG9tYXA0X3BhbmRhX3R3bGRhdGEgPSB7CisJLmlycV9iYXNlCT0gVFdMNjAzMF9JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDYwMzBfSVJRX0VORCwKKworCS8qIFJlZ3VsYXRvcnMgKi8KKwkudm1tYwkJPSAmb21hcDRfcGFuZGFfdm1tYywKKwkudnBwCQk9ICZvbWFwNF9wYW5kYV92cHAsCisJLnZ1c2ltCQk9ICZvbWFwNF9wYW5kYV92dXNpbSwKKwkudmFuYQkJPSAmb21hcDRfcGFuZGFfdmFuYSwKKwkudmN4aW8JCT0gJm9tYXA0X3BhbmRhX3ZjeGlvLAorCS52ZGFjCQk9ICZvbWFwNF9wYW5kYV92ZGFjLAorCS52dXNiCQk9ICZvbWFwNF9wYW5kYV92dXNiLAorCS52YXV4MQkJPSAmb21hcDRfcGFuZGFfdmF1eDEsCisJLnZhdXgyCQk9ICZvbWFwNF9wYW5kYV92YXV4MiwKKwkudmF1eDMJCT0gJm9tYXA0X3BhbmRhX3ZhdXgzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG9tYXA0X3BhbmRhX2kyY19ib2FyZGluZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0d2w2MDMwIiwgMHg0OCksCisJCS5mbGFncyA9IEkyQ19DTElFTlRfV0FLRSwKKwkJLmlycSA9IE9NQVA0NFhYX0lSUV9TWVNfMU4sCisJCS5wbGF0Zm9ybV9kYXRhID0gJm9tYXA0X3BhbmRhX3R3bGRhdGEsCisJfSwKK307CitzdGF0aWMgaW50IF9faW5pdCBvbWFwNF9wYW5kYV9pMmNfaW5pdCh2b2lkKQoreworCS8qCisJICogUGhvZW5peCBBdWRpbyBJQyBuZWVkcyBJMkMxIHRvCisJICogc3RhcnQgd2l0aCA0MDAgS0h6IG9yIGxlc3MKKwkgKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgNDAwLCBvbWFwNF9wYW5kYV9pMmNfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRShvbWFwNF9wYW5kYV9pMmNfYm9hcmRpbmZvKSk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDQsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDRfcGFuZGFfaW5pdCh2b2lkKQoreworCWludCBzdGF0dXM7CisKKwlvbWFwNF9wYW5kYV9pMmNfaW5pdCgpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvbWFwNF90d2w2MDMwX2hzbW1jX2luaXQobW1jKTsKKwkvKiBPTUFQNCBQYW5kYSB1c2VzIGludGVybmFsIHRyYW5zY2VpdmVyIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLworCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKKwkvKiBGSVhNRTogYWxsb3cgbXVsdGktb21hcCB0byBib290IHVudGlsIG11c2IgaXMgdXBkYXRlZCBmb3Igb21hcDQgKi8KKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKQorCQl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDRfcGFuZGFfbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfNDQzeCgpOworCW9tYXA0NHh4X21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQNF9QQU5EQSwgIk9NQVA0IFBhbmRhIGJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBEYXZpZCBBbmRlcnMgLSBUZXhhcyBJbnN0cnVtZW50cyBJbmMgKi8KKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGZhMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXA0X3BhbmRhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwNF9wYW5kYV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcDRfcGFuZGFfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDg3YWNiMmYuLjRjNDg0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTU4LDggKzU4LDYgQEAKICNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKIAogI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUgU1pfMTI4SwotI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCi0jZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKIAogI2RlZmluZSBPVkVST19TTVNDOTExWF9DUyAgICAgIDUKICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfR1BJTyAgICAxNzYKQEAgLTE2Niw5ICsxNjQsMjYgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Zlcm9fc21zYzkxMXgyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdmVyb19zbXNjOTExeDJfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvdmVyb19zbXNjOTExeDJfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvdmVyb19zbXNjOTExeF9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbXNjOTExeF9kZXZpY2VzW10gPSB7CisJJm92ZXJvX3Ntc2M5MTF4X2RldmljZSwKKwkmb3Zlcm9fc21zYzkxMXgyX2RldmljZSwKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9zbXNjOTExeCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgY3NfbWVtX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZSwgY3NfbWVtX2Jhc2UyOworCisJLyogc2V0IHVwIGZpcnN0IHNtc2M5MTF4IGNoaXAgKi8KIAogCWlmIChncG1jX2NzX3JlcXVlc3QoT1ZFUk9fU01TQzkxMVhfQ1MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVxdWVzdCBmb3IgR1BNQyBtZW0gZm9yIHNtc2M5MTF4XG4iKTsKQEAgLTE4OSw3ICsyMDQsMjggQEAKIAlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQX0dQSU9fSVJRKE9WRVJPX1NNU0M5MTFYX0dQSU8pOwogCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1sxXS5lbmQJICA9IDA7CiAKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm92ZXJvX3Ntc2M5MTF4X2RldmljZSk7CisJLyogc2V0IHVwIHNlY29uZCBzbXNjOTExeCBjaGlwICovCisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KE9WRVJPX1NNU0M5MTFYMl9DUywgU1pfMTZNLCAmY3NfbWVtX2Jhc2UyKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVxdWVzdCBmb3IgR1BNQyBtZW0gZm9yIHNtc2M5MTF4MlxuIik7CisJCXJldHVybjsKKwl9CisKKwlvdmVyb19zbXNjOTExeDJfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gY3NfbWVtX2Jhc2UyICsgMHgwOworCW92ZXJvX3Ntc2M5MTF4Ml9yZXNvdXJjZXNbMF0uZW5kICAgPSBjc19tZW1fYmFzZTIgKyAweGZmOworCisJaWYgKChncGlvX3JlcXVlc3QoT1ZFUk9fU01TQzkxMVgyX0dQSU8sICJTTVNDOTExWDIgSVJRIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX2lucHV0KE9WRVJPX1NNU0M5MTFYMl9HUElPKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChPVkVST19TTVNDOTExWDJfR1BJTywgMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFNNU0M5MTFYMiBJUlFcbiIpOworCQlyZXR1cm47CisJfQorCisJb3Zlcm9fc21zYzkxMXgyX3Jlc291cmNlc1sxXS5zdGFydCA9IE9NQVBfR1BJT19JUlEoT1ZFUk9fU01TQzkxMVgyX0dQSU8pOworCW92ZXJvX3Ntc2M5MTF4Ml9yZXNvdXJjZXNbMV0uZW5kICAgPSAwOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoc21zYzkxMXhfZGV2aWNlcywgQVJSQVlfU0laRShzbXNjOTExeF9kZXZpY2VzKSk7CiB9CiAKICNlbHNlCkBAIC0yMzEsMjggKzI2NywxMSBAQAogCS5kbWFfY2hhbm5lbCA9IC0xLAkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE5BTkQgZHJpdmVyICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG92ZXJvX25hbmRfcmVzb3VyY2UgPSB7Ci0JLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Zlcm9fbmFuZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyLW5hbmQiLAotCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmb3Zlcm9fbmFuZF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotCS5yZXNvdXJjZQk9ICZvdmVyb19uYW5kX3Jlc291cmNlLAotfTsKLQotCiBzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9fZmxhc2hfaW5pdCh2b2lkKQogewogCXU4IGNzID0gMDsKIAl1OCBuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CiAKLQl1MzIgZ3BtY19iYXNlX2FkZCA9IE9NQVAzNFhYX0dQTUNfVklSVDsKLQogCS8qIGZpbmQgb3V0IHRoZSBjaGlwLXNlbGVjdCBvbiB3aGljaCBOQU5EIGV4aXN0cyAqLwogCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CiAJCXUzMiByZXQgPSAwOwpAQCAtMjc0LDEyICsyOTMsOSBAQAogCiAJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CiAJCW92ZXJvX25hbmRfZGF0YS5jcyA9IG5hbmRjczsKLQkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIgPSAodm9pZCAqKQotCQkJKGdwbWNfYmFzZV9hZGQgKyBHUE1DX0NTMF9CQVNFICsgbmFuZGNzICogR1BNQ19DU19TSVpFKTsKLQkJb3Zlcm9fbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKSAoZ3BtY19iYXNlX2FkZCk7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgTkFORCBvbiBDUyVkXG4iLCBuYW5kY3MpOwotCQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvdmVyb19uYW5kX2RldmljZSkgPCAwKQorCQlpZiAoZ3BtY19uYW5kX2luaXQoJm92ZXJvX25hbmRfZGF0YSkgPCAwKQogCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOwogCX0KIH0KQEAgLTQ4NCwxNyArNTAwLDExIEBACiAJCQkJCSJPVkVST19HUElPX1VTQkhfQ1BFTlxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19tYXBfaW8odm9pZCkKLXsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwotfQotCiBNQUNISU5FX1NUQVJUKE9WRVJPLCAiR3Vtc3RpeCBPdmVybyIpCiAJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoMHhmYTAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvdmVyb19tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb3Zlcm9faW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IG92ZXJvX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IDAzNDgzOTIuLjlhNWViODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KIAogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CkBAIC0zMyw2ICszMiwxMSBAQAogI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAorI2luY2x1ZGUgPHNvdW5kL3RsdjMyMGFpYzN4Lmg+CisjaW5jbHVkZSA8c291bmQvdHBhNjEzMGEyLXBsYXQuaD4KKworI2luY2x1ZGUgPC4uL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2My5oPgorCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiaHNtbWMuaCIKIApAQCAtNTEsNiArNTUsMTIgQEAKIAogc3RhdGljIHN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSB3bDEyNTFfcGRhdGE7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19TRU5TT1JTX1RTTDI1NjMpIHx8IGRlZmluZWQoQ09ORklHX1NFTlNPUlNfVFNMMjU2M19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHRzbDI1NjNfcGxhdGZvcm1fZGF0YSByeDUxX3RzbDI1NjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY292ZXJfY29tcF9nYWluID0gMTYsCit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyB3bDEyNTFfbWNzcGlfY29uZmlnID0gewogCS50dXJib19tb2RlCT0gMCwKIAkuc2luZ2xlX2NoYW5uZWwJPSAxLApAQCAtMzExLDQ4ICszMjEsMjkgQEAKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMV9zdXBwbHkgPSB7Ci0JLnN1cHBseSAgID0gInZtbWMiLAotCS5kZXZfbmFtZSA9ICJtbWNpLW9tYXAtaHMuMCIsCi19Oworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdm1tYzFfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4wIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZhdXgzX3N1cHBseSA9IHsKLQkuc3VwcGx5ICAgPSAidm1tYyIsCi0JLmRldl9uYW1lID0gIm1tY2ktb21hcC1ocy4xIiwKLX07CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92YXV4M19zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjEiKTsKIAotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdnNpbV9zdXBwbHkgPSB7Ci0JLnN1cHBseSAgID0gInZtbWNfYXV4IiwKLQkuZGV2X25hbWUgPSAibW1jaS1vbWFwLWhzLjEiLAotfTsKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZzaW1fc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jX2F1eCIsICJtbWNpLW9tYXAtaHMuMSIpOwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbGllc1tdID0gewogCS8qIHRsdjMyMGFpYzN4IGFuYWxvZyBzdXBwbGllcyAqLwotCXsKLQkJLnN1cHBseQkJPSAiQVZERCIsCi0JCS5kZXZfbmFtZQk9ICIyLTAwMTgiLAotCX0sCi0JewotCQkuc3VwcGx5CQk9ICJEUlZERCIsCi0JCS5kZXZfbmFtZQk9ICIyLTAwMTgiLAotCX0sCisJUkVHVUxBVE9SX1NVUFBMWSgiQVZERCIsICIyLTAwMTgiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJEUlZERCIsICIyLTAwMTgiKSwKKwkvKiB0cGE2MTMwYTIgKi8KKwlSRUdVTEFUT1JfU1VQUExZKCJWZGQiLCAiMi0wMDYwIiksCiAJLyogS2VlcCB2bW1jIGFzIGxhc3QgaXRlbS4gSXQgaXMgbm90IGl0ZXJhdGVkIGZvciBuZXdlciBib2FyZHMgKi8KLQl7Ci0JCS5zdXBwbHkJCT0gInZtbWMiLAotCQkuZGV2X25hbWUJPSAibW1jaS1vbWFwLWhzLjEiLAotCX0sCisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJtbWNpLW9tYXAtaHMuMSIpLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdmlvX3N1cHBsaWVzW10gPSB7CiAJLyogdGx2MzIwYWljM3ggZGlnaXRhbCBzdXBwbGllcyAqLwotCXsKLQkJLnN1cHBseQkJPSAiSU9WREQiLAotCQkuZGV2X25hbWUJPSAiMi0wMDE4IgotCX0sCi0JewotCQkuc3VwcGx5CQk9ICJEVkREIiwKLQkJLmRldl9uYW1lCT0gIjItMDAxOCIKLQl9LAorCVJFR1VMQVRPUl9TVVBQTFkoIklPVkREIiwgIjItMDAxOCIpLAorCVJFR1VMQVRPUl9TVVBQTFkoIkRWREQiLCAiMi0wMDE4IiksCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0ZCX09NQVAyX01PRFVMRSkKQEAgLTM3Myw2ICszNjQsNyBAQAogCQkubmFtZQkJCT0gIlYyOCIsCiAJCS5taW5fdVYJCQk9IDI4MDAwMDAsCiAJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hbHdheXNfb24JCT0gdHJ1ZSwgLyogZHVlIGJhdHRlcnkgY292ZXIgc2Vuc29yICovCiAJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCiAJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKIAkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQpAQCAtNzE4LDYgKzcxMCwxNSBAQAogCS52aW8JCQk9ICZyeDUxX3ZpbywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYWljM3hfcGRhdGEgcng1MV9haWMzeF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmdwaW9fcmVzZXQJCT0gNjAsCit9OworCitzdGF0aWMgc3RydWN0IHRwYTYxMzBhMl9wbGF0Zm9ybV9kYXRhIHJ4NTFfdHBhNjEzMGEyX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkuaWQJCQk9IFRQQTYxMzBBMiwKKwkucG93ZXJfZ3BpbwkJPSA5OCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzFbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJ0d2w1MDMwIiwgMHg0OCksCkBAIC03MzAsNyArNzMxLDE4IEBACiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18yW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygidGx2MzIwYWljM3giLCAweDE4KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV9haWMzeF9kYXRhLAogCX0sCisjaWYgZGVmaW5lZChDT05GSUdfU0VOU09SU19UU0wyNTYzKSB8fCBkZWZpbmVkKENPTkZJR19TRU5TT1JTX1RTTDI1NjNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oInRzbDI1NjMiLCAweDI5KSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV90c2wyNTYzX3BsYXRmb3JtX2RhdGEsCisJfSwKKyNlbmRpZgorCXsKKwkJSTJDX0JPQVJEX0lORk8oInRwYTYxMzBhMiIsIDB4NjApLAorCQkucGxhdGZvcm1fZGF0YSA9ICZyeDUxX3RwYTYxMzBhMl9kYXRhLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ4NTFfaTJjX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS12aWRlby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXZpZGVvLmMKaW5kZXggYjc0M2E0Zi4uNWExMDA1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXZpZGVvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXZpZGVvLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogI2luY2x1ZGUgPHBsYXQvdnJhbS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKaW5kZXggM2JkOTU2Zi4uYTU4ZThjYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfc2V0X2dsb2JhbHNfM3h4eCgpOwogCXJ4NTFfdmlkZW9fbWVtX2luaXQoKTsKIAlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXNkcC1mbGFzaC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1zZHAtZmxhc2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQwMjYzMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXNkcC1mbGFzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLS8qCi0gKiBib2FyZC1zZHAtZmxhc2guYwotICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAtZmxhc2guYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCi0gKgotICogVmltYWwgU2luZ2ggPHZpbWFsc2luZ2hAdGkuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgotI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgotI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgotI2luY2x1ZGUgPHBsYXQvdGMuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXNkcC5oPgotCi0jZGVmaW5lIFJFR19GUEdBX1JFVgkJCTB4MTAKLSNkZWZpbmUgUkVHX0ZQR0FfRElQX1NXSVRDSF9JTlBVVDIJMHg2MAotI2RlZmluZSBNQVhfU1VQUE9SVEVEX0dQTUNfQ09ORklHCTMKLQotI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwIC8qIGRlYnVnIGJvYXJkICovCi0KLSNkZWZpbmUgUERDX05PUgkJMQotI2RlZmluZSBQRENfTkFORAkyCi0jZGVmaW5lIFBEQ19PTkVOQU5ECTMKLSNkZWZpbmUgREJHX01QREIJNAotCi0vKiB2YXJpb3VzIG1lbW9yeSBzaXplcyAqLwotI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYxCVNaXzY0TQkvKiBOT1IgZmxhc2ggKDY0IE1lZyBhbGlnbmVkKSAqLwotI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYyCVNaXzEyOE0JLyogTk9SIGZsYXNoICgyNTYgTWVnIGFsaWduZWQpICovCi0KLS8qCi0gKiBTRFAzNDMwIFYyIEJvYXJkIENTIG9yZ2FuaXphdGlvbgotICogRGlmZmVyZW50IGZyb20gU0RQMzQzMCBWMS4gTm93IDQgc3dpdGNoZXMgdXNlZCB0byBzcGVjaWZ5IENTCi0gKgotICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCi0gKgotICogUkVWSVNJVDogQWRkIHN1cHBvcnQgZm9yIDI0MzAgU0RQCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoaXBfc2VsX3NkcFtdW0dQTUNfQ1NfTlVNXSA9IHsKLQl7UERDX05PUiwgUERDX05BTkQsIFBEQ19PTkVOQU5ELCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTEgKi8KLQl7UERDX09ORU5BTkQsIFBEQ19OQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTAgKi8KLQl7UERDX05BTkQsIFBEQ19PTkVOQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMDEgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNkcF9ub3JfZGF0YSA9IHsKLQkud2lkdGgJCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RwX25vcl9yZXNvdXJjZSA9IHsKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHBfbm9yX2RldmljZSA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IDAsCi0JLmRldgkJPSB7Ci0JCQkucGxhdGZvcm1fZGF0YSA9ICZzZHBfbm9yX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJnNkcF9ub3JfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgdm9pZAotX19pbml0IGJvYXJkX25vcl9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9ub3JfcGFydHMsIHU4IGNzKQotewotCWludCBlcnI7Ci0KLQlzZHBfbm9yX2RhdGEucGFydHMJPSBzZHBfbm9yX3BhcnRzLnBhcnRzOwotCXNkcF9ub3JfZGF0YS5ucl9wYXJ0cwk9IHNkcF9ub3JfcGFydHMubnJfcGFydHM7Ci0KLQkvKiBDb25maWd1cmUgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBvZiBOT1IgZGV2aWNlICovCi0JaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMV8wKSB7Ci0JCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMiAtIDEsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7Ci0JCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAotCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjIgLSAxOwotCX0gZWxzZSB7Ci0JCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMSAtIDEsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7Ci0JCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAotCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjEgLSAxOwotCX0KLQlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIk5PUjogQ2FuJ3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHBfbm9yX2RldmljZSkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIJIlVuYWJsZSB0byByZWdpc3RlciBOT1IgZGV2aWNlXG4iKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhID0gewotCS5kbWFfY2hhbm5lbAk9IC0xLCAgIC8qIGRpc2FibGUgRE1BIGluIE9NQVAgT25lTkFORCBkcml2ZXIgKi8KLX07Ci0KLXN0YXRpYyB2b2lkCi1fX2luaXQgYm9hcmRfb25lbmFuZF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9vbmVuYW5kX3BhcnRzLCB1OCBjcykKLXsKLQlib2FyZF9vbmVuYW5kX2RhdGEuY3MJCT0gY3M7Ci0JYm9hcmRfb25lbmFuZF9kYXRhLnBhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMucGFydHM7Ci0JYm9hcmRfb25lbmFuZF9kYXRhLm5yX3BhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMubnJfcGFydHM7Ci0KLQlncG1jX29uZW5hbmRfaW5pdCgmYm9hcmRfb25lbmFuZF9kYXRhKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZAotX19pbml0IGJvYXJkX29uZW5hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfb25lbmFuZF9wYXJ0cywgdTggY3MpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX01URF9PTkVOQU5EX09NQVAyIHx8IENPTkZJR19NVERfT05FTkFORF9PTUFQMl9NT0RVTEUgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKLQotLyogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzICovCi1zdGF0aWMgc3RydWN0IGdwbWNfdGltaW5ncyBuYW5kX3RpbWluZ3MgPSB7Ci0KLQkuc3luY19jbGsgPSAwLAotCi0JLmNzX29uID0gMCwKLQkuY3NfcmRfb2ZmID0gMzYsCi0JLmNzX3dyX29mZiA9IDM2LAotCi0JLmFkdl9vbiA9IDYsCi0JLmFkdl9yZF9vZmYgPSAyNCwKLQkuYWR2X3dyX29mZiA9IDM2LAotCi0JLndlX29mZiA9IDMwLAotCS5vZV9vZmYgPSA0OCwKLQotCS5hY2Nlc3MgPSA1NCwKLQkucmRfY3ljbGUgPSA3MiwKLQkud3JfY3ljbGUgPSA3MiwKLQotCS53cl9hY2Nlc3MgPSAzMCwKLQkud3JfZGF0YV9tdXhfYnVzID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgc2RwX25hbmRfZGF0YSA9IHsKLQkubmFuZF9zZXR1cAk9IE5VTEwsCi0JLmdwbWNfdAkJPSAmbmFuZF90aW1pbmdzLAotCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLwotCS5kZXZfcmVhZHkJPSBOVUxMLAotCS5kZXZzaXplCT0gMCwJLyogJzAnIGZvciA4LWJpdCwgJzEnIGZvciAxNi1iaXQgZGV2aWNlICovCi19OwotCi1zdGF0aWMgdm9pZAotX19pbml0IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfbmFuZF9wYXJ0cywgdTggY3MpCi17Ci0Jc2RwX25hbmRfZGF0YS5jcwkJPSBjczsKLQlzZHBfbmFuZF9kYXRhLnBhcnRzCQk9IHNkcF9uYW5kX3BhcnRzLnBhcnRzOwotCXNkcF9uYW5kX2RhdGEubnJfcGFydHMJCT0gc2RwX25hbmRfcGFydHMubnJfcGFydHM7Ci0KLQlzZHBfbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIJPSAodm9pZCAqKShPTUFQMzRYWF9HUE1DX1ZJUlQgKwotCQkJCQkJCUdQTUNfQ1MwX0JBU0UgKwotCQkJCQkJCWNzICogR1BNQ19DU19TSVpFKTsKLQlzZHBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIJID0gKHZvaWQgKikgKE9NQVAzNFhYX0dQTUNfVklSVCk7Ci0KLQlncG1jX25hbmRfaW5pdCgmc2RwX25hbmRfZGF0YSk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQKLV9faW5pdCBib2FyZF9uYW5kX2luaXQoc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgc2RwX25hbmRfcGFydHMsIHU4IGNzKQotewotfQotI2VuZGlmIC8qIENPTkZJR19NVERfTkFORF9PTUFQMiB8fCBDT05GSUdfTVREX05BTkRfT01BUDJfTU9EVUxFICovCi0KLS8qKgotICogZ2V0X2dwbWMwX3R5cGUgLSBSZWFkcyB0aGUgRlBHQSBESVBfU1dJVENIX0lOUFVUX1JFR0lTVEVSMiB0byBnZXQKLSAqIHRoZSB2YXJpb3VzIGNzIHZhbHVlcy4KLSAqLwotc3RhdGljIHU4IGdldF9ncG1jMF90eXBlKHZvaWQpCi17Ci0JdTggY3MgPSAwOwotCXZvaWQgX19pb21lbSAqZnBnYV9tYXBfYWRkcjsKLQotCWZwZ2FfbWFwX2FkZHIgPSBpb3JlbWFwKERFQlVHX0JBU0UsIDQwOTYpOwotCWlmICghZnBnYV9tYXBfYWRkcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIShfX3Jhd19yZWFkdyhmcGdhX21hcF9hZGRyICsgUkVHX0ZQR0FfUkVWKSkpCi0JCS8qIHdlIGRvbnQgaGF2ZSBhbiBERUJVRyBGUEdBPz8/ICovCi0JCS8qIERlcGVuZCBvbiAjZGVmaW5lcyEhIGRlZmF1bHQgdG8gc3RyYXRhIGJvb3QgcmV0dXJuIHBhcmFtICovCi0JCWdvdG8gdW5tYXA7Ci0KLQkvKiBTOC1ESVAtT0ZGID0gMSwgUzgtRElQLU9OID0gMCAqLwotCWNzID0gX19yYXdfcmVhZHcoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX0RJUF9TV0lUQ0hfSU5QVVQyKSAmIDB4ZjsKLQotCS8qIEVTMi4wIFNEUCdzIG9ud2FyZHMgNCBkaXAgc3dpdGNoZXMgYXJlIHByb3ZpZGVkIGZvciBDUyAqLwotCWlmIChvbWFwX3JldigpID49IE9NQVAzNDMwX1JFVl9FUzFfMCkKLQkJLyogY2hhbmdlIChTOC0xOjQ9RFMtMjowKSB0byAoUzgtNDoxPURTLTI6MCkgKi8KLQkJY3MgPSAoKGNzICYgOCkgPj4gMykgfCAoKGNzICYgNCkgPj4gMSkgfAotCQkJKChjcyAmIDIpIDw8IDEpIHwgKChjcyAmIDEpIDw8IDMpOwotCWVsc2UKLQkJLyogY2hhbmdlIChTOC0xOjM9RFMtMjowKSB0byAoUzgtMzoxPURTLTI6MCkgKi8KLQkJY3MgPSAoKGNzICYgNCkgPj4gMikgfCAoY3MgJiAyKSB8ICgoY3MgJiAxKSA8PCAyKTsKLXVubWFwOgotCWlvdW5tYXAoZnBnYV9tYXBfYWRkcik7Ci0JcmV0dXJuIGNzOwotfQotCi0vKioKLSAqIHNkcDM0MzBfZmxhc2hfaW5pdCAtIElkZW50aWZ5IGRldmljZXMgY29ubmVjdGVkIHRvIEdQTUMgYW5kIHJlZ2lzdGVyLgotICoKLSAqIEByZXR1cm4gLSB2b2lkLgotICovCi12b2lkIF9faW5pdCBzZHBfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfcGFydGl0aW9uX2luZm9bXSkKLXsKLQl1OAkJY3MgPSAwOwotCXU4CQlub3JjcyA9IEdQTUNfQ1NfTlVNICsgMTsKLQl1OAkJbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOwotCXU4CQlvbmVuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7Ci0JdTgJCWlkeDsKLQl1bnNpZ25lZCBjaGFyCSpjb25maWdfc2VsID0gTlVMTDsKLQotCS8qIFJFVklTSVQ6IElzIHRoaXMgcmV0dXJuIGNvcnJlY3QgaWR4IGZvciAyNDMwIFNEUD8KLQkgKiBmb3Igd2hpY2ggY3MgY29uZmlndXJhdGlvbiBtYXRjaGVzIGZvciAyNDMwIFNEUD8KLQkgKi8KLQlpZHggPSBnZXRfZ3BtYzBfdHlwZSgpOwotCWlmIChpZHggPj0gTUFYX1NVUFBPUlRFRF9HUE1DX0NPTkZJRykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGNoaXAgc2VsZWN0OiAlZFxuIiwgX19mdW5jX18sIGNzKTsKLQkJcmV0dXJuOwotCX0KLQljb25maWdfc2VsID0gKHVuc2lnbmVkIGNoYXIgKikoY2hpcF9zZWxfc2RwW2lkeF0pOwotCi0Jd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKLQkJc3dpdGNoIChjb25maWdfc2VsW2NzXSkgewotCQljYXNlIFBEQ19OT1I6Ci0JCQlpZiAobm9yY3MgPiBHUE1DX0NTX05VTSkKLQkJCQlub3JjcyA9IGNzOwotCQkJYnJlYWs7Ci0JCWNhc2UgUERDX05BTkQ6Ci0JCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCi0JCQkJbmFuZGNzID0gY3M7Ci0JCQlicmVhazsKLQkJY2FzZSBQRENfT05FTkFORDoKLQkJCWlmIChvbmVuYW5kY3MgPiBHUE1DX0NTX05VTSkKLQkJCQlvbmVuYW5kY3MgPSBjczsKLQkJCWJyZWFrOwotCQl9OwotCQljcysrOwotCX0KLQotCWlmIChub3JjcyA+IEdQTUNfQ1NfTlVNKQotCQlwcmludGsoS0VSTl9JTkZPICJOT1I6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgotCQkJCSJpbiBHUE1DXG4iKTsKLQllbHNlCi0JCWJvYXJkX25vcl9pbml0KHNkcF9wYXJ0aXRpb25faW5mb1swXSwgbm9yY3MpOwotCi0JaWYgKG9uZW5hbmRjcyA+IEdQTUNfQ1NfTlVNKQotCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKLQkJCQkiaW4gR1BNQ1xuIik7Ci0JZWxzZQotCQlib2FyZF9vbmVuYW5kX2luaXQoc2RwX3BhcnRpdGlvbl9pbmZvWzFdLCBvbmVuYW5kY3MpOwotCi0JaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKQotCQlwcmludGsoS0VSTl9JTkZPICJOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKLQkJCQkiaW4gR1BNQ1xuIik7Ci0JZWxzZQotCQlib2FyZF9uYW5kX2luaXQoc2RwX3BhcnRpdGlvbl9pbmZvWzJdLCBuYW5kY3MpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCmluZGV4IGZmZTE4OGMuLjNhZDllY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKQEAgLTcxLDMwICs3MSw4MCBAQAogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJLyogV0xBTiBJUlEgLSBHUElPIDE2MiAqLworCU9NQVAzX01VWChNQ0JTUDFfQ0xLWCwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCS8qIFdMQU4gUE9XRVIgRU5BQkxFIC0gR1BJTyAxMDEgKi8KKwlPTUFQM19NVVgoQ0FNX0QyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCisJLyogV0xBTiBTRElPOiBNTUMzIENNRCAqLworCU9NQVAzX01VWChNQ1NQSTFfQ1MxLCBPTUFQX01VWF9NT0RFMyB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJLyogV0xBTiBTRElPOiBNTUMzIENMSyAqLworCU9NQVAzX01VWChFVEtfQ0xLLCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJLyogV0xBTiBTRElPOiBNTUMzIERBVFswLTNdICovCisJT01BUDNfTVVYKEVUS19EMywgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChFVEtfRDQsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwlPTUFQM19NVVgoRVRLX0Q1LCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKEVUS19ENiwgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAogCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCiB9OwogI2Vsc2UKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gem9vbV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyLU5BTkQiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwJLyogNTEyS0IsIDB4ODAwMDAgKi8KKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTAgKiAoNjQgKiAyMDQ4KSwJLyogMS4yNU1CLCAweDE0MDAwMCAqLworCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiQm9vdCBFbnYtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELCAgIC8qIE9mZnNldCA9IDB4MWMwMDAwICovCisJCS5zaXplCQk9IDIgKiAoNjQgKiAyMDQ4KSwJLyogMjU2S0IsIDB4NDAwMDAgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIktlcm5lbC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MDIwMDAwMCovCisJCS5zaXplCQk9IDI0MCAqICg2NCAqIDIwNDgpLAkvKiAzME0sIDB4MUUwMDAwMCAqLworCX0sCisJeworCQkubmFtZQkJPSAic3lzdGVtIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjAwMDAwMCAqLworCQkuc2l6ZQkJPSAzMzI4ICogKDY0ICogMjA0OCksCS8qIDQxNk0sIDB4MUEwMDAwMDAgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gInVzZXJkYXRhIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MUMwMDAwMDAqLworCQkuc2l6ZQkJPSAyNTYgKiAoNjQgKiAyMDQ4KSwJLyogMzJNLCAweDIwMDAwMDAgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gImNhY2hlIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MUUwMDAwMDAqLworCQkuc2l6ZQkJPSAyNTYgKiAoNjQgKiAyMDQ4KSwJLyogMzJNLCAweDIwMDAwMDAgKi8KKwl9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbTJfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJem9vbV9wZXJpcGhlcmFsc19pbml0KCk7CisJYm9hcmRfbmFuZF9pbml0KHpvb21fbmFuZF9wYXJ0aXRpb25zLAorCQkJQVJSQVlfU0laRSh6b29tX25hbmRfcGFydGl0aW9ucyksIFpPT01fTkFORF9DUyk7CiAJem9vbV9kZWJ1Z2JvYXJkX2luaXQoKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfem9vbTJfbWFwX2lvKHZvaWQpCi17Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKLX0KLQogTUFDSElORV9TVEFSVChPTUFQX1pPT00yLCAiT01BUCBab29tMiBib2FyZCIpCiAJLnBoeXNfaW8JPSBaT09NX1VBUlRfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoWk9PTV9VQVJUX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCi0JLm1hcF9pbwkJPSBvbWFwX3pvb20yX21hcF9pbywKKwkubWFwX2lvCQk9IG9tYXAzX21hcF9pbywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuaW5pdF9pcnEJPSBvbWFwX3pvb20yX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3pvb20yX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKaW5kZXggNWI2MDVlYi4uNmNhMGI4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYwpAQCAtMjUsMTUgKzI1LDUwIEBACiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0taHluaXgtaDhtYngwMHUwbWVyLTBlbS5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tX21hcF9pbyh2b2lkKQotewotCW9tYXAyX3NldF9nbG9iYWxzXzM2eHgoKTsKLQlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHpvb21fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB6b29tX25hbmRfcGFydGl0aW9uc1tdID0geworCS8qIEFsbCB0aGUgcGFydGl0aW9uIHNpemVzIGFyZSBsaXN0ZWQgaW4gdGVybXMgb2YgTkFORCBibG9jayBzaXplICovCisJeworCQkubmFtZQkJPSAiWC1Mb2FkZXItTkFORCIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gNCAqICg2NCAqIDIwNDgpLAkvKiA1MTJLQiwgMHg4MDAwMCAqLworCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290LU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHg4MDAwMCAqLworCQkuc2l6ZQkJPSAxMCAqICg2NCAqIDIwNDgpLAkvKiAxLjI1TUIsIDB4MTQwMDAwICovCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJCb290IEVudi1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsICAgLyogT2Zmc2V0ID0gMHgxYzAwMDAgKi8KKwkJLnNpemUJCT0gMiAqICg2NCAqIDIwNDgpLAkvKiAyNTZLQiwgMHg0MDAwMCAqLworCX0sCisJeworCQkubmFtZQkJPSAiS2VybmVsLU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgwMjAwMDAwKi8KKwkJLnNpemUJCT0gMjQwICogKDY0ICogMjA0OCksCS8qIDMwTSwgMHgxRTAwMDAwICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJzeXN0ZW0iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyMDAwMDAwICovCisJCS5zaXplCQk9IDMzMjggKiAoNjQgKiAyMDQ4KSwJLyogNDE2TSwgMHgxQTAwMDAwMCAqLworCX0sCisJeworCQkubmFtZQkJPSAidXNlcmRhdGEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgxQzAwMDAwMCovCisJCS5zaXplCQk9IDI1NiAqICg2NCAqIDIwNDgpLAkvKiAzMk0sIDB4MjAwMDAwMCAqLworCX0sCisJeworCQkubmFtZQkJPSAiY2FjaGUiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgxRTAwMDAwMCovCisJCS5zaXplCQk9IDI1NiAqICg2NCAqIDIwNDgpLAkvKiAzMk0sIDB4MjAwMDAwMCAqLworCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF96b29tX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSB6b29tX2NvbmZpZzsKQEAgLTQ2LDYgKzgxLDE5IEBACiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKKwkvKiBXTEFOIElSUSAtIEdQSU8gMTYyICovCisJT01BUDNfTVVYKE1DQlNQMV9DTEtYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJLyogV0xBTiBQT1dFUiBFTkFCTEUgLSBHUElPIDEwMSAqLworCU9NQVAzX01VWChDQU1fRDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgQ01EICovCisJT01BUDNfTVVYKE1DU1BJMV9DUzEsIE9NQVBfTVVYX01PREUzIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgQ0xLICovCisJT01BUDNfTVVYKEVUS19DTEssIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwkvKiBXTEFOIFNESU86IE1NQzMgREFUWzAtM10gKi8KKwlPTUFQM19NVVgoRVRLX0QzLCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCisJT01BUDNfTVVYKEVUS19ENCwgT01BUF9NVVhfTU9ERTIgfCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApLAorCU9NQVAzX01VWChFVEtfRDUsIE9NQVBfTVVYX01PREUyIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKSwKKwlPTUFQM19NVVgoRVRLX0Q2LCBPTUFQX01VWF9NT0RFMiB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCksCiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CiAjZWxzZQpAQCAtNjYsNiArMTE0LDggQEAKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQlApOwogCXpvb21fcGVyaXBoZXJhbHNfaW5pdCgpOworCWJvYXJkX25hbmRfaW5pdCh6b29tX25hbmRfcGFydGl0aW9ucywKKwkJCSBBUlJBWV9TSVpFKHpvb21fbmFuZF9wYXJ0aXRpb25zKSwgWk9PTV9OQU5EX0NTKTsKIAl6b29tX2RlYnVnYm9hcmRfaW5pdCgpOwogCiAJb21hcF9tdXhfaW5pdF9ncGlvKDY0LCBPTUFQX1BJTl9PVVRQVVQpOwpAQCAtNzYsNyArMTI2LDcgQEAKIAkucGh5c19pbwk9IFpPT01fVUFSVF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChaT09NX1VBUlRfVklSVCA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKLQkubWFwX2lvCQk9IG9tYXBfem9vbV9tYXBfaW8sCisJLm1hcF9pbwkJPSBvbWFwM19tYXBfaW8sCiAJLnJlc2VydmUJPSBvbWFwX3Jlc2VydmUsCiAJLmluaXRfaXJxCT0gb21hcF96b29tX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBvbWFwX3pvb21faW5pdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4X2RhdGEuYwppbmRleCBkMzM3NDQxLi4xMzg2NDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCkBAIC0xNDA4LDcgKzE0MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1c2J0bGxfZmNrID0gewogCS5uYW1lCQk9ICJ1c2J0bGxfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20uYwppbmRleCAyZDgzNTY1Li43MjFjM2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5jCkBAIC01MCwxNSArNTAsMTUgQEAKIAogCWNtX2lkbGVzdF9yZWcgPSBjbV9pZGxlc3Rfb2Zmc1tpZGxlc3RfaWQgLSAxXTsKIAorCW1hc2sgPSAxIDw8IGlkbGVzdF9zaGlmdDsKKwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJZW5hID0gaWRsZXN0X3NoaWZ0OworCQllbmEgPSBtYXNrOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQllbmEgPSAwOwogCWVsc2UKIAkJQlVHKCk7CiAKLQltYXNrID0gMSA8PCBpZGxlc3Rfc2hpZnQ7Ci0KIAkvKiBYWFggc2hvdWxkIGJlIE9NQVAyIENNICovCiAJb21hcF90ZXN0X3RpbWVvdXQoKChjbV9yZWFkX21vZF9yZWcocHJjbV9tb2QsIGNtX2lkbGVzdF9yZWcpICYgbWFzaykgPT0gZW5hKSwKIAkJCSAgTUFYX01PRFVMRV9SRUFEWV9USU1FLCBpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggMDNlNmM5ZS4uMmRiYjI2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L3RjLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgotI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9tbWMuaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgpAQCAtMTUzLDEwICsxNTIsMTIgQEAKIAl7CiAJCS5zdGFydAkJPSBJTlRfMjRYWF9NQUlMX1UwX01QVSwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCQkubmFtZQkJPSAiZHNwIiwKIAl9LAogCXsKIAkJLnN0YXJ0CQk9IElOVF8yNFhYX01BSUxfVTNfTVBVLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJCS5uYW1lCQk9ICJpdmEiLAogCX0sCiB9Owogc3RhdGljIGludCBvbWFwMl9tYm94X3Jlc291cmNlc19zeiA9IEFSUkFZX1NJWkUob21hcDJfbWJveF9yZXNvdXJjZXMpOwpAQCAtMTc1LDYgKzE3Niw3IEBACiAJewogCQkuc3RhcnQJCT0gSU5UXzI0WFhfTUFJTF9VMF9NUFUsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJCT0gImRzcCIsCiAJfSwKIH07CiBzdGF0aWMgaW50IG9tYXAzX21ib3hfcmVzb3VyY2VzX3N6ID0gQVJSQVlfU0laRShvbWFwM19tYm94X3Jlc291cmNlcyk7CkBAIC0xOTYsNiArMTk4LDcgQEAKIAl7CiAJCS5zdGFydCAgICAgICAgICA9IE9NQVA0NFhYX0lSUV9NQUlMX1UwLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lSUSwKKwkJLm5hbWUJCT0gIm1ib3giLAogCX0sCiB9Owogc3RhdGljIGludCBvbWFwNF9tYm94X3Jlc291cmNlc19zeiA9IEFSUkFZX1NJWkUob21hcDRfbWJveF9yZXNvdXJjZXMpOwpAQCAtMjA1LDcgKzIwOCw3IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWJveF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAyLW1haWxib3giLAorCS5uYW1lCQk9ICJvbWFwLW1haWxib3giLAogCS5pZAkJPSAtMSwKIH07CiAKQEAgLTIzMCw2NCArMjMzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWJveCh2b2lkKSB7IH0KICNlbmRpZiAvKiBDT05GSUdfT01BUF9NQk9YX0ZXSyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotCi0jZGVmaW5lIE9NQVAyX1NUSV9CQVNFCQkweDQ4MDY4MDAwCi0jZGVmaW5lIE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UJMHg1NDAwMDAwMAotI2RlZmluZSBPTUFQMl9TVElfSVJRCQk0Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RpX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9CQVNFLAotCQkuZW5kCQk9IE9NQVAyX1NUSV9CQVNFICsgMHg3ZmYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9DSEFOTkVMX0JBU0UsCi0JCS5lbmQJCT0gT01BUDJfU1RJX0NIQU5ORUxfQkFTRSArIFNaXzY0SyAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE9NQVAyX1NUSV9JUlEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLQotI2RlZmluZSBPTUFQM19TRFRJX0JBU0UJCTB4NTQ1MDAwMDAKLSNkZWZpbmUgT01BUDNfU0RUSV9DSEFOTkVMX0JBU0UJMHg1NDYwMDAwMAotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHN0aV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAkJPSBPTUFQM19TRFRJX0JBU0UsCi0JCS5lbmQJCT0gT01BUDNfU0RUSV9CQVNFICsgMHhGRkYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CQk9IE9NQVAzX1NEVElfQ0hBTk5FTF9CQVNFLAotCQkuZW5kCQk9IE9NQVAzX1NEVElfQ0hBTk5FTF9CQVNFICsgU1pfMU0gLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0aV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInN0aSIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzdGlfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzdGlfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9zdGkodm9pZCkKLXsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN0aV9kZXZpY2UpOwotfQotI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfc3RpKHZvaWQpIHt9Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NQSV9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfU1BJX09NQVAyNFhYX01PRFVMRSkKIApAQCAtNjcyLDE5ICs2MTgsMTkgQEAKIAkJCQkJT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKIAogCWlmIChjcHVfaXNfb21hcDI0MjAoKSAmJiBjb250cm9sbGVyX25yID09IDApIHsKLQkJb21hcF9jZmdfcmVnKEgxOF8yNFhYX01NQ19DTUQpOwotCQlvbWFwX2NmZ19yZWcoSDE1XzI0WFhfTU1DX0NMS0kpOwotCQlvbWFwX2NmZ19yZWcoRzE5XzI0WFhfTU1DX0NMS08pOwotCQlvbWFwX2NmZ19yZWcoRjIwXzI0WFhfTU1DX0RBVDApOwotCQlvbWFwX2NmZ19yZWcoRjE5XzI0WFhfTU1DX0RBVF9ESVIwKTsKLQkJb21hcF9jZmdfcmVnKEcxOF8yNFhYX01NQ19DTURfRElSKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2NtZCIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfY2xraSIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfY2xrbyIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0MCIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0X2RpcjAiLCAwKTsKKwkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2NtZF9kaXIiLCAwKTsKIAkJaWYgKG1tY19jb250cm9sbGVyLT5zbG90c1swXS53aXJlcyA9PSA0KSB7Ci0JCQlvbWFwX2NmZ19yZWcoSDE0XzI0WFhfTU1DX0RBVDEpOwotCQkJb21hcF9jZmdfcmVnKEUxOV8yNFhYX01NQ19EQVQyKTsKLQkJCW9tYXBfY2ZnX3JlZyhEMTlfMjRYWF9NTUNfREFUMyk7Ci0JCQlvbWFwX2NmZ19yZWcoRTIwXzI0WFhfTU1DX0RBVF9ESVIxKTsKLQkJCW9tYXBfY2ZnX3JlZyhGMThfMjRYWF9NTUNfREFUX0RJUjIpOwotCQkJb21hcF9jZmdfcmVnKEUxOF8yNFhYX01NQ19EQVRfRElSMyk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0MSIsIDApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2RhdDIiLCAwKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXQzIiwgMCk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic2RtbWNfZGF0X2RpcjEiLCAwKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZG1tY19kYXRfZGlyMiIsIDApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInNkbW1jX2RhdF9kaXIzIiwgMCk7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKaW5kZXggZTU3ZmIyOS4uNzIyMjA5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMtbmFuZC5jCkBAIC0xOSw4ICsxOSw2IEBACiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogCi0jZGVmaW5lIFdSX1JEX1BJTl9NT05JVE9SSU5HCTB4MDA2MDAwMDAKLQogc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZ3BtY19uYW5kX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3BtY19uYW5kX3Jlc291cmNlID0gewpAQCAtNzEsMTAgKzY5LDEwIEBACiAJdC53cl9jeWNsZSAgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPndyX2N5Y2xlKTsKIAogCS8qIENvbmZpZ3VyZSBHUE1DICovCi0JZ3BtY19jc193cml0ZV9yZWcoZ3BtY19uYW5kX2RhdGEtPmNzLCBHUE1DX0NTX0NPTkZJRzEsCi0JCQlHUE1DX0NPTkZJRzFfREVWSUNFU0laRShncG1jX25hbmRfZGF0YS0+ZGV2c2l6ZSkgfAotCQkJR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTkFORCk7Ci0KKwlncG1jX2NzX2NvbmZpZ3VyZShncG1jX25hbmRfZGF0YS0+Y3MsCisJCQkJR1BNQ19DT05GSUdfREVWX1NJWkUsIGdwbWNfbmFuZF9kYXRhLT5kZXZzaXplKTsKKwlncG1jX2NzX2NvbmZpZ3VyZShncG1jX25hbmRfZGF0YS0+Y3MsCisJCQlHUE1DX0NPTkZJR19ERVZfVFlQRSwgR1BNQ19ERVZJQ0VUWVBFX05BTkQpOwogCWVyciA9IGdwbWNfY3Nfc2V0X3RpbWluZ3MoZ3BtY19uYW5kX2RhdGEtPmNzLCAmdCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTgyLDI3ICs4MCwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwbWNfbmFuZF9zZXR1cCh2b2lkKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZncG1jX25hbmRfZGV2aWNlLmRldjsKLQotCS8qIFNldCB0aW1pbmdzIGluIEdQTUMgKi8KLQlpZiAob21hcDJfbmFuZF9ncG1jX3JldGltZSgpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBzZXQgZ3BtYyB0aW1pbmdzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBfX2luaXQgZ3BtY19uYW5kX2luaXQoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICpfbmFuZF9kYXRhKQogewotCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGVycgk9IDA7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmdwbWNfbmFuZF9kZXZpY2UuZGV2OwogCiAJZ3BtY19uYW5kX2RhdGEgPSBfbmFuZF9kYXRhOwotCWdwbWNfbmFuZF9kYXRhLT5uYW5kX3NldHVwID0gZ3BtY19uYW5kX3NldHVwOworCWdwbWNfbmFuZF9kYXRhLT5uYW5kX3NldHVwID0gb21hcDJfbmFuZF9ncG1jX3JldGltZTsKIAlncG1jX25hbmRfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZ3BtY19uYW5kX2RhdGE7CiAKIAllcnIgPSBncG1jX2NzX3JlcXVlc3QoZ3BtY19uYW5kX2RhdGEtPmNzLCBOQU5EX0lPX1NJWkUsCkBAIC0xMTIsMTkgKzk2LDE2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JZXJyID0gZ3BtY19uYW5kX3NldHVwKCk7CisJIC8qIFNldCB0aW1pbmdzIGluIEdQTUMgKi8KKwllcnIgPSBvbWFwMl9uYW5kX2dwbWNfcmV0aW1lKCk7CiAJaWYgKGVyciA8IDApIHsKLQkJZGV2X2VycihkZXYsICJOQU5EIHBsYXRmb3JtIHNldHVwIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHNldCBncG1jIHRpbWluZ3M6ICVkXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qIEVuYWJsZSBSRCBQSU4gTW9uaXRvcmluZyBSZWcgKi8KIAlpZiAoZ3BtY19uYW5kX2RhdGEtPmRldl9yZWFkeSkgewotCQl2YWwgID0gZ3BtY19jc19yZWFkX3JlZyhncG1jX25hbmRfZGF0YS0+Y3MsCi0JCQkJCQkgR1BNQ19DU19DT05GSUcxKTsKLQkJdmFsIHw9IFdSX1JEX1BJTl9NT05JVE9SSU5HOwotCQlncG1jX2NzX3dyaXRlX3JlZyhncG1jX25hbmRfZGF0YS0+Y3MsCi0JCQkJCQlHUE1DX0NTX0NPTkZJRzEsIHZhbCk7CisJCWdwbWNfY3NfY29uZmlndXJlKGdwbWNfbmFuZF9kYXRhLT5jcywgR1BNQ19DT05GSUdfUkRZX0JTWSwgMSk7CiAJfQogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZncG1jX25hbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggNWJjM2NhMC4uZjQ2OTMzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTQ2LDggKzQ2LDkgQEAKICNkZWZpbmUgR1BNQ19FQ0NfQ09ORklHCQkweDFmNAogI2RlZmluZSBHUE1DX0VDQ19DT05UUk9MCTB4MWY4CiAjZGVmaW5lIEdQTUNfRUNDX1NJWkVfQ09ORklHCTB4MWZjCisjZGVmaW5lIEdQTUNfRUNDMV9SRVNVTFQgICAgICAgIDB4MjAwCiAKLSNkZWZpbmUgR1BNQ19DUzAJCTB4NjAKKyNkZWZpbmUgR1BNQ19DUzBfT0ZGU0VUCQkweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRQkJMHgzMAogCiAjZGVmaW5lIEdQTUNfTUVNX1NUQVJUCQkweDAwMDAwMDAwCkBAIC05Miw3ICs5Myw4IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfbWVtX3Jvb3Q7CiBzdGF0aWMgc3RydWN0IHJlc291cmNlCWdwbWNfY3NfbWVtW0dQTUNfQ1NfTlVNXTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3BtY19tZW1fbG9jayk7Ci1zdGF0aWMgdW5zaWduZWQJCWdwbWNfY3NfbWFwOworc3RhdGljIHVuc2lnbmVkIGludCBncG1jX2NzX21hcDsJLyogZmxhZyBmb3IgY3Mgd2hpY2ggYXJlIGluaXRpYWxpemVkICovCitzdGF0aWMgaW50IGdwbWNfZWNjX3VzZWQgPSAtRUlOVkFMOwkvKiBjcyB1c2luZyBlY2MgZW5naW5lICovCiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfYmFzZTsKIApAQCAtMTA4LDExICsxMTAsMjcgQEAKIAlyZXR1cm4gX19yYXdfcmVhZGwoZ3BtY19iYXNlICsgaWR4KTsKIH0KIAorc3RhdGljIHZvaWQgZ3BtY19jc193cml0ZV9ieXRlKGludCBjcywgaW50IGlkeCwgdTggdmFsKQoreworCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CisKKwlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwX09GRlNFVCArIChjcyAqIEdQTUNfQ1NfU0laRSkgKyBpZHg7CisJX19yYXdfd3JpdGViKHZhbCwgcmVnX2FkZHIpOworfQorCitzdGF0aWMgdTggZ3BtY19jc19yZWFkX2J5dGUoaW50IGNzLCBpbnQgaWR4KQoreworCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CisKKwlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwX09GRlNFVCArIChjcyAqIEdQTUNfQ1NfU0laRSkgKyBpZHg7CisJcmV0dXJuIF9fcmF3X3JlYWRiKHJlZ19hZGRyKTsKK30KKwogdm9pZCBncG1jX2NzX3dyaXRlX3JlZyhpbnQgY3MsIGludCBpZHgsIHUzMiB2YWwpCiB7CiAJdm9pZCBfX2lvbWVtICpyZWdfYWRkcjsKIAotCXJlZ19hZGRyID0gZ3BtY19iYXNlICsgR1BNQ19DUzAgKyAoY3MgKiBHUE1DX0NTX1NJWkUpICsgaWR4OworCXJlZ19hZGRyID0gZ3BtY19iYXNlICsgR1BNQ19DUzBfT0ZGU0VUICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKIAlfX3Jhd193cml0ZWwodmFsLCByZWdfYWRkcik7CiB9CiAKQEAgLTEyMCw3ICsxMzgsNyBAQAogewogCXZvaWQgX19pb21lbSAqcmVnX2FkZHI7CiAKLQlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwICsgKGNzICogR1BNQ19DU19TSVpFKSArIGlkeDsKKwlyZWdfYWRkciA9IGdwbWNfYmFzZSArIEdQTUNfQ1MwX09GRlNFVCArIChjcyAqIEdQTUNfQ1NfU0laRSkgKyBpZHg7CiAJcmV0dXJuIF9fcmF3X3JlYWRsKHJlZ19hZGRyKTsKIH0KIApAQCAtNDE5LDggKzQzNywxNTcgQEAKIEVYUE9SVF9TWU1CT0woZ3BtY19jc19mcmVlKTsKIAogLyoqCisgKiBncG1jX3JlYWRfc3RhdHVzIC0gcmVhZCBhY2Nlc3MgcmVxdWVzdCB0byBnZXQgdGhlIGRpZmZlcmVudCBncG1jIHN0YXR1cworICogQGNtZDogY29tbWFuZCB0eXBlCisgKiBAcmV0dXJuIHN0YXR1cworICovCitpbnQgZ3BtY19yZWFkX3N0YXR1cyhpbnQgY21kKQoreworCWludAlzdGF0dXMgPSAtRUlOVkFMOworCXUzMglyZWd2YWwgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEdQTUNfR0VUX0lSUV9TVEFUVVM6CisJCXN0YXR1cyA9IGdwbWNfcmVhZF9yZWcoR1BNQ19JUlFTVEFUVVMpOworCQlicmVhazsKKworCWNhc2UgR1BNQ19QUkVGRVRDSF9GSUZPX0NOVDoKKwkJcmVndmFsID0gZ3BtY19yZWFkX3JlZyhHUE1DX1BSRUZFVENIX1NUQVRVUyk7CisJCXN0YXR1cyA9IEdQTUNfUFJFRkVUQ0hfU1RBVFVTX0ZJRk9fQ05UKHJlZ3ZhbCk7CisJCWJyZWFrOworCisJY2FzZSBHUE1DX1BSRUZFVENIX0NPVU5UOgorCQlyZWd2YWwgPSBncG1jX3JlYWRfcmVnKEdQTUNfUFJFRkVUQ0hfU1RBVFVTKTsKKwkJc3RhdHVzID0gR1BNQ19QUkVGRVRDSF9TVEFUVVNfQ09VTlQocmVndmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIEdQTUNfU1RBVFVTX0JVRkZFUjoKKwkJcmVndmFsID0gZ3BtY19yZWFkX3JlZyhHUE1DX1NUQVRVUyk7CisJCS8qIDEgOiBidWZmZXIgaXMgYXZhaWxhYmxlIHRvIHdyaXRlICovCisJCXN0YXR1cyA9IHJlZ3ZhbCAmIEdQTUNfU1RBVFVTX0JVRkZfRU1QVFk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJncG1jX3JlYWRfc3RhdHVzOiBOb3Qgc3VwcG9ydGVkXG4iKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KK0VYUE9SVF9TWU1CT0woZ3BtY19yZWFkX3N0YXR1cyk7CisKKy8qKgorICogZ3BtY19jc19jb25maWd1cmUgLSB3cml0ZSByZXF1ZXN0IHRvIGNvbmZpZ3VyZSBncG1jCisgKiBAY3M6IGNoaXAgc2VsZWN0IG51bWJlcgorICogQGNtZDogY29tbWFuZCB0eXBlCisgKiBAd3ZhbDogdmFsdWUgdG8gd3JpdGUKKyAqIEByZXR1cm4gc3RhdHVzIG9mIHRoZSBvcGVyYXRpb24KKyAqLworaW50IGdwbWNfY3NfY29uZmlndXJlKGludCBjcywgaW50IGNtZCwgaW50IHd2YWwpCit7CisJaW50IGVyciA9IDA7CisJdTMyIHJlZ3ZhbCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgR1BNQ19TRVRfSVJRX1NUQVRVUzoKKwkJZ3BtY193cml0ZV9yZWcoR1BNQ19JUlFTVEFUVVMsIHd2YWwpOworCQlicmVhazsKKworCWNhc2UgR1BNQ19DT05GSUdfV1A6CisJCXJlZ3ZhbCA9IGdwbWNfcmVhZF9yZWcoR1BNQ19DT05GSUcpOworCQlpZiAod3ZhbCkKKwkJCXJlZ3ZhbCAmPSB+R1BNQ19DT05GSUdfV1JJVEVQUk9URUNUOyAvKiBXUCBpcyBPTiAqLworCQllbHNlCisJCQlyZWd2YWwgfD0gR1BNQ19DT05GSUdfV1JJVEVQUk9URUNUOyAgLyogV1AgaXMgT0ZGICovCisJCWdwbWNfd3JpdGVfcmVnKEdQTUNfQ09ORklHLCByZWd2YWwpOworCQlicmVhazsKKworCWNhc2UgR1BNQ19DT05GSUdfUkRZX0JTWToKKwkJcmVndmFsICA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisJCWlmICh3dmFsKQorCQkJcmVndmFsIHw9IFdSX1JEX1BJTl9NT05JVE9SSU5HOworCQllbHNlCisJCQlyZWd2YWwgJj0gfldSX1JEX1BJTl9NT05JVE9SSU5HOworCQlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUcxLCByZWd2YWwpOworCQlicmVhazsKKworCWNhc2UgR1BNQ19DT05GSUdfREVWX1NJWkU6CisJCXJlZ3ZhbCAgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCQlyZWd2YWwgfD0gR1BNQ19DT05GSUcxX0RFVklDRVNJWkUod3ZhbCk7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEsIHJlZ3ZhbCk7CisJCWJyZWFrOworCisJY2FzZSBHUE1DX0NPTkZJR19ERVZfVFlQRToKKwkJcmVndmFsICA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisJCXJlZ3ZhbCB8PSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSh3dmFsKTsKKwkJaWYgKHd2YWwgPT0gR1BNQ19ERVZJQ0VUWVBFX05PUikKKwkJCXJlZ3ZhbCB8PSBHUE1DX0NPTkZJRzFfTVVYQUREREFUQTsKKwkJZ3BtY19jc193cml0ZV9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSwgcmVndmFsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgImdwbWNfY29uZmlndXJlX2NzOiBOb3Qgc3VwcG9ydGVkXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChncG1jX2NzX2NvbmZpZ3VyZSk7CisKKy8qKgorICogZ3BtY19uYW5kX3JlYWQgLSBuYW5kIHNwZWNpZmljIHJlYWQgYWNjZXNzIHJlcXVlc3QKKyAqIEBjczogY2hpcCBzZWxlY3QgbnVtYmVyCisgKiBAY21kOiBjb21tYW5kIHR5cGUKKyAqLworaW50IGdwbWNfbmFuZF9yZWFkKGludCBjcywgaW50IGNtZCkKK3sKKwlpbnQgcnZhbCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgR1BNQ19OQU5EX0RBVEE6CisJCXJ2YWwgPSBncG1jX2NzX3JlYWRfYnl0ZShjcywgR1BNQ19DU19OQU5EX0RBVEEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ3BtY19yZWFkX25hbmRfY3RybDogTm90IHN1cHBvcnRlZFxuIik7CisJfQorCXJldHVybiBydmFsOworfQorRVhQT1JUX1NZTUJPTChncG1jX25hbmRfcmVhZCk7CisKKy8qKgorICogZ3BtY19uYW5kX3dyaXRlIC0gbmFuZCBzcGVjaWZpYyB3cml0ZSByZXF1ZXN0CisgKiBAY3M6IGNoaXAgc2VsZWN0IG51bWJlcgorICogQGNtZDogY29tbWFuZCB0eXBlCisgKiBAd3ZhbDogdmFsdWUgdG8gd3JpdGUKKyAqLworaW50IGdwbWNfbmFuZF93cml0ZShpbnQgY3MsIGludCBjbWQsIGludCB3dmFsKQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEdQTUNfTkFORF9DT01NQU5EOgorCQlncG1jX2NzX3dyaXRlX2J5dGUoY3MsIEdQTUNfQ1NfTkFORF9DT01NQU5ELCB3dmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIEdQTUNfTkFORF9BRERSRVNTOgorCQlncG1jX2NzX3dyaXRlX2J5dGUoY3MsIEdQTUNfQ1NfTkFORF9BRERSRVNTLCB3dmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIEdQTUNfTkFORF9EQVRBOgorCQlncG1jX2NzX3dyaXRlX2J5dGUoY3MsIEdQTUNfQ1NfTkFORF9EQVRBLCB3dmFsKTsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZ3BtY193cml0ZV9uYW5kX2N0cmw6IE5vdCBzdXBwb3J0ZWRcbiIpOworCQllcnIgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChncG1jX25hbmRfd3JpdGUpOworCisKKworLyoqCiAgKiBncG1jX3ByZWZldGNoX2VuYWJsZSAtIGNvbmZpZ3VyZXMgYW5kIHN0YXJ0cyBwcmVmZXRjaCB0cmFuc2ZlcgotICogQGNzOiBuYW5kIGNzIChjaGlwIHNlbGVjdCkgbnVtYmVyCisgKiBAY3M6IGNzIChjaGlwIHNlbGVjdCkgbnVtYmVyCiAgKiBAZG1hX21vZGU6IGRtYSBtb2RlIGVuYWJsZSAoMSkgb3IgZGlzYWJsZSAoMCkKICAqIEB1MzJfY291bnQ6IG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZAogICogQGlzX3dyaXRlOiBwcmVmZXRjaCByZWFkKDApIG9yIHdyaXRlIHBvc3QoMSkgbW9kZQpAQCAtNDI4LDcgKzU5NSw2IEBACiBpbnQgZ3BtY19wcmVmZXRjaF9lbmFibGUoaW50IGNzLCBpbnQgZG1hX21vZGUsCiAJCQkJdW5zaWduZWQgaW50IHUzMl9jb3VudCwgaW50IGlzX3dyaXRlKQogewotCXVpbnQzMl90IHByZWZldGNoX2NvbmZpZzE7CiAKIAlpZiAoIShncG1jX3JlYWRfcmVnKEdQTUNfUFJFRkVUQ0hfQ09OVFJPTCkpKSB7CiAJCS8qIFNldCB0aGUgYW1vdW50IG9mIGJ5dGVzIHRvIGJlIHByZWZldGNoZWQgKi8KQEAgLTQzNywxNyArNjAzLDE3IEBACiAJCS8qIFNldCBkbWEvbXB1IG1vZGUsIHRoZSBwcmVmZXRjaCByZWFkIC8gcG9zdCB3cml0ZSBhbmQKIAkJICogZW5hYmxlIHRoZSBlbmdpbmUuIFNldCB3aGljaCBjcyBpcyBoYXMgcmVxdWVzdGVkIGZvci4KIAkJICovCi0JCXByZWZldGNoX2NvbmZpZzEgPSAoKGNzIDw8IENTX05VTV9TSElGVCkgfAorCQlncG1jX3dyaXRlX3JlZyhHUE1DX1BSRUZFVENIX0NPTkZJRzEsICgoY3MgPDwgQ1NfTlVNX1NISUZUKSB8CiAJCQkJCVBSRUZFVENIX0ZJRk9USFJFU0hPTEQgfAogCQkJCQlFTkFCTEVfUFJFRkVUQ0ggfAogCQkJCQkoZG1hX21vZGUgPDwgRE1BX01QVV9NT0RFKSB8Ci0JCQkJCSgweDEgJiBpc193cml0ZSkpOwotCQlncG1jX3dyaXRlX3JlZyhHUE1DX1BSRUZFVENIX0NPTkZJRzEsIHByZWZldGNoX2NvbmZpZzEpOworCQkJCQkoMHgxICYgaXNfd3JpdGUpKSk7CisKKwkJLyogIFN0YXJ0IHRoZSBwcmVmZXRjaCBlbmdpbmUgKi8KKwkJZ3BtY193cml0ZV9yZWcoR1BNQ19QUkVGRVRDSF9DT05UUk9MLCAweDEpOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCS8qICBTdGFydCB0aGUgcHJlZmV0Y2ggZW5naW5lICovCi0JZ3BtY193cml0ZV9yZWcoR1BNQ19QUkVGRVRDSF9DT05UUk9MLCAweDEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTYsMjUgKzYyMiwyNSBAQAogLyoqCiAgKiBncG1jX3ByZWZldGNoX3Jlc2V0IC0gZGlzYWJsZXMgYW5kIHN0b3BzIHRoZSBwcmVmZXRjaCBlbmdpbmUKICAqLwotdm9pZCBncG1jX3ByZWZldGNoX3Jlc2V0KHZvaWQpCitpbnQgZ3BtY19wcmVmZXRjaF9yZXNldChpbnQgY3MpCiB7CisJdTMyIGNvbmZpZzE7CisKKwkvKiBjaGVjayBpZiB0aGUgc2FtZSBtb2R1bGUvY3MgaXMgdHJ5aW5nIHRvIHJlc2V0ICovCisJY29uZmlnMSA9IGdwbWNfcmVhZF9yZWcoR1BNQ19QUkVGRVRDSF9DT05GSUcxKTsKKwlpZiAoKChjb25maWcxID4+IENTX05VTV9TSElGVCkgJiAweDcpICE9IGNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIFN0b3AgdGhlIFBGUFcgZW5naW5lICovCiAJZ3BtY193cml0ZV9yZWcoR1BNQ19QUkVGRVRDSF9DT05UUk9MLCAweDApOwogCiAJLyogUmVzZXQvZGlzYWJsZSB0aGUgUEZQVyBlbmdpbmUgKi8KIAlncG1jX3dyaXRlX3JlZyhHUE1DX1BSRUZFVENIX0NPTkZJRzEsIDB4MCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZ3BtY19wcmVmZXRjaF9yZXNldCk7CiAKLS8qKgotICogZ3BtY19wcmVmZXRjaF9zdGF0dXMgLSByZWFkcyBwcmVmZXRjaCBzdGF0dXMgb2YgZW5naW5lCi0gKi8KLWludCAgZ3BtY19wcmVmZXRjaF9zdGF0dXModm9pZCkKLXsKLQlyZXR1cm4gZ3BtY19yZWFkX3JlZyhHUE1DX1BSRUZFVENIX1NUQVRVUyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwbWNfcHJlZmV0Y2hfc3RhdHVzKTsKLQogc3RhdGljIHZvaWQgX19pbml0IGdwbWNfbWVtX2luaXQodm9pZCkKIHsKIAlpbnQgY3M7CkBAIC02MTUsMyArNzgxLDc5IEBACiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzICovCisKKy8qKgorICogZ3BtY19lbmFibGVfaHdlY2MgLSBlbmFibGUgaGFyZHdhcmUgZWNjIGZ1bmN0aW9uYWxpdHkKKyAqIEBjczogY2hpcCBzZWxlY3QgbnVtYmVyCisgKiBAbW9kZTogcmVhZC93cml0ZSBtb2RlCisgKiBAZGV2X3dpZHRoOiBkZXZpY2UgYnVzIHdpZHRoKDEgZm9yIHgxNiwgMCBmb3IgeDgpCisgKiBAZWNjX3NpemU6IGJ5dGVzIGZvciB3aGljaCBFQ0Mgd2lsbCBiZSBnZW5lcmF0ZWQKKyAqLworaW50IGdwbWNfZW5hYmxlX2h3ZWNjKGludCBjcywgaW50IG1vZGUsIGludCBkZXZfd2lkdGgsIGludCBlY2Nfc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogY2hlY2sgaWYgZWNjIG1vZHVsZSBpcyBpbiB1c2VkICovCisJaWYgKGdwbWNfZWNjX3VzZWQgIT0gLUVJTlZBTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlncG1jX2VjY191c2VkID0gY3M7CisKKwkvKiBjbGVhciBlY2MgYW5kIGVuYWJsZSBiaXRzICovCisJdmFsID0gKCgweDAwMDAwMDAxPDw4KSB8IDB4MDAwMDAwMDEpOworCWdwbWNfd3JpdGVfcmVnKEdQTUNfRUNDX0NPTlRST0wsIHZhbCk7CisKKwkvKiBwcm9ncmFtIGVjYyBhbmQgcmVzdWx0IHNpemVzICovCisJdmFsID0gKCgoKGVjY19zaXplID4+IDEpIC0gMSkgPDwgMjIpIHwgKDB4MDAwMDAwMEYpKTsKKwlncG1jX3dyaXRlX3JlZyhHUE1DX0VDQ19TSVpFX0NPTkZJRywgdmFsKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgR1BNQ19FQ0NfUkVBRDoKKwkJZ3BtY193cml0ZV9yZWcoR1BNQ19FQ0NfQ09OVFJPTCwgMHgxMDEpOworCQlicmVhazsKKwljYXNlIEdQTUNfRUNDX1JFQURTWU46CisJCSBncG1jX3dyaXRlX3JlZyhHUE1DX0VDQ19DT05UUk9MLCAweDEwMCk7CisJCWJyZWFrOworCWNhc2UgR1BNQ19FQ0NfV1JJVEU6CisJCWdwbWNfd3JpdGVfcmVnKEdQTUNfRUNDX0NPTlRST0wsIDB4MTAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRXJyb3I6IFVucmVjb2duaXplZCBNb2RlWyVkXSFcbiIsIG1vZGUpOworCQlicmVhazsKKwl9CisKKwkvKiAoRUNDIDE2IG9yIDggYml0IGNvbCkgfCAoIENTICApICB8IEVDQyBFbmFibGUgKi8KKwl2YWwgPSAoZGV2X3dpZHRoIDw8IDcpIHwgKGNzIDw8IDEpIHwgKDB4MSk7CisJZ3BtY193cml0ZV9yZWcoR1BNQ19FQ0NfQ09ORklHLCB2YWwpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGdwbWNfY2FsY3VsYXRlX2VjYyAtIGdlbmVyYXRlIG5vbi1pbnZlcnRlZCBlY2MgYnl0ZXMKKyAqIEBjczogY2hpcCBzZWxlY3QgbnVtYmVyCisgKiBAZGF0OiBkYXRhIHBvaW50ZXIgb3ZlciB3aGljaCBlY2MgaXMgY29tcHV0ZWQKKyAqIEBlY2NfY29kZTogZWNjIGNvZGUgYnVmZmVyCisgKgorICogVXNpbmcgbm9uLWludmVydGVkIEVDQyBpcyBjb25zaWRlcmVkIHVnbHkgc2luY2Ugd3JpdGluZyBhIGJsYW5rCisgKiBwYWdlIChwYWRkaW5nKSB3aWxsIGNsZWFyIHRoZSBFQ0MgYnl0ZXMuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBhcyBsb25nCisgKiBubyBvbmUgaXMgdHJ5aW5nIHRvIHdyaXRlIGRhdGEgb24gdGhlIHNlZW1pbmdseSB1bnVzZWQgcGFnZS4gUmVhZGluZworICogYW4gZXJhc2VkIHBhZ2Ugd2lsbCBwcm9kdWNlIGFuIEVDQyBtaXNtYXRjaCBiZXR3ZWVuIGdlbmVyYXRlZCBhbmQgcmVhZAorICogRUNDIGJ5dGVzIHRoYXQgaGFzIHRvIGJlIGRlYWx0IHdpdGggc2VwYXJhdGVseS4KKyAqLworaW50IGdwbWNfY2FsY3VsYXRlX2VjYyhpbnQgY3MsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAweDA7CisKKwlpZiAoZ3BtY19lY2NfdXNlZCAhPSBjcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZWFkIGVjYyByZXN1bHQgKi8KKwl2YWwgPSBncG1jX3JlYWRfcmVnKEdQTUNfRUNDMV9SRVNVTFQpOworCSplY2NfY29kZSsrID0gdmFsOyAgICAgICAgICAvKiBQMTI4ZSwgLi4uLCBQMWUgKi8KKwkqZWNjX2NvZGUrKyA9IHZhbCA+PiAxNjsgICAgLyogUDEyOG8sIC4uLiwgUDFvICovCisJLyogUDIwNDhvLCBQMTAyNG8sIFA1MTJvLCBQMjU2bywgUDIwNDhlLCBQMTAyNGUsIFA1MTJlLCBQMjU2ZSAqLworCSplY2NfY29kZSsrID0gKCh2YWwgPj4gOCkgJiAweDBmKSB8ICgodmFsID4+IDIwKSAmIDB4ZjApOworCisJZ3BtY19lY2NfdXNlZCA9IC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKaW5kZXggMWVmNTRiMC4uYzhmNjQ3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwpAQCAtMjY4LDYgKzI2OCw3IEBACiAJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IGMtPmdwaW9fd3A7CiAKIAkJbW1jLT5zbG90c1swXS5yZW11eCA9IGMtPnJlbXV4OworCQltbWMtPnNsb3RzWzBdLmluaXRfY2FyZCA9IGMtPmluaXRfY2FyZDsKIAogCQlpZiAoYy0+Y292ZXJfb25seSkKIAkJCW1tYy0+c2xvdHNbMF0uY292ZXIgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCmluZGV4IDM2ZjBiYTguLjFmZTZmMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKQEAgLTYsNiArNiw4IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCitzdHJ1Y3QgbW1jX2NhcmQ7CisKIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIHsKIAl1OAltbWM7CQkvKiBjb250cm9sbGVyIDEvMi8zICovCiAJdTgJd2lyZXM7CQkvKiAxLzQvOCB3aXJlcyAqLwpAQCAtMjMsNiArMjUsOCBAQAogCWludAlvY3JfbWFzazsJLyogdGVtcG9yYXJ5IEhBQ0sgKi8KIAkvKiBSZW11eCAocGFkIGNvbmZpZ3VhdGlvbikgd2hlbiBwb3dlcmluZyBvbi9vZmYgKi8KIAl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbik7CisJLyogaW5pdCBzb21lIHNwZWNpYWwgY2FyZCAqLworCXZvaWQgKCppbml0X2NhcmQpKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jCmluZGV4IDc5NTFhZTEuLjc5YzQ3OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pMmMuYwpAQCAtMjEsMzIgKzIxLDE5IEBACiAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvaTJjLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KIAogI2luY2x1ZGUgIm11eC5oIgogCiB2b2lkIF9faW5pdCBvbWFwMl9pMmNfbXV4X3BpbnMoaW50IGJ1c19pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJY29uc3QgaW50IG9tYXAyNHh4X3BpbnNbXVsyXSA9IHsKLQkJCXsgTTE5XzI0WFhfSTJDMV9TQ0wsIEwxNV8yNFhYX0kyQzFfU0RBIH0sCi0JCQl7IEoxNV8yNFhYX0kyQzJfU0NMLCBIMTlfMjRYWF9JMkMyX1NEQSB9LAotCQl9OwotCQlpbnQgc2NsLCBzZGE7Ci0KLQkJc2NsID0gb21hcDI0eHhfcGluc1tidXNfaWQgLSAxXVswXTsKLQkJc2RhID0gb21hcDI0eHhfcGluc1tidXNfaWQgLSAxXVsxXTsKLQkJb21hcF9jZmdfcmVnKHNkYSk7Ci0JCW9tYXBfY2ZnX3JlZyhzY2wpOwotCX0KKwljaGFyIG11eF9uYW1lW3NpemVvZigiaTJjMl9zY2wuaTJjMl9zY2wiKV07CiAKIAkvKiBGaXJzdCBJMkMgYnVzIGlzIG5vdCBtdXhhYmxlICovCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpICYmIGJ1c19pZCA+IDEpIHsKLQkJY2hhciBtdXhfbmFtZVtzaXplb2YoImkyYzJfc2NsLmkyYzJfc2NsIildOworCWlmIChidXNfaWQgPT0gMSkKKwkJcmV0dXJuOwogCi0JCXNwcmludGYobXV4X25hbWUsICJpMmMlaV9zY2wuaTJjJWlfc2NsIiwgYnVzX2lkLCBidXNfaWQpOwotCQlvbWFwX211eF9pbml0X3NpZ25hbChtdXhfbmFtZSwgT01BUF9QSU5fSU5QVVQpOwotCQlzcHJpbnRmKG11eF9uYW1lLCAiaTJjJWlfc2RhLmkyYyVpX3NkYSIsIGJ1c19pZCwgYnVzX2lkKTsKLQkJb21hcF9tdXhfaW5pdF9zaWduYWwobXV4X25hbWUsIE9NQVBfUElOX0lOUFVUKTsKLQl9CisJc3ByaW50ZihtdXhfbmFtZSwgImkyYyVpX3NjbC5pMmMlaV9zY2wiLCBidXNfaWQsIGJ1c19pZCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwobXV4X25hbWUsIE9NQVBfUElOX0lOUFVUKTsKKwlzcHJpbnRmKG11eF9uYW1lLCAiaTJjJWlfc2RhLmkyYyVpX3NkYSIsIGJ1c19pZCwgYnVzX2lkKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbChtdXhfbmFtZSwgT01BUF9QSU5fSU5QVVQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCmluZGV4IDM3YjhhMWEuLmU4MjU2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCisjaW5jbHVkZSA8bWFjaC9pZC5oPgorCiBzdGF0aWMgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7CiBzdGF0aWMgdW5zaWduZWQgaW50IG9tYXBfcmV2aXNpb247CiAKQEAgLTEwMiwzMCArMTA0LDM2IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICp0YXBfYmFzZTsKIHN0YXRpYyB1MTYgdGFwX3Byb2RfaWQ7CiAKLXZvaWQgX19pbml0IG9tYXAyNHh4X2NoZWNrX3JldmlzaW9uKHZvaWQpCit2b2lkIG9tYXBfZ2V0X2RpZV9pZChzdHJ1Y3Qgb21hcF9kaWVfaWQgKm9kaSkKK3sKKwlvZGktPmlkXzAgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzApOworCW9kaS0+aWRfMSA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMSk7CisJb2RpLT5pZF8yID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8yKTsKKwlvZGktPmlkXzMgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzMpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDI0eHhfY2hlY2tfcmV2aXNpb24odm9pZCkKIHsKIAlpbnQgaSwgajsKIAl1MzIgaWRjb2RlLCBwcm9kX2lkOwogCXUxNiBoYXdrZXllOwogCXU4ICBkZXZfdHlwZSwgcmV2OworCXN0cnVjdCBvbWFwX2RpZV9pZCBvZGk7CiAKIAlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKIAlwcm9kX2lkID0gcmVhZF90YXBfcmVnKHRhcF9wcm9kX2lkKTsKIAloYXdrZXllID0gKGlkY29kZSA+PiAxMikgJiAweGZmZmY7CiAJcmV2ID0gKGlkY29kZSA+PiAyOCkgJiAweDBmOwogCWRldl90eXBlID0gKHByb2RfaWQgPj4gMTYpICYgMHgwZjsKKwlvbWFwX2dldF9kaWVfaWQoJm9kaSk7CiAKIAlwcl9kZWJ1ZygiT01BUF9UQVBfSURDT0RFIDB4JTA4eCBSRVYgJWkgSEFXS0VZRSAweCUwNHggTUFORiAlMDN4XG4iLAogCQkgaWRjb2RlLCByZXYsIGhhd2tleWUsIChpZGNvZGUgPj4gMSkgJiAweDdmZik7Ci0JcHJfZGVidWcoIk9NQVBfVEFQX0RJRV9JRF8wOiAweCUwOHhcbiIsCi0JCSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzApKTsKKwlwcl9kZWJ1ZygiT01BUF9UQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwgb2RpLmlkXzApOwogCXByX2RlYnVnKCJPTUFQX1RBUF9ESUVfSURfMTogMHglMDh4IERFVl9SRVY6ICVpXG4iLAotCQkgcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8xKSwKLQkJIChyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzEpID4+IDI4KSAmIDB4Zik7Ci0JcHJfZGVidWcoIk9NQVBfVEFQX0RJRV9JRF8yOiAweCUwOHhcbiIsCi0JCSByZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzIpKTsKLQlwcl9kZWJ1ZygiT01BUF9UQVBfRElFX0lEXzM6IDB4JTA4eFxuIiwKLQkJIHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMykpOworCQkgb2RpLmlkXzEsIChvZGkuaWRfMSA+PiAyOCkgJiAweGYpOworCXByX2RlYnVnKCJPTUFQX1RBUF9ESUVfSURfMjogMHglMDh4XG4iLCBvZGkuaWRfMik7CisJcHJfZGVidWcoIk9NQVBfVEFQX0RJRV9JRF8zOiAweCUwOHhcbiIsIG9kaS5pZF8zKTsKIAlwcl9kZWJ1ZygiT01BUF9UQVBfUFJPRF9JRF8wOiAweCUwOHggREVWX1RZUEU6ICVpXG4iLAogCQkgcHJvZF9pZCwgZGV2X3R5cGUpOwogCkBAIC0xNjQsNyArMTcyLDcgQEAKIAkJb21hcDNfZmVhdHVyZXMgfD0gT01BUDNfSEFTXyAjI2ZlYXQ7CQkJXAogCX0KIAotdm9pZCBfX2luaXQgb21hcDNfY2hlY2tfZmVhdHVyZXModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19jaGVja19mZWF0dXJlcyh2b2lkKQogewogCXUzMiBzdGF0dXM7CiAKQEAgLTE3OSw2ICsxODcsOCBAQAogCU9NQVAzX0NIRUNLX0ZFQVRVUkUoc3RhdHVzLCBJU1ApOwogCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKIAkJb21hcDNfZmVhdHVyZXMgfD0gT01BUDNfSEFTXzE5Mk1IWl9DTEs7CisJaWYgKCFjcHVfaXNfb21hcDM1MDUoKSAmJiAhY3B1X2lzX29tYXAzNTE3KCkpCisJCW9tYXAzX2ZlYXR1cmVzIHw9IE9NQVAzX0hBU19JT19XQUtFVVA7CiAKIAkvKgogCSAqIFRPRE86IEdldCBhZGRpdGlvbmFsIGluZm8gKHdoZXJlIGFwcGxpY2FibGUpCkBAIC0xODYsNyArMTk2LDcgQEAKIAkgKi8KIH0KIAotdm9pZCBfX2luaXQgb21hcDNfY2hlY2tfcmV2aXNpb24odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19jaGVja19yZXZpc2lvbih2b2lkKQogewogCXUzMiBjcHVpZCwgaWRjb2RlOwogCXUxNiBoYXdrZXllOwpAQCAtMjU5LDE1ICsyNjksMzEgQEAKIAkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzNfMTsKIAkJYnJlYWs7CiAJY2FzZSAweGI4OTE6Ci0JLyogRkFMTFRIUk9VR0ggKi8KKwkJLyogSGFuZGxlIDM2eHggZGV2aWNlcyAqLworCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzYzMEVTMTsKKworCQlzd2l0Y2gocmV2KSB7CisJCWNhc2UgMDogLyogVGFrZSBjYXJlIG9mIGVhcmx5IHNhbXBsZXMgKi8KKwkJCW9tYXBfcmV2aXNpb24gPSBPTUFQMzYzMF9SRVZfRVMxXzA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJb21hcF9yZXZpc2lvbiA9IE9NQVAzNjMwX1JFVl9FUzFfMTsKKwkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNjMwRVMxXzE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQlkZWZhdWx0OgorCQkJb21hcF9yZXZpc2lvbiA9ICBPTUFQMzYzMF9SRVZfRVMxXzI7CisJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzYzMEVTMV8yOworCQkJYnJlYWs7CisJCX0KIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIGRlZmF1bHQgdG8gbGF0ZXN0IHNpbGljb24gcmV2IGFzIGRlZmF1bHQqLwotCQlvbWFwX3JldmlzaW9uID0gT01BUDM2MzBfUkVWX0VTMV8wOwotCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzYzMEVTMTsKKwkJb21hcF9yZXZpc2lvbiA9ICBPTUFQMzYzMF9SRVZfRVMxXzI7CisJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNjMwRVMxXzI7CiAJfQogfQogCi12b2lkIF9faW5pdCBvbWFwNF9jaGVja19yZXZpc2lvbih2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG9tYXA0X2NoZWNrX3JldmlzaW9uKHZvaWQpCiB7CiAJdTMyIGlkY29kZTsKIAl1MTYgaGF3a2V5ZTsKQEAgLTI5Nyw3ICszMjMsNyBAQAogCWlmIChvbWFwM19oYXNfICMjZmVhdCgpKQkJXAogCQlwcmludGsoI2ZlYXQiICIpOwogCi12b2lkIF9faW5pdCBvbWFwM19jcHVpbmZvKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfY3B1aW5mbyh2b2lkKQogewogCXU4IHJldiA9IEdFVF9PTUFQX1JFVklTSU9OKCk7CiAJY2hhciBjcHVfbmFtZVsxNl0sIGNwdV9yZXZbMTZdOwpAQCAtMzM5LDYgKzM2NSwxMiBAQAogCWNhc2UgT01BUF9SRVZCSVRTXzAwOgogCQlzdHJjcHkoY3B1X3JldiwgIjEuMCIpOwogCQlicmVhazsKKwljYXNlIE9NQVBfUkVWQklUU18wMToKKwkJc3RyY3B5KGNwdV9yZXYsICIxLjEiKTsKKwkJYnJlYWs7CisJY2FzZSBPTUFQX1JFVkJJVFNfMDI6CisJCXN0cmNweShjcHVfcmV2LCAiMS4yIik7CisJCWJyZWFrOwogCWNhc2UgT01BUF9SRVZCSVRTXzEwOgogCQlzdHJjcHkoY3B1X3JldiwgIjIuMCIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2JvYXJkLWZsYXNoLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9ib2FyZC1mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjQyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9ib2FyZC1mbGFzaC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiAgYm9hcmQtc2RwLmgKKyAqCisgKiAgSW5mb3JtYXRpb24gc3RydWN0dXJlcyBmb3IgU0RQLXNwZWNpZmljIGJvYXJkIGNvbmZpZyBkYXRhCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KKworI2RlZmluZSBQRENfTk9SCQkxCisjZGVmaW5lIFBEQ19OQU5ECTIKKyNkZWZpbmUgUERDX09ORU5BTkQJMworI2RlZmluZSBEQkdfTVBEQgk0CisKK3N0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJaW50IG5yX3BhcnRzOworfTsKKworZXh0ZXJuIHZvaWQgYm9hcmRfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBbXSwKKwkJCQljaGFyIGNoaXBfc2VsW11bR1BNQ19DU19OVU1dKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2JvYXJkLXNkcC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtc2RwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NTE2OWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtc2RwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogIGJvYXJkLXNkcC5oCi0gKgotICogIEluZm9ybWF0aW9uIHN0cnVjdHVyZXMgZm9yIFNEUC1zcGVjaWZpYyBib2FyZCBjb25maWcgZGF0YQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLXN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7Ci0JaW50IG5yX3BhcnRzOwotfTsKLQotZXh0ZXJuIHZvaWQgc2RwX2ZsYXNoX2luaXQoc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgW10pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtem9vbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtem9vbS5oCmluZGV4IGM5M2IyOWUuLjNhZjY5ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2JvYXJkLXpvb20uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9ib2FyZC16b29tLmgKQEAgLTEsNSArMSwxMSBAQAogLyoKICAqIERlZmluZXMgZm9yIHpvb20gYm9hcmRzCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2RlZmluZSBaT09NX05BTkRfQ1MgICAgMAorCitleHRlcm4gdm9pZCBfX2luaXQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBtdGRfcGFydGl0aW9uICosIHU4IG5yX3BhcnRzLCB1OCBjcyk7CiBleHRlcm4gaW50IF9faW5pdCB6b29tX2RlYnVnYm9hcmRfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCB6b29tX3BlcmlwaGVyYWxzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCAzNWIyNDQwLi4wOTMzMWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTM2LDcgKzM2LDcgQEAKIAkJLyogVXNlIG9tYXBfdWFydF9waHlzL3ZpcnQgaWYgYWxyZWFkeSBjb25maWd1cmVkICovCiAxMDoJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJ4LCA9b21hcF91YXJ0X3BoeXMJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbGRyZXEJXHJ4LCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X3BoeXMpCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCiAJCWxkcm5lCVxyeCwgPW9tYXBfdWFydF92aXJ0CUAgdmlydHVhbCBiYXNlIGFkZHJlc3MKIAkJbGRyCVxyeCwgW1xyeCwgIzBdCiAJCWNtcAlccngsICMwCQkJQCBpcyBwb3J0IGNvbmZpZ3VyZWQ/CkBAIC04OSwyNiArODksMzYgQEAKIDQ0OgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVA0X1VBUlQ0X0JBU0UpCiAJCWIJOThmCiA5NToJCWxkcglccngsID1aT09NX1VBUlRfQkFTRQotCQlsZHIJXHRtcCwgPW9tYXBfdWFydF9waHlzCisJCW1yYwlwMTUsIDAsIFx0bXAsIGMxLCBjMAorCQl0c3QJXHRtcCwgIzEJCUAgTU1VIGVuYWJsZWQ/CisJCWxkcmVxCVx0bXAsID1fX3ZpcnRfdG9fcGh5cyhvbWFwX3VhcnRfcGh5cykKKwkJbGRybmUJXHRtcCwgPW9tYXBfdWFydF9waHlzCiAJCXN0cglccngsIFtcdG1wLCAjMF0KIAkJbGRyCVxyeCwgPVpPT01fVUFSVF9WSVJUCi0JCWxkcglcdG1wLCA9b21hcF91YXJ0X3ZpcnQKKwkJbGRyZXEJXHRtcCwgPV9fdmlydF90b19waHlzKG9tYXBfdWFydF92aXJ0KQorCQlsZHJuZQlcdG1wLCA9b21hcF91YXJ0X3ZpcnQKIAkJc3RyCVxyeCwgW1x0bXAsICMwXQogCQltb3YJXHJ4LCAjKFVBUlRfTFNSIDw8IFpPT01fUE9SVF9TSElGVCkKLQkJbGRyCVx0bXAsID1vbWFwX3VhcnRfbHNyCisJCWxkcmVxCVx0bXAsID1fX3ZpcnRfdG9fcGh5cyhvbWFwX3VhcnRfbHNyKQorCQlsZHJuZQlcdG1wLCA9b21hcF91YXJ0X2xzcgogCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCiAJCWIJMTBiCiAKIAkJLyogU3RvcmUgYm90aCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3MgZm9yIHRoZSB1YXJ0ICovCiA5ODoJCWFkZAlccngsIFxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzIGJhc2UKLQkJbGRyCVx0bXAsID1vbWFwX3VhcnRfcGh5cworCQltcmMJcDE1LCAwLCBcdG1wLCBjMSwgYzAKKwkJdHN0CVx0bXAsICMxCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlcdG1wLCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X3BoeXMpCisJCWxkcm5lCVx0bXAsID1vbWFwX3VhcnRfcGh5cwogCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCiAJCXN1YglccngsIFxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzIGJhc2UKIAkJYWRkCVxyeCwgXHJ4LCAjMHhmYTAwMDAwMAlAIHZpcnQgYmFzZQotCQlsZHIJXHRtcCwgPW9tYXBfdWFydF92aXJ0CisJCWxkcmVxCVx0bXAsID1fX3ZpcnRfdG9fcGh5cyhvbWFwX3VhcnRfdmlydCkKKwkJbGRybmUJXHRtcCwgPW9tYXBfdWFydF92aXJ0CiAJCXN0cglccngsIFtcdG1wLCAjMF0KIAkJbW92CVxyeCwgIyhVQVJUX0xTUiA8PCBPTUFQX1BPUlRfU0hJRlQpCi0JCWxkcglcdG1wLCA9b21hcF91YXJ0X2xzcgorCQlsZHJlcQlcdG1wLCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X2xzcikKKwkJbGRybmUJXHRtcCwgPW9tYXBfdWFydF9sc3IKIAkJc3RyCVxyeCwgW1x0bXAsICMwXQogCiAJCWIJMTBiCkBAIC0xMjAsNyArMTMwLDEwIEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgPW9tYXBfdWFydF9sc3IKKzEwMDE6CQltcmMJcDE1LCAwLCBccmQsIGMxLCBjMAorCQl0c3QJXHJkLCAjMQkJQCBNTVUgZW5hYmxlZD8KKwkJbGRyZXEJXHJkLCA9X192aXJ0X3RvX3BoeXMob21hcF91YXJ0X2xzcikKKwkJbGRybmUJXHJkLCA9b21hcF91YXJ0X2xzcgogCQlsZHIJXHJkLCBbXHJkLCAjMF0KIAkJbGRyYglccmQsIFtccngsIFxyZF0KIAkJYW5kCVxyZCwgXHJkLCAjKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvaWQuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2lkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlZDNhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2lkLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIE9NQVAyIENQVSBpZGVudGlmaWNhdGlvbiBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEthbi1SdSBDaGVuIDxrYW5ydUAweGxhYi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBPTUFQMl9BUkNIX0lEX0gKKyNkZWZpbmUgT01BUDJfQVJDSF9JRF9ICisKK3N0cnVjdCBvbWFwX2RpZV9pZCB7CisJdTMyIGlkXzA7CisJdTMyIGlkXzE7CisJdTMyIGlkXzI7CisJdTMyIGlkXzM7Cit9OworCit2b2lkIG9tYXBfZ2V0X2RpZV9pZChzdHJ1Y3Qgb21hcF9kaWVfaWQgKm9kaSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvb21hcDQtY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9vbWFwNC1jb21tb24uaAppbmRleCA0MjNhZjNhLi4yNzQ0ZGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9vbWFwNC1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9vbWFwNC1jb21tb24uaApAQCAtMTMsNiArMTMsMTMgQEAKICNpZm5kZWYgT01BUF9BUkNIX09NQVA0X0NPTU1PTl9ICiAjZGVmaW5lIE9NQVBfQVJDSF9PTUFQNF9DT01NT05fSAogCisvKgorICogd2ZpIHVzZWQgaW4gbG93IHBvd2VyIGNvZGUuIERpcmVjdGx5IG9wY29kZSBpcyB1c2VkIGluc3RlYWQKKyAqIG9mIGluc3RydWN0aW9uIHRvIGF2b2lkIG11bGl0LW9tYXAgYnVpbGQgYnJlYWsKKyAqLworI2RlZmluZSBkb193ZmkoKQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCIud29yZAkweGUzMjBmMDAzIiA6IDogOiAibWVtb3J5IikKKwogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiBleHRlcm4gdm9pZCBfX2lvbWVtICpsMmNhY2hlX2Jhc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA0ZTFmNTNkLi5iOWVhNzBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9zcmFtLmg+CiAjaW5jbHVkZSA8cGxhdC9zZHJjLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CkBAIC00NCw2ICs0Myw3IEBACiAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CiAjaW5jbHVkZSAiY2xvY2tkb21haW5zLmgiCisKICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KIAogLyoKQEAgLTMxMyw2ICszMTMsOCBAQAogdm9pZCBfX2luaXQgb21hcDJfaW5pdF9jb21tb25faHcoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MwLAogCQkJCSBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczEpCiB7CisJdTggc2tpcF9zZXR1cF9pZGxlID0gMDsKKwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX2F1dG9kZXBzKTsKIAlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCkBAIC0zMjEsNyArMzIzLDYgQEAKIAkJb21hcDI0MzBfaHdtb2RfaW5pdCgpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwM3h4eF9od21vZF9pbml0KCk7Ci0Jb21hcDJfbXV4X2luaXQoKTsKIAkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KIAlvbWFwX3BtX2lmX2Vhcmx5X2luaXQobXB1X29wcHMsIGRzcF9vcHBzLCBsM19vcHBzKTsKIApAQCAtMzM3LDkgKzMzOCwxMyBAQAogCQlwcl9lcnIoIkNvdWxkIG5vdCBpbml0IGNsb2NrIGZyYW1ld29yayAtIHVua25vd24gQ1BVXG4iKTsKIAogCW9tYXBfc2VyaWFsX2Vhcmx5X2luaXQoKTsKKworI2lmbmRlZiBDT05GSUdfUE1fUlVOVElNRQorCXNraXBfc2V0dXBfaWRsZSA9IDE7CisjZW5kaWYKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpICAgLyogRklYTUU6IE9NQVA0ICovCi0JCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7Ci0Jb21hcF9wbV9pZl9pbml0KCk7CisJCW9tYXBfaHdtb2RfbGF0ZV9pbml0KHNraXBfc2V0dXBfaWRsZSk7CisKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJb21hcDJfc2RyY19pbml0KHNkcmNfY3MwLCBzZHJjX2NzMSk7CiAJCV9vbWFwMl9pbml0X3JlcHJvZ3JhbV9zZHJjKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwppbmRleCBlODJkYTY4Li4xNGVlNjg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKQEAgLTQ0LDkgKzQ0LDEzIEBACiAjZGVmaW5lIE1NVV9JUlFfRU1VTUlTUwkJKDEgPDwgMikKICNkZWZpbmUgTU1VX0lSUV9UUkFOU0xBVElPTkZBVUxUCSgxIDw8IDEpCiAjZGVmaW5lIE1NVV9JUlFfVExCTUlTUwkJKDEgPDwgMCkKLSNkZWZpbmUgTU1VX0lSUV9NQVNLCVwKLQkoTU1VX0lSUV9NVUxUSUhJVEZBVUxUIHwgTU1VX0lSUV9UQUJMRVdBTEtGQVVMVCB8IE1NVV9JUlFfRU1VTUlTUyB8IFwKLQkgTU1VX0lSUV9UUkFOU0xBVElPTkZBVUxUKQorCisjZGVmaW5lIF9fTU1VX0lSUV9GQVVMVAkJXAorCShNTVVfSVJRX01VTFRJSElURkFVTFQgfCBNTVVfSVJRX0VNVU1JU1MgfCBNTVVfSVJRX1RSQU5TTEFUSU9ORkFVTFQpCisjZGVmaW5lIE1NVV9JUlFfTUFTSwkJXAorCShfX01NVV9JUlFfRkFVTFQgfCBNTVVfSVJRX1RBQkxFV0FMS0ZBVUxUIHwgTU1VX0lSUV9UTEJNSVNTKQorI2RlZmluZSBNTVVfSVJRX1RXTF9NQVNLCShfX01NVV9JUlFfRkFVTFQgfCBNTVVfSVJRX1RBQkxFV0FMS0ZBVUxUKQorI2RlZmluZSBNTVVfSVJRX1RMQl9NSVNTX01BU0sJKF9fTU1VX0lSUV9GQVVMVCB8IE1NVV9JUlFfVExCTUlTUykKIAogLyogTU1VX0NOVEwgKi8KICNkZWZpbmUgTU1VX0NOVExfU0hJRlQJCTEKQEAgLTYxLDYgKzY1LDI2IEBACiAJICgocGdzeikgPT0gTU1VX0NBTV9QR1NaXzY0SykgPyAweGZmZmYwMDAwIDoJXAogCSAoKHBnc3opID09IE1NVV9DQU1fUEdTWl80SykgID8gMHhmZmZmZjAwMCA6IDApCiAKKworc3RhdGljIHZvaWQgX19pb21tdV9zZXRfdHdsKHN0cnVjdCBpb21tdSAqb2JqLCBib29sIG9uKQoreworCXUzMiBsID0gaW9tbXVfcmVhZF9yZWcob2JqLCBNTVVfQ05UTCk7CisKKwlpZiAob24pCisJCWlvbW11X3dyaXRlX3JlZyhvYmosIE1NVV9JUlFfVFdMX01BU0ssIE1NVV9JUlFFTkFCTEUpOworCWVsc2UKKwkJaW9tbXVfd3JpdGVfcmVnKG9iaiwgTU1VX0lSUV9UTEJfTUlTU19NQVNLLCBNTVVfSVJRRU5BQkxFKTsKKworCWwgJj0gfk1NVV9DTlRMX01BU0s7CisJaWYgKG9uKQorCQlsIHw9IChNTVVfQ05UTF9NTVVfRU4gfCBNTVVfQ05UTF9UV0xfRU4pOworCWVsc2UKKwkJbCB8PSAoTU1VX0NOVExfTU1VX0VOKTsKKworCWlvbW11X3dyaXRlX3JlZyhvYmosIGwsIE1NVV9DTlRMKTsKK30KKworCiBzdGF0aWMgaW50IG9tYXAyX2lvbW11X2VuYWJsZShzdHJ1Y3QgaW9tbXUgKm9iaikKIHsKIAl1MzIgbCwgcGE7CkBAIC05NiwxMyArMTIwLDkgQEAKIAlsIHw9IChNTVVfU1lTX0lETEVfU01BUlQgfCBNTVVfU1lTX0FVVE9JRExFKTsKIAlpb21tdV93cml0ZV9yZWcob2JqLCBsLCBNTVVfU1lTQ09ORklHKTsKIAotCWlvbW11X3dyaXRlX3JlZyhvYmosIE1NVV9JUlFfTUFTSywgTU1VX0lSUUVOQUJMRSk7CiAJaW9tbXVfd3JpdGVfcmVnKG9iaiwgcGEsIE1NVV9UVEIpOwogCi0JbCA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX0NOVEwpOwotCWwgJj0gfk1NVV9DTlRMX01BU0s7Ci0JbCB8PSAoTU1VX0NOVExfTU1VX0VOIHwgTU1VX0NOVExfVFdMX0VOKTsKLQlpb21tdV93cml0ZV9yZWcob2JqLCBsLCBNTVVfQ05UTCk7CisJX19pb21tdV9zZXRfdHdsKG9iaiwgdHJ1ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExOCw2ICsxMzgsMTEgQEAKIAlkZXZfZGJnKG9iai0+ZGV2LCAiJXMgaXMgc2h1dHRpbmcgZG93blxuIiwgb2JqLT5uYW1lKTsKIH0KIAorc3RhdGljIHZvaWQgb21hcDJfaW9tbXVfc2V0X3R3bChzdHJ1Y3QgaW9tbXUgKm9iaiwgYm9vbCBvbikKK3sKKwlfX2lvbW11X3NldF90d2wob2JqLCBmYWxzZSk7Cit9CisKIHN0YXRpYyB1MzIgb21hcDJfaW9tbXVfZmF1bHRfaXNyKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgKnJhKQogewogCWludCBpOwpAQCAtMTQ3LDcgKzE3Miw3IEBACiAJcHJpbnRrKCJcbiIpOwogCiAJaW9tbXVfd3JpdGVfcmVnKG9iaiwgc3RhdCwgTU1VX0lSUVNUQVRVUyk7Ci0Jb21hcDJfaW9tbXVfZGlzYWJsZShvYmopOworCiAJcmV0dXJuIHN0YXQ7CiB9CiAKQEAgLTMwMCw2ICszMjUsNyBAQAogCiAJLmVuYWJsZQkJPSBvbWFwMl9pb21tdV9lbmFibGUsCiAJLmRpc2FibGUJPSBvbWFwMl9pb21tdV9kaXNhYmxlLAorCS5zZXRfdHdsCT0gb21hcDJfaW9tbXVfc2V0X3R3bCwKIAkuZmF1bHRfaXNyCT0gb21hcDJfaW9tbXVfZmF1bHRfaXNyLAogCiAJLnRsYl9yZWFkX2NyCT0gb21hcDJfdGxiX3JlYWRfY3IsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IDMxOGYzNjMuLjQyZGJmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTE4LDggKzE3LDYgQEAKICNpbmNsdWRlIDxwbGF0L21haWxib3guaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotI2RlZmluZSBEUlZfTkFNRSAib21hcDItbWFpbGJveCIKLQogI2RlZmluZSBNQUlMQk9YX1JFVklTSU9OCQkweDAwMAogI2RlZmluZSBNQUlMQk9YX1NZU0NPTkZJRwkJMHgwMTAKICNkZWZpbmUgTUFJTEJPWF9TWVNTVEFUVVMJCTB4MDE0CkBAIC0xMzEsNyArMTI4LDcgQEAKIAl9CiAKIAlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1JFVklTSU9OKTsKLQlwcl9pbmZvKCJvbWFwIG1haWxib3ggcmV2ICVkLiVkXG4iLCAobCAmIDB4ZjApID4+IDQsIChsICYgMHgwZikpOworCXByX2RlYnVnKCJvbWFwIG1haWxib3ggcmV2ICVkLiVkXG4iLCAobCAmIDB4ZjApID4+IDQsIChsICYgMHgwZikpOwogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQogCQlsID0gT01BUDRfU01BUlRJRExFOwpAQCAtMjgzLDYgKzI4MCw4IEBACiAgKi8KIAogLyogRklYTUU6IHRoZSBmb2xsb3dpbmcgc3RydWN0cyBzaG91bGQgYmUgZmlsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHVzZXIgaWQgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCiAvKiBEU1AgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2IG9tYXAyX21ib3hfZHNwX3ByaXYgPSB7CiAJLnR4X2ZpZm8gPSB7CkBAIC0zMDAsMTAgKzI5OSw0NiBAQAogCS5pcnFkaXNhYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEUoMCksCiB9OwogCitzdHJ1Y3Qgb21hcF9tYm94IG1ib3hfZHNwX2luZm8gPSB7CisJLm5hbWUJPSAiZHNwIiwKKwkub3BzCT0gJm9tYXAyX21ib3hfb3BzLAorCS5wcml2CT0gJm9tYXAyX21ib3hfZHNwX3ByaXYsCit9OworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQorc3RydWN0IG9tYXBfbWJveCAqb21hcDNfbWJveGVzW10gPSB7ICZtYm94X2RzcF9pbmZvLCBOVUxMIH07CisjZW5kaWYKIAotLyogT01BUDQgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIFVzZSB0aGUgY3B1X2lzX29tYXA0eHh4KCkKLXRvIHVzZSB0aGlzKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQorLyogSVZBICovCitzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2l2YV9wcml2ID0geworCS50eF9maWZvID0geworCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgyKSwKKwkJLmZpZm9fc3RhdAk9IE1BSUxCT1hfRklGT1NUQVRVUygyKSwKKwl9LAorCS5yeF9maWZvID0geworCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRSgzKSwKKwkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVMoMyksCisJfSwKKwkuaXJxZW5hYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEUoMyksCisJLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTKDMpLAorCS5ub3RmdWxsX2JpdAk9IE1BSUxCT1hfSVJRX05PVEZVTEwoMiksCisJLm5ld21zZ19iaXQJPSBNQUlMQk9YX0lSUV9ORVdNU0coMyksCisJLmlycWRpc2FibGUJPSBNQUlMQk9YX0lSUUVOQUJMRSgzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94IG1ib3hfaXZhX2luZm8gPSB7CisJLm5hbWUJPSAiaXZhIiwKKwkub3BzCT0gJm9tYXAyX21ib3hfb3BzLAorCS5wcml2CT0gJm9tYXAyX21ib3hfaXZhX3ByaXYsCit9OworCitzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwMl9tYm94ZXNbXSA9IHsgJm1ib3hfaXZhX2luZm8sICZtYm94X2RzcF9pbmZvLCBOVUxMIH07CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisvKiBPTUFQNCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgb21hcDJfbWJveF8xX3ByaXYgPSB7CiAJLnR4X2ZpZm8gPSB7CiAJCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFKDApLApAQCAtMzI1LDE0ICszNjAsNiBAQAogCS5vcHMJPSAmb21hcDJfbWJveF9vcHMsCiAJLnByaXYJPSAmb21hcDJfbWJveF8xX3ByaXYsCiB9OwotRVhQT1JUX1NZTUJPTChtYm94XzFfaW5mbyk7Ci0KLXN0cnVjdCBvbWFwX21ib3ggbWJveF9kc3BfaW5mbyA9IHsKLQkubmFtZQk9ICJkc3AiLAotCS5vcHMJPSAmb21hcDJfbWJveF9vcHMsCi0JLnByaXYJPSAmb21hcDJfbWJveF9kc3BfcHJpdiwKLX07Ci1FWFBPUlRfU1lNQk9MKG1ib3hfZHNwX2luZm8pOwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94XzJfcHJpdiA9IHsKIAkudHhfZmlmbyA9IHsKQEAgLTM1NSwxMTAgKzM4Miw2NCBAQAogCS5vcHMJPSAmb21hcDJfbWJveF9vcHMsCiAJLnByaXYJPSAmb21hcDJfbWJveF8yX3ByaXYsCiB9OwotRVhQT1JUX1NZTUJPTChtYm94XzJfaW5mbyk7CiAKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApIC8qIElWQSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX21ib3gyX3ByaXYgb21hcDJfbWJveF9pdmFfcHJpdiA9IHsKLQkudHhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMiksCi0JCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVMoMiksCi0JfSwKLQkucnhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMyksCi0JCS5tc2dfc3RhdAk9IE1BSUxCT1hfTVNHU1RBVFVTKDMpLAotCX0sCi0JLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFKDMpLAotCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVUygzKSwKLQkubm90ZnVsbF9iaXQJPSBNQUlMQk9YX0lSUV9OT1RGVUxMKDIpLAotCS5uZXdtc2dfYml0CT0gTUFJTEJPWF9JUlFfTkVXTVNHKDMpLAotCS5pcnFkaXNhYmxlCT0gTUFJTEJPWF9JUlFFTkFCTEUoMyksCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfbWJveCBtYm94X2l2YV9pbmZvID0gewotCS5uYW1lCT0gIml2YSIsCi0JLm9wcwk9ICZvbWFwMl9tYm94X29wcywKLQkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAotfTsKK3N0cnVjdCBvbWFwX21ib3ggKm9tYXA0X21ib3hlc1tdID0geyAmbWJveF8xX2luZm8sICZtYm94XzJfaW5mbywgTlVMTCB9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAyX21ib3hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKIAlpbnQgcmV0OworCXN0cnVjdCBvbWFwX21ib3ggKipsaXN0OwogCi0JLyogTUJPWCBiYXNlICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAodW5saWtlbHkoIXJlcykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBtZW0gcmVzb3VyY2VcbiIpOworCWlmIChmYWxzZSkKKwkJOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNDMwKCkpIHsKKwkJbGlzdCA9IG9tYXAzX21ib3hlczsKKworCQlsaXN0WzBdLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZHNwIik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkKKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQlsaXN0ID0gb21hcDJfbWJveGVzOworCisJCWxpc3RbMF0tPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJkc3AiKTsKKwkJbGlzdFsxXS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIml2YSIpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisJZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJbGlzdCA9IG9tYXA0X21ib3hlczsKKworCQlsaXN0WzBdLT5pcnEgPSBsaXN0WzFdLT5pcnEgPQorCQkJcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIm1ib3giKTsKKwl9CisjZW5kaWYKKwllbHNlIHsKKwkJcHJfZXJyKCIlczogcGxhdGZvcm0gbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JbWJveF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKCFtYm94X2Jhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogRFNQIG9yIElWQTIgSVJRICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKLQotCWlmICh1bmxpa2VseSghcmVzKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX2RzcDsKKwlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgbGlzdCk7CisJaWYgKHJldCkgeworCQlpb3VubWFwKG1ib3hfYmFzZSk7CisJCXJldHVybiByZXQ7CiAJfQotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQltYm94XzFfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwotCQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfMV9pbmZvKTsKLQl9IGVsc2UgewotCQltYm94X2RzcF9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7Ci0JCXJldCA9IG9tYXBfbWJveF9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbWJveF9kc3BfaW5mbyk7Ci0JfQotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2RzcDsKLQotCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQltYm94XzJfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwotCQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfMl9pbmZvKTsKLQkJaWYgKHJldCkgewotCQkJb21hcF9tYm94X3VucmVnaXN0ZXIoJm1ib3hfMV9pbmZvKTsKLQkJCWdvdG8gZXJyX2RzcDsKLQkJfQotCX0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKSAvKiBJVkEgKi8KLQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKLQkJLyogSVZBIElSUSAqLwotCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDEpOwotCQlpZiAodW5saWtlbHkoIXJlcykpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgaXJxIHJlc291cmNlXG4iKTsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7Ci0JCQlnb3RvIGVycl9kc3A7Ci0JCX0KLQkJbWJveF9pdmFfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwotCQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfaXZhX2luZm8pOwotCQlpZiAocmV0KSB7Ci0JCQlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7Ci0JCQlnb3RvIGVycl9kc3A7Ci0JCX0KLQl9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIAotZXJyX2RzcDoKLQlpb3VubWFwKG1ib3hfYmFzZSk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgb21hcDJfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQotCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2l2YV9pbmZvKTsKLSNlbmRpZgotCi0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94XzJfaW5mbyk7Ci0JCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94XzFfaW5mbyk7Ci0JfSBlbHNlCi0JCW9tYXBfbWJveF91bnJlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKKwlvbWFwX21ib3hfdW5yZWdpc3RlcigpOwogCWlvdW5tYXAobWJveF9iYXNlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2Nyw3ICs0NDgsNyBAQAogCS5wcm9iZSA9IG9tYXAyX21ib3hfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG9tYXAyX21ib3hfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9IERSVl9OQU1FLAorCQkubmFtZSA9ICJvbWFwLW1haWxib3giLAogCX0sCiB9OwogCkBAIC00ODYsNSArNDY3LDYgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJvbWFwIG1haWxib3g6IG9tYXAyLzMvNCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb25zIik7Ci1NT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+LCBQYXVsIE11bmR0Iik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOiJEUlZfTkFNRSk7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm9tYXAyLW1haWxib3giKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwppbmRleCBjMjkzMzcwLi40NjdhYWUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCkBAIC0yMCwxNyArMjAsMTggQEAKIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KIAorI2luY2x1ZGUgIm11eC5oIgorCiBzdGF0aWMgdm9pZCBvbWFwMl9tY2JzcDJfbXV4X3NldHVwKHZvaWQpCiB7Ci0Jb21hcF9jZmdfcmVnKFkxNV8yNFhYX01DQlNQMl9DTEtYKTsKLQlvbWFwX2NmZ19yZWcoUjE0XzI0WFhfTUNCU1AyX0ZTWCk7Ci0Jb21hcF9jZmdfcmVnKFcxNV8yNFhYX01DQlNQMl9EUik7Ci0Jb21hcF9jZmdfcmVnKFYxNV8yNFhYX01DQlNQMl9EWCk7Ci0Jb21hcF9jZmdfcmVnKFYxNF8yNFhYX0dQSU8xMTcpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJlYWNfYWNfc2Nsay5tY2JzcDJfY2xreCIsIE9NQVBfUFVMTF9FTkEpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJlYWNfYWNfZnMubWNic3AyX2ZzeCIsIE9NQVBfUFVMTF9FTkEpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJlYWNfYWNfZGluLm1jYnNwMl9kciIsIE9NQVBfUFVMTF9FTkEpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJlYWNfYWNfZG91dC5tY2JzcDJfZHgiLCBPTUFQX1BVTExfRU5BKTsKKwlvbWFwX211eF9pbml0X2dwaW8oMTE3LCBPTUFQX1BVTExfRU5BKTsKIAkvKgogCSAqIFRPRE86IE5lZWQgdG8gYWRkIE1VWCBzZXR0aW5ncyBmb3IgT01BUCAyNDMwIFNEUAogCSAqLwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5idWZmZXJfc2l6ZQk9IDB4NkYsCisJCS5idWZmZXJfc2l6ZQk9IDB4ODAsIC8qIFRoZSBGSUZPIGhhcyAxMjggbG9jYXRpb25zICovCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDJfQkFTRSwKQEAgLTE0Myw3ICsxNDQsNyBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuYnVmZmVyX3NpemUJPSAweDNGRiwKKwkJLmJ1ZmZlcl9zaXplCT0gMHg1MDAsIC8qIFRoZSBGSUZPIGhhcyAxMDI0ICsgMjU2IGxvY2F0aW9ucyAqLwogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AzX0JBU0UsCkBAIC0xNTMsNyArMTU0LDcgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmJ1ZmZlcl9zaXplCT0gMHg2RiwKKwkJLmJ1ZmZlcl9zaXplCT0gMHg4MCwgLyogVGhlIEZJRk8gaGFzIDEyOCBsb2NhdGlvbnMgKi8KIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNF9CQVNFLApAQCAtMTYyLDcgKzE2Myw3IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5idWZmZXJfc2l6ZQk9IDB4NkYsCisJCS5idWZmZXJfc2l6ZQk9IDB4ODAsIC8qIFRoZSBGSUZPIGhhcyAxMjggbG9jYXRpb25zICovCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDVfQkFTRSwKQEAgLTE3MSw3ICsxNzIsNyBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuYnVmZmVyX3NpemUJPSAweDZGLAorCQkuYnVmZmVyX3NpemUJPSAweDgwLCAvKiBUaGUgRklGTyBoYXMgMTI4IGxvY2F0aW9ucyAqLwogCX0sCiB9OwogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMzR4eF9tY2JzcF9wZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDhiM2QyNjkuLmFiNDAzYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMzcsMTIgKzM3LDEyIEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KIAogI2luY2x1ZGUgIm11eC5oIgogCiAjZGVmaW5lIE9NQVBfTVVYX0JBU0VfT0ZGU0VUCQkweDMwCS8qIE9mZnNldCBmcm9tIENUUkxfQkFTRSAqLwogI2RlZmluZSBPTUFQX01VWF9CQVNFX1NaCQkweDVjYQorI2RlZmluZSBNVVhBQkxFX0dQSU9fTU9ERTMJCUJJVCgwKQogCiBzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgewogCXN0cnVjdCBvbWFwX211eAkJbXV4OwpAQCAtNTEsNiArNTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdXhfcGh5czsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm11eF9iYXNlOworc3RhdGljIHU4IG9tYXBfbXV4X2ZsYWdzOwogCiB1MTYgb21hcF9tdXhfcmVhZCh1MTYgcmVnKQogewpAQCAtNzYsMzAxICs3Nyw2IEBACiAJfQogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIGFyY2hfbXV4X2NmZzsKLQotLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KLQotc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnIF9faW5pdGRhdGFfb3JfbW9kdWxlIG9tYXAyNHh4X3BpbnNbXSA9IHsKLS8qCi0gKglkZXNjcmlwdGlvbgkJCW11eAltdXgJcHVsbAlwdWxsCWRlYnVnCi0gKgkJCQkJb2Zmc2V0CW1vZGUJZW5hCXR5cGUKLSAqLwotCi0vKiAyNHh4IEkyQyAqLwotTVVYX0NGR18yNFhYKCJNMTlfMjRYWF9JMkMxX1NDTCIsCTB4MTExLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJMMTVfMjRYWF9JMkMxX1NEQSIsCTB4MTEyLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJKMTVfMjRYWF9JMkMyX1NDTCIsCTB4MTEzLAkwLAkwLAkxLAkxKQotTVVYX0NGR18yNFhYKCJIMTlfMjRYWF9JMkMyX1NEQSIsCTB4MTE0LAkwLAkwLAkwLAkxKQotCi0vKiBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KLU1VWF9DRkdfMjRYWCgiVzE5XzI0WFhfU1lTX05JUlEiLAkweDEyYywJMCwJMSwJMSwJMSkKLQotLyogMjR4eCBjbG9ja3MgKi8KLU1VWF9DRkdfMjRYWCgiVzE0XzI0WFhfU1lTX0NMS09VVCIsCTB4MTM3LAkwLAkxLAkxLAkxKQotCi0vKiAyNHh4IEdQTUMgY2hpcHNlbGVjdHMsIHdhaXQgcGluIG1vbml0b3JpbmcgKi8KLU1VWF9DRkdfMjRYWCgiRTJfR1BNQ19OQ1MyIiwJCTB4MDhlLAkwLAkxLAkxLAkxKQotTVVYX0NGR18yNFhYKCJMMl9HUE1DX05DUzciLAkJMHgwOTMsCTAsCTEsCTEsCTEpCi1NVVhfQ0ZHXzI0WFgoIkwzX0dQTUNfV0FJVDAiLAkJMHgwOWEsCTAsCTEsCTEsCTEpCi1NVVhfQ0ZHXzI0WFgoIk43X0dQTUNfV0FJVDEiLAkJMHgwOWIsCTAsCTEsCTEsCTEpCi1NVVhfQ0ZHXzI0WFgoIk0xX0dQTUNfV0FJVDIiLAkJMHgwOWMsCTAsCTEsCTEsCTEpCi1NVVhfQ0ZHXzI0WFgoIlAxX0dQTUNfV0FJVDMiLAkJMHgwOWQsCTAsCTEsCTEsCTEpCi0KLS8qIDI0eHggTWNCU1AgKi8KLU1VWF9DRkdfMjRYWCgiWTE1XzI0WFhfTUNCU1AyX0NMS1giLAkweDEyNCwJMSwJMSwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiUjE0XzI0WFhfTUNCU1AyX0ZTWCIsCTB4MTI1LAkxLAkxLAkwLAkxKQotTVVYX0NGR18yNFhYKCJXMTVfMjRYWF9NQ0JTUDJfRFIiLAkweDEyNiwJMSwJMSwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVjE1XzI0WFhfTUNCU1AyX0RYIiwJMHgxMjcsCTEsCTEsCTAsCTEpCi0KLS8qIDI0eHggR1BJTyAqLwotTVVYX0NGR18yNFhYKCJNMjFfMjQyWF9HUElPMTEiLAkJMHgwYzksCTMsCTEsCTEsCTEpCi1NVVhfQ0ZHXzI0WFgoIlAyMV8yNDJYX0dQSU8xMiIsCQkweDBjYSwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUExMF8yNDJYX0dQSU8xMyIsCTB4MGU1LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQTZfMjQyWF9HUElPMTQiLAkJMHgwZTYsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFBNF8yNDJYX0dQSU8xNSIsCQkweDBlNywJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTExXzI0MlhfR1BJTzE2IiwJCTB4MGU4LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQTEyXzI0MlhfR1BJTzE3IiwJMHgwZTksCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFBOF8yNDJYX0dQSU81OCIsCQkweDBlYSwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJXNF9fMjRYWF9HUElPNzQiLAkJMHgwZjIsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIk4xNV8yNFhYX0dQSU84NSIsCQkweDEwMywJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiTTE1XzI0WFhfR1BJTzkyIiwJCTB4MTBhLAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJQMjBfMjRYWF9HUElPOTMiLAkJMHgxMGIsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIlAxOF8yNFhYX0dQSU85NSIsCQkweDEwZCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiTTE4XzI0WFhfR1BJTzk2IiwJCTB4MTBlLAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJMMTRfMjRYWF9HUElPOTciLAkJMHgxMGYsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0dQSU85OSIsCQkweDExMywJMywJMSwJMSwJMSkKLU1VWF9DRkdfMjRYWCgiVjE0XzI0WFhfR1BJTzExNyIsCTB4MTI4LAkzLAkxLAkwLAkxKQotTVVYX0NGR18yNFhYKCJQMTRfMjRYWF9HUElPMTI1IiwJMHgxNDAsCTMsCTEsCTEsCTEpCi0KLS8qIDI0MnggREJHIEdQSU8gKi8KLU1VWF9DRkdfMjRYWCgiVjRfMjQyWF9HUElPNDkiLAkJMHhkMywJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVzJfMjQyWF9HUElPNTAiLAkJMHhkNCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVTRfMjQyWF9HUElPNTEiLAkJMHhkNSwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVjNfMjQyWF9HUElPNTIiLAkJMHhkNiwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVjJfMjQyWF9HUElPNTMiLAkJMHhkNywJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVjZfMjQyWF9HUElPNTMiLAkJMHhjZiwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVDRfMjQyWF9HUElPNTQiLAkJMHhkOCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTRfMjQyWF9HUElPNTQiLAkJMHhkMCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVDNfMjQyWF9HUElPNTUiLAkJMHhkOSwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVTJfMjQyWF9HUElPNTYiLAkJMHhkYSwJMywJMCwJMCwJMSkKLQotLyogMjR4eCBleHRlcm5hbCBETUEgcmVxdWVzdHMgKi8KLU1VWF9DRkdfMjRYWCgiQUExMF8yNDJYX0RNQVJFUTAiLAkweDBlNSwJMiwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUE2XzI0MlhfRE1BUkVRMSIsCTB4MGU2LAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJFNF8yNDJYX0RNQVJFUTIiLAkJMHgwNzQsCTIsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkc0XzI0MlhfRE1BUkVRMyIsCQkweDA3MywJMiwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRDNfMjQyWF9ETUFSRVE0IiwJCTB4MDcyLAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJFM18yNDJYX0RNQVJFUTUiLAkJMHgwNzEsCTIsCTAsCTAsCTEpCi0KLS8qIFVBUlQzICovCi1NVVhfQ0ZHXzI0WFgoIksxNV8yNFhYX1VBUlQzX1RYIiwJMHgxMTgsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIksxNF8yNFhYX1VBUlQzX1JYIiwJMHgxMTksCTAsCTAsCTAsCTEpCi0KLS8qIE1NQy9TRElPICovCi1NVVhfQ0ZHXzI0WFgoIkcxOV8yNFhYX01NQ19DTEtPIiwJMHgwZjMsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkgxOF8yNFhYX01NQ19DTUQiLAkweDBmNCwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRjIwXzI0WFhfTU1DX0RBVDAiLAkweDBmNSwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiSDE0XzI0WFhfTU1DX0RBVDEiLAkweDBmNiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRTE5XzI0WFhfTU1DX0RBVDIiLAkweDBmNywJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRDE5XzI0WFhfTU1DX0RBVDMiLAkweDBmOCwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRjE5XzI0WFhfTU1DX0RBVF9ESVIwIiwJMHgwZjksCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkUyMF8yNFhYX01NQ19EQVRfRElSMSIsCTB4MGZhLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJGMThfMjRYWF9NTUNfREFUX0RJUjIiLAkweDBmYiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiRTE4XzI0WFhfTU1DX0RBVF9ESVIzIiwJMHgwZmMsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkcxOF8yNFhYX01NQ19DTURfRElSIiwJMHgwZmQsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkgxNV8yNFhYX01NQ19DTEtJIiwJMHgwZmUsCTAsCTAsCTAsCTEpCi0KLS8qIEZ1bGwgc3BlZWQgVVNCICovCi1NVVhfQ0ZHXzI0WFgoIkoyMF8yNFhYX1VTQjBfUFVFTiIsCTB4MTFkLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJKMTlfMjRYWF9VU0IwX1ZQIiwJMHgxMWUsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIksyMF8yNFhYX1VTQjBfVk0iLAkweDExZiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiSjE4XzI0WFhfVVNCMF9SQ1YiLAkweDEyMCwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiSzE5XzI0WFhfVVNCMF9UWEVOIiwJMHgxMjEsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkoxNF8yNFhYX1VTQjBfU0UwIiwJMHgxMjIsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIksxOF8yNFhYX1VTQjBfREFUIiwJMHgxMjMsCTAsCTAsCTAsCTEpCi0KLU1VWF9DRkdfMjRYWCgiTjE0XzI0WFhfVVNCMV9TRTAiLAkweDBlZCwJMiwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVzEyXzI0WFhfVVNCMV9TRTAiLAkweDBkZCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiUDE1XzI0WFhfVVNCMV9EQVQiLAkweDBlZSwJMiwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiUjEzXzI0WFhfVVNCMV9EQVQiLAkweDBlMCwJMywJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiVzIwXzI0WFhfVVNCMV9UWEVOIiwJMHgwZWMsCTIsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIlAxM18yNFhYX1VTQjFfVFhFTiIsCTB4MGRmLAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJWMTlfMjRYWF9VU0IxX1JDViIsCTB4MGViLAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJWMTJfMjRYWF9VU0IxX1JDViIsCTB4MGRlLAkzLAkwLAkwLAkxKQotCi1NVVhfQ0ZHXzI0WFgoIkFBMTBfMjRYWF9VU0IyX1NFMCIsCTB4MGU1LAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJZMTFfMjRYWF9VU0IyX0RBVCIsCTB4MGU4LAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQTEyXzI0WFhfVVNCMl9UWEVOIiwJMHgwZTksCTIsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFBNl8yNFhYX1VTQjJfUkNWIiwJMHgwZTYsCTIsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFBNF8yNFhYX1VTQjJfVExMU0UwIiwJMHgwZTcsCTIsCTAsCTAsCTEpCi0KLS8qIEtleXBhZCBHUElPKi8KLU1VWF9DRkdfMjRYWCgiVDE5XzI0WFhfS0JSMCIsCQkweDEwNiwJMywJMSwJMSwJMSkKLU1VWF9DRkdfMjRYWCgiUjE5XzI0WFhfS0JSMSIsCQkweDEwNywJMywJMSwJMSwJMSkKLU1VWF9DRkdfMjRYWCgiVjE4XzI0WFhfS0JSMiIsCQkweDEzOSwJMywJMSwJMSwJMSkKLU1VWF9DRkdfMjRYWCgiTTIxXzI0WFhfS0JSMyIsCQkweGM5LAkzLAkxLAkxLAkxKQotTVVYX0NGR18yNFhYKCJFNV9fMjRYWF9LQlI0IiwJCTB4MTM4LAkzLAkxLAkxLAkxKQotTVVYX0NGR18yNFhYKCJNMThfMjRYWF9LQlI1IiwJCTB4MTBlLAkzLAkxLAkxLAkxKQotTVVYX0NGR18yNFhYKCJSMjBfMjRYWF9LQkMwIiwJCTB4MTA4LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJNMTRfMjRYWF9LQkMxIiwJCTB4MTA5LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJIMTlfMjRYWF9LQkMyIiwJCTB4MTE0LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJWMTdfMjRYWF9LQkMzIiwJCTB4MTM1LAkzLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJQMjFfMjRYWF9LQkM0IiwJCTB4Y2EsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkwxNF8yNFhYX0tCQzUiLAkJMHgxMGYsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIk4xOV8yNFhYX0tCQzYiLAkJMHgxMTAsCTMsCTAsCTAsCTEpCi0KLS8qIDI0eHggTWVuZWxhdXMgS2V5cGFkIEdQSU8gKi8KLU1VWF9DRkdfMjRYWCgiQjNfXzI0WFhfS0JSNSIsCQkweDMwLAkzLAkxLAkxLAkxKQotTVVYX0NGR18yNFhYKCJBQTRfMjRYWF9LQkMyIiwJCTB4ZTcsCTMsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkIxM18yNFhYX0tCQzYiLAkJMHgxMTAsCTMsCTAsCTAsCTEpCi0KLS8qIDI0MzAgVVNCICovCi1NVVhfQ0ZHXzI0WFgoIkFEOV8yNDMwX1VTQjBfUFVFTiIsCTB4MTMzLAk0LAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJZMTFfMjQzMF9VU0IwX1ZQIiwJMHgxMzQsCTQsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEN18yNDMwX1VTQjBfVk0iLAkweDEzNSwJNCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUU3XzI0MzBfVVNCMF9SQ1YiLAkweDEzNiwJNCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUQ0XzI0MzBfVVNCMF9UWEVOIiwJMHgxMzcsCTQsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFGOV8yNDMwX1VTQjBfU0UwIiwJMHgxMzgsCTQsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFFNl8yNDMwX1VTQjBfREFUIiwJMHgxMzksCTQsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEMjRfMjQzMF9VU0IxX1NFMCIsCTB4MTA3LAkyLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQjI0XzI0MzBfVVNCMV9SQ1YiLAkweDEwOCwJMiwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTI1XzI0MzBfVVNCMV9UWEVOIiwJMHgxMDksCTIsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFBMjZfMjQzMF9VU0IxX0RBVCIsCTB4MTBBLAkyLAkwLAkwLAkxKQotCi0vKiAyNDMwIEhTLVVTQiAqLwotTVVYX0NGR18yNFhYKCJBRDlfMjQzMF9VU0IwSFNfREFUQTMiLAkweDEzMywJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTExXzI0MzBfVVNCMEhTX0RBVEE0IiwJMHgxMzQsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEN18yNDMwX1VTQjBIU19EQVRBNSIsCTB4MTM1LAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRTdfMjQzMF9VU0IwSFNfREFUQTYiLAkweDEzNiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUQ0XzI0MzBfVVNCMEhTX0RBVEEyIiwJMHgxMzcsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFGOV8yNDMwX1VTQjBIU19EQVRBMCIsCTB4MTM4LAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRTZfMjQzMF9VU0IwSFNfREFUQTEiLAkweDEzOSwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUU4XzI0MzBfVVNCMEhTX0NMSyIsCTB4MTNBLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRDhfMjQzMF9VU0IwSFNfRElSIiwJMHgxM0IsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFFNV8yNDMwX1VTQjBIU19TVFAiLAkweDEzYywJMCwJMSwJMSwJMSkKLU1VWF9DRkdfMjRYWCgiQUU5XzI0MzBfVVNCMEhTX05YVCIsCTB4MTNELAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQzdfMjQzMF9VU0IwSFNfREFUQTciLAkweDEzRSwJMCwJMCwJMCwJMSkKLQotLyogMjQzMCBNY0JTUCAqLwotTVVYX0NGR18yNFhYKCJBRDZfMjQzMF9NQ0JTUF9DTEtTIiwJMHgwMTFFLAkwLAkwLAkwLAkxKQotCi1NVVhfQ0ZHXzI0WFgoIkFCMl8yNDMwX01DQlNQMV9DTEtSIiwJMHgwMTFBLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRDVfMjQzMF9NQ0JTUDFfRlNSIiwJMHgwMTFCLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQTFfMjQzMF9NQ0JTUDFfRFgiLAkweDAxMUMsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFGM18yNDMwX01DQlNQMV9EUiIsCTB4MDExRCwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUIzXzI0MzBfTUNCU1AxX0ZTWCIsCTB4MDExRiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiWTlfMjQzMF9NQ0JTUDFfQ0xLWCIsCTB4MDEyMCwJMCwJMCwJMCwJMSkKLQotTVVYX0NGR18yNFhYKCJBQzEwXzI0MzBfTUNCU1AyX0ZTWCIsCTB4MDEyRSwJMSwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUQxNl8yNDMwX01DQlNQMl9DTFgiLAkweDAxMkYsCTEsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFFMTNfMjQzMF9NQ0JTUDJfRFgiLAkweDAxMzAsCTEsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEMTNfMjQzMF9NQ0JTUDJfRFIiLAkweDAxMzEsCTEsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFDMTBfMjQzMF9NQ0JTUDJfRlNYX09GRiIsMHgwMTJFLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRDE2XzI0MzBfTUNCU1AyX0NMWF9PRkYiLDB4MDEyRiwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUUxM18yNDMwX01DQlNQMl9EWF9PRkYiLAkweDAxMzAsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEMTNfMjQzMF9NQ0JTUDJfRFJfT0ZGIiwJMHgwMTMxLAkwLAkwLAkwLAkxKQotCi1NVVhfQ0ZHXzI0WFgoIkFDOV8yNDMwX01DQlNQM19DTEtYIiwJMHgwMTAzLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRTRfMjQzMF9NQ0JTUDNfRlNYIiwJMHgwMTA0LAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRTJfMjQzMF9NQ0JTUDNfRFIiLAkweDAxMDUsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFGNF8yNDMwX01DQlNQM19EWCIsCTB4MDEwNiwJMCwJMCwJMCwJMSkKLQotTVVYX0NGR18yNFhYKCJOM18yNDMwX01DQlNQNF9DTEtYIiwJMHgwMTBCLAkxLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBRDIzXzI0MzBfTUNCU1A0X0RSIiwJMHgwMTBDLAkxLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQjI1XzI0MzBfTUNCU1A0X0RYIiwJMHgwMTBELAkxLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJBQzI1XzI0MzBfTUNCU1A0X0ZTWCIsCTB4MDEwRSwJMSwJMCwJMCwJMSkKLQotTVVYX0NGR18yNFhYKCJBRTE2XzI0MzBfTUNCU1A1X0NMS1giLAkweDAwRUQsCTEsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFGMTJfMjQzMF9NQ0JTUDVfRlNYIiwJMHgwMEVELAkxLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJLN18yNDMwX01DQlNQNV9EWCIsCTB4MDBFRiwJMSwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiTTFfMjQzMF9NQ0JTUDVfRFIiLAkweDAwRjAsCTEsCTAsCTAsCTEpCi0KLS8qIDI0MzAgTUNTUEkxICovCi1NVVhfQ0ZHXzI0WFgoIlkxOF8yNDMwX01DU1BJMV9DTEsiLAkweDAxMEYsCTAsCTAsCTAsCTEpCi1NVVhfQ0ZHXzI0WFgoIkFEMTVfMjQzMF9NQ1NQSTFfU0lNTyIsCTB4MDExMCwJMCwJMCwJMCwJMSkKLU1VWF9DRkdfMjRYWCgiQUUxN18yNDMwX01DU1BJMV9TT01JIiwJMHgwMTExLAkwLAkwLAkwLAkxKQotTVVYX0NGR18yNFhYKCJVMV8yNDMwX01DU1BJMV9DUzAiLAkweDAxMTIsCTAsCTAsCTAsCTEpCi0KLS8qIFRvdWNoc2NyZWVuIEdQSU8gKi8KLU1VWF9DRkdfMjRYWCgiQUYxOV8yNDMwX0dQSU9fODUiLAkweDAxMTMsCTMsCTAsCTAsCTEpCi0KLX07Ci0KLSNkZWZpbmUgT01BUDI0WFhfUElOU19TWglBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX01VWF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpCi0KLXN0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgb21hcDJfY2ZnX2RlYnVnKGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnICpjZmcsIHUxNiByZWcpCi17Ci0JdTE2IG9yaWc7Ci0JdTggd2FybiA9IDAsIGRlYnVnID0gMDsKLQotCW9yaWcgPSBvbWFwX211eF9yZWFkKGNmZy0+bXV4X3JlZyAtIE9NQVBfTVVYX0JBU0VfT0ZGU0VUKTsKLQotI2lmZGVmCUNPTkZJR19PTUFQX01VWF9ERUJVRwotCWRlYnVnID0gY2ZnLT5kZWJ1ZzsKLSNlbmRpZgotCXdhcm4gPSAob3JpZyAhPSByZWcpOwotCWlmIChkZWJ1ZyB8fCB3YXJuKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiTVVYOiBzZXR1cCAlcyAoMHglcCk6IDB4JTA0eCAtPiAweCUwNHhcbiIsCi0JCQljZmctPm5hbWUsIG9tYXBfY3RybF9iYXNlX2dldCgpICsgY2ZnLT5tdXhfcmVnLAotCQkJb3JpZywgcmVnKTsKLX0KLSNlbHNlCi0jZGVmaW5lIG9tYXAyX2NmZ19kZWJ1Zyh4LCB5KQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUgb21hcDI0eHhfY2ZnX3JlZyhjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZyAqY2ZnKQotewotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCByZWcgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKLQlyZWcgfD0gY2ZnLT5tYXNrICYgMHg3OwotCWlmIChjZmctPnB1bGxfdmFsKQotCQlyZWcgfD0gT01BUDJfUFVMTF9FTkE7Ci0JaWYgKGNmZy0+cHVfcGRfdmFsKQotCQlyZWcgfD0gT01BUDJfUFVMTF9VUDsKLQlvbWFwMl9jZmdfZGVidWcoY2ZnLCByZWcpOwotCW9tYXBfbXV4X3dyaXRlKHJlZywgY2ZnLT5tdXhfcmVnIC0gT01BUF9NVVhfQkFTRV9PRkZTRVQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9zcGluX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IG9tYXAyX211eF9pbml0KHZvaWQpCi17Ci0JdTMyIG11eF9wYmFzZTsKLQotCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKLQkJbXV4X3BiYXNlID0gT01BUDI0MjBfQ1RSTF9CQVNFICsgT01BUF9NVVhfQkFTRV9PRkZTRVQ7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpCi0JCW11eF9wYmFzZSA9IE9NQVAyNDNYX0NUUkxfQkFTRSArIE9NQVBfTVVYX0JBU0VfT0ZGU0VUOwotCWVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQltdXhfYmFzZSA9IGlvcmVtYXAobXV4X3BiYXNlLCBPTUFQX01VWF9CQVNFX1NaKTsKLQlpZiAoIW11eF9iYXNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXV4OiBDb3VsZCBub3QgaW9yZW1hcFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlhcmNoX211eF9jZmcucGlucwk9IG9tYXAyNHh4X3BpbnM7Ci0JCWFyY2hfbXV4X2NmZy5zaXplCT0gT01BUDI0WFhfUElOU19TWjsKLQkJYXJjaF9tdXhfY2ZnLmNmZ19yZWcJPSBvbWFwMjR4eF9jZmdfcmVnOwotCi0JCXJldHVybiBvbWFwX211eF9yZWdpc3RlcigmYXJjaF9tdXhfY2ZnKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLWludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgkvKiBDT05GSUdfT01BUF9NVVggKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgTElTVF9IRUFEKG11eG1vZGVzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobXV4bW9kZV9tdXRleCk7CiAKQEAgLTM4MSw2ICs4Nyw5IEBACiBpbnQgX19pbml0IG9tYXBfbXV4X2luaXRfZ3BpbyhpbnQgZ3BpbywgaW50IHZhbCkKIHsKIAlzdHJ1Y3Qgb21hcF9tdXhfZW50cnkgKmU7CisJc3RydWN0IG9tYXBfbXV4ICpncGlvX211eDsKKwl1MTYgb2xkX21vZGU7CisJdTE2IG11eF9tb2RlOwogCWludCBmb3VuZCA9IDA7CiAKIAlpZiAoIWdwaW8pCkBAIC0zODksMzEgKzk4LDMzIEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmbXV4bW9kZXMsIG5vZGUpIHsKIAkJc3RydWN0IG9tYXBfbXV4ICptID0gJmUtPm11eDsKIAkJaWYgKGdwaW8gPT0gbS0+Z3BpbykgewotCQkJdTE2IG9sZF9tb2RlOwotCQkJdTE2IG11eF9tb2RlOwotCi0JCQlvbGRfbW9kZSA9IG9tYXBfbXV4X3JlYWQobS0+cmVnX29mZnNldCk7Ci0JCQltdXhfbW9kZSA9IHZhbCAmIH4oT01BUF9NVVhfTlJfTU9ERVMgLSAxKTsKLQkJCW11eF9tb2RlIHw9IE9NQVBfTVVYX01PREU0OwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm11eDogU2V0dGluZyBzaWduYWwgIgotCQkJCSIlcy5ncGlvJWkgMHglMDR4IC0+IDB4JTA0eFxuIiwKLQkJCQltLT5tdXhuYW1lc1swXSwgZ3Bpbywgb2xkX21vZGUsIG11eF9tb2RlKTsKLQkJCW9tYXBfbXV4X3dyaXRlKG11eF9tb2RlLCBtLT5yZWdfb2Zmc2V0KTsKKwkJCWdwaW9fbXV4ID0gbTsKIAkJCWZvdW5kKys7CiAJCX0KIAl9CiAKLQlpZiAoZm91bmQgPT0gMSkKLQkJcmV0dXJuIDA7CisJaWYgKGZvdW5kID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdXg6IENvdWxkIG5vdCBzZXQgZ3BpbyVpXG4iLCBncGlvKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJaWYgKGZvdW5kID4gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm11eDogTXVsdGlwbGUgZ3BpbyBwYXRocyBmb3IgZ3BpbyVpXG4iLCBncGlvKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibXV4OiBNdWx0aXBsZSBncGlvIHBhdGhzICglZCkgZm9yIGdwaW8laVxuIiwKKwkJCQlmb3VuZCwgZ3Bpbyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAibXV4OiBDb3VsZCBub3Qgc2V0IGdwaW8laVxuIiwgZ3Bpbyk7CisJb2xkX21vZGUgPSBvbWFwX211eF9yZWFkKGdwaW9fbXV4LT5yZWdfb2Zmc2V0KTsKKwltdXhfbW9kZSA9IHZhbCAmIH4oT01BUF9NVVhfTlJfTU9ERVMgLSAxKTsKKwlpZiAob21hcF9tdXhfZmxhZ3MgJiBNVVhBQkxFX0dQSU9fTU9ERTMpCisJCW11eF9tb2RlIHw9IE9NQVBfTVVYX01PREUzOworCWVsc2UKKwkJbXV4X21vZGUgfD0gT01BUF9NVVhfTU9ERTQ7CisJcHJpbnRrKEtFUk5fREVCVUcgIm11eDogU2V0dGluZyBzaWduYWwgJXMuZ3BpbyVpIDB4JTA0eCAtPiAweCUwNHhcbiIsCisJCQlncGlvX211eC0+bXV4bmFtZXNbMF0sIGdwaW8sIG9sZF9tb2RlLCBtdXhfbW9kZSk7CisJb21hcF9tdXhfd3JpdGUobXV4X21vZGUsIGdwaW9fbXV4LT5yZWdfb2Zmc2V0KTsKIAotCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IG9tYXBfbXV4X2luaXRfc2lnbmFsKGNoYXIgKm11eG5hbWUsIGludCB2YWwpCkBAIC0xMDMyLDYgKzc0Myw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcF9tdXhfZmxhZ3MgPSBNVVhBQkxFX0dQSU9fTU9ERTM7CisKIAlvbWFwX211eF9pbml0X3BhY2thZ2Uoc3VwZXJzZXQsIHBhY2thZ2Vfc3Vic2V0LCBwYWNrYWdlX2JhbGxzKTsKIAlvbWFwX211eF9pbml0X2xpc3Qoc3VwZXJzZXQpOwogCW9tYXBfbXV4X2luaXRfc2lnbmFscyhib2FyZF9tdXgpOwpAQCAtMTAzOSw1ICs3NTMsMyBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKaW5kZXggNDgwYWJjNS4uYThlMDQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCkBAIC03LDYgKzcsOCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgIm11eDI0MjAuaCIKKyNpbmNsdWRlICJtdXgyNDMwLmgiCiAjaW5jbHVkZSAibXV4MzR4eC5oIgogCiAjZGVmaW5lIE9NQVBfTVVYX1RFUk1JTkFUT1IJMHhmZmZmCkBAIC01NiwxMCArNTgsMTIgQEAKIAogLyogRmxhZ3MgZm9yIG9tYXBfbXV4X2luaXQgKi8KICNkZWZpbmUgT01BUF9QQUNLQUdFX01BU0sJCTB4ZmZmZgotI2RlZmluZSBPTUFQX1BBQ0tBR0VfQ0JQCQk0CQkvKiA1MTUtcGluIDAuNDAgMC41MCAqLwotI2RlZmluZSBPTUFQX1BBQ0tBR0VfQ1VTCQkzCQkvKiA0MjMtcGluIDAuNjUgKi8KLSNkZWZpbmUgT01BUF9QQUNLQUdFX0NCQgkJMgkJLyogNTE1LXBpbiAwLjQwIDAuNTAgKi8KLSNkZWZpbmUgT01BUF9QQUNLQUdFX0NCQwkJMQkJLyogNTE1LXBpbiAwLjUwIDAuNjUgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NCUAkJNgkJLyogNTE1LXBpbiAwLjQwIDAuNTAgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX0NVUwkJNQkJLyogNDIzLXBpbiAwLjY1ICovCisjZGVmaW5lIE9NQVBfUEFDS0FHRV9DQkIJCTQJCS8qIDUxNS1waW4gMC40MCAwLjUwICovCisjZGVmaW5lIE9NQVBfUEFDS0FHRV9DQkMJCTMJCS8qIDUxNS1waW4gMC41MCAwLjY1ICovCisjZGVmaW5lIE9NQVBfUEFDS0FHRV9aQUMJCTIJCS8qIDI0eHggNDQ3LXBpbiBQT1AgKi8KKyNkZWZpbmUgT01BUF9QQUNLQUdFX1pBRgkJMQkJLyogMjQyMCA0NDctcGluIFNJUCAqLwogCiAKICNkZWZpbmUgT01BUF9NVVhfTlJfTU9ERVMJOAkJCS8qIEF2YWlsYWJsZSBtb2RlcyAqLwpAQCAtMTAyLDcgKzEwNiw3IEBACiAJdTE2CXZhbHVlOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQogCiAvKioKICAqIG9tYXBfbXV4X2luaXRfZ3BpbyAtIGluaXRpYWxpemUgYSBzaWduYWwgYmFzZWQgb24gdGhlIEdQSU8gbnVtYmVyCkBAIC0xNzEsNiArMTc1LDIwIEBACiB2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4KTsKIAogLyoqCisgKiBvbWFwMjQyMF9tdXhfaW5pdCgpIC0gaW5pdGlhbGl6ZSBtdXggc3lzdGVtIHdpdGggYm9hcmQgc3BlY2lmaWMgc2V0CisgKiBAYm9hcmRfbXV4OgkJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKKyAqLworaW50IG9tYXAyNDIwX211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworCisvKioKKyAqIG9tYXAyNDMwX211eF9pbml0KCkgLSBpbml0aWFsaXplIG11eCBzeXN0ZW0gd2l0aCBib2FyZCBzcGVjaWZpYyBzZXQKKyAqIEBib2FyZF9tdXg6CQlCb2FyZCBzcGVjaWZpYyBtdXggdGFibGUKKyAqIEBmbGFnczoJCU9NQVAgcGFja2FnZSB0eXBlIHVzZWQgZm9yIHRoZSBib2FyZAorICovCitpbnQgb21hcDI0MzBfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgsIGludCBmbGFncyk7CisKKy8qKgogICogb21hcDNfbXV4X2luaXQoKSAtIGluaXRpYWxpemUgbXV4IHN5c3RlbSB3aXRoIGJvYXJkIHNwZWNpZmljIHNldAogICogQGJvYXJkX211eDoJCUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZQogICogQGZsYWdzOgkJT01BUCBwYWNrYWdlIHR5cGUgdXNlZCBmb3IgdGhlIGJvYXJkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MjAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYjA0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MjAuYwpAQCAtMCwwICsxLDY4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYQorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSAibXV4LmgiCisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworI2RlZmluZSBfT01BUDI0MjBfTVVYRU5UUlkoTTAsIGcsIG0wLCBtMSwgbTIsIG0zLCBtNCwgbTUsIG02LCBtNykJCVwKK3sJCQkJCQkJCQlcCisJLnJlZ19vZmZzZXQJPSAoT01BUDI0MjBfQ09OVFJPTF9QQURDT05GXyMjTTAjI19PRkZTRVQpLAlcCisJLmdwaW8JCT0gKGcpLAkJCQkJCVwKKwkubXV4bmFtZXMJPSB7IG0wLCBtMSwgbTIsIG0zLCBtNCwgbTUsIG02LCBtNyB9LAkJXAorfQorCisjZWxzZQorCisjZGVmaW5lIF9PTUFQMjQyMF9NVVhFTlRSWShNMCwgZywgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03KQkJXAorewkJCQkJCQkJCVwKKwkucmVnX29mZnNldAk9IChPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfIyNNMCMjX09GRlNFVCksCVwKKwkuZ3BpbwkJPSAoZyksCQkJCQkJXAorfQorCisjZW5kaWYKKworI2RlZmluZSBfT01BUDI0MjBfQkFMTEVOVFJZKE0wLCBiYiwgYnQpCQkJCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl8jI00wIyNfT0ZGU0VUKSwJXAorCS5iYWxscwkJPSB7IGJiLCBidCB9LAkJCQkJXAorfQorCisvKgorICogU3VwZXJzZXQgb2YgYWxsIG11eCBtb2RlcyBmb3Igb21hcDI0MjAKKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX211eCBfX2luaXRkYXRhIG9tYXAyNDIwX211eG1vZGVzW10gPSB7CisJX09NQVAyNDIwX01VWEVOVFJZKENBTV9EMCwgNTQsCisJCSJjYW1fZDAiLCAiaHdfZGJnMiIsICJzdGlfZG91dCIsICJncGlvXzU0IiwKKwkJTlVMTCwgTlVMTCwgImV0a19kMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDEsIDUzLAorCQkiY2FtX2QxIiwgImh3X2RiZzMiLCAic3RpX2RpbiIsICJncGlvXzUzIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDIsIDUyLAorCQkiY2FtX2QyIiwgImh3X2RiZzQiLCAibWNic3AxX2Nsa3giLCAiZ3Bpb181MiIsCisJCU5VTEwsIE5VTEwsICJldGtfZDQiLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoQ0FNX0QzLCA1MSwKKwkJImNhbV9kMyIsICJod19kYmc1IiwgIm1jYnNwMV9kciIsICJncGlvXzUxIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kNSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDQsIDUwLAorCQkiY2FtX2Q0IiwgImh3X2RiZzYiLCAibWNic3AxX2ZzciIsICJncGlvXzUwIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kNiIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDUsIDQ5LAorCQkiY2FtX2Q1IiwgImh3X2RiZzciLCAibWNic3AxX2Nsa3IiLCAiZ3Bpb180OSIsCisJCU5VTEwsIE5VTEwsICJldGtfZDciLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoQ0FNX0Q2LCAwLAorCQkiY2FtX2Q2IiwgImh3X2RiZzgiLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCAiZXRrX2Q4IiwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKENBTV9ENywgMCwKKwkJImNhbV9kNyIsICJod19kYmc5IiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgImV0a19kOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDgsIDU0LAorCQkiY2FtX2Q4IiwgImh3X2RiZzEwIiwgTlVMTCwgImdwaW9fNTQiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxMCIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fRDksIDUzLAorCQkiY2FtX2Q5IiwgImh3X2RiZzExIiwgTlVMTCwgImdwaW9fNTMiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxMSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShDQU1fSFMsIDU1LAorCQkiY2FtX2hzIiwgImh3X2RiZzEiLCAibWNic3AxX2R4IiwgImdwaW9fNTUiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxIiwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKENBTV9MQ0xLLCA1NywKKwkJImNhbV9sY2xrIiwgTlVMTCwgIm1jYnNwX2Nsa3MiLCAiZ3Bpb181NyIsCisJCU5VTEwsIE5VTEwsICJldGtfYzEiLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoQ0FNX1ZTLCA1NiwKKwkJImNhbV92cyIsICJod19kYmcwIiwgIm1jYnNwMV9mc3giLCAiZ3Bpb181NiIsCisJCU5VTEwsIE5VTEwsICJldGtfZDAiLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoQ0FNX1hDTEssIDAsCisJCSJjYW1feGNsayIsIE5VTEwsICJzdGlfY2xrIiwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgImV0a19jMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShEU1NfQUNCSUFTLCA0OCwKKwkJImRzc19hY2JpYXMiLCBOVUxMLCAibWNic3AyX2ZzeCIsICJncGlvXzQ4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTAsIDQwLAorCQkiZHNzX2RhdGExMCIsIE5VTEwsIE5VTEwsICJncGlvXzQwIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTEsIDQxLAorCQkiZHNzX2RhdGExMSIsIE5VTEwsIE5VTEwsICJncGlvXzQxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTIsIDQyLAorCQkiZHNzX2RhdGExMiIsIE5VTEwsIE5VTEwsICJncGlvXzQyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTMsIDQzLAorCQkiZHNzX2RhdGExMyIsIE5VTEwsIE5VTEwsICJncGlvXzQzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTQsIDQ0LAorCQkiZHNzX2RhdGExNCIsIE5VTEwsIE5VTEwsICJncGlvXzQ0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTUsIDQ1LAorCQkiZHNzX2RhdGExNSIsIE5VTEwsIE5VTEwsICJncGlvXzQ1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTYsIDQ2LAorCQkiZHNzX2RhdGExNiIsIE5VTEwsIE5VTEwsICJncGlvXzQ2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBMTcsIDQ3LAorCQkiZHNzX2RhdGExNyIsIE5VTEwsIE5VTEwsICJncGlvXzQ3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKERTU19EQVRBOCwgMzgsCisJCSJkc3NfZGF0YTgiLCBOVUxMLCBOVUxMLCAiZ3Bpb18zOCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShEU1NfREFUQTksIDM5LAorCQkiZHNzX2RhdGE5IiwgTlVMTCwgTlVMTCwgImdwaW9fMzkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoRUFDX0FDX0RJTiwgMTE1LAorCQkiZWFjX2FjX2RpbiIsICJtY2JzcDJfZHIiLCBOVUxMLCAiZ3Bpb18xMTUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoRUFDX0FDX0RPVVQsIDExNiwKKwkJImVhY19hY19kb3V0IiwgIm1jYnNwMl9keCIsIE5VTEwsICJncGlvXzExNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShFQUNfQUNfRlMsIDExNCwKKwkJImVhY19hY19mcyIsICJtY2JzcDJfZnN4IiwgTlVMTCwgImdwaW9fMTE0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEVBQ19BQ19NQ0xLLCAxMTcsCisJCSJlYWNfYWNfbWNsayIsIE5VTEwsIE5VTEwsICJncGlvXzExNyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShFQUNfQUNfUlNULCAxMTgsCisJCSJlYWNfYWNfcnN0IiwgImVhY19idF9kaW4iLCBOVUxMLCAiZ3Bpb18xMTgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoRUFDX0FDX1NDTEssIDExMywKKwkJImVhY19hY19zY2xrIiwgIm1jYnNwMl9jbGt4IiwgTlVMTCwgImdwaW9fMTEzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEVBQ19CVF9ESU4sIDczLAorCQkiZWFjX2J0X2RpbiIsIE5VTEwsIE5VTEwsICJncGlvXzczIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShFQUNfQlRfRE9VVCwgNzQsCisJCSJlYWNfYnRfZG91dCIsIE5VTEwsICJzdGlfY2xrIiwgImdwaW9fNzQiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2Q4IiwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEVBQ19CVF9GUywgNzIsCisJCSJlYWNfYnRfZnMiLCBOVUxMLCBOVUxMLCAiZ3Bpb183MiIsCisJCU5VTEwsIE5VTEwsICJldGtfZDEwIiwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEVBQ19CVF9TQ0xLLCA3MSwKKwkJImVhY19idF9zY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fNzEiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxMSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUElPXzExOSwgMTE5LAorCQkiZ3Bpb18xMTkiLCBOVUxMLCAic3RpX2RpbiIsICJncGlvXzExOSIsCisJCU5VTEwsICJzeXNfYm9vdDAiLCAiZXRrX2QxMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUElPXzEyMCwgMTIwLAorCQkiZ3Bpb18xMjAiLCBOVUxMLCAic3RpX2RvdXQiLCAiZ3Bpb18xMjAiLAorCQkiY2FtX2Q5IiwgInN5c19ib290MSIsICJldGtfZDEzIiwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQSU9fMTIxLCAxMjEsCisJCSJncGlvXzEyMSIsIE5VTEwsIE5VTEwsICJncGlvXzEyMSIsCisJCSJqdGFnX2VtdTIiLCAic3lzX2Jvb3QyIiwgImV0a19kMTQiLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BJT18xMjIsIDEyMiwKKwkJImdwaW9fMTIyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTIyIiwKKwkJImp0YWdfZW11MyIsICJzeXNfYm9vdDMiLCAiZXRrX2QxNSIsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUElPXzEyNCwgMTI0LAorCQkiZ3Bpb18xMjQiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMjQiLAorCQlOVUxMLCAic3lzX2Jvb3Q1IiwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQSU9fMTI1LCAxMjUsCisJCSJncGlvXzEyNSIsICJzeXNfanRhZ3NlbDEiLCAic3lzX2p0YWdzZWwyIiwgImdwaW9fMTI1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQSU9fMzYsIDM2LAorCQkiZ3Bpb18zNiIsIE5VTEwsIE5VTEwsICJncGlvXzM2IiwKKwkJTlVMTCwgInN5c19ib290NCIsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUElPXzYyLCA2MiwKKwkJImdwaW9fNjIiLCAidWFydDFfcngiLCAidXNiMV9kYXQiLCAiZ3Bpb182MiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUElPXzYsIDYsCisJCSJncGlvXzYiLCAidHZfZGV0cHVsc2UiLCBOVUxMLCAiZ3Bpb182IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfQTEwLCAzLAorCQkiZ3BtY19hMTAiLCBOVUxMLCAic3lzX25kbWFyZXE1IiwgImdwaW9fMyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0ExLCAxMiwKKwkJImdwbWNfYTEiLCAiZHNzX2RhdGExOCIsIE5VTEwsICJncGlvXzEyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfQTIsIDExLAorCQkiZ3BtY19hMiIsICJkc3NfZGF0YTE5IiwgTlVMTCwgImdwaW9fMTEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19BMywgMTAsCisJCSJncG1jX2EzIiwgImRzc19kYXRhMjAiLCBOVUxMLCAiZ3Bpb18xMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0E0LCA5LAorCQkiZ3BtY19hNCIsICJkc3NfZGF0YTIxIiwgTlVMTCwgImdwaW9fOSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0E1LCA4LAorCQkiZ3BtY19hNSIsICJkc3NfZGF0YTIyIiwgTlVMTCwgImdwaW9fOCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0E2LCA3LAorCQkiZ3BtY19hNiIsICJkc3NfZGF0YTIzIiwgTlVMTCwgImdwaW9fNyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0E3LCA2LAorCQkiZ3BtY19hNyIsIE5VTEwsICJzeXNfbmRtYXJlcTIiLCAiZ3Bpb182IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfQTgsIDUsCisJCSJncG1jX2E4IiwgTlVMTCwgInN5c19uZG1hcmVxMyIsICJncGlvXzUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19BOSwgNCwKKwkJImdwbWNfYTkiLCBOVUxMLCAic3lzX25kbWFyZXE0IiwgImdwaW9fNCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0NMSywgMjEsCisJCSJncG1jX2NsayIsIE5VTEwsIE5VTEwsICJncGlvXzIxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfRDEwLCAxOCwKKwkJImdwbWNfZDEwIiwgInNzaTJfcmR5X3J4IiwgTlVMTCwgImdwaW9fMTgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19EMTEsIDE3LAorCQkiZ3BtY19kMTEiLCAic3NpMl9mbGFnX3J4IiwgTlVMTCwgImdwaW9fMTciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19EMTIsIDE2LAorCQkiZ3BtY19kMTIiLCAic3NpMl9kYXRfcngiLCBOVUxMLCAiZ3Bpb18xNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX0QxMywgMTUsCisJCSJncG1jX2QxMyIsICJzc2kyX3JkeV90eCIsIE5VTEwsICJncGlvXzE1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfRDE0LCAxNCwKKwkJImdwbWNfZDE0IiwgInNzaTJfZmxhZ190eCIsIE5VTEwsICJncGlvXzE0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfRDE1LCAxMywKKwkJImdwbWNfZDE1IiwgInNzaTJfZGF0X3R4IiwgTlVMTCwgImdwaW9fMTMiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19EOCwgMjAsCisJCSJncG1jX2Q4IiwgTlVMTCwgTlVMTCwgImdwaW9fMjAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19EOSwgMTksCisJCSJncG1jX2Q5IiwgInNzaTJfd2FrZSIsIE5VTEwsICJncGlvXzE5IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfTkJFMCwgMjksCisJCSJncG1jX25iZTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yOSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX05CRTEsIDMwLAorCQkiZ3BtY19uYmUxIiwgTlVMTCwgTlVMTCwgImdwaW9fMzAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19OQ1MxLCAyMiwKKwkJImdwbWNfbmNzMSIsIE5VTEwsIE5VTEwsICJncGlvXzIyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfTkNTMiwgMjMsCisJCSJncG1jX25jczIiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yMyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX05DUzMsIDI0LAorCQkiZ3BtY19uY3MzIiwgImdwbWNfaW9fZGlyIiwgTlVMTCwgImdwaW9fMjQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19OQ1M0LCAyNSwKKwkJImdwbWNfbmNzNCIsIE5VTEwsIE5VTEwsICJncGlvXzI1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfTkNTNSwgMjYsCisJCSJncG1jX25jczUiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShHUE1DX05DUzYsIDI3LAorCQkiZ3BtY19uY3M2IiwgTlVMTCwgTlVMTCwgImdwaW9fMjciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19OQ1M3LCAyOCwKKwkJImdwbWNfbmNzNyIsICJncG1jX2lvX2RpciIsICJncGlvXzI4IiwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEdQTUNfTldQLCAzMSwKKwkJImdwbWNfbndwIiwgTlVMTCwgTlVMTCwgImdwaW9fMzEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19XQUlUMSwgMzMsCisJCSJncG1jX3dhaXQxIiwgTlVMTCwgTlVMTCwgImdwaW9fMzMiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19XQUlUMiwgMzQsCisJCSJncG1jX3dhaXQyIiwgTlVMTCwgTlVMTCwgImdwaW9fMzQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoR1BNQ19XQUlUMywgMzUsCisJCSJncG1jX3dhaXQzIiwgTlVMTCwgTlVMTCwgImdwaW9fMzUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoSERRX1NJTywgMTAxLAorCQkiaGRxX3NpbyIsICJ1c2IyX3RsbHNlMCIsICJzeXNfYWx0Y2xrIiwgImdwaW9fMTAxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEkyQzJfU0NMLCA5OSwKKwkJImkyYzJfc2NsIiwgTlVMTCwgImdwdDlfcHdtX2V2dCIsICJncGlvXzk5IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKEkyQzJfU0RBLCAxMDAsCisJCSJpMmMyX3NkYSIsIE5VTEwsICJzcGkyX25jczEiLCAiZ3Bpb18xMDAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoSlRBR19FTVUwLCAxMjcsCisJCSJqdGFnX2VtdTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMjciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoSlRBR19FTVUxLCAxMjYsCisJCSJqdGFnX2VtdTEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMjYiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTUNCU1AxX0NMS1IsIDkyLAorCQkibWNic3AxX2Nsa3IiLCAic3NpMl9kYXRfdHgiLCAidmx5bnFfdHgxIiwgImdwaW9fOTIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTUNCU1AxX0NMS1gsIDk4LAorCQkibWNic3AxX2Nsa3giLCAic3NpMl93YWtlIiwgInZseW5xX25sYSIsICJncGlvXzk4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKE1DQlNQMV9EUiwgOTUsCisJCSJtY2JzcDFfZHIiLCAic3NpMl9kYXRfcngiLCAidmx5bnFfcngxIiwgImdwaW9fOTUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTUNCU1AxX0RYLCA5NCwKKwkJIm1jYnNwMV9keCIsICJzc2kyX3JkeV90eCIsICJ2bHlucV9jbGsiLCAiZ3Bpb185NCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNQ0JTUDFfRlNSLCA5MywKKwkJIm1jYnNwMV9mc3IiLCAic3NpMl9mbGFnX3R4IiwgInZseW5xX3R4MCIsICJncGlvXzkzIiwKKwkJInNwaTJfbmNzMSIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNQ0JTUDFfRlNYLCA5NywKKwkJIm1jYnNwMV9mc3giLCAic3NpMl9yZHlfcngiLCBOVUxMLCAiZ3Bpb185NyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNQ0JTUDJfQ0xLWCwgMTIsCisJCSJtY2JzcDJfY2xreCIsIE5VTEwsICJkc3NfZGF0YTIzIiwgImdwaW9fMTIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTUNCU1AyX0RSLCAxMSwKKwkJIm1jYnNwMl9kciIsIE5VTEwsICJkc3NfZGF0YTIyIiwgImdwaW9fMTEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTUNCU1BfQ0xLUywgOTYsCisJCSJtY2JzcF9jbGtzIiwgInNzaTJfZmxhZ19yeCIsICJ2bHlucV9yeDAiLCAiZ3Bpb185NiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfQ0xLSSwgNTksCisJCSJzZG1tY19jbGtpIiwgIm1zX2Nsa2kiLCBOVUxMLCAiZ3Bpb181OSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfQ0xLTywgMCwKKwkJInNkbW1jX2Nsa28iLCAibXNfY2xrbyIsIE5VTEwsIE5VTEwsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfQ01EX0RJUiwgOCwKKwkJInNkbW1jX2NtZF9kaXIiLCBOVUxMLCBOVUxMLCAiZ3Bpb184IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKE1NQ19DTUQsIDAsCisJCSJzZG1tY19jbWQiLCAibXNfYnMiLCBOVUxMLCBOVUxMLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTU1DX0RBVF9ESVIwLCA3LAorCQkic2RtbWNfZGF0X2RpcjAiLCAibXNfZGF0MF9kaXIiLCBOVUxMLCAiZ3Bpb183IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKE1NQ19EQVQwLCAwLAorCQkic2RtbWNfZGF0MCIsICJtc19kYXQwIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKE1NQ19EQVRfRElSMSwgNzgsCisJCSJzZG1tY19kYXRfZGlyMSIsICJtc19kYXR1X2RpciIsICJ1YXJ0Ml9ydHMiLCAiZ3Bpb183OCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfREFUMSwgNzUsCisJCSJzZG1tY19kYXQxIiwgIm1zX2RhdDEiLCBOVUxMLCAiZ3Bpb183NSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfREFUX0RJUjIsIDc5LAorCQkic2RtbWNfZGF0X2RpcjIiLCAibXNfZGF0dV9kaXIiLCAidWFydDJfdHgiLCAiZ3Bpb183OSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShNTUNfREFUMiwgNzYsCisJCSJzZG1tY19kYXQyIiwgIm1zX2RhdDIiLCAidWFydDJfY3RzIiwgImdwaW9fNzYiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTU1DX0RBVF9ESVIzLCA4MCwKKwkJInNkbW1jX2RhdF9kaXIzIiwgIm1zX2RhdHVfZGlyIiwgInVhcnQyX3J4IiwgImdwaW9fODAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoTU1DX0RBVDMsIDc3LAorCQkic2RtbWNfZGF0MyIsICJtc19kYXQzIiwgTlVMTCwgImdwaW9fNzciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU0RSQ19BMTIsIDIsCisJCSJzZHJjX2ExMiIsIE5VTEwsIE5VTEwsICJncGlvXzIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU0RSQ19BMTMsIDEsCisJCSJzZHJjX2ExMyIsIE5VTEwsIE5VTEwsICJncGlvXzEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU0RSQ19BMTQsIDAsCisJCSJzZHJjX2ExNCIsIE5VTEwsIE5VTEwsICJncGlvXzAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU0RSQ19DS0UxLCAzOCwKKwkJInNkcmNfY2tlMSIsIE5VTEwsIE5VTEwsICJncGlvXzM4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNEUkNfTkNTMSwgMzcsCisJCSJzZHJjX25jczEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18zNyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTUEkxX0NMSywgODEsCisJCSJzcGkxX2NsayIsIE5VTEwsIE5VTEwsICJncGlvXzgxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNQSTFfTkNTMCwgODQsCisJCSJzcGkxX25jczAiLCBOVUxMLCBOVUxMLCAiZ3Bpb184NCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTUEkxX05DUzEsIDg1LAorCQkic3BpMV9uY3MxIiwgTlVMTCwgTlVMTCwgImdwaW9fODUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1BJMV9OQ1MyLCA4NiwKKwkJInNwaTFfbmNzMiIsIE5VTEwsIE5VTEwsICJncGlvXzg2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNQSTFfTkNTMywgODcsCisJCSJzcGkxX25jczMiLCBOVUxMLCBOVUxMLCAiZ3Bpb184NyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTUEkxX1NJTU8sIDgyLAorCQkic3BpMV9zaW1vIiwgTlVMTCwgTlVMTCwgImdwaW9fODIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1BJMV9TT01JLCA4MywKKwkJInNwaTFfc29taSIsIE5VTEwsIE5VTEwsICJncGlvXzgzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNQSTJfQ0xLLCA4OCwKKwkJInNwaTJfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fODgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1BJMl9OQ1MwLCA5MSwKKwkJInNwaTJfbmNzMCIsICJncHQxMl9wd21fZXZ0IiwgTlVMTCwgImdwaW9fOTEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1BJMl9TSU1PLCA4OSwKKwkJInNwaTJfc2ltbyIsICJncHQxMF9wd21fZXZ0IiwgTlVMTCwgImdwaW9fODkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1BJMl9TT01JLCA5MCwKKwkJInNwaTJfc29taSIsICJncHQxMV9wd21fZXZ0IiwgTlVMTCwgImdwaW9fOTAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1NJMV9EQVRfUlgsIDYzLAorCQkic3NpMV9kYXRfcngiLCAiZWFjX21kX3NjbGsiLCBOVUxMLCAiZ3Bpb182MyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTU0kxX0RBVF9UWCwgNTksCisJCSJzc2kxX2RhdF90eCIsICJ1YXJ0MV90eCIsICJ1c2IxX3NlMCIsICJncGlvXzU5IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNTSTFfRkxBR19SWCwgNjQsCisJCSJzc2kxX2ZsYWdfcngiLCAiZWFjX21kX2RpbiIsIE5VTEwsICJncGlvXzY0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNTSTFfRkxBR19UWCwgMjUsCisJCSJzc2kxX2ZsYWdfdHgiLCAidWFydDFfcnRzIiwgInVzYjFfcmN2IiwgImdwaW9fMjUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1NJMV9SRFlfUlgsIDY1LAorCQkic3NpMV9yZHlfcngiLCAiZWFjX21kX2RvdXQiLCBOVUxMLCAiZ3Bpb182NSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTU0kxX1JEWV9UWCwgNjEsCisJCSJzc2kxX3JkeV90eCIsICJ1YXJ0MV9jdHMiLCAidXNiMV90eGVuIiwgImdwaW9fNjEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoU1NJMV9XQUtFLCA2NiwKKwkJInNzaTFfd2FrZSIsICJlYWNfbWRfZnMiLCBOVUxMLCAiZ3Bpb182NiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShTWVNfQ0xLT1VULCAxMjMsCisJCSJzeXNfY2xrb3V0IiwgTlVMTCwgTlVMTCwgImdwaW9fMTIzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNZU19DTEtSRVEsIDUyLAorCQkic3lzX2Nsa3JlcSIsIE5VTEwsIE5VTEwsICJncGlvXzUyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFNZU19OSVJRLCA2MCwKKwkJInN5c19uaXJxIiwgTlVMTCwgTlVMTCwgImdwaW9fNjAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVUFSVDFfQ1RTLCAzMiwKKwkJInVhcnQxX2N0cyIsIE5VTEwsICJkc3NfZGF0YTE4IiwgImdwaW9fMzIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVUFSVDFfUlRTLCA4LAorCQkidWFydDFfcnRzIiwgTlVMTCwgImRzc19kYXRhMTkiLCAiZ3Bpb184IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFVBUlQxX1JYLCAxMCwKKwkJInVhcnQxX3J4IiwgTlVMTCwgImRzc19kYXRhMjEiLCAiZ3Bpb18xMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVQVJUMV9UWCwgOSwKKwkJInVhcnQxX3R4IiwgTlVMTCwgImRzc19kYXRhMjAiLCAiZ3Bpb185IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFVBUlQyX0NUUywgNjcsCisJCSJ1YXJ0Ml9jdHMiLCAidXNiMV9yY3YiLCAiZ3B0OV9wd21fZXZ0IiwgImdwaW9fNjciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVUFSVDJfUlRTLCA2OCwKKwkJInVhcnQyX3J0cyIsICJ1c2IxX3R4ZW4iLCAiZ3B0MTBfcHdtX2V2dCIsICJncGlvXzY4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFVBUlQyX1JYLCA3MCwKKwkJInVhcnQyX3J4IiwgInVzYjFfZGF0IiwgImdwdDEyX3B3bV9ldnQiLCAiZ3Bpb183MCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVQVJUMl9UWCwgNjksCisJCSJ1YXJ0Ml90eCIsICJ1c2IxX3NlMCIsICJncHQxMV9wd21fZXZ0IiwgImdwaW9fNjkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVUFSVDNfQ1RTX1JDVFgsIDEwMiwKKwkJInVhcnQzX2N0c19yY3R4IiwgInVhcnQzX3J4X2lycngiLCBOVUxMLCAiZ3Bpb18xMDIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVUFSVDNfUlRTX1NELCAxMDMsCisJCSJ1YXJ0M19ydHNfc2QiLCAidWFydDNfdHhfaXJ0eCIsIE5VTEwsICJncGlvXzEwMyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVQVJUM19SWF9JUlJYLCAxMDUsCisJCSJ1YXJ0M19yeF9pcnJ4IiwgTlVMTCwgTlVMTCwgImdwaW9fMTA1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFVBUlQzX1RYX0lSVFgsIDEwNCwKKwkJInVhcnQzX3R4X2lydHgiLCAidWFydDNfY3RzX3JjdHgiLCBOVUxMLCAiZ3Bpb18xMDQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVVNCMF9EQVQsIDExMiwKKwkJInVzYjBfZGF0IiwgInVhcnQzX3J4X2lycngiLCAidWFydDJfcngiLCAiZ3Bpb18xMTIiLAorCQkidWFydDJfdHgiLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVVNCMF9QVUVOLCAxMDYsCisJCSJ1c2IwX3B1ZW4iLCAibWNic3AyX2R4IiwgTlVMTCwgImdwaW9fMTA2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFVTQjBfUkNWLCAxMDksCisJCSJ1c2IwX3JjdiIsICJtY2JzcDJfZnN4IiwgTlVMTCwgImdwaW9fMTA5IiwKKwkJInVhcnQyX2N0cyIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVU0IwX1NFMCwgMTExLAorCQkidXNiMF9zZTAiLCAidWFydDNfdHhfaXJ0eCIsICJ1YXJ0Ml90eCIsICJncGlvXzExMSIsCisJCSJ1YXJ0Ml9yeCIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVU0IwX1RYRU4sIDExMCwKKwkJInVzYjBfdHhlbiIsICJ1YXJ0M19jdHNfcmN0eCIsICJ1YXJ0Ml9jdHMiLCAiZ3Bpb18xMTAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVVNCMF9WTSwgMTA4LAorCQkidXNiMF92bSIsICJtY2JzcDJfY2xreCIsIE5VTEwsICJncGlvXzEwOCIsCisJCSJ1YXJ0Ml9yeCIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShVU0IwX1ZQLCAxMDcsCisJCSJ1c2IwX3ZwIiwgIm1jYnNwMl9kciIsIE5VTEwsICJncGlvXzEwNyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShWTFlOUV9DTEssIDEzLAorCQkidmx5bnFfY2xrIiwgInVzYjJfc2UwIiwgInN5c19uZG1hcmVxMCIsICJncGlvXzEzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFZMWU5RX05MQSwgNTgsCisJCSJ2bHlucV9ubGEiLCBOVUxMLCBOVUxMLCAiZ3Bpb181OCIsCisJCSJjYW1fZDYiLCBOVUxMLCBOVUxMLCBOVUxMKSwKKwlfT01BUDI0MjBfTVVYRU5UUlkoVkxZTlFfUlgwLCAxNSwKKwkJInZseW5xX3J4MCIsICJ1c2IyX3RsbHNlMCIsIE5VTEwsICJncGlvXzE1IiwKKwkJImNhbV9kNyIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShWTFlOUV9SWDEsIDE0LAorCQkidmx5bnFfcngxIiwgInVzYjJfcmN2IiwgInN5c19uZG1hcmVxMSIsICJncGlvXzE0IiwKKwkJImNhbV9kOCIsIE5VTEwsIE5VTEwsIE5VTEwpLAorCV9PTUFQMjQyMF9NVVhFTlRSWShWTFlOUV9UWDAsIDE3LAorCQkidmx5bnFfdHgwIiwgInVzYjJfdHhlbiIsIE5VTEwsICJncGlvXzE3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCksCisJX09NQVAyNDIwX01VWEVOVFJZKFZMWU5RX1RYMSwgMTYsCisJCSJ2bHlucV90eDEiLCAidXNiMl9kYXQiLCAic3lzX2Nsa291dDIiLCAiZ3Bpb18xNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworCisvKgorICogQmFsbHMgZm9yIDQ0Ny1waW4gUE9QIHBhY2thZ2UKKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RydWN0IG9tYXBfYmFsbCBfX2luaXRkYXRhIG9tYXAyNDIwX3BvcF9iYWxsW10gPSB7CisJX09NQVAyNDIwX0JBTExFTlRSWShDQU1fRDAsICJ5NCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoQ0FNX0QxLCAieTMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKENBTV9EMiwgInU3IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShDQU1fRDMsICJhYjMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKENBTV9ENCwgInYyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShDQU1fRDUsICJhZDMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKENBTV9ENiwgImFhNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoQ0FNX0Q3LCAiYWI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShDQU1fRDgsICJhYzYiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKENBTV9EOSwgImFjNyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoQ0FNX0hTLCAidjQiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKENBTV9MQ0xLLCAiYWQ2IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShDQU1fVlMsICJwNyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoQ0FNX1hDTEssICJ3NCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0FDQklBUywgImFlOCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0RBVEExMCwgImFjMTIiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKERTU19EQVRBMTEsICJhZTExIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShEU1NfREFUQTEyLCAiYWUxMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0RBVEExMywgImFkMTMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKERTU19EQVRBMTQsICJhYzEzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShEU1NfREFUQTE1LCAieTEyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShEU1NfREFUQTE2LCAiYWQxNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0RBVEExNywgInkxMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0RBVEE4LCAiYWQxMSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRFNTX0RBVEE5LCAiYWQxMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRUFDX0FDX0RJTiwgImFkMTkiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEVBQ19BQ19ET1VULCAiYWYyMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRUFDX0FDX0ZTLCAiYWQxNiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRUFDX0FDX01DTEssICJ5MTciLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEVBQ19BQ19SU1QsICJhZTIyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShFQUNfQUNfU0NMSywgImFjMTgiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEVBQ19CVF9ESU4sICJ1OCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoRUFDX0JUX0RPVVQsICJhZDUiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEVBQ19CVF9GUywgInc3IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShFQUNfQlRfU0NMSywgImFkNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BJT18xMTksICJhZjYiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQSU9fMTIwLCAiYWY0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUElPXzEyMSwgImFlNiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BJT18xMjIsICJ3MyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BJT18xMjQsICJ5MTkiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQSU9fMTI1LCAiYWUyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BJT18zNiwgInkxOCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BJT182LCAiZDYiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQSU9fNjIsICJhZDE4IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUE1DX0ExLCAibTgiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfQTEwLCAiZDUiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfQTIsICJ3OSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19BMywgImFmMTAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfQTQsICJ3OCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19BNSwgImFlMTYiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfQTYsICJhZjkiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfQTcsICJlNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19BOCwgImo3IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUE1DX0E5LCAiYWUxOCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19DTEssICJwMSIsICJsMSIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTAsICJ0MSIsICJuMSIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTEsICJ1MiIsICJwMiIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTIsICJ1MSIsICJwMSIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTMsICJwMiIsICJtMSIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTQsICJoMiIsICJqMiIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EMTUsICJoMSIsICJrMiIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19EOCwgInYxIiwgInIxIiksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUE1DX0Q5LCAieTEiLCAidDEiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfTkJFMCwgImFmMTIiLCAiYWExMCIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19OQkUxLCAidTMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfTkNTMSwgImFmMTQiLCAidzEiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfTkNTMiwgImc0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUE1DX05DUzMsICJ0OCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19OQ1M0LCAiaDgiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfTkNTNSwgImszIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShHUE1DX05DUzYsICJtNyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19OQ1M3LCAicDMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfTldQLCAiYWUxNSIsICJ5NSIpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19XQUlUMSwgImFlMjAiLCAieTgiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKEdQTUNfV0FJVDIsICJuMiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoR1BNQ19XQUlUMywgInQ0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShIRFFfU0lPLCAidDIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShJMkMyX1NDTCwgImwyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShJMkMyX1NEQSwgImsxOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoSlRBR19FTVUwLCAibjI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShKVEFHX0VNVTEsICJhYzIyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNQ0JTUDFfQ0xLUiwgInkyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTUNCU1AxX0NMS1gsICJ0MTkiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKE1DQlNQMV9EUiwgInUyMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTUNCU1AxX0RYLCAicjI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNQ0JTUDFfRlNSLCAicjIwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNQ0JTUDFfRlNYLCAicjIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNQ0JTUDJfQ0xLWCwgInQyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTUNCU1AyX0RSLCAicDIwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNQ0JTUF9DTEtTLCAicDIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNTUNfQ0xLSSwgImMyMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTU1DX0NMS08sICJoMjMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKE1NQ19DTUQsICJqMjMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKE1NQ19DTURfRElSLCAiajI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNTUNfREFUMCwgImgxNyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTU1DX0RBVF9ESVIwLCAiZjIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNTUNfREFUMSwgImcxOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTU1DX0RBVF9ESVIxLCAiZDIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNTUNfREFUMiwgImgyMCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTU1DX0RBVF9ESVIyLCAiZzIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShNTUNfREFUMywgImQyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoTU1DX0RBVF9ESVIzLCAiZTIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTRFJDX0ExMiwgIncyNiIsICJyMjEiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNEUkNfQTEzLCAidzI1IiwgImFhMTUiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNEUkNfQTE0LCAiYWEyNiIsICJ5MTIiKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNEUkNfQ0tFMSwgImFlMjUiLCAieTEzIiksCisJX09NQVAyNDIwX0JBTExFTlRSWShTRFJDX05DUzEsICJ5MjUiLCAidDIwIiksCisJX09NQVAyNDIwX0JBTExFTlRSWShTUEkxX0NMSywgInkyMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1BJMV9OQ1MwLCAidzI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTUEkxX05DUzEsICJ3MjMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNQSTFfTkNTMiwgInYyMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1BJMV9OQ1MzLCAidTIwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTUEkxX1NJTU8sICJoMTAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNQSTFfU09NSSwgInYxOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1BJMl9DTEssICJ2MjQiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNQSTJfTkNTMCwgImFhMjQiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNQSTJfU0lNTywgInUyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1BJMl9TT01JLCAidjI1IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTU0kxX0RBVF9SWCwgIncxNSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1NJMV9EQVRfVFgsICJ3MTMiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNTSTFfRkxBR19SWCwgImFmMTEiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNTSTFfRkxBR19UWCwgImFjMTUiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNTSTFfUkRZX1JYLCAiYWMxNiIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1NJMV9SRFlfVFgsICJhZjE1IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTU0kxX1dBS0UsICJhZDE1IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShTWVNfQ0xLT1VULCAiYWUxOSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoU1lTX0NMS1JFUSwgImFkMjAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFNZU19OSVJRLCAieTIwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUMV9DVFMsICJnMjAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFVBUlQxX1JUUywgImsyMCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVUFSVDFfUlgsICJ0MjAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFVBUlQxX1RYLCAiaDEyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUMl9DVFMsICJhYzI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUMl9SVFMsICJ3MjAiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFVBUlQyX1JYLCAiYWQyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVUFSVDJfVFgsICJhYjI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUM19DVFNfUkNUWCwgImsyNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVUFSVDNfUlRTX1NELCAibTIwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUM19SWF9JUlJYLCAiaDI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVQVJUM19UWF9JUlRYLCAiZzI0IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVU0IwX0RBVCwgImoyNSIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVVNCMF9QVUVOLCAibDIzIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShVU0IwX1JDViwgImsyMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVVNCMF9TRTAsICJsMjQiLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFVTQjBfVFhFTiwgIm0yNCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVVNCMF9WTSwgIm4yMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVVNCMF9WUCwgIm0yMyIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVkxZTlFfQ0xLLCAidzEyIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShWTFlOUV9OTEEsICJhZTEwIiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShWTFlOUV9SWDAsICJhZDciLCBOVUxMKSwKKwlfT01BUDI0MjBfQkFMTEVOVFJZKFZMWU5RX1JYMSwgIncxMCIsIE5VTEwpLAorCV9PTUFQMjQyMF9CQUxMRU5UUlkoVkxZTlFfVFgwLCAieTE1IiwgTlVMTCksCisJX09NQVAyNDIwX0JBTExFTlRSWShWTFlOUV9UWDEsICJ3MTQiLCBOVUxMKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKyNlbHNlCisjZGVmaW5lIG9tYXAyNDIwX3BvcF9iYWxsCSBOVUxMCisjZW5kaWYKKworaW50IF9faW5pdCBvbWFwMjQyMF9tdXhfaW5pdChzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX3N1YnNldCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHMgPSBOVUxMOworCisJc3dpdGNoIChmbGFncyAmIE9NQVBfUEFDS0FHRV9NQVNLKSB7CisJY2FzZSBPTUFQX1BBQ0tBR0VfWkFDOgorCQlwYWNrYWdlX2JhbGxzID0gb21hcDI0MjBfcG9wX2JhbGw7CisJCWJyZWFrOworCWNhc2UgT01BUF9QQUNLQUdFX1pBRjoKKwkJLyogUkVWSVNJVDogUGxlYXNlIGFkZCBkYXRhICovCisJZGVmYXVsdDoKKwkJcHJfd2FybmluZygibXV4OiBObyBiYWxsIGRhdGEgYXZhaWxhYmxlIGZvciBvbWFwMjQyMCBwYWNrYWdlXG4iKTsKKwl9CisKKwlyZXR1cm4gb21hcF9tdXhfaW5pdChPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTVVYX1BCQVNFLAorCQkJICAgICBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTVVYX1NJWkUsCisJCQkJb21hcDI0MjBfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3N1YnNldCwKKwkJCQlwYWNrYWdlX2JhbGxzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQyMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1NTVhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQyMC5oCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01VWF9QQkFTRQkJCTB4NDgwMDAwMzBMVQorCisjZGVmaW5lIE9NQVAyNDIwX01VWChtb2RlMCwgbXV4X3ZhbHVlKQkJCQkJXAorewkJCQkJCQkJCVwKKwkucmVnX29mZnNldAk9IChPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfIyNtb2RlMCMjX09GRlNFVCksCVwKKwkudmFsdWUJCT0gKG11eF92YWx1ZSksCQkJCQlcCit9CisKKy8qCisgKiBPTUFQMjQyMCBDT05UUk9MX1BBRENPTkYqIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHBpbi1tdXhpbmcKKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSB0aGUgVFJNLiAgQWRkIDB4NDgwMDAwMzAgdG8gdGhlc2UgdmFsdWVzIHRvIGdldCB0aGUKKyAqIGFic29sdXRlIGFkZHJlc3Nlcy4gIFRoZSBuYW1lIGluIHRoZSBtYWNybyBpcyB0aGUgbW9kZS0wIG5hbWUgb2YKKyAqIHRoZSBwaW4uICBOT1RFOiBUaGVzZSByZWdpc3RlcnMgYXJlIDgtYml0cyB3aWRlLgorICovCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExNF9PRkZTRVQJCQkweDAwMAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19BMTNfT0ZGU0VUCQkJMHgwMDEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfQTEyX09GRlNFVAkJCTB4MDAyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0JBMV9PRkZTRVQJCQkweDAwMworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19CQTBfT0ZGU0VUCQkJMHgwMDQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfQTExX09GRlNFVAkJCTB4MDA1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExMF9PRkZTRVQJCQkweDAwNgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19BOV9PRkZTRVQJCQkJMHgwMDcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfQThfT0ZGU0VUCQkJCTB4MDA4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E3X09GRlNFVAkJCQkweDAwOQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19BNl9PRkZTRVQJCQkJMHgwMGEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfQTVfT0ZGU0VUCQkJCTB4MDBiCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E0X09GRlNFVAkJCQkweDAwYworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19BM19PRkZTRVQJCQkJMHgwMGQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfQTJfT0ZGU0VUCQkJCTB4MDBlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExX09GRlNFVAkJCQkweDAwZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19BMF9PRkZTRVQJCQkJMHgwMTAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDMxX09GRlNFVAkJCTB4MDIxCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzMF9PRkZTRVQJCQkweDAyMgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMjlfT0ZGU0VUCQkJMHgwMjMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDI4X09GRlNFVAkJCTB4MDI0CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyN19PRkZTRVQJCQkweDAyNQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMjZfT0ZGU0VUCQkJMHgwMjYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDI1X09GRlNFVAkJCTB4MDI3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyNF9PRkZTRVQJCQkweDAyOAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMjNfT0ZGU0VUCQkJMHgwMjkKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDIyX09GRlNFVAkJCTB4MDJhCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyMV9PRkZTRVQJCQkweDAyYgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMjBfT0ZGU0VUCQkJMHgwMmMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDE5X09GRlNFVAkJCTB4MDJkCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxOF9PRkZTRVQJCQkweDAyZQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMTdfT0ZGU0VUCQkJMHgwMmYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDE2X09GRlNFVAkJCTB4MDMwCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxNV9PRkZTRVQJCQkweDAzMQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMTRfT0ZGU0VUCQkJMHgwMzIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDEzX09GRlNFVAkJCTB4MDMzCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxMl9PRkZTRVQJCQkweDAzNAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMTFfT0ZGU0VUCQkJMHgwMzUKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDEwX09GRlNFVAkJCTB4MDM2CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q5X09GRlNFVAkJCQkweDAzNworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EOF9PRkZTRVQJCQkJMHgwMzgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDdfT0ZGU0VUCQkJCTB4MDM5CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q2X09GRlNFVAkJCQkweDAzYQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19ENV9PRkZTRVQJCQkJMHgwM2IKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDRfT0ZGU0VUCQkJCTB4MDNjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzX09GRlNFVAkJCQkweDAzZAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EMl9PRkZTRVQJCQkJMHgwM2UKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRDFfT0ZGU0VUCQkJCTB4MDNmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QwX09GRlNFVAkJCQkweDA0MAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19BMTBfT0ZGU0VUCQkJMHgwNDEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfQTlfT0ZGU0VUCQkJCTB4MDQyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E4X09GRlNFVAkJCQkweDA0MworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19BN19PRkZTRVQJCQkJMHgwNDQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfQTZfT0ZGU0VUCQkJCTB4MDQ1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E1X09GRlNFVAkJCQkweDA0NgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19BNF9PRkZTRVQJCQkJMHgwNDcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfQTNfT0ZGU0VUCQkJCTB4MDQ4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0EyX09GRlNFVAkJCQkweDA0OQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19BMV9PRkZTRVQJCQkJMHgwNGEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDE1X09GRlNFVAkJCTB4MDRiCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxNF9PRkZTRVQJCQkweDA0YworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19EMTNfT0ZGU0VUCQkJMHgwNGQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDEyX09GRlNFVAkJCTB4MDRlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxMV9PRkZTRVQJCQkweDA0ZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19EMTBfT0ZGU0VUCQkJMHgwNTAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDlfT0ZGU0VUCQkJCTB4MDUxCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q4X09GRlNFVAkJCQkweDA1MgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19EN19PRkZTRVQJCQkJMHgwNTMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDZfT0ZGU0VUCQkJCTB4MDU0CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q1X09GRlNFVAkJCQkweDA1NQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19ENF9PRkZTRVQJCQkJMHgwNTYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDNfT0ZGU0VUCQkJCTB4MDU3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QyX09GRlNFVAkJCQkweDA1OAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19EMV9PRkZTRVQJCQkJMHgwNTkKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfRDBfT0ZGU0VUCQkJCTB4MDVhCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0NMS19PRkZTRVQJCQkweDA1YgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MwX09GRlNFVAkJCTB4MDVjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzFfT0ZGU0VUCQkJMHgwNWQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTMl9PRkZTRVQJCQkweDA1ZQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MzX09GRlNFVAkJCTB4MDVmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzRfT0ZGU0VUCQkJMHgwNjAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNV9PRkZTRVQJCQkweDA2MQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M2X09GRlNFVAkJCTB4MDYyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzdfT0ZGU0VUCQkJMHgwNjMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkFMRV9BTEVfT0ZGU0VUCQkJMHgwNjQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfTk9FX09GRlNFVAkJCTB4MDY1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05XRV9PRkZTRVQJCQkweDA2NgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQkUwX09GRlNFVAkJCTB4MDY3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05CRTFfT0ZGU0VUCQkJMHgwNjgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQTUNfTldQX09GRlNFVAkJCTB4MDY5CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQwX09GRlNFVAkJCTB4MDZhCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQxX09GRlNFVAkJCTB4MDZiCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQyX09GRlNFVAkJCTB4MDZjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQzX09GRlNFVAkJCTB4MDZkCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0NMS19PRkZTRVQJCQkweDA2ZQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19OQ0xLX09GRlNFVAkJCTB4MDZmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX05DUzBfT0ZGU0VUCQkJMHgwNzAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfTkNTMV9PRkZTRVQJCQkweDA3MQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19DS0UwX09GRlNFVAkJCTB4MDcyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0NLRTFfT0ZGU0VUCQkJMHgwNzMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfTlJBU19PRkZTRVQJCQkweDA3NAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19OQ0FTX09GRlNFVAkJCTB4MDc1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX05XRV9PRkZTRVQJCQkweDA3NgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19ETTBfT0ZGU0VUCQkJMHgwNzcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0xX09GRlNFVAkJCTB4MDc4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RNMl9PRkZTRVQJCQkweDA3OQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19ETTNfT0ZGU0VUCQkJMHgwN2EKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMF9PRkZTRVQJCQkweDA3ZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EUVMxX09GRlNFVAkJCTB4MDgwCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RRUzJfT0ZGU0VUCQkJMHgwODEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTM19PRkZTRVQJCQkweDA4MgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEEwX09GRlNFVAkJCTB4MDgzCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTFfT0ZGU0VUCQkJMHgwODQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMl9PRkZTRVQJCQkweDA4NQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEEzX09GRlNFVAkJCTB4MDg2CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTRfT0ZGU0VUCQkJMHgwODcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBNV9PRkZTRVQJCQkweDA4OAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE2X09GRlNFVAkJCTB4MDg5CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTdfT0ZGU0VUCQkJMHgwOGEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBOF9PRkZTRVQJCQkweDA4YgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE5X09GRlNFVAkJCTB4MDhjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEwX09GRlNFVAkJCTB4MDhkCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTExX09GRlNFVAkJCTB4MDhlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEyX09GRlNFVAkJCTB4MDhmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTEzX09GRlNFVAkJCTB4MDkwCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE0X09GRlNFVAkJCTB4MDkxCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE1X09GRlNFVAkJCTB4MDkyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE2X09GRlNFVAkJCTB4MDkzCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE3X09GRlNFVAkJCTB4MDk0CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VQVJUMV9DVFNfT0ZGU0VUCQkJMHgwOTUKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VBUlQxX1JUU19PRkZTRVQJCQkweDA5NgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVUFSVDFfVFhfT0ZGU0VUCQkJMHgwOTcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYX09GRlNFVAkJCTB4MDk4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDJfRFJfT0ZGU0VUCQkJMHgwOTkKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01DQlNQMl9DTEtYX09GRlNFVAkJCTB4MDlhCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfUENMX09GRlNFVAkJCQkweDA5YgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DX09GRlNFVAkJCTB4MDljCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9EU1NfSFNZTkNfT0ZGU0VUCQkJMHgwOWQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0RTU19BQ0JJQVNfT0ZGU0VUCQkJMHgwOWUKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EOV9PRkZTRVQJCQkJMHgwOWYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EOF9PRkZTRVQJCQkJMHgwYTAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EN19PRkZTRVQJCQkJMHgwYTEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9ENl9PRkZTRVQJCQkJMHgwYTIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9ENV9PRkZTRVQJCQkJMHgwYTMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9ENF9PRkZTRVQJCQkJMHgwYTQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EM19PRkZTRVQJCQkJMHgwYTUKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EMl9PRkZTRVQJCQkJMHgwYTYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EMV9PRkZTRVQJCQkJMHgwYTcKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9EMF9PRkZTRVQJCQkJMHgwYTgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9IU19PRkZTRVQJCQkJMHgwYTkKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9WU19PRkZTRVQJCQkJMHgwYWEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0NBTV9MQ0xLX09GRlNFVAkJCTB4MGFiCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9DQU1fWENMS19PRkZTRVQJCQkweDBhYworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1NJMV9EQVRfVFhfT0ZGU0VUCQkJMHgwYWQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NTSTFfRkxBR19UWF9PRkZTRVQJCQkweDBhZQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1NJMV9SRFlfVFhfT0ZGU0VUCQkJMHgwYWYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQSU9fNjJfT0ZGU0VUCQkJCTB4MGIwCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TU0kxX0RBVF9SWF9PRkZTRVQJCQkweDBiMQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1NJMV9GTEFHX1JYX09GRlNFVAkJCTB4MGIyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TU0kxX1JEWV9SWF9PRkZTRVQJCQkweDBiMworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1NJMV9XQUtFX09GRlNFVAkJCTB4MGI0CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9WTFlOUV9DTEtfT0ZGU0VUCQkJMHgwYjUKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1ZMWU5RX1JYMV9PRkZTRVQJCQkweDBiNgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVkxZTlFfUlgwX09GRlNFVAkJCTB4MGI3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9WTFlOUV9UWDFfT0ZGU0VUCQkJMHgwYjgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1ZMWU5RX1RYMF9PRkZTRVQJCQkweDBiOQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVkxZTlFfTkxBX09GRlNFVAkJCTB4MGJhCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VQVJUMl9DVFNfT0ZGU0VUCQkJMHgwYmIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VBUlQyX1JUU19PRkZTRVQJCQkweDBiYworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVUFSVDJfVFhfT0ZGU0VUCQkJMHgwYmQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VBUlQyX1JYX09GRlNFVAkJCTB4MGJlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQlRfU0NMS19PRkZTRVQJCQkweDBiZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRUFDX0JUX0ZTX09GRlNFVAkJCTB4MGMwCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQlRfRElOX09GRlNFVAkJCTB4MGMxCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQlRfRE9VVF9PRkZTRVQJCQkweDBjMgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTU1DX0NMS09fT0ZGU0VUCQkJMHgwYzMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01NQ19DTURfT0ZGU0VUCQkJCTB4MGM0CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NTUNfREFUMF9PRkZTRVQJCQkweDBjNQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTU1DX0RBVDFfT0ZGU0VUCQkJMHgwYzYKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01NQ19EQVQyX09GRlNFVAkJCTB4MGM3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NTUNfREFUM19PRkZTRVQJCQkweDBjOAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTU1DX0RBVF9ESVIwX09GRlNFVAkJCTB4MGM5CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NTUNfREFUX0RJUjFfT0ZGU0VUCQkJMHgwY2EKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01NQ19EQVRfRElSMl9PRkZTRVQJCQkweDBjYgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTU1DX0RBVF9ESVIzX09GRlNFVAkJCTB4MGNjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NTUNfQ01EX0RJUl9PRkZTRVQJCQkweDBjZAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTU1DX0NMS0lfT0ZGU0VUCQkJMHgwY2UKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NQSTFfQ0xLX09GRlNFVAkJCTB4MGNmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TUEkxX1NJTU9fT0ZGU0VUCQkJMHgwZDAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NQSTFfU09NSV9PRkZTRVQJCQkweDBkMQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MwX09GRlNFVAkJCTB4MGQyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TUEkxX05DUzFfT0ZGU0VUCQkJMHgwZDMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMl9PRkZTRVQJCQkweDBkNAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MzX09GRlNFVAkJCTB4MGQ1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TUEkyX0NMS19PRkZTRVQJCQkweDBkNgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1BJMl9TSU1PX09GRlNFVAkJCTB4MGQ3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TUEkyX1NPTUlfT0ZGU0VUCQkJMHgwZDgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NQSTJfTkNTMF9PRkZTRVQJCQkweDBkOQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0NMS1JfT0ZGU0VUCQkJMHgwZGEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01DQlNQMV9GU1JfT0ZGU0VUCQkJMHgwZGIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWF9PRkZTRVQJCQkweDBkYworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0RSX09GRlNFVAkJCTB4MGRkCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUF9DTEtTX09GRlNFVAkJCTB4MGRlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRlNYX09GRlNFVAkJCTB4MGRmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfQ0xLWF9PRkZTRVQJCQkweDBlMAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfSTJDMV9TQ0xfT0ZGU0VUCQkJMHgwZTEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0kyQzFfU0RBX09GRlNFVAkJCTB4MGUyCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9JMkMyX1NDTF9PRkZTRVQJCQkweDBlMworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfSTJDMl9TREFfT0ZGU0VUCQkJMHgwZTQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0hEUV9TSU9fT0ZGU0VUCQkJCTB4MGU1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19DVFNfUkNUWF9PRkZTRVQJCQkweDBlNgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVUFSVDNfUlRTX1NEX09GRlNFVAkJCTB4MGU3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19UWF9JUlRYX09GRlNFVAkJCTB4MGU4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19SWF9JUlJYX09GRlNFVAkJCTB4MGU5CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9UVl9DVkJTX09GRlNFVAkJCQkweDBlYQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVFZfVlJFRl9PRkZTRVQJCQkJMHgwZWIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1RWX1JSRUZfT0ZGU0VUCQkJCTB4MGVjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VU0IwX1BVRU5fT0ZGU0VUCQkJMHgwZWQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VTQjBfVlBfT0ZGU0VUCQkJCTB4MGVlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9VU0IwX1ZNX09GRlNFVAkJCQkweDBlZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVVNCMF9SQ1ZfT0ZGU0VUCQkJMHgwZjAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VTQjBfVFhFTl9PRkZTRVQJCQkweDBmMQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfVVNCMF9TRTBfT0ZGU0VUCQkJMHgwZjIKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1VTQjBfREFUX09GRlNFVAkJCTB4MGYzCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQUNfU0NMS19PRkZTRVQJCQkweDBmNAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRUFDX0FDX0ZTX09GRlNFVAkJCTB4MGY1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQUNfRElOX09GRlNFVAkJCTB4MGY2CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9FQUNfQUNfRE9VVF9PRkZTRVQJCQkweDBmNworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfRUFDX0FDX01DTEtfT0ZGU0VUCQkJMHgwZjgKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0VBQ19BQ19SU1RfT0ZGU0VUCQkJMHgwZjkKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NZU19OUkVTUFdST05fT0ZGU0VUCQkJMHgwZmEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NZU19OUkVTV0FSTV9PRkZTRVQJCQkweDBmYgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1lTX05JUlFfT0ZGU0VUCQkJMHgwZmMKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX1NZU19OVl9PRkZTRVQJCQkJMHgwZmQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTE5X09GRlNFVAkJCTB4MGZlCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEyMF9PRkZTRVQJCQkweDBmZgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMjFfT0ZGU0VUCQkJMHgxMDAKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTIyX09GRlNFVAkJCTB4MTAxCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TWVNfMzJLX09GRlNFVAkJCQkweDEwMgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1lTX1hUQUxJTl9PRkZTRVQJCQkweDEwMworI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVRfT0ZGU0VUCQkJMHgxMDQKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0dQSU9fMzZfT0ZGU0VUCQkJCTB4MTA1CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TWVNfQ0xLUkVRX09GRlNFVAkJCTB4MTA2CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9TWVNfQ0xLT1VUX09GRlNFVAkJCTB4MTA3CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUElPXzZfT0ZGU0VUCQkJCTB4MTA4CisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEyNF9PRkZTRVQJCQkweDEwOQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMjVfT0ZGU0VUCQkJMHgxMGEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0pUQUdfRU1VMV9PRkZTRVQJCQkweDEwYgorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfSlRBR19FTVUwX09GRlNFVAkJCTB4MTBjCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9KVEFHX05UUlNUX09GRlNFVAkJCTB4MTBkCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9KVEFHX1RDS19PRkZTRVQJCQkweDEwZQorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfSlRBR19SVENLX09GRlNFVAkJCTB4MTBmCisjZGVmaW5lIE9NQVAyNDIwX0NPTlRST0xfUEFEQ09ORl9KVEFHX1RNU19PRkZTRVQJCQkweDExMAorI2RlZmluZSBPTUFQMjQyMF9DT05UUk9MX1BBRENPTkZfSlRBR19URElfT0ZGU0VUCQkJMHgxMTEKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0pUQUdfVERPX09GRlNFVAkJCTB4MTEyCisKKyNkZWZpbmUgT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX01VWF9TSVpFCQkJXAorCQkoT01BUDI0MjBfQ09OVFJPTF9QQURDT05GX0pUQUdfVERPX09GRlNFVCArIDB4MSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQzMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjYWFhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4MjQzMC5jCkBAIC0wLDAgKzEsNzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlICJtdXguaCIKKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisjZGVmaW5lIF9PTUFQMjQzMF9NVVhFTlRSWShNMCwgZywgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03KQkJXAorewkJCQkJCQkJCVwKKwkucmVnX29mZnNldAk9IChPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfIyNNMCMjX09GRlNFVCksCVwKKwkuZ3BpbwkJPSAoZyksCQkJCQkJXAorCS5tdXhuYW1lcwk9IHsgbTAsIG0xLCBtMiwgbTMsIG00LCBtNSwgbTYsIG03IH0sCQlcCit9CisKKyNlbHNlCisKKyNkZWZpbmUgX09NQVAyNDMwX01VWEVOVFJZKE0wLCBnLCBtMCwgbTEsIG0yLCBtMywgbTQsIG01LCBtNiwgbTcpCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl8jI00wIyNfT0ZGU0VUKSwJXAorCS5ncGlvCQk9IChnKSwJCQkJCQlcCit9CisKKyNlbmRpZgorCisjZGVmaW5lIF9PTUFQMjQzMF9CQUxMRU5UUlkoTTAsIGJiLCBidCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLnJlZ19vZmZzZXQJPSAoT01BUDI0MzBfQ09OVFJPTF9QQURDT05GXyMjTTAjI19PRkZTRVQpLAlcCisJLmJhbGxzCQk9IHsgYmIsIGJ0IH0sCQkJCQlcCit9CisKKy8qCisgKiBTdXBlcnNldCBvZiBhbGwgbXV4IG1vZGVzIGZvciBvbWFwMjQzMAorICovCitzdGF0aWMgc3RydWN0IG9tYXBfbXV4IF9faW5pdGRhdGEgb21hcDI0MzBfbXV4bW9kZXNbXSA9IHsKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX0QwLCAxMzMsCisJCSJjYW1fZDAiLCAiaHdfZGJnMCIsICJzdGlfZG91dCIsICJncGlvXzEzMyIsCisJCU5VTEwsIE5VTEwsICJldGtfZDIiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKENBTV9EMTAsIDE0NiwKKwkJImNhbV9kMTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xNDYiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxMiIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX0QxMSwgMTQ1LAorCQkiY2FtX2QxMSIsIE5VTEwsIE5VTEwsICJncGlvXzE0NSIsCisJCU5VTEwsIE5VTEwsICJldGtfZDEzIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShDQU1fRDEsIDEzMiwKKwkJImNhbV9kMSIsICJod19kYmcxIiwgInN0aV9kaW4iLCAiZ3Bpb18xMzIiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QzIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShDQU1fRDIsIDEyOSwKKwkJImNhbV9kMiIsICJod19kYmcyIiwgIm1jYnNwMV9jbGt4IiwgImdwaW9fMTI5IiwKKwkJTlVMTCwgTlVMTCwgImV0a19kNCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX0QzLCAxMjgsCisJCSJjYW1fZDMiLCAiaHdfZGJnMyIsICJtY2JzcDFfZHIiLCAiZ3Bpb18xMjgiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2Q1IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShDQU1fRDQsIDE0MywKKwkJImNhbV9kNCIsICJod19kYmc0IiwgIm1jYnNwMV9mc3IiLCAiZ3Bpb18xNDMiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2Q2IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShDQU1fRDUsIDExMiwKKwkJImNhbV9kNSIsICJod19kYmc1IiwgIm1jYnNwMV9jbGtyIiwgImdwaW9fMTEyIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kNyIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX0Q2LCAxMzcsCisJCSJjYW1fZDYiLCAiaHdfZGJnNiIsIE5VTEwsICJncGlvXzEzNyIsCisJCU5VTEwsIE5VTEwsICJldGtfZDgiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKENBTV9ENywgMTM2LAorCQkiY2FtX2Q3IiwgImh3X2RiZzciLCBOVUxMLCAiZ3Bpb18xMzYiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2Q5IiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShDQU1fRDgsIDEzNSwKKwkJImNhbV9kOCIsICJod19kYmc4IiwgTlVMTCwgImdwaW9fMTM1IiwKKwkJTlVMTCwgTlVMTCwgImV0a19kMTAiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKENBTV9EOSwgMTM0LAorCQkiY2FtX2Q5IiwgImh3X2RiZzkiLCBOVUxMLCAiZ3Bpb18xMzQiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxMSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX0hTLCAxMSwKKwkJImNhbV9ocyIsICJod19kYmcxMCIsICJtY2JzcDFfZHgiLCAiZ3Bpb18xMSIsCisJCU5VTEwsIE5VTEwsICJldGtfZDEiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKENBTV9MQ0xLLCAwLAorCQkiY2FtX2xjbGsiLCBOVUxMLCAibWNic3BfY2xrcyIsIE5VTEwsCisJCU5VTEwsIE5VTEwsICJldGtfYzEiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKENBTV9WUywgMTIsCisJCSJjYW1fdnMiLCAiaHdfZGJnMTEiLCAibWNic3AxX2ZzeCIsICJncGlvXzEyIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kMCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoQ0FNX1hDTEssIDAsCisJCSJjYW1feGNsayIsIE5VTEwsICJzdGlfY2xrIiwgTlVMTCwKKwkJTlVMTCwgTlVMTCwgImV0a19jMiIsIE5VTEwpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfQUNCSUFTLCA0OCwKKwkJImRzc19hY2JpYXMiLCBOVUxMLCAibWNic3AyX2ZzeCIsICJncGlvXzQ4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTAsIDQwLAorCQkiZHNzX2RhdGEwIiwgInVhcnQxX2N0cyIsIE5VTEwsICJncGlvXzQwIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTEwLCAxMjgsCisJCSJkc3NfZGF0YTEwIiwgInNkaV9kYXRhMW4iLCBOVUxMLCAiZ3Bpb18xMjgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19EQVRBMTEsIDEyOSwKKwkJImRzc19kYXRhMTEiLCAic2RpX2RhdGExcCIsIE5VTEwsICJncGlvXzEyOSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEExMiwgMTMwLAorCQkiZHNzX2RhdGExMiIsICJzZGlfZGF0YTJuIiwgTlVMTCwgImdwaW9fMTMwIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTEzLCAxMzEsCisJCSJkc3NfZGF0YTEzIiwgInNkaV9kYXRhMnAiLCBOVUxMLCAiZ3Bpb18xMzEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19EQVRBMTQsIDEzMiwKKwkJImRzc19kYXRhMTQiLCAic2RpX2RhdGEzbiIsIE5VTEwsICJncGlvXzEzMiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEExNSwgMTMzLAorCQkiZHNzX2RhdGExNSIsICJzZGlfZGF0YTNwIiwgTlVMTCwgImdwaW9fMTMzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTE2LCA0NiwKKwkJImRzc19kYXRhMTYiLCBOVUxMLCBOVUxMLCAiZ3Bpb180NiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEExNywgNDcsCisJCSJkc3NfZGF0YTE3IiwgTlVMTCwgTlVMTCwgImdwaW9fNDciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19EQVRBMSwgNDEsCisJCSJkc3NfZGF0YTEiLCAidWFydDFfcnRzIiwgTlVMTCwgImdwaW9fNDEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19EQVRBMiwgNDIsCisJCSJkc3NfZGF0YTIiLCAidWFydDFfdHgiLCBOVUxMLCAiZ3Bpb180MiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEEzLCA0MywKKwkJImRzc19kYXRhMyIsICJ1YXJ0MV9yeCIsIE5VTEwsICJncGlvXzQzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTQsIDQ0LAorCQkiZHNzX2RhdGE0IiwgInVhcnQzX3J4X2lycngiLCBOVUxMLCAiZ3Bpb180NCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEE1LCA0NSwKKwkJImRzc19kYXRhNSIsICJ1YXJ0M190eF9pcnR4IiwgTlVMTCwgImdwaW9fNDUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19EQVRBNiwgMTQ0LAorCQkiZHNzX2RhdGE2IiwgTlVMTCwgTlVMTCwgImdwaW9fMTQ0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTcsIDE0NywKKwkJImRzc19kYXRhNyIsIE5VTEwsIE5VTEwsICJncGlvXzE0NyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoRFNTX0RBVEE4LCAzOCwKKwkJImRzc19kYXRhOCIsIE5VTEwsIE5VTEwsICJncGlvXzM4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShEU1NfREFUQTksIDM5LAorCQkiZHNzX2RhdGE5IiwgTlVMTCwgTlVMTCwgImdwaW9fMzkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKERTU19IU1lOQywgMTEwLAorCQkiZHNzX2hzeW5jIiwgTlVMTCwgTlVMTCwgImdwaW9fMTEwIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzExMywgMTEzLAorCQkiZ3Bpb18xMTMiLCAibWNic3AyX2Nsa3giLCBOVUxMLCAiZ3Bpb18xMTMiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTE0LCAxMTQsCisJCSJncGlvXzExNCIsICJtY2JzcDJfZnN4IiwgTlVMTCwgImdwaW9fMTE0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzExNSwgMTE1LAorCQkiZ3Bpb18xMTUiLCAibWNic3AyX2RyIiwgTlVMTCwgImdwaW9fMTE1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzExNiwgMTE2LAorCQkiZ3Bpb18xMTYiLCAibWNic3AyX2R4IiwgTlVMTCwgImdwaW9fMTE2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzEyOCwgMTI4LAorCQkiZ3Bpb18xMjgiLCBOVUxMLCAic3RpX2RpbiIsICJncGlvXzEyOCIsCisJCU5VTEwsICJzeXNfYm9vdDAiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTI5LCAxMjksCisJCSJncGlvXzEyOSIsIE5VTEwsICJzdGlfZG91dCIsICJncGlvXzEyOSIsCisJCU5VTEwsICJzeXNfYm9vdDEiLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTMwLCAxMzAsCisJCSJncGlvXzEzMCIsIE5VTEwsIE5VTEwsICJncGlvXzEzMCIsCisJCSJqdGFnX2VtdTIiLCAic3lzX2Jvb3QyIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzEzMSwgMTMxLAorCQkiZ3Bpb18xMzEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMzEiLAorCQkianRhZ19lbXUzIiwgInN5c19ib290MyIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BJT18xMzIsIDEzMiwKKwkJImdwaW9fMTMyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTMyIiwKKwkJTlVMTCwgInN5c19ib290NCIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BJT18xMzMsIDEzMywKKwkJImdwaW9fMTMzIiwgTlVMTCwgTlVMTCwgImdwaW9fMTMzIiwKKwkJTlVMTCwgInN5c19ib290NSIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BJT18xMzQsIDEzNCwKKwkJImdwaW9fMTM0IiwgImNjcF9kYXRuIiwgTlVMTCwgImdwaW9fMTM0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzEzNSwgMTM1LAorCQkiZ3Bpb18xMzUiLCAiY2NwX2RhdHAiLCBOVUxMLCAiZ3Bpb18xMzUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTM2LCAxMzYsCisJCSJncGlvXzEzNiIsICJjY3BfY2xrbiIsIE5VTEwsICJncGlvXzEzNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BJT18xMzcsIDEzNywKKwkJImdwaW9fMTM3IiwgImNjcF9jbGtwIiwgTlVMTCwgImdwaW9fMTM3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzEzOCwgMTM4LAorCQkiZ3Bpb18xMzgiLCAic3BpM19jbGsiLCBOVUxMLCAiZ3Bpb18xMzgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTM5LCAxMzksCisJCSJncGlvXzEzOSIsICJzcGkzX2NzMCIsICJzeXNfbmRtYXJlcTMiLCAiZ3Bpb18xMzkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTQwLCAxNDAsCisJCSJncGlvXzE0MCIsICJzcGkzX3NpbW8iLCAic3lzX25kbWFyZXE0IiwgImdwaW9fMTQwIiwKKwkJTlVMTCwgTlVMTCwgImV0a19kMTQiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTQxLCAxNDEsCisJCSJncGlvXzE0MSIsICJzcGkzX3NvbWkiLCBOVUxMLCAiZ3Bpb18xNDEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTQyLCAxNDIsCisJCSJncGlvXzE0MiIsICJzcGkzX2NzMSIsICJzeXNfbmRtYXJlcTIiLCAiZ3Bpb18xNDIiLAorCQlOVUxMLCBOVUxMLCAiZXRrX2QxNSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BJT18xNDgsIDE0OCwKKwkJImdwaW9fMTQ4IiwgIm1jYnNwNV9mc3giLCBOVUxMLCAiZ3Bpb18xNDgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTQ5LCAxNDksCisJCSJncGlvXzE0OSIsICJtY2JzcDVfZHgiLCBOVUxMLCAiZ3Bpb18xNDkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTUwLCAxNTAsCisJCSJncGlvXzE1MCIsICJtY2JzcDVfZHIiLCBOVUxMLCAiZ3Bpb18xNTAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTUxLCAxNTEsCisJCSJncGlvXzE1MSIsICJzeXNfcHdyb2siLCBOVUxMLCAiZ3Bpb18xNTEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fMTUyLCAxNTIsCisJCSJncGlvXzE1MiIsICJ1YXJ0MV9jdHMiLCAic3lzX25kbWFyZXExIiwgImdwaW9fMTUyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzE1MywgMTUzLAorCQkiZ3Bpb18xNTMiLCAidWFydDFfcngiLCAic3lzX25kbWFyZXEwIiwgImdwaW9fMTUzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzE1NCwgMTU0LAorCQkiZ3Bpb18xNTQiLCAibWNic3A1X2Nsa3giLCBOVUxMLCAiZ3Bpb18xNTQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fNjMsIDYzLAorCQkiZ3Bpb182MyIsICJtY2JzcDRfY2xreCIsIE5VTEwsICJncGlvXzYzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzc4LCA3OCwKKwkJImdwaW9fNzgiLCBOVUxMLCAidWFydDJfcnRzIiwgImdwaW9fNzgiLAorCQkidWFydDNfcnRzX3NkIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzc5LCA3OSwKKwkJImdwaW9fNzkiLCAic2VjdXJlX2luZGljYXRvciIsICJ1YXJ0Ml90eCIsICJncGlvXzc5IiwKKwkJInVhcnQzX3R4X2lydHgiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQSU9fNywgNywKKwkJImdwaW9fNyIsIE5VTEwsICJ1YXJ0Ml9jdHMiLCAiZ3Bpb183IiwKKwkJInVhcnQzX2N0c19yY3R4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUElPXzgwLCA4MCwKKwkJImdwaW9fODAiLCBOVUxMLCAidWFydDJfcngiLCAiZ3Bpb184MCIsCisJCSJ1YXJ0M19yeF9pcnJ4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0ExMCwgMywKKwkJImdwbWNfYTEwIiwgTlVMTCwgInN5c19uZG1hcmVxMCIsICJncGlvXzMiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfQTEsIDMxLAorCQkiZ3BtY19hMSIsIE5VTEwsIE5VTEwsICJncGlvXzMxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0EyLCAzMCwKKwkJImdwbWNfYTIiLCBOVUxMLCBOVUxMLCAiZ3Bpb18zMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19BMywgMjksCisJCSJncG1jX2EzIiwgTlVMTCwgTlVMTCwgImdwaW9fMjkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfQTQsIDQ5LAorCQkiZ3BtY19hNCIsIE5VTEwsIE5VTEwsICJncGlvXzQ5IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0E1LCA1MywKKwkJImdwbWNfYTUiLCBOVUxMLCBOVUxMLCAiZ3Bpb181MyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19BNiwgNTIsCisJCSJncG1jX2E2IiwgTlVMTCwgTlVMTCwgImdwaW9fNTIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfQTcsIDYsCisJCSJncG1jX2E3IiwgTlVMTCwgTlVMTCwgImdwaW9fNiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19BOCwgNSwKKwkJImdwbWNfYTgiLCBOVUxMLCBOVUxMLCAiZ3Bpb181IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0E5LCA0LAorCQkiZ3BtY19hOSIsIE5VTEwsICJzeXNfbmRtYXJlcTEiLCAiZ3Bpb180IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0NMSywgMjEsCisJCSJncG1jX2NsayIsIE5VTEwsIE5VTEwsICJncGlvXzIxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxMCwgMTgsCisJCSJncG1jX2QxMCIsIE5VTEwsIE5VTEwsICJncGlvXzE4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxMSwgNTcsCisJCSJncG1jX2QxMSIsIE5VTEwsIE5VTEwsICJncGlvXzU3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxMiwgNzcsCisJCSJncG1jX2QxMiIsIE5VTEwsIE5VTEwsICJncGlvXzc3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxMywgNzYsCisJCSJncG1jX2QxMyIsIE5VTEwsIE5VTEwsICJncGlvXzc2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxNCwgNTUsCisJCSJncG1jX2QxNCIsIE5VTEwsIE5VTEwsICJncGlvXzU1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0QxNSwgNTQsCisJCSJncG1jX2QxNSIsIE5VTEwsIE5VTEwsICJncGlvXzU0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX0Q4LCAyMCwKKwkJImdwbWNfZDgiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19EOSwgMTksCisJCSJncG1jX2Q5IiwgTlVMTCwgTlVMTCwgImdwaW9fMTkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfTkNTMSwgMjIsCisJCSJncG1jX25jczEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yMiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19OQ1MyLCAyMywKKwkJImdwbWNfbmNzMiIsIE5VTEwsIE5VTEwsICJncGlvXzIzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX05DUzMsIDI0LAorCQkiZ3BtY19uY3MzIiwgImdwbWNfaW9fZGlyIiwgTlVMTCwgImdwaW9fMjQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfTkNTNCwgMjUsCisJCSJncG1jX25jczQiLCBOVUxMLCBOVUxMLCAiZ3Bpb18yNSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19OQ1M1LCAyNiwKKwkJImdwbWNfbmNzNSIsIE5VTEwsIE5VTEwsICJncGlvXzI2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX05DUzYsIDI3LAorCQkiZ3BtY19uY3M2IiwgTlVMTCwgTlVMTCwgImdwaW9fMjciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfTkNTNywgMjgsCisJCSJncG1jX25jczciLCAiZ3BtY19pb19kaXIiLCBOVUxMLCAiZ3Bpb18yOCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoR1BNQ19XQUlUMSwgMzMsCisJCSJncG1jX3dhaXQxIiwgTlVMTCwgTlVMTCwgImdwaW9fMzMiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEdQTUNfV0FJVDIsIDM0LAorCQkiZ3BtY193YWl0MiIsIE5VTEwsIE5VTEwsICJncGlvXzM0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShHUE1DX1dBSVQzLCAzNSwKKwkJImdwbWNfd2FpdDMiLCBOVUxMLCBOVUxMLCAiZ3Bpb18zNSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoSERRX1NJTywgMTAxLAorCQkiaGRxX3NpbyIsICJ1c2IyX3RsbHNlMCIsICJzeXNfYWx0Y2xrIiwgImdwaW9fMTAxIiwKKwkJInVhcnQzX3J4X2lycngiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEkyQzFfU0NMLCA1MCwKKwkJImkyYzFfc2NsIiwgTlVMTCwgTlVMTCwgImdwaW9fNTAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEkyQzFfU0RBLCA1MSwKKwkJImkyYzFfc2RhIiwgTlVMTCwgTlVMTCwgImdwaW9fNTEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEkyQzJfU0NMLCA5OSwKKwkJImkyYzJfc2NsIiwgTlVMTCwgTlVMTCwgImdwaW9fOTkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKEkyQzJfU0RBLCAxMDAsCisJCSJpMmMyX3NkYSIsIE5VTEwsIE5VTEwsICJncGlvXzEwMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoSlRBR19FTVUwLCAxMjcsCisJCSJqdGFnX2VtdTAiLCAic2VjdXJlX2luZGljYXRvciIsIE5VTEwsICJncGlvXzEyNyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoSlRBR19FTVUxLCAxMjYsCisJCSJqdGFnX2VtdTEiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xMjYiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQMV9DTEtSLCA5MiwKKwkJIm1jYnNwMV9jbGtyIiwgInNzaTJfZGF0X3R4IiwgTlVMTCwgImdwaW9fOTIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQMV9DTEtYLCA5OCwKKwkJIm1jYnNwMV9jbGt4IiwgInNzaTJfd2FrZSIsIE5VTEwsICJncGlvXzk4IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShNQ0JTUDFfRFIsIDk1LAorCQkibWNic3AxX2RyIiwgInNzaTJfZGF0X3J4IiwgTlVMTCwgImdwaW9fOTUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQMV9EWCwgOTQsCisJCSJtY2JzcDFfZHgiLCAic3NpMl9yZHlfdHgiLCBOVUxMLCAiZ3Bpb185NCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoTUNCU1AxX0ZTUiwgOTMsCisJCSJtY2JzcDFfZnNyIiwgInNzaTJfZmxhZ190eCIsIE5VTEwsICJncGlvXzkzIiwKKwkJInNwaTJfY3MxIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShNQ0JTUDFfRlNYLCA5NywKKwkJIm1jYnNwMV9mc3giLCAic3NpMl9yZHlfcngiLCBOVUxMLCAiZ3Bpb185NyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoTUNCU1AyX0NMS1gsIDE0NywKKwkJIm1jYnNwMl9jbGt4IiwgInNkaV9jbGtwIiwgImRzc19kYXRhMjMiLCAiZ3Bpb18xNDciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQMl9EUiwgMTQ0LAorCQkibWNic3AyX2RyIiwgInNkaV9jbGtuIiwgImRzc19kYXRhMjIiLCAiZ3Bpb18xNDQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQM19DTEtYLCA3MSwKKwkJIm1jYnNwM19jbGt4IiwgTlVMTCwgTlVMTCwgImdwaW9fNzEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQM19EUiwgNzMsCisJCSJtY2JzcDNfZHIiLCBOVUxMLCBOVUxMLCAiZ3Bpb183MyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoTUNCU1AzX0RYLCA3NCwKKwkJIm1jYnNwM19keCIsIE5VTEwsICJzdGlfY2xrIiwgImdwaW9fNzQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKE1DQlNQM19GU1gsIDcyLAorCQkibWNic3AzX2ZzeCIsIE5VTEwsIE5VTEwsICJncGlvXzcyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShNQ0JTUF9DTEtTLCA5NiwKKwkJIm1jYnNwX2Nsa3MiLCAic3NpMl9mbGFnX3J4IiwgTlVMTCwgImdwaW9fOTYiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNETU1DMV9DTEtPLCAwLAorCQkic2RtbWMxX2Nsa28iLCAibXNfY2xrbyIsIE5VTEwsIE5VTEwsCisJCU5VTEwsICJod19kYmc5IiwgImh3X2RiZzMiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNETU1DMV9DTUQsIDAsCisJCSJzZG1tYzFfY21kIiwgIm1zX2JzIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgImh3X2RiZzgiLCAiaHdfZGJnMiIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RNTUMxX0RBVDAsIDAsCisJCSJzZG1tYzFfZGF0MCIsICJtc19kYXQwIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgImh3X2RiZzciLCAiaHdfZGJnMSIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RNTUMxX0RBVDEsIDc1LAorCQkic2RtbWMxX2RhdDEiLCAibXNfZGF0MSIsIE5VTEwsICJncGlvXzc1IiwKKwkJTlVMTCwgImh3X2RiZzYiLCAiaHdfZGJnMCIsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RNTUMxX0RBVDIsIDAsCisJCSJzZG1tYzFfZGF0MiIsICJtc19kYXQyIiwgTlVMTCwgTlVMTCwKKwkJTlVMTCwgImh3X2RiZzUiLCAiaHdfZGJnMTAiLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNETU1DMV9EQVQzLCAwLAorCQkic2RtbWMxX2RhdDMiLCAibXNfZGF0MyIsIE5VTEwsIE5VTEwsCisJCU5VTEwsICJod19kYmc0IiwgImh3X2RiZzExIiwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTRE1NQzJfQ0xLTywgMTMsCisJCSJzZG1tYzJfY2xrbyIsIE5VTEwsIE5VTEwsICJncGlvXzEzIiwKKwkJTlVMTCwgInNwaTNfY2xrIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTRE1NQzJfQ01ELCAxNSwKKwkJInNkbW1jMl9jbWQiLCAidXNiMl9yY3YiLCBOVUxMLCAiZ3Bpb18xNSIsCisJCU5VTEwsICJzcGkzX3NpbW8iLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNETU1DMl9EQVQwLCAxNiwKKwkJInNkbW1jMl9kYXQwIiwgInVzYjJfdGxsc2UwIiwgTlVMTCwgImdwaW9fMTYiLAorCQlOVUxMLCAic3BpM19zb21pIiwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTRE1NQzJfREFUMSwgNTgsCisJCSJzZG1tYzJfZGF0MSIsICJ1c2IyX3R4ZW4iLCBOVUxMLCAiZ3Bpb181OCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RNTUMyX0RBVDIsIDE3LAorCQkic2RtbWMyX2RhdDIiLCAidXNiMl9kYXQiLCBOVUxMLCAiZ3Bpb18xNyIsCisJCU5VTEwsICJzcGkzX2NzMSIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RNTUMyX0RBVDMsIDE0LAorCQkic2RtbWMyX2RhdDMiLCAidXNiMl9zZTAiLCBOVUxMLCAiZ3Bpb18xNCIsCisJCU5VTEwsICJzcGkzX2NzMCIsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RSQ19BMTIsIDIsCisJCSJzZHJjX2ExMiIsIE5VTEwsIE5VTEwsICJncGlvXzIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNEUkNfQTEzLCAxLAorCQkic2RyY19hMTMiLCBOVUxMLCBOVUxMLCAiZ3Bpb18xIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTRFJDX0ExNCwgMCwKKwkJInNkcmNfYTE0IiwgTlVMTCwgTlVMTCwgImdwaW9fMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU0RSQ19DS0UxLCAzNiwKKwkJInNkcmNfY2tlMSIsIE5VTEwsIE5VTEwsICJncGlvXzM2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTRFJDX05DUzEsIDM3LAorCQkic2RyY19uY3MxIiwgTlVMTCwgTlVMTCwgImdwaW9fMzciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfQ0xLLCA4MSwKKwkJInNwaTFfY2xrIiwgTlVMTCwgTlVMTCwgImdwaW9fODEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfQ1MwLCA4NCwKKwkJInNwaTFfY3MwIiwgTlVMTCwgTlVMTCwgImdwaW9fODQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfQ1MxLCA4NSwKKwkJInNwaTFfY3MxIiwgTlVMTCwgTlVMTCwgImdwaW9fODUiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfQ1MyLCA4NiwKKwkJInNwaTFfY3MyIiwgTlVMTCwgTlVMTCwgImdwaW9fODYiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfQ1MzLCA4NywKKwkJInNwaTFfY3MzIiwgInNwaTJfY3MxIiwgTlVMTCwgImdwaW9fODciLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNQSTFfU0lNTywgODIsCisJCSJzcGkxX3NpbW8iLCBOVUxMLCBOVUxMLCAiZ3Bpb184MiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU1BJMV9TT01JLCA4MywKKwkJInNwaTFfc29taSIsIE5VTEwsIE5VTEwsICJncGlvXzgzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTUEkyX0NMSywgODgsCisJCSJzcGkyX2NsayIsICJncHQ5X3B3bV9ldnQiLCBOVUxMLCAiZ3Bpb184OCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU1BJMl9DUzAsIDkxLAorCQkic3BpMl9jczAiLCAiZ3B0MTJfcHdtX2V2dCIsIE5VTEwsICJncGlvXzkxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTUEkyX1NJTU8sIDg5LAorCQkic3BpMl9zaW1vIiwgImdwdDEwX3B3bV9ldnQiLCBOVUxMLCAiZ3Bpb184OSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU1BJMl9TT01JLCA5MCwKKwkJInNwaTJfc29taSIsICJncHQxMV9wd21fZXZ0IiwgTlVMTCwgImdwaW9fOTAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfREFUX1JYLCA2MiwKKwkJInNzaTFfZGF0X3J4IiwgInVhcnQxX3J4IiwgInVzYjFfZGF0IiwgImdwaW9fNjIiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfREFUX1RYLCA1OSwKKwkJInNzaTFfZGF0X3R4IiwgInVhcnQxX3R4IiwgInVzYjFfc2UwIiwgImdwaW9fNTkiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfRkxBR19SWCwgNjQsCisJCSJzc2kxX2ZsYWdfcngiLCAibWNic3A0X2RyIiwgTlVMTCwgImdwaW9fNjQiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfRkxBR19UWCwgNjAsCisJCSJzc2kxX2ZsYWdfdHgiLCAidWFydDFfcnRzIiwgInVzYjFfcmN2IiwgImdwaW9fNjAiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfUkRZX1JYLCA2NSwKKwkJInNzaTFfcmR5X3J4IiwgIm1jYnNwNF9keCIsIE5VTEwsICJncGlvXzY1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTU0kxX1JEWV9UWCwgNjEsCisJCSJzc2kxX3JkeV90eCIsICJ1YXJ0MV9jdHMiLCAidXNiMV90eGVuIiwgImdwaW9fNjEiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNTSTFfV0FLRSwgNjYsCisJCSJzc2kxX3dha2UiLCAibWNic3A0X2ZzeCIsIE5VTEwsICJncGlvXzY2IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTWVNfQ0xLT1VULCAxMTEsCisJCSJzeXNfY2xrb3V0IiwgTlVMTCwgTlVMTCwgImdwaW9fMTExIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShTWVNfRFJNX01TRUNVUkUsIDExOCwKKwkJInN5c19kcm1fbXNlY3VyZSIsIE5VTEwsICJzeXNfbmRtYXJlcTYiLCAiZ3Bpb18xMTgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFNZU19OSVJRMCwgNTYsCisJCSJzeXNfbmlycTAiLCBOVUxMLCBOVUxMLCAiZ3Bpb181NiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoU1lTX05JUlExLCAxMjUsCisJCSJzeXNfbmlycTEiLCBOVUxMLCAic3lzX25kbWFyZXE1IiwgImdwaW9fMTI1IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVQVJUMV9DVFMsIDMyLAorCQkidWFydDFfY3RzIiwgInNkaV92c3luYyIsICJkc3NfZGF0YTE4IiwgImdwaW9fMzIiLAorCQkibWNic3A1X2Nsa3giLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFVBUlQxX1JUUywgOCwKKwkJInVhcnQxX3J0cyIsICJzZGlfaHN5bmMiLCAiZHNzX2RhdGExOSIsICJncGlvXzgiLAorCQkibWNic3A1X2ZzeCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVUFSVDFfUlgsIDEwLAorCQkidWFydDFfcngiLCAic2RpX3N0cCIsICJkc3NfZGF0YTIxIiwgImdwaW9fMTAiLAorCQkibWNic3A1X2RyIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVQVJUMV9UWCwgOSwKKwkJInVhcnQxX3R4IiwgInNkaV9kZW4iLCAiZHNzX2RhdGEyMCIsICJncGlvXzkiLAorCQkibWNic3A1X2R4IiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVQVJUMl9DVFMsIDY3LAorCQkidWFydDJfY3RzIiwgInVzYjFfcmN2IiwgImdwdDlfcHdtX2V2dCIsICJncGlvXzY3IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVQVJUMl9SVFMsIDY4LAorCQkidWFydDJfcnRzIiwgInVzYjFfdHhlbiIsICJncHQxMF9wd21fZXZ0IiwgImdwaW9fNjgiLAorCQlOVUxMLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFVBUlQyX1JYLCA3MCwKKwkJInVhcnQyX3J4IiwgInVzYjFfZGF0IiwgImdwdDEyX3B3bV9ldnQiLCAiZ3Bpb183MCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVUFSVDJfVFgsIDY5LAorCQkidWFydDJfdHgiLCAidXNiMV9zZTAiLCAiZ3B0MTFfcHdtX2V2dCIsICJncGlvXzY5IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVQVJUM19DVFNfUkNUWCwgMTAyLAorCQkidWFydDNfY3RzX3JjdHgiLCAidWFydDNfcnhfaXJyeCIsIE5VTEwsICJncGlvXzEwMiIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVUFSVDNfUlRTX1NELCAxMDMsCisJCSJ1YXJ0M19ydHNfc2QiLCAidWFydDNfdHhfaXJ0eCIsIE5VTEwsICJncGlvXzEwMyIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVUFSVDNfUlhfSVJSWCwgMTA1LAorCQkidWFydDNfcnhfaXJyeCIsIE5VTEwsIE5VTEwsICJncGlvXzEwNSIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVUFSVDNfVFhfSVJUWCwgMTA0LAorCQkidWFydDNfdHhfaXJ0eCIsICJ1YXJ0M19jdHNfcmN0eCIsIE5VTEwsICJncGlvXzEwNCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVVNCMEhTX0NMSywgMTIwLAorCQkidXNiMGhzX2NsayIsIE5VTEwsIE5VTEwsICJncGlvXzEyMCIsCisJCU5VTEwsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVVNCMEhTX0RBVEEwLCAwLAorCQkidXNiMGhzX2RhdGEwIiwgInVhcnQzX3R4X2lydHgiLCBOVUxMLCBOVUxMLAorCQkidXNiMF90eGVuIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVU0IwSFNfREFUQTEsIDAsCisJCSJ1c2IwaHNfZGF0YTEiLCAidWFydDNfcnhfaXJyeCIsIE5VTEwsIE5VTEwsCisJCSJ1c2IwX2RhdCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVVNCMEhTX0RBVEEyLCAwLAorCQkidXNiMGhzX2RhdGEyIiwgInVhcnQzX3J0c19zZCIsIE5VTEwsIE5VTEwsCisJCSJ1c2IwX3NlMCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVVNCMEhTX0RBVEEzLCAxMDYsCisJCSJ1c2IwaHNfZGF0YTMiLCBOVUxMLCAidWFydDNfY3RzX3JjdHgiLCAiZ3Bpb18xMDYiLAorCQkidXNiMF9wdWVuIiwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVU0IwSFNfREFUQTQsIDEwNywKKwkJInVzYjBoc19kYXRhNCIsICJtY2JzcDJfZHIiLCBOVUxMLCAiZ3Bpb18xMDciLAorCQkidXNiMF92cCIsIE5VTEwsIE5VTEwsICJzYWZlX21vZGUiKSwKKwlfT01BUDI0MzBfTVVYRU5UUlkoVVNCMEhTX0RBVEE1LCAxMDgsCisJCSJ1c2IwaHNfZGF0YTUiLCAibWNic3AyX2R4IiwgTlVMTCwgImdwaW9fMTA4IiwKKwkJInVzYjBfdm0iLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFVTQjBIU19EQVRBNiwgMTA5LAorCQkidXNiMGhzX2RhdGE2IiwgIm1jYnNwMl9mc3giLCBOVUxMLCAiZ3Bpb18xMDkiLAorCQkidXNiMF9yY3YiLCBOVUxMLCBOVUxMLCAic2FmZV9tb2RlIiksCisJX09NQVAyNDMwX01VWEVOVFJZKFVTQjBIU19EQVRBNywgMTI0LAorCQkidXNiMGhzX2RhdGE3IiwgIm1jYnNwMl9jbGt4IiwgTlVMTCwgImdwaW9fMTI0IiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVU0IwSFNfRElSLCAxMjEsCisJCSJ1c2IwaHNfZGlyIiwgTlVMTCwgTlVMTCwgImdwaW9fMTIxIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVU0IwSFNfTlhULCAxMjMsCisJCSJ1c2IwaHNfbnh0IiwgTlVMTCwgTlVMTCwgImdwaW9fMTIzIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCV9PTUFQMjQzMF9NVVhFTlRSWShVU0IwSFNfU1RQLCAxMjIsCisJCSJ1c2IwaHNfc3RwIiwgTlVMTCwgTlVMTCwgImdwaW9fMTIyIiwKKwkJTlVMTCwgTlVMTCwgTlVMTCwgInNhZmVfbW9kZSIpLAorCXsgLnJlZ19vZmZzZXQgPSBPTUFQX01VWF9URVJNSU5BVE9SIH0sCit9OworCisvKgorICogQmFsbHMgZm9yIFBPUCBwYWNrYWdlCisgKiA0NDctcGluIHMtUEJHQSBQYWNrYWdlLCAwLjAwbW0gQmFsbCBQaXRjaCAoQm90dG9tKQorICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdHJ1Y3Qgb21hcF9iYWxsIF9faW5pdGRhdGEgb21hcDI0MzBfcG9wX2JhbGxbXSA9IHsKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9EMCwgInQ4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fRDEsICJ0NCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoQ0FNX0QxMCwgInI0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fRDExLCAidzMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9EMiwgInIyIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fRDMsICJ1MyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoQ0FNX0Q0LCAidTIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9ENSwgInYxIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fRDYsICJ0MyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoQ0FNX0Q3LCAicjMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9EOCwgInU3IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fRDksICJ0NyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoQ0FNX0hTLCAicDIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9MQ0xLLCAicjciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKENBTV9WUywgIm4yIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShDQU1fWENMSywgInAzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfQUNCSUFTLCAieTMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKERTU19EQVRBMCwgInY4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfREFUQTEsICJ3MSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExMCwgImsyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExMSwgImoyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExMiwgImsyNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExMywgImoyNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExNCwgImgyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExNSwgImcyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExNiwgImFjMyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEExNywgInk3IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfREFUQTIsICJ1OCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEEzLCAidTQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKERTU19EQVRBNCwgInYzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfREFUQTUsICJhYTQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKERTU19EQVRBNiwgInc4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfREFUQTcsICJ5MSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoRFNTX0RBVEE4LCAiYWEyIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShEU1NfREFUQTksICJhYjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKERTU19IU1lOQywgInYyIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzExMywgImFkMTYiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTE0LCAiYWMxMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xMTUsICJhZDEzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzExNiwgImFlMTUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTI4LCAicDEiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTI5LCAicjEiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTMwLCAicDciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTMxLCAibDgiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTMyLCAidzI0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzEzMywgImFhMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTM0LCAiYWUxMiIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xMzUsICJhZTExIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzEzNiwgImFkMTIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTM3LCAiYWQxMSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xMzgsICJ5MTIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTM5LCAiYWQxNyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xNDAsICJsNyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xNDEsICJhYzI0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzE0MiwgIm0zIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzE0OCwgImFmMTIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTQ5LCAiazciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTUwLCAibTEiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fMTUxLCAiYWQxNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xNTIsICJhZDE4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzE1MywgInUyNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT18xNTQsICJhZTE2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzYzLCAibjMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fNywgImFjMjMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQSU9fNzgsICJhZDEwIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUElPXzc5LCAiYWUxMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BJT184MCwgImFlMTMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfQTEsICJhOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BMTAsICJnMTIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfQTIsICJiOCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BMywgImcxMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BNCwgImcxMSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BNSwgImExMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BNiwgImcxMyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19BNywgImE2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX0E4LCAiaDEiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfQTksICJjOCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19DTEssICJuMSIsICJsMSIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTAsICJkMSIsICJuMSIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTEsICJkMiIsICJwMiIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTIsICJlMSIsICJwMSIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTMsICJlMyIsICJtMSIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTQsICJjNyIsICJqMiIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EMTUsICJmMyIsICJrMiIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19EOCwgImUyIiwgInIxIiksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX0Q5LCAiYWIxIiwgInQxIiksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX05DUzEsICJhYzEiLCAidzEiKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfTkNTMiwgImM2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX05DUzMsICJiOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19OQ1M0LCAiYjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfTkNTNSwgImE0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX05DUzYsICJmMSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19OQ1M3LCAiYTciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEdQTUNfV0FJVDEsICJqMSIsICJ5OCIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoR1BNQ19XQUlUMiwgImI3IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShHUE1DX1dBSVQzLCAiZzE0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShIRFFfU0lPLCAiaDIwIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShJMkMxX1NDTCwgInkxNyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoSTJDMV9TREEsICJhYzE5IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShJMkMyX1NDTCwgIm43IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShJMkMyX1NEQSwgIm00IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShKVEFHX0VNVTAsICJlMjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKEpUQUdfRU1VMSwgImUyNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoTUNCU1AxX0NMS1IsICJhYjIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKE1DQlNQMV9DTEtYLCAieTkiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKE1DQlNQMV9EUiwgImFmMyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoTUNCU1AxX0RYLCAiYWExIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShNQ0JTUDFfRlNSLCAiYWQ1IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShNQ0JTUDFfRlNYLCAiYWIzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShNQ0JTUDJfQ0xLWCwgImoyNiIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoTUNCU1AyX0RSLCAiazI2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShNQ0JTUDNfQ0xLWCwgImFjOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoTUNCU1AzX0RSLCAiYWUyIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShNQ0JTUDNfRFgsICJhZjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKE1DQlNQM19GU1gsICJhZTQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKE1DQlNQX0NMS1MsICJhZDYiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNETU1DMV9DTEtPLCAibjIzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRE1NQzFfQ01ELCAibDIzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRE1NQzFfREFUMCwgIm0yNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU0RNTUMxX0RBVDEsICJwMjMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNETU1DMV9EQVQyLCAidDIwIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRE1NQzFfREFUMywgInIyMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU0RNTUMyX0NMS08sICJ2MjYiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNETU1DMl9DTUQsICJ3MjAiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNETU1DMl9EQVQwLCAidjIzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRE1NQzJfREFUMSwgInkyNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU0RNTUMyX0RBVDIsICJ2MjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNETU1DMl9EQVQzLCAidjI0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRFJDX0ExMiwgIncyNiIsICJyMjEiKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNEUkNfQTEzLCAiYWYyMCIsICJhYTE1IiksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRFJDX0ExNCwgImFmMTYiLCAieTEyIiksCisJX09NQVAyNDMwX0JBTExFTlRSWShTRFJDX0NLRTEsICJhZjE1IiwgInkxMyIpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU0RSQ19OQ1MxLCAiYWEyNSIsICJ0MjAiKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNQSTFfQ0xLLCAieTE4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTUEkxX0NTMCwgInUxIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTUEkxX0NTMSwgImFmMTkiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNQSTFfQ1MyLCAiYWUxOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1BJMV9DUzMsICJoMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNQSTFfU0lNTywgImFkMTUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNQSTFfU09NSSwgImFlMTciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNQSTJfQ0xLLCAieTIwIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTUEkyX0NTMCwgInkxOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1BJMl9TSU1PLCAiYWMyMCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1BJMl9TT01JLCAiYWQxOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1NJMV9EQVRfUlgsICJhYTI2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTU0kxX0RBVF9UWCwgImFkMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNTSTFfRkxBR19SWCwgImFkMjMiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNTSTFfRkxBR19UWCwgImFiMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNTSTFfUkRZX1JYLCAiYWIyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1NJMV9SRFlfVFgsICJ5MjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNTSTFfV0FLRSwgImFjMjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNZU19DTEtPVVQsICJyMjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFNZU19EUk1fTVNFQ1VSRSwgImFlMyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoU1lTX05JUlEwLCAidzI1IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShTWVNfTklSUTEsICJhZDIxIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVQVJUMV9DVFMsICJwMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVBUlQxX1JUUywgInAyNSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVUFSVDFfUlgsICJuMjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVBUlQxX1RYLCAicjI0IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVQVJUMl9DVFMsICJ1MjUiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVBUlQyX1JUUywgInQyMyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVUFSVDJfUlgsICJ0MjQiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVBUlQyX1RYLCAidTIwIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVQVJUM19DVFNfUkNUWCwgIm0yIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVQVJUM19SVFNfU0QsICJrMiIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVUFSVDNfUlhfSVJSWCwgImwzIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVQVJUM19UWF9JUlRYLCAibDIiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVTQjBIU19DTEssICJhZTgiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVTQjBIU19EQVRBMCwgImFkNCIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVVNCMEhTX0RBVEExLCAiYWU2IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVU0IwSFNfREFUQTIsICJhZjkiLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVTQjBIU19EQVRBMywgImFkOSIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVVNCMEhTX0RBVEE0LCAieTExIiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVU0IwSFNfREFUQTUsICJhZDciLCBOVUxMKSwKKwlfT01BUDI0MzBfQkFMTEVOVFJZKFVTQjBIU19EQVRBNiwgImFlNyIsIE5VTEwpLAorCV9PTUFQMjQzMF9CQUxMRU5UUlkoVVNCMEhTX0RBVEE3LCAiYWM3IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVU0IwSFNfRElSLCAiYWQ4IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVU0IwSFNfTlhULCAiYWU5IiwgTlVMTCksCisJX09NQVAyNDMwX0JBTExFTlRSWShVU0IwSFNfU1RQLCAiYWU1IiwgTlVMTCksCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisjZWxzZQorI2RlZmluZSBvbWFwMjQzMF9wb3BfYmFsbAkgTlVMTAorI2VuZGlmCisKK2ludCBfX2luaXQgb21hcDI0MzBfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzID0gTlVMTDsKKworCXN3aXRjaCAoZmxhZ3MgJiBPTUFQX1BBQ0tBR0VfTUFTSykgeworCWNhc2UgT01BUF9QQUNLQUdFX1pBQzoKKwkJcGFja2FnZV9iYWxscyA9IG9tYXAyNDMwX3BvcF9iYWxsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl93YXJuaW5nKCJtdXg6IE5vIGJhbGwgZGF0YSBhdmFpbGFibGUgZm9yIG9tYXAyNDIwIHBhY2thZ2VcbiIpOworCX0KKworCXJldHVybiBvbWFwX211eF9pbml0KE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9NVVhfUEJBU0UsCisJCQkgICAgIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9NVVhfU0laRSwKKwkJCQlvbWFwMjQzMF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJCXBhY2thZ2VfYmFsbHMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDI0MzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJlYTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgyNDMwLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTVVYX1BCQVNFCQkJMHg0OTAwMjAzMExVCisKKyNkZWZpbmUgT01BUDI0MzBfTVVYKG1vZGUwLCBtdXhfdmFsdWUpCQkJCQlcCit7CQkJCQkJCQkJXAorCS5yZWdfb2Zmc2V0CT0gKE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl8jI21vZGUwIyNfT0ZGU0VUKSwJXAorCS52YWx1ZQkJPSAobXV4X3ZhbHVlKSwJCQkJCVwKK30KKworLyoKKyAqIE9NQVAyNDMwIENPTlRST0xfUEFEQ09ORiogcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgcGluLW11eGluZworICoKKyAqIEV4dHJhY3RlZCBmcm9tIHRoZSBUUk0uICBBZGQgMHg0OTAwMjAzMCB0byB0aGVzZSB2YWx1ZXMgdG8gZ2V0IHRoZQorICogYWJzb2x1dGUgYWRkcmVzc2VzLiAgVGhlIG5hbWUgaW4gdGhlIG1hY3JvIGlzIHRoZSBtb2RlLTAgbmFtZSBvZgorICogdGhlIHBpbi4gIE5PVEU6IFRoZXNlIHJlZ2lzdGVycyBhcmUgOC1iaXRzIHdpZGUuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGRlZmluZXMgdXNlIFNETU1DIGluc3RlYWQgb2YgTU1DIGZvciBjb21wYWJpbGl0eQorICogd2l0aCBzaWduYWwgbmFtZXMgdXNlZCBpbiAzNjMwLgorICovCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0NMS19PRkZTRVQJCTB4MDAwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzBfT0ZGU0VUCQkweDAwMQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1MxX09GRlNFVAkJMHgwMDIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTMl9PRkZTRVQJCTB4MDAzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzNfT0ZGU0VUCQkweDAwNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0X09GRlNFVAkJMHgwMDUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNV9PRkZTRVQJCTB4MDA2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX05DUzZfT0ZGU0VUCQkweDAwNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M3X09GRlNFVAkJMHgwMDgKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkFEVl9BTEVfT0ZGU0VUCQkweDAwOQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OT0VfTlJFX09GRlNFVAkJMHgwMGEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTldFX09GRlNFVAkJMHgwMGIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTkJFMF9DTEVfT0ZGU0VUCQkweDAwYworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19OQkUxX09GRlNFVAkJMHgwMGQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfTldQX09GRlNFVAkJMHgwMGUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDBfT0ZGU0VUCQkweDAwZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BNQ19XQUlUMV9PRkZTRVQJCTB4MDEwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX1dBSVQyX09GRlNFVAkJMHgwMTEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQTUNfV0FJVDNfT0ZGU0VUCQkweDAxMgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RSQ19DTEtfT0ZGU0VUCQkweDAxMworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RSQ19OQ0xLX09GRlNFVAkJMHgwMTQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfTkNTMF9PRkZTRVQJCTB4MDE1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX05DUzFfT0ZGU0VUCQkweDAxNgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RSQ19DS0UwX09GRlNFVAkJMHgwMTcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfQ0tFMV9PRkZTRVQJCTB4MDE4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX05SQVNfT0ZGU0VUCQkweDAxOQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RSQ19OQ0FTX09GRlNFVAkJMHgwMWEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfTldFX09GRlNFVAkJMHgwMWIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0wX09GRlNFVAkJMHgwMWMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0xX09GRlNFVAkJMHgwMWQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0yX09GRlNFVAkJMHgwMWUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRE0zX09GRlNFVAkJMHgwMWYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTMF9PRkZTRVQJCTB4MDIwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0RRUzFfT0ZGU0VUCQkweDAyMQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RSQ19EUVMyX09GRlNFVAkJMHgwMjIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NEUkNfRFFTM19PRkZTRVQJCTB4MDIzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExNF9PRkZTRVQJCTB4MDI0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExM19PRkZTRVQJCTB4MDI1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExMl9PRkZTRVQJCTB4MDI2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0JBMV9PRkZTRVQJCTB4MDI3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0JBMF9PRkZTRVQJCTB4MDI4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExMV9PRkZTRVQJCTB4MDI5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExMF9PRkZTRVQJCTB4MDJhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E5X09GRlNFVAkJCTB4MDJiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E4X09GRlNFVAkJCTB4MDJjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E3X09GRlNFVAkJCTB4MDJkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E2X09GRlNFVAkJCTB4MDJlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E1X09GRlNFVAkJCTB4MDJmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0E0X09GRlNFVAkJCTB4MDMwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0EzX09GRlNFVAkJCTB4MDMxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0EyX09GRlNFVAkJCTB4MDMyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0ExX09GRlNFVAkJCTB4MDMzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0EwX09GRlNFVAkJCTB4MDM0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzMV9PRkZTRVQJCTB4MDM1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzMF9PRkZTRVQJCTB4MDM2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyOV9PRkZTRVQJCTB4MDM3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyOF9PRkZTRVQJCTB4MDM4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyN19PRkZTRVQJCTB4MDM5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyNl9PRkZTRVQJCTB4MDNhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyNV9PRkZTRVQJCTB4MDNiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyNF9PRkZTRVQJCTB4MDNjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyM19PRkZTRVQJCTB4MDNkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyMl9PRkZTRVQJCTB4MDNlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyMV9PRkZTRVQJCTB4MDNmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyMF9PRkZTRVQJCTB4MDQwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxOV9PRkZTRVQJCTB4MDQxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxOF9PRkZTRVQJCTB4MDQyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxN19PRkZTRVQJCTB4MDQzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxNl9PRkZTRVQJCTB4MDQ0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxNV9PRkZTRVQJCTB4MDQ1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxNF9PRkZTRVQJCTB4MDQ2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxM19PRkZTRVQJCTB4MDQ3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxMl9PRkZTRVQJCTB4MDQ4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxMV9PRkZTRVQJCTB4MDQ5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxMF9PRkZTRVQJCTB4MDRhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q5X09GRlNFVAkJCTB4MDRiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q4X09GRlNFVAkJCTB4MDRjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q3X09GRlNFVAkJCTB4MDRkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q2X09GRlNFVAkJCTB4MDRlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q1X09GRlNFVAkJCTB4MDRmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0Q0X09GRlNFVAkJCTB4MDUwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QzX09GRlNFVAkJCTB4MDUxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QyX09GRlNFVAkJCTB4MDUyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QxX09GRlNFVAkJCTB4MDUzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRFJDX0QwX09GRlNFVAkJCTB4MDU0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0ExMF9PRkZTRVQJCTB4MDU1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E5X09GRlNFVAkJCTB4MDU2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E4X09GRlNFVAkJCTB4MDU3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E3X09GRlNFVAkJCTB4MDU4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E2X09GRlNFVAkJCTB4MDU5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E1X09GRlNFVAkJCTB4MDVhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0E0X09GRlNFVAkJCTB4MDViCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0EzX09GRlNFVAkJCTB4MDVjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0EyX09GRlNFVAkJCTB4MDVkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0ExX09GRlNFVAkJCTB4MDVlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxNV9PRkZTRVQJCTB4MDVmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxNF9PRkZTRVQJCTB4MDYwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxM19PRkZTRVQJCTB4MDYxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxMl9PRkZTRVQJCTB4MDYyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxMV9PRkZTRVQJCTB4MDYzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxMF9PRkZTRVQJCTB4MDY0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q5X09GRlNFVAkJCTB4MDY1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q4X09GRlNFVAkJCTB4MDY2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q3X09GRlNFVAkJCTB4MDY3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q2X09GRlNFVAkJCTB4MDY4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q1X09GRlNFVAkJCTB4MDY5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0Q0X09GRlNFVAkJCTB4MDZhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QzX09GRlNFVAkJCTB4MDZiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QyX09GRlNFVAkJCTB4MDZjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QxX09GRlNFVAkJCTB4MDZkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUE1DX0QwX09GRlNFVAkJCTB4MDZlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTBfT0ZGU0VUCQkweDA2ZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEExX09GRlNFVAkJMHgwNzAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMl9PRkZTRVQJCTB4MDcxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTNfT0ZGU0VUCQkweDA3MgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE0X09GRlNFVAkJMHgwNzMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBNV9PRkZTRVQJCTB4MDc0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTZfT0ZGU0VUCQkweDA3NQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEE3X09GRlNFVAkJMHgwNzYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBOF9PRkZTRVQJCTB4MDc3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTlfT0ZGU0VUCQkweDA3OAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEExMF9PRkZTRVQJCTB4MDc5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTExX09GRlNFVAkJMHgwN2EKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMTJfT0ZGU0VUCQkweDA3YgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEExM19PRkZTRVQJCTB4MDdjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE0X09GRlNFVAkJMHgwN2QKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19EQVRBMTVfT0ZGU0VUCQkweDA3ZQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0RBVEExNl9PRkZTRVQJCTB4MDdmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfREFUQTE3X09GRlNFVAkJMHgwODAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VBUlQxX0NUU19PRkZTRVQJCTB4MDgxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VQVJUMV9SVFNfT0ZGU0VUCQkweDA4MgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVUFSVDFfVFhfT0ZGU0VUCQkweDA4MworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVUFSVDFfUlhfT0ZGU0VUCQkweDA4NAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AyX0RSX09GRlNFVAkJMHgwODUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01DQlNQMl9DTEtYX09GRlNFVAkJMHgwODYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19QQ0xLX09GRlNFVAkJMHgwODcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQ19PRkZTRVQJCTB4MDg4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EU1NfSFNZTkNfT0ZGU0VUCQkweDA4OQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRFNTX0FDQklBU19PRkZTRVQJCTB4MDhhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TWVNfTlJFU1BXUk9OX09GRlNFVAkJMHgwOGIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NZU19OUkVTV0FSTV9PRkZTRVQJCTB4MDhjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TWVNfTklSUTBfT0ZGU0VUCQkweDA4ZAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1lTX05JUlExX09GRlNFVAkJMHgwOGUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NZU19WTU9ERV9PRkZTRVQJCTB4MDhmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEyOF9PRkZTRVQJCTB4MDkwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEyOV9PRkZTRVQJCTB4MDkxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEzMF9PRkZTRVQJCTB4MDkyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEzMV9PRkZTRVQJCTB4MDkzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TWVNfMzJLX09GRlNFVAkJCTB4MDk0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TWVNfWFRBTElOX09GRlNFVAkJMHgwOTUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NZU19YVEFMT1VUX09GRlNFVAkJMHgwOTYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTMyX09GRlNFVAkJMHgwOTcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NZU19DTEtSRVFfT0ZGU0VUCQkweDA5OAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1lTX0NMS09VVF9PRkZTRVQJCTB4MDk5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzE1MV9PRkZTRVQJCTB4MDlhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9HUElPXzEzM19PRkZTRVQJCTB4MDliCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9KVEFHX0VNVTFfT0ZGU0VUCQkweDA5YworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfSlRBR19FTVUwX09GRlNFVAkJMHgwOWQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0pUQUdfTlRSU1RfT0ZGU0VUCQkweDA5ZQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfSlRBR19UQ0tfT0ZGU0VUCQkweDA5ZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfSlRBR19SVENLX09GRlNFVAkJMHgwYTAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0pUQUdfVE1TX09GRlNFVAkJMHgwYTEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0pUQUdfVERJX09GRlNFVAkJMHgwYTIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0pUQUdfVERPX09GRlNFVAkJMHgwYTMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9EOV9PRkZTRVQJCQkweDBhNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQ0FNX0Q4X09GRlNFVAkJCTB4MGE1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9DQU1fRDdfT0ZGU0VUCQkJMHgwYTYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9ENl9PRkZTRVQJCQkweDBhNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQ0FNX0Q1X09GRlNFVAkJCTB4MGE4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9DQU1fRDRfT0ZGU0VUCQkJMHgwYTkKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9EM19PRkZTRVQJCQkweDBhYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQ0FNX0QyX09GRlNFVAkJCTB4MGFiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9DQU1fRDFfT0ZGU0VUCQkJMHgwYWMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9EMF9PRkZTRVQJCQkweDBhZAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQ0FNX0hTX09GRlNFVAkJCTB4MGFlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9DQU1fVlNfT0ZGU0VUCQkJMHgwYWYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9MQ0xLX09GRlNFVAkJMHgwYjAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9YQ0xLX09GRlNFVAkJMHgwYjEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9EMTFfT0ZGU0VUCQkJMHgwYjIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0NBTV9EMTBfT0ZGU0VUCQkJMHgwYjMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM0X09GRlNFVAkJMHgwYjQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM1X09GRlNFVAkJMHgwYjUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM2X09GRlNFVAkJMHgwYjYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM3X09GRlNFVAkJMHgwYjcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM4X09GRlNFVAkJMHgwYjgKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTM5X09GRlNFVAkJMHgwYjkKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTQwX09GRlNFVAkJMHgwYmEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTQxX09GRlNFVAkJMHgwYmIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTQyX09GRlNFVAkJMHgwYmMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTU0X09GRlNFVAkJMHgwYmQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTQ4X09GRlNFVAkJMHgwYmUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTQ5X09GRlNFVAkJMHgwYmYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTUwX09GRlNFVAkJMHgwYzAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTUyX09GRlNFVAkJMHgwYzEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fMTUzX09GRlNFVAkJMHgwYzIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NETU1DMV9DTEtPX09GRlNFVAkJMHgwYzMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NETU1DMV9DTURfT0ZGU0VUCQkweDBjNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDBfT0ZGU0VUCQkweDBjNQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDFfT0ZGU0VUCQkweDBjNgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDJfT0ZGU0VUCQkweDBjNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMxX0RBVDNfT0ZGU0VUCQkweDBjOAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMyX0NMS09fT0ZGU0VUCQkweDBjOQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMyX0RBVDNfT0ZGU0VUCQkweDBjYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU0RNTUMyX0NNRF9PRkZTRVQJCTB4MGNiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRE1NQzJfREFUMF9PRkZTRVQJCTB4MGNjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRE1NQzJfREFUMl9PRkZTRVQJCTB4MGNkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TRE1NQzJfREFUMV9PRkZTRVQJCTB4MGNlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VQVJUMl9DVFNfT0ZGU0VUCQkweDBjZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVUFSVDJfUlRTX09GRlNFVAkJMHgwZDAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VBUlQyX1RYX09GRlNFVAkJMHgwZDEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VBUlQyX1JYX09GRlNFVAkJMHgwZDIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01DQlNQM19DTEtYX09GRlNFVAkJMHgwZDMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01DQlNQM19GU1hfT0ZGU0VUCQkweDBkNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AzX0RSX09GRlNFVAkJMHgwZDUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01DQlNQM19EWF9PRkZTRVQJCTB4MGQ2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TU0kxX0RBVF9UWF9PRkZTRVQJCTB4MGQ3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TU0kxX0ZMQUdfVFhfT0ZGU0VUCQkweDBkOAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1NJMV9SRFlfVFhfT0ZGU0VUCQkweDBkOQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1NJMV9EQVRfUlhfT0ZGU0VUCQkweDBkYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT182M19PRkZTRVQJCQkweDBkYgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1NJMV9GTEFHX1JYX09GRlNFVAkJMHgwZGMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NTSTFfUkRZX1JYX09GRlNFVAkJMHgwZGQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NTSTFfV0FLRV9PRkZTRVQJCTB4MGRlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TUEkxX0NMS19PRkZTRVQJCTB4MGRmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TUEkxX1NJTU9fT0ZGU0VUCQkweDBlMAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1BJMV9TT01JX09GRlNFVAkJMHgwZTEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTFfQ1MwX09GRlNFVAkJMHgwZTIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTFfQ1MxX09GRlNFVAkJMHgwZTMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTFfQ1MyX09GRlNFVAkJMHgwZTQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTFfQ1MzX09GRlNFVAkJMHgwZTUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTJfQ0xLX09GRlNFVAkJMHgwZTYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1NQSTJfU0lNT19PRkZTRVQJCTB4MGU3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9TUEkyX1NPTUlfT0ZGU0VUCQkweDBlOAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1BJMl9DUzBfT0ZGU0VUCQkweDBlOQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0NMS1JfT0ZGU0VUCQkweDBlYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0ZTUl9PRkZTRVQJCTB4MGViCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFhfT0ZGU0VUCQkweDBlYworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0RSX09GRlNFVAkJMHgwZWQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX01DQlNQX0NMS1NfT0ZGU0VUCQkweDBlZQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfTUNCU1AxX0ZTWF9PRkZTRVQJCTB4MGVmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9NQ0JTUDFfQ0xLWF9PRkZTRVQJCTB4MGYwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9JMkMxX1NDTF9PRkZTRVQJCTB4MGYxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9JMkMxX1NEQV9PRkZTRVQJCTB4MGYyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9JMkMyX1NDTF9PRkZTRVQJCTB4MGYzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9JMkMyX1NEQV9PRkZTRVQJCTB4MGY0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9IRFFfU0lPX09GRlNFVAkJCTB4MGY1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19DVFNfUkNUWF9PRkZTRVQJCTB4MGY2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19SVFNfU0RfT0ZGU0VUCQkweDBmNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVUFSVDNfVFhfSVJUWF9PRkZTRVQJCTB4MGY4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VQVJUM19SWF9JUlJYX09GRlNFVAkJMHgwZjkKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0dQSU9fN19PRkZTRVQJCQkweDBmYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT183OF9PRkZTRVQJCQkweDBmYgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT183OV9PRkZTRVQJCQkweDBmYworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT184MF9PRkZTRVQJCQkweDBmZAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMTNfT0ZGU0VUCQkweDBmZQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMTRfT0ZGU0VUCQkweDBmZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMTVfT0ZGU0VUCQkweDEwMAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfR1BJT18xMTZfT0ZGU0VUCQkweDEwMQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfU1lTX0RSTV9NU0VDVVJFX09GRlNFVAkJMHgxMDIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VTQjBIU19EQVRBM19PRkZTRVQJCTB4MTAzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VU0IwSFNfREFUQTRfT0ZGU0VUCQkweDEwNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVVNCMEhTX0RBVEE1X09GRlNFVAkJMHgxMDUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VTQjBIU19EQVRBNl9PRkZTRVQJCTB4MTA2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VU0IwSFNfREFUQTJfT0ZGU0VUCQkweDEwNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVVNCMEhTX0RBVEEwX09GRlNFVAkJMHgxMDgKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VTQjBIU19EQVRBMV9PRkZTRVQJCTB4MTA5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VU0IwSFNfQ0xLX09GRlNFVAkJMHgxMGEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VTQjBIU19ESVJfT0ZGU0VUCQkweDEwYgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVVNCMEhTX1NUUF9PRkZTRVQJCTB4MTBjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9VU0IwSFNfTlhUX09GRlNFVAkJMHgxMGQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1VTQjBIU19EQVRBN19PRkZTRVQJCTB4MTBlCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9UVl9PVVRfT0ZGU0VUCQkJMHgxMGYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1RWX1ZSRUZfT0ZGU0VUCQkJMHgxMTAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1RWX1JTRVRfT0ZGU0VUCQkJMHgxMTEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX1RWX1ZGQl9PRkZTRVQJCQkweDExMgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfVFZfREFDT1VUX09GRlNFVAkJMHgxMTMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMF9PRkZTRVQJCTB4MTE0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDFfT0ZGU0VUCQkweDExNQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQyX09GRlNFVAkJMHgxMTYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEM19PRkZTRVQJCTB4MTE3CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDRfT0ZGU0VUCQkweDExOAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQ1X09GRlNFVAkJMHgxMTkKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FENl9PRkZTRVQJCTB4MTFhCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDdfT0ZGU0VUCQkweDExYgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQ4X09GRlNFVAkJMHgxMWMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEOV9PRkZTRVQJCTB4MTFkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDEwX09GRlNFVAkJMHgxMWUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMTFfT0ZGU0VUCQkweDExZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQxMl9PRkZTRVQJCTB4MTIwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDEzX09GRlNFVAkJMHgxMjEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMTRfT0ZGU0VUCQkweDEyMgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQxNV9PRkZTRVQJCTB4MTIzCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDE2X09GRlNFVAkJMHgxMjQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMTdfT0ZGU0VUCQkweDEyNQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQxOF9PRkZTRVQJCTB4MTI2CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDE5X09GRlNFVAkJMHgxMjcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMjBfT0ZGU0VUCQkweDEyOAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQyMV9PRkZTRVQJCTB4MTI5CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDIyX09GRlNFVAkJMHgxMmEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMjNfT0ZGU0VUCQkweDEyYgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQyNF9PRkZTRVQJCTB4MTJjCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDI1X09GRlNFVAkJMHgxMmQKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMjZfT0ZGU0VUCQkweDEyZQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQyN19PRkZTRVQJCTB4MTJmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDI4X09GRlNFVAkJMHgxMzAKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMjlfT0ZGU0VUCQkweDEzMQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQzMF9PRkZTRVQJCTB4MTMyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDMxX09GRlNFVAkJMHgxMzMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMzJfT0ZGU0VUCQkweDEzNAorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQzM19PRkZTRVQJCTB4MTM1CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDM0X09GRlNFVAkJMHgxMzYKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNQ0FEMzVfT0ZGU0VUCQkweDEzNworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRE1DQUQzNl9PRkZTRVQJCTB4MTM4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETUNBRDM3X09GRlNFVAkJMHgxMzkKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRNV1JJVEVfT0ZGU0VUCQkweDEzYQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJEQ0xLMjZNSV9PRkZTRVQJCTB4MTNiCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkROUkVTUFdST04xX09GRlNFVAkJMHgxM2MKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRE5SRVNXQVJNX09GRlNFVAkJMHgxM2QKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyREFSTTlOSVJRX09GRlNFVAkJMHgxM2UKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRFVNQTJQNkZJUV9PRkZTRVQJCTB4MTNmCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRTUElOVF9PRkZTRVQJCTB4MTQwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRGUklOVF9PRkZTRVQJCTB4MTQxCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRETUFSRVEwX09GRlNFVAkJMHgxNDIKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRERNQVJFUTFfT0ZGU0VUCQkweDE0MworI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJERE1BUkVRMl9PRkZTRVQJCTB4MTQ0CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRETUFSRVEzX09GRlNFVAkJMHgxNDUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRE4zR1RSU1RfT0ZGU0VUCQkweDE0NgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJETjNHVERJX09GRlNFVAkJMHgxNDcKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRE4zR1RET19PRkZTRVQJCTB4MTQ4CisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkROM0dUTVNfT0ZGU0VUCQkweDE0OQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJETjNHVENLX09GRlNFVAkJMHgxNGEKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRE4zR1JUQ0tfT0ZGU0VUCQkweDE0YgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJETVNUREJZX09GRlNFVAkJMHgxNGMKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0FEMkRTUkVBRF9PRkZTRVQJCTB4MTRkCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRTV0FLRVVQX09GRlNFVAkJMHgxNGUKKyNkZWZpbmUgT01BUDI0MzBfQ09OVFJPTF9QQURDT05GX0QyRElETEVSRVFfT0ZGU0VUCQkweDE0ZgorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfRDJESURMRUFDS19PRkZTRVQJCTB4MTUwCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9EMkRTUEFSRTBfT0ZGU0VUCQkweDE1MQorI2RlZmluZSBPTUFQMjQzMF9DT05UUk9MX1BBRENPTkZfQUQyRFNXUklURV9PRkZTRVQJCTB4MTUyCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETVJFQURfT0ZGU0VUCQkweDE1MworCisjZGVmaW5lIE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9NVVhfU0laRQkJCVwKKwkJKE9NQVAyNDMwX0NPTlRST0xfUEFEQ09ORl9BRDJETVJFQURfT0ZGU0VUICsgMHgxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXgzNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwppbmRleCAyZmY0ZGNlLi5mNjRkN2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eDM0eHguYwpAQCAtMjAzMiwxOSArMjAzMiwxOSBAQAogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHM7CiAKIAlzd2l0Y2ggKGZsYWdzICYgT01BUF9QQUNLQUdFX01BU0spIHsKLQljYXNlIChPTUFQX1BBQ0tBR0VfQ0JDKToKKwljYXNlIE9NQVBfUEFDS0FHRV9DQkM6CiAJCXBhY2thZ2Vfc3Vic2V0ID0gb21hcDNfY2JjX3N1YnNldDsKIAkJcGFja2FnZV9iYWxscyA9IG9tYXAzX2NiY19iYWxsOwogCQlicmVhazsKLQljYXNlIChPTUFQX1BBQ0tBR0VfQ0JCKToKKwljYXNlIE9NQVBfUEFDS0FHRV9DQkI6CiAJCXBhY2thZ2Vfc3Vic2V0ID0gb21hcDNfY2JiX3N1YnNldDsKIAkJcGFja2FnZV9iYWxscyA9IG9tYXAzX2NiYl9iYWxsOwogCQlicmVhazsKLQljYXNlIChPTUFQX1BBQ0tBR0VfQ1VTKToKKwljYXNlIE9NQVBfUEFDS0FHRV9DVVM6CiAJCXBhY2thZ2Vfc3Vic2V0ID0gb21hcDNfY3VzX3N1YnNldDsKIAkJcGFja2FnZV9iYWxscyA9IG9tYXAzX2N1c19iYWxsOwogCQlicmVhazsKLQljYXNlIChPTUFQX1BBQ0tBR0VfQ0JQKToKKwljYXNlIE9NQVBfUEFDS0FHRV9DQlA6CiAJCXBhY2thZ2Vfc3Vic2V0ID0gb21hcDM2eHhfY2JwX3N1YnNldDsKIAkJcGFja2FnZV9iYWxscyA9IG9tYXAzNnh4X2NicF9iYWxsOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaGVhZHNtcC5TCmluZGV4IGVmMGU3YTAuLjZhZTkzN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1oZWFkc21wLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWhlYWRzbXAuUwpAQCAtNDcsMTkgKzQ3LDMgQEAKIAliCXNlY29uZGFyeV9zdGFydHVwCiBFTkQob21hcF9zZWNvbmRhcnlfc3RhcnR1cCkKIAotCi1FTlRSWShvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDApCi0Jc3RtZmQgICBzcCEsIHtyMS1yMTIsIGxyfQotCWxkcglyMTIsID0weDEwNAotCWRzYgotCXNtYwkjMAotCWxkbWZkICAgc3AhLCB7cjEtcjEyLCBwY30KLUVORChvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDApCi0KLUVOVFJZKG9tYXBfYXV4Y29yZWJvb3RfYWRkcikKLQlzdG1mZCAgIHNwISwge3IyLXIxMiwgbHJ9Ci0JbGRyCXIxMiwgPTB4MTA1Ci0JZHNiCi0Jc21jCSMwCi0JbGRtZmQgICBzcCEsIHtyMi1yMTIsIHBjfQotRU5EKG9tYXBfYXV4Y29yZWJvb3RfYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZWU0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaG90cGx1Zy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBPTUFQNCBTTVAgY3B1LWhvdHBsdWcgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQXV0aG9yOgorICogICAgICBTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoKKyAqIFBsYXRmb3JtIGZpbGUgbmVlZGVkIGZvciB0aGUgT01BUDQgU01QLiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gYXJtCisgKiByZWFsdmlldyBzbXAgcGxhdGZvcm0uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgQVJNIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPG1hY2gvb21hcDQtY29tbW9uLmg+CisKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY3B1X2tpbGxlZCk7CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9raWxsZWQsIDUwMDApOworfQorCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZAorICovCit2b2lkIHBsYXRmb3JtX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgIT0gdGhpc19jcHUpIHsKKwkJcHJfY3JpdCgicGxhdGZvcm1fY3B1X2RpZSBydW5uaW5nIG9uICV1LCBzaG91bGQgYmUgJXVcbiIsCisJCQkgICB0aGlzX2NwdSwgY3B1KTsKKwkJQlVHKCk7CisJfQorCXByX25vdGljZSgiQ1BVJXU6IHNodXRkb3duXG4iLCBjcHUpOworCWNvbXBsZXRlKCZjcHVfa2lsbGVkKTsKKwlmbHVzaF9jYWNoZV9hbGwoKTsKKwlkc2IoKTsKKworCS8qCisJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKKwkgKi8KKwlpZiAob21hcF9tb2RpZnlfYXV4Y29yZWJvb3QwKDB4MCwgMHgyMDApICE9IDB4MCkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiU2VjdXJlIGNsZWFyIHN0YXR1cyBmYWlsZWRcbiIpOworCisJZm9yICg7OykgeworCQkvKgorCQkgKiBFeGVjdXRlIFdGSQorCQkgKi8KKwkJZG9fd2ZpKCk7CisKKwkJaWYgKG9tYXBfcmVhZF9hdXhjb3JlYm9vdDAoKSA9PSBjcHUpIHsKKwkJCS8qCisJCQkgKiBPSywgcHJvcGVyIHdha2V1cCwgd2UncmUgZG9uZQorCQkJICovCisJCQlicmVhazsKKwkJfQorCQlwcl9kZWJ1ZygiQ1BVJXU6IHNwdXJpb3VzIHdha2V1cCBjYWxsXG4iLCBjcHUpOworCX0KK30KKworaW50IHBsYXRmb3JtX2NwdV9kaXNhYmxlKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyoKKwkgKiB3ZSBkb24ndCBhbGxvdyBDUFUgMCB0byBiZSBzaHV0ZG93biAoaXQgaXMgc3RpbGwgdG9vIHNwZWNpYWwKKwkgKiBlLmcuIGNsb2NrIHRpY2sgaW50ZXJydXB0cykKKwkgKi8KKwlyZXR1cm4gY3B1ID09IDAgPyAtRVBFUk0gOiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYwppbmRleCBlYjliZWU3Li5mNWExYWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYwpAQCAtNTksNyArNTksNyBAQAogc3RhdGljIHN0cnVjdCBpb21tdV9kZXZpY2Ugb21hcDRfZGV2aWNlc1tdID0gewogCXsKIAkJLmJhc2UgPSBPTUFQNF9NTVUxX0JBU0UsCi0JCS5pcnEgPSBJTlRfNDRYWF9EVUNBVElfTU1VX0lSUSwKKwkJLmlycSA9IE9NQVA0NFhYX0lSUV9EVUNBVElfTU1VLAogCQkucGRhdGEgPSB7CiAJCQkubmFtZSA9ICJkdWNhdGkiLAogCQkJLm5yX3RsYl9lbnRyaWVzID0gMzIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtc21wLmMKaW5kZXggMWNmNTIzMS4uYWYzYzIwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLXNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcC1zbXAuYwpAQCAtNzMsOSArNzMsMTAgQEAKIAkgKiB0aGUgQXV4Q29yZUJvb3QxIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgd2l0aCBjcHUgc3RhdGUKIAkgKiBBIGJhcnJpZXIgaXMgYWRkZWQgdG8gZW5zdXJlIHRoYXQgd3JpdGUgYnVmZmVyIGlzIGRyYWluZWQKIAkgKi8KLQlvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDAoMHgyMDAsIDB4MCk7CisJb21hcF9tb2RpZnlfYXV4Y29yZWJvb3QwKDB4MjAwLCAweGZmZmZmZGZmKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAlzbXBfd21iKCk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpKTsKIAogCS8qCiAJICogTm93IHRoZSBzZWNvbmRhcnkgY29yZSBpcyBzdGFydGluZyB1cCBsZXQgaXQgcnVuIGl0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNDR4eC1zbWMuUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQ0eHgtc21jLlMKaW5kZXggZjYxYzc3Ny4uMTk4MGRjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNDR4eC1zbWMuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0NHh4LXNtYy5TCkBAIC0zMCwzICszMCwyOCBAQAogCXNtYwkjMAogCWxkbWZkICAgc3AhLCB7cjItcjEyLCBwY30KIEVORChvbWFwX3NtYzEpCisKK0VOVFJZKG9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCkKKwlzdG1mZCAgIHNwISwge3IxLXIxMiwgbHJ9CisJbGRyCXIxMiwgPTB4MTA0CisJZHNiCisJc21jCSMwCisJbGRtZmQgICBzcCEsIHtyMS1yMTIsIHBjfQorRU5EKG9tYXBfbW9kaWZ5X2F1eGNvcmVib290MCkKKworRU5UUlkob21hcF9hdXhjb3JlYm9vdF9hZGRyKQorCXN0bWZkICAgc3AhLCB7cjItcjEyLCBscn0KKwlsZHIJcjEyLCA9MHgxMDUKKwlkc2IKKwlzbWMJIzAKKwlsZG1mZCAgIHNwISwge3IyLXIxMiwgcGN9CitFTkQob21hcF9hdXhjb3JlYm9vdF9hZGRyKQorCitFTlRSWShvbWFwX3JlYWRfYXV4Y29yZWJvb3QwKQorCXN0bWZkICAgc3AhLCB7cjItcjEyLCBscn0KKwlsZHIJcjEyLCA9MHgxMDMKKwlkc2IKKwlzbWMJIzAKKwltb3YJcjAsIHIwLCBsc3IgIzkKKwlsZG1mZCAgIHNwISwge3IyLXIxMiwgcGN9CitFTkQob21hcF9yZWFkX2F1eGNvcmVib290MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKaW5kZXggYjdhNDEzMy4uY2I5MTFkNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogb21hcF9od21vZCBpbXBsZW1lbnRhdGlvbiBmb3IgT01BUDIvMy80CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFBhdWwgV2FsbXNsZXksIEJlbm/DrnQgQ291c3NvbiwgS2V2aW4gSGlsbWFuCiAgKgpAQCAtNDIzLDcgKzQyMyw3IEBACiB9CiAKIC8qKgotICogX2luaXRfaW50ZXJmYWNlX2NsayAtIGdldCBhIHN0cnVjdCBjbGsgKiBmb3IgdGhlIHRoZSBod21vZCdzIGludGVyZmFjZSBjbGtzCisgKiBfaW5pdF9pbnRlcmZhY2VfY2xrcyAtIGdldCBhIHN0cnVjdCBjbGsgKiBmb3IgdGhlIHRoZSBod21vZCdzIGludGVyZmFjZSBjbGtzCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCiAgKiBDYWxsZWQgZnJvbSBfaW5pdF9jbG9ja3MoKS4gIFBvcHVsYXRlcyB0aGUgQG9oIE9DUCBzbGF2ZSBpbnRlcmZhY2UKQEAgLTc2NCw2ICs3NjQsNyBAQAogLyoqCiAgKiBfaW5pdF9jbG9ja3MgLSBjbGtfZ2V0KCkgYWxsIGNsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBod21vZAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCisgKiBAZGF0YTogbm90IHVzZWQ7IHBhc3MgTlVMTAogICoKICAqIENhbGxlZCBieSBvbWFwX2h3bW9kX2xhdGVfaW5pdCgpIChhZnRlciBvbWFwMl9jbGtfaW5pdCgpKS4KICAqIFJlc29sdmVzIGFsbCBjbG9jayBuYW1lcyBlbWJlZGRlZCBpbiB0aGUgaHdtb2QuICBNdXN0IGJlIGNhbGxlZApAQCAtNzcxLDcgKzc3Miw3IEBACiAgKiBoYXMgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQgb3IgaWYgdGhlIGNsb2NrcyBoYXZlIGFscmVhZHkgYmVlbgogICogaW5pdGlhbGl6ZWQsIDAgb24gc3VjY2Vzcywgb3IgYSBub24temVybyBlcnJvciBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IF9pbml0X2Nsb2NrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCitzdGF0aWMgaW50IF9pbml0X2Nsb2NrcyhzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldCA9IDA7CiAKQEAgLTg4Niw3ICs4ODcsNyBAQAogfQogCiAvKioKLSAqIF9lbmFibGUgLSBlbmFibGUgYW4gb21hcF9od21vZAorICogX29tYXBfaHdtb2RfZW5hYmxlIC0gZW5hYmxlIGFuIG9tYXBfaHdtb2QKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgogICoKICAqIEVuYWJsZXMgYW4gb21hcF9od21vZCBAb2ggc3VjaCB0aGF0IHRoZSBNUFUgY2FuIGFjY2VzcyB0aGUgaHdtb2QncwpAQCAtODk0LDcgKzg5NSw3IEBACiAgKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGh3bW9kIGlzIGluIHRoZSB3cm9uZyBzdGF0ZSBvciBwYXNzZXMgYWxvbmcKICAqIHRoZSByZXR1cm4gdmFsdWUgb2YgX3dhaXRfdGFyZ2V0X3JlYWR5KCkuCiAgKi8KLXN0YXRpYyBpbnQgX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCitpbnQgX29tYXBfaHdtb2RfZW5hYmxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAlpbnQgcjsKIApAQCAtOTM5LDcgKzk0MCw3IEBACiAgKiBubyBmdXJ0aGVyIHdvcmsuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIGh3bW9kIGlzIGluIHRoZSB3cm9uZwogICogc3RhdGUgb3IgcmV0dXJucyAwLgogICovCi1zdGF0aWMgaW50IF9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKK2ludCBfb21hcF9od21vZF9pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKIAlpZiAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfRU5BQkxFRCkgewogCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogaWRsZSBzdGF0ZSBjYW4gb25seSBiZSBlbnRlcmVkIGZyb20gIgpAQCAtOTk2LDE5ICs5OTcsMjUgQEAKIC8qKgogICogX3NldHVwIC0gZG8gaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIG9tYXBfaHdtb2QKICAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgorICogQHNraXBfc2V0dXBfaWRsZV9wOiBkbyBub3QgaWRsZSBod21vZHMgYXQgdGhlIGVuZCBvZiB0aGUgZm4gaWYgMQogICoKICAqIFdyaXRlcyB0aGUgQ0xPQ0tBQ1RJVklUWSBiaXRzIEBjbG9ja2FjdCB0byB0aGUgaHdtb2QgQG9oCi0gKiBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCBvbWFwX2h3bW9kX211dGV4Ci0gKiBoZWxkLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBod21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUgb3IgcmV0dXJucwotICogMC4KKyAqIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIuICBNdXN0IGJlIGNhbGxlZCB3aXRoIG9tYXBfaHdtb2RfbXV0ZXggaGVsZC4KKyAqIEBza2lwX3NldHVwX2lkbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHN5c3RlbSB0aGF0IHdpbGwgbm90CisgKiBjYWxsIG9tYXBfaHdtb2RfZW5hYmxlKCkgdG8gZW5hYmxlIGRldmljZXMgKGUuZy4sIGEgc3lzdGVtIHdpdGhvdXQKKyAqIFBNIHJ1bnRpbWUpLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBod21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUgb3IKKyAqIHJldHVybnMgMC4KICAqLwotc3RhdGljIGludCBfc2V0dXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQorc3RhdGljIGludCBfc2V0dXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpkYXRhKQogewogCWludCBpLCByOworCXU4IHNraXBfc2V0dXBfaWRsZTsKIAotCWlmICghb2gpCisJaWYgKCFvaCB8fCAhZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlza2lwX3NldHVwX2lkbGUgPSAqKHU4ICopZGF0YTsKKwogCS8qIFNldCBpY2xrIGF1dG9pZGxlIG1vZGUgKi8KIAlpZiAob2gtPnNsYXZlc19jbnQgPiAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBvaC0+c2xhdmVzX2NudDsgaSsrKSB7CkBAIC0xMDI5LDcgKzEwMzYsNyBAQAogCiAJb2gtPl9zdGF0ZSA9IF9IV01PRF9TVEFURV9JTklUSUFMSVpFRDsKIAotCXIgPSBfZW5hYmxlKG9oKTsKKwlyID0gX29tYXBfaHdtb2RfZW5hYmxlKG9oKTsKIAlpZiAocikgewogCQlwcl93YXJuaW5nKCJvbWFwX2h3bW9kOiAlczogY2Fubm90IGJlIGVuYWJsZWQgKCVkKVxuIiwKIAkJCSAgIG9oLT5uYW1lLCBvaC0+X3N0YXRlKTsKQEAgLTEwNDEsNyArMTA0OCw3IEBACiAJCSAqIFhYWCBEbyB0aGUgT0NQX1NZU0NPTkZJRyBiaXRzIG5lZWQgdG8gYmUKIAkJICogcmVwcm9ncmFtbWVkIGFmdGVyIGEgcmVzZXQ/ICBJZiBub3QsIHRoZW4gdGhpcyBjYW4KIAkJICogYmUgcmVtb3ZlZC4gIElmIHRoZXkgZG8sIHRoZW4gcHJvYmFibHkgdGhlCi0JCSAqIF9lbmFibGUoKSBmdW5jdGlvbiBzaG91bGQgYmUgc3BsaXQgdG8gYXZvaWQgdGhlCisJCSAqIF9vbWFwX2h3bW9kX2VuYWJsZSgpIGZ1bmN0aW9uIHNob3VsZCBiZSBzcGxpdCB0byBhdm9pZCB0aGUKIAkJICogcmV3cml0ZSBvZiB0aGUgT0NQX1NZU0NPTkZJRyByZWdpc3Rlci4KIAkJICovCiAJCWlmIChvaC0+Y2xhc3MtPnN5c2MpIHsKQEAgLTEwNTAsOCArMTA1Nyw4IEBACiAJCX0KIAl9CiAKLQlpZiAoIShvaC0+ZmxhZ3MgJiBIV01PRF9JTklUX05PX0lETEUpKQotCQlfaWRsZShvaCk7CisJaWYgKCEob2gtPmZsYWdzICYgSFdNT0RfSU5JVF9OT19JRExFKSAmJiAhc2tpcF9zZXR1cF9pZGxlKQorCQlfb21hcF9od21vZF9pZGxlKG9oKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTA2MiwxNCArMTA2OSwyOSBAQAogCiB1MzIgb21hcF9od21vZF9yZWFkbChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHUxNiByZWdfb2ZmcykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZGwob2gtPl9ydF92YSArIHJlZ19vZmZzKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwob2gtPl9tcHVfcnRfdmEgKyByZWdfb2Zmcyk7CiB9CiAKIHZvaWQgb21hcF9od21vZF93cml0ZWwodTMyIHYsIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTE2IHJlZ19vZmZzKQogewotCV9fcmF3X3dyaXRlbCh2LCBvaC0+X3J0X3ZhICsgcmVnX29mZnMpOworCV9fcmF3X3dyaXRlbCh2LCBvaC0+X21wdV9ydF92YSArIHJlZ19vZmZzKTsKIH0KIAorLyoqCisgKiBvbWFwX2h3bW9kX3NldF9zbGF2ZV9pZGxlbW9kZSAtIHNldCB0aGUgaHdtb2QncyBPQ1Agc2xhdmUgaWRsZW1vZGUKKyAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgorICogQGlkbGVtb2RlOiBTSURMRU1PREUgZmllbGQgYml0cyAoc2hpZnRlZCB0byBiaXQgMCkKKyAqCisgKiBTZXRzIHRoZSBJUCBibG9jaydzIE9DUCBzbGF2ZSBpZGxlbW9kZSBpbiBoYXJkd2FyZSwgYW5kIHVwZGF0ZXMgb3VyCisgKiBsb2NhbCBjb3B5LiAgSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBkcml2ZXJzIHRoYXQgaGF2ZSBzb21lIGVycmF0dW0KKyAqIHRoYXQgcmVxdWlyZXMgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB0aGUgU0lETEVNT0RFIGJpdHMuICBSZXR1cm5zCisgKiAtRUlOVkFMIGlmIEBvaCBpcyBudWxsLCBvciBwYXNzZXMgYWxvbmcgdGhlIHJldHVybiB2YWx1ZSBmcm9tCisgKiBfc2V0X3NsYXZlX2lkbGVtb2RlKCkuCisgKgorICogWFhYIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFueSBjdXJyZW50IHVzZXJzPyAgSWYgbm90LCB3ZSBzaG91bGQKKyAqIHJlbW92ZSBpdDsgaXQgaXMgYmV0dGVyIHRvIGxldCB0aGUgcmVzdCBvZiB0aGUgaHdtb2QgY29kZSBoYW5kbGUgdGhpcy4KKyAqIEFueSB1c2VycyBvZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBzY3J1dGluaXplZCBjYXJlZnVsbHkuCisgKi8KIGludCBvbWFwX2h3bW9kX3NldF9zbGF2ZV9pZGxlbW9kZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IGlkbGVtb2RlKQogewogCXUzMiB2OwpAQCAtMTEyNCw3ICsxMTQ2LDcgQEAKIAltc19pZCA9IF9maW5kX21wdV9wb3J0X2luZGV4KG9oKTsKIAlpZiAoIUlTX0VSUl9WQUxVRShtc19pZCkpIHsKIAkJb2gtPl9tcHVfcG9ydF9pbmRleCA9IG1zX2lkOwotCQlvaC0+X3J0X3ZhID0gX2ZpbmRfbXB1X3J0X2Jhc2Uob2gsIG9oLT5fbXB1X3BvcnRfaW5kZXgpOworCQlvaC0+X21wdV9ydF92YSA9IF9maW5kX21wdV9ydF9iYXNlKG9oLCBvaC0+X21wdV9wb3J0X2luZGV4KTsKIAl9IGVsc2UgewogCQlvaC0+X2ludF9mbGFncyB8PSBfSFdNT0RfTk9fTVBVX1BPUlQ7CiAJfQpAQCAtMTE2NCw2ICsxMTg2LDcgQEAKIC8qKgogICogb21hcF9od21vZF9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBvbWFwX2h3bW9kCiAgKiBAZm46IHBvaW50ZXIgdG8gYSBjYWxsYmFjayBmdW5jdGlvbgorICogQGRhdGE6IHZvaWQgKiBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KICAqCiAgKiBDYWxsIEBmbiBmb3IgZWFjaCByZWdpc3RlcmVkIG9tYXBfaHdtb2QsIHBhc3NpbmcgQGRhdGEgdG8gZWFjaAogICogZnVuY3Rpb24uICBAZm4gbXVzdCByZXR1cm4gMCBmb3Igc3VjY2VzcyBvciBhbnkgb3RoZXIgdmFsdWUgZm9yCkBAIC0xMTcyLDcgKzExOTUsOCBAQAogICogY2FsbGVyIG9mIG9tYXBfaHdtb2RfZm9yX2VhY2goKS4gIEBmbiBpcyBjYWxsZWQgd2l0aAogICogb21hcF9od21vZF9mb3JfZWFjaCgpIGhlbGQuCiAgKi8KLWludCBvbWFwX2h3bW9kX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpKQoraW50IG9tYXBfaHdtb2RfZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqZGF0YSksCisJCQl2b2lkICpkYXRhKQogewogCXN0cnVjdCBvbWFwX2h3bW9kICp0ZW1wX29oOwogCWludCByZXQ7CkBAIC0xMTgyLDcgKzEyMDYsNyBAQAogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX29oLCAmb21hcF9od21vZF9saXN0LCBub2RlKSB7Ci0JCXJldCA9ICgqZm4pKHRlbXBfb2gpOworCQlyZXQgPSAoKmZuKSh0ZW1wX29oLCBkYXRhKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KQEAgLTEyMjksMjQgKzEyNTMsMjggQEAKIAogLyoqCiAgKiBvbWFwX2h3bW9kX2xhdGVfaW5pdCAtIGRvIHNvbWUgcG9zdC1jbG9jayBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb24KKyAqIEBza2lwX3NldHVwX2lkbGU6IGlmIDEsIGRvIG5vdCBpZGxlIGh3bW9kcyBpbiBfc2V0dXAoKQogICoKICAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIG9tYXAyX2Nsa19pbml0KCkuICBSZXNvbHZlcyB0aGUgc3RydWN0IGNsayBuYW1lcwogICogdG8gc3RydWN0IGNsayBwb2ludGVycyBmb3IgZWFjaCByZWdpc3RlcmVkIG9tYXBfaHdtb2QuICBBbHNvIGNhbGxzCiAgKiBfc2V0dXAoKSBvbiBlYWNoIGh3bW9kLiAgUmV0dXJucyAwLgogICovCi1pbnQgb21hcF9od21vZF9sYXRlX2luaXQodm9pZCkKK2ludCBvbWFwX2h3bW9kX2xhdGVfaW5pdCh1OCBza2lwX3NldHVwX2lkbGUpCiB7CiAJaW50IHI7CiAKIAkvKiBYWFggY2hlY2sgcmV0dXJuIHZhbHVlICovCi0JciA9IG9tYXBfaHdtb2RfZm9yX2VhY2goX2luaXRfY2xvY2tzKTsKKwlyID0gb21hcF9od21vZF9mb3JfZWFjaChfaW5pdF9jbG9ja3MsIE5VTEwpOwogCVdBUk4ociwgIm9tYXBfaHdtb2Q6IG9tYXBfaHdtb2RfbGF0ZV9pbml0KCk6IF9pbml0X2Nsb2NrcyBmYWlsZWRcbiIpOwogCiAJbXB1X29oID0gb21hcF9od21vZF9sb29rdXAoTVBVX0lOSVRJQVRPUl9OQU1FKTsKIAlXQVJOKCFtcHVfb2gsICJvbWFwX2h3bW9kOiBjb3VsZCBub3QgZmluZCBNUFUgaW5pdGlhdG9yIGh3bW9kICVzXG4iLAogCSAgICAgTVBVX0lOSVRJQVRPUl9OQU1FKTsKIAotCW9tYXBfaHdtb2RfZm9yX2VhY2goX3NldHVwKTsKKwlpZiAoc2tpcF9zZXR1cF9pZGxlKQorCQlwcl9kZWJ1Zygib21hcF9od21vZDogd2lsbCBsZWF2ZSBod21vZHMgZW5hYmxlZCBkdXJpbmcgc2V0dXBcbiIpOworCisJb21hcF9od21vZF9mb3JfZWFjaChfc2V0dXAsICZza2lwX3NldHVwX2lkbGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjcwLDcgKzEyOTgsNyBAQAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogdW5yZWdpc3RlcmluZ1xuIiwgb2gtPm5hbWUpOwogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7Ci0JaW91bm1hcChvaC0+X3J0X3ZhKTsKKwlpb3VubWFwKG9oLT5fbXB1X3J0X3ZhKTsKIAlsaXN0X2RlbCgmb2gtPm5vZGUpOwogCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7CiAKQEAgLTEyOTIsMTIgKzEzMjAsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKLQlyID0gX2VuYWJsZShvaCk7CisJciA9IF9vbWFwX2h3bW9kX2VuYWJsZShvaCk7CiAJbXV0ZXhfdW5sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKIAogCXJldHVybiByOwogfQogCisKIC8qKgogICogb21hcF9od21vZF9pZGxlIC0gaWRsZSBhbiBvbWFwX2h3bW9kCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKQEAgLTEzMTEsNyArMTM0MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7Ci0JX2lkbGUob2gpOworCV9vbWFwX2h3bW9kX2lkbGUob2gpOwogCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE0MTMsNyArMTQ0Miw3IEBACiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CiAJciA9IF9yZXNldChvaCk7CiAJaWYgKCFyKQotCQlyID0gX2VuYWJsZShvaCk7CisJCXIgPSBfb21hcF9od21vZF9lbmFibGUob2gpOwogCW11dGV4X3VubG9jaygmb21hcF9od21vZF9tdXRleCk7CiAKIAlyZXR1cm4gcjsKQEAgLTE1MzAsNiArMTU1OSwyOSBAQAogfQogCiAvKioKKyAqIG9tYXBfaHdtb2RfZ2V0X21wdV9ydF92YSAtIHJldHVybiB0aGUgbW9kdWxlJ3MgYmFzZSBhZGRyZXNzIChmb3IgdGhlIE1QVSkKKyAqIEBvaDogc3RydWN0IG9tYXBfaHdtb2QgKgorICoKKyAqIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgKiBtb2R1bGUncyByZWdpc3RlciB0YXJnZXQsIGluIHRoZSBhZGRyZXNzIHJhbmdlIHRoYXQgaXMgaW50ZW5kZWQgdG8KKyAqIGJlIHVzZWQgYnkgdGhlIE1QVS4gIFJldHVybnMgdGhlIHZpcnR1YWwgYWRkcmVzcyB1cG9uIHN1Y2Nlc3Mgb3IgTlVMTAorICogdXBvbiBlcnJvci4KKyAqLwordm9pZCBfX2lvbWVtICpvbWFwX2h3bW9kX2dldF9tcHVfcnRfdmEoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQoreworCWlmICghb2gpCisJCXJldHVybiBOVUxMOworCisJaWYgKG9oLT5faW50X2ZsYWdzICYgX0hXTU9EX05PX01QVV9QT1JUKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChvaC0+X3N0YXRlID09IF9IV01PRF9TVEFURV9VTktOT1dOKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBvaC0+X21wdV9ydF92YTsKK30KKworLyoqCiAgKiBvbWFwX2h3bW9kX2FkZF9pbml0aWF0b3JfZGVwIC0gYWRkIHNsZWVwZGVwIGZyb20gQGluaXRfb2ggdG8gQG9oCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqIEBpbml0X29oOiBzdHJ1Y3Qgb21hcF9od21vZCAqIChpbml0aWF0b3IpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKaW5kZXggZTU1MzBjNS4uM2NjNzY4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYwpAQCAtMzAsNDIgKzMwLDQ0IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21wdV9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9pdmFfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDNfbWFpbl9od21vZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF9jb3JlX2h3bW9kOwogCiAvKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sM19fbDRfY29yZSA9IHsKLQkubWFzdGVyCT0gJm9tYXAyNDIwX2wzX2h3bW9kLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9sM19tYWluX19sNF9jb3JlID0geworCS5tYXN0ZXIJPSAmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKIAkuc2xhdmUJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKIAkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX21wdV9fbDMgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX21wdV9fbDNfbWFpbiA9IHsKIAkubWFzdGVyID0gJm9tYXAyNDIwX21wdV9od21vZCwKLQkuc2xhdmUJPSAmb21hcDI0MjBfbDNfaHdtb2QsCisJLnNsYXZlCT0gJm9tYXAyNDIwX2wzX21haW5faHdtb2QsCiAJLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCiB9OwogCiAvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2wzX3NsYXZlc1tdID0gewotCSZvbWFwMjQyMF9tcHVfX2wzLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfbWFpbl9zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbXB1X19sM19tYWluLAogfTsKIAogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfbWFzdGVyc1tdID0gewotCSZvbWFwMjQyMF9sM19fbDRfY29yZSwKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2wzX21haW5fbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9sM19tYWluX19sNF9jb3JlLAogfTsKIAogLyogTDMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19od21vZCA9IHsKLQkubmFtZQkJPSAibDNfaHdtb2QiLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2wzX21haW5faHdtb2QgPSB7CisJLm5hbWUJCT0gImwzX21haW4iLAogCS5jbGFzcwkJPSAmbDNfaHdtb2RfY2xhc3MsCi0JLm1hc3RlcnMJPSBvbWFwMjQyMF9sM19tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDNfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMjQyMF9sM19zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2wzX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCisJLm1hc3RlcnMJPSBvbWFwMjQyMF9sM19tYWluX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sM19tYWluX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDNfbWFpbl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2wzX21haW5fc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF93a3VwX2h3bW9kOwpAQCAtNzksNyArODEsNyBAQAogCiAvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDRfY29yZV9zbGF2ZXNbXSA9IHsKLQkmb21hcDI0MjBfbDNfX2w0X2NvcmUsCisJJm9tYXAyNDIwX2wzX21haW5fX2w0X2NvcmUsCiB9OwogCiAvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KQEAgLTg5LDEzICs5MSwxNCBAQAogCiAvKiBMNCBDT1JFICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfY29yZV9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfY29yZV9od21vZCIsCisJLm5hbWUJCT0gImw0X2NvcmUiLAogCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCiAJLm1hc3RlcnMJPSBvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMsCiAJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnMpLAogCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDRfY29yZV9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X2NvcmVfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCkBAIC0xMDksMTggKzExMiwxOSBAQAogCiAvKiBMNCBXS1VQICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfd2t1cF9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfd2t1cF9od21vZCIsCisJLm5hbWUJCT0gImw0X3drdXAiLAogCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCiAJLm1hc3RlcnMJPSBvbWFwMjQyMF9sNF93a3VwX21hc3RlcnMsCiAJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF93a3VwX21hc3RlcnMpLAogCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDRfd2t1cF9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X3drdXBfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9tcHVfbWFzdGVyc1tdID0gewotCSZvbWFwMjQyMF9tcHVfX2wzLAorCSZvbWFwMjQyMF9tcHVfX2wzX21haW4sCiB9OwogCiAvKiBNUFUgKi8KQEAgLTEzMywxMSArMTM3LDQwIEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAogfTsKIAorLyoKKyAqIElWQTEgaW50ZXJmYWNlIGRhdGEKKyAqLworCisvKiBJVkEgPC0gTDMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2wzX19pdmEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAyNDIwX2l2YV9od21vZCwKKwkuY2xrCQk9ICJpdmExX2lmY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9pdmFfbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9sM19faXZhLAorfTsKKworLyoKKyAqIElWQTIgKElWQTIpCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2l2YV9od21vZCA9IHsKKwkubmFtZQkJPSAiaXZhIiwKKwkuY2xhc3MJCT0gJml2YV9od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDIwX2l2YV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfaXZhX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDIwX2h3bW9kc1tdID0gewotCSZvbWFwMjQyMF9sM19od21vZCwKKwkmb21hcDI0MjBfbDNfbWFpbl9od21vZCwKIAkmb21hcDI0MjBfbDRfY29yZV9od21vZCwKIAkmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKIAkmb21hcDI0MjBfbXB1X2h3bW9kLAorCSZvbWFwMjQyMF9pdmFfaHdtb2QsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCAwODUyZDk1Li40NTI2NjI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0zMCw0NyArMzAsNDcgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbXB1X2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2wzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2l2YV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sM19tYWluX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X2NvcmVfaHdtb2Q7CiAKIC8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2wzX19sNF9jb3JlID0gewotCS5tYXN0ZXIJPSAmb21hcDI0MzBfbDNfaHdtb2QsCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2wzX21haW5fX2w0X2NvcmUgPSB7CisJLm1hc3Rlcgk9ICZvbWFwMjQzMF9sM19tYWluX2h3bW9kLAogCS5zbGF2ZQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAogCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKIC8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbXB1X19sMyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbXB1X19sM19tYWluID0gewogCS5tYXN0ZXIgPSAmb21hcDI0MzBfbXB1X2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMjQzMF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MzBfbDNfbWFpbl9od21vZCwKIAkudXNlcgk9IE9DUF9VU0VSX01QVSwKIH07CiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDNfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDMwX21wdV9fbDMsCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sM19tYWluX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9tcHVfX2wzX21haW4sCiB9OwogCiAvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sM19tYXN0ZXJzW10gPSB7Ci0JJm9tYXAyNDMwX2wzX19sNF9jb3JlLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDNfbWFpbl9tYXN0ZXJzW10gPSB7CisJJm9tYXAyNDMwX2wzX21haW5fX2w0X2NvcmUsCiB9OwogCiAvKiBMMyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2wzX2h3bW9kID0gewotCS5uYW1lCQk9ICJsM19od21vZCIsCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfbWFpbl9od21vZCA9IHsKKwkubmFtZQkJPSAibDNfbWFpbiIsCiAJLmNsYXNzCQk9ICZsM19od21vZF9jbGFzcywKLQkubWFzdGVycwk9IG9tYXAyNDMwX2wzX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sM19tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDMwX2wzX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDNfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwkubWFzdGVycwk9IG9tYXAyNDMwX2wzX21haW5fbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2wzX21haW5fbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9sM19tYWluX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDNfbWFpbl9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X3drdXBfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMV9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tbWMyX2h3bW9kOwogCiAvKiBMNF9DT1JFIC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2w0X3drdXAgPSB7CkBAIC04MSw3ICs4MSw3IEBACiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF9jb3JlX3NsYXZlc1tdID0gewotCSZvbWFwMjQzMF9sM19fbDRfY29yZSwKKwkmb21hcDI0MzBfbDNfbWFpbl9fbDRfY29yZSwKIH07CiAKIC8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwpAQCAtOTEsMTMgKzkxLDE0IEBACiAKIC8qIEw0IENPUkUgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF9jb3JlX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF9jb3JlX2h3bW9kIiwKKwkubmFtZQkJPSAibDRfY29yZSIsCiAJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKIAkubWFzdGVycwk9IG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycywKIAkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycyksCiAJLnNsYXZlcwkJPSBvbWFwMjQzMF9sNF9jb3JlX3NsYXZlcywKIAkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfY29yZV9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAogfTsKIAogLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KQEAgLTExMSwxOCArMTEyLDE5IEBACiAKIC8qIEw0IFdLVVAgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF93a3VwX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF93a3VwX2h3bW9kIiwKKwkubmFtZQkJPSAibDRfd2t1cCIsCiAJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKIAkubWFzdGVycwk9IG9tYXAyNDMwX2w0X3drdXBfbWFzdGVycywKIAkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X3drdXBfbWFzdGVycyksCiAJLnNsYXZlcwkJPSBvbWFwMjQzMF9sNF93a3VwX3NsYXZlcywKIAkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfd2t1cF9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKKwkuZmxhZ3MJCT0gSFdNT0RfTk9fSURMRVNULAogfTsKIAogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIE1QVSBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX21wdV9tYXN0ZXJzW10gPSB7Ci0JJm9tYXAyNDMwX21wdV9fbDMsCisJJm9tYXAyNDMwX21wdV9fbDNfbWFpbiwKIH07CiAKIC8qIE1QVSAqLwpAQCAtMTM1LDExICsxMzcsNDAgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCiB9OwogCisvKgorICogSVZBMl8xIGludGVyZmFjZSBkYXRhCisgKi8KKworLyogSVZBMiA8LSBMMyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbDNfX2l2YSA9IHsKKwkubWFzdGVyCQk9ICZvbWFwMjQzMF9sM19tYWluX2h3bW9kLAorCS5zbGF2ZQkJPSAmb21hcDI0MzBfaXZhX2h3bW9kLAorCS5jbGsJCT0gImRzcF9mY2siLAorCS51c2VyCQk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9pdmFfbWFzdGVyc1tdID0geworCSZvbWFwMjQzMF9sM19faXZhLAorfTsKKworLyoKKyAqIElWQTIgKElWQTIpCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2l2YV9od21vZCA9IHsKKwkubmFtZQkJPSAiaXZhIiwKKwkuY2xhc3MJCT0gJml2YV9od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDMwX2l2YV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfaXZhX21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKwogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDMwX2h3bW9kc1tdID0gewotCSZvbWFwMjQzMF9sM19od21vZCwKKwkmb21hcDI0MzBfbDNfbWFpbl9od21vZCwKIAkmb21hcDI0MzBfbDRfY29yZV9od21vZCwKIAkmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKIAkmb21hcDI0MzBfbXB1X2h3bW9kLAorCSZvbWFwMjQzMF9pdmFfaHdtb2QsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYwppbmRleCAzOWIwYzBlLi41ZDhlYjU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCkBAIC0zMiw1MSArMzIsNTMgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbXB1X2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2wzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2l2YV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sM19tYWluX2h3bW9kOwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X2NvcmVfaHdtb2Q7CiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfcGVyX2h3bW9kOwogCiAvKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sM19fbDRfY29yZSA9IHsKLQkubWFzdGVyCT0gJm9tYXAzeHh4X2wzX2h3bW9kLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sM19tYWluX19sNF9jb3JlID0geworCS5tYXN0ZXIJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKIAkuc2xhdmUJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKIAkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCiB9OwogCiAvKiBMMyAtPiBMNF9QRVIgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2wzX19sNF9wZXIgPSB7Ci0JLm1hc3RlciA9ICZvbWFwM3h4eF9sM19od21vZCwKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDNfbWFpbl9fbDRfcGVyID0geworCS5tYXN0ZXIgPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKIAkuc2xhdmUJPSAmb21hcDN4eHhfbDRfcGVyX2h3bW9kLAogCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKIH07CiAKIC8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbXB1X19sMyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbXB1X19sM19tYWluID0gewogCS5tYXN0ZXIgPSAmb21hcDN4eHhfbXB1X2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwM3h4eF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKIAkudXNlcgk9IE9DUF9VU0VSX01QVSwKIH07CiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDNfc2xhdmVzW10gPSB7Ci0JJm9tYXAzeHh4X21wdV9fbDMsCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sM19tYWluX3NsYXZlc1tdID0geworCSZvbWFwM3h4eF9tcHVfX2wzX21haW4sCiB9OwogCiAvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sM19tYXN0ZXJzW10gPSB7Ci0JJm9tYXAzeHh4X2wzX19sNF9jb3JlLAotCSZvbWFwM3h4eF9sM19fbDRfcGVyLAorc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDNfbWFpbl9tYXN0ZXJzW10gPSB7CisJJm9tYXAzeHh4X2wzX21haW5fX2w0X2NvcmUsCisJJm9tYXAzeHh4X2wzX21haW5fX2w0X3BlciwKIH07CiAKIC8qIEwzICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDNfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImwzX2h3bW9kIiwKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sM19tYWluX2h3bW9kID0geworCS5uYW1lCQk9ICJsM19tYWluIiwKIAkuY2xhc3MJCT0gJmwzX2h3bW9kX2NsYXNzLAotCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDNfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2wzX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDNfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sM19zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDNfbWFpbl9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDNfbWFpbl9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2wzX21haW5fc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sM19tYWluX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorCS5mbGFncwkJPSBIV01PRF9OT19JRExFU1QsCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfd2t1cF9od21vZDsKQEAgLTkwLDcgKzkyLDcgQEAKIAogLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzW10gPSB7Ci0JJm9tYXAzeHh4X2wzX19sNF9jb3JlLAorCSZvbWFwM3h4eF9sM19tYWluX19sNF9jb3JlLAogfTsKIAogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCkBAIC0xMDAsMTggKzEwMiwxOSBAQAogCiAvKiBMNCBDT1JFICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfY29yZV9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfY29yZV9od21vZCIsCisJLm5hbWUJCT0gImw0X2NvcmUiLAogCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCiAJLm1hc3RlcnMJPSBvbWFwM3h4eF9sNF9jb3JlX21hc3RlcnMsCiAJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9jb3JlX21hc3RlcnMpLAogCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDRfY29yZV9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1BFUiBpbnRlcmNvbm5lY3QgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X3Blcl9zbGF2ZXNbXSA9IHsKLQkmb21hcDN4eHhfbDNfX2w0X3BlciwKKwkmb21hcDN4eHhfbDNfbWFpbl9fbDRfcGVyLAogfTsKIAogLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X1BFUiBpbnRlcmNvbm5lY3QgKi8KQEAgLTEyMCwxMyArMTIzLDE0IEBACiAKIC8qIEw0IFBFUiAqLwogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X3Blcl9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfcGVyX2h3bW9kIiwKKwkubmFtZQkJPSAibDRfcGVyIiwKIAkuY2xhc3MJCT0gJmw0X2h3bW9kX2NsYXNzLAogCS5tYXN0ZXJzCT0gb21hcDN4eHhfbDRfcGVyX21hc3RlcnMsCiAJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9wZXJfbWFzdGVycyksCiAJLnNsYXZlcwkJPSBvbWFwM3h4eF9sNF9wZXJfc2xhdmVzLAogCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9wZXJfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1dLVVAgaW50ZXJjb25uZWN0ICovCkBAIC0xNDAsMTggKzE0NCwxOSBAQAogCiAvKiBMNCBXS1VQICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfd2t1cF9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfd2t1cF9od21vZCIsCisJLm5hbWUJCT0gImw0X3drdXAiLAogCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCiAJLm1hc3RlcnMJPSBvbWFwM3h4eF9sNF93a3VwX21hc3RlcnMsCiAJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF93a3VwX21hc3RlcnMpLAogCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDRfd2t1cF9zbGF2ZXMsCiAJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X3drdXBfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCisJLmZsYWdzCQk9IEhXTU9EX05PX0lETEVTVCwKIH07CiAKIC8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tcHVfbWFzdGVyc1tdID0gewotCSZvbWFwM3h4eF9tcHVfX2wzLAorCSZvbWFwM3h4eF9tcHVfX2wzX21haW4sCiB9OwogCiAvKiBNUFUgKi8KQEAgLTE2NCwxMiArMTY5LDQxIEBACiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogfTsKIAorLyoKKyAqIElWQTJfMiBpbnRlcmZhY2UgZGF0YQorICovCisKKy8qIElWQTIgPC0gTDMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzeHh4X2wzX19pdmEgPSB7CisJLm1hc3RlcgkJPSAmb21hcDN4eHhfbDNfbWFpbl9od21vZCwKKwkuc2xhdmUJCT0gJm9tYXAzeHh4X2l2YV9od21vZCwKKwkuY2xrCQk9ICJpdmEyX2NrIiwKKwkudXNlcgkJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfaXZhX21hc3RlcnNbXSA9IHsKKwkmb21hcDN4eHhfbDNfX2l2YSwKK307CisKKy8qCisgKiBJVkEyIChJVkEyKQorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9pdmFfaHdtb2QgPSB7CisJLm5hbWUJCT0gIml2YSIsCisJLmNsYXNzCQk9ICZpdmFfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9pdmFfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2l2YV9tYXN0ZXJzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwM3h4eF9od21vZHNbXSA9IHsKLQkmb21hcDN4eHhfbDNfaHdtb2QsCisJJm9tYXAzeHh4X2wzX21haW5faHdtb2QsCiAJJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCiAJJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKIAkmb21hcDN4eHhfbDRfd2t1cF9od21vZCwKIAkmb21hcDN4eHhfbXB1X2h3bW9kLAorCSZvbWFwM3h4eF9pdmFfaHdtb2QsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMKaW5kZXggMWU4MGI5MS4uMDhhMTM0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMKQEAgLTY2LDMgKzY2LDYgQEAKIAkubmFtZSA9ICJtcHUiCiB9OwogCitzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBpdmFfaHdtb2RfY2xhc3MgPSB7CisJLm5hbWUgPSAiaXZhIgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKaW5kZXggMzY0NWEyOC4uYzM0ZTk4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKQEAgLTIwLDUgKzIwLDYgQEAKIGV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsM19od21vZF9jbGFzczsKIGV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsNF9od21vZF9jbGFzczsKIGV4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBtcHVfaHdtb2RfY2xhc3M7CitleHRlcm4gc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgaXZhX2h3bW9kX2NsYXNzOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGY5ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBwbS5jIC0gQ29tbW9uIE9NQVAyKyBwb3dlciBtYW5hZ2VtZW50LXJlbGF0ZWQgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxwbGF0L29tYXAtcG0uaD4KKyNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+CisjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKworc3RhdGljIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5ICpwbV9sYXRzOworCitzdGF0aWMgc3RydWN0IGRldmljZSAqbXB1X2RldjsKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkc3BfZGV2Oworc3RhdGljIHN0cnVjdCBkZXZpY2UgKmwzX2RldjsKKworc3RydWN0IGRldmljZSAqb21hcDJfZ2V0X21wdXNzX2RldmljZSh2b2lkKQoreworCVdBUk5fT05fT05DRSghbXB1X2Rldik7CisJcmV0dXJuIG1wdV9kZXY7Cit9CisKK3N0cnVjdCBkZXZpY2UgKm9tYXAyX2dldF9kc3BfZGV2aWNlKHZvaWQpCit7CisJV0FSTl9PTl9PTkNFKCFkc3BfZGV2KTsKKwlyZXR1cm4gZHNwX2RldjsKK30KKworc3RydWN0IGRldmljZSAqb21hcDJfZ2V0X2wzX2RldmljZSh2b2lkKQoreworCVdBUk5fT05fT05DRSghbDNfZGV2KTsKKwlyZXR1cm4gbDNfZGV2OworfQorCisvKiBzdGF0aWMgaW50IF9pbml0X29tYXBfZGV2aWNlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqdXNlcikgKi8KK3N0YXRpYyBpbnQgX2luaXRfb21hcF9kZXZpY2UoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqKm5ld19kZXYpCit7CisJc3RydWN0IG9tYXBfaHdtb2QgKm9oOworCXN0cnVjdCBvbWFwX2RldmljZSAqb2Q7CisKKwlvaCA9IG9tYXBfaHdtb2RfbG9va3VwKG5hbWUpOworCWlmIChXQVJOKCFvaCwgIiVzOiBjb3VsZCBub3QgZmluZCBvbWFwX2h3bW9kIGZvciAlc1xuIiwKKwkJIF9fZnVuY19fLCBuYW1lKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvZCA9IG9tYXBfZGV2aWNlX2J1aWxkKG9oLT5uYW1lLCAwLCBvaCwgTlVMTCwgMCwgcG1fbGF0cywgMCwgZmFsc2UpOworCWlmIChXQVJOKElTX0VSUihvZCksICIlczogY291bGQgbm90IGJ1aWxkIG9tYXBfZGV2aWNlIGZvciAlc1xuIiwKKwkJIF9fZnVuY19fLCBuYW1lKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkqbmV3X2RldiA9ICZvZC0+cGRldi5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEJ1aWxkIG9tYXBfZGV2aWNlcyBmb3IgcHJvY2Vzc29ycyBhbmQgYnVzLgorICovCitzdGF0aWMgdm9pZCBvbWFwMl9pbml0X3Byb2Nlc3Nvcl9kZXZpY2VzKHZvaWQpCit7CisJX2luaXRfb21hcF9kZXZpY2UoIm1wdSIsICZtcHVfZGV2KTsKKwlfaW5pdF9vbWFwX2RldmljZSgiaXZhIiwgJmRzcF9kZXYpOworCV9pbml0X29tYXBfZGV2aWNlKCJsM19tYWluIiwgJmwzX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2NvbW1vbl9wbV9pbml0KHZvaWQpCit7CisJb21hcDJfaW5pdF9wcm9jZXNzb3JfZGV2aWNlcygpOworCW9tYXBfcG1faWZfaW5pdCgpOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwob21hcDJfY29tbW9uX3BtX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYwppbmRleCBlMzIxMjgxLi42YWVlZGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9zcmFtLmg+CiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggYjg4NzM3Zi4uZmI0OTk0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC0zODUsOCArMzg1LDkgQEAKIAkvKiBFbmFibGUgSU8tUEFEIGFuZCBJTy1DSEFJTiB3YWtldXBzICovCiAJcGVyX25leHRfc3RhdGUgPSBwd3JkbV9yZWFkX25leHRfcHdyc3QocGVyX3B3cmRtKTsKIAljb3JlX25leHRfc3RhdGUgPSBwd3JkbV9yZWFkX25leHRfcHdyc3QoY29yZV9wd3JkbSk7Ci0JaWYgKHBlcl9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04gfHwKLQkJCWNvcmVfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OKSB7CisJaWYgKG9tYXAzX2hhc19pb193YWtldXAoKSAmJiBcCisJCQkocGVyX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTiB8fAorCQkJY29yZV9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04pKSB7CiAJCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0VOX0lPX01BU0ssIFdLVVBfTU9ELCBQTV9XS0VOKTsKIAkJb21hcDNfZW5hYmxlX2lvX2NoYWluKCk7CiAJfQpAQCAtNDc5LDcgKzQ4MCw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBJTy1QQUQgYW5kIElPLUNIQUlOIHdha2V1cCAqLwotCWlmIChjb3JlX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTikgeworCWlmIChvbWFwM19oYXNfaW9fd2FrZXVwKCkgJiYgY29yZV9uZXh0X3N0YXRlIDwgUFdSRE1fUE9XRVJfT04pIHsKIAkJcHJtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMzQzMF9FTl9JT19NQVNLLCBXS1VQX01PRCwgUE1fV0tFTik7CiAJCW9tYXAzX2Rpc2FibGVfaW9fY2hhaW4oKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU0NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIE9NQVA0IFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIFJhamVuZHJhIE5heWFrIDxybmF5YWtAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CisjaW5jbHVkZSA8bWFjaC9vbWFwNC1jb21tb24uaD4KKworc3RydWN0IHBvd2VyX3N0YXRlIHsKKwlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCXUzMiBuZXh0X3N0YXRlOworI2lmZGVmIENPTkZJR19TVVNQRU5ECisJdTMyIHNhdmVkX3N0YXRlOworI2VuZGlmCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3RhdGljIExJU1RfSEVBRChwd3JzdF9saXN0KTsKKworI2lmZGVmIENPTkZJR19TVVNQRU5ECitzdGF0aWMgaW50IG9tYXA0X3BtX3ByZXBhcmUodm9pZCkKK3sKKwlkaXNhYmxlX2hsdCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXA0X3BtX3N1c3BlbmQodm9pZCkKK3sKKwlkb193ZmkoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwNF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3VzcGVuZF9zdGF0ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoc3VzcGVuZF9zdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCXJldCA9IG9tYXA0X3BtX3N1c3BlbmQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwNF9wbV9maW5pc2godm9pZCkKK3sKKwllbmFibGVfaGx0KCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG9tYXA0X3BtX2JlZ2luKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDRfcG1fZW5kKHZvaWQpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID0geworCS5iZWdpbgkJPSBvbWFwNF9wbV9iZWdpbiwKKwkuZW5kCQk9IG9tYXA0X3BtX2VuZCwKKwkucHJlcGFyZQk9IG9tYXA0X3BtX3ByZXBhcmUsCisJLmVudGVyCQk9IG9tYXA0X3BtX2VudGVyLAorCS5maW5pc2gJCT0gb21hcDRfcG1fZmluaXNoLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLworCitzdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBwb3dlcl9zdGF0ZSAqcHdyc3Q7CisKKwlpZiAoIXB3cmRtLT5wd3JzdHMpCisJCXJldHVybiAwOworCisJcHdyc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJfc3RhdGUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXB3cnN0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlwd3JzdC0+cHdyZG0gPSBwd3JkbTsKKwlwd3JzdC0+bmV4dF9zdGF0ZSA9IFBXUkRNX1BPV0VSX09OOworCWxpc3RfYWRkKCZwd3JzdC0+bm9kZSwgJnB3cnN0X2xpc3QpOworCisJcmV0dXJuIHB3cmRtX3NldF9uZXh0X3B3cnN0KHB3cnN0LT5wd3JkbSwgcHdyc3QtPm5leHRfc3RhdGUpOworfQorCisvKioKKyAqIG9tYXA0X3BtX2luaXQgLSBJbml0IHJvdXRpbmUgZm9yIE9NQVA0IFBNCisgKgorICogSW5pdGlhbGl6ZXMgYWxsIHBvd2VyZG9tYWluIGFuZCBjbG9ja2RvbWFpbiB0YXJnZXQgc3RhdGVzCisgKiBhbmQgYWxsIFBSQ00gc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXA0X3BtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9lcnIoIlBvd2VyIE1hbmFnZW1lbnQgZm9yIFRJIE9NQVA0LlxuIik7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlyZXQgPSBwd3JkbV9mb3JfZWFjaChwd3JkbXNfc2V0dXAsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gc2V0dXAgcG93ZXJkb21haW5zXG4iKTsKKwkJZ290byBlcnIyOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKKwlzdXNwZW5kX3NldF9vcHMoJm9tYXBfcG1fb3BzKTsKKyNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLworCitlcnIyOgorCXJldHVybiByZXQ7Cit9CitsYXRlX2luaXRjYWxsKG9tYXA0X3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCmluZGV4IGEyOTA0YWEuLjY1MjdlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKQEAgLTg3NSw2ICs4NzUsNyBAQAogCQlicmVhazsKIAljYXNlIDQ6CiAJCW0gPSBPTUFQX01FTTRfUkVUU1RBVEVfTUFTSzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlyZXR1cm4gLUVFWElTVDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKaW5kZXggYmQ4NzExMi4uZmE5MDQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKQEAgLTc1LDEyICs3NSwxOSBAQAogCX0sCiB9OwogCisvKgorICogVGhlIFVTQlRMTCBTYXZlLWFuZC1SZXN0b3JlIG1lY2hhbmlzbSBpcyBicm9rZW4gb24KKyAqIDM0MzBzIHVwdG8gRVMzLjAgYW5kIDM2MzBFUzEuMC4gSGVuY2UgdGhpcyBmZWF0dXJlCisgKiBuZWVkcyB0byBiZSBkaXNhYmxlZCBvbiB0aGVzZSBjaGlwcy4KKyAqIFJlZmVyOiAzNDMwIGVycmF0YSBJRCBpNDU5IGFuZCAzNjMwIGVycmF0YSBJRCBpNTc5CisgKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zeHh4X3ByZV9lczNfMV9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKIAkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMiB8Ci0JCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCksCisJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCB8CisJCQkJCSAgIENISVBfSVNfT01BUDM2MzBFUzEpLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDIsCkBAIC05Nyw3ICsxMDQsOCBAQAogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzN4eHhfZXMzXzFfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiY29yZV9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gQ09SRV9NT0QsCi0JLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTM18xKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMzXzEgfAorCQkJCQkgIENISVBfR0VfT01BUDM2MzBFUzFfMSksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmZsYWdzCQkgID0gUFdSRE1fSEFTX0hEV1JfU0FSLCAvKiBmb3IgVVNCVExMIG9ubHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCmluZGV4IDM3NzEyNTQuLjU2NmU5OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwpAQCAtMzcsNiArMzcsOSBAQAogI2RlZmluZSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVgkweDUyCiAjZGVmaW5lIFVBUlRfT01BUF9XRVIJCTB4MTcJLyogV2FrZS11cCBlbmFibGUgcmVnaXN0ZXIgKi8KIAorI2RlZmluZSBVQVJUX0VSUkFUQV9GSUZPX0ZVTExfQUJPUlQJKDB4MSA8PCAwKQorI2RlZmluZSBVQVJUX0VSUkFUQV9pMjAyX01EUjFfQUNDRVNTCSgweDEgPDwgMSkKKwogLyoKICAqIE5PVEU6IEJ5IGRlZmF1bHQgdGhlIHNlcmlhbCB0aW1lb3V0IGlzIGRpc2FibGVkIGFzIGl0IGNhdXNlcyBsb3N0IGNoYXJhY3RlcnMKICAqIG92ZXIgdGhlIHNlcmlhbCBwb3J0cy4gVGhpcyBtZWFucyB0aGF0IHRoZSBVQVJUIGNsb2NrcyB3aWxsIHN0YXkgb24gdW50aWwKQEAgLTY0LDYgKzY3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSBwZGV2OwogCisJdTMyIGVycmF0YTsKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSAmJiBkZWZpbmVkKENPTkZJR19QTSkKIAlpbnQgY29udGV4dF92YWxpZDsKIApAQCAtNzQsNiArNzgsNyBAQAogCXUxNiBzeXNjOwogCXUxNiBzY3I7CiAJdTE2IHdlcjsKKwl1MTYgbWNyOwogI2VuZGlmCiB9OwogCkBAIC0xODAsNiArMTg1LDQyIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAorLyoKKyAqIFdvcmsgQXJvdW5kIGZvciBFcnJhdGEgaTIwMiAoMzQzMCAtIDEuMTIsIDM2MzAgLSAxLjYpCisgKiBUaGUgYWNjZXNzIHRvIHVhcnQgcmVnaXN0ZXIgYWZ0ZXIgTURSMSBBY2Nlc3MKKyAqIGNhdXNlcyBVQVJUIHRvIGNvcnJ1cHQgZGF0YS4KKyAqCisgKiBOZWVkIGEgZGVsYXkgPQorICogNSBMNCBjbG9jayBjeWNsZXMgKyA1IFVBUlQgZnVuY3Rpb25hbCBjbG9jayBjeWNsZSAoQDQ4TUh6ID0gfjAuMnVTKQorICogZ2l2ZSAxMCB0aW1lcyBhcyBtdWNoCisgKi8KK3N0YXRpYyB2b2lkIG9tYXBfdWFydF9tZHIxX2VycmF0YXNldChzdHJ1Y3Qgb21hcF91YXJ0X3N0YXRlICp1YXJ0LCB1OCBtZHIxX3ZhbCwKKwkJdTggZmNyX3ZhbCkKK3sKKwlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSB1YXJ0LT5wOworCXU4IHRpbWVvdXQgPSAyNTU7CisKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCBtZHIxX3ZhbCk7CisJdWRlbGF5KDIpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9GQ1IsIGZjcl92YWwgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUIHwKKwkJCVVBUlRfRkNSX0NMRUFSX1JDVlIpOworCS8qCisJICogV2FpdCBmb3IgRklGTyB0byBlbXB0eTogd2hlbiBlbXB0eSwgUlhfRklGT19FIGJpdCBpcyAwIGFuZAorCSAqIFRYX0ZJRk9fRSBiaXQgaXMgMS4KKwkgKi8KKwl3aGlsZSAoVUFSVF9MU1JfVEhSRSAhPSAoc2VyaWFsX3JlYWRfcmVnKHAsIFVBUlRfTFNSKSAmCisJCQkJKFVBUlRfTFNSX1RIUkUgfCBVQVJUX0xTUl9EUikpKSB7CisJCXRpbWVvdXQtLTsKKwkJaWYgKCF0aW1lb3V0KSB7CisJCQkvKiBTaG91bGQgKm5ldmVyKiBoYXBwZW4uIHdlIHdhcm4gYW5kIGNhcnJ5IG9uICovCisJCQlkZXZfY3JpdCgmdWFydC0+cGRldi5kZXYsICJFcnJhdGEgaTIwMjogdGltZWRvdXQgJXhcbiIsCisJCQkJc2VyaWFsX3JlYWRfcmVnKHAsIFVBUlRfTFNSKSk7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBvbWFwX3VhcnRfc2F2ZV9jb250ZXh0KHN0cnVjdCBvbWFwX3VhcnRfc3RhdGUgKnVhcnQpCiB7CiAJdTE2IGxjciA9IDA7CkBAIC0xOTcsNiArMjM4LDkgQEAKIAl1YXJ0LT5zeXNjID0gc2VyaWFsX3JlYWRfcmVnKHAsIFVBUlRfT01BUF9TWVNDKTsKIAl1YXJ0LT5zY3IgPSBzZXJpYWxfcmVhZF9yZWcocCwgVUFSVF9PTUFQX1NDUik7CiAJdWFydC0+d2VyID0gc2VyaWFsX3JlYWRfcmVnKHAsIFVBUlRfT01BUF9XRVIpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9MQ1IsIDB4ODApOworCXVhcnQtPm1jciA9IHNlcmlhbF9yZWFkX3JlZyhwLCBVQVJUX01DUik7CisJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX0xDUiwgbGNyKTsKIAogCXVhcnQtPmNvbnRleHRfdmFsaWQgPSAxOwogfQpAQCAtMjE0LDcgKzI1OCwxMCBAQAogCiAJdWFydC0+Y29udGV4dF92YWxpZCA9IDA7CiAKLQlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDcpOworCWlmICh1YXJ0LT5lcnJhdGEgJiBVQVJUX0VSUkFUQV9pMjAyX01EUjFfQUNDRVNTKQorCQlvbWFwX3VhcnRfbWRyMV9lcnJhdGFzZXQodWFydCwgMHgwNywgMHhBMCk7CisJZWxzZQorCQlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDcpOwogCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9MQ1IsIDB4QkYpOyAvKiBDb25maWcgQiBtb2RlICovCiAJZWZyID0gc2VyaWFsX3JlYWRfcmVnKHAsIFVBUlRfRUZSKTsKIAlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfRUZSLCBVQVJUX0VGUl9FQ0IpOwpAQCAtMjI1LDE0ICsyNzIsMTggQEAKIAlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfRExNLCB1YXJ0LT5kbGgpOwogCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9MQ1IsIDB4MCk7IC8qIE9wZXJhdGlvbmFsIG1vZGUgKi8KIAlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfSUVSLCB1YXJ0LT5pZXIpOwotCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9GQ1IsIDB4QTEpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9MQ1IsIDB4ODApOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9NQ1IsIHVhcnQtPm1jcik7CiAJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX0xDUiwgMHhCRik7IC8qIENvbmZpZyBCIG1vZGUgKi8KIAlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfRUZSLCBlZnIpOwogCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9MQ1IsIFVBUlRfTENSX1dMRU44KTsKIAlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9TQ1IsIHVhcnQtPnNjcik7CiAJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfV0VSLCB1YXJ0LT53ZXIpOwogCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX1NZU0MsIHVhcnQtPnN5c2MpOwotCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOyAvKiBVQVJUIDE2eCBtb2RlICovCisJaWYgKHVhcnQtPmVycmF0YSAmIFVBUlRfRVJSQVRBX2kyMDJfTURSMV9BQ0NFU1MpCisJCW9tYXBfdWFydF9tZHIxX2VycmF0YXNldCh1YXJ0LCAweDAwLCAweEExKTsKKwllbHNlCisJCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOyAvKiBVQVJUIDE2eCBtb2RlICovCiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfdWFydF9zYXZlX2NvbnRleHQoc3RydWN0IG9tYXBfdWFydF9zdGF0ZSAqdWFydCkge30KQEAgLTQ4OSw4ICs1NDAsOCBAQAogCQl9CiAJCXVhcnQtPndrX21hc2sgPSB3a19tYXNrOwogCX0gZWxzZSB7Ci0JCXVhcnQtPndrX2VuID0gMDsKLQkJdWFydC0+d2tfc3QgPSAwOworCQl1YXJ0LT53a19lbiA9IE5VTEw7CisJCXVhcnQtPndrX3N0ID0gTlVMTDsKIAkJdWFydC0+d2tfbWFzayA9IDA7CiAJCXVhcnQtPnBhZGNvbmYgPSAwOwogCX0KQEAgLTU1Miw3ICs2MDMsOCBAQAogCXJldHVybiBuOwogfQogCi1ERVZJQ0VfQVRUUihzbGVlcF90aW1lb3V0LCAwNjQ0LCBzbGVlcF90aW1lb3V0X3Nob3csIHNsZWVwX3RpbWVvdXRfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKHNsZWVwX3RpbWVvdXQsIDA2NDQsIHNsZWVwX3RpbWVvdXRfc2hvdywKKwkJc2xlZXBfdGltZW91dF9zdG9yZSk7CiAjZGVmaW5lIERFVl9DUkVBVEVfRklMRShkZXYsIGF0dHIpIFdBUk5fT04oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgYXR0cikpCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfdWFydF9pZGxlX2luaXQoc3RydWN0IG9tYXBfdWFydF9zdGF0ZSAqdWFydCkge30KQEAgLTc0OSwxNCArODAxLDIwIEBACiAJICogb21hcDN4eHg6IE5ldmVyIHJlYWQgZW1wdHkgVUFSVCBmaWZvIG9uIFVBUlRzCiAJICogd2l0aCBJUCByZXYgPj0weDUyCiAJICovCi0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCXVhcnQtPnAtPnNlcmlhbF9pbiA9IHNlcmlhbF9pbl9vdmVycmlkZTsKLQkJdWFydC0+cC0+c2VyaWFsX291dCA9IHNlcmlhbF9vdXRfb3ZlcnJpZGU7Ci0JfSBlbHNlIGlmICgoc2VyaWFsX3JlYWRfcmVnKHVhcnQtPnAsIFVBUlRfT01BUF9NVkVSKSAmIDB4RkYpCi0JCQk+PSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVikgeworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJdWFydC0+ZXJyYXRhIHw9IFVBUlRfRVJSQVRBX0ZJRk9fRlVMTF9BQk9SVDsKKwllbHNlIGlmICgoc2VyaWFsX3JlYWRfcmVnKHVhcnQtPnAsIFVBUlRfT01BUF9NVkVSKSAmIDB4RkYpCisJCQk+PSBVQVJUX09NQVBfTk9fRU1QVFlfRklGT19SRUFEX0lQX1JFVikKKwkJdWFydC0+ZXJyYXRhIHw9IFVBUlRfRVJSQVRBX0ZJRk9fRlVMTF9BQk9SVDsKKworCWlmICh1YXJ0LT5lcnJhdGEgJiBVQVJUX0VSUkFUQV9GSUZPX0ZVTExfQUJPUlQpIHsKIAkJdWFydC0+cC0+c2VyaWFsX2luID0gc2VyaWFsX2luX292ZXJyaWRlOwogCQl1YXJ0LT5wLT5zZXJpYWxfb3V0ID0gc2VyaWFsX291dF9vdmVycmlkZTsKIAl9CisKKwkvKiBFbmFibGUgdGhlIE1EUjEgZXJyYXRhIGZvciBPTUFQMyAqLworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkKKwkJdWFydC0+ZXJyYXRhIHw9IFVBUlRfRVJSQVRBX2kyMDJfTURSMV9BQ0NFU1M7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItZWhjaS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItZWhjaS5jCmluZGV4IGQ3MmQxYWMuLmIxMWJmMzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWVoY2kuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1laGNpLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLWZzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTZkODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1mcy5jCkBAIC0wLDAgKzEsMzU5IEBACisvKgorICogUGxhdGZvcm0gbGV2ZWwgVVNCIGluaXRpYWxpemF0aW9uIGZvciBGUyBVU0IgT1RHIGNvbnRyb2xsZXIgb24gb21hcDEgYW5kIDI0eHgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KKworI2RlZmluZSBJTlRfVVNCX0lSUV9HRU4JCUlOVF8yNFhYX1VTQl9JUlFfR0VOCisjZGVmaW5lIElOVF9VU0JfSVJRX05JU08JSU5UXzI0WFhfVVNCX0lSUV9OSVNPCisjZGVmaW5lIElOVF9VU0JfSVJRX0lTTwkJSU5UXzI0WFhfVVNCX0lSUV9JU08KKyNkZWZpbmUgSU5UX1VTQl9JUlFfSEdFTglJTlRfMjRYWF9VU0JfSVJRX0hHRU4KKyNkZWZpbmUgSU5UX1VTQl9JUlFfT1RHCQlJTlRfMjRYWF9VU0JfSVJRX09URworCisjaW5jbHVkZSAibXV4LmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQorCisjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKKwkvKiBvcmRlciBpcyBzaWduaWZpY2FudCEgKi8KKwl7CQkvKiByZWdpc3RlcnMgKi8KKwkJLnN0YXJ0CQk9IFVEQ19CQVNFLAorCQkuZW5kCQk9IFVEQ19CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsJCS8qIGdlbmVyYWwgSVJRICovCisJCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9HRU4sCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CQkvKiBQSU8gSVJRICovCisJCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9OSVNPLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwgewkJLyogU09GIElSUSAqLworCQkuc3RhcnQJCT0gSU5UX1VTQl9JUlFfSVNPLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgdWRjX2RtYW1hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1ZGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwX3VkYyIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmdWRjX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZGNfZGV2aWNlX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCit7CisJcGRhdGEtPnVkY19kZXZpY2UgPSAmdWRjX2RldmljZTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHVkY19kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKK30KKworI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisKKy8qIFRoZSBkbWFtYXNrIG11c3QgYmUgc2V0IGZvciBPSENJIHRvIHdvcmsgKi8KK3N0YXRpYyB1NjQgb2hjaV9kbWFtYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvaGNpX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gT01BUF9PSENJX0JBU0UsCisJCS5lbmQJPSBPTUFQX09IQ0lfQkFTRSArIDB4ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJTlRfVVNCX0lSUV9IR0VOLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJvaGNpIiwKKwkuaWQJCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmb2hjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9oY2lfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gb2hjaV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb2hjaV9kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKKwlwZGF0YS0+b2hjaV9kZXZpY2UgPSAmb2hjaV9kZXZpY2U7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaGNpX2RldmljZV9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworfQorCisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PVEcpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUF9PVEcpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb3RnX3Jlc291cmNlc1tdID0geworCS8qIG9yZGVyIGlzIHNpZ25pZmljYW50ISAqLworCXsKKwkJLnN0YXJ0CQk9IE9UR19CQVNFLAorCQkuZW5kCQk9IE9UR19CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CQk9IElOVF9VU0JfSVJRX09URywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdGdfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwX290ZyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG90Z19kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKKwlwZGF0YS0+b3RnX2RldmljZSA9ICZvdGdfZGV2aWNlOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3RnX2RldmljZV9pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgb21hcDJfdXNiX2RldmNvbmZfY2xlYXIodTggcG9ydCwgdTMyIG1hc2spCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgJj0gflVTQlRYV1JNT0RFSShwb3J0LCBtYXNrKTsKKwlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl91c2JfZGV2Y29uZl9zZXQodTggcG9ydCwgdTMyIG1hc2spCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgfD0gVVNCVFhXUk1PREVJKHBvcnQsIG1hc2spOworCW9tYXBfY3RybF93cml0ZWwociwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX3VzYjJfZGlzYWJsZV81cGluYml0bGwodm9pZCkKK3sKKwl1MzIgcjsKKworCXIgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJciAmPSB+KFVTQlRYV1JNT0RFSSgyLCBVU0JfQklESVJfVExMKSB8IFVTQlQyVExMNVBJKTsKKwlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl91c2IyX2VuYWJsZV81cGludW5pdGxsKHZvaWQpCit7CisJdTMyIHI7CisKKwlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOworCXIgfD0gVVNCVFhXUk1PREVJKDIsIFVTQl9VTklESVJfVExMKSB8IFVTQlQyVExMNVBJOworCW9tYXBfY3RybF93cml0ZWwociwgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7Cit9CisKK3N0YXRpYyB1MzIgX19pbml0IG9tYXAyX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKK3sKKwl1MzIJc3lzY29uMSA9IDA7CisKKwlvbWFwMl91c2JfZGV2Y29uZl9jbGVhcigwLCBVU0JfQklESVJfVExMKTsKKworCWlmIChud2lyZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfZGV2aWNlKQorCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF9wdWVuIiwgMCk7CisKKwlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF9kYXQiLCAwKTsKKwlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF90eGVuIiwgMCk7CisJb21hcF9tdXhfaW5pdF9zaWduYWwoInVzYjBfc2UwIiwgMCk7CisJaWYgKG53aXJlcyAhPSAzKQorCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF9yY3YiLCAwKTsKKworCXN3aXRjaCAobndpcmVzKSB7CisJY2FzZSAzOgorCQlzeXNjb24xID0gMjsKKwkJb21hcDJfdXNiX2RldmNvbmZfc2V0KDAsIFVTQl9CSURJUik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJc3lzY29uMSA9IDE7CisJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgwLCBVU0JfQklESVIpOworCQlicmVhazsKKwljYXNlIDY6CisJCXN5c2NvbjEgPSAzOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF92cCIsIDApOworCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMF92bSIsIDApOworCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMCwgVVNCX1VOSURJUik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAorCQkJMCwgbndpcmVzKTsKKwl9CisKKwlyZXR1cm4gc3lzY29uMSA8PCAxNjsKK30KKworc3RhdGljIHUzMiBfX2luaXQgb21hcDJfdXNiMV9pbml0KHVuc2lnbmVkIG53aXJlcykKK3sKKwl1MzIJc3lzY29uMSA9IDA7CisKKwlvbWFwMl91c2JfZGV2Y29uZl9jbGVhcigxLCBVU0JfQklESVJfVExMKTsKKworCWlmIChud2lyZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBOT1RFOiAgYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IHNldCB1cCBwaW4gbXV4aW5nIGZvciB1c2IxLAorCSAqIHNpbmNlIGVhY2ggc2lnbmFsIGNvdWxkIGNvbWUgb3V0IG9uIGVpdGhlciBvZiB0d28gYmFsbHMuCisJICovCisKKwlzd2l0Y2ggKG53aXJlcykgeworCWNhc2UgMjoKKwkJLyogTk9URTogYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IG92ZXJyaWRlIHRoaXMgc2V0dGluZyBpZgorCQkgKiB0aGlzIFRMTCBsaW5rIGlzIG5vdCB1c2luZyBEUC9ETQorCQkgKi8KKwkJc3lzY29uMSA9IDE7CisJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgxLCBVU0JfQklESVJfVExMKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzeXNjb24xID0gMjsKKwkJb21hcDJfdXNiX2RldmNvbmZfc2V0KDEsIFVTQl9CSURJUik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJc3lzY29uMSA9IDE7CisJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgxLCBVU0JfQklESVIpOworCQlicmVhazsKKwljYXNlIDY6CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJpbGxlZ2FsIHVzYiVkICVkLXdpcmUgdHJhbnNjZWl2ZXJcbiIsCisJCQkxLCBud2lyZXMpOworCX0KKworCXJldHVybiBzeXNjb24xIDw8IDIwOworfQorCitzdGF0aWMgdTMyIF9faW5pdCBvbWFwMl91c2IyX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBhbHRfcGluZ3JvdXApCit7CisJdTMyCXN5c2NvbjEgPSAwOworCisJb21hcDJfdXNiMl9kaXNhYmxlXzVwaW5iaXRsbCgpOworCWFsdF9waW5ncm91cCA9IDA7CisKKwkvKiBOT1RFIG9tYXAxIGVycmF0dW06IG11c3QgbGVhdmUgVVNCMl9VTklfUiBzZXQgaWYgdXNiMCBpbiB1c2UgKi8KKwlpZiAoYWx0X3Bpbmdyb3VwIHx8IG53aXJlcyA9PSAwKQorCQlyZXR1cm4gMDsKKworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2IyX2RhdCIsIDApOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2IyX3NlMCIsIDApOworCWlmIChud2lyZXMgPiAyKQorCQlvbWFwX211eF9pbml0X3NpZ25hbCgidXNiMl90eGVuIiwgMCk7CisJaWYgKG53aXJlcyA+IDMpCisJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJ1c2IyX3JjdiIsIDApOworCisJc3dpdGNoIChud2lyZXMpIHsKKwljYXNlIDI6CisJCS8qIE5PVEU6IGJvYXJkLXNwZWNpZmljIGNvZGUgbXVzdCBvdmVycmlkZSB0aGlzIHNldHRpbmcgaWYKKwkJICogdGhpcyBUTEwgbGluayBpcyBub3QgdXNpbmcgRFAvRE0KKwkJICovCisJCXN5c2NvbjEgPSAxOworCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMiwgVVNCX0JJRElSX1RMTCk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3lzY29uMSA9IDI7CisJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgyLCBVU0JfQklESVIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN5c2NvbjEgPSAxOworCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMiwgVVNCX0JJRElSKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQkvKiBOT1RFOiBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3QgbXV4IHRoaXMgc2V0dGluZyBkZXBlbmRpbmcKKwkJICogb24gVExMIGxpbmsgdXNpbmcgRFAvRE0uICBTb21ldGhpbmcgbXVzdCBhbHNvCisJCSAqIHNldCB1cCBPVEdfU1lTQ09OMi5ITUNfVExMe0FUVEFDSCxTUEVFRH0KKwkJICogMjQyMDogaGRxX3Npby51c2IyX3RsbHNlMCBvciB2bHlucV9yeDAudXNiMl90bGxzZTAKKwkJICogMjQzMDogaGRxX3Npby51c2IyX3RsbHNlMCBvciBzZG1tYzJfZGF0MC51c2IyX3RsbHNlMAorCQkgKi8KKworCQlzeXNjb24xID0gMzsKKwkJb21hcDJfdXNiMl9lbmFibGVfNXBpbnVuaXRsbCgpOworCQlicmVhazsKKwljYXNlIDY6CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJpbGxlZ2FsIHVzYiVkICVkLXdpcmUgdHJhbnNjZWl2ZXJcbiIsCisJCQkyLCBud2lyZXMpOworCX0KKworCXJldHVybiBzeXNjb24xIDw8IDI0OworfQorCit2b2lkIF9faW5pdCBvbWFwMl91c2Jmc19pbml0KHN0cnVjdCBvbWFwX3VzYl9jb25maWcgKnBkYXRhKQoreworCXN0cnVjdCBjbGsgKmljazsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCWljayA9IGNsa19nZXQoTlVMTCwgInVzYl9sNF9pY2siKTsKKwlpZiAoSVNfRVJSKGljaykpCisJCXJldHVybjsKKworCWNsa19lbmFibGUoaWNrKTsKKwlwZGF0YS0+dXNiMF9pbml0ID0gb21hcDJfdXNiMF9pbml0OworCXBkYXRhLT51c2IxX2luaXQgPSBvbWFwMl91c2IxX2luaXQ7CisJcGRhdGEtPnVzYjJfaW5pdCA9IG9tYXAyX3VzYjJfaW5pdDsKKwl1ZGNfZGV2aWNlX2luaXQocGRhdGEpOworCW9oY2lfZGV2aWNlX2luaXQocGRhdGEpOworCW90Z19kZXZpY2VfaW5pdChwZGF0YSk7CisJb21hcF9vdGdfaW5pdChwZGF0YSk7CisJY2xrX2Rpc2FibGUoaWNrKTsKKwljbGtfcHV0KGljayk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCmluZGV4IDk2ZjY3ODcuLjMzYTVjZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpZmRlZiBDT05GSUdfVVNCX01VU0JfU09DCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi10dXNiNjAxMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItdHVzYjYwMTAuYwppbmRleCAxMGEyMDEzLi42NGEwMTEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi10dXNiNjAxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLXR1c2I2MDEwLmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC91c2IvbXVzYi5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KIAorI2luY2x1ZGUgIm11eC5oIgogCiBzdGF0aWMgdTgJCWFzeW5jX2NzLCBzeW5jX2NzOwogc3RhdGljIHVuc2lnbmVkCQlyZWZjbGtfcHNlYzsKQEAgLTMyNSwxNyArMzI1LDE3IEBACiAJZWxzZSB7CiAJCS8qIGFzc3VtZSBPTUFQIDI0MjAgRVMyLjAgYW5kIGxhdGVyICovCiAJCWlmIChkbWFjaGFuICYgKDEgPDwgMCkpCi0JCQlvbWFwX2NmZ19yZWcoQUExMF8yNDJYX0RNQVJFUTApOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uZG1hcmVxMCIsIDApOwogCQlpZiAoZG1hY2hhbiAmICgxIDw8IDEpKQotCQkJb21hcF9jZmdfcmVnKEFBNl8yNDJYX0RNQVJFUTEpOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uZG1hcmVxMSIsIDApOwogCQlpZiAoZG1hY2hhbiAmICgxIDw8IDIpKQotCQkJb21hcF9jZmdfcmVnKEU0XzI0MlhfRE1BUkVRMik7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX25kbWFyZXEyIiwgMCk7CiAJCWlmIChkbWFjaGFuICYgKDEgPDwgMykpCi0JCQlvbWFwX2NmZ19yZWcoRzRfMjQyWF9ETUFSRVEzKTsKKwkJCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmRtYXJlcTMiLCAwKTsKIAkJaWYgKGRtYWNoYW4gJiAoMSA8PCA0KSkKLQkJCW9tYXBfY2ZnX3JlZyhEM18yNDJYX0RNQVJFUTQpOworCQkJb21hcF9tdXhfaW5pdF9zaWduYWwoInN5c19uZG1hcmVxNCIsIDApOwogCQlpZiAoZG1hY2hhbiAmICgxIDw8IDUpKQotCQkJb21hcF9jZmdfcmVnKEUzXzI0MlhfRE1BUkVRNSk7CisJCQlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX25kbWFyZXE1IiwgMCk7CiAJfQogCiAJLyogc28gZmFyIHNvIGdvb2QgLi4uIHJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IDNiNTE3NDEuLjdhZWZiOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtMjM4LDYgKzIzOCwxNyBAQAogCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWEEyNzAiCiAJc2VsZWN0IFBYQTI3eAogCitjb25maWcgTUFDSF9DT0xJQlJJX1BYQTI3MF9FVkFMQk9BUkQKKwlib29sICJUb3JhZGV4IENvbGlicmkgRXZhbHVhdGlvbiBDYXJyaWVyIEJvYXJkIHN1cHBvcnQgKFBYQTI3MCkiCisJZGVwZW5kcyBvbiBNQUNIX0NPTElCUkkKKworY29uZmlnIE1BQ0hfQ09MSUJSSV9QWEEyNzBfSU5DT01FCisJYm9vbCAiSW5jb21lIHMuci5vLiBQWEEyNzAgU0JDIgorCWRlcGVuZHMgb24gTUFDSF9DT0xJQlJJCisJc2VsZWN0IFBYQTI3eAorCXNlbGVjdCBIQVZFX1BXTQorCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCisKIGNvbmZpZyBNQUNIX0NPTElCUkkzMDAKIAlib29sICJUb3JhZGV4IENvbGlicmkgUFhBMzAwLzMxMCIKIAlzZWxlY3QgUFhBM3h4CkBAIC0zMzYsNiArMzQ3LDkgQEAKIAlib29sICJQWEEgYmFzZWQgUGFsbSBQREFzIgogCXNlbGVjdCBIQVZFX1BXTQogCitjb25maWcgTUFDSF9QQUxNMjdYCisJYm9vbAorCiBjb25maWcgTUFDSF9QQUxNVEUyCiAJYm9vbCAiUGFsbSBUdW5nc3RlbnxFMiIKIAlkZWZhdWx0IHkKQEAgLTM2MCw2ICszNzQsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9QWEFfUEFMTQogCXNlbGVjdCBQWEEyN3gKIAlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IE1BQ0hfUEFMTTI3WAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufFQ1CiAJICBoYW5kaGVsZCBjb21wdXRlci4KQEAgLTM3MCw2ICszODUsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9QWEFfUEFMTQogCXNlbGVjdCBQWEEyN3gKIAlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IE1BQ0hfUEFMTTI3WAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR8WAogCSAgaGFuZGhlbGQgY29tcHV0ZXIuCkBAIC0zODAsNiArMzk2LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBX1BBTE0KIAlzZWxlY3QgUFhBMjd4CiAJc2VsZWN0IElXTU1YVAorCXNlbGVjdCBNQUNIX1BBTE0yN1gKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIFBhbG0gWmlyZSA3MgogCSAgaGFuZGhlbGQgY29tcHV0ZXIuCkBAIC0zOTAsNiArNDA3LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBX1BBTE0KIAlzZWxlY3QgUFhBMjd4CiAJc2VsZWN0IElXTU1YVAorCXNlbGVjdCBNQUNIX1BBTE0yN1gKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIGEgUGFsbSBMaWZlRHJpdmUKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgpAQCAtNDQ3LDE2ICs0NjUsMTMgQEAKIAkgIFNMLUMzMDAwIChTcGl0eiksIFNMLUMzMTAwIChCb3J6b2kpIG9yIFNMLUM2MDAweCAoVG9zYSkKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCi1jb25maWcgU0hBUlBTTF9QTQotCWJvb2wKLQlzZWxlY3QgQVBNX0VNVUxBVElPTgotCXNlbGVjdCBTSEFSUFNMX1BNX01BWDExMTEKLQotY29uZmlnIFNIQVJQU0xfUE1fTUFYMTExMQotCWJvb2wKLQlkZXBlbmRzIG9uICFDT1JHSV9TU1BfREVQUkVDQVRFRAotCXNlbGVjdCBIV01PTgotCXNlbGVjdCBTRU5TT1JTX01BWDExMTEKK2NvbmZpZyBQWEFfU0hBUlBTTF9ERVRFQ1RfTUFDSF9JRAorCWJvb2wgIkRldGVjdCBtYWNoaW5lIElEIGF0IHJ1bi10aW1lIGluIHRoZSBkZWNvbXByZXNzb3IiCisJZGVwZW5kcyBvbiBQWEFfU0hBUlBTTAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIHpJbWFnZSBkZWNvbXByZXNzb3IgdG8gZGV0ZWN0CisJICB0aGUgWmF1cnVzIG1hY2hpbmUgSUQgYXQgcnVuLXRpbWUuIEZvciBsYXRlc3Qga2V4ZWMtYmFzZWQKKwkgIGJvb3QgbG9hZGVyLCB0aGlzIGlzIG5vdCBuZWNlc3NhcnkuCiAKIGNvbmZpZyBNQUNIX1BPT0RMRQogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC01NjAwIChQb29kbGUpIFN1cHBvcnQiCkBAIC01MTAsNiArNTI1LDI1IEBACiAJc2VsZWN0IFBYQTI1eAogCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCiAKK2NvbmZpZyBUT1NBX0JUCisJdHJpc3RhdGUgIkNvbnRyb2wgdGhlIHN0YXRlIG9mIGJ1aWx0LWluIGJsdWV0b290aCBjaGlwIG9uIFNoYXJwIFNMLTYwMDAiCisJZGVwZW5kcyBvbiBNQUNIX1RPU0EKKwlzZWxlY3QgUkZLSUxMCisJaGVscAorCSAgVGhpcyBpcyBhIHNpbXBsZSBkcml2ZXIgdGhhdCBpcyBhYmxlIHRvIGNvbnRyb2wKKwkgIHRoZSBzdGF0ZSBvZiBidWlsdCBpbiBibHVldG9vdGggY2hpcCBvbiB0b3NhLgorCitjb25maWcgVE9TQV9VU0VfRVhUX0tFWUNPREVTCisJYm9vbCAiVG9zYSBrZXlib2FyZDogdXNlIGV4dGVuZGVkIGtleWNvZGVzIgorCWRlcGVuZHMgb24gTUFDSF9UT1NBCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIHRvc2Ega2V5Ym9hcmQgZHJpdmVyIHRvIGdlbmVyYXRlIGV4dGVuZGVkCisJICAoPj0gMTI3KSBrZXljb2Rlcy4gQmUgYXdhcmUsIHRoYXQgdGhleSBjYW4ndCBiZSBjb3JyZWN0bHkgaW50ZXJwcmV0ZWQKKwkgIGJ5IGVpdGhlciBjb25zb2xlIGtleWJvYXJkIGRyaXZlciBvciBieSBLZHJpdmUga2V5YmQgZHJpdmVyLgorCisJICBTYXkgWSBvbmx5IGlmIHlvdSBrbm93LCB3aGF0IHlvdSBhcmUgZG9pbmchCisKIGNvbmZpZyBNQUNIX0lDT05UUk9MCiAJYm9vbCAiVE1UIGlDb250cm9sL1NhZmVUQ2FtIGJhc2VkIG9uIHRoZSBNWE0tOHgxMCBDb00iCiAJc2VsZWN0IENQVV9QWEEzMjAKQEAgLTY0OCwyNSArNjgyLDE1IEBACiAJaGVscAogCSAgRW5hYmxlIGNvbW1vbiBzdXBwb3J0IGZvciBTaGFycCBDeHgwMCBtb2RlbHMKIAotY29uZmlnIFRPU0FfQlQKLQl0cmlzdGF0ZSAiQ29udHJvbCB0aGUgc3RhdGUgb2YgYnVpbHQtaW4gYmx1ZXRvb3RoIGNoaXAgb24gU2hhcnAgU0wtNjAwMCIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQQotCXNlbGVjdCBSRktJTEwKLQloZWxwCi0JICBUaGlzIGlzIGEgc2ltcGxlIGRyaXZlciB0aGF0IGlzIGFibGUgdG8gY29udHJvbAotCSAgdGhlIHN0YXRlIG9mIGJ1aWx0IGluIGJsdWV0b290aCBjaGlwIG9uIHRvc2EuCitjb25maWcgU0hBUlBTTF9QTQorCWJvb2wKKwlzZWxlY3QgQVBNX0VNVUxBVElPTgorCXNlbGVjdCBTSEFSUFNMX1BNX01BWDExMTEKIAotY29uZmlnIFRPU0FfVVNFX0VYVF9LRVlDT0RFUwotCWJvb2wgIlRvc2Ega2V5Ym9hcmQ6IHVzZSBleHRlbmRlZCBrZXljb2RlcyIKLQlkZXBlbmRzIG9uIE1BQ0hfVE9TQQotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSB0b3NhIGtleWJvYXJkIGRyaXZlciB0byBnZW5lcmF0ZSBleHRlbmRlZAotCSAgKD49IDEyNykga2V5Y29kZXMuIEJlIGF3YXJlLCB0aGF0IHRoZXkgY2FuJ3QgYmUgY29ycmVjdGx5IGludGVycHJldGVkCi0JICBieSBlaXRoZXIgY29uc29sZSBrZXlib2FyZCBkcml2ZXIgb3IgYnkgS2RyaXZlIGtleWJkIGRyaXZlci4KLQotCSAgU2F5IFkgb25seSBpZiB5b3Uga25vdywgd2hhdCB5b3UgYXJlIGRvaW5nIQotCitjb25maWcgU0hBUlBTTF9QTV9NQVgxMTExCisJYm9vbAorCXNlbGVjdCBIV01PTgorCXNlbGVjdCBTRU5TT1JTX01BWDExMTEKIAogY29uZmlnIFBYQV9IQVZFX0JPQVJEX0lSUVMKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGI4ZjFmNGIuLjg1YzdmYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC01MSwxNCArNTEsMTYgQEAKIG9iai0kKENPTkZJR19BUkNIX0dVTVNUSVgpCSs9IGd1bXN0aXgubwogb2JqLSQoQ09ORklHX0dVTVNUSVhfQU0yMDBFUEQpCSs9IGFtMjAwZXBkLm8KIG9iai0kKENPTkZJR19HVU1TVElYX0FNMzAwRVBEKQkrPSBhbTMwMGVwZC5vCi1vYmotJChDT05GSUdfTUFDSF9JTlRFTE1PVEUyKSAgICs9IGltb3RlMi5vCitvYmotJChDT05GSUdfTUFDSF9JTlRFTE1PVEUyKQkrPSBzdGFyZ2F0ZTIubwogb2JqLSQoQ09ORklHX01BQ0hfU1RBUkdBVEUyKQkrPSBzdGFyZ2F0ZTIubwogb2JqLSQoQ09ORklHX01BQ0hfWENFUCkgICAgICAgICArPSB4Y2VwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCiBvYmotJChDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCkJKz0gbHBkMjcwLm8KIG9iai0kKENPTkZJR19NQUNIX1BDTTAyNykJCSs9IHBjbTAyNy5vCiBvYmotJChDT05GSUdfTUFDSF9QQ005OTBfQkFTRUJPQVJEKQkrPSBwY205OTAtYmFzZWJvYXJkLm8KLW9iai0kKENPTkZJR19NQUNIX0NPTElCUkkpCSs9IGNvbGlicmktcHhhMjcwLm8KK29iai0kKENPTkZJR19NQUNIX0NPTElCUkkpCQkJKz0gY29saWJyaS1weGEyNzAubworb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSV9QWEEyNzBfRVZBTEJPQVJEKQkrPSBjb2xpYnJpLXB4YTI3MC1ldmFsYm9hcmQubworb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSV9QWEEyNzBfSU5DT01FKQkrPSBjb2xpYnJpLXB4YTI3MC1pbmNvbWUubwogb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSTMwMCkJKz0gY29saWJyaS1weGEzeHgubyBjb2xpYnJpLXB4YTMwMC5vCiBvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJMzIwKQkrPSBjb2xpYnJpLXB4YTN4eC5vIGNvbGlicmktcHhhMzIwLm8KIG9iai0kKENPTkZJR19NQUNIX1ZQQUMyNzApCSs9IHZwYWMyNzAubwpAQCAtNzMsNiArNzUsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfTVA5MDBDKQkrPSBtcDkwMC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVEUyKQkrPSBwYWxtdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UQykJKz0gcGFsbXRjLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE0yN1gpCSs9IHBhbG0yN3gubwogb2JqLSQoQ09ORklHX01BQ0hfUEFMTVQ1KQkrPSBwYWxtdDUubwogb2JqLSQoQ09ORklHX01BQ0hfUEFMTVRYKQkrPSBwYWxtdHgubwogb2JqLSQoQ09ORklHX01BQ0hfUEFMTVo3MikJKz0gcGFsbXo3Mi5vCkBAIC04NCwxMiArODcsNiBAQAogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkJCSs9IHRvc2Eubwogb2JqLSQoQ09ORklHX01BQ0hfSUNPTlRST0wpICAgICArPSBpY29udHJvbC5vIG14bTh4MTAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMpCSs9IGVzZXJpZXMubwotb2JqLSQoQ09ORklHX01BQ0hfRTMzMCkJCSs9IGUzMzAubwotb2JqLSQoQ09ORklHX01BQ0hfRTM1MCkJCSs9IGUzNTAubwotb2JqLSQoQ09ORklHX01BQ0hfRTc0MCkJCSs9IGU3NDAubwotb2JqLSQoQ09ORklHX01BQ0hfRTc1MCkJCSs9IGU3NTAubwotb2JqLSQoQ09ORklHX01BQ0hfRTQwMCkJCSs9IGU0MDAubwotb2JqLSQoQ09ORklHX01BQ0hfRTgwMCkJCSs9IGU4MDAubwogb2JqLSQoQ09ORklHX01BQ0hfUkFVTUZFTERfUkMpCQkrPSByYXVtZmVsZC5vCiBvYmotJChDT05GSUdfTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IpCSs9IHJhdW1mZWxkLm8KIG9iai0kKENPTkZJR19NQUNIX1JBVU1GRUxEX1NQRUFLRVIpCSs9IHJhdW1mZWxkLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCmluZGV4IGYzYjVhY2U4Li45MDQxMzQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKQEAgLTIyLDkgKzIyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdWNiMTQwMC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3BjZjg1N3guaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDE1ODYuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC01MSw2ICs1Niw1OSBAQAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2VsZWN0IEJUVUFSVCAnQ09NMS90dHlTMCcgYXMgSU8gb3B0aW9uIGZvciBwaW5zIDQyLzQzLzQ0LzQ1ICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBSZXNldCwgY29uZmlndXJlZCBhcyBHUElPIHdha2V1cCBzb3VyY2UgKi8KKwlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwKKworCS8qIExFRHMgKi8KKwlHUElPOV9HUElPLAkvKiBOQU5EIGFjdGl2aXR5IExFRCAqLworCUdQSU8xMF9HUElPLAkvKiBIZWFydGJlYXQgTEVEICovCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisJR1BJTzExM19BQzk3X25SRVNFVCwKKwlHUElPOTVfR1BJTywKKworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCisJLyogVVNCIEhvc3QgKi8KKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCisKKwkvKiBQQyBDYXJkICovCisJR1BJTzQ4X25QT0UsCisJR1BJTzQ5X25QV0UsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPODVfblBDRV8xLAorCUdQSU81NF9uUENFXzIsCisJR1BJTzc5X1BTS1RTRUwsCisJR1BJTzU1X25QUkVHLAorCUdQSU81Nl9uUFdBSVQsCisJR1BJTzU3X25JT0lTMTYsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb21wYXRpYmlsaXR5OiBQYXJhbWV0ZXIgcGFyc2luZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2lycV9lbmFibGVkOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19mZWF0dXJlc19wcmVzZW50ID0KQEAgLTczLDYgKzEzMSwzMjEgQEAKIH0KIGVhcmx5X3BhcmFtKCJiYWxsb29uM19mZWF0dXJlcyIsIHBhcnNlX2JhbGxvb24zX2ZlYXR1cmVzKTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYmFsbG9vbjNfbm9yX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJGbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBiYWxsb29uM19mbGFzaF9kYXRhW10gPSB7CisJeworCQkud2lkdGgJCT0gMiwJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCisJCS5wYXJ0cwkJPSBiYWxsb29uM19ub3JfcGFydGl0aW9ucywKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShiYWxsb29uM19ub3JfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJhbGxvb24zX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfNjRNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSAmYmFsbG9vbjNfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYgCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBiYWxsb29uM19mbGFzaF9kYXRhLAorCX0sCit9Oworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX25vcl9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM19mbGFzaCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGJhbGxvb24zX25vcl9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQXVkaW8gYW5kIFRvdWNoc2NyZWVuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgdWNiMTQwMF9wZGF0YSB2cGFjMjcwX3VjYjE0MDBfcGRhdGEgPSB7CisJLmlycQkJPSBJUlFfR1BJTyhCQUxMT09OM19HUElPX0NPREVDX0lSUSksCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zX3VjYjE0MDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJ1Y2IxNDAwX2NvcmUiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdnBhYzI3MF91Y2IxNDAwX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfdHNfaW5pdCh2b2lkKQoreworCWlmICghYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfQVVESU8pKQorCQlyZXR1cm47CisKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJhbGxvb24zX3VjYjE0MDBfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYmFsbG9vbjNfdHNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGJhbGxvb24zX2xjZF9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrCQk9IDM4MDAwLAorCQkueHJlcwkJCT0gNDgwLAorCQkueXJlcwkJCT0gNjQwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmhzeW5jX2xlbgkJPSA4LAorCQkubGVmdF9tYXJnaW4JCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgkJPSA4LAorCQkudnN5bmNfbGVuCQk9IDIsCisJCS51cHBlcl9tYXJnaW4JCT0gNCwKKwkJLmxvd2VyX21hcmdpbgkJPSA1LAorCQkuc3luYwkJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gYmFsbG9vbjNfbGNkX3NjcmVlbiA9IHsKKwkubW9kZXMJCQk9IGJhbGxvb24zX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX2JhY2tsaWdodF9wb3dlcihpbnQgb24pCit7CisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCBvbik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBiYWxsb29uM19sY2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIWJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX1RPUFBPTFkpKQorCQlyZXR1cm47CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCAiQktMLU9OIik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlJlcXVlc3RpbmcgQktMLU9OIEdQSU8gZmFpbGVkIVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJTZXR0aW5nIEJLTC1PTiBHUElPIGRpcmVjdGlvbiBmYWlsZWQhXG4iKTsKKwkJZ290byBlcnIyOworCX0KKworCWJhbGxvb24zX2xjZF9zY3JlZW4ucHhhZmJfYmFja2xpZ2h0X3Bvd2VyID0gYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyOworCXNldF9weGFfZmJfaW5mbygmYmFsbG9vbjNfbGNkX3NjcmVlbik7CisJcmV0dXJuOworCitlcnIyOgorCWdwaW9fZnJlZShCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQpOworZXJyOgorCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYmFsbG9vbjNfbGNkX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01NQ19QWEEpIHx8IGRlZmluZWQoQ09ORklHX01NQ19QWEFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAorCS5kZXRlY3RfZGVsYXlfbXMJPSAyMDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfbW1jX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X21jaV9pbmZvKCZiYWxsb29uM19tY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGJhbGxvb24zX21tY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCIEdhZGdldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCl8fGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYX01PRFVMRSkKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJaWYgKGNtZCA9PSBQWEEyWFhfVURDX0NNRF9DT05ORUNUKQorCQlVUDJPQ1IgfD0gVVAyT0NSX0RQUFVFIHwgVVAyT0NSX0RQUFVCRTsKKwllbHNlIGlmIChjbWQgPT0gUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVCkKKwkJVVAyT0NSICY9IH5VUDJPQ1JfRFBQVUU7Cit9CisKK3N0YXRpYyBpbnQgYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCh2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGJhbGxvb24zX3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLnVkY19jb21tYW5kCQk9IGJhbGxvb24zX3VkY19jb21tYW5kLAorCS51ZGNfaXNfY29ubmVjdGVkCT0gYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCwKKwkuZ3Bpb19wdWxsdXAJCT0gLTEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfdWRjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X3VkY19pbmZvKCZiYWxsb29uM191ZGNfaW5mbyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM19ncGlvX3ZidXMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWxsb29uM191ZGNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElyREEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfSVJEQSkgfHwgZGVmaW5lZChDT05GSUdfSVJEQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX0ZJUk1PREUgfCBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2lyZGFfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfZmljcF9pbmZvKCZiYWxsb29uM19maWNwX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWxsb29uM19pcmRhX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0IgSG9zdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19vaGNpX2luZm8gPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9QRVJQT1JUX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX3VoY19pbml0KHZvaWQpCit7CisJaWYgKCFiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9PSENJKSkKKwkJcmV0dXJuOworCXB4YV9zZXRfb2hjaV9pbmZvKCZiYWxsb29uM19vaGNpX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWxsb29uM191aGNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExFRHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0dQSU9fTU9EVUxFKQorc3RydWN0IGdwaW9fbGVkIGJhbGxvb24zX2dwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpncmVlbjppZGxlIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuZ3BpbwkJCT0gQkFMTE9PTjNfR1BJT19MRURfSURMRSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LCB7CisJCS5uYW1lCQkJPSAiYmFsbG9vbjM6Z3JlZW46bmFuZCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibmFuZC1kaXNrIiwKKwkJLmdwaW8JCQk9IEJBTExPT04zX0dQSU9fTEVEX05BTkQsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19ncGlvX2xlZF9pbmZvID0geworCS5sZWRzCQk9IGJhbGxvb24zX2dwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGJhbGxvb24zX2dwaW9fbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiYWxsb29uM19sZWRzID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZiYWxsb29uM19ncGlvX2xlZF9pbmZvLAorCX0KK307CisKK3N0cnVjdCBncGlvX2xlZCBiYWxsb29uM19wY2ZfZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmxlZDAiLAorCQkuZ3BpbwkJCT0gQkFMTE9PTjNfUENGX0dQSU9fTEVEMCwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwl9LCB7CisJCS5uYW1lCQkJPSAiYmFsbG9vbjM6Z3JlZW46bGVkMSIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQxLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpvcmFuZ2U6bGVkMiIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQyLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpvcmFuZ2U6bGVkMyIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQzLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpvcmFuZ2U6bGVkNCIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQ0LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpvcmFuZ2U6bGVkNSIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQ1LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpyZWQ6bGVkNiIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQ2LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sIHsKKwkJLm5hbWUJCQk9ICJiYWxsb29uMzpyZWQ6bGVkNyIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19QQ0ZfR1BJT19MRUQ3LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfcGNmX2dwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gYmFsbG9vbjNfcGNmX2dwaW9fbGVkcywKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGJhbGxvb24zX3BjZl9ncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmFsbG9vbjNfcGNmX2xlZHMgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAxLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX3BjZl9ncGlvX2xlZF9pbmZvLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBiYWxsb29uM19sZWRzX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJhbGxvb24zX2xlZHMpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYmFsbG9vbjNfcGNmX2xlZHMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWxsb29uM19sZWRzX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGUEdBIElSUQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGJhbGxvb24zX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJaW50IGJhbGxvb24zX2lycSA9IChpcnEgLSBCQUxMT09OM19JUlEoMCkpOwpAQCAtOTgsNyArNDcxLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSBfX3Jhd19yZWFkbChCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcpICYKIAkJCQkJYmFsbG9vbjNfaXJxX2VuYWJsZWQ7Ci0KIAlkbyB7CiAJCS8qIGNsZWFyIHVzZWxlc3MgZWRnZSBub3RpZmljYXRpb24gKi8KIAkJaWYgKGRlc2MtPmNoaXAtPmFjaykKQEAgLTEzMiwyMDEgKzUwNCwyNTkgQEAKIAkJImVuYWJsZWRcbiIsIF9fZnVuY19fLCBCQUxMT09OM19BVVhfTklSUSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2FjOTdfcGluX2NvbmZpZ1tdID0gewotCUdQSU8yOF9BQzk3X0JJVENMSywKLQlHUElPMjlfQUM5N19TREFUQV9JTl8wLAotCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKLQlHUElPMzFfQUM5N19TWU5DLAotCUdQSU8xMTNfQUM5N19uUkVTRVQsCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGV4cGFuZGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9fUENGODU3WCkgfHwgZGVmaW5lZChDT05GSUdfR1BJT19QQ0Y4NTdYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGNmODU3eF9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX3BjZjg1N3hfcGRhdGEgPSB7CisJLmdwaW9fYmFzZQk9IEJBTExPT04zX1BDRl9HUElPX0JBU0UsCisJLm5fbGF0Y2gJPSAwLAorCS5zZXR1cAkJPSBOVUxMLAorCS50ZWFyZG93bgk9IE5VTEwsCisJLmNvbnRleHQJPSBOVUxMLAogfTsKIAotc3RhdGljIHZvaWQgYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyKGludCBvbikKLXsKLQlwcl9kZWJ1ZygiJXM6IHBvd2VyIGlzICVzXG4iLCBfX2Z1bmNfXywgb24gPyAib24iIDogIm9mZiIpOwotCWdwaW9fc2V0X3ZhbHVlKEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwgb24pOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19sY2RfcGluX2NvbmZpZ1tdID0gewotCS8qIExDRCAtIDE2YnBwIEFjdGl2ZSBURlQgKi8KLQlHUElPeHhfTENEX1RGVF8xNkJQUCwKLQotCUdQSU85OV9HUElPLAkJLyogQmFja2xpZ2h0ICovCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBiYWxsb29uM19sY2RfbW9kZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBiYWxsb29uM19pMmNfZGV2c1tdID0gewogCXsKLQkJLnBpeGNsb2NrCQk9IDM4MDAwLAotCQkueHJlcwkJCT0gNDgwLAotCQkueXJlcwkJCT0gNjQwLAotCQkuYnBwCQkJPSAxNiwKLQkJLmhzeW5jX2xlbgkJPSA4LAotCQkubGVmdF9tYXJnaW4JCT0gOCwKLQkJLnJpZ2h0X21hcmdpbgkJPSA4LAotCQkudnN5bmNfbGVuCQk9IDIsCi0JCS51cHBlcl9tYXJnaW4JCT0gNCwKLQkJLmxvd2VyX21hcmdpbgkJPSA1LAotCQkuc3luYwkJCT0gMCwKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzRhIiwgMHgzOCksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX3BjZjg1N3hfcGRhdGEsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGJhbGxvb24zX3B4YWZiX2luZm8gPSB7Ci0JLm1vZGVzCQkJPSBiYWxsb29uM19sY2RfbW9kZXMsCi0JLm51bV9tb2RlcwkJPSBBUlJBWV9TSVpFKGJhbGxvb24zX2xjZF9tb2RlcyksCi0JLmxjZF9jb25uCQk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCi0JLnB4YWZiX2JhY2tsaWdodF9wb3dlcgk9IGJhbGxvb24zX2JhY2tsaWdodF9wb3dlciwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX21tY19waW5fY29uZmlnW10gPSB7Ci0JR1BJTzMyX01NQ19DTEssCi0JR1BJTzkyX01NQ19EQVRfMCwKLQlHUElPMTA5X01NQ19EQVRfMSwKLQlHUElPMTEwX01NQ19EQVRfMiwKLQlHUElPMTExX01NQ19EQVRfMywKLQlHUElPMTEyX01NQ19DTUQsCi19OwotCi1zdGF0aWMgdm9pZCBiYWxsb29uM19tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQorc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2kyY19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRShiYWxsb29uM19pMmNfZGV2cykpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWxsb29uM19pMmNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKLQlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKLQkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOwotCQkvKiBGSVhNRSBzb21ldGhpbmcgdG8gcHJvZCBoZXJlPyAqLwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7Ci0JCS8qIEZJWE1FIHNvbWV0aGluZyB0byBwcm9kIGhlcmU/ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOQU5ECisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNKXx8ZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk1fTU9EVUxFKQorc3RhdGljIHVpbnQxNl90IGJhbGxvb24zX2N0bCA9CisJQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UwIHwgQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UxIHwKKwlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTIgfCBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTMgfAorCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTFdQOworCitzdGF0aWMgdm9pZCBiYWxsb29uM19uYW5kX2NtZF9jdGwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJCWJhbGxvb24zX2N0bCB8PSBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDTEU7CisJCWVsc2UKKwkJCWJhbGxvb24zX2N0bCAmPSB+QkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0xFOworCisJCWlmIChjdHJsICYgTkFORF9BTEUpCisJCQliYWxsb29uM19jdGwgfD0gQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQUxFOworCQllbHNlCisJCQliYWxsb29uM19jdGwgJj0gfkJBTExPT04zX05BTkRfQ09OVFJPTF9GTEFMRTsKKworCQlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsLCBCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHKTsKIAl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIHRoaXMtPklPX0FERFJfVyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlciAJPSBiYWxsb29uM19tY2lfc2V0cG93ZXIsCitzdGF0aWMgdm9pZCBiYWxsb29uM19uYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwlpZiAoY2hpcCA8IDAgfHwgY2hpcCA+IDMpCisJCXJldHVybjsKKworCWJhbGxvb24zX2N0bCB8PSBCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTAgfAorCQkJQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UxIHwKKwkJCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMiB8CisJCQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTM7CisKKwkvKiBEZWFzc2VydCBjb3JyZWN0IG5DRSBsaW5lICovCisJYmFsbG9vbjNfY3RsICY9IH4oQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UwIDw8IGNoaXApOworCisJX19yYXdfd3JpdGV3KGJhbGxvb24zX2N0bCwgQkFMTE9PTjNfTkFORF9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBpbnQgYmFsbG9vbjNfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXZvaWQgX19pb21lbSAqdGVtcF9tYXA7CisJdWludDE2X3QgdmVyOworCWludCByZXQ7CisKKwlfX3Jhd193cml0ZXcoQkFMTE9PTjNfTkFORF9DT05UUk9MMl8xNkJJVCwgQkFMTE9PTjNfTkFORF9DT05UUk9MMl9SRUcpOworCisJdmVyID0gX19yYXdfcmVhZHcoQkFMTE9PTjNfRlBHQV9WRVIpOworCWlmICh2ZXIgPiAweDAyMDEpCisJCXByX3dhcm4oIlRoZSBGUEdBIGNvZGUsIHZlcnNpb24gMHglMDR4LCBpcyBuZXdlciB0aGFuIHJlbC0wLjMuICIKKwkJCSJOQU5EIHN1cHBvcnQgbWlnaHQgYmUgYnJva2VuIGluIHRoaXMgdmVyc2lvbiEiLCB2ZXIpOworCisJLyogUG93ZXIgdXAgdGhlIE5BTkQgY2hpcHMgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoQkFMTE9PTjNfR1BJT19SVU5fTkFORCwgIk5BTkQiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoQkFMTE9PTjNfR1BJT19SVU5fTkFORCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fTkFORCwgMSk7CisKKwkvKiBEZWFzc2VydCBhbGwgbkNFIGxpbmVzIGFuZCB3cml0ZSBwcm90ZWN0IGxpbmUgKi8KKwlfX3Jhd193cml0ZWwoYmFsbG9vbjNfY3RsLCBCQUxMT09OM19OQU5EX0NPTlRST0xfUkVHKTsKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlncGlvX2ZyZWUoQkFMTE9PTjNfR1BJT19SVU5fTkFORCk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJLyogUG93ZXIgZG93biB0aGUgTkFORCBjaGlwcyAqLworCWdwaW9fc2V0X3ZhbHVlKEJBTExPT04zX0dQSU9fUlVOX05BTkQsIDApOworCWdwaW9fZnJlZShCQUxMT09OM19HUElPX1JVTl9OQU5EKTsKK30KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGJhbGxvb24zX3BhcnRpdGlvbl9pbmZvW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJCb290IiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gU1pfNE0sCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gIlJvb3RGUyIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTAorCX0sCiB9OwogCi1zdGF0aWMgaW50IGJhbGxvb24zX3VkY19pc19jb25uZWN0ZWQodm9pZCkKLXsKLQlwcl9kZWJ1ZygiJXM6IHVkYyBjb25uZWN0ZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gMTsKLX0KK3N0YXRpYyBjb25zdCBjaGFyICpiYWxsb29uM19wYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKLXN0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6Ci0JCVVQMk9DUiB8PSAoVVAyT0NSX0RQUFVFICsgVVAyT0NSX0RQUFVCRSk7Ci0JCXByX2RlYnVnKCIlczogY29ubmVjdFxuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6Ci0JCVVQMk9DUiAmPSB+VVAyT0NSX0RQUFVFOwotCQlwcl9kZWJ1ZygiJXM6IGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKLQkJYnJlYWs7CitzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9kYXRhIGJhbGxvb24zX25hbmRfcGRhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5ucl9jaGlwcwk9IDQsCisJCS5jaGlwX29mZnNldAk9IDAsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShiYWxsb29uM19wYXJ0aXRpb25faW5mbyksCisJCS5wYXJ0aXRpb25zCT0gYmFsbG9vbjNfcGFydGl0aW9uX2luZm8sCisJCS5jaGlwX2RlbGF5CT0gNTAsCisJCS5wYXJ0X3Byb2JlX3R5cGVzID0gYmFsbG9vbjNfcGFydF9wcm9iZXMsCisJfSwKKwkuY3RybCA9IHsKKwkJLmh3Y29udHJvbAk9IDAsCisJCS5kZXZfcmVhZHkJPSAwLAorCQkuc2VsZWN0X2NoaXAJPSBiYWxsb29uM19uYW5kX3NlbGVjdF9jaGlwLAorCQkuY21kX2N0cmwJPSBiYWxsb29uM19uYW5kX2NtZF9jdGwsCisJCS5wcm9iZQkJPSBiYWxsb29uM19uYW5kX3Byb2JlLAorCQkucmVtb3ZlCQk9IGJhbGxvb24zX25hbmRfcmVtb3ZlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJhbGxvb24zX25hbmRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IEJBTExPT04zX05BTkRfQkFTRSwKKwkJLmVuZCAgID0gQkFMTE9PTjNfTkFORF9CQVNFICsgMHg0LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmFsbG9vbjNfbmFuZCA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShiYWxsb29uM19uYW5kX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBiYWxsb29uM19uYW5kX3Jlc291cmNlLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYmFsbG9vbjNfbmFuZF9wZGF0YSwKIAl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfbmFuZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM19uYW5kKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYmFsbG9vbjNfbmFuZF9pbml0KHZvaWQpIHt9CisjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBiYWxsb29uM191ZGNfaW5mbyA9IHsKLQkudWRjX2lzX2Nvbm5lY3RlZCA9IGJhbGxvb24zX3VkY19pc19jb25uZWN0ZWQsCi0JLnVkY19jb21tYW5kICAgICAgPSBiYWxsb29uM191ZGNfY29tbWFuZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfb2hjaV9waW5fY29uZmlnW10gPSB7Ci0JR1BJTzg4X1VTQkgxX1BXUiwKLQlHUElPODlfVVNCSDFfUEVOLAotfTsKLQotc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewotCS5wb3J0X21vZGUJPSBQTU1fUEVSUE9SVF9NT0RFLAotCS5mbGFncwkJPSBFTkFCTEVfUE9SVF9BTEwgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCS8qIFNlbGVjdCBCVFVBUlQgJ0NPTTEvdHR5UzAnIGFzIElPIG9wdGlvbiBmb3IgcGlucyA0Mi80My80NC80NSAqLwotCUdQSU80Ml9CVFVBUlRfUlhELAotCUdQSU80M19CVFVBUlRfVFhELAotCUdQSU80NF9CVFVBUlRfQ1RTLAotCUdQSU80NV9CVFVBUlRfUlRTLAotCi0JLyogV2FrZXVwIEdQSU8gKi8KLQlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwKLQotCS8qIE5BTkQgJiBJRExFIExFRCBHUElPcyAqLwotCUdQSU85X0dQSU8sCi0JR1BJTzEwX0dQSU8sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGJhbGxvb24zX2dwaW9fbGVkc1tdID0geworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29yZSBwb3dlciByZWd1bGF0b3IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYMTU4Nl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYmFsbG9vbjNfbWF4MTU4N2FfY29uc3VtZXJzW10gPSB7CiAJewotCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmlkbGUiLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCi0JCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9JRExFLAotCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuc3VwcGx5CT0gInZjY19jb3JlIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYmFsbG9vbjNfbWF4MTU4N2FfdjNfaW5mbyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQk9ICJ2Y2NfY29yZSByYW5nZSIsCisJCS5taW5fdVYJCT0gOTAwMDAwLAorCQkubWF4X3VWCQk9IDE3MDUwMDAsCisJCS5hbHdheXNfb24JPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCiAJfSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBiYWxsb29uM19tYXgxNTg3YV9jb25zdW1lcnMsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbWF4MTU4N2FfY29uc3VtZXJzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4MTU4Nl9zdWJkZXZfZGF0YSBiYWxsb29uM19tYXgxNTg3YV9zdWJkZXZzW10gPSB7CiAJewotCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOm5hbmQiLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCi0JCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9OQU5ELAotCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkubmFtZQkJPSAidmNjX2NvcmUiLAorCQkuaWQJCT0gTUFYMTU4Nl9WMywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYmFsbG9vbjNfbWF4MTU4N2FfdjNfaW5mbywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG1heDE1ODZfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19tYXgxNTg3YV9pbmZvID0geworCS5zdWJkZXZzICAgICA9IGJhbGxvb24zX21heDE1ODdhX3N1YmRldnMsCisJLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRShiYWxsb29uM19tYXgxNTg3YV9zdWJkZXZzKSwKKwkudjNfZ2FpbiAgICAgPSBNQVgxNTg2X0dBSU5fUjI0XzNrMzIsIC8qIDczMC4uMTU1MCBtViAqLworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJhbGxvb24zX3BpMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm1heDE1ODYiLCAweDE0KSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYmFsbG9vbjNfbWF4MTU4N2FfaW5mbywKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhID0gewotCS5sZWRzCQk9IGJhbGxvb24zX2dwaW9fbGVkcywKLQkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKGJhbGxvb24zX2dwaW9fbGVkcyksCi19Oworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX3BtaWNfaW5pdCh2b2lkKQoreworCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGkyY19ib2FyZF9pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGJhbGxvb24zX3BtaWNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zbGVkX2RldmljZSA9IHsKLQkubmFtZQk9ICJsZWRzLWdwaW8iLAotCS5pZAk9IC0xLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYWNoaW5lIGluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfaW5pdCh2b2lkKQogewotCXByX2luZm8oIkluaXRpYWxpc2luZyBCYWxsb29uM1xuIik7Ci0KLQkvKiBzeXN0ZW0gYnVzIGFyYml0ZXIgc2V0dGluZwotCSAqIC0gQ29yZV9QYXJrCi0JICogLSBMQ0Rfd3Q6RE1BX3d0OkNPUkVfV3QgPSAyOjM6NAotCSAqLwogCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKIAorCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX3Bpbl9jb25maWcpKTsKKwogCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwogCi0JcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKLQlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfQVVESU8pKSB7Ci0JCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX2FjOTdfcGluX2NvbmZpZykpOwotCQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQl9Ci0KLQlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKLQkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKLQkJZ3Bpb19yZXF1ZXN0KEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwKLQkJCSJMQ0QgQmFja2xpZ2h0IFBvd2VyIik7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOwotCQlzZXRfcHhhX2ZiX2luZm8oJmJhbGxvb24zX3B4YWZiX2luZm8pOwotCX0KLQotCWlmIChiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9NTUMpKSB7Ci0JCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX21tY19waW5fY29uZmlnKSk7Ci0JCXB4YV9zZXRfbWNpX2luZm8oJmJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhKTsKLQl9Ci0JcHhhX3NldF9maWNwX2luZm8oJmJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0JaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX09IQ0kpKSB7Ci0JCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX29oY2lfcGluX2NvbmZpZykpOwotCQlweGFfc2V0X29oY2lfaW5mbygmYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKLQl9Ci0JcHhhX3NldF91ZGNfaW5mbygmYmFsbG9vbjNfdWRjX2luZm8pOwotCi0JcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGluX2NvbmZpZykpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM2xlZF9kZXZpY2UpOworCWJhbGxvb24zX2kyY19pbml0KCk7CisJYmFsbG9vbjNfaXJkYV9pbml0KCk7CisJYmFsbG9vbjNfbGNkX2luaXQoKTsKKwliYWxsb29uM19sZWRzX2luaXQoKTsKKwliYWxsb29uM19tbWNfaW5pdCgpOworCWJhbGxvb24zX25hbmRfaW5pdCgpOworCWJhbGxvb24zX25vcl9pbml0KCk7CisJYmFsbG9vbjNfcG1pY19pbml0KCk7CisJYmFsbG9vbjNfdHNfaW5pdCgpOworCWJhbGxvb24zX3VkY19pbml0KCk7CisJYmFsbG9vbjNfdWhjX2luaXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBiYWxsb29uM19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwppbmRleCBmZGRhNmJlLi5jNzBlNmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCkBAIC02ODksNiArNjg5LDcgQEAKIHsKIAlweGEzeHhfc2V0X2kyY19wb3dlcl9pbmZvKCZjbV94MzAwX3B3cl9pMmNfaW5mbyk7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgJmNtX3gzMDBfcG1pY19pbmZvLCAxKTsKKwlzZXRfaXJxX3dha2UoSVJRX1dBS0VVUDAsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgY21feDMwMF9pbml0X3dpMndpKHZvaWQpCkBAIC03NDUsOSArNzQ2LDEwIEBACiB7CiAJY21feDMwMF9pbml0X21mcCgpOwogCi0JcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisJaWYgKGNwdV9pc19weGEzMDAoKSkKKwkJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAogCWNtX3gzMDBfaW5pdF9kYTkwMzAoKTsKIAljbV94MzAwX2luaXRfZG05MDAwKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1ldmFsYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWV2YWxib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2I2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1ldmFsYm9hcmQuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1ldmFsYm9hcmQuYworICoKKyAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTI3MCBiYXNlZCBDb2xpYnJpIEV2YWx1YXRpb24gQ2FycmllciBCb2FyZAorICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL29oY2kuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogTU1DICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzBfR1BJTywJLyogU0QgZGV0ZWN0ICovCisKKwkvKiBGRlVBUlQgKi8KKwlHUElPMzlfRkZVQVJUX1RYRCwKKwlHUElPMzRfRkZVQVJUX1JYRCwKKworCS8qIFVIQyAqLworCUdQSU84OF9VU0JIMV9QV1IsCisJR1BJTzg5X1VTQkgxX1BFTiwKKwlHUElPMTE5X1VTQkgyX1BXUiwKKwlHUElPMTIwX1VTQkgyX1BFTiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMjcwX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU8wX0NPTElCUklfUFhBMjcwX1NEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5kZXRlY3RfZGVsYXlfbXMJPSAyMDAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfbW1jX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X21jaV9pbmZvKCZjb2xpYnJpX3B4YTI3MF9tY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMjcwX21tY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCIEhvc3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIGludCBjb2xpYnJpX3B4YTI3MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCVVQMk9DUiA9IFVQMk9DUl9IWFMgfCBVUDJPQ1JfSFhPRSB8IFVQMk9DUl9EUFBERSB8IFVQMk9DUl9ETVBERTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEyNzBfb2hjaV9pbmZvID0geworCS5wb3J0X21vZGUJPSBQTU1fUEVSUE9SVF9NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBFTkFCTEVfUE9SVDIgfAorCQkJICBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKKwkuaW5pdAkJPSBjb2xpYnJpX3B4YTI3MF9vaGNpX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfdWhjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X29oY2lfaW5mbygmY29saWJyaV9weGEyNzBfb2hjaV9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfdWhjX2luaXQodm9pZCkge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX2V2YWxib2FyZF9waW5fY29uZmlnKSk7CisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisKKwljb2xpYnJpX3B4YTI3MF9tbWNfaW5pdCgpOworCWNvbGlicmlfcHhhMjcwX3VoY19pbml0KCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAtaW5jb21lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmMGYzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvaW5jb21lLmMKKyAqCisgKiBTdXBwb3J0IGZvciBJbmNvbWUgcy5yLm8uIFNILURtYXN0ZXIgUFhBMjcwIFNCQworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMAorICogTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqIFBhdmVsIFJldmFrIDxwYWxvQGJpZWx5dmxrLnNrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKyNkZWZpbmUgR1BJTzExNF9JTkNPTUVfRVRIX0lSUSAgKDExNCkKKyNkZWZpbmUgR1BJTzBfSU5DT01FX1NEX0RFVEVDVCAgKDApCisjZGVmaW5lIEdQSU8wX0lOQ09NRV9TRF9STyAgICAgICgxKQorI2RlZmluZSBHUElPNTRfSU5DT01FX0xFRF9BICAgICAoNTQpCisjZGVmaW5lIEdQSU81NV9JTkNPTUVfTEVEX0IgICAgICg1NSkKKyNkZWZpbmUgR1BJTzExM19JTkNPTUVfVFNfSVJRICAgKDExMykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUGluIGNvbmZpZ3VyYXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgbWZwX2NmZ190IGluY29tZV9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKKwlHUElPMF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMV9HUElPLAkvKiBTRCByZWFkLW9ubHkgKi8KKworCS8qIEZGVUFSVCAqLworCUdQSU8zOV9GRlVBUlRfVFhELAorCUdQSU8zNF9GRlVBUlRfUlhELAorCisJLyogQkZVQVJUICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBTVFVBUlQgKi8KKwlHUElPNDZfU1RVQVJUX1JYRCwKKwlHUElPNDdfU1RVQVJUX1RYRCwKKworCS8qIFVIQyAqLworCUdQSU84OF9VU0JIMV9QV1IsCisJR1BJTzg5X1VTQkgxX1BFTiwKKworCS8qIExDRCAqLworCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAorCisJLyogUFdNICovCisJR1BJTzE2X1BXTTBfT1VULAorCisJLyogSTJDICovCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKKworCS8qIExFRCAqLworCUdQSU81NF9HUElPLAkvKiBMRUQgQSAqLworCUdQSU81NV9HUElPLAkvKiBMRUQgQiAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaW5jb21lX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU8wX0lOQ09NRV9TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPMF9JTkNPTUVfU0RfUk8sCisJLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbmNvbWVfbW1jX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X21jaV9pbmZvKCZpbmNvbWVfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNvbWVfbW1jX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVU0IgSG9zdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBpbmNvbWVfb2hjaV9pbmZvID0geworCS5wb3J0X21vZGUJPSBQTU1fUEVSUE9SVF9NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbmNvbWVfdWhjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X29oY2lfaW5mbygmaW5jb21lX29oY2lfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGluY29tZV91aGNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExFRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCitzdHJ1Y3QgZ3Bpb19sZWQgaW5jb21lX2dwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJpbmNvbWU6Z3JlZW46bGVkYSIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5ncGlvCQkJPSBHUElPNTRfSU5DT01FX0xFRF9BLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gImluY29tZTpncmVlbjpsZWRiIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwkJLmdwaW8JCQk9IEdQSU81NV9JTkNPTUVfTEVEX0IsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGluY29tZV9ncGlvX2xlZF9pbmZvID0geworCS5sZWRzCQk9IGluY29tZV9ncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShpbmNvbWVfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGluY29tZV9sZWRzID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaW5jb21lX2dwaW9fbGVkX2luZm8sCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGluY29tZV9sZWRfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW5jb21lX2xlZHMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNvbWVfbGVkX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfSTJDX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaW5jb21lX2kyY19kZXZzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygiZHMxMzQwIiwgMHg2OCksCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGYpLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW5jb21lX2kyY19pbml0KHZvaWQpCit7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGluY29tZV9pMmNfZGV2cykpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNvbWVfaTJjX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmFtZWJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBpbmNvbWVfbGNkX21vZGVzW10gPSB7Cit7CisJLnBpeGNsb2NrCT0gMTQ0NzAwLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSAyNDAsCisJLmJwcAkJPSAzMiwKKwkuZGVwdGgJCT0gMTgsCisKKwkubGVmdF9tYXJnaW4JPSAxMCwKKwkucmlnaHRfbWFyZ2luCT0gMTAsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDgsCisKKwkuaHN5bmNfbGVuCT0gMjAsCisJLnZzeW5jX2xlbgk9IDIsCisKKwkuc3luYwkJPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gaW5jb21lX2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQk9IGluY29tZV9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoaW5jb21lX2xjZF9tb2RlcyksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xOEJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbmNvbWVfbGNkX2luaXQodm9pZCkKK3sKKwlzZXRfcHhhX2ZiX2luZm8oJmluY29tZV9sY2Rfc2NyZWVuKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jb21lX2xjZF9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmFja2xpZ2h0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9QV00pIHx8IGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9QV01fX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIGluY29tZV9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gMHgzZmYsCisJLmRmdF9icmlnaHRuZXNzCT0gMHgxZmYsCisJLnB3bV9wZXJpb2RfbnMJPSAxMDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW5jb21lX2JhY2tsaWdodCA9IHsKKwkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKKwkuZGV2CT0geworCQkucGFyZW50CQk9ICZweGEyN3hfZGV2aWNlX3B3bTAuZGV2LAorCQkucGxhdGZvcm1fZGF0YQk9ICZpbmNvbWVfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbmNvbWVfcHdtX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmluY29tZV9iYWNrbGlnaHQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNvbWVfcHdtX2luaXQodm9pZCkge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9pbmNvbWVfYm9hcmRpbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoaW5jb21lX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKKworCWluY29tZV9tbWNfaW5pdCgpOworCWluY29tZV91aGNfaW5pdCgpOworCWluY29tZV9sZWRfaW5pdCgpOworCWluY29tZV9pMmNfaW5pdCgpOworCWluY29tZV9sY2RfaW5pdCgpOworCWluY29tZV9wd21faW5pdCgpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwppbmRleCAwNjFjNDUzLi45ODY3M2FjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTI3MCBiYXNlZCBDb2xpYnJpIG1vZHVsZQogICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTAsNDkgKzExLDU1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KIAotI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi0vKgotICogR1BJTyBjb25maWd1cmF0aW9uCi0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTI3MF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBFdGhlcm5ldCAqLwogCUdQSU83OF9uQ1NfMiwJLyogRXRoZXJuZXQgQ1MgKi8KIAlHUElPMTE0X0dQSU8sCS8qIEV0aGVybmV0IElSUSAqLworCisJLyogQUM5NyAqLworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU85NV9BQzk3X25SRVNFVCwKKwlHUElPOThfQUM5N19TWVNDTEssCisJR1BJTzExM19HUElPLAkvKiBUb3VjaHNjcmVlbiBJUlEgKi8KIH07CiAKLS8qCi0gKiBOT1IgZmxhc2gKLSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29saWJyaV9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSA9CQkiQm9vdGxvYWRlciIsCiAJCS5vZmZzZXQgPQkweDAwMDAwMDAwLAogCQkuc2l6ZSA9CQkweDAwMDQwMDAwLAotCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUJLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfSwgewogCQkubmFtZSA9CQkiS2VybmVsIiwKIAkJLm9mZnNldCA9CTB4MDAwNDAwMDAsCkBAIC05MCw1MCArOTcsMTEzIEBACiAJLm51bV9yZXNvdXJjZXMgPSAxLAogfTsKIAotLyoKLSAqIERNOTAwMCBFdGhlcm5ldAotICovCi0jaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX1BYQTI3MF9FVEhfUEhZUywKLQkJLmVuZAk9IENPTElCUklfUFhBMjcwX0VUSF9QSFlTICsgMywKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9ub3JfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY29saWJyaV9weGEyNzBfZmxhc2hfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfbm9yX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApIHx8IGRlZmluZWQoQ09ORklHX0RNOTAwMF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfcHhhMjcwX2RtOTAwMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFBYQV9DUzJfUEhZUywKKwkJLmVuZAk9IFBYQV9DUzJfUEhZUyArIDMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX1BYQTI3MF9FVEhfUEhZUyArIDQsCi0JCS5lbmQJPSBDT0xJQlJJX1BYQTI3MF9FVEhfUEhZUyArIDQgKyA1MDAsCisJeworCQkuc3RhcnQJPSBQWEFfQ1MyX1BIWVMgKyA0LAorCQkuZW5kCT0gUFhBX0NTMl9QSFlTICsgNCArIDUwMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IENPTElCUklfUFhBMjcwX0VUSF9JUlEsCi0JCS5lbmQJPSBDT0xJQlJJX1BYQTI3MF9FVEhfSVJRLAorCXsKKwkJLnN0YXJ0CT0gZ3Bpb190b19pcnEoR1BJTzExNF9DT0xJQlJJX1BYQTI3MF9FVEhfSVJRKSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKEdQSU8xMTRfQ09MSUJSSV9QWEEyNzBfRVRIX0lSUSksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX1JJU0lORywKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGlicmlfcHhhMjcwX2RtOTAwMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImRtOTAwMCIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjb2xpYnJpX3B4YTI3MF9kbTkwMDBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjb2xpYnJpX3B4YTI3MF9kbTkwMDBfcmVzb3VyY2VzLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfRE05MDAwICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb2xpYnJpX3B4YTI3MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmY29saWJyaV9weGEyNzBfZmxhc2hfZGV2aWNlLAotI2lmIGRlZmluZWQoQ09ORklHX0RNOTAwMCkKLQkmZG05MDAwX2RldmljZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9ldGhfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY29saWJyaV9weGEyNzBfZG05MDAwX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMjcwX2V0aF9pbml0KHZvaWQpIHt9CiAjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQXVkaW8gYW5kIFRvdWNoc2NyZWVuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwX01PRFVMRSkKK3N0YXRpYyBweGEyeHhfYXVkaW9fb3BzX3QgY29saWJyaV9weGEyNzBfYWM5N19wZGF0YSA9IHsKKwkucmVzZXRfZ3Bpbwk9IDk1LAogfTsKIAorc3RhdGljIHN0cnVjdCB1Y2IxNDAwX3BkYXRhIGNvbGlicmlfcHhhMjcwX3VjYjE0MDBfcGRhdGEgPSB7CisJLmlycQkJPSBncGlvX3RvX2lycShHUElPMTEzX0NPTElCUklfUFhBMjcwX1RTX0lSUSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb2xpYnJpX3B4YTI3MF91Y2IxNDAwX2RldmljZSA9IHsKKwkubmFtZQkJPSAidWNiMTQwMF9jb3JlIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmNvbGlicmlfcHhhMjcwX3VjYjE0MDBfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF90c2NfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfYWM5N19pbmZvKCZjb2xpYnJpX3B4YTI3MF9hYzk3X3BkYXRhKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNvbGlicmlfcHhhMjcwX3VjYjE0MDBfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfdHNjX2luaXQodm9pZCkge30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNvbGlicmlfcHhhMjcwX2Jhc2Vib2FyZDsKK2NvcmVfcGFyYW0oY29saWJyaV9weGEyNzBfYmFzZWJvYXJkLCBjb2xpYnJpX3B4YTI3MF9iYXNlYm9hcmQsIGludCwgMDQ0NCk7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEyNzBfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX2RldmljZXMpKTsKKworCWNvbGlicmlfcHhhMjcwX25vcl9pbml0KCk7CisJY29saWJyaV9weGEyNzBfZXRoX2luaXQoKTsKKwljb2xpYnJpX3B4YTI3MF90c2NfaW5pdCgpOworCisJc3dpdGNoIChjb2xpYnJpX3B4YTI3MF9iYXNlYm9hcmQpIHsKKwljYXNlIENPTElCUklfUFhBMjcwX0VWQUxCT0FSRDoKKwkJY29saWJyaV9weGEyNzBfZXZhbGJvYXJkX2luaXQoKTsKKwkJYnJlYWs7CisJY2FzZSBDT0xJQlJJX1BYQTI3MF9JTkNPTUU6CisJCWNvbGlicmlfcHhhMjcwX2luY29tZV9ib2FyZGluaXQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbGxlZ2FsIGNvbGlicmlfcHhhMjcwX2Jhc2Vib2FyZCB0eXBlICVkXG4iLAorCQkJCWNvbGlicmlfcHhhMjcwX2Jhc2Vib2FyZCk7CisJfQorfQorCisvKiBUaGUgIkluY29tZSBzLnIuby4gU0gtRG1hc3RlciBQWEEyNzAgU0JDIiBib2FyZCBjYW4gYmUgYm9vdGVkIGVpdGhlcgorICogd2l0aCB0aGUgSU5DT01FIG1hY2ggdHlwZSBvciB3aXRoIENPTElCUkkgYW5kIHRoZSBrZXJuZWwgcGFyYW1ldGVyCisgKiAiY29saWJyaV9weGEyNzBfYmFzZWJvYXJkPTEiCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTI3MF9pbmNvbWVfaW5pdCh2b2lkKQoreworCWNvbGlicmlfcHhhMjcwX2Jhc2Vib2FyZCA9IENPTElCUklfUFhBMjcwX0lOQ09NRTsKKwljb2xpYnJpX3B4YTI3MF9pbml0KCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQ09MSUJSSSwgIlRvcmFkZXggQ29saWJyaSBQWEEyNzAiKQpAQCAtMTQ2LDMgKzIxNiwxMyBAQAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogTUFDSElORV9FTkQKIAorTUFDSElORV9TVEFSVChJTkNPTUUsICJJbmNvbWUgcy5yLm8uIFNILURtYXN0ZXIgUFhBMjcwIFNCQyIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMjcwX2luY29tZV9pbml0LAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhZTgzNWZhLi45OWU4NTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KQEAgLTI4LDYgKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTAxLDYgKzEwNCw0MiBAQAogc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfb2hjaSh2b2lkKSB7fQogI2VuZGlmIC8qIENPTkZJR19VU0JfT0hDSV9IQ0QgfHwgQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUgKi8KIAorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYKXx8ZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9QWEEyN1hfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvIGNvbGlicmlfcHhhMzIwX2dwaW9fdmJ1c19pbmZvID0geworCS5ncGlvX3ZidXMJCT0gbWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPOTYpLAorCS5ncGlvX3B1bGx1cAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGlicmlfcHhhMzIwX2dwaW9fdmJ1cyA9IHsKKwkubmFtZQk9ICJncGlvLXZidXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNvbGlicmlfcHhhMzIwX2dwaW9fdmJ1c19pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBjb2xpYnJpX3B4YTMyMF91ZGNfY29tbWFuZChpbnQgY21kKQoreworCWlmIChjbWQgPT0gUFhBMlhYX1VEQ19DTURfQ09OTkVDVCkKKwkJVVAyT0NSID0gVVAyT0NSX0hYT0UgfCBVUDJPQ1JfRFBQVUU7CisJZWxzZSBpZiAoY21kID09IFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpCisJCVVQMk9DUiA9IFVQMk9DUl9IWE9FOworfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGNvbGlicmlfcHhhMzIwX3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLnVkY19jb21tYW5kCQk9IGNvbGlicmlfcHhhMzIwX3VkY19jb21tYW5kLAorCS5ncGlvX3B1bGx1cAkJPSAtMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X3VkYyh2b2lkKQoreworCXB4YV9zZXRfdWRjX2luZm8oJmNvbGlicmlfcHhhMzIwX3VkY19pbmZvKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNvbGlicmlfcHhhMzIwX2dwaW9fdmJ1cyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfdWRjKHZvaWQpIHt9CisjZW5kaWYKKwogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9tbWNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJR1BJTzIyX01NQzFfQ0xLLAogCUdQSU8yM19NTUMxX0NNRCwKQEAgLTIxMiw2ICsyNTEsNyBAQAogCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKIAkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOworCWNvbGlicmlfcHhhMzIwX2luaXRfdWRjKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQ09MSUJSSTMyMCwgIlRvcmFkZXggQ29saWJyaSBQWEEzMjAiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggNDYxYmE0MC4uM2ZiMGZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC01MCwxNCArNTAsMTMgQEAKICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KKyNpbmNsdWRlIDxtYWNoL3NoYXJwc2xfcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3NoYXJwc2xfcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSAic2hhcnBzbC5oIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3JnaV9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKIAkvKiBTdGF0aWMgTWVtb3J5IEkvTyAqLwpAQCAtMTg1LDggKzE4NCw2IEBACiAJLm51bV9kZXZzICAgICA9IDEsCiB9OwogCi1FWFBPUlRfU1lNQk9MKGNvcmdpc2Nvb3BfZGV2aWNlKTsKLQogc3RhdGljIHN0cnVjdCB3MTAwX21lbV9pbmZvIGNvcmdpX2ZiX21lbSA9IHsKIAkuZXh0X2NudGwgICAgICAgICAgPSAweDAwMDQwMDAzLAogCS5zZHJhbV9tb2RlX3JlZyAgICA9IDB4MDA2NTAwMjEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfcG0uYwppbmRleCAzZjFkYzc0Li4yOTAzNDc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMKQEAgLTIzLDEyICsyMywxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8bWFjaC9jb3JnaS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3NoYXJwc2xfcG0uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJzaGFycHNsLmgiCiAKICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCAgICAgICAgIDB4OTkgIC8qIDIuOVYgKi8KICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVEVNUCAgICAgICAgIDB4ZTAgIC8qIDIuOVYgKi8KQEAgLTEzNCwxMSArMTMzLDExIEBACiAJY2FzZSBTSEFSUFNMX1NUQVRVU19BQ0lOOgogCQlyZXR1cm4gKChHUExSKENPUkdJX0dQSU9fQUNfSU4pICYgR1BJT19iaXQoQ09SR0lfR1BJT19BQ19JTikpICE9IDApOwogCWNhc2UgU0hBUlBTTF9TVEFUVVNfTE9DSzoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKTsKKwkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayk7CiAJY2FzZSBTSEFSUFNMX1NUQVRVU19DSFJHRlVMTDoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKTsKKwkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCk7CiAJY2FzZSBTSEFSUFNMX1NUQVRVU19GQVRBTDoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCk7CisJCXJldHVybiBncGlvX2dldF92YWx1ZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKTsKIAljYXNlIFNIQVJQU0xfQUNJTl9WT0xUOgogCQlyZXR1cm4gc2hhcnBzbF9wbV9weGFfcmVhZF9tYXgxMTExKE1BWDExMTFfQUNJTl9WT0xUKTsKIAljYXNlIFNIQVJQU0xfQkFUVF9URU1QOgpAQCAtMTY1LDggKzE2NCw2IEBACiAJLnNob3VsZF93YWtldXAgICA9IGNvcmdpX3Nob3VsZF93YWtldXAsCiAjaWYgZGVmaW5lZChDT05GSUdfTENEX0NPUkdJKQogCS5iYWNrbGlnaHRfbGltaXQgPSBjb3JnaV9sY2RfbGltaXRfaW50ZW5zaXR5LAotI2VsaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0NPUkdJKQotCS5iYWNrbGlnaHRfbGltaXQgPSBjb3JnaWJsX2xpbWl0X2ludGVuc2l0eSwKICNlbmRpZgogCS5jaGFyZ2Vfb25fdm9sdAkgID0gU0hBUlBTTF9DSEFSR0VfT05fVk9MVCwKIAkuY2hhcmdlX29uX3RlbXAJICA9IFNIQVJQU0xfQ0hBUkdFX09OX1RFTVAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKaW5kZXggOGUxMGRiMS4uNjU0NDdkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCisjaW5jbHVkZSA8YXNtL3BtdS5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CkBAIC0zMSw2ICszMiwxOSBAQAogCQlkZXZfZXJyKCZkZXYtPmRldiwgInVuYWJsZSB0byByZWdpc3RlciBkZXZpY2U6ICVkXG4iLCByZXQpOwogfQogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YV9yZXNvdXJjZV9wbXUgPSB7CisJLnN0YXJ0CT0gSVJRX1BNVSwKKwkuZW5kCT0gSVJRX1BNVSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhX2RldmljZV9wbXUgPSB7CisJLm5hbWUJCT0gImFybS1wbXUiLAorCS5pZAkJPSBBUk1fUE1VX0RFVklDRV9DUFUsCisJLnJlc291cmNlCT0gJnB4YV9yZXNvdXJjZV9wbXUsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBweGFtY2lfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSAweDQxMTAwMDAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5oCmluZGV4IDkzODE3ZDkuLjUwMzUzZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKQEAgLTEsMyArMSw0IEBACitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGFfZGV2aWNlX3BtdTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9kZXZpY2VfbWNpOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9tY2kyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcHhhM3h4X2RldmljZV9tY2kzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmRlMzM4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYworKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRvc2hpYmEgZTMzMCBQREFzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3RjNjM4N3hiLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3VkYy5oPgotCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImVzZXJpZXMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlMzMwIHRjNjM4N3hiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhIGUzMzBfdGM2Mzg3eGJfaW5mbyA9IHsKLQkuZW5hYmxlICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKLQkuZGlzYWJsZSAgPSAmZXNlcmllc190bWlvX2Rpc2FibGUsCi0JLnN1c3BlbmQgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAotCS5yZXN1bWUgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTMzMF90YzYzODd4Yl9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gInRjNjM4N3hiIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmUzMzBfdGM2Mzg3eGJfaW5mbywKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gMiwKLQkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZlMzMwX3RjNjM4N3hiX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlMzMwX2luaXQodm9pZCkKLXsKLQlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKLQllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKLQllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci0JcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKLX0KLQotTUFDSElORV9TVEFSVChFMzMwLCAiVG9zaGliYSBlMzMwIikKLQkvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLwotCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKLQkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCi0JLmZpeHVwCQk9IGVzZXJpZXNfZml4dXAsCi0JLmluaXRfbWFjaGluZQk9IGUzMzBfaW5pdCwKLQkudGltZXIJCT0gJnB4YV90aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwZjA1NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGUzNTAgUERBcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC90N2w2NnhiLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3VkYy5oPgotCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImVzZXJpZXMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlMzUwIHQ3bDY2eGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSBlMzUwX3Q3bDY2eGJfaW5mbyA9IHsKLQkuaXJxX2Jhc2UgICAgICAgICAgICAgICA9IElSUV9CT0FSRF9TVEFSVCwKLQkuZW5hYmxlICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAotCS5zdXNwZW5kICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAotCS5yZXN1bWUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlMzUwX3Q3bDY2eGJfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJ0N2w2NnhiIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmUzNTBfdDdsNjZ4Yl9pbmZvLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSAgICAgID0gZXNlcmllc190bWlvX3Jlc291cmNlcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZlMzUwX3Q3bDY2eGJfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGUzNTBfaW5pdCh2b2lkKQotewotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOwotCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwotfQotCi1NQUNISU5FX1NUQVJUKEUzNTAsICJUb3NoaWJhIGUzNTAiKQotCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCi0JLnBoeXNfaW8JPSAweDQwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAotCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKLQkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKLQkuaW5pdF9tYWNoaW5lCT0gZTM1MF9pbml0LAotCS50aW1lcgkJPSAmcHhhX3RpbWVyLAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWI5NTBmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGVzZXJpZXMgUERBcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC90N2w2NnhiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvdWRjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZXNlcmllcy5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFNDAwIExDRCBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gZTQwMF9weGFmYl9tb2RlX2luZm8gPSB7Ci0JLnBpeGNsb2NrICAgICAgID0gMTQwNzAzLAotCS54cmVzICAgICAgICAgICA9IDI0MCwKLQkueXJlcyAgICAgICAgICAgPSAzMjAsCi0JLmJwcCAgICAgICAgICAgID0gMTYsCi0JLmhzeW5jX2xlbiAgICAgID0gNCwKLQkubGVmdF9tYXJnaW4gICAgPSAyOCwKLQkucmlnaHRfbWFyZ2luICAgPSA4LAotCS52c3luY19sZW4gICAgICA9IDMsCi0JLnVwcGVyX21hcmdpbiAgID0gNSwKLQkubG93ZXJfbWFyZ2luICAgPSA2LAotCS5zeW5jICAgICAgICAgICA9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBlNDAwX3B4YWZiX21hY2hfaW5mbyA9IHsKLQkubW9kZXMgICAgICAgICAgPSAmZTQwMF9weGFmYl9tb2RlX2luZm8sCi0JLm51bV9tb2RlcyAgICAgID0gMSwKLQkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQLAotCS5sY2NyMyAgICAgICAgICA9IDAsCi0JLnB4YWZiX2JhY2tsaWdodF9wb3dlciAgPSBOVUxMLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEU0MDAgTUZQIGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlNDAwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCS8qIENoaXAgc2VsZWN0cyAqLwotCUdQSU8xNV9uQ1NfMSwgICAvKiBDUzEgLSBGbGFzaCAqLwotCUdQSU84MF9uQ1NfNCwgICAvKiBDUzQgLSBUTUlPICovCi0KLQkvKiBDbG9ja3MgKi8KLQlHUElPMTJfMzJLSHosCi0KLQkvKiBCVFVBUlQgKi8KLQlHUElPNDJfQlRVQVJUX1JYRCwKLQlHUElPNDNfQlRVQVJUX1RYRCwKLQlHUElPNDRfQlRVQVJUX0NUUywKLQotCS8qIFRNSU8gY29udHJvbGxlciAqLwotCUdQSU8xOV9HUElPLCAvKiB0N2w2NnhiICNQQ0xSICovCi0JR1BJTzQ1X0dQSU8sIC8qIHQ3bDY2eGIgI1NVU1BFTkQgKE5PVCBCVFVBUlQhKSAqLwotCi0JLyogd2FrZXVwICovCi0JR1BJTzBfR1BJTyB8IFdBS0VVUF9PTl9FREdFX1JJU0UsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25fYSA9IHsKLQkubmFtZSA9ICJJbnRlcm5hbCBOQU5EIGZsYXNoIiwKLQkub2Zmc2V0ID0gIDAsCi0JLnNpemUgPSAgTVREUEFSVF9TSVpfRlVMTCwKLX07Ci0KLXN0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgZTQwMF90N2w2NnhiX25hbmRfYmJ0ID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDQsCi0JLmxlbiA9IDIsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdG1pb19uYW5kX2RhdGEgZTQwMF90N2w2NnhiX25hbmRfY29uZmlnID0gewotCS5udW1fcGFydGl0aW9ucyA9IDEsCi0JLnBhcnRpdGlvbiA9ICZwYXJ0aXRpb25fYSwKLQkuYmFkYmxvY2tfcGF0dGVybiA9ICZlNDAwX3Q3bDY2eGJfbmFuZF9iYnQsCi19OwotCi1zdGF0aWMgc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSBlNDAwX3Q3bDY2eGJfaW5mbyA9IHsKLQkuaXJxX2Jhc2UgCQk9IElSUV9CT0FSRF9TVEFSVCwKLQkuZW5hYmxlICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAotCS5zdXNwZW5kICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAotCS5yZXN1bWUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCi0KLQkubmFuZF9kYXRhICAgICAgICAgICAgICA9ICZlNDAwX3Q3bDY2eGJfbmFuZF9jb25maWcsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlNDAwX3Q3bDY2eGJfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJ0N2w2NnhiIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmU0MDBfdDdsNjZ4Yl9pbmZvLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSAgICAgID0gZXNlcmllc190bWlvX3Jlc291cmNlcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZlNDAwX3Q3bDY2eGJfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGU0MDBfaW5pdCh2b2lkKQotewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGU0MDBfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCS8qIEZpeG1lIC0gZTQwMCBtYXkgaGF2ZSBhIHN3aXRjaGVkIGNsb2NrICovCi0JZXNlcmllc19yZWdpc3Rlcl9jbGtzKCk7Ci0JZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwotCXNldF9weGFfZmJfaW5mbygmZTQwMF9weGFmYl9tYWNoX2luZm8pOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwotCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRTQwMCwgIlRvc2hpYmEgZTQwMCIpCi0JLyogTWFpbnRhaW5lcjogSWFuIE1vbHRvbiAoc3B5cm9AZjJzLmNvbSkgKi8KLQkucGh5c19pbwk9IDB4NDAwMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAotCS5maXh1cAkJPSBlc2VyaWVzX2ZpeHVwLAotCS5pbml0X21hY2hpbmUJPSBlNDAwX2luaXQsCi0JLnRpbWVyCQk9ICZweGFfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NzgwMjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLS8qCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRvc2hpYmEgZXNlcmllcyBQREFzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvdDdsNjZ4Yi5oPgotCi0jaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+Ci0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3VkYy5oPgotI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJlc2VyaWVzLmgiCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBlNzQwIHZpZGVvIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgdzEwMF9nZW5fcmVncyBlNzQwX2xjZF9yZWdzID0gewotCS5sY2RfZm9ybWF0ID0gICAgICAgICAgICAweDAwMDA4MDIzLAotCS5sY2RkX2NudGwxID0gICAgICAgICAgICAweDBmMDAwMDAwLAotCS5sY2RkX2NudGwyID0gICAgICAgICAgICAweDAwMDNmZmZmLAotCS5nZW5sY2RfY250bDEgPSAgICAgICAgICAweDAwZmZmZjAzLAotCS5nZW5sY2RfY250bDIgPSAgICAgICAgICAweDAwM2MwZjAzLAotCS5nZW5sY2RfY250bDMgPSAgICAgICAgICAweDAwMDE0M2FhLAotfTsKLQotc3RhdGljIHN0cnVjdCB3MTAwX21vZGUgZTc0MF9sY2RfbW9kZSA9IHsKLQkueHJlcyAgICAgICAgICAgID0gMjQwLAotCS55cmVzICAgICAgICAgICAgPSAzMjAsCi0JLmxlZnRfbWFyZ2luICAgICA9IDIwLAotCS5yaWdodF9tYXJnaW4gICAgPSAyOCwKLQkudXBwZXJfbWFyZ2luICAgID0gOSwKLQkubG93ZXJfbWFyZ2luICAgID0gOCwKLQkuY3J0Y19zcyAgICAgICAgID0gMHg4MDE0MDAxMywKLQkuY3J0Y19scyAgICAgICAgID0gMHg4MTE1MDExMCwKLQkuY3J0Y19ncyAgICAgICAgID0gMHg4MDA1MDAwNSwKLQkuY3J0Y192cG9zX2dzICAgID0gMHgwMDBhMDAwOSwKLQkuY3J0Y19yZXYgICAgICAgID0gMHgwMDQwMDEwYSwKLQkuY3J0Y19kY2xrICAgICAgID0gMHhhOTA2MDAwYSwKLQkuY3J0Y19nY2xrICAgICAgID0gMHg4MDA1MDEwOCwKLQkuY3J0Y19nb2UgICAgICAgID0gMHg4MDA1MDEwOCwKLQkucGxsX2ZyZXEgICAgICAgID0gNTcsCi0JLnBpeGNsa19kaXZpZGVyICAgICAgICAgPSA0LAotCS5waXhjbGtfZGl2aWRlcl9yb3RhdGVkID0gNCwKLQkucGl4Y2xrX3NyYyAgICAgPSBDTEtfU1JDX1hUQUwsCi0JLnN5c2Nsa19kaXZpZGVyICA9IDEsCi0JLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCi0JLmNydGNfcHMxX2FjdGl2ZSA9ICAgICAgIDB4NDEwNjAwMTAsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU3NDBfdzEwMF9ncGlvX2luZm8gPSB7Ci0JLmluaXRfZGF0YTEgPSAweDIxMDAyMTAzLAotCS5ncGlvX2RpcjEgID0gMHhmZmZmZGVmZiwKLQkuZ3Bpb19vZTEgICA9IDB4MDNjMDA2NDMsCi0JLmluaXRfZGF0YTIgPSAweDAwM2YwMDNmLAotCS5ncGlvX2RpcjIgID0gMHhmZmZmZmZmZiwKLQkuZ3Bpb19vZTIgICA9IDB4MDAwMDAwZmYsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTc0MF9mYl9pbmZvID0gewotCS5tb2RlbGlzdCAgID0gJmU3NDBfbGNkX21vZGUsCi0JLm51bV9tb2RlcyAgPSAxLAotCS5yZWdzICAgICAgID0gJmU3NDBfbGNkX3JlZ3MsCi0JLmdwaW8gICAgICAgPSAmZTc0MF93MTAwX2dwaW9faW5mbywKLQkueHRhbF9mcmVxID0gMTQzMTgwMDAsCi0JLnh0YWxfZGJsICAgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlNzQwX2ZiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ICAgICAgICAgID0gMHgwYzAwMDAwMCwKLQkJLmVuZCAgICAgICAgICAgID0gMHgwY2ZmZmZmZiwKLQkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU3NDBfZmJfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJ3MTAwZmIiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmU3NDBfZmJfaW5mbywKLQl9LAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZTc0MF9mYl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgICA9IGU3NDBfZmJfcmVzb3VyY2VzLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1GUCBQaW4gY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGU3NDBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogQ2hpcCBzZWxlY3RzICovCi0JR1BJTzE1X25DU18xLCAgIC8qIENTMSAtIEZsYXNoICovCi0JR1BJTzc5X25DU18zLCAgIC8qIENTMyAtIElNQUdFT04gKi8KLQlHUElPODBfbkNTXzQsICAgLyogQ1M0IC0gVE1JTyAqLwotCi0JLyogQ2xvY2tzICovCi0JR1BJTzEyXzMyS0h6LAotCi0JLyogQlRVQVJUICovCi0JR1BJTzQyX0JUVUFSVF9SWEQsCi0JR1BJTzQzX0JUVUFSVF9UWEQsCi0JR1BJTzQ0X0JUVUFSVF9DVFMsCi0KLQkvKiBUTUlPIGNvbnRyb2xsZXIgKi8KLQlHUElPMTlfR1BJTywgLyogdDdsNjZ4YiAjUENMUiAqLwotCUdQSU80NV9HUElPLCAvKiB0N2w2NnhiICNTVVNQRU5EIChOT1QgQlRVQVJUISkgKi8KLQotCS8qIFVEQyAqLwotCUdQSU8xM19HUElPLAotCUdQSU8zX0dQSU8sCi0KLQkvKiBJckRBICovCi0JR1BJTzM4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCi0KLQkvKiBBQzk3ICovCi0JR1BJTzI4X0FDOTdfQklUQ0xLLAotCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCi0JR1BJTzMwX0FDOTdfU0RBVEFfT1VULAotCUdQSU8zMV9BQzk3X1NZTkMsCi0KLQkvKiBBdWRpbyBwb3dlciBjb250cm9sICovCi0JR1BJTzE2X0dQSU8sICAvKiBBQzk3IGNvZGVjIEFWREQyIHN1cHBseSAoYW5hbG9ndWUgcG93ZXIpICovCi0JR1BJTzQwX0dQSU8sICAvKiBNaWMgYW1wIHBvd2VyICovCi0JR1BJTzQxX0dQSU8sICAvKiBIZWFkcGhvbmUgYW1wIHBvd2VyICovCi0KLQkvKiBQQyBDYXJkICovCi0JR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KLQlHUElPNDRfR1BJTywgIC8qIENEMSAqLwotCUdQSU8xMV9HUElPLCAgLyogSVJRMCAqLwotCUdQSU82X0dQSU8sICAgLyogSVJRMSAqLwotCUdQSU8yN19HUElPLCAgLyogUlNUMCAqLwotCUdQSU8yNF9HUElPLCAgLyogUlNUMSAqLwotCUdQSU8yMF9HUElPLCAgLyogUFdSMCAqLwotCUdQSU8yM19HUElPLCAgLyogUFdSMSAqLwotCUdQSU80OF9uUE9FLAotCUdQSU80OV9uUFdFLAotCUdQSU81MF9uUElPUiwKLQlHUElPNTFfblBJT1csCi0JR1BJTzUyX25QQ0VfMSwKLQlHUElPNTNfblBDRV8yLAotCUdQSU81NF9uUFNLVFNFTCwKLQlHUElPNTVfblBSRUcsCi0JR1BJTzU2X25QV0FJVCwKLQlHUElPNTdfbklPSVMxNiwKLQotCS8qIHdha2V1cCAqLwotCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fRURHRV9SSVNFLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gZTc0MCB0N2w2NnhiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgZTc0MF90N2w2NnhiX2luZm8gPSB7Ci0JLmlycV9iYXNlIAkJPSBJUlFfQk9BUkRfU1RBUlQsCi0JLmVuYWJsZSAgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKLQkuc3VzcGVuZCAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fc3VzcGVuZCwKLQkucmVzdW1lICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTc0MF90N2w2NnhiX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAidDdsNjZ4YiIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZlNzQwX3Q3bDY2eGJfaW5mbywKLQl9LAotCS5udW1fcmVzb3VyY2VzID0gMiwKLQkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmU3NDBfZmJfZGV2aWNlLAotCSZlNzQwX3Q3bDY2eGJfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGU3NDBfaW5pdCh2b2lkKQotewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGU3NDBfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOwotCWNsa19hZGRfYWxpYXMoIkNMS19DSzQ4TSIsIGU3NDBfdDdsNjZ4Yl9kZXZpY2UubmFtZSwKLQkJCSJVRENDTEsiLCAmcHhhMjV4X2RldmljZV91ZGMuZGV2KSwKLQllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci0JcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKLQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOwotfQotCi1NQUNISU5FX1NUQVJUKEU3NDAsICJUb3NoaWJhIGU3NDAiKQotCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCi0JLnBoeXNfaW8JPSAweDQwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAotCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKLQkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKLQkuaW5pdF9tYWNoaW5lCT0gZTc0MF9pbml0LAotCS50aW1lcgkJPSAmcHhhX3RpbWVyLAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjgzY2FhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBUb3NoaWJhIGVzZXJpZXMgUERBcwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJYW4gTW9sdG9uIDxzcHlyb0BmMnMuY29tPgotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3RjNjM5M3hiLmg+Ci0KLSNpbmNsdWRlIDx2aWRlby93MTAwZmIuaD4KLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvdWRjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcmRhLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9hdWRpby5oPgotCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotI2luY2x1ZGUgImVzZXJpZXMuaCIKLSNpbmNsdWRlICJjbG9jay5oIgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEU3NTAgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgdzEwMF9nZW5fcmVncyBlNzUwX2xjZF9yZWdzID0gewotCS5sY2RfZm9ybWF0ID0gICAgICAgICAgICAweDAwMDA4MDAzLAotCS5sY2RkX2NudGwxID0gICAgICAgICAgICAweDAwMDAwMDAwLAotCS5sY2RkX2NudGwyID0gICAgICAgICAgICAweDAwMDNmZmZmLAotCS5nZW5sY2RfY250bDEgPSAgICAgICAgICAweDAwZmZmMDAzLAotCS5nZW5sY2RfY250bDIgPSAgICAgICAgICAweDAwM2MwZjAzLAotCS5nZW5sY2RfY250bDMgPSAgICAgICAgICAweDAwMDE0M2FhLAotfTsKLQotc3RhdGljIHN0cnVjdCB3MTAwX21vZGUgZTc1MF9sY2RfbW9kZSA9IHsKLQkueHJlcyAgICAgICAgICAgID0gMjQwLAotCS55cmVzICAgICAgICAgICAgPSAzMjAsCi0JLmxlZnRfbWFyZ2luICAgICA9IDIxLAotCS5yaWdodF9tYXJnaW4gICAgPSAyMiwKLQkudXBwZXJfbWFyZ2luICAgID0gNSwKLQkubG93ZXJfbWFyZ2luICAgID0gNCwKLQkuY3J0Y19zcyAgICAgICAgID0gMHg4MDE1MDAxNCwKLQkuY3J0Y19scyAgICAgICAgID0gMHg4MDE0MDAwZCwKLQkuY3J0Y19ncyAgICAgICAgID0gMHhjMTAwMDAwNSwKLQkuY3J0Y192cG9zX2dzICAgID0gMHgwMDAyMDE0NywKLQkuY3J0Y19yZXYgICAgICAgID0gMHgwMDQwMDEwYSwKLQkuY3J0Y19kY2xrICAgICAgID0gMHhhMTcwMDAzMCwKLQkuY3J0Y19nY2xrICAgICAgID0gMHg4MGNjMDAxNSwKLQkuY3J0Y19nb2UgICAgICAgID0gMHg4MGNjMDAxNSwKLQkuY3J0Y19wczFfYWN0aXZlID0gMHg2MTA2MDAxNywKLQkucGxsX2ZyZXEgICAgICAgID0gNTcsCi0JLnBpeGNsa19kaXZpZGVyICAgICAgICAgPSA0LAotCS5waXhjbGtfZGl2aWRlcl9yb3RhdGVkID0gNCwKLQkucGl4Y2xrX3NyYyAgICAgPSBDTEtfU1JDX1hUQUwsCi0JLnN5c2Nsa19kaXZpZGVyICA9IDEsCi0JLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU3NTBfdzEwMF9ncGlvX2luZm8gPSB7Ci0JLmluaXRfZGF0YTEgPSAweDAxMTkyZjFiLAotCS5ncGlvX2RpcjEgID0gMHhkNWZmZGVmZiwKLQkuZ3Bpb19vZTEgICA9IDB4MDAwMDIwYmYsCi0JLmluaXRfZGF0YTIgPSAweDAxMGYwMTBmLAotCS5ncGlvX2RpcjIgID0gMHhmZmZmZmZmZiwKLQkuZ3Bpb19vZTIgICA9IDB4MDAwMDAxY2YsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTc1MF9mYl9pbmZvID0gewotCS5tb2RlbGlzdCAgID0gJmU3NTBfbGNkX21vZGUsCi0JLm51bV9tb2RlcyAgPSAxLAotCS5yZWdzICAgICAgID0gJmU3NTBfbGNkX3JlZ3MsCi0JLmdwaW8gICAgICAgPSAmZTc1MF93MTAwX2dwaW9faW5mbywKLQkueHRhbF9mcmVxICA9IDE0MzE4MDAwLAotCS54dGFsX2RibCAgID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZTc1MF9mYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgICAgICAgICA9IDB4MGMwMDAwMDAsCi0JCS5lbmQgICAgICAgICAgICA9IDB4MGNmZmZmZmYsCi0JCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlNzUwX2ZiX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAidzEwMGZiIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhICA9ICZlNzUwX2ZiX2luZm8sCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGU3NTBfZmJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBlNzUwX2ZiX3Jlc291cmNlcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIGU3NTAgTUZQIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZTc1MF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQkvKiBDaGlwIHNlbGVjdHMgKi8KLQlHUElPMTVfbkNTXzEsICAgLyogQ1MxIC0gRmxhc2ggKi8KLQlHUElPNzlfbkNTXzMsICAgLyogQ1MzIC0gSU1BR0VPTiAqLwotCUdQSU84MF9uQ1NfNCwgICAvKiBDUzQgLSBUTUlPICovCi0KLQkvKiBDbG9ja3MgKi8KLQlHUElPMTFfM182TUh6LAotCi0JLyogQlRVQVJUICovCi0JR1BJTzQyX0JUVUFSVF9SWEQsCi0JR1BJTzQzX0JUVUFSVF9UWEQsCi0JR1BJTzQ0X0JUVUFSVF9DVFMsCi0KLQkvKiBUTUlPIGNvbnRyb2xsZXIgKi8KLQlHUElPMTlfR1BJTywgLyogdDdsNjZ4YiAjUENMUiAqLwotCUdQSU80NV9HUElPLCAvKiB0N2w2NnhiICNTVVNQRU5EIChOT1QgQlRVQVJUISkgKi8KLQotCS8qIFVEQyAqLwotCUdQSU8xM19HUElPLAotCUdQSU8zX0dQSU8sCi0KLQkvKiBJckRBICovCi0JR1BJTzM4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCi0KLQkvKiBBQzk3ICovCi0JR1BJTzI4X0FDOTdfQklUQ0xLLAotCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCi0JR1BJTzMwX0FDOTdfU0RBVEFfT1VULAotCUdQSU8zMV9BQzk3X1NZTkMsCi0KLQkvKiBBdWRpbyBwb3dlciBjb250cm9sICovCi0JR1BJTzRfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KLQlHUElPN19HUElPLCAgLyogU3BlYWtlciBhbXAgcG93ZXIgKi8KLQlHUElPMzdfR1BJTywgLyogSGVhZHBob25lIGRldGVjdCAqLwotCi0JLyogUEMgQ2FyZCAqLwotCUdQSU84X0dQSU8sICAgLyogQ0QwICovCi0JR1BJTzQ0X0dQSU8sICAvKiBDRDEgKi8KLQlHUElPMTFfR1BJTywgIC8qIElSUTAgKi8KLQlHUElPNl9HUElPLCAgIC8qIElSUTEgKi8KLQlHUElPMjdfR1BJTywgIC8qIFJTVDAgKi8KLQlHUElPMjRfR1BJTywgIC8qIFJTVDEgKi8KLQlHUElPMjBfR1BJTywgIC8qIFBXUjAgKi8KLQlHUElPMjNfR1BJTywgIC8qIFBXUjEgKi8KLQlHUElPNDhfblBPRSwKLQlHUElPNDlfblBXRSwKLQlHUElPNTBfblBJT1IsCi0JR1BJTzUxX25QSU9XLAotCUdQSU81Ml9uUENFXzEsCi0JR1BJTzUzX25QQ0VfMiwKLQlHUElPNTRfblBTS1RTRUwsCi0JR1BJTzU1X25QUkVHLAotCUdQSU81Nl9uUFdBSVQsCi0JR1BJTzU3X25JT0lTMTYsCi0KLQkvKiB3YWtldXAgKi8KLQlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tIGU3NTAgdGM2MzkzeGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIGU3NTBfdGM2MzkzeGJfaW5mbyA9IHsKLQkuaXJxX2Jhc2UgICAgICAgPSBJUlFfQk9BUkRfU1RBUlQsCi0JLnNjcl9wbGwyY3IgICAgID0gMHgwY2MxLAotCS5zY3JfZ3BlciAgICAgICA9IDAsCi0JLmdwaW9fYmFzZSAgICAgID0gLTEsCi0JLnN1c3BlbmQgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAotCS5yZXN1bWUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAotCS5lbmFibGUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAotCS5kaXNhYmxlICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU3NTBfdGM2MzkzeGJfZGV2aWNlID0gewotCS5uYW1lICAgICAgICAgICA9ICJ0YzYzOTN4YiIsCi0JLmlkICAgICAgICAgICAgID0gLTEsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZlNzUwX3RjNjM5M3hiX2luZm8sCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDIsCi0JLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmU3NTBfZmJfZGV2aWNlLAotCSZlNzUwX3RjNjM5M3hiX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlNzUwX2luaXQodm9pZCkKLXsKLQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNzUwX3Bpbl9jb25maWcpKTsKLQlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKLQljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsIGU3NTBfdGM2MzkzeGJfZGV2aWNlLm5hbWUsCi0JCQkiR1BJTzExX0NMSyIsIE5VTEwpLAotCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOwotCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOwotCXB4YV9zZXRfZmljcF9pbmZvKCZlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRTc1MCwgIlRvc2hpYmEgZTc1MCIpCi0JLyogTWFpbnRhaW5lcjogSWFuIE1vbHRvbiAoc3B5cm9AZjJzLmNvbSkgKi8KLQkucGh5c19pbwk9IDB4NDAwMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAotCS5maXh1cAkJPSBlc2VyaWVzX2ZpeHVwLAotCS5pbml0X21hY2hpbmUJPSBlNzUwX2luaXQsCi0JLnRpbWVyCQk9ICZweGFfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYTk3YmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIFRvc2hpYmEgZXNlcmllcyBQREFzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCi0gKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCi0gKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKLSAqIG9yIGltcGxpZWQuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvdGM2MzkzeGIuaD4KLQotI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC91ZGMuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+Ci0KLSNpbmNsdWRlICJnZW5lcmljLmgiCi0jaW5jbHVkZSAiZXNlcmllcy5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBlODAwIExDRCBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGU4MDBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogQUM5NyAqLwotCUdQSU8yOF9BQzk3X0JJVENMSywKLQlHUElPMjlfQUM5N19TREFUQV9JTl8wLAotCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKLQlHUElPMzFfQUM5N19TWU5DLAotfTsKLQotc3RhdGljIHN0cnVjdCB3MTAwX2dlbl9yZWdzIGU4MDBfbGNkX3JlZ3MgPSB7Ci0JLmxjZF9mb3JtYXQgPSAgICAgICAgICAgIDB4MDAwMDgwMDMsCi0JLmxjZGRfY250bDEgPSAgICAgICAgICAgIDB4MDJhMDAwMDAsCi0JLmxjZGRfY250bDIgPSAgICAgICAgICAgIDB4MDAwM2ZmZmYsCi0JLmdlbmxjZF9jbnRsMSA9ICAgICAgICAgIDB4MDAwZmYyYTMsCi0JLmdlbmxjZF9jbnRsMiA9ICAgICAgICAgIDB4MDAwMDAyYTMsCi0JLmdlbmxjZF9jbnRsMyA9ICAgICAgICAgIDB4MDAwMTAyYWEsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBfbW9kZSBlODAwX2xjZF9tb2RlWzJdID0gewotCVswXSA9IHsKLQkJLnhyZXMgICAgICAgICAgICA9IDQ4MCwKLQkJLnlyZXMgICAgICAgICAgICA9IDY0MCwKLQkJLmxlZnRfbWFyZ2luICAgICA9IDUyLAotCQkucmlnaHRfbWFyZ2luICAgID0gMTQ4LAotCQkudXBwZXJfbWFyZ2luICAgID0gMiwKLQkJLmxvd2VyX21hcmdpbiAgICA9IDYsCi0JCS5jcnRjX3NzICAgICAgICAgPSAweDgwMzUwMDM0LAotCQkuY3J0Y19scyAgICAgICAgID0gMHg4MDJiMDAyNiwKLQkJLmNydGNfZ3MgICAgICAgICA9IDB4ODAxNjAwMTYsCi0JCS5jcnRjX3Zwb3NfZ3MgICAgPSAweDAwMDIwMDAzLAotCQkuY3J0Y19yZXYgICAgICAgID0gMHgwMDQwMDAxZCwKLQkJLmNydGNfZGNsayAgICAgICA9IDB4ZTAwMDAwMDAsCi0JCS5jcnRjX2djbGsgICAgICAgPSAweDgyYTUwMDQ5LAotCQkuY3J0Y19nb2UgICAgICAgID0gMHg4MGVlMDAxYywKLQkJLmNydGNfcHMxX2FjdGl2ZSA9IDB4MDAwMDAwMDAsCi0JCS5wbGxfZnJlcSAgICAgICAgPSAxMjgsCi0JCS5waXhjbGtfZGl2aWRlciAgICAgICAgID0gNCwKLQkJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA2LAotCQkucGl4Y2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKLQkJLnN5c2Nsa19kaXZpZGVyICA9IDAsCi0JCS5zeXNjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAotCX0sCi0JWzFdID0gewotCQkueHJlcyAgICAgICAgICAgID0gMjQwLAotCQkueXJlcyAgICAgICAgICAgID0gMzIwLAotCQkubGVmdF9tYXJnaW4gICAgID0gMTUsCi0JCS5yaWdodF9tYXJnaW4gICAgPSA4OCwKLQkJLnVwcGVyX21hcmdpbiAgICA9IDAsCi0JCS5sb3dlcl9tYXJnaW4gICAgPSA3LAotCQkuY3J0Y19zcyAgICAgICAgID0gMHhkMDEwMDAwZiwKLQkJLmNydGNfbHMgICAgICAgICA9IDB4ODAwNzAwMDMsCi0JCS5jcnRjX2dzICAgICAgICAgPSAweDgwMDAwMDAwLAotCQkuY3J0Y192cG9zX2dzICAgID0gMHgwMTQ2MDE0NywKLQkJLmNydGNfcmV2ICAgICAgICA9IDB4MDA0MDAwMDMsCi0JCS5jcnRjX2RjbGsgICAgICAgPSAweGExNzAwMDMwLAotCQkuY3J0Y19nY2xrICAgICAgID0gMHg4MTRiMDAwOCwKLQkJLmNydGNfZ29lICAgICAgICA9IDB4ODBjYzAwMTUsCi0JCS5jcnRjX3BzMV9hY3RpdmUgPSAweDAwMDAwMDAwLAotCQkucGxsX2ZyZXEgICAgICAgID0gMTAwLAotCQkucGl4Y2xrX2RpdmlkZXIgICAgICAgICA9IDYsIC8qIFdpbmNlIHVzZXMgMTQgd2hpY2ggZ2l2ZXMgYSAqLwotCQkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDYsIC8qIDdNSHogUGNsay4gV2UgdXNlIGEgMTRNSHogb25lICovCi0JCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAotCQkuc3lzY2xrX2RpdmlkZXIgID0gMCwKLQkJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCi0JfQotfTsKLQotCi1zdGF0aWMgc3RydWN0IHcxMDBfZ3Bpb19yZWdzIGU4MDBfdzEwMF9ncGlvX2luZm8gPSB7Ci0JLmluaXRfZGF0YTEgPSAweGMxM2ZjMDE5LAotCS5ncGlvX2RpcjEgID0gMHgzZTQwZGY3ZiwKLQkuZ3Bpb19vZTEgICA9IDB4MDAzYzMwMDAsCi0JLmluaXRfZGF0YTIgPSAweDAwMDAwMDAwLAotCS5ncGlvX2RpcjIgID0gMHgwMDAwMDAwMCwKLQkuZ3Bpb19vZTIgICA9IDB4MDAwMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBfbWVtX2luZm8gZTgwMF93MTAwX21lbV9pbmZvID0gewotCS5leHRfY250bCAgICAgICAgPSAweDA5NjQwMDExLAotCS5zZHJhbV9tb2RlX3JlZyAgPSAweDAwNjAwMDIxLAotCS5leHRfdGltaW5nX2NudGwgPSAweDEwMDAxNTQ1LAotCS5pb19jbnRsICAgICAgICAgPSAweDdkZGQ3MzMzLAotCS5zaXplICAgICAgICAgICAgPSAweDFmZmZmZiwKLX07Ci0KLXN0YXRpYyB2b2lkIGU4MDBfdGdfY2hhbmdlKHN0cnVjdCB3MTAwZmJfcGFyICpwYXIpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQl0bXAgPSB3MTAwZmJfZ3Bpb19yZWFkKFcxMDBfR1BJT19QT1JUX0EpOwotCWlmIChwYXItPm1vZGUtPnhyZXMgPT0gNDgwKQotCQl0bXAgfD0gMHgxMDA7Ci0JZWxzZQotCQl0bXAgJj0gfjB4MTAwOwotCXcxMDBmYl9ncGlvX3dyaXRlKFcxMDBfR1BJT19QT1JUX0EsIHRtcCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdzEwMF90Z19pbmZvIGU4MDBfdGdfaW5mbyA9IHsKLQkuY2hhbmdlID0gZTgwMF90Z19jaGFuZ2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gZTgwMF9mYl9pbmZvID0gewotCS5tb2RlbGlzdCAgID0gZTgwMF9sY2RfbW9kZSwKLQkubnVtX21vZGVzICA9IDIsCi0JLnJlZ3MgICAgICAgPSAmZTgwMF9sY2RfcmVncywKLQkuZ3BpbyAgICAgICA9ICZlODAwX3cxMDBfZ3Bpb19pbmZvLAotCS5tZW0gICAgICAgID0gJmU4MDBfdzEwMF9tZW1faW5mbywKLQkudGcgICAgICAgICA9ICZlODAwX3RnX2luZm8sCi0JLnh0YWxfZnJlcSAgPSAxNjAwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZTgwMF9mYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgICAgICAgICA9IDB4MGMwMDAwMDAsCi0JCS5lbmQgICAgICAgICAgICA9IDB4MGNmZmZmZmYsCi0JCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlODAwX2ZiX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAidzEwMGZiIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKLQkuZGV2ICAgICAgICAgICAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhICA9ICZlODAwX2ZiX2luZm8sCi0JfSwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGU4MDBfZmJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBlODAwX2ZiX3Jlc291cmNlcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBVREMgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gZTgwMF91ZGNfbWFjaF9pbmZvID0gewotCS5ncGlvX3ZidXMgICA9IEdQSU9fRTgwMF9VU0JfRElTQywKLQkuZ3Bpb19wdWxsdXAgPSBHUElPX0U4MDBfVVNCX1BVTExVUCwKLQkuZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQgPSAxCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBlODAwIHRjNjM5M3hiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgdGM2MzkzeGJfcGxhdGZvcm1fZGF0YSBlODAwX3RjNjM5M3hiX2luZm8gPSB7Ci0JLmlycV9iYXNlICAgICAgID0gSVJRX0JPQVJEX1NUQVJULAotCS5zY3JfcGxsMmNyICAgICA9IDB4MGNjMSwKLQkuc2NyX2dwZXIgICAgICAgPSAwLAotCS5ncGlvX2Jhc2UgICAgICA9IC0xLAotCS5zdXNwZW5kICAgICAgICA9ICZlc2VyaWVzX3RtaW9fc3VzcGVuZCwKLQkucmVzdW1lICAgICAgICAgPSAmZXNlcmllc190bWlvX3Jlc3VtZSwKLQkuZW5hYmxlICAgICAgICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKLQkuZGlzYWJsZSAgICAgICAgPSAmZXNlcmllc190bWlvX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlODAwX3RjNjM5M3hiX2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAidGM2MzkzeGIiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZTgwMF90YzYzOTN4Yl9pbmZvLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSAgICAgID0gZXNlcmllc190bWlvX3Jlc291cmNlcywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZTgwMF9mYl9kZXZpY2UsCi0JJmU4MDBfdGM2MzkzeGJfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGU4MDBfaW5pdCh2b2lkKQotewotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGU4MDBfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7Ci0JcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwotCWNsa19hZGRfYWxpYXMoIkNMS19DSzNQNk1JIiwgZTgwMF90YzYzOTN4Yl9kZXZpY2UubmFtZSwKLQkJCSJHUElPMTFfQ0xLIiwgTlVMTCksCi0JZXNlcmllc19nZXRfdG1pb19ncGlvcygpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwotCXB4YV9zZXRfdWRjX2luZm8oJmU4MDBfdWRjX21hY2hfaW5mbyk7Ci0JcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoRTgwMCwgIlRvc2hpYmEgZTgwMCIpCi0JLyogTWFpbnRhaW5lcjogSWFuIE1vbHRvbiAoc3B5cm9AZjJzLmNvbSkgKi8KLQkucGh5c19pbwk9IDB4NDAwMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAotCS5maXh1cAkJPSBlc2VyaWVzX2ZpeHVwLAotCS5pbml0X21hY2hpbmUJPSBlODAwX2luaXQsCi0JLnRpbWVyCQk9ICZweGFfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggYTBhYjMwOC4uMzQ5MjEyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtMTUsNiArMTUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGM2Mzg3eGIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdGM2MzkzeGIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvdDdsNjZ4Yi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjIsOSArMjksMTIgQEAKIAogI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAKKyNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKQEAgLTEzMCwzICsxNDAsODAyIEBACiAJY2xrZGV2X2FkZF90YWJsZShlc2VyaWVzX2Nsa3JlZ3MsIEFSUkFZX1NJWkUoZXNlcmllc19jbGtyZWdzKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9FMzMwCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlMzMwIHRjNjM4N3hiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0YzYzODd4Yl9wbGF0Zm9ybV9kYXRhIGUzMzBfdGM2Mzg3eGJfaW5mbyA9IHsKKwkuZW5hYmxlICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKKwkuZGlzYWJsZSAgPSAmZXNlcmllc190bWlvX2Rpc2FibGUsCisJLnN1c3BlbmQgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTMzMF90YzYzODd4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInRjNjM4N3hiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmUzMzBfdGM2Mzg3eGJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmUzMzBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmUzMzBfdGM2Mzg3eGJfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGUzMzBfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOworCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOworCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlMzMwX2RldmljZXMpKTsKKwlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOworfQorCitNQUNISU5FX1NUQVJUKEUzMzAsICJUb3NoaWJhIGUzMzAiKQorCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKKwkuaW5pdF9tYWNoaW5lCT0gZTMzMF9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRTM1MAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gZTM1MCB0N2w2NnhiIHBhcmFtZXRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0N2w2NnhiX3BsYXRmb3JtX2RhdGEgZTM1MF90N2w2NnhiX2luZm8gPSB7CisJLmlycV9iYXNlICAgICAgICAgICAgICAgPSBJUlFfQk9BUkRfU1RBUlQsCisJLmVuYWJsZSAgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX2VuYWJsZSwKKwkuc3VzcGVuZCAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fc3VzcGVuZCwKKwkucmVzdW1lICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTM1MF90N2w2NnhiX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidDdsNjZ4YiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlMzUwX3Q3bDY2eGJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplMzUwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlMzUwX3Q3bDY2eGJfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGUzNTBfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOworCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOworCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlMzUwX2RldmljZXMpKTsKKwlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOworfQorCitNQUNISU5FX1NUQVJUKEUzNTAsICJUb3NoaWJhIGUzNTAiKQorCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKKwkuaW5pdF9tYWNoaW5lCT0gZTM1MF9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRTQwMAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEU0MDAgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBlNDAwX3B4YWZiX21vZGVfaW5mbyA9IHsKKwkucGl4Y2xvY2sgICAgICAgPSAxNDA3MDMsCisJLnhyZXMgICAgICAgICAgID0gMjQwLAorCS55cmVzICAgICAgICAgICA9IDMyMCwKKwkuYnBwICAgICAgICAgICAgPSAxNiwKKwkuaHN5bmNfbGVuICAgICAgPSA0LAorCS5sZWZ0X21hcmdpbiAgICA9IDI4LAorCS5yaWdodF9tYXJnaW4gICA9IDgsCisJLnZzeW5jX2xlbiAgICAgID0gMywKKwkudXBwZXJfbWFyZ2luICAgPSA1LAorCS5sb3dlcl9tYXJnaW4gICA9IDYsCisJLnN5bmMgICAgICAgICAgID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIGU0MDBfcHhhZmJfbWFjaF9pbmZvID0geworCS5tb2RlcyAgICAgICAgICA9ICZlNDAwX3B4YWZiX21vZGVfaW5mbywKKwkubnVtX21vZGVzICAgICAgPSAxLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAsCisJLmxjY3IzICAgICAgICAgID0gMCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyICA9IE5VTEwsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRTQwMCBNRlAgY29uZmlnIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGU0MDBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogQ2hpcCBzZWxlY3RzICovCisJR1BJTzE1X25DU18xLCAgIC8qIENTMSAtIEZsYXNoICovCisJR1BJTzgwX25DU180LCAgIC8qIENTNCAtIFRNSU8gKi8KKworCS8qIENsb2NrcyAqLworCUdQSU8xMl8zMktIeiwKKworCS8qIEJUVUFSVCAqLworCUdQSU80Ml9CVFVBUlRfUlhELAorCUdQSU80M19CVFVBUlRfVFhELAorCUdQSU80NF9CVFVBUlRfQ1RTLAorCisJLyogVE1JTyBjb250cm9sbGVyICovCisJR1BJTzE5X0dQSU8sIC8qIHQ3bDY2eGIgI1BDTFIgKi8KKwlHUElPNDVfR1BJTywgLyogdDdsNjZ4YiAjU1VTUEVORCAoTk9UIEJUVUFSVCEpICovCisKKwkvKiB3YWtldXAgKi8KKwlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9hID0geworCS5uYW1lID0gIkludGVybmFsIE5BTkQgZmxhc2giLAorCS5vZmZzZXQgPSAgMCwKKwkuc2l6ZSA9ICBNVERQQVJUX1NJWl9GVUxMLAorfTsKKworc3RhdGljIHVpbnQ4X3Qgc2Nhbl9mZl9wYXR0ZXJuW10gPSB7IDB4ZmYsIDB4ZmYgfTsKKworc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBlNDAwX3Q3bDY2eGJfbmFuZF9iYnQgPSB7CisJLm9wdGlvbnMgPSAwLAorCS5vZmZzID0gNCwKKwkubGVuID0gMiwKKwkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgorfTsKKworc3RhdGljIHN0cnVjdCB0bWlvX25hbmRfZGF0YSBlNDAwX3Q3bDY2eGJfbmFuZF9jb25maWcgPSB7CisJLm51bV9wYXJ0aXRpb25zID0gMSwKKwkucGFydGl0aW9uID0gJnBhcnRpdGlvbl9hLAorCS5iYWRibG9ja19wYXR0ZXJuID0gJmU0MDBfdDdsNjZ4Yl9uYW5kX2JidCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdDdsNjZ4Yl9wbGF0Zm9ybV9kYXRhIGU0MDBfdDdsNjZ4Yl9pbmZvID0geworCS5pcnFfYmFzZSAJCT0gSVJRX0JPQVJEX1NUQVJULAorCS5lbmFibGUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19lbmFibGUsCisJLnN1c3BlbmQgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgICAgICAgPSAmZXNlcmllc190bWlvX3Jlc3VtZSwKKworCS5uYW5kX2RhdGEgICAgICAgICAgICAgID0gJmU0MDBfdDdsNjZ4Yl9uYW5kX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU0MDBfdDdsNjZ4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInQ3bDY2eGIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZTQwMF90N2w2NnhiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZTQwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZTQwMF90N2w2NnhiX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlNDAwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNDAwX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKKwkvKiBGaXhtZSAtIGU0MDAgbWF5IGhhdmUgYSBzd2l0Y2hlZCBjbG9jayAqLworCWVzZXJpZXNfcmVnaXN0ZXJfY2xrcygpOworCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKKwlzZXRfcHhhX2ZiX2luZm8oJmU0MDBfcHhhZmJfbWFjaF9pbmZvKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlNDAwX2RldmljZXMpKTsKKwlweGFfc2V0X3VkY19pbmZvKCZlN3h4X3VkY19tYWNoX2luZm8pOworfQorCitNQUNISU5FX1NUQVJUKEU0MDAsICJUb3NoaWJhIGU0MDAiKQorCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKKwkuaW5pdF9tYWNoaW5lCT0gZTQwMF9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRTc0MAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGU3NDAgdmlkZW8gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB3MTAwX2dlbl9yZWdzIGU3NDBfbGNkX3JlZ3MgPSB7CisJLmxjZF9mb3JtYXQgPSAgICAgICAgICAgIDB4MDAwMDgwMjMsCisJLmxjZGRfY250bDEgPSAgICAgICAgICAgIDB4MGYwMDAwMDAsCisJLmxjZGRfY250bDIgPSAgICAgICAgICAgIDB4MDAwM2ZmZmYsCisJLmdlbmxjZF9jbnRsMSA9ICAgICAgICAgIDB4MDBmZmZmMDMsCisJLmdlbmxjZF9jbnRsMiA9ICAgICAgICAgIDB4MDAzYzBmMDMsCisJLmdlbmxjZF9jbnRsMyA9ICAgICAgICAgIDB4MDAwMTQzYWEsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfbW9kZSBlNzQwX2xjZF9tb2RlID0geworCS54cmVzICAgICAgICAgICAgPSAyNDAsCisJLnlyZXMgICAgICAgICAgICA9IDMyMCwKKwkubGVmdF9tYXJnaW4gICAgID0gMjAsCisJLnJpZ2h0X21hcmdpbiAgICA9IDI4LAorCS51cHBlcl9tYXJnaW4gICAgPSA5LAorCS5sb3dlcl9tYXJnaW4gICAgPSA4LAorCS5jcnRjX3NzICAgICAgICAgPSAweDgwMTQwMDEzLAorCS5jcnRjX2xzICAgICAgICAgPSAweDgxMTUwMTEwLAorCS5jcnRjX2dzICAgICAgICAgPSAweDgwMDUwMDA1LAorCS5jcnRjX3Zwb3NfZ3MgICAgPSAweDAwMGEwMDA5LAorCS5jcnRjX3JldiAgICAgICAgPSAweDAwNDAwMTBhLAorCS5jcnRjX2RjbGsgICAgICAgPSAweGE5MDYwMDBhLAorCS5jcnRjX2djbGsgICAgICAgPSAweDgwMDUwMTA4LAorCS5jcnRjX2dvZSAgICAgICAgPSAweDgwMDUwMTA4LAorCS5wbGxfZnJlcSAgICAgICAgPSA1NywKKwkucGl4Y2xrX2RpdmlkZXIgICAgICAgICA9IDQsCisJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA0LAorCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfWFRBTCwKKwkuc3lzY2xrX2RpdmlkZXIgID0gMSwKKwkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKKwkuY3J0Y19wczFfYWN0aXZlID0gICAgICAgMHg0MTA2MDAxMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9ncGlvX3JlZ3MgZTc0MF93MTAwX2dwaW9faW5mbyA9IHsKKwkuaW5pdF9kYXRhMSA9IDB4MjEwMDIxMDMsCisJLmdwaW9fZGlyMSAgPSAweGZmZmZkZWZmLAorCS5ncGlvX29lMSAgID0gMHgwM2MwMDY0MywKKwkuaW5pdF9kYXRhMiA9IDB4MDAzZjAwM2YsCisJLmdwaW9fZGlyMiAgPSAweGZmZmZmZmZmLAorCS5ncGlvX29lMiAgID0gMHgwMDAwMDBmZiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMGZiX21hY2hfaW5mbyBlNzQwX2ZiX2luZm8gPSB7CisJLm1vZGVsaXN0ICAgPSAmZTc0MF9sY2RfbW9kZSwKKwkubnVtX21vZGVzICA9IDEsCisJLnJlZ3MgICAgICAgPSAmZTc0MF9sY2RfcmVncywKKwkuZ3BpbyAgICAgICA9ICZlNzQwX3cxMDBfZ3Bpb19pbmZvLAorCS54dGFsX2ZyZXEgPSAxNDMxODAwMCwKKwkueHRhbF9kYmwgICA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGU3NDBfZmJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgICAgICAgICAgPSAweDBjMDAwMDAwLAorCQkuZW5kICAgICAgICAgICAgPSAweDBjZmZmZmZmLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTc0MF9mYl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIncxMDBmYiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZTc0MF9mYl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShlNzQwX2ZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gZTc0MF9mYl9yZXNvdXJjZXMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUZQIFBpbiBjb25maWcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZTc0MF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBDaGlwIHNlbGVjdHMgKi8KKwlHUElPMTVfbkNTXzEsICAgLyogQ1MxIC0gRmxhc2ggKi8KKwlHUElPNzlfbkNTXzMsICAgLyogQ1MzIC0gSU1BR0VPTiAqLworCUdQSU84MF9uQ1NfNCwgICAvKiBDUzQgLSBUTUlPICovCisKKwkvKiBDbG9ja3MgKi8KKwlHUElPMTJfMzJLSHosCisKKwkvKiBCVFVBUlQgKi8KKwlHUElPNDJfQlRVQVJUX1JYRCwKKwlHUElPNDNfQlRVQVJUX1RYRCwKKwlHUElPNDRfQlRVQVJUX0NUUywKKworCS8qIFRNSU8gY29udHJvbGxlciAqLworCUdQSU8xOV9HUElPLCAvKiB0N2w2NnhiICNQQ0xSICovCisJR1BJTzQ1X0dQSU8sIC8qIHQ3bDY2eGIgI1NVU1BFTkQgKE5PVCBCVFVBUlQhKSAqLworCisJLyogVURDICovCisJR1BJTzEzX0dQSU8sCisJR1BJTzNfR1BJTywKKworCS8qIElyREEgKi8KKwlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKworCS8qIFBDIENhcmQgKi8KKwlHUElPOF9HUElPLCAgIC8qIENEMCAqLworCUdQSU80NF9HUElPLCAgLyogQ0QxICovCisJR1BJTzExX0dQSU8sICAvKiBJUlEwICovCisJR1BJTzZfR1BJTywgICAvKiBJUlExICovCisJR1BJTzI3X0dQSU8sICAvKiBSU1QwICovCisJR1BJTzI0X0dQSU8sICAvKiBSU1QxICovCisJR1BJTzIwX0dQSU8sICAvKiBQV1IwICovCisJR1BJTzIzX0dQSU8sICAvKiBQV1IxICovCisJR1BJTzQ4X25QT0UsCisJR1BJTzQ5X25QV0UsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzU0X25QU0tUU0VMLAorCUdQSU81NV9uUFJFRywKKwlHUElPNTZfblBXQUlULAorCUdQSU81N19uSU9JUzE2LAorCisJLyogd2FrZXVwICovCisJR1BJTzBfR1BJTyB8IFdBS0VVUF9PTl9FREdFX1JJU0UsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBlNzQwIHQ3bDY2eGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHQ3bDY2eGJfcGxhdGZvcm1fZGF0YSBlNzQwX3Q3bDY2eGJfaW5mbyA9IHsKKwkuaXJxX2Jhc2UgCQk9IElSUV9CT0FSRF9TVEFSVCwKKwkuZW5hYmxlICAgICAgICAgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAorCS5zdXNwZW5kICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlNzQwX3Q3bDY2eGJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ0N2w2NnhiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmU3NDBfdDdsNjZ4Yl9pbmZvLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZSAgICAgID0gZXNlcmllc190bWlvX3Jlc291cmNlcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzQwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlNzQwX2ZiX2RldmljZSwKKwkmZTc0MF90N2w2NnhiX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlNzQwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlNzQwX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKKwllc2VyaWVzX3JlZ2lzdGVyX2Nsa3MoKTsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0s0OE0iLCBlNzQwX3Q3bDY2eGJfZGV2aWNlLm5hbWUsCisJCQkiVURDQ0xLIiwgJnB4YTI1eF9kZXZpY2VfdWRjLmRldiksCisJZXNlcmllc19nZXRfdG1pb19ncGlvcygpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGU3NDBfZGV2aWNlcykpOworCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7CisJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9maWNwX2luZm8oJmU3eHhfZmljcF9wbGF0Zm9ybV9kYXRhKTsKK30KKworTUFDSElORV9TVEFSVChFNzQwLCAiVG9zaGliYSBlNzQwIikKKwkvKiBNYWludGFpbmVyOiBJYW4gTW9sdG9uIChzcHlyb0BmMnMuY29tKSAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyNXhfaW5pdF9pcnEsCisJLmZpeHVwCQk9IGVzZXJpZXNfZml4dXAsCisJLmluaXRfbWFjaGluZQk9IGU3NDBfaW5pdCwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0U3NTAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRTc1MCBMQ0QgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB3MTAwX2dlbl9yZWdzIGU3NTBfbGNkX3JlZ3MgPSB7CisJLmxjZF9mb3JtYXQgPSAgICAgICAgICAgIDB4MDAwMDgwMDMsCisJLmxjZGRfY250bDEgPSAgICAgICAgICAgIDB4MDAwMDAwMDAsCisJLmxjZGRfY250bDIgPSAgICAgICAgICAgIDB4MDAwM2ZmZmYsCisJLmdlbmxjZF9jbnRsMSA9ICAgICAgICAgIDB4MDBmZmYwMDMsCisJLmdlbmxjZF9jbnRsMiA9ICAgICAgICAgIDB4MDAzYzBmMDMsCisJLmdlbmxjZF9jbnRsMyA9ICAgICAgICAgIDB4MDAwMTQzYWEsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfbW9kZSBlNzUwX2xjZF9tb2RlID0geworCS54cmVzICAgICAgICAgICAgPSAyNDAsCisJLnlyZXMgICAgICAgICAgICA9IDMyMCwKKwkubGVmdF9tYXJnaW4gICAgID0gMjEsCisJLnJpZ2h0X21hcmdpbiAgICA9IDIyLAorCS51cHBlcl9tYXJnaW4gICAgPSA1LAorCS5sb3dlcl9tYXJnaW4gICAgPSA0LAorCS5jcnRjX3NzICAgICAgICAgPSAweDgwMTUwMDE0LAorCS5jcnRjX2xzICAgICAgICAgPSAweDgwMTQwMDBkLAorCS5jcnRjX2dzICAgICAgICAgPSAweGMxMDAwMDA1LAorCS5jcnRjX3Zwb3NfZ3MgICAgPSAweDAwMDIwMTQ3LAorCS5jcnRjX3JldiAgICAgICAgPSAweDAwNDAwMTBhLAorCS5jcnRjX2RjbGsgICAgICAgPSAweGExNzAwMDMwLAorCS5jcnRjX2djbGsgICAgICAgPSAweDgwY2MwMDE1LAorCS5jcnRjX2dvZSAgICAgICAgPSAweDgwY2MwMDE1LAorCS5jcnRjX3BzMV9hY3RpdmUgPSAweDYxMDYwMDE3LAorCS5wbGxfZnJlcSAgICAgICAgPSA1NywKKwkucGl4Y2xrX2RpdmlkZXIgICAgICAgICA9IDQsCisJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSA0LAorCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfWFRBTCwKKwkuc3lzY2xrX2RpdmlkZXIgID0gMSwKKwkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9ncGlvX3JlZ3MgZTc1MF93MTAwX2dwaW9faW5mbyA9IHsKKwkuaW5pdF9kYXRhMSA9IDB4MDExOTJmMWIsCisJLmdwaW9fZGlyMSAgPSAweGQ1ZmZkZWZmLAorCS5ncGlvX29lMSAgID0gMHgwMDAwMjBiZiwKKwkuaW5pdF9kYXRhMiA9IDB4MDEwZjAxMGYsCisJLmdwaW9fZGlyMiAgPSAweGZmZmZmZmZmLAorCS5ncGlvX29lMiAgID0gMHgwMDAwMDFjZiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMGZiX21hY2hfaW5mbyBlNzUwX2ZiX2luZm8gPSB7CisJLm1vZGVsaXN0ICAgPSAmZTc1MF9sY2RfbW9kZSwKKwkubnVtX21vZGVzICA9IDEsCisJLnJlZ3MgICAgICAgPSAmZTc1MF9sY2RfcmVncywKKwkuZ3BpbyAgICAgICA9ICZlNzUwX3cxMDBfZ3Bpb19pbmZvLAorCS54dGFsX2ZyZXEgID0gMTQzMTgwMDAsCisJLnh0YWxfZGJsICAgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlNzUwX2ZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwYzAwMDAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwY2ZmZmZmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU3NTBfZmJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ3MTAwZmIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmU3NTBfZmJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZTc1MF9mYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGU3NTBfZmJfcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gZTc1MCBNRlAgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlNzUwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIENoaXAgc2VsZWN0cyAqLworCUdQSU8xNV9uQ1NfMSwgICAvKiBDUzEgLSBGbGFzaCAqLworCUdQSU83OV9uQ1NfMywgICAvKiBDUzMgLSBJTUFHRU9OICovCisJR1BJTzgwX25DU180LCAgIC8qIENTNCAtIFRNSU8gKi8KKworCS8qIENsb2NrcyAqLworCUdQSU8xMV8zXzZNSHosCisKKwkvKiBCVFVBUlQgKi8KKwlHUElPNDJfQlRVQVJUX1JYRCwKKwlHUElPNDNfQlRVQVJUX1RYRCwKKwlHUElPNDRfQlRVQVJUX0NUUywKKworCS8qIFRNSU8gY29udHJvbGxlciAqLworCUdQSU8xOV9HUElPLCAvKiB0N2w2NnhiICNQQ0xSICovCisJR1BJTzQ1X0dQSU8sIC8qIHQ3bDY2eGIgI1NVU1BFTkQgKE5PVCBCVFVBUlQhKSAqLworCisJLyogVURDICovCisJR1BJTzEzX0dQSU8sCisJR1BJTzNfR1BJTywKKworCS8qIElyREEgKi8KKwlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPNF9HUElPLCAgLyogSGVhZHBob25lIGFtcCBwb3dlciAqLworCUdQSU83X0dQSU8sICAvKiBTcGVha2VyIGFtcCBwb3dlciAqLworCUdQSU8zN19HUElPLCAvKiBIZWFkcGhvbmUgZGV0ZWN0ICovCisKKwkvKiBQQyBDYXJkICovCisJR1BJTzhfR1BJTywgICAvKiBDRDAgKi8KKwlHUElPNDRfR1BJTywgIC8qIENEMSAqLworCUdQSU8xMV9HUElPLCAgLyogSVJRMCAqLworCUdQSU82X0dQSU8sICAgLyogSVJRMSAqLworCUdQSU8yN19HUElPLCAgLyogUlNUMCAqLworCUdQSU8yNF9HUElPLCAgLyogUlNUMSAqLworCUdQSU8yMF9HUElPLCAgLyogUFdSMCAqLworCUdQSU8yM19HUElPLCAgLyogUFdSMSAqLworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzUyX25QQ0VfMSwKKwlHUElPNTNfblBDRV8yLAorCUdQSU81NF9uUFNLVFNFTCwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwKKworCS8qIHdha2V1cCAqLworCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fRURHRV9SSVNFLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gZTc1MCB0YzYzOTN4YiBwYXJhbWV0ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IHRjNjM5M3hiX3BsYXRmb3JtX2RhdGEgZTc1MF90YzYzOTN4Yl9pbmZvID0geworCS5pcnFfYmFzZSAgICAgICA9IElSUV9CT0FSRF9TVEFSVCwKKwkuc2NyX3BsbDJjciAgICAgPSAweDBjYzEsCisJLnNjcl9ncGVyICAgICAgID0gMCwKKwkuZ3Bpb19iYXNlICAgICAgPSAtMSwKKwkuc3VzcGVuZCAgICAgICAgPSAmZXNlcmllc190bWlvX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgID0gJmVzZXJpZXNfdG1pb19yZXN1bWUsCisJLmVuYWJsZSAgICAgICAgID0gJmVzZXJpZXNfdG1pb19lbmFibGUsCisJLmRpc2FibGUgICAgICAgID0gJmVzZXJpZXNfdG1pb19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZTc1MF90YzYzOTN4Yl9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInRjNjM5M3hiIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmU3NTBfdGM2MzkzeGJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMiwKKwkucmVzb3VyY2UgICAgICA9IGVzZXJpZXNfdG1pb19yZXNvdXJjZXMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzUwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZlNzUwX2ZiX2RldmljZSwKKwkmZTc1MF90YzYzOTN4Yl9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZTc1MF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZTc1MF9waW5fY29uZmlnKSk7CisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisJY2xrX2FkZF9hbGlhcygiQ0xLX0NLM1A2TUkiLCBlNzUwX3RjNjM5M3hiX2RldmljZS5uYW1lLAorCQkJIkdQSU8xMV9DTEsiLCBOVUxMKSwKKwllc2VyaWVzX2dldF90bWlvX2dwaW9zKCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoZTc1MF9kZXZpY2VzKSk7CisJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKEU3NTAsICJUb3NoaWJhIGU3NTAiKQorCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKKwkuaW5pdF9tYWNoaW5lCT0gZTc1MF9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRTgwMAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGU4MDAgTENEIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZTgwMF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBfZ2VuX3JlZ3MgZTgwMF9sY2RfcmVncyA9IHsKKwkubGNkX2Zvcm1hdCA9ICAgICAgICAgICAgMHgwMDAwODAwMywKKwkubGNkZF9jbnRsMSA9ICAgICAgICAgICAgMHgwMmEwMDAwMCwKKwkubGNkZF9jbnRsMiA9ICAgICAgICAgICAgMHgwMDAzZmZmZiwKKwkuZ2VubGNkX2NudGwxID0gICAgICAgICAgMHgwMDBmZjJhMywKKwkuZ2VubGNkX2NudGwyID0gICAgICAgICAgMHgwMDAwMDJhMywKKwkuZ2VubGNkX2NudGwzID0gICAgICAgICAgMHgwMDAxMDJhYSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tb2RlIGU4MDBfbGNkX21vZGVbMl0gPSB7CisJWzBdID0geworCQkueHJlcyAgICAgICAgICAgID0gNDgwLAorCQkueXJlcyAgICAgICAgICAgID0gNjQwLAorCQkubGVmdF9tYXJnaW4gICAgID0gNTIsCisJCS5yaWdodF9tYXJnaW4gICAgPSAxNDgsCisJCS51cHBlcl9tYXJnaW4gICAgPSAyLAorCQkubG93ZXJfbWFyZ2luICAgID0gNiwKKwkJLmNydGNfc3MgICAgICAgICA9IDB4ODAzNTAwMzQsCisJCS5jcnRjX2xzICAgICAgICAgPSAweDgwMmIwMDI2LAorCQkuY3J0Y19ncyAgICAgICAgID0gMHg4MDE2MDAxNiwKKwkJLmNydGNfdnBvc19ncyAgICA9IDB4MDAwMjAwMDMsCisJCS5jcnRjX3JldiAgICAgICAgPSAweDAwNDAwMDFkLAorCQkuY3J0Y19kY2xrICAgICAgID0gMHhlMDAwMDAwMCwKKwkJLmNydGNfZ2NsayAgICAgICA9IDB4ODJhNTAwNDksCisJCS5jcnRjX2dvZSAgICAgICAgPSAweDgwZWUwMDFjLAorCQkuY3J0Y19wczFfYWN0aXZlID0gMHgwMDAwMDAwMCwKKwkJLnBsbF9mcmVxICAgICAgICA9IDEyOCwKKwkJLnBpeGNsa19kaXZpZGVyICAgICAgICAgPSA0LAorCQkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDYsCisJCS5waXhjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorCQkuc3lzY2xrX2RpdmlkZXIgID0gMCwKKwkJLnN5c2Nsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJfSwKKwlbMV0gPSB7CisJCS54cmVzICAgICAgICAgICAgPSAyNDAsCisJCS55cmVzICAgICAgICAgICAgPSAzMjAsCisJCS5sZWZ0X21hcmdpbiAgICAgPSAxNSwKKwkJLnJpZ2h0X21hcmdpbiAgICA9IDg4LAorCQkudXBwZXJfbWFyZ2luICAgID0gMCwKKwkJLmxvd2VyX21hcmdpbiAgICA9IDcsCisJCS5jcnRjX3NzICAgICAgICAgPSAweGQwMTAwMDBmLAorCQkuY3J0Y19scyAgICAgICAgID0gMHg4MDA3MDAwMywKKwkJLmNydGNfZ3MgICAgICAgICA9IDB4ODAwMDAwMDAsCisJCS5jcnRjX3Zwb3NfZ3MgICAgPSAweDAxNDYwMTQ3LAorCQkuY3J0Y19yZXYgICAgICAgID0gMHgwMDQwMDAwMywKKwkJLmNydGNfZGNsayAgICAgICA9IDB4YTE3MDAwMzAsCisJCS5jcnRjX2djbGsgICAgICAgPSAweDgxNGIwMDA4LAorCQkuY3J0Y19nb2UgICAgICAgID0gMHg4MGNjMDAxNSwKKwkJLmNydGNfcHMxX2FjdGl2ZSA9IDB4MDAwMDAwMDAsCisJCS5wbGxfZnJlcSAgICAgICAgPSAxMDAsCisJCS5waXhjbGtfZGl2aWRlciAgICAgICAgID0gNiwgLyogV2luY2UgdXNlcyAxNCB3aGljaCBnaXZlcyBhICovCisJCS5waXhjbGtfZGl2aWRlcl9yb3RhdGVkID0gNiwgLyogN01IeiBQY2xrLiBXZSB1c2UgYSAxNE1IeiBvbmUgKi8KKwkJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJCS5zeXNjbGtfZGl2aWRlciAgPSAwLAorCQkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKKwl9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9ncGlvX3JlZ3MgZTgwMF93MTAwX2dwaW9faW5mbyA9IHsKKwkuaW5pdF9kYXRhMSA9IDB4YzEzZmMwMTksCisJLmdwaW9fZGlyMSAgPSAweDNlNDBkZjdmLAorCS5ncGlvX29lMSAgID0gMHgwMDNjMzAwMCwKKwkuaW5pdF9kYXRhMiA9IDB4MDAwMDAwMDAsCisJLmdwaW9fZGlyMiAgPSAweDAwMDAwMDAwLAorCS5ncGlvX29lMiAgID0gMHgwMDAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9tZW1faW5mbyBlODAwX3cxMDBfbWVtX2luZm8gPSB7CisJLmV4dF9jbnRsICAgICAgICA9IDB4MDk2NDAwMTEsCisJLnNkcmFtX21vZGVfcmVnICA9IDB4MDA2MDAwMjEsCisJLmV4dF90aW1pbmdfY250bCA9IDB4MTAwMDE1NDUsCisJLmlvX2NudGwgICAgICAgICA9IDB4N2RkZDczMzMsCisJLnNpemUgICAgICAgICAgICA9IDB4MWZmZmZmLAorfTsKKworc3RhdGljIHZvaWQgZTgwMF90Z19jaGFuZ2Uoc3RydWN0IHcxMDBmYl9wYXIgKnBhcikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9IHcxMDBmYl9ncGlvX3JlYWQoVzEwMF9HUElPX1BPUlRfQSk7CisJaWYgKHBhci0+bW9kZS0+eHJlcyA9PSA0ODApCisJCXRtcCB8PSAweDEwMDsKKwllbHNlCisJCXRtcCAmPSB+MHgxMDA7CisJdzEwMGZiX2dwaW9fd3JpdGUoVzEwMF9HUElPX1BPUlRfQSwgdG1wKTsKK30KKworc3RhdGljIHN0cnVjdCB3MTAwX3RnX2luZm8gZTgwMF90Z19pbmZvID0geworCS5jaGFuZ2UgPSBlODAwX3RnX2NoYW5nZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMGZiX21hY2hfaW5mbyBlODAwX2ZiX2luZm8gPSB7CisJLm1vZGVsaXN0ICAgPSBlODAwX2xjZF9tb2RlLAorCS5udW1fbW9kZXMgID0gMiwKKwkucmVncyAgICAgICA9ICZlODAwX2xjZF9yZWdzLAorCS5ncGlvICAgICAgID0gJmU4MDBfdzEwMF9ncGlvX2luZm8sCisJLm1lbSAgICAgICAgPSAmZTgwMF93MTAwX21lbV9pbmZvLAorCS50ZyAgICAgICAgID0gJmU4MDBfdGdfaW5mbywKKwkueHRhbF9mcmVxICA9IDE2MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlODAwX2ZiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICAgICAgICAgID0gMHgwYzAwMDAwMCwKKwkJLmVuZCAgICAgICAgICAgID0gMHgwY2ZmZmZmZiwKKwkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU4MDBfZmJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ3MTAwZmIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmU4MDBfZmJfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoZTgwMF9mYl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGU4MDBfZmJfcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVEQyBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBlODAwX3VkY19tYWNoX2luZm8gPSB7CisJLmdwaW9fdmJ1cyAgID0gR1BJT19FODAwX1VTQl9ESVNDLAorCS5ncGlvX3B1bGx1cCA9IEdQSU9fRTgwMF9VU0JfUFVMTFVQLAorCS5ncGlvX3B1bGx1cF9pbnZlcnRlZCA9IDEKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIGU4MDAgdGM2MzkzeGIgcGFyYW1ldGVycyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB0YzYzOTN4Yl9wbGF0Zm9ybV9kYXRhIGU4MDBfdGM2MzkzeGJfaW5mbyA9IHsKKwkuaXJxX2Jhc2UgICAgICAgPSBJUlFfQk9BUkRfU1RBUlQsCisJLnNjcl9wbGwyY3IgICAgID0gMHgwY2MxLAorCS5zY3JfZ3BlciAgICAgICA9IDAsCisJLmdwaW9fYmFzZSAgICAgID0gLTEsCisJLnN1c3BlbmQgICAgICAgID0gJmVzZXJpZXNfdG1pb19zdXNwZW5kLAorCS5yZXN1bWUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fcmVzdW1lLAorCS5lbmFibGUgICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZW5hYmxlLAorCS5kaXNhYmxlICAgICAgICA9ICZlc2VyaWVzX3RtaW9fZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGU4MDBfdGM2MzkzeGJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ0YzYzOTN4YiIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZlODAwX3RjNjM5M3hiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDIsCisJLnJlc291cmNlICAgICAgPSBlc2VyaWVzX3RtaW9fcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmU4MDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmU4MDBfZmJfZGV2aWNlLAorCSZlODAwX3RjNjM5M3hiX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlODAwX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlODAwX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKKwljbGtfYWRkX2FsaWFzKCJDTEtfQ0szUDZNSSIsIGU4MDBfdGM2MzkzeGJfZGV2aWNlLm5hbWUsCisJCQkiR1BJTzExX0NMSyIsIE5VTEwpLAorCWVzZXJpZXNfZ2V0X3RtaW9fZ3Bpb3MoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShlODAwX2RldmljZXMpKTsKKwlweGFfc2V0X3VkY19pbmZvKCZlODAwX3VkY19tYWNoX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworfQorCitNQUNISU5FX1NUQVJUKEU4MDAsICJUb3NoaWJhIGU4MDAiKQorCS8qIE1haW50YWluZXI6IElhbiBNb2x0b24gKHNweXJvQGYycy5jb20pICovCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkuZml4dXAJCT0gZXNlcmllc19maXh1cCwKKwkuaW5pdF9tYWNoaW5lCT0gZTgwMF9pbml0LAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE2MWRjYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYworKysgL2Rldi9udWxsCkBAIC0xLDU5MCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKLSAqCi0gKiBBdXRob3I6CUVkIEMuIEVwcAotICogQ3JlYXRlZDoJTm92IDA1LCAyMDAyCi0gKiBDb3B5cmlnaHQ6CUludGVsIENvcnAuCi0gKgotICogTW9kaWZpZWQgMjAwODogIEpvbmF0aGFuIENhbWVyb24KLSAqCi0gKiBUaGUgSW1vdGUyIGlzIGEgd2lyZWxlc3Mgc2Vuc29yIG5vZGUgcGxhdGZvcm0gc29sZAotICogYnkgQ3Jvc3Nib3cgKHd3dy54Ym93LmNvbSkuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KLSNpbmNsdWRlIDxsaW51eC9zaHQxNS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KLQotI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+Ci0jaW5jbHVkZSA8cGxhdC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL3VkYy5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbW90ZTJfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0KLQkvKiBEZXZpY2UgSWRlbnRpZmljYXRpb24gZm9yIHdha2V1cCovCi0JR1BJTzEwMl9HUElPLAotCi0JLyogQnV0dG9uICovCi0JR1BJTzkxX0dQSU8sCi0KLQkvKiBEQTkwMzAgKi8KLQlHUElPMV9HUElPLAotCi0JLyogTU1DICovCi0JR1BJTzMyX01NQ19DTEssCi0JR1BJTzExMl9NTUNfQ01ELAotCUdQSU85Ml9NTUNfREFUXzAsCi0JR1BJTzEwOV9NTUNfREFUXzEsCi0JR1BJTzExMF9NTUNfREFUXzIsCi0JR1BJTzExMV9NTUNfREFUXzMsCi0KLQkvKiA4MDIuMTUuNCByYWRpbyAtIGRyaXZlciBvdXQgb2YgbWFpbmxpbmUgKi8KLQlHUElPMjJfR1BJTywJCQkvKiBDQ19SU1ROICovCi0JR1BJTzExNF9HUElPLAkJCS8qIENDX0ZJRk8gKi8KLQlHUElPMTE2X0dQSU8sCQkJLyogQ0NfQ0NBICovCi0JR1BJTzBfR1BJTywJCQkvKiBDQ19GSUZPUCAqLwotCUdQSU8xNl9HUElPLAkJCS8qIENDU0ZEICovCi0JR1BJTzExNV9HUElPLAkJCS8qIFBvd2VyIGVuYWJsZSAqLwotCi0JLyogSTJDICovCi0JR1BJTzExN19JMkNfU0NMLAotCUdQSU8xMThfSTJDX1NEQSwKLQotCS8qIFNTUCAzIC0gODAyLjE1LjQgcmFkaW8gKi8KLQlHUElPMzlfR1BJTywJCQkvKiBDaGlwIFNlbGVjdCAqLwotCUdQSU8zNF9TU1AzX1NDTEssCi0JR1BJTzM1X1NTUDNfVFhELAotCUdQSU80MV9TU1AzX1JYRCwKLQotCS8qIFNTUCAyIC0gdG8gZGF1Z2h0ZXIgYm9hcmRzICovCi0JR1BJTzM3X0dQSU8sCQkJLyogQ2hpcCBTZWxlY3QgKi8KLQlHUElPMzZfU1NQMl9TQ0xLLAotCUdQSU8zOF9TU1AyX1RYRCwKLQlHUElPMTFfU1NQMl9SWEQsCi0KLQkvKiBTU1AgMSAtIHRvIGRhdWdodGVyIGJvYXJkcyAqLwotCUdQSU8yNF9HUElPLAkJCS8qIENoaXAgU2VsZWN0ICovCi0JR1BJTzIzX1NTUDFfU0NMSywKLQlHUElPMjVfU1NQMV9UWEQsCi0JR1BJTzI2X1NTUDFfUlhELAotCi0JLyogQlRVQVJUIEJhc2ljIENvbm5lY3RvciovCi0JR1BJTzQyX0JUVUFSVF9SWEQsCi0JR1BJTzQzX0JUVUFSVF9UWEQsCi0JR1BJTzQ0X0JUVUFSVF9DVFMsCi0JR1BJTzQ1X0JUVUFSVF9SVFMsCi0KLQkvKiBTVFVBUlQgU2VyaWFsIGNvbnNvbGUgdmlhIGRlYnVnIGJvYXJkKi8KLQlHUElPNDZfU1RVQVJUX1JYRCwKLQlHUElPNDdfU1RVQVJUX1RYRCwKLQotCS8qIEJhc2ljIHNlbnNvciBib2FyZCAqLwotCUdQSU85Nl9HUElPLAkvKiBhY2NlbGVyb21ldGVyIGludGVycnVwdCAqLwotCUdQSU85OV9HUElPLAkvKiBBREMgaW50ZXJydXB0ICovCi0KLQkvKiBTSFQxNSAqLwotCUdQSU8xMDBfR1BJTywKLQlHUElPOThfR1BJTywKLQotCS8qIENvbm5lY3RvciBwaW5zIHNwZWNpZmllZCBhcyBncGlvcyAqLwotCUdQSU85NF9HUElPLCAvKiBsYXJnZSBiYXNpYyBjb25uZWN0b3IgcGluIDE0ICovCi0JR1BJTzEwX0dQSU8sIC8qIGxhcmdlIGJhc2ljIGNvbm5lY3RvciBwaW4gMjMgKi8KLQotCS8qIExFRFMgKi8KLQlHUElPMTAzX0dQSU8sIC8qIHJlZCBsZWQgKi8KLQlHUElPMTA0X0dQSU8sIC8qIGdyZWVuIGxlZCAqLwotCUdQSU8xMDVfR1BJTywgLyogYmx1ZSBsZWQgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2h0MTVfcGxhdGZvcm1fZGF0YSBwbGF0Zm9ybV9kYXRhX3NodDE1ID0gewotCS5ncGlvX2RhdGEgPSAgMTAwLAotCS5ncGlvX3NjayAgPSAgOTgsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaHQxNSA9IHsKLQkubmFtZSA9ICJzaHQxNSIsCi0JLmlkID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGxhdGZvcm1fZGF0YV9zaHQxNSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGltb3RlMl9zZW5zb3JfM19jb25bXSA9IHsKLQl7Ci0JCS5kZXYgPSAmc2h0MTUuZGV2LAotCQkuc3VwcGx5ID0gInZjYyIsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgaW1vdGUyX2xlZF9waW5zW10gPSB7Ci0JewotCQkubmFtZSAgICAgICA9ICAiaW1vdGUyOnJlZCIsCi0JCS5ncGlvICAgICAgID0gMTAzLAotCQkuYWN0aXZlX2xvdyA9IDEsCi0JfSwgewotCQkubmFtZSAgICAgICA9ICJpbW90ZTI6Z3JlZW4iLAotCQkuZ3BpbyAgICAgICA9IDEwNCwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sIHsKLQkJLm5hbWUgICAgICAgPSAiaW1vdGUyOmJsdWUiLAotCQkuZ3BpbyAgICAgICA9IDEwNSwKLQkJLmFjdGl2ZV9sb3cgPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgaW1vdGUyX2xlZF9kYXRhID0gewotCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoaW1vdGUyX2xlZF9waW5zKSwKLQkubGVkcyAgICAgPSBpbW90ZTJfbGVkX3BpbnMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbW90ZTJfbGVkcyA9IHsKLQkubmFtZSA9ICJsZWRzLWdwaW8iLAotCS5pZCAgID0gLTEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xlZF9kYXRhLAotCX0sCi19OwotCi0vKiBSZXZlcnNlIGVuZ2luZWVyZWQgcGFydGx5IGZyb20gUGxhdGZvcm14IGRyaXZlcnMgKi8KLWVudW0gaW1vdGUyX2xkb3N7Ci0JdmNjX3ZyZWYsCi0JdmNjX2NjMjQyMCwKLQl2Y2NfbWljYSwKLQl2Y2NfYnQsCi0JLyogVGhlIHR3byB2b2x0YWdlcyBhdmFpbGFibGUgdG8gc2Vuc29yIGJvYXJkcyAqLwotCXZjY19zZW5zb3JfMV84LAotCXZjY19zZW5zb3JfMywKLQotCXZjY19zcmFtX2V4dCwgLyogZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBweGEyNzEgKi8KLQl2Y2NfcHhhX3BsbCwKLQl2Y2NfcHhhX3VzaW0sIC8qIFJlZmVyZW5jZSB2b2x0YWdlIGZvciBjZXJ0YWluIGdwaW9zICovCi0JdmNjX3B4YV9tZW0sCi0JdmNjX3B4YV9mbGFzaCwKLQl2Y2NfcHhhX2NvcmUsIC8qRGMtRGMgYnVjayBub3QgeWV0IHN1cHBvcnRlZCAqLwotCXZjY19sY2QsCi0JdmNjX2JiLAotCXZjY19iYmlvLAotCXZjY19pbywgLyogY2MyNDIwIDgwMi4xNS40IHJhZGlvIGFuZCBweGEgdmNjX2lvID8qLwotfTsKLQotLyogVGhlIHZhbHVlcyBvZiB0aGUgdmFyaW91cyByZWd1bGF0b3IgY29uc3RyYWludHMgYXJlIG9idmlvdXNseSBkZXBlbmRlbnQKLSAqIG9uIGV4YWN0bHkgd2hhdCBpcyB3aXJlZCB0byBlYWNoIGxkby4gIFVuZm9ydHVuYXRlbHkgdGhpcyBpbmZvcm1hdGlvbiBpcwotICogbm90IGdlbmVyYWxseSBhdmFpbGFibGUuICBNb3JlIGluZm9ybWF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZCBmcm9tIFhib3cKLSAqIGJ1dCBhcyBvZiB5ZXQgdGhleSBoYXZlbid0IGJlZW4gZm9ydGhjb21pbmcuCi0gKgotICogU29tZSBvZiB0aGVzZSBhcmUgY2xlYXJseSBTdGFyZ2F0ZSAyIHJlbGF0ZWQgKG5vIHdheSBvZiBwbHVnZ2luZwotICogaW4gYW4gbGNkIG9uIHRoZSBJTTIgZm9yIGV4YW1wbGUhKS4KLSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGltb3RlMl9sZG9faW5pdF9kYXRhW10gPSB7Ci0JW3ZjY19iYmlvXSA9IHsKLQkJLmNvbnN0cmFpbnRzID0geyAvKiBib2FyZCBkZWZhdWx0IDEuOFYgKi8KLQkJCS5uYW1lID0gInZjY19iYmlvIiwKLQkJCS5taW5fdVYgPSAxODAwMDAwLAotCQkJLm1heF91ViA9IDE4MDAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX2JiXSA9IHsKLQkJLmNvbnN0cmFpbnRzID0geyAvKiBib2FyZCBkZWZhdWx0IDIuOFYgKi8KLQkJCS5uYW1lID0gInZjY19iYiIsCi0JCQkubWluX3VWID0gMjcwMDAwMCwKLQkJCS5tYXhfdVYgPSAzMDAwMDAwLAotCQl9LAotCX0sCi0JW3ZjY19weGFfZmxhc2hdID0gewotCQkuY29uc3RyYWludHMgPSB7LyogZGVmYXVsdCBpcyAxLjhWICovCi0JCQkubmFtZSA9ICJ2Y2NfcHhhX2ZsYXNoIiwKLQkJCS5taW5fdVYgPSAxODAwMDAwLAotCQkJLm1heF91ViA9IDE4MDAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX2NjMjQyMF0gPSB7IC8qIGFsc28gdmNjX2lvICovCi0JCS5jb25zdHJhaW50cyA9IHsKLQkJCS8qIGJvYXJkIGRlZmF1bHQgaXMgMi44ViAqLwotCQkJLm5hbWUgPSAidmNjX2NjMjQyMCIsCi0JCQkubWluX3VWID0gMjcwMDAwMCwKLQkJCS5tYXhfdVYgPSAzMzAwMDAwLAotCQl9LAotCX0sCi0JW3ZjY192cmVmXSA9IHsgLyogUmVmZXJlbmNlIGZvciB3aGF0PyAqLwotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMS44ViAqLwotCQkJLm5hbWUgPSAidmNjX3ZyZWYiLAotCQkJLm1pbl91ViA9IDE4MDAwMDAsCi0JCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJfSwKLQl9LAotCVt2Y2Nfc3JhbV9leHRdID0gewotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLwotCQkJLm5hbWUgPSAidmNjX3NyYW1fZXh0IiwKLQkJCS5taW5fdVYgPSAyODAwMDAwLAotCQkJLm1heF91ViA9IDI4MDAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX21pY2FdID0gewotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLwotCQkJLm5hbWUgPSAidmNjX21pY2EiLAotCQkJLm1pbl91ViA9IDI4MDAwMDAsCi0JCQkubWF4X3VWID0gMjgwMDAwMCwKLQkJfSwKLQl9LAotCVt2Y2NfYnRdID0gewotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMi44ViAqLwotCQkJLm5hbWUgPSAidmNjX2J0IiwKLQkJCS5taW5fdVYgPSAyODAwMDAwLAotCQkJLm1heF91ViA9IDI4MDAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX2xjZF0gPSB7Ci0JCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAyLjhWICovCi0JCQkubmFtZSA9ICJ2Y2NfbGNkIiwKLQkJCS5taW5fdVYgPSAyNzAwMDAwLAotCQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX2lvXSA9IHsgLyogU2FtZSBvciBoaWdoZXIgdGhhbiBldmVyeXRoaW5nCi0JCQkgICogYmFyIHZjY2JhdCBhbmQgdmNjdXNiICovCi0JCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAyLjhWICovCi0JCQkubmFtZSA9ICJ2Y2NfaW8iLAotCQkJLm1pbl91ViA9IDI2OTIwMDAsCi0JCQkubWF4X3VWID0gMzMwMDAwMCwKLQkJfSwKLQl9LAotCVt2Y2Nfc2Vuc29yXzFfOF0gPSB7Ci0JCS5jb25zdHJhaW50cyA9IHsgLyogZGVmYXVsdCAxLjhWICovCi0JCQkubmFtZSA9ICJ2Y2Nfc2Vuc29yXzFfOCIsCi0JCQkubWluX3VWID0gMTgwMDAwMCwKLQkJCS5tYXhfdVYgPSAxODAwMDAwLAotCQl9LAotCX0sCi0JW3ZjY19zZW5zb3JfM10gPSB7IC8qIGN1cmlvdXNseSBkZWZhdWx0IDIuOFYgKi8KLQkJLmNvbnN0cmFpbnRzID0gewotCQkJLm5hbWUgPSAidmNjX3NlbnNvcl8zIiwKLQkJCS5taW5fdVYgPSAyODAwMDAwLAotCQkJLm1heF91ViA9IDMwMDAwMDAsCi0JCX0sCi0JCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGltb3RlMl9zZW5zb3JfM19jb24pLAotCQkuY29uc3VtZXJfc3VwcGxpZXMgPSBpbW90ZTJfc2Vuc29yXzNfY29uLAotCX0sCi0JW3ZjY19weGFfcGxsXSA9IHsgLyogMS4xN1YgLSAxLjQzViwgZGVmYXVsdCAxLjNWKi8KLQkJLmNvbnN0cmFpbnRzID0gewotCQkJLm5hbWUgPSAidmNjX3B4YV9wbGwiLAotCQkJLm1pbl91ViA9IDExNzAwMDAsCi0JCQkubWF4X3VWID0gMTQzMDAwMCwKLQkJfSwKLQl9LAotCVt2Y2NfcHhhX3VzaW1dID0gewotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMS44ViAqLwotCQkJLm5hbWUgPSAidmNjX3B4YV91c2ltIiwKLQkJCS5taW5fdVYgPSAxNzEwMDAwLAotCQkJLm1heF91ViA9IDIxNjAwMDAsCi0JCX0sCi0JfSwKLQlbdmNjX3B4YV9tZW1dID0gewotCQkuY29uc3RyYWludHMgPSB7IC8qIGRlZmF1bHQgMS44ViAqLwotCQkJLm5hbWUgPSAidmNjX3B4YV9tZW0iLAotCQkJLm1pbl91ViA9IDE4MDAwMDAsCi0JCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkYTkwM3hfc3ViZGV2X2luZm8gaW1vdGUyX2RhOTAzMF9zdWJkZXZzW10gPSB7Ci0JewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzIsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19iYmlvXSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPMywKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX2JiXSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPNCwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3B4YV9mbGFzaF0sCi0JfSwgewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzUsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19jYzI0MjBdLAotCX0sIHsKLQkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCi0JCS5pZCA9IERBOTAzMF9JRF9MRE82LAotCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfdnJlZl0sCi0JfSwgewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzcsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19zcmFtX2V4dF0sCi0JfSwgewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzgsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19taWNhXSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPOSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX2J0XSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPMTAsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19zZW5zb3JfMV84XSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPMTEsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19zZW5zb3JfM10sCi0JfSwgewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzEyLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfbGNkXSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPMTUsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19weGFfcGxsXSwKLQl9LCB7Ci0JCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAotCQkuaWQgPSBEQTkwMzBfSURfTERPMTcsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9sZG9faW5pdF9kYXRhW3ZjY19weGFfdXNpbV0sCi0JfSwgewotCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKLQkJLmlkID0gREE5MDMwX0lEX0xETzE4LAotCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGRvX2luaXRfZGF0YVt2Y2NfaW9dLAotCX0sIHsKLQkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCi0JCS5pZCA9IERBOTAzMF9JRF9MRE8xOSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2xkb19pbml0X2RhdGFbdmNjX3B4YV9tZW1dLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGRhOTAzeF9wbGF0Zm9ybV9kYXRhIGltb3RlMl9kYTkwMzBfcGRhdGEgPSB7Ci0JLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRShpbW90ZTJfZGE5MDMwX3N1YmRldnMpLAotCS5zdWJkZXZzID0gaW1vdGUyX2RhOTAzMF9zdWJkZXZzLAotfTsKLQotLyogQXMgdGhlIHRoZSBpbW90ZTIgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBhIGNvbnZlbnRpb25hbCBTRCBzbG90Ci0gKiB0aGVyZSBpcyBubyBvcHRpb24gdG8gaG90cGx1ZyBjYXJkcywgbWFraW5nIGFsbCB0aGlzIHJhdGhlciBzaW1wbGUKLSAqLwotc3RhdGljIGludCBpbW90ZTJfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJhdGhlciBzaW1wbGUgY2FzZSBhcyBob3RwbHVnZ2luZyBub3QgcG9zc2libGUgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaW1vdGUyX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LCAvKiBkZWZhdWx0IGFueXdheSAqLwotCS5nZXRfcm8gPSBpbW90ZTJfbWNpX2dldF9ybywKLQkuZ3Bpb19jYXJkX2RldGVjdCA9IC0xLAotCS5ncGlvX2NhcmRfcm8JPSAtMSwKLQkuZ3Bpb19wb3dlciA9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGltb3RlMmZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSA9IDB4MDAwNDAwMDAsCi0JCS5vZmZzZXQgPSAwLAotCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUsCi0JfSwgewotCQkubmFtZSA9ICJLZXJuZWwiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMDQwMDAwLAotCQkubWFza19mbGFncyA9IDAsCi0JfSwgewotCQkubmFtZSA9ICJGaWxlc3lzdGVtIiwKLQkJLnNpemUgPSAweDAxREMwMDAwLAotCQkub2Zmc2V0ID0gMHgwMDI0MDAwMCwKLQkJLm1hc2tfZmxhZ3MgPSAwLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSBQWEFfQ1MwX1BIWVMsCi0JLmVuZCA9IFBYQV9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaW1vdGUyX2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lID0gImNmaV9wcm9iZSIsCi0JLnBhcnRzID0gaW1vdGUyZmxhc2hfcGFydGl0aW9ucywKLQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGltb3RlMmZsYXNoX3BhcnRpdGlvbnMpLAotCS5uYW1lID0gIlBYQTI3eE9uQ2hpcFJPTSIsCi0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGltb3RlMl9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicHhhMnh4LWZsYXNoIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlcywKLQkubnVtX3Jlc291cmNlcyA9IDEsCi19OwotCi0vKiBTb21lIG9mIHRoZSBkcml2ZXJzIGhlcmUgYXJlIG91dCBvZiBrZXJuZWwgYXQgdGhlIG1vbWVudCAocGFydHMgb2YgSUlPKQotICogYW5kIGl0IG1heSBiZSBhIHdoaWxlIGJlZm9yZSB0aGV5IGFyZSBpbiB0aGUgbWFpbmxpbmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpbW90ZTJfaTJjX2JvYXJkX2luZm9bXSA9IHsKLQl7IC8qIFVDQU0gc2Vuc29yIGJvYXJkICovCi0JCS50eXBlID0gIm1heDEyMzkiLAotCQkuYWRkciA9IDB4MzUsCi0JfSwgeyAvKiBJVFM0MDAgU2Vuc29yIGJvYXJkIG9ubHkgKi8KLQkJLnR5cGUgPSAibWF4MTM2MyIsCi0JCS5hZGRyID0gMHgzNCwKLQkJLyogVGhyb3VnaCBhIG5hbmQgZ2F0ZSAtIEFsc28gYmV3YXJlLCBvbiBWMiBzZW5zb3IgYm9hcmQgdGhlCi0JCSAqIHB1bGwgdXAgcmVzaXN0b3JzIGFyZSBtaXNzaW5nLgotCQkgKi8KLQkJLmlycSA9IElSUV9HUElPKDk5KSwKLQl9LCB7IC8qIElUUzQwMCBTZW5zb3IgYm9hcmQgb25seSAqLwotCQkudHlwZSA9ICJ0c2wyNTYxIiwKLQkJLmFkZHIgPSAweDQ5LAotCQkvKiBUaHJvdWdoIGEgbmFuZCBnYXRlIC0gQWxzbyBiZXdhcmUsIG9uIFYyIHNlbnNvciBib2FyZCB0aGUKLQkJICogcHVsbCB1cCByZXNpc3RvcnMgYXJlIG1pc3NpbmcuCi0JCSAqLwotCQkuaXJxID0gSVJRX0dQSU8oOTkpLAotCX0sIHsgLyogSVRTNDAwIFNlbnNvciBib2FyZCBvbmx5ICovCi0JCS50eXBlID0gInRtcDE3NSIsCi0JCS5hZGRyID0gMHg0QSwKLQkJLmlycSA9IElSUV9HUElPKDk2KSwKLQl9LCB7IC8qIElNQjQwMCBNdWx0aW1lZGlhIGJvYXJkICovCi0JCS50eXBlID0gIndtODk0MCIsCi0JCS5hZGRyID0gMHgxQSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGltb3RlMl9wd3JfaTJjX2JvYXJkX2luZm9bXSA9IHsKLQl7Ci0JCS50eXBlID0gImRhOTAzMCIsCi0JCS5hZGRyID0gMHg0OSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaW1vdGUyX2RhOTAzMF9wZGF0YSwKLQkJLmlycSA9IGdwaW9fdG9faXJxKDEpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyXzBfaW5mbyA9IHsKLQkubnVtX2NoaXBzZWxlY3QgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBweGFfc3NwX21hc3Rlcl8xX2luZm8gPSB7Ci0JLm51bV9jaGlwc2VsZWN0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfMl9pbmZvID0gewotCS5udW1fY2hpcHNlbGVjdCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBzdGFjY2VsX2NoaXBfaW5mbyA9IHsKLQkudHhfdGhyZXNob2xkID0gOCwKLQkucnhfdGhyZXNob2xkID0gOCwKLQkuZG1hX2J1cnN0X3NpemUgPSA4LAotCS50aW1lb3V0ID0gMjM1LAotCS5ncGlvX2NzID0gMjQsCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBjYzI0MjBfaW5mbyA9IHsKLQkudHhfdGhyZXNob2xkID0gOCwKLQkucnhfdGhyZXNob2xkID0gOCwKLQkuZG1hX2J1cnN0X3NpemUgPSA4LAotCS50aW1lb3V0ID0gMjM1LAotCS5ncGlvX2NzID0gMzksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLQl7IC8qIERyaXZlciBpbiBJSU8gKi8KLQkJLm1vZGFsaWFzID0gImxpczNsMDJkcSIsCi0JCS5tYXhfc3BlZWRfaHogPSA4MDAwMDAwLC8qIDhNSHogbWF4IHNwaSBmcmVxdWVuY3kgYXQgM1YgKi8KLQkJLmJ1c19udW0gPSAxLAotCQkuY2hpcF9zZWxlY3QgPSAwLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnN0YWNjZWxfY2hpcF9pbmZvLAotCQkuaXJxID0gSVJRX0dQSU8oOTYpLAotCX0sIHsgLyogRHJpdmVyIG91dCBvZiBrZXJuZWwgYXMgaXQgbmVlZHMgY29uc2lkZXJhYmxlIHJld3JpdGluZyAqLwotCQkubW9kYWxpYXMgPSAiY2MyNDIwIiwKLQkJLm1heF9zcGVlZF9oeiA9IDY1MDAwMDAsCi0JCS5idXNfbnVtID0gMywKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLmNvbnRyb2xsZXJfZGF0YSA9ICZjYzI0MjBfaW5mbywKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgaW0yX3VkY19jb21tYW5kKGludCBjbWQpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6Ci0JCVVQMk9DUiB8PSAgVVAyT0NSX0hYT0UgfCBVUDJPQ1JfRFBQVUUgfCBVUDJPQ1JfRFBQVUJFOwotCQlicmVhazsKLQljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6Ci0JCVVQMk9DUiAmPSB+KFVQMk9DUl9IWE9FIHwgVVAyT0NSX0RQUFVFIHwgVVAyT0NSX0RQUFVCRSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBpbW90ZTJfdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKLQkudWRjX2NvbW1hbmQJCT0gaW0yX3VkY19jb21tYW5kLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmltb3RlMl9kZXZpY2VzW10gPSB7Ci0JJmltb3RlMl9mbGFzaF9kZXZpY2UsCi0JJmltb3RlMl9sZWRzLAotCSZzaHQxNSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGkyY19wd3JfcGRhdGEgPSB7Ci0JLmZhc3RfbW9kZSA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7Ci0JLmZhc3RfbW9kZSA9IDEsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW1vdGUyX2luaXQodm9pZCkKLXsKLQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShpbW90ZTJfcGluX2NvbmZpZykpOwotCi0JcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbW90ZTJfZGV2aWNlcywgQVJSQVlfU0laRShpbW90ZTJfZGV2aWNlcykpOwotCi0JcHhhMnh4X3NldF9zcGlfaW5mbygxLCAmcHhhX3NzcF9tYXN0ZXJfMF9pbmZvKTsKLQlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZweGFfc3NwX21hc3Rlcl8xX2luZm8pOwotCXB4YTJ4eF9zZXRfc3BpX2luZm8oMywgJnB4YV9zc3BfbWFzdGVyXzJfaW5mbyk7Ci0KLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaW1vdGUyX2kyY19ib2FyZF9pbmZvLAotCQkJCUFSUkFZX1NJWkUoaW1vdGUyX2kyY19ib2FyZF9pbmZvKSk7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaW1vdGUyX3B3cl9pMmNfYm9hcmRfaW5mbywKLQkJCQlBUlJBWV9TSVpFKGltb3RlMl9wd3JfaTJjX2JvYXJkX2luZm8pKTsKLQotCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oJmkyY19wd3JfcGRhdGEpOwotCXB4YV9zZXRfaTJjX2luZm8oJmkyY19wZGF0YSk7Ci0KLQlweGFfc2V0X21jaV9pbmZvKCZpbW90ZTJfbWNpX3BsYXRmb3JtX2RhdGEpOwotCXB4YV9zZXRfdWRjX2luZm8oJmltb3RlMl91ZGNfaW5mbyk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoSU5URUxNT1RFMiwgIklNT1RFIDIiKQotCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAotCS50aW1lcgkJPSAmcHhhX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBpbW90ZTJfaW5pdCwKLQkuYm9vdF9wYXJhbXMJPSAweEEwMDAwMTAwLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKaW5kZXggMWE3NDEwNi4uZWVjOTJlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKQEAgLTI2LDIxICsyNiw1NSBAQAogI2RlZmluZSBCQUxMT09OM19GUEdBX1ZJUlQJKDB4ZjEwMDAwMDApCS8qIGFzIHBlciBiYWxsb29uMiAqLwogI2RlZmluZSBCQUxMT09OM19GUEdBX0xFTkdUSAkweDAxMDAwMDAwCiAKLS8qIEZQR0EvQ1BMRCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBMF9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDA4KQotLyogZml4bWUgLSBzYW1lIGZvciBub3cgKi8KLSNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBMV9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDA4KQotI2RlZmluZSBCQUxMT09OM19OQU5ESU9fSU9fUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwMCkKKy8qIEZQR0EgLyBDUExEIHJlZ2lzdGVycyBmb3IgQ0Ygc29ja2V0ICovCisjZGVmaW5lCUJBTExPT04zX0NGX1NUQVRVU19SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDA4KQorI2RlZmluZQlCQUxMT09OM19DRl9DT05UUk9MX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDgpCisvKiBGUEdBIC8gQ1BMRCB2ZXJzaW9uIHJlZ2lzdGVyICovCisjZGVmaW5lCUJBTExPT04zX0ZQR0FfVkVSCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxYykKKy8qIEZQR0EgLyBDUExEIHJlZ2lzdGVycyBmb3IgTkFORCBmbGFzaCAqLworI2RlZmluZQlCQUxMT09OM19OQU5EX0JBU0UJCShQWEFfQ1M0X1BIWVMgKyAweDAwZTAwMDAwKQorI2RlZmluZQlCQUxMT09OM19OQU5EX0lPX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMDApCisjZGVmaW5lCUJBTExPT04zX05BTkRfQ09OVFJPTDJfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDEwKQorI2RlZmluZQlCQUxMT09OM19OQU5EX1NUQVRfUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxMCkKKyNkZWZpbmUJQkFMTE9PTjNfTkFORF9DT05UUk9MX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxNCkKKwogLyogZnBnYS9jcGxkIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwQykKLSNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTDJfUkVHIAkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxMCkKLSNkZWZpbmUgQkFMTE9PTjNfTkFORElPX0NUTF9SRUcgCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDE0KQogI2RlZmluZSBCQUxMT09OM19WRVJTSU9OX1JFRwkJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMWMpCiAKICNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX0FERFJfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDAwKQogI2RlZmluZSBCQUxMT09OM19TQU1PU0FfREFUQV9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBjMDAwMDQpCiAjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9TVEFUVVNfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDFjKQogCisvKiBDRiBTdGF0dXMgUmVnaXN0ZXIgYml0cyAocmVhZC1vbmx5KSBiaXRzICovCisjZGVmaW5lIEJBTExPT04zX0NGX25JUlEJCSgxIDw8IDApCisjZGVmaW5lIEJBTExPT04zX0NGX25TVFNDSEdfQlZEMQkoMSA8PCAxKQorCisvKiBDRiBDb250cm9sIFNldCBSZWdpc3RlciBiaXRzIC8gQ0YgQ29udHJvbCBDbGVhciBSZWdpc3RlciBiaXRzICh3cml0ZS1vbmx5KSAqLworI2RlZmluZSBCQUxMT09OM19DRl9SRVNFVAkJKDEgPDwgMCkKKyNkZWZpbmUgQkFMTE9PTjNfQ0ZfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBCQUxMT09OM19DRl9BRERfRU5BQkxFCQkoMSA8PCAyKQorCisvKiBDRiBJbnRlcnJ1cHQgc291cmNlcyAqLworI2RlZmluZSBCQUxMT09OM19CUF9DRl9OUkRZX0lSUQkJQkFMTE9PTjNfSVJRKDApCisjZGVmaW5lIEJBTExPT04zX0JQX05TVFNDSEdfSVJRCQlCQUxMT09OM19JUlEoMSkKKworLyogTkFORCBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTFdQCSgxIDw8IDcpCisjZGVmaW5lCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTFNFCSgxIDw8IDYpCisjZGVmaW5lCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMwkoMSA8PCA1KQorI2RlZmluZQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxDRTIJKDEgPDwgNCkKKyNkZWZpbmUJQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0UxCSgxIDw8IDMpCisjZGVmaW5lCUJBTExPT04zX05BTkRfQ09OVFJPTF9GTENFMAkoMSA8PCAyKQorI2RlZmluZQlCQUxMT09OM19OQU5EX0NPTlRST0xfRkxBTEUJKDEgPDwgMSkKKyNkZWZpbmUJQkFMTE9PTjNfTkFORF9DT05UUk9MX0ZMQ0xFCSgxIDw8IDApCisKKy8qIE5BTkQgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lCUJBTExPT04zX05BTkRfU1RBVF9STkIJCSgxIDw8IDApCisKKy8qIE5BTkQgQ29udHJvbDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJQkFMTE9PTjNfTkFORF9DT05UUk9MMl8xNkJJVAkoMSA8PCAwKQorCiAvKiBHUElPcyBmb3IgaXJxcyAqLwogI2RlZmluZSBCQUxMT09OM19HUElPX0FVWF9OSVJRCQkoOTQpCiAjZGVmaW5lIEJBTExPT04zX0dQSU9fQ09ERUNfSVJRCQkoOTUpCkBAIC01NCwyMCArODgsMjQgQEAKIAogI2RlZmluZSBCQUxMT09OM19HUElPX1MwX0NECQkoMTA1KQogCisvKiBOQU5EICovCisjZGVmaW5lIEJBTExPT04zX0dQSU9fUlVOX05BTkQJCSgxMDIpCisKKy8qIFBDRjg1NzRBIExlZHMgKi8KKyNkZWZpbmUJQkFMTE9PTjNfUENGX0dQSU9fQkFTRQkJMTYwCisjZGVmaW5lCUJBTExPT04zX1BDRl9HUElPX0xFRDAJCShCQUxMT09OM19QQ0ZfR1BJT19CQVNFICsgMCkKKyNkZWZpbmUJQkFMTE9PTjNfUENGX0dQSU9fTEVEMQkJKEJBTExPT04zX1BDRl9HUElPX0JBU0UgKyAxKQorI2RlZmluZQlCQUxMT09OM19QQ0ZfR1BJT19MRUQyCQkoQkFMTE9PTjNfUENGX0dQSU9fQkFTRSArIDIpCisjZGVmaW5lCUJBTExPT04zX1BDRl9HUElPX0xFRDMJCShCQUxMT09OM19QQ0ZfR1BJT19CQVNFICsgMykKKyNkZWZpbmUJQkFMTE9PTjNfUENGX0dQSU9fTEVENAkJKEJBTExPT04zX1BDRl9HUElPX0JBU0UgKyA0KQorI2RlZmluZQlCQUxMT09OM19QQ0ZfR1BJT19MRUQ1CQkoQkFMTE9PTjNfUENGX0dQSU9fQkFTRSArIDUpCisjZGVmaW5lCUJBTExPT04zX1BDRl9HUElPX0xFRDYJCShCQUxMT09OM19QQ0ZfR1BJT19CQVNFICsgNikKKyNkZWZpbmUJQkFMTE9PTjNfUENGX0dQSU9fTEVENwkJKEJBTExPT04zX1BDRl9HUElPX0JBU0UgKyA3KQorCiAvKiBGUEdBIEludGVycnVwdCBNYXNrL0Fja25vd2xlZGdlIFJlZ2lzdGVyICovCiAjZGVmaW5lIEJBTExPT04zX0lOVF9TMF9JUlEJCSgxIDw8IDApICAvKiBQQ01DSUEgMCBJUlEgKi8KICNkZWZpbmUgQkFMTE9PTjNfSU5UX1MwX1NUU0NIRwkJKDEgPDwgMSkgIC8qIFBDTUNJQSAwIHN0YXR1cyBjaGFuZ2VkICovCiAKLS8qIENGIFN0YXR1cyBSZWdpc3RlciAqLwotI2RlZmluZSBCQUxMT09OM19QQ01DSUFfbklSUQkJKDEgPDwgMCkgIC8qIElSUSAvIHJlYWR5IHNpZ25hbCAqLwotI2RlZmluZSBCQUxMT09OM19QQ01DSUFfblNUU0NIR19CVkQxCSgxIDw8IDEpCi0JCQkJCS8qIFZERCBzZW5zZSAvIGNhcmQgc3RhdHVzIGNoYW5nZWQgKi8KLQotLyogQ0YgY29udHJvbCByZWdpc3RlciAod3JpdGUpICovCi0jZGVmaW5lIEJBTExPT04zX1BDTUNJQV9SRVNFVAkJKDEgPDwgMCkgICAvKiBDYXJkIHJlc2V0IHNpZ25hbCAqLwotI2RlZmluZSBCQUxMT09OM19QQ01DSUFfRU5BQkxFCQkoMSA8PCAxKQotI2RlZmluZSBCQUxMT09OM19QQ01DSUFfQUREX0VOQUJMRQkoMSA8PCAyKQotCiAvKiBDUExEIChhbmQgRlBHQSkgaW50ZXJmYWNlIGRlZmluaXRpb25zICovCiAjZGVmaW5lIENQTERfTENEMF9EQVRBX1NFVCAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIENQTERfTENEMF9EQVRBX0NMUiAgICAgICAgICAgICAweDEwCkBAIC0xMzIsOSArMTcwLDYgQEAKIC8qIEJhbGxvb24zIEludGVycnVwdHMgKi8KICNkZWZpbmUgQkFMTE9PTjNfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQogCi0jZGVmaW5lIEJBTExPT04zX0JQX0NGX05SRFlfSVJRCUJBTExPT04zX0lSUSgwKQotI2RlZmluZSBCQUxMT09OM19CUF9OU1RTQ0hHX0lSUQlCQUxMT09OM19JUlEoMSkKLQogI2RlZmluZSBCQUxMT09OM19BVVhfTklSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX0FVWF9OSVJRKQogI2RlZmluZSBCQUxMT09OM19DT0RFQ19JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19DT0RFQ19JUlEpCiAjZGVmaW5lIEJBTExPT04zX1MwX0NEX0lSUQlJUlFfR1BJTyhCQUxMT09OM19HUElPX1MwX0NEKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKaW5kZXggNWYyYmE4ZC4uNThkYWRhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCkBAIC01LDYgKzUsMjcgQEAKICNpbmNsdWRlIDxtYWNoL21mcC5oPgogCiAvKgorICogYmFzZSBib2FyZCBnbHVlIGZvciBQWEEyNzAgbW9kdWxlCisgKi8KKworZW51bSB7CisJQ09MSUJSSV9QWEEyNzBfRVZBTEJPQVJEID0gMCwKKwlDT0xJQlJJX1BYQTI3MF9JTkNPTUUsCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9DT0xJQlJJX1BYQTI3MF9FVkFMQk9BUkQpCitleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTI3MF9ldmFsYm9hcmRfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEyNzBfZXZhbGJvYXJkX2luaXQodm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9DT0xJQlJJX1BYQTI3MF9JTkNPTUUpCitleHRlcm4gdm9pZCBjb2xpYnJpX3B4YTI3MF9pbmNvbWVfYm9hcmRpbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTI3MF9pbmNvbWVfYm9hcmRpbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoKICAqIGNvbW1vbiBzZXR0aW5ncyBmb3IgYWxsIG1vZHVsZXMKICAqLwogCkBAIC0zMywxMyArNTQsMTAgQEAKIC8qIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zICovCiAjZGVmaW5lIENPTElCUklfU0RSQU1fQkFTRQkweGEwMDAwMDAwICAgICAgLyogU0RSQU0gcmVnaW9uICovCiAKLS8qIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTI3MCAqLwotCi0jZGVmaW5lIENPTElCUklfUFhBMjcwX0ZMQVNIX1BIWVMJKFBYQV9DUzBfUEhZUykgIC8qIEZsYXNoIHJlZ2lvbiAqLwotI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9FVEhfUEhZUwkJKFBYQV9DUzJfUEhZUykgIC8qIEV0aGVybmV0ICovCi0jZGVmaW5lIENPTElCUklfUFhBMjcwX0VUSF9JUlFfR1BJTwkxMTQKLSNkZWZpbmUgQ09MSUJSSV9QWEEyNzBfRVRIX0lSUQkJXAotCWdwaW9fdG9faXJxKG1mcF90b19ncGlvKENPTElCUklfUFhBMjcwX0VUSF9JUlFfR1BJTykpCisvKiBHUElPIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTI3MCAqLworI2RlZmluZSBHUElPMTE0X0NPTElCUklfUFhBMjcwX0VUSF9JUlEJMTE0CisjZGVmaW5lIEdQSU8wX0NPTElCUklfUFhBMjcwX1NEX0RFVEVDVAkwCisjZGVmaW5lIEdQSU8xMTNfQ09MSUJSSV9QWEEyNzBfVFNfSVJRCTExMwogCiAjZW5kaWYgLyogX0NPTElCUklfSF8gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvcmdpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29yZ2kuaAppbmRleCA1ODU5NzBlLi4wMDExMDU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29yZ2kuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29yZ2kuaApAQCAtMTA5LDEwICsxMDksNSBAQAogI2RlZmluZSBDT1JHSV9HUElPX0JBQ0tMSUdIVF9DT05UCShDT1JHSV9TQ09PUF9HUElPX0JBU0UgKyA3KQogI2RlZmluZSBDT1JHSV9HUElPX01JQ19CSUFTCQkoQ09SR0lfU0NPT1BfR1BJT19CQVNFICsgOCkKIAotLyoKLSAqIFNoYXJlZCBkYXRhIHN0cnVjdHVyZXMKLSAqLwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29yZ2lzY29vcF9kZXZpY2U7Ci0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX0NPUkdJX0ggICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oCmluZGV4IDA2YWJkNDEuLjliODk4NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaApAQCAtMTQsMjUgKzE0LDE1IEBACiAKIC8qCiBHUElPbiAtIElucHV0IGZyb20gTUFYODIzIChvciBlcXVpdiksIG5vcm1hbGl6aW5nIFVTQiArNVYgaW50byBhIGNsZWFuCi1pbnRlcnJ1cHQgc2lnbmFsIGZvciBkZXRlcm1pbmluZyBjYWJsZSBwcmVzZW5jZS4gT24gdGhlIG9yaWdpbmFsIGd1bXN0aXgsCi10aGlzIGlzIEdQSU84MSwgYW5kIEdQSU84MyBuZWVkcyB0byBiZSBkZWZpbmVkIGFzIHdlbGwuIE9uIHRoZSBndW1zdGl4IEYsCitpbnRlcnJ1cHQgc2lnbmFsIGZvciBkZXRlcm1pbmluZyBjYWJsZSBwcmVzZW5jZS4gT24gdGhlIGd1bXN0aXggRiwKIHRoaXMgbW92ZXMgdG8gR1BJTzE3IGFuZCBHUElPMzcuICovCiAKIC8qIEdQSU94IC0gQ29ubmVjdHMgdG8gVVNCIEQrIGFuZCB1c2VkIGFzIGEgcHVsbC11cCBhZnRlciBHUElPbgogaGFzIGRldGVjdGVkIGEgY2FibGUgaW5zZXJ0aW9uOyBkcml2ZW4gbG93IG90aGVyd2lzZS4gKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX0dVTVNUSVhfT1JJRwotCi0jZGVmaW5lIEdQSU9fR1VNU1RJWF9VU0JfR1BJT24JCTgxCi0jZGVmaW5lIEdQSU9fR1VNU1RJWF9VU0JfR1BJT3gJCTgzCi0KLSNlbHNlCi0KICNkZWZpbmUgR1BJT19HVU1TVElYX1VTQl9HUElPbgkJMzUKICNkZWZpbmUgR1BJT19HVU1TVElYX1VTQl9HUElPeAkJNDEKIAotI2VuZGlmCi0KIC8qIHVzYiBzdGF0ZSBjaGFuZ2UgKi8KICNkZWZpbmUgR1VNU1RJWF9VU0JfSU5UUl9JUlEJCUlSUV9HUElPKEdQSU9fR1VNU1RJWF9VU0JfR1BJT24pCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggM2Q4ZDhjYi4uN2Y2NGQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTE0LDExICsxNCw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCiAvKgotICogV2UgcmVxdWlyZXMgYWJzb2x1dGUgYWRkcmVzc2VzLgotICovCi0jZGVmaW5lIFBDSU9fQkFTRQkJMAotCi0vKgogICogV29ya2Fyb3VuZHMgZm9yIGF0IGxlYXN0IDIgZXJyYXRhIHNvIGZhciByZXF1aXJlIHRoaXMuCiAgKiBUaGUgbWFwcGluZyBpcyBzZXQgaW4gbWFjaC1weGEvZ2VuZXJpYy5jLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbTI3eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG0yN3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTVlNWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG0yN3guaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgUGFsbSBMRCwgVDUsIFRYLCBaNzIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAKKyAqIE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpZm5kZWYJX19JTkNMVURFX01BQ0hfUEFMTTI3WF9fCisjZGVmaW5lCV9fSU5DTFVERV9NQUNIX1BBTE0yN1hfXworCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCitleHRlcm4gdm9pZCBfX2luaXQgcGFsbTI3eF9tbWNfaW5pdChpbnQgZGV0ZWN0LCBpbnQgcm8sIGludCBwb3dlciwKKwkJCQkJaW50IHBvd2VyX2ludmVydGVkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbTI3eF9tbWNfaW5pdChpbnQgZGV0ZWN0LCBpbnQgcm8sIGludCBwb3dlciwKKwkJCQkJaW50IHBvd2VyX2ludmVydGVkKQore30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1VTUEVORCkKK2V4dGVybiB2b2lkIF9faW5pdCBwYWxtMjd4X3BtX2luaXQodW5zaWduZWQgbG9uZyBzdHJfYmFzZSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG0yN3hfcG1faW5pdCh1bnNpZ25lZCBsb25nIHN0cl9iYXNlKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitleHRlcm4gc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtXzMyMHg0ODBfbGNkX21vZGU7CitleHRlcm4gc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtXzMyMHgzMjBfbGNkX21vZGU7CitleHRlcm4gc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtXzMyMHgzMjBfbmV3X2xjZF9tb2RlOworZXh0ZXJuIHZvaWQgX19pbml0IHBhbG0yN3hfbGNkX2luaXQoaW50IHBvd2VyLAorCQkJCQlzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvICptb2RlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbTI3eF9sY2RfaW5pdChpbnQgcG93ZXIsIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gKm1vZGUpIHt9CisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYKSB8fCBcCisJZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9QWEEyN1hfTU9EVUxFKQorZXh0ZXJuIHZvaWQgX19pbml0IHBhbG0yN3hfdWRjX2luaXQoaW50IHZidXMsIGludCBwdWxsdXAsCisJCQkJCWludCB2YnVzX2ludmVydGVkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbTI3eF91ZGNfaW5pdChpbnQgdmJ1cywgaW50IHB1bGx1cCwgaW50IHZidXNfaW52ZXJ0ZWQpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0lSREEpIHx8IGRlZmluZWQoQ09ORklHX0lSREFfTU9EVUxFKQorZXh0ZXJuIHZvaWQgX19pbml0IHBhbG0yN3hfaXJkYV9pbml0KGludCBwd2RuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbTI3eF9pcmRhX2luaXQoaW50IHB3ZG4pIHt9CisjZW5kaWYKKworI2lmCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NT0RVTEUpCitleHRlcm4gdm9pZCBfX2luaXQgcGFsbTI3eF9hYzk3X2luaXQoaW50IG1pbnYsIGludCBtYXh2LCBpbnQgamFjaywKKwkJCQkJaW50IHJlc2V0KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbTI3eF9hYzk3X2luaXQoaW50IG1pbnYsIGludCBtYXh2LCBpbnQgamFjaywgaW50IHJlc2V0KSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfUFdNKSB8fCBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfUFdNX01PRFVMRSkKK2V4dGVybiB2b2lkIF9faW5pdCBwYWxtMjd4X3B3bV9pbml0KGludCBibCwgaW50IGxjZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG0yN3hfcHdtX2luaXQoaW50IGJsLCBpbnQgbGNkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19QREFfUE9XRVIpIHx8IGRlZmluZWQoQ09ORklHX1BEQV9QT1dFUl9NT0RVTEUpCitleHRlcm4gdm9pZCBfX2luaXQgcGFsbTI3eF9wb3dlcl9pbml0KGludCBhYywgaW50IHVzYik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG0yN3hfcG93ZXJfaW5pdChpbnQgYWMsIGludCB1c2IpIHt9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX01BWDE1ODZfTU9EVUxFKQorZXh0ZXJuIHZvaWQgX19pbml0IHBhbG0yN3hfcG1pY19pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtMjd4X3BtaWNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKyNlbmRpZgkvKiBfX0lOQ0xVREVfTUFDSF9QQUxNMjdYX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYXRhX3B4YS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhdGFfcHhhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmN2RmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYXRhX3B4YS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBHZW5lcmljIFBYQSBQQVRBIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmCV9fTUFDSF9QQVRBX1BYQV9IX18KKyNkZWZpbmUJX19NQUNIX1BBVEFfUFhBX0hfXworCitzdHJ1Y3QgcGF0YV9weGFfcGRhdGEgeworCS8qIFBYQSBETUEgRFJFUTwwOjI+IHBpbiAqLworCXVpbnQzMl90CWRtYV9kcmVxOworCS8qIFJlZ2lzdGVyIHNoaWZ0ICovCisJdWludDMyX3QJcmVnX3NoaWZ0OworCS8qIElSUSBmbGFncyAqLworCXVpbnQzMl90CWlycV9mbGFnczsKK307CisKKyNlbmRpZgkvKiBfX01BQ0hfUEFUQV9QWEFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc2hhcnBzbC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NoYXJwc2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI0MmUxNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc2hhcnBzbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIFNoYXJwU0wgU1NQIERyaXZlcgotICovCi0KLXVuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KHVuc2lnbmVkIGxvbmcpOwotdW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9nZXQodm9pZCk7Ci12b2lkIGNvcmdpX3NzcF9hZHM3ODQ2X3B1dCh1bnNpZ25lZCBsb25nIGRhdGEpOwotdm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl9sb2NrKHZvaWQpOwotdm9pZCBjb3JnaV9zc3BfYWRzNzg0Nl91bmxvY2sodm9pZCk7Ci12b2lkIGNvcmdpX3NzcF9sY2R0Z19zZW5kICh1bnNpZ25lZCBjaGFyIGFkcnMsIHVuc2lnbmVkIGNoYXIgZGF0YSk7Ci12b2lkIGNvcmdpX3NzcF9ibGR1dHlfc2V0KGludCBkdXR5KTsKLWludCBjb3JnaV9zc3BfbWF4MTExMV9nZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotLyoKLSAqIFNoYXJwU0wgVG91Y2hzY3JlZW4gRHJpdmVyCi0gKi8KLQotc3RydWN0IGNvcmdpdHNfbWFjaGluZm8gewotCXVuc2lnbmVkIGxvbmcgKCpnZXRfaHN5bmNfaW52cGVyaW9kKSh2b2lkKTsKLQl2b2lkICgqcHV0X2hzeW5jKSh2b2lkKTsKLQl2b2lkICgqd2FpdF9oc3luYykodm9pZCk7Ci19OwotCi0KLS8qCi0gKiBTaGFycFNMIEJhY2tsaWdodAotICovCi1leHRlcm4gdm9pZCBjb3JnaWJsX2xpbWl0X2ludGVuc2l0eShpbnQgbGltaXQpOwotZXh0ZXJuIHZvaWQgY29yZ2lfbGNkX2xpbWl0X2ludGVuc2l0eShpbnQgbGltaXQpOwotCi0KLS8qCi0gKiBTaGFycFNMIEJhdHRlcnkvUE0gRHJpdmVyCi0gKi8KLWV4dGVybiB2b2lkIHNoYXJwc2xfYmF0dGVyeV9raWNrKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NoYXJwc2xfcG0uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zaGFycHNsX3BtLmgKaW5kZXggMTkyMGRjNi4uOTA1YmU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NoYXJwc2xfcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc2hhcnBzbF9wbS5oCkBAIC05Myw2ICs5Myw4IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgc2hhcnBzbF9wbTsKIAorZXh0ZXJuIHN0cnVjdCBiYXR0ZXJ5X3RocmVzaCBzaGFycHNsX2JhdHRlcnlfbGV2ZWxzX2FjaW5bXTsKK2V4dGVybiBzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc2hhcnBzbF9iYXR0ZXJ5X2xldmVsc19ub2FjW107CiAKICNkZWZpbmUgU0hBUlBTTF9MRURfRVJST1IgIDIKICNkZWZpbmUgU0hBUlBTTF9MRURfT04gICAgIDEKQEAgLTEwMSw0ICsxMDMsMTEgQEAKIHZvaWQgc2hhcnBzbF9iYXR0ZXJ5X2tpY2sodm9pZCk7CiB2b2lkIHNoYXJwc2xfcG1fbGVkKGludCB2YWwpOwogCisvKiBNQVgxMTExIENoYW5uZWwgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUFYMTExMV9CQVRUX1ZPTFQgICA0dQorI2RlZmluZSBNQVgxMTExX0JBVFRfVEVNUCAgIDJ1CisjZGVmaW5lIE1BWDExMTFfQUNJTl9WT0xUICAgNnUKK2ludCBzaGFycHNsX3BtX3B4YV9yZWFkX21heDExMTEoaW50IGNoYW5uZWwpOworCit2b2lkIGNvcmdpX2xjZF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NwaXR6LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaAppbmRleCBmYTE5OThjLi42ODU3NDlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3BpdHouaApAQCAtMTg1LDcgKzE4NSw1IEBACiAvKgogICogU2hhcmVkIGRhdGEgc3RydWN0dXJlcwogICovCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0enNjb29wX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c2Nvb3AyX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c3NwX2RldmljZTsKIGV4dGVybiBzdHJ1Y3Qgc2hhcnBzbF9jaGFyZ2VyX21hY2hpbmZvIHNwaXR6X3BtX21hY2hpbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCmluZGV4IGZhNmE3MDguLmRjNjY5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KLSNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dtOTd4eC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXgxNTg2Lmg+CkBAIC02MzYsNyArNjM2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIG1pb2E3MDFfYmF0dGVyeV9kYXRhID0geworc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9wZGF0YSBtaW9hNzAxX2JhdHRlcnlfZGF0YSA9IHsKIAkuYmF0dF9hdXgJPSBXTTk3WFhfQVVYX0lEMSwKIAkudGVtcF9hdXgJPSAtMSwKIAkuY2hhcmdlX2dwaW8JPSAtMSwKQEAgLTY0OCw2ICs2NDgsMTAgQEAKIAkuYmF0dF9uYW1lCT0gIm1pb2E3MDFfYmF0dGVyeSIsCiB9OwogCitzdGF0aWMgc3RydWN0IHdtOTd4eF9wZGF0YSBtaW9hNzAxX3dtOTd4eF9wZGF0YSA9IHsKKwkuYmF0dF9wZGF0YQk9ICZtaW9hNzAxX2JhdHRlcnlfZGF0YSwKK307CisKIC8qCiAgKiBWb2x0YWdlIHJlZ3VsYXRpb24KICAqLwpAQCAtNzE2LDYgKzcyMCw3IEBACiAKIHN0YXRpYyBweGEyeHhfYXVkaW9fb3BzX3QgbWlvYTcwMV9hYzk3X2luZm8gPSB7CiAJLnJlc2V0X2dwaW8gPSA5NSwKKwkuY29kZWNfcGRhdGEgPSB7ICZtaW9hNzAxX3dtOTd4eF9wZGF0YSwgfSwKIH07CiAKIC8qCkBAIC03OTQsNyArNzk5LDYgQEAKIAlzZXRfcHhhX2ZiX2luZm8oJm1pb2E3MDFfcHhhZmJfaW5mbyk7CiAJcHhhX3NldF9tY2lfaW5mbygmbWlvYTcwMV9tY2lfaW5mbyk7CiAJcHhhX3NldF9rZXlwYWRfaW5mbygmbWlvYTcwMV9rZXlwYWRfaW5mbyk7Ci0Jd205N3h4X2JhdF9zZXRfcGRhdGEoJm1pb2E3MDFfYmF0dGVyeV9kYXRhKTsKIAlweGFfc2V0X3VkY19pbmZvKCZtaW9hNzAxX3VkY19pbmZvKTsKIAlweGFfc2V0X2FjOTdfaW5mbygmbWlvYTcwMV9hYzk3X2luZm8pOwogCXBtX3Bvd2VyX29mZiA9IG1pb2E3MDFfcG93ZXJvZmY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhZDZkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvbW1vbiBjb2RlIGZvciBQYWxtIExELCBUNSwgVFgsIFo3MgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMAorICogTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXgxNTg2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvdWRjLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbTI3eC5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG0yN3hfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5kZXRlY3RfZGVsYXlfbXMJPSAyMDAsCit9OworCit2b2lkIF9faW5pdCBwYWxtMjd4X21tY19pbml0KGludCBkZXRlY3QsIGludCBybywgaW50IHBvd2VyLAorCQkJCQlpbnQgcG93ZXJfaW52ZXJ0ZWQpCit7CisJcGFsbTI3eF9tY2lfcGxhdGZvcm1fZGF0YS5ncGlvX2NhcmRfZGV0ZWN0CT0gZGV0ZWN0OworCXBhbG0yN3hfbWNpX3BsYXRmb3JtX2RhdGEuZ3Bpb19jYXJkX3JvCQk9IHJvOworCXBhbG0yN3hfbWNpX3BsYXRmb3JtX2RhdGEuZ3Bpb19wb3dlcgkJPSBwb3dlcjsKKwlwYWxtMjd4X21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fcG93ZXJfaW52ZXJ0CT0gcG93ZXJfaW52ZXJ0ZWQ7CisKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtMjd4X21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQb3dlciBtYW5hZ2VtZW50IC0gc3RhbmRieQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TVVNQRU5EKQordm9pZCBfX2luaXQgcGFsbTI3eF9wbV9pbml0KHVuc2lnbmVkIGxvbmcgc3RyX2Jhc2UpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgcmVzdW1lW10gPSB7CisJCTB4ZTNhMDAxMDEsCS8qIG1vdglyMCwJIzB4NDAwMDAwMDAgKi8KKwkJMHhlMzgwMDYwZiwJLyogb3JyCXIwLCByMCwgIzB4MDBmMDAwMDAgKi8KKwkJMHhlNTkwZjAwOCwJLyogbGRyCXBjLCBbcjAsICMweDA4XSAqLworCX07CisKKwkvKgorCSAqIENvcHkgdGhlIGJvb3Rsb2FkZXIuCisJICogTk9URTogUGFsbVo3MiB1c2VzIGEgZGlmZmVyZW50IHdha2V1cCBtZXRob2QhCisJICovCisJbWVtY3B5KHBoeXNfdG9fdmlydChzdHJfYmFzZSksIHJlc3VtZSwgc2l6ZW9mKHJlc3VtZSkpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfRkJfUFhBX01PRFVMRSkKK3N0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbV8zMjB4NDgwX2xjZF9tb2RlID0geworCS5waXhjbG9jawk9IDU3NjkyLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDMyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCisJLmhzeW5jX2xlbgk9IDQsCisJLnZzeW5jX2xlbgk9IDEsCit9OworCitzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHBhbG1fMzIweDMyMF9sY2RfbW9kZSA9IHsKKwkucGl4Y2xvY2sJPSAxMTUzODQsCisJLnhyZXMJCT0gMzIwLAorCS55cmVzCQk9IDMyMCwKKwkuYnBwCQk9IDE2LAorCisJLmxlZnRfbWFyZ2luCT0gMjcsCisJLnJpZ2h0X21hcmdpbgk9IDcsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDgsCisKKwkuaHN5bmNfbGVuCT0gNiwKKwkudnN5bmNfbGVuCT0gMSwKK307CisKK3N0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbV8zMjB4MzIwX25ld19sY2RfbW9kZSA9IHsKKwkucGl4Y2xvY2sJPSA4NjUzOCwKKwkueHJlcwkJPSAzMjAsCisJLnlyZXMJCT0gMzIwLAorCS5icHAJCT0gMTYsCisKKwkubGVmdF9tYXJnaW4JPSAyMCwKKwkucmlnaHRfbWFyZ2luCT0gOCwKKwkudXBwZXJfbWFyZ2luCT0gOCwKKwkubG93ZXJfbWFyZ2luCT0gNSwKKworCS5oc3luY19sZW4JPSA0LAorCS52c3luY19sZW4JPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbTI3eF9sY2Rfc2NyZWVuID0geworCS5udW1fbW9kZXMJPSAxLAorCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCit9OworCitzdGF0aWMgaW50IHBhbG0yN3hfbGNkX3Bvd2VyOworc3RhdGljIHZvaWQgcGFsbTI3eF9sY2RfY3RsKGludCBvbiwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICppbmZvKQoreworCWdwaW9fc2V0X3ZhbHVlKHBhbG0yN3hfbGNkX3Bvd2VyLCBvbik7Cit9CisKK3ZvaWQgX19pbml0IHBhbG0yN3hfbGNkX2luaXQoaW50IHBvd2VyLCBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvICptb2RlKQoreworCXBhbG0yN3hfbGNkX3NjcmVlbi5tb2RlcyA9IG1vZGU7CisKKwlpZiAoZ3Bpb19pc192YWxpZChwb3dlcikpIHsKKwkJaWYgKCFncGlvX3JlcXVlc3QocG93ZXIsICJMQ0QgcG93ZXIiKSkgeworCQkJcHJfZXJyKCJQYWxtMjd4OiBmYWlsZWQgdG8gY2xhaW0gbGNkIHBvd2VyIGdwaW8hXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIWdwaW9fZGlyZWN0aW9uX291dHB1dChwb3dlciwgMSkpIHsKKwkJCXByX2VycigiUGFsbTI3eDogbGNkIHBvd2VyIGNvbmZpZ3VyYXRpb24gZmFpbGVkIVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcGFsbTI3eF9sY2RfcG93ZXIgPSBwb3dlcjsKKwkJcGFsbTI3eF9sY2Rfc2NyZWVuLnB4YWZiX2xjZF9wb3dlciA9IHBhbG0yN3hfbGNkX2N0bDsKKwl9CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG0yN3hfbGNkX3NjcmVlbik7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVNCIEdhZGdldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZglkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyBwYWxtMjd4X3VkY19pbmZvID0geworCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbTI3eF9ncGlvX3ZidXMgPSB7CisJLm5hbWUJPSAiZ3Bpby12YnVzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtMjd4X3VkY19pbmZvLAorCX0sCit9OworCit2b2lkIF9faW5pdCBwYWxtMjd4X3VkY19pbml0KGludCB2YnVzLCBpbnQgcHVsbHVwLCBpbnQgdmJ1c19pbnZlcnRlZCkKK3sKKwlwYWxtMjd4X3VkY19pbmZvLmdwaW9fdmJ1cwk9IHZidXM7CisJcGFsbTI3eF91ZGNfaW5mby5ncGlvX3B1bGx1cAk9IHB1bGx1cDsKKworCXBhbG0yN3hfdWRjX2luZm8uZ3Bpb192YnVzX2ludmVydGVkID0gdmJ1c19pbnZlcnRlZDsKKworCWlmICghZ3Bpb19yZXF1ZXN0KHB1bGx1cCwgIlVTQiBQdWxsdXAiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocHVsbHVwLAorCQkJcGFsbTI3eF91ZGNfaW5mby5ncGlvX3ZidXNfaW52ZXJ0ZWQpOworCQlncGlvX2ZyZWUocHVsbHVwKTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtMjd4X2dwaW9fdmJ1cyk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSXJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSB8fCBkZWZpbmVkKENPTkZJR19JUkRBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG0yN3hfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAorfTsKKwordm9pZCBfX2luaXQgcGFsbTI3eF9pcmRhX2luaXQoaW50IHB3ZG4pCit7CisJcGFsbTI3eF9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBwd2RuOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtMjd4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogV005N3h4IGF1ZGlvLCBiYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X3BkYXRhIHBhbG0yN3hfYmF0dF9wZGF0YSA9IHsKKwkuYmF0dF9hdXgJPSBXTTk3WFhfQVVYX0lEMywKKwkudGVtcF9hdXgJPSBXTTk3WFhfQVVYX0lEMiwKKwkuY2hhcmdlX2dwaW8JPSAtMSwKKwkuYmF0dF9tdWx0CT0gMTAwMCwKKwkuYmF0dF9kaXYJPSA0MTQsCisJLnRlbXBfbXVsdAk9IDEsCisJLnRlbXBfZGl2CT0gMSwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKKwkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCit9OworCitzdGF0aWMgc3RydWN0IHdtOTd4eF9wZGF0YSBwYWxtMjd4X3dtOTd4eF9wZGF0YSA9IHsKKwkuYmF0dF9wZGF0YQk9ICZwYWxtMjd4X2JhdHRfcGRhdGEsCit9OworCitzdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IHBhbG0yN3hfYWM5N19wZGF0YSA9IHsKKwkuY29kZWNfcGRhdGEJPSB7ICZwYWxtMjd4X3dtOTd4eF9wZGF0YSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGFsbTI3eF9hc29jX2luZm8gcGFsbTI3eF9hc29jX3BkYXRhID0geworCS5qYWNrX2dwaW8JPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG0yN3hfYXNvYyA9IHsKKwkubmFtZSA9ICJwYWxtMjd4LWFzb2MiLAorCS5pZCAgID0gLTEsCisJLmRldiAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG0yN3hfYXNvY19wZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcGFsbTI3eF9hYzk3X2luaXQoaW50IG1pbnYsIGludCBtYXh2LCBpbnQgamFjaywgaW50IHJlc2V0KQoreworCXBhbG0yN3hfYWM5N19wZGF0YS5yZXNldF9ncGlvCT0gcmVzZXQ7CisJcGFsbTI3eF9hc29jX3BkYXRhLmphY2tfZ3Bpbwk9IGphY2s7CisKKwlpZiAobWludiA8IDAgfHwgbWF4diA8IDApIHsKKwkJcGFsbTI3eF9hYzk3X3BkYXRhLmNvZGVjX3BkYXRhWzBdID0gTlVMTDsKKwkJcHhhX3NldF9hYzk3X2luZm8oJnBhbG0yN3hfYWM5N19wZGF0YSk7CisJfSBlbHNlIHsKKwkJcGFsbTI3eF9iYXR0X3BkYXRhLm1pbl92b2x0YWdlCT0gbWludiwKKwkJcGFsbTI3eF9iYXR0X3BkYXRhLm1heF92b2x0YWdlCT0gbWF4diwKKworCQlweGFfc2V0X2FjOTdfaW5mbygmcGFsbTI3eF9hYzk3X3BkYXRhKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtMjd4X2Fzb2MpOworCX0KK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYWNrbGlnaHQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX1BXTSkgfHwgZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX1BXTV9NT0RVTEUpCitzdGF0aWMgaW50IHBhbG1fYmxfcG93ZXI7CitzdGF0aWMgaW50IHBhbG1fbGNkX3Bvd2VyOworCitzdGF0aWMgaW50IHBhbG0yN3hfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocGFsbV9ibF9wb3dlciwgIkJMIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBhbG1fYmxfcG93ZXIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCWlmIChncGlvX2lzX3ZhbGlkKHBhbG1fbGNkX3Bvd2VyKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGFsbV9sY2RfcG93ZXIsICJMQ0QgUE9XRVIiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyMjsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBhbG1fbGNkX3Bvd2VyLCAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyMzsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjM6CisJZ3Bpb19mcmVlKHBhbG1fbGNkX3Bvd2VyKTsKK2VycjI6CisJZ3Bpb19mcmVlKHBhbG1fYmxfcG93ZXIpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbTI3eF9iYWNrbGlnaHRfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCit7CisJZ3Bpb19zZXRfdmFsdWUocGFsbV9ibF9wb3dlciwgYnJpZ2h0bmVzcyk7CisJaWYgKGdwaW9faXNfdmFsaWQocGFsbV9sY2RfcG93ZXIpKQorCQlncGlvX3NldF92YWx1ZShwYWxtX2xjZF9wb3dlciwgYnJpZ2h0bmVzcyk7CisJcmV0dXJuIGJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG0yN3hfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShwYWxtX2JsX3Bvd2VyKTsKKwlpZiAoZ3Bpb19pc192YWxpZChwYWxtX2xjZF9wb3dlcikpCisJCWdwaW9fZnJlZShwYWxtX2xjZF9wb3dlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG0yN3hfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDB4ZmUsCisJLmRmdF9icmlnaHRuZXNzCT0gMHg3ZSwKKwkucHdtX3BlcmlvZF9ucwk9IDM1MDAsCisJLmluaXQJCT0gcGFsbTI3eF9iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG0yN3hfYmFja2xpZ2h0X25vdGlmeSwKKwkuZXhpdAkJPSBwYWxtMjd4X2JhY2tsaWdodF9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbTI3eF9iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbTI3eF9iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcGFsbTI3eF9wd21faW5pdChpbnQgYmwsIGludCBsY2QpCit7CisJcGFsbV9ibF9wb3dlcgk9IGJsOworCXBhbG1fbGNkX3Bvd2VyCT0gbGNkOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbTI3eF9iYWNrbGlnaHQpOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBvd2VyIHN1cHBseQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QREFfUE9XRVIpIHx8IGRlZmluZWQoQ09ORklHX1BEQV9QT1dFUl9NT0RVTEUpCitzdGF0aWMgaW50IHBhbG1fYWNfc3RhdGU7CitzdGF0aWMgaW50IHBhbG1fdXNiX3N0YXRlOworCitzdGF0aWMgaW50IHBhbG0yN3hfcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QocGFsbV9hY19zdGF0ZSwgIkFDIHN0YXRlIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBhbG1fYWNfc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKworCWlmIChncGlvX2lzX3ZhbGlkKHBhbG1fdXNiX3N0YXRlKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGFsbV91c2Jfc3RhdGUsICJVU0Igc3RhdGUiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyMjsKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGFsbV91c2Jfc3RhdGUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnIzOworCX0KKworCXJldHVybiAwOworZXJyMzoKKwlncGlvX2ZyZWUocGFsbV91c2Jfc3RhdGUpOworZXJyMjoKKwlncGlvX2ZyZWUocGFsbV9hY19zdGF0ZSk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG0yN3hfcG93ZXJfc3VwcGx5X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShwYWxtX3VzYl9zdGF0ZSk7CisJZ3Bpb19mcmVlKHBhbG1fYWNfc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBhbG0yN3hfaXNfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHBhbG1fYWNfc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBhbG0yN3hfaXNfdXNiX29ubGluZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUocGFsbV91c2Jfc3RhdGUpOworfQorc3RhdGljIGNoYXIgKnBhbG0yN3hfc3VwcGxpY2FudHNbXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBhbG0yN3hfcHNfaW5mbyA9IHsKKwkuaW5pdAkJCT0gcGFsbTI3eF9wb3dlcl9zdXBwbHlfaW5pdCwKKwkuZXhpdAkJCT0gcGFsbTI3eF9wb3dlcl9zdXBwbHlfZXhpdCwKKwkuaXNfYWNfb25saW5lCQk9IHBhbG0yN3hfaXNfYWNfb25saW5lLAorCS5pc191c2Jfb25saW5lCQk9IHBhbG0yN3hfaXNfdXNiX29ubGluZSwKKwkuc3VwcGxpZWRfdG8JCT0gcGFsbTI3eF9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzCT0gQVJSQVlfU0laRShwYWxtMjd4X3N1cHBsaWNhbnRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG0yN3hfcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbTI3eF9wc19pbmZvLAorCX0sCit9OworCit2b2lkIF9faW5pdCBwYWxtMjd4X3Bvd2VyX2luaXQoaW50IGFjLCBpbnQgdXNiKQoreworCXBhbG1fYWNfc3RhdGUJPSBhYzsKKwlwYWxtX3VzYl9zdGF0ZQk9IHVzYjsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG0yN3hfcG93ZXJfc3VwcGx5KTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3JlIHBvd2VyIHJlZ3VsYXRvcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NikgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2X01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYWxtMjd4X21heDE1ODdhX2NvbnN1bWVyc1tdID0geworCXsKKwkJLnN1cHBseQk9ICJ2Y2NfY29yZSIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbG0yN3hfbWF4MTU4N2FfdjNfaW5mbyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQk9ICJ2Y2NfY29yZSByYW5nZSIsCisJCS5taW5fdVYJCT0gOTAwMDAwLAorCQkubWF4X3VWCQk9IDE3MDUwMDAsCisJCS5hbHdheXNfb24JPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJfSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBwYWxtMjd4X21heDE1ODdhX2NvbnN1bWVycywKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShwYWxtMjd4X21heDE1ODdhX2NvbnN1bWVycyksCit9OworCitzdGF0aWMgc3RydWN0IG1heDE1ODZfc3ViZGV2X2RhdGEgcGFsbTI3eF9tYXgxNTg3YV9zdWJkZXZzW10gPSB7CisJeworCQkubmFtZQkJPSAidmNjX2NvcmUiLAorCQkuaWQJCT0gTUFYMTU4Nl9WMywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbTI3eF9tYXgxNTg3YV92M19pbmZvLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4MTU4Nl9wbGF0Zm9ybV9kYXRhIHBhbG0yN3hfbWF4MTU4N2FfaW5mbyA9IHsKKwkuc3ViZGV2cyAgICAgPSBwYWxtMjd4X21heDE1ODdhX3N1YmRldnMsCisJLm51bV9zdWJkZXZzID0gQVJSQVlfU0laRShwYWxtMjd4X21heDE1ODdhX3N1YmRldnMpLAorCS52M19nYWluICAgICA9IE1BWDE1ODZfR0FJTl9SMjRfM2szMiwgLyogNzMwLi4xNTUwIG1WICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcGFsbTI3eF9waTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJtYXgxNTg2IiwgMHgxNCksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG0yN3hfbWF4MTU4N2FfaW5mbywKKwl9LAorfTsKKwordm9pZCBfX2luaXQgcGFsbTI3eF9wbWljX2luaXQodm9pZCkKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBBUlJBWV9BTkRfU0laRShwYWxtMjd4X3BpMmNfYm9hcmRfaW5mbykpOworCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggMTk2MzgxOS4uOTEwMzhlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CisjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvcGFsbWFzb2MuaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG0yN3guaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC0xMjcsNiArMTI4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE5PUiBGbGFzaAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhbG1sZF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQkJPSAiRmxhc2giLApAQCAtMTYwLDIwICsxNjIsMTggQEAKIAl9LAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbWxkX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLAotCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksCi0JLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsCi0JLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKLX07CitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX25vcl9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtbGRfZmxhc2gpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtbGRfbm9yX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGtleWJvYXJkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4X01PRFVMRSkKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbWxkX21hdHJpeF9rZXlzW10gPSB7CiAJS0VZKDAsIDEsIEtFWV9GMiksCiAJS0VZKDAsIDIsIEtFWV9VUCksCkBAIC0yMDAsOSArMjAwLDE4IEBACiAJLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX2twY19pbml0KHZvaWQpCit7CisJcHhhX3NldF9rZXlwYWRfaW5mbygmcGFsbWxkX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbWxkX2twY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR1BJTyBrZXlzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG1sZF9weGFfYnV0dG9uc1tdID0gewogCXtLRVlfRjgsIEdQSU9fTlJfUEFMTUxEX0hPVFNZTkNfQlVUVE9OX04sIDEsICJIb3RTeW5jIEJ1dHRvbiIgfSwKIAl7S0VZX0Y5LCBHUElPX05SX1BBTE1MRF9MT0NLX1NXSVRDSCwgMCwgIkxvY2sgU3dpdGNoIiB9LApAQCAtMjIyLDc3ICsyMzEsMTggQEAKIAl9LAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQmFja2xpZ2h0Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtbGRfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19pbml0IHBhbG1sZF9rZXlzX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMjsKLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKLQotCXJldHVybiAwOwotZXJyMzoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSKTsKLWVycjoKLQlyZXR1cm4gcmV0OworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbWxkX3B4YV9rZXlzKTsKIH0KLQotc3RhdGljIGludCBwYWxtbGRfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOwotCXJldHVybiBicmlnaHRuZXNzOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9CTF9QT1dFUik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG1sZF9iYWNrbGlnaHRfZGF0YSA9IHsKLQkucHdtX2lkCQk9IDAsCi0JLm1heF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCi0JLmRmdF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCi0JLnB3bV9wZXJpb2RfbnMJPSBQQUxNTERfUEVSSU9EX05TLAotCS5pbml0CQk9IHBhbG1sZF9iYWNrbGlnaHRfaW5pdCwKLQkubm90aWZ5CQk9IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5LAotCS5leGl0CQk9IHBhbG1sZF9iYWNrbGlnaHRfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9iYWNrbGlnaHQgPSB7Ci0JLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCi0JLmRldgk9IHsKLQkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbWxkX2JhY2tsaWdodF9kYXRhLAotCX0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBJckRBCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbWxkX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLX07CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG1sZF9rZXlzX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBMRURzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKIHN0cnVjdCBncGlvX2xlZCBncGlvX2xlZHNbXSA9IHsKIHsKIAkubmFtZQkJCT0gInBhbG1sZDpncmVlbjpsZWQiLApAQCAtMzE4LDE3NCArMjY4LDM0IEBACiAJfQogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUG93ZXIgc3VwcGx5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwb3dlcl9zdXBwbHlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX2xlZHNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjE7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OLCAiQ0FCTEVfU1RBVEVfVVNCIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIzOwotCi0JcmV0dXJuIDA7Ci0KLWVycjM6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QpOwotZXJyMToKLQlyZXR1cm4gcmV0OworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGFsbWxkX2xlZHMpOwogfQotCi1zdGF0aWMgaW50IHBhbG1sZF9pc19hY19vbmxpbmUodm9pZCkKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKLX0KLQotc3RhdGljIGludCBwYWxtbGRfaXNfdXNiX29ubGluZSh2b2lkKQotewotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcG93ZXJfc3VwcGx5X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QpOwotfQotCi1zdGF0aWMgY2hhciAqcGFsbWxkX3N1cHBsaWNhbnRzW10gPSB7Ci0JIm1haW4tYmF0dGVyeSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKLQkuaW5pdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2luaXQsCi0JLmlzX2FjX29ubGluZSAgICA9IHBhbG1sZF9pc19hY19vbmxpbmUsCi0JLmlzX3VzYl9vbmxpbmUgICA9IHBhbG1sZF9pc191c2Jfb25saW5lLAotCS5leGl0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfZXhpdCwKLQkuc3VwcGxpZWRfdG8gICAgID0gcGFsbWxkX3N1cHBsaWNhbnRzLAotCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHBhbG1sZF9zdXBwbGljYW50cyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb3dlcl9zdXBwbHkgPSB7Ci0JLm5hbWUgPSAicGRhLXBvd2VyIiwKLQkuaWQgICA9IC0xLAotCS5kZXYgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZwb3dlcl9zdXBwbHlfaW5mbywKLQl9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogV005N3h4IGJhdHRlcnkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gd205N3h4X2JhdHRfcGRhdGEgPSB7Ci0JLmJhdHRfYXV4CT0gV005N1hYX0FVWF9JRDMsCi0JLnRlbXBfYXV4CT0gV005N1hYX0FVWF9JRDIsCi0JLmNoYXJnZV9ncGlvCT0gLTEsCi0JLm1heF92b2x0YWdlCT0gUEFMTUxEX0JBVF9NQVhfVk9MVEFHRSwKLQkubWluX3ZvbHRhZ2UJPSBQQUxNTERfQkFUX01JTl9WT0xUQUdFLAotCS5iYXR0X211bHQJPSAxMDAwLAotCS5iYXR0X2Rpdgk9IDQxNCwKLQkudGVtcF9tdWx0CT0gMSwKLQkudGVtcF9kaXYJPSAxLAotCS5iYXR0X3RlY2gJPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAotCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFTb0MgYXVkaW8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBhbG0yN3hfYXNvY19pbmZvIHBhbG1sZF9hc29jX3BkYXRhID0gewotCS5qYWNrX2dwaW8JPSBHUElPX05SX1BBTE1MRF9FQVJQSE9ORV9ERVRFQ1QsCi19OwotCi1zdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IHBhbG1sZF9hYzk3X3BkYXRhID0gewotCS5yZXNldF9ncGlvCT0gOTUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtbGRfYXNvYyA9IHsKLQkubmFtZSA9ICJwYWxtMjd4LWFzb2MiLAotCS5pZCAgID0gLTEsCi0JLmRldiAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG1sZF9hc29jX3BkYXRhLAotCX0sCi19OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtbGRfbGVkc19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSERECiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2hkZCA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19QQVRBX1BBTE1MRCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9QQUxNTERfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX2lkZV9kZXZpY2UgPSB7CiAJLm5hbWUJPSAicGF0YV9wYWxtbGQiLAogCS5pZAk9IC0xLAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnJhbWVidWZmZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtbGRfbGNkX21vZGVzW10gPSB7CitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX2lkZV9pbml0KHZvaWQpCiB7Ci0JLnBpeGNsb2NrCT0gNTc2OTIsCi0JLnhyZXMJCT0gMzIwLAotCS55cmVzCQk9IDQ4MCwKLQkuYnBwCQk9IDE2LAotCi0JLmxlZnRfbWFyZ2luCT0gMzIsCi0JLnJpZ2h0X21hcmdpbgk9IDEsCi0JLnVwcGVyX21hcmdpbgk9IDcsCi0JLmxvd2VyX21hcmdpbgk9IDEsCi0KLQkuaHN5bmNfbGVuCT0gNCwKLQkudnN5bmNfbGVuCT0gMSwKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtbGRfbGNkX3NjcmVlbiA9IHsKLQkubW9kZXMJCT0gcGFsbWxkX2xjZF9tb2RlcywKLQkubnVtX21vZGVzCT0gQVJSQVlfU0laRShwYWxtbGRfbGNkX21vZGVzKSwKLQkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUG93ZXIgbWFuYWdlbWVudCAtIHN0YW5kYnkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX3BtX2luaXQodm9pZCkKLXsKLQlzdGF0aWMgdTMyIHJlc3VtZVtdID0gewotCQkweGUzYTAwMTAxLAkvKiBtb3YJcjAsCSMweDQwMDAwMDAwICovCi0JCTB4ZTM4MDA2MGYsCS8qIG9ycglyMCwgcjAsICMweDAwZjAwMDAwICovCi0JCTB4ZTU5MGYwMDgsCS8qIGxkcglwYywgW3IwLCAjMHgwOF0gKi8KLQl9OwotCi0JLyogY29weSB0aGUgYm9vdGxvYWRlciAqLwotCW1lbWNweShwaHlzX3RvX3ZpcnQoUEFMTUxEX1NUUl9CQVNFKSwgcmVzdW1lLCBzaXplb2YocmVzdW1lKSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtbGRfaWRlX2RldmljZSk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG1sZF9pZGVfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY2hpbmUgaW5pdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKLQkmcGFsbWxkX3B4YV9rZXlzLAotI2VuZGlmCi0JJnBhbG1sZF9iYWNrbGlnaHQsCi0JJnBhbG1sZF9sZWRzLAotCSZwb3dlcl9zdXBwbHksCi0JJnBhbG1sZF9hc29jLAotCSZwYWxtbGRfaGRkLAotCSZwYWxtbGRfZmxhc2gsCi19OwotCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG1sZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIHsKIAkudmlydHVhbAk9IFBBTE1MRF9JREVfVklSVCwKQEAgLTUxMCwyMCArMzIwLDI2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbWxkX2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtbGRfcGluX2NvbmZpZykpOwotCiAJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CiAKLQlwYWxtbGRfcG1faW5pdCgpOwotCXNldF9weGFfZmJfaW5mbygmcGFsbWxkX2xjZF9zY3JlZW4pOwotCXB4YV9zZXRfbWNpX2luZm8oJnBhbG1sZF9tY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9hYzk3X2luZm8oJnBhbG1sZF9hYzk3X3BkYXRhKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbWxkX2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9rZXlwYWRfaW5mbygmcGFsbWxkX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKLQl3bTk3eHhfYmF0X3NldF9wZGF0YSgmd205N3h4X2JhdHRfcGRhdGEpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJcGFsbTI3eF9tbWNfaW5pdChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiwgR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksCisJCQlHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgMCk7CisJcGFsbTI3eF9wbV9pbml0KFBBTE1MRF9TVFJfQkFTRSk7CisJcGFsbTI3eF9sY2RfaW5pdCgtMSwgJnBhbG1fMzIweDQ4MF9sY2RfbW9kZSk7CisJcGFsbTI3eF9pcmRhX2luaXQoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7CisJcGFsbTI3eF9hYzk3X2luaXQoUEFMTUxEX0JBVF9NSU5fVk9MVEFHRSwgUEFMTUxEX0JBVF9NQVhfVk9MVEFHRSwKKwkJCUdQSU9fTlJfUEFMTUxEX0VBUlBIT05FX0RFVEVDVCwgOTUpOworCXBhbG0yN3hfcHdtX2luaXQoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUik7CisJcGFsbTI3eF9wb3dlcl9pbml0KEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCwKKwkJCUdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7CisJcGFsbTI3eF9wbWljX2luaXQoKTsKKwlwYWxtbGRfa3BjX2luaXQoKTsKKwlwYWxtbGRfa2V5c19pbml0KCk7CisJcGFsbWxkX25vcl9pbml0KCk7CisJcGFsbWxkX2xlZHNfaW5pdCgpOworCXBhbG1sZF9pZGVfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFBBTE1MRCwgIlBhbG0gTGlmZURyaXZlIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKaW5kZXggNWU5MmQ4NC4uMWMyODE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CisjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dwaW9fdmJ1cy5oPgogCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3BhbG1hc29jLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtMjd4Lmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTA0LDE5ICsxMDUsOSBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OLAotCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFksCi0JLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsCi0JLmRldGVjdF9kZWxheV9tcwk9IDIwMCwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdQSU8ga2V5Ym9hcmQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQogc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdDVfbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1BPV0VSKSwKIAlLRVkoMCwgMSwgS0VZX0YxKSwKQEAgLTE0Miw5ICsxMzMsMTggQEAKIAkuZGVib3VuY2VfaW50ZXJ2YWwJPSAzMCwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfa3BjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtdDVfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdDVfa3BjX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGtleXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbXQ1X3B4YV9idXR0b25zW10gPSB7CiAJe0tFWV9GOCwgR1BJT19OUl9QQUxNVDVfSE9UU1lOQ19CVVRUT05fTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiB9LAogfTsKQEAgLTE2MiwyNDEgKzE2MiwxNyBAQAogCX0sCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBCYWNrbGlnaHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X2tleXNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIsICJCTCBQT1dFUiIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIzOwotCi0JcmV0dXJuIDA7Ci1lcnIzOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIpOwotZXJyOgotCXJldHVybiByZXQ7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtdDVfcHhhX2tleXMpOwogfQotCi1zdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIsIGJyaWdodG5lc3MpOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7Ci0JcmV0dXJuIGJyaWdodG5lc3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbXQ1X2JhY2tsaWdodF9kYXRhID0gewotCS5wd21faWQJCT0gMCwKLQkubWF4X2JyaWdodG5lc3MJPSBQQUxNVDVfTUFYX0lOVEVOU0lUWSwKLQkuZGZ0X2JyaWdodG5lc3MJPSBQQUxNVDVfTUFYX0lOVEVOU0lUWSwKLQkucHdtX3BlcmlvZF9ucwk9IFBBTE1UNV9QRVJJT0RfTlMsCi0JLmluaXQJCT0gcGFsbXQ1X2JhY2tsaWdodF9pbml0LAotCS5ub3RpZnkJCT0gcGFsbXQ1X2JhY2tsaWdodF9ub3RpZnksCi0JLmV4aXQJCT0gcGFsbXQ1X2JhY2tsaWdodF9leGl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXQ1X2JhY2tsaWdodCA9IHsKLQkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKLQkuZGV2CT0gewotCQkucGFyZW50CQk9ICZweGEyN3hfZGV2aWNlX3B3bTAuZGV2LAotCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdDVfYmFja2xpZ2h0X2RhdGEsCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElyREEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVURDCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvIHBhbG10NV91ZGNfaW5mbyA9IHsKLQkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVQ1X1VTQl9ERVRFQ1RfTiwKLQkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKLQkuZ3Bpb19wdWxsdXAJCT0gR1BJT19OUl9QQUxNVDVfVVNCX1BVTExVUCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10NV9ncGlvX3ZidXMgPSB7Ci0JLm5hbWUJPSAiZ3Bpby12YnVzIiwKLQkuaWQJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdDVfdWRjX2luZm8sCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBvd2VyIHN1cHBseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjE7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNUKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0KLQlyZXR1cm4gMDsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7Ci1lcnIxOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXQ1X2lzX2FjX29ubGluZSh2b2lkKQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QpOwotfQotCi1zdGF0aWMgdm9pZCBwb3dlcl9zdXBwbHlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpwYWxtdDVfc3VwcGxpY2FudHNbXSA9IHsKLQkibWFpbi1iYXR0ZXJ5IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBvd2VyX3N1cHBseV9pbmZvID0gewotCS5pbml0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfaW5pdCwKLQkuaXNfYWNfb25saW5lICAgID0gcGFsbXQ1X2lzX2FjX29ubGluZSwKLQkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCi0JLnN1cHBsaWVkX3RvICAgICA9IHBhbG10NV9zdXBwbGljYW50cywKLQkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShwYWxtdDVfc3VwcGxpY2FudHMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0gewotCS5uYW1lID0gInBkYS1wb3dlciIsCi0JLmlkICAgPSAtMSwKLQkuZGV2ICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFdNOTd4eCBiYXR0ZXJ5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0gewotCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAotCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAotCS5jaGFyZ2VfZ3Bpbwk9IC0xLAotCS5tYXhfdm9sdGFnZQk9IFBBTE1UNV9CQVRfTUFYX1ZPTFRBR0UsCi0JLm1pbl92b2x0YWdlCT0gUEFMTVQ1X0JBVF9NSU5fVk9MVEFHRSwKLQkuYmF0dF9tdWx0CT0gMTAwMCwKLQkuYmF0dF9kaXYJPSA0MTQsCi0JLnRlbXBfbXVsdAk9IDEsCi0JLnRlbXBfZGl2CT0gMSwKLQkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKLQkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBhU29DIGF1ZGlvCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyBwYWxtdDVfYXNvY19wZGF0YSA9IHsKLQkuamFja19ncGlvCT0gR1BJT19OUl9QQUxNVDVfRUFSUEhPTkVfREVURUNULAotfTsKLQotc3RhdGljIHB4YTJ4eF9hdWRpb19vcHNfdCBwYWxtdDVfYWM5N19wZGF0YSA9IHsKLQkucmVzZXRfZ3Bpbwk9IDk1LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXQ1X2Fzb2MgPSB7Ci0JLm5hbWUgPSAicGFsbTI3eC1hc29jIiwKLQkuaWQgICA9IC0xLAotCS5kZXYgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdDVfYXNvY19wZGF0YSwKLQl9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnJhbWVidWZmZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtdDVfbGNkX21vZGVzW10gPSB7Ci17Ci0JLnBpeGNsb2NrCT0gNTc2OTIsCi0JLnhyZXMJCT0gMzIwLAotCS55cmVzCQk9IDQ4MCwKLQkuYnBwCQk9IDE2LAotCi0JLmxlZnRfbWFyZ2luCT0gMzIsCi0JLnJpZ2h0X21hcmdpbgk9IDEsCi0JLnVwcGVyX21hcmdpbgk9IDcsCi0JLmxvd2VyX21hcmdpbgk9IDEsCi0KLQkuaHN5bmNfbGVuCT0gNCwKLQkudnN5bmNfbGVuCT0gMSwKLX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtdDVfbGNkX3NjcmVlbiA9IHsKLQkubW9kZXMJCT0gcGFsbXQ1X2xjZF9tb2RlcywKLQkubnVtX21vZGVzCT0gQVJSQVlfU0laRShwYWxtdDVfbGNkX21vZGVzKSwKLQkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUG93ZXIgbWFuYWdlbWVudCAtIHN0YW5kYnkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X3BtX2luaXQodm9pZCkKLXsKLQlzdGF0aWMgdTMyIHJlc3VtZVtdID0gewotCQkweGUzYTAwMTAxLAkvKiBtb3YJcjAsCSMweDQwMDAwMDAwICovCi0JCTB4ZTM4MDA2MGYsCS8qIG9ycglyMCwgcjAsICMweDAwZjAwMDAwICovCi0JCTB4ZTU5MGYwMDgsCS8qIGxkcglwYywgW3IwLCAjMHgwOF0gKi8KLQl9OwotCi0JLyogY29weSB0aGUgYm9vdGxvYWRlciAqLwotCW1lbWNweShwaHlzX3RvX3ZpcnQoUEFMTVQ1X1NUUl9CQVNFKSwgcmVzdW1lLCBzaXplb2YocmVzdW1lKSk7Ci19CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10NV9rZXlzX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWNoaW5lIGluaXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi0JJnBhbG10NV9weGFfa2V5cywKLSNlbmRpZgotCSZwYWxtdDVfYmFja2xpZ2h0LAotCSZwb3dlcl9zdXBwbHksCi0JJnBhbG10NV9hc29jLAotCSZwYWxtdDVfZ3Bpb192YnVzLAotfTsKLQotLyogc2V0dXAgdWRjIEdQSU9zIGluaXRpYWwgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfdWRjX2luaXQodm9pZCkKLXsKLQlpZiAoIWdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9VU0JfUFVMTFVQLCAiVURDIFZidXMiKSkgewotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfVVNCX1BVTExVUCwgMSk7Ci0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9VU0JfUFVMTFVQKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdDVfcmVzZXJ2ZSh2b2lkKQogewogCW1lbWJsb2NrX3Jlc2VydmUoMHhhMDIwMDAwMCwgMHgxMDAwKTsKQEAgLTQwNSwyMSArMTgxLDI0IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdDVfcGluX2NvbmZpZykpOwotCiAJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CiAKLQlwYWxtdDVfcG1faW5pdCgpOwotCXNldF9weGFfZmJfaW5mbygmcGFsbXQ1X2xjZF9zY3JlZW4pOwotCXB4YV9zZXRfbWNpX2luZm8oJnBhbG10NV9tY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcGFsbXQ1X3VkY19pbml0KCk7Ci0JcHhhX3NldF9hYzk3X2luZm8oJnBhbG10NV9hYzk3X3BkYXRhKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXQ1X2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9rZXlwYWRfaW5mbygmcGFsbXQ1X2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKLQl3bTk3eHhfYmF0X3NldF9wZGF0YSgmd205N3h4X2JhdHRfcGRhdGEpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJcGFsbTI3eF9tbWNfaW5pdChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwgR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFksCisJCQlHUElPX05SX1BBTE1UNV9TRF9QT1dFUiwgMCk7CisJcGFsbTI3eF9wbV9pbml0KFBBTE1UNV9TVFJfQkFTRSk7CisJcGFsbTI3eF9sY2RfaW5pdCgtMSwgJnBhbG1fMzIweDQ4MF9sY2RfbW9kZSk7CisJcGFsbTI3eF91ZGNfaW5pdChHUElPX05SX1BBTE1UNV9VU0JfREVURUNUX04sCisJCQlHUElPX05SX1BBTE1UNV9VU0JfUFVMTFVQLCAxKTsKKwlwYWxtMjd4X2lyZGFfaW5pdChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFKTsKKwlwYWxtMjd4X2FjOTdfaW5pdChQQUxNVDVfQkFUX01JTl9WT0xUQUdFLCBQQUxNVDVfQkFUX01BWF9WT0xUQUdFLAorCQkJR1BJT19OUl9QQUxNVDVfRUFSUEhPTkVfREVURUNULCA5NSk7CisJcGFsbTI3eF9wd21faW5pdChHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSKTsKKwlwYWxtMjd4X3Bvd2VyX2luaXQoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNULCAtMSk7CisJcGFsbTI3eF9wbWljX2luaXQoKTsKKwlwYWxtdDVfa3BjX2luaXQoKTsKKwlwYWxtdDVfa2V5c19pbml0KCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUEFMTVQ1LCAiUGFsbSBUdW5nc3RlbnxUNSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKaW5kZXggM2QyODRmZi4uOTNjMTFhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHguaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ3Bpb192YnVzLmg+CiAKQEAgLTI3MSw5ICsyNzEsOSBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogV005N3h4IGJhdHRlcnkKKyAqIFdNOTd4eCBhdWRpbywgYmF0dGVyeQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyB3bTk3eHhfYmF0dF9wZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfcGRhdGEgcGFsbXRlMl9iYXR0X3BkYXRhID0gewogCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAogCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAogCS5jaGFyZ2VfZ3Bpbwk9IC0xLApAQCAtMjg3LDkgKzI4NywxNCBAQAogCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFTb0MgYXVkaW8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHdtOTd4eF9wZGF0YSBwYWxtdGUyX3dtOTd4eF9wZGF0YSA9IHsKKwkuYmF0dF9wZGF0YQk9ICZwYWxtdGUyX2JhdHRfcGRhdGEsCit9OworCitzdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IHBhbG10ZTJfYWM5N19wZGF0YSA9IHsKKwkuY29kZWNfcGRhdGEJPSB7ICZwYWxtdGUyX3dtOTd4eF9wZGF0YSwgfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGFsbTI3eF9hc29jX2luZm8gcGFsbXRlMl9hc29jX3BkYXRhID0gewogCS5qYWNrX2dwaW8JPSBHUElPX05SX1BBTE1URTJfRUFSUEhPTkVfREVURUNULAogfTsKQEAgLTM2MSw5ICszNjYsOCBAQAogCXNldF9weGFfZmJfaW5mbygmcGFsbXRlMl9sY2Rfc2NyZWVuKTsKIAlweGFfc2V0X21jaV9pbmZvKCZwYWxtdGUyX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlwYWxtdGUyX3VkY19pbml0KCk7Ci0JcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisJcHhhX3NldF9hYzk3X2luZm8oJnBhbG10ZTJfYWM5N19wZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJnBhbG10ZTJfZmljcF9wbGF0Zm9ybV9kYXRhKTsKLQl3bTk3eHhfYmF0X3NldF9wZGF0YSgmd205N3h4X2JhdHRfcGRhdGEpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwppbmRleCAzZDBjOWNjLi41MmRlZmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wZGFfcG93ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3dtOTd4eF9iYXR0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3BhbG1hc29jLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG0yN3guaD4KIAogI2luY2x1ZGUgPHNvdW5kL3B4YTJ4eC1saWIuaD4KIApAQCAtMTYwLDMxICsxNjAsOSBAQAogI2VuZGlmIC8qIENPTkZJR19NQUNIX0NFTlRSTyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19NQUNIX1RSRU82ODAKLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgdHJlbzY4MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1RSRU9fU0RfREVURUNUX04sCi0JLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFksCi0JLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLAotfTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDSF9UUkVPNjgwICovCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9DRU5UUk8KLXN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY2VudHJvX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfVFJFT19TRF9ERVRFQ1RfTiwKLQkuZ3Bpb19jYXJkX3JvCQk9IC0xLAotCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfQ0VOVFJPX1NEX1BPV0VSLAotCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCi19OwotI2VuZGlmIC8qIENPTkZJR19NQUNIX0NFTlRSTyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGtleWJvYXJkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19NQUNIX1RSRU82ODAKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eF9NT0RVTEUpCiBzdGF0aWMgdW5zaWduZWQgaW50IHRyZW82ODBfbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0Y4KSwJCS8qIFJlZC9PZmYvUG93ZXIgKi8KIAlLRVkoMCwgMSwgS0VZX0xFRlQpLApAQCAtMjQ0LDE5ICsyMjIsNiBAQAogCUtFWSg3LCA1LCBLRVlfSSksCiB9OwogCi1zdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSB0cmVvNjgwX2tleXBhZF9wbGF0Zm9ybV9kYXRhID0gewotCS5tYXRyaXhfa2V5X3Jvd3MJPSA4LAotCS5tYXRyaXhfa2V5X2NvbHMJPSA3LAotCS5tYXRyaXhfa2V5X21hcAkJPSB0cmVvNjgwX21hdHJpeF9rZXlzLAotCS5tYXRyaXhfa2V5X21hcF9zaXplCT0gQVJSQVlfU0laRSh0cmVvNjgwX21hdHJpeF9rZXlzKSwKLQkuZGlyZWN0X2tleV9tYXAJCT0geyBLRVlfQ09OTkVDVCB9LAotCS5kaXJlY3Rfa2V5X251bQkJPSAxLAotCi0JLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCi19OwotI2VuZGlmIC8qIENPTkZJR19NQUNIX1RSRU82ODAgKi8KLQotI2lmZGVmIENPTkZJR19NQUNIX0NFTlRSTwogc3RhdGljIHVuc2lnbmVkIGludCBjZW50cm9fbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0Y5KSwJCS8qIEhvbWUgKi8KIAlLRVkoMCwgMSwgS0VZX0xFRlQpLApAQCAtMzE2LDE1NyArMjgxLDUwIEBACiAJS0VZKDcsIDUsIEtFWV9JKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGNlbnRyb19rZXlwYWRfcGxhdGZvcm1fZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHRyZW82ODBfa2V5cGFkX3BkYXRhID0gewogCS5tYXRyaXhfa2V5X3Jvd3MJPSA4LAogCS5tYXRyaXhfa2V5X2NvbHMJPSA3LAotCS5tYXRyaXhfa2V5X21hcAkJPSBjZW50cm9fbWF0cml4X2tleXMsCi0JLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKGNlbnRyb19tYXRyaXhfa2V5cyksCisJLm1hdHJpeF9rZXlfbWFwCQk9IHRyZW82ODBfbWF0cml4X2tleXMsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKHRyZW82ODBfbWF0cml4X2tleXMpLAogCS5kaXJlY3Rfa2V5X21hcAkJPSB7IEtFWV9DT05ORUNUIH0sCiAJLmRpcmVjdF9rZXlfbnVtCQk9IDEsCiAKIAkuZGVib3VuY2VfaW50ZXJ2YWwJPSAzMCwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01BQ0hfQ0VOVFJPICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFTb0MgYXVkaW8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBweGEyeHhfYXVkaW9fb3BzX3QgdHJlb19hYzk3X3BkYXRhID0gewotCS5yZXNldF9ncGlvCT0gOTUsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBCYWNrbGlnaHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHRyZW9fYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19pbml0IHBhbG10cmVvX2twY19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqZGF0YSA9ICZ0cmVvNjgwX2tleXBhZF9wZGF0YTsKIAotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU9fQkxfUE9XRVIsICJCTCBQT1dFUiIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU9fQkxfUE9XRVIsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMjsKKwlpZiAobWFjaGluZV9pc19jZW50cm8oKSkgeworCQlkYXRhLT5tYXRyaXhfa2V5X21hcCA9IGNlbnRyb19tYXRyaXhfa2V5czsKKwkJZGF0YS0+bWF0cml4X2tleV9tYXBfc2l6ZSA9IEFSUkFZX1NJWkUoY2VudHJvX21hdHJpeF9rZXlzKTsKKwl9CiAKLQlyZXR1cm4gMDsKLQotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPX0JMX1BPV0VSKTsKLWVycjoKLQlyZXR1cm4gcmV0OworCXB4YV9zZXRfa2V5cGFkX2luZm8oJnRyZW82ODBfa2V5cGFkX3BkYXRhKTsKIH0KLQotc3RhdGljIGludCB0cmVvX2JhY2tsaWdodF9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgYnJpZ2h0bmVzcykKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU9fQkxfUE9XRVIsIGJyaWdodG5lc3MpOwotCXJldHVybiBUUkVPX01BWF9JTlRFTlNJVFkgLSBicmlnaHRuZXNzOwotfTsKLQotc3RhdGljIHZvaWQgdHJlb19iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFT19CTF9QT1dFUik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHRyZW9fYmFja2xpZ2h0X2RhdGEgPSB7Ci0JLnB3bV9pZAkJPSAwLAotCS5tYXhfYnJpZ2h0bmVzcwk9IFRSRU9fTUFYX0lOVEVOU0lUWSwKLQkuZGZ0X2JyaWdodG5lc3MJPSBUUkVPX0RFRkFVTFRfSU5URU5TSVRZLAotCS5wd21fcGVyaW9kX25zCT0gVFJFT19QRVJJT0RfTlMsCi0JLmluaXQJCT0gdHJlb19iYWNrbGlnaHRfaW5pdCwKLQkubm90aWZ5CQk9IHRyZW9fYmFja2xpZ2h0X25vdGlmeSwKLQkuZXhpdAkJPSB0cmVvX2JhY2tsaWdodF9leGl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHJlb19iYWNrbGlnaHQgPSB7Ci0JLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCi0JLmRldgk9IHsKLQkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdHJlb19iYWNrbGlnaHRfZGF0YSwKLQl9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSXJEQQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHRyZW9fZmljcF9pbmZvID0gewotCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1RSRU9fSVJfRU4sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVREMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHRyZW9fdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKLQkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfVFJFT19VU0JfREVURUNULAotCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAotCS5ncGlvX3B1bGx1cAkJPSBHUElPX05SX1RSRU9fVVNCX1BVTExVUCwKLX07Ci0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbXRyZW9fa3BjX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBVU0IgaG9zdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9UUkVPNjgwCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgdHJlbzY4MF9vaGNpX2luZm8gPSB7CiAJLnBvcnRfbW9kZSAgICA9IFBNTV9QRVJQT1JUX01PREUsCiAJLmZsYWdzICAgICAgICA9IEVOQUJMRV9QT1JUMSB8IEVOQUJMRV9QT1JUMywKIAkucG93ZXJfYnVkZ2V0ID0gMCwKIH07Ci0jZW5kaWYgLyogQ09ORklHX01BQ0hfVFJFTzY4MCAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQb3dlciBzdXBwbHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBvd2VyX3N1cHBseV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHJlb191aGNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPX1BPV0VSX0RFVEVDVCwgIkNBQkxFX1NUQVRFX0FDIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIxOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfVFJFT19QT1dFUl9ERVRFQ1QpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMjsKLQotCXJldHVybiAwOwotCi1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1RSRU9fUE9XRVJfREVURUNUKTsKLWVycjE6Ci0JcmV0dXJuIHJldDsKKwlpZiAobWFjaGluZV9pc190cmVvNjgwKCkpCisJCXB4YV9zZXRfb2hjaV9pbmZvKCZ0cmVvNjgwX29oY2lfaW5mbyk7CiB9Ci0KLXN0YXRpYyBpbnQgdHJlb19pc19hY19vbmxpbmUodm9pZCkKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9UUkVPX1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPX1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyBjaGFyICp0cmVvX3N1cHBsaWNhbnRzW10gPSB7Ci0JIm1haW4tYmF0dGVyeSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKLQkuaW5pdAkJID0gcG93ZXJfc3VwcGx5X2luaXQsCi0JLmlzX2FjX29ubGluZSAgICA9IHRyZW9faXNfYWNfb25saW5lLAotCS5leGl0CQkgPSBwb3dlcl9zdXBwbHlfZXhpdCwKLQkuc3VwcGxpZWRfdG8gICAgID0gdHJlb19zdXBwbGljYW50cywKLQkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRSh0cmVvX3N1cHBsaWNhbnRzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvd2VyX3N1cHBseSA9IHsKLQkubmFtZSA9ICJwZGEtcG93ZXIiLAotCS5pZCAgID0gLTEsCi0JLmRldiAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBvd2VyX3N1cHBseV9pbmZvLAotCX0sCi19OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdHJlb191aGNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFZpYnJhIGFuZCBMRURzCkBAIC00OTUsMTYgKzM1Myw2IEBACiAJLm51bV9sZWRzCT0gQVJSQVlfU0laRSh0cmVvNjgwX2dwaW9fbGVkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0cmVvNjgwX2xlZHMgPSB7Ci0JLm5hbWUgICA9ICJsZWRzLWdwaW8iLAotCS5pZCAgICAgPSAtMSwKLQkuZGV2ICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmdHJlbzY4MF9ncGlvX2xlZF9pbmZvLAotCX0KLX07Ci0jZW5kaWYgLyogQ09ORklHX01BQ0hfVFJFTzY4MCAqLwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ0VOVFJPCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNlbnRyb19ncGlvX2xlZHNbXSA9IHsKIAl7CiAJCS5uYW1lCQkJPSAiY2VudHJvOnZpYnJhOnZpYnJhIiwKQEAgLTUyOSwxNDUgKzM3Nyw2NyBAQAogCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoY2VudHJvX2dwaW9fbGVkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZW50cm9fbGVkcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10cmVvX2xlZHMgPSB7CiAJLm5hbWUgICA9ICJsZWRzLWdwaW8iLAogCS5pZCAgICAgPSAtMSwKIAkuZGV2ICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmY2VudHJvX2dwaW9fbGVkX2luZm8sCisJCS5wbGF0Zm9ybV9kYXRhICA9ICZ0cmVvNjgwX2dwaW9fbGVkX2luZm8sCiAJfQogfTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDSF9DRU5UUk8gKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnJhbWVidWZmZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgMzI0eDMyNCAqLwotc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gdHJlb19sY2RfbW9kZXNbXSA9IHsKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHJlb19sZWRzX2luaXQodm9pZCkKIHsKLQkucGl4Y2xvY2sJCT0gODY1MzgsCi0JLnhyZXMJCQk9IDMyMCwKLQkueXJlcwkJCT0gMzIwLAotCS5icHAJCQk9IDE2LAorCWlmIChtYWNoaW5lX2lzX2NlbnRybygpKQorCQlwYWxtdHJlb19sZWRzLmRldi5wbGF0Zm9ybV9kYXRhID0gJmNlbnRyb19ncGlvX2xlZF9pbmZvOwogCi0JLmxlZnRfbWFyZ2luCQk9IDIwLAotCS5yaWdodF9tYXJnaW4JCT0gOCwKLQkudXBwZXJfbWFyZ2luCQk9IDgsCi0JLmxvd2VyX21hcmdpbgkJPSA1LAotCi0JLmhzeW5jX2xlbgkJPSA0LAotCS52c3luY19sZW4JCT0gMSwKLX0sCi19OwotCi1zdGF0aWMgdm9pZCB0cmVvX2xjZF9wb3dlcihpbnQgb24sIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqaW5mbykKLXsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU9fQkxfUE9XRVIsIG9uKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG10cmVvX2xlZHMpOwogfQotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyB0cmVvX2xjZF9zY3JlZW4gPSB7Ci0JLm1vZGVzCQk9IHRyZW9fbGNkX21vZGVzLAotCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHRyZW9fbGNkX21vZGVzKSwKLQkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUG93ZXIgbWFuYWdlbWVudCAtIHN0YW5kYnkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBfX2luaXQgdHJlb19wbV9pbml0KHZvaWQpCi17Ci0Jc3RhdGljIHUzMiByZXN1bWVbXSA9IHsKLQkJMHhlM2EwMDEwMSwJLyogbW92CXIwLAkjMHg0MDAwMDAwMCAqLwotCQkweGUzODAwNjBmLAkvKiBvcnIJcjAsIHIwLCAjMHgwMGYwMDAwMCAqLwotCQkweGU1OTBmMDA4LAkvKiBsZHIJcGMsIFtyMCwgIzB4MDhdICovCi0JfTsKLQotCS8qIHRoaXMgaXMgd2hlcmUgdGhlIGJvb3Rsb2FkZXIganVtcHMgKi8KLQltZW1jcHkocGh5c190b192aXJ0KFRSRU9fU1RSX0JBU0UpLCByZXN1bWUsIHNpemVvZihyZXN1bWUpKTsKLX0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcGFsbXRyZW9fbGVkc19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTWFjaGluZSBpbml0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRyZW9fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnRyZW9fYmFja2xpZ2h0LAotCSZwb3dlcl9zdXBwbHksCi19OwotCi0jaWZkZWYgQ09ORklHX01BQ0hfVFJFTzY4MAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRyZW82ODBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnRyZW82ODBfbGVkcywKLX07Ci0jZW5kaWYgLyogQ09ORklHX01BQ0hfVFJFTzY4MCAqLwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ0VOVFJPCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY2VudHJvX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZjZW50cm9fbGVkcywKLX07Ci0jZW5kaWYgLyogQ09ORklHX01BQ0hfQ0VOVFJPICovCi0KLS8qIHNldHVwIHVkYyBHUElPcyBpbml0aWFsIHN0YXRlICovCi1zdGF0aWMgdm9pZCBfX2luaXQgdHJlb191ZGNfaW5pdCh2b2lkKQotewotCWlmICghZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFT19VU0JfUFVMTFVQLCAiVURDIFZidXMiKSkgewotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPX1VTQl9QVUxMVVAsIDEpOwotCQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPX1VTQl9QVUxMVVApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHRyZW9fbGNkX3Bvd2VyX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfVFJFT19MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiVHJlbzY4MDogTENEIHBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU9fTENEX1BPV0VSLCAwKTsKLQlpZiAocmV0KSB7Ci0JCXByX2VycigiVHJlbzY4MDogc2V0dGluZyBMQ0QgcG93ZXIgR1BJTyBkaXJlY3Rpb24gZmFpbGVkIVxuIik7Ci0JCWdwaW9fZnJlZShHUElPX05SX1RSRU9fTENEX1BPV0VSKTsKLQkJcmV0dXJuOwotCX0KLQotCXRyZW9fbGNkX3NjcmVlbi5weGFmYl9sY2RfcG93ZXIgPSB0cmVvX2xjZF9wb3dlcjsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHRyZW9fcmVzZXJ2ZSh2b2lkKQogewogCW1lbWJsb2NrX3Jlc2VydmUoMHhhMDAwMDAwMCwgMHgxMDAwKTsKIAltZW1ibG9ja19yZXNlcnZlKDB4YTIwMDAwMDAsIDB4MTAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB0cmVvX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtcGhvbmVfY29tbW9uX2luaXQodm9pZCkKIHsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh0cmVvX3Bpbl9jb25maWcpKTsKIAlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKLQotCXRyZW9fcG1faW5pdCgpOwotCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRyZW9fcGluX2NvbmZpZykpOwotCXRyZW9fbGNkX3Bvd2VyX2luaXQoKTsKLQlzZXRfcHhhX2ZiX2luZm8oJnRyZW9fbGNkX3NjcmVlbik7Ci0JdHJlb191ZGNfaW5pdCgpOwotCXB4YV9zZXRfdWRjX2luZm8oJnRyZW9fdWRjX2luZm8pOwotCXB4YV9zZXRfYWM5N19pbmZvKCZ0cmVvX2FjOTdfcGRhdGEpOwotCXB4YV9zZXRfZmljcF9pbmZvKCZ0cmVvX2ZpY3BfaW5mbyk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRSh0cmVvX2RldmljZXMpKTsKKwlwYWxtMjd4X3BtX2luaXQoVFJFT19TVFJfQkFTRSk7CisJcGFsbTI3eF9sY2RfaW5pdChHUElPX05SX1RSRU9fQkxfUE9XRVIsICZwYWxtXzMyMHgzMjBfbmV3X2xjZF9tb2RlKTsKKwlwYWxtMjd4X3VkY19pbml0KEdQSU9fTlJfVFJFT19VU0JfREVURUNULCBHUElPX05SX1RSRU9fVVNCX1BVTExVUCwgMSk7CisJcGFsbTI3eF9pcmRhX2luaXQoR1BJT19OUl9UUkVPX0lSX0VOKTsKKwlwYWxtMjd4X2FjOTdfaW5pdCgtMSwgLTEsIC0xLCA5NSk7CisJcGFsbTI3eF9wd21faW5pdChHUElPX05SX1RSRU9fQkxfUE9XRVIsIC0xKTsKKwlwYWxtMjd4X3Bvd2VyX2luaXQoR1BJT19OUl9UUkVPX1BPV0VSX0RFVEVDVCwgLTEpOworCXBhbG0yN3hfcG1pY19pbml0KCk7CisJcGFsbXRyZW9fa3BjX2luaXQoKTsKKwlwYWxtdHJlb191aGNfaW5pdCgpOworCXBhbG10cmVvX2xlZHNfaW5pdCgpOwogfQogCi0jaWZkZWYgQ09ORklHX01BQ0hfVFJFTzY4MAogc3RhdGljIHZvaWQgX19pbml0IHRyZW82ODBfaW5pdCh2b2lkKQogewotCXRyZW9faW5pdCgpOwogCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHRyZW82ODBfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfbWNpX2luZm8oJnRyZW82ODBfbWNpX3BsYXRmb3JtX2RhdGEpOwotCXB4YV9zZXRfa2V5cGFkX2luZm8oJnRyZW82ODBfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOwotCXB4YV9zZXRfb2hjaV9pbmZvKCZ0cmVvNjgwX29oY2lfaW5mbyk7CisJcGFsbXBob25lX2NvbW1vbl9pbml0KCk7CisJcGFsbTI3eF9tbWNfaW5pdChHUElPX05SX1RSRU9fU0RfREVURUNUX04sIEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSwKKwkJCUdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUiwgMCk7Cit9CiAKLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRSh0cmVvNjgwX2RldmljZXMpKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBjZW50cm9faW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNlbnRybzY4NV9waW5fY29uZmlnKSk7CisJcGFsbXBob25lX2NvbW1vbl9pbml0KCk7CisJcGFsbTI3eF9tbWNfaW5pdChHUElPX05SX1RSRU9fU0RfREVURUNUX04sIC0xLAorCQkJR1BJT19OUl9DRU5UUk9fU0RfUE9XRVIsIDEpOwogfQogCiBNQUNISU5FX1NUQVJUKFRSRU82ODAsICJQYWxtIFRyZW8gNjgwIikKQEAgLTY4MCwxOSArNDUwLDYgQEAKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUgICA9IHRyZW82ODBfaW5pdCwKIE1BQ0hJTkVfRU5ECi0jZW5kaWYgLyogQ09ORklHX01BQ0hfVFJFTzY4MCAqLwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQ0VOVFJPCi1zdGF0aWMgdm9pZCBfX2luaXQgY2VudHJvX2luaXQodm9pZCkKLXsKLQl0cmVvX2luaXQoKTsKLQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjZW50cm82ODVfcGluX2NvbmZpZykpOwotCXB4YV9zZXRfbWNpX2luZm8oJmNlbnRyb19tY2lfcGxhdGZvcm1fZGF0YSk7Ci0KLQlweGFfc2V0X2tleXBhZF9pbmZvKCZjZW50cm9fa2V5cGFkX3BsYXRmb3JtX2RhdGEpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoY2VudHJvX2RldmljZXMpKTsKLX0KIAogTUFDSElORV9TVEFSVChDRU5UUk8sICJQYWxtIENlbnRybyA2ODUiKQogCS5waHlzX2lvICAgICAgICA9IFRSRU9fUEhZU19JT19TVEFSVCwKQEAgLTcwMiw2ICs0NTksNSBAQAogCS5yZXNlcnZlCT0gdHJlb19yZXNlcnZlLAogCS5pbml0X2lycSAgICAgICA9IHB4YTI3eF9pbml0X2lycSwKIAkudGltZXIgICAgICAgICAgPSAmcHhhX3RpbWVyLAotICAgICAgIC5pbml0X21hY2hpbmUgICA9IGNlbnRyb19pbml0LAorCS5pbml0X21hY2hpbmUJPSBjZW50cm9faW5pdCwKIE1BQ0hJTkVfRU5ECi0jZW5kaWYgLyogQ09ORklHX01BQ0hfQ0VOVFJPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCmluZGV4IGVjYzFhNDAuLjE0NGRjMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dtOTd4eC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbTI3eC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTEyOSw2ICsxMzAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTk9SIEZsYXNoCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbXR4X3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJGbGFzaCIsCkBAIC0xNjIsMjAgKzE2NCwxOCBAQAogCX0sCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdHhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04sCi0JLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSwKLQkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwKLQkuZGV0ZWN0X2RlbGF5X21zCT0gMjAwLAotfTsKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfbm9yX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG10eF9mbGFzaCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10eF9ub3JfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdQSU8ga2V5Ym9hcmQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQogc3RhdGljIHVuc2lnbmVkIGludCBwYWxtdHhfbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1BPV0VSKSwKIAlLRVkoMCwgMSwgS0VZX0YxKSwKQEAgLTIwMSw5ICsyMDEsMTggQEAKIAkuZGVib3VuY2VfaW50ZXJ2YWwJPSAzMCwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfa3BjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtdHhfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdHhfa3BjX2luaXQodm9pZCkge30KKyNlbmRpZgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHUElPIGtleXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gcGFsbXR4X3B4YV9idXR0b25zW10gPSB7CiAJe0tFWV9GOCwgR1BJT19OUl9QQUxNVFhfSE9UU1lOQ19CVVRUT05fTiwgMSwgIkhvdFN5bmMgQnV0dG9uIiB9LAogfTsKQEAgLTIyMSwyMDggKzIzMCwxOCBAQAogCX0sCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBCYWNrbGlnaHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10eF9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X2tleXNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfQkxfUE9XRVIsICJCTCBQT1dFUiIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9CTF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9MQ0RfUE9XRVIsICJMQ0QgUE9XRVIiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRYX0xDRF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIzOwotCi0JcmV0dXJuIDA7Ci1lcnIzOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9MQ0RfUE9XRVIpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfQkxfUE9XRVIpOwotZXJyOgotCXJldHVybiByZXQ7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtdHhfcHhhX2tleXMpOwogfQotCi1zdGF0aWMgaW50IHBhbG10eF9iYWNrbGlnaHRfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfQkxfUE9XRVIsIGJyaWdodG5lc3MpOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7Ci0JcmV0dXJuIGJyaWdodG5lc3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0JMX1BPV0VSKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfTENEX1BPV0VSKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbXR4X2JhY2tsaWdodF9kYXRhID0gewotCS5wd21faWQJCT0gMCwKLQkubWF4X2JyaWdodG5lc3MJPSBQQUxNVFhfTUFYX0lOVEVOU0lUWSwKLQkuZGZ0X2JyaWdodG5lc3MJPSBQQUxNVFhfTUFYX0lOVEVOU0lUWSwKLQkucHdtX3BlcmlvZF9ucwk9IFBBTE1UWF9QRVJJT0RfTlMsCi0JLmluaXQJCT0gcGFsbXR4X2JhY2tsaWdodF9pbml0LAotCS5ub3RpZnkJCT0gcGFsbXR4X2JhY2tsaWdodF9ub3RpZnksCi0JLmV4aXQJCT0gcGFsbXR4X2JhY2tsaWdodF9leGl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR4X2JhY2tsaWdodCA9IHsKLQkubmFtZQk9ICJwd20tYmFja2xpZ2h0IiwKLQkuZGV2CT0gewotCQkucGFyZW50CQk9ICZweGEyN3hfZGV2aWNlX3B3bTAuZGV2LAotCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdHhfYmFja2xpZ2h0X2RhdGEsCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElyREEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdHhfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVURDCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBncGlvX3ZidXNfbWFjaF9pbmZvIHBhbG10eF91ZGNfaW5mbyA9IHsKLQkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVRYX1VTQl9ERVRFQ1RfTiwKLQkuZ3Bpb192YnVzX2ludmVydGVkCT0gMSwKLQkuZ3Bpb19wdWxsdXAJCT0gR1BJT19OUl9QQUxNVFhfVVNCX1BVTExVUCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10eF9ncGlvX3ZidXMgPSB7Ci0JLm5hbWUJPSAiZ3Bpby12YnVzIiwKLQkuaWQJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtdHhfdWRjX2luZm8sCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBvd2VyIHN1cHBseQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjE7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNUKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjI7Ci0KLQlyZXR1cm4gMDsKLQotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNUKTsKLWVycjE6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwYWxtdHhfaXNfYWNfb25saW5lKHZvaWQpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNUKTsKLX0KLQotc3RhdGljIGNoYXIgKnBhbG10eF9zdXBwbGljYW50c1tdID0gewotCSJtYWluLWJhdHRlcnkiLAotfTsKLQotc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7Ci0JLmluaXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9pbml0LAotCS5pc19hY19vbmxpbmUgICAgPSBwYWxtdHhfaXNfYWNfb25saW5lLAotCS5leGl0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfZXhpdCwKLQkuc3VwcGxpZWRfdG8gICAgID0gcGFsbXR4X3N1cHBsaWNhbnRzLAotCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHBhbG10eF9zdXBwbGljYW50cyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb3dlcl9zdXBwbHkgPSB7Ci0JLm5hbWUgPSAicGRhLXBvd2VyIiwKLQkuaWQgICA9IC0xLAotCS5kZXYgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZwb3dlcl9zdXBwbHlfaW5mbywKLQl9LAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogV005N3h4IGJhdHRlcnkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gd205N3h4X2JhdHRfcGRhdGEgPSB7Ci0JLmJhdHRfYXV4CT0gV005N1hYX0FVWF9JRDMsCi0JLnRlbXBfYXV4CT0gV005N1hYX0FVWF9JRDIsCi0JLmNoYXJnZV9ncGlvCT0gLTEsCi0JLm1heF92b2x0YWdlCT0gUEFMTVRYX0JBVF9NQVhfVk9MVEFHRSwKLQkubWluX3ZvbHRhZ2UJPSBQQUxNVFhfQkFUX01JTl9WT0xUQUdFLAotCS5iYXR0X211bHQJPSAxMDAwLAotCS5iYXR0X2Rpdgk9IDQxNCwKLQkudGVtcF9tdWx0CT0gMSwKLQkudGVtcF9kaXYJPSAxLAotCS5iYXR0X3RlY2gJPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAotCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFTb0MgYXVkaW8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBhbG0yN3hfYXNvY19pbmZvIHBhbG10eF9hc29jX3BkYXRhID0gewotCS5qYWNrX2dwaW8JPSBHUElPX05SX1BBTE1UWF9FQVJQSE9ORV9ERVRFQ1QsCi19OwotCi1zdGF0aWMgcHhhMnh4X2F1ZGlvX29wc190IHBhbG10eF9hYzk3X3BkYXRhID0gewotCS5yZXNldF9ncGlvCT0gOTUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdHhfYXNvYyA9IHsKLQkubmFtZSA9ICJwYWxtMjd4LWFzb2MiLAotCS5pZCAgID0gLTEsCi0JLmRldiAgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10eF9hc29jX3BkYXRhLAotCX0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBGcmFtZWJ1ZmZlcgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHBhbG10eF9sY2RfbW9kZXNbXSA9IHsKLXsKLQkucGl4Y2xvY2sJPSA1NzY5MiwKLQkueHJlcwkJPSAzMjAsCi0JLnlyZXMJCT0gNDgwLAotCS5icHAJCT0gMTYsCi0KLQkubGVmdF9tYXJnaW4JPSAzMiwKLQkucmlnaHRfbWFyZ2luCT0gMSwKLQkudXBwZXJfbWFyZ2luCT0gNywKLQkubG93ZXJfbWFyZ2luCT0gMSwKLQotCS5oc3luY19sZW4JPSA0LAotCS52c3luY19sZW4JPSAxLAotfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBhbG10eF9sY2Rfc2NyZWVuID0gewotCS5tb2RlcwkJPSBwYWxtdHhfbGNkX21vZGVzLAotCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKHBhbG10eF9sY2RfbW9kZXMpLAotCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCi19OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtdHhfa2V5c19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTkFORCBGbGFzaAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19NVERfTkFORF9HUElPX01PRFVMRSkKIHN0YXRpYyB2b2lkIHBhbG10eF9uYW5kX2NtZF9jdGwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCiAJCQkJIHVuc2lnbmVkIGludCBjdHJsKQogewpAQCAtNDgyLDM2ICszMDEsMTcgQEAKIAl9CiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQb3dlciBtYW5hZ2VtZW50IC0gc3RhbmRieQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYWxtdHhfcG1faW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF9uYW5kX2luaXQodm9pZCkKIHsKLQlzdGF0aWMgdTMyIHJlc3VtZVtdID0gewotCQkweGUzYTAwMTAxLAkvKiBtb3YJcjAsCSMweDQwMDAwMDAwICovCi0JCTB4ZTM4MDA2MGYsCS8qIG9ycglyMCwgcjAsICMweDAwZjAwMDAwICovCi0JCTB4ZTU5MGYwMDgsCS8qIGxkcglwYywgW3IwLCAjMHgwOF0gKi8KLQl9OwotCi0JLyogY29weSB0aGUgYm9vdGxvYWRlciAqLwotCW1lbWNweShwaHlzX3RvX3ZpcnQoUEFMTVRYX1NUUl9CQVNFKSwgcmVzdW1lLCBzaXplb2YocmVzdW1lKSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwYWxtdHhfbmFuZCk7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHBhbG10eF9uYW5kX2luaXQodm9pZCkge30KKyNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWNoaW5lIGluaXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCi0JJnBhbG10eF9weGFfa2V5cywKLSNlbmRpZgotCSZwYWxtdHhfYmFja2xpZ2h0LAotCSZwb3dlcl9zdXBwbHksCi0JJnBhbG10eF9hc29jLAotCSZwYWxtdHhfZ3Bpb192YnVzLAotCSZwYWxtdHhfZmxhc2gsCi0JJnBhbG10eF9uYW5kLAotfTsKLQogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwYWxtdHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiB7CiAJLnZpcnR1YWwJPSBQQUxNVFhfUENNQ0lBX1ZJUlQsCkBAIC01MzcsMzQgKzMzNywyOSBAQAogCWlvdGFibGVfaW5pdChwYWxtdHhfaW9fZGVzYywgQVJSQVlfU0laRShwYWxtdHhfaW9fZGVzYykpOwogfQogCi0vKiBzZXR1cCB1ZGMgR1BJT3MgaW5pdGlhbCBzdGF0ZSAqLwotc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF91ZGNfaW5pdCh2b2lkKQotewotCWlmICghZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX1VTQl9QVUxMVVAsICJVREMgVmJ1cyIpKSB7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UWF9VU0JfUFVMTFVQLCAxKTsKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1VTQl9QVUxMVVApOwotCX0KLX0KLQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdHhfcGluX2NvbmZpZykpOwotCiAJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CiAKLQlwYWxtdHhfcG1faW5pdCgpOwotCXNldF9weGFfZmJfaW5mbygmcGFsbXR4X2xjZF9zY3JlZW4pOwotCXB4YV9zZXRfbWNpX2luZm8oJnBhbG10eF9tY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcGFsbXR4X3VkY19pbml0KCk7Ci0JcHhhX3NldF9hYzk3X2luZm8oJnBhbG10eF9hYzk3X3BkYXRhKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXR4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9rZXlwYWRfaW5mbygmcGFsbXR4X2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKLQl3bTk3eHhfYmF0X3NldF9wZGF0YSgmd205N3h4X2JhdHRfcGRhdGEpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJcGFsbTI3eF9tbWNfaW5pdChHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiwgR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFksCisJCQlHUElPX05SX1BBTE1UWF9TRF9QT1dFUiwgMCk7CisJcGFsbTI3eF9wbV9pbml0KFBBTE1UWF9TVFJfQkFTRSk7CisJcGFsbTI3eF9sY2RfaW5pdCgtMSwgJnBhbG1fMzIweDQ4MF9sY2RfbW9kZSk7CisJcGFsbTI3eF91ZGNfaW5pdChHUElPX05SX1BBTE1UWF9VU0JfREVURUNUX04sCisJCQlHUElPX05SX1BBTE1UWF9VU0JfUFVMTFVQLCAxKTsKKwlwYWxtMjd4X2lyZGFfaW5pdChHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFKTsKKwlwYWxtMjd4X2FjOTdfaW5pdChQQUxNVFhfQkFUX01JTl9WT0xUQUdFLCBQQUxNVFhfQkFUX01BWF9WT0xUQUdFLAorCQkJR1BJT19OUl9QQUxNVFhfRUFSUEhPTkVfREVURUNULCA5NSk7CisJcGFsbTI3eF9wd21faW5pdChHUElPX05SX1BBTE1UWF9CTF9QT1dFUiwgR1BJT19OUl9QQUxNVFhfTENEX1BPV0VSKTsKKwlwYWxtMjd4X3Bvd2VyX2luaXQoR1BJT19OUl9QQUxNVFhfUE9XRVJfREVURUNULCAtMSk7CisJcGFsbTI3eF9wbWljX2luaXQoKTsKKwlwYWxtdHhfa3BjX2luaXQoKTsKKwlwYWxtdHhfa2V5c19pbml0KCk7CisJcGFsbXR4X25vcl9pbml0KCk7CisJcGFsbXR4X25hbmRfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFBBTE1UWCwgIlBhbG0gVHxYIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCAzYTc5MjVjLi44N2U0YjEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3dtOTd4eC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KIApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9wYWxtYXNvYy5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbTI3eC5oPgogCiAjaW5jbHVkZSA8bWFjaC9wbS5oPgogCkBAIC0xMDksMjEgKzExMCw5IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogU0RfUE9XRVIgaXMgbm90IGFjdHVhbGx5IHBvd2VyLCBidXQgaXQgaXMgbW9yZSBsaWtlIGNoaXAKLSAqIHNlbGVjdCwgaS5lLiBpdCBpcyBpbnZlcnRlZCAqLwotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtejcyX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKLQkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiwKLQkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9STywKLQkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwKLQkuZ3Bpb19wb3dlcl9pbnZlcnQJPSAxLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogR1BJTyBrZXlib2FyZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3gpIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1BYQTI3eF9NT0RVTEUpCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhbG16NzJfbWF0cml4X2tleXNbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1BPV0VSKSwKIAlLRVkoMCwgMSwgS0VZX0YxKSwKQEAgLTE0OSw3NyArMTM4LDE4IEBACiAJLmRlYm91bmNlX2ludGVydmFsCT0gMzAsCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBCYWNrbGlnaHQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG16NzJfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19pbml0IHBhbG16NzJfa3BjX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVo3Ml9CTF9QT1dFUiwgIkJMIFBPV0VSIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9CTF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1aNzJfTENEX1BPV0VSLCAwKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjM7Ci0KLQlyZXR1cm4gMDsKLWVycjM6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9MQ0RfUE9XRVIpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX0JMX1BPV0VSKTsKLWVycjoKLQlyZXR1cm4gcmV0OworCXB4YV9zZXRfa2V5cGFkX2luZm8oJnBhbG16NzJfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOwogfQotCi1zdGF0aWMgaW50IHBhbG16NzJfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVo3Ml9CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX0xDRF9QT1dFUiwgYnJpZ2h0bmVzcyk7Ci0JcmV0dXJuIGJyaWdodG5lc3M7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfQkxfUE9XRVIpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfTENEX1BPV0VSKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9wd21fYmFja2xpZ2h0X2RhdGEgcGFsbXo3Ml9iYWNrbGlnaHRfZGF0YSA9IHsKLQkucHdtX2lkCQk9IDAsCi0JLm1heF9icmlnaHRuZXNzCT0gUEFMTVo3Ml9NQVhfSU5URU5TSVRZLAotCS5kZnRfYnJpZ2h0bmVzcwk9IFBBTE1aNzJfTUFYX0lOVEVOU0lUWSwKLQkucHdtX3BlcmlvZF9ucwk9IFBBTE1aNzJfUEVSSU9EX05TLAotCS5pbml0CQk9IHBhbG16NzJfYmFja2xpZ2h0X2luaXQsCi0JLm5vdGlmeQkJPSBwYWxtejcyX2JhY2tsaWdodF9ub3RpZnksCi0JLmV4aXQJCT0gcGFsbXo3Ml9iYWNrbGlnaHRfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG16NzJfYmFja2xpZ2h0ID0gewotCS5uYW1lCT0gInB3bS1iYWNrbGlnaHQiLAotCS5kZXYJPSB7Ci0JCS5wYXJlbnQJCT0gJnB4YTI3eF9kZXZpY2VfcHdtMC5kZXYsCi0JCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG16NzJfYmFja2xpZ2h0X2RhdGEsCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIElyREEKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtejcyX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCi19OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtejcyX2twY19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTEVEcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0gewogCXsKIAkJLm5hbWUJCQk9ICJwYWxtejcyOmdyZWVuOmxlZCIsCkBAIC0yNDEsMTM5ICsxNzEsMTMgQEAKIAl9CiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBVREMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gcGFsbXo3Ml91ZGNfaW5mbyA9IHsKLQkuZ3Bpb192YnVzCQk9IEdQSU9fTlJfUEFMTVo3Ml9VU0JfREVURUNUX04sCi0JLmdwaW9fcHVsbHVwCQk9IEdQSU9fTlJfUEFMTVo3Ml9VU0JfUFVMTFVQLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXo3Ml9ncGlvX3ZidXMgPSB7Ci0JLm5hbWUJPSAiZ3Bpby12YnVzIiwKLQkuaWQJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZwYWxtejcyX3VkY19pbmZvLAotCX0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBQb3dlciBzdXBwbHkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBvd2VyX3N1cHBseV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtejcyX2xlZHNfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1BPV0VSX0RFVEVDVCwgIkNBQkxFX1NUQVRFX0FDIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIxOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVo3Ml9QT1dFUl9ERVRFQ1QpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMjsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1aNzJfVVNCX0RFVEVDVF9OLCAiQ0FCTEVfU1RBVEVfVVNCIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIyOwotCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVo3Ml9VU0JfREVURUNUX04pOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMzsKLQotCXJldHVybiAwOwotZXJyMzoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1VTQl9ERVRFQ1RfTik7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfUE9XRVJfREVURUNUKTsKLWVycjE6Ci0JcmV0dXJuIHJldDsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBhbG16NzJfbGVkcyk7CiB9Ci0KLXN0YXRpYyBpbnQgcGFsbXo3Ml9pc19hY19vbmxpbmUodm9pZCkKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXo3Ml9pc191c2Jfb25saW5lKHZvaWQpCi17Ci0JcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1aNzJfVVNCX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcG93ZXJfc3VwcGx5X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfVVNCX0RFVEVDVF9OKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1BPV0VSX0RFVEVDVCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpwYWxtejcyX3N1cHBsaWNhbnRzW10gPSB7Ci0JIm1haW4tYmF0dGVyeSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBkYV9wb3dlcl9wZGF0YSBwb3dlcl9zdXBwbHlfaW5mbyA9IHsKLQkuaW5pdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2luaXQsCi0JLmlzX2FjX29ubGluZSAgICA9IHBhbG16NzJfaXNfYWNfb25saW5lLAotCS5pc191c2Jfb25saW5lICAgPSBwYWxtejcyX2lzX3VzYl9vbmxpbmUsCi0JLmV4aXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9leGl0LAotCS5zdXBwbGllZF90byAgICAgPSBwYWxtejcyX3N1cHBsaWNhbnRzLAotCS5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKHBhbG16NzJfc3VwcGxpY2FudHMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0gewotCS5uYW1lID0gInBkYS1wb3dlciIsCi0JLmlkICAgPSAtMSwKLQkuZGV2ICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCi0JfSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFdNOTd4eCBiYXR0ZXJ5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0gewotCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAotCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAotCS5jaGFyZ2VfZ3Bpbwk9IC0xLAotCS5tYXhfdm9sdGFnZQk9IFBBTE1aNzJfQkFUX01BWF9WT0xUQUdFLAotCS5taW5fdm9sdGFnZQk9IFBBTE1aNzJfQkFUX01JTl9WT0xUQUdFLAotCS5iYXR0X211bHQJPSAxMDAwLAotCS5iYXR0X2Rpdgk9IDQxNCwKLQkudGVtcF9tdWx0CT0gMSwKLQkudGVtcF9kaXYJPSAxLAotCS5iYXR0X3RlY2gJPSBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9MSVBPLAotCS5iYXR0X25hbWUJPSAibWFpbi1iYXR0IiwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFTb0MgYXVkaW8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtejcyX2Fzb2MgPSB7Ci0JLm5hbWUgPSAicGFsbTI3eC1hc29jIiwKLQkuaWQgICA9IC0xLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRnJhbWVidWZmZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBwYWxtejcyX2xjZF9tb2Rlc1tdID0gewotewotCS5waXhjbG9jawk9IDExNTM4NCwKLQkueHJlcwkJPSAzMjAsCi0JLnlyZXMJCT0gMzIwLAotCS5icHAJCT0gMTYsCi0KLQkubGVmdF9tYXJnaW4JPSAyNywKLQkucmlnaHRfbWFyZ2luCT0gNywKLQkudXBwZXJfbWFyZ2luCT0gNywKLQkubG93ZXJfbWFyZ2luCT0gOCwKLQotCS5oc3luY19sZW4JPSA2LAotCS52c3luY19sZW4JPSAxLAotfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHBhbG16NzJfbGNkX3NjcmVlbiA9IHsKLQkubW9kZXMJCT0gcGFsbXo3Ml9sY2RfbW9kZXMsCi0JLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUocGFsbXo3Ml9sY2RfbW9kZXMpLAotCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfUENMS19FREdFX0ZBTEwsCi19OworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWxtejcyX2xlZHNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUE0KIApAQCAtNDUyLDQwICsyNTYsMjYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY2hpbmUgaW5pdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmcGFsbXo3Ml9iYWNrbGlnaHQsCi0JJnBhbG16NzJfbGVkcywKLQkmcGFsbXo3Ml9hc29jLAotCSZwb3dlcl9zdXBwbHksCi0JJnBhbG16NzJfZ3Bpb192YnVzLAotfTsKLQotLyogc2V0dXAgdWRjIEdQSU9zIGluaXRpYWwgc3RhdGUgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBwYWxtejcyX3VkY19pbml0KHZvaWQpCi17Ci0JaWYgKCFncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNWjcyX1VTQl9QVUxMVVAsICJVU0IgUHVsbHVwIikpIHsKLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9VU0JfUFVMTFVQLCAwKTsKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9VU0JfUFVMTFVQKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwYWxtejcyX2luaXQodm9pZCkKIHsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtejcyX3Bpbl9jb25maWcpKTsKLQogCXB4YV9zZXRfZmZ1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9idHVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X3N0dWFydF9pbmZvKE5VTEwpOwogCi0Jc2V0X3B4YV9mYl9pbmZvKCZwYWxtejcyX2xjZF9zY3JlZW4pOwotCXB4YV9zZXRfbWNpX2luZm8oJnBhbG16NzJfbWNpX3BsYXRmb3JtX2RhdGEpOwotCXBhbG16NzJfdWRjX2luaXQoKTsKLQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXo3Ml9maWNwX3BsYXRmb3JtX2RhdGEpOwotCXB4YV9zZXRfa2V5cGFkX2luZm8oJnBhbG16NzJfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOwotCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZ3bTk3eHhfYmF0dF9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwlwYWxtMjd4X21tY19pbml0KEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiwgR1BJT19OUl9QQUxNWjcyX1NEX1JPLAorCQkJR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04sIDEpOworCXBhbG0yN3hfbGNkX2luaXQoLTEsICZwYWxtXzMyMHgzMjBfbGNkX21vZGUpOworCXBhbG0yN3hfdWRjX2luaXQoR1BJT19OUl9QQUxNWjcyX1VTQl9ERVRFQ1RfTiwKKwkJCUdQSU9fTlJfUEFMTVo3Ml9VU0JfUFVMTFVQLCAwKTsKKwlwYWxtMjd4X2lyZGFfaW5pdChHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSk7CisJcGFsbTI3eF9hYzk3X2luaXQoUEFMTVo3Ml9CQVRfTUlOX1ZPTFRBR0UsIFBBTE1aNzJfQkFUX01BWF9WT0xUQUdFLAorCQkJLTEsIDExMyk7CisJcGFsbTI3eF9wd21faW5pdCgtMSwgLTEpOworCXBhbG0yN3hfcG93ZXJfaW5pdCgtMSwgLTEpOworCXBhbG0yN3hfcG1pY19pbml0KCk7CisJcGFsbXo3Ml9rcGNfaW5pdCgpOworCXBhbG16NzJfbGVkc19pbml0KCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUEFMTVo3MiwgIlBhbG0gWmlyZTcyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKaW5kZXggYmMyNzU4Yi4uNTVlOGZjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3Bvb2RsZS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCkBAIC01Myw3ICs1Miw2IEBACiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgotI2luY2x1ZGUgInNoYXJwc2wuaCIKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcG9vZGxlX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCS8qIEkvTyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCAwYjlhZDMwLi5kZTUzZjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMzIyLDYgKzMyMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpweGEyNXhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnB4YTI1eF9kZXZpY2VfdWRjLAorCSZweGFfZGV2aWNlX3BtdSwKIAkmcHhhX2RldmljZV9pMnMsCiAJJnNhMTEwMF9kZXZpY2VfcnRjLAogCSZweGEyNXhfZGV2aWNlX3NzcCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggYzA1OWRhYy4uMTJlNWI5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTM4Myw2ICszODMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnB4YTI3eF9kZXZpY2VfdWRjLAorCSZweGFfZGV2aWNlX3BtdSwKIAkmcHhhX2RldmljZV9pMnMsCiAJJnNhMTEwMF9kZXZpY2VfcnRjLAogCSZweGFfZGV2aWNlX3J0YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggZjU0NGU1OC4uZmEwMDE0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNtY2ZzX211bHRbOF0gPSB7IDYsIDAsIDgsIDAsIDAsIDE2LCB9OwogCiAvKiBjcnlzdGFsIGZyZXF1ZW5jeSB0byBIU0lPIGJ1cyBmcmVxdWVuY3kgbXVsdGlwbGllciAoSFNTKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaHNzX211bHRbNF0gPSB7IDgsIDEyLCAxNiwgMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgaHNzX211bHRbNF0gPSB7IDgsIDEyLCAxNiwgMjQgfTsKIAogLyoKICAqIEdldCB0aGUgY2xvY2sgZnJlcXVlbmN5IGFzIHJlZmxlY3RlZCBieSBDQ1NSIGFuZCB0aGUgdHVyYm8gZmxhZy4KQEAgLTU1MiwxMSArNTUyLDIzIEBACiAJUEVDUiB8PSBQRUNSX0lFKGlycSAtIElSUV9XQUtFVVAwKTsKIH0KIAorc3RhdGljIGludCBweGFfc2V0X2V4dF93YWtldXBfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX1JJU0lORykKKwkJUFdFUiB8PSAxIDw8IChpcnEgLSBJUlFfV0FLRVVQMCk7CisKKwlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQorCQlQV0VSIHw9IDEgPDwgKGlycSAtIElSUV9XQUtFVVAwICsgMik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfZXh0X3dha2V1cF9jaGlwID0gewogCS5uYW1lCQk9ICJXQUtFVVAiLAogCS5hY2sJCT0gcHhhX2Fja19leHRfd2FrZXVwLAogCS5tYXNrCQk9IHB4YV9tYXNrX2V4dF93YWtldXAsCiAJLnVubWFzawkJPSBweGFfdW5tYXNrX2V4dF93YWtldXAsCisJLnNldF90eXBlCT0gcHhhX3NldF9leHRfd2FrZXVwX3R5cGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHhhX2luaXRfZXh0X3dha2V1cF9pcnEoc2V0X3dha2VfdCBmbikKQEAgLTU5Niw2ICs2MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnB4YTI3eF9kZXZpY2VfdWRjLAorCSZweGFfZGV2aWNlX3BtdSwKIAkmcHhhX2RldmljZV9pMnMsCiAJJnNhMTEwMF9kZXZpY2VfcnRjLAogCSZweGFfZGV2aWNlX3J0YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCmluZGV4IGQ0YjYxYjMuLjY3ZTA0ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwpAQCAtNzQ1LDEzICs3NDUsMzIgQEAKIAogc3RhdGljIGNoYXIgKnJhdW1mZWxkX3Bvd2VyX3N1cHBsaWNhbnRzW10gPSB7ICJkczI3NjAtYmF0dGVyeS4wIiB9OwogCitzdGF0aWMgdm9pZCByYXVtZmVsZF9wb3dlcl9zaWduYWxfY2hhcmdlZCh2b2lkKQoreworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSA9CisJCXBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZShyYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50c1swXSk7CisKKwlpZiAocHN5KQorCQlwb3dlcl9zdXBwbHlfc2V0X2JhdHRlcnlfY2hhcmdlZChwc3kpOworfQorCitzdGF0aWMgaW50IHJhdW1mZWxkX3Bvd2VyX3Jlc3VtZSh2b2lkKQoreworCS8qIGNoZWNrIGlmIEdQSU9fQ0hBUkdFX0RPTkUgd2VudCBsb3cgd2hpbGUgd2Ugd2VyZSBzbGVlcGluZyAqLworCWlmICghZ3Bpb19nZXRfdmFsdWUoR1BJT19DSEFSR0VfRE9ORSkpCisJCXJhdW1mZWxkX3Bvd2VyX3NpZ25hbF9jaGFyZ2VkKCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CiAJLmluaXQJCQk9IHBvd2VyX3N1cHBseV9pbml0LAogCS5pc19hY19vbmxpbmUJCT0gcmF1bWZlbGRfaXNfYWNfb25saW5lLAogCS5pc191c2Jfb25saW5lCQk9IHJhdW1mZWxkX2lzX3VzYl9vbmxpbmUsCiAJLmV4aXQJCQk9IHBvd2VyX3N1cHBseV9leGl0LAogCS5zdXBwbGllZF90bwkJPSByYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50cywKLQkubnVtX3N1cHBsaWNhbnRzCT0gQVJSQVlfU0laRShyYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50cykKKwkubnVtX3N1cHBsaWNhbnRzCT0gQVJSQVlfU0laRShyYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50cyksCisJLnJlc3VtZQkJCT0gcmF1bWZlbGRfcG93ZXJfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwb3dlcl9zdXBwbHlfcmVzb3VyY2VzW10gPSB7CkBAIC03NjYsMTMgKzc4NSw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjaGFyZ2VfZG9uZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeTsKLQotCXBzeSA9IHBvd2VyX3N1cHBseV9nZXRfYnlfbmFtZSgiZHMyNzYwLWJhdHRlcnkuMCIpOwotCi0JaWYgKHBzeSkKLQkJcG93ZXJfc3VwcGx5X3NldF9iYXR0ZXJ5X2NoYXJnZWQocHN5KTsKLQorCXJhdW1mZWxkX3Bvd2VyX3NpZ25hbF9jaGFyZ2VkKCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmggYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYzEyMDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFJpY2hhcmQgUHVyZGllCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPG1hY2gvc2hhcnBzbF9wbS5oPgotCi0vKgotICogU2hhcnBTTCBCYXR0ZXJ5L1BNIERyaXZlcgotICovCi0jZGVmaW5lIFJFQURfR1BJT19CSVQoeCkgICAgKEdQTFIoeCkgJiBHUElPX2JpdCh4KSkKLQotLyogTUFYMTExMSBDaGFubmVsIERlZmluaXRpb25zICovCi0jZGVmaW5lIE1BWDExMTFfQkFUVF9WT0xUICAgNHUKLSNkZWZpbmUgTUFYMTExMV9CQVRUX1RFTVAgICAydQotI2RlZmluZSBNQVgxMTExX0FDSU5fVk9MVCAgIDZ1Ci0KLWV4dGVybiBzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc2hhcnBzbF9iYXR0ZXJ5X2xldmVsc19hY2luW107Ci1leHRlcm4gc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNoYXJwc2xfYmF0dGVyeV9sZXZlbHNfbm9hY1tdOwotaW50IHNoYXJwc2xfcG1fcHhhX3JlYWRfbWF4MTExMShpbnQgY2hhbm5lbCk7Ci0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCmluZGV4IGNiNDc2NzIuLjhmZWQwMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTI5LDExICsyOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9wbS5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtcnRjLmg+Ci0jaW5jbHVkZSA8bWFjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsX3BtLmg+CiAKLSNpbmNsdWRlICJzaGFycHNsLmgiCi0KIC8qCiAgKiBDb25zdGFudHMKICAqLwpAQCAtMTgwLDE3ICsxNzcsMTIgQEAKIAlpZiAobWFjaGluZV9pc190b3NhKCkpCiAJICAgIHJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX0NPUkdJX1NTUF9ERVBSRUNBVEVECi0JcmV0dXJuIGNvcmdpX3NzcF9tYXgxMTExX2dldCgoY2hhbm5lbCA8PCBNQVhDVFJMX1NFTF9TSCkgfCBNQVhDVFJMX1BEMCB8IE1BWENUUkxfUEQxCi0JCQl8IE1BWENUUkxfU0dMIHwgTUFYQ1RSTF9VTkkgfCBNQVhDVFJMX1NUUik7Ci0jZWxzZQogCWV4dGVybiBpbnQgbWF4MTExMV9yZWFkX2NoYW5uZWwoaW50KTsKIAogCS8qIG1heDExMTEgYWNjZXB0cyBjaGFubmVscyBmcm9tIDAtMywgaG93ZXZlciwKIAkgKiBpdCBpcyBlbmNvZGVkIGZyb20gMC03IGhlcmUgaW4gdGhlIGNvZGUuCiAJICovCiAJcmV0dXJuIG1heDExMTFfcmVhZF9jaGFubmVsKGNoYW5uZWwgPj4gMSk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCBnZXRfcGVyY2VudGFnZShpbnQgdm9sdGFnZSkKQEAgLTI3NywyMSArMjY5LDYgQEAKIAlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeTogdm9sdGFnZTogJWQsIHN0YXR1czogJWQsIHBlcmNlbnRhZ2U6ICVkLCB0aW1lOiAlbGRcbiIsIHZvbHRhZ2UsCiAJCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzLCBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCwgamlmZmllcyk7CiAKLSNpZmRlZiBDT05GSUdfQkFDS0xJR0hUX0NPUkdJCi0JLyogSWYgYmF0dGVyeSBpcyBsb3cuIGxpbWl0IGJhY2tsaWdodCBpbnRlbnNpdHkgdG8gc2F2ZSBwb3dlci4gKi8KLQlpZiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzICE9IEFQTV9BQ19PTkxJTkUpCi0JICAgICYmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XKQotCSAgICB8fCAoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUwpKSkgewotCQlpZiAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9CTF9MSU1JVCkpIHsKLQkJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmJhY2tsaWdodF9saW1pdCgxKTsKLQkJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9CTF9MSU1JVDsKLQkJfQotCX0gZWxzZSBpZiAoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQkxfTElNSVQpIHsKLQkJc2hhcnBzbF9wbS5tYWNoaW5mby0+YmFja2xpZ2h0X2xpbWl0KDApOwotCQlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0JMX0xJTUlUOwotCX0KLSNlbmRpZgotCiAJLyogU3VzcGVuZCBpZiBjcml0aWNhbCBiYXR0ZXJ5IGxldmVsICovCiAJaWYgKChzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyAhPSBBUE1fQUNfT05MSU5FKQogCSAgICAgJiYgKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggMmVkOTVmMy4uNTJjMzBiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0zMzksMTAgKzMzOSw2IEBACiAJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGludmFsaWRhdGUgSSAmIEQgVExCcwogCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgogCi0jaWZkZWYgQ09ORklHX1hTQ0FMRV9DQUNIRV9FUlJBVEEKLQliaWMgICAgIHI5LCByOSwgIzB4MDAwNAkJCUAgc2VlIGNwdV94c2NhbGVfcHJvY19pbml0Ci0jZW5kaWYKLQogCW1jcglwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KIAltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCiAJbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECkBAIC0zNjgsOSArMzY0LDYgQEAKIAogCS50ZXh0CiByZXN1bWVfYWZ0ZXJfbW11OgotI2lmZGVmIENPTkZJR19YU0NBTEVfQ0FDSEVfRVJSQVRBCi0JYmwJY3B1X3hzY2FsZV9wcm9jX2luaXQKLSNlbmRpZgogCWxkbWZkCXNwISwge3IyLCByM30KICNpZm5kZWYgQ09ORklHX0lXTU1YVAogCW1hcglhY2MwLCByMiwgcjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDUxNzU2YzcuLjFjZDk5Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtMTgsMTQgKzE4LDE1IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zMywyMiArMzQsMjUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CiAKLQogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgotI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGl0ei5oPgorI2luY2x1ZGUgPG1hY2gvc2hhcnBzbF9wbS5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCi0jaW5jbHVkZSAic2hhcnBzbC5oIgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQaW4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNwaXR6X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCS8qIENoaXAgU2VsZWN0cyAqLwogCUdQSU83OF9uQ1NfMiwJLyogU0NPT1AgIzIgKi8KQEAgLTEyNCwxMCArMTI4LDEzIEBACiAJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0ZBTEwsCS8qIFNQSVRaX0dQSU9fUkVTRVQgKi8KIH07CiAKLS8qCi0gKiBTcGl0eiBTQ09PUCBEZXZpY2UgIzEKLSAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGl0el9zY29vcF9yZXNvdXJjZXNbXSA9IHsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2Nvb3AgR1BJTyBleHBhbmRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TSEFSUF9TQ09PUCkgfHwgZGVmaW5lZChDT05GSUdfU0hBUlBfU0NPT1BfTU9EVUxFKQorLyogU0NPT1AgRGV2aWNlICMxICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaXR6X3Njb29wXzFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJCT0gMHgxMDgwMDAwMCwKIAkJLmVuZAkJPSAweDEwODAwZmZmLApAQCAtMTM1LDcgKzE0Miw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Nvb3BfY29uZmlnIHNwaXR6X3Njb29wX3NldHVwID0geworc3RhdGljIHN0cnVjdCBzY29vcF9jb25maWcgc3BpdHpfc2Nvb3BfMV9zZXR1cCA9IHsKIAkuaW9fZGlyCQk9IFNQSVRaX1NDUF9JT19ESVIsCiAJLmlvX291dAkJPSBTUElUWl9TQ1BfSU9fT1VULAogCS5zdXNwZW5kX2Nscgk9IFNQSVRaX1NDUF9TVVNfQ0xSLApAQCAtMTQzLDIwICsxNTAsMTggQEAKIAkuZ3Bpb19iYXNlCT0gU1BJVFpfU0NQX0dQSU9fQkFTRSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpzY29vcF9kZXZpY2UgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6X3Njb29wXzFfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzaGFycC1zY29vcCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0gCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9zY29vcF9zZXR1cCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfc2Nvb3BfMV9zZXR1cCwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGl0el9zY29vcF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHNwaXR6X3Njb29wX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpdHpfc2Nvb3BfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNwaXR6X3Njb29wXzFfcmVzb3VyY2VzLAogfTsKIAotLyoKLSAqIFNwaXR6IFNDT09QIERldmljZSAjMgotICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaXR6X3Njb29wMl9yZXNvdXJjZXNbXSA9IHsKKy8qIFNDT09QIERldmljZSAjMiAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcGl0el9zY29vcF8yX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CQk9IDB4MDg4MDAwNDAsCiAJCS5lbmQJCT0gMHgwODgwMGZmZiwKQEAgLTE2NCw3ICsxNjksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNjb29wX2NvbmZpZyBzcGl0el9zY29vcDJfc2V0dXAgPSB7CitzdGF0aWMgc3RydWN0IHNjb29wX2NvbmZpZyBzcGl0el9zY29vcF8yX3NldHVwID0gewogCS5pb19kaXIJCT0gU1BJVFpfU0NQMl9JT19ESVIsCiAJLmlvX291dAkJPSBTUElUWl9TQ1AyX0lPX09VVCwKIAkuc3VzcGVuZF9jbHIJPSBTUElUWl9TQ1AyX1NVU19DTFIsCkBAIC0xNzIsODIgKzE3NywxMTAgQEAKIAkuZ3Bpb19iYXNlCT0gU1BJVFpfU0NQMl9HUElPX0JBU0UsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6c2Nvb3AyX2RldmljZSA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpfc2Nvb3BfMl9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoYXJwLXNjb29wIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKLSAJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X3Njb29wMl9zZXR1cCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfc2Nvb3BfMl9zZXR1cCwKIAl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGl0el9zY29vcDJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzcGl0el9zY29vcDJfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGl0el9zY29vcF8yX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc3BpdHpfc2Nvb3BfMl9yZXNvdXJjZXMsCiB9OwogCi0jZGVmaW5lIFNQSVRaX1BXUl9TRCAweDAxCi0jZGVmaW5lIFNQSVRaX1BXUl9DRiAweDAyCitzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfc2Nvb3BfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3BpdHpfc2Nvb3BfMV9kZXZpY2UpOworCisJLyogQWtpdGEgZG9lc24ndCBoYXZlIHRoZSBzZWNvbmQgU0NPT1AgY2hpcCAqLworCWlmICghbWFjaGluZV9pc19ha2l0YSgpKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNwaXR6X3Njb29wXzJfZGV2aWNlKTsKK30KIAogLyogUG93ZXIgY29udHJvbCBpcyBzaGFyZWQgd2l0aCBiZXR3ZWVuIG9uZSBvZiB0aGUgQ0Ygc2xvdHMgYW5kIFNEICovCi1zdGF0aWMgdm9pZCBzcGl0el9jYXJkX3B3cl9jdHJsKGludCBkZXZpY2UsIHVuc2lnbmVkIHNob3J0IG5ld19jcHIpCitzdGF0aWMgdm9pZCBzcGl0el9jYXJkX3B3cl9jdHJsKHVpbnQ4X3QgZW5hYmxlLCB1aW50OF90IG5ld19jcHIpCiB7Ci0JdW5zaWduZWQgc2hvcnQgY3ByID0gcmVhZF9zY29vcF9yZWcoJnNwaXR6c2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfQ1BSKTsKKwl1bnNpZ25lZCBzaG9ydCBjcHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChuZXdfY3ByICYgMHgwMDA3KSB7CisJaWYgKG5ld19jcHIgJiAweDcpIHsKIAkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19DRl9QT1dFUiwgMSk7Ci0JCWlmICghKGNwciAmIDB4MDAwMikgJiYgIShjcHIgJiAweDAwMDQpKQotCQkgICAgICAgIG1kZWxheSg1KTsKLQkJaWYgKGRldmljZSA9PSBTUElUWl9QV1JfQ0YpCi0JCSAgICAgICAgY3ByIHw9IDB4MDAwMjsKLQkJaWYgKGRldmljZSA9PSBTUElUWl9QV1JfU0QpCi0JCSAgICAgICAgY3ByIHw9IDB4MDAwNDsKLQkgICAgICAgIHdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwciB8IG5ld19jcHIpOwotCX0gZWxzZSB7Ci0JCWlmIChkZXZpY2UgPT0gU1BJVFpfUFdSX0NGKQotCQkgICAgICAgIGNwciAmPSB+MHgwMDAyOwotCQlpZiAoZGV2aWNlID09IFNQSVRaX1BXUl9TRCkKLQkJICAgICAgICBjcHIgJj0gfjB4MDAwNDsKLQkJaWYgKCEoY3ByICYgMHgwMDAyKSAmJiAhKGNwciAmIDB4MDAwNCkpIHsKLQkJCXdyaXRlX3Njb29wX3JlZygmc3BpdHpzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIDB4MDAwMCk7Ci0JCSAgICAgICAgbWRlbGF5KDEpOwotCQkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19DRl9QT1dFUiwgMCk7Ci0JCX0gZWxzZSB7Ci0JCSAgICAgICAgd3JpdGVfc2Nvb3BfcmVnKCZzcGl0enNjb29wX2RldmljZS5kZXYsIFNDT09QX0NQUiwgY3ByIHwgbmV3X2Nwcik7Ci0JCX0KKwkJbWRlbGF5KDUpOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNwciA9IHJlYWRfc2Nvb3BfcmVnKCZzcGl0el9zY29vcF8xX2RldmljZS5kZXYsIFNDT09QX0NQUik7CisKKwlpZiAoZW5hYmxlICYgbmV3X2NwcikKKwkJY3ByIHw9IG5ld19jcHI7CisJZWxzZQorCQljcHIgJj0gfmVuYWJsZTsKKworCXdyaXRlX3Njb29wX3JlZygmc3BpdHpfc2Nvb3BfMV9kZXZpY2UuZGV2LCBTQ09PUF9DUFIsIGNwcik7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAoIShjcHIgJiAweDcpKSB7CisJCW1kZWxheSgxKTsKKwkJZ3Bpb19zZXRfdmFsdWUoU1BJVFpfR1BJT19DRl9QT1dFUiwgMCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzcGl0el9wY21jaWFfcHdyKHN0cnVjdCBkZXZpY2UgKnNjb29wLCB1bnNpZ25lZCBzaG9ydCBjcHIsIGludCBucikKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfc2Nvb3BfaW5pdCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHNwaXR6X2NhcmRfcHdyX2N0cmwodWludDhfdCBlbmFibGUsIHVpbnQ4X3QgbmV3X2Nwcikge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQQ01DSUEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBX1BYQTJYWCkgfHwgZGVmaW5lZChDT05GSUdfUENNQ0lBX1BYQTJYWF9NT0RVTEUpCitzdGF0aWMgdm9pZCBzcGl0el9wY21jaWFfcHdyKHN0cnVjdCBkZXZpY2UgKnNjb29wLCB1aW50MTZfdCBjcHIsIGludCBucikKIHsKIAkvKiBPbmx5IG5lZWQgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIGZvciBzbG90IDAgKi8KIAlpZiAobnIgPT0gMCkKLQkJc3BpdHpfY2FyZF9wd3JfY3RybChTUElUWl9QV1JfQ0YsIGNwcik7CisJCXNwaXR6X2NhcmRfcHdyX2N0cmwoCisJCQljcHIgJiAoU0NPT1BfQ1BSX0NGXzNWIHwgU0NPT1BfQ1BSX0NGX1hWKSwgY3ByKTsKIAllbHNlCiAJCXdyaXRlX3Njb29wX3JlZyhzY29vcCwgU0NPT1BfQ1BSLCBjcHIpOwogfQogCiBzdGF0aWMgc3RydWN0IHNjb29wX3BjbWNpYV9kZXYgc3BpdHpfcGNtY2lhX3Njb29wW10gPSB7Ci17Ci0JLmRldiAgICAgICAgPSAmc3BpdHpzY29vcF9kZXZpY2UuZGV2LAotCS5pcnEgICAgICAgID0gU1BJVFpfSVJRX0dQSU9fQ0ZfSVJRLAotCS5jZF9pcnEgICAgID0gU1BJVFpfSVJRX0dQSU9fQ0ZfQ0QsCi0JLmNkX2lycV9zdHIgPSAiUENNQ0lBMCBDRCIsCi19LHsKLQkuZGV2ICAgICAgICA9ICZzcGl0enNjb29wMl9kZXZpY2UuZGV2LAotCS5pcnEgICAgICAgID0gU1BJVFpfSVJRX0dQSU9fQ0YyX0lSUSwKLQkuY2RfaXJxICAgICA9IC0xLAotfSwKKwl7CisJCS5kZXYJCT0gJnNwaXR6X3Njb29wXzFfZGV2aWNlLmRldiwKKwkJLmlycQkJPSBTUElUWl9JUlFfR1BJT19DRl9JUlEsCisJCS5jZF9pcnEJCT0gU1BJVFpfSVJRX0dQSU9fQ0ZfQ0QsCisJCS5jZF9pcnFfc3RyCT0gIlBDTUNJQTAgQ0QiLAorCX0sIHsKKwkJLmRldgkJPSAmc3BpdHpfc2Nvb3BfMl9kZXZpY2UuZGV2LAorCQkuaXJxCQk9IFNQSVRaX0lSUV9HUElPX0NGMl9JUlEsCisJCS5jZF9pcnEJCT0gLTEsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyBzcGl0el9wY21jaWFfY29uZmlnID0gewotCS5kZXZzICAgICAgICAgPSAmc3BpdHpfcGNtY2lhX3Njb29wWzBdLAotCS5udW1fZGV2cyAgICAgPSAyLAotCS5wb3dlcl9jdHJsICAgPSBzcGl0el9wY21jaWFfcHdyLAorCS5kZXZzCQk9ICZzcGl0el9wY21jaWFfc2Nvb3BbMF0sCisJLm51bV9kZXZzCT0gMiwKKwkucG93ZXJfY3RybAk9IHNwaXR6X3BjbWNpYV9wd3IsCiB9OwogCi1FWFBPUlRfU1lNQk9MKHNwaXR6c2Nvb3BfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0woc3BpdHpzY29vcDJfZGV2aWNlKTsKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9wY21jaWFfaW5pdCh2b2lkKQoreworCS8qIEFraXRhIGhhcyBvbmx5IG9uZSBQQ01DSUEgc2xvdCB1c2VkICovCisJaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSkKKwkJc3BpdHpfcGNtY2lhX2NvbmZpZy5udW1fZGV2cyA9IDE7CiAKLS8qCi0gKiBTcGl0eiBLZXlib2FyZCBEZXZpY2UKLSAqLworCXBsYXRmb3JtX3Njb29wX2NvbmZpZyA9ICZzcGl0el9wY21jaWFfY29uZmlnOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGl0el9wY21jaWFfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5Ym9hcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfTUFUUklYKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9NQVRSSVhfTU9EVUxFKQorCiAjZGVmaW5lIFNQSVRaX0tFWV9DQUxFTkRBUglLRVlfRjEKICNkZWZpbmUgU1BJVFpfS0VZX0FERFJFU1MJS0VZX0YyCiAjZGVmaW5lIFNQSVRaX0tFWV9GTgkJS0VZX0YzCkBAIC0yNjMsNyArMjk2LDcgQEAKICNkZWZpbmUgU1BJVFpfS0VZX09LCQlLRVlfRjExCiAjZGVmaW5lIFNQSVRaX0tFWV9NRU5VCQlLRVlfRjEyCiAKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0emtiZF9rZXltYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0el9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0xFRlRDVFJMKSwKIAlLRVkoMCwgMSwgS0VZXzEpLAogCUtFWSgwLCAyLCBLRVlfMyksCkBAIC0zMzAsMzYgKzM2Myw0NyBAQAogCUtFWSg2LCA4LCBLRVlfUklHSFQpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgc3BpdHprYmRfa2V5bWFwX2RhdGEgPSB7Ci0JLmtleW1hcAkJPSBzcGl0emtiZF9rZXltYXAsCi0JLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShzcGl0emtiZF9rZXltYXApLAorc3RhdGljIGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgc3BpdHpfa2V5bWFwX2RhdGEgPSB7CisJLmtleW1hcAkJPSBzcGl0el9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShzcGl0el9rZXltYXApLAogfTsKIAotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNwaXR6a2JkX3Jvd19ncGlvc1tdID0KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0el9yb3dfZ3Bpb3NbXSA9CiAJCXsgMTIsIDE3LCA5MSwgMzQsIDM2LCAzOCwgMzkgfTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0emtiZF9jb2xfZ3Bpb3NbXSA9CitzdGF0aWMgY29uc3QgdWludDMyX3Qgc3BpdHpfY29sX2dwaW9zW10gPQogCQl7IDg4LCAyMywgMjQsIDI1LCAyNiwgMjcsIDUyLCAxMDMsIDEwNywgMTA4LCAxMTQgfTsKIAotc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3BpdHprYmRfcGRhdGEgPSB7Ci0JLmtleW1hcF9kYXRhCQk9ICZzcGl0emtiZF9rZXltYXBfZGF0YSwKLQkucm93X2dwaW9zCQk9IHNwaXR6a2JkX3Jvd19ncGlvcywKLQkuY29sX2dwaW9zCQk9IHNwaXR6a2JkX2NvbF9ncGlvcywKLQkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX3Jvd19ncGlvcyksCi0JLm51bV9jb2xfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0emtiZF9jb2xfZ3Bpb3MpLAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5cGFkX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWtwX3BkYXRhID0geworCS5rZXltYXBfZGF0YQkJPSAmc3BpdHpfa2V5bWFwX2RhdGEsCisJLnJvd19ncGlvcwkJPSBzcGl0el9yb3dfZ3Bpb3MsCisJLmNvbF9ncGlvcwkJPSBzcGl0el9jb2xfZ3Bpb3MsCisJLm51bV9yb3dfZ3Bpb3MJCT0gQVJSQVlfU0laRShzcGl0el9yb3dfZ3Bpb3MpLAorCS5udW1fY29sX2dwaW9zCQk9IEFSUkFZX1NJWkUoc3BpdHpfY29sX2dwaW9zKSwKIAkuY29sX3NjYW5fZGVsYXlfdXMJPSAxMCwKIAkuZGVib3VuY2VfbXMJCT0gMTAsCiAJLndha2V1cAkJCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6a2JkX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6X21rcF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gIm1hdHJpeC1rZXlwYWQiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpdHprYmRfcGRhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNwaXR6X21rcF9wZGF0YSwKIAl9LAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X21rcF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzcGl0el9ta3BfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfbWtwX2luaXQodm9pZCkge30KKyNlbmRpZgogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gc3BpdHpfZ3Bpb19rZXlzW10gPSB7CiAJewogCQkudHlwZQk9IEVWX1BXUiwKQEAgLTM5NiwxMCArNDQwLDE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9rZXlzX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNwaXR6X2dwaW9fa2V5c19kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGl0el9rZXlzX2luaXQodm9pZCkge30KKyNlbmRpZgogCi0vKgotICogU3BpdHogTEVEcwotICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0xFRFNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfTEVEU19HUElPX01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgc3BpdHpfZ3Bpb19sZWRzW10gPSB7CiAJewogCQkubmFtZQkJCT0gInNwaXR6OmFtYmVyOmNoYXJnZSIsCkBAIC00MTgsMjAgKzQ3MCwyNyBAQAogCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoc3BpdHpfZ3Bpb19sZWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6bGVkX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6X2xlZF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImxlZHMtZ3BpbyIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzcGl0el9ncGlvX2xlZHNfaW5mbywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc3BpdHpfZ3Bpb19sZWRzX2luZm8sCiAJfSwKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgc3BpdHpfc3BpX2luZm8gPSB7Ci0JLm51bV9jaGlwc2VsZWN0CT0gMywKLX07CitzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfbGVkc19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzcGl0el9sZWRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfbGVkc19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAotc3RhdGljIHZvaWQgc3BpdHpfd2FpdF9mb3JfaHN5bmModm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNTUCBEZXZpY2VzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFhfTU9EVUxFKQorc3RhdGljIHZvaWQgc3BpdHpfYWRzNzg0Nl93YWl0X2Zvcl9oc3luYyh2b2lkKQogewogCXdoaWxlIChncGlvX2dldF92YWx1ZShTUElUWl9HUElPX0hTWU5DKSkKIAkJY3B1X3JlbGF4KCk7CkBAIC00NDcsNyArNTA2LDcgQEAKIAkueV9wbGF0ZV9vaG1zCQk9IDQ4NiwKIAkucHJlc3N1cmVfbWF4CQk9IDEwMjQsCiAJLmdwaW9fcGVuZG93bgkJPSBTUElUWl9HUElPX1RQX0lOVCwKLQkud2FpdF9mb3Jfc3luYwkJPSBzcGl0el93YWl0X2Zvcl9oc3luYywKKwkud2FpdF9mb3Jfc3luYwkJPSBzcGl0el9hZHM3ODQ2X3dhaXRfZm9yX2hzeW5jLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgc3BpdHpfYWRzNzg0Nl9jaGlwID0gewpAQCAtNDg1LDcyICs1NDQsODggQEAKIAogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGl0el9zcGlfZGV2aWNlc1tdID0gewogCXsKLQkJLm1vZGFsaWFzCT0gImFkczc4NDYiLAotCQkubWF4X3NwZWVkX2h6CT0gMTIwMDAwMCwKLQkJLmJ1c19udW0JPSAyLAotCQkuY2hpcF9zZWxlY3QJPSAwLAotCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9hZHM3ODQ2X2luZm8sCi0JCS5jb250cm9sbGVyX2RhdGE9ICZzcGl0el9hZHM3ODQ2X2NoaXAsCi0JCS5pcnEJCT0gZ3Bpb190b19pcnEoU1BJVFpfR1BJT19UUF9JTlQpLAorCQkubW9kYWxpYXMJCT0gImFkczc4NDYiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEyMDAwMDAsCisJCS5idXNfbnVtCQk9IDIsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmc3BpdHpfYWRzNzg0Nl9pbmZvLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJnNwaXR6X2Fkczc4NDZfY2hpcCwKKwkJLmlycQkJCT0gZ3Bpb190b19pcnEoU1BJVFpfR1BJT19UUF9JTlQpLAogCX0sIHsKLQkJLm1vZGFsaWFzCT0gImNvcmdpLWxjZCIsCi0JCS5tYXhfc3BlZWRfaHoJPSA1MDAwMCwKLQkJLmJ1c19udW0JPSAyLAotCQkuY2hpcF9zZWxlY3QJPSAxLAotCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9sY2Rjb25faW5mbywKLQkJLmNvbnRyb2xsZXJfZGF0YT0gJnNwaXR6X2xjZGNvbl9jaGlwLAorCQkubW9kYWxpYXMJCT0gImNvcmdpLWxjZCIsCisJCS5tYXhfc3BlZWRfaHoJCT0gNTAwMDAsCisJCS5idXNfbnVtCQk9IDIsCisJCS5jaGlwX3NlbGVjdAkJPSAxLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmc3BpdHpfbGNkY29uX2luZm8sCisJCS5jb250cm9sbGVyX2RhdGEJPSAmc3BpdHpfbGNkY29uX2NoaXAsCiAJfSwgewotCQkubW9kYWxpYXMJPSAibWF4MTExMSIsCi0JCS5tYXhfc3BlZWRfaHoJPSA0NTAwMDAsCi0JCS5idXNfbnVtCT0gMiwKLQkJLmNoaXBfc2VsZWN0CT0gMiwKLQkJLmNvbnRyb2xsZXJfZGF0YT0gJnNwaXR6X21heDExMTFfY2hpcCwKKwkJLm1vZGFsaWFzCQk9ICJtYXgxMTExIiwKKwkJLm1heF9zcGVlZF9oegkJPSA0NTAwMDAsCisJCS5idXNfbnVtCQk9IDIsCisJCS5jaGlwX3NlbGVjdAkJPSAyLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJnNwaXR6X21heDExMTFfY2hpcCwKIAl9LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXRfc3BpKHZvaWQpCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHNwaXR6X3NwaV9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdAk9IDMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfc3BpX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgY29yZ2lfbGNkX3BsYXRmb3JtX2RhdGEgKmxjZF9kYXRhID0gJnNwaXR6X2xjZGNvbl9pbmZvOworCiAJaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSkgewotCQlzcGl0el9sY2Rjb25faW5mby5ncGlvX2JhY2tsaWdodF9jb250ID0gQUtJVEFfR1BJT19CQUNLTElHSFRfQ09OVDsKLQkJc3BpdHpfbGNkY29uX2luZm8uZ3Bpb19iYWNrbGlnaHRfb24gPSBBS0lUQV9HUElPX0JBQ0tMSUdIVF9PTjsKKwkJbGNkX2RhdGEtPmdwaW9fYmFja2xpZ2h0X2NvbnQgPSBBS0lUQV9HUElPX0JBQ0tMSUdIVF9DT05UOworCQlsY2RfZGF0YS0+Z3Bpb19iYWNrbGlnaHRfb24gPSBBS0lUQV9HUElPX0JBQ0tMSUdIVF9PTjsKIAl9CiAKIAlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZzcGl0el9zcGlfaW5mbyk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oQVJSQVlfQU5EX1NJWkUoc3BpdHpfc3BpX2RldmljZXMpKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfaW5pdF9zcGkodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGl0el9zcGlfaW5pdCh2b2lkKSB7fQogI2VuZGlmCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCiAvKgotICogTU1DL1NEIERldmljZQotICoKLSAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCi0gKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KKyAqIE5PVEU6IFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zIHRvCisgKiBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwogc3RhdGljIHZvaWQgc3BpdHpfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKIHsKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAotCWlmICgoIDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spCi0JCXNwaXR6X2NhcmRfcHdyX2N0cmwoU1BJVFpfUFdSX1NELCAweDAwMDQpOworCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykKKwkJc3BpdHpfY2FyZF9wd3JfY3RybChTQ09PUF9DUFJfU0RfM1YsIFNDT09QX0NQUl9TRF8zVik7CiAJZWxzZQotCQlzcGl0el9jYXJkX3B3cl9jdHJsKFNQSVRaX1BXUl9TRCwgMHgwMDAwKTsKKwkJc3BpdHpfY2FyZF9wd3JfY3RybChTQ09PUF9DUFJfU0RfM1YsIDB4MCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgc3BpdHpfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CiAJLmRldGVjdF9kZWxheV9tcwk9IDI1MCwKIAkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlciAJCT0gc3BpdHpfbWNpX3NldHBvd2VyLAorCS5zZXRwb3dlcgkJPSBzcGl0el9tY2lfc2V0cG93ZXIsCiAJLmdwaW9fY2FyZF9kZXRlY3QJPSBTUElUWl9HUElPX25TRF9ERVRFQ1QsCiAJLmdwaW9fY2FyZF9ybwkJPSBTUElUWl9HUElPX25TRF9XUCwKIAkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9tbWNfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfbWNpX2luZm8oJnNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfbW1jX2luaXQodm9pZCkge30KKyNlbmRpZgogCi0vKgotICogVVNCIEhvc3QgKE9IQ0kpCi0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVTQiBIb3N0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIHN0YXRpYyBpbnQgc3BpdHpfb2hjaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgZXJyOwpAQCAtNTU5LDkgKzYzNCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIE9ubHkgUG9ydCAyIGlzIGNvbm5lY3RlZAotCSAqIFNldHVwIFVTQiBQb3J0IDIgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIKLQkgKi8KKwkvKiBPbmx5IFBvcnQgMiBpcyBjb25uZWN0ZWQsIHNldHVwIFVTQiBQb3J0IDIgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIAlVUDJPQ1IgPSBVUDJPQ1JfSFhTIHwgVVAyT0NSX0hYT0UgfCBVUDJPQ1JfRFBQREUgfCBVUDJPQ1JfRE1QREU7CiAKIAlyZXR1cm4gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNQSVRaX0dQSU9fVVNCX0hPU1QsIDEpOwpAQCAtNTgwLDY3ICs2NTMsOTUgQEAKIAkucG93ZXJfYnVkZ2V0CT0gMTUwLAogfTsKIAorc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X3VoY19pbml0KHZvaWQpCit7CisJcHhhX3NldF9vaGNpX2luZm8oJnNwaXR6X29oY2lfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNwaXR6X3VoY19pbml0KHZvaWQpIHt9CisjZW5kaWYKIAotLyoKLSAqIElyZGEKLSAqLwotCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BYQV9GSUNQKSB8fCBkZWZpbmVkKENPTkZJR19QWEFfRklDUF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0vKiAuZ3Bpb19wd2Rvd24gaXMgc2V0IGluIHNwaXR6X2luaXQoKSBhbmQgYWtpdGFfaW5pdCgpIGFjY29yZGluZ2x5ICovCiAJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCi0KLS8qCi0gKiBTcGl0eiBQWEEgRnJhbWVidWZmZXIKLSAqLwotCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBzcGl0el9weGFmYl9tb2Rlc1tdID0geworc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2lyZGFfaW5pdCh2b2lkKQogewotCS5waXhjbG9jayAgICAgICA9IDE5MjMxLAotCS54cmVzICAgICAgICAgICA9IDQ4MCwKLQkueXJlcyAgICAgICAgICAgPSA2NDAsCi0JLmJwcCAgICAgICAgICAgID0gMTYsCi0JLmhzeW5jX2xlbiAgICAgID0gNDAsCi0JLmxlZnRfbWFyZ2luICAgID0gNDYsCi0JLnJpZ2h0X21hcmdpbiAgID0gMTI1LAotCS52c3luY19sZW4gICAgICA9IDMsCi0JLnVwcGVyX21hcmdpbiAgID0gMSwKLQkubG93ZXJfbWFyZ2luICAgPSAwLAotCS5zeW5jICAgICAgICAgICA9IDAsCi19LHsKLQkucGl4Y2xvY2sgICAgICAgPSAxMzQ2MTcsCi0JLnhyZXMgICAgICAgICAgID0gMjQwLAotCS55cmVzICAgICAgICAgICA9IDMyMCwKLQkuYnBwICAgICAgICAgICAgPSAxNiwKLQkuaHN5bmNfbGVuICAgICAgPSAyMCwKLQkubGVmdF9tYXJnaW4gICAgPSAyMCwKLQkucmlnaHRfbWFyZ2luICAgPSA0NiwKLQkudnN5bmNfbGVuICAgICAgPSAyLAotCS51cHBlcl9tYXJnaW4gICA9IDEsCi0JLmxvd2VyX21hcmdpbiAgID0gMCwKLQkuc3luYyAgICAgICAgICAgPSAwLAotfSwKKwlpZiAobWFjaGluZV9pc19ha2l0YSgpKQorCQlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBBS0lUQV9HUElPX0lSX09OOworCWVsc2UKKwkJc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhLmdwaW9fcHdkb3duID0gU1BJVFpfR1BJT19JUl9PTjsKKworCXB4YV9zZXRfZmljcF9pbmZvKCZzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGl0el9pcmRhX2luaXQodm9pZCkge30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmFtZWJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBzcGl0el9weGFmYl9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrICAgICAgID0gMTkyMzEsCisJCS54cmVzICAgICAgICAgICA9IDQ4MCwKKwkJLnlyZXMgICAgICAgICAgID0gNjQwLAorCQkuYnBwICAgICAgICAgICAgPSAxNiwKKwkJLmhzeW5jX2xlbiAgICAgID0gNDAsCisJCS5sZWZ0X21hcmdpbiAgICA9IDQ2LAorCQkucmlnaHRfbWFyZ2luICAgPSAxMjUsCisJCS52c3luY19sZW4gICAgICA9IDMsCisJCS51cHBlcl9tYXJnaW4gICA9IDEsCisJCS5sb3dlcl9tYXJnaW4gICA9IDAsCisJCS5zeW5jICAgICAgICAgICA9IDAsCisJfSwgeworCQkucGl4Y2xvY2sgICAgICAgPSAxMzQ2MTcsCisJCS54cmVzICAgICAgICAgICA9IDI0MCwKKwkJLnlyZXMgICAgICAgICAgID0gMzIwLAorCQkuYnBwICAgICAgICAgICAgPSAxNiwKKwkJLmhzeW5jX2xlbiAgICAgID0gMjAsCisJCS5sZWZ0X21hcmdpbiAgICA9IDIwLAorCQkucmlnaHRfbWFyZ2luICAgPSA0NiwKKwkJLnZzeW5jX2xlbiAgICAgID0gMiwKKwkJLnVwcGVyX21hcmdpbiAgID0gMSwKKwkJLmxvd2VyX21hcmdpbiAgID0gMCwKKwkJLnN5bmMgICAgICAgICAgID0gMCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc3BpdHpfcHhhZmJfaW5mbyA9IHsKLQkubW9kZXMgICAgICAgICAgPSAmc3BpdHpfcHhhZmJfbW9kZXNbMF0sCi0JLm51bV9tb2RlcyAgICAgID0gMiwKKwkubW9kZXMgICAgICAgICAgPSBzcGl0el9weGFmYl9tb2RlcywKKwkubnVtX21vZGVzICAgICAgPSBBUlJBWV9TSVpFKHNwaXR6X3B4YWZiX21vZGVzKSwKIAkuZml4ZWRfbW9kZXMgICAgPSAxLAogCS5sY2RfY29ubgk9IExDRF9DT0xPUl9URlRfMTZCUFAgfCBMQ0RfQUxURVJOQVRFX01BUFBJTkcsCiB9OwogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9sY2RfaW5pdCh2b2lkKQoreworCXNldF9weGFfZmJfaW5mbygmc3BpdHpfcHhhZmJfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNwaXR6X2xjZF9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfU0hBUlBTTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfU0hBUlBTTF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3BpdHpfbmFuZF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSA9ICJTeXN0ZW0gQXJlYSIsCiAJCS5vZmZzZXQgPSAwLAogCQkuc2l6ZSA9IDcgKiAxMDI0ICogMTAyNCwKLQl9LAotCXsKKwl9LCB7CiAJCS5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCiAJCS5vZmZzZXQgPSA3ICogMTAyNCAqIDEwMjQsCi0JfSwKLQl7CisJfSwgewogCQkubmFtZSA9ICJIb21lIEZpbGVzeXN0ZW0iLAogCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAogCQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwsCkBAIC02NDksMzcgKzc1MCw3MiBAQAogCiBzdGF0aWMgdWludDhfdCBzY2FuX2ZmX3BhdHRlcm5bXSA9IHsgMHhmZiwgMHhmZiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNoYXJwc2xfYmJ0ID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDQsCi0JLmxlbiA9IDIsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KK3N0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc3BpdHpfbmFuZF9iYnQgPSB7CisJLm9wdGlvbnMJPSAwLAorCS5vZmZzCQk9IDQsCisJLmxlbgkJPSAyLAorCS5wYXR0ZXJuCT0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhIHNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhID0gewotCS5iYWRibG9ja19wYXR0ZXJuCT0gJnNoYXJwc2xfYmJ0LAotCS5wYXJ0aXRpb25zCQk9IHNoYXJwc2xfbmFuZF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUoc2hhcnBzbF9uYW5kX3BhcnRpdGlvbnMpLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0geworCS5vb2JmcmVlCT0geyB7MHgwOCwgMHgwOX0gfSwKKwkuZWNjYnl0ZXMJPSAyNCwKKwkuZWNjcG9zCQk9IHsKKwkJCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUsIDB4MTEsCisJCQkweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAorCQkJMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzNywKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaGFycHNsX25hbmRfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhIHNwaXR6X25hbmRfcGRhdGEgPSB7CisJLmJhZGJsb2NrX3BhdHRlcm4JPSAmc3BpdHpfbmFuZF9iYnQsCisJLnBhcnRpdGlvbnMJCT0gc3BpdHpfbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0aXRpb25zCQk9IEFSUkFZX1NJWkUoc3BpdHpfbmFuZF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpdHpfbmFuZF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IDB4MEMwMDAwMDAsCi0JCS5lbmQJPSAweDBDMDAwRkZGLAorCQkuc3RhcnQJPSBQWEFfQ1MzX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MzX1BIWVMgKyBTWl80SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGFycHNsX25hbmRfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpfbmFuZF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInNoYXJwc2wtbmFuZCIsCiAJLmlkCQk9IC0xLAotCS5yZXNvdXJjZQk9IHNoYXJwc2xfbmFuZF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoYXJwc2xfbmFuZF9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YSwKKwkucmVzb3VyY2UJPSBzcGl0el9uYW5kX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc3BpdHpfbmFuZF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9uYW5kX3BkYXRhLAorCX0KIH07CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9uYW5kX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19zcGl0eigpKSB7CisJCXNwaXR6X25hbmRfcGFydGl0aW9uc1sxXS5zaXplID0gNSAqIDEwMjQgKiAxMDI0OworCX0gZWxzZSBpZiAobWFjaGluZV9pc19ha2l0YSgpKSB7CisJCXNwaXR6X25hbmRfcGFydGl0aW9uc1sxXS5zaXplID0gNTggKiAxMDI0ICogMTAyNDsKKwkJc3BpdHpfbmFuZF9iYnQubGVuID0gMTsKKwkJc3BpdHpfbmFuZF9wZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2JvcnpvaSgpKSB7CisJCXNwaXR6X25hbmRfcGFydGl0aW9uc1sxXS5zaXplID0gMzIgKiAxMDI0ICogMTAyNDsKKwkJc3BpdHpfbmFuZF9iYnQubGVuID0gMTsKKwkJc3BpdHpfbmFuZF9wZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CisJfQogCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9yb21fcGFydHNbXSA9IHsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNwaXR6X25hbmRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc3BpdHpfbmFuZF9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTk9SIEZsYXNoCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3BpdHpfcm9tX3BhcnRzW10gPSB7CiAJewogCQkubmFtZQk9IkJvb3QgUFJPTSBGaWxlc3lzdGVtIiwKIAkJLm9mZnNldAk9IDB4MDAxNDAwMDAsCkBAIC02ODcsMzcgKzgyMywxMDUgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2hhcnBzbF9yb21fZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNwaXR6X3JvbV9kYXRhID0gewogCS53aWR0aAkJPSAyLAotCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc2hhcnBzbF9yb21fcGFydHMpLAotCS5wYXJ0cwkJPSBzaGFycHNsX3JvbV9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHNwaXR6X3JvbV9wYXJ0cyksCisJLnBhcnRzCQk9IHNwaXR6X3JvbV9wYXJ0cywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hhcnBzbF9yb21fcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNwaXR6X3JvbV9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IDB4MDAwMDAwMDAsCi0JCS5lbmQJPSAweDAwN2ZmZmZmLAorCQkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl84TSAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGFycHNsX3JvbV9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCT0gLTEsCi0JLnJlc291cmNlID0gc2hhcnBzbF9yb21fcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzaGFycHNsX3JvbV9yZXNvdXJjZXMpLAotCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZzaGFycHNsX3JvbV9kYXRhLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpdHpfcm9tX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IHNwaXR6X3JvbV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaXR6X3JvbV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9yb21fZGF0YSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzcGl0enNjb29wX2RldmljZSwKLQkmc3BpdHprYmRfZGV2aWNlLAotCSZzcGl0el9ncGlvX2tleXNfZGV2aWNlLAotCSZzcGl0emxlZF9kZXZpY2UsCi0JJnNoYXJwc2xfbmFuZF9kZXZpY2UsCi0JJnNoYXJwc2xfcm9tX2RldmljZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9ub3JfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3BpdHpfcm9tX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNwaXR6X25vcl9pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBleHBhbmRlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfUFhBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFraXRhX3BjYTk1M3hfcGRhdGEgPSB7CisJLmdwaW9fYmFzZQkJPSBBS0lUQV9JT0VYUF9HUElPX0JBU0UsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNwaXR6X2kyY19kZXZzW10gPSB7CisJeworCQkudHlwZQkJPSAid204NzUwIiwKKwkJLmFkZHIJCT0gMHgxYiwKKwl9LCB7CisJCS50eXBlCQk9ICJtYXg3MzEwIiwKKwkJLmFkZHIJCT0gMHgxOCwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmYWtpdGFfcGNhOTUzeF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGlzbDYyNzFhX2NvbnN1bWVyc1tdID0geworCXsKKwkJLnN1cHBseQk9ICJ2Y2NfY29yZSIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlzbDYyNzFhX2luZm9bXSA9IHsKKwl7CisJCS5jb25zdHJhaW50cyA9IHsKKwkJCS5uYW1lCQk9ICJ2Y2NfY29yZSByYW5nZSIsCisJCQkubWluX3VWCQk9IDg1MDAwMCwKKwkJCS5tYXhfdVYJCT0gMTYwMDAwMCwKKwkJCS5hbHdheXNfb24JPSAxLAorCQkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCQl9LAorCS5jb25zdW1lcl9zdXBwbGllcwk9IGlzbDYyNzFhX2NvbnN1bWVycywKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShpc2w2MjcxYV9jb25zdW1lcnMpLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc3BpdHpfcGkyY19kZXZzW10gPSB7CisJeworCQkudHlwZQkJPSAiaXNsNjI3MWEiLAorCQkuYWRkcgkJPSAweDBjLAorCQkucGxhdGZvcm1fZGF0YQk9ICZpc2w2MjcxYV9pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaTJjX2luaXQodm9pZCkKK3sKKwlpbnQgc2l6ZSA9IEFSUkFZX1NJWkUoc3BpdHpfaTJjX2RldnMpOworCisJLyogT25seSBBa2l0YSBoYXMgdGhlIG1heDczMTAgY2hpcCAqLworCWlmICghbWFjaGluZV9pc19ha2l0YSgpKQorCQlzaXplLS07CisKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgc3BpdHpfaTJjX2RldnMsIHNpemUpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIEFSUkFZX0FORF9TSVpFKHNwaXR6X3BpMmNfZGV2cykpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGl0el9pMmNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIHNwaXR6X3Bvd2Vyb2ZmKHZvaWQpCiB7CiAJYXJtX21hY2hpbmVfcmVzdGFydCgnZycsIE5VTEwpOwpAQCAtNzI2LDI2ICs5MzAsMTggQEAKIHN0YXRpYyB2b2lkIHNwaXR6X3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyogQm9vdGxvYWRlciBtYWdpYyBmb3IgYSByZWJvb3QgKi8KLQlpZigoTVNDMCAmIDB4ZmZmZjAwMDApID09IDB4N2ZmMDAwMDApCisJaWYgKChNU0MwICYgMHhmZmZmMDAwMCkgPT0gMHg3ZmYwMDAwMCkKIAkJTVNDMCA9IChNU0MwICYgMHhmZmZmKSB8IDB4N2VlMDAwMDA7CiAKIAlzcGl0el9wb3dlcm9mZigpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgY29tbW9uX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGl0el9pbml0KHZvaWQpCiB7CiAJaW5pdF9ncGlvX3Jlc2V0KFNQSVRaX0dQSU9fT05fUkVTRVQsIDEsIDApOwogCXBtX3Bvd2VyX29mZiA9IHNwaXR6X3Bvd2Vyb2ZmOwogCWFybV9wbV9yZXN0YXJ0ID0gc3BpdHpfcmVzdGFydDsKIAotCWlmIChtYWNoaW5lX2lzX3NwaXR6KCkpIHsKLQkJc2hhcnBzbF9uYW5kX3BhcnRpdGlvbnNbMV0uc2l6ZSA9IDUgKiAxMDI0ICogMTAyNDsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSkgewotCQlzaGFycHNsX25hbmRfcGFydGl0aW9uc1sxXS5zaXplID0gNTggKiAxMDI0ICogMTAyNDsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKLQkJc2hhcnBzbF9uYW5kX3BhcnRpdGlvbnNbMV0uc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7Ci0JfQotCiAJUE1DUiA9IDB4MDA7CiAKIAkvKiBTdG9wIDMuNk1IeiBhbmQgZHJpdmUgSElHSCB0byBQQ01DSUEgYW5kIENTICovCkBAIC03NTcsOTEgKzk1MywyMiBAQAogCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKIAotCXNwaXR6X2luaXRfc3BpKCk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQlweGFfc2V0X21jaV9pbmZvKCZzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9vaGNpX2luZm8oJnNwaXR6X29oY2lfcGxhdGZvcm1fZGF0YSk7Ci0JcHhhX3NldF9maWNwX2luZm8oJnNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YSk7Ci0Jc2V0X3B4YV9mYl9pbmZvKCZzcGl0el9weGFmYl9pbmZvKTsKLQlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCXNwaXR6X3NwaV9pbml0KCk7CisJc3BpdHpfc2Nvb3BfaW5pdCgpOworCXNwaXR6X21rcF9pbml0KCk7CisJc3BpdHpfa2V5c19pbml0KCk7CisJc3BpdHpfbGVkc19pbml0KCk7CisJc3BpdHpfbW1jX2luaXQoKTsKKwlzcGl0el9wY21jaWFfaW5pdCgpOworCXNwaXR6X2lyZGFfaW5pdCgpOworCXNwaXR6X3VoY19pbml0KCk7CisJc3BpdHpfbGNkX2luaXQoKTsKKwlzcGl0el9ub3JfaW5pdCgpOworCXNwaXR6X25hbmRfaW5pdCgpOworCXNwaXR6X2kyY19pbml0KCk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FLSVRBKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0JPUlpPSSkKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3Igc2hhcnBzbF9ha2l0YV9iYnQgPSB7Ci0JLm9wdGlvbnMgPSAwLAotCS5vZmZzID0gNCwKLQkubGVuID0gMSwKLQkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgotfTsKLQotc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBha2l0YV9vb2JpbmZvID0gewotCS5lY2NieXRlcyA9IDI0LAotCS5lY2Nwb3MgPSB7Ci0JCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCi0JCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCi0JCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAotCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KLX07Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BJVFopIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQotc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2luaXQodm9pZCkKLXsKLQlzcGl0el9maWNwX3BsYXRmb3JtX2RhdGEuZ3Bpb19wd2Rvd24gPSBTUElUWl9HUElPX0lSX09OOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfQk9SWk9JCi0JaWYgKG1hY2hpbmVfaXNfYm9yem9pKCkpIHsKLQkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuYmFkYmxvY2tfcGF0dGVybiA9ICZzaGFycHNsX2FraXRhX2JidDsKLQkJc2hhcnBzbF9uYW5kX3BsYXRmb3JtX2RhdGEuZWNjX2xheW91dCA9ICZha2l0YV9vb2JpbmZvOwotCX0KLSNlbmRpZgotCi0JcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnNwaXR6X3BjbWNpYV9jb25maWc7Ci0KLQljb21tb25faW5pdCgpOwotCi0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzcGl0enNjb29wMl9kZXZpY2UpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9BS0lUQQotLyoKLSAqIEFraXRhIElPIEV4cGFuZGVyCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFraXRhX2lvZXhwID0gewotCS5ncGlvX2Jhc2UJCT0gQUtJVEFfSU9FWFBfR1BJT19CQVNFLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBha2l0YV9pMmNfYm9hcmRfaW5mb1tdID0gewotCXsKLQkJLnR5cGUJCT0gIm1heDczMTAiLAotCQkuYWRkcgkJPSAweDE4LAotCQkucGxhdGZvcm1fZGF0YQk9ICZha2l0YV9pb2V4cCwKLQl9LCB7Ci0JCS50eXBlCQk9ICJ3bTg3NTAiLAotCQkuYWRkcgkJPSAweDFiLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYWtpdGFfaW5pdCh2b2lkKQotewotCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IEFLSVRBX0dQSU9fSVJfT047Ci0KLQlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5iYWRibG9ja19wYXR0ZXJuID0gJnNoYXJwc2xfYWtpdGFfYmJ0OwotCXNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhLmVjY19sYXlvdXQgPSAmYWtpdGFfb29iaW5mbzsKLQotCS8qIFdlIGp1c3QgcHJldGVuZCB0aGUgc2Vjb25kIGVsZW1lbnQgb2YgdGhlIGFycmF5IGRvZXNuJ3QgZXhpc3QgKi8KLQlzcGl0el9wY21jaWFfY29uZmlnLm51bV9kZXZzID0gMTsKLQlwbGF0Zm9ybV9zY29vcF9jb25maWcgPSAmc3BpdHpfcGNtY2lhX2NvbmZpZzsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGFraXRhX2kyY19ib2FyZF9pbmZvKSk7Ci0KLQljb21tb25faW5pdCgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9zcGl0eihzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLAorc3RhdGljIHZvaWQgX19pbml0IHNwaXR6X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsCiAJCXN0cnVjdCB0YWcgKnRhZ3MsIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpCiB7CiAJc2hhcnBzbF9zYXZlX3BhcmFtKCk7CkBAIC04NTQsNyArOTgxLDcgQEAKIE1BQ0hJTkVfU1RBUlQoU1BJVFosICJTSEFSUCBTcGl0eiIpCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5maXh1cAkJPSBmaXh1cF9zcGl0eiwKKwkuZml4dXAJCT0gc3BpdHpfZml4dXAsCiAJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gc3BpdHpfaW5pdCwKQEAgLTg2Niw3ICs5OTMsNyBAQAogTUFDSElORV9TVEFSVChCT1JaT0ksICJTSEFSUCBCb3J6b2kiKQogCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuZml4dXAJCT0gZml4dXBfc3BpdHosCisJLmZpeHVwCQk9IHNwaXR6X2ZpeHVwLAogCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKIAkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IHNwaXR6X2luaXQsCkBAIC04NzgsMTAgKzEwMDUsMTAgQEAKIE1BQ0hJTkVfU1RBUlQoQUtJVEEsICJTSEFSUCBBa2l0YSIpCiAJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5maXh1cAkJPSBmaXh1cF9zcGl0eiwKKwkuZml4dXAJCT0gc3BpdHpfZml4dXAsCiAJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAogCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gYWtpdGFfaW5pdCwKKwkuaW5pdF9tYWNoaW5lCT0gc3BpdHpfaW5pdCwKIAkudGltZXIJCT0gJnB4YV90aW1lciwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCmluZGV4IDQyMDlkZGYuLjdmZTc0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYwpAQCAtMjIsMTEgKzIyLDEwIEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3NoYXJwc2xfcG0uaD4KIAotI2luY2x1ZGUgInNoYXJwc2wuaCIKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCAgICAgICAgIDB4OTkgIC8qIDIuOVYgKi8KQEAgLTE3OCwxMSArMTc3LDExIEBACiAJY2FzZSBTSEFSUFNMX1NUQVRVU19BQ0lOOgogCQlyZXR1cm4gKCgofkdQTFIoU1BJVFpfR1BJT19BQ19JTikpICYgR1BJT19iaXQoU1BJVFpfR1BJT19BQ19JTikpICE9IDApOwogCWNhc2UgU0hBUlBTTF9TVEFUVVNfTE9DSzoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKTsKKwkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayk7CiAJY2FzZSBTSEFSUFNMX1NUQVRVU19DSFJHRlVMTDoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKTsKKwkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCk7CiAJY2FzZSBTSEFSUFNMX1NUQVRVU19GQVRBTDoKLQkJcmV0dXJuIFJFQURfR1BJT19CSVQoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCk7CisJCXJldHVybiBncGlvX2dldF92YWx1ZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKTsKIAljYXNlIFNIQVJQU0xfQUNJTl9WT0xUOgogCQlyZXR1cm4gc2hhcnBzbF9wbV9weGFfcmVhZF9tYXgxMTExKE1BWDExMTFfQUNJTl9WT0xUKTsKIAljYXNlIFNIQVJQU0xfQkFUVF9URU1QOgpAQCAtMjEyLDggKzIxMSw2IEBACiAJLnNob3VsZF93YWtldXAgICAgPSBzcGl0el9zaG91bGRfd2FrZXVwLAogI2lmIGRlZmluZWQoQ09ORklHX0xDRF9DT1JHSSkKIAkuYmFja2xpZ2h0X2xpbWl0ID0gY29yZ2lfbGNkX2xpbWl0X2ludGVuc2l0eSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSkKLQkuYmFja2xpZ2h0X2xpbWl0ICA9IGNvcmdpYmxfbGltaXRfaW50ZW5zaXR5LAogI2VuZGlmCiAJLmNoYXJnZV9vbl92b2x0CSAgPSBTSEFSUFNMX0NIQVJHRV9PTl9WT0xULAogCS5jaGFyZ2Vfb25fdGVtcAkgID0gU0hBUlBTTF9DSEFSR0VfT05fVEVNUCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3N0YXJnYXRlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKaW5kZXggYWY0MGQyYS4uYTY1NGQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3RhcmdhdGUyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTYyLDM3ICs2MywxMiBAQAogI2RlZmluZSBTRzJfR1BJT19uU0RfREVURUNUCTkwCiAjZGVmaW5lIFNHMl9TRF9QT1dFUl9FTkFCTEUJODkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhcmdhdGUyX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCi0JR1BJTzE1X25DU18xLCAvKiBTUkFNICovCi0JLyogU01DOTF4ICovCi0JR1BJTzgwX25DU180LAotCUdQSU80MF9HUElPLCAvKmNhYmxlIGRldGVjdD8qLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2cyX2ltMl91bmlmaWVkX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCS8qIERldmljZSBJZGVudGlmaWNhdGlvbiBmb3Igd2FrZXVwKi8KIAlHUElPMTAyX0dQSU8sCi0KLQkvKiBCdXR0b24gKi8KLQlHUElPOTFfR1BJTyB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAotCiAJLyogREE5MDMwICovCiAJR1BJTzFfR1BJTywKIAotCS8qIENvbXBhY3QgRmxhc2ggKi8KLQlHUElPNzlfUFNLVFNFTCwKLQlHUElPNDhfblBPRSwKLQlHUElPNDlfblBXRSwKLQlHUElPNTBfblBJT1IsCi0JR1BJTzUxX25QSU9XLAotCUdQSU84NV9uUENFXzEsCi0JR1BJTzU0X25QQ0VfMiwKLQlHUElPNTVfblBSRUcsCi0JR1BJTzU2X25QV0FJVCwKLQlHUElPNTdfbklPSVMxNiwKLQlHUElPMTIwX0dQSU8sIC8qIEJ1ZmYgY3RybCAqLwotCUdQSU8xMDhfR1BJTywgLyogUG93ZXIgY3RybCAqLwotCUdQSU84Ml9HUElPLCAvKiBSZXNldCAqLwotCUdQSU81M19HUElPLCAvKiBTRzJfUzBfR1BJT19ERVRFQ1QgKi8KLQogCS8qIE1NQyAqLwogCUdQSU8zMl9NTUNfQ0xLLAogCUdQSU8xMTJfTU1DX0NNRCwKQEAgLTEwMCw0OSArNzYsNDQgQEAKIAlHUElPMTA5X01NQ19EQVRfMSwKIAlHUElPMTEwX01NQ19EQVRfMiwKIAlHUElPMTExX01NQ19EQVRfMywKLQlHUElPOTBfR1BJTywgLyogblNEIGRldGVjdCAqLwotCUdQSU84OV9HUElPLCAvKiBTRF9QT1dFUl9FTkFCTEUgKi8KIAotCS8qIEJsdWV0b290aCAqLwotCUdQSU84MV9HUElPLCAvKiByZXNldCAqLwotCi0JLyogY2MyNDIwIDgwMi4xNS40IHJhZGlvICovCi0JR1BJTzIyX0dQSU8sCQkvKiBDQ19SU1ROICAob3V0KSovCi0JR1BJTzExNF9HUElPLAkJLyogQ0NfRklGTyAoaW4pICovCi0JR1BJTzExNl9HUElPLCAJCS8qIENDX0NDQSAoaW4pICovCi0JR1BJTzBfR1BJTywJCS8qIENDX0ZJRk9QIChpbikgKi8KLQlHUElPMTZfR1BJTywJCS8qIENDU0ZEIChpbikgKi8KLQlHUElPMzlfR1BJTywJCS8qIENTbiAob3V0KSAqLworCS8qIDgwMi4xNS40IHJhZGlvIC0gZHJpdmVyIG91dCBvZiBtYWlubGluZSAqLworCUdQSU8yMl9HUElPLAkJCS8qIENDX1JTVE4gKi8KKwlHUElPMTE0X0dQSU8sCQkJLyogQ0NfRklGTyAqLworCUdQSU8xMTZfR1BJTywJCQkvKiBDQ19DQ0EgKi8KKwlHUElPMF9HUElPLAkJCS8qIENDX0ZJRk9QICovCisJR1BJTzE2X0dQSU8sCQkJLyogQ0NTRkQgKi8KKwlHUElPMTE1X0dQSU8sCQkJLyogUG93ZXIgZW5hYmxlICovCiAKIAkvKiBJMkMgKi8KIAlHUElPMTE3X0kyQ19TQ0wsCiAJR1BJTzExOF9JMkNfU0RBLAogCiAJLyogU1NQIDMgLSA4MDIuMTUuNCByYWRpbyAqLwotCUdQSU8zOV9HUElPLCAvKiBjaGlwIHNlbGVjdCAqLworCUdQSU8zOV9HUElPLAkJCS8qIENoaXAgU2VsZWN0ICovCiAJR1BJTzM0X1NTUDNfU0NMSywKIAlHUElPMzVfU1NQM19UWEQsCiAJR1BJTzQxX1NTUDNfUlhELAogCi0JLyogU1NQIDIgKi8KKwkvKiBTU1AgMiB0byBkYXVnaHRlciBib2FyZHMgKi8KIAlHUElPMTFfU1NQMl9SWEQsCiAJR1BJTzM4X1NTUDJfVFhELAogCUdQSU8zNl9TU1AyX1NDTEssCiAJR1BJTzM3X0dQSU8sIC8qIGNoaXAgc2VsZWN0ICovCiAKLQkvKiBTU1AgMSAqLwotCUdQSU8yNl9TU1AxX1JYRCwKLQlHUElPMjVfU1NQMV9UWEQsCisJLyogU1NQIDEgLSB0byBkYXVnaHRlciBib2FyZHMgKi8KKwlHUElPMjRfR1BJTywJCQkvKiBDaGlwIFNlbGVjdCAqLwogCUdQSU8yM19TU1AxX1NDTEssCi0JR1BJTzI0X0dQSU8sIC8qIGNoaXAgc2VsZWN0ICovCisJR1BJTzI1X1NTUDFfVFhELAorCUdQSU8yNl9TU1AxX1JYRCwKIAotCS8qIEJUVUFSVCAqLworCS8qIEJUVUFSVCBCYXNpYyBDb25uZWN0b3IqLwogCUdQSU80Ml9CVFVBUlRfUlhELAogCUdQSU80M19CVFVBUlRfVFhELAogCUdQSU80NF9CVFVBUlRfQ1RTLAogCUdQSU80NV9CVFVBUlRfUlRTLAogCi0JLyogU1RVQVJUICovCisJLyogU1RVQVJUICAtIElNMiB2aWEgZGVidWcgYm9hcmQgbm90IHN1cmUgb24gU0cyKi8KIAlHUElPNDZfU1RVQVJUX1JYRCwKIAlHUElPNDdfU1RVQVJUX1RYRCwKIApAQCAtMTUwLDQ3ICsxMjEsMTcgQEAKIAlHUElPOTZfR1BJTywJLyogYWNjZWxlcm9tZXRlciBpbnRlcnJ1cHQgKi8KIAlHUElPOTlfR1BJTywJLyogQURDIGludGVycnVwdCAqLwogCisJLyogU0hUMTUgKi8KKwlHUElPMTAwX0dQSU8sCisJR1BJTzk4X0dQSU8sCisKKwkvKiBCYXNpYyBzZW5zb3IgYm9hcmQgKi8KKwlHUElPOTZfR1BJTywJLyogYWNjZWxlcm9tZXRlciBpbnRlcnJ1cHQgKi8KKwlHUElPOTlfR1BJTywJLyogQURDIGludGVycnVwdCAqLworCiAJLyogQ29ubmVjdG9yIHBpbnMgc3BlY2lmaWVkIGFzIGdwaW9zICovCiAJR1BJTzk0X0dQSU8sIC8qIGxhcmdlIGJhc2ljIGNvbm5lY3RvciBwaW4gMTQgKi8KIAlHUElPMTBfR1BJTywgLyogbGFyZ2UgYmFzaWMgY29ubmVjdG9yIHBpbiAyMyAqLwotCi0JLyogU0hUMTUgKi8KLQlHUElPMTAwX0dQSU8sCi0JR1BJTzk4X0dQSU8sCi19OwotCi0vKioKLSAqIHN0YXJnYXRlMl9yZXNldF9ibHVldG9vdGgoKSByZXNldCB0aGUgYmx1ZWNvcmUgdG8gZW5zdXJlIGNvbnNpc3RlbnQgc3RhdGUKLSAqKi8KLXN0YXRpYyBpbnQgc3RhcmdhdGUyX3Jlc2V0X2JsdWV0b290aCh2b2lkKQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNHMl9CVF9SRVNFVCwgIlNHMl9CVF9SRVNFVCIpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IGdwaW8gZm9yIGJsdWV0b290aCByZXNldCBcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoU0cyX0JUX1JFU0VULCAxKTsKLQltZGVsYXkoNSk7Ci0JLyogbm93IHJlc2V0IGl0IC0gNSBtc2VjIG1pbmltdW0gKi8KLQlncGlvX3NldF92YWx1ZShTRzJfQlRfUkVTRVQsIDApOwotCW1kZWxheSgxMCk7Ci0JZ3Bpb19zZXRfdmFsdWUoU0cyX0JUX1JFU0VULCAxKTsKLQlncGlvX2ZyZWUoU0cyX0JUX1JFU0VUKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBsZWRfaW5mbyBzdGFyZ2F0ZTJfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgPSAic2cyOnJlZCIsCi0JCS5mbGFncyA9IERBOTAzMF9MRURfUkFURV9PTiwKLQl9LCB7Ci0JCS5uYW1lID0gInNnMjpibHVlIiwKLQkJLmZsYWdzID0gREE5MDMwX0xFRF9SQVRFX09OLAotCX0sIHsKLQkJLm5hbWUgPSAic2cyOmdyZWVuIiwKLQkJLmZsYWdzID0gREE5MDMwX0xFRF9SQVRFX09OLAotCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNodDE1X3BsYXRmb3JtX2RhdGEgcGxhdGZvcm1fZGF0YV9zaHQxNSA9IHsKQEAgLTM1Miw2ICsyOTMsNTM3IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzdGFyZ2F0ZTJmbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9ICJCb290bG9hZGVyIiwKKwkJLnNpemUgPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwkJLm1hc2tfZmxhZ3MgPSAwLAorCX0sIHsKKwkJLm5hbWUgPSAiS2VybmVsIiwKKwkJLnNpemUgPSAweDAwMjAwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDA0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPSAwCisJfSwgeworCQkubmFtZSA9ICJGaWxlc3lzdGVtIiwKKwkJLnNpemUgPSAweDAxREMwMDAwLAorCQkub2Zmc2V0ID0gMHgwMDI0MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPSAwCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2VzID0geworCS5zdGFydCA9IFBYQV9DUzBfUEhZUywKKwkuZW5kID0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBzdGFyZ2F0ZTJfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUgPSAiY2ZpX3Byb2JlIiwKKwkucGFydHMgPSBzdGFyZ2F0ZTJmbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc3RhcmdhdGUyZmxhc2hfcGFydGl0aW9ucyksCisJLm5hbWUgPSAiUFhBMjd4T25DaGlwUk9NIiwKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RhcmdhdGUyX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZSA9ICJweGEyeHgtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfMF9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdCA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyXzFfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBweGFfc3NwX21hc3Rlcl8yX2luZm8gPSB7CisJLm51bV9jaGlwc2VsZWN0ID0gMSwKK307CisKKy8qIEFuIHVwY29taW5nIGtlcm5lbCBjaGFuZ2Ugd2lsbCBzY3JhcCBTRlJNIHVzYWdlIHNvIHRoZXNlCisgKiBkcml2ZXJzIGhhdmUgYmVlbiBtb3ZlZCB0byB1c2UgZ3BpbydzIHZpYSBjc19jb250cm9sICovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBzdGFjY2VsX2NoaXBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gOCwKKwkucnhfdGhyZXNob2xkID0gOCwKKwkuZG1hX2J1cnN0X3NpemUgPSA4LAorCS50aW1lb3V0ID0gMjM1LAorCS5ncGlvX2NzID0gMjQsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBjYzI0MjBfaW5mbyA9IHsKKwkudHhfdGhyZXNob2xkID0gOCwKKwkucnhfdGhyZXNob2xkID0gOCwKKwkuZG1hX2J1cnN0X3NpemUgPSA4LAorCS50aW1lb3V0ID0gMjM1LAorCS5ncGlvX2NzID0gMzksCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHNwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJsaXMzbDAyZHEiLAorCQkubWF4X3NwZWVkX2h6ID0gODAwMDAwMCwvKiA4TUh6IG1heCBzcGkgZnJlcXVlbmN5IGF0IDNWICovCisJCS5idXNfbnVtID0gMSwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLmNvbnRyb2xsZXJfZGF0YSA9ICZzdGFjY2VsX2NoaXBfaW5mbywKKwkJLmlycSA9IElSUV9HUElPKDk2KSwKKwl9LCB7CisJCS5tb2RhbGlhcyA9ICJjYzI0MjAiLAorCQkubWF4X3NwZWVkX2h6ID0gNjUwMDAwMCwKKwkJLmJ1c19udW0gPSAzLAorCQkuY2hpcF9zZWxlY3QgPSAwLAorCQkuY29udHJvbGxlcl9kYXRhID0gJmNjMjQyMF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBzZzJfdWRjX2NvbW1hbmQoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKKwkJVVAyT0NSIHw9ICBVUDJPQ1JfSFhPRSAgfCBVUDJPQ1JfRFBQVUUgfCBVUDJPQ1JfRFBQVUJFOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+KFVQMk9DUl9IWE9FICB8IFVQMk9DUl9EUFBVRSB8IFVQMk9DUl9EUFBVQkUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGkyY19wd3JfcGRhdGEgPSB7CisJLmZhc3RfbW9kZSA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CisJLmZhc3RfbW9kZSA9IDEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW1vdGUyX3N0YXJnYXRlMl9pbml0KHZvaWQpCit7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShzZzJfaW0yX3VuaWZpZWRfcGluX2NvbmZpZykpOworCisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDEsICZweGFfc3NwX21hc3Rlcl8wX2luZm8pOworCXB4YTJ4eF9zZXRfc3BpX2luZm8oMiwgJnB4YV9zc3BfbWFzdGVyXzFfaW5mbyk7CisJcHhhMnh4X3NldF9zcGlfaW5mbygzLCAmcHhhX3NzcF9tYXN0ZXJfMl9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhzcGlfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGlfYm9hcmRfaW5mbykpOworCisKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKCZpMmNfcHdyX3BkYXRhKTsKKwlweGFfc2V0X2kyY19pbmZvKCZpMmNfcGRhdGEpOworfQorCisjaWZkZWYgQ09ORklHX01BQ0hfSU5URUxNT1RFMgorLyogQXMgdGhlIHRoZSBpbW90ZTIgZG9lc24ndCBjdXJyZW50bHkgaGF2ZSBhIGNvbnZlbnRpb25hbCBTRCBzbG90CisgKiB0aGVyZSBpcyBubyBvcHRpb24gdG8gaG90cGx1ZyBjYXJkcywgbWFraW5nIGFsbCB0aGlzIHJhdGhlciBzaW1wbGUKKyAqLworc3RhdGljIGludCBpbW90ZTJfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJhdGhlciBzaW1wbGUgY2FzZSBhcyBob3RwbHVnZ2luZyBub3QgcG9zc2libGUgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaW1vdGUyX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LCAvKiBkZWZhdWx0IGFueXdheSAqLworCS5nZXRfcm8gPSBpbW90ZTJfbWNpX2dldF9ybywKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IC0xLAorCS5ncGlvX2NhcmRfcm8JPSAtMSwKKwkuZ3Bpb19wb3dlciA9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBpbW90ZTJfbGVkX3BpbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgID0gICJpbW90ZTI6cmVkIiwKKwkJLmdwaW8gICAgICAgPSAxMDMsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LCB7CisJCS5uYW1lICAgICAgID0gImltb3RlMjpncmVlbiIsCisJCS5ncGlvICAgICAgID0gMTA0LAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwgeworCQkubmFtZSAgICAgICA9ICJpbW90ZTI6Ymx1ZSIsCisJCS5ncGlvICAgICAgID0gMTA1LAorCQkuYWN0aXZlX2xvdyA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBpbW90ZTJfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShpbW90ZTJfbGVkX3BpbnMpLAorCS5sZWRzICAgICA9IGltb3RlMl9sZWRfcGlucywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGltb3RlMl9sZWRzID0geworCS5uYW1lID0gImxlZHMtZ3BpbyIsCisJLmlkICAgPSAtMSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpbW90ZTJfbGVkX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGE5MDN4X3N1YmRldl9pbmZvIGltb3RlMl9kYTkwMzBfc3ViZGV2c1tdID0geworCXsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8yLAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2NfYmJpb10sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzMsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnN0YXJnYXRlMl9sZG9faW5pdF9kYXRhW3ZjY19iYl0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzQsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnN0YXJnYXRlMl9sZG9faW5pdF9kYXRhW3ZjY19weGFfZmxhc2hdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE81LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2NfY2MyNDIwXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPNiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX2xkb19pbml0X2RhdGFbdmNjX3ZyZWZdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE83LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2Nfc3JhbV9leHRdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE84LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2NfbWljYV0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnN0YXJnYXRlMl9sZG9faW5pdF9kYXRhW3ZjY19idF0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzEwLAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2Nfc2Vuc29yXzFfOF0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzExLAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2Nfc2Vuc29yXzNdLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xMiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX2xkb19pbml0X2RhdGFbdmNjX2xjZF0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzE1LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2NfcHhhX3BsbF0sCisJfSwgeworCQkubmFtZSA9ICJkYTkwM3gtcmVndWxhdG9yIiwKKwkJLmlkID0gREE5MDMwX0lEX0xETzE3LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfbGRvX2luaXRfZGF0YVt2Y2NfcHhhX3VzaW1dLAorCX0sIHsKKwkJLm5hbWUgPSAiZGE5MDN4LXJlZ3VsYXRvciIsIC8qcHhhIHZjYyBpL28gYW5kIGNjMjQyMCB2Y2MgaS9vICovCisJCS5pZCA9IERBOTAzMF9JRF9MRE8xOCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX2xkb19pbml0X2RhdGFbdmNjX2lvXSwKKwl9LCB7CisJCS5uYW1lID0gImRhOTAzeC1yZWd1bGF0b3IiLAorCQkuaWQgPSBEQTkwMzBfSURfTERPMTksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnN0YXJnYXRlMl9sZG9faW5pdF9kYXRhW3ZjY19weGFfbWVtXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBkYTkwM3hfcGxhdGZvcm1fZGF0YSBpbW90ZTJfZGE5MDMwX3BkYXRhID0geworCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUoaW1vdGUyX2RhOTAzMF9zdWJkZXZzKSwKKwkuc3ViZGV2cyA9IGltb3RlMl9kYTkwMzBfc3ViZGV2cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpbW90ZTJfcHdyX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQkudHlwZSA9ICJkYTkwMzAiLAorCQkuYWRkciA9IDB4NDksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmltb3RlMl9kYTkwMzBfcGRhdGEsCisJCS5pcnEgPSBncGlvX3RvX2lycSgxKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGltb3RlMl9pMmNfYm9hcmRfaW5mb1tdID0geworCXsgLyogVUNBTSBzZW5zb3IgYm9hcmQgKi8KKwkJLnR5cGUgPSAibWF4MTIzOSIsCisJCS5hZGRyID0gMHgzNSwKKwl9LCB7IC8qIElUUzQwMCBTZW5zb3IgYm9hcmQgb25seSAqLworCQkudHlwZSA9ICJtYXgxMzYzIiwKKwkJLmFkZHIgPSAweDM0LAorCQkvKiBUaHJvdWdoIGEgbmFuZCBnYXRlIC0gQWxzbyBiZXdhcmUsIG9uIFYyIHNlbnNvciBib2FyZCB0aGUKKwkJICogcHVsbCB1cCByZXNpc3RvcnMgYXJlIG1pc3NpbmcuCisJCSAqLworCQkuaXJxID0gSVJRX0dQSU8oOTkpLAorCX0sIHsgLyogSVRTNDAwIFNlbnNvciBib2FyZCBvbmx5ICovCisJCS50eXBlID0gInRzbDI1NjEiLAorCQkuYWRkciA9IDB4NDksCisJCS8qIFRocm91Z2ggYSBuYW5kIGdhdGUgLSBBbHNvIGJld2FyZSwgb24gVjIgc2Vuc29yIGJvYXJkIHRoZQorCQkgKiBwdWxsIHVwIHJlc2lzdG9ycyBhcmUgbWlzc2luZy4KKwkJICovCisJCS5pcnEgPSBJUlFfR1BJTyg5OSksCisJfSwgeyAvKiBJVFM0MDAgU2Vuc29yIGJvYXJkIG9ubHkgKi8KKwkJLnR5cGUgPSAidG1wMTc1IiwKKwkJLmFkZHIgPSAweDRBLAorCQkuaXJxID0gSVJRX0dQSU8oOTYpLAorCX0sIHsgLyogSU1CNDAwIE11bHRpbWVkaWEgYm9hcmQgKi8KKwkJLnR5cGUgPSAid204OTQwIiwKKwkJLmFkZHIgPSAweDFBLAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbW90ZTJfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisKKwkvKiBCdXR0b24gKi8KKwlHUElPOTFfR1BJTywKKworCS8qIExFRFMgKi8KKwlHUElPMTAzX0dQSU8sIC8qIHJlZCBsZWQgKi8KKwlHUElPMTA0X0dQSU8sIC8qIGdyZWVuIGxlZCAqLworCUdQSU8xMDVfR1BJTywgLyogYmx1ZSBsZWQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gaW1vdGUyX3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLnVkY19jb21tYW5kCQk9IHNnMl91ZGNfY29tbWFuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppbW90ZTJfZGV2aWNlc1tdID0geworCSZzdGFyZ2F0ZTJfZmxhc2hfZGV2aWNlLAorCSZpbW90ZTJfbGVkcywKKwkmc2h0MTUsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaW1vdGUyX2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShpbW90ZTJfcGluX2NvbmZpZykpOworCisJaW1vdGUyX3N0YXJnYXRlMl9pbml0KCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbW90ZTJfZGV2aWNlcywgQVJSQVlfU0laRShpbW90ZTJfZGV2aWNlcykpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaW1vdGUyX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoaW1vdGUyX2kyY19ib2FyZF9pbmZvKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaW1vdGUyX3B3cl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGltb3RlMl9wd3JfaTJjX2JvYXJkX2luZm8pKTsKKworCXB4YV9zZXRfbWNpX2luZm8oJmltb3RlMl9tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF91ZGNfaW5mbygmaW1vdGUyX3VkY19pbmZvKTsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfU1RBUkdBVEUyCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJnYXRlMl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKworCUdQSU8xNV9uQ1NfMSwgLyogU1JBTSAqLworCS8qIFNNQzkxeCAqLworCUdQSU84MF9uQ1NfNCwKKwlHUElPNDBfR1BJTywgLypjYWJsZSBkZXRlY3Q/Ki8KKworCS8qIEJ1dHRvbiAqLworCUdQSU85MV9HUElPIHwgV0FLRVVQX09OX0xFVkVMX0hJR0gsCisKKwkvKiBDb21wYWN0IEZsYXNoICovCisJR1BJTzc5X1BTS1RTRUwsCisJR1BJTzQ4X25QT0UsCisJR1BJTzQ5X25QV0UsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPODVfblBDRV8xLAorCUdQSU81NF9uUENFXzIsCisJR1BJTzU1X25QUkVHLAorCUdQSU81Nl9uUFdBSVQsCisJR1BJTzU3X25JT0lTMTYsCisJR1BJTzEyMF9HUElPLCAvKiBCdWZmIGN0cmwgKi8KKwlHUElPMTA4X0dQSU8sIC8qIFBvd2VyIGN0cmwgKi8KKwlHUElPODJfR1BJTywgLyogUmVzZXQgKi8KKwlHUElPNTNfR1BJTywgLyogU0cyX1MwX0dQSU9fREVURUNUICovCisKKwkvKiBNTUMgbm90IHNoYXJlZCB3aXRoIGltb3RlMiAqLworCUdQSU85MF9HUElPLCAvKiBuU0QgZGV0ZWN0ICovCisJR1BJTzg5X0dQSU8sIC8qIFNEX1BPV0VSX0VOQUJMRSAqLworCisJLyogQmx1ZXRvb3RoICovCisJR1BJTzgxX0dQSU8sIC8qIHJlc2V0ICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lID0gInNtYzkxeC1yZWdzIiwKKwkJLnN0YXJ0ID0gKFBYQV9DUzRfUEhZUyArIDB4MzAwKSwKKwkJLmVuZCA9IChQWEFfQ1M0X1BIWVMgKyAweGZmZmZmKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9HUElPKDQwKSwKKwkJLmVuZCA9IElSUV9HUElPKDQwKSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzdGFyZ2F0ZTJfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzID0gU01DOTFYX1VTRV84QklUIHwgU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9VU0VfMzJCSVQKKwl8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUgPSAic21jOTF4IiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlID0gc21jOTF4X3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfc21jOTF4X2luZm8sCisJfSwKK307CisKKworLyoKKyAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCisgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydCAvIGVqZWN0LgorICovCitzdGF0aWMgaW50IHN0YXJnYXRlMl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBpcnFfaGFuZGxlcl90IHN0YXJnYXRlMl9kZXRlY3RfaW50LAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KFNHMl9TRF9QT1dFUl9FTkFCTEUsICJTRzJfc2RfcG93ZXJfZW5hYmxlIik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCB0aGUgZ3BpbyBmb3IgU0QgcG93ZXIgY29udHJvbCIpOworCQlnb3RvIHJldHVybl9lcnI7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChTRzJfU0RfUE9XRVJfRU5BQkxFLCAwKTsKKworCWVyciA9IGdwaW9fcmVxdWVzdChTRzJfR1BJT19uU0RfREVURUNULCAiU0cyX3NkX2RldGVjdCIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBnZXQgdGhlIHNkIGRldGVjdCBncGlvIik7CisJCWdvdG8gZnJlZV9wb3dlcl9lbjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0cyX0dQSU9fblNEX0RFVEVDVCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShJUlFfR1BJTyhTRzJfR1BJT19uU0RfREVURUNUKSwKKwkJCSAgc3RhcmdhdGUyX2RldGVjdF9pbnQsCisJCQkgIElSUV9UWVBFX0VER0VfQk9USCwKKwkJCSAgIk1NQyBjYXJkIGRldGVjdCIsCisJCQkgIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOworCQlnb3RvIGZyZWVfbnNkX2RldGVjdDsKKwl9CisJcmV0dXJuIDA7CisKKyBmcmVlX25zZF9kZXRlY3Q6CisJZ3Bpb19mcmVlKFNHMl9HUElPX25TRF9ERVRFQ1QpOworIGZyZWVfcG93ZXJfZW46CisJZ3Bpb19mcmVlKFNHMl9TRF9QT1dFUl9FTkFCTEUpOworIHJldHVybl9lcnI6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBzdGFyZ2F0ZTJfbWNpX3NldHBvd2VyKCkgLSBzZXQgc3RhdGUgb2YgbW1jIHBvd2VyIHN1cHBseQorICoKKyAqIFZlcnkgc2ltcGxlIGNvbnRyb2wuIEVpdGhlciBpdCBpcyBvbiBvciBvZmYgYW5kIGlzIGNvbnRyb2xsZWQgYnkKKyAqIGEgZ3BpbyBwaW4gKi8KK3N0YXRpYyB2b2lkIHN0YXJnYXRlMl9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQoreworCWdwaW9fc2V0X3ZhbHVlKFNHMl9TRF9QT1dFUl9FTkFCTEUsICEhdmRkKTsKK30KKworc3RhdGljIHZvaWQgc3RhcmdhdGUyX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJUlFfR1BJTyhTRzJfR1BJT19uU0RfREVURUNUKSwgZGF0YSk7CisJZ3Bpb19mcmVlKFNHMl9TRF9QT1dFUl9FTkFCTEUpOworCWdwaW9fZnJlZShTRzJfR1BJT19uU0RfREVURUNUKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBzdGFyZ2F0ZTJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLmRldGVjdF9kZWxheV9tcyA9IDI1MCwKKwkub2NyX21hc2sgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuaW5pdCA9IHN0YXJnYXRlMl9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgPSBzdGFyZ2F0ZTJfbWNpX3NldHBvd2VyLAorCS5leGl0ID0gc3RhcmdhdGUyX21jaV9leGl0LAorfTsKKworCisvKgorICogU1JBTSAtIFRoZSBTdGFyZ2F0ZSAyIGhhcyAzMk1CIG9mIFNSQU0uCisgKgorICogSGVyZSBpdCBpcyBtYWRlIGF2YWlsYWJsZSBhcyBhbiBNVEQuIFRoaXMgd2lsbCB0aGVuCisgKiB0eXBpY2FsbHkgaGF2ZSBhIGNpZnMgZmlsZXN5c3RlbSBjcmVhdGVkIG9uIGl0IHRvIHByb3ZpZGUKKyAqIGZhc3QgdGVtcG9yYXJ5IHN0b3JhZ2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3JhbV9yZXNvdXJjZXMgPSB7CisJLnN0YXJ0ID0gUFhBX0NTMV9QSFlTLAorCS5lbmQgPSBQWEFfQ1MxX1BIWVMgKyBTWl8zMk0tMSwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdGFyZ2F0ZTJfc3JhbV9wZGF0YSA9IHsKKwkubWFwbmFtZSA9ICJTdGFyZ2F0ZTIgU1JBTSIsCisJLmJhbmt3aWR0aCA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGFyZ2F0ZTJfc3JhbSA9IHsKKwkubmFtZSA9ICJtdGQtcmFtIiwKKwkuaWQgPSAwLAorCS5yZXNvdXJjZSA9ICZzcmFtX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX3NyYW1fcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNmODU3eF9wbGF0Zm9ybV9kYXRhIHBsYXRmb3JtX2RhdGFfcGNmODU3eCA9IHsKKwkuZ3Bpb19iYXNlID0gMTI4LAorCS5uX2xhdGNoID0gMCwKKwkuc2V0dXAgPSBOVUxMLAorCS50ZWFyZG93biA9IE5VTEwsCisJLmNvbnRleHQgPSBOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgcGNhOTUwMF9lZXByb21fcGRhdGEgPSB7CisJLmJ5dGVfbGVuID0gMjU2LAorCS5wYWdlX3NpemUgPSA0LAorfTsKKworLyoqCisgKiBzdGFyZ2F0ZTJfcmVzZXRfYmx1ZXRvb3RoKCkgcmVzZXQgdGhlIGJsdWVjb3JlIHRvIGVuc3VyZSBjb25zaXN0ZW50IHN0YXRlCisgKiovCitzdGF0aWMgaW50IHN0YXJnYXRlMl9yZXNldF9ibHVldG9vdGgodm9pZCkKK3sKKwlpbnQgZXJyOworCWVyciA9IGdwaW9fcmVxdWVzdChTRzJfQlRfUkVTRVQsICJTRzJfQlRfUkVTRVQiKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBncGlvIGZvciBibHVldG9vdGggcmVzZXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoU0cyX0JUX1JFU0VULCAxKTsKKwltZGVsYXkoNSk7CisJLyogbm93IHJlc2V0IGl0IC0gNSBtc2VjIG1pbmltdW0gKi8KKwlncGlvX3NldF92YWx1ZShTRzJfQlRfUkVTRVQsIDApOworCW1kZWxheSgxMCk7CisJZ3Bpb19zZXRfdmFsdWUoU0cyX0JUX1JFU0VULCAxKTsKKwlncGlvX2ZyZWUoU0cyX0JUX1JFU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsZWRfaW5mbyBzdGFyZ2F0ZTJfbGVkc1tdID0geworCXsKKwkJLm5hbWUgPSAic2cyOnJlZCIsCisJCS5mbGFncyA9IERBOTAzMF9MRURfUkFURV9PTiwKKwl9LCB7CisJCS5uYW1lID0gInNnMjpibHVlIiwKKwkJLmZsYWdzID0gREE5MDMwX0xFRF9SQVRFX09OLAorCX0sIHsKKwkJLm5hbWUgPSAic2cyOmdyZWVuIiwKKwkJLmZsYWdzID0gREE5MDMwX0xFRF9SQVRFX09OLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyBzdGFyZ2F0ZTJfZGE5MDMwX3N1YmRldnNbXSA9IHsKIAl7CiAJCS5uYW1lID0gImRhOTAzeC1sZWQiLApAQCAtNDMzLDE5MCArOTA1LDE1IEBACiAJLnN1YmRldnMgPSBzdGFyZ2F0ZTJfZGE5MDMwX3N1YmRldnMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5uYW1lID0gInNtYzkxeC1yZWdzIiwKLQkJLnN0YXJ0ID0gKFBYQV9DUzRfUEhZUyArIDB4MzAwKSwKLQkJLmVuZCA9IChQWEFfQ1M0X1BIWVMgKyAweGZmZmZmKSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9HUElPKDQwKSwKLQkJLmVuZCA9IElSUV9HUElPKDQwKSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzdGFyZ2F0ZTJfc21jOTF4X2luZm8gPSB7Ci0JLmZsYWdzID0gU01DOTFYX1VTRV84QklUIHwgU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9VU0VfMzJCSVQKLQl8IFNNQzkxWF9OT1dBSVQgfCBTTUM5MVhfVVNFX0RNQSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic21jOTF4IiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gc21jOTF4X3Jlc291cmNlcywKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfc21jOTF4X2luZm8sCi0JfSwKLX07Ci0KLQotCi0vKgotICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKLSAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0IC8gZWplY3QuCi0gKi8KLXN0YXRpYyBpbnQgc3RhcmdhdGUyX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIGlycV9oYW5kbGVyX3Qgc3RhcmdhdGUyX2RldGVjdF9pbnQsCi0JCQkgICAgICB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoU0cyX1NEX1BPV0VSX0VOQUJMRSwgIlNHMl9zZF9wb3dlcl9lbmFibGUiKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZ2V0IHRoZSBncGlvIGZvciBTRCBwb3dlciBjb250cm9sIik7Ci0JCWdvdG8gcmV0dXJuX2VycjsKLQl9Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNHMl9TRF9QT1dFUl9FTkFCTEUsIDApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNHMl9HUElPX25TRF9ERVRFQ1QsICJTRzJfc2RfZGV0ZWN0Iik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCB0aGUgc2QgZGV0ZWN0IGdwaW8iKTsKLQkJZ290byBmcmVlX3Bvd2VyX2VuOwotCX0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRzJfR1BJT19uU0RfREVURUNUKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKElSUV9HUElPKFNHMl9HUElPX25TRF9ERVRFQ1QpLAotCQkJICBzdGFyZ2F0ZTJfZGV0ZWN0X2ludCwKLQkJCSAgSVJRX1RZUEVfRURHRV9CT1RILAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwKLQkJCSAgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JCWdvdG8gZnJlZV9uc2RfZGV0ZWN0OwotCX0KLQlyZXR1cm4gMDsKLQotIGZyZWVfbnNkX2RldGVjdDoKLQlncGlvX2ZyZWUoU0cyX0dQSU9fblNEX0RFVEVDVCk7Ci0gZnJlZV9wb3dlcl9lbjoKLQlncGlvX2ZyZWUoU0cyX1NEX1BPV0VSX0VOQUJMRSk7Ci0gcmV0dXJuX2VycjoKLQlyZXR1cm4gZXJyOwotfQotCi0vKioKLSAqIHN0YXJnYXRlMl9tY2lfc2V0cG93ZXIoKSAtIHNldCBzdGF0ZSBvZiBtbWMgcG93ZXIgc3VwcGx5Ci0gKgotICogVmVyeSBzaW1wbGUgY29udHJvbC4gRWl0aGVyIGl0IGlzIG9uIG9yIG9mZiBhbmQgaXMgY29udHJvbGxlZCBieQotICogYSBncGlvIHBpbiAqLwotc3RhdGljIHZvaWQgc3RhcmdhdGUyX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoU0cyX1NEX1BPV0VSX0VOQUJMRSwgISF2ZGQpOwotfQotCi1zdGF0aWMgdm9pZCBzdGFyZ2F0ZTJfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKElSUV9HUElPKFNHMl9HUElPX25TRF9ERVRFQ1QpLCBkYXRhKTsKLQlncGlvX2ZyZWUoU0cyX1NEX1BPV0VSX0VOQUJMRSk7Ci0JZ3Bpb19mcmVlKFNHMl9HUElPX25TRF9ERVRFQ1QpOwotfQotCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHN0YXJnYXRlMl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5X21zID0gMjUwLAotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0ID0gc3RhcmdhdGUyX21jaV9pbml0LAotCS5zZXRwb3dlciA9IHN0YXJnYXRlMl9tY2lfc2V0cG93ZXIsCi0JLmV4aXQgPSBzdGFyZ2F0ZTJfbWNpX2V4aXQsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc3RhcmdhdGUyZmxhc2hfcGFydGl0aW9uc1tdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHN0YXJnYXRlMl9wd3JfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7Ci0JCS5uYW1lID0gIkJvb3Rsb2FkZXIiLAotCQkuc2l6ZSA9IDB4MDAwNDAwMDAsCi0JCS5vZmZzZXQgPSAwLAotCQkubWFza19mbGFncyA9IDAsCi0JfSwgewotCQkubmFtZSA9ICJLZXJuZWwiLAotCQkuc2l6ZSA9IDB4MDAyMDAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMDQwMDAwLAotCQkubWFza19mbGFncyA9IDAKLQl9LCB7Ci0JCS5uYW1lID0gIkZpbGVzeXN0ZW0iLAotCQkuc2l6ZSA9IDB4MDFEQzAwMDAsCi0JCS5vZmZzZXQgPSAweDAwMjQwMDAwLAotCQkubWFza19mbGFncyA9IDAKKwkJLnR5cGUgPSAiZGE5MDMwIiwKKwkJLmFkZHIgPSAweDQ5LAorCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfZGE5MDMwX3BkYXRhLAorCQkuaXJxID0gZ3Bpb190b19pcnEoMSksCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IFBYQV9DUzBfUEhZUywKLQkuZW5kID0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBzdGFyZ2F0ZTJfZmxhc2hfZGF0YSA9IHsKLQkubWFwX25hbWUgPSAiY2ZpX3Byb2JlIiwKLQkucGFydHMgPSBzdGFyZ2F0ZTJmbGFzaF9wYXJ0aXRpb25zLAotCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc3RhcmdhdGUyZmxhc2hfcGFydGl0aW9ucyksCi0JLm5hbWUgPSAiUFhBMjd4T25DaGlwUk9NIiwKLQkud2lkdGggPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RhcmdhdGUyX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZSA9ICJweGEyeHgtZmxhc2giLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmc3RhcmdhdGUyX2ZsYXNoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLS8qCi0gKiBTUkFNIC0gVGhlIFN0YXJnYXRlIDIgaGFzIDMyTUIgb2YgU1JBTS4KLSAqCi0gKiBIZXJlIGl0IGlzIG1hZGUgYXZhaWxhYmxlIGFzIGFuIE1URC4gVGhpcyB3aWxsIHRoZW4KLSAqIHR5cGljYWxseSBoYXZlIGEgY2lmcyBmaWxlc3lzdGVtIGNyZWF0ZWQgb24gaXQgdG8gcHJvdmlkZQotICogZmFzdCB0ZW1wb3Jhcnkgc3RvcmFnZS4KLSAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzcmFtX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSBQWEFfQ1MxX1BIWVMsCi0JLmVuZCA9IFBYQV9DUzFfUEhZUyArIFNaXzMyTS0xLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHN0YXJnYXRlMl9zcmFtX3BkYXRhID0gewotCS5tYXBuYW1lID0gIlN0YXJnYXRlMiBTUkFNIiwKLQkuYmFua3dpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0YXJnYXRlMl9zcmFtID0gewotCS5uYW1lID0gIm10ZC1yYW0iLAotCS5pZCA9IDAsCi0JLnJlc291cmNlID0gJnNyYW1fcmVzb3VyY2VzLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdGFyZ2F0ZTJfc3JhbV9wZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGxhdGZvcm1fZGF0YV9wY2Y4NTd4ID0gewotCS5ncGlvX2Jhc2UgPSAxMjgsCi0JLm5fbGF0Y2ggPSAwLAotCS5zZXR1cCA9IE5VTEwsCi0JLnRlYXJkb3duID0gTlVMTCwKLQkuY29udGV4dCA9IE5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBwY2E5NTAwX2VlcHJvbV9wZGF0YSA9IHsKLQkuYnl0ZV9sZW4gPSAyNTYsCi0JLnBhZ2Vfc2l6ZSA9IDQsCi19OwotCi0KIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzdGFyZ2F0ZTJfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAkvKiBUZWNoaWNhbGx5IHRoaXMgYSBwY2E5NTAwIC0gYnV0IGl0J3MgY29tcGF0aWJsZSB3aXRoIHRoZSA4NTc0CiAJICogZm9yIGdwaW8gZXhwYW5zaW9uIGFuZCB0aGUgMjRjMDIgZm9yIGVlcHJvbSBhY2Nlc3MuCkBAIC02NTMsNzQgKzk1MCw2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBzdGFyZ2F0ZTJfcHdyX2kyY19ib2FyZF9pbmZvW10gPSB7Ci0JewotCQkudHlwZSA9ICJkYTkwMzAiLAotCQkuYWRkciA9IDB4NDksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJnN0YXJnYXRlMl9kYTkwMzBfcGRhdGEsCi0JCS5pcnEgPSBncGlvX3RvX2lycSgxKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBweGFfc3NwX21hc3Rlcl8wX2luZm8gPSB7Ci0JLm51bV9jaGlwc2VsZWN0ID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfMV9pbmZvID0gewotCS5udW1fY2hpcHNlbGVjdCA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3BfbWFzdGVyXzJfaW5mbyA9IHsKLQkubnVtX2NoaXBzZWxlY3QgPSAxLAotfTsKLQotLyogQW4gdXBjb21pbmcga2VybmVsIGNoYW5nZSB3aWxsIHNjcmFwIFNGUk0gdXNhZ2Ugc28gdGhlc2UKLSAqIGRyaXZlcnMgaGF2ZSBiZWVuIG1vdmVkIHRvIHVzZSBncGlvJ3MgdmlhIGNzX2NvbnRyb2wgKi8KLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIHN0YWNjZWxfY2hpcF9pbmZvID0gewotCS50eF90aHJlc2hvbGQgPSA4LAotCS5yeF90aHJlc2hvbGQgPSA4LAotCS5kbWFfYnVyc3Rfc2l6ZSA9IDgsCi0JLnRpbWVvdXQgPSAyMzUsCi0JLmdwaW9fY3MgPSAyNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNjMjQyMF9pbmZvID0gewotCS50eF90aHJlc2hvbGQgPSA4LAotCS5yeF90aHJlc2hvbGQgPSA4LAotCS5kbWFfYnVyc3Rfc2l6ZSA9IDgsCi0JLnRpbWVvdXQgPSAyMzUsCi0JLmdwaW9fY3MgPSAzOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0gewotCXsKLQkJLm1vZGFsaWFzID0gImxpczNsMDJkcSIsCi0JCS5tYXhfc3BlZWRfaHogPSA4MDAwMDAwLC8qIDhNSHogbWF4IHNwaSBmcmVxdWVuY3kgYXQgM1YgKi8KLQkJLmJ1c19udW0gPSAxLAotCQkuY2hpcF9zZWxlY3QgPSAwLAotCQkuY29udHJvbGxlcl9kYXRhID0gJnN0YWNjZWxfY2hpcF9pbmZvLAotCQkuaXJxID0gSVJRX0dQSU8oOTYpLAotCX0sIHsKLQkJLm1vZGFsaWFzID0gImNjMjQyMCIsCi0JCS5tYXhfc3BlZWRfaHogPSA2NTAwMDAwLAotCQkuYnVzX251bSA9IDMsCi0JCS5jaGlwX3NlbGVjdCA9IDAsCi0JCS5jb250cm9sbGVyX2RhdGEgPSAmY2MyNDIwX2luZm8sCi0JfSwKLX07Ci0KLXN0YXRpYyB2b2lkIHNnMl91ZGNfY29tbWFuZChpbnQgY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQWEEyWFhfVURDX0NNRF9DT05ORUNUOgotCQlVUDJPQ1IgfD0gIFVQMk9DUl9IWE9FICB8IFVQMk9DUl9EUFBVRSB8IFVQMk9DUl9EUFBVQkU7Ci0JCWJyZWFrOwotCWNhc2UgUFhBMlhYX1VEQ19DTURfRElTQ09OTkVDVDoKLQkJVVAyT0NSICY9IH4oVVAyT0NSX0hYT0UgIHwgVVAyT0NSX0RQUFVFIHwgVVAyT0NSX0RQUFVCRSk7Ci0JCWJyZWFrOwotCX0KLX0KLQogLyogQm9hcmQgZG9lc24ndCBzdXBwb3J0IGNhYmxlIGRldGVjdGlvbiAtIHNvIGFsd2F5cyBsaWUgYW5kIHNheQogICogc29tZXRoaW5nIGlzIHRoZXJlLgogICovCkBAIC03NDEsMTQgKzk3MCw2IEBACiAJJnNodDE1LAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgaTJjX3B3cl9wZGF0YSA9IHsKLQkuZmFzdF9tb2RlID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIGkyY19wZGF0YSA9IHsKLQkuZmFzdF9tb2RlID0gMSwKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBzdGFyZ2F0ZTJfaW5pdCh2b2lkKQogewogCS8qIFRoaXMgaXMgcHJvYmFibHkgYSBib2FyZCBzcGVjaWZpYyBoYWNrIGFzIHRoaXMgbXVzdCBiZSBzZXQKQEAgLTc1NywyMiArOTc4LDEzIEBACiAKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShzdGFyZ2F0ZTJfcGluX2NvbmZpZykpOwogCi0JcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKLQlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwotCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisJaW1vdGUyX3N0YXJnYXRlMl9pbml0KCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShzdGFyZ2F0ZTJfZGV2aWNlcykpOwogCi0JcHhhMnh4X3NldF9zcGlfaW5mbygxLCAmcHhhX3NzcF9tYXN0ZXJfMF9pbmZvKTsKLQlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZweGFfc3NwX21hc3Rlcl8xX2luZm8pOwotCXB4YTJ4eF9zZXRfc3BpX2luZm8oMywgJnB4YV9zc3BfbWFzdGVyXzJfaW5mbyk7Ci0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKLQogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKHN0YXJnYXRlMl9pMmNfYm9hcmRfaW5mbykpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsCi0JCQkJQVJSQVlfQU5EX1NJWkUoc3RhcmdhdGUyX3B3cl9pMmNfYm9hcmRfaW5mbykpOwotCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oJmkyY19wd3JfcGRhdGEpOwotCXB4YV9zZXRfaTJjX2luZm8oJmkyY19wZGF0YSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgc3RhcmdhdGUyX3B3cl9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHN0YXJnYXRlMl9wd3JfaTJjX2JvYXJkX2luZm8pKTsKIAogCXB4YV9zZXRfbWNpX2luZm8oJnN0YXJnYXRlMl9tY2lfcGxhdGZvcm1fZGF0YSk7CiAKQEAgLTc4MCw3ICs5OTIsMjEgQEAKIAogCXN0YXJnYXRlMl9yZXNldF9ibHVldG9vdGgoKTsKIH0KKyNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfSU5URUxNT1RFMgorTUFDSElORV9TVEFSVChJTlRFTE1PVEUyLCAiSU1PVEUgMiIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGltb3RlMl9pbml0LAorCS5ib290X3BhcmFtcwk9IDB4QTAwMDAxMDAsCitNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TVEFSR0FURTIKIE1BQ0hJTkVfU1RBUlQoU1RBUkdBVEUyLCAiU3RhcmdhdGUgMiIpCiAJLnBoeXNfaW8gPSAweDQwMDAwMDAwLAogCS5pb19wZ19vZmZzdCA9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLApAQCAtNzkwLDMgKzEwMTYsNCBAQAogCS5pbml0X21hY2hpbmUgPSBzdGFyZ2F0ZTJfaW5pdCwKIAkuYm9vdF9wYXJhbXMgPSAweEEwMDAwMTAwLAogTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKaW5kZXggNjk2ODkxMS4uMGFjZmYxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCkBAIC01MzAsMTMgKzUzMCw5IEBACiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgdHJpemVwczRfaTJjX2RldmljZXMsCiAJCQkJCUFSUkFZX1NJWkUodHJpemVwczRfaTJjX2RldmljZXMpKTsKIAotI2lmZGVmIENPTkZJR19JREVfUFhBX0NGCi0JLyogaWYgYm9vdCBkaXJlY3QgZnJvbSBjb21wYWN0IGZsYXNoIGRvbnQgZGlzYWJsZSBwb3dlciAqLwotCXRyaXplcHNfY29ueHNfYmNyID0gMHgwMDA5OwotI2Vsc2UKIAkvKiB0aGlzIGlzIHRoZSByZXNldCB2YWx1ZSAqLwogCXRyaXplcHNfY29ueHNfYmNyID0gMHgwMEEwOwotI2VuZGlmCisKIAlCQ1Jfd3JpdGV3KHRyaXplcHNfY29ueHNfYmNyKTsKIAlib2FyZF9iYWNrbGlnaHRfcG93ZXIoMSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKaW5kZXggOTg4NGZhOS4uYzliNzQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L3VjYjE0MDAuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWF4MTU4Ni5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL3BhdGFfcHhhLmg+CiAKICNpbmNsdWRlIDxwbGF0L2kyYy5oPgogCkBAIC00NjQsNyArNDY2LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHZwYWMyNzBfcnRjX2luaXQodm9pZCkKIHsKLQlweGFfc2V0X2kyY19pbmZvKE5VTEwpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKHZwYWMyNzBfaTJjX2RldnMpKTsKIH0KICNlbHNlCkBAIC00OTIsNyArNDkzLDU1IEBACiAJLnZzeW5jX2xlbgk9IDIsCiAKIAkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKLX0sCit9LCB7CS8qIENSVCA2NDB4NDgwICovCisJLnBpeGNsb2NrCT0gMzUwMDAsCisJLnhyZXMJCT0gNjQwLAorCS55cmVzCQk9IDQ4MCwKKwkuYnBwCQk9IDE2LAorCS5kZXB0aAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDk2LAorCS5yaWdodF9tYXJnaW4JPSA0OCwKKwkudXBwZXJfbWFyZ2luCT0gMzMsCisJLmxvd2VyX21hcmdpbgk9IDEwLAorCisJLmhzeW5jX2xlbgk9IDQ4LAorCS52c3luY19sZW4JPSAxLAorCisJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCit9LCB7CS8qIENSVCA4MDB4NjAwIEg9MzBrSHogVj00OEhaICovCisJLnBpeGNsb2NrCT0gMjUwMDAsCisJLnhyZXMJCT0gODAwLAorCS55cmVzCQk9IDYwMCwKKwkuYnBwCQk9IDE2LAorCS5kZXB0aAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDUwLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSAyMSwKKwkubG93ZXJfbWFyZ2luCT0gMTIsCisKKwkuaHN5bmNfbGVuCT0gOCwKKwkudnN5bmNfbGVuCT0gMSwKKworCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19WRVJUX0hJR0hfQUNULAorfSwgewkvKiBDUlQgMTAyNHg3NjggSD00MGtIeiBWPTUwSHogKi8KKwkucGl4Y2xvY2sJPSAxNTAwMCwKKwkueHJlcwkJPSAxMDI0LAorCS55cmVzCQk9IDc2OCwKKwkuYnBwCQk9IDE2LAorCS5kZXB0aAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDIyMCwKKwkucmlnaHRfbWFyZ2luCT0gOCwKKwkudXBwZXJfbWFyZ2luCT0gMzMsCisJLmxvd2VyX21hcmdpbgk9IDIsCisKKwkuaHN5bmNfbGVuCT0gNDgsCisJLnZzeW5jX2xlbgk9IDEsCisKKwkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKK30KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHZwYWMyNzBfbGNkX3NjcmVlbiA9IHsKQEAgLTUzOCw5ICs1ODcsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFBBVEEgSURFCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfUExBVEZPUk1fTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gdnBhYzI3MF9wYXRhX3BkYXRhID0gewotCS5pb3BvcnRfc2hpZnQJPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX1BBVEFfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX1BYQV9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBhdGFfcHhhX3BkYXRhIHZwYWMyNzBfcGF0YV9wZGF0YSA9IHsKKwkucmVnX3NoaWZ0CT0gMSwKKwkuZG1hX2RyZXEJPSAxLAogCS5pcnFfZmxhZ3MJPSBJUlFGX1RSSUdHRVJfUklTSU5HLAogfTsKIApAQCAtNTU1LDcgKzYwNSwxMiBAQAogCSAgICAgICAuZW5kCT0gUFhBX0NTM19QSFlTICsgMHgxNWYsCiAJICAgICAgIC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCiAJfSwKLQlbMl0gPSB7CS8qIElERSBJUlEgcGluICovCisJWzJdID0gewkvKiBETUEgQmFzZSBhZGRyZXNzICovCisJICAgICAgIC5zdGFydAk9IFBYQV9DUzNfUEhZUyArIDB4MjAsCisJICAgICAgIC5lbmQJPSBQWEFfQ1MzX1BIWVMgKyAweDJmLAorCSAgICAgICAuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQQorCX0sCisJWzNdID0gewkvKiBJREUgSVJRIHBpbiAqLwogCSAgICAgICAuc3RhcnQJPSBncGlvX3RvX2lycShHUElPMzZfVlBBQzI3MF9JREVfSVJRKSwKIAkgICAgICAgLmVuZAk9IGdwaW9fdG9faXJxKEdQSU8zNl9WUEFDMjcwX0lERV9JUlEpLAogCSAgICAgICAuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQpAQCAtNTYzLDExICs2MTgsMTIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZwYWMyNzBfaWRlX2RldmljZSA9IHsKLQkubmFtZQkJPSAicGF0YV9wbGF0Zm9ybSIsCisJLm5hbWUJCT0gInBhdGFfcHhhIiwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodnBhYzI3MF9pZGVfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSB2cGFjMjcwX2lkZV9yZXNvdXJjZXMsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnZwYWMyNzBfcGF0YV9wZGF0YSwKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKIAl9CiB9OwogCkBAIC01ODAsNiArNjM2LDU5IEBACiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29yZSBwb3dlciByZWd1bGF0b3IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYMTU4Nl9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgdnBhYzI3MF9tYXgxNTg3YV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkJPSAidmNjX2NvcmUiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2cGFjMjcwX21heDE1ODdhX3YzX2luZm8gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJPSAidmNjX2NvcmUgcmFuZ2UiLAorCQkubWluX3VWCQk9IDkwMDAwMCwKKwkJLm1heF91VgkJPSAxNzA1MDAwLAorCQkuYWx3YXlzX29uCT0gMSwKKwkJLnZhbGlkX29wc19tYXNrCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCX0sCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gdnBhYzI3MF9tYXgxNTg3YV9jb25zdW1lcnMsCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IEFSUkFZX1NJWkUodnBhYzI3MF9tYXgxNTg3YV9jb25zdW1lcnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXgxNTg2X3N1YmRldl9kYXRhIHZwYWMyNzBfbWF4MTU4N2Ffc3ViZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gInZjY19jb3JlIiwKKwkJLmlkCQk9IE1BWDE1ODZfVjMsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnZwYWMyNzBfbWF4MTU4N2FfdjNfaW5mbywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IG1heDE1ODZfcGxhdGZvcm1fZGF0YSB2cGFjMjcwX21heDE1ODdhX2luZm8gPSB7CisJLnN1YmRldnMgICAgID0gdnBhYzI3MF9tYXgxNTg3YV9zdWJkZXZzLAorCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUodnBhYzI3MF9tYXgxNTg3YV9zdWJkZXZzKSwKKwkudjNfZ2FpbiAgICAgPSBNQVgxNTg2X0dBSU5fUjI0XzNrMzIsIC8qIDczMC4uMTU1MCBtViAqLworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHZwYWMyNzBfcGkyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibWF4MTU4NiIsIDB4MTQpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ2cGFjMjcwX21heDE1ODdhX2luZm8sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2cGFjMjcwX3BtaWNfaW5pdCh2b2lkKQoreworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIEFSUkFZX0FORF9TSVpFKHZwYWMyNzBfcGkyY19ib2FyZF9pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHZwYWMyNzBfcG1pY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWNoaW5lIGluaXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgdnBhYzI3MF9pbml0KHZvaWQpCkBAIC01ODksNyArNjk4LDEwIEBACiAJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKIAlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOwogCisJdnBhYzI3MF9wbWljX2luaXQoKTsKIAl2cGFjMjcwX2xjZF9pbml0KCk7CiAJdnBhYzI3MF9tbWNfaW5pdCgpOwogCXZwYWMyNzBfbm9yX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3oyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96Mi5jCmluZGV4IGQzMDNjNjkuLmYwZDAyMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3oyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvejIuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC96Ml9iYXR0ZXJ5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2xpYmVydGFzX3NwaS5oPgpAQCAtMjYsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTE2Miw3ICsxNjQsNyBAQAogCX0sIHsKIAkJLm5hbWUJPSAiVS1Cb290IEVudmlyb25tZW50IiwKIAkJLm9mZnNldAk9IDB4NDAwMDAsCi0JCS5zaXplCT0gMHg2MDAwMCwKKwkJLnNpemUJPSAweDIwMDAwLAogCX0sIHsKIAkJLm5hbWUJPSAiRmxhc2giLAogCQkub2Zmc2V0CT0gMHg2MDAwMCwKQEAgLTQ1Miw2ICs0NTQsNDIgQEAKICNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19QWEEpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19QWEFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCB6Ml9iYXR0ZXJ5X2luZm8gYmF0dF9jaGlwX2luZm8gPSB7CisJLmJhdHRfSTJDX2J1cwk9IDAsCisJLmJhdHRfSTJDX2FkZHIJPSAweDU1LAorCS5iYXR0X0kyQ19yZWcJPSAyLAorCS5jaGFyZ2VfZ3Bpbwk9IEdQSU8wX1pJUElUWjJfQUNfREVURUNULAorCS5taW5fdm9sdGFnZQk9IDI0MDAwMDAsCisJLm1heF92b2x0YWdlCT0gMzcwMDAwMCwKKwkuYmF0dF9kaXYJPSA2OSwKKwkuYmF0dF9tdWx0CT0gMTAwMDAwMCwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElPTiwKKwkuYmF0dF9uYW1lCT0gIloyIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSB6Ml9pMmNfYm9hcmRfaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImFlcjkxNSIsIDB4NTUpLAorCQkucGxhdGZvcm1fZGF0YQk9ICZiYXR0X2NoaXBfaW5mbywKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJ3bTg3NTAiLCAweDFiKSwKKwl9LAorCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgejJfaTJjX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X2kyY19pbmZvKE5VTEwpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKHoyX2kyY19ib2FyZF9pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHoyX2kyY19pbml0KHZvaWQpIHt9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU1NQIERldmljZXMgLSBXaUZpIGFuZCBMQ0QgY29udHJvbAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKQEAgLTU3MywyMyArNjExLDk1IEBACiAjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29yZSBwb3dlciByZWd1bGF0b3IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB6Ml90cHM2NTAyMV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkJPSAidmNjX2NvcmUiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB6Ml90cHM2NTAyMV9pbmZvW10gPSB7CisJeworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZQkJPSAidmNjX2NvcmUgcmFuZ2UiLAorCQkJLm1pbl91VgkJPSA4MDAwMDAsCisJCQkubWF4X3VWCQk9IDE2MDAwMDAsCisJCQkuYWx3YXlzX29uCT0gMSwKKwkJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwkJfSwKKwkJLmNvbnN1bWVyX3N1cHBsaWVzCT0gejJfdHBzNjUwMjFfY29uc3VtZXJzLAorCQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRSh6Ml90cHM2NTAyMV9jb25zdW1lcnMpLAorCX0sIHsKKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUJCT0gIkRDREMyIiwKKwkJCS5taW5fdVYJCT0gMzMwMDAwMCwKKwkJCS5tYXhfdVYJCT0gMzMwMDAwMCwKKwkJCS5hbHdheXNfb24JPSAxLAorCQl9LAorCX0sIHsKKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUJCT0gIkRDREMzIiwKKwkJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJCS5tYXhfdVYJCT0gMTgwMDAwMCwKKwkJCS5hbHdheXNfb24JPSAxLAorCQl9LAorCX0sIHsKKwkJLmNvbnN0cmFpbnRzID0geworCQkJLm5hbWUJCT0gIkxETzEiLAorCQkJLm1pbl91VgkJPSAxMDAwMDAwLAorCQkJLm1heF91VgkJPSAzMTUwMDAwLAorCQkJLmFsd2F5c19vbgk9IDEsCisJCX0sCisJfSwgeworCQkuY29uc3RyYWludHMgPSB7CisJCQkubmFtZQkJPSAiTERPMiIsCisJCQkubWluX3VWCQk9IDEwNTAwMDAsCisJCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCQkuYWx3YXlzX29uCT0gMSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgejJfcGkyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHBzNjUwMjEiLCAweDQ4KSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmejJfdHBzNjUwMjFfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHoyX3BtaWNfaW5pdCh2b2lkKQoreworCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgQVJSQVlfQU5EX1NJWkUoejJfcGkyY19ib2FyZF9pbmZvKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHoyX3BtaWNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY2hpbmUgaW5pdAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIF9faW5pdCB6Ml9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoejJfcGluX2NvbmZpZykpOwogCisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2J0dWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfc3R1YXJ0X2luZm8oTlVMTCk7CisKIAl6Ml9sY2RfaW5pdCgpOwogCXoyX21tY19pbml0KCk7CiAJejJfbWtwX2luaXQoKTsKLQotCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7Ci0KKwl6Ml9pMmNfaW5pdCgpOwogCXoyX3NwaV9pbml0KCk7CiAJejJfbm9yX2luaXQoKTsKIAl6Ml9wd21faW5pdCgpOwogCXoyX2xlZHNfaW5pdCgpOwogCXoyX2tleXNfaW5pdCgpOworCXoyX3BtaWNfaW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFpJUElUMiwgIlppcGl0IFoyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvczNjMjQxNi5jCmluZGV4IDM1ZGFiY2MuLmJjMzAyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3MzYzI0MTYuYwpAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAKICNpbmNsdWRlIDxwbGF0L2lpYy1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9mYi1jb3JlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjMjQxNl9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogCUlPREVTQ19FTlQoV0FUQ0hET0cpLApAQCAtOTAsNyArOTEsNyBAQAogCXMzY19pMmMwX3NldG5hbWUoInMzYzI0NDAtaTJjIik7CiAJczNjX2kyYzFfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKIAotCXMzY19kZXZpY2VfZmIubmFtZSA9ICJzM2MyNDQzLWZiIjsKKwlzM2NfZmJfc2V0bmFtZSgiczNjMjQ0My1mYiIpOwogCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxNl9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKaW5kZXggOWUzOWZhYS4uZGVhYWJlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCkBAIC05MCwyNCArOTAsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNmNTA2MzMgKmd0YTAyX3BjZjsKIAogLyoKLSAqIFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgMW1zIHdoZW4gd2UgcGFuaWNlZC4KKyAqIFRoaXMgZ2V0cyBjYWxsZWQgZnJlcXVlbnRseSB3aGVuIHdlIHBhbmljZWQuCiAgKi8KIAotc3RhdGljIGxvbmcgZ3RhMDJfcGFuaWNfYmxpbmsobG9uZyBjb3VudCkKK3N0YXRpYyBsb25nIGd0YTAyX3BhbmljX2JsaW5rKGludCBzdGF0ZSkKIHsKIAlsb25nIGRlbGF5ID0gMDsKLQlzdGF0aWMgbG9uZyBsYXN0X2JsaW5rOwotCXN0YXRpYyBjaGFyIGxlZDsKKwljaGFyIGxlZDsKIAotCS8qIEZhc3QgYmxpbms6IDIwMG1zIHBlcmlvZC4gKi8KLQlpZiAoY291bnQgLSBsYXN0X2JsaW5rIDwgMTAwKQotCQlyZXR1cm4gMDsKLQotCWxlZCBePSAxOworCWxlZCA9IChzdGF0ZSkgPyAxIDogMDsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1RBMDJfR1BJT19BVVhfTEVELCBsZWQpOwogCi0JbGFzdF9ibGluayA9IGNvdW50OwotCiAJcmV0dXJuIGRlbGF5OwogfQogCkBAIC01NTYsNyArNTQ5LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGd0YTAyX21hY2hpbmVfaW5pdCh2b2lkKQogewotCS8qIFNldCB0aGUgcGFuaWMgY2FsbGJhY2sgdG8gbWFrZSBBVVggTEVEIGJsaW5rIGF0IH41SHouICovCisJLyogU2V0IHRoZSBwYW5pYyBjYWxsYmFjayB0byB0dXJuIEFVWCBMRUQgb24gb3Igb2ZmLiAqLwogCXBhbmljX2JsaW5rID0gZ3RhMDJfcGFuaWNfYmxpbms7CiAKIAlzM2NfcG1faW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9zM2MyNDQzLmMKaW5kZXggY2UyZWMzMi4uODM5YjZiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL3MzYzI0NDMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvczNjMjQ0My5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLWNvcmUuaD4KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDQzX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJSU9ERVNDX0VOVChXQVRDSERPRyksCkBAIC02Miw2ICs2Myw3IEBACiAJczNjMjR4eF9yZXNldF9ob29rID0gczNjMjQ0M19oYXJkX3Jlc2V0OwogCiAJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQxMi1uYW5kIjsKKwlzM2NfZmJfc2V0bmFtZSgiczNjMjQ0My1mYiIpOwogCiAJLyogY2hhbmdlIFdEVCBJUlEgbnVtYmVyICovCiAJczNjX2RldmljZV93ZHQucmVzb3VyY2VbMV0uc3RhcnQgPSBJUlFfUzNDMjQ0M19XRFQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9LY29uZmlnCmluZGV4IGY1YTU5NzIuLjA3MWU4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9LY29uZmlnCkBAIC01NywxMSArNTcsMjEgQEAKIAloZWxwCiAJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAxLgogCitjb25maWcgUzNDNjRYWF9TRVRVUF9JREUKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFMzQzY0WFggSURFLgorCiBjb25maWcgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAogCWJvb2wKIAloZWxwCiAJICBDb21tb24gc2V0dXAgY29kZSBmb3IgUzNDNjRYWCB3aXRoIGFuIDI0YnBwIFJHQiBkaXNwbGF5IGhlbHBlci4KIAorY29uZmlnIFMzQzY0WFhfU0VUVVBfS0VZUEFECisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTM0M2NFhYIEtFWVBBRCBHUElPIGNvbmZpZ3VyYXRpb25zCisKIGNvbmZpZyBTM0M2NFhYX1NFVFVQX1NESENJX0dQSU8KIAlib29sCiAJaGVscApAQCAtOTUsMTUgKzEwNSwyMCBAQAogCXNlbGVjdCBTM0NfREVWX0hTTU1DCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMxCiAJc2VsZWN0IFMzQ19ERVZfSTJDMQorCXNlbGVjdCBTQU1TVU5HX0RFVl9JREUKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX1JUQwogCXNlbGVjdCBTQU1TVU5HX0RFVl9UUwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hTT1RHCiAJc2VsZWN0IFMzQ19ERVZfV0RUCisJc2VsZWN0IFNBTVNVTkdfREVWX0tFWVBBRAogCXNlbGVjdCBIQVZFX1MzQzI0MTBfV0FUQ0hET0cKIAlzZWxlY3QgUzNDNjRYWF9TRVRVUF9TREhDSQogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0kyQzEKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JREUKIAlzZWxlY3QgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAorCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0tFWVBBRAogCWhlbHAKIAkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgU01ESzY0MTAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L01ha2VmaWxlCmluZGV4IDlkMTAwNjkuLjQ4ZDNkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvTWFrZWZpbGUKQEAgLTM1LDYgKzM1LDggQEAKIAogb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMCkgKz0gc2V0dXAtaTJjMC5vCiBvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMxKSArPSBzZXR1cC1pMmMxLm8KK29iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0lERSkgKz0gc2V0dXAtaWRlLm8KK29iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0tFWVBBRCkgKz0gc2V0dXAta2V5cGFkLm8KIG9iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX1NESENJKSArPSBzZXR1cC1zZGhjaS5vCiBvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9GQl8yNEJQUCkgKz0gc2V0dXAtZmItMjRicHAubwogb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0lfR1BJTykgKz0gc2V0dXAtc2RoY2ktZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jCmluZGV4IGZiZDg1YTkuLjdlMDNmMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jCkBAIC0xMzMsNiArMTMzLDEyIEBACiAJCS5pZAkJPSAtMSwKIAkJLnBhcmVudAkJPSAmY2xrX2gsCiAJfSwgeworCQkubmFtZQkJPSAicnRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfUlRDLAorCX0sIHsKIAkJLm5hbWUJCT0gImFkYyIsCiAJCS5pZAkJPSAtMSwKIAkJLnBhcmVudAkJPSAmY2xrX3AsCkBAIC0xNjUsNiArMTcxLDEyIEBACiAJCS5jdHJsYml0CT0gUzNDNjQxMF9DTEtDT05fUENMS19JSVMyLAogCX0sIHsKICNlbmRpZgorCQkubmFtZQkJPSAia2V5cGFkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfS0VZUEFELAorCX0sIHsKIAkJLm5hbWUJCT0gInNwaSIsCiAJCS5pZAkJPSAwLAogCQkucGFyZW50CQk9ICZjbGtfcCwKQEAgLTI5NSwxMiArMzA3LDYgQEAKIAkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKIAkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDMsCiAJfSwgewotCQkubmFtZQkJPSAicnRjIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfUlRDLAotCX0sIHsKIAkJLm5hbWUJCT0gIndhdGNoZG9nIiwKIAkJLmlkCQk9IC0xLAogCQkucGFyZW50CQk9ICZjbGtfcCwKQEAgLTMxMCw2ICszMTYsMTIgQEAKIAkJLmlkCQk9IC0xLAogCQkucGFyZW50CQk9ICZjbGtfcCwKIAkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfQUM5NywKKwl9LCB7CisJCS5uYW1lCQk9ICJjZmNvbiIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0lIT1NULAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYwppbmRleCBjM2U5ZTczLi45NjQ4ZmJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZGV2LWF1ZGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hdWRpby5jCkBAIC0xMiwxMSArMTIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtc3BpLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZGV2LXNwaS5jCmluZGV4IDI5YzMyZDAuLmE0OTJiOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtc3BpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1zcGkuYwpAQCAtMTIsMTAgKzEyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstYy5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWNsb2Nrcy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2dwaW9saWIuYwppbmRleCA2MGM5MjlhLi4zMDBkZWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IGUxZWFiM2MuLmExZjEzZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtNjcsNiArNjcsNyBAQAogI2RlZmluZSBTM0M2NFhYX1BBX1VTQl9IU09URwkoMHg3QzAwMDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9XQVRDSERPRwkoMHg3RTAwNDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9SVEMJCSgweDdFMDA1MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0tFWVBBRAkoMHg3RTAwQTAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9BREMJCSgweDdFMDBCMDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1NZU0NPTgkoMHg3RTAwRjAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9BQzk3CQkoMHg3RjAwMTAwMCkKQEAgLTg2LDYgKzg3LDkgQEAKICNkZWZpbmUgUzNDNjRYWF9TWl9HUElPCQlTWl80SwogCiAjZGVmaW5lIFMzQzY0WFhfUEFfU0RSQU0JKDB4NTAwMDAwMDApCisKKyNkZWZpbmUgUzNDNjRYWF9QQV9DRkNPTgkoMHg3MDMwMDAwMCkKKwogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzAJCSgweDcxMjAwMDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQogCkBAIC0xMjAsNSArMTI0LDcgQEAKICNkZWZpbmUgUzNDX1BBX1dEVAkJUzNDNjRYWF9QQV9XQVRDSERPRwogCiAjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTM0M2NFhYX1BBX0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCVMzQzY0WFhfUEFfQ0ZDT04KKyNkZWZpbmUgU0FNU1VOR19QQV9LRVlQQUQJUzNDNjRYWF9QQV9LRVlQQUQKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfNjQwMF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAppbmRleCAwMTE0ZWIwLi4wNTMzMmI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBTM0NfU0NMS19HQVRFCQlTM0NfQ0xLUkVHKDB4MzgpCiAjZGVmaW5lIFMzQ19NRU0wX0dBVEUJCVMzQ19DTEtSRUcoMHgzQykKICNkZWZpbmUgUzNDNjQxMF9DTEtfU1JDMglTM0NfQ0xLUkVHKDB4MTBDKQorI2RlZmluZSBTM0NfTUVNX1NZU19DRkcJCVMzQ19DTEtSRUcoMHgxMjApCiAKIC8qIENMS0RJVjAgKi8KICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX1BDTEtfTUFTSwkoMHhmIDw8IDEyKQpAQCAtMTU0LDQgKzE1NSw4IEBACiAjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0VQTExfTU9VVF9TSElGVAkoMikKICNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTUZDCQkoMSA8PCA0KQogCisvKiBNRU1fU1lTX0NGRyAqLworI2RlZmluZSBNRU1fU1lTX0NGR19JTkRFUF9DRgkJMHg0MDAwCisjZGVmaW5lIE1FTV9TWVNfQ0ZHX0VCSV9GSVhfUFJJX0NGQ09OCTB4MzAKKwogI2VuZGlmIC8qIF9QTEFUX1JFR1NfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWZiLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaAppbmRleCBmNTY2MTE1Li5hMDZlZTBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaApAQCAtMTgsMjQgKzE4LDQgQEAKIAogI2luY2x1ZGUgPHBsYXQvcmVncy1mYi12NC5oPgogCi0vKiBQYWxldHRlIHJlZ2lzdGVycyAqLwotI2RlZmluZSBXSU4yX1BBTChfZW50cnkpCQkJKDB4MzAwICsgKChfZW50cnkpICogMikpCi0jZGVmaW5lIFdJTjNfUEFMKF9lbnRyeSkJCQkoMHgzMjAgKyAoKF9lbnRyeSkgKiAyKSkKLSNkZWZpbmUgV0lONF9QQUwoX2VudHJ5KQkJCSgweDM0MCArICgoX2VudHJ5KSAqIDIpKQotI2RlZmluZSBXSU4wX1BBTChfZW50cnkpCQkJKDB4NDAwICsgKChfZW50cnkpICogNCkpCi0jZGVmaW5lIFdJTjFfUEFMKF9lbnRyeSkJCQkoMHg4MDAgKyAoKF9lbnRyeSkgKiA0KSkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2ZiX3BhbF9yZWcodW5zaWduZWQgaW50IHdpbmRvdywgaW50IHJlZykKLXsKLQlzd2l0Y2ggKHdpbmRvdykgewotCWNhc2UgMDogcmV0dXJuIFdJTjBfUEFMKHJlZyk7Ci0JY2FzZSAxOiByZXR1cm4gV0lOMV9QQUwocmVnKTsKLQljYXNlIDI6IHJldHVybiBXSU4yX1BBTChyZWcpOwotCWNhc2UgMzogcmV0dXJuIFdJTjNfUEFMKHJlZyk7Ci0JY2FzZSA0OiByZXR1cm4gV0lONF9QQUwocmVnKTsKLQl9Ci0KLQlCVUcoKTsKLX0KLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFDSF9SRUdTX0ZCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLWFudzY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLWFudzY0MTAuYwppbmRleCA0YTBiYjI0Li43NDJkYzg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1hbnc2NDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtYW53NjQxMC5jCkBAIC0xMzQsNyArMTM0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBhbnc2NDEwX2ZiX3dpbjAgPSB7CiAJLyogdGhpcyBpcyB0byBlbnN1cmUgd2UgdXNlIHdpbjAgKi8KIAkud2luX21vZGUJPSB7Ci0JCS5waXhjbG9jawk9IDQxMDk0LAogCQkubGVmdF9tYXJnaW4JPSA4LAogCQkucmlnaHRfbWFyZ2luCT0gMTMsCiAJCS51cHBlcl9tYXJnaW4JPSA3LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtaG10LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1obXQuYwppbmRleCAxODc0NDFhLi5mYmE5MDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1obXQuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1obXQuYwpAQCAtMTI4LDcgKzEyOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBobXRfZmJfd2luMCA9IHsKIAkud2luX21vZGUJPSB7Ci0JCS5waXhjbG9jawk9IDQxMDk0LAogCQkubGVmdF9tYXJnaW4JPSA4LAogCQkucmlnaHRfbWFyZ2luCT0gMTMsCiAJCS51cHBlcl9tYXJnaW4JPSA3LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21hcnRxNS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21hcnRxNS5jCmluZGV4IDFkMDMyNmUuLmEwNjUwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtYXJ0cTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWFydHE1LmMKQEAgLTEzNCw4ICsxMzQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHMzY19mYl9wZF93aW4gc21hcnRxNV9mYl93aW4wID0gewogCS53aW5fbW9kZQk9IHsKLQkJLnBpeGNsb2NrCT0gMTAwMDAwMDAwMDAwMFVMTCAvCi0JCQkJKCg0MCsxKzIxNis4MDApKigxMCsxKzM1KzQ4MCkqODApLAogCQkubGVmdF9tYXJnaW4JPSA0MCwKIAkJLnJpZ2h0X21hcmdpbgk9IDIxNiwKIAkJLnVwcGVyX21hcmdpbgk9IDEwLApAQCAtMTQ0LDYgKzE0Miw3IEBACiAJCS52c3luY19sZW4JPSAxLAogCQkueHJlcwkJPSA4MDAsCiAJCS55cmVzCQk9IDQ4MCwKKwkJLnJlZnJlc2gJPSA4MCwKIAl9LAogCS5tYXhfYnBwCT0gMzIsCiAJLmRlZmF1bHRfYnBwCT0gMTYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWFydHE3LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWFydHE3LmMKaW5kZXggZTBiYzc4ZS4uMGVjZjQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21hcnRxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtYXJ0cTcuYwpAQCAtMTUwLDggKzE1MCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBzbWFydHE3X2ZiX3dpbjAgPSB7CiAJLndpbl9tb2RlCT0gewotCQkucGl4Y2xvY2sJPSAxMDAwMDAwMDAwMDAwVUxMIC8KLQkJCQkoKDMrMTArNSs4MDApKigxKzMrMjArNDgwKSo4MCksCiAJCS5sZWZ0X21hcmdpbgk9IDMsCiAJCS5yaWdodF9tYXJnaW4JPSA1LAogCQkudXBwZXJfbWFyZ2luCT0gMSwKQEAgLTE2MCw2ICsxNTgsNyBAQAogCQkudnN5bmNfbGVuCT0gMywKIAkJLnhyZXMJCT0gODAwLAogCQkueXJlcwkJPSA0ODAsCisJCS5yZWZyZXNoCT0gODAsCiAJfSwKIAkubWF4X2JwcAk9IDMyLAogCS5kZWZhdWx0X2JwcAk9IDE2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggZDlhMDM1NS4uMmQ0MzEyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtNTYsNiArNTcsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXN5cy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zcm9tLmg+CisjaW5jbHVkZSA8cGxhdC9hdGEuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPHBsYXQvZmIuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC02Niw2ICs2OCw3IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2FkYy5oPgogI2luY2x1ZGUgPHBsYXQvdHMuaD4KKyNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogCiAjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQgfCBTM0MyNDEwX1VDT05fVUNMSwogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCkBAIC0xNDEsNyArMTQ0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBzbWRrNjQxMF9mYl93aW4wID0gewogCS8qIHRoaXMgaXMgdG8gZW5zdXJlIHdlIHVzZSB3aW4wICovCiAJLndpbl9tb2RlCT0gewotCQkucGl4Y2xvY2sJPSA0MTA5NCwKIAkJLmxlZnRfbWFyZ2luCT0gOCwKIAkJLnJpZ2h0X21hcmdpbgk9IDEzLAogCQkudXBwZXJfbWFyZ2luCT0gNywKQEAgLTI0Miw2ICsyNDQsMjkgQEAKIH07CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBzM2NfaWRlX3BsYXRkYXRhIHNtZGs2NDEwX2lkZV9wZGF0YSBfX2luaXRkYXRhID0geworCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9pZGVfc2V0dXBfZ3BpbywKK307CisKK3N0YXRpYyB1aW50MzJfdCBzbWRrNjQxMF9rZXltYXBbXSBfX2luaXRkYXRhID0geworCS8qIEtFWShyb3csIGNvbCwga2V5Y29kZSkgKi8KKwlLRVkoMCwgMywgS0VZXzEpLCBLRVkoMCwgNCwgS0VZXzIpLCBLRVkoMCwgNSwgS0VZXzMpLAorCUtFWSgwLCA2LCBLRVlfNCksIEtFWSgwLCA3LCBLRVlfNSksCisJS0VZKDEsIDMsIEtFWV9BKSwgS0VZKDEsIDQsIEtFWV9CKSwgS0VZKDEsIDUsIEtFWV9DKSwKKwlLRVkoMSwgNiwgS0VZX0QpLCBLRVkoMSwgNywgS0VZX0UpCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBzbWRrNjQxMF9rZXltYXBfZGF0YSBfX2luaXRkYXRhID0geworCS5rZXltYXAJCT0gc21kazY0MTBfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoc21kazY0MTBfa2V5bWFwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWRfcGxhdGRhdGEgc21kazY0MTBfa2V5cGFkX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmc21kazY0MTBfa2V5bWFwX2RhdGEsCisJLnJvd3MJCT0gMiwKKwkuY29scwkJPSA4LAorfTsKKwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrNjQxMF9pb2Rlc2NbXSA9IHt9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNTcsNiArMjgyLDcgQEAKIAkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX3VzYl9oc290ZywKIAkmczNjNjR4eF9kZXZpY2VfaWlzdjQsCisJJnNhbXN1bmdfZGV2aWNlX2tleXBhZCwKIAogI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIAkmc21kazY0MTBfYl9wd3JfNXYsCkBAIC0yNjUsNiArMjkxLDggQEAKIAogCSZzbWRrNjQxMF9zbXNjOTExeCwKIAkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2VfY2Zjb24sCisJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX3RzLAogCSZzM2NfZGV2aWNlX3dkdCwKIH07CkBAIC02MzYsNiArNjY0LDggQEAKIAlzM2NfaTJjMV9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJczNjX2ZiX3NldF9wbGF0ZGF0YSgmc21kazY0MTBfbGNkX3BkYXRhKTsKIAorCXNhbXN1bmdfa2V5cGFkX3NldF9wbGF0ZGF0YSgmc21kazY0MTBfa2V5cGFkX2RhdGEpOworCiAJczNjMjR4eF90c19zZXRfcGxhdGRhdGEoJnMzY190c19wbGF0Zm9ybSk7CiAKIAkvKiBjb25maWd1cmUgbkNTMSB3aWR0aCB0byAxNiBiaXRzICovCkBAIC02NjUsNiArNjk1LDggQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2czAsIEFSUkFZX1NJWkUoaTJjX2RldnMwKSk7CiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjX2RldnMxLCBBUlJBWV9TSVpFKGkyY19kZXZzMSkpOwogCisJczNjX2lkZV9zZXRfcGxhdGRhdGEoJnNtZGs2NDEwX2lkZV9wZGF0YSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrNjQxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGs2NDEwX2RldmljZXMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3MzYzY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zM2M2NDEwLmMKaW5kZXggMDE0NDAxYy4uMzEyYWE2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3MzYzY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvczNjNjQxMC5jCkBAIC0zNyw4ICszNyw5IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2F0YS1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9hZGMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KLSNpbmNsdWRlIDxwbGF0L2FkYy5oPgogI2luY2x1ZGUgPHBsYXQvb25lbmFuZC1jb3JlLmg+CiAjaW5jbHVkZSA8bWFjaC9zM2M2NDAwLmg+CiAjaW5jbHVkZSA8bWFjaC9zM2M2NDEwLmg+CkBAIC01NCwxMCArNTUsMTEgQEAKIAlzM2NfaTJjMF9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOwogCXMzY19pMmMxX3NldG5hbWUoInMzYzI0NDAtaTJjIik7CiAKLQlzM2NfZGV2aWNlX2FkYy5uYW1lCT0gInMzYzY0eHgtYWRjIjsKKwlzM2NfYWRjX3NldG5hbWUoInMzYzY0eHgtYWRjIik7CiAJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjNjQwMC1uYW5kIjsKIAlzM2Nfb25lbmFuZF9zZXRuYW1lKCJzM2M2NDEwLW9uZW5hbmQiKTsKIAlzM2M2NHh4X29uZW5hbmQxX3NldG5hbWUoInMzYzY0MTAtb25lbmFuZCIpOworCXMzY19jZmNvbl9zZXRuYW1lKCJzM2M2NHh4LXBhdGEiKTsKIH0KIAogdm9pZCBfX2luaXQgczNjNjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1mYi0yNGJwcC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKaW5kZXggOGUyOGU0NC4uMDAwNzM2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9mYi5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1pMmMwLmMKaW5kZXggZDFiMTFlNi4uNDA2MTkyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtaTJjMC5jCkBAIC0xNCwxMCArMTQsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLwogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstYi5oPgogI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzEuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1pMmMxLmMKaW5kZXggMmRjZTU3ZC4uMWVlNjJjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtaTJjMS5jCkBAIC0xNCwxMCArMTQsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLwogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstYi5oPgogI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWlkZS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWlkZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMmMzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtaWRlLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWlkZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTM0M2NFhYIHNldHVwIGluZm9ybWF0aW9uIGZvciBJREUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisKK3ZvaWQgczNjNjR4eF9pZGVfc2V0dXBfZ3Bpbyh2b2lkKQoreworCXUzMiByZWc7CisJdTMyIGdwaW8gPSAwOworCisJcmVnID0gcmVhZGwoUzNDX01FTV9TWVNfQ0ZHKSAmICh+MHgzZik7CisKKwkvKiBJbmRlcGVuZGVudCBDRiBpbnRlcmZhY2UsIENGIGNoaXAgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKwl3cml0ZWwocmVnIHwgTUVNX1NZU19DRkdfSU5ERVBfQ0YgfAorCQlNRU1fU1lTX0NGR19FQklfRklYX1BSSV9DRkNPTiwgUzNDX01FTV9TWVNfQ0ZHKTsKKworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQig0KSwgUzNDX0dQSU9fU0ZOKDQpKTsKKworCS8qIFNldCBYaGlEQVRBWzE1OjBdIHBpbnMgYXMgQ0YgRGF0YVsxNTowXSAqLworCWZvciAoZ3BpbyA9IFMzQzY0WFhfR1BLKDApOyBncGlvIDw9IFMzQzY0WFhfR1BLKDE1KTsgZ3BpbysrKQorCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDUpKTsKKworCS8qIFNldCBYaGlBRERSWzI6MF0gcGlucyBhcyBDRiBBRERSWzI6MF0gKi8KKwlmb3IgKGdwaW8gPSBTM0M2NFhYX0dQTCgwKTsgZ3BpbyA8PSBTM0M2NFhYX0dQTCgyKTsgZ3BpbysrKQorCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDYpKTsKKworCS8qIFNldCBYaGkgY3RybCBwaW5zIGFzIENGIGN0cmwgcGlucyhJT1JEWSwgSU9XUiwgSU9SRCwgQ0VbMDoxXSkgKi8KKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUE0oNSksIFMzQ19HUElPX1NGTigxKSk7CisJZm9yIChncGlvID0gUzNDNjRYWF9HUE0oMCk7IGdwaW8gPD0gUzNDNjRYWF9HUE0oNCk7IGdwaW8rKykKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTig2KSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjMzRlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1rZXlwYWQuYwpAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEdQSU8gY29uZmlndXJhdGlvbiBmb3IgUzNDNjRYWCBLZXlQYWQgZGV2aWNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHNhbXN1bmdfa2V5cGFkX2NmZ19ncGlvKHVuc2lnbmVkIGludCByb3dzLCB1bnNpZ25lZCBpbnQgY29scykKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwl1bnNpZ25lZCBpbnQgZW5kOworCisJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSyBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMzogS1BfUk9XW3hdICovCisJZW5kID0gUzNDNjRYWF9HUEsoOCArIHJvd3MpOworCWZvciAoZ3BpbyA9IFMzQzY0WFhfR1BLKDgpOyBncGlvIDwgZW5kOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigzKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9CisKKwkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BMIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9DT0xbeF0gKi8KKwllbmQgPSBTM0M2NFhYX0dQTCgwICsgY29scyk7CisJZm9yIChncGlvID0gUzNDNjRYWF9HUEwoMCk7IGdwaW8gPCBlbmQ7IGdwaW8rKykgeworCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDMpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2ktZ3Bpby5jCmluZGV4IGE1OGMwY2MuLjMyMjM1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS1ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLXNkaGNpLWdwaW8uYwpAQCAtMTYsMTIgKzE2LDE0IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgogCiB2b2lkIHMzYzY0eHhfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQogeworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAl1bnNpZ25lZCBpbnQgZW5kOwogCkBAIC0zMywxMiArMzUsMTUgQEAKIAkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOwogCX0KIAotCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEcoNiksIFMzQ19HUElPX1BVTExfVVApOwotCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRyg2KSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKSB7CisJCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEcoNiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEcoNiksIFMzQ19HUElPX1NGTigyKSk7CisJfQogfQogCiB2b2lkIHMzYzY0eHhfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQogeworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAl1bnNpZ25lZCBpbnQgZW5kOwogCkBAIC01MCw4ICs1NSwxMCBAQAogCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CiAJfQogCi0JczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQRyg2KSwgUzNDX0dQSU9fUFVMTF9VUCk7Ci0JczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BHKDYpLCBTM0NfR1BJT19TRk4oMykpOworCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKKwkJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQRyg2KSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRyg2KSwgUzNDX0dQSU9fU0ZOKDMpKTsKKwl9CiB9CiAKIHZvaWQgczNjNjR4eF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9LY29uZmlnCmluZGV4IGYwNjZmYWUuLjZhNGFmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9LY29uZmlnCkBAIC0xMywxMyArMTMsMjAgQEAKIAloZWxwCiAJICBFbmFibGUgUzVQNjQ0MCBDUFUgc3VwcG9ydAogCitjb25maWcgUzVQNjQ0MF9TRVRVUF9JMkMxCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDEuCisKIGNvbmZpZyBNQUNIX1NNREs2NDQwCiAJYm9vbCAiU01ESzY0NDAiCiAJc2VsZWN0IENQVV9TNVA2NDQwCi0Jc2VsZWN0IFNBTVNVTkdfREVWX1RTCi0Jc2VsZWN0IFNBTVNVTkdfREVWX0FEQworCXNlbGVjdCBTM0NfREVWX0kyQzEKKwlzZWxlY3QgUzNDX0RFVl9SVEMKIAlzZWxlY3QgUzNDX0RFVl9XRFQKLQlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCisJc2VsZWN0IFNBTVNVTkdfREVWX0FEQworCXNlbGVjdCBTQU1TVU5HX0RFVl9UUworCXNlbGVjdCBTNVA2NDQwX1NFVFVQX0kyQzEKIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9NYWtlZmlsZQppbmRleCBiZTNjNTNhLi5jM2ZlNGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL01ha2VmaWxlCkBAIC0yMiwzICsyMiw0IEBACiAjIGRldmljZSBzdXBwb3J0CiBvYmoteQkJCQkrPSBkZXYtYXVkaW8ubwogb2JqLSQoQ09ORklHX1MzQzY0WFhfREVWX1NQSSkJKz0gZGV2LXNwaS5vCitvYmotJChDT05GSUdfUzVQNjQ0MF9TRVRVUF9JMkMxKQkrPSBzZXR1cC1pMmMxLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9jcHUuYwppbmRleCBiMmZlNmE1Li41MjZmMzNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2NwdS5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvczVwNjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvYWRjLWNvcmUuaD4KIAogc3RhdGljIHZvaWQgczVwNjQ0MF9pZGxlKHZvaWQpCiB7CkBAIC02MSw3ICs2Miw3IEBACiB2b2lkIF9faW5pdCBzNXA2NDQwX21hcF9pbyh2b2lkKQogewogCS8qIGluaXRpYWxpemUgYW55IGRldmljZSBpbmZvcm1hdGlvbiBlYXJseSAqLwotCXMzY19kZXZpY2VfYWRjLm5hbWUJPSAiczNjNjR4eC1hZGMiOworCXMzY19hZGNfc2V0bmFtZSgiczNjNjR4eC1hZGMiKTsKIH0KIAogdm9pZCBfX2luaXQgczVwNjQ0MF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9kZXYtYXVkaW8uYwppbmRleCAwYzUzNjc5Li4zY2EwZDJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvZGV2LWF1ZGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2Rldi1hdWRpby5jCkBAIC0xMCwxMSArMTAsMTEgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9kZXYtc3BpLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvZGV2LXNwaS5jCmluZGV4IDBhMzAyODAuLjUxMGFmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9kZXYtc3BpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2Rldi1zcGkuYwpAQCAtMTAsMTEgKzEwLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NwaS1jbG9ja3MuaD4KIAogI2luY2x1ZGUgPHBsYXQvczNjNjR4eC1zcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvZ3Bpby5jCmluZGV4IDkyZWZjMDUuLjhiZjZlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2dwaW8uYwpAQCAtMTMsOSArMTMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKwogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKwogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA5MTE4NTRkLi4xNmE3NjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNTEsNyArNTEsNyBAQAogI2RlZmluZSBJUlFfRElTUENPTjMJCVM1UF9JUlFfVklDMSgxOSkKICNkZWZpbmUgSVJRX0ZJTUdWRwkJUzVQX0lSUV9WSUMxKDIwKQogI2RlZmluZSBJUlFfRUlOVF9HUk9VUFMJCVM1UF9JUlFfVklDMSgyMSkKLSNkZWZpbmUgSVJRX1BNVUlSUQkJUzVQX0lSUV9WSUMxKDIzKQorI2RlZmluZSBJUlFfUE1VCQkJUzVQX0lSUV9WSUMxKDIzKQogI2RlZmluZSBJUlFfSFNNTUMwCQlTNVBfSVJRX1ZJQzEoMjQpCiAjZGVmaW5lIElSUV9IU01NQzEJCVM1UF9JUlFfVklDMSgyNSkKICNkZWZpbmUgSVJRX0hTTU1DMgkJSVJRX1NQSTEJLyogc2hhcmVkIHdpdGggU1BJMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggNDQwMTFiOS4uNmNjNWNiYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0zOCw3ICszOCw2IEBACiAjZGVmaW5lIFM1UF9QQV9USU1FUgkJUzVQNjQ0MF9QQV9USU1FUgogCiAjZGVmaW5lIFM1UDY0NDBfUEFfUlRDCQkoMHhFQTEwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1JUQwkJUzVQNjQ0MF9QQV9SVEMKIAogI2RlZmluZSBTNVA2NDQwX1BBX1dEVAkJKDB4RUEyMDAwMDApCiAjZGVmaW5lIFM1UF9QQV9XRFQJCVM1UDY0NDBfUEFfV0RUCkBAIC01Myw2ICs1Miw3IEBACiAjZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKIAogI2RlZmluZSBTNVA2NDQwX1BBX0lJQzAJCSgweEVDMTA0MDAwKQorI2RlZmluZSBTNVA2NDQwX1BBX0lJQzEJCSgweEVDMjBGMDAwKQogCiAjZGVmaW5lIFM1UDY0NDBfUEFfU1BJMAkJMHhFQzQwMDAwMAogI2RlZmluZSBTNVA2NDQwX1BBX1NQSTEJCTB4RUM1MDAwMDAKQEAgLTc3LDYgKzc3LDggQEAKIC8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KICNkZWZpbmUgUzNDX1BBX1VBUlQJCVM1UDY0NDBfUEFfVUFSVAogI2RlZmluZSBTM0NfUEFfSUlDCQlTNVA2NDQwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQNjQ0MF9QQV9SVEMKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCVM1UDY0NDBfUEFfSUlDMQogI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQwX1BBX1dEVAogCiAjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVA2NDQwX1BBX0FEQwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZDJkZDgxNy4uYTM1OWVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xMywxMiArMTMsOSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0ggX19GSUxFX18KIAotc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCi17Ci0JLyogbm90aGluZyBoZXJlIHlldCAqLwotfQorI2luY2x1ZGUgPHBsYXQvc3lzdGVtLXJlc2V0Lmg+CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvbWFjaC1zbWRrNjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL21hY2gtc21kazY0NDAuYwppbmRleCA4MjkxZmVjLi45MjAyYWFhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL21hY2gtc21kazY0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvbWFjaC1zbWRrNjQ0MC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0zNywyMCArMzgsMjEgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9wbGwuaD4KICNpbmNsdWRlIDxwbGF0L2FkYy5oPgogI2luY2x1ZGUgPHBsYXQvdHMuaD4KIAotI2RlZmluZSBTNVA2NDQwX1VDT05fREVGQVVMVCAgICAoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAorI2RlZmluZSBTTURLNjQ0MF9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKIAkJCQlTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAkJXAogCQkJCVMzQzI0MTBfVUNPTl9UWElSUU1PREUgfAlcCiAJCQkJUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKIAkJCQlTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSB8CVwKIAkJCQlTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCiAKLSNkZWZpbmUgUzVQNjQ0MF9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKKyNkZWZpbmUgU01ESzY0NDBfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CiAKLSNkZWZpbmUgUzVQNjQ0MF9VRkNPTl9ERUZBVUxUICAgKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisjZGVmaW5lIFNNREs2NDQwX1VGQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCiAJCQkJUzNDMjQ0MF9VRkNPTl9UWFRSSUcxNiB8CVwKIAkJCQlTM0MyNDEwX1VGQ09OX1JYVFJJRzgpCiAKQEAgLTU4LDQwICs2MCw1MSBAQAogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gUzVQNjQ0MF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkgICAgID0gUzVQNjQ0MF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JICAgICA9IFM1UDY0NDBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JICAgICA9IFNNREs2NDQwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCSAgICAgPSBTTURLNjQ0MF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JICAgICA9IFNNREs2NDQwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJICAgICA9IDEsCiAJCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFM1UDY0NDBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JICAgICA9IFM1UDY0NDBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCSAgICAgPSBTNVA2NDQwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCSAgICAgPSBTTURLNjQ0MF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkgICAgID0gU01ESzY0NDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTTURLNjQ0MF9VRkNPTl9ERUZBVUxULAogCX0sCiAJWzJdID0gewogCQkuaHdwb3J0CSAgICAgPSAyLAogCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSBTNVA2NDQwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCSAgICAgPSBTNVA2NDQwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkgICAgID0gUzVQNjQ0MF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkgICAgID0gU01ESzY0NDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFNNREs2NDQwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkgICAgID0gU01ESzY0NDBfVUZDT05fREVGQVVMVCwKIAl9LAogCVszXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMywKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gUzVQNjQ0MF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkgICAgID0gUzVQNjQ0MF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JICAgICA9IFM1UDY0NDBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JICAgICA9IFNNREs2NDQwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCSAgICAgPSBTTURLNjQ0MF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JICAgICA9IFNNREs2NDQwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQ0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczVwNjQ0MF9kZXZpY2VfaWlzLAogCSZzM2NfZGV2aWNlX2FkYywKKwkmczNjX2RldmljZV9ydGMsCisJJnMzY19kZXZpY2VfaTJjMCwKKwkmczNjX2RldmljZV9pMmMxLAogCSZzM2NfZGV2aWNlX3RzLAogCSZzM2NfZGV2aWNlX3dkdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc21kazY0NDBfaTJjX2RldnMwW10gX19pbml0ZGF0YSA9IHsKKwl7IEkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBzbWRrNjQ0MF9pMmNfZGV2czFbXSBfX2luaXRkYXRhID0geworCS8qIFRvIGJlIHBvcHVsYXRlZCAqLworfTsKKwogc3RhdGljIHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyBzM2NfdHNfcGxhdGZvcm0gX19pbml0ZGF0YSA9IHsKIAkuZGVsYXkJCQk9IDEwMDAwLAogCS5wcmVzYwkJCT0gNDksCkBAIC0xMDksNiArMTIyLDE0IEBACiB7CiAJczNjMjR4eF90c19zZXRfcGxhdGRhdGEoJnMzY190c19wbGF0Zm9ybSk7CiAKKwkvKiBJMkMgKi8KKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisJczNjX2kyYzFfc2V0X3BsYXRkYXRhKE5VTEwpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHNtZGs2NDQwX2kyY19kZXZzMCwKKwkJCUFSUkFZX1NJWkUoc21kazY0NDBfaTJjX2RldnMwKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgc21kazY0NDBfaTJjX2RldnMxLAorCQkJQVJSQVlfU0laRShzbWRrNjQ0MF9pMmNfZGV2czEpKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDQwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0NDBfZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvc2V0dXAtaTJjMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL3NldHVwLWkyYzAuYwppbmRleCA2OWU4YTY2Li4yYzk5ZDE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvc2V0dXAtaTJjMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9zZXR1cC1pMmMwLmMKQEAgLTE3LDkgKzE3LDE0IEBACiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCiAKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAKIHZvaWQgczNjX2kyYzBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCS8qIFdpbGwgYmUgcG9wdWxhdGVkIGxhdGVyICovCisJczNjX2dwaW9fY2ZncGluKFM1UDY0NDBfR1BCKDUpLCBTM0NfR1BJT19TRk4oMikpOworCXMzY19ncGlvX3NldHB1bGwoUzVQNjQ0MF9HUEIoNSksIFMzQ19HUElPX1BVTExfVVApOworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDQwX0dQQig2KSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFM1UDY0NDBfR1BCKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9zZXR1cC1pMmMxLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvc2V0dXAtaTJjMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvc2V0dXAtaTJjMS5jCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9zZXR1cC1pMmMxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEkyQzEgR1BJTyBjb25maWd1cmF0aW9uLgorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9zZXR1cC1pMmMwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLworCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisKK3ZvaWQgczNjX2kyYzFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTNVA2NDQwX0dQUig5KSwgUzNDX0dQSU9fU0ZOKDYpKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFM1UDY0NDBfR1BSKDkpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQNjQ0MF9HUFIoMTApLCBTM0NfR1BJT19TRk4oNikpOworCXMzY19ncGlvX3NldHB1bGwoUzVQNjQ0MF9HUFIoMTApLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL0tjb25maWcKaW5kZXggMGZkNDFiNC4uMGZkYTBhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL0tjb25maWcKQEAgLTE5LDYgKzE5LDcgQEAKIGNvbmZpZyBNQUNIX1NNREs2NDQyCiAJYm9vbCAiU01ESzY0NDIiCiAJc2VsZWN0IENQVV9TNVA2NDQyCisJc2VsZWN0IFMzQ19ERVZfV0RUCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIFNNREs2NDQyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Nsb2NrLmMKaW5kZXggMDg3ZTU3Zi4uZGNkMjBmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Nsb2NrLmMKQEAgLTM2MSw2ICszNjEsMTIgQEAKIAkJLmVuYWJsZQkJPSBzNXA2NDQyX2Nsa19pcDNfY3RybCwKIAkJLmN0cmxiaXQJPSAoMTw8MTkpLAogCX0sIHsKKwkJLm5hbWUJCT0gIndhdGNoZG9nIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxIDw8IDIyKSwKKwl9LCB7CiAJCS5uYW1lCQk9ICJ0aW1lcnMiLAogCQkuaWQJCT0gLTEsCiAJCS5wYXJlbnQJCT0gJmNsa19wY2xrZDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvZGV2LWF1ZGlvLmMKaW5kZXggY2I4MDFlMS4uN2E0ZTM0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Rldi1hdWRpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9kZXYtYXVkaW8uYwpAQCAtMTAsMTEgKzEwLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KICNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvZGV2LXNwaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Rldi1zcGkuYwppbmRleCAzMDE5OTUyLi5lODk0NjUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvZGV2LXNwaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9kZXYtc3BpLmMKQEAgLTEwLDExICsxMCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGktY2xvY2tzLmg+CiAKICNpbmNsdWRlIDxwbGF0L3MzYzY0eHgtc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDAyYzIzNzQuLjNmYmM2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0zMiw3ICszMiw3IEBACiAjZGVmaW5lIElSUV9HUElPSU5UCQlTNVBfSVJRX1ZJQzAoMzApCiAKIC8qIFZJQzEgKi8KLSNkZWZpbmUgSVJRX25QTVVJUlEgCQlTNVBfSVJRX1ZJQzEoMCkKKyNkZWZpbmUgSVJRX1BNVQkJCVM1UF9JUlFfVklDMSgwKQogI2RlZmluZSBJUlFfT05FTkFORCAJCVM1UF9JUlFfVklDMSg3KQogI2RlZmluZSBJUlFfVUFSVDAgCQlTNVBfSVJRX1ZJQzEoMTApCiAjZGVmaW5lIElSUV9VQVJUMSAJCVM1UF9JUlFfVklDMSgxMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDMyY2E0MjQuLjI4MWQyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtNDIsNiArNDIsOCBAQAogCiAjZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIgICAJKDB4RUExMDAwMDApCiAKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9XQVRDSERPRwkoMHhFQTIwMDAwMCkKKwogI2RlZmluZSBTNVA2NDQyX1BBX1VBUlQJCSgweEVDMDAwMDAwKQogCiAjZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UDY0NDJfUEFfVUFSVCArIDB4MCkKQEAgLTY1LDYgKzY3LDcgQEAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9QQ00xCQkweEYyNTAwMDAwCiAKIC8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KKyNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQNjQ0Ml9QQV9XQVRDSERPRwogI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQNjQ0Ml9QQV9VQVJUCiAjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDJfUEFfSUlDMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA4YmNkOGVkLi5jMzBjMWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEzLDEyICsxMyw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXwogCi1zdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKLXsKLQkvKiBub3RoaW5nIGhlcmUgeWV0ICovCi19CisjaW5jbHVkZSA8cGxhdC9zeXN0ZW0tcmVzZXQuaD4KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9tYWNoLXNtZGs2NDQyLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvbWFjaC1zbWRrNjQ0Mi5jCmluZGV4IGViY2Y5OTcuLjhkOGQwNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9tYWNoLXNtZGs2NDQyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL21hY2gtc21kazY0NDIuYwpAQCAtMjcsMTYgKzI3LDE2IEBACiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFM1UDY0NDJfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisjZGVmaW5lIFNNREs2NDQyX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9UWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JIHwJXAogCQkJCSBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCiAKLSNkZWZpbmUgUzVQNjQ0Ml9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKKyNkZWZpbmUgU01ESzY0NDJfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CiAKLSNkZWZpbmUgUzVQNjQ0Ml9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAorI2RlZmluZSBTTURLNjQ0Ml9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAogCQkJCSBTNVBWMjEwX1VGQ09OX1RYVFJJRzQgfAlcCiAJCQkJIFM1UFYyMTBfVUZDT05fUlhUUklHNCkKIApAQCAtNDQsMjggKzQ0LDI5IEBACiAJWzBdID0gewogCQkuaHdwb3J0CQk9IDAsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVA2NDQyX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UDY0NDJfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UDY0NDJfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gU01ESzY0NDJfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gU01ESzY0NDJfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFNNREs2NDQyX1VGQ09OX0RFRkFVTFQsCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJCT0gMSwKIAkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFM1UDY0NDJfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gUzVQNjQ0Ml9VTENPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQNjQ0Ml9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkJPSBTTURLNjQ0Ml9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTTURLNjQ0Ml9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gU01ESzY0NDJfVUZDT05fREVGQVVMVCwKIAl9LAogCVsyXSA9IHsKIAkJLmh3cG9ydAkJPSAyLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQNjQ0Ml9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVA2NDQyX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVA2NDQyX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IFNNREs2NDQyX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFNNREs2NDQyX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTTURLNjQ0Ml9VRkNPTl9ERUZBVUxULAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0NDJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnM1cDY0NDJfZGV2aWNlX2lpczAsCisJJnMzY19kZXZpY2Vfd2R0LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDQyX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvS2NvbmZpZwppbmRleCBiMmExMWRmLi43N2FlNGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvS2NvbmZpZwpAQCAtMjUsNiArMjUsMTYgQEAKIAloZWxwCiAJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAxLgogCitjb25maWcgUzVQQzEwMF9TRVRVUF9JREUKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFM1UEMxMDAgSURFIEdQSU8gY29uZmlndXJhdGlvbnMKKworY29uZmlnIFM1UEMxMDBfU0VUVVBfS0VZUEFECisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBLRVlQQUQgR1BJTyBjb25maWd1cmF0aW9ucy4KKwogY29uZmlnIFM1UEMxMDBfU0VUVVBfU0RIQ0kKIAlib29sCiAJc2VsZWN0IFM1UEMxMDBfU0VUVVBfU0RIQ0lfR1BJTwpAQCAtNDAsMTMgKzUwLDI0IEBACiAJYm9vbCAiU01ES0MxMDAiCiAJc2VsZWN0IENQVV9TNVBDMTAwCiAJc2VsZWN0IFMzQ19ERVZfRkIKLQlzZWxlY3QgUzNDX0RFVl9JMkMxCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMKIAlzZWxlY3QgUzNDX0RFVl9IU01NQzEKIAlzZWxlY3QgUzNDX0RFVl9IU01NQzIKKwlzZWxlY3QgUzNDX0RFVl9JMkMxCisJc2VsZWN0IFMzQ19ERVZfUlRDCisJc2VsZWN0IFMzQ19ERVZfV0RUCisJc2VsZWN0IFNBTVNVTkdfREVWX0FEQworCXNlbGVjdCBTQU1TVU5HX0RFVl9JREUKKwlzZWxlY3QgU0FNU1VOR19ERVZfS0VZUEFECisJc2VsZWN0IFNBTVNVTkdfREVWX1RTCiAJc2VsZWN0IFM1UEMxMDBfU0VUVVBfRkJfMjRCUFAKIAlzZWxlY3QgUzVQQzEwMF9TRVRVUF9JMkMxCisJc2VsZWN0IFM1UEMxMDBfU0VUVVBfSURFCisJc2VsZWN0IFM1UEMxMDBfU0VUVVBfS0VZUEFECiAJc2VsZWN0IFM1UEMxMDBfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgUzVQX0RFVl9GSU1DMAorCXNlbGVjdCBTNVBfREVWX0ZJTUMxCisJc2VsZWN0IFM1UF9ERVZfRklNQzIKIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREtDMTAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9NYWtlZmlsZQppbmRleCA1NDNmM2RlLi5hMDIxZWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw4IEBACiAKIG9iai0kKENPTkZJR19TNVBDMTAwX1NFVFVQX0ZCXzI0QlBQKQkrPSBzZXR1cC1mYi0yNGJwcC5vCiBvYmotJChDT05GSUdfUzVQQzEwMF9TRVRVUF9JMkMxKQkrPSBzZXR1cC1pMmMxLm8KK29iai0kKENPTkZJR19TNVBDMTAwX1NFVFVQX0lERSkJCSs9IHNldHVwLWlkZS5vCitvYmotJChDT05GSUdfUzVQQzEwMF9TRVRVUF9LRVlQQUQpCSs9IHNldHVwLWtleXBhZC5vCiBvYmotJChDT05GSUdfUzVQQzEwMF9TRVRVUF9TREhDSSkJKz0gc2V0dXAtc2RoY2kubwogb2JqLSQoQ09ORklHX1M1UEMxMDBfU0VUVVBfU0RIQ0lfR1BJTykJKz0gc2V0dXAtc2RoY2ktZ3Bpby5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Nsb2NrLmMKaW5kZXggZTNmZWQ0Yy4uMDg0YWJkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Nsb2NrLmMKQEAgLTczNyw3ICs3MzcsNyBAQAogCQkuZW5hYmxlCQk9IHM1cGMxMDBfZDFfNV9jdHJsLAogCQkuY3RybGJpdAk9ICgxIDw8IDcpLAogCX0sIHsKLQkJLm5hbWUJCT0gImtleWlmIiwKKwkJLm5hbWUJCT0gImtleXBhZCIsCiAJCS5pZAkJPSAtMSwKIAkJLnBhcmVudAkJPSAmY2xrX2Rpdl9kMV9idXMuY2xrLAogCQkuZW5hYmxlCQk9IHM1cGMxMDBfZDFfNV9jdHJsLApAQCAtMTA3OCw3ICsxMDc4LDcgQEAKIAkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjMsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDQgfSwKIAl9LCB7CiAJCS5jbGsJPSB7Ci0JCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkubmFtZQkJPSAic2Nsa19tbWMiLAogCQkJLmlkCQk9IDAsCiAJCQkuY3RybGJpdAk9ICgxIDw8IDEyKSwKIAkJCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMV9jdHJsLApAQCAtMTA4OSw3ICsxMDg5LDcgQEAKIAkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjMsIC5zaGlmdCA9IDAsIC5zaXplID0gNCB9LAogCX0sIHsKIAkJLmNsawk9IHsKLQkJCS5uYW1lCQk9ICJtbWNfYnVzIiwKKwkJCS5uYW1lCQk9ICJzY2xrX21tYyIsCiAJCQkuaWQJCT0gMSwKIAkJCS5jdHJsYml0CT0gKDEgPDwgMTMpLAogCQkJLmVuYWJsZQkJPSBzNXBjMTAwX3NjbGsxX2N0cmwsCkBAIC0xMTAwLDcgKzExMDAsNyBAQAogCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtfRElWMywgLnNoaWZ0ID0gNCwgLnNpemUgPSA0IH0sCiAJfSwgewogCQkuY2xrCT0gewotCQkJLm5hbWUJCT0gIm1tY19idXMiLAorCQkJLm5hbWUJCT0gInNjbGtfbW1jIiwKIAkJCS5pZAkJPSAyLAogCQkJLmN0cmxiaXQJPSAoMSA8PCAxNCksCiAJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9jcHUuYwppbmRleCA3YjViZGJjLi4yNTFjOTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2NwdS5jCkBAIC0zOCw5ICszOCwxMiBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvYXRhLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorI2luY2x1ZGUgPHBsYXQvYWRjLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L29uZW5hbmQtY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvZmItY29yZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9zNXBjMTAwLmg+CiAKQEAgLTg3LDExICs5MCwxNSBAQAogCXM1cGMxMDBfZGVmYXVsdF9zZGhjaTEoKTsKIAlzNXBjMTAwX2RlZmF1bHRfc2RoY2kyKCk7CiAKKwlzM2NfYWRjX3NldG5hbWUoInMzYzY0eHgtYWRjIik7CisKIAkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCiAJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKIAlzM2NfaTJjMV9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOwogCiAJczNjX29uZW5hbmRfc2V0bmFtZSgiczVwYzEwMC1vbmVuYW5kIik7CisJczNjX2ZiX3NldG5hbWUoInM1cGMxMDAtZmIiKTsKKwlzM2NfY2Zjb25fc2V0bmFtZSgiczVwYzEwMC1wYXRhIik7CiB9CiAKIHZvaWQgX19pbml0IHM1cGMxMDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LWF1ZGlvLmMKaW5kZXggMThjZmU5YS4uYTY5OWVkNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9kZXYtYXVkaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LWF1ZGlvLmMKQEAgLTEwLDExICsxMCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Rldi1zcGkuYyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9kZXYtc3BpLmMKaW5kZXggMTQ2MThjMy4uYTBlZjdjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2Rldi1zcGkuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvZGV2LXNwaS5jCkBAIC0xMCwxMCArMTAsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvc3BpLWNsb2Nrcy5oPgogCiAjaW5jbHVkZSA8cGxhdC9zM2M2NHh4LXNwaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCAyOGFhNTUxLi4wNjUxM2U2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSBJUlFfR1BJT0lOVAkJUzVQX0lSUV9WSUMwKDMwKQogCiAvKiBWSUMxOiBBUk0sIHBvd2VyLCBtZW1vcnksIGNvbm5lY3Rpdml0eSAqLwotI2RlZmluZSBJUlFfQ09SVEVYMAkJUzVQX0lSUV9WSUMxKDApCisjZGVmaW5lIElSUV9QTVUJCQlTNVBfSVJRX1ZJQzEoMCkKICNkZWZpbmUgSVJRX0NPUlRFWDEJCVM1UF9JUlFfVklDMSgxKQogI2RlZmluZSBJUlFfQ09SVEVYMgkJUzVQX0lSUV9WSUMxKDIpCiAjZGVmaW5lIElSUV9DT1JURVgzCQlTNVBfSVJRX1ZJQzEoMykKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgSVJRX0lFTUlFQwkJUzVQX0lSUV9WSUMxKDYpCiAjZGVmaW5lIElSUV9PTkVOQU5ECQlTNVBfSVJRX1ZJQzEoNykKICNkZWZpbmUgSVJRX05GQwkJCVM1UF9JUlFfVklDMSg4KQotI2RlZmluZSBJUlFfQ0ZDCQkJUzVQX0lSUV9WSUMxKDkpCisjZGVmaW5lIElSUV9DRkNPTgkJUzVQX0lSUV9WSUMxKDkpCiAjZGVmaW5lIElSUV9VQVJUMAkJUzVQX0lSUV9WSUMxKDEwKQogI2RlZmluZSBJUlFfVUFSVDEJCVM1UF9JUlFfVklDMSgxMSkKICNkZWZpbmUgSVJRX1VBUlQyCQlTNVBfSVJRX1ZJQzEoMTIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBjYWRhZTQzLi4wMWI5MTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTYxLDYgKzYxLDggQEAKIAogI2RlZmluZSBTNVBDMTAwX1BBX09ORU5BTkQJKDB4RTcxMDAwMDApCiAKKyNkZWZpbmUgUzVQQzEwMF9QQV9DRkNPTgkoMHhFNzgwMDAwMCkKKwogLyogRE1BICovCiAjZGVmaW5lIFM1UEMxMDBfUEFfTURNQQkJKDB4RTgxMDAwMDApCiAjZGVmaW5lIFM1UEMxMDBfUEFfUERNQTAJKDB4RTkwMDAwMDApCkBAIC03Miw2ICs3NCw5IEBACiAKICNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkoMHhFQTEwMDAwMCkKIAorI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCSgweEVBMjAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1JUQwkJKDB4RUEzMDAwMDApCisKICNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkoMHhFQzAwMDAwMCkKIAogI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBDMTAwX1BBX1VBUlQgKyAweDApCkBAIC05NCw2ICs5OSwxMCBAQAogCiAjZGVmaW5lIFM1UEMxMDBfUEFfRkIJCSgweEVFMDAwMDAwKQogCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzAJKDB4RUUyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzEJKDB4RUUzMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzIJKDB4RUU0MDAwMDApCisKICNkZWZpbmUgUzVQQzEwMF9QQV9JMlMwCQkoMHhGMjAwMDAwMCkKICNkZWZpbmUgUzVQQzEwMF9QQV9JMlMxCQkoMHhGMjEwMDAwMCkKICNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkoMHhGMjIwMDAwMCkKQEAgLTEwNCw2ICsxMTMsOCBAQAogI2RlZmluZSBTNVBDMTAwX1BBX1BDTTAJCTB4RjI0MDAwMDAKICNkZWZpbmUgUzVQQzEwMF9QQV9QQ00xCQkweEYyNTAwMDAwCiAKKyNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkoMHhGMzAwMDAwMCkKKwogLyogS0VZUEFEICovCiAjZGVmaW5lIFM1UEMxMDBfUEFfS0VZUEFECSgweEYzMTAwMDAwKQogCkBAIC0xMzAsOSArMTQxLDE5IEBACiAjZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UEMxMDBfUEFfSFNNTUMoMSkKICNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQQzEwMF9QQV9IU01NQygyKQogI2RlZmluZSBTM0NfUEFfS0VZUEFECQlTNVBDMTAwX1BBX0tFWVBBRAorI2RlZmluZSBTM0NfUEFfV0RUCQlTNVBDMTAwX1BBX1dBVENIRE9HCiAjZGVmaW5lIFMzQ19QQV9UU0FEQwkJUzVQQzEwMF9QQV9UU0FEQwogI2RlZmluZSBTM0NfUEFfT05FTkFORAkJUzVQQzEwMF9QQV9PTkVOQU5ECiAjZGVmaW5lIFMzQ19QQV9PTkVOQU5EX0JVRglTNVBDMTAwX1BBX09ORU5BTkRfQlVGCiAjZGVmaW5lIFMzQ19TWl9PTkVOQU5EX0JVRglTNVBDMTAwX1NaX09ORU5BTkRfQlVGCisjZGVmaW5lIFMzQ19QQV9SVEMJCVM1UEMxMDBfUEFfUlRDCisKKyNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UEMxMDBfUEFfVFNBREMKKyNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTglTNVBDMTAwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECVM1UEMxMDBfUEFfS0VZUEFECisKKyNkZWZpbmUgUzVQX1BBX0ZJTUMwCQlTNVBDMTAwX1BBX0ZJTUMwCisjZGVmaW5lIFM1UF9QQV9GSU1DMQkJUzVQQzEwMF9QQV9GSU1DMQorI2RlZmluZSBTNVBfUEFfRklNQzIJCVM1UEMxMDBfUEFfRklNQzIKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQzEwMF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAppbmRleCA1ZDI3ZDI4Li5iYzkyZGEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtNzEsNyArNzEsMTAgQEAKICNkZWZpbmUgUzVQX0NMS0RJVjFfUENMS0QxX1NISUZUCSgxNikKIAogI2RlZmluZSBTNVBDMTAwX1NXUkVTRVQJCVM1UEMxMDBfUkVHX09USEVSUygweDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9NRU1fU1lTX0NGRwlTNVBDMTAwX1JFR19PVEhFUlMoMHgyMDApCiAKICNkZWZpbmUgUzVQQzEwMF9TV1JFU0VUX1JFU0VUVkFMCTB4YzEwMAogCisjZGVmaW5lIE1FTV9TWVNfQ0ZHX0VCSV9GSVhfUFJJX0NGQ09OCTB4MzAKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCmluZGV4IDE3MzJjZDIuLjRiZTRjYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCkBAIC0xMDAsNDAgKzEwMCw2IEBACiAjZGVmaW5lIEJMRU5EQ09OCQkJCQkoMHgyNjApCiAjZGVmaW5lIEJMRU5EQ09OXzhCSVRfQUxQSEEJCQkJKDEgPDwgMCkKIAotLyogUGVyLXdpbmRvdyBwYWxldHRlIGJhc2UgYWRkcmVzc2VzIChzdGFydCBvZiBwYWxldHRlIG1lbW9yeSkuCi0gKiBFYWNoIHdpbmRvdyBwYWxldHRlIGFyZWEgY29uc2lzdHMgb2YgMjU2IDMyLWJpdCBlbnRyaWVzLgotICogU1RBUlQgaXMgdGhlIGZpcnN0IGFkZHJlc3MgKGVudHJ5IDB0aCksIEVORCBpcyB0aGUgYWRkcmVzcyBvZiAyNTV0aCBlbnRyeS4KLSAqLwotI2RlZmluZSBXSU4wX1BBTF9CQVNFCQkJCQkoMHgyNDAwKQotI2RlZmluZSBXSU4wX1BBTF9FTkQJCQkJCSgweDI3ZmMpCi0jZGVmaW5lIFdJTjFfUEFMX0JBU0UJCQkJCSgweDI4MDApCi0jZGVmaW5lIFdJTjFfUEFMX0VORAkJCQkJKDB4MmJmYykKLSNkZWZpbmUgV0lOMl9QQUxfQkFTRQkJCQkJKDB4MmMwMCkKLSNkZWZpbmUgV0lOMl9QQUxfRU5ECQkJCQkoMHgyZmZjKQotI2RlZmluZSBXSU4zX1BBTF9CQVNFCQkJCQkoMHgzMDAwKQotI2RlZmluZSBXSU4zX1BBTF9FTkQJCQkJCSgweDMzZmMpCi0jZGVmaW5lIFdJTjRfUEFMX0JBU0UJCQkJCSgweDM0MDApCi0jZGVmaW5lIFdJTjRfUEFMX0VORAkJCQkJKDB4MzdmYykKLQotI2RlZmluZSBXSU4wX1BBTChfZW50cnkpCQkJKFdJTjBfUEFMX0JBU0UgKyAoKF9lbnRyeSkgKiA0KSkKLSNkZWZpbmUgV0lOMV9QQUwoX2VudHJ5KQkJCShXSU4xX1BBTF9CQVNFICsgKChfZW50cnkpICogNCkpCi0jZGVmaW5lIFdJTjJfUEFMKF9lbnRyeSkJCQkoV0lOMl9QQUxfQkFTRSArICgoX2VudHJ5KSAqIDQpKQotI2RlZmluZSBXSU4zX1BBTChfZW50cnkpCQkJKFdJTjNfUEFMX0JBU0UgKyAoKF9lbnRyeSkgKiA0KSkKLSNkZWZpbmUgV0lONF9QQUwoX2VudHJ5KQkJCShXSU40X1BBTF9CQVNFICsgKChfZW50cnkpICogNCkpCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzY19mYl9wYWxfcmVnKHVuc2lnbmVkIGludCB3aW5kb3csIGludCByZWcpCi17Ci0Jc3dpdGNoICh3aW5kb3cpIHsKLQljYXNlIDA6IHJldHVybiBXSU4wX1BBTChyZWcpOwotCWNhc2UgMTogcmV0dXJuIFdJTjFfUEFMKHJlZyk7Ci0JY2FzZSAyOiByZXR1cm4gV0lOMl9QQUwocmVnKTsKLQljYXNlIDM6IHJldHVybiBXSU4zX1BBTChyZWcpOwotCWNhc2UgNDogcmV0dXJuIFdJTjRfUEFMKHJlZyk7Ci0JfQotCi0JQlVHKCk7Ci19Ci0KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19GQl9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDY4MWY2MjYuLmE5ZWE1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTEsMTggKzExLDExIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXwogCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvc3lzdGVtLXJlc2V0Lmg+CiAKIHN0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KIH0KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKLXsKLQlfX3Jhd193cml0ZWwoUzVQQzEwMF9TV1JFU0VUX1JFU0VUVkFMLCBTNVBDMTAwX1NXUkVTRVQpOwotCXJldHVybjsKLX0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL21hY2gtc21ka2MxMDAuYwppbmRleCBhZjIyZjgyLi4wMjBjM2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9tYWNoLXNtZGtjMTAwLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTQyLDE4ICs0MywyMiBAQAogI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgogI2luY2x1ZGUgPHBsYXQvZmIuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvYXRhLmg+CisjaW5jbHVkZSA8cGxhdC9hZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgorI2luY2x1ZGUgPHBsYXQvdHMuaD4KIAogLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFM1UEMxMDBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisjZGVmaW5lIFNNREtDMTAwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9UWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JIHwJXAogCQkJCSBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCiAKLSNkZWZpbmUgUzVQQzEwMF9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKKyNkZWZpbmUgU01ES0MxMDBfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CiAKLSNkZWZpbmUgUzVQQzEwMF9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAorI2RlZmluZSBTTURLQzEwMF9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAogCQkJCSBTM0MyNDQwX1VGQ09OX1JYVFJJRzggfAlcCiAJCQkJIFMzQzI0NDBfVUZDT05fVFhUUklHMTYpCiAKQEAgLTYxLDMwICs2NiwzMCBAQAogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gUzVQQzEwMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkgICAgID0gUzVQQzEwMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JICAgICA9IFM1UEMxMDBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JICAgICA9IFNNREtDMTAwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCSAgICAgPSBTTURLQzEwMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JICAgICA9IFNNREtDMTAwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJICAgICA9IDEsCiAJCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFM1UEMxMDBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JICAgICA9IFM1UEMxMDBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCSAgICAgPSBTNVBDMTAwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCSAgICAgPSBTTURLQzEwMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkgICAgID0gU01ES0MxMDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTTURLQzEwMF9VRkNPTl9ERUZBVUxULAogCX0sCiAJWzJdID0gewogCQkuaHdwb3J0CSAgICAgPSAyLAogCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSBTNVBDMTAwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCSAgICAgPSBTNVBDMTAwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkgICAgID0gUzVQQzEwMF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkgICAgID0gU01ES0MxMDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFNNREtDMTAwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkgICAgID0gU01ES0MxMDBfVUZDT05fREVGQVVMVCwKIAl9LAogCVszXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMywKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gUzVQQzEwMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkgICAgID0gUzVQQzEwMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JICAgICA9IFM1UEMxMDBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JICAgICA9IFNNREtDMTAwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCSAgICAgPSBTTURLQzEwMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JICAgICA9IFNNREtDMTAwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIH07CiAKQEAgLTEyOCw3ICsxMzMsNiBAQAogc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIHNtZGtjMTAwX2ZiX3dpbjAgPSB7CiAJLyogdGhpcyBpcyB0byBlbnN1cmUgd2UgdXNlIHdpbjAgKi8KIAkud2luX21vZGUJPSB7Ci0JCS5waXhjbG9jayA9IDEwMDAwMDAwMDAwMDBVTEwgLyAoKDgrMTMrMys4MDApKig3KzUrMSs0ODApKjgwKSwKIAkJLmxlZnRfbWFyZ2luCT0gOCwKIAkJLnJpZ2h0X21hcmdpbgk9IDEzLAogCQkudXBwZXJfbWFyZ2luCT0gNywKQEAgLTEzNyw2ICsxNDEsNyBAQAogCQkudnN5bmNfbGVuCT0gMSwKIAkJLnhyZXMJCT0gODAwLAogCQkueXJlcwkJPSA0ODAsCisJCS5yZWZyZXNoCT0gODAsCiAJfSwKIAkubWF4X2JwcAk9IDMyLAogCS5kZWZhdWx0X2JwcAk9IDE2LApAQCAtMTQ5LDE2ICsxNTQsNTQgQEAKIAkuc2V0dXBfZ3Bpbwk9IHM1cGMxMDBfZmJfZ3Bpb19zZXR1cF8yNGJwcCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSBzbWRrYzEwMF9pZGVfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuc2V0dXBfZ3Bpbwk9IHM1cGMxMDBfaWRlX3NldHVwX2dwaW8sCit9OworCitzdGF0aWMgdWludDMyX3Qgc21ka2MxMDBfa2V5bWFwW10gX19pbml0ZGF0YSA9IHsKKwkvKiBLRVkocm93LCBjb2wsIGtleWNvZGUpICovCisJS0VZKDAsIDMsIEtFWV8xKSwgS0VZKDAsIDQsIEtFWV8yKSwgS0VZKDAsIDUsIEtFWV8zKSwKKwlLRVkoMCwgNiwgS0VZXzQpLCBLRVkoMCwgNywgS0VZXzUpLAorCUtFWSgxLCAzLCBLRVlfQSksIEtFWSgxLCA0LCBLRVlfQiksIEtFWSgxLCA1LCBLRVlfQyksCisJS0VZKDEsIDYsIEtFWV9EKSwgS0VZKDEsIDcsIEtFWV9FKQorfTsKKworc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgc21ka2MxMDBfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkua2V5bWFwCQk9IHNtZGtjMTAwX2tleW1hcCwKKwkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKHNtZGtjMTAwX2tleW1hcCksCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfa2V5cGFkX3BsYXRkYXRhIHNtZGtjMTAwX2tleXBhZF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJnNtZGtjMTAwX2tleW1hcF9kYXRhLAorCS5yb3dzCQk9IDIsCisJLmNvbHMJCT0gOCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrYzEwMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2VfY2Zjb24sCiAJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9pMmMxLAogCSZzM2NfZGV2aWNlX2ZiLAogCSZzM2NfZGV2aWNlX2hzbW1jMCwKIAkmczNjX2RldmljZV9oc21tYzEsCiAJJnMzY19kZXZpY2VfaHNtbWMyLAorCSZzM2NfZGV2aWNlX3RzLAorCSZzM2NfZGV2aWNlX3dkdCwKIAkmc21ka2MxMDBfbGNkX3Bvd2VyZGV2LAogCSZzNXBjMTAwX2RldmljZV9paXMwLAorCSZzYW1zdW5nX2RldmljZV9rZXlwYWQsCiAJJnM1cGMxMDBfZGV2aWNlX2FjOTcsCisJJnMzY19kZXZpY2VfcnRjLAorCSZzNXBfZGV2aWNlX2ZpbWMwLAorCSZzNXBfZGV2aWNlX2ZpbWMxLAorCSZzNXBfZGV2aWNlX2ZpbWMyLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3RzX21hY2hfaW5mbyBzM2NfdHNfcGxhdGZvcm0gX19pbml0ZGF0YSA9IHsKKwkuZGVsYXkJCQk9IDEwMDAwLAorCS5wcmVzYwkJCT0gNDksCisJLm92ZXJzYW1wbGluZ19zaGlmdAk9IDIsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21ka2MxMDBfbWFwX2lvKHZvaWQpCkBAIC0xNzAsNiArMjEzLDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHNtZGtjMTAwX21hY2hpbmVfaW5pdCh2b2lkKQogeworCXMzYzI0eHhfdHNfc2V0X3BsYXRkYXRhKCZzM2NfdHNfcGxhdGZvcm0pOworCiAJLyogSTJDICovCiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCXMzY19pMmMxX3NldF9wbGF0ZGF0YShOVUxMKTsKQEAgLTE3Nyw2ICsyMjIsOSBAQAogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyY19kZXZzMSwgQVJSQVlfU0laRShpMmNfZGV2czEpKTsKIAogCXMzY19mYl9zZXRfcGxhdGRhdGEoJnNtZGtjMTAwX2xjZF9wZGF0YSk7CisJczNjX2lkZV9zZXRfcGxhdGRhdGEoJnNtZGtjMTAwX2lkZV9wZGF0YSk7CisKKwlzYW1zdW5nX2tleXBhZF9zZXRfcGxhdGRhdGEoJnNtZGtjMTAwX2tleXBhZF9kYXRhKTsKIAogCS8qIExDRCBpbml0ICovCiAJZ3Bpb19yZXF1ZXN0KFM1UEMxMDBfR1BEKDApLCAiR1BEIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtaWRlLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1NzU2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1pZGUuYwpAQCAtMCwwICsxLDcwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtaWRlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogUzVQQzEwMCBzZXR1cCBpbmZvcm1hdGlvbiBmb3IgSURFCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKwordm9pZCBzNXBjMTAwX2lkZV9zZXR1cF9ncGlvKHZvaWQpCit7CisJdTMyIHJlZzsKKwl1MzIgZ3BpbyA9IDA7CisKKwkvKiBJbmRlcGVuZGVudCBDRiBpbnRlcmZhY2UsIENGIGNoaXAgc2VsZWN0IGNvbmZpZ3VyYXRpb24gKi8KKwlyZWcgPSByZWFkbChTNVBDMTAwX01FTV9TWVNfQ0ZHKSAmICh+MHgzZik7CisJd3JpdGVsKHJlZyB8IE1FTV9TWVNfQ0ZHX0VCSV9GSVhfUFJJX0NGQ09OLCBTNVBDMTAwX01FTV9TWVNfQ0ZHKTsKKworCS8qIENGX0FkZFswIC0gMl0sIENGX0lPUkRZLCBDRl9JTlRSUSwgQ0ZfRE1BUlEsIENGX0RNQVJTVCwgQ0ZfRE1BQ0sgKi8KKwlmb3IgKGdwaW8gPSBTNVBDMTAwX0dQSjAoMCk7IGdwaW8gPD0gUzVQQzEwMF9HUEowKDcpOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTig0KSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKKwl9CisKKwkvKkNGX0RhdGFbMCAtIDddICovCisJZm9yIChncGlvID0gUzVQQzEwMF9HUEoyKDApOyBncGlvIDw9IFM1UEMxMDBfR1BKMig3KTsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oNCkpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CisJfQorCisJLyogQ0ZfRGF0YVs4IC0gMTVdICovCisJZm9yIChncGlvID0gUzVQQzEwMF9HUEozKDApOyBncGlvIDw9IFM1UEMxMDBfR1BKMyg3KTsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oNCkpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CisJfQorCisJLyogQ0ZfQ1MwLCBDRl9DUzEsIENGX0lPUkQsIENGX0lPV1IgKi8KKwlmb3IgKGdwaW8gPSBTNVBDMTAwX0dQSjQoMCk7IGdwaW8gPD0gUzVQQzEwMF9HUEo0KDMpOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTig0KSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwkJczVwX2dwaW9fc2V0X2RydnN0cihncGlvLCBTNVBfR1BJT19EUlZTVFJfTFY0KTsKKwl9CisKKwkvKiBFQklfT0UsIEVCSV9XRSAqLworCWZvciAoZ3BpbyA9IFM1UEMxMDBfR1BLMCg2KTsgZ3BpbyA8PSBTNVBDMTAwX0dQSzAoNyk7IGdwaW8rKykKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigwKSk7CisKKwkvKiBDRl9PRSwgQ0ZfV0UgKi8KKwlmb3IgKGdwaW8gPSBTNVBDMTAwX0dQSzEoNik7IGdwaW8gPD0gUzVQQzEwMF9HUEsxKDcpOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9CisKKwkvKiBDRl9DRCAqLworCXMzY19ncGlvX2NmZ3BpbihTNVBDMTAwX0dQSzMoNSksIFMzQ19HUElPX1NGTigyKSk7CisJczNjX2dwaW9fc2V0cHVsbChTNVBDMTAwX0dQSzMoNSksIFMzQ19HUElPX1BVTExfTk9ORSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAta2V5cGFkLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAta2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4MzdhNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1rZXlwYWQuYwpAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAta2V5cGFkLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEdQSU8gY29uZmlndXJhdGlvbiBmb3IgUzVQQzEwMCBLZXlQYWQgZGV2aWNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHNhbXN1bmdfa2V5cGFkX2NmZ19ncGlvKHVuc2lnbmVkIGludCByb3dzLCB1bnNpZ25lZCBpbnQgY29scykKK3sKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwl1bnNpZ25lZCBpbnQgZW5kOworCisJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSDMgcGlucyB0byBzcGVjaWFsLWZ1bmN0aW9uIDM6IEtQX1JPV1t4XSAqLworCWVuZCA9IFM1UEMxMDBfR1BIMyhyb3dzKTsKKwlmb3IgKGdwaW8gPSBTNVBDMTAwX0dQSDMoMCk7IGdwaW8gPCBlbmQ7IGdwaW8rKykgeworCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDMpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOworCX0KKworCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUEgyIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9DT0xbeF0gKi8KKwllbmQgPSBTNVBDMTAwX0dQSDIoY29scyk7CisJZm9yIChncGlvID0gUzVQQzEwMF9HUEgyKDApOyBncGlvIDwgZW5kOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigzKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtc2RoY2ktZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLWdwaW8uYwppbmRleCA3NzY5Yzc2Li5kYzcyMDhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvc2V0dXAtc2RoY2ktZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS1ncGlvLmMKQEAgLTIwLDkgKzIwLDExIEBACiAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgogCiB2b2lkIHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQogeworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAl1bnNpZ25lZCBpbnQgZW5kOwogCXVuc2lnbmVkIGludCBudW07CkBAIC00NywxMiArNDksMTUgQEAKIAkJfQogCX0KIAotCXMzY19ncGlvX3NldHB1bGwoUzVQQzEwMF9HUEcxKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKLQlzM2NfZ3Bpb19jZmdwaW4oUzVQQzEwMF9HUEcxKDIpLCBTM0NfR1BJT19TRk4oMikpOworCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKKwkJczNjX2dwaW9fc2V0cHVsbChTNVBDMTAwX0dQRzEoMiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oUzVQQzEwMF9HUEcxKDIpLCBTM0NfR1BJT19TRk4oMikpOworCX0KIH0KIAogdm9pZCBzNXBjMTAwX3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKIHsKKwlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgaW50IGdwaW87CiAJdW5zaWduZWQgaW50IGVuZDsKIApAQCAtNjQsMTIgKzY5LDE1IEBACiAJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKIAl9CiAKLQlzM2NfZ3Bpb19zZXRwdWxsKFM1UEMxMDBfR1BHMig2KSwgUzNDX0dQSU9fUFVMTF9VUCk7Ci0JczNjX2dwaW9fY2ZncGluKFM1UEMxMDBfR1BHMig2KSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKSB7CisJCXMzY19ncGlvX3NldHB1bGwoUzVQQzEwMF9HUEcyKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fY2ZncGluKFM1UEMxMDBfR1BHMig2KSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwl9CiB9CiAKIHZvaWQgczVwYzEwMF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCiB7CisJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCBncGlvOwogCXVuc2lnbmVkIGludCBlbmQ7CiAKQEAgLTgxLDYgKzg5LDggQEAKIAkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOwogCX0KIAotCXMzY19ncGlvX3NldHB1bGwoUzVQQzEwMF9HUEczKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKLQlzM2NfZ3Bpb19jZmdwaW4oUzVQQzEwMF9HUEczKDYpLCBTM0NfR1BJT19TRk4oMikpOworCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKKwkJczNjX2dwaW9fc2V0cHVsbChTNVBDMTAwX0dQRzMoNiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oUzVQQzEwMF9HUEczKDYpLCBTM0NfR1BJT19TRk4oMikpOworCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKaW5kZXggZWE3ZmYxOS4uZjE2OTQ2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKQEAgLTI2LDEwICsyNiwxMCBAQAogLyogY2xvY2sgc291cmNlcyBmb3IgdGhlIG1tYyBidXMgY2xvY2ssIG9yZGVyIGFzIGZvciB0aGUgY3RybDJbNS4uNF0gKi8KIAogY2hhciAqczVwYzEwMF9oc21tY19jbGtzcmNzWzRdID0gewotCVswXSA9ICJoc21tYyIsCi0JWzFdID0gImhzbW1jIiwKLQkvKiBbMl0gPSAibW1jX2J1cyIsIG5vdCB5ZXQgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCi0JLyogWzNdID0gIjQ4bSIsIC0gbm90ZSBub3Qgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCisJWzBdID0gImhzbW1jIiwJCS8qIEhDTEsgKi8KKwkvKiBbMV0gPSAiaHNtbWMiLAktIGR1cGxpY2F0ZSBIQ0xLIGVudHJ5ICovCisJWzJdID0gInNjbGtfbW1jIiwJLyogbW1jX2J1cyAqLworCS8qIFszXSA9ICI0OG0iLAkJLSBub3RlIG5vdCBzdWNjZXNzZnVsbHkgdXNlZCB5ZXQgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvS2NvbmZpZwppbmRleCAwNzYxZWFjLi5kM2EzODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvS2NvbmZpZwpAQCAtMjcsMTEgKzI3LDIxIEBACiAJaGVscAogCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMi4KIAorY29uZmlnIFM1UFYyMTBfU0VUVVBfSURFCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTNVBWMjEwIElERSBHUElPIGNvbmZpZ3VyYXRpb25zCisKIGNvbmZpZyBTNVBWMjEwX1NFVFVQX0ZCXzI0QlBQCiAJYm9vbAogCWhlbHAKICAgICAgICAgICBDb21tb24gc2V0dXAgY29kZSBmb3IgUzVQVjIxMCB3aXRoIGFuIDI0YnBwIFJHQiBkaXNwbGF5IGhlbHBlci4KIAorY29uZmlnIFM1UFYyMTBfU0VUVVBfS0VZUEFECisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBrZXlwYWQuCisKIGNvbmZpZyBTNVBWMjEwX1NFVFVQX1NESENJCiAgICAgICAgIGJvb2wKICAgICAgICAgc2VsZWN0IFM1UFYyMTBfU0VUVVBfU0RIQ0lfR1BJTwpAQCAtNDMsMTQgKzUzLDI3IEBACiAJaGVscAogCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFNESENJIGdwaW8uCiAKLSMgbWFjaGluZSBzdXBwb3J0Citjb25maWcgUzVQQzExMF9ERVZfT05FTkFORAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBPbmVOQU5EMSBjb250cm9sbGVyCisKK21lbnUgIlM1UEMxMTAgTWFjaGluZXMiCiAKIGNvbmZpZyBNQUNIX0FRVUlMQQotCWJvb2wgIlNhbXN1bmcgQXF1aWxhIgorCWJvb2wgIkFxdWlsYSIKIAlzZWxlY3QgQ1BVX1M1UFYyMTAKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0Jc2VsZWN0IFM1UFYyMTBfU0VUVVBfRkJfMjRCUFAKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTNVBfREVWX0ZJTUMwCisJc2VsZWN0IFM1UF9ERVZfRklNQzEKKwlzZWxlY3QgUzVQX0RFVl9GSU1DMgorCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMxCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCisJc2VsZWN0IFM1UEMxMTBfREVWX09ORU5BTkQKKwlzZWxlY3QgUzVQVjIxMF9TRVRVUF9GQl8yNEJQUAorCXNlbGVjdCBTNVBWMjEwX1NFVFVQX1NESENJCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBBcXVpbGEgdGFyZ2V0IGJhc2VkIG9uIFM1UEMxMTAgU29DCiAKQEAgLTU4LDM0ICs4MSw2NCBAQAogCWJvb2wgIkdPTkkiCiAJc2VsZWN0IENQVV9TNVBWMjEwCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCXNlbGVjdCBTM0NfREVWX0ZCCisJc2VsZWN0IFM1UF9ERVZfRklNQzAKKwlzZWxlY3QgUzVQX0RFVl9GSU1DMQorCXNlbGVjdCBTNVBfREVWX0ZJTUMyCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzEKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzIKKwlzZWxlY3QgUzVQQzExMF9ERVZfT05FTkFORAorCXNlbGVjdCBTNVBWMjEwX1NFVFVQX0ZCXzI0QlBQCisJc2VsZWN0IFM1UFYyMTBfU0VUVVBfU0RIQ0kKIAloZWxwCiAJICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgR09OSSBib2FyZAogCSAgUzVQQzExMChNQ1ApIGlzIG9uZSBvZiBwYWNrYWdlIG9wdGlvbiBvZiBTNVBWMjEwCiAKLWNvbmZpZyBTNVBDMTEwX0RFVl9PTkVOQU5ECi0JYm9vbAotCWhlbHAKLQkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb24gZm9yIE9uZU5BTkQxIGNvbnRyb2xsZXIKLQotY29uZmlnIE1BQ0hfU01ES1YyMTAKLQlib29sICJTTURLVjIxMCIKLQlzZWxlY3QgQ1BVX1M1UFYyMTAKLQlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCi0Jc2VsZWN0IFNBTVNVTkdfREVWX0FEQwotCXNlbGVjdCBTQU1TVU5HX0RFVl9UUwotCXNlbGVjdCBTM0NfREVWX1dEVAotCXNlbGVjdCBIQVZFX1MzQzI0MTBfV0FUQ0hET0cKLQloZWxwCi0JICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgU01ES1YyMTAKLQogY29uZmlnIE1BQ0hfU01ES0MxMTAKIAlib29sICJTTURLQzExMCIKIAlzZWxlY3QgQ1BVX1M1UFYyMTAKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJc2VsZWN0IFMzQ19ERVZfSTJDMQorCXNlbGVjdCBTM0NfREVWX0kyQzIKKwlzZWxlY3QgUzNDX0RFVl9SVEMKIAlzZWxlY3QgUzNDX0RFVl9XRFQKLQlzZWxlY3QgSEFWRV9TM0MyNDEwX1dBVENIRE9HCisJc2VsZWN0IFNBTVNVTkdfREVWX0lERQorCXNlbGVjdCBTNVBWMjEwX1NFVFVQX0kyQzEKKwlzZWxlY3QgUzVQVjIxMF9TRVRVUF9JMkMyCisJc2VsZWN0IFM1UFYyMTBfU0VUVVBfSURFCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIFNNREtDMTEwCiAJICBTNVBDMTEwKE1DUCkgaXMgb25lIG9mIHBhY2thZ2Ugb3B0aW9uIG9mIFM1UFYyMTAKIAorZW5kbWVudQorCittZW51ICJTNVBWMjEwIE1hY2hpbmVzIgorCitjb25maWcgTUFDSF9TTURLVjIxMAorCWJvb2wgIlNNREtWMjEwIgorCXNlbGVjdCBDUFVfUzVQVjIxMAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgUzNDX0RFVl9IU01NQworCXNlbGVjdCBTM0NfREVWX0hTTU1DMQorCXNlbGVjdCBTM0NfREVWX0hTTU1DMgorCXNlbGVjdCBTM0NfREVWX0hTTU1DMworCXNlbGVjdCBTM0NfREVWX0kyQzEKKwlzZWxlY3QgUzNDX0RFVl9JMkMyCisJc2VsZWN0IFMzQ19ERVZfUlRDCisJc2VsZWN0IFMzQ19ERVZfV0RUCisJc2VsZWN0IFNBTVNVTkdfREVWX0FEQworCXNlbGVjdCBTQU1TVU5HX0RFVl9JREUKKwlzZWxlY3QgU0FNU1VOR19ERVZfS0VZUEFECisJc2VsZWN0IFNBTVNVTkdfREVWX1RTCisJc2VsZWN0IFM1UFYyMTBfU0VUVVBfSTJDMQorCXNlbGVjdCBTNVBWMjEwX1NFVFVQX0kyQzIKKwlzZWxlY3QgUzVQVjIxMF9TRVRVUF9JREUKKwlzZWxlY3QgUzVQVjIxMF9TRVRVUF9LRVlQQUQKKwlzZWxlY3QgUzVQVjIxMF9TRVRVUF9TREhDSQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTTURLVjIxMAorCitlbmRtZW51CisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvTWFrZWZpbGUKaW5kZXggMzBiZTlhNi4uMDUwNDhjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZQpAQCAtMzEsNSArMzEsNyBAQAogb2JqLSQoQ09ORklHX1M1UFYyMTBfU0VUVVBfRkJfMjRCUFApCSs9IHNldHVwLWZiLTI0YnBwLm8KIG9iai0kKENPTkZJR19TNVBWMjEwX1NFVFVQX0kyQzEpIAkrPSBzZXR1cC1pMmMxLm8KIG9iai0kKENPTkZJR19TNVBWMjEwX1NFVFVQX0kyQzIpIAkrPSBzZXR1cC1pMmMyLm8KK29iai0kKENPTkZJR19TNVBWMjEwX1NFVFVQX0lERSkJCSs9IHNldHVwLWlkZS5vCitvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9LRVlQQUQpCSs9IHNldHVwLWtleXBhZC5vCiBvYmotJChDT05GSUdfUzVQVjIxMF9TRVRVUF9TREhDSSkgICAgICAgKz0gc2V0dXAtc2RoY2kubwogb2JqLSQoQ09ORklHX1M1UFYyMTBfU0VUVVBfU0RIQ0lfR1BJTykJKz0gc2V0dXAtc2RoY2ktZ3Bpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1LmMKaW5kZXggNDExYTRhOS4uYjlmNGQ2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHUuYwpAQCAtMzEsOSArMzEsMTUgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L3M1cHYyMTAuaD4KKyNpbmNsdWRlIDxwbGF0L2FkYy1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9hdGEtY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvZmltYy1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9paWMtY29yZS5oPgorI2luY2x1ZGUgPHBsYXQva2V5cGFkLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9yZXNldC5oPgogCiAvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCiAKQEAgLTY5LDYgKzc1LDExIEBACiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCitzdGF0aWMgdm9pZCBzNXB2MjEwX3N3X3Jlc2V0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKDB4MSwgUzVQX1NXUkVTRVQpOworfQorCiAvKiBzNXB2MjEwX21hcF9pbwogICoKICAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKQEAgLTc2LDIxICs4NywzMSBAQAogCiB2b2lkIF9faW5pdCBzNXB2MjEwX21hcF9pbyh2b2lkKQogewotI2lmZGVmIENPTkZJR19TM0NfREVWX0FEQwotCXMzY19kZXZpY2VfYWRjLm5hbWUJPSAiczNjNjR4eC1hZGMiOwotI2VuZGlmCi0KIAlpb3RhYmxlX2luaXQoczVwdjIxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoczVwdjIxMF9pb2Rlc2MpKTsKIAogCS8qIGluaXRpYWxpc2UgZGV2aWNlIGluZm9ybWF0aW9uIGVhcmx5ICovCiAJczVwdjIxMF9kZWZhdWx0X3NkaGNpMCgpOwogCXM1cHYyMTBfZGVmYXVsdF9zZGhjaTEoKTsKIAlzNXB2MjEwX2RlZmF1bHRfc2RoY2kyKCk7CisJczVwdjIxMF9kZWZhdWx0X3NkaGNpMygpOworCisJczNjX2FkY19zZXRuYW1lKCJzM2M2NHh4LWFkYyIpOworCisJczNjX2NmY29uX3NldG5hbWUoInM1cHYyMTAtcGF0YSIpOworCisJczNjX2ZpbWNfc2V0bmFtZSgwLCAiczVwdjIxMC1maW1jIik7CisJczNjX2ZpbWNfc2V0bmFtZSgxLCAiczVwdjIxMC1maW1jIik7CisJczNjX2ZpbWNfc2V0bmFtZSgyLCAiczVwdjIxMC1maW1jIik7CiAKIAkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCiAJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKIAlzM2NfaTJjMV9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOwogCXMzY19pMmMyX3NldG5hbWUoInMzYzI0NDAtaTJjIik7CisKKwlzM2NfZmJfc2V0bmFtZSgiczVwdjIxMC1mYiIpOworCisJLyogVXNlIHM1cHYyMTAta2V5cGFkIGluc3RlYWQgb2Ygc2Ftc3VuZy1rZXlwYWQgKi8KKwlzYW1zdW5nX2tleXBhZF9zZXRuYW1lKCJzNXB2MjEwLWtleXBhZCIpOwogfQogCiB2b2lkIF9faW5pdCBzNXB2MjEwX2luaXRfY2xvY2tzKGludCB4dGFsKQpAQCAtMTM4LDUgKzE1OSw4IEBACiAJLyogc2V0IGlkbGUgZnVuY3Rpb24gKi8KIAlwbV9pZGxlID0gczVwdjIxMF9pZGxlOwogCisJLyogc2V0IHN3X3Jlc2V0IGZ1bmN0aW9uICovCisJczVwX3Jlc2V0X2hvb2sgPSBzNXB2MjEwX3N3X3Jlc2V0OworCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczVwdjIxMF9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Rldi1hdWRpby5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Rldi1hdWRpby5jCmluZGV4IDZlMjE1MzMuLjIxZGM2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9kZXYtYXVkaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LWF1ZGlvLmMKQEAgLTEwLDExICsxMCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Rldi1vbmVuYW5kLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LW9uZW5hbmQuYwppbmRleCAzNDk5N2I3Li5mOGVkZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LW9uZW5hbmQuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LW9uZW5hbmQuYwpAQCAtMjcsOSArMjcsMTQgQEAKIAl9LAogCVsxXSA9IHsKIAkJLnN0YXJ0CT0gUzVQQzExMF9QQV9PTkVOQU5EX0RNQSwKLQkJLmVuZAk9IFM1UEMxMTBfUEFfT05FTkFORF9ETUEgKyBTWl8ySyAtIDEsCisJCS5lbmQJPSBTNVBDMTEwX1BBX09ORU5BTkRfRE1BICsgU1pfOEsgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX09ORU5BTkRfQVVESSwKKwkJLmVuZAk9IElSUV9PTkVOQU5EX0FVREksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cGMxMTBfZGV2aWNlX29uZW5hbmQgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LXNwaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Rldi1zcGkuYwppbmRleCAzMzdhNjJiLi44MjZjZGJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZGV2LXNwaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9kZXYtc3BpLmMKQEAgLTEwLDExICsxMCwxMSBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9zcGktY2xvY2tzLmg+CiAKICNpbmNsdWRlIDxwbGF0L3MzYzY0eHgtc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2dwaW9saWIuYwppbmRleCA5ZWE4OTcyLi4wZDQ1OTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvZ3Bpb2xpYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9ncGlvbGliLmMKQEAgLTIwNyw2ICsyMDcsMjAgQEAKIAkJCS5sYWJlbAk9ICJNUDAzIiwKIAkJfSwKIAl9LCB7CisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTNVBWMjEwX01QMDQoMCksCisJCQkubmdwaW8JPSBTNVBWMjEwX0dQSU9fTVAwNF9OUiwKKwkJCS5sYWJlbAk9ICJNUDA0IiwKKwkJfSwKKwl9LCB7CisJCS5jb25maWcJPSAmZ3Bpb19jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTNVBWMjEwX01QMDUoMCksCisJCQkubmdwaW8JPSBTNVBWMjEwX0dQSU9fTVAwNV9OUiwKKwkJCS5sYWJlbAk9ICJNUDA1IiwKKwkJfSwKKwl9LCB7CiAJCS5iYXNlCT0gKFM1UF9WQV9HUElPICsgMHhDMDApLAogCQkuY29uZmlnCT0gJmdwaW9fY2ZnX25vaW50LAogCQkuY2hpcAk9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggZDY0NjFiYS4uMWY0YjU5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTUyLDYgKzUyLDggQEAKICNkZWZpbmUgUzVQVjIxMF9HUElPX01QMDFfTlIJKDgpCiAjZGVmaW5lIFM1UFYyMTBfR1BJT19NUDAyX05SCSg0KQogI2RlZmluZSBTNVBWMjEwX0dQSU9fTVAwM19OUgkoOCkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX01QMDRfTlIJKDgpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19NUDA1X05SCSg4KQogCiAvKiBHUElPIGJhbmsgbnVtYmVycyAqLwogCkBAIC05NCw2ICs5Niw4IEBACiAJUzVQVjIxMF9HUElPX01QMDFfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fSjQpLAogCVM1UFYyMTBfR1BJT19NUDAyX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX01QMDEpLAogCVM1UFYyMTBfR1BJT19NUDAzX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX01QMDIpLAorCVM1UFYyMTBfR1BJT19NUDA0X1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX01QMDMpLAorCVM1UFYyMTBfR1BJT19NUDA1X1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX01QMDQpLAogfTsKIAogLyogUzVQVjIxMCBHUElPIG51bWJlciBkZWZpbml0aW9ucyAqLwpAQCAtMTI3LDEzICsxMzEsMTUgQEAKICNkZWZpbmUgUzVQVjIxMF9NUDAxKF9ucikJKFM1UFYyMTBfR1BJT19NUDAxX1NUQVJUICsgKF9ucikpCiAjZGVmaW5lIFM1UFYyMTBfTVAwMihfbnIpCShTNVBWMjEwX0dQSU9fTVAwMl9TVEFSVCArIChfbnIpKQogI2RlZmluZSBTNVBWMjEwX01QMDMoX25yKQkoUzVQVjIxMF9HUElPX01QMDNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9NUDA0KF9ucikJKFM1UFYyMTBfR1BJT19NUDA0X1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfTVAwNShfbnIpCShTNVBWMjEwX0dQSU9fTVAwNV9TVEFSVCArIChfbnIpKQogCiAvKiB0aGUgZW5kIG9mIHRoZSBTNVBWMjEwIHNwZWNpZmljIGdwaW9zICovCi0jZGVmaW5lIFM1UFYyMTBfR1BJT19FTkQJKFM1UFYyMTBfTVAwMyhTNVBWMjEwX0dQSU9fTVAwM19OUikgKyAxKQorI2RlZmluZSBTNVBWMjEwX0dQSU9fRU5ECShTNVBWMjEwX01QMDUoUzVQVjIxMF9HUElPX01QMDVfTlIpICsgMSkKICNkZWZpbmUgUzNDX0dQSU9fRU5ECQlTNVBWMjEwX0dQSU9fRU5ECiAKLS8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIGdwaW9zIHdlIG5lZWQgdG8gdGhlIG9uZSBhZnRlciB0aGUgTVAwMygpIHJhbmdlICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCShTNVBWMjEwX01QMDMoUzVQVjIxMF9HUElPX01QMDNfTlIpICsJXAorLyogZGVmaW5lIHRoZSBudW1iZXIgb2YgZ3Bpb3Mgd2UgbmVlZCB0byB0aGUgb25lIGFmdGVyIHRoZSBNUDA1KCkgcmFuZ2UgKi8KKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKFM1UFYyMTBfTVAwNShTNVBWMjEwX0dQSU9fTVAwNV9OUikgKwlcCiAJCQkJIENPTkZJR19TQU1TVU5HX0dQSU9fRVhUUkEgKyAxKQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA5Njg5NTM3Li5lMWMwMjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMzYsNyArMzYsNyBAQAogCiAvKiBWSUMxOiBBUk0sIFBvd2VyLCBNZW1vcnksIENvbm5lY3Rpdml0eSwgU3RvcmFnZSAqLwogCi0jZGVmaW5lIElSUV9DT1JURVgwCQlTNVBfSVJRX1ZJQzEoMCkKKyNkZWZpbmUgSVJRX1BNVQkJCVM1UF9JUlFfVklDMSgwKQogI2RlZmluZSBJUlFfQ09SVEVYMQkJUzVQX0lSUV9WSUMxKDEpCiAjZGVmaW5lIElSUV9DT1JURVgyCQlTNVBfSVJRX1ZJQzEoMikKICNkZWZpbmUgSVJRX0NPUlRFWDMJCVM1UF9JUlFfVklDMSgzKQpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBJUlFfSUVNSUVDCQlTNVBfSVJRX1ZJQzEoNikKICNkZWZpbmUgSVJRX09ORU5BTkQJCVM1UF9JUlFfVklDMSg3KQogI2RlZmluZSBJUlFfTkZDCQkJUzVQX0lSUV9WSUMxKDgpCi0jZGVmaW5lIElSUV9DRkMJCQlTNVBfSVJRX1ZJQzEoOSkKKyNkZWZpbmUgSVJRX0NGQ09OCQlTNVBfSVJRX1ZJQzEoOSkKICNkZWZpbmUgSVJRX1VBUlQwCQlTNVBfSVJRX1ZJQzEoMTApCiAjZGVmaW5lIElSUV9VQVJUMQkJUzVQX0lSUV9WSUMxKDExKQogI2RlZmluZSBJUlFfVUFSVDIJCVM1UF9JUlFfVklDMSgxMikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDM0ZWIxNjguLmRkNGZiNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMzIsNiArMzIsOCBAQAogI2RlZmluZSBTNVBWMjEwX1BBX1NQSTAJCTB4RTEzMDAwMDAKICNkZWZpbmUgUzVQVjIxMF9QQV9TUEkxCQkweEUxNDAwMDAwCiAKKyNkZWZpbmUgUzVQVjIxMF9QQV9LRVlQQUQJKDB4RTE2MDAwMDApCisKICNkZWZpbmUgUzVQVjIxMF9QQV9JSUMwCQkoMHhFMTgwMDAwMCkKICNkZWZpbmUgUzVQVjIxMF9QQV9JSUMxCQkoMHhGQUIwMDAwMCkKICNkZWZpbmUgUzVQVjIxMF9QQV9JSUMyCQkoMHhFMUEwMDAwMCkKQEAgLTQzLDYgKzQ1LDcgQEAKIAogI2RlZmluZSBTNVBWMjEwX1BBX1dBVENIRE9HCSgweEUyNzAwMDAwKQogCisjZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkoMHhFMjgwMDAwMCkKICNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkoMHhFMjkwMDAwMCkKIAogI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBWMjEwX1BBX1VBUlQgKyAweDApCkBAIC01NCwxMiArNTcsMTggQEAKIAogI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCSgweEU4MDAwMDAwKQogCisjZGVmaW5lIFM1UFYyMTBfUEFfQ0ZDT04JKDB4RTgyMDAwMDApCisKICNkZWZpbmUgUzVQVjIxMF9QQV9NRE1BCQkweEZBMjAwMDAwCiAjZGVmaW5lIFM1UFYyMTBfUEFfUERNQTAJMHhFMDkwMDAwMAogI2RlZmluZSBTNVBWMjEwX1BBX1BETUExCTB4RTBBMDAwMDAKIAogI2RlZmluZSBTNVBWMjEwX1BBX0ZCCQkoMHhGODAwMDAwMCkKIAorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCSgweEZCMjAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMxCSgweEZCMzAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMyCSgweEZCNDAwMDAwKQorCiAjZGVmaW5lIFM1UFYyMTBfUEFfSFNNTUMoeCkJKDB4RUIwMDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQogCiAjZGVmaW5lIFM1UFYyMTBfUEFfVklDMAkJKDB4RjIwMDAwMDApCkBAIC05NywxMiArMTA2LDE5IEBACiAjZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UFYyMTBfUEFfSFNNTUMoMCkKICNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQVjIxMF9QQV9IU01NQygxKQogI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVBWMjEwX1BBX0hTTU1DKDIpCisjZGVmaW5lIFMzQ19QQV9IU01NQzMJCVM1UFYyMTBfUEFfSFNNTUMoMykKICNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQVjIxMF9QQV9JSUMwCiAjZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBWMjEwX1BBX0lJQzEKICNkZWZpbmUgUzNDX1BBX0lJQzIJCVM1UFYyMTBfUEFfSUlDMgogI2RlZmluZSBTM0NfUEFfRkIJCVM1UFYyMTBfUEFfRkIKKyNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQVjIxMF9QQV9SVEMKICNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQVjIxMF9QQV9XQVRDSERPRworI2RlZmluZSBTNVBfUEFfRklNQzAJCVM1UFYyMTBfUEFfRklNQzAKKyNkZWZpbmUgUzVQX1BBX0ZJTUMxCQlTNVBWMjEwX1BBX0ZJTUMxCisjZGVmaW5lIFM1UF9QQV9GSU1DMgkJUzVQVjIxMF9QQV9GSU1DMgogCiAjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVBWMjEwX1BBX0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCVM1UFYyMTBfUEFfQ0ZDT04KKyNkZWZpbmUgU0FNU1VOR19QQV9LRVlQQUQJUzVQVjIxMF9QQV9LRVlQQUQKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDM3OTExN2UuLmQ1MDNlMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTYsOCArMTYsMTMgQEAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MjAwMDAwMDApCiAjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUJKFNaXzhNICsgU1pfNE0gKyBTWl8yTSkKIAotLyogTWF4aW11bSBvZiAyNTZNaUIgaW4gb25lIGJhbmsgKi8KLSNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMgorLyoKKyAqIFNwYXJzZW1lbSBzdXBwb3J0CisgKiBQaHlzaWNhbCBtZW1vcnkgY2FuIGJlIGxvY2F0ZWQgZnJvbSAweDIwMDAwMDAwIHRvIDB4N2ZmZmZmZmYsCisgKiBzbyBNQVhfUEhZU01FTV9CSVRTIGlzIDMxLgorICovCisKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMQogI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyOAogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAppbmRleCAyYTI1YWI0Li40OTlhZWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtOTAsNiArOTAsOCBAQAogI2RlZmluZSBTNVBfQ0xLRElWMF9QQ0xLNjZfU0hJRlQJKDI4KQogI2RlZmluZSBTNVBfQ0xLRElWMF9QQ0xLNjZfTUFTSwkJKDB4NyA8PCBTNVBfQ0xLRElWMF9QQ0xLNjZfU0hJRlQpCiAKKyNkZWZpbmUgUzVQX1NXUkVTRVQJCVM1UF9DTEtSRUcoMHgyMDAwKQorCiAvKiBSZWdpc3RlcnMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50ICovCiAjZGVmaW5lIFM1UF9QV1JfQ0ZHCQlTNVBfQ0xLUkVHKDB4QzAwMCkKICNkZWZpbmUgUzVQX0VJTlRfV0FLRVVQX01BU0sJUzVQX0NMS1JFRygweEMwMDQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAxY2EwNGQ1Li5hZjhhMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEzLDEyICsxMyw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXwogCi1zdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKLXsKLQkvKiBub3RoaW5nIGhlcmUgeWV0ICovCi19CisjaW5jbHVkZSA8cGxhdC9zeXN0ZW0tcmVzZXQuaD4KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKaW5kZXggMTBiYzc2ZS4uMGRkYTgwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKQEAgLTEzLDYgKzEzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTk4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yMyw2MSArMjksNjkgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KIAorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8cGxhdC9zNXB2MjEwLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9maW1jLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CiAKIC8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLwotI2RlZmluZSBTNVBWMjEwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAorI2RlZmluZSBBUVVJTEFfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCiAJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKIAotI2RlZmluZSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorI2RlZmluZSBBUVVJTEFfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CiAKLSNkZWZpbmUgUzVQVjIxMF9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAotCQkJCSBTNVBWMjEwX1VGQ09OX1RYVFJJRzQgfAlcCi0JCQkJIFM1UFYyMTBfVUZDT05fUlhUUklHNCkKKyNkZWZpbmUgQVFVSUxBX1VGQ09OX0RFRkFVTFQJUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrdjIxMF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBhcXVpbGFfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkJPSAwLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IEFRVUlMQV9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBBUVVJTEFfVUxDT05fREVGQVVMVCwKKwkJLyoKKwkJICogQWN0dWFsbHkgVUFSVDAgY2FuIHN1cHBvcnQgMjU2IGJ5dGVzIGZpZm8sIGJ1dCBhcXVpbGEgYm9hcmQKKwkJICogc3VwcG9ydHMgMTI4IGJ5dGVzIGZpZm8gYmVjYXVzZSBvZiBpbml0aWFsIGNoaXAgYnVnCisJCSAqLworCQkudWZjb24JCT0gQVFVSUxBX1VGQ09OX0RFRkFVTFQgfAorCQkJUzVQVjIxMF9VRkNPTl9UWFRSSUcxMjggfCBTNVBWMjEwX1VGQ09OX1JYVFJJRzEyOCwKIAl9LAogCVsxXSA9IHsKIAkJLmh3cG9ydAkJPSAxLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IEFRVUlMQV9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBBUVVJTEFfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IEFRVUlMQV9VRkNPTl9ERUZBVUxUIHwKKwkJCVM1UFYyMTBfVUZDT05fVFhUUklHNjQgfCBTNVBWMjEwX1VGQ09OX1JYVFJJRzY0LAogCX0sCiAJWzJdID0gewogCQkuaHdwb3J0CQk9IDIsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gQVFVSUxBX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IEFRVUlMQV9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gQVFVSUxBX1VGQ09OX0RFRkFVTFQgfAorCQkJUzVQVjIxMF9VRkNPTl9UWFRSSUcxNiB8IFM1UFYyMTBfVUZDT05fUlhUUklHMTYsCiAJfSwKIAlbM10gPSB7CiAJCS5od3BvcnQJCT0gMywKIAkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkJPSBBUVVJTEFfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gQVFVSUxBX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBBUVVJTEFfVUZDT05fREVGQVVMVCB8CisJCQlTNVBWMjEwX1VGQ09OX1RYVFJJRzE2IHwgUzVQVjIxMF9VRkNPTl9SWFRSSUcxNiwKIAl9LAogfTsKIAogLyogRnJhbWUgQnVmZmVyICovCiBzdGF0aWMgc3RydWN0IHMzY19mYl9wZF93aW4gYXF1aWxhX2ZiX3dpbjAgPSB7CiAJLndpbl9tb2RlID0gewotCQkucGl4Y2xvY2sgPSAxMDAwMDAwMDAwMDAwVUxMIC8gKCgxNisxNisyKzQ4MCkqKDI4KzMrMis4MDApKjYwKSwKIAkJLmxlZnRfbWFyZ2luID0gMTYsCiAJCS5yaWdodF9tYXJnaW4gPSAxNiwKIAkJLnVwcGVyX21hcmdpbiA9IDMsCkBAIC05Myw3ICsxMDcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHMzY19mYl9wZF93aW4gYXF1aWxhX2ZiX3dpbjEgPSB7CiAJLndpbl9tb2RlID0gewotCQkucGl4Y2xvY2sgPSAxMDAwMDAwMDAwMDAwVUxMIC8gKCgxNisxNisyKzQ4MCkqKDI4KzMrMis4MDApKjYwKSwKIAkJLmxlZnRfbWFyZ2luID0gMTYsCiAJCS5yaWdodF9tYXJnaW4gPSAxNiwKIAkJLnVwcGVyX21hcmdpbiA9IDMsCkBAIC0xMTYsMTkgKzEyOSwzODMgQEAKIAkuc2V0dXBfZ3Bpbwk9IHM1cHYyMTBfZmJfZ3Bpb19zZXR1cF8yNGJwcCwKIH07CiAKKy8qIE1BWDg5OTggcmVndWxhdG9ycyAqLworI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVg4OTk4KSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYODk5OF9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvMl9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZBTElWRV8xLjFWIiwKKwkJLm1pbl91VgkJPSAxMTAwMDAwLAorCQkubWF4X3VWCQk9IDExMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmVuYWJsZWQgPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzNfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWVVNCL01JUElfMS4xViIsCisJCS5taW5fdVYJCT0gMTEwMDAwMCwKKwkJLm1heF91VgkJPSAxMTAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG80X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkRBQ18zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvNV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZURl8yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvNl9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZDQ18zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvN19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZDQ18zLjBWIiwKKwkJLm1pbl91VgkJPSAzMDAwMDAwLAorCQkubWF4X3VWCQk9IDMwMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5ib290X29uCT0gMSwKKwkJLmFsd2F5c19vbgk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvOF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZVU0IvVkFEQ18zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzlfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQ0MvVkNBTV8yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzEwX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVlBMTF8xLjFWIiwKKwkJLm1pbl91VgkJPSAxMTAwMDAwLAorCQkubWF4X3VWCQk9IDExMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5ib290X29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8xMV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9JT18yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzEyX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiQ0FNX0lTUF8xLjJWIiwKKwkJLm1pbl91VgkJPSAxMjAwMDAwLAorCQkubWF4X3VWCQk9IDEyMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzEzX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiQ0FNX0FfMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8xNF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9DSUZfMS44ViIsCisJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8xNV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9BRl8zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzE2X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVk1JUElfMS44ViIsCisJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8xN19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV84TV8xLjhWIiwKKwkJLm1pbl91VgkJPSAxODAwMDAwLAorCQkubWF4X3VWCQk9IDE4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCisvKiBCVUNLICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazFfY29uc3VtZXJbXSA9IHsKKwl7CS5zdXBwbHkJPSAidmRkYXJtIiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBidWNrMl9jb25zdW1lcltdID0geworCXsJLnN1cHBseQk9ICJ2ZGRpbnQiLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9idWNrMV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZBUk1fMS4yViIsCisJCS5taW5fdVYJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJPSAxMjAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkudmFsaWRfb3BzX21hc2sJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShidWNrMV9jb25zdW1lciksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gYnVjazFfY29uc3VtZXIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2J1Y2syX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVklOVF8xLjJWIiwKKwkJLm1pbl91VgkJPSAxMjAwMDAwLAorCQkubWF4X3VWCQk9IDEyMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGJ1Y2syX2NvbnN1bWVyKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBidWNrMl9jb25zdW1lciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfYnVjazNfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQ0NfMS44ViIsCisJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuc3RhdGVfbWVtCT0geworCQkJLmVuYWJsZWQgPSAxLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2J1Y2s0X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiQ0FNX0NPUkVfMS4yViIsCisJCS5taW5fdVYJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJPSAxMjAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXg4OTk4X3JlZ3VsYXRvcl9kYXRhIGFxdWlsYV9yZWd1bGF0b3JzW10gPSB7CisJeyBNQVg4OTk4X0xETzIsICAmYXF1aWxhX2xkbzJfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8zLCAgJmFxdWlsYV9sZG8zX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPNCwgICZhcXVpbGFfbGRvNF9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzUsICAmYXF1aWxhX2xkbzVfZGF0YSB9LAorCXsgTUFYODk5OF9MRE82LCAgJmFxdWlsYV9sZG82X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPNywgICZhcXVpbGFfbGRvN19kYXRhIH0sCisJeyBNQVg4OTk4X0xETzgsICAmYXF1aWxhX2xkbzhfZGF0YSB9LAorCXsgTUFYODk5OF9MRE85LCAgJmFxdWlsYV9sZG85X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTAsICZhcXVpbGFfbGRvMTBfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMSwgJmFxdWlsYV9sZG8xMV9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzEyLCAmYXF1aWxhX2xkbzEyX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTMsICZhcXVpbGFfbGRvMTNfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNCwgJmFxdWlsYV9sZG8xNF9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzE1LCAmYXF1aWxhX2xkbzE1X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMTYsICZhcXVpbGFfbGRvMTZfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNywgJmFxdWlsYV9sZG8xN19kYXRhIH0sCisJeyBNQVg4OTk4X0JVQ0sxLCAmYXF1aWxhX2J1Y2sxX2RhdGEgfSwKKwl7IE1BWDg5OThfQlVDSzIsICZhcXVpbGFfYnVjazJfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLMywgJmFxdWlsYV9idWNrM19kYXRhIH0sCisJeyBNQVg4OTk4X0JVQ0s0LCAmYXF1aWxhX2J1Y2s0X2RhdGEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODk5OF9wbGF0Zm9ybV9kYXRhIGFxdWlsYV9tYXg4OTk4X3BkYXRhID0geworCS5udW1fcmVndWxhdG9ycwk9IEFSUkFZX1NJWkUoYXF1aWxhX3JlZ3VsYXRvcnMpLAorCS5yZWd1bGF0b3JzCT0gYXF1aWxhX3JlZ3VsYXRvcnMsCit9OworI2VuZGlmCisKKy8qIEdQSU8gSTJDIFBNSUMgKi8KKyNkZWZpbmUgQVBfSTJDX0dQSU9fUE1JQ19CVVNfNAk0CitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgYXF1aWxhX2kyY19ncGlvX3BtaWNfZGF0YSA9IHsKKwkuc2RhX3Bpbgk9IFM1UFYyMTBfR1BKNCgwKSwJLyogWE1TTUNTTiAqLworCS5zY2xfcGluCT0gUzVQVjIxMF9HUEo0KDMpLAkvKiBYTVNNSVJRTiAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXF1aWxhX2kyY19ncGlvX3BtaWMgPSB7CisJLm5hbWUJCT0gImkyYy1ncGlvIiwKKwkuaWQJCT0gQVBfSTJDX0dQSU9fUE1JQ19CVVNfNCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXF1aWxhX2kyY19ncGlvX3BtaWNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZ3Bpb19wbWljX2RldnNbXSBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVg4OTk4KSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYODk5OF9NT0RVTEUpCisJeworCQkvKiAweENDIHdoZW4gU1JBRCA9IDAgKi8KKwkJSTJDX0JPQVJEX0lORk8oIm1heDg5OTgiLCAweENDID4+IDEpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhcXVpbGFfbWF4ODk5OF9wZGF0YSwKKwl9LAorI2VuZGlmCit9OworCisvKiBQTUlDIFBvd2VyIGJ1dHRvbiAqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGFxdWlsYV9ncGlvX2tleXNfdGFibGVbXSA9IHsKKwl7CisJCS5jb2RlIAkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IFM1UFYyMTBfR1BIMig2KSwKKwkJLmRlc2MJCT0gImdwaW8ta2V5czogS0VZX1BPV0VSIiwKKwkJLnR5cGUJCT0gRVZfS0VZLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwkJLmRlYm91bmNlX2ludGVydmFsID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBhcXVpbGFfZ3Bpb19rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBhcXVpbGFfZ3Bpb19rZXlzX3RhYmxlLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoYXF1aWxhX2dwaW9fa2V5c190YWJsZSksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcXVpbGFfZGV2aWNlX2dwaW9rZXlzID0geworCS5uYW1lID0gImdwaW8ta2V5cyIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXF1aWxhX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXF1aWxhX3BtaWNfaW5pdCh2b2lkKQoreworCS8qIEFQX1BNSUNfSVJROiBFSU5UNyAqLworCXMzY19ncGlvX2NmZ3BpbihTNVBWMjEwX0dQSDAoNyksIFMzQ19HUElPX1NGTigweGYpKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYyMTBfR1BIMCg3KSwgUzNDX0dQSU9fUFVMTF9VUCk7CisKKwkvKiBuUG93ZXI6IEVJTlQyMiAqLworCXMzY19ncGlvX2NmZ3BpbihTNVBWMjEwX0dQSDIoNiksIFMzQ19HUElPX1NGTigweGYpKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYyMTBfR1BIMig2KSwgUzNDX0dQSU9fUFVMTF9VUCk7Cit9CisKKy8qIE1vdmlOQU5EICovCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBhcXVpbGFfaHNtbWMwX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCQk9IDQsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCwKK307CisKKy8qIFdpcmVsZXNzIExBTiAqLworc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgYXF1aWxhX2hzbW1jMV9kYXRhIF9faW5pdGRhdGEgPSB7CisJLm1heF93aWR0aAkJPSA0LAorCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9FWFRFUk5BTCwKKwkvKiBleHRfY2Rfe2luaXQsY2xlYW51cH0gY2FsbGJhY2tzIHdpbGwgYmUgYWRkZWQgbGF0ZXIgKi8KK307CisKKy8qIEV4dGVybmFsIEZsYXNoICovCisjZGVmaW5lIEFRVUlMQV9FWFRfRkxBU0hfRU4JUzVQVjIxMF9NUDA1KDQpCisjZGVmaW5lIEFRVUlMQV9FWFRfRkxBU0hfQ0QJUzVQVjIxMF9HUEgzKDQpCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBhcXVpbGFfaHNtbWMyX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCQk9IDQsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCisJLmV4dF9jZF9ncGlvCQk9IEFRVUlMQV9FWFRfRkxBU0hfQ0QsCisJLmV4dF9jZF9ncGlvX2ludmVydAk9IDEsCit9OworCitzdGF0aWMgdm9pZCBhcXVpbGFfc2V0dXBfc2RoY2kodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoQVFVSUxBX0VYVF9GTEFTSF9FTiwgIkZMQVNIX0VOIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEFRVUlMQV9FWFRfRkxBU0hfRU4sIDEpOworCisJczNjX3NkaGNpMF9zZXRfcGxhdGRhdGEoJmFxdWlsYV9oc21tYzBfZGF0YSk7CisJczNjX3NkaGNpMV9zZXRfcGxhdGRhdGEoJmFxdWlsYV9oc21tYzFfZGF0YSk7CisJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJmFxdWlsYV9oc21tYzJfZGF0YSk7Cit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXF1aWxhX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZhcXVpbGFfaTJjX2dwaW9fcG1pYywKKwkmYXF1aWxhX2RldmljZV9ncGlva2V5cywKIAkmczNjX2RldmljZV9mYiwKKwkmczVwYzExMF9kZXZpY2Vfb25lbmFuZCwKKwkmczNjX2RldmljZV9oc21tYzAsCisJJnMzY19kZXZpY2VfaHNtbWMxLAorCSZzM2NfZGV2aWNlX2hzbW1jMiwKKwkmczVwX2RldmljZV9maW1jMCwKKwkmczVwX2RldmljZV9maW1jMSwKKwkmczVwX2RldmljZV9maW1jMiwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcXVpbGFfbWFwX2lvKHZvaWQpCiB7CiAJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7Ci0JczNjMjR4eF9pbml0X3VhcnRzKHNtZGt2MjEwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGt2MjEwX3VhcnRjZmdzKSk7CisJczNjMjR4eF9pbml0X3VhcnRzKGFxdWlsYV91YXJ0Y2ZncywgQVJSQVlfU0laRShhcXVpbGFfdWFydGNmZ3MpKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGFxdWlsYV9tYWNoaW5lX2luaXQodm9pZCkKIHsKKwkvKiBQTUlDICovCisJYXF1aWxhX3BtaWNfaW5pdCgpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKEFQX0kyQ19HUElPX1BNSUNfQlVTXzQsIGkyY19ncGlvX3BtaWNfZGV2cywKKwkJCUFSUkFZX1NJWkUoaTJjX2dwaW9fcG1pY19kZXZzKSk7CisJLyogU0RIQ0kgKi8KKwlhcXVpbGFfc2V0dXBfc2RoY2koKTsKKworCXMzY19maW1jX3NldG5hbWUoMCwgInM1cC1maW1jIik7CisJczNjX2ZpbWNfc2V0bmFtZSgxLCAiczVwLWZpbWMiKTsKKwlzM2NfZmltY19zZXRuYW1lKDIsICJzNXAtZmltYyIpOworCiAJLyogRkIgKi8KIAlzM2NfZmJfc2V0X3BsYXRkYXRhKCZhcXVpbGFfbGNkX3BkYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCmluZGV4IDQ4NjNiMTMuLjUzNzU0ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKQEAgLTEyLDYgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21heDg5OTguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTIwLDU4ICsyNyw0NDQgQEAKIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPHBsYXQvczVwdjIxMC5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9mYi5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KIAogLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFM1UFYyMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisjZGVmaW5lIEdPTklfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCiAJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKIAotI2RlZmluZSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorI2RlZmluZSBHT05JX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAogCi0jZGVmaW5lIFM1UFYyMTBfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKLQkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUc0IHwJXAotCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQpCisjZGVmaW5lIEdPTklfVUZDT05fREVGQVVMVAlTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCiAKIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGdvbmlfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkJPSAwLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IEdPTklfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gR09OSV9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gR09OSV9VRkNPTl9ERUZBVUxUIHwKKwkJCVM1UFYyMTBfVUZDT05fVFhUUklHMjU2IHwgUzVQVjIxMF9VRkNPTl9SWFRSSUcyNTYsCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJCT0gMSwKIAkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkJPSBHT05JX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IEdPTklfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IEdPTklfVUZDT05fREVGQVVMVCB8CisJCQlTNVBWMjEwX1VGQ09OX1RYVFJJRzY0IHwgUzVQVjIxMF9VRkNPTl9SWFRSSUc2NCwKIAl9LAogCVsyXSA9IHsKIAkJLmh3cG9ydAkJPSAyLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IEdPTklfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gR09OSV9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gR09OSV9VRkNPTl9ERUZBVUxUIHwKKwkJCVM1UFYyMTBfVUZDT05fVFhUUklHMTYgfCBTNVBWMjEwX1VGQ09OX1JYVFJJRzE2LAogCX0sCiAJWzNdID0gewogCQkuaHdwb3J0CQk9IDMsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gR09OSV9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBHT05JX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBHT05JX1VGQ09OX0RFRkFVTFQgfAorCQkJUzVQVjIxMF9VRkNPTl9UWFRSSUcxNiB8IFM1UFYyMTBfVUZDT05fUlhUUklHMTYsCiAJfSwKIH07CiAKKy8qIEZyYW1lIEJ1ZmZlciAqLworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIGdvbmlfZmJfd2luMCA9IHsKKwkud2luX21vZGUgPSB7CisJCS5waXhjbG9jayA9IDEwMDAwMDAwMDAwMDBVTEwgLyAoKDE2KzE2KzIrNDgwKSooMjgrMysyKzgwMCkqNTUpLAorCQkubGVmdF9tYXJnaW4JPSAxNiwKKwkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkudXBwZXJfbWFyZ2luCT0gMywKKwkJLmxvd2VyX21hcmdpbgk9IDI4LAorCQkuaHN5bmNfbGVuCT0gMiwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS54cmVzCQk9IDQ4MCwKKwkJLnlyZXMJCT0gODAwLAorCQkucmVmcmVzaAk9IDU1LAorCX0sCisJLm1heF9icHAJPSAzMiwKKwkuZGVmYXVsdF9icHAJPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhIGdvbmlfbGNkX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLndpblswXQkJPSAmZ29uaV9mYl93aW4wLAorCS52aWRjb24wCT0gVklEQ09OMF9WSURPVVRfUkdCIHwgVklEQ09OMF9QTlJNT0RFX1JHQiB8CisJCQkgIFZJRENPTjBfQ0xLU0VMX0xDRCwKKwkudmlkY29uMQk9IFZJRENPTjFfSU5WX1ZDTEsgfCBWSURDT04xX0lOVl9WREVOCisJCQkgIHwgVklEQ09OMV9JTlZfSFNZTkMgfCBWSURDT04xX0lOVl9WU1lOQywKKwkuc2V0dXBfZ3Bpbwk9IHM1cHYyMTBfZmJfZ3Bpb19zZXR1cF8yNGJwcCwKK307CisKKy8qIE1BWDg5OTggcmVndWxhdG9ycyAqLworI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVg4OTk4KSB8fCBkZWZpbmVkKENPTkZJR19SRUdVTEFUT1JfTUFYODk5OF9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzJfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWQUxJVkVfMS4xViIsCisJCS5taW5fdVYJCT0gMTEwMDAwMCwKKwkJLm1heF91VgkJPSAxMTAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5lbmFibGVkID0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvM19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZVU0IvTUlQSV8xLjFWIiwKKwkJLm1pbl91VgkJPSAxMTAwMDAwLAorCQkubWF4X3VWCQk9IDExMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG80X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkRBQ18zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2xkbzVfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWVEZfMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG82X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkNDXzMuM1YiLAorCQkubWluX3VWCQk9IDMzMDAwMDAsCisJCS5tYXhfdVYJCT0gMzMwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvN19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZMQ0RfMS44ViIsCisJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZVU0IvVkFEQ18zLjNWIiwKKwkJLm1pbl91VgkJPSAzMzAwMDAwLAorCQkubWF4X3VWCQk9IDMzMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG85X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkNDL1ZDQU1fMi44ViIsCisJCS5taW5fdVYJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvMTBfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWUExMXzEuMVYiLAorCQkubWluX3VWCQk9IDExMDAwMDAsCisJCS5tYXhfdVYJCT0gMTEwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLmJvb3Rfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8xMV9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9JT18yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8xMl9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9JU1BfMS4yViIsCisJCS5taW5fdVYJCT0gMTIwMDAwMCwKKwkJLm1heF91VgkJPSAxMjAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvMTNfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJDQU1fQV8yLjhWIiwKKwkJLm1pbl91VgkJPSAyODAwMDAwLAorCQkubWF4X3VWCQk9IDI4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8xNF9kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIkNBTV9DSUZfMS44ViIsCisJCS5taW5fdVYJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvMTVfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJDQU1fQUZfMy4zViIsCisJCS5taW5fdVYJCT0gMzMwMDAwMCwKKwkJLm1heF91VgkJPSAzMzAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvMTZfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJWTUlQSV8xLjhWIiwKKwkJLm1pbl91VgkJPSAxODAwMDAwLAorCQkubWF4X3VWCQk9IDE4MDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgZ29uaV9sZG8xN19kYXRhID0geworCS5jb25zdHJhaW50cwk9IHsKKwkJLm5hbWUJCT0gIlZDQ18zLjBWX0xDRCIsCisJCS5taW5fdVYJCT0gMzAwMDAwMCwKKwkJLm1heF91VgkJPSAzMDAwMDAwLAorCQkuYXBwbHlfdVYJPSAxLAorCQkuYWx3YXlzX29uCT0gMSwKKwl9LAorfTsKKworLyogQlVDSyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGJ1Y2sxX2NvbnN1bWVyW10gPSB7CisJewkuc3VwcGx5CT0gInZkZGFybSIsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgYnVjazJfY29uc3VtZXJbXSA9IHsKKwl7CS5zdXBwbHkJPSAidmRkaW50IiwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2J1Y2sxX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkFSTV8xLjJWIiwKKwkJLm1pbl91VgkJPSAxMjAwMDAwLAorCQkubWF4X3VWCQk9IDEyMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGJ1Y2sxX2NvbnN1bWVyKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBidWNrMV9jb25zdW1lciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2J1Y2syX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVklOVF8xLjJWIiwKKwkJLm1pbl91VgkJPSAxMjAwMDAwLAorCQkubWF4X3VWCQk9IDEyMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS52YWxpZF9vcHNfbWFzawk9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGJ1Y2syX2NvbnN1bWVyKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBidWNrMl9jb25zdW1lciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBnb25pX2J1Y2szX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzCT0geworCQkubmFtZQkJPSAiVkNDXzEuOFYiLAorCQkubWluX3VWCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCT0gMSwKKwkJLnN0YXRlX21lbQk9IHsKKwkJCS5lbmFibGVkID0gMSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfYnVjazRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMJPSB7CisJCS5uYW1lCQk9ICJDQU1fQ09SRV8xLjJWIiwKKwkJLm1pbl91VgkJPSAxMjAwMDAwLAorCQkubWF4X3VWCQk9IDEyMDAwMDAsCisJCS5hcHBseV91Vgk9IDEsCisJCS5hbHdheXNfb24JPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1heDg5OThfcmVndWxhdG9yX2RhdGEgZ29uaV9yZWd1bGF0b3JzW10gPSB7CisJeyBNQVg4OTk4X0xETzIsICAmZ29uaV9sZG8yX2RhdGEgfSwKKwl7IE1BWDg5OThfTERPMywgICZnb25pX2xkbzNfZGF0YSB9LAorCXsgTUFYODk5OF9MRE80LCAgJmdvbmlfbGRvNF9kYXRhIH0sCisJeyBNQVg4OTk4X0xETzUsICAmZ29uaV9sZG81X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPNiwgICZnb25pX2xkbzZfZGF0YSB9LAorCXsgTUFYODk5OF9MRE83LCAgJmdvbmlfbGRvN19kYXRhIH0sCisJeyBNQVg4OTk4X0xETzgsICAmZ29uaV9sZG84X2RhdGEgfSwKKwl7IE1BWDg5OThfTERPOSwgICZnb25pX2xkbzlfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMCwgJmdvbmlfbGRvMTBfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMSwgJmdvbmlfbGRvMTFfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMiwgJmdvbmlfbGRvMTJfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xMywgJmdvbmlfbGRvMTNfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNCwgJmdvbmlfbGRvMTRfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNSwgJmdvbmlfbGRvMTVfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNiwgJmdvbmlfbGRvMTZfZGF0YSB9LAorCXsgTUFYODk5OF9MRE8xNywgJmdvbmlfbGRvMTdfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLMSwgJmdvbmlfYnVjazFfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLMiwgJmdvbmlfYnVjazJfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLMywgJmdvbmlfYnVjazNfZGF0YSB9LAorCXsgTUFYODk5OF9CVUNLNCwgJmdvbmlfYnVjazRfZGF0YSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXg4OTk4X3BsYXRmb3JtX2RhdGEgZ29uaV9tYXg4OTk4X3BkYXRhID0geworCS5udW1fcmVndWxhdG9ycwk9IEFSUkFZX1NJWkUoZ29uaV9yZWd1bGF0b3JzKSwKKwkucmVndWxhdG9ycwk9IGdvbmlfcmVndWxhdG9ycywKK307CisjZW5kaWYKKworLyogR1BJTyBJMkMgUE1JQyAqLworI2RlZmluZSBBUF9JMkNfR1BJT19QTUlDX0JVU180CTQKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBnb25pX2kyY19ncGlvX3BtaWNfZGF0YSA9IHsKKwkuc2RhX3Bpbgk9IFM1UFYyMTBfR1BKNCgwKSwJLyogWE1TTUNTTiAqLworCS5zY2xfcGluCT0gUzVQVjIxMF9HUEo0KDMpLAkvKiBYTVNNSVJRTiAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ29uaV9pMmNfZ3Bpb19wbWljID0geworCS5uYW1lCQk9ICJpMmMtZ3BpbyIsCisJLmlkCQk9IEFQX0kyQ19HUElPX1BNSUNfQlVTXzQsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdvbmlfaTJjX2dwaW9fcG1pY19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19ncGlvX3BtaWNfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisjaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SX01BWDg5OTgpIHx8IGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUl9NQVg4OTk4X01PRFVMRSkKKwl7CisJCS8qIDB4Q0Mgd2hlbiBTUkFEID0gMCAqLworCQlJMkNfQk9BUkRfSU5GTygibWF4ODk5OCIsIDB4Q0MgPj4gMSksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmdvbmlfbWF4ODk5OF9wZGF0YSwKKwl9LAorI2VuZGlmCit9OworCisvKiBQTUlDIFBvd2VyIGJ1dHRvbiAqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdvbmlfZ3Bpb19rZXlzX3RhYmxlW10gPSB7CisJeworCQkuY29kZSAJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJPSBTNVBWMjEwX0dQSDIoNiksCisJCS5kZXNjCQk9ICJncGlvLWtleXM6IEtFWV9QT1dFUiIsCisJCS50eXBlCQk9IEVWX0tFWSwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkud2FrZXVwCQk9IDEsCisJCS5kZWJvdW5jZV9pbnRlcnZhbCA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZ29uaV9ncGlvX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGdvbmlfZ3Bpb19rZXlzX3RhYmxlLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ29uaV9ncGlvX2tleXNfdGFibGUpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ29uaV9kZXZpY2VfZ3Bpb2tleXMgPSB7CisJLm5hbWUgPSAiZ3Bpby1rZXlzIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZnb25pX2dwaW9fa2V5c19kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZ29uaV9wbWljX2luaXQodm9pZCkKK3sKKwkvKiBBUF9QTUlDX0lSUTogRUlOVDcgKi8KKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjIxMF9HUEgwKDcpLCBTM0NfR1BJT19TRk4oMHhmKSk7CisJczNjX2dwaW9fc2V0cHVsbChTNVBWMjEwX0dQSDAoNyksIFMzQ19HUElPX1BVTExfVVApOworCisJLyogblBvd2VyOiBFSU5UMjIgKi8KKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjIxMF9HUEgyKDYpLCBTM0NfR1BJT19TRk4oMHhmKSk7CisJczNjX2dwaW9fc2V0cHVsbChTNVBWMjEwX0dQSDIoNiksIFMzQ19HUElPX1BVTExfVVApOworfQorCisvKiBNb3ZpTkFORCAqLworc3RhdGljIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgZ29uaV9oc21tYzBfZGF0YSBfX2luaXRkYXRhID0geworCS5tYXhfd2lkdGgJCT0gNCwKKwkuY2RfdHlwZQkJPSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5ULAorfTsKKworLyogV2lyZWxlc3MgTEFOICovCitzdGF0aWMgc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBnb25pX2hzbW1jMV9kYXRhIF9faW5pdGRhdGEgPSB7CisJLm1heF93aWR0aAkJPSA0LAorCS5jZF90eXBlCQk9IFMzQ19TREhDSV9DRF9FWFRFUk5BTCwKKwkvKiBleHRfY2Rfe2luaXQsY2xlYW51cH0gY2FsbGJhY2tzIHdpbGwgYmUgYWRkZWQgbGF0ZXIgKi8KK307CisKKy8qIEV4dGVybmFsIEZsYXNoICovCisjZGVmaW5lIEdPTklfRVhUX0ZMQVNIX0VOCVM1UFYyMTBfTVAwNSg0KQorI2RlZmluZSBHT05JX0VYVF9GTEFTSF9DRAlTNVBWMjEwX0dQSDMoNCkKK3N0YXRpYyBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIGdvbmlfaHNtbWMyX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkubWF4X3dpZHRoCQk9IDQsCisJLmNkX3R5cGUJCT0gUzNDX1NESENJX0NEX0dQSU8sCisJLmV4dF9jZF9ncGlvCQk9IEdPTklfRVhUX0ZMQVNIX0NELAorCS5leHRfY2RfZ3Bpb19pbnZlcnQJPSAxLAorfTsKKworc3RhdGljIHZvaWQgZ29uaV9zZXR1cF9zZGhjaSh2b2lkKQoreworCWdwaW9fcmVxdWVzdChHT05JX0VYVF9GTEFTSF9FTiwgIkZMQVNIX0VOIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdPTklfRVhUX0ZMQVNIX0VOLCAxKTsKKworCXMzY19zZGhjaTBfc2V0X3BsYXRkYXRhKCZnb25pX2hzbW1jMF9kYXRhKTsKKwlzM2Nfc2RoY2kxX3NldF9wbGF0ZGF0YSgmZ29uaV9oc21tYzFfZGF0YSk7CisJczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoJmdvbmlfaHNtbWMyX2RhdGEpOworfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdvbmlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfZmIsCisJJnM1cGMxMTBfZGV2aWNlX29uZW5hbmQsCisJJmdvbmlfaTJjX2dwaW9fcG1pYywKKwkmZ29uaV9kZXZpY2VfZ3Bpb2tleXMsCisJJnM1cF9kZXZpY2VfZmltYzAsCisJJnM1cF9kZXZpY2VfZmltYzEsCisJJnM1cF9kZXZpY2VfZmltYzIsCisJJnMzY19kZXZpY2VfaHNtbWMwLAorCSZzM2NfZGV2aWNlX2hzbW1jMSwKKwkmczNjX2RldmljZV9oc21tYzIsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ29uaV9tYXBfaW8odm9pZCkKQEAgLTgzLDYgKzQ3NiwxNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZ29uaV9tYWNoaW5lX2luaXQodm9pZCkKIHsKKwkvKiBQTUlDICovCisJZ29uaV9wbWljX2luaXQoKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUF9JMkNfR1BJT19QTUlDX0JVU180LCBpMmNfZ3Bpb19wbWljX2RldnMsCisJCQlBUlJBWV9TSVpFKGkyY19ncGlvX3BtaWNfZGV2cykpOworCS8qIFNESENJICovCisJZ29uaV9zZXR1cF9zZGhjaSgpOworCisJLyogRkIgKi8KKwlzM2NfZmJfc2V0X3BsYXRkYXRhKCZnb25pX2xjZF9wZGF0YSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhnb25pX2RldmljZXMsIEFSUkFZX1NJWkUoZ29uaV9kZXZpY2VzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGtjMTEwLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrYzExMC5jCmluZGV4IDRjODkwM2MuLjgyMTFiYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGtjMTEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka2MxMTAuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yNSwxOCArMjYsMjAgQEAKICNpbmNsdWRlIDxwbGF0L3M1cHYyMTAuaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvYXRhLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCi0jZGVmaW5lIFM1UFYyMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisjZGVmaW5lIFNNREtDMTEwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fUlhJTEVWRUwgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9UWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWElSUU1PREUgfAlcCiAJCQkJIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JIHwJXAogCQkJCSBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCiAKLSNkZWZpbmUgUzVQVjIxMF9VTENPTl9ERUZBVUxUCVMzQzI0MTBfTENPTl9DUzgKKyNkZWZpbmUgU01ES0MxMTBfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CiAKLSNkZWZpbmUgUzVQVjIxMF9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAorI2RlZmluZSBTTURLQzExMF9VRkNPTl9ERUZBVUxUCShTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFIHwJXAogCQkJCSBTNVBWMjEwX1VGQ09OX1RYVFJJRzQgfAlcCiAJCQkJIFM1UFYyMTBfVUZDT05fUlhUUklHNCkKIApAQCAtNDQsMzkgKzQ3LDYwIEBACiAJWzBdID0gewogCQkuaHdwb3J0CQk9IDAsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gU01ES0MxMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gU01ES0MxMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFNNREtDMTEwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIAlbMV0gPSB7CiAJCS5od3BvcnQJCT0gMSwKIAkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkJPSBTTURLQzExMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTTURLQzExMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gU01ES0MxMTBfVUZDT05fREVGQVVMVCwKIAl9LAogCVsyXSA9IHsKIAkJLmh3cG9ydAkJPSAyLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IFNNREtDMTEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFNNREtDMTEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTTURLQzExMF9VRkNPTl9ERUZBVUxULAogCX0sCiAJWzNdID0gewogCQkuaHdwb3J0CQk9IDMsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gU01ES0MxMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gU01ES0MxMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFNNREtDMTEwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSBzbWRrYzExMF9pZGVfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuc2V0dXBfZ3Bpbwk9IHM1cHYyMTBfaWRlX3NldHVwX2dwaW8sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka2MxMTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnM1cHYyMTBfZGV2aWNlX2lpczAsCiAJJnM1cHYyMTBfZGV2aWNlX2FjOTcsCisJJnMzY19kZXZpY2VfY2Zjb24sCisJJnMzY19kZXZpY2VfaTJjMCwKKwkmczNjX2RldmljZV9pMmMxLAorCSZzM2NfZGV2aWNlX2kyYzIsCisJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX3dkdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc21ka2MxMTBfaTJjX2RldnMwW10gX19pbml0ZGF0YSA9IHsKKwl7IEkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLCB9LCAgICAgLyogU2Ftc3VuZyBTNTI0QUQwWEQxICovCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNtZGtjMTEwX2kyY19kZXZzMVtdIF9faW5pdGRhdGEgPSB7CisJLyogVG8gQmUgVXBkYXRlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBzbWRrYzExMF9pMmNfZGV2czJbXSBfX2luaXRkYXRhID0geworCS8qIFRvIEJlIFVwZGF0ZWQgKi8KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrYzExMF9tYXBfaW8odm9pZCkKIHsKIAlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVBfVkFfQ0hJUElEKTsKQEAgLTg2LDYgKzExMCwxOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21ka2MxMTBfbWFjaGluZV9pbml0KHZvaWQpCiB7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19pMmMxX3NldF9wbGF0ZGF0YShOVUxMKTsKKwlzM2NfaTJjMl9zZXRfcGxhdGRhdGEoTlVMTCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgc21ka2MxMTBfaTJjX2RldnMwLAorCQkJQVJSQVlfU0laRShzbWRrYzExMF9pMmNfZGV2czApKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBzbWRrYzExMF9pMmNfZGV2czEsCisJCQlBUlJBWV9TSVpFKHNtZGtjMTEwX2kyY19kZXZzMSkpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDIsIHNtZGtjMTEwX2kyY19kZXZzMiwKKwkJCUFSUkFZX1NJWkUoc21ka2MxMTBfaTJjX2RldnMyKSk7CisKKwlzM2NfaWRlX3NldF9wbGF0ZGF0YSgmc21ka2MxMTBfaWRlX3BkYXRhKTsKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGtjMTEwX2RldmljZXMsIEFSUkFZX1NJWkUoc21ka2MxMTBfZGV2aWNlcykpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrdjIxMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka3YyMTAuYwppbmRleCAwZDQ2Mjc5Li5mYmJjMGEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrdjIxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLXNtZGt2MjEwLmMKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAKQEAgLTI3LDE4ICsyOCwyMSBAQAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9hZGMuaD4KICNpbmNsdWRlIDxwbGF0L3RzLmg+CisjaW5jbHVkZSA8cGxhdC9hdGEuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAKIC8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLwotI2RlZmluZSBTNVBWMjEwX1VDT05fREVGQVVMVAkoUzNDMjQxMF9VQ09OX1RYSUxFVkVMIHwJXAorI2RlZmluZSBTTURLVjIxMF9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKIAkJCQkgUzNDMjQxMF9VQ09OX1JYSUxFVkVMIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwJXAogCQkJCSBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSB8CVwKIAkJCQkgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQogCi0jZGVmaW5lIFM1UFYyMTBfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CisjZGVmaW5lIFNNREtWMjEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAogCi0jZGVmaW5lIFM1UFYyMTBfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKKyNkZWZpbmUgU01ES1YyMTBfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKIAkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUc0IHwJXAogCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQpCiAKQEAgLTQ2LDQxICs1MCw4NiBAQAogCVswXSA9IHsKIAkJLmh3cG9ydAkJPSAwLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IFNNREtWMjEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFNNREtWMjEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTTURLVjIxMF9VRkNPTl9ERUZBVUxULAogCX0sCiAJWzFdID0gewogCQkuaHdwb3J0CQk9IDEsCiAJCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKLQkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKLQkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwkJLnVjb24JCT0gU01ES1YyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gU01ES1YyMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFNNREtWMjEwX1VGQ09OX0RFRkFVTFQsCiAJfSwKIAlbMl0gPSB7CiAJCS5od3BvcnQJCT0gMiwKIAkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAotCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAotCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCQkudWNvbgkJPSBTTURLVjIxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTTURLVjIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gU01ES1YyMTBfVUZDT05fREVGQVVMVCwKIAl9LAogCVszXSA9IHsKIAkJLmh3cG9ydAkJPSAzLAogCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCi0JCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCi0JCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJCS51Y29uCQk9IFNNREtWMjEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFNNREtWMjEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTTURLVjIxMF9VRkNPTl9ERUZBVUxULAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgc21ka3YyMTBfaWRlX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLnNldHVwX2dwaW8JPSBzNXB2MjEwX2lkZV9zZXR1cF9ncGlvLAorfTsKKworc3RhdGljIHVpbnQzMl90IHNtZGt2MjEwX2tleW1hcFtdIF9faW5pdGRhdGEgPSB7CisJLyogS0VZKHJvdywgY29sLCBrZXljb2RlKSAqLworCUtFWSgwLCAzLCBLRVlfMSksIEtFWSgwLCA0LCBLRVlfMiksIEtFWSgwLCA1LCBLRVlfMyksCisJS0VZKDAsIDYsIEtFWV80KSwgS0VZKDAsIDcsIEtFWV81KSwKKwlLRVkoMSwgMywgS0VZX0EpLCBLRVkoMSwgNCwgS0VZX0IpLCBLRVkoMSwgNSwgS0VZX0MpLAorCUtFWSgxLCA2LCBLRVlfRCksIEtFWSgxLCA3LCBLRVlfRSkKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHNtZGt2MjEwX2tleW1hcF9kYXRhIF9faW5pdGRhdGEgPSB7CisJLmtleW1hcAkJPSBzbWRrdjIxMF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRShzbWRrdjIxMF9rZXltYXApLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2tleXBhZF9wbGF0ZGF0YSBzbWRrdjIxMF9rZXlwYWRfZGF0YSBfX2luaXRkYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZzbWRrdjIxMF9rZXltYXBfZGF0YSwKKwkucm93cwkJPSA4LAorCS5jb2xzCQk9IDgsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka3YyMTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnM1cHYyMTBfZGV2aWNlX2lpczAsCiAJJnM1cHYyMTBfZGV2aWNlX2FjOTcsCiAJJnMzY19kZXZpY2VfYWRjLAorCSZzM2NfZGV2aWNlX2NmY29uLAorCSZzM2NfZGV2aWNlX2hzbW1jMCwKKwkmczNjX2RldmljZV9oc21tYzEsCisJJnMzY19kZXZpY2VfaHNtbWMyLAorCSZzM2NfZGV2aWNlX2hzbW1jMywKKwkmczNjX2RldmljZV9pMmMwLAorCSZzM2NfZGV2aWNlX2kyYzEsCisJJnMzY19kZXZpY2VfaTJjMiwKKwkmc2Ftc3VuZ19kZXZpY2Vfa2V5cGFkLAorCSZzM2NfZGV2aWNlX3J0YywKIAkmczNjX2RldmljZV90cywKIAkmczNjX2RldmljZV93ZHQsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHNtZGt2MjEwX2kyY19kZXZzMFtdIF9faW5pdGRhdGEgPSB7CisJeyBJMkNfQk9BUkRfSU5GTygiMjRjMDgiLCAweDUwKSwgfSwgICAgIC8qIFNhbXN1bmcgUzUyNEFEMFhEMSAqLworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBzbWRrdjIxMF9pMmNfZGV2czFbXSBfX2luaXRkYXRhID0geworCS8qIFRvIEJlIFVwZGF0ZWQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc21ka3YyMTBfaTJjX2RldnMyW10gX19pbml0ZGF0YSA9IHsKKwkvKiBUbyBCZSBVcGRhdGVkICovCit9OworCiBzdGF0aWMgc3RydWN0IHMzYzI0MTBfdHNfbWFjaF9pbmZvIHMzY190c19wbGF0Zm9ybSBfX2luaXRkYXRhID0gewogCS5kZWxheQkJCT0gMTAwMDAsCiAJLnByZXNjCQkJPSA0OSwKQEAgLTk2LDcgKzE0NSwyMSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21ka3YyMTBfbWFjaGluZV9pbml0KHZvaWQpCiB7CisJc2Ftc3VuZ19rZXlwYWRfc2V0X3BsYXRkYXRhKCZzbWRrdjIxMF9rZXlwYWRfZGF0YSk7CiAJczNjMjR4eF90c19zZXRfcGxhdGRhdGEoJnMzY190c19wbGF0Zm9ybSk7CisKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisJczNjX2kyYzFfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19pMmMyX3NldF9wbGF0ZGF0YShOVUxMKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBzbWRrdjIxMF9pMmNfZGV2czAsCisJCQlBUlJBWV9TSVpFKHNtZGt2MjEwX2kyY19kZXZzMCkpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIHNtZGt2MjEwX2kyY19kZXZzMSwKKwkJCUFSUkFZX1NJWkUoc21ka3YyMTBfaTJjX2RldnMxKSk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMiwgc21ka3YyMTBfaTJjX2RldnMyLAorCQkJQVJSQVlfU0laRShzbWRrdjIxMF9pMmNfZGV2czIpKTsKKworCXMzY19pZGVfc2V0X3BsYXRkYXRhKCZzbWRrdjIxMF9pZGVfcGRhdGEpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc21ka3YyMTBfZGV2aWNlcywgQVJSQVlfU0laRShzbWRrdjIxMF9kZXZpY2VzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1mYi0yNGJwcC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWZiLTI0YnBwLmMKaW5kZXggYTUwY2JhYy4uOTI4Y2YxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWZiLTI0YnBwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWZiLTI0YnBwLmMKQEAgLTEzLDkgKzEzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L2ZiLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaTJjMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWkyYzAuYwppbmRleCBjNzE4MjUzLi5kMzhmN2NiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaTJjMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1pMmMwLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWkyYzEuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1pMmMxLmMKaW5kZXggNDVlMGU2ZS4uMTQ4YmI3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWkyYzEuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaTJjMS5jCkBAIC0xNCwxMCArMTQsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLwogCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1pMmMyLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaTJjMi5jCmluZGV4IGIxMWI0YmYuLjIzOTZjYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1pMmMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWkyYzIuYwpAQCAtMTQsMTAgKzE0LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogc3RydWN0IHBsYXRmb3JtX2RldmljZTsgLyogZG9uJ3QgbmVlZCB0aGUgY29udGVudHMgKi8KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvaWljLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaWRlLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU1OGIxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1pZGUuYwpAQCAtMCwwICsxLDUwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtaWRlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogUzVQVjIxMCBzZXR1cCBpbmZvcm1hdGlvbiBmb3IgSURFCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisKK3ZvaWQgczVwdjIxMF9pZGVfc2V0dXBfZ3Bpbyh2b2lkKQoreworCXVuc2lnbmVkIGludCBncGlvID0gMDsKKworCWZvciAoZ3BpbyA9IFM1UFYyMTBfR1BKMCgwKTsgZ3BpbyA8PSBTNVBWMjEwX0dQSjAoNyk7IGdwaW8rKykgeworCQkvKiBDRl9BZGRbMCAtIDJdLCBDRl9JT1JEWSwgQ0ZfSU5UUlEsIENGX0RNQVJRLCBDRl9ETUFSU1QsCisJCQlDRl9ETUFDSyAqLworCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDQpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOworCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOworCX0KKworCWZvciAoZ3BpbyA9IFM1UFYyMTBfR1BKMigwKTsgZ3BpbyA8PSBTNVBWMjEwX0dQSjIoNyk7IGdwaW8rKykgeworCQkvKkNGX0RhdGFbMCAtIDddICovCisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oNCkpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJCXM1cF9ncGlvX3NldF9kcnZzdHIoZ3BpbywgUzVQX0dQSU9fRFJWU1RSX0xWNCk7CisJfQorCisJZm9yIChncGlvID0gUzVQVjIxMF9HUEozKDApOyBncGlvIDw9IFM1UFYyMTBfR1BKMyg3KTsgZ3BpbysrKSB7CisJCS8qIENGX0RhdGFbOCAtIDE1XSAqLworCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDQpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOworCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOworCX0KKworCWZvciAoZ3BpbyA9IFM1UFYyMTBfR1BKNCgwKTsgZ3BpbyA8PSBTNVBWMjEwX0dQSjQoMyk7IGdwaW8rKykgeworCQkvKiBDRl9DUzAsIENGX0NTMSwgQ0ZfSU9SRCwgQ0ZfSU9XUiAqLworCQlzM2NfZ3Bpb19jZmdwaW4oZ3BpbywgUzNDX0dQSU9fU0ZOKDQpKTsKKwkJczNjX2dwaW9fc2V0cHVsbChncGlvLCBTM0NfR1BJT19QVUxMX05PTkUpOworCQlzNXBfZ3Bpb19zZXRfZHJ2c3RyKGdwaW8sIFM1UF9HUElPX0RSVlNUUl9MVjQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1rZXlwYWQuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2IyNzkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLWtleXBhZC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAta2V5cGFkLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKwordm9pZCBzYW1zdW5nX2tleXBhZF9jZmdfZ3Bpbyh1bnNpZ25lZCBpbnQgcm93cywgdW5zaWduZWQgaW50IGNvbHMpCit7CisJdW5zaWduZWQgaW50IGdwaW8sIGVuZDsKKworCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUEgzIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9ST1dbeF0gKi8KKwllbmQgPSBTNVBWMjEwX0dQSDMocm93cyk7CisJZm9yIChncGlvID0gUzVQVjIxMF9HUEgzKDApOyBncGlvIDwgZW5kOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigzKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9CisKKwkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BIMiBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMzogS1BfQ09MW3hdICovCisJZW5kID0gUzVQVjIxMF9HUEgyKGNvbHMpOworCWZvciAoZ3BpbyA9IFM1UFYyMTBfR1BIMigwKTsgZ3BpbyA8IGVuZDsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMykpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLWdwaW8uYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zZXR1cC1zZGhjaS1ncGlvLmMKaW5kZXggZmU3ZDg2ZC4uYjE4NTg3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLWdwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2ktZ3Bpby5jCkBAIC0xNSwxNSArMTUsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgogCiB2b2lkIHM1cHYyMTBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKQogeworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKIAogCS8qIFNldCBhbGwgdGhlIG5lY2Vzc2FyeSBHUEcwL0dQRzEgcGlucyB0byBzcGVjaWFsLWZ1bmN0aW9uIDIgKi8KQEAgLTQ4LDEyICs1MCwxNSBAQAogCQlicmVhazsKIAl9CiAKLQlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYyMTBfR1BHMCgyKSwgUzNDX0dQSU9fUFVMTF9VUCk7Ci0JczNjX2dwaW9fY2ZncGluKFM1UFYyMTBfR1BHMCgyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKSB7CisJCXMzY19ncGlvX3NldHB1bGwoUzVQVjIxMF9HUEcwKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fY2ZncGluKFM1UFYyMTBfR1BHMCgyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwl9CiB9CiAKIHZvaWQgczVwdjIxMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCiB7CisJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCBncGlvOwogCiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQRzFbMDoxXSBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwpAQCAtNjgsMTIgKzczLDE1IEBACiAJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKIAl9CiAKLQlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYyMTBfR1BHMSgyKSwgUzNDX0dQSU9fUFVMTF9VUCk7Ci0JczNjX2dwaW9fY2ZncGluKFM1UFYyMTBfR1BHMSgyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0lOVEVSTkFMKSB7CisJCXMzY19ncGlvX3NldHB1bGwoUzVQVjIxMF9HUEcxKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fY2ZncGluKFM1UFYyMTBfR1BHMSgyKSwgUzNDX0dQSU9fU0ZOKDIpKTsKKwl9CiB9CiAKIHZvaWQgczVwdjIxMF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpCiB7CisJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGludCBncGlvOwogCiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQRzJbMDoxXSBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMiAqLwpAQCAtOTksNiArMTA3LDMxIEBACiAJCWJyZWFrOwogCX0KIAotCXMzY19ncGlvX3NldHB1bGwoUzVQVjIxMF9HUEcyKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKLQlzM2NfZ3Bpb19jZmdwaW4oUzVQVjIxMF9HUEcyKDIpLCBTM0NfR1BJT19TRk4oMikpOworCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfSU5URVJOQUwpIHsKKwkJczNjX2dwaW9fc2V0cHVsbChTNVBWMjEwX0dQRzIoMiksIFMzQ19HUElPX1BVTExfVVApOworCQlzM2NfZ3Bpb19jZmdwaW4oUzVQVjIxMF9HUEcyKDIpLCBTM0NfR1BJT19TRk4oMikpOworCX0KK30KKwordm9pZCBzNXB2MjEwX3NldHVwX3NkaGNpM19jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCB3aWR0aCkKK3sKKwlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgaW50IGdwaW87CisKKwkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BHM1swOjJdIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAyICovCisJZm9yIChncGlvID0gUzVQVjIxMF9HUEczKDApOyBncGlvIDwgUzVQVjIxMF9HUEczKDIpOyBncGlvKyspIHsKKwkJczNjX2dwaW9fY2ZncGluKGdwaW8sIFMzQ19HUElPX1NGTigyKSk7CisJCXMzY19ncGlvX3NldHB1bGwoZ3BpbywgUzNDX0dQSU9fUFVMTF9OT05FKTsKKwl9CisKKwkvKiBEYXRhIHBpbiBHUEczWzM6Nl0gdG8gc3BlY2lhbC1mdW5jdGlvbiAyICovCisJZm9yIChncGlvID0gUzVQVjIxMF9HUEczKDMpOyBncGlvIDw9IFM1UFYyMTBfR1BHMyg2KTsgZ3BpbysrKSB7CisJCXMzY19ncGlvX2NmZ3BpbihncGlvLCBTM0NfR1BJT19TRk4oMikpOworCQlzM2NfZ3Bpb19zZXRwdWxsKGdwaW8sIFMzQ19HUElPX1BVTExfTk9ORSk7CisJfQorCisJaWYgKHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9JTlRFUk5BTCkgeworCQlzM2NfZ3Bpb19zZXRwdWxsKFM1UFYyMTBfR1BHMygyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJCXMzY19ncGlvX2NmZ3BpbihTNVBWMjEwX0dQRzMoMiksIFMzQ19HUElPX1NGTigyKSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NldHVwLXNkaGNpLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYwppbmRleCA1MTgxNWVjLi5jMzJlMjAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvc2V0dXAtc2RoY2kuYwpAQCAtMjYsOSArMjYsOSBAQAogCiBjaGFyICpzNXB2MjEwX2hzbW1jX2Nsa3NyY3NbNF0gPSB7CiAJWzBdID0gImhzbW1jIiwJCS8qIEhDTEsgKi8KLQlbMV0gPSAiaHNtbWMiLAkJLyogSENMSyAqLworCS8qIFsxXSA9ICJoc21tYyIsCS0gZHVwbGljYXRlIEhDTEsgZW50cnkgKi8KIAlbMl0gPSAic2Nsa19tbWMiLAkvKiBtbWNfYnVzICovCi0JLypbNF0gPSByZXNlcnZlZCAqLworCS8qIFszXSA9IE5VTEwsCQktIHJlc2VydmVkICovCiB9OwogCiB2b2lkIHM1cHYyMTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzFiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcKQEAgLTAsMCArMSw0NSBAQAorIyBhcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUzVQVjMxMAorCitpZiBBUkNIX1M1UFYzMTAKKworY29uZmlnIENQVV9TNVBWMzEwCisJYm9vbAorCXNlbGVjdCBQTEFUX1M1UAorCWhlbHAKKwkgIEVuYWJsZSBTNVBWMzEwIENQVSBzdXBwb3J0CisKK2NvbmZpZyBTNVBWMzEwX1NFVFVQX0kyQzEKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMS4KKworY29uZmlnIFM1UFYzMTBfU0VUVVBfSTJDMgorCWJvb2wKKwloZWxwCisJICBDb21tb24gc2V0dXAgY29kZSBmb3IgaTJjIGJ1cyAyLgorCisjIG1hY2hpbmUgc3VwcG9ydAorCitjb25maWcgTUFDSF9TTURLVjMxMAorCWJvb2wgIlNNREtWMzEwIgorCXNlbGVjdCBDUFVfUzVQVjMxMAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgU01ES1YzMTAKKworY29uZmlnIE1BQ0hfVU5JVkVSU0FMX0MyMTAKKwlib29sICJNb2JpbGUgVU5JVkVSU0FMX0MyMTAgQm9hcmQiCisJc2VsZWN0IENQVV9TNVBWMzEwCisJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgU2Ftc3VuZyBNb2JpbGUgVW5pdmVyc2FsIFM1UEMyMTAgUmVmZXJlbmNlCisJICBCb2FyZC4gUzVQQzIxMChNQ1ApIGlzIG9uZSBvZiBwYWNrYWdlIG9wdGlvbiBvZiBTNVBWMzEwCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViNTFjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZQpAQCAtMCwwICsxLDMwIEBACisjIGFyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0KK29iai0JCQkJOj0KKworIyBDb3JlIHN1cHBvcnQgZm9yIFM1UFYzMTAgc3lzdGVtCisKK29iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gY3B1Lm8gaW5pdC5vIGNsb2NrLm8gaXJxLWNvbWJpbmVyLm8KK29iai0kKENPTkZJR19DUFVfUzVQVjMxMCkJKz0gc2V0dXAtaTJjMC5vIHRpbWUubworCitvYmotJChDT05GSUdfU01QKQkJKz0gcGxhdHNtcC5vIGhlYWRzbXAubworb2JqLSQoQ09ORklHX0xPQ0FMX1RJTUVSUykJKz0gbG9jYWx0aW1lci5vCitvYmotJChDT05GSUdfSE9UUExVR19DUFUpCSs9IGhvdHBsdWcubworCisjIG1hY2hpbmUgc3VwcG9ydAorCitvYmotJChDT05GSUdfTUFDSF9TTURLVjMxMCkJKz0gbWFjaC1zbWRrdjMxMC5vCitvYmotJChDT05GSUdfTUFDSF9VTklWRVJTQUxfQzIxMCkJKz0gbWFjaC11bml2ZXJzYWxfYzIxMC5vCisKKyMgZGV2aWNlIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX1M1UFYzMTBfU0VUVVBfSTJDMSkJKz0gc2V0dXAtaTJjMS5vCitvYmotJChDT05GSUdfUzVQVjMxMF9TRVRVUF9JMkMyKQkrPSBzZXR1cC1pMmMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY1OTU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHIteQk6PSAweDQwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4NDAwMDAxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmMmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9jbG9jay5jCkBAIC0wLDAgKzEsNTQ0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjMxMCAtIENsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfc2Nsa19oZG1pMjdtID0geworCS5uYW1lCQk9ICJzY2xrX2hkbWkyN20iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAyNzAwMDAwMCwKK307CisKKy8qIENvcmUgbGlzdCBvZiBDTVVfQ1BVIHNpZGUgKi8KKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2FwbGwgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1vdXRfYXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa19zcmNfYXBsbCwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtTUkNfQ1BVLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDEgfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfQ1BVLCAuc2hpZnQgPSAyNCwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZXBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dF9lcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19lcGxsLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS1NSQ19UT1AwLCAuc2hpZnQgPSA0LCAuc2l6ZSA9IDEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9tcGxsID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJtb3V0X21wbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtfc3JjX21wbGwsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX0NQVSwgLnNoaWZ0ID0gOCwgLnNpemUgPSAxIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X21vdXRjb3JlX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX21vdXRfYXBsbC5jbGssCisJWzFdID0gJmNsa19tb3V0X21wbGwuY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfbW91dGNvcmUgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfbW91dGNvcmVfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X21vdXRjb3JlX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0Y29yZSA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dGNvcmUiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtzZXRfbW91dGNvcmUsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX0NQVSwgLnNoaWZ0ID0gMTYsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19jb3JlY2xrID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJjb3JlX2NsayIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX21vdXRjb3JlLmNsaywKKwl9LAorCS5yZWdfZGl2CT0geyAucmVnID0gUzVQX0NMS0RJVl9DUFUsIC5zaGlmdCA9IDAsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hcm1jbGsgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImFybWNsayIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2NvcmVjbGsuY2xrLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FjbGtfY29yZW0wID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJhY2xrX2NvcmVtMCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2NvcmVjbGsuY2xrLAorCX0sCisJLnJlZ19kaXYJPSB7IC5yZWcgPSBTNVBfQ0xLRElWX0NQVSwgLnNoaWZ0ID0gNCwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FjbGtfY29yZXMgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImFjbGtfY29yZXMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19jb3JlY2xrLmNsaywKKwl9LAorCS5yZWdfZGl2CT0geyAucmVnID0gUzVQX0NMS0RJVl9DUFUsIC5zaGlmdCA9IDQsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hY2xrX2NvcmVtMSA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYWNsa19jb3JlbTEiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19jb3JlY2xrLmNsaywKKwl9LAorCS5yZWdfZGl2CT0geyAucmVnID0gUzVQX0NMS0RJVl9DUFUsIC5zaGlmdCA9IDgsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19wZXJpcGhjbGsgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInBlcmlwaGNsayIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2NvcmVjbGsuY2xrLAorCX0sCisJLnJlZ19kaXYJPSB7IC5yZWcgPSBTNVBfQ0xLRElWX0NQVSwgLnNoaWZ0ID0gMTIsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hdGNsayA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYXRjbGsiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19tb3V0Y29yZS5jbGssCisJfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfQ1BVLCAuc2hpZnQgPSAxNiwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3BjbGtfZGJnID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJwY2xrX2RiZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2F0Y2xrLmNsaywKKwl9LAorCS5yZWdfZGl2CT0geyAucmVnID0gUzVQX0NMS0RJVl9DUFUsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDMgfSwKK307CisKKy8qIENvcmUgbGlzdCBvZiBDTVVfQ09SRSBzaWRlICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfY29yZWJ1c19saXN0W10gPSB7CisJWzBdID0gJmNsa19tb3V0X21wbGwuY2xrLAorCVsxXSA9ICZjbGtfbW91dF9hcGxsLmNsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X21vdXRfY29yZWJ1cyA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9jb3JlYnVzX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9jb3JlYnVzX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2NvcmVidXMgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1vdXRfY29yZWJ1cyIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa3NldF9tb3V0X2NvcmVidXMsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX0NPUkUsIC5zaGlmdCA9IDQsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19zY2xrX2RtYyA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAic2Nsa19kbWMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19tb3V0X2NvcmVidXMuY2xrLAorCX0sCisJLnJlZ19kaXYJPSB7IC5yZWcgPSBTNVBfQ0xLRElWX0NPUkUwLCAuc2hpZnQgPSAxMiwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FjbGtfY29yZWQgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImFjbGtfY29yZWQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19zY2xrX2RtYy5jbGssCisJfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfQ09SRTAsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYWNsa19jb3JlcCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYWNsa19jb3JlcCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2FjbGtfY29yZWQuY2xrLAorCX0sCisJLnJlZ19kaXYJPSB7IC5yZWcgPSBTNVBfQ0xLRElWX0NPUkUwLCAuc2hpZnQgPSAyMCwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FjbGtfYWNwID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJhY2xrX2FjcCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX21vdXRfY29yZWJ1cy5jbGssCisJfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfQ09SRTAsIC5zaGlmdCA9IDAsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19wY2xrX2FjcCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAicGNsa19hY3AiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19hY2xrX2FjcC5jbGssCisJfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfQ09SRTAsIC5zaGlmdCA9IDQsIC5zaXplID0gMyB9LAorfTsKKworLyogQ29yZSBsaXN0IG9mIENNVV9UT1Agc2lkZSAqLworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2FjbGtfdG9wX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX21vdXRfbXBsbC5jbGssCisJWzFdID0gJmNsa19tb3V0X2FwbGwuY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfYWNsa18yMDAgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfYWNsa190b3BfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2FjbGtfdG9wX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hY2xrXzIwMCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYWNsa18yMDAiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtzZXRfYWNsa18yMDAsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX1RPUDAsIC5zaGlmdCA9IDEyLCAuc2l6ZSA9IDEgfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfVE9QLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X2FjbGtfMTAwID0geworCS5zb3VyY2VzCT0gY2xrc2V0X2FjbGtfdG9wX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9hY2xrX3RvcF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYWNsa18xMDAgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImFjbGtfMTAwIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrc2V0X2FjbGtfMTAwLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS1NSQ19UT1AwLCAuc2hpZnQgPSAxNiwgLnNpemUgPSAxIH0sCisJLnJlZ19kaXYJPSB7IC5yZWcgPSBTNVBfQ0xLRElWX1RPUCwgLnNoaWZ0ID0gNCwgLnNpemUgPSA0IH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9hY2xrXzE2MCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9hY2xrX3RvcF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfYWNsa190b3BfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FjbGtfMTYwID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJhY2xrXzE2MCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa3NldF9hY2xrXzE2MCwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtTUkNfVE9QMCwgLnNoaWZ0ID0gMjAsIC5zaXplID0gMSB9LAorCS5yZWdfZGl2CT0geyAucmVnID0gUzVQX0NMS0RJVl9UT1AsIC5zaGlmdCA9IDgsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfYWNsa18xMzMgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfYWNsa190b3BfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2FjbGtfdG9wX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hY2xrXzEzMyA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYWNsa18xMzMiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtzZXRfYWNsa18xMzMsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX1RPUDAsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDEgfSwKKwkucmVnX2Rpdgk9IHsgLnJlZyA9IFM1UF9DTEtESVZfVE9QLCAuc2hpZnQgPSAxMiwgLnNpemUgPSAzIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3ZwbGxzcmNfbGlzdFtdID0geworCVswXSA9ICZjbGtfZmluX3ZwbGwsCisJWzFdID0gJmNsa19zY2xrX2hkbWkyN20sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF92cGxsc3JjID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3ZwbGxzcmNfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3ZwbGxzcmNfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3ZwbGxzcmMgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gInZwbGxfc3JjIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrc2V0X3ZwbGxzcmMsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX1RPUDEsIC5zaGlmdCA9IDAsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9zY2xrX3ZwbGxfbGlzdFtdID0geworCVswXSA9ICZjbGtfdnBsbHNyYy5jbGssCisJWzFdID0gJmNsa19mb3V0X3ZwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9zY2xrX3ZwbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfc2Nsa192cGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9zY2xrX3ZwbGxfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3NjbGtfdnBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAic2Nsa192cGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrc2V0X3NjbGtfdnBsbCwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtTUkNfVE9QMCwgLnNoaWZ0ID0gOCwgLnNpemUgPSAxIH0sCit9OworCitzdGF0aWMgaW50IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS0dBVEVfSVBfUEVSSUwsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gInRpbWVycyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2FjbGtfMTAwLmNsaywKKwkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwyNCksCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKKwkvKiBOb3RoaW5nIGhlcmUgeWV0ICovCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2dyb3VwX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2V4dF94dGFsX211eCwKKwlbMV0gPSAmY2xrX3h1c2J4dGksCisJWzJdID0gJmNsa19zY2xrX2hkbWkyN20sCisJWzZdID0gJmNsa19tb3V0X21wbGwuY2xrLAorCVs3XSA9ICZjbGtfbW91dF9lcGxsLmNsaywKKwlbOF0gPSAmY2xrX3NjbGtfdnBsbC5jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9ncm91cCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9ncm91cF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfZ3JvdXBfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrc3Jjc1tdID0geworCXsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgMCksCisJCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX1BFUklMMCwgLnNoaWZ0ID0gMCwgLnNpemUgPSA0IH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS0RJVl9QRVJJTDAsIC5zaGlmdCA9IDAsIC5zaXplID0gNCB9LAorCX0sIHsKKwkJLmNsawkJPSB7CisJCQkubmFtZQkJPSAidWNsazEiLAorCQkJLmlkCQk9IDEsCisJCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDEpLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfZ3JvdXAsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS1NSQ19QRVJJTDAsIC5zaGlmdCA9IDQsIC5zaXplID0gNCB9LAorCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtESVZfUEVSSUwwLCAuc2hpZnQgPSA0LCAuc2l6ZSA9IDQgfSwKKwl9LCB7CisJCS5jbGsJCT0geworCQkJLm5hbWUJCT0gInVjbGsxIiwKKwkJCS5pZAkJPSAyLAorCQkJLmVuYWJsZQkJPSBzNXB2MzEwX2Nsa19pcF9wZXJpbF9jdHJsLAorCQkJLmN0cmxiaXQJPSAoMSA8PCAyKSwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtTUkNfUEVSSUwwLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDQgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLRElWX1BFUklMMCwgLnNoaWZ0ID0gOCwgLnNpemUgPSA0IH0sCisJfSwgeworCQkuY2xrCQk9IHsKKwkJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCQkuaWQJCT0gMywKKwkJCS5lbmFibGUJCT0gczVwdjMxMF9jbGtfaXBfcGVyaWxfY3RybCwKKwkJCS5jdHJsYml0CT0gKDEgPDwgMyksCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9ncm91cCwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLU1JDX1BFUklMMCwgLnNoaWZ0ID0gMTIsIC5zaXplID0gNCB9LAorCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtESVZfUEVSSUwwLCAuc2hpZnQgPSAxMiwgLnNpemUgPSA0IH0sCisJfSwgeworCQkuY2xrCQk9IHsKKwkJCS5uYW1lCQk9ICJzY2xrX3B3bSIsCisJCQkuaWQJCT0gLTEsCisJCQkuZW5hYmxlCQk9IHM1cHYzMTBfY2xrX2lwX3BlcmlsX2N0cmwsCisJCQkuY3RybGJpdAk9ICgxIDw8IDI0KSwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X2dyb3VwLAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtTUkNfUEVSSUwwLCAuc2hpZnQgPSAyNCwgLnNpemUgPSA0IH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS0RJVl9QRVJJTDMsIC5zaGlmdCA9IDAsIC5zaXplID0gNCB9LAorCX0sCit9OworCisvKiBDbG9jayBpbml0aWFsaXphdGlvbiBjb2RlICovCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKnN5c2Nsa3NbXSA9IHsKKwkmY2xrX21vdXRfYXBsbCwKKwkmY2xrX21vdXRfZXBsbCwKKwkmY2xrX21vdXRfbXBsbCwKKwkmY2xrX21vdXRjb3JlLAorCSZjbGtfY29yZWNsaywKKwkmY2xrX2FybWNsaywKKwkmY2xrX2FjbGtfY29yZW0wLAorCSZjbGtfYWNsa19jb3JlcywKKwkmY2xrX2FjbGtfY29yZW0xLAorCSZjbGtfcGVyaXBoY2xrLAorCSZjbGtfYXRjbGssCisJJmNsa19wY2xrX2RiZywKKwkmY2xrX21vdXRfY29yZWJ1cywKKwkmY2xrX3NjbGtfZG1jLAorCSZjbGtfYWNsa19jb3JlZCwKKwkmY2xrX2FjbGtfY29yZXAsCisJJmNsa19hY2xrX2FjcCwKKwkmY2xrX3BjbGtfYWNwLAorCSZjbGtfdnBsbHNyYywKKwkmY2xrX3NjbGtfdnBsbCwKKwkmY2xrX2FjbGtfMjAwLAorCSZjbGtfYWNsa18xMDAsCisJJmNsa19hY2xrXzE2MCwKKwkmY2xrX2FjbGtfMTMzLAorfTsKKwordm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzNXB2MzEwX3NldHVwX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgYXBsbDsKKwl1bnNpZ25lZCBsb25nIG1wbGw7CisJdW5zaWduZWQgbG9uZyBlcGxsOworCXVuc2lnbmVkIGxvbmcgdnBsbDsKKwl1bnNpZ25lZCBsb25nIHZwbGxzcmM7CisJdW5zaWduZWQgbG9uZyB4dGFsOworCXVuc2lnbmVkIGxvbmcgYXJtY2xrOworCXVuc2lnbmVkIGxvbmcgYWNsa19jb3JlbTA7CisJdW5zaWduZWQgbG9uZyBhY2xrX2NvcmVzOworCXVuc2lnbmVkIGxvbmcgYWNsa19jb3JlbTE7CisJdW5zaWduZWQgbG9uZyBwZXJpcGhjbGs7CisJdW5zaWduZWQgbG9uZyBzY2xrX2RtYzsKKwl1bnNpZ25lZCBsb25nIGFjbGtfY29yZWQ7CisJdW5zaWduZWQgbG9uZyBhY2xrX2NvcmVwOworCXVuc2lnbmVkIGxvbmcgYWNsa19hY3A7CisJdW5zaWduZWQgbG9uZyBwY2xrX2FjcDsKKwl1bnNpZ25lZCBpbnQgcHRyOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWdpc3RlcmluZyBjbG9ja3NcbiIsIF9fZnVuY19fKTsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCUJVR19PTihJU19FUlIoeHRhbF9jbGspKTsKKworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4dGFsIGlzICVsZFxuIiwgX19mdW5jX18sIHh0YWwpOworCisJYXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfQVBMTF9DT04wKSwgcGxsXzQ1MDgpOworCW1wbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX01QTExfQ09OMCksIHBsbF80NTA4KTsKKwllcGxsID0gczVwX2dldF9wbGw0Nnh4KHh0YWwsIF9fcmF3X3JlYWRsKFM1UF9FUExMX0NPTjApLAorCQkJCV9fcmF3X3JlYWRsKFM1UF9FUExMX0NPTjEpLCBwbGxfNDUwMCk7CisKKwl2cGxsc3JjID0gY2xrX2dldF9yYXRlKCZjbGtfdnBsbHNyYy5jbGspOworCXZwbGwgPSBzNXBfZ2V0X3BsbDQ2eHgodnBsbHNyYywgX19yYXdfcmVhZGwoUzVQX1ZQTExfQ09OMCksCisJCQkJX19yYXdfcmVhZGwoUzVQX1ZQTExfQ09OMSksIHBsbF80NTAyKTsKKworCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CisJY2xrX2ZvdXRfbXBsbC5yYXRlID0gbXBsbDsKKwljbGtfZm91dF9lcGxsLnJhdGUgPSBlcGxsOworCWNsa19mb3V0X3ZwbGwucmF0ZSA9IHZwbGw7CisKKwlwcmludGsoS0VSTl9JTkZPICJTNVBWMzEwOiBQTEwgc2V0dGluZ3MsIEE9JWxkLCBNPSVsZCwgRT0lbGQgVj0lbGQiLAorCQkJYXBsbCwgbXBsbCwgZXBsbCwgdnBsbCk7CisKKwlhcm1jbGsgPSBjbGtfZ2V0X3JhdGUoJmNsa19hcm1jbGsuY2xrKTsKKwlhY2xrX2NvcmVtMCA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfY29yZW0wLmNsayk7CisJYWNsa19jb3JlcyA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfY29yZXMuY2xrKTsKKwlhY2xrX2NvcmVtMSA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfY29yZW0xLmNsayk7CisJcGVyaXBoY2xrID0gY2xrX2dldF9yYXRlKCZjbGtfcGVyaXBoY2xrLmNsayk7CisJc2Nsa19kbWMgPSBjbGtfZ2V0X3JhdGUoJmNsa19zY2xrX2RtYy5jbGspOworCWFjbGtfY29yZWQgPSBjbGtfZ2V0X3JhdGUoJmNsa19hY2xrX2NvcmVkLmNsayk7CisJYWNsa19jb3JlcCA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfY29yZXAuY2xrKTsKKwlhY2xrX2FjcCA9IGNsa19nZXRfcmF0ZSgmY2xrX2FjbGtfYWNwLmNsayk7CisJcGNsa19hY3AgPSBjbGtfZ2V0X3JhdGUoJmNsa19wY2xrX2FjcC5jbGspOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzVQVjMxMDogQVJNQ0xLPSVsZCwgQ09SRU0wPSVsZCwgQ09SRVM9JWxkXG4iCisJCQkgIkNPUkVNMT0lbGQsIFBFUkk9JWxkLCBETUM9JWxkLCBDT1JFRD0lbGRcbiIKKwkJCSAiQ09SRVA9JWxkLCBBQ0xLX0FDUD0lbGQsIFBDTEtfQUNQPSVsZCIsCisJCQlhcm1jbGssIGFjbGtfY29yZW0wLCBhY2xrX2NvcmVzLCBhY2xrX2NvcmVtMSwKKwkJCXBlcmlwaGNsaywgc2Nsa19kbWMsIGFjbGtfY29yZWQsIGFjbGtfY29yZXAsCisJCQlhY2xrX2FjcCwgcGNsa19hY3ApOworCisJY2xrX2YucmF0ZSA9IGFybWNsazsKKwljbGtfaC5yYXRlID0gc2Nsa19kbWM7CisJY2xrX3AucmF0ZSA9IHBlcmlwaGNsazsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzcmNzKTsgcHRyKyspCisJCXMzY19zZXRfY2xrc3JjKCZjbGtzcmNzW3B0cl0sIHRydWUpOworfQorCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJLyogTm90aGluZyBoZXJlIHlldCAqLworfTsKKwordm9pZCBfX2luaXQgczVwdjMxMF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCWludCByZXQ7CisJaW50IHB0cjsKKworCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKGNsa3MsIEFSUkFZX1NJWkUoY2xrcykpOworCWlmIChyZXQgPiAwKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciAldSBjbG9ja3NcbiIsIHJldCk7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoc3lzY2xrcyk7IHB0cisrKQorCQlzM2NfcmVnaXN0ZXJfY2xrc3JjKHN5c2Nsa3NbcHRyXSwgMSk7CisKKwlzM2NfcmVnaXN0ZXJfY2xrc3JjKGNsa3NyY3MsIEFSUkFZX1NJWkUoY2xrc3JjcykpOworCXMzY19yZWdpc3Rlcl9jbG9ja3MoaW5pdF9jbG9ja3MsIEFSUkFZX1NJWkUoaW5pdF9jbG9ja3MpKTsKKworCWNsa3AgPSBpbml0X2Nsb2Nrc19kaXNhYmxlOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrc19kaXNhYmxlKTsgcHRyKyssIGNsa3ArKykgeworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJCShjbGtwLT5lbmFibGUpKGNsa3AsIDApOworCX0KKworCXMzY19wd21jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmM5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvY3B1LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9jcHUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvczVwdjMxMC5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorCit2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOworCitleHRlcm4gaW50IGNvbWJpbmVyX2luaXQodW5zaWduZWQgaW50IGNvbWJpbmVyX25yLCB2b2lkIF9faW9tZW0gKmJhc2UsCisJCQkgdW5zaWduZWQgaW50IGlycV9zdGFydCk7CitleHRlcm4gdm9pZCBjb21iaW5lcl9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgY29tYmluZXJfbnIsIHVuc2lnbmVkIGludCBpcnEpOworCisvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHM1cHYzMTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX0NPUkVQRVJJX0JBU0UsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMzEwX1BBX0NPUkVQRVJJKSwKKwkJLmxlbmd0aAkJPSBTWl84SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ09NQklORVJfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UFYzMTBfUEFfQ09NQklORVIpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9MMkNDLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjMxMF9QQV9MMkNDKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBzNXB2MzEwX2lkbGUodm9pZCkKK3sKKwlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQljcHVfZG9faWRsZSgpOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisvKiBzNXB2MzEwX21hcF9pbworICoKKyAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKKyovCit2b2lkIF9faW5pdCBzNXB2MzEwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChzNXB2MzEwX2lvZGVzYywgQVJSQVlfU0laRShzNXB2MzEwX2lvZGVzYykpOworfQorCit2b2lkIF9faW5pdCBzNXB2MzEwX2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5pdGlhbGl6aW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCisJczNjMjR4eF9yZWdpc3Rlcl9iYXNlY2xvY2tzKHh0YWwpOworCXM1cF9yZWdpc3Rlcl9jbG9ja3MoeHRhbCk7CisJczVwdjMxMF9yZWdpc3Rlcl9jbG9ja3MoKTsKKwlzNXB2MzEwX3NldHVwX2Nsb2NrcygpOworfQorCit2b2lkIF9faW5pdCBzNXB2MzEwX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCWdpY19jcHVfYmFzZV9hZGRyID0gUzVQX1ZBX0dJQ19DUFU7CisJZ2ljX2Rpc3RfaW5pdCgwLCBTNVBfVkFfR0lDX0RJU1QsIElSUV9MT0NBTFRJTUVSKTsKKwlnaWNfY3B1X2luaXQoMCwgUzVQX1ZBX0dJQ19DUFUpOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBNQVhfQ09NQklORVJfTlI7IGlycSsrKSB7CisJCWNvbWJpbmVyX2luaXQoaXJxLCAodm9pZCBfX2lvbWVtICopUzVQX1ZBX0NPTUJJTkVSKGlycSksCisJCQkJQ09NQklORVJfSVJRKGlycSwgMCkpOworCQljb21iaW5lcl9jYXNjYWRlX2lycShpcnEsIElSUV9TUEkoaXJxKSk7CisJfQorCisJLyogVGhlIHBhcmFtZXRlcnMgb2YgczVwX2luaXRfaXJxKCkgYXJlIGZvciBWSUMgaW5pdC4KKwkgKiBUaGVzZXMgcGFyYW1ldGVycyBzaG91bGQgYmUgTlVMTCBhbmQgMCBiZWNhdXNlIFM1UFYzMTAKKwkgKiB1c2VzIEdJQyBpbnN0ZWFkIG9mIFZJQy4KKwkgKi8KKwlzNXBfaW5pdF9pcnEoTlVMTCwgMCk7Cit9CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczVwdjMxMF9zeXNjbGFzcyA9IHsKKwkubmFtZQk9ICJzNXB2MzEwLWNvcmUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHM1cHYzMTBfc3lzZGV2ID0geworCS5jbHMJPSAmczVwdjMxMF9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cHYzMTBfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczVwdjMxMF9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczVwdjMxMF9jb3JlX2luaXQpOworCitpbnQgX19pbml0IHM1cHYzMTBfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIlM1UFYzMTA6IEluaXRpYWxpemluZyBhcmNoaXRlY3R1cmVcbiIpOworCisJLyogc2V0IGlkbGUgZnVuY3Rpb24gKi8KKwlwbV9pZGxlID0gczVwdjMxMF9pZGxlOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczVwdjMxMF9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2hlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9oZWFkc21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY0YjdiMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9oZWFkc21wLlMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaGVhZHNtcC5TCisgKgorICogIENsb25lZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaGVhZHNtcC5TCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMyBBUk0gTGltaXRlZAorICogIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworCV9fSU5JVAorCisvKgorICogczVwdjMxMCBzcGVjaWZpYyBlbnRyeSBwb2ludCBmb3Igc2Vjb25kYXJ5IENQVXMuICBUaGlzIHByb3ZpZGVzCisgKiBhICJob2xkaW5nIHBlbiIgaW50byB3aGljaCBhbGwgc2Vjb25kYXJ5IGNvcmVzIGFyZSBoZWxkIHVudGlsIHdlJ3JlCisgKiByZWFkeSBmb3IgdGhlbSB0byBpbml0aWFsaXNlLgorICovCitFTlRSWShzNXB2MzEwX3NlY29uZGFyeV9zdGFydHVwKQorCW1yYwlwMTUsIDAsIHIwLCBjMCwgYzAsIDUKKwlhbmQJcjAsIHIwLCAjMTUKKwlhZHIJcjQsIDFmCisJbGRtaWEJcjQsIHtyNSwgcjZ9CisJc3ViCXI0LCByNCwgcjUKKwlhZGQJcjYsIHI2LCByNAorcGVuOglsZHIJcjcsIFtyNl0KKwljbXAJcjcsIHIwCisJYm5lCXBlbgorCisJLyoKKwkgKiB3ZSd2ZSBiZWVuIHJlbGVhc2VkIGZyb20gdGhlIGhvbGRpbmcgcGVuOiBzZWNvbmRhcnlfc3RhY2sKKwkgKiBzaG91bGQgbm93IGNvbnRhaW4gdGhlIFNWQyBzdGFjayBmb3IgdGhpcyBjb3JlCisJICovCisJYglzZWNvbmRhcnlfc3RhcnR1cAorCisxOgkubG9uZwkuCisJLmxvbmcJcGVuX3JlbGVhc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmIzODkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHB1bGwgaW4gdGhlIHJlbGV2YW50IHJlZ2lzdGVyIGFuZCBtYXAgZmlsZXMuICovCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisJLyogbm90ZSwgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gd29yayB3ZSBoYXZlIHRvIGtlZXAgdGhlIFVBUlQKKwkgKiB2aXJ0dWFsIGFkZHJlc3MgYWxpZ25lZCB0byBhbiAxTWlCIGJvdW5kYXJ5IGZvciB0aGUgTDEKKwkgKiBtYXBwaW5nIHRoZSBoZWFkIGNvZGUgbWFrZXMuIFdlIGtlZXAgdGhlIFVBUlQgdmlydHVhbCBhZGRyZXNzCisJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgorCSAqLworCisJLm1hY3JvIGFkZHJ1YXJ0LCByeCwgdG1wCisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCisJCWxkcmVxCVxyeCwgPSBTM0NfUEFfVUFSVAorCQlsZHJuZQlccngsID0gUzNDX1ZBX1VBUlQKKyNpZiBDT05GSUdfREVCVUdfUzNDX1VBUlQgIT0gMAorCQlhZGQJXHJ4LCBccngsICMoMHgxMDAwMCAqIENPTkZJR19ERUJVR19TM0NfVUFSVCkKKyNlbmRpZgorCS5lbmRtCisKKyNkZWZpbmUgZmlmb19mdWxsIGZpZm9fZnVsbF9zNXB2MjEwCisjZGVmaW5lIGZpZm9fbGV2ZWwgZmlmb19sZXZlbF9zNXB2MjEwCisKKyNpbmNsdWRlIDxwbGF0L2RlYnVnLW1hY3JvLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYwMGUxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDg0IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBDbG9uZWQgZnJvbSBhcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBTNVBWMzEwIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKi8KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisKKwkJLm1hY3JvCWRpc2FibGVfZmlxCisJCS5lbmRtCisKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1naWNfY3B1X2Jhc2VfYWRkcgorCQlsZHIJXGJhc2UsIFtcYmFzZV0KKwkJLmVuZG0KKworCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKKwkJLmVuZG0KKworCQkvKgorCQkgKiBUaGUgaW50ZXJydXB0IG51bWJlcmluZyBzY2hlbWUgaXMgZGVmaW5lZCBpbiB0aGUKKwkJICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKKwkJICoKKwkJICogSW50ZXJydXB0cyAwLTE1IGFyZSBJUEkKKwkJICogMTYtMjggYXJlIHJlc2VydmVkCisJCSAqIDI5LTMxIGFyZSBsb2NhbC4gIFdlIGFsbG93IDMwIHRvIGJlIHVzZWQgZm9yIHRoZSB3YXRjaGRvZy4KKwkJICogMzItMTAyMCBhcmUgZ2xvYmFsCisJCSAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKKwkJICogMTAyMyBpcyAic3B1cmlvdXMiIChubyBpbnRlcnJ1cHQpCisJCSAqCisJCSAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbiBpbnRlcnJ1cHQgaWYgaXQncworCQkgKiBiZXR3ZWVuIDMwIGFuZCAxMDIwLiAgVGhlIHRlc3RfZm9yX2lwaSByb3V0aW5lIGJlbG93IHdpbGwgcGljayB1cCBvbiBJUElzLgorCQkgKgorCQkgKiBBIHNpbXBsZSByZWFkIGZyb20gdGhlIGNvbnRyb2xsZXIgd2lsbCB0ZWxsIHVzIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3QKKyAgICAgICAgICAgICAgICAgKiBwcmlvcml0eSBlbmFibGVkIGludGVycnVwdC4gIFdlIHRoZW4ganVzdCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgaW4gdGhlCisJCSAqIHZhbGlkIHJhbmdlIGZvciBhbiBJUlEgKDMwLTEwMjAgaW5jbHVzaXZlKS4KKwkJICovCisKKwkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCQlsZHIgICAgIFxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0lOVEFDS10gLyogYml0cyAxMi0xMCA9IHNyYyBDUFUsIDktMCA9IGludCAjICovCisKKwkJbGRyCVx0bXAsID0xMDIxCisKKwkJYmljICAgICBcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCisKKwkJY21wICAgICBcaXJxbnIsICMyOQorCQljbXBjYwlcaXJxbnIsIFxpcnFucgorCQljbXBuZQlcaXJxbnIsIFx0bXAKKwkJY21wY3MJXGlycW5yLCBcaXJxbnIKKwkJYWRkbmUJXGlycW5yLCBcaXJxbnIsICMzMgorCisJCS5lbmRtCisKKwkJLyogV2UgYXNzdW1lIHRoYXQgaXJxc3RhdCAodGhlIHJhdyB2YWx1ZSBvZiB0aGUgSVJRIGFja25vd2xlZGdlCisJCSAqIHJlZ2lzdGVyKSBpcyBwcmVzZXJ2ZWQgZnJvbSB0aGUgbWFjcm8gYWJvdmUuCisJCSAqIElmIHRoZXJlIGlzIGFuIElQSSwgd2UgaW1tZWRpYXRlbHkgc2lnbmFsIGVuZCBvZiBpbnRlcnJ1cHQgb24gdGhlCisJCSAqIGNvbnRyb2xsZXIsIHNpbmNlIHRoaXMgcmVxdWlyZXMgdGhlIG9yaWdpbmFsIGlycXN0YXQgdmFsdWUgd2hpY2gKKwkJICogd2Ugd29uJ3QgZWFzaWx5IGJlIGFibGUgdG8gcmVjcmVhdGUgbGF0ZXIuCisJCSAqLworCisJCS5tYWNybyB0ZXN0X2Zvcl9pcGksIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkJY21wCVxpcnFuciwgIzE2CisJCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwkJY21wY3MJXGlycW5yLCBcaXJxbnIKKwkJLmVuZG0KKworCQkvKiBBcyBhYm92ZSwgdGhpcyBhc3N1bWVzIHRoYXQgaXJxc3RhdCBhbmQgYmFzZSBhcmUgcHJlc2VydmVkLi4gKi8KKworCQkubWFjcm8gdGVzdF9mb3JfbHRpcnEsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJYmljCVxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkJbW92CVx0bXAsICMwCisJCWNtcAlcaXJxbnIsICMyOQorCQltb3ZlcQlcdG1wLCAjMQorCQlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCisJCWNtcAlcdG1wLCAjMAorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGNiODBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVBWMzEwIC0gR1BJTyBsaWIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19IIF9fRklMRV9fCisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKKworLyogUHJhY3RpY2FsbHksIEdQSU8gYmFua3MgdXB0byBHUFogYXJlIHRoZSBjb25maWd1cmFibGUgZ3BpbyBiYW5rcyAqLworCisvKiBHUElPIGJhbmsgc2l6ZXMgKi8KKyNkZWZpbmUgUzVQVjMxMF9HUElPX0EwX05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fQTFfTlIJKDYpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19CX05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fQzBfTlIJKDUpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19DMV9OUgkoNSkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0QwX05SCSg0KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fRDFfTlIJKDQpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19FMF9OUgkoNSkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0UxX05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fRTJfTlIJKDYpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19FM19OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0U0X05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fRjBfTlIJKDgpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19GMV9OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0YyX05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fRjNfTlIJKDYpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19KMF9OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0oxX05SCSg1KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fSzBfTlIJKDcpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19LMV9OUgkoNykKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0syX05SCSg3KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fSzNfTlIJKDcpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19MMF9OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX0wxX05SCSgzKQorI2RlZmluZSBTNVBWMzEwX0dQSU9fTDJfTlIJKDgpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19YMF9OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX1gxX05SCSg4KQorI2RlZmluZSBTNVBWMzEwX0dQSU9fWDJfTlIJKDgpCisjZGVmaW5lIFM1UFYzMTBfR1BJT19YM19OUgkoOCkKKyNkZWZpbmUgUzVQVjMxMF9HUElPX1pfTlIJKDcpCisKKy8qIEdQSU8gYmFuayBudW1iZXJzICovCisKKyNkZWZpbmUgUzVQVjMxMF9HUElPX05FWFQoX19ncGlvKSBcCisJKChfX2dwaW8jI19TVEFSVCkgKyAoX19ncGlvIyNfTlIpICsgQ09ORklHX1MzQ19HUElPX1NQQUNFICsgMSkKKworZW51bSBzNXBfZ3Bpb19udW1iZXIgeworCVM1UFYzMTBfR1BJT19BMF9TVEFSVAk9IDAsCisJUzVQVjMxMF9HUElPX0ExX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0EwKSwKKwlTNVBWMzEwX0dQSU9fQl9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19BMSksCisJUzVQVjMxMF9HUElPX0MwX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0IpLAorCVM1UFYzMTBfR1BJT19DMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19DMCksCisJUzVQVjMxMF9HUElPX0QwX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0MxKSwKKwlTNVBWMzEwX0dQSU9fRDFfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRDApLAorCVM1UFYzMTBfR1BJT19FMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19EMSksCisJUzVQVjMxMF9HUElPX0UxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0UwKSwKKwlTNVBWMzEwX0dQSU9fRTJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRTEpLAorCVM1UFYzMTBfR1BJT19FM19TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19FMiksCisJUzVQVjMxMF9HUElPX0U0X1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0UzKSwKKwlTNVBWMzEwX0dQSU9fRjBfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRTQpLAorCVM1UFYzMTBfR1BJT19GMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19GMCksCisJUzVQVjMxMF9HUElPX0YyX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0YxKSwKKwlTNVBWMzEwX0dQSU9fRjNfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fRjIpLAorCVM1UFYzMTBfR1BJT19KMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19GMyksCisJUzVQVjMxMF9HUElPX0oxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0owKSwKKwlTNVBWMzEwX0dQSU9fSzBfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fSjEpLAorCVM1UFYzMTBfR1BJT19LMV9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19LMCksCisJUzVQVjMxMF9HUElPX0syX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0sxKSwKKwlTNVBWMzEwX0dQSU9fSzNfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fSzIpLAorCVM1UFYzMTBfR1BJT19MMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19LMyksCisJUzVQVjMxMF9HUElPX0wxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX0wwKSwKKwlTNVBWMzEwX0dQSU9fTDJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fTDEpLAorCVM1UFYzMTBfR1BJT19YMF9TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19MMiksCisJUzVQVjMxMF9HUElPX1gxX1NUQVJUCT0gUzVQVjMxMF9HUElPX05FWFQoUzVQVjMxMF9HUElPX1gwKSwKKwlTNVBWMzEwX0dQSU9fWDJfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fWDEpLAorCVM1UFYzMTBfR1BJT19YM19TVEFSVAk9IFM1UFYzMTBfR1BJT19ORVhUKFM1UFYzMTBfR1BJT19YMiksCisJUzVQVjMxMF9HUElPX1pfU1RBUlQJPSBTNVBWMzEwX0dQSU9fTkVYVChTNVBWMzEwX0dQSU9fWDMpLAorfTsKKworLyogUzVQVjMxMCBHUElPIG51bWJlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTNVBWMzEwX0dQQTAoX25yKQkoUzVQVjMxMF9HUElPX0EwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BBMShfbnIpCShTNVBWMzEwX0dQSU9fQTFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEIoX25yKQkoUzVQVjMxMF9HUElPX0JfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEMwKF9ucikJKFM1UFYzMTBfR1BJT19DMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQQzEoX25yKQkoUzVQVjMxMF9HUElPX0MxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BEMChfbnIpCShTNVBWMzEwX0dQSU9fRDBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEQxKF9ucikJKFM1UFYzMTBfR1BJT19EMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQRTAoX25yKQkoUzVQVjMxMF9HUElPX0UwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BFMShfbnIpCShTNVBWMzEwX0dQSU9fRTFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEUyKF9ucikJKFM1UFYzMTBfR1BJT19FMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQRTMoX25yKQkoUzVQVjMxMF9HUElPX0UzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BFNChfbnIpCShTNVBWMzEwX0dQSU9fRTRfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEYwKF9ucikJKFM1UFYzMTBfR1BJT19GMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQRjEoX25yKQkoUzVQVjMxMF9HUElPX0YxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BGMihfbnIpCShTNVBWMzEwX0dQSU9fRjJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEYzKF9ucikJKFM1UFYzMTBfR1BJT19GM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQSjAoX25yKQkoUzVQVjMxMF9HUElPX0owX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BKMShfbnIpCShTNVBWMzEwX0dQSU9fSjFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEswKF9ucikJKFM1UFYzMTBfR1BJT19LMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQSzEoX25yKQkoUzVQVjMxMF9HUElPX0sxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BLMihfbnIpCShTNVBWMzEwX0dQSU9fSzJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEszKF9ucikJKFM1UFYzMTBfR1BJT19LM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQTDAoX25yKQkoUzVQVjMxMF9HUElPX0wwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BMMShfbnIpCShTNVBWMzEwX0dQSU9fTDFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUEwyKF9ucikJKFM1UFYzMTBfR1BJT19MMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQWDAoX25yKQkoUzVQVjMxMF9HUElPX1gwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BYMShfbnIpCShTNVBWMzEwX0dQSU9fWDFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjMxMF9HUFgyKF9ucikJKFM1UFYzMTBfR1BJT19YMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMzEwX0dQWDMoX25yKQkoUzVQVjMxMF9HUElPX1gzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYzMTBfR1BaKF9ucikJKFM1UFYzMTBfR1BJT19aX1NUQVJUICsgKF9ucikpCisKKy8qIHRoZSBlbmQgb2YgdGhlIFM1UFYzMTAgc3BlY2lmaWMgZ3Bpb3MgKi8KKyNkZWZpbmUgUzVQVjMxMF9HUElPX0VORAkoUzVQVjMxMF9HUFooUzVQVjMxMF9HUElPX1pfTlIpICsgMSkKKyNkZWZpbmUgUzNDX0dQSU9fRU5ECQlTNVBWMzEwX0dQSU9fRU5ECisKKy8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIGdwaW9zIHdlIG5lZWQgdG8gdGhlIG9uZSBhZnRlciB0aGUgR1BaKCkgcmFuZ2UgKi8KKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKFM1UFYzMTBfR1BaKFM1UFYzMTBfR1BJT19aX05SKSArCVwKKwkJCQkgQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQSArIDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZmY5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxOCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVBWMzEwIC0gSGFyZHdhcmUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggX19GSUxFX18KKworLyogY3VycmVudGx5IG5vdGhpbmcgaGVyZSwgcGxhY2Vob2xkZXIgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhN2Y5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL2lvLmgKKyAqCisgKiBEZWZhdWx0IElPIHJvdXRpbmVzIGZvciBTNVBWMzEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19IIF9fRklMRV9fCisKKy8qIE5vIGN1cnJlbnQgSVNBL1BDSSBidXMgc3VwcG9ydC4gKi8KKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgKDB4RkZGRkZGRkYpCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fQVJDSF9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODg1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDc0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL2lycXMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIElSUSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworLyogUHJpdmF0ZSBQZXJpcGhlcmFsIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfUFBJKHgpCQlTNVBfSVJRKHgrMTYpCisKKyNkZWZpbmUgSVJRX0xPQ0FMVElNRVIJCUlSUV9QUEkoMTMpCisKKy8qIFNoYXJlZCBQZXJpcGhlcmFsIEludGVycnVwdCAqLworI2RlZmluZSBJUlFfU1BJKHgpCQlTNVBfSVJRKHgrMzIpCisKKyNkZWZpbmUgSVJRX0VJTlQwCQlJUlFfU1BJKDQwKQorI2RlZmluZSBJUlFfRUlOVDEJCUlSUV9TUEkoNDEpCisjZGVmaW5lIElSUV9FSU5UMgkJSVJRX1NQSSg0MikKKyNkZWZpbmUgSVJRX0VJTlQzCQlJUlFfU1BJKDQzKQorI2RlZmluZSBJUlFfVVNCX0hTT1RHCQlJUlFfU1BJKDQ0KQorI2RlZmluZSBJUlFfVVNCX0hPU1QJCUlSUV9TUEkoNDUpCisjZGVmaW5lIElSUV9NT0RFTV9JRgkJSVJRX1NQSSg0NikKKyNkZWZpbmUgSVJRX1JPVEFUT1IJCUlSUV9TUEkoNDcpCisjZGVmaW5lIElSUV9KUEVHCQlJUlFfU1BJKDQ4KQorI2RlZmluZSBJUlFfMkQJCQlJUlFfU1BJKDQ5KQorI2RlZmluZSBJUlFfUENJRQkJSVJRX1NQSSg1MCkKKyNkZWZpbmUgSVJRX1NZU1RFTV9USU1FUglJUlFfU1BJKDUxKQorI2RlZmluZSBJUlFfTUZDCQkJSVJRX1NQSSg1MikKKyNkZWZpbmUgSVJRX1dURAkJCUlSUV9TUEkoNTMpCisjZGVmaW5lIElSUV9BVURJT19TUwkJSVJRX1NQSSg1NCkKKyNkZWZpbmUgSVJRX0FDOTcJCUlSUV9TUEkoNTUpCisjZGVmaW5lIElSUV9TUERJRgkJSVJRX1NQSSg1NikKKyNkZWZpbmUgSVJRX0tFWVBBRAkJSVJRX1NQSSg1NykKKyNkZWZpbmUgSVJRX0lOVEZFRURDVFJMX1NTUwlJUlFfU1BJKDU4KQorI2RlZmluZSBJUlFfU0xJTUJVUwkJSVJRX1NQSSg1OSkKKyNkZWZpbmUgSVJRX1BNVQkJCUlSUV9TUEkoNjApCisjZGVmaW5lIElSUV9UU0kJCQlJUlFfU1BJKDYxKQorI2RlZmluZSBJUlFfU0FUQQkJSVJRX1NQSSg2MikKKyNkZWZpbmUgSVJRX0dQUwkJCUlSUV9TUEkoNjMpCisKKyNkZWZpbmUgTUFYX0lSUV9JTl9DT01CSU5FUgk4CisjZGVmaW5lIENPTUJJTkVSX0dST1VQKHgpCSgoeCkgKiBNQVhfSVJRX0lOX0NPTUJJTkVSICsgSVJRX1NQSSg2NCkpCisjZGVmaW5lIENPTUJJTkVSX0lSUSh4LCB5KQkoQ09NQklORVJfR1JPVVAoeCkgKyB5KQorCisjZGVmaW5lIElSUV9USU1FUjBfVklDCQlDT01CSU5FUl9JUlEoMjIsIDApCisjZGVmaW5lIElSUV9USU1FUjFfVklDCQlDT01CSU5FUl9JUlEoMjIsIDEpCisjZGVmaW5lIElSUV9USU1FUjJfVklDCQlDT01CSU5FUl9JUlEoMjIsIDIpCisjZGVmaW5lIElSUV9USU1FUjNfVklDCQlDT01CSU5FUl9JUlEoMjIsIDMpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlDT01CSU5FUl9JUlEoMjIsIDQpCisKKyNkZWZpbmUgSVJRX1VBUlQwCQlDT01CSU5FUl9JUlEoMjYsIDApCisjZGVmaW5lIElSUV9VQVJUMQkJQ09NQklORVJfSVJRKDI2LCAxKQorI2RlZmluZSBJUlFfVUFSVDIJCUNPTUJJTkVSX0lSUSgyNiwgMikKKyNkZWZpbmUgSVJRX1VBUlQzCQlDT01CSU5FUl9JUlEoMjYsIDMpCisjZGVmaW5lIElSUV9VQVJUNAkJQ09NQklORVJfSVJRKDI2LCA0KQorCisjZGVmaW5lIElSUV9JSUMJCQlDT01CSU5FUl9JUlEoMjcsIDApCisKKy8qIFNldCB0aGUgZGVmYXVsdCBOUl9JUlFTICovCisjZGVmaW5lIE5SX0lSUVMJCQlDT01CSU5FUl9JUlEoTUFYX0NPTUJJTkVSX05SLCAwKQorCisjZGVmaW5lIE1BWF9DT01CSU5FUl9OUgkJMzkKKworI2VuZGlmIC8qIEFTTV9BUkNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2OTdjOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTAsMCArMSw2OSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjMxMCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUFQX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KKworLyoKKyAqIFM1UFYzMTAgVUFSVCBvZmZzZXQgaXMgMHgxMDAwMCBidXQgdGhlIG9sZGVyIFM1UCBTb0NzIGFyZSAweDQwMC4KKyAqIFNvIG5lZWQgdG8gZGVmaW5lIGl0LCBhbmQgaGVyZSBpcyB0byBhdm9pZCByZWRlZmluaXRpb24gd2FybmluZy4KKyAqLworI2RlZmluZSBTM0NfVUFSVF9PRkZTRVQJCQkoMHgxMDAwMCkKKworI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgorCisjZGVmaW5lIFM1UFYzMTBfUEFfQ0hJUElECQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UFYzMTBfUEFfQ0hJUElECisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TWVNDT04JCSgweDEwMDIwMDAwKQorI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKworI2RlZmluZSBTNVBWMzEwX1BBX1dBVENIRE9HCQkoMHgxMDA2MDAwMCkKKworI2RlZmluZSBTNVBWMzEwX1BBX0NPTUJJTkVSCQkoMHgxMDQ0ODAwMCkKKworI2RlZmluZSBTNVBWMzEwX1BBX0NPUkVQRVJJCQkoMHgxMDUwMDAwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfQ1BVCQkoMHgxMDUwMDEwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9UV0QJCQkoMHgxMDUwMDYwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJKDB4MTA1MDEwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfTDJDQwkJCSgweDEwNTAyMDAwKQorCisjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTwkJCSgweDExMDAwMDAwKQorI2RlZmluZSBTNVBfUEFfR1BJTwkJCVM1UFYzMTBfUEFfR1BJTworCisjZGVmaW5lIFM1UFYzMTBfUEFfVUFSVAkJCSgweDEzODAwMDAwKQorCisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFM1UFYzMTBfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQorI2RlZmluZSBTNVBfUEFfVUFSVDQJCQlTNVBfUEFfVUFSVCg0KQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CisKKyNkZWZpbmUgUzVQVjMxMF9QQV9JSUMwCQkJKDB4MTM4NjAwMDApCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJKDB4MTM5RDAwMDApCisjZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UFYzMTBfUEFfVElNRVIKKworI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkoMHg0MDAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQkJUzVQVjMxMF9QQV9TRFJBTQorCisvKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCisjZGVmaW5lIFMzQ19QQV9VQVJUCQkJUzVQVjMxMF9QQV9VQVJUCisjZGVmaW5lIFMzQ19QQV9JSUMJCQlTNVBWMzEwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX1dEVAkJCVM1UFYzMTBfUEFfV0FUQ0hET0cKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZmZiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYzMTAgLSBNZW1vcnkgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0ggX19GSUxFX18KKworI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHg0MDAwMDAwMCkKKworLyogTWF4aW11bSBvZiAyNTZNaUIgaW4gb25lIGJhbmsgKi8KKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUwkzMgorI2RlZmluZSBTRUNUSU9OX1NJWkVfQklUUwkyOAorCisjZW5kaWYgLyogX19BU01fQVJDSF9NRU1PUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2ZGEyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKQEAgLTAsMCArMSw3MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaAorICoKKyAqIFM1UFYzMTAgLSBwd20gY2xvY2sgYW5kIHRpbWVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1BXTUNMS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUFdNQ0xLX0ggX19GSUxFX18KKworLyoqCisgKiBwd21fY2ZnX3NyY19pc190Y2xrKCkgLSByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbXV4IGNvbmZpZyBpcyBhIHRjbGsKKyAqIEB0Y2ZnOiBUaGUgdGltZXIgVENGRzEgcmVnaXN0ZXIgYml0cyBzaGlmdGVkIGRvd24gdG8gMC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiBmcm9tIFRDRkcxIGlzIGEgVENMSyBpbnN0ZWFkCisgKiBhbnkgb2YgdGhlIFRESVYgY2xvY2tzLgorICovCitzdGF0aWMgaW5saW5lIGludCBwd21fY2ZnX3NyY19pc190Y2xrKHVuc2lnbmVkIGxvbmcgdGNmZykKK3sKKwlyZXR1cm4gdGNmZyA9PSBTM0M2NFhYX1RDRkcxX01VWF9UQ0xLOworfQorCisvKioKKyAqIHRjZmdfdG9fZGl2aXNvcigpIC0gY29udmVydCB0Y2ZnMSBzZXR0aW5nIHRvIGEgZGl2aXNvcgorICogQHRjZmcxOiBUaGUgdGNmZzEgc2V0dGluZywgc2hpZnRlZCBkb3duLgorICoKKyAqIEdldCB0aGUgZGl2aXNvciB2YWx1ZSBmb3IgdGhlIGdpdmVuIHRjZmcxIHNldHRpbmcuIFdlIGFzc3VtZSB0aGUKKyAqIGNhbGxlciBoYXMgYWxyZWFkeSBjaGVja2VkIHRvIHNlZSBpZiB0aGlzIGlzIG5vdCBhIFRDTEsgc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGNmZ190b19kaXZpc29yKHVuc2lnbmVkIGxvbmcgdGNmZzEpCit7CisJcmV0dXJuIDEgPDwgdGNmZzE7Cit9CisKKy8qKgorICogcHdtX3RkaXZfaGFzX2RpdjEoKSAtIGRvZXMgdGhlIHRkaXYgc2V0dGluZyBoYXZlIGEgLzEKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIGEgLzEgaW4gdGhlIHRkaXYgc2V0dGluZy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcHdtX3RkaXZfaGFzX2RpdjEodm9pZCkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBwd21fdGRpdl9kaXZfYml0cygpIC0gY2FsY3VsYXRlIFRDRkcxIGRpdmlzb3IgdmFsdWUuCisgKiBAZGl2OiBUaGUgZGl2aXNvciB0byBjYWxjdWxhdGUgdGhlIGJpdCBpbmZvcm1hdGlvbiBmb3IuCisgKgorICogVHVybiBhIGRpdmlzb3IgaW50byB0aGUgbmVjZXNzYXJ5IGJpdCBmaWVsZCBmb3IgVENGRzEuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwd21fdGRpdl9kaXZfYml0cyh1bnNpZ25lZCBpbnQgZGl2KQoreworCXJldHVybiBpbG9nMihkaXYpOworfQorCisjZGVmaW5lIFMzQ19UQ0ZHMV9NVVhfVENMSyBTM0M2NFhYX1RDRkcxX01VWF9UQ0xLCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1BXTUNMS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTNhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDYyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjMxMCAtIENsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNkZWZpbmUgUzVQX0NMS1JFRyh4KQkJCShTM0NfVkFfU1lTICsgKHgpKQorCisjZGVmaW5lIFM1UF9JTkZPUk0wCQkJUzVQX0NMS1JFRygweDgwMCkKKworI2RlZmluZSBTNVBfRVBMTF9DT04wCQkJUzVQX0NMS1JFRygweDFDMTEwKQorI2RlZmluZSBTNVBfRVBMTF9DT04xCQkJUzVQX0NMS1JFRygweDFDMTE0KQorI2RlZmluZSBTNVBfVlBMTF9DT04wCQkJUzVQX0NMS1JFRygweDFDMTIwKQorI2RlZmluZSBTNVBfVlBMTF9DT04xCQkJUzVQX0NMS1JFRygweDFDMTI0KQorCisjZGVmaW5lIFM1UF9DTEtTUkNfVE9QMAkJCVM1UF9DTEtSRUcoMHgxQzIxMCkKKyNkZWZpbmUgUzVQX0NMS1NSQ19UT1AxCQkJUzVQX0NMS1JFRygweDFDMjE0KQorCisjZGVmaW5lIFM1UF9DTEtTUkNfUEVSSUwwCQlTNVBfQ0xLUkVHKDB4MUMyNTApCisKKyNkZWZpbmUgUzVQX0NMS0RJVl9UT1AJCQlTNVBfQ0xLUkVHKDB4MUM1MTApCisKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDAJCVM1UF9DTEtSRUcoMHgxQzU1MCkKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDEJCVM1UF9DTEtSRUcoMHgxQzU1NCkKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDIJCVM1UF9DTEtSRUcoMHgxQzU1OCkKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDMJCVM1UF9DTEtSRUcoMHgxQzU1QykKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDQJCVM1UF9DTEtSRUcoMHgxQzU2MCkKKyNkZWZpbmUgUzVQX0NMS0RJVl9QRVJJTDUJCVM1UF9DTEtSRUcoMHgxQzU2NCkKKworI2RlZmluZSBTNVBfQ0xLR0FURV9JUF9QRVJJTAkJUzVQX0NMS1JFRygweDFDOTUwKQorCisjZGVmaW5lIFM1UF9DTEtTUkNfQ09SRQkJCVM1UF9DTEtSRUcoMHgyMDIwMCkKKworI2RlZmluZSBTNVBfQ0xLRElWX0NPUkUwCQlTNVBfQ0xLUkVHKDB4MjA1MDApCisKKyNkZWZpbmUgUzVQX0FQTExfTE9DSwkJCVM1UF9DTEtSRUcoMHgyNDAwMCkKKyNkZWZpbmUgUzVQX01QTExfTE9DSwkJCVM1UF9DTEtSRUcoMHgyNDAwNCkKKyNkZWZpbmUgUzVQX0FQTExfQ09OMAkJCVM1UF9DTEtSRUcoMHgyNDEwMCkKKyNkZWZpbmUgUzVQX0FQTExfQ09OMQkJCVM1UF9DTEtSRUcoMHgyNDEwNCkKKyNkZWZpbmUgUzVQX01QTExfQ09OMAkJCVM1UF9DTEtSRUcoMHgyNDEwOCkKKyNkZWZpbmUgUzVQX01QTExfQ09OMQkJCVM1UF9DTEtSRUcoMHgyNDEwQykKKworI2RlZmluZSBTNVBfQ0xLU1JDX0NQVQkJCVM1UF9DTEtSRUcoMHgyNDIwMCkKKyNkZWZpbmUgUzVQX0NMS01VWF9TVEFUQ1BVCQlTNVBfQ0xLUkVHKDB4MjQ0MDApCisKKyNkZWZpbmUgUzVQX0NMS0RJVl9DUFUJCQlTNVBfQ0xLUkVHKDB4MjQ1MDApCisjZGVmaW5lIFM1UF9DTEtESVZfU1RBVENQVQkJUzVQX0NMS1JFRygweDI0NjAwKQorCisjZGVmaW5lIFM1UF9DTEtHQVRFX1NDTEtDUFUJCVM1UF9DTEtSRUcoMHgyNDgwMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlMDljNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDE5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYzMTAgLSBJUlEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lSUV9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZjNiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zbXAuaAorICoKKyAqIENsb25lZCBmcm9tIGFyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3NtcC5oCisqLworCisjaWZuZGVmIEFTTV9BUkNIX1NNUF9ICisjZGVmaW5lIEFTTV9BUkNIX1NNUF9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisKK2V4dGVybiB2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZV9hZGRyOworCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgY3B1bnVtOwkJCVwKKwkJX19hc21fXygibXJjIHAxNSwgMCwgJTAsIGMwLCBjMCwgNSIJXAorCQkJOiAiPXIiIChjcHVudW0pKTsJCVwKKwkJY3B1bnVtICY9IDB4MDM7CQkJCVwKKwl9KQorCisvKgorICogV2UgdXNlIElSUTEgYXMgdGhlIElQSQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX2Nyb3NzX2NhbGwoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJZ2ljX3JhaXNlX3NvZnRpcnEobWFzaywgMSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEwYzAwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyMiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjMxMCAtIHN5c3RlbSBzdXBwb3J0IGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9zeXN0ZW0tcmVzZXQuaD4KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDIzNTliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogUzVQVjMxMCAtIHRpbWUgcGFyYW1ldGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElNRVhfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJTUVYX0ggX19GSUxFX18KKworLyogQ0xPQ0tfVElDS19SQVRFIG5lZWRzIHRvIGJlIGV2YWx1YXRhYmxlIGJ5IHRoZSBjcHAsIHNvIG1ha2luZyBpdAorICogYSB2YXJpYWJsZSBpcyB1c2VsZXNzLiBJdCBzZWVtcyBhcyBsb25nIGFzIHdlIG1ha2Ugb3VyIHRpbWVycyBhbgorICogZXhhY3QgbXVsdGlwbGUgb2YgSFosIGFueSB2YWx1ZSB0aGF0IG1ha2VzIGEgMS0+MSBjb3JyZXNwb25kZW5jZQorICogZm9yIHRoZSB0aW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvL2Zyb20gamlmZmllcyBpcyBhY2NlcHRhYmxlLgorKi8KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgMTIwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU5M2MxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwzMCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYzMTAgLSB1bmNvbXByZXNzIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L3VuY29tcHJlc3MuaD4KKworc3RhdGljIHZvaWQgYXJjaF9kZXRlY3RfY3B1KHZvaWQpCit7CisJLyogd2UgZG8gbm90IG5lZWQgdG8gZG8gYW55IGNwdSBkZXRlY3Rpb24gaGVyZSBhdCB0aGUgbW9tZW50LiAqLworCisJLyoKKwkgKiBGb3IgcHJldmVudGluZyBGSUZPIG92ZXJydW4gb3IgaW5maW5pdGUgbG9vcCBvZiBVQVJUIGNvbnNvbGUsCisJICogZmlmb19tYXggc2hvdWxkIGJlIHRoZSBtaW5pbXVtIGZpZm8gc2l6ZSBvZiBhbGwgb2YgdGhlIFVBUlQgY2hhbm5lbHMKKwkgKi8KKwlmaWZvX21hc2sgPSBTNVBWMjEwX1VGU1RBVF9UWE1BU0s7CisJZmlmb19tYXggPSAxNSA8PCBTNVBWMjEwX1VGU1RBVF9UWFNISUZUOworfQorI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNTY1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTAgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTNVBWMzEwIHZtYWxsb2MgZGVmaW5pdGlvbgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSCBfX0ZJTEVfXworCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RjAwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luaXQuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbml0LmMKQEAgLTAsMCArMSw0MSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luaXQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyBzNXB2MzEwX3NlcmlhbF9jbG9ja3NbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9LAorfTsKKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwordm9pZCBfX2luaXQgczVwdjMxMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICp0Y2ZnID0gY2ZnOworCXUzMiB1Y250OworCisJZm9yICh1Y250ID0gMDsgdWNudCA8IG5vOyB1Y250KyssIHRjZmcrKykgeworCQlpZiAoIXRjZmctPmNsb2NrcykgeworCQkJdGNmZy0+aGFzX2ZyYWN2YWwgPSAxOworCQkJdGNmZy0+Y2xvY2tzID0gczVwdjMxMF9zZXJpYWxfY2xvY2tzOworCQkJdGNmZy0+Y2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHM1cHYzMTBfc2VyaWFsX2Nsb2Nrcyk7CisJCX0KKwl9CisKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInM1cHYyMTAtdWFydCIsIHM1cF91YXJ0X3Jlc291cmNlcywgY2ZnLCBubyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaXJxLWNvbWJpbmVyLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaXJxLWNvbWJpbmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY3MDUyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pcnEtY29tYmluZXIuYwpAQCAtMCwwICsxLDEyNSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2lycS1jb21iaW5lci5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL2NvbW1vbi9naWMuYworICoKKyAqIElSUSBDT01CSU5FUiBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNkZWZpbmUgQ09NQklORVJfRU5BQkxFX1NFVAkweDAKKyNkZWZpbmUgQ09NQklORVJfRU5BQkxFX0NMRUFSCTB4NAorI2RlZmluZSBDT01CSU5FUl9JTlRfU1RBVFVTCTB4QworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlycV9jb250cm9sbGVyX2xvY2spOworCitzdHJ1Y3QgY29tYmluZXJfY2hpcF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgaXJxX29mZnNldDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7Cit9OworCitzdGF0aWMgc3RydWN0IGNvbWJpbmVyX2NoaXBfZGF0YSBjb21iaW5lcl9kYXRhW01BWF9DT01CSU5FUl9OUl07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpjb21iaW5lcl9iYXNlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGNvbWJpbmVyX2NoaXBfZGF0YSAqY29tYmluZXJfZGF0YSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcmV0dXJuIGNvbWJpbmVyX2RhdGEtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVyX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2sgPSAxIDw8IChpcnEgJSAzMik7CisKKwlfX3Jhd193cml0ZWwobWFzaywgY29tYmluZXJfYmFzZShpcnEpICsgQ09NQklORVJfRU5BQkxFX0NMRUFSKTsKK30KKworc3RhdGljIHZvaWQgY29tYmluZXJfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBtYXNrID0gMSA8PCAoaXJxICUgMzIpOworCisJX19yYXdfd3JpdGVsKG1hc2ssIGNvbWJpbmVyX2Jhc2UoaXJxKSArIENPTUJJTkVSX0VOQUJMRV9TRVQpOworfQorCitzdGF0aWMgdm9pZCBjb21iaW5lcl9oYW5kbGVfY2FzY2FkZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBjb21iaW5lcl9jaGlwX2RhdGEgKmNoaXBfZGF0YSA9IGdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcChpcnEpOworCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSwgY29tYmluZXJfaXJxOworCXVuc2lnbmVkIGxvbmcgc3RhdHVzOworCisJLyogcHJpbWFyeSBjb250cm9sbGVyIGFjaydpbmcgKi8KKwljaGlwLT5hY2soaXJxKTsKKworCXNwaW5fbG9jaygmaXJxX2NvbnRyb2xsZXJfbG9jayk7CisJc3RhdHVzID0gX19yYXdfcmVhZGwoY2hpcF9kYXRhLT5iYXNlICsgQ09NQklORVJfSU5UX1NUQVRVUyk7CisJc3Bpbl91bmxvY2soJmlycV9jb250cm9sbGVyX2xvY2spOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQlnb3RvIG91dDsKKworCWZvciAoY29tYmluZXJfaXJxID0gMDsgY29tYmluZXJfaXJxIDwgMzI7IGNvbWJpbmVyX2lycSsrKSB7CisJCWlmIChzdGF0dXMgJiAweDEpCisJCQlicmVhazsKKwkJc3RhdHVzID4+PSAxOworCX0KKworCWNhc2NhZGVfaXJxID0gY29tYmluZXJfaXJxICsgKGNoaXBfZGF0YS0+aXJxX29mZnNldCAmIH4zMSk7CisJaWYgKHVubGlrZWx5KGNhc2NhZGVfaXJxID49IE5SX0lSUVMpKQorCQlkb19iYWRfSVJRKGNhc2NhZGVfaXJxLCBkZXNjKTsKKwllbHNlCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisKKyBvdXQ6CisJLyogcHJpbWFyeSBjb250cm9sbGVyIHVubWFza2luZyAqLworCWNoaXAtPnVubWFzayhpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNvbWJpbmVyX2NoaXAgPSB7CisJLm5hbWUJCT0gIkNPTUJJTkVSIiwKKwkubWFzawkJPSBjb21iaW5lcl9tYXNrX2lycSwKKwkudW5tYXNrCQk9IGNvbWJpbmVyX3VubWFza19pcnEsCit9OworCit2b2lkIF9faW5pdCBjb21iaW5lcl9jYXNjYWRlX2lycSh1bnNpZ25lZCBpbnQgY29tYmluZXJfbnIsIHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKGNvbWJpbmVyX25yID49IE1BWF9DT01CSU5FUl9OUikKKwkJQlVHKCk7CisJaWYgKHNldF9pcnFfZGF0YShpcnEsICZjb21iaW5lcl9kYXRhW2NvbWJpbmVyX25yXSkgIT0gMCkKKwkJQlVHKCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoaXJxLCBjb21iaW5lcl9oYW5kbGVfY2FzY2FkZV9pcnEpOworfQorCit2b2lkIF9faW5pdCBjb21iaW5lcl9pbml0KHVuc2lnbmVkIGludCBjb21iaW5lcl9uciwgdm9pZCBfX2lvbWVtICpiYXNlLAorCQkJICB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0KQoreworCXVuc2lnbmVkIGludCBpOworCisJaWYgKGNvbWJpbmVyX25yID49IE1BWF9DT01CSU5FUl9OUikKKwkJQlVHKCk7CisKKwljb21iaW5lcl9kYXRhW2NvbWJpbmVyX25yXS5iYXNlID0gYmFzZTsKKwljb21iaW5lcl9kYXRhW2NvbWJpbmVyX25yXS5pcnFfb2Zmc2V0ID0gaXJxX3N0YXJ0OworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBDT01CSU5FUl9FTkFCTEVfQ0xFQVIpOworCisJLyogU2V0dXAgdGhlIExpbnV4IElSUSBzdWJzeXN0ZW0gKi8KKworCWZvciAoaSA9IGlycV9zdGFydDsgaSA8IGNvbWJpbmVyX2RhdGFbY29tYmluZXJfbnJdLmlycV9vZmZzZXQKKwkJCQkrIE1BWF9JUlFfSU5fQ09NQklORVI7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJmNvbWJpbmVyX2NoaXApOworCQlzZXRfaXJxX2NoaXBfZGF0YShpLCAmY29tYmluZXJfZGF0YVtjb21iaW5lcl9ucl0pOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9sb2NhbHRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbG9jYWx0aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODQwMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbG9jYWx0aW1lci5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9sb2NhbHRpbWVyLmMKKyAqCisgKiBDbG9uZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2xvY2FsdGltZXIuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgQVJNIEx0ZC4KKyAqICBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKworLyoKKyAqIFNldHVwIHRoZSBsb2NhbCBjbG9jayBldmVudHMgZm9yIGEgQ1BVLgorICovCit2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJZXZ0LT5pcnEgPSBJUlFfTE9DQUxUSU1FUjsKKwl0d2RfdGltZXJfc2V0dXAoZXZ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXNtZGt2MzEwLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbWFjaC1zbWRrdjMxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNmFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvbWFjaC1zbWRrdjMxMC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXNtZGt2MzEwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MzEwLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKy8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLworI2RlZmluZSBTTURLVjMxMF9VQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSUxFVkVMIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwJXAorCQkJCSBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSB8CVwKKwkJCQkgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQorCisjZGVmaW5lIFNNREtWMzEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorCisjZGVmaW5lIFNNREtWMzEwX1VGQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisJCQkJIFM1UFYyMTBfVUZDT05fVFhUUklHNCB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9SWFRSSUc0KQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrdjMxMF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuaHdwb3J0CQk9IDAsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBTTURLVjMxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTTURLVjMxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gU01ES1YzMTBfVUZDT05fREVGQVVMVCwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkJPSAxLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gU01ES1YzMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gU01ES1YzMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFNNREtWMzEwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJCT0gMiwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFNNREtWMzEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFNNREtWMzEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTTURLVjMxMF9VRkNPTl9ERUZBVUxULAorCX0sCisJWzNdID0geworCQkuaHdwb3J0CQk9IDMsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBTTURLVjMxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTTURLVjMxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gU01ES1YzMTBfVUZDT05fREVGQVVMVCwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNtZGt2MzEwX21hcF9pbyh2b2lkKQoreworCXM1cF9pbml0X2lvKE5VTEwsIDAsIFM1UF9WQV9DSElQSUQpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMjQwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrdjMxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrdjMxMF91YXJ0Y2ZncykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc21ka3YzMTBfbWFjaGluZV9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKKwlsMngwX2luaXQoUzVQX1ZBX0wyQ0MsIDEgPDwgMjgsIDB4ZmZmZmZmZmYpOworI2VuZGlmCit9CisKK01BQ0hJTkVfU1RBUlQoU01ES1YzMTAsICJTTURLVjMxMCIpCisJLyogTWFpbnRhaW5lcjogS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPiAqLworCS8qIE1haW50YWluZXI6IENoYW5naHdhbiBZb3VuIDxjaGFvcy55b3VuQHNhbXN1bmcuY29tPiAqLworCS5waHlzX2lvCT0gUzNDX1BBX1VBUlQgJiAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0NfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFM1UF9QQV9TRFJBTSArIDB4MTAwLAorCS5pbml0X2lycQk9IHM1cHYzMTBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBzbWRrdjMxMF9tYXBfaW8sCisJLmluaXRfbWFjaGluZQk9IHNtZGt2MzEwX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnM1cHYzMTBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtdW5pdmVyc2FsX2MyMTAuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXVuaXZlcnNhbF9jMjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM4OGNiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9tYWNoLXVuaXZlcnNhbF9jMjEwLmMKQEAgLTAsMCArMSw4NiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL21hY2gtdW5pdmVyc2FsX2MyMTAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MzEwLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKy8qIEZvbGxvd2luZyBhcmUgZGVmYXVsdCB2YWx1ZXMgZm9yIFVDT04sIFVMQ09OIGFuZCBVRkNPTiBVQVJUIHJlZ2lzdGVycyAqLworI2RlZmluZSBVTklWRVJTQUxfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKKworI2RlZmluZSBVTklWRVJTQUxfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CisKKyNkZWZpbmUgVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQJKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisJCQkJIFM1UFYyMTBfVUZDT05fVFhUUklHMjU2IHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzI1NikKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgdW5pdmVyc2FsX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJCT0gMSwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJCT0gMiwKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJCT0gMywKKwkJLnVjb24JCT0gVU5JVkVSU0FMX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFVOSVZFUlNBTF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gVU5JVkVSU0FMX1VGQ09OX0RFRkFVTFQsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1bml2ZXJzYWxfbWFwX2lvKHZvaWQpCit7CisJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHVuaXZlcnNhbF91YXJ0Y2ZncywgQVJSQVlfU0laRSh1bml2ZXJzYWxfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHVuaXZlcnNhbF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAorCWwyeDBfaW5pdChTNVBfVkFfTDJDQywgMSA8PCAyOCwgMHhmZmZmZmZmZik7CisjZW5kaWYKK30KKworTUFDSElORV9TVEFSVChVTklWRVJTQUxfQzIxMCwgIlVOSVZFUlNBTF9DMjEwIikKKwkvKiBNYWludGFpbmVyOiBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPiAqLworCS5waHlzX2lvCT0gUzNDX1BBX1VBUlQgJiAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0NfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFM1UF9QQV9TRFJBTSArIDB4MTAwLAorCS5pbml0X2lycQk9IHM1cHYzMTBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSB1bml2ZXJzYWxfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSB1bml2ZXJzYWxfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczVwdjMxMF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTk0NjlhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYwpAQCAtMCwwICsxLDE5MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3BsYXRzbXAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQ2xvbmVkIGZyb20gbGludXgvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy9wbGF0c21wLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgorI2luY2x1ZGUgPGFzbS91bmlmaWVkLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKK2V4dGVybiB2b2lkIHM1cHYzMTBfc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7CisKKy8qCisgKiBjb250cm9sIGZvciB3aGljaCBjb3JlIGlzIHRoZSBuZXh0IHRvIGNvbWUgb3V0IG9mIHRoZSBzZWNvbmRhcnkKKyAqIGJvb3QgImhvbGRpbmcgcGVuIgorICovCisKK3ZvbGF0aWxlIGludCBfX2NwdWluaXRkYXRhIHBlbl9yZWxlYXNlID0gLTE7CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNjdV9iYXNlX2FkZHIodm9pZCkKK3sKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShTNVBfVkFfU0NVKTsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhib290X2xvY2spOworCit2b2lkIF9fY3B1aW5pdCBwbGF0Zm9ybV9zZWNvbmRhcnlfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXRyYWNlX2hhcmRpcnFzX29mZigpOworCisJLyoKKwkgKiBpZiBhbnkgaW50ZXJydXB0cyBhcmUgYWxyZWFkeSBlbmFibGVkIGZvciB0aGUgcHJpbWFyeQorCSAqIGNvcmUgKGUuZy4gdGltZXIgaXJxKSwgdGhlbiB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBlbmFibGVkCisJICogZm9yIHVzOiBkbyBzbworCSAqLworCWdpY19jcHVfaW5pdCgwLCBnaWNfY3B1X2Jhc2VfYWRkcik7CisKKwkvKgorCSAqIGxldCB0aGUgcHJpbWFyeSBwcm9jZXNzb3Iga25vdyB3ZSdyZSBvdXQgb2YgdGhlCisJICogcGVuLCB0aGVuIGhlYWQgb2ZmIGludG8gdGhlIEMgZW50cnkgcG9pbnQKKwkgKi8KKwlwZW5fcmVsZWFzZSA9IC0xOworCXNtcF93bWIoKTsKKworCS8qCisJICogU3luY2hyb25pc2Ugd2l0aCB0aGUgYm9vdCB0aHJlYWQuCisJICovCisJc3Bpbl9sb2NrKCZib290X2xvY2spOworCXNwaW5fdW5sb2NrKCZib290X2xvY2spOworfQorCitpbnQgX19jcHVpbml0IGJvb3Rfc2Vjb25kYXJ5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwkvKgorCSAqIFNldCBzeW5jaHJvbmlzYXRpb24gc3RhdGUgYmV0d2VlbiB0aGlzIGJvb3QgcHJvY2Vzc29yCisJICogYW5kIHRoZSBzZWNvbmRhcnkgb25lCisJICovCisJc3Bpbl9sb2NrKCZib290X2xvY2spOworCisJLyoKKwkgKiBUaGUgc2Vjb25kYXJ5IHByb2Nlc3NvciBpcyB3YWl0aW5nIHRvIGJlIHJlbGVhc2VkIGZyb20KKwkgKiB0aGUgaG9sZGluZyBwZW4gLSByZWxlYXNlIGl0LCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZsYWcKKwkgKiB0aGF0IGl0IGhhcyBiZWVuIHJlbGVhc2VkIGJ5IHJlc2V0dGluZyBwZW5fcmVsZWFzZS4KKwkgKgorCSAqIE5vdGUgdGhhdCAicGVuX3JlbGVhc2UiIGlzIHRoZSBoYXJkd2FyZSBDUFUgSUQsIHdoZXJlYXMKKwkgKiAiY3B1IiBpcyBMaW51eCdzIGludGVybmFsIElELgorCSAqLworCXBlbl9yZWxlYXNlID0gY3B1OworCV9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYSgodm9pZCAqKSZwZW5fcmVsZWFzZSwgc2l6ZW9mKHBlbl9yZWxlYXNlKSk7CisJb3V0ZXJfY2xlYW5fcmFuZ2UoX19wYSgmcGVuX3JlbGVhc2UpLCBfX3BhKCZwZW5fcmVsZWFzZSArIDEpKTsKKworCS8qCisJICogU2VuZCB0aGUgc2Vjb25kYXJ5IENQVSBhIHNvZnQgaW50ZXJydXB0LCB0aGVyZWJ5IGNhdXNpbmcKKwkgKiB0aGUgYm9vdCBtb25pdG9yIHRvIHJlYWQgdGhlIHN5c3RlbSB3aWRlIGZsYWdzIHJlZ2lzdGVyLAorCSAqIGFuZCBicmFuY2ggdG8gdGhlIGFkZHJlc3MgZm91bmQgdGhlcmUuCisJICovCisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgKDEgKiBIWik7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCXNtcF9ybWIoKTsKKwkJaWYgKHBlbl9yZWxlYXNlID09IC0xKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKgorCSAqIG5vdyB0aGUgc2Vjb25kYXJ5IGNvcmUgaXMgc3RhcnRpbmcgdXAgbGV0IGl0IHJ1biBpdHMKKwkgKiBjYWxpYnJhdGlvbnMsIHRoZW4gd2FpdCBmb3IgaXQgdG8gZmluaXNoCisJICovCisJc3Bpbl91bmxvY2soJmJvb3RfbG9jayk7CisKKwlyZXR1cm4gcGVuX3JlbGVhc2UgIT0gLTEgPyAtRU5PU1lTIDogMDsKK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIENQVSBwb3NzaWJsZSBtYXAgZWFybHkgLSB0aGlzIGRlc2NyaWJlcyB0aGUgQ1BVcworICogd2hpY2ggbWF5IGJlIHByZXNlbnQgb3IgYmVjb21lIHByZXNlbnQgaW4gdGhlIHN5c3RlbS4KKyAqLworCit2b2lkIF9faW5pdCBzbXBfaW5pdF9jcHVzKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpzY3VfYmFzZSA9IHNjdV9iYXNlX2FkZHIoKTsKKwl1bnNpZ25lZCBpbnQgaSwgbmNvcmVzOworCisJbmNvcmVzID0gc2N1X2Jhc2UgPyBzY3VfZ2V0X2NvcmVfY291bnQoc2N1X2Jhc2UpIDogMTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChuY29yZXMgPT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJTNVBWMzEwOiBzdHJhbmdlIENNIGNvdW50IG9mIDA/IERlZmF1bHQgdG8gMVxuIik7CisKKwkJbmNvcmVzID0gMTsKKwl9CisKKwlpZiAobmNvcmVzID4gTlJfQ1BVUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiUzVQVjMxMDogbm8uIG9mIGNvcmVzICglZCkgZ3JlYXRlciB0aGFuIGNvbmZpZ3VyZWQgIgorCQkgICAgICAgIm1heGltdW0gb2YgJWQgLSBjbGlwcGluZ1xuIiwKKwkJICAgICAgIG5jb3JlcywgTlJfQ1BVUyk7CisJCW5jb3JlcyA9IE5SX0NQVVM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5jb3JlczsgaSsrKQorCQlzZXRfY3B1X3Bvc3NpYmxlKGksIHRydWUpOworfQorCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwl1bnNpZ25lZCBpbnQgbmNvcmVzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWludCBpOworCisJc21wX3N0b3JlX2NwdV9pbmZvKGNwdSk7CisKKwkvKiBhcmUgd2UgdHJ5aW5nIHRvIGJvb3QgbW9yZSBjb3JlcyB0aGFuIGV4aXN0PyAqLworCWlmIChtYXhfY3B1cyA+IG5jb3JlcykKKwkJbWF4X2NwdXMgPSBuY29yZXM7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCisJICogYWN0dWFsbHkgcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCisJCXNldF9jcHVfcHJlc2VudChpLCB0cnVlKTsKKworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgU0NVIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIENQVSBhbmQgbGV0CisJICogdGhlbSBrbm93IHdoZXJlIHRvIHN0YXJ0LgorCSAqLworCWlmIChtYXhfY3B1cyA+IDEpIHsKKwkJLyoKKwkJICogRW5hYmxlIHRoZSBsb2NhbCB0aW1lciBvciBicm9hZGNhc3QgZGV2aWNlIGZvciB0aGUKKwkJICogYm9vdCBDUFUsIGJ1dCBvbmx5IGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBDUFUuCisJCSAqLworCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKKworCQlzY3VfZW5hYmxlKHNjdV9iYXNlX2FkZHIoKSk7CisKKwkJLyoKKwkJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUKKwkJICogc3lzdGVtLXdpZGUgZmxhZ3MgcmVnaXN0ZXIuIFRoZSBib290IG1vbml0b3Igd2FpdHMKKwkJICogdW50aWwgaXQgcmVjZWl2ZXMgYSBzb2Z0IGludGVycnVwdCwgYW5kIHRoZW4gdGhlCisJCSAqIHNlY29uZGFyeSBDUFUgYnJhbmNoZXMgdG8gdGhpcyBhZGRyZXNzLgorCQkgKi8KKwlfX3Jhd193cml0ZWwoQlNZTSh2aXJ0X3RvX3BoeXMoczVwdjMxMF9zZWNvbmRhcnlfc3RhcnR1cCkpLCBTNVBfSU5GT1JNMCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzAuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2NzEyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMwLmMKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogSTJDMCBHUElPIGNvbmZpZ3VyYXRpb24uCisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjMxMF9HUEQxKDApLCBTM0NfR1BJT19TRk4oMikpOworCXMzY19ncGlvX3NldHB1bGwoUzVQVjMxMF9HUEQxKDApLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjMxMF9HUEQxKDEpLCBTM0NfR1BJT19TRk4oMikpOworCXMzY19ncGlvX3NldHB1bGwoUzVQVjMxMF9HUEQxKDEpLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMxLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlY2Q1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvc2V0dXAtaTJjMS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogSTJDMSBHUElPIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisKK3ZvaWQgczNjX2kyYzFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTNVBWMzEwX0dQRDEoMiksIFMzQ19HUElPX1NGTigyKSk7CisJczNjX2dwaW9fc2V0cHVsbChTNVBWMzEwX0dQRDEoMiksIFMzQ19HUElPX1BVTExfVVApOworCXMzY19ncGlvX2NmZ3BpbihTNVBWMzEwX0dQRDEoMyksIFMzQ19HUElPX1NGTigyKSk7CisJczNjX2dwaW9fc2V0cHVsbChTNVBWMzEwX0dQRDEoMyksIFMzQ19HUElPX1BVTExfVVApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL3NldHVwLWkyYzIuYyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwZDhkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMyLmMKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9zZXR1cC1pMmMyLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIEkyQzIgR1BJTyBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorCit2b2lkIHMzY19pMmMyX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjMxMF9HUEEwKDYpLCBTM0NfR1BJT19TRk4oMykpOworCXMzY19ncGlvX3NldHB1bGwoUzVQVjMxMF9HUEEwKDYpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzVQVjMxMF9HUEEwKDcpLCBTM0NfR1BJT19TRk4oMykpOworCXMzY19ncGlvX3NldHB1bGwoUzVQVjMxMF9HUEEwKDcpLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjAxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCkBAIC0wLDAgKzEsMjg3IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYzMTAvdGltZS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIFM1UFYzMTAgKGFuZCBjb21wYXRpYmxlKSBIUlQgc3VwcG9ydAorICogUFdNIDIvNCBpcyB1c2VkIGZvciB0aGlzIGZlYXR1cmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3NtcF90d2QuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbG9ja19jb3VudF9wZXJfdGljazsKKworc3RhdGljIHN0cnVjdCBjbGsgKnRpbjI7CitzdGF0aWMgc3RydWN0IGNsayAqdGluNDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0ZGl2MjsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0ZGl2NDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp0aW1lcmNsazsKKworc3RhdGljIHZvaWQgczVwdjMxMF9wd21fc3RvcCh1bnNpZ25lZCBpbnQgcHdtX2lkKQoreworCXVuc2lnbmVkIGxvbmcgdGNvbjsKKworCXRjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOworCisJc3dpdGNoIChwd21faWQpIHsKKwljYXNlIDI6CisJCXRjb24gJj0gflMzQzI0MTBfVENPTl9UMlNUQVJUOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRjb24gJj0gflMzQzI0MTBfVENPTl9UNFNUQVJUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Cit9CisKK3N0YXRpYyB2b2lkIHM1cHYzMTBfcHdtX2luaXQodW5zaWduZWQgaW50IHB3bV9pZCwgdW5zaWduZWQgbG9uZyB0Y250KQoreworCXVuc2lnbmVkIGxvbmcgdGNvbjsKKworCXRjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOworCisJLyogdGltZXJzIHJlbG9hZCBhZnRlciBjb3VudGluZyB6ZXJvLCBzbyByZWR1Y2UgdGhlIGNvdW50IGJ5IDEgKi8KKwl0Y250LS07CisKKwkvKiBlbnN1cmUgdGltZXIgaXMgc3RvcHBlZC4uLiAqLworCXN3aXRjaCAocHdtX2lkKSB7CisJY2FzZSAyOgorCQl0Y29uICY9IH4oMHhmPDwxMik7CisJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1QyTUFOVUFMVVBEOworCisJCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTlRCKDIpKTsKKwkJX19yYXdfd3JpdGVsKHRjbnQsIFMzQzI0MTBfVENNUEIoMikpOworCQlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKKworCQlicmVhazsKKwljYXNlIDQ6CisJCXRjb24gJj0gfig3PDwyMCk7CisJCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0TUFOVUFMVVBEOworCisJCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTlRCKDQpKTsKKwkJX19yYXdfd3JpdGVsKHRjbnQsIFMzQzI0MTBfVENNUEIoNCkpOworCQlfX3Jhd193cml0ZWwodGNvbiwgUzNDMjQxMF9UQ09OKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MzEwX3B3bV9zdGFydCh1bnNpZ25lZCBpbnQgcHdtX2lkLCBib29sIHBlcmlvZGljKQoreworCXVuc2lnbmVkIGxvbmcgdGNvbjsKKworCXRjb24gID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKKworCXN3aXRjaCAocHdtX2lkKSB7CisJY2FzZSAyOgorCQl0Y29uIHw9IFMzQzI0MTBfVENPTl9UMlNUQVJUOworCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDJNQU5VQUxVUEQ7CisKKwkJaWYgKHBlcmlvZGljKQorCQkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDJSRUxPQUQ7CisJCWVsc2UKKwkJCXRjb24gJj0gflMzQzI0MTBfVENPTl9UMlJFTE9BRDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl0Y29uIHw9IFMzQzI0MTBfVENPTl9UNFNUQVJUOworCQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDRNQU5VQUxVUEQ7CisKKwkJaWYgKHBlcmlvZGljKQorCQkJdGNvbiB8PSBTM0MyNDEwX1RDT05fVDRSRUxPQUQ7CisJCWVsc2UKKwkJCXRjb24gJj0gflMzQzI0MTBfVENPTl9UNFJFTE9BRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworfQorCitzdGF0aWMgaW50IHM1cHYzMTBfcHdtX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgY3ljbGVzLAorCQkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJczVwdjMxMF9wd21faW5pdCgyLCBjeWNsZXMpOworCXM1cHYzMTBfcHdtX3N0YXJ0KDIsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzNXB2MzEwX3B3bV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJczVwdjMxMF9wd21fc3RvcCgyKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCXM1cHYzMTBfcHdtX2luaXQoMiwgY2xvY2tfY291bnRfcGVyX3RpY2spOworCQlzNXB2MzEwX3B3bV9zdGFydCgyLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHB3bV9ldmVudF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB3bV90aW1lcjIiLAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkucmF0aW5nCQk9IDIwMCwKKwkuc2hpZnQJCT0gMzIsCisJLnNldF9uZXh0X2V2ZW50CT0gczVwdjMxMF9wd21fc2V0X25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gczVwdjMxMF9wd21fc2V0X21vZGUsCit9OworCitpcnFyZXR1cm5fdCBzNXB2MzEwX2Nsb2NrX2V2ZW50X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJnB3bV9ldmVudF9kZXZpY2U7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gczVwdjMxMF9jbG9ja19ldmVudF9pcnEgPSB7CisJLm5hbWUJCT0gInB3bV90aW1lcjJfaXJxIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmhhbmRsZXIJPSBzNXB2MzEwX2Nsb2NrX2V2ZW50X2lzciwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzNXB2MzEwX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcGNsazsKKwl1bnNpZ25lZCBsb25nIGNsb2NrX3JhdGU7CisJc3RydWN0IGNsayAqdHNjYWxlcjsKKworCXBjbGsgPSBjbGtfZ2V0X3JhdGUodGltZXJjbGspOworCisJLyogY29uZmlndXJlIGNsb2NrIHRpY2sgKi8KKworCXRzY2FsZXIgPSBjbGtfZ2V0X3BhcmVudCh0ZGl2Mik7CisKKwljbGtfc2V0X3JhdGUodHNjYWxlciwgcGNsayAvIDIpOworCWNsa19zZXRfcmF0ZSh0ZGl2MiwgcGNsayAvIDIpOworCWNsa19zZXRfcGFyZW50KHRpbjIsIHRkaXYyKTsKKworCWNsb2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUodGluMik7CisKKwljbG9ja19jb3VudF9wZXJfdGljayA9IGNsb2NrX3JhdGUgLyBIWjsKKworCXB3bV9ldmVudF9kZXZpY2UubXVsdCA9CisJCWRpdl9zYyhjbG9ja19yYXRlLCBOU0VDX1BFUl9TRUMsIHB3bV9ldmVudF9kZXZpY2Uuc2hpZnQpOworCXB3bV9ldmVudF9kZXZpY2UubWF4X2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygtMSwgJnB3bV9ldmVudF9kZXZpY2UpOworCXB3bV9ldmVudF9kZXZpY2UubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygxLCAmcHdtX2V2ZW50X2RldmljZSk7CisKKwlwd21fZXZlbnRfZGV2aWNlLmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcHdtX2V2ZW50X2RldmljZSk7CisKKwlzZXR1cF9pcnEoSVJRX1RJTUVSMiwgJnM1cHYzMTBfY2xvY2tfZXZlbnRfaXJxKTsKK30KKworc3RhdGljIGN5Y2xlX3QgczVwdjMxMF9wd200X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlyZXR1cm4gKGN5Y2xlX3QpIH5fX3Jhd19yZWFkbChTM0NfVElNRVJSRUcoMHg0MCkpOworfQorCitzdHJ1Y3QgY2xvY2tzb3VyY2UgcHdtX2Nsb2Nrc291cmNlID0geworCS5uYW1lCQk9ICJwd21fdGltZXI0IiwKKwkucmF0aW5nCQk9IDI1MCwKKwkucmVhZAkJPSBzNXB2MzEwX3B3bTRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQJCT0gMjAsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTICwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzNXB2MzEwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjbG9ja19yYXRlOworCisJcGNsayA9IGNsa19nZXRfcmF0ZSh0aW1lcmNsayk7CisKKwljbGtfc2V0X3JhdGUodGRpdjQsIHBjbGsgLyAyKTsKKwljbGtfc2V0X3BhcmVudCh0aW40LCB0ZGl2NCk7CisKKwljbG9ja19yYXRlID0gY2xrX2dldF9yYXRlKHRpbjQpOworCisJczVwdjMxMF9wd21faW5pdCg0LCB+MCk7CisJczVwdjMxMF9wd21fc3RhcnQoNCwgMSk7CisKKwlwd21fY2xvY2tzb3VyY2UubXVsdCA9CisJCWNsb2Nrc291cmNlX2toejJtdWx0KGNsb2NrX3JhdGUvMTAwMCwgcHdtX2Nsb2Nrc291cmNlLnNoaWZ0KTsKKworCWlmIChjbG9ja3NvdXJjZV9yZWdpc3RlcigmcHdtX2Nsb2Nrc291cmNlKSkKKwkJcGFuaWMoIiVzOiBjYW4ndCByZWdpc3RlciBjbG9ja3NvdXJjZVxuIiwgcHdtX2Nsb2Nrc291cmNlLm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczVwdjMxMF90aW1lcl9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtcGRldjsKKworCXRtcGRldi5kZXYuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOworCisJdGltZXJjbGsgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lcnMiKTsKKwlpZiAoSVNfRVJSKHRpbWVyY2xrKSkKKwkJcGFuaWMoImZhaWxlZCB0byBnZXQgdGltZXJzIGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKKworCWNsa19lbmFibGUodGltZXJjbGspOworCisJdG1wZGV2LmlkID0gMjsKKwl0aW4yID0gY2xrX2dldCgmdG1wZGV2LmRldiwgInB3bS10aW4iKTsKKwlpZiAoSVNfRVJSKHRpbjIpKQorCQlwYW5pYygiZmFpbGVkIHRvIGdldCBwd20tdGluMiBjbG9jayBmb3Igc3lzdGVtIHRpbWVyIik7CisKKwl0ZGl2MiA9IGNsa19nZXQoJnRtcGRldi5kZXYsICJwd20tdGRpdiIpOworCWlmIChJU19FUlIodGRpdjIpKQorCQlwYW5pYygiZmFpbGVkIHRvIGdldCBwd20tdGRpdjIgY2xvY2sgZm9yIHN5c3RlbSB0aW1lciIpOworCWNsa19lbmFibGUodGluMik7CisKKwl0bXBkZXYuaWQgPSA0OworCXRpbjQgPSBjbGtfZ2V0KCZ0bXBkZXYuZGV2LCAicHdtLXRpbiIpOworCWlmIChJU19FUlIodGluNCkpCisJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10aW40IGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKKworCXRkaXY0ID0gY2xrX2dldCgmdG1wZGV2LmRldiwgInB3bS10ZGl2Iik7CisJaWYgKElTX0VSUih0ZGl2NCkpCisJCXBhbmljKCJmYWlsZWQgdG8gZ2V0IHB3bS10ZGl2NCBjbG9jayBmb3Igc3lzdGVtIHRpbWVyIik7CisKKwljbGtfZW5hYmxlKHRpbjQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczVwdjMxMF90aW1lcl9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0xPQ0FMX1RJTUVSUworCXR3ZF9iYXNlID0gUzVQX1ZBX1RXRDsKKyNlbmRpZgorCisJczVwdjMxMF90aW1lcl9yZXNvdXJjZXMoKTsKKwlzNXB2MzEwX2Nsb2NrZXZlbnRfaW5pdCgpOworCXM1cHYzMTBfY2xvY2tzb3VyY2VfaW5pdCgpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHM1cHYzMTBfdGltZXIgPSB7CisJLmluaXQJCT0gczVwdjMxMF90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDhjODg0NWIuLmQxOGYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNzcsNyArNzcsNyBAQAogICovCiAjaWZkZWYgQ09ORklHX1NBMTExMQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9FTkQgKyA1NSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NIQVJQU0xfTE9DT01PKQorI2VsaWYgZGVmaW5lZChDT05GSUdfU0hBUlBfTE9DT01PKQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9TVEFSVCArIDQpCiAjZWxzZQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9TVEFSVCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwppbmRleCA0YzcwNGI0Li41NGI0NzljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBTSF9DTEtfQ1BHCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAogY29uZmlnIEFSQ0hfU0g3Mzc3CkBAIC0xNCw2ICsxNSw3IEBACiAJc2VsZWN0IENQVV9WNwogCXNlbGVjdCBIQVZFX0NMSwogCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IFNIX0NMS19DUEcKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCiBjb25maWcgQVJDSF9TSDczNzIKQEAgLTIxLDYgKzIzLDcgQEAKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgU0hfQ0xLX0NQRwogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKIGNvbW1lbnQgIlNILU1vYmlsZSBCb2FyZCBUeXBlIgpAQCAtMzksNiArNDIsMjAgQEAKIAlib29sICJBUDRFVkIgYm9hcmQiCiAJZGVwZW5kcyBvbiBBUkNIX1NINzM3MgogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTSF9MQ0RfTUlQSV9EU0kKKworY2hvaWNlCisJcHJvbXB0ICJBUDRFVkIgTENEIHBhbmVsIHNlbGVjdGlvbiIKKwlkZWZhdWx0IEFQNEVWQl9RSEQKKwlkZXBlbmRzIG9uIE1BQ0hfQVA0RVZCCisKK2NvbmZpZyBBUDRFVkJfUUhECisJYm9vbCAiTUlQSS1EU0kgUUhEICg5NjB4NTQwKSIKKworY29uZmlnIEFQNEVWQl9XVkdBCisJYm9vbCAiUGFyYWxsZWwgV1ZHQSAoODAweDQ4MCkiCisKK2VuZGNob2ljZQogCiBjb21tZW50ICJTSC1Nb2JpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24iCiAKQEAgLTg4LDYgKzEwNSwxNSBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBidWlsZCBvZiB0aGUgQ01UIHRpbWVyIGRyaXZlci4KIAorY29uZmlnIFNIX1RJTUVSX1RNVQorCWJvb2wgIlRNVSB0aW1lciBkcml2ZXIiCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBlbmFibGVzIGJ1aWxkIG9mIHRoZSBUTVUgdGltZXIgZHJpdmVyLgorCiBlbmRtZW51CiAKK2NvbmZpZyBTSF9DTEtfQ1BHCisJYm9vbAorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKaW5kZXggNmQzODVkMy4uNWUxNmI0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL01ha2VmaWxlCkBAIC0zLDEyICszLDEyIEBACiAjCiAKICMgQ29tbW9uIG9iamVjdHMKLW9iai15CQkJCTo9IHRpbWVyLm8gY29uc29sZS5vCitvYmoteQkJCQk6PSB0aW1lci5vIGNvbnNvbGUubyBjbG9jay5vCiAKICMgQ1BVIG9iamVjdHMKIG9iai0kKENPTkZJR19BUkNIX1NINzM2NykJKz0gc2V0dXAtc2g3MzY3Lm8gY2xvY2stc2g3MzY3Lm8gaW50Yy1zaDczNjcubwotb2JqLSQoQ09ORklHX0FSQ0hfU0g3Mzc3KQkrPSBzZXR1cC1zaDczNzcubyBjbG9jay1zaDczNjcubyBpbnRjLXNoNzM3Ny5vCi1vYmotJChDT05GSUdfQVJDSF9TSDczNzIpCSs9IHNldHVwLXNoNzM3Mi5vIGNsb2NrLXNoNzM2Ny5vIGludGMtc2g3MzcyLm8KK29iai0kKENPTkZJR19BUkNIX1NINzM3NykJKz0gc2V0dXAtc2g3Mzc3Lm8gY2xvY2stc2g3Mzc3Lm8gaW50Yy1zaDczNzcubworb2JqLSQoQ09ORklHX0FSQ0hfU0g3MzcyKQkrPSBzZXR1cC1zaDczNzIubyBjbG9jay1zaDczNzIubyBpbnRjLXNoNzM3Mi5vCiAKICMgUGlubXV4IHNldHVwCiBwZmMtJChDT05GSUdfQVJDSF9TSDczNjcpCTo9IHBmYy1zaDczNjcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggMWMyZWM5Ni4uMjNkNDcyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC0xNywyNSArMTcsNDUgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NoX21tY2lmLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L3NoX2tleXNjLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KKworI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9oZG1pLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgorCiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL3NoNzM3Mi5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAvKgogICogQWRkcmVzcwlJbnRlcmZhY2UJCUJ1c1dpZHRoCW5vdGUKQEAgLTgwLDEyICsxMDAsNTYgQEAKICAqLwogCiAvKgotICogS0VZU0MKKyAqIExDRCAvIElSUSAvIEtFWVNDIC8gSXJEQQogICoKLSAqIFNXNDMJCUtFWVNDCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPTgkJZW5hYmxlCi0gKiBPRkYJCWRpc2FibGUKKyAqIElSUSA9IElSUTI2IChUUyksIElSUTI3IChWSU8pLCBJUlEyOCAoUUhELVRvdWNoU2NyZWVuKQorICogTENEID0gMm5kIExDREMgKFdWR0EpCisgKgorICogCQl8CQlTVzQzCQkJfAorICogU1czCQl8CU9OCQl8CU9GRgl8CisgKiAtLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAqIE9OCQl8IEtFWSAvIElyREEJCXwgTENECQl8CisgKiBPRkYJCXwgS0VZIC8gSXJEQSAvIElSUQl8IElSUQkJfAorICoKKyAqCisgKiBRSEQgLyBXVkdBIGRpc3BsYXkKKyAqCisgKiBZb3UgY2FuIGNob2ljZSBkaXNwbGF5IHR5cGUgb24gbWVudWNvbmZpZy4KKyAqIFRoZW4sIGNoZWNrIGFib3ZlIGRpcC1zd2l0Y2guCisgKi8KKworLyoKKyAqIFVTQgorICoKKyAqIEo3IDogMS0yICBNQVgzMzU1RSBWQlVTCisgKiAgICAgIDItMyAgREMgNS4wVgorICoKKyAqIFMzOTogYml0Mjogb2ZmCisgKi8KKworLyoKKyAqIEZTSS9GU01JCisgKgorICogU1c0MQk6ICBPTiA6IFNILU1vYmlsZSBBUDQgQXVkaW8gTW9kZQorICoJOiBPRkYgOiBCbHVldG9vdGggQXVkaW8gTW9kZQorICovCisKKy8qCisgKiBNTUMwL1NESEkxIChDTjcpCisgKgorICogSjIyIDogc2VsZWN0IGNhcmQgdm9sdGFnZQorICogICAgICAgMS0yIHBpbiA6IDEuOHYKKyAqICAgICAgIDItMyBwaW4gOiAzLjN2CisgKgorICogICAgICAgIFNXMSAgfCAgICAgICAgICAgICBTVzMzCisgKiAgICAgICAgICAgICB8IGJpdDEgfCBiaXQyIHwgYml0MyB8IGJpdDQKKyAqIC0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tCisgKiBNTUMwICAgT0ZGICB8ICBPRkYgfCAgT04gIHwgIE9OICB8ICBYCisgKiBTREhJMSAgT0ZGICB8ICBPTiAgfCAgIFggIHwgIE9GRiB8IE9OCisgKgorICogdm9sdGFnZSBsZWJlbAorICogQ043IDogMS44dgorICogQ04xMjogMy4zdgogICovCiAKIC8qIE1URCAqLwpAQCAtMTQ4LDcgKzIxMiw3IEBACiAJCS5lbmQJPSAweDE2MDAwMDAwIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQJPSA2LAorCQkuc3RhcnQJPSBldnQyaXJxKDB4MDJjMCkgLyogSVJRNkEgKi8sCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCiAJfSwKIH07CkBAIC0xNjksNiArMjMzLDE4MCBAQAogCX0sCiB9OwogCisvKiBTSF9NTUNJRiAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaF9tbWNpZl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlNIX01NQ0lGIiwKKwkJLnN0YXJ0CT0gMHhFNkJEMDAwMCwKKwkJLmVuZAk9IDB4RTZCRDAwRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkvKiBNTUMgRVJSICovCisJCS5zdGFydAk9IGV2dDJpcnEoMHgxYWMwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS8qIE1NQyBOT1IgKi8KKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDFhZTApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tbWNpZl9wbGF0X2RhdGEgc2hfbW1jaWZfcGxhdCA9IHsKKwkuc3VwX3BjbGsJPSAwLAorCS5vY3IJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmNhcHMJCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwKKwkJCSAgTU1DX0NBUF84X0JJVF9EQVRBIHwKKwkJCSAgTU1DX0NBUF9ORUVEU19QT0xMLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2hfbW1jaWZfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9tbWNpZiIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSBOVUxMLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmc2hfbW1jaWZfcGxhdCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaF9tbWNpZl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKK307CisKKy8qIFNESEkwICovCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTBfaW5mbyA9IHsKKwkuZG1hX3NsYXZlX3R4CT0gU0hETUFfU0xBVkVfU0RISTBfVFgsCisJLmRtYV9zbGF2ZV9yeAk9IFNIRE1BX1NMQVZFX1NESEkwX1JYLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZGhpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlNESEkwIiwKKwkJLnN0YXJ0ICA9IDB4ZTY4NTAwMDAsCisJCS5lbmQgICAgPSAweGU2ODUwMWZmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBldnQyaXJxKDB4MGUwMCkgLyogU0RISTAgKi8sCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RoaTBfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9tb2JpbGVfc2RoaSIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzZGhpMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNkaGkwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNkaGkwX2luZm8sCisJfSwKK307CisKKy8qIFNESEkxICovCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gc2RoaTFfaW5mbyA9IHsKKwkuZG1hX3NsYXZlX3R4CT0gU0hETUFfU0xBVkVfU0RISTFfVFgsCisJLmRtYV9zbGF2ZV9yeAk9IFNIRE1BX1NMQVZFX1NESEkxX1JYLAorCS50bWlvX29jcl9tYXNrCT0gTU1DX1ZERF8xNjVfMTk1LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZGhpMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlNESEkxIiwKKwkJLnN0YXJ0ICA9IDB4ZTY4NjAwMDAsCisJCS5lbmQgICAgPSAweGU2ODYwMWZmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBldnQyaXJxKDB4MGU4MCksCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RoaTFfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzaF9tb2JpbGVfc2RoaSIsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzZGhpMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IHNkaGkxX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAxLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNkaGkxX2luZm8sCisJfSwKK307CisKKy8qIFVTQjEgKi8KK3N0YXRpYyB2b2lkIHVzYjFfaG9zdF9wb3J0X3Bvd2VyKGludCBwb3J0LCBpbnQgcG93ZXIpCit7CisJaWYgKCFwb3dlcikgLyogb25seSBwb3dlci1vbiBzdXBwb3J0ZWQgZm9yIG5vdyAqLworCQlyZXR1cm47CisKKwkvKiBzZXQgVkJPVVQvUFdFTiBhbmQgRVhUTFAxIGluIERWU1RDVFIgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoMHhFNjhCMDAwOCkgfCAweDYwMCwgMHhFNjhCMDAwOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcjhhNjY1OTdfcGxhdGRhdGEgdXNiMV9ob3N0X2RhdGEgPSB7CisJLm9uX2NoaXAJPSAxLAorCS5wb3J0X3Bvd2VyCT0gdXNiMV9ob3N0X3BvcnRfcG93ZXIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYjFfaG9zdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlVTQkhTIiwKKwkJLnN0YXJ0CT0gMHhFNjhCMDAwMCwKKwkJLmVuZAk9IDB4RTY4QjAwRTYgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gZXZ0MmlycSgweDFjZTApIC8qIFVTQjFfVVNCMUkwICovLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiMV9ob3N0X2RldmljZSA9IHsKKwkubmFtZQk9ICJyOGE2NjU5N19oY2QiLAorCS5pZAk9IDEsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9IE5VTEwsICAgICAgICAgLyogIG5vdCB1c2UgZG1hICovCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2IxX2hvc3RfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2IxX2hvc3RfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB1c2IxX2hvc3RfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIGxjZGNfaW5mbyA9IHsKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5icHAgPSAxNiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDIiwKKwkJLnN0YXJ0CT0gMHhmZTk0MDAwMCwgLyogUDQtb25seSBzcGFjZSAqLworCQkuZW5kCT0gMHhmZTk0M2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGludGNzX2V2dDJpcnEoMHg1ODApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGNkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX21vYmlsZV9sY2RjX2ZiIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGNkY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGNfcmVzb3VyY2VzLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxjZGNfaW5mbywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gfjAsCisJfSwKK307CisKKy8qCisgKiBRSEQgZGlzcGxheQorICovCisjaWZkZWYgQ09ORklHX0FQNEVWQl9RSEQKKwogLyogS0VZU0MgKE5lZWRzIFNXNDMgc2V0IHRvIE9OKSAqLwogc3RhdGljIHN0cnVjdCBzaF9rZXlzY19pbmZvIGtleXNjX2luZm8gPSB7CiAJLm1vZGUJCT0gU0hfS0VZU0NfTU9ERV8xLApAQCAtMTkxLDcgKzQyOSw3IEBACiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDc5LAorCQkuc3RhcnQgID0gZXZ0MmlycSgweDBiZTApLCAvKiBLRVlTQ19LRVkgKi8KIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMjA2LDMyICs0NDQsMzYyIEBACiAJfSwKIH07CiAKLS8qIFNESEkwICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkwX3Jlc291cmNlc1tdID0geworLyogTUlQSS1EU0kgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlwaWRzaTBfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkubmFtZQk9ICJTREhJMCIsCi0JCS5zdGFydCAgPSAweGU2ODUwMDAwLAotCQkuZW5kICAgID0gMHhlNjg1MDFmZiwKKwkJLnN0YXJ0ICA9IDB4ZmZjNjAwMDAsCisJCS5lbmQgICAgPSAweGZmYzY4ZmZmLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWlwaV9kc2lfaW5mbyBtaXBpZHNpMF9pbmZvID0geworCS5kYXRhX2Zvcm1hdAk9IE1JUElfUkdCODg4LAorCS5sY2RfY2hhbgk9ICZsY2RjX2luZm8uY2hbMF0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXBpZHNpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLW1pcGktZHNpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1pcGlkc2kwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWlwaWRzaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWlwaWRzaTBfaW5mbywKKwl9LAorfTsKKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGRpc2FwcGVhciB3aGVuIHdlIHN3aXRjaCB0byAocnVudGltZSkgUE0gKi8KK3N0YXRpYyBpbnQgX19pbml0IGFwNGV2Yl9pbml0X2Rpc3BsYXlfY2xrKHZvaWQpCit7CisJc3RydWN0IGNsayAqbGNkY19jbGs7CisJc3RydWN0IGNsayAqZHNpdHhfY2xrOworCWludCByZXQ7CisKKwlsY2RjX2NsayA9IGNsa19nZXQoJmxjZGNfZGV2aWNlLmRldiwgInNoX21vYmlsZV9sY2RjX2ZiLjAiKTsKKwlpZiAoSVNfRVJSKGxjZGNfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIobGNkY19jbGspOworCisJZHNpdHhfY2xrID0gY2xrX2dldCgmbWlwaWRzaTBfZGV2aWNlLmRldiwgInNoLW1pcGktZHNpLjAiKTsKKwlpZiAoSVNfRVJSKGRzaXR4X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2l0eF9jbGspOworCQlnb3RvIGVjbGtkc2l0eGdldDsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKGxjZGNfY2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlY2xrbGNkY29uOworCisJcmV0ID0gY2xrX2VuYWJsZShkc2l0eF9jbGspOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVjbGtkc2l0eG9uOworCisJcmV0dXJuIDA7CisKK2VjbGtkc2l0eG9uOgorCWNsa19kaXNhYmxlKGxjZGNfY2xrKTsKK2VjbGtsY2Rjb246CisJY2xrX3B1dChkc2l0eF9jbGspOworZWNsa2RzaXR4Z2V0OgorCWNsa19wdXQobGNkY19jbGspOworCisJcmV0dXJuIHJldDsKK30KK2RldmljZV9pbml0Y2FsbChhcDRldmJfaW5pdF9kaXNwbGF5X2Nsayk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpxaGRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm1pcGlkc2kwX2RldmljZSwKKwkma2V5c2NfZGV2aWNlLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfQVA0RVZCX1FIRCAqLworCisvKiBGU0kgKi8KKyNkZWZpbmUgSVJRX0ZTSQkJZXZ0MmlycSgweDE4NDApCisjZGVmaW5lIEZTSUFDS0NSCTB4RTYxNTAwMTgKK3N0YXRpYyB2b2lkIGZzaWFja2NyX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCisJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCisJc3RhdHVzICY9IH4weDAwMDAwMGZmOworCXN0YXR1cyB8PSAweDAwMDAwMDgwOworCV9fcmF3X3dyaXRlbChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2lhY2tjcl9jbGtfb3BzID0geworCS5pbml0ID0gZnNpYWNrY3JfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZzaWFja2NyX2NsayA9IHsKKwkub3BzCQk9ICZmc2lhY2tjcl9jbGtfb3BzLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUZTSUFDS0NSLAorCS5yYXRlCQk9IDAsIC8qIHVua25vd24gKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7CisJLnBvcnRhX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYgfAorCQkgICAgICAgU0hfRlNJX09VVF9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9PRk1UKFBDTSkgfAorCQkgICAgICAgU0hfRlNJX0lGTVQoUENNKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiRlNJIiwKKwkJLnN0YXJ0CT0gMHhGRTNDMDAwMCwKKwkJLmVuZAk9IDB4RkUzQzA0MDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0ICA9IDk2LAorCQkuc3RhcnQgID0gSVJRX0ZTSSwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZGhpMF9kZXZpY2UgPSB7Ci0JLm5hbWUgICAgICAgICAgID0gInNoX21vYmlsZV9zZGhpIiwKLQkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNkaGkwX3Jlc291cmNlcyksCi0JLnJlc291cmNlICAgICAgID0gc2RoaTBfcmVzb3VyY2VzLAotCS5pZCAgICAgICAgICAgICA9IDAsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmc2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9mc2kyIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZnNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZnNpX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZmc2lfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19pbmZvIHNoX21vYmlsZV9sY2RjMV9pbmZvID0geworCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19FWFRFUk5BTCwKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5icHAgPSAxNiwKKwkJLmludGVyZmFjZV90eXBlID0gUkdCMjQsCisJCS5jbG9ja19kaXZpZGVyID0gMSwKKwkJLmZsYWdzID0gTENEQ19GTEFHU19EV1BPTCwKKwkJLmxjZF9jZmcgPSB7CisJCQkubmFtZSA9ICJIRE1JIiwKKwkJCS8qIFNvIGZhciBvbmx5IDcyMHAgaXMgc3VwcG9ydGVkICovCisJCQkueHJlcyA9IDEyODAsCisJCQkueXJlcyA9IDcyMCwKKwkJCS8qCisJCQkgKiBJZiBsZWZ0IGFuZCByaWdodCBtYXJnaW5zIGFyZSBub3QgbXVsdGlwbGVzIG9mIDgsCisJCQkgKiBMREhBSlIgd2lsbCBiZSBhZGp1c3RlZCBhY2NvcmRpbmdseSBieSB0aGUgTENEQworCQkJICogZHJpdmVyLiBVbnRpbCB3ZSBzdGFydCB1c2luZyBFRElELCB0aGVzZSB2YWx1ZXMKKwkJCSAqIG1pZ2h0IGhhdmUgdG8gYmUgYWRqdXN0ZWQgZm9yIGRpZmZlcmVudCBtb25pdG9ycy4KKwkJCSAqLworCQkJLmxlZnRfbWFyZ2luID0gMjAwLAorCQkJLnJpZ2h0X21hcmdpbiA9IDg4LAorCQkJLmhzeW5jX2xlbiA9IDQ4LAorCQkJLnVwcGVyX21hcmdpbiA9IDIwLAorCQkJLmxvd2VyX21hcmdpbiA9IDUsCisJCQkudnN5bmNfbGVuID0gNSwKKwkJCS5waXhjbG9jayA9IDEzNDY4LAorCQkJLnN5bmMgPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX0hPUl9ISUdIX0FDVCwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGxjZGMxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiTENEQzEiLAorCQkuc3RhcnQJPSAweGZlOTQ0MDAwLAorCQkuZW5kCT0gMHhmZTk0N2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IGludGNzX2V2dDJpcnEoMHgxN2EwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGMxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGMxX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAxLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNoX21vYmlsZV9sY2RjMV9pbmZvLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9tb2JpbGVfaGRtaV9pbmZvIGhkbWlfaW5mbyA9IHsKKwkubGNkX2NoYW4gPSAmc2hfbW9iaWxlX2xjZGMxX2luZm8uY2hbMF0sCisJLmxjZF9kZXYgPSAmbGNkYzFfZGV2aWNlLmRldiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaGRtaV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkhETUkiLAorCQkuc3RhcnQJPSAweGU2YmUwMDAwLAorCQkuZW5kCT0gMHhlNmJlMDBmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS8qIFRoZXJlJ3MgYWxzbyBhbiBIRE1JIGludGVycnVwdCBvbiBJTlRDUyBAIDB4MThlMCAqLworCQkuc3RhcnQJPSBldnQyaXJxKDB4MTdlMCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoZG1pX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtbW9iaWxlLWhkbWkiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1pX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaGRtaV9yZXNvdXJjZXMsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaGRtaV9pbmZvLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXA0ZXZiX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZub3JfZmxhc2hfZGV2aWNlLAogCSZzbWM5MTF4X2RldmljZSwKLQkma2V5c2NfZGV2aWNlLAogCSZzZGhpMF9kZXZpY2UsCisJJnNkaGkxX2RldmljZSwKKwkmdXNiMV9ob3N0X2RldmljZSwKKwkmZnNpX2RldmljZSwKKwkmc2hfbW1jaWZfZGV2aWNlLAorCSZsY2RjMV9kZXZpY2UsCisJJmxjZGNfZGV2aWNlLAorCSZoZG1pX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhkbWlfaW5pdF9wbV9jbG9jayh2b2lkKQoreworCXN0cnVjdCBjbGsgKmhkbWlfaWNrID0gY2xrX2dldCgmaGRtaV9kZXZpY2UuZGV2LCAiaWNrIik7CisJaW50IHJldDsKKwlsb25nIHJhdGU7CisKKwlpZiAoSVNfRVJSKGhkbWlfaWNrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWlfaWNrKTsKKwkJcHJfZXJyKCJDYW5ub3QgZ2V0IEhETUkgSUNLOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gY2xrX3NldF9wYXJlbnQoJnBsbGMyX2NsaywgJmR2X2Nsa2lfZGl2Ml9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IHNldCBQTExDMiBwYXJlbnQ6ICVkLCAlZCB1c2Vyc1xuIiwgcmV0LCBwbGxjMl9jbGsudXNlY291bnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlwcl9kZWJ1ZygiUExMQzIgaW5pdGlhbCBmcmVxdWVuY3kgJWx1XG4iLCBjbGtfZ2V0X3JhdGUoJnBsbGMyX2NsaykpOworCisJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKCZwbGxjMl9jbGssIDU5NDAwMDAwMCk7CisJaWYgKHJhdGUgPCAwKSB7CisJCXByX2VycigiQ2Fubm90IGdldCBzdWl0YWJsZSByYXRlOiAlbGRcbiIsIHJhdGUpOworCQlyZXQgPSByYXRlOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjbGtfc2V0X3JhdGUoJnBsbGMyX2NsaywgcmF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW5ub3Qgc2V0IHJhdGUgJWxkOiAlZFxuIiwgcmF0ZSwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfZGVidWcoIlBMTEMyIHNldCBmcmVxdWVuY3kgJWx1XG4iLCByYXRlKTsKKworCXJldCA9IGNsa19zZXRfcGFyZW50KGhkbWlfaWNrLCAmcGxsYzJfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIkNhbm5vdCBzZXQgSERNSSBwYXJlbnQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlpZiAoIUlTX0VSUihoZG1pX2ljaykpCisJCWNsa19wdXQoaGRtaV9pY2spOworCXJldHVybiByZXQ7Cit9CisKK2RldmljZV9pbml0Y2FsbChoZG1pX2luaXRfcG1fY2xvY2spOworCisvKgorICogRklYTUUgISEKKyAqCisgKiBncGlvX25vX2RpcmVjdGlvbgorICogZ3Bpb19wdWxsX3VwCisgKiBhcmUgcXVpY2tfaGFjay4KKyAqCisgKiBjdXJyZW50IGdwaW8gZnJhbWUgd29yayBkb2Vzbid0IGhhdmUKKyAqIHRoZSBtZXRob2QgdG8gY29udHJvbCBvbmx5IHB1bGwgdXAvZG93bi9mcmVlLgorICogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgY29ycmVjdCBncGlvIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBncGlvX25vX2RpcmVjdGlvbih1MzIgYWRkcikKK3sKKwlfX3Jhd193cml0ZWIoMHgwMCwgYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBncGlvX3B1bGxfdXAodTMyIGFkZHIpCit7CisJdTggZGF0YSA9IF9fcmF3X3JlYWRiKGFkZHIpOworCisJZGF0YSAmPSAweDBGOworCWRhdGEgfD0gMHhDMDsKKwlfX3Jhd193cml0ZWIoZGF0YSwgYWRkcik7Cit9CisKKy8qIFRvdWNoU2NyZWVuICovCisjZGVmaW5lIElSUTI4CWV2dDJpcnEoMHgzMzgwKSAvKiBJUlEyOEEgKi8KKyNkZWZpbmUgSVJRNwlldnQyaXJxKDB4MDJlMCkgLyogSVJRN0EgKi8KK3N0YXRpYyBpbnQgdHNfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlpbnQgdmFsMSwgdmFsMjsKKworCWdwaW9fZnJlZShHUElPX0ZOX0lSUTI4XzEyMyk7CisJZ3Bpb19mcmVlKEdQSU9fRk5fSVJRN180MCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTIzLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUNDAsIE5VTEwpOworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QT1JUMTIzKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BPUlQ0MCk7CisKKwl2YWwxID0gZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1JUMTIzKTsKKwl2YWwyID0gZ3Bpb19nZXRfdmFsdWUoR1BJT19QT1JUNDApOworCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJRMjhfMTIzLCBOVUxMKTsJLyogZm9yIFFIRCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTdfNDAsIE5VTEwpOwkvKiBmb3IgV1ZHQSAqLworCisJcmV0dXJuIHZhbDEgXiB2YWwyOworfQorCisjZGVmaW5lIFBPUlQ0MENSCTB4RTYwNTEwMjgKKyNkZWZpbmUgUE9SVDEyM0NSCTB4RTYwNTAwN0IKK3N0YXRpYyBpbnQgdHNfaW5pdCh2b2lkKQoreworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSUTI4XzEyMywgTlVMTCk7CS8qIGZvciBRSEQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlE3XzQwLCBOVUxMKTsJLyogZm9yIFdWR0EgKi8KKworCWdwaW9fcHVsbF91cChQT1JUNDBDUik7CisJZ3Bpb19wdWxsX3VwKFBPUlQxMjNDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgdHNjMjAwN19pbmZvID0geworCS5tb2RlbAkJCT0gMjAwNywKKwkueF9wbGF0ZV9vaG1zCQk9IDE4MCwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSB0c19nZXRfcGVuZG93bl9zdGF0ZSwKKwkuaW5pdF9wbGF0Zm9ybV9odwk9IHRzX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHRzY19kZXZpY2UgPSB7CisJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkudHlwZQkJPSAidHNjMjAwNyIsCisJLnBsYXRmb3JtX2RhdGEJPSAmdHNjMjAwN19pbmZvLAorCS8qLmlycSBpcyBzZWxlY3RlZCBvbiBhcDRldmJfaW5pdCAqLworfTsKKworLyogSTJDICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzBfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImFrNDY0MyIsIDB4MTMpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyYzFfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInIyMDI1c2QiLCAweDMyKSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhcDRldmJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yNTAsMTQgKzgxOCwxOCBAQAogewogCWlvdGFibGVfaW5pdChhcDRldmJfaW9fZGVzYywgQVJSQVlfU0laRShhcDRldmJfaW9fZGVzYykpOwogCi0JLyogc2V0dXAgZWFybHkgZGV2aWNlcywgY2xvY2tzIGFuZCBjb25zb2xlIGhlcmUgYXMgd2VsbCAqLworCS8qIHNldHVwIGVhcmx5IGRldmljZXMgYW5kIGNvbnNvbGUgaGVyZSBhcyB3ZWxsICovCiAJc2g3MzcyX2FkZF9lYXJseV9kZXZpY2VzKCk7Ci0Jc2g3MzY3X2Nsb2NrX2luaXQoKTsgLyogdXNlIGczIGNsb2NrcyBmb3Igbm93ICovCiAJc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOwogfQogCisjZGVmaW5lIEdQSU9fUE9SVDlDUgkweEU2MDUxMDA5CisjZGVmaW5lIEdQSU9fUE9SVDEwQ1IJMHhFNjA1MTAwQQogc3RhdGljIHZvaWQgX19pbml0IGFwNGV2Yl9pbml0KHZvaWQpCiB7CisJdTMyIHNyY3I0OworCXN0cnVjdCBjbGsgKmNsazsKKwogCXNoNzM3Ml9waW5tdXhfaW5pdCgpOwogCiAJLyogZW5hYmxlIFNDSUZBMCAqLwpAQCAtMjk2LDYgKzg2OCw5MyBAQAogCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDM0LCAwKTsKIAlncGlvX2V4cG9ydChHUElPX1BPUlQzNSwgMCk7CiAKKwkvKiBTREhJMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDRDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElXUDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTUQwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ0xLMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzAsIE5VTEwpOworCisJLyogU0RISTEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ01EMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNMSzEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMV8zLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDFfMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQxXzEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMV8wLCBOVUxMKTsKKworCS8qIE1NQ0lGICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfNiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DRDBfNywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DQ01EMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTU1DQ0xLMCwgTlVMTCk7CisKKwkvKiBVU0IgZW5hYmxlICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVkJVUzBfMSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSURJTl8xXzE4LCAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUFdFTl8xXzExNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTl8xXzExNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRVhUTFBfMSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTjJfMSwgICAgTlVMTCk7CisKKwkvKiBzZXR1cCBVU0IgcGh5ICovCisJX19yYXdfd3JpdGV3KDB4OGEwYSwgMHhFNjA1ODEzMCk7CS8qIFVTQkNSMiAqLworCisJLyogZW5hYmxlIEZTSTIgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBSUJULAlOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBSUxSLAlOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lBSVNMRCwJTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQU9TTEQsCU5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQxNjEsCU5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQxNjEsIDApOyAvKiBzbGF2ZSAqLworCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDksIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQxMCwgTlVMTCk7CisJZ3Bpb19ub19kaXJlY3Rpb24oR1BJT19QT1JUOUNSKTsgIC8qIEZTSUFPQlQgbmVlZHMgbm8gZGlyZWN0aW9uICovCisJZ3Bpb19ub19kaXJlY3Rpb24oR1BJT19QT1JUMTBDUik7IC8qIEZTSUFPTFIgbmVlZHMgbm8gZGlyZWN0aW9uICovCisKKwkvKiBzZXQgU1BVMiBjbG9jayB0byAxMTkuNiBNSHogKi8KKwljbGsgPSBjbGtfZ2V0KE5VTEwsICJzcHVfY2xrIik7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfc2V0X3JhdGUoY2xrLCBjbGtfcm91bmRfcmF0ZShjbGssIDExOTYwMDAwMCkpOworCQljbGtfcHV0KGNsayk7CisJfQorCisJLyogY2hhbmdlIHBhcmVudCBvZiBGU0kgQSAqLworCWNsayA9IGNsa19nZXQoTlVMTCwgImZzaWFfY2xrIik7CisJaWYgKCFJU19FUlIoY2xrKSkgeworCQljbGtfcmVnaXN0ZXIoJmZzaWFja2NyX2Nsayk7CisJCWNsa19zZXRfcGFyZW50KGNsaywgJmZzaWFja2NyX2Nsayk7CisJCWNsa19wdXQoY2xrKTsKKwl9CisKKwkvKgorCSAqIHNldCBpcnEgcHJpb3JpdHksIHRvIGF2b2lkIHNvdW5kIGNob3BwaW5nCisJICogd2hlbiBORlMgcm9vdGZzIGlzIHVzZWQKKwkgKiAgRlNJKDMpID4gU01TQzkxMVgoMikKKwkgKi8KKwlpbnRjX3NldF9wcmlvcml0eShJUlFfRlNJLCAzKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyYzBfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKGkyYzBfZGV2aWNlcykpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjMV9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoaTJjMV9kZXZpY2VzKSk7CisKKyNpZmRlZiBDT05GSUdfQVA0RVZCX1FIRAorCS8qCisJICogUUhECisJICovCisKIAkvKiBlbmFibGUgS0VZU0MgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQwLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9LRVlPVVQxLCBOVUxMKTsKQEAgLTMwOCwyNiArOTY3LDEyMiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlOM18xMzMsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWUlONCwgICAgIE5VTEwpOwogCi0JLyogU0RISTAgKi8KLQlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ0QwLCBOVUxMKTsKLQlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJV1AwLCBOVUxMKTsKLQlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ01EMCwgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNMSzAsIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8zLCBOVUxMKTsKLQlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMiwgTlVMTCk7Ci0JZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzEsIE5VTEwpOwotCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8wLCBOVUxMKTsKKwkvKiBlbmFibGUgVG91Y2hTY3JlZW4gKi8KKwlzZXRfaXJxX3R5cGUoSVJRMjgsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisKKwl0c2NfZGV2aWNlLmlycSA9IElSUTI4OworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsICZ0c2NfZGV2aWNlLCAxKTsKKworCS8qIExDREMwICovCisJbGNkY19pbmZvLmNsb2NrX3NvdXJjZQkJCT0gTENEQ19DTEtfUEVSSVBIRVJBTDsKKwlsY2RjX2luZm8uY2hbMF0uaW50ZXJmYWNlX3R5cGUJCT0gUkdCMjQ7CisJbGNkY19pbmZvLmNoWzBdLmNsb2NrX2RpdmlkZXIJCT0gMTsKKwlsY2RjX2luZm8uY2hbMF0uZmxhZ3MJCQk9IExDRENfRkxBR1NfRFdQT0w7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9jZmcubmFtZQkJPSAiUjYzMzAyKFFIRCkiOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnhyZXMJCT0gNTQ0OworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnlyZXMJCT0gOTYxOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLmxlZnRfbWFyZ2luCT0gNzI7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9jZmcucmlnaHRfbWFyZ2luCT0gNjAwOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLmhzeW5jX2xlbgk9IDE2OworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnVwcGVyX21hcmdpbgk9IDg7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9jZmcubG93ZXJfbWFyZ2luCT0gODsKKwlsY2RjX2luZm8uY2hbMF0ubGNkX2NmZy52c3luY19sZW4JPSAyOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnN5bmMJCT0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUIHwKKwkJCQkJCSAgRkJfU1lOQ19IT1JfSElHSF9BQ1Q7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9zaXplX2NmZy53aWR0aAk9IDQ0OworCWxjZGNfaW5mby5jaFswXS5sY2Rfc2l6ZV9jZmcuaGVpZ2h0CT0gNzk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhxaGRfZGV2aWNlcywgQVJSQVlfU0laRShxaGRfZGV2aWNlcykpOworCisjZWxzZQorCS8qCisJICogV1ZHQQorCSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTYsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDE1LCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxNCwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTMsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDEyLCAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQxMSwgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMTAsICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDksICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ4LCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENywgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDYsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQ1LCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0RENCwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDMsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDREQyLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REMSwgICAgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fTENERDAsICAgIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0xDRERJU1AsICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9MQ0REQ0ssICAgTlVMTCk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTg5LCBOVUxMKTsgLyogYmFja2xpZ2h0ICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDE4OSwgMSk7CisKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTUxLCBOVUxMKTsgLyogTENERE9OICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDE1MSwgMSk7CisKKwlsY2RjX2luZm8uY2xvY2tfc291cmNlCQkJPSBMQ0RDX0NMS19CVVM7CisJbGNkY19pbmZvLmNoWzBdLmludGVyZmFjZV90eXBlCQk9IFJHQjE4OworCWxjZGNfaW5mby5jaFswXS5jbG9ja19kaXZpZGVyCQk9IDI7CisJbGNkY19pbmZvLmNoWzBdLmZsYWdzCQkJPSAwOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLm5hbWUJCT0gIldWR0EgUGFuZWwiOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnhyZXMJCT0gODAwOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnlyZXMJCT0gNDgwOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLmxlZnRfbWFyZ2luCT0gMjIwOworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnJpZ2h0X21hcmdpbgk9IDExMDsKKwlsY2RjX2luZm8uY2hbMF0ubGNkX2NmZy5oc3luY19sZW4JPSA3MDsKKwlsY2RjX2luZm8uY2hbMF0ubGNkX2NmZy51cHBlcl9tYXJnaW4JPSAyMDsKKwlsY2RjX2luZm8uY2hbMF0ubGNkX2NmZy5sb3dlcl9tYXJnaW4JPSA1OworCWxjZGNfaW5mby5jaFswXS5sY2RfY2ZnLnZzeW5jX2xlbgk9IDU7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9jZmcuc3luYwkJPSAwOworCWxjZGNfaW5mby5jaFswXS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTI7CisJbGNkY19pbmZvLmNoWzBdLmxjZF9zaXplX2NmZy5oZWlnaHQJPSA5MTsKKworCS8qIGVuYWJsZSBUb3VjaFNjcmVlbiAqLworCXNldF9pcnFfdHlwZShJUlE3LCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCisJdHNjX2RldmljZS5pcnEgPSBJUlE3OworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZ0c2NfZGV2aWNlLCAxKTsKKyNlbmRpZiAvKiBDT05GSUdfQVA0RVZCX1FIRCAqLwogCiAJc2g3MzcyX2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7CiAKKwkvKiBIRE1JICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSERNSV9IUEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0hETUlfQ0VDLCBOVUxMKTsKKworCS8qIFJlc2V0IEhETUksIG11c3QgYmUgaGVsZCBhdCBsZWFzdCBvbmUgRVhUQUxSICgzMjc2OEh6KSBwZXJpb2QgKi8KKyNkZWZpbmUgU1JDUjQgMHhlNjE1ODBiYworCXNyY3I0ID0gX19yYXdfcmVhZGwoU1JDUjQpOworCV9fcmF3X3dyaXRlbChzcmNyNCB8ICgxIDw8IDEzKSwgU1JDUjQpOworCXVkZWxheSg1MCk7CisJX19yYXdfd3JpdGVsKHNyY3I0ICYgfigxIDw8IDEzKSwgU1JDUjQpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoYXA0ZXZiX2RldmljZXMsIEFSUkFZX1NJWkUoYXA0ZXZiX2RldmljZXMpKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFwNGV2Yl90aW1lcl9pbml0KHZvaWQpCit7CisJc2g3MzcyX2Nsb2NrX2luaXQoKTsKKwlzaG1vYmlsZV90aW1lci5pbml0KCk7CisKKwkvKiBFeHRlcm5hbCBjbG9jayBzb3VyY2UgKi8KKwljbGtfc2V0X3JhdGUoJmR2X2Nsa2lfY2xrLCAyNzAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGFwNGV2Yl90aW1lciA9IHsKKwkuaW5pdAkJPSBhcDRldmJfdGltZXJfaW5pdCwKK307CisKIE1BQ0hJTkVfU1RBUlQoQVA0RVZCLCAiYXA0ZXZiIikKIAkucGh5c19pbwk9IDB4ZTYwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKCgweGU2MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLm1hcF9pbwkJPSBhcDRldmJfbWFwX2lvLAogCS5pbml0X2lycQk9IHNoNzM3Ml9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYXA0ZXZiX2luaXQsCi0JLnRpbWVyCQk9ICZzaG1vYmlsZV90aW1lciwKKwkudGltZXIJCT0gJmFwNGV2Yl90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKaW5kZXggOTI0NzUwMy4uYTU1MjU5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwpAQCAtMzcsNiArMzcsMTUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKy8qCisgKiBJckRBCisgKgorICogUzY3OiA1Yml0IDogT04gIHBvd2VyCisgKiAgICA6IDZiaXQgOiBPTiAgcmVtb3RlIGNvbnRyb2wKKyAqICAgICAgICAgICAgIE9GRiBJckRBCisgKi8KIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtOTEsNyArMTAwLDcgQEAKIH07CiAKIC8qIFVTQkhTICovCi12b2lkIHVzYl9ob3N0X3BvcnRfcG93ZXIoaW50IHBvcnQsIGludCBwb3dlcikKK3N0YXRpYyB2b2lkIHVzYl9ob3N0X3BvcnRfcG93ZXIoaW50IHBvcnQsIGludCBwb3dlcikKIHsKIAlpZiAoIXBvd2VyKSAvKiBvbmx5IHBvd2VyLW9uIHN1cHBvcnRlZCBmb3Igbm93ICovCiAJCXJldHVybjsKQEAgLTExMyw3ICsxMjIsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gNjUsCisJCS5zdGFydAk9IGV2dDJpcnEoMHhhMjApLCAvKiBVU0JIU19VU0hJMCAqLwogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTE1Myw3ICsxNjIsNyBAQAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydCAgPSA3OSwKKwkJLnN0YXJ0ICA9IGV2dDJpcnEoMHhiZTApLCAvKiBLRVlTQ19LRVkgKi8KIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMjA5LDExICsyMTgsMzEgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcmRhX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhFNkQwMDAwMCwKKwkJLmVuZAk9IDB4RTZEMDFGRDQgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGV2dDJpcnEoMHg0ODApLCAvKiBJUkRBICovCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXJkYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2lyZGEiLAorCS5pZAkJPSAtMSwKKwkucmVzb3VyY2UJPSBpcmRhX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaXJkYV9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmczZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZub3JfZmxhc2hfZGV2aWNlLAogCSZ1c2JfaG9zdF9kZXZpY2UsCiAJJmtleXNjX2RldmljZSwKIAkmbmFuZF9mbGFzaF9kZXZpY2UsCisJJmlyZGFfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBnM2V2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTIzMiw5ICsyNjEsOCBAQAogewogCWlvdGFibGVfaW5pdChnM2V2bV9pb19kZXNjLCBBUlJBWV9TSVpFKGczZXZtX2lvX2Rlc2MpKTsKIAotCS8qIHNldHVwIGVhcmx5IGRldmljZXMsIGNsb2NrcyBhbmQgY29uc29sZSBoZXJlIGFzIHdlbGwgKi8KKwkvKiBzZXR1cCBlYXJseSBkZXZpY2VzIGFuZCBjb25zb2xlIGhlcmUgYXMgd2VsbCAqLwogCXNoNzM2N19hZGRfZWFybHlfZGV2aWNlcygpOwotCXNoNzM2N19jbG9ja19pbml0KCk7CiAJc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOwogfQogCkBAIC0yNzEsOSArMjk5LDYgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9FWFRMUCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSURJTiwgTlVMTCk7CiAKLQkvKiBlbmFibGUgY2xvY2sgaW4gU1lNU1RQQ1IyICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKDB4ZTYxNTgwNDgpICYgfigxIDw8IDIyKSwgMHhlNjE1ODA0OCk7Ci0KIAkvKiBzZXR1cCBVU0IgcGh5ICovCiAJX19yYXdfd3JpdGV3KDB4MDMwMCwgMHhlNjA1ODEwYSk7CS8qIFVTQkNSMSAqLwogCV9fcmF3X3dyaXRldygweDAwZTAsIDB4ZTYwNTgxYzApOwkvKiBDUEZDSCAqLwpAQCAtMzE4LDE2ICszNDMsMzIgQEAKIAkvKiBGT0UsIEZDREUsIEZTQyBvbiBkZWRpY2F0ZWQgcGlucyAqLwogCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbCgweGU2MTU4MDQ4KSAmIH4oMSA8PCAxNSksIDB4ZTYxNTgwNDgpOwogCisJLyogSXJEQSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0lOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX0ZJUlNFTCwgTlVMTCk7CisJc2V0X2lycV90eXBlKGV2dDJpcnEoMHg0ODApLCBJUlFfVFlQRV9MRVZFTF9MT1cpOworCiAJc2g3MzY3X2FkZF9zdGFuZGFyZF9kZXZpY2VzKCk7CiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhnM2V2bV9kZXZpY2VzLCBBUlJBWV9TSVpFKGczZXZtX2RldmljZXMpKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGczZXZtX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzaDczNjdfY2xvY2tfaW5pdCgpOworCXNobW9iaWxlX3RpbWVyLmluaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgZzNldm1fdGltZXIgPSB7CisJLmluaXQJCT0gZzNldm1fdGltZXJfaW5pdCwKK307CisKIE1BQ0hJTkVfU1RBUlQoRzNFVk0sICJnM2V2bSIpCiAJLnBoeXNfaW8JPSAweGU2MDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoMHhlNjAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAogCS5tYXBfaW8JCT0gZzNldm1fbWFwX2lvLAogCS5pbml0X2lycQk9IHNoNzM2N19pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gZzNldm1faW5pdCwKLQkudGltZXIJCT0gJnNobW9iaWxlX3RpbWVyLAorCS50aW1lcgkJPSAmZzNldm1fdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nNGV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nNGV2bS5jCmluZGV4IDEwNjczYTkuLjJjM2ZmNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzRldm0uYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWc0ZXZtLmMKQEAgLTMwLDEyICszMCwzOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC9zaF9rZXlzYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zaF9tb2JpbGVfc2RoaS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3NoNzM3Ny5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisvKgorICogU0RISQorICoKKyAqIFNESEkwIDogY2FyZCBkZXRlY3Rpb24gaXMgcG9zc2libGUKKyAqIFNESEkxIDogY2FyZCBkZXRlY3Rpb24gaXMgaW1wb3NzaWJsZQorICoKKyAqIFtHNC1NQUlOLUJPQVJEXQorICogSlA3NCA6IHNob3J0CQkjIERCR18yVjhBICAgIGZvciBTREhJMAorICogSlA3NSA6IE5DCQkjIERCR18zVjNBICAgIGZvciBTREhJMAorICogSlA3NiA6IE5DCQkjIERCR18zVjNBX1NEIGZvciBTREhJMAorICogSlA3NyA6IE5DCQkjIDNWM0FfU0RJTyAgIGZvciBTREhJMQorICogSlA3OCA6IHNob3J0CQkjIERCR18yVjhBICAgIGZvciBTREhJMQorICogSlA3OSA6IE5DCQkjIERCR18zVjNBICAgIGZvciBTREhJMQorICogSlA4MCA6IE5DCQkjIERCR18zVjNBX1NEIGZvciBTREhJMQorICoKKyAqIFtHNC1DT1JFLUJPQVJEXQorICogUzMyIDogYWxsIG9mZgkjIHRvIGRpc3NldmVyIGZyb20gRzMtQ09SRV9EQkcgYm9hcmQKKyAqIFMzMyA6IGFsbCBvZmYJIyB0byBkaXNzZXZlciBmcm9tIEczLUNPUkVfREJHIGJvYXJkCisgKgorICogW0czLUNPUkVfREJHLUJPQVJEXQorICogUzEgIDogYWxsIG9mZgkjIHRvIGRpc3NldmVyIGZyb20gRzMtQ09SRV9EQkcgYm9hcmQKKyAqIFMzICA6IGFsbCBvZmYJIyB0byBkaXNzZXZlciBmcm9tIEczLUNPUkVfREJHIGJvYXJkCisgKiBTNCAgOiBhbGwgb2ZmCSMgdG8gZGlzc2V2ZXIgZnJvbSBHMy1DT1JFX0RCRyBib2FyZAorICovCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBub3JfZmxhc2hfcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTkwLDcgKzExNyw3IEBACiB9OwogCiAvKiBVU0JIUyAqLwotdm9pZCB1c2JfaG9zdF9wb3J0X3Bvd2VyKGludCBwb3J0LCBpbnQgcG93ZXIpCitzdGF0aWMgdm9pZCB1c2JfaG9zdF9wb3J0X3Bvd2VyKGludCBwb3J0LCBpbnQgcG93ZXIpCiB7CiAJaWYgKCFwb3dlcikgLyogb25seSBwb3dlci1vbiBzdXBwb3J0ZWQgZm9yIG5vdyAqLwogCQlyZXR1cm47CkBAIC0xMTIsOCArMTM5LDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDY1LAotCQkuZW5kCT0gNjUsCisJCS5zdGFydAk9IGV2dDJpcnEoMHgwYTIwKSwgLyogVVNCSFNfVVNISTAgKi8KIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xNTQsNyArMTgwLDcgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQgID0gNzksCisJCS5zdGFydCAgPSBldnQyaXJxKDB4MGJlMCksIC8qIEtFWVNDX0tFWSAqLwogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xNjksMTAgKzE5NSw1MyBAQAogCX0sCiB9OwogCisvKiBTREhJICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiU0RISTAiLAorCQkuc3RhcnQgID0gMHhlNmQ1MDAwMCwKKwkJLmVuZCAgICA9IDB4ZTZkNTAxZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGV2dDJpcnEoMHgwZTAwKSwgLyogU0RISTAgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZGhpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX21vYmlsZV9zZGhpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNkaGkwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc2RoaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNkaGkxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiU0RISTEiLAorCQkuc3RhcnQgID0gMHhlNmQ2MDAwMCwKKwkJLmVuZCAgICA9IDB4ZTZkNjAxZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGV2dDJpcnEoMHgwZTgwKSwgLyogU0RISTEgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZGhpMV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoX21vYmlsZV9zZGhpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKHNkaGkxX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc2RoaTFfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZzRldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm5vcl9mbGFzaF9kZXZpY2UsCiAJJnVzYl9ob3N0X2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAorCSZzZGhpMF9kZXZpY2UsCisJJnNkaGkxX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZzRldm1faW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xOTEsMTIgKzI2MCw0MSBAQAogewogCWlvdGFibGVfaW5pdChnNGV2bV9pb19kZXNjLCBBUlJBWV9TSVpFKGc0ZXZtX2lvX2Rlc2MpKTsKIAotCS8qIHNldHVwIGVhcmx5IGRldmljZXMsIGNsb2NrcyBhbmQgY29uc29sZSBoZXJlIGFzIHdlbGwgKi8KKwkvKiBzZXR1cCBlYXJseSBkZXZpY2VzIGFuZCBjb25zb2xlIGhlcmUgYXMgd2VsbCAqLwogCXNoNzM3N19hZGRfZWFybHlfZGV2aWNlcygpOwotCXNoNzM2N19jbG9ja19pbml0KCk7IC8qIHVzZSBnMyBjbG9ja3MgZm9yIG5vdyAqLwogCXNobW9iaWxlX3NldHVwX2NvbnNvbGUoKTsKIH0KIAorI2RlZmluZSBHUElPX1NESElEMF9EMAkweGU2MDUyMGZjCisjZGVmaW5lIEdQSU9fU0RISUQwX0QxCTB4ZTYwNTIwZmQKKyNkZWZpbmUgR1BJT19TREhJRDBfRDIJMHhlNjA1MjBmZQorI2RlZmluZSBHUElPX1NESElEMF9EMwkweGU2MDUyMGZmCisjZGVmaW5lIEdQSU9fU0RISUNNRDAJMHhlNjA1MjEwMAorCisjZGVmaW5lIEdQSU9fU0RISUQxX0QwCTB4ZTYwNTIxMDMKKyNkZWZpbmUgR1BJT19TREhJRDFfRDEJMHhlNjA1MjEwNAorI2RlZmluZSBHUElPX1NESElEMV9EMgkweGU2MDUyMTA1CisjZGVmaW5lIEdQSU9fU0RISUQxX0QzCTB4ZTYwNTIxMDYKKyNkZWZpbmUgR1BJT19TREhJQ01EMQkweGU2MDUyMTA3CisKKy8qCisgKiBGSVhNRSAhIQorICoKKyAqIGdwaW9fcHVsbF91cCBpcyBxdWlja19oYWNrLgorICoKKyAqIGN1cnJlbnQgZ3BpbyBmcmFtZSB3b3JrIGRvZXNuJ3QgaGF2ZQorICogdGhlIG1ldGhvZCB0byBjb250cm9sIG9ubHkgcHVsbCB1cC9kb3duL2ZyZWUuCisgKiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZXBsYWNlZCBieSBjb3JyZWN0IGdwaW8gZnVuY3Rpb24KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGdwaW9fcHVsbF91cCh1MzIgYWRkcikKK3sKKwl1OCBkYXRhID0gX19yYXdfcmVhZGIoYWRkcik7CisKKwlkYXRhICY9IDB4MEY7CisJZGF0YSB8PSAweEMwOworCV9fcmF3X3dyaXRlYihkYXRhLCBhZGRyKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGc0ZXZtX2luaXQodm9pZCkKIHsKIAlzaDczNzdfcGlubXV4X2luaXQoKTsKQEAgLTIyOSw5ICszMjcsNiBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0VYVExQLCBOVUxMKTsKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JRElOLCBOVUxMKTsKIAotCS8qIGVuYWJsZSBjbG9jayBpbiBTTVNUUENSMyAqLwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbCgweGU2MTUwMTNjKSAmIH4oMSA8PCAyMiksIDB4ZTYxNTAxM2MpOwotCiAJLyogc2V0dXAgVVNCIHBoeSAqLwogCV9fcmF3X3dyaXRldygweDAyMDAsIDB4ZTYwNTgxMGEpOyAgICAgICAvKiBVU0JDUjEgKi8KIAlfX3Jhd193cml0ZXcoMHgwMGUwLCAweGU2MDU4MWMwKTsgICAgICAgLyogQ1BGQ0ggKi8KQEAgLTI1MywxNiArMzQ4LDU0IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDcxX0tFWUlONV9QVSwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUE9SVDcyX0tFWUlONl9QVSwgTlVMTCk7CiAKKwkvKiBTREhJMCAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTEswLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ0QwLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQwXzEsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMF8yLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDBfMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUNNRDAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElXUDAsIE5VTEwpOworCWdwaW9fcHVsbF91cChHUElPX1NESElEMF9EMCk7CisJZ3Bpb19wdWxsX3VwKEdQSU9fU0RISUQwX0QxKTsKKwlncGlvX3B1bGxfdXAoR1BJT19TREhJRDBfRDIpOworCWdwaW9fcHVsbF91cChHUElPX1NESElEMF9EMyk7CisJZ3Bpb19wdWxsX3VwKEdQSU9fU0RISUNNRDApOworCisJLyogU0RISTEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJQ0xLMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQxXzAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElEMV8xLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TREhJRDFfMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0RISUQxXzMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NESElDTUQxLCBOVUxMKTsKKwlncGlvX3B1bGxfdXAoR1BJT19TREhJRDFfRDApOworCWdwaW9fcHVsbF91cChHUElPX1NESElEMV9EMSk7CisJZ3Bpb19wdWxsX3VwKEdQSU9fU0RISUQxX0QyKTsKKwlncGlvX3B1bGxfdXAoR1BJT19TREhJRDFfRDMpOworCWdwaW9fcHVsbF91cChHUElPX1NESElDTUQxKTsKKwogCXNoNzM3N19hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZzRldm1fZGV2aWNlcywgQVJSQVlfU0laRShnNGV2bV9kZXZpY2VzKSk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBnNGV2bV90aW1lcl9pbml0KHZvaWQpCit7CisJc2g3Mzc3X2Nsb2NrX2luaXQoKTsKKwlzaG1vYmlsZV90aW1lci5pbml0KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGc0ZXZtX3RpbWVyID0geworCS5pbml0CQk9IGc0ZXZtX3RpbWVyX2luaXQsCit9OworCiBNQUNISU5FX1NUQVJUKEc0RVZNLCAiZzRldm0iKQogCS5waHlzX2lvCT0gMHhlNjAwMDAwMCwKIAkuaW9fcGdfb2Zmc3QJPSAoKDB4ZTYwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKIAkubWFwX2lvCQk9IGc0ZXZtX21hcF9pbywKIAkuaW5pdF9pcnEJPSBzaDczNzdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZQk9IGc0ZXZtX2luaXQsCi0JLnRpbWVyCQk9ICZzaG1vYmlsZV90aW1lciwKKwkudGltZXIJCT0gJmc0ZXZtX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzY3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM2Ny5jCmluZGV4IGJiOTQwYzYuLmI2NDU0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzY3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBQcmVsaW1pbmFyeSBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydCBmb3Igc2g3MzY3CisgKiBTSDczNjcgY2xvY2sgZnJhbWV3b3JrIHN1cHBvcnQKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCiAgKgpAQCAtMTcsODcgKzE3LDM0MiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0KLXN0cnVjdCBjbGsgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotfTsKLQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKLWludCBfX2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChfX2Nsa19nZXQpOworLyogU0g3MzY3IHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEZSUUNSICAgIDB4ZTYxNTAwMDAKKyNkZWZpbmUgU1lGUlFDUiAgICAweGU2MTUwMDA0CisjZGVmaW5lIENNRlJRQ1IgICAgMHhlNjE1MDBFMAorI2RlZmluZSBWQ0xLQ1IxICAgIDB4ZTYxNTAwMDgKKyNkZWZpbmUgVkNMS0NSMiAgICAweGU2MTUwMDBDCisjZGVmaW5lIFZDTEtDUjMgICAgMHhlNjE1MDAxQworI2RlZmluZSBTQ0xLQUNSICAgIDB4ZTYxNTAwMTAKKyNkZWZpbmUgU0NMS0JDUiAgICAweGU2MTUwMDE0CisjZGVmaW5lIFNVQlVTQkNLQ1IgMHhlNjE1ODA4MAorI2RlZmluZSBTUFVDS0NSICAgIDB4ZTYxNTAwODQKKyNkZWZpbmUgTVNVQ0tDUiAgICAweGU2MTUwMDg4CisjZGVmaW5lIE1WSTNDS0NSICAgMHhlNjE1MDA5MAorI2RlZmluZSBWT1VDS0NSICAgIDB4ZTYxNTAwOTQKKyNkZWZpbmUgTUZDSzFDUiAgICAweGU2MTUwMDk4CisjZGVmaW5lIE1GQ0syQ1IgICAgMHhlNjE1MDA5QworI2RlZmluZSBQTExDMUNSICAgIDB4ZTYxNTAwMjgKKyNkZWZpbmUgUExMQzJDUiAgICAweGU2MTUwMDJDCisjZGVmaW5lIFJUTVNUUENSMCAgMHhlNjE1ODAzMAorI2RlZmluZSBSVE1TVFBDUjIgIDB4ZTYxNTgwMzgKKyNkZWZpbmUgU1lNU1RQQ1IwICAweGU2MTU4MDQwCisjZGVmaW5lIFNZTVNUUENSMiAgMHhlNjE1ODA0OAorI2RlZmluZSBDTU1TVFBDUjAgIDB4ZTYxNTgwNGMKIAotdm9pZCBfX2Nsa19wdXQoc3RydWN0IGNsayAqY2xrKQotewotfQotRVhQT1JUX1NZTUJPTChfX2Nsa19wdXQpOwotCi0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLXZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrID8gY2xrLT5yYXRlIDogMDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLQotLyogYSBzdGF0aWMgcGVyaXBoZXJhbCBjbG9jayBmb3Igbm93IC0gZW5vdWdoIHRvIGdldCBzaC1zY2kgd29ya2luZyAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGVyaXBoZXJhbF9jbGsgPSB7Ci0JLm5hbWUJICAgID0gInBlcmlwaGVyYWxfY2xrIiwKLQkucmF0ZQkgICAgPSA0ODAwMDAwMCwKLX07Ci0KLS8qIGEgc3RhdGljIHJjbGsgZm9yIG5vdyAtIGVub3VnaCB0byBnZXQgc2hfY210IHdvcmtpbmcgKi8KKy8qIEZpeGVkIDMyIEtIeiByb290IGNsb2NrIGZyb20gRVhUQUxSIHBpbiAqLwogc3RhdGljIHN0cnVjdCBjbGsgcl9jbGsgPSB7Ci0JLm5hbWUJICAgID0gInJfY2xrIiwKLQkucmF0ZQkgICAgPSAzMjc2OCwKKwkucmF0ZSAgICAgICAgICAgPSAzMjc2OCwKIH07CiAKLS8qIGEgc3RhdGljIHVzYjAgZm9yIG5vdyAtIGVub3VnaCB0byBnZXQgcjhhNjY1OTcgd29ya2luZyAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNiMF9jbGsgPSB7Ci0JLm5hbWUJICAgID0gInVzYjAiLAorLyoKKyAqIDI2TUh6IGRlZmF1bHQgcmF0ZSBmb3IgdGhlIEVYVEFMQjEgcm9vdCBpbnB1dCBjbG9jay4KKyAqIElmIG5lZWRlZCwgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUuCisgKi8KK3N0cnVjdCBjbGsgc2g3MzY3X2V4dGFsYjFfY2xrID0geworCS5yYXRlCQk9IDI2NjY2NjY2LAogfTsKIAotLyogYSBzdGF0aWMga2V5c2MwIGNsayBmb3Igbm93IC0gZW5vdWdoIHRvIGdldCBzaF9rZXlzYyB3b3JraW5nICovCi1zdGF0aWMgc3RydWN0IGNsayBrZXlzYzBfY2xrID0gewotCS5uYW1lCSAgICA9ICJrZXlzYzAiLAorLyoKKyAqIDQ4TUh6IGRlZmF1bHQgcmF0ZSBmb3IgdGhlIEVYVEFMMiByb290IGlucHV0IGNsb2NrLgorICogSWYgbmVlZGVkLCByZXNldCB0aGlzIHdpdGggY2xrX3NldF9yYXRlKCkgZnJvbSB0aGUgcGxhdGZvcm0gY29kZS4KKyAqLworc3RydWN0IGNsayBzaDczNjdfZXh0YWwyX2NsayA9IHsKKwkucmF0ZQkJPSA0ODAwMDAwMCwKIH07CiAKKy8qIEEgZml4ZWQgZGl2aWRlLWJ5LTIgYmxvY2sgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpdjJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAyOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgZGl2Ml9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gZGl2Ml9yZWNhbGMsCit9OworCisvKiBEaXZpZGUgZXh0YWxiMSBieSB0d28gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGV4dGFsYjFfZGl2Ml9jbGsgPSB7CisJLm9wcwkJPSAmZGl2Ml9jbGtfb3BzLAorCS5wYXJlbnQJCT0gJnNoNzM2N19leHRhbGIxX2NsaywKK307CisKKy8qIERpdmlkZSBleHRhbDIgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBleHRhbDJfZGl2Ml9jbGsgPSB7CisJLm9wcwkJPSAmZGl2Ml9jbGtfb3BzLAorCS5wYXJlbnQJCT0gJnNoNzM2N19leHRhbDJfY2xrLAorfTsKKworLyogUExMQzEgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbGMxX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBtdWx0ID0gMTsKKworCWlmIChfX3Jhd19yZWFkbChQTExDMUNSKSAmICgxIDw8IDE0KSkKKwkJbXVsdCA9ICgoKF9fcmF3X3JlYWRsKFJURlJRQ1IpID4+IDI0KSAmIDB4M2YpICsgMSkgKiAyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbGMxX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBwbGxjMV9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwbGxjMV9jbGsgPSB7CisJLm9wcwkJPSAmcGxsYzFfY2xrX29wcywKKwkuZmxhZ3MJCT0gQ0xLX0VOQUJMRV9PTl9JTklULAorCS5wYXJlbnQJCT0gJmV4dGFsYjFfZGl2Ml9jbGssCit9OworCisvKiBEaXZpZGUgUExMQzEgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBwbGxjMV9kaXYyX2NsayA9IHsKKwkub3BzCQk9ICZkaXYyX2Nsa19vcHMsCisJLnBhcmVudAkJPSAmcGxsYzFfY2xrLAorfTsKKworLyogUExMQzIgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbGMyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBtdWx0ID0gMTsKKworCWlmIChfX3Jhd19yZWFkbChQTExDMkNSKSAmICgxIDw8IDMxKSkKKwkJbXVsdCA9ICgoKF9fcmF3X3JlYWRsKFBMTEMyQ1IpID4+IDI0KSAmIDB4M2YpICsgMSkgKiAyOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlICogbXVsdDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHBsbGMyX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBwbGxjMl9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwbGxjMl9jbGsgPSB7CisJLm9wcwkJPSAmcGxsYzJfY2xrX29wcywKKwkuZmxhZ3MJCT0gQ0xLX0VOQUJMRV9PTl9JTklULAorCS5wYXJlbnQJCT0gJmV4dGFsYjFfZGl2Ml9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqbWFpbl9jbGtzW10gPSB7CisJJnJfY2xrLAorCSZzaDczNjdfZXh0YWxiMV9jbGssCisJJnNoNzM2N19leHRhbDJfY2xrLAorCSZleHRhbGIxX2RpdjJfY2xrLAorCSZleHRhbDJfZGl2Ml9jbGssCisJJnBsbGMxX2NsaywKKwkmcGxsYzFfZGl2Ml9jbGssCisJJnBsbGMyX2NsaywKK307CisKK3N0YXRpYyB2b2lkIGRpdjRfa2ljayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCS8qIHNldCBLSUNLIGJpdCBpbiBTWUZSUUNSIHRvIHVwZGF0ZSBoYXJkd2FyZSBzZXR0aW5nICovCisJdmFsdWUgPSBfX3Jhd19yZWFkbChTWUZSUUNSKTsKKwl2YWx1ZSB8PSAoMSA8PCAzMSk7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBTWUZSUUNSKTsKK30KKworc3RhdGljIGludCBkaXZpc29yc1tdID0geyAyLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAyNCwgMzIsIDM2LCA0OCwgMCwgNzIsIDAsIDAgfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2X211bHRfdGFibGUgZGl2NF9kaXZfbXVsdF90YWJsZSA9IHsKKwkuZGl2aXNvcnMgPSBkaXZpc29ycywKKwkubnJfZGl2aXNvcnMgPSBBUlJBWV9TSVpFKGRpdmlzb3JzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2RpdjRfdGFibGUgZGl2NF90YWJsZSA9IHsKKwkuZGl2X211bHRfdGFibGUgPSAmZGl2NF9kaXZfbXVsdF90YWJsZSwKKwkua2ljayA9IGRpdjRfa2ljaywKK307CisKK2VudW0geyBESVY0X0ksIERJVjRfRywgRElWNF9TLCBESVY0X0IsCisgICAgICAgRElWNF9aWCwgRElWNF9aVCwgRElWNF9aLCBESVY0X1pELCBESVY0X0hQLAorICAgICAgIERJVjRfWlMsIERJVjRfWkIsIERJVjRfWkIzLCBESVY0X0NQLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KCZwbGxjMV9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdjRfY2xrc1tESVY0X05SXSA9IHsKKwlbRElWNF9JXSA9IERJVjQoUlRGUlFDUiwgMjAsIDB4NmZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9HXSA9IERJVjQoUlRGUlFDUiwgMTYsIDB4NmZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9TXSA9IERJVjQoUlRGUlFDUiwgMTIsIDB4NmZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9CXSA9IERJVjQoUlRGUlFDUiwgOCwgMHg2ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X1pYXSA9IERJVjQoU1lGUlFDUiwgMjAsIDB4NmZmZiwgMCksCisJW0RJVjRfWlRdID0gRElWNChTWUZSUUNSLCAxNiwgMHg2ZmZmLCAwKSwKKwlbRElWNF9aXSA9IERJVjQoU1lGUlFDUiwgMTIsIDB4NmZmZiwgMCksCisJW0RJVjRfWkRdID0gRElWNChTWUZSUUNSLCA4LCAweDZmZmYsIDApLAorCVtESVY0X0hQXSA9IERJVjQoU1lGUlFDUiwgNCwgMHg2ZmZmLCAwKSwKKwlbRElWNF9aU10gPSBESVY0KENNRlJRQ1IsIDEyLCAweDZmZmYsIDApLAorCVtESVY0X1pCXSA9IERJVjQoQ01GUlFDUiwgOCwgMHg2ZmZmLCAwKSwKKwlbRElWNF9aQjNdID0gRElWNChDTUZSUUNSLCA0LCAweDZmZmYsIDApLAorCVtESVY0X0NQXSA9IERJVjQoQ01GUlFDUiwgMCwgMHg2ZmZmLCAwKSwKK307CisKK2VudW0geyBESVY2X1NVQiwgRElWNl9TSVVBLCBESVY2X1NJVUIsIERJVjZfTVNVLCBESVY2X1NQVSwKKyAgICAgICBESVY2X01WSTMsIERJVjZfTUYxLCBESVY2X01GMiwKKyAgICAgICBESVY2X1ZDSzEsIERJVjZfVkNLMiwgRElWNl9WQ0szLCBESVY2X1ZPVSwKKyAgICAgICBESVY2X05SIH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tESVY2X05SXSA9IHsKKwlbRElWNl9TVUJdID0gU0hfQ0xLX0RJVjYoJnNoNzM2N19leHRhbDJfY2xrLCBTVUJVU0JDS0NSLCAwKSwKKwlbRElWNl9TSVVBXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgU0NMS0FDUiwgMCksCisJW0RJVjZfU0lVQl0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFNDTEtCQ1IsIDApLAorCVtESVY2X01TVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIE1TVUNLQ1IsIDApLAorCVtESVY2X1NQVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFNQVUNLQ1IsIDApLAorCVtESVY2X01WSTNdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBNVkkzQ0tDUiwgMCksCisJW0RJVjZfTUYxXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgTUZDSzFDUiwgMCksCisJW0RJVjZfTUYyXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgTUZDSzJDUiwgMCksCisJW0RJVjZfVkNLMV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFZDTEtDUjEsIDApLAorCVtESVY2X1ZDSzJdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBWQ0xLQ1IyLCAwKSwKKwlbRElWNl9WQ0szXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgVkNMS0NSMywgMCksCisJW0RJVjZfVk9VXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgVk9VQ0tDUiwgMCksCit9OworCitlbnVtIHsgUlRNU1RQMDAxLAorICAgICAgIFJUTVNUUDIzMSwgUlRNU1RQMjMwLCBSVE1TVFAyMjksIFJUTVNUUDIyOCwgUlRNU1RQMjI2LAorICAgICAgIFJUTVNUUDIxNiwgUlRNU1RQMjA2LCBSVE1TVFAyMDUsIFJUTVNUUDIwMSwKKyAgICAgICBTWU1TVFAwMjMsIFNZTVNUUDAwNywgU1lNU1RQMDA2LCBTWU1TVFAwMDQsCisgICAgICAgU1lNU1RQMDAzLCBTWU1TVFAwMDIsIFNZTVNUUDAwMSwgU1lNU1RQMDAwLAorICAgICAgIFNZTVNUUDIzMSwgU1lNU1RQMjI5LCBTWU1TVFAyMjUsIFNZTVNUUDIyMywgU1lNU1RQMjIyLAorICAgICAgIFNZTVNUUDIxNSwgU1lNU1RQMjE0LCBTWU1TVFAyMTMsIFNZTVNUUDIxMSwKKyAgICAgICBDTU1TVFAwMDMsCisgICAgICAgTVNUUF9OUiB9OworCisjZGVmaW5lIE1TVFAoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKSBcCisgIFNIX0NMS19NU1RQMzIoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKQorCitzdGF0aWMgc3RydWN0IGNsayBtc3RwX2Nsa3NbTVNUUF9OUl0gPSB7CisJW1JUTVNUUDAwMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBSVE1TVFBDUjAsIDEsIDApLCAvKiBJSUMyICovCisJW1JUTVNUUDIzMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgUlRNU1RQQ1IyLCAzMSwgMCksIC8qIFZFVTMgKi8KKwlbUlRNU1RQMjMwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBSVE1TVFBDUjIsIDMwLCAwKSwgLyogVkVVMiAqLworCVtSVE1TVFAyMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFJUTVNUUENSMiwgMjksIDApLCAvKiBWRVUxICovCisJW1JUTVNUUDIyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgUlRNU1RQQ1IyLCAyOCwgMCksIC8qIFZFVTAgKi8KKwlbUlRNU1RQMjI2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBSVE1TVFBDUjIsIDI2LCAwKSwgLyogVkVVMkggKi8KKwlbUlRNU1RQMjE2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFJUTVNUUENSMiwgMTYsIDApLCAvKiBJSUMwICovCisJW1JUTVNUUDIwNl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgUlRNU1RQQ1IyLCA2LCAwKSwgLyogSlBVICovCisJW1JUTVNUUDIwNV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9WT1VdLCBSVE1TVFBDUjIsIDUsIDApLCAvKiBWT1UgKi8KKwlbUlRNU1RQMjAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBSVE1TVFBDUjIsIDEsIDApLCAvKiBWUFUgKi8KKwlbU1lNU1RQMDIzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NQVV0sIFNZTVNUUENSMCwgMjMsIDApLCAvKiBTUFUxICovCisJW1NZTVNUUDAwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTWU1TVFBDUjAsIDcsIDApLCAvKiBTQ0lGQTUgKi8KKwlbU1lNU1RQMDA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNZTVNUUENSMCwgNiwgMCksIC8qIFNDSUZCICovCisJW1NZTVNUUDAwNF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTWU1TVFBDUjAsIDQsIDApLCAvKiBTQ0lGQTAgKi8KKwlbU1lNU1RQMDAzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNZTVNUUENSMCwgMywgMCksIC8qIFNDSUZBMSAqLworCVtTWU1TVFAwMDJdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU1lNU1RQQ1IwLCAyLCAwKSwgLyogU0NJRkEyICovCisJW1NZTVNUUDAwMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTWU1TVFBDUjAsIDEsIDApLCAvKiBTQ0lGQTMgKi8KKwlbU1lNU1RQMDAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNZTVNUUENSMCwgMCwgMCksIC8qIFNDSUZBNCAqLworCVtTWU1TVFAyMzFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU1lNU1RQQ1IyLCAzMSwgMCksIC8qIFNJVSAqLworCVtTWU1TVFAyMjldID0gTVNUUCgmcl9jbGssIFNZTVNUUENSMiwgMjksIDApLCAvKiBDTVQxMCAqLworCVtTWU1TVFAyMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU1lNU1RQQ1IyLCAyNSwgMCksIC8qIElSREEgKi8KKwlbU1lNU1RQMjIzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNZTVNUUENSMiwgMjMsIDApLCAvKiBJSUMxICovCisJW1NZTVNUUDIyMl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTWU1TVFBDUjIsIDIyLCAwKSwgLyogVVNCSFMgKi8KKwlbU1lNU1RQMjE1XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU1lNU1RQQ1IyLCAxNSwgMCksIC8qIEZMQ1RMICovCisJW1NZTVNUUDIxNF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNZTVNUUENSMiwgMTQsIDApLCAvKiBTREhJMCAqLworCVtTWU1TVFAyMTNdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTWU1TVFBDUjIsIDEzLCAwKSwgLyogU0RISTEgKi8KKwlbU1lNU1RQMjExXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU1lNU1RQQ1IyLCAxMSwgMCksIC8qIFNESEkyICovCisJW0NNTVNUUDAwM10gPSBNU1RQKCZyX2NsaywgQ01NU1RQQ1IwLCAzLCAwKSwgLyogS0VZU0MgKi8KK307CisKKyNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfREVWX0lEKF9pZCwgX2NsaykgeyAuZGV2X2lkID0gX2lkLCAuY2xrID0gX2NsayB9CisKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7Ci0JewotCQkuY2xrID0gJnBlcmlwaGVyYWxfY2xrLAotCX0sIHsKLQkJLmNsayA9ICZyX2NsaywKLQl9LCB7Ci0JCS5jbGsgPSAmdXNiMF9jbGssCi0JfSwgewotCQkuY2xrID0gJmtleXNjMF9jbGssCi0JfQorCS8qIG1haW4gY2xvY2tzICovCisJQ0xLREVWX0NPTl9JRCgicl9jbGsiLCAmcl9jbGspLAorCUNMS0RFVl9DT05fSUQoImV4dGFsYjEiLCAmc2g3MzY3X2V4dGFsYjFfY2xrKSwKKwlDTEtERVZfQ09OX0lEKCJleHRhbDIiLCAmc2g3MzY3X2V4dGFsMl9jbGspLAorCUNMS0RFVl9DT05fSUQoImV4dGFsYjFfZGl2Ml9jbGsiLCAmZXh0YWxiMV9kaXYyX2NsayksCisJQ0xLREVWX0NPTl9JRCgiZXh0YWwyX2RpdjJfY2xrIiwgJmV4dGFsMl9kaXYyX2NsayksCisJQ0xLREVWX0NPTl9JRCgicGxsYzFfY2xrIiwgJnBsbGMxX2NsayksCisJQ0xLREVWX0NPTl9JRCgicGxsYzFfZGl2Ml9jbGsiLCAmcGxsYzFfZGl2Ml9jbGspLAorCUNMS0RFVl9DT05fSUQoInBsbGMyX2NsayIsICZwbGxjMl9jbGspLAorCisJLyogRElWNCBjbG9ja3MgKi8KKwlDTEtERVZfQ09OX0lEKCJpX2NsayIsICZkaXY0X2Nsa3NbRElWNF9JXSksCisJQ0xLREVWX0NPTl9JRCgiZ19jbGsiLCAmZGl2NF9jbGtzW0RJVjRfR10pLAorCUNMS0RFVl9DT05fSUQoImJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0JdKSwKKwlDTEtERVZfQ09OX0lEKCJ6eF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfWlhdKSwKKwlDTEtERVZfQ09OX0lEKCJ6dF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfWlRdKSwKKwlDTEtERVZfQ09OX0lEKCJ6X2NsayIsICZkaXY0X2Nsa3NbRElWNF9aXSksCisJQ0xLREVWX0NPTl9JRCgiemRfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pEXSksCisJQ0xLREVWX0NPTl9JRCgiaHBfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0hQXSksCisJQ0xLREVWX0NPTl9JRCgienNfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pTXSksCisJQ0xLREVWX0NPTl9JRCgiemJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pCXSksCisJQ0xLREVWX0NPTl9JRCgiemIzX2NsayIsICZkaXY0X2Nsa3NbRElWNF9aQjNdKSwKKwlDTEtERVZfQ09OX0lEKCJjcF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfQ1BdKSwKKworCS8qIERJVjYgY2xvY2tzICovCisJQ0xLREVWX0NPTl9JRCgic3ViX2NsayIsICZkaXY2X2Nsa3NbRElWNl9TVUJdKSwKKwlDTEtERVZfQ09OX0lEKCJzaXVhX2NsayIsICZkaXY2X2Nsa3NbRElWNl9TSVVBXSksCisJQ0xLREVWX0NPTl9JRCgic2l1Yl9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfU0lVQl0pLAorCUNMS0RFVl9DT05fSUQoIm1zdV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfTVNVXSksCisJQ0xLREVWX0NPTl9JRCgic3B1X2NsayIsICZkaXY2X2Nsa3NbRElWNl9TUFVdKSwKKwlDTEtERVZfQ09OX0lEKCJtdmkzX2NsayIsICZkaXY2X2Nsa3NbRElWNl9NVkkzXSksCisJQ0xLREVWX0NPTl9JRCgibWYxX2NsayIsICZkaXY2X2Nsa3NbRElWNl9NRjFdKSwKKwlDTEtERVZfQ09OX0lEKCJtZjJfY2xrIiwgJmRpdjZfY2xrc1tESVY2X01GMl0pLAorCUNMS0RFVl9DT05fSUQoInZjazFfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzFdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2syX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0syXSksCisJQ0xLREVWX0NPTl9JRCgidmNrM19jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLM10pLAorCUNMS0RFVl9DT05fSUQoInZvdV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVk9VXSksCisKKwkvKiBNU1RQMzIgY2xvY2tzICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4yIiwgJm1zdHBfY2xrc1tSVE1TVFAwMDFdKSwgLyogSUlDMiAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS40IiwgJm1zdHBfY2xrc1tSVE1TVFAyMzFdKSwgLyogVkVVMyAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4zIiwgJm1zdHBfY2xrc1tSVE1TVFAyMzBdKSwgLyogVkVVMiAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4yIiwgJm1zdHBfY2xrc1tSVE1TVFAyMjldKSwgLyogVkVVMSAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4xIiwgJm1zdHBfY2xrc1tSVE1TVFAyMjhdKSwgLyogVkVVMCAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS41IiwgJm1zdHBfY2xrc1tSVE1TVFAyMjZdKSwgLyogVkVVMkggKi8KKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjAiLCAmbXN0cF9jbGtzW1JUTVNUUDIxNl0pLCAvKiBJSUMwICovCisJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjYiLCAmbXN0cF9jbGtzW1JUTVNUUDIwNl0pLCAvKiBKUFUgKi8KKwlDTEtERVZfREVWX0lEKCJzaC12b3UiLCAmbXN0cF9jbGtzW1JUTVNUUDIwNV0pLCAvKiBWT1UgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMCIsICZtc3RwX2Nsa3NbUlRNU1RQMjAxXSksIC8qIFZQVSAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS43IiwgJm1zdHBfY2xrc1tTWU1TVFAwMjNdKSwgLyogU1BVMSAqLworCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tTWU1TVFAwMDddKSwgLyogU0NJRkE1ICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjYiLCAmbXN0cF9jbGtzW1NZTVNUUDAwNl0pLCAvKiBTQ0lGQiAqLworCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4wIiwgJm1zdHBfY2xrc1tTWU1TVFAwMDRdKSwgLyogU0NJRkEwICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEiLCAmbXN0cF9jbGtzW1NZTVNUUDAwM10pLCAvKiBTQ0lGQTEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbU1lNU1RQMDAyXSksIC8qIFNDSUZBMiAqLworCUNMS0RFVl9ERVZfSUQoInNoLXNjaS4zIiwgJm1zdHBfY2xrc1tTWU1TVFAwMDFdKSwgLyogU0NJRkEzICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjQiLCAmbXN0cF9jbGtzW1NZTVNUUDAwMF0pLCAvKiBTQ0lGQTQgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9zaXUiLCAmbXN0cF9jbGtzW1NZTVNUUDIzMV0pLCAvKiBTSVUgKi8KKwlDTEtERVZfQ09OX0lEKCJjbXQxIiwgJm1zdHBfY2xrc1tTWU1TVFAyMjldKSwgLyogQ01UMTAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9pcmRhIiwgJm1zdHBfY2xrc1tTWU1TVFAyMjVdKSwgLyogSVJEQSAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMSIsICZtc3RwX2Nsa3NbU1lNU1RQMjIzXSksIC8qIElJQzEgKi8KKwlDTEtERVZfREVWX0lEKCJyOGE2NjU5N19oY2QuMCIsICZtc3RwX2Nsa3NbU1lNU1RQMjIyXSksIC8qIFVTQkhTICovCisJQ0xLREVWX0RFVl9JRCgicjhhNjY1OTdfdWRjLjAiLCAmbXN0cF9jbGtzW1NZTVNUUDIyMl0pLCAvKiBVU0JIUyAqLworCUNMS0RFVl9ERVZfSUQoInNoX2ZsY3RsIiwgJm1zdHBfY2xrc1tTWU1TVFAyMTVdKSwgLyogRkxDVEwgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4wIiwgJm1zdHBfY2xrc1tTWU1TVFAyMTRdKSwgLyogU0RISTAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4xIiwgJm1zdHBfY2xrc1tTWU1TVFAyMTNdKSwgLyogU0RISTEgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4yIiwgJm1zdHBfY2xrc1tTWU1TVFAyMTFdKSwgLyogU0RISTIgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9rZXlzYy4wIiwgJm1zdHBfY2xrc1tDTU1TVFAwMDNdKSwgLyogS0VZU0MgKi8KIH07CiAKIHZvaWQgX19pbml0IHNoNzM2N19jbG9ja19pbml0KHZvaWQpCiB7Ci0JaW50IGk7CisJaW50IGssIHJldCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKSB7Ci0JCWxvb2t1cHNbaV0uY29uX2lkID0gbG9va3Vwc1tpXS5jbGstPm5hbWU7Ci0JCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOwotCX0KKwlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQorCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIERJVjZfTlIpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19tc3RwMzJfcmVnaXN0ZXIobXN0cF9jbGtzLCBNU1RQX05SKTsKKworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CisKKwlpZiAoIXJldCkKKwkJY2xrX2luaXQoKTsKKwllbHNlCisJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgc2g3MzY3IGNsb2Nrc1xuIik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRlOWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwpAQCAtMCwwICsxLDU2MCBAQAorLyoKKyAqIFNINzM3MiBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworLyogU0g3MzcyIHJlZ2lzdGVycyAqLworI2RlZmluZSBGUlFDUkEJCTB4ZTYxNTAwMDAKKyNkZWZpbmUgRlJRQ1JCCQkweGU2MTUwMDA0CisjZGVmaW5lIEZSUUNSQwkJMHhlNjE1MDBlMAorI2RlZmluZSBGUlFDUkQJCTB4ZTYxNTAwZTQKKyNkZWZpbmUgVkNMS0NSMQkJMHhlNjE1MDAwOAorI2RlZmluZSBWQ0xLQ1IyCQkweGU2MTUwMDBjCisjZGVmaW5lIFZDTEtDUjMJCTB4ZTYxNTAwMWMKKyNkZWZpbmUgRk1TSUNLQ1IJMHhlNjE1MDAxMAorI2RlZmluZSBGTVNPQ0tDUgkweGU2MTUwMDE0CisjZGVmaW5lIEZTSUFDS0NSCTB4ZTYxNTAwMTgKKyNkZWZpbmUgRlNJQkNLQ1IJMHhlNjE1MDA5MAorI2RlZmluZSBTVUJDS0NSCQkweGU2MTUwMDgwCisjZGVmaW5lIFNQVUNLQ1IJCTB4ZTYxNTAwODQKKyNkZWZpbmUgVk9VQ0tDUgkJMHhlNjE1MDA4OAorI2RlZmluZSBIRE1JQ0tDUgkweGU2MTUwMDk0CisjZGVmaW5lIERTSVRDS0NSCTB4ZTYxNTAwNjAKKyNkZWZpbmUgRFNJMFBDS0NSCTB4ZTYxNTAwNjQKKyNkZWZpbmUgRFNJMVBDS0NSCTB4ZTYxNTAwOTgKKyNkZWZpbmUgUExMQzAxQ1IJMHhlNjE1MDAyOAorI2RlZmluZSBQTExDMkNSCQkweGU2MTUwMDJjCisjZGVmaW5lIFNNU1RQQ1IwCTB4ZTYxNTAxMzAKKyNkZWZpbmUgU01TVFBDUjEJMHhlNjE1MDEzNAorI2RlZmluZSBTTVNUUENSMgkweGU2MTUwMTM4CisjZGVmaW5lIFNNU1RQQ1IzCTB4ZTYxNTAxM2MKKyNkZWZpbmUgU01TVFBDUjQJMHhlNjE1MDE0MAorCisvKiBQbGF0Zm9ybXMgbXVzdCBzZXQgZnJlcXVlbmN5IG9uIHRoZWlyIERWX0NMS0kgcGluICovCitzdHJ1Y3QgY2xrIGR2X2Nsa2lfY2xrID0geworfTsKKworLyogRml4ZWQgMzIgS0h6IHJvb3QgY2xvY2sgZnJvbSBFWFRBTFIgcGluICovCitzdGF0aWMgc3RydWN0IGNsayByX2NsayA9IHsKKwkucmF0ZSAgICAgICAgICAgPSAzMjc2OCwKK307CisKKy8qCisgKiAyNk1IeiBkZWZhdWx0IHJhdGUgZm9yIHRoZSBFWFRBTDEgcm9vdCBpbnB1dCBjbG9jay4KKyAqIElmIG5lZWRlZCwgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUuCisgKi8KK3N0cnVjdCBjbGsgc2g3MzcyX2V4dGFsMV9jbGsgPSB7CisJLnJhdGUJCT0gMjYwMDAwMDAsCit9OworCisvKgorICogNDhNSHogZGVmYXVsdCByYXRlIGZvciB0aGUgRVhUQUwyIHJvb3QgaW5wdXQgY2xvY2suCisgKiBJZiBuZWVkZWQsIHJlc2V0IHRoaXMgd2l0aCBjbGtfc2V0X3JhdGUoKSBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgorICovCitzdHJ1Y3QgY2xrIHNoNzM3Ml9leHRhbDJfY2xrID0geworCS5yYXRlCQk9IDQ4MDAwMDAwLAorfTsKKworLyogQSBmaXhlZCBkaXZpZGUtYnktMiBibG9jayAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZGl2Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIDI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBkaXYyX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBkaXYyX3JlY2FsYywKK307CisKKy8qIERpdmlkZSBkdl9jbGtpIGJ5IHR3byAqLworc3RydWN0IGNsayBkdl9jbGtpX2RpdjJfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZkdl9jbGtpX2NsaywKK307CisKKy8qIERpdmlkZSBleHRhbDEgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBleHRhbDFfZGl2Ml9jbGsgPSB7CisJLm9wcwkJPSAmZGl2Ml9jbGtfb3BzLAorCS5wYXJlbnQJCT0gJnNoNzM3Ml9leHRhbDFfY2xrLAorfTsKKworLyogRGl2aWRlIGV4dGFsMiBieSB0d28gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGV4dGFsMl9kaXYyX2NsayA9IHsKKwkub3BzCQk9ICZkaXYyX2Nsa19vcHMsCisJLnBhcmVudAkJPSAmc2g3MzcyX2V4dGFsMl9jbGssCit9OworCisvKiBEaXZpZGUgZXh0YWwyIGJ5IGZvdXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGV4dGFsMl9kaXY0X2NsayA9IHsKKwkub3BzCQk9ICZkaXYyX2Nsa19vcHMsCisJLnBhcmVudAkJPSAmZXh0YWwyX2RpdjJfY2xrLAorfTsKKworLyogUExMQzAgYW5kIFBMTEMxICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbGxjMDFfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG11bHQgPSAxOworCisJaWYgKF9fcmF3X3JlYWRsKFBMTEMwMUNSKSAmICgxIDw8IDE0KSkKKwkJbXVsdCA9ICgoKF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgPj4gMjQpICYgMHgzZikgKyAxKSAqIDI7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgcGxsYzAxX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBwbGxjMDFfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGxsYzBfY2xrID0geworCS5vcHMJCT0gJnBsbGMwMV9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmZXh0YWwxX2RpdjJfY2xrLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUZSUUNSQywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbGMxX2NsayA9IHsKKwkub3BzCQk9ICZwbGxjMDFfY2xrX29wcywKKwkuZmxhZ3MJCT0gQ0xLX0VOQUJMRV9PTl9JTklULAorCS5wYXJlbnQJCT0gJmV4dGFsMV9kaXYyX2NsaywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilGUlFDUkEsCit9OworCisvKiBEaXZpZGUgUExMQzEgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBwbGxjMV9kaXYyX2NsayA9IHsKKwkub3BzCQk9ICZkaXYyX2Nsa19vcHMsCisJLnBhcmVudAkJPSAmcGxsYzFfY2xrLAorfTsKKworLyogUExMQzIgKi8KKworLyogSW5kaWNlcyBhcmUgaW1wb3J0YW50IC0gdGhleSBhcmUgdGhlIGFjdHVhbCBzcmMgc2VsZWN0aW5nIHZhbHVlcyAqLworc3RhdGljIHN0cnVjdCBjbGsgKnBsbGMyX3BhcmVudFtdID0geworCVswXSA9ICZleHRhbDFfZGl2Ml9jbGssCisJWzFdID0gJmV4dGFsMl9kaXYyX2NsaywKKwlbMl0gPSAmZHZfY2xraV9kaXYyX2NsaywKK307CisKKy8qIE9ubHkgbXVsdGlwbGllcnMgMjAgKiAyIHRvIDQ2ICogMiBhcmUgdmFsaWQsIGxhc3QgZW50cnkgZm9yIENQVUZSRVFfVEFCTEVfRU5EICovCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHBsbGMyX2ZyZXFfdGFibGVbMjldOworCitzdGF0aWMgdm9pZCBwbGxjMl90YWJsZV9yZWJ1aWxkKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKworCS8qIEluaXRpYWxpc2UgUExMQzIgZnJlcXVlbmN5IHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGxsYzJfZnJlcV90YWJsZSkgLSAyOyBpKyspIHsKKwkJcGxsYzJfZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBjbGstPnBhcmVudC0+cmF0ZSAqIChpICsgMjApICogMjsKKwkJcGxsYzJfZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJfQorCisJLyogVGhpcyBpcyBhIHNwZWNpYWwgZW50cnkgLSBzd2l0Y2hpbmcgUExMIG9mZiBtYWtlcyBpdCBhIHJlcGVhdGVyICovCisJcGxsYzJfZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBjbGstPnBhcmVudC0+cmF0ZTsKKwlwbGxjMl9mcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKworCXBsbGMyX2ZyZXFfdGFibGVbKytpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKwlwbGxjMl9mcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsYzJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG11bHQgPSAxOworCisJcGxsYzJfdGFibGVfcmVidWlsZChjbGspOworCisJLyoKKwkgKiBJZiB0aGUgUExMIGlzIG9mZiwgbXVsdCA9PSAxLCBjbGstPnJhdGUgd2lsbCBiZSB1cGRhdGVkIGluCisJICogcGxsYzJfZW5hYmxlKCkuCisJICovCisJaWYgKF9fcmF3X3JlYWRsKFBMTEMyQ1IpICYgKDEgPDwgMzEpKQorCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoUExMQzJDUikgPj4gMjQpICYgMHgzZikgKyAxKSAqIDI7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OworfQorCitzdGF0aWMgbG9uZyBwbGxjMl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGtfcmF0ZV90YWJsZV9yb3VuZChjbGssIGNsay0+ZnJlcV90YWJsZSwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgcGxsYzJfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaTsKKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChQTExDMkNSKSB8IDB4ODAwMDAwMDAsIFBMTEMyQ1IpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQlpZiAoX19yYXdfcmVhZGwoUExMQzJDUikgJiAweDgwMDAwMDAwKSB7CisJCQljbGstPnJhdGUgPSBwbGxjMl9yZWNhbGMoY2xrKTsKKwkJCXJldHVybiAwOworCQl9CisKKwlwcl9lcnIoIiVzKCk6IHRpbWVvdXQhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIHZvaWQgcGxsYzJfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFBMTEMyQ1IpICYgfjB4ODAwMDAwMDAsIFBMTEMyQ1IpOworfQorCitzdGF0aWMgaW50IHBsbGMyX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKKwkJCSAgdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYWxnb19pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWludCBpZHg7CisKKwlpZHggPSBjbGtfcmF0ZV90YWJsZV9maW5kKGNsaywgY2xrLT5mcmVxX3RhYmxlLCByYXRlKTsKKwlpZiAoaWR4IDwgMCkKKwkJcmV0dXJuIGlkeDsKKworCWlmIChyYXRlID09IGNsay0+cGFyZW50LT5yYXRlKSB7CisJCXBsbGMyX2Rpc2FibGUoY2xrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsdWUgPSBfX3Jhd19yZWFkbChQTExDMkNSKSAmIH4oMHgzZiA8PCAyNCk7CisKKwlpZiAodmFsdWUgJiAweDgwMDAwMDAwKQorCQlwbGxjMl9kaXNhYmxlKGNsayk7CisKKwlfX3Jhd193cml0ZWwoKHZhbHVlICYgfjB4ODAwMDAwMDApIHwgKChpZHggKyAxOSkgPDwgMjQpLCBQTExDMkNSKTsKKworCWlmICh2YWx1ZSAmIDB4ODAwMDAwMDApCisJCXJldHVybiBwbGxjMl9lbmFibGUoY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsbGMyX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHZhbHVlOworCWludCByZXQsIGk7CisKKwlpZiAoIWNsay0+cGFyZW50X3RhYmxlIHx8ICFjbGstPnBhcmVudF9udW0pCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2VhcmNoIHRoZSBwYXJlbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2xrLT5wYXJlbnRfbnVtOyBpKyspCisJCWlmIChjbGstPnBhcmVudF90YWJsZVtpXSA9PSBwYXJlbnQpCisJCQlicmVhazsKKworCWlmIChpID09IGNsay0+cGFyZW50X251bSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBjbGtfcmVwYXJlbnQoY2xrLCBwYXJlbnQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdmFsdWUgPSBfX3Jhd19yZWFkbChQTExDMkNSKSAmIH4oMyA8PCA2KTsKKworCV9fcmF3X3dyaXRlbCh2YWx1ZSB8IChpIDw8IDYpLCBQTExDMkNSKTsKKworCS8qIFJlYml1bGQgdGhlIGZyZXF1ZW5jeSB0YWJsZSAqLworCXBsbGMyX3RhYmxlX3JlYnVpbGQoY2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgcGxsYzJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHBsbGMyX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9IHBsbGMyX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gcGxsYzJfc2V0X3JhdGUsCisJLmVuYWJsZQkJPSBwbGxjMl9lbmFibGUsCisJLmRpc2FibGUJPSBwbGxjMl9kaXNhYmxlLAorCS5zZXRfcGFyZW50CT0gcGxsYzJfc2V0X3BhcmVudCwKK307CisKK3N0cnVjdCBjbGsgcGxsYzJfY2xrID0geworCS5vcHMJCT0gJnBsbGMyX2Nsa19vcHMsCisJLmZsYWdzCQk9IENMS19FTkFCTEVfT05fSU5JVCwKKwkucGFyZW50CQk9ICZleHRhbDFfZGl2Ml9jbGssCisJLmZyZXFfdGFibGUJPSBwbGxjMl9mcmVxX3RhYmxlLAorCS5wYXJlbnRfdGFibGUJPSBwbGxjMl9wYXJlbnQsCisJLnBhcmVudF9udW0JPSBBUlJBWV9TSVpFKHBsbGMyX3BhcmVudCksCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqbWFpbl9jbGtzW10gPSB7CisJJmR2X2Nsa2lfY2xrLAorCSZyX2NsaywKKwkmc2g3MzcyX2V4dGFsMV9jbGssCisJJnNoNzM3Ml9leHRhbDJfY2xrLAorCSZkdl9jbGtpX2RpdjJfY2xrLAorCSZleHRhbDFfZGl2Ml9jbGssCisJJmV4dGFsMl9kaXYyX2NsaywKKwkmZXh0YWwyX2RpdjRfY2xrLAorCSZwbGxjMF9jbGssCisJJnBsbGMxX2NsaywKKwkmcGxsYzFfZGl2Ml9jbGssCisJJnBsbGMyX2NsaywKK307CisKK3N0YXRpYyB2b2lkIGRpdjRfa2ljayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKworCS8qIHNldCBLSUNLIGJpdCBpbiBGUlFDUkIgdG8gdXBkYXRlIGhhcmR3YXJlIHNldHRpbmcgKi8KKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKEZSUUNSQik7CisJdmFsdWUgfD0gKDEgPDwgMzEpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgRlJRQ1JCKTsKK30KKworc3RhdGljIGludCBkaXZpc29yc1tdID0geyAyLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDE4LAorCQkJICAyNCwgMzIsIDM2LCA0OCwgMCwgNzIsIDk2LCAwIH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlIGRpdjRfZGl2X211bHRfdGFibGUgPSB7CisJLmRpdmlzb3JzID0gZGl2aXNvcnMsCisJLm5yX2Rpdmlzb3JzID0gQVJSQVlfU0laRShkaXZpc29ycyksCit9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXY0X3RhYmxlIGRpdjRfdGFibGUgPSB7CisJLmRpdl9tdWx0X3RhYmxlID0gJmRpdjRfZGl2X211bHRfdGFibGUsCisJLmtpY2sgPSBkaXY0X2tpY2ssCit9OworCitlbnVtIHsgRElWNF9JLCBESVY0X1pHLCBESVY0X0IsIERJVjRfTTEsIERJVjRfQ1NJUiwKKyAgICAgICBESVY0X1pUUiwgRElWNF9aVCwgRElWNF9aWCwgRElWNF9IUCwKKyAgICAgICBESVY0X0lTUEIsIERJVjRfUywgRElWNF9aQiwgRElWNF9aQjMsIERJVjRfQ1AsCisgICAgICAgRElWNF9ERFJQLCBESVY0X05SIH07CisKKyNkZWZpbmUgRElWNChfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKSBcCisgIFNIX0NMS19ESVY0KCZwbGxjMV9jbGssIF9yZWcsIF9iaXQsIF9tYXNrLCBfZmxhZ3MpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdjRfY2xrc1tESVY0X05SXSA9IHsKKwlbRElWNF9JXSA9IERJVjQoRlJRQ1JBLCAyMCwgMHg2ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X1pHXSA9IERJVjQoRlJRQ1JBLCAxNiwgMHg2ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNChGUlFDUkEsIDgsIDB4NmZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKKwlbRElWNF9NMV0gPSBESVY0KEZSUUNSQSwgNCwgMHg2ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0NTSVJdID0gRElWNChGUlFDUkEsIDAsIDB4NmZmZiwgMCksCisJW0RJVjRfWlRSXSA9IERJVjQoRlJRQ1JCLCAyMCwgMHg2ZmZmLCAwKSwKKwlbRElWNF9aVF0gPSBESVY0KEZSUUNSQiwgMTYsIDB4NmZmZiwgMCksCisJW0RJVjRfWlhdID0gRElWNChGUlFDUkIsIDEyLCAweDZmZmYsIDApLAorCVtESVY0X0hQXSA9IERJVjQoRlJRQ1JCLCA0LCAweDZmZmYsIDApLAorCVtESVY0X0lTUEJdID0gRElWNChGUlFDUkMsIDIwLCAweDZmZmYsIDApLAorCVtESVY0X1NdID0gRElWNChGUlFDUkMsIDEyLCAweDZmZmYsIDApLAorCVtESVY0X1pCXSA9IERJVjQoRlJRQ1JDLCA4LCAweDZmZmYsIDApLAorCVtESVY0X1pCM10gPSBESVY0KEZSUUNSQywgNCwgMHg2ZmZmLCAwKSwKKwlbRElWNF9DUF0gPSBESVY0KEZSUUNSQywgMCwgMHg2ZmZmLCAwKSwKKwlbRElWNF9ERFJQXSA9IERJVjQoRlJRQ1JELCAwLCAweDY3N2MsIDApLAorfTsKKworZW51bSB7IERJVjZfVkNLMSwgRElWNl9WQ0syLCBESVY2X1ZDSzMsIERJVjZfRk1TSSwgRElWNl9GTVNPLAorICAgICAgIERJVjZfRlNJQSwgRElWNl9GU0lCLCBESVY2X1NVQiwgRElWNl9TUFUsCisgICAgICAgRElWNl9WT1UsIERJVjZfRFNJVCwgRElWNl9EU0kwUCwgRElWNl9EU0kxUCwKKyAgICAgICBESVY2X05SIH07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRpdjZfY2xrc1tESVY2X05SXSA9IHsKKwlbRElWNl9WQ0sxXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgVkNMS0NSMSwgMCksCisJW0RJVjZfVkNLMl0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFZDTEtDUjIsIDApLAorCVtESVY2X1ZDSzNdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBWQ0xLQ1IzLCAwKSwKKwlbRElWNl9GTVNJXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgRk1TSUNLQ1IsIDApLAorCVtESVY2X0ZNU09dID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBGTVNPQ0tDUiwgMCksCisJW0RJVjZfRlNJQV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIEZTSUFDS0NSLCAwKSwKKwlbRElWNl9GU0lCXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgRlNJQkNLQ1IsIDApLAorCVtESVY2X1NVQl0gPSBTSF9DTEtfRElWNigmc2g3MzcyX2V4dGFsMl9jbGssIFNVQkNLQ1IsIDApLAorCVtESVY2X1NQVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFNQVUNLQ1IsIDApLAorCVtESVY2X1ZPVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFZPVUNLQ1IsIDApLAorCVtESVY2X0RTSVRdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBEU0lUQ0tDUiwgMCksCisJW0RJVjZfRFNJMFBdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBEU0kwUENLQ1IsIDApLAorCVtESVY2X0RTSTFQXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgRFNJMVBDS0NSLCAwKSwKK307CisKK2VudW0geyBESVY2X0hETUksIERJVjZfUkVQQVJFTlRfTlIgfTsKKworLyogSW5kaWNlcyBhcmUgaW1wb3J0YW50IC0gdGhleSBhcmUgdGhlIGFjdHVhbCBzcmMgc2VsZWN0aW5nIHZhbHVlcyAqLworc3RhdGljIHN0cnVjdCBjbGsgKmhkbWlfcGFyZW50W10gPSB7CisJWzBdID0gJnBsbGMxX2RpdjJfY2xrLAorCVsxXSA9ICZwbGxjMl9jbGssCisJWzJdID0gJmR2X2Nsa2lfY2xrLAorCVszXSA9IE5VTEwsCS8qIHBsbGMyX2RpdjQgbm90IGltcGxlbWVudGVkIHlldCAqLworfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfUkVQQVJFTlRfTlJdID0geworCVtESVY2X0hETUldID0gU0hfQ0xLX0RJVjZfRVhUKCZwbGxjMV9kaXYyX2NsaywgSERNSUNLQ1IsIDAsCisJCQkJICAgICAgaGRtaV9wYXJlbnQsIEFSUkFZX1NJWkUoaGRtaV9wYXJlbnQpLCA2LCAyKSwKK307CisKK2VudW0geyBNU1RQMDAxLAorICAgICAgIE1TVFAxMzEsIE1TVFAxMzAsCisgICAgICAgTVNUUDEyOSwgTVNUUDEyOCwKKyAgICAgICBNU1RQMTE4LCBNU1RQMTE3LCBNU1RQMTE2LAorICAgICAgIE1TVFAxMDYsIE1TVFAxMDEsIE1TVFAxMDAsCisgICAgICAgTVNUUDIyMywKKyAgICAgICBNU1RQMjA3LCBNU1RQMjA2LCBNU1RQMjA0LCBNU1RQMjAzLCBNU1RQMjAyLCBNU1RQMjAxLCBNU1RQMjAwLAorICAgICAgIE1TVFAzMjksIE1TVFAzMjgsIE1TVFAzMjMsIE1TVFAzMjIsIE1TVFAzMTQsIE1TVFAzMTMsIE1TVFAzMTIsCisgICAgICAgTVNUUDQxNSwgTVNUUDQxMywgTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwNiwgTVNUUDQwMywKKyAgICAgICBNU1RQX05SIH07CisKKyNkZWZpbmUgTVNUUChfcGFyZW50LCBfcmVnLCBfYml0LCBfZmxhZ3MpIFwKKyAgU0hfQ0xLX01TVFAzMihfcGFyZW50LCBfcmVnLCBfYml0LCBfZmxhZ3MpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zdHBfY2xrc1tNU1RQX05SXSA9IHsKKwlbTVNUUDAwMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMCwgMSwgMCksIC8qIElJQzIgKi8KKwlbTVNUUDEzMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDMxLCAwKSwgLyogVkVVMyAqLworCVtNU1RQMTMwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMzAsIDApLCAvKiBWRVUyICovCisJW01TVFAxMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAyOSwgMCksIC8qIFZFVTEgKi8KKwlbTVNUUDEyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI4LCAwKSwgLyogVkVVMCAqLworCVtNU1RQMTE4XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMTgsIDApLCAvKiBEU0lUWCAqLworCVtNU1RQMTE3XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMTcsIDApLCAvKiBMQ0RDMSAqLworCVtNU1RQMTE2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAxNiwgMCksIC8qIElJQzAgKi8KKwlbTVNUUDEwNl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDYsIDApLCAvKiBKUFUgKi8KKwlbTVNUUDEwMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9NMV0sIFNNU1RQQ1IxLCAxLCAwKSwgLyogVlBVICovCisJW01TVFAxMDBdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAwLCAwKSwgLyogTENEQzAgKi8KKwlbTVNUUDIyM10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TUFVdLCBTTVNUUENSMiwgMjMsIDApLCAvKiBTUFUyICovCisJW01TVFAyMDddID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDcsIDApLCAvKiBTQ0lGQTUgKi8KKwlbTVNUUDIwNl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNiwgMCksIC8qIFNDSUZCICovCisJW01TVFAyMDRdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDQsIDApLCAvKiBTQ0lGQTAgKi8KKwlbTVNUUDIwM10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMywgMCksIC8qIFNDSUZBMSAqLworCVtNU1RQMjAyXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAyLCAwKSwgLyogU0NJRkEyICovCisJW01TVFAyMDFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDEsIDApLCAvKiBTQ0lGQTMgKi8KKwlbTVNUUDIwMF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMCwgMCksIC8qIFNDSUZBNCAqLworCVtNU1RQMzI5XSA9IE1TVFAoJnJfY2xrLCBTTVNUUENSMywgMjksIDApLCAvKiBDTVQxMCAqLworCVtNU1RQMzI4XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NQVV0sIFNNU1RQQ1IzLCAyOCwgQ0xLX0VOQUJMRV9PTl9JTklUKSwgLyogRlNJQSAqLworCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IzLCAyMywgMCksIC8qIElJQzEgKi8KKwlbTVNUUDMyMl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMywgMjIsIDApLCAvKiBVU0IwICovCisJW01TVFAzMTRdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMywgMTQsIDApLCAvKiBTREhJMCAqLworCVtNU1RQMzEzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEzLCAwKSwgLyogU0RISTEgKi8KKwlbTVNUUDMxMl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAxMiwgMCksIC8qIE1NQyAqLworCVtNU1RQNDE1XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjQsIDE1LCAwKSwgLyogU0RISTIgKi8KKwlbTVNUUDQxM10gPSBNU1RQKCZwbGxjMV9kaXYyX2NsaywgU01TVFBDUjQsIDEzLCAwKSwgLyogSERNSSAqLworCVtNU1RQNDExXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1I0LCAxMSwgMCksIC8qIElJQzMgKi8KKwlbTVNUUDQxMF0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSNCwgMTAsIDApLCAvKiBJSUM0ICovCisJW01TVFA0MDZdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjQsIDYsIDApLCAvKiBVU0IxICovCisJW01TVFA0MDNdID0gTVNUUCgmcl9jbGssIFNNU1RQQ1I0LCAzLCAwKSwgLyogS0VZU0MgKi8KK307CisKKyNkZWZpbmUgQ0xLREVWX0NPTl9JRChfaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfREVWX0lEKF9pZCwgX2NsaykgeyAuZGV2X2lkID0gX2lkLCAuY2xrID0gX2NsayB9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJLyogbWFpbiBjbG9ja3MgKi8KKwlDTEtERVZfQ09OX0lEKCJkdl9jbGtpX2RpdjJfY2xrIiwgJmR2X2Nsa2lfZGl2Ml9jbGspLAorCUNMS0RFVl9DT05fSUQoInJfY2xrIiwgJnJfY2xrKSwKKwlDTEtERVZfQ09OX0lEKCJleHRhbDEiLCAmc2g3MzcyX2V4dGFsMV9jbGspLAorCUNMS0RFVl9DT05fSUQoImV4dGFsMiIsICZzaDczNzJfZXh0YWwyX2NsayksCisJQ0xLREVWX0NPTl9JRCgiZXh0YWwxX2RpdjJfY2xrIiwgJmV4dGFsMV9kaXYyX2NsayksCisJQ0xLREVWX0NPTl9JRCgiZXh0YWwyX2RpdjJfY2xrIiwgJmV4dGFsMl9kaXYyX2NsayksCisJQ0xLREVWX0NPTl9JRCgiZXh0YWwyX2RpdjRfY2xrIiwgJmV4dGFsMl9kaXY0X2NsayksCisJQ0xLREVWX0NPTl9JRCgicGxsYzBfY2xrIiwgJnBsbGMwX2NsayksCisJQ0xLREVWX0NPTl9JRCgicGxsYzFfY2xrIiwgJnBsbGMxX2NsayksCisJQ0xLREVWX0NPTl9JRCgicGxsYzFfZGl2Ml9jbGsiLCAmcGxsYzFfZGl2Ml9jbGspLAorCUNMS0RFVl9DT05fSUQoInBsbGMyX2NsayIsICZwbGxjMl9jbGspLAorCisJLyogRElWNCBjbG9ja3MgKi8KKwlDTEtERVZfQ09OX0lEKCJpX2NsayIsICZkaXY0X2Nsa3NbRElWNF9JXSksCisJQ0xLREVWX0NPTl9JRCgiemdfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pHXSksCisJQ0xLREVWX0NPTl9JRCgiYl9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfQl0pLAorCUNMS0RFVl9DT05fSUQoIm0xX2NsayIsICZkaXY0X2Nsa3NbRElWNF9NMV0pLAorCUNMS0RFVl9DT05fSUQoImNzaXJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0NTSVJdKSwKKwlDTEtERVZfQ09OX0lEKCJ6dHJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pUUl0pLAorCUNMS0RFVl9DT05fSUQoInp0X2NsayIsICZkaXY0X2Nsa3NbRElWNF9aVF0pLAorCUNMS0RFVl9DT05fSUQoInp4X2NsayIsICZkaXY0X2Nsa3NbRElWNF9aWF0pLAorCUNMS0RFVl9DT05fSUQoImhwX2NsayIsICZkaXY0X2Nsa3NbRElWNF9IUF0pLAorCUNMS0RFVl9DT05fSUQoImlzcGJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0lTUEJdKSwKKwlDTEtERVZfQ09OX0lEKCJzX2NsayIsICZkaXY0X2Nsa3NbRElWNF9TXSksCisJQ0xLREVWX0NPTl9JRCgiemJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pCXSksCisJQ0xLREVWX0NPTl9JRCgiemIzX2NsayIsICZkaXY0X2Nsa3NbRElWNF9aQjNdKSwKKwlDTEtERVZfQ09OX0lEKCJjcF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfQ1BdKSwKKwlDTEtERVZfQ09OX0lEKCJkZHJwX2NsayIsICZkaXY0X2Nsa3NbRElWNF9ERFJQXSksCisKKwkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9DT05fSUQoInZjazFfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzFdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2syX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0syXSksCisJQ0xLREVWX0NPTl9JRCgidmNrM19jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLM10pLAorCUNMS0RFVl9DT05fSUQoImZtc2lfY2xrIiwgJmRpdjZfY2xrc1tESVY2X0ZNU0ldKSwKKwlDTEtERVZfQ09OX0lEKCJmbXNvX2NsayIsICZkaXY2X2Nsa3NbRElWNl9GTVNPXSksCisJQ0xLREVWX0NPTl9JRCgiZnNpYV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfRlNJQV0pLAorCUNMS0RFVl9DT05fSUQoImZzaWJfY2xrIiwgJmRpdjZfY2xrc1tESVY2X0ZTSUJdKSwKKwlDTEtERVZfQ09OX0lEKCJzdWJfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1NVQl0pLAorCUNMS0RFVl9DT05fSUQoInNwdV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfU1BVXSksCisJQ0xLREVWX0NPTl9JRCgidm91X2NsayIsICZkaXY2X2Nsa3NbRElWNl9WT1VdKSwKKwlDTEtERVZfQ09OX0lEKCJoZG1pX2NsayIsICZkaXY2X3JlcGFyZW50X2Nsa3NbRElWNl9IRE1JXSksCisJQ0xLREVWX0NPTl9JRCgiZHNpdF9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9DT05fSUQoImRzaTBwX2NsayIsICZkaXY2X2Nsa3NbRElWNl9EU0kwUF0pLAorCUNMS0RFVl9DT05fSUQoImRzaTFwX2NsayIsICZkaXY2X2Nsa3NbRElWNl9EU0kxUF0pLAorCisJLyogTVNUUDMyIGNsb2NrcyAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMiIsICZtc3RwX2Nsa3NbTVNUUDAwMV0pLCAvKiBJSUMyICovCisJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjQiLCAmbXN0cF9jbGtzW01TVFAxMzFdKSwgLyogVkVVMyAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4zIiwgJm1zdHBfY2xrc1tNU1RQMTMwXSksIC8qIFZFVTIgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMiIsICZtc3RwX2Nsa3NbTVNUUDEyOV0pLCAvKiBWRVUxICovCisJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjEiLCAmbXN0cF9jbGtzW01TVFAxMjhdKSwgLyogVkVVMCAqLworCUNMS0RFVl9ERVZfSUQoInNoLW1pcGktZHNpLjAiLCAmbXN0cF9jbGtzW01TVFAxMThdKSwgLyogRFNJVFggKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4xIiwgJm1zdHBfY2xrc1tNU1RQMTE3XSksIC8qIExDREMxICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIElJQzAgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNSIsICZtc3RwX2Nsa3NbTVNUUDEwNl0pLCAvKiBKUFUgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMCIsICZtc3RwX2Nsa3NbTVNUUDEwMV0pLCAvKiBWUFUgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIExDREMwICovCisJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjYiLCAmbXN0cF9jbGtzW01TVFAyMjNdKSwgLyogU1BVMkRTUDAgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNyIsICZtc3RwX2Nsa3NbTVNUUDIyM10pLCAvKiBTUFUyRFNQMSAqLworCUNMS0RFVl9ERVZfSUQoInNoLXNjaS41IiwgJm1zdHBfY2xrc1tNU1RQMjA3XSksIC8qIFNDSUZBNSAqLworCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMjA2XSksIC8qIFNDSUZCICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjAiLCAmbXN0cF9jbGtzW01TVFAyMDRdKSwgLyogU0NJRkEwICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjEiLCAmbXN0cF9jbGtzW01TVFAyMDNdKSwgLyogU0NJRkExICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjIiLCAmbXN0cF9jbGtzW01TVFAyMDJdKSwgLyogU0NJRkEyICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjMiLCAmbXN0cF9jbGtzW01TVFAyMDFdKSwgLyogU0NJRkEzICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjQiLCAmbXN0cF9jbGtzW01TVFAyMDBdKSwgLyogU0NJRkE0ICovCisJQ0xLREVWX0NPTl9JRCgiY210MSIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2ZzaTIiLCAmbXN0cF9jbGtzW01TVFAzMjhdKSwgLyogRlNJMiAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMSIsICZtc3RwX2Nsa3NbTVNUUDMyM10pLCAvKiBJSUMxICovCisJQ0xLREVWX0RFVl9JRCgicjhhNjY1OTdfaGNkLjAiLCAmbXN0cF9jbGtzW01TVFAzMjNdKSwgLyogVVNCMCAqLworCUNMS0RFVl9ERVZfSUQoInI4YTY2NTk3X3VkYy4wIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIFVTQjAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4wIiwgJm1zdHBfY2xrc1tNU1RQMzE0XSksIC8qIFNESEkwICovCisJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMSIsICZtc3RwX2Nsa3NbTVNUUDMxM10pLCAvKiBTREhJMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX21tY2lmLjAiLCAmbXN0cF9jbGtzW01TVFAzMTJdKSwgLyogTU1DICovCisJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMiIsICZtc3RwX2Nsa3NbTVNUUDQxNV0pLCAvKiBTREhJMiAqLworCUNMS0RFVl9ERVZfSUQoInNoLW1vYmlsZS1oZG1pIiwgJm1zdHBfY2xrc1tNU1RQNDEzXSksIC8qIEhETUkgKi8KKwlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjMiLCAmbXN0cF9jbGtzW01TVFA0MTFdKSwgLyogSUlDMyAqLworCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuNCIsICZtc3RwX2Nsa3NbTVNUUDQxMF0pLCAvKiBJSUM0ICovCisJQ0xLREVWX0RFVl9JRCgicjhhNjY1OTdfaGNkLjEiLCAmbXN0cF9jbGtzW01TVFA0MDZdKSwgLyogVVNCMSAqLworCUNMS0RFVl9ERVZfSUQoInI4YTY2NTk3X3VkYy4xIiwgJm1zdHBfY2xrc1tNU1RQNDA2XSksIC8qIFVTQjEgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9rZXlzYy4wIiwgJm1zdHBfY2xrc1tNU1RQNDAzXSksIC8qIEtFWVNDICovCisJey5jb25faWQgPSAiaWNrIiwgLmRldl9pZCA9ICJzaC1tb2JpbGUtaGRtaSIsIC5jbGsgPSAmZGl2Nl9yZXBhcmVudF9jbGtzW0RJVjZfSERNSV19LAorfTsKKwordm9pZCBfX2luaXQgc2g3MzcyX2Nsb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgaywgcmV0ID0gMDsKKworCWZvciAoayA9IDA7ICFyZXQgJiYgKGsgPCBBUlJBWV9TSVpFKG1haW5fY2xrcykpOyBrKyspCisJCXJldCA9IGNsa19yZWdpc3RlcihtYWluX2Nsa3Nba10pOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY0X3JlZ2lzdGVyKGRpdjRfY2xrcywgRElWNF9OUiwgJmRpdjRfdGFibGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKGRpdjZfY2xrcywgRElWNl9OUik7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gc2hfY2xrX2RpdjZfcmVwYXJlbnRfcmVnaXN0ZXIoZGl2Nl9yZXBhcmVudF9jbGtzLCBESVY2X05SKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfbXN0cDMyX3JlZ2lzdGVyKG1zdHBfY2xrcywgTVNUUF9OUik7CisKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOworCisJaWYgKCFyZXQpCisJCWNsa19pbml0KCk7CisJZWxzZQorCQlwYW5pYygiZmFpbGVkIHRvIHNldHVwIHNoNzM3MiBjbG9ja3NcbiIpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDA3YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzcuYwpAQCAtMCwwICsxLDM2OSBAQAorLyoKKyAqIFNINzM3NyBjbG9jayBmcmFtZXdvcmsgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworLyogU0g3Mzc3IHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEZSUUNSICAgIDB4ZTYxNTAwMDAKKyNkZWZpbmUgU1lGUlFDUiAgICAweGU2MTUwMDA0CisjZGVmaW5lIENNRlJRQ1IgICAgMHhlNjE1MDBFMAorI2RlZmluZSBWQ0xLQ1IxICAgIDB4ZTYxNTAwMDgKKyNkZWZpbmUgVkNMS0NSMiAgICAweGU2MTUwMDBDCisjZGVmaW5lIFZDTEtDUjMgICAgMHhlNjE1MDAxQworI2RlZmluZSBGTVNJQ0tDUiAgIDB4ZTYxNTAwMTAKKyNkZWZpbmUgRk1TT0NLQ1IgICAweGU2MTUwMDE0CisjZGVmaW5lIEZTSUNLQ1IgICAgMHhlNjE1MDAxOAorI2RlZmluZSBQTExDMUNSICAgIDB4ZTYxNTAwMjgKKyNkZWZpbmUgUExMQzJDUiAgICAweGU2MTUwMDJDCisjZGVmaW5lIFNVQlVTQkNLQ1IgMHhlNjE1MDA4MAorI2RlZmluZSBTUFVDS0NSICAgIDB4ZTYxNTAwODQKKyNkZWZpbmUgTVNVQ0tDUiAgICAweGU2MTUwMDg4CisjZGVmaW5lIE1WSTNDS0NSICAgMHhlNjE1MDA5MAorI2RlZmluZSBIRE1JQ0tDUiAgIDB4ZTYxNTAwOTQKKyNkZWZpbmUgTUZDSzFDUiAgICAweGU2MTUwMDk4CisjZGVmaW5lIE1GQ0syQ1IgICAgMHhlNjE1MDA5QworI2RlZmluZSBEU0lUQ0tDUiAgIDB4ZTYxNTAwNjAKKyNkZWZpbmUgRFNJUENLQ1IgICAweGU2MTUwMDY0CisjZGVmaW5lIFNNU1RQQ1IwICAgMHhlNjE1MDEzMAorI2RlZmluZSBTTVNUUENSMSAgIDB4ZTYxNTAxMzQKKyNkZWZpbmUgU01TVFBDUjIgICAweGU2MTUwMTM4CisjZGVmaW5lIFNNU1RQQ1IzICAgMHhlNjE1MDEzQworI2RlZmluZSBTTVNUUENSNCAgIDB4ZTYxNTAxNDAKKworLyogRml4ZWQgMzIgS0h6IHJvb3QgY2xvY2sgZnJvbSBFWFRBTFIgcGluICovCitzdGF0aWMgc3RydWN0IGNsayByX2NsayA9IHsKKwkucmF0ZSAgICAgICAgICAgPSAzMjc2OCwKK307CisKKy8qCisgKiAyNk1IeiBkZWZhdWx0IHJhdGUgZm9yIHRoZSBFWFRBTEMxIHJvb3QgaW5wdXQgY2xvY2suCisgKiBJZiBuZWVkZWQsIHJlc2V0IHRoaXMgd2l0aCBjbGtfc2V0X3JhdGUoKSBmcm9tIHRoZSBwbGF0Zm9ybSBjb2RlLgorICovCitzdHJ1Y3QgY2xrIHNoNzM3N19leHRhbGMxX2NsayA9IHsKKwkucmF0ZQkJPSAyNjY2NjY2NiwKK307CisKKy8qCisgKiA0OE1IeiBkZWZhdWx0IHJhdGUgZm9yIHRoZSBFWFRBTDIgcm9vdCBpbnB1dCBjbG9jay4KKyAqIElmIG5lZWRlZCwgcmVzZXQgdGhpcyB3aXRoIGNsa19zZXRfcmF0ZSgpIGZyb20gdGhlIHBsYXRmb3JtIGNvZGUuCisgKi8KK3N0cnVjdCBjbGsgc2g3Mzc3X2V4dGFsMl9jbGsgPSB7CisJLnJhdGUJCT0gNDgwMDAwMDAsCit9OworCisvKiBBIGZpeGVkIGRpdmlkZS1ieS0yIGJsb2NrICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkaXYyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gMjsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGRpdjJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGRpdjJfcmVjYWxjLAorfTsKKworLyogRGl2aWRlIGV4dGFsYzEgYnkgdHdvICovCitzdGF0aWMgc3RydWN0IGNsayBleHRhbGMxX2RpdjJfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZzaDczNzdfZXh0YWxjMV9jbGssCit9OworCisvKiBEaXZpZGUgZXh0YWwyIGJ5IHR3byAqLworc3RhdGljIHN0cnVjdCBjbGsgZXh0YWwyX2RpdjJfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZzaDczNzdfZXh0YWwyX2NsaywKK307CisKKy8qIERpdmlkZSBleHRhbDIgYnkgZm91ciAqLworc3RhdGljIHN0cnVjdCBjbGsgZXh0YWwyX2RpdjRfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZleHRhbDJfZGl2Ml9jbGssCit9OworCisvKiBQTExDMSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsYzFfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG11bHQgPSAxOworCisJaWYgKF9fcmF3X3JlYWRsKFBMTEMxQ1IpICYgKDEgPDwgMTQpKQorCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoUlRGUlFDUikgPj4gMjQpICYgMHgzZikgKyAxKSAqIDI7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgcGxsYzFfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHBsbGMxX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbGMxX2NsayA9IHsKKwkub3BzCQk9ICZwbGxjMV9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmZXh0YWxjMV9kaXYyX2NsaywKK307CisKKy8qIERpdmlkZSBQTExDMSBieSB0d28gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbGMxX2RpdjJfY2xrID0geworCS5vcHMJCT0gJmRpdjJfY2xrX29wcywKKwkucGFyZW50CQk9ICZwbGxjMV9jbGssCit9OworCisvKiBQTExDMiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsYzJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG11bHQgPSAxOworCisJaWYgKF9fcmF3X3JlYWRsKFBMTEMyQ1IpICYgKDEgPDwgMzEpKQorCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoUExMQzJDUikgPj4gMjQpICYgMHgzZikgKyAxKSAqIDI7CisKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgKiBtdWx0OworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgcGxsYzJfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHBsbGMyX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbGMyX2NsayA9IHsKKwkub3BzCQk9ICZwbGxjMl9jbGtfb3BzLAorCS5mbGFncwkJPSBDTEtfRU5BQkxFX09OX0lOSVQsCisJLnBhcmVudAkJPSAmZXh0YWxjMV9kaXYyX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICptYWluX2Nsa3NbXSA9IHsKKwkmcl9jbGssCisJJnNoNzM3N19leHRhbGMxX2NsaywKKwkmc2g3Mzc3X2V4dGFsMl9jbGssCisJJmV4dGFsYzFfZGl2Ml9jbGssCisJJmV4dGFsMl9kaXYyX2NsaywKKwkmZXh0YWwyX2RpdjRfY2xrLAorCSZwbGxjMV9jbGssCisJJnBsbGMxX2RpdjJfY2xrLAorCSZwbGxjMl9jbGssCit9OworCitzdGF0aWMgdm9pZCBkaXY0X2tpY2soc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwkvKiBzZXQgS0lDSyBiaXQgaW4gU1lGUlFDUiB0byB1cGRhdGUgaGFyZHdhcmUgc2V0dGluZyAqLworCXZhbHVlID0gX19yYXdfcmVhZGwoU1lGUlFDUik7CisJdmFsdWUgfD0gKDEgPDwgMzEpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgU1lGUlFDUik7Cit9CisKK3N0YXRpYyBpbnQgZGl2aXNvcnNbXSA9IHsgMiwgMywgNCwgNiwgOCwgMTIsIDE2LCAxOCwKKwkJCSAgMjQsIDMyLCAzNiwgNDgsIDAsIDcyLCA5NiwgMCB9OworCitzdGF0aWMgc3RydWN0IGNsa19kaXZfbXVsdF90YWJsZSBkaXY0X2Rpdl9tdWx0X3RhYmxlID0geworCS5kaXZpc29ycyA9IGRpdmlzb3JzLAorCS5ucl9kaXZpc29ycyA9IEFSUkFZX1NJWkUoZGl2aXNvcnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfZGl2NF90YWJsZSBkaXY0X3RhYmxlID0geworCS5kaXZfbXVsdF90YWJsZSA9ICZkaXY0X2Rpdl9tdWx0X3RhYmxlLAorCS5raWNrID0gZGl2NF9raWNrLAorfTsKKworZW51bSB7IERJVjRfSSwgRElWNF9aRywgRElWNF9CLCBESVY0X00xLCBESVY0X0NTSVIsCisgICAgICAgRElWNF9aVFIsIERJVjRfWlQsIERJVjRfWiwgRElWNF9IUCwKKyAgICAgICBESVY0X1pTLCBESVY0X1pCLCBESVY0X1pCMywgRElWNF9DUCwgRElWNF9OUiB9OworCisjZGVmaW5lIERJVjQoX3JlZywgX2JpdCwgX21hc2ssIF9mbGFncykgXAorICBTSF9DTEtfRElWNCgmcGxsYzFfY2xrLCBfcmVnLCBfYml0LCBfbWFzaywgX2ZsYWdzKQorCitzdGF0aWMgc3RydWN0IGNsayBkaXY0X2Nsa3NbRElWNF9OUl0gPSB7CisJW0RJVjRfSV0gPSBESVY0KFJURlJRQ1IsIDIwLCAweDZmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfWkddID0gRElWNChSVEZSUUNSLCAxNiwgMHg2ZmZmLCBDTEtfRU5BQkxFX09OX0lOSVQpLAorCVtESVY0X0JdID0gRElWNChSVEZSUUNSLCA4LCAweDZmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfTTFdID0gRElWNChSVEZSUUNSLCA0LCAweDZmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfQ1NJUl0gPSBESVY0KFJURlJRQ1IsIDAsIDB4NmZmZiwgMCksCisJW0RJVjRfWlRSXSA9IERJVjQoU1lGUlFDUiwgMjAsIDB4NmZmZiwgMCksCisJW0RJVjRfWlRdID0gRElWNChTWUZSUUNSLCAxNiwgMHg2ZmZmLCAwKSwKKwlbRElWNF9aXSA9IERJVjQoU1lGUlFDUiwgMTIsIDB4NmZmZiwgMCksCisJW0RJVjRfSFBdID0gRElWNChTWUZSUUNSLCA0LCAweDZmZmYsIDApLAorCVtESVY0X1pTXSA9IERJVjQoQ01GUlFDUiwgMTIsIDB4NmZmZiwgMCksCisJW0RJVjRfWkJdID0gRElWNChDTUZSUUNSLCA4LCAweDZmZmYsIDApLAorCVtESVY0X1pCM10gPSBESVY0KENNRlJRQ1IsIDQsIDB4NmZmZiwgMCksCisJW0RJVjRfQ1BdID0gRElWNChDTUZSUUNSLCAwLCAweDZmZmYsIDApLAorfTsKKworZW51bSB7IERJVjZfVkNLMSwgRElWNl9WQ0syLCBESVY2X1ZDSzMsIERJVjZfRk1TSSwgRElWNl9GTVNPLAorICAgICAgIERJVjZfRlNJLCBESVY2X1NVQiwgRElWNl9TUFUsIERJVjZfTVNVLCBESVY2X01WSTMsIERJVjZfSERNSSwKKyAgICAgICBESVY2X01GMSwgRElWNl9NRjIsIERJVjZfRFNJVCwgRElWNl9EU0lQLAorICAgICAgIERJVjZfTlIgfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGl2Nl9jbGtzW10gPSB7CisJW0RJVjZfVkNLMV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFZDTEtDUjEsIDApLAorCVtESVY2X1ZDSzJdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBWQ0xLQ1IyLCAwKSwKKwlbRElWNl9WQ0szXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgVkNMS0NSMywgMCksCisJW0RJVjZfRk1TSV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIEZNU0lDS0NSLCAwKSwKKwlbRElWNl9GTVNPXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgRk1TT0NLQ1IsIDApLAorCVtESVY2X0ZTSV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIEZTSUNLQ1IsIDApLAorCVtESVY2X1NVQl0gPSBTSF9DTEtfRElWNigmc2g3Mzc3X2V4dGFsMl9jbGssIFNVQlVTQkNLQ1IsIDApLAorCVtESVY2X1NQVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIFNQVUNLQ1IsIDApLAorCVtESVY2X01TVV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIE1TVUNLQ1IsIDApLAorCVtESVY2X01WSTNdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBNVkkzQ0tDUiwgMCksCisJW0RJVjZfSERNSV0gPSBTSF9DTEtfRElWNigmcGxsYzFfZGl2Ml9jbGssIEhETUlDS0NSLCAwKSwKKwlbRElWNl9NRjFdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBNRkNLMUNSLCAwKSwKKwlbRElWNl9NRjJdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBNRkNLMkNSLCAwKSwKKwlbRElWNl9EU0lUXSA9IFNIX0NMS19ESVY2KCZwbGxjMV9kaXYyX2NsaywgRFNJVENLQ1IsIDApLAorCVtESVY2X0RTSVBdID0gU0hfQ0xLX0RJVjYoJnBsbGMxX2RpdjJfY2xrLCBEU0lQQ0tDUiwgMCksCit9OworCitlbnVtIHsgTVNUUDAwMSwKKyAgICAgICBNU1RQMTMxLCBNU1RQMTMwLCBNU1RQMTI5LCBNU1RQMTI4LCBNU1RQMTE2LCBNU1RQMTA2LCBNU1RQMTAxLAorICAgICAgIE1TVFAyMjMsIE1TVFAyMDcsIE1TVFAyMDYsIE1TVFAyMDQsIE1TVFAyMDMsIE1TVFAyMDIsIE1TVFAyMDEsIE1TVFAyMDAsCisgICAgICAgTVNUUDMzMSwgTVNUUDMyOSwgTVNUUDMyNSwgTVNUUDMyMywgTVNUUDMyMiwKKyAgICAgICBNU1RQMzE1LCBNU1RQMzE0LCBNU1RQMzEzLAorICAgICAgIE1TVFA0MDMsCisgICAgICAgTVNUUF9OUiB9OworCisjZGVmaW5lIE1TVFAoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKSBcCisgIFNIX0NMS19NU1RQMzIoX3BhcmVudCwgX3JlZywgX2JpdCwgX2ZsYWdzKQorCitzdGF0aWMgc3RydWN0IGNsayBtc3RwX2Nsa3NbXSA9IHsKKwlbTVNUUDAwMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMCwgMSwgMCksIC8qIElJQzIgKi8KKwlbTVNUUDEzMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDMxLCAwKSwgLyogVkVVMyAqLworCVtNU1RQMTMwXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMzAsIDApLCAvKiBWRVUyICovCisJW01TVFAxMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAyOSwgMCksIC8qIFZFVTEgKi8KKwlbTVNUUDEyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI4LCAwKSwgLyogVkVVMCAqLworCVtNU1RQMTE2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAxNiwgMCksIC8qIElJQzAgKi8KKwlbTVNUUDEwNl0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDYsIDApLCAvKiBKUFUgKi8KKwlbTVNUUDEwMV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9NMV0sIFNNU1RQQ1IxLCAxLCAwKSwgLyogVlBVICovCisJW01TVFAyMjNdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1BVXSwgU01TVFBDUjIsIDIzLCAwKSwgLyogU1BVMiAqLworCVtNU1RQMjA3XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA3LCAwKSwgLyogU0NJRkE1ICovCisJW01TVFAyMDZdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDYsIDApLCAvKiBTQ0lGQiAqLworCVtNU1RQMjA0XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA0LCAwKSwgLyogU0NJRkEwICovCisJW01TVFAyMDNdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDMsIDApLCAvKiBTQ0lGQTEgKi8KKwlbTVNUUDIwMl0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMiwgMCksIC8qIFNDSUZBMiAqLworCVtNU1RQMjAxXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAxLCAwKSwgLyogU0NJRkEzICovCisJW01TVFAyMDBdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjIsIDAsIDApLCAvKiBTQ0lGQTQgKi8KKwlbTVNUUDMzMV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMywgMzEsIDApLCAvKiBTQ0lGQTYgKi8KKwlbTVNUUDMyOV0gPSBNU1RQKCZyX2NsaywgU01TVFBDUjMsIDI5LCAwKSwgLyogQ01UMTAgKi8KKwlbTVNUUDMyNV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMywgMjUsIDApLCAvKiBJUkRBICovCisJW01TVFAzMjNdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDIzLCAwKSwgLyogSUlDMSAqLworCVtNU1RQMzIyXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IzLCAyMiwgMCksIC8qIFVTQjAgKi8KKwlbTVNUUDMxNV0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9IUF0sIFNNU1RQQ1IzLCAxNSwgMCksIC8qIEZMQ1RMICovCisJW01TVFAzMTRdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMywgMTQsIDApLCAvKiBTREhJMCAqLworCVtNU1RQMzEzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEzLCAwKSwgLyogU0RISTEgKi8KKwlbTVNUUDQwM10gPSBNU1RQKCZyX2NsaywgU01TVFBDUjQsIDMsIDApLCAvKiBLRVlTQyAqLworfTsKKworI2RlZmluZSBDTEtERVZfQ09OX0lEKF9pZCwgX2NsaykgeyAuY29uX2lkID0gX2lkLCAuY2xrID0gX2NsayB9CisjZGVmaW5lIENMS0RFVl9ERVZfSUQoX2lkLCBfY2xrKSB7IC5kZXZfaWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwkvKiBtYWluIGNsb2NrcyAqLworCUNMS0RFVl9DT05fSUQoInJfY2xrIiwgJnJfY2xrKSwKKwlDTEtERVZfQ09OX0lEKCJleHRhbGMxIiwgJnNoNzM3N19leHRhbGMxX2NsayksCisJQ0xLREVWX0NPTl9JRCgiZXh0YWwyIiwgJnNoNzM3N19leHRhbDJfY2xrKSwKKwlDTEtERVZfQ09OX0lEKCJleHRhbGMxX2RpdjJfY2xrIiwgJmV4dGFsYzFfZGl2Ml9jbGspLAorCUNMS0RFVl9DT05fSUQoImV4dGFsMl9kaXYyX2NsayIsICZleHRhbDJfZGl2Ml9jbGspLAorCUNMS0RFVl9DT05fSUQoImV4dGFsMl9kaXY0X2NsayIsICZleHRhbDJfZGl2NF9jbGspLAorCUNMS0RFVl9DT05fSUQoInBsbGMxX2NsayIsICZwbGxjMV9jbGspLAorCUNMS0RFVl9DT05fSUQoInBsbGMxX2RpdjJfY2xrIiwgJnBsbGMxX2RpdjJfY2xrKSwKKwlDTEtERVZfQ09OX0lEKCJwbGxjMl9jbGsiLCAmcGxsYzJfY2xrKSwKKworCS8qIERJVjQgY2xvY2tzICovCisJQ0xLREVWX0NPTl9JRCgiaV9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfSV0pLAorCUNMS0RFVl9DT05fSUQoInpnX2NsayIsICZkaXY0X2Nsa3NbRElWNF9aR10pLAorCUNMS0RFVl9DT05fSUQoImJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0JdKSwKKwlDTEtERVZfQ09OX0lEKCJtMV9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfTTFdKSwKKwlDTEtERVZfQ09OX0lEKCJjc2lyX2NsayIsICZkaXY0X2Nsa3NbRElWNF9DU0lSXSksCisJQ0xLREVWX0NPTl9JRCgienRyX2NsayIsICZkaXY0X2Nsa3NbRElWNF9aVFJdKSwKKwlDTEtERVZfQ09OX0lEKCJ6dF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfWlRdKSwKKwlDTEtERVZfQ09OX0lEKCJ6X2NsayIsICZkaXY0X2Nsa3NbRElWNF9aXSksCisJQ0xLREVWX0NPTl9JRCgiaHBfY2xrIiwgJmRpdjRfY2xrc1tESVY0X0hQXSksCisJQ0xLREVWX0NPTl9JRCgienNfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pTXSksCisJQ0xLREVWX0NPTl9JRCgiemJfY2xrIiwgJmRpdjRfY2xrc1tESVY0X1pCXSksCisJQ0xLREVWX0NPTl9JRCgiemIzX2NsayIsICZkaXY0X2Nsa3NbRElWNF9aQjNdKSwKKwlDTEtERVZfQ09OX0lEKCJjcF9jbGsiLCAmZGl2NF9jbGtzW0RJVjRfQ1BdKSwKKworCS8qIERJVjYgY2xvY2tzICovCisJQ0xLREVWX0NPTl9JRCgidmNrMV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLMV0pLAorCUNMS0RFVl9DT05fSUQoInZjazJfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzJdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2szX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0szXSksCisJQ0xLREVWX0NPTl9JRCgiZm1zaV9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfRk1TSV0pLAorCUNMS0RFVl9DT05fSUQoImZtc29fY2xrIiwgJmRpdjZfY2xrc1tESVY2X0ZNU09dKSwKKwlDTEtERVZfQ09OX0lEKCJmc2lfY2xrIiwgJmRpdjZfY2xrc1tESVY2X0ZTSV0pLAorCUNMS0RFVl9DT05fSUQoInN1Yl9jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfU1VCXSksCisJQ0xLREVWX0NPTl9JRCgic3B1X2NsayIsICZkaXY2X2Nsa3NbRElWNl9TUFVdKSwKKwlDTEtERVZfQ09OX0lEKCJtc3VfY2xrIiwgJmRpdjZfY2xrc1tESVY2X01TVV0pLAorCUNMS0RFVl9DT05fSUQoIm12aTNfY2xrIiwgJmRpdjZfY2xrc1tESVY2X01WSTNdKSwKKwlDTEtERVZfQ09OX0lEKCJoZG1pX2NsayIsICZkaXY2X2Nsa3NbRElWNl9IRE1JXSksCisJQ0xLREVWX0NPTl9JRCgibWYxX2NsayIsICZkaXY2X2Nsa3NbRElWNl9NRjFdKSwKKwlDTEtERVZfQ09OX0lEKCJtZjJfY2xrIiwgJmRpdjZfY2xrc1tESVY2X01GMl0pLAorCUNMS0RFVl9DT05fSUQoImRzaXRfY2xrIiwgJmRpdjZfY2xrc1tESVY2X0RTSVRdKSwKKwlDTEtERVZfQ09OX0lEKCJkc2lwX2NsayIsICZkaXY2X2Nsa3NbRElWNl9EU0lQXSksCisKKwkvKiBNU1RQMzIgY2xvY2tzICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4yIiwgJm1zdHBfY2xrc1tNU1RQMDAxXSksIC8qIElJQzIgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNCIsICZtc3RwX2Nsa3NbTVNUUDEzMV0pLCAvKiBWRVUzICovCisJQ0xLREVWX0RFVl9JRCgidWlvX3BkcnZfZ2VuaXJxLjMiLCAmbXN0cF9jbGtzW01TVFAxMzBdKSwgLyogVkVVMiAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS4yIiwgJm1zdHBfY2xrc1tNU1RQMTI5XSksIC8qIFZFVTEgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOF0pLCAvKiBWRVUwICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIElJQzAgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNSIsICZtc3RwX2Nsa3NbTVNUUDEwNl0pLCAvKiBKUFUgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuMCIsICZtc3RwX2Nsa3NbTVNUUDEwMV0pLCAvKiBWUFUgKi8KKwlDTEtERVZfREVWX0lEKCJ1aW9fcGRydl9nZW5pcnEuNiIsICZtc3RwX2Nsa3NbTVNUUDIyM10pLCAvKiBTUFUyRFNQMCAqLworCUNMS0RFVl9ERVZfSUQoInVpb19wZHJ2X2dlbmlycS43IiwgJm1zdHBfY2xrc1tNU1RQMjIzXSksIC8qIFNQVTJEU1AxICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCisJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMCIsICZtc3RwX2Nsa3NbTVNUUDIwNF0pLCAvKiBTQ0lGQTAgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMSIsICZtc3RwX2Nsa3NbTVNUUDIwM10pLCAvKiBTQ0lGQTEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMiIsICZtc3RwX2Nsa3NbTVNUUDIwMl0pLCAvKiBTQ0lGQTIgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuMyIsICZtc3RwX2Nsa3NbTVNUUDIwMV0pLCAvKiBTQ0lGQTMgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuNCIsICZtc3RwX2Nsa3NbTVNUUDIwMF0pLCAvKiBTQ0lGQTQgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1zY2kuNiIsICZtc3RwX2Nsa3NbTVNUUDMzMV0pLCAvKiBTQ0lGQTYgKi8KKwlDTEtERVZfQ09OX0lEKCJjbXQxIiwgJm1zdHBfY2xrc1tNU1RQMzI5XSksIC8qIENNVDEwICovCisJQ0xLREVWX0RFVl9JRCgic2hfaXJkYSIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJUkRBICovCisJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIElJQzEgKi8KKwlDTEtERVZfREVWX0lEKCJyOGE2NjU5N19oY2QuMCIsICZtc3RwX2Nsa3NbTVNUUDMyMl0pLCAvKiBVU0JIUyAqLworCUNMS0RFVl9ERVZfSUQoInI4YTY2NTk3X3VkYy4wIiwgJm1zdHBfY2xrc1tNU1RQMzIyXSksIC8qIFVTQkhTICovCisJQ0xLREVWX0RFVl9JRCgic2hfZmxjdGwiLCAmbXN0cF9jbGtzW01TVFAzMTVdKSwgLyogRkxDVEwgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfc2RoaS4wIiwgJm1zdHBfY2xrc1tNU1RQMzE0XSksIC8qIFNESEkwICovCisJQ0xLREVWX0RFVl9JRCgic2hfbW9iaWxlX3NkaGkuMSIsICZtc3RwX2Nsa3NbTVNUUDMxM10pLCAvKiBTREhJMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX2tleXNjLjAiLCAmbXN0cF9jbGtzW01TVFA0MDNdKSwgLyogS0VZU0MgKi8KK307CisKK3ZvaWQgX19pbml0IHNoNzM3N19jbG9ja19pbml0KHZvaWQpCit7CisJaW50IGssIHJldCA9IDA7CisKKwlmb3IgKGsgPSAwOyAhcmV0ICYmIChrIDwgQVJSQVlfU0laRShtYWluX2Nsa3MpKTsgaysrKQorCQlyZXQgPSBjbGtfcmVnaXN0ZXIobWFpbl9jbGtzW2tdKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2NF9yZWdpc3RlcihkaXY0X2Nsa3MsIERJVjRfTlIsICZkaXY0X3RhYmxlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBzaF9jbGtfZGl2Nl9yZWdpc3RlcihkaXY2X2Nsa3MsIERJVjZfTlIpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHNoX2Nsa19tc3RwMzJfcmVnaXN0ZXIobXN0cF9jbGtzLCBNU1RQX05SKTsKKworCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CisKKwlpZiAoIXJldCkKKwkJY2xrX2luaXQoKTsKKwllbHNlCisJCXBhbmljKCJmYWlsZWQgdG8gc2V0dXAgc2g3Mzc3IGNsb2Nrc1xuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjNzA1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2suYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogU0gtTW9iaWxlIFRpbWVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKworaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQoreworCS8qIEtpY2sgdGhlIGNoaWxkIGNsb2Nrcy4uICovCisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCS8qIEVuYWJsZSB0aGUgbmVjZXNzYXJ5IGluaXQgY2xvY2tzICovCisJY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2Nsa19nZXQoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChfX2Nsa19nZXQpOworCit2b2lkIF9fY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CitFWFBPUlRfU1lNQk9MKF9fY2xrX3B1dCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDU3OTAzNjAuLmVmZWVmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0zLDIxICszLDMxIEBACiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNobW9iaWxlX3RpbWVyOwogZXh0ZXJuIHZvaWQgc2htb2JpbGVfc2V0dXBfY29uc29sZSh2b2lkKTsKK3N0cnVjdCBjbGs7CitleHRlcm4gaW50IGNsa19pbml0KHZvaWQpOwogCiBleHRlcm4gdm9pZCBzaDczNjdfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNjdfYWRkX2Vhcmx5X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNjdfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNjdfY2xvY2tfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzM2N19waW5tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY2xrIHNoNzM2N19leHRhbGIxX2NsazsKK2V4dGVybiBzdHJ1Y3QgY2xrIHNoNzM2N19leHRhbDJfY2xrOwogCiBleHRlcm4gdm9pZCBzaDczNzdfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNzdfYWRkX2Vhcmx5X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNzdfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNzdfY2xvY2tfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzM3N19waW5tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY2xrIHNoNzM3N19leHRhbGMxX2NsazsKK2V4dGVybiBzdHJ1Y3QgY2xrIHNoNzM3N19leHRhbDJfY2xrOwogCiBleHRlcm4gdm9pZCBzaDczNzJfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNzJfYWRkX2Vhcmx5X2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNzJfY2xvY2tfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNoNzM3Ml9waW5tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY2xrIHNoNzM3Ml9leHRhbDFfY2xrOworZXh0ZXJuIHN0cnVjdCBjbGsgc2g3MzcyX2V4dGFsMl9jbGs7CiAKICNlbmRpZiAvKiBfX0FSQ0hfTUFDSF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDEzMjI1NmIuLmZhMTViNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTMsNyArMywxMyBAQAogCiAjZGVmaW5lIE5SX0lSUVMgICAgICAgICA1MTIKIAorLyogSU5UQ0EgKi8KICNkZWZpbmUgZXZ0MmlycShldnQpCQkoKChldnQpID4+IDUpIC0gMTYpCiAjZGVmaW5lIGlycTJldnQoaXJxKQkJKCgoaXJxKSArIDE2KSA8PCA1KQogCisvKiBJTlRDUyAqLworI2RlZmluZSBJTlRDU19WRUNUX0JBU0UJCTB4MjIwMAorI2RlZmluZSBJTlRDU19WRUNUKG4sIHZlY3QpCUlOVENfVkVDVCgobiksIElOVENTX1ZFQ1RfQkFTRSArICh2ZWN0KSkKKyNkZWZpbmUgaW50Y3NfZXZ0MmlycShldnQpCWV2dDJpcnEoSU5UQ1NfVkVDVF9CQVNFICsgKGV2dCkpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBlMTg4MTgzLi4zNzc1ODRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtNCw0ICs0LDcgQEAKICNkZWZpbmUgUEhZU19PRkZTRVQJVUwoQ09ORklHX01FTU9SWV9TVEFSVCkKICNkZWZpbmUgTUVNX1NJWkUJVUwoQ09ORklHX01FTU9SWV9TSVpFKQogCisvKiBETUEgbWVtb3J5IGF0IDB4ZjYwMDAwMDAgLSAweGZmZGZmZmZmICovCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgKDE1OCA8PCAyMCkKKwogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKaW5kZXggZGMzNGYwMC4uMzNlOTcwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzcyLmgKQEAgLTExLDYgKzExLDggQEAKICNpZm5kZWYgX19BU01fU0g3MzcyX0hfXwogI2RlZmluZSBfX0FTTV9TSDczNzJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC9zaF9jbGsuaD4KKwogLyoKICAqIFBpbiBGdW5jdGlvbiBDb250cm9sbGVyOgogICoJR1BJT19GTl94eCAtIEdQSU8gdXNlZCB0byBzZWxlY3QgcGluIGZ1bmN0aW9uCkBAIC00MzEsNCArNDMzLDMyIEBACiAJR1BJT19GTl9TREVOQ19EVl9DTEtJLAogfTsKIAorLyogRE1BIHNsYXZlIElEcyAqLworZW51bSB7CisJU0hETUFfU0xBVkVfU0NJRjBfVFgsCisJU0hETUFfU0xBVkVfU0NJRjBfUlgsCisJU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJU0hETUFfU0xBVkVfU0NJRjFfUlgsCisJU0hETUFfU0xBVkVfU0NJRjJfVFgsCisJU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJU0hETUFfU0xBVkVfU0NJRjNfVFgsCisJU0hETUFfU0xBVkVfU0NJRjNfUlgsCisJU0hETUFfU0xBVkVfU0NJRjRfVFgsCisJU0hETUFfU0xBVkVfU0NJRjRfUlgsCisJU0hETUFfU0xBVkVfU0NJRjVfVFgsCisJU0hETUFfU0xBVkVfU0NJRjVfUlgsCisJU0hETUFfU0xBVkVfU0NJRjZfVFgsCisJU0hETUFfU0xBVkVfU0NJRjZfUlgsCisJU0hETUFfU0xBVkVfU0RISTBfUlgsCisJU0hETUFfU0xBVkVfU0RISTBfVFgsCisJU0hETUFfU0xBVkVfU0RISTFfUlgsCisJU0hETUFfU0xBVkVfU0RISTFfVFgsCisJU0hETUFfU0xBVkVfU0RISTJfUlgsCisJU0hETUFfU0xBVkVfU0RISTJfVFgsCit9OworCitleHRlcm4gc3RydWN0IGNsayBkdl9jbGtpX2NsazsKK2V4dGVybiBzdHJ1Y3QgY2xrIGR2X2Nsa2lfZGl2Ml9jbGs7CitleHRlcm4gc3RydWN0IGNsayBwbGxjMl9jbGs7CisKICNlbmRpZiAvKiBfX0FTTV9TSDczNzJfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKaW5kZXggZmIzYzRmMS4uNGFlY2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX19BU01fTUFDSF9WTUFMTE9DX0gKICNkZWZpbmUgX19BU01fTUFDSF9WTUFMTE9DX0gKIAotI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAoUEFHRV9PRkZTRVQgKyAweDI0MDAwMDAwKQorLyogVm1hbGxvYyBhdCAuLi4gLSAweGU1ZmZmZmZmICovCisjZGVmaW5lIFZNQUxMT0NfRU5EIDB4ZTYwMDAwMDAKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzY3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzY3LmMKaW5kZXggNWZmNzBjYWQuLjFhMjBjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNjcuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzY3LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAlFVE0xMSwgQVJNMTEsIFVTQkhTLCBGTENUTCwgSUlDMQogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y2FfdmVjdG9yc1tdID0geworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y2FfdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19WRUNUKElSUTBBLCAweDAyMDApLCBJTlRDX1ZFQ1QoSVJRMUEsIDB4MDIyMCksCiAJSU5UQ19WRUNUKElSUTJBLCAweDAyNDApLCBJTlRDX1ZFQ1QoSVJRM0EsIDB4MDI2MCksCiAJSU5UQ19WRUNUKElSUTRBLCAweDAyODApLCBJTlRDX1ZFQ1QoSVJRNUEsIDB4MDJhMCksCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlJTlRDX0dST1VQKElJQzEsIElJQzFfQUxJMSwgSUlDMV9UQUNLSTEsIElJQzFfV0FJVEkxLCBJSUMxX0RURUkxKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBpbnRjYV9tYXNrX3JlZ2lzdGVyc1tdID0geworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNhX21hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZTY5MDAwNDAsIDB4ZTY5MDAwNjAsIDgsIC8qIElOVE1TSzAwQSAvIElOVE1TS0NMUjAwQSAqLwogCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAogCXsgMHhlNjkwMDA0NCwgMHhlNjkwMDA2NCwgOCwgLyogSU5UTVNLMTBBIC8gSU5UTVNLQ0xSMTBBICovCkBAIC0yMTEsNyArMjExLDcgQEAKIAkgICAgTUlTVFksIENNVDMsIFJXRFQxLCBSV0RUMCB9IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgaW50Y2FfcHJpb19yZWdpc3RlcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBpbnRjYV9wcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGU2OTAwMDEwLCAwLCAzMiwgNCwgLyogSU5UUFJJMDBBICovCiAJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCiAJeyAweGU2OTAwMDE0LCAwLCAzMiwgNCwgLyogSU5UUFJJMTBBICovCkBAIC0yNjMsOCArMjYzLDE3OCBAQAogCQkJICAgaW50Y2Ffc2Vuc2VfcmVnaXN0ZXJzLCBpbnRjYV9hY2tfcmVnaXN0ZXJzKSwKIH07CiAKK2VudW0geworCVVOVVNFRF9JTlRDUyA9IDAsCisKKwlJTlRDUywKKworCS8qIGludGVycnVwdCBzb3VyY2VzIElOVENTICovCisJVklPMl9WRVUwLCBWSU8yX1ZFVTEsIFZJTzJfVkVVMiwgVklPMl9WRVUzLAorCVZJTzNfVk9VLAorCVJURE1BQ18xX0RFSTAsIFJURE1BQ18xX0RFSTEsIFJURE1BQ18xX0RFSTIsIFJURE1BQ18xX0RFSTMsCisJVklPMV9DRVUsIFZJTzFfQkVVMCwgVklPMV9CRVUxLCBWSU8xX0JFVTIsCisJVlBVLAorCVNHWDUzMCwKKwlfMkRETUFDXzJERE0wLCBfMkRETUFDXzJERE0xLCBfMkRETUFDXzJERE0yLCBfMkRETUFDXzJERE0zLAorCUlJQzJfQUxJMiwgSUlDMl9UQUNLSTIsIElJQzJfV0FJVEkyLCBJSUMyX0RURUkyLAorCUlQTU1VX0lQTU1VQiwgSVBNTVVfSVBNTVVTLAorCVJURE1BQ18yX0RFSTQsIFJURE1BQ18yX0RFSTUsIFJURE1BQ18yX0RBREVSUiwKKwlNU0lPRiwKKwlJSUMwX0FMSTAsIElJQzBfVEFDS0kwLCBJSUMwX1dBSVRJMCwgSUlDMF9EVEVJMCwKKwlUTVVfVFVOSTAsIFRNVV9UVU5JMSwgVE1VX1RVTkkyLAorCUNNVCwKKwlUU0lGLAorCUlQTU1VSSwKKwlNVkkzLAorCUlDQiwKKwlQRVAsCisJQVNBLAorCUJFTSwKKwlWRTJITywKKwlIUUUsCisJSlBFRywKKwlMQ0RDLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyBJTlRDUyAqLworCV8yRERNQUMsIFJURE1BQ18xLCBSVERNQUNfMiwgVkVVLCBCRVUsIElJQzAsIElQTU1VLCBJSUMyLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y3NfdmVjdG9yc1tdID0geworCUlOVENTX1ZFQ1QoVklPMl9WRVUwLCAweDcwMCksIElOVENTX1ZFQ1QoVklPMl9WRVUxLCAweDcyMCksCisJSU5UQ1NfVkVDVChWSU8yX1ZFVTIsIDB4NzQwKSwgSU5UQ1NfVkVDVChWSU8yX1ZFVTMsIDB4NzYwKSwKKwlJTlRDU19WRUNUKFZJTzNfVk9VLCAweDc4MCksCisJSU5UQ1NfVkVDVChSVERNQUNfMV9ERUkwLCAweDgwMCksIElOVENTX1ZFQ1QoUlRETUFDXzFfREVJMSwgMHg4MjApLAorCUlOVENTX1ZFQ1QoUlRETUFDXzFfREVJMiwgMHg4NDApLCBJTlRDU19WRUNUKFJURE1BQ18xX0RFSTMsIDB4ODYwKSwKKwlJTlRDU19WRUNUKFZJTzFfQ0VVLCAweDg4MCksIElOVENTX1ZFQ1QoVklPMV9CRVUwLCAweDhhMCksCisJSU5UQ1NfVkVDVChWSU8xX0JFVTEsIDB4OGMwKSwgSU5UQ1NfVkVDVChWSU8xX0JFVTIsIDB4OGUwKSwKKwlJTlRDU19WRUNUKFZQVSwgMHg5ODApLAorCUlOVENTX1ZFQ1QoU0dYNTMwLCAweDllMCksCisJSU5UQ1NfVkVDVChfMkRETUFDXzJERE0wLCAweGEwMCksIElOVENTX1ZFQ1QoXzJERE1BQ18yRERNMSwgMHhhMjApLAorCUlOVENTX1ZFQ1QoXzJERE1BQ18yRERNMiwgMHhhNDApLCBJTlRDU19WRUNUKF8yRERNQUNfMkRETTMsIDB4YTYwKSwKKwlJTlRDU19WRUNUKElJQzJfQUxJMiwgMHhhODApLCBJTlRDU19WRUNUKElJQzJfVEFDS0kyLCAweGFhMCksCisJSU5UQ1NfVkVDVChJSUMyX1dBSVRJMiwgMHhhYzApLCBJTlRDU19WRUNUKElJQzJfRFRFSTIsIDB4YWUwKSwKKwlJTlRDU19WRUNUKElQTU1VX0lQTU1VQiwgMHhiMjApLCBJTlRDU19WRUNUKElQTU1VX0lQTU1VUywgMHhiNjApLAorCUlOVENTX1ZFQ1QoUlRETUFDXzJfREVJNCwgMHhiODApLCBJTlRDU19WRUNUKFJURE1BQ18yX0RFSTUsIDB4YmEwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18yX0RBREVSUiwgMHhiYzApLAorCUlOVENTX1ZFQ1QoTVNJT0YsIDB4ZDIwKSwKKwlJTlRDU19WRUNUKElJQzBfQUxJMCwgMHhlMDApLCBJTlRDU19WRUNUKElJQzBfVEFDS0kwLCAweGUyMCksCisJSU5UQ1NfVkVDVChJSUMwX1dBSVRJMCwgMHhlNDApLCBJTlRDU19WRUNUKElJQzBfRFRFSTAsIDB4ZTYwKSwKKwlJTlRDU19WRUNUKFRNVV9UVU5JMCwgMHhlODApLCBJTlRDU19WRUNUKFRNVV9UVU5JMSwgMHhlYTApLAorCUlOVENTX1ZFQ1QoVE1VX1RVTkkyLCAweGVjMCksCisJSU5UQ1NfVkVDVChDTVQsIDB4ZjAwKSwKKwlJTlRDU19WRUNUKFRTSUYsIDB4ZjIwKSwKKwlJTlRDU19WRUNUKElQTU1VSSwgMHhmNjApLAorCUlOVENTX1ZFQ1QoTVZJMywgMHg0MjApLAorCUlOVENTX1ZFQ1QoSUNCLCAweDQ4MCksCisJSU5UQ1NfVkVDVChQRVAsIDB4NGEwKSwKKwlJTlRDU19WRUNUKEFTQSwgMHg0YzApLAorCUlOVENTX1ZFQ1QoQkVNLCAweDRlMCksCisJSU5UQ1NfVkVDVChWRTJITywgMHg1MjApLAorCUlOVENTX1ZFQ1QoSFFFLCAweDU0MCksCisJSU5UQ1NfVkVDVChKUEVHLCAweDU2MCksCisJSU5UQ1NfVkVDVChMQ0RDLCAweDU4MCksCisKKwlJTlRDX1ZFQ1QoSU5UQ1MsIDB4ZjgwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBpbnRjc19ncm91cHNbXSBfX2luaXRkYXRhID0geworCUlOVENfR1JPVVAoXzJERE1BQywgXzJERE1BQ18yRERNMCwgXzJERE1BQ18yRERNMSwKKwkJICAgXzJERE1BQ18yRERNMiwgXzJERE1BQ18yRERNMyksCisJSU5UQ19HUk9VUChSVERNQUNfMSwgUlRETUFDXzFfREVJMCwgUlRETUFDXzFfREVJMSwKKwkJICAgUlRETUFDXzFfREVJMiwgUlRETUFDXzFfREVJMyksCisJSU5UQ19HUk9VUChSVERNQUNfMiwgUlRETUFDXzJfREVJNCwgUlRETUFDXzJfREVJNSwgUlRETUFDXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKFZFVSwgVklPMl9WRVUwLCBWSU8yX1ZFVTEsIFZJTzJfVkVVMiwgVklPMl9WRVUzKSwKKwlJTlRDX0dST1VQKEJFVSwgVklPMV9CRVUwLCBWSU8xX0JFVTEsIFZJTzFfQkVVMiksCisJSU5UQ19HUk9VUChJSUMwLCBJSUMwX0FMSTAsIElJQzBfVEFDS0kwLCBJSUMwX1dBSVRJMCwgSUlDMF9EVEVJMCksCisJSU5UQ19HUk9VUChJUE1NVSwgSVBNTVVfSVBNTVVTLCBJUE1NVV9JUE1NVUIpLAorCUlOVENfR1JPVVAoSUlDMiwgSUlDMl9BTEkyLCBJSUMyX1RBQ0tJMiwgSUlDMl9XQUlUSTIsIElJQzJfRFRFSTIpLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNzX21hc2tfcmVnaXN0ZXJzW10gPSB7CisJeyAweGZmZDIwMTg0LCAweGZmZDIwMWM0LCA4LCAvKiBJTVIxU0EgLyBJTUNSMVNBICovCisJICB7IFZJTzFfQkVVMiwgVklPMV9CRVUxLCBWSU8xX0JFVTAsIFZJTzFfQ0VVLAorCSAgICBWSU8yX1ZFVTMsIFZJTzJfVkVVMiwgVklPMl9WRVUxLCBWSU8yX1ZFVTAgfSB9LAorCXsgMHhmZmQyMDE4OCwgMHhmZmQyMDFjOCwgOCwgLyogSU1SMlNBIC8gSU1DUjJTQSAqLworCSAgeyBWSU8zX1ZPVSwgMCwgVkUySE8sIFZQVSwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMThjLCAweGZmZDIwMWNjLCA4LCAvKiBJTVIzU0EgLyBJTUNSM1NBICovCisJICB7IF8yRERNQUNfMkRETTMsIF8yRERNQUNfMkRETTIsIF8yRERNQUNfMkRETTEsIF8yRERNQUNfMkRETTAsCisJICAgIEJFTSwgQVNBLCBQRVAsIElDQiB9IH0sCisJeyAweGZmZDIwMTkwLCAweGZmZDIwMWQwLCA4LCAvKiBJTVI0U0EgLyBJTUNSNFNBICovCisJICB7IDAsIDAsIE1WSTMsIDAsCisJICAgIEpQRUcsIEhRRSwgMCwgTENEQyB9IH0sCisJeyAweGZmZDIwMTk0LCAweGZmZDIwMWQ0LCA4LCAvKiBJTVI1U0EgLyBJTUNSNVNBICovCisJICB7IDAsIFJURE1BQ18yX0RBREVSUiwgUlRETUFDXzJfREVJNSwgUlRETUFDXzJfREVJNCwKKwkgICAgUlRETUFDXzFfREVJMywgUlRETUFDXzFfREVJMiwgUlRETUFDXzFfREVJMSwgUlRETUFDXzFfREVJMCB9IH0sCisJeyAweGZmZDIwMTk4LCAweGZmZDIwMWQ4LCA4LCAvKiBJTVI2U0EgLyBJTUNSNlNBICovCisJICB7IDAsIDAsIE1TSU9GLCAwLAorCSAgICBTR1g1MzAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDE5YywgMHhmZmQyMDFkYywgOCwgLyogSU1SN1NBIC8gSU1DUjdTQSAqLworCSAgeyAwLCBUTVVfVFVOSTIsIFRNVV9UVU5JMSwgVE1VX1RVTkkwLAorCSAgICAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAxYTQsIDB4ZmZkMjAxZTQsIDgsIC8qIElNUjlTQSAvIElNQ1I5U0EgKi8KKwkgIHsgMCwgMCwgMCwgQ01ULAorCSAgICBJSUMyX0RURUkyLCBJSUMyX1dBSVRJMiwgSUlDMl9UQUNLSTIsIElJQzJfQUxJMiB9IH0sCisJeyAweGZmZDIwMWE4LCAweGZmZDIwMWU4LCA4LCAvKiBJTVIxMFNBIC8gSU1DUjEwU0EgKi8KKwkgIHsgSVBNTVVfSVBNTVVTLCAwLCBJUE1NVV9JUE1NVUIsIDAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDFhYywgMHhmZmQyMDFlYywgOCwgLyogSU1SMTFTQSAvIElNQ1IxMVNBICovCisJICB7IElJQzBfRFRFSTAsIElJQzBfV0FJVEkwLCBJSUMwX1RBQ0tJMCwgSUlDMF9BTEkwLAorCSAgICAwLCAwLCBJUE1NVUksIFRTSUYgfSB9LAorCXsgMHhmZmQyMDEwNCwgMCwgMTYsIC8qIElOVEFNQVNLICovCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIElOVENTIH0gfSwKK307CisKKy8qIFByaW9yaXR5IGlzIG5lZWRlZCBmb3IgSU5UQ0EgdG8gcmVjZWl2ZSB0aGUgSU5UQ1MgaW50ZXJydXB0ICovCitzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgaW50Y3NfcHJpb19yZWdpc3RlcnNbXSA9IHsKKwl7IDB4ZmZkMjAwMDAsIDAsIDE2LCA0LCAvKiBJUFJBUyAqLyB7IDAsIE1WSTMsIF8yRERNQUMsIElDQiB9IH0sCisJeyAweGZmZDIwMDA0LCAwLCAxNiwgNCwgLyogSVBSQlMgKi8geyBKUEVHLCBMQ0RDLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAwMDgsIDAsIDE2LCA0LCAvKiBJUFJDUyAqLyB7IEJCSUYyLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAwMTAsIDAsIDE2LCA0LCAvKiBJUFJFUyAqLyB7IFJURE1BQ18xLCBWSU8xX0NFVSwgMCwgVlBVIH0gfSwKKwl7IDB4ZmZkMjAwMTQsIDAsIDE2LCA0LCAvKiBJUFJGUyAqLyB7IDAsIFJURE1BQ18yLCAwLCBDTVQgfSB9LAorCXsgMHhmZmQyMDAxOCwgMCwgMTYsIDQsIC8qIElQUkdTICovIHsgVE1VX1RVTkkwLCBUTVVfVFVOSTEsCisJCQkJCSAgICAgIFRNVV9UVU5JMiwgMCB9IH0sCisJeyAweGZmZDIwMDFjLCAwLCAxNiwgNCwgLyogSVBSSFMgKi8geyAwLCBWSU8zX1ZPVSwgVkVVLCBCRVUgfSB9LAorCXsgMHhmZmQyMDAyMCwgMCwgMTYsIDQsIC8qIElQUklTICovIHsgMCwgTVNJT0YsIFRTSUYsIElJQzAgfSB9LAorCXsgMHhmZmQyMDAyNCwgMCwgMTYsIDQsIC8qIElQUkpTICovIHsgMCwgU0dYNTMwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAwMjgsIDAsIDE2LCA0LCAvKiBJUFJLUyAqLyB7IEJFTSwgQVNBLCBJUE1NVUksIFBFUCB9IH0sCisJeyAweGZmZDIwMDJjLCAwLCAxNiwgNCwgLyogSVBSTFMgKi8geyBJUE1NVSwgMCwgVkUySE8sIEhRRSB9IH0sCisJeyAweGZmZDIwMDMwLCAwLCAxNiwgNCwgLyogSVBSTVMgKi8geyBJSUMyLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW50Y3NfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4ZmZkMjAwMDAsCisJCS5lbmQJPSAweGZmZDJmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjc19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3MzY3LWludGNzIiwKKwkucmVzb3VyY2UgPSBpbnRjc19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGludGNzX3Jlc291cmNlcyksCisJLmh3ID0gSU5UQ19IV19ERVNDKGludGNzX3ZlY3RvcnMsIGludGNzX2dyb3VwcywgaW50Y3NfbWFza19yZWdpc3RlcnMsCisJCQkgICBpbnRjc19wcmlvX3JlZ2lzdGVycywgTlVMTCwgTlVMTCksCit9OworCitzdGF0aWMgdm9pZCBpbnRjc19kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSAodm9pZCAqKWdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGludCBldnRjb2RlYXMgPSBpb3JlYWQzMihyZWcpOworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGludGNzX2V2dDJpcnEoZXZ0Y29kZWFzKSk7Cit9CisKIHZvaWQgX19pbml0IHNoNzM2N19pbml0X2lycSh2b2lkKQogewotCS8qIElOVENBICovCisJdm9pZCBfX2lvbWVtICppbnRldnRzYSA9IGlvcmVtYXBfbm9jYWNoZSgweGZmZDIwMTAwLCBQQUdFX1NJWkUpOworCiAJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjYV9kZXNjKTsKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNzX2Rlc2MpOworCisJLyogZGVtdXggdXNpbmcgSU5URVZUU0EgKi8KKwlzZXRfaXJxX2RhdGEoZXZ0MmlycSgweGY4MCksICh2b2lkICopaW50ZXZ0c2EpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGV2dDJpcnEoMHhmODApLCBpbnRjc19kZW11eCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKaW5kZXggM2NlOWQ5Yi4uZTM1NTFiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYwpAQCAtMzE5LDE3ICszMTksMTcgQEAKIAl7IDB4ZTY5NTAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOQTMgKi8geyBBUF9BUk0yLCAwLCAwLCAwIH0gfSwKIAl7IDB4ZTY5NTAwMzgsIDAsIDE2LCA0LCAvKiBJUFJPQTMgKi8geyBNRklTMiwgQ1BPUlRSMlMsCiAJCQkJCSAgICAgICBDTVQxNCwgQ01UMTUgfSB9LAotCXsgMHhlNjk0MDAzYywgMCwgMTYsIDQsIC8qIElQUlBBMyAqLyB7IDAsIDAsCisJeyAweGU2OTUwMDNjLCAwLCAxNiwgNCwgLyogSVBSUEEzICovIHsgMCwgMCwKIAkJCQkJICAgICAgIE1NQ19NTUNfRVJSLCBNTUNfTU1DX05PUiB9IH0sCi0JeyAweGU2OTQwMDQwLCAwLCAxNiwgNCwgLyogSVBSUUEzICovIHsgSUlDNF9BTEk0LCBJSUM0X1RBQ0tJNCwKKwl7IDB4ZTY5NTAwNDAsIDAsIDE2LCA0LCAvKiBJUFJRQTMgKi8geyBJSUM0X0FMSTQsIElJQzRfVEFDS0k0LAogCQkJCQkgICAgICAgSUlDNF9XQUlUSTQsIElJQzRfRFRFSTQgfSB9LAotCXsgMHhlNjk0MDA0NCwgMCwgMTYsIDQsIC8qIElQUlJBMyAqLyB7IElJQzNfQUxJMywgSUlDM19UQUNLSTMsCisJeyAweGU2OTUwMDQ0LCAwLCAxNiwgNCwgLyogSVBSUkEzICovIHsgSUlDM19BTEkzLCBJSUMzX1RBQ0tJMywKIAkJCQkJICAgICAgIElJQzNfV0FJVEkzLCBJSUMzX0RURUkzIH0gfSwKLQl7IDB4ZTY5NDAwNDgsIDAsIDE2LCA0LCAvKiBJUFJTQTMgKi8geyAwLypFUkkqLywgMC8qUlhJKi8sCisJeyAweGU2OTUwMDQ4LCAwLCAxNiwgNCwgLyogSVBSU0EzICovIHsgMC8qRVJJKi8sIDAvKlJYSSovLAogCQkJCQkgICAgICAgMC8qVFhJKi8sIDAvKlRFSSovfSB9LAotCXsgMHhlNjk0MDA0YywgMCwgMTYsIDQsIC8qIElQUlRBMyAqLyB7IFVTQjBfVVNCMEkxLCBVU0IwX1VTQjBJMCwKKwl7IDB4ZTY5NTAwNGMsIDAsIDE2LCA0LCAvKiBJUFJUQTMgKi8geyBVU0IwX1VTQjBJMSwgVVNCMF9VU0IwSTAsCiAJCQkJCSAgICAgICBVU0IxX1VTQjFJMSwgVVNCMV9VU0IxSTAgfSB9LAotCXsgMHhlNjk0MDA1MCwgMCwgMTYsIDQsIC8qIElQUlVBMyAqLyB7IFVTQkhTRE1BQzFfVVNIRE1JLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NTAwNTAsIDAsIDE2LCA0LCAvKiBJUFJVQTMgKi8geyBVU0JIU0RNQUMxX1VTSERNSSwgMCwgMCwgMCB9IH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfc2Vuc2VfcmVnIGludGNhX3NlbnNlX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0zNjMsNyArMzYzLDIyNyBAQAogCQkJICAgaW50Y2Ffc2Vuc2VfcmVnaXN0ZXJzLCBpbnRjYV9hY2tfcmVnaXN0ZXJzKSwKIH07CiAKK2VudW0geworCVVOVVNFRF9JTlRDUyA9IDAsCisKKwlJTlRDUywKKworCS8qIGludGVycnVwdCBzb3VyY2VzIElOVENTICovCisJVkVVX1ZFVTAsIFZFVV9WRVUxLCBWRVVfVkVVMiwgVkVVX1ZFVTMsCisJUlRETUFDXzFfREVJMCwgUlRETUFDXzFfREVJMSwgUlRETUFDXzFfREVJMiwgUlRETUFDXzFfREVJMywKKwlDRVUsIEJFVV9CRVUwLCBCRVVfQkVVMSwgQkVVX0JFVTIsCisJVlBVLAorCVRTSUYxLAorCV8zREdfU0dYNTMwLAorCV8yRERNQUMsCisJSUlDMl9BTEkyLCBJSUMyX1RBQ0tJMiwgSUlDMl9XQUlUSTIsIElJQzJfRFRFSTIsCisJSVBNTVVfSVBNTVVSLCBJUE1NVV9JUE1NVVIyLAorCVJURE1BQ18yX0RFSTQsIFJURE1BQ18yX0RFSTUsIFJURE1BQ18yX0RBREVSUiwKKwlNU0lPRiwKKwlJSUMwX0FMSTAsIElJQzBfVEFDS0kwLCBJSUMwX1dBSVRJMCwgSUlDMF9EVEVJMCwKKwlUTVVfVFVOSTAsIFRNVV9UVU5JMSwgVE1VX1RVTkkyLAorCUNNVDAsCisJVFNJRjAsCisJTE1CLAorCUNUSSwKKwlJQ0IsCisJSlBVX0pQRUcsCisJTENEQywKKwlMQ1JDLAorCVJURE1BQzJfMV9ERUkwLCBSVERNQUMyXzFfREVJMSwgUlRETUFDMl8xX0RFSTIsIFJURE1BQzJfMV9ERUkzLAorCVJURE1BQzJfMl9ERUk0LCBSVERNQUMyXzJfREVJNSwgUlRETUFDMl8yX0RBREVSUiwKKwlJU1AsCisJTENEQzEsCisJQ1NJUlgsCisJRFNJVFhfRFNJVFgwLAorCURTSVRYX0RTSVRYMSwKKwlUTVUxX1RVTkkwLCBUTVUxX1RVTkkxLCBUTVUxX1RVTkkyLAorCUNNVDQsCisJRFNJVFgxX0RTSVRYMV8wLAorCURTSVRYMV9EU0lUWDFfMSwKKwlDUE9SVFMyUiwKKwlKUFU2RSwKKworCS8qIGludGVycnVwdCBncm91cHMgSU5UQ1MgKi8KKwlSVERNQUNfMSwgUlRETUFDXzIsIFZFVSwgQkVVLCBJSUMwLCBJUE1NVSwgSUlDMiwKKwlSVERNQUMyXzEsIFJURE1BQzJfMiwgVE1VMSwgRFNJVFgsCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCBpbnRjc192ZWN0b3JzW10gPSB7CisJSU5UQ1NfVkVDVChWRVVfVkVVMCwgMHg3MDApLCBJTlRDU19WRUNUKFZFVV9WRVUxLCAweDcyMCksCisJSU5UQ1NfVkVDVChWRVVfVkVVMiwgMHg3NDApLCBJTlRDU19WRUNUKFZFVV9WRVUzLCAweDc2MCksCisJSU5UQ1NfVkVDVChSVERNQUNfMV9ERUkwLCAweDgwMCksIElOVENTX1ZFQ1QoUlRETUFDXzFfREVJMSwgMHg4MjApLAorCUlOVENTX1ZFQ1QoUlRETUFDXzFfREVJMiwgMHg4NDApLCBJTlRDU19WRUNUKFJURE1BQ18xX0RFSTMsIDB4ODYwKSwKKwlJTlRDU19WRUNUKENFVSwgMHg4ODApLCBJTlRDU19WRUNUKEJFVV9CRVUwLCAweDhhMCksCisJSU5UQ1NfVkVDVChCRVVfQkVVMSwgMHg4YzApLCBJTlRDU19WRUNUKEJFVV9CRVUyLCAweDhlMCksCisJSU5UQ1NfVkVDVChWUFUsIDB4OTgwKSwKKwlJTlRDU19WRUNUKFRTSUYxLCAweDlhMCksCisJSU5UQ1NfVkVDVChfM0RHX1NHWDUzMCwgMHg5ZTApLAorCUlOVENTX1ZFQ1QoXzJERE1BQywgMHhhMDApLAorCUlOVENTX1ZFQ1QoSUlDMl9BTEkyLCAweGE4MCksIElOVENTX1ZFQ1QoSUlDMl9UQUNLSTIsIDB4YWEwKSwKKwlJTlRDU19WRUNUKElJQzJfV0FJVEkyLCAweGFjMCksIElOVENTX1ZFQ1QoSUlDMl9EVEVJMiwgMHhhZTApLAorCUlOVENTX1ZFQ1QoSVBNTVVfSVBNTVVSLCAweGIwMCksIElOVENTX1ZFQ1QoSVBNTVVfSVBNTVVSMiwgMHhiMjApLAorCUlOVENTX1ZFQ1QoUlRETUFDXzJfREVJNCwgMHhiODApLCBJTlRDU19WRUNUKFJURE1BQ18yX0RFSTUsIDB4YmEwKSwKKwlJTlRDU19WRUNUKFJURE1BQ18yX0RBREVSUiwgMHhiYzApLAorCUlOVENTX1ZFQ1QoSUlDMF9BTEkwLCAweGUwMCksIElOVENTX1ZFQ1QoSUlDMF9UQUNLSTAsIDB4ZTIwKSwKKwlJTlRDU19WRUNUKElJQzBfV0FJVEkwLCAweGU0MCksIElOVENTX1ZFQ1QoSUlDMF9EVEVJMCwgMHhlNjApLAorCUlOVENTX1ZFQ1QoVE1VX1RVTkkwLCAweGU4MCksIElOVENTX1ZFQ1QoVE1VX1RVTkkxLCAweGVhMCksCisJSU5UQ1NfVkVDVChUTVVfVFVOSTIsIDB4ZWMwKSwKKwlJTlRDU19WRUNUKENNVDAsIDB4ZjAwKSwKKwlJTlRDU19WRUNUKFRTSUYwLCAweGYyMCksCisJSU5UQ1NfVkVDVChMTUIsIDB4ZjYwKSwKKwlJTlRDU19WRUNUKENUSSwgMHg0MDApLAorCUlOVENTX1ZFQ1QoSUNCLCAweDQ4MCksCisJSU5UQ1NfVkVDVChKUFVfSlBFRywgMHg1NjApLAorCUlOVENTX1ZFQ1QoTENEQywgMHg1ODApLAorCUlOVENTX1ZFQ1QoTENSQywgMHg1YTApLAorCUlOVENTX1ZFQ1QoUlRETUFDMl8xX0RFSTAsIDB4MTMwMCksIElOVENTX1ZFQ1QoUlRETUFDMl8xX0RFSTEsIDB4MTMyMCksCisJSU5UQ1NfVkVDVChSVERNQUMyXzFfREVJMiwgMHgxMzQwKSwgSU5UQ1NfVkVDVChSVERNQUMyXzFfREVJMywgMHgxMzYwKSwKKwlJTlRDU19WRUNUKFJURE1BQzJfMl9ERUk0LCAweDEzODApLCBJTlRDU19WRUNUKFJURE1BQzJfMl9ERUk1LCAweDEzYTApLAorCUlOVENTX1ZFQ1QoUlRETUFDMl8yX0RBREVSUiwgMHgxM2MwKSwKKwlJTlRDU19WRUNUKElTUCwgMHgxNzIwKSwKKwlJTlRDU19WRUNUKExDREMxLCAweDE3ODApLAorCUlOVENTX1ZFQ1QoQ1NJUlgsIDB4MTdhMCksCisJSU5UQ1NfVkVDVChEU0lUWF9EU0lUWDAsIDB4MTdjMCksCisJSU5UQ1NfVkVDVChEU0lUWF9EU0lUWDEsIDB4MTdlMCksCisJSU5UQ1NfVkVDVChUTVUxX1RVTkkwLCAweDE5MDApLCBJTlRDU19WRUNUKFRNVTFfVFVOSTEsIDB4MTkyMCksCisJSU5UQ1NfVkVDVChUTVUxX1RVTkkyLCAweDE5NDApLAorCUlOVENTX1ZFQ1QoQ01UNCwgMHgxOTgwKSwKKwlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMCwgMHgxOWEwKSwKKwlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMSwgMHgxOWMwKSwKKwlJTlRDU19WRUNUKENQT1JUUzJSLCAweDFhMjApLAorCUlOVENTX1ZFQ1QoSlBVNkUsIDB4MWE4MCksCisKKwlJTlRDX1ZFQ1QoSU5UQ1MsIDB4ZjgwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBpbnRjc19ncm91cHNbXSBfX2luaXRkYXRhID0geworCUlOVENfR1JPVVAoUlRETUFDXzEsIFJURE1BQ18xX0RFSTAsIFJURE1BQ18xX0RFSTEsCisJCSAgIFJURE1BQ18xX0RFSTIsIFJURE1BQ18xX0RFSTMpLAorCUlOVENfR1JPVVAoUlRETUFDXzIsIFJURE1BQ18yX0RFSTQsIFJURE1BQ18yX0RFSTUsIFJURE1BQ18yX0RBREVSUiksCisJSU5UQ19HUk9VUChWRVUsIFZFVV9WRVUwLCBWRVVfVkVVMSwgVkVVX1ZFVTIsIFZFVV9WRVUzKSwKKwlJTlRDX0dST1VQKEJFVSwgQkVVX0JFVTAsIEJFVV9CRVUxLCBCRVVfQkVVMiksCisJSU5UQ19HUk9VUChJSUMwLCBJSUMwX0FMSTAsIElJQzBfVEFDS0kwLCBJSUMwX1dBSVRJMCwgSUlDMF9EVEVJMCksCisJSU5UQ19HUk9VUChJUE1NVSwgSVBNTVVfSVBNTVVSLCBJUE1NVV9JUE1NVVIyKSwKKwlJTlRDX0dST1VQKElJQzIsIElJQzJfQUxJMiwgSUlDMl9UQUNLSTIsIElJQzJfV0FJVEkyLCBJSUMyX0RURUkyKSwKKwlJTlRDX0dST1VQKFJURE1BQzJfMSwgUlRETUFDMl8xX0RFSTAsIFJURE1BQzJfMV9ERUkxLAorCQkgICBSVERNQUMyXzFfREVJMiwgUlRETUFDMl8xX0RFSTMpLAorCUlOVENfR1JPVVAoUlRETUFDMl8yLCBSVERNQUMyXzJfREVJNCwKKwkJICAgUlRETUFDMl8yX0RFSTUsIFJURE1BQzJfMl9EQURFUlIpLAorCUlOVENfR1JPVVAoVE1VMSwgVE1VMV9UVU5JMiwgVE1VMV9UVU5JMSwgVE1VMV9UVU5JMCksCisJSU5UQ19HUk9VUChEU0lUWCwgRFNJVFhfRFNJVFgwLCBEU0lUWF9EU0lUWDEpLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNzX21hc2tfcmVnaXN0ZXJzW10gPSB7CisJeyAweGZmZDIwMTg0LCAweGZmZDIwMWM0LCA4LCAvKiBJTVIxU0EgLyBJTUNSMVNBICovCisJICB7IEJFVV9CRVUyLCBCRVVfQkVVMSwgQkVVX0JFVTAsIENFVSwKKwkgICAgVkVVX1ZFVTMsIFZFVV9WRVUyLCBWRVVfVkVVMSwgVkVVX1ZFVTAgfSB9LAorCXsgMHhmZmQyMDE4OCwgMHhmZmQyMDFjOCwgOCwgLyogSU1SMlNBIC8gSU1DUjJTQSAqLworCSAgeyAwLCAwLCAwLCBWUFUsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDE4YywgMHhmZmQyMDFjYywgOCwgLyogSU1SM1NBIC8gSU1DUjNTQSAqLworCSAgeyAwLCAwLCAwLCBfMkRETUFDLAorCSAgICAwLCAwLCAwLCBJQ0IgfSB9LAorCXsgMHhmZmQyMDE5MCwgMHhmZmQyMDFkMCwgOCwgLyogSU1SNFNBIC8gSU1DUjRTQSAqLworCSAgeyAwLCAwLCAwLCBDVEksCisJICAgIEpQVV9KUEVHLCAwLCBMQ1JDLCBMQ0RDIH0gfSwKKwl7IDB4ZmZkMjAxOTQsIDB4ZmZkMjAxZDQsIDgsIC8qIElNUjVTQSAvIElNQ1I1U0EgKi8KKwkgIHsgMCwgUlRETUFDXzJfREFERVJSLCBSVERNQUNfMl9ERUk1LCBSVERNQUNfMl9ERUk0LAorCSAgICBSVERNQUNfMV9ERUkzLCBSVERNQUNfMV9ERUkyLCBSVERNQUNfMV9ERUkxLCBSVERNQUNfMV9ERUkwIH0gfSwKKwl7IDB4ZmZkMjAxOTgsIDB4ZmZkMjAxZDgsIDgsIC8qIElNUjZTQSAvIElNQ1I2U0EgKi8KKwkgIHsgMCwgMCwgTVNJT0YsIDAsCisJICAgIF8zREdfU0dYNTMwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAxOWMsIDB4ZmZkMjAxZGMsIDgsIC8qIElNUjdTQSAvIElNQ1I3U0EgKi8KKwkgIHsgMCwgVE1VX1RVTkkyLCBUTVVfVFVOSTEsIFRNVV9UVU5JMCwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMWE0LCAweGZmZDIwMWU0LCA4LCAvKiBJTVI5U0EgLyBJTUNSOVNBICovCisJICB7IDAsIDAsIDAsIENNVDAsCisJICAgIElJQzJfRFRFSTIsIElJQzJfV0FJVEkyLCBJSUMyX1RBQ0tJMiwgSUlDMl9BTEkyIH0gfSwKKwl7IDB4ZmZkMjAxYTgsIDB4ZmZkMjAxZTgsIDgsIC8qIElNUjEwU0EgLyBJTUNSMTBTQSAqLworCSAgeyAwLCAwLCBJUE1NVV9JUE1NVVIyLCBJUE1NVV9JUE1NVVIsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQyMDFhYywgMHhmZmQyMDFlYywgOCwgLyogSU1SMTFTQSAvIElNQ1IxMVNBICovCisJICB7IElJQzBfRFRFSTAsIElJQzBfV0FJVEkwLCBJSUMwX1RBQ0tJMCwgSUlDMF9BTEkwLAorCSAgICAwLCBUU0lGMSwgTE1CLCBUU0lGMCB9IH0sCisJeyAweGZmZDUwMTgwLCAweGZmZDUwMWMwLCA4LCAvKiBJTVIwU0EzIC8gSU1DUjBTQTMgKi8KKwkgIHsgMCwgUlRETUFDMl8yX0RBREVSUiwgUlRETUFDMl8yX0RFSTUsIFJURE1BQzJfMl9ERUk0LAorCSAgICBSVERNQUMyXzFfREVJMywgUlRETUFDMl8xX0RFSTIsIFJURE1BQzJfMV9ERUkxLCBSVERNQUMyXzFfREVJMCB9IH0sCisJeyAweGZmZDUwMTkwLCAweGZmZDUwMWQwLCA4LCAvKiBJTVI0U0EzIC8gSU1DUjRTQTMgKi8KKwkgIHsgMCwgSVNQLCAwLCAwLAorCSAgICBMQ0RDMSwgQ1NJUlgsIERTSVRYX0RTSVRYMCwgRFNJVFhfRFNJVFgxIH0gfSwKKwl7IDB4ZmZkNTAxOTgsIDB4ZmZkNTAxZDgsIDgsIC8qIElNUjZTQTMgLyBJTUNSNlNBMyAqLworCSAgeyAwLCBUTVUxX1RVTkkyLCBUTVUxX1RVTkkxLCBUTVUxX1RVTkkwLAorCSAgICBDTVQ0LCBEU0lUWDFfRFNJVFgxXzAsIERTSVRYMV9EU0lUWDFfMSwgMCB9IH0sCisJeyAweGZmZDUwMTljLCAweGZmZDUwMWRjLCA4LCAvKiBJTVI3U0EzIC8gSU1DUjdTQTMgKi8KKwkgIHsgMCwgQ1BPUlRTMlIsIDAsIDAsCisJICAgIEpQVTZFLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAxMDQsIDAsIDE2LCAvKiBJTlRBTUFTSyAqLworCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCBJTlRDUyB9IH0sCit9OworCisvKiBQcmlvcml0eSBpcyBuZWVkZWQgZm9yIElOVENBIHRvIHJlY2VpdmUgdGhlIElOVENTIGludGVycnVwdCAqLworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIGludGNzX3ByaW9fcmVnaXN0ZXJzW10gPSB7CisJeyAweGZmZDIwMDAwLCAwLCAxNiwgNCwgLyogSVBSQVMgKi8geyBDVEksIDAsIF8yRERNQUMsIElDQiB9IH0sCisJeyAweGZmZDIwMDA0LCAwLCAxNiwgNCwgLyogSVBSQlMgKi8geyBKUFVfSlBFRywgTENEQywgMCwgTENSQyB9IH0sCisJeyAweGZmZDIwMDEwLCAwLCAxNiwgNCwgLyogSVBSRVMgKi8geyBSVERNQUNfMSwgQ0VVLCAwLCBWUFUgfSB9LAorCXsgMHhmZmQyMDAxNCwgMCwgMTYsIDQsIC8qIElQUkZTICovIHsgMCwgUlRETUFDXzIsIDAsIENNVDAgfSB9LAorCXsgMHhmZmQyMDAxOCwgMCwgMTYsIDQsIC8qIElQUkdTICovIHsgVE1VX1RVTkkwLCBUTVVfVFVOSTEsCisJCQkJCSAgICAgIFRNVV9UVU5JMiwgVFNJRjEgfSB9LAorCXsgMHhmZmQyMDAxYywgMCwgMTYsIDQsIC8qIElQUkhTICovIHsgMCwgMCwgVkVVLCBCRVUgfSB9LAorCXsgMHhmZmQyMDAyMCwgMCwgMTYsIDQsIC8qIElQUklTICovIHsgMCwgTVNJT0YsIFRTSUYwLCBJSUMwIH0gfSwKKwl7IDB4ZmZkMjAwMjQsIDAsIDE2LCA0LCAvKiBJUFJKUyAqLyB7IDAsIF8zREdfU0dYNTMwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkMjAwMjgsIDAsIDE2LCA0LCAvKiBJUFJLUyAqLyB7IDAsIDAsIExNQiwgMCB9IH0sCisJeyAweGZmZDIwMDJjLCAwLCAxNiwgNCwgLyogSVBSTFMgKi8geyBJUE1NVSwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDIwMDMwLCAwLCAxNiwgNCwgLyogSVBSTVMgKi8geyBJSUMyLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMDAsIDAsIDE2LCA0LCAvKiBJUFJBUzMgKi8geyBSVERNQUMyXzEsIDAsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAwNCwgMCwgMTYsIDQsIC8qIElQUkJTMyAqLyB7IFJURE1BQzJfMiwgMCwgMCwgMCB9IH0sCisJeyAweGZmZDUwMDIwLCAwLCAxNiwgNCwgLyogSVBSSVMzICovIHsgMCwgSVNQLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMjQsIDAsIDE2LCA0LCAvKiBJUFJKUzMgKi8geyBMQ0RDMSwgQ1NJUlgsIERTSVRYLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMzAsIDAsIDE2LCA0LCAvKiBJUFJNUzMgKi8geyBUTVUxLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOUzMgKi8geyBDTVQ0LCBEU0lUWDFfRFNJVFgxXzAsCisJCQkJCSAgICAgICBEU0lUWDFfRFNJVFgxXzEsIDAgfSB9LAorCXsgMHhmZmQ1MDAzOCwgMCwgMTYsIDQsIC8qIElQUk9TMyAqLyB7IDAsIENQT1JUUzJSLCAwLCAwIH0gfSwKKwl7IDB4ZmZkNTAwM2MsIDAsIDE2LCA0LCAvKiBJUFJQUzMgKi8geyBKUFU2RSwgMCwgMCwgMCB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGludGNzX3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGZmZDIwMDAwLAorCQkuZW5kCT0gMHhmZmQyMDFmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDB4ZmZkNTAwMDAsCisJCS5lbmQJPSAweGZmZDUwMWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGludGNfZGVzYyBpbnRjc19kZXNjIF9faW5pdGRhdGEgPSB7CisJLm5hbWUgPSAic2g3MzcyLWludGNzIiwKKwkucmVzb3VyY2UgPSBpbnRjc19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGludGNzX3Jlc291cmNlcyksCisJLmh3ID0gSU5UQ19IV19ERVNDKGludGNzX3ZlY3RvcnMsIGludGNzX2dyb3VwcywgaW50Y3NfbWFza19yZWdpc3RlcnMsCisJCQkgICBpbnRjc19wcmlvX3JlZ2lzdGVycywgTlVMTCwgTlVMTCksCit9OworCitzdGF0aWMgdm9pZCBpbnRjc19kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSAodm9pZCAqKWdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGludCBldnRjb2RlYXMgPSBpb3JlYWQzMihyZWcpOworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGludGNzX2V2dDJpcnEoZXZ0Y29kZWFzKSk7Cit9CisKIHZvaWQgX19pbml0IHNoNzM3Ml9pbml0X2lycSh2b2lkKQogeworCXZvaWQgX19pb21lbSAqaW50ZXZ0c2EgPSBpb3JlbWFwX25vY2FjaGUoMHhmZmQyMDEwMCwgUEFHRV9TSVpFKTsKKwogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y2FfZGVzYyk7CisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKKworCS8qIGRlbXV4IHVzaW5nIElOVEVWVFNBICovCisJc2V0X2lycV9kYXRhKGV2dDJpcnEoMHhmODApLCAodm9pZCAqKWludGV2dHNhKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihldnQyaXJxKDB4ZjgwKSwgaW50Y3NfZGVtdXgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Ny5jCmluZGV4IDVjNzgxZTJkMS4uMmNkZWI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Ny5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzcuYwpAQCAtOTAsNyArOTAsNyBAQAogCUlDVVNCLCBJQ1VETUMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IGludGNhX3ZlY3RvcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IGludGNhX3ZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChJUlEwQSwgMHgwMjAwKSwgSU5UQ19WRUNUKElSUTFBLCAweDAyMjApLAogCUlOVENfVkVDVChJUlEyQSwgMHgwMjQwKSwgSU5UQ19WRUNUKElSUTNBLCAweDAyNjApLAogCUlOVENfVkVDVChJUlE0QSwgMHgwMjgwKSwgSU5UQ19WRUNUKElSUTVBLCAweDAyYTApLApAQCAtMjAyLDcgKzIwMiw3IEBACiAJSU5UQ19HUk9VUChJQ1VETUMsIElDVURNQ19JQ1VETUMxLCBJQ1VETUNfSUNVRE1DMiksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgaW50Y2FfbWFza19yZWdpc3RlcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBpbnRjYV9tYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGU2OTAwMDQwLCAweGU2OTAwMDYwLCA4LCAvKiBJTlRNU0swMEEgLyBJTlRNU0tDTFIwMEEgKi8KIAkgIHsgSVJRMEEsIElSUTFBLCBJUlEyQSwgSVJRM0EsIElSUTRBLCBJUlE1QSwgSVJRNkEsIElSUTdBIH0gfSwKIAl7IDB4ZTY5MDAwNDQsIDB4ZTY5MDAwNjQsIDgsIC8qIElOVE1TSzEwQSAvIElOVE1TS0NMUjEwQSAqLwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJICAgIFNDSUZBNiwgMCwgMCwgMCB9IH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgaW50Y2FfcHJpb19yZWdpc3RlcnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBpbnRjYV9wcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGU2OTAwMDEwLCAwLCAzMiwgNCwgLyogSU5UUFJJMDBBICovCiAJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCiAJeyAweGU2OTAwMDE0LCAwLCAzMiwgNCwgLyogSU5UUFJJMTBBICovCkBAIC0zNDYsNyArMzQ2LDMwMSBAQAogCQkJICAgaW50Y2Ffc2Vuc2VfcmVnaXN0ZXJzLCBpbnRjYV9hY2tfcmVnaXN0ZXJzKSwKIH07CiAKKy8qIHRoaXMgbWFjcm8gaWdub3JlIGVudHJ5IHdoaWNoIGlzIGFsc28gaW4gSU5UQ0EgKi8KKyNkZWZpbmUgX19JR05PUkUoYS4uLikKKyNkZWZpbmUgX19JR05PUkUwKGEuLi4pIDAKKworZW51bSB7CisJVU5VU0VEX0lOVENTID0gMCwKKworCUlOVENTLAorCisJLyogaW50ZXJydXB0IHNvdXJjZXMgSU5UQ1MgKi8KKwlWRVVfVkVVMCwgVkVVX1ZFVTEsIFZFVV9WRVUyLCBWRVVfVkVVMywKKwlSVERNQUMxXzFfREVJMCwgUlRETUFDMV8xX0RFSTEsIFJURE1BQzFfMV9ERUkyLCBSVERNQUMxXzFfREVJMywKKwlDRVUsCisJQkVVX0JFVTAsIEJFVV9CRVUxLCBCRVVfQkVVMiwKKwlfX0lHTk9SRShNRkkpCisJX19JR05PUkUoQkJJRjIpCisJVlBVLAorCVRTSUYxLAorCV9fSUdOT1JFKFNHWDU0MCkKKwlfMkRETUFDLAorCUlJQzJfQUxJMiwgSUlDMl9UQUNLSTIsIElJQzJfV0FJVEkyLCBJSUMyX0RURUkyLAorCUlQTU1VX0lQTU1VUiwgSVBNTVVfSVBNTVVSMiwKKwlSVERNQUMxXzJfREVJNCwgUlRETUFDMV8yX0RFSTUsIFJURE1BQzFfMl9EQURFUlIsCisJX19JR05PUkUoS0VZU0MpCisJX19JR05PUkUoVFRJMjApCisJX19JR05PUkUoTVNJT0YpCisJSUlDMF9BTEkwLCBJSUMwX1RBQ0tJMCwgSUlDMF9XQUlUSTAsIElJQzBfRFRFSTAsCisJVE1VX1RVTkkwLCBUTVVfVFVOSTEsIFRNVV9UVU5JMiwKKwlDTVQwLAorCVRTSUYwLAorCV9fSUdOT1JFKENNVDIpCisJTE1CLAorCV9fSUdOT1JFKE1TVUcpCisJX19JR05PUkUoTVNVX01TVSwgTVNVX01TVTIpCisJX19JR05PUkUoQ1RJKQorCU1WSTMsCisJX19JR05PUkUoUldEVDApCisJX19JR05PUkUoUldEVDEpCisJSUNCLAorCVBFUCwKKwlBU0EsCisJX19JR05PUkUoXzJERykKKwlIUUUsCisJSlBVLAorCUxDREMwLAorCV9fSUdOT1JFKExDUkMpCisJUlRETUFDMl8xX0RFSTAsIFJURE1BQzJfMV9ERUkxLCBSVERNQUMyXzFfREVJMiwgUlRETUFDMl8xX0RFSTMsCisJUlRETUFDMl8yX0RFSTQsIFJURE1BQzJfMl9ERUk1LCBSVERNQUMyXzJfREFERVJSLAorCUZSQywKKwlMQ0RDMSwKKwlDU0lSWCwKKwlEU0lUWF9EU0lUWDAsIERTSVRYX0RTSVRYMSwKKwlfX0lHTk9SRShTUFUyX1NQVTAsIFNQVTJfU1BVMSkKKwlfX0lHTk9SRShGU0kpCisJX19JR05PUkUoRk1TSSkKKwlfX0lHTk9SRShTQ1VWKQorCVRNVTFfVFVOSTEwLCBUTVUxX1RVTkkxMSwgVE1VMV9UVU5JMTIsCisJVFNJRjIsCisJQ01UNCwKKwlfX0lHTk9SRShNRklTMikKKwlDUE9SVFMyUiwKKworCS8qIGludGVycnVwdCBncm91cHMgSU5UQ1MgKi8KKwlSVERNQUMxXzEsIFJURE1BQzFfMiwgVkVVLCBCRVUsIElJQzAsIF9fSUdOT1JFKE1TVSkgSVBNTVUsCisJSUlDMiwgUlRETUFDMl8xLCBSVERNQUMyXzIsIERTSVRYLCBfX0lHTk9SRShTUFUyKSBUTVUxLAorfTsKKworI2RlZmluZSBJTlRDU19JTlRWRUNUIDB4MEY4MAorc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y3NfdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ1NfVkVDVChWRVVfVkVVMCwgMHgwNzAwKSwgSU5UQ1NfVkVDVChWRVVfVkVVMSwgMHgwNzIwKSwKKwlJTlRDU19WRUNUKFZFVV9WRVUyLCAweDA3NDApLCBJTlRDU19WRUNUKFZFVV9WRVUzLCAweDA3NjApLAorCUlOVENTX1ZFQ1QoUlRETUFDMV8xX0RFSTAsIDB4MDgwMCksIElOVENTX1ZFQ1QoUlRETUFDMV8xX0RFSTEsIDB4MDgyMCksCisJSU5UQ1NfVkVDVChSVERNQUMxXzFfREVJMiwgMHgwODQwKSwgSU5UQ1NfVkVDVChSVERNQUMxXzFfREVJMywgMHgwODYwKSwKKwlJTlRDU19WRUNUKENFVSwgMHgwODgwKSwKKwlJTlRDU19WRUNUKEJFVV9CRVUwLCAweDA4QTApLAorCUlOVENTX1ZFQ1QoQkVVX0JFVTEsIDB4MDhDMCksCisJSU5UQ1NfVkVDVChCRVVfQkVVMiwgMHgwOEUwKSwKKwlfX0lHTk9SRShJTlRDU19WRUNUKE1GSSwgMHgwOTAwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKEJCSUYyLCAweDA5NjApKQorCUlOVENTX1ZFQ1QoVlBVLCAweDA5ODApLAorCUlOVENTX1ZFQ1QoVFNJRjEsIDB4MDlBMCksCisJX19JR05PUkUoSU5UQ1NfVkVDVChTR1g1NDAsIDB4MDlFMCkpCisJSU5UQ1NfVkVDVChfMkRETUFDLCAweDBBMDApLAorCUlOVENTX1ZFQ1QoSUlDMl9BTEkyLCAweDBBODApLCBJTlRDU19WRUNUKElJQzJfVEFDS0kyLCAweDBBQTApLAorCUlOVENTX1ZFQ1QoSUlDMl9XQUlUSTIsIDB4MEFDMCksIElOVENTX1ZFQ1QoSUlDMl9EVEVJMiwgMHgwQUUwKSwKKwlJTlRDU19WRUNUKElQTU1VX0lQTU1VUiwgMHgwQjAwKSwgSU5UQ1NfVkVDVChJUE1NVV9JUE1NVVIyLCAweDBCMjApLAorCUlOVENTX1ZFQ1QoUlRETUFDMV8yX0RFSTQsIDB4MEI4MCksCisJSU5UQ1NfVkVDVChSVERNQUMxXzJfREVJNSwgMHgwQkEwKSwKKwlJTlRDU19WRUNUKFJURE1BQzFfMl9EQURFUlIsIDB4MEJDMCksCisJX19JR05PUkUoSU5UQ1NfVkVDVChLRVlTQyAweDBCRTApKQorCV9fSUdOT1JFKElOVENTX1ZFQ1QoVFRJMjAsIDB4MEM4MCkpCisJX19JR05PUkUoSU5UQ1NfVkVDVChNU0lPRiwgMHgwRDIwKSkKKwlJTlRDU19WRUNUKElJQzBfQUxJMCwgMHgwRTAwKSwgSU5UQ1NfVkVDVChJSUMwX1RBQ0tJMCwgMHgwRTIwKSwKKwlJTlRDU19WRUNUKElJQzBfV0FJVEkwLCAweDBFNDApLCBJTlRDU19WRUNUKElJQzBfRFRFSTAsIDB4MEU2MCksCisJSU5UQ1NfVkVDVChUTVVfVFVOSTAsIDB4MEU4MCksCisJSU5UQ1NfVkVDVChUTVVfVFVOSTEsIDB4MEVBMCksCisJSU5UQ1NfVkVDVChUTVVfVFVOSTIsIDB4MEVDMCksCisJSU5UQ1NfVkVDVChDTVQwLCAweDBGMDApLAorCUlOVENTX1ZFQ1QoVFNJRjAsIDB4MEYyMCksCisJX19JR05PUkUoSU5UQ1NfVkVDVChDTVQyLCAweDBGNDApKQorCUlOVENTX1ZFQ1QoTE1CLCAweDBGNjApLAorCV9fSUdOT1JFKElOVENTX1ZFQ1QoTVNVRywgMHgwRjgwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKE1TVV9NU1UsIDB4MEZBMCkpCisJX19JR05PUkUoSU5UQ1NfVkVDVChNU1VfTVNVMiwgMHgwRkMwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKENUSSwgMHgwNDAwKSkKKwlJTlRDU19WRUNUKE1WSTMsIDB4MDQyMCksCisJX19JR05PUkUoSU5UQ1NfVkVDVChSV0RUMCwgMHgwNDQwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKFJXRFQxLCAweDA0NjApKQorCUlOVENTX1ZFQ1QoSUNCLCAweDA0ODApLAorCUlOVENTX1ZFQ1QoUEVQLCAweDA0QTApLAorCUlOVENTX1ZFQ1QoQVNBLCAweDA0QzApLAorCV9fSUdOT1JFKElOVENTX1ZFQ1QoXzJERywgMHgwNEUwKSkKKwlJTlRDU19WRUNUKEhRRSwgMHgwNTQwKSwKKwlJTlRDU19WRUNUKEpQVSwgMHgwNTYwKSwKKwlJTlRDU19WRUNUKExDREMwLCAweDA1ODApLAorCV9fSUdOT1JFKElOVENTX1ZFQ1QoTENSQywgMHgwNUEwKSkKKwlJTlRDU19WRUNUKFJURE1BQzJfMV9ERUkwLCAweDEzMDApLCBJTlRDU19WRUNUKFJURE1BQzJfMV9ERUkxLCAweDEzMjApLAorCUlOVENTX1ZFQ1QoUlRETUFDMl8xX0RFSTIsIDB4MTM0MCksIElOVENTX1ZFQ1QoUlRETUFDMl8xX0RFSTMsIDB4MTM2MCksCisJSU5UQ1NfVkVDVChSVERNQUMyXzJfREVJNCwgMHgxMzgwKSwgSU5UQ1NfVkVDVChSVERNQUMyXzJfREVJNSwgMHgxM0EwKSwKKwlJTlRDU19WRUNUKFJURE1BQzJfMl9EQURFUlIsIDB4MTNDMCksCisJSU5UQ1NfVkVDVChGUkMsIDB4MTcwMCksCisJSU5UQ1NfVkVDVChMQ0RDMSwgMHgxNzgwKSwKKwlJTlRDU19WRUNUKENTSVJYLCAweDE3QTApLAorCUlOVENTX1ZFQ1QoRFNJVFhfRFNJVFgwLCAweDE3QzApLCBJTlRDU19WRUNUKERTSVRYX0RTSVRYMSwgMHgxN0UwKSwKKwlfX0lHTk9SRShJTlRDU19WRUNUKFNQVTJfU1BVMCwgMHgxODAwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKFNQVTJfU1BVMSwgMHgxODIwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKEZTSSwgMHgxODQwKSkKKwlfX0lHTk9SRShJTlRDU19WRUNUKEZNU0ksIDB4MTg2MCkpCisJX19JR05PUkUoSU5UQ1NfVkVDVChTQ1VWLCAweDE4ODApKQorCUlOVENTX1ZFQ1QoVE1VMV9UVU5JMTAsIDB4MTkwMCksIElOVENTX1ZFQ1QoVE1VMV9UVU5JMTEsIDB4MTkyMCksCisJSU5UQ1NfVkVDVChUTVUxX1RVTkkxMiwgMHgxOTQwKSwKKwlJTlRDU19WRUNUKFRTSUYyLCAweDE5NjApLAorCUlOVENTX1ZFQ1QoQ01UNCwgMHgxOTgwKSwKKwlfX0lHTk9SRShJTlRDU19WRUNUKE1GSVMyLCAweDFBMDApKQorCUlOVENTX1ZFQ1QoQ1BPUlRTMlIsIDB4MUEyMCksCisKKwlJTlRDX1ZFQ1QoSU5UQ1MsIElOVENTX0lOVFZFQ1QpLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGludGNzX2dyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19HUk9VUChSVERNQUMxXzEsCisJCSAgIFJURE1BQzFfMV9ERUkwLCBSVERNQUMxXzFfREVJMSwKKwkJICAgUlRETUFDMV8xX0RFSTIsIFJURE1BQzFfMV9ERUkzKSwKKwlJTlRDX0dST1VQKFJURE1BQzFfMiwKKwkJICAgUlRETUFDMV8yX0RFSTQsIFJURE1BQzFfMl9ERUk1LCBSVERNQUMxXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKFZFVSwgVkVVX1ZFVTAsIFZFVV9WRVUxLCBWRVVfVkVVMiwgVkVVX1ZFVTMpLAorCUlOVENfR1JPVVAoQkVVLCBCRVVfQkVVMCwgQkVVX0JFVTEsIEJFVV9CRVUyKSwKKwlJTlRDX0dST1VQKElJQzAsIElJQzBfQUxJMCwgSUlDMF9UQUNLSTAsIElJQzBfV0FJVEkwLCBJSUMwX0RURUkwKSwKKwlfX0lHTk9SRShJTlRDX0dST1VQKE1TVSwgTVNVX01TVSwgTVNVX01TVTIpKQorCUlOVENfR1JPVVAoSVBNTVUsIElQTU1VX0lQTU1VUiwgSVBNTVVfSVBNTVVSMiksCisJSU5UQ19HUk9VUChJSUMyLCBJSUMyX0FMSTIsIElJQzJfVEFDS0kyLCBJSUMyX1dBSVRJMiwgSUlDMl9EVEVJMiksCisJSU5UQ19HUk9VUChSVERNQUMyXzEsCisJCSAgIFJURE1BQzJfMV9ERUkwLCBSVERNQUMyXzFfREVJMSwKKwkJICAgUlRETUFDMl8xX0RFSTIsIFJURE1BQzJfMV9ERUkzKSwKKwlJTlRDX0dST1VQKFJURE1BQzJfMiwgUlRETUFDMl8yX0RFSTQsIFJURE1BQzJfMl9ERUk1LCBSVERNQUMyXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKERTSVRYLCBEU0lUWF9EU0lUWDAsIERTSVRYX0RTSVRYMSksCisJX19JR05PUkUoSU5UQ19HUk9VUChTUFUyLCBTUFUyX1NQVTAsIFNQVTJfU1BVMSkpCisJSU5UQ19HUk9VUChUTVUxLCBUTVUxX1RVTkkxMCwgVE1VMV9UVU5JMTEsIFRNVTFfVFVOSTEyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBpbnRjc19tYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweEU2OTQwMTg0LCAweEU2OTQwMUM0LCA4LCAvKiBJTVIxQVMgLyBJTUNSMUFTICAqLworCSAgeyBCRVVfQkVVMiwgQkVVX0JFVTEsIEJFVV9CRVUwLCBDRVUsCisJICAgIFZFVV9WRVUzLCBWRVVfVkVVMiwgVkVVX1ZFVTEsIFZFVV9WRVUwIH0gfSwKKwl7IDB4RTY5NDAxODgsIDB4RTY5NDAxQzgsIDgsIC8qIElNUjJBUyAvIElNQ1IyQVMgKi8KKwkgIHsgMCwgMCwgMCwgVlBVLAorCSAgICBfX0lHTk9SRTAoQkJJRjIpLCAwLCAwLCBfX0lHTk9SRTAoTUZJKSB9IH0sCisJeyAweEU2OTQwMThDLCAweEU2OTQwMUNDLCA4LCAvKiBJTVIzQVMgLyBJTUNSM0FTICovCisJICB7IDAsIDAsIDAsIF8yRERNQUMsCisJICAgIF9fSUdOT1JFMChfMkRHKSwgQVNBLCBQRVAsIElDQiB9IH0sCisJeyAweEU2OTQwMTkwLCAweEU2OTQwMUQwLCA4LCAvKiBJTVI0QVMgLyBJTUNSNEFTICovCisJICB7IDAsIDAsIE1WSTMsIF9fSUdOT1JFMChDVEkpLAorCSAgICBKUFUsIEhRRSwgX19JR05PUkUwKExDUkMpLCBMQ0RDMCB9IH0sCisJeyAweEU2OTQwMTk0LCAweEU2OTQwMUQ0LCA4LCAvKiBJTVI1QVMgLyBJTUNSNUFTICovCisJICB7IF9fSUdOT1JFMChLRVlTQyksIFJURE1BQzFfMl9EQURFUlIsIFJURE1BQzFfMl9ERUk1LCBSVERNQUMxXzJfREVJNCwKKwkgICAgUlRETUFDMV8xX0RFSTMsIFJURE1BQzFfMV9ERUkyLCBSVERNQUMxXzFfREVJMSwgUlRETUFDMV8xX0RFSTAgfSB9LAorCV9fSUdOT1JFKHsgMHhFNjk0MDE5OCwgMHhFNjk0MDFEOCwgOCwgLyogSU1SNkFTIC8gSU1DUjZBUyAqLworCSAgeyAwLCAwLCBNU0lPRiwgMCwKKwkgICAgU0dYNTQwLCAwLCBUVEkyMCwgMCB9IH0pCisJeyAweEU2OTQwMTlDLCAweEU2OTQwMURDLCA4LCAvKiBJTVI3QVMgLyBJTUNSN0FTICovCisJICB7IDAsIFRNVV9UVU5JMiwgVE1VX1RVTkkxLCBUTVVfVFVOSTAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCV9fSUdOT1JFKHsgMHhFNjk0MDFBMCwgMHhFNjk0MDFFMCwgOCwgLyogSU1SOEFTIC8gSU1DUjhBUyAqLworCSAgeyAwLCAwLCAwLCAwLAorCSAgICAwLCBNU1VfTVNVLCBNU1VfTVNVMiwgTVNVRyB9IH0pCisJeyAweEU2OTQwMUE0LCAweEU2OTQwMUU0LCA4LCAvKiBJTVI5QVMgLyBJTUNSOUFTICovCisJICB7IF9fSUdOT1JFMChSV0RUMSksIF9fSUdOT1JFMChSV0RUMCksIF9fSUdOT1JFMChDTVQyKSwgQ01UMCwKKwkgICAgSUlDMl9EVEVJMiwgSUlDMl9XQUlUSTIsIElJQzJfVEFDS0kyLCBJSUMyX0FMSTIgfSB9LAorCXsgMHhFNjk0MDFBOCwgMHhFNjk0MDFFOCwgOCwgLyogSU1SMTBBUyAvIElNQ1IxMEFTICovCisJICB7IDAsIDAsIElQTU1VX0lQTU1VUiwgSVBNTVVfSVBNTVVSMiwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweEU2OTQwMUFDLCAweEU2OTQwMUVDLCA4LCAvKiBJTVIxMUFTIC8gSU1DUjExQVMgKi8KKwkgIHsgSUlDMF9EVEVJMCwgSUlDMF9XQUlUSTAsIElJQzBfVEFDS0kwLCBJSUMwX0FMSTAsCisJICAgIDAsIFRTSUYxLCBMTUIsIFRTSUYwIH0gfSwKKwl7IDB4RTY5NTAxODAsIDB4RTY5NTAxQzAsIDgsIC8qIElNUjBBUzMgLyBJTUNSMEFTMyAqLworCSAgeyBSVERNQUMyXzFfREVJMCwgUlRETUFDMl8xX0RFSTEsIFJURE1BQzJfMV9ERUkyLCBSVERNQUMyXzFfREVJMywKKwkgICAgUlRETUFDMl8yX0RFSTQsIFJURE1BQzJfMl9ERUk1LCBSVERNQUMyXzJfREFERVJSLCAwIH0gfSwKKwl7IDB4RTY5NTAxOTAsIDB4RTY5NTAxRDAsIDgsIC8qIElNUjRBUzMgLyBJTUNSNEFTMyAqLworCSAgeyBGUkMsIDAsIDAsIDAsCisJICAgIExDREMxLCBDU0lSWCwgRFNJVFhfRFNJVFgwLCBEU0lUWF9EU0lUWDEgfSB9LAorCV9fSUdOT1JFKHsgMHhFNjk1MDE5NCwgMHhFNjk1MDFENCwgOCwgLyogSU1SNUFTMyAvIElNQ1I1QVMzICovCisJICB7U1BVMl9TUFUwLCBTUFUyX1NQVTEsIEZTSSwgRk1TSSwKKwkgICBTQ1VWLCAwLCAwLCAwIH0gfSkKKwl7IDB4RTY5NTAxOTgsIDB4RTY5NTAxRDgsIDgsIC8qIElNUjZBUzMgLyBJTUNSNkFTMyAqLworCSAgeyBUTVUxX1RVTkkxMCwgVE1VMV9UVU5JMTEsIFRNVTFfVFVOSTEyLCBUU0lGMiwKKwkgICAgQ01UNCwgMCwgMCwgMCB9IH0sCisJeyAweEU2OTUwMTlDLCAweEU2OTUwMURDLCA4LCAvKiBJTVI3QVMzIC8gSU1DUjdBUzMgKi8KKwkgIHsgX19JR05PUkUwKE1GSVMyKSwgQ1BPUlRTMlIsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhGRkQyMDEwNCwgMCwgMTYsIC8qIElOVEFNQVNLICovCisJICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIElOVENTIH0gfQorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIGludGNzX3ByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwkvKiBJUFJBUyAqLworCXsgMHhGRkQyMDAwMCwgMCwgMTYsIDQsIHsgX19JR05PUkUwKENUSSksIE1WSTMsIF8yRERNQUMsIElDQiB9IH0sCisJLyogSVBSQlMgKi8KKwl7IDB4RkZEMjAwMDQsIDAsIDE2LCA0LCB7IEpQVSwgTENEQzAsIDAsIF9fSUdOT1JFMChMQ1JDKSB9IH0sCisJLyogSVBSQ1MgKi8KKwlfX0lHTk9SRSh7IDB4RkZEMjAwMDgsIDAsIDE2LCA0LCB7IEJCSUYyLCAwLCAwLCAwIH0gfSkKKwkvKiBJUFJFUyAqLworCXsgMHhGRkQyMDAxMCwgMCwgMTYsIDQsIHsgUlRETUFDMV8xLCBDRVUsIF9fSUdOT1JFMChNRkkpLCBWUFUgfSB9LAorCS8qIElQUkZTICovCisJeyAweEZGRDIwMDE0LCAwLCAxNiwgNCwKKwkgIHsgX19JR05PUkUwKEtFWVNDKSwgUlRETUFDMV8yLCBfX0lHTk9SRTAoQ01UMiksIENNVDAgfSB9LAorCS8qIElQUkdTICovCisJeyAweEZGRDIwMDE4LCAwLCAxNiwgNCwgeyBUTVVfVFVOSTAsIFRNVV9UVU5JMSwgVE1VX1RVTkkyLCBUU0lGMSB9IH0sCisJLyogSVBSSFMgKi8KKwl7IDB4RkZEMjAwMUMsIDAsIDE2LCA0LCB7IF9fSUdOT1JFMChUVEkyMCksIDAsIFZFVSwgQkVVIH0gfSwKKwkvKiBJUFJJUyAqLworCXsgMHhGRkQyMDAyMCwgMCwgMTYsIDQsIHsgMCwgX19JR05PUkUwKE1TSU9GKSwgVFNJRjAsIElJQzAgfSB9LAorCS8qIElQUkpTICovCisJX19JR05PUkUoeyAweEZGRDIwMDI0LCAwLCAxNiwgNCwgeyAwLCBTR1g1NDAsIE1TVUcsIE1TVSB9IH0pCisJLyogSVBSS1MgKi8KKwl7IDB4RkZEMjAwMjgsIDAsIDE2LCA0LCB7IF9fSUdOT1JFMChfMkRHKSwgQVNBLCBMTUIsIFBFUCB9IH0sCisJLyogSVBSTFMgKi8KKwl7IDB4RkZEMjAwMkMsIDAsIDE2LCA0LCB7IElQTU1VLCAwLCAwLCBIUUUgfSB9LAorCS8qIElQUk1TICovCisJeyAweEZGRDIwMDMwLCAwLCAxNiwgNCwKKwkgIHsgSUlDMiwgMCwgX19JR05PUkUwKFJXRFQxKSwgX19JR05PUkUwKFJXRFQwKSB9IH0sCisJLyogSVBSQVMzICovCisJeyAweEZGRDUwMDAwLCAwLCAxNiwgNCwgeyBSVERNQUMyXzEsIDAsIDAsIDAgfSB9LAorCS8qIElQUkJTMyAqLworCXsgMHhGRkQ1MDAwNCwgMCwgMTYsIDQsIHsgUlRETUFDMl8yLCAwLCAwLCAwIH0gfSwKKwkvKiBJUFJJUzMgKi8KKwl7IDB4RkZENTAwMjAsIDAsIDE2LCA0LCB7IEZSQywgMCwgMCwgMCB9IH0sCisJLyogSVBSSlMzICovCisJeyAweEZGRDUwMDI0LCAwLCAxNiwgNCwgeyBMQ0RDMSwgQ1NJUlgsIERTSVRYLCAwIH0gfSwKKwkvKiBJUFJLUzMgKi8KKwlfX0lHTk9SRSh7IDB4RkZENTAwMjgsIDAsIDE2LCA0LCB7IFNQVTIsIDAsIEZTSSwgRk1TSSB9IH0pCisJLyogSVBSTFMzICovCisJX19JR05PUkUoeyAweEZGRDUwMDJDLCAwLCAxNiwgNCwgeyBTQ1VWLCAwLCAwLCAwIH0gfSkKKwkvKiBJUFJNUzMgKi8KKwl7IDB4RkZENTAwMzAsIDAsIDE2LCA0LCB7IFRNVTEsIDAsIDAsIFRTSUYyIH0gfSwKKwkvKiBJUFJOUzMgKi8KKwl7IDB4RkZENTAwMzQsIDAsIDE2LCA0LCB7IENNVDQsIDAsIDAsIDAgfSB9LAorCS8qIElQUk9TMyAqLworCXsgMHhGRkQ1MDAzOCwgMCwgMTYsIDQsIHsgX19JR05PUkUwKE1GSVMyKSwgQ1BPUlRTMlIsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbnRjc19yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmQyMDAwMCwKKwkJLmVuZAk9IDB4ZmZkNTAwZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNzX2Rlc2MgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJzaDczNzctaW50Y3MiLAorCS5yZXNvdXJjZSA9IGludGNzX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW50Y3NfcmVzb3VyY2VzKSwKKwkuaHcgPSBJTlRDX0hXX0RFU0MoaW50Y3NfdmVjdG9ycywgaW50Y3NfZ3JvdXBzLAorCQkJICAgaW50Y3NfbWFza19yZWdpc3RlcnMsIGludGNzX3ByaW9fcmVnaXN0ZXJzLAorCQkJICAgTlVMTCwgTlVMTCksCit9OworCitzdGF0aWMgdm9pZCBpbnRjc19kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSAodm9pZCAqKWdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGludCBldnRjb2RlYXMgPSBpb3JlYWQzMihyZWcpOworCisJZ2VuZXJpY19oYW5kbGVfaXJxKGludGNzX2V2dDJpcnEoZXZ0Y29kZWFzKSk7Cit9CisKKyNkZWZpbmUgSU5URVZUU0EgMHhGRkQyMDEwMAogdm9pZCBfX2luaXQgc2g3Mzc3X2luaXRfaXJxKHZvaWQpCiB7CisJdm9pZCBfX2lvbWVtICppbnRldnRzYSA9IGlvcmVtYXBfbm9jYWNoZShJTlRFVlRTQSwgUEFHRV9TSVpFKTsKKwogCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y2FfZGVzYyk7CisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjc19kZXNjKTsKKworCS8qIGRlbXV4IHVzaW5nIElOVEVWVFNBICovCisJc2V0X2lycV9kYXRhKGV2dDJpcnEoSU5UQ1NfSU5UVkVDVCksICh2b2lkICopaW50ZXZ0c2EpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGV2dDJpcnEoSU5UQ1NfSU5UVkVDVCksIGludGNzX2RlbXV4KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGZjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzcyLmMKaW5kZXggOTU1N2QwOS4uZWM0MjAzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzcyLmMKQEAgLTExNjAsNiArMTE2MCw5IEBACiAJR1BJT19GTihMQ0REMTgpLAlHUElPX0ZOKExDREQxOSksCUdQSU9fRk4oTENERDIwKSwKIAlHUElPX0ZOKExDREQyMSksCUdQSU9fRk4oTENERDIyKSwJR1BJT19GTihMQ0REMjMpLAogCisJR1BJT19GTihMQ0RDMF9TRUxFQ1QpLAorCUdQSU9fRk4oTENEQzFfU0VMRUNUKSwKKwogCS8qIElSREEgKi8KIAlHUElPX0ZOKElSREFfT1VUKSwJR1BJT19GTihJUkRBX0lOKSwJR1BJT19GTihJUkRBX0ZJUlNFTCksCiAJR1BJT19GTihJUk9VVF8xMzkpLAlHUElPX0ZOKElST1VUXzE0MCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM2Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYwppbmRleCBlY2E5MDcxLi4zMTQ4YzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM2Ny5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzY3LmMKQEAgLTMxLDExICszMSwxMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisvKiBTQ0lGQTAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM0MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzCQk9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjMDApLCBldnQyaXJxKDB4YzAwKSwKKwkJCSAgICBldnQyaXJxKDB4YzAwKSwgZXZ0MmlycSgweGMwMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTQ2LDExICs0OCwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTEgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM1MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjMjApLCBldnQyaXJxKDB4YzIwKSwKKwkJCSAgICBldnQyaXJxKDB4YzIwKSwgZXZ0MmlycSgweGMyMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKQEAgLTYxLDExICs2NSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTIgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM2MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODIsIDgyLCA4MiwgODIgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNDApLCBldnQyaXJxKDB4YzQwKSwKKwkJCSAgICBldnQyaXJxKDB4YzQwKSwgZXZ0MmlycSgweGM0MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKQEAgLTc2LDExICs4MiwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM3MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODMsIDgzLCA4MywgODMgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNjApLCBldnQyaXJxKDB4YzYwKSwKKwkJCSAgICBldnQyaXJxKDB4YzYwKSwgZXZ0MmlycSgweGM2MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKQEAgLTkxLDExICs5OSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTQgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM4MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODksIDg5LCA4OSwgODkgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhkMjApLCBldnQyaXJxKDB4ZDIwKSwKKwkJCSAgICBldnQyaXJxKDB4ZDIwKSwgZXZ0MmlycSgweGQyMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY0X2RldmljZSA9IHsKQEAgLTEwNiwxMSArMTE2LDEzIEBACiAJfSwKIH07CiAKKy8qIFNDSUZBNSAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY1X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UJPSAweGU2Y2IwMDAwLAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCi0JLmlycXMgICAgICAgICAgID0geyA5MCwgOTAsIDkwLCA5MCB9LAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweGQ0MCksIGV2dDJpcnEoMHhkNDApLAorCQkJICAgIGV2dDJpcnEoMHhkNDApLCBldnQyaXJxKDB4ZDQwKSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjVfZGV2aWNlID0gewpAQCAtMTIxLDExICsxMzMsMTMgQEAKIAl9LAogfTsKIAorLyogU0NJRkIgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmMzMDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgOTEsIDkxLCA5MSwgOTEgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhkNjApLCBldnQyaXJxKDB4ZDYwKSwKKwkJCSAgICBldnQyaXJxKDB4ZDYwKSwgZXZ0MmlycSgweGQ2MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY2X2RldmljZSA9IHsKQEAgLTE1Myw3ICsxNjcsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gNzIsCisJCS5zdGFydAk9IGV2dDJpcnEoMHhiMDApLCAvKiBDTVQxX0NNVDEwICovCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3MzcyLmMKaW5kZXggMWQxMTUzMi4uZTI2Njg2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jCkBAIC0yNiwxNyArMjYsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2RtYS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzM3Mi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisvKiBTQ0lGQTAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM0MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzCQk9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweDBjMDApLCBldnQyaXJxKDB4MGMwMCksCisJCQkgICAgZXZ0MmlycSgweDBjMDApLCBldnQyaXJxKDB4MGMwMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTQ3LDExICs1MSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTEgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM1MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweDBjMjApLCBldnQyaXJxKDB4MGMyMCksCisJCQkgICAgZXZ0MmlycSgweDBjMjApLCBldnQyaXJxKDB4MGMyMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKQEAgLTYyLDExICs2OCwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTIgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM2MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODIsIDgyLCA4MiwgODIgfSwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweDBjNDApLCBldnQyaXJxKDB4MGM0MCksCisJCQkgICAgZXZ0MmlycSgweDBjNDApLCBldnQyaXJxKDB4MGM0MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKQEAgLTc3LDExICs4NSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM3MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODMsIDgzLCA4MywgODMgfSwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweDBjNjApLCBldnQyaXJxKDB4MGM2MCksCisJCQkgICAgZXZ0MmlycSgweDBjNjApLCBldnQyaXJxKDB4MGM2MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKQEAgLTkyLDExICsxMDIsMTMgQEAKIAl9LAogfTsKIAorLyogU0NJRkE0ICovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZQk9IDB4ZTZjODAwMDAsCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkuaXJxcyAgICAgICAgICAgPSB7IDg5LCA4OSwgODksIDg5IH0sCisJLnR5cGUJCT0gUE9SVF9TQ0lGQSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHgwZDIwKSwgZXZ0MmlycSgweDBkMjApLAorCQkJICAgIGV2dDJpcnEoMHgwZDIwKSwgZXZ0MmlycSgweDBkMjApIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CkBAIC0xMDcsMTEgKzExOSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmNiMDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgOTAsIDkwLCA5MCwgOTAgfSwKKwkudHlwZQkJPSBQT1JUX1NDSUZBLAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweDBkNDApLCBldnQyaXJxKDB4MGQ0MCksCisJCQkgICAgZXZ0MmlycSgweDBkNDApLCBldnQyaXJxKDB4MGQ0MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY1X2RldmljZSA9IHsKQEAgLTEyMiwxMSArMTM2LDEzIEBACiAJfSwKIH07CiAKKy8qIFNDSUZCICovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjZfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZQk9IDB4ZTZjMzAwMDAsCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkuaXJxcyAgICAgICAgICAgPSB7IDkxLCA5MSwgOTEsIDkxIH0sCisJLnR5cGUJCT0gUE9SVF9TQ0lGQiwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHgwZDYwKSwgZXZ0MmlycSgweDBkNjApLAorCQkJICAgIGV2dDJpcnEoMHgwZDYwKSwgZXZ0MmlycSgweDBkNjApIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNl9kZXZpY2UgPSB7CkBAIC0xMzcsMTEgKzE1MywxMiBAQAogCX0sCiB9OwogCisvKiBDTVQgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiQ01UMTAiLAogCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCiAJLnRpbWVyX2JpdCA9IDAsCi0JLmNsayA9ICJyX2NsayIsCisJLmNsayA9ICJjbXQxIiwKIAkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCiAJLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKIH07CkBAIC0xNTQsNyArMTcxLDcgQEAKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IDcyLAorCQkuc3RhcnQJPSBldnQyaXJxKDB4MGIwMCksIC8qIENNVDFfQ01UMTAgKi8KIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xNjksNiArMTg2LDMzNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxMF9yZXNvdXJjZXMpLAogfTsKIAorLyogSTJDICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJSUMwIiwKKwkJLnN0YXJ0ICA9IDB4RkZGMjAwMDAsCisJCS5lbmQgICAgPSAweEZGRjIwNDI1IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gaW50Y3NfZXZ0MmlycSgweGUwMCksIC8qIElJQzBfQUxJMCAqLworCQkuZW5kICAgID0gaW50Y3NfZXZ0MmlycSgweGU2MCksIC8qIElJQzBfRFRFSTAgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpaWMwX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaTJjLXNoX21vYmlsZSIsCisJLmlkICAgICAgICAgICAgID0gMCwgLyogImkyYzAiIGNsb2NrICovCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpaWMwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaWljMF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJJSUMxIiwKKwkJLnN0YXJ0ICA9IDB4RTZDMjAwMDAsCisJCS5lbmQgICAgPSAweEU2QzIwNDI1IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gZXZ0MmlycSgweDc4MCksIC8qIElJQzFfQUxJMSAqLworCQkuZW5kICAgID0gZXZ0MmlycSgweDdlMCksIC8qIElJQzFfRFRFSTEgKi8KKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpaWMxX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaTJjLXNoX21vYmlsZSIsCisJLmlkICAgICAgICAgICAgID0gMSwgLyogImkyYzEiIGNsb2NrICovCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpaWMxX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaWljMV9yZXNvdXJjZXMsCit9OworCisvKiBETUEgKi8KKy8qIFRyYW5zbWl0IHNpemVzIGFuZCByZXNwZWN0aXZlIENIQ1IgcmVnaXN0ZXIgdmFsdWVzICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQJCT0gMCwKKwlYTUlUX1NaXzE2QklUCQk9IDEsCisJWE1JVF9TWl8zMkJJVAkJPSAyLAorCVhNSVRfU1pfNjRCSVQJCT0gNywKKwlYTUlUX1NaXzEyOEJJVAkJPSAzLAorCVhNSVRfU1pfMjU2QklUCQk9IDQsCisJWE1JVF9TWl81MTJCSVQJCT0gNSwKK307CisKKy8qIGxvZzIoc2l6ZSAvIDgpIC0gdXNlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIHRyYW5zZmVycyAqLworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCisJW1hNSVRfU1pfNTEyQklUXQk9IDYsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkgKCgoKGkpICYgMykgPDwgMykgfCBcCisJCQkgKCgoaSkgJiAweGMpIDw8ICgyMCAtIDIpKSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyBzaDczNzJfZG1hZV9zbGF2ZXNbXSA9IHsKKwl7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYwX1RYLAorCQkuYWRkcgkJPSAweGU2YzQwMDIwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjEsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMF9SWCwKKwkJLmFkZHIJCT0gMHhlNmM0MDAyNCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDIyLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJCS5hZGRyCQk9IDB4ZTZjNTAwMjAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyNSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYxX1JYLAorCQkuYWRkcgkJPSAweGU2YzUwMDI0LAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjYsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMl9UWCwKKwkJLmFkZHIJCT0gMHhlNmM2MDAyMCwKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDI5LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJCS5hZGRyCQk9IDB4ZTZjNjAwMjQsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyYSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYzX1RYLAorCQkuYWRkcgkJPSAweGU2YzcwMDIwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MmQsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGM19SWCwKKwkJLmFkZHIJCT0gMHhlNmM3MDAyNCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDJlLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjRfVFgsCisJCS5hZGRyCQk9IDB4ZTZjODAwMjAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgzOSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUY0X1JYLAorCQkuYWRkcgkJPSAweGU2YzgwMDI0LAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4M2EsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGNV9UWCwKKwkJLmFkZHIJCT0gMHhlNmNiMDAyMCwKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDM1LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjVfUlgsCisJCS5hZGRyCQk9IDB4ZTZjYjAwMjQsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgzNiwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUY2X1RYLAorCQkuYWRkcgkJPSAweGU2YzMwMDQwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4M2QsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGNl9SWCwKKwkJLmFkZHIJCT0gMHhlNmMzMDA2MCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDNlLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0RISTBfVFgsCisJCS5hZGRyCQk9IDB4ZTY4NTAwMzAsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMTZCSVQpLAorCQkubWlkX3JpZAk9IDB4YzEsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TREhJMF9SWCwKKwkJLmFkZHIJCT0gMHhlNjg1MDAzMCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8xNkJJVCksCisJCS5taWRfcmlkCT0gMHhjMiwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NESEkxX1RYLAorCQkuYWRkcgkJPSAweGU2ODYwMDMwLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzE2QklUKSwKKwkJLm1pZF9yaWQJPSAweGM5LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0RISTFfUlgsCisJCS5hZGRyCQk9IDB4ZTY4NjAwMzAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMTZCSVQpLAorCQkubWlkX3JpZAk9IDB4Y2EsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TREhJMl9UWCwKKwkJLmFkZHIJCT0gMHhlNjg3MDAzMCwKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8xNkJJVCksCisJCS5taWRfcmlkCT0gMHhjZCwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NESEkyX1JYLAorCQkuYWRkcgkJPSAweGU2ODcwMDMwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzE2QklUKSwKKwkJLm1pZF9yaWQJPSAweGNlLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDczNzJfZG1hZV9jaGFubmVsc1tdID0geworCXsKKwkJLm9mZnNldCA9IDAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MTAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MjAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MzAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NTAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NjAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSA4LAorCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7CisJLnNsYXZlCQk9IHNoNzM3Ml9kbWFlX3NsYXZlcywKKwkuc2xhdmVfbnVtCT0gQVJSQVlfU0laRShzaDczNzJfZG1hZV9zbGF2ZXMpLAorCS5jaGFubmVsCT0gc2g3MzcyX2RtYWVfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDczNzJfZG1hZV9jaGFubmVscyksCisJLnRzX2xvd19zaGlmdAk9IDMsCisJLnRzX2xvd19tYXNrCT0gMHgxOCwKKwkudHNfaGlnaF9zaGlmdAk9ICgyMCAtIDIpLAkvKiAyIGJpdHMgZm9yIHNoaWZ0ZWQgbG93IFRTICovCisJLnRzX2hpZ2hfbWFzawk9IDB4MDAzMDAwMDAsCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfRE1FLAorfTsKKworLyogUmVzb3VyY2Ugb3JkZXIgaW1wb3J0YW50ISAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDczNzJfZG1hZTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmZTAwODAyMCwKKwkJLmVuZAk9IDB4ZmUwMDgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBETUFSU3ggKi8KKwkJLnN0YXJ0CT0gMHhmZTAwOTAwMCwKKwkJLmVuZAk9IDB4ZmUwMDkwMGIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBETUEgZXJyb3IgSVJRICovCisJCS5zdGFydAk9IDI0NiwKKwkJLmVuZAk9IDI0NiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgMC01ICovCisJCS5zdGFydAk9IDI0MCwKKwkJLmVuZAk9IDI0NSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKy8qIFJlc291cmNlIG9yZGVyIGltcG9ydGFudCEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3MzcyX2RtYWUxX3Jlc291cmNlc1tdID0geworCXsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmUwMTgwMjAsCisJCS5lbmQJPSAweGZlMDE4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BUlN4ICovCisJCS5zdGFydAk9IDB4ZmUwMTkwMDAsCisJCS5lbmQJPSAweGZlMDE5MDBiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BIGVycm9yIElSUSAqLworCQkuc3RhcnQJPSAyNTQsCisJCS5lbmQJPSAyNTQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzIDAtNSAqLworCQkuc3RhcnQJPSAyNDgsCisJCS5lbmQJPSAyNTMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisvKiBSZXNvdXJjZSBvcmRlciBpbXBvcnRhbnQhICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzM3Ml9kbWFlMl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGZlMDI4MDIwLAorCQkuZW5kCT0gMHhmZTAyODA4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIERNQVJTeCAqLworCQkuc3RhcnQJPSAweGZlMDI5MDAwLAorCQkuZW5kCT0gMHhmZTAyOTAwYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIERNQSBlcnJvciBJUlEgKi8KKwkJLnN0YXJ0CT0gMjYyLAorCQkuZW5kCT0gMjYyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLyogSVJRIGZvciBjaGFubmVscyAwLTUgKi8KKwkJLnN0YXJ0CT0gMjU2LAorCQkuZW5kCT0gMjYxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzM3Ml9kbWFlMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzM3Ml9kbWFlMF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzM3Ml9kbWFlMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzM3Ml9kbWFlMV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAyLAorCS5yZXNvdXJjZQk9IHNoNzM3Ml9kbWFlMl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzM3Ml9kbWFlMl9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM3Ml9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmc2NpZjBfZGV2aWNlLAogCSZzY2lmMV9kZXZpY2UsCkBAIC0xNzgsNiArNTI2LDExIEBACiAJJnNjaWY1X2RldmljZSwKIAkmc2NpZjZfZGV2aWNlLAogCSZjbXQxMF9kZXZpY2UsCisJJmlpYzBfZGV2aWNlLAorCSZpaWMxX2RldmljZSwKKwkmZG1hMF9kZXZpY2UsCisJJmRtYTFfZGV2aWNlLAorCSZkbWEyX2RldmljZSwKIH07CiAKIHZvaWQgX19pbml0IHNoNzM3Ml9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQpAQCAtMTg2LDE0ICs1MzksOCBAQAogCQkJICAgIEFSUkFZX1NJWkUoc2g3MzcyX2Vhcmx5X2RldmljZXMpKTsKIH0KIAotI2RlZmluZSBTTVNUUENSMyAweGU2MTUwMTNjCi0jZGVmaW5lIFNNU1RQQ1IzX0NNVDEgKDEgPDwgMjkpCi0KIHZvaWQgX19pbml0IHNoNzM3Ml9hZGRfZWFybHlfZGV2aWNlcyh2b2lkKQogewotCS8qIGVuYWJsZSBjbG9jayB0byBDTVQxICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSAmIH5TTVNUUENSM19DTVQxLCBTTVNUUENSMyk7Ci0KIAllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczNzJfZWFybHlfZGV2aWNlcywKIAkJCQkgICBBUlJBWV9TSVpFKHNoNzM3Ml9lYXJseV9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzcuYwppbmRleCA2MGUzNzc3Li5iYjRhZGYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Ny5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3Mzc3LmMKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisvKiBTQ0lGQTAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM0MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzCQk9IHsgODAsIDgwLCA4MCwgODAgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjMDApLCBldnQyaXJxKDB4YzAwKSwKKwkJCSAgICBldnQyaXJxKDB4YzAwKSwgZXZ0MmlycSgweGMwMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKQEAgLTQ3LDExICs0OSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTEgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM1MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjMjApLCBldnQyaXJxKDB4YzIwKSwKKwkJCSAgICBldnQyaXJxKDB4YzIwKSwgZXZ0MmlycSgweGMyMCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKQEAgLTYyLDExICs2NiwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTIgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM2MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODIsIDgyLCA4MiwgODIgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNDApLCBldnQyaXJxKDB4YzQwKSwKKwkJCSAgICBldnQyaXJxKDB4YzQwKSwgZXZ0MmlycSgweGM0MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKQEAgLTc3LDExICs4MywxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmM3MDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgODMsIDgzLCA4MywgODMgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhjNjApLCBldnQyaXJxKDB4YzYwKSwKKwkJCSAgICBldnQyaXJxKDB4YzYwKSwgZXZ0MmlycSgweGM2MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKQEAgLTkyLDExICsxMDAsMTMgQEAKIAl9LAogfTsKIAorLyogU0NJRkE0ICovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZQk9IDB4ZTZjODAwMDAsCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkuaXJxcyAgICAgICAgICAgPSB7IDg5LCA4OSwgODksIDg5IH0sCisJLmlycXMJCT0geyBldnQyaXJxKDB4ZDIwKSwgZXZ0MmlycSgweGQyMCksCisJCQkgICAgZXZ0MmlycSgweGQyMCksIGV2dDJpcnEoMHhkMjApIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CkBAIC0xMDcsMTEgKzExNywxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQTUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhlNmNiMDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCS5pcnFzICAgICAgICAgICA9IHsgOTAsIDkwLCA5MCwgOTAgfSwKKwkuaXJxcwkJPSB7IGV2dDJpcnEoMHhkNDApLCBldnQyaXJxKDB4ZDQwKSwKKwkJCSAgICBldnQyaXJxKDB4ZDQwKSwgZXZ0MmlycSgweGQ0MCkgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY1X2RldmljZSA9IHsKQEAgLTEyMiwxMSArMTM0LDEzIEBACiAJfSwKIH07CiAKKy8qIFNDSUZBNiAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY2X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UJPSAweGU2Y2MwMDAwLAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCi0JLmlycXMgICAgICAgICAgID0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKKwkuaXJxcwkJPSB7IGludGNzX2V2dDJpcnEoMHgxYTgwKSwgaW50Y3NfZXZ0MmlycSgweDFhODApLAorCQkJICAgIGludGNzX2V2dDJpcnEoMHgxYTgwKSwgaW50Y3NfZXZ0MmlycSgweDFhODApIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNl9kZXZpY2UgPSB7CkBAIC0xMzcsMTEgKzE1MSwxMyBAQAogCX0sCiB9OwogCisvKiBTQ0lGQiAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY3X3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UJPSAweGU2YzMwMDAwLAogCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkudHlwZQkJPSBQT1JUX1NDSUYsCi0JLmlycXMgICAgICAgICAgID0geyA5MSwgOTEsIDkxLCA5MSB9LAorCS5pcnFzCQk9IHsgZXZ0MmlycSgweGQ2MCksIGV2dDJpcnEoMHhkNjApLAorCQkJICAgIGV2dDJpcnEoMHhkNjApLCBldnQyaXJxKDB4ZDYwKSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjdfZGV2aWNlID0gewpAQCAtMTY5LDcgKzE4NSw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSA3MiwKKwkJLnN0YXJ0CT0gZXZ0MmlycSgweGIwMCksIC8qIENNVDFfQ01UMTAgKi8KIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3NzEzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvS2NvbmZpZwpAQCAtMCwwICsxLDUwIEBACitpZiBBUkNIX1RFR1JBCisKK2NvbW1lbnQgIk5WSURJQSBUZWdyYSBvcHRpb25zIgorCitjaG9pY2UKKwlwcm9tcHQgIlNlbGVjdCBUZWdyYSBwcm9jZXNzb3IgZmFtaWx5IGZvciB0YXJnZXQgc3lzdGVtIgorCitjb25maWcgQVJDSF9URUdSQV8yeF9TT0MKKwlib29sICJUZWdyYSAyIGZhbWlseSIKKwlzZWxlY3QgQ1BVX1Y3CisJc2VsZWN0IEFSTV9HSUMKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwloZWxwCisJICBTdXBwb3J0IGZvciBOVklESUEgVGVncmEgQVAyMCBhbmQgVDIwIHByb2Nlc3NvcnMsIGJhc2VkIG9uIHRoZQorCSAgQVJNIENvcnRleEE5TVAgQ1BVIGFuZCB0aGUgQVJNIFBMMzEwIEwyIGNhY2hlIGNvbnRyb2xsZXIKKworZW5kY2hvaWNlCisKK2NvbW1lbnQgIlRlZ3JhIGJvYXJkIHR5cGUiCisKK2NvbmZpZyBNQUNIX0hBUk1PTlkKKyAgICAgICBib29sICJIYXJtb255IGJvYXJkIgorICAgICAgIGhlbHAKKyAgICAgICAgIFN1cHBvcnQgZm9yIG5WaWRpYSBIYXJtb255IGRldmVsb3BtZW50IHBsYXRmb3JtCisKK2Nob2ljZQorICAgICAgICBwcm9tcHQgIkxvdy1sZXZlbCBkZWJ1ZyBjb25zb2xlIFVBUlQiCisgICAgICAgIGRlZmF1bHQgVEVHUkFfREVCVUdfVUFSVF9OT05FCisKK2NvbmZpZyBURUdSQV9ERUJVR19VQVJUX05PTkUKKyAgICAgICAgYm9vbCAiTm9uZSIKKworY29uZmlnIFRFR1JBX0RFQlVHX1VBUlRBCisgICAgICAgIGJvb2wgIlVBUlQtQSIKKworY29uZmlnIFRFR1JBX0RFQlVHX1VBUlRCCisgICAgICAgIGJvb2wgIlVBUlQtQiIKKworY29uZmlnIFRFR1JBX0RFQlVHX1VBUlRDCisgICAgICAgIGJvb2wgIlVBUlQtQyIKKworY29uZmlnIFRFR1JBX0RFQlVHX1VBUlRECisgICAgICAgIGJvb2wgIlVBUlQtRCIKKworY29uZmlnIFRFR1JBX0RFQlVHX1VBUlRFCisgICAgICAgIGJvb2wgIlVBUlQtRSIKKworZW5kY2hvaWNlCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWU5MzcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACitvYmoteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gY29tbW9uLm8KK29iai15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBpby5vCitvYmoteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gaXJxLm8KK29iai15ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArPSBjbG9jay5vCitvYmoteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gdGltZXIubworb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGdwaW8ubworb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IHBpbm11eC5vCitvYmotJChDT05GSUdfQVJDSF9URUdSQV8yeF9TT0MpICAgICAgICAgKz0gY2xvY2subworb2JqLSQoQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DKSAgICAgICAgICs9IHRlZ3JhMl9jbG9ja3Mubworb2JqLSQoQ09ORklHX1NNUCkgICAgICAgICAgICAgICAgICAgICAgICs9IHBsYXRzbXAubyBsb2NhbHRpbWVyLm8gaGVhZHNtcC5vCitvYmotJChDT05GSUdfSE9UUExVR19DUFUpICAgICAgICAgICAgICAgKz0gaG90cGx1Zy5vCisKK29iai0ke0NPTkZJR19NQUNIX0hBUk1PTll9ICAgICAgICAgICAgICArPSBib2FyZC1oYXJtb255Lm8KK29iai0ke0NPTkZJR19NQUNIX0hBUk1PTll9ICAgICAgICAgICAgICArPSBib2FyZC1oYXJtb255LXBpbm11eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1MmQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKK3pyZWxhZGRyLSQoQ09ORklHX0FSQ0hfVEVHUkFfMnhfU09DKQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19BUkNIX1RFR1JBXzJ4X1NPQykJOj0gMHgwMDAwMDEwMAoraW5pdHJkX3BoeXMtJChDT05GSUdfQVJDSF9URUdSQV8yeF9TT0MpCTo9IDB4MDA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1waW5tdXguYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS1waW5tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGIxNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBpbm11eC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LXBpbm11eC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxtYWNoL3Bpbm11eC5oPgorCisjaW5jbHVkZSAiYm9hcmQtaGFybW9ueS5oIgorCitzdGF0aWMgc3RydWN0IHRlZ3JhX3Bpbmdyb3VwX2NvbmZpZyBoYXJtb255X3Bpbm11eFtdID0geworCXtURUdSQV9QSU5HUk9VUF9BVEEsICAgVEVHUkFfTVVYX0lERSwgICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfQVRCLCAgIFRFR1JBX01VWF9TRElPNCwgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0FUQywgICBURUdSQV9NVVhfTkFORCwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9BVEQsICAgVEVHUkFfTVVYX0dNSSwgICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfQVRFLCAgIFRFR1JBX01VWF9HTUksICAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0NERVYxLCBURUdSQV9NVVhfT1NDLCAgICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0NERVYyLCBURUdSQV9NVVhfUExMUF9PVVQ0LCAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0NSVFAsICBURUdSQV9NVVhfQ1JULCAgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0NTVVMsICBURUdSQV9NVVhfVklfU0VOU09SX0NMSywgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0RBUDEsICBURUdSQV9NVVhfREFQMSwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0RBUDIsICBURUdSQV9NVVhfREFQMiwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0RBUDMsICBURUdSQV9NVVhfREFQMywgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0RBUDQsICBURUdSQV9NVVhfREFQNCwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0REQywgICBURUdSQV9NVVhfSTJDMiwgICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9EVEEsICAgVEVHUkFfTVVYX1NESU8yLCAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9EVEIsICAgVEVHUkFfTVVYX1JTVkQxLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9EVEMsICAgVEVHUkFfTVVYX1JTVkQxLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9EVEQsICAgVEVHUkFfTVVYX1NESU8yLCAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9EVEUsICAgVEVHUkFfTVVYX1JTVkQxLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9EVEYsICAgVEVHUkFfTVVYX0kyQzMsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9HTUEsICAgVEVHUkFfTVVYX1NESU80LCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfR01CLCAgIFRFR1JBX01VWF9HTUksICAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0dNQywgICBURUdSQV9NVVhfVUFSVEQsICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9HTUQsICAgVEVHUkFfTVVYX0dNSSwgICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfR01FLCAgIFRFR1JBX01VWF9TRElPNCwgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0dQVSwgICBURUdSQV9NVVhfR01JLCAgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0dQVTcsICBURUdSQV9NVVhfUlRDSywgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9HUFYsICAgVEVHUkFfTVVYX1BDSUUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9IRElOVCwgVEVHUkFfTVVYX0hETUksICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9JMkNQLCAgVEVHUkFfTVVYX0kyQywgICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfSVJSWCwgIFRFR1JBX01VWF9VQVJUQSwgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfSVJUWCwgIFRFR1JBX01VWF9VQVJUQSwgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfS0JDQSwgIFRFR1JBX01VWF9LQkMsICAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0tCQ0IsICBURUdSQV9NVVhfS0JDLCAgICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9LQkNDLCAgVEVHUkFfTVVYX0tCQywgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfS0JDRCwgIFRFR1JBX01VWF9LQkMsICAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0tCQ0UsICBURUdSQV9NVVhfS0JDLCAgICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9LQkNGLCAgVEVHUkFfTVVYX0tCQywgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTENTTiwgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQwLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xEMSwgICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDEwLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQxMSwgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xEMTIsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDEzLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQxNCwgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xEMTUsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDE2LCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQxNywgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xEMiwgICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDMsICAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQ0LCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xENSwgICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDYsICAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEQ3LCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xEOCwgICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MRDksICAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTERDLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfTERJLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xIUDAsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX0RPV04sIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MSFAxLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTEhQMiwgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xIUywgICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MTTAsICAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTE0xLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfTFBQLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xQVzAsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MUFcxLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9MUFcyLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTFNDMCwgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0xTQzEsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0xTQ0ssICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0xTREEsICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0xTREksICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX0xTUEksICBURUdSQV9NVVhfRElTUExBWUEsICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9MVlAwLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9MVlAxLCAgVEVHUkFfTVVYX0RJU1BMQVlBLCAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfTFZTLCAgIFRFR1JBX01VWF9ESVNQTEFZQSwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX09XQywgICBURUdSQV9NVVhfUlNWRDIsICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX1BNQywgICBURUdSQV9NVVhfUFdSX09OLCAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9QVEEsICAgVEVHUkFfTVVYX0hETUksICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfUk0sICAgIFRFR1JBX01VWF9JMkMsICAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX1NEQiwgICBURUdSQV9NVVhfUFdNLCAgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9UUklTVEFURX0sCisJe1RFR1JBX1BJTkdST1VQX1NEQywgICBURUdSQV9NVVhfUFdNLCAgICAgICAgICAgVEVHUkFfUFVQRF9QVUxMX1VQLCAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9TREQsICAgVEVHUkFfTVVYX1BXTSwgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TRElPMSwgVEVHUkFfTVVYX1NESU8xLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TTFhBLCAgVEVHUkFfTVVYX1BDSUUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TTFhDLCAgVEVHUkFfTVVYX1NQRElGLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TTFhELCAgVEVHUkFfTVVYX1NQRElGLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TTFhLLCAgVEVHUkFfTVVYX1BDSUUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TUERJLCAgVEVHUkFfTVVYX1JTVkQyLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TUERPLCAgVEVHUkFfTVVYX1JTVkQyLCAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TUElBLCAgVEVHUkFfTVVYX0dNSSwgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TUElCLCAgVEVHUkFfTVVYX0dNSSwgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9ET1dOLCBURUdSQV9UUklfVFJJU1RBVEV9LAorCXtURUdSQV9QSU5HUk9VUF9TUElDLCAgVEVHUkFfTVVYX0dNSSwgICAgICAgICAgIFRFR1JBX1BVUERfUFVMTF9VUCwgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfU1BJRCwgIFRFR1JBX01VWF9TUEkxLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfU1BJRSwgIFRFR1JBX01VWF9TUEkxLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfU1BJRiwgIFRFR1JBX01VWF9TUEkxLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfRE9XTiwgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfU1BJRywgIFRFR1JBX01VWF9TUEkyX0FMVCwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfU1BJSCwgIFRFR1JBX01VWF9TUEkyX0FMVCwgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUFBLCAgIFRFR1JBX01VWF9VTFBJLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUFCLCAgIFRFR1JBX01VWF9VTFBJLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUFDLCAgIFRFR1JBX01VWF9SU1ZEMiwgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUFELCAgIFRFR1JBX01VWF9JUkRBLCAgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUNBLCAgIFRFR1JBX01VWF9VQVJUQywgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVUNCLCAgIFRFR1JBX01VWF9VQVJUQywgICAgICAgICBURUdSQV9QVVBEX1BVTExfVVAsICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfVURBLCAgIFRFR1JBX01VWF9VTFBJLCAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX1RSSVNUQVRFfSwKKwl7VEVHUkFfUElOR1JPVVBfQ0szMiwgIFRFR1JBX01VWF9OT05FLCAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX0REUkMsICBURUdSQV9NVVhfTk9ORSwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9QTUNBLCAgVEVHUkFfTVVYX05PTkUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfUE1DQiwgIFRFR1JBX01VWF9OT05FLCAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX1BNQ0MsICBURUdSQV9NVVhfTk9ORSwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9QTUNELCAgVEVHUkFfTVVYX05PTkUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKKwl7VEVHUkFfUElOR1JPVVBfUE1DRSwgIFRFR1JBX01VWF9OT05FLCAgICAgICAgICBURUdSQV9QVVBEX05PUk1BTCwgICAgVEVHUkFfVFJJX05PUk1BTH0sCisJe1RFR1JBX1BJTkdST1VQX1hNMkMsICBURUdSQV9NVVhfTk9ORSwgICAgICAgICAgVEVHUkFfUFVQRF9OT1JNQUwsICAgIFRFR1JBX1RSSV9OT1JNQUx9LAorCXtURUdSQV9QSU5HUk9VUF9YTTJELCAgVEVHUkFfTVVYX05PTkUsICAgICAgICAgIFRFR1JBX1BVUERfTk9STUFMLCAgICBURUdSQV9UUklfTk9STUFMfSwKK307CisKK3ZvaWQgaGFybW9ueV9waW5tdXhfaW5pdCh2b2lkKQoreworCXRlZ3JhX3Bpbm11eF9jb25maWdfdGFibGUoaGFybW9ueV9waW5tdXgsIEFSUkFZX1NJWkUoaGFybW9ueV9waW5tdXgpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlNzhkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaW9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgImJvYXJkLmgiCisjaW5jbHVkZSAiYm9hcmQtaGFybW9ueS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIE5WaWRpYSBib290bG9hZGVyIHRhZ3MgKi8KKyNkZWZpbmUgQVRBR19OVklESUEJCTB4NDEwMDA4MDEKKworI2RlZmluZSBBVEFHX05WSURJQV9STQkJCTB4MQorI2RlZmluZSBBVEFHX05WSURJQV9ESVNQTEFZCQkweDIKKyNkZWZpbmUgQVRBR19OVklESUFfRlJBTUVCVUZGRVIJCTB4MworI2RlZmluZSBBVEFHX05WSURJQV9DSElQU0hNT08JCTB4NAorI2RlZmluZSBBVEFHX05WSURJQV9DSElQU0hNT09QSFlTCTB4NQorI2RlZmluZSBBVEFHX05WSURJQV9QUkVTRVJWRURfTUVNXzAJMHgxMDAwMAorI2RlZmluZSBBVEFHX05WSURJQV9QUkVTRVJWRURfTUVNX04JMgorI2RlZmluZSBBVEFHX05WSURJQV9GT1JDRV8zMgkJMHg3ZmZmZmZmZgorCitzdHJ1Y3QgdGFnX3RlZ3JhIHsKKwlfX3UzMiBib290YXJnX2tleTsKKwlfX3UzMiBib290YXJnX2xlbjsKKwljaGFyIGJvb3RhcmdbMV07Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV90YWdfbnZpZGlhKGNvbnN0IHN0cnVjdCB0YWcgKnRhZykKK3sKKworCXJldHVybiAwOworfQorX190YWd0YWJsZShBVEFHX05WSURJQSwgcGFyc2VfdGFnX252aWRpYSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgZGVidWdfdWFydF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9IElPX0FERFJFU1MoVEVHUkFfVUFSVERfQkFTRSksCisJCS5tYXBiYXNlCT0gVEVHUkFfVUFSVERfQkFTRSwKKwkJLmlycQkJPSBJTlRfVUFSVEQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSAyMTYwMDAwMDAsCisJfSwgeworCQkuZmxhZ3MJCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRlYnVnX3VhcnQgPSB7CisJLm5hbWUgPSAic2VyaWFsODI1MCIsCisJLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gZGVidWdfdWFydF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaGFybW9ueV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmZGVidWdfdWFydCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZWdyYV9oYXJtb255X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsCisJc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsIHN0cnVjdCBtZW1pbmZvICptaSkKK3sKKwltaS0+bnJfYmFua3MgPSAyOworCW1pLT5iYW5rWzBdLnN0YXJ0ID0gUEhZU19PRkZTRVQ7CisJbWktPmJhbmtbMF0ubm9kZSA9IFBIWVNfVE9fTklEKFBIWVNfT0ZGU0VUKTsKKwltaS0+YmFua1swXS5zaXplID0gNDQ4ICogU1pfMU07CisJbWktPmJhbmtbMV0uc3RhcnQgPSBTWl81MTJNOworCW1pLT5iYW5rWzFdLm5vZGUgPSBQSFlTX1RPX05JRChTWl81MTJNKTsKKwltaS0+YmFua1sxXS5zaXplID0gU1pfNTEyTTsKK30KKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IHRlZ3JhX2Nsa19pbml0X3RhYmxlIGhhcm1vbnlfY2xrX2luaXRfdGFibGVbXSA9IHsKKwkvKiBuYW1lCQlwYXJlbnQJCXJhdGUJCWVuYWJsZWQgKi8KKwl7ICJ1YXJ0ZCIsCSJwbGxfcCIsCTIxNjAwMDAwMCwJdHJ1ZSB9LAorCXsgTlVMTCwJCU5VTEwsCQkwLAkJMH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdGVncmFfaGFybW9ueV9pbml0KHZvaWQpCit7CisJdGVncmFfY29tbW9uX2luaXQoKTsKKworCXRlZ3JhX2Nsa19pbml0X2Zyb21fdGFibGUoaGFybW9ueV9jbGtfaW5pdF90YWJsZSk7CisKKwloYXJtb255X3Bpbm11eF9pbml0KCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhoYXJtb255X2RldmljZXMsIEFSUkFZX1NJWkUoaGFybW9ueV9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSEFSTU9OWSwgImhhcm1vbnkiKQorCS5ib290X3BhcmFtcyAgPSAweDAwMDAwMTAwLAorCS5waHlzX2lvICAgICAgICA9IElPX0FQQl9QSFlTLAorCS5pb19wZ19vZmZzdCAgICA9ICgoSU9fQVBCX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuZml4dXAJCT0gdGVncmFfaGFybW9ueV9maXh1cCwKKwkuaW5pdF9pcnEgICAgICAgPSB0ZWdyYV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSB0ZWdyYV9oYXJtb255X2luaXQsCisJLm1hcF9pbyAgICAgICAgID0gdGVncmFfbWFwX2NvbW1vbl9pbywKKwkudGltZXIgICAgICAgICAgPSAmdGVncmFfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLWhhcm1vbnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWNhNzc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQtaGFybW9ueS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX01BQ0hfVEVHUkFfQk9BUkRfSEFSTU9OWV9ICisjZGVmaW5lIF9NQUNIX1RFR1JBX0JPQVJEX0hBUk1PTllfSAorCit2b2lkIGhhcm1vbnlfcGlubXV4X2luaXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDYzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2JvYXJkLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvYm9hcmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglDb2xpbiBDcm9zcyA8Y2Nyb3NzQGdvb2dsZS5jb20+CisgKglFcmlrIEdpbGxpbmcgPGtvbmtlcnNAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9URUdSQV9CT0FSRF9ICisjZGVmaW5lIF9fTUFDSF9URUdSQV9CT0FSRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCit2b2lkIF9faW5pdCB0ZWdyYV9jb21tb25faW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IHRlZ3JhX21hcF9jb21tb25faW8odm9pZCk7Cit2b2lkIF9faW5pdCB0ZWdyYV9pbml0X2lycSh2b2lkKTsKK3ZvaWQgX19pbml0IHRlZ3JhX2luaXRfY2xvY2sodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHRlZ3JhX3RpbWVyOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNhZDU3OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suYwpAQCAtMCwwICsxLDQ4OCBAQAorLyoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tfbG9jayk7CisKK3N0cnVjdCBjbGsgKnRlZ3JhX2dldF9jbG9ja19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKHN0cmNtcChjLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisJCQlyZXQgPSBjOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjbGtfcmVwYXJlbnQoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXByX2RlYnVnKCIlczogJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKwlpZiAoYy0+cmVmY250ICYmIGMtPnBhcmVudCkKKwkJY2xrX2Rpc2FibGVfbG9ja2VkKGMtPnBhcmVudCk7CisJYy0+cGFyZW50ID0gcGFyZW50OworCWlmIChjLT5yZWZjbnQgJiYgYy0+cGFyZW50KQorCQljbGtfZW5hYmxlX2xvY2tlZChjLT5wYXJlbnQpOworCWxpc3RfZGVsKCZjLT5zaWJsaW5nKTsKKwlsaXN0X2FkZF90YWlsKCZjLT5zaWJsaW5nLCAmcGFyZW50LT5jaGlsZHJlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmMpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKwlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBfX2Z1bmNfXywgYy0+bmFtZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmYy0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJcHJfZGVidWcoIiAgICVzXG4iLCBjbGtwLT5uYW1lKTsKKwkJaWYgKGNsa3AtPm9wcy0+cmVjYWxjdWxhdGVfcmF0ZSkKKwkJCWNsa3AtPm9wcy0+cmVjYWxjdWxhdGVfcmF0ZShjbGtwKTsKKwkJcHJvcGFnYXRlX3JhdGUoY2xrcCk7CisJfQorfQorCit2b2lkIGNsa19pbml0KHN0cnVjdCBjbGsgKmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisKKwlJTklUX0xJU1RfSEVBRCgmYy0+Y2hpbGRyZW4pOworCUlOSVRfTElTVF9IRUFEKCZjLT5zaWJsaW5nKTsKKworCWlmIChjLT5vcHMgJiYgYy0+b3BzLT5pbml0KQorCQljLT5vcHMtPmluaXQoYyk7CisKKwlsaXN0X2FkZCgmYy0+bm9kZSwgJmNsb2Nrcyk7CisKKwlpZiAoYy0+cGFyZW50KQorCQlsaXN0X2FkZF90YWlsKCZjLT5zaWJsaW5nLCAmYy0+cGFyZW50LT5jaGlsZHJlbik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7Cit9CisKK2ludCBjbGtfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgY2xrICpjKQoreworCWludCByZXQ7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCWlmIChjLT5yZWZjbnQgPT0gMCkgeworCQlpZiAoYy0+cGFyZW50KSB7CisJCQlyZXQgPSBjbGtfZW5hYmxlX2xvY2tlZChjLT5wYXJlbnQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWYgKGMtPm9wcyAmJiBjLT5vcHMtPmVuYWJsZSkgeworCQkJcmV0ID0gYy0+b3BzLT5lbmFibGUoYyk7CisJCQlpZiAocmV0KSB7CisJCQkJaWYgKGMtPnBhcmVudCkKKwkJCQkJY2xrX2Rpc2FibGVfbG9ja2VkKGMtPnBhcmVudCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWMtPnN0YXRlID0gT047CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJCQljLT5zZXQgPSAxOworI2VuZGlmCisJCX0KKwl9CisJYy0+cmVmY250Kys7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqYykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGtfZW5hYmxlX2xvY2tlZChjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7CisKK3ZvaWQgY2xrX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBjbGsgKmMpCit7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCWlmIChjLT5yZWZjbnQgPT0gMCkgeworCQlXQVJOKDEsICJBdHRlbXB0aW5nIHRvIGRpc2FibGUgY2xvY2sgJXMgd2l0aCByZWZjbnQgMCIsIGMtPm5hbWUpOworCQlyZXR1cm47CisJfQorCWlmIChjLT5yZWZjbnQgPT0gMSkgeworCQlpZiAoYy0+b3BzICYmIGMtPm9wcy0+ZGlzYWJsZSkKKwkJCWMtPm9wcy0+ZGlzYWJsZShjKTsKKworCQlpZiAoYy0+cGFyZW50KQorCQkJY2xrX2Rpc2FibGVfbG9ja2VkKGMtPnBhcmVudCk7CisKKwkJYy0+c3RhdGUgPSBPRkY7CisJfQorCWMtPnJlZmNudC0tOworfQorCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCWNsa19kaXNhYmxlX2xvY2tlZChjKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworaW50IGNsa19zZXRfcGFyZW50X2xvY2tlZChzdHJ1Y3QgY2xrICpjLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJaW50IHJldDsKKworCXByX2RlYnVnKCIlczogJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKworCWlmICghYy0+b3BzIHx8ICFjLT5vcHMtPnNldF9wYXJlbnQpCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0ID0gYy0+b3BzLT5zZXRfcGFyZW50KGMsIHBhcmVudCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcHJvcGFnYXRlX3JhdGUoYyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmMsIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGtfc2V0X3BhcmVudF9sb2NrZWQoYywgcGFyZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjKQoreworCXJldHVybiBjLT5wYXJlbnQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisKKwlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBfX2Z1bmNfXywgYy0+bmFtZSk7CisKKwlpZiAoYy0+b3BzICYmIGMtPm9wcy0+c2V0X3JhdGUpCisJCXJldCA9IGMtPm9wcy0+c2V0X3JhdGUoYywgcmF0ZSk7CisJZWxzZQorCQlyZXQgPSAtRU5PU1lTOworCisJcHJvcGFnYXRlX3JhdGUoYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tfbG9jaywgZmxhZ3MpOworCisJcHJfZGVidWcoIiVzOiAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCisJcmV0ID0gYy0+cmF0ZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitzdGF0aWMgaW50IHRlZ3JhX2Nsa19pbml0X29uZV9mcm9tX3RhYmxlKHN0cnVjdCB0ZWdyYV9jbGtfaW5pdF90YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrICpwOworCisJaW50IHJldCA9IDA7CisKKwljID0gdGVncmFfZ2V0X2Nsb2NrX2J5X25hbWUodGFibGUtPm5hbWUpOworCisJaWYgKCFjKSB7CisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBpbml0aWFsaXplIGNsb2NrICVzXG4iLAorCQkJdGFibGUtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAodGFibGUtPnBhcmVudCkgeworCQlwID0gdGVncmFfZ2V0X2Nsb2NrX2J5X25hbWUodGFibGUtPnBhcmVudCk7CisJCWlmICghcCkgeworCQkJcHJfd2FybmluZygiVW5hYmxlIHRvIGZpbmQgcGFyZW50ICVzIG9mIGNsb2NrICVzXG4iLAorCQkJCXRhYmxlLT5wYXJlbnQsIHRhYmxlLT5uYW1lKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJaWYgKGMtPnBhcmVudCAhPSBwKSB7CisJCQlyZXQgPSBjbGtfc2V0X3BhcmVudChjLCBwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gc2V0IHBhcmVudCAlcyBvZiBjbG9jayAlczogJWRcbiIsCisJCQkJCXRhYmxlLT5wYXJlbnQsIHRhYmxlLT5uYW1lLCByZXQpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCisJaWYgKHRhYmxlLT5yYXRlICYmIHRhYmxlLT5yYXRlICE9IGNsa19nZXRfcmF0ZShjKSkgeworCQlyZXQgPSBjbGtfc2V0X3JhdGUoYywgdGFibGUtPnJhdGUpOworCQlpZiAocmV0KSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gc2V0IGNsb2NrICVzIHRvIHJhdGUgJWx1OiAlZFxuIiwKKwkJCQl0YWJsZS0+bmFtZSwgdGFibGUtPnJhdGUsIHJldCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWlmICh0YWJsZS0+ZW5hYmxlZCkgeworCQlyZXQgPSBjbGtfZW5hYmxlKGMpOworCQlpZiAocmV0KSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZW5hYmxlIGNsb2NrICVzOiAlZFxuIiwKKwkJCQl0YWJsZS0+bmFtZSwgcmV0KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdGVncmFfY2xrX2luaXRfZnJvbV90YWJsZShzdHJ1Y3QgdGVncmFfY2xrX2luaXRfdGFibGUgKnRhYmxlKQoreworCWZvciAoOyB0YWJsZS0+bmFtZTsgdGFibGUrKykKKwkJdGVncmFfY2xrX2luaXRfb25lX2Zyb21fdGFibGUodGFibGUpOworfQorRVhQT1JUX1NZTUJPTCh0ZWdyYV9jbGtfaW5pdF9mcm9tX3RhYmxlKTsKKwordm9pZCB0ZWdyYV9wZXJpcGhfcmVzZXRfZGVhc3NlcnQoc3RydWN0IGNsayAqYykKK3sKKwl0ZWdyYTJfcGVyaXBoX3Jlc2V0X2RlYXNzZXJ0KGMpOworfQorRVhQT1JUX1NZTUJPTCh0ZWdyYV9wZXJpcGhfcmVzZXRfZGVhc3NlcnQpOworCit2b2lkIHRlZ3JhX3BlcmlwaF9yZXNldF9hc3NlcnQoc3RydWN0IGNsayAqYykKK3sKKwl0ZWdyYTJfcGVyaXBoX3Jlc2V0X2Fzc2VydChjKTsKK30KK0VYUE9SVF9TWU1CT0wodGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydCk7CisKK2ludCBfX2luaXQgdGVncmFfaW5pdF9jbG9jayh2b2lkKQoreworCXRlZ3JhMl9pbml0X2Nsb2NrcygpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjbGtfZGVidWdmc19yb290OworCisKK3N0YXRpYyB2b2lkIGNsb2NrX3RyZWVfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgY2xrICpjLCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IGNsayAqY2hpbGQ7CisJc3RydWN0IGNsayAqc2FmZTsKKwljb25zdCBjaGFyICpzdGF0ZSA9ICJ1bmluaXQiOworCWNoYXIgZGl2WzVdID0gezB9OworCisJaWYgKGMtPnN0YXRlID09IE9OKQorCQlzdGF0ZSA9ICJvbiI7CisJZWxzZSBpZiAoYy0+c3RhdGUgPT0gT0ZGKQorCQlzdGF0ZSA9ICJvZmYiOworCisJaWYgKGMtPm11bCAhPSAwICYmIGMtPmRpdiAhPSAwKSB7CisJCUJVR19PTihjLT5tdWwgPiAyKTsKKwkJaWYgKGMtPm11bCA+IGMtPmRpdikKKwkJCXNucHJpbnRmKGRpdiwgc2l6ZW9mKGRpdiksICJ4JWQiLCBjLT5tdWwgLyBjLT5kaXYpOworCQllbHNlCisJCQlzbnByaW50ZihkaXYsIHNpemVvZihkaXYpLCAiJWQlcyIsIGMtPmRpdiAvIGMtPm11bCwKKwkJCQkoYy0+ZGl2ICUgYy0+bXVsKSA/ICIuNSIgOiAiIik7CisJfQorCisJc2VxX3ByaW50ZihzLCAiJSpzJS0qcyAlLTZzICUtM2QgJS01cyAlLTEwbHVcbiIsCisJCWxldmVsICogMyArIDEsIGMtPnNldCA/ICIiIDogIioiLAorCQkzMCAtIGxldmVsICogMywgYy0+bmFtZSwKKwkJc3RhdGUsIGMtPnJlZmNudCwgZGl2LCBjLT5yYXRlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hpbGQsIHNhZmUsICZjLT5jaGlsZHJlbiwgc2libGluZykgeworCQljbG9ja190cmVlX3Nob3dfb25lKHMsIGNoaWxkLCBsZXZlbCArIDEpOworCX0KK30KKworc3RhdGljIGludCBjbG9ja190cmVlX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbGsgKmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzZXFfcHJpbnRmKHMsICIgY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlICByZWYgZGl2ICAgcmF0ZSAgICAgIFxuIik7CisJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2xvY2tzLCBub2RlKQorCQlpZiAoYy0+cGFyZW50ID09IE5VTEwpCisJCQljbG9ja190cmVlX3Nob3dfb25lKHMsIGMsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9ja190cmVlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNsb2NrX3RyZWVfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNsb2NrX3RyZWVfZm9wcyA9IHsKKwkub3BlbgkJPSBjbG9ja190cmVlX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcG9zc2libGVfcGFyZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2xrICpjID0gcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGMtPmlucHV0c1tpXS5pbnB1dDsgaSsrKSB7CisJCWNoYXIgKmZpcnN0ID0gKGkgPT0gMCkgPyAiIiA6ICIgIjsKKwkJc2VxX3ByaW50ZihzLCAiJXMlcyIsIGZpcnN0LCBjLT5pbnB1dHNbaV0uaW5wdXQtPm5hbWUpOworCX0KKwlzZXFfcHJpbnRmKHMsICJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvc3NpYmxlX3BhcmVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG9zc2libGVfcGFyZW50c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9zc2libGVfcGFyZW50c19mb3BzID0geworCS5vcGVuCQk9IHBvc3NpYmxlX3BhcmVudHNfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoc3RydWN0IGNsayAqYykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkLCAqY2hpbGQsICpjaGlsZF90bXA7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKGMtPm5hbWUsIGNsa19kZWJ1Z2ZzX3Jvb3QpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJYy0+ZGVudCA9IGQ7CisKKwlkID0gZGVidWdmc19jcmVhdGVfdTgoInJlZmNudCIsIFNfSVJVR08sIGMtPmRlbnQsICh1OCAqKSZjLT5yZWZjbnQpOworCWlmICghZCkKKwkJZ290byBlcnJfb3V0OworCisJZCA9IGRlYnVnZnNfY3JlYXRlX3UzMigicmF0ZSIsIFNfSVJVR08sIGMtPmRlbnQsICh1MzIgKikmYy0+cmF0ZSk7CisJaWYgKCFkKQorCQlnb3RvIGVycl9vdXQ7CisKKwlkID0gZGVidWdmc19jcmVhdGVfeDMyKCJmbGFncyIsIFNfSVJVR08sIGMtPmRlbnQsICh1MzIgKikmYy0+ZmxhZ3MpOworCWlmICghZCkKKwkJZ290byBlcnJfb3V0OworCisJaWYgKGMtPmlucHV0cykgeworCQlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgicG9zc2libGVfcGFyZW50cyIsIFNfSVJVR08sIGMtPmRlbnQsCisJCQljLCAmcG9zc2libGVfcGFyZW50c19mb3BzKTsKKwkJaWYgKCFkKQorCQkJZ290byBlcnJfb3V0OworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCWQgPSBjLT5kZW50OworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGlsZCwgY2hpbGRfdG1wLCAmZC0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkKKwkJZGVidWdmc19yZW1vdmUoY2hpbGQpOworCWRlYnVnZnNfcmVtb3ZlKGMtPmRlbnQpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBhcmVudDsKKworCWlmIChwYSAmJiAhcGEtPmRlbnQpIHsKKwkJZXJyID0gY2xrX2RlYnVnZnNfcmVnaXN0ZXIocGEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoIWMtPmRlbnQpIHsKKwkJZXJyID0gY2xrX2RlYnVnZnNfcmVnaXN0ZXJfb25lKGMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjOworCXN0cnVjdCBkZW50cnkgKmQ7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKCJjbG9jayIsIE5VTEwpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2xrX2RlYnVnZnNfcm9vdCA9IGQ7CisKKwlkID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY2xvY2tfdHJlZSIsIFNfSVJVR08sIGNsa19kZWJ1Z2ZzX3Jvb3QsIE5VTEwsCisJCSZjbG9ja190cmVlX2ZvcHMpOworCWlmICghZCkKKwkJZ290byBlcnJfb3V0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2xvY2tzLCBub2RlKSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKGMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXR1cm4gMDsKK2Vycl9vdXQ6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsa19kZWJ1Z2ZzX3Jvb3QpOworCXJldHVybiBlcnI7Cit9CisKK2xhdGVfaW5pdGNhbGwoY2xrX2RlYnVnZnNfaW5pdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjdjNzBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jbG9jay5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglDb2xpbiBDcm9zcyA8Y2Nyb3NzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVEVHUkFfQ0xPQ0tfSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfQ0xPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworI2RlZmluZSBESVZfQlVTCQkJKDEgPDwgMCkKKyNkZWZpbmUgRElWX1U3MQkJCSgxIDw8IDEpCisjZGVmaW5lIERJVl9VNzFfRklYRUQJCSgxIDw8IDIpCisjZGVmaW5lIERJVl8yCQkJKDEgPDwgMykKKyNkZWZpbmUgUExMX0ZJWEVECQkoMSA8PCA0KQorI2RlZmluZSBQTExfSEFTX0NQQ09OCQkoMSA8PCA1KQorI2RlZmluZSBNVVgJCQkoMSA8PCA2KQorI2RlZmluZSBQTExECQkJKDEgPDwgNykKKyNkZWZpbmUgUEVSSVBIX05PX1JFU0VUCQkoMSA8PCA4KQorI2RlZmluZSBQRVJJUEhfTk9fRU5CCQkoMSA8PCA5KQorI2RlZmluZSBQRVJJUEhfRU1DX0VOQgkJKDEgPDwgMTApCisjZGVmaW5lIFBFUklQSF9NQU5VQUxfUkVTRVQJKDEgPDwgMTEpCisjZGVmaW5lIFBMTF9BTFRfTUlTQ19SRUcJKDEgPDwgMTIpCisjZGVmaW5lIEVOQUJMRV9PTl9JTklUCQkoMSA8PCAyOCkKKworc3RydWN0IGNsazsKKworc3RydWN0IGNsa19tdXhfc2VsIHsKKwlzdHJ1Y3QgY2xrCSppbnB1dDsKKwl1MzIJCXZhbHVlOworfTsKKworc3RydWN0IGNsa19wbGxfdGFibGUgeworCXVuc2lnbmVkIGxvbmcJaW5wdXRfcmF0ZTsKKwl1bnNpZ25lZCBsb25nCW91dHB1dF9yYXRlOworCXUxNgkJbjsKKwl1MTYJCW07CisJdTgJCXA7CisJdTgJCWNwY29uOworfTsKKworc3RydWN0IGNsa19vcHMgeworCXZvaWQJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKKwlpbnQJCSgqZW5hYmxlKShzdHJ1Y3QgY2xrICopOworCXZvaWQJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKKwl2b2lkCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKKwlpbnQJCSgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqLCBzdHJ1Y3QgY2xrICopOworCWludAkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nCSgqZ2V0X3JhdGUpKHN0cnVjdCBjbGsgKik7CisJbG9uZwkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCXVuc2lnbmVkIGxvbmcJKCpyZWNhbGN1bGF0ZV9yYXRlKShzdHJ1Y3QgY2xrICopOworfTsKKworZW51bSBjbGtfc3RhdGUgeworCVVOSU5JVElBTElaRUQgPSAwLAorCU9OLAorCU9GRiwKK307CisKK3N0cnVjdCBjbGsgeworCS8qIG5vZGUgZm9yIG1hc3RlciBjbG9ja3MgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJCW5vZGU7CisJc3RydWN0IGxpc3RfaGVhZAkJY2hpbGRyZW47CS8qIGxpc3Qgb2YgY2hpbGRyZW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlzaWJsaW5nOwkvKiBub2RlIGZvciBjaGlsZHJlbiAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBkZW50cnkJCQkqZGVudDsKKwlzdHJ1Y3QgZGVudHJ5CQkJKnBhcmVudF9kZW50OworI2VuZGlmCisJc3RydWN0IGNsa19vcHMJCQkqb3BzOworCXN0cnVjdCBjbGsJCQkqcGFyZW50OworCXN0cnVjdCBjbGtfbG9va3VwCQlsb29rdXA7CisJdW5zaWduZWQgbG9uZwkJCXJhdGU7CisJdTMyCQkJCWZsYWdzOworCXUzMgkJCQlyZWZjbnQ7CisJY29uc3QgY2hhcgkJCSpuYW1lOworCXUzMgkJCQlyZWc7CisJdTMyCQkJCXJlZ19zaGlmdDsKKwl1bnNpZ25lZCBpbnQJCQljbGtfbnVtOworCWVudW0gY2xrX3N0YXRlCQkJc3RhdGU7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJYm9vbAkJCQlzZXQ7CisjZW5kaWYKKworCS8qIFBMTCAqLworCXVuc2lnbmVkIGxvbmcJCQlpbnB1dF9taW47CisJdW5zaWduZWQgbG9uZwkJCWlucHV0X21heDsKKwl1bnNpZ25lZCBsb25nCQkJY2ZfbWluOworCXVuc2lnbmVkIGxvbmcJCQljZl9tYXg7CisJdW5zaWduZWQgbG9uZwkJCXZjb19taW47CisJdW5zaWduZWQgbG9uZwkJCXZjb19tYXg7CisJdTMyCQkJCW07CisJdTMyCQkJCW47CisJdTMyCQkJCXA7CisJdTMyCQkJCWNwY29uOworCWNvbnN0IHN0cnVjdCBjbGtfcGxsX3RhYmxlCSpwbGxfdGFibGU7CisKKwkvKiBESVYgKi8KKwl1MzIJCQkJZGl2OworCXUzMgkJCQltdWw7CisKKwkvKiBNVVggKi8KKwljb25zdCBzdHJ1Y3QgY2xrX211eF9zZWwJKmlucHV0czsKKwl1MzIJCQkJc2VsOworCXUzMgkJCQlyZWdfbWFzazsKK307CisKKworc3RydWN0IGNsa19kdXBsaWNhdGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNsa19sb29rdXAgbG9va3VwOworfTsKKworc3RydWN0IHRlZ3JhX2Nsa19pbml0X3RhYmxlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnBhcmVudDsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJYm9vbCBlbmFibGVkOworfTsKKwordm9pZCB0ZWdyYTJfaW5pdF9jbG9ja3Modm9pZCk7Cit2b2lkIHRlZ3JhMl9wZXJpcGhfcmVzZXRfZGVhc3NlcnQoc3RydWN0IGNsayAqYyk7Cit2b2lkIHRlZ3JhMl9wZXJpcGhfcmVzZXRfYXNzZXJ0KHN0cnVjdCBjbGsgKmMpOwordm9pZCBjbGtfaW5pdChzdHJ1Y3QgY2xrICpjbGspOworc3RydWN0IGNsayAqdGVncmFfZ2V0X2Nsb2NrX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7Cit1bnNpZ25lZCBsb25nIGNsa19tZWFzdXJlX2lucHV0X2ZyZXEodm9pZCk7Cit2b2lkIGNsa19kaXNhYmxlX2xvY2tlZChzdHJ1Y3QgY2xrICpjKTsKK2ludCBjbGtfZW5hYmxlX2xvY2tlZChzdHJ1Y3QgY2xrICpjKTsKK2ludCBjbGtfc2V0X3BhcmVudF9sb2NrZWQoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcGFyZW50KTsKK2ludCBjbGtfcmVwYXJlbnQoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcGFyZW50KTsKK3ZvaWQgdGVncmFfY2xrX2luaXRfZnJvbV90YWJsZShzdHJ1Y3QgdGVncmFfY2xrX2luaXRfdGFibGUgKnRhYmxlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzlhNTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9jb21tb24uYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9ib2FyZC1oYXJtb255LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0BhbmRyb2lkLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgorCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorCisjaW5jbHVkZSAiYm9hcmQuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgdGVncmFfY2xrX2luaXRfdGFibGUgY29tbW9uX2Nsa19pbml0X3RhYmxlW10gPSB7CisJLyogbmFtZQkJcGFyZW50CQlyYXRlCQllbmFibGVkICovCisJeyAiY2xrX20iLAlOVUxMLAkJMCwJCXRydWUgfSwKKwl7ICJwbGxfcCIsCSJjbGtfbSIsCTIxNjAwMDAwMCwJdHJ1ZSB9LAorCXsgInBsbF9wX291dDEiLAkicGxsX3AiLAkyODgwMDAwMCwJdHJ1ZSB9LAorCXsgInBsbF9wX291dDIiLAkicGxsX3AiLAk0ODAwMDAwMCwJdHJ1ZSB9LAorCXsgInBsbF9wX291dDMiLAkicGxsX3AiLAk3MjAwMDAwMCwJdHJ1ZSB9LAorCXsgInBsbF9wX291dDQiLAkicGxsX3AiLAkxMDgwMDAwMDAsCXRydWUgfSwKKwl7ICJzeXMiLAkicGxsX3Bfb3V0NCIsCTEwODAwMDAwMCwJdHJ1ZSB9LAorCXsgImhjbGsiLAkic3lzIiwJCTEwODAwMDAwMCwJdHJ1ZSB9LAorCXsgInBjbGsiLAkiaGNsayIsCQk1NDAwMDAwMCwJdHJ1ZSB9LAorCXsgTlVMTCwJCU5VTEwsCQkwLAkJMH0sCit9OworCit2b2lkIF9faW5pdCB0ZWdyYV9pbml0X2NhY2hlKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKKwl2b2lkIF9faW9tZW0gKnAgPSBJT19BRERSRVNTKFRFR1JBX0FSTV9QRVJJRl9CQVNFKSArIDB4MzAwMDsKKworCXdyaXRlbCgweDMzMSwgcCArIEwyWDBfVEFHX0xBVEVOQ1lfQ1RSTCk7CisJd3JpdGVsKDB4NDQxLCBwICsgTDJYMF9EQVRBX0xBVEVOQ1lfQ1RSTCk7CisKKwlsMngwX2luaXQocCwgMHg2QzA4MDAwMSwgMHg4MjAwYzNmZSk7CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgdGVncmFfY29tbW9uX2luaXQodm9pZCkKK3sKKwl0ZWdyYV9pbml0X2Nsb2NrKCk7CisJdGVncmFfY2xrX2luaXRfZnJvbV90YWJsZShjb21tb25fY2xrX2luaXRfdGFibGUpOworCXRlZ3JhX2luaXRfY2FjaGUoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby1uYW1lcy5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLW5hbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4MjIwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby1uYW1lcy5oCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZ3Bpby1uYW1lcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSwgSW5jCisgKgorICogQXV0aG9yOgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9URUdSQV9HUElPX05BTUVTX0gKKyNkZWZpbmUgX19NQUNIX1RFR1JBX0dQSU9fTkFNRVNfSAorCisjZGVmaW5lIFRFR1JBX0dQSU9fUEEwCQkwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEExCQkxCisjZGVmaW5lIFRFR1JBX0dQSU9fUEEyCQkyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEEzCQkzCisjZGVmaW5lIFRFR1JBX0dQSU9fUEE0CQk0CisjZGVmaW5lIFRFR1JBX0dQSU9fUEE1CQk1CisjZGVmaW5lIFRFR1JBX0dQSU9fUEE2CQk2CisjZGVmaW5lIFRFR1JBX0dQSU9fUEE3CQk3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEIwCQk4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEIxCQk5CisjZGVmaW5lIFRFR1JBX0dQSU9fUEIyCQkxMAorI2RlZmluZSBURUdSQV9HUElPX1BCMwkJMTEKKyNkZWZpbmUgVEVHUkFfR1BJT19QQjQJCTEyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEI1CQkxMworI2RlZmluZSBURUdSQV9HUElPX1BCNgkJMTQKKyNkZWZpbmUgVEVHUkFfR1BJT19QQjcJCTE1CisjZGVmaW5lIFRFR1JBX0dQSU9fUEMwCQkxNgorI2RlZmluZSBURUdSQV9HUElPX1BDMQkJMTcKKyNkZWZpbmUgVEVHUkFfR1BJT19QQzIJCTE4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEMzCQkxOQorI2RlZmluZSBURUdSQV9HUElPX1BDNAkJMjAKKyNkZWZpbmUgVEVHUkFfR1BJT19QQzUJCTIxCisjZGVmaW5lIFRFR1JBX0dQSU9fUEM2CQkyMgorI2RlZmluZSBURUdSQV9HUElPX1BDNwkJMjMKKyNkZWZpbmUgVEVHUkFfR1BJT19QRDAJCTI0CisjZGVmaW5lIFRFR1JBX0dQSU9fUEQxCQkyNQorI2RlZmluZSBURUdSQV9HUElPX1BEMgkJMjYKKyNkZWZpbmUgVEVHUkFfR1BJT19QRDMJCTI3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEQ0CQkyOAorI2RlZmluZSBURUdSQV9HUElPX1BENQkJMjkKKyNkZWZpbmUgVEVHUkFfR1BJT19QRDYJCTMwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEQ3CQkzMQorI2RlZmluZSBURUdSQV9HUElPX1BFMAkJMzIKKyNkZWZpbmUgVEVHUkFfR1BJT19QRTEJCTMzCisjZGVmaW5lIFRFR1JBX0dQSU9fUEUyCQkzNAorI2RlZmluZSBURUdSQV9HUElPX1BFMwkJMzUKKyNkZWZpbmUgVEVHUkFfR1BJT19QRTQJCTM2CisjZGVmaW5lIFRFR1JBX0dQSU9fUEU1CQkzNworI2RlZmluZSBURUdSQV9HUElPX1BFNgkJMzgKKyNkZWZpbmUgVEVHUkFfR1BJT19QRTcJCTM5CisjZGVmaW5lIFRFR1JBX0dQSU9fUEYwCQk0MAorI2RlZmluZSBURUdSQV9HUElPX1BGMQkJNDEKKyNkZWZpbmUgVEVHUkFfR1BJT19QRjIJCTQyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEYzCQk0MworI2RlZmluZSBURUdSQV9HUElPX1BGNAkJNDQKKyNkZWZpbmUgVEVHUkFfR1BJT19QRjUJCTQ1CisjZGVmaW5lIFRFR1JBX0dQSU9fUEY2CQk0NgorI2RlZmluZSBURUdSQV9HUElPX1BGNwkJNDcKKyNkZWZpbmUgVEVHUkFfR1BJT19QRzAJCTQ4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEcxCQk0OQorI2RlZmluZSBURUdSQV9HUElPX1BHMgkJNTAKKyNkZWZpbmUgVEVHUkFfR1BJT19QRzMJCTUxCisjZGVmaW5lIFRFR1JBX0dQSU9fUEc0CQk1MgorI2RlZmluZSBURUdSQV9HUElPX1BHNQkJNTMKKyNkZWZpbmUgVEVHUkFfR1BJT19QRzYJCTU0CisjZGVmaW5lIFRFR1JBX0dQSU9fUEc3CQk1NQorI2RlZmluZSBURUdSQV9HUElPX1BIMAkJNTYKKyNkZWZpbmUgVEVHUkFfR1BJT19QSDEJCTU3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEgyCQk1OAorI2RlZmluZSBURUdSQV9HUElPX1BIMwkJNTkKKyNkZWZpbmUgVEVHUkFfR1BJT19QSDQJCTYwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEg1CQk2MQorI2RlZmluZSBURUdSQV9HUElPX1BINgkJNjIKKyNkZWZpbmUgVEVHUkFfR1BJT19QSDcJCTYzCisjZGVmaW5lIFRFR1JBX0dQSU9fUEkwCQk2NAorI2RlZmluZSBURUdSQV9HUElPX1BJMQkJNjUKKyNkZWZpbmUgVEVHUkFfR1BJT19QSTIJCTY2CisjZGVmaW5lIFRFR1JBX0dQSU9fUEkzCQk2NworI2RlZmluZSBURUdSQV9HUElPX1BJNAkJNjgKKyNkZWZpbmUgVEVHUkFfR1BJT19QSTUJCTY5CisjZGVmaW5lIFRFR1JBX0dQSU9fUEk2CQk3MAorI2RlZmluZSBURUdSQV9HUElPX1BJNwkJNzEKKyNkZWZpbmUgVEVHUkFfR1BJT19QSjAJCTcyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEoxCQk3MworI2RlZmluZSBURUdSQV9HUElPX1BKMgkJNzQKKyNkZWZpbmUgVEVHUkFfR1BJT19QSjMJCTc1CisjZGVmaW5lIFRFR1JBX0dQSU9fUEo0CQk3NgorI2RlZmluZSBURUdSQV9HUElPX1BKNQkJNzcKKyNkZWZpbmUgVEVHUkFfR1BJT19QSjYJCTc4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEo3CQk3OQorI2RlZmluZSBURUdSQV9HUElPX1BLMAkJODAKKyNkZWZpbmUgVEVHUkFfR1BJT19QSzEJCTgxCisjZGVmaW5lIFRFR1JBX0dQSU9fUEsyCQk4MgorI2RlZmluZSBURUdSQV9HUElPX1BLMwkJODMKKyNkZWZpbmUgVEVHUkFfR1BJT19QSzQJCTg0CisjZGVmaW5lIFRFR1JBX0dQSU9fUEs1CQk4NQorI2RlZmluZSBURUdSQV9HUElPX1BLNgkJODYKKyNkZWZpbmUgVEVHUkFfR1BJT19QSzcJCTg3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEwwCQk4OAorI2RlZmluZSBURUdSQV9HUElPX1BMMQkJODkKKyNkZWZpbmUgVEVHUkFfR1BJT19QTDIJCTkwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEwzCQk5MQorI2RlZmluZSBURUdSQV9HUElPX1BMNAkJOTIKKyNkZWZpbmUgVEVHUkFfR1BJT19QTDUJCTkzCisjZGVmaW5lIFRFR1JBX0dQSU9fUEw2CQk5NAorI2RlZmluZSBURUdSQV9HUElPX1BMNwkJOTUKKyNkZWZpbmUgVEVHUkFfR1BJT19QTTAJCTk2CisjZGVmaW5lIFRFR1JBX0dQSU9fUE0xCQk5NworI2RlZmluZSBURUdSQV9HUElPX1BNMgkJOTgKKyNkZWZpbmUgVEVHUkFfR1BJT19QTTMJCTk5CisjZGVmaW5lIFRFR1JBX0dQSU9fUE00CQkxMDAKKyNkZWZpbmUgVEVHUkFfR1BJT19QTTUJCTEwMQorI2RlZmluZSBURUdSQV9HUElPX1BNNgkJMTAyCisjZGVmaW5lIFRFR1JBX0dQSU9fUE03CQkxMDMKKyNkZWZpbmUgVEVHUkFfR1BJT19QTjAJCTEwNAorI2RlZmluZSBURUdSQV9HUElPX1BOMQkJMTA1CisjZGVmaW5lIFRFR1JBX0dQSU9fUE4yCQkxMDYKKyNkZWZpbmUgVEVHUkFfR1BJT19QTjMJCTEwNworI2RlZmluZSBURUdSQV9HUElPX1BONAkJMTA4CisjZGVmaW5lIFRFR1JBX0dQSU9fUE41CQkxMDkKKyNkZWZpbmUgVEVHUkFfR1BJT19QTjYJCTExMAorI2RlZmluZSBURUdSQV9HUElPX1BONwkJMTExCisjZGVmaW5lIFRFR1JBX0dQSU9fUE8wCQkxMTIKKyNkZWZpbmUgVEVHUkFfR1BJT19QTzEJCTExMworI2RlZmluZSBURUdSQV9HUElPX1BPMgkJMTE0CisjZGVmaW5lIFRFR1JBX0dQSU9fUE8zCQkxMTUKKyNkZWZpbmUgVEVHUkFfR1BJT19QTzQJCTExNgorI2RlZmluZSBURUdSQV9HUElPX1BPNQkJMTE3CisjZGVmaW5lIFRFR1JBX0dQSU9fUE82CQkxMTgKKyNkZWZpbmUgVEVHUkFfR1BJT19QTzcJCTExOQorI2RlZmluZSBURUdSQV9HUElPX1BQMAkJMTIwCisjZGVmaW5lIFRFR1JBX0dQSU9fUFAxCQkxMjEKKyNkZWZpbmUgVEVHUkFfR1BJT19QUDIJCTEyMgorI2RlZmluZSBURUdSQV9HUElPX1BQMwkJMTIzCisjZGVmaW5lIFRFR1JBX0dQSU9fUFA0CQkxMjQKKyNkZWZpbmUgVEVHUkFfR1BJT19QUDUJCTEyNQorI2RlZmluZSBURUdSQV9HUElPX1BQNgkJMTI2CisjZGVmaW5lIFRFR1JBX0dQSU9fUFA3CQkxMjcKKyNkZWZpbmUgVEVHUkFfR1BJT19QUTAJCTEyOAorI2RlZmluZSBURUdSQV9HUElPX1BRMQkJMTI5CisjZGVmaW5lIFRFR1JBX0dQSU9fUFEyCQkxMzAKKyNkZWZpbmUgVEVHUkFfR1BJT19QUTMJCTEzMQorI2RlZmluZSBURUdSQV9HUElPX1BRNAkJMTMyCisjZGVmaW5lIFRFR1JBX0dQSU9fUFE1CQkxMzMKKyNkZWZpbmUgVEVHUkFfR1BJT19QUTYJCTEzNAorI2RlZmluZSBURUdSQV9HUElPX1BRNwkJMTM1CisjZGVmaW5lIFRFR1JBX0dQSU9fUFIwCQkxMzYKKyNkZWZpbmUgVEVHUkFfR1BJT19QUjEJCTEzNworI2RlZmluZSBURUdSQV9HUElPX1BSMgkJMTM4CisjZGVmaW5lIFRFR1JBX0dQSU9fUFIzCQkxMzkKKyNkZWZpbmUgVEVHUkFfR1BJT19QUjQJCTE0MAorI2RlZmluZSBURUdSQV9HUElPX1BSNQkJMTQxCisjZGVmaW5lIFRFR1JBX0dQSU9fUFI2CQkxNDIKKyNkZWZpbmUgVEVHUkFfR1BJT19QUjcJCTE0MworI2RlZmluZSBURUdSQV9HUElPX1BTMAkJMTQ0CisjZGVmaW5lIFRFR1JBX0dQSU9fUFMxCQkxNDUKKyNkZWZpbmUgVEVHUkFfR1BJT19QUzIJCTE0NgorI2RlZmluZSBURUdSQV9HUElPX1BTMwkJMTQ3CisjZGVmaW5lIFRFR1JBX0dQSU9fUFM0CQkxNDgKKyNkZWZpbmUgVEVHUkFfR1BJT19QUzUJCTE0OQorI2RlZmluZSBURUdSQV9HUElPX1BTNgkJMTUwCisjZGVmaW5lIFRFR1JBX0dQSU9fUFM3CQkxNTEKKyNkZWZpbmUgVEVHUkFfR1BJT19QVDAJCTE1MgorI2RlZmluZSBURUdSQV9HUElPX1BUMQkJMTUzCisjZGVmaW5lIFRFR1JBX0dQSU9fUFQyCQkxNTQKKyNkZWZpbmUgVEVHUkFfR1BJT19QVDMJCTE1NQorI2RlZmluZSBURUdSQV9HUElPX1BUNAkJMTU2CisjZGVmaW5lIFRFR1JBX0dQSU9fUFQ1CQkxNTcKKyNkZWZpbmUgVEVHUkFfR1BJT19QVDYJCTE1OAorI2RlZmluZSBURUdSQV9HUElPX1BUNwkJMTU5CisjZGVmaW5lIFRFR1JBX0dQSU9fUFUwCQkxNjAKKyNkZWZpbmUgVEVHUkFfR1BJT19QVTEJCTE2MQorI2RlZmluZSBURUdSQV9HUElPX1BVMgkJMTYyCisjZGVmaW5lIFRFR1JBX0dQSU9fUFUzCQkxNjMKKyNkZWZpbmUgVEVHUkFfR1BJT19QVTQJCTE2NAorI2RlZmluZSBURUdSQV9HUElPX1BVNQkJMTY1CisjZGVmaW5lIFRFR1JBX0dQSU9fUFU2CQkxNjYKKyNkZWZpbmUgVEVHUkFfR1BJT19QVTcJCTE2NworI2RlZmluZSBURUdSQV9HUElPX1BWMAkJMTY4CisjZGVmaW5lIFRFR1JBX0dQSU9fUFYxCQkxNjkKKyNkZWZpbmUgVEVHUkFfR1BJT19QVjIJCTE3MAorI2RlZmluZSBURUdSQV9HUElPX1BWMwkJMTcxCisjZGVmaW5lIFRFR1JBX0dQSU9fUFY0CQkxNzIKKyNkZWZpbmUgVEVHUkFfR1BJT19QVjUJCTE3MworI2RlZmluZSBURUdSQV9HUElPX1BWNgkJMTc0CisjZGVmaW5lIFRFR1JBX0dQSU9fUFY3CQkxNzUKKyNkZWZpbmUgVEVHUkFfR1BJT19QVzAJCTE3NgorI2RlZmluZSBURUdSQV9HUElPX1BXMQkJMTc3CisjZGVmaW5lIFRFR1JBX0dQSU9fUFcyCQkxNzgKKyNkZWZpbmUgVEVHUkFfR1BJT19QVzMJCTE3OQorI2RlZmluZSBURUdSQV9HUElPX1BXNAkJMTgwCisjZGVmaW5lIFRFR1JBX0dQSU9fUFc1CQkxODEKKyNkZWZpbmUgVEVHUkFfR1BJT19QVzYJCTE4MgorI2RlZmluZSBURUdSQV9HUElPX1BXNwkJMTgzCisjZGVmaW5lIFRFR1JBX0dQSU9fUFgwCQkxODQKKyNkZWZpbmUgVEVHUkFfR1BJT19QWDEJCTE4NQorI2RlZmluZSBURUdSQV9HUElPX1BYMgkJMTg2CisjZGVmaW5lIFRFR1JBX0dQSU9fUFgzCQkxODcKKyNkZWZpbmUgVEVHUkFfR1BJT19QWDQJCTE4OAorI2RlZmluZSBURUdSQV9HUElPX1BYNQkJMTg5CisjZGVmaW5lIFRFR1JBX0dQSU9fUFg2CQkxOTAKKyNkZWZpbmUgVEVHUkFfR1BJT19QWDcJCTE5MQorI2RlZmluZSBURUdSQV9HUElPX1BZMAkJMTkyCisjZGVmaW5lIFRFR1JBX0dQSU9fUFkxCQkxOTMKKyNkZWZpbmUgVEVHUkFfR1BJT19QWTIJCTE5NAorI2RlZmluZSBURUdSQV9HUElPX1BZMwkJMTk1CisjZGVmaW5lIFRFR1JBX0dQSU9fUFk0CQkxOTYKKyNkZWZpbmUgVEVHUkFfR1BJT19QWTUJCTE5NworI2RlZmluZSBURUdSQV9HUElPX1BZNgkJMTk4CisjZGVmaW5lIFRFR1JBX0dQSU9fUFk3CQkxOTkKKyNkZWZpbmUgVEVHUkFfR1BJT19QWjAJCTIwMAorI2RlZmluZSBURUdSQV9HUElPX1BaMQkJMjAxCisjZGVmaW5lIFRFR1JBX0dQSU9fUFoyCQkyMDIKKyNkZWZpbmUgVEVHUkFfR1BJT19QWjMJCTIwMworI2RlZmluZSBURUdSQV9HUElPX1BaNAkJMjA0CisjZGVmaW5lIFRFR1JBX0dQSU9fUFo1CQkyMDUKKyNkZWZpbmUgVEVHUkFfR1BJT19QWjYJCTIwNgorI2RlZmluZSBURUdSQV9HUElPX1BaNwkJMjA3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBMAkJMjA4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBMQkJMjA5CisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBMgkJMjEwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBMwkJMjExCisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBNAkJMjEyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBNQkJMjEzCisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBNgkJMjE0CisjZGVmaW5lIFRFR1JBX0dQSU9fUEFBNwkJMjE1CisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCMAkJMjE2CisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCMQkJMjE3CisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCMgkJMjE4CisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCMwkJMjE5CisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCNAkJMjIwCisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCNQkJMjIxCisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCNgkJMjIyCisjZGVmaW5lIFRFR1JBX0dQSU9fUEJCNwkJMjIzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTc4ZmJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2dwaW8uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUsIEluYworICoKKyAqIEF1dGhvcjoKKyAqCUVyaWsgR2lsbGluZyA8a29ua2Vyc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaW9tYXAuaD4KKworI2RlZmluZSBHUElPX0JBTksoeCkJCSgoeCkgPj4gNSkKKyNkZWZpbmUgR1BJT19QT1JUKHgpCQkoKCh4KSA+PiAzKSAmIDB4MykKKyNkZWZpbmUgR1BJT19CSVQoeCkJCSgoeCkgJiAweDcpCisKKyNkZWZpbmUgR1BJT19SRUcoeCkJCShJT19UT19WSVJUKFRFR1JBX0dQSU9fQkFTRSkgKwlcCisJCQkJIEdQSU9fQkFOSyh4KSAqIDB4ODAgKwkJXAorCQkJCSBHUElPX1BPUlQoeCkgKiA0KQorCisjZGVmaW5lIEdQSU9fQ05GKHgpCQkoR1BJT19SRUcoeCkgKyAweDAwKQorI2RlZmluZSBHUElPX09FKHgpCQkoR1BJT19SRUcoeCkgKyAweDEwKQorI2RlZmluZSBHUElPX09VVCh4KQkJKEdQSU9fUkVHKHgpICsgMFgyMCkKKyNkZWZpbmUgR1BJT19JTih4KQkJKEdQSU9fUkVHKHgpICsgMHgzMCkKKyNkZWZpbmUgR1BJT19JTlRfU1RBKHgpCQkoR1BJT19SRUcoeCkgKyAweDQwKQorI2RlZmluZSBHUElPX0lOVF9FTkIoeCkJCShHUElPX1JFRyh4KSArIDB4NTApCisjZGVmaW5lIEdQSU9fSU5UX0xWTCh4KQkJKEdQSU9fUkVHKHgpICsgMHg2MCkKKyNkZWZpbmUgR1BJT19JTlRfQ0xSKHgpCQkoR1BJT19SRUcoeCkgKyAweDcwKQorCisjZGVmaW5lIEdQSU9fTVNLX0NORih4KQkJKEdQSU9fUkVHKHgpICsgMHg4MDApCisjZGVmaW5lIEdQSU9fTVNLX09FKHgpCQkoR1BJT19SRUcoeCkgKyAweDgxMCkKKyNkZWZpbmUgR1BJT19NU0tfT1VUKHgpCQkoR1BJT19SRUcoeCkgKyAwWDgyMCkKKyNkZWZpbmUgR1BJT19NU0tfSU5UX1NUQSh4KQkoR1BJT19SRUcoeCkgKyAweDg0MCkKKyNkZWZpbmUgR1BJT19NU0tfSU5UX0VOQih4KQkoR1BJT19SRUcoeCkgKyAweDg1MCkKKyNkZWZpbmUgR1BJT19NU0tfSU5UX0xWTCh4KQkoR1BJT19SRUcoeCkgKyAweDg2MCkKKworI2RlZmluZSBHUElPX0lOVF9MVkxfTUFTSwkJMHgwMTAxMDEKKyNkZWZpbmUgR1BJT19JTlRfTFZMX0VER0VfUklTSU5HCTB4MDAwMTAxCisjZGVmaW5lIEdQSU9fSU5UX0xWTF9FREdFX0ZBTExJTkcJMHgwMDAxMDAKKyNkZWZpbmUgR1BJT19JTlRfTFZMX0VER0VfQk9USAkJMHgwMTAxMDAKKyNkZWZpbmUgR1BJT19JTlRfTFZMX0xFVkVMX0hJR0gJCTB4MDAwMDAxCisjZGVmaW5lIEdQSU9fSU5UX0xWTF9MRVZFTF9MT1cJCTB4MDAwMDAwCisKK3N0cnVjdCB0ZWdyYV9ncGlvX2JhbmsgeworCWludCBiYW5rOworCWludCBpcnE7CisJc3BpbmxvY2tfdCBsdmxfbG9ja1s0XTsKK307CisKKworc3RhdGljIHN0cnVjdCB0ZWdyYV9ncGlvX2JhbmsgdGVncmFfZ3Bpb19iYW5rc1tdID0geworCXsuYmFuayA9IDAsIC5pcnEgPSBJTlRfR1BJTzF9LAorCXsuYmFuayA9IDEsIC5pcnEgPSBJTlRfR1BJTzJ9LAorCXsuYmFuayA9IDIsIC5pcnEgPSBJTlRfR1BJTzN9LAorCXsuYmFuayA9IDMsIC5pcnEgPSBJTlRfR1BJTzR9LAorCXsuYmFuayA9IDQsIC5pcnEgPSBJTlRfR1BJTzV9LAorCXsuYmFuayA9IDUsIC5pcnEgPSBJTlRfR1BJTzZ9LAorCXsuYmFuayA9IDYsIC5pcnEgPSBJTlRfR1BJTzd9LAorfTsKKworc3RhdGljIGludCB0ZWdyYV9ncGlvX2NvbXBvc2UoaW50IGJhbmssIGludCBwb3J0LCBpbnQgYml0KQoreworCXJldHVybiAoYmFuayA8PCA1KSB8ICgocG9ydCAmIDB4MykgPDwgMykgfCAoYml0ICYgMHg3KTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZ3Bpb19tYXNrX3dyaXRlKHUzMiByZWcsIGludCBncGlvLCBpbnQgdmFsdWUpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IDB4MTAwIDw8IEdQSU9fQklUKGdwaW8pOworCWlmICh2YWx1ZSkKKwkJdmFsIHw9IDEgPDwgR1BJT19CSVQoZ3Bpbyk7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKK30KKwordm9pZCB0ZWdyYV9ncGlvX2VuYWJsZShpbnQgZ3BpbykKK3sKKwl0ZWdyYV9ncGlvX21hc2tfd3JpdGUoR1BJT19NU0tfQ05GKGdwaW8pLCBncGlvLCAxKTsKK30KKwordm9pZCB0ZWdyYV9ncGlvX2Rpc2FibGUoaW50IGdwaW8pCit7CisJdGVncmFfZ3Bpb19tYXNrX3dyaXRlKEdQSU9fTVNLX0NORihncGlvKSwgZ3BpbywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXRlZ3JhX2dwaW9fbWFza193cml0ZShHUElPX01TS19PVVQob2Zmc2V0KSwgb2Zmc2V0LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiAoX19yYXdfcmVhZGwoR1BJT19JTihvZmZzZXQpKSA+PiBHUElPX0JJVChvZmZzZXQpKSAmIDB4MTsKK30KKworc3RhdGljIGludCB0ZWdyYV9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdGVncmFfZ3Bpb19tYXNrX3dyaXRlKEdQSU9fTVNLX09FKG9mZnNldCksIG9mZnNldCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkJaW50IHZhbHVlKQoreworCXRlZ3JhX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCXRlZ3JhX2dwaW9fbWFza193cml0ZShHUElPX01TS19PRShvZmZzZXQpLCBvZmZzZXQsIDEpOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVncmFfZ3Bpb19jaGlwID0geworCS5sYWJlbAkJCT0gInRlZ3JhLWdwaW8iLAorCS5kaXJlY3Rpb25faW5wdXQJPSB0ZWdyYV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkuZ2V0CQkJPSB0ZWdyYV9ncGlvX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHRlZ3JhX2dwaW9fZGlyZWN0aW9uX291dHB1dCwKKwkuc2V0CQkJPSB0ZWdyYV9ncGlvX3NldCwKKwkuYmFzZQkJCT0gMCwKKwkubmdwaW8JCQk9IEFSQ0hfTlJfR1BJT1MsCit9OworCitzdGF0aWMgdm9pZCB0ZWdyYV9ncGlvX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgZ3BpbyA9IGlycSAtIElOVF9HUElPX0JBU0U7CisKKwlfX3Jhd193cml0ZWwoMSA8PCBHUElPX0JJVChncGlvKSwgR1BJT19JTlRfQ0xSKGdwaW8pKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZ3Bpb19pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxIC0gSU5UX0dQSU9fQkFTRTsKKworCXRlZ3JhX2dwaW9fbWFza193cml0ZShHUElPX01TS19JTlRfRU5CKGdwaW8pLCBncGlvLCAwKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW8gPSBpcnEgLSBJTlRfR1BJT19CQVNFOworCisJdGVncmFfZ3Bpb19tYXNrX3dyaXRlKEdQSU9fTVNLX0lOVF9FTkIoZ3BpbyksIGdwaW8sIDEpOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2dwaW9faXJxX3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBncGlvID0gaXJxIC0gSU5UX0dQSU9fQkFTRTsKKwlzdHJ1Y3QgdGVncmFfZ3Bpb19iYW5rICpiYW5rID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlpbnQgcG9ydCA9IEdQSU9fUE9SVChncGlvKTsKKwlpbnQgbHZsX3R5cGU7CisJaW50IHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoICh0eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgeworCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6CisJCWx2bF90eXBlID0gR1BJT19JTlRfTFZMX0VER0VfUklTSU5HOworCQlicmVhazsKKworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlsdmxfdHlwZSA9IEdQSU9fSU5UX0xWTF9FREdFX0ZBTExJTkc7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCWx2bF90eXBlID0gR1BJT19JTlRfTFZMX0VER0VfQk9USDsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CisJCWx2bF90eXBlID0gR1BJT19JTlRfTFZMX0xFVkVMX0hJR0g7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCWx2bF90eXBlID0gR1BJT19JTlRfTFZMX0xFVkVMX0xPVzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bHZsX2xvY2tbcG9ydF0sIGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKEdQSU9fSU5UX0xWTChncGlvKSk7CisJdmFsICY9IH4oR1BJT19JTlRfTFZMX01BU0sgPDwgR1BJT19CSVQoZ3BpbykpOworCXZhbCB8PSBsdmxfdHlwZSA8PCBHUElPX0JJVChncGlvKTsKKwlfX3Jhd193cml0ZWwodmFsLCBHUElPX0lOVF9MVkwoZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bHZsX2xvY2tbcG9ydF0sIGZsYWdzKTsKKworCWlmICh0eXBlICYgKElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9UWVBFX0xFVkVMX0hJR0gpKQorCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCWVsc2UgaWYgKHR5cGUgJiAoSVJRX1RZUEVfRURHRV9GQUxMSU5HIHwgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQorCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZ3Bpb19pcnFfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHRlZ3JhX2dwaW9fYmFuayAqYmFuazsKKwlpbnQgcG9ydDsKKwlpbnQgcGluOworCWludCB1bm1hc2tlZCA9IDA7CisKKwlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKworCWJhbmsgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCA0OyBwb3J0KyspIHsKKwkJaW50IGdwaW8gPSB0ZWdyYV9ncGlvX2NvbXBvc2UoYmFuay0+YmFuaywgcG9ydCwgMCk7CisJCXVuc2lnbmVkIGxvbmcgc3RhID0gX19yYXdfcmVhZGwoR1BJT19JTlRfU1RBKGdwaW8pKSAmCisJCQlfX3Jhd19yZWFkbChHUElPX0lOVF9FTkIoZ3BpbykpOworCQl1MzIgbHZsID0gX19yYXdfcmVhZGwoR1BJT19JTlRfTFZMKGdwaW8pKTsKKworCQlmb3JfZWFjaF9zZXRfYml0KHBpbiwgJnN0YSwgOCkgeworCQkJX19yYXdfd3JpdGVsKDEgPDwgcGluLCBHUElPX0lOVF9DTFIoZ3BpbykpOworCisJCQkvKiBpZiBncGlvIGlzIGVkZ2UgdHJpZ2dlcmVkLCBjbGVhciBjb25kaXRpb24KKwkJCSAqIGJlZm9yZSBleGVjdXRpbmcgdGhlIGhhbmRlciBzbyB0aGF0IHdlIGRvbid0CisJCQkgKiBtaXNzIGVkZ2VzCisJCQkgKi8KKwkJCWlmIChsdmwgJiAoMHgxMDAgPDwgcGluKSkgeworCQkJCXVubWFza2VkID0gMTsKKwkJCQlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKKwkJCX0KKworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9fdG9faXJxKGdwaW8gKyBwaW4pKTsKKwkJfQorCX0KKworCWlmICghdW5tYXNrZWQpCisJCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOworCit9CisKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0ZWdyYV9ncGlvX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IHRlZ3JhX2dwaW9faXJxX2FjaywKKwkubWFzawkJPSB0ZWdyYV9ncGlvX2lycV9tYXNrLAorCS51bm1hc2sJCT0gdGVncmFfZ3Bpb19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IHRlZ3JhX2dwaW9faXJxX3NldF90eXBlLAorfTsKKworCisvKiBUaGlzIGxvY2sgY2xhc3MgdGVsbHMgbG9ja2RlcCB0aGF0IEdQSU8gaXJxcyBhcmUgaW4gYSBkaWZmZXJlbnQKKyAqIGNhdGVnb3J5IHRoYW4gdGhlaXIgcGFyZW50cywgc28gaXQgd29uJ3QgcmVwb3J0IGZhbHNlIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBncGlvX2xvY2tfY2xhc3M7CisKK3N0YXRpYyBpbnQgX19pbml0IHRlZ3JhX2dwaW9faW5pdCh2b2lkKQoreworCXN0cnVjdCB0ZWdyYV9ncGlvX2JhbmsgKmJhbms7CisJaW50IGk7CisJaW50IGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWludCBncGlvID0gdGVncmFfZ3Bpb19jb21wb3NlKGksIGosIDApOworCQkJX19yYXdfd3JpdGVsKDB4MDAsIEdQSU9fSU5UX0VOQihncGlvKSk7CisJCX0KKwl9CisKKwlncGlvY2hpcF9hZGQoJnRlZ3JhX2dwaW9fY2hpcCk7CisKKwlmb3IgKGkgPSBJTlRfR1BJT19CQVNFOyBpIDwgKElOVF9HUElPX0JBU0UgKyBBUkNIX05SX0dQSU9TKTsgaSsrKSB7CisJCWJhbmsgPSAmdGVncmFfZ3Bpb19iYW5rc1tHUElPX0JBTksoaXJxX3RvX2dwaW8oaSkpXTsKKworCQlsb2NrZGVwX3NldF9jbGFzcygmaXJxX2Rlc2NbaV0ubG9jaywgJmdwaW9fbG9ja19jbGFzcyk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGksIGJhbmspOworCQlzZXRfaXJxX2NoaXAoaSwgJnRlZ3JhX2dwaW9faXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX3NpbXBsZV9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhX2dwaW9fYmFua3MpOyBpKyspIHsKKwkJYmFuayA9ICZ0ZWdyYV9ncGlvX2JhbmtzW2ldOworCisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGJhbmstPmlycSwgdGVncmFfZ3Bpb19pcnFfaGFuZGxlcik7CisJCXNldF9pcnFfZGF0YShiYW5rLT5pcnEsIGJhbmspOworCisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCisJCQlzcGluX2xvY2tfaW5pdCgmYmFuay0+bHZsX2xvY2tbal0pOworCX0KKworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbCh0ZWdyYV9ncGlvX2luaXQpOworCisjaWZkZWYJQ09ORklHX0RFQlVHX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIGludCBkYmdfZ3Bpb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCWludCBpOworCWludCBqOworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQlpbnQgZ3BpbyA9IHRlZ3JhX2dwaW9fY29tcG9zZShpLCBqLCAwKTsKKwkJCXNlcV9wcmludGYocywgIiVkOiVkICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwNnhcbiIsCisJCQkgICAgICAgaSwgaiwKKwkJCSAgICAgICBfX3Jhd19yZWFkbChHUElPX0NORihncGlvKSksCisJCQkgICAgICAgX19yYXdfcmVhZGwoR1BJT19PRShncGlvKSksCisJCQkgICAgICAgX19yYXdfcmVhZGwoR1BJT19PVVQoZ3BpbykpLAorCQkJICAgICAgIF9fcmF3X3JlYWRsKEdQSU9fSU4oZ3BpbykpLAorCQkJICAgICAgIF9fcmF3X3JlYWRsKEdQSU9fSU5UX1NUQShncGlvKSksCisJCQkgICAgICAgX19yYXdfcmVhZGwoR1BJT19JTlRfRU5CKGdwaW8pKSwKKwkJCSAgICAgICBfX3Jhd19yZWFkbChHUElPX0lOVF9MVkwoZ3BpbykpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYmdfZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYmdfZ3Bpb19zaG93LCAmaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CisJLm9wZW4JCT0gZGJnX2dwaW9fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGVncmFfZ3Bpb19kZWJ1Z2luaXQodm9pZCkKK3sKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGVncmFfZ3BpbyIsIFNfSVJVR08sCisJCQkJCU5VTEwsIE5VTEwsICZkZWJ1Z19mb3BzKTsKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwodGVncmFfZ3Bpb19kZWJ1Z2luaXQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2hlYWRzbXAuUyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaGVhZHNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MzQ5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2hlYWRzbXAuUwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworICAgICAgICAuc2VjdGlvbiAiLnRleHQuaGVhZCIsICJheCIKKwlfX0NQVUlOSVQKKworLyoKKyAqIFRlZ3JhIHNwZWNpZmljIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcy4KKyAqICAgVGhlIHNlY29uZGFyeSBrZXJuZWwgaW5pdCBjYWxscyB2N19mbHVzaF9kY2FjaGVfYWxsIGJlZm9yZSBpdCBlbmFibGVzCisgKiAgIHRoZSBMMTsgaG93ZXZlciwgdGhlIEwxIGNvbWVzIG91dCBvZiByZXNldCBpbiBhbiB1bmRlZmluZWQgc3RhdGUsIHNvCisgKiAgIHRoZSBjbGVhbiArIGludmFsaWRhdGUgcGVyZm9ybWVkIGJ5IHY3X2ZsdXNoX2RjYWNoZV9hbGwgY2F1c2VzIGEgYnVuY2gKKyAqICAgb2YgY2FjaGUgbGluZXMgd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgYW5kIHVuaW5pdGlhbGl6ZWQgdGFncyB0byBnZXQKKyAqICAgd3JpdHRlbiBvdXQgdG8gbWVtb3J5LCB3aGljaCBkb2VzIHJlYWxseSB1bnBsZWFzYW50IHRoaW5ncyB0byB0aGUgbWFpbgorICogICBwcm9jZXNzb3IuICBXZSBmaXggdGhpcyBieSBwZXJmb3JtaW5nIGFuIGludmFsaWRhdGUsIHJhdGhlciB0aGFuIGEKKyAqICAgY2xlYW4gKyBpbnZhbGlkYXRlLCBiZWZvcmUganVtcGluZyBpbnRvIHRoZSBrZXJuZWwuCisgKi8KK0VOVFJZKHY3X2ludmFsaWRhdGVfbDEpCisgICAgICAgIG1vdiAgICAgcjAsICMwCisgICAgICAgIG1jciAgICAgcDE1LCAyLCByMCwgYzAsIGMwLCAwCisgICAgICAgIG1yYyAgICAgcDE1LCAxLCByMCwgYzAsIGMwLCAwCisKKyAgICAgICAgbGRyICAgICByMSwgPTB4N2ZmZgorICAgICAgICBhbmQgICAgIHIyLCByMSwgcjAsIGxzciAjMTMKKworICAgICAgICBsZHIgICAgIHIxLCA9MHgzZmYKKworICAgICAgICBhbmQgICAgIHIzLCByMSwgcjAsIGxzciAjMyAgQCBOdW1XYXlzIC0gMQorICAgICAgICBhZGQgICAgIHIyLCByMiwgIzEgICAgICAgICAgQCBOdW1TZXRzCisKKyAgICAgICAgYW5kICAgICByMCwgcjAsICMweDcKKyAgICAgICAgYWRkICAgICByMCwgcjAsICM0ICAgICAgICAgIEAgU2V0U2hpZnQKKworICAgICAgICBjbHogICAgIHIxLCByMyAgICAgICAgICAgICAgQCBXYXlTaGlmdAorICAgICAgICBhZGQgICAgIHI0LCByMywgIzEgICAgICAgICAgQCBOdW1XYXlzCisxOiAgICAgIHN1YiAgICAgcjIsIHIyLCAjMSAgICAgICAgICBAIE51bVNldHMtLQorICAgICAgICBtb3YgICAgIHIzLCByNCAgICAgICAgICAgICAgQCBUZW1wID0gTnVtV2F5cworMjogICAgICBzdWJzICAgIHIzLCByMywgIzEgICAgICAgICAgQCBUZW1wLS0KKyAgICAgICAgbW92ICAgICByNSwgcjMsIGxzbCByMQorICAgICAgICBtb3YgICAgIHI2LCByMiwgbHNsIHIwCisgICAgICAgIG9yciAgICAgcjUsIHI1LCByNiAgICAgICAgICBAIFJlZyA9IChUZW1wPDxXYXlTaGlmdCl8KE51bVNldHM8PFNldFNoaWZ0KQorICAgICAgICBtY3IgICAgIHAxNSwgMCwgcjUsIGM3LCBjNiwgMgorICAgICAgICBiZ3QgICAgIDJiCisgICAgICAgIGNtcCAgICAgcjIsICMwCisgICAgICAgIGJndCAgICAgMWIKKyAgICAgICAgZHNiCisgICAgICAgIGlzYgorICAgICAgICBtb3YgICAgIHBjLCBscgorRU5EUFJPQyh2N19pbnZhbGlkYXRlX2wxKQorCitFTlRSWSh0ZWdyYV9zZWNvbmRhcnlfc3RhcnR1cCkKKwltc3IJY3Bzcl9mc3hjLCAjMHhkMworICAgICAgICBibCAgICAgIHY3X2ludmFsaWRhdGVfbDEKKwltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CisgICAgICAgIGFuZAlyMCwgcjAsICMxNQorICAgICAgICBsZHIgICAgIHIxLCA9MHg2MDAwZjEwMAorICAgICAgICBzdHIgICAgIHIwLCBbcjFdCisxOiAgICAgIGxkciAgICAgcjIsIFtyMV0KKyAgICAgICAgY21wICAgICByMCwgcjIKKyAgICAgICAgYmVxICAgICAxYgorICAgICAgICBiICAgICAgIHNlY29uZGFyeV9zdGFydHVwCitFTkRQUk9DKHRlZ3JhX3NlY29uZGFyeV9zdGFydHVwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2hvdHBsdWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTdmMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ob3RwbHVnLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9ob3RwbHVnLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY3B1X2tpbGxlZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfZW50ZXJfbG93cG93ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCWZsdXNoX2NhY2hlX2FsbCgpOworCWFzbSB2b2xhdGlsZSgKKwkiCW1jcglwMTUsIDAsICUxLCBjNywgYzUsIDBcbiIKKwkiCW1jcglwMTUsIDAsICUxLCBjNywgYzEwLCA0XG4iCisJLyoKKwkgKiBUdXJuIG9mZiBjb2hlcmVuY3kKKwkgKi8KKwkiCW1yYwlwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkiCWJpYwklMCwgJTAsICMweDIwXG4iCisJIgltY3IJcDE1LCAwLCAlMCwgYzEsIGMwLCAxXG4iCisJIgltcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIgliaWMJJTAsICUwLCAjMHgwNFxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSAgOiAiPSZyIiAodikKKwkgIDogInIiICgwKQorCSAgOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNwdV9sZWF2ZV9sb3dwb3dlcih2b2lkKQoreworCXVuc2lnbmVkIGludCB2OworCisJYXNtIHZvbGF0aWxlKAorCSJtcmMJcDE1LCAwLCAlMCwgYzEsIGMwLCAwXG4iCisJIglvcnIJJTAsICUwLCAjMHgwNFxuIgorCSIJbWNyCXAxNSwgMCwgJTAsIGMxLCBjMCwgMFxuIgorCSIJbXJjCXAxNSwgMCwgJTAsIGMxLCBjMCwgMVxuIgorCSIJb3JyCSUwLCAlMCwgIzB4MjBcbiIKKwkiCW1jcglwMTUsIDAsICUwLCBjMSwgYzAsIDFcbiIKKwkgIDogIj0mciIgKHYpCisJICA6CisJICA6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGxhdGZvcm1fZG9fbG93cG93ZXIodW5zaWduZWQgaW50IGNwdSkKK3sKKwkvKgorCSAqIHRoZXJlIGlzIG5vIHBvd2VyLWNvbnRyb2wgaGFyZHdhcmUgb24gdGhpcyBwbGF0Zm9ybSwgc28gYWxsCisJICogd2UgY2FuIGRvIGlzIHB1dCB0aGUgY29yZSBpbnRvIFdGSTsgdGhpcyBpcyBzYWZlIGFzIHRoZSBjYWxsaW5nCisJICogY29kZSB3aWxsIGhhdmUgYWxyZWFkeSBkaXNhYmxlZCBpbnRlcnJ1cHRzCisJICovCisJZm9yICg7OykgeworCQkvKgorCQkgKiBoZXJlJ3MgdGhlIFdGSQorCQkgKi8KKwkJYXNtKCIud29yZAkweGUzMjBmMDAzXG4iCisJCSAgICA6CisJCSAgICA6CisJCSAgICA6ICJtZW1vcnkiLCAiY2MiKTsKKworCQkvKmlmIChwZW5fcmVsZWFzZSA9PSBjcHUpIHsqLworCQkJLyoKKwkJCSAqIE9LLCBwcm9wZXIgd2FrZXVwLCB3ZSdyZSBkb25lCisJCQkgKi8KKwkJCWJyZWFrOworCQkvKn0qLworCisJCS8qCisJCSAqIGdldHRpbmcgaGVyZSwgbWVhbnMgdGhhdCB3ZSBoYXZlIGNvbWUgb3V0IG9mIFdGSSB3aXRob3V0CisJCSAqIGhhdmluZyBiZWVuIHdva2VuIHVwIC0gdGhpcyBzaG91bGRuJ3QgaGFwcGVuCisJCSAqCisJCSAqIFRoZSB0cm91YmxlIGlzLCBsZXR0aW5nIHBlb3BsZSBrbm93IGFib3V0IHRoaXMgaXMgbm90IHJlYWxseQorCQkgKiBwb3NzaWJsZSwgc2luY2Ugd2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGluY29oZXJlbnRseSwgYW5kCisJCSAqIHRoZXJlZm9yZSBjYW5ub3Qgc2FmZWx5IGNhbGwgcHJpbnRrKCkgb3IgYW55dGhpbmcgZWxzZQorCQkgKi8KKyNpZmRlZiBERUJVRworCQlwcmludGsoS0VSTl9XQVJOICJDUFUldTogc3B1cmlvdXMgd2FrZXVwIGNhbGxcbiIsIGNwdSk7CisjZW5kaWYKKwl9Cit9CisKK2ludCBwbGF0Zm9ybV9jcHVfa2lsbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNwdV9raWxsZWQsIDUwMDApOworfQorCisvKgorICogcGxhdGZvcm0tc3BlY2lmaWMgY29kZSB0byBzaHV0ZG93biBhIENQVQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLwordm9pZCBwbGF0Zm9ybV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit7CisjaWZkZWYgREVCVUcKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChjcHUgIT0gdGhpc19jcHUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRWVrISBwbGF0Zm9ybV9jcHVfZGllIHJ1bm5pbmcgb24gJXUsIHNob3VsZCBiZSAldVxuIiwKKwkJCSAgIHRoaXNfY3B1LCBjcHUpOworCQlCVUcoKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX05PVElDRSAiQ1BVJXU6IHNodXRkb3duXG4iLCBjcHUpOworCWNvbXBsZXRlKCZjcHVfa2lsbGVkKTsKKworCS8qCisJICogd2UncmUgcmVhZHkgZm9yIHNodXRkb3duIG5vdywgc28gZG8gaXQKKwkgKi8KKwljcHVfZW50ZXJfbG93cG93ZXIoKTsKKwlwbGF0Zm9ybV9kb19sb3dwb3dlcihjcHUpOworCisJLyoKKwkgKiBicmluZyB0aGlzIENQVSBiYWNrIGludG8gdGhlIHdvcmxkIG9mIGNhY2hlCisJICogY29oZXJlbmN5LCBhbmQgdGhlbiByZXN0b3JlIGludGVycnVwdHMKKwkgKi8KKwljcHVfbGVhdmVfbG93cG93ZXIoKTsKK30KKworaW50IHBsYXRmb3JtX2NwdV9kaXNhYmxlKHVuc2lnbmVkIGludCBjcHUpCit7CisJLyoKKwkgKiB3ZSBkb24ndCBhbGxvdyBDUFUgMCB0byBiZSBzaHV0ZG93biAoaXQgaXMgc3RpbGwgdG9vIHNwZWNpYWwKKwkgKiBlLmcuIGNsb2NrIHRpY2sgaW50ZXJydXB0cykKKwkgKi8KKwlyZXR1cm4gY3B1ID09IDAgPyAtRVBFUk0gOiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvYmFycmllcnMuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxMTUxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQVJNIEx0ZC4KKyAqIFdyaXR0ZW4gYnkgQ2F0YWxpbiBNYXJpbmFzIDxjYXRhbGluLm1hcmluYXNAYXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19NQUNIX0JBUlJJRVJTX0gKKyNkZWZpbmUgX19NQUNIX0JBUlJJRVJTX0gKKworI2luY2x1ZGUgPGFzbS9vdXRlcmNhY2hlLmg+CisKKyNkZWZpbmUgcm1iKCkJCWRtYigpCisjZGVmaW5lIHdtYigpCQlkbyB7IGRzYigpOyBvdXRlcl9zeW5jKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG1iKCkJCXdtYigpCisKKyNlbmRpZgkvKiBfX01BQ0hfQkFSUklFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODk2ZjI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsay5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGsuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglFcmlrIEdpbGxpbmcgPGtvbmtlcnNAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9DTEtfSAorI2RlZmluZSBfX01BQ0hfQ0xLX0gKKwordm9pZCB0ZWdyYV9wZXJpcGhfcmVzZXRfZGVhc3NlcnQoc3RydWN0IGNsayAqYyk7Cit2b2lkIHRlZ3JhX3BlcmlwaF9yZXNldF9hc3NlcnQoc3RydWN0IGNsayAqYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJmNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKKworc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhMzk1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPG1hY2gvaW8uaD4KKworCS5tYWNybyAgYWRkcnVhcnQscngsIHRtcAorICAgICAgICBtcmMgICAgIHAxNSwgMCwgXHJ4LCBjMSwgYzAKKyAgICAgICAgdHN0ICAgICBccngsICMxICAgICAgICAgICAgICAgICBAIE1NVSBlbmFibGVkPworICAgICAgICBsZHJlcSAgIFxyeCwgPUlPX0FQQl9QSFlTICAgICAgIEAgcGh5c2ljYWwKKyAgICAgICAgbGRybmUgICBccngsID1JT19BUEJfVklSVCAgICAgICAgQCB2aXJ0dWFsCisjaWYgZGVmaW5lZChDT05GSUdfVEVHUkFfREVCVUdfVUFSVF9OT05FKQorI2Vycm9yICJBIGRlYnVnIFVBUlQgbXVzdCBiZSBzZWxlY3RlZCBpbiB0aGUga2VybmVsIGNvbmZpZyB0byB1c2UgREVCVUdfTEwiCisjZWxpZiBkZWZpbmVkKENPTkZJR19URUdSQV9ERUJVR19VQVJUQSkKKyAgICAgICAgb3JyICAgICBccngsIFxyeCwgIzB4NjAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfVEVHUkFfREVCVUdfVUFSVEIpCisJbGRyCVx0bXAsID0weDYwNDAKKyAgICAgICAgb3JyICAgICBccngsIFxyeCwgXHRtcAorI2VsaWYgZGVmaW5lZChDT05GSUdfVEVHUkFfREVCVUdfVUFSVEMpCisgICAgICAgIG9yciAgICAgXHJ4LCBccngsICMweDYyMDAKKyNlbGlmIGRlZmluZWQoQ09ORklHX1RFR1JBX0RFQlVHX1VBUlREKQorICAgICAgICBvcnIgICAgIFxyeCwgXHJ4LCAjMHg2MzAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19URUdSQV9ERUJVR19VQVJURSkKKyAgICAgICAgb3JyICAgICBccngsIFxyeCwgIzB4NjQwMAorI2VuZGlmCisJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmE5ZTVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDExOCBAQAorLyogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBQYWxtLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pby5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJNX0dJQykKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9naWMuaD4KKworCS8qIFVzZXMgdGhlIEdJQyBpbnRlcnJ1cHQgY29udHJvbGxlciBidWlsdCBpbnRvIHRoZSBjcHUgKi8KKyNkZWZpbmUgSUNUUkxfQkFTRSAoSU9fQ1BVX1ZJUlQgKyAweDEwMCkKKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwltb3Z3IFxiYXNlLCAjKElDVFJMX0JBU0UgJiAweDAwMDBmZmZmKQorCW1vdnQgXGJhc2UsICMoKElDVFJMX0JBU0UgJiAweGZmZmYwMDAwKSA+PiAxNikKKwkuZW5kbQorCisJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS8qCisJICogVGhlIGludGVycnVwdCBudW1iZXJpbmcgc2NoZW1lIGlzIGRlZmluZWQgaW4gdGhlCisJICogaW50ZXJydXB0IGNvbnRyb2xsZXIgc3BlYy4gIFRvIHdpdDoKKwkgKgorCSAqIEludGVycnVwdHMgMC0xNSBhcmUgSVBJCisJICogMTYtMjggYXJlIHJlc2VydmVkCisJICogMjktMzEgYXJlIGxvY2FsLiAgV2UgYWxsb3cgMzAgdG8gYmUgdXNlZCBmb3IgdGhlIHdhdGNoZG9nLgorCSAqIDMyLTEwMjAgYXJlIGdsb2JhbAorCSAqIDEwMjEtMTAyMiBhcmUgcmVzZXJ2ZWQKKwkgKiAxMDIzIGlzICJzcHVyaW91cyIgKG5vIGludGVycnVwdCkKKwkgKgorCSAqIEZvciBub3csIHdlIGlnbm9yZSBhbGwgbG9jYWwgaW50ZXJydXB0cyBzbyBvbmx5IHJldHVybiBhbiBpbnRlcnJ1cHQKKwkgKiBpZiBpdCdzIGJldHdlZW4gMzAgYW5kIDEwMjAuICBUaGUgdGVzdF9mb3JfaXBpIHJvdXRpbmUgYmVsb3cgd2lsbAorCSAqIHBpY2sgdXAgb24gSVBJcy4KKwkgKgorCSAqIEEgc2ltcGxlIHJlYWQgZnJvbSB0aGUgY29udHJvbGxlciB3aWxsIHRlbGwgdXMgdGhlIG51bWJlciBvZiB0aGUKKwkgKiBoaWdoZXN0IHByaW9yaXR5IGVuYWJsZWQgaW50ZXJydXB0LiAgV2UgdGhlbiBqdXN0IG5lZWQgdG8gY2hlY2sKKwkgKiB3aGV0aGVyIGl0IGlzIGluIHRoZSB2YWxpZCByYW5nZSBmb3IgYW4gSVJRICgzMC0xMDIwIGluY2x1c2l2ZSkuCisJICovCisKKwkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCisJLyogYml0cyAxMi0xMCA9IHNyYyBDUFUsIDktMCA9IGludCAjICovCisJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdCisKKwlsZHIJCVx0bXAsID0xMDIxCisKKwliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKworCWNtcCAgICAgXGlycW5yLCAjMjkKKwljbXBjYwlcaXJxbnIsIFxpcnFucgorCWNtcG5lCVxpcnFuciwgXHRtcAorCWNtcGNzCVxpcnFuciwgXGlycW5yCisKKwkuZW5kbQorCisJLyogV2UgYXNzdW1lIHRoYXQgaXJxc3RhdCAodGhlIHJhdyB2YWx1ZSBvZiB0aGUgSVJRIGFja25vd2xlZGdlCisJICogcmVnaXN0ZXIpIGlzIHByZXNlcnZlZCBmcm9tIHRoZSBtYWNybyBhYm92ZS4KKwkgKiBJZiB0aGVyZSBpcyBhbiBJUEksIHdlIGltbWVkaWF0ZWx5IHNpZ25hbCBlbmQgb2YgaW50ZXJydXB0IG9uIHRoZQorCSAqIGNvbnRyb2xsZXIsIHNpbmNlIHRoaXMgcmVxdWlyZXMgdGhlIG9yaWdpbmFsIGlycXN0YXQgdmFsdWUgd2hpY2gKKwkgKiB3ZSB3b24ndCBlYXNpbHkgYmUgYWJsZSB0byByZWNyZWF0ZSBsYXRlci4KKwkgKi8KKworCS5tYWNybyB0ZXN0X2Zvcl9pcGksIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwliaWMJXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAorCWNtcAlcaXJxbnIsICMxNgorCXN0cmNjCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwljbXBjcwlcaXJxbnIsIFxpcnFucgorCS5lbmRtCisKKwkvKiBBcyBhYm92ZSwgdGhpcyBhc3N1bWVzIHRoYXQgaXJxc3RhdCBhbmQgYmFzZSBhcmUgcHJlc2VydmVkLi4gKi8KKworCS5tYWNybyB0ZXN0X2Zvcl9sdGlycSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWJpYwlcaXJxbnIsIFxpcnFzdGF0LCAjMHgxYzAwCisJbW92IAlcdG1wLCAjMAorCWNtcAlcaXJxbnIsICMyOQorCW1vdmVxCVx0bXAsICMxCisJc3RyZXEJXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfRU9JXQorCWNtcAlcdG1wLCAjMAorCS5lbmRtCisKKyNlbHNlCisJLyogbGVnYWN5IGludGVycnVwdCBjb250cm9sbGVyIGZvciBBUDE2ICovCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCUAgZW5hYmxlIGltcHJlY2lzZSBhYm9ydHMKKwljcHNpZQlhCisJQCBFVlAgYmFzZSBhdCAweGYwMTBmMDAwCisJbW92IFxiYXNlLCAjMHhmMDAwMDAwMAorCW9yciBcYmFzZSwgIzB4MDAxMDAwMDAKKwlvcnIgXGJhc2UsICMweDAwMDBmMDAwCisJLmVuZG0KKworCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIgXGlycW5yLCBbXGJhc2UsICMweDIwXQlAIEVWVF9JUlFfU1RTCisJY21wIFxpcnFuciwgIzB4ODAKKwkuZW5kbQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZTgyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUVyaWsgR2lsbGluZyA8a29ua2Vyc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19NQUNIX1RFR1JBX0dQSU9fSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfR1BJT19ICisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2RlZmluZSBBUkNIX05SX0dQSU9TCQlJTlRfR1BJT19OUgorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJCV9fZ3Bpb19jYW5zbGVlcAorCisjZGVmaW5lIFRFR1JBX0dQSU9fVE9fSVJRKGdwaW8pIChJTlRfR1BJT19CQVNFICsgKGdwaW8pKQorI2RlZmluZSBURUdSQV9JUlFfVE9fR1BJTyhpcnEpICgoZ3BpbykgLSBJTlRfR1BJT19CQVNFKQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlpZiAoZ3BpbyA8IEFSQ0hfTlJfR1BJT1MpCisJCXJldHVybiBJTlRfR1BJT19CQVNFICsgZ3BpbzsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoKGlycSA+PSBJTlRfR1BJT19CQVNFKSAmJiAoaXJxIDwgSU5UX0dQSU9fQkFTRSArIElOVF9HUElPX05SKSkKKwkJcmV0dXJuIGlycSAtIElOVF9HUElPX0JBU0U7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3ZvaWQgdGVncmFfZ3Bpb19lbmFibGUoaW50IGdwaW8pOwordm9pZCB0ZWdyYV9ncGlvX2Rpc2FibGUoaW50IGdwaW8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMTRlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCUVyaWsgR2lsbGluZyA8a29ua2Vyc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19NQUNIX1RFR1JBX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19NQUNIX1RFR1JBX0hBUkRXQVJFX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWVkZmMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDc5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglDb2xpbiBDcm9zcyA8Y2Nyb3NzQGdvb2dsZS5jb20+CisgKglFcmlrIEdpbGxpbmcgPGtvbmtlcnNAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9URUdSQV9JT19ICisjZGVmaW5lIF9fTUFDSF9URUdSQV9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKiBPbiBURUdSQSwgbWFueSBwZXJpcGhlcmFscyBhcmUgdmVyeSBjbG9zZWx5IHBhY2tlZCBpbgorICogdHdvIDI1Nk1CIGlvIHdpbmRvd3MgKHRoYXQgYWN0dWFsbHkgb25seSB1c2UgYWJvdXQgNjRLQgorICogYXQgdGhlIHN0YXJ0IG9mIGVhY2gpLgorICoKKyAqIFdlIHdpbGwganVzdCBtYXAgdGhlIGZpcnN0IDFNQiBvZiBlYWNoIHdpbmRvdyAodG8gbWluaW1pemUKKyAqIHB0IGVudHJpZXMgbmVlZGVkKSBhbmQgcHJvdmlkZSBhIG1hY3JvIHRvIHRyYW5zZm9ybSBwaHlzaWNhbAorICogaW8gYWRkcmVzc2VzIHRvIGFuIGFwcHJvcHJpYXRlIHZvaWQgX19pb21lbSAqLgorICoKKyAqLworCisjZGVmaW5lIElPX0NQVV9QSFlTICAgICAweDUwMDQwMDAwCisjZGVmaW5lIElPX0NQVV9WSVJUICAgICAweEZFMDAwMDAwCisjZGVmaW5lIElPX0NQVV9TSVpFCVNaXzE2SworCisjZGVmaW5lIElPX1BQU0JfUEhZUwkweDYwMDAwMDAwCisjZGVmaW5lIElPX1BQU0JfVklSVAkweEZFMjAwMDAwCisjZGVmaW5lIElPX1BQU0JfU0laRQlTWl8xTQorCisjZGVmaW5lIElPX0FQQl9QSFlTCTB4NzAwMDAwMDAKKyNkZWZpbmUgSU9fQVBCX1ZJUlQJMHhGRTMwMDAwMAorI2RlZmluZSBJT19BUEJfU0laRQlTWl8xTQorCisjZGVmaW5lIElPX1RPX1ZJUlRfQkVUV0VFTihwLCBzdCwgc3opCSgocCkgPj0gKHN0KSAmJiAocCkgPCAoKHN0KSArIChzeikpKQorI2RlZmluZSBJT19UT19WSVJUX1hMQVRFKHAsIHBzdCwgdnN0KQkoKChwKSAtIChwc3QpICsgKHZzdCkpKQorCisjZGVmaW5lIElPX1RPX1ZJUlQobikgKCBcCisJSU9fVE9fVklSVF9CRVRXRUVOKChuKSwgSU9fUFBTQl9QSFlTLCBJT19QUFNCX1NJWkUpID8JCVwKKwkJSU9fVE9fVklSVF9YTEFURSgobiksIElPX1BQU0JfUEhZUywgSU9fUFBTQl9WSVJUKSA6CVwKKwlJT19UT19WSVJUX0JFVFdFRU4oKG4pLCBJT19BUEJfUEhZUywgSU9fQVBCX1NJWkUpID8JCVwKKwkJSU9fVE9fVklSVF9YTEFURSgobiksIElPX0FQQl9QSFlTLCBJT19BUEJfVklSVCkgOglcCisJSU9fVE9fVklSVF9CRVRXRUVOKChuKSwgSU9fQ1BVX1BIWVMsIElPX0NQVV9TSVpFKSA/CQlcCisJCUlPX1RPX1ZJUlRfWExBVEUoKG4pLCBJT19DUFVfUEhZUywgSU9fQ1BVX1ZJUlQpIDoJXAorCTApCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIF9fYXJjaF9pb3JlbWFwKHAsIHMsIHQpCXRlZ3JhX2lvcmVtYXAocCwgcywgdCkKKyNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJdGVncmFfaW91bm1hcCh2KQorCit2b2lkIF9faW9tZW0gKnRlZ3JhX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUpOwordm9pZCB0ZWdyYV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKKyNkZWZpbmUgSU9fQUREUkVTUyhuKSAoKHZvaWQgX19pb21lbSAqKSBJT19UT19WSVJUKG4pKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqX19pbyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyOworfQorI2RlZmluZSBfX2lvKGEpICAgICAgICAgX19pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkgICAgKGEpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2lvbWFwLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9pb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDFmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9pb21hcC5oCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaW9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglDb2xpbiBDcm9zcyA8Y2Nyb3NzQGdvb2dsZS5jb20+CisgKglFcmlrIEdpbGxpbmcgPGtvbmtlcnNAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9URUdSQV9JT01BUF9ICisjZGVmaW5lIF9fTUFDSF9URUdSQV9JT01BUF9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2RlZmluZSBURUdSQV9BUk1fUEVSSUZfQkFTRQkJMHg1MDA0MDAwMAorI2RlZmluZSBURUdSQV9BUk1fUEVSSUZfU0laRQkJU1pfOEsKKworI2RlZmluZSBURUdSQV9BUk1fSU5UX0RJU1RfQkFTRQkJMHg1MDA0MTAwMAorI2RlZmluZSBURUdSQV9BUk1fSU5UX0RJU1RfU0laRQkJU1pfNEsKKworI2RlZmluZSBURUdSQV9ESVNQTEFZX0JBU0UJCTB4NTQyMDAwMDAKKyNkZWZpbmUgVEVHUkFfRElTUExBWV9TSVpFCQlTWl8yNTZLCisKKyNkZWZpbmUgVEVHUkFfRElTUExBWTJfQkFTRQkJMHg1NDI0MDAwMAorI2RlZmluZSBURUdSQV9ESVNQTEFZMl9TSVpFCQlTWl8yNTZLCisKKyNkZWZpbmUgVEVHUkFfUFJJTUFSWV9JQ1RMUl9CQVNFCTB4NjAwMDQwMDAKKyNkZWZpbmUgVEVHUkFfUFJJTUFSWV9JQ1RMUl9TSVpFCVNaXzY0CisKKyNkZWZpbmUgVEVHUkFfU0VDT05EQVJZX0lDVExSX0JBU0UJMHg2MDAwNDEwMAorI2RlZmluZSBURUdSQV9TRUNPTkRBUllfSUNUTFJfU0laRQlTWl82NAorCisjZGVmaW5lIFRFR1JBX1RFUlRJQVJZX0lDVExSX0JBU0UJMHg2MDAwNDIwMAorI2RlZmluZSBURUdSQV9URVJUSUFSWV9JQ1RMUl9TSVpFCVNaXzY0CisKKyNkZWZpbmUgVEVHUkFfUVVBVEVSTkFSWV9JQ1RMUl9CQVNFCTB4NjAwMDQzMDAKKyNkZWZpbmUgVEVHUkFfUVVBVEVSTkFSWV9JQ1RMUl9TSVpFCVNaXzY0CisKKyNkZWZpbmUgVEVHUkFfVE1SMV9CQVNFCQkJMHg2MDAwNTAwMAorI2RlZmluZSBURUdSQV9UTVIxX1NJWkUJCQlTWl84CisKKyNkZWZpbmUgVEVHUkFfVE1SMl9CQVNFCQkJMHg2MDAwNTAwOAorI2RlZmluZSBURUdSQV9UTVIyX1NJWkUJCQlTWl84CisKKyNkZWZpbmUgVEVHUkFfVE1SVVNfQkFTRQkJMHg2MDAwNTAxMAorI2RlZmluZSBURUdSQV9UTVJVU19TSVpFCQlTWl82NAorCisjZGVmaW5lIFRFR1JBX1RNUjNfQkFTRQkJCTB4NjAwMDUwNTAKKyNkZWZpbmUgVEVHUkFfVE1SM19TSVpFCQkJU1pfOAorCisjZGVmaW5lIFRFR1JBX1RNUjRfQkFTRQkJCTB4NjAwMDUwNTgKKyNkZWZpbmUgVEVHUkFfVE1SNF9TSVpFCQkJU1pfOAorCisjZGVmaW5lIFRFR1JBX0NMS19SRVNFVF9CQVNFCQkweDYwMDA2MDAwCisjZGVmaW5lIFRFR1JBX0NMS19SRVNFVF9TSVpFCQlTWl80SworCisjZGVmaW5lIFRFR1JBX0ZMT1dfQ1RSTF9CQVNFCQkweDYwMDA3MDAwCisjZGVmaW5lIFRFR1JBX0ZMT1dfQ1RSTF9TSVpFCQkyMAorCisjZGVmaW5lIFRFR1JBX1NUQVRNT05fQkFTRQkJMHg2MDAwQzQwMDAKKyNkZWZpbmUgVEVHUkFfU1RBVE1PTl9TSVpFCQlTWl8xSworCisjZGVmaW5lIFRFR1JBX0dQSU9fQkFTRQkJCTB4NjAwMEQwMDAKKyNkZWZpbmUgVEVHUkFfR1BJT19TSVpFCQkJU1pfNEsKKworI2RlZmluZSBURUdSQV9FWENFUFRJT05fVkVDVE9SU19CQVNFICAgIDB4NjAwMEYwMDAKKyNkZWZpbmUgVEVHUkFfRVhDRVBUSU9OX1ZFQ1RPUlNfU0laRSAgICBTWl80SworCisjZGVmaW5lIFRFR1JBX0FQQl9NSVNDX0JBU0UJCTB4NzAwMDAwMDAKKyNkZWZpbmUgVEVHUkFfQVBCX01JU0NfU0laRQkJU1pfNEsKKworI2RlZmluZSBURUdSQV9BQzk3X0JBU0UJCQkweDcwMDAyMDAwCisjZGVmaW5lIFRFR1JBX0FDOTdfU0laRQkJCVNaXzUxMgorCisjZGVmaW5lIFRFR1JBX1NQRElGX0JBU0UJCTB4NzAwMDI0MDAKKyNkZWZpbmUgVEVHUkFfU1BESUZfU0laRQkJU1pfNTEyCisKKyNkZWZpbmUgVEVHUkFfSTJTMV9CQVNFCQkJMHg3MDAwMjgwMAorI2RlZmluZSBURUdSQV9JMlMxX1NJWkUJCQlTWl8yNTYKKworI2RlZmluZSBURUdSQV9JMlMyX0JBU0UJCQkweDcwMDAyQTAwCisjZGVmaW5lIFRFR1JBX0kyUzJfU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX1VBUlRBX0JBU0UJCTB4NzAwMDYwMDAKKyNkZWZpbmUgVEVHUkFfVUFSVEFfU0laRQkJU1pfNjQKKworI2RlZmluZSBURUdSQV9VQVJUQl9CQVNFCQkweDcwMDA2MDQwCisjZGVmaW5lIFRFR1JBX1VBUlRCX1NJWkUJCVNaXzY0CisKKyNkZWZpbmUgVEVHUkFfVUFSVENfQkFTRQkJMHg3MDAwNjIwMAorI2RlZmluZSBURUdSQV9VQVJUQ19TSVpFCQlTWl8yNTYKKworI2RlZmluZSBURUdSQV9VQVJURF9CQVNFCQkweDcwMDA2MzAwCisjZGVmaW5lIFRFR1JBX1VBUlREX1NJWkUJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX1VBUlRFX0JBU0UJCTB4NzAwMDY0MDAKKyNkZWZpbmUgVEVHUkFfVUFSVEVfU0laRQkJU1pfMjU2CisKKyNkZWZpbmUgVEVHUkFfTkFORF9CQVNFCQkJMHg3MDAwODAwMAorI2RlZmluZSBURUdSQV9OQU5EX1NJWkUJCQlTWl8yNTYKKworI2RlZmluZSBURUdSQV9IU01NQ19CQVNFCQkweDcwMDA4NTAwCisjZGVmaW5lIFRFR1JBX0hTTU1DX1NJWkUJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX1NOT1JfQkFTRQkJCTB4NzAwMDkwMDAKKyNkZWZpbmUgVEVHUkFfU05PUl9TSVpFCQkJU1pfNEsKKworI2RlZmluZSBURUdSQV9QV0ZNX0JBU0UJCQkweDcwMDBBMDAwCisjZGVmaW5lIFRFR1JBX1BXRk1fU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX01JUElfQkFTRQkJCTB4NzAwMEIwMDAKKyNkZWZpbmUgVEVHUkFfTUlQSV9TSVpFCQkJU1pfMjU2CisKKyNkZWZpbmUgVEVHUkFfSTJDX0JBU0UJCQkweDcwMDBDMDAwCisjZGVmaW5lIFRFR1JBX0kyQ19TSVpFCQkJU1pfMjU2CisKKyNkZWZpbmUgVEVHUkFfVFdDX0JBU0UJCQkweDcwMDBDMTAwCisjZGVmaW5lIFRFR1JBX1RXQ19TSVpFCQkJU1pfMjU2CisKKyNkZWZpbmUgVEVHUkFfU1BJX0JBU0UJCQkweDcwMDBDMzgwCisjZGVmaW5lIFRFR1JBX1NQSV9TSVpFCQkJNDgKKworI2RlZmluZSBURUdSQV9JMkMyX0JBU0UJCQkweDcwMDBDNDAwCisjZGVmaW5lIFRFR1JBX0kyQzJfU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX0kyQzNfQkFTRQkJCTB4NzAwMEM1MDAKKyNkZWZpbmUgVEVHUkFfSTJDM19TSVpFCQkJU1pfMjU2CisKKyNkZWZpbmUgVEVHUkFfT1dSX0JBU0UJCQkweDcwMDBEMDAwCisjZGVmaW5lIFRFR1JBX09XUl9TSVpFCQkJODAKKworI2RlZmluZSBURUdSQV9EVkNfQkFTRQkJCTB4NzAwMEQwMDAKKyNkZWZpbmUgVEVHUkFfRFZDX1NJWkUJCQlTWl81MTIKKworI2RlZmluZSBURUdSQV9TUEkxX0JBU0UJCQkweDcwMDBENDAwCisjZGVmaW5lIFRFR1JBX1NQSTFfU0laRQkJCVNaXzUxMgorCisjZGVmaW5lIFRFR1JBX1NQSTJfQkFTRQkJCTB4NzAwMEQ2MDAKKyNkZWZpbmUgVEVHUkFfU1BJMl9TSVpFCQkJU1pfNTEyCisKKyNkZWZpbmUgVEVHUkFfU1BJM19CQVNFCQkJMHg3MDAwRDgwMAorI2RlZmluZSBURUdSQV9TUEkzX1NJWkUJCQlTWl81MTIKKworI2RlZmluZSBURUdSQV9TUEk0X0JBU0UJCQkweDcwMDBEQTAwCisjZGVmaW5lIFRFR1JBX1NQSTRfU0laRQkJCVNaXzUxMgorCisjZGVmaW5lIFRFR1JBX1JUQ19CQVNFCQkJMHg3MDAwRTAwMAorI2RlZmluZSBURUdSQV9SVENfU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX0tCQ19CQVNFCQkJMHg3MDAwRTIwMAorI2RlZmluZSBURUdSQV9LQkNfU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX1BNQ19CQVNFCQkJMHg3MDAwRTQwMAorI2RlZmluZSBURUdSQV9QTUNfU0laRQkJCVNaXzI1NgorCisjZGVmaW5lIFRFR1JBX01DX0JBU0UJCQkweDcwMDBGMDAwCisjZGVmaW5lIFRFR1JBX01DX1NJWkUJCQlTWl8xSworCisjZGVmaW5lIFRFR1JBX0VNQ19CQVNFCQkJMHg3MDAwRjQwMAorI2RlZmluZSBURUdSQV9FTUNfU0laRQkJCVNaXzFLCisKKyNkZWZpbmUgVEVHUkFfRlVTRV9CQVNFCQkJMHg3MDAwRjgwMAorI2RlZmluZSBURUdSQV9GVVNFX1NJWkUJCQlTWl8xSworCisjZGVmaW5lIFRFR1JBX0tGVVNFX0JBU0UJCTB4NzAwMEZDMDAKKyNkZWZpbmUgVEVHUkFfS0ZVU0VfU0laRQkJU1pfMUsKKworI2RlZmluZSBURUdSQV9DU0lURV9CQVNFCQkweDcwMDQwMDAwCisjZGVmaW5lIFRFR1JBX0NTSVRFX1NJWkUJCVNaXzI1NksKKworI2RlZmluZSBURUdSQV9VU0JfQkFTRQkJCTB4QzUwMDAwMDAKKyNkZWZpbmUgVEVHUkFfVVNCX1NJWkUJCQlTWl8xNksKKworI2RlZmluZSBURUdSQV9VU0IxX0JBU0UJCQkweEM1MDA0MDAwCisjZGVmaW5lIFRFR1JBX1VTQjFfU0laRQkJCVNaXzE2SworCisjZGVmaW5lIFRFR1JBX1VTQjJfQkFTRQkJCTB4QzUwMDgwMDAKKyNkZWZpbmUgVEVHUkFfVVNCMl9TSVpFCQkJU1pfMTZLCisKKyNkZWZpbmUgVEVHUkFfU0RNTUMxX0JBU0UJCTB4QzgwMDAwMDAKKyNkZWZpbmUgVEVHUkFfU0RNTUMxX1NJWkUJCVNaXzUxMgorCisjZGVmaW5lIFRFR1JBX1NETU1DMl9CQVNFCQkweEM4MDAwMjAwCisjZGVmaW5lIFRFR1JBX1NETU1DMl9TSVpFCQlTWl81MTIKKworI2RlZmluZSBURUdSQV9TRE1NQzNfQkFTRQkJMHhDODAwMDQwMAorI2RlZmluZSBURUdSQV9TRE1NQzNfU0laRQkJU1pfNTEyCisKKyNkZWZpbmUgVEVHUkFfU0RNTUM0X0JBU0UJCTB4QzgwMDA2MDAKKyNkZWZpbmUgVEVHUkFfU0RNTUM0X1NJWkUJCVNaXzUxMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGY2NDBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCUVyaWsgR2lsbGluZyA8a29ua2Vyc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19NQUNIX1RFR1JBX0lSUVNfSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfSVJRU19ICisKKyNkZWZpbmUgSU5UX0dJQ19CQVNFCQkJMAorCisjZGVmaW5lIElSUV9MT0NBTFRJTUVSICAgICAgICAgICAgICAgICAgMjkKKworLyogUHJpbWFyeSBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworI2RlZmluZSBJTlRfUFJJX0JBU0UJCQkoSU5UX0dJQ19CQVNFICsgMzIpCisjZGVmaW5lIElOVF9UTVIxCQkJKElOVF9QUklfQkFTRSArIDApCisjZGVmaW5lIElOVF9UTVIyCQkJKElOVF9QUklfQkFTRSArIDEpCisjZGVmaW5lIElOVF9SVEMJCQkJKElOVF9QUklfQkFTRSArIDIpCisjZGVmaW5lIElOVF9JMlMyCQkJKElOVF9QUklfQkFTRSArIDMpCisjZGVmaW5lIElOVF9TSFJfU0VNX0lOQk9YX0lCRgkJKElOVF9QUklfQkFTRSArIDQpCisjZGVmaW5lIElOVF9TSFJfU0VNX0lOQk9YX0lCRQkJKElOVF9QUklfQkFTRSArIDUpCisjZGVmaW5lIElOVF9TSFJfU0VNX09VVEJPWF9JQkYJCShJTlRfUFJJX0JBU0UgKyA2KQorI2RlZmluZSBJTlRfU0hSX1NFTV9PVVRCT1hfSUJFCQkoSU5UX1BSSV9CQVNFICsgNykKKyNkZWZpbmUgSU5UX1ZERV9VQ1FfRVJST1IJCShJTlRfUFJJX0JBU0UgKyA4KQorI2RlZmluZSBJTlRfVkRFX1NZTkNfVE9LRU4JCShJTlRfUFJJX0JBU0UgKyA5KQorI2RlZmluZSBJTlRfVkRFX0JTRV9WCQkJKElOVF9QUklfQkFTRSArIDEwKQorI2RlZmluZSBJTlRfVkRFX0JTRV9BCQkJKElOVF9QUklfQkFTRSArIDExKQorI2RlZmluZSBJTlRfVkRFX1NYRQkJCShJTlRfUFJJX0JBU0UgKyAxMikKKyNkZWZpbmUgSU5UX0kyUzEJCQkoSU5UX1BSSV9CQVNFICsgMTMpCisjZGVmaW5lIElOVF9TRE1NQzEJCQkoSU5UX1BSSV9CQVNFICsgMTQpCisjZGVmaW5lIElOVF9TRE1NQzIJCQkoSU5UX1BSSV9CQVNFICsgMTUpCisjZGVmaW5lIElOVF9YSU8JCQkJKElOVF9QUklfQkFTRSArIDE2KQorI2RlZmluZSBJTlRfVkRFCQkJCShJTlRfUFJJX0JBU0UgKyAxNykKKyNkZWZpbmUgSU5UX0FWUF9VQ1EJCQkoSU5UX1BSSV9CQVNFICsgMTgpCisjZGVmaW5lIElOVF9TRE1NQzMJCQkoSU5UX1BSSV9CQVNFICsgMTkpCisjZGVmaW5lIElOVF9VU0IJCQkJKElOVF9QUklfQkFTRSArIDIwKQorI2RlZmluZSBJTlRfVVNCMgkJCShJTlRfUFJJX0JBU0UgKyAyMSkKKyNkZWZpbmUgSU5UX1BSSV9SRVNfMjIJCQkoSU5UX1BSSV9CQVNFICsgMjIpCisjZGVmaW5lIElOVF9FSURFCQkJKElOVF9QUklfQkFTRSArIDIzKQorI2RlZmluZSBJTlRfTkFOREZMQVNICQkJKElOVF9QUklfQkFTRSArIDI0KQorI2RlZmluZSBJTlRfVkNQCQkJCShJTlRfUFJJX0JBU0UgKyAyNSkKKyNkZWZpbmUgSU5UX0FQQl9ETUEJCQkoSU5UX1BSSV9CQVNFICsgMjYpCisjZGVmaW5lIElOVF9BSEJfRE1BCQkJKElOVF9QUklfQkFTRSArIDI3KQorI2RlZmluZSBJTlRfR05UXzAJCQkoSU5UX1BSSV9CQVNFICsgMjgpCisjZGVmaW5lIElOVF9HTlRfMQkJCShJTlRfUFJJX0JBU0UgKyAyOSkKKyNkZWZpbmUgSU5UX09XUgkJCQkoSU5UX1BSSV9CQVNFICsgMzApCisjZGVmaW5lIElOVF9TRE1NQzQJCQkoSU5UX1BSSV9CQVNFICsgMzEpCisKKy8qIFNlY29uZGFyeSBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworI2RlZmluZSBJTlRfU0VDX0JBU0UJCQkoSU5UX1BSSV9CQVNFICsgMzIpCisjZGVmaW5lIElOVF9HUElPMQkJCShJTlRfU0VDX0JBU0UgKyAwKQorI2RlZmluZSBJTlRfR1BJTzIJCQkoSU5UX1NFQ19CQVNFICsgMSkKKyNkZWZpbmUgSU5UX0dQSU8zCQkJKElOVF9TRUNfQkFTRSArIDIpCisjZGVmaW5lIElOVF9HUElPNAkJCShJTlRfU0VDX0JBU0UgKyAzKQorI2RlZmluZSBJTlRfVUFSVEEJCQkoSU5UX1NFQ19CQVNFICsgNCkKKyNkZWZpbmUgSU5UX1VBUlRCCQkJKElOVF9TRUNfQkFTRSArIDUpCisjZGVmaW5lIElOVF9JMkMJCQkJKElOVF9TRUNfQkFTRSArIDYpCisjZGVmaW5lIElOVF9TUEkJCQkJKElOVF9TRUNfQkFTRSArIDcpCisjZGVmaW5lIElOVF9UV0MJCQkJKElOVF9TRUNfQkFTRSArIDgpCisjZGVmaW5lIElOVF9UTVIzCQkJKElOVF9TRUNfQkFTRSArIDkpCisjZGVmaW5lIElOVF9UTVI0CQkJKElOVF9TRUNfQkFTRSArIDEwKQorI2RlZmluZSBJTlRfRkxPV19SU00wCQkJKElOVF9TRUNfQkFTRSArIDExKQorI2RlZmluZSBJTlRfRkxPV19SU00xCQkJKElOVF9TRUNfQkFTRSArIDEyKQorI2RlZmluZSBJTlRfU1BESUYJCQkoSU5UX1NFQ19CQVNFICsgMTMpCisjZGVmaW5lIElOVF9VQVJUQwkJCShJTlRfU0VDX0JBU0UgKyAxNCkKKyNkZWZpbmUgSU5UX01JUEkJCQkoSU5UX1NFQ19CQVNFICsgMTUpCisjZGVmaW5lIElOVF9FVkVOVEEJCQkoSU5UX1NFQ19CQVNFICsgMTYpCisjZGVmaW5lIElOVF9FVkVOVEIJCQkoSU5UX1NFQ19CQVNFICsgMTcpCisjZGVmaW5lIElOVF9FVkVOVEMJCQkoSU5UX1NFQ19CQVNFICsgMTgpCisjZGVmaW5lIElOVF9FVkVOVEQJCQkoSU5UX1NFQ19CQVNFICsgMTkpCisjZGVmaW5lIElOVF9WRklSCQkJKElOVF9TRUNfQkFTRSArIDIwKQorI2RlZmluZSBJTlRfRFZDCQkJCShJTlRfU0VDX0JBU0UgKyAyMSkKKyNkZWZpbmUgSU5UX1NZU19TVEFUU19NT04JCShJTlRfU0VDX0JBU0UgKyAyMikKKyNkZWZpbmUgSU5UX0dQSU81CQkJKElOVF9TRUNfQkFTRSArIDIzKQorI2RlZmluZSBJTlRfQ1BVMF9QTVVfSU5UUgkJKElOVF9TRUNfQkFTRSArIDI0KQorI2RlZmluZSBJTlRfQ1BVMl9QTVVfSU5UUgkJKElOVF9TRUNfQkFTRSArIDI1KQorI2RlZmluZSBJTlRfU0VDX1JFU18yNgkJCShJTlRfU0VDX0JBU0UgKyAyNikKKyNkZWZpbmUgSU5UX1NfTElOSzEJCQkoSU5UX1NFQ19CQVNFICsgMjcpCisjZGVmaW5lIElOVF9BUEJfRE1BX0NPUAkJCShJTlRfU0VDX0JBU0UgKyAyOCkKKyNkZWZpbmUgSU5UX0FIQl9ETUFfQ09QCQkJKElOVF9TRUNfQkFTRSArIDI5KQorI2RlZmluZSBJTlRfRE1BX1RYCQkJKElOVF9TRUNfQkFTRSArIDMwKQorI2RlZmluZSBJTlRfRE1BX1JYCQkJKElOVF9TRUNfQkFTRSArIDMxKQorCisvKiBUZXJ0aWFyeSBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworI2RlZmluZSBJTlRfVFJJX0JBU0UJCQkoSU5UX1NFQ19CQVNFICsgMzIpCisjZGVmaW5lIElOVF9IT1NUMVhfQ09QX1NZTkNQVAkJKElOVF9UUklfQkFTRSArIDApCisjZGVmaW5lIElOVF9IT1NUMVhfTVBDT1JFX1NZTkNQVAkoSU5UX1RSSV9CQVNFICsgMSkKKyNkZWZpbmUgSU5UX0hPU1QxWF9DT1BfR0VORVJBTAkJKElOVF9UUklfQkFTRSArIDIpCisjZGVmaW5lIElOVF9IT1NUMVhfTVBDT1JFX0dFTkVSQUwJKElOVF9UUklfQkFTRSArIDMpCisjZGVmaW5lIElOVF9NUEVfR0VORVJBTAkJCShJTlRfVFJJX0JBU0UgKyA0KQorI2RlZmluZSBJTlRfVklfR0VORVJBTAkJCShJTlRfVFJJX0JBU0UgKyA1KQorI2RlZmluZSBJTlRfRVBQX0dFTkVSQUwJCQkoSU5UX1RSSV9CQVNFICsgNikKKyNkZWZpbmUgSU5UX0lTUF9HRU5FUkFMCQkJKElOVF9UUklfQkFTRSArIDcpCisjZGVmaW5lIElOVF8yRF9HRU5FUkFMCQkJKElOVF9UUklfQkFTRSArIDgpCisjZGVmaW5lIElOVF9ESVNQTEFZX0dFTkVSQUwJCShJTlRfVFJJX0JBU0UgKyA5KQorI2RlZmluZSBJTlRfRElTUExBWV9CX0dFTkVSQUwJCShJTlRfVFJJX0JBU0UgKyAxMCkKKyNkZWZpbmUgSU5UX0hETUkJCQkoSU5UX1RSSV9CQVNFICsgMTEpCisjZGVmaW5lIElOVF9UVk9fR0VORVJBTAkJCShJTlRfVFJJX0JBU0UgKyAxMikKKyNkZWZpbmUgSU5UX01DX0dFTkVSQUwJCQkoSU5UX1RSSV9CQVNFICsgMTMpCisjZGVmaW5lIElOVF9FTUNfR0VORVJBTAkJCShJTlRfVFJJX0JBU0UgKyAxNCkKKyNkZWZpbmUgSU5UX1RSSV9SRVNfMTUJCQkoSU5UX1RSSV9CQVNFICsgMTUpCisjZGVmaW5lIElOVF9UUklfUkVTXzE2CQkJKElOVF9UUklfQkFTRSArIDE2KQorI2RlZmluZSBJTlRfQUM5NwkJCShJTlRfVFJJX0JBU0UgKyAxNykKKyNkZWZpbmUgSU5UX1NQSV8yCQkJKElOVF9UUklfQkFTRSArIDE4KQorI2RlZmluZSBJTlRfU1BJXzMJCQkoSU5UX1RSSV9CQVNFICsgMTkpCisjZGVmaW5lIElOVF9JMkMyCQkJKElOVF9UUklfQkFTRSArIDIwKQorI2RlZmluZSBJTlRfS0JDCQkJCShJTlRfVFJJX0JBU0UgKyAyMSkKKyNkZWZpbmUgSU5UX0VYVEVSTkFMX1BNVQkJKElOVF9UUklfQkFTRSArIDIyKQorI2RlZmluZSBJTlRfR1BJTzYJCQkoSU5UX1RSSV9CQVNFICsgMjMpCisjZGVmaW5lIElOVF9UVkRBQwkJCShJTlRfVFJJX0JBU0UgKyAyNCkKKyNkZWZpbmUgSU5UX0dQSU83CQkJKElOVF9UUklfQkFTRSArIDI1KQorI2RlZmluZSBJTlRfVUFSVEQJCQkoSU5UX1RSSV9CQVNFICsgMjYpCisjZGVmaW5lIElOVF9VQVJURQkJCShJTlRfVFJJX0JBU0UgKyAyNykKKyNkZWZpbmUgSU5UX0kyQzMJCQkoSU5UX1RSSV9CQVNFICsgMjgpCisjZGVmaW5lIElOVF9TUElfNAkJCShJTlRfVFJJX0JBU0UgKyAyOSkKKyNkZWZpbmUgSU5UX1RSSV9SRVNfMzAJCQkoSU5UX1RSSV9CQVNFICsgMzApCisjZGVmaW5lIElOVF9TV19SRVNFUlZFRAkJCShJTlRfVFJJX0JBU0UgKyAzMSkKKworLyogUXVhdGVybmFyeSBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworI2RlZmluZSBJTlRfUVVBRF9CQVNFCQkJKElOVF9UUklfQkFTRSArIDMyKQorI2RlZmluZSBJTlRfU05PUgkJCShJTlRfUVVBRF9CQVNFICsgMCkKKyNkZWZpbmUgSU5UX1VTQjMJCQkoSU5UX1FVQURfQkFTRSArIDEpCisjZGVmaW5lIElOVF9QQ0lFX0lOVFIJCQkoSU5UX1FVQURfQkFTRSArIDIpCisjZGVmaW5lIElOVF9QQ0lFX01TSQkJCShJTlRfUVVBRF9CQVNFICsgMykKKyNkZWZpbmUgSU5UX1FVQURfUkVTXzQJCQkoSU5UX1FVQURfQkFTRSArIDQpCisjZGVmaW5lIElOVF9RVUFEX1JFU181CQkJKElOVF9RVUFEX0JBU0UgKyA1KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfNgkJCShJTlRfUVVBRF9CQVNFICsgNikKKyNkZWZpbmUgSU5UX1FVQURfUkVTXzcJCQkoSU5UX1FVQURfQkFTRSArIDcpCisjZGVmaW5lIElOVF9BUEJfRE1BX0NIMAkJCShJTlRfUVVBRF9CQVNFICsgOCkKKyNkZWZpbmUgSU5UX0FQQl9ETUFfQ0gxCQkJKElOVF9RVUFEX0JBU0UgKyA5KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDIJCQkoSU5UX1FVQURfQkFTRSArIDEwKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDMJCQkoSU5UX1FVQURfQkFTRSArIDExKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDQJCQkoSU5UX1FVQURfQkFTRSArIDEyKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDUJCQkoSU5UX1FVQURfQkFTRSArIDEzKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDYJCQkoSU5UX1FVQURfQkFTRSArIDE0KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDcJCQkoSU5UX1FVQURfQkFTRSArIDE1KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDgJCQkoSU5UX1FVQURfQkFTRSArIDE2KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDkJCQkoSU5UX1FVQURfQkFTRSArIDE3KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDEwCQkoSU5UX1FVQURfQkFTRSArIDE4KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDExCQkoSU5UX1FVQURfQkFTRSArIDE5KQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDEyCQkoSU5UX1FVQURfQkFTRSArIDIwKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDEzCQkoSU5UX1FVQURfQkFTRSArIDIxKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDE0CQkoSU5UX1FVQURfQkFTRSArIDIyKQorI2RlZmluZSBJTlRfQVBCX0RNQV9DSDE1CQkoSU5UX1FVQURfQkFTRSArIDIzKQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjQJCQkoSU5UX1FVQURfQkFTRSArIDI0KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjUJCQkoSU5UX1FVQURfQkFTRSArIDI1KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjYJCQkoSU5UX1FVQURfQkFTRSArIDI2KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjcJCQkoSU5UX1FVQURfQkFTRSArIDI3KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjgJCQkoSU5UX1FVQURfQkFTRSArIDI4KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMjkJCQkoSU5UX1FVQURfQkFTRSArIDI5KQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMzAJCQkoSU5UX1FVQURfQkFTRSArIDMwKQorI2RlZmluZSBJTlRfUVVBRF9SRVNfMzEJCQkoSU5UX1FVQURfQkFTRSArIDMxKQorCisjZGVmaW5lIElOVF9HUElPX0JBU0UJCQkoSU5UX1FVQURfQkFTRSArIDMyKQorI2RlZmluZSBJTlRfR1BJT19OUgkJCSgyOCAqIDgpCisKKyNkZWZpbmUgTlJfSVJRUwkJCQkoSU5UX0dQSU9fQkFTRSArIElOVF9HUElPX05SKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE1MWJhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4KKyAqCisgKiBBdXRob3I6CisgKglDb2xpbiBDcm9zcyA8Y2Nyb3NzQGdvb2dsZS5jb20+CisgKglFcmlrIEdpbGxpbmcgPGtvbmtlcnNAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTUFDSF9URUdSQV9NRU1PUllfSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfTUVNT1JZX0gKKworLyogcGh5c2ljYWwgb2Zmc2V0IG9mIFJBTSAqLworI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3Bpbm11eC5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvcGlubXV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjOGNlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3Bpbm11eC5oCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvcGlubXV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVEVHUkFfUElOTVVYX0gKKyNkZWZpbmUgX19NQUNIX1RFR1JBX1BJTk1VWF9ICisKK2VudW0gdGVncmFfcGluZ3JvdXAgeworCVRFR1JBX1BJTkdST1VQX0FUQSA9IDAsCisJVEVHUkFfUElOR1JPVVBfQVRCLAorCVRFR1JBX1BJTkdST1VQX0FUQywKKwlURUdSQV9QSU5HUk9VUF9BVEQsCisJVEVHUkFfUElOR1JPVVBfQVRFLAorCVRFR1JBX1BJTkdST1VQX0NERVYxLAorCVRFR1JBX1BJTkdST1VQX0NERVYyLAorCVRFR1JBX1BJTkdST1VQX0NSVFAsCisJVEVHUkFfUElOR1JPVVBfQ1NVUywKKwlURUdSQV9QSU5HUk9VUF9EQVAxLAorCVRFR1JBX1BJTkdST1VQX0RBUDIsCisJVEVHUkFfUElOR1JPVVBfREFQMywKKwlURUdSQV9QSU5HUk9VUF9EQVA0LAorCVRFR1JBX1BJTkdST1VQX0REQywKKwlURUdSQV9QSU5HUk9VUF9EVEEsCisJVEVHUkFfUElOR1JPVVBfRFRCLAorCVRFR1JBX1BJTkdST1VQX0RUQywKKwlURUdSQV9QSU5HUk9VUF9EVEQsCisJVEVHUkFfUElOR1JPVVBfRFRFLAorCVRFR1JBX1BJTkdST1VQX0RURiwKKwlURUdSQV9QSU5HUk9VUF9HTUEsCisJVEVHUkFfUElOR1JPVVBfR01CLAorCVRFR1JBX1BJTkdST1VQX0dNQywKKwlURUdSQV9QSU5HUk9VUF9HTUQsCisJVEVHUkFfUElOR1JPVVBfR01FLAorCVRFR1JBX1BJTkdST1VQX0dQVSwKKwlURUdSQV9QSU5HUk9VUF9HUFU3LAorCVRFR1JBX1BJTkdST1VQX0dQViwKKwlURUdSQV9QSU5HUk9VUF9IRElOVCwKKwlURUdSQV9QSU5HUk9VUF9JMkNQLAorCVRFR1JBX1BJTkdST1VQX0lSUlgsCisJVEVHUkFfUElOR1JPVVBfSVJUWCwKKwlURUdSQV9QSU5HUk9VUF9LQkNBLAorCVRFR1JBX1BJTkdST1VQX0tCQ0IsCisJVEVHUkFfUElOR1JPVVBfS0JDQywKKwlURUdSQV9QSU5HUk9VUF9LQkNELAorCVRFR1JBX1BJTkdST1VQX0tCQ0UsCisJVEVHUkFfUElOR1JPVVBfS0JDRiwKKwlURUdSQV9QSU5HUk9VUF9MQ1NOLAorCVRFR1JBX1BJTkdST1VQX0xEMCwKKwlURUdSQV9QSU5HUk9VUF9MRDEsCisJVEVHUkFfUElOR1JPVVBfTEQxMCwKKwlURUdSQV9QSU5HUk9VUF9MRDExLAorCVRFR1JBX1BJTkdST1VQX0xEMTIsCisJVEVHUkFfUElOR1JPVVBfTEQxMywKKwlURUdSQV9QSU5HUk9VUF9MRDE0LAorCVRFR1JBX1BJTkdST1VQX0xEMTUsCisJVEVHUkFfUElOR1JPVVBfTEQxNiwKKwlURUdSQV9QSU5HUk9VUF9MRDE3LAorCVRFR1JBX1BJTkdST1VQX0xEMiwKKwlURUdSQV9QSU5HUk9VUF9MRDMsCisJVEVHUkFfUElOR1JPVVBfTEQ0LAorCVRFR1JBX1BJTkdST1VQX0xENSwKKwlURUdSQV9QSU5HUk9VUF9MRDYsCisJVEVHUkFfUElOR1JPVVBfTEQ3LAorCVRFR1JBX1BJTkdST1VQX0xEOCwKKwlURUdSQV9QSU5HUk9VUF9MRDksCisJVEVHUkFfUElOR1JPVVBfTERDLAorCVRFR1JBX1BJTkdST1VQX0xESSwKKwlURUdSQV9QSU5HUk9VUF9MSFAwLAorCVRFR1JBX1BJTkdST1VQX0xIUDEsCisJVEVHUkFfUElOR1JPVVBfTEhQMiwKKwlURUdSQV9QSU5HUk9VUF9MSFMsCisJVEVHUkFfUElOR1JPVVBfTE0wLAorCVRFR1JBX1BJTkdST1VQX0xNMSwKKwlURUdSQV9QSU5HUk9VUF9MUFAsCisJVEVHUkFfUElOR1JPVVBfTFBXMCwKKwlURUdSQV9QSU5HUk9VUF9MUFcxLAorCVRFR1JBX1BJTkdST1VQX0xQVzIsCisJVEVHUkFfUElOR1JPVVBfTFNDMCwKKwlURUdSQV9QSU5HUk9VUF9MU0MxLAorCVRFR1JBX1BJTkdST1VQX0xTQ0ssCisJVEVHUkFfUElOR1JPVVBfTFNEQSwKKwlURUdSQV9QSU5HUk9VUF9MU0RJLAorCVRFR1JBX1BJTkdST1VQX0xTUEksCisJVEVHUkFfUElOR1JPVVBfTFZQMCwKKwlURUdSQV9QSU5HUk9VUF9MVlAxLAorCVRFR1JBX1BJTkdST1VQX0xWUywKKwlURUdSQV9QSU5HUk9VUF9PV0MsCisJVEVHUkFfUElOR1JPVVBfUE1DLAorCVRFR1JBX1BJTkdST1VQX1BUQSwKKwlURUdSQV9QSU5HUk9VUF9STSwKKwlURUdSQV9QSU5HUk9VUF9TREIsCisJVEVHUkFfUElOR1JPVVBfU0RDLAorCVRFR1JBX1BJTkdST1VQX1NERCwKKwlURUdSQV9QSU5HUk9VUF9TRElPMSwKKwlURUdSQV9QSU5HUk9VUF9TTFhBLAorCVRFR1JBX1BJTkdST1VQX1NMWEMsCisJVEVHUkFfUElOR1JPVVBfU0xYRCwKKwlURUdSQV9QSU5HUk9VUF9TTFhLLAorCVRFR1JBX1BJTkdST1VQX1NQREksCisJVEVHUkFfUElOR1JPVVBfU1BETywKKwlURUdSQV9QSU5HUk9VUF9TUElBLAorCVRFR1JBX1BJTkdST1VQX1NQSUIsCisJVEVHUkFfUElOR1JPVVBfU1BJQywKKwlURUdSQV9QSU5HUk9VUF9TUElELAorCVRFR1JBX1BJTkdST1VQX1NQSUUsCisJVEVHUkFfUElOR1JPVVBfU1BJRiwKKwlURUdSQV9QSU5HUk9VUF9TUElHLAorCVRFR1JBX1BJTkdST1VQX1NQSUgsCisJVEVHUkFfUElOR1JPVVBfVUFBLAorCVRFR1JBX1BJTkdST1VQX1VBQiwKKwlURUdSQV9QSU5HUk9VUF9VQUMsCisJVEVHUkFfUElOR1JPVVBfVUFELAorCVRFR1JBX1BJTkdST1VQX1VDQSwKKwlURUdSQV9QSU5HUk9VUF9VQ0IsCisJVEVHUkFfUElOR1JPVVBfVURBLAorCS8qIHRoZXNlIHBpbiBncm91cHMgb25seSBoYXZlIHB1bGx1cCBhbmQgcHVsbCBkb3duIGNvbnRyb2wgKi8KKwlURUdSQV9QSU5HUk9VUF9DSzMyLAorCVRFR1JBX1BJTkdST1VQX0REUkMsCisJVEVHUkFfUElOR1JPVVBfUE1DQSwKKwlURUdSQV9QSU5HUk9VUF9QTUNCLAorCVRFR1JBX1BJTkdST1VQX1BNQ0MsCisJVEVHUkFfUElOR1JPVVBfUE1DRCwKKwlURUdSQV9QSU5HUk9VUF9QTUNFLAorCVRFR1JBX1BJTkdST1VQX1hNMkMsCisJVEVHUkFfUElOR1JPVVBfWE0yRCwKKwlURUdSQV9NQVhfUElOR1JPVVAsCit9OworCitlbnVtIHRlZ3JhX211eF9mdW5jIHsKKwlURUdSQV9NVVhfUlNWRCA9IDB4ODAwMCwKKwlURUdSQV9NVVhfUlNWRDEgPSAweDgwMDAsCisJVEVHUkFfTVVYX1JTVkQyID0gMHg4MDAxLAorCVRFR1JBX01VWF9SU1ZEMyA9IDB4ODAwMiwKKwlURUdSQV9NVVhfUlNWRDQgPSAweDgwMDMsCisJVEVHUkFfTVVYX05PTkUgPSAtMSwKKwlURUdSQV9NVVhfQUhCX0NMSywKKwlURUdSQV9NVVhfQVBCX0NMSywKKwlURUdSQV9NVVhfQVVESU9fU1lOQywKKwlURUdSQV9NVVhfQ1JULAorCVRFR1JBX01VWF9EQVAxLAorCVRFR1JBX01VWF9EQVAyLAorCVRFR1JBX01VWF9EQVAzLAorCVRFR1JBX01VWF9EQVA0LAorCVRFR1JBX01VWF9EQVA1LAorCVRFR1JBX01VWF9ESVNQTEFZQSwKKwlURUdSQV9NVVhfRElTUExBWUIsCisJVEVHUkFfTVVYX0VNQ19URVNUMF9ETEwsCisJVEVHUkFfTVVYX0VNQ19URVNUMV9ETEwsCisJVEVHUkFfTVVYX0dNSSwKKwlURUdSQV9NVVhfR01JX0lOVCwKKwlURUdSQV9NVVhfSERNSSwKKwlURUdSQV9NVVhfSTJDLAorCVRFR1JBX01VWF9JMkMyLAorCVRFR1JBX01VWF9JMkMzLAorCVRFR1JBX01VWF9JREUsCisJVEVHUkFfTVVYX0lSREEsCisJVEVHUkFfTVVYX0tCQywKKwlURUdSQV9NVVhfTUlPLAorCVRFR1JBX01VWF9NSVBJX0hTLAorCVRFR1JBX01VWF9OQU5ELAorCVRFR1JBX01VWF9PU0MsCisJVEVHUkFfTVVYX09XUiwKKwlURUdSQV9NVVhfUENJRSwKKwlURUdSQV9NVVhfUExMQV9PVVQsCisJVEVHUkFfTVVYX1BMTENfT1VUMSwKKwlURUdSQV9NVVhfUExMTV9PVVQxLAorCVRFR1JBX01VWF9QTExQX09VVDIsCisJVEVHUkFfTVVYX1BMTFBfT1VUMywKKwlURUdSQV9NVVhfUExMUF9PVVQ0LAorCVRFR1JBX01VWF9QV00sCisJVEVHUkFfTVVYX1BXUl9JTlRSLAorCVRFR1JBX01VWF9QV1JfT04sCisJVEVHUkFfTVVYX1JUQ0ssCisJVEVHUkFfTVVYX1NESU8xLAorCVRFR1JBX01VWF9TRElPMiwKKwlURUdSQV9NVVhfU0RJTzMsCisJVEVHUkFfTVVYX1NESU80LAorCVRFR1JBX01VWF9TRkxBU0gsCisJVEVHUkFfTVVYX1NQRElGLAorCVRFR1JBX01VWF9TUEkxLAorCVRFR1JBX01VWF9TUEkyLAorCVRFR1JBX01VWF9TUEkyX0FMVCwKKwlURUdSQV9NVVhfU1BJMywKKwlURUdSQV9NVVhfU1BJNCwKKwlURUdSQV9NVVhfVFJBQ0UsCisJVEVHUkFfTVVYX1RXQywKKwlURUdSQV9NVVhfVUFSVEEsCisJVEVHUkFfTVVYX1VBUlRCLAorCVRFR1JBX01VWF9VQVJUQywKKwlURUdSQV9NVVhfVUFSVEQsCisJVEVHUkFfTVVYX1VBUlRFLAorCVRFR1JBX01VWF9VTFBJLAorCVRFR1JBX01VWF9WSSwKKwlURUdSQV9NVVhfVklfU0VOU09SX0NMSywKKwlURUdSQV9NVVhfWElPLAorCVRFR1JBX01BWF9NVVgsCit9OworCitlbnVtIHRlZ3JhX3B1bGx1cGRvd24geworCVRFR1JBX1BVUERfTk9STUFMID0gMCwKKwlURUdSQV9QVVBEX1BVTExfRE9XTiwKKwlURUdSQV9QVVBEX1BVTExfVVAsCit9OworCitlbnVtIHRlZ3JhX3RyaXN0YXRlIHsKKwlURUdSQV9UUklfTk9STUFMID0gMCwKKwlURUdSQV9UUklfVFJJU1RBVEUgPSAxLAorfTsKKworc3RydWN0IHRlZ3JhX3Bpbmdyb3VwX2NvbmZpZyB7CisJZW51bSB0ZWdyYV9waW5ncm91cAlwaW5ncm91cDsKKwllbnVtIHRlZ3JhX211eF9mdW5jCWZ1bmM7CisJZW51bSB0ZWdyYV9wdWxsdXBkb3duCXB1cGQ7CisJZW51bSB0ZWdyYV90cmlzdGF0ZQl0cmlzdGF0ZTsKK307CisKK2VudW0gdGVncmFfc2xldyB7CisJVEVHUkFfU0xFV19GQVNURVNUID0gMCwKKwlURUdSQV9TTEVXX0ZBU1QsCisJVEVHUkFfU0xFV19TTE9XLAorCVRFR1JBX1NMRVdfU0xPV0VTVCwKKwlURUdSQV9NQVhfU0xFVywKK307CisKK2VudW0gdGVncmFfcHVsbF9zdHJlbmd0aCB7CisJVEVHUkFfUFVMTF8wID0gMCwKKwlURUdSQV9QVUxMXzEsCisJVEVHUkFfUFVMTF8yLAorCVRFR1JBX1BVTExfMywKKwlURUdSQV9QVUxMXzQsCisJVEVHUkFfUFVMTF81LAorCVRFR1JBX1BVTExfNiwKKwlURUdSQV9QVUxMXzcsCisJVEVHUkFfUFVMTF84LAorCVRFR1JBX1BVTExfOSwKKwlURUdSQV9QVUxMXzEwLAorCVRFR1JBX1BVTExfMTEsCisJVEVHUkFfUFVMTF8xMiwKKwlURUdSQV9QVUxMXzEzLAorCVRFR1JBX1BVTExfMTQsCisJVEVHUkFfUFVMTF8xNSwKKwlURUdSQV9QVUxMXzE2LAorCVRFR1JBX1BVTExfMTcsCisJVEVHUkFfUFVMTF8xOCwKKwlURUdSQV9QVUxMXzE5LAorCVRFR1JBX1BVTExfMjAsCisJVEVHUkFfUFVMTF8yMSwKKwlURUdSQV9QVUxMXzIyLAorCVRFR1JBX1BVTExfMjMsCisJVEVHUkFfUFVMTF8yNCwKKwlURUdSQV9QVUxMXzI1LAorCVRFR1JBX1BVTExfMjYsCisJVEVHUkFfUFVMTF8yNywKKwlURUdSQV9QVUxMXzI4LAorCVRFR1JBX1BVTExfMjksCisJVEVHUkFfUFVMTF8zMCwKKwlURUdSQV9QVUxMXzMxLAorCVRFR1JBX01BWF9QVUxMLAorfTsKKworZW51bSB0ZWdyYV9kcml2ZV9waW5ncm91cCB7CisJVEVHUkFfRFJJVkVfUElOR1JPVVBfQU8xID0gMCwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9BTzIsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfQVQxLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX0FUMiwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9DREVWMSwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9DREVWMiwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9DU1VTLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX0RBUDEsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfREFQMiwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9EQVAzLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX0RBUDQsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfREJHLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX0xDRDEsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfTENEMiwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9TRE1NQzIsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfU0RNTUMzLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX1NQSSwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9VQUEsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfVUFCLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX1VBUlQyLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX1VBUlQzLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX1ZJMSwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9WSTIsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfWE0yQSwKKwlURUdSQV9EUklWRV9QSU5HUk9VUF9YTTJDLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX1hNMkQsCisJVEVHUkFfRFJJVkVfUElOR1JPVVBfWE0yQ0xLLAorCVRFR1JBX0RSSVZFX1BJTkdST1VQX01FTUNPTVAsCisJVEVHUkFfTUFYX0RSSVZFX1BJTkdST1VQLAorfTsKKworZW51bSB0ZWdyYV9kcml2ZSB7CisJVEVHUkFfRFJJVkVfRElWXzggPSAwLAorCVRFR1JBX0RSSVZFX0RJVl80LAorCVRFR1JBX0RSSVZFX0RJVl8yLAorCVRFR1JBX0RSSVZFX0RJVl8xLAorCVRFR1JBX01BWF9EUklWRSwKK307CisKK2VudW0gdGVncmFfaHNtIHsKKwlURUdSQV9IU01fRElTQUJMRSA9IDAsCisJVEVHUkFfSFNNX0VOQUJMRSwKK307CisKK2VudW0gdGVncmFfc2NobWl0dCB7CisJVEVHUkFfU0NITUlUVF9ESVNBQkxFID0gMCwKKwlURUdSQV9TQ0hNSVRUX0VOQUJMRSwKK307CisKK3N0cnVjdCB0ZWdyYV9kcml2ZV9waW5ncm91cF9jb25maWcgeworCWVudW0gdGVncmFfZHJpdmVfcGluZ3JvdXAgcGluZ3JvdXA7CisJZW51bSB0ZWdyYV9oc20gaHNtOworCWVudW0gdGVncmFfc2NobWl0dCBzY2htaXR0OworCWVudW0gdGVncmFfZHJpdmUgZHJpdmU7CisJZW51bSB0ZWdyYV9wdWxsX3N0cmVuZ3RoIHB1bGxfZG93bjsKKwllbnVtIHRlZ3JhX3B1bGxfc3RyZW5ndGggcHVsbF91cDsKKwllbnVtIHRlZ3JhX3NsZXcgc2xld19yaXNpbmc7CisJZW51bSB0ZWdyYV9zbGV3IHNsZXdfZmFsbGluZzsKK307CisKK2ludCB0ZWdyYV9waW5tdXhfc2V0X2Z1bmMoZW51bSB0ZWdyYV9waW5ncm91cCBwZywgZW51bSB0ZWdyYV9tdXhfZnVuYyBmdW5jKTsKK2ludCB0ZWdyYV9waW5tdXhfc2V0X3RyaXN0YXRlKGVudW0gdGVncmFfcGluZ3JvdXAgcGcsIGVudW0gdGVncmFfdHJpc3RhdGUgdHJpc3RhdGUpOworaW50IHRlZ3JhX3Bpbm11eF9zZXRfcHVsbHVwZG93bihlbnVtIHRlZ3JhX3Bpbmdyb3VwIHBnLCBlbnVtIHRlZ3JhX3B1bGx1cGRvd24gcHVwZCk7CisKK3ZvaWQgdGVncmFfcGlubXV4X2NvbmZpZ19waW5ncm91cChlbnVtIHRlZ3JhX3Bpbmdyb3VwIHBpbmdyb3VwLAorCWVudW0gdGVncmFfbXV4X2Z1bmMgZnVuYywgZW51bSB0ZWdyYV9wdWxsdXBkb3duIHB1cGQsCisJZW51bSB0ZWdyYV90cmlzdGF0ZSB0cmlzdGF0ZSk7CisKK3ZvaWQgdGVncmFfcGlubXV4X2NvbmZpZ190YWJsZShzdHJ1Y3QgdGVncmFfcGluZ3JvdXBfY29uZmlnICpjb25maWcsIGludCBsZW4pOworCit2b2lkIHRlZ3JhX2RyaXZlX3Bpbm11eF9jb25maWdfdGFibGUoc3RydWN0IHRlZ3JhX2RyaXZlX3Bpbmdyb3VwX2NvbmZpZyAqY29uZmlnLAorCWludCBsZW4pOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc21wLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQyZGFiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc21wLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBBU01BUk1fQVJDSF9TTVBfSAorI2RlZmluZSBBU01BUk1fQVJDSF9TTVBfSAorCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisKKyNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkJCQlcCisJKHsJCQkJCQlcCisJCXVuc2lnbmVkIGludCBjcHVudW07CQkJXAorCQlfX2FzbV9fKCJtcmMgcDE1LCAwLCAlMCwgYzAsIGMwLCA1IglcCisJCQk6ICI9ciIgKGNwdW51bSkpOwkJXAorCQljcHVudW0gJj0gMHgwRjsJCQkJXAorCX0pCisKKy8qCisgKiBXZSB1c2UgSVJRMSBhcyB0aGUgSVBJCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfY3Jvc3NfY2FsbChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlnaWNfcmFpc2Vfc29mdGlycShtYXNrLCAxKTsKK30KKworLyoKKyAqIERvIG5vdGhpbmcgb24gTVBjb3JlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX2Nyb3NzX2NhbGxfZG9uZShjcHVtYXNrX3QgY2FsbG1hcCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDVkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVEVHUkFfU1lTVEVNX0gKKyNkZWZpbmUgX19NQUNIX1RFR1JBX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCXZvaWQgX19pb21lbSAqcmVzZXQgPSBJT19BRERSRVNTKFRFR1JBX0NMS19SRVNFVF9CQVNFICsgMHgwNCk7CisJdTMyIHJlZyA9IHJlYWRsKHJlc2V0KTsKKwlyZWcgfD0gMHgwNDsKKwl3cml0ZWwocmVnLCByZXNldCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0Y2NiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVEVHUkFfVElNRVhfSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzRkZDgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVEVHUkFfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fTUFDSF9URUdSQV9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorCisjaWYgZGVmaW5lZChDT05GSUdfVEVHUkFfREVCVUdfVUFSVEEpCisjZGVmaW5lIERFQlVHX1VBUlRfQkFTRSBURUdSQV9VQVJUQV9CQVNFCisjZWxpZiBkZWZpbmVkKENPTkZJR19URUdSQV9ERUJVR19VQVJUQikKKyNkZWZpbmUgREVCVUdfVUFSVF9CQVNFIFRFR1JBX1VBUlRCX0JBU0UKKyNlbGlmIGRlZmluZWQoQ09ORklHX1RFR1JBX0RFQlVHX1VBUlRDKQorI2RlZmluZSBERUJVR19VQVJUX0JBU0UgVEVHUkFfVUFSVENfQkFTRQorI2VsaWYgZGVmaW5lZChDT05GSUdfVEVHUkFfREVCVUdfVUFSVEQpCisjZGVmaW5lIERFQlVHX1VBUlRfQkFTRSBURUdSQV9VQVJURF9CQVNFCisjZWxpZiBkZWZpbmVkKENPTkZJR19URUdSQV9ERUJVR19VQVJURSkKKyNkZWZpbmUgREVCVUdfVUFSVF9CQVNFIFRFR1JBX1VBUlRFX0JBU0UKKyNlbHNlCisjZGVmaW5lIERFQlVHX1VBUlRfQkFTRSBOVUxMCisjZW5kaWYKKworc3RhdGljIHZvaWQgcHV0YyhpbnQgYykKK3sKKwl2b2xhdGlsZSB1OCAqdWFydCA9ICh2b2xhdGlsZSB1OCAqKURFQlVHX1VBUlRfQkFTRTsKKwlpbnQgc2hpZnQgPSAyOworCisJaWYgKHVhcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd2hpbGUgKCEodWFydFtVQVJUX0xTUiA8PCBzaGlmdF0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworCXVhcnRbVUFSVF9UWCA8PCBzaGlmdF0gPSBjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJdm9sYXRpbGUgdTggKnVhcnQgPSAodm9sYXRpbGUgdTggKilERUJVR19VQVJUX0JBU0U7CisJaW50IHNoaWZ0ID0gMjsKKworCWlmICh1YXJ0ID09IE5VTEwpCisJCXJldHVybjsKKworCXVhcnRbVUFSVF9MQ1IgPDwgc2hpZnRdIHw9IFVBUlRfTENSX0RMQUI7CisJdWFydFtVQVJUX0RMTCA8PCBzaGlmdF0gPSAweDc1OworCXVhcnRbVUFSVF9ETE0gPDwgc2hpZnRdID0gMHgwOworCXVhcnRbVUFSVF9MQ1IgPDwgc2hpZnRdID0gMzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKK3sKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3YTE0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCUVyaWsgR2lsbGluZyA8a29ua2Vyc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19NQUNIX1RFR1JBX1ZNQUxMT0NfSAorI2RlZmluZSBfX01BQ0hfVEVHUkFfVk1BTExPQ19ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAgMHhGRTAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW8uYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmUyYzVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pby5jCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXRlZ3JhL2lvLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoJRXJpayBHaWxsaW5nIDxrb25rZXJzQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgImJvYXJkLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdGVncmFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9IElPX1BQU0JfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oSU9fUFBTQl9QSFlTKSwKKwkJLmxlbmd0aCA9IElPX1BQU0JfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UsCisJfSwKKwl7CisJCS52aXJ0dWFsID0gSU9fQVBCX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKElPX0FQQl9QSFlTKSwKKwkJLmxlbmd0aCA9IElPX0FQQl9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LAorCXsKKwkJLnZpcnR1YWwgPSBJT19DUFVfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oSU9fQ1BVX1BIWVMpLAorCQkubGVuZ3RoID0gSU9fQ1BVX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFLAorCX0sCit9OworCit2b2lkIF9faW5pdCB0ZWdyYV9tYXBfY29tbW9uX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHRlZ3JhX2lvX2Rlc2MsIEFSUkFZX1NJWkUodGVncmFfaW9fZGVzYykpOworfQorCisvKgorICogSW50ZXJjZXB0IGlvcmVtYXAoKSByZXF1ZXN0cyBmb3IgYWRkcmVzc2VzIGluIG91ciBmaXhlZCBtYXBwaW5nIHJlZ2lvbnMuCisgKi8KK3ZvaWQgX19pb21lbSAqdGVncmFfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHAsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwl2b2lkIF9faW9tZW0gKnYgPSBJT19BRERSRVNTKHApOworCWlmICh2ID09IE5VTEwpCisJCXYgPSBfX2FybV9pb3JlbWFwKHAsIHNpemUsIHR5cGUpOworCXJldHVybiB2OworfQorRVhQT1JUX1NZTUJPTCh0ZWdyYV9pb3JlbWFwKTsKKwordm9pZCB0ZWdyYV9pb3VubWFwKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIHZpcnQgPSAodW5zaWduZWQgbG9uZylhZGRyOworCisJaWYgKHZpcnQgPj0gVk1BTExPQ19TVEFSVCAmJiB2aXJ0IDwgVk1BTExPQ19FTkQpCisJCV9faW91bm1hcChhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0wodGVncmFfaW91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmRiZTcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZ2ljLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+CisKKyNpbmNsdWRlICJib2FyZC5oIgorCit2b2lkIF9faW5pdCB0ZWdyYV9pbml0X2lycSh2b2lkKQoreworCWdpY19kaXN0X2luaXQoMCwgSU9fQUREUkVTUyhURUdSQV9BUk1fSU5UX0RJU1RfQkFTRSksIDI5KTsKKwlnaWNfY3B1X2luaXQoMCwgSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4MTAwKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2xvY2FsdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvbG9jYWx0aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWNhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2xvY2FsdGltZXIuYwpAQCAtMCwwICsxLDI1IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdGVncmEvbG9jYWx0aW1lci5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBBUk0gTHRkLgorICogIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NtcF90d2QuaD4KKyNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorCisvKgorICogU2V0dXAgdGhlIGxvY2FsIGNsb2NrIGV2ZW50cyBmb3IgYSBDUFUuCisgKi8KK3ZvaWQgX19jcHVpbml0IGxvY2FsX3RpbWVyX3NldHVwKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlldnQtPmlycSA9IElSUV9MT0NBTFRJTUVSOworCXR3ZF90aW1lcl9zZXR1cChldnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9waW5tdXguYyBiL2FyY2gvYXJtL21hY2gtdGVncmEvcGlubXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNhZTEwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvcGlubXV4LmMKQEAgLTAsMCArMSw5NDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXRlZ3JhL3Bpbm11eC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcGlubXV4Lmg+CisKKworI2RlZmluZSBURUdSQV9UUklfU1RBVEUoeCkJKDB4MTQgKyAoNCAqICh4KSkpCisjZGVmaW5lIFRFR1JBX1BQX01VWF9DVEwoeCkJKDB4ODAgKyAoNCAqICh4KSkpCisjZGVmaW5lIFRFR1JBX1BQX1BVX1BEKHgpCSgweGEwICsgKDQgKiAoeCkpKQorCisjZGVmaW5lIFJFR19BIDAKKyNkZWZpbmUgUkVHX0IgMQorI2RlZmluZSBSRUdfQyAyCisjZGVmaW5lIFJFR19EIDMKKyNkZWZpbmUgUkVHX0UgNAorI2RlZmluZSBSRUdfRiA1CisjZGVmaW5lIFJFR19HIDYKKworI2RlZmluZSBSRUdfTiAtMQorCisjZGVmaW5lIEhTTV9FTihyZWcpCSgoKHJlZykgPj4gMikgJiAweDEpCisjZGVmaW5lIFNDSE1UX0VOKHJlZykJKCgocmVnKSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgTFBNRChyZWcpCSgoKHJlZykgPj4gNCkgJiAweDMpCisjZGVmaW5lIERSVkROKHJlZykJKCgocmVnKSA+PiAxMikgJiAweDFmKQorI2RlZmluZSBEUlZVUChyZWcpCSgoKHJlZykgPj4gMjApICYgMHgxZikKKyNkZWZpbmUgU0xXUihyZWcpCSgoKHJlZykgPj4gMjgpICYgMHgzKQorI2RlZmluZSBTTFdGKHJlZykJKCgocmVnKSA+PiAzMCkgJiAweDMpCisKK3N0cnVjdCB0ZWdyYV9waW5ncm91cF9kZXNjIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBmdW5jc1s0XTsKKwlzOCB0cmlfcmVnOyAJLyogb2Zmc2V0IGludG8gdGhlIFRSSVNUQVRFX1JFR18qIHJlZ2lzdGVyIGJhbmsgKi8KKwlzOCB0cmlfYml0OyAJLyogb2Zmc2V0IGludG8gdGhlIFRSSVNUQVRFX1JFR18qIHJlZ2lzdGVyIGJpdCAqLworCXM4IG11eF9yZWc7CS8qIG9mZnNldCBpbnRvIHRoZSBQSU5fTVVYX0NUTF8qIHJlZ2lzdGVyIGJhbmsgKi8KKwlzOCBtdXhfYml0OwkvKiBvZmZzZXQgaW50byB0aGUgUElOX01VWF9DVExfKiByZWdpc3RlciBiaXQgKi8KKwlzOCBwdXBkX3JlZzsJLyogb2Zmc2V0IGludG8gdGhlIFBVTExfVVBET1dOX1JFR18qIHJlZ2lzdGVyIGJhbmsgKi8KKwlzOCBwdXBkX2JpdDsJLyogb2Zmc2V0IGludG8gdGhlIFBVTExfVVBET1dOX1JFR18qIHJlZ2lzdGVyIGJpdCAqLworfTsKKworI2RlZmluZSBQSU5HUk9VUChwZ19uYW1lLCBmMCwgZjEsIGYyLCBmMywJCQlcCisJCSB0cmlfciwgdHJpX2IsIG11eF9yLCBtdXhfYiwgcHVwZF9yLCBwdXBkX2IpCVwKKwlbVEVHUkFfUElOR1JPVVBfICMjIHBnX25hbWVdID0gewkJCVwKKwkJLm5hbWUgPSAjcGdfbmFtZSwJCQkJXAorCQkuZnVuY3MgPSB7CQkJCQlcCisJCQlURUdSQV9NVVhfICMjIGYwLAkJCVwKKwkJCVRFR1JBX01VWF8gIyMgZjEsCQkJXAorCQkJVEVHUkFfTVVYXyAjIyBmMiwJCQlcCisJCQlURUdSQV9NVVhfICMjIGYzLAkJCVwKKwkJfSwJCQkJCQlcCisJCS50cmlfcmVnID0gUkVHXyAjIyB0cmlfciwJCQlcCisJCS50cmlfYml0ID0gdHJpX2IsCQkJCVwKKwkJLm11eF9yZWcgPSBSRUdfICMjIG11eF9yLAkJCVwKKwkJLm11eF9iaXQgPSBtdXhfYiwJCQkJXAorCQkucHVwZF9yZWcgPSBSRUdfICMjIHB1cGRfciwJCQlcCisJCS5wdXBkX2JpdCA9IHB1cGRfYiwJCQkJXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9waW5ncm91cF9kZXNjIHBpbmdyb3Vwc1tURUdSQV9NQVhfUElOR1JPVVBdID0geworCVBJTkdST1VQKEFUQSwgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBSU1ZELCAgICAgICAgICBBLCAwLCAgQSwgMjQsIEEsIDApLAorCVBJTkdST1VQKEFUQiwgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICBBLCAxLCAgQSwgMTYsIEEsIDIpLAorCVBJTkdST1VQKEFUQywgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICBBLCAyLCAgQSwgMjIsIEEsIDQpLAorCVBJTkdST1VQKEFURCwgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBTRElPNCwgICAgICAgICBBLCAzLCAgQSwgMjAsIEEsIDYpLAorCVBJTkdST1VQKEFURSwgICBJREUsICAgICAgIE5BTkQsICAgICAgR01JLCAgICAgICBSU1ZELCAgICAgICAgICBCLCAyNSwgQSwgMTIsIEEsIDgpLAorCVBJTkdST1VQKENERVYxLCBPU0MsICAgICAgIFBMTEFfT1VULCAgUExMTV9PVVQxLCBBVURJT19TWU5DLCAgICBBLCA0LCAgQywgMiwgIEMsIDApLAorCVBJTkdST1VQKENERVYyLCBPU0MsICAgICAgIEFIQl9DTEssICAgQVBCX0NMSywgICBQTExQX09VVDQsICAgICBBLCA1LCAgQywgNCwgIEMsIDIpLAorCVBJTkdST1VQKENSVFAsICBDUlQsICAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBELCAxNCwgRywgMjAsIEIsIDI0KSwKKwlQSU5HUk9VUChDU1VTLCAgUExMQ19PVVQxLCBQTExQX09VVDIsIFBMTFBfT1VUMywgVklfU0VOU09SX0NMSywgQSwgNiwgIEMsIDYsICBELCAyNCksCisJUElOR1JPVVAoREFQMSwgIERBUDEsICAgICAgUlNWRCwgICAgICBHTUksICAgICAgIFNESU8yLCAgICAgICAgIEEsIDcsICBDLCAyMCwgQSwgMTApLAorCVBJTkdST1VQKERBUDIsICBEQVAyLCAgICAgIFRXQywgICAgICAgUlNWRCwgICAgICBHTUksICAgICAgICAgICBBLCA4LCAgQywgMjIsIEEsIDEyKSwKKwlQSU5HUk9VUChEQVAzLCAgREFQMywgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgQSwgOSwgIEMsIDI0LCBBLCAxNCksCisJUElOR1JPVVAoREFQNCwgIERBUDQsICAgICAgUlNWRCwgICAgICBHTUksICAgICAgIFJTVkQsICAgICAgICAgIEEsIDEwLCBDLCAyNiwgQSwgMTYpLAorCVBJTkdST1VQKEREQywgICBJMkMyLCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBCLCAzMSwgQywgMCwgIEUsIDI4KSwKKwlQSU5HUk9VUChEVEEsICAgUlNWRCwgICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRCwgICAgICAgICAgQSwgMTEsIEIsIDIwLCBBLCAxOCksCisJUElOR1JPVVAoRFRCLCAgIFJTVkQsICAgICAgUlNWRCwgICAgICBWSSwgICAgICAgIFNQSTEsICAgICAgICAgIEEsIDEyLCBCLCAyMiwgQSwgMjApLAorCVBJTkdST1VQKERUQywgICBSU1ZELCAgICAgIFJTVkQsICAgICAgVkksICAgICAgICBSU1ZELCAgICAgICAgICBBLCAxMywgQiwgMjYsIEEsIDIyKSwKKwlQSU5HUk9VUChEVEQsICAgUlNWRCwgICAgICBTRElPMiwgICAgIFZJLCAgICAgICAgUlNWRCwgICAgICAgICAgQSwgMTQsIEIsIDI4LCBBLCAyNCksCisJUElOR1JPVVAoRFRFLCAgIFJTVkQsICAgICAgUlNWRCwgICAgICBWSSwgICAgICAgIFNQSTEsICAgICAgICAgIEEsIDE1LCBCLCAzMCwgQSwgMjYpLAorCVBJTkdST1VQKERURiwgICBJMkMzLCAgICAgIFJTVkQsICAgICAgVkksICAgICAgICBSU1ZELCAgICAgICAgICBELCAxMiwgRywgMzAsIEEsIDI4KSwKKwlQSU5HUk9VUChHTUEsICAgVUFSVEUsICAgICBTUEkzLCAgICAgIEdNSSwgICAgICAgU0RJTzQsICAgICAgICAgQSwgMjgsIEIsIDAsICBFLCAyMCksCisJUElOR1JPVVAoR01CLCAgIElERSwgICAgICAgTkFORCwgICAgICBHTUksICAgICAgIEdNSV9JTlQsICAgICAgIEIsIDI5LCBDLCAyOCwgRSwgMjIpLAorCVBJTkdST1VQKEdNQywgICBVQVJURCwgICAgIFNQSTQsICAgICAgR01JLCAgICAgICBTRkxBU0gsICAgICAgICBBLCAyOSwgQiwgMiwgIEUsIDI0KSwKKwlQSU5HUk9VUChHTUQsICAgUlNWRCwgICAgICBOQU5ELCAgICAgIEdNSSwgICAgICAgU0ZMQVNILCAgICAgICAgQiwgMzAsIEMsIDMwLCBFLCAyNiksCisJUElOR1JPVVAoR01FLCAgIFJTVkQsICAgICAgREFQNSwgICAgICBHTUksICAgICAgIFNESU80LCAgICAgICAgIEIsIDAsICBELCAwLCAgQywgMjQpLAorCVBJTkdST1VQKEdQVSwgICBQV00sICAgICAgIFVBUlRBLCAgICAgR01JLCAgICAgICBSU1ZELCAgICAgICAgICBBLCAxNiwgRCwgNCwgIEIsIDIwKSwKKwlQSU5HUk9VUChHUFU3LCAgUlRDSywgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgRCwgMTEsIEcsIDI4LCBCLCA2KSwKKwlQSU5HUk9VUChHUFYsICAgUENJRSwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgQSwgMTcsIEQsIDIsICBBLCAzMCksCisJUElOR1JPVVAoSERJTlQsIEhETUksICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIEMsIDIzLCBCLCA0LCAgRCwgMjIpLAorCVBJTkdST1VQKEkyQ1AsICBJMkMsICAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBBLCAxOCwgQywgOCwgIEIsIDIpLAorCVBJTkdST1VQKElSUlgsICBVQVJUQSwgICAgIFVBUlRCLCAgICAgR01JLCAgICAgICBTUEk0LCAgICAgICAgICBBLCAyMCwgQywgMTgsIEMsIDIyKSwKKwlQSU5HUk9VUChJUlRYLCAgVUFSVEEsICAgICBVQVJUQiwgICAgIEdNSSwgICAgICAgU1BJNCwgICAgICAgICAgQSwgMTksIEMsIDE2LCBDLCAyMCksCisJUElOR1JPVVAoS0JDQSwgIEtCQywgICAgICAgTkFORCwgICAgICBTRElPMiwgICAgIEVNQ19URVNUMF9ETEwsIEEsIDIyLCBDLCAxMCwgQiwgOCksCisJUElOR1JPVVAoS0JDQiwgIEtCQywgICAgICAgTkFORCwgICAgICBTRElPMiwgICAgIE1JTywgICAgICAgICAgIEEsIDIxLCBDLCAxMiwgQiwgMTApLAorCVBJTkdST1VQKEtCQ0MsICBLQkMsICAgICAgIE5BTkQsICAgICAgVFJBQ0UsICAgICBFTUNfVEVTVDFfRExMLCBCLCAyNiwgQywgMTQsIEIsIDEyKSwKKwlQSU5HUk9VUChLQkNELCAgS0JDLCAgICAgICBOQU5ELCAgICAgIFNESU8yLCAgICAgTUlPLCAgICAgICAgICAgRCwgMTAsIEcsIDI2LCBCLCAxNCksCisJUElOR1JPVVAoS0JDRSwgIEtCQywgICAgICAgTkFORCwgICAgICBPV1IsICAgICAgIFJTVkQsICAgICAgICAgIEEsIDI2LCBBLCAyOCwgRSwgMiksCisJUElOR1JPVVAoS0JDRiwgIEtCQywgICAgICAgTkFORCwgICAgICBUUkFDRSwgICAgIE1JTywgICAgICAgICAgIEEsIDI3LCBBLCAyNiwgRSwgMCksCisJUElOR1JPVVAoTENTTiwgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIFJTVkQsICAgICAgICAgIEMsIDMxLCBFLCAxMiwgRCwgMjApLAorCVBJTkdST1VQKExEMCwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCAwLCAgRiwgMCwgIEQsIDEyKSwKKwlQSU5HUk9VUChMRDEsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgMSwgIEYsIDIsICBELCAxMiksCisJUElOR1JPVVAoTEQxMCwgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDEwLCBGLCAyMCwgRCwgMTIpLAorCVBJTkdST1VQKExEMTEsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCAxMSwgRiwgMjIsIEQsIDEyKSwKKwlQSU5HUk9VUChMRDEyLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgMTIsIEYsIDI0LCBELCAxMiksCisJUElOR1JPVVAoTEQxMywgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDEzLCBGLCAyNiwgRCwgMTIpLAorCVBJTkdST1VQKExEMTQsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCAxNCwgRiwgMjgsIEQsIDEyKSwKKwlQSU5HUk9VUChMRDE1LCAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgMTUsIEYsIDMwLCBELCAxMiksCisJUElOR1JPVVAoTEQxNiwgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDE2LCBHLCAwLCAgRCwgMTIpLAorCVBJTkdST1VQKExEMTcsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBDLCAxNywgRywgMiwgIEQsIDEyKSwKKwlQSU5HUk9VUChMRDIsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgMiwgIEYsIDQsICBELCAxMiksCisJUElOR1JPVVAoTEQzLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDMsICBGLCA2LCAgRCwgMTIpLAorCVBJTkdST1VQKExENCwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCA0LCAgRiwgOCwgIEQsIDEyKSwKKwlQSU5HUk9VUChMRDUsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgNSwgIEYsIDEwLCBELCAxMiksCisJUElOR1JPVVAoTEQ2LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDYsICBGLCAxMiwgRCwgMTIpLAorCVBJTkdST1VQKExENywgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCA3LCAgRiwgMTQsIEQsIDEyKSwKKwlQSU5HUk9VUChMRDgsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFhJTywgICAgICAgUlNWRCwgICAgICAgICAgQywgOCwgIEYsIDE2LCBELCAxMiksCisJUElOR1JPVVAoTEQ5LCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDksICBGLCAxOCwgRCwgMTIpLAorCVBJTkdST1VQKExEQywgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBDLCAzMCwgRSwgMTQsIEQsIDIwKSwKKwlQSU5HUk9VUChMREksICAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgRCwgNiwgIEcsIDE2LCBELCAxOCksCisJUElOR1JPVVAoTEhQMCwgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIEMsIDE4LCBHLCAxMCwgRCwgMTYpLAorCVBJTkdST1VQKExIUDEsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBDLCAxOSwgRywgNCwgIEQsIDE0KSwKKwlQSU5HUk9VUChMSFAyLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgQywgMjAsIEcsIDYsICBELCAxNCksCisJUElOR1JPVVAoTEhTLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEQsIDcsICBFLCAyMiwgRCwgMjIpLAorCVBJTkdST1VQKExNMCwgICBESVNQTEFZQSwgIERJU1BMQVlCLCAgU1BJMywgICAgICBSU1ZELCAgICAgICAgICBDLCAyNCwgRSwgMjYsIEQsIDIyKSwKKwlQSU5HUk9VUChMTTEsICAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQsICAgICAgQ1JULCAgICAgICAgICAgQywgMjUsIEUsIDI4LCBELCAyMiksCisJUElOR1JPVVAoTFBQLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIEQsIDgsICBHLCAxNCwgRCwgMTgpLAorCVBJTkdST1VQKExQVzAsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgU1BJMywgICAgICBIRE1JLCAgICAgICAgICBELCAzLCAgRSwgMCwgIEQsIDIwKSwKKwlQSU5HUk9VUChMUFcxLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgRCwgNCwgIEUsIDIsICBELCAyMCksCisJUElOR1JPVVAoTFBXMiwgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIEQsIDUsICBFLCA0LCAgRCwgMjApLAorCVBJTkdST1VQKExTQzAsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgWElPLCAgICAgICBSU1ZELCAgICAgICAgICBDLCAyNywgRSwgMTgsIEQsIDIyKSwKKwlQSU5HUk9VUChMU0MxLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFNQSTMsICAgICAgSERNSSwgICAgICAgICAgQywgMjgsIEUsIDIwLCBELCAyMCksCisJUElOR1JPVVAoTFNDSywgIERJU1BMQVlBLCAgRElTUExBWUIsICBTUEkzLCAgICAgIEhETUksICAgICAgICAgIEMsIDI5LCBFLCAxNiwgRCwgMjApLAorCVBJTkdST1VQKExTREEsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgU1BJMywgICAgICBIRE1JLCAgICAgICAgICBELCAxLCAgRSwgOCwgIEQsIDIwKSwKKwlQSU5HUk9VUChMU0RJLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFNQSTMsICAgICAgUlNWRCwgICAgICAgICAgRCwgMiwgIEUsIDYsICBELCAyMCksCisJUElOR1JPVVAoTFNQSSwgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIEhETUksICAgICAgICAgIEQsIDAsICBFLCAxMCwgRCwgMjIpLAorCVBJTkdST1VQKExWUDAsICBESVNQTEFZQSwgIERJU1BMQVlCLCAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBDLCAyMSwgRSwgMzAsIEQsIDIyKSwKKwlQSU5HUk9VUChMVlAxLCAgRElTUExBWUEsICBESVNQTEFZQiwgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgQywgMjIsIEcsIDgsICBELCAxNiksCisJUElOR1JPVVAoTFZTLCAgIERJU1BMQVlBLCAgRElTUExBWUIsICBYSU8sICAgICAgIFJTVkQsICAgICAgICAgIEMsIDI2LCBFLCAyNCwgRCwgMjIpLAorCVBJTkdST1VQKE9XQywgICBPV1IsICAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBBLCAzMSwgQiwgOCwgIEUsIDMwKSwKKwlQSU5HUk9VUChQTUMsICAgUFdSX09OLCAgICBQV1JfSU5UUiwgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgQSwgMjMsIEcsIDE4LCBOLCAtMSksCisJUElOR1JPVVAoUFRBLCAgIEkyQzIsICAgICAgSERNSSwgICAgICBHTUksICAgICAgIFJTVkQsICAgICAgICAgIEEsIDI0LCBHLCAyMiwgQiwgNCksCisJUElOR1JPVVAoUk0sICAgIEkyQywgICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIEEsIDI1LCBBLCAxNCwgQiwgMCksCisJUElOR1JPVVAoU0RCLCAgIFVBUlRBLCAgICAgUFdNLCAgICAgICBTRElPMywgICAgIFNQSTIsICAgICAgICAgIEQsIDE1LCBELCAxMCwgTiwgLTEpLAorCVBJTkdST1VQKFNEQywgICBQV00sICAgICAgIFRXQywgICAgICAgU0RJTzMsICAgICBTUEkzLCAgICAgICAgICBCLCAxLCAgRCwgMTIsIEQsIDI4KSwKKwlQSU5HUk9VUChTREQsICAgVUFSVEEsICAgICBQV00sICAgICAgIFNESU8zLCAgICAgU1BJMywgICAgICAgICAgQiwgMiwgIEQsIDE0LCBELCAzMCksCisJUElOR1JPVVAoU0RJTzEsIFNESU8xLCAgICAgUlNWRCwgICAgICBVQVJURSwgICAgIFVBUlRBLCAgICAgICAgIEEsIDMwLCBBLCAzMCwgRSwgMTgpLAorCVBJTkdST1VQKFNMWEEsICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICBCLCAzLCAgQiwgNiwgIEIsIDIyKSwKKwlQSU5HUk9VUChTTFhDLCAgU1BESUYsICAgICBTUEk0LCAgICAgIFNESU8zLCAgICAgU1BJMiwgICAgICAgICAgQiwgNSwgIEIsIDEwLCBCLCAyNiksCisJUElOR1JPVVAoU0xYRCwgIFNQRElGLCAgICAgU1BJNCwgICAgICBTRElPMywgICAgIFNQSTIsICAgICAgICAgIEIsIDYsICBCLCAxMiwgQiwgMjgpLAorCVBJTkdST1VQKFNMWEssICBQQ0lFLCAgICAgIFNQSTQsICAgICAgU0RJTzMsICAgICBTUEkyLCAgICAgICAgICBCLCA3LCAgQiwgMTQsIEIsIDMwKSwKKwlQSU5HUk9VUChTUERJLCAgU1BESUYsICAgICBSU1ZELCAgICAgIEkyQywgICAgICAgU0RJTzIsICAgICAgICAgQiwgOCwgIEQsIDgsICBCLCAxNiksCisJUElOR1JPVVAoU1BETywgIFNQRElGLCAgICAgUlNWRCwgICAgICBJMkMsICAgICAgIFNESU8yLCAgICAgICAgIEIsIDksICBELCA2LCAgQiwgMTgpLAorCVBJTkdST1VQKFNQSUEsICBTUEkxLCAgICAgIFNQSTIsICAgICAgU1BJMywgICAgICBHTUksICAgICAgICAgICBCLCAxMCwgRCwgMzAsIEMsIDQpLAorCVBJTkdST1VQKFNQSUIsICBTUEkxLCAgICAgIFNQSTIsICAgICAgU1BJMywgICAgICBHTUksICAgICAgICAgICBCLCAxMSwgRCwgMjgsIEMsIDYpLAorCVBJTkdST1VQKFNQSUMsICBTUEkxLCAgICAgIFNQSTIsICAgICAgU1BJMywgICAgICBHTUksICAgICAgICAgICBCLCAxMiwgRCwgMjYsIEMsIDgpLAorCVBJTkdST1VQKFNQSUQsICBTUEkyLCAgICAgIFNQSTEsICAgICAgU1BJMl9BTFQsICBHTUksICAgICAgICAgICBCLCAxMywgRCwgMjQsIEMsIDEwKSwKKwlQSU5HUk9VUChTUElFLCAgU1BJMiwgICAgICBTUEkxLCAgICAgIFNQSTJfQUxULCAgR01JLCAgICAgICAgICAgQiwgMTQsIEQsIDIyLCBDLCAxMiksCisJUElOR1JPVVAoU1BJRiwgIFNQSTMsICAgICAgU1BJMSwgICAgICBTUEkyLCAgICAgIFJTVkQsICAgICAgICAgIEIsIDE1LCBELCAyMCwgQywgMTQpLAorCVBJTkdST1VQKFNQSUcsICBTUEkzLCAgICAgIFNQSTIsICAgICAgU1BJMl9BTFQsICBJMkMsICAgICAgICAgICBCLCAxNiwgRCwgMTgsIEMsIDE2KSwKKwlQSU5HUk9VUChTUElILCAgU1BJMywgICAgICBTUEkyLCAgICAgIFNQSTJfQUxULCAgSTJDLCAgICAgICAgICAgQiwgMTcsIEQsIDE2LCBDLCAxOCksCisJUElOR1JPVVAoVUFBLCAgIFNQSTMsICAgICAgTUlQSV9IUywgICBVQVJUQSwgICAgIFVMUEksICAgICAgICAgIEIsIDE4LCBBLCAwLCAgRCwgMCksCisJUElOR1JPVVAoVUFCLCAgIFNQSTIsICAgICAgTUlQSV9IUywgICBVQVJUQSwgICAgIFVMUEksICAgICAgICAgIEIsIDE5LCBBLCAyLCAgRCwgMiksCisJUElOR1JPVVAoVUFDLCAgIE9XUiwgICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIEIsIDIwLCBBLCA0LCAgRCwgNCksCisJUElOR1JPVVAoVUFELCAgIElSREEsICAgICAgU1BESUYsICAgICBVQVJUQSwgICAgIFNQSTQsICAgICAgICAgIEIsIDIxLCBBLCA2LCAgRCwgNiksCisJUElOR1JPVVAoVUNBLCAgIFVBUlRDLCAgICAgUlNWRCwgICAgICBHTUksICAgICAgIFJTVkQsICAgICAgICAgIEIsIDIyLCBCLCAxNiwgRCwgOCksCisJUElOR1JPVVAoVUNCLCAgIFVBUlRDLCAgICAgUFdNLCAgICAgICBHTUksICAgICAgIFJTVkQsICAgICAgICAgIEIsIDIzLCBCLCAxOCwgRCwgMTApLAorCVBJTkdST1VQKFVEQSwgICBTUEkxLCAgICAgIFJTVkQsICAgICAgVUFSVEQsICAgICBVTFBJLCAgICAgICAgICBELCAxMywgQSwgOCwgIEUsIDE2KSwKKwkvKiB0aGVzZSBwaW4gZ3JvdXBzIG9ubHkgaGF2ZSBwdWxsdXAgYW5kIHB1bGwgZG93biBjb250cm9sICovCisJUElOR1JPVVAoQ0szMiwgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBFLCAxNCksCisJUElOR1JPVVAoRERSQywgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBELCAyNiksCisJUElOR1JPVVAoUE1DQSwgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBFLCA0KSwKKwlQSU5HUk9VUChQTUNCLCAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICAgICAgTiwgLTEsICBOLCAtMSwgIEUsIDYpLAorCVBJTkdST1VQKFBNQ0MsICBSU1ZELCAgICAgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgICAgICBOLCAtMSwgIE4sIC0xLCAgRSwgOCksCisJUElOR1JPVVAoUE1DRCwgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBFLCAxMCksCisJUElOR1JPVVAoUE1DRSwgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBFLCAxMiksCisJUElOR1JPVVAoWE0yQywgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBDLCAzMCksCisJUElOR1JPVVAoWE0yRCwgIFJTVkQsICAgICAgUlNWRCwgICAgICBSU1ZELCAgICAgIFJTVkQsICAgICAgICAgIE4sIC0xLCAgTiwgLTEsICBDLCAyOCksCit9OworCitzdGF0aWMgY2hhciAqdGVncmFfbXV4X25hbWVzW1RFR1JBX01BWF9NVVhdID0geworCVtURUdSQV9NVVhfQUhCX0NMS10gPSAiQUhCX0NMSyIsCisJW1RFR1JBX01VWF9BUEJfQ0xLXSA9ICJBUEJfQ0xLIiwKKwlbVEVHUkFfTVVYX0FVRElPX1NZTkNdID0gIkFVRElPX1NZTkMiLAorCVtURUdSQV9NVVhfQ1JUXSA9ICJDUlQiLAorCVtURUdSQV9NVVhfREFQMV0gPSAiREFQMSIsCisJW1RFR1JBX01VWF9EQVAyXSA9ICJEQVAyIiwKKwlbVEVHUkFfTVVYX0RBUDNdID0gIkRBUDMiLAorCVtURUdSQV9NVVhfREFQNF0gPSAiREFQNCIsCisJW1RFR1JBX01VWF9EQVA1XSA9ICJEQVA1IiwKKwlbVEVHUkFfTVVYX0RJU1BMQVlBXSA9ICJESVNQTEFZQSIsCisJW1RFR1JBX01VWF9ESVNQTEFZQl0gPSAiRElTUExBWUIiLAorCVtURUdSQV9NVVhfRU1DX1RFU1QwX0RMTF0gPSAiRU1DX1RFU1QwX0RMTCIsCisJW1RFR1JBX01VWF9FTUNfVEVTVDFfRExMXSA9ICJFTUNfVEVTVDFfRExMIiwKKwlbVEVHUkFfTVVYX0dNSV0gPSAiR01JIiwKKwlbVEVHUkFfTVVYX0dNSV9JTlRdID0gIkdNSV9JTlQiLAorCVtURUdSQV9NVVhfSERNSV0gPSAiSERNSSIsCisJW1RFR1JBX01VWF9JMkNdID0gIkkyQyIsCisJW1RFR1JBX01VWF9JMkMyXSA9ICJJMkMyIiwKKwlbVEVHUkFfTVVYX0kyQzNdID0gIkkyQzMiLAorCVtURUdSQV9NVVhfSURFXSA9ICJJREUiLAorCVtURUdSQV9NVVhfSVJEQV0gPSAiSVJEQSIsCisJW1RFR1JBX01VWF9LQkNdID0gIktCQyIsCisJW1RFR1JBX01VWF9NSU9dID0gIk1JTyIsCisJW1RFR1JBX01VWF9NSVBJX0hTXSA9ICJNSVBJX0hTIiwKKwlbVEVHUkFfTVVYX05BTkRdID0gIk5BTkQiLAorCVtURUdSQV9NVVhfT1NDXSA9ICJPU0MiLAorCVtURUdSQV9NVVhfT1dSXSA9ICJPV1IiLAorCVtURUdSQV9NVVhfUENJRV0gPSAiUENJRSIsCisJW1RFR1JBX01VWF9QTExBX09VVF0gPSAiUExMQV9PVVQiLAorCVtURUdSQV9NVVhfUExMQ19PVVQxXSA9ICJQTExDX09VVDEiLAorCVtURUdSQV9NVVhfUExMTV9PVVQxXSA9ICJQTExNX09VVDEiLAorCVtURUdSQV9NVVhfUExMUF9PVVQyXSA9ICJQTExQX09VVDIiLAorCVtURUdSQV9NVVhfUExMUF9PVVQzXSA9ICJQTExQX09VVDMiLAorCVtURUdSQV9NVVhfUExMUF9PVVQ0XSA9ICJQTExQX09VVDQiLAorCVtURUdSQV9NVVhfUFdNXSA9ICJQV00iLAorCVtURUdSQV9NVVhfUFdSX0lOVFJdID0gIlBXUl9JTlRSIiwKKwlbVEVHUkFfTVVYX1BXUl9PTl0gPSAiUFdSX09OIiwKKwlbVEVHUkFfTVVYX1JUQ0tdID0gIlJUQ0siLAorCVtURUdSQV9NVVhfU0RJTzFdID0gIlNESU8xIiwKKwlbVEVHUkFfTVVYX1NESU8yXSA9ICJTRElPMiIsCisJW1RFR1JBX01VWF9TRElPM10gPSAiU0RJTzMiLAorCVtURUdSQV9NVVhfU0RJTzRdID0gIlNESU80IiwKKwlbVEVHUkFfTVVYX1NGTEFTSF0gPSAiU0ZMQVNIIiwKKwlbVEVHUkFfTVVYX1NQRElGXSA9ICJTUERJRiIsCisJW1RFR1JBX01VWF9TUEkxXSA9ICJTUEkxIiwKKwlbVEVHUkFfTVVYX1NQSTJdID0gIlNQSTIiLAorCVtURUdSQV9NVVhfU1BJMl9BTFRdID0gIlNQSTJfQUxUIiwKKwlbVEVHUkFfTVVYX1NQSTNdID0gIlNQSTMiLAorCVtURUdSQV9NVVhfU1BJNF0gPSAiU1BJNCIsCisJW1RFR1JBX01VWF9UUkFDRV0gPSAiVFJBQ0UiLAorCVtURUdSQV9NVVhfVFdDXSA9ICJUV0MiLAorCVtURUdSQV9NVVhfVUFSVEFdID0gIlVBUlRBIiwKKwlbVEVHUkFfTVVYX1VBUlRCXSA9ICJVQVJUQiIsCisJW1RFR1JBX01VWF9VQVJUQ10gPSAiVUFSVEMiLAorCVtURUdSQV9NVVhfVUFSVERdID0gIlVBUlREIiwKKwlbVEVHUkFfTVVYX1VBUlRFXSA9ICJVQVJURSIsCisJW1RFR1JBX01VWF9VTFBJXSA9ICJVTFBJIiwKKwlbVEVHUkFfTVVYX1ZJXSA9ICJWSSIsCisJW1RFR1JBX01VWF9WSV9TRU5TT1JfQ0xLXSA9ICJWSV9TRU5TT1JfQ0xLIiwKKwlbVEVHUkFfTVVYX1hJT10gPSAiWElPIiwKK307CisKK3N0cnVjdCB0ZWdyYV9kcml2ZV9waW5ncm91cF9kZXNjIHsKKwljb25zdCBjaGFyICpuYW1lOworCXMxNiByZWc7Cit9OworCisjZGVmaW5lIERSSVZFX1BJTkdST1VQKHBnX25hbWUsIHIpCQkJCVwKKwlbVEVHUkFfRFJJVkVfUElOR1JPVVBfICMjIHBnX25hbWVdID0gewkJCVwKKwkJLm5hbWUgPSAjcGdfbmFtZSwJCQkJXAorCQkucmVnID0gcgkJCQkJXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9kcml2ZV9waW5ncm91cF9kZXNjIGRyaXZlX3Bpbmdyb3Vwc1tURUdSQV9NQVhfUElOR1JPVVBdID0geworCURSSVZFX1BJTkdST1VQKEFPMSwJCTB4ODY4KSwKKwlEUklWRV9QSU5HUk9VUChBTzIsCQkweDg2YyksCisJRFJJVkVfUElOR1JPVVAoQVQxLAkJMHg4NzApLAorCURSSVZFX1BJTkdST1VQKEFUMiwJCTB4ODc0KSwKKwlEUklWRV9QSU5HUk9VUChDREVWMSwJCTB4ODc4KSwKKwlEUklWRV9QSU5HUk9VUChDREVWMiwJCTB4ODdjKSwKKwlEUklWRV9QSU5HUk9VUChDU1VTLAkJMHg4ODApLAorCURSSVZFX1BJTkdST1VQKERBUDEsCQkweDg4NCksCisJRFJJVkVfUElOR1JPVVAoREFQMiwJCTB4ODg4KSwKKwlEUklWRV9QSU5HUk9VUChEQVAzLAkJMHg4OGMpLAorCURSSVZFX1BJTkdST1VQKERBUDQsCQkweDg5MCksCisJRFJJVkVfUElOR1JPVVAoREJHLAkJMHg4OTQpLAorCURSSVZFX1BJTkdST1VQKExDRDEsCQkweDg5OCksCisJRFJJVkVfUElOR1JPVVAoTENEMiwJCTB4ODljKSwKKwlEUklWRV9QSU5HUk9VUChTRE1NQzIsCTB4OGEwKSwKKwlEUklWRV9QSU5HUk9VUChTRE1NQzMsCTB4OGE0KSwKKwlEUklWRV9QSU5HUk9VUChTUEksCQkweDhhOCksCisJRFJJVkVfUElOR1JPVVAoVUFBLAkJMHg4YWMpLAorCURSSVZFX1BJTkdST1VQKFVBQiwJCTB4OGIwKSwKKwlEUklWRV9QSU5HUk9VUChVQVJUMiwJCTB4OGI0KSwKKwlEUklWRV9QSU5HUk9VUChVQVJUMywJCTB4OGI4KSwKKwlEUklWRV9QSU5HUk9VUChWSTEsCQkweDhiYyksCisJRFJJVkVfUElOR1JPVVAoVkkyLAkJMHg4YzApLAorCURSSVZFX1BJTkdST1VQKFhNMkEsCQkweDhjNCksCisJRFJJVkVfUElOR1JPVVAoWE0yQywJCTB4OGM4KSwKKwlEUklWRV9QSU5HUk9VUChYTTJELAkJMHg4Y2MpLAorCURSSVZFX1BJTkdST1VQKFhNMkNMSywJMHg4ZDApLAorCURSSVZFX1BJTkdST1VQKE1FTUNPTVAsCTB4OGQ0KSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZWdyYV9kcml2ZV9uYW1lc1tURUdSQV9NQVhfRFJJVkVdID0geworCVtURUdSQV9EUklWRV9ESVZfOF0gPSAiRElWXzgiLAorCVtURUdSQV9EUklWRV9ESVZfNF0gPSAiRElWXzQiLAorCVtURUdSQV9EUklWRV9ESVZfMl0gPSAiRElWXzIiLAorCVtURUdSQV9EUklWRV9ESVZfMV0gPSAiRElWXzEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRlZ3JhX3NsZXdfbmFtZXNbVEVHUkFfTUFYX1NMRVddID0geworCVtURUdSQV9TTEVXX0ZBU1RFU1RdID0gIkZBU1RFU1QiLAorCVtURUdSQV9TTEVXX0ZBU1RdID0gIkZBU1QiLAorCVtURUdSQV9TTEVXX1NMT1ddID0gIlNMT1ciLAorCVtURUdSQV9TTEVXX1NMT1dFU1RdID0gIlNMT1dFU1QiLAorfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhtdXhfbG9jayk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwaW5ncm91cF9uYW1lKGVudW0gdGVncmFfcGluZ3JvdXAgcGcpCit7CisJaWYgKHBnIDwgMCB8fCBwZyA+PSAgVEVHUkFfTUFYX1BJTkdST1VQKQorCQlyZXR1cm4gIjxVTktOT1dOPiI7CisKKwlyZXR1cm4gcGluZ3JvdXBzW3BnXS5uYW1lOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZnVuY19uYW1lKGVudW0gdGVncmFfbXV4X2Z1bmMgZnVuYykKK3sKKwlpZiAoZnVuYyA9PSBURUdSQV9NVVhfUlNWRDEpCisJCXJldHVybiAiUlNWRDEiOworCisJaWYgKGZ1bmMgPT0gVEVHUkFfTVVYX1JTVkQyKQorCQlyZXR1cm4gIlJTVkQyIjsKKworCWlmIChmdW5jID09IFRFR1JBX01VWF9SU1ZEMykKKwkJcmV0dXJuICJSU1ZEMyI7CisKKwlpZiAoZnVuYyA9PSBURUdSQV9NVVhfUlNWRDQpCisJCXJldHVybiAiUlNWRDQiOworCisJaWYgKGZ1bmMgPT0gVEVHUkFfTVVYX05PTkUpCisJCXJldHVybiAiTk9ORSI7CisKKwlpZiAoZnVuYyA8IDAgfHwgZnVuYyA+PSAgVEVHUkFfTUFYX01VWCkKKwkJcmV0dXJuICI8VU5LTk9XTj4iOworCisJcmV0dXJuIHRlZ3JhX211eF9uYW1lc1tmdW5jXTsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqdHJpX25hbWUodW5zaWduZWQgbG9uZyB2YWwpCit7CisJcmV0dXJuIHZhbCA/ICJUUklTVEFURSIgOiAiTk9STUFMIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnB1cGRfbmFtZSh1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICJOT1JNQUwiOworCisJY2FzZSAxOgorCQlyZXR1cm4gIlBVTExfRE9XTiI7CisKKwljYXNlIDI6CisJCXJldHVybiAiUFVMTF9VUCI7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlJTVkQiOworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGdfcmVhZGwodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIHJlYWRsKElPX1RPX1ZJUlQoVEVHUkFfQVBCX01JU0NfQkFTRSArIG9mZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsdWUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXdyaXRlbCh2YWx1ZSwgSU9fVE9fVklSVChURUdSQV9BUEJfTUlTQ19CQVNFICsgb2Zmc2V0KSk7Cit9CisKK2ludCB0ZWdyYV9waW5tdXhfc2V0X2Z1bmMoZW51bSB0ZWdyYV9waW5ncm91cCBwZywgZW51bSB0ZWdyYV9tdXhfZnVuYyBmdW5jKQoreworCWludCBtdXggPSAtMTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHJlZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHBnIDwgMCB8fCBwZyA+PSAgVEVHUkFfTUFYX1BJTkdST1VQKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmIChwaW5ncm91cHNbcGddLm11eF9yZWcgPT0gUkVHX04pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZ1bmMgPCAwKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmIChmdW5jICYgVEVHUkFfTVVYX1JTVkQpIHsKKwkJbXV4ID0gZnVuYyAmIDB4MzsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAocGluZ3JvdXBzW3BnXS5mdW5jc1tpXSA9PSBmdW5jKSB7CisJCQkJbXV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtdXggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoVEVHUkFfUFBfTVVYX0NUTChwaW5ncm91cHNbcGddLm11eF9yZWcpKTsKKwlyZWcgJj0gfigweDMgPDwgcGluZ3JvdXBzW3BnXS5tdXhfYml0KTsKKwlyZWcgfD0gbXV4IDw8IHBpbmdyb3Vwc1twZ10ubXV4X2JpdDsKKwlwZ193cml0ZWwocmVnLCBURUdSQV9QUF9NVVhfQ1RMKHBpbmdyb3Vwc1twZ10ubXV4X3JlZykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGVncmFfcGlubXV4X3NldF90cmlzdGF0ZShlbnVtIHRlZ3JhX3Bpbmdyb3VwIHBnLAorCWVudW0gdGVncmFfdHJpc3RhdGUgdHJpc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChwZyA8IDAgfHwgcGcgPj0gIFRFR1JBX01BWF9QSU5HUk9VUCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlpZiAocGluZ3JvdXBzW3BnXS50cmlfcmVnID09IFJFR19OKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoVEVHUkFfVFJJX1NUQVRFKHBpbmdyb3Vwc1twZ10udHJpX3JlZykpOworCXJlZyAmPSB+KDB4MSA8PCBwaW5ncm91cHNbcGddLnRyaV9iaXQpOworCWlmICh0cmlzdGF0ZSkKKwkJcmVnIHw9IDEgPDwgcGluZ3JvdXBzW3BnXS50cmlfYml0OworCXBnX3dyaXRlbChyZWcsIFRFR1JBX1RSSV9TVEFURShwaW5ncm91cHNbcGddLnRyaV9yZWcpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRlZ3JhX3Bpbm11eF9zZXRfcHVsbHVwZG93bihlbnVtIHRlZ3JhX3Bpbmdyb3VwIHBnLAorCWVudW0gdGVncmFfcHVsbHVwZG93biBwdXBkKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAocGcgPCAwIHx8IHBnID49ICBURUdSQV9NQVhfUElOR1JPVVApCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKHBpbmdyb3Vwc1twZ10ucHVwZF9yZWcgPT0gUkVHX04pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHB1cGQgIT0gVEVHUkFfUFVQRF9OT1JNQUwgJiYKKwkgICAgcHVwZCAhPSBURUdSQV9QVVBEX1BVTExfRE9XTiAmJgorCSAgICBwdXBkICE9IFRFR1JBX1BVUERfUFVMTF9VUCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoVEVHUkFfUFBfUFVfUEQocGluZ3JvdXBzW3BnXS5wdXBkX3JlZykpOworCXJlZyAmPSB+KDB4MyA8PCBwaW5ncm91cHNbcGddLnB1cGRfYml0KTsKKwlyZWcgfD0gcHVwZCA8PCBwaW5ncm91cHNbcGddLnB1cGRfYml0OworCXBnX3dyaXRlbChyZWcsIFRFR1JBX1BQX1BVX1BEKHBpbmdyb3Vwc1twZ10ucHVwZF9yZWcpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0ZWdyYV9waW5tdXhfY29uZmlnX3Bpbmdyb3VwKGVudW0gdGVncmFfcGluZ3JvdXAgcGluZ3JvdXAsCisJCQkJIGVudW0gdGVncmFfbXV4X2Z1bmMgZnVuYywKKwkJCQkgZW51bSB0ZWdyYV9wdWxsdXBkb3duIHB1cGQsCisJCQkJIGVudW0gdGVncmFfdHJpc3RhdGUgdHJpc3RhdGUpCit7CisJaW50IGVycjsKKworCWlmIChwaW5ncm91cHNbcGluZ3JvdXBdLm11eF9yZWcgIT0gUkVHX04pIHsKKwkJZXJyID0gdGVncmFfcGlubXV4X3NldF9mdW5jKHBpbmdyb3VwLCBmdW5jKTsKKwkJaWYgKGVyciA8IDApCisJCQlwcl9lcnIoInBpbm11eDogY2FuJ3Qgc2V0IHBpbmdyb3VwICVzIGZ1bmMgdG8gJXM6ICVkXG4iLAorCQkJICAgICAgIHBpbmdyb3VwX25hbWUocGluZ3JvdXApLCBmdW5jX25hbWUoZnVuYyksIGVycik7CisJfQorCisJaWYgKHBpbmdyb3Vwc1twaW5ncm91cF0ucHVwZF9yZWcgIT0gUkVHX04pIHsKKwkJZXJyID0gdGVncmFfcGlubXV4X3NldF9wdWxsdXBkb3duKHBpbmdyb3VwLCBwdXBkKTsKKwkJaWYgKGVyciA8IDApCisJCQlwcl9lcnIoInBpbm11eDogY2FuJ3Qgc2V0IHBpbmdyb3VwICVzIHB1bGx1cGRvd24gdG8gJXM6ICVkXG4iLAorCQkJICAgICAgIHBpbmdyb3VwX25hbWUocGluZ3JvdXApLCBwdXBkX25hbWUocHVwZCksIGVycik7CisJfQorCisJaWYgKHBpbmdyb3Vwc1twaW5ncm91cF0udHJpX3JlZyAhPSBSRUdfTikgeworCQllcnIgPSB0ZWdyYV9waW5tdXhfc2V0X3RyaXN0YXRlKHBpbmdyb3VwLCB0cmlzdGF0ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJcHJfZXJyKCJwaW5tdXg6IGNhbid0IHNldCBwaW5ncm91cCAlcyB0cmlzdGF0ZSB0byAlczogJWRcbiIsCisJCQkgICAgICAgcGluZ3JvdXBfbmFtZShwaW5ncm91cCksIHRyaV9uYW1lKGZ1bmMpLCBlcnIpOworCX0KK30KKworCisKK3ZvaWQgdGVncmFfcGlubXV4X2NvbmZpZ190YWJsZShzdHJ1Y3QgdGVncmFfcGluZ3JvdXBfY29uZmlnICpjb25maWcsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXRlZ3JhX3Bpbm11eF9jb25maWdfcGluZ3JvdXAoY29uZmlnW2ldLnBpbmdyb3VwLAorCQkJCQkgICAgIGNvbmZpZ1tpXS5mdW5jLAorCQkJCQkgICAgIGNvbmZpZ1tpXS5wdXBkLAorCQkJCQkgICAgIGNvbmZpZ1tpXS50cmlzdGF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkcml2ZV9waW5tdXhfbmFtZShlbnVtIHRlZ3JhX2RyaXZlX3Bpbmdyb3VwIHBnKQoreworCWlmIChwZyA8IDAgfHwgcGcgPj0gIFRFR1JBX01BWF9EUklWRV9QSU5HUk9VUCkKKwkJcmV0dXJuICI8VU5LTk9XTj4iOworCisJcmV0dXJuIGRyaXZlX3Bpbmdyb3Vwc1twZ10ubmFtZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmVuYWJsZV9uYW1lKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXJldHVybiB2YWwgPyAiRU5BQkxFIiA6ICJESVNBQkxFIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmRyaXZlX25hbWUodW5zaWduZWQgbG9uZyB2YWwpCit7CisJaWYgKHZhbCA+PSBURUdSQV9NQVhfRFJJVkUpCisJCXJldHVybiAiPFVOS05PV04+IjsKKworCXJldHVybiB0ZWdyYV9kcml2ZV9uYW1lc1t2YWxdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2xld19uYW1lKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWlmICh2YWwgPj0gVEVHUkFfTUFYX1NMRVcpCisJCXJldHVybiAiPFVOS05PV04+IjsKKworCXJldHVybiB0ZWdyYV9zbGV3X25hbWVzW3ZhbF07Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZHJpdmVfcGlubXV4X3NldF9oc20oZW51bSB0ZWdyYV9kcml2ZV9waW5ncm91cCBwZywKKwllbnVtIHRlZ3JhX2hzbSBoc20pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCWlmIChwZyA8IDAgfHwgcGcgPj0gIFRFR1JBX01BWF9EUklWRV9QSU5HUk9VUCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlpZiAoaHNtICE9IFRFR1JBX0hTTV9FTkFCTEUgJiYgaHNtICE9IFRFR1JBX0hTTV9ESVNBQkxFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoZHJpdmVfcGluZ3JvdXBzW3BnXS5yZWcpOworCWlmIChoc20gPT0gVEVHUkFfSFNNX0VOQUJMRSkKKwkJcmVnIHw9ICgxIDw8IDIpOworCWVsc2UKKwkJcmVnICY9IH4oMSA8PCAyKTsKKwlwZ193cml0ZWwocmVnLCBkcml2ZV9waW5ncm91cHNbcGddLnJlZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZHJpdmVfcGlubXV4X3NldF9zY2htaXR0KGVudW0gdGVncmFfZHJpdmVfcGluZ3JvdXAgcGcsCisJZW51bSB0ZWdyYV9zY2htaXR0IHNjaG1pdHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCWlmIChwZyA8IDAgfHwgcGcgPj0gIFRFR1JBX01BWF9EUklWRV9QSU5HUk9VUCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlpZiAoc2NobWl0dCAhPSBURUdSQV9TQ0hNSVRUX0VOQUJMRSAmJiBzY2htaXR0ICE9IFRFR1JBX1NDSE1JVFRfRElTQUJMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJlZyA9IHBnX3JlYWRsKGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKwlpZiAoc2NobWl0dCA9PSBURUdSQV9TQ0hNSVRUX0VOQUJMRSkKKwkJcmVnIHw9ICgxIDw8IDMpOworCWVsc2UKKwkJcmVnICY9IH4oMSA8PCAzKTsKKwlwZ193cml0ZWwocmVnLCBkcml2ZV9waW5ncm91cHNbcGddLnJlZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZHJpdmVfcGlubXV4X3NldF9kcml2ZShlbnVtIHRlZ3JhX2RyaXZlX3Bpbmdyb3VwIHBnLAorCWVudW0gdGVncmFfZHJpdmUgZHJpdmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCWlmIChwZyA8IDAgfHwgcGcgPj0gIFRFR1JBX01BWF9EUklWRV9QSU5HUk9VUCkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlpZiAoZHJpdmUgPCAwIHx8IGRyaXZlID49IFRFR1JBX01BWF9EUklWRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJlZyA9IHBnX3JlYWRsKGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKwlyZWcgJj0gfigweDMgPDwgNCk7CisJcmVnIHw9IGRyaXZlIDw8IDQ7CisJcGdfd3JpdGVsKHJlZywgZHJpdmVfcGluZ3JvdXBzW3BnXS5yZWcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2RyaXZlX3Bpbm11eF9zZXRfcHVsbF9kb3duKGVudW0gdGVncmFfZHJpdmVfcGluZ3JvdXAgcGcsCisJZW51bSB0ZWdyYV9wdWxsX3N0cmVuZ3RoIHB1bGxfZG93bikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisJaWYgKHBnIDwgMCB8fCBwZyA+PSAgVEVHUkFfTUFYX0RSSVZFX1BJTkdST1VQKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmIChwdWxsX2Rvd24gPCAwIHx8IHB1bGxfZG93biA+PSBURUdSQV9NQVhfUFVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJlZyA9IHBnX3JlYWRsKGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKwlyZWcgJj0gfigweDFmIDw8IDEyKTsKKwlyZWcgfD0gcHVsbF9kb3duIDw8IDEyOworCXBnX3dyaXRlbChyZWcsIGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9kcml2ZV9waW5tdXhfc2V0X3B1bGxfdXAoZW51bSB0ZWdyYV9kcml2ZV9waW5ncm91cCBwZywKKwllbnVtIHRlZ3JhX3B1bGxfc3RyZW5ndGggcHVsbF91cCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisJaWYgKHBnIDwgMCB8fCBwZyA+PSAgVEVHUkFfTUFYX0RSSVZFX1BJTkdST1VQKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWlmIChwdWxsX3VwIDwgMCB8fCBwdWxsX3VwID49IFRFR1JBX01BWF9QVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoZHJpdmVfcGluZ3JvdXBzW3BnXS5yZWcpOworCXJlZyAmPSB+KDB4MWYgPDwgMTIpOworCXJlZyB8PSBwdWxsX3VwIDw8IDEyOworCXBnX3dyaXRlbChyZWcsIGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11eF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9kcml2ZV9waW5tdXhfc2V0X3NsZXdfcmlzaW5nKGVudW0gdGVncmFfZHJpdmVfcGluZ3JvdXAgcGcsCisJZW51bSB0ZWdyYV9zbGV3IHNsZXdfcmlzaW5nKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKwlpZiAocGcgPCAwIHx8IHBnID49ICBURUdSQV9NQVhfRFJJVkVfUElOR1JPVVApCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKHNsZXdfcmlzaW5nIDwgMCB8fCBzbGV3X3Jpc2luZyA+PSBURUdSQV9NQVhfU0xFVykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXV4X2xvY2ssIGZsYWdzKTsKKworCXJlZyA9IHBnX3JlYWRsKGRyaXZlX3Bpbmdyb3Vwc1twZ10ucmVnKTsKKwlyZWcgJj0gfigweDMgPDwgMjgpOworCXJlZyB8PSBzbGV3X3Jpc2luZyA8PCAyODsKKwlwZ193cml0ZWwocmVnLCBkcml2ZV9waW5ncm91cHNbcGddLnJlZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZHJpdmVfcGlubXV4X3NldF9zbGV3X2ZhbGxpbmcoZW51bSB0ZWdyYV9kcml2ZV9waW5ncm91cCBwZywKKwllbnVtIHRlZ3JhX3NsZXcgc2xld19mYWxsaW5nKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJlZzsKKwlpZiAocGcgPCAwIHx8IHBnID49ICBURUdSQV9NQVhfRFJJVkVfUElOR1JPVVApCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKHNsZXdfZmFsbGluZyA8IDAgfHwgc2xld19mYWxsaW5nID49IFRFR1JBX01BWF9TTEVXKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmVnID0gcGdfcmVhZGwoZHJpdmVfcGluZ3JvdXBzW3BnXS5yZWcpOworCXJlZyAmPSB+KDB4MyA8PCAzMCk7CisJcmVnIHw9IHNsZXdfZmFsbGluZyA8PCAzMDsKKwlwZ193cml0ZWwocmVnLCBkcml2ZV9waW5ncm91cHNbcGddLnJlZyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXhfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2RyaXZlX3Bpbm11eF9jb25maWdfcGluZ3JvdXAoZW51bSB0ZWdyYV9kcml2ZV9waW5ncm91cCBwaW5ncm91cCwKKwkJCQkJICBlbnVtIHRlZ3JhX2hzbSBoc20sCisJCQkJCSAgZW51bSB0ZWdyYV9zY2htaXR0IHNjaG1pdHQsCisJCQkJCSAgZW51bSB0ZWdyYV9kcml2ZSBkcml2ZSwKKwkJCQkJICBlbnVtIHRlZ3JhX3B1bGxfc3RyZW5ndGggcHVsbF9kb3duLAorCQkJCQkgIGVudW0gdGVncmFfcHVsbF9zdHJlbmd0aCBwdWxsX3VwLAorCQkJCQkgIGVudW0gdGVncmFfc2xldyBzbGV3X3Jpc2luZywKKwkJCQkJICBlbnVtIHRlZ3JhX3NsZXcgc2xld19mYWxsaW5nKQoreworCWludCBlcnI7CisKKwllcnIgPSB0ZWdyYV9kcml2ZV9waW5tdXhfc2V0X2hzbShwaW5ncm91cCwgaHNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJfZXJyKCJwaW5tdXg6IGNhbid0IHNldCBwaW5ncm91cCAlcyBoc20gdG8gJXM6ICVkXG4iLAorCQkJZHJpdmVfcGlubXV4X25hbWUocGluZ3JvdXApLAorCQkJZW5hYmxlX25hbWUoaHNtKSwgZXJyKTsKKworCWVyciA9IHRlZ3JhX2RyaXZlX3Bpbm11eF9zZXRfc2NobWl0dChwaW5ncm91cCwgc2NobWl0dCk7CisJaWYgKGVyciA8IDApCisJCXByX2VycigicGlubXV4OiBjYW4ndCBzZXQgcGluZ3JvdXAgJXMgc2NobWl0dCB0byAlczogJWRcbiIsCisJCQlkcml2ZV9waW5tdXhfbmFtZShwaW5ncm91cCksCisJCQllbmFibGVfbmFtZShzY2htaXR0KSwgZXJyKTsKKworCWVyciA9IHRlZ3JhX2RyaXZlX3Bpbm11eF9zZXRfZHJpdmUocGluZ3JvdXAsIGRyaXZlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJfZXJyKCJwaW5tdXg6IGNhbid0IHNldCBwaW5ncm91cCAlcyBkcml2ZSB0byAlczogJWRcbiIsCisJCQlkcml2ZV9waW5tdXhfbmFtZShwaW5ncm91cCksCisJCQlkcml2ZV9uYW1lKGRyaXZlKSwgZXJyKTsKKworCWVyciA9IHRlZ3JhX2RyaXZlX3Bpbm11eF9zZXRfcHVsbF9kb3duKHBpbmdyb3VwLCBwdWxsX2Rvd24pOworCWlmIChlcnIgPCAwKQorCQlwcl9lcnIoInBpbm11eDogY2FuJ3Qgc2V0IHBpbmdyb3VwICVzIHB1bGwgZG93biB0byAlZDogJWRcbiIsCisJCQlkcml2ZV9waW5tdXhfbmFtZShwaW5ncm91cCksCisJCQlwdWxsX2Rvd24sIGVycik7CisKKwllcnIgPSB0ZWdyYV9kcml2ZV9waW5tdXhfc2V0X3B1bGxfdXAocGluZ3JvdXAsIHB1bGxfdXApOworCWlmIChlcnIgPCAwKQorCQlwcl9lcnIoInBpbm11eDogY2FuJ3Qgc2V0IHBpbmdyb3VwICVzIHB1bGwgdXAgdG8gJWQ6ICVkXG4iLAorCQkJZHJpdmVfcGlubXV4X25hbWUocGluZ3JvdXApLAorCQkJcHVsbF91cCwgZXJyKTsKKworCWVyciA9IHRlZ3JhX2RyaXZlX3Bpbm11eF9zZXRfc2xld19yaXNpbmcocGluZ3JvdXAsIHNsZXdfcmlzaW5nKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJfZXJyKCJwaW5tdXg6IGNhbid0IHNldCBwaW5ncm91cCAlcyByaXNpbmcgc2xldyB0byAlczogJWRcbiIsCisJCQlkcml2ZV9waW5tdXhfbmFtZShwaW5ncm91cCksCisJCQlzbGV3X25hbWUoc2xld19yaXNpbmcpLCBlcnIpOworCisJZXJyID0gdGVncmFfZHJpdmVfcGlubXV4X3NldF9zbGV3X2ZhbGxpbmcocGluZ3JvdXAsIHNsZXdfZmFsbGluZyk7CisJaWYgKGVyciA8IDApCisJCXByX2VycigicGlubXV4OiBjYW4ndCBzZXQgcGluZ3JvdXAgJXMgZmFsbGluZyBzbGV3IHRvICVzOiAlZFxuIiwKKwkJCWRyaXZlX3Bpbm11eF9uYW1lKHBpbmdyb3VwKSwKKwkJCXNsZXdfbmFtZShzbGV3X2ZhbGxpbmcpLCBlcnIpOworfQorCit2b2lkIHRlZ3JhX2RyaXZlX3Bpbm11eF9jb25maWdfdGFibGUoc3RydWN0IHRlZ3JhX2RyaXZlX3Bpbmdyb3VwX2NvbmZpZyAqY29uZmlnLAorCWludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXRlZ3JhX2RyaXZlX3Bpbm11eF9jb25maWdfcGluZ3JvdXAoY29uZmlnW2ldLnBpbmdyb3VwLAorCQkJCQkJICAgICBjb25maWdbaV0uaHNtLAorCQkJCQkJICAgICBjb25maWdbaV0uc2NobWl0dCwKKwkJCQkJCSAgICAgY29uZmlnW2ldLmRyaXZlLAorCQkJCQkJICAgICBjb25maWdbaV0ucHVsbF9kb3duLAorCQkJCQkJICAgICBjb25maWdbaV0ucHVsbF91cCwKKwkJCQkJCSAgICAgY29uZmlnW2ldLnNsZXdfcmlzaW5nLAorCQkJCQkJICAgICBjb25maWdbaV0uc2xld19mYWxsaW5nKTsKK30KKworCisjaWZkZWYJQ09ORklHX0RFQlVHX0ZTCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHZvaWQgZGJnX3BhZF9maWVsZChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGludCBsZW4pCit7CisJc2VxX3B1dGMocywgJywnKTsKKworCXdoaWxlIChsZW4tLSA+IC0xKQorCQlzZXFfcHV0YyhzLCAnICcpOworfQorCitzdGF0aWMgaW50IGRiZ19waW5tdXhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKK3sKKwlpbnQgaTsKKwlpbnQgbGVuOworCisJZm9yIChpID0gMDsgaSA8IFRFR1JBX01BWF9QSU5HUk9VUDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdHJpOworCQl1bnNpZ25lZCBsb25nIG11eDsKKwkJdW5zaWduZWQgbG9uZyBwdXBkOworCisJCXNlcV9wcmludGYocywgIlx0e1RFR1JBX1BJTkdST1VQXyVzIiwgcGluZ3JvdXBzW2ldLm5hbWUpOworCQlsZW4gPSBzdHJsZW4ocGluZ3JvdXBzW2ldLm5hbWUpOworCQlkYmdfcGFkX2ZpZWxkKHMsIDUgLSBsZW4pOworCisJCWlmIChwaW5ncm91cHNbaV0ubXV4X3JlZyA9PSBSRUdfTikgeworCQkJc2VxX3ByaW50ZihzLCAiVEVHUkFfTVVYX05PTkUiKTsKKwkJCWxlbiA9IHN0cmxlbigiTk9ORSIpOworCQl9IGVsc2UgeworCQkJbXV4ID0gKHBnX3JlYWRsKFRFR1JBX1BQX01VWF9DVEwocGluZ3JvdXBzW2ldLm11eF9yZWcpKSA+PgorCQkJICAgICAgIHBpbmdyb3Vwc1tpXS5tdXhfYml0KSAmIDB4MzsKKwkJCWlmIChwaW5ncm91cHNbaV0uZnVuY3NbbXV4XSA9PSBURUdSQV9NVVhfUlNWRCkgeworCQkJCXNlcV9wcmludGYocywgIlRFR1JBX01VWF9SU1ZEJTFsdSIsIG11eCsxKTsKKwkJCQlsZW4gPSA1OworCQkJfSBlbHNlIHsKKwkJCQlzZXFfcHJpbnRmKHMsICJURUdSQV9NVVhfJXMiLAorCQkJCQkgICB0ZWdyYV9tdXhfbmFtZXNbcGluZ3JvdXBzW2ldLmZ1bmNzW211eF1dKTsKKwkJCQlsZW4gPSBzdHJsZW4odGVncmFfbXV4X25hbWVzW3Bpbmdyb3Vwc1tpXS5mdW5jc1ttdXhdXSk7CisJCQl9CisJCX0KKwkJZGJnX3BhZF9maWVsZChzLCAxMy1sZW4pOworCisJCWlmIChwaW5ncm91cHNbaV0ubXV4X3JlZyA9PSBSRUdfTikgeworCQkJc2VxX3ByaW50ZihzLCAiVEVHUkFfUFVQRF9OT1JNQUwiKTsKKwkJCWxlbiA9IHN0cmxlbigiTk9STUFMIik7CisJCX0gZWxzZSB7CisJCQlwdXBkID0gKHBnX3JlYWRsKFRFR1JBX1BQX1BVX1BEKHBpbmdyb3Vwc1tpXS5wdXBkX3JlZykpID4+CisJCQkJcGluZ3JvdXBzW2ldLnB1cGRfYml0KSAmIDB4MzsKKwkJCXNlcV9wcmludGYocywgIlRFR1JBX1BVUERfJXMiLCBwdXBkX25hbWUocHVwZCkpOworCQkJbGVuID0gc3RybGVuKHB1cGRfbmFtZShwdXBkKSk7CisJCX0KKwkJZGJnX3BhZF9maWVsZChzLCA5IC0gbGVuKTsKKworCQlpZiAocGluZ3JvdXBzW2ldLnRyaV9yZWcgPT0gUkVHX04pIHsKKwkJCXNlcV9wcmludGYocywgIlRFR1JBX1RSSV9OT1JNQUwiKTsKKwkJfSBlbHNlIHsKKwkJCXRyaSA9IChwZ19yZWFkbChURUdSQV9UUklfU1RBVEUocGluZ3JvdXBzW2ldLnRyaV9yZWcpKSA+PgorCQkJICAgICAgIHBpbmdyb3Vwc1tpXS50cmlfYml0KSAmIDB4MTsKKworCQkJc2VxX3ByaW50ZihzLCAiVEVHUkFfVFJJXyVzIiwgdHJpX25hbWUodHJpKSk7CisJCX0KKwkJc2VxX3ByaW50ZihzLCAifSxcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYmdfcGlubXV4X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRiZ19waW5tdXhfc2hvdywgJmlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19mb3BzID0geworCS5vcGVuCQk9IGRiZ19waW5tdXhfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBkYmdfZHJpdmVfcGlubXV4X3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCit7CisJaW50IGk7CisJaW50IGxlbjsKKworCWZvciAoaSA9IDA7IGkgPCBURUdSQV9NQVhfRFJJVkVfUElOR1JPVVA7IGkrKykgeworCQl1MzIgcmVnOworCisJCXNlcV9wcmludGYocywgIlx0e1RFR1JBX0RSSVZFX1BJTkdST1VQXyVzIiwKKwkJCWRyaXZlX3Bpbmdyb3Vwc1tpXS5uYW1lKTsKKwkJbGVuID0gc3RybGVuKGRyaXZlX3Bpbmdyb3Vwc1tpXS5uYW1lKTsKKwkJZGJnX3BhZF9maWVsZChzLCA3IC0gbGVuKTsKKworCisJCXJlZyA9IHBnX3JlYWRsKGRyaXZlX3Bpbmdyb3Vwc1tpXS5yZWcpOworCQlpZiAoSFNNX0VOKHJlZykpIHsKKwkJCXNlcV9wcmludGYocywgIlRFR1JBX0hTTV9FTkFCTEUiKTsKKwkJCWxlbiA9IDE2OworCQl9IGVsc2UgeworCQkJc2VxX3ByaW50ZihzLCAiVEVHUkFfSFNNX0RJU0FCTEUiKTsKKwkJCWxlbiA9IDE3OworCQl9CisJCWRiZ19wYWRfZmllbGQocywgMTcgLSBsZW4pOworCisJCWlmIChTQ0hNVF9FTihyZWcpKSB7CisJCQlzZXFfcHJpbnRmKHMsICJURUdSQV9TQ0hNSVRUX0VOQUJMRSIpOworCQkJbGVuID0gMjE7CisJCX0gZWxzZSB7CisJCQlzZXFfcHJpbnRmKHMsICJURUdSQV9TQ0hNSVRUX0RJU0FCTEUiKTsKKwkJCWxlbiA9IDIyOworCQl9CisJCWRiZ19wYWRfZmllbGQocywgMjIgLSBsZW4pOworCisJCXNlcV9wcmludGYocywgIlRFR1JBX0RSSVZFXyVzIiwgZHJpdmVfbmFtZShMUE1EKHJlZykpKTsKKwkJbGVuID0gc3RybGVuKGRyaXZlX25hbWUoTFBNRChyZWcpKSk7CisJCWRiZ19wYWRfZmllbGQocywgNSAtIGxlbik7CisKKwkJc2VxX3ByaW50ZihzLCAiVEVHUkFfUFVMTF8lZCIsIERSVkROKHJlZykpOworCQlsZW4gPSBEUlZETihyZWcpIDwgMTAgPyAxIDogMjsKKwkJZGJnX3BhZF9maWVsZChzLCAyIC0gbGVuKTsKKworCQlzZXFfcHJpbnRmKHMsICJURUdSQV9QVUxMXyVkIiwgRFJWVVAocmVnKSk7CisJCWxlbiA9IERSVlVQKHJlZykgPCAxMCA/IDEgOiAyOworCQlkYmdfcGFkX2ZpZWxkKHMsIDIgLSBsZW4pOworCisJCXNlcV9wcmludGYocywgIlRFR1JBX1NMRVdfJXMiLCBzbGV3X25hbWUoU0xXUihyZWcpKSk7CisJCWxlbiA9IHN0cmxlbihzbGV3X25hbWUoU0xXUihyZWcpKSk7CisJCWRiZ19wYWRfZmllbGQocywgNyAtIGxlbik7CisKKwkJc2VxX3ByaW50ZihzLCAiVEVHUkFfU0xFV18lcyIsIHNsZXdfbmFtZShTTFdGKHJlZykpKTsKKworCQlzZXFfcHJpbnRmKHMsICJ9LFxuIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRiZ19kcml2ZV9waW5tdXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX2RyaXZlX3Bpbm11eF9zaG93LCAmaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2RyaXZlX2ZvcHMgPSB7CisJLm9wZW4JCT0gZGJnX2RyaXZlX3Bpbm11eF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV9waW5tdXhfZGVidWdpbml0KHZvaWQpCit7CisJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRlZ3JhX3Bpbm11eCIsIFNfSVJVR08sCisJCQkJCU5VTEwsIE5VTEwsICZkZWJ1Z19mb3BzKTsKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGVncmFfcGlubXV4X2RyaXZlIiwgU19JUlVHTywKKwkJCQkJTlVMTCwgTlVMTCwgJmRlYnVnX2RyaXZlX2ZvcHMpOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbCh0ZWdyYV9waW5tdXhfZGVidWdpbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3BsYXRzbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzBmZDkyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9wbGF0c21wLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC10ZWdyYS9wbGF0c21wLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFSTSBMdGQuCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgUGFsbQorICogIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc21wX3NjdS5oPgorCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorCitleHRlcm4gdm9pZCB0ZWdyYV9zZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhib290X2xvY2spOworc3RhdGljIHZvaWQgX19pb21lbSAqc2N1X2Jhc2UgPSBJT19BRERSRVNTKFRFR1JBX0FSTV9QRVJJRl9CQVNFKTsKKworI2RlZmluZSBFVlBfQ1BVX1JFU0VUX1ZFQ1RPUiBcCisJKElPX0FERFJFU1MoVEVHUkFfRVhDRVBUSU9OX1ZFQ1RPUlNfQkFTRSkgKyAweDEwMCkKKyNkZWZpbmUgQ0xLX1JTVF9DT05UUk9MTEVSX0NMS19DUFVfQ01QTFggXAorCShJT19BRERSRVNTKFRFR1JBX0NMS19SRVNFVF9CQVNFKSArIDB4NGMpCisjZGVmaW5lIENMS19SU1RfQ09OVFJPTExFUl9SU1RfQ1BVX0NNUExYX0NMUiBcCisJKElPX0FERFJFU1MoVEVHUkFfQ0xLX1JFU0VUX0JBU0UpICsgMHgzNDQpCisKK3ZvaWQgX19jcHVpbml0IHBsYXRmb3JtX3NlY29uZGFyeV9pbml0KHVuc2lnbmVkIGludCBjcHUpCit7CisJdHJhY2VfaGFyZGlycXNfb2ZmKCk7CisKKwkvKgorCSAqIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBwcmltYXJ5CisJICogY29yZSAoZS5nLiB0aW1lciBpcnEpLCB0aGVuIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGVuYWJsZWQKKwkgKiBmb3IgdXM6IGRvIHNvCisJICovCisJZ2ljX2NwdV9pbml0KDAsIElPX0FERFJFU1MoVEVHUkFfQVJNX1BFUklGX0JBU0UpICsgMHgxMDApOworCisJLyoKKwkgKiBTeW5jaHJvbmlzZSB3aXRoIHRoZSBib290IHRocmVhZC4KKwkgKi8KKwlzcGluX2xvY2soJmJvb3RfbG9jayk7CisJc3Bpbl91bmxvY2soJmJvb3RfbG9jayk7Cit9CisKK2ludCBfX2NwdWluaXQgYm9vdF9zZWNvbmRhcnkodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQoreworCXVuc2lnbmVkIGxvbmcgb2xkX2Jvb3RfdmVjdG9yOworCXVuc2lnbmVkIGxvbmcgYm9vdF92ZWN0b3I7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiByZWc7CisKKwkvKgorCSAqIHNldCBzeW5jaHJvbmlzYXRpb24gc3RhdGUgYmV0d2VlbiB0aGlzIGJvb3QgcHJvY2Vzc29yCisJICogYW5kIHRoZSBzZWNvbmRhcnkgb25lCisJICovCisJc3Bpbl9sb2NrKCZib290X2xvY2spOworCisKKwkvKiBzZXQgdGhlIHJlc2V0IHZlY3RvciB0byBwb2ludCB0byB0aGUgc2Vjb25kYXJ5X3N0YXJ0dXAgcm91dGluZSAqLworCisJYm9vdF92ZWN0b3IgPSB2aXJ0X3RvX3BoeXModGVncmFfc2Vjb25kYXJ5X3N0YXJ0dXApOworCW9sZF9ib290X3ZlY3RvciA9IHJlYWRsKEVWUF9DUFVfUkVTRVRfVkVDVE9SKTsKKwl3cml0ZWwoYm9vdF92ZWN0b3IsIEVWUF9DUFVfUkVTRVRfVkVDVE9SKTsKKworCS8qIGVuYWJsZSBjcHUgY2xvY2sgb24gY3B1MSAqLworCXJlZyA9IHJlYWRsKENMS19SU1RfQ09OVFJPTExFUl9DTEtfQ1BVX0NNUExYKTsKKwl3cml0ZWwocmVnICYgfigxPDw5KSwgQ0xLX1JTVF9DT05UUk9MTEVSX0NMS19DUFVfQ01QTFgpOworCisJcmVnID0gKDE8PDEzKSB8ICgxPDw5KSB8ICgxPDw1KSB8ICgxPDwxKTsKKwl3cml0ZWwocmVnLCBDTEtfUlNUX0NPTlRST0xMRVJfUlNUX0NQVV9DTVBMWF9DTFIpOworCisJc21wX3dtYigpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJLyogdW5oYWx0IHRoZSBjcHUgKi8KKwl3cml0ZWwoMCwgSU9fQUREUkVTUyhURUdSQV9GTE9XX0NUUkxfQkFTRSkgKyAweDE0KTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgKDEgKiBIWik7CisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWlmIChyZWFkbChFVlBfQ1BVX1JFU0VUX1ZFQ1RPUikgIT0gYm9vdF92ZWN0b3IpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBwdXQgdGhlIG9sZCBib290IHZlY3RvciBiYWNrICovCisJd3JpdGVsKG9sZF9ib290X3ZlY3RvciwgRVZQX0NQVV9SRVNFVF9WRUNUT1IpOworCisJLyoKKwkgKiBub3cgdGhlIHNlY29uZGFyeSBjb3JlIGlzIHN0YXJ0aW5nIHVwIGxldCBpdCBydW4gaXRzCisJICogY2FsaWJyYXRpb25zLCB0aGVuIHdhaXQgZm9yIGl0IHRvIGZpbmlzaAorCSAqLworCXNwaW5fdW5sb2NrKCZib290X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBDUFUgcG9zc2libGUgbWFwIGVhcmx5IC0gdGhpcyBkZXNjcmliZXMgdGhlIENQVXMKKyAqIHdoaWNoIG1heSBiZSBwcmVzZW50IG9yIGJlY29tZSBwcmVzZW50IGluIHRoZSBzeXN0ZW0uCisgKi8KK3ZvaWQgX19pbml0IHNtcF9pbml0X2NwdXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbmNvcmVzID0gc2N1X2dldF9jb3JlX2NvdW50KHNjdV9iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCBuY29yZXM7IGkrKykKKwkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKK30KKwordm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJdW5zaWduZWQgaW50IG5jb3JlcyA9IHNjdV9nZXRfY29yZV9jb3VudChzY3VfYmFzZSk7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaTsKKworCXNtcF9zdG9yZV9jcHVfaW5mbyhjcHUpOworCisJLyoKKwkgKiBhcmUgd2UgdHJ5aW5nIHRvIGJvb3QgbW9yZSBjb3JlcyB0aGFuIGV4aXN0PworCSAqLworCWlmIChtYXhfY3B1cyA+IG5jb3JlcykKKwkJbWF4X2NwdXMgPSBuY29yZXM7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIHByZXNlbnQgbWFwLCB3aGljaCBkZXNjcmliZXMgdGhlIHNldCBvZiBDUFVzCisJICogYWN0dWFsbHkgcG9wdWxhdGVkIGF0IHRoZSBwcmVzZW50IHRpbWUuCisJICovCisJZm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspCisJCXNldF9jcHVfcHJlc2VudChpLCB0cnVlKTsKKworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgU0NVIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIENQVSBhbmQgbGV0CisJICogdGhlbSBrbm93IHdoZXJlIHRvIHN0YXJ0LiBOb3RlIHRoYXQsIG9uIG1vZGVybiB2ZXJzaW9ucyBvZgorCSAqIE1JTE8sIHRoZSAicG9rZSIgZG9lc24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyB1bnRpbCBlYWNoCisJICogaW5kaXZpZHVhbCBjb3JlIGlzIHNlbnQgYSBzb2Z0IGludGVycnVwdCB0byBnZXQgaXQgb3V0IG9mCisJICogV0ZJCisJICovCisJaWYgKG1heF9jcHVzID4gMSkgeworCQlwZXJjcHVfdGltZXJfc2V0dXAoKTsKKwkJc2N1X2VuYWJsZShzY3VfYmFzZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3RlZ3JhMl9jbG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjYxNjMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKQEAgLTAsMCArMSwxMzU5IEBACisvKgorICogYXJjaC9hcm0vbWFjaC10ZWdyYS90ZWdyYTJfY2xvY2tzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuCisgKgorICogQXV0aG9yOgorICoJQ29saW4gQ3Jvc3MgPGNjcm9zc0Bnb29nbGUuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9pb21hcC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBSU1RfREVWSUNFUwkJCTB4MDA0CisjZGVmaW5lIFJTVF9ERVZJQ0VTX1NFVAkJCTB4MzAwCisjZGVmaW5lIFJTVF9ERVZJQ0VTX0NMUgkJCTB4MzA0CisKKyNkZWZpbmUgQ0xLX09VVF9FTkIJCQkweDAxMAorI2RlZmluZSBDTEtfT1VUX0VOQl9TRVQJCQkweDMyMAorI2RlZmluZSBDTEtfT1VUX0VOQl9DTFIJCQkweDMyNAorCisjZGVmaW5lIE9TQ19DVFJMCQkJMHg1MAorI2RlZmluZSBPU0NfQ1RSTF9PU0NfRlJFUV9NQVNLCQkoMzw8MzApCisjZGVmaW5lIE9TQ19DVFJMX09TQ19GUkVRXzEzTUhaCQkoMDw8MzApCisjZGVmaW5lIE9TQ19DVFJMX09TQ19GUkVRXzE5XzJNSFoJKDE8PDMwKQorI2RlZmluZSBPU0NfQ1RSTF9PU0NfRlJFUV8xMk1IWgkJKDI8PDMwKQorI2RlZmluZSBPU0NfQ1RSTF9PU0NfRlJFUV8yNk1IWgkJKDM8PDMwKQorCisjZGVmaW5lIE9TQ19GUkVRX0RFVAkJCTB4NTgKKyNkZWZpbmUgT1NDX0ZSRVFfREVUX1RSSUcJCSgxPDwzMSkKKworI2RlZmluZSBPU0NfRlJFUV9ERVRfU1RBVFVTCQkweDVDCisjZGVmaW5lIE9TQ19GUkVRX0RFVF9CVVNZCQkoMTw8MzEpCisjZGVmaW5lIE9TQ19GUkVRX0RFVF9DTlRfTUFTSwkJMHhGRkZGCisKKyNkZWZpbmUgUEVSSVBIX0NMS19TT1VSQ0VfTUFTSwkJKDM8PDMwKQorI2RlZmluZSBQRVJJUEhfQ0xLX1NPVVJDRV9TSElGVAkJMzAKKyNkZWZpbmUgUEVSSVBIX0NMS19TT1VSQ0VfRU5BQkxFCSgxPDwyOCkKKyNkZWZpbmUgUEVSSVBIX0NMS19TT1VSQ0VfRElWX01BU0sJMHhGRgorI2RlZmluZSBQRVJJUEhfQ0xLX1NPVVJDRV9ESVZfU0hJRlQJMAorCisjZGVmaW5lIFBMTF9CQVNFCQkJMHgwCisjZGVmaW5lIFBMTF9CQVNFX0JZUEFTUwkJCSgxPDwzMSkKKyNkZWZpbmUgUExMX0JBU0VfRU5BQkxFCQkJKDE8PDMwKQorI2RlZmluZSBQTExfQkFTRV9SRUZfRU5BQkxFCQkoMTw8MjkpCisjZGVmaW5lIFBMTF9CQVNFX09WRVJSSURFCQkoMTw8MjgpCisjZGVmaW5lIFBMTF9CQVNFX0xPQ0sJCQkoMTw8MjcpCisjZGVmaW5lIFBMTF9CQVNFX0RJVlBfTUFTSwkJKDB4Nzw8MjApCisjZGVmaW5lIFBMTF9CQVNFX0RJVlBfU0hJRlQJCTIwCisjZGVmaW5lIFBMTF9CQVNFX0RJVk5fTUFTSwkJKDB4M0ZGPDw4KQorI2RlZmluZSBQTExfQkFTRV9ESVZOX1NISUZUCQk4CisjZGVmaW5lIFBMTF9CQVNFX0RJVk1fTUFTSwkJKDB4MUYpCisjZGVmaW5lIFBMTF9CQVNFX0RJVk1fU0hJRlQJCTAKKworI2RlZmluZSBQTExfT1VUX1JBVElPX01BU0sJCSgweEZGPDw4KQorI2RlZmluZSBQTExfT1VUX1JBVElPX1NISUZUCQk4CisjZGVmaW5lIFBMTF9PVVRfT1ZFUlJJREUJCSgxPDwyKQorI2RlZmluZSBQTExfT1VUX0NMS0VOCQkJKDE8PDEpCisjZGVmaW5lIFBMTF9PVVRfUkVTRVRfRElTQUJMRQkJKDE8PDApCisKKyNkZWZpbmUgUExMX01JU0MoYykJCQkoKChjKS0+ZmxhZ3MgJiBQTExfQUxUX01JU0NfUkVHKSA/IDB4NCA6IDB4YykKKyNkZWZpbmUgUExMX01JU0NfRENDT05fU0hJRlQJCTIwCisjZGVmaW5lIFBMTF9NSVNDX0xPQ0tfRU5BQkxFCQkoMTw8MTgpCisjZGVmaW5lIFBMTF9NSVNDX0NQQ09OX1NISUZUCQk4CisjZGVmaW5lIFBMTF9NSVNDX0NQQ09OX01BU0sJCSgweEY8PFBMTF9NSVNDX0NQQ09OX1NISUZUKQorI2RlZmluZSBQTExfTUlTQ19MRkNPTl9TSElGVAkJNAorI2RlZmluZSBQTExfTUlTQ19MRkNPTl9NQVNLCQkoMHhGPDxQTExfTUlTQ19MRkNPTl9TSElGVCkKKyNkZWZpbmUgUExMX01JU0NfVkNPQ09OX1NISUZUCQkwCisjZGVmaW5lIFBMTF9NSVNDX1ZDT0NPTl9NQVNLCQkoMHhGPDxQTExfTUlTQ19WQ09DT05fU0hJRlQpCisKKyNkZWZpbmUgUExMRF9NSVNDX0NMS0VOQUJMRQkJKDE8PDMwKQorI2RlZmluZSBQTExEX01JU0NfRElWX1JTVAkJKDE8PDIzKQorI2RlZmluZSBQTExEX01JU0NfRENDT05fU0hJRlQJCTEyCisKKyNkZWZpbmUgUEVSSVBIX0NMS19UT19FTkJfUkVHKGMpCSgoYy0+Y2xrX251bSAvIDMyKSAqIDQpCisjZGVmaW5lIFBFUklQSF9DTEtfVE9fRU5CX1NFVF9SRUcoYykJKChjLT5jbGtfbnVtIC8gMzIpICogOCkKKyNkZWZpbmUgUEVSSVBIX0NMS19UT19FTkJfQklUKGMpCSgxIDw8IChjLT5jbGtfbnVtICUgMzIpKQorCisjZGVmaW5lIFNVUEVSX0NMS19NVVgJCQkweDAwCisjZGVmaW5lIFNVUEVSX1NUQVRFX1NISUZUCQkyOAorI2RlZmluZSBTVVBFUl9TVEFURV9NQVNLCQkoMHhGIDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TVEFURV9TVEFOREJZCQkoMHgwIDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TVEFURV9JRExFCQkoMHgxIDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TVEFURV9SVU4JCQkoMHgyIDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TVEFURV9JUlEJCQkoMHgzIDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TVEFURV9GSVEJCQkoMHg0IDw8IFNVUEVSX1NUQVRFX1NISUZUKQorI2RlZmluZSBTVVBFUl9TT1VSQ0VfTUFTSwkJMHhGCisjZGVmaW5lCVNVUEVSX0ZJUV9TT1VSQ0VfU0hJRlQJCTEyCisjZGVmaW5lCVNVUEVSX0lSUV9TT1VSQ0VfU0hJRlQJCTgKKyNkZWZpbmUJU1VQRVJfUlVOX1NPVVJDRV9TSElGVAkJNAorI2RlZmluZQlTVVBFUl9JRExFX1NPVVJDRV9TSElGVAkJMAorCisjZGVmaW5lIFNVUEVSX0NMS19ESVZJREVSCQkweDA0CisKKyNkZWZpbmUgQlVTX0NMS19ESVNBQkxFCQkJKDE8PDMpCisjZGVmaW5lIEJVU19DTEtfRElWX01BU0sJCTB4MworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpyZWdfY2xrX2Jhc2UgPSBJT19BRERSRVNTKFRFR1JBX0NMS19SRVNFVF9CQVNFKTsKKworI2RlZmluZSBjbGtfd3JpdGVsKHZhbHVlLCByZWcpIFwKKwlfX3Jhd193cml0ZWwodmFsdWUsICh1MzIpcmVnX2Nsa19iYXNlICsgKHJlZykpCisjZGVmaW5lIGNsa19yZWFkbChyZWcpIFwKKwlfX3Jhd19yZWFkbCgodTMyKXJlZ19jbGtfYmFzZSArIChyZWcpKQorCit1bnNpZ25lZCBsb25nIGNsa19tZWFzdXJlX2lucHV0X2ZyZXEodm9pZCkKK3sKKwl1MzIgY2xvY2tfYXV0b2RldGVjdDsKKwljbGtfd3JpdGVsKE9TQ19GUkVRX0RFVF9UUklHIHwgMSwgT1NDX0ZSRVFfREVUKTsKKwlkbyB7fSB3aGlsZSAoY2xrX3JlYWRsKE9TQ19GUkVRX0RFVF9TVEFUVVMpICYgT1NDX0ZSRVFfREVUX0JVU1kpOworCWNsb2NrX2F1dG9kZXRlY3QgPSBjbGtfcmVhZGwoT1NDX0ZSRVFfREVUX1NUQVRVUyk7CisJaWYgKGNsb2NrX2F1dG9kZXRlY3QgPj0gNzMyIC0gMyAmJiBjbG9ja19hdXRvZGV0ZWN0IDw9IDczMiArIDMpIHsKKwkJcmV0dXJuIDEyMDAwMDAwOworCX0gZWxzZSBpZiAoY2xvY2tfYXV0b2RldGVjdCA+PSA3OTQgLSAzICYmIGNsb2NrX2F1dG9kZXRlY3QgPD0gNzk0ICsgMykgeworCQlyZXR1cm4gMTMwMDAwMDA7CisJfSBlbHNlIGlmIChjbG9ja19hdXRvZGV0ZWN0ID49IDExNzIgLSAzICYmIGNsb2NrX2F1dG9kZXRlY3QgPD0gMTE3MiArIDMpIHsKKwkJcmV0dXJuIDE5MjAwMDAwOworCX0gZWxzZSBpZiAoY2xvY2tfYXV0b2RldGVjdCA+PSAxNTg3IC0gMyAmJiBjbG9ja19hdXRvZGV0ZWN0IDw9IDE1ODcgKyAzKSB7CisJCXJldHVybiAyNjAwMDAwMDsKKwl9IGVsc2UgeworCQlwcl9lcnIoIiVzOiBVbmV4cGVjdGVkIGNsb2NrIGF1dG9kZXRlY3QgdmFsdWUgJWQiLCBfX2Z1bmNfXywgY2xvY2tfYXV0b2RldGVjdCk7CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xrX2RpdjcxX2dldF9kaXZpZGVyKHN0cnVjdCBjbGsgKmMsIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpdmlkZXJfdTcxOworCisJZGl2aWRlcl91NzEgPSBESVZfUk9VTkRfVVAoYy0+cmF0ZSAqIDIsIHJhdGUpOworCisJaWYgKGRpdmlkZXJfdTcxIC0gMiA+IDI1NSB8fCBkaXZpZGVyX3U3MSAtIDIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBkaXZpZGVyX3U3MSAtIDI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRlZ3JhMl9jbGtfcmVjYWxjdWxhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlyYXRlID0gYy0+cGFyZW50LT5yYXRlOworCisJaWYgKGMtPm11bCAhPSAwICYmIGMtPmRpdiAhPSAwKQorCQljLT5yYXRlID0gcmF0ZSAqIGMtPm11bCAvIGMtPmRpdjsKKwllbHNlCisJCWMtPnJhdGUgPSByYXRlOworCXJldHVybiBjLT5yYXRlOworfQorCisKKy8qIGNsa19tIGZ1bmN0aW9ucyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGVncmEyX2Nsa19tX2F1dG9kZXRlY3RfcmF0ZShzdHJ1Y3QgY2xrICpjKQoreworCXUzMiBhdXRvX2Nsb2NrX2NvbnRyb2wgPSBjbGtfcmVhZGwoT1NDX0NUUkwpICYgfk9TQ19DVFJMX09TQ19GUkVRX01BU0s7CisKKwljLT5yYXRlID0gY2xrX21lYXN1cmVfaW5wdXRfZnJlcSgpOworCXN3aXRjaCAoYy0+cmF0ZSkgeworCWNhc2UgMTIwMDAwMDA6CisJCWF1dG9fY2xvY2tfY29udHJvbCB8PSBPU0NfQ1RSTF9PU0NfRlJFUV8xMk1IWjsKKwkJYnJlYWs7CisJY2FzZSAxMzAwMDAwMDoKKwkJYXV0b19jbG9ja19jb250cm9sIHw9IE9TQ19DVFJMX09TQ19GUkVRXzEzTUhaOworCQlicmVhazsKKwljYXNlIDE5MjAwMDAwOgorCQlhdXRvX2Nsb2NrX2NvbnRyb2wgfD0gT1NDX0NUUkxfT1NDX0ZSRVFfMTlfMk1IWjsKKwkJYnJlYWs7CisJY2FzZSAyNjAwMDAwMDoKKwkJYXV0b19jbG9ja19jb250cm9sIHw9IE9TQ19DVFJMX09TQ19GUkVRXzI2TUhaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIiVzOiBVbmV4cGVjdGVkIGNsb2NrIHJhdGUgJWxkIiwgX19mdW5jX18sIGMtPnJhdGUpOworCQlCVUcoKTsKKwl9CisJY2xrX3dyaXRlbChhdXRvX2Nsb2NrX2NvbnRyb2wsIE9TQ19DVFJMKTsKKwlyZXR1cm4gYy0+cmF0ZTsKK30KKworc3RhdGljIHZvaWQgdGVncmEyX2Nsa19tX2luaXQoc3RydWN0IGNsayAqYykKK3sKKwlwcl9kZWJ1ZygiJXMgb24gY2xvY2sgJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKwl0ZWdyYTJfY2xrX21fYXV0b2RldGVjdF9yYXRlKGMpOworfQorCitzdGF0aWMgaW50IHRlZ3JhMl9jbGtfbV9lbmFibGUoc3RydWN0IGNsayAqYykKK3sKKwlwcl9kZWJ1ZygiJXMgb24gY2xvY2sgJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVncmEyX2Nsa19tX2Rpc2FibGUoc3RydWN0IGNsayAqYykKK3sKKwlwcl9kZWJ1ZygiJXMgb24gY2xvY2sgJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKwlCVUcoKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19tX29wcyA9IHsKKwkuaW5pdAkJPSB0ZWdyYTJfY2xrX21faW5pdCwKKwkuZW5hYmxlCQk9IHRlZ3JhMl9jbGtfbV9lbmFibGUsCisJLmRpc2FibGUJPSB0ZWdyYTJfY2xrX21fZGlzYWJsZSwKK307CisKKy8qIHN1cGVyIGNsb2NrIGZ1bmN0aW9ucyAqLworLyogInN1cGVyIGNsb2NrcyIgb24gdGVncmEgaGF2ZSB0d28tc3RhZ2UgbXV4ZXMgYW5kIGEgY2xvY2sgc2tpcHBpbmcKKyAqIHN1cGVyIGRpdmlkZXIuICBXZSB3aWxsIGlnbm9yZSB0aGUgY2xvY2sgc2tpcHBpbmcgZGl2aWRlciwgc2luY2Ugd2UKKyAqIGNhbid0IGxvd2VyIHRoZSB2b2x0YWdlIHdoZW4gdXNpbmcgdGhlIGNsb2NrIHNraXAsIGJ1dCB3ZSBjYW4gaWYgd2UKKyAqIGxvd2VyIHRoZSBQTEwgZnJlcXVlbmN5LgorICovCitzdGF0aWMgdm9pZCB0ZWdyYTJfc3VwZXJfY2xrX2luaXQoc3RydWN0IGNsayAqYykKK3sKKwl1MzIgdmFsOworCWludCBzb3VyY2U7CisJaW50IHNoaWZ0OworCWNvbnN0IHN0cnVjdCBjbGtfbXV4X3NlbCAqc2VsOworCXZhbCA9IGNsa19yZWFkbChjLT5yZWcgKyBTVVBFUl9DTEtfTVVYKTsKKwljLT5zdGF0ZSA9IE9OOworCUJVR19PTigoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spICE9IFNVUEVSX1NUQVRFX1JVTikgJiYKKwkJKCh2YWwgJiBTVVBFUl9TVEFURV9NQVNLKSAhPSBTVVBFUl9TVEFURV9JRExFKSk7CisJc2hpZnQgPSAoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spID09IFNVUEVSX1NUQVRFX0lETEUpID8KKwkJU1VQRVJfSURMRV9TT1VSQ0VfU0hJRlQgOiBTVVBFUl9SVU5fU09VUkNFX1NISUZUOworCXNvdXJjZSA9ICh2YWwgPj4gc2hpZnQpICYgU1VQRVJfU09VUkNFX01BU0s7CisJZm9yIChzZWwgPSBjLT5pbnB1dHM7IHNlbC0+aW5wdXQgIT0gTlVMTDsgc2VsKyspIHsKKwkJaWYgKHNlbC0+dmFsdWUgPT0gc291cmNlKQorCQkJYnJlYWs7CisJfQorCUJVR19PTihzZWwtPmlucHV0ID09IE5VTEwpOworCWMtPnBhcmVudCA9IHNlbC0+aW5wdXQ7CisJdGVncmEyX2Nsa19yZWNhbGN1bGF0ZV9yYXRlKGMpOworfQorCitzdGF0aWMgaW50IHRlZ3JhMl9zdXBlcl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmMpCit7CisJY2xrX3dyaXRlbCgwLCBjLT5yZWcgKyBTVVBFUl9DTEtfRElWSURFUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhMl9zdXBlcl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjKQoreworCXByX2RlYnVnKCIlcyBvbiBjbG9jayAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCisJLyogb29wcyAtIGRvbid0IGRpc2FibGUgdGhlIENQVSBjbG9jayEgKi8KKwlCVUcoKTsKK30KKworc3RhdGljIGludCB0ZWdyYTJfc3VwZXJfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcCkKK3sKKwl1MzIgdmFsOworCWNvbnN0IHN0cnVjdCBjbGtfbXV4X3NlbCAqc2VsOworCWludCBzaGlmdDsKKwl2YWwgPSBjbGtfcmVhZGwoYy0+cmVnICsgU1VQRVJfQ0xLX01VWCk7OworCUJVR19PTigoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spICE9IFNVUEVSX1NUQVRFX1JVTikgJiYKKwkJKCh2YWwgJiBTVVBFUl9TVEFURV9NQVNLKSAhPSBTVVBFUl9TVEFURV9JRExFKSk7CisJc2hpZnQgPSAoKHZhbCAmIFNVUEVSX1NUQVRFX01BU0spID09IFNVUEVSX1NUQVRFX0lETEUpID8KKwkJU1VQRVJfSURMRV9TT1VSQ0VfU0hJRlQgOiBTVVBFUl9SVU5fU09VUkNFX1NISUZUOworCWZvciAoc2VsID0gYy0+aW5wdXRzOyBzZWwtPmlucHV0ICE9IE5VTEw7IHNlbCsrKSB7CisJCWlmIChzZWwtPmlucHV0ID09IHApIHsKKwkJCWNsa19yZXBhcmVudChjLCBwKTsKKwkJCXZhbCAmPSB+KFNVUEVSX1NPVVJDRV9NQVNLIDw8IHNoaWZ0KTsKKwkJCXZhbCB8PSBzZWwtPnZhbHVlIDw8IHNoaWZ0OworCQkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJCQljLT5yYXRlID0gYy0+cGFyZW50LT5yYXRlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0ZWdyYV9zdXBlcl9vcHMgPSB7CisJLmluaXQJCQk9IHRlZ3JhMl9zdXBlcl9jbGtfaW5pdCwKKwkuZW5hYmxlCQkJPSB0ZWdyYTJfc3VwZXJfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSB0ZWdyYTJfc3VwZXJfY2xrX2Rpc2FibGUsCisJLnNldF9wYXJlbnQJCT0gdGVncmEyX3N1cGVyX2Nsa19zZXRfcGFyZW50LAorCS5yZWNhbGN1bGF0ZV9yYXRlCT0gdGVncmEyX2Nsa19yZWNhbGN1bGF0ZV9yYXRlLAorfTsKKworLyogYnVzIGNsb2NrIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgdGVncmEyX2J1c19jbGtfaW5pdChzdHJ1Y3QgY2xrICpjKQoreworCXUzMiB2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwljLT5zdGF0ZSA9ICgodmFsID4+IGMtPnJlZ19zaGlmdCkgJiBCVVNfQ0xLX0RJU0FCTEUpID8gT0ZGIDogT047CisJYy0+ZGl2ID0gKCh2YWwgPj4gYy0+cmVnX3NoaWZ0KSAmIEJVU19DTEtfRElWX01BU0spICsgMTsKKwljLT5tdWwgPSAxOworCXRlZ3JhMl9jbGtfcmVjYWxjdWxhdGVfcmF0ZShjKTsKK30KKworc3RhdGljIGludCB0ZWdyYTJfYnVzX2Nsa19lbmFibGUoc3RydWN0IGNsayAqYykKK3sKKwl1MzIgdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJdmFsICY9IH4oQlVTX0NMS19ESVNBQkxFIDw8IGMtPnJlZ19zaGlmdCk7CisJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhMl9idXNfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqYykKK3sKKwl1MzIgdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJdmFsIHw9IEJVU19DTEtfRElTQUJMRSA8PCBjLT5yZWdfc2hpZnQ7CisJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7Cit9CisKK3N0YXRpYyBpbnQgdGVncmEyX2J1c19jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqYywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiB2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gYy0+cGFyZW50LT5yYXRlOworCWludCBpOworCWZvciAoaSA9IDE7IGkgPD0gNDsgaSsrKSB7CisJCWlmIChyYXRlID09IHBhcmVudF9yYXRlIC8gaSkgeworCQkJdmFsICY9IH4oQlVTX0NMS19ESVZfTUFTSyA8PCBjLT5yZWdfc2hpZnQpOworCQkJdmFsIHw9IChpIC0gMSkgPDwgYy0+cmVnX3NoaWZ0OworCQkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJCQljLT5kaXYgPSBpOworCQkJYy0+bXVsID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgdGVncmFfYnVzX29wcyA9IHsKKwkuaW5pdAkJCT0gdGVncmEyX2J1c19jbGtfaW5pdCwKKwkuZW5hYmxlCQkJPSB0ZWdyYTJfYnVzX2Nsa19lbmFibGUsCisJLmRpc2FibGUJCT0gdGVncmEyX2J1c19jbGtfZGlzYWJsZSwKKwkuc2V0X3JhdGUJCT0gdGVncmEyX2J1c19jbGtfc2V0X3JhdGUsCisJLnJlY2FsY3VsYXRlX3JhdGUJPSB0ZWdyYTJfY2xrX3JlY2FsY3VsYXRlX3JhdGUsCit9OworCisvKiBQTEwgRnVuY3Rpb25zICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0ZWdyYTJfcGxsX2Nsa19yZWNhbGN1bGF0ZV9yYXRlKHN0cnVjdCBjbGsgKmMpCit7CisJdTY0IHJhdGU7CisJcmF0ZSA9IGMtPnBhcmVudC0+cmF0ZTsKKwlyYXRlICo9IGMtPm47CisJZG9fZGl2KHJhdGUsIGMtPm0pOworCWlmIChjLT5wID09IDIpCisJCXJhdGUgPj49IDE7CisJYy0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIGMtPnJhdGU7Cit9CisKK3N0YXRpYyBpbnQgdGVncmEyX3BsbF9jbGtfd2FpdF9mb3JfbG9jayhzdHJ1Y3QgY2xrICpjKQoreworCWt0aW1lX3QgYmVmb3JlOworCisJYmVmb3JlID0ga3RpbWVfZ2V0KCk7CisJd2hpbGUgKCEoY2xrX3JlYWRsKGMtPnJlZyArIFBMTF9CQVNFKSAmIFBMTF9CQVNFX0xPQ0spKSB7CisJCWlmIChrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgYmVmb3JlKSA+IDUwMDApIHsKKwkJCXByX2VycigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGxvY2sgYml0IG9uIHBsbCAlcyIsCisJCQkJYy0+bmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVncmEyX3BsbF9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjKQoreworCXUzMiB2YWwgPSBjbGtfcmVhZGwoYy0+cmVnICsgUExMX0JBU0UpOworCisJYy0+c3RhdGUgPSAodmFsICYgUExMX0JBU0VfRU5BQkxFKSA/IE9OIDogT0ZGOworCisJaWYgKGMtPmZsYWdzICYgUExMX0ZJWEVEICYmICEodmFsICYgUExMX0JBU0VfT1ZFUlJJREUpKSB7CisJCXByX3dhcm5pbmcoIkNsb2NrICVzIGhhcyB1bmtub3duIGZpeGVkIGZyZXF1ZW5jeVxuIiwgYy0+bmFtZSk7CisJCWMtPm4gPSAxOworCQljLT5tID0gMDsKKwkJYy0+cCA9IDE7CisJfSBlbHNlIGlmICh2YWwgJiBQTExfQkFTRV9CWVBBU1MpIHsKKwkJYy0+biA9IDE7CisJCWMtPm0gPSAxOworCQljLT5wID0gMTsKKwl9IGVsc2UgeworCQljLT5uID0gKHZhbCAmIFBMTF9CQVNFX0RJVk5fTUFTSykgPj4gUExMX0JBU0VfRElWTl9TSElGVDsKKwkJYy0+bSA9ICh2YWwgJiBQTExfQkFTRV9ESVZNX01BU0spID4+IFBMTF9CQVNFX0RJVk1fU0hJRlQ7CisJCWMtPnAgPSAodmFsICYgUExMX0JBU0VfRElWUF9NQVNLKSA/IDIgOiAxOworCX0KKworCXZhbCA9IGNsa19yZWFkbChjLT5yZWcgKyBQTExfTUlTQyhjKSk7CisJaWYgKGMtPmZsYWdzICYgUExMX0hBU19DUENPTikKKwkJYy0+Y3Bjb24gPSAodmFsICYgUExMX01JU0NfQ1BDT05fTUFTSykgPj4gUExMX01JU0NfQ1BDT05fU0hJRlQ7CisKKwl0ZWdyYTJfcGxsX2Nsa19yZWNhbGN1bGF0ZV9yYXRlKGMpOworfQorCitzdGF0aWMgaW50IHRlZ3JhMl9wbGxfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjKQoreworCXUzMiB2YWw7CisJcHJfZGVidWcoIiVzIG9uIGNsb2NrICVzXG4iLCBfX2Z1bmNfXywgYy0+bmFtZSk7CisKKwl2YWwgPSBjbGtfcmVhZGwoYy0+cmVnICsgUExMX0JBU0UpOworCXZhbCAmPSB+UExMX0JBU0VfQllQQVNTOworCXZhbCB8PSBQTExfQkFTRV9FTkFCTEU7CisJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyArIFBMTF9CQVNFKTsKKworCXZhbCA9IGNsa19yZWFkbChjLT5yZWcgKyBQTExfTUlTQyhjKSk7CisJdmFsIHw9IFBMTF9NSVNDX0xPQ0tfRU5BQkxFOworCWNsa193cml0ZWwodmFsLCBjLT5yZWcgKyBQTExfTUlTQyhjKSk7CisKKwl0ZWdyYTJfcGxsX2Nsa193YWl0X2Zvcl9sb2NrKGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhMl9wbGxfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqYykKK3sKKwl1MzIgdmFsOworCXByX2RlYnVnKCIlcyBvbiBjbG9jayAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCisJdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJdmFsICY9IH4oUExMX0JBU0VfQllQQVNTIHwgUExMX0JBU0VfRU5BQkxFKTsKKwljbGtfd3JpdGVsKHZhbCwgYy0+cmVnKTsKK30KKworc3RhdGljIGludCB0ZWdyYTJfcGxsX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGlucHV0X3JhdGU7CisJY29uc3Qgc3RydWN0IGNsa19wbGxfdGFibGUgKnNlbDsKKworCXByX2RlYnVnKCIlczogJXMgJWx1XG4iLCBfX2Z1bmNfXywgYy0+bmFtZSwgcmF0ZSk7CisJQlVHX09OKGMtPnJlZmNudCAhPSAwKTsKKworCWlucHV0X3JhdGUgPSBjLT5wYXJlbnQtPnJhdGU7CisJZm9yIChzZWwgPSBjLT5wbGxfdGFibGU7IHNlbC0+aW5wdXRfcmF0ZSAhPSAwOyBzZWwrKykgeworCQlpZiAoc2VsLT5pbnB1dF9yYXRlID09IGlucHV0X3JhdGUgJiYgc2VsLT5vdXRwdXRfcmF0ZSA9PSByYXRlKSB7CisJCQljLT5uID0gc2VsLT5uOworCQkJYy0+bSA9IHNlbC0+bTsKKwkJCWMtPnAgPSBzZWwtPnA7CisJCQljLT5jcGNvbiA9IHNlbC0+Y3Bjb247CisKKwkJCXZhbCA9IGNsa19yZWFkbChjLT5yZWcgKyBQTExfQkFTRSk7CisJCQlpZiAoYy0+ZmxhZ3MgJiBQTExfRklYRUQpCisJCQkJdmFsIHw9IFBMTF9CQVNFX09WRVJSSURFOworCQkJdmFsICY9IH4oUExMX0JBU0VfRElWUF9NQVNLIHwgUExMX0JBU0VfRElWTl9NQVNLIHwKKwkJCQkgUExMX0JBU0VfRElWTV9NQVNLKTsKKwkJCXZhbCB8PSAoYy0+bSA8PCBQTExfQkFTRV9ESVZNX1NISUZUKSB8CisJCQkJKGMtPm4gPDwgUExMX0JBU0VfRElWTl9TSElGVCk7CisJCQlCVUdfT04oYy0+cCA+IDIpOworCQkJaWYgKGMtPnAgPT0gMikKKwkJCQl2YWwgfD0gMSA8PCBQTExfQkFTRV9ESVZQX1NISUZUOworCQkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyArIFBMTF9CQVNFKTsKKworCQkJaWYgKGMtPmZsYWdzICYgUExMX0hBU19DUENPTikgeworCQkJCXZhbCA9IGMtPmNwY29uIDw8IFBMTF9NSVNDX0NQQ09OX1NISUZUOworCQkJCXZhbCB8PSBQTExfTUlTQ19MT0NLX0VOQUJMRTsKKwkJCQljbGtfd3JpdGVsKHZhbCwgYy0+cmVnICsgUExMX01JU0MoYykpOworCQkJfQorCisJCQlpZiAoYy0+c3RhdGUgPT0gT04pCisJCQkJdGVncmEyX3BsbF9jbGtfZW5hYmxlKGMpOworCisJCQljLT5yYXRlID0gcmF0ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgdGVncmFfcGxsX29wcyA9IHsKKwkuaW5pdAkJCT0gdGVncmEyX3BsbF9jbGtfaW5pdCwKKwkuZW5hYmxlCQkJPSB0ZWdyYTJfcGxsX2Nsa19lbmFibGUsCisJLmRpc2FibGUJCT0gdGVncmEyX3BsbF9jbGtfZGlzYWJsZSwKKwkuc2V0X3JhdGUJCT0gdGVncmEyX3BsbF9jbGtfc2V0X3JhdGUsCisJLnJlY2FsY3VsYXRlX3JhdGUJPSB0ZWdyYTJfcGxsX2Nsa19yZWNhbGN1bGF0ZV9yYXRlLAorfTsKKworLyogQ2xvY2sgZGl2aWRlciBvcHMgKi8KK3N0YXRpYyB2b2lkIHRlZ3JhMl9wbGxfZGl2X2Nsa19pbml0KHN0cnVjdCBjbGsgKmMpCit7CisJdTMyIHZhbCA9IGNsa19yZWFkbChjLT5yZWcpOworCXUzMiBkaXZ1NzE7CisJdmFsID4+PSBjLT5yZWdfc2hpZnQ7CisJYy0+c3RhdGUgPSAodmFsICYgUExMX09VVF9DTEtFTikgPyBPTiA6IE9GRjsKKwlpZiAoISh2YWwgJiBQTExfT1VUX1JFU0VUX0RJU0FCTEUpKQorCQljLT5zdGF0ZSA9IE9GRjsKKworCWlmIChjLT5mbGFncyAmIERJVl9VNzEpIHsKKwkJZGl2dTcxID0gKHZhbCAmIFBMTF9PVVRfUkFUSU9fTUFTSykgPj4gUExMX09VVF9SQVRJT19TSElGVDsKKwkJYy0+ZGl2ID0gKGRpdnU3MSArIDIpOworCQljLT5tdWwgPSAyOworCX0gZWxzZSBpZiAoYy0+ZmxhZ3MgJiBESVZfMikgeworCQljLT5kaXYgPSAyOworCQljLT5tdWwgPSAxOworCX0gZWxzZSB7CisJCWMtPmRpdiA9IDE7CisJCWMtPm11bCA9IDE7CisJfQorCisJdGVncmEyX2Nsa19yZWNhbGN1bGF0ZV9yYXRlKGMpOworfQorCitzdGF0aWMgaW50IHRlZ3JhMl9wbGxfZGl2X2Nsa19lbmFibGUoc3RydWN0IGNsayAqYykKK3sKKwl1MzIgdmFsOworCXUzMiBuZXdfdmFsOworCisJcHJfZGVidWcoIiVzOiAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCWlmIChjLT5mbGFncyAmIERJVl9VNzEpIHsKKwkJdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJCW5ld192YWwgPSB2YWwgPj4gYy0+cmVnX3NoaWZ0OworCQluZXdfdmFsICY9IDB4RkZGRjsKKworCQluZXdfdmFsIHw9IFBMTF9PVVRfQ0xLRU4gfCBQTExfT1VUX1JFU0VUX0RJU0FCTEU7CisKKwkJdmFsICY9IH4oMHhGRkZGIDw8IGMtPnJlZ19zaGlmdCk7CisJCXZhbCB8PSBuZXdfdmFsIDw8IGMtPnJlZ19zaGlmdDsKKwkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoYy0+ZmxhZ3MgJiBESVZfMikgeworCQlCVUdfT04oIShjLT5mbGFncyAmIFBMTEQpKTsKKwkJdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJCXZhbCAmPSB+UExMRF9NSVNDX0RJVl9SU1Q7CisJCWNsa193cml0ZWwodmFsLCBjLT5yZWcpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhMl9wbGxfZGl2X2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmMpCit7CisJdTMyIHZhbDsKKwl1MzIgbmV3X3ZhbDsKKworCXByX2RlYnVnKCIlczogJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKwlpZiAoYy0+ZmxhZ3MgJiBESVZfVTcxKSB7CisJCXZhbCA9IGNsa19yZWFkbChjLT5yZWcpOworCQluZXdfdmFsID0gdmFsID4+IGMtPnJlZ19zaGlmdDsKKwkJbmV3X3ZhbCAmPSAweEZGRkY7CisKKwkJbmV3X3ZhbCAmPSB+KFBMTF9PVVRfQ0xLRU4gfCBQTExfT1VUX1JFU0VUX0RJU0FCTEUpOworCisJCXZhbCAmPSB+KDB4RkZGRiA8PCBjLT5yZWdfc2hpZnQpOworCQl2YWwgfD0gbmV3X3ZhbCA8PCBjLT5yZWdfc2hpZnQ7CisJCWNsa193cml0ZWwodmFsLCBjLT5yZWcpOworCX0gZWxzZSBpZiAoYy0+ZmxhZ3MgJiBESVZfMikgeworCQlCVUdfT04oIShjLT5mbGFncyAmIFBMTEQpKTsKKwkJdmFsID0gY2xrX3JlYWRsKGMtPnJlZyk7CisJCXZhbCB8PSBQTExEX01JU0NfRElWX1JTVDsKKwkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJfQorfQorCitzdGF0aWMgaW50IHRlZ3JhMl9wbGxfZGl2X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHZhbDsKKwl1MzIgbmV3X3ZhbDsKKwlpbnQgZGl2aWRlcl91NzE7CisJcHJfZGVidWcoIiVzOiAlcyAlbHVcbiIsIF9fZnVuY19fLCBjLT5uYW1lLCByYXRlKTsKKwlpZiAoYy0+ZmxhZ3MgJiBESVZfVTcxKSB7CisJCWRpdmlkZXJfdTcxID0gY2xrX2RpdjcxX2dldF9kaXZpZGVyKGMtPnBhcmVudCwgcmF0ZSk7CisJCWlmIChkaXZpZGVyX3U3MSA+PSAwKSB7CisJCQl2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwkJCW5ld192YWwgPSB2YWwgPj4gYy0+cmVnX3NoaWZ0OworCQkJbmV3X3ZhbCAmPSAweEZGRkY7CisJCQlpZiAoYy0+ZmxhZ3MgJiBESVZfVTcxX0ZJWEVEKQorCQkJCW5ld192YWwgfD0gUExMX09VVF9PVkVSUklERTsKKwkJCW5ld192YWwgJj0gflBMTF9PVVRfUkFUSU9fTUFTSzsKKwkJCW5ld192YWwgfD0gZGl2aWRlcl91NzEgPDwgUExMX09VVF9SQVRJT19TSElGVDsKKworCQkJdmFsICY9IH4oMHhGRkZGIDw8IGMtPnJlZ19zaGlmdCk7CisJCQl2YWwgfD0gbmV3X3ZhbCA8PCBjLT5yZWdfc2hpZnQ7CisJCQljbGtfd3JpdGVsKHZhbCwgYy0+cmVnKTsKKwkJCWMtPmRpdiA9IGRpdmlkZXJfdTcxICsgMjsKKwkJCWMtPm11bCA9IDI7CisJCQl0ZWdyYTJfY2xrX3JlY2FsY3VsYXRlX3JhdGUoYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAoYy0+ZmxhZ3MgJiBESVZfMikgeworCQlpZiAoYy0+cGFyZW50LT5yYXRlID09IHJhdGUgKiAyKSB7CisJCQljLT5yYXRlID0gcmF0ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyB0ZWdyYV9wbGxfZGl2X29wcyA9IHsKKwkuaW5pdAkJCT0gdGVncmEyX3BsbF9kaXZfY2xrX2luaXQsCisJLmVuYWJsZQkJCT0gdGVncmEyX3BsbF9kaXZfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSB0ZWdyYTJfcGxsX2Rpdl9jbGtfZGlzYWJsZSwKKwkuc2V0X3JhdGUJCT0gdGVncmEyX3BsbF9kaXZfY2xrX3NldF9yYXRlLAorCS5yZWNhbGN1bGF0ZV9yYXRlCT0gdGVncmEyX2Nsa19yZWNhbGN1bGF0ZV9yYXRlLAorfTsKKworLyogUGVyaXBoIGNsayBvcHMgKi8KKworc3RhdGljIHZvaWQgdGVncmEyX3BlcmlwaF9jbGtfaW5pdChzdHJ1Y3QgY2xrICpjKQoreworCXUzMiB2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwljb25zdCBzdHJ1Y3QgY2xrX211eF9zZWwgKm11eCA9IDA7CisJY29uc3Qgc3RydWN0IGNsa19tdXhfc2VsICpzZWw7CisJaWYgKGMtPmZsYWdzICYgTVVYKSB7CisJCWZvciAoc2VsID0gYy0+aW5wdXRzOyBzZWwtPmlucHV0ICE9IE5VTEw7IHNlbCsrKSB7CisJCQlpZiAodmFsID4+IFBFUklQSF9DTEtfU09VUkNFX1NISUZUID09IHNlbC0+dmFsdWUpCisJCQkJbXV4ID0gc2VsOworCQl9CisJCUJVR19PTighbXV4KTsKKworCQljLT5wYXJlbnQgPSBtdXgtPmlucHV0OworCX0gZWxzZSB7CisJCWMtPnBhcmVudCA9IGMtPmlucHV0c1swXS5pbnB1dDsKKwl9CisKKwlpZiAoYy0+ZmxhZ3MgJiBESVZfVTcxKSB7CisJCXUzMiBkaXZ1NzEgPSB2YWwgJiBQRVJJUEhfQ0xLX1NPVVJDRV9ESVZfTUFTSzsKKwkJYy0+ZGl2ID0gZGl2dTcxICsgMjsKKwkJYy0+bXVsID0gMjsKKwl9IGVsc2UgeworCQljLT5kaXYgPSAxOworCQljLT5tdWwgPSAxOworCX0KKworCWMtPnN0YXRlID0gT047CisJaWYgKCEoY2xrX3JlYWRsKENMS19PVVRfRU5CICsgUEVSSVBIX0NMS19UT19FTkJfUkVHKGMpKSAmCisJCQlQRVJJUEhfQ0xLX1RPX0VOQl9CSVQoYykpKQorCQljLT5zdGF0ZSA9IE9GRjsKKwlpZiAoIShjLT5mbGFncyAmIFBFUklQSF9OT19SRVNFVCkpCisJCWlmIChjbGtfcmVhZGwoUlNUX0RFVklDRVMgKyBQRVJJUEhfQ0xLX1RPX0VOQl9SRUcoYykpICYKKwkJCQlQRVJJUEhfQ0xLX1RPX0VOQl9CSVQoYykpCisJCQljLT5zdGF0ZSA9IE9GRjsKKwl0ZWdyYTJfY2xrX3JlY2FsY3VsYXRlX3JhdGUoYyk7Cit9CisKK3N0YXRpYyBpbnQgdGVncmEyX3BlcmlwaF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmMpCit7CisJdTMyIHZhbDsKKwlwcl9kZWJ1ZygiJXMgb24gY2xvY2sgJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lKTsKKworCWNsa193cml0ZWwoUEVSSVBIX0NMS19UT19FTkJfQklUKGMpLAorCQlDTEtfT1VUX0VOQl9TRVQgKyBQRVJJUEhfQ0xLX1RPX0VOQl9TRVRfUkVHKGMpKTsKKwlpZiAoIShjLT5mbGFncyAmIFBFUklQSF9OT19SRVNFVCkgJiYgIShjLT5mbGFncyAmIFBFUklQSF9NQU5VQUxfUkVTRVQpKQorCQljbGtfd3JpdGVsKFBFUklQSF9DTEtfVE9fRU5CX0JJVChjKSwKKwkJCVJTVF9ERVZJQ0VTX0NMUiArIFBFUklQSF9DTEtfVE9fRU5CX1NFVF9SRUcoYykpOworCWlmIChjLT5mbGFncyAmIFBFUklQSF9FTUNfRU5CKSB7CisJCS8qIFRoZSBFTUMgcGVyaXBoZXJhbCBjbG9jayBoYXMgMiBleHRyYSBlbmFibGUgYml0cyAqLworCQkvKiBGSVhNRTogRG8gdGhleSBuZWVkIHRvIGJlIGRpc2FibGVkPyAqLworCQl2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwkJdmFsIHw9IDB4MyA8PCAyNDsKKwkJY2xrX3dyaXRlbCh2YWwsIGMtPnJlZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYTJfcGVyaXBoX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmMpCit7CisJcHJfZGVidWcoIiVzIG9uIGNsb2NrICVzXG4iLCBfX2Z1bmNfXywgYy0+bmFtZSk7CisKKwljbGtfd3JpdGVsKFBFUklQSF9DTEtfVE9fRU5CX0JJVChjKSwKKwkJQ0xLX09VVF9FTkJfQ0xSICsgUEVSSVBIX0NMS19UT19FTkJfU0VUX1JFRyhjKSk7Cit9CisKK3ZvaWQgdGVncmEyX3BlcmlwaF9yZXNldF9kZWFzc2VydChzdHJ1Y3QgY2xrICpjKQoreworCXByX2RlYnVnKCIlcyBvbiBjbG9jayAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCWlmICghKGMtPmZsYWdzICYgUEVSSVBIX05PX1JFU0VUKSkKKwkJY2xrX3dyaXRlbChQRVJJUEhfQ0xLX1RPX0VOQl9CSVQoYyksCisJCQlSU1RfREVWSUNFU19DTFIgKyBQRVJJUEhfQ0xLX1RPX0VOQl9TRVRfUkVHKGMpKTsKK30KKwordm9pZCB0ZWdyYTJfcGVyaXBoX3Jlc2V0X2Fzc2VydChzdHJ1Y3QgY2xrICpjKQoreworCXByX2RlYnVnKCIlcyBvbiBjbG9jayAlc1xuIiwgX19mdW5jX18sIGMtPm5hbWUpOworCWlmICghKGMtPmZsYWdzICYgUEVSSVBIX05PX1JFU0VUKSkKKwkJY2xrX3dyaXRlbChQRVJJUEhfQ0xLX1RPX0VOQl9CSVQoYyksCisJCQlSU1RfREVWSUNFU19TRVQgKyBQRVJJUEhfQ0xLX1RPX0VOQl9TRVRfUkVHKGMpKTsKK30KKworCitzdGF0aWMgaW50IHRlZ3JhMl9wZXJpcGhfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcCkKK3sKKwl1MzIgdmFsOworCWNvbnN0IHN0cnVjdCBjbGtfbXV4X3NlbCAqc2VsOworCXByX2RlYnVnKCIlczogJXMgJXNcbiIsIF9fZnVuY19fLCBjLT5uYW1lLCBwLT5uYW1lKTsKKwlmb3IgKHNlbCA9IGMtPmlucHV0czsgc2VsLT5pbnB1dCAhPSBOVUxMOyBzZWwrKykgeworCQlpZiAoc2VsLT5pbnB1dCA9PSBwKSB7CisJCQljbGtfcmVwYXJlbnQoYywgcCk7CisJCQl2YWwgPSBjbGtfcmVhZGwoYy0+cmVnKTsKKwkJCXZhbCAmPSB+UEVSSVBIX0NMS19TT1VSQ0VfTUFTSzsKKwkJCXZhbCB8PSAoc2VsLT52YWx1ZSkgPDwgUEVSSVBIX0NMS19TT1VSQ0VfU0hJRlQ7CisJCQljbGtfd3JpdGVsKHZhbCwgYy0+cmVnKTsKKwkJCWMtPnJhdGUgPSBjLT5wYXJlbnQtPnJhdGU7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHRlZ3JhMl9wZXJpcGhfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmMsIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgdmFsOworCWludCBkaXZpZGVyX3U3MTsKKwlwcl9kZWJ1ZygiJXM6ICVsdVxuIiwgX19mdW5jX18sIHJhdGUpOworCWlmIChjLT5mbGFncyAmIERJVl9VNzEpIHsKKwkJZGl2aWRlcl91NzEgPSBjbGtfZGl2NzFfZ2V0X2RpdmlkZXIoYy0+cGFyZW50LCByYXRlKTsKKwkJaWYgKGRpdmlkZXJfdTcxID49IDApIHsKKwkJCXZhbCA9IGNsa19yZWFkbChjLT5yZWcpOworCQkJdmFsICY9IH5QRVJJUEhfQ0xLX1NPVVJDRV9ESVZfTUFTSzsKKwkJCXZhbCB8PSBkaXZpZGVyX3U3MTsKKwkJCWNsa193cml0ZWwodmFsLCBjLT5yZWcpOworCQkJYy0+ZGl2ID0gZGl2aWRlcl91NzEgKyAyOworCQkJYy0+bXVsID0gMjsKKwkJCXRlZ3JhMl9jbGtfcmVjYWxjdWxhdGVfcmF0ZShjKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgdGVncmFfcGVyaXBoX2Nsa19vcHMgPSB7CisJLmluaXQJCQk9ICZ0ZWdyYTJfcGVyaXBoX2Nsa19pbml0LAorCS5lbmFibGUJCQk9ICZ0ZWdyYTJfcGVyaXBoX2Nsa19lbmFibGUsCisJLmRpc2FibGUJCT0gJnRlZ3JhMl9wZXJpcGhfY2xrX2Rpc2FibGUsCisJLnNldF9wYXJlbnQJCT0gJnRlZ3JhMl9wZXJpcGhfY2xrX3NldF9wYXJlbnQsCisJLnNldF9yYXRlCQk9ICZ0ZWdyYTJfcGVyaXBoX2Nsa19zZXRfcmF0ZSwKKwkucmVjYWxjdWxhdGVfcmF0ZQk9ICZ0ZWdyYTJfY2xrX3JlY2FsY3VsYXRlX3JhdGUsCit9OworCisvKiBDbG9jayBkb3VibGVyIG9wcyAqLworc3RhdGljIHZvaWQgdGVncmEyX2Nsa19kb3VibGVfaW5pdChzdHJ1Y3QgY2xrICpjKQoreworCWMtPm11bCA9IDI7CisJYy0+ZGl2ID0gMTsKKwljLT5zdGF0ZSA9IE9OOworCWlmICghKGNsa19yZWFkbChDTEtfT1VUX0VOQiArIFBFUklQSF9DTEtfVE9fRU5CX1JFRyhjKSkgJgorCQkJUEVSSVBIX0NMS19UT19FTkJfQklUKGMpKSkKKwkJYy0+c3RhdGUgPSBPRkY7CisJdGVncmEyX2Nsa19yZWNhbGN1bGF0ZV9yYXRlKGMpOworfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHRlZ3JhX2Nsa19kb3VibGVfb3BzID0geworCS5pbml0CQkJPSAmdGVncmEyX2Nsa19kb3VibGVfaW5pdCwKKwkuZW5hYmxlCQkJPSAmdGVncmEyX3BlcmlwaF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCQk9ICZ0ZWdyYTJfcGVyaXBoX2Nsa19kaXNhYmxlLAorCS5yZWNhbGN1bGF0ZV9yYXRlCT0gJnRlZ3JhMl9jbGtfcmVjYWxjdWxhdGVfcmF0ZSwKK307CisKKy8qIENsb2NrIGRlZmluaXRpb25zICovCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9jbGtfMzJrID0geworCS5uYW1lID0gImNsa18zMmsiLAorCS5yYXRlID0gMzI2NzgsCisJLm9wcyAgPSBOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfcGxsX3RhYmxlIHRlZ3JhX3BsbF9zX3RhYmxlW10gPSB7CisJezMyNzY4LCAxMjAwMDAwMCwgMzY2LCAxLCAxLCAwfSwKKwl7MzI3NjgsIDEzMDAwMDAwLCAzOTcsIDEsIDEsIDB9LAorCXszMjc2OCwgMTkyMDAwMDAsIDU4NiwgMSwgMSwgMH0sCisJezMyNzY4LCAyNjAwMDAwMCwgNzkzLCAxLCAxLCAwfSwKKwl7MCwgMCwgMCwgMCwgMCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfcyA9IHsKKwkubmFtZSAgICAgID0gInBsbF9zIiwKKwkuZmxhZ3MgICAgID0gUExMX0FMVF9NSVNDX1JFRywKKwkub3BzICAgICAgID0gJnRlZ3JhX3BsbF9vcHMsCisJLnJlZyAgICAgICA9IDB4ZjAsCisJLmlucHV0X21pbiA9IDMyNzY4LAorCS5pbnB1dF9tYXggPSAzMjc2OCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX2Nsa18zMmssCisJLmNmX21pbiAgICA9IDAsIC8qIEZJWE1FICovCisJLmNmX21heCAgICA9IDAsIC8qIEZJWE1FICovCisJLnZjb19taW4gICA9IDEyMDAwMDAwLAorCS52Y29fbWF4ICAgPSAyNjAwMDAwMCwKKwkucGxsX3RhYmxlID0gdGVncmFfcGxsX3NfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19tdXhfc2VsIHRlZ3JhX2Nsa19tX3NlbFtdID0geworCXsgLmlucHV0ID0gJnRlZ3JhX2Nsa18zMmssIC52YWx1ZSA9IDB9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9zLCAgLnZhbHVlID0gMX0sCisJeyAwLCAwfSwKK307CitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9jbGtfbSA9IHsKKwkubmFtZSAgICAgID0gImNsa19tIiwKKwkuZmxhZ3MgICAgID0gRU5BQkxFX09OX0lOSVQsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9jbGtfbV9vcHMsCisJLmlucHV0cyAgICA9IHRlZ3JhX2Nsa19tX3NlbCwKKwkucmVnICAgICAgID0gMHgxZmMsCisJLnJlZ19tYXNrICA9ICgxPDwyOCksCisJLnJlZ19zaGlmdCA9IDI4LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfcGxsX3RhYmxlIHRlZ3JhX3BsbF9jX3RhYmxlW10gPSB7CisJeyAwLCAwLCAwLCAwLCAwLCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfYyA9IHsKKwkubmFtZSAgICAgID0gInBsbF9jIiwKKwkuZmxhZ3MJICAgPSBQTExfSEFTX0NQQ09OLAorCS5vcHMgICAgICAgPSAmdGVncmFfcGxsX29wcywKKwkucmVnICAgICAgID0gMHg4MCwKKwkuaW5wdXRfbWluID0gMjAwMDAwMCwKKwkuaW5wdXRfbWF4ID0gMzEwMDAwMDAsCisJLnBhcmVudCAgICA9ICZ0ZWdyYV9jbGtfbSwKKwkuY2ZfbWluICAgID0gMTAwMDAwMCwKKwkuY2ZfbWF4ICAgID0gNjAwMDAwMCwKKwkudmNvX21pbiAgID0gMjAwMDAwMDAsCisJLnZjb19tYXggICA9IDE0MDAwMDAwMDAsCisJLnBsbF90YWJsZSA9IHRlZ3JhX3BsbF9jX3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX2Nfb3V0MSA9IHsKKwkubmFtZSAgICAgID0gInBsbF9jX291dDEiLAorCS5vcHMgICAgICAgPSAmdGVncmFfcGxsX2Rpdl9vcHMsCisJLmZsYWdzICAgICA9IERJVl9VNzEsCisJLnBhcmVudCAgICA9ICZ0ZWdyYV9wbGxfYywKKwkucmVnICAgICAgID0gMHg4NCwKKwkucmVnX3NoaWZ0ID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3BsbF90YWJsZSB0ZWdyYV9wbGxfbV90YWJsZVtdID0geworCXsgMCwgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX20gPSB7CisJLm5hbWUgICAgICA9ICJwbGxfbSIsCisJLmZsYWdzICAgICA9IFBMTF9IQVNfQ1BDT04sCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfb3BzLAorCS5yZWcgICAgICAgPSAweDkwLAorCS5pbnB1dF9taW4gPSAyMDAwMDAwLAorCS5pbnB1dF9tYXggPSAzMTAwMDAwMCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX2Nsa19tLAorCS5jZl9taW4gICAgPSAxMDAwMDAwLAorCS5jZl9tYXggICAgPSA2MDAwMDAwLAorCS52Y29fbWluICAgPSAyMDAwMDAwMCwKKwkudmNvX21heCAgID0gMTIwMDAwMDAwMCwKKwkucGxsX3RhYmxlID0gdGVncmFfcGxsX21fdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfbV9vdXQxID0geworCS5uYW1lICAgICAgPSAicGxsX21fb3V0MSIsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfZGl2X29wcywKKwkuZmxhZ3MgICAgID0gRElWX1U3MSwKKwkucGFyZW50ICAgID0gJnRlZ3JhX3BsbF9tLAorCS5yZWcgICAgICAgPSAweDk0LAorCS5yZWdfc2hpZnQgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfcGxsX3RhYmxlIHRlZ3JhX3BsbF9wX3RhYmxlW10gPSB7CisJeyAxMjAwMDAwMCwgMjE2MDAwMDAwLCA0MzIsIDEyLCAyLCA4fSwKKwl7IDEzMDAwMDAwLCAyMTYwMDAwMDAsIDQzMiwgMTMsIDIsIDh9LAorCXsgMTkyMDAwMDAsIDIxNjAwMDAwMCwgOTAsICAgNCwgMiwgMX0sCisJeyAyNjAwMDAwMCwgMjE2MDAwMDAwLCA0MzIsIDI2LCAyLCA4fSwKKwl7IDEyMDAwMDAwLCA0MzIwMDAwMDAsIDQzMiwgMTIsIDEsIDh9LAorCXsgMTMwMDAwMDAsIDQzMjAwMDAwMCwgNDMyLCAxMywgMSwgOH0sCisJeyAxOTIwMDAwMCwgNDMyMDAwMDAwLCA5MCwgICA0LCAxLCAxfSwKKwl7IDI2MDAwMDAwLCA0MzIwMDAwMDAsIDQzMiwgMjYsIDEsIDh9LAorCXsgMCwgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX3AgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfcCIsCisJLmZsYWdzICAgICA9IEVOQUJMRV9PTl9JTklUIHwgUExMX0ZJWEVEIHwgUExMX0hBU19DUENPTiwKKwkub3BzICAgICAgID0gJnRlZ3JhX3BsbF9vcHMsCisJLnJlZyAgICAgICA9IDB4YTAsCisJLmlucHV0X21pbiA9IDIwMDAwMDAsCisJLmlucHV0X21heCA9IDMxMDAwMDAwLAorCS5wYXJlbnQgICAgPSAmdGVncmFfY2xrX20sCisJLmNmX21pbiAgICA9IDEwMDAwMDAsCisJLmNmX21heCAgICA9IDYwMDAwMDAsCisJLnZjb19taW4gICA9IDIwMDAwMDAwLAorCS52Y29fbWF4ICAgPSAxNDAwMDAwMDAwLAorCS5wbGxfdGFibGUgPSB0ZWdyYV9wbGxfcF90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRlZ3JhX3BsbF9wX291dDEgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfcF9vdXQxIiwKKwkub3BzICAgICAgID0gJnRlZ3JhX3BsbF9kaXZfb3BzLAorCS5mbGFncyAgICAgPSBFTkFCTEVfT05fSU5JVCB8IERJVl9VNzEgfCBESVZfVTcxX0ZJWEVELAorCS5wYXJlbnQgICAgPSAmdGVncmFfcGxsX3AsCisJLnJlZyAgICAgICA9IDB4YTQsCisJLnJlZ19zaGlmdCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfcF9vdXQyID0geworCS5uYW1lICAgICAgPSAicGxsX3Bfb3V0MiIsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfZGl2X29wcywKKwkuZmxhZ3MgICAgID0gRU5BQkxFX09OX0lOSVQgfCBESVZfVTcxIHwgRElWX1U3MV9GSVhFRCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX3BsbF9wLAorCS5yZWcgICAgICAgPSAweGE0LAorCS5yZWdfc2hpZnQgPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRlZ3JhX3BsbF9wX291dDMgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfcF9vdXQzIiwKKwkub3BzICAgICAgID0gJnRlZ3JhX3BsbF9kaXZfb3BzLAorCS5mbGFncyAgICAgPSBFTkFCTEVfT05fSU5JVCB8IERJVl9VNzEgfCBESVZfVTcxX0ZJWEVELAorCS5wYXJlbnQgICAgPSAmdGVncmFfcGxsX3AsCisJLnJlZyAgICAgICA9IDB4YTgsCisJLnJlZ19zaGlmdCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfcF9vdXQ0ID0geworCS5uYW1lICAgICAgPSAicGxsX3Bfb3V0NCIsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfZGl2X29wcywKKwkuZmxhZ3MgICAgID0gRU5BQkxFX09OX0lOSVQgfCBESVZfVTcxIHwgRElWX1U3MV9GSVhFRCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX3BsbF9wLAorCS5yZWcgICAgICAgPSAweGE4LAorCS5yZWdfc2hpZnQgPSAxNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3BsbF90YWJsZSB0ZWdyYV9wbGxfYV90YWJsZVtdID0geworCXsgMjg4MDAwMDAsIDU2NDQ4MDAwLCA0OSwgMjUsIDEsIDF9LAorCXsgMjg4MDAwMDAsIDczNzI4MDAwLCA2NCwgMjUsIDEsIDF9LAorCXsgMjg4MDAwMDAsIDExMjg5NjAwLCA0OSwgMjUsIDEsIDF9LAorCXsgMjg4MDAwMDAsIDEyMjg4MDAwLCA2NCwgMjUsIDEsIDF9LAorCXsgMCwgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX2EgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfYSIsCisJLmZsYWdzICAgICA9IFBMTF9IQVNfQ1BDT04sCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfb3BzLAorCS5yZWcgICAgICAgPSAweGIwLAorCS5pbnB1dF9taW4gPSAyMDAwMDAwLAorCS5pbnB1dF9tYXggPSAzMTAwMDAwMCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX3BsbF9wX291dDEsCisJLmNmX21pbiAgICA9IDEwMDAwMDAsCisJLmNmX21heCAgICA9IDYwMDAwMDAsCisJLnZjb19taW4gICA9IDIwMDAwMDAwLAorCS52Y29fbWF4ICAgPSAxNDAwMDAwMDAwLAorCS5wbGxfdGFibGUgPSB0ZWdyYV9wbGxfYV90YWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRlZ3JhX3BsbF9hX291dDAgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfYV9vdXQwIiwKKwkub3BzICAgICAgID0gJnRlZ3JhX3BsbF9kaXZfb3BzLAorCS5mbGFncyAgICAgPSBESVZfVTcxLAorCS5wYXJlbnQgICAgPSAmdGVncmFfcGxsX2EsCisJLnJlZyAgICAgICA9IDB4YjQsCisJLnJlZ19zaGlmdCA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19wbGxfdGFibGUgdGVncmFfcGxsX2RfdGFibGVbXSA9IHsKKwl7IDEyMDAwMDAwLCAxMDAwMDAwMDAwLCAxMDAwLCAxMiwgMSwgMTJ9LAorCXsgMTMwMDAwMDAsIDEwMDAwMDAwMDAsIDEwMDAsIDEzLCAxLCAxMn0sCisJeyAxOTIwMDAwMCwgMTAwMDAwMDAwMCwgNjI1LCAgMTIsIDEsIDh9LAorCXsgMjYwMDAwMDAsIDEwMDAwMDAwMDAsIDEwMDAsIDI2LCAxLCAxMn0sCisJeyAwLCAwLCAwLCAwLCAwLCAwIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfZCA9IHsKKwkubmFtZSAgICAgID0gInBsbF9kIiwKKwkuZmxhZ3MgICAgID0gUExMX0hBU19DUENPTiB8IFBMTEQsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfb3BzLAorCS5yZWcgICAgICAgPSAweGQwLAorCS5pbnB1dF9taW4gPSAyMDAwMDAwLAorCS5pbnB1dF9tYXggPSA0MDAwMDAwMCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX2Nsa19tLAorCS5jZl9taW4gICAgPSAxMDAwMDAwLAorCS5jZl9tYXggICAgPSA2MDAwMDAwLAorCS52Y29fbWluICAgPSA0MDAwMDAwMCwKKwkudmNvX21heCAgID0gMTAwMDAwMDAwMCwKKwkucGxsX3RhYmxlID0gdGVncmFfcGxsX2RfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9wbGxfZF9vdXQwID0geworCS5uYW1lICAgICAgPSAicGxsX2Rfb3V0MCIsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfZGl2X29wcywKKwkuZmxhZ3MgICAgID0gRElWXzIgfCBQTExELAorCS5wYXJlbnQgICAgPSAmdGVncmFfcGxsX2QsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19wbGxfdGFibGUgdGVncmFfcGxsX3VfdGFibGVbXSA9IHsKKwl7IDEyMDAwMDAwLCA0ODAwMDAwMDAsIDk2MCwgMTIsIDEsIDB9LAorCXsgMTMwMDAwMDAsIDQ4MDAwMDAwMCwgOTYwLCAxMywgMSwgMH0sCisJeyAxOTIwMDAwMCwgNDgwMDAwMDAwLCAyMDAsIDQsICAxLCAwfSwKKwl7IDI2MDAwMDAwLCA0ODAwMDAwMDAsIDk2MCwgMjYsIDEsIDB9LAorCXsgMCwgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX3UgPSB7CisJLm5hbWUgICAgICA9ICJwbGxfdSIsCisJLmZsYWdzICAgICA9IDAsCisJLm9wcyAgICAgICA9ICZ0ZWdyYV9wbGxfb3BzLAorCS5yZWcgICAgICAgPSAweGMwLAorCS5pbnB1dF9taW4gPSAyMDAwMDAwLAorCS5pbnB1dF9tYXggPSA0MDAwMDAwMCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX2Nsa19tLAorCS5jZl9taW4gICAgPSAxMDAwMDAwLAorCS5jZl9tYXggICAgPSA2MDAwMDAwLAorCS52Y29fbWluICAgPSA0ODAwMDAwMDAsCisJLnZjb19tYXggICA9IDk2MDAwMDAwMCwKKwkucGxsX3RhYmxlID0gdGVncmFfcGxsX3VfdGFibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19wbGxfdGFibGUgdGVncmFfcGxsX3hfdGFibGVbXSA9IHsKKwl7IDEyMDAwMDAwLCAxMDAwMDAwMDAwLCAxMDAwLCAxMiwgMSwgMTJ9LAorCXsgMTMwMDAwMDAsIDEwMDAwMDAwMDAsIDEwMDAsIDEzLCAxLCAxMn0sCisJeyAxOTIwMDAwMCwgMTAwMDAwMDAwMCwgNjI1LCAgMTIsIDEsIDh9LAorCXsgMjYwMDAwMDAsIDEwMDAwMDAwMDAsIDEwMDAsIDI2LCAxLCAxMn0sCisJeyAxMjAwMDAwMCwgNzUwMDAwMDAwLCAgNzUwLCAgMTIsIDEsIDEyfSwKKwl7IDEzMDAwMDAwLCA3NTAwMDAwMDAsICA3NTAsICAxMywgMSwgMTJ9LAorCXsgMTkyMDAwMDAsIDc1MDAwMDAwMCwgIDYyNSwgIDE2LCAxLCA4fSwKKwl7IDI2MDAwMDAwLCA3NTAwMDAwMDAsICA3NTAsICAyNiwgMSwgMTJ9LAorCXsgMCwgMCwgMCwgMCwgMCwgMCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfcGxsX3ggPSB7CisJLm5hbWUgICAgICA9ICJwbGxfeCIsCisJLmZsYWdzICAgICA9IFBMTF9IQVNfQ1BDT04gfCBQTExfQUxUX01JU0NfUkVHLAorCS5vcHMgICAgICAgPSAmdGVncmFfcGxsX29wcywKKwkucmVnICAgICAgID0gMHhlMCwKKwkuaW5wdXRfbWluID0gMjAwMDAwMCwKKwkuaW5wdXRfbWF4ID0gMzEwMDAwMDAsCisJLnBhcmVudCAgICA9ICZ0ZWdyYV9jbGtfbSwKKwkuY2ZfbWluICAgID0gMTAwMDAwMCwKKwkuY2ZfbWF4ICAgID0gNjAwMDAwMCwKKwkudmNvX21pbiAgID0gMjAwMDAwMDAsCisJLnZjb19tYXggICA9IDEyMDAwMDAwMDAsCisJLnBsbF90YWJsZSA9IHRlZ3JhX3BsbF94X3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfY2xrX2QgPSB7CisJLm5hbWUgICAgICA9ICJjbGtfZCIsCisJLmZsYWdzICAgICA9IFBFUklQSF9OT19SRVNFVCwKKwkub3BzICAgICAgID0gJnRlZ3JhX2Nsa19kb3VibGVfb3BzLAorCS5jbGtfbnVtICAgPSA5MCwKKwkucmVnICAgICAgID0gMHgzNCwKKwkucmVnX3NoaWZ0ID0gMTIsCisJLnBhcmVudCAgICA9ICZ0ZWdyYV9jbGtfbSwKK307CisKKy8qIEZJWE1FOiBuZWVkIHRlZ3JhX2F1ZGlvCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9jbGtfYXVkaW9fMnggPSB7CisJLm5hbWUgICAgICA9ICJjbGtfZCIsCisJLmZsYWdzICAgICA9IFBFUklQSF9OT19SRVNFVCwKKwkub3BzICAgICAgID0gJnRlZ3JhX2Nsa19kb3VibGVfb3BzLAorCS5jbGtfbnVtICAgPSA4OSwKKwkucmVnICAgICAgID0gMHgzNCwKKwkucmVnX3NoaWZ0ID0gOCwKKwkucGFyZW50ICAgID0gJnRlZ3JhX2F1ZGlvLAorfQorKi8KKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfY2Nsa1tdID0geworCXsgLmlucHV0ID0gJnRlZ3JhX2Nsa19tLAkudmFsdWUgPSAwfSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfYywJLnZhbHVlID0gMX0sCisJeyAuaW5wdXQgPSAmdGVncmFfY2xrXzMyaywJLnZhbHVlID0gMn0sCisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX20sCS52YWx1ZSA9IDN9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wLAkudmFsdWUgPSA0fSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfcF9vdXQ0LAkudmFsdWUgPSA1fSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfcF9vdXQzLAkudmFsdWUgPSA2fSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9jbGtfZCwJLnZhbHVlID0gN30sCisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX3gsCS52YWx1ZSA9IDh9LAorCXsgMCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa19tdXhfc2VsIG11eF9zY2xrW10gPSB7CisJeyAuaW5wdXQgPSAmdGVncmFfY2xrX20sCS52YWx1ZSA9IDB9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9jX291dDEsCS52YWx1ZSA9IDF9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wX291dDQsCS52YWx1ZSA9IDJ9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wX291dDMsCS52YWx1ZSA9IDN9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wX291dDIsCS52YWx1ZSA9IDR9LAorCXsgLmlucHV0ID0gJnRlZ3JhX2Nsa19kLAkudmFsdWUgPSA1fSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9jbGtfMzJrLAkudmFsdWUgPSA2fSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfbV9vdXQxLAkudmFsdWUgPSA3fSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGVncmFfY2xrX2NwdSA9IHsKKwkubmFtZQk9ICJjcHUiLAorCS5pbnB1dHMJPSBtdXhfY2NsaywKKwkucmVnCT0gMHgyMCwKKwkub3BzCT0gJnRlZ3JhX3N1cGVyX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRlZ3JhX2Nsa19zeXMgPSB7CisJLm5hbWUJPSAic3lzIiwKKwkuaW5wdXRzCT0gbXV4X3NjbGssCisJLnJlZwk9IDB4MjgsCisJLm9wcwk9ICZ0ZWdyYV9zdXBlcl9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0ZWdyYV9jbGtfaGNsayA9IHsKKwkubmFtZQkJPSAiaGNsayIsCisJLmZsYWdzCQk9IERJVl9CVVMsCisJLnBhcmVudAkJPSAmdGVncmFfY2xrX3N5cywKKwkucmVnCQk9IDB4MzAsCisJLnJlZ19zaGlmdAk9IDQsCisJLm9wcwkJPSAmdGVncmFfYnVzX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRlZ3JhX2Nsa19wY2xrID0geworCS5uYW1lCQk9ICJwY2xrIiwKKwkuZmxhZ3MJCT0gRElWX0JVUywKKwkucGFyZW50CQk9ICZ0ZWdyYV9jbGtfaGNsaywKKwkucmVnCQk9IDB4MzAsCisJLnJlZ19zaGlmdAk9IDAsCisJLm9wcwkJPSAmdGVncmFfYnVzX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX211eF9zZWwgbXV4X3BsbG1fcGxsY19wbGxwX3BsbGFbXSA9IHsKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfbSwgLnZhbHVlID0gMH0sCisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX2MsIC52YWx1ZSA9IDF9LAorCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wLCAudmFsdWUgPSAyfSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfYV9vdXQwLCAudmFsdWUgPSAzfSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfcGxsbV9wbGxjX3BsbHBfY2xrbVtdID0geworCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9tLCAudmFsdWUgPSAwfSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfYywgLnZhbHVlID0gMX0sCisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX3AsIC52YWx1ZSA9IDJ9LAorCXsgLmlucHV0ID0gJnRlZ3JhX2Nsa19tLCAudmFsdWUgPSAzfSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfcGxscF9wbGxjX3BsbG1fY2xrbVtdID0geworCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wLCAudmFsdWUgPSAwfSwKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9wbGxfYywgLnZhbHVlID0gMX0sCisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX20sIC52YWx1ZSA9IDJ9LAorCXsgLmlucHV0ID0gJnRlZ3JhX2Nsa19tLCAudmFsdWUgPSAzfSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfcGxsYV9hdWRpb19wbGxwX2Nsa21bXSA9IHsKKwl7LmlucHV0ID0gJnRlZ3JhX3BsbF9hLCAudmFsdWUgPSAwfSwKKwkvKiBGSVhNRTogbm8gbXV4IGRlZmluZWQgZm9yIHRlZ3JhX2F1ZGlvCisJey5pbnB1dCA9ICZ0ZWdyYV9hdWRpbywgLnZhbHVlID0gMX0sKi8KKwl7LmlucHV0ID0gJnRlZ3JhX3BsbF9wLCAudmFsdWUgPSAyfSwKKwl7LmlucHV0ID0gJnRlZ3JhX2Nsa19tLCAudmFsdWUgPSAzfSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfcGxscF9wbGxkX3BsbGNfY2xrbVtdID0geworCXsuaW5wdXQgPSAmdGVncmFfcGxsX3AsIC52YWx1ZSA9IDB9LAorCXsuaW5wdXQgPSAmdGVncmFfcGxsX2Rfb3V0MCwgLnZhbHVlID0gMX0sCisJey5pbnB1dCA9ICZ0ZWdyYV9wbGxfYywgLnZhbHVlID0gMn0sCisJey5pbnB1dCA9ICZ0ZWdyYV9jbGtfbSwgLnZhbHVlID0gM30sCisJeyAwLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX211eF9zZWwgbXV4X3BsbHBfcGxsY19hdWRpb19jbGttX2NsazMyW10gPSB7CisJey5pbnB1dCA9ICZ0ZWdyYV9wbGxfcCwgICAgIC52YWx1ZSA9IDB9LAorCXsuaW5wdXQgPSAmdGVncmFfcGxsX2MsICAgICAudmFsdWUgPSAxfSwKKwkvKiBGSVhNRTogbm8gbXV4IGRlZmluZWQgZm9yIHRlZ3JhX2F1ZGlvCisJey5pbnB1dCA9ICZ0ZWdyYV9hdWRpbywgICAgIC52YWx1ZSA9IDJ9LCovCisJey5pbnB1dCA9ICZ0ZWdyYV9jbGtfbSwgICAgIC52YWx1ZSA9IDN9LAorCXsuaW5wdXQgPSAmdGVncmFfY2xrXzMyaywgICAudmFsdWUgPSA0fSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfcGxscF9wbGxjX3BsbG1bXSA9IHsKKwl7LmlucHV0ID0gJnRlZ3JhX3BsbF9wLCAgICAgLnZhbHVlID0gMH0sCisJey5pbnB1dCA9ICZ0ZWdyYV9wbGxfYywgICAgIC52YWx1ZSA9IDF9LAorCXsuaW5wdXQgPSAmdGVncmFfcGxsX20sICAgICAudmFsdWUgPSAyfSwKKwl7IDAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfbXV4X3NlbCBtdXhfY2xrX21bXSA9IHsKKwl7IC5pbnB1dCA9ICZ0ZWdyYV9jbGtfbSwgLnZhbHVlID0gMH0sCisJeyAwLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX211eF9zZWwgbXV4X3BsbHBfb3V0M1tdID0geworCXsgLmlucHV0ID0gJnRlZ3JhX3BsbF9wX291dDMsIC52YWx1ZSA9IDB9LAorCXsgMCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa19tdXhfc2VsIG11eF9wbGxkW10gPSB7CisJeyAuaW5wdXQgPSAmdGVncmFfcGxsX2QsIC52YWx1ZSA9IDB9LAorCXsgMCwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa19tdXhfc2VsIG11eF9jbGtfMzJrW10gPSB7CisJeyAuaW5wdXQgPSAmdGVncmFfY2xrXzMyaywgLnZhbHVlID0gMH0sCisJeyAwLCAwfSwKK307CisKKyNkZWZpbmUgUEVSSVBIX0NMSyhfbmFtZSwgX2RldiwgX2NvbiwgX2Nsa19udW0sIF9yZWcsIF9pbnB1dHMsIF9mbGFncykgXAorCXsJCQkJCQlcCisJCS5uYW1lICAgICAgPSBfbmFtZSwJCQlcCisJCS5sb29rdXAgICAgPSB7CQkJCVwKKwkJCS5kZXZfaWQgICAgPSBfZGV2LAkJXAorCQkJLmNvbl9pZAkgICA9IF9jb24sCQlcCisJCX0sCQkJCQlcCisJCS5vcHMgICAgICAgPSAmdGVncmFfcGVyaXBoX2Nsa19vcHMsCVwKKwkJLmNsa19udW0gICA9IF9jbGtfbnVtLAkJCVwKKwkJLnJlZyAgICAgICA9IF9yZWcsCQkJXAorCQkuaW5wdXRzICAgID0gX2lucHV0cywJCQlcCisJCS5mbGFncyAgICAgPSBfZmxhZ3MsCQkJXAorCX0KKworc3RydWN0IGNsayB0ZWdyYV9wZXJpcGhfY2xrc1tdID0geworCVBFUklQSF9DTEsoInJ0YyIsCSJydGMtdGVncmEiLAkJTlVMTCwJNCwJMCwJbXV4X2Nsa18zMmssCQkJUEVSSVBIX05PX1JFU0VUKSwKKwlQRVJJUEhfQ0xLKCJ0aW1lciIsCSJ0aW1lciIsCQlOVUxMLAk1LAkwLAltdXhfY2xrX20sCQkJMCksCisJUEVSSVBIX0NMSygiaTJzMSIsCSJpMnMuMCIsCQlOVUxMLAkxMSwJMHgxMDAsCW11eF9wbGxhX2F1ZGlvX3BsbHBfY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygiaTJzMiIsCSJpMnMuMSIsCQlOVUxMLAkxOCwJMHgxMDQsCW11eF9wbGxhX2F1ZGlvX3BsbHBfY2xrbSwJTVVYIHwgRElWX1U3MSksCisJLyogRklYTUU6IHNwZGlmIGhhcyAyIGNsb2NrcyBidXQgMSBlbmFibGUgKi8KKwlQRVJJUEhfQ0xLKCJzcGRpZl9vdXQiLAkic3BkaWZfb3V0IiwJCU5VTEwsCTEwLAkweDEwOCwJbXV4X3BsbGFfYXVkaW9fcGxscF9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzcGRpZl9pbiIsCSJzcGRpZl9pbiIsCQlOVUxMLAkxMCwJMHgxMGMsCW11eF9wbGxwX3BsbGNfcGxsbSwJCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInB3bSIsCSJwd20iLAkJCU5VTEwsCTE3LAkweDExMCwJbXV4X3BsbHBfcGxsY19hdWRpb19jbGttX2NsazMyLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzcGkiLAkic3BpIiwJCQlOVUxMLAk0MywJMHgxMTQsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJ4aW8iLAkieGlvIiwJCQlOVUxMLAk0NSwJMHgxMjAsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJ0d2MiLAkidHdjIiwJCQlOVUxMLAkxNiwJMHgxMmMsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzYmMxIiwJInNwaV90ZWdyYS4wIiwJCU5VTEwsCTQxLAkweDEzNCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInNiYzIiLAkic3BpX3RlZ3JhLjEiLAkJTlVMTCwJNDQsCTB4MTE4LAltdXhfcGxscF9wbGxjX3BsbG1fY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygic2JjMyIsCSJzcGlfdGVncmEuMiIsCQlOVUxMLAk0NiwJMHgxMWMsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzYmM0IiwJInNwaV90ZWdyYS4zIiwJCU5VTEwsCTY4LAkweDFiNCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImlkZSIsCSJpZGUiLAkJCU5VTEwsCTI1LAkweDE0NCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoIm5kZmxhc2giLAkidGVncmFfbmFuZCIsCQlOVUxMLAkxMywJMHgxNjAsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwkvKiBGSVhNRTogdmZpciBzaGFyZXMgYW4gZW5hYmxlIHdpdGggdWFydGIgKi8KKwlQRVJJUEhfQ0xLKCJ2ZmlyIiwJInZmaXIiLAkJCU5VTEwsCTcsCTB4MTY4LAltdXhfcGxscF9wbGxjX3BsbG1fY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygic2RtbWMxIiwJInNkaGNpLXRlZ3JhLjAiLAlOVUxMLAkxNCwJMHgxNTAsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzZG1tYzIiLAkic2RoY2ktdGVncmEuMSIsCU5VTEwsCTksCTB4MTU0LAltdXhfcGxscF9wbGxjX3BsbG1fY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygic2RtbWMzIiwJInNkaGNpLXRlZ3JhLjIiLAlOVUxMLAk2OSwJMHgxYmMsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJzZG1tYzQiLAkic2RoY2ktdGVncmEuMyIsCU5VTEwsCTE1LAkweDE2MCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInZkZSIsCSJ2ZGUiLAkJCU5VTEwsCTYxLAkweDFjOCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImNzaXRlIiwJImNzaXRlIiwJCU5VTEwsCTczLAkweDFkNCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCS8qIEZJWE1FOiB3aGF0IGlzIGxhPyAqLworCVBFUklQSF9DTEsoImxhIiwJImxhIiwJCQlOVUxMLAk3NiwJMHgxZjgsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJvd3IiLAkib3dyIiwJCQlOVUxMLAk3MSwJMHgxY2MsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJub3IiLAkibm9yIiwJCQlOVUxMLAk0MiwJMHgxZDAsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJtaXBpIiwJIm1pcGkiLAkJCU5VTEwsCTUwLAkweDE3NCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImkyYzEiLAkidGVncmEtaTJjLjAiLAkJTlVMTCwJMTIsCTB4MTI0LAltdXhfcGxscF9wbGxjX3BsbG1fY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygiaTJjMiIsCSJ0ZWdyYS1pMmMuMSIsCQlOVUxMLAk1NCwJMHgxOTgsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJpMmMzIiwJInRlZ3JhLWkyYy4yIiwJCU5VTEwsCTY3LAkweDFiOCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImR2YyIsCSJ0ZWdyYS1pMmMuMyIsCQlOVUxMLAk0NywJMHgxMjgsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJpMmMxX2kyYyIsCSJ0ZWdyYS1pMmMuMCIsCQkiaTJjIiwJMCwJMCwJbXV4X3BsbHBfb3V0MywJCQkwKSwKKwlQRVJJUEhfQ0xLKCJpMmMyX2kyYyIsCSJ0ZWdyYS1pMmMuMSIsCQkiaTJjIiwJMCwJMCwJbXV4X3BsbHBfb3V0MywJCQkwKSwKKwlQRVJJUEhfQ0xLKCJpMmMzX2kyYyIsCSJ0ZWdyYS1pMmMuMiIsCQkiaTJjIiwJMCwJMCwJbXV4X3BsbHBfb3V0MywJCQkwKSwKKwlQRVJJUEhfQ0xLKCJkdmNfaTJjIiwJInRlZ3JhLWkyYy4zIiwJCSJpMmMiLAkwLAkwLAltdXhfcGxscF9vdXQzLAkJCTApLAorCVBFUklQSF9DTEsoInVhcnRhIiwJInVhcnQuMCIsCQlOVUxMLAk2LAkweDE3OCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInVhcnRiIiwJInVhcnQuMSIsCQlOVUxMLAk3LAkweDE3YywJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInVhcnRjIiwJInVhcnQuMiIsCQlOVUxMLAk1NSwJMHgxYTAsCW11eF9wbGxwX3BsbGNfcGxsbV9jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJ1YXJ0ZCIsCSJ1YXJ0LjMiLAkJTlVMTCwJNjUsCTB4MWMwLAltdXhfcGxscF9wbGxjX3BsbG1fY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygidWFydGUiLAkidWFydC40IiwJCU5VTEwsCTY2LAkweDFjNCwJbXV4X3BsbHBfcGxsY19wbGxtX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoIjNkIiwJIjNkIiwJCQlOVUxMLAkyNCwJMHgxNTgsCW11eF9wbGxtX3BsbGNfcGxscF9wbGxhLAlNVVggfCBESVZfVTcxIHwgUEVSSVBIX01BTlVBTF9SRVNFVCksCisJUEVSSVBIX0NMSygiMmQiLAkiMmQiLAkJCU5VTEwsCTIxLAkweDE1YywJbXV4X3BsbG1fcGxsY19wbGxwX3BsbGEsCU1VWCB8IERJVl9VNzEpLAorCS8qIEZJWE1FOiB2aSBhbmQgdmlfc2Vuc29yIHNoYXJlIGFuIGVuYWJsZSAqLworCVBFUklQSF9DTEsoInZpIiwJInZpIiwJCQlOVUxMLAkyMCwJMHgxNDgsCW11eF9wbGxtX3BsbGNfcGxscF9wbGxhLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJ2aV9zZW5zb3IiLAkidmlfc2Vuc29yIiwJCU5VTEwsCTIwLAkweDFhOCwJbXV4X3BsbG1fcGxsY19wbGxwX3BsbGEsCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImVwcCIsCSJlcHAiLAkJCU5VTEwsCTE5LAkweDE2YywJbXV4X3BsbG1fcGxsY19wbGxwX3BsbGEsCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoIm1wZSIsCSJtcGUiLAkJCU5VTEwsCTYwLAkweDE3MCwJbXV4X3BsbG1fcGxsY19wbGxwX3BsbGEsCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImhvc3QxeCIsCSJob3N0MXgiLAkJTlVMTCwJMjgsCTB4MTgwLAltdXhfcGxsbV9wbGxjX3BsbHBfcGxsYSwJTVVYIHwgRElWX1U3MSksCisJLyogRklYTUU6IGN2ZSBhbmQgdHZvIHNoYXJlIGFuIGVuYWJsZQkqLworCVBFUklQSF9DTEsoImN2ZSIsCSJjdmUiLAkJCU5VTEwsCTQ5LAkweDE0MCwJbXV4X3BsbHBfcGxsZF9wbGxjX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoInR2byIsCSJ0dm8iLAkJCU5VTEwsCTQ5LAkweDE4OCwJbXV4X3BsbHBfcGxsZF9wbGxjX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImhkbWkiLAkiaGRtaSIsCQkJTlVMTCwJNTEsCTB4MThjLAltdXhfcGxscF9wbGxkX3BsbGNfY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygidHZkYWMiLAkidHZkYWMiLAkJTlVMTCwJNTMsCTB4MTk0LAltdXhfcGxscF9wbGxkX3BsbGNfY2xrbSwJTVVYIHwgRElWX1U3MSksCisJUEVSSVBIX0NMSygiZGlzcDEiLAkidGVncmFmYi4wIiwJCU5VTEwsCTI3LAkweDEzOCwJbXV4X3BsbHBfcGxsZF9wbGxjX2Nsa20sCU1VWCB8IERJVl9VNzEpLAorCVBFUklQSF9DTEsoImRpc3AyIiwJInRlZ3JhZmIuMSIsCQlOVUxMLAkyNiwJMHgxM2MsCW11eF9wbGxwX3BsbGRfcGxsY19jbGttLAlNVVggfCBESVZfVTcxKSwKKwlQRVJJUEhfQ0xLKCJ1c2JkIiwJImZzbC10ZWdyYS11ZGMiLAlOVUxMLAkyMiwJMCwJbXV4X2Nsa19tLAkJCTApLAorCVBFUklQSF9DTEsoInVzYjIiLAkidXNiLjEiLAkJTlVMTCwJNTgsCTAsCW11eF9jbGtfbSwJCQkwKSwKKwlQRVJJUEhfQ0xLKCJ1c2IzIiwJInVzYi4yIiwJCU5VTEwsCTU5LAkwLAltdXhfY2xrX20sCQkJMCksCisJUEVSSVBIX0NMSygiZW1jIiwJImVtYyIsCQkJTlVMTCwJNTcsCTB4MTljLAltdXhfcGxsbV9wbGxjX3BsbHBfY2xrbSwJTVVYIHwgRElWX1U3MSB8IFBFUklQSF9FTUNfRU5CKSwKKwlQRVJJUEhfQ0xLKCJkc2kiLAkiZHNpIiwJCQlOVUxMLAk0OCwJMCwJbXV4X3BsbGQsCQkJMCksCit9OworCisjZGVmaW5lIENMS19EVVBMSUNBVEUoX25hbWUsIF9kZXYsIF9jb24pCQlcCisJewkJCQkJCVwKKwkJLm5hbWUJPSBfbmFtZSwJCQlcCisJCS5sb29rdXAJPSB7CQkJCVwKKwkJCS5kZXZfaWQJPSBfZGV2LAkJCVwKKwkJCS5jb25faWQJCT0gX2NvbiwJCVwKKwkJfSwJCQkJCVwKKwl9CisKKy8qIFNvbWUgY2xvY2tzIG1heSBiZSB1c2VkIGJ5IGRpZmZlcmVudCBkcml2ZXJzIGRlcGVuZGluZyBvbiB0aGUgYm9hcmQKKyAqIGNvbmZpZ3VyYXRpb24uICBMaXN0IHRob3NlIGhlcmUgdG8gcmVnaXN0ZXIgdGhlbSB0d2ljZSBpbiB0aGUgY2xvY2sgbG9va3VwCisgKiB0YWJsZSB1bmRlciB0d28gbmFtZXMuCisgKi8KK3N0cnVjdCBjbGtfZHVwbGljYXRlIHRlZ3JhX2Nsa19kdXBsaWNhdGVzW10gPSB7CisJQ0xLX0RVUExJQ0FURSgidWFydGEiLAkidGVncmFfdWFydC4wIiwJTlVMTCksCisJQ0xLX0RVUExJQ0FURSgidWFydGIiLAkidGVncmFfdWFydC4xIiwJTlVMTCksCisJQ0xLX0RVUExJQ0FURSgidWFydGMiLAkidGVncmFfdWFydC4yIiwJTlVMTCksCisJQ0xLX0RVUExJQ0FURSgidWFydGQiLAkidGVncmFfdWFydC4zIiwJTlVMTCksCisJQ0xLX0RVUExJQ0FURSgidWFydGUiLAkidGVncmFfdWFydC40IiwJTlVMTCksCit9OworCisjZGVmaW5lIENMSyhkZXYsIGNvbiwgY2spCVwKKwl7CQkJXAorCQkuZGV2X2lkID0gZGV2LAlcCisJCS5jb25faWQgPSBjb24sCVwKKwkJLmNsayA9IGNrLAlcCisJfQorCitzdHJ1Y3QgY2xrX2xvb2t1cCB0ZWdyYV9jbGtfbG9va3Vwc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiMzJrX2NsayIsCSZ0ZWdyYV9jbGtfMzJrKSwKKwlDTEsoTlVMTCwJInBsbF9zIiwJJnRlZ3JhX3BsbF9zKSwKKwlDTEsoTlVMTCwJImNsa19tIiwJJnRlZ3JhX2Nsa19tKSwKKwlDTEsoTlVMTCwJInBsbF9tIiwJJnRlZ3JhX3BsbF9tKSwKKwlDTEsoTlVMTCwJInBsbF9tX291dDEiLAkmdGVncmFfcGxsX21fb3V0MSksCisJQ0xLKE5VTEwsCSJwbGxfYyIsCSZ0ZWdyYV9wbGxfYyksCisJQ0xLKE5VTEwsCSJwbGxfY19vdXQxIiwJJnRlZ3JhX3BsbF9jX291dDEpLAorCUNMSyhOVUxMLAkicGxsX3AiLAkmdGVncmFfcGxsX3ApLAorCUNMSyhOVUxMLAkicGxsX3Bfb3V0MSIsCSZ0ZWdyYV9wbGxfcF9vdXQxKSwKKwlDTEsoTlVMTCwJInBsbF9wX291dDIiLAkmdGVncmFfcGxsX3Bfb3V0MiksCisJQ0xLKE5VTEwsCSJwbGxfcF9vdXQzIiwJJnRlZ3JhX3BsbF9wX291dDMpLAorCUNMSyhOVUxMLAkicGxsX3Bfb3V0NCIsCSZ0ZWdyYV9wbGxfcF9vdXQ0KSwKKwlDTEsoTlVMTCwJInBsbF9hIiwJJnRlZ3JhX3BsbF9hKSwKKwlDTEsoTlVMTCwJInBsbF9hX291dDAiLAkmdGVncmFfcGxsX2Ffb3V0MCksCisJQ0xLKE5VTEwsCSJwbGxfZCIsCSZ0ZWdyYV9wbGxfZCksCisJQ0xLKE5VTEwsCSJwbGxfZF9vdXQwIiwJJnRlZ3JhX3BsbF9kX291dDApLAorCUNMSyhOVUxMLAkicGxsX3UiLAkmdGVncmFfcGxsX3UpLAorCUNMSyhOVUxMLAkicGxsX3giLAkmdGVncmFfcGxsX3gpLAorCUNMSyhOVUxMLAkiY3B1IiwJCSZ0ZWdyYV9jbGtfY3B1KSwKKwlDTEsoTlVMTCwJInN5cyIsCQkmdGVncmFfY2xrX3N5cyksCisJQ0xLKE5VTEwsCSJoY2xrIiwJCSZ0ZWdyYV9jbGtfaGNsayksCisJQ0xLKE5VTEwsCSJwY2xrIiwJCSZ0ZWdyYV9jbGtfcGNsayksCisJQ0xLKE5VTEwsCSJjbGtfZCIsCSZ0ZWdyYV9jbGtfZCksCit9OworCit2b2lkIF9faW5pdCB0ZWdyYTJfaW5pdF9jbG9ja3Modm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2w7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrX2R1cGxpY2F0ZSAqY2Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZWdyYV9jbGtfbG9va3Vwcyk7IGkrKykgeworCQljbCA9ICZ0ZWdyYV9jbGtfbG9va3Vwc1tpXTsKKwkJY2xrX2luaXQoY2wtPmNsayk7CisJCWNsa2Rldl9hZGQoY2wpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhX3BlcmlwaF9jbGtzKTsgaSsrKSB7CisJCWMgPSAmdGVncmFfcGVyaXBoX2Nsa3NbaV07CisJCWNsID0gJmMtPmxvb2t1cDsKKwkJY2wtPmNsayA9IGM7CisKKwkJY2xrX2luaXQoY2wtPmNsayk7CisJCWNsa2Rldl9hZGQoY2wpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhX2Nsa19kdXBsaWNhdGVzKTsgaSsrKSB7CisJCWNkID0gJnRlZ3JhX2Nsa19kdXBsaWNhdGVzW2ldOworCQljID0gdGVncmFfZ2V0X2Nsb2NrX2J5X25hbWUoY2QtPm5hbWUpOworCQlpZiAoYykgeworCQkJY2wgPSAmY2QtPmxvb2t1cDsKKwkJCWNsLT5jbGsgPSBjOworCQkJY2xrZGV2X2FkZChjbCk7CisJCX0gZWxzZSB7CisJCQlwcl9lcnIoIiVzOiBVbmtub3duIGR1cGxpY2F0ZSBjbG9jayAlc1xuIiwgX19mdW5jX18sCisJCQkJY2QtPm5hbWUpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNDIwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL3RpbWVyLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBhcmNoL2FyY2gvbWFjaC10ZWdyYS90aW1lci5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgorICoKKyAqIEF1dGhvcjoKKyAqCUNvbGluIENyb3NzIDxjY3Jvc3NAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NudDMyX3RvXzYzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbHRpbWVyLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNpbmNsdWRlICJib2FyZC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgVElNRVJVU19DTlRSXzFVUyAweDEwCisjZGVmaW5lIFRJTUVSVVNfVVNFQ19DRkcgMHgxNAorI2RlZmluZSBUSU1FUlVTX0NOVFJfRlJFRVpFIDB4NGMKKworI2RlZmluZSBUSU1FUjFfQkFTRSAweDAKKyNkZWZpbmUgVElNRVIyX0JBU0UgMHg4CisjZGVmaW5lIFRJTUVSM19CQVNFIDB4NTAKKyNkZWZpbmUgVElNRVI0X0JBU0UgMHg1OAorCisjZGVmaW5lIFRJTUVSX1BUViAweDAKKyNkZWZpbmUgVElNRVJfUENSIDB4NAorCitzdHJ1Y3QgdGVncmFfdGltZXI7CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnRpbWVyX3JlZ19iYXNlID0gSU9fQUREUkVTUyhURUdSQV9UTVIxX0JBU0UpOworCisjZGVmaW5lIHRpbWVyX3dyaXRlbCh2YWx1ZSwgcmVnKSBcCisJX19yYXdfd3JpdGVsKHZhbHVlLCAodTMyKXRpbWVyX3JlZ19iYXNlICsgKHJlZykpCisjZGVmaW5lIHRpbWVyX3JlYWRsKHJlZykgXAorCV9fcmF3X3JlYWRsKCh1MzIpdGltZXJfcmVnX2Jhc2UgKyAocmVnKSkKKworc3RhdGljIGludCB0ZWdyYV90aW1lcl9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKKwkJCQkJIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gMHg4MDAwMDAwMCB8ICgoY3ljbGVzID4gMSkgPyAoY3ljbGVzLTEpIDogMCk7CisJdGltZXJfd3JpdGVsKHJlZywgVElNRVIzX0JBU0UgKyBUSU1FUl9QVFYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3RpbWVyX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJCSAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdTMyIHJlZzsKKworCXRpbWVyX3dyaXRlbCgwLCBUSU1FUjNfQkFTRSArIFRJTUVSX1BUVik7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlyZWcgPSAweEMwMDAwMDAwIHwgKCgxMDAwMDAwL0haKS0xKTsKKwkJdGltZXJfd3JpdGVsKHJlZywgVElNRVIzX0JBU0UgKyBUSU1FUl9QVFYpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGN5Y2xlX3QgdGVncmFfY2xvY2tzb3VyY2VfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiBjbnQzMl90b182Myh0aW1lcl9yZWFkbChUSU1FUlVTX0NOVFJfMVVTKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHRlZ3JhX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gInRpbWVyMCIsCisJLnJhdGluZwkJPSAzMDAsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5zZXRfbmV4dF9ldmVudAk9IHRlZ3JhX3RpbWVyX3NldF9uZXh0X2V2ZW50LAorCS5zZXRfbW9kZQk9IHRlZ3JhX3RpbWVyX3NldF9tb2RlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSB0ZWdyYV9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZQk9ICJ0aW1lcl91cyIsCisJLnJhdGluZwk9IDMwMCwKKwkucmVhZAk9IHRlZ3JhX2Nsb2Nrc291cmNlX3JlYWQsCisJLm1hc2sJPSAweDdGRkZGRkZGRkZGRkZGRkZVTEwsCisJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCit1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKHRlZ3JhX2Nsb2Nrc291cmNlLnJlYWQoJnRlZ3JhX2Nsb2Nrc291cmNlKSwKKwkJdGVncmFfY2xvY2tzb3VyY2UubXVsdCwgdGVncmFfY2xvY2tzb3VyY2Uuc2hpZnQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKWRldl9pZDsKKwl0aW1lcl93cml0ZWwoMTw8MzAsIFRJTUVSM19CQVNFICsgVElNRVJfUENSKTsKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRlZ3JhX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAidGltZXIwIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX1RSSUdHRVJfSElHSCwKKwkuaGFuZGxlcgk9IHRlZ3JhX3RpbWVyX2ludGVycnVwdCwKKwkuZGV2X2lkCQk9ICZ0ZWdyYV9jbG9ja2V2ZW50LAorCS5pcnEJCT0gSU5UX1RNUjMsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgdGVncmFfaW5pdF90aW1lcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19tZWFzdXJlX2lucHV0X2ZyZXEoKTsKKwlpbnQgcmV0OworCisjaWZkZWYgQ09ORklHX0hBVkVfQVJNX1RXRAorCXR3ZF9iYXNlID0gSU9fQUREUkVTUyhURUdSQV9BUk1fUEVSSUZfQkFTRSArIDB4NjAwKTsKKyNlbmRpZgorCisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAxMjAwMDAwMDoKKwkJdGltZXJfd3JpdGVsKDB4MDAwYiwgVElNRVJVU19VU0VDX0NGRyk7CisJCWJyZWFrOworCWNhc2UgMTMwMDAwMDA6CisJCXRpbWVyX3dyaXRlbCgweDAwMGMsIFRJTUVSVVNfVVNFQ19DRkcpOworCQlicmVhazsKKwljYXNlIDE5MjAwMDAwOgorCQl0aW1lcl93cml0ZWwoMHgwNDVmLCBUSU1FUlVTX1VTRUNfQ0ZHKTsKKwkJYnJlYWs7CisJY2FzZSAyNjAwMDAwMDoKKwkJdGltZXJfd3JpdGVsKDB4MDAxOSwgVElNRVJVU19VU0VDX0NGRyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgIlVua25vd24gY2xvY2sgcmF0ZSIpOworCX0KKworCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmdGVncmFfY2xvY2tzb3VyY2UsIDEwMDAwMDApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nrc291cmNlXG4iKTsKKwkJQlVHKCk7CisJfQorCisJcmV0ID0gc2V0dXBfaXJxKHRlZ3JhX3RpbWVyX2lycS5pcnEsICZ0ZWdyYV90aW1lcl9pcnEpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgdGltZXIgSVJROiAlZFxuIiwgcmV0KTsKKwkJQlVHKCk7CisJfQorCisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KCZ0ZWdyYV9jbG9ja2V2ZW50LCAxMDAwMDAwLCA1KTsKKwl0ZWdyYV9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJCWNsb2NrZXZlbnRfZGVsdGEybnMoMHgxZmZmZmZmZiwgJnRlZ3JhX2Nsb2NrZXZlbnQpOworCXRlZ3JhX2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KKwkJY2xvY2tldmVudF9kZWx0YTJucygweDEsICZ0ZWdyYV9jbG9ja2V2ZW50KTsKKwl0ZWdyYV9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVfYWxsX21hc2s7CisJdGVncmFfY2xvY2tldmVudC5pcnEgPSB0ZWdyYV90aW1lcl9pcnEuaXJxOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdGVncmFfY2xvY2tldmVudCk7CisKKwlyZXR1cm47Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgdGVncmFfdGltZXIgPSB7CisJLmluaXQgPSB0ZWdyYV9pbml0X3RpbWVyLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKaW5kZXggNWQxMmQ1NC4uNjBhY2Y5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2Nsb2NrLmMKQEAgLTk0Nyw2ICs5NDcsMTAgQEAKIAkubG9jayAgICAgICA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGZhc3RfY2xrLmxvY2spLAogfTsKIAorLyoKKyAqIFRoZSBNTUNJIGFwYl9wY2xrIGlzIGhhcmR3aXJlZCB0byB0aGUgc2FtZSB0ZXJtaW5hbCBhcyB0aGUKKyAqIGV4dGVybmFsIE1DSSBjbG9jay4gVGh1cyB0aGlzIHdpbGwgYmUgcmVmZXJlbmNlZCB0d2ljZS4KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgbW1jc2RfY2xrID0gewogCS5uYW1lICAgICAgID0gIk1DTEsiLAogCS5wYXJlbnQJICAgID0gJmZhc3RfY2xrLApAQCAtMTAyNCw2ICsxMDI4LDEwIEBACiAJLmxvY2sgICAgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChpMmMxX2Nsay5sb2NrKSwKIH07CiAKKy8qCisgKiBUaGUgU1BJIGFwYl9wY2xrIGlzIGhhcmR3aXJlZCB0byB0aGUgc2FtZSB0ZXJtaW5hbCBhcyB0aGUKKyAqIGV4dGVybmFsIFNQSSBjbG9jay4gVGh1cyB0aGlzIHdpbGwgYmUgcmVmZXJlbmNlZCB0d2ljZS4KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3BpX2NsayA9IHsKIAkubmFtZSAgICAgICA9ICJTUEkiLAogCS5wYXJlbnQJICAgID0gJmZhc3RfY2xrLApAQCAtMTA0MCwxMCArMTA0OCw5IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2xrID0gewotCS5uYW1lCSAgICA9ICJVQVJUMSIsCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9wY2xrID0geworCS5uYW1lCSAgICA9ICJVQVJUMV9QQ0xLIiwKIAkucGFyZW50CSAgICA9ICZmYXN0X2NsaywKLQkucmF0ZQkgICAgPSAxMzAwMDAwMCwKIAkuaHdfY3RybGQgICA9IGZhbHNlLAogCS5yZXNldAkgICAgPSB0cnVlLAogCS5yZXNfcmVnICAgID0gVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9SRlIsCkBAIC0xMDUxLDYgKzEwNTgsMTQgQEAKIAkuY2xrX3ZhbCAgICA9IFUzMDBfU1lTQ09OX1NCQ0VSX1VBUlQxX0NMS19FTiwKIAkuZW5hYmxlICAgICA9IHN5c2Nvbl9jbGtfZW5hYmxlLAogCS5kaXNhYmxlICAgID0gc3lzY29uX2Nsa19kaXNhYmxlLAorCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQodWFydDFfcGNsay5sb2NrKSwKK307CisKKy8qIFRoaXMgb25lIGlzIGhhcmR3aXJlZCB0byBQTEwxMyAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfY2xrID0geworCS5uYW1lCSAgICA9ICJVQVJUMV9DTEsiLAorCS5yYXRlCSAgICA9IDEzMDAwMDAwLAorCS5od19jdHJsZCAgID0gdHJ1ZSwKIAkubG9jayAgICAgICA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHVhcnQxX2Nsay5sb2NrKSwKIH07CiAjZW5kaWYKQEAgLTEwODUsMTEgKzExMDAsOSBAQAogCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQod2RvZ19jbGsubG9jayksCiB9OwogCi0vKiBUaGlzIG9uZSBpcyBoYXJkd2lyZWQgdG8gUExMMTMgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0gewotCS5uYW1lCSAgICA9ICJVQVJUQ0xLIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQwX3BjbGsgPSB7CisJLm5hbWUJICAgID0gIlVBUlQwX1BDTEsiLAogCS5wYXJlbnQJICAgID0gJnNsb3dfY2xrLAotCS5yYXRlCSAgICA9IDEzMDAwMDAwLAogCS5od19jdHJsZCAgID0gZmFsc2UsCiAJLnJlc2V0CSAgICA9IHRydWUsCiAJLnJlc19yZWcgICAgPSBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1JTUiwKQEAgLTEwOTcsNyArMTExMCwxNiBAQAogCS5jbGtfdmFsICAgID0gVTMwMF9TWVNDT05fU0JDRVJfVUFSVF9DTEtfRU4sCiAJLmVuYWJsZSAgICAgPSBzeXNjb25fY2xrX2VuYWJsZSwKIAkuZGlzYWJsZSAgICA9IHN5c2Nvbl9jbGtfZGlzYWJsZSwKLQkubG9jayAgICAgICA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHVhcnRfY2xrLmxvY2spLAorCS5sb2NrICAgICAgID0gX19TUElOX0xPQ0tfVU5MT0NLRUQodWFydDBfcGNsay5sb2NrKSwKK307CisKKy8qIFRoaXMgb25lIGlzIGhhcmR3aXJlZCB0byBQTEwxMyAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDBfY2xrID0geworCS5uYW1lCSAgICA9ICJVQVJUMF9DTEsiLAorCS5wYXJlbnQJICAgID0gJnNsb3dfY2xrLAorCS5yYXRlCSAgICA9IDEzMDAwMDAwLAorCS5od19jdHJsZCAgID0gdHJ1ZSwKKwkubG9jayAgICAgICA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKHVhcnQwX2Nsay5sb2NrKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGtleXBhZF9jbGsgPSB7CkBAIC0xMTgyLDEwICsxMjA0LDE0IEBACiAJLmxvY2sgICAgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRCh0aW1lcl9jbGsubG9jayksCiB9OwogCisvKgorICogVGhlcmUgaXMgYSBiaW5hcnkgZGl2aWRlciBpbiB0aGUgaGFyZHdhcmUgdGhhdCBkaXZpZGVzCisgKiB0aGUgMTNNSHogUExMIGJ5IDEzIGRvd24gdG8gMSBNSHouCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGFwcF90aW1lcl9jbGsgPSB7CiAJLm5hbWUgICAgICAgPSAiVElNRVJfQVBQIiwKIAkucGFyZW50CSAgICA9ICZzbG93X2NsaywKLQkucmF0ZSAgICAgICA9IDEzMDAwMDAwLAorCS5yYXRlICAgICAgID0gMTAwMDAwMCwKIAkuaHdfY3RybGQgICA9IHRydWUsCiAJLnJlc2V0CSAgICA9IHRydWUsCiAJLnJlc19yZWcgICAgPSBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1JTUiwKQEAgLTEyMTIsMjMgKzEyMzgsMjQgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjbGsgZHVtbXlfYXBiX3BjbGs7Ci0KICNkZWZpbmUgREVGX0xPT0tVUChkZXZpZCwgY2xrcmVmKQkJXAogCXsJCQkJCVwKIAkuZGV2X2lkID0gZGV2aWQsCQkJXAogCS5jbGsgPSBjbGtyZWYsCQkJCVwKIAl9CiAKKyNkZWZpbmUgREVGX0xPT0tVUF9DT04oZGV2aWQsIGNvbmlkLCBjbGtyZWYpCVwKKwl7CQkJCQlcCisJLmRldl9pZCA9IGRldmlkLAkJCVwKKwkuY29uX2lkID0gY29uaWQsCQkJXAorCS5jbGsgPSBjbGtyZWYsCQkJCVwKKwl9CisKIC8qCiAgKiBIZXJlIHdlIG9ubHkgZGVmaW5lIGNsb2NrcyB0aGF0IGFyZSBtZWFuaW5nZnVsIHRvCiAgKiBsb29rIHVwIHRocm91Z2ggY2xvY2tkZXZpY2UuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7Ci0JewotCQkuY29uX2lkID0gImFwYl9wY2xrIiwKLQkJLmNsayA9ICZkdW1teV9hcGJfcGNsaywKLQl9LAogCS8qIENvbm5lY3RlZCBkaXJlY3RseSB0byB0aGUgQU1CQSBidXMgKi8KIAlERUZfTE9PS1VQKCJhbWJhIiwgICAgICAmYW1iYV9jbGspLAogCURFRl9MT09LVVAoImNwdSIsICAgICAgICZjcHVfY2xrKSwKQEAgLTEyNDcsMTEgKzEyNzQsMTQgQEAKIAkvKiBBSEIgYnJpZGdlIGNsb2NrcyAqLwogCURFRl9MT09LVVAoImFoYl9zdWJzeXMiLCAmYWhiX3N1YnN5c19jbGspLAogCURFRl9MT09LVVAoImludGNvbiIsICAgICZpbnRjb25fY2xrKSwKKwlERUZfTE9PS1VQX0NPTigiaW50Y29uIiwgImFwYl9wY2xrIiwgJmludGNvbl9jbGspLAogCURFRl9MT09LVVAoIm1zcHJvIiwgICAgICZtc3Byb19jbGspLAogCURFRl9MT09LVVAoInBsMTcyIiwgICAgICZlbWlmX2NsayksCisJREVGX0xPT0tVUF9DT04oInBsMTcyIiwgImFwYl9wY2xrIiwgJmVtaWZfY2xrKSwKIAkvKiBGQVNUIGJyaWRnZSBjbG9ja3MgKi8KIAlERUZfTE9PS1VQKCJmYXN0IiwgICAgICAmZmFzdF9jbGspLAogCURFRl9MT09LVVAoIm1tY2kiLCAgICAgICZtbWNzZF9jbGspLAorCURFRl9MT09LVVBfQ09OKCJtbWNpIiwgImFwYl9wY2xrIiwgJm1tY3NkX2NsayksCiAJLyoKIAkgKiBUaGUgLjAgYW5kIC4xIGlkZW50aWZpZXJzIG9uIHRoZXNlIGNvbWVzIGZyb20gdGhlIHBsYXRmb3JtIGRldmljZQogCSAqIC5pZCBmaWVsZCBhbmQgYXJlIGFzc2lnbmVkIHdoZW4gdGhlIHBsYXRmb3JtIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQuCkBAIC0xMjYxLDEzICsxMjkxLDE2IEBACiAJREVGX0xPT0tVUCgic3R1MzAwLjAiLCAgJmkyYzBfY2xrKSwKIAlERUZfTE9PS1VQKCJzdHUzMDAuMSIsICAmaTJjMV9jbGspLAogCURFRl9MT09LVVAoInBsMDIyIiwgICAgICZzcGlfY2xrKSwKKwlERUZfTE9PS1VQX0NPTigicGwwMjIiLCAiYXBiX3BjbGsiLCAmc3BpX2NsayksCiAjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9CUzMzNQogCURFRl9MT09LVVAoInVhcnQxIiwgICAgICZ1YXJ0MV9jbGspLAorCURFRl9MT09LVVBfQ09OKCJ1YXJ0MSIsICJhcGJfcGNsayIsICZ1YXJ0MV9wY2xrKSwKICNlbmRpZgogCS8qIFNMT1cgYnJpZGdlIGNsb2NrcyAqLwogCURFRl9MT09LVVAoInNsb3ciLCAgICAgICZzbG93X2NsayksCiAJREVGX0xPT0tVUCgiY29oOTAxMzI3X3dkb2ciLCAgICAgICZ3ZG9nX2NsayksCi0JREVGX0xPT0tVUCgidWFydDAiLCAgICAgJnVhcnRfY2xrKSwKKwlERUZfTE9PS1VQKCJ1YXJ0MCIsICAgICAmdWFydDBfY2xrKSwKKwlERUZfTE9PS1VQX0NPTigidWFydDAiLCAiYXBiX3BjbGsiLCAmdWFydDBfcGNsayksCiAJREVGX0xPT0tVUCgiYXBwdGltZXIiLCAgJmFwcF90aW1lcl9jbGspLAogCURFRl9MT09LVVAoImNvaDkwMTQ2MS1rZXlwYWQiLCAgICAma2V5cGFkX2NsayksCiAJREVGX0xPT0tVUCgidTMwMC1ncGlvIiwgJmdwaW9fY2xrKSwKQEAgLTEyODYsNjQgKzEzMTksNiBAQAogCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7CiB9CiAKLS8qCi0gKiBUaGVzZSBhcmUgdGhlIGNsb2NrcyBmb3IgY2VsbHMgcmVnaXN0ZXJlZCBhcyBwcmltZWNlbGwgZHJpdmVycwotICogb24gdGhlIEFNQkEgYnVzLiBUaGVzZSBtdXN0IGJlIG9uIGR1cmluZyBBTUJBIGRldmljZSByZWdpc3RyYXRpb24KLSAqIHNpbmNlIHRoZSBidXMgcHJvYmUgd2lsbCBhdHRlbXB0IHRvIHJlYWQgbWFnaWMgY29uZmlndXJhdGlvbgotICogcmVnaXN0ZXJzIGZvciB0aGVzZSBkZXZpY2VzLiBJZiB0aGV5IGFyZSBkZWFjdGl2YXRlZCB0aGVzZSBwcm9iZXMKLSAqIHdpbGwgZmFpbC4KLSAqCi0gKgotICogUGxlYXNlIG5vdGUgdGhhdCBvbiBlbWlmLCBib3RoIFJBTSBhbmQgTkFORCBpcyBjb25uZWN0ZWQgaW4gZHVhbAotICogUkFNIHBob25lcy4gT24gc2luZ2xlIFJBTSBwaG9uZXMsIHJhbSBpcyBvbiBzZW1pIGFuZCBOQU5EIG9uIGVtaWYuCi0gKgotICovCi12b2lkIHUzMDBfY2xvY2tfcHJpbWVjZWxscyh2b2lkKQotewotCWNsa19lbmFibGUoJmludGNvbl9jbGspOwotCWNsa19lbmFibGUoJnVhcnRfY2xrKTsKLSNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1Ci0JY2xrX2VuYWJsZSgmdWFydDFfY2xrKTsKLSNlbmRpZgotCWNsa19lbmFibGUoJnNwaV9jbGspOwotCi0JY2xrX2VuYWJsZSgmbW1jc2RfY2xrKTsKLQotfQotRVhQT1JUX1NZTUJPTCh1MzAwX2Nsb2NrX3ByaW1lY2VsbHMpOwotCi12b2lkIHUzMDBfdW5jbG9ja19wcmltZWNlbGxzKHZvaWQpCi17Ci0KLQljbGtfZGlzYWJsZSgmaW50Y29uX2Nsayk7Ci0JY2xrX2Rpc2FibGUoJnVhcnRfY2xrKTsKLSNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1Ci0JY2xrX2Rpc2FibGUoJnVhcnQxX2Nsayk7Ci0jZW5kaWYKLQljbGtfZGlzYWJsZSgmc3BpX2Nsayk7Ci0JY2xrX2Rpc2FibGUoJm1tY3NkX2Nsayk7Ci0KLX0KLUVYUE9SVF9TWU1CT0wodTMwMF91bmNsb2NrX3ByaW1lY2VsbHMpOwotCi0vKgotICogVGhlIGludGVycnVwdCBjb250cm9sbGVyIGlzIGVuYWJsZWQgYmVmb3JlIHRoZSBjbG9jayBBUEkgaXMgcmVnaXN0ZXJlZC4KLSAqLwotdm9pZCB1MzAwX2VuYWJsZV9pbnRjb25fY2xvY2sodm9pZCkKLXsKLQljbGtfZW5hYmxlKCZpbnRjb25fY2xrKTsKLX0KLUVYUE9SVF9TWU1CT0wodTMwMF9lbmFibGVfaW50Y29uX2Nsb2NrKTsKLQotLyoKLSAqIFRoZSB0aW1lciBpcyBlbmFibGVkIGJlZm9yZSB0aGUgY2xvY2sgQVBJIGlzIHJlZ2lzdGVyZWQuCi0gKi8KLXZvaWQgdTMwMF9lbmFibGVfdGltZXJfY2xvY2sodm9pZCkKLXsKLQljbGtfZW5hYmxlKCZhcHBfdGltZXJfY2xrKTsKLX0KLUVYUE9SVF9TWU1CT0wodTMwMF9lbmFibGVfdGltZXJfY2xvY2spOwotCiAjaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19VMzAwX0RFQlVHKSkKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHZpZXcgdGhlIHN0YXR1cyAoZXNwZWNpYWxseQpAQCAtMTM4NSwxMSArMTM2MCwxMyBAQAogCSZzcGlfY2xrLAogI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfQlMzMzUKIAkmdWFydDFfY2xrLAorCSZ1YXJ0MV9wY2xrLAogI2VuZGlmCiAJLyogU0xPVyBicmlkZ2UgY2xvY2tzICovCiAJJnNsb3dfY2xrLAogCSZ3ZG9nX2NsaywKLQkmdWFydF9jbGssCisJJnVhcnQwX2NsaywKKwkmdWFydDBfcGNsaywKIAkmYXBwX3RpbWVyX2NsaywKIAkma2V5cGFkX2NsaywKIAkmZ3Bpb19jbGssCkBAIC0xNDMwLDcgKzE0MDcsNyBAQAogCQkJCWNoYXJzKys7CiAJCQl9CiAJCQljZHBbMzJdID0gJ1wwJzsKLQkJCWlmIChjbGstPmdldF9yYXRlKQorCQkJaWYgKGNsay0+Z2V0X3JhdGUgfHwgY2xrLT5yYXRlICE9IDApCiAJCQkJc2VxX3ByaW50ZihzLAogCQkJCQkgICAiJXMlc1x0JXNcdCVkXHQlc1x0JWx1IEh6XG4iLAogCQkJCQkgICAmY2RwWzBdLApAQCAtMTQzOSw3ICsxNDE2LDcgQEAKIAkJCQkJICAgY2xrLT51c2Vjb3VudCA/ICJPTiIgOiAiT0ZGIiwKIAkJCQkJICAgY2xrLT51c2Vjb3VudCwKIAkJCQkJICAgY2xrLT5od19jdHJsZCAgPyAiWUVTIiA6ICJOTyAiLAotCQkJCQkgICBjbGstPmdldF9yYXRlKGNsaykpOworCQkJCQkgICBjbGtfZ2V0X3JhdGUoY2xrKSk7CiAJCQllbHNlCiAJCQkJc2VxX3ByaW50ZihzLAogCQkJCQkgICAiJXMlc1x0JXNcdCVkXHQlc1x0IiBcCkBAIC0xNDgzLDcgKzE0NjAsNyBAQAogbW9kdWxlX2luaXQoaW5pdF9jbGtfcmVhZF9kZWJ1Z2ZzKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCB1MzAwX2Nsb2NrX2luaXQodm9pZCkKK2ludCBfX2luaXQgdTMwMF9jbG9ja19pbml0KHZvaWQpCiB7CiAJdTE2IHZhbDsKIApAQCAtMTUyMCwxMCArMTQ5Nyw4IEBACiAJICovCiAJc3lzY29uX2Jsb2NrX3Jlc2V0X2Rpc2FibGUoJnNlbWlfY2xrKTsKIAlzeXNjb25fYmxvY2tfcmVzZXRfZGlzYWJsZSgmZW1pZl9jbGspOwotCXNlbWlfY2xrLmVuYWJsZSgmc2VtaV9jbGspOwotCWVtaWZfY2xrLmVuYWJsZSgmZW1pZl9jbGspOworCWNsa19lbmFibGUoJnNlbWlfY2xrKTsKKwljbGtfZW5hYmxlKCZlbWlmX2Nsayk7CiAKIAlyZXR1cm4gMDsKIH0KLS8qIGluaXRpYWxpemUgY2xvY2tpbmcgZWFybHkgdG8gYmUgYXZhaWxhYmxlIGxhdGVyIGluIHRoZSBib290ICovCi1jb3JlX2luaXRjYWxsKHUzMDBfY2xvY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCmluZGV4IGZjNmQ5Y2MuLmMzNGYzZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jbG9jay5oCkBAIC00NSw5ICs0NSw2IEBACiAJdm9pZCAoKmRpc2FibGUpIChzdHJ1Y3QgY2xrICopOwogfTsKIAotdm9pZCB1MzAwX2Nsb2NrX3ByaW1lY2VsbHModm9pZCk7Ci12b2lkIHUzMDBfdW5jbG9ja19wcmltZWNlbGxzKHZvaWQpOwotdm9pZCB1MzAwX2VuYWJsZV9pbnRjb25fY2xvY2sodm9pZCk7Ci12b2lkIHUzMDBfZW5hYmxlX3RpbWVyX2Nsb2NrKHZvaWQpOworaW50IHUzMDBfY2xvY2tfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwppbmRleCA2NTNiM2UwLi5lYTQxYzIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoL2NvaDkwMTMxOC5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CkBAIC0xNDc3LDExICsxNDc5LDE5IEBACiB2b2lkIF9faW5pdCB1MzAwX2luaXRfaXJxKHZvaWQpCiB7CiAJdTMyIG1hc2tbMl0gPSB7MCwgMH07CisJc3RydWN0IGNsayAqY2xrOwogCWludCBpOwogCisJLyogaW5pdGlhbGl6ZSBjbG9ja2luZyBlYXJseSwgd2Ugd2FudCB0byBjbG9jayB0aGUgSU5UQ09OICovCisJdTMwMF9jbG9ja19pbml0KCk7CisKKwkvKiBDbG9jayB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwljbGsgPSBjbGtfZ2V0X3N5cygiaW50Y29uIiwgTlVMTCk7CisJQlVHX09OKElTX0VSUihjbGspKTsKKwljbGtfZW5hYmxlKGNsayk7CisKIAlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKQogCQlzZXRfYml0KGksICh1bnNpZ25lZCBsb25nICopICZtYXNrWzBdKTsKLQl1MzAwX2VuYWJsZV9pbnRjb25fY2xvY2soKTsKIAl2aWNfaW5pdCgodm9pZCBfX2lvbWVtICopIFUzMDBfSU5UQ09OMF9WQkFTRSwgMCwgbWFza1swXSwgbWFza1swXSk7CiAJdmljX2luaXQoKHZvaWQgX19pb21lbSAqKSBVMzAwX0lOVENPTjFfVkJBU0UsIDMyLCBtYXNrWzFdLCBtYXNrWzFdKTsKIH0KQEAgLTE2MzUsMTIgKzE2NDUsMTAgQEAKIAl1MzAwX3NwaV9pbml0KCZwbDAyMl9kZXZpY2UpOwogCiAJLyogUmVnaXN0ZXIgdGhlIEFNQkEgZGV2aWNlcyBpbiB0aGUgQU1CQSBidXMgYWJzdHJhY3Rpb24gbGF5ZXIgKi8KLQl1MzAwX2Nsb2NrX3ByaW1lY2VsbHMoKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwogCQlhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmaW9tZW1fcmVzb3VyY2UpOwogCX0KLQl1MzAwX3VuY2xvY2tfcHJpbWVjZWxscygpOwogCiAJdTMwMF9hc3NpZ25fcGh5c21lbSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggODg1MDZkMC4uZGUxYWM5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtNzQsMTYgKzc0LDE2IEBACiAKIAltZGVsYXkoMjApOwogCi0JbW1jaV9jYXJkLT5tbWNfaW5zZXJ0ZWQgPSAhIWdwaW9fZ2V0X3ZhbHVlKFUzMDBfR1BJT19QSU5fTU1DX0NEKTsKKwltbWNpX2NhcmQtPm1tY19pbnNlcnRlZCA9ICFncGlvX2dldF92YWx1ZShVMzAwX0dQSU9fUElOX01NQ19DRCk7CiAKIAlpbnB1dF9yZXBvcnRfc3dpdGNoKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBLRVlfSU5TRVJULAotCQkJICAgICFtbWNpX2NhcmQtPm1tY19pbnNlcnRlZCk7CisJCQkgICAgbW1jaV9jYXJkLT5tbWNfaW5zZXJ0ZWQpOwogCWlucHV0X3N5bmMobW1jaV9jYXJkLT5tbWNfaW5wdXQpOwogCiAJcHJfZGVidWcoIk1NQy9TRCBjYXJkIHdhcyAlc1xuIiwKLQkJIG1tY2lfY2FyZC0+bW1jX2luc2VydGVkID8gInJlbW92ZWQiIDogImluc2VydGVkIik7CisJCSBtbWNpX2NhcmQtPm1tY19pbnNlcnRlZCA/ICJpbnNlcnRlZCIgOiAicmVtb3ZlZCIpOwogCi0JZW5hYmxlX2lycV9vbl9ncGlvX3BpbihVMzAwX0dQSU9fUElOX01NQ19DRCwgIW1tY2lfY2FyZC0+bW1jX2luc2VydGVkKTsKKwllbmFibGVfaXJxX29uX2dwaW9fcGluKFUzMDBfR1BJT19QSU5fTU1DX0NELCBtbWNpX2NhcmQtPm1tY19pbnNlcnRlZCk7CiB9CiAKIGludCBfX2RldmluaXQgbW1jX2luaXQoc3RydWN0IGFtYmFfZGV2aWNlICphZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwppbmRleCAyNmQyNmY1Li4zZmM0NDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCkBAIC0yMyw3ICsyNSw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKKy8qIEJlIGFibGUgdG8gc2xlZXAgZm9yIGF0bGVhc3QgNCBzZWNvbmRzICh1c3VhbGx5IG1vcmUpICovCisjZGVmaW5lIEFQUFRJTUVSX01JTl9SQU5HRSA0CiAKIC8qCiAgKiBBUFAgc2lkZSBzcGVjaWFsIHRpbWVyIHJlZ2lzdGVycwpAQCAtMzA3LDggKzMxMCw2IEBACiAJLm5hbWUgICAgICAgICAgID0gIkdQVDEiLAogCS5yYXRpbmcgICAgICAgICA9IDMwMCwgLyogUmVhc29uYWJseSBmYXN0IGFuZCBhY2N1cmF0ZSBjbG9jayBldmVudCAqLwogCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKLQkvKiAyMiBjYWxjdWxhdGVkIHVzaW5nIHRoZSBhbGdvcml0aG0gaW4gYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgKi8KLQkuc2hpZnQgICAgICAgICAgPSAyMiwKIAkuc2V0X25leHRfZXZlbnQgPSB1MzAwX3NldF9uZXh0X2V2ZW50LAogCS5zZXRfbW9kZSAgICAgICA9IHUzMDBfc2V0X21vZGUsCiB9OwpAQCAtMzQxLDggKzM0Miw2IEBACiAJLnJhdGluZyAgICAgICAgID0gMzAwLCAvKiBSZWFzb25hYmx5IGZhc3QgYW5kIGFjY3VyYXRlIGNsb2NrIHNvdXJjZSAqLwogCS5yZWFkICAgICAgICAgICA9IHUzMDBfZ2V0X2N5Y2xlcywKIAkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwgLyogMzIgYml0cyAqLwotCS8qIDIyIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGFsZ29yaXRobSBpbiBhcmNoL21pcHMva2VybmVsL3RpbWUuYyAqLwotCS5zaGlmdCAgICAgICAgICA9IDIyLAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMzY3LDcgKzM2NiwxNSBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdTMwMF90aW1lcl9pbml0KHZvaWQpCiB7Ci0JdTMwMF9lbmFibGVfdGltZXJfY2xvY2soKTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyByYXRlOworCisJLyogQ2xvY2sgdGhlIGludGVycnVwdCBjb250cm9sbGVyICovCisJY2xrID0gY2xrX2dldF9zeXMoImFwcHRpbWVyIiwgTlVMTCk7CisJQlVHX09OKElTX0VSUihjbGspKTsKKwljbGtfZW5hYmxlKGNsayk7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspOworCiAJLyoKIAkgKiBEaXNhYmxlIHRoZSAiT1MiIGFuZCAiREQiIHRpbWVycyAtIHRoZXNlIGFyZSBkZXNpZ25lZCBmb3IgU3ltYmlhbiEKIAkgKiBFeGFtcGxlIHVzYWdlIGluIGNuaDE2MDE1NzggY3B1IHN1YnN5c3RlbSBwZF90aW1lcl9hcHAuYwpAQCAtNDA1LDE1ICs0MTIsMTQgQEAKIAl3cml0ZWwoVTMwMF9USU1FUl9BUFBfRUdQVDJfVElNRVJfRU5BQkxFLAogCQlVMzAwX1RJTUVSX0FQUF9WQkFTRSArIFUzMDBfVElNRVJfQVBQX0VHUFQyKTsKIAotCS8qIFRoaXMgaXMgYSBwdXJlIG1pY3Jvc2Vjb25kIGNsb2NrIHNvdXJjZSAqLwotCWNsb2Nrc291cmNlX3UzMDBfMW1oei5tdWx0ID0KLQkJY2xvY2tzb3VyY2Vfa2h6Mm11bHQoMTAwMCwgY2xvY2tzb3VyY2VfdTMwMF8xbWh6LnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmNsb2Nrc291cmNlX3UzMDBfMW1oeiwKKwkJCQkgICAgcmF0ZSwgQVBQVElNRVJfTUlOX1JBTkdFKTsKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3UzMDBfMW1oeikpCiAJCXByaW50ayhLRVJOX0VSUiAidGltZXI6IGZhaWxlZCB0byBpbml0aWFsaXplIGNsb2NrICIKIAkJICAgICAgICJzb3VyY2UgJXNcbiIsIGNsb2Nrc291cmNlX3UzMDBfMW1oei5uYW1lKTsKIAotCWNsb2NrZXZlbnRfdTMwMF8xbWh6Lm11bHQgPQotCQlkaXZfc2MoMTAwMDAwMCwgTlNFQ19QRVJfU0VDLCBjbG9ja2V2ZW50X3UzMDBfMW1oei5zaGlmdCk7CisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KCZjbG9ja2V2ZW50X3UzMDBfMW1oeiwKKwkJCQkgICAgcmF0ZSwgQVBQVElNRVJfTUlOX1JBTkdFKTsKIAkvKiAzMmJpdCBjb3VudGVyLCBzbyAzMmJpdHMgZGVsdGEgaXMgbWF4ICovCiAJY2xvY2tldmVudF91MzAwXzFtaHoubWF4X2RlbHRhX25zID0KIAkJY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZmLCAmY2xvY2tldmVudF91MzAwXzFtaHopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9kZXZpY2VzLWRiODUwMC5jCmluZGV4IDY1NGZjYTkuLjkyODBkMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvZGV2aWNlcy1kYjg1MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2RldmljZXMtZGI4NTAwLmMKQEAgLTExMywyNiArMTEzLDIxIEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtYTQwX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0ID0gVTg1MDBfRE1BX0JBU0UsCi0JCS5lbmQgPSBVODUwMF9ETUFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmVuZCAgID0gVTg1MDBfRE1BX0JBU0UgKyBTWl80SyAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkubmFtZSA9ICJiYXNlIiwKKwkJLm5hbWUgID0gImJhc2UiLAogCX0sCiAJWzFdID0gewogCQkuc3RhcnQgPSBVODUwMF9ETUFfTENQQV9CQVNFLAotCQkuZW5kID0gVTg1MDBfRE1BX0xDUEFfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmVuZCAgID0gVTg1MDBfRE1BX0xDUEFfQkFTRSArIDIgKiBTWl8xSyAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkubmFtZSA9ICJsY3BhIiwKKwkJLm5hbWUgID0gImxjcGEiLAogCX0sCiAJWzJdID0gewotCQkuc3RhcnQgPSBVODUwMF9ETUFfTENMQV9CQVNFLAotCQkuZW5kID0gVTg1MDBfRE1BX0xDTEFfQkFTRSArIDE2ICogMTAyNCAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCQkubmFtZSA9ICJsY2xhIiwKLQl9LAotCVszXSA9IHsKIAkJLnN0YXJ0ID0gSVJRX0RCODUwMF9ETUEsCiAJCS5lbmQgICA9IElSUV9EQjg1MDBfRE1BLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUX0KKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQogfTsKIAogLyogRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBwaHlzY2lhbCBtZW1jcHkgKi8KQEAgLTE0NSwxMSArMTQwLDEyIEBACiAJLnNyY19pbmZvLmVuZGlhbmVzcyA9IFNURURNQTQwX0xJVFRMRV9FTkRJQU4sCiAJLnNyY19pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAogCS5zcmNfaW5mby5wc2l6ZSA9IFNURURNQTQwX1BTSVpFX1BIWV8xLAorCS5zcmNfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkwsCiAKIAkuZHN0X2luZm8uZW5kaWFuZXNzID0gU1RFRE1BNDBfTElUVExFX0VORElBTiwKIAkuZHN0X2luZm8uZGF0YV93aWR0aCA9IFNURURNQTQwX0JZVEVfV0lEVEgsCiAJLmRzdF9pbmZvLnBzaXplID0gU1RFRE1BNDBfUFNJWkVfUEhZXzEsCi0KKwkuZHN0X2luZm8uZmxvd19jdHJsID0gU1RFRE1BNDBfTk9fRkxPV19DVFJMLAogfTsKIC8qIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9naWNhbCBtZW1jcHkgKi8KIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyBkbWE0MF9tZW1jcHlfY29uZl9sb2cgPSB7CkBAIC0xNjIsMTEgKzE1OCwxMiBAQAogCS5zcmNfaW5mby5lbmRpYW5lc3MgPSBTVEVETUE0MF9MSVRUTEVfRU5ESUFOLAogCS5zcmNfaW5mby5kYXRhX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSCwKIAkuc3JjX2luZm8ucHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMSwKKwkuc3JjX2luZm8uZmxvd19jdHJsID0gU1RFRE1BNDBfTk9fRkxPV19DVFJMLAogCiAJLmRzdF9pbmZvLmVuZGlhbmVzcyA9IFNURURNQTQwX0xJVFRMRV9FTkRJQU4sCiAJLmRzdF9pbmZvLmRhdGFfd2lkdGggPSBTVEVETUE0MF9CWVRFX1dJRFRILAogCS5kc3RfaW5mby5wc2l6ZSA9IFNURURNQTQwX1BTSVpFX0xPR18xLAotCisJLmRzdF9pbmZvLmZsb3dfY3RybCA9IFNURURNQTQwX05PX0ZMT1dfQ1RSTCwKIH07CiAKIC8qCkBAIC0xODAsMTAgKzE3NywxMiBAQAogCiAvKiBSZXNlcnZlZCBldmVudCBsaW5lcyBmb3IgbWVtY3B5IG9ubHkgKi8KIHN0YXRpYyBpbnQgZG1hNDBfbWVtY3B5X2V2ZW50W10gPSB7CisJU1RFRE1BNDBfTUVNQ1BZX1RYXzAsCiAJU1RFRE1BNDBfTUVNQ1BZX1RYXzEsCiAJU1RFRE1BNDBfTUVNQ1BZX1RYXzIsCiAJU1RFRE1BNDBfTUVNQ1BZX1RYXzMsCiAJU1RFRE1BNDBfTUVNQ1BZX1RYXzQsCisJU1RFRE1BNDBfTUVNQ1BZX1RYXzUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHN0ZWRtYTQwX3BsYXRmb3JtX2RhdGEgZG1hNDBfcGxhdF9kYXRhID0gewpAQCAtMTk1LDYgKzE5NCw3IEBACiAJLm1lbWNweV9jb25mX3BoeSA9ICZkbWE0MF9tZW1jcHlfY29uZl9waHksCiAJLm1lbWNweV9jb25mX2xvZyA9ICZkbWE0MF9tZW1jcHlfY29uZl9sb2csCiAJLmxsaXNfcGVyX2xvZyA9IDgsCisJLmRpc2FibGVkX2NoYW5uZWxzID0gey0xfSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdTg1MDBfZG1hNDBfZGV2aWNlID0gewpAQCAtMjEzLDQgKzIxMyw2IEBACiAJZG1hNDBfcGxhdF9kYXRhLm1lbWNweV9sZW4gPSAwOwogCWRtYTQwX3Jlc291cmNlc1swXS5zdGFydCA9IFU4NTAwX0RNQV9CQVNFX0VEOwogCWRtYTQwX3Jlc291cmNlc1swXS5lbmQgPSBVODUwMF9ETUFfQkFTRV9FRCArIFNaXzRLIC0gMTsKKwlkbWE0MF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBVODUwMF9ETUFfTENQQV9CQVNFX0VEOworCWRtYTQwX3Jlc291cmNlc1sxXS5lbmQgPSBVODUwMF9ETUFfTENQQV9CQVNFX0VEICsgMiAqIFNaXzFLIC0gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9kYjg1MDAtcmVncy5oCmluZGV4IDg1ZmM2YTguLmYwMDAyMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2RiODUwMC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvZGI4NTAwLXJlZ3MuaApAQCAtMTUsOSArMTUsOSBAQAogI2RlZmluZSBVODUwMF9FU1JBTV9CQU5LMgkoVTg1MDBfRVNSQU1fQkFOSzEgKyBVODUwMF9FU1JBTV9CQU5LX1NJWkUpCiAjZGVmaW5lIFU4NTAwX0VTUkFNX0JBTkszCShVODUwMF9FU1JBTV9CQU5LMiArIFU4NTAwX0VTUkFNX0JBTktfU0laRSkKICNkZWZpbmUgVTg1MDBfRVNSQU1fQkFOSzQJKFU4NTAwX0VTUkFNX0JBTkszICsgVTg1MDBfRVNSQU1fQkFOS19TSVpFKQotLyogVXNlIGJhbmsgNCBmb3IgRE1BIExDTEEgYW5kIExDUEEgKi8KLSNkZWZpbmUgVTg1MDBfRE1BX0xDTEFfQkFTRQlVODUwMF9FU1JBTV9CQU5LNAotI2RlZmluZSBVODUwMF9ETUFfTENQQV9CQVNFCShVODUwMF9FU1JBTV9CQU5LNCArIDB4NDAwMCkKKy8qIFVzZSBiYW5rIDQgZm9yIERNQSBMQ1BBICovCisjZGVmaW5lIFU4NTAwX0RNQV9MQ1BBX0JBU0UJVTg1MDBfRVNSQU1fQkFOSzQKKyNkZWZpbmUgVTg1MDBfRE1BX0xDUEFfQkFTRV9FRAkoVTg1MDBfRVNSQU1fQkFOSzQgKyAweDQwMDApCiAKICNkZWZpbmUgVTg1MDBfUEVSM19CQVNFCQkweDgwMDAwMDAwCiAjZGVmaW5lIFU4NTAwX1NUTV9CQVNFCQkweDgwMTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL3N0ZS1kbWE0MC1kYjg1MDAuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvc3RlLWRtYTQwLWRiODUwMC5oCmluZGV4IGU3MDE2MjcuLjlkOWQzNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvc3RlLWRtYTQwLWRiODUwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvc3RlLWRtYTQwLWRiODUwMC5oCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlTVEVETUE0MF9ERVZfQ0FDMV9UWCA9IDQ4LAogCVNURURNQTQwX0RFVl9DQUMxX1RYX0hBQzFfVFggPSA0OSwKIAlTVEVETUE0MF9ERVZfSEFDMV9UWCA9IDUwLAotCVNURURNQTQwX01FTVhDUFlfVFhfMCA9IDUxLAorCVNURURNQTQwX01FTUNQWV9UWF8wID0gNTEsCiAJU1RFRE1BNDBfREVWX1NMSU0xX0NIMF9UWF9IU0lfVFhfQ0g0ID0gNTIsCiAJU1RFRE1BNDBfREVWX1NMSU0xX0NIMV9UWF9IU0lfVFhfQ0g1ID0gNTMsCiAJU1RFRE1BNDBfREVWX1NMSU0xX0NIMl9UWF9IU0lfVFhfQ0g2ID0gNTQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDRmOGY5OWEuLmI1ZTc1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0zMCwxNSArMzAsNiBAQAogI2RlZmluZSBWRVJTQVRJTEVfUENJX1ZJUlRfQkFTRQkJKHZvaWQgX19pb21lbSAqKTB4ZTgwMDAwMDB1bAogI2RlZmluZSBWRVJTQVRJTEVfUENJX0NGR19WSVJUX0JBU0UJKHZvaWQgX19pb21lbSAqKTB4ZTkwMDAwMDB1bAogCi0jaWYgMAotI2RlZmluZSBWRVJTQVRJTEVfUENJX1ZJUlRfTUVNX0JBU0UwCTB4ZjQwMDAwMDAKLSNkZWZpbmUgVkVSU0FUSUxFX1BDSV9WSVJUX01FTV9CQVNFMQkweGY1MDAwMDAwCi0jZGVmaW5lIFZFUlNBVElMRV9QQ0lfVklSVF9NRU1fQkFTRTIJMHhmNjAwMDAwMAotCi0jZGVmaW5lIFBDSU9fQkFTRQkJCVZFUlNBVElMRV9QQ0lfVklSVF9NRU1fQkFTRTAKLSNkZWZpbmUgUENJTUVNX0JBU0UJCQlWRVJTQVRJTEVfUENJX1ZJUlRfTUVNX0JBU0UxCi0jZW5kaWYKLQogLyogQ0lLIGd1ZXNzd29yayAqLwogI2RlZmluZSBQQ0lCSU9TX01JTl9JTwkJCTB4NDQwMDAwMDAKICNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkJMHg1MDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggODdlYzE0MS4uMzNjM2Y1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC03NzEsNyArNzcxLDggQEAKIAlib29sICJFbmFibGUgdGhlIEwyeDAgb3V0ZXIgY2FjaGUgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAogCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlggfHwgXAotCQkgICBBUkNIX05PTUFESUsgfHwgQVJDSF9PTUFQNCB8fCBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQKKwkJICAgQVJDSF9OT01BRElLIHx8IEFSQ0hfT01BUDQgfHwgQVJDSF9TNVBWMzEwIHx8IEFSQ0hfVEVHUkEgfHwgXAorCQkgICBBUkNIX1U4NTAwIHx8IEFSQ0hfVkVYUFJFU1NfQ0E5WDQKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAlzZWxlY3QgT1VURVJfQ0FDSEVfU1lOQwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDZhYjI0NDAuLjFmYmRiNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTgyLDcgKzgyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogCi12b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKK3ZvaWQga3VubWFwX2F0b21pY19ub3R5cGVjaGVjayh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQogewogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOwogCXVuc2lnbmVkIGludCBpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTEwMyw3ICsxMDMsNyBAQAogCX0KIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGt1bm1hcF9hdG9taWMpOworRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKTsKIAogdm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDY2MWZiYzYuLmFmMzNiNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMTksNiArMTksNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19HUElPX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19HUElPX0hfXwogCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3NpLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3NpLmgKaW5kZXggYzM0ZGVkNS4uNjNmM2MyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3NzaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zc2kuaApAQCAtMTAsNiArMTAsOSBAQAogCXVuc2lnbmVkIGludCBmbGFnczsKICNkZWZpbmUgSU1YX1NTSV9ETUEgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTVhfU1NJX1VTRV9BQzk3ICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElNWF9TU0lfTkVUICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU1YX1NTSV9TWU4gICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTVhfU1NJX1VTRV9JMlNfU0xBVkUgICgxIDw8IDQpCiAJdm9pZCAoKmFjOTdfcmVzZXQpIChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOwogCXZvaWQgKCphYzk3X3dhcm1fcmVzZXQpKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9zdGVfZG1hNDAuaCBiL2FyY2gvYXJtL3BsYXQtbm9tYWRpay9pbmNsdWRlL3BsYXQvc3RlX2RtYTQwLmgKaW5kZXggNGQxMmVhNC4uNWZiZGU0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9zdGVfZG1hNDAuaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L3N0ZV9kbWE0MC5oCkBAIC0xNDgsNyArMTQ4LDggQEAKICAqIEBtZW1jcHlfY29uZl9waHk6IGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBwaHlzaWNhbCBjaGFubmVsIG1lbWNweQogICogQG1lbWNweV9jb25mX2xvZzogZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIGxvZ2ljYWwgY2hhbm5lbCBtZW1jcHkKICAqIEBsbGlzX3Blcl9sb2c6IG51bWJlciBvZiBtYXggbGlua2VkIGxpc3QgaXRlbXMgcGVyIGxvZ2ljYWwgY2hhbm5lbAotICoKKyAqIEBkaXNhYmxlZF9jaGFubmVsczogQSB2ZWN0b3IsIGVuZGluZyB3aXRoIC0xLCB0aGF0IG1hcmtzIHBoeXNpY2FsIGNoYW5uZWxzCisgKiB0aGF0IGFyZSBmb3IgZGlmZmVyZW50IHJlYXNvbnMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIGRyaXZlci4KICAqLwogc3RydWN0IHN0ZWRtYTQwX3BsYXRmb3JtX2RhdGEgewogCXUzMgkJCQkgZGV2X2xlbjsKQEAgLTE1OSw2ICsxNjAsNyBAQAogCXN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZwkqbWVtY3B5X2NvbmZfcGh5OwogCXN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZwkqbWVtY3B5X2NvbmZfbG9nOwogCXVuc2lnbmVkIGludAkJCSBsbGlzX3Blcl9sb2c7CisJaW50CQkJCSBkaXNhYmxlZF9jaGFubmVsc1s4XTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCA3OGI0OWE2Li5lMzlhNDE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGlmIEFSQ0hfT01BUAogCi1tZW51ICJUSSBPTUFQIEltcGxlbWVudGF0aW9ucyIKK21lbnUgIlRJIE9NQVAgQ29tbW9uIEZlYXR1cmVzIgogCiBjb25maWcgQVJDSF9PTUFQX09URwogCWJvb2wKQEAgLTIxLDI0ICsyMSw2IEBACiAJaGVscAogCSAgIlN5c3RlbXMgYmFzZWQgb24gb21hcDI0eHgsIG9tYXAzNHh4IG9yIG9tYXA0NHh4IgogCi1jb25maWcgQVJDSF9PTUFQMgotCWJvb2wgIlRJIE9NQVAyIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKLQlzZWxlY3QgQ1BVX1Y2Ci0KLWNvbmZpZyBBUkNIX09NQVAzCi0JYm9vbCAiVEkgT01BUDMiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwotCXNlbGVjdCBDUFVfVjcKLQlzZWxlY3QgVVNCX0FSQ0hfSEFTX0VIQ0kKLQlzZWxlY3QgQVJNX0wxX0NBQ0hFX1NISUZUXzYKLQotY29uZmlnIEFSQ0hfT01BUDQKLQlib29sICJUSSBPTUFQNCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCi0Jc2VsZWN0IENQVV9WNwotCXNlbGVjdCBBUk1fR0lDCi0KIGVuZGNob2ljZQogCiBjb21tZW50ICJPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucyIKQEAgLTUxLDcgKzMzLDcgQEAKIGNvbmZpZyBPTUFQX0RFQlVHX0xFRFMKIAlib29sCiAJZGVwZW5kcyBvbiBPTUFQX0RFQlVHX0RFVklDRVMKLQlkZWZhdWx0IHkgaWYgTEVEUyB8fCBMRURTX09NQVBfREVCVUcKKwlkZWZhdWx0IHkgaWYgTEVEUwogCiBjb25maWcgT01BUF9SRVNFVF9DTE9DS1MKIAlib29sICJSZXNldCB1bnVzZWQgY2xvY2tzIGR1cmluZyBib290IgpAQCAtMTA2LDYgKzg4LDE1IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBPTUFQIE1haWxib3ggZnJhbWV3b3JrIHN1cHBvcnQgZm9yCiAJICBEU1AsIElWQTEuMCBhbmQgSVZBMiBpbiBPTUFQMS8yLzMuCiAKK2NvbmZpZyBPTUFQX01CT1hfS0ZJRk9fU0laRQorCWludCAiTWFpbGJveCBrZmlmbyBkZWZhdWx0IGJ1ZmZlciBzaXplIChieXRlcykiCisJZGVwZW5kcyBvbiBPTUFQX01CT1hfRldLCisJZGVmYXVsdCAyNTYKKwloZWxwCisJICBTcGVjaWZ5IHRoZSBkZWZhdWx0IHNpemUgb2YgbWFpbGJveCdzIGtmaWZvIGJ1ZmZlcnMgKGJ5dGVzKS4KKwkgIFRoaXMgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW50aW1lICh2aWEgdGhlIG1ib3hfa2ZpZm9fc2l6ZQorCSAgbW9kdWxlIHBhcmFtZXRlcikuCisKIGNvbmZpZyBPTUFQX0lPTU1VCiAJdHJpc3RhdGUKIApAQCAtMTIwLDcgKzExMSw3IEBACiAKIGNob2ljZQogCXByb21wdCAiU3lzdGVtIHRpbWVyIgotCWRlZmF1bHQgT01BUF9NUFVfVElNRVIKKwlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSIGlmICFBUkNIX09NQVAxNVhYCiAKIGNvbmZpZyBPTUFQX01QVV9USU1FUgogCWJvb2wgIlVzZSBtcHUgdGltZXIiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggOThmMDE5MS4uOTQwNTgzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQAogIyBvbWFwX2RldmljZSBzdXBwb3J0IChPTUFQMisgb25seSBhdCB0aGUgbW9tZW50KQogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9IG9tYXBfZGV2aWNlLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKSArPSBvbWFwX2RldmljZS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkgKz0gb21hcF9kZXZpY2UubwogCiBvYmotJChDT05GSUdfT01BUF9NQ0JTUCkgKz0gbWNic3Aubwogb2JqLSQoQ09ORklHX09NQVBfSU9NTVUpICs9IGlvbW11Lm8gaW92bW0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCmluZGV4IGViZWQ4MjYuLjMwMDhlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTMxNywxOCArMzE3LDE4IEBACiAJLnVhcnQxX3BoeXMJPSBPTUFQM19VQVJUMV9CQVNFLAogCS51YXJ0Ml9waHlzCT0gT01BUDNfVUFSVDJfQkFTRSwKIAkudWFydDNfcGh5cwk9IE9NQVAzX1VBUlQzX0JBU0UsCisJLnVhcnQ0X3BoeXMJPSBPTUFQM19VQVJUNF9CQVNFLAkvKiBPbmx5IG9uIDM2MzAgKi8KIH07CiAKLXZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzM0M3godm9pZCkKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzN4eHgodm9pZCkKIHsKIAlfX29tYXAyX3NldF9nbG9iYWxzKCZvbWFwM19nbG9iYWxzKTsKIH0KIAotdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMzZ4eCh2b2lkKQordm9pZCBfX2luaXQgb21hcDNfbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcDNfZ2xvYmFscy51YXJ0NF9waHlzID0gT01BUDNfVUFSVDRfQkFTRTsKLQotCV9fb21hcDJfc2V0X2dsb2JhbHMoJm9tYXAzX2dsb2JhbHMpOworCW9tYXAyX3NldF9nbG9iYWxzXzN4eHgoKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKaW5kZXggNTNmY2VmNy4uZmMwNWIxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgdTE2CQkJCWxlZF9zdGF0ZSwgaHdfbGVkX3N0YXRlOwogCiAKLSNpZmRlZglDT05GSUdfTEVEU19PTUFQX0RFQlVHCisjaWZkZWYJQ09ORklHX09NQVBfREVCVUdfTEVEUwogI2RlZmluZSBuZXdfbGVkX2FwaSgpCTEKICNlbHNlCiAjZGVmaW5lIG5ld19sZWRfYXBpKCkJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKaW5kZXggOTU2NzdkMS4uZDE5MjBiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yNCwxMzUgKzI0LDEzIEBACiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvbW1jLmg+Ci0jaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L21lbmVsYXVzLmg+CiAjaW5jbHVkZSA8cGxhdC9tY2JzcC5oPgotI2luY2x1ZGUgPHBsYXQvZHNwX2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvb21hcDQ0eHguaD4KIAotI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0RTUF9NT0RVTEUpCi0KLXN0YXRpYyBzdHJ1Y3QgZHNwX3BsYXRmb3JtX2RhdGEgZHNwX3BkYXRhID0gewotCS5rZGV2X2xpc3QgPSBMSVNUX0hFQURfSU5JVChkc3BfcGRhdGEua2Rldl9saXN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9kc3BfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkubmFtZQk9ICJkc3BfbW11IiwKLQkJLnN0YXJ0CT0gLTEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2RzcF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImRzcCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwX2RzcF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG9tYXBfZHNwX3Jlc291cmNlcywKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZkc3BfcGRhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZHNwKHZvaWQpCi17Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IGlycTsKLQotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKLQkJaXJxID0gSU5UXzE1MTBfRFNQX01NVTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJaXJxID0gSU5UXzE2MTBfRFNQX01NVTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJaXJxID0gSU5UXzI0WFhfRFNQX01NVTsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUoJm9tYXBfZHNwX2RldmljZSwKLQkJCQkJICAgSU9SRVNPVVJDRV9JUlEsICJkc3BfbW11Iik7Ci0JcmVzLT5zdGFydCA9IGlycTsKLQotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9kc3BfZGV2aWNlKTsKLX0KLQotaW50IGRzcF9rZnVuY19kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRzcF9rZnVuY19kZXZpY2UgKmtkZXYpCi17Ci0Jc3RhdGljIERFRklORV9NVVRFWChkc3BfcGRhdGFfbG9jayk7Ci0KLQlzcGluX2xvY2tfaW5pdCgma2Rldi0+bG9jayk7Ci0KLQltdXRleF9sb2NrKCZkc3BfcGRhdGFfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgma2Rldi0+ZW50cnksICZkc3BfcGRhdGEua2Rldl9saXN0KTsKLQltdXRleF91bmxvY2soJmRzcF9wZGF0YV9sb2NrKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChkc3Bfa2Z1bmNfZGV2aWNlX3JlZ2lzdGVyKTsKLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZHNwKHZvaWQpIHsgfQotI2VuZGlmCS8qIENPTkZJR19PTUFQX0RTUCAqLwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmCWRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX09NQVBfTU9EVUxFKQogCi1zdGF0aWMgdm9pZCBvbWFwX2luaXRfa3Aodm9pZCkKLXsKLQkvKiAyNDMwIGFuZCAzNHh4IGtleXBhZCBpcyBvbiBUV0w0MDMwICovCi0JaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQotCQlyZXR1cm47Ci0KLQlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkgfHwgbWFjaGluZV9pc19vbWFwX2gzKCkpIHsKLQkJb21hcF9jZmdfcmVnKEYxOF8xNjEwX0tCQzApOwotCQlvbWFwX2NmZ19yZWcoRDIwXzE2MTBfS0JDMSk7Ci0JCW9tYXBfY2ZnX3JlZyhEMTlfMTYxMF9LQkMyKTsKLQkJb21hcF9jZmdfcmVnKEUxOF8xNjEwX0tCQzMpOwotCQlvbWFwX2NmZ19yZWcoQzIxXzE2MTBfS0JDNCk7Ci0KLQkJb21hcF9jZmdfcmVnKEcxOF8xNjEwX0tCUjApOwotCQlvbWFwX2NmZ19yZWcoRjE5XzE2MTBfS0JSMSk7Ci0JCW9tYXBfY2ZnX3JlZyhIMTRfMTYxMF9LQlIyKTsKLQkJb21hcF9jZmdfcmVnKEUyMF8xNjEwX0tCUjMpOwotCQlvbWFwX2NmZ19yZWcoRTE5XzE2MTBfS0JSNCk7Ci0JCW9tYXBfY2ZnX3JlZyhOMTlfMTYxMF9LQlI1KTsKLQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpIHx8IG1hY2hpbmVfaXNfb21hcF9mc2FtcGxlKCkpIHsKLQkJb21hcF9jZmdfcmVnKEUyXzdYWF9LQlIwKTsKLQkJb21hcF9jZmdfcmVnKEo3XzdYWF9LQlIxKTsKLQkJb21hcF9jZmdfcmVnKEUxXzdYWF9LQlIyKTsKLQkJb21hcF9jZmdfcmVnKEYzXzdYWF9LQlIzKTsKLQkJb21hcF9jZmdfcmVnKEQyXzdYWF9LQlI0KTsKLQotCQlvbWFwX2NmZ19yZWcoQzJfN1hYX0tCQzApOwotCQlvbWFwX2NmZ19yZWcoRDNfN1hYX0tCQzEpOwotCQlvbWFwX2NmZ19yZWcoRTRfN1hYX0tCQzIpOwotCQlvbWFwX2NmZ19yZWcoRjRfN1hYX0tCQzMpOwotCQlvbWFwX2NmZ19yZWcoRTNfN1hYX0tCQzQpOwotCX0gZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX2g0KCkpIHsKLQkJb21hcF9jZmdfcmVnKFQxOV8yNFhYX0tCUjApOwotCQlvbWFwX2NmZ19yZWcoUjE5XzI0WFhfS0JSMSk7Ci0JCW9tYXBfY2ZnX3JlZyhWMThfMjRYWF9LQlIyKTsKLQkJb21hcF9jZmdfcmVnKE0yMV8yNFhYX0tCUjMpOwotCQlvbWFwX2NmZ19yZWcoRTVfXzI0WFhfS0JSNCk7Ci0JCWlmIChvbWFwX2hhc19tZW5lbGF1cygpKSB7Ci0JCQlvbWFwX2NmZ19yZWcoQjNfXzI0WFhfS0JSNSk7Ci0JCQlvbWFwX2NmZ19yZWcoQUE0XzI0WFhfS0JDMik7Ci0JCQlvbWFwX2NmZ19yZWcoQjEzXzI0WFhfS0JDNik7Ci0JCX0gZWxzZSB7Ci0JCQlvbWFwX2NmZ19yZWcoTTE4XzI0WFhfS0JSNSk7Ci0JCQlvbWFwX2NmZ19yZWcoSDE5XzI0WFhfS0JDMik7Ci0JCQlvbWFwX2NmZ19yZWcoTjE5XzI0WFhfS0JDNik7Ci0JCX0KLQkJb21hcF9jZmdfcmVnKFIyMF8yNFhYX0tCQzApOwotCQlvbWFwX2NmZ19yZWcoTTE0XzI0WFhfS0JDMSk7Ci0JCW9tYXBfY2ZnX3JlZyhWMTdfMjRYWF9LQkMzKTsKLQkJb21hcF9jZmdfcmVnKFAyMV8yNFhYX0tCQzQpOwotCQlvbWFwX2NmZ19yZWcoTDE0XzI0WFhfS0JDNSk7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfa3Aodm9pZCkge30KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTUNCU1ApIHx8IGRlZmluZWQoQ09ORklHX09NQVBfTUNCU1BfTU9EVUxFKQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKm9tYXBfbWNic3BfZGV2aWNlczsKQEAgLTQxOSw4ICsyOTcsNiBAQAogCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAogCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCiAJICovCi0Jb21hcF9pbml0X2RzcCgpOwotCW9tYXBfaW5pdF9rcCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKIAlvbWFwX2luaXRfbWNwZG0oKTsKIAlvbWFwX2luaXRfdXdpcmUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBmN2Y1NzFlLi5lYzdlZGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJdmFsID0gZG1hX3JlYWQoQ0NSKGxjaCkpOwogCiAJCS8qIERNQV9TWU5DSFJPX0NPTlRST0xfVVBQRVIgZGVwZW5kcyBvbiB0aGUgY2hhbm5lbCBudW1iZXIgKi8KLQkJdmFsICY9IH4oKDMgPDwgMTkpIHwgMHgxZik7CisJCXZhbCAmPSB+KCgxIDw8IDIzKSB8ICgzIDw8IDE5KSB8IDB4MWYpOwogCQl2YWwgfD0gKGRtYV90cmlnZ2VyICYgfjB4MWYpIDw8IDE0OwogCQl2YWwgfD0gZG1hX3RyaWdnZXIgJiAweDFmOwogCkBAIC0zMDQsMTEgKzMwNCwxNCBAQAogCQllbHNlCiAJCQl2YWwgJj0gfigxIDw8IDE4KTsKIAotCQlpZiAoc3JjX29yX2RzdF9zeW5jaCkKLQkJCXZhbCB8PSAxIDw8IDI0OwkJLyogc291cmNlIHN5bmNoICovCi0JCWVsc2UKKwkJaWYgKHNyY19vcl9kc3Rfc3luY2ggPT0gT01BUF9ETUFfRFNUX1NZTkNfUFJFRkVUQ0gpIHsKIAkJCXZhbCAmPSB+KDEgPDwgMjQpOwkvKiBkZXN0IHN5bmNoICovCi0KKwkJCXZhbCB8PSAoMSA8PCAyMyk7CS8qIFByZWZldGNoICovCisJCX0gZWxzZSBpZiAoc3JjX29yX2RzdF9zeW5jaCkgeworCQkJdmFsIHw9IDEgPDwgMjQ7CQkvKiBzb3VyY2Ugc3luY2ggKi8KKwkJfSBlbHNlIHsKKwkJCXZhbCAmPSB+KDEgPDwgMjQpOwkvKiBkZXN0IHN5bmNoICovCisJCX0KIAkJZG1hX3dyaXRlKHZhbCwgQ0NSKGxjaCkpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggOWI3ZTM1NC4uNzk1MWVlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0zOTAsNyArMzkwLDkgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKGNwdV9pc19vbWFwN3h4KCkgJiYgZ3BpbyA8IDE5MikKIAkJcmV0dXJuIDA7Ci0JaWYgKGNwdV9pc19vbWFwMjR4eCgpICYmIGdwaW8gPCAxMjgpCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpICYmIGdwaW8gPCAxMjgpCisJCXJldHVybiAwOworCWlmIChjcHVfaXNfb21hcDI0MzAoKSAmJiBncGlvIDwgMTYwKQogCQlyZXR1cm4gMDsKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSAmJiBncGlvIDwgMTkyKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwppbmRleCBlZWMyYjQ5Li5hNWNlNGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCkBAIC0xMzgsNiArMTM4LDE2IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKIH0KIAorLyoKKyAqIFhYWCBUaGlzIGZ1bmN0aW9uIGlzIGEgdGVtcG9yYXJ5IGNvbXBhdGliaWxpdHkgd3JhcHBlciAtIG9ubHkKKyAqIG5lZWRlZCB1bnRpbCB0aGUgSTJDIGRyaXZlciBjYW4gYmUgY29udmVydGVkIHRvIGNhbGwKKyAqIG9tYXBfcG1fc2V0X21heF9kZXZfd2FrZXVwX2xhdCgpIGFuZCBoYW5kbGUgYSByZXR1cm4gY29kZS4KKyAqLworc3RhdGljIHZvaWQgb21hcF9wbV9zZXRfbWF4X21wdV93YWtldXBfbGF0X2NvbXBhdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgdCkKK3sKKwlvbWFwX3BtX3NldF9tYXhfbXB1X3dha2V1cF9sYXQoZGV2LCB0KTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgb21hcDJfaTJjX2FkZF9idXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGJ1c19pZCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2OCw3ICsxNzgsNyBAQAogCQlzdHJ1Y3Qgb21hcF9pMmNfYnVzX3BsYXRmb3JtX2RhdGEgKnBkOwogCiAJCXBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JCXBkLT5zZXRfbXB1X3drdXBfbGF0ID0gb21hcF9wbV9zZXRfbWF4X21wdV93YWtldXBfbGF0OworCQlwZC0+c2V0X21wdV93a3VwX2xhdCA9IG9tYXBfcG1fc2V0X21heF9tcHVfd2FrZXVwX2xhdF9jb21wYXQ7CiAJfQogCiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihwZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvYm9hcmQuaAppbmRleCA1Y2Q2MjIwLi4zY2Y0ZmEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ib2FyZC5oCkBAIC04NSw2ICs4NSwxNCBAQAogCSAqICA2ID09IDYgd2lyZSB1bmlkaXJlY3Rpb25hbCAob3IgVExMKQogCSAqLwogCXU4CQlwaW5zWzNdOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWRjX2RldmljZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvaGNpX2RldmljZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvdGdfZGV2aWNlOworCisJdTMyICgqdXNiMF9pbml0KSh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSk7CisJdTMyICgqdXNiMV9pbml0KSh1bnNpZ25lZCBud2lyZXMpOworCXUzMiAoKnVzYjJfaW5pdCkodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBhbHRfcGluZ3JvdXApOwogfTsKIAogc3RydWN0IG9tYXBfbGNkX2NvbmZpZyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKaW5kZXggZGZjNDcyYy4uZmVmNDY5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMTksNiArMTksMjIgQEAKIHN0cnVjdCBjbGs7CiBzdHJ1Y3QgY2xvY2tkb21haW47CiAKKy8qKgorICogc3RydWN0IGNsa29wcyAtIHNvbWUgY2xvY2sgZnVuY3Rpb24gcG9pbnRlcnMKKyAqIEBlbmFibGU6IGZuIHB0ciB0aGF0IGVuYWJsZXMgdGhlIGN1cnJlbnQgY2xvY2sgaW4gaGFyZHdhcmUKKyAqIEBkaXNhYmxlOiBmbiBwdHIgdGhhdCBlbmFibGVzIHRoZSBjdXJyZW50IGNsb2NrIGluIGhhcmR3YXJlCisgKiBAZmluZF9pZGxlc3Q6IGZ1bmN0aW9uIHJldHVybmluZyB0aGUgSURMRVNUIHJlZ2lzdGVyIGZvciB0aGUgY2xvY2sncyBJUCBibGsKKyAqIEBmaW5kX2NvbXBhbmlvbjogZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSAiY29tcGFuaW9uIiBjbGsgcmVnIGZvciB0aGUgY2xvY2sKKyAqCisgKiBBICJjb21wYW5pb24iIGNsayBpcyBhbiBhY2NvbXBhbnlpbmcgY2xvY2sgdG8gdGhlIG9uZSBiZWluZyBxdWVyaWVkCisgKiB0aGF0IG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIElQIG1vZHVsZSBjb25uZWN0ZWQgdG8gdGhlIGNsb2NrIHRvCisgKiBiZWNvbWUgYWNjZXNzaWJsZSBieSB0aGUgaGFyZHdhcmUuICBOZWl0aGVyIEBmaW5kX2lkbGVzdCBub3IKKyAqIEBmaW5kX2NvbXBhbmlvbiBzaG91bGQgYmUgbmVlZGVkOyB0aGF0IGluZm9ybWF0aW9uIGlzIElQCisgKiBibG9jay1zcGVjaWZpYzsgdGhlIGh3bW9kIGNvZGUgaGFzIGJlZW4gY3JlYXRlZCB0byBoYW5kbGUgdGhpcywgYnV0CisgKiB1bnRpbCBod21vZCBkYXRhIGlzIHJlYWR5IGFuZCBkcml2ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlIFBNCisgKiBydW50aW1lIGNhbGxzIGluIHBsYWNlIG9mIGNsa19lbmFibGUoKS9jbGtfZGlzYWJsZSgpLCBAZmluZF9pZGxlc3QgYW5kCisgKiBAZmluZF9jb21wYW5pb24gbXVzdCwgdW5mb3J0dW5hdGVseSwgcmVtYWluLgorICovCiBzdHJ1Y3QgY2xrb3BzIHsKIAlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKIAl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOwpAQCAtMzAsMTIgKzQ2LDQ1IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAorLyogc3RydWN0IGNsa3NlbF9yYXRlLmZsYWdzIHBvc3NpYmlsaXRpZXMgKi8KKyNkZWZpbmUgUkFURV9JTl8yNDJYCQkoMSA8PCAwKQorI2RlZmluZSBSQVRFX0lOXzI0M1gJCSgxIDw8IDEpCisjZGVmaW5lIFJBVEVfSU5fM1hYWAkJKDEgPDwgMikJLyogcmF0ZXMgY29tbW9uIHRvIGFsbCBPTUFQMyAqLworI2RlZmluZSBSQVRFX0lOXzM0MzBFUzIJCSgxIDw8IDMpCS8qIDM0MzBFUzIgcmF0ZXMgb25seSAqLworI2RlZmluZSBSQVRFX0lOXzM2WFgJCSgxIDw8IDQpCisjZGVmaW5lIFJBVEVfSU5fNDQzMAkJKDEgPDwgNSkKKworI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCisjZGVmaW5lIFJBVEVfSU5fMzQzMEVTMlBMVVMJKFJBVEVfSU5fMzQzMEVTMiB8IFJBVEVfSU5fMzZYWCkKKworLyoqCisgKiBzdHJ1Y3QgY2xrc2VsX3JhdGUgLSByZWdpc3RlciBiaXRmaWVsZCB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBjbGsgZGl2aXNvcnMKKyAqIEB2YWw6IHJlZ2lzdGVyIGJpdGZpZWxkIHZhbHVlIChzaGlmdGVkIHRvIGJpdCAwKQorICogQGRpdjogY2xvY2sgZGl2aXNvciBjb3JyZXNwb25kaW5nIHRvIEB2YWwKKyAqIEBmbGFnczogKHNlZSAic3RydWN0IGNsa3NlbF9yYXRlLmZsYWdzIHBvc3NpYmlsaXRpZXMiIGFib3ZlKQorICoKKyAqIEB2YWwgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBvZiBhIHJlYWQgZnJvbSBzdHJ1Y3QgY2xrLmNsa3NlbF9yZWcKKyAqIEFORCdlZCB3aXRoIHN0cnVjdCBjbGsuY2xrc2VsX21hc2ssIHNoaWZ0ZWQgcmlnaHQgdG8gYml0IDAuCisgKgorICogQGRpdiBpcyB0aGUgZGl2aXNvciB0aGF0IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBwYXJlbnQgY2xvY2sncyByYXRlCisgKiB0byBwcm9kdWNlIHRoZSBjdXJyZW50IGNsb2NrJ3MgcmF0ZS4KKyAqCisgKiBYWFggQGZsYWdzIHByb2JhYmx5IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGFuIHN0cnVjdCBvbWFwX2NoaXAuCisgKi8KIHN0cnVjdCBjbGtzZWxfcmF0ZSB7CiAJdTMyCQkJdmFsOwogCXU4CQkJZGl2OwogCXU4CQkJZmxhZ3M7CiB9OwogCisvKioKKyAqIHN0cnVjdCBjbGtzZWwgLSBhdmFpbGFibGUgcGFyZW50IGNsb2NrcywgYW5kIGEgcG9pbnRlciB0byB0aGVpciBkaXZpc29ycworICogQHBhcmVudDogc3RydWN0IGNsayAqIHRvIGEgcG9zc2libGUgcGFyZW50IGNsb2NrCisgKiBAcmF0ZXM6IGF2YWlsYWJsZSBkaXZpc29ycyBmb3IgdGhpcyBwYXJlbnQgY2xvY2sKKyAqCisgKiBBIHN0cnVjdCBjbGtzZWwgaXMgYWx3YXlzIGFzc29jaWF0ZWQgd2l0aCBvbmUgb3IgbW9yZSBzdHJ1Y3QgY2xrcworICogYW5kIG9uZSBvciBtb3JlIHN0cnVjdCBjbGtzZWxfcmF0ZXMuCisgKi8KIHN0cnVjdCBjbGtzZWwgewogCXN0cnVjdCBjbGsJCSAqcGFyZW50OwogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqcmF0ZXM7CkBAIC0xMTYsNiArMTY1LDYwIEBACiAKICNlbmRpZgogCisvKiBzdHJ1Y3QgY2xrLmZsYWdzIHBvc3NpYmlsaXRpZXMgKi8KKyNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkoMSA8PCAwKQkvKiBVc2UgMzItYml0IGFjY2VzcyAqLworI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgMSkKKyNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgMikKKyNkZWZpbmUgRU5BQkxFX09OX0lOSVQJCSgxIDw8IDMpCS8qIEVuYWJsZSB1cG9uIGZyYW1ld29yayBpbml0ICovCisjZGVmaW5lIElOVkVSVF9FTkFCTEUJCSgxIDw8IDQpCS8qIDAgZW5hYmxlcywgMSBkaXNhYmxlcyAqLworCisvKioKKyAqIHN0cnVjdCBjbGsgLSBPTUFQIHN0cnVjdCBjbGsKKyAqIEBub2RlOiBsaXN0X2hlYWQgY29ubmVjdGluZyB0aGlzIGNsb2NrIGludG8gdGhlIGZ1bGwgY2xvY2sgbGlzdAorICogQG9wczogc3RydWN0IGNsa29wcyAqIGZvciB0aGlzIGNsb2NrCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGNsb2NrIGluIHRoZSBoYXJkd2FyZSAodXNlZCBpbiBod21vZCBkYXRhIGFuZCBkZWJ1ZykKKyAqIEBwYXJlbnQ6IHBvaW50ZXIgdG8gdGhpcyBjbG9jaydzIHBhcmVudCBzdHJ1Y3QgY2xrCisgKiBAY2hpbGRyZW46IGxpc3RfaGVhZCBjb25uZWN0aW5nIHRvIHRoZSBjaGlsZCBjbGtzJyBAc2libGluZyBsaXN0X2hlYWRzCisgKiBAc2libGluZzogbGlzdF9oZWFkIGNvbm5lY3RpbmcgdGhpcyBjbGsgdG8gaXRzIHBhcmVudCBjbGsncyBAY2hpbGRyZW4KKyAqIEByYXRlOiBjdXJyZW50IGNsb2NrIHJhdGUKKyAqIEBlbmFibGVfcmVnOiByZWdpc3RlciB0byB3cml0ZSB0byBlbmFibGUgdGhlIGNsb2NrIChzZWUgQGVuYWJsZV9iaXQpCisgKiBAcmVjYWxjOiBmbiBwdHIgdGhhdCByZXR1cm5zIHRoZSBjbG9jaydzIGN1cnJlbnQgcmF0ZQorICogQHNldF9yYXRlOiBmbiBwdHIgdGhhdCBjYW4gY2hhbmdlIHRoZSBjbG9jaydzIGN1cnJlbnQgcmF0ZQorICogQHJvdW5kX3JhdGU6IGZuIHB0ciB0aGF0IGNhbiByb3VuZCB0aGUgY2xvY2sncyBjdXJyZW50IHJhdGUKKyAqIEBpbml0OiBmbiBwdHIgdG8gZG8gY2xvY2stc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KKyAqIEBlbmFibGVfYml0OiBiaXRzaGlmdCB0byB3cml0ZSB0byBlbmFibGUvZGlzYWJsZSB0aGUgY2xvY2sgKHNlZSBAZW5hYmxlX3JlZykKKyAqIEB1c2Vjb3VudDogbnVtYmVyIG9mIHVzZXJzIHRoYXQgaGF2ZSByZXF1ZXN0ZWQgdGhpcyBjbG9jayB0byBiZSBlbmFibGVkCisgKiBAZml4ZWRfZGl2OiB3aGVuID4gMCwgdGhpcyBjbG9jaydzIHJhdGUgaXMgaXRzIHBhcmVudCdzIHJhdGUgLyBAZml4ZWRfZGl2CisgKiBAZmxhZ3M6IHNlZSAic3RydWN0IGNsay5mbGFncyBwb3NzaWJpbGl0aWVzIiBhYm92ZQorICogQGNsa3NlbF9yZWc6IGZvciBjbGtzZWwgY2xrcywgcmVnaXN0ZXIgdmEgY29udGFpbmluZyBzcmMvZGl2aXNvciBzZWxlY3QKKyAqIEBjbGtzZWxfbWFzazogYml0bWFzayBpbiBAY2xrc2VsX3JlZyBmb3IgdGhlIHNyYy9kaXZpc29yIHNlbGVjdG9yCisgKiBAY2xrc2VsOiBmb3IgY2xrc2VsIGNsa3MsIHBvaW50ZXIgdG8gc3RydWN0IGNsa3NlbCBmb3IgdGhpcyBjbG9jaworICogQGRwbGxfZGF0YTogZm9yIERQTExzLCBwb2ludGVyIHRvIHN0cnVjdCBkcGxsX2RhdGEgZm9yIHRoaXMgY2xvY2sKKyAqIEBjbGtkbV9uYW1lOiBjbG9ja2RvbWFpbiBuYW1lIHRoYXQgdGhpcyBjbG9jayBpcyBjb250YWluZWQgaW4KKyAqIEBjbGtkbTogcG9pbnRlciB0byBzdHJ1Y3QgY2xvY2tkb21haW4sIHJlc29sdmVkIGZyb20gQGNsa2RtX25hbWUgYXQgcnVudGltZQorICogQHJhdGVfb2Zmc2V0OiBiaXRzaGlmdCBmb3IgcmF0ZSBzZWxlY3Rpb24gYml0ZmllbGQgKE9NQVAxIG9ubHkpCisgKiBAc3JjX29mZnNldDogYml0c2hpZnQgZm9yIHNvdXJjZSBzZWxlY3Rpb24gYml0ZmllbGQgKE9NQVAxIG9ubHkpCisgKgorICogWFhYIEByYXRlX29mZnNldCwgQHNyY19vZmZzZXQgc2hvdWxkIHByb2JhYmx5IGJlIHJlbW92ZWQgYW5kIE9NQVAxCisgKiBjbG9jayBjb2RlIGNvbnZlcnRlZCB0byB1c2UgY2xrc2VsLgorICoKKyAqIFhYWCBAdXNlY291bnQgaXMgcG9vcmx5IG5hbWVkLiAgSXQgc2hvdWxkIGJlICJlbmFibGVfY291bnQiIG9yCisgKiBzb21ldGhpbmcgc2ltaWxhci4gICJ1c2VycyIgaW4gdGhlIGRlc2NyaXB0aW9uIHJlZmVycyB0byBrZXJuZWwKKyAqIGNvZGUgKGNvcmUgY29kZSBvciBkcml2ZXJzKSB0aGF0IGhhdmUgY2FsbGVkIGNsa19lbmFibGUoKSBhbmQgbm90CisgKiB5ZXQgY2FsbGVkIGNsa19kaXNhYmxlKCk7IHRoZSB1c2Vjb3VudCBvZiBwYXJlbnQgY2xvY2tzIGlzIGFsc28KKyAqIGluY3JlbWVudGVkIGJ5IHRoZSBjbG9jayBjb2RlIHdoZW4gY2xrX2VuYWJsZSgpIGlzIGNhbGxlZCBvbiBjaGlsZAorICogY2xvY2tzIGFuZCBkZWNyZW1lbnRlZCBieSB0aGUgY2xvY2sgY29kZSB3aGVuIGNsa19kaXNhYmxlKCkgaXMKKyAqIGNhbGxlZCBvbiBjaGlsZCBjbG9ja3MuCisgKgorICogWFhYIEBjbGtkbSwgQHVzZWNvdW50LCBAY2hpbGRyZW4sIEBzaWJsaW5nIHNob3VsZCBiZSBtYXJrZWQgZm9yCisgKiBpbnRlcm5hbCB1c2Ugb25seS4KKyAqCisgKiBAY2hpbGRyZW4gYW5kIEBzaWJsaW5nIGFyZSB1c2VkIHRvIG9wdGltaXplIHBhcmVudC10by1jaGlsZCBjbG9jaworICogdHJlZSB0cmF2ZXJzYWxzLiAgKGNoaWxkLXRvLXBhcmVudCB0cmF2ZXJzYWxzIHVzZSBAcGFyZW50LikKKyAqCisgKiBYWFggVGhlIG5vdGlvbiBvZiB0aGUgY2xvY2sncyBjdXJyZW50IHJhdGUgcHJvYmFibHkgbmVlZHMgdG8gYmUKKyAqIHNlcGFyYXRlZCBmcm9tIHRoZSBjbG9jaydzIHRhcmdldCByYXRlLgorICovCiBzdHJ1Y3QgY2xrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CiAJY29uc3Qgc3RydWN0IGNsa29wcwkqb3BzOwpAQCAtMTI5LDggKzIzMiw4IEBACiAJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKIAlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwogCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7Ci0JX191OAkJCWVuYWJsZV9iaXQ7Ci0JX19zOAkJCXVzZWNvdW50OworCXU4CQkJZW5hYmxlX2JpdDsKKwlzOAkJCXVzZWNvdW50OwogCXU4CQkJZml4ZWRfZGl2OwogCXU4CQkJZmxhZ3M7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCkBAIC0xNDEsOCArMjQ0LDggQEAKIAljb25zdCBjaGFyCQkqY2xrZG1fbmFtZTsKIAlzdHJ1Y3QgY2xvY2tkb21haW4JKmNsa2RtOwogI2Vsc2UKLQlfX3U4CQkJcmF0ZV9vZmZzZXQ7Ci0JX191OAkJCXNyY19vZmZzZXQ7CisJdTgJCQlyYXRlX29mZnNldDsKKwl1OAkJCXNyY19vZmZzZXQ7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19QTV9ERUJVRykgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJc3RydWN0IGRlbnRyeQkJKmRlbnQ7CS8qIEZvciB2aXNpYmxlIHRyZWUgaGllcmFyY2h5ICovCkBAIC0xODgsMjMgKzI5MSw0IEBACiAKIGV4dGVybiBzdHJ1Y3QgY2xrIGR1bW15X2NrOwogCi0vKiBDbG9jayBmbGFncyAqLwotI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCSgxIDw8IDApCS8qIFVzZSAzMi1iaXQgYWNjZXNzICovCi0jZGVmaW5lIENMT0NLX0lETEVfQ09OVFJPTAkoMSA8PCAxKQotI2RlZmluZSBDTE9DS19OT19JRExFX1BBUkVOVAkoMSA8PCAyKQotI2RlZmluZSBFTkFCTEVfT05fSU5JVAkJKDEgPDwgMykJLyogRW5hYmxlIHVwb24gZnJhbWV3b3JrIGluaXQgKi8KLSNkZWZpbmUgSU5WRVJUX0VOQUJMRQkJKDEgPDwgNCkJLyogMCBlbmFibGVzLCAxIGRpc2FibGVzICovCi0KLS8qIENsa3NlbF9yYXRlIGZsYWdzICovCi0jZGVmaW5lIFJBVEVfSU5fMjQyWAkJKDEgPDwgMCkKLSNkZWZpbmUgUkFURV9JTl8yNDNYCQkoMSA8PCAxKQotI2RlZmluZSBSQVRFX0lOXzNYWFgJCSgxIDw8IDIpCS8qIHJhdGVzIGNvbW1vbiB0byBhbGwgT01BUDMgKi8KLSNkZWZpbmUgUkFURV9JTl8zNDMwRVMyCQkoMSA8PCAzKQkvKiAzNDMwRVMyIHJhdGVzIG9ubHkgKi8KLSNkZWZpbmUgUkFURV9JTl8zNlhYCQkoMSA8PCA0KQotI2RlZmluZSBSQVRFX0lOXzQ0MzAJCSgxIDw8IDUpCi0KLSNkZWZpbmUgUkFURV9JTl8yNFhYCQkoUkFURV9JTl8yNDJYIHwgUkFURV9JTl8yNDNYKQotCi0jZGVmaW5lIFJBVEVfSU5fMzQzMEVTMlBMVVMJKFJBVEVfSU5fMzQzMEVTMiB8IFJBVEVfSU5fMzZYWCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAppbmRleCA1ZTRhZmJlLi45Nzc2YjQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKQEAgLTU4LDggKzU4LDcgQEAKIAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDJ4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDN4KHZvaWQpOwotdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpOwotdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zNnh4KHZvaWQpOwordm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zeHh4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc180NDN4KHZvaWQpOwogCiAvKiBUaGVzZSBnZXQgY2FsbGVkIGZyb20gb21hcDJfc2V0X2dsb2JhbHNfeHh4eCgpLCBkbyBub3QgY2FsbCB0aGVzZSAqLwpAQCAtNjksNiArNjgsOCBAQAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19wcmNtKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3VhcnQoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIAordm9pZCBvbWFwM19tYXBfaW8odm9pZCk7CisKIC8qKgogICogb21hcF90ZXN0X3RpbWVvdXQgLSBidXN5LWxvb3AsIHRlc3RpbmcgYSBjb25kaXRpb24KICAqIEBjb25kOiBjb25kaXRpb24gdG8gdGVzdCB1bnRpbCBpdCBldmFsdWF0ZXMgdG8gdHJ1ZQpAQCAtODksNCArOTAsOCBAQAogCX0JCQkJCQkJXAogfSkKIAorZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKm9tYXAyX2dldF9tcHVzc19kZXZpY2Uodm9pZCk7CitleHRlcm4gc3RydWN0IGRldmljZSAqb21hcDJfZ2V0X2RzcF9kZXZpY2Uodm9pZCk7CitleHRlcm4gc3RydWN0IGRldmljZSAqb21hcDJfZ2V0X2wzX2RldmljZSh2b2lkKTsKKwogI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9PTUFQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaAppbmRleCA3NTE0MTc0Li4yZTJhZTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmgKQEAgLTY2LDYgKzY2LDggQEAKICAqIGZhbWlseS4gVGhpcyBkaWZmZXJlbmNlIGNhbiBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCiAgKi8KICNkZWZpbmUgT01BUF9SRVZCSVRTXzAwCQkweDAwCisjZGVmaW5lIE9NQVBfUkVWQklUU18wMQkJMHgwMQorI2RlZmluZSBPTUFQX1JFVkJJVFNfMDIJCTB4MDIKICNkZWZpbmUgT01BUF9SRVZCSVRTXzEwCQkweDEwCiAjZGVmaW5lIE9NQVBfUkVWQklUU18yMAkJMHgyMAogI2RlZmluZSBPTUFQX1JFVkJJVFNfMzAJCTB4MzAKQEAgLTM3Niw2ICszNzgsOCBAQAogI2RlZmluZSBPTUFQMzQzMF9SRVZfRVMzXzFfMgkweDM0MzA1MDM0CiAKICNkZWZpbmUgT01BUDM2MzBfUkVWX0VTMV8wCTB4MzYzMDAwMzQKKyNkZWZpbmUgT01BUDM2MzBfUkVWX0VTMV8xCTB4MzYzMDAxMzQKKyNkZWZpbmUgT01BUDM2MzBfUkVWX0VTMV8yCTB4MzYzMDAyMzQKIAogI2RlZmluZSBPTUFQMzVYWF9DTEFTUwkJMHgzNTAwMDAzNAogI2RlZmluZSBPTUFQMzUwM19SRVYodikJCShPTUFQMzVYWF9DTEFTUyB8ICgweDM1MDMgPDwgMTYpIHwgKHYgPDwgOCkpCkBAIC00MTEsNiArNDE1LDggQEAKICNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18xCQkoMSA8PCA2KQogI2RlZmluZSBDSElQX0lTX09NQVAzNjMwRVMxCQkoMSA8PCA3KQogI2RlZmluZSBDSElQX0lTX09NQVA0NDMwRVMxCQkoMSA8PCA4KQorI2RlZmluZSBDSElQX0lTX09NQVAzNjMwRVMxXzEgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIENISVBfSVNfT01BUDM2MzBFUzFfMiAgICAgICAgICAgKDEgPDwgMTApCiAKICNkZWZpbmUgQ0hJUF9JU19PTUFQMjRYWAkJKENISVBfSVNfT01BUDI0MjAgfCBDSElQX0lTX09NQVAyNDMwKQogCkBAIC00MjQsMTEgKzQzMCwxMiBAQAogICovCiAjZGVmaW5lIENISVBfR0VfT01BUDM0MzBFUzIJCShDSElQX0lTX09NQVAzNDMwRVMyIHwgXAogCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18wIHwgXAotCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18xIHwgXAotCQkJCQkgQ0hJUF9JU19PTUFQMzYzMEVTMSkKKwkJCQkJIENISVBfR0VfT01BUDM0MzBFUzNfMSkKICNkZWZpbmUgQ0hJUF9HRV9PTUFQMzQzMEVTM18xCQkoQ0hJUF9JU19PTUFQMzQzMEVTM18xIHwgXAotCQkJCQkgQ0hJUF9JU19PTUFQMzYzMEVTMSkKLQorCQkJCQkgQ0hJUF9JU19PTUFQMzYzMEVTMSB8IFwKKwkJCQkJIENISVBfR0VfT01BUDM2MzBFUzFfMSkKKyNkZWZpbmUgQ0hJUF9HRV9PTUFQMzYzMEVTMV8xCQkoQ0hJUF9JU19PTUFQMzYzMEVTMV8xIHwgXAorCQkJCQkgQ0hJUF9JU19PTUFQMzYzMEVTMV8yKQogCiBpbnQgb21hcF9jaGlwX2lzKHN0cnVjdCBvbWFwX2NoaXBfaWQgb2NpKTsKIHZvaWQgb21hcDJfY2hlY2tfcmV2aXNpb24odm9pZCk7CkBAIC00NDQsNiArNDUxLDcgQEAKICNkZWZpbmUgT01BUDNfSEFTX05FT04JCQlCSVQoMykKICNkZWZpbmUgT01BUDNfSEFTX0lTUAkJCUJJVCg0KQogI2RlZmluZSBPTUFQM19IQVNfMTkyTUhaX0NMSwkJQklUKDUpCisjZGVmaW5lIE9NQVAzX0hBU19JT19XQUtFVVAJCUJJVCg2KQogCiAjZGVmaW5lIE9NQVAzX0hBU19GRUFUVVJFKGZlYXQsZmxhZykJCQlcCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvbWFwM19oYXNfICMjZmVhdCh2b2lkKQlcCkBAIC00NTcsNSArNDY1LDYgQEAKIE9NQVAzX0hBU19GRUFUVVJFKG5lb24sIE5FT04pCiBPTUFQM19IQVNfRkVBVFVSRShpc3AsIElTUCkKIE9NQVAzX0hBU19GRUFUVVJFKDE5Mm1oel9jbGssIDE5Mk1IWl9DTEspCitPTUFQM19IQVNfRkVBVFVSRShpb193YWtldXAsIElPX1dBS0VVUCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Rpc3BsYXkuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZGlzcGxheS5oCmluZGV4IDFjNTI5Y2UuLjhiZDE1YmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZGlzcGxheS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZGlzcGxheS5oCkBAIC0yMzgsNyArMjM4LDcgQEAKIGludCBkc2lfdmNfZGNzX3dyaXRlX25vc3luYyhpbnQgY2hhbm5lbCwgdTggKmRhdGEsIGludCBsZW4pOwogaW50IGRzaV92Y19kY3NfcmVhZChpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmJ1ZiwgaW50IGJ1Zmxlbik7CiBpbnQgZHNpX3ZjX2Rjc19yZWFkXzEoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQsIHU4ICpkYXRhKTsKLWludCBkc2lfdmNfZGNzX3JlYWRfMihpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTE2ICpkYXRhKTsKK2ludCBkc2lfdmNfZGNzX3JlYWRfMihpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmRhdGExLCB1OCAqZGF0YTIpOwogaW50IGRzaV92Y19zZXRfbWF4X3J4X3BhY2tldF9zaXplKGludCBjaGFubmVsLCB1MTYgbGVuKTsKIGludCBkc2lfdmNfc2VuZF9udWxsKGludCBjaGFubmVsKTsKIGludCBkc2lfdmNfc2VuZF9idGFfc3luYyhpbnQgY2hhbm5lbCk7CkBAIC0yNzcsOCArMjc3LDggQEAKICAqIGlkZW50aWZ5IHRoZSBtb2RlLCBhbmQgZG9lcyBub3QgYWN0dWFsbHkgdXNlIHRoZSBjb25maWdzCiAgKiBpdHNlbGYuIEhvd2V2ZXIsIHRoZSBjb25maWdzIHNob3VsZCBiZSBzb21ldGhpbmcgdGhhdAogICogYSBub3JtYWwgbW9uaXRvciBjYW4gYWxzbyBzaG93ICovCi1jb25zdCBleHRlcm4gc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyBvbWFwX2Rzc19wYWxfdGltaW5nczsKLWNvbnN0IGV4dGVybiBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIG9tYXBfZHNzX250c2NfdGltaW5nczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIG9tYXBfZHNzX3BhbF90aW1pbmdzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3Mgb21hcF9kc3NfbnRzY190aW1pbmdzOwogI2VuZGlmCiAKIHN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyB7CkBAIC01NjAsNyArNTYwLDggQEAKIGludCBvbWFwZHNzX2RzaV9lbmFibGVfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSk7CiAKIGludCBvbWFwX2RzaV9wcmVwYXJlX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQkJICAgIHUxNiAqeCwgdTE2ICp5LCB1MTYgKncsIHUxNiAqaCk7CisJCQkJICAgIHUxNiAqeCwgdTE2ICp5LCB1MTYgKncsIHUxNiAqaCwKKwkJCQkgICAgYm9vbCBlbmxhcmdlX3VwZGF0ZV9hcmVhKTsKIGludCBvbWFwX2RzaV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAogCQlpbnQgY2hhbm5lbCwKIAkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaAppbmRleCAwMjIzMmNhLi5hZjNhMDM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKQEAgLTM0NSw2ICszNDUsNyBAQAogI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLCQkweDAyCiAjZGVmaW5lIE9NQVBfRE1BX1NZTkNfUEFDS0VUCQkweDAzCiAKKyNkZWZpbmUgT01BUF9ETUFfRFNUX1NZTkNfUFJFRkVUQ0gJMHgwMgogI2RlZmluZSBPTUFQX0RNQV9TUkNfU1lOQwkJMHgwMQogI2RlZmluZSBPTUFQX0RNQV9EU1RfU1lOQwkJMHgwMAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RzcF9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZHNwX2NvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTk3NzM2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZHNwX2NvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIE9NQVAgRFNQIGRyaXZlciAoRFNQIEdhdGV3YXkgdmVyc2lvbiAzLjMuMSkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBDb250YWN0OiBUb3NoaWhpcm8gS29iYXlhc2hpIDx0b3NoaWhpcm8ua29iYXlhc2hpQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgQVNNX0FSQ0hfRFNQX0NPTU1PTl9ICi0jZGVmaW5lIEFTTV9BUkNIX0RTUF9DT01NT05fSAotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NTVVfRldLKQotZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVxdWVzdF9tcHVpKHZvaWQpOwotZXh0ZXJuIHZvaWQgb21hcF9kc3BfcmVsZWFzZV9tcHVpKHZvaWQpOwotZXh0ZXJuIGludCBvbWFwX2RzcF9yZXF1ZXN0X21lbSh2b2lkKTsKLWV4dGVybiBpbnQgb21hcF9kc3BfcmVsZWFzZV9tZW0odm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgb21hcF9kc3BfcmVxdWVzdF9tZW0odm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNkZWZpbmUgb21hcF9kc3BfcmVsZWFzZV9tZW0oKQlkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYgLyogQVNNX0FSQ0hfRFNQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2dwbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCmluZGV4IDE0NTgzOGEuLjlmZDk5YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oCkBAIC0yNSwxMCArMjUsMjYgQEAKICNkZWZpbmUgR1BNQ19DU19OQU5EX0FERFJFU1MJMHgyMAogI2RlZmluZSBHUE1DX0NTX05BTkRfREFUQQkweDI0CiAKLSNkZWZpbmUgR1BNQ19DT05GSUcJCTB4NTAKLSNkZWZpbmUgR1BNQ19TVEFUVVMJCTB4NTQKLSNkZWZpbmUgR1BNQ19DUzBfQkFTRQkJMHg2MAotI2RlZmluZSBHUE1DX0NTX1NJWkUJCTB4MzAKKy8qIENvbnRyb2wgQ29tbWFuZHMgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUdfUkRZX0JTWQkweDAwMDAwMDAxCisjZGVmaW5lIEdQTUNfQ09ORklHX0RFVl9TSVpFCTB4MDAwMDAwMDIKKyNkZWZpbmUgR1BNQ19DT05GSUdfREVWX1RZUEUJMHgwMDAwMDAwMworI2RlZmluZSBHUE1DX1NFVF9JUlFfU1RBVFVTCTB4MDAwMDAwMDQKKyNkZWZpbmUgR1BNQ19DT05GSUdfV1AJCTB4MDAwMDAwMDUKKworI2RlZmluZSBHUE1DX0dFVF9JUlFfU1RBVFVTCTB4MDAwMDAwMDYKKyNkZWZpbmUgR1BNQ19QUkVGRVRDSF9GSUZPX0NOVAkweDAwMDAwMDA3IC8qIGJ5dGVzIGF2YWlsYWJsZSBpbiBGSUZPIGZvciByL3cgKi8KKyNkZWZpbmUgR1BNQ19QUkVGRVRDSF9DT1VOVAkweDAwMDAwMDA4IC8qIHJlbWFpbmluZyBieXRlcyB0byBiZSByZWFkL3dyaXRlKi8KKyNkZWZpbmUgR1BNQ19TVEFUVVNfQlVGRkVSCTB4MDAwMDAwMDkgLyogMTogYnVmZmVyIGlzIGF2YWlsYWJsZSB0byB3cml0ZSAqLworCisjZGVmaW5lIEdQTUNfTkFORF9DT01NQU5ECTB4MDAwMDAwMGEKKyNkZWZpbmUgR1BNQ19OQU5EX0FERFJFU1MJMHgwMDAwMDAwYgorI2RlZmluZSBHUE1DX05BTkRfREFUQQkJMHgwMDAwMDAwYworCisvKiBFQ0MgY29tbWFuZHMgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfUkVBRAkJMCAvKiBSZXNldCBIYXJkd2FyZSBFQ0MgZm9yIHJlYWQgKi8KKyNkZWZpbmUgR1BNQ19FQ0NfV1JJVEUJCTEgLyogUmVzZXQgSGFyZHdhcmUgRUNDIGZvciB3cml0ZSAqLworI2RlZmluZSBHUE1DX0VDQ19SRUFEU1lOCTIgLyogUmVzZXQgYmVmb3JlIHN5bmRyb20gaXMgcmVhZCBiYWNrICovCiAKICNkZWZpbmUgR1BNQ19DT05GSUcxX1dSQVBCVVJTVF9TVVBQICAgICAoMSA8PCAzMSkKICNkZWZpbmUgR1BNQ19DT05GSUcxX1JFQURNVUxUSVBMRV9TVVBQICAoMSA8PCAzMCkKQEAgLTQ3LDcgKzYzLDYgQEAKICNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVNJWkVfMTYgICAgICBHUE1DX0NPTkZJRzFfREVWSUNFU0laRSgxKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSh2YWwpICAgICgodmFsICYgMykgPDwgMTApCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9ERVZJQ0VUWVBFX05PUiAgICAgR1BNQ19DT05GSUcxX0RFVklDRVRZUEUoMCkKLSNkZWZpbmUgR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTkFORCAgICBHUE1DX0NPTkZJRzFfREVWSUNFVFlQRSgyKQogI2RlZmluZSBHUE1DX0NPTkZJRzFfTVVYQUREREFUQSAgICAgICAgICgxIDw8IDkpCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9USU1FX1BBUkFfR1JBTiAgICAgKDEgPDwgNCkKICNkZWZpbmUgR1BNQ19DT05GSUcxX0ZDTEtfRElWKHZhbCkgICAgICAodmFsICYgMykKQEAgLTU2LDYgKzcxLDE0IEBACiAjZGVmaW5lIEdQTUNfQ09ORklHMV9GQ0xLX0RJVjQgICAgICAgICAgKEdQTUNfQ09ORklHMV9GQ0xLX0RJVigzKSkKICNkZWZpbmUgR1BNQ19DT05GSUc3X0NTVkFMSUQJCSgxIDw8IDYpCiAKKyNkZWZpbmUgR1BNQ19ERVZJQ0VUWVBFX05PUgkJMAorI2RlZmluZSBHUE1DX0RFVklDRVRZUEVfTkFORAkJMgorI2RlZmluZSBHUE1DX0NPTkZJR19XUklURVBST1RFQ1QJMHgwMDAwMDAxMAorI2RlZmluZSBHUE1DX1NUQVRVU19CVUZGX0VNUFRZCQkweDAwMDAwMDAxCisjZGVmaW5lIFdSX1JEX1BJTl9NT05JVE9SSU5HCQkweDAwNjAwMDAwCisjZGVmaW5lIEdQTUNfUFJFRkVUQ0hfU1RBVFVTX0ZJRk9fQ05UKHZhbCkJKCh2YWwgPj4gMjQpICYgMHg3RikKKyNkZWZpbmUgR1BNQ19QUkVGRVRDSF9TVEFUVVNfQ09VTlQodmFsKQkodmFsICYgMHgwMDAwM2ZmZikKKwogLyoKICAqIE5vdGUgdGhhdCBhbGwgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBpbiBuYW5vc2Vjb25kcywgd2hpbGUKICAqIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIGluIGdwbWNfZmNrIGN5Y2xlcy4KQEAgLTEwOCwxMCArMTMxLDE1IEBACiBleHRlcm4gaW50IGdwbWNfY3NfcmVzZXJ2ZWQoaW50IGNzKTsKIGV4dGVybiBpbnQgZ3BtY19wcmVmZXRjaF9lbmFibGUoaW50IGNzLCBpbnQgZG1hX21vZGUsCiAJCQkJCXVuc2lnbmVkIGludCB1MzJfY291bnQsIGludCBpc193cml0ZSk7Ci1leHRlcm4gdm9pZCBncG1jX3ByZWZldGNoX3Jlc2V0KHZvaWQpOwotZXh0ZXJuIGludCBncG1jX3ByZWZldGNoX3N0YXR1cyh2b2lkKTsKK2V4dGVybiBpbnQgZ3BtY19wcmVmZXRjaF9yZXNldChpbnQgY3MpOwogZXh0ZXJuIHZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwM19ncG1jX3Jlc3RvcmVfY29udGV4dCh2b2lkKTsKIGV4dGVybiB2b2lkIGdwbWNfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZ3BtY19yZWFkX3N0YXR1cyhpbnQgY21kKTsKK2V4dGVybiBpbnQgZ3BtY19jc19jb25maWd1cmUoaW50IGNzLCBpbnQgY21kLCBpbnQgd3ZhbCk7CitleHRlcm4gaW50IGdwbWNfbmFuZF9yZWFkKGludCBjcywgaW50IGNtZCk7CitleHRlcm4gaW50IGdwbWNfbmFuZF93cml0ZShpbnQgY3MsIGludCBjbWQsIGludCB3dmFsKTsKIAoraW50IGdwbWNfZW5hYmxlX2h3ZWNjKGludCBjcywgaW50IG1vZGUsIGludCBkZXZfd2lkdGgsIGludCBlY2Nfc2l6ZSk7CitpbnQgZ3BtY19jYWxjdWxhdGVfZWNjKGludCBjcywgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvbW11LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvbW11LmgKaW5kZXggMDc1MmFmOS4uMzNjN2Q0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb21tdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW9tbXUuaApAQCAtODAsNiArODAsNyBAQAogCiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgaW9tbXUgKm9iaik7CiAJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBpb21tdSAqb2JqKTsKKwl2b2lkICgqc2V0X3R3bCkoc3RydWN0IGlvbW11ICpvYmosIGJvb2wgb24pOwogCXUzMiAoKmZhdWx0X2lzcikoc3RydWN0IGlvbW11ICpvYmosIHUzMiAqcmEpOwogCiAJdm9pZCAoKnRsYl9yZWFkX2NyKShzdHJ1Y3QgaW9tbXUgKm9iaiwgc3RydWN0IGNyX3JlZ3MgKmNyKTsKQEAgLTE0Myw2ICsxNDQsNyBAQAogZXh0ZXJuIHUzMiBpb3RsYl9jcl90b192aXJ0KHN0cnVjdCBjcl9yZWdzICpjcik7CiAKIGV4dGVybiBpbnQgbG9hZF9pb3RsYl9lbnRyeShzdHJ1Y3QgaW9tbXUgKm9iaiwgc3RydWN0IGlvdGxiX2VudHJ5ICplKTsKK2V4dGVybiB2b2lkIGlvbW11X3NldF90d2woc3RydWN0IGlvbW11ICpvYmosIGJvb2wgb24pOwogZXh0ZXJuIHZvaWQgZmx1c2hfaW90bGJfcGFnZShzdHJ1Y3QgaW9tbXUgKm9iaiwgdTMyIGRhKTsKIGV4dGVybiB2b2lkIGZsdXNoX2lvdGxiX3JhbmdlKHN0cnVjdCBpb21tdSAqb2JqLCB1MzIgc3RhcnQsIHUzMiBlbmQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfaW90bGJfYWxsKHN0cnVjdCBpb21tdSAqb2JqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWFpbGJveC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKaW5kZXggNzI5MTY2Yi4uOTk3NjU2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tYWlsYm94LmgKQEAgLTMsMTAgKzMsMTEgQEAKICNpZm5kZWYgTUFJTEJPWF9ICiAjZGVmaW5lIE1BSUxCT1hfSAogCi0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAogdHlwZWRlZiB1MzIgbWJveF9tc2dfdDsKIHN0cnVjdCBvbWFwX21ib3g7CkBAIC00Miw3ICs0Myw3IEBACiAKIHN0cnVjdCBvbWFwX21ib3hfcXVldWUgewogCXNwaW5sb2NrX3QJCWxvY2s7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUJKnF1ZXVlOworCXN0cnVjdCBrZmlmbwkJZmlmbzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKIAlpbnQJKCpjYWxsYmFjaykodm9pZCAqKTsKQEAgLTUyLDE5ICs1MywxMCBAQAogc3RydWN0IG9tYXBfbWJveCB7CiAJY2hhcgkJCSpuYW1lOwogCXVuc2lnbmVkIGludAkJaXJxOwotCiAJc3RydWN0IG9tYXBfbWJveF9xdWV1ZQkqdHhxLCAqcnhxOwotCiAJc3RydWN0IG9tYXBfbWJveF9vcHMJKm9wczsKLQotCW1ib3hfbXNnX3QJCXNlcV9zbmQsIHNlcV9yY3Y7Ci0KIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwotCi0Jc3RydWN0IG9tYXBfbWJveAkqbmV4dDsKIAl2b2lkCQkJKnByaXY7Ci0KLQl2b2lkCQkJKCplcnJfbm90aWZ5KSh2b2lkKTsKIH07CiAKIGludCBvbWFwX21ib3hfbXNnX3NlbmQoc3RydWN0IG9tYXBfbWJveCAqLCBtYm94X21zZ190IG1zZyk7CkBAIC03Myw4ICs2NSw4IEBACiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKik7CiB2b2lkIG9tYXBfbWJveF9wdXQoc3RydWN0IG9tYXBfbWJveCAqKTsKIAotaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBvbWFwX21ib3ggKik7Ci1pbnQgb21hcF9tYm94X3VucmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqKTsKK2ludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgb21hcF9tYm94ICoqKTsKK2ludCBvbWFwX21ib3hfdW5yZWdpc3Rlcih2b2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfbWJveF9zYXZlX2N0eChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY2JzcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY2JzcC5oCmluZGV4IDk3NTc0NGYuLmI0ZmY2YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jYnNwLmgKQEAgLTQ3Myw2ICs0NzMsNyBAQAogdm9pZCBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKTsKIHUxNiBvbWFwX21jYnNwX2dldF9tYXhfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCk7CiB1MTYgb21hcF9tY2JzcF9nZXRfbWF4X3J4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQpOwordTE2IG9tYXBfbWNic3BfZ2V0X2ZpZm9fc2l6ZSh1bnNpZ25lZCBpbnQgaWQpOwogdTE2IG9tYXBfbWNic3BfZ2V0X3R4X2RlbGF5KHVuc2lnbmVkIGludCBpZCk7CiB1MTYgb21hcF9tY2JzcF9nZXRfcnhfZGVsYXkodW5zaWduZWQgaW50IGlkKTsKIGludCBvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZSh1bnNpZ25lZCBpbnQgaWQpOwpAQCAtNDgzLDYgKzQ4NCw3IEBACiB7IH0KIHN0YXRpYyBpbmxpbmUgdTE2IG9tYXBfbWNic3BfZ2V0X21heF90eF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHUxNiBvbWFwX21jYnNwX2dldF9tYXhfcnhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB1MTYgb21hcF9tY2JzcF9nZXRfZmlmb19zaXplKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB1MTYgb21hcF9tY2JzcF9nZXRfdHhfZGVsYXkodW5zaWduZWQgaW50IGlkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHUxNiBvbWFwX21jYnNwX2dldF9yeF9kZWxheSh1bnNpZ25lZCBpbnQgaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG9tYXBfbWNic3BfZ2V0X2RtYV9vcF9tb2RlKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKaW5kZXggYzgzNWYxZS4uOWI4OWVjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCkBAIC0xMjIsNiArMTIyLDggQEAKIAkJLyogQ2FsbCBiYWNrIGFmdGVyIGVuYWJsaW5nIC8gZGlzYWJsaW5nIHJlZ3VsYXRvcnMgKi8KIAkJdm9pZCAoKmFmdGVyX3NldF9yZWcpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCiAJCQkJICAgICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKTsKKwkJLyogaWYgd2UgaGF2ZSBzcGVjaWFsIGNhcmQsIGluaXQgaXQgdXNpbmcgdGhpcyBjYWxsYmFjayAqLworCQl2b2lkICgqaW5pdF9jYXJkKShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwogCiAJCS8qIHJldHVybiBNTUMgY292ZXIgc3dpdGNoIHN0YXRlLCBjYW4gYmUgTlVMTCBpZiBub3Qgc3VwcG9ydGVkLgogCQkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXV4LmgKaW5kZXggYzc0NzJhMi4uYWViYTcxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oCkBAIC0xMTQsMjggKzExNCwxMSBAQAogCVBVX1BEX1JFRyhOQSwgMCkJCVwKIH0sCiAKLSNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAotCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCi17CQkJCQkJCQlcCi0JLm5hbWUJCT0gZGVzYywJCQkJCVwKLQkuZGVidWcJCT0gZGJnLAkJCQkJXAotCS5tdXhfcmVnCT0gcmVnX29mZnNldCwJCQkJXAotCS5tYXNrCQk9IG1vZGUsCQkJCQlcCi0JLnB1bGxfdmFsCT0gcHVsbF9lbiwJCQkJXAotCS5wdV9wZF92YWwJPSBwdWxsX21vZGUsCQkJCVwKLX0sCi0KLS8qIDI0eHgvMzR4eCBtdXggYml0IGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDJfUFVMTF9FTkEJCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyX1BVTExfVVAJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAyX0FMVEVMRUNUUklDQUxTRUwJKDEgPDwgNSkKLQogc3RydWN0IHBpbl9jb25maWcgewogCWNoYXIgCQkJKm5hbWU7CiAJY29uc3QgdW5zaWduZWQgaW50IAltdXhfcmVnOwogCXVuc2lnbmVkIGNoYXIJCWRlYnVnOwogCi0jaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKIAljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKIApAQCAtMTQ3LDcgKzEzMCw2IEBACiAJY29uc3QgY2hhciAqcHVfcGRfbmFtZTsKIAljb25zdCB1bnNpZ25lZCBpbnQgcHVfcGRfcmVnOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgcHVfcGRfdmFsOwotI2VuZGlmCiAKICNpZglkZWZpbmVkKENPTkZJR19PTUFQX01VWF9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpCiAJY29uc3QgY2hhciAqbXV4X3JlZ19uYW1lOwpAQCAtMTkxLDYgKzE3MywxMCBAQAogCVNQSV83WFhfNCwKIAlTUElfN1hYXzUsCiAJU1BJXzdYWF82LAorCisJLyogVUFSVCAqLworCVVBUlRfN1hYXzEsCisJVUFSVF83WFhfMiwKIH07CiAKIGVudW0gb21hcDF4eHhfaW5kZXggewpAQCAtNDQ2LDIwOCArNDMyLDYgQEAKIAogfTsKIAotZW51bSBvbWFwMjR4eF9pbmRleCB7Ci0JLyogMjR4eCBJMkMgKi8KLQlNMTlfMjRYWF9JMkMxX1NDTCwKLQlMMTVfMjRYWF9JMkMxX1NEQSwKLQlKMTVfMjRYWF9JMkMyX1NDTCwKLQlIMTlfMjRYWF9JMkMyX1NEQSwKLQotCS8qIDI0eHggTWVuZWxhdXMgaW50ZXJydXB0ICovCi0JVzE5XzI0WFhfU1lTX05JUlEsCi0KLQkvKiAyNHh4IGNsb2NrICovCi0JVzE0XzI0WFhfU1lTX0NMS09VVCwKLQotCS8qIDI0eHggR1BNQyBjaGlwc2VsZWN0cywgd2FpdCBwaW4gbW9uaXRvcmluZyAqLwotCUUyX0dQTUNfTkNTMiwKLQlMMl9HUE1DX05DUzcsCi0JTDNfR1BNQ19XQUlUMCwKLQlON19HUE1DX1dBSVQxLAotCU0xX0dQTUNfV0FJVDIsCi0JUDFfR1BNQ19XQUlUMywKLQotCS8qIDI0MlggTWNCU1AgKi8KLQlZMTVfMjRYWF9NQ0JTUDJfQ0xLWCwKLQlSMTRfMjRYWF9NQ0JTUDJfRlNYLAotCVcxNV8yNFhYX01DQlNQMl9EUiwKLQlWMTVfMjRYWF9NQ0JTUDJfRFgsCi0KLQkvKiAyNHh4IEdQSU8gKi8KLQlNMjFfMjQyWF9HUElPMTEsCi0JUDIxXzI0MlhfR1BJTzEyLAotCUFBMTBfMjQyWF9HUElPMTMsCi0JQUE2XzI0MlhfR1BJTzE0LAotCUFBNF8yNDJYX0dQSU8xNSwKLQlZMTFfMjQyWF9HUElPMTYsCi0JQUExMl8yNDJYX0dQSU8xNywKLQlBQThfMjQyWF9HUElPNTgsCi0JWTIwXzI0WFhfR1BJTzYwLAotCVc0X18yNFhYX0dQSU83NCwKLQlOMTVfMjRYWF9HUElPODUsCi0JTTE1XzI0WFhfR1BJTzkyLAotCVAyMF8yNFhYX0dQSU85MywKLQlQMThfMjRYWF9HUElPOTUsCi0JTTE4XzI0WFhfR1BJTzk2LAotCUwxNF8yNFhYX0dQSU85NywKLQlKMTVfMjRYWF9HUElPOTksCi0JVjE0XzI0WFhfR1BJTzExNywKLQlQMTRfMjRYWF9HUElPMTI1LAotCi0JLyogMjQyeCBEQkcgR1BJTyAqLwotCVY0XzI0MlhfR1BJTzQ5LAotCVcyXzI0MlhfR1BJTzUwLAotCVU0XzI0MlhfR1BJTzUxLAotCVYzXzI0MlhfR1BJTzUyLAotCVYyXzI0MlhfR1BJTzUzLAotCVY2XzI0MlhfR1BJTzUzLAotCVQ0XzI0MlhfR1BJTzU0LAotCVk0XzI0MlhfR1BJTzU0LAotCVQzXzI0MlhfR1BJTzU1LAotCVUyXzI0MlhfR1BJTzU2LAotCi0JLyogMjR4eCBleHRlcm5hbCBETUEgcmVxdWVzdHMgKi8KLQlBQTEwXzI0MlhfRE1BUkVRMCwKLQlBQTZfMjQyWF9ETUFSRVExLAotCUU0XzI0MlhfRE1BUkVRMiwKLQlHNF8yNDJYX0RNQVJFUTMsCi0JRDNfMjQyWF9ETUFSRVE0LAotCUUzXzI0MlhfRE1BUkVRNSwKLQotCS8qIFVBUlQzICovCi0JSzE1XzI0WFhfVUFSVDNfVFgsCi0JSzE0XzI0WFhfVUFSVDNfUlgsCi0KLQkvKiBNTUMvU0RJTyAqLwotCUcxOV8yNFhYX01NQ19DTEtPLAotCUgxOF8yNFhYX01NQ19DTUQsCi0JRjIwXzI0WFhfTU1DX0RBVDAsCi0JSDE0XzI0WFhfTU1DX0RBVDEsCi0JRTE5XzI0WFhfTU1DX0RBVDIsCi0JRDE5XzI0WFhfTU1DX0RBVDMsCi0JRjE5XzI0WFhfTU1DX0RBVF9ESVIwLAotCUUyMF8yNFhYX01NQ19EQVRfRElSMSwKLQlGMThfMjRYWF9NTUNfREFUX0RJUjIsCi0JRTE4XzI0WFhfTU1DX0RBVF9ESVIzLAotCUcxOF8yNFhYX01NQ19DTURfRElSLAotCUgxNV8yNFhYX01NQ19DTEtJLAotCi0JLyogRnVsbCBzcGVlZCBVU0IgKi8KLQlKMjBfMjRYWF9VU0IwX1BVRU4sCi0JSjE5XzI0WFhfVVNCMF9WUCwKLQlLMjBfMjRYWF9VU0IwX1ZNLAotCUoxOF8yNFhYX1VTQjBfUkNWLAotCUsxOV8yNFhYX1VTQjBfVFhFTiwKLQlKMTRfMjRYWF9VU0IwX1NFMCwKLQlLMThfMjRYWF9VU0IwX0RBVCwKLQotCU4xNF8yNFhYX1VTQjFfU0UwLAotCVcxMl8yNFhYX1VTQjFfU0UwLAotCVAxNV8yNFhYX1VTQjFfREFULAotCVIxM18yNFhYX1VTQjFfREFULAotCVcyMF8yNFhYX1VTQjFfVFhFTiwKLQlQMTNfMjRYWF9VU0IxX1RYRU4sCi0JVjE5XzI0WFhfVVNCMV9SQ1YsCi0JVjEyXzI0WFhfVVNCMV9SQ1YsCi0KLQlBQTEwXzI0WFhfVVNCMl9TRTAsCi0JWTExXzI0WFhfVVNCMl9EQVQsCi0JQUExMl8yNFhYX1VTQjJfVFhFTiwKLQlBQTZfMjRYWF9VU0IyX1JDViwKLQlBQTRfMjRYWF9VU0IyX1RMTFNFMCwKLQotCS8qIEtleXBhZCBHUElPKi8KLQlUMTlfMjRYWF9LQlIwLAotCVIxOV8yNFhYX0tCUjEsCi0JVjE4XzI0WFhfS0JSMiwKLQlNMjFfMjRYWF9LQlIzLAotCUU1X18yNFhYX0tCUjQsCi0JTTE4XzI0WFhfS0JSNSwKLQlSMjBfMjRYWF9LQkMwLAotCU0xNF8yNFhYX0tCQzEsCi0JSDE5XzI0WFhfS0JDMiwKLQlWMTdfMjRYWF9LQkMzLAotCVAyMV8yNFhYX0tCQzQsCi0JTDE0XzI0WFhfS0JDNSwKLQlOMTlfMjRYWF9LQkM2LAotCi0JLyogMjR4eCBNZW5lbGF1cyBLZXlwYWQgR1BJTyAqLwotCUIzX18yNFhYX0tCUjUsCi0JQUE0XzI0WFhfS0JDMiwKLQlCMTNfMjRYWF9LQkM2LAotCi0JLyogMjQzMCBVU0IgKi8KLQlBRDlfMjQzMF9VU0IwX1BVRU4sCi0JWTExXzI0MzBfVVNCMF9WUCwKLQlBRDdfMjQzMF9VU0IwX1ZNLAotCUFFN18yNDMwX1VTQjBfUkNWLAotCUFENF8yNDMwX1VTQjBfVFhFTiwKLQlBRjlfMjQzMF9VU0IwX1NFMCwKLQlBRTZfMjQzMF9VU0IwX0RBVCwKLQlBRDI0XzI0MzBfVVNCMV9TRTAsCi0JQUIyNF8yNDMwX1VTQjFfUkNWLAotCVkyNV8yNDMwX1VTQjFfVFhFTiwKLQlBQTI2XzI0MzBfVVNCMV9EQVQsCi0KLQkvKiAyNDMwIEhTLVVTQiAqLwotCUFEOV8yNDMwX1VTQjBIU19EQVRBMywKLQlZMTFfMjQzMF9VU0IwSFNfREFUQTQsCi0JQUQ3XzI0MzBfVVNCMEhTX0RBVEE1LAotCUFFN18yNDMwX1VTQjBIU19EQVRBNiwKLQlBRDRfMjQzMF9VU0IwSFNfREFUQTIsCi0JQUY5XzI0MzBfVVNCMEhTX0RBVEEwLAotCUFFNl8yNDMwX1VTQjBIU19EQVRBMSwKLQlBRThfMjQzMF9VU0IwSFNfQ0xLLAotCUFEOF8yNDMwX1VTQjBIU19ESVIsCi0JQUU1XzI0MzBfVVNCMEhTX1NUUCwKLQlBRTlfMjQzMF9VU0IwSFNfTlhULAotCUFDN18yNDMwX1VTQjBIU19EQVRBNywKLQotCS8qIDI0MzAgTWNCU1AgKi8KLQlBRDZfMjQzMF9NQ0JTUF9DTEtTLAotCi0JQUIyXzI0MzBfTUNCU1AxX0NMS1IsCi0JQUQ1XzI0MzBfTUNCU1AxX0ZTUiwKLQlBQTFfMjQzMF9NQ0JTUDFfRFgsCi0JQUYzXzI0MzBfTUNCU1AxX0RSLAotCUFCM18yNDMwX01DQlNQMV9GU1gsCi0JWTlfMjQzMF9NQ0JTUDFfQ0xLWCwKLQotCUFDMTBfMjQzMF9NQ0JTUDJfRlNYLAotCUFEMTZfMjQzMF9NQ0JTUDJfQ0xYLAotCUFFMTNfMjQzMF9NQ0JTUDJfRFgsCi0JQUQxM18yNDMwX01DQlNQMl9EUiwKLQlBQzEwXzI0MzBfTUNCU1AyX0ZTWF9PRkYsCi0JQUQxNl8yNDMwX01DQlNQMl9DTFhfT0ZGLAotCUFFMTNfMjQzMF9NQ0JTUDJfRFhfT0ZGLAotCUFEMTNfMjQzMF9NQ0JTUDJfRFJfT0ZGLAotCi0JQUM5XzI0MzBfTUNCU1AzX0NMS1gsCi0JQUU0XzI0MzBfTUNCU1AzX0ZTWCwKLQlBRTJfMjQzMF9NQ0JTUDNfRFIsCi0JQUY0XzI0MzBfTUNCU1AzX0RYLAotCi0JTjNfMjQzMF9NQ0JTUDRfQ0xLWCwKLQlBRDIzXzI0MzBfTUNCU1A0X0RSLAotCUFCMjVfMjQzMF9NQ0JTUDRfRFgsCi0JQUMyNV8yNDMwX01DQlNQNF9GU1gsCi0KLQlBRTE2XzI0MzBfTUNCU1A1X0NMS1gsCi0JQUYxMl8yNDMwX01DQlNQNV9GU1gsCi0JSzdfMjQzMF9NQ0JTUDVfRFgsCi0JTTFfMjQzMF9NQ0JTUDVfRFIsCi0KLQkvKiAyNDMwIE1jU1BJKi8KLQlZMThfMjQzMF9NQ1NQSTFfQ0xLLAotCUFEMTVfMjQzMF9NQ1NQSTFfU0lNTywKLQlBRTE3XzI0MzBfTUNTUEkxX1NPTUksCi0JVTFfMjQzMF9NQ1NQSTFfQ1MwLAotCi0JLyogVG91Y2hzY3JlZW4gR1BJTyAqLwotCUFGMTlfMjQzMF9HUElPXzg1LAotCi19OwotCiBzdHJ1Y3Qgb21hcF9tdXhfY2ZnIHsKIAlzdHJ1Y3QgcGluX2NvbmZpZwkqcGluczsKIAl1bnNpZ25lZCBsb25nCQlzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L25hbmQuaAppbmRleCBmOGVmZDU0Ni4uNjU2MmNkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTIxLDEzICsyMSwxMSBAQAogCWludAkJCSgqZGV2X3JlYWR5KShzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKik7CiAJaW50CQkJZG1hX2NoYW5uZWw7CiAJdW5zaWduZWQgbG9uZwkJcGh5c19iYXNlOwotCXZvaWQgX19pb21lbQkJKmdwbWNfY3NfYmFzZWFkZHI7Ci0Jdm9pZCBfX2lvbWVtCQkqZ3BtY19iYXNlYWRkcjsKIAlpbnQJCQlkZXZzaXplOwogfTsKIAotLyogc2l6ZSAoNCBLaUIpIGZvciBJTyBtYXBwaW5nICovCi0jZGVmaW5lCU5BTkRfSU9fU0laRQlTWl80SworLyogbWluaW11bSBzaXplIGZvciBJTyBtYXBwaW5nICovCisjZGVmaW5lCU5BTkRfSU9fU0laRQk0CiAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDJfTU9EVUxFKQogZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ub2tpYS1kc2ktcGFuZWwuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbm9raWEtZHNpLXBhbmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhYjY1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbm9raWEtZHNpLXBhbmVsLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9OT0tJQV9EU0lfUEFORUxfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9OT0tJQV9EU0lfUEFORUxfSAorCisjaW5jbHVkZSAiZGlzcGxheS5oIgorCisvKioKKyAqIHN0cnVjdCBub2tpYV9kc2lfcGFuZWxfZGF0YSAtIE5va2lhIERTSSBwYW5lbCBkcml2ZXIgY29uZmlndXJhdGlvbgorICogQG5hbWU6IHBhbmVsIG5hbWUKKyAqIEB1c2VfZXh0X3RlOiB1c2UgZXh0ZXJuYWwgVEUKKyAqIEBleHRfdGVfZ3BpbzogZXh0ZXJuYWwgVEUgR1BJTworICogQHVzZV9lc2RfY2hlY2s6IHBlcmZvcm0gRVNEIGNoZWNrcworICogQG1heF9iYWNrbGlnaHRfbGV2ZWw6IG1heGltdW0gYmFja2xpZ2h0IGxldmVsCisgKiBAc2V0X2JhY2tsaWdodDogcG9pbnRlciB0byBiYWNrbGlnaHQgc2V0IGZ1bmN0aW9uCisgKiBAZ2V0X2JhY2tsaWdodDogcG9pbnRlciB0byBiYWNrbGlnaHQgZ2V0IGZ1bmN0aW9uCisgKi8KK3N0cnVjdCBub2tpYV9kc2lfcGFuZWxfZGF0YSB7CisJY29uc3QgY2hhciAqbmFtZTsKKworCWludCByZXNldF9ncGlvOworCisJYm9vbCB1c2VfZXh0X3RlOworCWludCBleHRfdGVfZ3BpbzsKKworCWJvb2wgdXNlX2VzZF9jaGVjazsKKworCWludCBtYXhfYmFja2xpZ2h0X2xldmVsOworCWludCAoKnNldF9iYWNrbGlnaHQpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgaW50IGxldmVsKTsKKwlpbnQgKCpnZXRfYmFja2xpZ2h0KShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworfTsKKworI2VuZGlmIC8qIF9fQVJDSF9BUk1fUExBVF9PTUFQX05PS0lBX0RTSV9QQU5FTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAtcG0uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcC1wbS5oCmluZGV4IDNlZTQxZDcuLjcyOGZiYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcC1wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcC1wbS5oCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIG9tYXAtcG0uaCAtIE9NQVAgcG93ZXIgbWFuYWdlbWVudCBpbnRlcmZhY2UKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICogUGF1bCBXYWxtc2xleQogICoKICAqIEludGVyZmFjZSBkZXZlbG9wZWQgYnkgKGluIGFscGhhYmV0aWNhbCBvcmRlcik6IEthcnRoaWsgRGFzdSwgSm91bmkKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCiAKQEAgLTg5LDcgKzkwLDcgQEAKICAqIEB0OiBtYXhpbXVtIE1QVSB3YWtldXAgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKICAqCiAgKiBSZXF1ZXN0IHRoYXQgdGhlIG1heGltdW0gaW50ZXJydXB0IGxhdGVuY3kgZm9yIHRoZSBNUFUgdG8gYmUgbm8KLSAqIGdyZWF0ZXIgdGhhbiAndCcgbWljcm9zZWNvbmRzLiAiSW50ZXJydXB0IGxhdGVuY3kiIGluIHRoaXMgY2FzZSBpcworICogZ3JlYXRlciB0aGFuIEB0IG1pY3Jvc2Vjb25kcy4gIkludGVycnVwdCBsYXRlbmN5IiBpbiB0aGlzIGNhc2UgaXMKICAqIGRlZmluZWQgYXMgdGhlIGVsYXBzZWQgdGltZSBmcm9tIHRoZSBvY2N1cnJlbmNlIG9mIGEgaGFyZHdhcmUgb3IKICAqIHRpbWVyIGludGVycnVwdCB0byB0aGUgdGltZSB3aGVuIHRoZSBkZXZpY2UgZHJpdmVyJ3MgaW50ZXJydXB0CiAgKiBzZXJ2aWNlIHJvdXRpbmUgaGFzIGJlZW4gZW50ZXJlZCBieSB0aGUgTVBVLgpAQCAtMTA1LDE1ICsxMDYsMTkgQEAKICAqIGVsYXBzZWQgZnJvbSB3aGVuIGEgZGV2aWNlIGRyaXZlciBlbmFibGVzIGEgaGFyZHdhcmUgZGV2aWNlIHdpdGgKICAqIGNsa19lbmFibGUoKSwgdG8gd2hlbiB0aGUgZGV2aWNlIGlzIHJlYWR5IGZvciByZWdpc3RlciBhY2Nlc3Mgb3IKICAqIG90aGVyIHVzZS4gIFRvIGNvbnRyb2wgdGhpcyBkZXZpY2Ugd2FrZXVwIGxhdGVuY3ksIHVzZQotICogc2V0X21heF9kZXZfd2FrZXVwX2xhdCgpCisgKiBvbWFwX3BtX3NldF9tYXhfZGV2X3dha2V1cF9sYXQoKQogICoKLSAqIE11bHRpcGxlIGNhbGxzIHRvIHNldF9tYXhfbXB1X3dha2V1cF9sYXQoKSB3aWxsIHJlcGxhY2UgdGhlCisgKiBNdWx0aXBsZSBjYWxscyB0byBvbWFwX3BtX3NldF9tYXhfbXB1X3dha2V1cF9sYXQoKSB3aWxsIHJlcGxhY2UgdGhlCiAgKiBwcmV2aW91cyB0IHZhbHVlLiAgVG8gcmVtb3ZlIHRoZSBsYXRlbmN5IHRhcmdldCBmb3IgdGhlIE1QVSwgY2FsbAogICogd2l0aCB0ID0gLTEuCiAgKgotICogTm8gcmV0dXJuIHZhbHVlLgorICogWFhYIFRoaXMgY29uc3RyYWludCB3aWxsIGJlIGRlcHJlY2F0ZWQgc29vbiBpbiBmYXZvciBvZiB0aGUgbW9yZQorICogZ2VuZXJhbCBvbWFwX3BtX3NldF9tYXhfZGV2X3dha2V1cF9sYXQoKQorICoKKyAqIFJldHVybnMgLUVJTlZBTCBmb3IgYW4gaW52YWxpZCBhcmd1bWVudCwgLUVSQU5HRSBpZiB0aGUgY29uc3RyYWludAorICogaXMgbm90IHNhdGlzZmlhYmxlLCBvciAwIHVwb24gc3VjY2Vzcy4KICAqLwotdm9pZCBvbWFwX3BtX3NldF9tYXhfbXB1X3dha2V1cF9sYXQoc3RydWN0IGRldmljZSAqZGV2LCBsb25nIHQpOworaW50IG9tYXBfcG1fc2V0X21heF9tcHVfd2FrZXVwX2xhdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgdCk7CiAKIAogLyoqCkBAIC0xMjMsOCArMTI4LDggQEAKICAqIEByOiBtaW5pbXVtIHRocm91Z2hwdXQgKGluIEtpQi9zKQogICoKICAqIFJlcXVlc3QgdGhhdCB0aGUgbWluaW11bSBkYXRhIHRocm91Z2hwdXQgb24gdGhlIE9DUCBpbnRlcmNvbm5lY3QKLSAqIGF0dGFjaGVkIHRvIGRldmljZSAnZGV2JyBpbnRlcmNvbm5lY3QgYWdlbnQgJ3RidXNfaWQnIGJlIG5vIGxlc3MKLSAqIHRoYW4gJ3InIEtpQi9zLgorICogYXR0YWNoZWQgdG8gZGV2aWNlIEBkZXYgaW50ZXJjb25uZWN0IGFnZW50IEB0YnVzX2lkIGJlIG5vIGxlc3MKKyAqIHRoYW4gQHIgS2lCL3MuCiAgKgogICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgT01BUCBQTSBvciBidXMgY29kZSB3aWxsIHVzZSB0aGlzCiAgKiBpbmZvcm1hdGlvbiB0byBzZXQgdGhlIGludGVyY29ubmVjdCBjbG9jayB0byBydW4gYXQgdGhlIGxvd2VzdApAQCAtMTM4LDQwICsxNDMsNDQgQEAKICAqIGNvZGUgd2lsbCBhbHNvIG5lZWQgdG8gYWRkIGFuIG1pbmltdW0gTDMgaW50ZXJjb25uZWN0IHNwZWVkCiAgKiBjb25zdHJhaW50LAogICoKLSAqIE11bHRpcGxlIGNhbGxzIHRvIHNldF9taW5fYnVzX3RwdXQoKSB3aWxsIHJlcGxhY2UgdGhlIHByZXZpb3VzIHJhdGUKLSAqIHZhbHVlIGZvciB0aGlzIGRldmljZS4gIFRvIHJlbW92ZSB0aGUgaW50ZXJjb25uZWN0IHRocm91Z2hwdXQKLSAqIHJlc3RyaWN0aW9uIGZvciB0aGlzIGRldmljZSwgY2FsbCB3aXRoIHIgPSAwLgorICogTXVsdGlwbGUgY2FsbHMgdG8gb21hcF9wbV9zZXRfbWluX2J1c190cHV0KCkgd2lsbCByZXBsYWNlIHRoZQorICogcHJldmlvdXMgcmF0ZSB2YWx1ZSBmb3IgdGhpcyBkZXZpY2UuICBUbyByZW1vdmUgdGhlIGludGVyY29ubmVjdAorICogdGhyb3VnaHB1dCByZXN0cmljdGlvbiBmb3IgdGhpcyBkZXZpY2UsIGNhbGwgd2l0aCByID0gMC4KICAqCi0gKiBObyByZXR1cm4gdmFsdWUuCisgKiBSZXR1cm5zIC1FSU5WQUwgZm9yIGFuIGludmFsaWQgYXJndW1lbnQsIC1FUkFOR0UgaWYgdGhlIGNvbnN0cmFpbnQKKyAqIGlzIG5vdCBzYXRpc2ZpYWJsZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgb21hcF9wbV9zZXRfbWluX2J1c190cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggYWdlbnRfaWQsIHVuc2lnbmVkIGxvbmcgcik7CitpbnQgb21hcF9wbV9zZXRfbWluX2J1c190cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggYWdlbnRfaWQsIHVuc2lnbmVkIGxvbmcgcik7CiAKIAogLyoqCiAgKiBvbWFwX3BtX3NldF9tYXhfZGV2X3dha2V1cF9sYXQgLSBzZXQgdGhlIG1heGltdW0gZGV2aWNlIGVuYWJsZSBsYXRlbmN5Ci0gKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlICoKKyAqIEByZXFfZGV2OiBzdHJ1Y3QgZGV2aWNlICogcmVxdWVzdGluZyB0aGUgY29uc3RyYWludCwgb3IgTlVMTCBpZiBub25lCisgKiBAZGV2OiBzdHJ1Y3QgZGV2aWNlICogdG8gc2V0IHRoZSBjb25zdHJhaW50IG9uZQogICogQHQ6IG1heGltdW0gZGV2aWNlIHdha2V1cCBsYXRlbmN5IGluIG1pY3Jvc2Vjb25kcwogICoKLSAqIFJlcXVlc3QgdGhhdCB0aGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSBuZWNlc3NhcnkgZm9yIGEgZGV2aWNlIHRvCi0gKiBiZWNvbWUgYWNjZXNzaWJsZSBhZnRlciBpdHMgY2xvY2tzIGFyZSBlbmFibGVkIHNob3VsZCBiZSBubyBncmVhdGVyCi0gKiB0aGFuICd0JyBtaWNyb3NlY29uZHMuICBTcGVjaWZpY2FsbHksIHRoaXMgcmVwcmVzZW50cyB0aGUgdGltZSBmcm9tCi0gKiB3aGVuIGEgZGV2aWNlIGRyaXZlciBlbmFibGVzIGRldmljZSBjbG9ja3Mgd2l0aCBjbGtfZW5hYmxlKCksIHRvCi0gKiB3aGVuIHRoZSByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIG9uIHRoZSBkZXZpY2Ugd2lsbCBzdWNjZWVkLgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjbGtfZGlzYWJsZSgpIGlzIGNhbGxlZCwKLSAqIHNpbmNlIHRoZSBwb3dlciBzdGF0ZSB0cmFuc2l0aW9uIGRlY2lzaW9uIG1heSBiZSBtYWRlIGR1cmluZwotICogY2xrX2Rpc2FibGUoKS4KKyAqIFJlcXVlc3QgdGhhdCB0aGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSBuZWNlc3NhcnkgZm9yIGEgZGV2aWNlIEBkZXYKKyAqIHRvIGJlY29tZSBhY2Nlc3NpYmxlIGFmdGVyIGl0cyBjbG9ja3MgYXJlIGVuYWJsZWQgc2hvdWxkIGJlIG5vCisgKiBncmVhdGVyIHRoYW4gQHQgbWljcm9zZWNvbmRzLiAgU3BlY2lmaWNhbGx5LCB0aGlzIHJlcHJlc2VudHMgdGhlCisgKiB0aW1lIGZyb20gd2hlbiBhIGRldmljZSBkcml2ZXIgZW5hYmxlcyBkZXZpY2UgY2xvY2tzIHdpdGgKKyAqIGNsa19lbmFibGUoKSwgdG8gd2hlbiB0aGUgcmVnaXN0ZXIgcmVhZHMgYW5kIHdyaXRlcyBvbiB0aGUgZGV2aWNlCisgKiB3aWxsIHN1Y2NlZWQuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNsa19kaXNhYmxlKCkKKyAqIGlzIGNhbGxlZCwgc2luY2UgdGhlIHBvd2VyIHN0YXRlIHRyYW5zaXRpb24gZGVjaXNpb24gbWF5IGJlIG1hZGUKKyAqIGR1cmluZyBjbGtfZGlzYWJsZSgpLgogICoKICAqIEl0IGlzIGludGVuZGVkIHRoYXQgdW5kZXJseWluZyBQTSBjb2RlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8KICAqIGRldGVybWluZSB3aGF0IHBvd2VyIHN0YXRlIHRvIHB1dCB0aGUgcG93ZXJkb21haW4gZW5jbG9zaW5nIHRoaXMKICAqIGRldmljZSBpbnRvLgogICoKLSAqIE11bHRpcGxlIGNhbGxzIHRvIHNldF9tYXhfZGV2X3dha2V1cF9sYXQoKSB3aWxsIHJlcGxhY2UgdGhlCi0gKiBwcmV2aW91cyB3YWtldXAgbGF0ZW5jeSB2YWx1ZXMgZm9yIHRoaXMgZGV2aWNlLiAgVG8gcmVtb3ZlIHRoZSB3YWtldXAKLSAqIGxhdGVuY3kgcmVzdHJpY3Rpb24gZm9yIHRoaXMgZGV2aWNlLCBjYWxsIHdpdGggdCA9IC0xLgorICogTXVsdGlwbGUgY2FsbHMgdG8gb21hcF9wbV9zZXRfbWF4X2Rldl93YWtldXBfbGF0KCkgd2lsbCByZXBsYWNlIHRoZQorICogcHJldmlvdXMgd2FrZXVwIGxhdGVuY3kgdmFsdWVzIGZvciB0aGlzIGRldmljZS4gIFRvIHJlbW92ZSB0aGUKKyAqIHdha2V1cCBsYXRlbmN5IHJlc3RyaWN0aW9uIGZvciB0aGlzIGRldmljZSwgY2FsbCB3aXRoIHQgPSAtMS4KICAqCi0gKiBObyByZXR1cm4gdmFsdWUuCisgKiBSZXR1cm5zIC1FSU5WQUwgZm9yIGFuIGludmFsaWQgYXJndW1lbnQsIC1FUkFOR0UgaWYgdGhlIGNvbnN0cmFpbnQKKyAqIGlzIG5vdCBzYXRpc2ZpYWJsZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KLXZvaWQgb21hcF9wbV9zZXRfbWF4X2Rldl93YWtldXBfbGF0KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyB0KTsKK2ludCBvbWFwX3BtX3NldF9tYXhfZGV2X3dha2V1cF9sYXQoc3RydWN0IGRldmljZSAqcmVxX2Rldiwgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIGxvbmcgdCk7CiAKIAogLyoqCkBAIC0xOTgsMTEgKzIwNyw3MiBAQAogICogdmFsdWUgZm9yIHRoaXMgZGV2aWNlLiAgVG8gcmVtb3ZlIHRoZSBtYXhpbXVtIERNQSBsYXRlbmN5IGZvciB0aGlzCiAgKiBkZXZpY2UsIGNhbGwgd2l0aCB0ID0gLTEuCiAgKgotICogTm8gcmV0dXJuIHZhbHVlLgorICogUmV0dXJucyAtRUlOVkFMIGZvciBhbiBpbnZhbGlkIGFyZ3VtZW50LCAtRVJBTkdFIGlmIHRoZSBjb25zdHJhaW50CisgKiBpcyBub3Qgc2F0aXNmaWFibGUsIG9yIDAgdXBvbiBzdWNjZXNzLgogICovCi12b2lkIG9tYXBfcG1fc2V0X21heF9zZG1hX2xhdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgdCk7CitpbnQgb21hcF9wbV9zZXRfbWF4X3NkbWFfbGF0KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyB0KTsKIAogCisvKioKKyAqIG9tYXBfcG1fc2V0X21pbl9jbGtfcmF0ZSAtIHNldCBtaW5pbXVtIGNsb2NrIHJhdGUgcmVxdWVzdGVkIGJ5IEBkZXYKKyAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgKiByZXF1ZXN0aW5nIHRoZSBjb25zdHJhaW50CisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogdG8gc2V0IHRoZSBtaW5pbXVtIHJhdGUgY29uc3RyYWludCBvbgorICogQHI6IG1pbmltdW0gcmF0ZSBpbiBIegorICoKKyAqIFJlcXVlc3QgdGhhdCB0aGUgbWluaW11bSBjbG9jayByYXRlIG9uIHRoZSBkZXZpY2UgQGRldidzIGNsayBAY2xrCisgKiBiZSBubyBsZXNzIHRoYW4gQHIgSHouCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgT01BUCBQTSBjb2RlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8KKyAqIGZpbmQgYW4gT1BQIG9yIGNsb2NrIHNldHRpbmcgdGhhdCB3aWxsIHNhdGlzZnkgdGhpcyBjbG9jayByYXRlCisgKiBjb25zdHJhaW50LCBhbG9uZyB3aXRoIGFueSBvdGhlciBhcHBsaWNhYmxlIHN5c3RlbSBjb25zdHJhaW50cyBvbgorICogdGhlIGNsb2NrIHJhdGUgb3IgY29ycmVzcG9uZGluZyB2b2x0YWdlLCBldGMuCisgKgorICogb21hcF9wbV9zZXRfbWluX2Nsa19yYXRlKCkgZGlmZmVycyBmcm9tIHRoZSBjbG9jayBjb2RlJ3MKKyAqIGNsa19zZXRfcmF0ZSgpIGluIHRoYXQgaXQgY29uc2lkZXJzIG90aGVyIGNvbnN0cmFpbnRzIGJlZm9yZSB0YWtpbmcKKyAqIGFueSBoYXJkd2FyZSBhY3Rpb24sIGFuZCBtYXkgY2hhbmdlIGEgc3lzdGVtIE9QUCByYXRoZXIgdGhhbiBqdXN0IGEKKyAqIGNsb2NrIHJhdGUuICBjbGtfc2V0X3JhdGUoKSBpcyBpbnRlbmRlZCB0byBiZSBhIGxvdy1sZXZlbAorICogaW50ZXJmYWNlLgorICoKKyAqIG9tYXBfcG1fc2V0X21pbl9jbGtfcmF0ZSgpIGlzIGVhc2lseSBvcGVuIHRvIGFidXNlLiAgQSBiZXR0ZXIgQVBJCisgKiB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSAib21hcF9wbV9zZXRfbWluX2Rldl9wZXJmb3JtYW5jZSgpIjsKKyAqIGhvd2V2ZXIsIHRoZXJlIGlzIG5vIGVhc2lseS1nZW5lcmFsaXphYmxlIGNvbmNlcHQgb2YgcGVyZm9ybWFuY2UKKyAqIHRoYXQgYXBwbGllcyB0byBhbGwgZGV2aWNlcy4gIE9ubHkgYSBkZXZpY2UgKGFuZCBwb3NzaWJseSB0aGUKKyAqIGRldmljZSBzdWJzeXN0ZW0pIGhhcyBib3RoIHRoZSBzdWJzeXN0ZW0tc3BlY2lmaWMga25vd2xlZGdlLCBhbmQKKyAqIHRoZSBoYXJkd2FyZSBJUCBibG9jay1zcGVjaWZpYyBrbm93bGVkZ2UsIHRvIHRyYW5zbGF0ZSBhIGNvbnN0cmFpbnQKKyAqIG9uICJ0b3VjaHNjcmVlbiBzYW1wbGluZyBhY2N1cmFjeSIgb3IgIm51bWJlciBvZiBwaXhlbHMgb3IgcG9seWdvbnMKKyAqIHJlbmRlcmVkIHBlciBzZWNvbmQiIHRvIGEgY2xvY2sgcmF0ZS4gIFRoaXMgdHJhbnNsYXRpb24gY2FuIGJlCisgKiBkZXBlbmRlbnQgb24gdGhlIGhhcmR3YXJlIElQIGJsb2NrJ3MgcmV2aXNpb24sIG9yIGZpcm13YXJlIHZlcnNpb24sCisgKiBhbmQgdGhlIGRyaXZlciBpcyB0aGUgb25seSBjb2RlIG9uIHRoZSBzeXN0ZW0gdGhhdCBoYXMgdGhpcworICogaW5mb3JtYXRpb24gYW5kIGNhbiBrbm93IGhvdyB0byB0cmFuc2xhdGUgdGhhdCBpbnRvIGEgY2xvY2sgcmF0ZS4KKyAqCisgKiBUaGUgaW50ZW5kZWQgdXNlLWNhc2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgZm9yIHVzZXJzcGFjZSBvciBvdGhlcgorICoga2VybmVsIGNvZGUgdG8gY29tbXVuaWNhdGUgYSBwYXJ0aWN1bGFyIHBlcmZvcm1hbmNlIHJlcXVpcmVtZW50IHRvCisgKiBhIHN1YnN5c3RlbTsgdGhlbiBmb3IgdGhlIHN1YnN5c3RlbSB0byBjb21tdW5pY2F0ZSB0aGF0IHJlcXVpcmVtZW50CisgKiB0byBzb21ldGhpbmcgdGhhdCBpcyBtZWFuaW5nZnVsIHRvIHRoZSBkZXZpY2UgZHJpdmVyOyB0aGVuIGZvciB0aGUKKyAqIGRldmljZSBkcml2ZXIgdG8gY29udmVydCB0aGF0IHJlcXVpcmVtZW50IHRvIGEgY2xvY2sgcmF0ZSwgYW5kIHRvCisgKiB0aGVuIGNhbGwgb21hcF9wbV9zZXRfbWluX2Nsa19yYXRlKCkuCisgKgorICogVXNlcnMgb2YgdGhpcyBmdW5jdGlvbiAoc3VjaCBhcyBkZXZpY2UgZHJpdmVycykgc2hvdWxkIG5vdCBzaW1wbHkKKyAqIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIHNvbWUgaGlnaCBjbG9jayByYXRlIHRvIGVuc3VyZSAiaGlnaAorICogcGVyZm9ybWFuY2UuIiAgUmF0aGVyLCB0aGUgZGV2aWNlIGRyaXZlciBzaG91bGQgdGFrZSBhIHBlcmZvcm1hbmNlCisgKiBjb25zdHJhaW50IGZyb20gaXRzIHN1YnN5c3RlbSwgc3VjaCBhcyAicmVuZGVyIGF0IGxlYXN0IFggcG9seWdvbnMKKyAqIHBlciBzZWNvbmQsIiBhbmQgdXNlIHNvbWUgZm9ybXVsYSBvciB0YWJsZSB0byBjb252ZXJ0IHRoYXQgaW50byBhCisgKiBjbG9jayByYXRlIGNvbnN0cmFpbnQgZ2l2ZW4gdGhlIGhhcmR3YXJlIHR5cGUgYW5kIGhhcmR3YXJlCisgKiByZXZpc2lvbi4gIERldmljZSBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCB0aGV5CisgKiBrbm93IGhvdyB0byBtYWtlIGEgcG93ZXIvcGVyZm9ybWFuY2UgdHJhZGVvZmYgLSBzb21lIGRldmljZSB1c2UKKyAqIGNhc2VzIG1heSB0b2xlcmF0ZSBhIGxvd2VyLWZpZGVsaXR5IGRldmljZSBmdW5jdGlvbiBmb3IgbG93ZXIgcG93ZXIKKyAqIGNvbnN1bXB0aW9uOyBvdGhlcnMgbWF5IGRlbWFuZCBhIGhpZ2hlci1maWRlbGl0eSBkZXZpY2UgZnVuY3Rpb24sCisgKiBubyBtYXR0ZXIgd2hhdCB0aGUgcG93ZXIgY29uc3VtcHRpb24uCisgKgorICogTXVsdGlwbGUgY2FsbHMgdG8gb21hcF9wbV9zZXRfbWluX2Nsa19yYXRlKCkgd2lsbCByZXBsYWNlIHRoZQorICogcHJldmlvdXMgcmF0ZSB2YWx1ZSBmb3IgdGhlIGRldmljZSBAZGV2LiAgVG8gcmVtb3ZlIHRoZSBtaW5pbXVtIGNsb2NrCisgKiByYXRlIGNvbnN0cmFpbnQgZm9yIHRoZSBkZXZpY2UsIGNhbGwgd2l0aCByID0gMC4KKyAqCisgKiBSZXR1cm5zIC1FSU5WQUwgZm9yIGFuIGludmFsaWQgYXJndW1lbnQsIC1FUkFOR0UgaWYgdGhlIGNvbnN0cmFpbnQKKyAqIGlzIG5vdCBzYXRpc2ZpYWJsZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBvbWFwX3BtX3NldF9taW5fY2xrX3JhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgY2xrICpjLCBsb25nIHIpOworCiAvKgogICogRFNQIEJyaWRnZS1zcGVjaWZpYyBjb25zdHJhaW50cwogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmgKaW5kZXggMzY5NGI2Mi4uMjVjZDlhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaApAQCAtMTAxLDYgKzEwMSw4IEBACiBpbnQgb21hcF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CiBpbnQgb21hcF9lYXJseV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CiAKK3ZvaWQgX19pb21lbSAqb21hcF9kZXZpY2VfZ2V0X3J0X3ZhKHN0cnVjdCBvbWFwX2RldmljZSAqb2QpOworCiAvKiBPTUFQIFBNIGludGVyZmFjZSAqLwogaW50IG9tYXBfZGV2aWNlX2FsaWduX3BtX2xhdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgICB1MzIgbmV3X3dha2V1cF9sYXRfbGltaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2h3bW9kLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAppbmRleCAwZWNjYzA5Li5hNGU1MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBvbWFwX2h3bW9kIG1hY3Jvcywgc3RydWN0dXJlcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqIFBhdWwgV2FsbXNsZXkKICAqCiAgKiBDcmVhdGVkIGluIGNvbGxhYm9yYXRpb24gd2l0aCAoYWxwaGFiZXRpY2FsIG9yZGVyKTogQmVub8OudCBDb3Vzc29uLApAQCAtNDE5LDcgKzQxOSw3IEBACiAgKiBAc2xhdmVzOiBwdHIgdG8gYXJyYXkgb2YgT0NQIGlmcyB0aGF0IHRoaXMgaHdtb2QgY2FuIHJlc3BvbmQgb24KICAqIEBkZXZfYXR0cjogYXJiaXRyYXJ5IGRldmljZSBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyCiAgKiBAX3N5c2NfY2FjaGU6IGludGVybmFsLXVzZSBod21vZCBmbGFncwotICogQF9ydF92YTogY2FjaGVkIHJlZ2lzdGVyIHRhcmdldCBzdGFydCBhZGRyZXNzIChpbnRlcm5hbCB1c2UpCisgKiBAX21wdV9ydF92YTogY2FjaGVkIHJlZ2lzdGVyIHRhcmdldCBzdGFydCBhZGRyZXNzIChpbnRlcm5hbCB1c2UpCiAgKiBAX21wdV9wb3J0X2luZGV4OiBjYWNoZWQgTVBVIHJlZ2lzdGVyIHRhcmdldCBzbGF2ZSBJRCAoaW50ZXJuYWwgdXNlKQogICogQG1zdXNwZW5kbXV4X3JlZ19pZDogQ09OVFJPTF9NU1VTUEVORE1VWCByZWdpc3RlciBJRCAoMS02KQogICogQG1zdXNwZW5kbXV4X3NoaWZ0OiBDT05UUk9MX01TVVNQRU5ETVVYIHJlZ2lzdGVyIGJpdCBzaGlmdApAQCAtNDYwLDcgKzQ2MCw3IEBACiAJc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmCSoqc2xhdmVzOyAgLyogY29ubmVjdCB0byAqX1RBICovCiAJdm9pZAkJCQkqZGV2X2F0dHI7CiAJdTMyCQkJCV9zeXNjX2NhY2hlOwotCXZvaWQgX19pb21lbQkJCSpfcnRfdmE7CisJdm9pZCBfX2lvbWVtCQkJKl9tcHVfcnRfdmE7CiAJc3RydWN0IGxpc3RfaGVhZAkJbm9kZTsKIAl1MTYJCQkJZmxhZ3M7CiAJdTgJCQkJX21wdV9wb3J0X2luZGV4OwpAQCAtNDgyLDExICs0ODIsMTQgQEAKIGludCBvbWFwX2h3bW9kX3JlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiBpbnQgb21hcF9od21vZF91bnJlZ2lzdGVyKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiBzdHJ1Y3Qgb21hcF9od21vZCAqb21hcF9od21vZF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7Ci1pbnQgb21hcF9od21vZF9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IG9tYXBfaHdtb2QgKm9oKSk7Ci1pbnQgb21hcF9od21vZF9sYXRlX2luaXQodm9pZCk7CitpbnQgb21hcF9od21vZF9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB2b2lkICpkYXRhKSwKKwkJCXZvaWQgKmRhdGEpOworaW50IG9tYXBfaHdtb2RfbGF0ZV9pbml0KHU4IHNraXBfc2V0dXBfaWRsZSk7CiAKIGludCBvbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOworaW50IF9vbWFwX2h3bW9kX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogaW50IG9tYXBfaHdtb2RfaWRsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOworaW50IF9vbWFwX2h3bW9kX2lkbGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIGludCBvbWFwX2h3bW9kX3NodXRkb3duKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiAKIGludCBvbWFwX2h3bW9kX2VuYWJsZV9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKQEAgLTUwNCw2ICs1MDcsNyBAQAogaW50IG9tYXBfaHdtb2RfZmlsbF9yZXNvdXJjZXMoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKIHN0cnVjdCBwb3dlcmRvbWFpbiAqb21hcF9od21vZF9nZXRfcHdyZG0oc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKK3ZvaWQgX19pb21lbSAqb21hcF9od21vZF9nZXRfbXB1X3J0X3ZhKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiAKIGludCBvbWFwX2h3bW9kX2FkZF9pbml0aWF0b3JfZGVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKIAkJCQkgc3RydWN0IG9tYXBfaHdtb2QgKmluaXRfb2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbXAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc21wLmgKaW5kZXggODk4M2Q1NC4uNmEzZmY2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zbXAuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NtcC5oCkBAIC0zMCw2ICszMCw3IEBACiBleHRlcm4gdm9pZCBvbWFwX3NlY29uZGFyeV9zdGFydHVwKHZvaWQpOwogZXh0ZXJuIHUzMiBvbWFwX21vZGlmeV9hdXhjb3JlYm9vdDAodTMyIHNldF9tYXNrLCB1MzIgY2xlYXJfbWFzayk7CiBleHRlcm4gdm9pZCBvbWFwX2F1eGNvcmVib290X2FkZHIodTMyIGNwdV9hZGRyKTsKK2V4dGVybiB1MzIgb21hcF9yZWFkX2F1eGNvcmVib290MCh2b2lkKTsKIAogLyoKICAqIFdlIHVzZSBTb2Z0IElSUTEgYXMgdGhlIElQSQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCBiYmVkZDcxLi5kZGY3MjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAorI2RlZmluZSBNRFIxX01PREVfTUFTSwkJCTB4MDcKKwogc3RhdGljIHZvbGF0aWxlIHU4ICp1YXJ0X2Jhc2U7CiBzdGF0aWMgaW50IHVhcnRfc2hpZnQ7CiAKQEAgLTQyLDYgKzQ0LDEwIEBACiAJaWYgKCF1YXJ0X2Jhc2UpCiAJCXJldHVybjsKIAorCS8qIENoZWNrIGZvciBVQVJUIDE2eCBtb2RlICovCisJaWYgKCh1YXJ0X2Jhc2VbVUFSVF9PTUFQX01EUjEgPDwgdWFydF9zaGlmdF0gJiBNRFIxX01PREVfTUFTSykgIT0gMCkKKwkJcmV0dXJuOworCiAJd2hpbGUgKCEodWFydF9iYXNlW1VBUlRfTFNSIDw8IHVhcnRfc2hpZnRdICYgVUFSVF9MU1JfVEhSRSkpCiAJCWJhcnJpZXIoKTsKIAl1YXJ0X2Jhc2VbVUFSVF9UWCA8PCB1YXJ0X3NoaWZ0XSA9IGM7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaAppbmRleCA5OGVlZjUzLi4yYTk0MjdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmgKQEAgLTgxLDcgKzgxLDM0IEBACiAKICNlbmRpZgogCi12b2lkIG9tYXBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpOworCisvKgorICogRklYTUUgY29ycmVjdCBhbnN3ZXIgZGVwZW5kcyBvbiBobWNfbW9kZSwKKyAqIGFzIGRvZXMgKG9uIG9tYXAxKSBhbnkgbm9uemVybyB2YWx1ZSBmb3IgY29uZmlnLT5vdGcgcG9ydCBudW1iZXIKKyAqLworI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKKyNkZWZpbmUJaXNfdXNiMF9kZXZpY2UoY29uZmlnKQkxCisjZWxzZQorI2RlZmluZQlpc191c2IwX2RldmljZShjb25maWcpCTAKKyNlbmRpZgorCit2b2lkIG9tYXBfb3RnX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQikgfHwgZGVmaW5lZChDT05GSUdfVVNCX01PRFVMRSkKK3ZvaWQgb21hcDFfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMV91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQX09URykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQX09UR19NT0RVTEUpCit2b2lkIG9tYXAyX3VzYmZzX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgb21hcDJfdXNiZnNfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSkKK3sKK30KKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xOTIsNCArMjE5LDI0IEBACiAjCWRlZmluZQlVU0IwUFVFTkFDVExPSQkJKDEgPDwgMTYpCiAjCWRlZmluZQlVU0JTVEFOREJZQ1RSTAkJKDEgPDwgMTUpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKSAmJiBkZWZpbmVkKENPTkZJR19VU0IpCit1MzIgb21hcDFfdXNiMF9pbml0KHVuc2lnbmVkIG53aXJlcywgdW5zaWduZWQgaXNfZGV2aWNlKTsKK3UzMiBvbWFwMV91c2IxX2luaXQodW5zaWduZWQgbndpcmVzKTsKK3UzMiBvbWFwMV91c2IyX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBhbHRfcGluZ3JvdXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAxX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAxX3VzYjFfaW5pdCh1bnNpZ25lZCBud2lyZXMpCit7CisJcmV0dXJuIDA7CisKK30KK3N0YXRpYyBpbmxpbmUgdTMyIG9tYXAxX3VzYjJfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGFsdF9waW5ncm91cCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZW5kaWYJLyogX19BU01fQVJDSF9PTUFQX1VTQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IGJjMDk0ZGIuLmEyMDJhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC0zNzAsNiArMzcwLDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF9pb3RsYl9hbGwpOwogCisvKioKKyAqIGlvbW11X3NldF90d2wgLSBlbmFibGUvZGlzYWJsZSB0YWJsZSB3YWxraW5nIGxvZ2ljCisgKiBAb2JqOgl0YXJnZXQgaW9tbXUKKyAqIEBvbjoJCWVuYWJsZS9kaXNhYmxlCisgKgorICogRnVuY3Rpb24gdXNlZCB0byBlbmFibGUvZGlzYWJsZSBUV0wuIElmIG9uZSB3YW50cyB0byB3b3JrCisgKiBleGNsdXNpdmVseSB3aXRoIGxvY2tlZCBUTEIgZW50cmllcyBhbmQgcmVjZWl2ZSBub3RpZmljYXRpb25zCisgKiBmb3IgVExCIG1pc3MgdGhlbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGlzYWJsZSBUV0wuCisgKi8KK3ZvaWQgaW9tbXVfc2V0X3R3bChzdHJ1Y3QgaW9tbXUgKm9iaiwgYm9vbCBvbikKK3sKKwljbGtfZW5hYmxlKG9iai0+Y2xrKTsKKwlhcmNoX2lvbW11LT5zZXRfdHdsKG9iaiwgb24pOworCWNsa19kaXNhYmxlKG9iai0+Y2xrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlvbW11X3NldF90d2wpOworCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9JT01NVV9ERUJVR19NT0RVTEUpCiAKIHNzaXplX3QgaW9tbXVfZHVtcF9jdHgoc3RydWN0IGlvbW11ICpvYmosIGNoYXIgKmJ1Ziwgc3NpemVfdCBieXRlcykKQEAgLTY1Myw3ICs2NzAsNyBAQAogCWlmICghKmlvcGdkKQogCQlnb3RvIG91dDsKIAotCWlmICgqaW9wZ2QgJiBJT1BHRF9UQUJMRSkKKwlpZiAoaW9wZ2RfaXNfdGFibGUoKmlvcGdkKSkKIAkJaW9wdGUgPSBpb3B0ZV9vZmZzZXQoaW9wZ2QsIGRhKTsKIG91dDoKIAkqcHBnZCA9IGlvcGdkOwpAQCAtNjcwLDcgKzY4Nyw3IEBACiAJaWYgKCEqaW9wZ2QpCiAJCXJldHVybiAwOwogCi0JaWYgKCppb3BnZCAmIElPUEdEX1RBQkxFKSB7CisJaWYgKGlvcGdkX2lzX3RhYmxlKCppb3BnZCkpIHsKIAkJaW50IGk7CiAJCXUzMiAqaW9wdGUgPSBpb3B0ZV9vZmZzZXQoaW9wZ2QsIGRhKTsKIApAQCAtNzQ1LDcgKzc2Miw3IEBACiAJCWlmICghKmlvcGdkKQogCQkJY29udGludWU7CiAKLQkJaWYgKCppb3BnZCAmIElPUEdEX1RBQkxFKQorCQlpZiAoaW9wZ2RfaXNfdGFibGUoKmlvcGdkKSkKIAkJCWlvcHRlX2ZyZWUoaW9wdGVfb2Zmc2V0KGlvcGdkLCAwKSk7CiAKIAkJKmlvcGdkID0gMDsKQEAgLTc4Myw5ICs4MDAsMTEgQEAKIAlpZiAoIXN0YXQpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAorCWlvbW11X2Rpc2FibGUob2JqKTsKKwogCWlvcGdkID0gaW9wZ2Rfb2Zmc2V0KG9iaiwgZGEpOwogCi0JaWYgKCEoKmlvcGdkICYgSU9QR0RfVEFCTEUpKSB7CisJaWYgKCFpb3BnZF9pc190YWJsZSgqaW9wZ2QpKSB7CiAJCWRldl9lcnIob2JqLT5kZXYsICIlczogZGE6JTA4eCBwZ2Q6JXAgKnBnZDolMDh4XG4iLCBfX2Z1bmNfXywKIAkJCWRhLCBpb3BnZCwgKmlvcGdkKTsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvcGd0YWJsZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvcGd0YWJsZS5oCmluZGV4IGFiMjNiNmEuLmMzZTkzYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3BndGFibGUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW9wZ3RhYmxlLmgKQEAgLTYzLDYgKzYzLDggQEAKICNkZWZpbmUgSU9QR0RfU0VDVElPTgkJKDIgPDwgMCkKICNkZWZpbmUgSU9QR0RfU1VQRVIJCSgxIDw8IDE4IHwgMiA8PCAwKQogCisjZGVmaW5lIGlvcGdkX2lzX3RhYmxlKHgpCSgoKHgpICYgMykgPT0gSU9QR0RfVEFCTEUpCisKICNkZWZpbmUgSU9QVEVfU01BTEwJCSgyIDw8IDApCiAjZGVmaW5lIElPUFRFX0xBUkdFCQkoMSA8PCAwKQogCkBAIC03MCwxMiArNzIsMTIgQEAKICNkZWZpbmUgaW9wZ2RfaW5kZXgoZGEpCQkoKChkYSkgPj4gSU9QR0RfU0hJRlQpICYgKFBUUlNfUEVSX0lPUEdEIC0gMSkpCiAjZGVmaW5lIGlvcGdkX29mZnNldChvYmosIGRhKQkoKG9iaiktPmlvcGdkICsgaW9wZ2RfaW5kZXgoZGEpKQogCi0jZGVmaW5lIGlvcHRlX3BhZGRyKGlvcGdkKQkoKmlvcGdkICYgfigoMSA8PCAxMCkgLSAxKSkKLSNkZWZpbmUgaW9wdGVfdmFkZHIoaW9wZ2QpCSgodTMyICopcGh5c190b192aXJ0KGlvcHRlX3BhZGRyKGlvcGdkKSkpCisjZGVmaW5lIGlvcGdkX3BhZ2VfcGFkZHIoaW9wZ2QpCSgqaW9wZ2QgJiB+KCgxIDw8IDEwKSAtIDEpKQorI2RlZmluZSBpb3BnZF9wYWdlX3ZhZGRyKGlvcGdkKQkoKHUzMiAqKXBoeXNfdG9fdmlydChpb3BnZF9wYWdlX3BhZGRyKGlvcGdkKSkpCiAKIC8qIHRvIGZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLiAqLwogI2RlZmluZSBpb3B0ZV9pbmRleChkYSkJCSgoKGRhKSA+PiBJT1BURV9TSElGVCkgJiAoUFRSU19QRVJfSU9QVEUgLSAxKSkKLSNkZWZpbmUgaW9wdGVfb2Zmc2V0KGlvcGdkLCBkYSkJKGlvcHRlX3ZhZGRyKGlvcGdkKSArIGlvcHRlX2luZGV4KGRhKSkKKyNkZWZpbmUgaW9wdGVfb2Zmc2V0KGlvcGdkLCBkYSkJKGlvcGdkX3BhZ2VfdmFkZHIoaW9wZ2QpICsgaW9wdGVfaW5kZXgoZGEpKQogCiBzdGF0aWMgaW5saW5lIHUzMiBpb3RsYl9pbml0X2VudHJ5KHN0cnVjdCBpb3RsYl9lbnRyeSAqZSwgdTMyIGRhLCB1MzIgcGEsCiAJCQkJICAgdTMyIGZsYWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKaW5kZXggMDhhMmRmNy4uZDJmYWZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCkBAIC0yMSwxOSArMjEsMjYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8cGxhdC9tYWlsYm94Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveGQ7Ci1zdGF0aWMgc3RydWN0IG9tYXBfbWJveCAqbWJveGVzOwotc3RhdGljIERFRklORV9SV0xPQ0sobWJveGVzX2xvY2spOworc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKiptYm94ZXM7CitzdGF0aWMgYm9vbCBycV9mdWxsOwogCiBzdGF0aWMgaW50IG1ib3hfY29uZmlndXJlZDsKK3N0YXRpYyBERUZJTkVfTVVURVgobWJveF9jb25maWd1cmVkX2xvY2spOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1ib3hfa2ZpZm9fc2l6ZSA9IENPTkZJR19PTUFQX01CT1hfS0ZJRk9fU0laRTsKK21vZHVsZV9wYXJhbShtYm94X2tmaWZvX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhtYm94X2tmaWZvX3NpemUsICJTaXplIG9mIG9tYXAncyBtYWlsYm94IGtmaWZvIChieXRlcykiKTsKIAogLyogTWFpbGJveCBGSUZPIGhhbmRsZSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgbWJveF9tc2dfdCBtYm94X2ZpZm9fcmVhZChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQpAQCAtNjcsNyArNzQsNyBAQAogLyoKICAqIG1lc3NhZ2Ugc2VuZGVyCiAgKi8KLXN0YXRpYyBpbnQgX19tYm94X21zZ19zZW5kKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQorc3RhdGljIGludCBfX21ib3hfcG9sbF9mb3Jfc3BhY2Uoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKIAlpbnQgcmV0ID0gMCwgaSA9IDEwMDA7CiAKQEAgLTc4LDQ5ICs4NSw1MCBAQAogCQkJcmV0dXJuIC0xOwogCQl1ZGVsYXkoMSk7CiAJfQotCW1ib3hfZmlmb193cml0ZShtYm94LCBtc2cpOwogCXJldHVybiByZXQ7CiB9CiAKLQogaW50IG9tYXBfbWJveF9tc2dfc2VuZChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKIHsKKwlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptcSA9IG1ib3gtPnR4cTsKKwlpbnQgcmV0ID0gMCwgbGVuOwogCi0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gbWJveC0+dHhxLT5xdWV1ZTsKKwlzcGluX2xvY2soJm1xLT5sb2NrKTsKIAotCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFdSSVRFLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIXJxKSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGtmaWZvX2F2YWlsKCZtcS0+ZmlmbykgPCBzaXplb2YobXNnKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKLQlibGtfaW5zZXJ0X3JlcXVlc3QocSwgcnEsIDAsICh2b2lkICopIG1zZyk7CisJbGVuID0ga2ZpZm9faW4oJm1xLT5maWZvLCAodW5zaWduZWQgY2hhciAqKSZtc2csIHNpemVvZihtc2cpKTsKKwlXQVJOX09OKGxlbiAhPSBzaXplb2YobXNnKSk7CisKIAl0YXNrbGV0X3NjaGVkdWxlKCZtYm94LT50eHEtPnRhc2tsZXQpOwogCi0JcmV0dXJuIDA7CitvdXQ6CisJc3Bpbl91bmxvY2soJm1xLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfbXNnX3NlbmQpOwogCiBzdGF0aWMgdm9pZCBtYm94X3R4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyB0eF9kYXRhKQogewotCWludCByZXQ7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwogCXN0cnVjdCBvbWFwX21ib3ggKm1ib3ggPSAoc3RydWN0IG9tYXBfbWJveCAqKXR4X2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBtYm94LT50eHEtPnF1ZXVlOworCXN0cnVjdCBvbWFwX21ib3hfcXVldWUgKm1xID0gbWJveC0+dHhxOworCW1ib3hfbXNnX3QgbXNnOworCWludCByZXQ7CiAKLQl3aGlsZSAoMSkgewotCi0JCXJxID0gYmxrX2ZldGNoX3JlcXVlc3QocSk7Ci0KLQkJaWYgKCFycSkKLQkJCWJyZWFrOwotCi0JCXJldCA9IF9fbWJveF9tc2dfc2VuZChtYm94LCAobWJveF9tc2dfdClycS0+c3BlY2lhbCk7Ci0JCWlmIChyZXQpIHsKKwl3aGlsZSAoa2ZpZm9fbGVuKCZtcS0+ZmlmbykpIHsKKwkJaWYgKF9fbWJveF9wb2xsX2Zvcl9zcGFjZShtYm94KSkgewogCQkJb21hcF9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1RYKTsKLQkJCWJsa19yZXF1ZXVlX3JlcXVlc3QocSwgcnEpOwotCQkJcmV0dXJuOworCQkJYnJlYWs7CiAJCX0KLQkJYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgMCk7CisKKwkJcmV0ID0ga2ZpZm9fb3V0KCZtcS0+ZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmbXNnLAorCQkJCQkJCQlzaXplb2YobXNnKSk7CisJCVdBUk5fT04ocmV0ICE9IHNpemVvZihtc2cpKTsKKworCQltYm94X2ZpZm9fd3JpdGUobWJveCwgbXNnKTsKIAl9CiB9CiAKQEAgLTEzMSwzNiArMTM5LDIxIEBACiB7CiAJc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqbXEgPQogCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvbWFwX21ib3hfcXVldWUsIHdvcmspOwotCXN0cnVjdCBvbWFwX21ib3ggKm1ib3ggPSBtcS0+cXVldWUtPnF1ZXVlZGF0YTsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1ib3gtPnJ4cS0+cXVldWU7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwogCW1ib3hfbXNnX3QgbXNnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxlbjsKIAotCXdoaWxlICgxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQkJcnEgPSBibGtfZmV0Y2hfcmVxdWVzdChxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JCWlmICghcnEpCi0JCQlicmVhazsKKwl3aGlsZSAoa2ZpZm9fbGVuKCZtcS0+ZmlmbykgPj0gc2l6ZW9mKG1zZykpIHsKKwkJbGVuID0ga2ZpZm9fb3V0KCZtcS0+ZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmbXNnLCBzaXplb2YobXNnKSk7CisJCVdBUk5fT04obGVuICE9IHNpemVvZihtc2cpKTsKIAotCQltc2cgPSAobWJveF9tc2dfdClycS0+c3BlY2lhbDsKLQkJYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgMCk7Ci0JCW1ib3gtPnJ4cS0+Y2FsbGJhY2soKHZvaWQgKiltc2cpOworCQlpZiAobXEtPmNhbGxiYWNrKQorCQkJbXEtPmNhbGxiYWNrKCh2b2lkICopbXNnKTsKIAl9CiB9CiAKIC8qCiAgKiBNYWlsYm94IGludGVycnVwdCBoYW5kbGVyCiAgKi8KLXN0YXRpYyB2b2lkIG1ib3hfdHhxX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotfQotCi1zdGF0aWMgdm9pZCBtYm94X3J4cV9mbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLX0KLQogc3RhdGljIHZvaWQgX19tYm94X3R4X2ludGVycnVwdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewogCW9tYXBfbWJveF9kaXNhYmxlX2lycShtYm94LCBJUlFfVFgpOwpAQCAtMTcwLDE5ICsxNjMsMjIgQEAKIAogc3RhdGljIHZvaWQgX19tYm94X3J4X2ludGVycnVwdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewotCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptcSA9IG1ib3gtPnJ4cTsKIAltYm94X21zZ190IG1zZzsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1ib3gtPnJ4cS0+cXVldWU7CisJaW50IGxlbjsKIAogCXdoaWxlICghbWJveF9maWZvX2VtcHR5KG1ib3gpKSB7Ci0JCXJxID0gYmxrX2dldF9yZXF1ZXN0KHEsIFdSSVRFLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KCFycSkpCisJCWlmICh1bmxpa2VseShrZmlmb19hdmFpbCgmbXEtPmZpZm8pIDwgc2l6ZW9mKG1zZykpKSB7CisJCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKKwkJCXJxX2Z1bGwgPSB0cnVlOwogCQkJZ290byBub21lbTsKKwkJfQogCiAJCW1zZyA9IG1ib3hfZmlmb19yZWFkKG1ib3gpOwogCisJCWxlbiA9IGtmaWZvX2luKCZtcS0+ZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmbXNnLCBzaXplb2YobXNnKSk7CisJCVdBUk5fT04obGVuICE9IHNpemVvZihtc2cpKTsKIAotCQlibGtfaW5zZXJ0X3JlcXVlc3QocSwgcnEsIDAsICh2b2lkICopbXNnKTsKIAkJaWYgKG1ib3gtPm9wcy0+dHlwZSA9PSBPTUFQX01CT1hfVFlQRTEpCiAJCQlicmVhazsKIAl9CkBAIC0yMDcsMTEgKzIwMyw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptYm94X3F1ZXVlX2FsbG9jKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCi0JCQkJCXJlcXVlc3RfZm5fcHJvYyAqcHJvYywKIAkJCQkJdm9pZCAoKndvcmspIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiksCiAJCQkJCXZvaWQgKCp0YXNrbGV0KSh1bnNpZ25lZCBsb25nKSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKIAlzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptcTsKIAogCW1xID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbWJveF9xdWV1ZSksIEdGUF9LRVJORUwpOwpAQCAtMjIwLDExICsyMTQsOCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJm1xLT5sb2NrKTsKIAotCXEgPSBibGtfaW5pdF9xdWV1ZShwcm9jLCAmbXEtPmxvY2spOwotCWlmICghcSkKKwlpZiAoa2ZpZm9fYWxsb2MoJm1xLT5maWZvLCBtYm94X2tmaWZvX3NpemUsIEdGUF9LRVJORUwpKQogCQlnb3RvIGVycm9yOwotCXEtPnF1ZXVlZGF0YSA9IG1ib3g7Ci0JbXEtPnF1ZXVlID0gcTsKIAogCWlmICh3b3JrKQogCQlJTklUX1dPUksoJm1xLT53b3JrLCB3b3JrKTsKQEAgLTIzOSw3ICsyMzAsNyBAQAogCiBzdGF0aWMgdm9pZCBtYm94X3F1ZXVlX2ZyZWUoc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqcSkKIHsKLQlibGtfY2xlYW51cF9xdWV1ZShxLT5xdWV1ZSk7CisJa2ZpZm9fZnJlZSgmcS0+Zmlmbyk7CiAJa2ZyZWUocSk7CiB9CiAKQEAgLTI0OCwzNSArMjM5LDM1IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG9tYXBfbWJveF9xdWV1ZSAqbXE7CiAKLQlpZiAobGlrZWx5KG1ib3gtPm9wcy0+c3RhcnR1cCkpIHsKLQkJd3JpdGVfbG9jaygmbWJveGVzX2xvY2spOworCWlmIChtYm94LT5vcHMtPnN0YXJ0dXApIHsKKwkJbXV0ZXhfbG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwogCQlpZiAoIW1ib3hfY29uZmlndXJlZCkKIAkJCXJldCA9IG1ib3gtPm9wcy0+c3RhcnR1cChtYm94KTsKIAotCQlpZiAodW5saWtlbHkocmV0KSkgewotCQkJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQltYm94X2NvbmZpZ3VyZWQrKzsKLQkJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJCW11dGV4X3VubG9jaygmbWJveF9jb25maWd1cmVkX2xvY2spOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKG1ib3gtPmlycSwgbWJveF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCW1ib3gtPm5hbWUsIG1ib3gpOwotCWlmICh1bmxpa2VseShyZXQpKSB7CisJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFpbGJveCBpbnRlcnJ1cHQ6JWRcbiIsIHJldCk7CiAJCWdvdG8gZmFpbF9yZXF1ZXN0X2lycTsKIAl9CiAKLQltcSA9IG1ib3hfcXVldWVfYWxsb2MobWJveCwgbWJveF90eHFfZm4sIE5VTEwsIG1ib3hfdHhfdGFza2xldCk7CisJbXEgPSBtYm94X3F1ZXVlX2FsbG9jKG1ib3gsIE5VTEwsIG1ib3hfdHhfdGFza2xldCk7CiAJaWYgKCFtcSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfYWxsb2NfdHhxOwogCX0KIAltYm94LT50eHEgPSBtcTsKIAotCW1xID0gbWJveF9xdWV1ZV9hbGxvYyhtYm94LCBtYm94X3J4cV9mbiwgbWJveF9yeF93b3JrLCBOVUxMKTsKKwltcSA9IG1ib3hfcXVldWVfYWxsb2MobWJveCwgbWJveF9yeF93b3JrLCBOVUxMKTsKIAlpZiAoIW1xKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9hbGxvY19yeHE7CkBAIC0yOTAsNyArMjgxLDcgQEAKICBmYWlsX2FsbG9jX3R4cToKIAlmcmVlX2lycShtYm94LT5pcnEsIG1ib3gpOwogIGZhaWxfcmVxdWVzdF9pcnE6Ci0JaWYgKHVubGlrZWx5KG1ib3gtPm9wcy0+c2h1dGRvd24pKQorCWlmIChtYm94LT5vcHMtPnNodXRkb3duKQogCQltYm94LT5vcHMtPnNodXRkb3duKG1ib3gpOwogCiAJcmV0dXJuIHJldDsKQEAgLTI5OCw0NiArMjg5LDM2IEBACiAKIHN0YXRpYyB2b2lkIG9tYXBfbWJveF9maW5pKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCiB7CisJZnJlZV9pcnEobWJveC0+aXJxLCBtYm94KTsKKwl0YXNrbGV0X2tpbGwoJm1ib3gtPnR4cS0+dGFza2xldCk7CisJZmx1c2hfd29yaygmbWJveC0+cnhxLT53b3JrKTsKIAltYm94X3F1ZXVlX2ZyZWUobWJveC0+dHhxKTsKIAltYm94X3F1ZXVlX2ZyZWUobWJveC0+cnhxKTsKIAotCWZyZWVfaXJxKG1ib3gtPmlycSwgbWJveCk7Ci0KLQlpZiAodW5saWtlbHkobWJveC0+b3BzLT5zaHV0ZG93bikpIHsKLQkJd3JpdGVfbG9jaygmbWJveGVzX2xvY2spOworCWlmIChtYm94LT5vcHMtPnNodXRkb3duKSB7CisJCW11dGV4X2xvY2soJm1ib3hfY29uZmlndXJlZF9sb2NrKTsKIAkJaWYgKG1ib3hfY29uZmlndXJlZCA+IDApCiAJCQltYm94X2NvbmZpZ3VyZWQtLTsKIAkJaWYgKCFtYm94X2NvbmZpZ3VyZWQpCiAJCQltYm94LT5vcHMtPnNodXRkb3duKG1ib3gpOwotCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZtYm94X2NvbmZpZ3VyZWRfbG9jayk7CiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG9tYXBfbWJveCAqKmZpbmRfbWJveGVzKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IG9tYXBfbWJveCAqKnA7Ci0KLQlmb3IgKHAgPSAmbWJveGVzOyAqcDsgcCA9ICYoKnApLT5uZXh0KSB7Ci0JCWlmIChzdHJjbXAoKCpwKS0+bmFtZSwgbmFtZSkgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBwOwotfQotCiBzdHJ1Y3Qgb21hcF9tYm94ICpvbWFwX21ib3hfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG9tYXBfbWJveCAqbWJveDsKIAlpbnQgcmV0OwogCi0JcmVhZF9sb2NrKCZtYm94ZXNfbG9jayk7Ci0JbWJveCA9ICooZmluZF9tYm94ZXMobmFtZSkpOwotCWlmIChtYm94ID09IE5VTEwpIHsKLQkJcmVhZF91bmxvY2soJm1ib3hlc19sb2NrKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0JfQorCWlmICghbWJveGVzKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCXJlYWRfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJZm9yIChtYm94ID0gKm1ib3hlczsgbWJveDsgbWJveCsrKQorCQlpZiAoIXN0cmNtcChtYm94LT5uYW1lLCBuYW1lKSkKKwkJCWJyZWFrOworCisJaWYgKCFtYm94KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAogCXJldCA9IG9tYXBfbWJveF9zdGFydHVwKG1ib3gpOwogCWlmIChyZXQpCkBAIC0zNTMsNzAgKzMzNCw3NyBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfcHV0KTsKIAotaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCitzdGF0aWMgc3RydWN0IGNsYXNzIG9tYXBfbWJveF9jbGFzcyA9IHsgLm5hbWUgPSAibWJveCIsIH07CisKK2ludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgb21hcF9tYm94ICoqbGlzdCkKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3Qgb21hcF9tYm94ICoqdG1wOworCWludCByZXQ7CisJaW50IGk7CiAKLQlpZiAoIW1ib3gpCisJbWJveGVzID0gbGlzdDsKKwlpZiAoIW1ib3hlcykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKG1ib3gtPm5leHQpCi0JCXJldHVybiAtRUJVU1k7CiAKLQl3cml0ZV9sb2NrKCZtYm94ZXNfbG9jayk7Ci0JdG1wID0gZmluZF9tYm94ZXMobWJveC0+bmFtZSk7Ci0JaWYgKCp0bXApIHsKLQkJcmV0ID0gLUVCVVNZOwotCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKLQkJZ290byBlcnJfZmluZDsKKwlmb3IgKGkgPSAwOyBtYm94ZXNbaV07IGkrKykgeworCQlzdHJ1Y3Qgb21hcF9tYm94ICptYm94ID0gbWJveGVzW2ldOworCQltYm94LT5kZXYgPSBkZXZpY2VfY3JlYXRlKCZvbWFwX21ib3hfY2xhc3MsCisJCQkJcGFyZW50LCAwLCBtYm94LCAiJXMiLCBtYm94LT5uYW1lKTsKKwkJaWYgKElTX0VSUihtYm94LT5kZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKG1ib3gtPmRldik7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KIAl9Ci0JKnRtcCA9IG1ib3g7Ci0Jd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7Ci0KIAlyZXR1cm4gMDsKIAotZXJyX2ZpbmQ6CitlcnJfb3V0OgorCXdoaWxlIChpLS0pCisJCWRldmljZV91bnJlZ2lzdGVyKG1ib3hlc1tpXS0+ZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfcmVnaXN0ZXIpOwogCi1pbnQgb21hcF9tYm94X3VucmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK2ludCBvbWFwX21ib3hfdW5yZWdpc3Rlcih2b2lkKQogewotCXN0cnVjdCBvbWFwX21ib3ggKip0bXA7CisJaW50IGk7CiAKLQl3cml0ZV9sb2NrKCZtYm94ZXNfbG9jayk7Ci0JdG1wID0gJm1ib3hlczsKLQl3aGlsZSAoKnRtcCkgewotCQlpZiAobWJveCA9PSAqdG1wKSB7Ci0JCQkqdG1wID0gbWJveC0+bmV4dDsKLQkJCW1ib3gtPm5leHQgPSBOVUxMOwotCQkJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQl0bXAgPSAmKCp0bXApLT5uZXh0OwotCX0KLQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwlpZiAoIW1ib3hlcykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKGkgPSAwOyBtYm94ZXNbaV07IGkrKykKKwkJZGV2aWNlX3VucmVnaXN0ZXIobWJveGVzW2ldLT5kZXYpOworCW1ib3hlcyA9IE5VTEw7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9tYm94X2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCisJZXJyID0gY2xhc3NfcmVnaXN0ZXIoJm9tYXBfbWJveF9jbGFzcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCW1ib3hkID0gY3JlYXRlX3dvcmtxdWV1ZSgibWJveGQiKTsKIAlpZiAoIW1ib3hkKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCS8qIGtmaWZvIHNpemUgc2FuaXR5IGNoZWNrOiBhbGlnbm1lbnQgYW5kIG1pbmltYWwgc2l6ZSAqLworCW1ib3hfa2ZpZm9fc2l6ZSA9IEFMSUdOKG1ib3hfa2ZpZm9fc2l6ZSwgc2l6ZW9mKG1ib3hfbXNnX3QpKTsKKwltYm94X2tmaWZvX3NpemUgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIG1ib3hfa2ZpZm9fc2l6ZSwgc2l6ZW9mKG1ib3hfbXNnX3QpKTsKKwogCXJldHVybiAwOwogfQotbW9kdWxlX2luaXQob21hcF9tYm94X2luaXQpOworc3Vic3lzX2luaXRjYWxsKG9tYXBfbWJveF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfbWJveF9leGl0KHZvaWQpCiB7CiAJZGVzdHJveV93b3JrcXVldWUobWJveGQpOworCWNsYXNzX3VucmVnaXN0ZXIoJm9tYXBfbWJveF9jbGFzcyk7CiB9CiBtb2R1bGVfZXhpdChvbWFwX21ib3hfZXhpdCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigib21hcCBtYWlsYm94OiBpbnRlcnJ1cHQgZHJpdmVuIG1lc3NhZ2luZyIpOwotTU9EVUxFX0FVVEhPUigiVG9zaGloaXJvIEtvYmF5YXNoaSBhbmQgSGlyb3NoaSBET1lVIik7CitNT0RVTEVfQVVUSE9SKCJUb3NoaWhpcm8gS29iYXlhc2hpIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIERPWVUiKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggN2U2NjljOS4uZTMxNDk2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTQ4MSw5ICs0ODEsOSBAQAogRVhQT1JUX1NZTUJPTChvbWFwX3N0X2lzX2VuYWJsZWQpOwogCiAvKgotICogb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkIGNvbmZpZ3VyZXMgaG93IHRvIGRlYWwKLSAqIHdpdGggdHJhbnNtaXQgdGhyZXNob2xkLiB0aGUgdGhyZXNob2xkIHZhbHVlIGFuZCBoYW5kbGVyIGNhbiBiZQotICogY29uZmlndXJlIGluIGhlcmUuCisgKiBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQgY29uZmlndXJlcyB0aGUgdHJhbnNtaXQgdGhyZXNob2xkIGluIHdvcmRzLgorICogVGhlIHRocmVzaG9sZCBwYXJhbWV0ZXIgaXMgMSBiYXNlZCwgYW5kIGl0IGlzIGNvbnZlcnRlZCAodGhyZXNob2xkIC0gMSkKKyAqIGZvciB0aGUgVEhSU0gyIHJlZ2lzdGVyLgogICovCiB2b2lkIG9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpCiB7CkBAIC00OTgsMTQgKzQ5OCwxNSBAQAogCX0KIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKLQlNQ0JTUF9XUklURShtY2JzcCwgVEhSU0gyLCB0aHJlc2hvbGQpOworCWlmICh0aHJlc2hvbGQgJiYgdGhyZXNob2xkIDw9IG1jYnNwLT5tYXhfdHhfdGhyZXMpCisJCU1DQlNQX1dSSVRFKG1jYnNwLCBUSFJTSDIsIHRocmVzaG9sZCAtIDEpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQpOwogCiAvKgotICogb21hcF9tY2JzcF9zZXRfcnhfdGhyZXNob2xkIGNvbmZpZ3VyZXMgaG93IHRvIGRlYWwKLSAqIHdpdGggcmVjZWl2ZSB0aHJlc2hvbGQuIHRoZSB0aHJlc2hvbGQgdmFsdWUgYW5kIGhhbmRsZXIgY2FuIGJlCi0gKiBjb25maWd1cmUgaW4gaGVyZS4KKyAqIG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCBjb25maWd1cmVzIHRoZSByZWNlaXZlIHRocmVzaG9sZCBpbiB3b3Jkcy4KKyAqIFRoZSB0aHJlc2hvbGQgcGFyYW1ldGVyIGlzIDEgYmFzZWQsIGFuZCBpdCBpcyBjb252ZXJ0ZWQgKHRocmVzaG9sZCAtIDEpCisgKiBmb3IgdGhlIFRIUlNIMSByZWdpc3Rlci4KICAqLwogdm9pZCBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKQogewpAQCAtNTIwLDcgKzUyMSw4IEBACiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCU1DQlNQX1dSSVRFKG1jYnNwLCBUSFJTSDEsIHRocmVzaG9sZCk7CisJaWYgKHRocmVzaG9sZCAmJiB0aHJlc2hvbGQgPD0gbWNic3AtPm1heF9yeF90aHJlcykKKwkJTUNCU1BfV1JJVEUobWNic3AsIFRIUlNIMSwgdGhyZXNob2xkIC0gMSk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZCk7CiAKQEAgLTU2MCw4ICs1NjIsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9nZXRfbWF4X3J4X3RocmVzaG9sZCk7CiAKLSNkZWZpbmUgTUNCU1AyX0ZJRk9fU0laRQkweDUwMCAvKiAxMDI0ICsgMjU2IGxvY2F0aW9ucyAqLwotI2RlZmluZSBNQ0JTUDEzNDVfRklGT19TSVpFCTB4ODAgIC8qIDEyOCBsb2NhdGlvbnMgKi8KK3UxNiBvbWFwX21jYnNwX2dldF9maWZvX3NpemUodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKworCXJldHVybiBtY2JzcC0+cGRhdGEtPmJ1ZmZlcl9zaXplOworfQorRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2dldF9maWZvX3NpemUpOworCiAvKgogICogb21hcF9tY2JzcF9nZXRfdHhfZGVsYXkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgc2xvdHMgaW4gdGhlIE1jQlNQIEZJRk8KICAqLwpAQCAtNTgwLDEwICs1OTQsNyBAQAogCWJ1ZmZzdGF0ID0gTUNCU1BfUkVBRChtY2JzcCwgWEJVRkZTVEFUKTsKIAogCS8qIE51bWJlciBvZiBzbG90cyBhcmUgZGlmZmVyZW50IGluIE1jQlNQIHBvcnRzICovCi0JaWYgKG1jYnNwLT5pZCA9PSAyKQotCQlyZXR1cm4gTUNCU1AyX0ZJRk9fU0laRSAtIGJ1ZmZzdGF0OwotCWVsc2UKLQkJcmV0dXJuIE1DQlNQMTM0NV9GSUZPX1NJWkUgLSBidWZmc3RhdDsKKwlyZXR1cm4gbWNic3AtPnBkYXRhLT5idWZmZXJfc2l6ZSAtIGJ1ZmZzdGF0OwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2dldF90eF9kZWxheSk7CiAKQEAgLTE2ODMsOCArMTY5NCwxNiBAQAogewogCW1jYnNwLT5kbWFfb3BfbW9kZSA9IE1DQlNQX0RNQV9NT0RFX0VMRU1FTlQ7CiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCW1jYnNwLT5tYXhfdHhfdGhyZXMgPSBtYXhfdGhyZXMobWNic3ApOwotCQltY2JzcC0+bWF4X3J4X3RocmVzID0gbWF4X3RocmVzKG1jYnNwKTsKKwkJLyoKKwkJICogSW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgbWF4aW11bSB0aHJlc2hvbGRzIHRvIGEgc2FmZSB2YWx1ZS4KKwkJICogVGhlIE1jQlNQIEZJRk8gdXNhZ2Ugd2l0aCB0aGVzZSB2YWx1ZXMgc2hvdWxkIG5vdCBnbyB1bmRlcgorCQkgKiAxNiBsb2NhdGlvbnMuCisJCSAqIElmIHRoZSB3aG9sZSBGSUZPIHdpdGhvdXQgc2FmZXR5IGJ1ZmZlciBpcyB1c2VkLCB0aGFuIHRoZXJlCisJCSAqIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgRE1BIHdpbGwgYmUgbm90IGFibGUgdG8gcHVzaCB0aGUKKwkJICogbmV3IGRhdGEgb24gdGltZSwgY2F1c2luZyBjaGFubmVsIHNoaWZ0cyBpbiBydW50aW1lLgorCQkgKi8KKwkJbWNic3AtPm1heF90eF90aHJlcyA9IG1heF90aHJlcyhtY2JzcCkgLSAweDEwOworCQltY2JzcC0+bWF4X3J4X3RocmVzID0gbWF4X3RocmVzKG1jYnNwKSAtIDB4MTA7CiAJCS8qCiAJCSAqIFJFVklTSVQ6IFNldCBkbWFwX29wX21vZGUgdG8gVEhSRVNIT0xEIGFzIGRlZmF1bHQKIAkJICogZm9yIG1jYnNwMiBpbnN0YW5jZXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKaW5kZXggMDY3MDM2My4uMGQ0YWEwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwpAQCAtNTQsNyArNTQsNyBAQAogewogCXN0cnVjdCBwaW5fY29uZmlnICpyZWc7CiAKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKKwlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibXV4OiBCcm9rZW4gb21hcF9jZmdfcmVnKCVsdSkgZW50cnlcbiIsCiAJCQkJaW5kZXgpOwogCQlXQVJOX09OKDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXAtcG0tbm9vcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL29tYXAtcG0tbm9vcC5jCmluZGV4IDE4NmJjYTguLmUxMjljZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwLXBtLW5vb3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvb21hcC1wbS1ub29wLmMKQEAgLTM0LDExICszNCwxMSBAQAogICogRGV2aWNlLWRyaXZlci1vcmlnaW5hdGVkIGNvbnN0cmFpbnRzICh2aWEgYm9hcmQtKi5jIGZpbGVzKQogICovCiAKLXZvaWQgb21hcF9wbV9zZXRfbWF4X21wdV93YWtldXBfbGF0KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyB0KQoraW50IG9tYXBfcG1fc2V0X21heF9tcHVfd2FrZXVwX2xhdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGxvbmcgdCkKIHsKIAlpZiAoIWRldiB8fCB0IDwgLTEpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOworCQlXQVJOKDEsICJPTUFQIFBNOiAlczogaW52YWxpZCBwYXJhbWV0ZXIocykiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOwogCX07CiAKIAlpZiAodCA9PSAtMSkKQEAgLTU4LDE0ICs1OCwxNiBAQAogCSAqCiAJICogVEkgQ0RQIGNvZGUgY2FuIGNhbGwgY29uc3RyYWludF9zZXQgaGVyZS4KIAkgKi8KKworCXJldHVybiAwOwogfQogCi12b2lkIG9tYXBfcG1fc2V0X21pbl9idXNfdHB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4IGFnZW50X2lkLCB1bnNpZ25lZCBsb25nIHIpCitpbnQgb21hcF9wbV9zZXRfbWluX2J1c190cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggYWdlbnRfaWQsIHVuc2lnbmVkIGxvbmcgcikKIHsKIAlpZiAoIWRldiB8fCAoYWdlbnRfaWQgIT0gT0NQX0lOSVRJQVRPUl9BR0VOVCAmJgogCSAgICBhZ2VudF9pZCAhPSBPQ1BfVEFSR0VUX0FHRU5UKSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJCVdBUk4oMSwgIk9NQVAgUE06ICVzOiBpbnZhbGlkIHBhcmFtZXRlcihzKSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfTsKIAogCWlmIChyID09IDApCkBAIC04MywxMyArODUsMTYgQEAKIAkgKgogCSAqIFRJIENEUCBjb2RlIGNhbiBjYWxsIGNvbnN0cmFpbnRfc2V0IGhlcmUgb24gdGhlIFZERDIgT1BQLgogCSAqLworCisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb21hcF9wbV9zZXRfbWF4X2Rldl93YWtldXBfbGF0KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyB0KQoraW50IG9tYXBfcG1fc2V0X21heF9kZXZfd2FrZXVwX2xhdChzdHJ1Y3QgZGV2aWNlICpyZXFfZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgbG9uZyB0KQogewotCWlmICghZGV2IHx8IHQgPCAtMSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJaWYgKCFyZXFfZGV2IHx8ICFkZXYgfHwgdCA8IC0xKSB7CisJCVdBUk4oMSwgIk9NQVAgUE06ICVzOiBpbnZhbGlkIHBhcmFtZXRlcihzKSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfTsKIAogCWlmICh0ID09IC0xKQpAQCAtMTExLDEzICsxMTYsMTUgQEAKIAkgKgogCSAqIFRJIENEUCBjb2RlIGNhbiBjYWxsIGNvbnN0cmFpbnRfc2V0IGhlcmUuCiAJICovCisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBvbWFwX3BtX3NldF9tYXhfc2RtYV9sYXQoc3RydWN0IGRldmljZSAqZGV2LCBsb25nIHQpCitpbnQgb21hcF9wbV9zZXRfbWF4X3NkbWFfbGF0KHN0cnVjdCBkZXZpY2UgKmRldiwgbG9uZyB0KQogewogCWlmICghZGV2IHx8IHQgPCAtMSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47CisJCVdBUk4oMSwgIk9NQVAgUE06ICVzOiBpbnZhbGlkIHBhcmFtZXRlcihzKSIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfTsKIAogCWlmICh0ID09IC0xKQpAQCAtMTM5LDggKzE0NiwzNiBAQAogCSAqIFRJIENEUCBjb2RlIGNhbiBjYWxsIGNvbnN0cmFpbnRfc2V0IGhlcmUuCiAJICovCiAKKwlyZXR1cm4gMDsKIH0KIAoraW50IG9tYXBfcG1fc2V0X21pbl9jbGtfcmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBjbGsgKmMsIGxvbmcgcikKK3sKKwlpZiAoIWRldiB8fCAhYyB8fCByIDwgMCkgeworCQlXQVJOKDEsICJPTUFQIFBNOiAlczogaW52YWxpZCBwYXJhbWV0ZXIocykiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyID09IDApCisJCXByX2RlYnVnKCJPTUFQIFBNOiByZW1vdmUgbWluIGNsayByYXRlIGNvbnN0cmFpbnQ6ICIKKwkJCSAiZGV2ICVzXG4iLCBkZXZfbmFtZShkZXYpKTsKKwllbHNlCisJCXByX2RlYnVnKCJPTUFQIFBNOiBhZGQgbWluIGNsayByYXRlIGNvbnN0cmFpbnQ6ICIKKwkJCSAiZGV2ICVzLCByYXRlID0gJWxkIEh6XG4iLCBkZXZfbmFtZShkZXYpLCByKTsKKworCS8qCisJICogQ29kZSBpbiBhIHJlYWwgaW1wbGVtZW50YXRpb24gc2hvdWxkIGtlZXAgdHJhY2sgb2YgdGhlc2UKKwkgKiBjb25zdHJhaW50cyBvbiB0aGUgY2xvY2ssIGFuZCBkZXRlcm1pbmUgdGhlIGhpZ2hlc3QgbWluaW11bQorCSAqIGNsb2NrIHJhdGUuICBJdCBzaG91bGQgaXRlcmF0ZSBvdmVyIGVhY2ggT1BQIGFuZCBkZXRlcm1pbmUKKwkgKiB3aGV0aGVyIHRoZSBPUFAgd2lsbCByZXN1bHQgaW4gYSBjbG9jayByYXRlIHRoYXQgd291bGQKKwkgKiBzYXRpc2Z5IHRoaXMgY29uc3RyYWludCAoYW5kIGFueSBvdGhlciBQTSBjb25zdHJhaW50IGluIGVmZmVjdAorCSAqIGF0IHRoYXQgdGltZSkuICBPbmNlIGl0IGZpbmRzIHRoZSBsb3dlc3Qtdm9sdGFnZSBPUFAgdGhhdAorCSAqIG1lZXRzIHRob3NlIGNvbmRpdGlvbnMsIGl0IHNob3VsZCBzd2l0Y2ggdG8gaXQsIG9yIHJldHVybgorCSAqIGFuIGVycm9yIGlmIHRoZSBjb2RlIGlzIG5vdCBjYXBhYmxlIG9mIGRvaW5nIHNvLgorCSAqLworCisJcmV0dXJuIDA7Cit9CiAKIC8qCiAgKiBEU1AgQnJpZGdlLXNwZWNpZmljIGNvbnN0cmFpbnRzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IGY4OTk2MDMuLmQyYjE2MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG9tYXBfZGV2aWNlIGltcGxlbWVudGF0aW9uCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICogUGF1bCBXYWxtc2xleSwgS2V2aW4gSGlsbWFuCiAgKgogICogRGV2ZWxvcGVkIGluIGNvbGxhYm9yYXRpb24gd2l0aCAoYWxwaGFiZXRpY2FsIG9yZGVyKTogQmVub2l0CkBAIC05MCw4ICs5MCwxMSBAQAogI2RlZmluZSBVU0VfV0FLRVVQX0xBVAkJCTAKICNkZWZpbmUgSUdOT1JFX1dBS0VVUF9MQVQJCTEKIAotCi0jZGVmaW5lIE9NQVBfREVWSUNFX01BR0lDIDB4ZjAwZGNhZmUKKy8qCisgKiBPTUFQX0RFVklDRV9NQUdJQzogdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0cnVjdCBvbWFwX2RldmljZQorICogb2J0YWluZWQgdmlhIGNvbnRhaW5lcl9vZigpIGlzIGluIGZhY3QgYSBzdHJ1Y3Qgb21hcF9kZXZpY2UKKyAqLworI2RlZmluZSBPTUFQX0RFVklDRV9NQUdJQwkJIDB4ZjAwZGNhZmUKIAogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIApAQCAtMzU5LDcgKzM2Miw3IEBACiAJc3RydWN0IG9tYXBfZGV2aWNlICpvZDsKIAljaGFyICpwZGV2X25hbWUyOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsKLQlpbnQgcmVzX2NvdW50OworCWludCBpLCByZXNfY291bnQ7CiAJc3RydWN0IG9tYXBfaHdtb2QgKipod21vZHM7CiAKIAlpZiAoIW9ocyB8fCBvaF9jbnQgPT0gMCB8fCAhcGRldl9uYW1lKQpAQCAtNDA0LDcgKzQwNyw5IEBACiAJb2QtPnBkZXYubnVtX3Jlc291cmNlcyA9IHJlc19jb3VudDsKIAlvZC0+cGRldi5yZXNvdXJjZSA9IHJlczsKIAotCXBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSgmb2QtPnBkZXYsIHBkYXRhLCBwZGF0YV9sZW4pOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSgmb2QtPnBkZXYsIHBkYXRhLCBwZGF0YV9sZW4pOworCWlmIChyZXQpCisJCWdvdG8gb2Ric19leGl0NDsKIAogCW9kLT5wbV9sYXRzID0gcG1fbGF0czsKIAlvZC0+cG1fbGF0c19jbnQgPSBwbV9sYXRzX2NudDsKQEAgLTQxNiw2ICs0MjEsOSBAQAogCWVsc2UKIAkJcmV0ID0gb21hcF9kZXZpY2VfcmVnaXN0ZXIob2QpOwogCisJZm9yIChpID0gMDsgaSA8IG9oX2NudDsgaSsrKQorCQlod21vZHNbaV0tPm9kID0gb2Q7CisKIAlpZiAocmV0KQogCQlnb3RvIG9kYnNfZXhpdDQ7CiAKQEAgLTY1Miw2ICs2NjAsMjUgQEAKIAlyZXR1cm4gb21hcF9od21vZF9nZXRfcHdyZG0ob2QtPmh3bW9kc1swXSk7CiB9CiAKKy8qKgorICogb21hcF9kZXZpY2VfZ2V0X21wdV9ydF92YSAtIHJldHVybiB0aGUgTVBVJ3MgdmlydHVhbCBhZGRyIGZvciB0aGUgaHdtb2QgYmFzZQorICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKgorICoKKyAqIFJldHVybiB0aGUgTVBVJ3MgdmlydHVhbCBhZGRyZXNzIGZvciB0aGUgYmFzZSBvZiB0aGUgaHdtb2QsIGZyb20KKyAqIHRoZSBpb3JlbWFwKCkgdGhhdCB0aGUgaHdtb2QgY29kZSBkb2VzLiAgT25seSB2YWxpZCBpZiB0aGVyZSBpcyBvbmUKKyAqIGh3bW9kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4gIFJldHVybnMgTlVMTCBpZiB0aGVyZSBhcmUgemVybworICogb3IgbW9yZSB0aGFuIG9uZSBod21vZHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb21hcF9kZXZpY2U7CisgKiBvdGhlcndpc2UsIHBhc3NlcyBhbG9uZyB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKyAqIG9tYXBfaHdtb2RfZ2V0X21wdV9ydF92YSgpLgorICovCit2b2lkIF9faW9tZW0gKm9tYXBfZGV2aWNlX2dldF9ydF92YShzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKQoreworCWlmIChvZC0+aHdtb2RzX2NudCAhPSAxKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBvbWFwX2h3bW9kX2dldF9tcHVfcnRfdmEob2QtPmh3bW9kc1swXSk7Cit9CisKIC8qCiAgKiBQdWJsaWMgZnVuY3Rpb25zIGludGVuZGVkIGZvciB1c2UgaW4gb21hcF9kZXZpY2VfcG1fbGF0ZW5jeQogICogLmFjdGl2YXRlX2Z1bmMgYW5kIC5kZWFjdGl2YXRlX2Z1bmMgZnVuY3Rpb24gcG9pbnRlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCBkM2JmMTdjLi5mMzU3MDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC0yMiw1MjQgKzIyLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKLQotI2RlZmluZSBJTlRfVVNCX0lSUV9HRU4JCUlIMl9CQVNFICsgMjAKLSNkZWZpbmUgSU5UX1VTQl9JUlFfTklTTwlJSDJfQkFTRSArIDMwCi0jZGVmaW5lIElOVF9VU0JfSVJRX0lTTwkJSUgyX0JBU0UgKyAyOQotI2RlZmluZSBJTlRfVVNCX0lSUV9IR0VOCUlOVF9VU0JfSEhDXzEKLSNkZWZpbmUgSU5UX1VTQl9JUlFfT1RHCQlJSDJfQkFTRSArIDgKLQotI2Vsc2UKLQotI2RlZmluZSBJTlRfVVNCX0lSUV9HRU4JCUlOVF8yNFhYX1VTQl9JUlFfR0VOCi0jZGVmaW5lIElOVF9VU0JfSVJRX05JU08JSU5UXzI0WFhfVVNCX0lSUV9OSVNPCi0jZGVmaW5lIElOVF9VU0JfSVJRX0lTTwkJSU5UXzI0WFhfVVNCX0lSUV9JU08KLSNkZWZpbmUgSU5UX1VTQl9JUlFfSEdFTglJTlRfMjRYWF9VU0JfSVJRX0hHRU4KLSNkZWZpbmUgSU5UX1VTQl9JUlFfT1RHCQlJTlRfMjRYWF9VU0JfSVJRX09URwotCi0jZW5kaWYKLQotCi0vKiBUaGVzZSByb3V0aW5lcyBzaG91bGQgaGFuZGxlIHRoZSBzdGFuZGFyZCBjaGlwLXNwZWNpZmljIG1vZGVzCi0gKiBmb3IgdXNiMC8xLzIgcG9ydHMsIGNvdmVyaW5nIGJhc2ljIG11eCBhbmQgdHJhbnNjZWl2ZXIgc2V0dXAuCi0gKgotICogU29tZSBib2FyZC0qLmMgZmlsZXMgd2lsbCBuZWVkIHRvIHNldCB1cCBhZGRpdGlvbmFsIG11eCBvcHRpb25zLAotICogbGlrZSBmb3Igc3VzcGVuZCBoYW5kbGluZywgdmJ1cyBzZW5zaW5nLCBHUElPcywgYW5kIHRoZSBEKyBwdWxsdXAuCi0gKi8KLQotLyogVEVTVEVEIE9OOgotICogIC0gMTYxMUIgSDIgKHdpdGggdXNiMSBtaW5pLUFCKSB1c2luZyBzdGFuZGFyZCBNaW5pLUIgb3IgT1RHIGNhYmxlcwotICogIC0gNTkxMiBPU0sgT0hDSSAod2l0aCB1c2IwIHN0YW5kYXJkLUEpLCBzdGFuZGFyZCBBLXRvLUIgY2FibGVzCi0gKiAgLSA1OTEyIE9TSyBVREMsIHdpdGggKm5vbnN0YW5kYXJkKiBBLXRvLUEgY2FibGUKLSAqICAtIDE1MTAgSW5ub3ZhdG9yIFVEQyB3aXRoIGJ1bmRsZWQgdXNiMCBjYWJsZQotICogIC0gMTUxMCBJbm5vdmF0b3IgT0hDSSB3aXRoIGJ1bmRsZWQgdXNiMS91c2IyIGNhYmxlCi0gKiAgLSAxNTEwIElubm92YXRvciBPSENJIHdpdGggY3VzdG9tIHVzYjAgY2FibGUsIGZlZWRpbmcgNVYgVkJVUwotICogIC0gMTcxMCBjdXN0b20gZGV2ZWxvcG1lbnQgYm9hcmQgdXNpbmcgYWx0ZXJuYXRlIHBpbiBncm91cAotICogIC0gMTcxMCBIMyAod2l0aCB1c2IxIG1pbmktQUIpIHVzaW5nIHN0YW5kYXJkIE1pbmktQiBvciBPVEcgY2FibGVzCi0gKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUF9PVEcpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCi0KLXN0YXRpYyB2b2lkIG9tYXAyX3VzYl9kZXZjb25mX2NsZWFyKHU4IHBvcnQsIHUzMiBtYXNrKQotewotCXUzMiByOwotCi0JciA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLQlyICY9IH5VU0JUWFdSTU9ERUkocG9ydCwgbWFzayk7Ci0Jb21hcF9jdHJsX3dyaXRlbChyLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLX0KLQotc3RhdGljIHZvaWQgb21hcDJfdXNiX2RldmNvbmZfc2V0KHU4IHBvcnQsIHUzMiBtYXNrKQotewotCXUzMiByOwotCi0JciA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLQlyIHw9IFVTQlRYV1JNT0RFSShwb3J0LCBtYXNrKTsKLQlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwMl91c2IyX2Rpc2FibGVfNXBpbmJpdGxsKHZvaWQpCi17Ci0JdTMyIHI7Ci0KLQlyID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotCXIgJj0gfihVU0JUWFdSTU9ERUkoMiwgVVNCX0JJRElSX1RMTCkgfCBVU0JUMlRMTDVQSSk7Ci0Jb21hcF9jdHJsX3dyaXRlbChyLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLX0KLQotc3RhdGljIHZvaWQgb21hcDJfdXNiMl9lbmFibGVfNXBpbnVuaXRsbCh2b2lkKQotewotCXUzMiByOwotCi0JciA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLQlyIHw9IFVTQlRYV1JNT0RFSSgyLCBVU0JfVU5JRElSX1RMTCkgfCBVU0JUMlRMTDVQSTsKLQlvbWFwX2N0cmxfd3JpdGVsKHIsIE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotfQotCi1zdGF0aWMgdTMyIF9faW5pdCBvbWFwX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKLXsKLQl1MzIJc3lzY29uMSA9IDA7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCW9tYXAyX3VzYl9kZXZjb25mX2NsZWFyKDAsIFVTQl9CSURJUl9UTEwpOwotCi0JaWYgKG53aXJlcyA9PSAwKSB7Ci0JCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSAmJiAhY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCXUzMiBsOwotCi0JCQkvKiBwdWxsZG93biBEKy9ELSAqLwotCQkJbCA9IG9tYXBfcmVhZGwoVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQkJbCAmPSB+KDMgPDwgMSk7Ci0JCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGlzX2RldmljZSkgewotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCQlvbWFwX2NmZ19yZWcoSjIwXzI0WFhfVVNCMF9QVUVOKTsKLQkJZWxzZSBpZiAoY3B1X2lzX29tYXA3eHgoKSkgewotCQkJb21hcF9jZmdfcmVnKEFBMTdfN1hYX1VTQl9ETSk7Ci0JCQlvbWFwX2NmZ19yZWcoVzE2XzdYWF9VU0JfUFVfRU4pOwotCQkJb21hcF9jZmdfcmVnKFcxN183WFhfVVNCX1ZCVVNJKTsKLQkJCW9tYXBfY2ZnX3JlZyhXMThfN1hYX1VTQl9ETUNLX09VVCk7Ci0JCQlvbWFwX2NmZ19yZWcoVzE5XzdYWF9VU0JfRENSU1QpOwotCQl9IGVsc2UKLQkJCW9tYXBfY2ZnX3JlZyhXNF9VU0JfUFVFTik7Ci0JfQotCi0JLyogaW50ZXJuYWwgdHJhbnNjZWl2ZXIgKHVuYXZhaWxhYmxlIG9uIDE3eHgsIDI0eHgpICovCi0JaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSAmJiBud2lyZXMgPT0gMikgewotCQl1MzIgbDsKLQotCQkvLyBvbWFwX2NmZ19yZWcoUDlfVVNCX0RQKTsKLQkJLy8gb21hcF9jZmdfcmVnKFI4X1VTQl9ETSk7Ci0KLQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkvKiBUaGlzIHdvcmtzIG9uIDE1MTAtSW5ub3ZhdG9yICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCS8qIE5PVEVTOgotCQkgKiAgLSBwZXJpcGhlcmFsIHNob3VsZCBjb25maWd1cmUgVkJVUyBkZXRlY3Rpb24hCi0JCSAqICAtIG9ubHkgcGVyaXBoZXJhbHMgbWF5IHVzZSB0aGUgaW50ZXJuYWwgRCsvRC0gcHVsbGRvd25zCi0JCSAqICAtIE9URyBzdXBwb3J0IG9uIHRoaXMgcG9ydCBub3QgeWV0IHdyaXR0ZW4KLQkJICovCi0KLQkJLyogRG9uJ3QgZG8gdGhpcyBmb3Igb21hcDd4eCAtLSBpdCBjYXVzZXMgVVNCIHRvIG5vdCB3b3JrIGNvcnJlY3RseSAqLwotCQlpZiAoIWNwdV9pc19vbWFwN3h4KCkpIHsKLQkJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQkJCWwgJj0gfig3IDw8IDQpOwotCQkJaWYgKCFpc19kZXZpY2UpCi0JCQkJbCB8PSAoMyA8PCAxKTsKLQkJCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQkJfQotCi0JCXJldHVybiAzIDw8IDE2OwotCX0KLQotCS8qIGFsdGVybmF0ZSBwaW4gY29uZmlnLCBleHRlcm5hbCB0cmFuc2NlaXZlciAqLwotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vIHVzYjAgYWx0IHBpbiBjb25maWcgb24gMTV4eFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlvbWFwX2NmZ19yZWcoSzE4XzI0WFhfVVNCMF9EQVQpOwotCQlvbWFwX2NmZ19yZWcoSzE5XzI0WFhfVVNCMF9UWEVOKTsKLQkJb21hcF9jZmdfcmVnKEoxNF8yNFhYX1VTQjBfU0UwKTsKLQkJaWYgKG53aXJlcyAhPSAzKQotCQkJb21hcF9jZmdfcmVnKEoxOF8yNFhYX1VTQjBfUkNWKTsKLQl9IGVsc2UgewotCQlvbWFwX2NmZ19yZWcoVjZfVVNCMF9UWEQpOwotCQlvbWFwX2NmZ19yZWcoVzlfVVNCMF9UWEVOKTsKLQkJb21hcF9jZmdfcmVnKFc1X1VTQjBfU0UwKTsKLQkJaWYgKG53aXJlcyAhPSAzKQotCQkJb21hcF9jZmdfcmVnKFk1X1VTQjBfUkNWKTsKLQl9Ci0KLQkvKiBOT1RFOiAgU1BFRUQgYW5kIFNVU1AgYXJlbid0IGNvbmZpZ3VyZWQgaGVyZS4gIE9URyBob3N0cwotCSAqIG1heSBiZSBhYmxlIHRvIHVzZSBJMkMgcmVxdWVzdHMgdG8gc2V0IHRob3NlIGJpdHMgYWxvbmcKLQkgKiB3aXRoIFZCVVMgc3dpdGNoaW5nIGFuZCBvdmVyY3VycmVudCBkZXRlY3Rpb24uCi0JICovCi0KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgJiYgbndpcmVzICE9IDYpIHsKLQkJdTMyIGw7Ci0KLQkJbCA9IG9tYXBfcmVhZGwoVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQlsICY9IH5DT05GX1VTQjJfVU5JX1I7Ci0JCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQl9Ci0KLQlzd2l0Y2ggKG53aXJlcykgewotCWNhc2UgMzoKLQkJc3lzY29uMSA9IDI7Ci0JCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgwLCBVU0JfQklESVIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXN5c2NvbjEgPSAxOwotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMCwgVVNCX0JJRElSKTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlzeXNjb24xID0gMzsKLQkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCQlvbWFwX2NmZ19yZWcoSjE5XzI0WFhfVVNCMF9WUCk7Ci0JCQlvbWFwX2NmZ19yZWcoSzIwXzI0WFhfVVNCMF9WTSk7Ci0JCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMCwgVVNCX1VOSURJUik7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgbDsKLQotCQkJb21hcF9jZmdfcmVnKEFBOV9VU0IwX1ZQKTsKLQkJCW9tYXBfY2ZnX3JlZyhSOV9VU0IwX1ZNKTsKLQkJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQkJCWwgfD0gQ09ORl9VU0IyX1VOSV9SOwotCQkJb21hcF93cml0ZWwobCwgVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAotCQkJMCwgbndpcmVzKTsKLQl9Ci0JcmV0dXJuIHN5c2NvbjEgPDwgMTY7Ci19Ci0KLXN0YXRpYyB1MzIgX19pbml0IG9tYXBfdXNiMV9pbml0KHVuc2lnbmVkIG53aXJlcykKLXsKLQl1MzIJc3lzY29uMSA9IDA7Ci0KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgJiYgIWNwdV9pc19vbWFwMTV4eCgpICYmIG53aXJlcyAhPSA2KSB7Ci0JCXUzMiBsOwotCi0JCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQkJbCAmPSB+Q09ORl9VU0IxX1VOSV9SOwotCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7Ci0JfQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJb21hcDJfdXNiX2RldmNvbmZfY2xlYXIoMSwgVVNCX0JJRElSX1RMTCk7Ci0KLQlpZiAobndpcmVzID09IDApCi0JCXJldHVybiAwOwotCi0JLyogZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKLQkJb21hcF9jZmdfcmVnKFVTQjFfVFhEKTsKLQkJb21hcF9jZmdfcmVnKFVTQjFfVFhFTik7Ci0JCWlmIChud2lyZXMgIT0gMykKLQkJCW9tYXBfY2ZnX3JlZyhVU0IxX1JDVik7Ci0JfQotCi0JaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCW9tYXBfY2ZnX3JlZyhVU0IxX1NFTyk7Ci0JCW9tYXBfY2ZnX3JlZyhVU0IxX1NQRUVEKTsKLQkJLy8gU1VTUAotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXA1OTEyKCkpIHsKLQkJb21hcF9jZmdfcmVnKFcxM18xNjEwX1VTQjFfU0UwKTsKLQkJb21hcF9jZmdfcmVnKFIxM18xNjEwX1VTQjFfU1BFRUQpOwotCQkvLyBTVVNQCi0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE3MTAoKSkgewotCQlvbWFwX2NmZ19yZWcoUjEzXzE3MTBfVVNCMV9TRTApOwotCQkvLyBTVVNQCi0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQkvKiBOT1RFOiAgYm9hcmQtc3BlY2lmaWMgY29kZSBtdXN0IHNldCB1cCBwaW4gbXV4aW5nIGZvciB1c2IxLAotCQkgKiBzaW5jZSBlYWNoIHNpZ25hbCBjb3VsZCBjb21lIG91dCBvbiBlaXRoZXIgb2YgdHdvIGJhbGxzLgotCQkgKi8KLQl9IGVsc2UgewotCQlwcl9kZWJ1ZygidXNiJWQgY3B1IHVucmVjb2duaXplZFxuIiwgMSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAobndpcmVzKSB7Ci0JY2FzZSAyOgotCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQotCQkJZ290byBiYWQ7Ci0JCS8qIE5PVEU6IGJvYXJkLXNwZWNpZmljIGNvZGUgbXVzdCBvdmVycmlkZSB0aGlzIHNldHRpbmcgaWYKLQkJICogdGhpcyBUTEwgbGluayBpcyBub3QgdXNpbmcgRFAvRE0KLQkJICovCi0JCXN5c2NvbjEgPSAxOwotCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMSwgVVNCX0JJRElSX1RMTCk7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJc3lzY29uMSA9IDI7Ci0JCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCW9tYXAyX3VzYl9kZXZjb25mX3NldCgxLCBVU0JfQklESVIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXN5c2NvbjEgPSAxOwotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMSwgVVNCX0JJRElSKTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCQlnb3RvIGJhZDsKLQkJc3lzY29uMSA9IDM7Ci0JCW9tYXBfY2ZnX3JlZyhVU0IxX1ZQKTsKLQkJb21hcF9jZmdfcmVnKFVTQjFfVk0pOwotCQlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQl1MzIgbDsKLQotCQkJbCA9IG9tYXBfcmVhZGwoVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQkJbCB8PSBDT05GX1VTQjFfVU5JX1I7Ci0JCQlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLWJhZDoKLQkJcHJpbnRrKEtFUk5fRVJSICJpbGxlZ2FsIHVzYiVkICVkLXdpcmUgdHJhbnNjZWl2ZXJcbiIsCi0JCQkxLCBud2lyZXMpOwotCX0KLQlyZXR1cm4gc3lzY29uMSA8PCAyMDsKLX0KLQotc3RhdGljIHUzMiBfX2luaXQgb21hcF91c2IyX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBhbHRfcGluZ3JvdXApCi17Ci0JdTMyCXN5c2NvbjEgPSAwOwotCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCW9tYXAyX3VzYjJfZGlzYWJsZV81cGluYml0bGwoKTsKLQkJYWx0X3Bpbmdyb3VwID0gMDsKLQl9Ci0KLQkvKiBOT1RFIG9tYXAxIGVycmF0dW06IG11c3QgbGVhdmUgVVNCMl9VTklfUiBzZXQgaWYgdXNiMCBpbiB1c2UgKi8KLQlpZiAoYWx0X3Bpbmdyb3VwIHx8IG53aXJlcyA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSAmJiAhY3B1X2lzX29tYXAxNXh4KCkgJiYgbndpcmVzICE9IDYpIHsKLQkJdTMyIGw7Ci0KLQkJbCA9IG9tYXBfcmVhZGwoVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQlsICY9IH5DT05GX1VTQjJfVU5JX1I7Ci0JCW9tYXBfd3JpdGVsKGwsIFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQl9Ci0KLQkvKiBleHRlcm5hbCB0cmFuc2NlaXZlciAqLwotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQlvbWFwX2NmZ19yZWcoVVNCMl9UWEQpOwotCQlvbWFwX2NmZ19yZWcoVVNCMl9UWEVOKTsKLQkJb21hcF9jZmdfcmVnKFVTQjJfU0VPKTsKLQkJaWYgKG53aXJlcyAhPSAzKQotCQkJb21hcF9jZmdfcmVnKFVTQjJfUkNWKTsKLQkJLyogdGhlcmUgaXMgbm8gVVNCMl9TUEVFRCAqLwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJb21hcF9jZmdfcmVnKFY2X1VTQjJfVFhEKTsKLQkJb21hcF9jZmdfcmVnKFc5X1VTQjJfVFhFTik7Ci0JCW9tYXBfY2ZnX3JlZyhXNV9VU0IyX1NFMCk7Ci0JCWlmIChud2lyZXMgIT0gMykKLQkJCW9tYXBfY2ZnX3JlZyhZNV9VU0IyX1JDVik7Ci0JCS8vIEZJWE1FIG9tYXBfY2ZnX3JlZyhVU0IyX1NQRUVEKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCW9tYXBfY2ZnX3JlZyhZMTFfMjRYWF9VU0IyX0RBVCk7Ci0JCW9tYXBfY2ZnX3JlZyhBQTEwXzI0WFhfVVNCMl9TRTApOwotCQlpZiAobndpcmVzID4gMikKLQkJCW9tYXBfY2ZnX3JlZyhBQTEyXzI0WFhfVVNCMl9UWEVOKTsKLQkJaWYgKG53aXJlcyA+IDMpCi0JCQlvbWFwX2NmZ19yZWcoQUE2XzI0WFhfVVNCMl9SQ1YpOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJ1c2IlZCBjcHUgdW5yZWNvZ25pemVkXG4iLCAxKTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8vIGlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgb21hcF9jZmdfcmVnKFVTQjJfU1VTUCk7Ci0KLQlzd2l0Y2ggKG53aXJlcykgewotCWNhc2UgMjoKLQkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJCWdvdG8gYmFkOwotCQkvKiBOT1RFOiBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGlmCi0JCSAqIHRoaXMgVExMIGxpbmsgaXMgbm90IHVzaW5nIERQL0RNCi0JCSAqLwotCQlzeXNjb24xID0gMTsKLQkJb21hcDJfdXNiX2RldmNvbmZfc2V0KDIsIFVTQl9CSURJUl9UTEwpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXN5c2NvbjEgPSAyOwotCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCQlvbWFwMl91c2JfZGV2Y29uZl9zZXQoMiwgVVNCX0JJRElSKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlzeXNjb24xID0gMTsKLQkJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQkJb21hcDJfdXNiX2RldmNvbmZfc2V0KDIsIFVTQl9CSURJUik7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKLQkJCWdvdG8gYmFkOwotCQlvbWFwX2NmZ19yZWcoQUE0XzI0WFhfVVNCMl9UTExTRTApOwotCQkvKiBOT1RFOiBib2FyZC1zcGVjaWZpYyBjb2RlIG11c3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGlmCi0JCSAqIHRoaXMgVExMIGxpbmsgaXMgbm90IHVzaW5nIERQL0RNLiAgU29tZXRoaW5nIG11c3QgYWxzbwotCQkgKiBzZXQgdXAgT1RHX1NZU0NPTjIuSE1DX1RMTHtBVFRBQ0gsU1BFRUR9Ci0JCSAqLwotCQlzeXNjb24xID0gMzsKLQkJb21hcDJfdXNiMl9lbmFibGVfNXBpbnVuaXRsbCgpOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJCWdvdG8gYmFkOwotCQlzeXNjb24xID0gMzsKLQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQlvbWFwX2NmZ19yZWcoVVNCMl9WUCk7Ci0JCQlvbWFwX2NmZ19yZWcoVVNCMl9WTSk7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgbDsKLQotCQkJb21hcF9jZmdfcmVnKEFBOV9VU0IyX1ZQKTsKLQkJCW9tYXBfY2ZnX3JlZyhSOV9VU0IyX1ZNKTsKLQkJCWwgPSBvbWFwX3JlYWRsKFVTQl9UUkFOU0NFSVZFUl9DVFJMKTsKLQkJCWwgfD0gQ09ORl9VU0IyX1VOSV9SOwotCQkJb21hcF93cml0ZWwobCwgVVNCX1RSQU5TQ0VJVkVSX0NUUkwpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci1iYWQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiaWxsZWdhbCB1c2IlZCAlZC13aXJlIHRyYW5zY2VpdmVyXG4iLAotCQkJMiwgbndpcmVzKTsKLQl9Ci0JcmV0dXJuIHN5c2NvbjEgPDwgMjQ7Ci19Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHVkY19yZXNvdXJjZXNbXSA9IHsKLQkvKiBvcmRlciBpcyBzaWduaWZpY2FudCEgKi8KLQl7CQkvKiByZWdpc3RlcnMgKi8KLQkJLnN0YXJ0CQk9IFVEQ19CQVNFLAotCQkuZW5kCQk9IFVEQ19CQVNFICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsJCS8qIGdlbmVyYWwgSVJRICovCi0JCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9HRU4sCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7CQkvKiBQSU8gSVJRICovCi0JCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9OSVNPLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewkJLyogU09GIElSUSAqLwotCQkuc3RhcnQJCT0gSU5UX1VTQl9JUlFfSVNPLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyB1NjQgdWRjX2RtYW1hc2sgPSB+KHUzMikwOwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1ZGNfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwX3VkYyIsCi0JLmlkCQk9IC0xLAotCS5kZXYgPSB7Ci0JCS5kbWFfbWFzawkJPSAmdWRjX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gdWRjX3Jlc291cmNlcywKLX07Ci0KLSNlbmRpZgotCi0jaWYJZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQotCi0vKiBUaGUgZG1hbWFzayBtdXN0IGJlIHNldCBmb3IgT0hDSSB0byB3b3JrICovCi1zdGF0aWMgdTY0IG9oY2lfZG1hbWFzayA9IH4odTMyKTA7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2hjaV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IE9NQVBfT0hDSV9CQVNFLAotCQkuZW5kCT0gT01BUF9PSENJX0JBU0UgKyAweGZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSU5UX1VTQl9JUlFfSEdFTiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9oY2lfZGV2aWNlID0gewotCS5uYW1lCQkJPSAib2hjaSIsCi0JLmlkCQkJPSAtMSwKLQkuZGV2ID0gewotCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvaGNpX3Jlc291cmNlcyksCi0JLnJlc291cmNlCQk9IG9oY2lfcmVzb3VyY2VzLAotfTsKLQotI2VuZGlmCi0KLSNpZglkZWZpbmVkKENPTkZJR19VU0JfT1RHKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVBfT1RHKQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKLQkvKiBvcmRlciBpcyBzaWduaWZpY2FudCEgKi8KLQl7Ci0JCS5zdGFydAkJPSBPVEdfQkFTRSwKLQkJLmVuZAkJPSBPVEdfQkFTRSArIDB4ZmYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAkJPSBJTlRfVVNCX0lSUV9PVEcsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcF9vdGciLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3RnX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gb3RnX3Jlc291cmNlcywKLX07Ci0KLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vLyBGSVhNRSBjb3JyZWN0IGFuc3dlciBkZXBlbmRzIG9uIGhtY19tb2RlLAotLy8gYXMgZG9lcyAob24gb21hcDEpIGFueSBub256ZXJvIHZhbHVlIGZvciBjb25maWctPm90ZyBwb3J0IG51bWJlcgotI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKLSNkZWZpbmUJaXNfdXNiMF9kZXZpY2UoY29uZmlnKQkxCi0jZWxzZQotI2RlZmluZQlpc191c2IwX2RldmljZShjb25maWcpCTAKLSNlbmRpZgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAjaWZkZWYJQ09ORklHX0FSQ0hfT01BUF9PVEcKIAogdm9pZCBfX2luaXQKQEAgLTU2MCw5ICs0OSw5IEBACiAJLyogcGluIG11eGluZyBhbmQgdHJhbnNjZWl2ZXIgcGlub3V0cyAqLwogCWlmIChjb25maWctPnBpbnNbMF0gPiAyKQkvKiBhbHQgcGluZ3JvdXAgMiAqLwogCQlhbHRfcGluZ3JvdXAgPSAxOwotCXN5c2NvbiB8PSBvbWFwX3VzYjBfaW5pdChjb25maWctPnBpbnNbMF0sIGlzX3VzYjBfZGV2aWNlKGNvbmZpZykpOwotCXN5c2NvbiB8PSBvbWFwX3VzYjFfaW5pdChjb25maWctPnBpbnNbMV0pOwotCXN5c2NvbiB8PSBvbWFwX3VzYjJfaW5pdChjb25maWctPnBpbnNbMl0sIGFsdF9waW5ncm91cCk7CisJc3lzY29uIHw9IGNvbmZpZy0+dXNiMF9pbml0KGNvbmZpZy0+cGluc1swXSwgaXNfdXNiMF9kZXZpY2UoY29uZmlnKSk7CisJc3lzY29uIHw9IGNvbmZpZy0+dXNiMV9pbml0KGNvbmZpZy0+cGluc1sxXSk7CisJc3lzY29uIHw9IGNvbmZpZy0+dXNiMl9pbml0KGNvbmZpZy0+cGluc1syXSwgYWx0X3Bpbmdyb3VwKTsKIAlwcl9kZWJ1ZygiT1RHX1NZU0NPTl8xID0gJTA4eFxuIiwgb21hcF9yZWFkbChPVEdfU1lTQ09OXzEpKTsKIAlvbWFwX3dyaXRlbChzeXNjb24sIE9UR19TWVNDT05fMSk7CiAKQEAgLTYxMCwxNSArOTksMTEgQEAKIAogI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKIAlpZiAoY29uZmlnLT5vdGcgfHwgY29uZmlnLT5yZWdpc3Rlcl9kZXYpIHsKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdWRjX2RldmljZSA9IGNvbmZpZy0+dWRjX2RldmljZTsKKwogCQlzeXNjb24gJj0gfkRFVl9JRExFX0VOOwotCQl1ZGNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gY29uZmlnOwotCQkvKiBJUlEgbnVtYmVycyBmb3Igb21hcDd4eCAqLwotCQlpZihjcHVfaXNfb21hcDd4eCgpKSB7Ci0JCQl1ZGNfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gSU5UXzdYWF9VU0JfR0VOSTsKLQkJCXVkY19yZXNvdXJjZXNbMl0uc3RhcnQgPSBJTlRfN1hYX1VTQl9OT05fSVNPOwotCQkJdWRjX3Jlc291cmNlc1szXS5zdGFydCA9IElOVF83WFhfVVNCX0lTTzsKLQkJfQotCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnVkY19kZXZpY2UpOworCQl1ZGNfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKKwkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHVkY19kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQogCQkJcHJfZGVidWcoImNhbid0IHJlZ2lzdGVyIFVEQyBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOwogCX0KQEAgLTYyNiwxMSArMTExLDExIEBACiAKICNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCiAJaWYgKGNvbmZpZy0+b3RnIHx8IGNvbmZpZy0+cmVnaXN0ZXJfaG9zdCkgeworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvaGNpX2RldmljZSA9IGNvbmZpZy0+b2hjaV9kZXZpY2U7CisKIAkJc3lzY29uICY9IH5IU1RfSURMRV9FTjsKLQkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7Ci0JCWlmIChjcHVfaXNfb21hcDd4eCgpKQotCQkJb2hjaV9yZXNvdXJjZXNbMV0uc3RhcnQgPSBJTlRfN1hYX1VTQl9ISENfMTsKLQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvaGNpX2RldmljZSk7CisJCW9oY2lfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKKwkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKG9oY2lfZGV2aWNlKTsKIAkJaWYgKHN0YXR1cykKIAkJCXByX2RlYnVnKCJjYW4ndCByZWdpc3RlciBPSENJIGRldmljZSwgJWRcbiIsIHN0YXR1cyk7CiAJfQpAQCAtNjM4LDExICsxMjMsMTEgQEAKIAogI2lmZGVmCUNPTkZJR19VU0JfT1RHCiAJaWYgKGNvbmZpZy0+b3RnKSB7CisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm90Z19kZXZpY2UgPSBjb25maWctPm90Z19kZXZpY2U7CisKIAkJc3lzY29uICY9IH5PVEdfSURMRV9FTjsKLQkJb3RnX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKLQkJaWYgKGNwdV9pc19vbWFwN3h4KCkpCi0JCQlvdGdfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gSU5UXzdYWF9VU0JfT1RHOwotCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm90Z19kZXZpY2UpOworCQlvdGdfZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKKwkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKG90Z19kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQogCQkJcHJfZGVidWcoImNhbid0IHJlZ2lzdGVyIE9URyBkZXZpY2UsICVkXG4iLCBzdGF0dXMpOwogCX0KQEAgLTY1NCwxMDIgKzEzOSw1IEBACiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9vdGdfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcpIHt9Cit2b2lkIG9tYXBfb3RnX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKSB7fQogI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTVYWAotCi0vKiBVTFBEX0RQTExfQ1RSTCAqLwotI2RlZmluZSBEUExMX0lPQgkJKDEgPDwgMTMpCi0jZGVmaW5lIERQTExfUExMX0VOQUJMRQkJKDEgPDwgNCkKLSNkZWZpbmUgRFBMTF9MT0NLCQkoMSA8PCAwKQotCi0vKiBVTFBEX0FQTExfQ1RSTCAqLwotI2RlZmluZSBBUExMX05EUExMX1NXSVRDSAkoMSA8PCAwKQotCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzE1MTBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0JdTE2IHc7Ci0KLQlvbWFwX3VzYjBfaW5pdChjb25maWctPnBpbnNbMF0sIGlzX3VzYjBfZGV2aWNlKGNvbmZpZykpOwotCW9tYXBfdXNiMV9pbml0KGNvbmZpZy0+cGluc1sxXSk7Ci0Jb21hcF91c2IyX2luaXQoY29uZmlnLT5waW5zWzJdLCAwKTsKLQotCXZhbCA9IG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8wKSAmIH4oMHgzZiA8PCAxKTsKLQl2YWwgfD0gKGNvbmZpZy0+aG1jX21vZGUgPDwgMSk7Ci0Jb21hcF93cml0ZWwodmFsLCBNT0RfQ09ORl9DVFJMXzApOwotCi0JcHJpbnRrKCJVU0I6IGhtYyAlZCIsIGNvbmZpZy0+aG1jX21vZGUpOwotCWlmIChjb25maWctPnBpbnNbMF0pCi0JCXByaW50aygiLCB1c2IwICVkIHdpcmVzJXMiLCBjb25maWctPnBpbnNbMF0sCi0JCQlpc191c2IwX2RldmljZShjb25maWcpID8gIiAoZGV2KSIgOiAiIik7Ci0JaWYgKGNvbmZpZy0+cGluc1sxXSkKLQkJcHJpbnRrKCIsIHVzYjEgJWQgd2lyZXMiLCBjb25maWctPnBpbnNbMV0pOwotCWlmIChjb25maWctPnBpbnNbMl0pCi0JCXByaW50aygiLCB1c2IyICVkIHdpcmVzIiwgY29uZmlnLT5waW5zWzJdKTsKLQlwcmludGsoIlxuIik7Ci0KLQkvKiB1c2UgRFBMTCBmb3IgNDggTUh6IGZ1bmN0aW9uIGNsb2NrICovCi0JcHJfZGVidWcoIkFQTEwgJTA0eCBEUExMICUwNHggUkVRICUwNHhcbiIsIG9tYXBfcmVhZHcoVUxQRF9BUExMX0NUUkwpLAotCQkJb21hcF9yZWFkdyhVTFBEX0RQTExfQ1RSTCksIG9tYXBfcmVhZHcoVUxQRF9TT0ZUX1JFUSkpOwotCi0JdyA9IG9tYXBfcmVhZHcoVUxQRF9BUExMX0NUUkwpOwotCXcgJj0gfkFQTExfTkRQTExfU1dJVENIOwotCW9tYXBfd3JpdGV3KHcsIFVMUERfQVBMTF9DVFJMKTsKLQotCXcgPSBvbWFwX3JlYWR3KFVMUERfRFBMTF9DVFJMKTsKLQl3IHw9IERQTExfSU9CIHwgRFBMTF9QTExfRU5BQkxFOwotCW9tYXBfd3JpdGV3KHcsIFVMUERfRFBMTF9DVFJMKTsKLQotCXcgPSBvbWFwX3JlYWR3KFVMUERfU09GVF9SRVEpOwotCXcgfD0gU09GVF9VRENfUkVRIHwgU09GVF9EUExMX1JFUTsKLQlvbWFwX3dyaXRldyh3LCBVTFBEX1NPRlRfUkVRKTsKLQotCXdoaWxlICghKG9tYXBfcmVhZHcoVUxQRF9EUExMX0NUUkwpICYgRFBMTF9MT0NLKSkKLQkJY3B1X3JlbGF4KCk7Ci0KLSNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCi0JaWYgKGNvbmZpZy0+cmVnaXN0ZXJfZGV2KSB7Ci0JCWludCBzdGF0dXM7Ci0KLQkJdWRjX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGNvbmZpZzsKLQkJc3RhdHVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ1ZGNfZGV2aWNlKTsKLQkJaWYgKHN0YXR1cykKLQkJCXByX2RlYnVnKCJjYW4ndCByZWdpc3RlciBVREMgZGV2aWNlLCAlZFxuIiwgc3RhdHVzKTsKLQkJLyogdWRjIGRyaXZlciBnYXRlcyA0OE1IeiBieSBEKyBwdWxsdXAgKi8KLQl9Ci0jZW5kaWYKLQotI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKLQlpZiAoY29uZmlnLT5yZWdpc3Rlcl9ob3N0KSB7Ci0JCWludCBzdGF0dXM7Ci0KLQkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7Ci0JCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb2hjaV9kZXZpY2UpOwotCQlpZiAoc3RhdHVzKQotCQkJcHJfZGVidWcoImNhbid0IHJlZ2lzdGVyIE9IQ0kgZGV2aWNlLCAlZFxuIiwgc3RhdHVzKTsKLQkJLyogaGNkIGV4cGxpY2l0bHkgZ2F0ZXMgNDhNSHogKi8KLQl9Ci0jZW5kaWYKLX0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwXzE1MTBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKSB7fQotI2VuZGlmCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQgX19pbml0IG9tYXBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCi17Ci0JaWYgKGNwdV9pc19vbWFwN3h4KCkgfHwgY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXAyNHh4KCkpCi0JCW9tYXBfb3RnX2luaXQocGRhdGEpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQotCQlvbWFwXzE1MTBfdXNiX2luaXQocGRhdGEpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSICJVU0I6IE5vIGluaXQgZm9yIHlvdXIgY2hpcCB5ZXRcbiIpOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9hdWRpby5oIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2YxZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvYXVkaW8uaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIF9fUExBVF9BVURJT19ICisjZGVmaW5lIF9fUExBVF9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisKK3N0cnVjdCBraXJrd29vZF9hc29jX3BsYXRmb3JtX2RhdGEgeworCXUzMiB0Y2xrOworCXN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW07CisJaW50IGJ1cnN0OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXB4YS9NYWtlZmlsZQppbmRleCBhMTdjYzBjLi40YWFjZGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9NYWtlZmlsZQpAQCAtNCw3ICs0LDYgQEAKIAogb2JqLXkJOj0gZG1hLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfUFhBKQkJKz0gcG11Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX1BYQTN4eCkJCSs9IG1mcC5vCiBvYmotJChDT05GSUdfQVJDSF9NTVApCQkrPSBtZnAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvcG11LmMgYi9hcmNoL2FybS9wbGF0LXB4YS9wbXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY3Y2ViNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9wbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBQTVUgSVJRIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFBYQSB4c2NhbGUgUE1VIGZhbWlsaWVzLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFdpbGwgRGVhY29uLCBBUk0gTHRkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxhc20vcG11Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG11X3Jlc291cmNlID0gewotCS5zdGFydAk9IElSUV9QTVUsCi0JLmVuZAk9IElSUV9QTVUsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwbXVfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhcm0tcG11IiwKLQkuaWQJCT0gQVJNX1BNVV9ERVZJQ0VfQ1BVLAotCS5yZXNvdXJjZQk9ICZwbXVfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhX3BtdV9pbml0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwbXVfZGV2aWNlKTsKLQlyZXR1cm4gMDsKLX0KLWFyY2hfaW5pdGNhbGwocHhhX3BtdV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCmluZGV4IDExZDZhMWIuLmM2YTg1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZwpAQCAtNyw5ICs3LDEwIEBACiAKIGNvbmZpZyBQTEFUX1M1UAogCWJvb2wKLQlkZXBlbmRzIG9uIChBUkNIX1M1UDY0NDAgfHwgQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQQzEwMCB8fCBBUkNIX1M1UFYyMTApCisJZGVwZW5kcyBvbiAoQVJDSF9TNVA2NDQwIHx8IEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UEMxMDAgfHwgQVJDSF9TNVBWMjEwIHx8IEFSQ0hfUzVQVjMxMCkKIAlkZWZhdWx0IHkKLQlzZWxlY3QgQVJNX1ZJQworCXNlbGVjdCBBUk1fVklDIGlmICFBUkNIX1M1UFYzMTAKKwlzZWxlY3QgQVJNX0dJQyBpZiBBUkNIX1M1UFYzMTAKIAlzZWxlY3QgTk9fSU9QT1JUCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IFMzQ19HUElPX1RSQUNLCkBAIC0zMCwzICszMSwxOCBAQAogCWhlbHAKIAkgIFVzZSB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0cyAob3RoZXIgdGhhbiBHUElPIGludGVycnVwdHMuKQogCSAgTm90ZTogRG8gbm90IGNob29zZSB0aGlzIGZvciBTNVA2NDQwLgorCitjb25maWcgUzVQX0RFVl9GSU1DMAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgRklNQyBjb250cm9sbGVyIDAKKworY29uZmlnIFM1UF9ERVZfRklNQzEKKwlib29sCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIEZJTUMgY29udHJvbGxlciAxCisKK2NvbmZpZyBTNVBfREVWX0ZJTUMyCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBGSU1DIGNvbnRyb2xsZXIgMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQppbmRleCAzOWMyNDJiLi5iMmUwMjk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQpAQCAtMTIsOSArMTIsMTUgQEAKIAogIyBDb3JlIGZpbGVzCiAKK29iai15CQkJCSs9IGRldi1wbXUubwogb2JqLXkJCQkJKz0gZGV2LXVhcnQubwogb2JqLXkJCQkJKz0gY3B1Lm8KIG9iai15CQkJCSs9IGNsb2NrLm8KIG9iai15CQkJCSs9IGlycS5vCiBvYmotJChDT05GSUdfUzVQX0VYVF9JTlQpCSs9IGlycS1laW50Lm8KIAorIyBkZXZpY2VzCisKK29iai0kKENPTkZJR19TNVBfREVWX0ZJTUMwKQkrPSBkZXYtZmltYzAubworb2JqLSQoQ09ORklHX1M1UF9ERVZfRklNQzEpCSs9IGRldi1maW1jMS5vCitvYmotJChDT05GSUdfUzVQX0RFVl9GSU1DMikJKz0gZGV2LWZpbWMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMKaW5kZXggNzVjYjhjMy4uYjA3YTA3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxwbGF0L3M1cDY0NDIuaD4KICNpbmNsdWRlIDxwbGF0L3M1cGMxMDAuaD4KICNpbmNsdWRlIDxwbGF0L3M1cHYyMTAuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cHYzMTAuaD4KIAogLyogdGFibGUgb2Ygc3VwcG9ydGVkIENQVXMgKi8KIApAQCAtMjgsNiArMjksNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zNXA2NDQyW10gPSAiUzVQNjQ0MiI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3M1cGMxMDBbXSA9ICJTNVBDMTAwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczVwdjIxMFtdID0gIlM1UFYyMTAvUzVQQzExMCI7CitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3M1cHYzMTBbXSA9ICJTNVBWMzEwIjsKIAogc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CiAJewpAQCAtNjIsNiArNjQsMTQgQEAKIAkJLmluaXRfdWFydHMJPSBzNXB2MjEwX2luaXRfdWFydHMsCiAJCS5pbml0CQk9IHM1cHYyMTBfaW5pdCwKIAkJLm5hbWUJCT0gbmFtZV9zNXB2MjEwLAorCX0sIHsKKwkJLmlkY29kZQkJPSAweDQzMjAwMDAwLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmYwMDAsCisJCS5tYXBfaW8JCT0gczVwdjMxMF9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHM1cHYzMTBfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczVwdjMxMF9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzNXB2MzEwX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczVwdjMxMCwKIAl9LAogfTsKIApAQCAtODEsOCArOTEsOSBAQAogCX0sIHsKIAkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVUFSVCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9VQVJUKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisjaWZkZWYgQ09ORklHX0FSTV9WSUMKIAl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpVkFfVklDMCwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UF9QQV9WSUMwKSwKQEAgLTkzLDYgKzEwNCw3IEBACiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBfUEFfVklDMSksCiAJCS5sZW5ndGgJCT0gU1pfMTZLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisjZW5kaWYKIAl9LCB7CiAJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1RJTUVSLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQX1BBX1RJTUVSKSwKQEAgLTEwMyw2ICsxMTUsMTEgQEAKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UF9QQV9HUElPKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfV0FUQ0hET0csCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0NfUEFfV0RUKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzAuYyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1maW1jMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZjFhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzAuYwpAQCAtMCwwICsxLDM2IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogQmFzZSBTNVAgRklNQzAgcmVzb3VyY2UgYW5kIGRldmljZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX2ZpbWMwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTNVBfUEFfRklNQzAsCisJCS5lbmQJPSBTNVBfUEFfRklNQzAgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfRklNQzAsCisJCS5lbmQJPSBJUlFfRklNQzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfZmltYzAgPSB7CisJLm5hbWUJCT0gInM1cC1maW1jIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwX2ZpbWMwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBzNXBfZmltYzBfcmVzb3VyY2UsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWZpbWMxLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtZmltYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJkNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWZpbWMxLmMKQEAgLTAsMCArMSwzNiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWZpbWMxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIEJhc2UgUzVQIEZJTUMxIHJlc291cmNlIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF9maW1jMV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQX1BBX0ZJTUMxLAorCQkuZW5kCT0gUzVQX1BBX0ZJTUMxICsgU1pfMU0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0ZJTUMxLAorCQkuZW5kCT0gSVJRX0ZJTUMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX2ZpbWMxID0geworCS5uYW1lCQk9ICJzNXAtZmltYyIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF9maW1jMV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gczVwX2ZpbWMxX3Jlc291cmNlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1maW1jMi5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LWZpbWMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkZGVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1maW1jMi5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwL2Rldi1maW1jMi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBCYXNlIFM1UCBGSU1DMiByZXNvdXJjZSBhbmQgZGV2aWNlIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfZmltYzJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UF9QQV9GSU1DMiwKKwkJLmVuZAk9IFM1UF9QQV9GSU1DMiArIFNaXzFNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9GSU1DMiwKKwkJLmVuZAk9IElSUV9GSU1DMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9maW1jMiA9IHsKKwkubmFtZQkJPSAiczVwLWZpbWMiLAorCS5pZAkJPSAyLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzNXBfZmltYzJfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHM1cF9maW1jMl9yZXNvdXJjZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtcG11LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4NTc2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1wbXUuYwpAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXBtdS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uTHRkCisgKiBBdXRob3I6IEpvb255b3VuZyBTaGltIDxqeTA5MjIuc2hpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9wbXUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfcG11X3Jlc291cmNlID0geworCS5zdGFydAk9IElSUV9QTVUsCisJLmVuZAk9IElSUV9QTVUsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfcG11ID0geworCS5uYW1lCQk9ICJhcm0tcG11IiwKKwkuaWQJCT0gQVJNX1BNVV9ERVZJQ0VfQ1BVLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmczVwX3BtdV9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cF9wbXVfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmczVwX2RldmljZV9wbXUpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChzNXBfcG11X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKaW5kZXggMTQ4Mjg1Mi4uNTRlOWZiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCkBAIC0xOCwxMiArMTgsMjcgQEAKICNkZWZpbmUgUzVQX1ZBX1NZU1RJTUVSCQlTM0NfQUREUigweDAxMjAwMDAwKQogI2RlZmluZSBTNVBfVkFfU1JPTUMJCVMzQ19BRERSKDB4MDExMDAwMDApCiAKLSNkZWZpbmUgUzVQX1ZBX1VBUlQwCQkoUzNDX1ZBX1VBUlQgKyAweDApCi0jZGVmaW5lIFM1UF9WQV9VQVJUMQkJKFMzQ19WQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9WQV9VQVJUMgkJKFMzQ19WQV9VQVJUICsgMHg4MDApCi0jZGVmaW5lIFM1UF9WQV9VQVJUMwkJKFMzQ19WQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFM1UF9WQV9DT01CSU5FUl9CQVNFCVMzQ19BRERSKDB4MDA2MDAwMDApCisjZGVmaW5lIFM1UF9WQV9DT01CSU5FUih4KQkoUzVQX1ZBX0NPTUJJTkVSX0JBU0UgKyAoKHgpID4+IDIpICogMHgxMCkKIAorI2RlZmluZSBTNVBfVkFfQ09SRVBFUklfQkFTRQlTM0NfQUREUigweDAwODAwMDAwKQorI2RlZmluZSBTNVBfVkFfQ09SRVBFUkkoeCkJKFM1UF9WQV9DT1JFUEVSSV9CQVNFICsgKHgpKQorI2RlZmluZSBTNVBfVkFfU0NVCQlTNVBfVkFfQ09SRVBFUkkoMHgwKQorI2RlZmluZSBTNVBfVkFfR0lDX0NQVQkJUzVQX1ZBX0NPUkVQRVJJKDB4MTAwKQorI2RlZmluZSBTNVBfVkFfVFdECQlTNVBfVkFfQ09SRVBFUkkoMHg2MDApCisjZGVmaW5lIFM1UF9WQV9HSUNfRElTVAkJUzVQX1ZBX0NPUkVQRVJJKDB4MTAwMCkKKworI2RlZmluZSBTNVBfVkFfTDJDQwkJUzNDX0FERFIoMHgwMDkwMDAwMCkKKworI2RlZmluZSBTNVBfVkFfVUFSVCh4KQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9WQV9VQVJUMAkJUzVQX1ZBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1ZBX1VBUlQxCQlTNVBfVkFfVUFSVCgxKQorI2RlZmluZSBTNVBfVkFfVUFSVDIJCVM1UF9WQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9WQV9VQVJUMwkJUzVQX1ZBX1VBUlQoMykKKworI2lmbmRlZiBTM0NfVUFSVF9PRkZTRVQKICNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCQkoMHg0MDApCisjZW5kaWYKIAogI2RlZmluZSBWQV9WSUMoeCkJCShTM0NfVkFfSVJRICsgKCh4KSAqIDB4MTAwMDApKQogI2RlZmluZSBWQV9WSUMwCQkJVkFfVklDKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvcGxsLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvcGxsLmgKaW5kZXggN2RiMzIyNy4uNGU4ZmUwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3BsbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9wbGwuaApAQCAtNDYsNiArNDYsNDcgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZnZjbzsKIH0KIAorI2RlZmluZSBQTEw0NlhYX0tESVZfTUFTSwkoMHhGRkZGKQorI2RlZmluZSBQTEw0NlhYX01ESVZfTUFTSwkoMHgxRkYpCisjZGVmaW5lIFBMTDQ2WFhfUERJVl9NQVNLCSgweDNGKQorI2RlZmluZSBQTEw0NlhYX1NESVZfTUFTSwkoMHg3KQorI2RlZmluZSBQTEw0NlhYX01ESVZfU0hJRlQJKDE2KQorI2RlZmluZSBQTEw0NlhYX1BESVZfU0hJRlQJKDgpCisjZGVmaW5lIFBMTDQ2WFhfU0RJVl9TSElGVAkoMCkKKworZW51bSBwbGw0Nnh4X3R5cGVfdCB7CisJcGxsXzQ2MDAsCisJcGxsXzQ2NTAsCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczVwX2dldF9wbGw0Nnh4KHVuc2lnbmVkIGxvbmcgYmFzZWNsaywKKwkJCQkJICAgIHUzMiBwbGxfY29uMCwgdTMyIHBsbF9jb24xLAorCQkJCQkgICAgZW51bSBwbGw0Nnh4X3R5cGVfdCBwbGxfdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsKKwl1MzIgbWRpdiwgcGRpdiwgc2Rpdiwga2RpdjsKKwl1NjQgdG1wOworCisJbWRpdiA9IChwbGxfY29uMCA+PiBQTEw0NlhYX01ESVZfU0hJRlQpICYgUExMNDZYWF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxfY29uMCA+PiBQTEw0NlhYX1BESVZfU0hJRlQpICYgUExMNDZYWF9QRElWX01BU0s7CisJc2RpdiA9IChwbGxfY29uMCA+PiBQTEw0NlhYX1NESVZfU0hJRlQpICYgUExMNDZYWF9TRElWX01BU0s7CisJa2RpdiA9IHBsbF9jb24xICYgUExMNDZYWF9LRElWX01BU0s7CisKKwl0bXAgPSBiYXNlY2xrOworCisJaWYgKHBsbF90eXBlID09IHBsbF80NjAwKSB7CisJCXRtcCAqPSAobWRpdiA8PCAxNikgKyBrZGl2OworCQlkb19kaXYodG1wLCAocGRpdiA8PCBzZGl2KSk7CisJCXJlc3VsdCA9IHRtcCA+PiAxNjsKKwl9IGVsc2UgeworCQl0bXAgKj0gKG1kaXYgPDwgMTApICsga2RpdjsKKwkJZG9fZGl2KHRtcCwgKHBkaXYgPDwgc2RpdikpOworCQlyZXN1bHQgPSB0bXAgPj4gMTA7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogI2RlZmluZSBQTEw5MFhYX01ESVZfTUFTSwkoMHhGRikKICNkZWZpbmUgUExMOTBYWF9QRElWX01BU0sJKDB4M0YpCiAjZGVmaW5lIFBMTDkwWFhfU0RJVl9NQVNLCSgweDcpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvcmVzZXQuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9yZXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNWU5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvcmVzZXQuaApAQCAtMCwwICsxLDE2IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvcmVzZXQuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fUExBVF9TNVBfUkVTRVRfSAorI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9SRVNFVF9IIF9fRklMRV9fCisKK2V4dGVybiB2b2lkICgqczVwX3Jlc2V0X2hvb2spKHZvaWQpOworCisjZW5kaWYgLyogX19BU01fUExBVF9TNVBfUkVTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cHYzMTAuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MzEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5Yzk5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MzEwLmgKQEAgLTAsMCArMSwzNCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cHYzMTAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHM1cHYzMTAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzVQVjMxMCByZWxhdGVkIFNvQ3MgKi8KKworZXh0ZXJuIHZvaWQgczVwdjMxMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBzNXB2MzEwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYzMTBfc2V0dXBfY2xvY2tzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0NQVV9TNVBWMzEwCisKK2V4dGVybiAgaW50IHM1cHYzMTBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYzMTBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzNXB2MzEwX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYzMTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgczVwdjMxMF90aW1lcjsKKworI2RlZmluZSBzNXB2MzEwX2luaXRfdWFydHMgczVwdjMxMF9jb21tb25faW5pdF91YXJ0cworCisjZWxzZQorI2RlZmluZSBzNXB2MzEwX2luaXRfY2xvY2tzIE5VTEwKKyNkZWZpbmUgczVwdjMxMF9pbml0X3VhcnRzIE5VTEwKKyNkZWZpbmUgczVwdjMxMF9tYXBfaW8gTlVMTAorI2RlZmluZSBzNXB2MzEwX2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzdGVtLXJlc2V0LmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzdGVtLXJlc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwN2YzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zeXN0ZW0tcmVzZXQuaApAQCAtMCwwICsxLDMxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzdGVtLXJlc2V0LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaAorICoKKyAqIFM1UCAtIFN5c3RlbSBkZWZpbmUgZm9yIGFyY2hfcmVzZXQoKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8cGxhdC93YXRjaGRvZy1yZXNldC5oPgorCit2b2lkICgqczVwX3Jlc2V0X2hvb2spKHZvaWQpOworCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIFNXUkVTRVQgc3VwcG9ydCBpbiBzNXBfcmVzZXRfaG9vaygpICovCisKKwlpZiAoczVwX3Jlc2V0X2hvb2spCisJCXM1cF9yZXNldF9ob29rKCk7CisKKwkvKiBQZXJmb3JtIHJlc2V0IHVzaW5nIFdhdGNoZG9nIHJlc2V0CisJICogaWYgdGhlcmUgaXMgbm8gczVwX3Jlc2V0X2hvb2soKQorCSAqLworCisJYXJjaF93ZHRfcmVzZXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLmMKaW5kZXggMjVlMWViNi4uNTU2MGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLmMKQEAgLTU2LDExICs1NiwxMyBAQAogCiB2b2lkIF9faW5pdCBzNXBfaW5pdF9pcnEodTMyICp2aWMsIHUzMiBudW1fdmljKQogeworI2lmZGVmIENPTkZJR19BUk1fVklDCiAJaW50IGlycTsKIAogCS8qIGluaXRpYWxpemUgdGhlIFZJQ3MgKi8KIAlmb3IgKGlycSA9IDA7IGlycSA8IG51bV92aWM7IGlycSsrKQogCQl2aWNfaW5pdChWQV9WSUMoaXJxKSwgVklDX0JBU0UoaXJxKSwgdmljW2lycV0sIDApOworI2VuZGlmCiAKIAlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjBfVklDLCBJUlFfVElNRVIwKTsKIAlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjFfVklDLCBJUlFfVElNRVIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL0tjb25maWcKaW5kZXggMjc1M2ZiMy4uNDUyOWRkNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL0tjb25maWcKQEAgLTE2MCw2ICsxNjAsMTEgQEAKIAloZWxwCiAJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAyCiAKK2NvbmZpZyBTM0NfREVWX0hTTU1DMworCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAzCisKIGNvbmZpZyBTM0NfREVWX0hXTU9OCiAJYm9vbAogCWhlbHAKQEAgLTIxNiw2ICsyMjEsMTEgQEAKIAloZWxwCiAJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBBREMgY29udHJvbGxlcgogCitjb25maWcgU0FNU1VOR19ERVZfSURFCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBJREUKKwogY29uZmlnIFMzQzY0WFhfREVWX1NQSQogCWJvb2wKIAloZWxwCkBAIC0yMjcsNiArMjM3LDExIEBACiAJaGVscAogCSAgICBDb21tb24gaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciB0b3VjaHNjcmVlbiBkZXZpY2UKIAorY29uZmlnIFNBTVNVTkdfREVWX0tFWVBBRAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3Iga2V5cGFkCisKICMgRE1BCiAKIGNvbmZpZyBTM0NfRE1BCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKaW5kZXggYjFkODJjYy4uNGQ4ZmY5MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNyBAQAogIyBPYmplY3RzIHdlIGFsd2F5cyBidWlsZCBpbmRlcGVuZGVudCBvZiBTb0MgY2hvaWNlCiAKIG9iai15CQkJCSs9IGluaXQubwotb2JqLXkJCQkJKz0gdGltZS5vCitvYmotJChDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQpICAgKz0gdGltZS5vCiBvYmoteQkJCQkrPSBjbG9jay5vCiBvYmoteQkJCQkrPSBwd20tY2xvY2subwogb2JqLXkJCQkJKz0gZ3Bpby5vCkBAIC0zMCw5ICszMCwxMiBAQAogCiAjIGRldmljZXMKIAorb2JqLXkJCQkJKz0gcGxhdGZvcm1kYXRhLm8KKwogb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMpCSs9IGRldi1oc21tYy5vCiBvYmotJChDT05GSUdfUzNDX0RFVl9IU01NQzEpCSs9IGRldi1oc21tYzEubwogb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMyKQkrPSBkZXYtaHNtbWMyLm8KK29iai0kKENPTkZJR19TM0NfREVWX0hTTU1DMykJKz0gZGV2LWhzbW1jMy5vCiBvYmotJChDT05GSUdfUzNDX0RFVl9IV01PTikJKz0gZGV2LWh3bW9uLm8KIG9iai15CQkJCSs9IGRldi1pMmMwLm8KIG9iai0kKENPTkZJR19TM0NfREVWX0kyQzEpCSs9IGRldi1pMmMxLm8KQEAgLTQ3LDcgKzUwLDkgQEAKIG9iai0kKENPTkZJR19TM0NfREVWX1JUQykJKz0gZGV2LXJ0Yy5vCiAKIG9iai0kKENPTkZJR19TQU1TVU5HX0RFVl9BREMpCSs9IGRldi1hZGMubworb2JqLSQoQ09ORklHX1NBTVNVTkdfREVWX0lERSkJKz0gZGV2LWlkZS5vCiBvYmotJChDT05GSUdfU0FNU1VOR19ERVZfVFMpCSs9IGRldi10cy5vCitvYmotJChDT05GSUdfU0FNU1VOR19ERVZfS0VZUEFEKQkrPSBkZXYta2V5cGFkLm8KIAogIyBETUEgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jLmMKaW5kZXggNGMwNWIzOS4uYjBmOTNmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1oc21tYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMuYwpAQCAtNjAsNiArNjAsMTEgQEAKIAlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpzZXQgPSAmczNjX2hzbW1jMF9kZWZfcGxhdGRhdGE7CiAKIAlzZXQtPm1heF93aWR0aCA9IHBkLT5tYXhfd2lkdGg7CisJc2V0LT5jZF90eXBlID0gcGQtPmNkX3R5cGU7CisJc2V0LT5leHRfY2RfaW5pdCA9IHBkLT5leHRfY2RfaW5pdDsKKwlzZXQtPmV4dF9jZF9jbGVhbnVwID0gcGQtPmV4dF9jZF9jbGVhbnVwOworCXNldC0+ZXh0X2NkX2dwaW8gPSBwZC0+ZXh0X2NkX2dwaW87CisJc2V0LT5leHRfY2RfZ3Bpb19pbnZlcnQgPSBwZC0+ZXh0X2NkX2dwaW9faW52ZXJ0OwogCiAJaWYgKHBkLT5jZmdfZ3BpbykKIAkJc2V0LT5jZmdfZ3BpbyA9IHBkLT5jZmdfZ3BpbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMxLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMS5jCmluZGV4IGU0OWJjNGMuLjE1MDRmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1oc21tYzEuYwpAQCAtNjAsNiArNjAsMTEgQEAKIAlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpzZXQgPSAmczNjX2hzbW1jMV9kZWZfcGxhdGRhdGE7CiAKIAlzZXQtPm1heF93aWR0aCA9IHBkLT5tYXhfd2lkdGg7CisJc2V0LT5jZF90eXBlID0gcGQtPmNkX3R5cGU7CisJc2V0LT5leHRfY2RfaW5pdCA9IHBkLT5leHRfY2RfaW5pdDsKKwlzZXQtPmV4dF9jZF9jbGVhbnVwID0gcGQtPmV4dF9jZF9jbGVhbnVwOworCXNldC0+ZXh0X2NkX2dwaW8gPSBwZC0+ZXh0X2NkX2dwaW87CisJc2V0LT5leHRfY2RfZ3Bpb19pbnZlcnQgPSBwZC0+ZXh0X2NkX2dwaW9faW52ZXJ0OwogCiAJaWYgKHBkLT5jZmdfZ3BpbykKIAkJc2V0LT5jZmdfZ3BpbyA9IHBkLT5jZmdfZ3BpbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMyLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMi5jCmluZGV4IDgyNDU4MGIuLmIyOGVmMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1oc21tYzIuYwpAQCAtNjEsNiArNjEsMTEgQEAKIAlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpzZXQgPSAmczNjX2hzbW1jMl9kZWZfcGxhdGRhdGE7CiAKIAlzZXQtPm1heF93aWR0aCA9IHBkLT5tYXhfd2lkdGg7CisJc2V0LT5jZF90eXBlID0gcGQtPmNkX3R5cGU7CisJc2V0LT5leHRfY2RfaW5pdCA9IHBkLT5leHRfY2RfaW5pdDsKKwlzZXQtPmV4dF9jZF9jbGVhbnVwID0gcGQtPmV4dF9jZF9jbGVhbnVwOworCXNldC0+ZXh0X2NkX2dwaW8gPSBwZC0+ZXh0X2NkX2dwaW87CisJc2V0LT5leHRfY2RfZ3Bpb19pbnZlcnQgPSBwZC0+ZXh0X2NkX2dwaW9faW52ZXJ0OwogCiAJaWYgKHBkLT5jZmdfZ3BpbykKIAkJc2V0LT5jZmdfZ3BpbyA9IHBkLT5jZmdfZ3BpbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMzLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YWFmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMy5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMS5jCisgKgorICogU2Ftc3VuZyBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgaHNtbWMgZGV2aWNlIDMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKworI2RlZmluZSBTM0NfU1pfSFNNTUMJKDB4MTAwMCkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfaHNtbWMzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTM0NfUEFfSFNNTUMzLAorCQkuZW5kCT0gUzNDX1BBX0hTTU1DMyArIFMzQ19TWl9IU01NQyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfTU1DMywKKwkJLmVuZAk9IElSUV9NTUMzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IHMzY19kZXZpY2VfaHNtbWMzX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jM19kZWZfcGxhdGRhdGEgPSB7CisJLm1heF93aWR0aAk9IDQsCisJLmhvc3RfY2Fwcwk9IChNTUNfQ0FQXzRfQklUX0RBVEEgfAorCQkJICAgTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQpLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jMyA9IHsKKwkubmFtZQkJPSAiczNjLXNkaGNpIiwKKwkuaWQJCT0gMywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjX2hzbW1jM19yZXNvdXJjZSksCisJLnJlc291cmNlCT0gczNjX2hzbW1jM19yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrCQk9ICZzM2NfZGV2aWNlX2hzbW1jM19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmVUwsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZzM2NfaHNtbWMzX2RlZl9wbGF0ZGF0YSwKKwl9LAorfTsKKwordm9pZCBzM2Nfc2RoY2kzX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCkKK3sKKwlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpzZXQgPSAmczNjX2hzbW1jM19kZWZfcGxhdGRhdGE7CisKKwlzZXQtPm1heF93aWR0aCA9IHBkLT5tYXhfd2lkdGg7CisJc2V0LT5jZF90eXBlID0gcGQtPmNkX3R5cGU7CisJc2V0LT5leHRfY2RfaW5pdCA9IHBkLT5leHRfY2RfaW5pdDsKKwlzZXQtPmV4dF9jZF9jbGVhbnVwID0gcGQtPmV4dF9jZF9jbGVhbnVwOworCXNldC0+ZXh0X2NkX2dwaW8gPSBwZC0+ZXh0X2NkX2dwaW87CisJc2V0LT5leHRfY2RfZ3Bpb19pbnZlcnQgPSBwZC0+ZXh0X2NkX2dwaW9faW52ZXJ0OworCisJaWYgKHBkLT5jZmdfZ3BpbykKKwkJc2V0LT5jZmdfZ3BpbyA9IHBkLT5jZmdfZ3BpbzsKKwlpZiAocGQtPmNmZ19jYXJkKQorCQlzZXQtPmNmZ19jYXJkID0gcGQtPmNmZ19jYXJkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1pZGUuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaWRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5Nzk4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaWRlLmMKQEAgLTAsMCArMSw0NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1pZGUuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBTYW1zdW5nIENGLUFUQSBkZXZpY2UgZGVmaW5pdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2F0YS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19jZmNvbl9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gU0FNU1VOR19QQV9DRkNPTiwKKwkJLmVuZAk9IFNBTVNVTkdfUEFfQ0ZDT04gKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0NGQ09OLAorCQkuZW5kCT0gSVJRX0NGQ09OLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2NmY29uID0geworCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2NfY2Zjb25fcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHMzY19jZmNvbl9yZXNvdXJjZSwKK307CisKK3ZvaWQgczNjX2lkZV9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgKnBkYXRhKQoreworCXMzY19zZXRfcGxhdGRhdGEocGRhdGEsIHNpemVvZihzdHJ1Y3QgczNjX2lkZV9wbGF0ZGF0YSksCisJCQkgJnMzY19kZXZpY2VfY2Zjb24pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1rZXlwYWQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYta2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3YzJkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYta2V5cGFkLmMKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYta2V5cGFkLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKKyAqIEF1dGhvcjogSm9vbnlvdW5nIFNoaW0gPGp5MDkyMi5zaGltQHNhbXN1bmcuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2Ftc3VuZ19rZXlwYWRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTQU1TVU5HX1BBX0tFWVBBRCwKKwkJLmVuZAk9IFNBTVNVTkdfUEFfS0VZUEFEICsgMHgyMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfS0VZUEFELAorCQkuZW5kCT0gSVJRX0tFWVBBRCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2Ftc3VuZ19kZXZpY2Vfa2V5cGFkID0geworCS5uYW1lCQk9ICJzYW1zdW5nLWtleXBhZCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzYW1zdW5nX2tleXBhZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNhbXN1bmdfa2V5cGFkX3Jlc291cmNlcywKK307CisKK3ZvaWQgX19pbml0IHNhbXN1bmdfa2V5cGFkX3NldF9wbGF0ZGF0YShzdHJ1Y3Qgc2Ftc3VuZ19rZXlwYWRfcGxhdGRhdGEgKnBkKQoreworCXN0cnVjdCBzYW1zdW5nX2tleXBhZF9wbGF0ZGF0YSAqbnBkOworCisJbnBkID0gczNjX3NldF9wbGF0ZGF0YShwZCwgc2l6ZW9mKHN0cnVjdCBzYW1zdW5nX2tleXBhZF9wbGF0ZGF0YSksCisJCQkmc2Ftc3VuZ19kZXZpY2Vfa2V5cGFkKTsKKworCWlmICghbnBkLT5jZmdfZ3BpbykKKwkJbnBkLT5jZmdfZ3BpbyA9IHNhbXN1bmdfa2V5cGFkX2NmZ19ncGlvOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi13ZHQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtd2R0LmMKaW5kZXggNWVmY2E4Ny4uMDE5YjViOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi13ZHQuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXdkdC5jCkBAIC0yMSw3ICsyMSw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY193ZHRfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFMzQ19QQV9XRFQsCi0JCS5lbmQJPSBTM0NfUEFfV0RUICsgU1pfMU0gLSAxLAorCQkuZW5kCT0gUzNDX1BBX1dEVCArIFNaXzFLLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvbGliLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZ3Bpb2xpYi5jCmluZGV4IDhhOGJhOGIuLmMzNTQwODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvbGliLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW9saWIuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hZGMtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hZGMtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODE1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2FkYy1jb3JlLmgKQEAgLTAsMCArMSwyOCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hZGMtY29yZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTYW1zdW5nIEFEQyBDb250cm9sbGVyIGNvcmUgZnVuY3Rpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fUExBVF9BRENfQ09SRV9ICisjZGVmaW5lIF9fQVNNX1BMQVRfQURDX0NPUkVfSCBfX0ZJTEVfXworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgZm9yIHVzZSB3aXRoIHRoZSBjb3JlIHN1cHBvcnQgY29kZSwgc3VjaCBhcworICogdGhlIGNwdSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBjb2RlCisgKi8KKworLyogcmUtZGVmaW5lIGRldmljZSBuYW1lIGRlcGVuZGluZyBvbiBzdXBwb3J0LiAqLworc3RhdGljIGlubGluZSB2b2lkIHMzY19hZGNfc2V0bmFtZShjaGFyICpuYW1lKQoreworI2lmZGVmIENPTkZJR19TQU1TVU5HX0RFVl9BREMKKwlzM2NfZGV2aWNlX2FkYy5uYW1lID0gbmFtZTsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogX19BU01fUExBVF9BRENfQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2F0YS1jb3JlLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2F0YS1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhNGVjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXRhLWNvcmUuaApAQCAtMCwwICsxLDI4IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2F0YS1jb3JlLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU2Ftc3VuZyBDRi1BVEEgQ29udHJvbGxlciBjb3JlIGZ1bmN0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfQVRBX0NPUkVfSAorI2RlZmluZSBfX0FTTV9QTEFUX0FUQV9DT1JFX0ggX19GSUxFX18KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGZvciB1c2Ugd2l0aCB0aGUgY29yZSBzdXBwb3J0IGNvZGUsIHN1Y2ggYXMKKyAqIHRoZSBjcHUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gY29kZQorKi8KKworLyogcmUtZGVmaW5lIGRldmljZSBuYW1lIGRlcGVuZGluZyBvbiBzdXBwb3J0LiAqLworc3RhdGljIGlubGluZSB2b2lkIHMzY19jZmNvbl9zZXRuYW1lKGNoYXIgKm5hbWUpCit7CisjaWZkZWYgQ09ORklHX1NBTVNVTkdfREVWX0lERQorCXMzY19kZXZpY2VfY2Zjb24ubmFtZSA9IG5hbWU7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIF9fQVNNX1BMQVRfQVRBX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hdGEuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzODU1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXRhLmgKQEAgLTAsMCArMSwzNiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hdGEuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20KKyAqCisgKiBTYW1zdW5nIENGLUFUQSBwbGF0Zm9ybV9kZXZpY2UgaW5mbworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfQVRBX0gKKyNkZWZpbmUgX19BU01fUExBVF9BVEFfSCBfX0ZJTEVfXworCisvKioKKyAqIHN0cnVjdCBzM2NfaWRlX3BsYXRkYXRhIC0gUzNDIElERSBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKyAqIEBzZXR1cF9ncGlvOiBTZXR1cCB0aGUgZXh0ZXJuYWwgR1BJTyBwaW5zIHRvIHRoZSByaWdodCBzdGF0ZSBmb3IgZGF0YQorICogdHJhbnNmZXIgaW4gdHJ1ZS1pZGUgbW9kZS4KKyAqLworc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgeworCXZvaWQgKCpzZXR1cF9ncGlvKSh2b2lkKTsKK307CisKKy8qCisgKiBzM2NfaWRlX3NldF9wbGF0ZGF0YSgpIC0gU2V0dXAgdGhlIHBsYXRmb3JtIHNwZWNpZmMgZGF0YSBmb3IgSURFIGRyaXZlci4KKyAqIEBwZGF0YTogUGxhdGZvcm0gZGF0YSBmb3IgSURFIGRyaXZlci4KKyAqLworZXh0ZXJuIHZvaWQgczNjX2lkZV9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgKnBkYXRhKTsKKworLyogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIElERSBjb25maWd1cmF0aW9uICovCitleHRlcm4gdm9pZCBzM2M2NHh4X2lkZV9zZXR1cF9ncGlvKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9pZGVfc2V0dXBfZ3Bpbyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYyMTBfaWRlX3NldHVwX2dwaW8odm9pZCk7CisKKyNlbmRpZiAvKl9fQVNNX1BMQVRfQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKaW5kZXggZTYxNDRlNC4uODVmNmYyMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTU0LDYgKzU0LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYzE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9jZmNvbjsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkxOwpAQCAtMTAwLDYgKzEwMiwxMiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwYzEwMF9kZXZpY2VfaWlzMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cGMxMDBfZGV2aWNlX2lpczI7CiAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNhbXN1bmdfZGV2aWNlX2tleXBhZDsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwX2RldmljZV9maW1jMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cF9kZXZpY2VfZmltYzE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXBfZGV2aWNlX2ZpbWMyOworCiAvKiBzM2MyNDQwIHNwZWNpZmljIGRldmljZXMgKi8KIAogI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MApAQCAtMTA4LDMgKzExNiwxNSBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hYzk3OwogCiAjZW5kaWYKKworLyoqCisgKiBzM2Nfc2V0X3BsYXRkYXRhKCkgLSBoZWxwZXIgZm9yIHNldHRpbmcgcGxhdGZvcm0gZGF0YQorICogQHBkOiBUaGUgZGVmYXVsdCBwbGF0Zm9ybSBkYXRhIGZvciB0aGlzIGRldmljZS4KKyAqIEBwZHNpemU6IFRoZSBzaXplIG9mIHRoZSBwbGF0Zm9ybSBkYXRhLgorICogQHBkZXY6IFBvaW50ZXIgdG8gdGhlIGRldmljZSB0byBmaWxsIGluLgorICoKKyAqIFRoaXMgaGVscGVyIHJlcGxhY2VzIGEgbnVtYmVyIG9mIGNhbGxzIHRoYXQgY29weSBhbmQgdGhlbiBzZXQgdGhlCisgKiBwbGF0Zm9ybSBkYXRhIG9mIHRoZSBkZXZpY2UuCisgKi8KK2V4dGVybiB2b2lkICpzM2Nfc2V0X3BsYXRkYXRhKHZvaWQgKnBkLCBzaXplX3QgcGRzaXplLAorCQkJICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZiLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZmItY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTM4M2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZiLWNvcmUuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi1jb3JlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJUGF3ZWwgT3NjaWFrIDxwLm9zY2lha0BzYW1zdW5nLmNvbT4KKyAqCisgKiBTYW1zdW5nIGZyYW1lYnVmZmVyIGRyaXZlciBjb3JlIGZ1bmN0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fUExBVF9GQl9DT1JFX0gKKyNkZWZpbmUgX19BU01fUExBVF9GQl9DT1JFX0ggX19GSUxFX18KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBmb3IgdXNlIHdpdGggdGhlIGNvcmUgc3VwcG9ydCBjb2RlLCBzdWNoIGFzCisgKiB0aGUgQ1BVLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKi8KKworLyogUmUtZGVmaW5lIGRldmljZSBuYW1lIGRlcGVuZGluZyBvbiBzdXBwb3J0LiAqLworc3RhdGljIGlubGluZSB2b2lkIHMzY19mYl9zZXRuYW1lKGNoYXIgKm5hbWUpCit7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfRkIKKwlzM2NfZGV2aWNlX2ZiLm5hbWUgPSBuYW1lOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX0ZCX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi5oCmluZGV4IDI3ZDNiNDkuLmNiM2NhM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZmIuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZiLmgKQEAgLTQyLDYgKzQyLDcgQEAKICAqIEBzZXR1cF9ncGlvOiBTZXR1cCB0aGUgZXh0ZXJuYWwgR1BJTyBwaW5zIHRvIHRoZSByaWdodCBzdGF0ZSB0byB0cmFuc2ZlcgogICoJCXRoZSBkYXRhIGZyb20gdGhlIGRpc3BsYXkgc3lzdGVtIHRvIHRoZSBjb25uZWN0ZWQgZGlzcGxheQogICoJCWRldmljZS4KKyAqIEBkZWZhdWx0X3dpbjogZGVmYXVsdCB3aW5kb3cgbGF5ZXIgbnVtYmVyIHRvIGJlIHVzZWQgZm9yIFVJIGxheWVyLgogICogQHZpZGNvbjA6IFRoZSBiYXNlIHZpZGNvbjAgdmFsdWVzIHRvIGNvbnRyb2wgdGhlIHBhbmVsIGRhdGEgZm9ybWF0LgogICogQHZpZGNvbjE6IFRoZSBiYXNlIHZpZGNvbjEgdmFsdWVzIHRvIGNvbnRyb2wgdGhlIHBhbmVsIGRhdGEgb3V0cHV0LgogICogQHdpbjogVGhlIHNldHVwIGRhdGEgZm9yIGVhY2ggaGFyZHdhcmUgd2luZG93LCBvciBOVUxMIGZvciB1bnVzZWQuCkBAIC01OCw2ICs1OSw4IEBACiAKIAlzdHJ1Y3QgczNjX2ZiX3BkX3dpbgkqd2luW1MzQ19GQl9NQVhfV0lOXTsKIAorCXUzMgkJCSBkZWZhdWx0X3dpbjsKKwogCXUzMgkJCSB2aWRjb24wOwogCXUzMgkJCSB2aWRjb24xOwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZmltYy1jb3JlLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZpbWMtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTNiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZpbWMtY29yZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZpbWMtY29yZS5oCisgKgorICogQ29weXJpZ2h0IDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCVN5bHdlc3RlciBOYXdyb2NraSA8cy5uYXdyb2NraUBzYW1zdW5nLmNvbT4KKyAqCisgKiBTYW1zdW5nIGNhbWVyYSBpbnRlcmZhY2UgZHJpdmVyIGNvcmUgZnVuY3Rpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfRklNQ19DT1JFX0gKKyNkZWZpbmUgX19BU01fUExBVF9GSU1DX0NPUkVfSCBfX0ZJTEVfXworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGZvciB1c2Ugd2l0aCB0aGUgY29yZSBzdXBwb3J0IGNvZGUsIHN1Y2ggYXMKKyAqIHRoZSBDUFUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLworCisvKiBSZS1kZWZpbmUgZGV2aWNlIG5hbWUgdG8gZGlmZmVyZW50aWF0ZSB0aGUgc3Vic3lzdGVtIGluIHZhcmlvdXMgU29Dcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfZmltY19zZXRuYW1lKGludCBpZCwgY2hhciAqbmFtZSkKK3sKKwlzd2l0Y2ggKGlkKSB7CisjaWZkZWYgQ09ORklHX1M1UF9ERVZfRklNQzAKKwljYXNlIDA6CisJCXM1cF9kZXZpY2VfZmltYzAubmFtZSA9IG5hbWU7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1M1UF9ERVZfRklNQzEKKwljYXNlIDE6CisJCXM1cF9kZXZpY2VfZmltYzEubmFtZSA9IG5hbWU7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1M1UF9ERVZfRklNQzIKKwljYXNlIDI6CisJCXM1cF9kZXZpY2VfZmltYzIubmFtZSA9IG5hbWU7CisJCWJyZWFrOworI2VuZGlmCisJfQorfQorCisjZW5kaWYgLyogX19BU01fUExBVF9GSU1DX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9rZXlwYWQtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9rZXlwYWQtY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTNlMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2tleXBhZC1jb3JlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQva2V5cGFkLWNvcmUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBKb29ueW91bmcgU2hpbSA8ankwOTIyLnNoaW1Ac2Ftc3VuZy5jb20+CisgKgorICogU2Ftc3VuZyBrZXlwYWQgY29udHJvbGxlciBjb3JlIGZ1bmN0aW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9LRVlQQURfQ09SRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfS0VZUEFEX0NPUkVfSAorCisvKiBUaGVzZSBmdW5jdGlvbiBhcmUgb25seSBmb3IgdXNlIHdpdGggdGhlIGNvcmUgc3VwcG9ydCBjb2RlLCBzdWNoIGFzCisgKiB0aGUgY3B1IHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGNvZGUKKyAqLworCisvKiByZS1kZWZpbmUgZGV2aWNlIG5hbWUgZGVwZW5kaW5nIG9uIHN1cHBvcnQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2Ftc3VuZ19rZXlwYWRfc2V0bmFtZShjaGFyICpuYW1lKQoreworI2lmZGVmIENPTkZJR19TQU1TVU5HX0RFVl9LRVlQQUQKKwlzYW1zdW5nX2RldmljZV9rZXlwYWQubmFtZSA9IG5hbWU7CisjZW5kaWYKK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfS0VZUEFEX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9rZXlwYWQuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQva2V5cGFkLmgKaW5kZXggM2E3MGMxMi4uYjU5YTY0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9rZXlwYWQuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2tleXBhZC5oCkBAIC00MCw0ICs0MCwxNyBAQAogCXZvaWQgKCpjZmdfZ3BpbykodW5zaWduZWQgaW50IHJvd3MsIHVuc2lnbmVkIGludCBjb2xzKTsKIH07CiAKKy8qKgorICogc2Ftc3VuZ19rZXlwYWRfc2V0X3BsYXRkYXRhIC0gU2V0IHBsYXRmb3JtIGRhdGEgZm9yIFNhbXN1bmcgS2V5cGFkIGRldmljZS4KKyAqIEBwZDogUGxhdGZvcm0gZGF0YSB0byByZWdpc3RlciB0byBkZXZpY2UuCisgKgorICogUmVnaXN0ZXIgdGhlIGdpdmVuIHBsYXRmb3JtIGRhdGEgZm9yIHVzZSB3aXRoIFNhbXN1bmcgS2V5cGFkIGRldmljZS4KKyAqIFRoZSBjYWxsIHdpbGwgY29weSB0aGUgcGxhdGZvcm0gZGF0YSwgc28gdGhlIGJvYXJkIGRlZmluaXRpb25zIGNhbgorICogbWFrZSB0aGUgc3RydWN0dXJlIGl0c2VsZiBfX2luaXRkYXRhLgorICovCitleHRlcm4gdm9pZCBzYW1zdW5nX2tleXBhZF9zZXRfcGxhdGRhdGEoc3RydWN0IHNhbXN1bmdfa2V5cGFkX3BsYXRkYXRhICpwZCk7CisKKy8qIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlIHRvIGNvbmZpZ3VyZSBncGlvLiAqLworZXh0ZXJuIHZvaWQgc2Ftc3VuZ19rZXlwYWRfY2ZnX2dwaW8odW5zaWduZWQgaW50IHJvd3MsIHVuc2lnbmVkIGludCBjb2xzKTsKKwogI2VuZGlmIC8qIF9fUExBVF9TQU1TVU5HX0tFWVBBRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYXRhLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkZjkyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1hdGEuaApAQCAtMCwwICsxLDU2IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYXRhLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tCisgKgorICogU2Ftc3VuZyBDRi1BVEEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX1JFR1NfQVRBX0gKKyNkZWZpbmUgX19BU01fUExBVF9SRUdTX0FUQV9IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX0NGQVRBX1JFRyh4KQkoeCkKKworI2RlZmluZSBTM0NfQ0ZBVEFfTVVYCQlTM0NfQ0ZBVEFfUkVHKDB4MCkKKworI2RlZmluZSBTM0NfQVRBX0NUUkwJCVMzQ19DRkFUQV9SRUcoMHgwKQorI2RlZmluZSBTM0NfQVRBX1NUQVRVUwkJUzNDX0NGQVRBX1JFRygweDQpCisjZGVmaW5lIFMzQ19BVEFfQ01ECQlTM0NfQ0ZBVEFfUkVHKDB4OCkKKyNkZWZpbmUgUzNDX0FUQV9TV1JTVAkJUzNDX0NGQVRBX1JFRygweGMpCisjZGVmaW5lIFMzQ19BVEFfSVJRCQlTM0NfQ0ZBVEFfUkVHKDB4MTApCisjZGVmaW5lIFMzQ19BVEFfSVJRX01TSwkJUzNDX0NGQVRBX1JFRygweDE0KQorI2RlZmluZSBTM0NfQVRBX0NGRwkJUzNDX0NGQVRBX1JFRygweDE4KQorCisjZGVmaW5lIFMzQ19BVEFfTURNQV9USU1FCVMzQ19DRkFUQV9SRUcoMHgyOCkKKyNkZWZpbmUgUzNDX0FUQV9QSU9fVElNRQlTM0NfQ0ZBVEFfUkVHKDB4MmMpCisjZGVmaW5lIFMzQ19BVEFfVURNQV9USU1FCVMzQ19DRkFUQV9SRUcoMHgzMCkKKyNkZWZpbmUgUzNDX0FUQV9YRlJfTlVNCQlTM0NfQ0ZBVEFfUkVHKDB4MzQpCisjZGVmaW5lIFMzQ19BVEFfWEZSX0NOVAkJUzNDX0NGQVRBX1JFRygweDM4KQorI2RlZmluZSBTM0NfQVRBX1RCVUZfU1RBUlQJUzNDX0NGQVRBX1JFRygweDNjKQorI2RlZmluZSBTM0NfQVRBX1RCVUZfU0laRQlTM0NfQ0ZBVEFfUkVHKDB4NDApCisjZGVmaW5lIFMzQ19BVEFfU0JVRl9TVEFSVAlTM0NfQ0ZBVEFfUkVHKDB4NDQpCisjZGVmaW5lIFMzQ19BVEFfU0JVRl9TSVpFCVMzQ19DRkFUQV9SRUcoMHg0OCkKKyNkZWZpbmUgUzNDX0FUQV9DQURSX1RCVUYJUzNDX0NGQVRBX1JFRygweDRjKQorI2RlZmluZSBTM0NfQVRBX0NBRFJfU0JVRglTM0NfQ0ZBVEFfUkVHKDB4NTApCisjZGVmaW5lIFMzQ19BVEFfUElPX0RUUgkJUzNDX0NGQVRBX1JFRygweDU0KQorI2RlZmluZSBTM0NfQVRBX1BJT19GRUQJCVMzQ19DRkFUQV9SRUcoMHg1OCkKKyNkZWZpbmUgUzNDX0FUQV9QSU9fU0NSCQlTM0NfQ0ZBVEFfUkVHKDB4NWMpCisjZGVmaW5lIFMzQ19BVEFfUElPX0xMUgkJUzNDX0NGQVRBX1JFRygweDYwKQorI2RlZmluZSBTM0NfQVRBX1BJT19MTVIJCVMzQ19DRkFUQV9SRUcoMHg2NCkKKyNkZWZpbmUgUzNDX0FUQV9QSU9fTEhSCQlTM0NfQ0ZBVEFfUkVHKDB4NjgpCisjZGVmaW5lIFMzQ19BVEFfUElPX0RWUgkJUzNDX0NGQVRBX1JFRygweDZjKQorI2RlZmluZSBTM0NfQVRBX1BJT19DU0QJCVMzQ19DRkFUQV9SRUcoMHg3MCkKKyNkZWZpbmUgUzNDX0FUQV9QSU9fREFECQlTM0NfQ0ZBVEFfUkVHKDB4NzQpCisjZGVmaW5lIFMzQ19BVEFfUElPX1JFQURZCVMzQ19DRkFUQV9SRUcoMHg3OCkKKyNkZWZpbmUgUzNDX0FUQV9QSU9fUkRBVEEJUzNDX0NGQVRBX1JFRygweDdjKQorCisjZGVmaW5lIFMzQ19DRkFUQV9NVVhfVFJVRUlERQkweDAxCisKKyNkZWZpbmUgUzNDX0FUQV9DRkdfU1dBUAkweDQwCisjZGVmaW5lIFMzQ19BVEFfQ0ZHX0lPUkRZRU4JMHgwMgorCisjZW5kaWYgLyogX19BU01fUExBVF9SRUdTX0FUQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtZmItdjQuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi12NC5oCmluZGV4IDBmNDM1OTkuLjRjMzY0N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi12NC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi12NC5oCkBAIC00MCwxNiArNDAsMTAgQEAKIAogLyogT1NEMSBhbmQgT1NENCBkbyBub3QgaGF2ZSByZWdpc3RlciBEICovCiAKLSNkZWZpbmUgVklET1NEX0EoX3dpbikJCQkJKDB4NDAgKyAoKF93aW4pICogMTYpKQotI2RlZmluZSBWSURPU0RfQihfd2luKQkJCQkoMHg0NCArICgoX3dpbikgKiAxNikpCi0jZGVmaW5lIFZJRE9TRF9DKF93aW4pCQkJCSgweDQ4ICsgKChfd2luKSAqIDE2KSkKLSNkZWZpbmUgVklET1NEX0QoX3dpbikJCQkJKDB4NEMgKyAoKF93aW4pICogMTYpKQotCisjZGVmaW5lIFZJRE9TRF9CQVNFCQkJCSgweDQwKQogCiAjZGVmaW5lIFZJRElOVENPTjAJCQkJKDB4MTMwKQogCi0jZGVmaW5lIFd4S0VZQ09OeShfd2luLCBfY29uKQkJCSgoMHgxNDAgKyAoKF93aW4pICogOCkpICsgKChfY29uKSAqIDQpKQotCiAvKiBXSU5DT054ICovCiAKICNkZWZpbmUgV0lOQ09OeF9DU0NXSURUSF9NQVNLCQkJKDB4MyA8PCAyNikKQEAgLTE0Myw3NiArMTM3LDYgQEAKICNkZWZpbmUgV1BBTENPTl9XMlBBTF8xNkJQUF9BNTU1CQkoMSA8PCA2KQogCiAKLS8qIHN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjb2RlIGZvciBwYWxldHRlIHNpemVzLCBhbmQgb3RoZXIKLSAqIGluZm9ybWF0aW9uIHRoYXQgY2hhbmdlcyBkZXBlbmRpbmcgb24gd2hpY2ggYXJjaGl0ZWN0dXJlIGlzIGJlaW5nCi0gKiBjb21waWxlZC4KLSovCi0KLS8qIHJldHVybiB0cnVlIGlmIHdpbmRvdyBfd2luIGhhcyBPU0QgcmVnaXN0ZXIgRCAqLwotI2RlZmluZSBzM2NfZmJfaGFzX29zZF9kKF93aW4pICgoX3dpbikgIT0gNCAmJiAoX3dpbikgIT0gMCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2ZiX3dpbl9wYWxfc2l6ZSh1bnNpZ25lZCBpbnQgd2luKQotewotCWlmICh3aW4gPCAyKQotCQlyZXR1cm4gMjU2OwotCWlmICh3aW4gPCA0KQotCQlyZXR1cm4gMTY7Ci0JaWYgKHdpbiA9PSA0KQotCQlyZXR1cm4gNDsKLQotCUJVRygpOwkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KLX0KLQotc3RhdGljIGlubGluZSBpbnQgczNjX2ZiX3ZhbGlkYXRlX3dpbl9icHAodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKLXsKLQkvKiBhbGwgd2luZG93cyBjYW4gZG8gMS8yIGJwcCAqLwotCi0JaWYgKChicHAgPT0gMjUgfHwgYnBwID09IDE5KSAmJiB3aW4gPT0gMCkKLQkJcmV0dXJuIDA7CS8qIHdpbiAwIGRvZXMgbm90IGhhdmUgMTkgb3IgMjVicHAgbW9kZXMgKi8KLQotCWlmIChicHAgPT0gNCAmJiB3aW4gPT0gNCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYnBwID09IDggJiYgKHdpbiA+PSAzKSkKLQkJcmV0dXJuIDA7CS8qIHdpbiAzLzQgY2Fubm90IGRvIDhicHAgaW4gYW55IG1vZGUgKi8KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzM2NfZmJfcGFsX2lzMTYodW5zaWduZWQgaW50IHdpbmRvdykKLXsKLQlyZXR1cm4gd2luZG93ID4gMTsKLX0KLQotc3RydWN0IHMzY19mYl9wYWxldHRlIHsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJcjsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJZzsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJYjsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJYTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfZmJfaW5pdF9wYWxldHRlKHVuc2lnbmVkIGludCB3aW5kb3csCi0JCQkJICAgICAgIHN0cnVjdCBzM2NfZmJfcGFsZXR0ZSAqcGFsZXR0ZSkKLXsKLQlpZiAod2luZG93IDwgMikgewotCQkvKiBXaW5kb3dzIDAvMSBhcmUgOC84Lzggb3IgQS84LzgvOCAqLwotCQlwYWxldHRlLT5yLm9mZnNldCA9IDE2OwotCQlwYWxldHRlLT5yLmxlbmd0aCA9IDg7Ci0JCXBhbGV0dGUtPmcub2Zmc2V0ID0gODsKLQkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA4OwotCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7Ci0JCXBhbGV0dGUtPmIubGVuZ3RoID0gODsKLQl9IGVsc2UgewotCQkvKiBjdXJyZW50bHkgd2UgYXNzdW1lIFJHQiA1LzYvNSAqLwotCQlwYWxldHRlLT5yLm9mZnNldCA9IDExOwotCQlwYWxldHRlLT5yLmxlbmd0aCA9IDU7Ci0JCXBhbGV0dGUtPmcub2Zmc2V0ID0gNTsKLQkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA2OwotCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7Ci0JCXBhbGV0dGUtPmIubGVuZ3RoID0gNTsKLQl9Ci19Ci0KIC8qIE5vdGVzIG9uIHBlci13aW5kb3cgYnBwIHNldHRpbmdzCiAgKgogICogVmFsdWUJV2luMAkgV2luMQkgIFdpbjIJICAgV2luMwkgICAgV2luIDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmgKaW5kZXggMGVmODA2ZS4uOGYzOWFhNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmgKQEAgLTExMiw2ICsxMTIsMTMgQEAKICNkZWZpbmUgVklEQ09OMl9PUkdZQ2JDcgkJCSgxIDw8IDgpCiAjZGVmaW5lIFZJRENPTjJfWVVWT1JEQ3JDYgkJCSgxIDw8IDcpCiAKKy8qIFBSVENPTiAoUzNDNjQxMCwgUzVQQzEwMCkKKyAqIE1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRoZSBTM0M2NDEwIGRvY3VtZW50YXRpb24sCisgKiBidXQgdGVzdHMgcHJvdmUgaXQncyB0aGVyZSBhbG1vc3QgZm9yIHN1cmU7IHNob3VsZG4ndCBodXJ0IGluIGFueSBjYXNlLgorICovCisjZGVmaW5lIFBSVENPTgkJCQkJKDB4MGMpCisjZGVmaW5lIFBSVENPTl9QUk9URUNUCQkJCSgxIDw8IDExKQorCiAvKiBWSURUQ09OMCAqLwogCiAjZGVmaW5lIFZJRFRDT04wX1ZCUERFX01BU0sJCQkoMHhmZiA8PCAyNCkKQEAgLTE3Myw2ICsxODAsNyBAQAogI2RlZmluZSBXSU5DT054X0JJVFNXUAkJCQkoMSA8PCAxOCkKICNkZWZpbmUgV0lOQ09OeF9CWVRTV1AJCQkJKDEgPDwgMTcpCiAjZGVmaW5lIFdJTkNPTnhfSEFXU1dQCQkJCSgxIDw8IDE2KQorI2RlZmluZSBXSU5DT054X1dTV1AJCQkJKDEgPDwgMTUpCiAjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fTUFTSwkJCSgweDMgPDwgOSkKICNkZWZpbmUgV0lOQ09OeF9CVVJTVExFTl9TSElGVAkJCSg5KQogI2RlZmluZSBXSU5DT054X0JVUlNUTEVOXzE2V09SRAkJCSgweDAgPDwgOSkKQEAgLTIxMiw2ICsyMjAsMTMgQEAKICNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI1QlBQX0ExODg4CQkoMHhkIDw8IDIpCiAjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yOEJQUF9BNDg4OAkJKDB4ZCA8PCAyKQogCisvKiBTNVBWMjEwICovCisjZGVmaW5lIFNIQURPV0NPTgkJCQkoMHgzNCkKKyNkZWZpbmUgU0hBRE9XQ09OX1dJTnhfUFJPVEVDVChfd2luKQkJKDEgPDwgKDEwICsgKF93aW4pKSkKKy8qIERNQSBjaGFubmVscyAoYWxsIHdpbmRvd3MpICovCisjZGVmaW5lIFNIQURPV0NPTl9DSHhfRU5BQkxFKF93aW4pCQkoMSA8PCAoX3dpbikpCisvKiBMb2NhbCBpbnB1dCBjaGFubmVscyAod2luZG93cyAwLTIpICovCisjZGVmaW5lIFNIQURPV0NPTl9DSHhfTE9DQUxfRU5BQkxFKF93aW4pCSgxIDw8ICg1ICsgKF93aW4pKSkKIAogI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1hfTUFTSwkJCSgweDdmZiA8PCAxMSkKICNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YX1NISUZUCQkoMTEpCkBAIC0yOTEsMTEgKzMwNiwxMiBAQAogI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9BQ1RJVkUJCSgweDIgPDwgMTUpCiAjZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX0ZST05UUE9SQ0gJCSgweDMgPDwgMTUpCiAKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDEJCQkoMSA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTk9ORQkJKDB4MCA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfQkFDS1BPUkNICQkoMHgxIDw8IDE0KQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMV9WU1lOQwkJKDB4MiA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfRlJPTlRQT1JDSAkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDEJCQkoMSA8PCAxMykKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTUFTSwkJKDB4MyA8PCAxMykKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTk9ORQkJKDB4MCA8PCAxMykKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfQkFDS1BPUkNICQkoMHgxIDw8IDEzKQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMV9WU1lOQwkJKDB4MiA8PCAxMykKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfRlJPTlRQT1JDSAkJKDB4MyA8PCAxMykKIAogI2RlZmluZSBWSURJTlRDT04wX0lOVF9GUkFNRQkJCSgxIDw8IDEyKQogI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX01BU0sJCSgweDdmIDw8IDUpCkBAIC0zMjEsNiArMzM3LDEwIEBACiAjZGVmaW5lIFZJRElOVENPTjFfSU5UX0ZJRk8JCQkoMSA8PCAwKQogCiAvKiBXaW5kb3cgY29sb3VyLWtleSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBXS0VZQ09OCQkJCQkoMHgxNDApCS8qIDY0MTAsVjIxMCAqLworCisjZGVmaW5lIFdLRVlDT04wCQkJCSgweDAwKQorI2RlZmluZSBXS0VZQ09OMQkJCQkoMHgwNCkKIAogI2RlZmluZSBXeEtFWUNPTjBfS0VZQkxfRU4JCQkoMSA8PCAyNikKICNkZWZpbmUgV3hLRVlDT04wX0tFWUVOX0YJCQkoMSA8PCAyNSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaAppbmRleCA2NWMxOTBkLi4zMGI3Y2MxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtcnRjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXJ0Yy5oCkBAIC0xNCw2ICsxNCw5IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19SVENfSCBfX0ZJTEVfXwogCiAjZGVmaW5lIFMzQzI0MTBfUlRDUkVHKHgpICh4KQorI2RlZmluZSBTM0MyNDEwX0lOVFAJCVMzQzI0MTBfUlRDUkVHKDB4MzApCisjZGVmaW5lIFMzQzI0MTBfSU5UUF9BTE0JKDEgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMF9JTlRQX1RJQwkoMSA8PCAwKQogCiAjZGVmaW5lIFMzQzI0MTBfUlRDQ09OCSAgICAgIFMzQzI0MTBfUlRDUkVHKDB4NDApCiAjZGVmaW5lIFMzQzI0MTBfUlRDQ09OX1JUQ0VOICAoMTw8MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaAppbmRleCBhNmViYTg0Li43ODg4MzdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCkBAIC0yNTksNiArMjU5LDggQEAKIAl1bnNpZ25lZCBzaG9ydAkgICBmbGFnczsKIAl1cGZfdAkJICAgdWFydF9mbGFnczsJIC8qIGRlZmF1bHQgdWFydCBmbGFncyAqLwogCisJdW5zaWduZWQgaW50CSAgIGhhc19mcmFjdmFsOworCiAJdW5zaWduZWQgbG9uZwkgICB1Y29uOwkgLyogdmFsdWUgb2YgdWNvbiBmb3IgcG9ydCAqLwogCXVuc2lnbmVkIGxvbmcJICAgdWxjb247CSAvKiB2YWx1ZSBvZiB1bGNvbiBmb3IgcG9ydCAqLwogCXVuc2lnbmVkIGxvbmcJICAgdWZjb247CSAvKiB2YWx1ZSBvZiB1ZmNvbiBmb3IgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy5oCmluZGV4IDhkMThkOWQuLmRjOTBmNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy11c2ItaHNvdGcuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtdXNiLWhzb3RnLmgKQEAgLTIyNiw2ICsyMjYsNyBAQAogCiAjZGVmaW5lIFMzQ19ESUVQTVNLCQkJCVMzQ19IU09UR19SRUcoMHg4MTApCiAKKyNkZWZpbmUgUzNDX0RJRVBNU0tfVHhGSUZPRW1wdHkJCQkoMSA8PCA3KQogI2RlZmluZSBTM0NfRElFUE1TS19JTkVQTmFrRWZmTXNrCQkoMSA8PCA2KQogI2RlZmluZSBTM0NfRElFUE1TS19JTlRrbkVQTWlzTXNrCQkoMSA8PCA1KQogI2RlZmluZSBTM0NfRElFUE1TS19JTlRrblRYRkVtcE1zawkJKDEgPDwgNCkKQEAgLTM3MSw2ICszNzIsNyBAQAogCiAjZGVmaW5lIFMzQ19ESUVQRE1BKF9hKQkJCQlTM0NfSFNPVEdfUkVHKDB4OTE0ICsgKChfYSkgKiAweDIwKSkKICNkZWZpbmUgUzNDX0RPRVBETUEoX2EpCQkJCVMzQ19IU09UR19SRUcoMHhCMTQgKyAoKF9hKSAqIDB4MjApKQorI2RlZmluZSBTM0NfRFRYRlNUUyhfYSkJCQkJUzNDX0hTT1RHX1JFRygweDkxOCArICgoX2EpICogMHgyMCkpCiAKICNkZWZpbmUgUzNDX0VQRklGTyhfYSkJCQkJUzNDX0hTT1RHX1JFRygweDEwMDAgKyAoKF9hKSAqIDB4MTAwMCkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaAppbmRleCAwMTY2NzRmLi4zMDg0NGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zZGhjaS5oCkBAIC0yMCwxMCArMjAsMzEgQEAKIHN0cnVjdCBtbWNfY2FyZDsKIHN0cnVjdCBtbWNfaW9zOwogCitlbnVtIGNkX3R5cGVzIHsKKwlTM0NfU0RIQ0lfQ0RfSU5URVJOQUwsCS8qIHVzZSBtbWMgaW50ZXJuYWwgQ0QgbGluZSAqLworCVMzQ19TREhDSV9DRF9FWFRFUk5BTCwJLyogdXNlIGV4dGVybmFsIGNhbGxiYWNrICovCisJUzNDX1NESENJX0NEX0dQSU8sCS8qIHVzZSBleHRlcm5hbCBncGlvIHBpbiBmb3IgQ0QgbGluZSAqLworCVMzQ19TREhDSV9DRF9OT05FLAkvKiBubyBDRCBsaW5lLCB1c2UgcG9sbGluZyB0byBkZXRlY3QgY2FyZCAqLworCVMzQ19TREhDSV9DRF9QRVJNQU5FTlQsCS8qIG5vIENEIGxpbmUsIGNhcmQgcGVybWFuZW50bHkgd2lyZWQgdG8gaG9zdCAqLworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhKCkgLSBQbGF0Zm9ybSBkZXZpY2UgZGF0YSBmb3IgU2Ftc3VuZyBTREhDSQogICogQG1heF93aWR0aDogVGhlIG1heGltdW0gbnVtYmVyIG9mIGRhdGEgYml0cyBzdXBwb3J0ZWQuCiAgKiBAaG9zdF9jYXBzOiBTdGFuZGFyZCBNTUMgaG9zdCBjYXBhYmlsaXRpZXMgYml0IGZpZWxkLgorICogQGNkX3R5cGU6IFR5cGUgb2YgQ2FyZCBEZXRlY3Rpb24gbWV0aG9kIChzZWUgY2RfdHlwZXMgZW51bSBhYm92ZSkKKyAqIEBleHRfY2RfaW5pdDogSW5pdGlhbGl6ZSBleHRlcm5hbCBjYXJkIGRldGVjdCBzdWJzeXN0ZW0uIENhbGxlZCBvbgorICoJCSBzZGhjaS1zM2MgZHJpdmVyIHByb2JlIHdoZW4gY2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfRVhURVJOQUwuCisgKgkJIG5vdGlmeV9mdW5jIGFyZ3VtZW50IGlzIGEgY2FsbGJhY2sgdG8gdGhlIHNkaGNpLXMzYyBkcml2ZXIKKyAqCQkgdGhhdCB0cmlnZ2VycyB0aGUgY2FyZCBkZXRlY3Rpb24gZXZlbnQuIENhbGxiYWNrIGFyZ3VtZW50czoKKyAqCQkgZGV2IGlzIHBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2aWNlIG9mIHRoZSBob3N0IGNvbnRyb2xsZXIsCisgKgkJIHN0YXRlIGlzIG5ldyBzdGF0ZSBvZiB0aGUgY2FyZCAoMCAtIHJlbW92ZWQsIDEgLSBpbnNlcnRlZCkuCisgKiBAZXh0X2NkX2NsZWFudXA6IENsZWFudXAgZXh0ZXJuYWwgY2FyZCBkZXRlY3Qgc3Vic3lzdGVtLiBDYWxsZWQgb24KKyAqCQkgc2RoY2ktczNjIGRyaXZlciByZW1vdmUgd2hlbiBjZF90eXBlID09IFMzQ19TREhDSV9DRF9FWFRFUk5BTC4KKyAqCQkgbm90aWZ5X2Z1bmMgYXJndW1lbnQgaXMgdGhlIHNhbWUgY2FsbGJhY2sgYXMgZm9yIGV4dF9jZF9pbml0LgorICogQGV4dF9jZF9ncGlvOiBncGlvIHBpbiB1c2VkIGZvciBleHRlcm5hbCBDRCBsaW5lLCB2YWxpZCBvbmx5IGlmCisgKgkJIGNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0dQSU8KKyAqIEBleHRfY2RfZ3Bpb19pbnZlcnQ6IGludmVydCB2YWx1ZXMgZm9yIGV4dGVybmFsIENEIGdwaW8gbGluZQogICogQGNmZ19ncGlvOiBDb25maWd1cmUgdGhlIEdQSU8gZm9yIGEgc3BlY2lmaWMgY2FyZCBiaXQtd2lkdGgKICAqIEBjZmdfY2FyZDogQ29uZmlndXJlIHRoZSBpbnRlcmZhY2UgZm9yIGEgc3BlY2lmaWMgY2FyZCBhbmQgc3BlZWQuIFRoaXMKICAqICAgICAgICAgICAgaXMgbmVjZXNzYXJ5IHRoZSBjb250cm9sbGVycyBhbmQvb3IgR1BJTyBibG9ja3MgcmVxdWlyZSB0aGUKQEAgLTM3LDkgKzU4LDE3IEBACiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHsKIAl1bnNpZ25lZCBpbnQJbWF4X3dpZHRoOwogCXVuc2lnbmVkIGludAlob3N0X2NhcHM7CisJZW51bSBjZF90eXBlcwljZF90eXBlOwogCiAJY2hhcgkJKipjbG9ja3M7CS8qIHNldCBvZiBjbG9jayBzb3VyY2VzICovCiAKKwlpbnQJCWV4dF9jZF9ncGlvOworCWJvb2wJCWV4dF9jZF9ncGlvX2ludmVydDsKKwlpbnQJKCpleHRfY2RfaW5pdCkodm9pZCAoKm5vdGlmeV9mdW5jKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosCisJCQkJCQkgICBpbnQgc3RhdGUpKTsKKwlpbnQJKCpleHRfY2RfY2xlYW51cCkodm9pZCAoKm5vdGlmeV9mdW5jKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosCisJCQkJCQkgICAgICBpbnQgc3RhdGUpKTsKKwogCXZvaWQJKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpOwogCXZvaWQJKCpjZmdfY2FyZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJICAgIHZvaWQgX19pb21lbSAqcmVnYmFzZSwKQEAgLTU4LDYgKzg3LDcgQEAKIGV4dGVybiB2b2lkIHMzY19zZGhjaTBfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkKTsKIGV4dGVybiB2b2lkIHMzY19zZGhjaTFfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkKTsKIGV4dGVybiB2b2lkIHMzY19zZGhjaTJfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkKTsKK2V4dGVybiB2b2lkIHMzY19zZGhjaTNfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkKTsKIAogLyogRGVmYXVsdCBwbGF0Zm9ybSBkYXRhLCBleHBvcnRlZCBzbyB0aGF0IHBlci1jcHUgaW5pdGlhbGlzYXRpb24gY2FuCiAgKiBzZXQgdGhlIGNvcnJlY3Qgb25lIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgY3B1IHR5cGUgc2VsZWN0ZWQuCkBAIC02Niw2ICs5Niw3IEBACiBleHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YTsKIGV4dGVybiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzFfZGVmX3BsYXRkYXRhOwogZXh0ZXJuIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jMl9kZWZfcGxhdGRhdGE7CitleHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMzX2RlZl9wbGF0ZGF0YTsKIAogLyogSGVscGVyIGZ1bmN0aW9uIGF2YWlsYWJsaXR5ICovCiAKQEAgLTc4LDEzICsxMDksMTMgQEAKIGV4dGVybiB2b2lkIHM1cHYyMTBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwogZXh0ZXJuIHZvaWQgczVwdjIxMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CiBleHRlcm4gdm9pZCBzNXB2MjEwX3NldHVwX3NkaGNpMl9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKK2V4dGVybiB2b2lkIHM1cHYyMTBfc2V0dXBfc2RoY2kzX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwogCi0vKiBTM0M2NDAwIFNESENJIHNldHVwICovCisvKiBTM0M2NFhYIFNESENJIHNldHVwICovCiAKICNpZmRlZiBDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSQogZXh0ZXJuIGNoYXIgKnMzYzY0eHhfaHNtbWNfY2xrc3Jjc1s0XTsKIAotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DCiBleHRlcm4gdm9pZCBzM2M2NDAwX3NldHVwX3NkaGNpX2NmZ19jYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKIAkJCQkJIHZvaWQgX19pb21lbSAqciwKIAkJCQkJIHN0cnVjdCBtbWNfaW9zICppb3MsCkBAIC05Miw3NiArMTIzLDYyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NHh4X2hzbW1jX2Nsa3NyY3M7CiAJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MDBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7CisjZW5kaWYKIH0KIAotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQotI2VuZGlmICAvKiBDT05GSUdfUzNDX0RFVl9IU01NQyAqLwotCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMxCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKQogeworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0eHhfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kxX2NmZ19ncGlvOwogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMSAqLwogCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMyCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMih2b2lkKQogeworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgogCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0eHhfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kyX2NmZ19ncGlvOwogCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMiAqLwotCi0vKiBTM0M2NDEwIFNESENJIHNldHVwICovCiAKIGV4dGVybiB2b2lkIHMzYzY0MTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCQkgdm9pZCBfX2lvbWVtICpyLAogCQkJCQkgc3RydWN0IG1tY19pb3MgKmlvcywKIAkJCQkJIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAKLSNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQwogc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQwogCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0eHhfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOwogCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DICovCiAKLSNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzEKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMxCiAJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczNjNjR4eF9oc21tY19jbGtzcmNzOwogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW87CiAJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzM2M2NDEwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworI2VuZGlmCiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMxICovCiAKLSNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzIKIHN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMyCiAJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczNjNjR4eF9oc21tY19jbGtzcmNzOwogCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW87CiAJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzM2M2NDEwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworI2VuZGlmCiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMyICovCiAKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KQEAgLTE4Myw0OCArMjAwLDQyIEBACiAJCQkJCSAgIHN0cnVjdCBtbWNfaW9zICppb3MsCiAJCQkJCSAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAKLSNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQwogc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTAodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQwogCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cGMxMDBfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOwogCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwYzEwMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7CisjZW5kaWYKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQyAqLwogCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMxCiBzdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKQogeworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cGMxMDBfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cGMxMDBfc2V0dXBfc2RoY2kxX2NmZ19ncGlvOwogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwYzEwMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7CisjZW5kaWYKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQzEgKi8KIAotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgogc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTIodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzIKIAlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXBjMTAwX2hzbW1jX2Nsa3NyY3M7CiAJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXBjMTAwX3NldHVwX3NkaGNpMl9jZmdfZ3BpbzsKIAlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOworI2VuZGlmCiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMxICovCi0KIAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMih2b2lkKSB7IH0KKwogI2VuZGlmIC8qIENPTkZJR19TNVBDMTAwX1NFVFVQX1NESENJICovCiAKKy8qIFM1UFYyMTAgU0RIQ0kgc2V0dXAgKi8KIAotLyogUzVQQzExMCBTREhDSSBzZXR1cCAqLwogI2lmZGVmIENPTkZJR19TNVBWMjEwX1NFVFVQX1NESENJCiBleHRlcm4gY2hhciAqczVwdjIxMF9oc21tY19jbGtzcmNzWzRdOwogCkBAIC0yMzMsNDYgKzI0NCw0OCBAQAogCQkJCQkgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAogCQkJCQkgICBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwogCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMKIHN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MjEwX2RlZmF1bHRfc2RoY2kwKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXB2MjEwX2hzbW1jX2Nsa3NyY3M7CiAJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXB2MjEwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKIAlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cHYyMTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7CisjZW5kaWYKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQyAqLwogCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMxCiBzdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKQogeworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cHYyMTBfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cHYyMTBfc2V0dXBfc2RoY2kxX2NmZ19ncGlvOwogCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwdjIxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MjEwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMSAqLwogCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMyCiBzdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMih2b2lkKQogeworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgogCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cHYyMTBfaHNtbWNfY2xrc3JjczsKIAlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cHYyMTBfc2V0dXBfc2RoY2kyX2NmZ19ncGlvOwogCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwdjIxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MjEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMyh2b2lkKQoreworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMworCXMzY19oc21tYzNfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cHYyMTBfaHNtbWNfY2xrc3JjczsKKwlzM2NfaHNtbWMzX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cHYyMTBfc2V0dXBfc2RoY2kzX2NmZ19ncGlvOworCXMzY19oc21tYzNfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwdjIxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKKyNlbmRpZgorfQogCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHM1cHYyMTBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzNXB2MjEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TNVBDMTAwX1NFVFVQX1NESENJICovCitzdGF0aWMgaW5saW5lIHZvaWQgczVwdjIxMF9kZWZhdWx0X3NkaGNpMyh2b2lkKSB7IH0KIAotCi0KKyNlbmRpZiAvKiBDT05GSUdfUzVQVjIxMF9TRVRVUF9TREhDSSAqLwogCiAjZW5kaWYgLyogX19QTEFUX1MzQ19TREhDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcGxhdGZvcm1kYXRhLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcGxhdGZvcm1kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmMmUxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbGF0Zm9ybWRhdGEuYwpAQCAtMCwwICsxLDM3IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcGxhdGZvcm1kYXRhLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBCZW4gRG9va3MgPGJlbi1saW51eCA8YXQ+IGZsdWZmLm9yZz4KKyAqCisgKiBIZWxwZXIgZm9yIHBsYXRmb3JtIGRhdGEgc2V0dGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKwordm9pZCBfX2luaXQgKnMzY19zZXRfcGxhdGRhdGEodm9pZCAqcGQsIHNpemVfdCBwZHNpemUsCisJCQkgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXZvaWQgKm5wZDsKKworCWlmICghcGQpIHsKKwkJLyogdG9vIGVhcmx5IHRvIHVzZSBkZXZfbmFtZSgpLCBtYXkgbm90IGJlIHJlZ2lzdGVyZWQgKi8KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIiwgcGRldi0+bmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5wZCA9IGttZW1kdXAocGQsIHBkc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucGQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGNsb25lIHBsYXRmb3JtIGRhdGFcbiIsIHBkZXYtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKKwlyZXR1cm4gbnBkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IGYyYjMxOTMuLmY1MTU3MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTQ1LDkgKzQ1LDYgQEAKIGNvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGQzY2YzNWEuLmMzYTU4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTExLDcgKzExLDcgQEAKICAqIGNhY2hlIGJlZm9yZSB0aGUgdHJhbnNmZXIgaXMgZG9uZSwgY2F1c2luZyBvbGQgZGF0YSB0byBiZSBzZWVuIGJ5CiAgKiB0aGUgQ1BVLgogICovCi0jZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTglMMV9DQUNIRV9CWVRFUworI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTglMMV9DQUNIRV9CWVRFUwogCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIHN0cnVjdCBjYWNoZV9pbmZvIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAwMzk5MzU5Li5hYWY1MTk5IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0zMzYsMTQgKzMzNiw0IEBACiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKIAotc3RhdGljIGlubGluZSBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCXJldHVybiBib290X2NwdV9kYXRhLmRjYWNoZS5saW5lc3o7Ci19Ci0KICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCBlNmFjMGI2Li5iN2RkMzI0IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NHUlM0ODUgICAgICAweDU0MkUKICNkZWZpbmUgVElPQ1NSUzQ4NSAgICAgIDB4NTQyRgpAQCAtNzIsOCArNzMsNiBAQAogCiAjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCiAjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCiAKIC8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCkBAIC04NCw2ICs4Myw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggMDYzOTRlNS4uYTU5MDJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMyw2ICszLDQgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CiAKLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4ZmZmZmZmZmYpCi0KICNlbmRpZiAvKiBfX0FTTV9BVlIzMl9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKaW5kZXggZGIyZGFhYi4uMzY2YWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdGVybWJpdHMuaApAQCAtMTc1LDYgKzE3NSw3IEBACiAjZGVmaW5lIEZMVVNITwkwMDEwMDAwCiAjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCiAjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisjZGVmaW5lIEVYVFBST0MJMDIwMDAwMAogCiAvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLwogI2RlZmluZQlUQ09PRkYJCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYyBiL2FyY2gvYXZyMzIvbW0vZmF1bHQuYwppbmRleCBiNjFkODZkLi5mNzA0MGExIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCkBAIC0xMzIsNyArMTMyLDYgQEAKIAkgKiBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIgdGhhbiBlbmRsZXNzbHkgcmVkbyB0aGUKIAkgKiBmYXVsdC4KIAkgKi8KLXN1cnZpdmU6CiAJZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgd3JpdGVhY2Nlc3MgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKQEAgLTIxMSwxNSArMjEwLDEwIEBACiAJICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7Ci0JCXlpZWxkKCk7Ci0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJZ290byBzdXJ2aXZlOwotCX0KLQlwcmludGsoIlZNOiBLaWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHVzZXJfbW9kZShyZWdzKSkKLQkJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKLQlnb3RvIG5vX2NvbnRleHQ7CisJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSkKKwkJZ290byBub19jb250ZXh0OworCXJldHVybjsKIAogZG9fc2lnYnVzOgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggZjY2Mjk0Yi4uNWEzMTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtMjUsNiArMjUsOCBAQAogCWRlZl9ib29sIHkKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSworCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCisJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVApAQCAtMzIsNiArMzQsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQIGlmIFJBTUtFUk5FTAogCXNlbGVjdCBIQVZFX0tFUk5FTF9CWklQMiBpZiBSQU1LRVJORUwKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQSBpZiBSQU1LRVJORUwKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpPIGlmIFJBTUtFUk5FTAogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAKQEAgLTMyOCwxMSArMzMxLDYgQEAKIAlkZXBlbmRzIG9uIChCRjUzMSB8fCBCRjUzMiB8fCBCRjUzMyB8fCBCRjUzNCB8fCBCRjUzNiB8fCBCRjUzNykKIAlkZWZhdWx0IHkKIAotY29uZmlnIE1FTV9HRU5FUklDX0JPQVJECi0JYm9vbAotCWRlcGVuZHMgb24gR0VORVJJQ19CT0FSRAotCWRlZmF1bHQgeQotCiBjb25maWcgTUVNX01UNDhMQzY0TTRBMkZCXzdFCiAJYm9vbAogCWRlcGVuZHMgb24gKEJGSU41MzNfU1RBTVApCkBAIC02MTQsOSArNjEyLDYgQEAKIAogc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJYm9vbCAiR2VuZXJpYyBjbG9jayBldmVudHMiCiAJZGVmYXVsdCB5CkBAIC04NTMsNiArODQ4LDE4IEBACiAJICBJZiBlbmFibGVkLCB0aGUgQ1BMQiBTd2l0Y2ggVGFibGVzIGFyZSBsaW5rZWQKIAkgIGludG8gTDEgZGF0YSBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKK2NvbmZpZyBDQUNIRV9GTFVTSF9MMQorCWJvb2wgIkxvY2F0ZSBjYWNoZSBmbHVzaCBmdW5jcyBpbiBMMSBJbnN0IE1lbW9yeSIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiBlbmFibGVkLCB0aGUgQmxhY2tmaW4gY2FjaGUgZmx1c2hpbmcgZnVuY3Rpb25zIGFyZSBsaW5rZWQKKwkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LgorCisJICBOb3RlIHRoYXQgdGhpcyBtaWdodCBiZSByZXF1aXJlZCB0byBhZGRyZXNzIGFub21hbGllcywgYnV0CisJICB0aGVzZSBmdW5jdGlvbnMgYXJlIHByZXR0eSBzbWFsbCwgc28gaXQgc2hvdWxkbid0IGJlIHRvbyBiYWQuCisJICBJZiB5b3UgYXJlIHVzaW5nIGEgcHJvY2Vzc29yIGFmZmVjdGVkIGJ5IGFuIGFub21hbHksIHRoZSBidWlsZAorCSAgc3lzdGVtIHdpbGwgZG91YmxlIGNoZWNrIGZvciB5b3UgYW5kIHByZXZlbnQgaXQuCisKIGNvbmZpZyBBUFBfU1RBQ0tfTDEKIAlib29sICJTdXBwb3J0IGxvY2F0aW5nIGFwcGxpY2F0aW9uIHN0YWNrIGluIEwxIFNjcmF0Y2ggTWVtb3J5IgogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggOWQ1ZmZhZi4uM2U2NWIwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9hcmNoL2JsYWNrZmluL01ha2VmaWxlCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogSU5TVEFMTF9QQVRIID89IC90ZnRwYm9vdAogYm9vdCA6PSBhcmNoLyQoQVJDSCkvYm9vdAotQk9PVF9UQVJHRVRTID0gdm1JbWFnZSB2bUltYWdlLmJpbiB2bUltYWdlLmJ6MiB2bUltYWdlLmd6IHZtSW1hZ2UubHptYSB2bUltYWdlLnhpcAorQk9PVF9UQVJHRVRTID0gdm1JbWFnZSB2bUltYWdlLmJpbiB2bUltYWdlLmJ6MiB2bUltYWdlLmd6IHZtSW1hZ2UubHptYSB2bUltYWdlLmx6byB2bUltYWdlLnhpcAogUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpIGluc3RhbGwKIEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL3ZtSW1hZ2UKIApAQCAtMTU4LDYgKzE1OCw3IEBACiAgIGVjaG8gICcgIHZtSW1hZ2UuYnoyICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGFyY2gvJChBUkNIKS9ib290L3ZtSW1hZ2UuYnoyKScKICAgZWNobyAgJyogdm1JbWFnZS5neiAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYXJjaC8kKEFSQ0gpL2Jvb3Qvdm1JbWFnZS5neiknCiAgIGVjaG8gICcgIHZtSW1hZ2UubHptYSAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGFyY2gvJChBUkNIKS9ib290L3ZtSW1hZ2UubHptYSknCisgIGVjaG8gICcgIHZtSW1hZ2UubHpvICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGFyY2gvJChBUkNIKS9ib290L3ZtSW1hZ2UubHpvKScKICAgZWNobyAgJyAgdm1JbWFnZS54aXAgICAgIC0gWElQIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGFyY2gvJChBUkNIKS9ib290L3ZtSW1hZ2UueGlwKScKICAgZWNobyAgJyAgaW5zdGFsbCAgICAgICAgIC0gSW5zdGFsbCBrZXJuZWwgdXNpbmcnCiAgIGVjaG8gICcgICAgICAgICAgICAgICAgICAgICAoeW91cikgfi9iaW4vJChJTlNUQUxMS0VSTkVMKSBvcicKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vYm9vdC9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4vYm9vdC9NYWtlZmlsZQppbmRleCBkMWIzZDYwLi4xM2QyZGJkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9ibGFja2Zpbi9ib290L01ha2VmaWxlCkBAIC04LDggKzgsOCBAQAogCiBNS0lNQUdFIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9ta3Vib290LnNoCiAKLXRhcmdldHMgOj0gdm1JbWFnZSB2bUltYWdlLmJpbiB2bUltYWdlLmJ6MiB2bUltYWdlLmd6IHZtSW1hZ2UubHptYSB2bUltYWdlLnhpcAotZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSB2bWxpbnV4LmJpbi54aXAKK3RhcmdldHMgOj0gdm1JbWFnZSB2bUltYWdlLmJpbiB2bUltYWdlLmJ6MiB2bUltYWdlLmd6IHZtSW1hZ2UubHptYSB2bUltYWdlLmx6byB2bUltYWdlLnhpcAorZXh0cmEteSArPSB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiB2bWxpbnV4LmJpbi5iejIgdm1saW51eC5iaW4ubHptYSB2bWxpbnV4LmJpbi5sem8gdm1saW51eC5iaW4ueGlwCiAKIFVJTUFHRV9PUFRTLXkgOj0KIFVJTUFHRV9PUFRTLSQoQ09ORklHX1JBTUtFUk5FTCkgKz0gLWEgJChDT05GSUdfQk9PVF9MT0FEKQpAQCAtMzMsNiArMzMsOSBAQAogJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCiAKKyQob2JqKS92bWxpbnV4LmJpbi5sem86ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKKwogIyBUaGUgbWtpbWFnZSB0b29sIHdhbnRzIDY0Ynl0ZXMgcHJlcGVuZGVkIHRvIHRoZSBpbWFnZQogcXVpZXRfY21kX21rX2Jpbl94aXAgPSBCSU4gICAgICRACiAgICAgICBjbWRfbWtfYmluX3hpcCA9ICggcHJpbnRmICclNjRzJyB8IHRyICcgJyAnXDM3NycgOyBjYXQgJDwgKSA+ICRACkBAIC01MSw2ICs1NCw5IEBACiAkKG9iaikvdm1JbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdm1JbWFnZS5sem86ICQob2JqKS92bWxpbnV4LmJpbi5sem8KKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UsbHpvKQorCiAkKG9iaikvdm1JbWFnZS54aXA6ICQob2JqKS92bWxpbnV4LmJpbi54aXAKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2Usbm9uZSkKIApAQCAtNTgsNiArNjQsNyBAQAogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9HWklQKSAgOj0gZ3oKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfQlpJUDIpIDo9IGJ6Mgogc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk1BKSAgOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9MWk8pICAgOj0gbHpvCiBzdWZmaXgtJChDT05GSUdfUk9NS0VSTkVMKSAgICA6PSB4aXAKIAogJChvYmopL3ZtSW1hZ2U6ICQob2JqKS92bUltYWdlLiQoc3VmZml4LXkpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MThGLUVaQlJEX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCmluZGV4IGNmN2M5YmMuLjAxODY1MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUxOEYtRVpCUkRfZGVmY29uZmlnCkBAIC0xLDcgKzEsOSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC4xCisjIFN1biBBdWcgIDEgMjI6NTI6MjQgMjAxMAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM0LDkgKzM2LDExIEBACiBDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CiBDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQogQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CiBDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSw2ICs1Myw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNTYsOCArNjEsNiBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CkBAIC02Niw2ICs2OSw3IEBACiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC05OCw2ICsxMDIsNyBAQAogQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTA2LDYgKzExMSw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTIyLDE0ICsxMjgsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMTg1LDYgKzIxOCw3IEBACiBDT05GSUdfTUVNX01UNDhMQzMyTThBMl83NT15CiBDT05GSUdfQkY1MXg9eQogQ09ORklHX0JGSU41MThGX0VaQlJEPXkKKyMgQ09ORklHX0JGSU41MThGX1RDTSBpcyBub3Qgc2V0CiAKICMKICMgQkY1MTggU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMjAxLDYgKzIzNSwxMSBAQAogIyBDT05GSUdfQkY1MThfVUFSVDFfUE9SVEcgaXMgbm90IHNldAogCiAjCisjIEh5c3RlcmVzaXMvc2NobWl0dCBUcmlnZ2VyIENvbnRyb2wKKyMKKyMgQ09ORklHX0JGSU5fSFlTVEVSRVNJU19DT05UUk9MIGlzIG5vdCBzZXQKKworIwogIyBJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudAogIwogCkBAIC0yODgsOCArMzI3LDE2IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zMjAsMTIgKzM2NywxNyBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiAjIENPTkZJR19NRU1TRVRfTDEgaXMgbm90IHNldAogIyBDT05GSUdfTUVNQ1BZX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJDTVBfTDE9eQorQ09ORklHX1NUUk5DTVBfTDE9eQorQ09ORklHX1NUUkNQWV9MMT15CitDT05GSUdfU1RSTkNQWV9MMT15CiAjIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKKyMgQ09ORklHX0VYQ0VQVElPTl9MMV9TQ1JBVENIIGlzIG5vdCBzZXQKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00MjUsNyArNDc3LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNDg2LDYgKzUzNyw4IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVJfQkZJTl9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0lSX0JGSU5fUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKQEAgLTU5Niw2ICs2NDksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTYwOSw2ICs2NjYsOSBAQAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOSwxMiArNjc5LDE0IEBACiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKQEAgLTY1Niw2ICs3MTgsNyBAQAogIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAogIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JQ1JFTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTY2Myw3ICs3MjYsNiBAQAogQ09ORklHX0JGSU5fTUFDPXkKIENPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwCiBDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0yMAotIyBDT05GSUdfQkZJTl9NQUNfUk1JSSBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9NQUNfVVNFX0hXU1RBTVA9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CkBAIC03MDIsMzIgKzc2NCw3IEBACiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC03NDUsMTEgKzc4Miw3IEBACiAjIENPTkZJR19CRklOX1NQSV9BREMgaXMgbm90IHNldAogIyBDT05GSUdfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklOX1RXSV9MQ0QgaXMgbm90IHNldAotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkZJTl9KVEFHX0NPTU09bQogIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKQEAgLTc3Myw2ICs4MDYsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKQEAgLTgwMSw2ICs4MzUsNyBAQAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAogCiAjCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKQEAgLTgxMywxNiArODQ4LDkgQEAKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQogIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TUElfTUFTVEVSPXkKQEAgLTgzNSw2ICs4NjMsOCBAQAogIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTg1NCwxMCArODg0LDEyIEBACiAjCiAjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAogCiAjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CkBAIC05MDAsMjAgKzkzMiwyNSBAQAogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTkyOSwxMyArOTY2LDcgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk1MywxMCArOTg0LDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0RIX0JGSU49bQorQ09ORklHX1NESF9CRklOPXkKIENPTkZJR19TREhfQkZJTl9NSVNTSU5HX0NNRF9QVUxMVVBfV09SS0FST1VORD15CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC05ODksNiArMTAxOCw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEwMTcsNyArMTA0Nyw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTAsNyArMTA4Miw2IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CkBAIC0xMTAyLDYgKzExMzMsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTI2LDYgKzExNTgsNyBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTIwNCw2ICsxMjM3LDggQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtMTIyNywxNyArMTI2MiwyMCBAQAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VIT09LX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTEyNjQsNiArMTMwMiw3IEBACiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQogIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyNzMsOCArMTMxMiwxMiBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjYtRVpCUkRfZGVmY29uZmlnCmluZGV4IDMxYzJhNmQuLmQ1NDNmOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNi1FWkJSRF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI2LUVaQlJEX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi4yCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKICMKK0NPTkZJR19TWU1CT0xfUFJFRklYPSJfIgogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSw2ICs1MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNTYsOCArNTksNiBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CkBAIC02Niw2ICs2Nyw3IEBACiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC05OCw2ICsxMDAsNyBAQAogQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTA2LDYgKzEwOSw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTIyLDE0ICsxMjYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMjMyLDYgKzI2Myw3IEBACiAjIENPTkZJR19CRklONTI3X0VaS0lUX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41MjdfQkxVRVRFQ0hOSVhfQ00gaXMgbm90IHNldAogQ09ORklHX0JGSU41MjZfRVpCUkQ9eQorIyBDT05GSUdfQkZJTjUyN19BRDcxNjBFVkFMIGlzIG5vdCBzZXQKIAogIwogIyBCRjUyNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC0yOTQsOCArMzI2LDE2IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zMjYsMTIgKzM2NiwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiAjIENPTkZJR19NRU1TRVRfTDEgaXMgbm90IHNldAogIyBDT05GSUdfTUVNQ1BZX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJDTVBfTDE9eQorQ09ORklHX1NUUk5DTVBfTDE9eQorQ09ORklHX1NUUkNQWV9MMT15CitDT05GSUdfU1RSTkNQWV9MMT15CiAjIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00MzEsNyArNDc1LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNjE0LDYgKzY1NywxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNjI4LDYgKzY3NSw5IEBACiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQ0LDYgKzY5NCw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKK0NPTkZJR19TQ1NJX01PRD15CiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX0RNQT15CkBAIC03MDUsNiArNzU2LDcgQEAKICMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03MTIsNyArNzY0LDYgQEAKIENPTkZJR19CRklOX01BQz15CiBDT05GSUdfQkZJTl9UWF9ERVNDX05VTT0xMAogQ09ORklHX0JGSU5fUlhfREVTQ19OVU09MjAKLUNPTkZJR19CRklOX01BQ19STUlJPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc5OCw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUEhFVEggaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTc2Miw2ICs4MTQsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzgwLDYgKzgzMyw3IEBACiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldApAQCAtNzg3LDExICs4NDEsMTAgQEAKICMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9CRklOX1JPVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgzNyw2ICs4OTAsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKQEAgLTg2NSw2ICs5MTksNyBAQAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAogCiAjCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKQEAgLTg3OCwxNiArOTMzLDkgQEAKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQogIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TUElfTUFTVEVSPXkKQEAgLTkwMCw2ICs5NDgsOCBAQAogIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTkxOSwxMCArOTY5LDEyIEBACiAjCiAjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAogCiAjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CkBAIC05NjAsMTAgKzEwMTIsMTEgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKQEAgLTk3NSw2ICsxMDI4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC0xMDAwLDYgKzEwNTQsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKQEAgLTEwMTMsNiArMTA2OCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CkBAIC0xMDM4LDIwICsxMDk0LDI1IEBACiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTA4Nyw2ICsxMTQ4LDcgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTExMDIsMTQgKzExNjQsMTkgQEAKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01PTlRFUkVZPXkKICMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKKyMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CisjIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVTlBMVVM9eQogIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKQEAgLTExMzAsNyArMTE5Nyw2IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0xMjE0LDcgKzEyODAsNiBAQAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CkBAIC0xMjI3LDcgKzEyOTIsNiBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI2OCw2ICsxMzMyLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTI5Niw3ICsxMzYxLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyOSw3ICsxMzk2LDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTEzOTMsNiArMTQ1OSw3IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE0MTcsNiArMTQ4NCw3IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xNDk1LDYgKzE1NjMsOCBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC0xNTE4LDE3ICsxNTg4LDE4IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRUhPT0tfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTU1NSw2ICsxNjI2LDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTU2NCw5ICsxNjM2LDEyIEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVC1WMl9kZWZjb25maWcKaW5kZXggZDJkZmNiMC4uYzU5NjcwOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lULVYyX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVQtVjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC01Niw4ICs1OSw2IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKQEAgLTY2LDYgKzY3LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMDYsNiArMTA5LDcgQEAKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMjIsMTQgKzEyNiw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTIzMiw2ICsyNjMsNyBAQAogQ09ORklHX0JGSU41MjdfRVpLSVRfVjI9eQogIyBDT05GSUdfQkZJTjUyN19CTFVFVEVDSE5JWF9DTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTI2X0VaQlJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU41MjdfQUQ3MTYwRVZBTCBpcyBub3Qgc2V0CiAKICMKICMgQkY1MjcgU3BlY2lmaWMgQ29uZmlndXJhdGlvbgpAQCAtMjk0LDggKzMyNiwxNiBAQAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorCisjCisjIENsb2NrIGV2ZW50IGRldmljZQorIwogIyBDT05GSUdfVElDS1NPVVJDRV9HUFRNUjAgaXMgbm90IHNldAogQ09ORklHX1RJQ0tTT1VSQ0VfQ09SRVRNUj15CisKKyMKKyMgQ2xvY2sgc291Y2UKKyMKICMgQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApAQCAtMzI2LDEyICszNjYsMTYgQEAKIENPTkZJR19BQ0NFU1NfT0tfTDE9eQogIyBDT05GSUdfTUVNU0VUX0wxIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTUNQWV9MMSBpcyBub3Qgc2V0CitDT05GSUdfU1RSQ01QX0wxPXkKK0NPTkZJR19TVFJOQ01QX0wxPXkKK0NPTkZJR19TVFJDUFlfTDE9eQorQ09ORklHX1NUUk5DUFlfTDE9eQogIyBDT05GSUdfU1lTX0JGSU5fU1BJTkxPQ0tfTDEgaXMgbm90IHNldAogIyBDT05GSUdfSVBfQ0hFQ0tTVU1fTDEgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFTElORV9BTElHTkVEX0wxPXkKICMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0Ci1DT05GSUdfQVBQX1NUQUNLX0wxPXkKK0NPTkZJR19DQUNIRV9GTFVTSF9MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpAQCAtNDMxLDcgKzQ3NSw2IEBACiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKQEAgLTY1NCw2ICs2OTcsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTY2OCw2ICs3MTUsOSBAQAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY4NCw2ICs3MzQsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9ETUE9eQpAQCAtNzQ1LDYgKzc5Niw3IEBACiAjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlDUkVMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzUzLDcgKzgwNSw2IEBACiBDT05GSUdfQkZJTl9NQUNfVVNFX0wxPXkKIENPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwCiBDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0yMAotQ09ORklHX0JGSU5fTUFDX1JNSUk9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CkBAIC03ODgsNiArODM5LDcgQEAKICMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lQSEVUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtODAzLDYgKzg1NSw3IEBACiBDT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC04MzYsOCArODg5LDExIEBACiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkM9eQogQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OT15CitDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQz15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CkBAIC04NTUsNiArOTExLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CkBAIC04NjIsMTEgKzkxOSwxMCBAQAogIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0JGSU5fUk9UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BRFhMMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtOTEyLDYgKzk2OCw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldApAQCAtOTQwLDYgKzk5Nyw3IEBACiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0CiAKICMKICMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwpAQCAtOTUzLDE2ICsxMDExLDkgQEAKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQogIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TUElfTUFTVEVSPXkKQEAgLTk3NSw2ICsxMDI2LDggQEAKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC05OTQsMTAgKzEwNDcsMTIgQEAKICMKICMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKQEAgLTEwNDYsMjEgKzExMDEsMjYgQEAKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAogIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiBDT05GSUdfUE1JQ19BRFA1NTIwPXkKKyMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTExMDEsNiArMTE2MSw3IEBACiAjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfTENEX0w0RjAwMjQyVDAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MTVMyODNHRjA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CkBAIC0xMTEwLDYgKzExNzEsNyBAQAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQogQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KICMgQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE1OCwxMyArMTIyMCw5IEBACiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1BJPXkKLQotIwotIyBBTFNBIEJsYWNrZmluIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9CRklOX0FENzMzMjIgaXMgbm90IHNldAogQ09ORklHX1NORF9VU0I9eQogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1VBMTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQpAQCAtMTE3Myw2ICsxMjMxLDEwIEBACiAjIENPTkZJR19TTkRfQkY1WFhfU09DX0FENzMzMTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTM3MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxNzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzNjEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTM4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxMzczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVjgwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQkY1WFhfVERNIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQkY1WFhfQUM5Nz1tCiBDT05GSUdfU05EX0JGNVhYX01NQVBfU1VQUE9SVD15CkBAIC0xMjAzLDYgKzEyNjUsNyBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtMTIxOCwxNCArMTI4MSwxOSBAQAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15CisjIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQogIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKICMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQorIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKKyMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15CiAjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldApAQCAtMTI0Niw3ICsxMzE0LDYgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTEzMzAsNyArMTM5Nyw2IEBACiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTEzNDMsNyArMTQwOSw2IEBACiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCkBAIC0xMzY2LDExICsxNDMxLDggQEAKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogQ09ORklHX0xFRFNfQURQNTUyMD15Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiAjIENPTkZJR19MRURTX1RSSUdHRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQpAQCAtMTQwMSw2ICsxNDYzLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTQyOSw3ICsxNDkyLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ2Miw3ICsxNTI3LDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTE1MjcsNiArMTU5MSw3IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NTEsNiArMTYxNiw3IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xNjI5LDYgKzE2OTUsOCBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC0xNjUyLDE3ICsxNzIwLDE4IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRUhPT0tfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTY4OSw2ICsxNzU4LDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTY5OCw5ICsxNzY4LDEyIEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUyNy1FWktJVF9kZWZjb25maWcKaW5kZXggZWRiYjQ0ZC4uMGRlMjEyZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTI3LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MjctRVpLSVRfZGVmY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC01Niw4ICs1OSw2IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKQEAgLTY2LDYgKzY3LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMDYsNiArMTA5LDcgQEAKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMjIsMTQgKzEyNiw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTIzMiw2ICsyNjMsNyBAQAogIyBDT05GSUdfQkZJTjUyN19FWktJVF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRklONTI3X0JMVUVURUNITklYX0NNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU41MjZfRVpCUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTjUyN19BRDcxNjBFVkFMIGlzIG5vdCBzZXQKIAogIwogIyBCRjUyNyBTcGVjaWZpYyBDb25maWd1cmF0aW9uCkBAIC0yOTQsOCArMzI2LDE2IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zMjYsMTIgKzM2NiwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiAjIENPTkZJR19NRU1TRVRfTDEgaXMgbm90IHNldAogIyBDT05GSUdfTUVNQ1BZX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJDTVBfTDE9eQorQ09ORklHX1NUUk5DTVBfTDE9eQorQ09ORklHX1NUUkNQWV9MMT15CitDT05GSUdfU1RSTkNQWV9MMT15CiAjIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00MzEsNyArNDc1LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNjU0LDYgKzY5NywxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNjY4LDYgKzcxNSw5IEBACiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjg0LDYgKzczNCw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKK0NPTkZJR19TQ1NJX01PRD15CiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19TQ1NJX0RNQT15CkBAIC03NDUsNiArNzk2LDcgQEAKICMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKICMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CkBAIC03NTMsNyArODA1LDYgQEAKIENPTkZJR19CRklOX01BQ19VU0VfTDE9eQogQ09ORklHX0JGSU5fVFhfREVTQ19OVU09MTAKIENPTkZJR19CRklOX1JYX0RFU0NfTlVNPTIwCi1DT05GSUdfQkZJTl9NQUNfUk1JST15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKQEAgLTc4OCw2ICs4MzksNyBAQAogIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC04MDMsNiArODU1LDcgQEAKIENPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTgyMSw2ICs4NzQsNyBAQAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTgyOCwxMSArODgyLDEwIEBACiAjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQkZJTl9ST1RBUlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC04NzgsNiArOTMxLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC05MDYsNiArOTYwLDcgQEAKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIAogIwogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCkBAIC05MTksMTYgKzk3NCw5IEBACiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKICMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX01BU1RFUj15CkBAIC05NDEsNiArOTg5LDggQEAKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC05NjAsMTAgKzEwMTAsMTIgQEAKICMKICMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKQEAgLTEwMTEsMjEgKzEwNjMsMjYgQEAKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAogIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTA2Niw2ICsxMTIzLDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTDRGMDAyNDJUMDMgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogQ09ORklHX0xDRF9MVFYzNTBRVj1tCiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CkBAIC0xMDc0LDYgKzExMzIsNyBAQAogIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPW0KIENPTkZJR19CQUNLTElHSFRfR0VORVJJQz1tCisjIENPTkZJR19CQUNLTElHSFRfQURQODg2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjIsMTMgKzExODEsOSBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NQST15Ci0KLSMKLSMgQUxTQSBCbGFja2ZpbiBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfQkZJTl9BRDczMzIyIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfVVNCPXkKICMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPW0KIENPTkZJR19TTkRfU09DX0FDOTdfQlVTPXkKQEAgLTExMzcsNiArMTE5MiwxMCBAQAogIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BRDczMzExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTc2MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxMzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTM3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVY4MFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JGNVhYX1RETSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0JGNVhYX0FDOTc9bQogQ09ORklHX1NORF9CRjVYWF9NTUFQX1NVUFBPUlQ9eQpAQCAtMTE2Nyw2ICsxMjI2LDcgQEAKICMKICMgU3BlY2lhbCBISUQgZHJpdmVycwogIworIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTExODIsMTQgKzEyNDIsMTkgQEAKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01PTlRFUkVZPXkKICMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiAjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKKyMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CisjIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVTlBMVVM9eQogIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKQEAgLTEyMTAsNyArMTI3NSw2IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0xMjkyLDcgKzEzNTYsNiBAQAogIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CkBAIC0xMzA1LDcgKzEzNjgsNiBAQAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM0Niw2ICsxNDA4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTM3NCw3ICsxNDM3LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQwNyw3ICsxNDcyLDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTE0NzIsNiArMTUzNiw3IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE0OTYsNiArMTU2MSw3IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xNTc0LDYgKzE2NDAsOCBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC0xNTk3LDE3ICsxNjY1LDE4IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRUhPT0tfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTYzNCw2ICsxNzAzLDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTY0Myw5ICsxNzEzLDEyIEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1FWktJVF9kZWZjb25maWcKaW5kZXggMGIxM2Q1OC4uZjA5NjAxMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC01Niw4ICs1OSw2IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKQEAgLTY2LDYgKzY3LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMjIsMTQgKzEyNSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI1NCw4ICsyODQsMTYgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRT15CiAjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0yODcsMTIgKzMyNSwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiBDT05GSUdfTUVNU0VUX0wxPXkKIENPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NUUkNNUF9MMT15CitDT05GSUdfU1RSTkNNUF9MMT15CitDT05GSUdfU1RSQ1BZX0wxPXkKK0NPTkZJR19TVFJOQ1BZX0wxPXkKIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC0zODUsMTAgKzQyNywxMCBAQAogQ09ORklHX1NVU1BFTkQ9eQogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9PUFM9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfUE1fQkZJTl9TTEVFUF9ERUVQRVI9eQogIyBDT05GSUdfUE1fQkZJTl9TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9XQUtFVVBfQllfR1BJTyBpcyBub3Qgc2V0CiAKICMKICMgUG9zc2libGUgU3VzcGVuZCBNZW0gLyBIaWJlcm5hdGUgV2FrZS1VcCBTb3VyY2VzCkBAIC00MDQsNyArNDQ2LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNjA4LDYgKzY0OSwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNjE3LDcgKzY2Miw5IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTYzMSw2ICs2NzgsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKQEAgLTY4Nyw2ICs3MzUsNyBAQAogQ09ORklHX0lOUFVUPW0KICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NDQsNiArNzkzLDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC03NjUsNiArODE1LDggQEAKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC03ODQsNiArODM2LDcgQEAKICMKICMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgpAQCAtODMxLDYgKzg4NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTg5OCw3ICs5NTIsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC05MjksNyArOTg1LDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTk4OCw2ICsxMDQzLDcgQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTAxMiw2ICsxMDY4LDcgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKQEAgLTExMTMsMTcgKzExNzAsMTggQEAKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFSE9PS19TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xMTUwLDYgKzEyMDgsNyBAQAogQ09ORklHX0NQTEJfSU5GTz15CiBDT05GSUdfQUNDRVNTX0NIRUNLPXkKICMgQ09ORklHX0JGSU5fSVNSQU1fU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFNFVURPREJHX0lOU05TIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTU5LDggKzEyMTgsMTIgQEAKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTMzLVNUQU1QX2RlZmNvbmZpZwppbmRleCBjM2ZlNmU1Li5mNjViNWUyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzMtU1RBTVBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzMy1TVEFNUF9kZWZjb25maWcKQEAgLTEsNyArMSw4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzIuMgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0CiAjCitDT05GSUdfU1lNQk9MX1BSRUZJWD0iXyIKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0tFUk5FTF9HWklQPXkKICMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDksNiArNTEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTU2LDggKzU5LDYgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldApAQCAtNjYsNiArNjcsNyBAQAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtOTgsNiArMTAwLDcgQEAKIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTEwNiw2ICsxMDksNyBAQAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTEyMiwxNCArMTI2LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApAQCAtMjU0LDggKzI4NSwxNiBAQAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKworIworIyBDbG9jayBldmVudCBkZXZpY2UKKyMKICMgQ09ORklHX1RJQ0tTT1VSQ0VfR1BUTVIwIGlzIG5vdCBzZXQKIENPTkZJR19USUNLU09VUkNFX0NPUkVUTVI9eQorCisjCisjIENsb2NrIHNvdWNlCisjCiBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFPXkKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTI4NywxMiArMzI2LDE2IEBACiBDT05GSUdfQUNDRVNTX09LX0wxPXkKIENPTkZJR19NRU1TRVRfTDE9eQogQ09ORklHX01FTUNQWV9MMT15CitDT05GSUdfU1RSQ01QX0wxPXkKK0NPTkZJR19TVFJOQ01QX0wxPXkKK0NPTkZJR19TVFJDUFlfTDE9eQorQ09ORklHX1NUUk5DUFlfTDE9eQogQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKICMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiAjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAotQ09ORklHX0FQUF9TVEFDS19MMT15CitDT05GSUdfQ0FDSEVfRkxVU0hfTDE9eQogCiAjCiAjIFNwZWVkIE9wdGltaXphdGlvbnMKQEAgLTM4NSwxMCArNDI4LDEwIEBACiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKICMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX1BNX09QUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19QTV9CRklOX1NMRUVQX0RFRVBFUj15CiAjIENPTkZJR19QTV9CRklOX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBQb3NzaWJsZSBTdXNwZW5kIE1lbSAvIEhpYmVybmF0ZSBXYWtlLVVwIFNvdXJjZXMKQEAgLTQwNCw3ICs0NDcsNiBAQAogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC02MTIsNiArNjU0LDEwIEBACiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CkBAIC02MjUsNiArNjcxLDkgQEAKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAogCiAjCkBAIC02NDEsNiArNjkwLDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworQ09ORklHX1NDU0lfTU9EPXkKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CkBAIC02OTcsNiArNzQ3LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNzE1LDExICs3NjYsMTEgQEAKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNzYwLDYgKzgxMSw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldApAQCAtNzgxLDkgKzgzMywxMCBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfR1BJTz1tCiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0CiAKICMKICMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwpAQCAtNzk2LDE2ICs4NDksOSBAQAogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15CiAjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NQSV9NQVNURVI9eQpAQCAtODE4LDYgKzg2NCw4IEBACiAjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtODM3LDEwICs4ODUsMTIgQEAKICMKICMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKQEAgLTg4OSwxMiArOTM5LDExIEBACiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC05NzcsMjIgKzEwMjYsMTggQEAKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAogQ09ORklHX1NORF9TUEk9eQotCi0jCi0jIEFMU0EgQmxhY2tmaW4gZGV2aWNlcwotIwotQ09ORklHX1NORF9CRklOX1NQT1JUPTAKLUNPTkZJR19TTkRfQkZJTl9BRDczMzIyPW0KLUNPTkZJR19TTkRfQkZJTl9BRDczMzIyX1NQT1JUMF9TRT0xMAotQ09ORklHX1NORF9CRklOX0FENzMzMjJfU1BPUlQxX1NFPTE0Ci1DT05GSUdfU05EX0JGSU5fQUQ3MzMyMl9SRVNFVD0xMgogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQogQ09ORklHX1NORF9CRjVYWF9JMlM9bQogIyBDT05GSUdfU05EX0JGNVhYX1NPQ19TU00yNjAyIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQkY1WFhfU09DX0FENzMzMTE9bQorQ09ORklHX1NORF9BRDdYWFhYX1NFTEVDVD0wCiAjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxMzcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTE3NjEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTM2MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxMzgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzNzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFWODBYIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfQkZJTl9BRDczMzExX1NFPTQKICMgQ09ORklHX1NORF9CRjVYWF9URE0gaXMgbm90IHNldAogQ09ORklHX1NORF9CRjVYWF9BQzk3PW0KQEAgLTEwNTEsNiArMTA5Niw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEwNzksNyArMTEyNSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTEsNyArMTE1OSw2IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CkBAIC0xMTcwLDYgKzEyMTcsNyBAQAogIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTk0LDYgKzEyNDIsNyBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTI3Miw2ICsxMzIxLDggQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtMTI5NSwxNyArMTM0NiwxOCBAQAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VIT09LX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTEzMzIsNiArMTM4NCw3IEBACiBDT05GSUdfQ1BMQl9JTkZPPXkKIENPTkZJR19BQ0NFU1NfQ0hFQ0s9eQogIyBDT05GSUdfQkZJTl9JU1JBTV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkZJTl9QU0VVRE9EQkdfSU5TTlMgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEzNDEsOCArMTM5NCwxMiBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzctU1RBTVBfZGVmY29uZmlnCmluZGV4IDc1OTZjZjcuLjUwY2I5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzNy1TVEFNUF9kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM3LVNUQU1QX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi4yCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKICMKK0NPTkZJR19TWU1CT0xfUFJFRklYPSJfIgogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSw2ICs1MSw3IEBACiAjCiBDT05GSUdfVFJFRV9SQ1U9eQogIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldApAQCAtNTYsOCArNTksNiBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CkBAIC02Niw2ICs2Nyw3IEBACiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC05OCw2ICsxMDAsNyBAQAogQ09ORklHX01NQVBfQUxMT1dfVU5JTklUSUFMSVpFRD15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTA2LDYgKzEwOSw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTIyLDE0ICsxMjYsNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0yMzAsNyArMjYxLDcgQEAKICMgUHJpb3JpdHkKICMKIENPTkZJR19JUlFfRE1BX0VSUk9SPTcKLUNPTkZJR19JUlFfRVJST1I9NworQ09ORklHX0lSUV9FUlJPUj0xMQogQ09ORklHX0lSUV9DQU5fUlg9MTEKIENPTkZJR19JUlFfQ0FOX1RYPTExCiBDT05GSUdfSVJRX1BST0dfSU5UQT0xMgpAQCAtMjYyLDggKzI5MywxNiBAQAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKKworIworIyBDbG9jayBldmVudCBkZXZpY2UKKyMKICMgQ09ORklHX1RJQ0tTT1VSQ0VfR1BUTVIwIGlzIG5vdCBzZXQKIENPTkZJR19USUNLU09VUkNFX0NPUkVUTVI9eQorCisjCisjIENsb2NrIHNvdWNlCisjCiBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFPXkKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTI5NSwxMiArMzM0LDE2IEBACiBDT05GSUdfQUNDRVNTX09LX0wxPXkKIENPTkZJR19NRU1TRVRfTDE9eQogQ09ORklHX01FTUNQWV9MMT15CitDT05GSUdfU1RSQ01QX0wxPXkKK0NPTkZJR19TVFJOQ01QX0wxPXkKK0NPTkZJR19TVFJDUFlfTDE9eQorQ09ORklHX1NUUk5DUFlfTDE9eQogQ09ORklHX1NZU19CRklOX1NQSU5MT0NLX0wxPXkKICMgQ09ORklHX0lQX0NIRUNLU1VNX0wxIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiAjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAotQ09ORklHX0FQUF9TVEFDS19MMT15CitDT05GSUdfQ0FDSEVfRkxVU0hfTDE9eQogCiAjCiAjIFNwZWVkIE9wdGltaXphdGlvbnMKQEAgLTM5MywxMCArNDM2LDEwIEBACiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKICMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX1BNX09QUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKIENPTkZJR19QTV9CRklOX1NMRUVQX0RFRVBFUj15CiAjIENPTkZJR19QTV9CRklOX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1dBS0VVUF9CWV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBQb3NzaWJsZSBTdXNwZW5kIE1lbSAvIEhpYmVybmF0ZSBXYWtlLVVwIFNvdXJjZXMKQEAgLTQxMyw3ICs0NTYsNiBAQAogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC00ODIsMTMgKzUyNCw5IEBACiAjIENPTkZJR19DQU5fVkNBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0FOX0RFVj1tCiAjIENPTkZJR19DQU5fQ0FMQ19CSVRUSU1JTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX01DUDI1MVggaXMgbm90IHNldAogQ09ORklHX0NBTl9CRklOPW0KICMgQ09ORklHX0NBTl9TSkExMDAwIGlzIG5vdCBzZXQKLQotIwotIyBDQU4gVVNCIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0NBTl9FTVNfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KIApAQCAtNjM4LDYgKzY3NiwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNjUxLDYgKzY5Myw5IEBACiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjY3LDYgKzcxMiw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKK0NPTkZJR19TQ1NJX01PRD15CiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldApAQCAtNjk4LDYgKzc0NCw3IEBACiAjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlDUkVMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzA2LDcgKzc1Myw2IEBACiBDT05GSUdfQkZJTl9NQUNfVVNFX0wxPXkKIENPTkZJR19CRklOX1RYX0RFU0NfTlVNPTEwCiBDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0yMAotIyBDT05GSUdfQkZJTl9NQUNfUk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKQEAgLTc0Nyw2ICs3OTMsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NjUsMTEgKzgxMiwxMSBAQAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BRFhMMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC04MTEsNiArODU4LDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC04MzcsNiArODg1LDcgQEAKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIAogIwogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCkBAIC04NDksMTYgKzg5OCw5IEBACiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKICMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX01BU1RFUj15CkBAIC04NzEsNiArOTEzLDggQEAKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC04OTAsMTAgKzkzNCwxMiBAQAogIwogIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldApAQCAtOTQyLDEyICs5ODgsMTEgQEAKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTk5OCw2ICsxMDQzLDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTDRGMDAyNDJUMDMgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKQEAgLTEwMDYsNiArMTA1Miw3IEBACiAjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQogQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPW0KKyMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA0MiwyMiArMTA4OSwxOCBAQAogIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NQST15Ci0KLSMKLSMgQUxTQSBCbGFja2ZpbiBkZXZpY2VzCi0jCi1DT05GSUdfU05EX0JGSU5fU1BPUlQ9MAotQ09ORklHX1NORF9CRklOX0FENzMzMjI9bQotQ09ORklHX1NORF9CRklOX0FENzMzMjJfU1BPUlQwX1NFPTEwCi1DT05GSUdfU05EX0JGSU5fQUQ3MzMyMl9TUE9SVDFfU0U9MTQKLUNPTkZJR19TTkRfQkZJTl9BRDczMzIyX1JFU0VUPTEyCiBDT05GSUdfU05EX1NPQz1tCiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CiBDT05GSUdfU05EX0JGNVhYX0kyUz1tCiAjIENPTkZJR19TTkRfQkY1WFhfU09DX1NTTTI2MDIgaXMgbm90IHNldAogQ09ORklHX1NORF9CRjVYWF9TT0NfQUQ3MzMxMT1tCitDT05GSUdfU05EX0FEN1hYWFhfU0VMRUNUPTAKICMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTc2MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVUxMzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CRjVYWF9TT0NfQURBVTEzODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0JGNVhYX1NPQ19BREFVMTM3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkY1WFhfU09DX0FEQVY4MFggaXMgbm90IHNldAogQ09ORklHX1NORF9CRklOX0FENzMzMTFfU0U9NAogIyBDT05GSUdfU05EX0JGNVhYX1RETSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0JGNVhYX0FDOTc9bQpAQCAtMTExNiw2ICsxMTU5LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTE0NCw3ICsxMTg4LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE3Niw3ICsxMjIyLDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTEyMzUsNiArMTI4MCw3IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNTksNiArMTMwNSw3IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xMzM3LDYgKzEzODQsOCBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC0xMzYwLDE3ICsxNDA5LDE4IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRUhPT0tfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTM5Nyw2ICsxNDQ3LDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTQwNiw4ICsxNDU3LDEyIEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjUzOC1FWktJVF9kZWZjb25maWcKaW5kZXggYmMxODcxZC4uMjQ3Y2ZhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTM4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1MzgtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC01Niw4ICs1OSw2IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKQEAgLTY2LDYgKzY3LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMDYsNiArMTA5LDcgQEAKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMjIsMTQgKzEyNiw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI3Miw4ICszMDMsMTYgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRT15CiAjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0zMDUsMTIgKzM0NCwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiBDT05GSUdfTUVNU0VUX0wxPXkKIENPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NUUkNNUF9MMT15CitDT05GSUdfU1RSTkNNUF9MMT15CitDT05GSUdfU1RSQ1BZX0wxPXkKK0NPTkZJR19TVFJOQ1BZX0wxPXkKIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00MTAsNyArNDUzLDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNDc5LDEzICs1MjEsOSBAQAogIyBDT05GSUdfQ0FOX1ZDQU4gaXMgbm90IHNldAogQ09ORklHX0NBTl9ERVY9bQogIyBDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9NQ1AyNTFYIGlzIG5vdCBzZXQKIENPTkZJR19DQU5fQkZJTj1tCiAjIENPTkZJR19DQU5fU0pBMTAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0FOIFVTQiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19DQU5fRU1TX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfSVJEQT1tCiAKQEAgLTY0MSw2ICs2NzksMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKQEAgLTY1Niw2ICs2OTgsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKQEAgLTY4Nyw2ICs3MzAsNyBAQAogIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAogIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JQ1JFTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTczMSw2ICs3NzUsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NTAsOSArNzk1LDExIEBACiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OT15CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJPXkKLUNPTkZJR19UT1VDSFNDUkVFTl9BRDc4Nzk9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3MTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKQEAgLTc2OCwxMSArODE1LDExIEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BRFhMMzRYIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgxNyw2ICs4NjQsNyBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKQEAgLTg0Myw2ICs4OTEsNyBAQAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAogCiAjCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKQEAgLTg1NSwxNiArOTA0LDkgQEAKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQogIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TUElfTUFTVEVSPXkKQEAgLTg3Nyw2ICs5MTksOCBAQAogIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTg5NiwxMCArOTQwLDEyIEBACiAjCiAjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAogCiAjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CkBAIC05NDcsMTIgKzk5MywxMSBAQAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTA0MCw2ICsxMDg1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTA2OCw3ICsxMTE0LDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwMCw3ICsxMTQ4LDYgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKQEAgLTExNTksNiArMTIwNiw3IEBACiAjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExODMsNiArMTIzMSw3IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKIENPTkZJR19TTUJfRlM9bQogIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xMjYxLDYgKzEzMTAsOCBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC0xMjg0LDE3ICsxMzM1LDE4IEBACiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRUhPT0tfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQpAQCAtMTMyMSw2ICsxMzczLDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTMzMCw4ICsxMzgzLDEyIEBACiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU0OC1FWktJVF9kZWZjb25maWcKaW5kZXggY2EzMDljZi4uYmFjYTY2NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTQ4LUVaS0lUX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NDgtRVpLSVRfZGVmY29uZmlnCkBAIC0xLDcgKzEsOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLjIKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAogIworQ09ORklHX1NZTUJPTF9QUkVGSVg9Il8iCiAjIENPTkZJR19NTVUgaXMgbm90IHNldAogIyBDT05GSUdfRlBVIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKQEAgLTM3LDYgKzM4LDcgQEAKIENPTkZJR19LRVJORUxfR1pJUD15CiAjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC01Niw4ICs1OSw2IEBACiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKQEAgLTY2LDYgKzY3LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTk4LDYgKzEwMCw3IEBACiBDT05GSUdfTU1BUF9BTExPV19VTklOSVRJQUxJWkVEPXkKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xMDcsNiArMTEwLDcgQEAKICMgQ09ORklHX1NMT1dfV09SS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMjMsMTQgKzEyNyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQVM9eQogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0zMzAsOCArMzYxLDE2IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0zNjIsMTIgKzQwMSwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiAjIENPTkZJR19NRU1TRVRfTDEgaXMgbm90IHNldAogIyBDT05GSUdfTUVNQ1BZX0wxIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJDTVBfTDE9eQorQ09ORklHX1NUUk5DTVBfTDE9eQorQ09ORklHX1NUUkNQWV9MMT15CitDT05GSUdfU1RSTkNQWV9MMT15CiAjIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00NzIsNyArNTE1LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNTQwLDYgKzU4Miw3IEBACiAjIENPTkZJR19DQU5fVkNBTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0FOX0RFVj1tCiAjIENPTkZJR19DQU5fQ0FMQ19CSVRUSU1JTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX01DUDI1MVggaXMgbm90IHNldAogQ09ORklHX0NBTl9CRklOPW0KICMgQ09ORklHX0NBTl9TSkExMDAwIGlzIG5vdCBzZXQKIApAQCAtNTk1LDkgKzYzOCwxNCBAQAogIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfTElCODAyMTE9bQorIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTcwMCw4ICs3NDgsNyBAQAogIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9CRjVYWD15Ci1DT05GSUdfTVREX05BTkRfQkY1WFhfSFdFQ0M9eQotIyBDT05GSUdfTVREX05BTkRfQkY1WFhfQk9PVFJPTV9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQkY1WFhfSFdFQ0MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTcyMSw2ICs3NjgsMTAgQEAKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTczNSw2ICs3ODYsOSBAQAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc0NSwxMiArNzk5LDE0IEBACiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9ETUE9eQpAQCAtODE5LDYgKzg3NSw3IEBACiAjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlDUkVMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtODQ0LDE0ICs5MDEsNiBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotQ09ORklHX0xJQkVSVEFTPW0KLSMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVNfU0RJTz1tCi1DT05GSUdfUE9XRVJPRjJfQkxPQ0tTSVpFX09OTFk9eQotIyBDT05GSUdfTElCRVJUQVNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIApAQCAtODY3LDYgKzkxNiw3IEBACiAjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JUEhFVEggaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTg4Miw2ICs5MzIsNyBAQAogQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtOTE0LDkgKzk2NSw5IEBACiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CiBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3PW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3MTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKQEAgLTkzNCw2ICs5ODUsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTk0MSwxMSArOTkzLDEwIEBACiAjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQkZJTl9ST1RBUlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQUQ3MTRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCkBAIC05OTMsNiArMTA0NCw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldApAQCAtMTAyMSw2ICsxMDczLDcgQEAKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIAogIwogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCkBAIC0xMDM0LDE2ICsxMDg3LDkgQEAKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQogIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TUElfTUFTVEVSPXkKQEAgLTEwNTYsNiArMTEwMiw4IEBACiAjIENPTkZJR19TUElfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwpAQCAtMTA3NSwxMCArMTEyMywxMiBAQAogIwogIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgogIworIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgR1BJTyBleHBhbmRlcnM6CiAjCisjIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldApAQCAtMTEyNiwyMSArMTE3NiwyNiBAQAogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC0xMjM5LDEzICsxMjk0LDkgQEAKICMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAogQ09ORklHX1NORF9TUEk9eQotCi0jCi0jIEFMU0EgQmxhY2tmaW4gZGV2aWNlcwotIwotIyBDT05GSUdfU05EX0JGSU5fQUQ3MzMyMiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1VTQj15CiAjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVUExMDEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15CiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUz15CkBAIC0xMjc5LDYgKzEzMzAsNyBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtMTI5NCwxNCArMTM0NiwxOSBAQAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15CisjIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQogIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKICMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQorIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKKyMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15CiAjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldApAQCAtMTMyMiw3ICsxMzc5LDYgQEAKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTE0MDYsNyArMTQ2Miw2IEBACiAjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKQEAgLTE0MTksNyArMTQ3NCw2IEBACiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDQ0LDExICsxNDk4LDkgQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CiBDT05GSUdfU0RIX0JGSU49eQotIyBDT05GSUdfU0RIX0JGSU5fTUlTU0lOR19DTURfUFVMTFVQX1dPUktBUk9VTkQgaXMgbm90IHNldAorQ09ORklHX1NESF9CRklOX01JU1NJTkdfQ01EX1BVTExVUF9XT1JLQVJPVU5EPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtMTQ4MCw2ICsxNTMyLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldApAQCAtMTUwOCw3ICsxNTYxLDkgQEAKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTYwOSw2ICsxNjY0LDcgQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTYzOCw2ICsxNjk0LDcgQEAKIENPTkZJR19TTUJfRlM9bQogQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfU01CX05MU19SRU1PVEU9ImNwNDM3IgorIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz15CiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKQEAgLTE3MjEsNiArMTc3OCw4IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTE3NDQsMTIgKzE4MDMsMTYgQEAKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFSE9PS19TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApAQCAtMTc3OCw2ICsxODQxLDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTc4NSw3ICsxODQ5LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUFDVklMT05fZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUFDVklMT05fZGVmY29uZmlnCmluZGV4IDZhNzc2Y2UuLmQ1Y2VlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1BQ1ZJTE9OX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtQUNWSUxPTl9kZWZjb25maWcKQEAgLTMzMCw3ICszMzAsNiBAQAogQ09ORklHX0NBQ0hFTElORV9BTElHTkVEX0wxPXkKICMgQ09ORklHX1NZU0NBTExfVEFCX0wxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMSBpcyBub3Qgc2V0Ci1DT05GSUdfQVBQX1NUQUNLX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0JGNTYxLUVaS0lUX2RlZmNvbmZpZwppbmRleCA3OTJmZjA5Li4xYTU4MDhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQkY1NjEtRVpLSVRfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9CRjU2MS1FWktJVF9kZWZjb25maWcKQEAgLTEsNyArMSw4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzIuMgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0CiAjCitDT05GSUdfU1lNQk9MX1BSRUZJWD0iXyIKICMgQ09ORklHX01NVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUFUgaXMgbm90IHNldAogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQpAQCAtMzcsNiArMzgsNyBAQAogQ09ORklHX0tFUk5FTF9HWklQPXkKICMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDksNiArNTEsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTU2LDggKzU5LDYgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldApAQCAtNjYsNiArNjcsNyBAQAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtOTgsNiArMTAwLDcgQEAKIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTEyMiwxNCArMTI1LDQxIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTI5Myw4ICszMjMsMTYgQEAKIENPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogQ09ORklHX0NZQ0xFU19DTE9DS1NPVVJDRT15CiAjIENPTkZJR19HUFRNUjBfQ0xPQ0tTT1VSQ0UgaXMgbm90IHNldAogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0zMjYsMTIgKzM2NCwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiBDT05GSUdfTUVNU0VUX0wxPXkKIENPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NUUkNNUF9MMT15CitDT05GSUdfU1RSTkNNUF9MMT15CitDT05GSUdfU1RSQ1BZX0wxPXkKK0NPTkZJR19TVFJOQ1BZX0wxPXkKIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CiAjIENPTkZJR19JUF9DSEVDS1NVTV9MMSBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC00MzksNyArNDgxLDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNjQzLDYgKzY4NCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNjUyLDcgKzY5Nyw5IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY2Niw2ICs3MTMsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCitDT05GSUdfU0NTSV9NT0Q9eQogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKQEAgLTcyMiw2ICs3NzAsNyBAQAogQ09ORklHX0lOUFVUPW0KICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC03NzksNiArODI4LDcgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CkBAIC04MDAsNiArODUwLDggQEAKICMgQ09ORklHX1NQSV9CRklOX1NQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC04MTksNiArODcxLDcgQEAKICMKICMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0CiAKICMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgpAQCAtODY2LDYgKzkxOSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTk3OCw2ICsxMDMyLDcgQEAKICMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTAwMiw2ICsxMDU3LDcgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCiAjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKQEAgLTExMDMsMTIgKzExNTksMTYgQEAKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFSE9PS19TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApAQCAtMTEzNyw2ICsxMTk3LDcgQEAKIENPTkZJR19DUExCX0lORk89eQogQ09ORklHX0FDQ0VTU19DSEVDSz15CiAjIENPTkZJR19CRklOX0lTUkFNX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CRklOX1BTRVVET0RCR19JTlNOUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE0NCw3ICsxMjA1LDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKaW5kZXggNDQzMjE1MC4uMTE4OTA5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUyN19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTI3X2RlZmNvbmZpZwpAQCAtMzE5LDcgKzMxOSw2IEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogIyBDT05GSUdfU1lTQ0FMTF9UQUJfTDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxIGlzIG5vdCBzZXQKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQogCiAjCiAjIFNwZWVkIE9wdGltaXphdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzNfZGVmY29uZmlnCmluZGV4IGRmNTY2MzkuLmZlZmZiYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjUzM19kZWZjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTMzX2RlZmNvbmZpZwpAQCAtMjc5LDcgKzI3OSw2IEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogQ09ORklHX1NZU0NBTExfVEFCX0wxPXkKIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDE9eQotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3RV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwppbmRleCAyMmU1NjVjLi5jM2MzYTc3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdFX2RlZmNvbmZpZwpAQCAtMjg4LDcgKzI4OCw2IEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogQ09ORklHX1NZU0NBTExfVEFCX0wxPXkKIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDE9eQotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTM3VV9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZwppbmRleCBlZmNjOTBkLi5mODkxZDg0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1MzdVX2RlZmNvbmZpZwpAQCAtMjg4LDcgKzI4OCw2IEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogQ09ORklHX1NZU0NBTExfVEFCX0wxPXkKIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDE9eQotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU0OF9kZWZjb25maWcKaW5kZXggN2Y1NzljZi4uODVjZTZhOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NDhfZGVmY29uZmlnCkBAIC0zNDYsNyArMzQ2LDYgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiAjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9DTS1CRjU2MV9kZWZjb25maWcKaW5kZXggYTZkZjAxZC4uZGZiNTMwMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL0NNLUJGNTYxX2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvQ00tQkY1NjFfZGVmY29uZmlnCkBAIC0zMTgsNyArMzE4LDYgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiBDT05GSUdfU1lTQ0FMTF9UQUJfTDE9eQogQ09ORklHX0NQTEJfU1dJVENIX1RBQl9MMT15Ci1DT05GSUdfQVBQX1NUQUNLX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvUE5BVi0xMF9kZWZjb25maWcKaW5kZXggYWQ1OGZlZC4uMWMyMDcyZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1BOQVYtMTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9QTkFWLTEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi4yCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQKICMKK0NPTkZJR19TWU1CT0xfUFJFRklYPSJfIgogIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZQVSBpcyBub3Qgc2V0CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfS0VSTkVMX0daSVA9eQogIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OSwxMyArNTEsMTMgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTkyLDYgKzk0LDcgQEAKIENPTkZJR19NTUFQX0FMTE9XX1VOSU5JVElBTElaRUQ9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTk5LDYgKzEwMiw3IEBACiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTE1LDE0ICsxMTksNDEgQEAKICMgSU8gU2NoZWR1bGVycwogIwogQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CkBAIC0yNTUsOCArMjg2LDE2IEBACiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisKKyMKKyMgQ2xvY2sgZXZlbnQgZGV2aWNlCisjCiAjIENPTkZJR19USUNLU09VUkNFX0dQVE1SMCBpcyBub3Qgc2V0CiBDT05GSUdfVElDS1NPVVJDRV9DT1JFVE1SPXkKKworIworIyBDbG9jayBzb3VjZQorIwogIyBDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQVE1SMF9DTE9DS1NPVVJDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkBAIC0yODcsMTIgKzMyNiwxNiBAQAogQ09ORklHX0FDQ0VTU19PS19MMT15CiBDT05GSUdfTUVNU0VUX0wxPXkKIENPTkZJR19NRU1DUFlfTDE9eQorQ09ORklHX1NUUkNNUF9MMT15CitDT05GSUdfU1RSTkNNUF9MMT15CitDT05GSUdfU1RSQ1BZX0wxPXkKK0NPTkZJR19TVFJOQ1BZX0wxPXkKIENPTkZJR19TWVNfQkZJTl9TUElOTE9DS19MMT15CiBDT05GSUdfSVBfQ0hFQ0tTVU1fTDE9eQogQ09ORklHX0NBQ0hFTElORV9BTElHTkVEX0wxPXkKIENPTkZJR19TWVNDQUxMX1RBQl9MMT15CiBDT05GSUdfQ1BMQl9TV0lUQ0hfVEFCX0wxPXkKLUNPTkZJR19BUFBfU1RBQ0tfTDE9eQorQ09ORklHX0NBQ0hFX0ZMVVNIX0wxPXkKIAogIwogIyBTcGVlZCBPcHRpbWl6YXRpb25zCkBAIC0zOTIsNyArNDM1LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQpAQCAtNTYyLDYgKzYwNCwxMCBAQAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIwogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgpAQCAtNTc1LDYgKzYyMSw5IEBACiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNTkxLDYgKzY0MCw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKK0NPTkZJR19TQ1NJX01PRD15CiAjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldApAQCAtNjIyLDYgKzY3Miw3IEBACiAjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlDUkVMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjMwLDcgKzY4MSw2IEBACiAjIENPTkZJR19CRklOX01BQ19VU0VfTDEgaXMgbm90IHNldAogQ09ORklHX0JGSU5fVFhfREVTQ19OVU09MTAwCiBDT05GSUdfQkZJTl9SWF9ERVNDX05VTT0xMDAKLUNPTkZJR19CRklOX01BQ19STUlJPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldApAQCAtNjcxLDYgKzcyMSw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTY5MCw5ICs3NDEsOSBAQAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAogQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3Nz15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CkBAIC03MDksNiArNzYwLDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CkBAIC03MTYsOSArNzY4LDggQEAKICMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD15Ci0jIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FEWEwzNFggaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwpAQCAtNzYxLDYgKzgxMiw3IEBACiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldApAQCAtNzg4LDYgKzg0MCw3IEBACiAjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0CiAKICMKICMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwpAQCAtODAwLDE2ICs4NTMsOSBAQAogIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX01BU1RFUj15CiAKQEAgLTgyMSw2ICs4NjcsOCBAQAogIyBDT05GSUdfU1BJX0JGSU5fU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTg1MiwxMCArOTAwLDExIEBACiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC04NjcsNiArOTE2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC04OTIsNiArOTQyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CkBAIC05MDUsNiArOTU2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CkBAIC05MTgsMTkgKzk3MCwyMyBAQAogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC05NzMsNiArMTAyOSw3IEBACiAjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0w0RjAwMjQyVDAzIGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MTVMyODNHRjA1IGlzIG5vdCBzZXQKICMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CkBAIC05ODEsNiArMTAzOCw3IEBACiAjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQogQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9BRFA4ODcwIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxMSwxMSArMTA2OSw2IEBACiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1BJPXkKLQotIwotIyBBTFNBIEJsYWNrZmluIGRldmljZXMKLSMKLSMgQ09ORklHX1NORF9CRklOX0FENzMzMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKQEAgLTEwNzMsNiArMTEyNiw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTExMDEsNyArMTE1NSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTExMzcsNyArMTE5Myw2IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CkBAIC0xMTg2LDYgKzEyNDEsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjEwLDYgKzEyNjYsNyBAQAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTI3NiwxMSArMTMzMywxNCBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFSE9PS19TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKQEAgLTEzMDAsNiArMTM2MCw3IEBACiAjIENPTkZJR19DUExCX0lORk8gaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGSU5fSVNSQU1fU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGSU5fUFNFVURPREJHX0lOU05TIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzA5LDggKzEzNzAsMTIgQEAKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTE4X2RlZmNvbmZpZyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCmluZGV4IDRkMzFlMmEuLmNkZjRjMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vY29uZmlncy9UQ00tQkY1MThfZGVmY29uZmlnCkBAIC0zMzMsNyArMzMzLDYgQEAKIENPTkZJR19DQUNIRUxJTkVfQUxJR05FRF9MMT15CiAjIENPTkZJR19TWVNDQUxMX1RBQl9MMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDEgaXMgbm90IHNldAotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9jb25maWdzL1RDTS1CRjUzN19kZWZjb25maWcgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwppbmRleCA2MGFkZmFkLi4wMGYyMjFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL2NvbmZpZ3MvVENNLUJGNTM3X2RlZmNvbmZpZwpAQCAtMjg3LDcgKzI4Nyw2IEBACiBDT05GSUdfQ0FDSEVMSU5FX0FMSUdORURfTDE9eQogQ09ORklHX1NZU0NBTExfVEFCX0wxPXkKIENPTkZJR19DUExCX1NXSVRDSF9UQUJfTDE9eQotQ09ORklHX0FQUF9TVEFDS19MMT15CiAKICMKICMgU3BlZWQgT3B0aW1pemF0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCmluZGV4IGFiZGIyYWYuLjBiNjkxMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKQEAgLTIsNyArMiw3IEBACiAgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGludG8gcGxhdGZvcm1fZGF0YQogICogYW5kIHBsYWNlIHRoZSBiZmluLXJvdGFyeSBvbnRvIHBsYXRmb3JtX2J1cyBuYW1lZCAiYmZpbi1yb3RhcnkiLgogICoKLSAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpAQCAtNDAsNCArNDAsNzYgQEAKIAl1bnNpZ25lZCBzaG9ydCBkZWJvdW5jZTsJLyogMC4uMTcgKi8KIAl1bnNpZ25lZCBzaG9ydCBtb2RlOwogfTsKKworLyogQ05UX0NPTkZJRyBiaXRtYXNrcyAqLworI2RlZmluZSBDTlRFCQkoMSA8PCAwKQkvKiBDb3VudGVyIEVuYWJsZSAqLworI2RlZmluZSBERUJFCQkoMSA8PCAxKQkvKiBEZWJvdW5jZSBFbmFibGUgKi8KKyNkZWZpbmUgQ0RHSU5WCQkoMSA8PCA0KQkvKiBDREcgUGluIFBvbGFyaXR5IEludmVydCAqLworI2RlZmluZSBDVURJTlYJCSgxIDw8IDUpCS8qIENVRCBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCisjZGVmaW5lIENaTUlOVgkJKDEgPDwgNikJLyogQ1pNIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KKyNkZWZpbmUgQ05UTU9ERV9TSElGVAk4CisjZGVmaW5lIENOVE1PREUJCSgweDcgPDwgQ05UTU9ERV9TSElGVCkJLyogQ291bnRlciBPcGVyYXRpbmcgTW9kZSAqLworI2RlZmluZSBaTVpDCQkoMSA8PCAxKQkvKiBDWk0gWmVyb2VzIENvdW50ZXIgRW5hYmxlICovCisjZGVmaW5lIEJORE1PREVfU0hJRlQJMTIKKyNkZWZpbmUgQk5ETU9ERQkJKDB4MyA8PCBCTkRNT0RFX1NISUZUKQkvKiBCb3VuZGFyeSByZWdpc3RlciBNb2RlICovCisjZGVmaW5lIElOUERJUwkJKDEgPDwgMTUpCS8qIENVRyBhbmQgQ0RHIElucHV0IERpc2FibGUgKi8KKworI2RlZmluZSBDTlRNT0RFX1FVQURFTkMJKDAgPDwgQ05UTU9ERV9TSElGVCkJLyogcXVhZHJhdHVyZSBlbmNvZGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9CSU5FTkMJKDEgPDwgQ05UTU9ERV9TSElGVCkJLyogYmluYXJ5IGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBDTlRNT0RFX1VEQ05UCSgyIDw8IENOVE1PREVfU0hJRlQpCS8qIHVwL2Rvd24gY291bnRlciBtb2RlICovCisjZGVmaW5lIENOVE1PREVfRElSQ05UCSg0IDw8IENOVE1PREVfU0hJRlQpCS8qIGRpcmVjdGlvbiBjb3VudGVyIG1vZGUgKi8KKyNkZWZpbmUgQ05UTU9ERV9ESVJUTVIJKDUgPDwgQ05UTU9ERV9TSElGVCkJLyogZGlyZWN0aW9uIHRpbWVyIG1vZGUgKi8KKworI2RlZmluZSBCTkRNT0RFX0NPTVAJKDAgPDwgQk5ETU9ERV9TSElGVCkJLyogYm91bmRhcnkgY29tcGFyZSBtb2RlICovCisjZGVmaW5lIEJORE1PREVfWkVSTwkoMSA8PCBCTkRNT0RFX1NISUZUKQkvKiBib3VuZGFyeSBjb21wYXJlIGFuZCB6ZXJvIG1vZGUgKi8KKyNkZWZpbmUgQk5ETU9ERV9DQVBUCSgyIDw8IEJORE1PREVfU0hJRlQpCS8qIGJvdW5kYXJ5IGNhcHR1cmUgbW9kZSAqLworI2RlZmluZSBCTkRNT0RFX0FFWFQJKDMgPDwgQk5ETU9ERV9TSElGVCkJLyogYm91bmRhcnkgYXV0by1leHRlbmQgbW9kZSAqLworCisvKiBDTlRfSU1BU0sgYml0bWFza3MgKi8KKyNkZWZpbmUgSUNJRQkJKDEgPDwgMCkJLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgVUNJRQkJKDEgPDwgMSkJLyogVXAgY291bnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ0lFCQkoMSA8PCAyKQkvKiBEb3duIGNvdW50IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgTUlOQ0lFCQkoMSA8PCAzKQkvKiBNaW4gQ291bnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNQVhDSUUJCSgxIDw8IDQpCS8qIE1heCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIENPVjMxSUUJCSgxIDw8IDUpCS8qIEJpdCAzMSBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIENPVjE1SUUJCSgxIDw8IDYpCS8qIEJpdCAxNSBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIENaRVJPSUUJCSgxIDw8IDcpCS8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBDWk1JRQkJKDEgPDwgOCkJLyogQ1pNIFBpbiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIENaTUVJRQkJKDEgPDwgOSkJLyogQ1pNIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgQ1pNWklFCQkoMSA8PCAxMCkJLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBFbmFibGUgKi8KKworLyogQ05UX1NUQVRVUyBiaXRtYXNrcyAqLworI2RlZmluZSBJQ0lJCQkoMSA8PCAwKQkvKiBJbGxlZ2FsIEdyYXkvQmluYXJ5IENvZGUgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgVUNJSQkJKDEgPDwgMSkJLyogVXAgY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgRENJSQkJKDEgPDwgMikJLyogRG93biBjb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSBNSU5DSUkJCSgxIDw8IDMpCS8qIE1pbiBDb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSBNQVhDSUkJCSgxIDw8IDQpCS8qIE1heCBDb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLworI2RlZmluZSBDT1YzMUlJCQkoMSA8PCA1KQkvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgQ09WMTVJSQkJKDEgPDwgNikJLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBJZGVudGlmaWVyICovCisjZGVmaW5lIENaRVJPSUkJCSgxIDw8IDcpCS8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgQ1pNSUkJCSgxIDw8IDgpCS8qIENaTSBQaW4gSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgQ1pNRUlJCQkoMSA8PCA5KQkvKiBDWk0gRXJyb3IgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KKyNkZWZpbmUgQ1pNWklJCQkoMSA8PCAxMCkJLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBJZGVudGlmaWVyICovCisKKy8qIENOVF9DT01NQU5EIGJpdG1hc2tzICovCisjZGVmaW5lIFcxTENOVAkJMHhmCQkvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVzFMTUlOCQkweGYwCQkvKiBMb2FkIE1pbiBSZWdpc3RlciAqLworI2RlZmluZSBXMUxNQVgJCTB4ZjAwCQkvKiBMb2FkIE1heCBSZWdpc3RlciAqLworI2RlZmluZSBXMVpNT05DRQkoMSA8PCAxMikJLyogRW5hYmxlIENaTSBDbGVhciBDb3VudGVyIE9uY2UgKi8KKworI2RlZmluZSBXMUxDTlRfWkVSTwkoMSA8PCAwKQkvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTENOVF9NSU4JKDEgPDwgMikJLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01JTiAqLworI2RlZmluZSBXMUxDTlRfTUFYCSgxIDw8IDMpCS8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NQVggKi8KKworI2RlZmluZSBXMUxNSU5fWkVSTwkoMSA8PCA0KQkvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiB3aXRoIHplcm8gKi8KKyNkZWZpbmUgVzFMTUlOX0NOVAkoMSA8PCA1KQkvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9DT1VOVEVSICovCisjZGVmaW5lIFcxTE1JTl9NQVgJKDEgPDwgNykJLyogd3JpdGUgMSB0byBsb2FkIENOVF9NSU4gZnJvbSBDTlRfTUFYICovCisKKyNkZWZpbmUgVzFMTUFYX1pFUk8JKDEgPDwgOCkJLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggd2l0aCB6ZXJvICovCisjZGVmaW5lIFcxTE1BWF9DTlQJKDEgPDwgOSkJLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggZnJvbSBDTlRfQ09VTlRFUiAqLworI2RlZmluZSBXMUxNQVhfTUlOCSgxIDw8IDEwKQkvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCBmcm9tIENOVF9NSU4gKi8KKworLyogQ05UX0RFQk9VTkNFIGJpdG1hc2tzICovCisjZGVmaW5lIERQUkVTQ0FMRQkweGYJCS8qIExvYWQgQ291bnRlciBSZWdpc3RlciAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZGguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZGguaAppbmRleCBkNjFkNTQ5Li42YTRjZmUyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2RoLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NkaC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIGJmaW5fc2RoLmggLSBCbGFja2ZpbiBTREggZGVmaW5pdGlvbnMKKyAqIEJsYWNrZmluIFNlY3VyZSBEaWdpdGFsIEhvc3QgKFNESCkgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIF9fQkZJTl9TREhfSF9fCiAjZGVmaW5lIF9fQkZJTl9TREhfSF9fCiAKKy8qIFBsYXRmb3JtIHJlc291cmNlcyAqLwogc3RydWN0IGJmaW5fc2RfaG9zdCB7CiAJaW50IGRtYV9jaGFuOwogCWludCBpcnFfaW50MDsKQEAgLTE2LDQgKzE3LDExOCBAQAogCXUxNiBwaW5fcmVxWzddOwogfTsKIAorLyogU0RIX0NPTU1BTkQgYml0bWFza3MgKi8KKyNkZWZpbmUgQ01EX0lEWCAgICAgICAgICAgIDB4M2YgICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KKyNkZWZpbmUgQ01EX1JTUCAgICAgICAgICAgICgxIDw8IDYpICAgIC8qIFJlc3BvbnNlICovCisjZGVmaW5lIENNRF9MX1JTUCAgICAgICAgICAoMSA8PCA3KSAgICAvKiBMb25nIFJlc3BvbnNlICovCisjZGVmaW5lIENNRF9JTlRfRSAgICAgICAgICAoMSA8PCA4KSAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLworI2RlZmluZSBDTURfUEVORF9FICAgICAgICAgKDEgPDwgOSkgICAgLyogQ29tbWFuZCBQZW5kaW5nICovCisjZGVmaW5lIENNRF9FICAgICAgICAgICAgICAoMSA8PCAxMCkgICAvKiBDb21tYW5kIEVuYWJsZSAqLworCisvKiBTREhfUFdSX0NUTCBiaXRtYXNrcyAqLworI2RlZmluZSBQV1JfT04gICAgICAgICAgICAgMHgzICAgICAgICAgLyogUG93ZXIgT24gKi8KKyNkZWZpbmUgU0RfQ01EX09EICAgICAgICAgICgxIDw8IDYpICAgIC8qIE9wZW4gRHJhaW4gT3V0cHV0ICovCisjZGVmaW5lIFJPRF9DVEwgICAgICAgICAgICAoMSA8PCA3KSAgICAvKiBSb2QgQ29udHJvbCAqLworCisvKiBTREhfQ0xLX0NUTCBiaXRtYXNrcyAqLworI2RlZmluZSBDTEtESVYgICAgICAgICAgICAgMHhmZiAgICAgICAgLyogTUNfQ0xLIERpdmlzb3IgKi8KKyNkZWZpbmUgQ0xLX0UgICAgICAgICAgICAgICgxIDw8IDgpICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCisjZGVmaW5lIFBXUl9TVl9FICAgICAgICAgICAoMSA8PCA5KSAgICAvKiBQb3dlciBTYXZlIEVuYWJsZSAqLworI2RlZmluZSBDTEtESVZfQllQQVNTICAgICAgKDEgPDwgMTApICAgLyogQnlwYXNzIERpdmlzb3IgKi8KKyNkZWZpbmUgV0lERV9CVVMgICAgICAgICAgICgxIDw8IDExKSAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCisKKy8qIFNESF9SRVNQX0NNRCBiaXRtYXNrcyAqLworI2RlZmluZSBSRVNQX0NNRCAgICAgICAgICAgMHgzZiAgICAgICAgLyogUmVzcG9uc2UgQ29tbWFuZCAqLworCisvKiBTREhfREFUQV9DVEwgYml0bWFza3MgKi8KKyNkZWZpbmUgRFRYX0UgICAgICAgICAgICAgICgxIDw8IDApICAgIC8qIERhdGEgVHJhbnNmZXIgRW5hYmxlICovCisjZGVmaW5lIERUWF9ESVIgICAgICAgICAgICAoMSA8PCAxKSAgICAvKiBEYXRhIFRyYW5zZmVyIERpcmVjdGlvbiAqLworI2RlZmluZSBEVFhfTU9ERSAgICAgICAgICAgKDEgPDwgMikgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCisjZGVmaW5lIERUWF9ETUFfRSAgICAgICAgICAoMSA8PCAzKSAgICAvKiBEYXRhIFRyYW5zZmVyIERNQSBFbmFibGUgKi8KKyNkZWZpbmUgRFRYX0JMS19MR1RIICAgICAgICgweGYgPDwgNCkgIC8qIERhdGEgVHJhbnNmZXIgQmxvY2sgTGVuZ3RoICovCisKKy8qIFNESF9TVEFUVVMgYml0bWFza3MgKi8KKyNkZWZpbmUgQ01EX0NSQ19GQUlMICAgICAgICgxIDw8IDApICAgIC8qIENNRCBDUkMgRmFpbCAqLworI2RlZmluZSBEQVRfQ1JDX0ZBSUwgICAgICAgKDEgPDwgMSkgICAgLyogRGF0YSBDUkMgRmFpbCAqLworI2RlZmluZSBDTURfVElNRV9PVVQgICAgICAgKDEgPDwgMikgICAgLyogQ01EIFRpbWUgT3V0ICovCisjZGVmaW5lIERBVF9USU1FX09VVCAgICAgICAoMSA8PCAzKSAgICAvKiBEYXRhIFRpbWUgT3V0ICovCisjZGVmaW5lIFRYX1VOREVSUlVOICAgICAgICAoMSA8PCA0KSAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biAqLworI2RlZmluZSBSWF9PVkVSUlVOICAgICAgICAgKDEgPDwgNSkgICAgLyogUmVjZWl2ZSBPdmVycnVuICovCisjZGVmaW5lIENNRF9SRVNQX0VORCAgICAgICAoMSA8PCA2KSAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCisjZGVmaW5lIENNRF9TRU5UICAgICAgICAgICAoMSA8PCA3KSAgICAvKiBDTUQgU2VudCAqLworI2RlZmluZSBEQVRfRU5EICAgICAgICAgICAgKDEgPDwgOCkgICAgLyogRGF0YSBFbmQgKi8KKyNkZWZpbmUgU1RBUlRfQklUX0VSUiAgICAgICgxIDw8IDkpICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLworI2RlZmluZSBEQVRfQkxLX0VORCAgICAgICAgKDEgPDwgMTApICAgLyogRGF0YSBCbG9jayBFbmQgKi8KKyNkZWZpbmUgQ01EX0FDVCAgICAgICAgICAgICgxIDw8IDExKSAgIC8qIENNRCBBY3RpdmUgKi8KKyNkZWZpbmUgVFhfQUNUICAgICAgICAgICAgICgxIDw8IDEyKSAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLworI2RlZmluZSBSWF9BQ1QgICAgICAgICAgICAgKDEgPDwgMTMpICAgLyogUmVjZWl2ZSBBY3RpdmUgKi8KKyNkZWZpbmUgVFhfRklGT19TVEFUICAgICAgICgxIDw8IDE0KSAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzICovCisjZGVmaW5lIFJYX0ZJRk9fU1RBVCAgICAgICAoMSA8PCAxNSkgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCisjZGVmaW5lIFRYX0ZJRk9fRlVMTCAgICAgICAoMSA8PCAxNikgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgKi8KKyNkZWZpbmUgUlhfRklGT19GVUxMICAgICAgICgxIDw8IDE3KSAgIC8qIFJlY2VpdmUgRklGTyBGdWxsICovCisjZGVmaW5lIFRYX0ZJRk9fWkVSTyAgICAgICAoMSA8PCAxOCkgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCisjZGVmaW5lIFJYX0RBVF9aRVJPICAgICAgICAoMSA8PCAxOSkgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgKi8KKyNkZWZpbmUgVFhfREFUX1JEWSAgICAgICAgICgxIDw8IDIwKSAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlICovCisjZGVmaW5lIFJYX0ZJRk9fUkRZICAgICAgICAoMSA8PCAyMSkgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCisKKy8qIFNESF9TVEFUVVNfQ0xSIGJpdG1hc2tzICovCisjZGVmaW5lIENNRF9DUkNfRkFJTF9TVEFUICAoMSA8PCAwKSAgICAvKiBDTUQgQ1JDIEZhaWwgU3RhdHVzICovCisjZGVmaW5lIERBVF9DUkNfRkFJTF9TVEFUICAoMSA8PCAxKSAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLworI2RlZmluZSBDTURfVElNRU9VVF9TVEFUICAgKDEgPDwgMikgICAgLyogQ01EIFRpbWUgT3V0IFN0YXR1cyAqLworI2RlZmluZSBEQVRfVElNRU9VVF9TVEFUICAgKDEgPDwgMykgICAgLyogRGF0YSBUaW1lIE91dCBzdGF0dXMgKi8KKyNkZWZpbmUgVFhfVU5ERVJSVU5fU1RBVCAgICgxIDw8IDQpICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLworI2RlZmluZSBSWF9PVkVSUlVOX1NUQVQgICAgKDEgPDwgNSkgICAgLyogUmVjZWl2ZSBPdmVycnVuIFN0YXR1cyAqLworI2RlZmluZSBDTURfUkVTUF9FTkRfU1RBVCAgKDEgPDwgNikgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBTdGF0dXMgKi8KKyNkZWZpbmUgQ01EX1NFTlRfU1RBVCAgICAgICgxIDw8IDcpICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLworI2RlZmluZSBEQVRfRU5EX1NUQVQgICAgICAgKDEgPDwgOCkgICAgLyogRGF0YSBFbmQgU3RhdHVzICovCisjZGVmaW5lIFNUQVJUX0JJVF9FUlJfU1RBVCAoMSA8PCA5KSAgICAvKiBTdGFydCBCaXQgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIERBVF9CTEtfRU5EX1NUQVQgICAoMSA8PCAxMCkgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KKworLyogU0RIX01BU0swIGJpdG1hc2tzICovCisjZGVmaW5lIENNRF9DUkNfRkFJTF9NQVNLICAoMSA8PCAwKSAgICAvKiBDTUQgQ1JDIEZhaWwgTWFzayAqLworI2RlZmluZSBEQVRfQ1JDX0ZBSUxfTUFTSyAgKDEgPDwgMSkgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCisjZGVmaW5lIENNRF9USU1FT1VUX01BU0sgICAoMSA8PCAyKSAgICAvKiBDTUQgVGltZSBPdXQgTWFzayAqLworI2RlZmluZSBEQVRfVElNRU9VVF9NQVNLICAgKDEgPDwgMykgICAgLyogRGF0YSBUaW1lIE91dCBNYXNrICovCisjZGVmaW5lIFRYX1VOREVSUlVOX01BU0sgICAoMSA8PCA0KSAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCisjZGVmaW5lIFJYX09WRVJSVU5fTUFTSyAgICAoMSA8PCA1KSAgICAvKiBSZWNlaXZlIE92ZXJydW4gTWFzayAqLworI2RlZmluZSBDTURfUkVTUF9FTkRfTUFTSyAgKDEgPDwgNikgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBNYXNrICovCisjZGVmaW5lIENNRF9TRU5UX01BU0sgICAgICAoMSA8PCA3KSAgICAvKiBDTUQgU2VudCBNYXNrICovCisjZGVmaW5lIERBVF9FTkRfTUFTSyAgICAgICAoMSA8PCA4KSAgICAvKiBEYXRhIEVuZCBNYXNrICovCisjZGVmaW5lIFNUQVJUX0JJVF9FUlJfTUFTSyAoMSA8PCA5KSAgICAvKiBTdGFydCBCaXQgRXJyb3IgTWFzayAqLworI2RlZmluZSBEQVRfQkxLX0VORF9NQVNLICAgKDEgPDwgMTApICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLworI2RlZmluZSBDTURfQUNUX01BU0sgICAgICAgKDEgPDwgMTEpICAgLyogQ01EIEFjdGl2ZSBNYXNrICovCisjZGVmaW5lIFRYX0FDVF9NQVNLICAgICAgICAoMSA8PCAxMikgICAvKiBUcmFuc21pdCBBY3RpdmUgTWFzayAqLworI2RlZmluZSBSWF9BQ1RfTUFTSyAgICAgICAgKDEgPDwgMTMpICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLworI2RlZmluZSBUWF9GSUZPX1NUQVRfTUFTSyAgKDEgPDwgMTQpICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgTWFzayAqLworI2RlZmluZSBSWF9GSUZPX1NUQVRfTUFTSyAgKDEgPDwgMTUpICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lIFRYX0ZJRk9fRlVMTF9NQVNLICAoMSA8PCAxNikgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSBSWF9GSUZPX0ZVTExfTUFTSyAgKDEgPDwgMTcpICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgTWFzayAqLworI2RlZmluZSBUWF9GSUZPX1pFUk9fTUFTSyAgKDEgPDwgMTgpICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBNYXNrICovCisjZGVmaW5lIFJYX0RBVF9aRVJPX01BU0sgICAoMSA8PCAxOSkgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLworI2RlZmluZSBUWF9EQVRfUkRZX01BU0sgICAgKDEgPDwgMjApICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgTWFzayAqLworI2RlZmluZSBSWF9GSUZPX1JEWV9NQVNLICAgKDEgPDwgMjEpICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBNYXNrICovCisKKy8qIFNESF9GSUZPX0NOVCBiaXRtYXNrcyAqLworI2RlZmluZSBGSUZPX0NPVU5UICAgICAgICAgMHg3ZmZmICAgICAgLyogRklGTyBDb3VudCAqLworCisvKiBTREhfRV9TVEFUVVMgYml0bWFza3MgKi8KKyNkZWZpbmUgU0RJT19JTlRfREVUICAgICAgICgxIDw8IDEpICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lIFNEX0NBUkRfREVUICAgICAgICAoMSA8PCA0KSAgICAvKiBTRCBDYXJkIERldGVjdCAqLworCisvKiBTREhfRV9NQVNLIGJpdG1hc2tzICovCisjZGVmaW5lIFNESU9fTVNLICAgICAgICAgICAoMSA8PCAxKSAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCisjZGVmaW5lIFNDRF9NU0sgICAgICAgICAgICAoMSA8PCA2KSAgICAvKiBNYXNrIENhcmQgRGV0ZWN0ICovCisKKy8qIFNESF9DRkcgYml0bWFza3MgKi8KKyNkZWZpbmUgQ0xLU19FTiAgICAgICAgICAgICgxIDw8IDApICAgIC8qIENsb2NrcyBFbmFibGUgKi8KKyNkZWZpbmUgU0Q0RSAgICAgICAgICAgICAgICgxIDw8IDIpICAgIC8qIFNESU8gNC1CaXQgRW5hYmxlICovCisjZGVmaW5lIE1XRSAgICAgICAgICAgICAgICAoMSA8PCAzKSAgICAvKiBNb3ZpbmcgV2luZG93IEVuYWJsZSAqLworI2RlZmluZSBTRF9SU1QgICAgICAgICAgICAgKDEgPDwgNCkgICAgLyogU0RNTUMgUmVzZXQgKi8KKyNkZWZpbmUgUFVQX1NEREFUICAgICAgICAgICgxIDw8IDUpICAgIC8qIFB1bGwtdXAgU0RfREFUICovCisjZGVmaW5lIFBVUF9TRERBVDMgICAgICAgICAoMSA8PCA2KSAgICAvKiBQdWxsLXVwIFNEX0RBVDMgKi8KKyNkZWZpbmUgUERfU0REQVQzICAgICAgICAgICgxIDw8IDcpICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCisKKy8qIFNESF9SRF9XQUlUX0VOIGJpdG1hc2tzICovCisjZGVmaW5lIFJXUiAgICAgICAgICAgICAgICAoMSA8PCAwKSAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDYwNWJhOGUuLmQ1ODcyY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMTE5LDcgKzExOSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHJlczsKIAotCV9fYXNtX18gKCIlMC5sID0gT05FUyAlMDsiCisJX19hc21fXyAoIiUwLmwgPSBPTkVTICUxOyIKIAkJIiUwID0gJTAubCAoWik7IgogCQk6ICI9ZCIgKHJlcykgOiAiZCIgKHcpKTsKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDkzZjZjNjMuLmJkMDY0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCiAjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUwlMMV9DQUNIRV9CWVRFUwogCi0jZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTglMMV9DQUNIRV9CWVRFUworI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTglMMV9DQUNIRV9CWVRFUwogCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBfX2NhY2hlbGluZV9hbGlnbmVkCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaAppbmRleCA4Nzc4ZTBmLi42YzM5ZDk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKQEAgLTIxNiwxMiArMjE2LDE2IEBACiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUMTQodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUMTQsdmFsKQogI2RlZmluZSBiZmluX3JlYWRfRVZUMTUoKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRVZUMTUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRVZUMTUodmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoRVZUMTUsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRVZUX09WRVJSSURFKCkgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRVZUX09WRVJSSURFKQorI2RlZmluZSBiZmluX3dyaXRlX0VWVF9PVkVSUklERSh2YWwpICAgICAgICAgYmZpbl93cml0ZTMyKEVWVF9PVkVSUklERSx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9JTUFTSygpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihJTUFTSykKICNkZWZpbmUgYmZpbl93cml0ZV9JTUFTSyh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihJTUFTSyx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9JUEVORCgpICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihJUEVORCkKICNkZWZpbmUgYmZpbl93cml0ZV9JUEVORCh2YWwpICAgICAgICAgICAgICAgIGJmaW5fd3JpdGUzMihJUEVORCx2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9JTEFUKCkgICAgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihJTEFUKQogI2RlZmluZSBiZmluX3dyaXRlX0lMQVQodmFsKSAgICAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKElMQVQsdmFsKQorI2RlZmluZSBiZmluX3JlYWRfSVBSSU8oKSAgICAgICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoSVBSSU8pCisjZGVmaW5lIGJmaW5fd3JpdGVfSVBSSU8odmFsKSAgICAgICAgICAgICAgICBiZmluX3dyaXRlMzIoSVBSSU8sdmFsKQogCiAvKkNvcmUgVGltZXIgUmVnaXN0ZXJzKi8KICNkZWZpbmUgYmZpbl9yZWFkX1RDTlRMKCkgICAgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDMyKFRDTlRMKQpAQCAtMjk5LDggKzMwMyw0IEBACiAjZGVmaW5lIGJmaW5fcmVhZF9QRkNOVFIxKCkgICAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihQRkNOVFIxKQogI2RlZmluZSBiZmluX3dyaXRlX1BGQ05UUjEodmFsKSAgICAgICAgICAgICAgYmZpbl93cml0ZTMyKFBGQ05UUjEsdmFsKQogCi0vKgotI2RlZmluZSBJUFJJTyAgICAgICAgICAgICAgICAgIDB4RkZFMDIxMTAKLSovCi0KICNlbmRpZgkJCQkvKiBfQ0RFRl9MUEJMQUNLRklOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAppbmRleCBmMzQyZmYwLi5lM2YwZjRjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCkBAIC01MCw2ICs1MCwyMyBAQAogI2RlZmluZSBiZmluX3dyaXRlMTYoYWRkciwgdmFsKSBfYmZpbl93cml0ZVgoYWRkciwgdmFsLCAxNiwgdykKICNkZWZpbmUgYmZpbl93cml0ZTMyKGFkZHIsIHZhbCkgX2JmaW5fd3JpdGVYKGFkZHIsIHZhbCwgMzIsICApCiAKKyNkZWZpbmUgYmZpbl9yZWFkKGFkZHIpIFwKKyh7IFwKKyAgICBzaXplb2YoKihhZGRyKSkgPT0gMSA/IGJmaW5fcmVhZDgoYWRkcikgIDogXAorICAgIHNpemVvZigqKGFkZHIpKSA9PSAyID8gYmZpbl9yZWFkMTYoYWRkcikgOiBcCisgICAgc2l6ZW9mKCooYWRkcikpID09IDQgPyBiZmluX3JlYWQzMihhZGRyKSA6IFwKKyAgICAoeyBCVUcoKTsgMDsgfSk7IFwKK30pCisjZGVmaW5lIGJmaW5fd3JpdGUoYWRkciwgdmFsKSBcCisoeyBcCisJc3dpdGNoIChzaXplb2YoKihhZGRyKSkpIHsgXAorCWNhc2UgMTogYmZpbl93cml0ZTgoYWRkciwgdmFsKTsgIGJyZWFrOyBcCisJY2FzZSAyOiBiZmluX3dyaXRlMTYoYWRkciwgdmFsKTsgYnJlYWs7IFwKKwljYXNlIDQ6IGJmaW5fd3JpdGUzMihhZGRyLCB2YWwpOyBicmVhazsgXAorCWRlZmF1bHQ6IEJVRygpOyBcCisJfSBcCit9KQorCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzc3LDYgKzM5NCw3IEBACiAjZGVmaW5lIEVWVDEzICAgICAgICAgICAgICAweEZGRTAyMDM0CS8qIEV2ZW50IFZlY3RvciAxMyBFU1IgQWRkcmVzcyAqLwogI2RlZmluZSBFVlQxNCAgICAgICAgICAgICAgMHhGRkUwMjAzOAkvKiBFdmVudCBWZWN0b3IgMTQgRVNSIEFkZHJlc3MgKi8KICNkZWZpbmUgRVZUMTUgICAgICAgICAgICAgIDB4RkZFMDIwM0MJLyogRXZlbnQgVmVjdG9yIDE1IEVTUiBBZGRyZXNzICovCisjZGVmaW5lIEVWVF9PVkVSUklERSAgICAgICAweEZGRTAyMTAwCS8qIEV2ZW50IFZlY3RvciBPdmVycmlkZSBSZWdpc3RlciAqLwogI2RlZmluZSBJTUFTSyAgICAgICAgICAgICAgMHhGRkUwMjEwNAkvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBJUEVORCAgICAgICAgICAgICAgMHhGRkUwMjEwOAkvKiBJbnRlcnJ1cHQgUGVuZGluZyBSZWdpc3RlciAqLwogI2RlZmluZSBJTEFUICAgICAgICAgICAgICAgMHhGRkUwMjEwQwkvKiBJbnRlcnJ1cHQgTGF0Y2ggUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAyMTJjYjgwZi4uYmJmNDYxMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMjEsOCArMjEsNiBAQAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCiAjZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZCwgbSkgICAgICAgICAoMSkKLSNkZWZpbmUgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQoKSAgICgzMikKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkgICAgICgxKQogCiBzdGF0aWMgaW5saW5lIGludAogZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLmgKaW5kZXggMmMwOWIxZC4uZWVkZjNjYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0yNzYsNiArMjc2LDcgQEAKIH0KIAogdm9pZCAqZG1hX21lbWNweSh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudCk7Cit2b2lkICpkbWFfbWVtY3B5X25vY2FjaGUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpOwogdm9pZCAqc2FmZV9kbWFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KTsKIHZvaWQgYmxhY2tmaW5fZG1hX2Vhcmx5X2luaXQodm9pZCk7CiB2b2lkIGVhcmx5X2RtYV9tZW1jcHkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgY291bnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMTE3NzEzYS4uZTZjNjgxMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMTksNiArMTE5LDcgQEAKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJXAogICAgICAgICBtZW1jcHkoKGNoYXIgKikgJnByX3JlZywgKGNoYXIgKilyZWdzLCAgXAogICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKC4uLikgMAkvKiBCbGFja2ZpbiBoYXMgbm8gRlBVICovCiAKIC8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKICAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCA0Y2ZlMmQ5Li44YTAyOTUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTEyLDYgKzEyLDIyIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKKworZXh0ZXJuIHZvaWQgX21jb3VudCh2b2lkKTsKKyNkZWZpbmUgTUNPVU5UX0FERFIgKCh1bnNpZ25lZCBsb25nKV9tY291bnQpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBmdHJhY2VfY2FsbF9hZGp1c3QodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyOworfQorCitzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKKwkvKiBObyBleHRyYSBkYXRhIG5lZWRlZCBmb3IgQmxhY2tmaW4gKi8KK307CisKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IDAxYjE5ZDAuLjFlZjg0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC03LDYzICs3LDYzIEBACiAjaWZuZGVmIF9fQVJDSF9CTEFDS0ZJTl9HUElPX0hfXwogI2RlZmluZSBfX0FSQ0hfQkxBQ0tGSU5fR1BJT19IX18KIAotI2RlZmluZSBncGlvX2JhbmsoeCkgCSgoeCkgPj4gNCkKLSNkZWZpbmUgZ3Bpb19iaXQoeCkgIAkoMTw8KCh4KSAmIDB4RikpCi0jZGVmaW5lIGdwaW9fc3ViX24oeCkgCSgoeCkgJiAweEYpCisjZGVmaW5lIGdwaW9fYmFuayh4KQkoKHgpID4+IDQpCisjZGVmaW5lIGdwaW9fYml0KHgpCSgxPDwoKHgpICYgMHhGKSkKKyNkZWZpbmUgZ3Bpb19zdWJfbih4KQkoKHgpICYgMHhGKQogCi0jZGVmaW5lIEdQSU9fQkFOS1NJWkUgCTE2Ci0jZGVmaW5lIEdQSU9fQkFOS19OVU0gCURJVl9ST1VORF9VUChNQVhfQkxBQ0tGSU5fR1BJT1MsIEdQSU9fQkFOS1NJWkUpCisjZGVmaW5lIEdQSU9fQkFOS1NJWkUJMTYKKyNkZWZpbmUgR1BJT19CQU5LX05VTQlESVZfUk9VTkRfVVAoTUFYX0JMQUNLRklOX0dQSU9TLCBHUElPX0JBTktTSVpFKQogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKLSNkZWZpbmUJR1BJT18wCTAKLSNkZWZpbmUJR1BJT18xCTEKLSNkZWZpbmUJR1BJT18yCTIKLSNkZWZpbmUJR1BJT18zCTMKLSNkZWZpbmUJR1BJT180CTQKLSNkZWZpbmUJR1BJT181CTUKLSNkZWZpbmUJR1BJT182CTYKLSNkZWZpbmUJR1BJT183CTcKLSNkZWZpbmUJR1BJT184CTgKLSNkZWZpbmUJR1BJT185CTkKLSNkZWZpbmUJR1BJT18xMAkxMAotI2RlZmluZQlHUElPXzExCTExCi0jZGVmaW5lCUdQSU9fMTIJMTIKLSNkZWZpbmUJR1BJT18xMwkxMwotI2RlZmluZQlHUElPXzE0CTE0Ci0jZGVmaW5lCUdQSU9fMTUJMTUKLSNkZWZpbmUJR1BJT18xNgkxNgotI2RlZmluZQlHUElPXzE3CTE3Ci0jZGVmaW5lCUdQSU9fMTgJMTgKLSNkZWZpbmUJR1BJT18xOQkxOQotI2RlZmluZQlHUElPXzIwCTIwCi0jZGVmaW5lCUdQSU9fMjEJMjEKLSNkZWZpbmUJR1BJT18yMgkyMgotI2RlZmluZQlHUElPXzIzCTIzCi0jZGVmaW5lCUdQSU9fMjQJMjQKLSNkZWZpbmUJR1BJT18yNQkyNQotI2RlZmluZQlHUElPXzI2CTI2Ci0jZGVmaW5lCUdQSU9fMjcJMjcKLSNkZWZpbmUJR1BJT18yOAkyOAotI2RlZmluZQlHUElPXzI5CTI5Ci0jZGVmaW5lCUdQSU9fMzAJMzAKLSNkZWZpbmUJR1BJT18zMQkzMQotI2RlZmluZQlHUElPXzMyCTMyCi0jZGVmaW5lCUdQSU9fMzMJMzMKLSNkZWZpbmUJR1BJT18zNAkzNAotI2RlZmluZQlHUElPXzM1CTM1Ci0jZGVmaW5lCUdQSU9fMzYJMzYKLSNkZWZpbmUJR1BJT18zNwkzNwotI2RlZmluZQlHUElPXzM4CTM4Ci0jZGVmaW5lCUdQSU9fMzkJMzkKLSNkZWZpbmUJR1BJT180MAk0MAotI2RlZmluZQlHUElPXzQxCTQxCi0jZGVmaW5lCUdQSU9fNDIJNDIKLSNkZWZpbmUJR1BJT180Mwk0MwotI2RlZmluZQlHUElPXzQ0CTQ0Ci0jZGVmaW5lCUdQSU9fNDUJNDUKLSNkZWZpbmUJR1BJT180Ngk0NgotI2RlZmluZQlHUElPXzQ3CTQ3CisjZGVmaW5lIEdQSU9fMAkwCisjZGVmaW5lIEdQSU9fMQkxCisjZGVmaW5lIEdQSU9fMgkyCisjZGVmaW5lIEdQSU9fMwkzCisjZGVmaW5lIEdQSU9fNAk0CisjZGVmaW5lIEdQSU9fNQk1CisjZGVmaW5lIEdQSU9fNgk2CisjZGVmaW5lIEdQSU9fNwk3CisjZGVmaW5lIEdQSU9fOAk4CisjZGVmaW5lIEdQSU9fOQk5CisjZGVmaW5lIEdQSU9fMTAJMTAKKyNkZWZpbmUgR1BJT18xMQkxMQorI2RlZmluZSBHUElPXzEyCTEyCisjZGVmaW5lIEdQSU9fMTMJMTMKKyNkZWZpbmUgR1BJT18xNAkxNAorI2RlZmluZSBHUElPXzE1CTE1CisjZGVmaW5lIEdQSU9fMTYJMTYKKyNkZWZpbmUgR1BJT18xNwkxNworI2RlZmluZSBHUElPXzE4CTE4CisjZGVmaW5lIEdQSU9fMTkJMTkKKyNkZWZpbmUgR1BJT18yMAkyMAorI2RlZmluZSBHUElPXzIxCTIxCisjZGVmaW5lIEdQSU9fMjIJMjIKKyNkZWZpbmUgR1BJT18yMwkyMworI2RlZmluZSBHUElPXzI0CTI0CisjZGVmaW5lIEdQSU9fMjUJMjUKKyNkZWZpbmUgR1BJT18yNgkyNgorI2RlZmluZSBHUElPXzI3CTI3CisjZGVmaW5lIEdQSU9fMjgJMjgKKyNkZWZpbmUgR1BJT18yOQkyOQorI2RlZmluZSBHUElPXzMwCTMwCisjZGVmaW5lIEdQSU9fMzEJMzEKKyNkZWZpbmUgR1BJT18zMgkzMgorI2RlZmluZSBHUElPXzMzCTMzCisjZGVmaW5lIEdQSU9fMzQJMzQKKyNkZWZpbmUgR1BJT18zNQkzNQorI2RlZmluZSBHUElPXzM2CTM2CisjZGVmaW5lIEdQSU9fMzcJMzcKKyNkZWZpbmUgR1BJT18zOAkzOAorI2RlZmluZSBHUElPXzM5CTM5CisjZGVmaW5lIEdQSU9fNDAJNDAKKyNkZWZpbmUgR1BJT180MQk0MQorI2RlZmluZSBHUElPXzQyCTQyCisjZGVmaW5lIEdQSU9fNDMJNDMKKyNkZWZpbmUgR1BJT180NAk0NAorI2RlZmluZSBHUElPXzQ1CTQ1CisjZGVmaW5lIEdQSU9fNDYJNDYKKyNkZWZpbmUgR1BJT180Nwk0NwogCiAjZGVmaW5lIFBFUklQSEVSQUxfVVNBR0UgMQogI2RlZmluZSBHUElPX1VTQUdFIDAKQEAgLTI3OSw2ICsyNzksMTEgQEAKIAlyZXR1cm4gYmZpbl9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywgdmFsdWUpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBncGlvX3NldF9kZWJvdW5jZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKIHsKIAlyZXR1cm4gYmZpbl9ncGlvX2dldF92YWx1ZShncGlvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaAppbmRleCAyOWU1NWI5Li4yMzRmYmFjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCkBAIC0xMjQsNyArMTI0LDEzIEBACiAjZGVmaW5lIGlvd3JpdGUxNih2YWwsIHgpCQl3cml0ZXcodmFsLCB4KQogI2RlZmluZSBpb3dyaXRlMzIodmFsLCB4KQkJd3JpdGVsKHZhbCwgeCkKIAotI2RlZmluZSBtbWlvd2IoKSB3bWIoKQorLyoqCisgKiBJL08gd3JpdGUgYmFycmllcgorICoKKyAqIEVuc3VyZSBvcmRlcmluZyBvZiBJL08gc3BhY2Ugd3JpdGVzLiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgd3JpdGVzCisgKiBmb2xsb3dpbmcgdGhlIGJhcnJpZXIgd2lsbCBhcnJpdmUgYWZ0ZXIgYWxsIHByZXZpb3VzIHdyaXRlcy4KKyAqLworI2RlZmluZSBtbWlvd2IoKSBkbyB7IFNTWU5DKCk7IHdtYigpOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbWVtX2luaXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbWVtX2luaXQuaAppbmRleCA3YzhmZTgzLi4yMzc1Nzk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21lbV9pbml0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tZW1faW5pdC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTUVNX01UNDhMQzE2TTE2QTJUR183NSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01FTV9NVDQ4TEM2NE00QTJGQl83RSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01FTV9NVDQ4TEMxNk04QTJUR183NSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX01FTV9HRU5FUklDX0JPQVJEKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTUVNX01UNDhMQzMyTThBMl83NSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01FTV9NVDQ4TEM4TTMyQjJCNV83KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTUVNX01UNDhMQzMyTTE2QTJUR183NSkgfHwgXApAQCAtMTc4LDcgKzE3Nyw2IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NRU1fTVQ0OExDMzJNOEEyXzc1KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTUVNX01UNDhMQzY0TTRBMkZCXzdFKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTUVNX0dFTkVSSUNfQk9BUkQpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19NRU1fTVQ0OExDMzJNMTZBMlRHXzc1KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTUVNX01UNDhMQzE2TTE2QTJUR183NSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX01FTV9NVDQ4TEMzMk04QTJfNzUpCkBAIC0yNDgsMjIgKzI0Niw2IEBACiAjZGVmaW5lIEREUl90V1IJCUREUl9UV1IoTUlOX0REUl9TQ0xLKDE1KSkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTUVNX0dFTkVSSUNfQk9BUkQpCi0jZGVmaW5lIEREUl9TSVpFCURFVlNaXzUxMgotI2RlZmluZSBERFJfV0lEVEgJREVWV0RfMTYKLSNkZWZpbmUgRERSX01BWF90Q0sJMTMKLQotI2RlZmluZSBERFJfdFJDRAlERFJfVFJDRCgzKQotI2RlZmluZSBERFJfdFdUUglERFJfVFdUUigyKQotI2RlZmluZSBERFJfdFdSCQlERFJfVFdSKDIpCi0jZGVmaW5lIEREUl90TVJECUREUl9UTVJEKDIpCi0jZGVmaW5lIEREUl90UlAJCUREUl9UUlAoMykKLSNkZWZpbmUgRERSX3RSQVMJRERSX1RSQVMoNykKLSNkZWZpbmUgRERSX3RSQwkJRERSX1RSQygxMCkKLSNkZWZpbmUgRERSX3RSRkMJRERSX1RSRkMoMTIpCi0jZGVmaW5lIEREUl90UkVGSQlERFJfVFJFRkkoMTI4OCkKLSNlbmRpZgotCiAjaWYgKENPTkZJR19TQ0xLX0haIDwgRERSX0NMS19IWihERFJfTUFYX3RDSykpCiAjIGVycm9yICJDT05GSUdfU0NMS19IWiBpcyB0b28gc21hbGwgKDxERFJfQ0xLX0haKEREUl9NQVhfdENLKSBIeikuIgogI2VsaWYoQ09ORklHX1NDTEtfSFogPD0gMTMzMzMzMzMzKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAppbmRleCAzYTFlNzlkLi4yNTZjNTBkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaApAQCAtMTUsOCArMTUsNiBAQAogICogcGFydGl0aW9ucwkgPSBtdGQgcGFydGl0aW9uIGxpc3QKICAqLwogCi0jZGVmaW5lIE5GQ19QR19TSVpFXzI1NgkJMAotI2RlZmluZSBORkNfUEdfU0laRV81MTIJCTEKICNkZWZpbmUgTkZDX1BHX1NJWkVfT0ZGU0VUCTkKIAogI2RlZmluZSBORkNfTldJRFRIXzgJCTAKQEAgLTMwLDcgKzI4LDYgQEAKIAogc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0gewogCS8qIE5BTkQgY2hpcCBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIHNob3J0CQlwYWdlX3NpemU7CiAJdW5zaWduZWQgc2hvcnQJCWRhdGFfd2lkdGg7CiAKIAkvKiBSRC9XUiBzdHJvYmUgZGVsYXkgdGltaW5nIGluZm9ybWF0aW9uLCBhbGwgdGltZXMgaW4gU0NMSyBjeWNsZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKaW5kZXggZWRkOGVmMy4uOWIxZTJjMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKQEAgLTEsOSArMSw5IEBACiAvKgogICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBCbGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycwogICoKLcKgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLcKgKgotwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9QT1JUTVVYX0hfCkBAIC0xMDQyLDggKzEwNDIsOCBAQAogI2RlZmluZSBQX05PUl9DTEsgUF9VTkRFRgogI2VuZGlmCiAKLSNpZm5kZWYgIFBfVE1SQ0xLCi0jZGVmaW5lICBQX1RNUkNMSyBQX1VOREVGCisjaWZuZGVmIFBfVE1SQ0xLCisjZGVmaW5lIFBfVE1SQ0xLIFBfVU5ERUYKICNlbmRpZgogCiAjaWZuZGVmIFBfQU1DX0FSRFlfTk9SX1dBSVQKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCA2NGQ0MWQzLi5kMTc3YTE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0zLDYgKzMsNCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoMHhmZmZmZmZmZikKLQogI2VuZGlmCQkJCS8qICEoX0JMQUNLRklOX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYmxhY2tmaW4va2VybmVsL01ha2VmaWxlCmluZGV4IDMwZDBkMWYuLmNhNWNjYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiAgICAgb2JqLXkgKz0gdGltZS5vCiBlbmRpZgogCitvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpICAgICAgICAgKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICAgICAgICArPSBmdHJhY2UtZW50cnkubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgICs9IGZ0cmFjZS5vCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCmluZGV4IDI2NDAzZDEuLjFlNDg1ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZG1hXzV4eC5jCkBAIC00NTAsNyArNDUwLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGRzdCA9ICh1bnNpZ25lZCBsb25nKXBkc3Q7CiAJdW5zaWduZWQgbG9uZyBzcmMgPSAodW5zaWduZWQgbG9uZylwc3JjOwotCXNpemVfdCBidWxrLCByZXN0OwogCiAJaWYgKGJmaW5fYWRkcl9kY2FjaGVhYmxlKHNyYykpCiAJCWJsYWNrZmluX2RjYWNoZV9mbHVzaF9yYW5nZShzcmMsIHNyYyArIHNpemUpOwpAQCAtNDU4LDYgKzQ1NywyMiBAQAogCWlmIChiZmluX2FkZHJfZGNhY2hlYWJsZShkc3QpKQogCQlibGFja2Zpbl9kY2FjaGVfaW52YWxpZGF0ZV9yYW5nZShkc3QsIGRzdCArIHNpemUpOwogCisJcmV0dXJuIGRtYV9tZW1jcHlfbm9jYWNoZShwZHN0LCBwc3JjLCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX21lbWNweSk7CisKKy8qKgorICoJZG1hX21lbWNweV9ub2NhY2hlIC0gRE1BIG1lbWNweSB1bmRlciBtdXRleCBsb2NrCisgKgktIE5vIGNhY2hlIGZsdXNoL2ludmFsaWRhdGUKKyAqCisgKiBEbyBub3QgY2hlY2sgYXJndW1lbnRzIGJlZm9yZSBzdGFydGluZyB0aGUgRE1BIG1lbWNweS4gIEJyZWFrIHRoZSB0cmFuc2ZlcgorICogdXAgaW50byB0d28gcGllY2VzLiAgVGhlIGZpcnN0IHRyYW5zZmVyIGlzIGluIG11bHRpcGxlcyBvZiA2NGsgYW5kIHRoZQorICogc2Vjb25kIHRyYW5zZmVyIGlzIHRoZSBwaWVjZSBzbWFsbGVyIHRoYW4gNjRrLgorICovCit2b2lkICpkbWFfbWVtY3B5X25vY2FjaGUodm9pZCAqcGRzdCwgY29uc3Qgdm9pZCAqcHNyYywgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGJ1bGssIHJlc3Q7CisKIAlidWxrID0gc2l6ZSAmIH4weGZmZmY7CiAJcmVzdCA9IHNpemUgLSBidWxrOwogCWlmIChidWxrKQpAQCAtNDY1LDcgKzQ4MCw3IEBACiAJX2RtYV9tZW1jcHkocGRzdCArIGJ1bGssIHBzcmMgKyBidWxrLCByZXN0KTsKIAlyZXR1cm4gcGRzdDsKIH0KLUVYUE9SVF9TWU1CT0woZG1hX21lbWNweSk7CitFWFBPUlRfU1lNQk9MKGRtYV9tZW1jcHlfbm9jYWNoZSk7CiAKIC8qKgogICoJc2FmZV9kbWFfbWVtY3B5IC0gRE1BIG1lbWNweSB3L2FyZ3VtZW50IGNoZWNraW5nCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2dwaW8uYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCmluZGV4IDQyODMzZWUuLmRjMDdlZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jCkBAIC0xMDgsMTEgKzEwOCw3IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZF9ncGlvX21hcFtHUElPX0JBTktfTlVNXTsKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoTUFYX1JFU09VUkNFUyldOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IHJlc2VydmVkX2dwaW9faXJxX21hcFtHUElPX0JBTktfTlVNXTsKLQotI2RlZmluZSBSRVNPVVJDRV9MQUJFTF9TSVpFIAkxNgorI2RlZmluZSBSRVNPVVJDRV9MQUJFTF9TSVpFCTE2CiAKIHN0YXRpYyBzdHJ1Y3Qgc3RyX2lkZW50IHsKIAljaGFyIG5hbWVbUkVTT1VSQ0VfTEFCRUxfU0laRV07CkBAIC0xMjIsMTkgKzExOCw2IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fcG9ydF9zIGdwaW9fYmFua19zYXZlZFtHUElPX0JBTktfTlVNXTsKICNlbmRpZgogCi1pbmxpbmUgaW50IGNoZWNrX2dwaW8odW5zaWduZWQgZ3BpbykKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19CRjU0eCkKLQlpZiAoZ3BpbyA9PSBHUElPX1BCMTUgfHwgZ3BpbyA9PSBHUElPX1BDMTQgfHwgZ3BpbyA9PSBHUElPX1BDMTUKLQkgICAgfHwgZ3BpbyA9PSBHUElPX1BIMTQgfHwgZ3BpbyA9PSBHUElPX1BIMTUKLQkgICAgfHwgZ3BpbyA9PSBHUElPX1BKMTQgfHwgZ3BpbyA9PSBHUElPX1BKMTUpCi0JCXJldHVybiAtRUlOVkFMOwotI2VuZGlmCi0JaWYgKGdwaW8gPj0gTUFYX0JMQUNLRklOX0dQSU9TKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZ3Bpb19lcnJvcih1bnNpZ25lZCBncGlvKQogewogCXByaW50ayhLRVJOX0VSUiAiYmZpbi1ncGlvOiBHUElPICVkIHdhc24ndCByZXF1ZXN0ZWQhXG4iLCBncGlvKTsKQEAgLTE2Nyw2ICsxNTAsMjkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNkZWZpbmUgbWFwX2VudHJ5KG0sIGkpICAgICAgcmVzZXJ2ZWRfIyNtIyNfbWFwW2dwaW9fYmFuayhpKV0KKyNkZWZpbmUgaXNfcmVzZXJ2ZWQobSwgaSwgZSkgKG1hcF9lbnRyeShtLCBpKSAmIGdwaW9fYml0KGkpKQorI2RlZmluZSByZXNlcnZlKG0sIGkpICAgICAgICAobWFwX2VudHJ5KG0sIGkpIHw9IGdwaW9fYml0KGkpKQorI2RlZmluZSB1bnJlc2VydmUobSwgaSkgICAgICAobWFwX2VudHJ5KG0sIGkpICY9IH5ncGlvX2JpdChpKSkKKyNkZWZpbmUgREVDTEFSRV9SRVNFUlZFRF9NQVAobSwgYykgc3RhdGljIHVuc2lnbmVkIHNob3J0IHJlc2VydmVkXyMjbSMjX21hcFtjXQorCitERUNMQVJFX1JFU0VSVkVEX01BUChncGlvLCBHUElPX0JBTktfTlVNKTsKK0RFQ0xBUkVfUkVTRVJWRURfTUFQKHBlcmksIERJVl9ST1VORF9VUChNQVhfUkVTT1VSQ0VTLCBHUElPX0JBTktTSVpFKSk7CitERUNMQVJFX1JFU0VSVkVEX01BUChncGlvX2lycSwgR1BJT19CQU5LX05VTSk7CisKK2lubGluZSBpbnQgY2hlY2tfZ3Bpbyh1bnNpZ25lZCBncGlvKQoreworI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQorCWlmIChncGlvID09IEdQSU9fUEIxNSB8fCBncGlvID09IEdQSU9fUEMxNCB8fCBncGlvID09IEdQSU9fUEMxNQorCSAgICB8fCBncGlvID09IEdQSU9fUEgxNCB8fCBncGlvID09IEdQSU9fUEgxNQorCSAgICB8fCBncGlvID09IEdQSU9fUEoxNCB8fCBncGlvID09IEdQSU9fUEoxNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwlpZiAoZ3BpbyA+PSBNQVhfQkxBQ0tGSU5fR1BJT1MpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwb3J0X3NldHVwKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIHNob3J0IHVzYWdlKQogewogI2lmIGRlZmluZWQoQkY1MzhfRkFNSUxZKQpAQCAtNDc1LDcgKzQ4MSw3IEBACiAKIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIHVuc2lnbmVkIHNob3J0IHdha2V1cF9tYXBbR1BJT19CQU5LX05VTV07CitERUNMQVJFX1JFU0VSVkVEX01BUCh3YWtldXAsIEdQSU9fQkFOS19OVU0pOwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNpY19pd3JfaXJxc1tdID0gewogI2lmIGRlZmluZWQoQkY1MzNfRkFNSUxZKQpAQCAtNTIxLDkgKzUyNyw5IEBACiAKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAJaWYgKGN0cmwpCi0JCXdha2V1cF9tYXBbZ3Bpb19iYW5rKGdwaW8pXSB8PSBncGlvX2JpdChncGlvKTsKKwkJcmVzZXJ2ZSh3YWtldXAsIGdwaW8pOwogCWVsc2UKLQkJd2FrZXVwX21hcFtncGlvX2JhbmsoZ3BpbyldICY9IH5ncGlvX2JpdChncGlvKTsKKwkJdW5yZXNlcnZlKHdha2V1cCwgZ3Bpbyk7CiAKIAlzZXRfZ3Bpb19tYXNrYihncGlvLCBjdHJsKTsKIAlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CkBAIC01MzYsNyArNTQyLDcgQEAKIAl1MTYgYmFuaywgbWFzaywgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQkxBQ0tGSU5fR1BJT1M7IGkgKz0gR1BJT19CQU5LU0laRSkgewotCQltYXNrID0gd2FrZXVwX21hcFtncGlvX2JhbmsoaSldOworCQltYXNrID0gbWFwX2VudHJ5KHdha2V1cCwgaSk7CiAJCWJhbmsgPSBncGlvX2JhbmsoaSk7CiAKIAkJaWYgKG1hc2spCkBAIC02NTMsNyArNjU5LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCi0qIEZVTkNUSU9OUzogCUJsYWNrZmluIFBlcmlwaGVyYWwgUmVzb3VyY2UgQWxsb2NhdGlvbgorKiBGVU5DVElPTlM6CUJsYWNrZmluIFBlcmlwaGVyYWwgUmVzb3VyY2UgQWxsb2NhdGlvbgogKgkJYW5kIFBvcnRNdXggU2V0dXAKICoKICogSU5QVVRTL09VVFBVVFM6CkBAIC02ODksOCArNjk1LDcgQEAKIAkvKiBJZiBhIHBpbiBjYW4gYmUgbXV4ZWQgYXMgZWl0aGVyIEdQSU8gb3IgcGVyaXBoZXJhbCwgbWFrZQogCSAqIHN1cmUgaXQgaXMgbm90IGFscmVhZHkgYSBHUElPIHBpbiB3aGVuIHdlIHJlcXVlc3QgaXQuCiAJICovCi0JaWYgKHVubGlrZWx5KCFjaGVja19ncGlvKGlkZW50KSAmJgotCSAgICByZXNlcnZlZF9ncGlvX21hcFtncGlvX2JhbmsoaWRlbnQpXSAmIGdwaW9fYml0KGlkZW50KSkpIHsKKwlpZiAodW5saWtlbHkoIWNoZWNrX2dwaW8oaWRlbnQpICYmIGlzX3Jlc2VydmVkKGdwaW8sIGlkZW50LCAxKSkpIHsKIAkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKIAkJCWR1bXBfc3RhY2soKTsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC03MDAsNyArNzA1LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAodW5saWtlbHkocmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGlkZW50KV0gJiBncGlvX2JpdChpZGVudCkpKSB7CisJaWYgKHVubGlrZWx5KGlzX3Jlc2VydmVkKHBlcmksIGlkZW50LCAxKSkpIHsKIAogCQkvKgogCQkgKiBQaW4gZnVuY3Rpb25zIGxpa2UgQU1DIGFkZHJlc3Mgc3Ryb2JlcyBteQpAQCAtNzMxLDcgKzczNiw3IEBACiAJfQogCiAgYW55d2F5OgotCXJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhpZGVudCldIHw9IGdwaW9fYml0KGlkZW50KTsKKwlyZXNlcnZlKHBlcmksIGlkZW50KTsKIAogCXBvcnRtdXhfc2V0dXAocGVyKTsKIAlwb3J0X3NldHVwKGlkZW50LCBQRVJJUEhFUkFMX1VTQUdFKTsKQEAgLTc3Nyw3ICs3ODIsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCi0JaWYgKHVubGlrZWx5KCEocmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGlkZW50KV0gJiBncGlvX2JpdChpZGVudCkpKSkgeworCWlmICh1bmxpa2VseSghaXNfcmVzZXJ2ZWQocGVyaSwgaWRlbnQsIDApKSkgewogCQlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC03ODUsNyArNzkwLDcgQEAKIAlpZiAoIShwZXIgJiBQX01BWVNIQVJFKSkKIAkJcG9ydF9zZXR1cChpZGVudCwgR1BJT19VU0FHRSk7CiAKLQlyZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoaWRlbnQpXSAmPSB+Z3Bpb19iaXQoaWRlbnQpOworCXVucmVzZXJ2ZShwZXJpLCBpZGVudCk7CiAKIAlzZXRfbGFiZWwoaWRlbnQsICJmcmVlIik7CiAKQEAgLTgzNiw3ICs4NDEsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAodW5saWtlbHkocmVzZXJ2ZWRfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgeworCWlmICh1bmxpa2VseShpc19yZXNlcnZlZChncGlvLCBncGlvLCAxKSkpIHsKIAkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKIAkJCWR1bXBfc3RhY2soKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBieSAlcyAhXG4iLApAQCAtODQ0LDcgKzg0OSw3IEBACiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHVubGlrZWx5KHJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKKwlpZiAodW5saWtlbHkoaXNfcmVzZXJ2ZWQocGVyaSwgZ3BpbywgMSkpKSB7CiAJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCiAJCQlkdW1wX3N0YWNrKCk7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtODUzLDcgKzg1OCw3IEBACiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHVubGlrZWx5KHJlc2VydmVkX2dwaW9faXJxX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSB7CisJaWYgKHVubGlrZWx5KGlzX3Jlc2VydmVkKGdwaW9faXJxLCBncGlvLCAxKSkpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBhcyBncGlvLWlycSEiCiAJCSAgICAgICAiIChEb2N1bWVudGF0aW9uL2JsYWNrZmluL2JmaW4tZ3Bpby1ub3Rlcy50eHQpXG4iLCBncGlvKTsKIAl9CkBAIC04NjMsNyArODY4LDcgQEAKIAl9CiAjZW5kaWYKIAotCXJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gfD0gZ3Bpb19iaXQoZ3Bpbyk7CisJcmVzZXJ2ZShncGlvLCBncGlvKTsKIAlzZXRfbGFiZWwoZ3BpbywgbGFiZWwpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmVfaHcoZmxhZ3MpOwpAQCAtODg1LDcgKzg5MCw3IEBACiAKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAKLQlpZiAodW5saWtlbHkoIShyZXNlcnZlZF9ncGlvX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSkgeworCWlmICh1bmxpa2VseSghaXNfcmVzZXJ2ZWQoZ3BpbywgZ3BpbywgMCkpKSB7CiAJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCiAJCQlkdW1wX3N0YWNrKCk7CiAJCWdwaW9fZXJyb3IoZ3Bpbyk7CkBAIC04OTMsNyArODk4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJj0gfmdwaW9fYml0KGdwaW8pOworCXVucmVzZXJ2ZShncGlvLCBncGlvKTsKIAogCXNldF9sYWJlbChncGlvLCAiZnJlZSIpOwogCkBAIC05MDIsNyArOTA3LDcgQEAKIEVYUE9SVF9TWU1CT0woYmZpbl9ncGlvX2ZyZWUpOwogCiAjaWZkZWYgQkZJTl9TUEVDSUFMX0dQSU9fQkFOS1MKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZF9zcGVjaWFsX2dwaW9fbWFwW2dwaW9fYmFuayhNQVhfUkVTT1VSQ0VTKV07CitERUNMQVJFX1JFU0VSVkVEX01BUChzcGVjaWFsX2dwaW8sIGdwaW9fYmFuayhNQVhfUkVTT1VSQ0VTKSk7CiAKIGludCBiZmluX3NwZWNpYWxfZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewpAQCAtOTIxLDE0ICs5MjYsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHVubGlrZWx5KHJlc2VydmVkX3NwZWNpYWxfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgeworCWlmICh1bmxpa2VseShpc19yZXNlcnZlZChzcGVjaWFsX2dwaW8sIGdwaW8sIDEpKSkgewogCQlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiAJCXByaW50ayhLRVJOX0VSUiAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYnkgJXMgIVxuIiwKIAkJICAgICAgIGdwaW8sIGdldF9sYWJlbChncGlvKSk7CiAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHVubGlrZWx5KHJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKKwlpZiAodW5saWtlbHkoaXNfcmVzZXJ2ZWQocGVyaSwgZ3BpbywgMSkpKSB7CiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYmZpbi1ncGlvOiBHUElPICVkIGlzIGFscmVhZHkgcmVzZXJ2ZWQgYXMgUGVyaXBoZXJhbCBieSAlcyAhXG4iLApAQCAtOTM3LDggKzk0Miw4IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JcmVzZXJ2ZWRfc3BlY2lhbF9ncGlvX21hcFtncGlvX2JhbmsoZ3BpbyldIHw9IGdwaW9fYml0KGdwaW8pOwotCXJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhncGlvKV0gfD0gZ3Bpb19iaXQoZ3Bpbyk7CisJcmVzZXJ2ZShzcGVjaWFsX2dwaW8sIGdwaW8pOworCXJlc2VydmUocGVyaSwgZ3Bpbyk7CiAKIAlzZXRfbGFiZWwoZ3BpbywgbGFiZWwpOwogCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKQEAgLTk1NiwxNCArOTYxLDE0IEBACiAKIAlsb2NhbF9pcnFfc2F2ZV9odyhmbGFncyk7CiAKLQlpZiAodW5saWtlbHkoIShyZXNlcnZlZF9zcGVjaWFsX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpKSB7CisJaWYgKHVubGlrZWx5KCFpc19yZXNlcnZlZChzcGVjaWFsX2dwaW8sIGdwaW8sIDApKSkgewogCQlncGlvX2Vycm9yKGdwaW8pOwogCQlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXNlcnZlZF9zcGVjaWFsX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJj0gfmdwaW9fYml0KGdwaW8pOwotCXJlc2VydmVkX3BlcmlfbWFwW2dwaW9fYmFuayhncGlvKV0gJj0gfmdwaW9fYml0KGdwaW8pOworCXVucmVzZXJ2ZShzcGVjaWFsX2dwaW8sIGdwaW8pOworCXVucmVzZXJ2ZShwZXJpLCBncGlvKTsKIAlzZXRfbGFiZWwoZ3BpbywgImZyZWUiKTsKIAlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CiB9CkBAIC05ODAsNyArOTg1LDcgQEAKIAogCWxvY2FsX2lycV9zYXZlX2h3KGZsYWdzKTsKIAotCWlmICh1bmxpa2VseShyZXNlcnZlZF9wZXJpX21hcFtncGlvX2JhbmsoZ3BpbyldICYgZ3Bpb19iaXQoZ3BpbykpKSB7CisJaWYgKHVubGlrZWx5KGlzX3Jlc2VydmVkKHBlcmksIGdwaW8sIDEpKSkgewogCQlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKQogCQkJZHVtcF9zdGFjaygpOwogCQlwcmludGsoS0VSTl9FUlIKQEAgLTk4OSwxMiArOTk0LDEyIEBACiAJCWxvY2FsX2lycV9yZXN0b3JlX2h3KGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaWYgKHVubGlrZWx5KHJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpCisJaWYgKHVubGlrZWx5KGlzX3Jlc2VydmVkKGdwaW8sIGdwaW8sIDEpKSkKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJiZmluLWdwaW86IEdQSU8gJWQgaXMgYWxyZWFkeSByZXNlcnZlZCBieSAlcyEgIgogCQkgICAgICAgIihEb2N1bWVudGF0aW9uL2JsYWNrZmluL2JmaW4tZ3Bpby1ub3Rlcy50eHQpXG4iLAogCQkgICAgICAgZ3BpbywgZ2V0X2xhYmVsKGdwaW8pKTsKIAotCXJlc2VydmVkX2dwaW9faXJxX21hcFtncGlvX2JhbmsoZ3BpbyldIHw9IGdwaW9fYml0KGdwaW8pOworCXJlc2VydmUoZ3Bpb19pcnEsIGdwaW8pOwogCXNldF9sYWJlbChncGlvLCBsYWJlbCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZV9odyhmbGFncyk7CkBAIC0xMDEzLDcgKzEwMTgsNyBAQAogCiAJbG9jYWxfaXJxX3NhdmVfaHcoZmxhZ3MpOwogCi0JaWYgKHVubGlrZWx5KCEocmVzZXJ2ZWRfZ3Bpb19pcnFfbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpKSB7CisJaWYgKHVubGlrZWx5KCFpc19yZXNlcnZlZChncGlvX2lycSwgZ3BpbywgMCkpKSB7CiAJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCiAJCQlkdW1wX3N0YWNrKCk7CiAJCWdwaW9fZXJyb3IoZ3Bpbyk7CkBAIC0xMDIxLDcgKzEwMjYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcmVzZXJ2ZWRfZ3Bpb19pcnFfbWFwW2dwaW9fYmFuayhncGlvKV0gJj0gfmdwaW9fYml0KGdwaW8pOworCXVucmVzZXJ2ZShncGlvX2lycSwgZ3Bpbyk7CiAKIAlzZXRfbGFiZWwoZ3BpbywgImZyZWUiKTsKIApAQCAtMTA0Miw3ICsxMDQ3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEocmVzZXJ2ZWRfZ3Bpb19tYXBbZ3Bpb19iYW5rKGdwaW8pXSAmIGdwaW9fYml0KGdwaW8pKSkgeworCWlmICh1bmxpa2VseSghaXNfcmVzZXJ2ZWQoZ3BpbywgZ3BpbywgMCkpKSB7CiAJCWdwaW9fZXJyb3IoZ3Bpbyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEwODQsNyArMTA4OSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghKHJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhncGlvKV0gJiBncGlvX2JpdChncGlvKSkpIHsKKwlpZiAodW5saWtlbHkoIWlzX3Jlc2VydmVkKGdwaW8sIGdwaW8sIDApKSkgewogCQlncGlvX2Vycm9yKGdwaW8pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMTUzLDEzICsxMTU4LDEzIEBACiAJaW50IGMsIGlycSwgZ3Bpbywgb3V0bGVuID0gMDsKIAogCWZvciAoYyA9IDA7IGMgPCBNQVhfUkVTT1VSQ0VTOyBjKyspIHsKLQkJaXJxID0gcmVzZXJ2ZWRfZ3Bpb19pcnFfbWFwW2dwaW9fYmFuayhjKV0gJiBncGlvX2JpdChjKTsKLQkJZ3BpbyA9IHJlc2VydmVkX2dwaW9fbWFwW2dwaW9fYmFuayhjKV0gJiBncGlvX2JpdChjKTsKKwkJaXJxID0gaXNfcmVzZXJ2ZWQoZ3Bpb19pcnEsIGMsIDEpOworCQlncGlvID0gaXNfcmVzZXJ2ZWQoZ3BpbywgYywgMSk7CiAJCWlmICghY2hlY2tfZ3BpbyhjKSAmJiAoZ3BpbyB8fCBpcnEpKQogCQkJbGVuID0gc3ByaW50ZihidWYsICJHUElPXyVkOiBcdCVzJXMgXHRcdEdQSU8gJXNcbiIsIGMsCiAJCQkJIGdldF9sYWJlbChjKSwgKGdwaW8gJiYgaXJxKSA/ICIgKiIgOiAiIiwKIAkJCQkgZ2V0X2dwaW9fZGlyKGMpID8gIk9VVFBVVCIgOiAiSU5QVVQiKTsKLQkJZWxzZSBpZiAocmVzZXJ2ZWRfcGVyaV9tYXBbZ3Bpb19iYW5rKGMpXSAmIGdwaW9fYml0KGMpKQorCQllbHNlIGlmIChpc19yZXNlcnZlZChwZXJpLCBjLCAxKSkKIAkJCWxlbiA9IHNwcmludGYoYnVmLCAiR1BJT18lZDogXHQlcyBcdFx0UGVyaXBoZXJhbFxuIiwgYywgZ2V0X2xhYmVsKGMpKTsKIAkJZWxzZQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwppbmRleCAzMGZkNjQxLi5jMTVmZDA1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKQEAgLTEzLDEwICsxMyw2IEBACiAjaW5jbHVkZSA8YXNtL2NwbGJpbml0Lmg+CiAjaW5jbHVkZSA8YXNtL21lbV9tYXAuaD4KIAotI2lmIEFOT01BTFlfMDUwMDAyNjMKLSMgZXJyb3IgdGhlIE1QVSB3aWxsIG5vdCBmdW5jdGlvbiBzYWZlbHkgd2hpbGUgQW5vbWFseSAwNTAwMDI2MyBhcHBsaWVzCi0jZW5kaWYKLQogc3RydWN0IGNwbGJfZW50cnkgaWNwbGJfdGJsW05SX0NQVVNdW01BWF9DUExCU107CiBzdHJ1Y3QgY3BsYl9lbnRyeSBkY3BsYl90YmxbTlJfQ1BVU11bTUFYX0NQTEJTXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZnRyYWNlLWVudHJ5LlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UtZW50cnkuUwppbmRleCBkNjY0NDZiLi43ZWVkMDBiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UtZW50cnkuUworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UtZW50cnkuUwpAQCAtMTAsNiArMTAsMTggQEAKIAogLnRleHQKIAorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCisvKiBTaW1wbGUgc3R1YiBzbyB3ZSBjYW4gYm9vdCB0aGUga2VybmVsIHVudGlsIHJ1bnRpbWUgcGF0Y2hpbmcgaGFzCisgKiBkaXNhYmxlZCBhbGwgY2FsbHMgdG8gdGhpcy4gIFRoZW4gaXQnbGwgYmUgdW51c2VkLgorICovCitFTlRSWShfX21jb3VudCkKKyMgaWYgQU5PTUFMWV8wNTAwMDM3MQorCW5vcDsgbm9wOyBub3A7IG5vcDsKKyMgZW5kaWYKKwlydHM7CitFTkRQUk9DKF9fbWNvdW50KQorCiAvKiBHQ0Mgd2lsbCBoYXZlIGNhbGxlZCB1cyBiZWZvcmUgc2V0dGluZyB1cCB0aGUgZnVuY3Rpb24gcHJvbG9ndWUsIHNvIHdlCiAgKiBjYW4gY2xvYmJlciB0aGUgbm9ybWFsIHNjcmF0Y2ggcmVnaXN0ZXJzLCBidXQgd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8KICAqIHNhdmUvcmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGFyZ3VtZW50IHBhc3NpbmcgKFIwLVIyKSBpbiBjYXNlCkBAIC0yMCwxNSArMzIsNjUgQEAKICAqIGZ1bmN0aW9uLiAgQW5kIHNpbmNlIEdDQyBwdXNoZWQgdGhlIHByZXZpb3VzIFJFVFMgZm9yIHVzLCB0aGUgcHJldmlvdXMKICAqIGZ1bmN0aW9uIHdpbGwgYmUgd2FpdGluZyB0aGVyZS4gIG1tbW0gcGllLgogICovCi1FTlRSWShfX21jb3VudCkKLSNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAorRU5UUlkoX2Z0cmFjZV9jYWxsZXIpCisjIGlmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJLyogb3B0aW9uYWwgbWljcm8gb3B0aW1pemF0aW9uOiByZXR1cm4gaWYgc3RvcHBlZCAqLwogCXAxLmwgPSBfZnVuY3Rpb25fdHJhY2Vfc3RvcDsKIAlwMS5oID0gX2Z1bmN0aW9uX3RyYWNlX3N0b3A7CiAJcjMgPSBbcDFdOwogCWNjID0gcjMgPT0gMDsKIAlpZiAhIGNjIGp1bXAgX2Z0cmFjZV9zdHViIChicCk7Ci0jZW5kaWYKKyMgZW5kaWYKKworCS8qIHNhdmUgZmlyc3Qvc2Vjb25kL3RoaXJkIGZ1bmN0aW9uIGFyZyBhbmQgdGhlIHJldHVybiByZWdpc3RlciAqLworCVstLXNwXSA9IHIyOworCVstLXNwXSA9IHIwOworCVstLXNwXSA9IHIxOworCVstLXNwXSA9IHJldHM7CisKKwkvKiBmdW5jdGlvbl90cmFjZV9jYWxsKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKToKKwkgKiAgaXA6IHRoaXMgcG9pbnQgd2FzIGNhbGxlZCBieSAuLi4KKwkgKiAgcGFyZW50X2lwOiAuLi4gdGhpcyBmdW5jdGlvbgorCSAqIHRoZSBpcCBpdHNlbGYgd2lsbCBuZWVkIGFkanVzdGluZyBmb3IgdGhlIG1jb3VudCBjYWxsCisJICovCisJcjAgPSByZXRzOworCXIxID0gW3NwICsgMTZdOwkvKiBza2lwIHRoZSA0IGxvY2FsIHJlZ3Mgb24gc3RhY2sgKi8KKwlyMCArPSAtTUNPVU5UX0lOU05fU0laRTsKKworLmdsb2JsIF9mdHJhY2VfY2FsbAorX2Z0cmFjZV9jYWxsOgorCWNhbGwgX2Z0cmFjZV9zdHViCisKKyMgaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIF9mdHJhY2VfZ3JhcGhfY2FsbAorX2Z0cmFjZV9ncmFwaF9jYWxsOgorCW5vcDsJLyoganVtcCBfZnRyYWNlX2dyYXBoX2NhbGxlcjsgKi8KKyMgZW5kaWYKKworCS8qIHJlc3RvcmUgc3RhdGUgYW5kIGdldCBvdXQgb2YgZG9kZ2UgKi8KKy5MZmluaXNoX3RyYWNlOgorCXJldHMgPSBbc3ArK107CisJcjEgPSBbc3ArK107CisJcjAgPSBbc3ArK107CisJcjIgPSBbc3ArK107CisKKy5nbG9ibCBfZnRyYWNlX3N0dWIKK19mdHJhY2Vfc3R1YjoKKwlydHM7CitFTkRQUk9DKF9mdHJhY2VfY2FsbGVyKQorCisjZWxzZQorCisvKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgX2Z0cmFjZV9jYWxsZXIgKi8KK0VOVFJZKF9fbWNvdW50KQorIyBpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAorCS8qIG9wdGlvbmFsIG1pY3JvIG9wdGltaXphdGlvbjogcmV0dXJuIGlmIHN0b3BwZWQgKi8KKwlwMS5sID0gX2Z1bmN0aW9uX3RyYWNlX3N0b3A7CisJcDEuaCA9IF9mdW5jdGlvbl90cmFjZV9zdG9wOworCXIzID0gW3AxXTsKKwljYyA9IHIzID09IDA7CisJaWYgISBjYyBqdW1wIF9mdHJhY2Vfc3R1YiAoYnApOworIyBlbmRpZgogCiAJLyogc2F2ZSB0aGlyZCBmdW5jdGlvbiBhcmcgZWFybHkgc28gd2UgY2FuIGRvIHRlc3RpbmcgYmVsb3cgKi8KIAlbLS1zcF0gPSByMjsKQEAgLTQ0LDcgKzEwNiw3IEBACiAJY2MgPSByMiA9PSByMzsKIAlpZiAhIGNjIGp1bXAgLkxkb190cmFjZTsKIAotI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKyMgaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCS8qIGlmIHRoZSBmdHJhY2VfZ3JhcGhfcmV0dXJuIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbm90IHNldCB0bwogCSAqIHRoZSBmdHJhY2Vfc3R1YiBlbnRyeSwgY2FsbCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKS4KIAkgKi8KQEAgLTY0LDcgKzEyNiw3IEBACiAJcjMgPSBbcDBdOwogCWNjID0gcjIgPT0gcjM7CiAJaWYgISBjYyBqdW1wIF9mdHJhY2VfZ3JhcGhfY2FsbGVyOwotI2VuZGlmCisjIGVuZGlmCiAKIAlyMiA9IFtzcCsrXTsKIAlydHM7CkBAIC0xMDMsNiArMTY1LDggQEAKIAlydHM7CiBFTkRQUk9DKF9fbWNvdW50KQogCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIC8qIFRoZSBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4oKSBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIHRoZSB0cmFjZSBmdW5jdGlvbgogICogZXhjZXB0IGl0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGZyb21wYy4gIFRoaXMgaXMgc28KQEAgLTExMCw2ICsxNzQsNyBAQAogICogcHVycG9zZXMuCiAgKi8KIEVOVFJZKF9mdHJhY2VfZ3JhcGhfY2FsbGVyKQorIyBpZm5kZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAJLyogc2F2ZSBmaXJzdC9zZWNvbmQgZnVuY3Rpb24gYXJnIGFuZCB0aGUgcmV0dXJuIHJlZ2lzdGVyICovCiAJWy0tc3BdID0gcjA7CiAJWy0tc3BdID0gcjE7CkBAIC0xMTgsOSArMTgzLDEzIEBACiAJLyogcHJlcGFyZV9mdHJhY2VfcmV0dXJuKHBhcmVudCwgc2VsZl9hZGRyLCBmcmFtZV9wb2ludGVyKSAqLwogCXIwID0gc3A7CS8qIHVuc2lnbmVkIGxvbmcgKnBhcmVudCAqLwogCXIxID0gcmV0czsJLyogdW5zaWduZWQgbG9uZyBzZWxmX2FkZHIgKi8KLSNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9GUF9URVNUCisjIGVsc2UKKwlyMCA9IHNwOwkvKiB1bnNpZ25lZCBsb25nICpwYXJlbnQgKi8KKwlyMSA9IFtzcF07CS8qIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyICovCisjIGVuZGlmCisjIGlmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKIAlyMiA9IGZwOwkvKiB1bnNpZ25lZCBsb25nIGZyYW1lX3BvaW50ZXIgKi8KLSNlbmRpZgorIyBlbmRpZgogCXIwICs9IDE2OwkvKiBza2lwIHRoZSA0IGxvY2FsIHJlZ3Mgb24gc3RhY2sgKi8KIAlyMSArPSAtTUNPVU5UX0lOU05fU0laRTsKIAljYWxsIF9wcmVwYXJlX2Z0cmFjZV9yZXR1cm47CkBAIC0xMzksOSArMjA4LDkgQEAKIAlbLS1zcF0gPSByMTsKIAogCS8qIGdldCBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcyAqLwotI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX0ZQX1RFU1QKKyMgaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfRlBfVEVTVAogCXIwID0gZnA7CS8qIEJsYWNrZmluIGlzIHNhbmUsIHNvIG9taXQgdGhpcyAqLwotI2VuZGlmCisjIGVuZGlmCiAJY2FsbCBfZnRyYWNlX3JldHVybl90b19oYW5kbGVyOwogCXJldHMgPSByMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UuYwppbmRleCBhNjFkOTQ4Li40ODgwOGExIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mdHJhY2UuYwpAQCAtMSwxNyArMSwxMDEgQEAKIC8qCiAgKiBmdHJhY2UgZ3JhcGggY29kZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1ub3BbXSA9IHsKKwkweDAzLCAweGMwLCAweDAwLCAweDE4LCAvKiBNTk9QOyAqLworCTB4MDMsIDB4YzAsIDB4MDAsIDB4MTgsIC8qIE1OT1A7ICovCit9OworCitzdGF0aWMgdm9pZCBiZmluX21ha2VfcGNyZWwyNCh1bnNpZ25lZCBjaGFyICppbnNuLCB1bnNpZ25lZCBsb25nIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHN0KQoreworCXVpbnQzMl90IHBjcmVsID0gKGRzdCAtIHNyYykgPj4gMTsKKwlpbnNuWzBdID0gcGNyZWwgPj4gMTY7CisJaW5zblsxXSA9IDB4ZTM7CisJaW5zblsyXSA9IHBjcmVsOworCWluc25bM10gPSBwY3JlbCA+PiA4OworfQorI2RlZmluZSBiZmluX21ha2VfcGNyZWwyNChpbnNuLCBzcmMsIGRzdCkgYmZpbl9tYWtlX3BjcmVsMjQoaW5zbiwgc3JjLCAodW5zaWduZWQgbG9uZykoZHN0KSkKKworc3RhdGljIGludCBmdHJhY2VfbW9kaWZ5X2NvZGUodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgdW5zaWduZWQgY2hhciAqY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWludCByZXQgPSBwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKilpcCwgKHZvaWQgKiljb2RlLCBsZW4pOworCWZsdXNoX2ljYWNoZV9yYW5nZShpcCwgaXAgKyBsZW4pOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJLyogVHVybiB0aGUgbWNvdW50IGNhbGwgc2l0ZSBpbnRvIHR3byBNTk9QcyBhcyB0aG9zZSBhcmUgMzJiaXQgaW5zbnMgKi8KKwlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAsIG1ub3AsIHNpemVvZihtbm9wKSk7Cit9CisKK2ludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwkvKiBSZXN0b3JlIHRoZSBtY291bnQgY2FsbCBzaXRlICovCisJdW5zaWduZWQgY2hhciBjYWxsWzhdOworCWNhbGxbMF0gPSAweDY3OyAvKiBbLS1TUF0gPSBSRVRTOyAqLworCWNhbGxbMV0gPSAweDAxOworCWJmaW5fbWFrZV9wY3JlbDI0KCZjYWxsWzJdLCByZWMtPmlwICsgMiwgYWRkcik7CisJY2FsbFs2XSA9IDB4Mjc7IC8qIFJFVFMgPSBbU1ArK107ICovCisJY2FsbFs3XSA9IDB4MDE7CisJcmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShyZWMtPmlwLCBjYWxsLCBzaXplb2YoY2FsbCkpOworfQorCitpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCit7CisJdW5zaWduZWQgY2hhciBjYWxsWzRdOworCXVuc2lnbmVkIGxvbmcgaXAgPSAodW5zaWduZWQgbG9uZykmZnRyYWNlX2NhbGw7CisJYmZpbl9tYWtlX3BjcmVsMjQoY2FsbCwgaXAsIGZ1bmMpOworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIGNhbGwsIHNpemVvZihjYWxsKSk7Cit9CisKK2ludCBfX2luaXQgZnRyYWNlX2R5bl9hcmNoX2luaXQodm9pZCAqZGF0YSkKK3sKKwkvKiByZXR1cm4gdmFsdWUgaXMgZG9uZSBpbmRpcmVjdGx5IHZpYSBkYXRhICovCisJKih1bnNpZ25lZCBsb25nICopZGF0YSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAKKyMgaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisKK2V4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOworCitpbnQgZnRyYWNlX2VuYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSZmdHJhY2VfZ3JhcGhfY2FsbDsKKwl1aW50MTZfdCBqdW1wX3BjcmVsMTIgPSAoKHVuc2lnbmVkIGxvbmcpJmZ0cmFjZV9ncmFwaF9jYWxsZXIgLSBpcCkgPj4gMTsKKwlqdW1wX3BjcmVsMTIgfD0gMHgyMDAwOworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsICh2b2lkICopJmp1bXBfcGNyZWwxMiwgc2l6ZW9mKGp1bXBfcGNyZWwxMikpOworfQorCitpbnQgZnRyYWNlX2Rpc2FibGVfZnRyYWNlX2dyYXBoX2NhbGxlcih2b2lkKQoreworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoKHVuc2lnbmVkIGxvbmcpJmZ0cmFjZV9ncmFwaF9jYWxsLCBlbXB0eV96ZXJvX3BhZ2UsIDIpOworfQorCisjIGVuZGlmCisKIC8qCiAgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCiAgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKaW5kZXggZDM3YTM5Ny4uYWM3MWRjMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCkBAIC04NjQsNiArODY0LDEzIEBACiAJYmZpbl93cml0ZV9FQklVX01PREUoQ09ORklHX0VCSVVfTU9ERVZBTCk7CiAJYmZpbl93cml0ZV9FQklVX0ZDVEwoQ09ORklHX0VCSVVfRkNUTFZBTCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQkZJTl9IWVNURVJFU0lTX0NPTlRST0wKKwliZmluX3dyaXRlX1BPUlRGX0hZU1RFUklTSVMoSFlTVF9QT1JURl8wXzE1KTsKKwliZmluX3dyaXRlX1BPUlRHX0hZU1RFUklTSVMoSFlTVF9QT1JUR18wXzE1KTsKKwliZmluX3dyaXRlX1BPUlRIX0hZU1RFUklTSVMoSFlTVF9QT1JUSF8wXzE1KTsKKwliZmluX3dyaXRlX01JU0NQT1JUX0hZU1RFUklTSVMoKGJmaW5fcmVhZF9NSVNDUE9SVF9IWVNURVJJU0lTKCkgJgorCQkJCQl+SFlTVF9OT05FR1BJT19NQVNLKSB8IEhZU1RfTk9ORUdQSU8pOworI2VuZGlmCiAKIAljY2xrID0gZ2V0X2NjbGsoKTsKIAlzY2xrID0gZ2V0X3NjbGsoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDk4NGM3ODEuLjQxMjI2NzggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNDgsMTUgKzQ4LDEwIEBACiAjaWYgIUwxX0NPREVfTEVOR1RICiAJCSooLmwxLnRleHQpCiAjZW5kaWYKLQotCQkuID0gQUxJR04oMTYpOwotCQlfX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX19zdG9wX19fZXhfdGFibGUgPSAuOwotCiAJCV9fZXRleHQgPSAuOwogCX0KIAorCUVYQ0VQVElPTl9UQUJMRSg0KQogCU5PVEVTCiAKIAkvKiBKdXN0IGluIGNhc2UgdGhlIGZpcnN0IHJlYWQgb25seSBpcyBhIDMyLWJpdCBhY2Nlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9LY29uZmlnIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L0tjb25maWcKaW5kZXggNGFiMmQxNi4uMWQ5ZjYzMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L0tjb25maWcKQEAgLTYyLDYgKzYyLDY3IEBACiAJICBQT1JUIEcKIGVuZGNob2ljZQogCitjb21tZW50ICJIeXN0ZXJlc2lzL1NjaG1pdHQgVHJpZ2dlciBDb250cm9sIgorY29uZmlnIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgQ29udHJvbCIKKwloZWxwCisJICBUaGUgQURTUC1CRjUxeCBhbGxvd3MgdG8gY29udHJvbCBpbnB1dCBoeXN0ZXJlc2lzIGZvciBQb3J0IEYsCisJICBQb3J0IEcgYW5kIFBvcnQgSCBhbmQgb3RoZXIgcHJvY2Vzc29yIHNpZ25hbCBpbnB1dHMuCisJICBUaGUgU2NobWl0dCB0cmlnZ2VyIGVuYWJsZXMgY2FuIGJlIHNldCBvbmx5IGZvciBwaW4gZ3JvdXBzLgorCSAgU2F5aW5nIFkgd2lsbCBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgcmVzZXQgb3IgYm9vdCBsb2FkZXIKKwkgIGluaXRpYWxpemF0aW9uLgorCittZW51ICJQT1JUIEYiCisJZGVwZW5kcyBvbiBCRklOX0hZU1RFUkVTSVNfQ09OVFJPTAorY29uZmlnIEdQSU9fSFlTVF9QT1JURl8wXzcKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiB7MC4uLjd9IgorY29uZmlnIEdQSU9fSFlTVF9QT1JURl84XzkKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiB7OCwgOX0iCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzEwCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEYgMTAiCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzExCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEYgMTEiCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzEyXzEzCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEYgezEyLCAxM30iCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzE0XzE1CisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEYgezE0LCAxNX0iCitlbmRtZW51CisKK21lbnUgIlBPUlQgRyIKKwlkZXBlbmRzIG9uIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzAKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURyAwIgorY29uZmlnIEdQSU9fSFlTVF9QT1JUR18xXzQKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURyB7MS4uLjR9IgorY29uZmlnIEdQSU9fSFlTVF9QT1JUR181XzYKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURyB7NSwgNn0iCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzdfOAorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIHs3LCA4fSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEdfOQorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIDkiCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzEwCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEcgMTAiCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzExXzEzCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEcgezExLi4uMTN9IgorY29uZmlnIEdQSU9fSFlTVF9QT1JUR18xNF8xNQorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIHsxNCwgMTV9IgorZW5kbWVudQorCittZW51ICJQT1JUIEgiCisJZGVwZW5kcyBvbiBCRklOX0hZU1RFUkVTSVNfQ09OVFJPTAorY29uZmlnIEdQSU9fSFlTVF9QT1JUSF8wXzcKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JUSCB7MC4uLjd9IgorCitlbmRtZW51CisKK21lbnUgIk5vbmUtR1BJTyIKKwlkZXBlbmRzIG9uIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCitjb25maWcgTk9ORUdQSU9fSFlTVF9OTUlfUlNUX0JNT0RFCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24ge05NSSwgUkVTRVQsIEJNT0RFfSIKK2NvbmZpZyBOT05FR1BJT19IWVNUX0pUQUcKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBKVEFHIgorZW5kbWVudQorCiBjb21tZW50ICJJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudCIKIG1lbnUgIlByaW9yaXR5IgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDI4MjlkZDAuLjI0OTE4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC01LDEzICs1LDEzIEBACiAgKiBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggdGhhdCB2ZXJzaW9uIGF0IGFueSB0aW1lCiAgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKICAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KICAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwogCiAvKiBUaGlzIGZpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgd2l0aDoKLSAqICAtIFJldmlzaW9uIEMsIDA2LzEyLzIwMDk7IEFEU1AtQkY1MTIvQkY1MTQvQkY1MTYvQkY1MTggQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAorICogIC0gUmV2aXNpb24gRSwgMDEvMjYvMjAxMDsgQURTUC1CRjUxMi9CRjUxNC9CRjUxNi9CRjUxOCBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CiAgKi8KIAogLyogV2UgcGxhbiBvbiBub3Qgc3VwcG9ydGluZyAwLjAgc2lsaWNvbiwgYnV0IDAuMSBpc24ndCBvdXQgeWV0IC0gc29ycnkgKi8KQEAgLTI0LDYgKzI0LDggQEAKIAogLyogTXVsdGktSXNzdWUgSW5zdHJ1Y3Rpb24gd2l0aCBkc3AzMnNoaWZ0aW1tIGluIHNsb3QxIGFuZCBQLXJlZyBTdG9yZSBpbiBzbG90MiBOb3QgU3VwcG9ydGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwNzQgKDEpCisvKiBETUFfUlVOIEJpdCBJcyBOb3QgVmFsaWQgYWZ0ZXIgYSBQZXJpcGhlcmFsIFJlY2VpdmUgQ2hhbm5lbCBETUEgU3RvcHMgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDExOSAoMSkKIC8qIFJ4LkggQ2Fubm90IEJlIFVzZWQgdG8gQWNjZXNzIDE2LWJpdCBTeXN0ZW0gTU1SIFJlZ2lzdGVycyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTIyICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3IgZnJvbSBhbiBBY2Nlc3MgaW4gdGhlIFNoYWRvdyBvZiBhIENvbmRpdGlvbmFsIEJyYW5jaCAqLwpAQCAtNTIsNiArNTQsOCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMwIChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBJbmNvcnJlY3QgVXNlIG9mIFN0YWNrIGluIExvY2tib3ggRmlybXdhcmUgRHVyaW5nIEF1dGhlbnRpY2F0aW9uICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0MzEgKDEpCisvKiBTVyBCcmVha3BvaW50cyBJZ25vcmVkIFVwb24gUmV0dXJuIEZyb20gTG9ja2JveCBBdXRoZW50aWNhdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDM0ICgxKQogLyogQ2VydGFpbiBTSUMgUmVnaXN0ZXJzIGFyZSBub3QgUmVzZXQgQWZ0ZXIgU29mdCBvciBDb3JlIERvdWJsZSBGYXVsdCBSZXNldCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDM1IChfX1NJTElDT05fUkVWSVNJT05fXyA8IDEpCiAvKiBQT1JUeF9EUklWRSBhbmQgUE9SVHhfSFlTVEVSRVNJUyBSZWdpc3RlcnMgUmVhZCBCYWNrIEluY29ycmVjdCBWYWx1ZXMgKi8KQEAgLTc0LDE0ICs3OCwyMSBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDYxICgxKQogLyogU3luY2hyb25pemF0aW9uIFByb2JsZW0gYXQgU3RhcnR1cCBNYXkgQ2F1c2UgU1BPUlQgVHJhbnNtaXQgQ2hhbm5lbHMgdG8gTWlzYWxpZ24gKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MiAoMSkKLS8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLworLyogUExMIExhdGNoZXMgSW5jb3JyZWN0IFNldHRpbmdzIER1cmluZyBSZXNldCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY5ICgxKQorLyogSW5jb3JyZWN0IERlZmF1bHQgTVNFTCBWYWx1ZSBpbiBQTExfQ1RMICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzIgKDEpCisvKiBJbnRlcnJ1cHRlZCBTUE9SVCBSZWNlaXZlIERhdGEgUmVnaXN0ZXIgUmVhZCBSZXN1bHRzIEluIFVuZGVyZmxvdyB3aGVuIFNMRU4gPiAxNSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQogLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKKy8qIFJlYWRzIG9mIElURVNUX0NPTU1BTkQgYW5kIElURVNUX0RBVEEgUmVnaXN0ZXJzIENhdXNlIENhY2hlIENvcnJ1cHRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ4MSAoMSkKKy8qIElGTFVTSCBzdWNrcyBhdCBsaWZlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0OTEgKDEpCiAKIC8qIEFub21hbGllcyB0aGF0IGRvbid0IGV4aXN0IG9uIHRoaXMgcHJvYyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMDk5ICgwKQotI2RlZmluZSBBTk9NQUxZXzA1MDAwMTE5ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTIwICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTI1ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTQ5ICgwKQpAQCAtOTQsNiArMTA1LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDE5OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIwMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxNSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxOSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyMCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMCAoMCkKQEAgLTE0Myw1ICsxNTUsNiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY3ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc0ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDg1ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaAppbmRleCA4NTZiMzMwLi42OTA2ZGVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCkBAIC04NSw2ICs4NSwxMTEgQEAKIAogI2RlZmluZSBBTUdDVExWQUwJKFZfQU1CRU4gfCBWX0FNQ0tFTiB8IFZfQ0RQUklPKQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBIeXN0ZXJlc2lzIFNldHRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBDT05GSUdfQkZJTl9IWVNURVJFU0lTX0NPTlRST0wKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzBfNworI2RlZmluZSBIWVNUX1BPUlRGXzBfNwkJKDEgPDwgMCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEZfMF83CQkoMCA8PCAwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JURl84XzkKKyNkZWZpbmUgSFlTVF9QT1JURl84XzkJCSgxIDw8IDIpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzhfOQkJKDAgPDwgMikKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEZfMTAKKyNkZWZpbmUgSFlTVF9QT1JURl8xMAkJKDEgPDwgNCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEZfMTAJCSgwIDw8IDQpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzExCisjZGVmaW5lIEhZU1RfUE9SVEZfMTEJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzExCQkoMCA8PCA2KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JURl8xMl8xMworI2RlZmluZSBIWVNUX1BPUlRGXzEyXzEzCSgxIDw8IDgpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzEyXzEzCSgwIDw8IDgpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzE0XzE1CisjZGVmaW5lIEhZU1RfUE9SVEZfMTRfMTUJKDEgPDwgMTApCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzE0XzE1CSgwIDw8IDEwKQorI2VuZGlmCisKKyNkZWZpbmUgSFlTVF9QT1JURl8wXzE1CShIWVNUX1BPUlRGXzBfNyB8IEhZU1RfUE9SVEZfOF85IHwgSFlTVF9QT1JURl8xMCB8IFwKKwkJSFlTVF9QT1JURl8xMSB8IEhZU1RfUE9SVEZfMTJfMTMgfCBIWVNUX1BPUlRGXzE0XzE1KQorCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR18wCisjZGVmaW5lIEhZU1RfUE9SVEdfMAkJKDEgPDwgMCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEdfMAkJKDAgPDwgMCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEdfMV80CisjZGVmaW5lIEhZU1RfUE9SVEdfMV80CQkoMSA8PCAyKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xXzQJCSgwIDw8IDIpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzVfNgorI2RlZmluZSBIWVNUX1BPUlRHXzVfNgkJKDEgPDwgNCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEdfNV82CQkoMCA8PCA0KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR183XzgKKyNkZWZpbmUgSFlTVF9QT1JUR183XzgJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzdfOAkJKDAgPDwgNikKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEdfOQorI2RlZmluZSBIWVNUX1BPUlRHXzkJCSgxIDw8IDgpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzkJCSgwIDw8IDgpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzEwCisjZGVmaW5lIEhZU1RfUE9SVEdfMTAJCSgxIDw8IDEwKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xMAkJKDAgPDwgMTApCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzExXzEzCisjZGVmaW5lIEhZU1RfUE9SVEdfMTFfMTMJKDEgPDwgMTIpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzExXzEzCSgwIDw8IDEyKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR18xNF8xNQorI2RlZmluZSBIWVNUX1BPUlRHXzE0XzE1CSgxIDw8IDE0KQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xNF8xNQkoMCA8PCAxNCkKKyNlbmRpZgorCisjZGVmaW5lIEhZU1RfUE9SVEdfMF8xNQkoSFlTVF9QT1JUR18wIHwgSFlTVF9QT1JUR18xXzQgfCBIWVNUX1BPUlRHXzVfNiB8IFwKKwkJSFlTVF9QT1JUR183XzggfCBIWVNUX1BPUlRHXzkgfCBIWVNUX1BPUlRHXzEwIHwgXAorCQlIWVNUX1BPUlRHXzExXzEzIHwgSFlTVF9QT1JUR18xNF8xNSkKKworI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEhfMF83CisjZGVmaW5lIEhZU1RfUE9SVEhfMF83CQkoMSA8PCAwKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUSF8wXzcJCSgwIDw8IDApCisjZW5kaWYKKworI2RlZmluZSBIWVNUX1BPUlRIXzBfMTUJKEhZU1RfUE9SVEhfMF83KQorCisjaWZkZWYgQ09ORklHX05PTkVHUElPX0hZU1RfTk1JX1JTVF9CTU9ERQorI2RlZmluZSBIWVNUX05NSV9SU1RfQk1PREUJCSgxIDw8IDIpCisjZWxzZQorI2RlZmluZSBIWVNUX05NSV9SU1RfQk1PREUJCSgwIDw8IDIpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTk9ORUdQSU9fSFlTVF9KVEFHCisjZGVmaW5lIEhZU1RfSlRBRwkJCSgxIDw8IDQpCisjZWxzZQorI2RlZmluZSBIWVNUX0pUQUcJCQkoMCA8PCA0KQorI2VuZGlmCisKKyNkZWZpbmUgSFlTVF9OT05FR1BJTwkoSFlTVF9OTUlfUlNUX0JNT0RFIHwgSFlTVF9KVEFHKQorI2RlZmluZSBIWVNUX05PTkVHUElPX01BU0sJCSgweDNDKQorI2VuZGlmIC8qIENPTkZJR19CRklOX0hZU1RFUkVTSVNfQ09OVFJPTCAqLworCiAjaWZkZWYgQ09ORklHX0JGNTE4CiAjZGVmaW5lIENQVSAiQkY1MTgiCiAjZGVmaW5lIENQVUlEIDB4MjdlOApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCmluZGV4IDkyZTk1MGQuLjk4YTUxYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKQEAgLTQ1LDEzOSArNDUsNCBAQAogI2RlZmluZSBSU0lfUElENiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkMwM0ZGOCAvKiBSU0kgUGVyaXBoZXJhbCBJRCBSZWdpc3RlciA2ICovCiAjZGVmaW5lIFJTSV9QSUQ3ICAgICAgICAgICAgICAgICAgICAgICAweEZGQzAzRkZDIC8qIFJTSSBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDcgKi8KIAotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotLyogICAgIFNJTkdMRSBCSVQgTUFDUk8gUEFJUlMgKGJpdCBtYXNrIGFuZCBuZWdhdGVkIG9uZSkgICAgICAqLwotLyogICAgIGFuZCBNVUxUSSBCSVQgUkVBRCBNQUNST1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DT01NQU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX0lEWCAgMHgzZiAgICAgICAvKiBDb21tYW5kIEluZGV4ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9SU1AgIDB4NDAgICAgICAgLyogUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9MX1JTUCAgMHg4MCAgICAgICAvKiBMb25nIFJlc3BvbnNlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBDTURfSU5UX0UgIDB4MTAwICAgICAgLyogQ29tbWFuZCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgQ01EX1BFTkRfRSAgMHgyMDAgICAgICAvKiBDb21tYW5kIFBlbmRpbmcgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTURfRSAgMHg0MDAgICAgICAvKiBDb21tYW5kIEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9QV1JfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFBXUl9PTiAgMHgzICAgICAgICAvKiBQb3dlciBPbiAqLwotI2lmIDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFRCRCAgMHgzYyAgICAgICAvKiBUQkQgKi8KLSNlbmRpZgotI2RlZmluZSAgICAgICAgICAgICAgICAgU0RfQ01EX09EICAweDQwICAgICAgIC8qIE9wZW4gRHJhaW4gT3V0cHV0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFJPRF9DVEwgIDB4ODAgICAgICAgLyogUm9kIENvbnRyb2wgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfQ0xLX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDTEtESVYgIDB4ZmYgICAgICAgLyogTUNfQ0xLIERpdmlzb3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDTEtfRSAgMHgxMDAgICAgICAvKiBNQ19DTEsgQnVzIENsb2NrIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFBXUl9TVl9FICAweDIwMCAgICAgIC8qIFBvd2VyIFNhdmUgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgIENMS0RJVl9CWVBBU1MgIDB4NDAwICAgICAgLyogQnlwYXNzIERpdmlzb3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBXSURFX0JVUyAgMHg4MDAgICAgICAvKiBXaWRlIEJ1cyBNb2RlIEVuYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9SRVNQX0NNRCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUkVTUF9DTUQgIDB4M2YgICAgICAgLyogUmVzcG9uc2UgQ29tbWFuZCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9EQVRBX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRFRYX0UgIDB4MSAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRFRYX0RJUiAgMHgyICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIERpcmVjdGlvbiAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIERUWF9NT0RFICAweDQgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgRFRYX0RNQV9FICAweDggICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRE1BIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgRFRYX0JMS19MR1RIICAweGYwICAgICAgIC8qIERhdGEgVHJhbnNmZXIgQmxvY2sgTGVuZ3RoICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICBDTURfQ1JDX0ZBSUwgIDB4MSAgICAgICAgLyogQ01EIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfQ1JDX0ZBSUwgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIENNRF9USU1FX09VVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBEQVRfVElNRV9PVVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX1VOREVSUlVOICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFJYX09WRVJSVU4gIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuICovCi0jZGVmaW5lICAgICAgICAgICAgICBDTURfUkVTUF9FTkQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIENNRF9TRU5UICAweDgwICAgICAgIC8qIENNRCBTZW50ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIERBVF9FTkQgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgU1RBUlRfQklUX0VSUiAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBEQVRfQkxLX0VORCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfQUNUICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRYX0FDVCAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJYX0FDVCAgMHgyMDAwICAgICAvKiBSZWNlaXZlIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19TVEFUICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX1NUQVQgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgVFhfRklGT19GVUxMICAweDEwMDAwICAgIC8qIFRyYW5zbWl0IEZJRk8gRnVsbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgUlhfRklGT19GVUxMICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1pFUk8gIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJYX0RBVF9aRVJPICAweDgwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBFbXB0eSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBUWF9EQVRfUkRZICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfRklGT19SRFkgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9TVEFUVVNfQ0xSICovCi0KLSNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfU1RBVCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX1NUQVQgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgQ01EX1RJTUVPVVRfU1RBVCAgMHg0ICAgICAgICAvKiBDTUQgVGltZSBPdXQgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX1NUQVQgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBzdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fU1RBVCAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgIFJYX09WRVJSVU5fU1RBVCAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX1NUQVQgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfU1RBVCAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9FTkRfU1RBVCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfU1RBVCAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX1NUQVQgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgU3RhdHVzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX01BU0swICovCi0KLSNkZWZpbmUgICAgICAgICBDTURfQ1JDX0ZBSUxfTUFTSyAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIERBVF9DUkNfRkFJTF9NQVNLICAweDIgICAgICAgIC8qIERhdGEgQ1JDIEZhaWwgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9NQVNLICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9USU1FT1VUX01BU0sgIDB4OCAgICAgICAgLyogRGF0YSBUaW1lIE91dCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIFRYX1VOREVSUlVOX01BU0sgIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9NQVNLICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgQ01EX1JFU1BfRU5EX01BU0sgIDB4NDAgICAgICAgLyogQ01EIFJlc3BvbnNlIEVuZCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgIENNRF9TRU5UX01BU0sgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9NQVNLICAweDEwMCAgICAgIC8qIERhdGEgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgIFNUQVJUX0JJVF9FUlJfTUFTSyAgMHgyMDAgICAgICAvKiBTdGFydCBCaXQgRXJyb3IgTWFzayAqLwotI2RlZmluZSAgICAgICAgICBEQVRfQkxLX0VORF9NQVNLICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9BQ1RfTUFTSyAgMHg4MDAgICAgICAvKiBDTUQgQWN0aXZlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBUWF9BQ1RfTUFTSyAgMHgxMDAwICAgICAvKiBUcmFuc21pdCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFJYX0FDVF9NQVNLICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1NUQVRfTUFTSyAgMHg0MDAwICAgICAvKiBUcmFuc21pdCBGSUZPIFN0YXR1cyBNYXNrICovCi0jZGVmaW5lICAgICAgICAgUlhfRklGT19TVEFUX01BU0sgIDB4ODAwMCAgICAgLyogUmVjZWl2ZSBGSUZPIFN0YXR1cyBNYXNrICovCi0jZGVmaW5lICAgICAgICAgVFhfRklGT19GVUxMX01BU0sgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX0ZVTExfTUFTSyAgMHgyMDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRnVsbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgVFhfRklGT19aRVJPX01BU0sgIDB4NDAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIFJYX0RBVF9aRVJPX01BU0sgIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgIFRYX0RBVF9SRFlfTUFTSyAgMHgxMDAwMDAgICAvKiBUcmFuc21pdCBEYXRhIEF2YWlsYWJsZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIFJYX0ZJRk9fUkRZX01BU0sgIDB4MjAwMDAwICAgLyogUmVjZWl2ZSBEYXRhIEF2YWlsYWJsZSBNYXNrICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0ZJRk9fQ05UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgRklGT19DT1VOVCAgMHg3ZmZmICAgICAvKiBGSUZPIENvdW50ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIFNESU9fSU5UX0RFVCAgMHgyICAgICAgICAvKiBTRElPIEludCBEZXRlY3RlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFNEX0NBUkRfREVUICAweDEwICAgICAgIC8qIFNEIENhcmQgRGV0ZWN0ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0VfTUFTSyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgU0RJT19NU0sgIDB4MiAgICAgICAgLyogTWFzayBTRElPIEludCBEZXRlY3RlZCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBTQ0RfTVNLICAweDQwICAgICAgIC8qIE1hc2sgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfQ0ZHICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ0xLU19FTiAgMHgxICAgICAgICAvKiBDbG9ja3MgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFNENEUgIDB4NCAgICAgICAgLyogU0RJTyA0LUJpdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIE1XRSAgMHg4ICAgICAgICAvKiBNb3ZpbmcgV2luZG93IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgU0RfUlNUICAweDEwICAgICAgIC8qIFNETU1DIFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBQVVBfU0REQVQgIDB4MjAgICAgICAgLyogUHVsbC11cCBTRF9EQVQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUFVQX1NEREFUMyAgMHg0MCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVDMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBEX1NEREFUMyAgMHg4MCAgICAgICAvKiBQdWxsLWRvd24gU0RfREFUMyAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9SRF9XQUlUX0VOICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgIFJXUiAgMHgxICAgICAgICAvKiBSZWFkIFdhaXQgUmVxdWVzdCAqLwotCiAjZW5kaWYgLyogX0RFRl9CRjUxNF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCmluZGV4IDkyNDEyMDUuLjJiYzhmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MXhfYmFzZS5oCkBAIC00NTgsMjIgKzQ1OCwyMiBAQAogCiAvKiBUd28tV2lyZSBJbnRlcmZhY2UJCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkJCQkJCSovCiAjZGVmaW5lIFRXSTBfUkVHQkFTRQkJCTB4RkZDMDE0MDAKLSNkZWZpbmUgVFdJX0NMS0RJVgkJCTB4RkZDMDE0MDAJLyogU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBUV0lfQ09OVFJPTAkJCTB4RkZDMDE0MDQJLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLwotI2RlZmluZSBUV0lfU0xBVkVfQ1RMCQkweEZGQzAxNDA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0lfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0lfU0xBVkVfQUREUgkJMHhGRkMwMTQxMAkvKiBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJX01BU1RFUl9DVEwJCTB4RkZDMDE0MTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0lfTUFTVEVSX1NUQVQJCTB4RkZDMDE0MTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSV9NQVNURVJfQUREUgkJMHhGRkMwMTQxQwkvKiBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSV9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCSovCi0jZGVmaW5lIFRXSV9JTlRfTUFTSwkJMHhGRkMwMTQyNAkvKiBUV0kgTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyCQkqLwotI2RlZmluZSBUV0lfRklGT19DVEwJCTB4RkZDMDE0MjgJLyogRklGTyBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLwotI2RlZmluZSBUV0lfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVFdJX1hNVF9EQVRBOAkJMHhGRkMwMTQ4MAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVFdJX1hNVF9EQVRBMTYJCTB4RkZDMDE0ODQJLyogRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFRXSV9SQ1ZfREFUQTgJCTB4RkZDMDE0ODgJLyogRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KLSNkZWZpbmUgVFdJX1JDVl9EQVRBMTYJCTB4RkZDMDE0OEMJLyogRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCQkJKi8KKyNkZWZpbmUgVFdJMF9DT05UUk9MCQkJMHhGRkMwMTQwNAkvKiBUV0kgQ29udHJvbCBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFRXSTBfU0xBVkVfQ1RMCQkweEZGQzAxNDA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9TTEFWRV9BRERSCQkweEZGQzAxNDEwCS8qIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9DVEwJCTB4RkZDMDE0MTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9TVEFUCQkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLworI2RlZmluZSBUV0kwX01BU1RFUl9BRERSCQkweEZGQzAxNDFDCS8qIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRXSTBfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgVFdJMF9GSUZPX0NUTAkJMHhGRkMwMTQyOAkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIJCQkJCSovCisjZGVmaW5lIFRXSTBfRklGT19TVEFUCQkweEZGQzAxNDJDCS8qIEZJRk8gU3RhdHVzIFJlZ2lzdGVyCQkJCQkJKi8KKyNkZWZpbmUgVFdJMF9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSTBfWE1UX0RBVEExNgkJMHhGRkMwMTQ4NAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9SQ1ZfREFUQTgJCTB4RkZDMDE0ODgJLyogRklGTyBSZWNlaXZlIERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIJKi8KKyNkZWZpbmUgVFdJMF9SQ1ZfREFUQTE2CQkweEZGQzAxNDhDCS8qIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCiAKIAogLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJCQkJCSovCkBAIC0xMzE5LDcgKzEzMTksNyBAQAogI2RlZmluZQlUV0lfRU5BCQkweDAwODAJCS8qIFRXSSBFbmFibGUJCQkJCQkJCQkqLwogI2RlZmluZQlTQ0NCCQkweDAyMDAJCS8qIFNDQ0IgQ29tcGF0aWJpbGl0eSBFbmFibGUJCQkJCSovCiAKLS8qIFRXSV9TTEFWRV9DVFJMIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KKy8qIFRXSV9TTEFWRV9DVEwgTWFza3MJCQkJCQkJCQkJCQkJCQkqLwogI2RlZmluZQlTRU4JCQkweDAwMDEJCS8qIFNsYXZlIEVuYWJsZQkJCQkJCQkJCSovCiAjZGVmaW5lCVNBRERfTEVOCTB4MDAwMgkJLyogU2xhdmUgQWRkcmVzcyBMZW5ndGgJCQkJCQkJKi8KICNkZWZpbmUJU1REVkFMCQkweDAwMDQJCS8qIFNsYXZlIFRyYW5zbWl0IERhdGEgVmFsaWQJCQkJCSovCkBAIC0xMzMwLDcgKzEzMzAsNyBAQAogI2RlZmluZQlTRElSCQkweDAwMDEJCS8qIFNsYXZlIFRyYW5zZmVyIERpcmVjdGlvbiAoVHJhbnNtaXQvUmVjZWl2ZSopCSovCiAjZGVmaW5lIEdDQUxMCQkweDAwMDIJCS8qIEdlbmVyYWwgQ2FsbCBJbmRpY2F0b3IJCQkJCQkqLwogCi0vKiBUV0lfTUFTVEVSX0NUUkwgTWFza3MJCQkJCQkJCQkJCQkJKi8KKy8qIFRXSV9NQVNURVJfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lCU1FTgkJCTB4MDAwMQkJLyogTWFzdGVyIE1vZGUgRW5hYmxlCQkJCQkJKi8KICNkZWZpbmUJTUFERF9MRU4JMHgwMDAyCQkvKiBNYXN0ZXIgQWRkcmVzcyBMZW5ndGgJCQkJCSovCiAjZGVmaW5lCU1ESVIJCTB4MDAwNAkJLyogTWFzdGVyIFRyYW5zbWl0IERpcmVjdGlvbiAoUlgvVFgqKQkJKi8KQEAgLTE1NzYsMTE0ICsxNTc2LDYgQEAKIAogI2RlZmluZSAgICAgICAgICAgICBIT1NUX0NPVU5UX1RJTUVPVVQgIDB4N2ZmICAgICAgLyogSG9zdCBUaW1lb3V0IGNvdW50ICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgQ05UX0NPTkZJRyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIENOVEUgIDB4MSAgICAgICAgLyogQ291bnRlciBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuQ05URSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERFQkUgIDB4MiAgICAgICAgLyogRGVib3VuY2UgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkRFQkUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ0RHSU5WICAweDEwICAgICAgIC8qIENERyBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DREdJTlYgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1VESU5WICAweDIwICAgICAgIC8qIENVRCBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DVURJTlYgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNSU5WICAweDQwICAgICAgIC8qIENaTSBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1JTlYgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTlRNT0RFICAweDcwMCAgICAgIC8qIENvdW50ZXIgT3BlcmF0aW5nIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgWk1aQyAgMHg4MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblpNWkMgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBCTkRNT0RFICAweDMwMDAgICAgIC8qIEJvdW5kYXJ5IHJlZ2lzdGVyIE1vZGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIElOUERJUyAgMHg4MDAwICAgICAvKiBDVUcgYW5kIENERyBJbnB1dCBEaXNhYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5JTlBESVMgIDB4MAotCi0vKiBCaXQgbWFza3MgZm9yIENOVF9JTUFTSyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUUgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSUNJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDSUUgIDB4MiAgICAgICAgLyogVXAgY291bnQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5VQ0lFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRENJRSAgMHg0ICAgICAgICAvKiBEb3duIGNvdW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRENJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUUgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1JTkNJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQVhDSUUgIDB4MTAgICAgICAgLyogTWF4IENvdW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1BWENJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjMxSUUgIDB4MjAgICAgICAgLyogQml0IDMxIE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMzFJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUUgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMTVJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENaRVJPSUUgIDB4ODAgICAgICAgLyogQ291bnQgdG8gWmVybyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkNaRVJPSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENaTUlFICAweDEwMCAgICAgIC8qIENaTSBQaW4gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNaTUlFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJRSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNRUlFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTVpJRSAgMHg0MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNWklFICAweDAKLQotLyogQml0IG1hc2tzIGZvciBDTlRfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgSUNJSSAgMHgxICAgICAgICAvKiBJbGxlZ2FsIEdyYXkvQmluYXJ5IENvZGUgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuSUNJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDSUkgIDB4MiAgICAgICAgLyogVXAgY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERDSUkgIDB4NCAgICAgICAgLyogRG93biBjb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5EQ0lJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1JTkNJSSAgMHg4ICAgICAgICAvKiBNaW4gQ291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbk1JTkNJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQVhDSUkgIDB4MTAgICAgICAgLyogTWF4IENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YzMUlJICAweDIwICAgICAgIC8qIEJpdCAzMSBPdmVyZmxvdyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DT1YzMUlJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMTVJSSAgMHg0MCAgICAgICAvKiBCaXQgMTUgT3ZlcmZsb3cgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMTVJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENaRVJPSUkgIDB4ODAgICAgICAgLyogQ291bnQgdG8gWmVybyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDWk1JSSAgMHgxMDAgICAgICAvKiBDWk0gUGluIEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuQ1pNSUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNRUlJICAweDIwMCAgICAgIC8qIENaTSBFcnJvciBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNRUlJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTVpJSSAgMHg0MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJSSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgQ05UX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVzFMQ05UICAweGYgICAgICAgIC8qIExvYWQgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVzFMTUlOICAweGYwICAgICAgIC8qIExvYWQgTWluIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBXMUxNQVggIDB4ZjAwICAgICAgLyogTG9hZCBNYXggUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBXMVpNT05DRSAgMHgxMDAwICAgICAvKiBFbmFibGUgQ1pNIENsZWFyIENvdW50ZXIgT25jZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgblcxWk1PTkNFICAweDAKLQotLyogQml0IG1hc2tzIGZvciBDTlRfREVCT1VOQ0UgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgRFBSRVNDQUxFICAweGYgICAgICAgIC8qIExvYWQgQ291bnRlciBSZWdpc3RlciAqLwotCi0vKiBDTlRfQ09NTUFORCBiaXQgZmllbGQgb3B0aW9ucyAqLwotCi0jZGVmaW5lIFcxTENOVF9aRVJPICAgMHgwMDAxICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIHdpdGggemVybyAqLwotI2RlZmluZSBXMUxDTlRfTUlOICAgIDB4MDAwNCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NSU4gKi8KLSNkZWZpbmUgVzFMQ05UX01BWCAgICAweDAwMDggICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgZnJvbSBDTlRfTUFYICovCi0KLSNkZWZpbmUgVzFMTUlOX1pFUk8gICAweDAwMTAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiB3aXRoIHplcm8gKi8KLSNkZWZpbmUgVzFMTUlOX0NOVCAgICAweDAwMjAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9DT1VOVEVSICovCi0jZGVmaW5lIFcxTE1JTl9NQVggICAgMHgwMDgwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NSU4gZnJvbSBDTlRfTUFYICovCi0KLSNkZWZpbmUgVzFMTUFYX1pFUk8gICAweDAxMDAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCB3aXRoIHplcm8gKi8KLSNkZWZpbmUgVzFMTUFYX0NOVCAgICAweDAyMDAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCBmcm9tIENOVF9DT1VOVEVSICovCi0jZGVmaW5lIFcxTE1BWF9NSU4gICAgMHgwNDAwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggZnJvbSBDTlRfTUlOICovCi0KLS8qIENOVF9DT05GSUcgYml0IGZpZWxkIG9wdGlvbnMgKi8KLQotI2RlZmluZSBDTlRNT0RFX1FVQURFTkMgIDB4MDAwMCAgLyogcXVhZHJhdHVyZSBlbmNvZGVyIG1vZGUgKi8KLSNkZWZpbmUgQ05UTU9ERV9CSU5FTkMgICAweDAxMDAgIC8qIGJpbmFyeSBlbmNvZGVyIG1vZGUgKi8KLSNkZWZpbmUgQ05UTU9ERV9VRENOVCAgICAweDAyMDAgIC8qIHVwL2Rvd24gY291bnRlciBtb2RlICovCi0jZGVmaW5lIENOVE1PREVfRElSQ05UICAgMHgwNDAwICAvKiBkaXJlY3Rpb24gY291bnRlciBtb2RlICovCi0jZGVmaW5lIENOVE1PREVfRElSVE1SICAgMHgwNTAwICAvKiBkaXJlY3Rpb24gdGltZXIgbW9kZSAqLwotCi0jZGVmaW5lIEJORE1PREVfQ09NUCAgICAgMHgwMDAwICAvKiBib3VuZGFyeSBjb21wYXJlIG1vZGUgKi8KLSNkZWZpbmUgQk5ETU9ERV9aRVJPICAgICAweDEwMDAgIC8qIGJvdW5kYXJ5IGNvbXBhcmUgYW5kIHplcm8gbW9kZSAqLwotI2RlZmluZSBCTkRNT0RFX0NBUFQgICAgIDB4MjAwMCAgLyogYm91bmRhcnkgY2FwdHVyZSBtb2RlICovCi0jZGVmaW5lIEJORE1PREVfQUVYVCAgICAgMHgzMDAwICAvKiBib3VuZGFyeSBhdXRvLWV4dGVuZCBtb2RlICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgU0VDVVJFX1NZU1NXVCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIEVNVURBQkwgIDB4MSAgICAgICAgLyogRW11bGF0aW9uIERpc2FibGUuICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGJiYWIyZDcuLjlhZjZjZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC03LDQ4ICs3LDQ5IEBACiAjaWZuZGVmIF9NQUNIX0dQSU9fSF8KICNkZWZpbmUgX01BQ0hfR1BJT19IXwogCi0jZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyA0MAorI2RlZmluZSBNQVhfQkxBQ0tGSU5fR1BJT1MgNDEKIAotI2RlZmluZQlHUElPX1BGMAkwCi0jZGVmaW5lCUdQSU9fUEYxCTEKLSNkZWZpbmUJR1BJT19QRjIJMgotI2RlZmluZQlHUElPX1BGMwkzCi0jZGVmaW5lCUdQSU9fUEY0CTQKLSNkZWZpbmUJR1BJT19QRjUJNQotI2RlZmluZQlHUElPX1BGNgk2Ci0jZGVmaW5lCUdQSU9fUEY3CTcKLSNkZWZpbmUJR1BJT19QRjgJOAotI2RlZmluZQlHUElPX1BGOQk5Ci0jZGVmaW5lCUdQSU9fUEYxMAkxMAotI2RlZmluZQlHUElPX1BGMTEJMTEKLSNkZWZpbmUJR1BJT19QRjEyCTEyCi0jZGVmaW5lCUdQSU9fUEYxMwkxMwotI2RlZmluZQlHUElPX1BGMTQJMTQKLSNkZWZpbmUJR1BJT19QRjE1CTE1Ci0jZGVmaW5lCUdQSU9fUEcwCTE2Ci0jZGVmaW5lCUdQSU9fUEcxCTE3Ci0jZGVmaW5lCUdQSU9fUEcyCTE4Ci0jZGVmaW5lCUdQSU9fUEczCTE5Ci0jZGVmaW5lCUdQSU9fUEc0CTIwCi0jZGVmaW5lCUdQSU9fUEc1CTIxCi0jZGVmaW5lCUdQSU9fUEc2CTIyCi0jZGVmaW5lCUdQSU9fUEc3CTIzCi0jZGVmaW5lCUdQSU9fUEc4CTI0Ci0jZGVmaW5lCUdQSU9fUEc5CTI1Ci0jZGVmaW5lCUdQSU9fUEcxMCAgICAgIAkyNgotI2RlZmluZQlHUElPX1BHMTEgICAgICAJMjcKLSNkZWZpbmUJR1BJT19QRzEyICAgICAgCTI4Ci0jZGVmaW5lCUdQSU9fUEcxMyAgICAgIAkyOQotI2RlZmluZQlHUElPX1BHMTQgICAgICAJMzAKLSNkZWZpbmUJR1BJT19QRzE1ICAgICAgCTMxCi0jZGVmaW5lCUdQSU9fUEgwCTMyCi0jZGVmaW5lCUdQSU9fUEgxCTMzCi0jZGVmaW5lCUdQSU9fUEgyCTM0Ci0jZGVmaW5lCUdQSU9fUEgzCTM1Ci0jZGVmaW5lCUdQSU9fUEg0CTM2Ci0jZGVmaW5lCUdQSU9fUEg1CTM3Ci0jZGVmaW5lCUdQSU9fUEg2CTM4Ci0jZGVmaW5lCUdQSU9fUEg3CTM5CisjZGVmaW5lIEdQSU9fUEYwCTAKKyNkZWZpbmUgR1BJT19QRjEJMQorI2RlZmluZSBHUElPX1BGMgkyCisjZGVmaW5lIEdQSU9fUEYzCTMKKyNkZWZpbmUgR1BJT19QRjQJNAorI2RlZmluZSBHUElPX1BGNQk1CisjZGVmaW5lIEdQSU9fUEY2CTYKKyNkZWZpbmUgR1BJT19QRjcJNworI2RlZmluZSBHUElPX1BGOAk4CisjZGVmaW5lIEdQSU9fUEY5CTkKKyNkZWZpbmUgR1BJT19QRjEwCTEwCisjZGVmaW5lIEdQSU9fUEYxMQkxMQorI2RlZmluZSBHUElPX1BGMTIJMTIKKyNkZWZpbmUgR1BJT19QRjEzCTEzCisjZGVmaW5lIEdQSU9fUEYxNAkxNAorI2RlZmluZSBHUElPX1BGMTUJMTUKKyNkZWZpbmUgR1BJT19QRzAJMTYKKyNkZWZpbmUgR1BJT19QRzEJMTcKKyNkZWZpbmUgR1BJT19QRzIJMTgKKyNkZWZpbmUgR1BJT19QRzMJMTkKKyNkZWZpbmUgR1BJT19QRzQJMjAKKyNkZWZpbmUgR1BJT19QRzUJMjEKKyNkZWZpbmUgR1BJT19QRzYJMjIKKyNkZWZpbmUgR1BJT19QRzcJMjMKKyNkZWZpbmUgR1BJT19QRzgJMjQKKyNkZWZpbmUgR1BJT19QRzkJMjUKKyNkZWZpbmUgR1BJT19QRzEwCTI2CisjZGVmaW5lIEdQSU9fUEcxMQkyNworI2RlZmluZSBHUElPX1BHMTIJMjgKKyNkZWZpbmUgR1BJT19QRzEzCTI5CisjZGVmaW5lIEdQSU9fUEcxNAkzMAorI2RlZmluZSBHUElPX1BHMTUJMzEKKyNkZWZpbmUgR1BJT19QSDAJMzIKKyNkZWZpbmUgR1BJT19QSDEJMzMKKyNkZWZpbmUgR1BJT19QSDIJMzQKKyNkZWZpbmUgR1BJT19QSDMJMzUKKyNkZWZpbmUgR1BJT19QSDQJMzYKKyNkZWZpbmUgR1BJT19QSDUJMzcKKyNkZWZpbmUgR1BJT19QSDYJMzgKKyNkZWZpbmUgR1BJT19QSDcJMzkKKyNkZWZpbmUgR1BJT19QSDgJNDAKIAogI2RlZmluZSBQT1JUX0YgR1BJT19QRjAKICNkZWZpbmUgUE9SVF9HIEdQSU9fUEcwCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGUzNTI5MTAuLmNkODRhNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTIAlNQVhfQkxBQ0tGSU5fR1BJT1MKKyNkZWZpbmUgTUFYX1JFU09VUkNFUwlNQVhfQkxBQ0tGSU5fR1BJT1MKIAogLyogRU1BQyBNSUkvUk1JSSBQb3J0IE11eCAqLwogI2RlZmluZSBQX01JSTBfRVR4RDIJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjApIHwgUF9GVU5DVCgwKSkKQEAgLTk1LDcgKzk1LDcgQEAKICNkZWZpbmUgUF9TUEkwX1NTRUwxCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEY3KSB8IFBfRlVOQ1QoMCkpCiAjZGVmaW5lIFBfU1BJMF9TU0VMMgkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMTUpIHwgUF9GVU5DVCgwKSkKICNkZWZpbmUgUF9TUEkwX1NTRUwzCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEg0KSB8IFBfRlVOQ1QoMikpCi0jZGVmaW5lIFBfU1BJMF9TU0VMNAkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMTApIHwgUF9GVU5DVCgyKSkKKyNkZWZpbmUgUF9TUEkwX1NTRUw0CShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEg4KSB8IFBfRlVOQ1QoMikpCiAjZGVmaW5lIFBfU1BJMF9TU0VMNQkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMykgfCBQX0ZVTkNUKDIpKQogCiAjZGVmaW5lIFBfU1BJMV9TUwkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BIMCkgfCBQX0ZVTkNUKDEpKQpAQCAtMTA5LDYgKzEwOSw3IEBACiAjZGVmaW5lIFBfU1BJMV9TU0VMNAkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BGOCkgfCBQX0ZVTkNUKDIpKQogI2RlZmluZSBQX1NQSTFfU1NFTDUJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRzExKSB8IFBfRlVOQ1QoMikpCiAKKyNkZWZpbmUgR1BJT19ERUZBVUxUX0JPT1RfU1BJX0NTIEdQSU9fUEcxNQogI2RlZmluZSBQX0RFRkFVTFRfQk9PVF9TUElfQ1MgUF9TUEkwX1NTRUwyCiAKIC8qIFNQT1JUIFBvcnQgTXV4ICovCkBAIC0xOTUsNiArMTk2LDYgQEAKICNkZWZpbmUgUF9BTVMyCQkJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRzExKSB8IFBfRlVOQ1QoMSkpCiAjZGVmaW5lIFBfQU1TMwkJCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEcxNSkgfCBQX0ZVTkNUKDIpKQogCi0jZGVmaW5lIFBfSFdBSVQJCQkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMDAwMDAwMDAwKSB8IFBfRlVOQ1QoMSkpCisjZGVmaW5lIFBfSFdBSVQJCQkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMCkgfCBQX0ZVTkNUKDEpKQogCiAjZW5kaWYJCQkJLyogX01BQ0hfUE9SVE1VWF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L0tjb25maWcgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvS2NvbmZpZwppbmRleCAxZjhjYmU5Li4wYmE1NDcwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvS2NvbmZpZworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvS2NvbmZpZwpAQCAtNzksNiArNzksNzIgQEAKIAkgIFBPUlQgSAogZW5kY2hvaWNlCiAKK2NvbW1lbnQgIkh5c3RlcmVzaXMvU2NobWl0dCBUcmlnZ2VyIENvbnRyb2wiCitjb25maWcgQkZJTl9IWVNURVJFU0lTX0NPTlRST0wKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBDb250cm9sIgorCWhlbHAKKwkgIFRoZSBBRFNQLUJGNTJ4IGFsbG93cyB0byBjb250cm9sIGlucHV0IGh5c3RlcmVzaXMgZm9yIFBvcnQgRiwKKwkgIFBvcnQgRyBhbmQgUG9ydCBIIGFuZCBvdGhlciBwcm9jZXNzb3Igc2lnbmFsIGlucHV0cy4KKwkgIFRoZSBTY2htaXR0IHRyaWdnZXIgZW5hYmxlcyBjYW4gYmUgc2V0IG9ubHkgZm9yIHBpbiBncm91cHMuCisJICBTYXlpbmcgWSB3aWxsIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCByZXNldCBvciBib290IGxvYWRlcgorCSAgaW5pdGlhbGl6YXRpb24uCisKK21lbnUgIlBPUlQgRiIKKwlkZXBlbmRzIG9uIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzBfNworCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRGIHswLi4uN30iCitjb25maWcgR1BJT19IWVNUX1BPUlRGXzhfOQorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRGIHs4LCA5fSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEZfMTAKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiAxMCIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEZfMTEKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiAxMSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEZfMTJfMTMKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiB7MTIsIDEzfSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEZfMTRfMTUKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURiB7MTQsIDE1fSIKK2VuZG1lbnUKKworbWVudSAiUE9SVCBHIgorCWRlcGVuZHMgb24gQkZJTl9IWVNURVJFU0lTX0NPTlRST0wKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEdfMAorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIDAiCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzFfNAorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIHsxLi4uNH0iCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzVfNgorCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRHIHs1LCA2fSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEdfN184CisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEcgezcsIDh9IgorY29uZmlnIEdQSU9fSFlTVF9QT1JUR185CisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEcgOSIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEdfMTAKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURyAxMCIKK2NvbmZpZyBHUElPX0hZU1RfUE9SVEdfMTFfMTMKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JURyB7MTEuLi4xM30iCitjb25maWcgR1BJT19IWVNUX1BPUlRHXzE0XzE1CisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEcgezE0LCAxNX0iCitlbmRtZW51CisKK21lbnUgIlBPUlQgSCIKKwlkZXBlbmRzIG9uIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCitjb25maWcgR1BJT19IWVNUX1BPUlRIXzBfNworCWJvb2wgIkVuYWJsZSBIeXN0ZXJlc2lzIG9uIFBPUlRIIHswLi4uN30iCitjb25maWcgR1BJT19IWVNUX1BPUlRIXzgKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBQT1JUSCA4IgorY29uZmlnIEdQSU9fSFlTVF9QT1JUSF85XzE1CisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24gUE9SVEggezkuLi4xNX0iCitlbmRtZW51CisKK21lbnUgIk5vbmUtR1BJTyIKKwlkZXBlbmRzIG9uIEJGSU5fSFlTVEVSRVNJU19DT05UUk9MCitjb25maWcgTk9ORUdQSU9fSFlTVF9UTVIwX0ZTMV9QUElDTEsKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiB7VE1SMCwgUFBJX0ZTMSwgUFBJX0NMS30iCitjb25maWcgTk9ORUdQSU9fSFlTVF9OTUlfUlNUX0JNT0RFCisJYm9vbCAiRW5hYmxlIEh5c3RlcmVzaXMgb24ge05NSSwgUkVTRVQsIEJNT0RFfSIKK2NvbmZpZyBOT05FR1BJT19IWVNUX0pUQUcKKwlib29sICJFbmFibGUgSHlzdGVyZXNpcyBvbiBKVEFHIgorZW5kbWVudQorCiBjb21tZW50ICJJbnRlcnJ1cHQgUHJpb3JpdHkgQXNzaWdubWVudCIKIG1lbnUgIlByaW9yaXR5IgogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IDAyMDQwZGYuLjkzNThhZmEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtNSwxMyArNSwxMyBAQAogICogYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIHRoYXQgdmVyc2lvbiBhdCBhbnkgdGltZQogICogRE8gTk9UIEVESVQgVEhJUyBGSUxFCiAgKgotICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2UuCiAgKiAgIGh0dHBzOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1hZGlfYnNkCiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZCBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBELCAwOC8xNC8yMDA5OyBBRFNQLUJGNTI2IEJsYWNrZmluIFByb2Nlc3NvciBBbm9tYWx5IExpc3QKKyAqICAtIFJldmlzaW9uIEUsIDAzLzE1LzIwMTA7IEFEU1AtQkY1MjYgQmxhY2tmaW4gUHJvY2Vzc29yIEFub21hbHkgTGlzdAogICogIC0gUmV2aXNpb24gRywgMDgvMjUvMjAwOTsgQURTUC1CRjUyNyBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CiAgKi8KIApAQCAtNDEsNyArNDEsNyBAQAogLyogTXVsdGktSXNzdWUgSW5zdHJ1Y3Rpb24gd2l0aCBkc3AzMnNoaWZ0aW1tIGluIHNsb3QxIGFuZCBQLXJlZyBTdG9yZSBpbiBzbG90MiBOb3QgU3VwcG9ydGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwNzQgKDEpCiAvKiBETUFfUlVOIEJpdCBJcyBOb3QgVmFsaWQgYWZ0ZXIgYSBQZXJpcGhlcmFsIFJlY2VpdmUgQ2hhbm5lbCBETUEgU3RvcHMgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDExOSAoMSkJLyogbm90ZTogYnJva2VubmVzcyBpcyBub3RlZCBpbiBkb2N1bWVudGF0aW9uLCBub3QgYW5vbWFseSBzaGVldCAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwMTE5ICgxKQogLyogUnguSCBDYW5ub3QgQmUgVXNlZCB0byBBY2Nlc3MgMTYtYml0IFN5c3RlbSBNTVIgUmVnaXN0ZXJzICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMjIgKDEpCiAvKiBGYWxzZSBIYXJkd2FyZSBFcnJvciBmcm9tIGFuIEFjY2VzcyBpbiB0aGUgU2hhZG93IG9mIGEgQ29uZGl0aW9uYWwgQnJhbmNoICovCkBAIC0xNjgsNiArMTY4LDggQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzMSAoMSkKIC8qIGJmcm9tX1N5c0NvbnRyb2woKSBEb2VzIE5vdCBDbGVhciBTSUNfSVdSMSBCZWZvcmUgRXhlY3V0aW5nIFBMTCBQcm9ncmFtbWluZyBTZXF1ZW5jZSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMyIChfQU5PTUFMWV9CRjUyNig8IDEpKQorLyogU1cgQnJlYWtwb2ludHMgSWdub3JlZCBVcG9uIFJldHVybiBGcm9tIExvY2tib3ggQXV0aGVudGljYXRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzNCAoMSkKIC8qIENlcnRhaW4gU0lDIFJlZ2lzdGVycyBhcmUgbm90IFJlc2V0IEFmdGVyIFNvZnQgb3IgQ29yZSBEb3VibGUgRmF1bHQgUmVzZXQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQzNSAoX0FOT01BTFlfQkY1MjZfQkY1MjcoPCAxLCA+PSAwKSkKIC8qIFByZWJvb3QgQ2Fubm90IGJlIFVzZWQgdG8gQWx0ZXIgdGhlIFBMTF9ESVYgUmVnaXN0ZXIgKi8KQEAgLTIwNCwxMCArMjA2LDIyIEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjcgKDEpCiAvKiBQTEwgTGF0Y2hlcyBJbmNvcnJlY3QgU2V0dGluZ3MgRHVyaW5nIFJlc2V0ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjkgKDEpCisvKiBJbmNvcnJlY3QgRGVmYXVsdCBNU0VMIFZhbHVlIGluIFBMTF9DVEwgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3MiAoX0FOT01BTFlfQkY1MjYoPj0gMCkpCiAvKiBJbnRlcnJ1cHRlZCAzMi1CaXQgU1BPUlQgRGF0YSBSZWdpc3RlciBBY2Nlc3MgUmVzdWx0cyBJbiBVbmRlcmZsb3cgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3MyAoMSkKKy8qIFBvc3NpYmxlIExvY2t1cCBDb25kaXRpb24gd2hlbSBNb2RpZnlpbmcgUExMIGZyb20gRXh0ZXJuYWwgTWVtb3J5ICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzUgKDEpCiAvKiBURVNUU0VUIEluc3RydWN0aW9uIENhbm5vdCBCZSBJbnRlcnJ1cHRlZCAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc3ICgxKQorLyogUmVhZHMgb2YgSVRFU1RfQ09NTUFORCBhbmQgSVRFU1RfREFUQSBSZWdpc3RlcnMgQ2F1c2UgQ2FjaGUgQ29ycnVwdGlvbiAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDgxICgxKQorLyogUG9zc2libGUgVVNCIERhdGEgQ29ycnVwdGlvbiBXaGVuIE11bHRpcGxlIEVuZHBvaW50cyBBcmUgQWNjZXNzZWQgYnkgdGhlIENvcmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ4MyAoMSkKKy8qIFBMTF9DVEwgQ2hhbmdlIFVzaW5nIGJmcm9tX1N5c0NvbnRyb2woKSBDYW4gUmVzdWx0IGluIFByb2Nlc3NvciBPdmVyY2xvY2tpbmcgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ4NSAoX0FOT01BTFlfQkY1MjZfQkY1MjcoPCAyLCA8IDMpKQorLyogSUZMVVNIIHN1Y2tzIGF0IGxpZmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ5MSAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0yMjMsNiArMjM3LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDE5OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIwMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxNSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxOSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyMCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMCAoMCkKQEAgLTI1OSw2ICsyNzQsNSBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ3ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQ4ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc0ICgwKQotI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaAppbmRleCBmZjY4Yzg4Li44ZmYxNTViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCkBAIC04NSw2ICs4NSwxMjYgQEAKIAogI2RlZmluZSBBTUdDVExWQUwJKFZfQU1CRU4gfCBWX0FNQ0tFTiB8IFZfQ0RQUklPKQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBIeXN0ZXJlc2lzIFNldHRpbmdzICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBDT05GSUdfQkZJTl9IWVNURVJFU0lTX0NPTlRST0wKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzBfNworI2RlZmluZSBIWVNUX1BPUlRGXzBfNwkJKDEgPDwgMCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEZfMF83CQkoMCA8PCAwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JURl84XzkKKyNkZWZpbmUgSFlTVF9QT1JURl84XzkJCSgxIDw8IDIpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzhfOQkJKDAgPDwgMikKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEZfMTAKKyNkZWZpbmUgSFlTVF9QT1JURl8xMAkJKDEgPDwgNCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEZfMTAJCSgwIDw8IDQpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzExCisjZGVmaW5lIEhZU1RfUE9SVEZfMTEJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzExCQkoMCA8PCA2KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JURl8xMl8xMworI2RlZmluZSBIWVNUX1BPUlRGXzEyXzEzCSgxIDw8IDgpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzEyXzEzCSgwIDw8IDgpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRGXzE0XzE1CisjZGVmaW5lIEhZU1RfUE9SVEZfMTRfMTUJKDEgPDwgMTApCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRGXzE0XzE1CSgwIDw8IDEwKQorI2VuZGlmCisKKyNkZWZpbmUgSFlTVF9QT1JURl8wXzE1CShIWVNUX1BPUlRGXzBfNyB8IEhZU1RfUE9SVEZfOF85IHwgSFlTVF9QT1JURl8xMCB8IFwKKwkJSFlTVF9QT1JURl8xMSB8IEhZU1RfUE9SVEZfMTJfMTMgfCBIWVNUX1BPUlRGXzE0XzE1KQorCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR18wCisjZGVmaW5lIEhZU1RfUE9SVEdfMAkJKDEgPDwgMCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEdfMAkJKDAgPDwgMCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEdfMV80CisjZGVmaW5lIEhZU1RfUE9SVEdfMV80CQkoMSA8PCAyKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xXzQJCSgwIDw8IDIpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzVfNgorI2RlZmluZSBIWVNUX1BPUlRHXzVfNgkJKDEgPDwgNCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEdfNV82CQkoMCA8PCA0KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR183XzgKKyNkZWZpbmUgSFlTVF9QT1JUR183XzgJCSgxIDw8IDYpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzdfOAkJKDAgPDwgNikKKyNlbmRpZgorI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEdfOQorI2RlZmluZSBIWVNUX1BPUlRHXzkJCSgxIDw8IDgpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzkJCSgwIDw8IDgpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzEwCisjZGVmaW5lIEhZU1RfUE9SVEdfMTAJCSgxIDw8IDEwKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xMAkJKDAgPDwgMTApCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRHXzExXzEzCisjZGVmaW5lIEhZU1RfUE9SVEdfMTFfMTMJKDEgPDwgMTIpCisjZWxzZQorI2RlZmluZSBIWVNUX1BPUlRHXzExXzEzCSgwIDw8IDEyKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUR18xNF8xNQorI2RlZmluZSBIWVNUX1BPUlRHXzE0XzE1CSgxIDw8IDE0KQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUR18xNF8xNQkoMCA8PCAxNCkKKyNlbmRpZgorCisjZGVmaW5lIEhZU1RfUE9SVEdfMF8xNQkoSFlTVF9QT1JUR18wIHwgSFlTVF9QT1JUR18xXzQgfCBIWVNUX1BPUlRHXzVfNiB8IFwKKwkJSFlTVF9QT1JUR183XzggfCBIWVNUX1BPUlRHXzkgfCBIWVNUX1BPUlRHXzEwIHwgXAorCQlIWVNUX1BPUlRHXzExXzEzIHwgSFlTVF9QT1JUR18xNF8xNSkKKworI2lmZGVmIENPTkZJR19HUElPX0hZU1RfUE9SVEhfMF83CisjZGVmaW5lIEhZU1RfUE9SVEhfMF83CQkoMSA8PCAwKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUSF8wXzcJCSgwIDw8IDApCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfR1BJT19IWVNUX1BPUlRIXzgKKyNkZWZpbmUgSFlTVF9QT1JUSF84CQkoMSA8PCAyKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9QT1JUSF84CQkoMCA8PCAyKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0dQSU9fSFlTVF9QT1JUSF85XzE1CisjZGVmaW5lIEhZU1RfUE9SVEhfOV8xNQkJKDEgPDwgNCkKKyNlbHNlCisjZGVmaW5lIEhZU1RfUE9SVEhfOV8xNQkJKDAgPDwgNCkKKyNlbmRpZgorCisjZGVmaW5lIEhZU1RfUE9SVEhfMF8xNQkoSFlTVF9QT1JUSF8wXzcgfCBIWVNUX1BPUlRIXzggfCBIWVNUX1BPUlRIXzlfMTUpCisKKyNpZmRlZiBDT05GSUdfTk9ORUdQSU9fSFlTVF9UTVIwX0ZTMV9QUElDTEsKKyNkZWZpbmUgSFlTVF9UTVIwX0ZTMV9QUElDTEsJCSgxIDw8IDApCisjZWxzZQorI2RlZmluZSBIWVNUX1RNUjBfRlMxX1BQSUNMSwkJKDAgPDwgMCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19OT05FR1BJT19IWVNUX05NSV9SU1RfQk1PREUKKyNkZWZpbmUgSFlTVF9OTUlfUlNUX0JNT0RFCQkoMSA8PCAyKQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9OTUlfUlNUX0JNT0RFCQkoMCA8PCAyKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX05PTkVHUElPX0hZU1RfSlRBRworI2RlZmluZSBIWVNUX0pUQUcJCQkoMSA8PCA0KQorI2Vsc2UKKyNkZWZpbmUgSFlTVF9KVEFHCQkJKDAgPDwgNCkKKyNlbmRpZgorCisjZGVmaW5lIEhZU1RfTk9ORUdQSU8JKEhZU1RfVE1SMF9GUzFfUFBJQ0xLIHwgSFlTVF9OTUlfUlNUX0JNT0RFIHwgSFlTVF9KVEFHKQorI2RlZmluZSBIWVNUX05PTkVHUElPX01BU0sJCSgweDNGKQorI2VuZGlmIC8qIENPTkZJR19CRklOX0hZU1RFUkVTSVNfQ09OVFJPTCAqLworCiAjaWZkZWYgQ09ORklHX0JGNTI3CiAjZGVmaW5lIENQVSAiQkY1MjciCiAjZGVmaW5lIENQVUlEIDB4MjdlMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyeF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaAppbmRleCA4YjE4YjUzLi41Zjk3ZjAxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaApAQCAtNDU4LDIyICs0NTgsMjIgQEAKIAogLyogVHdvLVdpcmUgSW50ZXJmYWNlCQkoMHhGRkMwMTQwMCAtIDB4RkZDMDE0RkYpCQkJCQkJCQkqLwogI2RlZmluZSBUV0kwX1JFR0JBU0UJCQkweEZGQzAxNDAwCi0jZGVmaW5lIFRXSV9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyCQkJKi8KLSNkZWZpbmUgVFdJX0NPTlRST0wJCQkweEZGQzAxNDA0CS8qIFRXSSBDb250cm9sIFJlZ2lzdGVyCQkJCQkJKi8KLSNkZWZpbmUgVFdJX1NMQVZFX0NUTAkJMHhGRkMwMTQwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCi0jZGVmaW5lIFRXSV9NQVNURVJfQ1RMCQkweEZGQzAxNDE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KLSNkZWZpbmUgVFdJX01BU1RFUl9TVEFUCQkweEZGQzAxNDE4CS8qIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0lfTUFTVEVSX0FERFIJCTB4RkZDMDE0MUMJLyogTWFzdGVyIE1vZGUgQWRkcmVzcyBSZWdpc3RlcgkJCQkqLwotI2RlZmluZSBUV0lfSU5UX1NUQVQJCTB4RkZDMDE0MjAJLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJCQkqLwotI2RlZmluZSBUV0lfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgkJKi8KLSNkZWZpbmUgVFdJX0ZJRk9fQ1RMCQkweEZGQzAxNDI4CS8qIEZJRk8gQ29udHJvbCBSZWdpc3RlcgkJCQkJKi8KLSNkZWZpbmUgVFdJX0ZJRk9fU1RBVAkJMHhGRkMwMTQyQwkvKiBGSUZPIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCi0jZGVmaW5lIFRXSV9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFRXSV9YTVRfREFUQTE2CQkweEZGQzAxNDg0CS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlcgkqLwotI2RlZmluZSBUV0lfUkNWX0RBVEE4CQkweEZGQzAxNDg4CS8qIEZJRk8gUmVjZWl2ZSBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCi0jZGVmaW5lIFRXSV9SQ1ZfREFUQTE2CQkweEZGQzAxNDhDCS8qIEZJRk8gUmVjZWl2ZSBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSTBfQ0xLRElWCQkJMHhGRkMwMTQwMAkvKiBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlcgkJCSovCisjZGVmaW5lIFRXSTBfQ09OVFJPTAkJCTB4RkZDMDE0MDQJLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIJCQkJCQkqLworI2RlZmluZSBUV0kwX1NMQVZFX0NUTAkJMHhGRkMwMTQwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9TTEFWRV9TVEFUCQkweEZGQzAxNDBDCS8qIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfU0xBVkVfQUREUgkJMHhGRkMwMTQxMAkvKiBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9NQVNURVJfQ1RMCQkweEZGQzAxNDE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9NQVNURVJfU1RBVAkJMHhGRkMwMTQxOAkvKiBNYXN0ZXIgTW9kZSBTdGF0dXMgUmVnaXN0ZXIJCQkJKi8KKyNkZWZpbmUgVFdJMF9NQVNURVJfQUREUgkJMHhGRkMwMTQxQwkvKiBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyCQkJCSovCisjZGVmaW5lIFRXSTBfSU5UX1NUQVQJCTB4RkZDMDE0MjAJLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIJCQkqLworI2RlZmluZSBUV0kwX0lOVF9NQVNLCQkweEZGQzAxNDI0CS8qIFRXSSBNYXN0ZXIgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFRXSTBfRklGT19DVEwJCTB4RkZDMDE0MjgJLyogRklGTyBDb250cm9sIFJlZ2lzdGVyCQkJCQkqLworI2RlZmluZSBUV0kwX0ZJRk9fU1RBVAkJMHhGRkMwMTQyQwkvKiBGSUZPIFN0YXR1cyBSZWdpc3RlcgkJCQkJCSovCisjZGVmaW5lIFRXSTBfWE1UX0RBVEE4CQkweEZGQzAxNDgwCS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlcgkqLworI2RlZmluZSBUV0kwX1hNVF9EQVRBMTYJCTB4RkZDMDE0ODQJLyogRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSTBfUkNWX0RBVEE4CQkweEZGQzAxNDg4CS8qIEZJRk8gUmVjZWl2ZSBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyCSovCisjZGVmaW5lIFRXSTBfUkNWX0RBVEExNgkJMHhGRkMwMTQ4QwkvKiBGSUZPIFJlY2VpdmUgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlcgkqLwogCiAKIC8qIEdlbmVyYWwgUHVycG9zZSBJL08gUG9ydCBHICgweEZGQzAxNTAwIC0gMHhGRkMwMTVGRikJCQkJCQkJCQkJCQkqLwpAQCAtMTMyOCw3ICsxMzI4LDcgQEAKICNkZWZpbmUJVFdJX0VOQQkJMHgwMDgwCQkvKiBUV0kgRW5hYmxlCQkJCQkJCQkJKi8KICNkZWZpbmUJU0NDQgkJMHgwMjAwCQkvKiBTQ0NCIENvbXBhdGliaWxpdHkgRW5hYmxlCQkJCQkqLwogCi0vKiBUV0lfU0xBVkVfQ1RSTCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCisvKiBUV0lfU0xBVkVfQ1RMIE1hc2tzCQkJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUJU0VOCQkJMHgwMDAxCQkvKiBTbGF2ZSBFbmFibGUJCQkJCQkJCQkqLwogI2RlZmluZQlTQUREX0xFTgkweDAwMDIJCS8qIFNsYXZlIEFkZHJlc3MgTGVuZ3RoCQkJCQkJCSovCiAjZGVmaW5lCVNURFZBTAkJMHgwMDA0CQkvKiBTbGF2ZSBUcmFuc21pdCBEYXRhIFZhbGlkCQkJCQkqLwpAQCAtMTMzOSw3ICsxMzM5LDcgQEAKICNkZWZpbmUJU0RJUgkJMHgwMDAxCQkvKiBTbGF2ZSBUcmFuc2ZlciBEaXJlY3Rpb24gKFRyYW5zbWl0L1JlY2VpdmUqKQkqLwogI2RlZmluZSBHQ0FMTAkJMHgwMDAyCQkvKiBHZW5lcmFsIENhbGwgSW5kaWNhdG9yCQkJCQkJKi8KIAotLyogVFdJX01BU1RFUl9DVFJMIE1hc2tzCQkJCQkJCQkJCQkJCSovCisvKiBUV0lfTUFTVEVSX0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkqLwogI2RlZmluZQlNRU4JCQkweDAwMDEJCS8qIE1hc3RlciBNb2RlIEVuYWJsZQkJCQkJCSovCiAjZGVmaW5lCU1BRERfTEVOCTB4MDAwMgkJLyogTWFzdGVyIEFkZHJlc3MgTGVuZ3RoCQkJCQkqLwogI2RlZmluZQlNRElSCQkweDAwMDQJCS8qIE1hc3RlciBUcmFuc21pdCBEaXJlY3Rpb24gKFJYL1RYKikJCSovCkBAIC0xNTg5LDExNCArMTU4OSw2IEBACiAKICNkZWZpbmUgICAgICAgICAgICAgSE9TVF9DT1VOVF9USU1FT1VUICAweDdmZiAgICAgIC8qIEhvc3QgVGltZW91dCBjb3VudCAqLwogCi0vKiBCaXQgbWFza3MgZm9yIENOVF9DT05GSUcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRFICAweDEgICAgICAgIC8qIENvdW50ZXIgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkNOVEUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBERUJFICAweDIgICAgICAgIC8qIERlYm91bmNlIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5ERUJFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENER0lOViAgMHgxMCAgICAgICAvKiBDREcgUGluIFBvbGFyaXR5IEludmVydCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ0RHSU5WICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENVRElOViAgMHgyMCAgICAgICAvKiBDVUQgUGluIFBvbGFyaXR5IEludmVydCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1VESU5WICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUlOViAgMHg0MCAgICAgICAvKiBDWk0gUGluIFBvbGFyaXR5IEludmVydCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuQ1pNSU5WICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ05UTU9ERSAgMHg3MDAgICAgICAvKiBDb3VudGVyIE9wZXJhdGluZyBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFpNWkMgIDB4ODAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIG5aTVpDICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQk5ETU9ERSAgMHgzMDAwICAgICAvKiBCb3VuZGFyeSByZWdpc3RlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBJTlBESVMgIDB4ODAwMCAgICAgLyogQ1VHIGFuZCBDREcgSW5wdXQgRGlzYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuSU5QRElTICAweDAKLQotLyogQml0IG1hc2tzIGZvciBDTlRfSU1BU0sgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBJQ0lFICAweDEgICAgICAgIC8qIElsbGVnYWwgR3JheS9CaW5hcnkgQ29kZSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbklDSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVQ0lFICAweDIgICAgICAgIC8qIFVwIGNvdW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuVUNJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERDSUUgIDB4NCAgICAgICAgLyogRG93biBjb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbkRDSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUlOQ0lFICAweDggICAgICAgIC8qIE1pbiBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NSU5DSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUFYQ0lFICAweDEwICAgICAgIC8qIE1heCBDb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NQVhDSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YzMUlFICAweDIwICAgICAgIC8qIEJpdCAzMSBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkNPVjMxSUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YxNUlFICAweDQwICAgICAgIC8qIEJpdCAxNSBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkNPVjE1SUUgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDWkVST0lFICAweDgwICAgICAgIC8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIG5DWkVST0lFICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDWk1JRSAgMHgxMDAgICAgICAvKiBDWk0gUGluIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIG5DWk1JRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1FSUUgIDB4MjAwICAgICAgLyogQ1pNIEVycm9yIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTUVJRSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1aSUUgIDB4NDAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTVpJRSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgQ05UX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUkgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgbklDSUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBVQ0lJICAweDIgICAgICAgIC8qIFVwIGNvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgblVDSUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBEQ0lJICAweDQgICAgICAgIC8qIERvd24gY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBuRENJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUkgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5NSU5DSUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTUFYQ0lJICAweDEwICAgICAgIC8qIE1heCBDb3VudCBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTUFYQ0lJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ09WMzFJSSAgMHgyMCAgICAgICAvKiBCaXQgMzEgT3ZlcmZsb3cgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ09WMzFJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUkgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkNPVjE1SUkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDWkVST0lJICAweDgwICAgICAgIC8qIENvdW50IHRvIFplcm8gSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuQ1pFUk9JSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgQ1pNSUkgIDB4MTAwICAgICAgLyogQ1pNIFBpbiBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgbkNaTUlJICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJSSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbkNaTUVJSSAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDWk1aSUkgIDB4NDAwICAgICAgLyogQ1pNIFplcm9lcyBDb3VudGVyIEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIG5DWk1aSUkgIDB4MAotCi0vKiBCaXQgbWFza3MgZm9yIENOVF9DT01NQU5EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTENOVCAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTE1JTiAgMHhmMCAgICAgICAvKiBMb2FkIE1pbiBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVzFMTUFYICAweGYwMCAgICAgIC8qIExvYWQgTWF4IFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgVzFaTU9OQ0UgIDB4MTAwMCAgICAgLyogRW5hYmxlIENaTSBDbGVhciBDb3VudGVyIE9uY2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5XMVpNT05DRSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgQ05UX0RFQk9VTkNFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERQUkVTQ0FMRSAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KLQotLyogQ05UX0NPTU1BTkQgYml0IGZpZWxkIG9wdGlvbnMgKi8KLQotI2RlZmluZSBXMUxDTlRfWkVSTyAgIDB4MDAwMSAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiB3aXRoIHplcm8gKi8KLSNkZWZpbmUgVzFMQ05UX01JTiAgICAweDAwMDQgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgZnJvbSBDTlRfTUlOICovCi0jZGVmaW5lIFcxTENOVF9NQVggICAgMHgwMDA4ICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01BWCAqLwotCi0jZGVmaW5lIFcxTE1JTl9aRVJPICAgMHgwMDEwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NSU4gd2l0aCB6ZXJvICovCi0jZGVmaW5lIFcxTE1JTl9DTlQgICAgMHgwMDIwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NSU4gZnJvbSBDTlRfQ09VTlRFUiAqLwotI2RlZmluZSBXMUxNSU5fTUFYICAgIDB4MDA4MCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIGZyb20gQ05UX01BWCAqLwotCi0jZGVmaW5lIFcxTE1BWF9aRVJPICAgMHgwMTAwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggd2l0aCB6ZXJvICovCi0jZGVmaW5lIFcxTE1BWF9DTlQgICAgMHgwMjAwICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9NQVggZnJvbSBDTlRfQ09VTlRFUiAqLwotI2RlZmluZSBXMUxNQVhfTUlOICAgIDB4MDQwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIGZyb20gQ05UX01JTiAqLwotCi0vKiBDTlRfQ09ORklHIGJpdCBmaWVsZCBvcHRpb25zICovCi0KLSNkZWZpbmUgQ05UTU9ERV9RVUFERU5DICAweDAwMDAgIC8qIHF1YWRyYXR1cmUgZW5jb2RlciBtb2RlICovCi0jZGVmaW5lIENOVE1PREVfQklORU5DICAgMHgwMTAwICAvKiBiaW5hcnkgZW5jb2RlciBtb2RlICovCi0jZGVmaW5lIENOVE1PREVfVURDTlQgICAgMHgwMjAwICAvKiB1cC9kb3duIGNvdW50ZXIgbW9kZSAqLwotI2RlZmluZSBDTlRNT0RFX0RJUkNOVCAgIDB4MDQwMCAgLyogZGlyZWN0aW9uIGNvdW50ZXIgbW9kZSAqLwotI2RlZmluZSBDTlRNT0RFX0RJUlRNUiAgIDB4MDUwMCAgLyogZGlyZWN0aW9uIHRpbWVyIG1vZGUgKi8KLQotI2RlZmluZSBCTkRNT0RFX0NPTVAgICAgIDB4MDAwMCAgLyogYm91bmRhcnkgY29tcGFyZSBtb2RlICovCi0jZGVmaW5lIEJORE1PREVfWkVSTyAgICAgMHgxMDAwICAvKiBib3VuZGFyeSBjb21wYXJlIGFuZCB6ZXJvIG1vZGUgKi8KLSNkZWZpbmUgQk5ETU9ERV9DQVBUICAgICAweDIwMDAgIC8qIGJvdW5kYXJ5IGNhcHR1cmUgbW9kZSAqLwotI2RlZmluZSBCTkRNT0RFX0FFWFQgICAgIDB4MzAwMCAgLyogYm91bmRhcnkgYXV0by1leHRlbmQgbW9kZSAqLwotCiAvKiBCaXQgbWFza3MgZm9yIFNFQ1VSRV9TWVNTV1QgKi8KIAogI2RlZmluZSAgICAgICAgICAgICAgICAgICBFTVVEQUJMICAweDEgICAgICAgIC8qIEVtdWxhdGlvbiBEaXNhYmxlLiAqLwpAQCAtMTczOCw4NSArMTYzMCw0IEBACiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIG5BRkVYSVQgIDB4MAogI2RlZmluZSAgICAgICAgICAgICAgICAgICBTRUNTVEFUICAweGUwICAgICAgIC8qIFNlY3VyZSBTdGF0dXMgKi8KIAotLyogQml0IG1hc2tzIGZvciBORkNfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFdSX0RMWSAgMHhmICAgICAgICAvKiBXcml0ZSBTdHJvYmUgRGVsYXkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFJEX0RMWSAgMHhmMCAgICAgICAvKiBSZWFkIFN0cm9iZSBEZWxheSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgTldJRFRIICAweDEwMCAgICAgIC8qIE5BTkQgRGF0YSBXaWR0aCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuTldJRFRIICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUEdfU0laRSAgMHgyMDAgICAgICAvKiBQYWdlIFNpemUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuUEdfU0laRSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX1NUQVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIE5CVVNZICAweDEgICAgICAgIC8qIE5vdCBCdXN5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBuTkJVU1kgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICBXQl9GVUxMICAweDIgICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbldCX0ZVTEwgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICBQR19XUl9TVEFUICAweDQgICAgICAgIC8qIFBhZ2UgV3JpdGUgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5QR19XUl9TVEFUICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgUEdfUkRfU1RBVCAgMHg4ICAgICAgICAvKiBQYWdlIFJlYWQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgIG5QR19SRF9TVEFUICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICBXQl9FTVBUWSAgMHgxMCAgICAgICAvKiBXcml0ZSBCdWZmZXIgRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIG5XQl9FTVBUWSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0lSUVNUQVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5CVVNZSVJRICAweDEgICAgICAgIC8qIE5vdCBCdXN5IElSUSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgbk5CVVNZSVJRICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFdCX09WRiAgMHgyICAgICAgICAvKiBXcml0ZSBCdWZmZXIgT3ZlcmZsb3cgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgbldCX09WRiAgMHgwCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFdCX0VER0UgIDB4NCAgICAgICAgLyogV3JpdGUgQnVmZmVyIEVkZ2UgRGV0ZWN0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbldCX0VER0UgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUkRfUkRZICAweDggICAgICAgIC8qIFJlYWQgRGF0YSBSZWFkeSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBuUkRfUkRZICAweDAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgV1JfRE9ORSAgMHgxMCAgICAgICAvKiBQYWdlIFdyaXRlIERvbmUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBuV1JfRE9ORSAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0lSUU1BU0sgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgTUFTS19CVVNZSVJRICAweDEgICAgICAgIC8qIE1hc2sgTm90IEJ1c3kgSVJRICovCi0jZGVmaW5lICAgICAgICAgICAgIG5NQVNLX0JVU1lJUlEgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICBNQVNLX1dCT1ZGICAweDIgICAgICAgIC8qIE1hc2sgV3JpdGUgQnVmZmVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbk1BU0tfV0JPVkYgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgTUFTS19XQkVNUFRZICAweDQgICAgICAgIC8qIE1hc2sgV3JpdGUgQnVmZmVyIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgIG5NQVNLX1dCRU1QVFkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgICBNQVNLX1JEUkRZICAweDggICAgICAgIC8qIE1hc2sgUmVhZCBEYXRhIFJlYWR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgbk1BU0tfUkRSRFkgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgIE1BU0tfV1JET05FICAweDEwICAgICAgIC8qIE1hc2sgV3JpdGUgRG9uZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgbk1BU0tfV1JET05FICAweDAKLQotLyogQml0IG1hc2tzIGZvciBORkNfUlNUICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgRUNDX1JTVCAgMHgxICAgICAgICAvKiBFQ0MgKGFuZCBORkMgY291bnRlcnMpIFJlc2V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgbkVDQ19SU1QgIDB4MAotCi0vKiBCaXQgbWFza3MgZm9yIE5GQ19QR0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgUEdfUkRfU1RBUlQgIDB4MSAgICAgICAgLyogUGFnZSBSZWFkIFN0YXJ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICBuUEdfUkRfU1RBUlQgIDB4MAotI2RlZmluZSAgICAgICAgICAgICAgIFBHX1dSX1NUQVJUICAweDIgICAgICAgIC8qIFBhZ2UgV3JpdGUgU3RhcnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIG5QR19XUl9TVEFSVCAgMHgwCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0VDQzAgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQ0MwICAweDdmZiAgICAgIC8qIFBhcml0eSBDYWxjdWxhdGlvbiBSZXN1bHQwICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0VDQzEgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQ0MxICAweDdmZiAgICAgIC8qIFBhcml0eSBDYWxjdWxhdGlvbiBSZXN1bHQxICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0VDQzIgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQ0MyICAweDdmZiAgICAgIC8qIFBhcml0eSBDYWxjdWxhdGlvbiBSZXN1bHQyICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0VDQzMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBFQ0MzICAweDdmZiAgICAgIC8qIFBhcml0eSBDYWxjdWxhdGlvbiBSZXN1bHQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0NPVU5UICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIEVDQ0NOVCAgMHgzZmYgICAgICAvKiBUcmFuc2ZlciBDb3VudCAqLwotCi0KICNlbmRpZiAvKiBfREVGX0JGNTJYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMTA0YmZmOC4uZjgwYzI5OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTksNTQgKzksNTQgQEAKIAogI2RlZmluZSBNQVhfQkxBQ0tGSU5fR1BJT1MgNDgKIAotI2RlZmluZQlHUElPX1BGMAkwCi0jZGVmaW5lCUdQSU9fUEYxCTEKLSNkZWZpbmUJR1BJT19QRjIJMgotI2RlZmluZQlHUElPX1BGMwkzCi0jZGVmaW5lCUdQSU9fUEY0CTQKLSNkZWZpbmUJR1BJT19QRjUJNQotI2RlZmluZQlHUElPX1BGNgk2Ci0jZGVmaW5lCUdQSU9fUEY3CTcKLSNkZWZpbmUJR1BJT19QRjgJOAotI2RlZmluZQlHUElPX1BGOQk5Ci0jZGVmaW5lCUdQSU9fUEYxMAkxMAotI2RlZmluZQlHUElPX1BGMTEJMTEKLSNkZWZpbmUJR1BJT19QRjEyCTEyCi0jZGVmaW5lCUdQSU9fUEYxMwkxMwotI2RlZmluZQlHUElPX1BGMTQJMTQKLSNkZWZpbmUJR1BJT19QRjE1CTE1Ci0jZGVmaW5lCUdQSU9fUEcwCTE2Ci0jZGVmaW5lCUdQSU9fUEcxCTE3Ci0jZGVmaW5lCUdQSU9fUEcyCTE4Ci0jZGVmaW5lCUdQSU9fUEczCTE5Ci0jZGVmaW5lCUdQSU9fUEc0CTIwCi0jZGVmaW5lCUdQSU9fUEc1CTIxCi0jZGVmaW5lCUdQSU9fUEc2CTIyCi0jZGVmaW5lCUdQSU9fUEc3CTIzCi0jZGVmaW5lCUdQSU9fUEc4CTI0Ci0jZGVmaW5lCUdQSU9fUEc5CTI1Ci0jZGVmaW5lCUdQSU9fUEcxMCAgICAgIAkyNgotI2RlZmluZQlHUElPX1BHMTEgICAgICAJMjcKLSNkZWZpbmUJR1BJT19QRzEyICAgICAgCTI4Ci0jZGVmaW5lCUdQSU9fUEcxMyAgICAgIAkyOQotI2RlZmluZQlHUElPX1BHMTQgICAgICAJMzAKLSNkZWZpbmUJR1BJT19QRzE1ICAgICAgCTMxCi0jZGVmaW5lCUdQSU9fUEgwCTMyCi0jZGVmaW5lCUdQSU9fUEgxCTMzCi0jZGVmaW5lCUdQSU9fUEgyCTM0Ci0jZGVmaW5lCUdQSU9fUEgzCTM1Ci0jZGVmaW5lCUdQSU9fUEg0CTM2Ci0jZGVmaW5lCUdQSU9fUEg1CTM3Ci0jZGVmaW5lCUdQSU9fUEg2CTM4Ci0jZGVmaW5lCUdQSU9fUEg3CTM5Ci0jZGVmaW5lCUdQSU9fUEg4CTQwCi0jZGVmaW5lCUdQSU9fUEg5CTQxCi0jZGVmaW5lCUdQSU9fUEgxMCAgICAgIAk0MgotI2RlZmluZQlHUElPX1BIMTEgICAgICAJNDMKLSNkZWZpbmUJR1BJT19QSDEyICAgICAgCTQ0Ci0jZGVmaW5lCUdQSU9fUEgxMyAgICAgIAk0NQotI2RlZmluZQlHUElPX1BIMTQgICAgICAJNDYKLSNkZWZpbmUJR1BJT19QSDE1ICAgICAgCTQ3CisjZGVmaW5lIEdQSU9fUEYwCTAKKyNkZWZpbmUgR1BJT19QRjEJMQorI2RlZmluZSBHUElPX1BGMgkyCisjZGVmaW5lIEdQSU9fUEYzCTMKKyNkZWZpbmUgR1BJT19QRjQJNAorI2RlZmluZSBHUElPX1BGNQk1CisjZGVmaW5lIEdQSU9fUEY2CTYKKyNkZWZpbmUgR1BJT19QRjcJNworI2RlZmluZSBHUElPX1BGOAk4CisjZGVmaW5lIEdQSU9fUEY5CTkKKyNkZWZpbmUgR1BJT19QRjEwCTEwCisjZGVmaW5lIEdQSU9fUEYxMQkxMQorI2RlZmluZSBHUElPX1BGMTIJMTIKKyNkZWZpbmUgR1BJT19QRjEzCTEzCisjZGVmaW5lIEdQSU9fUEYxNAkxNAorI2RlZmluZSBHUElPX1BGMTUJMTUKKyNkZWZpbmUgR1BJT19QRzAJMTYKKyNkZWZpbmUgR1BJT19QRzEJMTcKKyNkZWZpbmUgR1BJT19QRzIJMTgKKyNkZWZpbmUgR1BJT19QRzMJMTkKKyNkZWZpbmUgR1BJT19QRzQJMjAKKyNkZWZpbmUgR1BJT19QRzUJMjEKKyNkZWZpbmUgR1BJT19QRzYJMjIKKyNkZWZpbmUgR1BJT19QRzcJMjMKKyNkZWZpbmUgR1BJT19QRzgJMjQKKyNkZWZpbmUgR1BJT19QRzkJMjUKKyNkZWZpbmUgR1BJT19QRzEwCTI2CisjZGVmaW5lIEdQSU9fUEcxMQkyNworI2RlZmluZSBHUElPX1BHMTIJMjgKKyNkZWZpbmUgR1BJT19QRzEzCTI5CisjZGVmaW5lIEdQSU9fUEcxNAkzMAorI2RlZmluZSBHUElPX1BHMTUJMzEKKyNkZWZpbmUgR1BJT19QSDAJMzIKKyNkZWZpbmUgR1BJT19QSDEJMzMKKyNkZWZpbmUgR1BJT19QSDIJMzQKKyNkZWZpbmUgR1BJT19QSDMJMzUKKyNkZWZpbmUgR1BJT19QSDQJMzYKKyNkZWZpbmUgR1BJT19QSDUJMzcKKyNkZWZpbmUgR1BJT19QSDYJMzgKKyNkZWZpbmUgR1BJT19QSDcJMzkKKyNkZWZpbmUgR1BJT19QSDgJNDAKKyNkZWZpbmUgR1BJT19QSDkJNDEKKyNkZWZpbmUgR1BJT19QSDEwCTQyCisjZGVmaW5lIEdQSU9fUEgxMQk0MworI2RlZmluZSBHUElPX1BIMTIJNDQKKyNkZWZpbmUgR1BJT19QSDEzCTQ1CisjZGVmaW5lIEdQSU9fUEgxNAk0NgorI2RlZmluZSBHUElPX1BIMTUJNDcKIAogI2RlZmluZSBQT1JUX0YgR1BJT19QRjAKICNkZWZpbmUgUE9SVF9HIEdQSU9fUEcwCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGQ0NTE4YjYuLjA4YmFlNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTIAlNQVhfQkxBQ0tGSU5fR1BJT1MKKyNkZWZpbmUgTUFYX1JFU09VUkNFUwlNQVhfQkxBQ0tGSU5fR1BJT1MKIAogI2RlZmluZSBQX1BQSTBfRDAJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjApIHwgUF9GVU5DVCgwKSkKICNkZWZpbmUgUF9QUEkwX0QxCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEYxKSB8IFBfRlVOQ1QoMCkpCkBAIC03OSw2ICs3OSw3IEBACiAKICNkZWZpbmUgUF9IV0FJVAkJKFBfRE9OVENBUkUpCiAKKyNkZWZpbmUgR1BJT19ERUZBVUxUX0JPT1RfU1BJX0NTIEdQSU9fUEcxCiAjZGVmaW5lIFBfREVGQVVMVF9CT09UX1NQSV9DUyBQX1NQSTBfU1NFTDEKIAogI2RlZmluZSBQX1NQSTBfU1MJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRzEpIHwgUF9GVU5DVCgwKSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggOWIzZjdhMi4uNzhmODcyMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTUsNyArNSw3IEBACiAgKiBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggdGhhdCB2ZXJzaW9uIGF0IGFueSB0aW1lCiAgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKICAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KICAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwpAQCAtMjA4LDggKzIwOCwxNCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDYxICgxKQogLyogSW50ZXJydXB0ZWQgMzItQml0IFNQT1JUIERhdGEgUmVnaXN0ZXIgQWNjZXNzIFJlc3VsdHMgSW4gVW5kZXJmbG93ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzMgKDEpCisvKiBQb3NzaWJsZSBMb2NrdXAgQ29uZGl0aW9uIHdoZW0gTW9kaWZ5aW5nIFBMTCBmcm9tIEV4dGVybmFsIE1lbW9yeSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgxKQogLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKKy8qIFJlYWRzIG9mIElURVNUX0NPTU1BTkQgYW5kIElURVNUX0RBVEEgUmVnaXN0ZXJzIENhdXNlIENhY2hlIENvcnJ1cHRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ4MSAoMSkKKy8qIElGTFVTSCBzdWNrcyBhdCBsaWZlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0OTEgKDEpCiAKIC8qIFRoZXNlIGFub21hbGllcyBoYXZlIGJlZW4gInBoYXNlZCIgb3V0IG9mIGFuYWxvZy5jb20gYW5vbWFseSBzaGVldHMgYW5kIGFyZQogICogaGVyZSB0byBzaG93IHJ1bm5pbmcgb24gb2xkZXIgc2lsaWNvbiBqdXN0IGlzbid0IGZlYXNpYmxlLgpAQCAtMzU4LDYgKzM2NCw2IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjUgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjcgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzQgKDApCi0jZGVmaW5lIEFOT01BTFlfMDUwMDA0NzUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODUgKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAyYWYxOWQ2Li5lMDI0MTZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtOSwyMiArOSwyMiBAQAogCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyAxNgogCi0jZGVmaW5lCUdQSU9fUEYwCTAKLSNkZWZpbmUJR1BJT19QRjEJMQotI2RlZmluZQlHUElPX1BGMgkyCi0jZGVmaW5lCUdQSU9fUEYzCTMKLSNkZWZpbmUJR1BJT19QRjQJNAotI2RlZmluZQlHUElPX1BGNQk1Ci0jZGVmaW5lCUdQSU9fUEY2CTYKLSNkZWZpbmUJR1BJT19QRjcJNwotI2RlZmluZQlHUElPX1BGOAk4Ci0jZGVmaW5lCUdQSU9fUEY5CTkKLSNkZWZpbmUJR1BJT19QRjEwCTEwCi0jZGVmaW5lCUdQSU9fUEYxMQkxMQotI2RlZmluZQlHUElPX1BGMTIJMTIKLSNkZWZpbmUJR1BJT19QRjEzCTEzCi0jZGVmaW5lCUdQSU9fUEYxNAkxNAotI2RlZmluZQlHUElPX1BGMTUJMTUKKyNkZWZpbmUgR1BJT19QRjAJMAorI2RlZmluZSBHUElPX1BGMQkxCisjZGVmaW5lIEdQSU9fUEYyCTIKKyNkZWZpbmUgR1BJT19QRjMJMworI2RlZmluZSBHUElPX1BGNAk0CisjZGVmaW5lIEdQSU9fUEY1CTUKKyNkZWZpbmUgR1BJT19QRjYJNgorI2RlZmluZSBHUElPX1BGNwk3CisjZGVmaW5lIEdQSU9fUEY4CTgKKyNkZWZpbmUgR1BJT19QRjkJOQorI2RlZmluZSBHUElPX1BGMTAJMTAKKyNkZWZpbmUgR1BJT19QRjExCTExCisjZGVmaW5lIEdQSU9fUEYxMgkxMgorI2RlZmluZSBHUElPX1BGMTMJMTMKKyNkZWZpbmUgR1BJT19QRjE0CTE0CisjZGVmaW5lIEdQSU9fUEYxNQkxNQogCiAjZGVmaW5lIFBPUlRfRiBHUElPX1BGMAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDA3NWRhZTEuLjk2ZjVkOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTIAlNQVhfQkxBQ0tGSU5fR1BJT1MKKyNkZWZpbmUgTUFYX1JFU09VUkNFUwlNQVhfQkxBQ0tGSU5fR1BJT1MKIAogI2RlZmluZSBQX1BQSTBfQ0xLCShQX0RPTlRDQVJFKQogI2RlZmluZSBQX1BQSTBfRlMxCShQX0RPTlRDQVJFKQpAQCAtNjAsNiArNjAsNyBAQAogI2RlZmluZSBQX1NQSTBfU1NFTDIJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjIpKQogI2RlZmluZSBQX1NQSTBfU1NFTDEJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjEpKQogI2RlZmluZSBQX1NQSTBfU1MJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjApKQorI2RlZmluZSBHUElPX0RFRkFVTFRfQk9PVF9TUElfQ1MgR1BJT19QRjIKICNkZWZpbmUgUF9ERUZBVUxUX0JPT1RfU1BJX0NTIFBfU1BJMF9TU0VMMgogCiAjZGVmaW5lIFBfVE1SMgkJKFBfRE9OVENBUkUpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2Fub21hbHkuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCmluZGV4IGQyYzQyN2IuLjQzZGY2YWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYW5vbWFseS5oCkBAIC01LDcgKzUsNyBAQAogICogYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIHRoYXQgdmVyc2lvbiBhdCBhbnkgdGltZQogICogRE8gTk9UIEVESVQgVEhJUyBGSUxFCiAgKgotICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2UuCiAgKiAgIGh0dHBzOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1hZGlfYnNkCiAgKi8KQEAgLTE2Miw4ICsxNjIsMTQgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MSAoMSkKIC8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogUG9zc2libGUgTG9ja3VwIENvbmRpdGlvbiB3aGVtIE1vZGlmeWluZyBQTEwgZnJvbSBFeHRlcm5hbCBNZW1vcnkgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMSkKIC8qIFRFU1RTRVQgSW5zdHJ1Y3Rpb24gQ2Fubm90IEJlIEludGVycnVwdGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzcgKDEpCisvKiBSZWFkcyBvZiBJVEVTVF9DT01NQU5EIGFuZCBJVEVTVF9EQVRBIFJlZ2lzdGVycyBDYXVzZSBDYWNoZSBDb3JydXB0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODEgKDEpCisvKiBJRkxVU0ggc3Vja3MgYXQgbGlmZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDkxICgxKQogCiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDA5OSAoMCkKQEAgLTE3OSw2ICsxODUsNyBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTk4ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjAyICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjE1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwMjE5ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjIwICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjI3ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwMjMwICgwKQpAQCAtMjExLDYgKzIxOCw2IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjUgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjcgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzQgKDApCi0jZGVmaW5lIEFOT01BTFlfMDUwMDA0NzUgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODUgKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCmluZGV4IGNmMzk2ZWEuLmFhZDYxYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKQEAgLTQzNCwyMiArNDM0LDIyIEBACiAKIC8qIFR3by1XaXJlIEludGVyZmFjZQkJKDB4RkZDMDE0MDAgLSAweEZGQzAxNEZGKQkJCQkJCQkJKi8KICNkZWZpbmUgVFdJMF9SRUdCQVNFCQkJMHhGRkMwMTQwMAotI2RlZmluZSBUV0lfQ0xLRElWCQkJMHhGRkMwMTQwMAkvKiBTZXJpYWwgQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9DT05UUk9MCQkJMHhGRkMwMTQwNAkvKiBUV0kgQ29udHJvbCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVFdJX1NMQVZFX0NUTAkJMHhGRkMwMTQwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9TTEFWRV9TVEFUCQkweEZGQzAxNDBDCS8qIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgVFdJX1NMQVZFX0FERFIJCTB4RkZDMDE0MTAJLyogU2xhdmUgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBUV0lfTUFTVEVSX0NUTAkJMHhGRkMwMTQxNAkvKiBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9NQVNURVJfU1RBVAkJMHhGRkMwMTQxOAkvKiBNYXN0ZXIgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9NQVNURVJfQUREUgkJMHhGRkMwMTQxQwkvKiBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9JTlRfTUFTSwkJMHhGRkMwMTQyNAkvKiBUV0kgTWFzdGVyIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICAgICAgICAgICAqLwotI2RlZmluZSBUV0lfRklGT19DVEwJCTB4RkZDMDE0MjgJLyogRklGTyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9GSUZPX1NUQVQJCTB4RkZDMDE0MkMJLyogRklGTyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRXSV9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTyBUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICAgICAgKi8KLSNkZWZpbmUgVFdJX1hNVF9EQVRBMTYJCTB4RkZDMDE0ODQJLyogRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICAgICAgKi8KLSNkZWZpbmUgVFdJX1JDVl9EQVRBOAkJMHhGRkMwMTQ4OAkvKiBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAgICAgICAqLwotI2RlZmluZSBUV0lfUkNWX0RBVEExNgkJMHhGRkMwMTQ4QwkvKiBGSUZPIFJlY2VpdmUgRGF0YSBEb3VibGUgQnl0ZSBSZWdpc3RlciAgICAgICAqLworI2RlZmluZSBUV0kwX0NMS0RJVgkJCTB4RkZDMDE0MDAJLyogU2VyaWFsIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0kwX0NPTlRST0wJCQkweEZGQzAxNDA0CS8qIFRXSSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0kwX1NMQVZFX0NUTAkJMHhGRkMwMTQwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfU0xBVkVfU1RBVAkJMHhGRkMwMTQwQwkvKiBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfU0xBVkVfQUREUgkJMHhGRkMwMTQxMAkvKiBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfTUFTVEVSX0NUTAkJMHhGRkMwMTQxNAkvKiBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfTUFTVEVSX1NUQVQJCTB4RkZDMDE0MTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUV0kwX01BU1RFUl9BRERSCQkweEZGQzAxNDFDCS8qIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdJMF9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfSU5UX01BU0sJCTB4RkZDMDE0MjQJLyogVFdJIE1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdJMF9GSUZPX0NUTAkJMHhGRkMwMTQyOAkvKiBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVFdJMF9GSUZPX1NUQVQJCTB4RkZDMDE0MkMJLyogRklGTyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRXSTBfWE1UX0RBVEE4CQkweEZGQzAxNDgwCS8qIEZJRk8gVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAgICAgICovCisjZGVmaW5lIFRXSTBfWE1UX0RBVEExNgkJMHhGRkMwMTQ4NAkvKiBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgICAgICAqLworI2RlZmluZSBUV0kwX1JDVl9EQVRBOAkJMHhGRkMwMTQ4OAkvKiBGSUZPIFJlY2VpdmUgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAgICAgICAqLworI2RlZmluZSBUV0kwX1JDVl9EQVRBMTYJCTB4RkZDMDE0OEMJLyogRklGTyBSZWNlaXZlIERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgICAgICAgKi8KIAogLyogR2VuZXJhbCBQdXJwb3NlIEkvTyBQb3J0IEcgKDB4RkZDMDE1MDAgLSAweEZGQzAxNUZGKQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lIFBPUlRHSU8JCQkJCTB4RkZDMDE1MDAJLyogUG9ydCBHIEkvTyBQaW4gU3RhdGUgU3BlY2lmeSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2NDIsNyArMTY0Miw3IEBACiAjZGVmaW5lCVRXSV9FTkEJCTB4MDA4MAkvKiBUV0kgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCVNDQ0IJCTB4MDIwMAkvKiBTQ0NCIENvbXBhdGliaWxpdHkgRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotLyogVFdJX1NMQVZFX0NUUkwgTWFza3MJCQkJCQkJCQkJCQkJCQkqLworLyogVFdJX1NMQVZFX0NUTCBNYXNrcwkJCQkJCQkJCQkJCQkJCSovCiAjZGVmaW5lCVNFTgkJCTB4MDAwMQkvKiBTbGF2ZSBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCVNBRERfTEVOCTB4MDAwMgkvKiBTbGF2ZSBBZGRyZXNzIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlTVERWQUwJCTB4MDAwNAkvKiBTbGF2ZSBUcmFuc21pdCBEYXRhIFZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2NTMsNyArMTY1Myw3IEBACiAjZGVmaW5lCVNESVIJCTB4MDAwMQkvKiBTbGF2ZSBUcmFuc2ZlciBEaXJlY3Rpb24gKFRyYW5zbWl0L1JlY2VpdmUqKSAqLwogI2RlZmluZSBHQ0FMTAkJMHgwMDAyCS8qIEdlbmVyYWwgQ2FsbCBJbmRpY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLS8qIFRXSV9NQVNURVJfQ1RSTCBNYXNrcwkJCQkJCQkJCQkJCQkqLworLyogVFdJX01BU1RFUl9DVEwgTWFza3MJCQkJCQkJCQkJCQkJKi8KICNkZWZpbmUJTUVOCQkJMHgwMDAxCS8qIE1hc3RlciBNb2RlIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZQlNQUREX0xFTgkweDAwMDIJLyogTWFzdGVyIEFkZHJlc3MgTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCU1ESVIJCTB4MDAwNAkvKiBNYXN0ZXIgVHJhbnNtaXQgRGlyZWN0aW9uIChSWC9UWCopICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAxMDRiZmY4Li5mODBjMjk5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtOSw1NCArOSw1NCBAQAogCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyA0OAogCi0jZGVmaW5lCUdQSU9fUEYwCTAKLSNkZWZpbmUJR1BJT19QRjEJMQotI2RlZmluZQlHUElPX1BGMgkyCi0jZGVmaW5lCUdQSU9fUEYzCTMKLSNkZWZpbmUJR1BJT19QRjQJNAotI2RlZmluZQlHUElPX1BGNQk1Ci0jZGVmaW5lCUdQSU9fUEY2CTYKLSNkZWZpbmUJR1BJT19QRjcJNwotI2RlZmluZQlHUElPX1BGOAk4Ci0jZGVmaW5lCUdQSU9fUEY5CTkKLSNkZWZpbmUJR1BJT19QRjEwCTEwCi0jZGVmaW5lCUdQSU9fUEYxMQkxMQotI2RlZmluZQlHUElPX1BGMTIJMTIKLSNkZWZpbmUJR1BJT19QRjEzCTEzCi0jZGVmaW5lCUdQSU9fUEYxNAkxNAotI2RlZmluZQlHUElPX1BGMTUJMTUKLSNkZWZpbmUJR1BJT19QRzAJMTYKLSNkZWZpbmUJR1BJT19QRzEJMTcKLSNkZWZpbmUJR1BJT19QRzIJMTgKLSNkZWZpbmUJR1BJT19QRzMJMTkKLSNkZWZpbmUJR1BJT19QRzQJMjAKLSNkZWZpbmUJR1BJT19QRzUJMjEKLSNkZWZpbmUJR1BJT19QRzYJMjIKLSNkZWZpbmUJR1BJT19QRzcJMjMKLSNkZWZpbmUJR1BJT19QRzgJMjQKLSNkZWZpbmUJR1BJT19QRzkJMjUKLSNkZWZpbmUJR1BJT19QRzEwICAgICAgCTI2Ci0jZGVmaW5lCUdQSU9fUEcxMSAgICAgIAkyNwotI2RlZmluZQlHUElPX1BHMTIgICAgICAJMjgKLSNkZWZpbmUJR1BJT19QRzEzICAgICAgCTI5Ci0jZGVmaW5lCUdQSU9fUEcxNCAgICAgIAkzMAotI2RlZmluZQlHUElPX1BHMTUgICAgICAJMzEKLSNkZWZpbmUJR1BJT19QSDAJMzIKLSNkZWZpbmUJR1BJT19QSDEJMzMKLSNkZWZpbmUJR1BJT19QSDIJMzQKLSNkZWZpbmUJR1BJT19QSDMJMzUKLSNkZWZpbmUJR1BJT19QSDQJMzYKLSNkZWZpbmUJR1BJT19QSDUJMzcKLSNkZWZpbmUJR1BJT19QSDYJMzgKLSNkZWZpbmUJR1BJT19QSDcJMzkKLSNkZWZpbmUJR1BJT19QSDgJNDAKLSNkZWZpbmUJR1BJT19QSDkJNDEKLSNkZWZpbmUJR1BJT19QSDEwICAgICAgCTQyCi0jZGVmaW5lCUdQSU9fUEgxMSAgICAgIAk0MwotI2RlZmluZQlHUElPX1BIMTIgICAgICAJNDQKLSNkZWZpbmUJR1BJT19QSDEzICAgICAgCTQ1Ci0jZGVmaW5lCUdQSU9fUEgxNCAgICAgIAk0NgotI2RlZmluZQlHUElPX1BIMTUgICAgICAJNDcKKyNkZWZpbmUgR1BJT19QRjAJMAorI2RlZmluZSBHUElPX1BGMQkxCisjZGVmaW5lIEdQSU9fUEYyCTIKKyNkZWZpbmUgR1BJT19QRjMJMworI2RlZmluZSBHUElPX1BGNAk0CisjZGVmaW5lIEdQSU9fUEY1CTUKKyNkZWZpbmUgR1BJT19QRjYJNgorI2RlZmluZSBHUElPX1BGNwk3CisjZGVmaW5lIEdQSU9fUEY4CTgKKyNkZWZpbmUgR1BJT19QRjkJOQorI2RlZmluZSBHUElPX1BGMTAJMTAKKyNkZWZpbmUgR1BJT19QRjExCTExCisjZGVmaW5lIEdQSU9fUEYxMgkxMgorI2RlZmluZSBHUElPX1BGMTMJMTMKKyNkZWZpbmUgR1BJT19QRjE0CTE0CisjZGVmaW5lIEdQSU9fUEYxNQkxNQorI2RlZmluZSBHUElPX1BHMAkxNgorI2RlZmluZSBHUElPX1BHMQkxNworI2RlZmluZSBHUElPX1BHMgkxOAorI2RlZmluZSBHUElPX1BHMwkxOQorI2RlZmluZSBHUElPX1BHNAkyMAorI2RlZmluZSBHUElPX1BHNQkyMQorI2RlZmluZSBHUElPX1BHNgkyMgorI2RlZmluZSBHUElPX1BHNwkyMworI2RlZmluZSBHUElPX1BHOAkyNAorI2RlZmluZSBHUElPX1BHOQkyNQorI2RlZmluZSBHUElPX1BHMTAJMjYKKyNkZWZpbmUgR1BJT19QRzExCTI3CisjZGVmaW5lIEdQSU9fUEcxMgkyOAorI2RlZmluZSBHUElPX1BHMTMJMjkKKyNkZWZpbmUgR1BJT19QRzE0CTMwCisjZGVmaW5lIEdQSU9fUEcxNQkzMQorI2RlZmluZSBHUElPX1BIMAkzMgorI2RlZmluZSBHUElPX1BIMQkzMworI2RlZmluZSBHUElPX1BIMgkzNAorI2RlZmluZSBHUElPX1BIMwkzNQorI2RlZmluZSBHUElPX1BINAkzNgorI2RlZmluZSBHUElPX1BINQkzNworI2RlZmluZSBHUElPX1BINgkzOAorI2RlZmluZSBHUElPX1BINwkzOQorI2RlZmluZSBHUElPX1BIOAk0MAorI2RlZmluZSBHUElPX1BIOQk0MQorI2RlZmluZSBHUElPX1BIMTAJNDIKKyNkZWZpbmUgR1BJT19QSDExCTQzCisjZGVmaW5lIEdQSU9fUEgxMgk0NAorI2RlZmluZSBHUElPX1BIMTMJNDUKKyNkZWZpbmUgR1BJT19QSDE0CTQ2CisjZGVmaW5lIEdQSU9fUEgxNQk0NwogCiAjZGVmaW5lIFBPUlRfRiBHUElPX1BGMAogI2RlZmluZSBQT1JUX0cgR1BJT19QRzAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggZGE5NzYwMy4uNzFkOWVhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTcsNyArNyw3IEBACiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCi0jZGVmaW5lIE1BWF9SRVNPVVJDRVMgCShNQVhfQkxBQ0tGSU5fR1BJT1MgKyBHUElPX0JBTktTSVpFKQkvKiBXZSBhZGRpdGlvbmFsbHkgaGFuZGxlIFBPUlRKICovCisjZGVmaW5lIE1BWF9SRVNPVVJDRVMJKE1BWF9CTEFDS0ZJTl9HUElPUyArIEdQSU9fQkFOS1NJWkUpCS8qIFdlIGFkZGl0aW9uYWxseSBoYW5kbGUgUE9SVEogKi8KIAogI2RlZmluZSBQX1VBUlQwX1RYCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEYwKSB8IFBfRlVOQ1QoMCkpCiAjZGVmaW5lIFBfVUFSVDBfUlgJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjEpIHwgUF9GVU5DVCgwKSkKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgUF9QUEkwX0ZTMQkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BGOSkgfCBQX0ZVTkNUKDEpKQogI2RlZmluZSBQX1RBQ0xLMAkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BGMTQpIHwgUF9GVU5DVCgxKSkKICNkZWZpbmUgUF9UTVJDTEsJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjE1KSB8IFBfRlVOQ1QoMSkpCisjZGVmaW5lIEdQSU9fREVGQVVMVF9CT09UX1NQSV9DUyBHUElPX1BGMTAKICNkZWZpbmUgUF9ERUZBVUxUX0JPT1RfU1BJX0NTIFBfU1BJMF9TU0VMMQogCiAjZGVmaW5lIFBfUFBJMF9EMAkoUF9ERUZJTkVEIHwgUF9JREVOVChHUElPX1BHMCkgfCBQX0ZVTkNUKDApKQpAQCAtMTM1LDcgKzEzNiw2IEBACiAJUF9NREMsIFwKIAlQX01ESU8sIDB9CiAKLQogI2RlZmluZSBQX1JNSUkwIHtcCiAJUF9NSUkwX0VUeEQwLCBcCiAJUF9NSUkwX0VUeEQxLCBcCkBAIC0xNDgsNCArMTQ4LDUgQEAKIAlQX1JNSUkwX0NSU19EViwgXAogCVBfTURDLCBcCiAJUF9NRElPLCAwfQotI2VuZGlmCQkJICAgICAgICAJLyogX01BQ0hfUE9SVE1VWF9IXyAqLworCisjZW5kaWYgLyogX01BQ0hfUE9SVE1VWF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCBkODgyYjdlLi44Nzc0YjQ4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtNSwxNCArNSwxNCBAQAogICogYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIHRoYXQgdmVyc2lvbiBhdCBhbnkgdGltZQogICogRE8gTk9UIEVESVQgVEhJUyBGSUxFCiAgKgotICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2UuCiAgKiAgIGh0dHBzOi8vZG9jcy5ibGFja2Zpbi51Y2xpbnV4Lm9yZy9kb2t1LnBocD9pZD1hZGlfYnNkCiAgKi8KIAogLyogVGhpcyBmaWxlIHNob3VsZCBiZSB1cCB0byBkYXRlIHdpdGg6Ci0gKiAgLSBSZXZpc2lvbiBHLCAwOS8xOC8yMDA4OyBBRFNQLUJGNTM4L0JGNTM4RiBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0Ci0gKiAgLSBSZXZpc2lvbiBMLCAwOS8xOC8yMDA4OyBBRFNQLUJGNTM5L0JGNTM5RiBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CisgKiAgLSBSZXZpc2lvbiBILCAwNy8xMC8yMDA5OyBBRFNQLUJGNTM4L0JGNTM4RiBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CisgKiAgLSBSZXZpc2lvbiBNLCAwNy8xMC8yMDA5OyBBRFNQLUJGNTM5L0JGNTM5RiBCbGFja2ZpbiBQcm9jZXNzb3IgQW5vbWFseSBMaXN0CiAgKi8KIAogI2lmbmRlZiBfTUFDSF9BTk9NQUxZX0hfCkBAIC0xMzIsMTAgKzEzMiwxOCBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDQzICgxKQogLyogRmFsc2UgSGFyZHdhcmUgRXJyb3Igd2hlbiBSRVRJIFBvaW50cyB0byBJbnZhbGlkIE1lbW9yeSAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDYxICgxKQorLyogU3luY2hyb25pemF0aW9uIFByb2JsZW0gYXQgU3RhcnR1cCBNYXkgQ2F1c2UgU1BPUlQgVHJhbnNtaXQgQ2hhbm5lbHMgdG8gTWlzYWxpZ24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MiAoMSkKIC8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQorLyogUG9zc2libGUgTG9ja3VwIENvbmRpdGlvbiB3aGVtIE1vZGlmeWluZyBQTEwgZnJvbSBFeHRlcm5hbCBNZW1vcnkgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMSkKIC8qIFRFU1RTRVQgSW5zdHJ1Y3Rpb24gQ2Fubm90IEJlIEludGVycnVwdGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzcgKDEpCisvKiBSZWFkcyBvZiBJVEVTVF9DT01NQU5EIGFuZCBJVEVTVF9EQVRBIFJlZ2lzdGVycyBDYXVzZSBDYWNoZSBDb3JydXB0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODEgKDEpCisvKiBJRkxVU0ggc3Vja3MgYXQgbGlmZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDkxICgxKQogCiAvKiBBbm9tYWxpZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGlzIHByb2MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDA5OSAoMCkKQEAgLTE4NSw2ICsxOTMsNiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY1ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDY3ICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc0ICgwKQotI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDg1ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCmluZGV4IDQwMWViZDcuLjY2YWE3MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaApAQCAtMTI5Myw3MCArMTI5Myw2IEBACiAjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0NPVU5UKHZhbCkgICAgICBiZmluX3dyaXRlMTYoUFBJX0NPVU5ULCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9QUElfRlJBTUUoKSAgICAgICAgICBiZmluX3JlYWQxNihQUElfRlJBTUUpCiAjZGVmaW5lIGJmaW5fd3JpdGVfUFBJX0ZSQU1FKHZhbCkgICAgICBiZmluX3dyaXRlMTYoUFBJX0ZSQU1FLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kwX0NMS0RJVigpICAgICAgICBiZmluX3JlYWQxNihUV0kwX0NMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX0NMS0RJVih2YWwpICAgIGJmaW5fd3JpdGUxNihUV0kwX0NMS0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9DT05UUk9MKCkgICAgICAgYmZpbl9yZWFkMTYoVFdJMF9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfQ09OVFJPTCh2YWwpICAgYmZpbl93cml0ZTE2KFRXSTBfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9TTEFWRV9DVFJMKCkgICAgYmZpbl9yZWFkMTYoVFdJMF9TTEFWRV9DVFJMKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfU0xBVkVfQ1RSTCh2YWwpIGJmaW5fd3JpdGUxNihUV0kwX1NMQVZFX0NUUkwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfU0xBVkVfU1RBVCgpICAgIGJmaW5fcmVhZDE2KFRXSTBfU0xBVkVfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX1NMQVZFX1NUQVQodmFsKSBiZmluX3dyaXRlMTYoVFdJMF9TTEFWRV9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kwX1NMQVZFX0FERFIoKSAgICBiZmluX3JlYWQxNihUV0kwX1NMQVZFX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9TTEFWRV9BRERSKHZhbCkgYmZpbl93cml0ZTE2KFRXSTBfU0xBVkVfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9NQVNURVJfQ1RMKCkgICAgYmZpbl9yZWFkMTYoVFdJMF9NQVNURVJfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfTUFTVEVSX0NUTCh2YWwpIGJmaW5fd3JpdGUxNihUV0kwX01BU1RFUl9DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfTUFTVEVSX1NUQVQoKSAgIGJmaW5fcmVhZDE2KFRXSTBfTUFTVEVSX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9NQVNURVJfU1RBVCh2YWwpIGJmaW5fd3JpdGUxNihUV0kwX01BU1RFUl9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kwX01BU1RFUl9BRERSKCkgICBiZmluX3JlYWQxNihUV0kwX01BU1RFUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfTUFTVEVSX0FERFIodmFsKSBiZmluX3dyaXRlMTYoVFdJMF9NQVNURVJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9JTlRfU1RBVCgpICAgICAgYmZpbl9yZWFkMTYoVFdJMF9JTlRfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX0lOVF9TVEFUKHZhbCkgIGJmaW5fd3JpdGUxNihUV0kwX0lOVF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kwX0lOVF9NQVNLKCkgICAgICBiZmluX3JlYWQxNihUV0kwX0lOVF9NQVNLKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfSU5UX01BU0sodmFsKSAgYmZpbl93cml0ZTE2KFRXSTBfSU5UX01BU0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfRklGT19DVEwoKSAgICAgIGJmaW5fcmVhZDE2KFRXSTBfRklGT19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9GSUZPX0NUTCh2YWwpICBiZmluX3dyaXRlMTYoVFdJMF9GSUZPX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9GSUZPX1NUQVQoKSAgICAgYmZpbl9yZWFkMTYoVFdJMF9GSUZPX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9GSUZPX1NUQVQodmFsKSBiZmluX3dyaXRlMTYoVFdJMF9GSUZPX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfWE1UX0RBVEE4KCkgICAgIGJmaW5fcmVhZDE2KFRXSTBfWE1UX0RBVEE4KQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTBfWE1UX0RBVEE4KHZhbCkgYmZpbl93cml0ZTE2KFRXSTBfWE1UX0RBVEE4LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kwX1hNVF9EQVRBMTYoKSAgICBiZmluX3JlYWQxNihUV0kwX1hNVF9EQVRBMTYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9YTVRfREFUQTE2KHZhbCkgYmZpbl93cml0ZTE2KFRXSTBfWE1UX0RBVEExNiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMF9SQ1ZfREFUQTgoKSAgICAgYmZpbl9yZWFkMTYoVFdJMF9SQ1ZfREFUQTgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMF9SQ1ZfREFUQTgodmFsKSBiZmluX3dyaXRlMTYoVFdJMF9SQ1ZfREFUQTgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTBfUkNWX0RBVEExNigpICAgIGJmaW5fcmVhZDE2KFRXSTBfUkNWX0RBVEExNikKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kwX1JDVl9EQVRBMTYodmFsKSBiZmluX3dyaXRlMTYoVFdJMF9SQ1ZfREFUQTE2LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0NMS0RJVigpICAgICAgICBiZmluX3JlYWQxNihUV0kxX0NMS0RJVikKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0NMS0RJVih2YWwpICAgIGJmaW5fd3JpdGUxNihUV0kxX0NMS0RJViwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9DT05UUk9MKCkgICAgICAgYmZpbl9yZWFkMTYoVFdJMV9DT05UUk9MKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfQ09OVFJPTCh2YWwpICAgYmZpbl93cml0ZTE2KFRXSTFfQ09OVFJPTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9TTEFWRV9DVFJMKCkgICAgYmZpbl9yZWFkMTYoVFdJMV9TTEFWRV9DVFJMKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfU0xBVkVfQ1RSTCh2YWwpIGJmaW5fd3JpdGUxNihUV0kxX1NMQVZFX0NUUkwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfU0xBVkVfU1RBVCgpICAgIGJmaW5fcmVhZDE2KFRXSTFfU0xBVkVfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1NMQVZFX1NUQVQodmFsKSBiZmluX3dyaXRlMTYoVFdJMV9TTEFWRV9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1NMQVZFX0FERFIoKSAgICBiZmluX3JlYWQxNihUV0kxX1NMQVZFX0FERFIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9TTEFWRV9BRERSKHZhbCkgYmZpbl93cml0ZTE2KFRXSTFfU0xBVkVfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9NQVNURVJfQ1RMKCkgICAgYmZpbl9yZWFkMTYoVFdJMV9NQVNURVJfQ1RMKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfTUFTVEVSX0NUTCh2YWwpIGJmaW5fd3JpdGUxNihUV0kxX01BU1RFUl9DVEwsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfTUFTVEVSX1NUQVQoKSAgIGJmaW5fcmVhZDE2KFRXSTFfTUFTVEVSX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9NQVNURVJfU1RBVCh2YWwpIGJmaW5fd3JpdGUxNihUV0kxX01BU1RFUl9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kxX01BU1RFUl9BRERSKCkgICBiZmluX3JlYWQxNihUV0kxX01BU1RFUl9BRERSKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfTUFTVEVSX0FERFIodmFsKSBiZmluX3dyaXRlMTYoVFdJMV9NQVNURVJfQUREUiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9JTlRfU1RBVCgpICAgICAgYmZpbl9yZWFkMTYoVFdJMV9JTlRfU1RBVCkKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX0lOVF9TVEFUKHZhbCkgIGJmaW5fd3JpdGUxNihUV0kxX0lOVF9TVEFULCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kxX0lOVF9NQVNLKCkgICAgICBiZmluX3JlYWQxNihUV0kxX0lOVF9NQVNLKQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfSU5UX01BU0sodmFsKSAgYmZpbl93cml0ZTE2KFRXSTFfSU5UX01BU0ssIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfRklGT19DVEwoKSAgICAgIGJmaW5fcmVhZDE2KFRXSTFfRklGT19DVEwpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9GSUZPX0NUTCh2YWwpICBiZmluX3dyaXRlMTYoVFdJMV9GSUZPX0NUTCwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9GSUZPX1NUQVQoKSAgICAgYmZpbl9yZWFkMTYoVFdJMV9GSUZPX1NUQVQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9GSUZPX1NUQVQodmFsKSBiZmluX3dyaXRlMTYoVFdJMV9GSUZPX1NUQVQsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfWE1UX0RBVEE4KCkgICAgIGJmaW5fcmVhZDE2KFRXSTFfWE1UX0RBVEE4KQotI2RlZmluZSBiZmluX3dyaXRlX1RXSTFfWE1UX0RBVEE4KHZhbCkgYmZpbl93cml0ZTE2KFRXSTFfWE1UX0RBVEE4LCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9UV0kxX1hNVF9EQVRBMTYoKSAgICBiZmluX3JlYWQxNihUV0kxX1hNVF9EQVRBMTYpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9YTVRfREFUQTE2KHZhbCkgYmZpbl93cml0ZTE2KFRXSTFfWE1UX0RBVEExNiwgdmFsKQotI2RlZmluZSBiZmluX3JlYWRfVFdJMV9SQ1ZfREFUQTgoKSAgICAgYmZpbl9yZWFkMTYoVFdJMV9SQ1ZfREFUQTgpCi0jZGVmaW5lIGJmaW5fd3JpdGVfVFdJMV9SQ1ZfREFUQTgodmFsKSBiZmluX3dyaXRlMTYoVFdJMV9SQ1ZfREFUQTgsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX1RXSTFfUkNWX0RBVEExNigpICAgIGJmaW5fcmVhZDE2KFRXSTFfUkNWX0RBVEExNikKLSNkZWZpbmUgYmZpbl93cml0ZV9UV0kxX1JDVl9EQVRBMTYodmFsKSBiZmluX3dyaXRlMTYoVFdJMV9SQ1ZfREFUQTE2LCB2YWwpCiAjZGVmaW5lIGJmaW5fcmVhZF9DQU5fTUMxKCkgICAgICAgICAgICBiZmluX3JlYWQxNihDQU5fTUMxKQogI2RlZmluZSBiZmluX3dyaXRlX0NBTl9NQzEodmFsKSAgICAgICAgYmZpbl93cml0ZTE2KENBTl9NQzEsIHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX0NBTl9NRDEoKSAgICAgICAgICAgIGJmaW5fcmVhZDE2KENBTl9NRDEpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggZDcwNjFkOS4uYjY3NGExYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtNDQyLDE1ICs0NDIsMTUgQEAKIC8qIFR3by1XaXJlIEludGVyZmFjZSAwCSgweEZGQzAxNDAwIC0gMHhGRkMwMTRGRikJCQkgKi8KICNkZWZpbmUJVFdJMF9DTEtESVYJCQkweEZGQzAxNDAwCS8qIFNlcmlhbCBDbG9jawlEaXZpZGVyCVJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTBfQ09OVFJPTAkJMHhGRkMwMTQwNAkvKiBUV0kwCU1hc3RlciBJbnRlcm5hbAlUaW1lIFJlZmVyZW5jZSBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX1NMQVZFX0NUUkwJCTB4RkZDMDE0MDgJLyogU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTBfU0xBVkVfQ1RMCQkweEZGQzAxNDA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZQlUV0kwX1NMQVZFX1NUQVQJCTB4RkZDMDE0MEMJLyogU2xhdmUgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9TTEFWRV9BRERSCQkweEZGQzAxNDEwCS8qIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX01BU1RFUl9DVFJMCTB4RkZDMDE0MTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlUV0kwX01BU1RFUl9DVEwJMHhGRkMwMTQxNAkvKiBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTBfTUFTVEVSX1NUQVQJMHhGRkMwMTQxOAkvKiBNYXN0ZXIgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9NQVNURVJfQUREUgkweEZGQzAxNDFDCS8qIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9JTlRfU1RBVAkJMHhGRkMwMTQyMAkvKiBUV0kwCU1hc3RlciBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9JTlRfTUFTSwkJMHhGRkMwMTQyNAkvKiBUV0kwCU1hc3RlciBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZQlUV0kwX0ZJRk9fQ1RSTAkJMHhGRkMwMTQyOAkvKiBGSUZPCUNvbnRyb2wJUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMF9GSUZPX0NUTAkJMHhGRkMwMTQyOAkvKiBGSUZPCUNvbnRyb2wJUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9GSUZPX1NUQVQJCTB4RkZDMDE0MkMJLyogRklGTwlTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMF9YTVRfREFUQTgJCTB4RkZDMDE0ODAJLyogRklGTwlUcmFuc21pdCBEYXRhIFNpbmdsZSBCeXRlIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTBfWE1UX0RBVEExNgkJMHhGRkMwMTQ4NAkvKiBGSUZPCVRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KQEAgLTc2MSwxNSArNzYxLDE1IEBACiAvKiBUd28tV2lyZSBJbnRlcmZhY2UgMQkoMHhGRkMwMjIwMCAtIDB4RkZDMDIyRkYpCQkJICovCiAjZGVmaW5lCVRXSTFfQ0xLRElWCQkJMHhGRkMwMjIwMAkvKiBTZXJpYWwgQ2xvY2sJRGl2aWRlcglSZWdpc3RlciAqLwogI2RlZmluZQlUV0kxX0NPTlRST0wJCTB4RkZDMDIyMDQJLyogVFdJMQlNYXN0ZXIgSW50ZXJuYWwJVGltZSBSZWZlcmVuY2UgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9TTEFWRV9DVFJMCQkweEZGQzAyMjA4CS8qIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQlUV0kxX1NMQVZFX0NUTAkJMHhGRkMwMjIwOAkvKiBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUJVFdJMV9TTEFWRV9TVEFUCQkweEZGQzAyMjBDCS8qIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfU0xBVkVfQUREUgkJMHhGRkMwMjIxMAkvKiBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9NQVNURVJfQ1RSTAkweEZGQzAyMjE0CS8qIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJVFdJMV9NQVNURVJfQ1RMCTB4RkZDMDIyMTQJLyogTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZQlUV0kxX01BU1RFUl9TVEFUCTB4RkZDMDIyMTgJLyogTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfTUFTVEVSX0FERFIJMHhGRkMwMjIxQwkvKiBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfSU5UX1NUQVQJCTB4RkZDMDIyMjAJLyogVFdJMQlNYXN0ZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfSU5UX01BU0sJCTB4RkZDMDIyMjQJLyogVFdJMQlNYXN0ZXIgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUJVFdJMV9GSUZPX0NUUkwJCTB4RkZDMDIyMjgJLyogRklGTwlDb250cm9sCVJlZ2lzdGVyICovCisjZGVmaW5lCVRXSTFfRklGT19DVEwJCTB4RkZDMDIyMjgJLyogRklGTwlDb250cm9sCVJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfRklGT19TVEFUCQkweEZGQzAyMjJDCS8qIEZJRk8JU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lCVRXSTFfWE1UX0RBVEE4CQkweEZGQzAyMjgwCS8qIEZJRk8JVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLwogI2RlZmluZQlUV0kxX1hNVF9EQVRBMTYJCTB4RkZDMDIyODQJLyogRklGTwlUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCkBAIC0yNDAxLDcgKzI0MDEsNyBAQAogI2RlZmluZQlYTVRTRVJWCQkweDAwNDAJCS8qIFRyYW5zbWl0IEZJRk8gU2VydmljZSAqLwogI2RlZmluZQlSQ1ZTRVJWCQkweDAwODAJCS8qIFJlY2VpdmUgRklGTwlTZXJ2aWNlICovCiAKLS8qIFRXSXhfRklGT19DVFJMIE1hc2tzCQkJCQkgKi8KKy8qIFRXSXhfRklGT19DVEwgTWFza3MJCQkJCSAqLwogI2RlZmluZQlYTVRGTFVTSAkweDAwMDEJCS8qIFRyYW5zbWl0IEJ1ZmZlciBGbHVzaCAqLwogI2RlZmluZQlSQ1ZGTFVTSAkweDAwMDIJCS8qIFJlY2VpdmUgQnVmZmVyIEZsdXNoICovCiAjZGVmaW5lCVhNVElOVExFTgkweDAwMDQJCS8qIFRyYW5zbWl0IEJ1ZmZlciBJbnRlcnJ1cHQgTGVuZ3RoICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDBjMzQ2ZmIuLmJkOWFkYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xMCw2MCArMTAsNjAgQEAKICNkZWZpbmUgTUFYX0JMQUNLRklOX0dQSU9TIDE2CiAjZGVmaW5lIEJGSU5fU1BFQ0lBTF9HUElPX0JBTktTIDMKIAotI2RlZmluZQlHUElPX1BGMAkwCS8qIFBGICovCi0jZGVmaW5lCUdQSU9fUEYxCTEKLSNkZWZpbmUJR1BJT19QRjIJMgotI2RlZmluZQlHUElPX1BGMwkzCi0jZGVmaW5lCUdQSU9fUEY0CTQKLSNkZWZpbmUJR1BJT19QRjUJNQotI2RlZmluZQlHUElPX1BGNgk2Ci0jZGVmaW5lCUdQSU9fUEY3CTcKLSNkZWZpbmUJR1BJT19QRjgJOAotI2RlZmluZQlHUElPX1BGOQk5Ci0jZGVmaW5lCUdQSU9fUEYxMAkxMAotI2RlZmluZQlHUElPX1BGMTEJMTEKLSNkZWZpbmUJR1BJT19QRjEyCTEyCi0jZGVmaW5lCUdQSU9fUEYxMwkxMwotI2RlZmluZQlHUElPX1BGMTQJMTQKLSNkZWZpbmUJR1BJT19QRjE1CTE1Ci0jZGVmaW5lCUdQSU9fUEMwCTE2CS8qIFBDICovCi0jZGVmaW5lCUdQSU9fUEMxCTE3Ci0jZGVmaW5lCUdQSU9fUEM0CTIwCi0jZGVmaW5lCUdQSU9fUEM1CTIxCi0jZGVmaW5lCUdQSU9fUEM2CTIyCi0jZGVmaW5lCUdQSU9fUEM3CTIzCi0jZGVmaW5lCUdQSU9fUEM4CTI0Ci0jZGVmaW5lCUdQSU9fUEM5CTI1Ci0jZGVmaW5lCUdQSU9fUEQwCTMyCS8qIFBEICovCi0jZGVmaW5lCUdQSU9fUEQxCTMzCi0jZGVmaW5lCUdQSU9fUEQyCTM0Ci0jZGVmaW5lCUdQSU9fUEQzCTM1Ci0jZGVmaW5lCUdQSU9fUEQ0CTM2Ci0jZGVmaW5lCUdQSU9fUEQ1CTM3Ci0jZGVmaW5lCUdQSU9fUEQ2CTM4Ci0jZGVmaW5lCUdQSU9fUEQ3CTM5Ci0jZGVmaW5lCUdQSU9fUEQ4CTQwCi0jZGVmaW5lCUdQSU9fUEQ5CTQxCi0jZGVmaW5lCUdQSU9fUEQxMCAgICAgIAk0MgotI2RlZmluZQlHUElPX1BEMTEgICAgICAJNDMKLSNkZWZpbmUJR1BJT19QRDEyICAgICAgCTQ0Ci0jZGVmaW5lCUdQSU9fUEQxMyAgICAgIAk0NQotI2RlZmluZQlHUElPX1BFMAk0OAkvKiBQRSAqLwotI2RlZmluZQlHUElPX1BFMQk0OQotI2RlZmluZQlHUElPX1BFMgk1MAotI2RlZmluZQlHUElPX1BFMwk1MQotI2RlZmluZQlHUElPX1BFNAk1MgotI2RlZmluZQlHUElPX1BFNQk1MwotI2RlZmluZQlHUElPX1BFNgk1NAotI2RlZmluZQlHUElPX1BFNwk1NQotI2RlZmluZQlHUElPX1BFOAk1NgotI2RlZmluZQlHUElPX1BFOQk1NwotI2RlZmluZQlHUElPX1BFMTAgICAgICAJNTgKLSNkZWZpbmUJR1BJT19QRTExICAgICAgCTU5Ci0jZGVmaW5lCUdQSU9fUEUxMiAgICAgIAk2MAotI2RlZmluZQlHUElPX1BFMTMgICAgICAJNjEKLSNkZWZpbmUJR1BJT19QRTE0ICAgICAgCTYyCi0jZGVmaW5lCUdQSU9fUEUxNSAgICAgIAk2MworI2RlZmluZSBHUElPX1BGMAkwCS8qIFBGICovCisjZGVmaW5lIEdQSU9fUEYxCTEKKyNkZWZpbmUgR1BJT19QRjIJMgorI2RlZmluZSBHUElPX1BGMwkzCisjZGVmaW5lIEdQSU9fUEY0CTQKKyNkZWZpbmUgR1BJT19QRjUJNQorI2RlZmluZSBHUElPX1BGNgk2CisjZGVmaW5lIEdQSU9fUEY3CTcKKyNkZWZpbmUgR1BJT19QRjgJOAorI2RlZmluZSBHUElPX1BGOQk5CisjZGVmaW5lIEdQSU9fUEYxMAkxMAorI2RlZmluZSBHUElPX1BGMTEJMTEKKyNkZWZpbmUgR1BJT19QRjEyCTEyCisjZGVmaW5lIEdQSU9fUEYxMwkxMworI2RlZmluZSBHUElPX1BGMTQJMTQKKyNkZWZpbmUgR1BJT19QRjE1CTE1CisjZGVmaW5lIEdQSU9fUEMwCTE2CS8qIFBDICovCisjZGVmaW5lIEdQSU9fUEMxCTE3CisjZGVmaW5lIEdQSU9fUEM0CTIwCisjZGVmaW5lIEdQSU9fUEM1CTIxCisjZGVmaW5lIEdQSU9fUEM2CTIyCisjZGVmaW5lIEdQSU9fUEM3CTIzCisjZGVmaW5lIEdQSU9fUEM4CTI0CisjZGVmaW5lIEdQSU9fUEM5CTI1CisjZGVmaW5lIEdQSU9fUEQwCTMyCS8qIFBEICovCisjZGVmaW5lIEdQSU9fUEQxCTMzCisjZGVmaW5lIEdQSU9fUEQyCTM0CisjZGVmaW5lIEdQSU9fUEQzCTM1CisjZGVmaW5lIEdQSU9fUEQ0CTM2CisjZGVmaW5lIEdQSU9fUEQ1CTM3CisjZGVmaW5lIEdQSU9fUEQ2CTM4CisjZGVmaW5lIEdQSU9fUEQ3CTM5CisjZGVmaW5lIEdQSU9fUEQ4CTQwCisjZGVmaW5lIEdQSU9fUEQ5CTQxCisjZGVmaW5lIEdQSU9fUEQxMAk0MgorI2RlZmluZSBHUElPX1BEMTEJNDMKKyNkZWZpbmUgR1BJT19QRDEyCTQ0CisjZGVmaW5lIEdQSU9fUEQxMwk0NQorI2RlZmluZSBHUElPX1BFMAk0OAkvKiBQRSAqLworI2RlZmluZSBHUElPX1BFMQk0OQorI2RlZmluZSBHUElPX1BFMgk1MAorI2RlZmluZSBHUElPX1BFMwk1MQorI2RlZmluZSBHUElPX1BFNAk1MgorI2RlZmluZSBHUElPX1BFNQk1MworI2RlZmluZSBHUElPX1BFNgk1NAorI2RlZmluZSBHUElPX1BFNwk1NQorI2RlZmluZSBHUElPX1BFOAk1NgorI2RlZmluZSBHUElPX1BFOQk1NworI2RlZmluZSBHUElPX1BFMTAJNTgKKyNkZWZpbmUgR1BJT19QRTExCTU5CisjZGVmaW5lIEdQSU9fUEUxMgk2MAorI2RlZmluZSBHUElPX1BFMTMJNjEKKyNkZWZpbmUgR1BJT19QRTE0CTYyCisjZGVmaW5lIEdQSU9fUEUxNQk2MwogCiAjZGVmaW5lIFBPUlRfRiBHUElPX1BGMAogI2RlZmluZSBQT1JUX0MgR1BJT19QQzAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggMDA4M2JhMS4uYjc3M2M1ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2RlZmluZSBQX1NQSTBfU1NFTDIJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjIpKQogI2RlZmluZSBQX1NQSTBfU1NFTDEJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjEpKQogI2RlZmluZSBQX1NQSTBfU1MJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRjApKQorI2RlZmluZSBHUElPX0RFRkFVTFRfQk9PVF9TUElfQ1MgR1BJT19QRjIKICNkZWZpbmUgUF9ERUZBVUxUX0JPT1RfU1BJX0NTIFBfU1BJMF9TU0VMMgogCiAjZW5kaWYgLyogX01BQ0hfUE9SVE1VWF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9hbm9tYWx5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAppbmRleCA3ZDA4Yzc1Li40MDcwMDc5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2Fub21hbHkuaApAQCAtNSw3ICs1LDcgQEAKICAqIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGF0IHZlcnNpb24gYXQgYW55IHRpbWUKICAqIERPIE5PVCBFRElUIFRISVMgRklMRQogICoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDQtMjAxMCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlLgogICogICBodHRwczovL2RvY3MuYmxhY2tmaW4udWNsaW51eC5vcmcvZG9rdS5waHA/aWQ9YWRpX2JzZAogICovCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAxMTkgKDEpCiAvKiBSeC5IIENhbm5vdCBCZSBVc2VkIHRvIEFjY2VzcyAxNi1iaXQgU3lzdGVtIE1NUiBSZWdpc3RlcnMgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDEyMiAoMSkKLS8qIERhdGEgQ29ycnVwdGlvbiB3aXRoIENhY2hlZCBFeHRlcm5hbCBNZW1vcnkgYW5kIE5vbi1DYWNoZWQgT24tQ2hpcCBMMiBNZW1vcnkgKi8KKy8qIERhdGEgQ29ycnVwdGlvbi9Db3JlIEhhbmcgd2l0aCBMMi9MMyBDb25maWd1cmVkIGluIFdyaXRlYmFjayBDYWNoZSBNb2RlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMjAgKDEpCiAvKiBGYWxzZSBIYXJkd2FyZSBFcnJvciBmcm9tIGFuIEFjY2VzcyBpbiB0aGUgU2hhZG93IG9mIGEgQ29uZGl0aW9uYWwgQnJhbmNoICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyNDUgKDEpCkBAIC0yMTAsMTAgKzIxMCwxNiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQogLyogQWNjZXNzIHRvIEREUi1TRFJBTSBjYXVzZXMgc3lzdGVtIGhhbmcgdW5kZXIgY2VydGFpbiBQTEwvVlIgc2V0dGluZ3MgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NCAoMSkKLS8qIENvcmUgSGFuZyBXaXRoIEwyL0wzIENvbmZpZ3VyZWQgaW4gV3JpdGViYWNrIENhY2hlIE1vZGUgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoMSkKIC8qIFRFU1RTRVQgSW5zdHJ1Y3Rpb24gQ2Fubm90IEJlIEludGVycnVwdGVkICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzcgKDEpCisvKiBSZWFkcyBvZiBJVEVTVF9DT01NQU5EIGFuZCBJVEVTVF9EQVRBIFJlZ2lzdGVycyBDYXVzZSBDYWNoZSBDb3JydXB0aW9uICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODEgKDEpCisvKiBQb3NzaWJsZSBVU0IgRGF0YSBDb3JydXB0aW9uIFdoZW4gTXVsdGlwbGUgRW5kcG9pbnRzIEFyZSBBY2Nlc3NlZCBieSB0aGUgQ29yZSAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDgzICgxKQorLyogUExMX0NUTCBDaGFuZ2UgVXNpbmcgYmZyb21fU3lzQ29udHJvbCgpIENhbiBSZXN1bHQgaW4gUHJvY2Vzc29yIE92ZXJjbG9ja2luZyAqLworI2RlZmluZSBBTk9NQUxZXzA1MDAwNDg1IChfX1NJTElDT05fUkVWSVNJT05fXyA+PSAyKQorLyogSUZMVVNIIHN1Y2tzIGF0IGxpZmUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ5MSAoMSkKIAogLyogQW5vbWFsaWVzIHRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhpcyBwcm9jICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAwOTkgKDApCkBAIC0yMjksNiArMjM1LDcgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDE5OCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIwMiAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxNSAoMCkKKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDIxOSAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyNyAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMCAoMCkKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDIzMSAoMCkKQEAgLTI2Myw1ICsyNzAsNiBAQAogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDEyICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDMyICgwKQogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDM1ICgwKQorI2RlZmluZSBBTk9NQUxZXzA1MDAwNDc1ICgwKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaAppbmRleCAzMmY3MWU2Li5lYTNlYzRlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCkBAIC0zMDEsMTAgKzMwMSwxMCBAQAogCiAvKiBETUFDMCBSZWdpc3RlcnMgKi8KIAotI2RlZmluZSBiZmluX3JlYWRfRE1BQzBfVENQRVIoKQkJYmZpbl9yZWFkMTYoRE1BQzBfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzBfVENQRVIodmFsKQliZmluX3dyaXRlMTYoRE1BQzBfVENQRVIsIHZhbCkKLSNkZWZpbmUgYmZpbl9yZWFkX0RNQUMwX1RDQ05UKCkJCWJmaW5fcmVhZDE2KERNQUMwX1RDQ05UKQotI2RlZmluZSBiZmluX3dyaXRlX0RNQUMwX1RDQ05UKHZhbCkJYmZpbl93cml0ZTE2KERNQUMwX1RDQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMF9UQ19QRVIoKQkJYmZpbl9yZWFkMTYoRE1BQzBfVENfUEVSKQorI2RlZmluZSBiZmluX3dyaXRlX0RNQUMwX1RDX1BFUih2YWwpCWJmaW5fd3JpdGUxNihETUFDMF9UQ19QRVIsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0RNQUMwX1RDX0NOVCgpCQliZmluX3JlYWQxNihETUFDMF9UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzBfVENfQ05UKHZhbCkJYmZpbl93cml0ZTE2KERNQUMwX1RDX0NOVCwgdmFsKQogCiAvKiBETUEgQ2hhbm5lbCAwIFJlZ2lzdGVycyAqLwogCkBAIC0xMTU1LDEwICsxMTU1LDEwIEBACiAKIC8qIERNQUMxIFJlZ2lzdGVycyAqLwogCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ1BFUigpCQkJYmZpbl9yZWFkMTYoRE1BQzFfVENQRVIpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENQRVIodmFsKQkJYmZpbl93cml0ZTE2KERNQUMxX1RDUEVSLCB2YWwpCi0jZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ0NOVCgpCQkJYmZpbl9yZWFkMTYoRE1BQzFfVENDTlQpCi0jZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENDTlQodmFsKQkJYmZpbl93cml0ZTE2KERNQUMxX1RDQ05ULCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9ETUFDMV9UQ19QRVIoKQkJCWJmaW5fcmVhZDE2KERNQUMxX1RDX1BFUikKKyNkZWZpbmUgYmZpbl93cml0ZV9ETUFDMV9UQ19QRVIodmFsKQkJYmZpbl93cml0ZTE2KERNQUMxX1RDX1BFUiwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRE1BQzFfVENfQ05UKCkJCQliZmluX3JlYWQxNihETUFDMV9UQ19DTlQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRE1BQzFfVENfQ05UKHZhbCkJCWJmaW5fd3JpdGUxNihETUFDMV9UQ19DTlQsIHZhbCkKIAogLyogRE1BIENoYW5uZWwgMTIgUmVnaXN0ZXJzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAppbmRleCBkM2JjNmQxLi5hYmY1Zjc1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCkBAIC0zNjYsMTM2ICszNjYsNiBAQAogCiAjZGVmaW5lICAgICAgICAgICBLUEFEX1NPRlRFVkFMX0UgIDB4MiAgICAgICAgLyogU29mdHdhcmUgUHJvZ3JhbW1hYmxlIEZvcmNlIEV2YWx1YXRlICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCi0jaWYgMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLwotI2VuZGlmCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCmluZGV4IGY5MTZjNTIuLmUyNzcxMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKQEAgLTYwLDE1ICs2MCwxNSBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRXSTFfUkVHQkFTRSAgMHhmZmMwMjIwMAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUV0kxX0NMS0RJViAgMHhmZmMwMjIwMCAgIC8qIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kxX0NPTlRST0wgIDB4ZmZjMDIyMDQgICAvKiBUV0kgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQ1RSTCAgMHhmZmMwMjIwOCAgIC8qIFRXSSBTbGF2ZSBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9DVEwgIDB4ZmZjMDIyMDggICAvKiBUV0kgU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9TVEFUICAweGZmYzAyMjBjICAgLyogVFdJIFNsYXZlIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9TTEFWRV9BRERSICAweGZmYzAyMjEwICAgLyogVFdJIFNsYXZlIE1vZGUgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfQ1RSTCAgMHhmZmMwMjIxNCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfQ1RMICAweGZmYzAyMjE0ICAgLyogVFdJIE1hc3RlciBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX1NUQVQgIDB4ZmZjMDIyMTggICAvKiBUV0kgTWFzdGVyIE1vZGUgU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9BRERSICAweGZmYzAyMjFjICAgLyogVFdJIE1hc3RlciBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX1NUQVQgIDB4ZmZjMDIyMjAgICAvKiBUV0kgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFdJMV9JTlRfTUFTSyAgMHhmZmMwMjIyNCAgIC8qIFRXSSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fQ1RSTCAgMHhmZmMwMjIyOCAgIC8qIFRXSSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfRklGT19DVEwgIDB4ZmZjMDIyMjggICAvKiBUV0kgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfRklGT19TVEFUICAweGZmYzAyMjJjICAgLyogVFdJIEZJRk8gU3RhdHVzIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfWE1UX0RBVEE4ICAweGZmYzAyMjgwICAgLyogVFdJIEZJRk8gVHJhbnNtaXQgRGF0YSBTaW5nbGUgQnl0ZSBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfWE1UX0RBVEExNiAgMHhmZmMwMjI4NCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgRG91YmxlIEJ5dGUgUmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAppbmRleCA3MmMzNDM2Li5iZTIxYmE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCkBAIC05OSwxNSArOTksMTUgQEAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kxX1JFR0JBU0UgIDB4ZmZjMDIyMDAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFdJMV9DTEtESVYgIDB4ZmZjMDIyMDAgICAvKiBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFdJMV9DT05UUk9MICAweGZmYzAyMjA0ICAgLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1NMQVZFX0NUUkwgIDB4ZmZjMDIyMDggICAvKiBUV0kgU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQ1RMICAweGZmYzAyMjA4ICAgLyogVFdJIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfU1RBVCAgMHhmZmMwMjIwYyAgIC8qIFRXSSBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfU0xBVkVfQUREUiAgMHhmZmMwMjIxMCAgIC8qIFRXSSBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX0NUUkwgIDB4ZmZjMDIyMTQgICAvKiBUV0kgTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTFfTUFTVEVSX0NUTCAgMHhmZmMwMjIxNCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kxX01BU1RFUl9TVEFUICAweGZmYzAyMjE4ICAgLyogVFdJIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMV9NQVNURVJfQUREUiAgMHhmZmMwMjIxYyAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kxX0lOVF9TVEFUICAweGZmYzAyMjIwICAgLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTFfSU5UX01BU0sgIDB4ZmZjMDIyMjQgICAvKiBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMV9GSUZPX0NUUkwgIDB4ZmZjMDIyMjggICAvKiBUV0kgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fQ1RMICAweGZmYzAyMjI4ICAgLyogVFdJIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX0ZJRk9fU1RBVCAgMHhmZmMwMjIyYyAgIC8qIFRXSSBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kxX1hNVF9EQVRBOCAgMHhmZmMwMjI4MCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kxX1hNVF9EQVRBMTYgIDB4ZmZjMDIyODQgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCkBAIC02NDYsMTM2ICs2NDYsNiBAQAogCiAjZGVmaW5lICAgICAgICAgICBLUEFEX1NPRlRFVkFMX0UgIDB4MiAgICAgICAgLyogU29mdHdhcmUgUHJvZ3JhbW1hYmxlIEZvcmNlIEV2YWx1YXRlICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0NPTU1BTkQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTURfSURYICAweDNmICAgICAgIC8qIENvbW1hbmQgSW5kZXggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ01EX1JTUCAgMHg0MCAgICAgICAvKiBSZXNwb25zZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgQ01EX0xfUlNQICAweDgwICAgICAgIC8qIExvbmcgUmVzcG9uc2UgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIENNRF9JTlRfRSAgMHgxMDAgICAgICAvKiBDb21tYW5kIEludGVycnVwdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBDTURfUEVORF9FICAweDIwMCAgICAgIC8qIENvbW1hbmQgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENNRF9FICAweDQwMCAgICAgIC8qIENvbW1hbmQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1BXUl9DVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFdSX09OICAweDMgICAgICAgIC8qIFBvd2VyIE9uICovCi0jaWYgMAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgVEJEICAweDNjICAgICAgIC8qIFRCRCAqLwotI2VuZGlmCi0jZGVmaW5lICAgICAgICAgICAgICAgICBTRF9DTURfT0QgIDB4NDAgICAgICAgLyogT3BlbiBEcmFpbiBPdXRwdXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUk9EX0NUTCAgMHg4MCAgICAgICAvKiBSb2QgQ29udHJvbCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DTEtfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENMS0RJViAgMHhmZiAgICAgICAvKiBNQ19DTEsgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENMS19FICAweDEwMCAgICAgIC8qIE1DX0NMSyBCdXMgQ2xvY2sgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgUFdSX1NWX0UgIDB4MjAwICAgICAgLyogUG93ZXIgU2F2ZSBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ0xLRElWX0JZUEFTUyAgMHg0MDAgICAgICAvKiBCeXBhc3MgRGl2aXNvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFdJREVfQlVTICAweDgwMCAgICAgIC8qIFdpZGUgQnVzIE1vZGUgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JFU1BfQ01EICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBSRVNQX0NNRCAgMHgzZiAgICAgICAvKiBSZXNwb25zZSBDb21tYW5kICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX0RBVEFfQ1RMICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBEVFhfRSAgMHgxICAgICAgICAvKiBEYXRhIFRyYW5zZmVyIEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBEVFhfRElSICAweDIgICAgICAgIC8qIERhdGEgVHJhbnNmZXIgRGlyZWN0aW9uICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgRFRYX01PREUgIDB4NCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICBEVFhfRE1BX0UgIDB4OCAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBETUEgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICBEVFhfQkxLX0xHVEggIDB4ZjAgICAgICAgLyogRGF0YSBUcmFuc2ZlciBCbG9jayBMZW5ndGggKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfU1RBVFVTICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9DUkNfRkFJTCAgMHgxICAgICAgICAvKiBDTUQgQ1JDIEZhaWwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIERBVF9DUkNfRkFJTCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsICovCi0jZGVmaW5lICAgICAgICAgICAgICAgQ01EX1RJTUVfT1VUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9USU1FX09VVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgVFhfVU5ERVJSVU4gIDB4MTAgICAgICAgLyogVHJhbnNtaXQgVW5kZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgUlhfT1ZFUlJVTiAgMHgyMCAgICAgICAvKiBSZWNlaXZlIE92ZXJydW4gKi8KLSNkZWZpbmUgICAgICAgICAgICAgIENNRF9SRVNQX0VORCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgQ01EX1NFTlQgIDB4ODAgICAgICAgLyogQ01EIFNlbnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgREFUX0VORCAgMHgxMDAgICAgICAvKiBEYXRhIEVuZCAqLwotI2RlZmluZSAgICAgICAgICAgICBTVEFSVF9CSVRfRVJSICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciAqLwotI2RlZmluZSAgICAgICAgICAgICAgIERBVF9CTEtfRU5EICAweDQwMCAgICAgIC8qIERhdGEgQmxvY2sgRW5kICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENNRF9BQ1QgIDB4ODAwICAgICAgLyogQ01EIEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgVFhfQUNUICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUlhfQUNUICAweDIwMDAgICAgIC8qIFJlY2VpdmUgQWN0aXZlICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX1NUQVQgIDB4NDAwMCAgICAgLyogVHJhbnNtaXQgRklGTyBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFJYX0ZJRk9fU1RBVCAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzICovCi0jZGVmaW5lICAgICAgICAgICAgICBUWF9GSUZPX0ZVTEwgIDB4MTAwMDAgICAgLyogVHJhbnNtaXQgRklGTyBGdWxsICovCi0jZGVmaW5lICAgICAgICAgICAgICBSWF9GSUZPX0ZVTEwgIDB4MjAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgKi8KLSNkZWZpbmUgICAgICAgICAgICAgIFRYX0ZJRk9fWkVSTyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfREFUX1pFUk8gIDB4ODAwMDAgICAgLyogUmVjZWl2ZSBGSUZPIEVtcHR5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgIFRYX0RBVF9SRFkgIDB4MTAwMDAwICAgLyogVHJhbnNtaXQgRGF0YSBBdmFpbGFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICBSWF9GSUZPX1JEWSAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1NUQVRVU19DTFIgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9TVEFUICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBEQVRfQ1JDX0ZBSUxfU1RBVCAgMHgyICAgICAgICAvKiBEYXRhIENSQyBGYWlsIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBDTURfVElNRU9VVF9TVEFUICAweDQgICAgICAgIC8qIENNRCBUaW1lIE91dCBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfU1RBVCAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IHN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICBUWF9VTkRFUlJVTl9TVEFUICAweDEwICAgICAgIC8qIFRyYW5zbWl0IFVuZGVycnVuIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgUlhfT1ZFUlJVTl9TVEFUICAweDIwICAgICAgIC8qIFJlY2VpdmUgT3ZlcnJ1biBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfU1RBVCAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICBDTURfU0VOVF9TVEFUICAweDgwICAgICAgIC8qIENNRCBTZW50IFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgICAgICAgREFUX0VORF9TVEFUICAweDEwMCAgICAgIC8qIERhdGEgRW5kIFN0YXR1cyAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9TVEFUICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBTdGF0dXMgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX0JMS19FTkRfU1RBVCAgMHg0MDAgICAgICAvKiBEYXRhIEJsb2NrIEVuZCBTdGF0dXMgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfTUFTSzAgKi8KLQotI2RlZmluZSAgICAgICAgIENNRF9DUkNfRkFJTF9NQVNLICAweDEgICAgICAgIC8qIENNRCBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgREFUX0NSQ19GQUlMX01BU0sgIDB4MiAgICAgICAgLyogRGF0YSBDUkMgRmFpbCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIENNRF9USU1FT1VUX01BU0sgIDB4NCAgICAgICAgLyogQ01EIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgREFUX1RJTUVPVVRfTUFTSyAgMHg4ICAgICAgICAvKiBEYXRhIFRpbWUgT3V0IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgVFhfVU5ERVJSVU5fTUFTSyAgMHgxMCAgICAgICAvKiBUcmFuc21pdCBVbmRlcnJ1biBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICBSWF9PVkVSUlVOX01BU0sgIDB4MjAgICAgICAgLyogUmVjZWl2ZSBPdmVycnVuIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBDTURfUkVTUF9FTkRfTUFTSyAgMHg0MCAgICAgICAvKiBDTUQgUmVzcG9uc2UgRW5kIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgICAgQ01EX1NFTlRfTUFTSyAgMHg4MCAgICAgICAvKiBDTUQgU2VudCBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICBEQVRfRU5EX01BU0sgIDB4MTAwICAgICAgLyogRGF0YSBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgU1RBUlRfQklUX0VSUl9NQVNLICAweDIwMCAgICAgIC8qIFN0YXJ0IEJpdCBFcnJvciBNYXNrICovCi0jZGVmaW5lICAgICAgICAgIERBVF9CTEtfRU5EX01BU0sgIDB4NDAwICAgICAgLyogRGF0YSBCbG9jayBFbmQgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgQ01EX0FDVF9NQVNLICAweDgwMCAgICAgIC8qIENNRCBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFRYX0FDVF9NQVNLICAweDEwMDAgICAgIC8qIFRyYW5zbWl0IEFjdGl2ZSBNYXNrICovCi0jZGVmaW5lICAgICAgICAgICAgICAgUlhfQUNUX01BU0sgIDB4MjAwMCAgICAgLyogUmVjZWl2ZSBBY3RpdmUgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFRYX0ZJRk9fU1RBVF9NQVNLICAweDQwMDAgICAgIC8qIFRyYW5zbWl0IEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBSWF9GSUZPX1NUQVRfTUFTSyAgMHg4MDAwICAgICAvKiBSZWNlaXZlIEZJRk8gU3RhdHVzIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX0ZVTExfTUFTSyAgMHgxMDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEZ1bGwgTWFzayAqLwotI2RlZmluZSAgICAgICAgIFJYX0ZJRk9fRlVMTF9NQVNLICAweDIwMDAwICAgIC8qIFJlY2VpdmUgRklGTyBGdWxsIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICBUWF9GSUZPX1pFUk9fTUFTSyAgMHg0MDAwMCAgICAvKiBUcmFuc21pdCBGSUZPIEVtcHR5IE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfREFUX1pFUk9fTUFTSyAgMHg4MDAwMCAgICAvKiBSZWNlaXZlIEZJRk8gRW1wdHkgTWFzayAqLwotI2RlZmluZSAgICAgICAgICAgVFhfREFUX1JEWV9NQVNLICAweDEwMDAwMCAgIC8qIFRyYW5zbWl0IERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLSNkZWZpbmUgICAgICAgICAgUlhfRklGT19SRFlfTUFTSyAgMHgyMDAwMDAgICAvKiBSZWNlaXZlIERhdGEgQXZhaWxhYmxlIE1hc2sgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRklGT19DTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICBGSUZPX0NPVU5UICAweDdmZmYgICAgIC8qIEZJRk8gQ291bnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9TVEFUVVMgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgU0RJT19JTlRfREVUICAweDIgICAgICAgIC8qIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgU0RfQ0FSRF9ERVQgIDB4MTAgICAgICAgLyogU0QgQ2FyZCBEZXRlY3QgKi8KLQotLyogQml0IG1hc2tzIGZvciBTREhfRV9NQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBTRElPX01TSyAgMHgyICAgICAgICAvKiBNYXNrIFNESU8gSW50IERldGVjdGVkICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIFNDRF9NU0sgIDB4NDAgICAgICAgLyogTWFzayBDYXJkIERldGVjdCAqLwotCi0vKiBCaXQgbWFza3MgZm9yIFNESF9DRkcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDTEtTX0VOICAweDEgICAgICAgIC8qIENsb2NrcyBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgU0Q0RSAgMHg0ICAgICAgICAvKiBTRElPIDQtQml0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgTVdFICAweDggICAgICAgIC8qIE1vdmluZyBXaW5kb3cgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBTRF9SU1QgIDB4MTAgICAgICAgLyogU0RNTUMgUmVzZXQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFBVUF9TRERBVCAgMHgyMCAgICAgICAvKiBQdWxsLXVwIFNEX0RBVCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQVVBfU0REQVQzICAweDQwICAgICAgIC8qIFB1bGwtdXAgU0RfREFUMyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgUERfU0REQVQzICAweDgwICAgICAgIC8qIFB1bGwtZG93biBTRF9EQVQzICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgU0RIX1JEX1dBSVRfRU4gKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgUldSICAweDEgICAgICAgIC8qIFJlYWQgV2FpdCBSZXF1ZXN0ICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgQVRBUElfQ09OVFJPTCAqLwogCiAjZGVmaW5lICAgICAgICAgICAgICAgICBQSU9fU1RBUlQgIDB4MSAgICAgICAgLyogU3RhcnQgUElPL1JlZyBPcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaAppbmRleCAwZWQwNmMyLi45NWZmNDQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTR4X2Jhc2UuaApAQCAtMTA1LDE1ICsxMDUsMTUgQEAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBUV0kwX1JFR0JBU0UgIDB4ZmZjMDA3MDAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVFdJMF9DTEtESVYgIDB4ZmZjMDA3MDAgICAvKiBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgVFdJMF9DT05UUk9MICAweGZmYzAwNzA0ICAgLyogVFdJIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kwX1NMQVZFX0NUUkwgIDB4ZmZjMDA3MDggICAvKiBUV0kgU2xhdmUgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgIFRXSTBfU0xBVkVfQ1RMICAweGZmYzAwNzA4ICAgLyogVFdJIFNsYXZlIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTBfU0xBVkVfU1RBVCAgMHhmZmMwMDcwYyAgIC8qIFRXSSBTbGF2ZSBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTBfU0xBVkVfQUREUiAgMHhmZmMwMDcxMCAgIC8qIFRXSSBTbGF2ZSBNb2RlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgIFRXSTBfTUFTVEVSX0NUUkwgIDB4ZmZjMDA3MTQgICAvKiBUV0kgTWFzdGVyIE1vZGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgIFRXSTBfTUFTVEVSX0NUTCAgMHhmZmMwMDcxNCAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICBUV0kwX01BU1RFUl9TVEFUICAweGZmYzAwNzE4ICAgLyogVFdJIE1hc3RlciBNb2RlIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgVFdJMF9NQVNURVJfQUREUiAgMHhmZmMwMDcxYyAgIC8qIFRXSSBNYXN0ZXIgTW9kZSBBZGRyZXNzIFJlZ2lzdGVyICovCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kwX0lOVF9TVEFUICAweGZmYzAwNzIwICAgLyogVFdJIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFRXSTBfSU5UX01BU0sgIDB4ZmZjMDA3MjQgICAvKiBUV0kgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgVFdJMF9GSUZPX0NUUkwgIDB4ZmZjMDA3MjggICAvKiBUV0kgRklGTyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICBUV0kwX0ZJRk9fQ1RMICAweGZmYzAwNzI4ICAgLyogVFdJIEZJRk8gQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kwX0ZJRk9fU1RBVCAgMHhmZmMwMDcyYyAgIC8qIFRXSSBGSUZPIFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICBUV0kwX1hNVF9EQVRBOCAgMHhmZmMwMDc4MCAgIC8qIFRXSSBGSUZPIFRyYW5zbWl0IERhdGEgU2luZ2xlIEJ5dGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgICAgICAgICAgICAgICAgICBUV0kwX1hNVF9EQVRBMTYgIDB4ZmZjMDA3ODQgICAvKiBUV0kgRklGTyBUcmFuc21pdCBEYXRhIERvdWJsZSBCeXRlIFJlZ2lzdGVyICovCkBAIC0xOTgsOCArMTk4LDggQEAKIAogLyogRE1BQzAgUmVnaXN0ZXJzICovCiAKLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BQzBfVENQRVIgIDB4ZmZjMDBiMGMgICAvKiBETUEgQ29udHJvbGxlciAwIFRyYWZmaWMgQ29udHJvbCBQZXJpb2RzIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERNQUMwX1RDQ05UICAweGZmYzAwYjEwICAgLyogRE1BIENvbnRyb2xsZXIgMCBDdXJyZW50IENvdW50cyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQUMwX1RDX1BFUiAgMHhmZmMwMGIwYyAgIC8qIERNQSBDb250cm9sbGVyIDAgVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBETUFDMF9UQ19DTlQgIDB4ZmZjMDBiMTAgICAvKiBETUEgQ29udHJvbGxlciAwIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCiAKIC8qIERNQSBDaGFubmVsIDAgUmVnaXN0ZXJzICovCiAKQEAgLTY4OCw4ICs2ODgsOCBAQAogCiAvKiBETUFDMSBSZWdpc3RlcnMgKi8KIAotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBETUFDMV9UQ1BFUiAgMHhmZmMwMWIwYyAgIC8qIERNQSBDb250cm9sbGVyIDEgVHJhZmZpYyBDb250cm9sIFBlcmlvZHMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRE1BQzFfVENDTlQgIDB4ZmZjMDFiMTAgICAvKiBETUEgQ29udHJvbGxlciAxIEN1cnJlbnQgQ291bnRzIFJlZ2lzdGVyICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgRE1BQzFfVENfUEVSICAweGZmYzAxYjBjICAgLyogRE1BIENvbnRyb2xsZXIgMSBUcmFmZmljIENvbnRyb2wgUGVyaW9kcyBSZWdpc3RlciAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIERNQUMxX1RDX0NOVCAgMHhmZmMwMWIxMCAgIC8qIERNQSBDb250cm9sbGVyIDEgQ3VycmVudCBDb3VudHMgUmVnaXN0ZXIgKi8KIAogLyogRE1BIENoYW5uZWwgMTIgUmVnaXN0ZXJzICovCiAKQEAgLTE5NTgsNTcgKzE5NTgsNiBAQAogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU42ICAweDQwMDAwMDAwIC8qIFRpbWVyIDYgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwogI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRSVU43ICAweDgwMDAwMDAwIC8qIFRpbWVyIDcgU2xhdmUgRW5hYmxlIFN0YXR1cyAqLwogCi0vKiBCaXQgbWFza3MgZm9yIENOVF9DT05GSUcgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBDTlRFICAweDEgICAgICAgIC8qIENvdW50ZXIgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERFQkUgIDB4MiAgICAgICAgLyogRGVib3VuY2UgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBDREdJTlYgIDB4MTAgICAgICAgLyogQ0RHIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENVRElOViAgMHgyMCAgICAgICAvKiBDVUQgUGluIFBvbGFyaXR5IEludmVydCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNSU5WICAweDQwICAgICAgIC8qIENaTSBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENOVE1PREUgIDB4NzAwICAgICAgLyogQ291bnRlciBPcGVyYXRpbmcgTW9kZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBaTVpDICAweDgwMCAgICAgIC8qIENaTSBaZXJvZXMgQ291bnRlciBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQk5ETU9ERSAgMHgzMDAwICAgICAvKiBCb3VuZGFyeSByZWdpc3RlciBNb2RlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBJTlBESVMgIDB4ODAwMCAgICAgLyogQ1VHIGFuZCBDREcgSW5wdXQgRGlzYWJsZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIENOVF9JTUFTSyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUUgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgVUNJRSAgMHgyICAgICAgICAvKiBVcCBjb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIERDSUUgIDB4NCAgICAgICAgLyogRG93biBjb3VudCBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUUgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE1BWENJRSAgMHgxMCAgICAgICAvKiBNYXggQ291bnQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBDT1YzMUlFICAweDIwICAgICAgIC8qIEJpdCAzMSBPdmVyZmxvdyBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUUgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgQ1pFUk9JRSAgMHg4MCAgICAgICAvKiBDb3VudCB0byBaZXJvIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBDWk1JRSAgMHgxMDAgICAgICAvKiBDWk0gUGluIEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJRSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgQ1pNWklFICAweDQwMCAgICAgIC8qIENaTSBaZXJvZXMgQ291bnRlciBJbnRlcnJ1cHQgRW5hYmxlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQ05UX1NUQVRVUyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIElDSUkgIDB4MSAgICAgICAgLyogSWxsZWdhbCBHcmF5L0JpbmFyeSBDb2RlIEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFVDSUkgIDB4MiAgICAgICAgLyogVXAgY291bnQgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgRENJSSAgMHg0ICAgICAgICAvKiBEb3duIGNvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNSU5DSUkgIDB4OCAgICAgICAgLyogTWluIENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBNQVhDSUkgIDB4MTAgICAgICAgLyogTWF4IENvdW50IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjMxSUkgIDB4MjAgICAgICAgLyogQml0IDMxIE92ZXJmbG93IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENPVjE1SUkgIDB4NDAgICAgICAgLyogQml0IDE1IE92ZXJmbG93IEludGVycnVwdCBJZGVudGlmaWVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgIENaRVJPSUkgIDB4ODAgICAgICAgLyogQ291bnQgdG8gWmVybyBJbnRlcnJ1cHQgSWRlbnRpZmllciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENaTUlJICAweDEwMCAgICAgIC8qIENaTSBQaW4gSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTUVJSSAgMHgyMDAgICAgICAvKiBDWk0gRXJyb3IgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIENaTVpJSSAgMHg0MDAgICAgICAvKiBDWk0gWmVyb2VzIENvdW50ZXIgSW50ZXJydXB0IElkZW50aWZpZXIgKi8KLQotLyogQml0IG1hc2tzIGZvciBDTlRfQ09NTUFORCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBXMUxDTlQgIDB4ZiAgICAgICAgLyogTG9hZCBDb3VudGVyIFJlZ2lzdGVyICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBXMUxNSU4gIDB4ZjAgICAgICAgLyogTG9hZCBNaW4gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIFcxTE1BWCAgMHhmMDAgICAgICAvKiBMb2FkIE1heCBSZWdpc3RlciAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgIFcxWk1PTkNFICAweDEwMDAgICAgIC8qIEVuYWJsZSBDWk0gQ2xlYXIgQ291bnRlciBPbmNlICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgQ05UX0RFQk9VTkNFICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgICAgIERQUkVTQ0FMRSAgMHhmICAgICAgICAvKiBMb2FkIENvdW50ZXIgUmVnaXN0ZXIgKi8KLQogLyogQml0IG1hc2tzIGZvciBTRUNVUkVfU1lTU1dUICovCiAKICNkZWZpbmUgICAgICAgICAgICAgICAgICAgRU1VREFCTCAgMHgxICAgICAgICAvKiBFbXVsYXRpb24gRGlzYWJsZS4gKi8KQEAgLTIwNDQsNjYgKzE5OTMsNiBAQAogI2RlZmluZSAgICAgICAgICAgICAgICBSRVNFVF9XRE9HIDB4NDAwMCAgICAgICAvKiBTVyBSZXNldCBHZW5lcmF0ZWQgQnkgV2F0Y2hkb2cgVGltZXIgKi8KICNkZWZpbmUgICAgICAgICAgICBSRVNFVF9TT0ZUV0FSRSAweDgwMDAgICAgICAgLyogU1cgUmVzZXQgT2NjdXJyZWQgU2luY2UgTGFzdCBSZWFkIE9mIFNXUlNUICovCiAKLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0NUTCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBXUl9ETFkgIDB4ZiAgICAgICAgLyogV3JpdGUgU3Ryb2JlIERlbGF5ICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICBSRF9ETFkgIDB4ZjAgICAgICAgLyogUmVhZCBTdHJvYmUgRGVsYXkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgIE5XSURUSCAgMHgxMDAgICAgICAvKiBOQU5EIERhdGEgV2lkdGggKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgUEdfU0laRSAgMHgyMDAgICAgICAvKiBQYWdlIFNpemUgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfU1RBVCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgTkJVU1kgIDB4MSAgICAgICAgLyogTm90IEJ1c3kgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgICAgV0JfRlVMTCAgMHgyICAgICAgICAvKiBXcml0ZSBCdWZmZXIgRnVsbCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQR19XUl9TVEFUICAweDQgICAgICAgIC8qIFBhZ2UgV3JpdGUgUGVuZGluZyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBQR19SRF9TVEFUICAweDggICAgICAgIC8qIFBhZ2UgUmVhZCBQZW5kaW5nICovCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgV0JfRU1QVFkgIDB4MTAgICAgICAgLyogV3JpdGUgQnVmZmVyIEVtcHR5ICovCi0KLS8qIEJpdCBtYXNrcyBmb3IgTkZDX0lSUVNUQVQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgIE5CVVNZSVJRICAweDEgICAgICAgIC8qIE5vdCBCdXN5IElSUSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgV0JfT1ZGICAweDIgICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBPdmVyZmxvdyAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBXQl9FREdFICAweDQgICAgICAgIC8qIFdyaXRlIEJ1ZmZlciBFZGdlIERldGVjdCAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUkRfUkRZICAweDggICAgICAgIC8qIFJlYWQgRGF0YSBSZWFkeSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICAgICBXUl9ET05FICAweDEwICAgICAgIC8qIFBhZ2UgV3JpdGUgRG9uZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE5GQ19JUlFNQVNLICovCi0KLSNkZWZpbmUgICAgICAgICAgICAgIE1BU0tfQlVTWUlSUSAgMHgxICAgICAgICAvKiBNYXNrIE5vdCBCdXN5IElSUSAqLwotI2RlZmluZSAgICAgICAgICAgICAgICBNQVNLX1dCT1ZGICAweDIgICAgICAgIC8qIE1hc2sgV3JpdGUgQnVmZmVyIE92ZXJmbG93ICovCi0jZGVmaW5lICAgICAgICAgICAgICBNQVNLX1dCRU1QVFkgIDB4NCAgICAgICAgLyogTWFzayBXcml0ZSBCdWZmZXIgRW1wdHkgKi8KLSNkZWZpbmUgICAgICAgICAgICAgICAgTUFTS19SRFJEWSAgMHg4ICAgICAgICAvKiBNYXNrIFJlYWQgRGF0YSBSZWFkeSAqLwotI2RlZmluZSAgICAgICAgICAgICAgIE1BU0tfV1JET05FICAweDEwICAgICAgIC8qIE1hc2sgV3JpdGUgRG9uZSAqLwotCi0vKiBCaXQgbWFza3MgZm9yIE5GQ19SU1QgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICBFQ0NfUlNUICAweDEgICAgICAgIC8qIEVDQyAoYW5kIE5GQyBjb3VudGVycykgUmVzZXQgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfUEdDVEwgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgIFBHX1JEX1NUQVJUICAweDEgICAgICAgIC8qIFBhZ2UgUmVhZCBTdGFydCAqLwotI2RlZmluZSAgICAgICAgICAgICAgIFBHX1dSX1NUQVJUICAweDIgICAgICAgIC8qIFBhZ2UgV3JpdGUgU3RhcnQgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfRUNDMCAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzAgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDAgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfRUNDMSAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzEgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDEgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfRUNDMiAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzIgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDIgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfRUNDMyAqLwotCi0jZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIEVDQzMgIDB4N2ZmICAgICAgLyogUGFyaXR5IENhbGN1bGF0aW9uIFJlc3VsdDMgKi8KLQotLyogQml0IG1hc2tzIGZvciBORkNfQ09VTlQgKi8KLQotI2RlZmluZSAgICAgICAgICAgICAgICAgICAgRUNDQ05UICAweDNmZiAgICAgIC8qIFRyYW5zZmVyIENvdW50ICovCi0KIC8qIEJpdCBtYXNrcyBmb3IgRVBQSXhfU1RBVFVTICovCiAKICNkZWZpbmUgICAgICAgICAgICAgICAgIENGSUZPX0VSUiAgMHgxICAgICAgICAvKiBDaHJvbWEgRklGTyBFcnJvciAqLwpAQCAtMjQ3MiwzMyArMjM2MSw2IEBACiAjZGVmaW5lIEJDT0RFX1FVSUNLQk9PVCAweDAwMjAgIC8qIGFsd2F5cyBwZXJmb3JtIHF1aWNrIGJvb3QgKi8KICNkZWZpbmUgQkNPREVfTk9CT09UICAgIDB4MDAzMCAgLyogYWx3YXlzIHBlcmZvcm0gZnVsbCBib290ICovCiAKLS8qIENOVF9DT01NQU5EIGJpdCBmaWVsZCBvcHRpb25zICovCi0KLSNkZWZpbmUgVzFMQ05UX1pFUk8gICAweDAwMDEgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX0NPVU5URVIgd2l0aCB6ZXJvICovCi0jZGVmaW5lIFcxTENOVF9NSU4gICAgMHgwMDA0ICAgLyogd3JpdGUgMSB0byBsb2FkIENOVF9DT1VOVEVSIGZyb20gQ05UX01JTiAqLwotI2RlZmluZSBXMUxDTlRfTUFYICAgIDB4MDAwOCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfQ09VTlRFUiBmcm9tIENOVF9NQVggKi8KLQotI2RlZmluZSBXMUxNSU5fWkVSTyAgIDB4MDAxMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIHdpdGggemVybyAqLwotI2RlZmluZSBXMUxNSU5fQ05UICAgIDB4MDAyMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUlOIGZyb20gQ05UX0NPVU5URVIgKi8KLSNkZWZpbmUgVzFMTUlOX01BWCAgICAweDAwODAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01JTiBmcm9tIENOVF9NQVggKi8KLQotI2RlZmluZSBXMUxNQVhfWkVSTyAgIDB4MDEwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIHdpdGggemVybyAqLwotI2RlZmluZSBXMUxNQVhfQ05UICAgIDB4MDIwMCAgIC8qIHdyaXRlIDEgdG8gbG9hZCBDTlRfTUFYIGZyb20gQ05UX0NPVU5URVIgKi8KLSNkZWZpbmUgVzFMTUFYX01JTiAgICAweDA0MDAgICAvKiB3cml0ZSAxIHRvIGxvYWQgQ05UX01BWCBmcm9tIENOVF9NSU4gKi8KLQotLyogQ05UX0NPTkZJRyBiaXQgZmllbGQgb3B0aW9ucyAqLwotCi0jZGVmaW5lIENOVE1PREVfUVVBREVOQyAgMHgwMDAwICAvKiBxdWFkcmF0dXJlIGVuY29kZXIgbW9kZSAqLwotI2RlZmluZSBDTlRNT0RFX0JJTkVOQyAgIDB4MDEwMCAgLyogYmluYXJ5IGVuY29kZXIgbW9kZSAqLwotI2RlZmluZSBDTlRNT0RFX1VEQ05UICAgIDB4MDIwMCAgLyogdXAvZG93biBjb3VudGVyIG1vZGUgKi8KLSNkZWZpbmUgQ05UTU9ERV9ESVJDTlQgICAweDA0MDAgIC8qIGRpcmVjdGlvbiBjb3VudGVyIG1vZGUgKi8KLSNkZWZpbmUgQ05UTU9ERV9ESVJUTVIgICAweDA1MDAgIC8qIGRpcmVjdGlvbiB0aW1lciBtb2RlICovCi0KLSNkZWZpbmUgQk5ETU9ERV9DT01QICAgICAweDAwMDAgIC8qIGJvdW5kYXJ5IGNvbXBhcmUgbW9kZSAqLwotI2RlZmluZSBCTkRNT0RFX1pFUk8gICAgIDB4MTAwMCAgLyogYm91bmRhcnkgY29tcGFyZSBhbmQgemVybyBtb2RlICovCi0jZGVmaW5lIEJORE1PREVfQ0FQVCAgICAgMHgyMDAwICAvKiBib3VuZGFyeSBjYXB0dXJlIG1vZGUgKi8KLSNkZWZpbmUgQk5ETU9ERV9BRVhUICAgICAweDMwMDAgIC8qIGJvdW5kYXJ5IGF1dG8tZXh0ZW5kIG1vZGUgKi8KLQogLyogVE1PREUgaW4gVElNRVJ4X0NPTkZJRyBiaXQgZmllbGQgb3B0aW9ucyAqLwogCiAjZGVmaW5lIFBXTV9PVVQgIDB4MDAwMQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA4NTBlMzlkLi4yODAzN2UzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMyw2ICszLDEwIEBACiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAorCisjaWZuZGVmIF9NQUNIX0dQSU9fSF8KKyNkZWZpbmUgX01BQ0hfR1BJT19IXworCiAjZGVmaW5lIEdQSU9fUEEwCTAKICNkZWZpbmUgR1BJT19QQTEJMQogI2RlZmluZSBHUElPX1BBMgkyCkBAIC0xNjYsNiArMTcwLDggQEAKIAogI2RlZmluZSBNQVhfQkxBQ0tGSU5fR1BJT1MgMTYwCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKIHN0cnVjdCBncGlvX3BvcnRfdCB7CiAJdW5zaWduZWQgc2hvcnQgcG9ydF9mZXI7CiAJdW5zaWduZWQgc2hvcnQgZHVtbXkxOwpAQCAtMTkxLDMgKzE5Nyw3IEBACiAJdW5zaWduZWQgc2hvcnQgaW5lbjsKIAl1bnNpZ25lZCBpbnQgbXV4OwogfTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfTUFDSF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDg5YWQ2YTguLmUyMjI0NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTIAlNQVhfQkxBQ0tGSU5fR1BJT1MKKyNkZWZpbmUgTUFYX1JFU09VUkNFUwlNQVhfQkxBQ0tGSU5fR1BJT1MKIAogI2RlZmluZSBQX1NQT1JUMl9URlMJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QQTApIHwgUF9GVU5DVCgwKSkKICNkZWZpbmUgUF9TUE9SVDJfRFRTRUMJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QQTEpIHwgUF9GVU5DVCgwKSkKQEAgLTEzMSw2ICsxMzEsNyBAQAogI2RlZmluZSBQX0tFWV9DT0wyCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEQxNCkgfCBQX0ZVTkNUKDMpKQogI2RlZmluZSBQX0tFWV9DT0wzCShQX0RFRklORUQgfCBQX0lERU5UKEdQSU9fUEQxNSkgfCBQX0ZVTkNUKDMpKQogCisjZGVmaW5lIEdQSU9fREVGQVVMVF9CT09UX1NQSV9DUyBHUElPX1BFNAogI2RlZmluZSBQX0RFRkFVTFRfQk9PVF9TUElfQ1MgUF9TUEkwX1NTRUwxCiAjZGVmaW5lIFBfU1BJMF9TQ0sJKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRTApIHwgUF9GVU5DVCgwKSkKICNkZWZpbmUgUF9TUEkwX01JU08JKFBfREVGSU5FRCB8IFBfSURFTlQoR1BJT19QRTEpIHwgUF9GVU5DVCgwKSkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYW5vbWFseS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKaW5kZXggNWRkYzk4MS4uNGMxMDhjOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9hbm9tYWx5LmgKQEAgLTUsNyArNSw3IEBACiAgKiBhbmQgY2FuIGJlIHJlcGxhY2VkIHdpdGggdGhhdCB2ZXJzaW9uIGF0IGFueSB0aW1lCiAgKiBETyBOT1QgRURJVCBUSElTIEZJTEUKICAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMTAgQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZS4KICAqICAgaHR0cHM6Ly9kb2NzLmJsYWNrZmluLnVjbGludXgub3JnL2Rva3UucGhwP2lkPWFkaV9ic2QKICAqLwpAQCAtMTUyLDggKzE1Miw4IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMTUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIE5NSSBFdmVudCBhdCBCb290IFRpbWUgUmVzdWx0cyBpbiBVbnByZWRpY3RhYmxlIFN0YXRlICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMTkgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKLS8qIERhdGEgQ29ycnVwdGlvbiB3aXRoIENhY2hlZCBFeHRlcm5hbCBNZW1vcnkgYW5kIE5vbi1DYWNoZWQgT24tQ2hpcCBMMiBNZW1vcnkgKi8KLSNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyMCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA1KQorLyogRGF0YSBDb3JydXB0aW9uL0NvcmUgSGFuZyB3aXRoIEwyL0wzIENvbmZpZ3VyZWQgaW4gV3JpdGViYWNrIENhY2hlIE1vZGUgKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDIyMCAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA0KQogLyogSW5jb3JyZWN0IFB1bHNlLVdpZHRoIG9mIFVBUlQgU3RhcnQgQml0ICovCiAjZGVmaW5lIEFOT01BTFlfMDUwMDAyMjUgKF9fU0lMSUNPTl9SRVZJU0lPTl9fIDwgNSkKIC8qIFNjcmF0Y2hwYWQgTWVtb3J5IEJhbmsgUmVhZHMgTWF5IFJldHVybiBJbmNvcnJlY3QgRGF0YSAqLwpAQCAtMjkwLDEwICsyOTAsMTQgQEAKICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ2MSAoMSkKIC8qIEludGVycnVwdGVkIDMyLUJpdCBTUE9SVCBEYXRhIFJlZ2lzdGVyIEFjY2VzcyBSZXN1bHRzIEluIFVuZGVyZmxvdyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwNDczICgxKQotLyogQ29yZSBIYW5nIFdpdGggTDIvTDMgQ29uZmlndXJlZCBpbiBXcml0ZWJhY2sgQ2FjaGUgTW9kZSAqLworLyogUG9zc2libGUgTG9ja3VwIENvbmRpdGlvbiB3aGVtIE1vZGlmeWluZyBQTEwgZnJvbSBFeHRlcm5hbCBNZW1vcnkgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NSAoX19TSUxJQ09OX1JFVklTSU9OX18gPCA0KQogLyogVEVTVFNFVCBJbnN0cnVjdGlvbiBDYW5ub3QgQmUgSW50ZXJydXB0ZWQgKi8KICNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ3NyAoMSkKKy8qIFJlYWRzIG9mIElURVNUX0NPTU1BTkQgYW5kIElURVNUX0RBVEEgUmVnaXN0ZXJzIENhdXNlIENhY2hlIENvcnJ1cHRpb24gKi8KKyNkZWZpbmUgQU5PTUFMWV8wNTAwMDQ4MSAoMSkKKy8qIElGTFVTSCBzdWNrcyBhdCBsaWZlICovCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0OTEgKDEpCiAKIC8qIEFub21hbGllcyB0aGF0IGRvbid0IGV4aXN0IG9uIHRoaXMgcHJvYyAqLwogI2RlZmluZSBBTk9NQUxZXzA1MDAwMTE5ICgwKQpAQCAtMzE5LDUgKzMyMyw2IEBACiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjUgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NjcgKDApCiAjZGVmaW5lIEFOT01BTFlfMDUwMDA0NzQgKDApCisjZGVmaW5lIEFOT01BTFlfMDUwMDA0ODUgKDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBhNjUxYThjLi40ZjhhYTVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtOSw1NCArOSw1NCBAQAogCiAjZGVmaW5lIE1BWF9CTEFDS0ZJTl9HUElPUyA0OAogCi0jZGVmaW5lCUdQSU9fUEYwCTAKLSNkZWZpbmUJR1BJT19QRjEJMQotI2RlZmluZQlHUElPX1BGMgkyCi0jZGVmaW5lCUdQSU9fUEYzCTMKLSNkZWZpbmUJR1BJT19QRjQJNAotI2RlZmluZQlHUElPX1BGNQk1Ci0jZGVmaW5lCUdQSU9fUEY2CTYKLSNkZWZpbmUJR1BJT19QRjcJNwotI2RlZmluZQlHUElPX1BGOAk4Ci0jZGVmaW5lCUdQSU9fUEY5CTkKLSNkZWZpbmUJR1BJT19QRjEwCTEwCi0jZGVmaW5lCUdQSU9fUEYxMQkxMQotI2RlZmluZQlHUElPX1BGMTIJMTIKLSNkZWZpbmUJR1BJT19QRjEzCTEzCi0jZGVmaW5lCUdQSU9fUEYxNAkxNAotI2RlZmluZQlHUElPX1BGMTUJMTUKLSNkZWZpbmUJR1BJT19QRjE2CTE2Ci0jZGVmaW5lCUdQSU9fUEYxNwkxNwotI2RlZmluZQlHUElPX1BGMTgJMTgKLSNkZWZpbmUJR1BJT19QRjE5CTE5Ci0jZGVmaW5lCUdQSU9fUEYyMAkyMAotI2RlZmluZQlHUElPX1BGMjEJMjEKLSNkZWZpbmUJR1BJT19QRjIyCTIyCi0jZGVmaW5lCUdQSU9fUEYyMwkyMwotI2RlZmluZQlHUElPX1BGMjQJMjQKLSNkZWZpbmUJR1BJT19QRjI1CTI1Ci0jZGVmaW5lCUdQSU9fUEYyNgkyNgotI2RlZmluZQlHUElPX1BGMjcJMjcKLSNkZWZpbmUJR1BJT19QRjI4CTI4Ci0jZGVmaW5lCUdQSU9fUEYyOQkyOQotI2RlZmluZQlHUElPX1BGMzAJMzAKLSNkZWZpbmUJR1BJT19QRjMxCTMxCi0jZGVmaW5lCUdQSU9fUEYzMgkzMgotI2RlZmluZQlHUElPX1BGMzMJMzMKLSNkZWZpbmUJR1BJT19QRjM0CTM0Ci0jZGVmaW5lCUdQSU9fUEYzNQkzNQotI2RlZmluZQlHUElPX1BGMzYJMzYKLSNkZWZpbmUJR1BJT19QRjM3CTM3Ci0jZGVmaW5lCUdQSU9fUEYzOAkzOAotI2RlZmluZQlHUElPX1BGMzkJMzkKLSNkZWZpbmUJR1BJT19QRjQwCTQwCi0jZGVmaW5lCUdQSU9fUEY0MQk0MQotI2RlZmluZQlHUElPX1BGNDIJNDIKLSNkZWZpbmUJR1BJT19QRjQzCTQzCi0jZGVmaW5lCUdQSU9fUEY0NAk0NAotI2RlZmluZQlHUElPX1BGNDUJNDUKLSNkZWZpbmUJR1BJT19QRjQ2CTQ2Ci0jZGVmaW5lCUdQSU9fUEY0Nwk0NworI2RlZmluZSBHUElPX1BGMAkwCisjZGVmaW5lIEdQSU9fUEYxCTEKKyNkZWZpbmUgR1BJT19QRjIJMgorI2RlZmluZSBHUElPX1BGMwkzCisjZGVmaW5lIEdQSU9fUEY0CTQKKyNkZWZpbmUgR1BJT19QRjUJNQorI2RlZmluZSBHUElPX1BGNgk2CisjZGVmaW5lIEdQSU9fUEY3CTcKKyNkZWZpbmUgR1BJT19QRjgJOAorI2RlZmluZSBHUElPX1BGOQk5CisjZGVmaW5lIEdQSU9fUEYxMAkxMAorI2RlZmluZSBHUElPX1BGMTEJMTEKKyNkZWZpbmUgR1BJT19QRjEyCTEyCisjZGVmaW5lIEdQSU9fUEYxMwkxMworI2RlZmluZSBHUElPX1BGMTQJMTQKKyNkZWZpbmUgR1BJT19QRjE1CTE1CisjZGVmaW5lIEdQSU9fUEYxNgkxNgorI2RlZmluZSBHUElPX1BGMTcJMTcKKyNkZWZpbmUgR1BJT19QRjE4CTE4CisjZGVmaW5lIEdQSU9fUEYxOQkxOQorI2RlZmluZSBHUElPX1BGMjAJMjAKKyNkZWZpbmUgR1BJT19QRjIxCTIxCisjZGVmaW5lIEdQSU9fUEYyMgkyMgorI2RlZmluZSBHUElPX1BGMjMJMjMKKyNkZWZpbmUgR1BJT19QRjI0CTI0CisjZGVmaW5lIEdQSU9fUEYyNQkyNQorI2RlZmluZSBHUElPX1BGMjYJMjYKKyNkZWZpbmUgR1BJT19QRjI3CTI3CisjZGVmaW5lIEdQSU9fUEYyOAkyOAorI2RlZmluZSBHUElPX1BGMjkJMjkKKyNkZWZpbmUgR1BJT19QRjMwCTMwCisjZGVmaW5lIEdQSU9fUEYzMQkzMQorI2RlZmluZSBHUElPX1BGMzIJMzIKKyNkZWZpbmUgR1BJT19QRjMzCTMzCisjZGVmaW5lIEdQSU9fUEYzNAkzNAorI2RlZmluZSBHUElPX1BGMzUJMzUKKyNkZWZpbmUgR1BJT19QRjM2CTM2CisjZGVmaW5lIEdQSU9fUEYzNwkzNworI2RlZmluZSBHUElPX1BGMzgJMzgKKyNkZWZpbmUgR1BJT19QRjM5CTM5CisjZGVmaW5lIEdQSU9fUEY0MAk0MAorI2RlZmluZSBHUElPX1BGNDEJNDEKKyNkZWZpbmUgR1BJT19QRjQyCTQyCisjZGVmaW5lIEdQSU9fUEY0Mwk0MworI2RlZmluZSBHUElPX1BGNDQJNDQKKyNkZWZpbmUgR1BJT19QRjQ1CTQ1CisjZGVmaW5lIEdQSU9fUEY0Ngk0NgorI2RlZmluZSBHUElPX1BGNDcJNDcKIAogI2RlZmluZSBQT1JUX0ZJTzAgR1BJT18wCiAjZGVmaW5lIFBPUlRfRklPMSBHUElPXzE2CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDNhN2I0NmIuLjIzMzlmZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC03LDcgKzcsNyBAQAogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIAotI2RlZmluZSBNQVhfUkVTT1VSQ0VTIAlNQVhfQkxBQ0tGSU5fR1BJT1MKKyNkZWZpbmUgTUFYX1JFU09VUkNFUwlNQVhfQkxBQ0tGSU5fR1BJT1MKIAogI2RlZmluZSBQX1BQSTBfQ0xLCShQX0RPTlRDQVJFKQogI2RlZmluZSBQX1BQSTBfRlMxCShQX0RPTlRDQVJFKQpAQCAtOTEsNiArOTEsNyBAQAogI2RlZmluZSBQX1NQSTBfTU9TSQkoUF9ET05UQ0FSRSkKICNkZWZpbmUgUF9TUEkwX01JU08JKFBfRE9OVENBUkUpCiAjZGVmaW5lIFBfU1BJMF9TQ0sJKFBfRE9OVENBUkUpCisjZGVmaW5lIEdQSU9fREVGQVVMVF9CT09UX1NQSV9DUyBHUElPX1BGMgogI2RlZmluZSBQX0RFRkFVTFRfQk9PVF9TUElfQ1MgUF9TUEkwX1NTRUwyCiAKICNlbmRpZiAvKiBfTUFDSF9QT1JUTVVYX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKaW5kZXggZjJjYTIxMS4uYmNlYjk4MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCiAgKgotICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwIEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KQEAgLTQ3LDE4ICs0NywyMCBAQAogIyBlcnJvciAiVGhlIGtlcm5lbCBsb2FkIGFkZHJlc3MgaXMgdG9vIGhpZ2g7IGtlZXAgaXQgYmVsb3cgMTBtZWcgZm9yIHNhZmV0eSIKICNlbmRpZgogCisjaWYgQU5PTUFMWV8wNTAwMDI2MyAmJiBkZWZpbmVkKENPTkZJR19NUFUpCisjIGVycm9yIHRoZSBNUFUgd2lsbCBub3QgZnVuY3Rpb24gc2FmZWx5IHdoaWxlIEFub21hbHkgMDUwMDAyNjMgYXBwbGllcworI2VuZGlmCisKICNpZiBBTk9NQUxZXzA1MDAwNDQ4CiAjIGVycm9yIFlvdSBhcmUgdXNpbmcgYSBwYXJ0IHdpdGggYW5vbWFseSAwNTAwMDQ0OCwgdGhpcyBpc3N1ZSBjYXVzZXMgcmFuZG9tIG1lbW9yeSByZWFkL3dyaXRlIGZhaWx1cmVzIC0gdGhhdCBtZWFucyByYW5kb20gY3Jhc2hlcy4KICNlbmRpZgogCiAvKiBpZiAyMjAgZXhpc3RzLCBjYW4gbm90IHNldCBFeHRlcm5hbCBNZW1vcnkgV0IgYW5kIEwyIG5vdF9jYWNoZWQsIGVpdGhlciBFeHRlcm5hbCBNZW1vcnkgbm90X2NhY2hlZCBhbmQgTDIgV0IgKi8KICNpZiBBTk9NQUxZXzA1MDAwMjIwICYmIFwKLQkoKGRlZmluZWQoQ09ORklHX0JGSU5fRVhUTUVNX1dSSVRFQkFDSykgJiYgIWRlZmluZWQoQ09ORklHX0JGSU5fTDJfRENBQ0hFQUJMRSkpIHx8IFwKLQkgKCFkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFKSAmJiBkZWZpbmVkKENPTkZJR19CRklOX0wyX1dSSVRFQkFDSykpKQotIyBlcnJvciBZb3UgYXJlIGV4cG9zaW5nIEFub21hbHkgMjIwIGluIHRoaXMgY29uZmlnLCBlaXRoZXIgY29uZmlnIEwyIGFzIFdyaXRlIFRocm91Z2gsIG9yIG1ha2UgRXh0ZXJuYWwgTWVtb3J5IFdCLgorCShkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9XUklURUJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfV1JJVEVCQUNLKSkKKyMgZXJyb3IgIkFub21hbHkgMDUwMDAyMjAgZG9lcyBub3QgYWxsb3cgeW91IHRvIHVzZSBXcml0ZSBCYWNrIGNhY2hlIHdpdGggTDIgb3IgRXh0ZXJuYWwgTWVtb3J5IgogI2VuZGlmCiAKLSNpZiBBTk9NQUxZXzA1MDAwNDc1ICYmIFwKLQkoZGVmaW5lZChDT05GSUdfQkZJTl9FWFRNRU1fV1JJVEVCQUNLKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX1dSSVRFQkFDSykpCi0jIGVycm9yICJBbm9tYWx5IDQ3NSBkb2VzIG5vdCBhbGxvdyB5b3UgdG8gdXNlIFdyaXRlIEJhY2sgY2FjaGUgd2l0aCBMMiBvciBFeHRlcm5hbCBNZW1vcnkiCisjaWYgQU5PTUFMWV8wNTAwMDQ5MSAmJiAhZGVmaW5lZChDT05GSUdfQ0FDSEVfRkxVU0hfTDEpCisjIGVycm9yIFlvdSBuZWVkIElGTFVTSCBpbiBMMSBpbnN0IHdoaWxlIEFub21hbHkgMDUwMDA0OTEgYXBwbGllcwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggZWE1NDAzMS4uNzkwYzc2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtMTEsNyArMTEsMTEgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCisjaWZkZWYgQ09ORklHX0NBQ0hFX0ZMVVNIX0wxCisuc2VjdGlvbiAubDEudGV4dAorI2Vsc2UKIC50ZXh0CisjZW5kaWYKIAogLyogMDUwMDA0NDMgLSBJRkxVU0ggY2Fubm90IGJlIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gaGFyZHdhcmUgbG9vcCAqLwogI2lmIEFOT01BTFlfMDUwMDA0NDMKQEAgLTY0LDE3ICs2OCw2IEBACiAKIC8qIEludmFsaWRhdGUgYWxsIGluc3RydWN0aW9uIGNhY2hlIGxpbmVzIGFzc29jb2lhdGVkIHdpdGggdGhpcyBtZW1vcnkgYXJlYSAqLwogRU5UUlkoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKLS8qCi0gKiBXYWxrYXJvdW5kIHRvIGF2b2lkIGxvYWRpbmcgd3JvbmcgaW5zdHJ1Y3Rpb24gYWZ0ZXIgaW52YWxpZGF0aW5nIGljYWNoZQotICogYW5kIGZvbGxvd2luZyBzZXF1ZW5jZSBpcyBtZXQuCi0gKgotICogMSkgT25lIGluc3RydWN0aW9uIGFkZHJlc3MgaXMgY2FjaGVkIGluIHRoZSBpbnN0cnVjdGlvbiBjYWNoZS4KLSAqIDIpIFRoaXMgaW5zdHJ1Y3Rpb24gaW4gU0RSQU0gaXMgY2hhbmdlZC4KLSAqIDMpIElGTEFTSFtQMF0gaXMgZXhlY3V0ZWQgb25seSBvbmNlIGluIGJsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSgpLgotICogNCkgVGhpcyBpbnN0cnVjdGlvbiBpcyBleGVjdXRlZCBhZ2FpbiwgYnV0IHRoZSBvbGQgb25lIGlzIGxvYWRlZC4KLSAqLwotCVAwID0gUjA7Ci0JSUZMVVNIW1AwXTsKIAlkb19mbHVzaCBJRkxVU0gKIEVORFBST0MoX2JsYWNrZmluX2ljYWNoZV9mbHVzaF9yYW5nZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jX21vZGVzLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWNfbW9kZXMuUwppbmRleCBiMDM3MTY4Li41OTY5ZDg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWNfbW9kZXMuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2RwbWNfbW9kZXMuUwpAQCAtMTcsOSArMTcsNiBAQAogCiAJY2FsbCBfc2V0X3NpY19pd3I7CiAKLQlSMCA9IDB4RkZGRiAoWik7Ci0JY2FsbCBfc2V0X3J0Y19pc3RhdDsKLQogCVAwLkggPSBoaShQTExfQ1RMKTsKIAlQMC5MID0gbG8oUExMX0NUTCk7CiAJUjEgPSBXW1AwXSh6KTsKQEAgLTY1LDkgKzYyLDYgQEAKIAljYWxsIF9zZXRfZHJhbV9zcmZzOwogCVNTWU5DOwogCi0JUjAgPSAweEZGRkYgKFopOwotCWNhbGwgX3NldF9ydGNfaXN0YXQ7Ci0KIAlQMC5IID0gaGkoVlJfQ1RMKTsKIAlQMC5MID0gbG8oVlJfQ1RMKTsKIApAQCAtOTUsOSArODksNiBAQAogCWNhbGwgX3NldF9zaWNfaXdyOwogCWNhbGwgX3NldF9kcmFtX3NyZnM7CS8qIFNldCBTRFJBTSBTZWxmIFJlZnJlc2ggKi8KIAotCS8qIENsZWFyIGFsbCB0aGUgaW50ZXJydXB0cyxiaXRzIHN0aWNreSAqLwotCVIwID0gMHhGRkZGIChaKTsKLQljYWxsIF9zZXRfcnRjX2lzdGF0OwogCVAwLkggPSBoaShQTExfRElWKTsKIAlQMC5MID0gbG8oUExMX0RJVik7CiAJUjYgPSBXW1AwXSh6KTsKQEAgLTI2OSwyMSArMjYwLDYgQEAKIAlSVFM7CiBFTkRQUk9DKF9zZXRfc2ljX2l3cikKIAotRU5UUlkoX3NldF9ydGNfaXN0YXQpCi0jaWZuZGVmIENPTkZJR19CRjU2MQotCVAwLkggPSBoaShSVENfSVNUQVQpOwotCVAwLkwgPSBsbyhSVENfSVNUQVQpOwotCXdbUDBdID0gUjAuTDsKLQlTU1lOQzsKLSNlbGlmIChBTk9NQUxZXzA1MDAwMzcxKQotCW5vcDsKLQlub3A7Ci0Jbm9wOwotCW5vcDsKLSNlbmRpZgotCVJUUzsKLUVORFBST0MoX3NldF9ydGNfaXN0YXQpCi0KIEVOVFJZKF90ZXN0X3BsbF9sb2NrZWQpCiAJUDAuSCA9IGhpKFBMTF9TVEFUKTsKIAlQMC5MID0gbG8oUExMX1NUQVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCmluZGV4IGVhN2Y5NWYuLjA5YzFmYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKQEAgLTYxLDEwICs2MSwxMSBAQAogCiBpbnQgYmY1M3hfc3VzcGVuZF9sMV9tZW0odW5zaWduZWQgY2hhciAqbWVtcHRyKQogewotCWRtYV9tZW1jcHkobWVtcHRyLCAoY29uc3Qgdm9pZCAqKSBMMV9DT0RFX1NUQVJULCBMMV9DT0RFX0xFTkdUSCk7Ci0JZG1hX21lbWNweShtZW1wdHIgKyBMMV9DT0RFX0xFTkdUSCwgKGNvbnN0IHZvaWQgKikgTDFfREFUQV9BX1NUQVJULAotCQkJTDFfREFUQV9BX0xFTkdUSCk7Ci0JZG1hX21lbWNweShtZW1wdHIgKyBMMV9DT0RFX0xFTkdUSCArIEwxX0RBVEFfQV9MRU5HVEgsCisJZG1hX21lbWNweV9ub2NhY2hlKG1lbXB0ciwgKGNvbnN0IHZvaWQgKikgTDFfQ09ERV9TVEFSVCwKKwkJCUwxX0NPREVfTEVOR1RIKTsKKwlkbWFfbWVtY3B5X25vY2FjaGUobWVtcHRyICsgTDFfQ09ERV9MRU5HVEgsCisJCQkoY29uc3Qgdm9pZCAqKSBMMV9EQVRBX0FfU1RBUlQsIEwxX0RBVEFfQV9MRU5HVEgpOworCWRtYV9tZW1jcHlfbm9jYWNoZShtZW1wdHIgKyBMMV9DT0RFX0xFTkdUSCArIEwxX0RBVEFfQV9MRU5HVEgsCiAJCQkoY29uc3Qgdm9pZCAqKSBMMV9EQVRBX0JfU1RBUlQsIEwxX0RBVEFfQl9MRU5HVEgpOwogCW1lbWNweShtZW1wdHIgKyBMMV9DT0RFX0xFTkdUSCArIEwxX0RBVEFfQV9MRU5HVEggKwogCQkJTDFfREFUQV9CX0xFTkdUSCwgKGNvbnN0IHZvaWQgKikgTDFfU0NSQVRDSF9TVEFSVCwKQEAgLTc1LDEwICs3NiwxMCBAQAogCiBpbnQgYmY1M3hfcmVzdW1lX2wxX21lbSh1bnNpZ25lZCBjaGFyICptZW1wdHIpCiB7Ci0JZG1hX21lbWNweSgodm9pZCAqKSBMMV9DT0RFX1NUQVJULCBtZW1wdHIsIEwxX0NPREVfTEVOR1RIKTsKLQlkbWFfbWVtY3B5KCh2b2lkICopIEwxX0RBVEFfQV9TVEFSVCwgbWVtcHRyICsgTDFfQ09ERV9MRU5HVEgsCisJZG1hX21lbWNweV9ub2NhY2hlKCh2b2lkICopIEwxX0NPREVfU1RBUlQsIG1lbXB0ciwgTDFfQ09ERV9MRU5HVEgpOworCWRtYV9tZW1jcHlfbm9jYWNoZSgodm9pZCAqKSBMMV9EQVRBX0FfU1RBUlQsIG1lbXB0ciArIEwxX0NPREVfTEVOR1RILAogCQkJTDFfREFUQV9BX0xFTkdUSCk7Ci0JZG1hX21lbWNweSgodm9pZCAqKSBMMV9EQVRBX0JfU1RBUlQsIG1lbXB0ciArIEwxX0NPREVfTEVOR1RIICsKKwlkbWFfbWVtY3B5X25vY2FjaGUoKHZvaWQgKikgTDFfREFUQV9CX1NUQVJULCBtZW1wdHIgKyBMMV9DT0RFX0xFTkdUSCArCiAJCQlMMV9EQVRBX0FfTEVOR1RILCBMMV9EQVRBX0JfTEVOR1RIKTsKIAltZW1jcHkoKHZvaWQgKikgTDFfU0NSQVRDSF9TVEFSVCwgbWVtcHRyICsgTDFfQ09ERV9MRU5HVEggKwogCQkJTDFfREFUQV9BX0xFTkdUSCArIEwxX0RBVEFfQl9MRU5HVEgsIEwxX1NDUkFUQ0hfTEVOR1RIKTsKQEAgLTE2Nyw3ICsxNjgsNyBAQAogCV9kaXNhYmxlX2ljcGxiKCk7CiAJYmY1M3hfc3VzcGVuZF9sMV9tZW0obWVtcHRyKTsKIAotCWRvX2hpYmVybmF0ZSh3YWtldXAgfCB2cl93YWtldXApOwkvKiBHb29kYnllICovCisJZG9faGliZXJuYXRlKHdha2V1cCB8IHZyX3dha2V1cCk7CS8qIFNlZSB5b3UgbGF0ZXIhICovCiAKIAliZjUzeF9yZXN1bWVfbDFfbWVtKG1lbXB0cik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggZTI1YmY0NC4uYWVmZTNiMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTIwLDE0ICsyMCwxMSBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbAogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTU9TX1VQREFURQogCWRlZl9ib29sIHkKIAogY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCi0JZGVmX2Jvb2wgeQorCWRlZl9ib29sIG4KIAogY29uZmlnIEdFTkVSSUNfSU9NQVAKICAgICAgICBib29sCkBAIC0xMzEsMTYgKzEyOCwxOSBAQAogCiBjb25maWcgRVRSQVgxMDBMWAogCWJvb2wgIkVUUkFYLTEwMExYLXYxIgorCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWhlbHAKIAkgIFN1cHBvcnQgdmVyc2lvbiAxIG9mIHRoZSBFVFJBWCAxMDBMWC4KIAogY29uZmlnIEVUUkFYMTAwTFhfVjIKIAlib29sICJFVFJBWC0xMDBMWC12MiIKKwlzZWxlY3QgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAloZWxwCiAJICBTdXBwb3J0IHZlcnNpb24gMiBvZiB0aGUgRVRSQVggMTAwTFguCiAKIGNvbmZpZyBTVklOVE9fU0lNCiAJYm9vbCAiRVRSQVgtMTAwTFgtZm9yLXhzaW0tc2ltdWxhdG9yIgorCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWhlbHAKIAkgIFN1cHBvcnQgdGhlIHhzaW0gRVRSQVggU2ltdWxhdG9yLgogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvY3Jpcy9LY29uZmlnLmRlYnVnCmluZGV4IDBhMWQ2MmEuLjBiOWE2MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnLmRlYnVnCkBAIC0zMiw0ICszMiwxMCBAQAogCSAgSWYgdGhlIHN5c3RlbSBsb2NrcyB1cCB3aXRob3V0IGFueSBkZWJ1ZyBpbmZvcm1hdGlvbiB5b3UgY2FuIHNheSBZCiAJICBoZXJlIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gZHVtcCBhbiBPT1BTIHdpdGggYW4gZXh0ZXJuYWwgTk1JLgogCitjb25maWcgTk9fU0VHRkFVTFRfVEVSTUlOQVRJT04KKwlib29sICJLZWVwIHNlZ2ZhdWx0aW5nIHByb2Nlc3NlcyIKKwloZWxwCisJICBQbGFjZSBzZWdmYXVsdGluZyB1c2VyIG1vZGUgcHJvY2Vzc2VzIG9uIGEgd2FpdCBxdWV1ZSBpbnN0ZWFkIG9mCisJICBkZWxpdmVyaW5nIGEgdGVybWluYXRpbmcgU0lHU0VHViB0byBhbGxvdyBkZWJ1Z2dpbmcgd2l0aCBnZGIuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL0tjb25maWcgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9LY29uZmlnCmluZGV4IDU4ZjU4NjQuLjBkNzIyMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvS2NvbmZpZwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJZGVwZW5kcyBvbiBFVFJBWF9TRVJJQUwKIAloZWxwCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIFJTLTQ4NSBzZXJpYWwgY29tbXVuaWNhdGlvbi4gIEZvciBhIHByaW1lciBvbgotCSAgUlMtNDg1LCBzZWUgPGh0dHA6Ly93d3cuaHcuY3ovZW5nbGlzaC9kb2NzL3JzNDg1L3JzNDg1Lmh0bWw+LgorCSAgUlMtNDg1LCBzZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUnM0ODU+CiAKIGNvbmZpZyBFVFJBWF9SUzQ4NV9PTl9QQQogCWJvb2wgIlJTLTQ4NSBtb2RlIG9uIFBBIgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZWVwcm9tLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9lZXByb20uYwppbmRleCBjMzQwNTUwLi41MDQ3YTMzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9lZXByb20uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9lZXByb20uYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaTJjLmgiCkBAIC0zNzYsNyArMzc1LDYgQEAKIC8qIE9wZW5zIHRoZSBkZXZpY2UuICovCiBzdGF0aWMgaW50IGVlcHJvbV9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0gIGN5Y2xlX2tlcm5lbF9sb2NrKCk7CiAgIGlmKGltaW5vcihpbm9kZSkgIT0gRUVQUk9NX01JTk9SX05SKQogICAgICByZXR1cm4gLUVOWElPOwogICBpZihpbWFqb3IoaW5vZGUpICE9IEVFUFJPTV9NQUpPUl9OUikKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2dwaW8uYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2dwaW8uYwppbmRleCA0YjBmNjVmLi5hMDdiNmQyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvZ3Bpby5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQ2LDggKzQ1LDcgQEAKIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCAqZ3Bpb193cTsKICNlbmRpZgogCi1zdGF0aWMgaW50IGdwaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGxvbmcgZ3Bpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHNzaXplX3QgZ3Bpb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKTsKIHN0YXRpYyBpbnQgZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKQEAgLTMyNCw3ICszMjIsNiBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsb2NrX2tlcm5lbCgpOwogCXByaXYtPm1pbm9yID0gcDsKIAogCS8qIGluaXRpYWxpemUgdGhlIGlvL2FsYXJtIHN0cnVjdCAqLwpAQCAtMzU5LDcgKzM1Niw2IEBACiAJYWxhcm1saXN0ID0gcHJpdjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTA0LDkgKzUwMCw3IEBACiBzdGF0aWMgaW50CiBncGlvX2xlZHNfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi1zdGF0aWMgaW50Ci1ncGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCSAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgZ3Bpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTUxNiw1NCArNTEwLDY1IEBACiAJaWYgKF9JT0NfVFlQRShjbWQpICE9IEVUUkFYR1BJT19JT0NUWVBFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQogCXN3aXRjaCAoX0lPQ19OUihjbWQpKSB7CiAJY2FzZSBJT19SRUFEQklUUzogLyogVXNlIElPX1JFQURfSU5CSVRTIGFuZCBJT19SRUFEX09VVEJJVFMgaW5zdGVhZCAqLwogCQkvLyByZWFkIHRoZSBwb3J0CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKFVTRV9QT1JUUyhwcml2KSkgewogCQkJcmV0ID0gICpwcml2LT5wb3J0OwogCQl9IGVsc2UgaWYgKHByaXYtPm1pbm9yID09IEdQSU9fTUlOT1JfRykgewogCQkJcmV0ID0gICgqUl9QT1JUX0dfREFUQSkgJiAweDdGRkZGRkZGOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCiAJCWJyZWFrOwogCWNhc2UgSU9fU0VUQklUUzoKIAkJLy8gc2V0IGNoYW5nZWFibGUgYml0cyB3aXRoIGEgMSBpbiBhcmcKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCiAJCWlmIChVU0VfUE9SVFMocHJpdikpIHsKLQkJCSpwcml2LT5wb3J0ID0gKnByaXYtPnNoYWRvdyB8PSAKKwkJCSpwcml2LT5wb3J0ID0gKnByaXYtPnNoYWRvdyB8PQogCQkJICAoKHVuc2lnbmVkIGNoYXIpYXJnICYgcHJpdi0+Y2hhbmdlYWJsZV9iaXRzKTsKIAkJfSBlbHNlIGlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0cpIHsKIAkJCSpSX1BPUlRfR19EQVRBID0gcG9ydF9nX2RhdGFfc2hhZG93IHw9IChhcmcgJiBkaXJfZ19vdXRfYml0cyk7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisKIAkJYnJlYWs7CiAJY2FzZSBJT19DTFJCSVRTOgogCQkvLyBjbGVhciBjaGFuZ2VhYmxlIGJpdHMgd2l0aCBhIDEgaW4gYXJnCisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKFVTRV9QT1JUUyhwcml2KSkgewotCQkJKnByaXYtPnBvcnQgPSAqcHJpdi0+c2hhZG93ICY9IAorCQkJKnByaXYtPnBvcnQgPSAqcHJpdi0+c2hhZG93ICY9CiAJCQkgfigodW5zaWduZWQgY2hhcilhcmcgJiBwcml2LT5jaGFuZ2VhYmxlX2JpdHMpOwogCQl9IGVsc2UgaWYgKHByaXYtPm1pbm9yID09IEdQSU9fTUlOT1JfRykgewogCQkJKlJfUE9SVF9HX0RBVEEgPSBwb3J0X2dfZGF0YV9zaGFkb3cgJj0gfigodW5zaWduZWQgbG9uZylhcmcgJiBkaXJfZ19vdXRfYml0cyk7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgSU9fSElHSEFMQVJNOgogCQkvLyBzZXQgYWxhcm0gd2hlbiBiaXRzIHdpdGggMSBpbiBhcmcgZ28gaGlnaAorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCXByaXYtPmhpZ2hhbGFybSB8PSBhcmc7CiAJCWdwaW9fc29tZV9hbGFybXMgPSAxOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBJT19MT1dBTEFSTToKIAkJLy8gc2V0IGFsYXJtIHdoZW4gYml0cyB3aXRoIDEgaW4gYXJnIGdvIGxvdworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCXByaXYtPmxvd2FsYXJtIHw9IGFyZzsKIAkJZ3Bpb19zb21lX2FsYXJtcyA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElPX0NMUkFMQVJNOgotCQkvLyBjbGVhciBhbGFybSBmb3IgYml0cyB3aXRoIDEgaW4gYXJnCisJCS8qIGNsZWFyIGFsYXJtIGZvciBiaXRzIHdpdGggMSBpbiBhcmcgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlwcml2LT5oaWdoYWxhcm0gJj0gfmFyZzsKIAkJcHJpdi0+bG93YWxhcm0gICY9IH5hcmc7CiAJCXsKIAkJCS8qIE11c3QgdXBkYXRlIGdwaW9fc29tZV9hbGFybXMgKi8KIAkJCXN0cnVjdCBncGlvX3ByaXZhdGUgKnAgPSBhbGFybWxpc3Q7CiAJCQlpbnQgc29tZV9hbGFybXM7Ci0JCQlzcGluX2xvY2tfaXJxKCZncGlvX2xvY2spOwogCQkJcCA9IGFsYXJtbGlzdDsKIAkJCXNvbWVfYWxhcm1zID0gMDsKIAkJCXdoaWxlIChwKSB7CkBAIC01NzQsMTEgKzU3OSwxMiBAQAogCQkJCXAgPSBwLT5uZXh0OwogCQkJfQogCQkJZ3Bpb19zb21lX2FsYXJtcyA9IHNvbWVfYWxhcm1zOwotCQkJc3Bpbl91bmxvY2tfaXJxKCZncGlvX2xvY2spOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElPX1JFQURESVI6IC8qIFVzZSBJT19TRVRHRVRfSU5QVVQvT1VUUFVUIGluc3RlYWQhICovCiAJCS8qIFJlYWQgZGlyZWN0aW9uIDA9aW5wdXQgMT1vdXRwdXQgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlpZiAoVVNFX1BPUlRTKHByaXYpKSB7CiAJCQlyZXQgPSAqcHJpdi0+ZGlyX3NoYWRvdzsKIAkJfSBlbHNlIGlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0cpIHsKQEAgLTU4NywzMCArNTkzLDQwIEBACiAJCQkgKi8KIAkJCXJldCA9IChkaXJfZ19zaGFkb3cgfCBkaXJfZ19vdXRfYml0cykgJiAweDdGRkZGRkZGOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElPX1NFVElOUFVUOiAvKiBVc2UgSU9fU0VUR0VUX0lOUFVUIGluc3RlYWQhICovCi0JCS8qIFNldCBkaXJlY3Rpb24gMD11bmNoYW5nZWQgMT1pbnB1dCwgCi0JCSAqIHJldHVybiBtYXNrIHdpdGggMT1pbnB1dCAKKwkJLyogU2V0IGRpcmVjdGlvbiAwPXVuY2hhbmdlZCAxPWlucHV0LAorCQkgKiByZXR1cm4gbWFzayB3aXRoIDE9aW5wdXQKIAkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJcmV0ID0gc2V0Z2V0X2lucHV0KHByaXYsIGFyZykgJiAweDdGRkZGRkZGOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBJT19TRVRPVVRQVVQ6IC8qIFVzZSBJT19TRVRHRVRfT1VUUFVUIGluc3RlYWQhICovCi0JCS8qIFNldCBkaXJlY3Rpb24gMD11bmNoYW5nZWQgMT1vdXRwdXQsIAotCQkgKiByZXR1cm4gbWFzayB3aXRoIDE9b3V0cHV0IAorCQkvKiBTZXQgZGlyZWN0aW9uIDA9dW5jaGFuZ2VkIDE9b3V0cHV0LAorCQkgKiByZXR1cm4gbWFzayB3aXRoIDE9b3V0cHV0CiAJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCXJldCA9ICBzZXRnZXRfb3V0cHV0KHByaXYsIGFyZykgJiAweDdGRkZGRkZGOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBJT19TSFVURE9XTjoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlTT0ZUX1NIVVRET1dOKCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIElPX0dFVF9QV1JfQlQ6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKICNpZiBkZWZpbmVkIChDT05GSUdfRVRSQVhfU09GVF9TSFVURE9XTikKIAkJcmV0ID0gKCpSX1BPUlRfR19EQVRBICYgKCAxIDw8IENPTkZJR19FVFJBWF9QT1dFUkJVVFRPTl9CSVQpKTsKICNlbHNlCiAJCXJldCA9IDA7CiAjZW5kaWYKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgSU9fQ0ZHX1dSSVRFX01PREU6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJcHJpdi0+Y2xrX21hc2sgPSBhcmcgJiAweEZGOwogCQlwcml2LT5kYXRhX21hc2sgPSAoYXJnID4+IDgpICYgMHhGRjsKIAkJcHJpdi0+d3JpdGVfbXNiID0gKGFyZyA+PiAxNikgJiAweDAxOwpAQCAtNjI2LDI4ICs2NDIsMzMgQEAKIAkJCXByaXYtPmRhdGFfbWFzayA9IDA7CiAJCQlyZXQgPSAtRVBFUk07CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwotCWNhc2UgSU9fUkVBRF9JTkJJVFM6IAorCWNhc2UgSU9fUkVBRF9JTkJJVFM6CiAJCS8qICphcmcgaXMgcmVzdWx0IG9mIHJlYWRpbmcgdGhlIGlucHV0IHBpbnMgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlpZiAoVVNFX1BPUlRTKHByaXYpKSB7CiAJCQl2YWwgPSAqcHJpdi0+cG9ydDsKIAkJfSBlbHNlIGlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0cpIHsKIAkJCXZhbCA9ICpSX1BPUlRfR19EQVRBOwogCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnZhbCwgc2l6ZW9mKHZhbCkpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBJT19SRUFEX09VVEJJVFM6CiAJCSAvKiAqYXJnIGlzIHJlc3VsdCBvZiByZWFkaW5nIHRoZSBvdXRwdXQgc2hhZG93ICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKFVTRV9QT1JUUyhwcml2KSkgewogCQkJdmFsID0gKnByaXYtPnNoYWRvdzsKIAkJfSBlbHNlIGlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0cpIHsKIAkJCXZhbCA9IHBvcnRfZ19kYXRhX3NoYWRvdzsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2YWwsIHNpemVvZih2YWwpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwotCWNhc2UgSU9fU0VUR0VUX0lOUFVUOiAKKwljYXNlIElPX1NFVEdFVF9JTlBVVDoKIAkJLyogYml0cyBzZXQgaW4gKmFyZyBpcyBzZXQgdG8gaW5wdXQsCiAJCSAqICphcmcgdXBkYXRlZCB3aXRoIGN1cnJlbnQgaW5wdXQgcGlucy4KIAkJICovCkBAIC02NTYsNyArNjc3LDkgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCXZhbCA9IHNldGdldF9pbnB1dChwcml2LCB2YWwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2YWwsIHNpemVvZih2YWwpKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwpAQCAtNjY4LDE4ICs2OTEsMjEgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCXZhbCA9IHNldGdldF9vdXRwdXQocHJpdiwgdmFsKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdmFsLCBzaXplb2YodmFsKSkpCiAJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCWlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0xFRFMpCiAJCQlyZXQgPSBncGlvX2xlZHNfaW9jdGwoY21kLCBhcmcpOwogCQllbHNlCiAJCQlyZXQgPSAtRUlOVkFMOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAl9IC8qIHN3aXRjaCAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzEzLDEyICs3MzksMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0gewotCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAotCS5wb2xsICAgICAgICA9IGdwaW9fcG9sbCwKLQkuaW9jdGwgICAgICAgPSBncGlvX2lvY3RsLAotCS53cml0ZSAgICAgICA9IGdwaW9fd3JpdGUsCi0JLm9wZW4gICAgICAgID0gZ3Bpb19vcGVuLAotCS5yZWxlYXNlICAgICA9IGdwaW9fcmVsZWFzZSwKKwkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkucG9sbCAgICAgICAgICAgPSBncGlvX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsID0gZ3Bpb19pb2N0bCwKKwkud3JpdGUgICAgICAgICAgPSBncGlvX3dyaXRlLAorCS5vcGVuICAgICAgICAgICA9IGdwaW9fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBncGlvX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgdm9pZCBpb2lmX3dhdGNoZXIoY29uc3QgdW5zaWduZWQgaW50IGdwaW9faW5fYXZhaWxhYmxlLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvaTJjLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9pMmMuYwppbmRleCBhODczN2E4Li43N2E5NDE4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9pMmMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9pMmMuYwpAQCAtMTQsNyArMTQsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTYwLDggKzU5LDggQEAKIAogI2RlZmluZSBTREFCSVQgQ09ORklHX0VUUkFYX0kyQ19EQVRBX1BPUlQKICNkZWZpbmUgU0NMQklUIENPTkZJR19FVFJBWF9JMkNfQ0xLX1BPUlQKLSNkZWZpbmUgaTJjX2VuYWJsZSgpIAotI2RlZmluZSBpMmNfZGlzYWJsZSgpIAorI2RlZmluZSBpMmNfZW5hYmxlKCkKKyNkZWZpbmUgaTJjX2Rpc2FibGUoKQogCiAvKiBlbmFibGUgb3IgZGlzYWJsZSBvdXRwdXQtZW5hYmxlLCB0byBzZWxlY3Qgb3V0cHV0IG9yIGlucHV0IG9uIHRoZSBpMmMgYnVzICovCiAKQEAgLTkxLDcgKzkwLDcgQEAKIAogI2RlZmluZSBpMmNfZGlyX291dCgpIFwKIAkqUl9QT1JUX1BCX0kyQyA9IChwb3J0X3BiX2kyY19zaGFkb3cgJj0gfklPX01BU0soUl9QT1JUX1BCX0kyQywgaTJjX29lXykpOyBcCi0JUkVHX1NIQURPV19TRVQoUl9QT1JUX1BCX0RJUiwgcG9ydF9wYl9kaXJfc2hhZG93LCAwLCAxKTsgCisJUkVHX1NIQURPV19TRVQoUl9QT1JUX1BCX0RJUiwgcG9ydF9wYl9kaXJfc2hhZG93LCAwLCAxKTsKICNkZWZpbmUgaTJjX2Rpcl9pbigpIFwKIAkqUl9QT1JUX1BCX0kyQyA9IChwb3J0X3BiX2kyY19zaGFkb3cgfD0gSU9fTUFTSyhSX1BPUlRfUEJfSTJDLCBpMmNfb2VfKSk7IFwKIAlSRUdfU0hBRE9XX1NFVChSX1BPUlRfUEJfRElSLCBwb3J0X3BiX2Rpcl9zaGFkb3csIDAsIDApOwpAQCAtMTg5LDcgKzE4OCw3IEBACiAJCX0gZWxzZSB7CiAJCQlpMmNfZGF0YShJMkNfREFUQV9MT1cpOwogCQl9Ci0JCQorCiAJCWkyY19kZWxheShDTE9DS19MT1dfVElNRS8yKTsKIAkJaTJjX2NsayhJMkNfQ0xPQ0tfSElHSCk7CiAJCWkyY19kZWxheShDTE9DS19ISUdIX1RJTUUpOwpAQCAtNDE2LDcgKzQxNSw3IEBACiAqIwogKiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQKLWkyY193cml0ZXJlZyh1bnNpZ25lZCBjaGFyIHRoZVNsYXZlLCB1bnNpZ25lZCBjaGFyIHRoZVJlZywgCitpMmNfd3JpdGVyZWcodW5zaWduZWQgY2hhciB0aGVTbGF2ZSwgdW5zaWduZWQgY2hhciB0aGVSZWcsCiAJICAgICB1bnNpZ25lZCBjaGFyIHRoZVZhbHVlKQogewogCWludCBlcnJvciwgY250ciA9IDM7CkBAIC00NjgsNyArNDY3LDcgQEAKIAkJICogZW5hYmxlIGludGVycnVwdCBhZ2FpbgogCQkgKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkKKwogCX0gd2hpbGUoZXJyb3IgJiYgY250ci0tKTsKIAogCWkyY19kZWxheShDTE9DS19MT1dfVElNRSk7CkBAIC01MDQsNyArNTAzLDcgQEAKIAkJICogZ2VuZXJhdGUgc3RhcnQgY29uZGl0aW9uCiAJCSAqLwogCQlpMmNfc3RhcnQoKTsKLSAgICAKKwogCQkvKgogCQkgKiBzZW5kIHNsYXZlIGFkZHJlc3MKIAkJICovCkBAIC01NTUsNyArNTU0LDcgQEAKIAkJICogZW5hYmxlIGludGVycnVwdCBhZ2FpbgogCQkgKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkKKwogCX0gd2hpbGUoZXJyb3IgJiYgY250ci0tKTsKIAogCXNwaW5fdW5sb2NrKCZpMmNfbG9jayk7CkBAIC01NjYsNyArNTY1LDYgQEAKIHN0YXRpYyBpbnQKIGkyY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWN5Y2xlX2tlcm5lbF9sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3OSw5ICs1NzcsNyBAQAogLyogTWFpbiBkZXZpY2UgQVBJLiBpb2N0bCdzIHRvIHdyaXRlIG9yIHJlYWQgdG8vZnJvbSBpMmMgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyBpbnQKLWkyY19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgaTJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpZihfSU9DX1RZUEUoY21kKSAhPSBFVFJBWEkyQ19JT0NUWVBFKSB7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTkwLDcgKzU4Niw3IEBACiAJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKIAkJY2FzZSBJMkNfV1JJVEVSRUc6CiAJCQkvKiB3cml0ZSB0byBhbiBpMmMgc2xhdmUgKi8KLQkJCUQocHJpbnRrKCJpMmN3ICVkICVkICVkXG4iLCAKKwkJCUQocHJpbnRrKEtFUk5fREVCVUcgImkyY3cgJWQgJWQgJWRcbiIsCiAJCQkJIEkyQ19BUkdTTEFWRShhcmcpLAogCQkJCSBJMkNfQVJHUkVHKGFyZyksCiAJCQkJIEkyQ19BUkdWQUxVRShhcmcpKSk7CkBAIC02MDIsMjYgKzU5OCwyNSBAQAogCQl7CiAJCQl1bnNpZ25lZCBjaGFyIHZhbDsKIAkJCS8qIHJlYWQgZnJvbSBhbiBpMmMgc2xhdmUgKi8KLQkJCUQocHJpbnRrKCJpMmNyICVkICVkICIsIAorCQkJRChwcmludGsoS0VSTl9ERUJVRyAiaTJjciAlZCAlZCAiLAogCQkJCUkyQ19BUkdTTEFWRShhcmcpLAogCQkJCUkyQ19BUkdSRUcoYXJnKSkpOwogCQkJdmFsID0gaTJjX3JlYWRyZWcoSTJDX0FSR1NMQVZFKGFyZyksIEkyQ19BUkdSRUcoYXJnKSk7Ci0JCQlEKHByaW50aygiPSAlZFxuIiwgdmFsKSk7CisJCQlEKHByaW50ayhLRVJOX0RFQlVHICI9ICVkXG4iLCB2YWwpKTsKIAkJCXJldHVybiB2YWw7Ci0JCX0JCQkJCSAgICAKKwkJfQogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAl9Ci0JCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGkyY19mb3BzID0gewotCS5vd25lciAgICA9IFRISVNfTU9EVUxFLAotCS5pb2N0bCAgICA9IGkyY19pb2N0bCwKLQkub3BlbiAgICAgPSBpMmNfb3BlbiwKLQkucmVsZWFzZSAgPSBpMmNfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnVubG9ja2VkX2lvY3RsCT0gaTJjX2lvY3RsLAorCS5vcGVuCQk9IGkyY19vcGVuLAorCS5yZWxlYXNlCT0gaTJjX3JlbGVhc2UsCiB9OwogCiBpbnQgX19pbml0CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9pMmMuaCBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2kyYy5oCmluZGV4IDRlZTkxNDIuLmUzNmM5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2kyYy5oCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL2kyYy5oCkBAIC0xLDUgKzEsNCBAQAotLyogJElkOiBpMmMuaCx2IDEuMyAyMDA0LzA1LzI4IDA5OjI2OjU5IHN0YXJ2aWsgRXhwICQgKi8KLQorLyogaTJjLmggKi8KIGludCBpMmNfaW5pdCh2b2lkKTsKIAogLyogSGlnaCBsZXZlbCBJMkMgYWN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggMTA5ZGNkOC4uZWUyZGQ0MyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9zeW5jX3NlcmlhbC5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIHN0YXRpYyBpbnQgc3luY19zZXJpYWxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHN5bmNfc2VyaWFsX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpOwogCi1zdGF0aWMgaW50IHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzeW5jX3NlcmlhbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgc3NpemVfdCBzeW5jX3NlcmlhbF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKTsKQEAgLTI0NCwxMyArMjQ0LDEzIEBACiAjZGVmaW5lIE5VTUJFUl9PRl9QT1JUUyAyCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7Ci0JLm93bmVyICAgPSBUSElTX01PRFVMRSwKLQkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAotCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKLQkucG9sbCAgICA9IHN5bmNfc2VyaWFsX3BvbGwsCi0JLmlvY3RsICAgPSBzeW5jX3NlcmlhbF9pb2N0bCwKLQkub3BlbiAgICA9IHN5bmNfc2VyaWFsX29wZW4sCi0JLnJlbGVhc2UgPSBzeW5jX3NlcmlhbF9yZWxlYXNlCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBzeW5jX3NlcmlhbF93cml0ZSwKKwkucmVhZAkJPSBzeW5jX3NlcmlhbF9yZWFkLAorCS5wb2xsCQk9IHN5bmNfc2VyaWFsX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gc3luY19zZXJpYWxfaW9jdGwsCisJLm9wZW4JCT0gc3luY19zZXJpYWxfb3BlbiwKKwkucmVsZWFzZQk9IHN5bmNfc2VyaWFsX3JlbGVhc2UKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV0cmF4X3N5bmNfc2VyaWFsX2luaXQodm9pZCkKQEAgLTY3OCw3ICs2NzgsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50IHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzeW5jX3NlcmlhbF9pb2N0bF91bmxvY2tlZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0dXJuX3ZhbCA9IDA7CkBAIC05NTYsNiArOTU2LDE4IEBACiAJcmV0dXJuIHJldHVybl92YWw7CiB9CiAKK3N0YXRpYyBsb25nIHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbG9uZyByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IHN5bmNfc2VyaWFsX2lvY3RsX3VubG9ja2VkKGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAKIHN0YXRpYyBzc2l6ZV90IHN5bmNfc2VyaWFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCiAJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYwppbmRleCA1ZmYwOGE4Li44YTgxOTZlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMKQEAgLTQ2NywxMSArNDY3LDcgQEAKIAogc3RhdGljIHZvaWQgd2FrZV91cF9mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSNpZmRlZiBERUNMQVJFX1dBSVRRVUVVRQotICB3YWl0X3F1ZXVlX2hlYWRfdCAgKnNsZWVwX3dhaXRfcCA9ICh3YWl0X3F1ZXVlX2hlYWRfdCopZGF0YTsKLSNlbHNlCi0gIHN0cnVjdCB3YWl0X3F1ZXVlICoqc2xlZXBfd2FpdF9wID0gKHN0cnVjdCB3YWl0X3F1ZXVlICoqKWRhdGE7Ci0jZW5kaWYKKyAgd2FpdF9xdWV1ZV9oZWFkX3QgKnNsZWVwX3dhaXRfcCA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKWRhdGE7CiAgIHdha2VfdXAoc2xlZXBfd2FpdF9wKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUwppbmRleCBmYzQ1NzcxLi5hMWYyMDE0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2hlYWQuUwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJOzsgdGhlICJyb20gZnMiIHdlJ2xsIHBvc3NpYmx5IHVzZSBpbiAyLjQgaWYgbm90IEpGRlMgKHdoaWNoIGRvZXMKIAk7OyBub3QgbmVlZCB0aGlzIG1lY2hhbmlzbSBhbnl3YXkpCiAKLQltb3ZlLmQJX192bWxpbnV4X2VuZCwgJHIwOyB0aGUgaW1hZ2Ugd2lsbCBiZSBhZnRlciB0aGUgdm1saW51eCBlbmQgYWRkcmVzcworCW1vdmUuZAlfX2luaXRfZW5kLCAkcjA7IHRoZSBpbWFnZSB3aWxsIGJlIGFmdGVyIHRoZSBlbmQgb2YgaW5pdAogCW1vdmUuZAlbJHIwXSwgJHIxCTsgY3JhbWZzIGFzc3VtZXMgc2FtZSBlbmRpYW4gb24gaG9zdC90YXJnZXQKIAljbXAuZAlDUkFNRlNfTUFHSUMsICRyMTsgbWFnaWMgdmFsdWUgaW4gY3JhbWZzIHN1cGVyYmxvY2sKIAlibmUJMmYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggMzBhZGFlNS4uMDBlYjM2ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTYxLDY2ICs2MSwxNiBAQAogCiB1bnNpZ25lZCBsb25nIGRvX3Nsb3dfZ2V0dGltZW9mZnNldCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgY291bnQsIHQxOwotCXVuc2lnbmVkIGxvbmcgdXNlY19jb3VudCA9IDA7Ci0JdW5zaWduZWQgc2hvcnQgcHJlc2NfY291bnQ7Ci0KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9wID0gVElNRVIwX0RJVjsvKiBmb3IgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIgYm9vdCAqLwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGppZmZpZXNfcCA9IDA7Ci0KLQkvKgotCSAqIGNhY2hlIHZvbGF0aWxlIGppZmZpZXMgdGVtcG9yYXJpbHk7IHdlIGhhdmUgSVJRcyB0dXJuZWQgb2ZmLiAKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfdDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OwogCiAJLyogVGhlIHRpbWVyIGludGVycnVwdCBjb21lcyBmcm9tIEV0cmF4IHRpbWVyIDAuIEluIG9yZGVyIHRvIGdldAogCSAqIGJldHRlciBwcmVjaXNpb24sIHdlIGNoZWNrIHRoZSBjdXJyZW50IHZhbHVlLiBJdCBtaWdodCBoYXZlCiAJICogdW5kZXJmbG93ZWQgYWxyZWFkeSB0aG91Z2guCiAJICovCi0KLSNpZm5kZWYgQ09ORklHX1NWSU5UT19TSU0KLQkvKiBOb3QgYXZhaWxhYmxlIGluIHRoZSB4c2ltIHNpbXVsYXRvci4gKi8KIAljb3VudCA9ICpSX1RJTUVSMF9EQVRBOwotCXByZXNjX2NvdW50ID0gKlJfVElNX1BSRVNDX1NUQVRVUzsgIAotCS8qIHByZXNjX2NvdW50IG1pZ2h0IGJlIHdyYXBwZWQgKi8KLQl0MSA9ICpSX1RJTUVSMF9EQVRBOwotCWlmIChjb3VudCAhPSB0MSl7Ci0JCS8qIGl0IHdyYXBwZWQsIHJlYWQgcHJlc2NhbGVyIGFnYWluLi4uICAqLwotCQlwcmVzY19jb3VudCA9ICpSX1RJTV9QUkVTQ19TVEFUVVM7Ci0JCWNvdW50ID0gdDE7Ci0JfQotI2Vsc2UKLQljb3VudCA9IDA7Ci0JcHJlc2NfY291bnQgPSAwOwotI2VuZGlmCiAKLSAJamlmZmllc190ID0gamlmZmllczsKLQotCS8qCi0JICogYXZvaWRpbmcgdGltZXIgaW5jb25zaXN0ZW5jaWVzICh0aGV5IGFyZSByYXJlLCBidXQgdGhleSBoYXBwZW4pLi4uCi0JICogdGhlcmUgYXJlIG9uZSBwcm9ibGVtIHRoYXQgbXVzdCBiZSBhdm9pZGVkIGhlcmU6Ci0JICogIDEuIHRoZSB0aW1lciBjb3VudGVyIHVuZGVyZmxvd3MKLQkgKi8KLQlpZiggamlmZmllc190ID09IGppZmZpZXNfcCApIHsKLQkJaWYoIGNvdW50ID4gY291bnRfcCApIHsKLQkJCS8qIFRpbWVyIHdyYXBwZWQsIHVzZSBuZXcgY291bnQgYW5kIHByZXNjYWxlIAotCQkJICogaW5jcmVhc2UgdGhlIHRpbWUgY29ycmVzcG9uZGluZyB0byBvbmUgamlmZmllCi0JCQkgKi8KLQkJCXVzZWNfY291bnQgPSAxMDAwMDAwL0haOwotCQl9Ci0JfSBlbHNlCi0JCWppZmZpZXNfcCA9IGppZmZpZXNfdDsKLSAgICAgICAgY291bnRfcCA9IGNvdW50OwotCWlmIChwcmVzY19jb3VudCA+PSBQUkVTQ0FMRV9WQUxVRS8yICl7Ci0JCXByZXNjX2NvdW50ID0gIFBSRVNDQUxFX1ZBTFVFIC0gcHJlc2NfY291bnQgKyBQUkVTQ0FMRV9WQUxVRS8yOwotCX0gZWxzZSB7Ci0JCXByZXNjX2NvdW50ID0gIFBSRVNDQUxFX1ZBTFVFIC0gcHJlc2NfY291bnQgLSBQUkVTQ0FMRV9WQUxVRS8yOwotCX0KIAkvKiBDb252ZXJ0IHRpbWVyIHZhbHVlIHRvIHVzZWMgKi8KLQl1c2VjX2NvdW50ICs9ICggKFRJTUVSMF9ESVYgLSBjb3VudCkgKiAoMTAwMDAwMC9IWikvVElNRVIwX0RJViApICsKLQkgICAgICAgICAgICAgICgoIChwcmVzY19jb3VudCkgKiAoMTAwMDAwMDAwMC9QUkVTQ0FMRV9GUkVRKSkvMTAwMCk7Ci0KLQlyZXR1cm4gdXNlY19jb3VudDsKKwlyZXR1cm4gKFRJTUVSMF9ESVYgLSBjb3VudCkgKiAoKE5TRUNfUEVSX1NFQy8xMDAwKS9IWikvVElNRVIwX0RJVjsKIH0KIAogLyogRXhjZXJwdCBmcm9tIHRoZSBFdHJheDEwMCBIU0REIGFib3V0IHRoZSBidWlsdC1pbiB3YXRjaGRvZzoKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2NyeXB0b2NvcC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKaW5kZXggYjcwZmIzNC4uYjA3NjQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCkBAIC0yMTcsNyArMjE2LDcgQEAKIAogc3RhdGljIGludCBjcnlwdG9jb3BfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAKLXN0YXRpYyBpbnQgY3J5cHRvY29wX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGxvbmcgY3J5cHRvY29wX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiBzdGF0aWMgdm9pZCBjcnlwdG9jb3Bfc3RhcnRfam9iKHZvaWQpOwpAQCAtMjc5LDEwICsyNzgsMTAgQEAKIAogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNyeXB0b2NvcF9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWNyeXB0b2NvcF9vcGVuLAotCS5yZWxlYXNlID0JY3J5cHRvY29wX3JlbGVhc2UsCi0JLmlvY3RsID0JY3J5cHRvY29wX2lvY3RsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNyeXB0b2NvcF9vcGVuLAorCS5yZWxlYXNlCT0gY3J5cHRvY29wX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gY3J5cHRvY29wX2lvY3RsCiB9OwogCiAKQEAgLTIzMDcsNyArMjMwNiw2IEBACiB7CiAJaW50IHAgPSBpbWlub3IoaW5vZGUpOwogCi0JY3ljbGVfa2VybmVsX2xvY2soKTsKIAlpZiAocCAhPSBDUllQVE9DT1BfTUlOT1IpIHJldHVybiAtRUlOVkFMOwogCiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKQEAgLTMxMDIsNyArMzEwMCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3J5cHRvY29wX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGNyeXB0b2NvcF9pb2N0bF91bmxvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCXN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgZXJyID0gMDsKIAlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gRVRSQVhDUllQVE9DT1BfSU9DVFlQRSkgewpAQCAtMzEzNCw2ICszMTMzLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBsb25nCitjcnlwdG9jb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworICAgICAgIGxvbmcgcmV0OworCisgICAgICAgbG9ja19rZXJuZWwoKTsKKyAgICAgICByZXQgPSBjcnlwdG9jb3BfaW9jdGxfdW5sb2NrZWQoaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKyAgICAgICB1bmxvY2tfa2VybmVsKCk7CisKKyAgICAgICByZXR1cm4gcmV0OworfQorCiAKICNpZmRlZiBMREVCVUcKIHN0YXRpYyB2b2lkIHByaW50X2RtYV9kZXNjcmlwdG9ycyhzdHJ1Y3QgY3J5cHRvY29wX2ludF9vcGVyYXRpb24gKmlvcCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2kyYy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKaW5kZXggMmZkNmE3NC4uNWEzZTkwMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vZXRyYXhpMmMuaD4KIApAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZSBEKHgpCiAKICNkZWZpbmUgSTJDX01BSk9SIDEyMyAgLyogTE9DQUwvRVhQRVJJTUVOVEFMICovCitzdGF0aWMgREVGSU5FX01VVEVYKGkyY19tdXRleCk7CiBzdGF0aWMgY29uc3QgY2hhciBpMmNfbmFtZVtdID0gImkyYyI7CiAKICNkZWZpbmUgQ0xPQ0tfTE9XX1RJTUUgICAgICAgICAgICA4CkBAIC02MzYsNyArNjM3LDYgQEAKIHN0YXRpYyBpbnQKIGkyY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWN5Y2xlX2tlcm5lbF9sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2NSwxMSArNjY1LDExIEBACiAJCQkJIEkyQ19BUkdSRUcoYXJnKSwKIAkJCQkgSTJDX0FSR1ZBTFVFKGFyZykpKTsKIAotCQkJbG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X2xvY2soJmkyY19tdXRleCk7CiAJCQlyZXQgPSBpMmNfd3JpdGVyZWcoSTJDX0FSR1NMQVZFKGFyZyksCiAJCQkJCSAgICBJMkNfQVJHUkVHKGFyZyksCiAJCQkJCSAgICBJMkNfQVJHVkFMVUUoYXJnKSk7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJmkyY19tdXRleCk7CiAJCQlyZXR1cm4gcmV0OwogCiAJCWNhc2UgSTJDX1JFQURSRUc6CkBAIC02NzksOSArNjc5LDkgQEAKIAkJCUQocHJpbnRrKCJpMmNyICVkICVkICIsCiAJCQkJSTJDX0FSR1NMQVZFKGFyZyksCiAJCQkJSTJDX0FSR1JFRyhhcmcpKSk7Ci0JCQlsb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfbG9jaygmaTJjX211dGV4KTsKIAkJCXZhbCA9IGkyY19yZWFkcmVnKEkyQ19BUkdTTEFWRShhcmcpLCBJMkNfQVJHUkVHKGFyZykpOwotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZpMmNfbXV0ZXgpOwogCQkJRChwcmludGsoIj0gJWRcbiIsIHZhbCkpOwogCQkJcmV0dXJuIHZhbDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1hMy9ncGlvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWEzL2dwaW8uYwppbmRleCA5NzM1N2NmLi4yZGNkMjdhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWEzL2dwaW8uYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9tYWNoLWEzL2dwaW8uYwpAQCAtNzIsOCArNzIsNyBAQAogc3RhdGljIGludCB2aXJ0dWFsX2dwaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAjZW5kaWYKLXN0YXRpYyBpbnQgZ3Bpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgbG9uZyBncGlvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgc3NpemVfdCBncGlvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpOwogc3RhdGljIGludCBncGlvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwpAQCAtNTIxLDcgKzUyMCw3IEBACiAJcmV0dXJuIGRpcl9zaGFkb3c7CiB9IC8qIHNldGdldF9vdXRwdXQgKi8KIAotc3RhdGljIGludCBncGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGxvbmcgZ3Bpb19pb2N0bF91bmxvY2tlZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjY0LDYgKzY2MywxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgbG9uZyBncGlvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKyAgICAgICBsb25nIHJldDsKKworICAgICAgIGxvY2tfa2VybmVsKCk7CisgICAgICAgcmV0ID0gZ3Bpb19pb2N0bF91bmxvY2tlZChmaWxlLCBjbWQsIGFyZyk7CisgICAgICAgdW5sb2NrX2tlcm5lbCgpOworCisgICAgICAgcmV0dXJuIHJldDsKK30KKwogI2lmZGVmIENPTkZJR19FVFJBWF9WSVJUVUFMX0dQSU8KIHN0YXRpYyBpbnQgdmlydHVhbF9ncGlvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCXVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtODc3LDEyICs4ODcsMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3Bpb19mb3BzID0gewotCS5vd25lciAgICAgICA9IFRISVNfTU9EVUxFLAotCS5wb2xsICAgICAgICA9IGdwaW9fcG9sbCwKLQkuaW9jdGwgICAgICAgPSBncGlvX2lvY3RsLAotCS53cml0ZSAgICAgICA9IGdwaW9fd3JpdGUsCi0JLm9wZW4gICAgICAgID0gZ3Bpb19vcGVuLAotCS5yZWxlYXNlICAgICA9IGdwaW9fcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnBvbGwJCT0gZ3Bpb19wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IGdwaW9faW9jdGwsCisJLndyaXRlCQk9IGdwaW9fd3JpdGUsCisJLm9wZW4JCT0gZ3Bpb19vcGVuLAorCS5yZWxlYXNlCT0gZ3Bpb19yZWxlYXNlLAogfTsKIAogI2lmZGVmIENPTkZJR19FVFJBWF9WSVJUVUFMX0dQSU8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKaW5kZXggZDg5YWI4MC4uNWVjOGE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKQEAgLTc0LDggKzc0LDcgQEAKIHN0YXRpYyBpbnQgdmlydHVhbF9ncGlvX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCXVuc2lnbmVkIGxvbmcgYXJnKTsKICNlbmRpZgotc3RhdGljIGludCBncGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBsb25nIGdwaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBzc2l6ZV90IGdwaW9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCWxvZmZfdCAqb2ZmKTsKIHN0YXRpYyBpbnQgZ3Bpb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKQEAgLTE4NSw3ICsxODQsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBncGlvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0Jc3RydWN0IGdwaW9fcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgZ3Bpb19wcml2YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBncGlvX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBkYXRhOwogCXBvbGxfd2FpdChmaWxlLCAmcHJpdi0+YWxhcm1fd3EsIHdhaXQpOwogCWlmIChwcml2LT5taW5vciA9PSBHUElPX01JTk9SX0EpIHsKQEAgLTM1Myw3ICszNTIsNyBAQAogc3RhdGljIHNzaXplX3QgZ3Bpb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCiAJbG9mZl90ICpvZmYpCiB7Ci0Jc3RydWN0IGdwaW9fcHJpdmF0ZSAqcHJpdiA9IChzdHJ1Y3QgZ3Bpb19wcml2YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBncGlvX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciBkYXRhLCBjbGtfbWFzaywgZGF0YV9tYXNrLCB3cml0ZV9tc2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHNoYWRvdzsKQEAgLTQ2OCw3ICs0NjcsNyBAQAogCiAJc3Bpbl9sb2NrX2lycSgmYWxhcm1fbG9jayk7CiAJcCA9IGFsYXJtbGlzdDsKLQl0b2RlbCA9IChzdHJ1Y3QgZ3Bpb19wcml2YXRlICopZmlscC0+cHJpdmF0ZV9kYXRhOworCXRvZGVsID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHAgPT0gdG9kZWwpIHsKIAkJYWxhcm1saXN0ID0gdG9kZWwtPm5leHQ7CkBAIC01NTcsMTcgKzU1NiwxNSBAQAogCXJldHVybiBkaXJfc2hhZG93OwogfSAvKiBzZXRnZXRfb3V0cHV0ICovCiAKLXN0YXRpYyBpbnQKLWdwaW9fbGVkc19pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgaW50IGdwaW9fbGVkc19pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKIHN0YXRpYyBpbnQKLWdwaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitncGlvX2lvY3RsX3VubG9ja2VkKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCXVuc2lnbmVkIGxvbmcgc2hhZG93OwotCXN0cnVjdCBncGlvX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGdwaW9fcHJpdmF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ3Bpb19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmIChfSU9DX1RZUEUoY21kKSAhPSBFVFJBWEdQSU9fSU9DVFlQRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTcwNyw2ICs3MDQsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGxvbmcgZ3Bpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisgICAgICAgbG9uZyByZXQ7CisKKyAgICAgICBsb2NrX2tlcm5lbCgpOworICAgICAgIHJldCA9IGdwaW9faW9jdGxfdW5sb2NrZWQoZmlsZSwgY21kLCBhcmcpOworICAgICAgIHVubG9ja19rZXJuZWwoKTsKKworICAgICAgIHJldHVybiByZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfRVRSQVhfVklSVFVBTF9HUElPCiBzdGF0aWMgaW50CiB2aXJ0dWFsX2dwaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtNzE0LDcgKzcyMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJdW5zaWduZWQgc2hvcnQgc2hhZG93OwotCXN0cnVjdCBncGlvX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGdwaW9fcHJpdmF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZ3Bpb19wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJc3dpdGNoIChfSU9DX05SKGNtZCkpIHsKIAljYXNlIElPX1NFVEJJVFM6CkBAIC04NTYsMTIgKzg2NCwxMiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX2ZvcHMgPSB7Ci0JLm93bmVyICAgICAgID0gVEhJU19NT0RVTEUsCi0JLnBvbGwgICAgICAgID0gZ3Bpb19wb2xsLAotCS5pb2N0bCAgICAgICA9IGdwaW9faW9jdGwsCi0JLndyaXRlICAgICAgID0gZ3Bpb193cml0ZSwKLQkub3BlbiAgICAgICAgPSBncGlvX29wZW4sCi0JLnJlbGVhc2UgICAgID0gZ3Bpb19yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucG9sbAkJPSBncGlvX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gZ3Bpb19pb2N0bCwKKwkud3JpdGUJCT0gZ3Bpb193cml0ZSwKKwkub3BlbgkJPSBncGlvX29wZW4sCisJLnJlbGVhc2UJPSBncGlvX3JlbGVhc2UsCiB9OwogCiAjaWZkZWYgQ09ORklHX0VUUkFYX1ZJUlRVQUxfR1BJTwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggNDg4OWYxOS4uY2EyNDhmMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvc3luY19zZXJpYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9zeW5jX3NlcmlhbC5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIHN0YXRpYyBpbnQgc3luY19zZXJpYWxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSopOwogc3RhdGljIHVuc2lnbmVkIGludCBzeW5jX3NlcmlhbF9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KTsKIAotc3RhdGljIGludCBzeW5jX3NlcmlhbF9pb2N0bChzdHJ1Y3QgaW5vZGUqLCBzdHJ1Y3QgZmlsZSosCitzdGF0aWMgaW50IHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBmaWxlICosCiAJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBzc2l6ZV90IHN5bmNfc2VyaWFsX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciAqIGJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwpAQCAtMjQxLDEzICsyNDEsMTMgQEAKICNkZWZpbmUgTkJSX1BPUlRTIEFSUkFZX1NJWkUocG9ydHMpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7Ci0JLm93bmVyICAgPSBUSElTX01PRFVMRSwKLQkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAotCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKLQkucG9sbCAgICA9IHN5bmNfc2VyaWFsX3BvbGwsCi0JLmlvY3RsICAgPSBzeW5jX3NlcmlhbF9pb2N0bCwKLQkub3BlbiAgICA9IHN5bmNfc2VyaWFsX29wZW4sCi0JLnJlbGVhc2UgPSBzeW5jX3NlcmlhbF9yZWxlYXNlCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBzeW5jX3NlcmlhbF93cml0ZSwKKwkucmVhZAkJPSBzeW5jX3NlcmlhbF9yZWFkLAorCS5wb2xsCQk9IHN5bmNfc2VyaWFsX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gc3luY19zZXJpYWxfaW9jdGwsCisJLm9wZW4JCT0gc3luY19zZXJpYWxfb3BlbiwKKwkucmVsZWFzZQk9IHN5bmNfc2VyaWFsX3JlbGVhc2UKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV0cmF4X3N5bmNfc2VyaWFsX2luaXQodm9pZCkKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgaW50IHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBzeW5jX3NlcmlhbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0dXJuX3ZhbCA9IDA7CkBAIC05NjEsNiArOTYxLDE4IEBACiAJcmV0dXJuIHJldHVybl92YWw7CiB9CiAKK3N0YXRpYyBsb25nIHN5bmNfc2VyaWFsX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKyAgICAgICBsb25nIHJldDsKKworICAgICAgIGxvY2tfa2VybmVsKCk7CisgICAgICAgcmV0ID0gc3luY19zZXJpYWxfaW9jdGxfdW5sb2NrZWQoZmlsZSwgY21kLCBhcmcpOworICAgICAgIHVubG9ja19rZXJuZWwoKTsKKworICAgICAgIHJldHVybiByZXQ7Cit9CisKIC8qIE5PVEU6IHN5bmNfc2VyaWFsX3dyaXRlIGRvZXMgbm90IHN1cHBvcnQgY29uY3VycmVuY3kgKi8KIHN0YXRpYyBzc2l6ZV90IHN5bmNfc2VyaWFsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCiAJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9jYWNoZWZsdXNoLlMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2NhY2hlZmx1c2guUwppbmRleCA5NTZlOGZiLi42ZmMzZDk1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2NhY2hlZmx1c2guUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2NhY2hlZmx1c2guUwpAQCAtMSw0ICsxLDUgQEAKIAkuZ2xvYmFsIGNyaXNfZmx1c2hfY2FjaGVfcmFuZ2UKKwkudHlwZQljcmlzX2ZsdXNoX2NhY2hlX3JhbmdlLCBAZnVuY3Rpb24KIGNyaXNfZmx1c2hfY2FjaGVfcmFuZ2U6CiAJbW92ZS5kIDEwMjQsICRyMTIKIAljbXAuZCAkcjExLCAkcjEyCkBAIC04MCw4ICs4MSwxMCBAQAogCWFkZHEgMzIsICRyMTAKIAliYSBjcmlzX2ZsdXNoX2NhY2hlX3JhbmdlCiAJc3ViLmQgJHIxMiwgJHIxMQorCS5zaXplCWNyaXNfZmx1c2hfY2FjaGVfcmFuZ2UsIC4gLSBjcmlzX2ZsdXNoX2NhY2hlX3JhbmdlCiAKIAkuZ2xvYmFsIGNyaXNfZmx1c2hfY2FjaGUKKwkudHlwZQljcmlzX2ZsdXNoX2NhY2hlLCBAZnVuY3Rpb24KIGNyaXNfZmx1c2hfY2FjaGU6CiAJbW92ZXEgMCwgJHIxMAogY3Jpc19mbHVzaF9saW5lOgpAQCAtOTIsMyArOTUsNSBAQAogCWZpZHhkIFskcjEwXQogCXJldAogCW5vcAorCS5zaXplCWNyaXNfZmx1c2hfY2FjaGUsIC4gLSBjcmlzX2ZsdXNoX2NhY2hlCisKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUwppbmRleCAxZjM5ODYxLi4wZWNiNTBiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCkBAIC03NiwxMiArNzYsMTUgQEAKIAogCTsgQ2FsbGVkIGF0IGV4aXQgZnJvbSBmb3JrLiBzY2hlZHVsZV90YWlsIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AKIAk7IHNwaW5sb2NrIGlmIENPTkZJR19QUkVFTVBULgorCS50eXBlCXJldF9mcm9tX2ZvcmssQGZ1bmN0aW9uCiByZXRfZnJvbV9mb3JrOgogCWpzciBzY2hlZHVsZV90YWlsCiAJbm9wCiAJYmEgIHJldF9mcm9tX3N5c19jYWxsCiAJbm9wCisJLnNpemUJcmV0X2Zyb21fZm9yaywgLiAtIHJldF9mcm9tX2ZvcmsKIAorCS50eXBlCXJldF9mcm9tX2ludHIsQGZ1bmN0aW9uCiByZXRfZnJvbV9pbnRyOgogCTs7IENoZWNrIGZvciByZXNjaGVkIGlmIHByZWVtcHRpdmUga2VybmVsLCBvciBpZiB3ZSdyZSBnb2luZyBiYWNrIHRvCiAJOzsgdXNlci1tb2RlLiBUaGlzIHRlc3QgbWF0Y2hlcyB0aGUgdXNlcl9yZWdzKHJlZ3MpIG1hY3JvLiBEb24ndCBzaW1wbHkKQEAgLTkxLDkgKzk0LDEwIEBACiAJbW92ZS5kCVskYWNyXSwgJHIwCiAJYnRzdHEJMTYsICRyMAkJCTsgVXNlci1tb2RlIGZsYWcuCiAJYnBsCV9yZXN1bWVfa2VybmVsCisJLnNpemUJcmV0X2Zyb21faW50ciwgLiAtIHJldF9mcm9tX2ludHIgKyAyCTsgKzIgaW5jbHVkZXMgdGhlIGRzbG90LgogCiAJOyBOb3RlIHRoYXQgZGkgYmVsb3cgaXMgaW4gZGVsYXkgc2xvdC4KLQorCS50eXBlCV9yZXN1bWVfdXNlcnNwYWNlLEBmdW5jdGlvbgogX3Jlc3VtZV91c2Vyc3BhY2U6CiAJZGkJCQk7IFNvIG5lZWRfcmVzY2hlZCBhbmQgc2lncGVuZGluZyBkb24ndCBjaGFuZ2UuCiAKQEAgLTEwNyw2ICsxMTEsNyBAQAogCW5vcAogCWJhCV9SZXhpdAogCW5vcAorCS5zaXplCV9yZXN1bWVfdXNlcnNwYWNlLCAuIC0gX3Jlc3VtZV91c2Vyc3BhY2UKIAogCTs7IFRoZSBzeXN0ZW1fY2FsbCBpcyBjYWxsZWQgYnkgYSBCUkVBSyBpbnN0cnVjdGlvbiwgd2hpY2ggbG9va3MgcHJldHR5CiAJOzsgbXVjaCBsaWtlIGFueSBvdGhlciBleGNlcHRpb24uCkBAIC0xMjIsMzAgKzEyNywyOCBAQAogCTs7IG5vbi11c2VkIGluc3RydWN0aW9ucy4gT25seSB0aGUgbm9uLWNvbW1vbiBjYXNlcyBjYXVzZSB0aGUgb3V0bGluZWQgY29kZQogCTs7IHRvIHJ1bi4uCiAKKwkudHlwZQlzeXN0ZW1fY2FsbCxAZnVuY3Rpb24KIHN5c3RlbV9jYWxsOgogCTs7IFN0YWNrLWZyYW1lIHNpbWlsYXIgdG8gdGhlIGlycSBoZWFkcywgd2hpY2ggaXMgcmV2ZXJzZWQgaW4KIAk7OyByZXRfZnJvbV9zeXNfY2FsbC4KLQlzdWJxCTEyLCAkc3AJCTsgU2tpcCBFWFMsIEVEQS4KLQltb3ZlCSRlcnAsIFskc3BdCi0Jc3VicQk0LCAkc3AKLQltb3ZlCSRzcnAsIFskc3BdCi0Jc3VicQk0LCAkc3AKLQltb3ZlCSRjY3MsIFskc3BdCi0Jc3VicQk0LCAkc3AKLQllaQkJCTsgQWxsb3cgSVJRcyB3aGlsZSBoYW5kbGluZyBzeXN0ZW0gY2FsbAotCW1vdmUJJHNwYywgWyRzcF0KLQlzdWJxCTQsICRzcAotCW1vdmUJJG1vZiwgWyRzcF0KLQlzdWJxCTQsICRzcAotCW1vdmUJJHNycywgWyRzcF0KLQlzdWJxCTQsICRzcAotCW1vdmUuZAkkYWNyLCBbJHNwXQotCXN1YnEJMTQqNCwgJHNwCTsgTWFrZSByb29tIGZvciBSMC1SMTMuCi0JbW92ZW0JJHIxMywgWyRzcF0JOyBQdXNoIFIwLVIxMwotCXN1YnEJNCwgJHNwCi0JbW92ZS5kCSRyMTAsIFskc3BdCTsgUHVzaCBvcmlnX3IxMC4KIAotOyBTZXQgUy1iaXQgd2hlbiBrZXJuZWwgZGVidWdnaW5nIHRvIGtlZXAgaGFyZHdhcmUgYnJlYWtwb2ludHMgYWN0aXZlLgorCXN1Yi5kCTkyLCAkc3AJCTsgU2tpcCBFWFMgYW5kIEVEQS4KKwltb3ZlbQkkcjEzLCBbJHNwXQorCW1vdmUuZAkkc3AsICRyOAorCWFkZHEJMTQqNCwgJHI4CisJbW92ZS5kCSRhY3IsICRyMAorCW1vdmUJJHNycywgJHIxCisJbW92ZQkkbW9mLCAkcjIKKwltb3ZlCSRzcGMsICRyMworCW1vdmUJJGNjcywgJHI0CisJbW92ZQkkc3JwLCAkcjUKKwltb3ZlCSRlcnAsICRyNgorCXN1YnEJNCwgJHNwCisJbW92ZW0JJHI2LCBbJHI4XQorCWVpCQkJOyBFbmFibGUgaW50ZXJydXB0cyB3aGlsZSBwcm9jZXNzaW5nIHN5c2NhbGxzLgorCW1vdmUuZAkkcjEwLCBbJHNwXQorCisJOyBTZXQgUy1iaXQgd2hlbiBrZXJuZWwgZGVidWdnaW5nIHRvIGtlZXAgaGFyZHdhcmUgYnJlYWtwb2ludHMgYWN0aXZlLgogI2lmZGVmIENPTkZJR19FVFJBWF9LR0RCCiAJbW92ZSAkY2NzLCAkcjAKIAlvci5kICgxPDw5KSwgJHIwCkBAIC0yMTcsNyArMjIwLDkgQEAKIAlhbmQuZAlfVElGX0FMTFdPUktfTUFTSywgJHIxCiAJYm5lCV9zeXNjYWxsX2V4aXRfd29yawogCW5vcAorCS5zaXplCXN5c3RlbV9jYWxsLCAuIC0gc3lzdGVtX2NhbGwKIAorCS50eXBlCV9SZXhpdCxAZnVuY3Rpb24KIF9SZXhpdDoKIAk7OyBUaGlzIGVwaWxvZ3VlIE1VU1QgbWF0Y2ggdGhlIHByb2xvZ3VlcyBpbiBtdWx0aXBsZV9pbnRlcnJ1cHQsIGlycS5oCiAJOzsgYW5kIHB0cmVncy5oLgpAQCAtMjM0LDEwICsyMzksMTIgQEAKIAlhZGRxICAgIDgsICRzcAkJOyBTa2lwIEVYUywgRURBLgogCWp1bXAJJGVycAogCXJmZQkJCTsgUmVzdG9yZSBjb25kaXRpb24gY29kZSBzdGFjayBpbiBkZWxheS1zbG90LgorCS5zaXplCV9SZXhpdCwgLiAtIF9SZXhpdAogCiAJOzsgV2UgZ2V0IGhlcmUgYWZ0ZXIgZG9pbmcgYSBzeXNjYWxsIGlmIGV4dHJhIHdvcmsgbWlnaHQgbmVlZCB0byBiZSBkb25lCiAJOzsgcGVyZm9ybSBzeXNjYWxsIGV4aXQgdHJhY2luZyBpZiBuZWVkZWQuCiAKKwkudHlwZQlfc3lzY2FsbF9leGl0X3dvcmssQGZ1bmN0aW9uCiBfc3lzY2FsbF9leGl0X3dvcms6CiAJOzsgUjAgY29udGFpbnMgY3VycmVudCBhdCB0aGlzIHBvaW50IGFuZCBpcnEncyBhcmUgZGlzYWJsZWQuCiAKQEAgLTI1MywxNCArMjYwLDE4IEBACiAJbW92ZS5kCSRyMSwgJHI5CiAJYmEJX3Jlc3VtZV91c2Vyc3BhY2UKIAlub3AKKwkuc2l6ZQlfc3lzY2FsbF9leGl0X3dvcmssIC4gLSBfc3lzY2FsbF9leGl0X3dvcmsKIAorCS50eXBlCV93b3JrX3BlbmRpbmcsQGZ1bmN0aW9uCiBfd29ya19wZW5kaW5nOgogCWFkZG9xCStUSV9mbGFncywgJHIwLCAkYWNyCiAJbW92ZS5kCVskYWNyXSwgJHIxMAogCWJ0c3RxCVRJRl9ORUVEX1JFU0NIRUQsICRyMTAJOyBOZWVkIHJlc2NoZWQ/CiAJYnBsCV93b3JrX25vdGlmeXNpZwkJOyBObywgbXVzdCBiZSBzaWduYWwvbm90aWZ5LgogCW5vcAorCS5zaXplCV93b3JrX3BlbmRpbmcsIC4gLSBfd29ya19wZW5kaW5nCiAKKwkudHlwZQlfd29ya19yZXNjaGVkLEBmdW5jdGlvbgogX3dvcmtfcmVzY2hlZDoKIAltb3ZlLmQJJHI5LCAkcjEJCTsgUHJlc2VydmUgUjkuCiAJanNyCXNjaGVkdWxlCkBAIC0yNzYsNyArMjg3LDkgQEAKIAlidHN0cQlUSUZfTkVFRF9SRVNDSEVELCAkcjEKIAlibWkJX3dvcmtfcmVzY2hlZAkJOyBjdXJyZW50LT53b3JrLm5lZWRfcmVzY2hlZC4KIAlub3AKKwkuc2l6ZQlfd29ya19yZXNjaGVkLCAuIC0gX3dvcmtfcmVzY2hlZAogCisJLnR5cGUJX3dvcmtfbm90aWZ5c2lnLEBmdW5jdGlvbgogX3dvcmtfbm90aWZ5c2lnOgogCTs7IERlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbHMgYW5kIG5vdGlmeS1yZXN1bWUgcmVxdWVzdHMuCiAKQEAgLTI4OCw2ICszMDEsNyBAQAogCiAJYmEgX1JleGl0CiAJbm9wCisJLnNpemUJX3dvcmtfbm90aWZ5c2lnLCAuIC0gX3dvcmtfbm90aWZ5c2lnCiAKIAk7OyBXZSBnZXQgaGVyZSBhcyBhIHNpZGV0cmFjayB3aGVuIHdlJ3ZlIGVudGVyZWQgYSBzeXNjYWxsIHdpdGggdGhlCiAJOzsgdHJhY2UtYml0IHNldC4gV2UgbmVlZCB0byBjYWxsIGRvX3N5c2NhbGxfdHJhY2UgYW5kIHRoZW4gY29udGludWUKQEAgLTMyOSw0MSArMzQzLDQzIEBACiAJOzsKIAk7OyBSZXR1cm5zIG9sZCBjdXJyZW50IGluIFIxMC4KIAorCS50eXBlCXJlc3VtZSxAZnVuY3Rpb24KIHJlc3VtZToKLQlzdWJxCTQsICRzcAotCW1vdmUJJHNycCwgWyRzcF0JCTsgS2VlcCBvbGQvbmV3IFBDIG9uIHRoZSBzdGFjay4KKwlzdWJxCTQsICRzcAkJCTsgTWFrZSBzcGFjZSBmb3Igc3JwLgorCiAJYWRkLmQJJHIxMiwgJHIxMAkJOyBSMTAgPSBjdXJyZW50IHRhc2tzIHRzcy4KIAlhZGRvcQkrVEhSRUFEX2NjcywgJHIxMCwgJGFjcgorCW1vdmUJJHNycCwgWyRzcF0JCTsgS2VlcCBvbGQvbmV3IFBDIG9uIHRoZSBzdGFjay4KIAltb3ZlCSRjY3MsIFskYWNyXQkJOyBTYXZlIElSUSBlbmFibGUgc3RhdGUuCiAJZGkKIAogCWFkZG9xCStUSFJFQURfdXNwLCAkcjEwLCAkYWNyCisJc3VicQkxMCo0LCAkc3AJCTsgTWFrZSByb29tIGZvciBSOS4KIAltb3ZlCSR1c3AsIFskYWNyXQkJOyBTYXZlIHVzZXItbW9kZSBzdGFja3BvaW50ZXIuCiAKIAk7OyBTZWUgY29weV90aHJlYWQgZm9yIHRoZSByZWFzb24gd2h5IHJlZ2lzdGVyIFI5IGlzIHNhdmVkLgotCXN1YnEJMTAqNCwgJHNwCiAJbW92ZW0JJHI5LCBbJHNwXQkJOyBTYXZlIG5vbi1zY3JhdGNoIHJlZ2lzdGVycyBhbmQgUjkuCiAKIAlhZGRvcQkrVEhSRUFEX2tzcCwgJHIxMCwgJGFjcgorCW1vdmUuZAkkc3AsICRyMTAJCTsgUmV0dXJuIGxhc3QgcnVubmluZyB0YXNrIGluIFIxMC4KIAltb3ZlLmQJJHNwLCBbJGFjcl0JCTsgU2F2ZSBrZXJuZWwgU1AgZm9yIG9sZCB0YXNrLgogCi0JbW92ZS5kCSRzcCwgJHIxMAkJOyBSZXR1cm4gbGFzdCBydW5uaW5nIHRhc2sgaW4gUjEwLgogCWFuZC5kICAgLTgxOTIsICRyMTAJCTsgR2V0IHRocmVhZF9pbmZvIGZyb20gc3RhY2twb2ludGVyLgogCWFkZG9xCStUSV90YXNrLCAkcjEwLCAkYWNyCi0JbW92ZS5kCVskYWNyXSwgJHIxMAkJOyBHZXQgdGFzay4KIAlhZGQuZAkkcjEyLCAkcjExCQk7IEZpbmQgdGhlIG5ldyB0YXNrcyB0c3MuCisJbW92ZS5kCVskYWNyXSwgJHIxMAkJOyBHZXQgdGFzay4KIAlhZGRvcQkrVEhSRUFEX2tzcCwgJHIxMSwgJGFjcgogCW1vdmUuZAlbJGFjcl0sICRzcAkJOyBTd2l0Y2ggdG8gbmV3IHN0YWNrZnJhbWUuCisJYWRkb3EJK1RIUkVBRF91c3AsICRyMTEsICRhY3IKIAltb3ZlbQlbJHNwK10sICRyOQkJOyBSZXN0b3JlIG5vbi1zY3JhdGNoIHJlZ2lzdGVycyBhbmQgUjkuCiAKLQlhZGRvcQkrVEhSRUFEX3VzcCwgJHIxMSwgJGFjcgogCW1vdmUJWyRhY3JdLCAkdXNwCQk7IFJlc3RvcmUgdXNlci1tb2RlIHN0YWNrcG9pbnRlci4KIAogCWFkZG9xCStUSFJFQURfY2NzLCAkcjExLCAkYWNyCisJbW92ZS5kCVskc3ArXSwgJHIxMQorCWp1bXAJJHIxMQkJCTsgUmVzdG9yZSBQQy4KIAltb3ZlCVskYWNyXSwgJGNjcwkJOyBSZXN0b3JlIElSUSBlbmFibGUgc3RhdHVzLgotCW1vdmUuZAlbJHNwK10sICRhY3IKLQlqdW1wCSRhY3IJCQk7IFJlc3RvcmUgUEMuCi0Jbm9wCisJLnNpemUJcmVzdW1lLCAuIC0gcmVzdW1lCiAKIG5taV9pbnRlcnJ1cHQ6CiAKQEAgLTQyNiw2ICs0NDIsNyBAQAogCTs7IHRpbWUuIEp1bXAgdG8gdGhlIGZpcnN0IHNldCBpbnRlcnJ1cHQgYml0IGluIGEgcHJpb3RpcnkgZmFzaGlvbi4gVGhlCiAJOzsgaGFyZHdhcmUgd2lsbCBjYWxsIHRoZSB1bnNlcnZlZCBpbnRlcnJ1cHRzIGFmdGVyIHRoZSBoYW5kbGVyCiAJOzsgZmluaXNoZXMuCisJLnR5cGUJbXVsdGlwbGVfaW50ZXJydXB0LCBAZnVuY3Rpb24KIG11bHRpcGxlX2ludGVycnVwdDoKIAk7OyBUaGlzIHByb2xvZ3VlIE1VU1QgbWF0Y2ggdGhlIG9uZSBpbiBpcnEuaCBhbmQgdGhlIHN0cnVjdCBpbiBwdHJlZ3MuaCEKIAlzdWJxCTEyLCAkc3AJCTsgU2tpcCBFWFMsIEVEQS4KQEAgLTQ1OCw2ICs0NzUsNyBAQAogCW1vdmUuZAkkc3AsICRyMTAKIAlqdW1wICAgIHJldF9mcm9tX2ludHIKIAlub3AKKwkuc2l6ZQltdWx0aXBsZV9pbnRlcnJ1cHQsIC4gLSBtdWx0aXBsZV9pbnRlcnJ1cHQKIAogZG9fc2lndHJhcDoKIAk7OyBTaWd0cmFwcyB0aGUgcHJvY2VzcyB0aGF0IGV4ZWN1dGVkIHRoZSBCUkVBSyBpbnN0cnVjdGlvbi4gQ3JlYXRlcyBhCkBAIC01MTQsMTEgKzUzMiwxMyBAQAogCW1vdmUuZAlbJHNwK10sICRyMAkJOyBSZXN0b3JlIFIwIGluIGRlbGF5IHNsb3QuCiAKIAkuZ2xvYmFsIGtlcm5lbF9leGVjdmUKKwkudHlwZQlrZXJuZWxfZXhlY3ZlLEBmdW5jdGlvbgoga2VybmVsX2V4ZWN2ZToKIAltb3ZlLmQgX19OUl9leGVjdmUsICRyOQogCWJyZWFrIDEzCiAJcmV0CiAJbm9wCisJLnNpemUJa2VybmVsX2V4ZWN2ZSwgLiAtIGtlcm5lbF9leGVjdmUKIAogCS5kYXRhCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaGVhZC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKaW5kZXggNzYyNjZmOC4uNWQ1MDJiOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9oZWFkLlMKQEAgLTY5LDcgKzY5LDEzIEBACiAJOzsKIAk7OyBOb3RlOyAzIGN5Y2xlcyBpcyBuZWVkZWQgZm9yIGEgYmFuay1zZWxlY3QgdG8gdGFrZSBlZmZlY3QuIEZ1cnRoZXI7CiAJOzsgYmFuayAxIGlzIHRoZSBpbnN0cnVjdGlvbiBNTVUsIGJhbmsgMiBpcyB0aGUgZGF0YSBNTVUuCi0jaWZuZGVmIENPTkZJR19FVFJBWF9WQ1NfU0lNCisKKyNpZmRlZiBDT05GSUdfQ1JJU19NQUNIX0FSVFBFQzMKKwltb3ZlLmQJUkVHX0ZJRUxEKG1tdSwgcndfbW1fa2Jhc2VfaGksIGJhc2VfZSwgOCkJXAorCQl8IFJFR19GSUVMRChtbXUsIHJ3X21tX2tiYXNlX2hpLCBiYXNlX2MsIDQpCVwKKwkJfCBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9kLCA1KSAgICAgXAorCQl8IFJFR19GSUVMRChtbXUsIHJ3X21tX2tiYXNlX2hpLCBiYXNlX2IsIDB4YiksICRyMAorI2VsaWYgIWRlZmluZWQoQ09ORklHX0VUUkFYX1ZDU19TSU0pCiAJbW92ZS5kCVJFR19GSUVMRChtbXUsIHJ3X21tX2tiYXNlX2hpLCBiYXNlX2UsIDgpCVwKIAkJfCBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9jLCA0KQlcCiAJCXwgUkVHX0ZJRUxEKG1tdSwgcndfbW1fa2Jhc2VfaGksIGJhc2VfYiwgMHhiKSwgJHIwCkBAIC04OCw3ICs5NCwzOSBAQAogCiAJOzsgRW5hYmxlIGNlcnRhaW4gcGFnZSBwcm90ZWN0aW9ucyBhbmQgc2V0dXAgbGluZWFyIG1hcHBpbmcKIAk7OyBmb3IgZixlLGMsYiw0LDAuCi0jaWZuZGVmIENPTkZJR19FVFJBWF9WQ1NfU0lNCisKKwk7OyBBUlRQRUMtMzoKKwk7OyBjLGQgdXNlZCBmb3IgbGluZWFyIGtlcm5lbCBtYXBwaW5nLCB1cCB0byA1MTIgTUIKKwk7OyBlIHVzZWQgZm9yIHZtYWxsb2MKKwk7OyBmIHVudXNlZCwgYnV0IHBhZ2UgbWFwcGVkIHRvIGdldCBwYWdlIGZhdWx0cworCisJOzsgRVRSQVggRlM6CisJOzsgYyB1c2VkIGZvciBsaW5lYXIga2VybmVsIG1hcHBpbmcsIHVwIHRvIDI1NiBNQgorCTs7IGQgdXNlZCBmb3Igdm1hbGxvYworCTs7IGUsZiB1c2VkIGZvciBtZW1vcnktbWFwcGVkIE5PUiBmbGFzaAorCisjaWZkZWYgQ09ORklHX0NSSVNfTUFDSF9BUlRQRUMzCisJbW92ZS5kCVJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgd2UsIG9uKQkJXAorCQl8IFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgYWNjLCBvbikJCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIGV4LCBvbikJCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIGludiwgb24pICAgICAgICAgICAgXAorCQl8IFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnX2YsIHBhZ2UpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19lLCBwYWdlKQlcCisJCXwgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfZCwgbGluZWFyKSAgICAgIFwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19jLCBsaW5lYXIpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19iLCBsaW5lYXIpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19hLCBwYWdlKQlcCisJCXwgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfOSwgcGFnZSkJXAorCQl8IFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnXzgsIHBhZ2UpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ183LCBwYWdlKQlcCisJCXwgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfNiwgcGFnZSkJXAorCQl8IFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnXzUsIHBhZ2UpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ180LCBsaW5lYXIpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ18zLCBwYWdlKQlcCisJCXwgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfMiwgcGFnZSkJXAorCQl8IFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnXzEsIHBhZ2UpCVwKKwkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ18wLCBsaW5lYXIpLCAkcjIKKyNlbGlmICFkZWZpbmVkKENPTkZJR19FVFJBWF9WQ1NfU0lNKQogCW1vdmUuZAlSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHdlLCBvbikJCVwKIAkJfCBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIGFjYywgb24pCQlcCiAJCXwgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBleCwgb24pCQlcCkBAIC0zMjksNyArMzY3LDcgQEAKIAk7OyBGb3IgamZmczIsIGEgamhlYWQgaXMgcHJlcGVuZGVkIHdoaWNoIGNvbnRhaW5zIHdpdGggbWFnaWMgYW5kIGxlbmd0aC4KIAk7OyBUaGUgamhlYWQgaXMgbm90IHBhcnQgb2YgdGhlIGpmZnMyIHBhcnRpdGlvbiBob3dldmVyLgogI2lmbmRlZiBDT05GSUdfRVRSQVhGU19TSU0KLQltb3ZlLmQJX192bWxpbnV4X2VuZCwgJHIwCisJbW92ZS5kCV9fYnNzX3N0YXJ0LCAkcjAKICNlbHNlCiAJbW92ZS5kCV9fZW5kLCAkcjAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggMGIxZmViZS4uMmVkNDhhZTNkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKQEAgLTk3LDcgKzk3LDExIEBACiAvKgogICogQnVpbGQgdGhlIElSUSBoYW5kbGVyIHN0dWJzIHVzaW5nIG1hY3JvcyBmcm9tIGlycS5oLgogICovCisjaWZkZWYgQ09ORklHX0NSSVNfTUFDSF9BUlRQRUMzCitCVUlMRF9USU1FUl9JUlEoMHgzMSwgMCkKKyNlbHNlCiBCVUlMRF9JUlEoMHgzMSkKKyNlbmRpZgogQlVJTERfSVJRKDB4MzIpCiBCVUlMRF9JUlEoMHgzMykKIEJVSUxEX0lSUSgweDM0KQpAQCAtMTIzLDcgKzEyNywxMSBAQAogQlVJTERfSVJRKDB4NDgpCiBCVUlMRF9JUlEoMHg0OSkKIEJVSUxEX0lSUSgweDRhKQorI2lmZGVmIENPTkZJR19FVFJBWEZTCitCVUlMRF9USU1FUl9JUlEoMHg0YiwgMCkKKyNlbHNlCiBCVUlMRF9JUlEoMHg0YikKKyNlbmRpZgogQlVJTERfSVJRKDB4NGMpCiBCVUlMRF9JUlEoMHg0ZCkKIEJVSUxEX0lSUSgweDRlKQpAQCAtMTk5LDI1ICsyMDcsMjAgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgLSBGSVJTVF9JUlEgPCAzMikKKwkvKiBSZW1lbWJlciwgMSBsZXQgdGhydSwgMCBibG9jay4gKi8KKwlpZiAoaXJxIC0gRklSU1RfSVJRIDwgMzIpIHsKIAkJaW50cl9tYXNrID0gUkVHX1JEX0lOVF9WRUNUKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwKIAkJCXJ3X21hc2ssIDApOwotCWVsc2UKLQkJaW50cl9tYXNrID0gUkVHX1JEX0lOVF9WRUNUKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwKLQkJCXJ3X21hc2ssIDEpOwotCi0JLyogUmVtZW1iZXI7IDEgbGV0IHRocnUsIDAgYmxvY2suICovCi0JaWYgKGlycSAtIEZJUlNUX0lSUSA8IDMyKQogCQlpbnRyX21hc2sgJj0gfigxIDw8IChpcnEgLSBGSVJTVF9JUlEpKTsKLQllbHNlCi0JCWludHJfbWFzayAmPSB+KDEgPDwgKGlycSAtIEZJUlNUX0lSUSAtIDMyKSk7Ci0KLQlpZiAoaXJxIC0gRklSU1RfSVJRIDwgMzIpCiAJCVJFR19XUl9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sIHJ3X21hc2ssCiAJCQkwLCBpbnRyX21hc2spOwotCWVsc2UKKwl9IGVsc2UgeworCQlpbnRyX21hc2sgPSBSRUdfUkRfSU5UX1ZFQ1QoaW50cl92ZWN0LCBpcnFfcmVnc1tjcHVdLAorCQkJcndfbWFzaywgMSk7CisJCWludHJfbWFzayAmPSB+KDEgPDwgKGlycSAtIEZJUlNUX0lSUSAtIDMyKSk7CiAJCVJFR19XUl9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sIHJ3X21hc2ssCiAJCQkxLCBpbnRyX21hc2spOworCX0KICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjI4LDI2ICsyMzEsMjAgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2xvY2ssIGZsYWdzKTsKLQlpZiAoaXJxIC0gRklSU1RfSVJRIDwgMzIpCisJLyogUmVtZW1iZXIsIDEgbGV0IHRocnUsIDAgYmxvY2suICovCisJaWYgKGlycSAtIEZJUlNUX0lSUSA8IDMyKSB7CiAJCWludHJfbWFzayA9IFJFR19SRF9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sCiAJCQlyd19tYXNrLCAwKTsKLQllbHNlCi0JCWludHJfbWFzayA9IFJFR19SRF9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sCi0JCQlyd19tYXNrLCAxKTsKLQotCS8qIFJlbWVtYmVyOyAxIGxldCB0aHJ1LCAwIGJsb2NrLiAqLwotCWlmIChpcnEgLSBGSVJTVF9JUlEgPCAzMikKIAkJaW50cl9tYXNrIHw9ICgxIDw8IChpcnEgLSBGSVJTVF9JUlEpKTsKLQllbHNlCi0JCWludHJfbWFzayB8PSAoMSA8PCAoaXJxIC0gRklSU1RfSVJRIC0gMzIpKTsKLQotCWlmIChpcnEgLSBGSVJTVF9JUlEgPCAzMikKIAkJUkVHX1dSX0lOVF9WRUNUKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwgcndfbWFzaywKIAkJCTAsIGludHJfbWFzayk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWludHJfbWFzayA9IFJFR19SRF9JTlRfVkVDVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sCisJCQlyd19tYXNrLCAxKTsKKwkJaW50cl9tYXNrIHw9ICgxIDw8IChpcnEgLSBGSVJTVF9JUlEgLSAzMikpOwogCQlSRUdfV1JfSU5UX1ZFQ1QoaW50cl92ZWN0LCBpcnFfcmVnc1tjcHVdLCByd19tYXNrLAogCQkJMSwgaW50cl9tYXNrKTsKLQorCX0KICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYwppbmRleCBjOTgxZmQ2Li42YjY1MzMyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGIuYwpAQCAtMTc0LDEwICsxNzQsMTAgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXJjaC9od3JlZ3MvcmVnX21hcC5oPgotI2luY2x1ZGUgPGFyY2gvaHdyZWdzL3JlZ19yZHdyLmg+Ci0jaW5jbHVkZSA8YXJjaC9od3JlZ3MvaW50cl92ZWN0X2RlZnMuaD4KLSNpbmNsdWRlIDxhcmNoL2h3cmVncy9zZXJfZGVmcy5oPgorI2luY2x1ZGUgPGh3cmVncy9yZWdfbWFwLmg+CisjaW5jbHVkZSA8aHdyZWdzL3JlZ19yZHdyLmg+CisjaW5jbHVkZSA8aHdyZWdzL2ludHJfdmVjdF9kZWZzLmg+CisjaW5jbHVkZSA8aHdyZWdzL3Nlcl9kZWZzLmg+CiAKIC8qIEZyb20gZW50cnkuUy4gKi8KIGV4dGVybiB2b2lkIGdkYl9oYW5kbGVfZXhjZXB0aW9uKHZvaWQpOwpAQCAtOTg4LDI2ICs5ODgsMjYgQEAKIAl9CiAJLyogT25seSBzZW5kIFBDLCBmcmFtZSBhbmQgc3RhY2sgcG9pbnRlci4gKi8KIAlyZWFkX3JlZ2lzdGVyKFBDLCAmcmVnX2NvbnQpOwotCXB0ciA9IHBhY2tfaGV4X2J5dGUoUEMpOworCXB0ciA9IHBhY2tfaGV4X2J5dGUocHRyLCBQQyk7CiAJKnB0cisrID0gJzonOwogCXB0ciA9IG1lbTJoZXgocHRyLCAodW5zaWduZWQgY2hhciAqKSZyZWdfY29udCwgcmVnaXN0ZXJfc2l6ZVtQQ10pOwogCSpwdHIrKyA9ICc7JzsKIAogCXJlYWRfcmVnaXN0ZXIoUjgsICZyZWdfY29udCk7Ci0JcHRyID0gcGFja19oZXhfYnl0ZShSOCk7CisJcHRyID0gcGFja19oZXhfYnl0ZShwdHIsIFI4KTsKIAkqcHRyKysgPSAnOic7CiAJcHRyID0gbWVtMmhleChwdHIsICh1bnNpZ25lZCBjaGFyICopJnJlZ19jb250LCByZWdpc3Rlcl9zaXplW1I4XSk7CiAJKnB0cisrID0gJzsnOwogCiAJcmVhZF9yZWdpc3RlcihTUCwgJnJlZ19jb250KTsKLQlwdHIgPSBwYWNrX2hleF9ieXRlKFNQKTsKKwlwdHIgPSBwYWNrX2hleF9ieXRlKHB0ciwgU1ApOwogCSpwdHIrKyA9ICc6JzsKIAlwdHIgPSBtZW0yaGV4KHB0ciwgKHVuc2lnbmVkIGNoYXIgKikmcmVnX2NvbnQsIHJlZ2lzdGVyX3NpemVbU1BdKTsKIAkqcHRyKysgPSAnOyc7CiAKIAkvKiBTZW5kIEVSUCBhcyB3ZWxsOyB0aGlzIHdpbGwgc2F2ZSB1cyBhbiBlbnRpcmUgcmVnaXN0ZXIgZmV0Y2ggaW4gc29tZSBjYXNlcy4gKi8KICAgICAgICAgcmVhZF9yZWdpc3RlcihFUlAsICZyZWdfY29udCk7Ci0JcHRyID0gcGFja19oZXhfYnl0ZShFUlApOworCXB0ciA9IHBhY2tfaGV4X2J5dGUocHRyLCBFUlApOwogICAgICAgICAqcHRyKysgPSAnOic7CiAgICAgICAgIHB0ciA9IG1lbTJoZXgocHRyLCAodW5zaWduZWQgY2hhciAqKSZyZWdfY29udCwgcmVnaXN0ZXJfc2l6ZVtFUlBdKTsKICAgICAgICAgKnB0cisrID0gJzsnOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9rZ2RiX2FzbS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9rZ2RiX2FzbS5TCmluZGV4IGViYTkzZTcuLmYzYTQ3NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwva2dkYl9hc20uUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2tnZGJfYXNtLlMKQEAgLTUsNyArNSw3IEBACiAgKiBwb3J0IGV4Y2VwdGlvbnMgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAgKi8KIAotI2luY2x1ZGUgPGFyY2gvaHdyZWdzL2ludHJfdmVjdC5oPgorI2luY2x1ZGUgPGh3cmVncy9pbnRyX3ZlY3QuaD4KIAogCTs7IEV4cG9ydGVkIGZ1bmN0aW9ucy4KIAkuZ2xvYmwga2dkYl9oYW5kbGVfZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9waW5tdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZmMzYzNy4uMDAwMDAwMAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Bpbm11eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiBBbGxvY2F0b3IgZm9yIEkvTyBwaW5zLiBBbGwgcGlucyBhcmUgYWxsb2NhdGVkIHRvIEdQSU8gYXQgYm9vdHVwLgotICogVW5hc3NpZ25lZCBwaW5zIGFuZCBHUElPIHBpbnMgY2FuIGJlIGFsbG9jYXRlZCB0byBhIGZpeGVkIGludGVyZmFjZQotICogb3IgdGhlIEkvTyBwcm9jZXNzb3IgaW5zdGVhZC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgQXhpcyBDb21tdW5pY2F0aW9ucyBBQi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhcmNoL2h3cmVncy9yZWdfbWFwLmg+Ci0jaW5jbHVkZSA8YXJjaC9od3JlZ3MvcmVnX3Jkd3IuaD4KLSNpbmNsdWRlIDxhcmNoL3Bpbm11eC5oPgotI2luY2x1ZGUgPGFyY2gvaHdyZWdzL3Bpbm11eF9kZWZzLmg+Ci0KLSN1bmRlZiBERUJVRwotCi0jZGVmaW5lIFBPUlRfUElOUyAxOAotI2RlZmluZSBQT1JUUyA0Ci0KLXN0YXRpYyBjaGFyIHBpbnNbUE9SVFNdW1BPUlRfUElOU107Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBpbm11eF9sb2NrKTsKLQotc3RhdGljIHZvaWQgY3Jpc3YzMl9waW5tdXhfc2V0KGludCBwb3J0KTsKLQotaW50Ci1jcmlzdjMyX3Bpbm11eF9pbml0KHZvaWQpCi17Ci0Jc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7Ci0KLQlpZiAoIWluaXRpYWxpemVkKSB7Ci0JCXJlZ19waW5tdXhfcndfcGEgcGEgPSBSRUdfUkQocGlubXV4LCByZWdpX3Bpbm11eCwgcndfcGEpOwotCQlpbml0aWFsaXplZCA9IDE7Ci0JCXBhLnBhMCA9IHBhLnBhMSA9IHBhLnBhMiA9IHBhLnBhMyA9Ci0JCXBhLnBhNCA9IHBhLnBhNSA9IHBhLnBhNiA9IHBhLnBhNyA9IHJlZ2tfcGlubXV4X3llczsKLQkJUkVHX1dSKHBpbm11eCwgcmVnaV9waW5tdXgsIHJ3X3BhLCBwYSk7Ci0JCWNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfQiwgMCwgUE9SVF9QSU5TIC0gMSwgcGlubXV4X2dwaW8pOwotCQljcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDAsIFBPUlRfUElOUyAtIDEsIHBpbm11eF9ncGlvKTsKLQkJY3Jpc3YzMl9waW5tdXhfYWxsb2MoUE9SVF9ELCAwLCBQT1JUX1BJTlMgLSAxLCBwaW5tdXhfZ3Bpbyk7Ci0JCWNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfRSwgMCwgUE9SVF9QSU5TIC0gMSwgcGlubXV4X2dwaW8pOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQKLWNyaXN2MzJfcGlubXV4X2FsbG9jKGludCBwb3J0LCBpbnQgZmlyc3RfcGluLCBpbnQgbGFzdF9waW4sIGVudW0gcGluX21vZGUgbW9kZSkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwotCi0JaWYgKHBvcnQgPiBQT1JUUyB8fCBwb3J0IDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKLQotCWZvciAoaSA9IGZpcnN0X3BpbjsgaSA8PSBsYXN0X3BpbjsgaSsrKQotCXsKLQkJaWYgKChwaW5zW3BvcnRdW2ldICE9IHBpbm11eF9ub25lKSAmJiAocGluc1twb3J0XVtpXSAhPSBwaW5tdXhfZ3BpbykgJiYKLQkJICAgIChwaW5zW3BvcnRdW2ldICE9IG1vZGUpKQotCQl7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwotI2lmZGVmIERFQlVHCi0JCQlwYW5pYygiUGlubXV4IGFsbG9jIGZhaWxlZCFcbiIpOwotI2VuZGlmCi0JCQlyZXR1cm4gLUVQRVJNOwotCQl9Ci0JfQotCi0JZm9yIChpID0gZmlyc3RfcGluOyBpIDw9IGxhc3RfcGluOyBpKyspCi0JCXBpbnNbcG9ydF1baV0gPSBtb2RlOwotCi0JY3Jpc3YzMl9waW5tdXhfc2V0KHBvcnQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQKLWNyaXN2MzJfcGlubXV4X2FsbG9jX2ZpeGVkKGVudW0gZml4ZWRfZnVuY3Rpb24gZnVuY3Rpb24pCi17Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0JY2hhciBzYXZlZFtzaXplb2YgcGluc107Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5tdXhfbG9jaywgZmxhZ3MpOwotCi0JLyogU2F2ZSBpbnRlcm5hbCBkYXRhIGZvciByZWNvdmVyeSAqLwotCW1lbWNweShzYXZlZCwgcGlucywgc2l6ZW9mIHBpbnMpOwotCi0JcmVnX3Bpbm11eF9yd19od3Byb3QgaHdwcm90ID0gUkVHX1JEKHBpbm11eCwgcmVnaV9waW5tdXgsIHJ3X2h3cHJvdCk7Ci0KLQlzd2l0Y2goZnVuY3Rpb24pCi0JewotCWNhc2UgcGlubXV4X3NlcjE6Ci0JCXJldCA9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfQywgNCwgNywgcGlubXV4X2ZpeGVkKTsKLQkJaHdwcm90LnNlcjEgPSByZWdrX3Bpbm11eF95ZXM7Ci0JCWJyZWFrOwotCWNhc2UgcGlubXV4X3NlcjI6Ci0JCXJldCA9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfQywgOCwgMTEsIHBpbm11eF9maXhlZCk7Ci0JCWh3cHJvdC5zZXIyID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF9zZXIzOgotCQlyZXQgPSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDEyLCAxNSwgcGlubXV4X2ZpeGVkKTsKLQkJaHdwcm90LnNlcjMgPSByZWdrX3Bpbm11eF95ZXM7Ci0JCWJyZWFrOwotCWNhc2UgcGlubXV4X3NzZXIwOgotCQlyZXQgPSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDAsIDMsIHBpbm11eF9maXhlZCk7Ci0JCXJldCB8PSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDE2LCAxNiwgcGlubXV4X2ZpeGVkKTsKLQkJaHdwcm90LnNzZXIwID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF9zc2VyMToKLQkJcmV0ID0gY3Jpc3YzMl9waW5tdXhfYWxsb2MoUE9SVF9ELCAwLCA0LCBwaW5tdXhfZml4ZWQpOwotCQlod3Byb3Quc3NlcjEgPSByZWdrX3Bpbm11eF95ZXM7Ci0JCWJyZWFrOwotCWNhc2UgcGlubXV4X2F0YTA6Ci0JCXJldCA9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfRCwgNSwgNywgcGlubXV4X2ZpeGVkKTsKLQkJcmV0IHw9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfRCwgMTUsIDE3LCBwaW5tdXhfZml4ZWQpOwotCQlod3Byb3QuYXRhMCA9IHJlZ2tfcGlubXV4X3llczsKLQkJYnJlYWs7Ci0JY2FzZSBwaW5tdXhfYXRhMToKLQkJcmV0ID0gY3Jpc3YzMl9waW5tdXhfYWxsb2MoUE9SVF9ELCAwLCA0LCBwaW5tdXhfZml4ZWQpOwotCQlyZXQgfD0gY3Jpc3YzMl9waW5tdXhfYWxsb2MoUE9SVF9FLCAxNywgMTcsIHBpbm11eF9maXhlZCk7Ci0JCWh3cHJvdC5hdGExID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF9hdGEyOgotCQlyZXQgPSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDExLCAxNSwgcGlubXV4X2ZpeGVkKTsKLQkJcmV0IHw9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfRSwgMywgMywgcGlubXV4X2ZpeGVkKTsKLQkJaHdwcm90LmF0YTIgPSByZWdrX3Bpbm11eF95ZXM7Ci0JCWJyZWFrOwotCWNhc2UgcGlubXV4X2F0YTM6Ci0JCXJldCA9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfQywgOCwgMTAsIHBpbm11eF9maXhlZCk7Ci0JCXJldCB8PSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0MsIDAsIDIsIHBpbm11eF9maXhlZCk7Ci0JCWh3cHJvdC5hdGEyID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF9hdGE6Ci0JCXJldCA9IGNyaXN2MzJfcGlubXV4X2FsbG9jKFBPUlRfQiwgMCwgMTUsIHBpbm11eF9maXhlZCk7Ci0JCXJldCB8PSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0QsIDgsIDE1LCBwaW5tdXhfZml4ZWQpOwotCQlod3Byb3QuYXRhID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF9ldGgxOgotCQlyZXQgPSBjcmlzdjMyX3Bpbm11eF9hbGxvYyhQT1JUX0UsIDAsIDE3LCBwaW5tdXhfZml4ZWQpOwotCQlod3Byb3QuZXRoMSA9IHJlZ2tfcGlubXV4X3llczsKLQkJaHdwcm90LmV0aDFfbWdtID0gcmVna19waW5tdXhfeWVzOwotCQlicmVhazsKLQljYXNlIHBpbm11eF90aW1lcjoKLQkJcmV0ID0gY3Jpc3YzMl9waW5tdXhfYWxsb2MoUE9SVF9DLCAxNiwgMTYsIHBpbm11eF9maXhlZCk7Ci0JCWh3cHJvdC50aW1lciA9IHJlZ2tfcGlubXV4X3llczsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlubXV4X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoIXJldCkKLQkJUkVHX1dSKHBpbm11eCwgcmVnaV9waW5tdXgsIHJ3X2h3cHJvdCwgaHdwcm90KTsKLQllbHNlCi0JCW1lbWNweShwaW5zLCBzYXZlZCwgc2l6ZW9mIHBpbnMpOwotCi0gIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbm11eF9sb2NrLCBmbGFncyk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotY3Jpc3YzMl9waW5tdXhfc2V0KGludCBwb3J0KQotewotCWludCBpOwotCWludCBncGlvX3ZhbCA9IDA7Ci0JaW50IGlvcF92YWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IFBPUlRfUElOUzsgaSsrKQotCXsKLQkJaWYgKHBpbnNbcG9ydF1baV0gPT0gcGlubXV4X2dwaW8pCi0JCQlncGlvX3ZhbCB8PSAoMSA8PCBpKTsKLQkJZWxzZSBpZiAocGluc1twb3J0XVtpXSA9PSBwaW5tdXhfaW9wKQotCQkJaW9wX3ZhbCB8PSAoMSA8PCBpKTsKLQl9Ci0KLQlSRUdfV1JJVEUoaW50LCByZWdpX3Bpbm11eCArIFJFR19SRF9BRERSX3Bpbm11eF9yd19wYl9naW8gKyA4KnBvcnQsIGdwaW9fdmFsKTsKLQlSRUdfV1JJVEUoaW50LCByZWdpX3Bpbm11eCArIFJFR19SRF9BRERSX3Bpbm11eF9yd19wYl9pb3AgKyA4KnBvcnQsIGlvcF92YWwpOwotCi0jaWZkZWYgREVCVUcKLSAgICAgICBjcmlzdjMyX3Bpbm11eF9kdW1wKCk7Ci0jZW5kaWYKLX0KLQotaW50Ci1jcmlzdjMyX3Bpbm11eF9kZWFsbG9jKGludCBwb3J0LCBpbnQgZmlyc3RfcGluLCBpbnQgbGFzdF9waW4pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWNyaXN2MzJfcGlubXV4X2luaXQoKTsKLQotCWlmIChwb3J0ID4gUE9SVFMgfHwgcG9ydCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBpbm11eF9sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSBmaXJzdF9waW47IGkgPD0gbGFzdF9waW47IGkrKykKLQkJcGluc1twb3J0XVtpXSA9IHBpbm11eF9ub25lOwotCi0JY3Jpc3YzMl9waW5tdXhfc2V0KHBvcnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbm11eF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotY3Jpc3YzMl9waW5tdXhfZHVtcCh2b2lkKQotewotCWludCBpLCBqOwotCi0JY3Jpc3YzMl9waW5tdXhfaW5pdCgpOwotCi0JZm9yIChpID0gMDsgaSA8IFBPUlRTOyBpKyspCi0JewotCQlwcmludGsoIlBvcnQgJWNcbiIsICdCJytpKTsKLQkJZm9yIChqID0gMDsgaiA8IFBPUlRfUElOUzsgaisrKQotCQkJcHJpbnRrKCIgIFBpbiAlZCA9ICVkXG4iLCBqLCBwaW5zW2ldW2pdKTsKLQl9Ci19Ci0KLV9faW5pdGNhbGwoY3Jpc3YzMl9waW5tdXhfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NldHVwLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NldHVwLmMKaW5kZXggNzJlOWU4My4uNjFlMTBhZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2V0dXAuYwpAQCAtOSw2ICs5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKICNkZWZpbmUgSEFTX0ZQVSAgICAgICAgIDB4MDAwMQpAQCAtNDMsMTQgKzQ2LDE1IEBACiAKIAl7IkVUUkFYIDEwMExYIHYyIiwgMTEsIDgsIEhBU19FVEhFUk5FVDEwMCB8IEhBU19TQ1NJIHwgSEFTX0FUQSB8IEhBU19VU0IKIAkJCSAgICAgICAgfCBIQVNfTU1VfSwKLQorI2lmZGVmIENPTkZJR19FVFJBWEZTCiAJeyJFVFJBWCBGUyIsIDMyLCAzMiwgSEFTX0VUSEVSTkVUMTAwIHwgSEFTX0FUQSB8IEhBU19NTVV9LAotCisjZWxzZQorCXsiQVJUUEVDLTMiLCAzMiwgMzIsIEhBU19FVEhFUk5FVDEwMCB8IEhBU19NTVV9LAorI2VuZGlmCiAJeyJVbmtub3duIiwgMCwgMCwgMH0KIH07CiAKLWludAotc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK2ludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludCBpOwogCWludCBjcHUgPSAoaW50KXYgLSAxOwpAQCAtMTA3LDkgKzExMSw2MyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAotdm9pZAotc2hvd19ldHJheF9jb3B5cmlnaHQodm9pZCkKK3ZvaWQgc2hvd19ldHJheF9jb3B5cmlnaHQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPCi0gICAgICAgICAgICAgICAiTGludXgvQ1JJU3YzMiBwb3J0IG9uIEVUUkFYIEZTIChDKSAyMDAzLCAyMDA0IEF4aXMgQ29tbXVuaWNhdGlvbnMgQUJcbiIpOworI2lmZGVmIENPTkZJR19FVFJBWEZTCisJcHJpbnRrKEtFUk5fSU5GTyAiTGludXgvQ1JJU3YzMiBwb3J0IG9uIEVUUkFYIEZTICIKKwkJIihDKSAyMDAzLCAyMDA0IEF4aXMgQ29tbXVuaWNhdGlvbnMgQUJcbiIpOworI2Vsc2UKKwlwcmludGsoS0VSTl9JTkZPICJMaW51eC9DUklTdjMyIHBvcnQgb24gQVJUUEVDLTMgIgorCQkiKEMpIDIwMDMtMjAwOSBBeGlzIENvbW11bmljYXRpb25zIEFCXG4iKTsKKyNlbmRpZgogfQorCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaTJjX2luZm9bXSA9IHsKKwl7STJDX0JPQVJEX0lORk8oImNhbWJsb2NrIiwgMHg0Myl9LAorCXtJMkNfQk9BUkRfSU5GTygidG1wMTAwIiwgMHg0OCl9LAorCXtJMkNfQk9BUkRfSU5GTygidG1wMTAwIiwgMHg0QSl9LAorCXtJMkNfQk9BUkRfSU5GTygidG1wMTAwIiwgMHg0Qyl9LAorCXtJMkNfQk9BUkRfSU5GTygidG1wMTAwIiwgMHg0RCl9LAorCXtJMkNfQk9BUkRfSU5GTygidG1wMTAwIiwgMHg0RSl9LAorI2lmZGVmIENPTkZJR19SVENfRFJWX1BDRjg1NjMKKwl7STJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRVRSQVhfVklSVFVBTF9HUElPCisJe0kyQ19CT0FSRF9JTkZPKCJ2Z3BpbyIsIDB4MjApfSwKKwl7STJDX0JPQVJEX0lORk8oInZncGlvIiwgMHgyMSl9LAorI2VuZGlmCisJe0kyQ19CT0FSRF9JTkZPKCJwY2E5NTM2IiwgMHg0MSl9LAorCXtJMkNfQk9BUkRfSU5GTygiZm5wMzAwIiwgMHg0MCl9LAorCXtJMkNfQk9BUkRfSU5GTygiZm5wMzAwIiwgMHg0Mil9LAorCXtJMkNfQk9BUkRfSU5GTygiYWRjMTAxIiwgMHg1NCl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGkyY19pbmZvMltdID0geworCXtJMkNfQk9BUkRfSU5GTygiY2FtYmxvY2siLCAweDQzKX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ0bXAxMDAiLCAweDQ4KX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ0bXAxMDAiLCAweDRBKX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ0bXAxMDAiLCAweDRDKX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ0bXAxMDAiLCAweDREKX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ0bXAxMDAiLCAweDRFKX0sCisjaWZkZWYgQ09ORklHX0VUUkFYX1ZJUlRVQUxfR1BJTworCXtJMkNfQk9BUkRfSU5GTygidmdwaW8iLCAweDIwKX0sCisJe0kyQ19CT0FSRF9JTkZPKCJ2Z3BpbyIsIDB4MjEpfSwKKyNlbmRpZgorCXtJMkNfQk9BUkRfSU5GTygicGNhOTUzNiIsIDB4NDEpfSwKKwl7STJDX0JPQVJEX0lORk8oImZucDMwMCIsIDB4NDApfSwKKwl7STJDX0JPQVJEX0lORk8oImZucDMwMCIsIDB4NDIpfSwKKwl7STJDX0JPQVJEX0lORk8oImFkYzEwMSIsIDB4NTQpfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBpMmNfaW5mbzNbXSA9IHsKKwl7STJDX0JPQVJEX0lORk8oImFkYzEwMSIsIDB4NTQpfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV0cmF4X2luaXQodm9pZCkKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfaW5mbywgQVJSQVlfU0laRShpMmNfaW5mbykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyY19pbmZvMiwgQVJSQVlfU0laRShpMmNfaW5mbzIpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygyLCBpMmNfaW5mbzMsIEFSUkFZX1NJWkUoaTJjX2luZm8zKSk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGV0cmF4X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMGI3ZTNmMS4uYjNhMDVhZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jCkBAIC01ODcsNyArNTg3LDcgQEAKIAkJfQogCiAJCWlmIChyZWdzLT5yMTAgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSyl7Ci0JCQlyZWdzLT5yMTAgPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKKwkJCXJlZ3MtPnI5ID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CiAJCQlyZWdzLT5lcnAgLT0gMjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKaW5kZXggMWVlMGUxMC4uYTU0NTIxMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDEwIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIKICAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtMzYsNiArMzYsMzAgQEAKIC8qIE51bWJlciBvZiA3NjMgY291bnRzIGJlZm9yZSB3YXRjaGRvZyBiaXRlcyAqLwogI2RlZmluZSBFVFJBWF9XRF9DTlQJCSgoMipFVFJBWF9XRF9IWikvSFogKyAxKQogCisvKiBSZWdpc3RlciB0aGUgY29udGludW9zIHJlYWRvbmx5IHRpbWVyIGF2YWlsYWJsZSBpbiBGUyBhbmQgQVJUUEVDLTMuICAqLworc3RhdGljIGN5Y2xlX3QgcmVhZF9jb250X3JvdGltZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXJldHVybiAodTMyKVJFR19SRCh0aW1lciwgcmVnaV90aW1lcjAsIHJfdGltZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY29udF9yb3RpbWUgPSB7CisJLm5hbWUgICA9ICJjcmlzdjMyX3JvdGltZSIsCisJLnJhdGluZyA9IDMwMCwKKwkucmVhZCAgID0gcmVhZF9jb250X3JvdGltZSwKKwkubWFzayAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLnNoaWZ0ICA9IDEwLAorCS5mbGFncyAgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV0cmF4X2luaXRfY29udF9yb3RpbWUodm9pZCkKK3sKKwljb250X3JvdGltZS5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQoMTAwMDAwLCBjb250X3JvdGltZS5zaGlmdCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNvbnRfcm90aW1lKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoZXRyYXhfaW5pdF9jb250X3JvdGltZSk7CisKKwogdW5zaWduZWQgbG9uZyB0aW1lcl9yZWdzW05SX0NQVVNdID0KIHsKIAlyZWdpX3RpbWVyMCwKQEAgLTY3LDQzICs5MSw2IEBACiAJcmV0dXJuIG5zOwogfQogCi11bnNpZ25lZCBsb25nIGRvX3Nsb3dfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JdW5zaWduZWQgbG9uZyB1c2VjX2NvdW50ID0gMDsKLQotCS8qIEZvciB0aGUgZmlyc3QgY2FsbCBhZnRlciBib290ICovCi0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfcCA9IFRJTUVSMF9ESVY7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgamlmZmllc19wID0gMDsKLQotCS8qIENhY2hlIHZvbGF0aWxlIGppZmZpZXMgdGVtcG9yYXJpbHk7IHdlIGhhdmUgSVJRcyB0dXJuZWQgb2ZmLiAqLwotCXVuc2lnbmVkIGxvbmcgamlmZmllc190OwotCi0JLyogVGhlIHRpbWVyIGludGVycnVwdCBjb21lcyBmcm9tIEV0cmF4IHRpbWVyIDAuIEluIG9yZGVyIHRvIGdldAotCSAqIGJldHRlciBwcmVjaXNpb24sIHdlIGNoZWNrIHRoZSBjdXJyZW50IHZhbHVlLiBJdCBtaWdodCBoYXZlCi0JICogdW5kZXJmbG93ZWQgYWxyZWFkeSB0aG91Z2guICovCi0JY291bnQgPSBSRUdfUkQodGltZXIsIHJlZ2lfdGltZXIwLCByX3RtcjBfZGF0YSk7Ci0JamlmZmllc190ID0gamlmZmllczsKLQotCS8qIEF2b2lkaW5nIHRpbWVyIGluY29uc2lzdGVuY2llcyAodGhleSBhcmUgcmFyZSwgYnV0IHRoZXkgaGFwcGVuKQotCSAqIFRoZXJlIGlzIG9uZSBwcm9ibGVtIHRoYXQgbXVzdCBiZSBhdm9pZGVkIGhlcmU6Ci0JICoJMS4gdGhlIHRpbWVyIGNvdW50ZXIgdW5kZXJmbG93cwotCSAqLwotCWlmKCBqaWZmaWVzX3QgPT0gamlmZmllc19wICkgewotCQlpZiggY291bnQgPiBjb3VudF9wICkgewotCQkJLyogVGltZXIgd3JhcHBlZCwgdXNlIG5ldyBjb3VudCBhbmQgcHJlc2NhbGUuCi0JCQkgKiBJbmNyZWFzZSB0aGUgdGltZSBjb3JyZXNwb25kaW5nIHRvIG9uZSBqaWZmeS4KLQkJCSAqLwotCQkJdXNlY19jb3VudCA9IDEwMDAwMDAvSFo7Ci0JCX0KLQl9IGVsc2UKLQkJamlmZmllc19wID0gamlmZmllc190OwotICAgICAgICBjb3VudF9wID0gY291bnQ7Ci0JLyogQ29udmVydCB0aW1lciB2YWx1ZSB0byB1c2VjICovCi0JLyogMTAwIE1IeiB0aW1lciwgZGl2aWRlIGJ5IDEwMCB0byBnZXQgdXNlYyAqLwotCXVzZWNfY291bnQgKz0gIChUSU1FUjBfRElWIC0gY291bnQpIC8gMTAwOwotCXJldHVybiB1c2VjX2NvdW50OwotfQogCiAvKiBGcm9tIHRpbWVyIE1EUyBkZXNjcmliaW5nIHRoZSBoYXJkd2FyZSB3YXRjaGRvZzoKICAqIDQuMy4xIFdhdGNoZG9nIE9wZXJhdGlvbgpAQCAtMTI2LDggKzExMyw3IEBACiAgKiBpcyB1c2VkIHRob3VnaCwgc28gc2V0IHRoaXMgcmVhbGx5IGxvdy4gKi8KICNkZWZpbmUgV0FUQ0hET0dfTUlOX0ZSRUVfUEFHRVMgOAogCi12b2lkCi1yZXNldF93YXRjaGRvZyh2b2lkKQordm9pZCByZXNldF93YXRjaGRvZyh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX0VUUkFYX1dBVENIRE9HKQogCXJlZ190aW1lcl9yd193ZF9jdHJsIHdkX2N0cmwgPSB7IDAgfTsKQEAgLTE0Nyw4ICsxMzMsNyBAQAogCiAvKiBzdG9wIHRoZSB3YXRjaGRvZyAtIHdlIHN0aWxsIG5lZWQgdGhlIGNvcnJlY3Qga2V5ICovCiAKLXZvaWQKLXN0b3Bfd2F0Y2hkb2codm9pZCkKK3ZvaWQgc3RvcF93YXRjaGRvZyh2b2lkKQogewogI2lmIGRlZmluZWQoQ09ORklHX0VUUkFYX1dBVENIRE9HKQogCXJlZ190aW1lcl9yd193ZF9jdHJsIHdkX2N0cmwgPSB7IDAgfTsKQEAgLTE2Miw4ICsxNDcsNyBAQAogCiBleHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXZvaWQKLWhhbmRsZV93YXRjaGRvZ19iaXRlKHN0cnVjdCBwdF9yZWdzKiByZWdzKQordm9pZCBoYW5kbGVfd2F0Y2hkb2dfYml0ZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICNpZiBkZWZpbmVkKENPTkZJR19FVFJBWF9XQVRDSERPRykKIAlleHRlcm4gaW50IGNhdXNlX29mX2RlYXRoOwpAQCAtMjAzLDggKzE4Nyw3IEBACiAgKi8KIGV4dGVybiB2b2lkIGNyaXNfZG9fcHJvZmlsZShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLXN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QKLXRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaW5saW5lIGlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMjMzLDcgKzIxNiw5IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKIAogCS8qIENhbGwgdGhlIHJlYWwgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKIAlkb190aW1lcigxKTsKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTI0Niw4ICsyMzEsNyBAQAogCS5uYW1lID0gInRpbWVyIgogfTsKIAotdm9pZCBfX2luaXQKLWNyaXNfdGltZXJfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgY3Jpc190aW1lcl9pbml0KHZvaWQpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlyZWdfdGltZXJfcndfdG1yMF9jdHJsIHRtcjBfY3RybCA9IHsgMCB9OwpAQCAtMjczLDggKzI1Nyw3IEBACiAJUkVHX1dSKHRpbWVyLCB0aW1lcl9yZWdzW2NwdV0sIHJ3X2ludHJfbWFzaywgdGltZXJfaW50cl9tYXNrKTsKIH0KIAotdm9pZCBfX2luaXQKLXRpbWVfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CiAJcmVnX2ludHJfdmVjdF9yd19tYXNrIGludHJfbWFzazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90cmFwcy5jCmluZGV4IDkwMDNlMzguLjhiYmUwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RyYXBzLmMKQEAgLTksOCArOSw3IEBACiAjaW5jbHVkZSA8aHdyZWdzL2ludHJfdmVjdF9kZWZzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCi12b2lkCi1zaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJLyoKIAkgKiBJdCdzIHBvc3NpYmxlIHRvIHVzZSBlaXRoZXIgdGhlIFVTUCByZWdpc3RlciBvciBjdXJyZW50LT50aHJlYWQudXNwLgpAQCAtMTAxLDggKzEwMCw3IEBACiAJfQogfQogCi12b2lkCi1hcmNoX2VuYWJsZV9ubWkodm9pZCkKK3ZvaWQgYXJjaF9lbmFibGVfbm1pKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9jaGVja3N1bS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9jaGVja3N1bS5TCmluZGV4IDg3ZjNmZDcuLjRhNzJhOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvY2hlY2tzdW0uUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL2NoZWNrc3VtLlMKQEAgLTYsNiArNiw3IEBACiAgKi8KIAogCS5nbG9ibAljc3VtX3BhcnRpYWwKKwkudHlwZSAgIGNzdW1fcGFydGlhbCxAZnVuY3Rpb24KIGNzdW1fcGFydGlhbDoKIAogCTs7IHIxMCAtIHNyYwpAQCAtODMsMyArODQsNSBAQAogCWFkZHUuYglbJHIxMF0sJHIxMgogCXJldAogCW1vdmUuZAkkcjEyLCRyMTAKKworCS5zaXplICAgY3N1bV9wYXJ0aWFsLCAuLWNzdW1fcGFydGlhbApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9jaGVja3N1bWNvcHkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvY2hlY2tzdW1jb3B5LlMKaW5kZXggMjFhYWJlOS4uNTRlMjA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9jaGVja3N1bWNvcHkuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL2NoZWNrc3VtY29weS5TCkBAIC05LDYgKzksNyBAQAogICovCiAKIAkuZ2xvYmwJY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaworCS50eXBlICAgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayxAZnVuY3Rpb24KIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2s6CiAKIAk7OyByMTAgLSBzcmMKQEAgLTg5LDMgKzkwLDUgQEAKIAltb3ZlLmIJJHI5LFskcjExXQogCXJldAogCW1vdmUuZAkkcjEzLCRyMTAKKworCS5zaXplICAgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjaywgLiAtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3BpbmxvY2suUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3BpbmxvY2suUwppbmRleCA3OTA4N2VmLi5mZTYxMGI5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3NwaW5sb2NrLlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9zcGlubG9jay5TCkBAIC02LDcgKzYsOSBAQAogCiAKIAkuZ2xvYmFsIGNyaXNfc3Bpbl9sb2NrCisJLnR5cGUgICBjcmlzX3NwaW5fbG9jayxAZnVuY3Rpb24KIAkuZ2xvYmFsIGNyaXNfc3Bpbl90cnlsb2NrCisJLnR5cGUgICBjcmlzX3NwaW5fdHJ5bG9jayxAZnVuY3Rpb24KIAogCS50ZXh0CiAKQEAgLTIyLDYgKzI0LDggQEAKIAlyZXQKIAlub3AKIAorCS5zaXplICAgY3Jpc19zcGluX2xvY2ssIC4gLSBjcmlzX3NwaW5fbG9jaworCiBjcmlzX3NwaW5fdHJ5bG9jazoKIAljbGVhcmYJcAogMToJbW92ZS5iCVskcjEwXSwgJHIxMQpAQCAtMzEsMyArMzUsNiBAQAogICAgICAgICBjbGVhcmYJcAogCXJldAogCW1vdnUuYgkkcjExLCRyMTAKKworCS5zaXplICAgY3Jpc19zcGluX3RyeWxvY2ssIC4gLSBjcmlzX3NwaW5fdHJ5bG9jaworCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9LY29uZmlnIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvS2NvbmZpZwppbmRleCBhNGRmMDZkLi43Nzk2YWFmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL0tjb25maWcKQEAgLTMzLDYgKzMzLDEwIEBACiAJaGV4ICJERFIyIGNvbmZpZyIKIAlkZWZhdWx0ICIwIgogCitjb25maWcgRVRSQVhfRERSMl9MQVRFTkNZCisJaGV4ICJERFIyIGxhdGVuY3kiCisJZGVmYXVsdCAiMCIKKwogY29uZmlnIEVUUkFYX1BJT19DRTBfQ0ZHCiAgICAgICAgaGV4ICJQSU8gQ0UwIGNvbmZpZ3VyYXRpb24iCiAgICAgICAgZGVmYXVsdCAiMCIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2RyYW1faW5pdC5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvZHJhbV9pbml0LlMKaW5kZXggOTRkNmI0MS4uZWM4NjQ4YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvZHJhbV9pbml0LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvZHJhbV9pbml0LlMKQEAgLTI0LDExICsyNCwyMSBAQAogCiAJOzsgUmVmZXIgdG8gZGRyMiBNRFMgZm9yIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAKKwk7IDIuIFdhaXQgMjAwdXMKKwltb3ZlLmQgICAxMDAwMCwgJHIyCisxOglibmUgICAgICAxYgorCXN1YnEgICAgIDEsICRyMgorCiAJOyBTdGFydCBjbG9jawogCW1vdmUuZCAgIFJFR19BRERSKGRkcjIsIHJlZ2lfZGRyMl9jdHJsLCByd19waHlfY2ZnKSwgJHIwCiAJbW92ZS5kICAgUkVHX1NUQVRFKGRkcjIsIHJ3X3BoeV9jZmcsIGVuLCB5ZXMpLCAkcjEKIAltb3ZlLmQgICAkcjEsIFskcjBdCiAKKwk7IDIuIFdhaXQgMjAwdXMKKwltb3ZlLmQgICAxMDAwMCwgJHIyCisxOglibmUgICAgICAxYgorCXN1YnEgICAgIDEsICRyMgorCiAJOyBSZXNldCBwaHkgYW5kIHN0YXJ0IGNhbGlicmF0aW9uCiAJbW92ZS5kICAgUkVHX0FERFIoZGRyMiwgcmVnaV9kZHIyX2N0cmwsIHJ3X3BoeV9jdHJsKSwgJHIwCiAJbW92ZS5kICAgUkVHX1NUQVRFKGRkcjIsIHJ3X3BoeV9jdHJsLCByc3QsIHllcykgfCBcCkBAIC01Miw2ICs2MiwxMCBAQAogCWxzbHEgICAgIDE2LCAkcjEKIAlvci5kICAgICAkcjMsICRyMQogCW1vdmUuZCAgICRyMSwgWyRyMF0KKwk7IDIuIFdhaXQgMjAwdXMKKwltb3ZlLmQgICAxMDAwMCwgJHI0CisxOglibmUgICAgICAxYgorCXN1YnEgICAgIDEsICRyNAogCWNtcC5kICAgIHNkcmFtX2NvbW1hbmRzX2VuZCwgJHIyCiAJYmxvICAgICAgY29tbWFuZF9sb29wCiAJbm9wCkBAIC02Myw3ICs3Nyw3IEBACiAKIAk7IFNldCBsYXRlbmN5CiAJbW92ZS5kICAgUkVHX0FERFIoZGRyMiwgcmVnaV9kZHIyX2N0cmwsIHJ3X2xhdGVuY3kpLCAkcjAKLQltb3ZlLmQgICAweDEzLCAkcjEKKwltb3ZlLmQgICBDT05GSUdfRVRSQVhfRERSMl9MQVRFTkNZLCAkcjEKIAltb3ZlLmQgICAkcjEsIFskcjBdCiAKIAk7IFNldCBjb25maWd1cmF0aW9uCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9od19zZXR0aW5ncy5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaHdfc2V0dGluZ3MuUwppbmRleCAyNThhNjMyLi4wMTQ1NzI1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9od19zZXR0aW5ncy5TCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2h3X3NldHRpbmdzLlMKQEAgLTMxLDYgKzMxLDggQEAKIAk7IFJlZ2lzdGVyIHZhbHVlcwogCS5kd29yZCBSRUdfQUREUihkZHIyLCByZWdpX2RkcjJfY3RybCwgcndfY2ZnKQogCS5kd29yZCBDT05GSUdfRVRSQVhfRERSMl9DT05GSUcKKwkuZHdvcmQgUkVHX0FERFIoZGRyMiwgcmVnaV9kZHIyX2N0cmwsIHJ3X2xhdGVuY3kpCisJLmR3b3JkIENPTkZJR19FVFJBWF9ERFIyX0xBVEVOQ1kKIAkuZHdvcmQgUkVHX0FERFIoZGRyMiwgcmVnaV9kZHIyX2N0cmwsIHJ3X3RpbWluZykKIAkuZHdvcmQgQ09ORklHX0VUUkFYX0REUjJfVElNSU5HCiAJLmR3b3JkIENPTkZJR19FVFJBWF9ERFIyX01SUwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL2luaXQuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9pbml0LmMKaW5kZXggY2FlYjkyMS4uMDc2OGJjNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL2luaXQuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vaW5pdC5jCkBAIC0yNyw4ICsyNyw3IEBACiAgKiBhdCBrc2VnXzQgdGh1cyB0aGUga3NlZ3MgYXJlIHNldCB1cCBhZ2Fpbi4gQWxzbyBjbGVhciB0aGUgVExCIGFuZCBkbyB2YXJpb3VzCiAgKiBvdGhlciBwYWdpbmcgc3R1ZmYuCiAgKi8KLXZvaWQgX19pbml0Ci1jcmlzX21tdV9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBjcmlzX21tdV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBtbXVfY29uZmlnOwogCXVuc2lnbmVkIGxvbmcgbW11X2tiYXNlX2hpOwpAQCAtNTUsMTQgKzU0LDIzIEBACiAJLyogSW5pdGlhbGlzZSB0aGUgVExCLiBGdW5jdGlvbiBmb3VuZCBpbiB0bGIuYy4gKi8KIAl0bGJfaW5pdCgpOwogCi0JLyogRW5hYmxlIGV4Y2VwdGlvbnMgYW5kIGluaXRpYWxpemUgdGhlIGtlcm5lbCBzZWdtZW50cy4gKi8KKwkvKgorCSAqIEVuYWJsZSBleGNlcHRpb25zIGFuZCBpbml0aWFsaXplIHRoZSBrZXJuZWwgc2VnbWVudHMuCisJICogU2VlIGhlYWQuUyBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBBUlRQRUMtMyBhbmQgRVRSQVggRlMuCisJICovCiAJbW11X2NvbmZpZyA9ICggUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCB3ZSwgb24pICAgICAgICB8CiAJCSAgICAgICBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIGFjYywgb24pICAgICAgIHwKIAkJICAgICAgIFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgZXgsIG9uKSAgICAgICAgfAogCQkgICAgICAgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBpbnYsIG9uKSAgICAgICB8CisjaWZkZWYgQ09ORklHX0NSSVNfTUFDSF9BUlRQRUMzCisJCSAgICAgICBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19mLCBwYWdlKSAgIHwKKwkJICAgICAgIFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnX2UsIHBhZ2UpICAgfAorCQkgICAgICAgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfZCwgbGluZWFyKSB8CisjZWxzZQogCQkgICAgICAgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfZiwgbGluZWFyKSB8CiAJCSAgICAgICBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19lLCBsaW5lYXIpIHwKIAkJICAgICAgIFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnX2QsIHBhZ2UpICAgfAorI2VuZGlmCiAJCSAgICAgICBSRUdfU1RBVEUobW11LCByd19tbV9jZmcsIHNlZ19jLCBsaW5lYXIpIHwKIAkJICAgICAgIFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnX2IsIGxpbmVhcikgfAogI2lmbmRlZiBDT05GSUdfRVRSQVhfVkNTX1NJTQpAQCAtODEsOSArODksMTUgQEAKIAkJICAgICAgIFJFR19TVEFURShtbXUsIHJ3X21tX2NmZywgc2VnXzEsIHBhZ2UpICAgfAogCQkgICAgICAgUkVHX1NUQVRFKG1tdSwgcndfbW1fY2ZnLCBzZWdfMCwgcGFnZSkpOwogCisJLyogU2VlIGhlYWQuUyBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBBUlRQRUMtMyBhbmQgRVRSQVggRlMuICovCiAJbW11X2tiYXNlX2hpID0gKCBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9mLCAweDApIHwKKyNpZmRlZiBDT05GSUdfQ1JJU19NQUNIX0FSVFBFQzMKKwkJCSBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9lLCAweDApIHwKKwkJCSBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9kLCAweDUpIHwKKyNlbHNlCiAJCQkgUkVHX0ZJRUxEKG1tdSwgcndfbW1fa2Jhc2VfaGksIGJhc2VfZSwgMHg4KSB8CiAJCQkgUkVHX0ZJRUxEKG1tdSwgcndfbW1fa2Jhc2VfaGksIGJhc2VfZCwgMHgwKSB8CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9jLCAweDQpIHwKIAkJCSBSRUdfRklFTEQobW11LCByd19tbV9rYmFzZV9oaSwgYmFzZV9iLCAweGIpIHwKICNpZm5kZWYgQ09ORklHX0VUUkFYX1ZDU19TSU0KQEAgLTEyOSw4ICsxNDMsNyBAQAogCVNVUFBfUkVHX1dSKFJXX0dDX0NGRywgMHhmKTsgLyogSU1NVSwgRE1NVSwgSUNhY2hlLCBEQ2FjaGUgb24gKi8KIH0KIAotdm9pZCBfX2luaXQKLXBhZ2luZ19pbml0KHZvaWQpCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQogewogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL21tdS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL21tdS5TCmluZGV4IGYxMjVkOTEuLjcyNzI3YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9tbXUuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vbW11LlMKQEAgLTM4LDYgKzM4LDcgQEAKIDsgdG8gaGFuZGxlIHRoZSBmYXVsdC4KIC5tYWNybwlNTVVfQlVTX0ZBVUxUX0hBTkRMRVIgaGFuZGxlciwgbW11LCB3ZSwgZXgKIAkuZ2xvYmwJXGhhbmRsZXIKKwkudHlwZSAgIFxoYW5kbGVyLCJmdW5jdGlvbiIKIFxoYW5kbGVyOgogCVNBVkVfQUxMCiAJbW92ZQlcbW11LCAkc3JzCTsgU2VsZWN0IE1NVSBzdXBwb3J0IHJlZ2lzdGVyIGJhbmsKQEAgLTUyLDYgKzUzLDcgQEAKIAlub3AKIAliYQlyZXRfZnJvbV9pbnRyCiAJbm9wCisJLnNpemUgICBcaGFuZGxlciwgLiAtIFxoYW5kbGVyCiAuZW5kbQogCiA7IFJlZmlsbCBoYW5kbGVyLiBUaHJlZSBjYXNlcyBtYXkgb2NjdXI6CkBAIC04NCw2ICs4Niw3IEBACiAyOgkuZHdvcmQJMAkJOyBsYXN0X3JlZmlsbF9jYXVzZQogCS50ZXh0CiAJLmdsb2JsIFxoYW5kbGVyCisJLnR5cGUgICBcaGFuZGxlciwgImZ1bmN0aW9uIgogXGhhbmRsZXI6CiAJc3VicQk0LCAkc3AKIDsgKFRoZSBwaXBlbGluZSBzdGFsbHMgZm9yIG9uZSBjeWNsZTsgJHNwIHVzZWQgYXMgYWRkcmVzcyBpbiB0aGUgbmV4dCBjeWNsZS4pCkBAIC0xOTYsNiArMTk5LDcgQEAKIAk7IFJldHVybgogCWJhCXJldF9mcm9tX2ludHIKIAlub3AKKwkuc2l6ZSAgIFxoYW5kbGVyLCAuIC0gXGhhbmRsZXIKIC5lbmRtCiAKIAk7IFRoaXMgaXMgdGhlIE1NVSBidXMgZmF1bHQgaGFuZGxlcnMuCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvY3Jpcy9ib290L01ha2VmaWxlCmluZGV4IDE0NGYzYWYuLjZlM2I1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9ib290L01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiBvYmpjb3B5ZmxhZ3MtJChDT05GSUdfRVRSQVhfQVJDSF9WMTApICs9IC1SIC5ub3RlIC1SIC5jb21tZW50Ci1vYmpjb3B5ZmxhZ3MtJChDT05GSUdfRVRSQVhfQVJDSF9WMzIpICs9IC0tcmVtb3ZlLXNlY3Rpb249LmJzcworb2JqY29weWZsYWdzLSQoQ09ORklHX0VUUkFYX0FSQ0hfVjMyKSArPSAtLXJlbW92ZS1zZWN0aW9uPS5ic3MgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZS5nbnUuYnVpbGQtaWQKIAogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5ICQob2JqY29weWZsYWdzLXkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9jcmlzL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNDdiYzE5MC4uNTQ4ZDg4NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9jcmlzL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBzdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCk7CiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKLXN0YXRpYyB2b2lkIHB1dHMoY29uc3QgY2hhciAqKTsKK3N0YXRpYyB2b2lkIGFwdXRzKGNvbnN0IGNoYXIgKnMpOwogCiBleHRlcm4gY2hhciAqaW5wdXRfZGF0YTsgIC8qIGxpdmVzIGluIGhlYWQuUyAqLwogCkBAIC0xMzcsNTIgKzEzNywzNyBAQAogCiAJUkVHX1dSKHNlciwgcmVnaV9zZXIsIHJ3X2RvdXQsIGRvdXQpOwogfQorI2RlZmluZSBTRVJPVVQoUywgTikgXAorCWRvIHsgXAorCQlzZXJvdXQoUywgcmVnaV9zZXIgIyMgTik7IFwKKwkJcysrOyBcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNFUk9VVChTLCBOKSBkbyB7IFwKKwkJd2hpbGUgKCEoKlJfU0VSSUFMICMjIE4gIyMgX1NUQVRVUyAmICgxIDw8IDUpKSkgXAorCQkJOyBcCisJCSpSX1NFUklBTCAjIyBOICMjIF9UUl9EQVRBID0gKnMrKzsgXAorCX0gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgcHV0cyhjb25zdCBjaGFyICpzKQorc3RhdGljIHZvaWQgYXB1dHMoY29uc3QgY2hhciAqcykKIHsKICNpZm5kZWYgQ09ORklHX0VUUkFYX0RFQlVHX1BPUlRfTlVMTAogCXdoaWxlICgqcykgewogI2lmZGVmIENPTkZJR19FVFJBWF9ERUJVR19QT1JUMAotI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCQlzZXJvdXQocywgcmVnaV9zZXIwKTsKLSNlbHNlCi0JCXdoaWxlICghKCpSX1NFUklBTDBfU1RBVFVTICYgKDEgPDwgNSkpKQotCQkJOwotCQkqUl9TRVJJQUwwX1RSX0RBVEEgPSAqcysrOwotI2VuZGlmCisJCVNFUk9VVChzLCAwKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9ERUJVR19QT1JUMQotI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCQlzZXJvdXQocywgcmVnaV9zZXIxKTsKLSNlbHNlCi0JCXdoaWxlICghKCpSX1NFUklBTDFfU1RBVFVTICYgKDEgPDwgNSkpKQotCQkJOwotCQkqUl9TRVJJQUwxX1RSX0RBVEEgPSAqcysrOwotI2VuZGlmCisJCVNFUk9VVChzLCAxKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9ERUJVR19QT1JUMgotI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCQlzZXJvdXQocywgcmVnaV9zZXIyKTsKLSNlbHNlCi0JCXdoaWxlICghKCpSX1NFUklBTDJfU1RBVFVTICYgKDEgPDwgNSkpKQotCQkJOwotCQkqUl9TRVJJQUwyX1RSX0RBVEEgPSAqcysrOwotI2VuZGlmCisJCVNFUk9VVChzLCAyKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19FVFJBWF9ERUJVR19QT1JUMwotI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCQlzZXJvdXQocywgcmVnaV9zZXIzKTsKLSNlbHNlCi0JCXdoaWxlICghKCpSX1NFUklBTDNfU1RBVFVTICYgKDEgPDwgNSkpKQotCQkJOwotCQkqUl9TRVJJQUwzX1RSX0RBVEEgPSAqcysrOworCQlTRVJPVVQocywgMyk7CiAjZW5kaWYKLSNlbmRpZgotCQkqcysrOwogCX0KLS8qIENPTkZJR19FVFJBWF9ERUJVR19QT1JUX05VTEwgKi8KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19FVFJBWF9ERUJVR19QT1JUX05VTEwgKi8KIH0KIAogdm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKQEAgLTIzMyw5ICsyMTgsOSBAQAogCiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICp4KQogewotCXB1dHMoIlxuXG4iKTsKLQlwdXRzKHgpOwotCXB1dHMoIlxuXG4gLS0gU3lzdGVtIGhhbHRlZFxuIik7CisJYXB1dHMoIlxuXG4iKTsKKwlhcHV0cyh4KTsKKwlhcHV0cygiXG5cbiAtLSBTeXN0ZW0gaGFsdGVkXG4iKTsKIAogCXdoaWxlKDEpOwkvKiBIYWx0ICovCiB9CkBAIC0zNzgsMTQgKzM2MywxNCBAQAogCV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZlICR2ciwlMCIgOiAiPXJtIiAocmV2aXNpb24pKTsKIAlpZiAocmV2aXNpb24gPCBjb21waWxlX3JldikgewogI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YzMgotCQlwdXRzKCJZb3UgbmVlZCBhbiBFVFJBWCBGUyB0byBydW4gTGludXggMi42L2NyaXN2MzJcbiIpOworCQlhcHV0cygiWW91IG5lZWQgYXQgbGVhc3QgRVRSQVggRlMgdG8gcnVuIExpbnV4IDIuNi9jcmlzdjMyXG4iKTsKICNlbHNlCi0JCXB1dHMoIllvdSBuZWVkIGFuIEVUUkFYIDEwMExYIHRvIHJ1biBsaW51eCAyLjZcbiIpOworCQlhcHV0cygiWW91IG5lZWQgYW4gRVRSQVggMTAwTFggdG8gcnVuIGxpbnV4IDIuNi9jcmlzdjEwXG4iKTsKICNlbmRpZgogCQl3aGlsZSgxKTsKIAl9CiAKLQlwdXRzKCJVbmNvbXByZXNzaW5nIExpbnV4Li4uXG4iKTsKKwlhcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLlxuIik7CiAJZ3VuemlwKCk7Ci0JcHV0cygiRG9uZS4gTm93IGJvb3RpbmcgdGhlIGtlcm5lbFxuIik7CisJYXB1dHMoIkRvbmUuIE5vdyBib290aW5nIHRoZSBrZXJuZWxcbiIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9jYWNoZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9jYWNoZS5oCmluZGV4IGRmYzczMDUuLjFkZTc3OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvY2FjaGUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2NhY2hlLmgKQEAgLTcsNiArNyw4IEBACiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTIDMyCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUIDUKIAorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKKwogdm9pZCBmbHVzaF9kbWFfbGlzdChkbWFfZGVzY3JfZGF0YSAqZGVzY3IpOwogdm9pZCBmbHVzaF9kbWFfZGVzY3IoZG1hX2Rlc2NyX2RhdGEgKmRlc2NyLCBpbnQgZmx1c2hfYnVmKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9kbWEuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvZG1hLmgKaW5kZXggMzY3NDA4MS4uNjE5MDYxNSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9kbWEuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2RtYS5oCkBAIC0xLDc5ICsxIEBACi0jaWZuZGVmIF9BU01fQVJDSF9DUklTX0RNQV9ICi0jZGVmaW5lIF9BU01fQVJDSF9DUklTX0RNQV9ICi0KLS8qIERlZmluZXMgZm9yIHVzaW5nIGFuZCBhbGxvY2F0aW5nIGRtYSBjaGFubmVscy4gKi8KLQotI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTCTEwCi0KLSNkZWZpbmUgTkVUV09SS19FVEgwX1RYX0RNQV9OQlIgMAkvKiBFdGhlcm5ldCAwIG91dC4gKi8KLSNkZWZpbmUgTkVUV09SS19FVEgwIFJYX0RNQV9OQlIgMQkvKiBFdGhlcm5ldCAwIGluLiAqLwotCi0jZGVmaW5lIElPX1BST0NfRE1BMF9UWF9ETUFfTkJSIDIJLyogSU8gcHJvY2Vzc29yIERNQTAgb3V0LiAqLwotI2RlZmluZSBJT19QUk9DX0RNQTBfUlhfRE1BX05CUiAzCS8qIElPIHByb2Nlc3NvciBETUEwIGluLiAqLwotCi0jZGVmaW5lIEFUQV9UWF9ETUFfTkJSIDIJCS8qIEFUQSBpbnRlcmZhY2Ugb3V0LiAqLwotI2RlZmluZSBBVEFfUlhfRE1BX05CUiAzCQkvKiBBVEEgaW50ZXJmYWNlIGluLiAqLwotCi0jZGVmaW5lIEFTWU5DX1NFUjJfVFhfRE1BX05CUiAyCQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMiBvdXQuICovCi0jZGVmaW5lIEFTWU5DX1NFUjJfUlhfRE1BX05CUiAzCQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMiBpbi4gKi8KLQotI2RlZmluZSBJT19QUk9DX0RNQTFfVFhfRE1BX05CUiA0CS8qIElPIHByb2Nlc3NvciBETUExIG91dC4gKi8KLSNkZWZpbmUgSU9fUFJPQ19ETUExX1JYX0RNQV9OQlIgNQkvKiBJTyBwcm9jZXNzb3IgRE1BMSBpbi4gKi8KLQotI2RlZmluZSBBU1lOQ19TRVIxX1RYX0RNQV9OQlIgNAkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDEgb3V0LiAqLwotI2RlZmluZSBBU1lOQ19TRVIxX1JYX0RNQV9OQlIgNQkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDEgaW4uICovCi0KLSNkZWZpbmUgU1lOQ19TRVIwX1RYX0RNQV9OQlIgNAkJLyogU3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMCBvdXQuICovCi0jZGVmaW5lIFNZTkNfU0VSMF9SWF9ETUFfTkJSIDUJCS8qIFN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDAgaW4uICovCi0KLSNkZWZpbmUgRVhURE1BMF9UWF9ETUFfTkJSIDYJCS8qIEV4dGVybmFsIERNQSAwIG91dC4gKi8KLSNkZWZpbmUgRVhURE1BMV9SWF9ETUFfTkJSIDcJCS8qIEV4dGVybmFsIERNQSAxIGluLiAqLwotCi0jZGVmaW5lIEFTWU5DX1NFUjBfVFhfRE1BX05CUiA2CQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMCBvdXQuICovCi0jZGVmaW5lIEFTWU5DX1NFUjBfUlhfRE1BX05CUiA3CQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMCBpbi4gKi8KLQotI2RlZmluZSBTWU5DX1NFUjFfVFhfRE1BX05CUiA2CQkvKiBTeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAxIG91dC4gKi8KLSNkZWZpbmUgU1lOQ19TRVIxX1JYX0RNQV9OQlIgNwkJLyogU3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMSBpbi4gKi8KLQotI2RlZmluZSBORVRXT1JLX0VUSDFfVFhfRE1BX05CUiA2CS8qIEV0aGVybmV0IDEgb3V0LiAqLwotI2RlZmluZSBORVRXT1JLX0VUSDFfUlhfRE1BX05CUiA3CS8qIEV0aGVybmV0IDEgaW4uICovCi0KLSNkZWZpbmUgRVhURE1BMl9UWF9ETUFfTkJSIDgJCS8qIEV4dGVybmFsIERNQSAyIG91dC4gKi8KLSNkZWZpbmUgRVhURE1BM19SWF9ETUFfTkJSIDkJCS8qIEV4dGVybmFsIERNQSAzIGluLiAqLwotCi0jZGVmaW5lIFNUUkNPUF9UWF9ETUFfTkJSIDgJCS8qIFN0cmVhbSBjby1wcm9jZXNzb3Igb3V0LiAqLwotI2RlZmluZSBTVFJDT1BfUlhfRE1BX05CUiA5CQkvKiBTdHJlYW0gY28tcHJvY2Vzc29yIGluLiAqLwotCi0jZGVmaW5lIEFTWU5DX1NFUjNfVFhfRE1BX05CUiA4CQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMyBvdXQuICovCi0jZGVmaW5lIEFTWU5DX1NFUjNfUlhfRE1BX05CUiA5CQkvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMyBpbi4gKi8KLQotZW51bSBkbWFfb3duZXIKLXsKLSAgZG1hX2V0aDAsCi0gIGRtYV9ldGgxLAotICBkbWFfaW9wMCwKLSAgZG1hX2lvcDEsCi0gIGRtYV9zZXIwLAotICBkbWFfc2VyMSwKLSAgZG1hX3NlcjIsCi0gIGRtYV9zZXIzLAotICBkbWFfc3NlcjAsCi0gIGRtYV9zc2VyMSwKLSAgZG1hX2F0YSwKLSAgZG1hX3N0cnAsCi0gIGRtYV9leHQwLAotICBkbWFfZXh0MSwKLSAgZG1hX2V4dDIsCi0gIGRtYV9leHQzCi19OwotCi1pbnQgY3Jpc3YzMl9yZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKiBkZXZpY2VfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHRpb25zLCB1bnNpZ25lZCBiYW5kd2lkdGgsIGVudW0gZG1hX293bmVyIG93bmVyKTsKLXZvaWQgY3Jpc3YzMl9mcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOwotCi0vKiBNYXNrcyB1c2VkIGJ5IGNyaXN2MzJfcmVxdWVzdF9kbWEgb3B0aW9uczogKi8KLSNkZWZpbmUgRE1BX1ZFUkJPU0VfT05fRVJST1IgMQotI2RlZmluZSBETUFfUEFOSUNfT05fRVJST1IgKDJ8RE1BX1ZFUkJPU0VfT05fRVJST1IpCi0jZGVmaW5lIERNQV9JTlRfTUVNIDQKLQotI2VuZGlmIC8qIF9BU01fQVJDSF9DUklTX0RNQV9IICovCisjaW5jbHVkZSAibWFjaC9kbWEuaCIKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaW8uaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvaW8uaAppbmRleCA3MjAyNDQ1Li5hZGM1NDg0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL2lvLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9pby5oCkBAIC00NiwxMCArNDYsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb3Bpbi0+cG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKHZhbCkKLQkJKmlvcGluLT5wb3J0LT5kYXRhIHw9IGlvcGluLT5iaXQ7Ci0JZWxzZQotCQkqaW9waW4tPnBvcnQtPmRhdGEgJj0gfmlvcGluLT5iaXQ7CisJaWYgKGlvcGluLT5wb3J0LT5kYXRhKSB7CisJCWlmICh2YWwpCisJCQkqaW9waW4tPnBvcnQtPmRhdGEgfD0gaW9waW4tPmJpdDsKKwkJZWxzZQorCQkJKmlvcGluLT5wb3J0LT5kYXRhICY9IH5pb3Bpbi0+Yml0OworCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvcGluLT5wb3J0LT5sb2NrLCBmbGFncyk7CiB9CkBAIC02MCwxMCArNjIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb3Bpbi0+cG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGRpciA9PSBjcmlzdjMyX2lvX2Rpcl9pbikKLQkJKmlvcGluLT5wb3J0LT5vZSAmPSB+aW9waW4tPmJpdDsKLQllbHNlCi0JCSppb3Bpbi0+cG9ydC0+b2UgfD0gaW9waW4tPmJpdDsKKwlpZiAoaW9waW4tPnBvcnQtPm9lKSB7CisJCWlmIChkaXIgPT0gY3Jpc3YzMl9pb19kaXJfaW4pCisJCQkqaW9waW4tPnBvcnQtPm9lICY9IH5pb3Bpbi0+Yml0OworCQllbHNlCisJCQkqaW9waW4tPnBvcnQtPm9lIHw9IGlvcGluLT5iaXQ7CisJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9waW4tPnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbWVtbWFwLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21lbW1hcC5oCmluZGV4IGQyOWRmNTYuLjgxOTg1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbWVtbWFwLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tZW1tYXAuaApAQCAtMSwyNCArMSBAQAotI2lmbmRlZiBfQVNNX0FSQ0hfTUVNTUFQX0gKLSNkZWZpbmUgX0FTTV9BUkNIX01FTU1BUF9ICi0KLSNkZWZpbmUgTUVNX0NTRTBfU1RBUlQgKDB4MDAwMDAwMDApCi0jZGVmaW5lIE1FTV9DU0UwX1NJWkUgKDB4MDQwMDAwMDApCi0jZGVmaW5lIE1FTV9DU0UxX1NUQVJUICgweDA0MDAwMDAwKQotI2RlZmluZSBNRU1fQ1NFMV9TSVpFICgweDA0MDAwMDAwKQotI2RlZmluZSBNRU1fQ1NSMF9TVEFSVCAoMHgwODAwMDAwMCkKLSNkZWZpbmUgTUVNX0NTUjFfU1RBUlQgKDB4MGMwMDAwMDApCi0jZGVmaW5lIE1FTV9DU1AwX1NUQVJUICgweDEwMDAwMDAwKQotI2RlZmluZSBNRU1fQ1NQMV9TVEFSVCAoMHgxNDAwMDAwMCkKLSNkZWZpbmUgTUVNX0NTUDJfU1RBUlQgKDB4MTgwMDAwMDApCi0jZGVmaW5lIE1FTV9DU1AzX1NUQVJUICgweDFjMDAwMDAwKQotI2RlZmluZSBNRU1fQ1NQNF9TVEFSVCAoMHgyMDAwMDAwMCkKLSNkZWZpbmUgTUVNX0NTUDVfU1RBUlQgKDB4MjQwMDAwMDApCi0jZGVmaW5lIE1FTV9DU1A2X1NUQVJUICgweDI4MDAwMDAwKQotI2RlZmluZSBNRU1fQ1NQN19TVEFSVCAoMHgyYzAwMDAwMCkKLSNkZWZpbmUgTUVNX0lOVE1FTV9TVEFSVCAoMHgzODAwMDAwMCkKLSNkZWZpbmUgTUVNX0lOVE1FTV9TSVpFICgweDAwMDIwMDAwKQotI2RlZmluZSBNRU1fRFJBTV9TVEFSVCAoMHg0MDAwMDAwMCkKLQotI2RlZmluZSBNRU1fTk9OX0NBQ0hFQUJMRSAoMHg4MDAwMDAwMCkKLQotI2VuZGlmCisjaW5jbHVkZSA8bWFjaC9tZW1tYXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9wZ3RhYmxlLmgKaW5kZXggMDhjYjdmZi4uYzEwNTFhOCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9wZ3RhYmxlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9wZ3RhYmxlLmgKQEAgLTIsOCArMiwxNiBAQAogI2RlZmluZSBfQVNNX0NSSVNfQVJDSF9QR1RBQkxFX0gKIAogLyogRGVmaW5lIHRoZSBrZXJuZWxzIHZpcnR1YWwgbWVtb3J5IGFyZWEuICovCisKKy8qIFNlZSBoZWFkLlMgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gQVJUUEVDLTMgYW5kIEVUUkFYIEZTLiAqLworI2lmZGVmIENPTkZJR19DUklTX01BQ0hfQVJUUEVDMworI2RlZmluZSBWTUFMTE9DX1NUQVJUICAgICAgICAgIEtTRUdfRQorI2RlZmluZSBWTUFMTE9DX0VORCAgICAgICAgICAgIEtTRUdfRgorI2Vsc2UKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJS1NFR19ECiAjZGVmaW5lIFZNQUxMT0NfRU5ECQlLU0VHX0UKKyNlbmRpZgorCiAjZGVmaW5lIFZNQUxMT0NfVk1BRERSKHgpCSgodW5zaWduZWQgbG9uZykoeCkpCiAKICNlbmRpZiAvKiBfQVNNX0NSSVNfQVJDSF9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvdWFjY2Vzcy5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC91YWNjZXNzLmgKaW5kZXggNmIyMDdmMS4uMzE5NjAxOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC91YWNjZXNzLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC91YWNjZXNzLmgKQEAgLTEyMiwxNCArMTIyLDE0IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkiCW1vdmUuZCAlMywlMFxuIgogCQkiNToJbW92ZS5iIFslMitdLCRhY3JcbiIKLQkJIjE6CWJlcSAyZlxuIgorCQkiMToJYmVxIDZmXG4iCiAJCSIJbW92ZS5iICRhY3IsWyUxK11cbiIKIAogCQkiCXN1YnEgMSwlMFxuIgogCQkiMjoJYm5lIDFiXG4iCiAJCSIJbW92ZS5iIFslMitdLCRhY3JcbiIKIAotCQkiCXN1Yi5kICUzLCUwXG4iCisJCSI2OglzdWIuZCAlMywlMFxuIgogCQkiCW5lZy5kICUwLCUwXG4iCiAJCSIzOlxuIgogCQkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKQEAgLTE0MCw4ICsxNDAsNyBAQAogCQkvKiBUaGUgYWRkcmVzcyBmb3IgYSBmYXVsdCBhdCB0aGUgZmlyc3QgbW92ZSBpcyB0cml2aWFsLgogCQkgICBUaGUgYWRkcmVzcyBmb3IgYSBmYXVsdCBhdCB0aGUgc2Vjb25kIG1vdmUgaXMgdGhhdCBvZgogCQkgICB0aGUgcHJlY2VkaW5nIGJyYW5jaCBpbnNuLCBzaW5jZSB0aGUgbW92ZSBpbnNuIGlzIGluCi0JCSAgIGl0cyBkZWxheS1zbG90LiAgVGhhdCBhZGRyZXNzIGlzIGFsc28gYSBicmFuY2gKLQkJICAgdGFyZ2V0LiAgSnVzdCBzbyB5b3UgZG9uJ3QgZ2V0IGNvbmZ1c2VkLi4uICAqLworCQkgICBpdHMgZGVsYXktc2xvdC4gIEp1c3Qgc28geW91IGRvbid0IGdldCBjb25mdXNlZC4uLiAgKi8KIAkJIgkucHJldmlvdXNcbiIKIAkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCiAJCSIJLmR3b3JkIDViLDRiXG4iCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWEzL21hY2gvZG1hLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWEzL21hY2gvZG1hLmgKaW5kZXggOWU4ZWIxMy4uZjAxZGNhMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvbWFjaC1hMy9tYWNoL2RtYS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL21hY2gtYTMvbWFjaC9kbWEuaApAQCAtNSw2ICs1LDMzIEBACiAKICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkxMiAvKiA4IGFuZCAxMCBub3QgdXNlZC4gKi8KIAorI2RlZmluZSBORVRXT1JLX0VUSF9UWF9ETUFfTkJSIDAgICAgICAgIC8qIEV0aGVybmV0IDAgb3V0LiAqLworI2RlZmluZSBORVRXT1JLX0VUSF9SWF9ETUFfTkJSIDEgICAgICAgIC8qIEV0aGVybmV0IDAgaW4uICovCisKKyNkZWZpbmUgSU9fUFJPQ19ETUFfVFhfRE1BX05CUiA0ICAgICAgICAvKiBJTyBwcm9jZXNzb3IgRE1BMCBvdXQuICovCisjZGVmaW5lIElPX1BST0NfRE1BX1JYX0RNQV9OQlIgNSAgICAgICAgLyogSU8gcHJvY2Vzc29yIERNQTAgaW4uICovCisKKyNkZWZpbmUgQVNZTkNfU0VSM19UWF9ETUFfTkJSIDIgICAgICAgICAvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMyBvdXQuICovCisjZGVmaW5lIEFTWU5DX1NFUjNfUlhfRE1BX05CUiAzICAgICAgICAgLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDMgaW4uICovCisKKyNkZWZpbmUgQVNZTkNfU0VSMl9UWF9ETUFfTkJSIDYgICAgICAgICAvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMiBvdXQuICovCisjZGVmaW5lIEFTWU5DX1NFUjJfUlhfRE1BX05CUiA3ICAgICAgICAgLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDIgaW4uICovCisKKyNkZWZpbmUgQVNZTkNfU0VSMV9UWF9ETUFfTkJSIDQgICAgICAgICAvKiBBc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMSBvdXQuICovCisjZGVmaW5lIEFTWU5DX1NFUjFfUlhfRE1BX05CUiA1ICAgICAgICAgLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDEgaW4uICovCisKKyNkZWZpbmUgU1lOQ19TRVJfVFhfRE1BX05CUiA2ICAgICAgICAgICAvKiBTeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAwIG91dC4gKi8KKyNkZWZpbmUgU1lOQ19TRVJfUlhfRE1BX05CUiA3ICAgICAgICAgICAvKiBTeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAwIGluLiAqLworCisjZGVmaW5lIEFTWU5DX1NFUjBfVFhfRE1BX05CUiAwICAgICAgICAgLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDAgb3V0LiAqLworI2RlZmluZSBBU1lOQ19TRVIwX1JYX0RNQV9OQlIgMSAgICAgICAgIC8qIEFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAwIGluLiAqLworCisjZGVmaW5lIFNUUkNPUF9UWF9ETUFfTkJSIDIgICAgICAgICAgICAgLyogU3RyZWFtIGNvLXByb2Nlc3NvciBvdXQuICovCisjZGVmaW5lIFNUUkNPUF9SWF9ETUFfTkJSIDMgICAgICAgICAgICAgLyogU3RyZWFtIGNvLXByb2Nlc3NvciBpbi4gKi8KKworI2RlZmluZSBkbWFfZXRoMCBkbWFfZXRoCisjZGVmaW5lIGRtYV9ldGgxIGRtYV9ldGgKKwogZW51bSBkbWFfb3duZXIgewogCWRtYV9ldGgsCiAJZG1hX3NlcjAsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWEzL21hY2gvc3RhcnR1cC5pbmMgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWEzL21hY2gvc3RhcnR1cC5pbmMKaW5kZXggMmYyM2U1ZS4uMmQ1MmJjYyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvbWFjaC1hMy9tYWNoL3N0YXJ0dXAuaW5jCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL21hY2gtYTMvbWFjaC9zdGFydHVwLmluYwpAQCAtMSw5ICsxLDE5IEBACisjaWZuZGVmIFNUQVJUVVBfSU5DX0lOQ0xVREVECisjZGVmaW5lIFNUQVJUVVBfSU5DX0lOQ0xVREVECisKICNpbmNsdWRlIDxod3JlZ3MvYXNtL3JlZ19tYXBfYXNtLmg+CiAjaW5jbHVkZSA8aHdyZWdzL2FzbS9naW9fZGVmc19hc20uaD4KICNpbmNsdWRlIDxod3JlZ3MvYXNtL3Bpb19kZWZzX2FzbS5oPgogI2luY2x1ZGUgPGh3cmVncy9hc20vY2xrZ2VuX2RlZnNfYXNtLmg+CiAjaW5jbHVkZSA8aHdyZWdzL2FzbS9waW5tdXhfZGVmc19hc20uaD4KIAorCS5tYWNybyBHSU9fU0VUX1AgQklUUywgT1VUUkVHCisJYm1pCTFmCQk7IGJ0c3RxOiBiaXQgLT4gTiBmbGFnCisJbm9wCisJb3IuZAlcQklUUywgXE9VVFJFRworMToKKwkuZW5kbQorCiAJLm1hY3JvIEdJT19JTklUCiAJbW92ZS5kCUNPTkZJR19FVFJBWF9ERUZfR0lPX1BBX09VVCwgJHIwCiAJbW92ZS5kCVJFR19BRERSKGdpbywgcmVnaV9naW8sIHJ3X3BhX2RvdXQpLCAkcjEKQEAgLTMyLDEwICs0MiwyMyBAQAogCW1vdmUuZAkweEZGRkZGRkZGLCAkcjAKIAltb3ZlLmQJUkVHX0FERFIocGlubXV4LCByZWdpX3Bpbm11eCwgcndfZ2lvX3BhKSwgJHIxCiAJbW92ZS5kCSRyMCwgWyRyMV0KLQltb3ZlLmQJUkVHX0FERFIocGlubXV4LCByZWdpX3Bpbm11eCwgcndfZ2lvX3BiKSwgJHIxCi0JbW92ZS5kCSRyMCwgWyRyMV0KIAltb3ZlLmQJUkVHX0FERFIocGlubXV4LCByZWdpX3Bpbm11eCwgcndfZ2lvX3BjKSwgJHIxCiAJbW92ZS5kCSRyMCwgWyRyMV0KKworCTs7IElmIGV0aF9tZGlvLCBldGgsIGdldGggYml0cyBhcmUgc2V0IGluIGh3cHJvdCwgZG9uJ3QKKwk7OyBzZXQgdGhlbSB0byBncGlvLCBhcyB0aGlzIG1lYW5zIHRoZXkgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQKKwk7OyBlYXJsaWVyIGFuZCBzaG91bGRuJ3QgYmUgY2hhbmdlZC4KKwltb3ZlLmQJMHhGQzAwMDAwMCwgJHIyIDsgcGlucyAyNS4uMCBhcmUgZXRoX21kaW8sIGV0aCwgZ2V0aAorCW1vdmUuZAlSRUdfQUREUihwaW5tdXgsIHJlZ2lfcGlubXV4LCByd19od3Byb3QpLCAkcjEKKwltb3ZlLmQJWyRyMV0sICRyMAorCWJ0c3RxCVJFR19CSVQocGlubXV4LCByd19od3Byb3QsIGV0aCksICRyMAorCUdJT19TRVRfUCAweDAwRkZGRjAwLCAkcjIJCTs7IHBpbnMgOC4uMjMgYXJlIGV0aAorCWJ0c3RxCVJFR19CSVQocGlubXV4LCByd19od3Byb3QsIGV0aF9tZGlvKSwgJHIwCisJR0lPX1NFVF9QIDB4MDMwMDAwMDAsICRyMgkJOzsgcGlucyAyNC4uMjUgYXJlIGV0aF9tZGlvCisJYnRzdHEJUkVHX0JJVChwaW5tdXgsIHJ3X2h3cHJvdCwgZ2V0aCksICRyMAorCUdJT19TRVRfUCAweDAwMDAwMEZGLCAkcjIJCTs7IHBpbnMgMC4uNyBhcmUgZ2V0aAorCW1vdmUuZAlSRUdfQUREUihwaW5tdXgsIHJlZ2lfcGlubXV4LCByd19naW9fcGIpLCAkcjEKKwltb3ZlLmQJJHIyLCBbJHIxXQogCS5lbmRtCiAKIAkubWFjcm8gU1RBUlRfQ0xPQ0tTCkBAIC01OCwzICs4MSw0IEBACiAJbW92ZS5kIENPTkZJR19FVFJBWF9QSU9fQ0UyX0NGRywgJHIxCiAJbW92ZS5kICRyMSwgWyRyMF0KIAkuZW5kbQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvZG1hLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjNTkyOTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvZG1hLmgKQEAgLTAsMCArMSw3OSBAQAorI2lmbmRlZiBfQVNNX0FSQ0hfQ1JJU19ETUFfSAorI2RlZmluZSBfQVNNX0FSQ0hfQ1JJU19ETUFfSAorCisvKiBEZWZpbmVzIGZvciB1c2luZyBhbmQgYWxsb2NhdGluZyBkbWEgY2hhbm5lbHMuICovCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwkxMAorCisjZGVmaW5lIE5FVFdPUktfRVRIMF9UWF9ETUFfTkJSIDAJLyogRXRoZXJuZXQgMCBvdXQuICovCisjZGVmaW5lIE5FVFdPUktfRVRIMCBSWF9ETUFfTkJSIDEJLyogRXRoZXJuZXQgMCBpbi4gKi8KKworI2RlZmluZSBJT19QUk9DX0RNQTBfVFhfRE1BX05CUiAyCS8qIElPIHByb2Nlc3NvciBETUEwIG91dC4gKi8KKyNkZWZpbmUgSU9fUFJPQ19ETUEwX1JYX0RNQV9OQlIgMwkvKiBJTyBwcm9jZXNzb3IgRE1BMCBpbi4gKi8KKworI2RlZmluZSBBVEFfVFhfRE1BX05CUiAyCQkvKiBBVEEgaW50ZXJmYWNlIG91dC4gKi8KKyNkZWZpbmUgQVRBX1JYX0RNQV9OQlIgMwkJLyogQVRBIGludGVyZmFjZSBpbi4gKi8KKworI2RlZmluZSBBU1lOQ19TRVIyX1RYX0RNQV9OQlIgMgkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDIgb3V0LiAqLworI2RlZmluZSBBU1lOQ19TRVIyX1JYX0RNQV9OQlIgMwkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDIgaW4uICovCisKKyNkZWZpbmUgSU9fUFJPQ19ETUExX1RYX0RNQV9OQlIgNAkvKiBJTyBwcm9jZXNzb3IgRE1BMSBvdXQuICovCisjZGVmaW5lIElPX1BST0NfRE1BMV9SWF9ETUFfTkJSIDUJLyogSU8gcHJvY2Vzc29yIERNQTEgaW4uICovCisKKyNkZWZpbmUgQVNZTkNfU0VSMV9UWF9ETUFfTkJSIDQJCS8qIEFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAxIG91dC4gKi8KKyNkZWZpbmUgQVNZTkNfU0VSMV9SWF9ETUFfTkJSIDUJCS8qIEFzeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAxIGluLiAqLworCisjZGVmaW5lIFNZTkNfU0VSMF9UWF9ETUFfTkJSIDQJCS8qIFN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDAgb3V0LiAqLworI2RlZmluZSBTWU5DX1NFUjBfUlhfRE1BX05CUiA1CQkvKiBTeW5jaHJvbm91cyBzZXJpYWwgcG9ydCAwIGluLiAqLworCisjZGVmaW5lIEVYVERNQTBfVFhfRE1BX05CUiA2CQkvKiBFeHRlcm5hbCBETUEgMCBvdXQuICovCisjZGVmaW5lIEVYVERNQTFfUlhfRE1BX05CUiA3CQkvKiBFeHRlcm5hbCBETUEgMSBpbi4gKi8KKworI2RlZmluZSBBU1lOQ19TRVIwX1RYX0RNQV9OQlIgNgkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDAgb3V0LiAqLworI2RlZmluZSBBU1lOQ19TRVIwX1JYX0RNQV9OQlIgNwkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDAgaW4uICovCisKKyNkZWZpbmUgU1lOQ19TRVIxX1RYX0RNQV9OQlIgNgkJLyogU3luY2hyb25vdXMgc2VyaWFsIHBvcnQgMSBvdXQuICovCisjZGVmaW5lIFNZTkNfU0VSMV9SWF9ETUFfTkJSIDcJCS8qIFN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDEgaW4uICovCisKKyNkZWZpbmUgTkVUV09SS19FVEgxX1RYX0RNQV9OQlIgNgkvKiBFdGhlcm5ldCAxIG91dC4gKi8KKyNkZWZpbmUgTkVUV09SS19FVEgxX1JYX0RNQV9OQlIgNwkvKiBFdGhlcm5ldCAxIGluLiAqLworCisjZGVmaW5lIEVYVERNQTJfVFhfRE1BX05CUiA4CQkvKiBFeHRlcm5hbCBETUEgMiBvdXQuICovCisjZGVmaW5lIEVYVERNQTNfUlhfRE1BX05CUiA5CQkvKiBFeHRlcm5hbCBETUEgMyBpbi4gKi8KKworI2RlZmluZSBTVFJDT1BfVFhfRE1BX05CUiA4CQkvKiBTdHJlYW0gY28tcHJvY2Vzc29yIG91dC4gKi8KKyNkZWZpbmUgU1RSQ09QX1JYX0RNQV9OQlIgOQkJLyogU3RyZWFtIGNvLXByb2Nlc3NvciBpbi4gKi8KKworI2RlZmluZSBBU1lOQ19TRVIzX1RYX0RNQV9OQlIgOAkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDMgb3V0LiAqLworI2RlZmluZSBBU1lOQ19TRVIzX1JYX0RNQV9OQlIgOQkJLyogQXN5bmNocm9ub3VzIHNlcmlhbCBwb3J0IDMgaW4uICovCisKK2VudW0gZG1hX293bmVyIHsKKyAgZG1hX2V0aDAsCisgIGRtYV9ldGgxLAorICBkbWFfaW9wMCwKKyAgZG1hX2lvcDEsCisgIGRtYV9zZXIwLAorICBkbWFfc2VyMSwKKyAgZG1hX3NlcjIsCisgIGRtYV9zZXIzLAorICBkbWFfc3NlcjAsCisgIGRtYV9zc2VyMSwKKyAgZG1hX2F0YSwKKyAgZG1hX3N0cnAsCisgIGRtYV9leHQwLAorICBkbWFfZXh0MSwKKyAgZG1hX2V4dDIsCisgIGRtYV9leHQzCit9OworCitpbnQgY3Jpc3YzMl9yZXF1ZXN0X2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIsIGNvbnN0IGNoYXIgKmRldmljZV9pZCwKKwkJCXVuc2lnbmVkIG9wdGlvbnMsIHVuc2lnbmVkIGJhbmR3aWR0aCwKKwkJCWVudW0gZG1hX293bmVyIG93bmVyKTsKK3ZvaWQgY3Jpc3YzMl9mcmVlX2RtYSh1bnNpZ25lZCBpbnQgZG1hbnIpOworCisvKiBNYXNrcyB1c2VkIGJ5IGNyaXN2MzJfcmVxdWVzdF9kbWEgb3B0aW9uczogKi8KKyNkZWZpbmUgRE1BX1ZFUkJPU0VfT05fRVJST1IgMQorI2RlZmluZSBETUFfUEFOSUNfT05fRVJST1IgKDJ8RE1BX1ZFUkJPU0VfT05fRVJST1IpCisjZGVmaW5lIERNQV9JTlRfTUVNIDQKKworI2VuZGlmIC8qIF9BU01fQVJDSF9DUklTX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvbWVtbWFwLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvbWVtbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5ZGY1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL21hY2gtZnMvbWFjaC9tZW1tYXAuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9BU01fQVJDSF9NRU1NQVBfSAorI2RlZmluZSBfQVNNX0FSQ0hfTUVNTUFQX0gKKworI2RlZmluZSBNRU1fQ1NFMF9TVEFSVCAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTRTBfU0laRSAoMHgwNDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTRTFfU1RBUlQgKDB4MDQwMDAwMDApCisjZGVmaW5lIE1FTV9DU0UxX1NJWkUgKDB4MDQwMDAwMDApCisjZGVmaW5lIE1FTV9DU1IwX1NUQVJUICgweDA4MDAwMDAwKQorI2RlZmluZSBNRU1fQ1NSMV9TVEFSVCAoMHgwYzAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDBfU1RBUlQgKDB4MTAwMDAwMDApCisjZGVmaW5lIE1FTV9DU1AxX1NUQVJUICgweDE0MDAwMDAwKQorI2RlZmluZSBNRU1fQ1NQMl9TVEFSVCAoMHgxODAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDNfU1RBUlQgKDB4MWMwMDAwMDApCisjZGVmaW5lIE1FTV9DU1A0X1NUQVJUICgweDIwMDAwMDAwKQorI2RlZmluZSBNRU1fQ1NQNV9TVEFSVCAoMHgyNDAwMDAwMCkKKyNkZWZpbmUgTUVNX0NTUDZfU1RBUlQgKDB4MjgwMDAwMDApCisjZGVmaW5lIE1FTV9DU1A3X1NUQVJUICgweDJjMDAwMDAwKQorI2RlZmluZSBNRU1fSU5UTUVNX1NUQVJUICgweDM4MDAwMDAwKQorI2RlZmluZSBNRU1fSU5UTUVNX1NJWkUgKDB4MDAwMjAwMDApCisjZGVmaW5lIE1FTV9EUkFNX1NUQVJUICgweDQwMDAwMDAwKQorCisjZGVmaW5lIE1FTV9OT05fQ0FDSEVBQkxFICgweDgwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL21hY2gtZnMvbWFjaC9zdGFydHVwLmluYyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL21hY2gtZnMvbWFjaC9zdGFydHVwLmluYwppbmRleCA0YTEwY2NiLi5kZDFhYmJkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9tYWNoLWZzL21hY2gvc3RhcnR1cC5pbmMKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvbWFjaC1mcy9tYWNoL3N0YXJ0dXAuaW5jCkBAIC0xLDMgKzEsNiBAQAorI2lmbmRlZiBTVEFSVFVQX0lOQ19JTkNMVURFRAorI2RlZmluZSBTVEFSVFVQX0lOQ19JTkNMVURFRAorCiAjaW5jbHVkZSA8aHdyZWdzL2FzbS9yZWdfbWFwX2FzbS5oPgogI2luY2x1ZGUgPGh3cmVncy9hc20vYmlmX2NvcmVfZGVmc19hc20uaD4KICNpbmNsdWRlIDxod3JlZ3MvYXNtL2dpb19kZWZzX2FzbS5oPgpAQCAtNzUsMyArNzgsNSBAQAogCW1vdmUuZCAkcjEwLCBbJHIxMV0KICNlbmRpZgogCS5lbmRtCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBkYThlZjhlLi44NTg4YjJjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTUyLDE0ICsxNTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKTsKLX0KLQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKLQogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2V0cmF4Z3Bpby5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2V0cmF4Z3Bpby5oCmluZGV4IDM4ZjFjOGUuLmQ0NzQ4MTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9ldHJheGdwaW8uaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vZXRyYXhncGlvLmgKQEAgLTIxLDMxICsyMSwzNSBAQAogICogL2Rldi9sZWRzICAgbWlub3IgMiwgQWNjZXNzIHRvIGxlZHMgZGVwZW5kaW5nIG9uIGtlcm5lbGNvbmZpZwogICoKICAqIEZvciBBUlRQRUMtMyAoQ09ORklHX0NSSVNfTUFDSF9BUlRQRUMzKToKLSAqIC9kZXYvZ3Bpb2EgIG1pbm9yIDAsICA4IGJpdCBHUElPLCBlYWNoIGJpdCBjYW4gY2hhbmdlIGRpcmVjdGlvbgotICogL2Rldi9ncGlvYiAgbWlub3IgMSwgMTggYml0IEdQSU8sIGVhY2ggYml0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uCi0gKiAvZGV2L2dwaW9jICBtaW5vciAzLCAxOCBiaXQgR1BJTywgZWFjaCBiaXQgY2FuIGNoYW5nZSBkaXJlY3Rpb24KLSAqIC9kZXYvZ3Bpb2QgIG1pbm9yIDQsIDE4IGJpdCBHUElPLCBlYWNoIGJpdCBjYW4gY2hhbmdlIGRpcmVjdGlvbgorICogL2Rldi9ncGlvYSAgbWlub3IgMCwgMzIgYml0IEdQSU8sIGVhY2ggYml0IGNhbiBjaGFuZ2UgZGlyZWN0aW9uCisgKiAvZGV2L2dwaW9iICBtaW5vciAxLCAzMiBiaXQgR1BJTywgZWFjaCBiaXQgY2FuIGNoYW5nZSBkaXJlY3Rpb24KKyAqIC9kZXYvZ3Bpb2MgIG1pbm9yIDMsIDE2IGJpdCBHUElPLCBlYWNoIGJpdCBjYW4gY2hhbmdlIGRpcmVjdGlvbgorICogL2Rldi9ncGlvZCAgbWlub3IgNCwgMzIgYml0IEdQSU8sIGlucHV0IG9ubHkKICAqIC9kZXYvbGVkcyAgIG1pbm9yIDIsIEFjY2VzcyB0byBsZWRzIGRlcGVuZGluZyBvbiBrZXJuZWxjb25maWcKICAqIC9kZXYvcHdtMCAgIG1pbm9yIDE2LCBQV00gY2hhbm5lbCAwIG9uIFBBMzAKICAqIC9kZXYvcHdtMSAgIG1pbm9yIDE3LCBQV00gY2hhbm5lbCAxIG9uIFBBMzEKICAqIC9kZXYvcHdtMiAgIG1pbm9yIDE4LCBQV00gY2hhbm5lbCAyIG9uIFBCMjYKKyAqIC9kZXYvcHB3bSAgIG1pbm9yIDE5LCBQUFdNIGNoYW5uZWwKICAqCiAgKi8KICNpZm5kZWYgX0FTTV9FVFJBWEdQSU9fSAogI2RlZmluZSBfQVNNX0VUUkFYR1BJT19ICiAKKyNkZWZpbmUgR1BJT19NSU5PUl9GSVJTVCAwCisKKyNkZWZpbmUgRVRSQVhHUElPX0lPQ1RZUEUgNDMKKwogLyogZXRyYXhncGlvIF9JT0NfVFlQRSwgYml0cyA4IHRvIDE1IGluIGlvY3RsIGNtZCAqLwogI2lmZGVmIENPTkZJR19FVFJBWF9BUkNIX1YxMAotI2RlZmluZSBFVFJBWEdQSU9fSU9DVFlQRSA0MwogI2RlZmluZSBHUElPX01JTk9SX0EgMAogI2RlZmluZSBHUElPX01JTk9SX0IgMQogI2RlZmluZSBHUElPX01JTk9SX0xFRFMgMgogI2RlZmluZSBHUElPX01JTk9SX0cgMwogI2RlZmluZSBHUElPX01JTk9SX0xBU1QgMworI2RlZmluZSBHUElPX01JTk9SX0xBU1RfUkVBTCBHUElPX01JTk9SX0xBU1QKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VUUkFYRlMKLSNkZWZpbmUgRVRSQVhHUElPX0lPQ1RZUEUgNDMKICNkZWZpbmUgR1BJT19NSU5PUl9BIDAKICNkZWZpbmUgR1BJT19NSU5PUl9CIDEKICNkZWZpbmUgR1BJT19NSU5PUl9MRURTIDIKQEAgLTU4LDEwICs2MiwxMCBAQAogI2Vsc2UKICNkZWZpbmUgR1BJT19NSU5PUl9MQVNUIDUKICNlbmRpZgorI2RlZmluZSBHUElPX01JTk9SX0xBU1RfUkVBTCBHUElPX01JTk9SX0xBU1QKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NSSVNfTUFDSF9BUlRQRUMzCi0jZGVmaW5lIEVUUkFYR1BJT19JT0NUWVBFIDQzCiAjZGVmaW5lIEdQSU9fTUlOT1JfQSAwCiAjZGVmaW5lIEdQSU9fTUlOT1JfQiAxCiAjZGVmaW5lIEdQSU9fTUlOT1JfTEVEUyAyCkBAIC03MywxMiArNzcsMTcgQEAKICNlbHNlCiAjZGVmaW5lIEdQSU9fTUlOT1JfTEFTVCA0CiAjZW5kaWYKLSNkZWZpbmUgR1BJT19NSU5PUl9QV00wIDE2Ci0jZGVmaW5lIEdQSU9fTUlOT1JfUFdNMSAxNwotI2RlZmluZSBHUElPX01JTk9SX1BXTTIgMTgKLSNkZWZpbmUgR1BJT19NSU5PUl9MQVNUX1BXTSBHUElPX01JTk9SX1BXTTIKKyNkZWZpbmUgR1BJT19NSU5PUl9GSVJTVF9QV00gMTYKKyNkZWZpbmUgR1BJT19NSU5PUl9QV00wIChHUElPX01JTk9SX0ZJUlNUX1BXTSswKQorI2RlZmluZSBHUElPX01JTk9SX1BXTTEgKEdQSU9fTUlOT1JfRklSU1RfUFdNKzEpCisjZGVmaW5lIEdQSU9fTUlOT1JfUFdNMiAoR1BJT19NSU5PUl9GSVJTVF9QV00rMikKKyNkZWZpbmUgR1BJT19NSU5PUl9QUFdNIChHUElPX01JTk9SX0ZJUlNUX1BXTSszKQorI2RlZmluZSBHUElPX01JTk9SX0xBU1RfUFdNIEdQSU9fTUlOT1JfUFBXTQorI2RlZmluZSBHUElPX01JTk9SX0xBU1RfUkVBTCBHUElPX01JTk9SX0xBU1RfUFdNCiAjZW5kaWYKIAorCisKIC8qIHN1cHBvcnRlZCBpb2N0bCBfSU9DX05SJ3MgKi8KIAogI2RlZmluZSBJT19SRUFEQklUUyAgMHgxICAvKiByZWFkIGFuZCByZXR1cm4gY3VycmVudCBwb3J0IGJpdHMgKG9ic29sZXRlKSAqLwpAQCAtMTI1LDEyICsxMzQsMTAgQEAKICAqLwogI2RlZmluZSBJT19SRUFEX0lOQklUUyAgIDB4MTAgLyogKmFyZyBpcyByZXN1bHQgb2YgcmVhZGluZyB0aGUgaW5wdXQgcGlucyAqLwogI2RlZmluZSBJT19SRUFEX09VVEJJVFMgIDB4MTEgLyogKmFyZyBpcyByZXN1bHQgb2YgcmVhZGluZyB0aGUgb3V0cHV0IHNoYWRvdyAqLwotI2RlZmluZSBJT19TRVRHRVRfSU5QVVQgIDB4MTIgLyogYml0cyBzZXQgaW4gKmFyZyBpcyBzZXQgdG8gaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAqYXJnIHVwZGF0ZWQgd2l0aCBjdXJyZW50IGlucHV0IHBpbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSU9fU0VUR0VUX09VVFBVVCAweDEzIC8qIGJpdHMgc2V0IGluICphcmcgaXMgc2V0IHRvIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICphcmcgdXBkYXRlZCB3aXRoIGN1cnJlbnQgb3V0cHV0IHBpbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSU9fU0VUR0VUX0lOUFVUICAweDEyIC8qIGJpdHMgc2V0IGluICphcmcgaXMgc2V0IHRvIGlucHV0LCAqLworCQkJICAgICAgLyogKmFyZyB1cGRhdGVkIHdpdGggY3VycmVudCBpbnB1dCBwaW5zLiAqLworI2RlZmluZSBJT19TRVRHRVRfT1VUUFVUIDB4MTMgLyogYml0cyBzZXQgaW4gKmFyZyBpcyBzZXQgdG8gb3V0cHV0LCAqLworCQkJICAgICAgLyogKmFyZyB1cGRhdGVkIHdpdGggY3VycmVudCBvdXRwdXQgcGlucy4gKi8KIAogLyogVGhlIGZvbGxvd2luZyBpb2N0bCdzIGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBQV00gY2hhbm5lbHMgb25seSAqLwogCkBAIC0xNDAsNyArMTQ3LDggQEAKIAlQV01fT0ZGID0gMCwJCS8qIGRpc2FibGVkLCBkZWFsbG9jYXRlZCAqLwogCVBXTV9TVEFOREFSRCA9IDEsCS8qIDM5MCBrSHosIGR1dHkgY3ljbGUgMC4uMjU1LzI1NiAqLwogCVBXTV9GQVNUID0gMiwJCS8qIHZhcmlhYmxlIGZyZXEsIHcvIDEwbnMgYWN0aXZlIHB1bHNlIGxlbiAqLwotCVBXTV9WQVJGUkVRID0gMwkJLyogaW5kaXZpZHVhbGx5IGNvbmZpZ3VyYWJsZSBoaWdoL2xvdyBwZXJpb2RzICovCisJUFdNX1ZBUkZSRVEgPSAzLAkvKiBpbmRpdmlkdWFsbHkgY29uZmlndXJhYmxlIGhpZ2gvbG93IHBlcmlvZHMgKi8KKwlQV01fU09GVCA9IDQJCS8qIHNvZnR3YXJlIGdlbmVyYXRlZCAqLwogfTsKIAogc3RydWN0IGlvX3B3bV9zZXRfbW9kZSB7CkBAIC0xNzYsNCArMTg0LDU2IEBACiAJaW50IGR1dHk7CQkvKiAwLi4yNTUgKi8KIH07CiAKKy8qIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhdGVzdCBQV00gcHVsc2UuCisgKiBsbzogTGVuZ3RoIG9mIHRoZSBsYXRlc3QgbG93IHBlcmlvZCwgaW4gdW5pdHMgb2YgMTBucy4KKyAqIGhpOiBMZW5ndGggb2YgdGhlIGxhdGVzdCBoaWdoIHBlcmlvZCwgaW4gdW5pdHMgb2YgMTBucy4KKyAqIGNudDogVGltZSBzaW5jZSBsYXN0IGRldGVjdGVkIGVkZ2UsIGluIHVuaXRzIG9mIDEwbnMuCisgKgorICogVGhlIGlucHV0IHNvdXJjZSB0byBQV00gaXMgZGVjaWVkIGJ5IElPX1BXTV9TRVRfSU5QVVRfU1JDLgorICoKKyAqIE5PVEU6IEFsbCBQV00gZGV2aWNlcyBpcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgaW5wdXQgc291cmNlLgorICovCisjZGVmaW5lIElPX1BXTV9HRVRfUEVSSU9EICAgMHgyMworCitzdHJ1Y3QgaW9fcHdtX2dldF9wZXJpb2QgeworCXVuc2lnbmVkIGludCBsbzsKKwl1bnNpZ25lZCBpbnQgaGk7CisJdW5zaWduZWQgaW50IGNudDsKK307CisKKy8qIFNldHMgdGhlIGlucHV0IHNvdXJjZSBmb3IgdGhlIFBXTSBpbnB1dC4gRm9yIHRoZSBzcmMgdmFsdWUgc2VlIHRoZQorICogcmVnaXN0ZXIgZGVzY3JpcHRpb24gZm9yIGdpbzpyd19wd21faW5fY2ZnLgorICoKKyAqIE5PVEU6IEFsbCBQV00gZGV2aWNlcyBpcyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgaW5wdXQgc291cmNlLgorICovCisjZGVmaW5lIElPX1BXTV9TRVRfSU5QVVRfU1JDICAgMHgyNAorc3RydWN0IGlvX3B3bV9zZXRfaW5wdXRfc3JjIHsKKwl1bnNpZ25lZCBpbnQgc3JjOwkvKiAwLi43ICovCit9OworCisvKiBTZXRzIHRoZSBkdXR5IGN5Y2xlcyBpbiBzdGVwcyBvZiAxLzI1NiwgMCA9IDAlLCAyNTUgPSAxMDAlIGR1dHkgY3ljbGUgKi8KKyNkZWZpbmUgSU9fUFBXTV9TRVRfRFVUWSAgICAgMHgyNQorCitzdHJ1Y3QgaW9fcHB3bV9zZXRfZHV0eSB7CisJaW50IGR1dHk7CQkvKiAwLi4yNTUgKi8KK307CisKKy8qIENvbmZpZ3VyYXRvbiBzdHJ1Y3QgZm9yIHRoZSBJT19QV01DTEtfU0VUX0NPTkZJRyBpb2N0bCB0byBjb25maWd1cmUKKyAqIFBXTSBjYXBhYmxlIGdwaW8gcGluczoKKyAqLworI2RlZmluZSBJT19QV01DTEtfU0VUR0VUX0NPTkZJRyAweDI2CitzdHJ1Y3QgZ3Bpb19wd21jbGtfY29uZiB7CisgIHVuc2lnbmVkIGludCBncGlvcGluOyAvKiBUaGUgcGluIG51bWJlciBiYXNlZCBvbiB0aGUgb3BlbmVkIGRldmljZSAqLworICB1bnNpZ25lZCBpbnQgYmFzZWNsazsgLyogVGhlIGJhc2UgY2xvY2sgdG8gdXNlLCBvciBzdyB3aWxsIHNlbGVjdCBvbmUgY2xvc2UqLworICB1bnNpZ25lZCBpbnQgbG93OyAgICAgLyogVGhlIG51bWJlciBvZiBsb3cgcGVyaW9kcyBvZiB0aGUgYmFzZWNsayAqLworICB1bnNpZ25lZCBpbnQgaGlnaDsgICAgLyogVGhlIG51bWJlciBvZiBoaWdoIHBlcmlvZHMgb2YgdGhlIGJhc2VjbGsgKi8KK307CisKKy8qIEV4YW1wbGVzOgorICogVG8gZ2V0IGEgc3ltbWV0cmljIDEyIE1IeiBjbG9jayB3aXRob3V0IGtub3dpbmcgYW55dGhpbmcgYWJvdXQgdGhlIGhhcmR3YXJlOgorICogYmFzZWNsayA9IDEyMDAwMDAwLCBsb3cgPSAwLCBoaWdoID0gMAorICogVG8ganVzdCBnZXQgaW5mbyBvZiBjdXJyZW50IHNldHRpbmc6CisgKiBiYXNlY2xrID0gMCwgbG93ID0gMCwgaGlnaCA9IDAsIHRoZSB2YWx1ZXMgd2lsbCBiZSB1cGRhdGVkIGJ5IGRyaXZlci4KKyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCAzNWJiYzE4Li5jOTEyOWVkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC01NCw2ICs1NCw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLDB4MzYsIGludCkgIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KICNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCkBAIC03MCwxMyArNzEsMTIgQEAKIAogI2RlZmluZSBUSU9DTUlXQUlUCTB4NTQ1QwkvKiB3YWl0IGZvciBhIGNoYW5nZSBvbiBzZXJpYWwgaW5wdXQgbGluZShzKSAqLwogI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLwotI2RlZmluZSBUSU9DR0hBWUVTRVNQICAgMHg1NDVFICAvKiBHZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgVElPQ1NIQVlFU0VTUCAgIDB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEZJT1FTSVpFCTB4NTQ2MAogCiAjZGVmaW5lIFRJT0NTRVJTRVRSUzQ4NQkweDU0NjEgIC8qIGVuYWJsZSBycy00ODUgKGRlcHJlY2F0ZWQpICovCiAjZGVmaW5lIFRJT0NTRVJXUlJTNDg1CTB4NTQ2MiAgLyogd3JpdGUgcnMtNDg1ICovCiAjZGVmaW5lIFRJT0NTUlM0ODUJMHg1NDYzICAvKiBlbmFibGUgcnMtNDg1ICovCisjZGVmaW5lIFRJT0NHUlM0ODUJMHg1NDJFICAvKiBnZXQgcnMtNDg1ICovCiAKIC8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCiAjZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKQEAgLTg2LDYgKzg2LDcgQEAKICNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKICNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CiAjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorI2RlZmluZSBUSU9DUEtUX0lPQ1RMCQk2NAogCiAjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggMjQ5YTc4NC4uZjExZjhmNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTMsNiArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDFmZmZmZmZmKQotCiAjZW5kaWYgLyogIShfX0FTTV9DUklTX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc3luY19zZXJpYWwuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zeW5jX3NlcmlhbC5oCmluZGV4IGQ4N2MyNGQuLjdmODI3ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zeW5jX3NlcmlhbC5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zeW5jX3NlcmlhbC5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFNTUF9PUE9MQVJJVFkgIF9JT1IoJ1MnLCA0LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFNTUF9TUEkgICAgICAgIF9JT1IoJ1MnLCA1LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFNTUF9JTkJVRkNIVU5LIF9JT1IoJ1MnLCA2LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFNTUF9JTlBVVCAgICAgIF9JT1IoJ1MnLCA3LCB1bnNpZ25lZCBpbnQpCiAKIC8qIFZhbHVlcyBmb3IgU1NQX1NQRUVEICovCiAjZGVmaW5lIFNTUDE1MCAgICAgICAgMApAQCAtMzcsNiArMzgsNyBAQAogI2RlZmluZSBTU1A5MjE2MDAgICAgMTMKICNkZWZpbmUgU1NQMzEyNTAwMCAgIDE0CiAjZGVmaW5lIENPREVDICAgICAgICAxNQorI2RlZmluZSBDT0RFQ19mMzI3NjggMTYKIAogI2RlZmluZSBGUkVRXzRNSHogICAwCiAjZGVmaW5lIEZSRVFfMk1IeiAgIDEKQEAgLTQ2LDkgKzQ4LDE0IEBACiAjZGVmaW5lIEZSRVFfMTI4a0h6IDUKICNkZWZpbmUgRlJFUV82NGtIeiAgNgogI2RlZmluZSBGUkVRXzMya0h6ICA3CisvKiBGUkVRXyogd2l0aCB2YWx1ZXMgd2hlcmUgYml0ICh2YWx1ZSAmIDB4MTApIGlzIHNldCBhcmUgKi8KKy8qIHVzZWQgZm9yIENPREVDX2YzMjc2OCAqLworI2RlZmluZSBGUkVRXzQwOTZrSHogMTYgLyogQ09ERUNfZjMyNzY4ICovCiAKIC8qIFVzZWQgYnkgYXBwbGljYXRpb24gdG8gc2V0IENPREVDIGRpdmlkZXIsIHdvcmQgcmF0ZSBhbmQgZnJhbWUgcmF0ZSAqLwotI2RlZmluZSBDT0RFQ19WQUwoZnJlcSwgY2xrX3Blcl9zeW5jLCBzeW5jX3Blcl9mcmFtZSkgKENPREVDIHwgKGZyZXEgPDwgOCkgfCAoY2xrX3Blcl9zeW5jIDw8IDE2KSB8IChzeW5jX3Blcl9mcmFtZSA8PCAyOCkpCisjZGVmaW5lIENPREVDX1ZBTChmcmVxLCBjbGtfcGVyX3N5bmMsIHN5bmNfcGVyX2ZyYW1lKSBcCisJKChDT0RFQyArICgoZnJlcSAmIDB4MTApID4+IDQpKSB8IChmcmVxIDw8IDgpIHwgXAorCQkgICAoY2xrX3Blcl9zeW5jIDw8IDE2KSB8IChzeW5jX3Blcl9mcmFtZSA8PCAyOCkpCiAKIC8qIFVzZWQgYnkgZHJpdmVyIHRvIGV4dHJhY3Qgc3BlZWQgKi8KICNkZWZpbmUgR0VUX1NQRUVEKHgpICh4ICYgMHhmZikKQEAgLTY4LDYgKzc1LDcgQEAKICNkZWZpbmUgTk9STUFMX1NZTkMgICAgICAgICAgICAgICAgMQogI2RlZmluZSBFQVJMWV9TWU5DICAgICAgICAgICAgICAgICAyCiAjZGVmaW5lIFNFQ09ORF9XT1JEX1NZTkMgICAgIDB4NDAwMDAKKyNkZWZpbmUgTEFURV9TWU5DICAgICAgICAgICAgMHg4MDAwMAogCiAjZGVmaW5lIEJJVF9TWU5DICAgICAgICAgICAgICAgICAgIDQKICNkZWZpbmUgV09SRF9TWU5DICAgICAgICAgICAgICAgICAgOApAQCAtMTA0LDQgKzExMiwyMSBAQAogLyogVmFsdWVzIGZvciBTU1BfSU5CVUZDSFVOSyAqLwogLyogcGxhaW4gaW50ZWdlciB3aXRoIHRoZSBzaXplIG9mIERNQSBjaHVua3MgKi8KIAorLyogVG8gZW5zdXJlIHRoYXQgdGhlIHRpbWVzdGFtcHMgYXJlIGFsaWduZWQgd2l0aCB0aGUgZGF0YSBiZWluZyByZWFkCisgKiB0aGUgcmVhZCBsZW5ndGggTVVTVCBiZSBhIG11bHRpcGxlIG9mIHRoZSBsZW5ndGggb2YgdGhlIERNQSBidWZmZXJzLgorICoKKyAqIFVzZSBhIG11bHRpcGxlIG9mIFNTUF9JTlBVVF9DSFVOS19TSVpFIGRlZmluZWQgYmVsb3cuCisgKi8KKyNkZWZpbmUgU1NQX0lOUFVUX0NIVU5LX1NJWkUgIDI1NgorCisvKiBSZXF1ZXN0IHN0cnVjdCB0byBwYXNzIHRocm91Z2ggdGhlIGlvY3RsIGludGVyZmFjZSB0byByZWFkCisgKiBkYXRhIHdpdGggdGltZXN0YW1wcy4KKyAqLworc3RydWN0IHNzcF9yZXF1ZXN0IHsKKwljaGFyIF9fdXNlciAqYnVmOwkvKiBXaGVyZSB0byBwdXQgdGhlIGRhdGEuICovCisJc2l6ZV90IGxlbjsJCS8qIFNpemUgb2YgYnVmLiBNVVNUIGJlIGEgbXVsdGlwbGUgb2YgKi8KKwkJCQkvKiBTU1BfSU5QVVRfQ0hVTktfU0laRSEgKi8KKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CS8qIFRoZSB0aW1lIHRoZSBkYXRhIHdhcyBzYW1wbGVkLiAqLworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IDY2ZTFhNzQuLjFjNDNiYzggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0yMTQsNiArMjE0LDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9wcm9maWxlLmMgYi9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYwppbmRleCBiOTE3NTQ5Li4xOTVlYzVmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3Byb2ZpbGUuYwpAQCAtOSwxMiArOSwxMSBAQAogCiAjZGVmaW5lIFNBTVBMRV9CVUZGRVJfU0laRSA4MTkyCiAKLXN0YXRpYyBjaGFyKiBzYW1wbGVfYnVmZmVyOwotc3RhdGljIGNoYXIqIHNhbXBsZV9idWZmZXJfcG9zOworc3RhdGljIGNoYXIgKnNhbXBsZV9idWZmZXI7CitzdGF0aWMgY2hhciAqc2FtcGxlX2J1ZmZlcl9wb3M7CiBzdGF0aWMgaW50IHByb2ZfcnVubmluZyA9IDA7CiAKLXZvaWQKLWNyaXNfcHJvZmlsZV9zYW1wbGUoc3RydWN0IHB0X3JlZ3MqIHJlZ3MpCit2b2lkIGNyaXNfcHJvZmlsZV9zYW1wbGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaWYgKCFwcm9mX3J1bm5pbmcpCiAJCXJldHVybjsKQEAgLTI0LDcgKzIzLDcgQEAKIAllbHNlCiAJCSoodW5zaWduZWQgaW50KilzYW1wbGVfYnVmZmVyX3BvcyA9IDA7CiAKLQkqKHVuc2lnbmVkIGludCopKHNhbXBsZV9idWZmZXJfcG9zICsgNCkgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCSoodW5zaWduZWQgaW50ICopKHNhbXBsZV9idWZmZXJfcG9zICsgNCkgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwogCXNhbXBsZV9idWZmZXJfcG9zICs9IDg7CiAKIAlpZiAoc2FtcGxlX2J1ZmZlcl9wb3MgPT0gc2FtcGxlX2J1ZmZlciArIFNBTVBMRV9CVUZGRVJfU0laRSkKQEAgLTU0LDYgKzUzLDcgQEAKIHsKIAlzYW1wbGVfYnVmZmVyX3BvcyA9IHNhbXBsZV9idWZmZXI7CiAJbWVtc2V0KHNhbXBsZV9idWZmZXIsIDAsIFNBTVBMRV9CVUZGRVJfU0laRSk7CisJcmV0dXJuIGNvdW50IDwgU0FNUExFX0JVRkZFUl9TSVpFID8gY291bnQgOiBTQU1QTEVfQlVGRkVSX1NJWkU7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNyaXNfcHJvY19wcm9maWxlX29wZXJhdGlvbnMgPSB7CkBAIC02MSw4ICs2MSw3IEBACiAJLndyaXRlCQk9IHdyaXRlX2NyaXNfcHJvZmlsZSwKIH07CiAKLXN0YXRpYyBpbnQKLV9faW5pdCBpbml0X2NyaXNfcHJvZmlsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaW5pdF9jcmlzX3Byb2ZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogCkBAIC04Miw1ICs4MSw1IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogX19pbml0Y2FsbChpbml0X2NyaXNfcHJvZmlsZSk7CisKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKaW5kZXggYzcyNzMwZC4uYjUwOTY0MyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMKQEAgLTM5LDEzICszOSwxNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OyAvKiBpbml0L21haW4uYyAqLwogdW5zaWduZWQgbG9uZyBsb29wc19wZXJfdXNlYzsKIAorCisjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19zbG93X2dldHRpbWVvZmZzZXQodm9pZCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAoKmRvX2dldHRpbWVvZmZzZXQpKHZvaWQpID0gZG9fc2xvd19nZXR0aW1lb2Zmc2V0OwogCiB1MzIgYXJjaF9nZXR0aW1lb2Zmc2V0KHZvaWQpCiB7Ci0JcmV0dXJuIGRvX2dldHRpbWVvZmZzZXQoKSAqIDEwMDA7CisgICAgICAgcmV0dXJuIGRvX2dldHRpbWVvZmZzZXQoKSAqIDEwMDA7CiB9CisjZW5kaWYKIAogLyoKICAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHByb3Blcmx5OyBpdCBqdXN0CkBAIC0xNTEsNyArMTU0LDcgQEAKIAogdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqICgxMDAwMDAwMDAwIC8gSFopICsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzICogKE5TRUNfUEVSX1NFQyAvIEhaKSArCiAJCWdldF9uc19pbl9qaWZmaWUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQ0OWQxN2QyLi40NDIyMTg5IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01OCw2ICs1OCw4IEBACiAJX19fZGF0YV9zdGFydCA9IC4gOwogCV9fU2RhdGEgPSAuIDsKIAkuZGF0YSA6IHsJCQkvKiBEYXRhICovCisJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoMzIpCisJCVJFQURfTU9TVExZX0RBVEEoMzIpCiAJCURBVEFfREFUQQogCX0KIAlfX2VkYXRhID0gLiA7CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbi4gKi8KQEAgLTg0LDYgKzg2LDE2IEBACiAJfQogCVNFQ1VSSVRZX0lOSVQKIAorCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZGVkIGF0IHJ1bnRpbWUsIG5vdCBsaW5rIHRpbWUsCisJICogdG8gZGVhbCB3aXRoIHJlZmVyZW5jZXMgZnJvbSBfX2J1Z190YWJsZQorCSAqLworCS5leGl0LnRleHQgOiB7CisJCUVYSVRfVEVYVAorCX0KKwkuZXhpdC5kYXRhIDogeworCQlFWElUX0RBVEEKKwl9CisKICNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMTAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAkuaW5pdC5yYW1mcyA6IHsKQEAgLTExMiw3ICsxMjQsNyBAQAogCV9faW5pdF9lbmQgPSAuOwogCiAJX19kYXRhX2VuZCA9IC4gOwkJLyogTW92ZSB0byBfZWRhdGEgPyAqLwotCUJTU19TRUNUSU9OKDAsIDAsIDApCisJQlNTX1NFQ1RJT04oMSwgMSwgMSkKIAogCS4gPSAgQUxJR04gKDB4MjApOwogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2ZhdWx0LmMgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwppbmRleCAzODBkZjFhLi45ZGNhYzhlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vZmF1bHQuYworKysgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwpAQCAtMSwxOSArMSwxOCBAQAogLyoKLSAqICBsaW51eC9hcmNoL2NyaXMvbW0vZmF1bHQuYworICogIGFyY2gvY3Jpcy9tbS9mYXVsdC5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMC0yMDA2ICBBeGlzIENvbW11bmljYXRpb25zIEFCCi0gKgotICogIEF1dGhvcnM6ICBCam9ybiBXZXNlbgotICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAxMCAgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBleHRlcm4gaW50IGZpbmRfZml4dXBfY29kZShzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiB2b2lkIGRpZV9pZl9rZXJuZWwoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqLCBsb25nKTsKK2V4dGVybiB2b2lkIHNob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogLyogZGVidWcgb2YgbG93LWxldmVsIFRMQiByZWxvYWQgKi8KICN1bmRlZiBERUJVRwpAQCAtMTA4LDExICsxMDcsMTEgQEAKIAlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKIAogCS8qCi0JICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0IG9yIGhhdmUgbm8gdXNlcgotCSAqIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0Li4KKwkgKiBJZiB3ZSdyZSBpbiBhbiBpbnRlcnJ1cHQgb3IgImF0b21pYyIgb3BlcmF0aW9uIG9yIGhhdmUgbm8KKwkgKiB1c2VyIGNvbnRleHQsIHdlIG11c3Qgbm90IHRha2UgdGhlIGZhdWx0LgogCSAqLwogCi0JaWYgKGluX2ludGVycnVwdCgpIHx8ICFtbSkKKwlpZiAoaW5fYXRvbWljKCkgfHwgIW1tKQogCQlnb3RvIG5vX2NvbnRleHQ7CiAKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CkBAIC0xOTMsMTQgKzE5MiwyNSBAQAogCS8qIFVzZXIgbW9kZSBhY2Nlc3NlcyBqdXN0IGNhdXNlIGEgU0lHU0VHViAqLwogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzIChwaWQgJWQpIHNlZ2ZhdWx0cyBmb3IgcGFnZSAiCisJCQkiYWRkcmVzcyAlMDhseCBhdCBwYyAlMDhseFxuIiwKKwkJCXRzay0+Y29tbSwgdHNrLT5waWQsCisJCQlhZGRyZXNzLCBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpKTsKKworCQkvKiBXaXRoIERQRyBvbiwgd2UndmUgYWxyZWFkeSBkdW1wZWQgcmVnaXN0ZXJzIGFib3ZlLiAgKi8KKwkJRFBHKGlmICgwKSkKKwkJCXNob3dfcmVnaXN0ZXJzKHJlZ3MpOworCisjaWZkZWYgQ09ORklHX05PX1NFR0ZBVUxUX1RFUk1JTkFUSU9OCisJCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCAwID09IDEpOworI2Vsc2UKIAkJaW5mby5zaV9zaWdubyA9IFNJR1NFR1Y7CiAJCWluZm8uc2lfZXJybm8gPSAwOwogCQkvKiBpbmZvLnNpX2NvZGUgaGFzIGJlZW4gc2V0IGFib3ZlICovCiAJCWluZm8uc2lfYWRkciA9ICh2b2lkICopYWRkcmVzczsKIAkJZm9yY2Vfc2lnX2luZm8oU0lHU0VHViwgJmluZm8sIHRzayk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXMgKHBpZCAlZCkgc2VnZmF1bHRzIGZvciBwYWdlICIKLQkJICAgICAgICJhZGRyZXNzICUwOGx4IGF0IHBjICUwOGx4XG4iLAotCQkgICAgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgYWRkcmVzcywgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7CisjZW5kaWYKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQ1LDEwICsyNTUsMTAgQEAKIAogIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JaWYgKHVzZXJfbW9kZShyZWdzKSkKLQkJZG9fZXhpdChTSUdLSUxMKTsKLQlnb3RvIG5vX2NvbnRleHQ7CisJaWYgKCF1c2VyX21vZGUocmVncykpCisJCWdvdG8gbm9fY29udGV4dDsKKwlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworCXJldHVybjsKIAogIGRvX3NpZ2J1czoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwpAQCAtMzM0LDggKzM0NCwxMSBAQAogZmluZF9maXh1cF9jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmZpeHVwOworCS8qIGluIGNhc2Ugb2YgZGVsYXkgc2xvdCBmYXVsdCAodjMyKSAqLworCXVuc2lnbmVkIGxvbmcgaXAgPSAoaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAmIH4weDEpOwogCi0JaWYgKChmaXh1cCA9IHNlYXJjaF9leGNlcHRpb25fdGFibGVzKGluc3RydWN0aW9uX3BvaW50ZXIocmVncykpKSAhPSAwKSB7CisJZml4dXAgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhpcCk7CisJaWYgKGZpeHVwICE9IDApIHsKIAkJLyogQWRqdXN0IHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGluIHRoZSBzdGFja2ZyYW1lLiAqLwogCQlpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpID0gZml4dXAtPmZpeHVwOwogCQlhcmNoX2ZpeHVwKHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggNGI1ODMwYi4uMTYzOTliZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC00MCwxMCArNDAsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDZhZjVkODMuLmRmYjgxMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTI2LDE0ICsxMjYsNiBAQAogfQogCiBzdGF0aWMgaW5saW5lCi1pbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gMSA8PCBMMV9DQUNIRV9TSElGVDsKLX0KLQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKLQotc3RhdGljIGlubGluZQogdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCA2OGU0Njc3Li5jYjRjMzE3IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC0xNTIsNyArMTUyLDcgQEAKIAlhc20gdm9sYXRpbGUoInRsYnByICUwLGdyMCwjNCwjMSIgOiA6ICJyIih2YWRkcikgOiAibWVtb3J5Iik7CVwKIH0gd2hpbGUoMCkKIAotc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCiB7CiAJc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgMDoJCV9fa3VubWFwX2F0b21pY19wcmltYXJ5KDAsIDIpOwlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggZDBjMzBlMy4uYTk5M2UzNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgVENTRVRTRjIJX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MCAgLyogdGhlc2UgbnVtYmVycyBuZWVkIHRvIGJlIGFkanVzdGVkLiAqLwogI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKQEAgLTc5LDYgKzgwLDcgQEAKICNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKICNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CiAjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorI2RlZmluZSBUSU9DUEtUX0lPQ1RMCQk2NAogCiAjZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21lbS1sYXlvdXQuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL21lbS1sYXlvdXQuaAppbmRleCBjY2FlOTgxLi5lOWEwZWM4IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9tZW0tbGF5b3V0LmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vbWVtLWxheW91dC5oCkBAIC0zNSw3ICszNSw3IEBACiAgKiB0aGUgc2xhYiBtdXN0IGJlIGFsaWduZWQgc3VjaCB0aGF0IGxvYWQtIGFuZCBzdG9yZS1kb3VibGUgaW5zdHJ1Y3Rpb25zIGRvbid0CiAgKiBmYXVsdCBpZiB1c2VkCiAgKi8KLSNkZWZpbmUJQVJDSF9LTUFMTE9DX01JTkFMSUdOCQlMMV9DQUNIRV9CWVRFUworI2RlZmluZQlBUkNIX0RNQV9NSU5BTElHTgkJTDFfQ0FDSEVfQllURVMKICNkZWZpbmUJQVJDSF9TTEFCX01JTkFMSUdOCQlMMV9DQUNIRV9CWVRFUwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCAxNjE0YmZkLi4wZTVlYjMwIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTMsNiArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweGZmZmZmZmZmVUwpCi0KICNlbmRpZiAvKiAhX0FTTV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdGVybWJpdHMuaAppbmRleCA1NTY4NDkyLi43NzIyZTE5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTE4MCw2ICsxODAsNyBAQAogI2RlZmluZSBGTFVTSE8JMDAxMDAwMAogI2RlZmluZSBQRU5ESU4JMDA0MDAwMAogI2RlZmluZSBJRVhURU4JMDEwMDAwMAorI2RlZmluZSBFWFRQUk9DCTAyMDAwMDAKIAogCiAvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2xvY2FsNjQuaCBiL2FyY2gvZnJ2L2tlcm5lbC9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvS2NvbmZpZyBiL2FyY2gvaDgzMDAvS2NvbmZpZwppbmRleCA1M2NjNjY5Li45ODhiNmZmIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL0tjb25maWcKKysrIGIvYXJjaC9oODMwMC9LY29uZmlnCkBAIC02MiwxMCArNjIsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfQlVHCiAgICAgICAgIGJvb2wKICAgICAgICAgZGVwZW5kcyBvbiBCVUcKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IDk4YTUzZDAuLmI2YjI0OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCiAjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQpAQCAtNzksNiArODAsNyBAQAogI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAogI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKICNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwJCTY0CiAKICNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjczMDBlLi4wMDAwMDAwCi0tLSBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vbWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLS8qCi0gKiBtZC5oOiBIaWdoIHNwZWVkIHhvcl9ibG9jayBvcGVyYXRpb24gZm9yIFJBSUQ0LzUgCi0gKgotICovCi0gCi0jaWZuZGVmIF9fQVNNX01EX0gKLSNkZWZpbmUgX19BU01fTURfSAotCi0vKiAjZGVmaW5lIEhBVkVfQVJDSF9YT1JCTE9DSyAqLwotCi0jZGVmaW5lIE1EX1hPUkJMT0NLX0FMSUdOTUVOVAlzaXplb2YobG9uZykKLQotI2VuZGlmIC8qIF9fQVNNX01EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBkZTA4YTRhLi44MjEzMGVkIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0zLDYgKzMsNCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoMHhmZmZmZmZmZikKLQogI2VuZGlmIC8qICEoX0g4MzAwX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKaW5kZXggMzFlY2E4MS4uMzI4N2E2MiAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vdGVybWJpdHMuaApAQCAtMTc5LDYgKzE3OSw3IEBACiAjZGVmaW5lIEZMVVNITwkwMDEwMDAwCiAjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCiAjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisjZGVmaW5lIEVYVFBST0MJMDIwMDAwMAogCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvS2NvbmZpZyBiL2FyY2gvaWE2NC9LY29uZmlnCmluZGV4IDk1NjEwODIuLmJhMjI4NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9LY29uZmlnCkBAIC04MiwxMCArODIsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIEdFTkVSSUNfVElNRV9WU1lTQ0FMTAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTUwMyw4ICs0OTksNyBAQAogCWRlcGVuZHMgb24gTlVNQQogCiBjb25maWcgSEFWRV9NRU1PUllMRVNTX05PREVTCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gTlVNQQorCWRlZl9ib29sIE5VTUEKIAogY29uZmlnIEFSQ0hfUFJPQ19LQ09SRV9URVhUCiAJZGVmX2Jvb2wgeQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA3ZDA5YTA5Li5hMmU3MzY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtODYsOCArODYsNiBAQAogCXJldHVybiBkYWRkcjsKIH0KIAotZXh0ZXJuIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKTsKLQogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfY2FjaGVfc3luYyAoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpAQCAtOTksNiArOTcsNCBAQAogCW1iKCk7CiB9CiAKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDEpCS8qIGFsbCB3ZSBkbyBpcyBjb2hlcmVudCBtZW1vcnkuLi4gKi8KLQogI2VuZGlmIC8qIF9BU01fSUE2NF9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggZjQxYjYzNi4uYjc5YzM4NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNTksNiArNTksNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCiAjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQpAQCAtNzUsOCArNzYsNiBAQAogCiAjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCiAjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCiAKIC8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCkBAIC04Nyw2ICs4Niw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGYyOTlhNGYuLjA4ZmQ5M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0yLDE1ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9JQTY0X1NDQVRURVJMSVNUX0gKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+Ci0vKgotICogSXQgdXNlZCB0byBiZSB0aGF0IElTQV9ETUFfVEhSRVNIT0xEIGhhZCBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUKLSAqIERNQS1saW1pdHMgb2YgSVNBLWRldmljZXMuICBOb3dhZGF5cywgaXRzIG9ubHkgcmVtYWluaW5nIHVzZSAoYXBhcnQKLSAqIGZyb20gdGhlIGFoYTE1NDIuYyBkcml2ZXIsIHdoaWNoIGlzbid0IDY0LWJpdCBjbGVhbiBhbnlob3cpIGlzIHRvCi0gKiB0ZWxsIHRoZSBibG9jay1sYXllciAodmlhIEJMS19CT1VOQ0VfSVNBKSB3aGF0IHRoZSBtYXguIHBoeXNpY2FsCi0gKiBhZGRyZXNzIG9mIGEgcGFnZSBpcyB0aGF0IGlzIGFsbG9jYXRlZCB3aXRoIEdGUF9ETUEuICBPbiBJQS02NCwKLSAqIHRoYXQncyA0R0IgLSAxLgotICovCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECTB4ZmZmZmZmZmYKICNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IDlmMTYyZTAuLmMwMDliOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xODcsNiArMTg3LDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IDZjODkyMjguLjRhNzQ2ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTI1LDcgKzI1LDcgQEAKIAlpZiAoaXJxX3ByZXBhcmVfbW92ZShpcnEsIGNwdSkpCiAJCXJldHVybiAtMTsKIAotCXJlYWRfbXNpX21zZyhpcnEsICZtc2cpOworCWdldF9jYWNoZWRfbXNpX21zZyhpcnEsICZtc2cpOwogCiAJYWRkciA9IG1zZy5hZGRyZXNzX2xvOwogCWFkZHIgJj0gTVNJX0FERFJfREVTVF9JRF9NQVNLOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCA3NDQzMjkwLi5jY2UwNTBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtMjE5MSw4ICsyMTkxLDE1IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBjaGFyICpwZm1mc19kbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gZHluYW1pY19kbmFtZShkZW50cnksIGJ1ZmZlciwgYnVmbGVuLCAicGZtOlslbHVdIiwKKwkJCSAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcGZtZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gcGZtZnNfZGVsZXRlX2RlbnRyeSwKKwkuZF9kbmFtZSA9IHBmbWZzX2RuYW1lLAogfTsKIAogCkBAIC0yMjAyLDggKzIyMDksNyBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHBhdGggcGF0aDsKLQljaGFyIG5hbWVbMzJdOwotCXN0cnVjdCBxc3RyIHRoaXM7CisJc3RydWN0IHFzdHIgdGhpcyA9IHsgLm5hbWUgPSAiIiB9OwogCiAJLyoKIAkgKiBhbGxvY2F0ZSBhIG5ldyBpbm9kZQpAQCAtMjIxOCwxMSArMjIyNCw2IEBACiAJaW5vZGUtPmlfdWlkICA9IGN1cnJlbnRfZnN1aWQoKTsKIAlpbm9kZS0+aV9naWQgID0gY3VycmVudF9mc2dpZCgpOwogCi0Jc3ByaW50ZihuYW1lLCAiWyVsdV0iLCBpbm9kZS0+aV9pbm8pOwotCXRoaXMubmFtZSA9IG5hbWU7Ci0JdGhpcy5sZW4gID0gc3RybGVuKG5hbWUpOwotCXRoaXMuaGFzaCA9IGlub2RlLT5pX2lubzsKLQogCS8qCiAJICogYWxsb2NhdGUgYSBuZXcgZGNhY2hlIGVudHJ5CiAJICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggNDFhZTZhNS4uOGZiOTU4YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtOTgsMTIgKzk4LDYgQEAKIAogdW5zaWduZWQgbG9uZyBpYTY0X21heF9jYWNoZWxpbmVfc2l6ZTsKIAotaW50IGRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCi17Ci0gICAgICAgIHJldHVybiBpYTY0X21heF9jYWNoZWxpbmVfc2l6ZTsKLX0KLUVYUE9SVF9TWU1CT0woZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQpOwotCiB1bnNpZ25lZCBsb25nIGlhNjRfaW9iYXNlOwkvKiB2aXJ0dWFsIGFkZHJlc3MgZm9yIEkvTyBhY2Nlc3NlcyAqLwogRVhQT1JUX1NZTUJPTChpYTY0X2lvYmFzZSk7CiBzdHJ1Y3QgaW9fc3BhY2UgaW9fc3BhY2VbTUFYX0lPX1NQQUNFU107CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDZhMTM4MGUuLmQwMDNiNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jCkBAIC0zOTAsMTMgKzM5MCwxMSBAQAogCiAJZml4X2IwX2Zvcl9ic3AoKTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiAJLyoKIAkgKiBudW1hX25vZGVfaWQoKSB3b3JrcyBhZnRlciB0aGlzLgogCSAqLwogCXNldF9udW1hX25vZGUoY3B1X3RvX25vZGVfbWFwW2NwdWlkXSk7CiAJc2V0X251bWFfbWVtKGxvY2FsX21lbW9yeV9ub2RlKGNwdV90b19ub2RlX21hcFtjcHVpZF0pKTsKLSNlbmRpZgogCiAJaXBpX2NhbGxfbG9ja19pcnEoKTsKIAlzcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKQEAgLTUxMCwyMSArNTA4LDE4IEBACiAJCS5kb25lCT0gQ09NUExFVElPTl9JTklUSUFMSVpFUihjX2lkbGUuZG9uZSksCiAJfTsKIAorCS8qCisJICogV2UgY2FuJ3QgdXNlIGtlcm5lbF90aHJlYWQgc2luY2Ugd2UgbXVzdCBhdm9pZCB0bworCSAqIHJlc2NoZWR1bGUgdGhlIGNoaWxkLgorCSAqLwogIAljX2lkbGUuaWRsZSA9IGdldF9pZGxlX2Zvcl9jcHUoY3B1KTsKICAJaWYgKGNfaWRsZS5pZGxlKSB7CiAJCWluaXRfaWRsZShjX2lkbGUuaWRsZSwgY3B1KTsKICAJCWdvdG8gZG9fcmVzdDsKIAl9CiAKLQkvKgotCSAqIFdlIGNhbid0IHVzZSBrZXJuZWxfdGhyZWFkIHNpbmNlIHdlIG11c3QgYXZvaWQgdG8gcmVzY2hlZHVsZSB0aGUgY2hpbGQuCi0JICovCi0JaWYgKCFrZXZlbnRkX3VwKCkgfHwgY3VycmVudF9pc19rZXZlbnRkKCkpCi0JCWNfaWRsZS53b3JrLmZ1bmMoJmNfaWRsZS53b3JrKTsKLQllbHNlIHsKLQkJc2NoZWR1bGVfd29yaygmY19pZGxlLndvcmspOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjX2lkbGUuZG9uZSk7Ci0JfQorCXNjaGVkdWxlX3dvcmsoJmNfaWRsZS53b3JrKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjX2lkbGUuZG9uZSk7CiAKIAlpZiAoSVNfRVJSKGNfaWRsZS5pZGxlKSkKIAkJcGFuaWMoImZhaWxlZCBmb3JrIGZvciBDUFUgJWQiLCBjcHUpOwpAQCAtNjQwLDkgKzYzNSw3IEBACiB7CiAJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIAljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X2NhbGxpbl9tYXApOwotI2lmZGVmIENPTkZJR19OVU1BCiAJc2V0X251bWFfbm9kZShjcHVfdG9fbm9kZV9tYXBbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7Ci0jZW5kaWYKIAlwZXJfY3B1KGNwdV9zdGF0ZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9IENQVV9PTkxJTkU7CiAJcGFyYXZpcnRfcG9zdF9zbXBfcHJlcGFyZV9ib290X2NwdSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCA2NTNiM2M0Li5lZDZmMjJlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtNDcxLDcgKzQ3MSw4IEBACiB7CiB9CiAKLXZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqd2FsbCwgc3RydWN0IGNsb2Nrc291cmNlICpjLCB1MzIgbXVsdCkKK3ZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqd2FsbCwgc3RydWN0IHRpbWVzcGVjICp3dG0sCisJCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMsIHUzMiBtdWx0KQogewogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00ODcsOSArNDg4LDkgQEAKIAkvKiBjb3B5IGtlcm5lbCB0aW1lIHN0cnVjdHVyZXMgKi8KICAgICAgICAgZnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZS50dl9zZWMgPSB3YWxsLT50dl9zZWM7CiAgICAgICAgIGZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWUudHZfbnNlYyA9IHdhbGwtPnR2X25zZWM7Ci0gICAgICAgIGZzeXNjYWxsX2d0b2RfZGF0YS5tb25vdG9uaWNfdGltZS50dl9zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMKKwlmc3lzY2FsbF9ndG9kX2RhdGEubW9ub3RvbmljX3RpbWUudHZfc2VjID0gd3RtLT50dl9zZWMKIAkJCQkJCQkrIHdhbGwtPnR2X3NlYzsKLSAgICAgICAgZnN5c2NhbGxfZ3RvZF9kYXRhLm1vbm90b25pY190aW1lLnR2X25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjCisJZnN5c2NhbGxfZ3RvZF9kYXRhLm1vbm90b25pY190aW1lLnR2X25zZWMgPSB3dG0tPnR2X25zZWMKIAkJCQkJCQkrIHdhbGwtPnR2X25zZWM7CiAKIAkvKiBub3JtYWxpemUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL21zaV9zbi5jCmluZGV4IGViZmRkNmEuLjBjNzJkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvbXNpX3NuLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9tc2lfc24uYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJICogUmVsZWFzZSBYSU8gcmVzb3VyY2VzIGZvciB0aGUgb2xkIE1TSSBQQ0kgYWRkcmVzcwogCSAqLwogCi0JcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CisJZ2V0X2NhY2hlZF9tc2lfbXNnKGlycSwgJm1zZyk7CiAgICAgICAgIHNuX3BkZXYgPSAoc3RydWN0IHBjaWRldl9pbmZvICopc25faXJxX2luZm8tPmlycV9wY2lpb2luZm87CiAJcGRldiA9IHNuX3BkZXYtPnBkaV9saW51eF9wY2lkZXY7CiAJcHJvdmlkZXIgPSBTTl9QQ0lERVZfQlVTUFJPVklERVIocGRldik7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvS2NvbmZpZyBiL2FyY2gvbTMyci9LY29uZmlnCmluZGV4IDNhOTMxOWYuLjgzNmFiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9LY29uZmlnCisrKyBiL2FyY2gvbTMyci9LY29uZmlnCkBAIC00NCw5ICs0NCw2IEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWRlZl9ib29sIHkKLQogY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggYjlmNTRiYi4uNjYyODgwNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgRklPTkNMRVgJMHg1NDUwCiAjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQpAQCAtNjksOCArNzAsNiBAQAogCiAjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCiAjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCiAKIC8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCkBAIC04MSw2ICs4MCw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGFlZWRkZDguLjczNzBiOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0zLDYgKzMsNCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHgxZmZmZmZmZikKLQogI2VuZGlmIC8qIF9BU01fTTMyUl9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IGJjMTA0MDAuLjk1N2EzYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xNzksNiArMTc5LDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAyZTM3MzdiLi44MDMwZTI0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTksOSArNTksNiBAQAogCWludAogCWRlZmF1bHQgMTAwCiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCBlY2FmYmUxLi4wMzk1YzUxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtOCw2ICs4LDYgQEAKICNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX1NISUZUICA0CiAjZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgKDE8PCBMMV9DQUNIRV9TSElGVCkKIAotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDI2ZjUwNTQuLjE3ZjdhNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xNiwxNiArMTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCXJldHVybiAxIDw8IEwxX0NBQ0hFX1NISUZUOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfaXNfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIGV4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCiAJCQkJZG1hX2FkZHJfdCAqLCBnZnBfdCk7CiBleHRlcm4gdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCBiOGQyZjRiLi45MWE1N2Q2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC01Miw2ICs1Miw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLDB4MzYsIGludCkgIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KICNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCkBAIC03OCw2ICs3OSw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmY3OGYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotLyoKLSAqIG1kLmg6IEhpZ2ggc3BlZWQgeG9yX2Jsb2NrIG9wZXJhdGlvbiBmb3IgUkFJRDQvNQotICoKLSAqLwotCi0jaWZuZGVmIF9fQVNNX01EX0gKLSNkZWZpbmUgX19BU01fTURfSAotCi0vKiAjZGVmaW5lIEhBVkVfQVJDSF9YT1JCTE9DSyAqLwotCi0jZGVmaW5lIE1EX1hPUkJMT0NLX0FMSUdOTUVOVAlzaXplb2YobG9uZykKLQotI2VuZGlmIC8qIF9fQVNNX01EX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggMTc1ZGEwNi4uMzEyNTA1NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTMsNyArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0vKiBUaGlzIGlzIGJvZ3VzIGFuZCBzaG91bGQgZ28gYXdheS4gKi8KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCi0KICNlbmRpZiAvKiAhKF9NNjhLX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IDhjMTQxNzAuLmFlYTFlMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xNzksNiArMTc5LDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIAogLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IDFjMTZiMWIuLmMyNDdkZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMzMyLDYgKzMzMiwxNSBAQAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLAorCX0sIHsKKwkJLmlkZW50CQk9IE1BQ19NT0RFTF9DQ0xJSSwKKwkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMgSUkiLAorCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCisJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKIAl9LAogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvbWlzYy5jIGIvYXJjaC9tNjhrL21hYy9taXNjLmMKaW5kZXggMGYxMThjYS4uZTAyM2ZjNiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9taXNjLmMKKysrIGIvYXJjaC9tNjhrL21hYy9taXNjLmMKQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgY3VkYV93cml0ZV9wcmFtIE5VTEwKICNlbmRpZgogCi0jaWYgMCAvKiBkZWYgQ09ORklHX0FEQl9QTVU2OEsgKi8KKyNpZmRlZiBDT05GSUdfQURCX1BNVTY4Swogc3RhdGljIGxvbmcgcG11X3JlYWRfdGltZSh2b2lkKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CkBAIC0xMDIsOCArMTAyLDggQEAKIAl3aGlsZSAoIXJlcS5jb21wbGV0ZSkKIAkJcG11X3BvbGwoKTsKIAotCXRpbWUgPSAocmVxLnJlcGx5WzBdIDw8IDI0KSB8IChyZXEucmVwbHlbMV0gPDwgMTYpCi0JCXwgKHJlcS5yZXBseVsyXSA8PCA4KSB8IHJlcS5yZXBseVszXTsKKwl0aW1lID0gKHJlcS5yZXBseVsxXSA8PCAyNCkgfCAocmVxLnJlcGx5WzJdIDw8IDE2KQorCQl8IChyZXEucmVwbHlbM10gPDwgOCkgfCByZXEucmVwbHlbNF07CiAJcmV0dXJuIHRpbWUgLSBSVENfT0ZGU0VUOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9sZWRzLmMgYi9hcmNoL202OGsvc3VuMy9sZWRzLmMKaW5kZXggYTNlOTQ4NC4uYWFkMmUwYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3N1bjMvbGVkcy5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL2xlZHMuYwpAQCAtNyw3ICs3LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGRmYzsKIAogCUdFVF9ERkMoZGZjKTsKLSAgICAgICAgU0VUX0RGQyhGQ19DT05UUk9MKTsKLQlTRVRfQ09OVFJPTF9CWVRFKEFDX0xFRFMsYnl0ZSk7CisJU0VUX0RGQyhGQ19DT05UUk9MKTsKKwlTRVRfQ09OVFJPTF9CWVRFKEFDX0xFRFMsIGJ5dGUpOwogCVNFVF9ERkMoZGZjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L0tjb25maWcgYi9hcmNoL202OGtub21tdS9LY29uZmlnCmluZGV4IGVmZWI2MDMuLjI2MDljMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L0tjb25maWcKKysrIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwpAQCAtNjMsMTAgKzYzLDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL0tjb25maWcgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwppbmRleCA5YmQ2NGI0Li42OTJmZGZjIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvS2NvbmZpZworKysgYi9hcmNoL21pY3JvYmxhemUvS2NvbmZpZwpAQCAtNTEsOSArNTEsNiBAQAogY29uZmlnIEdFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19USU1FX1ZTWVNDQUxMCiAJZGVmX2Jvb2wgbgogCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDUwNzM4OTUuLjhmYmIwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xMDYsNyArMTA2LDYgQEAKIAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0jZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpCSgxKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQpAQCAtMTMyLDExICsxMzEsNiBAQAogCW9wcy0+ZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGNwdV9hZGRyLCBkbWFfaGFuZGxlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gTDFfQ0FDSEVfQllURVM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IDRmMjY4ZmEuLmNmMzc3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtNDAsNyArNDAsNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyogTVMgYmUgc3VyZSB0aGF0IFNMQUIgYWxsb2NhdGVzIGFsaWduZWQgb2JqZWN0cyAqLwotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKIAogI2RlZmluZSBBUkNIX1NMQUJfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBkYzRhODkwLi4zNWQ3ODZmIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMSwzICsxIEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KLQotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggMzY2NDJkZi4uM2FkNTlkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTc1OCwxMCArNzU4LDYgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlib29sCi0JZGVmYXVsdCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA2NjRiYTUzLi4xOGZiZjdhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNjIsMTUgKzYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCi17Ci0JLyogWFhYIExhcmdlc3Qgb24gYW55IE1JUFMgKi8KLQlyZXR1cm4gMTI4OwotfQotCi1leHRlcm4gaW50IGRtYV9pc19jb25zaXN0ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcik7Ci0KIGV4dGVybiB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCAyNWFkZmIwLi43NTc1M2NhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTQ4LDE0ICs0OCwxNCBAQAogZXh0ZXJuIHZvaWQgKl9fa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCBfX2t1bm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCAqX19rbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotZXh0ZXJuIHZvaWQgX19rdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOworZXh0ZXJuIHZvaWQgX19rdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwogZXh0ZXJuIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICpfX2ttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKTsKIAogI2RlZmluZSBrbWFwCQkJX19rbWFwCiAjZGVmaW5lIGt1bm1hcAkJCV9fa3VubWFwCiAjZGVmaW5lIGttYXBfYXRvbWljCQlfX2ttYXBfYXRvbWljCi0jZGVmaW5lIGt1bm1hcF9hdG9taWMJCV9fa3VubWFwX2F0b21pYworI2RlZmluZSBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrCQlfX2t1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sKICNkZWZpbmUga21hcF9hdG9taWNfdG9fcGFnZQlfX2ttYXBfYXRvbWljX3RvX3BhZ2UKIAogI2RlZmluZSBmbHVzaF9jYWNoZV9rbWFwcygpCWZsdXNoX2NhY2hlX2FsbCgpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggM2YwNGE5OS4uZDg3Y2IwNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZQkgVElPQ1BLVF9TVEFSVAkJMHgwOAkvKiBzdGFydCBvdXRwdXQgKi8KICNkZWZpbmUJIFRJT0NQS1RfTk9TVE9QCQkweDEwCS8qIG5vIG1vcmUgXlMsIF5RICovCiAjZGVmaW5lCSBUSU9DUEtUX0RPU1RPUAkJMHgyMAkvKiBub3cgZG8gXlMgXlEgKi8KLS8qICNkZWZpbmUgIFRJT0NQS1RfSU9DVEwJCTB4NDAJc3RhdGUgY2hhbmdlIG9mIHB0eSBkcml2ZXIgKi8KKyNkZWZpbmUgIFRJT0NQS1RfSU9DVEwJCTB4NDAJLyogc3RhdGUgY2hhbmdlIG9mIHB0eSBkcml2ZXIgKi8KICNkZWZpbmUgVElPQ1NXSU5TWglfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkJLyogc2V0IHdpbmRvdyBzaXplICovCiAjZGVmaW5lIFRJT0NHV0lOU1oJX0lPUigndCcsIDEwNCwgc3RydWN0IHdpbnNpemUpCS8qIGdldCB3aW5kb3cgc2l6ZSAqLwogI2RlZmluZSBUSU9DTk9UVFkJMHg1NDcxCQkvKiB2b2lkIHR0eSBhc3NvY2lhdGlvbiAqLwpAQCAtODMsNiArODMsNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgMHgyRCwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywgMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsIDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywgMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAvKiBJIGhvcGUgdGhlIHJhbmdlIGZyb20gMHg1NDgwIG9uIGlzIGZyZWUgLi4uICovCiAjZGVmaW5lIFRJT0NTQ1RUWQkweDU0ODAJCS8qIGJlY29tZSBjb250cm9sbGluZyB0dHkgKi8KQEAgLTEwMyw3ICsxMDQsNSBAQAogI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDkwIC8qIFNldCBtdWx0aXBvcnQgY29uZmlnICovCiAjZGVmaW5lIFRJT0NNSVdBSVQgICAgICAweDU0OTEgLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KICNkZWZpbmUgVElPQ0dJQ09VTlQgICAgIDB4NTQ5MiAvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AJMHg1NDkzIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQCTB4NTQ5NCAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KIAogI2VuZGlmIC8qIF9fQVNNX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYy9rbWFsbG9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2ttYWxsb2MuaAppbmRleCBiOGU2ZGViLi5hNWQ2NjkwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2ttYWxsb2MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL2ttYWxsb2MuaApAQCAtNyw3ICs3LDcgQEAKICAqIFRvdGFsIG92ZXJraWxsIGZvciBtb3N0IHN5c3RlbXMgYnV0IG5lZWQgYXMgYSBzYWZlIGRlZmF1bHQuCiAgKiBTZXQgdGhpcyBvbmUgaWYgYW55IGRldmljZSBpbiB0aGUgc3lzdGVtIG1pZ2h0IGRvIG5vbi1jb2hlcmVudCBETUEuCiAgKi8KLSNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCTEyOAorI2RlZmluZSBBUkNIX0RNQV9NSU5BTElHTgkxMjgKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fTUFDSF9HRU5FUklDX0tNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy9rbWFsbG9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L2ttYWxsb2MuaAppbmRleCA0MjZiZDA0Li44MmMyM2NlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L2ttYWxsb2MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L2ttYWxsb2MuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19BU01fTUFDSF9JUDI3X0tNQUxMT0NfSAogCiAvKgotICogQWxsIGhhcHB5LCBubyBuZWVkIHRvIGRlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04KKyAqIEFsbCBoYXBweSwgbm8gbmVlZCB0byBkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04KICAqLwogCiAjZW5kaWYgLyogX19BU01fTUFDSF9JUDI3X0tNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAzMi9rbWFsbG9jLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL2ttYWxsb2MuaAppbmRleCBiMWUwYmU2Li4wNDJjYTkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL2ttYWxsb2MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDMyL2ttYWxsb2MuaApAQCAtMyw5ICszLDkgQEAKIAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1I1MDAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUk03MDAwKQotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JMzIKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JMzIKICNlbHNlCi0jZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTgkxMjgKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JMTI4CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfSVAzMl9LTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggOWFmNjVlNy4uN2VlMGU2NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTMsNiArMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmVUwpCi0KICNlbmRpZiAvKiBfX0FTTV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3RhdGZzLmgKaW5kZXggYzNkZGY5Ny4uMGY4MDVjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N0YXRmcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMzMsNyArMzMsOCBAQAogCS8qIExpbnV4IHNwZWNpYWxzICovCiAJX19rZXJuZWxfZnNpZF90CWZfZnNpZDsKIAlsb25nCQlmX25hbWVsZW47Ci0JbG9uZwkJZl9zcGFyZVs2XTsKKwlsb25nCQlmX2ZsYWdzOworCWxvbmcJCWZfc3BhcmVbNV07CiB9OwogCiAjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikKQEAgLTUzLDcgKzU0LDggQEAKIAlfX3U2NAlmX2JhdmFpbDsKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogCV9fdTMyCWZfbmFtZWxlbjsKLQlfX3UzMglmX3NwYXJlWzZdOworCV9fdTMyCWZfZmxhZ3M7CisJX191MzIJZl9zcGFyZVs1XTsKIH07CiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCkBAIC03Myw3ICs3NSw4IEBACiAJLyogTGludXggc3BlY2lhbHMgKi8KIAlfX2tlcm5lbF9mc2lkX3QJZl9mc2lkOwogCWxvbmcJCWZfbmFtZWxlbjsKLQlsb25nCQlmX3NwYXJlWzZdOworCWxvbmcJCWZfZmxhZ3M7CisJbG9uZwkJZl9zcGFyZVs1XTsKIH07CiAKIHN0cnVjdCBjb21wYXRfc3RhdGZzNjQgewpAQCAtODgsNyArOTEsOCBAQAogCV9fdTY0CWZfYmF2YWlsOwogCV9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CiAJX191MzIJZl9uYW1lbGVuOwotCV9fdTMyCWZfc3BhcmVbNl07CisJX191MzIJZl9mbGFnczsKKwlfX3UzMglmX3NwYXJlWzVdOwogfTsKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKaW5kZXggYzgzYzY4NC4uNzY2MzBiMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTIwMyw2ICsyMDMsNyBAQAogI2RlZmluZSBQRU5ESU4JMDA0MDAwMAkJLyogUmV0eXBlIHBlbmRpbmcgaW5wdXQgKHN0YXRlKS4gICovCiAjZGVmaW5lIFRPU1RPUAkwMTAwMDAwCQkvKiBTZW5kIFNJR1RUT1UgZm9yIGJhY2tncm91bmQgb3V0cHV0LiAgKi8KICNkZWZpbmUgSVRPU1RPUAlUT1NUT1AKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCQkvKiBFeHRlcm5hbCBwcm9jZXNzaW5nIG9uIHB0eSAqLwogCiAvKiBpb2N0bCAoZmQsIFRJT0NTRVJHRVRMU1IsICZyZXN1bHQpIHdoZXJlIHJlc3VsdCBtYXkgYmUgYXMgYmVsb3cgKi8KICNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwppbmRleCA5NTQ3YmMwLi43YmE4OTA4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwpAQCAtMzU3LDEzICszNTcsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9zdXBwb3J0ZWQpOwogCi1pbnQgZG1hX2lzX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiBwbGF0X2RldmljZV9pc19jb2hlcmVudChkZXYpOwotfQotCi1FWFBPUlRfU1lNQk9MKGRtYV9pc19jb25zaXN0ZW50KTsKLQogdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKaW5kZXggMTI3ZDczMi4uNmEyYjFiZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYworKysgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCkBAIC02NCw3ICs2NCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hcF9hdG9taWMpOwogCi12b2lkIF9fa3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQordm9pZCBfX2t1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sodm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOwpAQCAtODcsNyArODcsNyBAQAogCiAJcGFnZWZhdWx0X2VuYWJsZSgpOwogfQotRVhQT1JUX1NZTUJPTChfX2t1bm1hcF9hdG9taWMpOworRVhQT1JUX1NZTUJPTChfX2t1bm1hcF9hdG9taWNfbm90eXBlY2hlY2spOwogCiAvKgogICogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9LY29uZmlnIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKaW5kZXggMWM0NTY1YS4uNDQ0YjlmOSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL0tjb25maWcKKysrIGIvYXJjaC9tbjEwMzAwL0tjb25maWcKQEAgLTQ2LDkgKzQ2LDYgQEAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX0JVRwogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCA2ZTJmZTI4Li43ODFiZjYxIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBMMV9DQUNIRV9ESVNQQVJJVFkJTDFfQ0FDSEVfTkVOVFJJRVMgKiBMMV9DQUNIRV9CWVRFUwogI2VuZGlmCiAKLSNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCisjZGVmaW5lIEFSQ0hfRE1BX01JTkFMSUdOCUwxX0NBQ0hFX0JZVEVTCiAKIC8qIGRhdGEgY2FjaGUgcHVyZ2UgcmVnaXN0ZXJzCiAgKiAtIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIgdG8gdW5jb25kaXRpb25hbGx5IHB1cmdlIHRoYXQgY2FjaGUgbGluZQpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA0ZWQxNTIyLi5jMWJlNDM5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTYyLDE0ICsxNjIsNiBAQAogfQogCiBzdGF0aWMgaW5saW5lCi1pbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gMSA8PCBMMV9DQUNIRV9TSElGVDsKLX0KLQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkKQkoMSkKLQotc3RhdGljIGlubGluZQogdm9pZCBkbWFfY2FjaGVfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCiAJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCA5MGYyYWJiLi5iMGIxODdhIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTkxLDcgKzkxLDcgQEAKIAlyZXR1cm4gdmFkZHI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfYXRvbWljKHVuc2lnbmVkIGxvbmcgdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQorc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sodW5zaWduZWQgbG9uZyB2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCiB7CiAjaWYgSElHSE1FTV9ERUJVRwogCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IGRjYmZiNDUuLmNiOGNmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTU0LDYgKzU0LDcgQEAKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIKIAkJCQkJCSAgICAgICAqIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywgMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLCAweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgRklPTkNMRVgJMHg1NDUwCiAjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQpAQCAtNzAsOCArNzEsNiBAQAogCiAjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCiAjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCiAKIC8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCkBAIC04Miw2ICs4MSw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IDdiZDAwYjkuLjdiYWE0MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0xMyw2ICsxMyw0IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmKQotCiAjZW5kaWYgLyogX0FTTV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IGViMmIwZGMuLjEzMGQ0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xODAsNiArMTgwLDcgQEAKICNkZWZpbmUgRkxVU0hPCTAwMTAwMDAKICNkZWZpbmUgUEVORElOCTAwNDAwMDAKICNkZWZpbmUgSUVYVEVOCTAxMDAwMDAKKyNkZWZpbmUgRVhUUFJPQwkwMjAwMDAwCiAKIC8qIHRjZmxvdygpIGFuZCBUQ1hPTkMgdXNlIHRoZXNlICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggMDVhMzY2YS4uOTA3NDE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC02NiwxMCArNjYsNiBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZXBlbmRzIG9uIFNNUApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaHB1eC9zeXNfaHB1eC5jIGIvYXJjaC9wYXJpc2MvaHB1eC9zeXNfaHB1eC5jCmluZGV4IDkyMzQzYmQuLmJhNDMwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2hwdXgvc3lzX2hwdXguYworKysgYi9hcmNoL3BhcmlzYy9ocHV4L3N5c19ocHV4LmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXMgPSB1c2VyX2dldF9zdXBlcihkZXYpOwogCWlmIChzID09IE5VTEwpCiAJCWdvdG8gb3V0OwotCWVyciA9IHZmc19zdGF0ZnMocy0+c19yb290LCAmc2J1Zik7CisJZXJyID0gc3RhdGZzX2J5X2RlbnRyeShzLT5zX3Jvb3QsICZzYnVmKTsKIAlkcm9wX3N1cGVyKHMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpAQCAtMTg2LDEyICsxODYsMTIgQEAKICAgICAgaW50MTZfdCBmX3BhZDsKIH07CiAKLXN0YXRpYyBpbnQgdmZzX3N0YXRmc19ocHV4KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGhwdXhfc3RhdGZzICpidWYpCitzdGF0aWMgaW50IGRvX3N0YXRmc19ocHV4KHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgaHB1eF9zdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qga3N0YXRmcyBzdDsKIAlpbnQgcmV0dmFsOwogCQotCXJldHZhbCA9IHZmc19zdGF0ZnMoZGVudHJ5LCAmc3QpOworCXJldHZhbCA9IHZmc19zdGF0ZnMocGF0aCwgJnN0KTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC0yMTksNyArMjE5LDcgQEAKIAllcnJvciA9IHVzZXJfcGF0aChwYXRobmFtZSwgJnBhdGgpOwogCWlmICghZXJyb3IpIHsKIAkJc3RydWN0IGhwdXhfc3RhdGZzIHRtcDsKLQkJZXJyb3IgPSB2ZnNfc3RhdGZzX2hwdXgocGF0aC5kZW50cnksICZ0bXApOworCQllcnJvciA9IGRvX3N0YXRmc19ocHV4KCZwYXRoLCAmdG1wKTsKIAkJaWYgKCFlcnJvciAmJiBjb3B5X3RvX3VzZXIoYnVmLCAmdG1wLCBzaXplb2YodG1wKSkpCiAJCQllcnJvciA9IC1FRkFVTFQ7CiAJCXBhdGhfcHV0KCZwYXRoKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwotCWVycm9yID0gdmZzX3N0YXRmc19ocHV4KGZpbGUtPmZfcGF0aC5kZW50cnksICZ0bXApOworCWVycm9yID0gZG9fc3RhdGZzX2hwdXgoJmZpbGUtPmZfcGF0aCwgJnRtcCk7CiAJaWYgKCFlcnJvciAmJiBjb3B5X3RvX3VzZXIoYnVmLCAmdG1wLCBzaXplb2YodG1wKSkpCiAJCWVycm9yID0gLUVGQVVMVDsKIAlmcHV0KGZpbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggNDVlZmZlNi4uMDM5ODgwZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCiAKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKwogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKIHZvaWQgcGFyaXNjX2NhY2hlX2luaXQodm9pZCk7CS8qIGluaXRpYWxpemVzIGNhY2hlLWZsdXNoaW5nICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggNDU1NmQ4Mi4uZGJhMTFhZSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTMyLDcgKzEzMiw3IEBACiAJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqYWRkciwgZW51bSBrbV90eXBlIGlkeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmFkZHIsIGVudW0ga21fdHlwZSBpZHgpCiB7CiAJa3VubWFwX3BhcmlzYyhhZGRyKTsKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBkYTY5NDMzLi40ZWY3M2IwIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE4NCwxOCArMTg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCi17Ci0JcmV0dXJuIGRjYWNoZV9zdHJpZGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfaXNfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi17Ci0JcmV0dXJuIChocHBhX2RtYV9vcHMtPmRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1ID09IE5VTEwpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IDY3NDdmYWQuLjRlMDYxNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC01Miw2ICs1Miw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLDB4MzYsIGludCkgIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogI2RlZmluZSBGSU9OQ0xFWAkweDU0NTAgIC8qIHRoZXNlIG51bWJlcnMgbmVlZCB0byBiZSBhZGp1c3RlZC4gKi8KICNkZWZpbmUgRklPQ0xFWAkJMHg1NDUxCkBAIC02OCw4ICs2OSw2IEBACiAKICNkZWZpbmUgVElPQ01JV0FJVAkweDU0NUMJLyogd2FpdCBmb3IgYSBjaGFuZ2Ugb24gc2VyaWFsIGlucHV0IGxpbmUocykgKi8KICNkZWZpbmUgVElPQ0dJQ09VTlQJMHg1NDVECS8qIHJlYWQgc2VyaWFsIHBvcnQgaW5saW5lIGludGVycnVwdCBjb3VudHMgKi8KLSNkZWZpbmUgVElPQ0dIQVlFU0VTUCAgIDB4NTQ1RSAgLyogR2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCi0jZGVmaW5lIFRJT0NTSEFZRVNFU1AgICAweDU0NUYgIC8qIFNldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBGSU9RU0laRQkweDU0NjAJLyogR2V0IGV4YWN0IHNwYWNlIHVzZWQgYnkgcXVvdGEgKi8KIAogI2RlZmluZSBUSU9DU1RBUlQJMHg1NDYxCkBAIC04NCw2ICs4Myw3IEBACiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUAkJMzIKKyNkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogI2RlZmluZSBUSU9DU0VSX1RFTVQgICAgMHgwMQkvKiBUcmFuc21pdHRlciBwaHlzaWNhbGx5IGVtcHR5ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCAyYzNiNzliLi44YmYxZjBkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAofjBVTCkKICNkZWZpbmUgc2dfdmlydF9hZGRyKHNnKSAoKHVuc2lnbmVkIGxvbmcpc2dfdmlydChzZykpCiAKICNlbmRpZiAvKiBfQVNNX1BBUklTQ19TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGVybWJpdHMuaAppbmRleCBkOGJiYzczLi5kMWFiOTIxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTE4MCw2ICsxODAsNyBAQAogI2RlZmluZSBGTFVTSE8gIDAwMTAwMDAKICNkZWZpbmUgUEVORElOICAwMDQwMDAwCiAjZGVmaW5lIElFWFRFTiAgMDEwMDAwMAorI2RlZmluZSBFWFRQUk9DCTAyMDAwMDAKIAogLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KICNkZWZpbmUJVENPT0ZGCQkwCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMKaW5kZXggOTg3NzM3Mi4uNWJlYjk3YiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYwpAQCAtODIsNyArODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAJcG9wX3JldHVybl90cmFjZSgmdHJhY2UsICZyZXQpOwotCXRyYWNlLnJldHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJdHJhY2UucmV0dGltZSA9IGxvY2FsX2Nsb2NrKCk7CiAJZnRyYWNlX2dyYXBoX3JldHVybigmdHJhY2UpOwogCiAJaWYgKHVubGlrZWx5KCFyZXQpKSB7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWNhbGx0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWNhbGx0aW1lID0gbG9jYWxfY2xvY2soKTsKIAogCWlmIChwdXNoX3JldHVybl90cmFjZShvbGQsIGNhbGx0aW1lLAogCQkJCXNlbGZfYWRkciwgJnRyYWNlLmRlcHRoKSA9PSAtRUJVU1kpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYyBiL2FyY2gvcGFyaXNjL21tL2lvcmVtYXAuYwppbmRleCA5MmQ0OTZhLi44MzhkMDI1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW9yZW1hcC5jCkBAIC03MSw3ICs3MSw3IEBACiAJICovCiAJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKIAlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOwotCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkcikgLSBwaHlzX2FkZHI7CisJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyICsgMSkgLSBwaHlzX2FkZHI7CiAKIAkvKgogCSAqIE9rLCBnbyBmb3IgaXQuLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCBlMmJmNDBhLi42MzFlNWEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjksOSArMjksNiBAQAogY29uZmlnIEdFTkVSSUNfQ01PU19VUERBVEUKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX1RJTUVfVlNZU0NBTEwKIAlkZWZfYm9vbCB5CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQppbmRleCA1ZDQyZjVlLi5lM2VhMTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL01ha2VmaWxlCkBAIC0xNjMsOSArMTYzLDExIEBACiAjIERlZmF1bHQgdG8gekltYWdlLCBvdmVycmlkZSB3aGVuIG5lZWRlZAogYWxsOiB6SW1hZ2UKIAotQk9PVF9UQVJHRVRTID0gekltYWdlIHpJbWFnZS5pbml0cmQgdUltYWdlIHpJbWFnZSUgZHRiSW1hZ2UlIHRyZWVJbWFnZS4lIGN1SW1hZ2UuJSBzaW1wbGVJbWFnZS4lCisjIFdpdGggbWFrZSAzLjgyIHdlIGNhbm5vdCBtaXggbm9ybWFsIGFuZCB3aWxkY2FyZCB0YXJnZXRzCitCT09UX1RBUkdFVFMxIDo9IHpJbWFnZSB6SW1hZ2UuaW5pdHJkIHVJbWFnZWQKK0JPT1RfVEFSR0VUUzIgOj0gekltYWdlJSBkdGJJbWFnZSUgdHJlZUltYWdlLiUgY3VJbWFnZS4lIHNpbXBsZUltYWdlLiUKIAotUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpCitQSE9OWSArPSAkKEJPT1RfVEFSR0VUUzEpICQoQk9PVF9UQVJHRVRTMikKIAogYm9vdCA6PSBhcmNoLyQoQVJDSCkvYm9vdAogCkBAIC0xODAsMTAgKzE4MiwxNiBAQAogekltYWdlOiByZWxvY3NfY2hlY2sKIGVuZGlmCiAKLSQoQk9PVF9UQVJHRVRTKTogdm1saW51eAorJChCT09UX1RBUkdFVFMxKTogdm1saW51eAorCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQorJChCT09UX1RBUkdFVFMyKTogdm1saW51eAogCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQogCi1ib290d3JhcHBlcl9pbnN0YWxsICUuZHRiOgorCitib290d3JhcHBlcl9pbnN0YWxsOgorCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQorCislLmR0YjoKIAkkKFEpJChNQUtFKSBBUkNIPXBwYzY0ICQoYnVpbGQpPSQoYm9vdCkgJChwYXRzdWJzdCAlLCQoYm9vdCkvJSwkQCkKIAogZGVmaW5lIGFyY2hoZWxwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcDQwODBkcy5kdHMKaW5kZXggNmIyOWVhYi4uMmYwZGUyNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3A0MDgwZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wNDA4MGRzLmR0cwpAQCAtMjgwLDYgKzI4MCw4IEBACiAJCQlyZWcgPSA8MHgxMTQwMDAgMHgxMDAwPjsKIAkJCWludGVycnVwdHMgPSA8NDggMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXZvbHRhZ2UtcmFuZ2VzID0gPDMzMDAgMzMwMD47CisJCQlzZGhjaSxhdXRvLWNtZDEyOwogCQl9OwogCiAJCWkyY0AxMTgwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZwppbmRleCA0YWExN2I2Li45N2ZlZGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvYWNhZGlhX2RlZmNvbmZpZwpAQCAtMSwxMDg4ICsxLDg3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCi0jIE1vbiBKYW4gIDQgMTU6MzM6MDcgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19BQ0FESUE9eQotIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAotIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQweF9TSU1QTEU9eQotQ09ORklHXzQwNUVaPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz1tCiBDT05GSUdfTVREX0JMT0NLPW0KLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQogQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCiBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTD15Ci1DT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlI9eQotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCmluZGV4IDlhNWYxYWIuLjMzYjNjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZwpAQCAtMSwxMjk1ICsxLDg1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCi0jIE1vbiBKYW4gIDQgMTU6Mzc6MzQgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAogQ09ORklHX0VQNDA1PXkKLSMgQ09ORklHX0hDVTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9URk9PVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzQweF9TSU1QTEUgaXMgbm90IHNldAotQ09ORklHXzQwNUdQPXkKLUNPTkZJR19JQk00MDVfRVJSNzc9eQotQ09ORklHX0lCTTQwNV9FUlI1MT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9bQogQ09ORklHX01URF9CTE9DSz1tCi0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2hjdTRfZGVmY29uZmlnCmluZGV4IDBiNDUyMTMuLjQ2MTMwNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9oY3U0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvaGN1NF9kZWZjb25maWcKQEAgLTEsMTE0MyArMSw4MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE1OjQ1OjExIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfQUNBRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQNDA1IGlzIG5vdCBzZXQKIENPTkZJR19IQ1U0PXkKLSMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAotIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUtBTFUgaXMgbm90IHNldAogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0MHhfU0lNUExFIGlzIG5vdCBzZXQKLUNPTkZJR180MDVHUFI9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHXzR4eF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPW0KIENPTkZJR19NVERfQkxPQ0s9bQotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZwppbmRleCA0ZDJkZTBiLi40ZTE5ZWU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCkBAIC0xLDEyODggKzEsOTIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNTo1MToyMyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQ1U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAogQ09ORklHX0tJTEFVRUE9eQotIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQweF9TSU1QTEU9eQotQ09ORklHXzQwNUVYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQogQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfSUJNX0lJQz15Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc1PXkKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCmluZGV4IGExZjNmNTAuLjY1MWJlMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCkBAIC0xLDEwODggKzEsODQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNTo1NToxMiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiBDT05GSUdfNDB4PXkKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUDQwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQ1U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVEZPT1QgaXMgbm90IHNldAotIyBDT05GSUdfS0lMQVVFQSBpcyBub3Qgc2V0CiBDT05GSUdfTUFLQUxVPXkKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQweF9TSU1QTEU9eQotQ09ORklHXzQwNUVYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz1tCiBDT05GSUdfTVREX0JMT0NLPW0KLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CiBDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKIENPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC92aXJ0ZXhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcKaW5kZXggYzc2MzEzNS4uMGE4MWUxZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3ZpcnRleF9kZWZjb25maWcKQEAgLTEsMTE5NiArMSw5MSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjE3OjU1IDIwMDkKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfWElMSU5YX1ZJUlRFWD15Ci0jIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAotIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAotIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSUxBVUVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BS0FMVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRD15Ci0jIENPTkZJR19QUEM0MHhfU0lNUExFIGlzIG5vdCBzZXQKLUNPTkZJR19YSUxJTlhfVklSVEVYX0lJX1BSTz15Ci1DT05GSUdfWElMSU5YX1ZJUlRFWF80X0ZYPXkKLUNPTkZJR19JQk00MDVfRVJSNzc9eQotQ09ORklHX0lCTTQwNV9FUlI1MT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9bQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9GSUxURVI9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9TWVNBQ0U9eQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMj15Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfVUFSVExJVEU9eQogQ09ORklHX1NFUklBTF9VQVJUTElURV9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKIENPTkZJR19YSUxJTlhfSFdJQ0FQPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwogQ09ORklHX0dQSU9fWElMSU5YPXkKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAogQ09ORklHX0ZCX1hJTElOWD15Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQogQ09ORklHX0ZPTlRfOHg4PXkKIENPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlNfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPW0KIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L3dhbG51dF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZwppbmRleCA2NTk3YjJmLi5kZWQ0NTVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZwpAQCAtMSwxMTY1ICsxLDc3IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCi0jIE1vbiBKYW4gIDQgMTU6NTY6MzAgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogQ09ORklHXzQweD15Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0FESUEgaXMgbm90IHNldAotIyBDT05GSUdfRVA0MDUgaXMgbm90IHNldAotIyBDT05GSUdfSENVNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RGT09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tJTEFVRUEgaXMgbm90IHNldAotIyBDT05GSUdfTUFLQUxVIGlzIG5vdCBzZXQKLUNPTkZJR19XQUxOVVQ9eQotIyBDT05GSUdfWElMSU5YX1ZJUlRFWF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzQweF9TSU1QTEUgaXMgbm90IHNldAotQ09ORklHXzQwNUdQPXkKLUNPTkZJR19JQk00MDVfRVJSNzc9eQotQ09ORklHX0lCTTQwNV9FUlI1MT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19PRl9SVEM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz1tCiBDT05GSUdfTVREX0JMT0NLPW0KLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYXJjaGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnCmluZGV4IDJkM2RmYjUuLjYzNzQ2YTA0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKQEAgLTEsMTE0MiArMSw4NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE0OjAyOjM1IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSEVTPXkKLSMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQotIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAotQ09ORklHXzQ2MEVYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CiBDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKIENPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfSUJNX0lJQz15Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCmluZGV4IDUxYTAwYzQuLmY1ZjJhNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCkBAIC0xLDEwOTAgKzEsNzEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNDowOTowMyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAogQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX0JBTUJPTz15CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNDR4X1NJTVBMRT15Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfNDQwRVA9eQotQ09ORklHX0lCTTQ0MEVQX0VSUjQyPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfU1REQklOVVRJTFM9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKaW5kZXggMTAyOGIxYi4uNDVjNjRkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCkBAIC0xLDEzNTYgKzEsOTQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNDoxMjoyMCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAogQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUz15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQU1CT08gaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAotIyBDT05GSUdfU0FNNDQwRVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKIENPTkZJR19DQU5ZT05MQU5EUz15Ci0jIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAotIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAotIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0NHhfU0lNUExFPXkKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR180NjBFWD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfU1REQklOVVRJTFM9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9GU0xfRUxCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKIENPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTI1NgogQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0lCTV9JSUM9eQotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKIENPTkZJR19TRU5TT1JTX0FENzQxND15Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfTElCVVNVQUw9eQotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9NNDFUODA9eQotIyBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9ueV9kZWZjb25maWcKaW5kZXggNjlmNTYzMy4uZmVkZDAzZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnCkBAIC0xLDExODEgKzEsNzkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNDoyMDo0NiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAogQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQU1CT08gaXMgbm90IHNldAotQ09ORklHX0VCT05ZPXkKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAotIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAotIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzQ0eF9TSU1QTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAotQ09ORklHXzQ0MEdQPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX09GX1JUQz15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfU1REQklOVVRJTFM9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHXzR4eF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnCmluZGV4IGRjZDg1OWMuLmViZmY3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZwpAQCAtMSwxMjk3ICsxLDEyMyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE0OjMzOjA0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKIENPTkZJR19FSUdFUj15Ci0jIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQotIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAotQ09ORklHXzQ2MFNYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfRlVTSU9OPXkKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19GVVNJT05fU0FTPXkKLUNPTkZJR19GVVNJT05fTUFYX1NHRT0xMjgKLSMgQ09ORklHX0ZVU0lPTl9DVEwgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKIENPTkZJR19JMk89eQotQ09ORklHX0kyT19MQ1RfTk9USUZZX09OX0NIQU5HRVM9eQotQ09ORklHX0kyT19FWFRfQURBUFRFQz15Ci0jIENPTkZJR19JMk9fQ09ORklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyT19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJPX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyT19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyT19QUk9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQogQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMEU9eQotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0lCTV9JSUM9eQotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKLUNPTkZJR19JMkNfREVCVUdfQ0hJUD15Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKIENPTkZJR19DUllQVE9fQ1JZUFREPXkKIENPTkZJR19DUllQVE9fQVVUSEVOQz15Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCiBDT05GSUdfQ1JZUFRPX0NDTT15CiBDT05GSUdfQ1JZUFRPX0dDTT15Ci1DT05GSUdfQ1JZUFRPX1NFUUlWPXkKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19DVFI9eQogQ09ORklHX0NSWVBUT19DVFM9eQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19MUlc9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKIENPTkZJR19DUllQVE9fWFRTPXkKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19YQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19HSEFTSD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pY29uX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pY29uX2RlZmNvbmZpZwppbmRleCAyNzdmODhjLi44NjVlOTNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnCkBAIC0xLDE0NTEgKzEsMTE5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM3Ci0jIEZyaSBNYXkgMjEgMTc6NDA6MjIgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKIENPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTPTQKLUNPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0U9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotIyBDT05GSUdfTE9HQlVGRkVSIGlzIG5vdCBzZXQKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAotIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAotIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAogQ09ORklHX0lDT049eQotIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0NHhfU0lNUExFPXkKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR180NDBTUGU9eQotQ09ORklHX1NUREJJTlVUSUxTPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX0FSQ0hfSEFTX05NSV9XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAotIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9TWVNBQ0U9eQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NBU19BVFRSUz15Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTj15Ci0jIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTSU9OX1NBUz15Ci1DT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiBDT05GSUdfRlVTSU9OX0NUTD15CiBDT05GSUdfRlVTSU9OX0xPR0dJTkc9eQotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKICMgQ09ORklHX01PVVNFX1BTMl9BTFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFAgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfRElTUExBWV9QRFNQMTg4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVUNNQzUyX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDMTAxX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NSQU0gaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0lCTV9JSUM9eQotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiBDT05GSUdfTUZEX1NNNTAxPXkKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfU001MDE9eQotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnCmluZGV4IDg2ODNjYmMuLjhlY2U0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pc3M0NzYtc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcKQEAgLTEsMTAyNiArMSw5MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCi0jIFRodSBNYXIgIDQgMTE6NTA6MTIgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKIENPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTQKLSMgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfUEVSRl9FVkVOVFM9eQotQ09ORklHX0VWRU5UX1BST0ZJTEU9eQotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVI9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzQ3eD15Ci0jIENPTkZJR19CQU1CT08gaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAotIyBDT05GSUdfU0FNNDQwRVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQUlTSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBVE1BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQUlOSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBUlAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTllPTkxBTkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dMQUNJRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVEV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0CiBDT05GSUdfSVNTNHh4PXkKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0NHhfU0lNUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19PRl9SVEM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiBDT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfU1REQklOVVRJTFM9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L2lzc2JsazAiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19FVkVOVF9UUkFDSU5HPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJRX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4X1BIWVNMT1c9MHg0MDAwMDIwMAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0hJR0g9MHgxCi0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCmluZGV4IGEyYzI0ZDEuLjRjYTliNDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCkBAIC0xLDExNjYgKzEsNzkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKLSMgVHVlIEphbiAyNiAxNDo0MDo1OCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAogQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CiBDT05GSUdfS0FUTUFJPXkKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNDR4X1NJTVBMRT15Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfNDQwU1BlPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfU1REQklOVVRJTFM9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQotIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZwppbmRleCAzYmI1NWI1Li5lM2I2NWQyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnCkBAIC0xLDExNzMgKzEsODQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzEKLSMgTW9uIEphbiAgNCAxNDo1OToxMiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAogQ09ORklHXzQ0eD15Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR180eHg9eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19QVEVfNjRCSVQ9eQotQ09ORklHX1BIWVNfNjRCSVQ9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAogQ09ORklHX1JBSU5JRVI9eQotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNDR4X1NJTVBMRT15Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfNDQwR1JYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1NUREJJTlVUSUxTPXkKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHXzR4eF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15Ci0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAotIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9VU0VfRk9SX0VYVDIzPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4PXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfVVNCR0VDS08gaXMgbm90IHNldAogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVz0weGVmNjAwMzAwCi1DT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTSElHSD0weDEKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmVkd29vZF9kZWZjb25maWcKaW5kZXggNjg0ZjQwZC4uNjRjZDBmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpAQCAtMSwxMjg3ICsxLDEyMiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE1OjA1OjA1IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBTUJPTyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU00NDBFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0CiBDT05GSUdfUkVEV09PRD15Ci0jIENPTkZJR19FSUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZT1NFTUlURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQgaXMgbm90IHNldAotQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQotIyBDT05GSUdfUFBDNHh4X0dQSU8gaXMgbm90IHNldAotQ09ORklHXzQ2MFNYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9TWVNBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVNfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19GVVNJT049eQotIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTl9TQVM9eQotQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAotIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogQ09ORklHX0kyTz15Ci1DT05GSUdfSTJPX0xDVF9OT1RJRllfT05fQ0hBTkdFUz15Ci1DT05GSUdfSTJPX0VYVF9BREFQVEVDPXkKLSMgQ09ORklHX0kyT19DT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfSTJPX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk9fQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSTJPX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSTJPX1BST0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15CiBDT05GSUdfSUJNX05FV19FTUFDX1JYQj0yNTYKIENPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUc9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMEU9eQotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0xCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0xCiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0lCTV9JSUM9eQotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKLUNPTkZJR19JMkNfREVCVUdfQ0hJUD15Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19ETUFERVZJQ0VTPXkKLQotIwotIyBETUEgRGV2aWNlcwotIwotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPXkKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKIENPTkZJR19DUllQVE9fQ1JZUFREPXkKIENPTkZJR19DUllQVE9fQVVUSEVOQz15Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCiBDT05GSUdfQ1JZUFRPX0NDTT15CiBDT05GSUdfQ1JZUFRPX0dDTT15Ci1DT05GSUdfQ1JZUFRPX1NFUUlWPXkKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19DVFI9eQogQ09ORklHX0NSWVBUT19DVFM9eQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19MUlc9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKIENPTkZJR19DUllQVE9fWFRTPXkKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogQ09ORklHX0NSWVBUT19YQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19HSEFTSD15CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PXkKIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9eQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCmluZGV4IGUyMDI5MjQuLjAxZDAzMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZwpAQCAtMSwxNDM5ICsxLDEyMSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE1OjExOjI0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15Ci0jIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19TQU00NDBFUD15Ci0jIENPTkZJR19TRVFVT0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0NHhfU0lNUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR180NDBFUD15Ci1DT05GSUdfSUJNNDQwRVBfRVJSNDI9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19JQk1fTkVXX0VNQUM9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MTI4Ci1DT05GSUdfSUJNX05FV19FTUFDX1RYQj02NAotQ09ORklHX0lCTV9ORVdfRU1BQ19QT0xMX1dFSUdIVD0zMgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9DT1BZX1RIUkVTSE9MRD0yNTYKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfU0tCX0hFQURST09NPTAKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9PRl9QTEFURk9STT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk1fTldQU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19JQk1fSUlDPXkKLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfRERDPXkKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15Ci1DT05GSUdfRkJfUkFERU9OX0kyQz15Ci1DT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQogQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX000MVQ4MD15CiBDT05GSUdfUlRDX0RSVl9NNDFUODBfV0RUPXkKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz15Ci1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BRkZTX0ZTPW0KLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2VxdW9pYV9kZWZjb25maWcKaW5kZXggYzM0OGE0Ni4uODliMmY5NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwpAQCAtMSwxMTk2ICsxLDg2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCi0jIE1vbiBKYW4gIDQgMTU6MTU6NTEgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKIENPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKIENPTkZJR19TRVFVT0lBPXkKLSMgQ09ORklHX1RBSVNIQU4gaXMgbm90IHNldAotIyBDT05GSUdfS0FUTUFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBSU5JRVIgaXMgbm90IHNldAotIyBDT05GSUdfV0FSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNDR4X1NJTVBMRT15Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfNDQwRVBYPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLSMgQ09ORklHX01URF9CTEtERVZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X1VTRV9GT1JfRVhUMjM9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnCmluZGV4IGY0Y2I3ZTguLmUzMzg2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKQEAgLTEsMTE3NSArMSw3OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDE1OjIxOjA0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQzR4eF9QQ0lfRVhQUkVTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQU1CT08gaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAotIyBDT05GSUdfU0FNNDQwRVAgaXMgbm90IHNldAotIyBDT05GSUdfU0VRVU9JQSBpcyBub3Qgc2V0CiBDT05GSUdfVEFJU0hBTj15Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAotIyBDT05GSUdfRUlHRVIgaXMgbm90IHNldAotIyBDT05GSUdfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0NHhfU0lNUExFPXkKLSMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKLUNPTkZJR180NDBHWD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1NUREJJTlVUSUxTPXkKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHXzR4eF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15Ci0jIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAotIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTV9ORVdfRU1BQz15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYQj0xMjgKLUNPTkZJR19JQk1fTkVXX0VNQUNfVFhCPTY0Ci1DT05GSUdfSUJNX05FV19FTUFDX1BPTExfV0VJR0hUPTMyCi1DT05GSUdfSUJNX05FV19FTUFDX1JYX0NPUFlfVEhSRVNIT0xEPTI1NgotQ09ORklHX0lCTV9ORVdfRU1BQ19SWF9TS0JfSEVBRFJPT009MAotIyBDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3ZpcnRleDVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3ZpcnRleDVfZGVmY29uZmlnCmluZGV4IGM3ZWFkMGUuLjFlYjNjYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC92aXJ0ZXg1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdmlydGV4NV9kZWZjb25maWcKQEAgLTEsMTIwMSArMSw5MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBUdWUgSmFuIDIwIDA4OjIyOjQ5IDIwMDkKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKIENPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKIENPTkZJR19YSUxJTlhfVklSVEVYNDQwX0dFTkVSSUNfQk9BUkQ9eQotIyBDT05GSUdfUFBDNDR4X1NJTVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfWElMSU5YX1ZJUlRFWD15Ci1DT05GSUdfWElMSU5YX1ZJUlRFWF81X0ZYVD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NUQVJUPTB4ZmYxMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfRklMVEVSPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19YSUxJTlhfU1lTQUNFPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzI9eQotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1VBUlRMSVRFPXkKIENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CiBDT05GSUdfWElMSU5YX0hXSUNBUD15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKIENPTkZJR19HUElPX1hJTElOWD15Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9YSUxJTlg9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAogQ09ORklHX0ZPTlRTPXkKIENPTkZJR19GT05UXzh4OD15CiBDT05GSUdfRk9OVF84eDE2PXkKLSMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTX0ZTPXkKIENPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfUk9NRlNfRlM9eQotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZwppbmRleCA5OWVmZjRkLi45YzEzYjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCkBAIC0xLDE1MDggKzEsMTIxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMxCi0jIE1vbiBKYW4gIDQgMTU6Mjc6NDYgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKIENPTkZJR180NHg9eQotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfNHh4PXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKLUNPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfUFBDX0RDUl9OQVRJVkU9eQotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSItcGlrYSIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAotIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAotIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CiBDT05GSUdfV0FSUD15Ci0jIENPTkZJR19BUkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ0FOWU9OTEFORFMgaXMgbm90IHNldAotIyBDT05GSUdfR0xBQ0lFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRURXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VJR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUEM0NHhfU0lNUExFIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfR1BJTz15Ci1DT05GSUdfNDQwRVA9eQotQ09ORklHX0lCTTQ0MEVQX0VSUjQyPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1NUREJJTlVUSUxTPXkKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9ImlwPW9uIgotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiBDT05GSUdfVkxBTl84MDIxUT15Ci0jIENPTkZJR19WTEFOXzgwMjFRX0dWUlAgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLSMgQ09ORklHX01URF9VQklfR0xVRUJJIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX1NZU0FDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKIENPTkZJR19FRVBST01fQVQyND15Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV01DMzIwMFRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19JQk1fSUlDPXkKLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKIENPTkZJR19TRU5TT1JTX0FENzQxND15Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfVEhFUk1BTF9IV01PTj15CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19QSUtBX1dEVD15Ci0jIENPTkZJR19CT09LRV9XRFQgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQotCi0jCi0jIExFRCBkcml2ZXJzCi0jCiBDT05GSUdfTEVEU19HUElPPXkKICMgQ09ORklHX0xFRFNfR1BJT19QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfTEVEU19HUElPX09GPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX1VCSUZTX0ZTPXkKLSMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKLUNPTkZJR19VQklGU19GU19MWk89eQotQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQotIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xNT15Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTFpPPXkKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwppbmRleCA3NjY0YzgzLi5mMjM0YzRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCkBAIC0xLDEzMjggKzEsOTggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgV2VkIE1hciAxMCAxNDozNDoyMiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEM1Mnh4PXkKIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEU9eQotIyBDT05GSUdfUFBDX0VGSUtBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19MSVRFNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTUVESUE1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0JVR0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0xQQkZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JFU1RDT01NPXkKLUNPTkZJR19QUENfQkVTVENPTU1fRkVDPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogQ09ORklHX0xYVF9QSFk9eQotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15Ci1DT05GSUdfRkVDX01QQzUyeHhfTURJTz15Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4PXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFX0JBVUQ9NTc2MDAKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUFYNjNYWF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MjAwX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLSMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZwppbmRleCBlYWM3YzE3Li5hNGE3OTVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCkBAIC0xLDEzMzMgKzEsNzggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgV2VkIE1hciAxMCAxNDozNDoyNCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci1DT05GSUdfRlJFRVpFUj15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTJ4eD15CiBDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFPXkKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0xJVEU1MjAwPXkKLSMgQ09ORklHX1BQQ19NRURJQTUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDBfQlVHRklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDBfTFBCRklGTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIENPTkZJR19QUENfQkVTVENPTU09eQotQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQotQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci0jIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9PUFM9eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9NUEM1Mnh4PXkKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogQ09ORklHX0xYVF9QSFk9eQotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKLUNPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTExNTIwMAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKaW5kZXggMjdhZmI2ZS4uMjBkNTNhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwpAQCAtMSw2MTkgKzEsNTUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgV2VkIE1hciAxMCAxNDozNDoyMyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEM1Mnh4PXkKIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEU9eQotIyBDT05GSUdfUFBDX0VGSUtBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19MSVRFNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTUVESUE1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0JVR0ZJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0xQQkZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JFU1RDT01NPXkKLUNPTkZJR19QUENfQkVTVENPTU1fQVRBPXkKLUNPTkZJR19QUENfQkVTVENPTU1fRkVDPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQogQ09ORklHX1NDU0lfVEdUPXkKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogQ09ORklHX1BBVEFfTVBDNTJ4eD15Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKIENPTkZJR19EQVZJQ09NX1BIWT15CiBDT05GSUdfUVNFTUlfUEhZPXkKQEAgLTYyMyw3NTIgKzU5LDUzIEBACiBDT05GSUdfU01TQ19QSFk9eQogQ09ORklHX0JST0FEQ09NX1BIWT15CiBDT05GSUdfSUNQTFVTX1BIWT15Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19NRElPX0JJVEJBTkc9eQogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKLUNPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4PXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFX0JBVUQ9MTE1MjAwCi0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BWDYzWFhfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTIwMF9XRFQgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CiBDT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwppbmRleCA1ZmUzOWRkLi42YmQ1ODMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCkBAIC0xLDEzMjEgKzEsMTAzIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmMxCi0jIFdlZCBNYXIgMTAgMTQ6MzQ6MjUgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049InRydW5rIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTJ4eD15CiBDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFPXkKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01FRElBNTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMF9CVUdGSVggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDBfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTIwMF9MUEJGSUZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAogQ09ORklHX1BQQ19CRVNUQ09NTT15Ci1DT05GSUdfUFBDX0JFU1RDT01NX0FUQT1tCi1DT05GSUdfUFBDX0JFU1RDT01NX0ZFQz15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiBDT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUF9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST1tCi1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT1tCi0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX01QQzUyeHg9bQotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQotQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTk2MDAKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPW0KIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfUENGODU2Mz1tCi0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9bQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz1tCiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotQ09ORklHX0ZTX01CQ0FDSEU9bQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz1tCiBDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCi1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IGExMDhiODQuLjNhMWY3MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMSwxNDczICsxLDEwOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjMQotIyBXZWQgTWFyIDEwIDE0OjM0OjI0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTJ4eD15CiBDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFPXkKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01FRElBNTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX01QQzUyMDBfQlVHRklYPXkKLSMgQ09ORklHX1BQQ19NUEM1MjAwX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyMDBfTFBCRklGTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIENPTkZJR19QUENfQkVTVENPTU09eQotQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQotQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogQ09ORklHX1BBVEFfTVBDNTJ4eD15CiBDT05GSUdfUEFUQV9QTEFURk9STT15Ci0jIENPTkZJR19QQVRBX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19MWFRfUEhZPXkKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQotQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTExNTIwMAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUFYNjNYWF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MjAwX1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQz15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci0jIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz15Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCmluZGV4IDA0ZjE2MjYuLmVlZDQyZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZwpAQCAtMSwxNTIyICsxLDkxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MzggMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19GU0xfRU1CX1BFUkZNT049eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1JFREJPT1Q9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfUkRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAogQ09ORklHX0FTUDgzNHg9eQotIyBDT05GSUdfS01FVEVSMSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzNHg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUNVX01QQzgzNDlFTUlUWCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9GU0w9eQotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTM3ND15Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKaW5kZXggMTg0M2VlMS4uZTQzZWNiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCkBAIC0xLDEwMTYgKzEsODkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjozOSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTk9PUD15Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X1JESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTUDgzNHggaXMgbm90IHNldAogQ09ORklHX0tNRVRFUjE9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLUNPTkZJR19RVUlDQ19FTkdJTkU9eQotIyBDT05GSUdfUUVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KLUNPTkZJR19CUklER0VfSUdNUF9TTk9PUElORz15Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKIENPTkZJR19WTEFOXzgwMjFRPXkKLSMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIUkFNPXkKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKIENPTkZJR19NVERfVUJJX0dMVUVCST15Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCiBDT05GSUdfTVREX1VCSV9ERUJVRz15Ci0jIENPTkZJR19NVERfVUJJX0RFQlVHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9VQklfREVCVUdfRElTQUJMRV9CR1QgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1VCSV9ERUJVR19FTVVMQVRFX0JJVEZMSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9VQklfREVCVUdfRU1VTEFURV9XUklURV9GQUlMVVJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVUJJX0RFQlVHX0VNVUxBVEVfRVJBU0VfRkFJTFVSRVMgaXMgbm90IHNldAotCi0jCi0jIEFkZGl0aW9uYWwgVUJJIGRlYnVnZ2luZyBtZXNzYWdlcwotIwotIyBDT05GSUdfTVREX1VCSV9ERUJVR19NU0dfQkxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9VQklfREVCVUdfTVNHX0VCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVUJJX0RFQlVHX01TR19XTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVUJJX0RFQlVHX01TR19JTyBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPXkKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfRlNMX1BRX01ESU89eQotIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKIENPTkZJR19XQU49eQogQ09ORklHX0hETEM9eQotIyBDT05GSUdfSERMQ19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfSERMQ19SQVdfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hETENfQ0lTQ08gaXMgbm90IHNldAotIyBDT05GSUdfSERMQ19GUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRExDX1BQUCBpcyBub3Qgc2V0Ci0KLSMKLSMgWC4yNS9MQVBCIHN1cHBvcnQgaXMgZGlzYWJsZWQKLSMKLSMgQ09ORklHX0RMQ0kgaXMgbm90IHNldAogQ09ORklHX1BQUD15CiBDT05GSUdfUFBQX01VTFRJTElOSz15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogQ09ORklHX1BQUE9FPXkKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9eQotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfUUUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VJTz15Ci0jIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VCSUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19GQVNUPXkKLUNPTkZJR19VQ0M9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IDc4YWUzYmYuLmMyZTZhYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xLDE4MzggKzEsMTExIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6NDAgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzF4X1JEQj15Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X1JESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTUDgzNHggaXMgbm90IHNldAotIyBDT05GSUdfS01FVEVSMSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzMXg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUNVX01QQzgzNDlFTUlUWCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfRlNMX0VMQkM9eQotIyBDT05GSUdfTVREX05BTkRfRlNMX1VQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX1NQST15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQotIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19DSUNBREFfUEhZPXkKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU1o4ODRYX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0JJVEJBTkc9eQotIyBDT05GSUdfU1BJX01QQzh4eHggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwPXkKLUNPTkZJR19VU0JfTkVUMjI4MD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX05PS0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggY2NjYjcxMy4uMWQzYjIwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTEsMTkwNCArMSwxMDggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo0MCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogQ09ORklHX01QQzgzMXhfUkRCPXkKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfUkRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAotIyBDT05GSUdfQVNQODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVURVIxIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODMxeD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX1VQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX1NQST15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9GU0w9eQotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU1o4ODRYX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci0jIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0JJVEJBTkc9eQotIyBDT05GSUdfU1BJX01QQzh4eHggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwPXkKLUNPTkZJR19VU0JfTkVUMjI4MD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPW0KLUNPTkZJR19VU0JfRVRIX1JORElTPXkKLSMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX05PS0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggNzRjYjI3YS4uOTFmZTczYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsMTQwMiArMSw3NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjQxIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODMyeF9NRFM9eQotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9SREsgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1A4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRVRFUjEgaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEM4MzJ4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLUNPTkZJR19JUElDPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CiBDT05GSUdfUVVJQ0NfRU5HSU5FPXkKLSMgQ09ORklHX1FFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUNVX01QQzgzNDlFTUlUWCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi0jIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAogQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfUUUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTM3ND15Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19GQVNUPXkKLUNPTkZJR19VQ0M9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMnhfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCmluZGV4IDEwNDEyYTkuLjZkMzAwZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnCkBAIC0xLDE1NjkgKzEsOTUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo0MiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAogQ09ORklHX01QQzgzMnhfUkRCPXkKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfUkRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAotIyBDT05GSUdfQVNQODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVURVIxIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODMyeD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAogQ09ORklHX1FVSUNDX0VOR0lORT15Ci0jIENPTkZJR19RRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DVV9NUEM4MzQ5RU1JVFggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfU1BJPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfSUNQTFVTX1BIWT15Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQotIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfUUUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKLSMgQ09ORklHX1NQSV9NUEM4eHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCi0jIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKLSMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAogQ09ORklHX0xETV9QQVJUSVRJT049eQotIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV84PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19GQVNUPXkKLUNPTkZJR19VQ0M9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD15Ci1DT05GSUdfQ1JDMzI9eQotQ09ORklHX0NSQzc9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCmluZGV4IDdiMzFmYzMuLmIyMzZhNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0xLDE2NjcgKzEsMTAxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6NDMgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzR4X0lUWD15Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X1JESyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTUDgzNHggaXMgbm90IHNldAotIyBDT05GSUdfS01FVEVSMSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzNHg9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUNVX01QQzgzNDlFTUlUWCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotIyBDT05GSUdfTVREX0JMS0RFVlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLSMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUF9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfU1BJPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUw9eQotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogQ09ORklHX1BBVEFfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAogQ09ORklHX0NJQ0FEQV9QSFk9eQotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19GSVhFRF9QSFk9eQotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEk9eQotQ09ORklHX1NQSV9NQVNURVI9eQotCi0jCi0jIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCi0jCiBDT05GSUdfU1BJX0JJVEJBTkc9eQotIyBDT05GSUdfU1BJX01QQzh4eHggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggNDE0MDFhOS4uMDAxZGVhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCkBAIC0xLDE1NDIgKzEsOTAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo0NCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAogQ09ORklHX01QQzgzNHhfSVRYPXkKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfUkRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzN3hfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAotIyBDT05GSUdfQVNQODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVURVIxIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODM0eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9TUEk9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAogQ09ORklHX0NJQ0FEQV9QSFk9eQotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogQ09ORklHX1NQST15Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKIENPTkZJR19TUElfQklUQkFORz15Ci0jIENPTkZJR19TUElfTVBDOHh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUHJvdG9jb2wgTWFzdGVycwotIwotIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0ZTTD15Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15CiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKaW5kZXggZGMxNzZiNi4uOWRjY2VmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcKQEAgLTEsMTMzNSArMSw3NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjQ1IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODM0eF9NRFM9eQotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9SREsgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1A4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRVRFUjEgaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEM4MzR4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLUNPTkZJR19JUElDPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DVV9NUEM4MzQ5RU1JVFggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTWjg4NFhfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKaW5kZXggZjUxMjk3Mi4uZDRiMTY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcKQEAgLTEsMTQ4NCArMSw4MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjQ2IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODM2eF9NRFM9eQotIyBDT05GSUdfTVBDODM2eF9SREsgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1A4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRVRFUjEgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKIENPTkZJR19RVUlDQ19FTkdJTkU9eQotIyBDT05GSUdfUUVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLSMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKLSMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9RRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfVUNDX0ZBU1Q9eQotQ09ORklHX1VDQz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggNzdhYmZlOC4uODliYTY3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTEsMTM5MSArMSw4OCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjQ3IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKLSMgQ09ORklHX01QQzgzMXhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzMnhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzgzNnhfTURTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzZ4X1JESz15Ci0jIENPTkZJR19NUEM4Mzd4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4Mzd4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTUDgzNHggaXMgbm90IHNldAotIyBDT05GSUdfS01FVEVSMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAogQ09ORklHX1FVSUNDX0VOR0lORT15CiBDT05GSUdfUUVfR1BJTz15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19GU0xfTEJDPXkKLUNPTkZJR19GU0xfR1RNPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAotIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX1NQST15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfQlJPQURDT01fUEhZPXkKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKLSMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfUUU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX1NQSV9CSVRCQU5HPXkKLSMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NUEM4eHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBQcm90b2NvbCBNYXN0ZXJzCi0jCiBDT05GSUdfU1BJX1NQSURFVj15Ci0jIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTUFDTU9ERVM9eQotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT0Y9eQotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZTTF9ESVUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19TTE9XPXkKLUNPTkZJR19VQ0NfRkFTVD15Ci1DT05GSUdfVUNDPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQ1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19VU0JHRUNLTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IDBjZGI0MTQuLjJlYTZiNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xLDE0MDYgKzEsNzQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo0NyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15Ci0jIENPTkZJR19NUEM4MzF4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzJ4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzR4X0lUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4MzZ4X1JESyBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODM3eF9NRFM9eQotIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1A4MzR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRVRFUjEgaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEM4Mzd4PXkKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLUNPTkZJR19JUElDPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DVV9NUEM4MzQ5RU1JVFggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9GU0w9eQotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCmluZGV4IGU2OWVkMWIuLmJmZmUzYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0xLDE1NzQgKzEsMTA0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6NDggMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0ZTTF9FTUJfUEVSRk1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9SREsgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAogQ09ORklHX01QQzgzN3hfUkRCPXkKLSMgQ09ORklHX1NCQzgzNHggaXMgbm90IHNldAotIyBDT05GSUdfQVNQODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVURVIxIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODM3eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX0ZTTD15Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQotIyBDT05GSUdfTURfTElORUFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlEMT15Ci0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ2X1BRPXkKLSMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01PTlRFUkVZPXkKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15Ci0jIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwotIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0ZTTD15Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfWE9SX0JMT0NLUz15Ci1DT05GSUdfQVNZTkNfQ09SRT15Ci1DT05GSUdfQVNZTkNfTUVNQ1BZPXkKLUNPTkZJR19BU1lOQ19YT1I9eQotQ09ORklHX0FTWU5DX1BRPXkKLUNPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKaW5kZXggNTZlMzk5NS4uZmE1YzllZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCkBAIC0xLDE0OTEgKzEsOTUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo0OSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfRlNMX0VNQl9QRVJGTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQotIyBDT05GSUdfTVBDODMxeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODMyeF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM0eF9JVFggaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM2eF9SREsgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODM3eF9SREIgaXMgbm90IHNldAogQ09ORklHX1NCQzgzNHg9eQotIyBDT05GSUdfQVNQODM0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVURVIxIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDODM0eD15Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci1DT05GSUdfSVBJQz15Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1VfTVBDODM0OUVNSVRYIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfQlJPQURDT01fUEhZPXkKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9GU0w9eQotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwppbmRleCBmNjdhOGQxLi4zODViMWFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKQEAgLTEsMTE5MiArMSw3NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjUwIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M9MAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BNMj15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKIENPTkZJR19ISUdITUVNPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX01ESU9fQklUQkFORz15Ci0jIENPTkZJR19NRElPX0dQSU8gaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKIENPTkZJR19GU19FTkVUX01ESU9fRkNDPXkKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggNjFiMTIyYS4uMjIyYjcwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTEsMTA1NCArMSw2NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjUxIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15CiBDT05GSUdfTVBDODU0MF9BRFM9eQotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci0jIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0xPV01FTV9DQU1fTlVNPTMKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfQUxJR049MHgwNDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKaW5kZXggYTVjZWFhNC4uNjE5NzAyZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKQEAgLTEsMTIwMiArMSw2NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjUyIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M9MAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODU2MF9BRFM9eQotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMj15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9ERUJVRz15Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKLSMgQ09ORklHX0ZTX0VORVRfTURJT19GQ0MgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKaW5kZXggNGFkYjRlYi4uNmJmNTZlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTEsMTIyMiArMSw2OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjUzIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODV4eF9DRFM9eQotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfWEZFUl9NT0RFPXkKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwppbmRleCAzZGU4NDUwLi5hOWExN2QwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKQEAgLTEsMTA1OCArMSw1NyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjU0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfU09DX0JPT0tFPXkKLSMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKIENPTkZJR19TQkM4NTQ4PXkKLSMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfUDQwODBfRFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwppbmRleCBiZDQ2N2ZlLi44MjBlMzJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKQEAgLTEsMTA5MiArMSw2NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjU0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAotIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NTUgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKIENPTkZJR19TQkM4NTYwPXkKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci0jIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0xPV01FTV9DQU1fTlVNPTMKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfQUxJR049MHgwNDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogQ09ORklHX0JST0FEQ09NX1BIWT15Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQ4VDU5PXkKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUEFTX1JFQUxNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQ1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19VU0JHRUNLTyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCmluZGV4IDk4MDNlMDMuLmI2ZGIzZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC0xLDE3NTQgKzEsMTExIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6NTUgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTUwMD15Ci0jIENPTkZJR19QUENfRTUwME1DIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfRU1CX1BFUkZNT049eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M9MAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKIENPTkZJR19TT0NSQVRFUz15Ci0jIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogQ09ORklHX0NBTj15CiBDT05GSUdfQ0FOX1JBVz15CiBDT05GSUdfQ0FOX0JDTT15Ci0KLSMKLSMgQ0FOIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19DQU5fVkNBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU5fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0ZTTF9VUE0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX1NPQ1JBVEVTPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfU1BJPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9ODAwCiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NDgwCi0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLUNPTkZJR19TUElfTUFTVEVSPXkKLQotIwotIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01QQzh4eHggaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKLSMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci1DT05GSUdfSFdNT05fVklEPXkKIENPTkZJR19IV01PTl9ERUJVR19DSElQPXkKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0xNNzU9eQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVzgzNzgxRD15Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9GT1JFSUdOX0VORElBTj15Ci1DT05GSUdfRkJfQk9USF9FTkRJQU49eQotIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRlNMX0RJVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTUI4NjJYWD15Ci0jIENPTkZJR19GQl9NQjg2MlhYX1BDSV9HREMgaXMgbm90IHNldAogQ09ORklHX0ZCX01CODYyWFhfTElNRT15Ci0jIENPTkZJR19GQl9QUkVfSU5JVF9GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAogQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT1NBUlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCmluZGV4IDg4MGFiN2FhLi4zMzNhNDFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKQEAgLTEsMTYxNCArMSw4OCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjU2IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M9MAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAogQ09ORklHX1NUWF9HUDM9eQotIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9GSUxURVI9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKIENPTkZJR19ORVRfUEtUR0VOPXkKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX0kyQz1tCi1DT05GSUdfT0ZfTURJTz15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KLSMgQ09ORklHX1BBUlBPUlRfUENfRklGTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9BWDg4Nzk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX0FUQVBJPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPW0KLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9bQogQ09ORklHX0NIUl9ERVZfU1Q9bQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPW0KLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPW0KLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BMSVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTI4MAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEwMjQKIENPTkZJR19JTlBVVF9KT1lERVY9bQogQ09ORklHX0lOUFVUX0VWREVWPW0KLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NQTT15CiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiBDT05GSUdfUFJJTlRFUj1tCi0jIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9bQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPW0KLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfQ1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKIENPTkZJR19BR1A9bQotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKIENPTkZJR19EUk09bQotIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD1tCi0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCi0jIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTkxTX0NPREVQQUdFXzQzNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj1tCi1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19CRElfU1dJVENIPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKaW5kZXggMjMwYWEyZi4uMzNkYjM1MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCkBAIC0xLDEzOTAgKzEsNzMgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo1NyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19FNTAwPXkKLSMgQ09ORklHX1BQQ19FNTAwTUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci1DT05GSUdfUFBDX0JPT0szRV9NTVU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUz0wCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0CiBDT05GSUdfVFFNODU0MD15Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9YRkVSX01PREU9eQotQ09ORklHX0lERV9USU1JTkdTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfS1NaODg0WF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT15Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKaW5kZXggZGJlMDRiOS4uZjBjMjBkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCkBAIC0xLDE0MzggKzEsNzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjo1OCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19FNTAwPXkKLSMgQ09ORklHX1BQQ19FNTAwTUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci1DT05GSUdfUFBDX0JPT0szRV9NTVU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKIENPTkZJR19UUU04NTQxPXkKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9YRkVSX01PREU9eQotQ09ORklHX0lERV9USU1JTkdTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfS1NaODg0WF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0NQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT15Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwppbmRleCA4NDVlZmE3Li5hODgzNDUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKQEAgLTEsMTQzNiArMSw4NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjU5IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAotIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CiBDT05GSUdfVFFNODU0OD15Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLUNPTkZJR19UUU04NXh4PXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfRlNMX0xCQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAotIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0xPV01FTV9DQU1fTlVNPTMKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfQUxJR049MHgwNDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMS0RFVlM9eQotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfRUNDX1NNQz15Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9GU0xfVVBNPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0xNNzU9eQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCmluZGV4IGI5NTgxMzYuLmZmOTVmOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwpAQCAtMSwxNDM4ICsxLDc1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTc6MDAgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTUwMD15Ci0jIENPTkZJR19QUENfRTUwME1DIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfRU1CX1BFUkZNT049eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BFPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUz0wCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfU09DX0JPT0tFPXkKLSMgQ09ORklHX01QQzg1NDBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1NjBfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUWF9HUDMgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDggaXMgbm90IHNldAogQ09ORklHX1RRTTg1NTU9eQotIyBDT05GSUdfVFFNODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfUDQwODBfRFMgaXMgbm90IHNldAotQ09ORklHX1RRTTg1eHg9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0yPXkKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19DUE09eQotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX0xPV01FTV9DQU1fTlVNPTMKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfQUxJR049MHgwNDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfWEZFUl9NT0RFPXkKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTWjg4NFhfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19DUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTl9ERUJVR19DSElQPXkKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0xNNzU9eQotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKaW5kZXggMDA4YmM5Ny4uOGQ2YzkwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCkBAIC0xLDE0MzggKzEsNzUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNzowMSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19FNTAwPXkKLSMgQ09ORklHX1BQQ19FNTAwTUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEU9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci1DT05GSUdfUFBDX0JPT0szRV9NTVU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQotIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKIENPTkZJR19UUU04NTYwPXkKLSMgQ09ORklHX1NCQzg1NDggaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9YRkVSX01PREU9eQotQ09ORklHX0lERV9USU1JTkdTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfS1NaODg0WF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0NQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0M3NjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT15Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCmluZGV4IDJjZjgwZGIuLmY1M2VmZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCkBAIC0xLDM5NyArMSw0OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE3OjAxIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg1eHg9eQotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX0U1MDA9eQotIyBDT05GSUdfUFBDX0U1MDBNQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19CT09LRT15Ci1DT05GSUdfRlNMX0JPT0tFPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1NQRT15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLUNPTkZJR19QUENfQk9PSzNFX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfRFZDUz0wCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15Ci0jIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVNJX0JJVE1BUD15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15Ci0jIENPTkZJR19NUEM4NTQwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTYwX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X0NEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAotIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAotIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiBDT05GSUdfWEVTX01QQzg1eHg9eQotIyBDT05GSUdfU1RYX0dQMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NDEgaXMgbm90IHNldAotIyBDT05GSUdfVFFNODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAotIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A0MDgwX0RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKIENPTkZJR19NUEM4eHh4X0dQSU89eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfRlNMX0xCQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAotIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKIENPTkZJR19BRFZBTkNFRF9PUFRJT05TPXkKIENPTkZJR19MT1dNRU1fU0laRV9CT09MPXkKIENPTkZJR19MT1dNRU1fU0laRT0weDQwMDAwMDAwCi0jIENPTkZJR19MT1dNRU1fQ0FNX05VTV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi0jIENPTkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVRfQk9PTD15CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVF9CT09MPXkKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHg4MDAwMDAwMAotIyBDT05GSUdfUEhZU0lDQUxfU1RBUlRfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKIENPTkZJR19UQVNLX1NJWkVfQk9PTD15CiBDT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKQEAgLTQwNiwxNTU0ICs1OCwxMjAgQEAKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQogQ09ORklHX0FSUEQ9eQotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci0jIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfQ0ZJX1NUQUE9eQotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EPXkKLSMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz15Ci0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORF9GU0xfRUxCQz15CiBDT05GSUdfTVREX05BTkRfRlNMX1VQTT15Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX0FMST15Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19CUk9BRENPTV9QSFk9eQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19OVlJBTT15Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogQ09ORklHX0dQSU9fUENBOTUzWD15Ci0jIENPTkZJR19HUElPX1BDQTk1M1hfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0RTMTYyMT15Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE05MD15Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09LRV9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT1NBUlQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTc2MF9IQ0Q9eQotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQotQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15Ci1DT05GSUdfTEVEU19HUElPX09GPXkKLSMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1BDQTk1NVg9eQotIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQotCi0jCi0jIExFRCBUcmlnZ2VycwotIwogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0Ci0KLSMKLSMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQotIwotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19FREFDPXkKLQotIwotIyBSZXBvcnRpbmcgc3Vic3lzdGVtcwotIwotIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19ETUFERVZJQ0VTPXkKLSMgQ09ORklHX0RNQURFVklDRVNfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIERNQSBEZXZpY2VzCi0jCiBDT05GSUdfRlNMX0RNQT15Ci1DT05GSUdfRE1BX0VOR0lORT15Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLUNPTkZJR19ORVRfRE1BPXkKLSMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKIENPTkZJR19VREZfRlM9eQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKLSMgQ09ORklHX05GU0RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggYjcyOGE3ZC4uNDMyZWJjMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMSwzOTYgKzEsNTAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNzowNyAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogQ09ORklHX1JFTEFZPXkKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi1DT05GSUdfU0xPV19XT1JLPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVI9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAogQ09ORklHX0dFRl9QUEM5QT15Ci0jIENPTkZJR19HRUZfU0JDMzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFRl9TQkM2MTAgaXMgbm90IHNldAotQ09ORklHX01QQzg2NDE9eQotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci1DT05GSUdfTU1JT19OVlJBTT15Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15CiBDT05GSUdfUENJRVBPUlRCVVM9eQotQ09ORklHX1BDSUVBRVI9eQotIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogQ09ORklHX1BDQ0FSRD15Ci1DT05GSUdfUENNQ0lBPXkKICMgQ09ORklHX1BDTUNJQV9MT0FEX0NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVJEQlVTIGlzIG5vdCBzZXQKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKIENPTkZJR19ZRU5UQT15CiAjIENPTkZJR19ZRU5UQV9PMiBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRU5UQV9SSUNPSCBpcyBub3Qgc2V0Ci1DT05GSUdfWUVOVEFfVEk9eQogIyBDT05GSUdfWUVOVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPXkKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKQEAgLTQwNCw1NjggKzU4LDQ5IEBACiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCi1DT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9bQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD1tCi0jIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKIENPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKIENPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCi0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTk3Myw3OTIgKzEwOCw4NyBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKLUNPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTkwPXkKIENPTkZJR19TRU5TT1JTX0xNOTI9eQotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VGX1dEVD15Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lHOTQwX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTUlDUk9TT0ZUPXkKLSMgQ09ORklHX0hJRF9NT1NBUlQgaXMgbm90IHNldAogQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX09SVEVLIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQotIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQogIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JYODU4MT15Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwogQ09ORklHX1NUQUdJTkc9eQogIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT01FREkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTg3U0UgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE5MlNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KLSMKLQotIwotIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgotIwotIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfUEhJU09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZUNjY1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WVDY2NTYgaXMgbm90IHNldAogQ09ORklHX1ZNRV9CVVM9eQotCi0jCi0jIFZNRSBCcmlkZ2UgRHJpdmVycwotIwotIyBDT05GSUdfVk1FX0NBOTFDWDQyIGlzIG5vdCBzZXQKIENPTkZJR19WTUVfVFNJMTQ4PXkKLQotIwotIyBWTUUgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBWTUUgQm9hcmQgRHJpdmVycwotIwotIyBDT05GSUdfVk1JVk1FXzc4MDUgaXMgbm90IHNldAotCi0jCi0jIFJBUiBSZWdpc3RlciBEcml2ZXIKLSMKLSMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkFNWlNXQVAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfV0FWRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfTkVUV0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVDMxNTUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZU1RBTEhEIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz15Ci1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTg1MAogQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iYXNjaWkiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTE3OTcsMTc0ICsyMjcsMTEgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9eQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz15Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9bQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKaW5kZXggOGU3MzhkZS4uY2U1ZTkxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCkBAIC0xLDM5NiArMSw1MCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE3OjA1IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg2eHg9eQotIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfUFBDOUEgaXMgbm90IHNldAogQ09ORklHX0dFRl9TQkMzMTA9eQotIyBDT05GSUdfR0VGX1NCQzYxMCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODY0MT15Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLUNPTkZJR19NTUlPX05WUkFNPXkKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAotIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLUNPTkZJR19QQ01DSUE9eQogIyBDT05GSUdfUENNQ0lBX0xPQURfQ0lTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBUkRCVVMgaXMgbm90IHNldAotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIwogQ09ORklHX1lFTlRBPXkKICMgQ09ORklHX1lFTlRBX08yIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTlRBX1JJQ09IIGlzIG5vdCBzZXQKLUNPTkZJR19ZRU5UQV9UST15CiAjIENPTkZJR19ZRU5UQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQpAQCAtNDA0LDUwOSArNTgsNTAgQEAKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwogQ09ORklHX05FVF9QS1RHRU49bQotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ1M9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CkBAIC05MTQsNzM3ICsxMDksODMgQEAKIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15Ci1DT05GSUdfU0xIQz1tCiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUQ09OU09MRT15Ci0jIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAotQ09ORklHX05FVFBPTEw9eQogQ09ORklHX05FVFBPTExfVFJBUD15Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKIENPTkZJR19HUElPX1NZU0ZTPXkKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE05MD15CiBDT05GSUdfU0VOU09SU19MTTkyPXkKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAogQ09ORklHX0dFRl9XRFQ9eQotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKICMgQ09ORklHX1JUQ19JTlRGX1BST0MgaXMgbm90IHNldAotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SWDg1ODE9eQotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPXkKLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9ODUwCiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJhc2NpaSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQpAQCAtMTY4MywxNzQgKzIyNCwxMSBAQAogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQogQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD15Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz1tCi0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz15Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCA1OWJmOWUyLi41ODllNzFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTEsMzg0ICsxLDQ0IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTc6MDYgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKIENPTkZJR19SRUxBWT15Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg2eHg9eQotIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfUFBDOUEgaXMgbm90IHNldAotIyBDT05GSUdfR0VGX1NCQzMxMCBpcyBub3Qgc2V0CiBDT05GSUdfR0VGX1NCQzYxMD15Ci1DT05GSUdfTVBDODY0MT15Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLUNPTkZJR19NTUlPX05WUkFNPXkKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci0jIENPTkZJR19QQ0lFX0VDUkMgaXMgbm90IHNldAotIyBDT05GSUdfUENJRUFFUl9JTkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9ERUJVRz15Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX0lQQ09NUD1tCiBDT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CkBAIC0zOTIsMTA0ICs1MiwyMCBAQAogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVRfVFVOTkVMPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCi0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9bQotIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIENPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci1DT05GSUdfQlJJREdFX05FVEZJTFRFUj15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfVFBST1hZIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCi0jIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCkBAIC00OTgsODAgKzc0LDM4IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9SQVc9bQotIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKIENPTkZJR19USVBDPW0KLSMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAotIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVRNPW0KIENPTkZJR19BVE1fQ0xJUD1tCi0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fTEFORT1tCiBDT05GSUdfQVRNX01QT0E9bQogQ09ORklHX0FUTV9CUjI2ODQ9bQotIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1RQPW0KIENPTkZJR19CUklER0U9bQotQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0FOX1JPVVRFUj1tCi0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSEVEPXkKLQotIwotIyBRdWV1ZWluZy9TY2hlZHVsaW5nCi0jCiBDT05GSUdfTkVUX1NDSF9DQlE9bQogQ09ORklHX05FVF9TQ0hfSFRCPW0KIENPTkZJR19ORVRfU0NIX0hGU0M9bQogQ09ORklHX05FVF9TQ0hfQVRNPW0KIENPTkZJR19ORVRfU0NIX1BSSU89bQotIyBDT05GSUdfTkVUX1NDSF9NVUxUSVEgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hfUkVEPW0KIENPTkZJR19ORVRfU0NIX1NGUT1tCiBDT05GSUdfTkVUX1NDSF9URVFMPW0KQEAgLTU3OSw0OTEgKzExMyw0NSBAQAogQ09ORklHX05FVF9TQ0hfR1JFRD1tCiBDT05GSUdfTkVUX1NDSF9EU01BUks9bQogQ09ORklHX05FVF9TQ0hfTkVURU09bQotIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAotCi0jCi0jIENsYXNzaWZpY2F0aW9uCi0jCi1DT05GSUdfTkVUX0NMUz15Ci0jIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQogQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIENPTkZJR19ORVRfQ0xTX0ZXPW0KIENPTkZJR19ORVRfQ0xTX1UzMj1tCi0jIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAotIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JTVlA9bQogQ09ORklHX05FVF9DTFNfUlNWUDY9bQotIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwogQ09ORklHX05FVF9QS1RHRU49bQotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCi0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0RSSVZFUlM9eQotIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0xBTkFJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX05JQ1NUQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRk9SRTIwMEUgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9TT0xPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQogQ09ORklHX1BQUF9GSUxURVI9eQpAQCAtMTA3MSw3ODEgKzE1OSw4MiBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCiBDT05GSUdfUFBQT0FUTT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKLUNPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE05MD15CiBDT05GSUdfU0VOU09SU19MTTkyPXkKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAogQ09ORklHX0dFRl9XRFQ9eQotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9GU0wgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQogIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JYODU4MT15Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwogQ09ORklHX1NUQUdJTkc9eQogIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUMTMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVBfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNMl9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT01FREkgaXMgbm90IHNldAotIyBDT05GSUdfQVNVU19PTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTg3U0UgaXMgbm90IHNldAotIyBDT05GSUdfUlRMODE5MlNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQU5aUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUXVhbGNvbW0gTVNNIENhbWVyYSBBbmQgVmlkZW8KLSMKLQotIwotIyBDYW1lcmEgU2Vuc29yIFNlbGVjdGlvbgotIwotIyBDT05GSUdfSU5QVVRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT0hNRUxGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfUEhJU09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZUNjY1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WVDY2NTYgaXMgbm90IHNldAogQ09ORklHX1ZNRV9CVVM9eQotCi0jCi0jIFZNRSBCcmlkZ2UgRHJpdmVycwotIwotIyBDT05GSUdfVk1FX0NBOTFDWDQyIGlzIG5vdCBzZXQKIENPTkZJR19WTUVfVFNJMTQ4PXkKLQotIwotIyBWTUUgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1ZNRV9VU0VSIGlzIG5vdCBzZXQKLQotIwotIyBWTUUgQm9hcmQgRHJpdmVycwotIwotIyBDT05GSUdfVk1JVk1FXzc4MDUgaXMgbm90IHNldAotCi0jCi0jIFJBUiBSZWdpc3RlciBEcml2ZXIKLSMKLSMgQ09ORklHX1JBUl9SRUdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkFNWlNXQVAgaXMgbm90IHNldAotIyBDT05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVDMxNTUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZU1RBTEhEIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NJRlNfWEFUVFI9eQogQ09ORklHX0NJRlNfUE9TSVg9eQotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCkBAIC0xODg0LDIzOCArMjczLDM0IEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWT15Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KLSMgQ09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IDRlOGIwMWUuLjMyMWZiNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTEsOTU4ICsxLDc5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTc6MDMgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184Nnh4PXkKLSMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CiBDT05GSUdfTVBDODYxMF9IUENEPXkKLSMgQ09ORklHX0dFRl9QUEM5QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfU0JDMzEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFRl9TQkM2MTAgaXMgbm90IHNldAotQ09ORklHX01QQzg2MTA9eQotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMgotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0RFQlVHPXkKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKIENPTkZJR19TQ1NJX1RHVD15Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9BTEk9eQotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1RVTElQPXkKLSMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAotIyBDT05GSUdfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfREU0WDUgaXMgbm90IHNldAotIyBDT05GSUdfV0lOQk9ORF84NDAgaXMgbm90IHNldAotIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKIENPTkZJR19VTEk1MjZYPXkKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CkBAIC05NjAsNzkxICs4MSw0MCBAQAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKIENPTkZJR19GQl9GU0xfRElVPXkKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLUNPTkZJR19TTkRfSkFDSz15Ci0jIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQotIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzVBVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKIENPTkZJR19TTkRfU09DPXkKLUNPTkZJR19TTkRfU09DX01QQzg2MTA9eQotQ09ORklHX1NORF9TT0NfTVBDODYxMF9IUENEPXkKLUNPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKLSMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NPQ19DUzQyNzA9eQotQ09ORklHX1NORF9TT0NfQ1M0MjcwX1ZEMzNfRVJSQVRBPXkKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAogQ09ORklHX0xETV9QQVJUSVRJT049eQotIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfU0hJUlE9eQotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggMjBmZGU2My4uYjVlNDYzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwpAQCAtMSwzODAgKzEsNDIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNzowNCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9GQVNUX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfTVBDODY0MV9IUENOPXkKLSMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfUFBDOUEgaXMgbm90IHNldAotIyBDT05GSUdfR0VGX1NCQzMxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfU0JDNjEwIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfVUxJMTU3NT15Ci0jIENPTkZJR19NUEM4eHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19JT01NVV9IRUxQRVI9eQotQ09ORklHX1NXSU9UTEI9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKQEAgLTM4OSw1MjQgKzUxLDQxIEBACiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKIENPTkZJR19BUlBEPXkKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiBDT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAogQ09ORklHX1BBVEFfQUxJPXkKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAogQ09ORklHX1ZJVEVTU0VfUEhZPXkKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CkBAIC05MTQsOTAwICs5Myw4NCBAQAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzNUFVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0lOVEVMOFgwPXkKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lHOTQwX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTUlDUk9TT0ZUPXkKLSMgQ09ORklHX0hJRF9NT1NBUlQgaXMgbm90IHNldAogQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX09SVEVLIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQotIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9DTU9TPXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogQ09ORklHX05URlNfRlM9eQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKIENPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAogQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCi0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKIENPTkZJR19WWEZTX0ZTPW0KLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0hQRlNfRlM9bQogQ09ORklHX1FOWDRGU19GUz1tCi0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDUllQVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKaW5kZXggNzRmNzE0ZC4uNzExNDVjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKQEAgLTEsMzg0ICsxLDQxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTc6MDIgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19HRU5FUklDX0xPQ0tCUkVBSz15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xPV19XT1JLPXkKLSMgQ09ORklHX1NMT1dfV09SS19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfODZ4eD15Ci0jIENPTkZJR19NUEM4NjQxX0hQQ04gaXMgbm90IHNldAogQ09ORklHX1NCQzg2NDFEPXkKLSMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfUFBDOUEgaXMgbm90IHNldAotIyBDT05GSUdfR0VGX1NCQzMxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfU0JDNjEwIGlzIG5vdCBzZXQKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz1tCi0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKLUNPTkZJR19QQ0lFQUVSPXkKLSMgQ09ORklHX1BDSUVfRUNSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lFQUVSX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQpAQCAtMzkyLDEwNCArNDksMjAgQEAKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNj1tCi0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUNl9BSD1tCiBDT05GSUdfSU5FVDZfRVNQPW0KIENPTkZJR19JTkVUNl9JUENPTVA9bQotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQpAQCAtNDk4LDgwICs3MSwzOCBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCi0jIENPTkZJR19JUDZfTkZfTUFUQ0hfQUggaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSEw9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9JUFY2SEVBREVSPW0KLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9NSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KLSMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLSMgQ09ORklHX0lQNl9ORl9TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiBDT05GSUdfVElQQz1tCi0jIENPTkZJR19USVBDX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUENfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0FUTT1tCiBDT05GSUdfQVRNX0NMSVA9bQotIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CiBDT05GSUdfQVRNX0xBTkU9bQogQ09ORklHX0FUTV9NUE9BPW0KIENPTkZJR19BVE1fQlIyNjg0PW0KLSMgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgaXMgbm90IHNldAotQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KLUNPTkZJR19CUklER0VfSUdNUF9TTk9PUElORz15Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKIENPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogQ09ORklHX1dBTl9ST1VURVI9bQotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwogQ09ORklHX05FVF9TQ0hfQ0JRPW0KIENPTkZJR19ORVRfU0NIX0hUQj1tCiBDT05GSUdfTkVUX1NDSF9IRlNDPW0KIENPTkZJR19ORVRfU0NIX0FUTT1tCiBDT05GSUdfTkVUX1NDSF9QUklPPW0KLSMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIX1JFRD1tCiBDT05GSUdfTkVUX1NDSF9TRlE9bQogQ09ORklHX05FVF9TQ0hfVEVRTD1tCkBAIC01NzksMzYwICsxMTAsNTEgQEAKIENPTkZJR19ORVRfU0NIX0dSRUQ9bQogQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KIENPTkZJR19ORVRfU0NIX05FVEVNPW0KLSMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKLQotIwotIyBDbGFzc2lmaWNhdGlvbgotIwotQ09ORklHX05FVF9DTFM9eQotIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KIENPTkZJR19ORVRfQ0xTX1JPVVRFND1tCi1DT05GSUdfTkVUX0NMU19ST1VURT15CiBDT05GSUdfTkVUX0NMU19GVz1tCiBDT05GSUdfTkVUX0NMU19VMzI9bQotIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19SU1ZQPW0KIENPTkZJR19ORVRfQ0xTX1JTVlA2PW0KLSMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfSU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfU0NIX0ZJRk89eQotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKIENPTkZJR19ORVRfUEtUR0VOPW0KLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLSMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKIENPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPXkKLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD15CiBDT05GSUdfTURfRkFVTFRZPXkKIENPTkZJR19CTEtfREVWX0RNPXkKLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD15CiBDT05GSUdfRE1fU05BUFNIT1Q9eQogQ09ORklHX0RNX01JUlJPUj15Ci0jIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19ETV9aRVJPPXkKLSMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KIENPTkZJR19CT05ESU5HPW0KLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfQlJPQURDT01fUEhZPXkKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfUFFfTURJTz15CiBDT05GSUdfR0lBTkZBUj15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotQ09ORklHX0FUTV9EUklWRVJTPXkKLSMgQ09ORklHX0FUTV9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9GSVJFU1RSRUFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9aQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9OSUNTVEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JRFQ3NzI1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fQU1CQVNTQURPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fU09MT1MgaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTk0MCw0OTUgKzE2Miw1NCBAQAogQ09ORklHX1BQUF9TWU5DX1RUWT1tCiBDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCiBDT05GSUdfUFBQT0FUTT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKLUNPTkZJR19TTEhDPW0KIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKIENPTkZJR19ORVRQT0xMX1RSQVA9eQotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKIENPTkZJR19TT0ZUX1dBVENIRE9HPW0KLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQyPW0KLSMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX09DRlMyX0ZTX08yQ0I9bQotQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKLUNPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKLSMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLUNPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT1tCi0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FGTVRfVjIgaXMgbm90IHNldAotQ09ORklHX1FVT1RBQ1RMPXkKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz1tCi0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz1tCi1DT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKLSMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAotQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KIENPTkZJR19TTUJfTkxTX0RFRkFVTFQ9eQotQ09ORklHX1NNQl9OTFNfUkVNT1RFPSJjcDQzNyIKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQEAgLTE0NjcsMjQzICsyNDgsMzQgQEAKIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWT15Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KLSMgQ09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLUNPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKaW5kZXggYTY3MGNlZS4uY2E4NGM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwpAQCAtMSw5ODQgKzEsNzIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjoyMiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogQ09ORklHX1BQQ184eHg9eQotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX1JFREJPT1Q9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfQkFTRV9TTUFMTD0xCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMT15Ci0jIENPTkZJR19NUEM4WFhGQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2WEFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM4ODVBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0FEREVSODc1PXkKLSMgQ09ORklHX1BQQ19NR1NVVkQgaXMgbm90IHNldAotCi0jCi0jIE1QQzh4eCBDUE0gT3B0aW9ucwotIwotCi0jCi0jIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKLSMKIENPTkZJR184eHhfQ09QWUJBQ0s9eQotIyBDT05GSUdfOHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfOHh4X0NQVTYgaXMgbm90IHNldAotQ09ORklHXzh4eF9DUFUxNT15Ci1DT05GSUdfTk9fVUNPREVfUEFUQ0g9eQotIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfUVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0NGSV9GTEFHQURNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAogQ09ORklHX0RBVklDT01fUEhZPXkKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKLUNPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCmluZGV4IDg1MTI4N2UuLmI2ZDQ5ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKQEAgLTEsNzI0ICsxLDc5IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCi0jIFN1biBGZWIgIDEgMTQ6MjI6NDIgMjAwOQotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKIENPTkZJR19BTUlHQU9ORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfTkFUPW0KLUNPTkZJR19ORl9OQVRfTkVFREVEPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi0jIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9OQVRfU0lQPW0KICMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD15CiBDT05GSUdfUEFSUE9SVF9QQz15Ci0jIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CiBDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKLSMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKIENPTkZJR19CTEtfREVWX0ZEPXkKLSMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9USU1JTkdTPXkKLUNPTkZJR19JREVfQVRBUEk9eQotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NJSU1BR0U9eQotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUFBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVkVORE9SXzNDT009eQogQ09ORklHX1ZPUlRFWD15Ci0jIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAogQ09ORklHXzgxMzlDUD15CiBDT05GSUdfODEzOVRPTz15Ci1DT05GSUdfODEzOVRPT19QSU89eQotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTElQIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQogQ09ORklHX1BQUF9GSUxURVI9eQpAQCAtNzI4LDkwOCArODMsNjMgQEAKIENPTkZJR19QUFBfQlNEQ09NUD1tCiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15Ci1DT05GSUdfTU9VU0VfUFMyPXkKLUNPTkZJR19NT1VTRV9QUzJfQUxQUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15Ci1DT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX1BDU1BLUj15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQl9EREM9eQotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9CQUNLTElHSFQ9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAogQ09ORklHX0ZCX1JBREVPTj15Ci1DT05GSUdfRkJfUkFERU9OX0kyQz15Ci1DT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKIENPTkZJR19GQl8zREZYPXkKLSMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9bQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15CiBDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9UT1BTRUVEPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKLSMKLQotIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlM9eQotIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAotQ09ORklHX0VYVDRfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19KQkQyPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKLSMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FGRlNfRlM9bQotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX0FNSUdBX1BBUlRJVElPTj15Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15Ci1DT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15Ci1DT05GSUdfREVCVUdHRVI9eQotQ09ORklHX0lSUVNUQUNLUz15Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIPW0KLUNPTkZJR19DUllQVE9fSEFTSDI9bQotQ09ORklHX0NSWVBUT19STkcyPW0KLUNPTkZJR19DUllQVE9fTUFOQUdFUj1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZwppbmRleCBiNDI5YTY1Li5mOWU2YTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKQEAgLTEsNTUzICsxLDY2IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MjMgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci1DT05GSUdfUFBDX1BFUkZfQ1RSUz15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15Ci1DT05GSUdfQVVESVRTWVNDQUxMPXkKLUNPTkZJR19BVURJVF9UUkVFPXkKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfUkRfTFpPPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfUEVSRl9FVkVOVFM9eQotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xPV19XT1JLPXkKLSMgQ09ORklHX1NMT1dfV09SS19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQotIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1RPUkNFTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM3NDQ4SFBDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSE9MTFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BSUE1DMjgwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0MySz15Ci1DT05GSUdfTVY2NFg2MD15Ci0jIENPTkZJR19HQU1FQ1VCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSUkgaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCi1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgZHJpdmVycwotIwotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0k9eQotIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDPW0KLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQogQ09ORklHX0lQVjZfUFJJVkFDWT15Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCi0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9bQotIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKIENPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotQ09ORklHX0JSSURHRV9ORVRGSUxURVI9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9WUz1tCi0jIENPTkZJR19JUF9WU19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9WU19UQUJfQklUUz0xMgotCi0jCi0jIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQKLSMKLUNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQotQ09ORklHX0lQX1ZTX1BST1RPX1VEUD15Ci1DT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQPXkKLUNPTkZJR19JUF9WU19QUk9UT19FU1A9eQotQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKLSMgQ09ORklHX0lQX1ZTX1BST1RPX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIElQVlMgc2NoZWR1bGVyCi0jCi1DT05GSUdfSVBfVlNfUlI9bQotQ09ORklHX0lQX1ZTX1dSUj1tCi1DT05GSUdfSVBfVlNfTEM9bQotQ09ORklHX0lQX1ZTX1dMQz1tCi1DT05GSUdfSVBfVlNfTEJMQz1tCi1DT05GSUdfSVBfVlNfTEJMQ1I9bQotQ09ORklHX0lQX1ZTX0RIPW0KLUNPTkZJR19JUF9WU19TSD1tCi1DT05GSUdfSVBfVlNfU0VEPW0KLUNPTkZJR19JUF9WU19OUT1tCi0KLSMKLSMgSVBWUyBhcHBsaWNhdGlvbiBoZWxwZXIKLSMKLUNPTkZJR19JUF9WU19GVFA9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQpAQCAtNTU2LDMzICs2OSwyMSBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUkFXPW0KLSMgQ09ORklHX0lQX05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KLSMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCiBDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQotIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9ITCBpcyBub3Qgc2V0CiBDT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQotIyBDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QgaXMgbm90IHNldAogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQogQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KIENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KQEAgLTU5MSw3ICs5Miw2IEBACiBDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCiBDT05GSUdfQlJJREdFX0VCVF9BUlA9bQogQ09ORklHX0JSSURHRV9FQlRfSVA9bQotIyBDT05GSUdfQlJJREdFX0VCVF9JUDYgaXMgbm90IHNldAogQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQogQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCiBDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KQEAgLTYwMyw1MiArMTAzLDE5IEBACiBDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCiBDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KIENPTkZJR19CUklER0VfRUJUX0xPRz1tCi0jIENPTkZJR19CUklER0VfRUJUX1VMT0cgaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFX0VCVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogQ09ORklHX0FUTT1tCiBDT05GSUdfQVRNX0NMSVA9bQotIyBDT05GSUdfQVRNX0NMSVBfTk9fSUNNUCBpcyBub3Qgc2V0CiBDT05GSUdfQVRNX0xBTkU9bQotIyBDT05GSUdfQVRNX01QT0EgaXMgbm90IHNldAogQ09ORklHX0FUTV9CUjI2ODQ9bQotIyBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1RQPW0KIENPTkZJR19CUklER0U9bQotQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogQ09ORklHX1ZMQU5fODAyMVE9bQotIyBDT05GSUdfVkxBTl84MDIxUV9HVlJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPW0KLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQotCi0jCi0jIFF1ZXVlaW5nL1NjaGVkdWxpbmcKLSMKIENPTkZJR19ORVRfU0NIX0NCUT1tCiBDT05GSUdfTkVUX1NDSF9IVEI9bQogQ09ORklHX05FVF9TQ0hfSEZTQz1tCiBDT05GSUdfTkVUX1NDSF9BVE09bQogQ09ORklHX05FVF9TQ0hfUFJJTz1tCi0jIENPTkZJR19ORVRfU0NIX01VTFRJUSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSF9SRUQ9bQogQ09ORklHX05FVF9TQ0hfU0ZRPW0KIENPTkZJR19ORVRfU0NIX1RFUUw9bQpAQCAtNjU2LDM3ICsxMjMsMTQgQEAKIENPTkZJR19ORVRfU0NIX0dSRUQ9bQogQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KIENPTkZJR19ORVRfU0NIX05FVEVNPW0KLSMgQ09ORklHX05FVF9TQ0hfRFJSIGlzIG5vdCBzZXQKLQotIwotIyBDbGFzc2lmaWNhdGlvbgotIwotQ09ORklHX05FVF9DTFM9eQotIyBDT05GSUdfTkVUX0NMU19CQVNJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KIENPTkZJR19ORVRfQ0xTX1JPVVRFND1tCi1DT05GSUdfTkVUX0NMU19ST1VURT15CiBDT05GSUdfTkVUX0NMU19GVz1tCiBDT05GSUdfTkVUX0NMU19VMzI9bQogQ09ORklHX0NMU19VMzJfUEVSRj15Ci0jIENPTkZJR19DTFNfVTMyX01BUksgaXMgbm90IHNldAogQ09ORklHX05FVF9DTFNfUlNWUD1tCiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCi0jIENPTkZJR19ORVRfQ0xTX0ZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0NMU19JTkQ9eQotQ09ORklHX05FVF9TQ0hfRklGTz15Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPW0KIENPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfU0NPPW0KQEAgLTY5Niw1OTcgKzE0MCwxMDQgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSVVBUlQ9bQogQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQogQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15Ci0jIENPTkZJR19CVF9IQ0lVQVJUX0xMIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lCQ00yMDNYPW0KLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJQkZVU0I9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQotIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD1tCiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPW0KLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotQ09ORklHX01URF9DRklfSTQ9eQotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPW0KLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD1tCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9ORVRMSU5LPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD1tCiBDT05GSUdfQ0hSX0RFVl9TVD1tCiBDT05GSUdfQ0hSX0RFVl9PU1NUPW0KIENPTkZJR19CTEtfREVWX1NSPW0KIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQogQ09ORklHX1NDU0lfTE9HR0lORz15Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCi1DT05GSUdfU0NTSV9GQ19BVFRSUz1tCiBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCi0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEPW0KLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV8zV185WFhYPW0KLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0FDQVJEPW0KIENPTkZJR19TQ1NJX0FBQ1JBSUQ9bQogQ09ORklHX1NDU0lfQUlDN1hYWD1tCiBDT05GSUdfQUlDN1hYWF9DTURTX1BFUl9ERVZJQ0U9NAogQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKICMgQ09ORklHX0FJQzdYWFhfREVCVUdfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19BSUM3WFhYX0RFQlVHX01BU0s9MAogIyBDT05GSUdfQUlDN1hYWF9SRUdfUFJFVFRZX1BSSU5UIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEPW0KIENPTkZJR19TQ1NJX0FJQzc5WFg9bQogQ09ORklHX0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTQKIENPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZX01TPTE1MDAwCiAjIENPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUlDNzlYWF9ERUJVR19NQVNLPTAKICMgQ09ORklHX0FJQzc5WFhfUkVHX1BSRVRUWV9QUklOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9BUkNNU1I9bQogQ09ORklHX01FR0FSQUlEX05FV0dFTj15CiBDT05GSUdfTUVHQVJBSURfTU09bQogQ09ORklHX01FR0FSQUlEX01BSUxCT1g9bQotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19NRUdBUkFJRF9TQVM9bQotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU49bQogQ09ORklHX1NDU0lfR0RUSD1tCiBDT05GSUdfU0NTSV9JUFM9bQogQ09ORklHX1NDU0lfSU5JVElPPW0KLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9bQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CiBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MD1tCi0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KLSMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19WSVRFU1NFX1BIWT15Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTV9EUklWRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPW0KLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD1tCi0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQotIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1lDTEFERVMgaXMgbm90IHNldAotIyBDT05GSUdfRElHSUVQQ0EgaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9JTlRFTExJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX1NNQVJUSU8gaXMgbm90IHNldAotIyBDT05GSUdfSVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LTVAgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktfR1QgaXMgbm90IHNldAotIyBDT05GSUdfTl9IRExDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAotIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKIENPTkZJR19TRVJJQUxfTVBTQz15CiBDT05GSUdfU0VSSUFMX01QU0NfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09bQogQ09ORklHX0dFTl9SVEM9bQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9ODE5MgotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD1tCi0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049bQotQ09ORklHX0hXTU9OX1ZJRD1tCi0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCiBDT05GSUdfU0VOU09SU19BRE0xMDI1PW0KIENPTkZJR19TRU5TT1JTX0FETTEwMjY9bQotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0FETTEwMzE9bQotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19EUzE2MjE9bQotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0dMNTE4U009bQotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0lUODc9bQotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19MTTc1PW0KIENPTkZJR19TRU5TT1JTX0xNNzc9bQogQ09ORklHX1NFTlNPUlNfTE03OD1tCkBAIC0xMjk1LDIxNyArMjQ2LDUzIEBACiBDT05GSUdfU0VOU09SU19MTTg1PW0KIENPTkZJR19TRU5TT1JTX0xNODc9bQogQ09ORklHX1NFTlNPUlNfTE05MD1tCi0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX01BWDE2MTk9bQotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1NNU0M0N00xPW0KLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3PW0KLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVklBNjg2QT1tCi0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiBDT05GSUdfU0VOU09SU19XODM3ODFEPW0KLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTPW0KLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfU09GVF9XQVRDSERPRz1tCi0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NFg2MF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwogQ09ORklHX1BDSVBDV0FUQ0hET0c9bQogQ09ORklHX1dEVFBDST1tCi0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCiBDT05GSUdfVVNCUENXQVRDSERPRz1tCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEPW0KLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9bQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1VTQl9VSENJX0hDRD1tCi0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9bQogQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQogQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PW0KIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQogQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwogQ09ORklHX1VTQl9NREM4MDA9bQogQ09ORklHX1VTQl9NSUNST1RFSz1tCi0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9FWlVTQj15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCiBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KIENPTkZJR19VU0JfU0VSSUFMX0lSPW0KIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUPW0KIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQpAQCAtMTUyMywyNTYgKzMxMCw2NiBAQAogQ09ORklHX1VTQl9TRVJJQUxfS0xTST1tCiBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQogQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzI9bQotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3NzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PVE9ST0xBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfU0FGRT1tCiBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRD15Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQogQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklWT1BBWV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwogQ09ORklHX1VTQl9FTUk2Mj1tCi0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUklPNTAwPW0KIENPTkZJR19VU0JfTEVHT1RPV0VSPW0KIENPTkZJR19VU0JfTENEPW0KIENPTkZJR19VU0JfTEVEPW0KLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FUTT1tCiBDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQotIyBDT05GSUdfVVNCX0NYQUNSVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVUVBR0xFQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YVVNCQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1M9bQotQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU09eQotQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCi1DT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CiBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMD1tCi0jIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTT15Ci1DT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfU1JQPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfRE1BREVWSUNFUz15Ci0jIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRGV2aWNlcwotIwotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9bQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9bQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPW0KLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKIENPTkZJR19RVU9UQT15Ci0jIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15Ci1DT05GSUdfUVVPVEFfVFJFRT15Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9bQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogQ09ORklHX1ZYRlNfRlM9bQotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfU1VOUlBDX1hQUlRfUkRNQT1tCi1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19VUENBTEwgaXMgbm90IHNldAogQ09ORklHX0NJRlNfWEFUVFI9eQogQ09ORklHX0NJRlNfUE9TSVg9eQotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERlNfVVBDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfT1NGX1BBUlRJVElPTj15Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQogQ09ORklHX0JTRF9ESVNLTEFCRUw9eQogQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CiBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU0dJX1BBUlRJVElPTj15Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19TVU5fUEFSVElUSU9OPXkKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtMTgxMiwyNjEgKzQwOSw0MiBAQAogQ09ORklHX05MU19JU084ODU5XzE1PW0KIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj1tCiBDT05GSUdfQ1JDX1QxMERJRj1tCi1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fREVDT01QUkVTUz15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0NIRUNLX1NJR05BVFVSRT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0hJR0hNRU09eQotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKIENPTkZJR19CT09UWF9URVhUPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwogQ09ORklHX0tFWVM9eQogQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTPXkKIENPTkZJR19TRUNVUklUWT15Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKIENPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKLSMgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKLUNPTkZJR19MU01fTU1BUF9NSU5fQUREUj02NTUzNgogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVg9eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNPXkKLUNPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTV9WQUxVRT0xCiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ESVNBQkxFPXkKLUNPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RFVkVMT1A9eQotQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQVZDX1NUQVRTPXkKLUNPTkZJR19TRUNVUklUWV9TRUxJTlVYX0NIRUNLUkVRUFJPVF9WQUxVRT0xCi0jIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX1BPTElDWURCX1ZFUlNJT05fTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYPXkKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUMgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9InNlbGludXgiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCi1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPXkKIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fVEVBPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCA5NDMzNzE5Li4yMmE0MDNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtMSw0MjggKzEsODcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKLSMgVGh1IE1hciAyMCAxMDozMTowNCAyMDA4Ci0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QT1dFUjRfT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfUE9XRVIzPXkKLUNPTkZJR19QT1dFUjQ9eQogQ09ORklHX1RVTkVfQ0VMTD15Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19NTV9TTElDRVM9eQotQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00Ci1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUl9NTUlPPXkKLUNPTkZJR19QUENfRENSPXkKLUNPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfQ0dST1VQUz15Ci0jIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKIENPTkZJR19DUFVTRVRTPXkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotQ09ORklHX1BST0NfUElEX0NQVVNFVD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT1tCi1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BBU0VNSSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NFTExFQj15CiBDT05GSUdfUFBDX1BTMz15Ci0KLSMKLSMgUFMzIFBsYXRmb3JtIE9wdGlvbnMKLSMKLSMgQ09ORklHX1BTM19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFMzX0hUQUJfU0laRT0yMAotIyBDT05GSUdfUFMzX0RZTkFNSUNfRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19QUzNfVlVBUlQ9eQotQ09ORklHX1BTM19QUzNBVj15Ci1DT05GSUdfUFMzX1NZU19NQU5BR0VSPXkKLUNPTkZJR19QUzNfU1RPUkFHRT15CiBDT05GSUdfUFMzX0RJU0s9eQogQ09ORklHX1BTM19ST009bQogQ09ORklHX1BTM19GTEFTSD1tCiBDT05GSUdfUFMzX0xQTT1tCi1DT05GSUdfUFBDX0NFTEw9eQotQ09ORklHX1BQQ19DRUxMX05BVElWRT15CiBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFPXkKLQotIwotIyBDZWxsIEJyb2FkYmFuZCBFbmdpbmUgb3B0aW9ucwotIwotQ09ORklHX1NQVV9GUz1tCi1DT05GSUdfU1BVX0JBU0U9eQotQ09ORklHX0NCRV9SQVM9eQotQ09ORklHX0NCRV9USEVSTT1tCi1DT05GSUdfQ0JFX0NQVUZSRVE9bQotQ09ORklHX0NCRV9DUFVGUkVRX1BNST1tCi1DT05GSUdfT1BST0ZJTEVfQ0VMTD15Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotQ09ORklHX1VEQkdfUlRBU19DT05TT0xFPXkKLUNPTkZJR19QUENfVURCR19CRUFUPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1JUQVM9eQotIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19SVEFTX1BST0M9eQorQ09ORklHX1BQQ19DRUxMRUI9eQogQ09ORklHX1JUQVNfRkxBU0g9eQotQ09ORklHX1BQQ19QTUk9bQotQ09ORklHX01NSU9fTlZSQU09eQotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX0lPPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKIENPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT15Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCi0jCi1DT05GSUdfQVhPTl9SQU09bQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05Ci1DT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQotIyBDT05GSUdfSU9NTVVfVk1FUkdFIGlzIG5vdCBzZXQKLUNPTkZJR19JT01NVV9IRUxQRVI9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX05VTUE9eQotQ09ORklHX05PREVTX1NISUZUPTQKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQotQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKLUNPTkZJR19NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQotQ09ORklHX05PREVTX1NQQU5fT1RIRVJfTk9ERVM9eQotQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQogQ09ORklHX1BQQ182NEtfUEFHRVM9eQotIyBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCBpcyBub3Qgc2V0CiBDT05GSUdfU0NIRURfU01UPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15Ci1DT05GSUdfUENJRUFFUj15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CiBDT05GSUdfTkVUX0lQSVA9eQotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0xSTz15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAogQ09ORklHX0lORVQ2X0FIPW0KIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCi0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjZfU0lUIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2X1RVTk5FTD1tCi0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCkBAIC00MzMsMTggKzkyLDEyIEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQotQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9FQ049bQotQ09ORklHX0lQX05GX01BVENIX0FIPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCkBAIC00NTYsOTQ0ICsxMDksMTExIEBACiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotQ09ORklHX0JMS19ERVZfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURJU0s9eQotQ09ORklHX0lERURJU0tfTVVMVElfTU9ERT15Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogQ09ORklHX0JMS19ERVZfQUVDNjJYWD15Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU0lJTUFHRT15Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9DRUxMRUI9eQotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9bQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NBU19BVFRSUz15Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUFJPTUlTRT15Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9QREMyMDI3WD1tCi0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQogQ09ORklHX01EX0xJTkVBUj1tCiBDT05GSUdfTURfUkFJRDA9bQogQ09ORklHX01EX1JBSUQxPW0KLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09bQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQotIyBDT05GSUdfRE1fTVVMVElQQVRIX0VNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEhfUkRBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEhfSFAgaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKIENPTkZJR19GVVNJT049eQotIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAogQ09ORklHX0ZVU0lPTl9TQVM9eQotQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAotIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiBDT05GSUdfQk9ORElORz1tCiBDT05GSUdfTUFDVkxBTj1tCi0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj15Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1RBSD15Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9bQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRV9FTkFCTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogQ09ORklHX1NLR0U9bQotIyBDT05GSUdfU0tHRV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfU0tZMj1tCi0jIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiBDT05GSUdfU1BJREVSX05FVD15CiBDT05GSUdfR0VMSUNfTkVUPW0KIENPTkZJR19HRUxJQ19XSVJFTEVTUz15Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBU0VNSV9NQUMgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKLSMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NZQ0xBREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfSU5URUxMSU8gaXMgbm90IHNldAotIyBDT05GSUdfTU9YQV9TTUFSVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTkNMSU5LX0dUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05fSERMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBTERSViBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1RYWDk9eQotQ09ORklHX0hBU19UWFg5X1NFUklBTD15CiBDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci1DT05GSUdfSFZDX0RSSVZFUj15CiBDT05GSUdfSFZDX1JUQVM9eQogQ09ORklHX0hWQ19CRUFUPXkKIENPTkZJR19JUE1JX0hBTkRMRVI9bQotIyBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBNSV9ERVZJQ0VfSU5URVJGQUNFPW0KIENPTkZJR19JUE1JX1NJPW0KIENPTkZJR19JUE1JX1dBVENIRE9HPW0KIENPTkZJR19JUE1JX1BPV0VST0ZGPW0KICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPR19SVEFTIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKK0NPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15CiAjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01PTj15Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQ9bQogQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1M9bQotQ09ORklHX0lORklOSUJBTkRfVVNFUl9NRU09eQotQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCi1DT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EX05FUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0NNIGlzIG5vdCBzZXQKLUNPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEE9eQotIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORF9JU0VSIGlzIG5vdCBzZXQKIENPTkZJR19FREFDPXkKLQotIwotIyBSZXBvcnRpbmcgc3Vic3lzdGVtcwotIwotIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX0NFTEw9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKIENPTkZJR19VSU89bQotIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCi0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKLUNPTkZJR19IVUdFVExCX1BBR0U9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19FRklfUEFSVElUSU9OPXkKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMj1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkBAIC0xNDA1LDEzMyArMjI1LDE0IEBACiBDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQogQ09ORklHX05MU19JU084ODU5XzE0PW0KIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCi0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdHRVI9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15Ci1DT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUTz15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9bQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotQ09ORklHX0NSWVBUT19DQkM9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPW0KLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCi0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZwppbmRleCA2YmU2YzA5Li44OTU0NDllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKQEAgLTEsMTE5OSArMSwxMjQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNS1yYzYKLSMgVGh1IE1hciAyMCAxMDozMjo0NSAyMDA4Ci0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QT1dFUjRfT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfUE9XRVIzPXkKLUNPTkZJR19QT1dFUjQ9eQogQ09ORklHX1RVTkVfQ0VMTD15Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19NTV9TTElDRVM9eQotQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00Ci1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX1BQQ19NRVJHRT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRENSX01NSU89eQotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0k9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkFNRVNQQUNFUz15Ci0jIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAotIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotQ09ORklHX0JMT0NLX0NPTVBBVD15Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMnggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUxMjEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAogQ09ORklHX1BQQ19DRUxMRUI9eQotIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NFTEw9eQotQ09ORklHX1BQQ19DRUxMX05BVElWRT15Ci0jIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAotCi0jCi0jIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zCi0jCiBDT05GSUdfU1BVX0ZTPXkKLUNPTkZJR19TUFVfRlNfNjRLX0xTPXkKLUNPTkZJR19TUFVfQkFTRT15Ci1DT05GSUdfQ0JFX1JBUz15CiAjIENPTkZJR19DQkVfVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkFUSVZFPXkKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15Ci1DT05GSUdfUFBDX1VEQkdfQkVBVD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1UzX0RBUlQgaXMgbm90IHNldAotQ09ORklHX1BQQ19SVEFTPXkKLSMgQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEFTX1BST0MgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSU5ESVJFQ1RfSU89eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLSMgQ09ORklHX0lPTU1VX1ZNRVJHRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU9NTVVfSEVMUEVSPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKIENPTkZJR19OVU1BPXkKLUNPTkZJR19OT0RFU19TSElGVD00Ci1DT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLSMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQotQ09ORklHX1NQQVJTRU1FTT15Ci1DT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15Ci1DT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15Ci0jIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQotQ09ORklHX05PREVTX1NQQU5fT1RIRVJfTk9ERVM9eQotQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAwMDAwMDAwMAotCi0jCi0jIE5ldHdvcmtpbmcKLSMKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotQ09ORklHX0lORVRfTFJPPXkKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwogQ09ORklHX0lQX05GX1FVRVVFPW0KLSMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX0lQNl9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDZfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQogQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9DRUxMRUI9eQotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD1tCi0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj1tCi0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQogQ09ORklHX01EX0xJTkVBUj1tCiBDT05GSUdfTURfUkFJRDA9bQogQ09ORklHX01EX1JBSUQxPW0KLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09bQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQotIyBDT05GSUdfRE1fTVVMVElQQVRIX0VNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEhfUkRBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEhfSFAgaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQyBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX1pNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JST15Ci1DT05GSUdfSUJNX05FV19FTUFDX1RBSD15Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX1NQSURFUl9ORVQ9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVNFTUlfTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15Ci0jIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAotIyBDT05GSUdfUk9DS0VUUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DWUNMQURFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESUdJRVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0kgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTksgaXMgbm90IHNldAotIyBDT05GSUdfU1lOQ0xJTktNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5DTElOS19HVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OX0hETEMgaXMgbm90IHNldAotIyBDT05GSUdfUklTQ09NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEVDSUFMSVggaXMgbm90IHNldAotIyBDT05GSUdfU1ggaXMgbm90IHNldAotIyBDT05GSUdfUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUxEUlYgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX1RYWDk9eQotQ09ORklHX0hBU19UWFg5X1NFUklBTD15CiBDT05GSUdfU0VSSUFMX1RYWDlfTlJfVUFSVFM9MwogQ09ORklHX1NFUklBTF9UWFg5X0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RYWDlfU1REU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19IVkNfRFJJVkVSPXkKIENPTkZJR19IVkNfUlRBUz15CiBDT05GSUdfSFZDX0JFQVQ9eQotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotQ09ORklHX0kyQ19BTEdPQklUPXkKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPR19SVEFTIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15Ci0jIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotIwotQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD1tCitDT05GSUdfVVNCX1NUT1JBR0U9bQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQogQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19FWFQyX0ZTX1hJUD15Ci1DT05GSUdfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15Ci1DT05GSUdfSFVHRVRMQl9QQUdFPXkKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9bQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15CiBDT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX0xPQ0tEPW0KLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD1tCi1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPW0KLSMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfRUZJX1BBUlRJVElPTj15Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9bQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19JU084ODU5XzI9bQogQ09ORklHX05MU19JU084ODU5XzM9bQpAQCAtMTIwNSwxMjkgKzEzMCwzMyBAQAogQ09ORklHX05MU19JU084ODU5XzEzPW0KIENPTkZJR19OTFNfSVNPODg1OV8xND1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiBDT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9bQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR0dFUj15CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fVEVTVD1tCitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCi0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV1A1MTI9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fVEVTVD1tCi1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKaW5kZXggMmZkYWI2Ni4uYjIwNTU0ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCkBAIC0xLDc0OCArMSw3NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMwotIyBUdWUgTm92IDExIDE5OjM1OjM3IDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKLUNPTkZJR19OUl9DUFVTPTQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci1DT05GSUdfQ0xBU1NJQzMyPXkKLUNPTkZJR19QUENfQ0hSUD15Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05BVElWRT15Ci0jIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci1DT05GSUdfUFBDX1JUQVM9eQotIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19SVEFTX1BST0M9eQotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzEwNj15Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwogQ09ORklHX0lTQT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCi1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW0KLUNPTkZJR19ORl9DT05OVFJBQ0s9bQotQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQotQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci1DT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX0ZJTFRFUj1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiAjIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfTkFUPW0KLUNPTkZJR19ORl9OQVRfTkVFREVEPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi0jIENPTkZJR19ORl9OQVRfVEZUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfQU1BTkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX05BVF9QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9OQVRfU0lQPW0KICMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0ZEPXkKLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9USU1JTkdTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNT15Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUhBMTU0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0VORVJJQ19OQ1I1MzgwX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OQ1I1M0M0MDZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCi1DT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKLSMgQ09ORklHX1NDU0lfUEFTMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDNDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVFVMSVA9eQotIyBDT05GSUdfREUyMTA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVUxJUCBpcyBub3Qgc2V0CiBDT05GSUdfREU0WDU9eQotIyBDT05GSUdfV0lOQk9ORF84NDAgaXMgbm90IHNldAotIyBDT05GSUdfRE05MTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMSTUyNlggaXMgbm90IHNldAotIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDMzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFJJQ09UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAogQ09ORklHXzgxMzlDUD15CiBDT05GSUdfODEzOVRPTz15CiAjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAotIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiBDT05GSUdfVklBX1JISU5FPXkKLSMgQ09ORklHX1ZJQV9SSElORV9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiBDT05GSUdfTVY2NDNYWF9FVEg9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKIENPTkZJR19QUFBfRklMVEVSPXkKQEAgLTc1Miw4NjUgKzc5LDY5IEBACiBDT05GSUdfUFBQX0JTRENPTVA9bQogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01JU0M9eQotIyBDT05GSUdfSU5QVVRfUENTUEtSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1VJTlBVVD15Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19CUklRX1BBTkVMPW0KLSMgQ09ORklHX0hWQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfSFlEUkEgaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotCi0jCi0jIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycwotIwotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotQ09ORklHX0ZCX0REQz15Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTUFDTU9ERVM9eQotQ09ORklHX0ZCX0JBQ0tMSUdIVD15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT0Y9eQotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTUFUUk9YPXkKIENPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQogQ09ORklHX0ZCX01BVFJPWF9HPXkKLSMgQ09ORklHX0ZCX01BVFJPWF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogQ09ORklHX0ZCX0FUWT15CiBDT05GSUdfRkJfQVRZX0NUPXkKLSMgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRZX0dYPXkKLUNPTkZJR19GQl9BVFlfQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogQ09ORklHX0ZCXzNERlg9eQotIyBDT05GSUdfRkJfM0RGWF9BQ0NFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKLUNPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9bQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQlJJR0hUPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9ERUxMPXkKLUNPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9HWVJBVElPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0pCRDI9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKLSMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19ERUJVR0dFUj15Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPW0KLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0hBU0g9bQotQ09ORklHX0NSWVBUT19STkc9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz1tCi0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCmluZGV4IDZiNzA4MzkuLjI2NzdiMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC0xLDEyMDYgKzEsODggQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjoyNCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLSMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAogQ09ORklHX1BQQ184Mnh4PXkKLSMgQ09ORklHX01QQzgyNzJfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAogQ09ORklHX0VQODI0OEU9eQotIyBDT05GSUdfTUdDT0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfODI2MD15Ci1DT05GSUdfODI3Mj15Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSV84MjYwPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX01ESU9fQklUQkFORz15Ci0jIENPTkZJR19NRElPX0dQSU8gaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15Ci0jIENPTkZJR19GU19FTkVUX01ESU9fRkNDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9QUV9NRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NQTT15CiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVEVDVF9IVU5HX1RBU0sgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19CRElfU1dJVENIPXkKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKaW5kZXggMWNlZTg4OS4uZjlhMzExMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCkBAIC0xLDkzMSArMSw3NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjI0IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzh4eD15Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzh4eD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19CQVNFX1NNQUxMPTEKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0xPXkKLSMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0VQODhYQz15Ci0jIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01HU1VWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTVBDOHh4IENQTSBPcHRpb25zCi0jCi0KLSMKLSMgR2VuZXJpYyBNUEM4eHggT3B0aW9ucwotIwogQ09ORklHXzh4eF9DT1BZQkFDSz15Ci0jIENPTkZJR184eHhfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184eHhfQ1BVNiBpcyBub3Qgc2V0Ci1DT05GSUdfOHh4X0NQVTE1PXkKLUNPTkZJR19OT19VQ09ERV9QQVRDSD15Ci0jIENPTkZJR19VU0JfU09GX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19IWl8xMDA9eQotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9RU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfQ0ZJX0ZMQUdBRE0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfTFhUX1BIWT15Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15Ci1DT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci0jIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwppbmRleCA1N2QzZmZhLi4xMTk2YzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCkBAIC0xLDcwOCArMSw5OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMwotIyBUdWUgTm92IDExIDE5OjM2OjMwIDIwMDgKLSMKIENPTkZJR19QUEM2ND15Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKIENPTkZJR19QT1dFUjRfT05MWT15Ci1DT05GSUdfUE9XRVI0PXkKLSMgQ09ORklHX1RVTkVfQ0VMTCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15Ci0jIENPTkZJR19WU1ggaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfTU1fU0xJQ0VTPXkKLUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAotQ09ORklHXzY0QklUPXkKLUNPTkZJR19XT1JEX1NJWkU9NjQKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DT01QQVQ9eQotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0hJQkVSTkFURV82ND15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01TSV9CSVRNQVA9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQotQ09ORklHX1BQQ19QTUFDNjQ9eQotIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMRUIgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkFUSVZFPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotQ09ORklHX1UzX0RBUlQ9eQotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQ19VM19IVF9JUlFTPXkKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotQ09ORklHX1BQQ185NzBfTkFQPXkKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKLSMKIENPTkZJR19DUFVfRlJFUV9QTUFDNjQ9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19DT01QQVRfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLUNPTkZJR19JT01NVV9WTUVSR0U9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci0jIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLSMgQ09ORklHX05VTUEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19BUkNIX1dBTlRTX0ZSRUVaRVJfQ09OVFJPTD15Ci0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogQ09ORklHX1BDSV9NU0k9eQotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD15Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci0jIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORl9DVF9ORVRMSU5LPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPXkKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQotQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX1RJTUlOR1M9eQotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKLUNPTkZJR19CTEtfREVWX0lERURNQV9QTUFDPXkKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15CiBDT05GSUdfU0FUQV9TVlc9eQotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD1tCi0jIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFMTM5ND15CiBDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9eQotIyBDT05GSUdfSUVFRTEzOTRfUENJTFlOWCBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfU0JQMj1tCi1DT05GSUdfSUVFRTEzOTRfRVRIMTM5NF9ST01fRU5UUlk9eQogQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1JBV0lPPXkKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCi0jIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CiBDT05GSUdfQURCX1BNVT15Ci0jIENPTkZJR19BREJfUE1VX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19TTVU9eQogQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CiBDT05GSUdfVEhFUk1fUE03Mj15CkBAIC03MTEsNjg0ICsxMDIsMTAyIEBACiBDT05GSUdfV0lOREZBUk1fUE05MT15CiBDT05GSUdfV0lOREZBUk1fUE0xMTI9eQogQ09ORklHX1dJTkRGQVJNX1BNMTIxPXkKLSMgQ09ORklHX1BNQUNfUkFDS01FVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCi0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKIENPTkZJR19TVU5HRU09eQotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1PTCBpcyBub3Qgc2V0Ci0jIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwogQ09ORklHX1VTQl9DQVRDPW0KIENPTkZJR19VU0JfS0FXRVRIPW0KIENPTkZJR19VU0JfUEVHQVNVUz1tCiBDT05GSUdfVVNCX1JUTDgxNTA9bQogQ09ORklHX1VTQl9VU0JORVQ9bQogIyBDT05GSUdfVVNCX05FVF9BWDg4MTdYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KLSMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9aQVVSVVMgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz1tCiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogQ09ORklHX1BQUE9FPW0KLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiBDT05GSUdfSU5QVVRfSk9ZREVWPW0KIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogQ09ORklHX1JBV19EUklWRVI9eQotQ09ORklHX01BWF9SQVdfREVWUz0yNTYKLSMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFjIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi1DT05GSUdfSTJDX1BPV0VSTUFDPXkKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCiBDT05GSUdfQUdQPW0KIENPTkZJR19BR1BfVU5JTk9SVEg9bQotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FTVEFURT15CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQl9EREM9eQotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9CQUNLTElHSFQ9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogQ09ORklHX0ZCX09GPXkKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9OVklESUE9eQogQ09ORklHX0ZCX05WSURJQV9JMkM9eQotIyBDT05GSUdfRkJfTlZJRElBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9OVklESUFfQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQotQ09ORklHX0ZCX1JBREVPTl9JMkM9eQotQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQotIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPW0KLUNPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU05EPW0KLUNPTkZJR19TTkRfVElNRVI9bQotQ09ORklHX1NORF9QQ009bQotQ09ORklHX1NORF9IV0RFUD1tCi1DT05GSUdfU05EX1JBV01JREk9bQogQ09ORklHX1NORF9TRVFVRU5DRVI9bQotIyBDT05GSUdfU05EX1NFUV9EVU1NWSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKIENPTkZJR19TTkRfUE9XRVJNQUM9bQotQ09ORklHX1NORF9QT1dFUk1BQ19BVVRPX0RSQz15CiBDT05GSUdfU05EX0FPQT1tCiBDT05GSUdfU05EX0FPQV9GQUJSSUNfTEFZT1VUPW0KIENPTkZJR19TTkRfQU9BX09OWVg9bQogQ09ORklHX1NORF9BT0FfVEFTPW0KIENPTkZJR19TTkRfQU9BX1RPT05JRT1tCi1DT05GSUdfU05EX0FPQV9TT1VOREJVUz1tCi1DT05GSUdfU05EX0FPQV9TT1VOREJVU19JMlM9bQotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89bQotIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKIENPTkZJR19ISURfUElEPXkKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQlJJR0hUPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9ERUxMPXkKLUNPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9HWVJBVElPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKIENPTkZJR19MT0dJVEVDSF9GRj15Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci1DT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPXkKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9bQotQ09ORklHX1VTQl9FWlVTQj15CiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KIENPTkZJR19VU0JfU0VSSUFMX0lSPW0KQEAgLTEzOTYsNyArMjA1LDYgQEAKIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUFc9bQotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUj15CkBAIC0xNDE0LDQ0NSArMjIyLDg4IEBACiBDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCiBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCi0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQ9eQotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9UST1tCiBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQogQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDJfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19GU19YSVA9eQotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9eQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CiBDT05GSUdfUkVJU0VSRlNfRlM9eQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19YRlNfRlM9bQotIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlNfRlM9bQotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19IRlNfRlM9bQogQ09ORklHX0hGU1BMVVNfRlM9bQotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YyX0FDTD15Ci1DT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTA9eQogQ09ORklHX05MU19DT0RFUEFHRV8xMjUxPXkKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLUNPTkZJR19TQ0hFRFNUQVRTPXkKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHPXkKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFhfVEVYVD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19STkc9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX05VTEw9bQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KLQotIwotIyBDaXBoZXJzCi0jCiBDT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fVEVBPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nYW1lY3ViZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nYW1lY3ViZV9kZWZjb25maWcKaW5kZXggMWMyZGJmMC4uZmNmMGEzOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZ2FtZWN1YmVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZwpAQCAtMSwxMDYwICsxLDExNCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjOAotIyBTdW4gTm92IDIyIDIxOjA3OjMwIDIwMDkKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotQ09ORklHX1BQQ19QRVJGX0NUUlM9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii1nY24iCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19FVkVOVF9QUk9GSUxFPXkKIENPTkZJR19QRVJGX0NPVU5URVJTPXkKLSMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKLSMgQ09ORklHX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUT1JDRU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNzQ0OEhQQzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0hPTExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QUlBNQzI4MDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0MySyBpcyBub3Qgc2V0Ci1DT05GSUdfR0FNRUNVQkVfQ09NTU9OPXkKLUNPTkZJR19VU0JHRUNLT19VREJHPXkKLUNPTkZJR19GTElQUEVSX1BJQz15CiBDT05GSUdfR0FNRUNVQkU9eQotIyBDT05GSUdfV0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfS0VYRUM9eQotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCiBDT05GSUdfQURWQU5DRURfT1BUSU9OUz15Ci0jIENPTkZJR19MT1dNRU1fU0laRV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi0jIENPTkZJR19QQUdFX09GRlNFVF9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi0jIENPTkZJR19LRVJORUxfU1RBUlRfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi0jIENPTkZJR19UQVNLX1NJWkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKLSMgQ09ORklHX0NPTlNJU1RFTlRfU0laRV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9KT1lERVY9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9KT1lTVElDSz15Ci0jIENPTkZJR19KT1lTVElDS19BTkFMT0cgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfQTNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0FESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19DT0JSQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HRjJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dSSVAgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfR1JJUF9NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HVUlMTEVNT1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfSU5URVJBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfU0lERVdJTkRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19UTURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0lGT1JDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX01BR0VMTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NQQUNFQkFMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19TVElOR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1RXSURKT1kgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfWkhFTkhVQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19KT1lEVU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRT15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSPXkKLSMgQ09ORklHX1NORF9TRVFfRFVNTVkgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPXkKIENPTkZJR19TTkRfUENNX09TUz15Ci1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQotIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKICMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BQQz15Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9HRU5FUklDPXkKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15CiAjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPXkKLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5BUllfUFJJTlRGPXkKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NIRURfREVCVUc9eQotQ09ORklHX1NDSEVEU1RBVFM9eQotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19FVkVOVF9UUkFDSU5HPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX1NDSEVEX1RSQUNFUj15Ci1DT05GSUdfQk9PVF9UUkFDRVI9eQotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRE1BX0FQSV9ERUJVRz15Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfUEFORUwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1BBU19SRUFMTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfQkVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0NQTSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHX1VTQkdFQ0tPPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9ob2xseV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9ob2xseV9kZWZjb25maWcKaW5kZXggYTYwZDYxYi4uYjliNjNhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaG9sbHlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZwpAQCAtMSw5NTAgKzEsNzEgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzQKLSMgVGh1IERlYyAgNiAxNjo0ODoxNyAyMDA3Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR182eHg9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfUFBDX01FUkdFPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQUlSX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0xBU1NJQzMyPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FRklLQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQotIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTVBDNzQ0OEhQQzIgaXMgbm90IHNldAogQ09ORklHX1BQQ19IT0xMWT15Ci0jIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKLUNPTkZJR19UU0kxMDhfQlJJREdFPXkKLUNPTkZJR19NUElDPXkKLUNPTkZJR19NUElDX1dFSVJEPXkKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQTTIgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLUNPTkZJR19ISUJFUk5BVElPTl9VUF9QT1NTSUJMRT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19XQU5UX0RFVklDRV9UUkVFPXkKLUNPTkZJR19ERVZJQ0VfVFJFRT0iaG9sbHkuZHRzIgotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0hJR0hNRU1fU1RBUlQ9MHhmZTAwMDAwMAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQk9PVF9MT0FEPTB4MDA4MDAwMDAKLQotIwotIyBOZXR3b3JraW5nCi0jCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CiBDT05GSUdfVk9SVEVYPXkKLSMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiBDT05GSUdfVFNJMTA4X0VUSD15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBJL08KLSMKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfVUNDX1NMT1cgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLSMgQ09ORklHX0lOU1RSVU1FTlRBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0RFQlVHR0VSPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQotQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKaW5kZXggMTUxYzhlMS4uMjdjNDZkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaXNlcmllc19kZWZjb25maWcKQEAgLTEsNDE0ICsxLDgzIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMzCi0jIFR1ZSBOb3YgMTEgMTk6MzY6MzggMjAwOAotIwogQ09ORklHX1BQQzY0PXkKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUE9XRVI0X09OTFkgaXMgbm90IHNldAotQ09ORklHX1BPV0VSMz15Ci1DT05GSUdfUE9XRVI0PXkKLSMgQ09ORklHX1RVTkVfQ0VMTCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MzIKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfQ09NUEFUPXkKLUNPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQotQ09ORklHX0FVRElUX1RSRUU9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKIENPTkZJR19MUEFSQ0ZHPXkKIENPTkZJR19QUENfSVNFUklFUz15Ci0KLSMKLSMgaVNlcmllcyBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX1ZJT0RBU0Q9eQogQ09ORklHX1ZJT0NEPW0KIENPTkZJR19WSU9UQVBFPW0KLUNPTkZJR19WSU9QQVRIPXkKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19JQk1WSU89eQotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX0lPPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19JT01NVV9WTUVSR0U9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQotIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci0jIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKLSMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQogQ09ORklHX1hGUk1fU1VCX1BPTElDWT15Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19YRlJNX0lQQ09NUD1tCiBDT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0lQSVA9eQotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15Ci0jIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19QUFRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19TSVAgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfREVGUkFHX0lQVjQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KLUNPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQogQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQotIyBDT05GSUdfSVBfTkZfTUFUQ0hfQUggaXMgbm90IHNldAogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQpAQCAtNDE2LDE4ICs4NSw5IEBACiBDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX05GX05BVD1tCi1DT05GSUdfTkZfTkFUX05FRURFRD15CiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi0jIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtNDM2LDg1NyArOTYsMTQxIEBACiBDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9BUlBGSUxURVI9bQogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19MTEM9eQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX05FVExJTks9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TQVNfQVRUUlM9bQogQ09ORklHX1NDU0lfU0FTX0xJQlNBUz1tCi1DT05GSUdfU0NTSV9TQVNfSE9TVF9TTVA9eQotQ09ORklHX1NDU0lfU0FTX0xJQlNBU19ERUJVRz15Ci1DT05GSUdfU0NTSV9TUlBfQVRUUlM9bQotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfSUJNVlNDU0k9bQotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQogQ09ORklHX01EX0xJTkVBUj15CiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQotIyBDT05GSUdfTURfUkFJRDQ1NiBpcyBub3Qgc2V0CiBDT05GSUdfTURfTVVMVElQQVRIPW0KIENPTkZJR19NRF9GQVVMVFk9bQogQ09ORklHX0JMS19ERVZfRE09eQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNX0NSWVBUPW0KIENPTkZJR19ETV9TTkFQU0hPVD1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KLSMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KIENPTkZJR19CT05ESU5HPW0KLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKIENPTkZJR19QQ05FVDMyPXkKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19BQ0VOSUM9bQotIyBDT05GSUdfQUNFTklDX09NSVRfVElHT05fSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD1tCi0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKLSMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19JU0VSSUVTX1ZFVEg9eQotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKIENPTkZJR19ORVRQT0xMX1RSQVA9eQotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT1tCiBDT05GSUdfU0VSSUFMX0lDT009bQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotQ09ORklHX0hWQ19EUklWRVI9eQotQ09ORklHX0hWQ19JUlE9eQotQ09ORklHX0hWQ19JU0VSSUVTPXkKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotQ09ORklHX1ZHQV9DT05TT0xFPXkKLSMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDJfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19GU19YSVA9eQotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9eQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15CiBDT05GSUdfUkVJU0VSRlNfRlM9eQotIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfUFJPQ19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWT15CiBDT05GSUdfSkZTX0ZTPW0KIENPTkZJR19KRlNfUE9TSVhfQUNMPXkKIENPTkZJR19KRlNfU0VDVVJJVFk9eQotIyBDT05GSUdfSkZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfWEZTX0ZTPW0KLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19HRlMyX0ZTPW0KLUNPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0FVVE9GU19GUz1tCi0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQUNMPXkKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMl9BQ0w9eQotQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCi0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKIENPTkZJR19ETE09bQotIyBDT05GSUdfRExNX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19URVhUU0VBUkNIPXkKLUNPTkZJR19URVhUU0VBUkNIX0tNUD1tCi1DT05GSUdfVEVYVFNFQVJDSF9CTT1tCi1DT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLUNPTkZJR19TQ0hFRFNUQVRTPXkKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUc9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19STkc9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX05VTEw9bQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VFRD1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZwppbmRleCA4ZWNhY2Y3Li5mMzlkMGNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCkBAIC0xLDE5NTAgKzEsMTcwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MjUgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi1DT05GSUdfU0xPV19XT1JLPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKIENPTkZJR19MSU5LU1RBVElPTj15Ci0jIENPTkZJR19TVE9SQ0VOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzc0NDhIUEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DMksgaXMgbm90IHNldAotQ09ORklHX01QQzEwWF9CUklER0U9eQotQ09ORklHX01QQzEwWF9PUEVOUElDPXkKLSMgQ09ORklHX01QQzEwWF9TVE9SRV9HQVRIRVJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRUNVQkUgaXMgbm90IHNldAotIyBDT05GSUdfV0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQogQ09ORklHX0haXzEwMD15Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0s9bQotIyBDT05GSUdfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NUX1BST1RPX0RDQ1AgaXMgbm90IHNldAotQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCiBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUD1tCi0jIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQogQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19TQU5FIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCi0jIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9UUFJPWFkgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLSMgQ09ORklHX0lQX05GX01BVENIX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX01BVENIX0VDTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKIENPTkZJR19ORl9OQVQ9bQotQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLSMgQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCi0jIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfTkFUX1BST1RPX0dSRT1tCi1DT05GSUdfTkZfTkFUX1BST1RPX1NDVFA9bQotQ09ORklHX05GX05BVF9GVFA9bQotQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KLUNPTkZJR19ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19ORl9OQVRfUFBUUD1tCi1DT05GSUdfTkZfTkFUX0gzMjM9bQotQ09ORklHX05GX05BVF9TSVA9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCi0jIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KIENPTkZJR19JUF9ORl9SQVc9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9bQotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX0lUODIxWD15Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9TSUw2ODA9eQotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1RVTElQPXkKLSMgQ09ORklHX0RFMjEwNFggaXMgbm90IHNldAogQ09ORklHX1RVTElQPXkKLSMgQ09ORklHX1RVTElQX01XSSBpcyBub3Qgc2V0CiBDT05GSUdfVFVMSVBfTU1JTz15Ci0jIENPTkZJR19UVUxJUF9OQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFNFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogQ09ORklHX1I4MTY5PXkKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1BRX01ESU8gaXMgbm90IHNldAotIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKLSMgQ09ORklHX05FVFBPTExfVFJBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BSSU5URVI9bQotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwogQ09ORklHX1VTQl9TRVJJQUw9eQogQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRT15Ci0jIENPTkZJR19VU0JfRVpVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU89eQotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVVVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVZPUEFZX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzcyPXkKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogQ09ORklHX05URlNfRlM9bQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz1tCi1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAogQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0hBMT1tCi0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPW0KLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCi0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZwppbmRleCBkYzUwZWVjLi4yMjQ0ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCkBAIC0xLDEwODQgKzEsOTcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzMKLSMgVHVlIE5vdiAxMSAxOTozNjo0NSAyMDA4Ci0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCiBDT05GSUdfUE9XRVI0X09OTFk9eQotQ09ORklHX1BPV0VSND15Ci0jIENPTkZJR19UVU5FX0NFTEwgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19NTV9TTElDRVM9eQotQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00Ci1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPW0KLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01TSV9CSVRNQVA9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX01BUExFPXkKLSMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BTMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMRUIgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTkFUSVZFPXkKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLUNPTkZJR19VM19EQVJUPXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19SVEFTX0ZMQVNIIGlzIG5vdCBzZXQKLUNPTkZJR19NTUlPX05WUkFNPXkKLUNPTkZJR19NUElDX1UzX0hUX0lSUVM9eQotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzk3MF9OQVA9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19DT01QQVRfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLUNPTkZJR19JT01NVV9WTUVSR0U9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLSMgQ09ORklHX05VTUEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCi0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiBDT05GSUdfUENJX01TST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX1RJTUlOR1M9eQotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKIENPTkZJR19JREVfVEFTS19JT0NUTD15Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfQU1ENzRYWD15Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0lQUj15Ci1DT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQotQ09ORklHX1NDU0lfSVBSX0RVTVA9eQotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotQ09ORklHX0FUQV9OT05TVEFOREFSRD15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKIENPTkZJR19BTUQ4MTExX0VUSD15Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SNjA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAotIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BFR0FTVVM9eQotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTYwMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEyMDAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci1DT05GSUdfSFZDX0RSSVZFUj15CiBDT05GSUdfSFZDX1JUQVM9eQotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0FNRDgxMTE9eQotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9DT01QQVQ9eQotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0JSSUdIVD15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKLUNPTkZJR19ISURfREVMTD15Ci1DT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfR1lSQVRJT049eQotQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKIENPTkZJR19VU0JfU0VSSUFMPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VaVVNCPXkKIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KLSMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQVz1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU49eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOD15CkBAIC0xMDkyLDQyNSArMTA1LDQxIEBACiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUk9eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVc9eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfVEk9bQotIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTX1hJUD15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0ZTX1hJUD15Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEMj15Ci0jIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0idXRmLTgiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLUNPTkZJR19TQ0hFRFNUQVRTPXkKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRz15Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19ERUJVR0dFUj15Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFhfVEVYVD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19STkc9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwppbmRleCBiMzZlYmI3Li5jNGVkMjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKQEAgLTEsMTI1OCArMSwxMDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjoyNiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi0jIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX1BDU1BLUl9QTEFURk9STT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19DSFJQPXkKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1BNQUM9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15Ci0jIENPTkZJR19NUEM4MjcyX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJGQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQODI0OEUgaXMgbm90IHNldAogQ09ORklHX01HQ09HRT15Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHXzgyNjA9eQotQ09ORklHXzgyNzI9eQotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotQ09ORklHX1BQQ19SVEFTPXkKLUNPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkc9eQotQ09ORklHX1BQQ19SVEFTX0RBRU1PTj15Ci1DT05GSUdfUlRBU19QUk9DPXkKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1BQQ19NUEMxMDY9eQotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUFBDNjAxX1NZTkNfRklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotQ09ORklHX0NQTTI9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi0jIENPTkZJR19JU0EgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lfODI2MD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMS0RFVlM9eQotIyBDT05GSUdfTVREX0JMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DS19STyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDX0ZMT1BQWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLUNPTkZJR19NRElPX0JJVEJBTkc9eQotIyBDT05GSUdfTURJT19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19NQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JNQUMgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKLUNPTkZJR19GU19FTkVUX0hBU19TQ0M9eQotQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9QTUFDWklMT0cgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfQlJJUV9QQU5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5fUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKICMgQ09ORklHX0kyQ19QT1dFUk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0NQTT15Ci0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAotIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQkRJX1NXSVRDSD15Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwogQ09ORklHX0NSWVBUT19DQkM9eQotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCmluZGV4IDBkZDUwMTUuLmYyNzZjN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwpAQCAtMSwxMDE3ICsxLDgxIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MjcgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfOHh4PXkKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfOHh4PXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0xCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0xPXkKLSMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRVA4OFhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19BRERFUjg3NSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX01HU1VWRD15Ci0KLSMKLSMgTVBDOHh4IENQTSBPcHRpb25zCi0jCi0KLSMKLSMgR2VuZXJpYyBNUEM4eHggT3B0aW9ucwotIwogQ09ORklHXzh4eF9DT1BZQkFDSz15Ci0jIENPTkZJR184eHhfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfOHh4X0NQVTY9eQotQ09ORklHXzh4eF9DUFUxNT15Ci0jIENPTkZJR19OT19VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU09GX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0ggaXMgbm90IHNldAogQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSD15Ci1DT05GSUdfVUNPREVfUEFUQ0g9eQotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLUNPTkZJR19DUE09eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLSMgQ09ORklHX1BST0NfREVWSUNFVFJFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9RU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4ODAwMDAwMDAKLUNPTkZJR19DT05TSVNURU5UX1NJWkU9MHgwMDIwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwogQ09ORklHX01URF9DRkk9eQotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9DRklfU1RBQT15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0NGSV9GTEFHQURNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19GSVhFRF9QSFk9eQotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15Ci1DT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX0ZFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19FTkVUX01ESU9fRkVDIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0NQTT15CiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX1RBTElUT1MgaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCmluZGV4IGFhMjY1NGUuLjYyZGI4YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUxMnhfZGVmY29uZmlnCkBAIC0xLDY0MSArMSw3MiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgotIyBGcmkgRmViICA1IDExOjQ4OjI5IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQotQ09ORklHX1JEX0xaTz15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTEyeD15Ci1DT05GSUdfUFBDX01QQzUxMjE9eQogQ09ORklHX01QQzUxMjFfQURTPXkKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLUNPTkZJR19JUElDPXkKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiAjIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogQ09ORklHX0NBTj15CiBDT05GSUdfQ0FOX1JBVz15CiBDT05GSUdfQ0FOX0JDTT15Ci0KLSMKLSMgQ0FOIERldmljZSBEcml2ZXJzCi0jCiBDT05GSUdfQ0FOX1ZDQU49eQogQ09ORklHX0NBTl9ERVY9eQotIyBDT05GSUdfQ0FOX0NBTENfQklUVElNSU5HIGlzIG5vdCBzZXQKIENPTkZJR19DQU5fTVNDQU49eQotIyBDT05GSUdfQ0FOX1NKQTEwMDAgaXMgbm90IHNldAotCi0jCi0jIENBTiBVU0IgaW50ZXJmYWNlcwotIwotIyBDT05GSUdfQ0FOX0VNU19VU0IgaXMgbm90IHNldAogQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTPXkKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JPTT15Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX01QQzUxMjFfTkZDPXkKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPXkKLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgogQ09ORklHX0JMS19ERVZfWElQPXkKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwogQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTUFSVkVMTF9QSFk9eQogQ09ORklHX0RBVklDT01fUEhZPXkKIENPTkZJR19RU0VNSV9QSFk9eQpAQCAtNjUyLDEwNDIgKzgzLDU0IEBACiBDT05GSUdfRklYRURfUEhZPXkKIENPTkZJR19NRElPX0JJVEJBTkc9eQogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKLUNPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDPXkKLUNPTkZJR19GU19FTkVUX0hBU19GRUM9eQotQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15Ci0jIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX01QQzUyeHg9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwogQ09ORklHX1ZJREVPX0RFVj15Ci1DT05GSUdfVklERU9fVjRMMl9DT01NT049eQogIyBDT05GSUdfVklERU9fQUxMT1dfVjRMMSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX01FRElBPXkKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19JUl9DT1JFPXkKLUNPTkZJR19WSURFT19JUj15Ci0jIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPXkKLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0Ci1DT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKLUNPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKLUNPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPXkKLUNPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PXkKLUNPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9eQotQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD15Ci1DT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPXkKLUNPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz15Ci1DT05GSUdfVklERU9fVjRMMj15Ci1DT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKIENPTkZJR19WSURFT19BRFZfREVCVUc9eQotIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX0hFTFBFUl9DSElQU19BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19JUl9JMkM9eQotCi0jCi0jIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKLSMKLQotIwotIyBBdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkRTIGRlY29kZXJzCi0jCi0jIENPTkZJR19WSURFT19TQUE2NTg4IGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fQURWNzE4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDgxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19LUzAxMjcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01UOVYwMTEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVENNODI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19TQUE3MTEwIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19TQUE3MTFYPXkKLSMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVFZQNTE0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAotCi0jCi0jIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTVBFRyB2aWRlbyBlbmNvZGVycwotIwotIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW8gZW5jb2RlcnMKLSMKLSMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNzE4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVEhTNzMwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19BRFY3MzQzIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbyBpbXByb3ZlbWVudCBjaGlwcwotIwotIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBIGlzIG5vdCBzZXQKLUNPTkZJR19WNExfVVNCX0RSSVZFUlM9eQotIyBDT05GSUdfVVNCX1ZJREVPX0NMQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQotQ09ORklHX1VTQl9HU1BDQT1tCi0jIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NROTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNUMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVDYxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9WQzAzMlggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1pDM1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1BWUlVTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fSERQVlIgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fRU0yOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0NYMjMxWFggaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkMwMzAxIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKLUNPTkZJR19SQURJT19BREFQVEVSUz15Ci0jIENPTkZJR19JMkNfU0k0NzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NJNDcxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fVEVGNjg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9GU0xfRElVPXkKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQotIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQTRURUNIPXkKLUNPTkZJR19ISURfQVBQTEU9eQotQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9DSEVSUlk9eQotQ09ORklHX0hJRF9DSElDT05ZPXkKLUNPTkZJR19ISURfQ1lQUkVTUz15Ci1DT05GSUdfSElEX0RSQUdPTlJJU0U9eQotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0VaS0VZPXkKLUNPTkZJR19ISURfS1lFPXkKLUNPTkZJR19ISURfR1lSQVRJT049eQotQ09ORklHX0hJRF9UV0lOSEFOPXkKLUNPTkZJR19ISURfS0VOU0lOR1RPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQotQ09ORklHX0hJRF9OVFJJRz15Ci1DT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfUEVUQUxZTlg9eQotQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15Ci1DT05GSUdfSElEX1NVTlBMVVM9eQotQ09ORklHX0hJRF9HUkVFTkFTSUE9eQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKLSMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1RPUFNFRUQ9eQotQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfWkVST1BMVVM9eQotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLSMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9ERVNDPXkKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfRlNMPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKLUNPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX000MVQ4MD15Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTVBDNTEyMT15CiBDT05GSUdfRE1BREVWSUNFUz15Ci0KLSMKLSMgRE1BIERldmljZXMKLSMKLSMgQ09ORklHX0ZTTF9ETUEgaXMgbm90IHNldAogQ09ORklHX01QQzUxMlhfRE1BPXkKLUNPTkZJR19ETUFfRU5HSU5FPXkKLQotIwotIyBETUEgQ2xpZW50cwotIwotIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GU19YSVA9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfWElQPXkKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLSMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9eQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj15Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19MWk89eQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwppbmRleCBmODc1ZWMyLi43Mzc2ZTI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZwpAQCAtMSwyMjggKzEsMTIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgV2VkIE1hciAxMCAxNDozODo1NCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotQ09ORklHX0ZSRUVaRVI9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX01QQzUyeHg9eQogQ09ORklHX1BQQ19NUEM1MjAwX1NJTVBMRT15CiBDT05GSUdfUFBDX0VGSUtBPXkKQEAgLTIzMiwxNzUyICsxNiwxMjEgQEAKIENPTkZJR19QUENfTVBDNTIwMF9HUElPPXkKIENPTkZJR19QUENfTVBDNTIwMF9MUEJGSUZPPW0KICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVNfREFFTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19SVEFTX1BST0M9eQotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JFU1RDT01NPXkKLUNPTkZJR19QUENfQkVTVENPTU1fQVRBPXkKLUNPTkZJR19QUENfQkVTVENPTU1fRkVDPXkKLUNPTkZJR19QUENfQkVTVENPTU1fR0VOX0JEPW0KIENPTkZJR19TSU1QTEVfR1BJTz15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAotQ09ORklHX1BNX09QUz15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKIENPTkZJR19NVERfUkFNPXkKIENPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKIENPTkZJR19NVERfVUJJPW0KLUNPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2Ci1DT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCi0jIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX1NQST15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKIENPTkZJR19FRVBST01fQVQyND15Ci0jIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKIENPTkZJR19TQ1NJX1RHVD15Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9NUEM1Mnh4PXkKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQotIyBDT05GSUdfUEFUQV9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogQ09ORklHX0xYVF9QSFk9eQotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLSMgQ09ORklHX01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15Ci1DT05GSUdfRkVDX01QQzUyeHhfTURJTz15Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX01BWDMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX01QQzUyeHg9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BJPXkKLSMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BJX01BU1RFUj15Ci0KLSMKLSMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKLSMKLUNPTkZJR19TUElfQklUQkFORz1tCiBDT05GSUdfU1BJX0dQSU89bQogQ09ORklHX1NQSV9NUEM1Mnh4PW0KIENPTkZJR19TUElfTVBDNTJ4eF9QU0M9bQotIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFByb3RvY29sIE1hc3RlcnMKLSMKIENPTkZJR19TUElfU1BJREVWPW0KLSMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMDAgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0Ci0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT049eQotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BWDYzWFhfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUyMDBfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HX1JUQVMgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAotIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CiBDT05GSUdfRFJNPXkKLSMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9EREM9eQotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9CQUNLTElHSFQ9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCi0jIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQogQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci1DT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfVFdJTkhBTj15Ci1DT05GSUdfSElEX0tFTlNJTkdUT049eQotQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKIENPTkZJR19ISURfT1JURUs9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15Ci0jIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9HUkVFTkFTSUE9eQotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKLSMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQogQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQotIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfWkVST1BMVVM9eQotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKICMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15Ci1DT05GSUdfVVNCX09IQ0lfSENEX1BDST15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15Ci0jIENPTkZJR19MRURTX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZHJpdmVycwotIwotCi0jCi0jIExFRCBUcmlnZ2VycwotIwotIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0wCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX1VCSUZTX0ZTPW0KLSMgQ09ORklHX1VCSUZTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSIGlzIG5vdCBzZXQKLUNPTkZJR19VQklGU19GU19MWk89eQotQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQotIyBDT05GSUdfVUJJRlNfRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PW0KLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz1tCi1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfREVDT01QUkVTU19CWklQMj15Ci1DT05GSUdfREVDT01QUkVTU19MWk1BPXkKLUNPTkZJR19ERUNPTVBSRVNTX0xaTz15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTFpPPW0KLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBiMWU4OGZlLi4zYjk0NzA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsMTI2MiArMSw2OSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjI4IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRDZ4eD15Ci0jIENPTkZJR19MSU5LU1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVE9SQ0VOVEVSIGlzIG5vdCBzZXQKIENPTkZJR19NUEM3NDQ4SFBDMj15Ci0jIENPTkZJR19QUENfSE9MTFkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1BSUE1DMjgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQzJLIGlzIG5vdCBzZXQKLUNPTkZJR19UU0kxMDhfQlJJREdFPXkKLSMgQ09ORklHX0dBTUVDVUJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLUNPTkZJR19NUElDX1dFSVJEPXkKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAogQ09ORklHX1NBVEFfTVY9eQotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIENPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfS1NaODg0WF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogQ09ORklHXzgxMzlUT089eQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiBDT05GSUdfVFNJMTA4X0VUSD15Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCiAjIENPTkZJR19WVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQotIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCi0jIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDY4NzVmYjguLmM3ZDY4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTEsMTI3OCArMSw5NSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjI5IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLSMgQ09ORklHX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQogQ09ORklHX01QQzgyNzJfQURTPXkKLSMgQ09ORklHX1BRMkZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfRVA4MjQ4RSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR0NPR0UgaXMgbm90IHNldAotQ09ORklHX1BRMkFEUz15Ci1DT05GSUdfODI2MD15Ci1DT05GSUdfODI3Mj15Ci1DT05GSUdfUFEyX0FEU19QQ0lfUElDPXkKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMj15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci1DT05GSUdfUENJXzgyNjA9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JUFY2X1NJVD15Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotCi0jCi0jIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUDZfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0k0PXkKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPXkKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX01ESU9fQklUQkFORz15Ci0jIENPTkZJR19NRElPX0dQSU8gaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQz15Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfUFFfTURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogQ09ORklHX1BQUD15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9eQogQ09ORklHX1BQUF9TWU5DX1RUWT15CiBDT05GSUdfUFBQX0RFRkxBVEU9eQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPXkKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX1VURjg9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0JESV9TV0lUQ0g9eQotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IGJiZTVhZTYuLjViMWIxMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xLDIyOCArMSwxNSBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjMwIDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19GU0xfRU1CX1BFUkZNT04gaXMgbm90IHNldAotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX1JFREJPT1Q9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15Ci0jIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogQ09ORklHX01QQzgzMXhfUkRCPXkKIENPTkZJR19NUEM4MzJ4X01EUz15CkBAIC0yMzUsMTU1OSArMjIsMTExIEBACiBDT05GSUdfTVBDODM3eF9SREI9eQogQ09ORklHX1NCQzgzNHg9eQogQ09ORklHX0FTUDgzNHg9eQotIyBDT05GSUdfS01FVEVSMSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX01QQzgzMXg9eQotQ09ORklHX1BQQ19NUEM4MzJ4PXkKLUNPTkZJR19QUENfTVBDODM0eD15Ci1DT05GSUdfUFBDX01QQzgzN3g9eQotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotQ09ORklHX0lQSUM9eQotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKIENPTkZJR19RVUlDQ19FTkdJTkU9eQogQ09ORklHX1FFX0dQSU89eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DVV9NUEM4MzQ5RU1JVFggaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19GU0xfTEJDPXkKLUNPTkZJR19GU0xfR1RNPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0VTUD15Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKLSMgQ09ORklHX01URF9OQU5EX0ZTTF9VUE0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9GU0w9eQotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTD15Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfVklURVNTRV9QSFk9eQotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKIENPTkZJR19JQ1BMVVNfUEhZPXkKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTENOSUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfUUUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OPXkKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgZHJpdmVycwotIwotIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTczIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0hUMTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQU1DNjgyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xJUzNfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfOHh4eF9XRFQgaXMgbm90IHNldAotCi0jCi0jIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAotCi0jCi0jIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hQU19VU0JfSENEX1hJTElOWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfRlNMPXkKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCi0jIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX0RTMTM3ND15Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19GQVNUPXkKLUNPTkZJR19VQ0M9eQotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0jIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9eQotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZDMyZjMxYS4uYzNiMTEzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTEsMjM4ICsxLDIzIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MzEgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQk9PSzNTXzMyIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODV4eD15Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfRTUwMD15Ci0jIENPTkZJR19QUENfRTUwME1DIGlzIG5vdCBzZXQKLUNPTkZJR19GU0xfRU1CX1BFUkZNT049eQotQ09ORklHX0JPT0tFPXkKLUNPTkZJR19GU0xfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15CiBDT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfU1BFPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQotQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX1JFR1M9eQotQ09ORklHX1BQQ19BRFZfREVCVUdfSUFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EQUNTPTIKLUNPTkZJR19QUENfQURWX0RFQlVHX0RWQ1M9MAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15Ci0jIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi0jIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVNJX0JJVE1BUD15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15CiBDT05GSUdfTVBDODU0MF9BRFM9eQogQ09ORklHX01QQzg1NjBfQURTPXkKIENPTkZJR19NUEM4NXh4X0NEUz15CkBAIC0yNTEsMTQ2ICszNiwyNyBAQAogQ09ORklHX1RRTTg1NTU9eQogQ09ORklHX1RRTTg1NjA9eQogQ09ORklHX1NCQzg1NDg9eQotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogQ09ORklHX1FVSUNDX0VOR0lORT15CiBDT05GSUdfUUVfR1BJTz15Ci1DT05GSUdfQ1BNMj15Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotQ09ORklHX0NQTT15CiBDT05GSUdfTVBDOHh4eF9HUElPPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfSU9NTVVfSEVMUEVSPXkKLUNPTkZJR19TV0lPVExCPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEyCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLSMgQ09ORklHX05FRURfRE1BX01BUF9TVEFURSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR19GU0xfU09DPXkKLUNPTkZJR19GU0xfUENJPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiBDT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1JBUElESU89eQogQ09ORklHX1JBUElESU89eQotQ09ORklHX1JBUElESU9fRElTQ19USU1FT1VUPTMwCi0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19MT1dNRU1fQ0FNX05VTT0zCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX0FMSUdOPTB4MDQwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQpAQCAtNDA1LDE0OTYgKzcxLDE0MyBAQAogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CiBDT05GSUdfQVJQRD15Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0VTUD15Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfRlNMPXkKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CiBDT05GSUdfUEFUQV9BTEk9eQotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKIENPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19GSVhFRF9QSFk9eQotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQotQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKLSMgQ09ORklHX0ZTX0VORVRfTURJT19GQ0MgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDRfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1Q0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkVWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAogQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKLUNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfQ1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfUUU9bQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQotIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwogQ09ORklHX0kyQ19DUE09bQotIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19YSUxJTlggaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fSVQ4NzYxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15Ci0jIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15Ci0jIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSU5URUw4WDA9eQotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPXkKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKIENPTkZJR19ISURfQ0hFUlJZPXkKIENPTkZJR19ISURfQ0hJQ09OWT15CiBDT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15Ci0jIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15Ci0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9YSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YUFNfVVNCX0hDRF9YSUxJTlggaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0ZTTD15Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX0VEQUM9eQotCi0jCi0jIFJlcG9ydGluZyBzdWJzeXN0ZW1zCi0jCi0jIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FREFDX01NX0VEQUM9eQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfQ01PUz15Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiBDT05GSUdfRE1BREVWSUNFUz15Ci0jIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBETUEgRGV2aWNlcwotIwogQ09ORklHX0ZTTF9ETUE9eQotQ09ORklHX0RNQV9FTkdJTkU9eQotCi0jCi0jIERNQSBDbGllbnRzCi0jCiAjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz15Ci0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogQ09ORklHX0FERlNfRlM9bQotIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19CRUZTX0ZTPW0KLSMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogQ09ORklHX1ZYRlNfRlM9bQotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSFBGU19GUz1tCiBDT05GSUdfUU5YNEZTX0ZTPW0KLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotQ09ORklHX1VDQ19TTE9XPXkKLUNPTkZJR19VQ0NfRkFTVD15Ci1DT05GSUdfVUNDPXkKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX1ZJUlFfREVCVUc9eQotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9eQotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKaW5kZXggZjkzZGUxMC4uYTA3NWRhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwpAQCAtMSwyNDIgKzEsMjUgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjozMSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAogQ09ORklHX1BQQ184NXh4PXkKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19FNTAwPXkKLSMgQ09ORklHX1BQQ19FNTAwTUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9FTUJfUEVSRk1PTj15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX0ZTTF9CT09LRT15Ci1DT05GSUdfUFRFXzY0QklUPXkKIENPTkZJR19QSFlTXzY0QklUPXkKLUNPTkZJR19TUEU9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci1DT05GSUdfUFBDX0JPT0szRV9NTVU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTgKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci1DT05GSUdfR0VORVJJQ19UQlNZTkM9eQotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfUFBDX0FEVl9ERUJVR19SRUdTPXkKLUNPTkZJR19QUENfQURWX0RFQlVHX0lBQ1M9MgotQ09ORklHX1BQQ19BRFZfREVCVUdfREFDUz0yCi1DT05GSUdfUFBDX0FEVl9ERUJVR19EVkNTPTAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9GQVNUX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVNJX0JJVE1BUD15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1NPQ19CT09LRT15CiBDT05GSUdfTVBDODU0MF9BRFM9eQogQ09ORklHX01QQzg1NjBfQURTPXkKIENPTkZJR19NUEM4NXh4X0NEUz15CkBAIC0yNTUsMTQ3ICszOCwyNyBAQAogQ09ORklHX1RRTTg1NTU9eQogQ09ORklHX1RRTTg1NjA9eQogQ09ORklHX1NCQzg1NDg9eQotIyBDT05GSUdfU0JDODU2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNDA4MF9EUyBpcyBub3Qgc2V0Ci1DT05GSUdfVFFNODV4eD15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogQ09ORklHX1FVSUNDX0VOR0lORT15CiBDT05GSUdfUUVfR1BJTz15Ci1DT05GSUdfQ1BNMj15Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotQ09ORklHX0NQTT15CiBDT05GSUdfTVBDOHh4eF9HUElPPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfSU9NTVVfSEVMUEVSPXkKLUNPTkZJR19TV0lPVExCPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMgotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQogQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiBDT05GSUdfUENJX01TST15Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotQ09ORklHX0hBU19SQVBJRElPPXkKIENPTkZJR19SQVBJRElPPXkKLUNPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfTE9XTUVNX0NBTV9OVU09MwotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfS0VZPXkKLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQotQ09ORklHX0FTS19JUF9GSUJfSEFTSD15Ci0jIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKQEAgLTQxMCwxNDk3ICs3MywxNDMgQEAKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQogQ09ORklHX0FSUEQ9eQotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9FU1A9eQotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiBDT05GSUdfSVBWNj15Ci0jIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X1NJVD15Ci0jIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9TQ1RQPW0KLSMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAotQ09ORklHX1NDVFBfSE1BQ19NRDU9eQotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfRklCX1JVTEVTPXkKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKIENPTkZJR19CTEtfREVWX05CRD15Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKIENPTkZJR19FRVBST01fTEVHQUNZPXkKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj15Ci0jIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9HR0lORz15Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15Ci1DT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX0ZTTD15Ci1DT05GSUdfQVRBX1NGRj15Ci0jIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAogQ09ORklHX1BBVEFfQUxJPXkKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLQotIwotIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0Ci0jCi0KLSMKLSMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KLSMKLQotIwotIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCi0jCi0jIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAogQ09ORklHX0NJQ0FEQV9QSFk9eQogQ09ORklHX1ZJVEVTU0VfUEhZPXkKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKLUNPTkZJR19GU19FTkVUX0hBU19TQ0M9eQotQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15Ci0jIENPTkZJR19GU19FTkVUX01ESU9fRkNDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFVkYgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJORVQgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfQUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCi0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci1DT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0NQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1FFPW0KLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfQ1BNPW0KLSMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD15Ci1DT05GSUdfU05EX1RJTUVSPXkKLUNPTkZJR19TTkRfUENNPXkKLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9BQzk3X0NPREVDPXkKICMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzNUFVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0lOVEVMOFgwPXkKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QUEMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19BQzk3X0JVUz15Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAogQ09ORklHX0hJRF9BNFRFQ0g9eQogQ09ORklHX0hJRF9BUFBMRT15CiBDT05GSUdfSElEX0JFTEtJTj15CiBDT05GSUdfSElEX0NIRVJSWT15CiBDT05GSUdfSElEX0NISUNPTlk9eQogQ09ORklHX0hJRF9DWVBSRVNTPXkKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01PTlRFUkVZPXkKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15Ci0jIENPTkZJR19ISURfU1RBTlRVTSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15Ci1DT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9GU0w9eQotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19FREFDPXkKLQotIwotIyBSZXBvcnRpbmcgc3Vic3lzdGVtcwotIwotIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAogQ09ORklHX0RNQURFVklDRVM9eQotIyBDT05GSUdfRE1BREVWSUNFU19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIERldmljZXMKLSMKIENPTkZJR19GU0xfRE1BPXkKLUNPTkZJR19ETUFfRU5HSU5FPXkKLQotIwotIyBETUEgQ2xpZW50cwotIwogIyBDT05GSUdfTkVUX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BU1lOQ19UWF9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfRE1BVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQogQ09ORklHX1VERl9GUz1tCi1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgogQ09ORklHX05URlNfRlM9eQotIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX1JXIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKIENPTkZJR19BREZTX0ZTPW0KLSMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAogQ09ORklHX0FGRlNfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCi0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKIENPTkZJR19WWEZTX0ZTPW0KLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0hQRlNfRlM9bQogQ09ORklHX1FOWDRGU19GUz1tCi0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KLSMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15Ci0jIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQotIyBDT05GSUdfTkZTRF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCi0jIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19VQ0NfU0xPVz15Ci1DT05GSUdfVUNDX0ZBU1Q9eQotQ09ORklHX1VDQz15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAotIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19WSVJRX0RFQlVHPXkKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfQ1JZUFRPPXkKLQotIwotIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKLSMKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJMj15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9eQotQ09ORklHX0NSWVBUT19BRUFEMj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15Ci1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPXkKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9eQotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCmluZGV4IGQ4ZDNkMWQuLjY2ODIxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2Nl9hZHNfZGVmY29uZmlnCkBAIC0xLDEwMDYgKzEsNTcgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjozMiAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogQ09ORklHX1BQQ184eHg9eQotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BSSU5USz15CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAotQ09ORklHX0VMRl9DT1JFPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfRlVURVg9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0xCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0xPXkKLSMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAogQ09ORklHX01QQzg2WEFEUz15Ci0jIENPTkZJR19NUEM4ODVBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VQODhYQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQURERVI4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01HU1VWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTVBDOHh4IENQTSBPcHRpb25zCi0jCi0KLSMKLSMgR2VuZXJpYyBNUEM4eHggT3B0aW9ucwotIwogQ09ORklHXzh4eF9DT1BZQkFDSz15Ci0jIENPTkZJR184eHhfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfOHh4X0NQVTY9eQotQ09ORklHXzh4eF9DUFUxNT15Ci1DT05GSUdfTk9fVUNPREVfUEFUQ0g9eQotIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi0jIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfUVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfTURJTz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQotQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKLUNPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19GU0xfUFFfTURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotQ09ORklHX1dMQU49eQotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX1VTQl9TVVBQT1JUPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDJfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKaW5kZXggNjI0ZWFlOS4uNjNiOTBkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODZ4eF9kZWZjb25maWcKQEAgLTEsMzgyICsxLDQ1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzQtcmM1Ci0jIE1vbiBBcHIgMTkgMjM6MTY6MzMgMjAxMAotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU18zMj15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15Ci1DT05GSUdfNnh4PXkKLUNPTkZJR19QUENfRlBVPXkKLSMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfU1REX01NVV8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLUNPTkZJR19HRU5FUklDX1RCU1lOQz15Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0FVRElUPXkKLSMgQ09ORklHX0FVRElUU1lTQ0FMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9GQVNUX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfTVBDODY0MV9IUENOPXkKIENPTkZJR19TQkM4NjQxRD15CiBDT05GSUdfTVBDODYxMF9IUENEPXkKLSMgQ09ORklHX0dFRl9QUEM5QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRUZfU0JDMzEwIGlzIG5vdCBzZXQKIENPTkZJR19HRUZfU0JDNjEwPXkKLUNPTkZJR19NUEM4NjQxPXkKLUNPTkZJR19NUEM4NjEwPXkKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLUNPTkZJR19NTUlPX05WUkFNPXkKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfRlNMX1VMSTE1NzU9eQotIyBDT05GSUdfTVBDOHh4eF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfSU9NTVVfSEVMUEVSPXkKLUNPTkZJR19TV0lPVExCPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX0ZTTF9QQ0k9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQotIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotQ09ORklHX0hBU19SQVBJRElPPXkKLSMgQ09ORklHX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT1tCi0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKLUNPTkZJR19BU0tfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CkBAIC0zOTEsNTI1ICs1NCw0MSBAQAogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CiBDT05GSUdfQVJQRD15Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKIENPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPXkKLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwogQ09ORklHX0JMS19ERVZfTkJEPXkKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QTTgwMDEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX0FMST15Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19WSVRFU1NFX1BIWT15Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAotQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpAQCAtOTE3LDk0MCArOTYsODQgQEAKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKLSMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAotCi0jCi0jIFBDSSBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIEFDOTcgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAotIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfU09VTkQ9eQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKLUNPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKLUNPTkZJR19TTkRfVElNRVI9eQotQ09ORklHX1NORF9QQ009eQotIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTPXkKLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1ZNQVNURVI9eQotIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9eQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzNUFVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0lOVEVMOFgwPXkKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MWDY0NjRFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKLUNPTkZJR19TTkRfVVNCPXkKLSMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15Ci0jIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lHOTQwX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTUlDUk9TT0ZUPXkKLSMgQ09ORklHX0hJRF9NT1NBUlQgaXMgbm90IHNldAogQ09ORklHX0hJRF9NT05URVJFWT15Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX09SVEVLIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15Ci0jIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQotIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9aRVJPUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKIENPTkZJR19VU0JfU1RPUkFHRT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCi0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVEkgVkxZTlEKLSMKLSMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwogQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCiBDT05GSUdfTlRGU19GUz15Ci0jIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogQ09ORklHX0FERlNfRlM9bQotIyBDT05GSUdfQURGU19GU19SVyBpcyBub3Qgc2V0CiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19CRUZTX0ZTPW0KLSMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogQ09ORklHX1ZYRlNfRlM9bQotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSFBGU19GUz1tCiBDT05GSUdfUU5YNEZTX0ZTPW0KLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15Ci0jIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKIENPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCi0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwppbmRleCA0NWJkNDk5Li5mOWI4MzQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwpAQCAtMSw5NDIgKzEsODAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjozNCAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogQ09ORklHX1BQQ184eHg9eQotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci1DT05GSUdfQ09NUEFUX0JSSz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfQkFTRV9TTUFMTD0xCi0jIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMT15Ci0jIENPTkZJR19NUEM4WFhGQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg2WEFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDODg1QURTPXkKLSMgQ09ORklHX1BQQ19FUDg4WEMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0FEREVSODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NR1NVVkQgaXMgbm90IHNldAotCi0jCi0jIEZyZWVzY2FsZSBFdGhlcm5ldCBkcml2ZXIgcGxhdGZvcm0tc3BlY2lmaWMgb3B0aW9ucwotIwotQ09ORklHX01QQzh4eF9TRUNPTkRfRVRIPXkKLUNPTkZJR19NUEM4eHhfU0VDT05EX0VUSF9GRUMyPXkKLSMgQ09ORklHX01QQzh4eF9TRUNPTkRfRVRIX1NDQzMgaXMgbm90IHNldAotCi0jCi0jIE1QQzh4eCBDUE0gT3B0aW9ucwotIwotCi0jCi0jIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKLSMKIENPTkZJR184eHhfQ09QWUJBQ0s9eQotIyBDT05GSUdfOHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfOHh4X0NQVTYgaXMgbm90IHNldAotQ09ORklHXzh4eF9DUFUxNT15Ci1DT05GSUdfTk9fVUNPREVfUEFUQ0g9eQotIyBDT05GSUdfVVNCX1NPRl9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1BJX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfU01DMV9VQ09ERV9QQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVUlDQ19FTkdJTkUgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX0NQTT15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiBDT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAogQ09ORklHXzhYWF9NSU5JTUFMX0ZQRU1VPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKLUNPTkZJR19GU0xfU09DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfRE9NQUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfUVNQQU4gaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHg4MDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKLSMKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzIgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0k0PXkKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAotIyBDT05GSUdfTUQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfREFWSUNPTV9QSFk9eQotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKLUNPTkZJR19GU19FTkVUX0hBU19GRUM9eQotQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1RJTUJFUkRBTEUgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotIyBDT05GSUdfUFJPQ19LQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwppbmRleCA3NGE3MjE2Li5lZGQyZDU0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKQEAgLTEsNjY1ICsxLDY4IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmMzCi0jIFR1ZSBPY3QgIDYgMTA6Mjc6MTggMjAwOQotIwogQ09ORklHX1BQQzY0PXkKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfNjQ9eQotIyBDT05GSUdfUFBDX0JPT0szRV82NCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0JPT0szUz15CiBDT05GSUdfUE9XRVI0X09OTFk9eQotQ09ORklHX1BPV0VSND15Ci0jIENPTkZJR19UVU5FX0NFTEwgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQogQ09ORklHX0FMVElWRUM9eQotIyBDT05GSUdfVlNYIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfNjQ9eQotQ09ORklHX1BQQ19NTV9TTElDRVM9eQogIyBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotQ09ORklHX1BQQ19QRVJGX0NUUlM9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSz15Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0PXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD02NAotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19FVkVOVF9QUk9GSUxFPXkKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVNJX0JJVE1BUD15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUEFTRU1JPXkKLQotIwotIyBQQSBTZW1pIFBXUmZpY2llbnQgb3B0aW9ucwotIwogQ09ORklHX1BQQ19QQVNFTUlfSU9NTVU9eQotIyBDT05GSUdfUFBDX1BBU0VNSV9JT01NVV9ETUFfRk9SQ0UgaXMgbm90IHNldAotQ09ORklHX1BQQ19QQVNFTUlfTURJTz15Ci0jIENPTkZJR19QUENfUFMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExFQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9RUEFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotQ09ORklHX01QSUNfQlJPS0VOX1JFR1JFQUQ9eQotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKIENPTkZJR19DUFVfRlJFUV9ERUJVRz15Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKLSMKLUNPTkZJR19QUENfUEFTRU1JX0NQVUZSRVE9eQotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIENPTkZJR19IWl8xMDAwPXkKLUNPTkZJR19IWj0xMDAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLUNPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15Ci1DT05GSUdfSU9NTVVfVk1FUkdFPXkKLUNPTkZJR19JT01NVV9IRUxQRVI9eQotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05VTUEgaXMgbm90IHNldAotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQotIyBDT05GSUdfUFBDXzRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX1BQQ182NEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9OQotIyBDT05GSUdfUFBDX1NVQlBBR0VfUFJPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKLUNPTkZJR19QQ0lfTEVHQUNZPXkKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIENPTkZJR19QQ0NBUkQ9eQotQ09ORklHX1BDTUNJQV9ERUJVRz15Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKIENPTkZJR19FTEVDVFJBX0NGPXkKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9eQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CiBDT05GSUdfTkVUX0lQSVA9eQotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD15CiBDT05GSUdfSU5FVF9FU1A9eQotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQotIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1NMUkFNPXkKIENPTkZJR19NVERfUEhSQU09eQotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfUEFTRU1JPXkKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xNjM4NAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiBDT05GSUdfRUVQUk9NX0xFR0FDWT15Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9BVEFQST15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKIENPTkZJR19JREVfVEFTS19JT0NUTD15Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQogQ09ORklHX0NIUl9ERVZfT1NTVD15CkBAIC02NzAsMTQ2MSArNzMsMTMxIEBACiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAogQ09ORklHX1NBVEFfTVY9eQotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX0dFTkVSSUM9eQotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BDTUNJQT15Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogQ09ORklHX1BBVEFfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorQ09ORklHX0FUQV9HRU5FUklDPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15Ci1DT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD15CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci0jIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDZfUFE9eQotIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD15Ci0jIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAotIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCiBDT05GSUdfTUFSVkVMTF9QSFk9eQotIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKLSMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15Ci0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKIENPTkZJR19JTlBVVF9KT1lERVY9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTV9QQVNFTUk9eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BBU0VNST15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci1DT05GSUdfSFdNT05fVklEPXkKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBkcml2ZXJzCi0jCi0jIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE04NT15Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE05MD15Ci0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQogQ09ORklHX0RSTT15Ci1DT05GSUdfRFJNX0tNU19IRUxQRVI9eQotQ09ORklHX0RSTV9UVE09eQotIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldAogQ09ORklHX0RSTV9SQURFT049eQotIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TQVZBR0UgaXMgbm90IHNldAotQ09ORklHX1ZHQVNUQVRFPXkKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfRERDPXkKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9WR0ExNj15Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTlZJRElBPXkKIENPTkZJR19GQl9OVklESUFfSTJDPXkKLSMgQ09ORklHX0ZCX05WSURJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTlZJRElBX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLUNPTkZJR19WR0FfQ09OU09MRT15CiBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSz15Ci1DT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDS19TSVpFPTY0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15Ci1DT05GSUdfU05EX0hXREVQPXkKLUNPTkZJR19TTkRfUkFXTUlEST15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15Ci0jIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9SQVdNSURJX1NFUT15Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfVVNYMlk9eQotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDTUNJQT15Ci0jIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLUNPTkZJR19VU0JfSElEPXkKLSMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKIENPTkZJR19ISURfRFJBR09OUklTRT15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX1RXSU5IQU49eQotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15CiBDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX0dSRUVOQVNJQT15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQotIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9aRVJPUExVUz15Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0Y9eQotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogQ09ORklHX1VTQl9VSENJX0hDRD15CiBDT05GSUdfVVNCX1NMODExX0hDRD15Ci0jIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xJQlVTVUFMPXkKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19FREFDPXkKLQotIwotIyBSZXBvcnRpbmcgc3Vic3lzdGVtcwotIwotIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15Ci0jIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKLUNPTkZJR19SVENfSENUT1NZUz15Ci1DT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKLSMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAogQ09ORklHX1VERl9GUz15Ci1DT05GSUdfVURGX05MUz15Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfQ09ORklHRlNfRlM9eQotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQotQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotQ09ORklHX0NSQ19JVFVfVD15Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTIwNDgKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiAjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19FVkVOVF9UUkFDSU5HPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19ERUJVR0dFUj15Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19YT1JfQkxPQ0tTPXkKLUNPTkZJR19BU1lOQ19DT1JFPXkKLUNPTkZJR19BU1lOQ19NRU1DUFk9eQotQ09ORklHX0FTWU5DX1hPUj15Ci1DT05GSUdfQVNZTkNfUFE9eQotQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PXkKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9eQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPXkKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwppbmRleCA3NTNiYjc5Li5hYzRmYzQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKQEAgLTEsNDQ3ICsxLDcwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmM3Ci0jIE1vbiBNYXkgMjUgMTQ6NTM6MjUgMjAwOQotIwotIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfNnh4PXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci0jIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0hJQkVSTkFURV8zMj15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci1DT05GSUdfUkRfQlpJUDI9eQotQ09ORklHX1JEX0xaTUE9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci1DT05GSUdfS0FMTFNZTVNfQUxMPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCRD15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19GUkVFWkVSPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAotQ09ORklHX1BQQ19QTUFDPXkKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQotIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLQotIwotIyBDUFUgRnJlcXVlbmN5IGRyaXZlcnMKLSMKIENPTkZJR19DUFVfRlJFUV9QTUFDPXkKIENPTkZJR19QUEM2MDFfU1lOQ19GSVg9eQotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi1DT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci0jIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DQU5fUE1fVFJBQ0U9eQotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKLUNPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCiBDT05GSUdfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPW0KLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPW0KLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCiBDT05GSUdfWUVOVEE9bQotQ09ORklHX1lFTlRBX08yPXkKLUNPTkZJR19ZRU5UQV9SSUNPSD15Ci1DT05GSUdfWUVOVEFfVEk9eQotQ09ORklHX1lFTlRBX0VORV9UVU5FPXkKLUNPTkZJR19ZRU5UQV9UT1NISUJBPXkKLSMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JODIwOTIgaXMgbm90IHNldAotQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9bQotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj15Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0tFWT15Ci0jIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPXkKIENPTkZJR19JTkVUX0VTUD15Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi0jIENPTkZJR19ORl9DVF9BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAotQ09ORklHX05GX0NUX1BST1RPX0RDQ1A9bQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05GX0NUX05FVExJTks9bQotIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVA9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCi1DT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQEAgLTQ1MSwyNyArNzQsMTUgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzI9bQotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotQ09ORklHX05GX0RFRlJBR19JUFY0PW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCi1DT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKLSMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KQEAgLTQ4MiwyMSArOTMsMTAgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfTkZfTkFUPW0KLUNPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLSMgQ09ORklHX05GX05BVF9TTk1QX0JBU0lDIGlzIG5vdCBzZXQKLUNPTkZJR19ORl9OQVRfUFJPVE9fRENDUD1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9OQVRfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9NQU5HTEU9bQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCiBDT05GSUdfSVBfTkZfUkFXPW0KQEAgLTUwNCw5NCArMTA0LDEzIEBACiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIENPTkZJR19JUF9EQ0NQPW0KLUNPTkZJR19JTkVUX0RDQ1BfRElBRz1tCi0KLSMKLSMgRENDUCBDQ0lEcyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQX0NDSUQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9EQ0NQX0NDSUQzPXkKLSMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQX0RDQ1BfQ0NJRDNfUlRPPTEwMAotQ09ORklHX0lQX0RDQ1BfVEZSQ19MSUI9eQotCi0jCi0jIERDQ1AgS2VybmVsIEhhY2tpbmcKLSMKLSMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPW0KIENPTkZJR19JUk5FVD1tCiBDT05GSUdfSVJDT01NPW0KLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwogQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX0lSVFRZX1NJUj1tCi0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAotIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OU0NfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkJPTkRfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQ19JUkNDX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTElfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMU0lfRklSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9GSVIgaXMgbm90IHNldAotIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNjAxLDMwNiArMTIwLDYyIEBACiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQogQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKIENPTkZJR19CVF9ISURQPW0KLQotIwotIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAogQ09ORklHX0JUX0hDSUJDTTIwM1g9bQotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lCRlVTQj1tCi0jIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT1tCi0jIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9bQotCi0jCi0jIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCi0jCi1DT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUw9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUw9eQotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsIgotIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfTEVEUz15Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX01BQ19GTE9QUFk9bQotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9VQj1tCiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX1hGRVJfTU9ERT15Ci1DT05GSUdfSURFX1RJTUlOR1M9eQotQ09ORklHX0lERV9BVEFQST15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNTPW0KLSMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKLUNPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVc9eQotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU0w4MkMxMDU9eQotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTkVUTElOSz15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9BSUM3WFhYPW0KIENPTkZJR19BSUM3WFhYX0NNRFNfUEVSX0RFVklDRT0yNTMKIENPTkZJR19BSUM3WFhYX1JFU0VUX0RFTEFZX01TPTE1MDAwCi1DT05GSUdfQUlDN1hYWF9ERUJVR19FTkFCTEU9eQotQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCi1DT05GSUdfQUlDN1hYWF9SRUdfUFJFVFRZX1BSSU5UPXkKIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEPW0KLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01FU0g9eQotQ09ORklHX1NDU0lfTUVTSF9TWU5DX1JBVEU9NQotQ09ORklHX1NDU0lfTUVTSF9SRVNFVF9ERUxBWV9NUz00MDAwCiBDT05GSUdfU0NTSV9NQUM1M0M5ND15Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPW0KIENPTkZJR19NRF9MSU5FQVI9bQogQ09ORklHX01EX1JBSUQwPW0KIENPTkZJR19NRF9SQUlEMT1tCiBDT05GSUdfTURfUkFJRDEwPW0KLSMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPW0KLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCi0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogQ09ORklHX0lFRUUxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9PSENJMTM5ND1tCi0jIENPTkZJR19JRUVFMTM5NF9QQ0lMWU5YIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFMTM5NF9TQlAyPW0KLSMgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEhZU19ETUEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfRVRIMTM5NF9ST01fRU5UUlkgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTRfRVRIMTM5NCBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfUkFXSU89bQogQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KLSMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAotQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKIENPTkZJR19BREI9eQogQ09ORklHX0FEQl9DVURBPXkKIENPTkZJR19BREJfUE1VPXkKQEAgLTkxNCw4MjYgKzE4OSwxMTEgQEAKIENPTkZJR19NQUNfRU1VTU9VU0VCVE49eQogQ09ORklHX1RIRVJNX1dJTkRUVU5ORUw9bQogQ09ORklHX1RIRVJNX0FEVDc0Nlg9bQotIyBDT05GSUdfV0lOREZBUk0gaXMgbm90IHNldAotIyBDT05GSUdfQU5TTENEIGlzIG5vdCBzZXQKIENPTkZJR19QTUFDX1JBQ0tNRVRFUj1tCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19EVU1NWT1tCi0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfTUFDRT15Ci0jIENPTkZJR19NQUNFX0FBVUlfUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQk1BQz15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogQ09ORklHX1NVTkdFTT15Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKIENPTkZJR19QQ05FVDMyPXkKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1dMMzUwMSBpcyBub3Qgc2V0CiBDT05GSUdfUFJJU001ND1tCi0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAotIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NV0w4SyBpcyBub3Qgc2V0Ci1DT05GSUdfUDU0X0NPTU1PTj1tCi0jIENPTkZJR19QNTRfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1A1NF9MRURTPXkKLSMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSOTE3MF9VU0IgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIENPTkZJR19CNDM9bQotQ09ORklHX0I0M19QQ0lfQVVUT1NFTEVDVD15Ci1DT05GSUdfQjQzX1BDSUNPUkVfQVVUT1NFTEVDVD15Ci0jIENPTkZJR19CNDNfUENNQ0lBIGlzIG5vdCBzZXQKLUNPTkZJR19CNDNfTEVEUz15Ci0jIENPTkZJR19CNDNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0I0M0xFR0FDWT1tCi1DT05GSUdfQjQzTEVHQUNZX1BDSV9BVVRPU0VMRUNUPXkKLUNPTkZJR19CNDNMRUdBQ1lfUENJQ09SRV9BVVRPU0VMRUNUPXkKLUNPTkZJR19CNDNMRUdBQ1lfTEVEUz15Ci1DT05GSUdfQjQzTEVHQUNZX0RFQlVHPXkKLUNPTkZJR19CNDNMRUdBQ1lfRE1BPXkKLUNPTkZJR19CNDNMRUdBQ1lfUElPPXkKLUNPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15Ci0jIENPTkZJR19CNDNMRUdBQ1lfRE1BX01PREUgaXMgbm90IHNldAotIyBDT05GSUdfQjQzTEVHQUNZX1BJT19NT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0CiBDT05GSUdfSEVSTUVTPW0KLUNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CiBDT05GSUdfQVBQTEVfQUlSUE9SVD1tCi0jIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0hFUk1FUz1tCiBDT05GSUdfUENNQ0lBX0hFUk1FUz1tCi0jIENPTkZJR19QQ01DSUFfU1BFQ1RSVU0gaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CitDT05GSUdfUDU0X0NPTU1PTj1tCiBDT05GSUdfVVNCX1VTQk5FVD1tCi1DT05GSUdfVVNCX05FVF9BWDg4MTdYPW0KLUNPTkZJR19VU0JfTkVUX0NEQ0VUSEVSPW0KLSMgQ09ORklHX1VTQl9ORVRfQ0RDX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTkVUX05FVDEwODA9bQotIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX01DUzc4MzAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX05FVF9aQVVSVVM9bQotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPXkKIENPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz15CiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT15CiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSD15Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKICMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9bQotQ09ORklHX1NFUklBTF84MjUwX1BDST1tCi0jIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9bQogQ09ORklHX1NFUklBTF9QTUFDWklMT0c9bQogQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT1tCi0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9bQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLUNPTkZJR19JMkNfUE9XRVJNQUM9eQotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQotIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiBDT05GSUdfQVBNX1BPV0VSPXkKLSMgQ09ORklHX0JBVFRFUllfRFMyNzYwIGlzIG5vdCBzZXQKIENPTkZJR19CQVRURVJZX1BNVT15Ci0jIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQj1tCi1DT05GSUdfU1NCX1NQUk9NPXkKLUNPTkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15Ci1DT05GSUdfU1NCX1BDSUhPU1Q9eQotQ09ORklHX1NTQl9CNDNfUENJX0JSSURHRT15Ci1DT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCX1BDTUNJQUhPU1QgaXMgbm90IHNldAotIyBDT05GSUdfU1NCX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkVfUE9TU0lCTEU9eQotQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKK0NPTkZJR19IV01PTj1tCiBDT05GSUdfQUdQPW0KIENPTkZJR19BR1BfVU5JTk9SVEg9bQogQ09ORklHX0RSTT1tCi0jIENPTkZJR19EUk1fVERGWCBpcyBub3Qgc2V0CiBDT05GSUdfRFJNX1IxMjg9bQogQ09ORklHX0RSTV9SQURFT049bQotIyBDT05GSUdfRFJNX01HQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk1fU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1NBVkFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBU1RBVEU9eQotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotQ09ORklHX0ZCX0REQz15Ci0jIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTUFDTU9ERVM9eQotQ09ORklHX0ZCX0JBQ0tMSUdIVD15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT0Y9eQogQ09ORklHX0ZCX0NPTlRST0w9eQogQ09ORklHX0ZCX1BMQVRJTlVNPXkKIENPTkZJR19GQl9WQUxLWVJJRT15CiBDT05GSUdfRkJfQ1Q2NTU1MD15Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfSU1TVFQ9eQotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAogQ09ORklHX0ZCX05WSURJQT15CiBDT05GSUdfRkJfTlZJRElBX0kyQz15Ci0jIENPTkZJR19GQl9OVklESUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZCX05WSURJQV9CQUNLTElHSFQ9eQotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTUFUUk9YPXkKIENPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQotIyBDT05GSUdfRkJfTUFUUk9YX0cgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQotQ09ORklHX0ZCX1JBREVPTl9JMkM9eQotQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQotIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVFkxMjg9eQotQ09ORklHX0ZCX0FUWTEyOF9CQUNLTElHSFQ9eQogQ09ORklHX0ZCX0FUWT15CiBDT05GSUdfRkJfQVRZX0NUPXkKLSMgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRZX0dYPXkKLUNPTkZJR19GQl9BVFlfQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogQ09ORklHX0ZCXzNERlg9eQotIyBDT05GSUdfRkJfM0RGWF9BQ0NFTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfM0RGWF9JMkM9eQotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQotQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfSFdERVA9bQotQ09ORklHX1NORF9SQVdNSURJPW0KIENPTkZJR19TTkRfU0VRVUVOQ0VSPW0KIENPTkZJR19TTkRfU0VRX0RVTU1ZPW0KLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz1tCiBDT05GSUdfU05EX1BDTV9PU1M9bQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15Ci1DT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKLSMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfRFJJVkVSUz15CiBDT05GSUdfU05EX0RVTU1ZPW0KLSMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQogQ09ORklHX1NORF9QT1dFUk1BQz1tCi1DT05GSUdfU05EX1BPV0VSTUFDX0FVVE9fRFJDPXkKIENPTkZJR19TTkRfQU9BPW0KIENPTkZJR19TTkRfQU9BX0ZBQlJJQ19MQVlPVVQ9bQogQ09ORklHX1NORF9BT0FfT05ZWD1tCiBDT05GSUdfU05EX0FPQV9UQVM9bQogQ09ORklHX1NORF9BT0FfVE9PTklFPW0KLUNPTkZJR19TTkRfQU9BX1NPVU5EQlVTPW0KLUNPTkZJR19TTkRfQU9BX1NPVU5EQlVTX0kyUz1tCi1DT05GSUdfU05EX1VTQj15CiBDT05GSUdfU05EX1VTQl9BVURJTz1tCi0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ01DSUE9eQotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX0VaS0VZPXkKLUNPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotQ09ORklHX0hJRF9NT05URVJFWT15CiBDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQotIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9UT1BTRUVEPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUz15Ci0jIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwogQ09ORklHX1VTQl9BQ009bQogQ09ORklHX1VTQl9QUklOVEVSPW0KLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0g9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX1NFUklBTD1tCi1DT05GSUdfVVNCX0VaVVNCPXkKLSMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KIENPTkZJR19VU0JfU0VSSUFMX0lQQVE9bQotIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9JVVUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREE9bQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX01QUj15CkBAIC0xNzQ4LDUwMyArMzA4LDYzIEBACiBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UUk9eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVc9eQogQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQz15Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSUNPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi1DT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAotQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKLQotIwotIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCi0jCi0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAotIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9eQotIyBDT05GSUdfSkJEMl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCi1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19IRlNQTFVTX0ZTPW0KLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMl9BQ0w9eQotQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogQ09ORklHX1NNQl9GUz1tCi0jIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKIENPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci1DT05GSUdfU0NIRURTVEFUUz15Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0xBVEVOQ1lUT1A9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19UUkFDSU5HPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQotQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQotQ09ORklHX0RFQlVHR0VSPXkKLUNPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKIENPTkZJR19CT09UWF9URVhUPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD15Ci1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwotQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RFQT1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTj1tCi0KLSMKLSMgQ29tcHJlc3Npb24KLSMKIENPTkZJR19DUllQVE9fREVGTEFURT1tCi0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCmluZGV4IGFmYjRkMWIuLjkzZDc0MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZwpAQCAtMSwxNDM2ICsxLDEwNiBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDEzOjU0OjA2IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKIENPTkZJR180MHg9eQotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHXzR4eD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotQ09ORklHX1BQQ19EQ1JfTkFUSVZFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci0jIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDNHh4X1BDSV9FWFBSRVNTPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfR1BJTz15Ci1DT05GSUdfWElMSU5YX1ZJUlRFWD15CiBDT05GSUdfQUNBRElBPXkKIENPTkZJR19FUDQwNT15CiBDT05GSUdfSENVND15CiBDT05GSUdfSE9URk9PVD15CiBDT05GSUdfS0lMQVVFQT15CiBDT05GSUdfTUFLQUxVPXkKLUNPTkZJR19XQUxOVVQ9eQogQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRD15Ci1DT05GSUdfUFBDNDB4X1NJTVBMRT15Ci1DT05GSUdfNDA1R1A9eQotQ09ORklHXzQwNUVQPXkKLUNPTkZJR180MDVFWD15Ci1DT05GSUdfNDA1RVo9eQotQ09ORklHXzQwNUdQUj15Ci1DT05GSUdfWElMSU5YX1ZJUlRFWF9JSV9QUk89eQotQ09ORklHX1hJTElOWF9WSVJURVhfNF9GWD15Ci1DT05GSUdfSUJNNDA1X0VSUjc3PXkKLUNPTkZJR19JQk00MDVfRVJSNTE9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfUlRDPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9QQ0kgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi0jIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi0jIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKLUNPTkZJR180eHhfU09DPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9bQogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAotQ09ORklHX0lQVjY9bQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9bQotIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQotIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9bQogQ09ORklHX01URF9CTE9DSz1tCi0jIENPTkZJR19NVERfQkxPQ0tfUk8gaXMgbm90IHNldAotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCiBDT05GSUdfTVREX1VCST1tCi1DT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgotQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQogQ09ORklHX01URF9VQklfR0xVRUJJPW0KLQotIwotIyBVQkkgZGVidWdnaW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX01URF9VQklfREVCVUcgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfR1BJTz15Ci1DT05GSUdfT0ZfSTJDPW0KLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9TWVNBQ0U9bQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNX05FV19FTUFDX0VNQUM0PXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQ9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUj15Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUdPTjMgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9MTF9URU1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAotIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMDA9eQotIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKIENPTkZJR19TRVJJTz1tCiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMj1tCi0jIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1VBUlRMSVRFPXkKIENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9IV0lDQVA9bQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPW0KLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0dQSU89bQogQ09ORklHX0kyQ19JQk1fSUlDPW0KLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6Ci0jCiBDT05GSUdfR1BJT19YSUxJTlg9eQotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPW0KLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCi1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCi0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfWElMSU5YPW0KLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCi0jCi0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9bQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfRlM9bQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfVUJJRlNfRlM9bQotIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPW0KLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PW0KLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX0xaT19DT01QUkVTUz1tCi1DT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19MWk89bQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVWX1BQQzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcKaW5kZXggYmQzZDIzZi4uY2Q0NDZmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCkBAIC0xLDIzMSArMSwxNyBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMQotIyBNb24gSmFuICA0IDEzOjQyOjE3IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU18zMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiBDT05GSUdfNDR4PXkKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19GUFU9eQotQ09ORklHXzR4eD15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BURV82NEJJVD15Ci1DT05GSUdfUEhZU182NEJJVD15Ci1DT05GSUdfUFBDX01NVV9OT0hBU0g9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci0jIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfR0VORVJJQ19OVlJBTT15Ci1DT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19QUENfRENSX05BVElWRT15Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1I9eQotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotQ09ORklHX1BSRUVNUFRfTk9USUZJRVJTPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogQ09ORklHX0JBTUJPTz15Ci1DT05GSUdfRUJPTlk9eQogQ09ORklHX1NBTTQ0MEVQPXkKIENPTkZJR19TRVFVT0lBPXkKIENPTkZJR19UQUlTSEFOPXkKQEAgLTIzOSwxMzU4ICsyNSwxMDMgQEAKIENPTkZJR19FSUdFUj15CiBDT05GSUdfWU9TRU1JVEU9eQogQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRD15Ci0jIENPTkZJR19YSUxJTlhfTUw1MTAgaXMgbm90IHNldAotQ09ORklHX1BQQzQ0eF9TSU1QTEU9eQogQ09ORklHX1BQQzR4eF9HUElPPXkKLUNPTkZJR180NDBFUD15Ci1DT05GSUdfNDQwRVBYPXkKLUNPTkZJR180NDBHUlg9eQotQ09ORklHXzQ0MEdQPXkKLUNPTkZJR180NDBHWD15Ci1DT05GSUdfNDQwU1BlPXkKLUNPTkZJR180NjBFWD15Ci1DT05GSUdfNDYwU1g9eQotQ09ORklHX0lCTTQ0MEVQX0VSUjQyPXkKLUNPTkZJR19YSUxJTlhfVklSVEVYPXkKLUNPTkZJR19YSUxJTlhfVklSVEVYXzVfRlhUPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotQ09ORklHX09GX1JUQz15Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfUENJIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19TVERCSU5VVElMUz15Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfNHh4X1NPQz15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAotQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCiBDT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPW0KICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2PW0KLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCi0jIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAotQ09ORklHX0lQVjZfU0lUPW0KLSMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15Ci0jIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotQ09ORklHX1NUUD1tCiBDT05GSUdfQlJJREdFPW0KLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz1tCi0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0VWRU5UUz15CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwogQ09ORklHX01URF9VQkk9bQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKIENPTkZJR19NVERfVUJJX0dMVUVCST1tCi0KLSMKLSMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCi0jCi0jIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX0kyQz1tCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9TWVNBQ0U9bQotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPW0KLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPW0KLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNX05FV19FTUFDPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhCPTEyOAotQ09ORklHX0lCTV9ORVdfRU1BQ19UWEI9NjQKLUNPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKLUNPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2Ci1DT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCi0jIENPTkZJR19JQk1fTkVXX0VNQUNfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfTExfVEVNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKLSMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAotQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15Ci0jIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAotIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TMklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAotIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSVUgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiBDT05GSUdfU0VSSU89bQogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fTElCUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzI9bQotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMXzgyNTBfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci1DT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKLSMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfUlNBIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1VBUlRMSVRFPXkKIENPTkZJR19TRVJJQUxfVUFSVExJVEVfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STV9OV1BTRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogQ09ORklHX1hJTElOWF9IV0lDQVA9bQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPW0KLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX0dQSU89bQogQ09ORklHX0kyQ19JQk1fSUlDPW0KLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci1DT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQotQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwogQ09ORklHX0dQSU9fWElMSU5YPXkKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9bQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD1tCi1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPW0KLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPW0KLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9YSUxJTlg9bQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR08gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi0jIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD1tCi0jIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX0RFU0M9eQotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKLSMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD1tCi1DT05GSUdfRlNfTUJDQUNIRT1tCi0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAogQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19VQklGU19GUz1tCiBDT05GSUdfVUJJRlNfRlNfWEFUVFI9eQotIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15Ci0jIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci1DT05GSUdfTkxTPW0KLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCi0jIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzE2PW0KIENPTkZJR19DUkNfVDEwRElGPW0KLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9bQotQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15Ci0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKLSMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9eQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19MWk89bQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfVklSVFVBTElaQVRJT049eQotQ09ORklHX0tWTT15CiBDT05GSUdfS1ZNXzQ0MD15Ci0jIENPTkZJR19LVk1fRVhJVF9USU1JTkcgaXMgbm90IHNldAotIyBDT05GSUdfVklSVElPX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUSU9fQkFMTE9PTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggMzY5ZjRlMC4uNzY3MzYwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMSw0OTEgKzEsOTQgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzMKLSMgVHVlIE5vdiAxMSAxOTozNjo1NiAyMDA4Ci0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QT1dFUjRfT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfUE9XRVIzPXkKLUNPTkZJR19QT1dFUjQ9eQotIyBDT05GSUdfVFVORV9DRUxMIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19WU1g9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfTU1fU0xJQ0VTPXkKLUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQotQ09ORklHX05SX0NQVVM9MzIKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUE9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLUNPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19QUEM9eQotQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfQ09NUEFUPXkKLUNPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15Ci1DT05GSUdfUFBDX09GPXkKLUNPTkZJR19PRj15Ci1DT05GSUdfUFBDX1VEQkdfMTY1NTA9eQotQ09ORklHX0dFTkVSSUNfVEJTWU5DPXkKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElCRVJOQVRFXzY0PXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19EQ1JfTU1JTz15Ci1DT05GSUdfUFBDX0RDUj15Ci1DT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDST15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19UQVNLU1RBVFM9eQogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15Ci0jIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0NHUk9VUFM9eQotIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVTRVRTPXkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotQ09ORklHX1BST0NfUElEX0NQVVNFVD15Ci1DT05GSUdfUkVMQVk9eQotQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX1BDU1BLUl9QTEFURk9STT15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKLUNPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQotQ09ORklHX0JMS19ERVZfQlNHPXkKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DS19DT01QQVQ9eQotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVNJX0JJVE1BUD15Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKLUNPTkZJR19QUENfUFNFUklFUz15CiBDT05GSUdfUFBDX1NQTFBBUj15Ci1DT05GSUdfRUVIPXkKIENPTkZJR19TQ0FOTE9HPW0KLUNPTkZJR19MUEFSQ0ZHPXkKIENPTkZJR19QUENfU01MUEFSPXkKLUNPTkZJR19DTU09eQogQ09ORklHX0RUTD15CiBDT05GSUdfUFBDX0lTRVJJRVM9eQotCi0jCi0jIGlTZXJpZXMgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19WSU9EQVNEPXkKIENPTkZJR19WSU9DRD1tCiBDT05GSUdfVklPVEFQRT1tCi1DT05GSUdfVklPUEFUSD15Ci1DT05GSUdfUFBDX1BNQUM9eQotQ09ORklHX1BQQ19QTUFDNjQ9eQogQ09ORklHX1BQQ19NQVBMRT15CiBDT05GSUdfUFBDX1BBU0VNST15Ci0KLSMKLSMgUEEgU2VtaSBQV1JmaWNpZW50IG9wdGlvbnMKLSMKIENPTkZJR19QUENfUEFTRU1JX0lPTU1VPXkKLSMgQ09ORklHX1BQQ19QQVNFTUlfSU9NTVVfRE1BX0ZPUkNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUEFTRU1JX01ESU89eQogQ09ORklHX1BQQ19QUzM9eQotCi0jCi0jIFBTMyBQbGF0Zm9ybSBPcHRpb25zCi0jCi0jIENPTkZJR19QUzNfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1BTM19IVEFCX1NJWkU9MjAKLSMgQ09ORklHX1BTM19EWU5BTUlDX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUFMzX1ZVQVJUPXkKLUNPTkZJR19QUzNfUFMzQVY9eQotQ09ORklHX1BTM19TWVNfTUFOQUdFUj15Ci1DT05GSUdfUFMzX1NUT1JBR0U9bQogQ09ORklHX1BTM19ESVNLPW0KIENPTkZJR19QUzNfUk9NPW0KIENPTkZJR19QUzNfRkxBU0g9bQogQ09ORklHX1BTM19MUE09bQotQ09ORklHX1BQQ19DRUxMPXkKLUNPTkZJR19QUENfQ0VMTF9DT01NT049eQotQ09ORklHX1BQQ19DRUxMX05BVElWRT15CiBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFPXkKIENPTkZJR19QUENfQ0VMTEVCPXkKIENPTkZJR19QUENfQ0VMTF9RUEFDRT15Ci0KLSMKLSMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKLSMKLUNPTkZJR19TUFVfRlM9bQotQ09ORklHX1NQVV9GU182NEtfTFM9eQotIyBDT05GSUdfU1BVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19TUFVfQkFTRT15Ci1DT05GSUdfQ0JFX1JBUz15Ci1DT05GSUdfUFBDX0lCTV9DRUxMX1JFU0VUQlVUVE9OPXkKLUNPTkZJR19QUENfSUJNX0NFTExfUE9XRVJCVVRUT049bQotQ09ORklHX0NCRV9USEVSTT1tCi1DT05GSUdfQ0JFX0NQVUZSRVE9bQotQ09ORklHX0NCRV9DUFVGUkVRX1BNST1tCi1DT05GSUdfQ0JFX0NQVUZSRVFfU1BVX0dPVkVSTk9SPW0KLUNPTkZJR19PUFJPRklMRV9DRUxMPXkKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05BVElWRT15Ci1DT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQotQ09ORklHX1BQQ19VREJHX0JFQVQ9eQotQ09ORklHX1hJQ1M9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfSTgyNTk9eQotQ09ORklHX1UzX0RBUlQ9eQotQ09ORklHX1BQQ19SVEFTPXkKLUNPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkc9eQotQ09ORklHX1JUQVNfUFJPQz15CiBDT05GSUdfUlRBU19GTEFTSD1tCi1DT05GSUdfUFBDX1BNST1tCi1DT05GSUdfTU1JT19OVlJBTT15Ci1DT05GSUdfTVBJQ19VM19IVF9JUlFTPXkKLUNPTkZJR19NUElDX0JST0tFTl9SRUdSRUFEPXkKLUNPTkZJR19JQk1WSU89eQogQ09ORklHX0lCTUVCVVM9eQotIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzk3MF9OQVA9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9JTz15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15CiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9TVEFUPXkKLSMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15Ci0jIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCi0jCiBDT05GSUdfQ1BVX0ZSRVFfUE1BQzY0PXkKLUNPTkZJR19QUENfUEFTRU1JX0NQVUZSRVE9eQotQ09ORklHX0FYT05fUkFNPW0KLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiBDT05GSUdfSFpfMTAwPXkKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci1DT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEU9eQotQ09ORklHX0lPTU1VX1ZNRVJHRT15Ci1DT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19IT1RQTFVHX0NQVT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15Ci0jIENPTkZJR19QSFlQX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci1DT05GSUdfTlVNQT15Ci1DT05GSUdfTk9ERVNfU0hJRlQ9OAotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVD15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15CiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQotQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15Ci1DT05GSUdfTk9ERVNfU1BBTl9PVEhFUl9OT0RFUz15Ci1DT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQotQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogQ09ORklHX1NDSEVEX1NNVD15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotQ09ORklHX0FSQ0hfV0FOVFNfRlJFRVpFUl9DT05UUk9MPXkKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci1DT05GSUdfUENJX01TST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKIENPTkZJR19FTEVDVFJBX0NGPXkKIENPTkZJR19IT1RQTFVHX1BDST1tCi0jIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0lfUlBBPW0KIENPTkZJR19IT1RQTFVHX1BDSV9SUEFfRExQQVI9bQotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD15Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLSMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQogQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KQEAgLTQ5Myw3ICs5Niw2IEBACiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQotQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KQEAgLTUyMSwyMyArMTIzLDE0IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCkBAIC01NDksMjAgKzE0MiwxMCBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19ORl9OQVQ9bQotQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotQ09ORklHX05GX05BVF9BTUFOREE9bQotQ09ORklHX05GX05BVF9QUFRQPW0KLUNPTkZJR19ORl9OQVRfSDMyMz1tCi1DT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTU3MSwzMDMgKzE1NCw0MCBAQAogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTExDPXkKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0NMU19ST1VURT15Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci1DT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0kyQz15Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfRkQ9eQotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKLSMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9USU1JTkdTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15Ci1DT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9DRUxMRUI9eQogQ09ORklHX0JMS19ERVZfSURFX1BNQUM9eQogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQVRBMTAwRklSU1Q9eQotQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUM9eQotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9ORVRMSU5LPXkKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD15Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0JMS19ERVZfU1JfVkVORE9SPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9DT05TVEFOVFM9eQotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTPW0KLSMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9TUlBfQVRUUlM9eQotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfSUJNVlNDU0k9eQogQ09ORklHX1NDU0lfSUJNVkZDPW0KLUNPTkZJR19TQ1NJX0lCTVZGQ19UUkFDRT15Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAotQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgotQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CiBDT05GSUdfU0NTSV9JUFI9eQotQ09ORklHX1NDU0lfSVBSX1RSQUNFPXkKLUNPTkZJR19TQ1NJX0lQUl9EVU1QPXkKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxBX0ZDPW0KLSMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xQRkM9bQotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQotQ09ORklHX0FUQV9OT05TVEFOREFSRD15Ci1DT05GSUdfU0FUQV9QTVA9eQotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTDI0PXkKLUNPTkZJR19BVEFfU0ZGPXkKIENPTkZJR19TQVRBX1NWVz15Ci0jIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CkBAIC04NzYsMTA3MCArMTk2LDIwMCBAQAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRE1fTVVMVElQQVRIPW0KLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFMTM5ND15CiBDT05GSUdfSUVFRTEzOTRfT0hDSTEzOTQ9eQotIyBDT05GSUdfSUVFRTEzOTRfUENJTFlOWCBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfU0JQMj1tCi1DT05GSUdfSUVFRTEzOTRfRVRIMTM5NF9ST01fRU5UUlk9eQogQ09ORklHX0lFRUUxMzk0X0VUSDEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1JBV0lPPXkKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X0RWMTM5ND1tCi0jIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CiBDT05GSUdfQURCX1BNVT15Ci0jIENPTkZJR19BREJfUE1VX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19TTVU9eQotIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTV9QTTcyPXkKIENPTkZJR19XSU5ERkFSTT15CiBDT05GSUdfV0lOREZBUk1fUE04MT15CiBDT05GSUdfV0lOREZBUk1fUE05MT15CiBDT05GSUdfV0lOREZBUk1fUE0xMTI9eQogQ09ORklHX1dJTkRGQVJNX1BNMTIxPXkKLSMgQ09ORklHX1BNQUNfUkFDS01FVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCi0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPW0KLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19NQVJWRUxMX1BIWT15Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19CUk9BRENPTV9QSFk9bQotIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogQ09ORklHX1NVTkdFTT15Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVkVORE9SXzNDT009eQogQ09ORklHX1ZPUlRFWD15Ci0jIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfSUJNVkVUSD1tCi0jIENPTkZJR19JQk1fTkVXX0VNQUMgaXMgbm90IHNldAotQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJPXkKLUNPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUk9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19UQUg9eQotQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDND15Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogQ09ORklHX1BDTkVUMzI9eQotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz1tCiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15CiBDT05GSUdfRTEwMDBFPXkKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAogQ09ORklHX1NQSURFUl9ORVQ9bQogQ09ORklHX0dFTElDX05FVD1tCiBDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQotIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19DSEVMU0lPX1QxPW0KIENPTkZJR19DSEVMU0lPX1QzPW0KIENPTkZJR19FSEVBPW0KLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogQ09ORklHX0lYR0JFPW0KIENPTkZJR19JWEdCPW0KIENPTkZJR19TMklPPW0KIENPTkZJR19NWVJJMTBHRT1tCiBDT05GSUdfTkVUWEVOX05JQz1tCi0jIENPTkZJR19OSVUgaXMgbm90IHNldAogQ09ORklHX1BBU0VNSV9NQUM9eQogQ09ORklHX01MWDRfRU49bQotQ09ORklHX01MWDRfQ09SRT1tCi0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfVFIgaXMgbm90IHNldAotIyBDT05GSUdfSUJNT0wgaXMgbm90IHNldAotIyBDT05GSUdfM0MzNTkgaXMgbm90IHNldAotIyBDT05GSUdfVE1TMzgwVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfSVNFUklFU19WRVRIPW0KLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi0jIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz1tCiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQotIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAogQ09ORklHX1BQUE9FPW0KLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPXkKLSMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9bQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLUNPTkZJR19NT1VTRV9QUzI9eQotQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKLUNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKLUNPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKLUNPTkZJR19NT1VTRV9QUzJfTElGRUJPT0s9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CiBDT05GSUdfSU5QVVRfUENTUEtSPW0KLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0lDT009bQotQ09ORklHX1NFUklBTF9UWFg5PXkKLUNPTkZJR19IQVNfVFhYOV9TRVJJQUw9eQotQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTYKIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfSlNNPW0KLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotQ09ORklHX0hWQ19EUklWRVI9eQotQ09ORklHX0hWQ19JUlE9eQogQ09ORklHX0hWQ19DT05TT0xFPXkKLUNPTkZJR19IVkNfSVNFUklFUz15CiBDT05GSUdfSFZDX1JUQVM9eQogQ09ORklHX0hWQ19CRUFUPXkKIENPTkZJR19IVkNTPW0KIENPTkZJR19JQk1fQlNSPW0KLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKLUNPTkZJR19NQVhfUkFXX0RFVlM9MjU2Ci0jIENPTkZJR19IQU5HQ0hFQ0tfVElNRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogQ09ORklHX0kyQ19BTUQ4MTExPXkKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBNYWMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLUNPTkZJR19JMkNfUE9XRVJNQUM9eQotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BBU0VNST15Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfRERDPXkKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PRj15Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTUFUUk9YPXkKIENPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQogQ09ORklHX0ZCX01BVFJPWF9HPXkKIENPTkZJR19GQl9NQVRST1hfSTJDPW0KIENPTkZJR19GQl9NQVRST1hfTUFWRU49bQotQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQ9eQogQ09ORklHX0ZCX1JBREVPTj15Ci1DT05GSUdfRkJfUkFERU9OX0kyQz15Ci1DT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BUksgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAogQ09ORklHX0ZCX0lCTV9HWFQ0NTAwPXkKIENPTkZJR19GQl9QUzM9bQotQ09ORklHX0ZCX1BTM19ERUZBVUxUX1NJWkVfTT05Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQotCi0jCi0jIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19MT0dPPXkKLUNPTkZJR19GQl9MT0dPX0VYVFJBPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCiBDT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQotIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09YWUdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUlRVT1NPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9WWDIyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUFBDPXkKIENPTkZJR19TTkRfUE9XRVJNQUM9bQotQ09ORklHX1NORF9QT1dFUk1BQ19BVVRPX0RSQz15Ci1DT05GSUdfU05EX1BTMz1tCi1DT05GSUdfU05EX1BTM19ERUZBVUxUX1NUQVJUX0RFTEFZPTIwMDAKIENPTkZJR19TTkRfQU9BPW0KIENPTkZJR19TTkRfQU9BX0ZBQlJJQ19MQVlPVVQ9bQogQ09ORklHX1NORF9BT0FfT05ZWD1tCiBDT05GSUdfU05EX0FPQV9UQVM9bQogQ09ORklHX1NORF9BT0FfVE9PTklFPW0KLUNPTkZJR19TTkRfQU9BX1NPVU5EQlVTPW0KLUNPTkZJR19TTkRfQU9BX1NPVU5EQlVTX0kyUz1tCi1DT05GSUdfU05EX1VTQj15Ci0jIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDTUNJQT15Ci0jIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQlJJR0hUPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9ERUxMPXkKLUNPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9HWVJBVElPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049bQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15Ci1DT05GSUdfVVNCX0VIQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9bQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KLUNPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKLUNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQotQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotQ09ORklHX0lORklOSUJBTkRfSVBBVEg9bQogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCi0jIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKIENPTkZJR19NTFg0X0lORklOSUJBTkQ9bQotIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQotQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX1NSUD1tCiBDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KIENPTkZJR19FREFDPXkKLQotIwotIyBSZXBvcnRpbmcgc3Vic3lzdGVtcwotIwotIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15Ci0jIENPTkZJR19FREFDX0NFTEwgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX1BQQz15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CiBDT05GSUdfRVhUMl9GU19YSVA9eQogQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUNF9GU19TRUNVUklUWT15Ci1DT05GSUdfRlNfWElQPXkKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQyPXkKLSMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPXkKLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQogQ09ORklHX0pGU19GUz1tCiBDT05GSUdfSkZTX1BPU0lYX0FDTD15CiBDT05GSUdfSkZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX1hGU19GUz1tCi0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19PQ0ZTMl9GUz1tCi1DT05GSUdfT0NGUzJfRlNfTzJDQj1tCi1DT05GSUdfT0NGUzJfRlNfU1RBVFM9eQotQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0c9eQotIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRCBpcyBub3Qgc2V0CiBDT05GSUdfQlRSRlNfRlM9bQogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfTklMRlMyX0ZTPW0KLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz15Ci0jIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKLUNPTkZJR19IVUdFVExCX1BBR0U9eQotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCi0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz1tCi0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15Ci1DT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0KLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKIENPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01BQ19QQVJUSVRJT049eQotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKLUNPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQpAQCAtMTk3NywyMTkgKzQyNyw0NyBAQAogQ09ORklHX05MU19JU084ODU5XzE1PW0KIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19OTFNfVVRGOD1tCi0jIENPTkZJR19ETE0gaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX0xaT19DT01QUkVTUz1tCi1DT05GSUdfTFpPX0RFQ09NUFJFU1M9bQotQ09ORklHX1RFWFRTRUFSQ0g9eQotQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KLUNPTkZJR19URVhUU0VBUkNIX0JNPW0KLUNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCi1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotQ09ORklHX1NDSEVEU1RBVFM9eQotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfVFJBQ0lORz15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiBDT05GSUdfU0NIRURfVFJBQ0VSPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHPXkKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQ0FMTF9TVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CiBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKLSMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0Ci1DT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15Ci1DT05GSUdfREVCVUdHRVI9eQotQ09ORklHX0lSUVNUQUNLUz15CiBDT05GSUdfVklSUV9ERUJVRz15CiBDT05GSUdfQk9PVFhfVEVYVD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfWE9SX0JMT0NLUz15Ci1DT05GSUdfQVNZTkNfQ09SRT15Ci1DT05GSUdfQVNZTkNfTUVNQ1BZPXkKLUNPTkZJR19BU1lOQ19YT1I9eQotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fUk5HPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQotQ09ORklHX0NSWVBUT19TRVFJVj1tCi0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPXkKLUNPTkZJR19DUllQVE9fQ1RSPW0KLSMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLUNPTkZJR19DUllQVE9fQ1JDMzJDPW0KIENPTkZJR19DUllQVE9fTUQ0PW0KLUNPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1NIQTE9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCi0KLSMKLSMgQ2lwaGVycwotIwogQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQogQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fU0FMU0EyMD1tCi0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19MWk89bQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwppbmRleCA0MDNlODJlLi4wNGFlMDc0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTEsNDQ5ICsxLDc1IEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1Ci0jIEZyaSBPY3QgMTYgMTE6Mzc6MTUgMjAwOQotIwogQ09ORklHX1BQQzY0PXkKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0JPT0szU182NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szRV82ND15Ci1DT05GSUdfUFBDX0JPT0szRT15Ci1DT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQk9PS0U9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF82ND15Ci1DT05GSUdfUFBDX0JPT0szRV9NTVU9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotQ09ORklHX1BQQ19QRVJGX0NUUlM9eQogQ09ORklHX1NNUD15Ci1DT05GSUdfTlJfQ1BVUz0zMgotQ09ORklHXzY0QklUPXkKLUNPTkZJR19XT1JEX1NJWkU9NjQKLUNPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKLUNPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DT01QQVQ9eQotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfT0ZfUExBVEZPUk1fUENJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19QT1NJWF9NUVVFVUVfU1lTQ1RMPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX1RBU0tTVEFUUz15CiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKLSMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD02NAotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBTPXkKLSMgQ09ORklHX0NHUk9VUF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DR1JPVVBfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX0ZSRUVaRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ0dST1VQX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVU0VUUz15Ci1DT05GSUdfUFJPQ19QSURfQ1BVU0VUPXkKLSMgQ09ORklHX0NHUk9VUF9DUFVBQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFU09VUkNFX0NPVU5URVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCi1DT05GSUdfUEVSRl9FVkVOVFM9eQotQ09ORklHX0VWRU5UX1BST0ZJTEU9eQotIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci1DT05GSUdfUENJX1FVSVJLUz15Ci1DT05GSUdfU0xVQl9ERUJVRz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15CiBDT05GSUdfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfU1RPUF9NQUNISU5FPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotQ09ORklHX0JMT0NLX0NPTVBBVD15Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD15Ci0jIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKLSMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAotCi0jCi0jIENQVSBGcmVxdWVuY3kgZHJpdmVycwotIwotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19DT01QQVRfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19JT01NVV9WTUVSR0U9eQotQ09ORklHX0lPTU1VX0hFTFBFUj15Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLSMgQ09ORklHX05VTUEgaXMgbm90IHNldAotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0yNTYKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15Ci1DT05GSUdfU1BBUlNFTUVNPXkKLUNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKLUNPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15Ci1DT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUD15Ci0jIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfTUlHUkFUSU9OPXkKLUNPTkZJR19QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19IQVZFX01MT0NLPXkKLUNPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotIyBDT05GSUdfUFBDX0hBU19IQVNIXzY0SyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwotIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDQ09NUD15Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci0jIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQogQ09ORklHX1BDSV9NU0k9eQotIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCi0jIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDST1tCi0jIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxPQ0FUQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAwMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19ORVQ9eQotQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKIENPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCi0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0Ci1DT05GSUdfWEZSTV9JUENPTVA9bQogQ09ORklHX05FVF9LRVk9bQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD15Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KLSMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQogQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19TSVA9bQogQ09ORklHX05GX0NPTk5UUkFDS19URlRQPW0KIENPTkZJR19ORl9DVF9ORVRMSU5LPW0KIENPTkZJR19ORVRGSUxURVJfVFBST1hZPW0KLUNPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQ9bQpAQCAtNDU0LDcgKzgwLDYgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEw9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQpAQCAtNDY4LDI0ICs5MywxNCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE09bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQ9bQotIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCkBAIC00OTcsMjAgKzExMiwxMCBAQAogQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19ORl9OQVQ9bQotQ09ORklHX05GX05BVF9ORUVERUQ9eQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX05GX05BVF9TTk1QX0JBU0lDPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fR1JFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotQ09ORklHX05GX05BVF9BTUFOREE9bQotQ09ORklHX05GX05BVF9QUFRQPW0KLUNPTkZJR19ORl9OQVRfSDMyMz1tCi1DT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTUxOSw4MDAgKzEyNCwxMDAgQEAKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19MTEM9eQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKLUNPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9GRD15Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9OQkQ9bQotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCi0jCi1DT05GSUdfSURFX1hGRVJfTU9ERT15Ci1DT05GSUdfSURFX1RJTUlOR1M9eQotQ09ORklHX0lERV9BVEFQST15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9eQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYPXkKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX05FVExJTks9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi1DT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQotQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NSUF9BVFRSUz15Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAotIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCi1DT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKIENPTkZJR19TQ1NJX0lQUj15Ci1DT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQotQ09ORklHX1NDU0lfSVBSX0RVTVA9eQotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MUEZDPW0KLSMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9ERUJVRz1tCi0jIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKLUNPTkZJR19TQVRBX1BNUD15Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQotQ09ORklHX0FUQV9TRkY9eQogQ09ORklHX1NBVEFfU1ZXPXkKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9XSU5CT05EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPXkKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2IGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENl9QUT15Ci0jIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQotIyBDT05GSUdfRE1fTE9HX1VTRVJTUEFDRSBpcyBub3Qgc2V0CiBDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRE1fTVVMVElQQVRIPW0KLSMgQ09ORklHX0RNX01VTFRJUEFUSF9RTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEhfU1QgaXMgbm90IHNldAotIyBDT05GSUdfRE1fREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogQ09ORklHX0lFRUUxMzk0PXkKIENPTkZJR19JRUVFMTM5NF9PSENJMTM5ND15Ci0jIENPTkZJR19JRUVFMTM5NF9QQ0lMWU5YIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFMTM5NF9TQlAyPW0KLUNPTkZJR19JRUVFMTM5NF9FVEgxMzk0X1JPTV9FTlRSWT15CiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfUkFXSU89eQogQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KLSMgQ09ORklHX0lFRUUxMzk0X1ZFUkJPU0VERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKLSMgQ09ORklHX01BQ19FTVVNT1VTRUJUTiBpcyBub3Qgc2V0CiBDT05GSUdfV0lOREZBUk09eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPW0KIENPTkZJR19CT05ESU5HPW0KLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKIENPTkZJR19UVU49bQotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPXkKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAogQ09ORklHX0JST0FEQ09NX1BIWT1tCi0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAogQ09ORklHX1NVTkdFTT15Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfVkVORE9SXzNDT009eQogQ09ORklHX1ZPUlRFWD15Ci0jIENPTkZJR19UWVBIT09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogQ09ORklHX05FVF9QQ0k9eQogQ09ORklHX1BDTkVUMzI9eQotIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwPXkKLSMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0FDRU5JQz15CiBDT05GSUdfQUNFTklDX09NSVRfVElHT05fST15Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQotIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKIENPTkZJR19JWEdCPW0KLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRkMgaXMgbm90IHNldAotIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKLSMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKIENPTkZJR19ORVRQT0xMX1RSQVA9eQotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci0jIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQotQ09ORklHX1NFUklPX0k4MDQyPXkKICMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9DUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0jIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFXX0RSSVZFUj15Ci1DT05GSUdfTUFYX1JBV19ERVZTPTI1NgotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci1DT05GSUdfSTJDX0FMR09CSVQ9eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfQU1EODExMT15Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCi0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15Ci1DT05GSUdfRkJfRERDPXkKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfQkFDS0xJR0hUPXkKLUNPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQotQ09ORklHX0ZCX1RJTEVCTElUVElORz15Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PRj15Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTUFUUk9YPXkKIENPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQpAQCAtMTMyMCw0MjcgKzIyNSw1MCBAQAogQ09ORklHX0ZCX01BVFJPWF9JMkM9bQogQ09ORklHX0ZCX01BVFJPWF9NQVZFTj1tCiBDT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAotIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLUNPTkZJR19CQUNLTElHSFRfR0VORVJJQz15Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD1tCi1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCiBDT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BDST15Ci0jIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQX01PREVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FaVDMzMjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0JUODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DQTAxMDYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1hZR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyODEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX1VTWDJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ01DSUE9eQotIyBDT05GSUdfU05EX1ZYUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9QREFVRElPQ0YgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQogQ09ORklHX0hJRF9EUkFHT05SSVNFPXkKLSMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci1DT05GSUdfSElEX0tZRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfVFdJTkhBTj15Ci1DT05GSUdfSElEX0tFTlNJTkdUT049eQotQ09ORklHX0hJRF9MT0dJVEVDSD15Ci0jIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKIENPTkZJR19ISURfTlRSSUc9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19ISURfR1JFRU5BU0lBPXkKLSMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15Ci0jIENPTkZJR19TTUFSVEpPWVBMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19ISURfVEhSVVNUTUFTVEVSPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1pFUk9QTFVTPXkKLSMgQ09ORklHX1pFUk9QTFVTX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15Ci1DT05GSUdfVVNCX0RFVklDRV9DTEFTUz15Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9BUFBMRURJU1BMQVk9bQotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORD1tCi0jIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9BQ0NFU1MgaXMgbm90IHNldAotQ09ORklHX0lORklOSUJBTkRfQUREUl9UUkFOUz15CiBDT05GSUdfSU5GSU5JQkFORF9NVEhDQT1tCi1DT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15Ci0jIENPTkZJR19JTkZJTklCQU5EX0lQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfTkVTIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KLSMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ00gaXMgbm90IHNldAotQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORklOSUJBTkRfU1JQIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX0lTRVI9bQogQ09ORklHX0VEQUM9eQotCi0jCi0jIFJlcG9ydGluZyBzdWJzeXN0ZW1zCi0jCi0jIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FREFDX01NX0VEQUM9eQotIyBDT05GSUdfRURBQ19DUEM5MjUgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAotCi0jCi0jIFNQSSBSVEMgZHJpdmVycwotIwotCi0jCi0jIFBsYXRmb3JtIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQpAQCAtMTc0OCwxNjMgKzI3Niw0NSBAQAogQ09ORklHX0VYVDJfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZPXkKLSMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX1hJUD15Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEMj15Ci0jIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKIENPTkZJR19SRUlTRVJGU19GUz15Ci0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19KRlNfRlM9eQogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BVVRPRlM0X0ZTPW0KLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQotIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCi0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KLUNPTkZJR19ORlNEX1YyX0FDTD15Ci1DT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9bQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19TVU5SUENfWFBSVF9SRE1BPW0KLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTM9bQotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KLSMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NJRlNfWEFUVFI9eQogQ09ORklHX0NJRlNfUE9TSVg9eQotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzc3NT1tCkBAIC0xOTQyLDI1NyArMzUyLDQ2IEBACiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLUNPTkZJR19DUkMxNj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfQ1JDX0lUVV9UPW0KLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9bQotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19MWk9fQ09NUFJFU1M9bQotQ09ORklHX0xaT19ERUNPTVBSRVNTPW0KLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci1DT05GSUdfU0NIRURTVEFUUz15Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLUNPTkZJR19UUkFDRV9JUlFGTEFHUz15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0xBVEVOQ1lUT1A9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9QX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfRVZFTlRfVFJBQ0lORz15Ci1DT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKLUNPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKLUNPTkZJR19UUkFDSU5HPXkKLUNPTkZJR19HRU5FUklDX1RSQUNFUj15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLUNPTkZJR19GVFJBQ0U9eQotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTT0ZGX1RSQUNFUj15CiBDT05GSUdfU0NIRURfVFJBQ0VSPXkKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLUNPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKLSMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQogQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQogQ09ORklHX1hNT049eQotIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19ERUJVR0dFUj15Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotQ09ORklHX1hPUl9CTE9DS1M9eQotQ09ORklHX0FTWU5DX0NPUkU9eQotQ09ORklHX0FTWU5DX01FTUNQWT15Ci1DT05GSUdfQVNZTkNfWE9SPXkKLUNPTkZJR19BU1lOQ19QUT15Ci1DT05GSUdfQVNZTkNfUkFJRDZfUkVDT1Y9eQotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HPW0KLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLUNPTkZJR19DUllQVE9fR0YxMjhNVUw9bQogQ09ORklHX0NSWVBUT19OVUxMPW0KLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCi1DT05GSUdfQ1JZUFRPX1NFUUlWPW0KLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19DVFI9bQotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotQ09ORklHX0NSWVBUT19HSEFTSD1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fVEVBPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLSMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTFpPPW0KLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKaW5kZXggMTJkYzdjNC4uOWQ2NGE2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCkBAIC0xLDIxNSArMSw0NCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjMwotIyBUdWUgTm92IDExIDE5OjM3OjAxIDIwMDgKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHXzZ4eD15Ci0jIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQweCBpcyBub3Qgc2V0Ci0jIENPTkZJR180NHggaXMgbm90IHNldAotIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTVAgaXMgbm90IHNldAotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfUkVEQk9PVD15Ci1DT05GSUdfSElCRVJOQVRFXzMyPXkKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLUNPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKIENPTkZJR19UQVNLU1RBVFM9eQogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKIENPTkZJR19BVURJVD15Ci1DT05GSUdfQVVESVRTWVNDQUxMPXkKLUNPTkZJR19BVURJVF9UUkVFPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfQ0dST1VQUz15Ci0jIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9OUz15Ci0jIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX0RFVklDRT15Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1VTRVJfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX0NHUk9VUF9TQ0hFRD15CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQogQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKLSMgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVMQVk9eQotQ09ORklHX05BTUVTUEFDRVM9eQorQ09ORklHX0NHUk9VUF9TQ0hFRD15CitDT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQogQ09ORklHX1VUU19OUz15CiBDT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLUNPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9bQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9DTEs9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0tNT0Q9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQotQ09ORklHX0xTRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQogQ09ORklHX0JMS19ERVZfSU5URUdSSVRZPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotQ09ORklHX0ZSRUVaRVI9eQotQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotQ09ORklHX0NMQVNTSUMzMj15Ci1DT05GSUdfUFBDX0NIUlA9eQotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTJ4eD15Ci0jIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19FRklLQT15Ci0jIENPTkZJR19QUENfTElURTUyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEM1MjAwX0JVR0ZJWD15CiBDT05GSUdfUFBDX01QQzUyMDBfR1BJTz15Ci1DT05GSUdfUFBDX1BNQUM9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15CiBDT05GSUdfTVBDODI3Ml9BRFM9eQogQ09ORklHX1BRMkZBRFM9eQogQ09ORklHX0VQODI0OEU9eQogQ09ORklHX01HQ09HRT15Ci1DT05GSUdfUFEyQURTPXkKLUNPTkZJR184MjYwPXkKLUNPTkZJR184MjcyPXkKLUNPTkZJR19QUTJfQURTX1BDSV9QSUM9eQogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzF4X1JEQj15CiBDT05GSUdfTVBDODMyeF9NRFM9eQpAQCAtMjIyLDI2MCArNTEsODQgQEAKIENPTkZJR19NUEM4Mzd4X1JEQj15CiBDT05GSUdfU0JDODM0eD15CiBDT05GSUdfQVNQODM0eD15Ci1DT05GSUdfUFBDX01QQzgzMXg9eQotQ09ORklHX1BQQ19NUEM4MzJ4PXkKLUNPTkZJR19QUENfTVBDODM0eD15Ci1DT05GSUdfUFBDX01QQzgzN3g9eQogQ09ORklHX1BQQ184Nnh4PXkKIENPTkZJR19NUEM4NjQxX0hQQ049eQogQ09ORklHX1NCQzg2NDFEPXkKIENPTkZJR19NUEM4NjEwX0hQQ0Q9eQogQ09ORklHX0dFRl9TQkM2MTA9eQotQ09ORklHX01QQzg2NDE9eQotQ09ORklHX01QQzg2MTA9eQotIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAotQ09ORklHX1BQQ19OQVRJVkU9eQotIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0lQSUM9eQotQ09ORklHX01QSUM9eQotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0k4MjU5PXkKLUNPTkZJR19QUENfUlRBUz15Ci0jIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAotQ09ORklHX1JUQVNfUFJPQz15Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfTVBDMTA2PXkKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUT15Ci1DT05GSUdfQ1BVX0ZSRVFfVEFCTEU9eQogQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKIENPTkZJR19DUFVfRlJFUV9TVEFUPW0KIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0U9eQotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQotQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCiBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCi0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCi0jCiBDT05GSUdfQ1BVX0ZSRVFfUE1BQz15Ci0jIENPTkZJR19QUEM2MDFfU1lOQ19GSVggaXMgbm90IHNldAogQ09ORklHX1RBVT15Ci0jIENPTkZJR19UQVVfSU5UIGlzIG5vdCBzZXQKIENPTkZJR19UQVVfQVZFUkFHRT15CiBDT05GSUdfUVVJQ0NfRU5HSU5FPXkKIENPTkZJR19RRV9HUElPPXkKLUNPTkZJR19DUE0yPXkKLUNPTkZJR19GU0xfVUxJMTU3NT15Ci1DT05GSUdfQ1BNPXkKIENPTkZJR19QUENfQkVTVENPTU09eQotQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9bQotQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9bQotQ09ORklHX1BQQ19CRVNUQ09NTV9HRU5fQkQ9bQogQ09ORklHX01QQzh4eHhfR1BJTz15Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKK0NPTkZJR19NQ1VfTVBDODM0OUVNSVRYPW0KIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19USUNLX09ORVNIT1Q9eQogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAogQ09ORklHX0haXzEwMDA9eQotQ09ORklHX0haPTEwMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKLSMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9UQVJHRVRTPSIiCi1DT05GSUdfQVJDSF9XQU5UU19GUkVFWkVSX0NPTlRST0w9eQogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci0jIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19DQU5fUE1fVFJBQ0U9eQotQ09ORklHX1BNX1NMRUVQPXkKLUNPTkZJR19TVVNQRU5EPXkKLSMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKIENPTkZJR19ISUJFUk5BVElPTj15Ci1DT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgotQ09ORklHX0FQTV9FTVVMQVRJT049eQotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwogQ09ORklHX0lTQT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfRlNMX1NPQz15Ci1DT05GSUdfRlNMX1BDST15Ci1DT05GSUdfRlNMX0xCQz15Ci1DT05GSUdfRlNMX0dUTT15Ci1DT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLUNPTkZJR19QQ0lfODI2MD15CiBDT05GSUdfUENJRVBPUlRCVVM9eQotQ09ORklHX1BDSUVBRVI9eQotQ09ORklHX1BDSUVBU1BNPXkKLSMgQ09ORklHX1BDSUVBU1BNX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CiBDT05GSUdfUENJX01TST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKLSMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUENNQ0lBPXkKLUNPTkZJR19QQ01DSUFfTE9BRF9DSVM9eQotQ09ORklHX1BDTUNJQV9JT0NUTD15Ci1DT05GSUdfQ0FSREJVUz15Ci0KLSMKLSMgUEMtY2FyZCBicmlkZ2VzCi0jCiBDT05GSUdfWUVOVEE9eQotQ09ORklHX1lFTlRBX08yPXkKLUNPTkZJR19ZRU5UQV9SSUNPSD15Ci1DT05GSUdfWUVOVEFfVEk9eQotQ09ORklHX1lFTlRBX0VORV9UVU5FPXkKLUNPTkZJR19ZRU5UQV9UT1NISUJBPXkKIENPTkZJR19QRDY3Mjk9bQogQ09ORklHX0k4MjA5Mj1tCiBDT05GSUdfSTgyMzY1PW0KLSMgQ09ORklHX1RDSUMgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQV9QUk9CRT15Ci1DT05GSUdfUENDQVJEX05PTlNUQVRJQz15Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFTX1JBUElESU89eQotIyBDT05GSUdfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKIENPTkZJR19BRFZBTkNFRF9PUFRJT05TPXkKLSMgQ09ORklHX0xPV01FTV9TSVpFX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLSMgQ09ORklHX1BBR0VfT0ZGU0VUX0JPT0wgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLSMgQ09ORklHX0tFUk5FTF9TVEFSVF9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLSMgQ09ORklHX1RBU0tfU0laRV9CT09MIGlzIG5vdCBzZXQKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKIENPTkZJR19YRlJNX1NVQl9QT0xJQ1k9eQotQ09ORklHX1hGUk1fTUlHUkFURT15CiBDT05GSUdfWEZSTV9TVEFUSVNUSUNTPXkKLUNPTkZJR19YRlJNX0lQQ09NUD1tCiBDT05GSUdfTkVUX0tFWT1tCiBDT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15Ci1DT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKLSMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15CiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15CiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KLUNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KLUNPTkZJR19JTkVUX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQogQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQotQ09ORklHX0lORVRfTFJPPXkKIENPTkZJR19JTkVUX0RJQUc9bQotQ09ORklHX0lORVRfVENQX0RJQUc9bQogQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkKLUNPTkZJR19UQ1BfQ09OR19CSUM9bQotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19UQ1BfQ09OR19XRVNUV09PRD1tCi1DT05GSUdfVENQX0NPTkdfSFRDUD1tCiBDT05GSUdfVENQX0NPTkdfSFNUQ1A9bQogQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KLUNPTkZJR19UQ1BfQ09OR19WRUdBUz1tCiBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQogQ09ORklHX1RDUF9DT05HX0xQPW0KIENPTkZJR19UQ1BfQ09OR19WRU5PPW0KIENPTkZJR19UQ1BfQ09OR19ZRUFIPW0KIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCi0jIENPTkZJR19ERUZBVUxUX0JJQyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DVUJJQz15Ci0jIENPTkZJR19ERUZBVUxUX0hUQ1AgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9WRUdBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1dFU1RXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfUkVOTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCiBDT05GSUdfVENQX01ENVNJRz15Ci1DT05GSUdfSVBWNj1tCiBDT05GSUdfSVBWNl9QUklWQUNZPXkKIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKIENPTkZJR19JUFY2X1JPVVRFX0lORk89eQpAQCAtNDg0LDQwICsxMzcsMTggQEAKIENPTkZJR19JTkVUNl9FU1A9bQogQ09ORklHX0lORVQ2X0lQQ09NUD1tCiBDT05GSUdfSVBWNl9NSVA2PW0KLUNPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCi1DT05GSUdfSU5FVDZfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCiBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OPW0KLUNPTkZJR19JUFY2X1NJVD1tCi1DT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKIENPTkZJR19JUFY2X1NVQlRSRUVTPXkKIENPTkZJR19JUFY2X01ST1VURT15CiBDT05GSUdfSVBWNl9QSU1TTV9WMj15CiBDT05GSUdfTkVUTEFCRUw9eQotQ09ORklHX05FVFdPUktfU0VDTUFSSz15CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLUNPTkZJR19CUklER0VfTkVURklMVEVSPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLPXkKIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTPXkKLUNPTkZJR19ORl9DVF9QUk9UT19EQ0NQPW0KLUNPTkZJR19ORl9DVF9QUk9UT19HUkU9bQotQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQogQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQogQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQpAQCAtNTMwLDcgKzE2MSw2IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05GX0NUX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KQEAgLTUzOSw3ICsxNjksNiBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUks9bQpAQCAtNTUwLDcgKzE3OSw2IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQpAQCAtNTY5LDggKzE5Nyw2IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCi0jIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KQEAgLTU3OCwxMiArMjA0LDYgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCi0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkZfREVGUkFHX0lQVjQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KICMgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQpAQCAtNTk3LDIyICsyMTcsMTAgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfTkZfTkFUPW0KLUNPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfTkZfTkFUX1BST1RPX0RDQ1A9bQotQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQotQ09ORklHX05GX05BVF9QUk9UT19VRFBMSVRFPW0KLUNPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCi1DT05GSUdfTkZfTkFUX0ZUUD1tCi1DT05GSUdfTkZfTkFUX0lSQz1tCi1DT05GSUdfTkZfTkFUX1RGVFA9bQotQ09ORklHX05GX05BVF9BTUFOREE9bQotQ09ORklHX05GX05BVF9QUFRQPW0KLUNPTkZJR19ORl9OQVRfSDMyMz1tCi1DT05GSUdfTkZfTkFUX1NJUD1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTYyMiwxMCArMjMwLDYgQEAKIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi0KLSMKLSMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpAQCAtNjM3LDE4ICsyNDEsMTMgQEAKIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiBDT05GSUdfSVA2X05GX01BVENIX01IPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCiBDT05GSUdfSVA2X05GX1NFQ1VSSVRZPW0KLQotIwotIyBERUNuZXQ6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KIENPTkZJR19CUklER0VfRUJUX0JST1VURT1tCiBDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCkBAIC02NzIsNjcgKzI3MSwyNCBAQAogQ09ORklHX0JSSURHRV9FQlRfVUxPRz1tCiBDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiBDT05GSUdfSVBfRENDUD1tCi1DT05GSUdfSU5FVF9EQ0NQX0RJQUc9bQotQ09ORklHX0lQX0RDQ1BfQUNLVkVDPXkKLQotIwotIyBEQ0NQIENDSURzIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLUNPTkZJR19JUF9EQ0NQX0NDSUQyPW0KLSMgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0lQX0RDQ1BfQ0NJRDM9bQotIyBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRENDUF9DQ0lEM19SVE89MTAwCi1DT05GSUdfSVBfRENDUF9URlJDX0xJQj1tCi0KLSMKLSMgRENDUCBLZXJuZWwgSGFja2luZwotIwotIyBDT05GSUdfSVBfRENDUF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCi1DT05GSUdfSVBfU0NUUD1tCi0jIENPTkZJR19TQ1RQX0RCR19NU0cgaXMgbm90IHNldAotIyBDT05GSUdfU0NUUF9EQkdfT0JKQ05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19OT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfSE1BQ19TSEExIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1RQX0hNQUNfTUQ1PXkKIENPTkZJR19USVBDPW0KLSMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAotIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQVRNPW0KIENPTkZJR19BVE1fQ0xJUD1tCi0jIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fTEFORT1tCi0jIENPTkZJR19BVE1fTVBPQSBpcyBub3Qgc2V0CiBDT05GSUdfQVRNX0JSMjY4ND1tCi0jIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19TVFA9bQogQ09ORklHX0JSSURHRT1tCi0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKIENPTkZJR19WTEFOXzgwMjFRPW0KLSMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CiBDT05GSUdfREVDTkVUPW0KIENPTkZJR19ERUNORVRfUk9VVEVSPXkKLUNPTkZJR19MTEM9bQotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiBDT05GSUdfSVBYPW0KLSMgQ09ORklHX0lQWF9JTlRFUk4gaXMgbm90IHNldAogQ09ORklHX0FUQUxLPW0KIENPTkZJR19ERVZfQVBQTEVUQUxLPW0KLSMgQ09ORklHX0xUUEMgaXMgbm90IHNldAotIyBDT05GSUdfQ09QUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBERFA9bQogQ09ORklHX0lQRERQX0VOQ0FQPXkKIENPTkZJR19JUEREUF9ERUNBUD15Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogQ09ORklHX1dBTl9ST1VURVI9bQogQ09ORklHX05FVF9TQ0hFRD15Ci0KLSMKLSMgUXVldWVpbmcvU2NoZWR1bGluZwotIwogQ09ORklHX05FVF9TQ0hfQ0JRPW0KIENPTkZJR19ORVRfU0NIX0hUQj1tCiBDT05GSUdfTkVUX1NDSF9IRlNDPW0KQEAgLTc0NywxNSArMzAzLDkgQEAKIENPTkZJR19ORVRfU0NIX0RTTUFSSz1tCiBDT05GSUdfTkVUX1NDSF9ORVRFTT1tCiBDT05GSUdfTkVUX1NDSF9JTkdSRVNTPW0KLQotIwotIyBDbGFzc2lmaWNhdGlvbgotIwotQ09ORklHX05FVF9DTFM9eQogQ09ORklHX05FVF9DTFNfQkFTSUM9bQogQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCiBDT05GSUdfTkVUX0NMU19ST1VURTQ9bQotQ09ORklHX05FVF9DTFNfUk9VVEU9eQogQ09ORklHX05FVF9DTFNfRlc9bQogQ09ORklHX05FVF9DTFNfVTMyPW0KIENPTkZJR19DTFNfVTMyX1BFUkY9eQpAQCAtNzY0LDcgKzMxNCw2IEBACiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCiBDT05GSUdfTkVUX0NMU19GTE9XPW0KIENPTkZJR19ORVRfRU1BVENIPXkKLUNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCiBDT05GSUdfTkVUX0VNQVRDSF9DTVA9bQogQ09ORklHX05FVF9FTUFUQ0hfTkJZVEU9bQogQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KQEAgLTc4MSw1MiArMzMwLDE2IEBACiBDT05GSUdfTkVUX0FDVF9TSU1QPW0KIENPTkZJR19ORVRfQUNUX1NLQkVESVQ9bQogQ09ORklHX05FVF9DTFNfSU5EPXkKLUNPTkZJR19ORVRfU0NIX0ZJRk89eQotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKIENPTkZJR19JUkRBPW0KLQotIwotIyBJckRBIHByb3RvY29scwotIwogQ09ORklHX0lSTEFOPW0KIENPTkZJR19JUk5FVD1tCiBDT05GSUdfSVJDT01NPW0KLSMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAotCi0jCi0jIElyREEgb3B0aW9ucwotIwogQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQotIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycwotIwotCi0jCi0jIFNJUiBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX0lSVFRZX1NJUj1tCi0KLSMKLSMgRG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RPTkdMRSBpcyBub3Qgc2V0CiBDT05GSUdfS0lOR1NVTl9ET05HTEU9bQogQ09ORklHX0tTREFaWkxFX0RPTkdMRT1tCiBDT05GSUdfS1M5NTlfRE9OR0xFPW0KLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKIENPTkZJR19VU0JfSVJEQT1tCiBDT05GSUdfU0lHTUFURUxfRklSPW0KIENPTkZJR19OU0NfRklSPW0KQEAgLTg0NiwxMyArMzU5LDYgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JUX0hDSVVTQj1tCi1DT05GSUdfQlRfSENJVVNCX1NDTz15Ci0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15CiBDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQEAgLTg2NSwxODggKzM3MSw0NyBAQAogQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIENPTkZJR19CVF9IQ0lCVFVBUlQ9bQogQ09ORklHX0JUX0hDSVZIQ0k9bQotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19GSUJfUlVMRVM9eQotQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT1tCi1DT05GSUdfTkw4MDIxMT15Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19NQUM4MDIxMT1tCi0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKLUNPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQotIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUwgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9InBpZCIKIENPTkZJR19NQUM4MDIxMV9NRVNIPXkKIENPTkZJR19NQUM4MDIxMV9MRURTPXkKIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTPXkKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotQ09ORklHX0lFRUU4MDIxMT1tCi1DT05GSUdfSUVFRTgwMjExX0RFQlVHPXkKLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfV0VQPW0KLUNPTkZJR19JRUVFODAyMTFfQ1JZUFRfQ0NNUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1RLSVA9bQotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfOVA9bQogQ09ORklHX05FVF85UF9WSVJUSU89bQotIyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfREVWUkVTPXkKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfRVZFTlRTPXkKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCiBDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQotIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX1BDX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1BBUlBPUlRfMTI4ND15Ci1DT05GSUdfUEFSUE9SVF9OT1RfUEM9eQogQ09ORklHX1BOUD15Ci1DT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTPXkKLQotIwotIyBQcm90b2NvbHMKLSMKIENPTkZJR19JU0FQTlA9eQotIyBDT05GSUdfUE5QQUNQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKIENPTkZJR19NQUNfRkxPUFBZPW0KLSMgQ09ORklHX0JMS19ERVZfWEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTE2Mzg0Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiBDT05GSUdfVklSVElPX0JMSz1tCiBDT05GSUdfQkxLX0RFVl9IRD15Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV85M0NYNj1tCi0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tCi0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19TRU5TT1JTX1RTTDI1NTA9bQorQ09ORklHX0VFUFJPTV9BVDI0PW0KK0NPTkZJR19FRVBST01fTEVHQUNZPW0KK0NPTkZJR19FRVBST01fTUFYNjg3NT1tCitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9ERUxLSU4gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotQ09ORklHX0JMS19ERVZfSURFQ0RfVkVSQk9TRV9FUlJPUlM9eQotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKICMgQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0lJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQz15CiBDT05GSUdfQkxLX0RFVl9JREVfUE1BQ19BVEExMDBGSVJTVD15Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQz15Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19SQUlEX0FUVFJTPW0KLUNPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci1DT05GSUdfU0NTSV9UR1Q9bQotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD1tCiBDT05GSUdfQ0hSX0RFVl9PU1NUPW0KQEAgLTEwNTUsMTcxICs0MjAsNDAgQEAKIENPTkZJR19DSFJfREVWX1NHPXkKIENPTkZJR19DSFJfREVWX1NDSD1tCiBDT05GSUdfU0NTSV9FTkNMT1NVUkU9bQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCi0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NSUF9BVFRSUz1tCiBDT05GSUdfU0NTSV9TUlBfVEdUX0FUVFJTPXkKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV83MDAwRkFTU1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRU5FUklDX05DUjUzODBfTU1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M0MTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9UMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTUVTSD1tCi1DT05GSUdfU0NTSV9NRVNIX1NZTkNfUkFURT01Ci1DT05GSUdfU0NTSV9NRVNIX1JFU0VUX0RFTEFZX01TPTQwMDAKIENPTkZJR19TQ1NJX01BQzUzQzk0PW0KIENPTkZJR19TQ1NJX1NSUD1tCiBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUE9eQotIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0RIPXkKIENPTkZJR19TQ1NJX0RIX1JEQUM9bQogQ09ORklHX1NDU0lfREhfSFBfU1c9bQogQ09ORklHX1NDU0lfREhfRU1DPW0KLSMgQ09ORklHX1NDU0lfREhfQUxVQSBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9GU0w9bQotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotQ09ORklHX0FUQV9QSUlYPW0KLSMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CiBDT05GSUdfUERDX0FETUE9bQotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX0dFTkVSSUM9bQotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVNBUE5QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX01QQzUyeHg9bQotIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1BJSVg9bQogQ09ORklHX1BBVEFfT1BUSURNQT1tCi0jIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9RREkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CitDT05GSUdfUEFUQV9TQ0g9bQogQ09ORklHX1BBVEFfVklBPW0KLSMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkRfVkxCIGlzIG5vdCBzZXQKIENPTkZJR19QQVRBX1BMQVRGT1JNPW0KIENPTkZJR19QQVRBX09GX1BMQVRGT1JNPW0KLUNPTkZJR19QQVRBX1NDSD1tCitDT05GSUdfQVRBX0dFTkVSSUM9bQogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9bQogQ09ORklHX01EX1JBSUQwPW0KIENPTkZJR19NRF9SQUlEMT1tCiBDT05GSUdfTURfUkFJRDEwPW0KIENPTkZJR19NRF9SQUlENDU2PW0KLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT1tCkBAIC0xMjI5LDI0ICs0NjMsMTAgQEAKIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQogQ09ORklHX0RNX01VTFRJUEFUSD1tCi0jIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CiBDT05GSUdfRE1fVUVWRU5UPXkKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZwotIwogQ09ORklHX0ZJUkVXSVJFPW0KIENPTkZJR19GSVJFV0lSRV9PSENJPW0KLUNPTkZJR19GSVJFV0lSRV9PSENJX0RFQlVHPXkKIENPTkZJR19GSVJFV0lSRV9TQlAyPW0KLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQogQ09ORklHX0FEQj15CiBDT05GSUdfQURCX0NVREE9eQogQ09ORklHX0FEQl9QTVU9eQpAQCAtMTI1NSwxNCArNDc1LDEyIEBACiBDT05GSUdfUE1BQ19BUE1fRU1VPXkKIENPTkZJR19QTUFDX01FRElBQkFZPXkKIENPTkZJR19QTUFDX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19QTUFDX0JBQ0tMSUdIVF9MRUdBQ1kgaXMgbm90IHNldAogQ09ORklHX0FEQl9NQUNJTz15CiBDT05GSUdfSU5QVVRfQURCSElEPXkKIENPTkZJR19NQUNfRU1VTU9VU0VCVE49eQogQ09ORklHX1RIRVJNX1dJTkRUVU5ORUw9bQogQ09ORklHX1RIRVJNX0FEVDc0Nlg9bQogQ09ORklHX1dJTkRGQVJNPXkKLSMgQ09ORklHX0FOU0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19SQUNLTUVURVI9bQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0lGQj1tCkBAIC0xMjczLDEyICs0OTEsNiBAQAogQ09ORklHX1RVTj1tCiBDT05GSUdfVkVUSD1tCiBDT05GSUdfTkVUX1NCMTAwMD1tCi0jIENPTkZJR19BUkNORVQgaXMgbm90IHNldAotQ09ORklHX1BIWUxJQj15Ci0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX01BUlZFTExfUEhZPW0KIENPTkZJR19EQVZJQ09NX1BIWT1tCiBDT05GSUdfUVNFTUlfUEhZPW0KQEAgLTEyODksNzkgKzUwMSwzNiBAQAogQ09ORklHX0JST0FEQ09NX1BIWT1tCiBDT05GSUdfSUNQTFVTX1BIWT1tCiBDT05GSUdfUkVBTFRFS19QSFk9bQotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLUNPTkZJR19NRElPX0JJVEJBTkc9eQotIyBDT05GSUdfTURJT19PRl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST1tCiBDT05GSUdfTUFDRT1tCi0jIENPTkZJR19NQUNFX0FBVUlfUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQk1BQz1tCiBDT05GSUdfSEFQUFlNRUFMPW0KIENPTkZJR19TVU5HRU09bQogQ09ORklHX0NBU1NJTkk9bQogQ09ORklHX05FVF9WRU5ET1JfM0NPTT15Ci0jIENPTkZJR19FTDEgaXMgbm90IHNldAotIyBDT05GSUdfRUwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VMUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTDE2IGlzIG5vdCBzZXQKIENPTkZJR19FTDM9bQotIyBDT05GSUdfM0M1MTUgaXMgbm90IHNldAogQ09ORklHX1ZPUlRFWD1tCiBDT05GSUdfVFlQSE9PTj1tCi0jIENPTkZJR19MQU5DRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1ZFTkRPUl9TTUM9eQotIyBDT05GSUdfV0Q4MHgzIGlzIG5vdCBzZXQKIENPTkZJR19VTFRSQT1tCi0jIENPTkZJR19TTUM5MTk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAogQ09ORklHX05FVF9UVUxJUD15CiBDT05GSUdfREUyMTA0WD1tCiBDT05GSUdfVFVMSVA9bQotIyBDT05GSUdfVFVMSVBfTVdJIGlzIG5vdCBzZXQKIENPTkZJR19UVUxJUF9NTUlPPXkKLSMgQ09ORklHX1RVTElQX05BUEkgaXMgbm90IHNldAogQ09ORklHX0RFNFg1PW0KIENPTkZJR19XSU5CT05EXzg0MD1tCiBDT05GSUdfRE05MTAyPW0KIENPTkZJR19VTEk1MjZYPW0KIENPTkZJR19QQ01DSUFfWElSQ09NPW0KLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0lTQT15Ci0jIENPTkZJR19FMjEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRVdSSzM9bQotIyBDT05GSUdfRUVYUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRUVYUFJFU1NfUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQTEFOX1BMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBMQU4gaXMgbm90IHNldAotIyBDT05GSUdfTFA0ODZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VUSDE2SSBpcyBub3Qgc2V0CiBDT05GSUdfTkUyMDAwPW0KLSMgQ09ORklHX1pORVQgaXMgbm90IHNldAotIyBDT05GSUdfU0VFUTgwMDUgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj1tCiBDT05GSUdfQU1EODExMV9FVEg9bQogQ09ORklHX0FEQVBURUNfU1RBUkZJUkU9bQotIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAogQ09ORklHX0I0ND1tCi1DT05GSUdfQjQ0X1BDSV9BVVRPU0VMRUNUPXkKLUNPTkZJR19CNDRfUENJQ09SRV9BVVRPU0VMRUNUPXkKLUNPTkZJR19CNDRfUENJPXkKIENPTkZJR19GT1JDRURFVEg9bQotQ09ORklHX0ZPUkNFREVUSF9OQVBJPXkKLSMgQ09ORklHX0NTODl4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD1tCiBDT05GSUdfRkVBTE5YPW0KIENPTkZJR19OQVRTRU1JPW0KQEAgLTEzNjksMTQgKzUzOCwxMSBAQAogQ09ORklHXzgxMzlDUD1tCiBDT05GSUdfODEzOVRPTz1tCiAjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfODEzOVRPT184MTI5PXkKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKIENPTkZJR19SNjA0MD1tCiBDT05GSUdfU0lTOTAwPW0KIENPTkZJR19FUElDMTAwPW0KIENPTkZJR19TVU5EQU5DRT1tCi0jIENPTkZJR19TVU5EQU5DRV9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19UTEFOPW0KIENPTkZJR19WSUFfUkhJTkU9bQogQ09ORklHX1ZJQV9SSElORV9NTUlPPXkKQEAgLTEzODUsMTggKzU1MSwxMiBAQAogQ09ORklHX0RFNjAwPW0KIENPTkZJR19ERTYyMD1tCiBDT05GSUdfRkVDX01QQzUyeHg9bQotQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfQUNFTklDPW0KLSMgQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0kgaXMgbm90IHNldAogQ09ORklHX0RMMks9bQogQ09ORklHX0UxMDAwPW0KIENPTkZJR19FMTAwMEU9bQogQ09ORklHX0lQMTAwMD1tCiBDT05GSUdfSUdCPW0KLUNPTkZJR19JR0JfTFJPPXkKIENPTkZJR19OUzgzODIwPW0KIENPTkZJR19IQU1BQ0hJPW0KIENPTkZJR19ZRUxMT1dGSU49bQpAQCAtMTQwNCw3MCArNTY0LDQyIEBACiBDT05GSUdfUjgxNjlfVkxBTj15CiBDT05GSUdfU0lTMTkwPW0KIENPTkZJR19TS0dFPW0KLSMgQ09ORklHX1NLR0VfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1NLWTI9bQotIyBDT05GSUdfU0tZMl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfVklBX1ZFTE9DSVRZPW0KIENPTkZJR19USUdPTjM9bQogQ09ORklHX0JOWDI9bQogQ09ORklHX0dJQU5GQVI9bQotIyBDT05GSUdfVUNDX0dFVEggaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPW0KIENPTkZJR19RTEEzWFhYPW0KIENPTkZJR19BVEwxPW0KLSMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pNRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDAwPXkKIENPTkZJR19DSEVMU0lPX1QxPW0KIENPTkZJR19DSEVMU0lPX1QxXzFHPXkKIENPTkZJR19DSEVMU0lPX1QzPW0KLSMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogQ09ORklHX0lYR0JFPW0KIENPTkZJR19JWEdCPW0KIENPTkZJR19TMklPPW0KIENPTkZJR19NWVJJMTBHRT1tCiBDT05GSUdfTkVUWEVOX05JQz1tCiBDT05GSUdfTklVPW0KLSMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19URUhVVEk9bQogQ09ORklHX0JOWDJYPW0KIENPTkZJR19RTEdFPW0KIENPTkZJR19TRkM9bQotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIwotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKIENPTkZJR19VU0JfQ0FUQz1tCiBDT05GSUdfVVNCX0tBV0VUSD1tCiBDT05GSUdfVVNCX1BFR0FTVVM9bQogQ09ORklHX1VTQl9SVEw4MTUwPW0KIENPTkZJR19VU0JfVVNCTkVUPW0KLUNPTkZJR19VU0JfTkVUX0FYODgxN1g9bQotQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9bQogQ09ORklHX1VTQl9ORVRfRE05NjAxPW0KIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYPW0KIENPTkZJR19VU0JfTkVUX0dMNjIwQT1tCi1DT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KIENPTkZJR19VU0JfTkVUX1BMVVNCPW0KIENPTkZJR19VU0JfTkVUX01DUzc4MzA9bQogQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCi1DT05GSUdfVVNCX05FVF9DRENfU1VCU0VUPW0KIENPTkZJR19VU0JfQUxJX001NjMyPXkKIENPTkZJR19VU0JfQU4yNzIwPXkKLUNPTkZJR19VU0JfQkVMS0lOPXkKLUNPTkZJR19VU0JfQVJNTElOVVg9eQogQ09ORklHX1VTQl9FUFNPTjI4ODg9eQogQ09ORklHX1VTQl9LQzIxOTA9eQotQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KIENPTkZJR19ORVRfUENNQ0lBPXkKIENPTkZJR19QQ01DSUFfM0M1ODk9bQogQ09ORklHX1BDTUNJQV8zQzU3ND1tCkBAIC0xNDc3LDEwNiArNjA5LDM3IEBACiBDT05GSUdfUENNQ0lBX1NNQzkxQzkyPW0KIENPTkZJR19QQ01DSUFfWElSQzJQUz1tCiBDT05GSUdfUENNQ0lBX0FYTkVUPW0KLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0RSSVZFUlM9eQotIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fVENQPW0KIENPTkZJR19BVE1fTEFOQUk9bQogQ09ORklHX0FUTV9FTkk9bQotIyBDT05GSUdfQVRNX0VOSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRU5JX1RVTkVfQlVSU1QgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAotIyBDT05GSUdfQVRNX1pBVE0gaXMgbm90IHNldAogQ09ORklHX0FUTV9OSUNTVEFSPW0KLSMgQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9TVU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9OSUNTVEFSX1VTRV9JRFQ3NzEwNSBpcyBub3Qgc2V0CiBDT05GSUdfQVRNX0lEVDc3MjUyPW0KLSMgQ09ORklHX0FUTV9JRFQ3NzI1Ml9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fSURUNzcyNTJfUkNWX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRNX0lEVDc3MjUyX1VTRV9TVU5JPXkKLSMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9IT1JJWk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTV9JQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1fRk9SRTIwMEUgaXMgbm90IHNldAogQ09ORklHX0FUTV9IRT1tCi0jIENPTkZJR19BVE1fSEVfVVNFX1NVTkkgaXMgbm90IHNldAogQ09ORklHX0ZEREk9eQotIyBDT05GSUdfREVGWFggaXMgbm90IHNldAogQ09ORklHX1NLRlA9bQotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogQ09ORklHX1BMSVA9bQotQ09ORklHX1BQUD1tCiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfTVBQRT1tCiBDT05GSUdfUFBQT0U9bQogQ09ORklHX1BQUE9BVE09bQotQ09ORklHX1BQUE9MMlRQPW0KIENPTkZJR19TTElQPW0KIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSEM9bQogQ09ORklHX1NMSVBfU01BUlQ9eQotIyBDT05GSUdfU0xJUF9NT0RFX1NMSVA2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRkM9eQogQ09ORklHX05FVENPTlNPTEU9bQogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15Ci1DT05GSUdfTkVUUE9MTD15CiBDT05GSUdfTkVUUE9MTF9UUkFQPXkKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKIENPTkZJR19WSVJUSU9fTkVUPW0KLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotQ09ORklHX0lOUFVUX1BPTExERVY9bQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogQ09ORklHX0lOUFVUX0pPWURFVj1tCiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfU0VSSUFMPW0KIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfSU5QT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0xPR0lCTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QQzExMFBBRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9VU0VfVlNYWFhBQT1tCi0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9KT1lTVElDSz15CiBDT05GSUdfSk9ZU1RJQ0tfQU5BTE9HPW0KIENPTkZJR19KT1lTVElDS19BM0Q9bQpAQCAtMTYxMiw3ICs2NzUsNiBAQAogQ09ORklHX1RBQkxFVF9VU0JfR1RDTz1tCiBDT05GSUdfVEFCTEVUX1VTQl9LQlRBQj1tCiBDT05GSUdfVEFCTEVUX1VTQl9XQUNPTT1tCi0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CiBDT05GSUdfSU5QVVRfUENTUEtSPW0KIENPTkZJR19JTlBVVF9BVElfUkVNT1RFPW0KQEAgLTE2MjIsMjQ5ICs2ODQsNzIgQEAKIENPTkZJR19JTlBVVF9ZRUFMSU5LPW0KIENPTkZJR19JTlBVVF9DTTEwOT1tCiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci1DT05GSUdfU0VSSU9fSTgwNDI9eQotQ09ORklHX1NFUklPX1NFUlBPUlQ9eQotIyBDT05GSUdfU0VSSU9fUEFSS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKIENPTkZJR19TRVJJT19SQVc9bQotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotQ09ORklHX0dBTUVQT1JUPW0KIENPTkZJR19HQU1FUE9SVF9OUzU1OD1tCiBDT05GSUdfR0FNRVBPUlRfTDQ9bQogQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9bQogQ09ORklHX0dBTUVQT1JUX0ZNODAxPW0KLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15CiBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15Ci0jIENPTkZJR19DT01QVVRPTkUgaXMgbm90IHNldAogQ09ORklHX1JPQ0tFVFBPUlQ9bQogQ09ORklHX0NZQ0xBREVTPW0KLSMgQ09ORklHX0NZWl9JTlRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJR0lFUENBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VTUFNFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1hBX0lOVEVMTElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PWEFfU01BUlRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0kgaXMgbm90IHNldAogQ09ORklHX1NZTkNMSU5LPW0KIENPTkZJR19TWU5DTElOS01QPW0KIENPTkZJR19TWU5DTElOS19HVD1tCiBDT05GSUdfTl9IRExDPW0KLSMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAotIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFMRFJWIGlzIG5vdCBzZXQKIENPTkZJR19OT1pPTUk9bQotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX1BDST15Ci1DT05GSUdfU0VSSUFMXzgyNTBfUE5QPXkKIENPTkZJR19TRVJJQUxfODI1MF9DUz1tCiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15Ci0jIENPTkZJR19TRVJJQUxfODI1MF9GT1VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9BQ0NFTlQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMXzgyNTBfQk9DQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWEFSX1NUMTZDNTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF84MjUwX0hVQjYgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfU0VSSUFMX1VBUlRMSVRFPW0KLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRz1tCi0jIENPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX1RUWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX0NQTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX01QQzUyeHg9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9NUEM1Mnh4X0NPTlNPTEVfQkFVRD0xMTUyMDAKIENPTkZJR19TRVJJQUxfSlNNPW0KIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfU0VSSUFMX1FFIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfQlJJUV9QQU5FTD1tCiBDT05GSUdfUFJJTlRFUj1tCiBDT05GSUdfTFBfQ09OU09MRT15CiBDT05GSUdfUFBERVY9bQotIyBDT05GSUdfSFZDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfVklSVElPX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQogQ09ORklHX0hXX1JBTkRPTV9WSVJUSU89bQogQ09ORklHX05WUkFNPXkKIENPTkZJR19EVExLPW0KIENPTkZJR19SMzk2ND1tCi0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCi0jCi0jIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0FSRE1BTl80MDAwPW0KIENPTkZJR19DQVJETUFOXzQwNDA9bQogQ09ORklHX0lQV0lSRUxFU1M9bQotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLUNPTkZJR19JMkNfQUxHT1BDQT1tCi0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIE1hYyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwogQ09ORklHX0kyQ19IWURSQT1tCi1DT05GSUdfSTJDX1BPV0VSTUFDPXkKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19DUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9bQotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfSTJDX1BDQV9QTEFURk9STT1tCiBDT05GSUdfSTJDX1NJTVRFQz1tCi0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwogQ09ORklHX0kyQ19QQVJQT1JUPW0KIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVD1tCi0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAogQ09ORklHX0kyQ19USU5ZX1VTQj1tCi0KLSMKLSMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycwotIwotQ09ORklHX0kyQ19WT09ET08zPW0KLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUENBX0lTQT1tCi1DT05GSUdfSTJDX1BDQV9QTEFURk9STT1tCiBDT05GSUdfSTJDX1NUVUI9bQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fQVQyND1tCi1DT05GSUdfRUVQUk9NX0xFR0FDWT1tCi1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLUNPTkZJR19QQ0Y4NTc1PW0KLUNPTkZJR19TRU5TT1JTX1BDQTk1Mzk9bQotQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk9NX01BWDY4NzU9bQotQ09ORklHX1NFTlNPUlNfVFNMMjU1MD1tCi1DT05GSUdfTUNVX01QQzgzNDlFTUlUWD1tCi0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKLUNPTkZJR19HUElPTElCPXkKLSMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dQSU9fU1lTRlM9eQotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgU1BJIEdQSU8gZXhwYW5kZXJzOgotIwogQ09ORklHX1cxPW0KLUNPTkZJR19XMV9DT049eQotCi0jCi0jIDEtd2lyZSBCdXMgTWFzdGVycwotIwotIyBDT05GSUdfVzFfTUFTVEVSX01BVFJPWCBpcyBub3Qgc2V0CiBDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MD1tCiBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4Mj1tCi0jIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgMS13aXJlIFNsYXZlcwotIwogQ09ORklHX1cxX1NMQVZFX1RIRVJNPW0KIENPTkZJR19XMV9TTEFWRV9TTUVNPW0KIENPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQogQ09ORklHX1cxX1NMQVZFX0RTMjQzM19DUkM9eQogQ09ORklHX1cxX1NMQVZFX0RTMjc2MD1tCi1DT05GSUdfUE9XRVJfU1VQUExZPW0KLSMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAogQ09ORklHX0FQTV9QT1dFUj1tCi0jIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CiBDT05GSUdfQkFUVEVSWV9QTVU9bQotIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj1tCi1DT05GSUdfSFdNT05fVklEPW0KLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0FENzQxOD1tCiBDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KIENPTkZJR19TRU5TT1JTX0FETTEwMjU9bQpAQCAtMTg3MywxMyArNzU4LDkgQEAKIENPTkZJR19TRU5TT1JTX0FETTEwMzE9bQogQ09ORklHX1NFTlNPUlNfQURNOTI0MD1tCiBDT05GSUdfU0VOU09SU19BRFQ3NDcwPW0KLUNPTkZJR19TRU5TT1JTX0FEVDc0NzM9bQogQ09ORklHX1NFTlNPUlNfQU1TPW0KLUNPTkZJR19TRU5TT1JTX0FNU19QTVU9eQotQ09ORklHX1NFTlNPUlNfQU1TX0kyQz15CiBDT05GSUdfU0VOU09SU19BVFhQMT1tCiBDT05GSUdfU0VOU09SU19EUzE2MjE9bQotIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX0Y3MTgwNUY9bQogQ09ORklHX1NFTlNPUlNfRjcxODgyRkc9bQogQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1tCkBAIC0xOTAxLDYgKzc4Miw3IEBACiBDT05GSUdfU0VOU09SU19NQVg2NjUwPW0KIENPTkZJR19TRU5TT1JTX1BDODczNjA9bQogQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1tCitDT05GSUdfU0VOU09SU19QQ0Y4NTkxPW0KIENPTkZJR19TRU5TT1JTX1NJUzU1OTU9bQogQ09ORklHX1NFTlNPUlNfRE1FMTczNz1tCiBDT05GSUdfU0VOU09SU19TTVNDNDdNMT1tCkBAIC0xOTE5LDQ2NSArODAxLDE0IEBACiBDT05GSUdfU0VOU09SU19XODNMNzg2Tkc9bQogQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQogQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGPW0KLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQogQ09ORklHX1dBVENIRE9HPXkKLSMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwotIwogQ09ORklHX1NPRlRfV0FUQ0hET0c9bQotIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUyMDBfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPR19SVEFTPW0KLQotIwotIyBJU0EtYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTUlYQ09NV0QgaXMgbm90IHNldAotIyBDT05GSUdfV0RUIGlzIG5vdCBzZXQKLQotIwotIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKIENPTkZJR19VU0JQQ1dBVENIRE9HPW0KLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotQ09ORklHX1NTQj1tCi1DT05GSUdfU1NCX1NQUk9NPXkKLUNPTkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15Ci1DT05GSUdfU1NCX1BDSUhPU1Q9eQotIyBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUENNQ0lBSE9TVF9QT1NTSUJMRT15CiBDT05GSUdfU1NCX1BDTUNJQUhPU1Q9eQotIyBDT05GSUdfU1NCX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkVfUE9TU0lCTEU9eQotQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogQ09ORklHX01GRF9TTTUwMT1tCiBDT05GSUdfTUZEX1NNNTAxX0dQSU89eQotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VQ0IxNDAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCi0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi1DT05GSUdfVklERU9fREVWPW0KLUNPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCi1DT05GSUdfVklERU9fQUxMT1dfVjRMMT15Ci1DT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQotQ09ORklHX0RWQl9DT1JFPW0KLUNPTkZJR19WSURFT19NRURJQT1tCi0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfVklERU9fU0FBNzE0Nj1tCi1DT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCi1DT05GSUdfTUVESUFfQVRUQUNIPXkKLUNPTkZJR19NRURJQV9UVU5FUj1tCi0jIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkUgaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBODI3WD1tCi1DT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzE9bQotQ09ORklHX01FRElBX1RVTkVSX1REQTk4ODc9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjE9bQotQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9bQotQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCi1DT05GSUdfTUVESUFfVFVORVJfTVQyMDYwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9NVDIyNjY9bQotQ09ORklHX01FRElBX1RVTkVSX01UMjEzMT1tCi1DT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCi1DT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVM9bQotQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUPW0KLUNPTkZJR19WSURFT19WNEwyPW0KLUNPTkZJR19WSURFT19WNEwxPW0KLUNPTkZJR19WSURFT0JVRl9HRU49bQotQ09ORklHX1ZJREVPQlVGX0RNQV9TRz1tCi1DT05GSUdfVklERU9CVUZfVk1BTExPQz1tCi1DT05GSUdfVklERU9CVUZfRFZCPW0KLUNPTkZJR19WSURFT19CVENYPW0KLUNPTkZJR19WSURFT19JUj1tCi1DT05GSUdfVklERU9fVFZFRVBST009bQotQ09ORklHX1ZJREVPX1RVTkVSPW0KLUNPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQotIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fSVJfSTJDPW0KLQotIwotIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCi0jCi0KLSMKLSMgQXVkaW8gZGVjb2RlcnMKLSMKLUNPTkZJR19WSURFT19UVkFVRElPPW0KLUNPTkZJR19WSURFT19UREE3NDMyPW0KLUNPTkZJR19WSURFT19UREE5ODQwPW0KLUNPTkZJR19WSURFT19UREE5ODc1PW0KLUNPTkZJR19WSURFT19URUE2NDE1Qz1tCi1DT05GSUdfVklERU9fVEVBNjQyMD1tCi1DT05GSUdfVklERU9fTVNQMzQwMD1tCi1DT05GSUdfVklERU9fQ1M1MzQ1PW0KLUNPTkZJR19WSURFT19DUzUzTDMyQT1tCi1DT05GSUdfVklERU9fTTUyNzkwPW0KLUNPTkZJR19WSURFT19UTFYzMjBBSUMyM0I9bQotQ09ORklHX1ZJREVPX1dNODc3NT1tCi1DT05GSUdfVklERU9fV004NzM5PW0KLUNPTkZJR19WSURFT19WUDI3U01QWD1tCi0KLSMKLSMgVmlkZW8gZGVjb2RlcnMKLSMKLUNPTkZJR19WSURFT19CVDgxOT1tCi1DT05GSUdfVklERU9fQlQ4NTY9bQotQ09ORklHX1ZJREVPX0JUODY2PW0KLUNPTkZJR19WSURFT19LUzAxMjc9bQotQ09ORklHX1ZJREVPX09WNzY3MD1tCi1DT05GSUdfVklERU9fVENNODI1WD1tCi1DT05GSUdfVklERU9fU0FBNzExMD1tCi1DT05GSUdfVklERU9fU0FBNzExMT1tCi1DT05GSUdfVklERU9fU0FBNzExND1tCi1DT05GSUdfVklERU9fU0FBNzExWD1tCi1DT05GSUdfVklERU9fU0FBNzE3WD1tCi1DT05GSUdfVklERU9fU0FBNzE5MT1tCi1DT05GSUdfVklERU9fVFZQNTE1MD1tCi1DT05GSUdfVklERU9fVlBYMzIyMD1tCi0KLSMKLSMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCi0jCi1DT05GSUdfVklERU9fQ1gyNTg0MD1tCi0KLSMKLSMgTVBFRyB2aWRlbyBlbmNvZGVycwotIwotQ09ORklHX1ZJREVPX0NYMjM0MVg9bQotCi0jCi0jIFZpZGVvIGVuY29kZXJzCi0jCi1DT05GSUdfVklERU9fU0FBNzEyNz1tCi1DT05GSUdfVklERU9fU0FBNzE4NT1tCi1DT05GSUdfVklERU9fQURWNzE3MD1tCi1DT05GSUdfVklERU9fQURWNzE3NT1tCi0KLSMKLSMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKLSMKLUNPTkZJR19WSURFT19VUEQ2NDAzMUE9bQotQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KLSMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX0JUODQ4PW0KLUNPTkZJR19WSURFT19CVDg0OF9EVkI9eQotQ09ORklHX1ZJREVPX1NBQTY1ODg9bQotIyBDT05GSUdfVklERU9fUE1TIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19CV1FDQU09bQotQ09ORklHX1ZJREVPX0NRQ0FNPW0KLUNPTkZJR19WSURFT19XOTk2Nj1tCi1DT05GSUdfVklERU9fQ1BJQT1tCi1DT05GSUdfVklERU9fQ1BJQV9QUD1tCi1DT05GSUdfVklERU9fQ1BJQV9VU0I9bQotQ09ORklHX1ZJREVPX0NQSUEyPW0KLUNPTkZJR19WSURFT19TQUE1MjQ2QT1tCi1DT05GSUdfVklERU9fU0FBNTI0OT1tCi0jIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX1pPUkFOIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19TQUE3MTM0PW0KLUNPTkZJR19WSURFT19TQUE3MTM0X0FMU0E9bQotQ09ORklHX1ZJREVPX1NBQTcxMzRfRFZCPW0KLUNPTkZJR19WSURFT19NWEI9bQotQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTj1tCi1DT05GSUdfVklERU9fSEVYSVVNX0dFTUlOST1tCi1DT05GSUdfVklERU9fQ1g4OD1tCi1DT05GSUdfVklERU9fQ1g4OF9BTFNBPW0KLUNPTkZJR19WSURFT19DWDg4X0JMQUNLQklSRD1tCi1DT05GSUdfVklERU9fQ1g4OF9EVkI9bQotQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KLUNPTkZJR19WSURFT19DWDIzODg1PW0KLUNPTkZJR19WSURFT19BVTA4Mjg9bQotQ09ORklHX1ZJREVPX0lWVFY9bQotQ09ORklHX1ZJREVPX0ZCX0lWVFY9bQotQ09ORklHX1ZJREVPX0NYMTg9bQotIyBDT05GSUdfVklERU9fQ0FGRV9DQ0lDIGlzIG5vdCBzZXQKLUNPTkZJR19TT0NfQ0FNRVJBPW0KLUNPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDE9bQotIyBDT05GSUdfTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTEgaXMgbm90IHNldAotQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMj1tCi0jIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0Ci1DT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKLUNPTkZJR19VU0JfVklERU9fQ0xBU1M9bQotQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15Ci1DT05GSUdfVVNCX0dTUENBPW0KLSMgQ09ORklHX1VTQl9NNTYwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfQ09ORVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfUEFDMjA3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9QQUM3MzExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1NPTklYSiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HU1BDQV9UVjg1MzIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1BWUlVTQjI9bQotQ09ORklHX1ZJREVPX1BWUlVTQjJfU1lTRlM9eQotQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCPXkKLSMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX0VNMjhYWD1tCi1DT05GSUdfVklERU9fRU0yOFhYX0FMU0E9bQotQ09ORklHX1ZJREVPX0VNMjhYWF9EVkI9bQotQ09ORklHX1ZJREVPX1VTQlZJU0lPTj1tCi1DT05GSUdfVklERU9fVVNCVklERU89bQotQ09ORklHX1VTQl9WSUNBTT1tCi1DT05GSUdfVVNCX0lCTUNBTT1tCi1DT05GSUdfVVNCX0tPTklDQVdDPW0KLUNPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSPW0KLUNPTkZJR19VU0JfRVQ2MVgyNTE9bQotQ09ORklHX1ZJREVPX09WQ0FNQ0hJUD1tCi1DT05GSUdfVVNCX1c5OTY4Q0Y9bQotQ09ORklHX1VTQl9PVjUxMT1tCi1DT05GSUdfVVNCX1NFNDAxPW0KLUNPTkZJR19VU0JfU045QzEwMj1tCi1DT05GSUdfVVNCX1NUVjY4MD1tCi1DT05GSUdfVVNCX1pDMDMwMT1tCi1DT05GSUdfVVNCX1BXQz1tCi0jIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfWlIzNjRYWD1tCi1DT05GSUdfVVNCX1NUS1dFQkNBTT1tCi0jIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAotQ09ORklHX1JBRElPX0FEQVBURVJTPXkKLSMgQ09ORklHX1JBRElPX0NBREVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1JUUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19SVFJBQ0syIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX0FaVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQURJT19HRU1URUsgaXMgbm90IHNldAotQ09ORklHX1JBRElPX0dFTVRFS19QQ0k9bQotQ09ORklHX1JBRElPX01BWElSQURJTz1tCi1DT05GSUdfUkFESU9fTUFFU1RSTz1tCi0jIENPTkZJR19SQURJT19TRjE2Rk1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1NGMTZGTVIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RFUlJBVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RSVVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBRElPX1RZUEhPT04gaXMgbm90IHNldAotIyBDT05GSUdfUkFESU9fWk9MVFJJWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0RTQlI9bQotQ09ORklHX1VTQl9TSTQ3MFg9bQotQ09ORklHX1VTQl9NUjgwMD1tCi1DT05GSUdfRFZCX0NBUFRVUkVfRFJJVkVSUz15Ci0KLSMKLSMgU3VwcG9ydGVkIFNBQTcxNDYgYmFzZWQgUENJIEFkYXB0ZXJzCi0jCi1DT05GSUdfVFRQQ0lfRUVQUk9NPW0KLUNPTkZJR19EVkJfQVY3MTEwPW0KLUNPTkZJR19EVkJfQVY3MTEwX09TRD15Ci1DT05GSUdfRFZCX0JVREdFVF9DT1JFPW0KLUNPTkZJR19EVkJfQlVER0VUPW0KLUNPTkZJR19EVkJfQlVER0VUX0NJPW0KLUNPTkZJR19EVkJfQlVER0VUX0FWPW0KLUNPTkZJR19EVkJfQlVER0VUX1BBVENIPW0KLQotIwotIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCi0jCi1DT05GSUdfRFZCX1VTQj1tCi0jIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19EVkJfVVNCX0E4MDA9bQotQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KLSMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQotQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCi1DT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KLUNPTkZJR19EVkJfVVNCX0NYVVNCPW0KLUNPTkZJR19EVkJfVVNCX005MjBYPW0KLUNPTkZJR19EVkJfVVNCX0dMODYxPW0KLUNPTkZJR19EVkJfVVNCX0FVNjYxMD1tCi1DT05GSUdfRFZCX1VTQl9ESUdJVFY9bQotQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KLUNPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCi1DT05GSUdfRFZCX1VTQl9HUDhQU0s9bQotQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQotQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KLUNPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQotQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KLUNPTkZJR19EVkJfVVNCX0FGOTAwNT1tCi1DT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KLSMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9VU0JfQ0lORVJHWV9UMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVVNCX0FOWVNFRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVVNCX0RUVjUxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1VTQl9BRjkwMTUgaXMgbm90IHNldAotQ09ORklHX0RWQl9UVFVTQl9CVURHRVQ9bQotQ09ORklHX0RWQl9UVFVTQl9ERUM9bQotIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCi0jCi1DT05GSUdfRFZCX0IyQzJfRkxFWENPUD1tCi1DT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQotQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfVVNCPW0KLSMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFN1cHBvcnRlZCBCVDg3OCBBZGFwdGVycwotIwotQ09ORklHX0RWQl9CVDhYWD1tCi0KLSMKLSMgU3VwcG9ydGVkIFBsdXRvMiBBZGFwdGVycwotIwotQ09ORklHX0RWQl9QTFVUTzI9bQotCi0jCi0jIFN1cHBvcnRlZCBTRE1DIERNMTEwNSBBZGFwdGVycwotIwotQ09ORklHX0RWQl9ETTExMDU9bQotCi0jCi0jIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCi0jCi0KLSMKLSMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAotCi0jCi0jIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcwotIwotQ09ORklHX0RWQl9DWDI0MTEwPW0KLUNPTkZJR19EVkJfQ1gyNDEyMz1tCi1DT05GSUdfRFZCX01UMzEyPW0KLUNPTkZJR19EVkJfUzVIMTQyMD1tCi1DT05GSUdfRFZCX1NUVjAyODg9bQotQ09ORklHX0RWQl9TVEI2MDAwPW0KLUNPTkZJR19EVkJfU1RWMDI5OT1tCi1DT05GSUdfRFZCX1REQTgwODM9bQotQ09ORklHX0RWQl9UREExMDA4Nj1tCi1DT05GSUdfRFZCX1ZFUzFYOTM9bQotQ09ORklHX0RWQl9UVU5FUl9JVEQxMDAwPW0KLUNPTkZJR19EVkJfVERBODI2WD1tCi1DT05GSUdfRFZCX1RVQTYxMDA9bQotQ09ORklHX0RWQl9DWDI0MTE2PW0KLUNPTkZJR19EVkJfU0kyMVhYPW0KLQotIwotIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcwotIwotQ09ORklHX0RWQl9TUDg4NzA9bQotQ09ORklHX0RWQl9TUDg4N1g9bQotQ09ORklHX0RWQl9DWDIyNzAwPW0KLUNPTkZJR19EVkJfQ1gyMjcwMj1tCi0jIENPTkZJR19EVkJfRFJYMzk3WEQgaXMgbm90IHNldAotQ09ORklHX0RWQl9MNjQ3ODE9bQotQ09ORklHX0RWQl9UREExMDA0WD1tCi1DT05GSUdfRFZCX05YVDYwMDA9bQotQ09ORklHX0RWQl9NVDM1Mj1tCi1DT05GSUdfRFZCX1pMMTAzNTM9bQotQ09ORklHX0RWQl9ESUIzMDAwTUI9bQotQ09ORklHX0RWQl9ESUIzMDAwTUM9bQotQ09ORklHX0RWQl9ESUI3MDAwTT1tCi1DT05GSUdfRFZCX0RJQjcwMDBQPW0KLUNPTkZJR19EVkJfVERBMTAwNDg9bQotCi0jCi0jIERWQi1DIChjYWJsZSkgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX1ZFUzE4MjA9bQotQ09ORklHX0RWQl9UREExMDAyMT1tCi1DT05GSUdfRFZCX1REQTEwMDIzPW0KLUNPTkZJR19EVkJfU1RWMDI5Nz1tCi0KLSMKLSMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCi0jCi1DT05GSUdfRFZCX05YVDIwMFg9bQotQ09ORklHX0RWQl9PUjUxMjExPW0KLUNPTkZJR19EVkJfT1I1MTEzMj1tCi1DT05GSUdfRFZCX0JDTTM1MTA9bQotQ09ORklHX0RWQl9MR0RUMzMwWD1tCi1DT05GSUdfRFZCX1M1SDE0MDk9bQotQ09ORklHX0RWQl9BVTg1MjI9bQotQ09ORklHX0RWQl9TNUgxNDExPW0KLQotIwotIyBEaWdpdGFsIHRlcnJlc3RyaWFsIG9ubHkgdHVuZXJzL1BMTAotIwotQ09ORklHX0RWQl9QTEw9bQotQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwPW0KLQotIwotIyBTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUwotIwotQ09ORklHX0RWQl9MTkJQMjE9bQotQ09ORklHX0RWQl9JU0w2NDA1PW0KLUNPTkZJR19EVkJfSVNMNjQyMT1tCi1DT05GSUdfRFZCX0xHUzhHTDU9bQotCi0jCi0jIFRvb2xzIHRvIGRldmVsb3AgbmV3IGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0RVTU1ZX0ZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9BRjkwMTMgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci1DT05GSUdfVVNCX0RBQlVTQj1tCi0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwogQ09ORklHX0FHUD15CiBDT05GSUdfQUdQX1VOSU5PUlRIPXkKIENPTkZJR19EUk09bQpAQCAtMjM4OCwxNTIgKzgxOSw2MiBAQAogQ09ORklHX0RSTV9TSVM9bQogQ09ORklHX0RSTV9WSUE9bQogQ09ORklHX0RSTV9TQVZBR0U9bQotQ09ORklHX1ZHQVNUQVRFPXkKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfRERDPXkKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfU1ZHQUxJQj1tCi1DT05GSUdfRkJfTUFDTU9ERVM9eQotQ09ORklHX0ZCX0JBQ0tMSUdIVD15Ci1DT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKLUNPTkZJR19GQl9USUxFQkxJVFRJTkc9eQotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCiBDT05GSUdfRkJfQ0lSUlVTPW0KLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogQ09ORklHX0ZCX09GPXkKLSMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCX1BMQVRJTlVNPXkKIENPTkZJR19GQl9WQUxLWVJJRT15CiBDT05GSUdfRkJfQ1Q2NTU1MD15Ci0jIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTlZJRElBPXkKIENPTkZJR19GQl9OVklESUFfSTJDPXkKLSMgQ09ORklHX0ZCX05WSURJQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTlZJRElBX0JBQ0tMSUdIVD15CiBDT05GSUdfRkJfUklWQT1tCi0jIENPTkZJR19GQl9SSVZBX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9SSVZBX0JBQ0tMSUdIVD15CiBDT05GSUdfRkJfTUFUUk9YPXkKIENPTkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKIENPTkZJR19GQl9NQVRST1hfTVlTVElRVUU9eQogQ09ORklHX0ZCX01BVFJPWF9HPXkKIENPTkZJR19GQl9NQVRST1hfSTJDPW0KIENPTkZJR19GQl9NQVRST1hfTUFWRU49bQotQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQ9eQogQ09ORklHX0ZCX1JBREVPTj15Ci1DT05GSUdfRkJfUkFERU9OX0kyQz15Ci1DT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15Ci0jIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZCX0FUWTEyOD15Ci1DT05GSUdfRkJfQVRZMTI4X0JBQ0tMSUdIVD15CiBDT05GSUdfRkJfQVRZPXkKIENPTkZJR19GQl9BVFlfQ1Q9eQogQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRD15CiBDT05GSUdfRkJfQVRZX0dYPXkKLUNPTkZJR19GQl9BVFlfQkFDS0xJR0hUPXkKIENPTkZJR19GQl9TMz1tCiBDT05GSUdfRkJfU0FWQUdFPW0KIENPTkZJR19GQl9TQVZBR0VfSTJDPXkKIENPTkZJR19GQl9TQVZBR0VfQUNDRUw9eQotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTkVPTUFHSUM9bQogQ09ORklHX0ZCX0tZUk89bQogQ09ORklHX0ZCXzNERlg9bQogQ09ORklHX0ZCXzNERlhfQUNDRUw9eQogQ09ORklHX0ZCX1ZPT0RPTzE9bQotIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKIENPTkZJR19GQl9UUklERU5UPW0KLUNPTkZJR19GQl9UUklERU5UX0FDQ0VMPXkKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GU0xfRElVIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TTTUwMT1tCiBDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCi0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiBDT05GSUdfTENEX1BMQVRGT1JNPW0KLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD1tCi0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQogQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0s9eQotQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRT02NAotIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQotQ09ORklHX1NORF9USU1FUj1tCi1DT05GSUdfU05EX1BDTT1tCi1DT05GSUdfU05EX0hXREVQPW0KLUNPTkZJR19TTkRfUkFXTUlEST1tCiBDT05GSUdfU05EX1NFUVVFTkNFUj1tCiBDT05GSUdfU05EX1NFUV9EVU1NWT1tCi1DT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KLUNPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CiBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTPXkKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldAotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLPXkKIENPTkZJR19TTkRfREVCVUc9eQogQ09ORklHX1NORF9ERUJVR19WRVJCT1NFPXkKIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUc9eQotQ09ORklHX1NORF9WTUFTVEVSPXkKLUNPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQotQ09ORklHX1NORF9PUEwzX0xJQj1tCi1DT05GSUdfU05EX1ZYX0xJQj1tCi1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9EUklWRVJTPXkKIENPTkZJR19TTkRfRFVNTVk9bQogQ09ORklHX1NORF9WSVJNSURJPW0KIENPTkZJR19TTkRfTVRQQVY9bQpAQCAtMjU0Myw0MCArODg0LDYgQEAKIENPTkZJR19TTkRfUE9SVE1BTjJYND1tCiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRT15CiBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRV9ERUZBVUxUPTUKLUNPTkZJR19TTkRfU0JfQ09NTU9OPW0KLUNPTkZJR19TTkRfU0IxNl9EU1A9bQotQ09ORklHX1NORF9JU0E9eQotIyBDT05GSUdfU05EX0FETElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BRDE4MTZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BRDE4NDggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMjMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JODMzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0MjMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DUzQyMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDIzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFQwMTlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzk2OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxNjg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE4WFggaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NDNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR1VTQ0xBU1NJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR1VTRVhUUkVNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfR1VTTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFUldBVkUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVSV0FWRV9TVEIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNTQTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QVEk5MlhfQUQxODQ4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUFRJOTJYX0NTNDIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BUSTkzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0I4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQjE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU0dBTEFYWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU1NDQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9XQVZFRlJPTlQgaXMgbm90IHNldAotQ09ORklHX1NORF9QQ0k9eQogQ09ORklHX1NORF9BRDE4ODk9bQogQ09ORklHX1NORF9BTFMzMDA9bQogQ09ORklHX1NORF9BTFM0MDAwPW0KQEAgLTI1ODksMTQgKzg5NiwxMSBAQAogQ09ORklHX1NORF9BVzI9bQogQ09ORklHX1NORF9BWlQzMzI4PW0KIENPTkZJR19TTkRfQlQ4N1g9bQotIyBDT05GSUdfU05EX0JUODdYX09WRVJDTE9DSyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0NBMDEwNj1tCiBDT05GSUdfU05EX0NNSVBDST1tCi1DT05GSUdfU05EX09YWUdFTl9MSUI9bQogQ09ORklHX1NORF9PWFlHRU49bQogQ09ORklHX1NORF9DUzQyODE9bQogQ09ORklHX1NORF9DUzQ2WFg9bQotQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUD15CiBDT05GSUdfU05EX0NTNTUzMD1tCiBDT05GSUdfU05EX0RBUkxBMjA9bQogQ09ORklHX1NORF9HSU5BMjA9bQpAQCAtMjYxNywxNiArOTIxLDExIEBACiBDT05GSUdfU05EX0VTMTkzOD1tCiBDT05GSUdfU05EX0VTMTk2OD1tCiBDT05GSUdfU05EX0ZNODAxPW0KLUNPTkZJR19TTkRfRk04MDFfVEVBNTc1WF9CT09MPXkKLUNPTkZJR19TTkRfRk04MDFfVEVBNTc1WD1tCi0jIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfSERTUD1tCiBDT05GSUdfU05EX0hEU1BNPW0KIENPTkZJR19TTkRfSElGSUVSPW0KIENPTkZJR19TTkRfSUNFMTcxMj1tCiBDT05GSUdfU05EX0lDRTE3MjQ9bQotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAogQ09ORklHX1NORF9LT1JHMTIxMj1tCiBDT05GSUdfU05EX01BRVNUUk8zPW0KIENPTkZJR19TTkRfTUlYQVJUPW0KQEAgLTI2NDIsMTU4ICs5NDEsNjIgQEAKIENPTkZJR19TTkRfVklBODJYWF9NT0RFTT1tCiBDT05GSUdfU05EX1ZJUlRVT1NPPW0KIENPTkZJR19TTkRfVlgyMjI9bQotIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1BQQz15CiBDT05GSUdfU05EX1BPV0VSTUFDPW0KLUNPTkZJR19TTkRfUE9XRVJNQUNfQVVUT19EUkM9eQogQ09ORklHX1NORF9BT0E9bQogQ09ORklHX1NORF9BT0FfRkFCUklDX0xBWU9VVD1tCiBDT05GSUdfU05EX0FPQV9PTllYPW0KIENPTkZJR19TTkRfQU9BX1RBUz1tCiBDT05GSUdfU05EX0FPQV9UT09OSUU9bQotQ09ORklHX1NORF9BT0FfU09VTkRCVVM9bQotQ09ORklHX1NORF9BT0FfU09VTkRCVVNfSTJTPW0KLUNPTkZJR19TTkRfVVNCPXkKIENPTkZJR19TTkRfVVNCX0FVRElPPW0KIENPTkZJR19TTkRfVVNCX1VTWDJZPW0KIENPTkZJR19TTkRfVVNCX0NBSUFRPW0KIENPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKICMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9bQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotQ09ORklHX0hJRF9ERUJVRz15CiBDT05GSUdfSElEUkFXPXkKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX0hJRF9QSUQ9eQogQ09ORklHX1VTQl9ISURERVY9eQotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLUNPTkZJR19ISURfQ09NUEFUPXkKLUNPTkZJR19ISURfQTRURUNIPXkKLUNPTkZJR19ISURfQVBQTEU9eQotQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9CUklHSFQ9eQotQ09ORklHX0hJRF9DSEVSUlk9eQotQ09ORklHX0hJRF9DSElDT05ZPXkKLUNPTkZJR19ISURfQ1lQUkVTUz15Ci1DT05GSUdfSElEX0RFTEw9eQotQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQogQ09ORklHX0xPR0lURUNIX0ZGPXkKIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRj15Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX1BBTlRIRVJMT1JEX0ZGPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQotQ09ORklHX1RIUlVTVE1BU1RFUl9GRj15Ci1DT05GSUdfWkVST1BMVVNfRkY9eQotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX0RFQlVHPXkKIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQogIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVNQRU5EPXkKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KLUNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CiBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQogQ09ORklHX1VTQl9FSENJX0ZTTD15Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15Ci1DT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19VU0JfVUhDSV9IQ0Q9bQogQ09ORklHX1VTQl9VMTMyX0hDRD1tCiBDT05GSUdfVVNCX1NMODExX0hDRD1tCi0jIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9bQogQ09ORklHX1VTQl9XRE09bQotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15Ci1DT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQotQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQotQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQotQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQT15Ci1DT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0g9eQotQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCPXkKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIworQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9bQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQorQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT1tCitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQorQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQT1tCitDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0g9bQorQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPW0KK0NPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCPW0KIENPTkZJR19VU0JfTURDODAwPW0KIENPTkZJR19VU0JfTUlDUk9URUs9bQotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKIENPTkZJR19VU0JfVVNTNzIwPW0KIENPTkZJR19VU0JfU0VSSUFMPW0KLUNPTkZJR19VU0JfRVpVU0I9eQogQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CiBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRT1tCiBDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KQEAgLTI4MDEsNyArMTAwNCw2IEBACiBDT05GSUdfVVNCX1NFUklBTF9DSDM0MT1tCiBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQ9bQogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KLUNPTkZJR19VU0JfU0VSSUFMX0NQMjEwMT1tCiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KQEAgLTI4MTEsNyArMTAxMyw2IEBACiBDT05GSUdfVVNCX1NFUklBTF9JUj1tCiBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVD1tCiBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9UST1tCi0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9JUFc9bQogQ09ORklHX1VTQl9TRVJJQUxfSVVVPW0KIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KQEAgLTI4MzYsMjUgKzEwMzcsMTMgQEAKIENPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCiBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUPW0KIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHPW0KLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCiBDT05GSUdfVVNCX0VNSTYyPW0KIENPTkZJR19VU0JfRU1JMjY9bQogQ09ORklHX1VTQl9BRFVUVVg9bQogQ09ORklHX1VTQl9TRVZTRUc9bQotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0xFR09UT1dFUj1tCiBDT05GSUdfVVNCX0xDRD1tCi1DT05GSUdfVVNCX0JFUlJZX0NIQVJHRT1tCiBDT05GSUdfVVNCX0xFRD1tCi0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotQ09ORklHX1VTQl9QSElER0VUPW0KLUNPTkZJR19VU0JfUEhJREdFVEtJVD1tCi1DT05GSUdfVVNCX1BISURHRVRNT1RPUkNPTlRST0w9bQotQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQogQ09ORklHX1VTQl9JRE1PVVNFPW0KIENPTkZJR19VU0JfRlRESV9FTEFOPW0KIENPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KQEAgLTI4NjMsNjQgKzEwNTIsMjIgQEAKIENPTkZJR19VU0JfTEQ9bQogQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUj1tCiBDT05GSUdfVVNCX0lPV0FSUklPUj1tCi0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lTSUdIVEZXPW0KLUNPTkZJR19VU0JfVlNUPW0KIENPTkZJR19VU0JfQVRNPW0KIENPTkZJR19VU0JfU1BFRURUT1VDSD1tCiBDT05GSUdfVVNCX0NYQUNSVT1tCiBDT05GSUdfVVNCX1VFQUdMRUFUTT1tCiBDT05GSUdfVVNCX1hVU0JBVE09bQotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ORVdfTEVEUz15Ci1DT05GSUdfTEVEU19DTEFTUz15Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQotQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD1tCiBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049bQogQ09ORklHX0FDQ0VTU0lCSUxJVFk9eQogQ09ORklHX0ExMVlfQlJBSUxMRV9DT05TT0xFPXkKLSMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX0VEQUM9eQotCi0jCi0jIFJlcG9ydGluZyBzdWJzeXN0ZW1zCi0jCi0jIENPTkZJR19FREFDX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19FREFDX01NX0VEQUM9bQotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiAjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0RTMTMwNz1tCiBDT05GSUdfUlRDX0RSVl9EUzEzNzQ9bQogQ09ORklHX1JUQ19EUlZfRFMxNjcyPW0KQEAgLTI5MzIsNzUgKzEwNzksMzMgQEAKIENPTkZJR19SVENfRFJWX1BDRjg1ODM9bQogQ09ORklHX1JUQ19EUlZfTTQxVDgwPW0KIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQ9eQotIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0ZNMzEzMD1tCi0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKIENPTkZJR19SVENfRFJWX0NNT1M9eQotIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfRFMxNTExPW0KIENPTkZJR19SVENfRFJWX0RTMTU1Mz1tCiBDT05GSUdfUlRDX0RSVl9EUzE3NDI9bQogQ09ORklHX1JUQ19EUlZfU1RLMTdUQTg9bQotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTTQ4VDM1PW0KIENPTkZJR19SVENfRFJWX000OFQ1OT1tCi0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9WMzAyMD1tCi0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi1DT05GSUdfUlRDX0RSVl9QUEM9eQogQ09ORklHX0RNQURFVklDRVM9eQotCi0jCi0jIERNQSBEZXZpY2VzCi0jCi0jIENPTkZJR19GU0xfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19BVVhESVNQTEFZPXkKIENPTkZJR19LUzAxMDg9bQotQ09ORklHX0tTMDEwOF9QT1JUPTB4Mzc4Ci1DT05GSUdfS1MwMTA4X0RFTEFZPTIKIENPTkZJR19VSU89bQogQ09ORklHX1VJT19DSUY9bQogQ09ORklHX1VJT19QRFJWPW0KIENPTkZJR19VSU9fUERSVl9HRU5JUlE9bQotQ09ORklHX1VJT19TTVg9bQotIyBDT05GSUdfVUlPX1NFUkNPUzMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDJfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPW0KLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15Ci0jIENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19GU19YSVA9eQotQ09ORklHX0pCRD1tCi0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0pCRDI9eQogQ09ORklHX0pCRDJfREVCVUc9eQotQ09ORklHX0ZTX01CQ0FDSEU9eQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KLSMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk89eQogQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQpAQCAtMzAwOCwxMjMgKzExMTMsNTggQEAKIENPTkZJR19KRlNfRlM9bQogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19YRlNfRlM9bQogQ09ORklHX1hGU19RVU9UQT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19HRlMyX0ZTPW0KLUNPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNPW0KIENPTkZJR19PQ0ZTMl9GUz1tCi1DT05GSUdfT0NGUzJfRlNfTzJDQj1tCi1DT05GSUdfT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVI9bQotQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKICMgQ09ORklHX09DRlMyX0RFQlVHX01BU0tMT0cgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfQ09NUEFUX0pCRCBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLUNPTkZJR19RVU9UQT15CiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQogIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKIENPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19RVU9UQUNUTD15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KLUNPTkZJR19HRU5FUklDX0FDTD15Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKIENPTkZJR19VREZfRlM9bQotQ09ORklHX1VERl9OTFM9eQotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLUNPTkZJR19GQVRfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX0NPTkZJR0ZTX0ZTPW0KLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19FQ1JZUFRfRlM9bQogQ09ORklHX0hGU19GUz1tCiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQkVGU19GUz1tCi0jIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19CRlNfRlM9bQogQ09ORklHX0VGU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19WWEZTX0ZTPW0KIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfT01GU19GUz1tCi0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19RTlg0RlNfRlM9bQogQ09ORklHX1JPTUZTX0ZTPW0KIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQotIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMl9BQ0w9eQotQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD1tCi1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9bQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi1DT05GSUdfU1VOUlBDX0dTUz1tCi0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT1tCiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCi0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0g9eQogQ09ORklHX0NJRlNfVVBDQUxMPXkKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLUNPTkZJR19DSUZTX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKK0NPTkZJR19DSUZTX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTkNQX0ZTPW0KIENPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORz15CiBDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORz15CkBAIC0zMTM1LDMxICsxMTc1LDE4IEBACiBDT05GSUdfTkNQRlNfTkxTPXkKIENPTkZJR19OQ1BGU19FWFRSQVM9eQogQ09ORklHX0NPREFfRlM9bQotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR185UF9GUz1tCi0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfT1NGX1BBUlRJVElPTj15CiBDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19CU0RfRElTS0xBQkVMPXkKIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQogQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CiBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1NHSV9QQVJUSVRJT049eQotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfU1VOX1BBUlRJVElPTj15CiBDT05GSUdfS0FSTUFfUEFSVElUSU9OPXkKIENPTkZJR19FRklfUEFSVElUSU9OPXkKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzczNz1tCkBAIC0zMTk4LDg1ICsxMjI1LDMwIEBACiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQogQ09ORklHX05MU19LT0k4X1I9bQogQ09ORklHX05MU19LT0k4X1U9bQotQ09ORklHX05MU19VVEY4PW0KIENPTkZJR19ETE09bQogQ09ORklHX0RMTV9ERUJVRz15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9eQotQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfTFpPX0NPTVBSRVNTPW0KLUNPTkZJR19MWk9fREVDT01QUkVTUz1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQotQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19IRUFERVJTX0NIRUNLPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NISVJRPXkKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotQ09ORklHX1NDSEVEX0RFQlVHPXkKLUNPTkZJR19TQ0hFRFNUQVRTPXkKIENPTkZJR19USU1FUl9TVEFUUz15CiBDT05GSUdfREVCVUdfT0JKRUNUUz15Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTX1NFTEZURVNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19PQkpFQ1RTX0ZSRUU9eQogQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTPXkKIENPTkZJR19TTFVCX0RFQlVHX09OPXkKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFDS1RSQUNFPXkKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0hJR0hNRU09eQotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX1ZNPXkKIENPTkZJR19ERUJVR19XUklURUNPVU5UPXkKLUNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiBDT05GSUdfREVCVUdfTElTVD15CiBDT05GSUdfREVCVUdfU0c9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZPXkKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogQ09ORklHX0ZBVUxUX0lOSkVDVElPTj15CiBDT05GSUdfRkFJTFNMQUI9eQogQ09ORklHX0ZBSUxfUEFHRV9BTExPQz15CkBAIC0zMjg2LDExNiArMTI1OCwzMiBAQAogQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9TVEFDS1RSQUNFX0ZJTFRFUj15CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfVFJBQ0lORz15Ci0KLSMKLSMgVHJhY2VycwotIwotQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfU0NIRURfVFJBQ0VSPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX1NUQUNLX1RSQUNFUj15Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVUlMRF9ET0NTUkMgaXMgbm90IHNldAotQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHPXkKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAogQ09ORklHX1hNT049eQotIyBDT05GSUdfWE1PTl9ERUZBVUxUIGlzIG5vdCBzZXQKLUNPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKLUNPTkZJR19ERUJVR0dFUj15Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFhfVEVYVD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKIENPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNPXkKLUNPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUz15Ci0jIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQotQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTEKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEU9eQotQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfREVWRUxPUD15Ci1DT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9BVkNfU1RBVFM9eQotQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVFPTEKLUNPTkZJR19TRUNVUklUWV9TRUxJTlVYX0VOQUJMRV9TRUNNQVJLX0RFRkFVTFQ9eQotIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfWE9SX0JMT0NLUz1tCi1DT05GSUdfQVNZTkNfQ09SRT1tCi1DT05GSUdfQVNZTkNfTUVNQ1BZPW0KLUNPTkZJR19BU1lOQ19YT1I9bQotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19IQVNIPXkKLUNPTkZJR19DUllQVE9fUk5HPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCi0jIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVVUSEVOQz1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQotQ09ORklHX0NSWVBUT19TRVFJVj1tCi0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fQ1RSPW0KIENPTkZJR19DUllQVE9fQ1RTPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fTFJXPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX1hUUz1tCi0KLSMKLSMgSGFzaCBtb2RlcwotIwogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz1tCi0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fUk1EMTI4PW0KIENPTkZJR19DUllQVE9fUk1EMTYwPW0KQEAgLTM0MDYsMTggKzEyOTQsMTAgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKLUNPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQotQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KLUNPTkZJR19DUllQVE9fREVTPW0KIENPTkZJR19DUllQVE9fRkNSWVBUPW0KIENPTkZJR19DUllQVE9fS0hBWkFEPW0KIENPTkZJR19DUllQVE9fU0FMU0EyMD1tCkBAIC0zNDI1LDI2ICsxMzA1LDExIEBACiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KLUNPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQotCi0jCi0jIENvbXByZXNzaW9uCi0jCi1DT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQogQ09ORklHX0NSWVBUT19MWk89bQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15CiBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVg9bQogQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYX1JORz15CiBDT05GSUdfQ1JZUFRPX0RFVl9UQUxJVE9TPW0KLUNPTkZJR19QUENfQ0xPQ0s9eQotQ09ORklHX1BQQ19MSUJfUkhFQVA9eQogQ09ORklHX1ZJUlRVQUxJWkFUSU9OPXkKLUNPTkZJR19WSVJUSU89bQotQ09ORklHX1ZJUlRJT19SSU5HPW0KIENPTkZJR19WSVJUSU9fUENJPW0KIENPTkZJR19WSVJUSU9fQkFMTE9PTj1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IDEyYzhlZTguLmE0MzUzYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xLDE0MDEgKzEsOTkgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzUKLSMgTW9uIEFwciAxOSAyMzoxNjozNSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDMzI9eQotQ09ORklHX1dPUkRfU0laRT0zMgotIyBDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLSMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRX1BFUl9DUFU9eQotQ09ORklHX05SX0lSUVM9NTEyCi1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLUNPTkZJR19ERUZBVUxUX1VJTUFHRT15Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi0jIENPTkZJR19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTMyCi0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfQ0xLPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAotQ09ORklHX1NMQUJJTkZPPXkKLUNPTkZJR19SVF9NVVRFWEVTPXkKLUNPTkZJR19CQVNFX1NNQUxMPTAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQotIyBDT05GSUdfTVBDODI3Ml9BRFMgaXMgbm90IHNldAogQ09ORklHX1BRMkZBRFM9eQotIyBDT05GSUdfRVA4MjQ4RSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NR0NPR0UgaXMgbm90IHNldAotQ09ORklHX1BRMkFEUz15Ci1DT05GSUdfODI2MD15Ci1DT05GSUdfUFEyX0FEU19QQ0lfUElDPXkKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VNQkVEREVENnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNMj15Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMjUwPXkKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0yNTAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19TUEFSU0VfSVJRPXkKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TRUNDT01QPXkKLUNPTkZJR19JU0FfRE1BX0FQST15Ci0KLSMKLSMgQnVzIG9wdGlvbnMKLSMKLUNPTkZJR19aT05FX0RNQT15Ci0jIENPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEUgaXMgbm90IHNldAotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BQQ19QQ0lfQ0hPSUNFPXkKIENPTkZJR19QQ0k9eQotQ09ORklHX1BDSV9ET01BSU5TPXkKLUNPTkZJR19QQ0lfU1lTQ0FMTD15Ci1DT05GSUdfUENJXzgyNjA9eQogIyBDT05GSUdfODI2MF9QQ0k5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVNfUkFQSURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgQWR2YW5jZWQgc2V0dXAKLSMKLSMgQ09ORklHX0FEVkFOQ0VEX09QVElPTlMgaXMgbm90IHNldAotCi0jCi0jIERlZmF1bHQgc2V0dGluZ3MgZm9yIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdXNlZAotIwotQ09ORklHX0xPV01FTV9TSVpFPTB4MzAwMDAwMDAKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwCi1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YzAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19JUFY2PXkKLSMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSVBWNl9TSVQ9eQotQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQotIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAotCi0jCi0jIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfSVBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfSVA2X05GX1FVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQNl9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKLQotIwotIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQotIwotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKIENPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQotQ09ORklHX01URF9DRklfTk9TV0FQPXkKLSMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JND15Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKLQotIwotIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLQotIwotIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKLSMKLSMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAotQ09ORklHX09GX0ZMQVRUUkVFPXkKLUNPTkZJR19PRl9EWU5BTUlDPXkKLUNPTkZJR19PRl9ERVZJQ0U9eQotQ09ORklHX09GX0dQSU89eQotQ09ORklHX09GX01ESU89eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0lERV9HRD15Ci1DT05GSUdfSURFX0dEX0FUQT15Ci0jIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfVFVOPXkKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAotQ09ORklHX01ESU9fQklUQkFORz15Ci0jIENPTkZJR19NRElPX0dQSU8gaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQz15Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfUFFfTURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogQ09ORklHX1BQUD15Ci0jIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKIENPTkZJR19QUFBfQVNZTkM9eQogQ09ORklHX1BQUF9TWU5DX1RUWT15CiBDT05GSUdfUFBQX0RFRkxBVEU9eQotIyBDT05GSUdfUFBQX0JTRENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz15Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfVk1YTkVUMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKLSMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19JVDg3NjFFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU0NIIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfR1BJT19DUzU1MzUgaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0KLSMKLSMgQUM5NyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19BR1AgaXMgbm90IHNldAotQ09ORklHX1ZHQV9BUkI9eQotQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwogQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCi1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQotQ09ORklHX1VTQl9NNjY1OTI9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15Ci0jIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19BQ0xfU1VQUE9SVD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0JESV9TV0lUQ0g9eQotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX0hBU0gyPXkKLUNPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKIENPTkZJR19DUllQVE9fQ0JDPXkKLSMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQotCi0jCi0jIEhhc2ggbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLQotIwotIyBEaWdlc3QKLSMKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVTPXkKLSMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0Ci0KLSMKLSMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCi0jCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0hXPXkKLSMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0NMT0NLPXkKLUNPTkZJR19QUENfTElCX1JIRUFQPXkKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCmluZGV4IGExOGY1OTcuLmNkODBmYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpAQCAtMSwxNzgxICsxLDEwOCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjM2IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19DSEVDS19DQUNIRV9DT0hFUkVOQ1k9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQotIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotCi0jCi0jIFJDVSBTdWJzeXN0ZW0KLSMKLUNPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkNVX0ZBTk9VVD0zMgotIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX1JEX0daSVA9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9MWk89eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9OT09QPXkKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKLSMgQ09ORklHX0xJTktTVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUT1JDRU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfTVBDNzQ0OEhQQzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0hPTExZIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUFJQTUMyODAwPXkKLSMgQ09ORklHX1BQQ19DMksgaXMgbm90IHNldAotQ09ORklHX01WNjRYNjA9eQotIyBDT05GSUdfR0FNRUNVQkUgaXMgbm90IHNldAotIyBDT05GSUdfV0lJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX1RJQ0tfT05FU0hPVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAotQ09ORklHX0haXzI1MD15Ci0jIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfSFo9MjUwCi1DT05GSUdfU0NIRURfSFJUSUNLPXkKLUNPTkZJR19QUkVFTVBUX05PTkU9eQotIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPXkKLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci1DT05GSUdfUFBDX0lORElSRUNUX1BDST15Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLSMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15CiBDT05GSUdfWEZSTV9VU0VSPXkKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKLUNPTkZJR19JTkVUX0xSTz15Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLUNPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQotQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCi0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAotIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQotQ09ORklHX01URF9HRU5fUFJPQkU9eQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci0jIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfVVRJTD15Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAotCi0jCi0jIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfRkxBVFRSRUU9eQotQ09ORklHX09GX0RZTkFNSUM9eQotQ09ORklHX09GX0RFVklDRT15Ci1DT05GSUdfT0ZfSTJDPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotCi0jCi0jIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKLSMKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBFRVBST00gc3VwcG9ydAotIwotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci0KLSMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotQ09ORklHX0lERV9YRkVSX01PREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX0dEPXkKLUNPTkZJR19JREVfR0RfQVRBPXkKLSMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci1DT05GSUdfSURFX1BST0NfRlM9eQotCi0jCi0jIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15Ci0KLSMKLSMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0Ci0jCi1DT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotQ09ORklHX0lERVBDSV9QQ0lCVVNfT1JERVI9eQotIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKLSMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKLSMgQ09ORklHX0JMS19ERVZfQUVDNjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVc9eQotIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BPXkKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTSV9NT0Q9eQotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCiBDT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKLSMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQotQ09ORklHX1NBVEFfUE1QPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfU0ZGPXkKLSMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX01WPXkKLSMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAotIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgotIwotCi0jCi0jIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQotIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAotIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15Ci0jIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfS1NaODg0WF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMD15Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAogQ09ORklHXzgxMzlUT089eQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKIENPTkZJR19FMTAwMD15Ci0jIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAotIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lHQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0JWRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLWTIgaXMgbm90IHNldAotIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15Ci0jIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKLUNPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQotIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hFTFNJT19UNF9ERVBFTkRTPXkKLSMgQ09ORklHX0NIRUxTSU9fVDQgaXMgbm90IHNldAotIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19URUhVVEkgaXMgbm90IHNldAotIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAotIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTj15Ci0jIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotCi0jCi0jIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKLSMKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRERJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9eQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwogQ09ORklHX1NFUklBTF9NUFNDPXkKIENPTkZJR19TRVJJQUxfTVBTQ19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotCi0jCi0jIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKLSMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAogQ09ORklHX0kyQ19NVjY0WFhYPXkKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQzc2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci1DT05GSUdfVkdBX0FSQj15Ci1DT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi1DT05GSUdfVkdBX0NPTlNPTEU9eQotIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAotQ09ORklHX0hJRF9BNFRFQ0g9eQotQ09ORklHX0hJRF9BUFBMRT15Ci1DT05GSUdfSElEX0JFTEtJTj15Ci1DT05GSUdfSElEX0NIRVJSWT15Ci1DT05GSUdfSElEX0NISUNPTlk9eQotQ09ORklHX0hJRF9DWVBSRVNTPXkKIENPTkZJR19ISURfRFJBR09OUklTRT15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfRVpLRVk9eQotQ09ORklHX0hJRF9LWUU9eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX1RXSU5IQU49eQotQ09ORklHX0hJRF9LRU5TSU5HVE9OPXkKLUNPTkZJR19ISURfTE9HSVRFQ0g9eQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAotQ09ORklHX0hJRF9NSUNST1NPRlQ9eQotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKIENPTkZJR19ISURfTlRSSUc9eQogQ09ORklHX0hJRF9PUlRFSz15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKLSMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfUEVUQUxZTlg9eQotIyBDT05GSUdfSElEX1FVQU5UQSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX0dSRUVOQVNJQT15Ci0jIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQotIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfVE9QU0VFRD15CiBDT05GSUdfSElEX1RIUlVTVE1BU1RFUj15CiBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGPXkKIENPTkZJR19ISURfWkVST1BMVVM9eQogQ09ORklHX1pFUk9QTFVTX0ZGPXkKLUNPTkZJR19VU0JfU1VQUE9SVD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKLSMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0KLSMKLSMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KLSMKLSMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAogQ09ORklHX1JUQ19EUlZfTUFYNjkwMD15Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15Ci0jIENPTkZJR19ORlNfVjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19ERUNPTVBSRVNTX0daSVA9eQotQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQotQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15Ci1DT05GSUdfREVDT01QUkVTU19MWk89eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1dFUlJPUj15Ci1DT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKLSMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgotQ09ORklHX0NSWVBUTz15Ci0KLSMKLSMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCi0jCi0jIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDM4MDhiYzIuLjQ5Y2ZmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtMSw0NzAgKzEsNTYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzQKLSMgVGh1IEFwciAxNSAxMTozMjoxNSAyMDEwCi0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX0JPT0szU182ND15Ci0jIENPTkZJR19QUENfQk9PSzNFXzY0IGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLSMgQ09ORklHX1BPV0VSNF9PTkxZIGlzIG5vdCBzZXQKLUNPTkZJR19QT1dFUjM9eQotQ09ORklHX1BPV0VSND15CiBDT05GSUdfVFVORV9DRUxMPXkKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKLSMgQ09ORklHX1ZTWCBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzY0PXkKLUNPTkZJR19QUENfTU1fU0xJQ0VTPXkKLUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKLUNPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR182NEJJVD15Ci1DT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKLUNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15Ci1DT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19DT01QQVQ9eQotQ09ORklHX1NZU1ZJUENfQ09NUEFUPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkNVIFN1YnN5c3RlbQotIwotQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19SQ1VfRkFOT1VUPTY0Ci0jIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE3Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX05BTUVTUEFDRVM9eQotIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfUkRfR1pJUD15Ci0jIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15CiBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfU0lHTkFMRkQ9eQotQ09ORklHX1RJTUVSRkQ9eQotQ09ORklHX0VWRU5URkQ9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQotCi0jCi0jIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCi0jCiAjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKLUNPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKLUNPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQotCi0jCi0jIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwotIwotIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotQ09ORklHX1NMT1dfV09SSz15Ci0jIENPTkZJR19TTE9XX1dPUktfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX1NUT1BfTUFDSElORT15Ci1DT05GSUdfQkxPQ0s9eQotQ09ORklHX0JMS19ERVZfQlNHPXkKLSMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19CTE9DS19DT01QQVQ9eQotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QQVNFTUkgaXMgbm90IHNldAogQ09ORklHX1BQQ19QUzM9eQotCi0jCi0jIFBTMyBQbGF0Zm9ybSBPcHRpb25zCi0jCi0jIENPTkZJR19QUzNfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1BTM19IVEFCX1NJWkU9MjAKLSMgQ09ORklHX1BTM19EWU5BTUlDX0RNQSBpcyBub3Qgc2V0Ci1DT05GSUdfUFMzX1ZVQVJUPXkKLUNPTkZJR19QUzNfUFMzQVY9eQotQ09ORklHX1BTM19TWVNfTUFOQUdFUj15Ci1DT05GSUdfUFMzX1NUT1JBR0U9eQogQ09ORklHX1BTM19ESVNLPXkKIENPTkZJR19QUzNfUk9NPXkKIENPTkZJR19QUzNfRkxBU0g9eQogQ09ORklHX1BTM19WUkFNPW0KIENPTkZJR19QUzNfTFBNPW0KLUNPTkZJR19QUENfQ0VMTD15Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DRUxMRUIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfUVBBQ0UgaXMgbm90IHNldAotCi0jCi0jIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zCi0jCi1DT05GSUdfU1BVX0ZTPW0KLUNPTkZJR19TUFVfRlNfNjRLX0xTPXkKLUNPTkZJR19TUFVfQkFTRT15Ci0jIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotQ09ORklHX1NDSEVEX0hSVElDSz15Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKLUNPTkZJR19JT01NVV9IRUxQRVI9eQotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKIENPTkZJR19LRVhFQz15Ci0jIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFX0lSUT15Ci0jIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKLUNPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2Ci1DT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfSFVHRVRMQkZTPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLSMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQotQ09ORklHX1NQQVJTRU1FTT15Ci1DT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15Ci1DT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQotQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiAjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCBpcyBub3Qgc2V0Ci1DT05GSUdfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRT15Ci0jIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQotQ09ORklHX01JR1JBVElPTj15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfQVJDSF9NRU1PUllfUFJPQkU9eQotQ09ORklHX1BQQ19IQVNfSEFTSF82NEs9eQotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19TQ0hFRF9TTVQ9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogQ09ORklHX1BNPXkKIENPTkZJR19QTV9ERUJVRz15Ci0jIENPTkZJR19QTV9BRFZBTkNFRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15Ci1DT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKLUNPTkZJR19QUENfUENJX0NIT0lDRT15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAogQ09ORklHX05FVD15Ci1DT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci0jIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfVFVOTkVMPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogQ09ORklHX0lQVjY9eQotIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPXkKLSMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBWNl9TSVQ9eQotIyBDT05GSUdfSVBWNl9TSVRfNlJEIGlzIG5vdCBzZXQKLUNPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKLSMgQ09ORklHX0lQVjZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPW0KIENPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfU0NPPW0KQEAgLTQ3NCwxMDUxICs2MCwxMzMgQEAKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CiBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQogQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwogQ09ORklHX0JUX0hDSUJUVVNCPW0KLSMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0FUSDNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTUz15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XRVhUX0NPUkU9eQotQ09ORklHX1dFWFRfUFJPQz15CiBDT05GSUdfQ0ZHODAyMTE9bQotIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLSMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT1tCiBDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKICMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15Ci0jIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCi0jIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgotIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAotIwotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNQotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0lfTU9EPXkKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfU1I9eQotIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9bQotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKLSMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKLSMgQ09ORklHX0JMS19ERVZfTUQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09bQotIyBDT05GSUdfRE1fREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9bQotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0dFTElDX05FVD15CiBDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAotIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAotIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAotIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCiAjIENPTkZJR19VU0JfTkVUX0NEQ0VUSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfQ0RDX0VFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX0RNOTYwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTkVUX1NNU0M3NVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9NQ1M3ODMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9aQVVSVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KIENPTkZJR19QUFBfTVVMVElMSU5LPXkKLSMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAogQ09ORklHX1BQUF9BU1lOQz1tCi0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPW0KLSMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKIENPTkZJR19QUFBPRT1tCi0jIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLUNPTkZJR19TTEhDPW0KLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKIENPTkZJR19JTlBVVF9KT1lERVY9bQogQ09ORklHX0lOUFVUX0VWREVWPW0KLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEkgaXMgbm90IHNldAotCi0jCi0jIFBQUyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUFMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKLSMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15Ci1DT05GSUdfRkJfU1lTX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfU1lTX0ZPUFM9eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QUzM9eQotQ09ORklHX0ZCX1BTM19ERUZBVUxUX1NJWkVfTT05Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0ZCX0xPR09fRVhUUkE9eQogIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9bQotIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLUNPTkZJR19TTkRfSFdERVA9bQotQ09ORklHX1NORF9SQVdNSURJPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotQ09ORklHX1NORF9QUzM9bQotQ09ORklHX1NORF9QUzNfREVGQVVMVF9TVEFSVF9ERUxBWT0yMDAwCi1DT05GSUdfU05EX1VTQj15CiBDT05GSUdfU05EX1VTQl9BVURJTz1tCi0jIENPTkZJR19TTkRfVVNCX1VBMTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKIENPTkZJR19ISURSQVc9eQotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD1tCi0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAotCi0jCi0jIFNwZWNpYWwgSElEIGRyaXZlcnMKLSMKLSMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0FQUExFPW0KIENPTkZJR19ISURfQkVMS0lOPW0KIENPTkZJR19ISURfQ0hFUlJZPW0KLSMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DWVBSRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9bQotIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9UV0lOSEFOPW0KLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9bQotIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HSUc5NDBfRkYgaXMgbm90IHNldAotIyBDT05GSUdfSElEX01BR0lDTU9VU0UgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9bQotIyBDT05GSUdfSElEX01PU0FSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTU9OVEVSRVkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9PUlRFSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfUEFOVEhFUkxPUkQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BFVEFMWU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogQ09ORklHX0hJRF9TT05ZPW0KLSMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VOUExVUz1tCi0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KLSMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfVEhSVVNUTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9XQUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwotIwogQ09ORklHX1VTQl9ERVZJQ0VGUz15CiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj1tCi0jIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKLUNPTkZJR19VU0JfRUhDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQotQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucwotIwotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKLSMKLQotIwotIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwotIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQotIwotIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLUNPTkZJR19SVENfTElCPW0KIENPTkZJR19SVENfQ0xBU1M9bQotCi0jCi0jIFJUQyBpbnRlcmZhY2VzCi0jCi1DT05GSUdfUlRDX0lOVEZfU1lTRlM9eQotQ09ORklHX1JUQ19JTlRGX1BST0M9eQotQ09ORklHX1JUQ19JTlRGX0RFVj15Ci0jIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1BTMz1tCi0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz1tCi0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPW0KICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPW0KLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEMj15Ci0jIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKLUNPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKLSMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKLUNPTkZJR19RVU9UQV9UUkVFPXkKLSMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQotQ09ORklHX1FVT1RBQ1RMPXkKIENPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQotIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2FjaGVzCi0jCi0jIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15Ci1DT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKLUNPTkZJR19IVUdFVExCX1BBR0U9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQotIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLUNPTkZJR19TVU5SUENfR1NTPXkKLUNPTkZJR19SUENTRUNfR1NTX0tSQjU9eQotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLUNPTkZJR19DUkNfQ0NJVFQ9bQotQ09ORklHX0NSQzE2PXkKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkNfSVRVX1Q9bQotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfTFpPX0NPTVBSRVNTPW0KLUNPTkZJR19MWk9fREVDT01QUkVTUz1tCi1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci1DT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15Ci1DT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQotQ09ORklHX0ZSQU1FX1dBUk49MjA0OAogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKLUNPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0s9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQotIyBDT05GSUdfUFJPVkVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLREVQPXkKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTE9DS0RFUD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19XUklURUNPVU5UPXkKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiBDT05GSUdfREVCVUdfTElTVD15Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0jIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfUklOR19CVUZGRVI9eQotQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQotIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VNVUxBVEVEX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfSVJRU1RBQ0tTPXkKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRD1tCi1DT05GSUdfQ1JZUFRPX0FFQUQyPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15Ci1DT05GSUdfQ1JZUFRPX0hBU0g9eQotQ09ORklHX0NSWVBUT19IQVNIMj15Ci1DT05GSUdfQ1JZUFRPX1JORz1tCi1DT05GSUdfQ1JZUFRPX1JORzI9eQotQ09ORklHX0NSWVBUT19QQ09NUD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj15Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19QQ1JZUFQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCi0jCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCi1DT05GSUdfQ1JZUFRPX1NFUUlWPW0KLQotIwotIyBCbG9jayBtb2RlcwotIwotQ09ORklHX0NSWVBUT19DQkM9eQotQ09ORklHX0NSWVBUT19DVFI9bQotIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj1tCi0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fUENCQz1tCi0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fR0hBU0g9bQotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKLQotIwotIyBDaXBoZXJzCi0jCi1DT05GSUdfQ1JZUFRPX0FFUz1tCi0jIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND1tCi0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fU0FMU0EyMD1tCi0jIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLQotIwotIyBDb21wcmVzc2lvbgotIwotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89bQotCi0jCi0jIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgotIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwppbmRleCAxNmFlNzE3Li5mODdmMGUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZwpAQCAtMSw0MDIgKzEsODAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOC1yYzMKLSMgVHVlIE5vdiAxMSAxOTozNzowNiAyMDA4Ci0jCiBDT05GSUdfUFBDNjQ9eQotCi0jCi0jIFByb2Nlc3NvciBzdXBwb3J0Ci0jCi0jIENPTkZJR19QT1dFUjRfT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfUE9XRVIzPXkKLUNPTkZJR19QT1dFUjQ9eQotIyBDT05GSUdfVFVORV9DRUxMIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfRlBVPXkKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19WU1g9eQotQ09ORklHX1BQQ19TVERfTU1VPXkKLUNPTkZJR19QUENfTU1fU0xJQ0VTPXkKLUNPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MTI4Ci1DT05GSUdfNjRCSVQ9eQotQ09ORklHX1dPUkRfU0laRT02NAotQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0NPTVBBVD15Ci1DT05GSUdfU1lTVklQQ19DT01QQVQ9eQotQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKIENPTkZJR19UQVNLU1RBVFM9eQogQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfVEFTS19YQUNDVD15CiBDT05GSUdfVEFTS19JT19BQ0NPVU5USU5HPXkKIENPTkZJR19BVURJVD15CiBDT05GSUdfQVVESVRTWVNDQUxMPXkKLUNPTkZJR19BVURJVF9UUkVFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0NHUk9VUFM9eQotIyBDT05GSUdfQ0dST1VQX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfTlM9eQogQ09ORklHX0NHUk9VUF9GUkVFWkVSPXkKIENPTkZJR19DR1JPVVBfREVWSUNFPXkKIENPTkZJR19DUFVTRVRTPXkKLSMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15Ci0jIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BJRF9DUFVTRVQ9eQotQ09ORklHX1JFTEFZPXkKLUNPTkZJR19OQU1FU1BBQ0VTPXkKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLUNPTkZJR19LQUxMU1lNU19BTEw9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19QQ1NQS1JfUExBVEZPUk09eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1BDSV9RVUlSS1M9eQotQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19TVE9QX01BQ0hJTkU9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLUNPTkZJR19CTEtfREVWX0JTRz15Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxPQ0tfQ09NUEFUPXkKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotQ09ORklHX0ZSRUVaRVI9eQotQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCi1DT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQotQ09ORklHX1BQQ19QU0VSSUVTPXkKIENPTkZJR19QUENfU1BMUEFSPXkKLUNPTkZJR19FRUg9eQogQ09ORklHX1NDQU5MT0c9bQotQ09ORklHX0xQQVJDRkc9eQogQ09ORklHX1BQQ19TTUxQQVI9eQotQ09ORklHX0NNTT15CiBDT05GSUdfRFRMPXkKLSMgQ09ORklHX1BQQ19JU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUEFTRU1JIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QUzMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05BVElWRT15Ci0jIENPTkZJR19VREJHX1JUQVNfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfWElDUz15Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKLSMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAotQ09ORklHX1BQQ19JODI1OT15Ci0jIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfUlRBUz15Ci1DT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HPXkKLUNPTkZJR19SVEFTX1BST0M9eQogQ09ORklHX1JUQVNfRkxBU0g9bQotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfSUJNVklPPXkKIENPTkZJR19JQk1FQlVTPXkKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBvcHRpb25zCi0jCi1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19IWl8xMDA9eQotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19DT01QQVRfQklORk1UX0VMRj15Ci0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRT15Ci1DT05GSUdfSU9NTVVfVk1FUkdFPXkKLUNPTkZJR19JT01NVV9IRUxQRVI9eQogQ09ORklHX0hPVFBMVUdfQ1BVPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKLSMgQ09ORklHX1BIWVBfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLUNPTkZJR19OVU1BPXkKLUNPTkZJR19OT0RFU19TSElGVD04Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgotQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKLUNPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci0jIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKLUNPTkZJR19TUEFSU0VNRU09eQotQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQotQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQotQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKLUNPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQotQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKIENPTkZJR19NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFPXkKIENPTkZJR19NRU1PUllfSE9UUkVNT1ZFPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotQ09ORklHX1JFU09VUkNFU182NEJJVD15Ci1DT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKLSMgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogQ09ORklHX1NDSEVEX1NNVD15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAotQ09ORklHX1NFQ0NPTVA9eQotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJPXkKLUNPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKLUNPTkZJR19QQ0lfTVNJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0k9bQotIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHX1BDSV9DUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJX1NIUEMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUdfUENJX1JQQT1tCiBDT05GSUdfSE9UUExVR19QQ0lfUlBBX0RMUEFSPW0KLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQotIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX1hGUk1fSVBDT01QPW0KIENPTkZJR19ORVRfS0VZPW0KLSMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfSVBJUD15Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAogQ09ORklHX1NZTl9DT09LSUVTPXkKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQotQ09ORklHX0lORVRfVFVOTkVMPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci1DT05GSUdfSU5FVF9MUk89eQotQ09ORklHX0lORVRfRElBRz15Ci1DT05GSUdfSU5FVF9UQ1BfRElBRz15Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKLQotIwotIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi1DT05GSUdfTkVURklMVEVSX05FVExJTks9bQogQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCi1DT05GSUdfTkZfQ1RfQUNDVD15Ci1DT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQotIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKIENPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KLSMgQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjMgaXMgbm90IHNldAogQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQotIyBDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlMgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCi1DT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OQllURVM9bQpAQCAtNDIxLDcgKzk5LDYgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UPW0KLSMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpAQCAtNDI5LDE0ICsxMDYsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19ORl9ERUZSQUdfSVBWND1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCkBAIC00NDgsMjYyICsxMTgsNDMgQEAKIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfTkZfTkFUPW0KLUNPTkZJR19ORl9OQVRfTkVFREVEPXkKIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KIENPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCi1DT05GSUdfTkZfTkFUX1BST1RPX1VEUExJVEU9bQotQ09ORklHX05GX05BVF9GVFA9bQotQ09ORklHX05GX05BVF9JUkM9bQotQ09ORklHX05GX05BVF9URlRQPW0KLSMgQ09ORklHX05GX05BVF9BTUFOREEgaXMgbm90IHNldAotIyBDT05GSUdfTkZfTkFUX1BQVFAgaXMgbm90IHNldAotIyBDT05GSUdfTkZfTkFUX0gzMjMgaXMgbm90IHNldAotIyBDT05GSUdfTkZfTkFUX1NJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotQ09ORklHX0xMQz15Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX05FVF9DTFNfUk9VVEU9eQotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9eQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCi0jIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQogQ09ORklHX0JMS19ERVZfRkQ9bQotIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX05CRD1tCi0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAotIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKLUNPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKLSMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi0jIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQotCi0jCi0jIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAotIwotQ09ORklHX0JMS19ERVZfSURFUENJPXkKLUNPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKLSMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15Ci0jIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0FNRDc0WFg9eQotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQT15Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTkVUTElOSz15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci0jIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiBDT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKLSMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KLQotIwotIyBTQ1NJIFRyYW5zcG9ydHMKLSMKLUNPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15Ci1DT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCiBDT05GSUdfU0NTSV9TQVNfQVRUUlM9bQotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1NSUF9BVFRSUz15Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9JQk1WU0NTST15CiBDT05GSUdfU0NTSV9JQk1WRkM9bQotQ09ORklHX1NDU0lfSUJNVkZDX1RSQUNFPXkKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lNTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCi1DT05GSUdfU0NTSV9TWU01M0M4WFhfREVGQVVMVF9UQUdTPTE2Ci1DT05GSUdfU0NTSV9TWU01M0M4WFhfTUFYX1RBR1M9NjQKLUNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPPXkKIENPTkZJR19TQ1NJX0lQUj15Ci1DT05GSUdfU0NTSV9JUFJfVFJBQ0U9eQotQ09ORklHX1NDU0lfSVBSX0RVTVA9eQotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9RTEFfRkM9bQotIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTFBGQz1tCi0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogQ09ORklHX0FUQT15Ci0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotQ09ORklHX1NBVEFfUE1QPXkKLSMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9TRkYgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CkBAIC03MTIsMTA5MiArMTYzLDE4OSBAQAogQ09ORklHX01EX01VTFRJUEFUSD1tCiBDT05GSUdfTURfRkFVTFRZPW0KIENPTkZJR19CTEtfREVWX0RNPXkKLSMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19ETV9DUllQVD1tCiBDT05GSUdfRE1fU05BUFNIT1Q9bQogQ09ORklHX0RNX01JUlJPUj1tCiBDT05GSUdfRE1fWkVSTz1tCiBDT05GSUdfRE1fTVVMVElQQVRIPW0KLSMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAogQ09ORklHX1RVTj1tCi0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci1DT05GSUdfUEhZTElCPXkKLQotIwotIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAotIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKIENPTkZJR19WT1JURVg9eQotIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAotIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogQ09ORklHX0lCTVZFVEg9eQotIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiBDT05GSUdfUENORVQzMj15Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogQ09ORklHX0UxMDA9eQotIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAotIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAotIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAotIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTDIgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19BQ0VOSUM9bQogQ09ORklHX0FDRU5JQ19PTUlUX1RJR09OX0k9eQotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQogQ09ORklHX0UxMDAwRT15Ci0jIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAotIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAotQ09ORklHX05FVERFVl8xMDAwMD15CiBDT05GSUdfQ0hFTFNJT19UMT1tCiBDT05GSUdfQ0hFTFNJT19UMz1tCiBDT05GSUdfRUhFQT15Ci0jIENPTkZJR19FTklDIGlzIG5vdCBzZXQKIENPTkZJR19JWEdCRT1tCiBDT05GSUdfSVhHQj1tCiBDT05GSUdfUzJJTz1tCiBDT05GSUdfTVlSSTEwR0U9bQogQ09ORklHX05FVFhFTl9OSUM9bQotIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKIENPTkZJR19NTFg0X0VOPW0KLUNPTkZJR19NTFg0X0NPUkU9bQotIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTU9MIGlzIG5vdCBzZXQKLSMgQ09ORklHXzNDMzU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RNUzM4MFRSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUExJUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotIyBDT05GSUdfUFBQX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQogQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCi0jIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQotIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xIQz1tCi0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogQ09ORklHX05FVENPTlNPTEU9eQotIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKIENPTkZJR19ORVRQT0xMX1RSQVA9eQotQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0jIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCi0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19JTlBVVF9LRVlCT0FSRD15Ci1DT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0U9eQotQ09ORklHX01PVVNFX1BTMj15Ci1DT05GSUdfTU9VU0VfUFMyX0FMUFM9eQotQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQotQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQotQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15Ci1DT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQotIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9QQ1NQS1I9bQotIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19JODA0Mj15CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BBUktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19QQ0lQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX0xJQlBTMj15Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzIgaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci1DT05GSUdfREVWS01FTT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9JQ09NPW0KIENPTkZJR19TRVJJQUxfSlNNPW0KLSMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfUFJJTlRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUERFViBpcyBub3Qgc2V0Ci1DT05GSUdfSFZDX0RSSVZFUj15Ci1DT05GSUdfSFZDX0lSUT15CiBDT05GSUdfSFZDX0NPTlNPTEU9eQogQ09ORklHX0hWQ19SVEFTPXkKIENPTkZJR19IVkNTPW0KIENPTkZJR19JQk1fQlNSPW0KLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19NQVhfUkFXX0RFVlM9MTAyNAotIyBDT05GSUdfSEFOR0NIRUNLX1RJTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci0jIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLUNPTkZJR19JMkNfQUxHT0JJVD15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLQotIwotIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0FHUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKLUNPTkZJR19GQl9EREM9eQotIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9CQUNLTElHSFQ9eQotQ09ORklHX0ZCX01PREVfSEVMUEVSUz15Ci1DT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogQ09ORklHX0ZCX09GPXkKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQVRST1g9eQogQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQogQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15CiBDT05GSUdfRkJfTUFUUk9YX0c9eQotIyBDT05GSUdfRkJfTUFUUk9YX0kyQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRD15CiBDT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLUNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiBDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCi0jIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiBDT05GSUdfTENEX1BMQVRGT1JNPW0KLUNPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwogQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15Ci0KLSMKLSMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotQ09ORklHX0xPR09fTElOVVhfTU9OTz15Ci1DT05GSUdfTE9HT19MSU5VWF9WR0ExNj15Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbnB1dCBEZXZpY2VzCi0jCi1DT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi1DT05GSUdfSElEX0NPTVBBVD15Ci1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQlJJR0hUPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotQ09ORklHX0hJRF9ERUxMPXkKLUNPTkZJR19ISURfRVpLRVk9eQogQ09ORklHX0hJRF9HWVJBVElPTj15Ci1DT05GSUdfSElEX0xPR0lURUNIPXkKLSMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfTUlDUk9TT0ZUPXkKLUNPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15Ci0jIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKIENPTkZJR19VU0JfREVWSUNFRlM9eQotQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049bQotIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKIENPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBJbWFnaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KLUNPTkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKLUNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQotQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQotQ09ORklHX0lORklOSUJBTkRfSVBBVEg9bQogQ09ORklHX0lORklOSUJBTkRfRUhDQT1tCi0jIENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwIGlzIG5vdCBzZXQKIENPTkZJR19NTFg0X0lORklOSUJBTkQ9bQotIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQotQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUc9eQotIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVR19EQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JTkZJTklCQU5EX1NSUD1tCiBDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQogQ09ORklHX0VYVDJfRlNfWElQPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0REVWX0NPTVBBVCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUNF9GU19YQVRUUj15CiBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQogQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQotQ09ORklHX0ZTX1hJUD15Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEMj15Ci0jIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKIENPTkZJR19SRUlTRVJGU19GUz15Ci0jIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAogQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19KRlNfRlM9bQogQ09ORklHX0pGU19QT1NJWF9BQ0w9eQogQ09ORklHX0pGU19TRUNVUklUWT15Ci0jIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19YRlNfRlM9bQotIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX09DRlMyX0ZTX08yQ0I9bQotQ09ORklHX09DRlMyX0ZTX1NUQVRTPXkKLUNPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKLSMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0NPTVBBVF9KQkQgaXMgbm90IHNldAogQ09ORklHX0JUUkZTX0ZTPW0KIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQogQ09ORklHX05JTEZTMl9GUz1tCi1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCi0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwogQ09ORklHX0lTTzk2NjBfRlM9eQotIyBDT05GSUdfSk9MSUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pJU09GUyBpcyBub3Qgc2V0CiBDT05GSUdfVURGX0ZTPW0KLUNPTkZJR19VREZfTkxTPXkKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15Ci1DT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3Ci1DT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCi0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJGUz15Ci1DT05GSUdfSFVHRVRMQl9QQUdFPXkKLUNPTkZJR19DT05GSUdGU19GUz1tCi0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPW0KLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfTkZTRD1tCi1DT05GSUdfTkZTRF9WMl9BQ0w9eQotQ09ORklHX05GU0RfVjM9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPW0KLUNPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci1DT05GSUdfU1VOUlBDX0dTUz15Ci1DT05GSUdfU1VOUlBDX1hQUlRfUkRNQT1tCi0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAotQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCi0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQotIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15Ci0jIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0NSQ19DQ0lUVD1tCi1DT05GSUdfQ1JDMTY9eQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQ19JVFVfVD1tCi1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT1tCi1DT05GSUdfTFpPX0NPTVBSRVNTPW0KLUNPTkZJR19MWk9fREVDT01QUkVTUz1tCi1DT05GSUdfVEVYVFNFQVJDSD15Ci1DT05GSUdfVEVYVFNFQVJDSF9LTVA9bQotQ09ORklHX1RFWFRTRUFSQ0hfQk09bQotQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KLUNPTkZJR19QTElTVD15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0ZTPXkKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19TQ0hFRF9ERUJVRz15Ci1DT05GSUdfU0NIRURTVEFUUz15Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBQ0tUUkFDRT15Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX05PUF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLUNPTkZJR19UUkFDRVJfTUFYX1RSQUNFPXkKLUNPTkZJR19SSU5HX0JVRkZFUj15Ci1DT05GSUdfVFJBQ0lORz15Ci0KLSMKLSMgVHJhY2VycwotIwotQ09ORklHX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSVJRU09GRl9UUkFDRVI9eQogQ09ORklHX1NDSEVEX1RSQUNFUj15Ci1DT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19TVEFDS19UUkFDRVI9eQotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUc9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15CiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hDQUxMX1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUPXkKIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1Q9eQogQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1Q9eQogQ09ORklHX1hNT049eQogQ09ORklHX1hNT05fREVGQVVMVD15Ci1DT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15Ci1DT05GSUdfREVCVUdHRVI9eQotQ09ORklHX0lSUVNUQUNLUz15CiBDT05GSUdfVklSUV9ERUJVRz15Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BRUFEPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCiBDT05GSUdfQ1JZUFRPX05VTEw9bQotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLQotIwotIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKLSMKIENPTkZJR19DUllQVE9fQ0NNPW0KIENPTkZJR19DUllQVE9fR0NNPW0KLUNPTkZJR19DUllQVE9fU0VRSVY9bQotCi0jCi0jIEJsb2NrIG1vZGVzCi0jCi1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX0NUUj1tCi0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotCi0jCi0jIEhhc2ggbW9kZXMKLSMKIENPTkZJR19DUllQVE9fSE1BQz15Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi1DT05GSUdfQ1JZUFRPX0NSQzMyQz1tCiBDT05GSUdfQ1JZUFRPX01END1tCi1DT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLSMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fVEdSMTkyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotCi0jCi0jIENpcGhlcnMKLSMKIENPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KIENPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCiBDT05GSUdfQ1JZUFRPX1NBTFNBMjA9bQotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KIENPTkZJR19DUllQVE9fVEVBPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KLQotIwotIyBDb21wcmVzc2lvbgotIwotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KIENPTkZJR19DUllQVE9fTFpPPW0KLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCAwMWJlMGUyLi40ZjBjMTBhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSwxNDAzICsxLDEwMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjM0LXJjNQotIyBNb24gQXByIDE5IDIzOjE2OjM3IDIwMTAKLSMKLSMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKLQotIwotIyBQcm9jZXNzb3Igc3VwcG9ydAotIwotQ09ORklHX1BQQ19CT09LM1NfMzI9eQotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR180MHggaXMgbm90IHNldAotIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotQ09ORklHX1BQQ19CT09LM1M9eQotQ09ORklHXzZ4eD15Ci1DT05GSUdfUFBDX0ZQVT15Ci0jIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfU1REX01NVT15Ci1DT05GSUdfUFBDX1NURF9NTVVfMzI9eQotIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQotIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfTlJfSVJRUz01MTIKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKLUNPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLUNPTkZJR19QUENfVURCR18xNjU1MD15Ci0jIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVESVRfQVJDSD15Ci1DT05GSUdfR0VORVJJQ19CVUc9eQotQ09ORklHX0RUQz15Ci0jIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15Ci0jIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAotQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi1DT05GSUdfQ09OU1RSVUNUT1JTPXkKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19QQ0lfUVVJUktTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQotQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci1DT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15Ci1DT05GSUdfSEFWRV9ETUFfQVRUUlM9eQotQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15Ci0KLSMKLSMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCi0jCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKLUNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKLQotIwotIyBQbGF0Zm9ybSBzdXBwb3J0Ci0jCiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQotIyBDT05GSUdfTElOS1NUQVRJT04gaXMgbm90IHNldAogQ09ORklHX1NUT1JDRU5URVI9eQotIyBDT05GSUdfTVBDNzQ0OEhQQzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0hPTExZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19QUlBNQzI4MDAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0MySyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBDMTBYX0JSSURHRT15Ci1DT05GSUdfTVBDMTBYX09QRU5QSUM9eQotIyBDT05GSUdfTVBDMTBYX1NUT1JFX0dBVEhFUklORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FQ1VCRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSUkgaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FPTkUgaXMgbm90IHNldAotQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQotIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIG9wdGlvbnMKLSMKLSMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19IWl8xMDA9eQotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLSMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9OT05FPXkKLSMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAotIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQotQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRV9JUlE9eQotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLUNPTkZJR19NSUdSQVRJT049eQotIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgotQ09ORklHX1BQQ180S19QQUdFUz15Ci0jIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAotQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAiCi1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0lTQV9ETUE9eQotQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQotQ09ORklHX0ZTTF9TT0M9eQotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX0RPTUFJTlM9eQotQ09ORklHX1BDSV9TWVNDQUxMPXkKLSMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwotIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCi0jCi1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKLUNPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAogQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCiBDT05GSUdfUEFDS0VUPW0KIENPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQ0IgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQU4gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1M9eQotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotCi0jCi0jIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCi0jCi0jIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15Ci0jIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwogQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19GVEw9eQogQ09ORklHX05GVEw9eQogQ09ORklHX05GVExfUlc9eQotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci0jIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVBfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCi0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAotIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAotCi0jCi0jIEVFUFJPTSBzdXBwb3J0Ci0jCi0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLUNPTkZJR19JREVfWEZFUl9NT0RFPXkKLUNPTkZJR19JREVfVElNSU5HUz15Ci0jIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfR0Q9eQotQ09ORklHX0lERV9HRF9BVEE9eQotIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERV9UQVNLX0lPQ1RMIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfUFJPQ19GUz15Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfU0ZGPXkKLQotIwotIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKLSMKLUNPTkZJR19CTEtfREVWX0lERVBDST15Ci1DT05GSUdfSURFUENJX1BDSUJVU19PUkRFUj15Ci0jIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQotIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQotIyBDT05GSUdfQkxLX0RFVl9UQzg2QzAwMSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVETUE9eQotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19TQ1NJX01PRD15Ci0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKLUNPTkZJR19TQ1NJX0RNQT15Ci0jIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKIENPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NSPXkKLSMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAotQ09ORklHX1NDU0lfTE9XTEVWRUw9eQotIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0hQU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPXkKLUNPTkZJR19NRF9BVVRPREVURUNUPXkKIENPTkZJR19NRF9MSU5FQVI9eQogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15Ci0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQotQ09ORklHX01EX1JBSUQ2X1BRPXkKLSMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCi0jCi0KLSMKLSMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgotIwotIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT1tCi0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotQ09ORklHX01JST15Ci1DT05GSUdfTkVUREVWXzEwMDA9eQotIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMMksgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JR0IgaXMgbm90IHNldAotIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiBDT05GSUdfUjgxNjk9eQotIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLR0UgaXMgbm90IHNldAotIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JOWDIgaXMgbm90IHNldAotIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfUFFfTURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLUNPTkZJR19XTEFOPXkKLSMgQ09ORklHX0FJUk8gaXMgbm90IHNldAotIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotCi0jCi0jIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCi0jCi0jIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQgaXMgbm90IHNldAotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLUNPTkZJR19IV19SQU5ET009bQotIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15Ci1DT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCi0jCiBDT05GSUdfSTJDX01QQz15Ci0jIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1hJTElOWCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLQotIwotIyBQUFMgc3VwcG9ydAotIwotIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15Ci0jIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfTUFYODkyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTFBDX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKLUNPTkZJR19WR0FfQVJCPXkKLUNPTkZJR19WR0FfQVJCX01BWF9HUFVTPTE2Ci0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVVBQT1JUPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15Ci0jIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCiBDT05GSUdfVVNCX0RFVklDRUZTPXkKLUNPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKLSMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfWFBTX1VTQl9IQ0RfWElMSU5YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15Ci0jIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQotIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15Ci0jIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQotIwotCi0jCi0jIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCi0jCiBDT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAotCi0jCi0jIFVTQiBwb3J0IGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAotCi0jCi0jIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCi0jCi0jIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKLSMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTVNNNjI0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfRlM9bQotIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKLUNPTkZJR19GU05PVElGWT15Ci1DT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKLUNPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15Ci0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLSMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci0jIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci1DT05GSUdfRVhQT1JURlM9bQotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAogQ09ORklHX05MU19JU084ODU5XzE9eQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogQ09ORklHX05MU19VVEY4PXkKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci1DT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfSEFTX0lPTUVNPXkKLUNPTkZJR19IQVNfSU9QT1JUPXkKLUNPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15Ci1DT05GSUdfTkxBVFRSPXkKLUNPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQotQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi1DT05GSUdfWE9SX0JMT0NLUz15Ci1DT05GSUdfQVNZTkNfQ09SRT15Ci1DT05GSUdfQVNZTkNfTUVNQ1BZPXkKLUNPTkZJR19BU1lOQ19YT1I9eQotQ09ORklHX0FTWU5DX1BRPXkKLUNPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15Ci0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTh4eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnCmluZGV4IDg1ZTY1NGIuLmQwYTViNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTh4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZwpAQCAtMSw5MzQgKzEsODYgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNC1yYzEKLSMgVHVlIE1hciAyMyAwODoyMjoxNSAyMDEwCi0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQQ19CT09LM1NfMzIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogQ09ORklHX1BQQ184eHg9eQotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR184eHg9eQotQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKLUNPTkZJR19QUENfTU1VX05PSEFTSF8zMj15Ci0jIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQotQ09ORklHX1BQQzMyPXkKLUNPTkZJR19XT1JEX1NJWkU9MzIKLSMgQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX01NVT15Ci1DT05GSUdfR0VORVJJQ19DTU9TX1VQREFURT15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15Ci0jIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAotQ09ORklHX0lSUV9QRVJfQ1BVPXkKLUNPTkZJR19OUl9JUlFTPTUxMgotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQotQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQotIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDPXkKLUNPTkZJR19FQVJMWV9QUklOVEs9eQotQ09ORklHX0dFTkVSSUNfTlZSQU09eQotQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQotQ09ORklHX1BQQ19PRj15Ci1DT05GSUdfT0Y9eQotIyBDT05GSUdfUFBDX1VEQkdfMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAotQ09ORklHX0FVRElUX0FSQ0g9eQotQ09ORklHX0dFTkVSSUNfQlVHPXkKLUNPTkZJR19EVEM9eQotIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQotIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15Ci1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotQ09ORklHX0NPTlNUUlVDVE9SUz15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwogQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15Ci0KLSMKLSMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKLSMKLSMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX1NMVUJfREVCVUc9eQotQ09ORklHX0NPTVBBVF9CUks9eQotIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfU0xVQj15Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9PUFJPRklMRT15Ci0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKLUNPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15Ci1DT05GSUdfSEFWRV9LUFJPQkVTPXkKLUNPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQotQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKLUNPTkZJR19IQVZFX0NMSz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19TTEFCSU5GTz15Ci1DT05GSUdfQkFTRV9TTUFMTD0xCiBDT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9ERUFETElORT15Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLPXkKLSMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15Ci0jIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19CSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSz15Ci0jIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAotQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAotIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAotQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0s9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19CSCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlE9eQotIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUGxhdGZvcm0gc3VwcG9ydAotIwotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19DUE0xPXkKLSMgQ09ORklHX01QQzhYWEZBRFMgaXMgbm90IHNldAotIyBDT05GSUdfTVBDODZYQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzg4NUFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRVA4OFhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19BRERFUjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTUdTVVZEIGlzIG5vdCBzZXQKIENPTkZJR19UUU04WFg9eQotCi0jCi0jIE1QQzh4eCBDUE0gT3B0aW9ucwotIwotCi0jCi0jIEdlbmVyaWMgTVBDOHh4IE9wdGlvbnMKLSMKIENPTkZJR184eHhfQ09QWUJBQ0s9eQotIyBDT05GSUdfOHh4X0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfOHh4X0NQVTYgaXMgbm90IHNldAogIyBDT05GSUdfOHh4X0NQVTE1IGlzIG5vdCBzZXQKLUNPTkZJR19OT19VQ09ERV9QQVRDSD15Ci0jIENPTkZJR19VU0JfU09GX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TUElfVUNPREVfUEFUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NQSV9TTUMxX1VDT0RFX1BBVENIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVSUNDX0VOR0lORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BNPXkKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKIENPTkZJR19IWl8xMDA9eQotIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19TQ0hFRF9IUlRJQ0s9eQotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVRIX0VNVUxBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQotIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKLUNPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15Ci1DT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiBDT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCi1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci0jIENPTkZJR19LU00gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2Ci1DT05GSUdfUFBDXzRLX1BBR0VTPXkKLSMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAotQ09ORklHX0lTQV9ETUFfQVBJPXkKLQotIwotIyBCdXMgb3B0aW9ucwotIwotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQotQ09ORklHX0ZTTF9TT0M9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9ET01BSU5TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9RU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAotCi0jCi0jIEFkdmFuY2VkIHNldHVwCi0jCi0jIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKLQotIwotIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKLSMKLUNPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCi1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX1RBU0tfU0laRT0weDgwMDAwMDAwCi1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKIENPTkZJR19TWU5fQ09PS0lFUz15Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLSMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiBDT05GSUdfTVREX09GX1BBUlRTPXkKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCiBDT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKIENPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLQotIwotIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCi0jCi0jIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotIyBDT05GSUdfTVREX0NGSV9GTEFHQURNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLUNPTkZJR19PRl9GTEFUVFJFRT15Ci1DT05GSUdfT0ZfRFlOQU1JQz15Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9NRElPPXkKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9JREU9eQotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKIENPTkZJR19EQVZJQ09NX1BIWT15Ci0jIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfRklYRURfUEhZPXkKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAotIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQotQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15Ci1DT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKLUNPTkZJR19GU19FTkVUX01ESU9fRkVDPXkKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKLQotIwotIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwogIyBDT05GSUdfVlQgaXMgbm90IHNldAotQ09ORklHX0RFVktNRU09eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfVElNQkVSREFMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfR1JMSUJfR0FJU0xFUl9BUEJVQVJUIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLSMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQotIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIFRJIFZMWU5RCi0jCi0jIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENhY2hlcwotIwotIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci0jIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15Ci0jIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFMgaXMgbm90IHNldAotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15Ci1DT05GSUdfSEFWRV9MTUI9eQotQ09ORklHX05MQVRUUj15Ci1DT05GSUdfR0VORVJJQ19BVE9NSUM2ND15Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCi1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci1DT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci1DT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15Ci0jIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfV0VSUk9SPXkKLUNPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKLUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotQ09ORklHX1BQQ19DTE9DSz15Ci1DT05GSUdfUFBDX0xJQl9SSEVBUD15Ci0jIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy93aWlfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2lpX2RlZmNvbmZpZwppbmRleCBlZTA1NGY4Li5iYjhiYTc1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy93aWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3dpaV9kZWZjb25maWcKQEAgLTEsMTQwNSArMSwxNDIgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzgKLSMgU3VuIE5vdiAyMiAyMDozNzoyMSAyMDA5Ci0jCi0jIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIHN1cHBvcnQKLSMKLUNPTkZJR19QUENfQk9PSzNTXzMyPXkKLSMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAotIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQk9PSzNTPXkKLUNPTkZJR182eHg9eQotQ09ORklHX1BQQ19GUFU9eQotIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX1NURF9NTVU9eQotQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKLSMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAotQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKLUNPTkZJR19QUENfUEVSRl9DVFJTPXkKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0Ci1DT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKLUNPTkZJR19QUEMzMj15Ci1DT05GSUdfV09SRF9TSVpFPTMyCi0jIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAotIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JUlFfUEVSX0NQVT15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15Ci1DT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLSMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAotQ09ORklHX1BQQz15Ci1DT05GSUdfRUFSTFlfUFJJTlRLPXkKLUNPTkZJR19HRU5FUklDX05WUkFNPXkKLUNPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKLUNPTkZJR19QUENfT0Y9eQotQ09ORklHX09GPXkKLSMgQ09ORklHX1BQQ19VREJHXzE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19BVURJVF9BUkNIPXkKLUNPTkZJR19HRU5FUklDX0JVRz15Ci1DT05GSUdfRFRDPXkKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLUNPTkZJR19DT05TVFJVQ1RPUlM9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049Ii13aWkiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0Ci1DT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLQotIwotIyBSQ1UgU3Vic3lzdGVtCi0jCi1DT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1JDVV9GQU5PVVQ9MzIKLSMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0Ci1DT05GSUdfUkVMQVk9eQotIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19SRF9HWklQPXkKLSMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQotQ09ORklHX0tBTExTWU1TX0FMTD15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19USU1FUkZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKLQotIwotIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwotIwotQ09ORklHX1BFUkZfRVZFTlRTPXkKLUNPTkZJR19FVkVOVF9QUk9GSUxFPXkKIENPTkZJR19QRVJGX0NPVU5URVJTPXkKLSMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15Ci1DT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQotQ09ORklHX0hBVkVfS1BST0JFUz15Ci1DT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLUNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKLUNPTkZJR19IQVZFX0RNQV9BVFRSUz15Ci1DT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKLQotIwotIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKLSMKLSMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19TTE9XX1dPUks9eQotIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0Ci1DT05GSUdfU0xBQklORk89eQotQ09ORklHX1JUX01VVEVYRVM9eQotQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkRBRj15Ci1DT05GSUdfQkxLX0RFVl9CU0c9eQotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKLSMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAotCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQKLSMKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzUxMjFfR0VORVJJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTJ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAotIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRDZ4eD15Ci0jIENPTkZJR19MSU5LU1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVE9SQ0VOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01QQzc0NDhIUEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19IT0xMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUFJQTUMyODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19DMksgaXMgbm90IHNldAotQ09ORklHX0dBTUVDVUJFX0NPTU1PTj15Ci1DT05GSUdfVVNCR0VDS09fVURCRz15Ci1DT05GSUdfRkxJUFBFUl9QSUM9eQotIyBDT05GSUdfR0FNRUNVQkUgaXMgbm90IHNldAotQ09ORklHX0hMV0RfUElDPXkKLUNPTkZJR19TVEFSTEVUX01JTkk9eQogQ09ORklHX1dJST15Ci0jIENPTkZJR19BTUlHQU9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQSUMgaXMgbm90IHNldAotIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAotIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAotIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgb3B0aW9ucwotIwotIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLUNPTkZJR19IWl8yNTA9eQotIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAotQ09ORklHX0haPTI1MAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9NSVNDPW0KLSMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15Ci1DT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQotQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogQ09ORklHX0tFWEVDPXkKLSMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAotQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgotQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQotQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKLSMgQ09ORklHX0tTTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKLUNPTkZJR19QUENfNEtfUEFHRVM9eQotIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKLUNPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfVEFSR0VUUz0iIgotIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVNBX0RNQV9BUEk9eQotCi0jCi0jIEJ1cyBvcHRpb25zCi0jCi1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15Ci0jIENPTkZJR19QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUENJX0RPTUFJTlMgaXMgbm90IHNldAotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKLQotIwotIyBBZHZhbmNlZCBzZXR1cAotIwogQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQotIyBDT05GSUdfTE9XTUVNX1NJWkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAotIyBDT05GSUdfUEFHRV9PRkZTRVRfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAotIyBDT05GSUdfS0VSTkVMX1NUQVJUX0JPT0wgaXMgbm90IHNldAotQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAotIyBDT05GSUdfVEFTS19TSVpFX0JPT0wgaXMgbm90IHNldAotQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCi0jIENPTkZJR19DT05TSVNURU5UX1NJWkVfQk9PTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKIENPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwogQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKLSMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0NVQklDPXkKLUNPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLSMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRFMgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RDQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAogQ09ORklHX0JUPXkKIENPTkZJR19CVF9MMkNBUD15Ci0jIENPTkZJR19CVF9TQ08gaXMgbm90IHNldAogQ09ORklHX0JUX1JGQ09NTT15Ci0jIENPTkZJR19CVF9SRkNPTU1fVFRZIGlzIG5vdCBzZXQKIENPTkZJR19CVF9CTkVQPXkKIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15Ci0jIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSElEUD15Ci0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15Ci0jIENPTkZJR19OTDgwMjExX1RFU1RNT0RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9XQVJOSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFM9eQotQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MQotIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci1DT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKLSMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci0jIENPTkZJR19NQUM4MDIxMV9SQ19QSUQgaXMgbm90IHNldAotQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKLSMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKLSMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAotIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci1DT05GSUdfT0ZfREVWSUNFPXkKLUNPTkZJR19PRl9HUElPPXkKLUNPTkZJR19PRl9JMkM9eQotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVj15Ci0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgotIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAotIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRUVQUk9NIHN1cHBvcnQKLSMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0lERT15Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfRE1BPXkKLSMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwogQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX01VTFRJX0xVTj15Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCi0KLSMKLSMgU0NTSSBUcmFuc3BvcnRzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZFVEggaXMgbm90IHNldAotIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01JST15Ci0jIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci0jIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIENPTkZJR19CNDM9eQogQ09ORklHX0I0M19TRElPPXkKLUNPTkZJR19CNDNfUElPPXkKICMgQ09ORklHX0I0M19QSFlfTFAgaXMgbm90IHNldAogQ09ORklHX0I0M19ERUJVRz15Ci0jIENPTkZJR19CNDNfRk9SQ0VfUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAotIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKIENPTkZJR19JTlBVVF9KT1lERVY9eQogQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLSMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0pPWVNUSUNLPXkKLSMgQ09ORklHX0pPWVNUSUNLX0FOQUxPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19BM0QgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfQURJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0NPQlJBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dGMksgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfR1JJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19HUklQX01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0dVSUxMRU1PVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19JTlRFUkFDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19TSURFV0lOREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1RNREMgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1dBUlJJT1IgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU4gaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkIgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX1NUSU5HRVIgaXMgbm90IHNldAotIyBDT05GSUdfSk9ZU1RJQ0tfVFdJREpPWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19KT1lTVElDS19aSEVOSFVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pPWVNUSUNLX0pPWURVTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi1DT05GSUdfU0VSSU89eQogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAotIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQotQ09ORklHX0kyQ19CT0FSRElORk89eQotQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKLUNPTkZJR19JMkNfSEVMUEVSX0FVVE89eQotQ09ORklHX0kyQ19BTEdPQklUPXkKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLQotIwotIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKLSMKIENPTkZJR19JMkNfR1BJTz15Ci0jIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycwotIwotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0KLSMKLSMgUFBTIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQotIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19TWVNGUz15Ci0KLSMKLSMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fWElMSU5YIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEdQSU8gZXhwYW5kZXJzOgotIwotCi0jCi0jIFNQSSBHUElPIGV4cGFuZGVyczoKLSMKLQotIwotIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgotIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCPXkKLUNPTkZJR19TU0JfQkxPQ0tJTz15Ci1DT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxFPXkKLUNPTkZJR19TU0JfU0RJT0hPU1Q9eQotIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX0RFQlVHPXkKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAotIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKLSMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UUyBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15Ci1DT05GSUdfU09VTkRfT1NTX0NPUkU9eQotQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQotQ09ORklHX1NORF9USU1FUj15Ci1DT05GSUdfU05EX1BDTT15CiBDT05GSUdfU05EX1NFUVVFTkNFUj15Ci0jIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQotQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQogQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKLSMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0Ci1DT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfRFJJVkVSUz15Ci0jIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZJUk1JREkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAotQ09ORklHX1NORF9QUEM9eQotIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1NVUFBPUlQ9eQotQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURSQVcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU3BlY2lhbCBISUQgZHJpdmVycwotIwogQ09ORklHX0hJRF9BUFBMRT1tCiBDT05GSUdfSElEX1dBQ09NPW0KLUNPTkZJR19VU0JfU1VQUE9SVD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKLSMKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKLSMKIENPTkZJR19NTUM9eQotIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKLSMKLUNPTkZJR19NTUNfQkxPQ0s9eQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQotIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwogQ09ORklHX01NQ19TREhDST15Ci0jIENPTkZJR19NTUNfU0RIQ0lfT0YgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1NESENJX1BMVEZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19XQlNEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VEQUMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAotCi0jCi0jIG9uLUNQVSBSVEMgZHJpdmVycwotIwogQ09ORklHX1JUQ19EUlZfR0VORVJJQz15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKLQotIwotIyBUSSBWTFlOUQotIwotIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCiBDT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15Ci1DT05GSUdfRlNOT1RJRlk9eQotQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0lOT1RJRllfVVNFUj15Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCi0jIENPTkZJR19DVVNFIGlzIG5vdCBzZXQKLQotIwotIyBDYWNoZXMKLSMKLSMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQotIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15Ci1DT05GSUdfUFJPQ19TWVNDVEw9eQogIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci1DT05GSUdfQklOQVJZX1BSSU5URj15Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMxNj15Ci0jIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfREVDT01QUkVTU19HWklQPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQotQ09ORklHX0hBVkVfTE1CPXkKLUNPTkZJR19OTEFUVFI9eQotQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCiBDT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci0jIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0Ci1DT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAotIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NIRURfREVCVUc9eQotQ09ORklHX1NDSEVEU1RBVFM9eQotIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotQ09ORklHX1NUQUNLVFJBQ0U9eQotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci0jIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19OT1BfVFJBQ0VSPXkKLUNPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci1DT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQotQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQotQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQotQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQotQ09ORklHX1JJTkdfQlVGRkVSPXkKLUNPTkZJR19FVkVOVF9UUkFDSU5HPXkKLUNPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQotQ09ORklHX1RSQUNJTkc9eQotQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKLUNPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotQ09ORklHX0ZUUkFDRT15Ci0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX1NDSEVEX1RSQUNFUj15Ci1DT05GSUdfQk9PVF9UUkFDRVI9eQotQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQotIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RNQV9BUElfREVCVUc9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9BUkNIX0tHREI9eQotIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAotQ09ORklHX1BQQ19XRVJST1I9eQotQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FTVVMQVRFRF9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RFX1BBVENISU5HX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hNT04gaXMgbm90IHNldAotIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJUlFfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKIENPTkZJR19QUENfRUFSTFlfREVCVUc9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX1BBTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19QQVNfUkVBTE1PREUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JFQVQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDB4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19DUE0gaXMgbm90IHNldAotQ09ORklHX1BQQ19FQVJMWV9ERUJVR19VU0JHRUNLTz15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKLUNPTkZJR19DUllQVE9fQUVBRDI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKLUNPTkZJR19DUllQVE9fSEFTSDI9eQotQ09ORklHX0NSWVBUT19STkcyPXkKLUNPTkZJR19DUllQVE9fUENPTVA9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUjI9eQotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPXkKLSMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFzaCBtb2RlcwotIwotIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAotCi0jCi0jIERpZ2VzdAotIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2lwaGVycwotIwotQ09ORklHX0NSWVBUT19BRVM9eQotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FSQzQ9eQotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotCi0jCi0jIENvbXByZXNzaW9uCi0jCi0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKLQotIwotIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KLSMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCA1ZTJlMmNmLi4zYTQwYTk5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMTk3LDYgKzE5Nyw3IEBACiAjZGVmaW5lIENQVV9GVFJfU0FPCQkJTE9OR19BU01fQ09OU1QoMHgwMDIwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NQX1VTRV9EQ0JUWgkJTE9OR19BU01fQ09OU1QoMHgwMDQwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX1VOQUxJR05FRF9MRF9TVEQJTE9OR19BU01fQ09OU1QoMHgwMDgwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBDUFVfRlRSX0FTWU1fU01UCQlMT05HX0FTTV9DT05TVCgweDAxMDAwMDAwMDAwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTQxMiw3ICs0MTMsNyBAQAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9TUFVSUiB8IENQVV9GVFJfUkVBTF9MRSB8IFwKLQkgICAgQ1BVX0ZUUl9EU0NSIHwgQ1BVX0ZUUl9TQU8pCisJICAgIENQVV9GVFJfRFNDUiB8IENQVV9GVFJfU0FPICB8IENQVV9GVFJfQVNZTV9TTVQpCiAjZGVmaW5lIENQVV9GVFJTX0NFTEwJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9MV1NZTkMgfCBcCiAJICAgIENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9BTFRJVkVDX0NPTVAgfCBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGM4NWVmMjMuLjhjOWM2YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0yMDksMjYgKzIwOSw2IEBACiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQotI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJKDApCi0jZWxzZQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QUEM2NAotCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCBwcm9jZXNzb3JzLCBzbyByZXR1cm4KLQkgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZSAqLwotCXJldHVybiAoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpOwotI2Vsc2UKLQkvKgotCSAqIEVhY2ggcHJvY2Vzc29yIGZhbWlseSB3aWxsIGRlZmluZSBpdHMgb3duIEwxX0NBQ0hFX1NISUZULAotCSAqIEwxX0NBQ0hFX0JZVEVTIHdyYXBzIHRvIHRoaXMsIHNvIHRoaXMgaXMgYWx3YXlzIHNhZmUuCi0JICovCi0JcmV0dXJuIEwxX0NBQ0hFX0JZVEVTOwotI2VuZGlmCi19CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggYTc0YzRlZS4uZDEwZDY0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC02Miw3ICs2Miw3IEBACiBleHRlcm4gdm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBleHRlcm4gdm9pZCAqa21hcF9hdG9taWNfcHJvdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsCiAJCQkgICAgICBwZ3Byb3RfdCBwcm90KTsKLWV4dGVybiB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmttYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggMTg0MjE4Ni4uODUxOTIwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtODAsNiArODAsNyBAQAogIyBkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKICMgZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogIyBkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjIGRlZmluZSBUSU9DUEtUX0lPQ1RMCQk2NAogCiAKICNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgpAQCAtOTMsNiArOTQsNyBAQAogI2RlZmluZSBUSU9DU1JTNDg1CTB4NTQyZgogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCiAjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9sb2NhbDY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaAppbmRleCBiNjY0Y2U3Li4xZjQxMzgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKQEAgLTI3MSw2ICsyNzEsNyBAQAogLyogbXBjNTJ4eF9jb21tb24uYyAqLwogZXh0ZXJuIHZvaWQgbXBjNTIwMF9zZXR1cF94bGJfYXJiaXRlcih2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIGludCBtcGM1MjAwX3BzY19hYzk3X2dwaW9fcmVzZXQoaW50IHBzY19udW1iZXIpOwogZXh0ZXJuIHZvaWQgbXBjNTJ4eF9tYXBfY29tbW9uX2RldmljZXModm9pZCk7CiBleHRlcm4gaW50IG1wYzUyeHhfc2V0X3BzY19jbGtkaXYoaW50IHBzY19pZCwgaW50IGNsa2Rpdik7CiBleHRlcm4gdW5zaWduZWQgaW50IG1wYzUyeHhfZ2V0X3h0YWxfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHhfcHNjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAppbmRleCBlY2M0ZmM2Li4yOTY2ZGY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eF9wc2MuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAjZGVmaW5lIE1QQzUyeHhfUFNDX1NJQ1JfU0lNX0ZJUgkJKDB4NiA8PCAyNCkKICNkZWZpbmUgTVBDNTJ4eF9QU0NfU0lDUl9TSU1fQ09ERUNfMjQJCSgweDcgPDwgMjQpCiAjZGVmaW5lIE1QQzUyeHhfUFNDX1NJQ1JfU0lNX0NPREVDXzMyCQkoMHhmIDw8IDI0KQorI2RlZmluZSBNUEM1Mnh4X1BTQ19TSUNSX0FDUkIJCQkoMHg4IDw8IDI0KQogI2RlZmluZSBNUEM1Mnh4X1BTQ19TSUNSX0FXUgkJCSgxIDw8IDMwKQogI2RlZmluZSBNUEM1Mnh4X1BTQ19TSUNSX0dFTkNMSwkJCSgxIDw8IDIzKQogI2RlZmluZSBNUEM1Mnh4X1BTQ19TSUNSX0kyUwkJCSgxIDw8IDIyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKaW5kZXggYmQwODQ5ZC4uNjhkNzNiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCkBAIC0xMCw3ICsxMCw3IEBACiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwlWTV9EQVRBX0RFRkFVTFRfRkxBR1MzMgogCiAjaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BURV82NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggZTZkNGNlNi4uNWMxNmI4OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCkBAIC0yMSwzICsyMSwxNSBAQAogI2lmZGVmIENPTkZJR19GU0xfRU1CX1BFUkZfRVZFTlQKICNpbmNsdWRlIDxhc20vcGVyZl9ldmVudF9mc2xfZW1iLmg+CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisKKyNkZWZpbmUgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHJlZ3MsIF9faXApCQkJXAorCWRvIHsJCQkJCQkJXAorCQkocmVncyktPm5pcCA9IF9faXA7CQkJCVwKKwkJKHJlZ3MpLT5ncHJbMV0gPSAqKHVuc2lnbmVkIGxvbmcgKilfX2dldF9TUCgpOwlcCisJCWFzbSB2b2xhdGlsZSgibWZtc3IgJTAiIDogIj1yIiAoKHJlZ3MpLT5tc3IpKTsJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggMzRjYzc4Zi4uZGUxZjYyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEyLDkgKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCi0jZW5kaWYKICNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IDY2OTgxODguLjU0OWQ3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0xODksNiArMTg5LDcgQEAKICNkZWZpbmUgRkxVU0hPCTB4MDA4MDAwMDAKICNkZWZpbmUgUEVORElOCTB4MjAwMDAwMDAKICNkZWZpbmUgSUVYVEVOCTB4MDAwMDA0MDAKKyNkZWZpbmUgRVhUUFJPQwkweDEwMDAwMDAwCiAKIC8qIFZhbHVlcyBmb3IgdGhlIEFDVElPTiBhcmd1bWVudCB0byBgdGNmbG93Jy4gICovCiAjZGVmaW5lCVRDT09GRgkJMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwppbmRleCAyMmU1MDdjLi4yZDI5NzUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwpAQCAtMTI3LDI5ICsxMjcsMyBAQAogX0dMT0JBTChfX3Jlc3RvcmVfY3B1X3Bvd2VyNykKIAkvKiBwbGFjZSBob2xkZXIgKi8KIAlibHIKLQotLyoKLSAqIEdldCBhIG1pbmltYWwgc2V0IG9mIHJlZ2lzdGVycyBmb3Igb3VyIGNhbGxlcidzIG50aCBjYWxsZXIuCi0gKiByMyA9IHJlZ3MgcG9pbnRlciwgcjUgPSBuLgotICoKLSAqIFdlIG9ubHkgZ2V0IFIxIChzdGFjayBwb2ludGVyKSwgTklQIChuZXh0IGluc3RydWN0aW9uIHBvaW50ZXIpCi0gKiBhbmQgTFIgKGxpbmsgcmVnaXN0ZXIpLiAgVGhlc2UgYXJlIGFsbCB3ZSBjYW4gZ2V0IGluIHRoZQotICogZ2VuZXJhbCBjYXNlIHdpdGhvdXQgZG9pbmcgY29tcGxpY2F0ZWQgc3RhY2sgdW53aW5kaW5nLCBidXQKLSAqIGZvcnR1bmF0ZWx5IHRoZXkgYXJlIGVub3VnaCB0byBkbyBhIHN0YWNrIGJhY2t0cmFjZSwgd2hpY2gKLSAqIGlzIGFsbCB3ZSBuZWVkIHRoZW0gZm9yLgotICovCi1fR0xPQkFMKHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncykKLQltcglyNixyMQotCWNtcHdpCXI1LDAKLQltZmxyCXI0Ci0JYmxlCTJmCi0JbXRjdHIJcjUKLTE6CVBQQ19MTAlyNiwwKHI2KQotCWJkbnoJMWIKLQlQUENfTEwJcjQsUFBDX0xSX1NUS09GRihyNikKLTI6CVBQQ19MTAlyNywwKHI2KQotCVBQQ19MTAlyNyxQUENfTFJfU1RLT0ZGKHI3KQotCVBQQ19TVEwJcjYsR1BSMS1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKLQlQUENfU1RMCXI0LF9OSVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCi0JUFBDX1NUTAlyNyxfTElOSy1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKLQlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggNWMxNGZmZS4uZDMwMWEzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTQxMCwxNSArNDEwLDE1IEBACiAJICogVGhlcmVmb3JlIHdlIHRyZWF0IHRoZW0gbGlrZSBOTUlzLgogCSAqLwogCWRvIHsKLQkJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCQliYXJyaWVyKCk7CiAJCXZhbCA9IHJlYWRfcG1jKGV2ZW50LT5ody5pZHgpOwotCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOworCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7CiAKIAkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCiAJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlsb2NhbDY0X3N1YihkZWx0YSwgJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CiB9CiAKIC8qCkBAIC00NDQsMTAgKzQ0NCwxMCBAQAogCQlpZiAoIWV2ZW50LT5ody5pZHgpCiAJCQljb250aW51ZTsKIAkJdmFsID0gKGV2ZW50LT5ody5pZHggPT0gNSkgPyBwbWM1IDogcG1jNjsKLQkJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCQlldmVudC0+aHcuaWR4ID0gMDsKIAkJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAl9CiB9CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCQlldmVudCA9IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV07CiAJCWV2ZW50LT5ody5pZHggPSBjcHVody0+bGltaXRlZF9od2lkeFtpXTsKIAkJdmFsID0gKGV2ZW50LT5ody5pZHggPT0gNSkgPyBwbWM1IDogcG1jNjsKLQkJYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKKwkJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwogCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAJfQogfQpAQCAtNjY2LDExICs2NjYsMTEgQEAKIAkJfQogCQl2YWwgPSAwOwogCQlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpIHsKLQkJCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCQkJbGVmdCA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIAkJCWlmIChsZWZ0IDwgMHg4MDAwMDAwMEwpCiAJCQkJdmFsID0gMHg4MDAwMDAwMEwgLSBsZWZ0OwogCQl9Ci0JCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKIAkJZXZlbnQtPmh3LmlkeCA9IGlkeDsKIAkJd3JpdGVfcG1jKGlkeCwgdmFsKTsKIAkJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwpAQCAtNzU0LDcgKzc1NCw3IEBACiAJICogc2tpcCB0aGUgc2NoZWR1bGFiaWxpdHkgdGVzdCBoZXJlLCBpdCB3aWxsIGJlIHBlZm9ybWVkCiAJICogYXQgY29tbWl0IHRpbWUoLT5jb21taXRfdHhuKSBhcyBhIHdob2xlCiAJICovCi0JaWYgKGNwdWh3LT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE5fU1RBUlRFRCkKKwlpZiAoY3B1aHctPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKIAkJZ290byBub2NoZWNrOwogCiAJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWh3LT5ldmVudCwgY3B1aHctPmZsYWdzLCBuMCwgMSkpCkBAIC04NDUsOCArODQ1LDggQEAKIAlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQogCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CiAJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlwZXJmX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTg2MSw3ICs4NjEsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyB8PSBQRVJGX0VWRU5UX1RYTjsKIAljcHVody0+bl90eG5fc3RhcnQgPSBjcHVody0+bl9ldmVudHM7CiB9CiAKQEAgLTg3NCw3ICs4NzQsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOX1NUQVJURUQ7CisJY3B1aHctPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOOwogfQogCiAvKgpAQCAtOTAwLDYgKzkwMCw3IEBACiAJZm9yIChpID0gY3B1aHctPm5fdHhuX3N0YXJ0OyBpIDwgbjsgKytpKQogCQljcHVody0+ZXZlbnRbaV0tPmh3LmNvbmZpZyA9IGNwdWh3LT5ldmVudHNbaV07CiAKKwljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMTEsNyArMTExMiw3IEBACiAJZXZlbnQtPmh3LmNvbmZpZyA9IGV2ZW50c1tuXTsKIAlldmVudC0+aHcuZXZlbnRfYmFzZSA9IGNmbGFnc1tuXTsKIAlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgZXZlbnQtPmh3Lmxhc3RfcGVyaW9kKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBldmVudC0+aHcubGFzdF9wZXJpb2QpOwogCiAJLyoKIAkgKiBTZWUgaWYgd2UgbmVlZCB0byByZXNlcnZlIHRoZSBQTVUuCkBAIC0xMTQ5LDE2ICsxMTUwLDE2IEBACiAJaW50IHJlY29yZCA9IDA7CiAKIAkvKiB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGludGVycnVwdHMgaGVyZSAqLwotCXByZXYgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOwotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIHRvdGFsIHBlcmlvZCBmb3IgdGhpcyBldmVudCBoYXMgZXhwaXJlZCwKIAkgKiBhbmQgdXBkYXRlIGZvciB0aGUgbmV4dCBwZXJpb2QuCiAJICovCiAJdmFsID0gMDsKLQlsZWZ0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOworCWxlZnQgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCkgLSBkZWx0YTsKIAlpZiAocGVyaW9kKSB7CiAJCWlmIChsZWZ0IDw9IDApIHsKIAkJCWxlZnQgKz0gcGVyaW9kOwpAQCAtMTE5Niw4ICsxMTk3LDggQEAKIAl9CiAKIAl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYwppbmRleCBiYWJjY2VlLi4xYmE0NTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKQEAgLTE2MiwxNSArMTYyLDE1IEBACiAJICogVGhlcmVmb3JlIHdlIHRyZWF0IHRoZW0gbGlrZSBOTUlzLgogCSAqLwogCWRvIHsKLQkJcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwogCQliYXJyaWVyKCk7CiAJCXZhbCA9IHJlYWRfcG1jKGV2ZW50LT5ody5pZHgpOwotCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOworCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7CiAKIAkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCiAJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlsb2NhbDY0X3N1YihkZWx0YSwgJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CiB9CiAKIC8qCkBAIC0yOTYsMTEgKzI5NiwxMSBAQAogCiAJdmFsID0gMDsKIAlpZiAoZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpIHsKLQkJczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpOworCQlzNjQgbGVmdCA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIAkJaWYgKGxlZnQgPCAweDgwMDAwMDAwTCkKIAkJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKIAl9Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CiAJd3JpdGVfcG1jKGksIHZhbCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogCkBAIC0zNzEsOCArMzcxLDggQEAKIAlpZiAobGVmdCA8IDB4ODAwMDAwMDBMKQogCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CiAJd3JpdGVfcG1jKGV2ZW50LT5ody5pZHgsIHZhbCk7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWxvY2FsNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOwogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlwZXJmX2VuYWJsZSgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PVFNVUFApOwogCiAJZXZlbnQtPmh3Lmxhc3RfcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7Ci0JYXRvbWljNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGV2ZW50LT5ody5sYXN0X3BlcmlvZCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgZXZlbnQtPmh3Lmxhc3RfcGVyaW9kKTsKIAogCS8qCiAJICogU2VlIGlmIHdlIG5lZWQgdG8gcmVzZXJ2ZSB0aGUgUE1VLgpAQCAtNTQxLDE2ICs1NDEsMTYgQEAKIAlpbnQgcmVjb3JkID0gMDsKIAogCS8qIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaW50ZXJydXB0cyBoZXJlICovCi0JcHJldiA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7Ci0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CiAKIAkvKgogCSAqIFNlZSBpZiB0aGUgdG90YWwgcGVyaW9kIGZvciB0aGlzIGV2ZW50IGhhcyBleHBpcmVkLAogCSAqIGFuZCB1cGRhdGUgZm9yIHRoZSBuZXh0IHBlcmlvZC4KIAkgKi8KIAl2YWwgPSAwOwotCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpIC0gZGVsdGE7CisJbGVmdCA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KSAtIGRlbHRhOwogCWlmIChwZXJpb2QpIHsKIAkJaWYgKGxlZnQgPD0gMCkgewogCQkJbGVmdCArPSBwZXJpb2Q7CkBAIC01NjksNiArNTY5LDcgQEAKIAkJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKIAogCQlwZXJmX3NhbXBsZV9kYXRhX2luaXQoJmRhdGEsIDApOworCQlkYXRhLnBlcmlvZCA9IGV2ZW50LT5ody5sYXN0X3BlcmlvZDsKIAogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCAmZGF0YSwgcmVncykpIHsKIAkJCS8qCkBAIC01ODQsOCArNTg1LDggQEAKIAl9CiAKIAl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKLQlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDU1MWY2NzEuLmU3OGE1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMjk5LDMgKzEyOTksMTQgQEAKIAogCXJldHVybiByZXQ7CiB9CisKKyNpZmRlZiBDT05GSUdfU01QCitpbnQgYXJjaF9zZF9zaWJsaW5nX2FzeW1fcGFja2luZyh2b2lkKQoreworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BU1lNX1NNVCkpIHsKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJFbmFibGluZyBBc3ltbWV0cmljIFNNVCBzY2hlZHVsaW5nXG4iKTsKKwkJcmV0dXJuIFNEX0FTWU1fUEFDS0lORzsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDE1YWRlMGQuLjlkNDg4MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtOTYsNyArOTYsOSBAQAogCiAvKiBWYXJpYWJsZXMgcmVxdWlyZWQgdG8gc3RvcmUgbGVnYWN5IElPIGlycSByb3V0aW5nICovCiBpbnQgb2ZfaTgwNDJfa2JkX2lycTsKK0VYUE9SVF9TWU1CT0xfR1BMKG9mX2k4MDQyX2tiZF9pcnEpOwogaW50IG9mX2k4MDQyX2F1eF9pcnE7CitFWFBPUlRfU1lNQk9MX0dQTChvZl9pODA0Ml9hdXhfaXJxKTsKIAogI2lmZGVmIF9fRE9fSVJRX0NBTk9OCiAvKiBYWFggc2hvdWxkIGdvIGVsc2V3aGVyZSBldmVudHVhbGx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IGNjYjg3NTkuLmNlNTNkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC03OTYsMzYgKzc5NiwxMCBAQAogCXJldHVybiAoY3ljbGVfdClnZXRfdGIoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9ndG9kKHU2NCBuZXdfdGJfc3RhbXAsIHU2NCBuZXdfc3RhbXBfeHNlYywKLQkJCSAgICAgICB1NjQgbmV3X3RiX3RvX3hzLCBzdHJ1Y3QgdGltZXNwZWMgKm5vdywKLQkJCSAgICAgICB1MzIgZnJhY19zZWMpCit2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IHRpbWVzcGVjICp3dG0sCisJCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNsb2NrLCB1MzIgbXVsdCkKIHsKLQkvKgotCSAqIHRiX3VwZGF0ZV9jb3VudCBpcyB1c2VkIHRvIGFsbG93IHRoZSB1c2Vyc3BhY2UgZ2V0dGltZW9mZGF5IGNvZGUKLQkgKiB0byBhc3N1cmUgaXRzZWxmIHRoYXQgaXQgc2VlcyBhIGNvbnNpc3RlbnQgdmlldyBvZiB0aGUgdGJfdG9feHMgYW5kCi0JICogc3RhbXBfeHNlYyB2YXJpYWJsZXMuICBJdCByZWFkcyB0aGUgdGJfdXBkYXRlX2NvdW50LCB0aGVuIHJlYWRzCi0JICogdGJfdG9feHMgYW5kIHN0YW1wX3hzZWMgYW5kIHRoZW4gcmVhZHMgdGJfdXBkYXRlX2NvdW50IGFnYWluLiAgSWYKLQkgKiB0aGUgdHdvIHZhbHVlcyBvZiB0Yl91cGRhdGVfY291bnQgbWF0Y2ggYW5kIGFyZSBldmVuIHRoZW4gdGhlCi0JICogdGJfdG9feHMgYW5kIHN0YW1wX3hzZWMgdmFsdWVzIGFyZSBjb25zaXN0ZW50LiAgSWYgbm90LCB0aGVuIGl0Ci0JICogbG9vcHMgYmFjayBhbmQgcmVhZHMgdGhlbSBhZ2FpbiB1bnRpbCB0aGlzIGNyaXRlcmlhIGlzIG1ldC4KLQkgKiBXZSBleHBlY3QgdGhlIGNhbGxlciB0byBoYXZlIGRvbmUgdGhlIGZpcnN0IGluY3JlbWVudCBvZgotCSAqIHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50IGFscmVhZHkuCi0JICovCi0JdmRzb19kYXRhLT50Yl9vcmlnX3N0YW1wID0gbmV3X3RiX3N0YW1wOwotCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOwotCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7Ci0JdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYzsKLQl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWM7Ci0JdmRzb19kYXRhLT5zdGFtcF94dGltZSA9ICpub3c7Ci0JdmRzb19kYXRhLT5zdGFtcF9zZWNfZnJhY3Rpb24gPSBmcmFjX3NlYzsKLQlzbXBfd21iKCk7Ci0JKysodmRzb19kYXRhLT50Yl91cGRhdGVfY291bnQpOwotfQotCi12b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaywKLQkJICAgICB1MzIgbXVsdCkKLXsKLQl1NjQgdDJ4LCBzdGFtcF94c2VjOworCXU2NCBuZXdfdGJfdG9feHMsIG5ld19zdGFtcF94c2VjOwogCXUzMiBmcmFjX3NlYzsKIAogCWlmIChjbG9jayAhPSAmY2xvY2tzb3VyY2VfdGltZWJhc2UpCkBAIC04MzcsMTUgKzgxMSwzNSBAQAogCiAJLyogWFhYIHRoaXMgYXNzdW1lcyBjbG9jay0+c2hpZnQgPT0gMjIgKi8KIAkvKiA0NjExNjg2MDE4IH49IDJeKDIwKzY0LTIyKSAvIDFlOSAqLwotCXQyeCA9ICh1NjQpIG11bHQgKiA0NjExNjg2MDE4VUxMOwotCXN0YW1wX3hzZWMgPSAodTY0KSB3YWxsX3RpbWUtPnR2X25zZWMgKiBYU0VDX1BFUl9TRUM7Ci0JZG9fZGl2KHN0YW1wX3hzZWMsIDEwMDAwMDAwMDApOwotCXN0YW1wX3hzZWMgKz0gKHU2NCkgd2FsbF90aW1lLT50dl9zZWMgKiBYU0VDX1BFUl9TRUM7CisJbmV3X3RiX3RvX3hzID0gKHU2NCkgbXVsdCAqIDQ2MTE2ODYwMThVTEw7CisJbmV3X3N0YW1wX3hzZWMgPSAodTY0KSB3YWxsX3RpbWUtPnR2X25zZWMgKiBYU0VDX1BFUl9TRUM7CisJZG9fZGl2KG5ld19zdGFtcF94c2VjLCAxMDAwMDAwMDAwKTsKKwluZXdfc3RhbXBfeHNlYyArPSAodTY0KSB3YWxsX3RpbWUtPnR2X3NlYyAqIFhTRUNfUEVSX1NFQzsKIAogCUJVR19PTih3YWxsX3RpbWUtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKTsKIAkvKiB0aGlzIGlzIHR2X25zZWMgLyAxZTkgYXMgYSAwLjMyIGZyYWN0aW9uICovCiAJZnJhY19zZWMgPSAoKHU2NCkgd2FsbF90aW1lLT50dl9uc2VjICogMTg0NDY3NDQwNzNVTEwpID4+IDMyOwotCXVwZGF0ZV9ndG9kKGNsb2NrLT5jeWNsZV9sYXN0LCBzdGFtcF94c2VjLCB0MngsIHdhbGxfdGltZSwgZnJhY19zZWMpOworCisJLyoKKwkgKiB0Yl91cGRhdGVfY291bnQgaXMgdXNlZCB0byBhbGxvdyB0aGUgdXNlcnNwYWNlIGdldHRpbWVvZmRheSBjb2RlCisJICogdG8gYXNzdXJlIGl0c2VsZiB0aGF0IGl0IHNlZXMgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHRiX3RvX3hzIGFuZAorCSAqIHN0YW1wX3hzZWMgdmFyaWFibGVzLiAgSXQgcmVhZHMgdGhlIHRiX3VwZGF0ZV9jb3VudCwgdGhlbiByZWFkcworCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIGFuZCB0aGVuIHJlYWRzIHRiX3VwZGF0ZV9jb3VudCBhZ2Fpbi4gIElmCisJICogdGhlIHR3byB2YWx1ZXMgb2YgdGJfdXBkYXRlX2NvdW50IG1hdGNoIGFuZCBhcmUgZXZlbiB0aGVuIHRoZQorCSAqIHRiX3RvX3hzIGFuZCBzdGFtcF94c2VjIHZhbHVlcyBhcmUgY29uc2lzdGVudC4gIElmIG5vdCwgdGhlbiBpdAorCSAqIGxvb3BzIGJhY2sgYW5kIHJlYWRzIHRoZW0gYWdhaW4gdW50aWwgdGhpcyBjcml0ZXJpYSBpcyBtZXQuCisJICogV2UgZXhwZWN0IHRoZSBjYWxsZXIgdG8gaGF2ZSBkb25lIHRoZSBmaXJzdCBpbmNyZW1lbnQgb2YKKwkgKiB2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCBhbHJlYWR5LgorCSAqLworCXZkc29fZGF0YS0+dGJfb3JpZ19zdGFtcCA9IGNsb2NrLT5jeWNsZV9sYXN0OworCXZkc29fZGF0YS0+c3RhbXBfeHNlYyA9IG5ld19zdGFtcF94c2VjOworCXZkc29fZGF0YS0+dGJfdG9feHMgPSBuZXdfdGJfdG9feHM7CisJdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHd0bS0+dHZfc2VjOworCXZkc29fZGF0YS0+d3RvbV9jbG9ja19uc2VjID0gd3RtLT50dl9uc2VjOworCXZkc29fZGF0YS0+c3RhbXBfeHRpbWUgPSAqd2FsbF90aW1lOworCXZkc29fZGF0YS0+c3RhbXBfc2VjX2ZyYWN0aW9uID0gZnJhY19zZWM7CisJc21wX3dtYigpOworCSsrKHZkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50KTsKIH0KIAogdm9pZCB1cGRhdGVfdnN5c2NhbGxfdHoodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oaWdobWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vaGlnaG1lbS5jCmluZGV4IGMyMTg2YzcuLjg1N2Q0MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hpZ2htZW0uYwpAQCAtNTIsNyArNTIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pY19wcm90KTsKIAotdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCit2b2lkIGt1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sodm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOwpAQCAtNzQsNCArNzQsNCBAQAogI2VuZGlmCiAJcGFnZWZhdWx0X2VuYWJsZSgpOwogfQotRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKK0VYUE9SVF9TWU1CT0woa3VubWFwX2F0b21pY19ub3R5cGVjaGVjayk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCmluZGV4IGE0NmJhZDAuLjZlOTA1MzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2NvbW1vbi5jCkBAIC0xMiw5ICsxMiwxMSBAQAogCiAjdW5kZWYgREVCVUcKIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KQEAgLTgyLDYgKzg0LDE0IEBACiAJaW91bm1hcCh4bGIpOwogfQogCisvKgorICogVGhpcyB2YXJpYWJsZSBpcyBtYXBwZWQgaW4gbXBjNTJ4eF9tYXBfY29tbW9uX2RldmljZXMgYW5kCisgKiB1c2VkIGluIG1wYzUyMDBfcHNjX2FjOTdfZ3Bpb19yZXNldCgpLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitzdHJ1Y3QgbXBjNTJ4eF9ncGlvIF9faW9tZW0gKnNpbXBsZV9ncGlvOworc3RydWN0IG1wYzUyeHhfZ3Bpb193a3VwIF9faW9tZW0gKndrdXBfZ3BpbzsKKwogLyoqCiAgKiBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlczogcmVnaXN0ZXIgaW50ZXJuYWwgZGV2aWNlcyBhbmQgY2hpbGRyZW4KICAqCQkJCQlvZiB0aGUgbG9jYWxwbHVzIGJ1cyB0byB0aGUgb2ZfcGxhdGZvcm0KQEAgLTEwOSw2ICsxMTksMTUgQEAKIAl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtY2RtIiwgfSwgLyogb2xkICovCiAJe30KIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X2dwaW9fc2ltcGxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIiwgfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfZ3Bpb193a3VwW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiLCB9LAorCXt9Cit9OworCiAKIC8qKgogICogbXBjNTJ4eF9tYXBfY29tbW9uX2RldmljZXM6IGlvbWFwIGRldmljZXMgcmVxdWlyZWQgYnkgY29tbW9uIGNvZGUKQEAgLTEzNSw2ICsxNTQsMTYgQEAKIAlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBtcGM1Mnh4X2NkbV9pZHMpOwogCW1wYzUyeHhfY2RtID0gb2ZfaW9tYXAobnAsIDApOwogCW9mX25vZGVfcHV0KG5wKTsKKworCS8qIHNpbXBsZV9ncGlvIHJlZ2lzdGVycyAqLworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG1wYzUyeHhfZ3Bpb19zaW1wbGUpOworCXNpbXBsZV9ncGlvID0gb2ZfaW9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKKworCS8qIHdrdXBfZ3BpbyByZWdpc3RlcnMgKi8KKwlucCA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShOVUxMLCBtcGM1Mnh4X2dwaW9fd2t1cCk7CisJd2t1cF9ncGlvID0gb2ZfaW9tYXAobnAsIDApOworCW9mX25vZGVfcHV0KG5wKTsKIH0KIAogLyoqCkBAIC0yMzMsMyArMjYyLDgwIEBACiAKIAl3aGlsZSAoMSk7CiB9CisKKyNkZWZpbmUgUFNDMV9SRVNFVCAgICAgMHgxCisjZGVmaW5lIFBTQzFfU1lOQyAgICAgIDB4NAorI2RlZmluZSBQU0MxX1NEQVRBX09VVCAweDEKKyNkZWZpbmUgUFNDMl9SRVNFVCAgICAgMHgyCisjZGVmaW5lIFBTQzJfU1lOQyAgICAgICgweDQ8PDQpCisjZGVmaW5lIFBTQzJfU0RBVEFfT1VUICgweDE8PDQpCisjZGVmaW5lIE1QQzUyeHhfR1BJT19QU0MxX01BU0sgMHg3CisjZGVmaW5lIE1QQzUyeHhfR1BJT19QU0MyX01BU0sgKDB4Nzw8NCkKKworLyoqCisgKiBtcGM1MjAwX3BzY19hYzk3X2dwaW9fcmVzZXQ6IFVzZSBncGlvIHBpbnMgdG8gcmVzZXQgdGhlIGFjOTcgYnVzCisgKgorICogQHBzYzogcHNjIG51bWJlciB0byByZXNldCAob25seSBwc2MgMSBhbmQgMiBzdXBwb3J0IGFjOTcpCisgKi8KK2ludCBtcGM1MjAwX3BzY19hYzk3X2dwaW9fcmVzZXQoaW50IHBzY19udW1iZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgZ3BpbzsKKwl1MzIgbXV4OworCWludCBvdXQ7CisJaW50IHJlc2V0OworCWludCBzeW5jOworCisJaWYgKCghc2ltcGxlX2dwaW8pIHx8ICghd2t1cF9ncGlvKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKHBzY19udW1iZXIpIHsKKwljYXNlIDA6CisJCXJlc2V0ICAgPSBQU0MxX1JFU0VUOyAgICAgICAgICAgLyogQUM5N18xX1JFUyAqLworCQlzeW5jICAgID0gUFNDMV9TWU5DOyAgICAgICAgICAgIC8qIEFDOTdfMV9TWU5DICovCisJCW91dCAgICAgPSBQU0MxX1NEQVRBX09VVDsgICAgICAgLyogQUM5N18xX1NEQVRBX09VVCAqLworCQlncGlvICAgID0gTVBDNTJ4eF9HUElPX1BTQzFfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXNldCAgID0gUFNDMl9SRVNFVDsgICAgICAgICAgIC8qIEFDOTdfMl9SRVMgKi8KKwkJc3luYyAgICA9IFBTQzJfU1lOQzsgICAgICAgICAgICAvKiBBQzk3XzJfU1lOQyAqLworCQlvdXQgICAgID0gUFNDMl9TREFUQV9PVVQ7ICAgICAgIC8qIEFDOTdfMl9TREFUQV9PVVQgKi8KKwkJZ3BpbyAgICA9IE1QQzUyeHhfR1BJT19QU0MyX01BU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycihfX0ZJTEVfXyAiOiBVbmFibGUgdG8gZGV0ZXJtaW5lIFBTQywgbm8gYWM5NyAiCisJCSAgICAgICAiY29sZC1yZXNldCB3aWxsIGJlIHBlcmZvcm1lZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCS8qIFJlY29uZml1cmUgcGluLW11eGluZyB0byBncGlvICovCisJbXV4ID0gaW5fYmUzMigmc2ltcGxlX2dwaW8tPnBvcnRfY29uZmlnKTsKKwlvdXRfYmUzMigmc2ltcGxlX2dwaW8tPnBvcnRfY29uZmlnLCBtdXggJiAofmdwaW8pKTsKKworCS8qIGVuYWJsZSBncGlvIHBpbnMgZm9yIG91dHB1dCAqLworCXNldGJpdHM4KCZ3a3VwX2dwaW8tPndrdXBfZ3Bpb2UsIHJlc2V0KTsKKwlzZXRiaXRzMzIoJnNpbXBsZV9ncGlvLT5zaW1wbGVfZ3Bpb2UsIHN5bmMgfCBvdXQpOworCisJc2V0Yml0czgoJndrdXBfZ3Bpby0+d2t1cF9kZHIsIHJlc2V0KTsKKwlzZXRiaXRzMzIoJnNpbXBsZV9ncGlvLT5zaW1wbGVfZGRyLCBzeW5jIHwgb3V0KTsKKworCS8qIEFzc2VydCBjb2xkIHJlc2V0ICovCisJY2xyYml0czMyKCZzaW1wbGVfZ3Bpby0+c2ltcGxlX2R2bywgc3luYyB8IG91dCk7CisJY2xyYml0czgoJndrdXBfZ3Bpby0+d2t1cF9kdm8sIHJlc2V0KTsKKworCS8qIHdhaXQgYXQgbGVhc2UgMSB1cyAqLworCXVkZWxheSgyKTsKKworCS8qIERlYXNzZXJ0IHJlc2V0ICovCisJc2V0Yml0czgoJndrdXBfZ3Bpby0+d2t1cF9kdm8sIHJlc2V0KTsKKworCS8qIFJlc3RvcmUgcGluLW11eGluZyAqLworCW91dF9iZTMyKCZzaW1wbGVfZ3Bpby0+cG9ydF9jb25maWcsIG11eCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtcGM1MjAwX3BzY19hYzk3X2dwaW9fcmVzZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCBlNWU1ZjgyLi41ZGVjNDA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtMTEwLDcgKzExMCw5IEBACiAJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKIAkgICAgKGF0dHItPmlhX3NpemUgIT0gaW5vZGUtPmlfc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiAKQEAgLTE0MSwxNSArMTQzLDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zcHVmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3NwdWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHNwdWZzX2lub2RlX2luZm8gKmVpID0gU1BVRlNfSShpbm9kZSk7Ci0KKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlpZiAoZWktPmlfY3R4KQogCQlwdXRfc3B1X2NvbnRleHQoZWktPmlfY3R4KTsKIAlpZiAoZWktPmlfZ2FuZykKIAkJcHV0X3NwdV9nYW5nKGVpLT5pX2dhbmcpOwotCWNsZWFyX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIHZvaWQgc3B1ZnNfcHJ1bmVfZGlyKHN0cnVjdCBkZW50cnkgKmRpcikKQEAgLTc3Nyw4ICs3NzgsNyBAQAogCQkuYWxsb2NfaW5vZGUgPSBzcHVmc19hbGxvY19pbm9kZSwKIAkJLmRlc3Ryb3lfaW5vZGUgPSBzcHVmc19kZXN0cm95X2lub2RlLAogCQkuc3RhdGZzID0gc2ltcGxlX3N0YXRmcywKLQkJLmRlbGV0ZV9pbm9kZSA9IHNwdWZzX2RlbGV0ZV9pbm9kZSwKLQkJLmRyb3BfaW5vZGUgPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkJLmV2aWN0X2lub2RlID0gc3B1ZnNfZXZpY3RfaW5vZGUsCiAJCS5zaG93X29wdGlvbnMgPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDA2YTEzN2MuLjQ4MDU2N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCkBAIC01NDIsMTEgKzU0MiwxMiBAQAogCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKLQkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0LiBXZSBzZXQgSVJRRl9USU1FUiBiZWNhdXNlIHdlIGRvbid0CisJLyogUmVxdWVzdCBjaGlwIGludGVycnVwdC4gV2Ugc2V0IElSUUZfTk9fU1VTUEVORCBiZWNhdXNlIHdlIGRvbid0CiAJICogd2FudCB0aGF0IGludGVycnVwdCBkaXNhYmxlZCBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIKIAkgKiBzdXNwZW5kIG9yIHdlJ2xsIGhhdmUgaXNzdWVzIHJ1bm5pbmcgdGhlIHBmdW5jcwogCSAqLwotCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfVElNRVIsICJrZXl3ZXN0IGkyYyIsIGhvc3QpKQorCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGt3X2kyY19pcnEsIElSUUZfTk9fU1VTUEVORCwKKwkJCSJrZXl3ZXN0IGkyYyIsIGhvc3QpKQogCQlob3N0LT5pcnEgPSBOT19JUlE7CiAKIAlwcmludGsoS0VSTl9JTkZPICJLZXlXZXN0IGkyYyBAMHglMDh4IGlycSAlZCAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXY2NHg2MF9wY2kuYwppbmRleCAxOThmMjg4Li43N2JiM2Y0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L212NjR4NjBfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tdjY0eDYwX3BjaS5jCkBAIC03Myw3ICs3Myw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImhzX3JlZyIsCiAJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgID0gTVY2NFg2MF9WQUxfTEVOX01BWCwKIAkucmVhZCAgPSBtdjY0eDYwX2hzX3JlZ19yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBiZWUxYzBmLi5mMDc3N2E0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDAsOSArNDAsNiBAQAogY29uZmlnIEdFTkVSSUNfSFdFSUdIVAogCWRlZl9ib29sIHkKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWRlZl9ib29sIHkKLQogY29uZmlnIEdFTkVSSUNfVElNRV9WU1lTQ0FMTAogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCA2YjEyMGYwLi45OGE0YTRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBoeXBmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBoeXBmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCWtmcmVlKGlub2RlLT5pX3ByaXZhdGUpOwotCWdlbmVyaWNfZGVsZXRlX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIGludCBoeXBmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNDYwLDcgKzQ2MCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBoeXBmc19zX29wcyA9IHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCi0JLmRyb3BfaW5vZGUJPSBoeXBmc19kcm9wX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGh5cGZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMJPSBoeXBmc19zaG93X29wdGlvbnMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2N3ZGV2LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2N3ZGV2LmgKaW5kZXggMWMwMDMwZi4uZjNiYTBmYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Njd2Rldi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jY3dkZXYuaApAQCAtMjA4LDYgKzIwOCw4IEBACiBleHRlcm4gc3RydWN0IGNjd19kZXZpY2UgKmNjd19kZXZpY2VfcHJvYmVfY29uc29sZSh2b2lkKTsKIGV4dGVybiBpbnQgY2N3X2RldmljZV9mb3JjZV9jb25zb2xlKHZvaWQpOwogCitpbnQgY2N3X2RldmljZV9zaW9zbChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwogLy8gRklYTUU6IHRoZXNlIGhhdmUgdG8gZ28KIGV4dGVybiBpbnQgX2Njd19kZXZpY2VfZ2V0X3N1YmNoYW5uZWxfbnVtYmVyKHN0cnVjdCBjY3dfZGV2aWNlICopOwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vaW9jdGxzLmgKaW5kZXggNDBlNDgxYi4uMmYzZDg3MyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtNjAsNiArNjAsNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywweDJELCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ1QnLDB4MzAsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKG9mIHB0eS1tdXggZGV2aWNlKSAqLwogI2RlZmluZSBUSU9DU1BUTENLCV9JT1coJ1QnLDB4MzEsIGludCkgIC8qIExvY2svdW5sb2NrIFB0eSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCdUJywweDM2LCBpbnQpICAvKiBHZW5lcmF0ZSBzaWduYWwgb24gUHR5IHNsYXZlICovCiAKICNkZWZpbmUgRklPTkNMRVgJMHg1NDUwICAvKiB0aGVzZSBudW1iZXJzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuICovCiAjZGVmaW5lIEZJT0NMRVgJCTB4NTQ1MQpAQCAtODYsNiArODcsNyBAQAogI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAogI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKICNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwJCTY0CiAKICNkZWZpbmUgVElPQ1NFUl9URU1UICAgIDB4MDEJLyogVHJhbnNtaXR0ZXIgcGh5c2ljYWxseSBlbXB0eSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDAzYmU5OTkuLjk5ZTM0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11LmgKQEAgLTEzLDQgKzEzLDkgQEAKIAlpbnQgYWxsb2NfcGdzdGU7IC8qIGNsb25lZCBjb250ZXh0cyB3aWxsIGhhdmUgZXh0ZW5kZWQgcGFnZSB0YWJsZXMgKi8KIH0gbW1fY29udGV4dF90OwogCisjZGVmaW5lIElOSVRfTU1fQ09OVEVYVChuYW1lKQkJCQkJCSAgICAgIFwKKwkuY29udGV4dC5saXN0X2xvY2sgICAgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmNvbnRleHQubGlzdF9sb2NrKSwgXAorCS5jb250ZXh0LmNyc3RfbGlzdCAgICA9IExJU1RfSEVBRF9JTklUKG5hbWUuY29udGV4dC5jcnN0X2xpc3QpLAkgICAgICBcCisJLmNvbnRleHQucGd0YWJsZV9saXN0ID0gTElTVF9IRUFEX0lOSVQobmFtZS5jb250ZXh0LnBndGFibGVfbGlzdCksCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBiZTQ0ZDk0Li4zNWQ3ODZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMSwzICsxIEBACi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECSh+MFVMKQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdGF0ZnMuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdGF0ZnMuaAppbmRleCAwNmNjNzAzLi4zYmU3ZmJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0YXRmcy5oCkBAIC0zMyw3ICszMyw4IEBACiAJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKIAlpbnQgIGZfbmFtZWxlbjsKIAlpbnQgIGZfZnJzaXplOwotCWludCAgZl9zcGFyZVs1XTsKKwlpbnQgIGZfZmxhZ3M7CisJaW50ICBmX3NwYXJlWzRdOwogfTsKIAogc3RydWN0IHN0YXRmczY0IHsKQEAgLTQ3LDcgKzQ4LDggQEAKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogCWludCAgZl9uYW1lbGVuOwogCWludCAgZl9mcnNpemU7Ci0JaW50ICBmX3NwYXJlWzVdOworCWludCAgZl9mbGFnczsKKwlpbnQgIGZfc3BhcmVbNF07CiB9OwogCiBzdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKQEAgLTYxLDcgKzYzLDggQEAKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogCV9fdTMyIGZfbmFtZWxlbjsKIAlfX3UzMiBmX2Zyc2l6ZTsKLQlfX3UzMiBmX3NwYXJlWzVdOworCV9fdTMyIGZfZmxhZ3M7CisJX191MzIgZl9zcGFyZVs0XTsKIH07CiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggZGM4YTY3Mi4uODMxYmQwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTMwLDggKzMwLDYgQEAKIH07CiAjZW5kaWYKIAotI2RlZmluZSBTRF9NQ19JTklUIFNEX0NQVV9JTklUCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgogCiAjZW5kaWYgLyogX0FTTV9TMzkwX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggNTE4MzhhZC4uZGIxNjk2ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTM2Niw3ICszNjYsNyBAQAogCWwJJXIxLC5Mc3RhcnR1cAogCWJyCSVyMQogCi0uTGluaXRyZDoubG9uZyBfZW5kICsgMHg0MDAwMDAJCSMgZGVmYXVsdCBhZGRyZXNzIG9mIGluaXRyZAorLkxpbml0cmQ6LmxvbmcgX2VuZAkJCSMgZGVmYXVsdCBhZGRyZXNzIG9mIGluaXRyZAogLkxwYXJtOgkubG9uZyAgUEFSTUFSRUEKIC5Mc3RhcnR1cDogLmxvbmcgc3RhcnR1cAogLkxyZXNldDouYnl0ZQkweGMzLDB4YzgsMHhjMSwweGQ1LDB4YzcsMHhjNSwweDQwLDB4ZDksMHhjNCwweGQ5LDB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggMTVhNzUzNi4uMjg5NmNhYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTIwNyw4ICsyMDcsOCBAQAogCXJldHVybiAmY2xvY2tzb3VyY2VfdG9kOwogfQogCi12b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaywKLQkJICAgICB1MzIgbXVsdCkKK3ZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqd2FsbF90aW1lLCBzdHJ1Y3QgdGltZXNwZWMgKnd0bSwKKwkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2ssIHUzMiBtdWx0KQogewogCWlmIChjbG9jayAhPSAmY2xvY2tzb3VyY2VfdG9kKQogCQlyZXR1cm47CkBAIC0yMTksOCArMjE5LDggQEAKIAl2ZHNvX2RhdGEtPnh0aW1lX3RvZF9zdGFtcCA9IGNsb2NrLT5jeWNsZV9sYXN0OwogCXZkc29fZGF0YS0+eHRpbWVfY2xvY2tfc2VjID0gd2FsbF90aW1lLT50dl9zZWM7CiAJdmRzb19kYXRhLT54dGltZV9jbG9ja19uc2VjID0gd2FsbF90aW1lLT50dl9uc2VjOwotCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWM7Ci0JdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjOworCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3dG0tPnR2X3NlYzsKKwl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHd0bS0+dHZfbnNlYzsKIAl2ZHNvX2RhdGEtPm50cF9tdWx0ID0gbXVsdDsKIAlzbXBfd21iKCk7CiAJKyt2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCBlYjZhMmVmLi5hOTU1MGRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC00MjcsNyArNDI3LDcgQEAKIAkubm90aWZpZXJfY2FsbCA9IGNtbV9wb3dlcl9ldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgY21tX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNtbV9pbml0KHZvaWQpCiB7CiAJaW50IHJjID0gLUVOT01FTTsKIApAQCAtNDM1LDYgKzQzNSwxMyBAQAogCWlmICghY21tX3N5c2N0bF9oZWFkZXIpCiAJCWdvdG8gb3V0X3N5c2N0bDsKICNpZmRlZiBDT05GSUdfQ01NX0lVQ1YKKwkvKiBjb252ZXJ0IHNlbmRlciB0byB1cHBlcmNhc2UgY2hhcmFjdGVycyAqLworCWlmIChzZW5kZXIpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihzZW5kZXIpOworCQl3aGlsZSAobGVuLS0pCisJCQlzZW5kZXJbbGVuXSA9IHRvdXBwZXIoc2VuZGVyW2xlbl0pOworCX0KKwogCXJjID0gc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhTTVNHX1BSRUZJWCwgY21tX3Ntc2dfdGFyZ2V0KTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIG91dF9zbXNnOwpAQCAtNDY3LDcgKzQ3NCw3IEBACiB9CiBtb2R1bGVfaW5pdChjbW1faW5pdCk7CiAKLXN0YXRpYyB2b2lkIGNtbV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY21tX2V4aXQodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShjbW1fc3lzY3RsX2hlYWRlcik7CiAjaWZkZWYgQ09ORklHX0NNTV9JVUNWCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vdm1lbS5jIGIvYXJjaC9zMzkwL21tL3ZtZW0uYwppbmRleCA5MDE2NWU3Li4zNGM0M2YyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vdm1lbS5jCisrKyBiL2FyY2gvczM5MC9tbS92bWVtLmMKQEAgLTMzMiwxMCArMzMyLDYgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfaW5pdCgmaW5pdF9tbS5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluaXRfbW0uY29udGV4dC5jcnN0X2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZpbml0X21tLmNvbnRleHQucGd0YWJsZV9saXN0KTsKLQlpbml0X21tLmNvbnRleHQubm9leGVjID0gMDsKIAlyb19zdGFydCA9ICgodW5zaWduZWQgbG9uZykmX3N0ZXh0KSAmIFBBR0VfTUFTSzsKIAlyb19lbmQgPSBQRk5fQUxJR04oKHVuc2lnbmVkIGxvbmcpJl9lc2hhcmVkKTsKIAlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9LY29uZmlnIGIvYXJjaC9zY29yZS9LY29uZmlnCmluZGV4IDU1ZDQxM2UuLmJlNGExNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvS2NvbmZpZworKysgYi9hcmNoL3Njb3JlL0tjb25maWcKQEAgLTU1LDkgKzU1LDYgQEAKIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSCiAJZGVmX2Jvb2wgeQogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IDRmYTFhNjYuLjlmNTMzYjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fU0NPUkVfU0NBVFRFUkxJU1RfSAogI2RlZmluZSBfQVNNX1NDT1JFX1NDQVRURVJMSVNUX0gKIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CiAKICNlbmRpZiAvKiBfQVNNX1NDT1JFX1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2NvcmUvbW0vdGxiLXNjb3JlLmMgYi9hcmNoL3Njb3JlL21tL3RsYi1zY29yZS5jCmluZGV4IDRmYTVhYTUuLjZmZGIxMDAyIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL21tL3RsYi1zY29yZS5jCisrKyBiL2FyY2gvc2NvcmUvbW0vdGxiLXNjb3JlLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCiB7Ci0JaWYgKCF2bWEgfHwgdm1hLT52bV9tbS0+Y29udGV4dCAhPSAwKSB7CisJaWYgKHZtYSAmJiB2bWEtPnZtX21tLT5jb250ZXh0ICE9IDApIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IG9sZHBpZCwgbmV3cGlkLCBpZHg7CiAJCXVuc2lnbmVkIGxvbmcgdm1hX0FTSUQgPSB2bWEtPnZtX21tLT5jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDgyODY4ZmUuLjMzOTkwZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTk4LDkgKzk4LDYgQEAKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAJYm9vbAogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZl9ib29sIHkKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1hcDMyNXJ4YS9zZXR1cC5jCmluZGV4IGRlMzc1YjYuLjNkYTExNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtYXAzMjVyeGEvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWFwMzI1cnhhL3NldHVwLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogI2RlZmluZSBQT1JUX0RSVkNSQQkweEE0MDUwMThBCiAjZGVmaW5lIFBPUlRfRFJWQ1JCCTB4QTQwNTAxOEMKIAotc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhKQorc3RhdGljIHZvaWQgYXAzMjBfd3ZnYV9wb3dlcl9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAltc2xlZXAoMTAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L01ha2VmaWxlCmluZGV4IDRlNTc3YTMuLjYwZGQ2M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWtmcjJyMDkvTWFrZWZpbGUKQEAgLTEsMiArMSw0IEBACi1vYmoteQkgOj0gc2V0dXAubyBzZHJhbS5vCi1vYmotJChDT05GSUdfRkJfU0hfTU9CSUxFX0xDREMpCSs9ICBsY2Rfd3F2Z2Eubworb2JqLXkJOj0gc2V0dXAubyBzZHJhbS5vCitpZm5lcSAoJChDT05GSUdfRkJfU0hfTU9CSUxFX0xDREMpLCkKK29iai15CSs9ICBsY2Rfd3F2Z2EubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9sY2Rfd3F2Z2EuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9sY2Rfd3F2Z2EuYwppbmRleCBlOWI5NzA4NC4uMjVlMTQ1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1rZnIycjA5L2xjZF93cXZnYS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gta2ZyMnIwOS9sY2Rfd3F2Z2EuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQga2ZyMnIwOV9sY2Rfb24odm9pZCAqYm9hcmRfZGF0YSkKK3ZvaWQga2ZyMnIwOV9sY2Rfb24odm9pZCAqYm9hcmRfZGF0YSwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJa2ZyMnIwOV9sY2RfYmFja2xpZ2h0KDEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGJlYTMzMzcuLjFhNzNjM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTQyLDIxICs0Miw2IEBACiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKIAotI2lmZGVmIENPTkZJR19ETUFfQ09IRVJFTlQKLSNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkgKDEpCi0jZWxzZQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCS8qCi0JICogRWFjaCBwcm9jZXNzb3IgZmFtaWx5IHdpbGwgZGVmaW5lIGl0cyBvd24gTDFfQ0FDSEVfU0hJRlQsCi0JICogTDFfQ0FDSEVfQllURVMgd3JhcHMgdG8gdGhpcywgc28gdGhpcyBpcyBhbHdheXMgc2FmZS4KLQkgKi8KLQlyZXR1cm4gTDFfQ0FDSEVfQllURVM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKIAlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvY3Rscy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCBjMjEyYzM3Li5lYjZjNGM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvY3Rscy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vaW9jdGxzLmgKQEAgLTY5LDYgKzY5LDcgQEAKICMgZGVmaW5lIFRJT0NQS1RfU1RBUlQJCSA4CiAjIGRlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKICMgZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorIyBkZWZpbmUgVElPQ1BLVF9JT0NUTAkJNjQKIAogCiAjZGVmaW5lIFRJT0NOT1RUWQlfSU8oJ1QnLCAzNCkgLyogMHg1NDIyICovCkBAIC04NCw2ICs4NSw3IEBACiAjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCA0NSwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpIC8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywweDMxLCBpbnQpICAvKiBMb2NrL3VubG9jayBQdHkgKi8KKyNkZWZpbmUgVElPQ1NJRwkJX0lPVygnVCcsMHgzNiwgaW50KSAgLyogR2VuZXJhdGUgc2lnbmFsIG9uIFB0eSBzbGF2ZSAqLwogCiAjZGVmaW5lIFRJT0NTRVJDT05GSUcJX0lPKCdUJywgODMpIC8qIDB4NTQ1MyAqLwogI2RlZmluZSBUSU9DU0VSR1dJTEQJX0lPUignVCcsIDg0LCAgaW50KSAvKiAweDU0NTQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjOTNiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbG9jYWw2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGZiNzAzZDEuLmM0ZTBiM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xODAsNyArMTgwLDcgQEAKICAqIFNvbWUgZHJpdmVycyBuZWVkIHRvIHBlcmZvcm0gRE1BIGludG8ga21hbGxvYydlZCBidWZmZXJzCiAgKiBhbmQgc28gd2UgaGF2ZSB0byBpbmNyZWFzZSB0aGUga21hbGxvYyBtaW5hbGlnbiBmb3IgdGhpcy4KICAqLwotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKIAogI2lmZGVmIENPTkZJR19TVVBFUkg2NAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBlMzhkMWQ0Li45OGRmYzM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9fQVNNX1NIX1NDQVRURVJMSVNUX0gKIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAlwaHlzX2FkZHJfbWFzaygpCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zY2F0dGVybGlzdC5oPgogCiAjZW5kaWYgLyogX19BU01fU0hfU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL2tmcjJyMDkuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLWtmcjJyMDkvbWFjaC9rZnIycjA5LmgKaW5kZXggNDg0ZWY0Mi4uMDdlNjM1YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL21hY2gta2ZyMnIwOS9tYWNoL2tmcjJyMDkuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1rZnIycjA5L21hY2gva2ZyMnIwOS5oCkBAIC0zLDIzICszLDIzIEBACiAKICNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgogCi0jaWZkZWYgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDCi12b2lkIGtmcjJyMDlfbGNkX29uKHZvaWQgKmJvYXJkX2RhdGEpOworI2lmIGRlZmluZWQoQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDKSB8fCBkZWZpbmVkKENPTkZJR19GQl9TSF9NT0JJTEVfTENEQ19NT0RVTEUpCit2b2lkIGtmcjJyMDlfbGNkX29uKHZvaWQgKmJvYXJkX2RhdGEsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHZvaWQga2ZyMnIwOV9sY2Rfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpOwogaW50IGtmcjJyMDlfbGNkX3NldHVwKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAogCQkgICAgICBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpOwogdm9pZCBrZnIycjA5X2xjZF9zdGFydCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKIAkJICAgICAgIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGtmcjJyMDlfbGNkX29uKHZvaWQgKmJvYXJkX2RhdGEpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQga2ZyMnIwOV9sY2Rfb2ZmKHZvaWQgKmJvYXJkX2RhdGEpIHt9Ci1zdGF0aWMgaW5saW5lIGludCBrZnIycjA5X2xjZF9zZXR1cCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKLQkJCQkgICAgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKQorc3RhdGljIHZvaWQga2ZyMnIwOV9sY2Rfb24odm9pZCAqYm9hcmRfZGF0YSkge30KK3N0YXRpYyB2b2lkIGtmcjJyMDlfbGNkX29mZih2b2lkICpib2FyZF9kYXRhKSB7fQorc3RhdGljIGludCBrZnIycjA5X2xjZF9zZXR1cCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKKwkJCQlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpCiB7CiAJcmV0dXJuIC1FTk9ERVY7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQga2ZyMnIwOV9sY2Rfc3RhcnQodm9pZCAqYm9hcmRfZGF0YSwgdm9pZCAqc3lzX29wc19oYW5kbGUsCi0JCQkJICAgICBzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpCitzdGF0aWMgdm9pZCBrZnIycjA5X2xjZF9zdGFydCh2b2lkICpib2FyZF9kYXRhLCB2b2lkICpzeXNfb3BzX2hhbmRsZSwKKwkJCQlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMgKnN5c19vcHMpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc2gva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA4MWI2ZGU0Li43YTNkYzM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xODUsMTAgKzE4NSwxMCBAQAogCSAqIHRoaXMgaXMgdGhlIHNpbXBsZXN0IGFwcHJvYWNoIGZvciBtYWludGFpbmluZyBjb25zaXN0ZW5jeS4KIAkgKi8KIGFnYWluOgotCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwlwcmV2X3Jhd19jb3VudCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKIAluZXdfcmF3X2NvdW50ID0gc2hfcG11LT5yZWFkKGlkeCk7CiAKLQlpZiAoYXRvbWljNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKKwlpZiAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAogCQkJICAgICBuZXdfcmF3X2NvdW50KSAhPSBwcmV2X3Jhd19jb3VudCkKIAkJZ290byBhZ2FpbjsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiAJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOwogCWRlbHRhID4+PSBzaGlmdDsKIAotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogfQogCiBzdGF0aWMgdm9pZCBzaF9wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggYmEwNjhjOC4uNDkxZTlkNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtNjcsOSArNjcsNiBAQAogCWRlZmF1bHQgMzIgaWYgU1BBUkMzMgogCWRlZmF1bHQgNjQgaWYgU1BBUkM2NAogCi1jb25maWcgR0VORVJJQ19USU1FCi0JZGVmX2Jvb2wgeQotCiBjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAlib29sCiAJZGVmYXVsdCB5IGlmIFNQQVJDMzIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZwppbmRleCAxYjRhODMxLi5kOWE3OTVlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCkBAIC0zMCwxOCArMzAsNCBAQAogCWRlcGVuZHMgb24gTUNPVU5UCiAJZGVmYXVsdCB5CiAKLWNvbmZpZyBERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUwotCWJvb2wgIlN0cmljdCBjb3B5IHNpemUgY2hlY2tzIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFUUkFDRV9CUkFOQ0hfUFJPRklMSU5HCi0JLS0taGVscC0tLQotCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gdHVybnMgYSBjZXJ0YWluIHNldCBvZiBzYW5pdHkgY2hlY2tzIGZvciB1c2VyCi0JICBjb3B5IG9wZXJhdGlvbnMgaW50byBjb21waWxlIHRpbWUgZmFpbHVyZXMuCi0KLQkgIFRoZSBjb3B5X2Zyb21fdXNlcigpIGV0YyBjaGVja3MgYXJlIHRoZXJlIHRvIGhlbHAgdGVzdCBpZiB0aGVyZQotCSAgYXJlIHN1ZmZpY2llbnQgc2VjdXJpdHkgY2hlY2tzIG9uIHRoZSBsZW5ndGggYXJndW1lbnQgb2YKLQkgIHRoZSBjb3B5IG9wZXJhdGlvbiwgYnkgaGF2aW5nIGdjYyBwcm92ZSB0aGF0IHRoZSBhcmd1bWVudCBpcwotCSAgd2l0aGluIGJvdW5kcy4KLQotCSAgSWYgdW5zdXJlLCBvciBpZiB5b3UgcnVuIGFuIG9sZGVyIChwcmUgNC40KSBnY2MsIHNheSBOLgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWcKaW5kZXggMWRjMDdhMC4uOGEzYjMzYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvY29uZmlncy9zcGFyYzY0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAotIyBXZWQgTWF5IDI2IDIxOjE0OjAxIDIwMTAKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNQorIyBNb24gQXVnICA5IDAyOjMxOjM2IDIwMTAKICMKIENPTkZJR182NEJJVD15CiBDT05GSUdfU1BBUkM9eQpAQCAtOSw3ICs5LDYgQEAKIENPTkZJR19TUEFSQzY0PXkKIENPTkZJR19BUkNIX0RFRkNPTkZJRz0iYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnIgogQ09ORklHX0JJVFM9NjQKLUNPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CkBAIC0yNCw4ICsyMyw4IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19NTVU9eQogQ09ORklHX05FRURfRE1BX01BUF9TVEFURT15CitDT05GSUdfTkVFRF9TR19ETUFfTEVOR1RIPXkKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19PRj15CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIENPTkZJR19DT05TVFJVQ1RPUlM9eQpAQCAtMzYsNiArMzUsNyBAQAogQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTE9DS19LRVJORUw9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NST1NTX0NPTVBJTEU9IiIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKQEAgLTUxLDggKzUxLDYgQEAKICMgUkNVIFN1YnN5c3RlbQogIwogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTY0CiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTExMCw3ICsxMDgsNiBAQAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPW0KQEAgLTEyOSw3ICsxMjYsNiBAQAogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKICMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yMjcsOCArMjIzLDYgQEAKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CiBDT05GSUdfU1BBUlNFTUVNPXkKIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKQEAgLTIzNiw2ICsyMzAsNyBAQAogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKK0NPTkZJR19IQVZFX01FTUJMT0NLPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKICMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldApAQCAtMzQ1LDYgKzM0MCw3IEBACiAjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldApAQCAtMzY4LDYgKzM2NCw3IEBACiAjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAorIyBDT05GSUdfRE5TX1JFU09MVkVSIGlzIG5vdCBzZXQKIENPTkZJR19SUFM9eQogCiAjCkBAIC00MTYsNiArNDEzLDExIEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KICMgQ09ORklHX01URCBpcyBub3Qgc2V0CitDT05GSUdfT0Y9eQorCisjCisjIEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSBhbmQgT3BlbiBGaXJtd2FyZSBzdXBwb3J0CisjCiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9NRElPPW0KICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApAQCAtNjM4LDYgKzY0MCw3IEBACiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJFV0lSRV9OT1NZIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CkBAIC03MDgsNyArNzExLDYgQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldApAQCAtNzQ0LDYgKzc0Niw4IEBACiAjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKIENPTkZJR19DSEVMU0lPX1Q0X0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UNFZGX0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UNFZGIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQkVWRiBpcyBub3Qgc2V0CkBAIC03NzgsNiArNzgyLDEwIEBACiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JUEhFVEggaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKworIworIyBDQUlGIHRyYW5zcG9ydCBkcml2ZXJzCisjCiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQpAQCAtODI0LDEwICs4MzIsMTEgQEAKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfUVQyMTYwIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9MS0tCRD1tCiAjIENPTkZJR19LRVlCT0FSRF9UQ0E2NDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldApAQCAtODYxLDYgKzg3MCw3IEBACiAjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BRFhMMzRYIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTkyMSw2ICs5MzEsNyBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX1JBTU9PUFMgaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NPTVBBVD15CkBAIC05NTQsNiArOTY1LDcgQEAKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIApAQCAtOTY3LDcgKzk3OSw2IEBACiAjCiAjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycwogIwotIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDM0LDEyICsxMDQ1LDE0IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VNQzE0MDMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVAxMDIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKQEAgLTEwNjMsMTUgKzEwNzYsMTQgQEAKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCiAjIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKK0NPTkZJR19NRkRfU1VQUE9SVD15CiAjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzM1ODkyIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CkBAIC0xMDgxLDggKzEwOTMsMTAgQEAKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg5OTQgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCWDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0xQQ19TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1JEQzMyMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0pBTlpfQ01PRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTMyMCw2ICsxMzM0LDcgQEAKICMKICMgQ09ORklHX0hJRF8zTV9QQ1QgaXMgbm90IHNldAogQ09ORklHX0hJRF9BNFRFQ0g9eQorIyBDT05GSUdfSElEX0FDUlVYX0ZGIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQogIyBDT05GSUdfSElEX0NBTkRPIGlzIG5vdCBzZXQKQEAgLTEzNDksNiArMTM2NCw3IEBACiBDT05GSUdfSElEX1BFVEFMWU5YPXkKICMgQ09ORklHX0hJRF9QSUNPTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9RVUFOVEEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1JPQ0NBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUk9DQ0FUX0tPTkUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CkBAIC0xNzEzLDcgKzE3MjksOCBAQAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfTE9DS1VQX0RFVEVDVE9SPXkKKyMgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAogQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKQEAgLTE3NTMsNiArMTc3MCw3IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05PVElGSUVSX0VSUk9SX0lOSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTc3NywxMyArMTc5NSwxMCBAQAogIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0U9eQogIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldApAQCAtMTc5NSw3ICsxODEwLDYgQEAKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRENGTFVTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTgwNCw5ICsxODE4LDYgQEAKICMgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfWE9SX0JMT0NLUz1tCkBAIC0xODI5LDkgKzE4NDAsMTAgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15Ci1DT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fUENPTVAyPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUl9URVNUUz15CiBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCiAjIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQKQEAgLTE5NDEsNSArMTk1Myw0IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKLUNPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA0YjRhMGMwLi44YzBlNGY3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKIAogZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wcywgcGNpMzJfZG1hX29wczsKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNpX2J1c190eXBlOwpAQCAtNTIsMTUgKzUxLDYgQEAKIAlyZXR1cm4gKGRtYV9hZGRyID09IERNQV9FUlJPUl9DT0RFKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQkvKgotCSAqIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCBwcm9jZXNzb3JzLCBzbyByZXR1cm4KLQkgKiB0aGUgbWF4aW11bSBwb3NzaWJsZSwgdG8gYmUgc2FmZQotCSAqLwotCXJldHVybiAoMSA8PCBJTlRFUk5PREVfQ0FDSEVfU0hJRlQpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IDNkZTQyZTcuLmVjMjNiMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC03MSw3ICs3MSw3IEBACiB9CiAKIGV4dGVybiB2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpOwotZXh0ZXJuIHZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKK2V4dGVybiB2b2lkIGt1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sodm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CiBleHRlcm4gc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqdmFkZHIpOwogCiAjZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZmx1c2hfY2FjaGVfYWxsKCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvY3Rscy5oCmluZGV4IDFmZTY4NTUuLjUzZjRlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9jdGxzLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtODAsNiArODAsNyBAQAogLyogR2V0IG1pbm9yIGRldmljZSBvZiBhIHB0eSBtYXN0ZXIncyBGRCAtLSBTb2xhcmlzIGVxdWl2IGlzIElTUFRNICovCiAjZGVmaW5lIFRJT0NHUFROCV9JT1IoJ3QnLCAxMzQsIHVuc2lnbmVkIGludCkgLyogR2V0IFB0eSBOdW1iZXIgKi8KICNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCd0JywgMTM1LCBpbnQpIC8qIExvY2svdW5sb2NrIFBUWSAqLworI2RlZmluZSBUSU9DU0lHCQlfSU9XKCd0JywgMTM2LCBpbnQpIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogLyogTGl0dGxlIGYgKi8KICNkZWZpbmUgRklPQ0xFWAkJX0lPKCdmJywgMSkKQEAgLTEzMiw1ICsxMzMsNiBAQAogI2RlZmluZSBUSU9DUEtUX1NUQVJUCQkgOAogI2RlZmluZSBUSU9DUEtUX05PU1RPUAkJMTYKICNkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjZGVmaW5lIFRJT0NQS1RfSU9DVEwJCTY0CiAKICNlbmRpZiAvKiAhKF9BU01fU1BBUkNfSU9DVExTX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xvY2FsNjQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbG9jYWw2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wYXJwb3J0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhcnBvcnQuaAppbmRleCA0ZjdhZmEwLi5hYTRjODI2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhcnBvcnQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BhcnBvcnQuaApAQCAtMjI4LDYgKzIyOCwxMCBAQAogCQkubmFtZSA9ICJwYXJhbGxlbCIsCiAJCS5jb21wYXRpYmxlID0gIm5zODczMTctZWNwcCIsCiAJfSwKKwl7CisJCS5uYW1lID0gInBhcmFsbGVsIiwKKwkJLmNvbXBhdGlibGUgPSAicG5wQUxJLDE1MzMsMyIsCisJfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKaW5kZXggN2UyNjY5OC4uNzI3YWY3MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTYsNyArNiwzMCBAQAogI2RlZmluZQlQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkwCiAKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKIGV4dGVybiB2b2lkIGluaXRfaHdfcGVyZl9ldmVudHModm9pZCk7CisKKyNkZWZpbmUgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHJlZ3MsIGlwKQkJXAorZG8gewkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfcHN0YXRlLCBfYXNpLCBfcGlsLCBfaTcsIF9mcDsJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZHByICUlcHN0YXRlLCAlMFxuXHQiCVwKKwkJCSAgICAgInJkICUlYXNpLCAlMVxuXHQiCQlcCisJCQkgICAgICJyZHByICUlcGlsLCAlMlxuXHQiCVwKKwkJCSAgICAgIm1vdiAlJWk3LCAlM1xuXHQiCQlcCisJCQkgICAgICJtb3YgJSVpNiwgJTRcblx0IgkJXAorCQkJICAgICA6ICI9ciIgKF9wc3RhdGUpLAkJXAorCQkJICAgICAgICI9ciIgKF9hc2kpLAkJXAorCQkJICAgICAgICI9ciIgKF9waWwpLAkJXAorCQkJICAgICAgICI9ciIgKF9pNyksCQlcCisJCQkgICAgICAgIj1yIiAoX2ZwKSk7CQlcCisJKHJlZ3MpLT50c3RhdGUgPSAoX3BzdGF0ZSA8PCA4KSB8CQlcCisJCShfYXNpIDw8IDI0KSB8IChfcGlsIDw8IDIwKTsJCVwKKwkocmVncyktPnRwYyA9IChpcCk7CQkJCVwKKwkocmVncyktPnRucGMgPSAocmVncyktPnRwYyArIDQ7CQkJXAorCShyZWdzKS0+dV9yZWdzW1VSRUdfSTZdID0gX2ZwOwkJCVwKKwkocmVncyktPnVfcmVnc1tVUkVHX0k3XSA9IF9pNzsJCQlcCit9IHdoaWxlICgwKQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfZXZlbnRzKHZvaWQpCXsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggNDMzZTQ1Zi4uOTJiYjYzOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CiAKLSNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKH4wVUwpCiAjZGVmaW5lIEFSQ0hfSEFTX1NHX0NIQUlOCiAKICNlbmRpZiAvKiAhKF9TUEFSQ19TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCmluZGV4IGQ3MmRmZWQuLjIzYjEwZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGVybWJpdHMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTIyNSw2ICsyMjUsNyBAQAogI2RlZmluZSBGTFVTSE8JMHgwMDAwMjAwMAogI2RlZmluZSBQRU5ESU4JMHgwMDAwNDAwMAogI2RlZmluZSBJRVhURU4JMHgwMDAwODAwMAorI2RlZmluZSBFWFRQUk9DCTB4MDAwMTAwMDAKIAogLyogbW9kZW0gbGluZXMgKi8KICNkZWZpbmUgVElPQ01fTEUJMHgwMDEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKaW5kZXggMjVmMWQxMC4uODMwM2FjNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzMyLmgKQEAgLTI2MCwyMyArMjYwLDggQEAKIAlyZXR1cm4gX19jb3B5X3VzZXIodG8sIChfX2ZvcmNlIHZvaWQgX191c2VyICopIGZyb20sIG4pOwogfQogCi1leHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQotI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUwotCV9fY29tcGlsZXRpbWVfZXJyb3IoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQotI2Vsc2UKLQlfX2NvbXBpbGV0aW1lX3dhcm5pbmcoImNvcHlfZnJvbV91c2VyKCkgYnVmZmVyIHNpemUgaXMgbm90IHByb3ZhYmx5IGNvcnJlY3QiKQotI2VuZGlmCi07Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKLQlpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKLQotCWlmICh1bmxpa2VseShzeiAhPSAtMSAmJiBzeiA8IG4pKSB7Ci0JCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7Ci0JCXJldHVybiBuOwotCX0KLQogCWlmIChuICYmIF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSBmcm9tLCBuKSkKIAkJcmV0dXJuIF9fY29weV91c2VyKChfX2ZvcmNlIHZvaWQgX191c2VyICopIHRvLCBmcm9tLCBuKTsKIAllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VhY2Nlc3NfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCmluZGV4IDI0MDY3ODguLjNlMTQ0OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oCkBAIC0yMDUsMTQgKzIwNSw2IEBACiAKIGV4dGVybiBpbnQgX19nZXRfdXNlcl9iYWQodm9pZCk7CiAKLWV4dGVybiB2b2lkIGNvcHlfZnJvbV91c2VyX292ZXJmbG93KHZvaWQpCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCi0JX19jb21waWxldGltZV9lcnJvcigiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCi0jZWxzZQotCV9fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCi0jZW5kaWYKLTsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLAogCQkJCQkJICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CkBAIC0yMjEsMTYgKzIxMywxMSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JaW50IHN6ID0gX19jb21waWxldGltZV9vYmplY3Rfc2l6ZSh0byk7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBzaXplOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gX19fY29weV9mcm9tX3VzZXIodG8sIGZyb20sIHNpemUpOwogCi0JaWYgKGxpa2VseShzeiA9PSAtMSB8fCBzeiA+PSBzaXplKSkgewotCQlyZXQgPSBfX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgc2l6ZSk7Ci0JCWlmICh1bmxpa2VseShyZXQpKQotCQkJcmV0ID0gY29weV9mcm9tX3VzZXJfZml4dXAodG8sIGZyb20sIHNpemUpOwotCX0gZWxzZSB7Ci0JCWNvcHlfZnJvbV91c2VyX292ZXJmbG93KCk7Ci0JfQorCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXQgPSBjb3B5X2Zyb21fdXNlcl9maXh1cCh0bywgZnJvbSwgc2l6ZSk7CisKIAlyZXR1cm4gcmV0OwogfQogI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyIGNvcHlfZnJvbV91c2VyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWxwZXJzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWxwZXJzLlMKaW5kZXggOTIwOTBjYy4uMzE0ZGQwYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVscGVycy5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2hlbHBlcnMuUwpAQCAtNDYsODEgKzQ2LDYgQEAKIAkgbm9wCiAJLnNpemUJCXN0YWNrX3RyYWNlX2ZsdXNoLC4tc3RhY2tfdHJhY2VfZmx1c2gKIAotI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwotCS5nbG9ibAkJcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzCi0JLnR5cGUJCXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncywjZnVuY3Rpb24KLXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVnczoKLQkvKiBXZSBhbHdheXMgcmVhZCB0aGUgJXBzdGF0ZSBpbnRvICVvNSBzaW5jZSB3ZSB3aWxsIHVzZQotCSAqIHRoYXQgdG8gY29uc3RydWN0IGEgZmFrZSAldHN0YXRlIHRvIHN0b3JlIGludG8gdGhlIHJlZ3MuCi0JICovCi0JcmRwcgkJJXBzdGF0ZSwgJW81Ci0JYnJ6LHBuCQklbzIsIDUwZgotCSBtb3YJCSVvMiwgJWc3Ci0KLQkvKiBUdXJuIG9mZiBpbnRlcnJ1cHRzIHdoaWxlIHdlIHdhbGsgYXJvdW5kIHRoZSByZWdpc3RlcgotCSAqIHdpbmRvdyBieSBoYW5kLgotCSAqLwotCXdycHIJCSVvNSwgUFNUQVRFX0lFLCAlcHN0YXRlCi0KLQkvKiBUaGUgJWNhbnJlc3RvcmUgdGVsbHMgdXMgaG93IG1hbnkgcmVnaXN0ZXIgd2luZG93cyBhcmUKLQkgKiBzdGlsbCBsaXZlIGluIHRoZSBjaGlwIGFib3ZlIHVzLCBwYXN0IHRoYXQgd2UgaGF2ZSB0bwotCSAqIHdhbGsgdGhlIGZyYW1lIGFzIHNhdmVkIG9uIHRoZSBzdGFjay4gICBXZSBzdGFzaCBhd2F5Ci0JICogdGhlICVjd3AgaW4gJWcxIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byB0aGUgb3JpZ2luYWwKLQkgKiByZWdpc3RlciB3aW5kb3cuCi0JICovCi0JcmRwcgkJJWN3cCwgJWcxCi0JcmRwcgkJJWNhbnJlc3RvcmUsICVnMgotCXN1YgkJJWcxLCAxLCAlZzMKLQotCS8qIFdlIGhhdmUgdGhlIHNraXAgY291bnQgaW4gJWc3LCBpZiBpdCBoaXRzIHplcm8gdGhlbgotCSAqICVmcC8laTcgYXJlIHRoZSByZWdpc3RlcnMgd2UgbmVlZC4gIE90aGVyd2lzZSBpZiBvdXIKLQkgKiAlY2FucmVzdG9yZSBjb3VudCBtYWludGFpbmVkIGluICVnMiBoaXRzIHplcm8gd2UgaGF2ZQotCSAqIHRvIHN0YXJ0IHRyYXZlcnNpbmcgdGhlIHN0YWNrLgotCSAqLwotMTA6CWJyeixwbgkJJWcyLCA0ZgotCSBzdWIJCSVnMiwgMSwgJWcyCi0Jd3JwcgkJJWczLCAlY3dwCi0Jc3ViY2MJCSVnNywgMSwgJWc3Ci0JYm5lLHB0CQkleGNjLCAxMGIKLQkgc3ViCQklZzMsIDEsICVnMwotCi0JLyogV2UgZm91bmQgdGhlIHZhbHVlcyB3ZSBuZWVkIGluIHRoZSBjcHUncyByZWdpc3RlcgotCSAqIHdpbmRvd3MuCi0JICovCi0JbW92CQklZnAsICVnMwotCWJhLHB0CQkleGNjLCAzZgotCSBtb3YJCSVpNywgJWcyCi0KLTUwOgltb3YJCSVmcCwgJWczCi0JYmEscHQJCSV4Y2MsIDJmCi0JIG1vdgkJJWk3LCAlZzIKLQotCS8qIFdlIGhpdCB0aGUgZW5kIG9mIHRoZSB2YWxpZCByZWdpc3RlciB3aW5kb3dzIGluIHRoZQotCSAqIGNwdSwgc3RhcnQgdHJhdmVyc2luZyB0aGUgc3RhY2sgZnJhbWUuCi0JICovCi00Ogltb3YJCSVmcCwgJWczCi0KLTIwOglsZHgJCVslZzMgKyBTVEFDS19CSUFTICsgUldfVjlfSTddLCAlZzIKLQlzdWJjYwkJJWc3LCAxLCAlZzcKLQlibmUscG4JCSV4Y2MsIDIwYgotCSBsZHgJCVslZzMgKyBTVEFDS19CSUFTICsgUldfVjlfSTZdLCAlZzMKLQotCS8qIFJlc3RvcmUgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgd2luZG93IHBvc2l0aW9uIGFuZAotCSAqIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLgotCSAqLwotMzoJd3JwcgkJJWcxLCAlY3dwCi0Jd3JwcgkJJW81LCAlcHN0YXRlCi0KLTI6CXN0eAkJJWczLCBbJW8wICsgUFRfVjlfRlBdCi0Jc2xseAkJJW81LCA4LCAlbzUKLQlzdHgJCSVvNSwgWyVvMCArIFBUX1Y5X1RTVEFURV0KLQlzdHgJCSVnMiwgWyVvMCArIFBUX1Y5X1RQQ10KLQlhZGQJCSVnMiwgNCwgJWcyCi0JcmV0bAotCSBzdHgJCSVnMiwgWyVvMCArIFBUX1Y5X1ROUENdCi0JLnNpemUJCXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncywuLXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncwotI2VuZGlmIC8qIENPTkZJR19QRVJGX0VWRU5UUyAqLwotCiAjaWZkZWYgQ09ORklHX1NNUAogCS5nbG9ibAkJaGFyZF9zbXBfcHJvY2Vzc29yX2lkCiAJLnR5cGUJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCwjZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA0NGZhYWJjLi4zNTdjZWQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC01NzIsMTggKzU3MiwxOCBAQAogCXM2NCBkZWx0YTsKIAogYWdhaW46Ci0JcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCXByZXZfcmF3X2NvdW50ID0gbG9jYWw2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOwogCW5ld19yYXdfY291bnQgPSByZWFkX3BtYyhpZHgpOwogCi0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wcmV2X2NvdW50LCBwcmV2X3Jhd19jb3VudCwKIAkJCSAgICAgbmV3X3Jhd19jb3VudCkgIT0gcHJldl9yYXdfY291bnQpCiAJCWdvdG8gYWdhaW47CiAKIAlkZWx0YSA9IChuZXdfcmF3X2NvdW50IDw8IHNoaWZ0KSAtIChwcmV2X3Jhd19jb3VudCA8PCBzaGlmdCk7CiAJZGVsdGEgPj49IHNoaWZ0OwogCi0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKIAogCXJldHVybiBuZXdfcmF3X2NvdW50OwogfQpAQCAtNTkxLDI3ICs1OTEsMjcgQEAKIHN0YXRpYyBpbnQgc3BhcmNfcGVyZl9ldmVudF9zZXRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgICAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKIHsKLQlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCXM2NCBsZWZ0ID0gbG9jYWw2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKIAlzNjQgcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKIAkJbGVmdCA9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KIAogCWlmICh1bmxpa2VseShsZWZ0IDw9IDApKSB7CiAJCWxlZnQgKz0gcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CiAJCXJldCA9IDE7CiAJfQogCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKIAkJbGVmdCA9IE1BWF9QRVJJT0Q7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CiAKIAl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKIApAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAkgKiBza2lwIHRoZSBzY2hlZHVsYWJpbGl0eSB0ZXN0IGhlcmUsIGl0IHdpbGwgYmUgcGVmb3JtZWQKIAkgKiBhdCBjb21taXQgdGltZSgtPmNvbW1pdF90eG4pIGFzIGEgd2hvbGUKIAkgKi8KLQlpZiAoY3B1Yy0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOX1NUQVJURUQpCisJaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTikKIAkJZ290byBub2NoZWNrOwogCiAJaWYgKGNoZWNrX2V4Y2x1ZGVzKGNwdWMtPmV2ZW50LCBuMCwgMSkpCkBAIC0xMDg4LDcgKzEwODgsNyBAQAogCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CiAJCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IE1BWF9QRVJJT0Q7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTAzLDcgKzExMDMsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1aHctPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyB8PSBQRVJGX0VWRU5UX1RYTjsKIH0KIAogLyoKQEAgLTExMTUsNyArMTExNSw3IEBACiB7CiAJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKLQljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE5fU1RBUlRFRDsKKwljcHVody0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CiB9CiAKIC8qCkBAIC0xMTM4LDYgKzExMzgsNyBAQAogCWlmIChzcGFyY19jaGVja19jb25zdHJhaW50cyhjcHVjLT5ldmVudCwgY3B1Yy0+ZXZlbnRzLCBuKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKKwljcHVjLT5ncm91cF9mbGFnICY9IH5QRVJGX0VWRU5UX1RYTjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9oaWdobWVtLmMgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwppbmRleCA3OTE2ZmViLi5lMTM5ZTljIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYworKysgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwpAQCAtNjUsNyArNjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CiAKLXZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQordm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCiB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGt2YWRkciAmIFBBR0VfTUFTSzsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAJcGFnZWZhdWx0X2VuYWJsZSgpOwogfQotRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKK0VYUE9SVF9TWU1CT0woa3VubWFwX2F0b21pY19ub3R5cGVjaGVjayk7CiAKIC8qIFdlIG1heSBiZSBmZWQgYSBwYWdldGFibGUgaGVyZSBieSBwdGVwX3RvX3h4eCBhbmQgb3RoZXJzLiAqLwogc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL0tidWlsZCBiL2FyY2gvdGlsZS9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliOTIyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9LYnVpbGQKQEAgLTAsMCArMSwzIEBACisKK29iai15ICs9IGtlcm5lbC8KK29iai15ICs9IG1tLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL0tjb25maWcgYi9hcmNoL3RpbGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWIzMDhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL0tjb25maWcKQEAgLTAsMCArMSwzNTYgQEAKKyMgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5bnRheCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwKKyMgc2VlIERvY3VtZW50YXRpb24va2J1aWxkL2NvbmZpZy1sYW5ndWFnZS50eHQuCisKK2NvbmZpZyBNTVUKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX0NTVU0KKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX0hBUkRJUlFTCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisJZGVmX2Jvb2wgeQorCitjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX1BFTkRJTkdfSVJRCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gR0VORVJJQ19IQVJESVJRUyAmJiBTTVAKKworY29uZmlnIFNFTUFQSE9SRV9TTEVFUEVSUworCWRlZl9ib29sIHkKKworY29uZmlnIEhBVkVfQVJDSF9BTExPQ19SRU1BUAorCWRlZl9ib29sIHkKKworY29uZmlnIEhBVkVfU0VUVVBfUEVSX0NQVV9BUkVBCisJZGVmX2Jvb2wgeQorCitjb25maWcgTkVFRF9QRVJfQ1BVX1BBR0VfRklSU1RfQ0hVTksKKyAgICAgICAgZGVmX2Jvb2wgeQorCitjb25maWcgU1lTX1NVUFBPUlRTX0hVR0VUTEJGUworCWRlZl9ib29sIHkKKworY29uZmlnIEdFTkVSSUNfVElNRQorCWRlZl9ib29sIHkKKworY29uZmlnIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlkZWZfYm9vbCB5CisKKyMgRklYTUU6IHRpbGVneCBjYW4gaW1wbGVtZW50IGEgbW9yZSBlZmZpY2VudCByd3NlbS4KK2NvbmZpZyBSV1NFTV9HRU5FUklDX1NQSU5MT0NLCisJZGVmX2Jvb2wgeQorCisjIFdlIGhhdmUgYSB2ZXJ5IGZsYXQgYXJjaGl0ZWN0dXJlIGZyb20gYSBtaWdyYXRpb24gcG9pbnQgb2YgdmlldywKKyMgc28gc2F2ZSBib290IHRpbWUgYnkgcHJlc2V0dGluZyB0aGlzIChwYXJ0aWN1bGFybHkgdXNlZnVsIG9uIHRpbGUtc2ltKS4KK2NvbmZpZyBERUZBVUxUX01JR1JBVElPTl9DT1NUCisJaW50CisJZGVmYXVsdCAiMTAwMDAwMDAiCisKKyMgV2Ugb25seSBzdXBwb3J0IGdjYyA0LjQgYW5kIGFib3ZlLCBzbyB0aGlzIHNob3VsZCB3b3JrLgorY29uZmlnIEFSQ0hfU1VQUE9SVFNfT1BUSU1JWkVEX0lOTElOSU5HCisJZGVmX2Jvb2wgeQorCitjb25maWcgQVJDSF9QSFlTX0FERFJfVF82NEJJVAorCWRlZl9ib29sIHkKKworY29uZmlnIExPQ0tERVBfU1VQUE9SVAorCWRlZl9ib29sIHkKKworY29uZmlnIFNUQUNLVFJBQ0VfU1VQUE9SVAorCWRlZl9ib29sIHkKKwlzZWxlY3QgU1RBQ0tUUkFDRQorCisjIFdlIHVzZSBkaXNjb250aWdtZW0gZm9yIG5vdzsgYXQgc29tZSBwb2ludCB3ZSBtYXkgd2FudCB0byBzd2l0Y2gKKyMgdG8gc3BhcnNlbWVtIChUaWxlcmEgYnVnIDc5OTYpLgorY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQorCWRlZl9ib29sIHkKKworY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBUUkFDRV9JUlFGTEFHU19TVVBQT1JUCisJZGVmX2Jvb2wgeQorCitjb25maWcgU1RSSUNUX0RFVk1FTQorCWRlZl9ib29sIHkKKworIyBTTVAgaXMgcmVxdWlyZWQgZm9yIFRpbGVyYSBMaW51eC4KK2NvbmZpZyBTTVAKKwlkZWZfYm9vbCB5CisKKyMgQWxsb3cgY2hlY2tpbmcgZm9yIGNvbXBpbGUtdGltZSBkZXRlcm1pbmVkIG92ZXJmbG93IGVycm9ycyBpbgorIyBjb3B5X2Zyb21fdXNlcigpLiAgVGhlcmUgYXJlIHN0aWxsIHVucHJvdmFibGUgcGxhY2VzIGluIHRoZQorIyBnZW5lcmljIGNvZGUgYXMgb2YgMi42LjM0LCBzbyB0aGlzIG9wdGlvbiBpcyBub3QgcmVhbGx5IGNvbXBhdGlibGUKKyMgd2l0aCAtV2Vycm9yLCB3aGljaCBpcyBtb3JlIHVzZWZ1bCBpbiBnZW5lcmFsLgorY29uZmlnIERFQlVHX0NPUFlfRlJPTV9VU0VSCisJZGVmX2Jvb2wgbgorCitjb25maWcgSFZDX1RJTEUKKwlzZWxlY3QgSFZDX0RSSVZFUgorCWRlZl9ib29sIHkKKworY29uZmlnIFRJTEUKKwlkZWZfYm9vbCB5CisJc2VsZWN0IEdFTkVSSUNfRklORF9GSVJTVF9CSVQKKwlzZWxlY3QgR0VORVJJQ19GSU5EX05FWFRfQklUCisJc2VsZWN0IFVTRV9HRU5FUklDX1NNUF9IRUxQRVJTCisJc2VsZWN0IENDX09QVElNSVpFX0ZPUl9TSVpFCisKKyMgRklYTUU6IGludmVzdGlnYXRlIHdoZXRoZXIgd2UgbmVlZC93YW50IHRoZXNlIG9wdGlvbnMuCisjCXNlbGVjdCBIQVZFX0lPUkVNQVBfUFJPVAorIyAgICAgICBzZWxlY3QgSEFWRV9PUFRQUk9CRVMKKyMgICAgICAgc2VsZWN0IEhBVkVfUkVHU19BTkRfU1RBQ0tfQUNDRVNTX0FQSQorIyAgICAgICBzZWxlY3QgSEFWRV9IV19CUkVBS1BPSU5UCisjICAgICAgIHNlbGVjdCBQRVJGX0VWRU5UUworIyAgICAgICBzZWxlY3QgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgorIyAgICAgICBjb25maWcgTk9fQk9PVE1FTQorIyAgICAgICBjb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKKyMgICAgICAgY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFCisKKworbWFpbm1lbnUgIkxpbnV4L1RJTEUgS2VybmVsIENvbmZpZ3VyYXRpb24iCisKKyMgUGxlYXNlIG5vdGU6IFRJTEUtR3ggc3VwcG9ydCBpcyBub3QgeWV0IGZpbmFsaXplZDsgdGhpcyBpcworIyB0aGUgcHJlbGltaW5hcnkgc3VwcG9ydC4gIFRJTEUtR3ggZHJpdmVycyBhcmUgb25seSBwcm92aWRlZAorIyB3aXRoIHRoZSBhbHBoYSBvciBiZXRhIHRlc3QgdmVyc2lvbnMgZm9yIFRpbGVyYSBjdXN0b21lcnMuCitjb25maWcgVElMRUdYCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJCdWlsZGluZyB3aXRoIFRJTEUtR3ggKDY0LWJpdCkgY29tcGlsZXIgYW5kIHRvb2xjaGFpbiIKKworY29uZmlnIDY0QklUCisJZGVwZW5kcyBvbiBUSUxFR1gKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBBUkNIX0RFRkNPTkZJRworCXN0cmluZworCWRlZmF1bHQgImFyY2gvdGlsZS9jb25maWdzL3RpbGVfZGVmY29uZmlnIiBpZiAhVElMRUdYCisJZGVmYXVsdCAiYXJjaC90aWxlL2NvbmZpZ3MvdGlsZWd4X2RlZmNvbmZpZyIgaWYgVElMRUdYCisKK3NvdXJjZSAiaW5pdC9LY29uZmlnIgorCittZW51ICJUaWxlcmEtc3BlY2lmaWMgY29uZmlndXJhdGlvbiIKKworY29uZmlnIE5SX0NQVVMKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHRpbGVzICgyLTI1NSkiCisJcmFuZ2UgMiAyNTUKKwlkZXBlbmRzIG9uIFNNUAorCWRlZmF1bHQgIjY0IgorCS0tLWhlbHAtLS0KKwkgIEJ1aWxkaW5nIHdpdGggNjQgaXMgdGhlIHJlY29tbWVuZGVkIHZhbHVlLCBidXQgYSBzbGlnaHRseQorCSAgc21hbGxlciBrZXJuZWwgbWVtb3J5IGZvb3RwcmludCByZXN1bHRzIGZyb20gdXNpbmcgYSBzbWFsbGVyCisJICB2YWx1ZSBvbiBjaGlwcyB3aXRoIGZld2VyIHRpbGVzLgorCitzb3VyY2UgImtlcm5lbC90aW1lL0tjb25maWciCisKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaHoiCisKK2NvbmZpZyBLRVhFQworCWJvb2wgImtleGVjIHN5c3RlbSBjYWxsIgorCS0tLWhlbHAtLS0KKwkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRvIHNodXRkb3duIHlvdXIKKwkgIGN1cnJlbnQga2VybmVsLCBhbmQgdG8gc3RhcnQgYW5vdGhlciBrZXJuZWwuICBJdCBpcyBsaWtlIGEgcmVib290CisJICBidXQgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gICBJdCBpcyB1c2VkCisJICB0byBpbXBsZW1lbnQgdGhlICJtYm9vdCIgVGlsZXJhIGJvb3Rlci4KKworCSAgVGhlIG5hbWUgY29tZXMgZnJvbSB0aGUgc2ltaWxhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KKworY29uZmlnIENPTVBBVAorCWJvb2wgIlN1cHBvcnQgMzItYml0IFRJTEUtR3ggYmluYXJpZXMgaW4gYWRkaXRpb24gdG8gNjQtYml0IgorCWRlcGVuZHMgb24gVElMRUdYCisJc2VsZWN0IENPTVBBVF9CSU5GTVRfRUxGCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgSWYgZW5hYmxlZCwgdGhlIGtlcm5lbCB3aWxsIHN1cHBvcnQgcnVubmluZyBUSUxFLUd4IGJpbmFyaWVzCisJICB0aGF0IHdlcmUgYnVpbHQgd2l0aCB0aGUgLW0zMiBvcHRpb24uCisKK2NvbmZpZyBTWVNWSVBDX0NPTVBBVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENPTVBBVCAmJiBTWVNWSVBDCisKKyMgV2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IGRpc2FibGluZyBISUdITUVNIG9uIHRpbGU2NCBhbmQgdGlsZXByby4KK2NvbmZpZyBISUdITUVNCisJYm9vbCAjICJTdXBwb3J0IGZvciBtb3JlIHRoYW4gNTEyIE1CIG9mIFJBTSIKKwlkZWZhdWx0ICFUSUxFR1gKKwktLS1oZWxwLS0tCisJICBMaW51eCBjYW4gdXNlIHRoZSBmdWxsIGFtb3VudCBvZiBSQU0gaW4gdGhlIHN5c3RlbSBieQorCSAgZGVmYXVsdC4gIEhvd2V2ZXIsIHRoZSBhZGRyZXNzIHNwYWNlIG9mIFRJTEUgcHJvY2Vzc29ycyBpcworCSAgb25seSA0IEdpZ2FieXRlcyBsYXJnZS4gVGhhdCBtZWFucyB0aGF0LCBpZiB5b3UgaGF2ZSBhIGxhcmdlCisJICBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5LCBub3QgYWxsIG9mIGl0IGNhbiBiZSAicGVybWFuZW50bHkKKwkgIG1hcHBlZCIgYnkgdGhlIGtlcm5lbC4gVGhlIHBoeXNpY2FsIG1lbW9yeSB0aGF0J3Mgbm90CisJICBwZXJtYW5lbnRseSBtYXBwZWQgaXMgY2FsbGVkICJoaWdoIG1lbW9yeSIuCisKKwkgIElmIHlvdSBhcmUgY29tcGlsaW5nIGEga2VybmVsIHdoaWNoIHdpbGwgbmV2ZXIgcnVuIG9uIGEKKwkgIG1hY2hpbmUgd2l0aCBtb3JlIHRoYW4gNTEyIE1CIHRvdGFsIHBoeXNpY2FsIFJBTSwgYW5zd2VyCisJICAiZmFsc2UiIGhlcmUuIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIGtlcm5lbCBtYXBwaW5nIGFsbCBvZgorCSAgcGh5c2ljYWwgbWVtb3J5IGludG8gdGhlIHRvcCAxIEdCIG9mIHZpcnR1YWwgbWVtb3J5IHNwYWNlLgorCisJICBJZiB1bnN1cmUsIHNheSAidHJ1ZSIuCisKKyMgV2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IGRpc2FibGluZyBOVU1BLgorY29uZmlnIE5VTUEKKwlib29sICMgIk5VTUEgTWVtb3J5IEFsbG9jYXRpb24gYW5kIFNjaGVkdWxlciBTdXBwb3J0IgorCWRlcGVuZHMgb24gU01QICYmIERJU0NPTlRJR01FTQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIE5VTUEgbWVtb3J5IGFsbG9jYXRpb24gaXMgcmVxdWlyZWQgZm9yIFRJTEUgcHJvY2Vzc29ycworCSAgdW5sZXNzIGJvb3Rpbmcgd2l0aCBtZW1vcnkgc3RyaXBpbmcgZW5hYmxlZCBpbiB0aGUKKwkgIGh5cGVydmlzb3IsIG9yIHdpdGggb25seSBhIHNpbmdsZSBtZW1vcnkgY29udHJvbGxlci4KKwkgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhpcyBvcHRpb24gYWx3YXlzIGJlIGVuYWJsZWQuCisKK2NvbmZpZyBOT0RFU19TSElGVAorCWludCAiTG9nIGJhc2UgMiBvZiB0aGUgbWF4IG51bWJlciBvZiBtZW1vcnkgY29udHJvbGxlcnMiCisJZGVmYXVsdCAyCisJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCisJLS0taGVscC0tLQorCSAgQnkgZGVmYXVsdCwgMiwgaS5lLiAyXjIgPT0gNCBERFIyIGNvbnRyb2xsZXJzLgorCSAgSW4gYSBzeXN0ZW0gd2l0aCBtb3JlIGNvbnRyb2xsZXJzLCB0aGlzIHZhbHVlIHNob3VsZCBiZSByYWlzZWQuCisKKyMgTmVlZCAxNk1CIGFyZWFzIHRvIGVuYWJsZSBodWdldGxiCisjIFNlZSBidWlsZC10aW1lIGNoZWNrIGluIGFyY2gvdGlsZS9tbS9pbml0LmMuCitjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUgorCWludAorCWRlZmF1bHQgOQorCitjaG9pY2UKKwlkZXBlbmRzIG9uICFUSUxFR1gKKwlwcm9tcHQgIk1lbW9yeSBzcGxpdCIgaWYgRU1CRURERUQKKwlkZWZhdWx0IFZNU1BMSVRfM0cKKwktLS1oZWxwLS0tCisJICBTZWxlY3QgdGhlIGRlc2lyZWQgc3BsaXQgYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgbWVtb3J5LgorCisJICBJZiB0aGUgYWRkcmVzcyByYW5nZSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCBpcyBsZXNzIHRoYW4gdGhlCisJICBwaHlzaWNhbCBtZW1vcnkgaW5zdGFsbGVkLCB0aGUgcmVtYWluaW5nIG1lbW9yeSB3aWxsIGJlIGF2YWlsYWJsZQorCSAgYXMgImhpZ2ggbWVtb3J5Ii4gQWNjZXNzaW5nIGhpZ2ggbWVtb3J5IGlzIGEgbGl0dGxlIG1vcmUgY29zdGx5CisJICB0aGFuIGxvdyBtZW1vcnksIGFzIGl0IG5lZWRzIHRvIGJlIG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgZmlyc3QuCisJICBOb3RlIHRoYXQgaW5jcmVhc2luZyB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgbGltaXRzIHRoZSByYW5nZQorCSAgYXZhaWxhYmxlIHRvIHVzZXIgcHJvZ3JhbXMsIG1ha2luZyB0aGUgYWRkcmVzcyBzcGFjZSB0aGVyZQorCSAgdGlnaHRlci4gIFNlbGVjdGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IDNHLzFHIHNwbGl0CisJICB3aWxsIGFsc28gbGlrZWx5IG1ha2UgeW91ciBrZXJuZWwgaW5jb21wYXRpYmxlIHdpdGggYmluYXJ5LW9ubHkKKwkgIGtlcm5lbCBtb2R1bGVzLgorCisJICBJZiB5b3UgYXJlIG5vdCBhYnNvbHV0ZWx5IHN1cmUgd2hhdCB5b3UgYXJlIGRvaW5nLCBsZWF2ZSB0aGlzCisJICBvcHRpb24gYWxvbmUhCisKKwljb25maWcgVk1TUExJVF8zNzVHCisJCWJvb2wgIjMuNzVHLzAuMjVHIHVzZXIva2VybmVsIHNwbGl0IChubyBrZXJuZWwgbmV0d29ya2luZykiCisJY29uZmlnIFZNU1BMSVRfMzVHCisJCWJvb2wgIjMuNUcvMC41RyB1c2VyL2tlcm5lbCBzcGxpdCIKKwljb25maWcgVk1TUExJVF8zRworCQlib29sICIzRy8xRyB1c2VyL2tlcm5lbCBzcGxpdCIKKwljb25maWcgVk1TUExJVF8zR19PUFQKKwkJYm9vbCAiM0cvMUcgdXNlci9rZXJuZWwgc3BsaXQgKGZvciBmdWxsIDFHIGxvdyBtZW1vcnkpIgorCWNvbmZpZyBWTVNQTElUXzJHCisJCWJvb2wgIjJHLzJHIHVzZXIva2VybmVsIHNwbGl0IgorCWNvbmZpZyBWTVNQTElUXzFHCisJCWJvb2wgIjFHLzNHIHVzZXIva2VybmVsIHNwbGl0IgorZW5kY2hvaWNlCisKK2NvbmZpZyBQQUdFX09GRlNFVAorCWhleAorCWRlZmF1bHQgMHhGMDAwMDAwMCBpZiBWTVNQTElUXzM3NUcKKwlkZWZhdWx0IDB4RTAwMDAwMDAgaWYgVk1TUExJVF8zNUcKKwlkZWZhdWx0IDB4QjAwMDAwMDAgaWYgVk1TUExJVF8zR19PUFQKKwlkZWZhdWx0IDB4ODAwMDAwMDAgaWYgVk1TUExJVF8yRworCWRlZmF1bHQgMHg0MDAwMDAwMCBpZiBWTVNQTElUXzFHCisJZGVmYXVsdCAweEMwMDAwMDAwCisKK3NvdXJjZSAibW0vS2NvbmZpZyIKKworY29uZmlnIENNRExJTkVfQk9PTAorCWJvb2wgIkJ1aWx0LWluIGtlcm5lbCBjb21tYW5kIGxpbmUiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgQWxsb3cgZm9yIHNwZWNpZnlpbmcgYm9vdCBhcmd1bWVudHMgdG8gdGhlIGtlcm5lbCBhdAorCSAgYnVpbGQgdGltZS4gIE9uIHNvbWUgc3lzdGVtcyAoZS5nLiBlbWJlZGRlZCBvbmVzKSwgaXQgaXMKKwkgIG5lY2Vzc2FyeSBvciBjb252ZW5pZW50IHRvIHByb3ZpZGUgc29tZSBvciBhbGwgb2YgdGhlCisJICBrZXJuZWwgYm9vdCBhcmd1bWVudHMgd2l0aCB0aGUga2VybmVsIGl0c2VsZiAodGhhdCBpcywKKwkgIHRvIG5vdCByZWx5IG9uIHRoZSBib290IGxvYWRlciB0byBwcm92aWRlIHRoZW0uKQorCisJICBUbyBjb21waWxlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgaW50byB0aGUga2VybmVsLAorCSAgc2V0IHRoaXMgb3B0aW9uIHRvICdZJywgdGhlbiBmaWxsIGluIHRoZQorCSAgdGhlIGJvb3QgYXJndW1lbnRzIGluIENPTkZJR19DTURMSU5FLgorCisJICBTeXN0ZW1zIHdpdGggZnVsbHkgZnVuY3Rpb25hbCBib290IGxvYWRlcnMgKGUuZy4gbWJvb3QsIG9yCisJICBpZiBib290aW5nIG92ZXIgUENJKSBzaG91bGQgbGVhdmUgdGhpcyBvcHRpb24gc2V0IHRvICdOJy4KKworY29uZmlnIENNRExJTkUKKwlzdHJpbmcgIkJ1aWx0LWluIGtlcm5lbCBjb21tYW5kIHN0cmluZyIKKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAorCWRlZmF1bHQgIiIKKwktLS1oZWxwLS0tCisJICBFbnRlciBhcmd1bWVudHMgaGVyZSB0aGF0IHNob3VsZCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwKKwkgIGltYWdlIGFuZCB1c2VkIGF0IGJvb3QgdGltZS4gIElmIHRoZSBib290IGxvYWRlciBwcm92aWRlcyBhCisJICBjb21tYW5kIGxpbmUgYXQgYm9vdCB0aW1lLCBpdCBpcyBhcHBlbmRlZCB0byB0aGlzIHN0cmluZyB0bworCSAgZm9ybSB0aGUgZnVsbCBrZXJuZWwgY29tbWFuZCBsaW5lLCB3aGVuIHRoZSBzeXN0ZW0gYm9vdHMuCisKKwkgIEhvd2V2ZXIsIHlvdSBjYW4gdXNlIHRoZSBDT05GSUdfQ01ETElORV9PVkVSUklERSBvcHRpb24gdG8KKwkgIGNoYW5nZSB0aGlzIGJlaGF2aW9yLgorCisJICBJbiBtb3N0IGNhc2VzLCB0aGUgY29tbWFuZCBsaW5lICh3aGV0aGVyIGJ1aWx0LWluIG9yIHByb3ZpZGVkCisJICBieSB0aGUgYm9vdCBsb2FkZXIpIHNob3VsZCBzcGVjaWZ5IHRoZSBkZXZpY2UgZm9yIHRoZSByb290CisJICBmaWxlIHN5c3RlbS4KKworY29uZmlnIENNRExJTkVfT1ZFUlJJREUKKwlib29sICJCdWlsdC1pbiBjb21tYW5kIGxpbmUgb3ZlcnJpZGVzIGJvb3QgbG9hZGVyIGFyZ3VtZW50cyIKKwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIENNRExJTkVfQk9PTAorCS0tLWhlbHAtLS0KKwkgIFNldCB0aGlzIG9wdGlvbiB0byAnWScgdG8gaGF2ZSB0aGUga2VybmVsIGlnbm9yZSB0aGUgYm9vdCBsb2FkZXIKKwkgIGNvbW1hbmQgbGluZSwgYW5kIHVzZSBPTkxZIHRoZSBidWlsdC1pbiBjb21tYW5kIGxpbmUuCisKKwkgIFRoaXMgaXMgdXNlZCB0byB3b3JrIGFyb3VuZCBicm9rZW4gYm9vdCBsb2FkZXJzLiAgVGhpcyBzaG91bGQKKwkgIGJlIHNldCB0byAnTicgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMuCisKK2NvbmZpZyBWTUFMTE9DX1JFU0VSVkUKKwloZXgKKwlkZWZhdWx0IDB4MTAwMDAwMAorCitjb25maWcgSEFSRFdBTEwKKwlib29sICJIYXJkd2FsbCBzdXBwb3J0IHRvIGFsbG93IGFjY2VzcyB0byB1c2VyIGR5bmFtaWMgbmV0d29yayIKKwlkZWZhdWx0IHkKKworZW5kbWVudSAgIyBUaWxlcmEtc3BlY2lmaWMgY29uZmlndXJhdGlvbgorCittZW51ICJCdXMgb3B0aW9ucyIKKworY29uZmlnIE5PX0lPTUVNCisJZGVmX2Jvb2wgIVBDSQorCitjb25maWcgTk9fSU9QT1JUCisJZGVmX2Jvb2wgIVBDSQorCitzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnIgorCitlbmRtZW51CisKK21lbnUgIkV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzIgorCisjIG9ubHkgZWxmIHN1cHBvcnRlZAorY29uZmlnIEtDT1JFX0VMRgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFBST0NfRlMKKworc291cmNlICJmcy9LY29uZmlnLmJpbmZtdCIKKworZW5kbWVudQorCitzb3VyY2UgIm5ldC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKKworc291cmNlICJmcy9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvdGlsZS9LY29uZmlnLmRlYnVnIgorCitzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCisKK3NvdXJjZSAiY3J5cHRvL0tjb25maWciCisKK3NvdXJjZSAibGliL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvdGlsZS9LY29uZmlnLmRlYnVnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWYwZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvS2NvbmZpZy5kZWJ1ZwpAQCAtMCwwICsxLDQzIEBACittZW51ICJLZXJuZWwgaGFja2luZyIKKworc291cmNlICJsaWIvS2NvbmZpZy5kZWJ1ZyIKKworY29uZmlnIEVBUkxZX1BSSU5USworCWJvb2wgIkVhcmx5IHByaW50ayIgaWYgRU1CRURERUQgJiYgREVCVUdfS0VSTkVMCisJZGVmYXVsdCB5CisJaGVscAorCSAgV3JpdGUga2VybmVsIGxvZyBvdXRwdXQgZGlyZWN0bHkgdmlhIHRoZSBoeXBlcnZpc29yIGNvbnNvbGUuCisKKwkgIFRoaXMgaXMgdXNlZnVsIGZvciBrZXJuZWwgZGVidWdnaW5nIHdoZW4geW91ciBtYWNoaW5lIGNyYXNoZXMgdmVyeQorCSAgZWFybHkgYmVmb3JlIHRoZSBjb25zb2xlIGNvZGUgaXMgaW5pdGlhbGl6ZWQuIEZvciBub3JtYWwgb3BlcmF0aW9uCisJICBpdCBpcyBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBpdCBsb29rcyB1Z2x5IGFuZCBkb2Vzbid0IGNvb3BlcmF0ZQorCSAgd2l0aCBrbG9nZC9zeXNsb2dkLiBZb3Ugc2hvdWxkIG5vcm1hbGx5IE4gaGVyZSwKKwkgIHVubGVzcyB5b3Ugd2FudCB0byBkZWJ1ZyBzdWNoIGEgY3Jhc2guCisKK2NvbmZpZyBERUJVR19TVEFDS09WRVJGTE9XCisJYm9vbCAiQ2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93cyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgbWVzc2FnZXMgdG8gYmUgcHJpbnRlZCBpZiBmcmVlIHN0YWNrIHNwYWNlCisJICBkcm9wcyBiZWxvdyBhIGNlcnRhaW4gbGltaXQuCisKK2NvbmZpZyBERUJVR19TVEFDS19VU0FHRQorCWJvb2wgIlN0YWNrIHV0aWxpemF0aW9uIGluc3RydW1lbnRhdGlvbiIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAorCWhlbHAKKwkgIEVuYWJsZXMgdGhlIGRpc3BsYXkgb2YgdGhlIG1pbmltdW0gYW1vdW50IG9mIGZyZWUgc3RhY2sgd2hpY2ggZWFjaAorCSAgdGFzayBoYXMgZXZlciBoYWQgYXZhaWxhYmxlIGluIHRoZSBzeXNycS1UIGFuZCBzeXNycS1QIGRlYnVnIG91dHB1dC4KKworCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KKworY29uZmlnIERFQlVHX0VYVFJBX0ZMQUdTCisJc3RyaW5nICJBZGRpdGlvbmFsIGNvbXBpbGVyIGFyZ3VtZW50cyB3aGVuIGJ1aWxkaW5nIHdpdGggJy1nJyIKKwlkZXBlbmRzIG9uIERFQlVHX0lORk8KKwlkZWZhdWx0ICIiCisJaGVscAorCSAgRGVidWcgaW5mbyBjYW4gYmUgbGFyZ2UsIGFuZCBmbGFncyBsaWtlCisJICBgLWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25seScgY2FuIHJlZHVjZSB0aGUga2VybmVsIGZpbGUKKwkgIHNpemUgYW5kIGJ1aWxkIHRpbWUgbm90aWNlYWJseS4gIFN1Y2ggZmxhZ3MgYXJlIG9mdGVuCisJICBoZWxwZnVsIGlmIHRoZSBtYWluIHVzZSBvZiBkZWJ1ZyBpbmZvIGlzIGxpbmUgbnVtYmVyIGluZm8uCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9NYWtlZmlsZSBiL2FyY2gvdGlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M0MzE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsNTIgQEAKKyMKKyMgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorIyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgdGhlIGdsb2JhbCBtYWtlZmlsZSBzbyB0aGF0IHlvdSBjYW4gYWRkIHlvdXIgb3duCisjIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBhbmQgZGVwZW5kZW5jaWVzLiBSZW1lbWJlciB0byBkbyBoYXZlIGFjdGlvbnMKKyMgZm9yICJhcmNoY2xlYW4iIGFuZCAiYXJjaGRlcCIgZm9yIGNsZWFuaW5nIHVwIGFuZCBtYWtpbmcgZGVwZW5kZW5jaWVzIGZvcgorIyB0aGlzIGFyY2hpdGVjdHVyZQorCitpZmVxICgkKENST1NTX0NPTVBJTEUpLCkKKyMgSWYgYnVpbGRpbmcgd2l0aCBUSUxFUkFfUk9PVCBzZXQgKGkuZS4gdXNpbmcgdGhlIFRpbGVyYSBNdWx0aWNvcmUKKyMgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQpIHdlIGNhbiBzZXQgQ1JPU1NfQ09NUElMRSBiYXNlZCBvbiB0aGF0LgoraWZkZWYgVElMRVJBX1JPT1QKK0NST1NTX0NPTVBJTEUJPSAkKFRJTEVSQV9ST09UKS9iaW4vdGlsZS0KK2VuZGlmCitlbmRpZgorCisjIElmIHdlJ3JlIG5vdCBjcm9zcy1jb21waWxpbmcsIG1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlLgoraWZlcSAoJChDUk9TU19DT01QSUxFKSwpCitIT1NUX0FSQ0ggPSAkKHNoZWxsIHVuYW1lIC1tKQoraWZuZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorJChlcnJvciBTZXQgVElMRVJBX1JPT1Qgb3IgQ1JPU1NfQ09NUElMRSB3aGVuIGJ1aWxkaW5nICQoQVJDSCkgb24gJChIT1NUX0FSQ0gpKQorZW5kaWYKK2VuZGlmCisKKworS0JVSUxEX0NGTEFHUyAgICs9ICQoQ09ORklHX0RFQlVHX0VYVFJBX0ZMQUdTKQorCitMSUJHQ0NfUEFUSCAgICAgOj0gJChzaGVsbCAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lKQorCisjIFByb3ZpZGUgdGhlIHBhdGggdG8gdXNlIGZvciAibWFrZSBkZWZjb25maWciLgorS0JVSUxEX0RFRkNPTkZJRyA6PSAkKEFSQ0gpX2RlZmNvbmZpZworCisjIFVzZWQgYXMgYSBmaWxlIGV4dGVuc2lvbiB3aGVuIHVzZWZ1bCwgZS5nLiBoZWFkXyQoQklUUykubworIyBOb3QgbmVlZGVkIGZvciAoZS5nLikgIiQoQ0MpIC1tMzIiIHNpbmNlIHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5CisjIHVzZXMgdGhlIHJpZ2h0IGRlZmF1bHQgYW55d2F5LgorZXhwb3J0IEJJVFMKK2lmZXEgKCQoQ09ORklHX1RJTEVHWCkseSkKK0JJVFMgOj0gNjQKK2Vsc2UKK0JJVFMgOj0gMzIKK2VuZGlmCisKK2hlYWQteQkJOj0gYXJjaC90aWxlL2tlcm5lbC9oZWFkXyQoQklUUykubworCitsaWJzLXkJCSs9IGFyY2gvdGlsZS9saWIvCitsaWJzLXkJCSs9ICQoTElCR0NDX1BBVEgpCisKKworIyBTZWUgYXJjaC90aWxlL0tidWlsZCBmb3IgY29udGVudCBvZiBjb3JlIHBhcnQgb2YgdGhlIGtlcm5lbAorY29yZS15CQkrPSBhcmNoL3RpbGUvCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZyBiL2FyY2gvdGlsZS9jb25maWdzL3RpbGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGM3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyOTAgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zNAorIyBUaHUgSnVuICAzIDEzOjIwOjA1IDIwMTAKKyMKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ1NVTT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUT15CitDT05GSUdfU0VNQVBIT1JFX1NMRUVQRVJTPXkKK0NPTkZJR19IQVZFX0FSQ0hfQUxMT0NfUkVNQVA9eQorQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSz15CitDT05GSUdfU1lTX1NVUFBPUlRTX0hVR0VUTEJGUz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19ERUZBVUxUX01JR1JBVElPTl9DT1NUPTEwMDAwMDAwCitDT05GSUdfQVJDSF9TVVBQT1JUU19PUFRJTUlaRURfSU5MSU5JTkc9eQorQ09ORklHX0FSQ0hfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX1NUUklDVF9ERVZNRU09eQorQ09ORklHX1NNUD15CitDT05GSUdfV0VSUk9SPXkKKyMgQ09ORklHX0RFQlVHX0NPUFlfRlJPTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19IVkNfVElMRT15CitDT05GSUdfVElMRT15CisjIENPTkZJR19USUxFR1ggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3RpbGUvY29uZmlncy90aWxlX2RlZmNvbmZpZyIKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0ZBU1RfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0idXNyL2NvbnRlbnRzLnR4dCIKK0NPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAorQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQorIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk8gaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfUFJPRklMSU5HPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CitDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CitDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CisKKyMKKyMgVGlsZXJhLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19OUl9DUFVTPTY0CitDT05GSUdfSE9NRUNBQ0hFPXkKK0NPTkZJR19EQVRBUExBTkU9eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfSFpfMTAwPXkKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19ISUdITUVNPXkKK0NPTkZJR19OVU1BPXkKK0NPTkZJR19OT0RFU19TSElGVD0yCitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05CisjIENPTkZJR19WTVNQTElUXzM3NUcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8zNUcgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8zR19PUFQgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTD15CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNDT05USUdNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19ORUVEX01VTFRJUExFX05PREVTPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUVEQkFDS19DT0xMRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19GRUVEQkFDS19VU0U9IiIKKyMgQ09ORklHX0hVR0VWTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19WTUFMTE9DX1JFU0VSVkU9MHgxMDAwMDAwCitDT05GSUdfSEFSRFdBTEw9eQorQ09ORklHX01FTVBST0Y9eQorQ09ORklHX1hHQkU9eQorQ09ORklHX05FVF9USUxFPXkKK0NPTkZJR19QU0VVRE9fTkFQST15CitDT05GSUdfVElMRVBDSV9FTkRQPXkKK0NPTkZJR19USUxFUENJX0hPU1RfU1VCU0VUPW0KK0NPTkZJR19USUxFX0lERV9HUElPPXkKK0NPTkZJR19USUxFX1NPRlRVQVJUPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfTk9fSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19LQ09SRV9FTEY9eQorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfVFVOTkVMPXkKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PXkKKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01JUDYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPXkKKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworIyBDT05GSUdfQkxLX0RFVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODE3MiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfU0NTSV9NT0Q9eQorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFRoZSBuZXdlciBzdGFjayBpcyByZWNvbW1lbmRlZC4KKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49eQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfRTEwMDBFPXkKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TS1kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKK0NPTkZJR19IVkNfRFJJVkVSPXkKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworIyBDT05GSUdfUlRDX0lOVEZfU1lTRlMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9eQorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTE9HRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9bQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTIwNDgKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19FWFRSQV9GTEFHUz0iLWZlbWl0LXN0cnVjdC1kZWJ1Zy1iYXNlb25seSIKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX1JORz1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz1tCisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCitDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0ZJUlNUX0JJVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvYWJpLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2FiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOGRmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2FiaS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBAZmlsZQorICoKKyAqIEFCSS1yZWxhdGVkIHJlZ2lzdGVyIGRlZmluaXRpb25zIGhlbHBmdWwgd2hlbiB3cml0aW5nIGFzc2VtYmx5IGNvZGUuCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQUJJX0hfXworI2RlZmluZSBfX0FSQ0hfQUJJX0hfXworCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qIFJlZ2lzdGVycyAwIC0gNTUgYXJlICJub3JtYWwiLCBidXQgc29tZSBwZXJmb3JtIHNwZWNpYWwgcm9sZXMuICovCisKKyNkZWZpbmUgVFJFR19GUCAgICAgICA1MiAgIC8qKjwgRnJhbWUgcG9pbnRlci4gKi8KKyNkZWZpbmUgVFJFR19UUCAgICAgICA1MyAgIC8qKjwgVGhyZWFkIHBvaW50ZXIuICovCisjZGVmaW5lIFRSRUdfU1AgICAgICAgNTQgICAvKio8IFN0YWNrIHBvaW50ZXIuICovCisjZGVmaW5lIFRSRUdfTFIgICAgICAgNTUgICAvKio8IExpbmsgdG8gY2FsbGluZyBmdW5jdGlvbiBQQy4gKi8KKworLyoqIEluZGV4IG9mIGxhc3Qgbm9ybWFsIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgVFJFR19MQVNUX0dQUiA1NQorCisvKiBSZWdpc3RlcnMgNTYgLSA2MiBhcmUgInNwZWNpYWwiIG5ldHdvcmsgcmVnaXN0ZXJzLiAqLworCisjZGVmaW5lIFRSRUdfU04gICAgICAgNTYgICAvKio8IFN0YXRpYyBuZXR3b3JrIGFjY2Vzcy4gKi8KKyNkZWZpbmUgVFJFR19JRE4wICAgICA1NyAgIC8qKjwgSUROIGRlbXV4IDAgYWNjZXNzLiAqLworI2RlZmluZSBUUkVHX0lETjEgICAgIDU4ICAgLyoqPCBJRE4gZGVtdXggMSBhY2Nlc3MuICovCisjZGVmaW5lIFRSRUdfVUROMCAgICAgNTkgICAvKio8IFVETiBkZW11eCAwIGFjY2Vzcy4gKi8KKyNkZWZpbmUgVFJFR19VRE4xICAgICA2MCAgIC8qKjwgVUROIGRlbXV4IDEgYWNjZXNzLiAqLworI2RlZmluZSBUUkVHX1VETjIgICAgIDYxICAgLyoqPCBVRE4gZGVtdXggMiBhY2Nlc3MuICovCisjZGVmaW5lIFRSRUdfVUROMyAgICAgNjIgICAvKio8IFVETiBkZW11eCAzIGFjY2Vzcy4gKi8KKworLyogUmVnaXN0ZXIgNjMgaXMgdGhlICJzcGVjaWFsIiB6ZXJvIHJlZ2lzdGVyLiAqLworCisjZGVmaW5lIFRSRUdfWkVSTyAgICAgNjMgICAvKio8ICJaZXJvIiByZWdpc3RlcjsgYWx3YXlzIHJlYWRzIGFzICIwIi4gKi8KKworCisvKiogQnkgY29udmVudGlvbiwgdGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGhvbGQgdGhlIHN5c2NhbGwgbnVtYmVyLiAqLworI2RlZmluZSBUUkVHX1NZU0NBTExfTlIgICAgICAxMAorCisvKiogTmFtZSBvZiByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBzeXNjYWxsIG51bWJlciwgZm9yIHVzZSBpbiBhc3NlbWJseS4gKi8KKyNkZWZpbmUgVFJFR19TWVNDQUxMX05SX05BTUUgcjEwCisKKworLyoqCisgKiBUaGUgQUJJIHJlcXVpcmVzIGNhbGxlcnMgdG8gYWxsb2NhdGUgYSBjYWxsZXIgc3RhdGUgc2F2ZSBhcmVhIG9mCisgKiB0aGlzIG1hbnkgYnl0ZXMgYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHN0YWNrIGZyYW1lLgorICovCisjaWZkZWYgX190aWxlX18KKyNkZWZpbmUgQ19BQklfU0FWRV9BUkVBX1NJWkUgKDIgKiBfX1NJWkVPRl9QT0lOVEVSX18pCisjZW5kaWYKKworLyoqCisgKiBUaGUgb3BlcmFuZCB0byBhbiAnaW5mbycgb3Bjb2RlIGRpcmVjdGluZyB0aGUgYmFja3RyYWNlciB0byBub3QKKyAqIHRyeSB0byBmaW5kIHRoZSBjYWxsaW5nIGZyYW1lLgorICovCisjZGVmaW5lIElORk9fT1BfQ0FOTk9UX0JBQ0tUUkFDRSAyCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2lmIENISVBfV09SRF9TSVpFKCkgPiAzMgorCisvKiogVW5zaWduZWQgdHlwZSB0aGF0IGNhbiBob2xkIGEgcmVnaXN0ZXIuICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50X3JlZ190OworCisvKiogU2lnbmVkIHR5cGUgdGhhdCBjYW4gaG9sZCBhIHJlZ2lzdGVyLiAqLwordHlwZWRlZiBsb25nIGxvbmcgaW50X3JlZ190OworCisvKiogU3RyaW5nIHByZWZpeCB0byB1c2UgZm9yIHByaW50ZigpLiAqLworI2RlZmluZSBJTlRfUkVHX0ZNVCAibGwiCisKKyNlbGlmICFkZWZpbmVkKF9fTFA2NF9fKSAgIC8qIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIExQNjQgY3Jvc3MtYnVpbGQgdG9vbHMgKi8KKworLyoqIFVuc2lnbmVkIHR5cGUgdGhhdCBjYW4gaG9sZCBhIHJlZ2lzdGVyLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRfcmVnX3Q7CisKKy8qKiBTaWduZWQgdHlwZSB0aGF0IGNhbiBob2xkIGEgcmVnaXN0ZXIuICovCit0eXBlZGVmIGxvbmcgaW50X3JlZ190OworCisvKiogU3RyaW5nIHByZWZpeCB0byB1c2UgZm9yIHByaW50ZigpLiAqLworI2RlZmluZSBJTlRfUkVHX0ZNVCAibCIKKworI2VuZGlmCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYgLyogIV9fQVJDSF9BQklfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2NoaXAuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvY2hpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmQzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2NoaXAuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZiBfX3RpbGVfY2hpcF9fID09IDAKKyNpbmNsdWRlIDxhcmNoL2NoaXBfdGlsZTY0Lmg+CisjZWxpZiBfX3RpbGVfY2hpcF9fID09IDEKKyNpbmNsdWRlIDxhcmNoL2NoaXBfdGlsZXByby5oPgorI2VsaWYgZGVmaW5lZChfX3RpbGVneF9fKQorI2luY2x1ZGUgPGFyY2gvY2hpcF90aWxlZ3guaD4KKyNlbHNlCisjZXJyb3IgVW5leHBlY3RlZCBUaWxlcmEgY2hpcCB0eXBlCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvY2hpcF90aWxlNjQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvY2hpcF90aWxlNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ2NTczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9jaGlwX3RpbGU2NC5oCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBAZmlsZQorICogR2xvYmFsIGhlYWRlciBmaWxlLgorICogVGhpcyBoZWFkZXIgZmlsZSBzcGVjaWZpZXMgZGVmaW5lcyBmb3IgVElMRTY0LgorICovCisKKyNpZm5kZWYgX19BUkNIX0NISVBfSF9fCisjZGVmaW5lIF9fQVJDSF9DSElQX0hfXworCisvKiogU3BlY2lmeSBjaGlwIHZlcnNpb24uCisgKiBXaGVuIHBvc3NpYmxlLCBwcmVmZXIgdGhlIENISVBfeHh4IHN5bWJvbHMgYmVsb3cgZm9yIGZ1dHVyZS1wcm9vZmluZy4KKyAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGNyb3NzLWNvbXBpbGluZzsgbmF0aXZlIGNvbXBpbGF0aW9uIHNob3VsZAorICogdXNlIHRoZSBwcmVkZWZpbmVkIF9fdGlsZV9jaGlwX18gc3ltYm9sLgorICovCisjZGVmaW5lIFRJTEVfQ0hJUCAwCisKKy8qKiBTcGVjaWZ5IGNoaXAgcmV2aXNpb24uCisgKiBUaGlzIHByb3ZpZGVzIGZvciB0aGUgY2FzZSBvZiBhIHJlc3BpbiBvZiBhIHBhcnRpY3VsYXIgY2hpcCB0eXBlOworICogdGhlIG5vcm1hbCB2YWx1ZSBmb3IgdGhpcyBzeW1ib2wgaXMgIjAiLgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgY3Jvc3MtY29tcGlsaW5nOyBuYXRpdmUgY29tcGlsYXRpb24gc2hvdWxkCisgKiB1c2UgdGhlIHByZWRlZmluZWQgX190aWxlX2NoaXBfcmV2X18gc3ltYm9sLgorICovCisjZGVmaW5lIFRJTEVfQ0hJUF9SRVYgMAorCisvKiogVGhlIG5hbWUgb2YgdGhpcyBhcmNoaXRlY3R1cmUuICovCisjZGVmaW5lIENISVBfQVJDSF9OQU1FICJ0aWxlNjQiCisKKy8qKiBUaGUgRUxGIGVfbWFjaGluZSB0eXBlIGZvciBiaW5hcmllcyBmb3IgdGhpcyBjaGlwLiAqLworI2RlZmluZSBDSElQX0VMRl9UWVBFKCkgRU1fVElMRTY0CisKKy8qKiBUaGUgYWx0ZXJuYXRlIEVMRiBlX21hY2hpbmUgdHlwZSBmb3IgYmluYXJpZXMgZm9yIHRoaXMgY2hpcC4gKi8KKyNkZWZpbmUgQ0hJUF9DT01QQVRfRUxGX1RZUEUoKSAweDI1MDYKKworLyoqIFdoYXQgaXMgdGhlIG5hdGl2ZSB3b3JkIHNpemUgb2YgdGhlIG1hY2hpbmU/ICovCisjZGVmaW5lIENISVBfV09SRF9TSVpFKCkgMzIKKworLyoqIEhvdyBtYW55IGJpdHMgb2YgYSB2aXJ0dWFsIGFkZHJlc3MgYXJlIHVzZWQuIEV4dHJhIGJpdHMgbXVzdCBiZQorICogdGhlIHNpZ24gZXh0ZW5zaW9uIG9mIHRoZSBsb3cgYml0cy4KKyAqLworI2RlZmluZSBDSElQX1ZBX1dJRFRIKCkgMzIKKworLyoqIEhvdyBtYW55IGJpdHMgYXJlIGluIGEgcGh5c2ljYWwgYWRkcmVzcz8gKi8KKyNkZWZpbmUgQ0hJUF9QQV9XSURUSCgpIDM2CisKKy8qKiBTaXplIG9mIHRoZSBMMiBjYWNoZSwgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDJfQ0FDSEVfU0laRSgpIDY1NTM2CisKKy8qKiBMb2cgc2l6ZSBvZiBhbiBMMiBjYWNoZSBsaW5lIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wyX0xPR19MSU5FX1NJWkUoKSA2CisKKy8qKiBTaXplIG9mIGFuIEwyIGNhY2hlIGxpbmUsIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wyX0xJTkVfU0laRSgpICgxIDw8IENISVBfTDJfTE9HX0xJTkVfU0laRSgpKQorCisvKiogQXNzb2NpYXRpdml0eSBvZiB0aGUgTDIgY2FjaGUuICovCisjZGVmaW5lIENISVBfTDJfQVNTT0MoKSAyCisKKy8qKiBTaXplIG9mIHRoZSBMMSBkYXRhIGNhY2hlLCBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMURfQ0FDSEVfU0laRSgpIDgxOTIKKworLyoqIExvZyBzaXplIG9mIGFuIEwxIGRhdGEgY2FjaGUgbGluZSBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMURfTE9HX0xJTkVfU0laRSgpIDQKKworLyoqIFNpemUgb2YgYW4gTDEgZGF0YSBjYWNoZSBsaW5lLCBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMURfTElORV9TSVpFKCkgKDEgPDwgQ0hJUF9MMURfTE9HX0xJTkVfU0laRSgpKQorCisvKiogQXNzb2NpYXRpdml0eSBvZiB0aGUgTDEgZGF0YSBjYWNoZS4gKi8KKyNkZWZpbmUgQ0hJUF9MMURfQVNTT0MoKSAyCisKKy8qKiBTaXplIG9mIHRoZSBMMSBpbnN0cnVjdGlvbiBjYWNoZSwgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFJX0NBQ0hFX1NJWkUoKSA4MTkyCisKKy8qKiBMb2cgc2l6ZSBvZiBhbiBMMSBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wxSV9MT0dfTElORV9TSVpFKCkgNgorCisvKiogU2l6ZSBvZiBhbiBMMSBpbnN0cnVjdGlvbiBjYWNoZSBsaW5lLCBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMUlfTElORV9TSVpFKCkgKDEgPDwgQ0hJUF9MMUlfTE9HX0xJTkVfU0laRSgpKQorCisvKiogQXNzb2NpYXRpdml0eSBvZiB0aGUgTDEgaW5zdHJ1Y3Rpb24gY2FjaGUuICovCisjZGVmaW5lIENISVBfTDFJX0FTU09DKCkgMQorCisvKiogU3RyaWRlIHdpdGggd2hpY2ggZmx1c2ggaW5zdHJ1Y3Rpb25zIG11c3QgYmUgaXNzdWVkLiAqLworI2RlZmluZSBDSElQX0ZMVVNIX1NUUklERSgpIENISVBfTDJfTElORV9TSVpFKCkKKworLyoqIFN0cmlkZSB3aXRoIHdoaWNoIGludiBpbnN0cnVjdGlvbnMgbXVzdCBiZSBpc3N1ZWQuICovCisjZGVmaW5lIENISVBfSU5WX1NUUklERSgpIENISVBfTDFEX0xJTkVfU0laRSgpCisKKy8qKiBTdHJpZGUgd2l0aCB3aGljaCBmaW52IGluc3RydWN0aW9ucyBtdXN0IGJlIGlzc3VlZC4gKi8KKyNkZWZpbmUgQ0hJUF9GSU5WX1NUUklERSgpIENISVBfTDFEX0xJTkVfU0laRSgpCisKKy8qKiBDYW4gdGhlIGxvY2FsIGNhY2hlIGNvaGVyZW50bHkgY2FjaGUgZGF0YSB0aGF0IGlzIGhvbWVkIGVsc2V3aGVyZT8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfQ09IRVJFTlRfTE9DQUxfQ0FDSEUoKSAwCisKKy8qKiBIb3cgbWFueSBzaW11bHRhbmVvdXMgb3V0c3RhbmRpbmcgdmljdGltcyBjYW4gdGhlIEwyIGNhY2hlIGhhdmU/ICovCisjZGVmaW5lIENISVBfTUFYX09VVFNUQU5ESU5HX1ZJQ1RJTVMoKSAyCisKKy8qKiBEb2VzIHRoZSBUTEIgc3VwcG9ydCB0aGUgTkMgYW5kIE5PQUxMT0MgYml0cz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpIDAKKworLyoqIERvZXMgdGhlIGNoaXAgc3VwcG9ydCBoYXNoLWZvci1ob21lIGNhY2hpbmc/ICovCisjZGVmaW5lIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKSAwCisKKy8qKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2hpcCdzIGhvbWUgbWFwIHRhYmxlcy4gKi8KKy8qICNkZWZpbmUgQ0hJUF9DQk9YX0hPTUVfTUFQX1NJWkUoKSAtLSBkb2VzIG5vdCBhcHBseSB0byBjaGlwIDAgKi8KKworLyoqIERvIHVuY2FjaGVhYmxlIHJlcXVlc3RzIG1pc3MgaW4gdGhlIGNhY2hlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICogdGhlcmUgaXMgbWF0Y2hpbmcgZGF0YT8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfRU5GT1JDRURfVU5DQUNIRUFCTEVfUkVRVUVTVFMoKSAwCisKKy8qKiBEb2VzIHRoZSBtZiBpbnN0cnVjdGlvbiB3YWl0IGZvciB2aWN0aW1zPyAqLworI2RlZmluZSBDSElQX0hBU19NRl9XQUlUU19GT1JfVklDVElNUygpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBhbiAiaW52IiBpbnN0cnVjdGlvbiB0aGF0IGRvZXNuJ3QgYWxzbyBmbHVzaD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfSU5WKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIGEgIndoNjQiIGluc3RydWN0aW9uPyAqLworI2RlZmluZSBDSElQX0hBU19XSDY0KCkgMAorCisvKiogRG9lcyB0aGlzIGNoaXAgaGF2ZSBhICdkd29yZF9hbGlnbicgaW5zdHJ1Y3Rpb24/ICovCisjZGVmaW5lIENISVBfSEFTX0RXT1JEX0FMSUdOKCkgMAorCisvKiogTnVtYmVyIG9mIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAqLworI2RlZmluZSBDSElQX1BFUkZPUk1BTkNFX0NPVU5URVJTKCkgMgorCisvKiogRG9lcyB0aGlzIGNoaXAgaGF2ZSBhdXhpbGlhcnkgcGVyZm9ybWFuY2UgY291bnRlcnM/ICovCisjZGVmaW5lIENISVBfSEFTX0FVWF9QRVJGX0NPVU5URVJTKCkgMAorCisvKiogSXMgdGhlIENCT1hfTVNSMSBTUFIgc3VwcG9ydGVkPyAqLworI2RlZmluZSBDSElQX0hBU19DQk9YX01TUjEoKSAwCisKKy8qKiBJcyB0aGUgVElMRV9SVEZfSFdNIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX1RJTEVfUlRGX0hXTSgpIDAKKworLyoqIElzIHRoZSBUSUxFX1dSSVRFX1BFTkRJTkcgU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVElMRV9XUklURV9QRU5ESU5HKCkgMAorCisvKiogSXMgdGhlIFBST0NfU1RBVFVTIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX1BST0NfU1RBVFVTX1NQUigpIDAKKworLyoqIExvZyBvZiB0aGUgbnVtYmVyIG9mIG1zaGltcyB3ZSBoYXZlLiAqLworI2RlZmluZSBDSElQX0xPR19OVU1fTVNISU1TKCkgMgorCisvKiogQXJlIHRoZSBiYXNlcyBvZiB0aGUgaW50ZXJydXB0IHZlY3RvciBhcmVhcyBmaXhlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfRklYRURfSU5UVkVDX0JBU0UoKSAxCisKKy8qKiBBcmUgdGhlIGludGVycnVwdCBtYXNrcyBzcGxpdCB1cCBpbnRvIDIgU1BScz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfU1BMSVRfSU5UUl9NQVNLKCkgMQorCisvKiogSXMgdGhlIGN5Y2xlIGNvdW50IHNwbGl0IHVwIGludG8gMiBTUFJzPyAqLworI2RlZmluZSBDSElQX0hBU19TUExJVF9DWUNMRSgpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBhIHN0YXRpYyBuZXR3b3JrPyAqLworI2RlZmluZSBDSElQX0hBU19TTigpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBhIHN0YXRpYyBuZXR3b3JrIHByb2Nlc3Nvcj8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfU05fUFJPQygpIDEKKworLyoqIFNpemUgb2YgdGhlIEwxIHN0YXRpYyBuZXR3b3JrIHByb2Nlc3NvciBpbnN0cnVjdGlvbiBjYWNoZSwgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFTTklfQ0FDSEVfU0laRSgpIDIwNDgKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBETUEgc3VwcG9ydCBpbiBlYWNoIHRpbGU/ICovCisjZGVmaW5lIENISVBfSEFTX1RJTEVfRE1BKCkgMQorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIHRoZSBzZWNvbmQgcmV2aXNpb24gb2YgdGhlIGRpcmVjdGx5IGFjY2Vzc2libGUKKyAqICBkeW5hbWljIG5ldHdvcmtzPyAgVGhpcyBlbmNhcHN1bGF0ZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVyaXN0aWNzLAorICogIGluY2x1ZGluZyB0aGUgYWJzZW5jZSBvZiB0aGUgY2F0Y2gtYWxsLCB0aGUgYWJzZW5jZSBvZiBpbmxpbmUgbWVzc2FnZQorICogIHRhZ3MsIHRoZSBhYnNlbmNlIG9mIHN1cHBvcnQgZm9yIG5ldHdvcmsgY29udGV4dC1zd2l0Y2hpbmcsIGFuZCBzbyBvbi4KKyAqLworI2RlZmluZSBDSElQX0hBU19SRVYxX1hETigpIDAKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBjbXBleGNoIGFuZCBzaW1pbGFyIChmZXRjaGFkZCwgZXhjaCwgZXRjLik/ICovCisjZGVmaW5lIENISVBfSEFTX0NNUEVYQ0goKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgbWVtb3J5LW1hcHBlZCBJL08gc3VwcG9ydD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfTU1JTygpIDAKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSBwb3N0LWNvbXBsZXRpb24gaW50ZXJydXB0cz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfUE9TVF9DT01QTEVUSU9OX0lOVEVSUlVQVFMoKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgbmF0aXZlIHNpbmdsZSBzdGVwIHN1cHBvcnQ/ICovCisjZGVmaW5lIENISVBfSEFTX1NJTkdMRV9TVEVQKCkgMAorCisjaWZuZGVmIF9fT1BFTl9TT1VSQ0VfXyAgLyogZmVhdHVyZXMgb25seSByZWxldmFudCB0byBoeXBlcnZpc29yLWxldmVsIGNvZGUgKi8KKworLyoqIEhvdyBtYW55IGVudHJpZXMgYXJlIHByZXNlbnQgaW4gdGhlIGluc3RydWN0aW9uIFRMQj8gKi8KKyNkZWZpbmUgQ0hJUF9JVExCX0VOVFJJRVMoKSA4CisKKy8qKiBIb3cgbWFueSBlbnRyaWVzIGFyZSBwcmVzZW50IGluIHRoZSBkYXRhIFRMQj8gKi8KKyNkZWZpbmUgQ0hJUF9EVExCX0VOVFJJRVMoKSAxNgorCisvKiogSG93IG1hbnkgTUFGIGVudHJpZXMgZG9lcyB0aGUgWEFVSSBzaGltIGhhdmU/ICovCisjZGVmaW5lIENISVBfWEFVSV9NQUZfRU5UUklFUygpIDE2CisKKy8qKiBEb2VzIHRoZSBtZW1vcnkgc2hpbSBoYXZlIGEgc291cmNlLWlkIHRhYmxlPyAqLworI2RlZmluZSBDSElQX0hBU19NU0hJTV9TUkNJRF9UQUJMRSgpIDEKKworLyoqIERvZXMgdGhlIEwxIGluc3RydWN0aW9uIGNhY2hlIGNsZWFyIG9uIHJlc2V0PyAqLworI2RlZmluZSBDSElQX0hBU19MMUlfQ0xFQVJfT05fUkVTRVQoKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGNvbWUgb3V0IG9mIHJlc2V0IHdpdGggdmFsaWQgY29vcmRpbmF0ZXMgb24gYWxsIHRpbGVzPworICogTm90ZSB0aGF0IGlmIGRlZmluZWQsIHRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIHVwcGVyIGxlZnQgaXMgMSwxLgorICovCisjZGVmaW5lIENISVBfSEFTX1ZBTElEX1RJTEVfQ09PUkRfUkVTRVQoKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgdW5pZmllZCBwYWNrZXQgZm9ybWF0cz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVU5JRklFRF9QQUNLRVRfRk9STUFUUygpIDAKKworLyoqIERvZXMgdGhlIGNoaXAgc3VwcG9ydCB3cml0ZSByZW9yZGVyaW5nPyAqLworI2RlZmluZSBDSElQX0hBU19XUklURV9SRU9SREVSSU5HKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBzdXBwb3J0IFktWCByb3V0aW5nIGFzIHdlbGwgYXMgWC1ZPyAqLworI2RlZmluZSBDSElQX0hBU19ZX1hfUk9VVElORygpIDAKKworLyoqIElzIElOVENUUkxfMyBtYW5hZ2VkIHdpdGggdGhlIGNvcnJlY3QgTVBMPyAqLworI2RlZmluZSBDSElQX0hBU19JTlRDVFJMXzNfU1RBVFVTX0ZJWCgpIDAKKworLyoqIElzIGl0IHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0aGUgY2hpcCB0byBiZSBiaWctZW5kaWFuPyAqLworI2RlZmluZSBDSElQX0hBU19CSUdfRU5ESUFOX0NPTkZJRygpIDAKKworLyoqIElzIHRoZSBDQUNIRV9SRURfV0FZX09WRVJSSURERU4gU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfQ0FDSEVfUkVEX1dBWV9PVkVSUklEREVOKCkgMAorCisvKiogSXMgdGhlIERJQUdfVFJBQ0VfV0FZIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX0RJQUdfVFJBQ0VfV0FZKCkgMAorCisvKiogSXMgdGhlIE1FTV9TVFJJUEVfQ09ORklHIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX01FTV9TVFJJUEVfQ09ORklHKCkgMAorCisvKiogQXJlIHRoZSBUTEJfUEVSRiBTUFJzIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVExCX1BFUkYoKSAwCisKKy8qKiBJcyB0aGUgVkROX1NOT09QX1NISU1fQ1RMIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX1ZETl9TTk9PUF9TSElNX0NUTCgpIDAKKworLyoqIERvZXMgdGhlIGNoaXAgc3VwcG9ydCByZXYxIERNQSBwYWNrZXRzPyAqLworI2RlZmluZSBDSElQX0hBU19SRVYxX0RNQV9QQUNLRVRTKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIGFuIElQSSBzaGltPyAqLworI2RlZmluZSBDSElQX0hBU19JUEkoKSAwCisKKyNlbmRpZiAvKiAhX19PUEVOX1NPVVJDRV9fICovCisjZW5kaWYgLyogX19BUkNIX0NISVBfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2NoaXBfdGlsZXByby5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9jaGlwX3RpbGVwcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODY0YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9jaGlwX3RpbGVwcm8uaApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogQGZpbGUKKyAqIEdsb2JhbCBoZWFkZXIgZmlsZS4KKyAqIFRoaXMgaGVhZGVyIGZpbGUgc3BlY2lmaWVzIGRlZmluZXMgZm9yIFRJTEVQcm8uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQ0hJUF9IX18KKyNkZWZpbmUgX19BUkNIX0NISVBfSF9fCisKKy8qKiBTcGVjaWZ5IGNoaXAgdmVyc2lvbi4KKyAqIFdoZW4gcG9zc2libGUsIHByZWZlciB0aGUgQ0hJUF94eHggc3ltYm9scyBiZWxvdyBmb3IgZnV0dXJlLXByb29maW5nLgorICogVGhpcyBpcyBpbnRlbmRlZCBmb3IgY3Jvc3MtY29tcGlsaW5nOyBuYXRpdmUgY29tcGlsYXRpb24gc2hvdWxkCisgKiB1c2UgdGhlIHByZWRlZmluZWQgX190aWxlX2NoaXBfXyBzeW1ib2wuCisgKi8KKyNkZWZpbmUgVElMRV9DSElQIDEKKworLyoqIFNwZWNpZnkgY2hpcCByZXZpc2lvbi4KKyAqIFRoaXMgcHJvdmlkZXMgZm9yIHRoZSBjYXNlIG9mIGEgcmVzcGluIG9mIGEgcGFydGljdWxhciBjaGlwIHR5cGU7CisgKiB0aGUgbm9ybWFsIHZhbHVlIGZvciB0aGlzIHN5bWJvbCBpcyAiMCIuCisgKiBUaGlzIGlzIGludGVuZGVkIGZvciBjcm9zcy1jb21waWxpbmc7IG5hdGl2ZSBjb21waWxhdGlvbiBzaG91bGQKKyAqIHVzZSB0aGUgcHJlZGVmaW5lZCBfX3RpbGVfY2hpcF9yZXZfXyBzeW1ib2wuCisgKi8KKyNkZWZpbmUgVElMRV9DSElQX1JFViAwCisKKy8qKiBUaGUgbmFtZSBvZiB0aGlzIGFyY2hpdGVjdHVyZS4gKi8KKyNkZWZpbmUgQ0hJUF9BUkNIX05BTUUgInRpbGVwcm8iCisKKy8qKiBUaGUgRUxGIGVfbWFjaGluZSB0eXBlIGZvciBiaW5hcmllcyBmb3IgdGhpcyBjaGlwLiAqLworI2RlZmluZSBDSElQX0VMRl9UWVBFKCkgRU1fVElMRVBSTworCisvKiogVGhlIGFsdGVybmF0ZSBFTEYgZV9tYWNoaW5lIHR5cGUgZm9yIGJpbmFyaWVzIGZvciB0aGlzIGNoaXAuICovCisjZGVmaW5lIENISVBfQ09NUEFUX0VMRl9UWVBFKCkgMHgyNTA3CisKKy8qKiBXaGF0IGlzIHRoZSBuYXRpdmUgd29yZCBzaXplIG9mIHRoZSBtYWNoaW5lPyAqLworI2RlZmluZSBDSElQX1dPUkRfU0laRSgpIDMyCisKKy8qKiBIb3cgbWFueSBiaXRzIG9mIGEgdmlydHVhbCBhZGRyZXNzIGFyZSB1c2VkLiBFeHRyYSBiaXRzIG11c3QgYmUKKyAqIHRoZSBzaWduIGV4dGVuc2lvbiBvZiB0aGUgbG93IGJpdHMuCisgKi8KKyNkZWZpbmUgQ0hJUF9WQV9XSURUSCgpIDMyCisKKy8qKiBIb3cgbWFueSBiaXRzIGFyZSBpbiBhIHBoeXNpY2FsIGFkZHJlc3M/ICovCisjZGVmaW5lIENISVBfUEFfV0lEVEgoKSAzNgorCisvKiogU2l6ZSBvZiB0aGUgTDIgY2FjaGUsIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wyX0NBQ0hFX1NJWkUoKSA2NTUzNgorCisvKiogTG9nIHNpemUgb2YgYW4gTDIgY2FjaGUgbGluZSBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMl9MT0dfTElORV9TSVpFKCkgNgorCisvKiogU2l6ZSBvZiBhbiBMMiBjYWNoZSBsaW5lLCBpbiBieXRlcy4gKi8KKyNkZWZpbmUgQ0hJUF9MMl9MSU5FX1NJWkUoKSAoMSA8PCBDSElQX0wyX0xPR19MSU5FX1NJWkUoKSkKKworLyoqIEFzc29jaWF0aXZpdHkgb2YgdGhlIEwyIGNhY2hlLiAqLworI2RlZmluZSBDSElQX0wyX0FTU09DKCkgNAorCisvKiogU2l6ZSBvZiB0aGUgTDEgZGF0YSBjYWNoZSwgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFEX0NBQ0hFX1NJWkUoKSA4MTkyCisKKy8qKiBMb2cgc2l6ZSBvZiBhbiBMMSBkYXRhIGNhY2hlIGxpbmUgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFEX0xPR19MSU5FX1NJWkUoKSA0CisKKy8qKiBTaXplIG9mIGFuIEwxIGRhdGEgY2FjaGUgbGluZSwgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFEX0xJTkVfU0laRSgpICgxIDw8IENISVBfTDFEX0xPR19MSU5FX1NJWkUoKSkKKworLyoqIEFzc29jaWF0aXZpdHkgb2YgdGhlIEwxIGRhdGEgY2FjaGUuICovCisjZGVmaW5lIENISVBfTDFEX0FTU09DKCkgMgorCisvKiogU2l6ZSBvZiB0aGUgTDEgaW5zdHJ1Y3Rpb24gY2FjaGUsIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wxSV9DQUNIRV9TSVpFKCkgMTYzODQKKworLyoqIExvZyBzaXplIG9mIGFuIEwxIGluc3RydWN0aW9uIGNhY2hlIGxpbmUgaW4gYnl0ZXMuICovCisjZGVmaW5lIENISVBfTDFJX0xPR19MSU5FX1NJWkUoKSA2CisKKy8qKiBTaXplIG9mIGFuIEwxIGluc3RydWN0aW9uIGNhY2hlIGxpbmUsIGluIGJ5dGVzLiAqLworI2RlZmluZSBDSElQX0wxSV9MSU5FX1NJWkUoKSAoMSA8PCBDSElQX0wxSV9MT0dfTElORV9TSVpFKCkpCisKKy8qKiBBc3NvY2lhdGl2aXR5IG9mIHRoZSBMMSBpbnN0cnVjdGlvbiBjYWNoZS4gKi8KKyNkZWZpbmUgQ0hJUF9MMUlfQVNTT0MoKSAxCisKKy8qKiBTdHJpZGUgd2l0aCB3aGljaCBmbHVzaCBpbnN0cnVjdGlvbnMgbXVzdCBiZSBpc3N1ZWQuICovCisjZGVmaW5lIENISVBfRkxVU0hfU1RSSURFKCkgQ0hJUF9MMl9MSU5FX1NJWkUoKQorCisvKiogU3RyaWRlIHdpdGggd2hpY2ggaW52IGluc3RydWN0aW9ucyBtdXN0IGJlIGlzc3VlZC4gKi8KKyNkZWZpbmUgQ0hJUF9JTlZfU1RSSURFKCkgQ0hJUF9MMl9MSU5FX1NJWkUoKQorCisvKiogU3RyaWRlIHdpdGggd2hpY2ggZmludiBpbnN0cnVjdGlvbnMgbXVzdCBiZSBpc3N1ZWQuICovCisjZGVmaW5lIENISVBfRklOVl9TVFJJREUoKSBDSElQX0wyX0xJTkVfU0laRSgpCisKKy8qKiBDYW4gdGhlIGxvY2FsIGNhY2hlIGNvaGVyZW50bHkgY2FjaGUgZGF0YSB0aGF0IGlzIGhvbWVkIGVsc2V3aGVyZT8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfQ09IRVJFTlRfTE9DQUxfQ0FDSEUoKSAxCisKKy8qKiBIb3cgbWFueSBzaW11bHRhbmVvdXMgb3V0c3RhbmRpbmcgdmljdGltcyBjYW4gdGhlIEwyIGNhY2hlIGhhdmU/ICovCisjZGVmaW5lIENISVBfTUFYX09VVFNUQU5ESU5HX1ZJQ1RJTVMoKSA0CisKKy8qKiBEb2VzIHRoZSBUTEIgc3VwcG9ydCB0aGUgTkMgYW5kIE5PQUxMT0MgYml0cz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgc3VwcG9ydCBoYXNoLWZvci1ob21lIGNhY2hpbmc/ICovCisjZGVmaW5lIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKSAxCisKKy8qKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2hpcCdzIGhvbWUgbWFwIHRhYmxlcy4gKi8KKyNkZWZpbmUgQ0hJUF9DQk9YX0hPTUVfTUFQX1NJWkUoKSA2NAorCisvKiogRG8gdW5jYWNoZWFibGUgcmVxdWVzdHMgbWlzcyBpbiB0aGUgY2FjaGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgKiB0aGVyZSBpcyBtYXRjaGluZyBkYXRhPyAqLworI2RlZmluZSBDSElQX0hBU19FTkZPUkNFRF9VTkNBQ0hFQUJMRV9SRVFVRVNUUygpIDEKKworLyoqIERvZXMgdGhlIG1mIGluc3RydWN0aW9uIHdhaXQgZm9yIHZpY3RpbXM/ICovCisjZGVmaW5lIENISVBfSEFTX01GX1dBSVRTX0ZPUl9WSUNUSU1TKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIGFuICJpbnYiIGluc3RydWN0aW9uIHRoYXQgZG9lc24ndCBhbHNvIGZsdXNoPyAqLworI2RlZmluZSBDSElQX0hBU19JTlYoKSAxCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgYSAid2g2NCIgaW5zdHJ1Y3Rpb24/ICovCisjZGVmaW5lIENISVBfSEFTX1dINjQoKSAxCisKKy8qKiBEb2VzIHRoaXMgY2hpcCBoYXZlIGEgJ2R3b3JkX2FsaWduJyBpbnN0cnVjdGlvbj8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfRFdPUkRfQUxJR04oKSAxCisKKy8qKiBOdW1iZXIgb2YgcGVyZm9ybWFuY2UgY291bnRlcnMuICovCisjZGVmaW5lIENISVBfUEVSRk9STUFOQ0VfQ09VTlRFUlMoKSA0CisKKy8qKiBEb2VzIHRoaXMgY2hpcCBoYXZlIGF1eGlsaWFyeSBwZXJmb3JtYW5jZSBjb3VudGVycz8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfQVVYX1BFUkZfQ09VTlRFUlMoKSAxCisKKy8qKiBJcyB0aGUgQ0JPWF9NU1IxIFNQUiBzdXBwb3J0ZWQ/ICovCisjZGVmaW5lIENISVBfSEFTX0NCT1hfTVNSMSgpIDEKKworLyoqIElzIHRoZSBUSUxFX1JURl9IV00gU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVElMRV9SVEZfSFdNKCkgMQorCisvKiogSXMgdGhlIFRJTEVfV1JJVEVfUEVORElORyBTUFIgc3VwcG9ydGVkPyAqLworI2RlZmluZSBDSElQX0hBU19USUxFX1dSSVRFX1BFTkRJTkcoKSAxCisKKy8qKiBJcyB0aGUgUFJPQ19TVEFUVVMgU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfUFJPQ19TVEFUVVNfU1BSKCkgMQorCisvKiogTG9nIG9mIHRoZSBudW1iZXIgb2YgbXNoaW1zIHdlIGhhdmUuICovCisjZGVmaW5lIENISVBfTE9HX05VTV9NU0hJTVMoKSAyCisKKy8qKiBBcmUgdGhlIGJhc2VzIG9mIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGFyZWFzIGZpeGVkPyAqLworI2RlZmluZSBDSElQX0hBU19GSVhFRF9JTlRWRUNfQkFTRSgpIDEKKworLyoqIEFyZSB0aGUgaW50ZXJydXB0IG1hc2tzIHNwbGl0IHVwIGludG8gMiBTUFJzPyAqLworI2RlZmluZSBDSElQX0hBU19TUExJVF9JTlRSX01BU0soKSAxCisKKy8qKiBJcyB0aGUgY3ljbGUgY291bnQgc3BsaXQgdXAgaW50byAyIFNQUnM/ICovCisjZGVmaW5lIENISVBfSEFTX1NQTElUX0NZQ0xFKCkgMQorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIGEgc3RhdGljIG5ldHdvcms/ICovCisjZGVmaW5lIENISVBfSEFTX1NOKCkgMQorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIGEgc3RhdGljIG5ldHdvcmsgcHJvY2Vzc29yPyAqLworI2RlZmluZSBDSElQX0hBU19TTl9QUk9DKCkgMAorCisvKiogU2l6ZSBvZiB0aGUgTDEgc3RhdGljIG5ldHdvcmsgcHJvY2Vzc29yIGluc3RydWN0aW9uIGNhY2hlLCBpbiBieXRlcy4gKi8KKy8qICNkZWZpbmUgQ0hJUF9MMVNOSV9DQUNIRV9TSVpFKCkgLS0gZG9lcyBub3QgYXBwbHkgdG8gY2hpcCAxICovCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgRE1BIHN1cHBvcnQgaW4gZWFjaCB0aWxlPyAqLworI2RlZmluZSBDSElQX0hBU19USUxFX0RNQSgpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSB0aGUgc2Vjb25kIHJldmlzaW9uIG9mIHRoZSBkaXJlY3RseSBhY2Nlc3NpYmxlCisgKiAgZHluYW1pYyBuZXR3b3Jrcz8gIFRoaXMgZW5jYXBzdWxhdGVzIGEgbnVtYmVyIG9mIGNoYXJhY3RlcmlzdGljcywKKyAqICBpbmNsdWRpbmcgdGhlIGFic2VuY2Ugb2YgdGhlIGNhdGNoLWFsbCwgdGhlIGFic2VuY2Ugb2YgaW5saW5lIG1lc3NhZ2UKKyAqICB0YWdzLCB0aGUgYWJzZW5jZSBvZiBzdXBwb3J0IGZvciBuZXR3b3JrIGNvbnRleHQtc3dpdGNoaW5nLCBhbmQgc28gb24uCisgKi8KKyNkZWZpbmUgQ0hJUF9IQVNfUkVWMV9YRE4oKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgY21wZXhjaCBhbmQgc2ltaWxhciAoZmV0Y2hhZGQsIGV4Y2gsIGV0Yy4pPyAqLworI2RlZmluZSBDSElQX0hBU19DTVBFWENIKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIG1lbW9yeS1tYXBwZWQgSS9PIHN1cHBvcnQ/ICovCisjZGVmaW5lIENISVBfSEFTX01NSU8oKSAwCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgcG9zdC1jb21wbGV0aW9uIGludGVycnVwdHM/ICovCisjZGVmaW5lIENISVBfSEFTX1BPU1RfQ09NUExFVElPTl9JTlRFUlJVUFRTKCkgMAorCisvKiogRG9lcyB0aGUgY2hpcCBoYXZlIG5hdGl2ZSBzaW5nbGUgc3RlcCBzdXBwb3J0PyAqLworI2RlZmluZSBDSElQX0hBU19TSU5HTEVfU1RFUCgpIDAKKworI2lmbmRlZiBfX09QRU5fU09VUkNFX18gIC8qIGZlYXR1cmVzIG9ubHkgcmVsZXZhbnQgdG8gaHlwZXJ2aXNvci1sZXZlbCBjb2RlICovCisKKy8qKiBIb3cgbWFueSBlbnRyaWVzIGFyZSBwcmVzZW50IGluIHRoZSBpbnN0cnVjdGlvbiBUTEI/ICovCisjZGVmaW5lIENISVBfSVRMQl9FTlRSSUVTKCkgMTYKKworLyoqIEhvdyBtYW55IGVudHJpZXMgYXJlIHByZXNlbnQgaW4gdGhlIGRhdGEgVExCPyAqLworI2RlZmluZSBDSElQX0RUTEJfRU5UUklFUygpIDE2CisKKy8qKiBIb3cgbWFueSBNQUYgZW50cmllcyBkb2VzIHRoZSBYQVVJIHNoaW0gaGF2ZT8gKi8KKyNkZWZpbmUgQ0hJUF9YQVVJX01BRl9FTlRSSUVTKCkgMzIKKworLyoqIERvZXMgdGhlIG1lbW9yeSBzaGltIGhhdmUgYSBzb3VyY2UtaWQgdGFibGU/ICovCisjZGVmaW5lIENISVBfSEFTX01TSElNX1NSQ0lEX1RBQkxFKCkgMAorCisvKiogRG9lcyB0aGUgTDEgaW5zdHJ1Y3Rpb24gY2FjaGUgY2xlYXIgb24gcmVzZXQ/ICovCisjZGVmaW5lIENISVBfSEFTX0wxSV9DTEVBUl9PTl9SRVNFVCgpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgY29tZSBvdXQgb2YgcmVzZXQgd2l0aCB2YWxpZCBjb29yZGluYXRlcyBvbiBhbGwgdGlsZXM/CisgKiBOb3RlIHRoYXQgaWYgZGVmaW5lZCwgdGhpcyBhbHNvIGltcGxpZXMgdGhhdCB0aGUgdXBwZXIgbGVmdCBpcyAxLDEuCisgKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVkFMSURfVElMRV9DT09SRF9SRVNFVCgpIDEKKworLyoqIERvZXMgdGhlIGNoaXAgaGF2ZSB1bmlmaWVkIHBhY2tldCBmb3JtYXRzPyAqLworI2RlZmluZSBDSElQX0hBU19VTklGSUVEX1BBQ0tFVF9GT1JNQVRTKCkgMQorCisvKiogRG9lcyB0aGUgY2hpcCBzdXBwb3J0IHdyaXRlIHJlb3JkZXJpbmc/ICovCisjZGVmaW5lIENISVBfSEFTX1dSSVRFX1JFT1JERVJJTkcoKSAxCisKKy8qKiBEb2VzIHRoZSBjaGlwIHN1cHBvcnQgWS1YIHJvdXRpbmcgYXMgd2VsbCBhcyBYLVk/ICovCisjZGVmaW5lIENISVBfSEFTX1lfWF9ST1VUSU5HKCkgMQorCisvKiogSXMgSU5UQ1RSTF8zIG1hbmFnZWQgd2l0aCB0aGUgY29ycmVjdCBNUEw/ICovCisjZGVmaW5lIENISVBfSEFTX0lOVENUUkxfM19TVEFUVVNfRklYKCkgMQorCisvKiogSXMgaXQgcG9zc2libGUgdG8gY29uZmlndXJlIHRoZSBjaGlwIHRvIGJlIGJpZy1lbmRpYW4/ICovCisjZGVmaW5lIENISVBfSEFTX0JJR19FTkRJQU5fQ09ORklHKCkgMQorCisvKiogSXMgdGhlIENBQ0hFX1JFRF9XQVlfT1ZFUlJJRERFTiBTUFIgc3VwcG9ydGVkPyAqLworI2RlZmluZSBDSElQX0hBU19DQUNIRV9SRURfV0FZX09WRVJSSURERU4oKSAxCisKKy8qKiBJcyB0aGUgRElBR19UUkFDRV9XQVkgU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfRElBR19UUkFDRV9XQVkoKSAxCisKKy8qKiBJcyB0aGUgTUVNX1NUUklQRV9DT05GSUcgU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfTUVNX1NUUklQRV9DT05GSUcoKSAxCisKKy8qKiBBcmUgdGhlIFRMQl9QRVJGIFNQUnMgc3VwcG9ydGVkPyAqLworI2RlZmluZSBDSElQX0hBU19UTEJfUEVSRigpIDEKKworLyoqIElzIHRoZSBWRE5fU05PT1BfU0hJTV9DVEwgU1BSIHN1cHBvcnRlZD8gKi8KKyNkZWZpbmUgQ0hJUF9IQVNfVkROX1NOT09QX1NISU1fQ1RMKCkgMQorCisvKiogRG9lcyB0aGUgY2hpcCBzdXBwb3J0IHJldjEgRE1BIHBhY2tldHM/ICovCisjZGVmaW5lIENISVBfSEFTX1JFVjFfRE1BX1BBQ0tFVFMoKSAxCisKKy8qKiBEb2VzIHRoZSBjaGlwIGhhdmUgYW4gSVBJIHNoaW0/ICovCisjZGVmaW5lIENISVBfSEFTX0lQSSgpIDAKKworI2VuZGlmIC8qICFfX09QRU5fU09VUkNFX18gKi8KKyNlbmRpZiAvKiBfX0FSQ0hfQ0hJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaWNhY2hlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ljYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODdjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ljYWNoZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICovCisKKy8qKgorICogQGZpbGUKKyAqCisgKiBTdXBwb3J0IGZvciBpbnZhbGlkYXRpbmcgYnl0ZXMgaW4gdGhlIGluc3RydWN0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfSUNBQ0hFX0hfXworI2RlZmluZSBfX0FSQ0hfSUNBQ0hFX0hfXworCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKworLyoqCisgKiBJbnZhbGlkYXRlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBmb3IgdGhlIGdpdmVuIHJhbmdlIG9mIG1lbW9yeS4KKyAqCisgKiBAcGFyYW0gYWRkciBUaGUgc3RhcnQgb2YgbWVtb3J5IHRvIGJlIGludmFsaWRhdGVkLgorICogQHBhcmFtIHNpemUgVGhlIG51bWJlciBvZiBieXRlcyB0byBiZSBpbnZhbGlkYXRlZC4KKyAqIEBwYXJhbSBwYWdlX3NpemUgVGhlIHN5c3RlbSdzIHBhZ2Ugc2l6ZSwgdHlwaWNhbGx5IHRoZSBQQUdFX1NJWkUgY29uc3RhbnQKKyAqIGluIHN5cy9wYWdlLmguICBUaGlzIHZhbHVlIG11c3QgYmUgYSBwb3dlciBvZiB0d28gbm8gbGFyZ2VyCisgKiB0aGFuIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGNvZGUgdG8gYmUgaW52YWxpZGF0ZWQuIElmIHRoZSB2YWx1ZQorICogaXMgc21hbGxlciB0aGFuIHRoZSBhY3R1YWwgcGFnZSBzaXplLCB0aGlzIGZ1bmN0aW9uIHdpbGwgc3RpbGwKKyAqIHdvcmssIGJ1dCBtYXkgcnVuIHNsb3dlciB0aGFuIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK2ludmFsaWRhdGVfaWNhY2hlKGNvbnN0IHZvaWQqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplKQoreworICBjb25zdCB1bnNpZ25lZCBsb25nIGNhY2hlX3dheV9zaXplID0KKyAgICBDSElQX0wxSV9DQUNIRV9TSVpFKCkgLyBDSElQX0wxSV9BU1NPQygpOworICB1bnNpZ25lZCBsb25nIG1heF91c2VmdWxfc2l6ZTsKKyAgY29uc3QgY2hhciogc3RhcnQsICplbmQ7CisgIGxvbmcgbnVtX3Bhc3NlczsKKworICBpZiAoX19idWlsdGluX2V4cGVjdChzaXplID09IDAsIDApKQorICAgIHJldHVybjsKKworI2lmZGVmIF9fdGlsZWd4X18KKyAgLyogTGltaXQgdGhlIG51bWJlciBvZiBieXRlcyB2aXNpdGVkIHRvIGF2b2lkIHJlZHVuZGFudCBpdGVyYXRpb25zLiAqLworICBtYXhfdXNlZnVsX3NpemUgPSAocGFnZV9zaXplIDwgY2FjaGVfd2F5X3NpemUpID8gcGFnZV9zaXplIDogY2FjaGVfd2F5X3NpemU7CisKKyAgLyogTm8gUEEgYWxpYXNpbmcgaXMgcG9zc2libGUsIHNvIG9uZSBwYXNzIGFsd2F5cyBzdWZmaWNlcy4gKi8KKyAgbnVtX3Bhc3NlcyA9IDE7CisjZWxzZQorICAvKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHZpc2l0ZWQgdG8gYXZvaWQgcmVkdW5kYW50IGl0ZXJhdGlvbnMuICovCisgIG1heF91c2VmdWxfc2l6ZSA9IGNhY2hlX3dheV9zaXplOworCisgIC8qCisgICAqIENvbXB1dGUgaG93IG1hbnkgcGFzc2VzIHdlIG5lZWQgKHdlJ2xsIHRyZWF0IDAgYXMgaWYgaXQgd2VyZSAxKS4KKyAgICogVGhpcyB3b3JrcyBiZWNhdXNlIHdlIGtub3cgdGhlIHBhZ2Ugc2l6ZSBpcyBhIHBvd2VyIG9mIHR3by4KKyAgICovCisgIG51bV9wYXNzZXMgPSBjYWNoZV93YXlfc2l6ZSA+PiBfX2J1aWx0aW5fY3R6bChwYWdlX3NpemUpOworI2VuZGlmCisKKyAgaWYgKF9fYnVpbHRpbl9leHBlY3Qoc2l6ZSA+IG1heF91c2VmdWxfc2l6ZSwgMCkpCisgICAgc2l6ZSA9IG1heF91c2VmdWxfc2l6ZTsKKworICAvKiBMb2NhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IGJ5dGVzIHRvIGJlIGludmFsaWRhdGVkLiAqLworICBzdGFydCA9IChjb25zdCBjaGFyICopKCh1bnNpZ25lZCBsb25nKWFkZHIgJiAtQ0hJUF9MMUlfTElORV9TSVpFKCkpOworICBlbmQgPSAoY29uc3QgY2hhciopYWRkciArIHNpemUgLSAxOworCisgIF9faW5zbl9tZigpOworCisgIGRvCisgIHsKKyAgICBjb25zdCBjaGFyKiBwOworCisgICAgZm9yIChwID0gc3RhcnQ7IHAgPD0gZW5kOyBwICs9IENISVBfTDFJX0xJTkVfU0laRSgpKQorICAgICAgX19pbnNuX2ljb2gocCk7CisKKyAgICBzdGFydCArPSBwYWdlX3NpemU7CisgICAgZW5kICs9IHBhZ2Vfc2l6ZTsKKyAgfQorICB3aGlsZSAoLS1udW1fcGFzc2VzID4gMCk7CisKKyAgX19pbnNuX2RyYWluKCk7Cit9CisKKworI2VuZGlmIC8qIF9fQVJDSF9JQ0FDSEVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ludGVycnVwdHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaW50ZXJydXB0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjhmMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ludGVycnVwdHMuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZmRlZiBfX3RpbGVneF9fCisjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFyY2gvaW50ZXJydXB0c18zMi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ludGVycnVwdHNfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvaW50ZXJydXB0c18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGJmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hcmNoL2ludGVycnVwdHNfMzIuaApAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9JTlRFUlJVUFRTX0hfXworI2RlZmluZSBfX0FSQ0hfSU5URVJSVVBUU19IX18KKworLyoqIE1hc2sgZm9yIGFuIGludGVycnVwdC4gKi8KKyNpZmRlZiBfX0FTU0VNQkxFUl9fCisvKiBOb3RlOiBtdXN0IGhhbmRsZSBicmVha2luZyBpbnRlcnJ1cHRzIGludG8gaGlnaCBhbmQgbG93IHdvcmRzIG1hbnVhbGx5LiAqLworI2RlZmluZSBJTlRfTUFTSyhpbnRubykgKDEgPDwgKGludG5vKSkKKyNlbHNlCisjZGVmaW5lIElOVF9NQVNLKGludG5vKSAoMVVMTCA8PCAoaW50bm8pKQorI2VuZGlmCisKKworLyoqIFdoZXJlIGEgZ2l2ZW4gaW50ZXJydXB0IGV4ZWN1dGVzICovCisjZGVmaW5lIElOVEVSUlVQVF9WRUNUT1IoaSwgcGwpICgweEZDMDAwMDAwICsgKChwbCkgPDwgMjQpICsgKChpKSA8PCA4KSkKKworLyoqIFdoZXJlIHRvIHN0b3JlIGEgdmVjdG9yIGZvciBhIGdpdmVuIGludGVycnVwdC4gKi8KKyNkZWZpbmUgVVNFUl9JTlRFUlJVUFRfVkVDVE9SKGkpIElOVEVSUlVQVF9WRUNUT1IoaSwgMCkKKworLyoqIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdXNlci1sZXZlbCBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBVU0VSX0lOVEVSUlVQVF9WRUNUT1JfQkFTRSBJTlRFUlJVUFRfVkVDVE9SKDAsIDApCisKKworLyoqIEFkZGl0aW9uYWwgc3ludGhldGljIGludGVycnVwdC4gKi8KKyNkZWZpbmUgSU5UX0JSRUFLUE9JTlQgKDYzKQorCisjZGVmaW5lIElOVF9JVExCX01JU1MgICAgMAorI2RlZmluZSBJTlRfTUVNX0VSUk9SICAgIDEKKyNkZWZpbmUgSU5UX0lMTCAgICAyCisjZGVmaW5lIElOVF9HUFYgICAgMworI2RlZmluZSBJTlRfU05fQUNDRVNTICAgIDQKKyNkZWZpbmUgSU5UX0lETl9BQ0NFU1MgICAgNQorI2RlZmluZSBJTlRfVUROX0FDQ0VTUyAgICA2CisjZGVmaW5lIElOVF9JRE5fUkVGSUxMICAgIDcKKyNkZWZpbmUgSU5UX1VETl9SRUZJTEwgICAgOAorI2RlZmluZSBJTlRfSUROX0NPTVBMRVRFICAgIDkKKyNkZWZpbmUgSU5UX1VETl9DT01QTEVURSAgIDEwCisjZGVmaW5lIElOVF9TV0lOVF8zICAgMTEKKyNkZWZpbmUgSU5UX1NXSU5UXzIgICAxMgorI2RlZmluZSBJTlRfU1dJTlRfMSAgIDEzCisjZGVmaW5lIElOVF9TV0lOVF8wICAgMTQKKyNkZWZpbmUgSU5UX1VOQUxJR05fREFUQSAgIDE1CisjZGVmaW5lIElOVF9EVExCX01JU1MgICAxNgorI2RlZmluZSBJTlRfRFRMQl9BQ0NFU1MgICAxNworI2RlZmluZSBJTlRfRE1BVExCX01JU1MgICAxOAorI2RlZmluZSBJTlRfRE1BVExCX0FDQ0VTUyAgIDE5CisjZGVmaW5lIElOVF9TTklUTEJfTUlTUyAgIDIwCisjZGVmaW5lIElOVF9TTl9OT1RJRlkgICAyMQorI2RlZmluZSBJTlRfU05fRklSRVdBTEwgICAyMgorI2RlZmluZSBJTlRfSUROX0ZJUkVXQUxMICAgMjMKKyNkZWZpbmUgSU5UX1VETl9GSVJFV0FMTCAgIDI0CisjZGVmaW5lIElOVF9USUxFX1RJTUVSICAgMjUKKyNkZWZpbmUgSU5UX0lETl9USU1FUiAgIDI2CisjZGVmaW5lIElOVF9VRE5fVElNRVIgICAyNworI2RlZmluZSBJTlRfRE1BX05PVElGWSAgIDI4CisjZGVmaW5lIElOVF9JRE5fQ0EgICAyOQorI2RlZmluZSBJTlRfVUROX0NBICAgMzAKKyNkZWZpbmUgSU5UX0lETl9BVkFJTCAgIDMxCisjZGVmaW5lIElOVF9VRE5fQVZBSUwgICAzMgorI2RlZmluZSBJTlRfUEVSRl9DT1VOVCAgIDMzCisjZGVmaW5lIElOVF9JTlRDVFJMXzMgICAzNAorI2RlZmluZSBJTlRfSU5UQ1RSTF8yICAgMzUKKyNkZWZpbmUgSU5UX0lOVENUUkxfMSAgIDM2CisjZGVmaW5lIElOVF9JTlRDVFJMXzAgICAzNworI2RlZmluZSBJTlRfQk9PVF9BQ0NFU1MgICAzOAorI2RlZmluZSBJTlRfV09STERfQUNDRVNTICAgMzkKKyNkZWZpbmUgSU5UX0lfQVNJRCAgIDQwCisjZGVmaW5lIElOVF9EX0FTSUQgICA0MQorI2RlZmluZSBJTlRfRE1BX0FTSUQgICA0MgorI2RlZmluZSBJTlRfU05JX0FTSUQgICA0MworI2RlZmluZSBJTlRfRE1BX0NQTCAgIDQ0CisjZGVmaW5lIElOVF9TTl9DUEwgICA0NQorI2RlZmluZSBJTlRfRE9VQkxFX0ZBVUxUICAgNDYKKyNkZWZpbmUgSU5UX1NOX1NUQVRJQ19BQ0NFU1MgICA0NworI2RlZmluZSBJTlRfQVVYX1BFUkZfQ09VTlQgICA0OAorCisjZGVmaW5lIE5VTV9JTlRFUlJVUFRTIDQ5CisKKyNkZWZpbmUgUVVFVUVEX0lOVEVSUlVQVFMgKCBcCisgICAgSU5UX01BU0soSU5UX01FTV9FUlJPUikgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BVExCX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1NOSVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fTk9USUZZKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9USUxFX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX05PVElGWSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1BFUkZfQ09VTlQpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzMpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzIpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzEpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzApIHwgXAorICAgIElOVF9NQVNLKElOVF9CT09UX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1dPUkxEX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0lfQVNJRCkgfCBcCisgICAgSU5UX01BU0soSU5UX0RfQVNJRCkgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQV9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05JX0FTSUQpIHwgXAorICAgIElOVF9NQVNLKElOVF9ETUFfQ1BMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fQ1BMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE9VQkxFX0ZBVUxUKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfQVVYX1BFUkZfQ09VTlQpIHwgXAorICAgIDApCisjZGVmaW5lIE5PTlFVRVVFRF9JTlRFUlJVUFRTICggXAorICAgIElOVF9NQVNLKElOVF9JVExCX01JU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9HUFYpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9SRUZJTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fUkVGSUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX0NPTVBMRVRFKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX0NPTVBMRVRFKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU1dJTlRfMykgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzIpIHwgXAorICAgIElOVF9NQVNLKElOVF9TV0lOVF8xKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU1dJTlRfMCkgfCBcCisgICAgSU5UX01BU0soSU5UX1VOQUxJR05fREFUQSkgfCBcCisgICAgSU5UX01BU0soSU5UX0RUTEJfTUlTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0RUTEJfQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fU1RBVElDX0FDQ0VTUykgfCBcCisgICAgMCkKKyNkZWZpbmUgQ1JJVElDQUxfTUFTS0VEX0lOVEVSUlVQVFMgKCBcCisgICAgSU5UX01BU0soSU5UX01FTV9FUlJPUikgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BVExCX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1NOSVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fTk9USUZZKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9USUxFX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX05PVElGWSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1BFUkZfQ09VTlQpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzMpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzIpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzEpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzApIHwgXAorICAgIElOVF9NQVNLKElOVF9BVVhfUEVSRl9DT1VOVCkgfCBcCisgICAgMCkKKyNkZWZpbmUgQ1JJVElDQUxfVU5NQVNLRURfSU5URVJSVVBUUyAoIFwKKyAgICBJTlRfTUFTSyhJTlRfSVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfR1BWKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fUkVGSUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX1JFRklMTCkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9DT01QTEVURSkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9DT01QTEVURSkgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzMpIHwgXAorICAgIElOVF9NQVNLKElOVF9TV0lOVF8yKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU1dJTlRfMSkgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzApIHwgXAorICAgIElOVF9NQVNLKElOVF9VTkFMSUdOX0RBVEEpIHwgXAorICAgIElOVF9NQVNLKElOVF9EVExCX01JU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9EVExCX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0JPT1RfQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfV09STERfQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSV9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRF9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX0FTSUQpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTklfQVNJRCkgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQV9DUEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9DUEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9ET1VCTEVfRkFVTFQpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9TVEFUSUNfQUNDRVNTKSB8IFwKKyAgICAwKQorI2RlZmluZSBNQVNLQUJMRV9JTlRFUlJVUFRTICggXAorICAgIElOVF9NQVNLKElOVF9NRU1fRVJST1IpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fUkVGSUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX1JFRklMTCkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9DT01QTEVURSkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9DT01QTEVURSkgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BVExCX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1NOSVRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fTk9USUZZKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU05fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fRklSRVdBTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9USUxFX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX1RJTUVSKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX05PVElGWSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9DQSkgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9BVkFJTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1BFUkZfQ09VTlQpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzMpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzIpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzEpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTlRDVFJMXzApIHwgXAorICAgIElOVF9NQVNLKElOVF9BVVhfUEVSRl9DT1VOVCkgfCBcCisgICAgMCkKKyNkZWZpbmUgVU5NQVNLQUJMRV9JTlRFUlJVUFRTICggXAorICAgIElOVF9NQVNLKElOVF9JVExCX01JU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9HUFYpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzMpIHwgXAorICAgIElOVF9NQVNLKElOVF9TV0lOVF8yKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU1dJTlRfMSkgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzApIHwgXAorICAgIElOVF9NQVNLKElOVF9VTkFMSUdOX0RBVEEpIHwgXAorICAgIElOVF9NQVNLKElOVF9EVExCX01JU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9EVExCX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0JPT1RfQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfV09STERfQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSV9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRF9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX0FTSUQpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTklfQVNJRCkgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQV9DUEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9DUEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9ET1VCTEVfRkFVTFQpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9TVEFUSUNfQUNDRVNTKSB8IFwKKyAgICAwKQorI2RlZmluZSBTWU5DX0lOVEVSUlVQVFMgKCBcCisgICAgSU5UX01BU0soSU5UX0lUTEJfTUlTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0lMTCkgfCBcCisgICAgSU5UX01BU0soSU5UX0dQVikgfCBcCisgICAgSU5UX01BU0soSU5UX1NOX0FDQ0VTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fQUNDRVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX1JFRklMTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9SRUZJTEwpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fQ09NUExFVEUpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fQ09NUExFVEUpIHwgXAorICAgIElOVF9NQVNLKElOVF9TV0lOVF8zKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfU1dJTlRfMikgfCBcCisgICAgSU5UX01BU0soSU5UX1NXSU5UXzEpIHwgXAorICAgIElOVF9NQVNLKElOVF9TV0lOVF8wKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVU5BTElHTl9EQVRBKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRFRMQl9NSVNTKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRFRMQl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTl9TVEFUSUNfQUNDRVNTKSB8IFwKKyAgICAwKQorI2RlZmluZSBOT05fU1lOQ19JTlRFUlJVUFRTICggXAorICAgIElOVF9NQVNLKElOVF9NRU1fRVJST1IpIHwgXAorICAgIElOVF9NQVNLKElOVF9ETUFUTEJfTUlTUykgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQVRMQl9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9TTklUTEJfTUlTUykgfCBcCisgICAgSU5UX01BU0soSU5UX1NOX05PVElGWSkgfCBcCisgICAgSU5UX01BU0soSU5UX1NOX0ZJUkVXQUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSUROX0ZJUkVXQUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVUROX0ZJUkVXQUxMKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfVElMRV9USU1FUikgfCBcCisgICAgSU5UX01BU0soSU5UX0lETl9USU1FUikgfCBcCisgICAgSU5UX01BU0soSU5UX1VETl9USU1FUikgfCBcCisgICAgSU5UX01BU0soSU5UX0RNQV9OT1RJRlkpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fQ0EpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fQ0EpIHwgXAorICAgIElOVF9NQVNLKElOVF9JRE5fQVZBSUwpIHwgXAorICAgIElOVF9NQVNLKElOVF9VRE5fQVZBSUwpIHwgXAorICAgIElOVF9NQVNLKElOVF9QRVJGX0NPVU5UKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSU5UQ1RSTF8zKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSU5UQ1RSTF8yKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSU5UQ1RSTF8xKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfSU5UQ1RSTF8wKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfQk9PVF9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9XT1JMRF9BQ0NFU1MpIHwgXAorICAgIElOVF9NQVNLKElOVF9JX0FTSUQpIHwgXAorICAgIElOVF9NQVNLKElOVF9EX0FTSUQpIHwgXAorICAgIElOVF9NQVNLKElOVF9ETUFfQVNJRCkgfCBcCisgICAgSU5UX01BU0soSU5UX1NOSV9BU0lEKSB8IFwKKyAgICBJTlRfTUFTSyhJTlRfRE1BX0NQTCkgfCBcCisgICAgSU5UX01BU0soSU5UX1NOX0NQTCkgfCBcCisgICAgSU5UX01BU0soSU5UX0RPVUJMRV9GQVVMVCkgfCBcCisgICAgSU5UX01BU0soSU5UX0FVWF9QRVJGX0NPVU5UKSB8IFwKKyAgICAwKQorI2VuZGlmIC8qICFfX0FSQ0hfSU5URVJSVVBUU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc2ltX2RlZi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zaW1fZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxOGZiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc2ltX2RlZi5oCkBAIC0wLDAgKzEsNTEyIEBACisvLyBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisvLyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisvLyAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisvLworLy8gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisvLyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisvLyAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorLy8gICBtb3JlIGRldGFpbHMuCisKKy8vISBAZmlsZQorLy8hCisvLyEgU29tZSBsb3ctbGV2ZWwgc2ltdWxhdG9yIGRlZmluaXRpb25zLgorLy8hCisKKyNpZm5kZWYgX19BUkNIX1NJTV9ERUZfSF9fCisjZGVmaW5lIF9fQVJDSF9TSU1fREVGX0hfXworCisKKy8vISBJbnRlcm5hbDogdGhlIGxvdyBiaXRzIG9mIHRoZSBTSU1fQ09OVFJPTF8qIFNQUiB2YWx1ZXMgc3BlY2lmeQorLy8hIHRoZSBvcGVyYXRpb24gdG8gcGVyZm9ybSwgYW5kIHRoZSByZW1haW5pbmcgYml0cyBhcmUKKy8vISBhbiBvcGVyYXRpb24tc3BlY2lmaWMgcGFyYW1ldGVyIChvZnRlbiB1bnVzZWQpLgorLy8hCisjZGVmaW5lIF9TSU1fQ09OVFJPTF9PUEVSQVRPUl9CSVRTIDgKKworCisvLz09IFZhbHVlcyB3aGljaCBjYW4gYmUgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wuCisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgc3RvcHMgcHJvZmlsaW5nLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1BST0ZJTEVSX0RJU0FCTEUgMAorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIHN0YXJ0cyBwcm9maWxpbmcuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfUFJPRklMRVJfRU5BQkxFIDEKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjbGVhcnMgcHJvZmlsaW5nIGNvdW50ZXJzLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1BST0ZJTEVSX0NMRUFSIDIKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjaGVja3BvaW50cyB0aGUgc2ltdWxhdG9yLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX0NIRUNLUE9JTlQgMworCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBtYXNrIChzaGlmdGVkIGJ5IDgpLAorLy8hIHNldHMgdGhlIHRyYWNpbmcgbWFzayB0byB0aGUgZ2l2ZW4gbWFzay4gU2VlICJzaW1fc2V0X3RyYWNpbmcoKSIuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0VUX1RSQUNJTkcgNAorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBtYXNrIChzaGlmdGVkIGJ5IDgpLAorLy8hIGR1bXBzIHRoZSByZXF1ZXN0ZWQgaXRlbXMgb2YgbWFjaGluZSBzdGF0ZSB0byB0aGUgbG9nLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX0RVTVAgNQorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNsZWFycyBjaGlwLWxldmVsIHByb2ZpbGluZyBjb3VudGVycy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9QUk9GSUxFUl9DSElQX0NMRUFSIDYKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBkaXNhYmxlcyBjaGlwLWxldmVsIHByb2ZpbGluZy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9QUk9GSUxFUl9DSElQX0RJU0FCTEUgNworCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGVuYWJsZXMgY2hpcC1sZXZlbCBwcm9maWxpbmcuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfUFJPRklMRVJfQ0hJUF9FTkFCTEUgOAorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGVuYWJsZXMgY2hpcC1sZXZlbCBmdW5jdGlvbmFsIG1vZGUKKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9FTkFCTEVfRlVOQ1RJT05BTCA5CisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgZGlzYWJsZXMgY2hpcC1sZXZlbCBmdW5jdGlvbmFsIG1vZGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfRElTQUJMRV9GVU5DVElPTkFMIDEwCisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgZW5hYmxlcyBjaGlwLWxldmVsIGZ1bmN0aW9uYWwgbW9kZS4KKy8vISBBbGwgdGlsZXMgbXVzdCBwZXJmb3JtIHRoaXMgd3JpdGUgZm9yIGZ1bmN0aW9uYWwgbW9kZSB0byBiZSBlbmFibGVkLgorLy8hIElnbm9yZWQgaW4gbmFrZWQgYm9vdCBtb2RlIHVubGVzcyAtLWZ1bmN0aW9uYWwgaXMgc3BlY2lmaWVkLgorLy8hIFdBUk5JTkc6IE9ubHkgdGhlIGh5cGVydmlzb3Igc3RhcnR1cCBjb2RlIHNob3VsZCB1c2UgdGhpcyEKKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9FTkFCTEVfRlVOQ1RJT05BTF9CQVJSSUVSIDExCisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgY29tYmluZWQgd2l0aCBhIGNoYXJhY3RlciAoc2hpZnRlZCBieSA4KSwKKy8vISB3cml0ZXMgYSBzdHJpbmcgZGlyZWN0bHkgdG8gdGhlIHNpbXVsYXRvciBvdXRwdXQuICBXcml0dGVuIHRvIG9uY2UgZm9yCisvLyEgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZywgcGx1cyBhIGZpbmFsIE5VTC4gIEluc3RlYWQgb2YgTlVMLAorLy8hIHlvdSBjYW4gYWxzbyB1c2UgIlNJTV9QVVRDX0ZMVVNIX1NUUklORyIgb3IgIlNJTV9QVVRDX0ZMVVNIX0JJTkFSWSIuCisvLyEKKy8vIElTU1VFOiBEb2N1bWVudCB0aGUgbWVhbmluZyBvZiAibmV3bGluZSIsIGFuZCB0aGUgaGFuZGxpbmcgb2YgTlVMLgorLy8KKyNkZWZpbmUgU0lNX0NPTlRST0xfUFVUQyAxMgorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNsZWFycyB0aGUgLS1ncmluZC1jb2hlcmVuY2Ugc3RhdGUgZm9yCisvLyEgdGhpcyBjb3JlLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJlZm9yZSBhIGxvb3AgdGhhdCB3aWxsCisvLyEgaW52YWxpZGF0ZSB0aGUgY2FjaGUgYnkgbG9hZGluZyBuZXcgZGF0YSBhbmQgZXZpY3RpbmcgYWxsIGN1cnJlbnQgZGF0YS4KKy8vISBHZW5lcmFsbHkgc3BlYWtpbmcsIHRoaXMgQVBJIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgc3lzdGVtIGNvZGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfR1JJTkRFUl9DTEVBUiAxMworCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIHNodXRzIGRvd24gdGhlIHNpbXVsYXRvci4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9TSFVURE9XTiAxNAorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBwaWQgKHNoaWZ0ZWQgYnkgOCksCisvLyEgaW5kaWNhdGVzIHRoYXQgYSBmb3JrIHN5c2NhbGwganVzdCBjcmVhdGVkIHRoZSBnaXZlbiBwcm9jZXNzLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX09TX0ZPUksgMTUKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgcGlkIChzaGlmdGVkIGJ5IDgpLAorLy8hIGluZGljYXRlcyB0aGF0IGFuIGV4aXQgc3lzY2FsbCB3YXMganVzdCBleGVjdXRlZCBieSB0aGUgZ2l2ZW4gcHJvY2Vzcy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9PU19FWElUIDE2CisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgY29tYmluZWQgd2l0aCBhIHBpZCAoc2hpZnRlZCBieSA4KSwKKy8vISBpbmRpY2F0ZXMgdGhhdCB0aGUgT1MganVzdCBzd2l0Y2hlZCB0byB0aGUgZ2l2ZW4gcHJvY2Vzcy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9PU19TV0lUQ0ggMTcKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgY2hhcmFjdGVyIChzaGlmdGVkIGJ5IDgpLAorLy8hIGluZGljYXRlcyB0aGF0IGFuIGV4ZWMgc3lzY2FsbCB3YXMganVzdCBleGVjdXRlZC4gV3JpdHRlbiB0byBvbmNlIGZvcgorLy8hIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBleGVjdXRhYmxlIG5hbWUsIHBsdXMgYSBmaW5hbCBOVUwuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfT1NfRVhFQyAxOAorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBjaGFyYWN0ZXIgKHNoaWZ0ZWQgYnkgOCksCisvLyEgaW5kaWNhdGVzIHRoYXQgYW4gaW50ZXJwcmV0ZXIgKFBUX0lOVEVSUCkgd2FzIGxvYWRlZC4gIFdyaXR0ZW4gdG8gb25jZQorLy8hIGZvciBlYWNoIGNoYXJhY3RlciBpbiAiQUREUjpQQVRIIiwgcGx1cyBhIGZpbmFsIE5VTCwgd2hlcmUgIkFERFIiIGlzIGEKKy8vISBoZXggbG9hZCBhZGRyZXNzIHN0YXJ0aW5nIHdpdGggIjB4IiwgYW5kICJQQVRIIiBpcyB0aGUgZXhlY3V0YWJsZSBuYW1lLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX09TX0lOVEVSUCAxOQorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBjaGFyYWN0ZXIgKHNoaWZ0ZWQgYnkgOCksCisvLyEgaW5kaWNhdGVzIHRoYXQgYSBkbGwgd2FzIGxvYWRlZC4gIFdyaXR0ZW4gdG8gb25jZSBmb3IgZWFjaCBjaGFyYWN0ZXIKKy8vISBpbiAiQUREUjpQQVRIIiwgcGx1cyBhIGZpbmFsIE5VTCwgd2hlcmUgIkFERFIiIGlzIGEgaGV4YWRlY2ltYWwgbG9hZAorLy8hIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAiMHgiLCBhbmQgIlBBVEgiIGlzIHRoZSBleGVjdXRhYmxlIG5hbWUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfRExPUEVOIDIwCisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgY29tYmluZWQgd2l0aCBhIGNoYXJhY3RlciAoc2hpZnRlZCBieSA4KSwKKy8vISBpbmRpY2F0ZXMgdGhhdCBhIGRsbCB3YXMgdW5sb2FkZWQuICBXcml0dGVuIHRvIG9uY2UgZm9yIGVhY2ggY2hhcmFjdGVyCisvLyEgaW4gIkFERFIiLCBwbHVzIGEgZmluYWwgTlVMLCB3aGVyZSAiQUREUiIgaXMgYSBoZXhhZGVjaW1hbCBsb2FkCisvLyEgYWRkcmVzcyBzdGFydGluZyB3aXRoICIweCIuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfRExDTE9TRSAyMQorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggYSBmbGFnIChzaGlmdGVkIGJ5IDgpLAorLy8hIGluZGljYXRlcyB3aGV0aGVyIHRvIGFsbG93IGRhdGEgcmVhZHMgdG8gcmVtb3RlbHktY2FjaGVkCisvLyEgZGlydHkgY2FjaGUgbGluZXMgdG8gYmUgY2FjaGVkIGxvY2FsbHkgd2l0aG91dCBncmluZGVyIHdhcm5pbmdzIG9yCisvLyEgYXNzZXJ0aW9ucyAodXNlZCBieSBMaW51eCBrZXJuZWwgZmFzdCBtZW1jcHkpLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX0FMTE9XX01VTFRJUExFX0NBQ0hJTkcgMjIKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBlbmFibGVzIG1lbW9yeSB0cmFjaW5nLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX0VOQUJMRV9NRU1fTE9HR0lORyAyMworCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGRpc2FibGVzIG1lbW9yeSB0cmFjaW5nLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX0RJU0FCTEVfTUVNX0xPR0dJTkcgMjQKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjaGFuZ2VzIHRoZSBzaGFwaW5nIHBhcmFtZXRlcnMgb2Ygb25lIG9mCisvLyEgdGhlIGdiZSBvciB4Z2JlIHNoaW1zLiBNdXN0IHNwZWNpZnkgdGhlIHNoaW0gaWQsIHRoZSB0eXBlLCB0aGUgdW5pdHMsIGFuZAorLy8hIHRoZSByYXRlLCBhcyBkZWZpbmVkIGluIFNJTV9TSEFQSU5HX1NQUl9BUkcuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElORyAyNQorCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIGNvbWJpbmVkIHdpdGggY2hhcmFjdGVyIChzaGlmdGVkIGJ5IDgpLAorLy8hIHJlcXVlc3RzIHRoYXQgYSBzaW11bGF0b3IgY29tbWFuZCBiZSBleGVjdXRlZC4gIFdyaXR0ZW4gdG8gb25jZSBmb3IgZWFjaAorLy8hIGNoYXJhY3RlciBpbiB0aGUgY29tbWFuZCwgcGx1cyBhIGZpbmFsIE5VTC4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9DT01NQU5EIDI2CisKKy8vISBJZiB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTCwgaW5kaWNhdGVzIHRoYXQgdGhlIHNpbXVsYXRlZCBzeXN0ZW0KKy8vISBpcyBwYW5pY2tpbmcsIHRvIGFsbG93IGRlYnVnZ2luZyB2aWEgLS1kZWJ1Zy1vbi1wYW5pYy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9QQU5JQyAyNworCisvLyEgSWYgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wsIHRyaWdnZXJzIGEgc2ltdWxhdG9yIHN5c2NhbGwuCisvLyEgU2VlICJzaW1fc3lzY2FsbCgpIiBmb3IgbW9yZSBpbmZvLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NZU0NBTEwgMzIKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgcGlkIChzaGlmdGVkIGJ5IDgpLAorLy8hIHByb3ZpZGVzIHRoZSBwaWQgdGhhdCBzdWJzZXF1ZW50IFNJTV9DT05UUk9MX09TX0ZPUksgd3JpdGVzIHNob3VsZAorLy8hIHVzZSBhcyB0aGUgcGlkLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBwcmV2aW91cyBTSU1fQ09OVFJPTF9PU19TV0lUQ0guCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfT1NfRk9SS19QQVJFTlQgMzMKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgbVBJUEUgc2hpbSBudW1iZXIKKy8vISAoc2hpZnRlZCBieSA4KSwgY2xlYXJzIHRoZSBwZW5kaW5nIG1hZ2ljIGRhdGEgc2VjdGlvbi4gIFRoZSBjbGVhcmVkCisvLyEgcGVuZGluZyBtYWdpYyBkYXRhIHNlY3Rpb24gYW5kIGFueSBzdWJzZXF1ZW50bHkgYXBwZW5kZWQgbWFnaWMgYnl0ZXMKKy8vISB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgY2xhc3NpZmllciBibGFzdCBwcm9ncmFtbWVyIGlzIHJ1bi4KKyNkZWZpbmUgU0lNX0NPTlRST0xfQ0xFQVJfTVBJUEVfTUFHSUNfQllURVMgMzQKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgbVBJUEUgc2hpbSBudW1iZXIKKy8vISAoc2hpZnRlZCBieSA4KSBhbmQgYSBieXRlIG9mIGRhdGEgKHNoaWZ0ZWQgYnkgMTYpLCBhcHBlbmRzIHRoYXQgYnl0ZQorLy8hIHRvIHRoZSBzaGltJ3MgcGVuZGluZyBtYWdpYyBkYXRhIHNlY3Rpb24uICBUaGUgcGVuZGluZyBtYWdpYyBkYXRhCisvLyEgc2VjdGlvbiB0YWtlcyBlZmZlY3Qgd2hlbiB0aGUgY2xhc3NpZmllciBibGFzdCBwcm9ncmFtbWVyIGlzIHJ1bi4KKyNkZWZpbmUgU0lNX0NPTlRST0xfQVBQRU5EX01QSVBFX01BR0lDX0JZVEUgMzUKKworLy8hIElmIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLCBjb21iaW5lZCB3aXRoIGEgbVBJUEUgc2hpbSBudW1iZXIKKy8vISAoc2hpZnRlZCBieSA4KSwgYW4gZW5hYmxlPTEvZGlzYWJsZT0wIGJpdCAoc2hpZnRlZCBieSAxNiksIGFuZCBhCisvLyEgbWFzayBvZiBsaW5rcyAoc2hpZnRlZCBieSAzMiksIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nCisvLyEgbVBJUEUgbGlua3MuCisjZGVmaW5lIFNJTV9DT05UUk9MX0VOQUJMRV9NUElQRV9MSU5LX01BR0lDX0JZVEUgMzYKKworLy89PSBTeXNjYWxsIG51bWJlcnMgZm9yIHVzZSB3aXRoICJzaW1fc3lzY2FsbCgpIi4KKworLy8hIFN5c2NhbGwgbnVtYmVyIGZvciBzaW1fYWRkX3dhdGNocG9pbnQoKS4KKy8vIQorI2RlZmluZSBTSU1fU1lTQ0FMTF9BRERfV0FUQ0hQT0lOVCAyCisKKy8vISBTeXNjYWxsIG51bWJlciBmb3Igc2ltX3JlbW92ZV93YXRjaHBvaW50KCkuCisvLyEKKyNkZWZpbmUgU0lNX1NZU0NBTExfUkVNT1ZFX1dBVENIUE9JTlQgMworCisvLyEgU3lzY2FsbCBudW1iZXIgZm9yIHNpbV9xdWVyeV93YXRjaHBvaW50KCkuCisvLyEKKyNkZWZpbmUgU0lNX1NZU0NBTExfUVVFUllfV0FUQ0hQT0lOVCA0CisKKy8vISBTeXNjYWxsIG51bWJlciB0aGF0IGFzc2VydHMgdGhhdCB0aGUgY2FjaGUgbGluZXMgd2hvc2UgNjQtYml0IFBBCisvLyEgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc2ltX3N5c2NhbGwoKSwgYW5kIG92ZXIgYQorLy8hIHJhbmdlIHBhc3NlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQsIGFyZSBubyBsb25nZXIgaW4gY2FjaGUuCisvLyEgVGhlIHNpbXVsYXRvciByYWlzZXMgYW4gZXJyb3IgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCisvLyEKKyNkZWZpbmUgU0lNX1NZU0NBTExfVkFMSURBVEVfTElORVNfRVZJQ1RFRCA1CisKKworLy89PSBCaXQgbWFza3Mgd2hpY2ggY2FuIGJlIHNoaWZ0ZWQgYnkgOCwgY29tYmluZWQgd2l0aAorLy89PSBTSU1fQ09OVFJPTF9TRVRfVFJBQ0lORywgYW5kIHdyaXR0ZW4gdG8gU1BSX1NJTV9DT05UUk9MLgorCisvLyEgQGFkZHRvZ3JvdXAgYXJjaF9zaW0KKy8vISBAeworCisvLyEgRW5hYmxlIC0tdHJhY2UtY3ljbGUgd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX0NZQ0xFUyAgICAgICAgICAweDAxCisKKy8vISBFbmFibGUgLS10cmFjZS1yb3V0ZXIgd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX1JPVVRFUiAgICAgICAgICAweDAyCisKKy8vISBFbmFibGUgLS10cmFjZS1yZWdpc3Rlci13cml0ZXMgd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX1JFR0lTVEVSX1dSSVRFUyAweDA0CisKKy8vISBFbmFibGUgLS10cmFjZS1kaXNhc20gd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX0RJU0FTTSAgICAgICAgICAweDA4CisKKy8vISBFbmFibGUgLS10cmFjZS1zdGFsbC1pbmZvIHdoZW4gcGFzc2VkIHRvIHNpbXVsYXRvcl9zZXRfdHJhY2luZygpLgorLy8hCisjZGVmaW5lIFNJTV9UUkFDRV9TVEFMTF9JTkZPICAgICAgMHgxMAorCisvLyEgRW5hYmxlIC0tdHJhY2UtbWVtb3J5LWNvbnRyb2xsZXIgd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX01FTU9SWV9DT05UUk9MTEVSIDB4MjAKKworLy8hIEVuYWJsZSAtLXRyYWNlLWwyIHdoZW4gcGFzc2VkIHRvIHNpbXVsYXRvcl9zZXRfdHJhY2luZygpLgorLy8hCisjZGVmaW5lIFNJTV9UUkFDRV9MMl9DQUNIRSAweDQwCisKKy8vISBFbmFibGUgLS10cmFjZS1saW5lcyB3aGVuIHBhc3NlZCB0byBzaW11bGF0b3Jfc2V0X3RyYWNpbmcoKS4KKy8vIQorI2RlZmluZSBTSU1fVFJBQ0VfTElORVMgMHg4MAorCisvLyEgVHVybiBvZmYgYWxsIHRyYWNpbmcgd2hlbiBwYXNzZWQgdG8gc2ltdWxhdG9yX3NldF90cmFjaW5nKCkuCisvLyEKKyNkZWZpbmUgU0lNX1RSQUNFX05PTkUgMAorCisvLyEgVHVybiBvbiBhbGwgdHJhY2luZyB3aGVuIHBhc3NlZCB0byBzaW11bGF0b3Jfc2V0X3RyYWNpbmcoKS4KKy8vIQorI2RlZmluZSBTSU1fVFJBQ0VfQUxMICgtMSkKKworLy8hIEB9CisKKy8vISBDb21wdXRlcyB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gU1BSX1NJTV9DT05UUk9MIHRvIHNldCB0cmFjaW5nIGZsYWdzLgorLy8hCisjZGVmaW5lIFNJTV9UUkFDRV9TUFJfQVJHKG1hc2spIFwKKyAgKFNJTV9DT05UUk9MX1NFVF9UUkFDSU5HIHwgKChtYXNrKSA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpCisKKworLy89PSBCaXQgbWFza3Mgd2hpY2ggY2FuIGJlIHNoaWZ0ZWQgYnkgOCwgY29tYmluZWQgd2l0aAorLy89PSBTSU1fQ09OVFJPTF9EVU1QLCBhbmQgd3JpdHRlbiB0byBTUFJfU0lNX0NPTlRST0wuCisKKy8vISBAYWRkdG9ncm91cCBhcmNoX3NpbQorLy8hIEB7CisKKy8vISBEdW1wIHRoZSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX1JFR1MgICAgICAgICAgMHgwMDEKKworLy8hIER1bXAgdGhlIFNQUnMuCisvLyEKKyNkZWZpbmUgU0lNX0RVTVBfU1BSUyAgICAgICAgICAweDAwMgorCisvLyEgRHVtcCB0aGUgSVRMQi4KKy8vIQorI2RlZmluZSBTSU1fRFVNUF9JVExCICAgICAgICAgIDB4MDA0CisKKy8vISBEdW1wIHRoZSBEVExCLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX0RUTEIgICAgICAgICAgMHgwMDgKKworLy8hIER1bXAgdGhlIEwxIEktY2FjaGUuCisvLyEKKyNkZWZpbmUgU0lNX0RVTVBfTDFJICAgICAgICAgICAweDAxMAorCisvLyEgRHVtcCB0aGUgTDEgRC1jYWNoZS4KKy8vIQorI2RlZmluZSBTSU1fRFVNUF9MMUQgICAgICAgICAgIDB4MDIwCisKKy8vISBEdW1wIHRoZSBMMiBjYWNoZS4KKy8vIQorI2RlZmluZSBTSU1fRFVNUF9MMiAgICAgICAgICAgIDB4MDQwCisKKy8vISBEdW1wIHRoZSBzd2l0Y2ggcmVnaXN0ZXJzLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX1NOUkVHUyAgICAgICAgMHgwODAKKworLy8hIER1bXAgdGhlIHN3aXRjaCBJVExCLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX1NOSVRMQiAgICAgICAgMHgxMDAKKworLy8hIER1bXAgdGhlIHN3aXRjaCBMMSBJLWNhY2hlLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX1NOTDFJICAgICAgICAgMHgyMDAKKworLy8hIER1bXAgdGhlIGN1cnJlbnQgYmFja3RyYWNlLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX0JBQ0tUUkFDRSAgICAgMHg0MDAKKworLy8hIE9ubHkgZHVtcCB2YWxpZCBsaW5lcyBpbiBjYWNoZXMuCisvLyEKKyNkZWZpbmUgU0lNX0RVTVBfVkFMSURfTElORVMgICAweDgwMAorCisvLyEgRHVtcCBldmVyeXRoaW5nIHRoYXQgaXMgZHVtcGFibGUuCisvLyEKKyNkZWZpbmUgU0lNX0RVTVBfQUxMICgtMSAmIH5TSU1fRFVNUF9WQUxJRF9MSU5FUykKKworLy8gQH0KKworLy8hIENvbXB1dGVzIHRoZSB2YWx1ZSB0byB3cml0ZSB0byBTUFJfU0lNX0NPTlRST0wgdG8gZHVtcCBtYWNoaW5lIHN0YXRlLgorLy8hCisjZGVmaW5lIFNJTV9EVU1QX1NQUl9BUkcobWFzaykgXAorICAoU0lNX0NPTlRST0xfRFVNUCB8ICgobWFzaykgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKQorCisKKy8vPT0gQml0IG1hc2tzIHdoaWNoIGNhbiBiZSBzaGlmdGVkIGJ5IDgsIGNvbWJpbmVkIHdpdGgKKy8vPT0gU0lNX0NPTlRST0xfUFJPRklMRVJfQ0hJUF94eHgsIGFuZCB3cml0dGVuIHRvIFNQUl9TSU1fQ09OVFJPTC4KKworLy8hIEBhZGR0b2dyb3VwIGFyY2hfc2ltCisvLyEgQHsKKworLy8hIFVzZSB3aXRoIHdpdGggU0lNX1BST0ZJTEVSX0NISVBfeHh4IHRvIGNvbnRyb2wgdGhlIG1lbW9yeSBjb250cm9sbGVycy4KKy8vIQorI2RlZmluZSBTSU1fQ0hJUF9NRU1DVEwgICAgICAgIDB4MDAxCisKKy8vISBVc2Ugd2l0aCB3aXRoIFNJTV9QUk9GSUxFUl9DSElQX3h4eCB0byBjb250cm9sIHRoZSBYQVVJIGludGVyZmFjZS4KKy8vIQorI2RlZmluZSBTSU1fQ0hJUF9YQVVJICAgICAgICAgIDB4MDAyCisKKy8vISBVc2Ugd2l0aCB3aXRoIFNJTV9QUk9GSUxFUl9DSElQX3h4eCB0byBjb250cm9sIHRoZSBQQ0llIGludGVyZmFjZS4KKy8vIQorI2RlZmluZSBTSU1fQ0hJUF9QQ0lFICAgICAgICAgIDB4MDA0CisKKy8vISBVc2Ugd2l0aCB3aXRoIFNJTV9QUk9GSUxFUl9DSElQX3h4eCB0byBjb250cm9sIHRoZSBNUElQRSBpbnRlcmZhY2UuCisvLyEKKyNkZWZpbmUgU0lNX0NISVBfTVBJUEUgICAgICAgICAweDAwOAorCisvLyEgUmVmZXJlbmNlIGFsbCBjaGlwIGRldmljZXMuCisvLyEKKyNkZWZpbmUgU0lNX0NISVBfQUxMICgtMSkKKworLy8hIEB9CisKKy8vISBDb21wdXRlcyB0aGUgdmFsdWUgdG8gd3JpdGUgdG8gU1BSX1NJTV9DT05UUk9MIHRvIGNsZWFyIGNoaXAgc3RhdGlzdGljcy4KKy8vIQorI2RlZmluZSBTSU1fUFJPRklMRVJfQ0hJUF9DTEVBUl9TUFJfQVJHKG1hc2spIFwKKyAgKFNJTV9DT05UUk9MX1BST0ZJTEVSX0NISVBfQ0xFQVIgfCAoKG1hc2spIDw8IF9TSU1fQ09OVFJPTF9PUEVSQVRPUl9CSVRTKSkKKworLy8hIENvbXB1dGVzIHRoZSB2YWx1ZSB0byB3cml0ZSB0byBTUFJfU0lNX0NPTlRST0wgdG8gZGlzYWJsZSBjaGlwIHN0YXRpc3RpY3MuCisvLyEKKyNkZWZpbmUgU0lNX1BST0ZJTEVSX0NISVBfRElTQUJMRV9TUFJfQVJHKG1hc2spIFwKKyAgKFNJTV9DT05UUk9MX1BST0ZJTEVSX0NISVBfRElTQUJMRSB8ICgobWFzaykgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKQorCisvLyEgQ29tcHV0ZXMgdGhlIHZhbHVlIHRvIHdyaXRlIHRvIFNQUl9TSU1fQ09OVFJPTCB0byBlbmFibGUgY2hpcCBzdGF0aXN0aWNzLgorLy8hCisjZGVmaW5lIFNJTV9QUk9GSUxFUl9DSElQX0VOQUJMRV9TUFJfQVJHKG1hc2spIFwKKyAgKFNJTV9DT05UUk9MX1BST0ZJTEVSX0NISVBfRU5BQkxFIHwgKChtYXNrKSA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpCisKKworCisvLyBTaGltIGJpdHJhdGUgY29udHJvbHMuCisKKy8vISBUaGUgbnVtYmVyIG9mIGJpdHMgdXNlZCB0byBzdG9yZSB0aGUgc2hpbSBpZC4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9TSEFQSU5HX1NISU1fSURfQklUUyAzCisKKy8vISBAYWRkdG9ncm91cCBhcmNoX3NpbQorLy8hIEB7CisKKy8vISBDaGFuZ2UgdGhlIGdiZSAwIGJpdHJhdGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19HQkVfMCAweDAKKworLy8hIENoYW5nZSB0aGUgZ2JlIDEgYml0cmF0ZS4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9TSEFQSU5HX0dCRV8xIDB4MQorCisvLyEgQ2hhbmdlIHRoZSBnYmUgMiBiaXRyYXRlLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfR0JFXzIgMHgyCisKKy8vISBDaGFuZ2UgdGhlIGdiZSAzIGJpdHJhdGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19HQkVfMyAweDMKKworLy8hIENoYW5nZSB0aGUgeGdiZSAwIGJpdHJhdGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19YR0JFXzAgMHg0CisKKy8vISBDaGFuZ2UgdGhlIHhnYmUgMSBiaXRyYXRlLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfWEdCRV8xIDB4NQorCisvLyEgVGhlIHR5cGUgb2Ygc2hhcGluZyB0byBkby4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9TSEFQSU5HX1RZUEVfQklUUyAyCisKKy8vISBDb250cm9sIHRoZSBtdWx0aXBsaWVyLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfTVVMVElQTElFUiAwCisKKy8vISBDb250cm9sIHRoZSBQUFMuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19QUFMgMQorCisvLyEgQ29udHJvbCB0aGUgQlBTLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfQlBTIDIKKworLy8hIFRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIHVuaXRzIGZvciB0aGUgc2hhcGluZyBwYXJhbWV0ZXIuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19VTklUU19CSVRTIDIKKworLy8hIFByb3ZpZGUgYSBudW1iZXIgaW4gc2luZ2xlIHVuaXRzLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfVU5JVFNfU0lOR0xFIDAKKworLy8hIFByb3ZpZGUgYSBudW1iZXIgaW4ga2lsbyB1bml0cy4KKy8vIQorI2RlZmluZSBTSU1fQ09OVFJPTF9TSEFQSU5HX1VOSVRTX0tJTE8gMQorCisvLyEgUHJvdmlkZSBhIG51bWJlciBpbiBtZWdhIHVuaXRzLgorLy8hCisjZGVmaW5lIFNJTV9DT05UUk9MX1NIQVBJTkdfVU5JVFNfTUVHQSAyCisKKy8vISBQcm92aWRlIGEgbnVtYmVyIGluIGdpZ2EgdW5pdHMuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19VTklUU19HSUdBIDMKKworLy8gQH0KKworLy8hIEhvdyBtYW55IGJpdHMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlIHJhdGUuCisvLyEKKyNkZWZpbmUgU0lNX0NPTlRST0xfU0hBUElOR19SQVRFX0JJVFMgXAorICAoMzIgLSAoX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMgKyBcCisgICAgICAgICBTSU1fQ09OVFJPTF9TSEFQSU5HX1NISU1fSURfQklUUyArIFwKKyAgICAgICAgIFNJTV9DT05UUk9MX1NIQVBJTkdfVFlQRV9CSVRTICsgXAorICAgICAgICAgU0lNX0NPTlRST0xfU0hBUElOR19VTklUU19CSVRTKSkKKworLy8hIENvbXB1dGVzIHRoZSB2YWx1ZSB0byB3cml0ZSB0byBTUFJfU0lNX0NPTlRST0wgdG8gY2hhbmdlIGEgYml0cmF0ZS4KKy8vIQorI2RlZmluZSBTSU1fU0hBUElOR19TUFJfQVJHKHNoaW0sIHR5cGUsIHVuaXRzLCByYXRlKSBcCisgIChTSU1fQ09OVFJPTF9TSEFQSU5HIHwgXAorICAgKChzaGltKSB8IFwKKyAgICgodHlwZSkgPDwgKFNJTV9DT05UUk9MX1NIQVBJTkdfU0hJTV9JRF9CSVRTKSkgfCBcCisgICAoKHVuaXRzKSA8PCAoU0lNX0NPTlRST0xfU0hBUElOR19TSElNX0lEX0JJVFMgKyBcCisgICAgICAgICAgICAgICAgU0lNX0NPTlRST0xfU0hBUElOR19UWVBFX0JJVFMpKSB8IFwKKyAgICgocmF0ZSkgPDwgKFNJTV9DT05UUk9MX1NIQVBJTkdfU0hJTV9JRF9CSVRTICsgXAorICAgICAgICAgICAgICAgU0lNX0NPTlRST0xfU0hBUElOR19UWVBFX0JJVFMgKyBcCisgICAgICAgICAgICAgICBTSU1fQ09OVFJPTF9TSEFQSU5HX1VOSVRTX0JJVFMpKSkgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpCisKKworLy89PSBWYWx1ZXMgcmV0dXJuZWQgd2hlbiByZWFkaW5nIFNQUl9TSU1fQ09OVFJPTC4KKy8vIElTU1VFOiBUaGVzZSBuYW1lcyBzaG91bGQgc2hhcmUgYSBsb25nZXIgY29tbW9uIHByZWZpeC4KKworLy8hIFdoZW4gcmVhZGluZyBTUFJfU0lNX0NPTlRST0wsIHRoZSBtYXNrIG9mIHNpbXVsYXRvciB0cmFjaW5nIGJpdHMKKy8vISAoU0lNX1RSQUNFX3h4eCB2YWx1ZXMpLgorLy8hCisjZGVmaW5lIFNJTV9UUkFDRV9GTEFHX01BU0sgMHhGRkZGCisKKy8vISBXaGVuIHJlYWRpbmcgU1BSX1NJTV9DT05UUk9MLCB0aGUgbWFzayBmb3Igd2hldGhlciBwcm9maWxpbmcgaXMgZW5hYmxlZC4KKy8vIQorI2RlZmluZSBTSU1fUFJPRklMRVJfRU5BQkxFRF9NQVNLIDB4MTAwMDAKKworCisvLz09IFNwZWNpYWwgYXJndW1lbnRzIGZvciAiU0lNX0NPTlRST0xfUFVUQyIuCisKKy8vISBGbGFnIHZhbHVlIGZvciBmb3JjaW5nIGEgUFVUQyBzdHJpbmctZmx1c2gsIGluY2x1ZGluZworLy8hIGNvb3JkaW5hdGUvY3ljbGUgcHJlZml4IGFuZCBuZXdsaW5lLgorLy8hCisjZGVmaW5lIFNJTV9QVVRDX0ZMVVNIX1NUUklORyAweDEwMAorCisvLyEgRmxhZyB2YWx1ZSBmb3IgZm9yY2luZyBhIFBVVEMgYmluYXJ5LWRhdGEtZmx1c2gsIHdoaWNoIHNraXBzIHRoZQorLy8hIHByZWZpeCBhbmQgZG9lcyBub3QgYXBwZW5kIGEgbmV3bGluZS4KKy8vIQorI2RlZmluZSBTSU1fUFVUQ19GTFVTSF9CSU5BUlkgMHgxMDEKKworCisjZW5kaWYgLy9fX0FSQ0hfU0lNX0RFRl9IX18KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc3ByX2RlZi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zcHJfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmZGJkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc3ByX2RlZi5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmZGVmIF9fdGlsZWd4X18KKyNpbmNsdWRlIDxhcmNoL3Nwcl9kZWZfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmXzMyLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc3ByX2RlZl8zMi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXJjaC9zcHJfZGVmXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmYzA2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FyY2gvc3ByX2RlZl8zMi5oCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19ET1hZR0VOX18KKworI2lmbmRlZiBfX0FSQ0hfU1BSX0RFRl9IX18KKyNkZWZpbmUgX19BUkNIX1NQUl9ERUZfSF9fCisKKyNkZWZpbmUgU1BSX0FVWF9QRVJGX0NPVU5UXzAgMHg2MDA1CisjZGVmaW5lIFNQUl9BVVhfUEVSRl9DT1VOVF8xIDB4NjAwNgorI2RlZmluZSBTUFJfQVVYX1BFUkZfQ09VTlRfQ1RMIDB4NjAwNworI2RlZmluZSBTUFJfQVVYX1BFUkZfQ09VTlRfU1RTIDB4NjAwOAorI2RlZmluZSBTUFJfQ1lDTEVfSElHSCAweDRlMDYKKyNkZWZpbmUgU1BSX0NZQ0xFX0xPVyAweDRlMDcKKyNkZWZpbmUgU1BSX0RNQV9CWVRFIDB4MzkwMAorI2RlZmluZSBTUFJfRE1BX0NIVU5LX1NJWkUgMHgzOTAxCisjZGVmaW5lIFNQUl9ETUFfQ1RSIDB4MzkwMgorI2RlZmluZSBTUFJfRE1BX0NUUl9fUkVRVUVTVF9NQVNLICAweDEKKyNkZWZpbmUgU1BSX0RNQV9DVFJfX1NVU1BFTkRfTUFTSyAgMHgyCisjZGVmaW5lIFNQUl9ETUFfRFNUX0FERFIgMHgzOTAzCisjZGVmaW5lIFNQUl9ETUFfRFNUX0NIVU5LX0FERFIgMHgzOTA0CisjZGVmaW5lIFNQUl9ETUFfU1JDX0FERFIgMHgzOTA1CisjZGVmaW5lIFNQUl9ETUFfU1JDX0NIVU5LX0FERFIgMHgzOTA2CisjZGVmaW5lIFNQUl9ETUFfU1RBVFVTX19ET05FX01BU0sgIDB4MQorI2RlZmluZSBTUFJfRE1BX1NUQVRVU19fQlVTWV9NQVNLICAweDIKKyNkZWZpbmUgU1BSX0RNQV9TVEFUVVNfX1JVTk5JTkdfTUFTSyAgMHgxMAorI2RlZmluZSBTUFJfRE1BX1NUUklERSAweDM5MDcKKyNkZWZpbmUgU1BSX0RNQV9VU0VSX1NUQVRVUyAweDM5MDgKKyNkZWZpbmUgU1BSX0RPTkUgMHg0ZTA4CisjZGVmaW5lIFNQUl9FVkVOVF9CRUdJTiAweDRlMGQKKyNkZWZpbmUgU1BSX0VWRU5UX0VORCAweDRlMGUKKyNkZWZpbmUgU1BSX0VYX0NPTlRFWFRfMF8wIDB4NGEwNQorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8wXzEgMHg0YTA2CisjZGVmaW5lIFNQUl9FWF9DT05URVhUXzBfMV9fUExfU0hJRlQgMAorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8wXzFfX1BMX1JNQVNLIDB4MworI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8wXzFfX1BMX01BU0sgIDB4MworI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8wXzFfX0lDU19TSElGVCAyCisjZGVmaW5lIFNQUl9FWF9DT05URVhUXzBfMV9fSUNTX1JNQVNLIDB4MQorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8wXzFfX0lDU19NQVNLICAweDQKKyNkZWZpbmUgU1BSX0VYX0NPTlRFWFRfMV8wIDB4NDgwNQorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8xXzEgMHg0ODA2CisjZGVmaW5lIFNQUl9FWF9DT05URVhUXzFfMV9fUExfU0hJRlQgMAorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX1JNQVNLIDB4MworI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX01BU0sgIDB4MworI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8xXzFfX0lDU19TSElGVCAyCisjZGVmaW5lIFNQUl9FWF9DT05URVhUXzFfMV9fSUNTX1JNQVNLIDB4MQorI2RlZmluZSBTUFJfRVhfQ09OVEVYVF8xXzFfX0lDU19NQVNLICAweDQKKyNkZWZpbmUgU1BSX0ZBSUwgMHg0ZTA5CisjZGVmaW5lIFNQUl9JTlRDVFJMXzBfU1RBVFVTIDB4NGEwNworI2RlZmluZSBTUFJfSU5UQ1RSTF8xX1NUQVRVUyAweDQ4MDcKKyNkZWZpbmUgU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OIDB4NGUwYQorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfMF8wIDB4NGEwOAorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfMF8xIDB4NGEwOQorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfMV8wIDB4NDgwOQorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfMV8xIDB4NDgwYQorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfUkVTRVRfMF8wIDB4NGEwYQorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfUkVTRVRfMF8xIDB4NGEwYgorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfUkVTRVRfMV8wIDB4NDgwYgorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfUkVTRVRfMV8xIDB4NDgwYworI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfU0VUXzBfMCAweDRhMGMKKyNkZWZpbmUgU1BSX0lOVEVSUlVQVF9NQVNLX1NFVF8wXzEgMHg0YTBkCisjZGVmaW5lIFNQUl9JTlRFUlJVUFRfTUFTS19TRVRfMV8wIDB4NDgwZAorI2RlZmluZSBTUFJfSU5URVJSVVBUX01BU0tfU0VUXzFfMSAweDQ4MGUKKyNkZWZpbmUgU1BSX01QTF9ETUFfQ1BMX1NFVF8wIDB4NTgwMAorI2RlZmluZSBTUFJfTVBMX0RNQV9DUExfU0VUXzEgMHg1ODAxCisjZGVmaW5lIFNQUl9NUExfRE1BX05PVElGWV9TRVRfMCAweDM4MDAKKyNkZWZpbmUgU1BSX01QTF9ETUFfTk9USUZZX1NFVF8xIDB4MzgwMQorI2RlZmluZSBTUFJfTVBMX0lOVENUUkxfMF9TRVRfMCAweDRhMDAKKyNkZWZpbmUgU1BSX01QTF9JTlRDVFJMXzBfU0VUXzEgMHg0YTAxCisjZGVmaW5lIFNQUl9NUExfSU5UQ1RSTF8xX1NFVF8wIDB4NDgwMAorI2RlZmluZSBTUFJfTVBMX0lOVENUUkxfMV9TRVRfMSAweDQ4MDEKKyNkZWZpbmUgU1BSX01QTF9TTl9BQ0NFU1NfU0VUXzAgMHgwODAwCisjZGVmaW5lIFNQUl9NUExfU05fQUNDRVNTX1NFVF8xIDB4MDgwMQorI2RlZmluZSBTUFJfTVBMX1NOX0NQTF9TRVRfMCAweDVhMDAKKyNkZWZpbmUgU1BSX01QTF9TTl9DUExfU0VUXzEgMHg1YTAxCisjZGVmaW5lIFNQUl9NUExfU05fRklSRVdBTExfU0VUXzAgMHgyYzAwCisjZGVmaW5lIFNQUl9NUExfU05fRklSRVdBTExfU0VUXzEgMHgyYzAxCisjZGVmaW5lIFNQUl9NUExfU05fTk9USUZZX1NFVF8wIDB4MmEwMAorI2RlZmluZSBTUFJfTVBMX1NOX05PVElGWV9TRVRfMSAweDJhMDEKKyNkZWZpbmUgU1BSX01QTF9VRE5fQUNDRVNTX1NFVF8wIDB4MGMwMAorI2RlZmluZSBTUFJfTVBMX1VETl9BQ0NFU1NfU0VUXzEgMHgwYzAxCisjZGVmaW5lIFNQUl9NUExfVUROX0FWQUlMX1NFVF8wIDB4NDAwMAorI2RlZmluZSBTUFJfTVBMX1VETl9BVkFJTF9TRVRfMSAweDQwMDEKKyNkZWZpbmUgU1BSX01QTF9VRE5fQ0FfU0VUXzAgMHgzYzAwCisjZGVmaW5lIFNQUl9NUExfVUROX0NBX1NFVF8xIDB4M2MwMQorI2RlZmluZSBTUFJfTVBMX1VETl9DT01QTEVURV9TRVRfMCAweDE0MDAKKyNkZWZpbmUgU1BSX01QTF9VRE5fQ09NUExFVEVfU0VUXzEgMHgxNDAxCisjZGVmaW5lIFNQUl9NUExfVUROX0ZJUkVXQUxMX1NFVF8wIDB4MzAwMAorI2RlZmluZSBTUFJfTVBMX1VETl9GSVJFV0FMTF9TRVRfMSAweDMwMDEKKyNkZWZpbmUgU1BSX01QTF9VRE5fUkVGSUxMX1NFVF8wIDB4MTAwMAorI2RlZmluZSBTUFJfTVBMX1VETl9SRUZJTExfU0VUXzEgMHgxMDAxCisjZGVmaW5lIFNQUl9NUExfVUROX1RJTUVSX1NFVF8wIDB4MzYwMAorI2RlZmluZSBTUFJfTVBMX1VETl9USU1FUl9TRVRfMSAweDM2MDEKKyNkZWZpbmUgU1BSX01QTF9XT1JMRF9BQ0NFU1NfU0VUXzAgMHg0ZTAwCisjZGVmaW5lIFNQUl9NUExfV09STERfQUNDRVNTX1NFVF8xIDB4NGUwMQorI2RlZmluZSBTUFJfUEFTUyAweDRlMGIKKyNkZWZpbmUgU1BSX1BFUkZfQ09VTlRfMCAweDQyMDUKKyNkZWZpbmUgU1BSX1BFUkZfQ09VTlRfMSAweDQyMDYKKyNkZWZpbmUgU1BSX1BFUkZfQ09VTlRfQ1RMIDB4NDIwNworI2RlZmluZSBTUFJfUEVSRl9DT1VOVF9TVFMgMHg0MjA4CisjZGVmaW5lIFNQUl9QUk9DX1NUQVRVUyAweDRmMDAKKyNkZWZpbmUgU1BSX1NJTV9DT05UUk9MIDB4NGUwYworI2RlZmluZSBTUFJfU05DVEwgMHgwODA1CisjZGVmaW5lIFNQUl9TTkNUTF9fRlJaRkFCUklDX01BU0sgIDB4MQorI2RlZmluZSBTUFJfU05DVExfX0ZSWlBST0NfTUFTSyAgMHgyCisjZGVmaW5lIFNQUl9TTlBDIDB4MDgwYgorI2RlZmluZSBTUFJfU05TVEFUSUMgMHgwODBjCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8wXzAgMHg0YjAwCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8wXzEgMHg0YjAxCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8wXzIgMHg0YjAyCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8wXzMgMHg0YjAzCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8xXzAgMHg0OTAwCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8xXzEgMHg0OTAxCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8xXzIgMHg0OTAyCisjZGVmaW5lIFNQUl9TWVNURU1fU0FWRV8xXzMgMHg0OTAzCisjZGVmaW5lIFNQUl9USUxFX0NPT1JEIDB4NGMxNworI2RlZmluZSBTUFJfVElMRV9SVEZfSFdNIDB4NGUxMAorI2RlZmluZSBTUFJfVElMRV9USU1FUl9DT05UUk9MIDB4MzIwNQorI2RlZmluZSBTUFJfVElMRV9XUklURV9QRU5ESU5HIDB4NGUwZgorI2RlZmluZSBTUFJfVUROX0FWQUlMX0VOIDB4NDAwNQorI2RlZmluZSBTUFJfVUROX0NBX0RBVEEgMHgwZDAwCisjZGVmaW5lIFNQUl9VRE5fREFUQV9BVkFJTCAweDBkMDMKKyNkZWZpbmUgU1BSX1VETl9ERUFETE9DS19USU1FT1VUIDB4MzYwNgorI2RlZmluZSBTUFJfVUROX0RFTVVYX0NBX0NPVU5UIDB4MGMwNQorI2RlZmluZSBTUFJfVUROX0RFTVVYX0NPVU5UXzAgMHgwYzA2CisjZGVmaW5lIFNQUl9VRE5fREVNVVhfQ09VTlRfMSAweDBjMDcKKyNkZWZpbmUgU1BSX1VETl9ERU1VWF9DT1VOVF8yIDB4MGMwOAorI2RlZmluZSBTUFJfVUROX0RFTVVYX0NPVU5UXzMgMHgwYzA5CisjZGVmaW5lIFNQUl9VRE5fREVNVVhfQ1RMIDB4MGMwYQorI2RlZmluZSBTUFJfVUROX0RFTVVYX1FVRVVFX1NFTCAweDBjMGMKKyNkZWZpbmUgU1BSX1VETl9ERU1VWF9TVEFUVVMgMHgwYzBkCisjZGVmaW5lIFNQUl9VRE5fREVNVVhfV1JJVEVfRklGTyAweDBjMGUKKyNkZWZpbmUgU1BSX1VETl9ESVJFQ1RJT05fUFJPVEVDVCAweDMwMDUKKyNkZWZpbmUgU1BSX1VETl9SRUZJTExfRU4gMHgxMDA1CisjZGVmaW5lIFNQUl9VRE5fU1BfRklGT19EQVRBIDB4MGMxMQorI2RlZmluZSBTUFJfVUROX1NQX0ZJRk9fU0VMIDB4MGMxMgorI2RlZmluZSBTUFJfVUROX1NQX0ZSRUVaRSAweDBjMTMKKyNkZWZpbmUgU1BSX1VETl9TUF9GUkVFWkVfX1NQX0ZSWl9NQVNLICAweDEKKyNkZWZpbmUgU1BSX1VETl9TUF9GUkVFWkVfX0RFTVVYX0ZSWl9NQVNLICAweDIKKyNkZWZpbmUgU1BSX1VETl9TUF9GUkVFWkVfX05PTl9ERVNUX0VYVF9NQVNLICAweDQKKyNkZWZpbmUgU1BSX1VETl9TUF9TVEFURSAweDBjMTQKKyNkZWZpbmUgU1BSX1VETl9UQUdfMCAweDBjMTUKKyNkZWZpbmUgU1BSX1VETl9UQUdfMSAweDBjMTYKKyNkZWZpbmUgU1BSX1VETl9UQUdfMiAweDBjMTcKKyNkZWZpbmUgU1BSX1VETl9UQUdfMyAweDBjMTgKKyNkZWZpbmUgU1BSX1VETl9UQUdfVkFMSUQgMHgwYzE5CisjZGVmaW5lIFNQUl9VRE5fVElMRV9DT09SRCAweDBjMWEKKworI2VuZGlmIC8qICFkZWZpbmVkKF9fQVJDSF9TUFJfREVGX0hfXykgKi8KKworI2VuZGlmIC8qICFkZWZpbmVkKF9fRE9YWUdFTl9fKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL0tidWlsZCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjU1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTAsMCArMSwzIEBACitpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQorCitoZWFkZXIteSArPSB1Y29udGV4dC5oCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hc20tb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNzBlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXNtLW9mZnNldHMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8Z2VuZXJhdGVkL2FzbS1vZmZzZXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhjNDlmOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBdG9taWMgcHJpbWl0aXZlcy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9BVE9NSUNfSAorI2RlZmluZSBfQVNNX1RJTEVfQVRPTUlDX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjZGVmaW5lIEFUT01JQ19JTklUKGkpCXsgKGkpIH0KKworLyoqCisgKiBhdG9taWNfcmVhZCAtIHJlYWQgYXRvbWljIHZhcmlhYmxlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19yZWFkKGNvbnN0IGF0b21pY190ICp2KQoreworICAgICAgIHJldHVybiB2LT5jb3VudGVyOworfQorCisvKioKKyAqIGF0b21pY19zdWJfcmV0dXJuIC0gc3VidHJhY3QgaW50ZWdlciBhbmQgcmV0dXJuCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYgYW5kIHJldHVybnMgQHYgLSBAaQorICovCisjZGVmaW5lIGF0b21pY19zdWJfcmV0dXJuKGksIHYpCQlhdG9taWNfYWRkX3JldHVybigoaW50KSgtKGkpKSwgKHYpKQorCisvKioKKyAqIGF0b21pY19zdWIgLSBzdWJ0cmFjdCBpbnRlZ2VyIGZyb20gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBzdWJ0cmFjdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgc3VidHJhY3RzIEBpIGZyb20gQHYuCisgKi8KKyNkZWZpbmUgYXRvbWljX3N1YihpLCB2KQkJYXRvbWljX2FkZCgoaW50KSgtKGkpKSwgKHYpKQorCisvKioKKyAqIGF0b21pY19zdWJfYW5kX3Rlc3QgLSBzdWJ0cmFjdCB2YWx1ZSBmcm9tIHZhcmlhYmxlIGFuZCB0ZXN0IHJlc3VsdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gc3VidHJhY3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IHN1YnRyYWN0cyBAaSBmcm9tIEB2IGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcworICogemVybywgb3IgZmFsc2UgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAqLworI2RlZmluZSBhdG9taWNfc3ViX2FuZF90ZXN0KGksIHYpCShhdG9taWNfc3ViX3JldHVybigoaSksICh2KSkgPT0gMCkKKworLyoqCisgKiBhdG9taWNfaW5jX3JldHVybiAtIGluY3JlbWVudCBtZW1vcnkgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxIGFuZCByZXR1cm5zIHRoZSBuZXcgdmFsdWUuCisgKi8KKyNkZWZpbmUgYXRvbWljX2luY19yZXR1cm4odikJCWF0b21pY19hZGRfcmV0dXJuKDEsICh2KSkKKworLyoqCisgKiBhdG9taWNfZGVjX3JldHVybiAtIGRlY3JlbWVudCBtZW1vcnkgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxIGFuZCByZXR1cm5zIHRoZSBuZXcgdmFsdWUuCisgKi8KKyNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikJCWF0b21pY19zdWJfcmV0dXJuKDEsICh2KSkKKworLyoqCisgKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLgorICovCisjZGVmaW5lIGF0b21pY19pbmModikJCQlhdG9taWNfYWRkKDEsICh2KSkKKworLyoqCisgKiBhdG9taWNfZGVjIC0gZGVjcmVtZW50IGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyBAdiBieSAxLgorICovCisjZGVmaW5lIGF0b21pY19kZWModikJCQlhdG9taWNfc3ViKDEsICh2KSkKKworLyoqCisgKiBhdG9taWNfZGVjX2FuZF90ZXN0IC0gZGVjcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKgorICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIDAuCisgKi8KKyNkZWZpbmUgYXRvbWljX2RlY19hbmRfdGVzdCh2KQkJKGF0b21pY19kZWNfcmV0dXJuKHYpID09IDApCisKKy8qKgorICogYXRvbWljX2luY19hbmRfdGVzdCAtIGluY3JlbWVudCBhbmQgdGVzdAorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHJlc3VsdCBpcyAwLgorICovCisjZGVmaW5lIGF0b21pY19pbmNfYW5kX3Rlc3QodikJCShhdG9taWNfaW5jX3JldHVybih2KSA9PSAwKQorCisvKioKKyAqIGF0b21pY19hZGRfbmVnYXRpdmUgLSBhZGQgYW5kIHRlc3QgaWYgbmVnYXRpdmUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIGFkZAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMKKyAqIG5lZ2F0aXZlLCBvciBmYWxzZSB3aGVuIHJlc3VsdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAqLworI2RlZmluZSBhdG9taWNfYWRkX25lZ2F0aXZlKGksIHYpCShhdG9taWNfYWRkX3JldHVybigoaSksICh2KSkgPCAwKQorCisvKioKKyAqIGF0b21pY19pbmNfbm90X3plcm8gLSBpbmNyZW1lbnQgdW5sZXNzIHRoZSBudW1iZXIgaXMgemVybworICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxLCBzbyBsb25nIGFzIEB2IGlzIG5vbi16ZXJvLgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm9uLXplcm8sIGFuZCB6ZXJvIG90aGVyd2lzZS4KKyAqLworI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpCQlhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCisKKworLyoKKyAqIFdlIGRlZmluZSB4Y2hnKCkgYW5kIGNtcHhjaGcoKSBpbiB0aGUgaW5jbHVkZWQgaGVhZGVycy4KKyAqIE5vdGUgdGhhdCB3ZSBkbyBub3QgZGVmaW5lIF9fSEFWRV9BUkNIX0NNUFhDSEcsIHNpbmNlIHRoYXQgd291bGQgaW1wbHkKKyAqIHRoYXQgY21weGNoZygpIGlzIGFuIGVmZmljaWVudCBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdCBwYXJ0aWN1bGFybHkgdHJ1ZS4KKyAqLworCisvKiBOb25leGlzdGVudCBmdW5jdGlvbnMgaW50ZW5kZWQgdG8gY2F1c2UgbGluayBlcnJvcnMuICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKKyNkZWZpbmUgdGFzKHB0cikgKHhjaGcoKHB0ciksIDEpKQorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNpZm5kZWYgX190aWxlZ3hfXworI2luY2x1ZGUgPGFzbS9hdG9taWNfMzIuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL2F0b21pY182NC5oPgorI2VuZGlmCisKKy8qIFByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIGF0b21pY19sb25nX3QgZGVmaW5pdGlvbnMuICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F0b21pYy1sb25nLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fVElMRV9BVE9NSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTVhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXRvbWljXzMyLmgKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogRG8gbm90IGluY2x1ZGUgZGlyZWN0bHk7IHVzZSA8YXNtL2F0b21pYy5oPi4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9BVE9NSUNfMzJfSAorI2RlZmluZSBfQVNNX1RJTEVfQVRPTUlDXzMyX0gKKworI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBUaWxlLXNwZWNpZmljIHJvdXRpbmVzIHRvIHN1cHBvcnQgPGFzbS9hdG9taWMuaD4uICovCitpbnQgX2F0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbik7CitpbnQgX2F0b21pY194Y2hnX2FkZChhdG9taWNfdCAqdiwgaW50IGkpOworaW50IF9hdG9taWNfeGNoZ19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpOworaW50IF9hdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG8sIGludCBuKTsKKworLyoqCisgKiBhdG9taWNfeGNoZyAtIGF0b21pY2FsbHkgZXhjaGFuZ2UgY29udGVudHMgb2YgbWVtb3J5IHdpdGggYSBuZXcgdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN0b3JlIGluIG1lbW9yeQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyBAdiB0byBAaSBhbmQgcmV0dXJucyBvbGQgQHYKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuKQoreworCXNtcF9tYigpOyAgLyogYmFycmllciBmb3IgcHJvcGVyIHNlbWFudGljcyAqLworCXJldHVybiBfYXRvbWljX3hjaGcodiwgbik7Cit9CisKKy8qKgorICogYXRvbWljX2NtcHhjaGcgLSBhdG9taWNhbGx5IGV4Y2hhbmdlIGNvbnRlbnRzIG9mIG1lbW9yeSBpZiBpdCBtYXRjaGVzCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pY190CisgKiBAbzogb2xkIHZhbHVlIHRoYXQgbWVtb3J5IHNob3VsZCBoYXZlCisgKiBAbjogbmV3IHZhbHVlIHRvIHdyaXRlIHRvIG1lbW9yeSBpZiBpdCBtYXRjaGVzCisgKgorICogQXRvbWljYWxseSBjaGVja3MgaWYgQHYgaG9sZHMgQG8gYW5kIHJlcGxhY2VzIGl0IHdpdGggQG4gaWYgc28uCisgKiBSZXR1cm5zIHRoZSBvbGQgdmFsdWUgYXQgQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgbywgaW50IG4pCit7CisJc21wX21iKCk7ICAvKiBiYXJyaWVyIGZvciBwcm9wZXIgc2VtYW50aWNzICovCisJcmV0dXJuIF9hdG9taWNfY21weGNoZyh2LCBvLCBuKTsKK30KKworLyoqCisgKiBhdG9taWNfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGkgdG8gQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqdikKK3sKKwlfYXRvbWljX3hjaGdfYWRkKHYsIGkpOworfQorCisvKioKKyAqIGF0b21pY19hZGRfcmV0dXJuIC0gYWRkIGludGVnZXIgYW5kIHJldHVybgorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQoreworCXNtcF9tYigpOyAgLyogYmFycmllciBmb3IgcHJvcGVyIHNlbWFudGljcyAqLworCXJldHVybiBfYXRvbWljX3hjaGdfYWRkKHYsIGkpICsgaTsKK30KKworLyoqCisgKiBhdG9taWNfYWRkX3VubGVzcyAtIGFkZCB1bmxlc3MgdGhlIG51bWJlciBpcyBhbHJlYWR5IGEgZ2l2ZW4gdmFsdWUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBhOiB0aGUgYW1vdW50IHRvIGFkZCB0byB2Li4uCisgKiBAdTogLi4udW5sZXNzIHYgaXMgZXF1YWwgdG8gdS4KKyAqCisgKiBBdG9taWNhbGx5IGFkZHMgQGEgdG8gQHYsIHNvIGxvbmcgYXMgQHYgd2FzIG5vdCBhbHJlYWR5IEB1LgorICogUmV0dXJucyBub24temVybyBpZiBAdiB3YXMgbm90IEB1LCBhbmQgemVybyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCit7CisJc21wX21iKCk7ICAvKiBiYXJyaWVyIGZvciBwcm9wZXIgc2VtYW50aWNzICovCisJcmV0dXJuIF9hdG9taWNfeGNoZ19hZGRfdW5sZXNzKHYsIGEsIHUpICE9IHU7Cit9CisKKy8qKgorICogYXRvbWljX3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljX3QKKyAqIEBpOiByZXF1aXJlZCB2YWx1ZQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyB0aGUgdmFsdWUgb2YgQHYgdG8gQGkuCisgKgorICogYXRvbWljX3NldCgpIGNhbid0IGJlIGp1c3QgYSByYXcgc3RvcmUsIHNpbmNlIGl0IHdvdWxkIGJlIGxvc3QgaWYgaXQKKyAqIGZlbGwgYmV0d2VlbiB0aGUgbG9hZCBhbmQgc3RvcmUgb2Ygb25lIG9mIHRoZSBvdGhlciBhdG9taWMgb3BzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IG4pCit7CisJX2F0b21pY194Y2hnKHYsIG4pOworfQorCisjZGVmaW5lIHhjaGcocHRyLCB4KSAoKHR5cGVvZigqKHB0cikpKSBcCisgICgoc2l6ZW9mKCoocHRyKSkgPT0gc2l6ZW9mKGF0b21pY190KSkgPyBcCisgICBhdG9taWNfeGNoZygoYXRvbWljX3QgKikocHRyKSwgKGxvbmcpKHgpKSA6IFwKKyAgIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpKSkKKworI2RlZmluZSBjbXB4Y2hnKHB0ciwgbywgbikgKCh0eXBlb2YoKihwdHIpKSkgXAorICAoKHNpemVvZigqKHB0cikpID09IHNpemVvZihhdG9taWNfdCkpID8gXAorICAgYXRvbWljX2NtcHhjaGcoKGF0b21pY190ICopKHB0ciksIChsb25nKShvKSwgKGxvbmcpKG4pKSA6IFwKKyAgIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpKSkKKworLyogQSA2NGJpdCBhdG9taWMgdHlwZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTY0IF9fYWxpZ25lZCg4KSBjb3VudGVyOworfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQodmFsKSB7ICh2YWwpIH0KKwordTY0IF9hdG9taWM2NF94Y2hnKGF0b21pYzY0X3QgKnYsIHU2NCBuKTsKK3U2NCBfYXRvbWljNjRfeGNoZ19hZGQoYXRvbWljNjRfdCAqdiwgdTY0IGkpOwordTY0IF9hdG9taWM2NF94Y2hnX2FkZF91bmxlc3MoYXRvbWljNjRfdCAqdiwgdTY0IGEsIHU2NCB1KTsKK3U2NCBfYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCB1NjQgbywgdTY0IG4pOworCisvKioKKyAqIGF0b21pYzY0X3JlYWQgLSByZWFkIGF0b21pYyB2YXJpYWJsZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKgorICogQXRvbWljYWxseSByZWFkcyB0aGUgdmFsdWUgb2YgQHYuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGF0b21pYzY0X3JlYWQoY29uc3QgYXRvbWljNjRfdCAqdikKK3sKKwkvKgorCSAqIFJlcXVpcmVzIGFuIGF0b21pYyBvcCB0byByZWFkIGJvdGggMzItYml0IHBhcnRzIGNvbnNpc3RlbnRseS4KKwkgKiBDYXN0aW5nIGF3YXkgY29uc3QgaXMgc2FmZSBzaW5jZSB0aGUgYXRvbWljIHN1cHBvcnQgcm91dGluZXMKKwkgKiBkbyBub3Qgd3JpdGUgdG8gbWVtb3J5IGlmIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQuCisJICovCisJcmV0dXJuIF9hdG9taWM2NF94Y2hnX2FkZCgoYXRvbWljNjRfdCAqKXYsIDApOworfQorCisvKioKKyAqIGF0b21pYzY0X3hjaGcgLSBhdG9taWNhbGx5IGV4Y2hhbmdlIGNvbnRlbnRzIG9mIG1lbW9yeSB3aXRoIGEgbmV3IHZhbHVlCisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqIEBpOiBpbnRlZ2VyIHZhbHVlIHRvIHN0b3JlIGluIG1lbW9yeQorICoKKyAqIEF0b21pY2FsbHkgc2V0cyBAdiB0byBAaSBhbmQgcmV0dXJucyBvbGQgQHYKKyAqLworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCB1NjQgbikKK3sKKwlzbXBfbWIoKTsgIC8qIGJhcnJpZXIgZm9yIHByb3BlciBzZW1hbnRpY3MgKi8KKwlyZXR1cm4gX2F0b21pYzY0X3hjaGcodiwgbik7Cit9CisKKy8qKgorICogYXRvbWljNjRfY21weGNoZyAtIGF0b21pY2FsbHkgZXhjaGFuZ2UgY29udGVudHMgb2YgbWVtb3J5IGlmIGl0IG1hdGNoZXMKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQG86IG9sZCB2YWx1ZSB0aGF0IG1lbW9yeSBzaG91bGQgaGF2ZQorICogQG46IG5ldyB2YWx1ZSB0byB3cml0ZSB0byBtZW1vcnkgaWYgaXQgbWF0Y2hlcworICoKKyAqIEF0b21pY2FsbHkgY2hlY2tzIGlmIEB2IGhvbGRzIEBvIGFuZCByZXBsYWNlcyBpdCB3aXRoIEBuIGlmIHNvLgorICogUmV0dXJucyB0aGUgb2xkIHZhbHVlIGF0IEB2LgorICovCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9jbXB4Y2hnKGF0b21pYzY0X3QgKnYsIHU2NCBvLCB1NjQgbikKK3sKKwlzbXBfbWIoKTsgIC8qIGJhcnJpZXIgZm9yIHByb3BlciBzZW1hbnRpY3MgKi8KKwlyZXR1cm4gX2F0b21pYzY0X2NtcHhjaGcodiwgbywgbik7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkIC0gYWRkIGludGVnZXIgdG8gYXRvbWljIHZhcmlhYmxlCisgKiBAaTogaW50ZWdlciB2YWx1ZSB0byBhZGQKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgYWRkcyBAaSB0byBAdi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X2FkZCh1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlfYXRvbWljNjRfeGNoZ19hZGQodiwgaSk7Cit9CisKKy8qKgorICogYXRvbWljNjRfYWRkX3JldHVybiAtIGFkZCBpbnRlZ2VyIGFuZCByZXR1cm4KKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGk6IGludGVnZXIgdmFsdWUgdG8gYWRkCisgKgorICogQXRvbWljYWxseSBhZGRzIEBpIHRvIEB2IGFuZCByZXR1cm5zIEBpICsgQHYKKyAqLworc3RhdGljIGlubGluZSB1NjQgYXRvbWljNjRfYWRkX3JldHVybih1NjQgaSwgYXRvbWljNjRfdCAqdikKK3sKKwlzbXBfbWIoKTsgIC8qIGJhcnJpZXIgZm9yIHByb3BlciBzZW1hbnRpY3MgKi8KKwlyZXR1cm4gX2F0b21pYzY0X3hjaGdfYWRkKHYsIGkpICsgaTsKK30KKworLyoqCisgKiBhdG9taWM2NF9hZGRfdW5sZXNzIC0gYWRkIHVubGVzcyB0aGUgbnVtYmVyIGlzIGFscmVhZHkgYSBnaXZlbiB2YWx1ZQorICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWM2NF90CisgKiBAYTogdGhlIGFtb3VudCB0byBhZGQgdG8gdi4uLgorICogQHU6IC4uLnVubGVzcyB2IGlzIGVxdWFsIHRvIHUuCisgKgorICogQXRvbWljYWxseSBhZGRzIEBhIHRvIEB2LCBzbyBsb25nIGFzIEB2IHdhcyBub3QgYWxyZWFkeSBAdS4KKyAqIFJldHVybnMgbm9uLXplcm8gaWYgQHYgd2FzIG5vdCBAdSwgYW5kIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIHU2NCBhdG9taWM2NF9hZGRfdW5sZXNzKGF0b21pYzY0X3QgKnYsIHU2NCBhLCB1NjQgdSkKK3sKKwlzbXBfbWIoKTsgIC8qIGJhcnJpZXIgZm9yIHByb3BlciBzZW1hbnRpY3MgKi8KKwlyZXR1cm4gX2F0b21pYzY0X3hjaGdfYWRkX3VubGVzcyh2LCBhLCB1KSAhPSB1OworfQorCisvKioKKyAqIGF0b21pYzY0X3NldCAtIHNldCBhdG9taWMgdmFyaWFibGUKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICogQGk6IHJlcXVpcmVkIHZhbHVlCisgKgorICogQXRvbWljYWxseSBzZXRzIHRoZSB2YWx1ZSBvZiBAdiB0byBAaS4KKyAqCisgKiBhdG9taWM2NF9zZXQoKSBjYW4ndCBiZSBqdXN0IGEgcmF3IHN0b3JlLCBzaW5jZSBpdCB3b3VsZCBiZSBsb3N0IGlmIGl0CisgKiBmZWxsIGJldHdlZW4gdGhlIGxvYWQgYW5kIHN0b3JlIG9mIG9uZSBvZiB0aGUgb3RoZXIgYXRvbWljIG9wcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGF0b21pYzY0X3NldChhdG9taWM2NF90ICp2LCB1NjQgbikKK3sKKwlfYXRvbWljNjRfeGNoZyh2LCBuKTsKK30KKworI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pYzY0X2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jKHYpCQkJYXRvbWljNjRfYWRkKDFMTCwgKHYpKQorI2RlZmluZSBhdG9taWM2NF9pbmNfcmV0dXJuKHYpCQlhdG9taWM2NF9hZGRfcmV0dXJuKDFMTCwgKHYpKQorI2RlZmluZSBhdG9taWM2NF9pbmNfYW5kX3Rlc3QodikJKGF0b21pYzY0X2luY19yZXR1cm4odikgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLCB2KQlhdG9taWM2NF9hZGRfcmV0dXJuKC0oaSksICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGEsIHYpCShhdG9taWM2NF9zdWJfcmV0dXJuKChhKSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9zdWIoaSwgdikJCWF0b21pYzY0X2FkZCgtKGkpLCAodikpCisjZGVmaW5lIGF0b21pYzY0X2RlYyh2KQkJCWF0b21pYzY0X3N1YigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX3JldHVybih2KQkJYXRvbWljNjRfc3ViX3JldHVybigxTEwsICh2KSkKKyNkZWZpbmUgYXRvbWljNjRfZGVjX2FuZF90ZXN0KHYpCShhdG9taWM2NF9kZWNfcmV0dXJuKCh2KSkgPT0gMCkKKyNkZWZpbmUgYXRvbWljNjRfaW5jX25vdF96ZXJvKHYpCWF0b21pYzY0X2FkZF91bmxlc3MoKHYpLCAxTEwsIDBMTCkKKworLyoKKyAqIFdlIG5lZWQgdG8gYmFycmllciBiZWZvcmUgbW9kaWZ5aW5nIHRoZSB3b3JkLCBzaW5jZSB0aGUgX2F0b21pY194eHgoKQorICogcm91dGluZXMganVzdCB0bnMgdGhlIGxvY2sgYW5kIHRoZW4gcmVhZC9tb2RpZnkvd3JpdGUgb2YgdGhlIHdvcmQuCisgKiBCdXQgYWZ0ZXIgdGhlIHdvcmQgaXMgdXBkYXRlZCwgdGhlIHJvdXRpbmUgaXNzdWVzIGFuICJtZiIgYmVmb3JlIHJldHVybmluZywKKyAqIGFuZCBzaW5jZSBpdCdzIGEgZnVuY3Rpb24gY2FsbCwgd2UgZG9uJ3QgZXZlbiBuZWVkIGEgY29tcGlsZXIgYmFycmllci4KKyAqLworI2RlZmluZSBzbXBfbWJfX2JlZm9yZV9hdG9taWNfZGVjKCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpCXNtcF9tYigpCisjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkJZG8geyB9IHdoaWxlICgwKQorCisKKy8qCisgKiBTdXBwb3J0ICJ0bnMiIGF0b21pYyBpbnRlZ2Vycy4gIFRoZXNlIGFyZSBhdG9taWMgaW50ZWdlcnMgdGhhdCBjYW4KKyAqIGhvbGQgYW55IHZhbHVlIGJ1dCAiMSIuICBUaGV5IGFyZSBtb3JlIGVmZmljaWVudCB0aGFuIHJlZ3VsYXIgYXRvbWljCisgKiBvcGVyYXRpb25zIGJlY2F1c2UgdGhlICJsb2NrIiAoYWthIGFjcXVpcmUpIHN0ZXAgaXMgYSBzaW5nbGUgInRucyIKKyAqIGluIHRoZSB1bmNvbnRlbmRlZCBjYXNlLCBhbmQgdGhlICJ1bmxvY2siIChha2EgcmVsZWFzZSkgc3RlcCBpcyBhCisgKiBzaW5nbGUgInN0b3JlIiB3aXRob3V0IGFuIG1mLiAgKEhvd2V2ZXIsIG5vdGUgdGhhdCBvbiB0aWxlcHJvIHRoZQorICogInRucyIgd2lsbCBldmljdCB0aGUgbG9jYWwgY2FjaGUgbGluZSwgc28gaXQncyBub3QgYWxsIHVwc2lkZS4pCisgKgorICogTm90ZSB0aGF0IHlvdSBjYW4gT05MWSBvYnNlcnZlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlIHBvaW50ZXIKKyAqIHVzaW5nIHRoZXNlIG9wZXJhdGlvbnM7IGEgZGlyZWN0IHJlYWQgb2YgdGhlIHZhbHVlIG1heSBjb25mdXNpbmdseQorICogcmV0dXJuIHRoZSBzcGVjaWFsIHZhbHVlICIxIi4KKyAqLworCitpbnQgX190bnNfYXRvbWljX2FjcXVpcmUoYXRvbWljX3QgKik7Cit2b2lkIF9fdG5zX2F0b21pY19yZWxlYXNlKGF0b21pY190ICpwLCBpbnQgdik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bnNfYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCit7CisJX190bnNfYXRvbWljX2FjcXVpcmUodik7CisJX190bnNfYXRvbWljX3JlbGVhc2UodiwgaSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRuc19hdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG8sIGludCBuKQoreworCWludCByZXQgPSBfX3Ruc19hdG9taWNfYWNxdWlyZSh2KTsKKwlfX3Ruc19hdG9taWNfcmVsZWFzZSh2LCAocmV0ID09IG8pID8gbiA6IHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdG5zX2F0b21pY194Y2hnKGF0b21pY190ICp2LCBpbnQgbikKK3sKKwlpbnQgcmV0ID0gX190bnNfYXRvbWljX2FjcXVpcmUodik7CisJX190bnNfYXRvbWljX3JlbGVhc2Uodiwgbik7CisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIEludGVybmFsIGRlZmluaXRpb25zIG9ubHkgYmV5b25kIHRoaXMgcG9pbnQuCisgKi8KKworI2RlZmluZSBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkgXAorICAoIUNISVBfSEFTX0NCT1hfSE9NRV9NQVAoKSAmJiBkZWZpbmVkKENPTkZJR19TTVApKQorCisjaWYgQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGluIGF0b21pY19sb2NrX3B0cltdLiAqLworI2RlZmluZSBBVE9NSUNfSEFTSF9MMV9TSElGVCA2CisjZGVmaW5lIEFUT01JQ19IQVNIX0wxX1NJWkUgKDEgPDwgQVRPTUlDX0hBU0hfTDFfU0hJRlQpCisKKy8qIE51bWJlciBvZiBsb2NrcyBpbiBlYWNoIHN0cnVjdCBwb2ludGVkIHRvIGJ5IGF0b21pY19sb2NrX3B0cltdLiAqLworI2RlZmluZSBBVE9NSUNfSEFTSF9MMl9TSElGVCAoQ0hJUF9MMl9MT0dfTElORV9TSVpFKCkgLSAyKQorI2RlZmluZSBBVE9NSUNfSEFTSF9MMl9TSVpFICgxIDw8IEFUT01JQ19IQVNIX0wyX1NISUZUKQorCisjZWxzZSAvKiBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkgKi8KKworLyoKKyAqIE51bWJlciBvZiBhdG9taWMgbG9ja3MgaW4gYXRvbWljX2xvY2tzW10uIE11c3QgYmUgYSBwb3dlciBvZiB0d28uCisgKiBUaGVyZSBpcyBubyByZWFzb24gZm9yIG1vcmUgdGhhbiBQQUdFX1NJWkUgLyA4IGVudHJpZXMsIHNpbmNlIHRoYXQKKyAqIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwb2ludGVyIGJpdHMgd2UgY2FuIHVzZSB0byBpbmRleCB0aGlzLgorICogQW5kIHdlIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBQQUdFX1NJWkUgLyA0LCBzaW5jZSB0aGlzIGhhcyB0bworICogZml0IG9uIGEgc2luZ2xlIHBhZ2UgYW5kIGVhY2ggZW50cnkgdGFrZXMgNCBieXRlcy4KKyAqLworI2RlZmluZSBBVE9NSUNfSEFTSF9TSElGVCAoUEFHRV9TSElGVCAtIDMpCisjZGVmaW5lIEFUT01JQ19IQVNIX1NJWkUgKDEgPDwgQVRPTUlDX0hBU0hfU0hJRlQpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gaW50IGF0b21pY19sb2Nrc1tdOworI2VuZGlmCisKKyNlbmRpZiAvKiBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkgKi8KKworLyoKKyAqIEFsbCB0aGUgY29kZSB0aGF0IG1heSBmYXVsdCB3aGlsZSBob2xkaW5nIGFuIGF0b21pYyBsb2NrIG11c3QKKyAqIHBsYWNlIHRoZSBwb2ludGVyIHRvIHRoZSBsb2NrIGluIEFUT01JQ19MT0NLX1JFRyBzbyB0aGUgZmF1bHQgY29kZQorICogY2FuIGNvcnJlY3RseSByZWxlYXNlIGFuZCByZWFjcXVpcmUgdGhlIGxvY2suICBOb3RlIHRoYXQgd2UKKyAqIG1lbnRpb24gdGhlIHJlZ2lzdGVyIG51bWJlciBpbiBhIGNvbW1lbnQgaW4gImxpYi9hdG9taWNfYXNtLlMiIHRvIGhlbHAKKyAqIGFzc2VtYmx5IGNvZGVycyBmcm9tIHVzaW5nIHRoaXMgcmVnaXN0ZXIgYnkgbWlzdGFrZSwgc28gaWYgaXQKKyAqIGlzIGNoYW5nZWQgaGVyZSwgY2hhbmdlIHRoYXQgY29tbWVudCBhcyB3ZWxsLgorICovCisjZGVmaW5lIEFUT01JQ19MT0NLX1JFRyAyMAorI2RlZmluZSBBVE9NSUNfTE9DS19SRUdfTkFNRSByMjAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIENhbGxlZCBmcm9tIHNldHVwIHRvIGluaXRpYWxpemUgYSBoYXNoIHRhYmxlIHRvIHBvaW50IHRvIHBlcl9jcHUgbG9ja3MuICovCit2b2lkIF9faW5pdF9hdG9taWNfcGVyX2NwdSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TTVAKKy8qIFN1cHBvcnQgcmVsZWFzaW5nIHRoZSBhdG9taWMgbG9jayBpbiBkb19wYWdlX2ZhdWx0X2ljcygpLiAqLwordm9pZCBfX2F0b21pY19mYXVsdF91bmxvY2soaW50ICpsb2NrX3B0cik7CisjZW5kaWYKKworLyogUHJpdmF0ZSBoZWxwZXIgcm91dGluZXMgaW4gbGliL2F0b21pY19hc21fMzIuUyAqLworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIF9fYXRvbWljX2NtcHhjaGcodm9sYXRpbGUgaW50ICpwLAorCQkJCQkgIGludCAqbG9jaywgaW50IG8sIGludCBuKTsKK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBfX2F0b21pY194Y2hnKHZvbGF0aWxlIGludCAqcCwgaW50ICpsb2NrLCBpbnQgbik7CitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgX19hdG9taWNfeGNoZ19hZGQodm9sYXRpbGUgaW50ICpwLCBpbnQgKmxvY2ssIGludCBuKTsKK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBfX2F0b21pY194Y2hnX2FkZF91bmxlc3Modm9sYXRpbGUgaW50ICpwLAorCQkJCQkJICBpbnQgKmxvY2ssIGludCBvLCBpbnQgbik7CitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgX19hdG9taWNfb3Iodm9sYXRpbGUgaW50ICpwLCBpbnQgKmxvY2ssIGludCBuKTsKK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBfX2F0b21pY19hbmRuKHZvbGF0aWxlIGludCAqcCwgaW50ICpsb2NrLCBpbnQgbik7CitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgX19hdG9taWNfeG9yKHZvbGF0aWxlIGludCAqcCwgaW50ICpsb2NrLCBpbnQgbik7CitleHRlcm4gdTY0IF9fYXRvbWljNjRfY21weGNoZyh2b2xhdGlsZSB1NjQgKnAsIGludCAqbG9jaywgdTY0IG8sIHU2NCBuKTsKK2V4dGVybiB1NjQgX19hdG9taWM2NF94Y2hnKHZvbGF0aWxlIHU2NCAqcCwgaW50ICpsb2NrLCB1NjQgbik7CitleHRlcm4gdTY0IF9fYXRvbWljNjRfeGNoZ19hZGQodm9sYXRpbGUgdTY0ICpwLCBpbnQgKmxvY2ssIHU2NCBuKTsKK2V4dGVybiB1NjQgX19hdG9taWM2NF94Y2hnX2FkZF91bmxlc3Modm9sYXRpbGUgdTY0ICpwLAorCQkJCSAgICAgIGludCAqbG9jaywgdTY0IG8sIHU2NCBuKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9BU01fVElMRV9BVE9NSUNfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F1eHZlYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2F1eHZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzkzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYXV4dmVjLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9BVVhWRUNfSAorI2RlZmluZSBfQVNNX1RJTEVfQVVYVkVDX0gKKworLyogTm8gZXh0ZW5zaW9ucyB0byBhdXh2ZWMgKi8KKworI2VuZGlmIC8qIF9BU01fVElMRV9BVVhWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JhY2t0cmFjZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JhY2t0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NzBiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYmFja3RyYWNlLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfVElMRV9CQUNLVFJBQ0VfSAorI2RlZmluZSBfVElMRV9CQUNLVFJBQ0VfSAorCisKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2lmIENISVBfVkFfV0lEVEgoKSA+IDMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBWaXJ0dWFsQWRkcmVzczsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGludCBWaXJ0dWFsQWRkcmVzczsKKyNlbmRpZgorCisKKy8qKiBSZWFkcyAnc2l6ZScgYnl0ZXMgZnJvbSAnYWRkcmVzcycgYW5kIHdyaXRlcyB0aGUgZGF0YSB0byAncmVzdWx0Jy4KKyAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsLCBlbHNlIGZhbHNlIChlLmcuIG1lbW9yeSBub3QgcmVhZGFibGUpLgorICovCit0eXBlZGVmIGJvb2wgKCpCYWNrdHJhY2VNZW1vcnlSZWFkZXIpKHZvaWQgKnJlc3VsdCwKKwkJCQkgICAgICBWaXJ0dWFsQWRkcmVzcyBhZGRyZXNzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBzaXplLAorCQkJCSAgICAgIHZvaWQgKmV4dHJhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qKiBDdXJyZW50IFBDLiAqLworCVZpcnR1YWxBZGRyZXNzIHBjOworCisJLyoqIEN1cnJlbnQgc3RhY2sgcG9pbnRlciB2YWx1ZS4gKi8KKwlWaXJ0dWFsQWRkcmVzcyBzcDsKKworCS8qKiBDdXJyZW50IGZyYW1lIHBvaW50ZXIgdmFsdWUgKGkuZS4gY2FsbGVyJ3Mgc3RhY2sgcG9pbnRlcikgKi8KKwlWaXJ0dWFsQWRkcmVzcyBmcDsKKworCS8qKiBJbnRlcm5hbCB1c2Ugb25seTogY2FsbGVyJ3MgUEMgZm9yIGZpcnN0IGZyYW1lLiAqLworCVZpcnR1YWxBZGRyZXNzIGluaXRpYWxfZnJhbWVfY2FsbGVyX3BjOworCisJLyoqIEludGVybmFsIHVzZSBvbmx5OiBjYWxsYmFjayB0byByZWFkIG1lbW9yeS4gKi8KKwlCYWNrdHJhY2VNZW1vcnlSZWFkZXIgcmVhZF9tZW1vcnlfZnVuYzsKKworCS8qKiBJbnRlcm5hbCB1c2Ugb25seTogYXJiaXRyYXJ5IGFyZ3VtZW50IHRvIHJlYWRfbWVtb3J5X2Z1bmMuICovCisJdm9pZCAqcmVhZF9tZW1vcnlfZnVuY19leHRyYTsKKworfSBCYWNrdHJhY2VJdGVyYXRvcjsKKworCisvKiogSW5pdGlhbGl6ZXMgYSBiYWNrdHJhY2VyIHRvIHN0YXJ0IGZyb20gdGhlIGdpdmVuIGxvY2F0aW9uLgorICoKKyAqIElmIHRoZSBmcmFtZSBwb2ludGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGl0IGlzIHNldCB0byAtMS4KKyAqCisgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGJlIGZpbGxlZCBpbi4KKyAqIEBwYXJhbSByZWFkX21lbW9yeV9mdW5jIEEgY2FsbGJhY2sgdGhhdCByZWFkcyBtZW1vcnkuIElmIE5VTEwsIGEgZGVmYXVsdAorICogICAgICAgIHZhbHVlIGlzIHByb3ZpZGVkLgorICogQHBhcmFtIHJlYWRfbWVtb3J5X2Z1bmNfZXh0cmEgQW4gYXJiaXRyYXJ5IGFyZ3VtZW50IHRvIHJlYWRfbWVtb3J5X2Z1bmMuCisgKiBAcGFyYW0gcGMgVGhlIGN1cnJlbnQgUEMuCisgKiBAcGFyYW0gbHIgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICdscicgcmVnaXN0ZXIuCisgKiBAcGFyYW0gc3AgVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlICdzcCcgcmVnaXN0ZXIuCisgKiBAcGFyYW0gcjUyIFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSAncjUyJyByZWdpc3Rlci4KKyAqLworZXh0ZXJuIHZvaWQgYmFja3RyYWNlX2luaXQoQmFja3RyYWNlSXRlcmF0b3IgKnN0YXRlLAorCQkJICAgQmFja3RyYWNlTWVtb3J5UmVhZGVyIHJlYWRfbWVtb3J5X2Z1bmMsCisJCQkgICB2b2lkICpyZWFkX21lbW9yeV9mdW5jX2V4dHJhLAorCQkJICAgVmlydHVhbEFkZHJlc3MgcGMsIFZpcnR1YWxBZGRyZXNzIGxyLAorCQkJICAgVmlydHVhbEFkZHJlc3Mgc3AsIFZpcnR1YWxBZGRyZXNzIHI1Mik7CisKKworLyoqIEFkdmFuY2VzIHRoZSBiYWNrdHJhY2luZyBzdGF0ZSB0byB0aGUgY2FsbGluZyBmcmFtZSwgcmV0dXJuaW5nCisgKiB0cnVlIGlmZiBzdWNjZXNzZnVsLgorICovCitleHRlcm4gYm9vbCBiYWNrdHJhY2VfbmV4dChCYWNrdHJhY2VJdGVyYXRvciAqc3RhdGUpOworCisKK3R5cGVkZWYgZW51bSB7CisKKwkvKiBXZSBoYXZlIG5vIGlkZWEgd2hhdCB0aGUgY2FsbGVyJ3MgcGMgaXMuICovCisJUENfTE9DX1VOS05PV04sCisKKwkvKiBUaGUgY2FsbGVyJ3MgcGMgaXMgY3VycmVudGx5IGluIGxyLiAqLworCVBDX0xPQ19JTl9MUiwKKworCS8qIFRoZSBjYWxsZXIncyBwYyBjYW4gYmUgZm91bmQgYnkgZGVyZWZlcmVuY2luZyB0aGUgY2FsbGVyJ3Mgc3AuICovCisJUENfTE9DX09OX1NUQUNLCisKK30gQ2FsbGVyUENMb2NhdGlvbjsKKworCit0eXBlZGVmIGVudW0geworCisJLyogV2UgaGF2ZSBubyBpZGVhIHdoYXQgdGhlIGNhbGxlcidzIHNwIGlzLiAqLworCVNQX0xPQ19VTktOT1dOLAorCisJLyogVGhlIGNhbGxlcidzIHNwIGlzIGN1cnJlbnRseSBpbiByNTIuICovCisJU1BfTE9DX0lOX1I1MiwKKworCS8qIFRoZSBjYWxsZXIncyBzcCBjYW4gYmUgZm91bmQgYnkgYWRkaW5nIGEgY2VydGFpbiBjb25zdGFudAorCSAqIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHNwLgorCSAqLworCVNQX0xPQ19PRkZTRVQKKworfSBDYWxsZXJTUExvY2F0aW9uOworCisKKy8qIEJpdCB2YWx1ZXMgT1JlZCBpbnRvIENBTExFUl8qIHZhbHVlcyBmb3IgaW5mbyBvcHMuICovCitlbnVtIHsKKwkvKiBTZXR0aW5nIHRoZSBsb3cgYml0IG9uIGFueSBvZiB0aGVzZSB2YWx1ZXMgbWVhbnMgdGhlIGluZm8gb3AKKwkgKiBhcHBsaWVzIG9ubHkgdG8gb25lIGJ1bmRsZSBhZ28uCisJICovCisJT05FX0JVTkRMRV9BR09fRkxBRyA9IDEsCisKKwkvKiBTZXR0aW5nIHRoaXMgYml0IG9uIGEgQ0FMTEVSX1NQXyogdmFsdWUgbWVhbnMgdGhlIFBDIGlzIGluIExSLgorCSAqIElmIG5vdCBzZXQsIFBDIGlzIG9uIHRoZSBzdGFjay4KKwkgKi8KKwlQQ19JTl9MUl9GTEFHID0gMiwKKworCS8qIFRoaXMgbWFueSBvZiB0aGUgbG93IGJpdHMgb2YgYSBDQUxMRVJfU1BfKiB2YWx1ZSBhcmUgZm9yIHRoZQorCSAqIGZsYWcgYml0cyBhYm92ZS4KKwkgKi8KKwlOVU1fSU5GT19PUF9GTEFHUyA9IDIsCisKKwkvKiBXZSBjYW5ub3QgaGF2ZSBvbmUgaW4gdGhlIG1lbW9yeSBwaXBlIHNvIHRoaXMgaXMgdGhlIG1heGltdW0uICovCisJTUFYX0lORk9fT1BTX1BFUl9CVU5ETEUgPSAyCit9OworCisKKy8qKiBJbnRlcm5hbCBjb25zdGFudHMgdXNlZCB0byBkZWZpbmUgJ2luZm8nIG9wZXJhbmRzLiAqLworZW51bSB7CisJLyogMCBhbmQgMSBhcmUgcmVzZXJ2ZWQsIGFzIGFyZSBhbGwgbmVnYXRpdmUgbnVtYmVycy4gKi8KKworCUNBTExFUl9VTktOT1dOX0JBU0UgPSAyLAorCisJQ0FMTEVSX1NQX0lOX1I1Ml9CQVNFID0gNCwKKworCUNBTExFUl9TUF9PRkZTRVRfQkFTRSA9IDgKK307CisKKworLyoqIEN1cnJlbnQgYmFja3RyYWNlciBzdGF0ZSBkZXNjcmliaW5nIHdoZXJlIGl0IHRoaW5rcyB0aGUgY2FsbGVyIGlzLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCS8qCisJICogUHVibGljIGZpZWxkcworCSAqLworCisJLyogSG93IGRvIHdlIGZpbmQgdGhlIGNhbGxlcidzIFBDPyAqLworCUNhbGxlclBDTG9jYXRpb24gcGNfbG9jYXRpb24gOiA4OworCisJLyogSG93IGRvIHdlIGZpbmQgdGhlIGNhbGxlcidzIFNQPyAqLworCUNhbGxlclNQTG9jYXRpb24gc3BfbG9jYXRpb24gOiA4OworCisJLyogSWYgc3BfbG9jYXRpb24gPT0gU1BfTE9DX09GRlNFVCwgdGhlbiBjYWxsZXJfc3AgPT0gc3AgKworCSAqIGxvYy0+c3Bfb2Zmc2V0LiBFbHNlIHRoaXMgZmllbGQgaXMgdW5kZWZpbmVkLgorCSAqLworCXVpbnQxNl90IHNwX29mZnNldDsKKworCS8qIEluIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgYnVuZGxlIGEgdGVybWluYXRpbmcgYnVuZGxlPyAqLworCWJvb2wgYXRfdGVybWluYXRpbmdfYnVuZGxlOworCisJLyoKKwkgKiBQcml2YXRlIGZpZWxkcworCSAqLworCisJLyogV2lsbCB0aGUgZm9yd2FyZCBzY2FubmVyIHNlZSBzb21lb25lIGNsb2JiZXJpbmcgc3AKKwkgKiAoaS5lLiBjaGFuZ2luZyBpdCB3aXRoIHNvbWV0aGluZyBvdGhlciB0aGFuIGFkZGkgc3AsIHNwLCBOPykKKwkgKi8KKwlib29sIHNwX2Nsb2JiZXJfZm9sbG93czsKKworCS8qIE9wZXJhbmQgdG8gbmV4dCAidmlzaWJsZSIgaW5mbyBvcCAobm8gbW9yZSB0aGFuIG9uZSBidW5kbGUgcGFzdAorCSAqIHRoZSBuZXh0IHRlcm1pbmF0aW5nIGJ1bmRsZSksIG9yIC0zMjc2OCBpZiBub25lLgorCSAqLworCWludDE2X3QgbmV4dF9pbmZvX29wZXJhbmQ7CisKKwkvKiBJcyB0aGUgaW5mbyBvZiBpbiBuZXh0X2luZm9fb3AgaW4gdGhlIHZlcnkgbmV4dCBidW5kbGU/ICovCisJYm9vbCBpc19uZXh0X2luZm9fb3BlcmFuZF9hZGphY2VudDsKKworfSBDYWxsZXJMb2NhdGlvbjsKKworCisKKworI2VuZGlmIC8qIF9USUxFX0JBQ0tUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2MDBmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAxOTkyLCBMaW51cyBUb3J2YWxkcy4KKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9CSVRPUFNfSAorI2RlZmluZSBfQVNNX1RJTEVfQklUT1BTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKKyNpZmRlZiBfX3RpbGVneF9fCisjaW5jbHVkZSA8YXNtL2JpdG9wc182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vYml0b3BzXzMyLmg+CisjZW5kaWYKKworLyoqCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3Qgc2V0IGJpdCBpbiB3b3JkCisgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIHNldCBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJcmV0dXJuIF9fYnVpbHRpbl9jdHpsKHdvcmQpOworfQorCisvKioKKyAqIGZmeiAtIGZpbmQgZmlyc3QgemVybyBiaXQgaW4gd29yZAorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyB6ZXJvIGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB+MFVMIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlyZXR1cm4gX19idWlsdGluX2N0emwofndvcmQpOworfQorCisvKioKKyAqIF9fZmxzIC0gZmluZCBsYXN0IHNldCBiaXQgaW4gd29yZAorICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBzZXQgYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mbHModW5zaWduZWQgbG9uZyB3b3JkKQoreworCXJldHVybiAoc2l6ZW9mKHdvcmQpICogOCkgLSAxIC0gX19idWlsdGluX2Nsemwod29yZCk7Cit9CisKKy8qKgorICogZmZzIC0gZmluZCBmaXJzdCBzZXQgYml0IGluIHdvcmQKKyAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgdGhlIHNhbWUgd2F5IGFzIHRoZSBsaWJjIGFuZCBjb21waWxlciBidWlsdGluIGZmcworICogcm91dGluZXMsIHRoZXJlZm9yZSBkaWZmZXJzIGluIHNwaXJpdCBmcm9tIHRoZSBvdGhlciBiaXRvcHMuCisgKgorICogZmZzKHZhbHVlKSByZXR1cm5zIDAgaWYgdmFsdWUgaXMgMCBvciB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0CisgKiBzZXQgYml0IGlmIHZhbHVlIGlzIG5vbnplcm8uIFRoZSBmaXJzdCAobGVhc3Qgc2lnbmlmaWNhbnQpIGJpdAorICogaXMgYXQgcG9zaXRpb24gMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmZzKGludCB4KQoreworCXJldHVybiBfX2J1aWx0aW5fZmZzKHgpOworfQorCisvKioKKyAqIGZscyAtIGZpbmQgbGFzdCBzZXQgYml0IGluIHdvcmQKKyAqIEB4OiB0aGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBUaGlzIGlzIGRlZmluZWQgaW4gYSBzaW1pbGFyIHdheSBhcyB0aGUgbGliYyBhbmQgY29tcGlsZXIgYnVpbHRpbgorICogZmZzLCBidXQgcmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgc2V0IGJpdC4KKyAqCisgKiBmbHModmFsdWUpIHJldHVybnMgMCBpZiB2YWx1ZSBpcyAwIG9yIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdAorICogc2V0IGJpdCBpZiB2YWx1ZSBpcyBub256ZXJvLiBUaGUgbGFzdCAobW9zdCBzaWduaWZpY2FudCkgYml0IGlzCisgKiBhdCBwb3NpdGlvbiAzMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZmxzKGludCB4KQoreworCXJldHVybiAoc2l6ZW9mKGludCkgKiA4KSAtIF9fYnVpbHRpbl9jbHooeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZsczY0KF9fdTY0IHcpCit7CisJcmV0dXJuIChzaXplb2YoX191NjQpICogOCkgLSBfX2J1aWx0aW5fY2x6bGwodyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGh3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKK3sKKwlyZXR1cm4gX19idWlsdGluX3BvcGNvdW50KHcpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBod2VpZ2h0MTYodW5zaWduZWQgaW50IHcpCit7CisJcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh3ICYgMHhmZmZmKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaHdlaWdodDgodW5zaWduZWQgaW50IHcpCit7CisJcmV0dXJuIF9fYnVpbHRpbl9wb3Bjb3VudCh3ICYgMHhmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBod2VpZ2h0NjQoX191NjQgdykKK3sKKwlyZXR1cm4gX19idWlsdGluX3BvcGNvdW50bGwodyk7Cit9CisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KKworI2VuZGlmIC8qIF9BU01fVElMRV9CSVRPUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdG9wc18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOTNjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYml0b3BzXzMyLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfQklUT1BTXzMyX0gKKyNkZWZpbmUgX0FTTV9USUxFX0JJVE9QU18zMl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKy8qIFRpbGUtc3BlY2lmaWMgcm91dGluZXMgdG8gc3VwcG9ydCA8YXNtL2JpdG9wcy5oPi4gKi8KK3Vuc2lnbmVkIGxvbmcgX2F0b21pY19vcih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIG1hc2spOwordW5zaWduZWQgbG9uZyBfYXRvbWljX2FuZG4odm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK3Vuc2lnbmVkIGxvbmcgX2F0b21pY194b3Iodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKworLyoqCisgKiBzZXRfYml0IC0gQXRvbWljYWxseSBzZXQgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KKyAqIFNlZSBfX3NldF9iaXQoKSBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNldF9iaXQodW5zaWduZWQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJX2F0b21pY19vcihhZGRyICsgQklUX1dPUkQobnIpLCBCSVRfTUFTSyhucikpOworfQorCisvKioKKyAqIGNsZWFyX2JpdCAtIENsZWFycyBhIGJpdCBpbiBtZW1vcnkKKyAqIEBucjogQml0IHRvIGNsZWFyCisgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCisgKgorICogY2xlYXJfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KKyAqIFNlZSBfX2NsZWFyX2JpdCgpIGlmIHlvdSBkbyBub3QgcmVxdWlyZSB0aGUgYXRvbWljIGd1YXJhbnRlZXMuCisgKiBOb3RlIHRoYXQgQG5yIG1heSBiZSBhbG1vc3QgYXJiaXRyYXJpbHkgbGFyZ2U7IHRoaXMgZnVuY3Rpb24gaXMgbm90CisgKiByZXN0cmljdGVkIHRvIGFjdGluZyBvbiBhIHNpbmdsZS13b3JkIHF1YW50aXR5LgorICoKKyAqIGNsZWFyX2JpdCgpIG1heSBub3QgY29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvcgorICogbG9ja2luZyBwdXJwb3NlcywgeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGFuZC9vcgorICogc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKSB0byBlbnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBjcHVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KHVuc2lnbmVkIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCV9hdG9taWNfYW5kbihhZGRyICsgQklUX1dPUkQobnIpLCBCSVRfTUFTSyhucikpOworfQorCisvKioKKyAqIGNoYW5nZV9iaXQgLSBUb2dnbGUgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjaGFuZ2UKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBjaGFuZ2VfYml0KCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4KKyAqIFNlZSBfX2NoYW5nZV9iaXQoKSBpZiB5b3UgZG8gbm90IHJlcXVpcmUgdGhlIGF0b21pYyBndWFyYW50ZWVzLgorICogTm90ZSB0aGF0IEBuciBtYXkgYmUgYWxtb3N0IGFyYml0cmFyaWx5IGxhcmdlOyB0aGlzIGZ1bmN0aW9uIGlzIG5vdAorICogcmVzdHJpY3RlZCB0byBhY3Rpbmcgb24gYSBzaW5nbGUtd29yZCBxdWFudGl0eS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQodW5zaWduZWQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJX2F0b21pY194b3IoYWRkciArIEJJVF9XT1JEKG5yKSwgQklUX01BU0sobnIpKTsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQodW5zaWduZWQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCWFkZHIgKz0gQklUX1dPUkQobnIpOworCXNtcF9tYigpOyAgLyogYmFycmllciBmb3IgcHJvcGVyIHNlbWFudGljcyAqLworCXJldHVybiAoX2F0b21pY19vcihhZGRyLCBtYXNrKSAmIG1hc2spICE9IDA7Cit9CisKKy8qKgorICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQodW5zaWduZWQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCWFkZHIgKz0gQklUX1dPUkQobnIpOworCXNtcF9tYigpOyAgLyogYmFycmllciBmb3IgcHJvcGVyIHNlbWFudGljcyAqLworCXJldHVybiAoX2F0b21pY19hbmRuKGFkZHIsIG1hc2spICYgbWFzaykgIT0gMDsKK30KKworLyoqCisgKiB0ZXN0X2FuZF9jaGFuZ2VfYml0IC0gQ2hhbmdlIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQorICogQG5yOiBCaXQgdG8gY2hhbmdlCisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NoYW5nZV9iaXQodW5zaWduZWQgbnIsCisJCQkJICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRfTUFTSyhucik7CisJYWRkciArPSBCSVRfV09SRChucik7CisJc21wX21iKCk7ICAvKiBiYXJyaWVyIGZvciBwcm9wZXIgc2VtYW50aWNzICovCisJcmV0dXJuIChfYXRvbWljX3hvcihhZGRyLCBtYXNrKSAmIG1hc2spICE9IDA7Cit9CisKKy8qIFNlZSBkaXNjdXNzaW9uIGF0IHNtcF9tYl9fYmVmb3JlX2F0b21pY19kZWMoKSBpbiA8YXNtL2F0b21pYy5oPi4gKi8KKyNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJc21wX21iKCkKKyNkZWZpbmUgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKQlkbyB7fSB3aGlsZSAoMCkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmg+CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfQklUT1BTXzMyX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRzcGVybG9uZy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2JpdHNwZXJsb25nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjNzcxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9iaXRzcGVybG9uZy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfQklUU1BFUkxPTkdfSAorI2RlZmluZSBfQVNNX1RJTEVfQklUU1BFUkxPTkdfSAorCisjaWZkZWYgX19MUDY0X18KKyMgZGVmaW5lIF9fQklUU19QRVJfTE9ORyA2NAorI2Vsc2UKKyMgZGVmaW5lIF9fQklUU19QRVJfTE9ORyAzMgorI2VuZGlmCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRzcGVybG9uZy5oPgorCisjZW5kaWYgLyogX0FTTV9USUxFX0JJVFNQRVJMT05HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJmZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9idWdzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYnVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNzkxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYnVncy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWdzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1ODQxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxMDE4NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfQ0FDSEVfSAorI2RlZmluZSBfQVNNX1RJTEVfQ0FDSEVfSAorCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qIGJ5dGVzIHBlciBMMSBkYXRhIGNhY2hlIGxpbmUgKi8KKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCUNISVBfTDFEX0xPR19MSU5FX1NJWkUoKQorI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKy8qIGJ5dGVzIHBlciBMMiBjYWNoZSBsaW5lICovCisjZGVmaW5lIEwyX0NBQ0hFX1NISUZUCQlDSElQX0wyX0xPR19MSU5FX1NJWkUoKQorI2RlZmluZSBMMl9DQUNIRV9CWVRFUwkJKDEgPDwgTDJfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIEwyX0NBQ0hFX0FMSUdOKHgpCSgoKHgpKyhMMl9DQUNIRV9CWVRFUy0xKSkgJiAtTDJfQ0FDSEVfQllURVMpCisKKy8qCisgKiBUSUxFLUd4IGlzIGZ1bGx5IGNvaGVyZW50cyBzbyB3ZSBkb24ndCBuZWVkIHRvIGRlZmluZQorICogQVJDSF9LTUFMTE9DX01JTkFMSUdOLgorICovCisjaWZuZGVmIF9fdGlsZWd4X18KKyNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOCUwyX0NBQ0hFX0JZVEVTCisjZW5kaWYKKworLyogdXNlIHRoZSBjYWNoZSBsaW5lIHNpemUgZm9yIHRoZSBMMiwgd2hpY2ggaXMgd2hlcmUgaXQgY291bnRzICovCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFU19TSElGVAlMMl9DQUNIRV9TSElGVAorI2RlZmluZSBTTVBfQ0FDSEVfQllURVMJCUwyX0NBQ0hFX0JZVEVTCisjZGVmaW5lIElOVEVSTk9ERV9DQUNIRV9TSElGVCAgIEwyX0NBQ0hFX1NISUZUCisjZGVmaW5lIElOVEVSTk9ERV9DQUNIRV9CWVRFUyAgIEwyX0NBQ0hFX0JZVEVTCisKKy8qIEdyb3VwIHRvZ2V0aGVyIHJlYWQtbW9zdGx5IHRoaW5ncyB0byBhdm9pZCBjYWNoZSBmYWxzZSBzaGFyaW5nICovCisjZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorCisvKgorICogQXR0cmlidXRlIGZvciBkYXRhIHRoYXQgaXMga2VwdCByZWFkL3dyaXRlIGNvaGVyZW50IHVudGlsIHRoZSBlbmQgb2YKKyAqIGluaXRpYWxpemF0aW9uLCB0aGVuIGJ1bXBlZCB0byByZWFkL29ubHkgaW5jb2hlcmVudCBmb3IgcGVyZm9ybWFuY2UuCisgKi8KKyNkZWZpbmUgX193cml0ZV9vbmNlIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIudzFkYXRhIikpKQorCisjZW5kaWYgLyogX0FTTV9USUxFX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzQxZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9USUxFX0NBQ0hFRkxVU0hfSAorCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qIEtlZXAgaW5jbHVkZXMgdGhlIHNhbWUgYWNyb3NzIGFyY2hlcy4gICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhcmNoL2ljYWNoZS5oPgorCisvKiBDYWNoZXMgYXJlIHBoeXNpY2FsbHktaW5kZXhlZCBhbmQgc28gZG9uJ3QgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9kdXBfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGcsIGFkciwgbGVuKQlkbyB7IH0gd2hpbGUgKDApCisKKy8qIEZsdXNoIHRoZSBpY2FjaGUganVzdCBvbiB0aGlzIGNwdSAqLworZXh0ZXJuIHZvaWQgX19mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworCisvKiBGbHVzaCB0aGUgZW50aXJlIGljYWNoZSBvbiB0aGlzIGNwdS4gKi8KKyNkZWZpbmUgX19mbHVzaF9pY2FjaGUoKSBfX2ZsdXNoX2ljYWNoZV9yYW5nZSgwLCBDSElQX0wxSV9DQUNIRV9TSVpFKCkpCisKKyNpZmRlZiBDT05GSUdfU01QCisvKgorICogV2hlbiB0aGUga2VybmVsIHdyaXRlcyB0byBpdHMgb3duIHRleHQgd2UgbmVlZCB0byBkbyBhbiBTTVAKKyAqIGJyb2FkY2FzdCB0byBtYWtlIHRoZSBMMUkgY29oZXJlbnQgZXZlcnl3aGVyZS4gIFRoaXMgaW5jbHVkZXMKKyAqIG1vZHVsZSBsb2FkIGFuZCBzaW5nbGUgc3RlcC4KKyAqLworZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKyNlbHNlCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZSBfX2ZsdXNoX2ljYWNoZV9yYW5nZQorI2VuZGlmCisKKy8qCisgKiBBbiB1cGRhdGUgdG8gYW4gZXhlY3V0YWJsZSB1c2VyIHBhZ2UgcmVxdWlyZXMgaWNhY2hlIGZsdXNoaW5nLgorICogV2UgY291bGQgY2FyZWZ1bGx5IHVwZGF0ZSBvbmx5IHRpbGVzIHRoYXQgYXJlIHJ1bm5pbmcgdGhpcyBwcm9jZXNzLAorICogYW5kIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3ZSBmbHVzaCB0aGUgaWNhY2hlIG9uIGV2ZXJ5IGNvbnRleHQKKyAqIHN3aXRjaCB0byBhdm9pZCBkb2luZyBleHRyYSB3b3JrIGhlcmUuICBCdXQgZm9yIG5vdywgSSdsbCBiZQorICogY29uc2VydmF0aXZlIGFuZCBqdXN0IGRvIGEgZ2xvYmFsIGljYWNoZSBmbHVzaC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfdG9fdXNlcl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJICAgICB2b2lkICpkc3QsIHZvaWQgKnNyYywgaW50IGxlbikKK3sKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSB7CisJCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgZHN0LAorCQkJCSAgICh1bnNpZ25lZCBsb25nKSBkc3QgKyBsZW4pOworCX0KK30KKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoKGRzdCksIChzcmMpLCAobGVuKSkKKworLyoKKyAqIEludmFsaWRhdGUgYSBWQSByYW5nZTsgcGFkcyB0byBMMiBjYWNoZWxpbmUgYm91bmRhcmllcy4KKyAqCisgKiBOb3RlIHRoYXQgb24gVElMRTY0LCBfX2ludl9idWZmZXIoKSBhY3R1YWxseSBmbHVzaGVzIG1vZGlmaWVkCisgKiBjYWNoZSBsaW5lcyBpbiBhZGRpdGlvbiB0byBpbnZhbGlkYXRpbmcgdGhlbSwgaS5lLiwgaXQncyB0aGUKKyAqIHNhbWUgYXMgX19maW52X2J1ZmZlcigpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbnZfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJY2hhciAqbmV4dCA9IChjaGFyICopKChsb25nKWJ1ZmZlciAmIC1MMl9DQUNIRV9CWVRFUyk7CisJY2hhciAqZmluaXNoID0gKGNoYXIgKilMMl9DQUNIRV9BTElHTigobG9uZylidWZmZXIgKyBzaXplKTsKKwl3aGlsZSAobmV4dCA8IGZpbmlzaCkgeworCQlfX2luc25faW52KG5leHQpOworCQluZXh0ICs9IENISVBfSU5WX1NUUklERSgpOworCX0KK30KKworLyogRmx1c2ggYSBWQSByYW5nZTsgcGFkcyB0byBMMiBjYWNoZWxpbmUgYm91bmRhcmllcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2J1ZmZlcih2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWNoYXIgKm5leHQgPSAoY2hhciAqKSgobG9uZylidWZmZXIgJiAtTDJfQ0FDSEVfQllURVMpOworCWNoYXIgKmZpbmlzaCA9IChjaGFyICopTDJfQ0FDSEVfQUxJR04oKGxvbmcpYnVmZmVyICsgc2l6ZSk7CisJd2hpbGUgKG5leHQgPCBmaW5pc2gpIHsKKwkJX19pbnNuX2ZsdXNoKG5leHQpOworCQluZXh0ICs9IENISVBfRkxVU0hfU1RSSURFKCk7CisJfQorfQorCisvKiBGbHVzaCAmIGludmFsaWRhdGUgYSBWQSByYW5nZTsgcGFkcyB0byBMMiBjYWNoZWxpbmUgYm91bmRhcmllcy4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZpbnZfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJY2hhciAqbmV4dCA9IChjaGFyICopKChsb25nKWJ1ZmZlciAmIC1MMl9DQUNIRV9CWVRFUyk7CisJY2hhciAqZmluaXNoID0gKGNoYXIgKilMMl9DQUNIRV9BTElHTigobG9uZylidWZmZXIgKyBzaXplKTsKKwl3aGlsZSAobmV4dCA8IGZpbmlzaCkgeworCQlfX2luc25fZmludihuZXh0KTsKKwkJbmV4dCArPSBDSElQX0ZJTlZfU1RSSURFKCk7CisJfQorfQorCisKKy8qIEludmFsaWRhdGUgYSBWQSByYW5nZSwgdGhlbiBtZW1vcnkgZmVuY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW52X2J1ZmZlcih2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCV9faW52X2J1ZmZlcihidWZmZXIsIHNpemUpOworCW1iX2luY29oZXJlbnQoKTsKK30KKworLyogRmx1c2ggYSBWQSByYW5nZSwgdGhlbiBtZW1vcnkgZmVuY2UuICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJX19mbHVzaF9idWZmZXIoYnVmZmVyLCBzaXplKTsKKwltYl9pbmNvaGVyZW50KCk7Cit9CisKKy8qIEZsdXNoICYgaW52YWxpZGF0ZSBhIFZBIHJhbmdlLCB0aGVuIG1lbW9yeSBmZW5jZS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW52X2J1ZmZlcih2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCV9fZmludl9idWZmZXIoYnVmZmVyLCBzaXplKTsKKwltYl9pbmNvaGVyZW50KCk7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2hlY2tzdW0uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjA3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY2hlY2tzdW0uaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0NIRUNLU1VNX0gKKyNkZWZpbmUgX0FTTV9USUxFX0NIRUNLU1VNX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NoZWNrc3VtLmg+CisKKy8qIEFsbG93IHVzIHRvIHByb3ZpZGUgYSBtb3JlIG9wdGltaXplZCBkb19jc3VtKCkuICovCitfX3dzdW0gZG9fY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuKTsKKyNkZWZpbmUgZG9fY3N1bSBkb19jc3VtCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMzRkYTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9USUxFX0NPTVBBVF9ICisKKy8qCisgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIENPTVBBVF9VU0VSX0haCTEwMAorCisvKiAibG9uZyIgYW5kIHBvaW50ZXItYmFzZWQgdHlwZXMgYXJlIGRpZmZlcmVudC4gKi8KK3R5cGVkZWYgczMyCQljb21wYXRfbG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF91bG9uZ190OwordHlwZWRlZiB1MzIJCWNvbXBhdF9zaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X3NzaXplX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X29mZl90OwordHlwZWRlZiBzMzIJCWNvbXBhdF90aW1lX3Q7Cit0eXBlZGVmIHMzMgkJY29tcGF0X2Nsb2NrX3Q7Cit0eXBlZGVmIHUzMgkJY29tcGF0X2lub190OwordHlwZWRlZiB1MzIJCWNvbXBhdF9jYWRkcl90OwordHlwZWRlZgl1MzIJCWNvbXBhdF91cHRyX3Q7CisKKy8qIE1hbnkgdHlwZXMgYXJlICJpbnQiIG9yIG90aGVyd2lzZSB0aGUgc2FtZS4gKi8KK3R5cGVkZWYgX19rZXJuZWxfcGlkX3QgY29tcGF0X3BpZF90OwordHlwZWRlZiBfX2tlcm5lbF91aWRfdCBfX2NvbXBhdF91aWRfdDsKK3R5cGVkZWYgX19rZXJuZWxfZ2lkX3QgX19jb21wYXRfZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgX19jb21wYXRfdWlkMzJfdDsKK3R5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCBfX2NvbXBhdF9naWQzMl90OwordHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgY29tcGF0X21vZGVfdDsKK3R5cGVkZWYgX19rZXJuZWxfZGV2X3QgY29tcGF0X2Rldl90OwordHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QgY29tcGF0X2xvZmZfdDsKK3R5cGVkZWYgX19rZXJuZWxfbmxpbmtfdCBjb21wYXRfbmxpbmtfdDsKK3R5cGVkZWYgX19rZXJuZWxfaXBjX3BpZF90IGNvbXBhdF9pcGNfcGlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2RhZGRyX3QgY29tcGF0X2RhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2ZzaWRfdAljb21wYXRfZnNpZF90OwordHlwZWRlZiBfX2tlcm5lbF90aW1lcl90IGNvbXBhdF90aW1lcl90OwordHlwZWRlZiBfX2tlcm5lbF9rZXlfdCBjb21wYXRfa2V5X3Q7Cit0eXBlZGVmIGludCBjb21wYXRfaW50X3Q7Cit0eXBlZGVmIHM2NCBjb21wYXRfczY0OwordHlwZWRlZiB1aW50IGNvbXBhdF91aW50X3Q7Cit0eXBlZGVmIHU2NCBjb21wYXRfdTY0OworCisvKiBXZSB1c2UgdGhlIHNhbWUgcmVnaXN0ZXIgZHVtcCBmb3JtYXQgaW4gMzItYml0IGltYWdlcy4gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBjb21wYXRfZWxmX2dyZWdfdDsKKyNkZWZpbmUgQ09NUEFUX0VMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihjb21wYXRfZWxmX2dyZWdfdCkpCit0eXBlZGVmIGNvbXBhdF9lbGZfZ3JlZ190IGNvbXBhdF9lbGZfZ3JlZ3NldF90W0NPTVBBVF9FTEZfTkdSRUddOworCitzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIHsKKwljb21wYXRfdGltZV90CXR2X3NlYzsKKwlzMzIJCXR2X25zZWM7Cit9OworCitzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgeworCWNvbXBhdF90aW1lX3QJdHZfc2VjOworCXMzMgkJdHZfdXNlYzsKK307CisKKyNkZWZpbmUgY29tcGF0X3N0YXQgc3RhdAorI2RlZmluZSBjb21wYXRfc3RhdGZzIHN0YXRmcworCitzdHJ1Y3QgY29tcGF0X3N5c2N0bCB7CisJdW5zaWduZWQgaW50CW5hbWU7CisJaW50CQlubGVuOworCXVuc2lnbmVkIGludAlvbGR2YWw7CisJdW5zaWduZWQgaW50CW9sZGxlbnA7CisJdW5zaWduZWQgaW50CW5ld3ZhbDsKKwl1bnNpZ25lZCBpbnQJbmV3bGVuOworCXVuc2lnbmVkIGludAlfX3VudXNlZFs0XTsKK307CisKKworc3RydWN0IGNvbXBhdF9mbG9jayB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X29mZl90CWxfc3RhcnQ7CisJY29tcGF0X29mZl90CWxfbGVuOworCWNvbXBhdF9waWRfdAlsX3BpZDsKK307CisKKyNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCisjZGVmaW5lIEZfU0VUTEs2NAkxMworI2RlZmluZSBGX1NFVExLVzY0CTE0CisKK3N0cnVjdCBjb21wYXRfZmxvY2s2NCB7CisJc2hvcnQJCWxfdHlwZTsKKwlzaG9ydAkJbF93aGVuY2U7CisJY29tcGF0X2xvZmZfdAlsX3N0YXJ0OworCWNvbXBhdF9sb2ZmX3QJbF9sZW47CisJY29tcGF0X3BpZF90CWxfcGlkOworfTsKKworI2RlZmluZSBDT01QQVRfUkxJTV9JTkZJTklUWQkJMHhmZmZmZmZmZgorCisjZGVmaW5lIF9DT01QQVRfTlNJRwkJNjQKKyNkZWZpbmUgX0NPTVBBVF9OU0lHX0JQVwkzMgorCit0eXBlZGVmIHUzMiAgICAgICAgICAgICAgIGNvbXBhdF9zaWdzZXRfd29yZDsKKworI2RlZmluZSBDT01QQVRfT0ZGX1RfTUFYCTB4N2ZmZmZmZmYKKyNkZWZpbmUgQ09NUEFUX0xPRkZfVF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTAorCitzdHJ1Y3QgY29tcGF0X2lwYzY0X3Blcm0geworCWNvbXBhdF9rZXlfdCBrZXk7CisJX19jb21wYXRfdWlkMzJfdCB1aWQ7CisJX19jb21wYXRfZ2lkMzJfdCBnaWQ7CisJX19jb21wYXRfdWlkMzJfdCBjdWlkOworCV9fY29tcGF0X2dpZDMyX3QgY2dpZDsKKwl1bnNpZ25lZCBzaG9ydCBtb2RlOworCXVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKwl1bnNpZ25lZCBzaG9ydCBzZXE7CisJdW5zaWduZWQgc2hvcnQgX19wYWQyOworCWNvbXBhdF91bG9uZ190IHVudXNlZDE7CisJY29tcGF0X3Vsb25nX3QgdW51c2VkMjsKK307CisKK3N0cnVjdCBjb21wYXRfc2VtaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIHNlbV9wZXJtOworCWNvbXBhdF90aW1lX3QgIHNlbV9vdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgc2VtX2N0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdWxvbmdfdCBzZW1fbnNlbXM7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKK307CisKK3N0cnVjdCBjb21wYXRfbXNxaWQ2NF9kcyB7CisJc3RydWN0IGNvbXBhdF9pcGM2NF9wZXJtIG1zZ19wZXJtOworCWNvbXBhdF90aW1lX3QgIG1zZ19zdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDE7CisJY29tcGF0X3RpbWVfdCAgbXNnX3J0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMjsKKwljb21wYXRfdGltZV90ICBtc2dfY3RpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQzOworCWNvbXBhdF91bG9uZ190IG1zZ19jYnl0ZXM7CisJY29tcGF0X3Vsb25nX3QgbXNnX3FudW07CisJY29tcGF0X3Vsb25nX3QgbXNnX3FieXRlczsKKwljb21wYXRfcGlkX3QgICBtc2dfbHNwaWQ7CisJY29tcGF0X3BpZF90ICAgbXNnX2xycGlkOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkNDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NobWlkNjRfZHMgeworCXN0cnVjdCBjb21wYXRfaXBjNjRfcGVybSBzaG1fcGVybTsKKwljb21wYXRfc2l6ZV90ICBzaG1fc2Vnc3o7CisJY29tcGF0X3RpbWVfdCAgc2htX2F0aW1lOworCWNvbXBhdF91bG9uZ190IF9fdW51c2VkMTsKKwljb21wYXRfdGltZV90ICBzaG1fZHRpbWU7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQyOworCWNvbXBhdF90aW1lX3QgIHNobV9jdGltZTsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDM7CisJY29tcGF0X3BpZF90ICAgc2htX2NwaWQ7CisJY29tcGF0X3BpZF90ICAgc2htX2xwaWQ7CisJY29tcGF0X3Vsb25nX3Qgc2htX25hdHRjaDsKKwljb21wYXRfdWxvbmdfdCBfX3VudXNlZDQ7CisJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ1OworfTsKKworLyoKKyAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAorICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQorICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQorICogYXBwcm9wcmlhdGVseSBjb252ZXJ0ZWQgdGhlbSBhbHJlYWR5LgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9wdHIoY29tcGF0X3VwdHJfdCB1cHRyKQoreworCXJldHVybiAodm9pZCBfX3VzZXIgKikobG9uZykoczMyKXVwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29tcGF0X3VwdHJfdCBwdHJfdG9fY29tcGF0KHZvaWQgX191c2VyICp1cHRyKQoreworCXJldHVybiAodTMyKSh1bnNpZ25lZCBsb25nKXVwdHI7Cit9CisKKy8qIFNpZ24tZXh0ZW5kIHdoZW4gc3RvcmluZyBhIGtlcm5lbCBwb2ludGVyIHRvIGEgdXNlcidzIHB0cmVncy4gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdHJfdG9fY29tcGF0X3JlZyh2b2lkIF9fdXNlciAqdXB0cikKK3sKKwlyZXR1cm4gKGxvbmcpKGludCkobG9uZyBfX2ZvcmNlKXVwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKmNvbXBhdF9hbGxvY191c2VyX3NwYWNlKGxvbmcgbGVuKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCXJldHVybiAodm9pZCBfX3VzZXIgKilyZWdzLT5zcCAtIGxlbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfY29tcGF0X3Rhc2sodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19DT01QQVQ7Cit9CisKK2V4dGVybiBpbnQgY29tcGF0X3NldHVwX3J0X2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCisJCQkJIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKKwkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKiBDb21wYXQgc3lzY2FsbHMuICovCitzdHJ1Y3QgY29tcGF0X3NpZ2FjdGlvbjsKK3N0cnVjdCBjb21wYXRfc2lnaW5mbzsKK3N0cnVjdCBjb21wYXRfc2lnYWx0c3RhY2s7Citsb25nIGNvbXBhdF9zeXNfZXhlY3ZlKGNoYXIgX191c2VyICpwYXRoLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKKwkJICAgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwKTsKK2xvbmcgY29tcGF0X3N5c19ydF9zaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IGNvbXBhdF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBjb21wYXRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKKwkJCSAgICAgc2l6ZV90IHNpZ3NldHNpemUpOworbG9uZyBjb21wYXRfc3lzX3J0X3NpZ3F1ZXVlaW5mbyhpbnQgcGlkLCBpbnQgc2lnLAorCQkJCXN0cnVjdCBjb21wYXRfc2lnaW5mbyBfX3VzZXIgKnVpbmZvKTsKK2xvbmcgY29tcGF0X3N5c19ydF9zaWdyZXR1cm4odm9pZCk7Citsb25nIGNvbXBhdF9zeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVzc19wdHIsCisJCQkgICAgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVvc3NfcHRyKTsKK2xvbmcgY29tcGF0X3N5c190cnVuY2F0ZTY0KGNoYXIgX191c2VyICpmaWxlbmFtZSwgdTMyIGR1bW15LCB1MzIgbG93LCB1MzIgaGlnaCk7Citsb25nIGNvbXBhdF9zeXNfZnRydW5jYXRlNjQodW5zaWduZWQgaW50IGZkLCB1MzIgZHVtbXksIHUzMiBsb3csIHUzMiBoaWdoKTsKK2xvbmcgY29tcGF0X3N5c19wcmVhZDY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKKwkJCXUzMiBkdW1teSwgdTMyIGxvdywgdTMyIGhpZ2gpOworbG9uZyBjb21wYXRfc3lzX3B3cml0ZTY0KHVuc2lnbmVkIGludCBmZCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjb3VudCwKKwkJCSB1MzIgZHVtbXksIHUzMiBsb3csIHUzMiBoaWdoKTsKK2xvbmcgY29tcGF0X3N5c19sb29rdXBfZGNvb2tpZSh1MzIgbG93LCB1MzIgaGlnaCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbik7Citsb25nIGNvbXBhdF9zeXNfc3luY19maWxlX3JhbmdlMihpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgdTMyIG9mZnNldF9sbywgdTMyIG9mZnNldF9oaSwKKwkJCQkgdTMyIG5ieXRlc19sbywgdTMyIG5ieXRlc19oaSk7Citsb25nIGNvbXBhdF9zeXNfZmFsbG9jYXRlKGludCBmZCwgaW50IG1vZGUsCisJCQkgIHUzMiBvZmZzZXRfbG8sIHUzMiBvZmZzZXRfaGksCisJCQkgIHUzMiBsZW5fbG8sIHUzMiBsZW5faGkpOworbG9uZyBjb21wYXRfc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbChjb21wYXRfcGlkX3QgcGlkLAorCQkJCSAgICAgIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICppbnRlcnZhbCk7CisKKy8qIFZlcnNpb25zIG9mIGNvbXBhdCBmdW5jdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSBnZW5lcmljIExpbnV4LiAqLworc3RydWN0IGNvbXBhdF9tc2didWY7Citsb25nIHRpbGVfY29tcGF0X3N5c19tc2dzbmQoaW50IG1zcWlkLAorCQkJICAgIHN0cnVjdCBjb21wYXRfbXNnYnVmIF9fdXNlciAqbXNncCwKKwkJCSAgICBzaXplX3QgbXNnc3osIGludCBtc2dmbGcpOworbG9uZyB0aWxlX2NvbXBhdF9zeXNfbXNncmN2KGludCBtc3FpZCwKKwkJCSAgICBzdHJ1Y3QgY29tcGF0X21zZ2J1ZiBfX3VzZXIgKm1zZ3AsCisJCQkgICAgc2l6ZV90IG1zZ3N6LCBsb25nIG1zZ3R5cCwgaW50IG1zZ2ZsZyk7Citsb25nIHRpbGVfY29tcGF0X3N5c19wdHJhY2UoY29tcGF0X2xvbmdfdCByZXF1ZXN0LCBjb21wYXRfbG9uZ190IHBpZCwKKwkJCSAgICBjb21wYXRfbG9uZ190IGFkZHIsIGNvbXBhdF9sb25nX3QgZGF0YSk7CisKKy8qIFRpbGVyYSBMaW51eCBzeXNjYWxscyB0aGF0IGRvbid0IGhhdmUgImNvbXBhdCIgdmVyc2lvbnMuICovCisjZGVmaW5lIGNvbXBhdF9zeXNfZmx1c2hfY2FjaGUgc3lzX2ZsdXNoX2NhY2hlCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9jcHV0aW1lLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY3B1dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjhhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vY3VycmVudC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2N1cnJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTIxYWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2N1cnJlbnQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0NVUlJFTlRfSAorI2RlZmluZSBfQVNNX1RJTEVfQ1VSUkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpnZXRfY3VycmVudCh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3RocmVhZF9pbmZvKCktPnRhc2s7Cit9CisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorCisvKiBSZXR1cm4gYSB1c2FibGUgInRhc2tfc3RydWN0IiBwb2ludGVyIGV2ZW4gaWYgdGhlIHJlYWwgb25lIGlzIGNvcnJ1cHQuICovCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKnZhbGlkYXRlX2N1cnJlbnQodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGVsYXkuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YjBlNjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZGVsYXkuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0RFTEFZX0gKKyNkZWZpbmUgX0FTTV9USUxFX0RFTEFZX0gKKworLyogVW5kZWZpbmVkIGZ1bmN0aW9ucyB0byBnZXQgY29tcGlsZS10aW1lIGVycm9ycy4gKi8KK2V4dGVybiB2b2lkIF9fYmFkX3VkZWxheSh2b2lkKTsKK2V4dGVybiB2b2lkIF9fYmFkX25kZWxheSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCBfX25kZWxheSh1bnNpZ25lZCBsb25nIG5zZWNzKTsKK2V4dGVybiB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcyk7CisKKyNkZWZpbmUgdWRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/IFwKKwkoKG4pID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fbmRlbGF5KChuKSAqIDEwMDApKSA6IFwKKwlfX3VkZWxheShuKSkKKworI2RlZmluZSBuZGVsYXkobikgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pID8gXAorCSgobikgPiAyMDAwMCA/IF9fYmFkX25kZWxheSgpIDogX19uZGVsYXkobikpIDogXAorCV9fbmRlbGF5KG4pKQorCisjZW5kaWYgLyogX0FTTV9USUxFX0RFTEFZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGE0YzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kaXY2NC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RpdjY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkOTc4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kaXY2NC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUxZGNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fVElMRV9ETUFfTUFQUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKgorICogTm90ZSB0aGF0IG9uIHg4NiBhbmQgcG93ZXJwYywgdGhlcmUgaXMgYSAic3RydWN0IGRtYV9tYXBwaW5nX29wcyIKKyAqIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHRoZSBETUEgb3BlcmF0aW9ucy4gIEZvciBub3csIHdlIGRvbid0IGhhdmUgYW4KKyAqIGVxdWl2YWxlbnQgb24gdGlsZSwgYmVjYXVzZSB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgd2F5IG9mIGRvaW5nIERNQS4KKyAqIChUaWxlcmEgYnVnIDc5OTQgdG8gdXNlIGRtYV9tYXBwaW5nX29wcy4pCisgKi8KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsCisJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworCisKK3ZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZyk7CisKK3ZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCisJCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwKKwkJCQkgICAgICAgc2l6ZV90LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCwKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBkbWFfY2FjaGVfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKKwkJcmV0dXJuIC1FSU87CisKKwkqZGV2LT5kbWFfbWFzayA9IG1hc2s7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIF9BU01fVElMRV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhN2NhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9kbWEuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0RNQV9ICisjZGVmaW5lIF9BU01fVElMRV9ETUFfSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLmg+CisKKy8qIE5lZWRlZCBieSBkcml2ZXJzL3BjaS9xdWlya3MuYyAqLworI2lmZGVmIENPTkZJR19QQ0kKK2V4dGVybiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fVElMRV9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyM2E2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfRUxGX0gKKyNkZWZpbmUgX0FTTV9USUxFX0VMRl9ICisKKy8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKKyNkZWZpbmUgRU1fVElMRTY0ICAxODcKKyNkZWZpbmUgRU1fVElMRVBSTyAxODgKKyNkZWZpbmUgRU1fVElMRUdYICAxOTEKKworLyogUHJvdmlkZSBhIG5vbWluYWwgZGF0YSBzdHJ1Y3R1cmUuICovCisjZGVmaW5lIEVMRl9ORlBSRUcJMAordHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7Cit0eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOworCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1M2NAorI2Vsc2UKKyNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKKyNlbmRpZgorI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgorCisvKgorICogVGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gaG93IGNvbXBhdF9iaW5mbXRfZWxmLmMgd29ya3M6IGl0CisgKiAjdW5kZWZzIEVMRl9BUkNILCBidXQgaXQgaXMgdGhlbiB1c2VkIGluIGJpbmZtdF9lbGYuYyBmb3IgZmlsbF9ub3RlX2luZm8oKS4KKyAqIEhhY2sgYXJvdW5kIHRoaXMgYnkgcHJvdmlkaW5nIGFuIGVudW0gdmFsdWUgb2YgRUxGX0FSQ0guCisgKi8KK2VudW0geyBFTEZfQVJDSCA9IENISVBfRUxGX1RZUEUoKSB9OworI2RlZmluZSBFTEZfQVJDSCBFTEZfQVJDSAorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAgXAorCSgoeCktPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRl9DTEFTUyAmJiBcCisJICh4KS0+ZV9tYWNoaW5lID09IENISVBfRUxGX1RZUEUoKSkKKworLyogVGhlIG1vZHVsZSBsb2FkZXIgb25seSBoYW5kbGVzIGEgZmV3IHJlbG9jYXRpb24gdHlwZXMuICovCisjaWZuZGVmIF9fdGlsZWd4X18KKyNkZWZpbmUgUl9USUxFXzMyICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJfVElMRV9KT0ZGTE9OR19YMSAgICAgICAxNQorI2RlZmluZSBSX1RJTEVfSU1NMTZfWDBfTE8gICAgICAgMjUKKyNkZWZpbmUgUl9USUxFX0lNTTE2X1gxX0xPICAgICAgIDI2CisjZGVmaW5lIFJfVElMRV9JTU0xNl9YMF9IQSAgICAgICAyOQorI2RlZmluZSBSX1RJTEVfSU1NMTZfWDFfSEEgICAgICAgMzAKKyNlbHNlCisjZGVmaW5lIFJfVElMRUdYXzY0ICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFJfVElMRUdYX0pVTVBPRkZfWDEgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMCAgICAgICAgICAgIDM2CisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMCAgICAgICAgICAgIDM3CisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMSAgICAgICAgICAgIDM4CisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMSAgICAgICAgICAgIDM5CisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMl9MQVNUICAgICAgIDQ4CisjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMl9MQVNUICAgICAgIDQ5CisjZW5kaWYKKworLyogVXNlIHN0YW5kYXJkIHBhZ2Ugc2l6ZSBmb3IgY29yZSBkdW1wcy4gKi8KKyNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJUEFHRV9TSVpFCisKKy8qCisgKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICogdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgKiB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICogdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLgorICovCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIChUQVNLX1NJWkUgLyAzICogMikKKworI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MoX2Rlc3QsIF9yZWdzKQkJCVwKKwltZW1jcHkoKGNoYXIgKikgJl9kZXN0LCAoY2hhciAqKSBfcmVncywJCQlcCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCisvKiBObyBhZGRpdGlvbmFsIEZQIHJlZ2lzdGVycyB0byBjb3B5LiAqLworI2RlZmluZSBFTEZfQ09SRV9DT1BZX0ZQUkVHUyh0LCBmcHUpIDAKKworLyoKKyAqIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAqIGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gIFRoaXMgY291bGQgYmUgZG9uZSBpbiB1c2VyIHNwYWNlLAorICogYnV0IGl0J3Mgbm90IGVhc3ksIGFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgaXQgaGVyZS4KKyAqLworI2RlZmluZSBFTEZfSFdDQVAJKDApCisKKy8qCisgKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAqIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgKiBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4KKyAqLworI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQorCitleHRlcm4gdm9pZCBlbGZfcGxhdF9pbml0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGxvYWRfYWRkcik7CisKKyNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKSBlbGZfcGxhdF9pbml0KF9yLCBsb2FkX2FkZHIpCisKK2V4dGVybiBpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICosIGVsZl9ncmVnc2V0X3QgKik7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCisKKy8qIFRpbGVyYSBMaW51eCBoYXMgbm8gcGVyc29uYWxpdGllcyBjdXJyZW50bHksIHNvIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcuICovCisjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMKKy8qIFN1cHBvcnQgYXV0by1tYXBwaW5nIG9mIHRoZSB1c2VyIGludGVycnVwdCB2ZWN0b3JzLiAqLworc3RydWN0IGxpbnV4X2JpbnBybTsKK2V4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkJICAgICAgIGludCBleGVjdXRhYmxlX3N0YWNrKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisKKyNkZWZpbmUgQ09NUEFUX0VMRl9QTEFURk9STSAidGlsZWd4LW0zMiIKKworLyoKKyAqICJDb21wYXQiIGJpbmFyaWVzIGhhdmUgdGhlIHNhbWUgbWFjaGluZSB0eXBlLCBidXQgMzItYml0IGNsYXNzLAorICogc2luY2UgdGhleSdyZSBub3QgYSBzZXBhcmF0ZSBtYWNoaW5lIHR5cGUsIGJ1dCBqdXN0IGEgMzItYml0CisgKiB2YXJpYW50IG9mIHRoZSBzdGFuZGFyZCA2NC1iaXQgYXJjaGl0ZWN0dXJlLgorICovCisjZGVmaW5lIGNvbXBhdF9lbGZfY2hlY2tfYXJjaCh4KSAgXAorCSgoeCktPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIgJiYgXAorCSAoeCktPmVfbWFjaGluZSA9PSBDSElQX0VMRl9UWVBFKCkpCisKKyNkZWZpbmUgY29tcGF0X3N0YXJ0X3RocmVhZChyZWdzLCBpcCwgdXNwKSBkbyB7IFwKKwkJcmVncy0+cGMgPSBwdHJfdG9fY29tcGF0X3JlZygodm9pZCAqKShpcCkpOyBcCisJCXJlZ3MtPnNwID0gcHRyX3RvX2NvbXBhdF9yZWcoKHZvaWQgKikodXNwKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKgorICogVXNlIFNFVF9QRVJTT05BTElUWSB0byBpbmRpY2F0ZSBjb21wYXRpYmlsaXR5IHZpYSBUU19DT01QQVQuCisgKi8KKyN1bmRlZiBTRVRfUEVSU09OQUxJVFkKKyNkZWZpbmUgU0VUX1BFUlNPTkFMSVRZKGV4KSBcCitkbyB7IFwKKwljdXJyZW50LT5wZXJzb25hbGl0eSA9IFBFUl9MSU5VWDsgXAorCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19DT01QQVQ7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIENPTVBBVF9TRVRfUEVSU09OQUxJVFkoZXgpIFwKK2RvIHsgXAorCWN1cnJlbnQtPnBlcnNvbmFsaXR5ID0gUEVSX0xJTlVYXzMyQklUOyBcCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfQ09NUEFUOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIENPTVBBVF9FTEZfRVRfRFlOX0JBU0UgKDB4ZmZmZmZmZmYgLyAzICogMikKKworI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKworI2VuZGlmIC8qIF9BU01fVElMRV9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZW1lcmdlbmN5LXJlc3RhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzExYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2VtZXJnZW5jeS1yZXN0YXJ0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2VtZXJnZW5jeS1yZXN0YXJ0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZXJybm8uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODJiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZXJybm8uaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYjEyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mY250bC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTM3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggSW5nbyBNb2xuYXIKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9GSVhNQVBfSAorI2RlZmluZSBfQVNNX1RJTEVfRklYTUFQX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNlbmRpZgorCisjZGVmaW5lIF9fZml4X3RvX3ZpcnQoeCkJKEZJWEFERFJfVE9QIC0gKCh4KSA8PCBQQUdFX1NISUZUKSkKKyNkZWZpbmUgX192aXJ0X3RvX2ZpeCh4KQkoKEZJWEFERFJfVE9QIC0gKCh4KSZQQUdFX01BU0spKSA+PiBQQUdFX1NISUZUKQorCisvKgorICogSGVyZSB3ZSBkZWZpbmUgYWxsIHRoZSBjb21waWxlLXRpbWUgJ3NwZWNpYWwnIHZpcnR1YWwKKyAqIGFkZHJlc3Nlcy4gVGhlIHBvaW50IGlzIHRvIGhhdmUgYSBjb25zdGFudCBhZGRyZXNzIGF0CisgKiBjb21waWxlIHRpbWUsIGJ1dCB0byBzZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb25seQorICogaW4gdGhlIGJvb3QgcHJvY2Vzcy4gV2UgYWxsb2NhdGUgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMKKyAqIGZyb20gdGhlIGVuZCBvZiBzdXBlcnZpc29yIHZpcnR1YWwgbWVtb3J5IGJhY2t3YXJkcy4KKyAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCisgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCisgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCisgKgorICogdGhlc2UgJ2NvbXBpbGUtdGltZSBhbGxvY2F0ZWQnIG1lbW9yeSBidWZmZXJzIGFyZQorICogZml4ZWQtc2l6ZSA0ayBwYWdlcy4gKG9yIGxhcmdlciBpZiB1c2VkIHdpdGggYW4gaW5jcmVtZW50CisgKiBoaWdoZXIgdGhhbiAxKSB1c2UgZml4bWFwX3NldChpZHgscGh5cykgdG8gYXNzb2NpYXRlCisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBmaXhtYXAgaW5kaWNlcy4KKyAqCisgKiBUTEIgZW50cmllcyBvZiBzdWNoIGJ1ZmZlcnMgd2lsbCBub3QgYmUgZmx1c2hlZCBhY3Jvc3MKKyAqIHRhc2sgc3dpdGNoZXMuCisgKgorICogV2UgZG9uJ3QgYm90aGVyIHdpdGggYSBGSVhfSE9MRSBzaW5jZSBhYm92ZSB0aGUgZml4bWFwcworICogaXMgdW5tYXBwZWQgbWVtb3J5IGluIGFueSBjYXNlLgorICovCitlbnVtIGZpeGVkX2FkZHJlc3NlcyB7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwlGSVhfS01BUF9CRUdJTiwJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KKwlGSVhfS01BUF9FTkQgPSBGSVhfS01BUF9CRUdJTisoS01fVFlQRV9OUipOUl9DUFVTKS0xLAorI2VuZGlmCisJX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcywKKworCS8qCisJICogVGVtcG9yYXJ5IGJvb3QtdGltZSBtYXBwaW5ncywgdXNlZCBiZWZvcmUgaW9yZW1hcCgpIGlzIGZ1bmN0aW9uYWwuCisJICogTm90IGN1cnJlbnRseSBuZWVkZWQgYnkgdGhlIFRpbGUgYXJjaGl0ZWN0dXJlLgorCSAqLworI2RlZmluZSBOUl9GSVhfQlRNQVBTCTAKKyNpZiBOUl9GSVhfQlRNQVBTCisJRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCisJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMgLSAxLAorCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworI2Vsc2UKKwlfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPSBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzCisjZW5kaWYKK307CisKK2V4dGVybiB2b2lkIF9fc2V0X2ZpeG1hcChlbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgsCisJCQkgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncyk7CisKKyNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpIFwKKwkJX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCisvKgorICogU29tZSBoYXJkd2FyZSB3YW50cyB0byBnZXQgZml4bWFwcGVkIHdpdGhvdXQgY2FjaGluZy4KKyAqLworI2RlZmluZSBzZXRfZml4bWFwX25vY2FjaGUoaWR4LCBwaHlzKSBcCisJCV9fc2V0X2ZpeG1hcChpZHgsIHBoeXMsIFBBR0VfS0VSTkVMX05PQ0FDSEUpCisKKyNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkgXAorCQlfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKKworI2RlZmluZSBfX0ZJWEFERFJfU0laRQkoX19lbmRfb2ZfcGVybWFuZW50X2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBfX0ZJWEFERFJfQk9PVF9TSVpFCShfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRklYQUREUl9TVEFSVAkJKEZJWEFERFJfVE9QICsgUEFHRV9TSVpFIC0gX19GSVhBRERSX1NJWkUpCisjZGVmaW5lIEZJWEFERFJfQk9PVF9TVEFSVAkoRklYQUREUl9UT1AgKyBQQUdFX1NJWkUgLSBfX0ZJWEFERFJfQk9PVF9TSVpFKQorCitleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOworCisvKgorICogJ2luZGV4IHRvIGFkZHJlc3MnIHRyYW5zbGF0aW9uLiBJZiBhbnlvbmUgdHJpZXMgdG8gdXNlIHRoZSBpZHgKKyAqIGRpcmVjdGx5IHdpdGhvdXQgdHJhbmxhdGlvbiwgd2UgY2F0Y2ggdGhlIGJ1ZyB3aXRoIGEgTlVMTC1kZWZlcmVuY2UKKyAqIGtlcm5lbCBvb3BzLiBJbGxlZ2FsIHJhbmdlcyBvZiBpbmNvbWluZyBpbmRpY2VzIGFyZSBjYXVnaHQgdG9vLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwkvKgorCSAqIHRoaXMgYnJhbmNoIGdldHMgY29tcGxldGVseSBlbGltaW5hdGVkIGFmdGVyIGlubGluaW5nLAorCSAqIGV4Y2VwdCB3aGVuIHNvbWVvbmUgdHJpZXMgdG8gdXNlIGZpeGFkZHIgaW5kaWNlcyBpbiBhbgorCSAqIGlsbGVnYWwgd2F5LiAoc3VjaCBhcyBtaXhpbmcgdXAgYWRkcmVzcyB0eXBlcyBvciB1c2luZworCSAqIG91dC1vZi1yYW5nZSBpbmRpY2VzKS4KKwkgKgorCSAqIElmIGl0IGRvZXNuJ3QgZ2V0IHJlbW92ZWQsIHRoZSBsaW5rZXIgd2lsbCBjb21wbGFpbgorCSAqIGxvdWRseSB3aXRoIGEgcmVhc29uYWJseSBjbGVhciBlcnJvciBtZXNzYWdlLi4KKwkgKi8KKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCisJcmV0dXJuIF9fZml4X3RvX3ZpcnQoaWR4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7CisJcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOworfQorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX0ZJWE1BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxNDU5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0ZUUkFDRV9ICisjZGVmaW5lIF9BU01fVElMRV9GVFJBQ0VfSAorCisvKiBlbXB0eSAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX0ZUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9mdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGQxMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vZnV0ZXguaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBtYWtlIHR3byBpbXBvcnRhbnQgYXNzdW1wdGlvbnM6CisgKgorICogMS4gYXRvbWljX3QgaXMgcmVhbGx5IGFuIGludCBhbmQgY2FuIGJlIGZyZWVseSBjYXN0IGJhY2sgYW5kIGZvcnRoCisgKiAgICAodmFsaWRhdGVkIGluIF9faW5pdF9hdG9taWNfcGVyX2NwdSkuCisgKgorICogMi4gdXNlcnNwYWNlIHVzZXMgc3lzX2NtcHhjaGcoKSBmb3IgYWxsIGF0b21pYyBvcGVyYXRpb25zLCB0aHVzIHVzaW5nCisgKiAgICB0aGUgc2FtZSBsb2NraW5nIGNvbnZlbnRpb24gdGhhdCBhbGwgdGhlIGtlcm5lbCBhdG9taWMgcm91dGluZXMgdXNlLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0ZVVEVYX0gKKyNkZWZpbmUgX0FTTV9USUxFX0ZVVEVYX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF9zZXQoaW50IF9fdXNlciAqdiwgaW50IGkpOworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X2FkZChpbnQgX191c2VyICp2LCBpbnQgbik7CitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfb3IoaW50IF9fdXNlciAqdiwgaW50IG4pOworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X2FuZG4oaW50IF9fdXNlciAqdiwgaW50IG4pOworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X2NtcHhjaGcoaW50IF9fdXNlciAqdiwgaW50IG8sIGludCBuKTsKKworI2lmbmRlZiBfX3RpbGVneF9fCitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfeG9yKGludCBfX3VzZXIgKnYsIGludCBuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2dldF91c2VyIGZ1dGV4X3hvcihpbnQgX191c2VyICp1YWRkciwgaW50IG4pCit7CisJc3RydWN0IF9fZ2V0X3VzZXIgYXNtX3JldCA9IF9fZ2V0X3VzZXJfNCh1YWRkcik7CisJaWYgKCFhc21fcmV0LmVycikgeworCQlpbnQgb2xkdmFsLCBuZXd2YWw7CisJCWRvIHsKKwkJCW9sZHZhbCA9IGFzbV9yZXQudmFsOworCQkJbmV3dmFsID0gb2xkdmFsIF4gbjsKKwkJCWFzbV9yZXQgPSBmdXRleF9jbXB4Y2hnKHVhZGRyLCBvbGR2YWwsIG5ld3ZhbCk7CisJCX0gd2hpbGUgKGFzbV9yZXQuZXJyID09IDAgJiYgb2xkdmFsICE9IGFzbV9yZXQudmFsKTsKKwl9CisJcmV0dXJuIGFzbV9yZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfYXRvbWljX29wX2ludXNlcihpbnQgZW5jb2RlZF9vcCwgaW50IF9fdXNlciAqdWFkZHIpCit7CisJaW50IG9wID0gKGVuY29kZWRfb3AgPj4gMjgpICYgNzsKKwlpbnQgY21wID0gKGVuY29kZWRfb3AgPj4gMjQpICYgMTU7CisJaW50IG9wYXJnID0gKGVuY29kZWRfb3AgPDwgOCkgPj4gMjA7CisJaW50IGNtcGFyZyA9IChlbmNvZGVkX29wIDw8IDIwKSA+PiAyMDsKKwlpbnQgcmV0OworCXN0cnVjdCBfX2dldF91c2VyIGFzbV9yZXQ7CisKKwlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCisJCW9wYXJnID0gMSA8PCBvcGFyZzsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCXN3aXRjaCAob3ApIHsKKwljYXNlIEZVVEVYX09QX1NFVDoKKwkJYXNtX3JldCA9IGZ1dGV4X3NldCh1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX0FERDoKKwkJYXNtX3JldCA9IGZ1dGV4X2FkZCh1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX09SOgorCQlhc21fcmV0ID0gZnV0ZXhfb3IodWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BTkROOgorCQlhc21fcmV0ID0gZnV0ZXhfYW5kbih1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX1hPUjoKKwkJYXNtX3JldCA9IGZ1dGV4X3hvcih1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhc21fcmV0LmVyciA9IC1FTk9TWVM7CisJfQorCXBhZ2VmYXVsdF9lbmFibGUoKTsKKworCXJldCA9IGFzbV9yZXQuZXJyOworCisJaWYgKCFyZXQpIHsKKwkJc3dpdGNoIChjbXApIHsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfRVE6CisJCQlyZXQgPSAoYXNtX3JldC52YWwgPT0gY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9ORToKKwkJCXJldCA9IChhc21fcmV0LnZhbCAhPSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xUOgorCQkJcmV0ID0gKGFzbV9yZXQudmFsIDwgY21wYXJnKTsKKwkJCWJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HRToKKwkJCXJldCA9IChhc21fcmV0LnZhbCA+PSBjbXBhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xFOgorCQkJcmV0ID0gKGFzbV9yZXQudmFsIDw9IGNtcGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6CisJCQlyZXQgPSAoYXNtX3JldC52YWwgPiBjbXBhcmcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRU5PU1lTOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLAorCQkJCQkJaW50IG5ld3ZhbCkKK3sKKwlzdHJ1Y3QgX19nZXRfdXNlciBhc21fcmV0OworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWFzbV9yZXQgPSBmdXRleF9jbXB4Y2hnKHVhZGRyLCBvbGR2YWwsIG5ld3ZhbCk7CisJcmV0dXJuIGFzbV9yZXQuZXJyID8gYXNtX3JldC5lcnIgOiBhc21fcmV0LnZhbDsKK30KKworI2lmbmRlZiBfX3RpbGVneF9fCisvKiBSZXR1cm4gZmFpbHVyZSBmcm9tIHRoZSBhdG9taWMgd3JhcHBlcnMuICovCitzdHJ1Y3QgX19nZXRfdXNlciBfX2F0b21pY19iYWRfYWRkcmVzcyhpbnQgX191c2VyICphZGRyKTsKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX0ZVVEVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMjM5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfSEFSRElSUV9ICisjZGVmaW5lIF9BU01fVElMRV9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworCWxvbmcgaWRsZV90aW1lc3RhbXA7CisKKwkvKiBIYXJkIGludGVycnVwdCBzdGF0aXN0aWNzLiAqLworCXVuc2lnbmVkIGludCBpcnFfdGltZXJfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9zeXNjYWxsX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfcmVzY2hlZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX2h2X2ZsdXNoX2NvdW50OworCXVuc2lnbmVkIGludCBpcnFfY2FsbF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX2h2X21zZ19jb3VudDsKKwl1bnNpZ25lZCBpbnQgaXJxX2Rldl9pbnRyX2NvdW50OworCit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCitERUNMQVJFX1BFUl9DUFUoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpOworCisjZGVmaW5lIF9fQVJDSF9JUlFfU1RBVAorI2RlZmluZSBfX0lSUV9TVEFUKGNwdSwgbWVtYmVyKSAocGVyX2NwdShpcnFfc3RhdCwgY3B1KS5tZW1iZXIpCisKKyNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPgkvKiBTdGFuZGFyZCBtYXBwaW5ncyBmb3IgaXJxX2NwdXN0YXRfdCBhYm92ZSAqLworCisjZGVmaW5lIEhBUkRJUlFfQklUUwk4CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaGFyZHdhbGwuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9oYXJkd2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZWQzZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2hhcmR3YWxsLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBQcm92aWRlIG1ldGhvZHMgZm9yIHRoZSBIQVJEV0FMTF9GSUxFIGZvciBhY2Nlc3NpbmcgdGhlIFVETi4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9IQVJEV0FMTF9ICisjZGVmaW5lIF9BU01fVElMRV9IQVJEV0FMTF9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEhBUkRXQUxMX0lPQ1RMX0JBU0UgMHhhMgorCisvKgorICogVGhlIEhBUkRXQUxMX0NSRUFURSgpIGlvY3RsIGlzIGEgbWFjcm8gd2l0aCBhICJzaXplIiBhcmd1bWVudC4KKyAqIFRoZSByZXN1bHRpbmcgaW9jdGwgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwgaW4gY29uanVuY3Rpb24KKyAqIHdpdGggYSBwb2ludGVyIHRvIGEgbGl0dGxlLWVuZGlhbiBiaXRtYXNrIG9mIGNwdXMsIHdoaWNoIG11c3QgYmUKKyAqIHBoeXNpY2FsbHkgaW4gYSByZWN0YW5ndWxhciBjb25maWd1cmF0aW9uIG9uIHRoZSBjaGlwLgorICogVGhlICJzaXplIiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGNwdSBtYXNrIGRhdGEuCisgKi8KKyNkZWZpbmUgX0hBUkRXQUxMX0NSRUFURSAxCisjZGVmaW5lIEhBUkRXQUxMX0NSRUFURShzaXplKSBcCisgIF9JT0MoX0lPQ19SRUFELCBIQVJEV0FMTF9JT0NUTF9CQVNFLCBfSEFSRFdBTExfQ1JFQVRFLCAoc2l6ZSkpCisKKyNkZWZpbmUgX0hBUkRXQUxMX0FDVElWQVRFIDIKKyNkZWZpbmUgSEFSRFdBTExfQUNUSVZBVEUgXAorICBfSU8oSEFSRFdBTExfSU9DVExfQkFTRSwgX0hBUkRXQUxMX0FDVElWQVRFKQorCisjZGVmaW5lIF9IQVJEV0FMTF9ERUFDVElWQVRFIDMKKyNkZWZpbmUgSEFSRFdBTExfREVBQ1RJVkFURSBcCisgX0lPKEhBUkRXQUxMX0lPQ1RMX0JBU0UsIF9IQVJEV0FMTF9ERUFDVElWQVRFKQorCisjaWZuZGVmIF9fS0VSTkVMX18KKworLyogVGhpcyBpcyB0aGUgY2Fub25pY2FsIG5hbWUgZXhwZWN0ZWQgYnkgdXNlcnNwYWNlLiAqLworI2RlZmluZSBIQVJEV0FMTF9GSUxFICIvZGV2L2hhcmR3YWxsIgorCisjZWxzZQorCisvKiBIb29rIGZvciAvcHJvYy90aWxlL2hhcmR3YWxsLiAqLworc3RydWN0IHNlcV9maWxlOworaW50IHByb2NfdGlsZV9oYXJkd2FsbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fVElMRV9IQVJEV0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmRkMTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IEdlcmhhcmQgV2ljaGVydCwgU2llbWVucyBBRworICogICAgICAgICAgICAgICAgICAgR2VyaGFyZC5XaWNoZXJ0QHBkYi5zaWVtZW5zLmRlCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVXNlZCBpbiBDT05GSUdfSElHSE1FTSBzeXN0ZW1zIGZvciBtZW1vcnkgcGFnZXMgd2hpY2gKKyAqIGFyZSBub3QgYWRkcmVzc2FibGUgYnkgZGlyZWN0IGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcy4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfSElHSE1FTV9ICisjZGVmaW5lIF9BU01fVElMRV9ISUdITUVNX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9ob21lY2FjaGUuaD4KKworLyogZGVjbGFyYXRpb25zIGZvciBoaWdobWVtLmMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuOworCitleHRlcm4gcHRlX3QgKnBrbWFwX3BhZ2VfdGFibGU7CisKKy8qCisgKiBPcmRlcmluZyBpczoKKyAqCisgKiBGSVhBRERSX1RPUAorICoJCQlmaXhlZF9hZGRyZXNzZXMKKyAqIEZJWEFERFJfU1RBUlQKKyAqCQkJdGVtcCBmaXhlZCBhZGRyZXNzZXMKKyAqIEZJWEFERFJfQk9PVF9TVEFSVAorICoJCQlQZXJzaXN0ZW50IGttYXAgYXJlYQorICogUEtNQVBfQkFTRQorICogVk1BTExPQ19FTkQKKyAqCQkJVm1hbGxvYyBhcmVhCisgKiBWTUFMTE9DX1NUQVJUCisgKiBoaWdoX21lbW9yeQorICovCisjZGVmaW5lIExBU1RfUEtNQVBfTUFTSyAoTEFTVF9QS01BUC0xKQorI2RlZmluZSBQS01BUF9OUih2aXJ0KSAgKCh2aXJ0LVBLTUFQX0JBU0UpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBLTUFQX0FERFIobnIpICAoUEtNQVBfQkFTRSArICgobnIpIDw8IFBBR0VfU0hJRlQpKQorCit2b2lkICprbWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCBrdW5tYXBfaGlnaChzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKK3ZvaWQga3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKTsKK3ZvaWQgKmttYXBfZml4X2twdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBmaW5pc2hlZCk7CisKKy8qIFRoaXMgbWFjcm8gaXMgdXNlZCBvbmx5IGluIG1hcF9uZXdfdmlydHVhbCgpIHRvIG1hcCAicGFnZSIuICovCisjZGVmaW5lIGttYXBfcHJvdCBwYWdlX3RvX2twZ3Byb3QocGFnZSkKKwordm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOwordm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSk7Cit2b2lkICprbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpOworc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKTsKK3ZvaWQgKmttYXBfYXRvbWljX3Byb3Qoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KTsKK3ZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7Cit2b2lkIGttYXBfYXRvbWljX2ZpeF9rcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZmluaXNoZWQpOworCisjZGVmaW5lIGZsdXNoX2NhY2hlX2ttYXBzKCkJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9USUxFX0hJR0hNRU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2hvbWVjYWNoZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2hvbWVjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjQzODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaG9tZWNhY2hlLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogSGFuZGxlIGlzc3VlcyBhcm91bmQgdGhlIFRpbGUgImhvbWUgY2FjaGUiIG1vZGVsIG9mIGNvaGVyZW5jZS4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9IT01FQ0FDSEVfSAorI2RlZmluZSBfQVNNX1RJTEVfSE9NRUNBQ0hFX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCitzdHJ1Y3QgcGFnZTsKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKK3N0cnVjdCB6b25lOworCisvKgorICogQ29oZXJlbmNlIHBvaW50IGZvciB0aGUgcGFnZSBpcyBpdHMgbWVtb3J5IGNvbnRyb2xsZXIuCisgKiBJdCBpcyBub3QgcHJlc2VudCBpbiBhbnkgY2FjaGUgKEwxIG9yIEwyKS4KKyAqLworI2RlZmluZSBQQUdFX0hPTUVfVU5DQUNIRUQgLTEKKworLyoKKyAqIElzIHRoaXMgcGFnZSBpbW11dGFibGUgKHVud3JpdGFibGUpIGFuZCB0aHVzIGFibGUgdG8gYmUgY2FjaGVkIG1vcmUKKyAqIHdpZGVseSB0aGFuIHdvdWxkIG90aGVyd2lzZSBiZSBwb3NzaWJsZT8gIE9uIHRpbGU2NCB0aGlzIG1lYW5zIHdlCisgKiBtYXJrIHRoZSBQVEUgdG8gY2FjaGUgbG9jYWxseTsgb24gdGlsZXBybyBpdCBtZWFucyB3ZSBoYXZlICJuYyIgc2V0LgorICovCisjZGVmaW5lIFBBR0VfSE9NRV9JTU1VVEFCTEUgLTIKKworLyoKKyAqIEVhY2ggY3B1IGNvbnNpZGVycyBpdHMgb3duIGNhY2hlIHRvIGJlIHRoZSBob21lIGZvciB0aGUgcGFnZSwKKyAqIHdoaWNoIG1ha2VzIGl0IGluY29oZXJlbnQuCisgKi8KKyNkZWZpbmUgUEFHRV9IT01FX0lOQ09IRVJFTlQgLTMKKworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorLyogSG9tZSBmb3IgdGhlIHBhZ2UgaXMgZGlzdHJpYnV0ZWQgdmlhIGhhc2gtZm9yLWhvbWUuICovCisjZGVmaW5lIFBBR0VfSE9NRV9IQVNIIC00CisjZW5kaWYKKworLyogSG9taW5nIGlzIHVua25vd24gb3IgdW5zcGVjaWZpZWQuICBOb3QgdmFsaWQgZm9yIHBhZ2VfaG9tZSgpLiAqLworI2RlZmluZSBQQUdFX0hPTUVfVU5LTk9XTiAtNQorCisvKiBIb21lIG9uIHRoZSBjdXJyZW50IGNwdS4gIE5vdCB2YWxpZCBmb3IgcGFnZV9ob21lKCkuICovCisjZGVmaW5lIFBBR0VfSE9NRV9IRVJFIC02CisKKy8qIFN1cHBvcnQgd3JhcHBlciB0byB1c2UgaW5zdGVhZCBvZiBleHBsaWNpdCBodl9mbHVzaF9yZW1vdGUoKS4gKi8KK2V4dGVybiB2b2lkIGZsdXNoX3JlbW90ZSh1bnNpZ25lZCBsb25nIGNhY2hlX3BmbiwgdW5zaWduZWQgbG9uZyBjYWNoZV9sZW5ndGgsCisJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNhY2hlX2NwdW1hc2ssCisJCQkgSFZfVmlydEFkZHIgdGxiX3ZhLCB1bnNpZ25lZCBsb25nIHRsYl9sZW5ndGgsCisJCQkgdW5zaWduZWQgbG9uZyB0bGJfcGdzaXplLAorCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0bGJfY3B1bWFzaywKKwkJCSBIVl9SZW1vdGVfQVNJRCAqYXNpZHMsIGludCBhc2lkY291bnQpOworCisvKiBTZXQgaG9taW5nLXJlbGF0ZWQgYml0cyBpbiBhIFBURSAoY2FuIGFsc28gcGFzcyBhIHBncHJvdF90KS4gKi8KK2V4dGVybiBwdGVfdCBwdGVfc2V0X2hvbWUocHRlX3QgcHRlLCBpbnQgaG9tZSk7CisKKy8qIERvIGEgY2FjaGUgZXZpY3Rpb24gb24gdGhlIHNwZWNpZmllZCBjcHVzLiAqLworZXh0ZXJuIHZvaWQgaG9tZWNhY2hlX2V2aWN0KGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKKworLyoKKyAqIENoYW5nZSBhIGtlcm5lbCBwYWdlJ3MgaG9tZWNhY2hlLiAgSXQgbXVzdCBub3QgYmUgbWFwcGVkIGluIHVzZXIgc3BhY2UuCisgKiBJZiAhQ09ORklHX0hPTUVDQUNIRSwgb25seSB1c2FibGUgb24gTE9XTUVNLCBhbmQgY2FuIG9ubHkgYmUgY2FsbGVkIHdoZW4KKyAqIG5vIG90aGVyIGNwdSBjYW4gcmVmZXJlbmNlIHRoZSBwYWdlLCBhbmQgY2F1c2VzIGEgZnVsbC1jaGlwIGNhY2hlL1RMQiBmbHVzaC4KKyAqLworZXh0ZXJuIHZvaWQgaG9tZWNhY2hlX2NoYW5nZV9wYWdlX2hvbWUoc3RydWN0IHBhZ2UgKiwgaW50IG9yZGVyLCBpbnQgaG9tZSk7CisKKy8qCisgKiBGbHVzaCBhIHBhZ2Ugb3V0IG9mIHdoYXRldmVyIGNhY2hlKHMpIGl0IGlzIGluLgorICogVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBmaW52LCBzaW5jZSBpdCBwcm9wZXJseSBoYW5kbGVzIHdhaXRpbmcKKyAqIGZvciB0aGUgZGF0YSB0byByZWFjaCBtZW1vcnkgb24gdGlsZXBybywgYnV0IGl0IGNhbiBiZSBxdWl0ZQorICogaGVhdnl3ZWlnaHQsIHBhcnRpY3VsYXJseSBvbiBoYXNoLWZvci1ob21lIG1lbW9yeS4KKyAqLworZXh0ZXJuIHZvaWQgaG9tZWNhY2hlX2ZsdXNoX2NhY2hlKHN0cnVjdCBwYWdlICosIGludCBvcmRlcik7CisKKy8qCisgKiBBbGxvY2F0ZSBhIHBhZ2Ugd2l0aCB0aGUgZ2l2ZW4gR0ZQIGZsYWdzLCBob21lLCBhbmQgb3B0aW9uYWxseQorICogbm9kZS4gIFRoZXNlIHJvdXRpbmVzIGFyZSBhY3R1YWxseSBqdXN0IHdyYXBwZXJzIGFyb3VuZCB0aGUgbm9ybWFsCisgKiBhbGxvY19wYWdlcygpIC8gYWxsb2NfcGFnZXNfbm9kZSgpIGZ1bmN0aW9ucywgd2hpY2ggc2V0IGFuZCBjbGVhcgorICogYSBwZXItY3B1IHZhcmlhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggaG9tZWNhY2hlX25ld19rZXJuZWxfcGFnZSgpLgorICogSWYgIUNPTkZJR19IT01FQ0FDSEUsIHVzZXMgaG9tZWNhY2hlX2NoYW5nZV9wYWdlX2hvbWUoKS4KKyAqLworZXh0ZXJuIHN0cnVjdCBwYWdlICpob21lY2FjaGVfYWxsb2NfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCSAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaG9tZSk7CitleHRlcm4gc3RydWN0IHBhZ2UgKmhvbWVjYWNoZV9hbGxvY19wYWdlc19ub2RlKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaG9tZSk7CisjZGVmaW5lIGhvbWVjYWNoZV9hbGxvY19wYWdlKGdmcF9tYXNrLCBob21lKSBcCisgIGhvbWVjYWNoZV9hbGxvY19wYWdlcyhnZnBfbWFzaywgMCwgaG9tZSkKKworLyoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSBqdXN0IHBhc3MtdGhyb3VnaHMgdG8gZnJlZV9wYWdlcygpIHdoZW4KKyAqIHdlIHN1cHBvcnQgZnVsbCBob21lY2FjaGluZy4gIElmICFDT05GSUdfSE9NRUNBQ0hFLCB0aGVuIHRoZXNlCisgKiByb3V0aW5lcyB1c2UgaG9tZWNhY2hlX2NoYW5nZV9wYWdlX2hvbWUoKSB0byByZXNldCB0aGUgaG9tZQorICogYmFjayB0byB0aGUgZGVmYXVsdCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwYWdlIHRvIHRoZSBhbGxvY2F0b3IuCisgKi8KK3ZvaWQgaG9tZWNhY2hlX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpOworI2RlZmluZSBob21lY2FjaGVfZnJlZV9wYWdlKHBhZ2UpIFwKKyAgaG9tZWNhY2hlX2ZyZWVfcGFnZXMoKHBhZ2UpLCAwKQorCisKKworLyoKKyAqIFJlcG9ydCB0aGUgcGFnZSBob21lIGZvciBMT1dNRU0gcGFnZXMgYnkgZXhhbWluaW5nIHRoZWlyIGtlcm5lbCBQVEUsCisgKiBvciBmb3IgaGlnaG1lbSBwYWdlcyBhcyB0aGUgZGVmYXVsdCBob21lLgorICovCitleHRlcm4gaW50IHBhZ2VfaG9tZShzdHJ1Y3QgcGFnZSAqKTsKKworI2RlZmluZSBob21lY2FjaGVfbWlncmF0ZV9rdGhyZWFkKCkgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgaG9tZWNhY2hlX2twdGVfbG9jaygpIDAKKyNkZWZpbmUgaG9tZWNhY2hlX2twdGVfdW5sb2NrKGZsYWdzKSBkbyB7fSB3aGlsZSAoMCkKKworCisjZW5kaWYgLyogX0FTTV9USUxFX0hPTUVDQUNIRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaHVnZXRsYi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTIxYzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9IVUdFVExCX0gKKyNkZWZpbmUgX0FTTV9USUxFX0hVR0VUTEJfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworCitzdGF0aWMgaW5saW5lIGludCBpc19odWdlcGFnZV9vbmx5X3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4pIHsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmIHRoZSBhcmNoIGRvZXNuJ3Qgc3VwcGx5IHNvbWV0aGluZyBlbHNlLCBhc3N1bWUgdGhhdCBodWdlcGFnZQorICogc2l6ZSBhbGlnbmVkIHJlZ2lvbnMgYXJlIG9rIHdpdGhvdXQgZnVydGhlciBwcmVwYXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHJlcGFyZV9odWdlcGFnZV9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOworCWlmIChsZW4gJiB+aHVnZV9wYWdlX21hc2soaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChhZGRyICYgfmh1Z2VfcGFnZV9tYXNrKGgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfcHJlZmF1bHRfYXJjaF9ob29rKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9mcmVlX3BnZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBmbG9vciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCit7CisJZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCBlbmQsIGZsb29yLCBjZWlsaW5nKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9odWdlX3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisJc2V0X3B0ZV9vcmRlcihwdGVwLCBwdGUsIEhVR0VUTEJfUEFHRV9PUkRFUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXJldHVybiBwdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHIsIHB0ZXApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkciwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQoreworCXJldHVybiBwdGVfbm9uZShwdGUpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV93cnByb3RlY3QocHRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworCXB0ZXBfc2V0X3dycHJvdGVjdChtbSwgYWRkciwgcHRlcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCQkJCSAgICAgcHRlX3QgcHRlLCBpbnQgZGlydHkpCit7CisJcmV0dXJuIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHIsIHB0ZXAsIHB0ZSwgZGlydHkpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IGh1Z2VfcHRlcF9nZXQocHRlX3QgKnB0ZXApCit7CisJcmV0dXJuICpwdGVwOworfQorCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3ByZXBhcmVfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlbGVhc2VfaHVnZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7Cit9CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfSFVHRVRMQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaHZfZHJpdmVyLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaHZfZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2MTRkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9odl9kcml2ZXIuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgaGVhZGVyIGRlZmluZXMgYSB3cmFwcGVyIGludGVyZmFjZSBmb3IgbWFuYWdpbmcgaHlwZXJ2aXNvcgorICogZGV2aWNlIGNhbGxzIHRoYXQgd2lsbCByZXN1bHQgaW4gYW4gaW50ZXJydXB0IGF0IHNvbWUgbGF0ZXIgdGltZS4KKyAqIEluIHBhcnRpY3VsYXIsIHRoaXMgcHJvdmlkZXMgd3JhcHBlcnMgZm9yIGh2X3ByZWFkYSgpIGFuZAorICogaHZfcHdyaXRlYSgpLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0hWX0RSSVZFUl9ICisjZGVmaW5lIF9BU01fVElMRV9IVl9EUklWRVJfSAorCisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCitzdHJ1Y3QgaHZfZHJpdmVyX2NiOworCisvKiBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhbiBvcGVyYXRpb24gY29tcGxldGVzLiAqLwordHlwZWRlZiB2b2lkIGh2X2RyaXZlcl9jYWxsYmFja190KHN0cnVjdCBodl9kcml2ZXJfY2IgKmNiLCBfX2h2MzIgcmVzdWx0KTsKKworLyoKKyAqIEEgc3RydWN0dXJlIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYW4gb3V0c3RhbmRpbmcgY2FsbC4KKyAqIFRoZSBkcml2ZXIgbXVzdCBhbGxvY2F0ZSBhIHNlcGFyYXRlIHN0cnVjdHVyZSBmb3IgZWFjaCBjYWxsLgorICovCitzdHJ1Y3QgaHZfZHJpdmVyX2NiIHsKKwlodl9kcml2ZXJfY2FsbGJhY2tfdCAqY2FsbGJhY2s7ICAvKiBGdW5jdGlvbiB0byBjYWxsIG9uIGludGVycnVwdC4gKi8KKwl2b2lkICpkZXY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBEcml2ZXItc3BlY2lmaWMgc3RhdGUgdmFyaWFibGUuICovCit9OworCisvKiBXcmFwcGVyIGZvciBpbnZva2luZyBodl9kZXZfcHJlYWRhKCkuICovCitzdGF0aWMgaW5saW5lIGludAordGlsZV9odl9kZXZfcHJlYWRhKGludCBkZXZoZGwsIF9faHYzMiBmbGFncywgX19odjMyIHNnbF9sZW4sCisJCSAgIEhWX1NHTCBzZ2xbLyogc2dsX2xlbiAqL10sIF9faHY2NCBvZmZzZXQsCisJCSAgIHN0cnVjdCBodl9kcml2ZXJfY2IgKmNhbGxiYWNrKQoreworCXJldHVybiBodl9kZXZfcHJlYWRhKGRldmhkbCwgZmxhZ3MsIHNnbF9sZW4sIHNnbCwKKwkJCSAgICAgb2Zmc2V0LCAoSFZfSW50QXJnKWNhbGxiYWNrKTsKK30KKworLyogV3JhcHBlciBmb3IgaW52b2tpbmcgaHZfZGV2X3B3cml0ZWEoKS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit0aWxlX2h2X2Rldl9wd3JpdGVhKGludCBkZXZoZGwsIF9faHYzMiBmbGFncywgX19odjMyIHNnbF9sZW4sCisJCSAgICBIVl9TR0wgc2dsWy8qIHNnbF9sZW4gKi9dLCBfX2h2NjQgb2Zmc2V0LAorCQkgICAgc3RydWN0IGh2X2RyaXZlcl9jYiAqY2FsbGJhY2spCit7CisJcmV0dXJuIGh2X2Rldl9wd3JpdGVhKGRldmhkbCwgZmxhZ3MsIHNnbF9sZW4sIHNnbCwKKwkJCSAgICAgIG9mZnNldCwgKEhWX0ludEFyZyljYWxsYmFjayk7Cit9CisKKworI2VuZGlmIC8qIF9BU01fVElMRV9IVl9EUklWRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2h3X2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYWM1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9IV19JUlFfSAorI2RlZmluZSBfQVNNX1RJTEVfSFdfSVJRX0gKKworI2VuZGlmIC8qIF9BU01fVElMRV9IV19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lkZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNmYyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaWRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9JREVfSAorI2RlZmluZSBfQVNNX1RJTEVfSURFX0gKKworLyogRm9yIElERSBvbiBQQ0kgKi8KKyNkZWZpbmUgTUFYX0hXSUZTICAgICAgIDEwCisKKyNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgwKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKworI2VuZGlmIC8qIF9BU01fVElMRV9JREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzk1YmVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfSU9fSAorI2RlZmluZSBfQVNNX1RJTEVfSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmdWwKKworLyoKKyAqIENvbnZlcnQgYSBwaHlzaWNhbCBwb2ludGVyIHRvIGEgdmlydHVhbCBrZXJuZWwgcG9pbnRlciBmb3IgL2Rldi9tZW0KKyAqIGFjY2Vzcy4KKyAqLworI2RlZmluZSB4bGF0ZV9kZXZfbWVtX3B0cihwKQlfX3ZhKHApCisKKy8qCisgKiBDb252ZXJ0IGEgdmlydHVhbCBjYWNoZWQgcG9pbnRlciB0byBhbiB1bmNhY2hlZCBwb2ludGVyLgorICovCisjZGVmaW5lIHhsYXRlX2Rldl9rbWVtX3B0cihwKQlwCisKKy8qCisgKiBDaGFuZ2UgInN0cnVjdCBwYWdlIiB0byBwaHlzaWNhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAgICAoKGRtYV9hZGRyX3QpcGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKworLyoKKyAqIFNvbWUgcGxhY2VzIHRyeSB0byBwYXNzIGluIGFuIGxvZmZfdCBmb3IgUEhZU0FERFIgKD8hKSwgc28gd2UgY2FzdCBpdCB0bworICogbG9uZyBiZWZvcmUgY2FzdGluZyBpdCB0byBhIHBvaW50ZXIgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuCisgKi8KKyNpZiBDSElQX0hBU19NTUlPKCkKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXAocmVzb3VyY2Vfc2l6ZV90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJcGdwcm90X3QgcGdwcm90KTsKK2V4dGVybiB2b2lkIGlvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKKyNlbHNlCisjZGVmaW5lIGlvcmVtYXAocGh5c2FkZHIsIHNpemUpCSgodm9pZCBfX2lvbWVtICopKHVuc2lnbmVkIGxvbmcpKHBoeXNhZGRyKSkKKyNkZWZpbmUgaW91bm1hcChhZGRyKQkJKCh2b2lkKTApCisjZW5kaWYKKworI2RlZmluZSBpb3JlbWFwX25vY2FjaGUocGh5c2FkZHIsIHNpemUpCQlpb3JlbWFwKHBoeXNhZGRyLCBzaXplKQorI2RlZmluZSBpb3JlbWFwX3dyaXRldGhyb3VnaChwaHlzYWRkciwgc2l6ZSkJaW9yZW1hcChwaHlzYWRkciwgc2l6ZSkKKyNkZWZpbmUgaW9yZW1hcF9mdWxsY2FjaGUocGh5c2FkZHIsIHNpemUpCWlvcmVtYXAocGh5c2FkZHIsIHNpemUpCisKK3ZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBsZW4pOworZXh0ZXJuIGlubGluZSB2b2lkIGlvcG9ydF91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpIHt9CisKKyNkZWZpbmUgbW1pb3diKCkKKworLyogQ29udmVyc2lvbiBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIG1hcHBpbmdzLiAgKi8KKyNkZWZpbmUgbW1fcHRvdihhZGRyKQkJKCh2b2lkICopcGh5c190b192aXJ0KGFkZHIpKQorI2RlZmluZSBtbV92dG9wKGFkZHIpCQkoKHVuc2lnbmVkIGxvbmcpdmlydF90b19waHlzKGFkZHIpKQorCisjaWZkZWYgQ09ORklHX1BDSQorCitleHRlcm4gdTggX3RpbGVfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1MTYgX3RpbGVfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1MzIgX3RpbGVfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB1NjQgX3RpbGVfcmVhZHEodW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIF90aWxlX3dyaXRlYih1OCAgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpOworZXh0ZXJuIHZvaWQgX3RpbGVfd3JpdGV3KHUxNiB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gdm9pZCBfdGlsZV93cml0ZWwodTMyIHZhbCwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIF90aWxlX3dyaXRlcSh1NjQgdmFsLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZWxzZQorCisvKgorICogVGhlIFRpbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgSU9NRU0gdW5sZXNzIFBDSSBpcyBlbmFibGVkLgorICogVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCB5ZXQgc2ltcGx5IG5vdCBkZWNsYXJlIHRoZXNlIG1ldGhvZHMsCisgKiBzaW5jZSBzb21lIGdlbmVyaWMgY29kZSB0aGF0IGNvbXBpbGVzIGludG8gdGhlIGtlcm5lbCwgYnV0CisgKiB3ZSBuZXZlciBydW4sIHVzZXMgdGhlbSB1bmNvbmRpdGlvbmFsbHkuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgaW9tZW1fcGFuaWModm9pZCkKK3sKKwlwYW5pYygicmVhZGIvd3JpdGViIGFuZCBmcmllbmRzIGRvIG5vdCBleGlzdCBvbiB0aWxlIHdpdGhvdXQgUENJIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggX3RpbGVfcmVhZGIodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpb21lbV9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBfdGlsZV9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGlvbWVtX3BhbmljKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF90aWxlX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gaW9tZW1fcGFuaWMoKTsKK30KKworc3RhdGljIGlubGluZSB1NjQgX3RpbGVfcmVhZHEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpb21lbV9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RpbGVfd3JpdGViKHU4ICB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpb21lbV9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RpbGVfd3JpdGV3KHUxNiB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpb21lbV9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RpbGVfd3JpdGVsKHUzMiB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpb21lbV9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX3RpbGVfd3JpdGVxKHU2NCB2YWwsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpb21lbV9wYW5pYygpOworfQorCisjZW5kaWYKKworI2RlZmluZSByZWFkYihhZGRyKSBfdGlsZV9yZWFkYigodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSByZWFkdyhhZGRyKSBfdGlsZV9yZWFkdygodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSByZWFkbChhZGRyKSBfdGlsZV9yZWFkbCgodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSByZWFkcShhZGRyKSBfdGlsZV9yZWFkcSgodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSB3cml0ZWIodmFsLCBhZGRyKSBfdGlsZV93cml0ZWIodmFsLCAodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSB3cml0ZXcodmFsLCBhZGRyKSBfdGlsZV93cml0ZXcodmFsLCAodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSB3cml0ZWwodmFsLCBhZGRyKSBfdGlsZV93cml0ZWwodmFsLCAodW5zaWduZWQgbG9uZylhZGRyKQorI2RlZmluZSB3cml0ZXEodmFsLCBhZGRyKSBfdGlsZV93cml0ZXEodmFsLCAodW5zaWduZWQgbG9uZylhZGRyKQorCisjZGVmaW5lIF9fcmF3X3JlYWRiIHJlYWRiCisjZGVmaW5lIF9fcmF3X3JlYWR3IHJlYWR3CisjZGVmaW5lIF9fcmF3X3JlYWRsIHJlYWRsCisjZGVmaW5lIF9fcmF3X3JlYWRxIHJlYWRxCisjZGVmaW5lIF9fcmF3X3dyaXRlYiB3cml0ZWIKKyNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldworI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCisjZGVmaW5lIF9fcmF3X3dyaXRlcSB3cml0ZXEKKworI2RlZmluZSByZWFkYl9yZWxheGVkIHJlYWRiCisjZGVmaW5lIHJlYWR3X3JlbGF4ZWQgcmVhZHcKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZCByZWFkbAorI2RlZmluZSByZWFkcV9yZWxheGVkIHJlYWRxCisKKyNkZWZpbmUgaW9yZWFkOCByZWFkYgorI2RlZmluZSBpb3JlYWQxNiByZWFkdworI2RlZmluZSBpb3JlYWQzMiByZWFkbAorI2RlZmluZSBpb3JlYWQ2NCByZWFkcQorI2RlZmluZSBpb3dyaXRlOCB3cml0ZWIKKyNkZWZpbmUgaW93cml0ZTE2IHdyaXRldworI2RlZmluZSBpb3dyaXRlMzIgd3JpdGVsCisjZGVmaW5lIGlvd3JpdGU2NCB3cml0ZXEKKworc3RhdGljIGlubGluZSB2b2lkICptZW1jcHlfZnJvbWlvKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQoreworCWludCB4OworCUJVR19PTigodW5zaWduZWQgbG9uZylzcmMgJiAweDMpOworCWZvciAoeCA9IDA7IHggPCBsZW47IHggKz0gNCkKKwkJKih1MzIgKikoZHN0ICsgeCkgPSByZWFkbChzcmMgKyB4KTsKKwlyZXR1cm4gZHN0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm1lbWNweV90b2lvKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKQoreworCWludCB4OworCUJVR19PTigodW5zaWduZWQgbG9uZylkc3QgJiAweDMpOworCWZvciAoeCA9IDA7IHggPCBsZW47IHggKz0gNCkKKwkJd3JpdGVsKCoodTMyICopKHNyYyArIHgpLCBkc3QgKyB4KTsKKwlyZXR1cm4gZHN0OworfQorCisvKgorICogVGhlIFRpbGUgYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgSU9QT1JULCBldmVuIHdpdGggUENJLgorICogVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCB5ZXQgc2ltcGx5IG5vdCBkZWNsYXJlIHRoZXNlIG1ldGhvZHMsCisgKiBzaW5jZSBzb21lIGdlbmVyaWMgY29kZSB0aGF0IGNvbXBpbGVzIGludG8gdGhlIGtlcm5lbCwgYnV0CisgKiB3ZSBuZXZlciBydW4sIHVzZXMgdGhlbSB1bmNvbmRpdGlvbmFsbHkuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgaW9wb3J0X3BhbmljKHZvaWQpCit7CisJcGFuaWMoImluYi9vdXRiIGFuZCBmcmllbmRzIGRvIG5vdCBleGlzdCBvbiB0aWxlIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggaW5iKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gaW9wb3J0X3BhbmljKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGludyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGlvcG9ydF9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBpbmwodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBpb3BvcnRfcGFuaWMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG91dGIodTggYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlvcG9ydF9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0dyh1MTYgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlvcG9ydF9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1MzIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlvcG9ydF9wYW5pYygpOworfQorCisjZGVmaW5lIGluYl9wKGFkZHIpCWluYihhZGRyKQorI2RlZmluZSBpbndfcChhZGRyKQlpbncoYWRkcikKKyNkZWZpbmUgaW5sX3AoYWRkcikJaW5sKGFkZHIpCisjZGVmaW5lIG91dGJfcCh4LCBhZGRyKQlvdXRiKCh4KSwgKGFkZHIpKQorI2RlZmluZSBvdXR3X3AoeCwgYWRkcikJb3V0dygoeCksIChhZGRyKSkKKyNkZWZpbmUgb3V0bF9wKHgsIGFkZHIpCW91dGwoKHgpLCAoYWRkcikpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNiKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCit7CisJaW9wb3J0X3BhbmljKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnN3KHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCit7CisJaW9wb3J0X3BhbmljKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCit7CisJaW9wb3J0X3BhbmljKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvdXRzYih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgaW50IGNvdW50KQoreworCWlvcG9ydF9wYW5pYygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb3V0c3codW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpidWZmZXIsIGludCBjb3VudCkKK3sKKwlpb3BvcnRfcGFuaWMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG91dHNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqYnVmZmVyLCBpbnQgY291bnQpCit7CisJaW9wb3J0X3BhbmljKCk7Cit9CisKKyNkZWZpbmUgaW9yZWFkOF9yZXAocCwgZHN0LCBjb3VudCkgXAorCWluc2IoKHVuc2lnbmVkIGxvbmcpIChwKSwgKGRzdCksIChjb3VudCkpCisjZGVmaW5lIGlvcmVhZDE2X3JlcChwLCBkc3QsIGNvdW50KSBcCisJaW5zdygodW5zaWduZWQgbG9uZykgKHApLCAoZHN0KSwgKGNvdW50KSkKKyNkZWZpbmUgaW9yZWFkMzJfcmVwKHAsIGRzdCwgY291bnQpIFwKKwlpbnNsKCh1bnNpZ25lZCBsb25nKSAocCksIChkc3QpLCAoY291bnQpKQorCisjZGVmaW5lIGlvd3JpdGU4X3JlcChwLCBzcmMsIGNvdW50KSBcCisJb3V0c2IoKHVuc2lnbmVkIGxvbmcpIChwKSwgKHNyYyksIChjb3VudCkpCisjZGVmaW5lIGlvd3JpdGUxNl9yZXAocCwgc3JjLCBjb3VudCkgXAorCW91dHN3KCh1bnNpZ25lZCBsb25nKSAocCksIChzcmMpLCAoY291bnQpKQorI2RlZmluZSBpb3dyaXRlMzJfcmVwKHAsIHNyYywgY291bnQpIFwKKwlvdXRzbCgodW5zaWduZWQgbG9uZykgKHApLCAoc3JjKSwgKGNvdW50KSkKKworI2VuZGlmIC8qIF9BU01fVElMRV9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW9jdGwuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNzlmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaW9jdGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pb2N0bHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM0Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lvY3Rscy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDZlM2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lwYy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGNidWYuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcGNidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM3ZTUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lwY2J1Zi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pcGNidWYuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzJmZDNlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lycS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfSVJRX0gKKyNkZWZpbmUgX0FTTV9USUxFX0lSUV9ICisKKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisKKy8qIFRoZSBoeXBlcnZpc29yIGludGVyZmFjZSBwcm92aWRlcyAzMiBJUlFzLiAqLworI2RlZmluZSBOUl9JUlFTIDMyCisKKy8qIElSUSBudW1iZXJzIHVzZWQgZm9yIGxpbnV4IElQSXMuICovCisjZGVmaW5lIElSUV9SRVNDSEVEVUxFIDEKKwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworLyoKKyAqIERpZmZlcmVudCB3YXlzIG9mIGhhbmRsaW5nIGludGVycnVwdHMuICBUaWxlIGludGVycnVwdHMgYXJlIGFsd2F5cworICogcGVyLWNwdTsgdGhlcmUgaXMgbm8gZ2xvYmFsIGludGVycnVwdCBjb250cm9sbGVyIHRvIGltcGxlbWVudAorICogZW5hYmxlL2Rpc2FibGUuICBNb3N0IG9uYm9hcmQgZGV2aWNlcyBjYW4gc2VuZCB0aGVpciBpbnRlcnJ1cHRzIHRvCisgKiBtYW55IHRpbGVzIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBUaWxlLXNwZWNpZmljIGRyaXZlcnMga25vdyBob3cgdG8KKyAqIGRlYWwgd2l0aCB0aGlzLgorICoKKyAqIEhvd2V2ZXIsIGdlbmVyaWMgZGV2aWNlcyAodXN1YWxseSBQQ0lFIGJhc2VkLCBzb21ldGltZXMgR1BJTykKKyAqIGV4cGVjdCB0aGF0IGludGVycnVwdHMgd2lsbCBmaXJlIG9uIGEgc2luZ2xlIGNvcmUgYXQgYSB0aW1lIGFuZAorICogdGhhdCB0aGUgaXJxIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZyb20gYW55IGNvcmUgYXQgYW55IHRpbWUuCisgKiBXZSBpbXBsZW1lbnQgdGhpcyBieSBkaXJlY3Rpbmcgc3VjaCBpbnRlcnJ1cHRzIHRvIGEgc2luZ2xlIGNvcmUuCisgKgorICogT25lIGFkZGVkIHdyaW5rbGUgaXMgdGhhdCBQQ0kgaW50ZXJydXB0cyBjYW4gYmUgZWl0aGVyCisgKiBoYXJkd2FyZS1jbGVhcmVkIChsZWdhY3kgaW50ZXJydXB0cykgb3Igc29mdHdhcmUgY2xlYXJlZCAoTVNJKS4KKyAqIE90aGVyIGdlbmVyaWMgZGV2aWNlIHN5c3RlbXMgKEdQSU8pIGFyZSBhbHdheXMgc29mdHdhcmUtY2xlYXJlZC4KKyAqCisgKiBUaGUgZW51bXMgYmVsb3cgYXJlIHVzZWQgYnkgZHJpdmVycyBmb3Igb25ib2FyZCBkZXZpY2VzLCBpbmNsdWRpbmcKKyAqIHRoZSBpbnRlcm5hbHMgb2YgUENJIHJvb3QgY29tcGxleCBhbmQgR1BJTy4gIFRoZXkgYWxsb3cgdGhlIGRyaXZlcgorICogdG8gdGVsbCB0aGUgZ2VuZXJpYyBpcnEgY29kZSB3aGF0IGtpbmQgb2YgaW50ZXJydXB0IGlzIG1hcHBlZCB0byBhCisgKiBwYXJ0aWN1bGFyIElSUSBudW1iZXIuCisgKi8KK2VudW0geworCS8qIHBlci1jcHUgaW50ZXJydXB0OyB1c2UgZW5hYmxlL2Rpc2FibGVfcGVyY3B1X2lycSgpIHRvIG1hc2sgKi8KKwlUSUxFX0lSUV9QRVJDUFUsCisJLyogZ2xvYmFsIGludGVycnVwdCwgaGFyZHdhcmUgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nLiAqLworCVRJTEVfSVJRX0hXX0NMRUFSLAorCS8qIGdsb2JhbCBpbnRlcnJ1cHQsIHNvZnR3YXJlIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZy4gKi8KKwlUSUxFX0lSUV9TV19DTEVBUiwKK307CisKKworLyoKKyAqIFBhcmF2aXJ0dWFsaXplZCBkcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgd2hlbiB0aGV5IGR5bmFtaWNhbGx5CisgKiBhbGxvY2F0ZSBhIG5ldyBJUlEgb3IgZGlzY292ZXIgYW4gSVJRIHRoYXQgd2FzIHByZS1hbGxvY2F0ZWQgYnkgdGhlCisgKiBoeXBlcnZpc29yIGZvciB1c2Ugd2l0aCB0aGVpciBwYXJ0aWN1bGFyIGRldmljZS4gIFRoaXMgZ2l2ZXMgdGhlCisgKiBJUlEgc3Vic3lzdGVtIGFuIG9wcG9ydHVuaXR5IHRvIGRvIGludGVycnVwdC10eXBlLXNwZWNpZmljCisgKiBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBJU1NVRTogV2Ugc2hvdWxkIG1vZGlmeSB0aGlzIEFQSSBzbyB0aGF0IHJlZ2lzdGVyaW5nIGFueXRoaW5nCisgKiBleGNlcHQgcGVyY3B1IGludGVycnVwdHMgYWxzbyByZXF1aXJlcyBwcm92aWRpbmcgY2FsbGJhY2sgbWV0aG9kcworICogZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgdGhlIGludGVycnVwdC4gIFRoaXMgd291bGQgYWxsb3cgdGhlCisgKiBnZW5lcmljIElSUSBjb2RlIHRvIHByb3h5IGVuYWJsZS9kaXNhYmxlX2lycSgpIGNhbGxzIGJhY2sgaW50byB0aGUKKyAqIFBDSSBzdWJzeXN0ZW0sIHdoaWNoIGluIHR1cm4gY291bGQgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGludGVycnVwdAorICogYXQgdGhlIFBDSSBzaGltLgorICovCit2b2lkIHRpbGVfaXJxX2FjdGl2YXRlKHVuc2lnbmVkIGludCBpcnEsIGludCB0aWxlX2lycV90eXBlKTsKKworLyoKKyAqIEZvciBvbmJvYXJkLCBub24tUENJIChlLmcuIFRJTEVfSVJRX1BFUkNQVSkgZGV2aWNlcywgZHJpdmVycyBrbm93CisgKiBob3cgdG8gdXNlIGVuYWJsZS9kaXNhYmxlX3BlcmNwdV9pcnEoKSB0byBtYW5hZ2UgaW50ZXJydXB0cyBvbiBlYWNoCisgKiBjb3JlLiAgV2UgY2FuJ3QgdXNlIHRoZSBnZW5lcmljIGVuYWJsZS9kaXNhYmxlX2lycSgpIGJlY2F1c2UgdGhleQorICogdXNlIGEgc2luZ2xlIHJlZmVyZW5jZSBjb3VudCBwZXIgaXJxLCByYXRoZXIgdGhhbiBwZXIgY3B1IHBlciBpcnEuCisgKi8KK3ZvaWQgZW5hYmxlX3BlcmNwdV9pcnEodW5zaWduZWQgaW50IGlycSk7Cit2b2lkIGRpc2FibGVfcGVyY3B1X2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworCit2b2lkIHNldHVwX2lycV9yZWdzKHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9USUxFX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZDljMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vaXJxX3JlZ3MuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaXJxX3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZjY3YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0wLDAgKzEsMjY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX0lSUUZMQUdTX0gKKyNkZWZpbmUgX0FTTV9USUxFX0lSUUZMQUdTX0gKKworI2luY2x1ZGUgPGFyY2gvaW50ZXJydXB0cy5oPgorI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisvKgorICogVGhlIHNldCBvZiBpbnRlcnJ1cHRzIHdlIHdhbnQgdG8gYWxsb3cgd2hlbiBpbnRlcnJ1cHRzIGFyZSBub21pbmFsbHkKKyAqIGRpc2FibGVkLiAgVGhlIHJlbWFpbmRlciBhcmUgZWZmZWN0aXZlbHkgIk5NSSIgaW50ZXJydXB0cyBmcm9tCisgKiB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZ2VuZXJpYyBMaW51eCBjb2RlLiAgTm90ZSB0aGF0IHN5bmNocm9ub3VzCisgKiBpbnRlcnJ1cHRzIChha2EgIm5vbi1xdWV1ZWQiKSBhcmUgbm90IGJsb2NrZWQgYnkgdGhlIG1hc2sgaW4gYW55IGNhc2UuCisgKi8KKyNpZiBDSElQX0hBU19BVVhfUEVSRl9DT1VOVEVSUygpCisjZGVmaW5lIExJTlVYX01BU0tBQkxFX0lOVEVSUlVQVFMgXAorCSh+KElOVF9NQVNLKElOVF9QRVJGX0NPVU5UKSB8IElOVF9NQVNLKElOVF9BVVhfUEVSRl9DT1VOVCkpKQorI2Vsc2UKKyNkZWZpbmUgTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUUyBcCisJKH4oSU5UX01BU0soSU5UX1BFUkZfQ09VTlQpKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBOT1RFOiB3ZSBjYW4ndCBpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4gZHVlIHRvICNpbmNsdWRlIGRlcGVuZGVuY2llcy4gKi8KKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisKKy8qIFNldCBhbmQgY2xlYXIga2VybmVsIGludGVycnVwdCBtYXNrcy4gKi8KKyNpZiBDSElQX0hBU19TUExJVF9JTlRSX01BU0soKQorI2lmIElOVF9QRVJGX0NPVU5UIDwgMzIgfHwgSU5UX0FVWF9QRVJGX0NPVU5UIDwgMzIgfHwgSU5UX01FTV9FUlJPUiA+PSAzMgorIyBlcnJvciBGaXggYXNzdW1wdGlvbnMgYWJvdXQgd2hpY2ggd29yZCB2YXJpb3VzIGludGVycnVwdHMgYXJlIGluCisjZW5kaWYKKyNkZWZpbmUgaW50ZXJydXB0X21hc2tfc2V0KG4pIGRvIHsgXAorCWludCBfX24gPSAobik7IFwKKwlpbnQgX19tYXNrID0gMSA8PCAoX19uICYgMHgxZik7IFwKKwlpZiAoX19uIDwgMzIpIFwKKwkJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfTUFTS19TRVRfMV8wLCBfX21hc2spOyBcCisJZWxzZSBcCisJCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX01BU0tfU0VUXzFfMSwgX19tYXNrKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW50ZXJydXB0X21hc2tfcmVzZXQobikgZG8geyBcCisJaW50IF9fbiA9IChuKTsgXAorCWludCBfX21hc2sgPSAxIDw8IChfX24gJiAweDFmKTsgXAorCWlmIChfX24gPCAzMikgXAorCQlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLX1JFU0VUXzFfMCwgX19tYXNrKTsgXAorCWVsc2UgXAorCQlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLX1JFU0VUXzFfMSwgX19tYXNrKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgaW50ZXJydXB0X21hc2tfY2hlY2sobikgKHsgXAorCWludCBfX24gPSAobik7IFwKKwkoKChfX24gPCAzMikgPyBcCisJIF9faW5zbl9tZnNwcihTUFJfSU5URVJSVVBUX01BU0tfMV8wKSA6IFwKKwkgX19pbnNuX21mc3ByKFNQUl9JTlRFUlJVUFRfTUFTS18xXzEpKSBcCisJICA+PiAoX19uICYgMHgxZikpICYgMTsgXAorfSkKKyNkZWZpbmUgaW50ZXJydXB0X21hc2tfc2V0X21hc2sobWFzaykgZG8geyBcCisJdW5zaWduZWQgbG9uZyBsb25nIF9fbSA9IChtYXNrKTsgXAorCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX01BU0tfU0VUXzFfMCwgKHVuc2lnbmVkIGxvbmcpKF9fbSkpOyBcCisJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfTUFTS19TRVRfMV8xLCAodW5zaWduZWQgbG9uZykoX19tPj4zMikpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBpbnRlcnJ1cHRfbWFza19yZXNldF9tYXNrKG1hc2spIGRvIHsgXAorCXVuc2lnbmVkIGxvbmcgbG9uZyBfX20gPSAobWFzayk7IFwKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLX1JFU0VUXzFfMCwgKHVuc2lnbmVkIGxvbmcpKF9fbSkpOyBcCisJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfTUFTS19SRVNFVF8xXzEsICh1bnNpZ25lZCBsb25nKShfX20+PjMyKSk7IFwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBpbnRlcnJ1cHRfbWFza19zZXQobikgXAorCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX01BU0tfU0VUXzEsICgxVUwgPDwgKG4pKSkKKyNkZWZpbmUgaW50ZXJydXB0X21hc2tfcmVzZXQobikgXAorCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX01BU0tfUkVTRVRfMSwgKDFVTCA8PCAobikpKQorI2RlZmluZSBpbnRlcnJ1cHRfbWFza19jaGVjayhuKSBcCisJKChfX2luc25fbWZzcHIoU1BSX0lOVEVSUlVQVF9NQVNLXzEpID4+IChuKSkgJiAxKQorI2RlZmluZSBpbnRlcnJ1cHRfbWFza19zZXRfbWFzayhtYXNrKSBcCisJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfTUFTS19TRVRfMSwgKG1hc2spKQorI2RlZmluZSBpbnRlcnJ1cHRfbWFza19yZXNldF9tYXNrKG1hc2spIFwKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLX1JFU0VUXzEsIChtYXNrKSkKKyNlbmRpZgorCisvKgorICogVGhlIHNldCBvZiBpbnRlcnJ1cHRzIHdlIHdhbnQgYWN0aXZlIGlmIGlycXMgYXJlIGVuYWJsZWQuCisgKiBOb3RlIHRoYXQgaW4gcGFydGljdWxhciwgdGhlIHRpbGUgdGltZXIgaW50ZXJydXB0IGNvbWVzIGFuZCBnb2VzCisgKiBmcm9tIHRoaXMgc2V0LCBzaW5jZSB3ZSBoYXZlIG5vIG90aGVyIHdheSB0byB0dXJuIG9mZiB0aGUgdGltZXIuCisgKiBMaWtld2lzZSwgSU5UQ1RSTF8xIGlzIHJlbW92ZWQgYW5kIHJlLWFkZGVkIGR1cmluZyBkZXZpY2UKKyAqIGludGVycnVwdHMsIGFzIGlzIHRoZSB0aGUgaGFyZHdhbGwgVUROX0ZJUkVXQUxMIGludGVycnVwdC4KKyAqIFdlIHVzZSBhIGxvdyBiaXQgKE1FTV9FUlJPUikgYXMgb3VyIHNlbnRpbmVsIHZhbHVlIGFuZCBtYWtlIHN1cmUgaXQKKyAqIGlzIGFsd2F5cyBjbGFpbWVkIGFzIGFuICJhY3RpdmUgaW50ZXJydXB0IiBzbyB3ZSBjYW4gcXVlcnkgdGhhdCBiaXQKKyAqIHRvIGtub3cgb3VyIGN1cnJlbnQgc3RhdGUuCisgKi8KK0RFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nIGxvbmcsIGludGVycnVwdHNfZW5hYmxlZF9tYXNrKTsKKyNkZWZpbmUgSU5JVElBTF9JTlRFUlJVUFRTX0VOQUJMRUQgSU5UX01BU0soSU5UX01FTV9FUlJPUikKKworLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKSBcCisJaW50ZXJydXB0X21hc2tfc2V0X21hc2soTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUUykKKworLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cywgaW5jbHVkaW5nIE5NSXMuICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZV9hbGwoKSBcCisJaW50ZXJydXB0X21hc2tfc2V0X21hc2soLTFVTCkKKworLyogUmUtZW5hYmxlIGFsbCBtYXNrYWJsZSBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSByYXdfbG9jYWxfaXJxX2VuYWJsZSgpIFwKKwlpbnRlcnJ1cHRfbWFza19yZXNldF9tYXNrKF9fZ2V0X2NwdV92YXIoaW50ZXJydXB0c19lbmFibGVkX21hc2spKQorCisvKiBEaXNhYmxlIG9yIGVuYWJsZSBpbnRlcnJ1cHRzIGJhc2VkIG9uIGZsYWcgYXJndW1lbnQuICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfcmVzdG9yZShkaXNhYmxlZCkgZG8geyBcCisJaWYgKGRpc2FibGVkKSBcCisJCXJhd19sb2NhbF9pcnFfZGlzYWJsZSgpOyBcCisJZWxzZSBcCisJCXJhd19sb2NhbF9pcnFfZW5hYmxlKCk7IFwKK30gd2hpbGUgKDApCisKKy8qIFJldHVybiB0cnVlIGlmICJmbGFncyIgYXJndW1lbnQgbWVhbnMgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuICovCisjZGVmaW5lIHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSAoKGZsYWdzKSAhPSAwKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBpbnRlcnJ1cHRzIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuICovCisjZGVmaW5lIHJhd19pcnFzX2Rpc2FibGVkKCkgaW50ZXJydXB0X21hc2tfY2hlY2soSU5UX01FTV9FUlJPUikKKworLyogU2F2ZSB3aGV0aGVyIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpICgoZmxhZ3MpID0gcmF3X2lycXNfZGlzYWJsZWQoKSkKKworLyogU2F2ZSB3aGV0aGVyIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZCwgdGhlbiBkaXNhYmxlIHRoZW0uICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncykgXAorCWRvIHsgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyByYXdfbG9jYWxfaXJxX2Rpc2FibGUoKTsgfSB3aGlsZSAoMCkKKworLyogUHJldmVudCB0aGUgZ2l2ZW4gaW50ZXJydXB0IGZyb20gYmVpbmcgZW5hYmxlZCBuZXh0IHRpbWUgd2UgZW5hYmxlIGlycXMuICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfbWFzayhpbnRlcnJ1cHQpIFwKKwkoX19nZXRfY3B1X3ZhcihpbnRlcnJ1cHRzX2VuYWJsZWRfbWFzaykgJj0gfklOVF9NQVNLKGludGVycnVwdCkpCisKKy8qIFByZXZlbnQgdGhlIGdpdmVuIGludGVycnVwdCBmcm9tIGJlaW5nIGVuYWJsZWQgaW1tZWRpYXRlbHkuICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfbWFza19ub3coaW50ZXJydXB0KSBkbyB7IFwKKwlyYXdfbG9jYWxfaXJxX21hc2soaW50ZXJydXB0KTsgXAorCWludGVycnVwdF9tYXNrX3NldChpbnRlcnJ1cHQpOyBcCit9IHdoaWxlICgwKQorCisvKiBBbGxvdyB0aGUgZ2l2ZW4gaW50ZXJydXB0IHRvIGJlIGVuYWJsZWQgbmV4dCB0aW1lIHdlIGVuYWJsZSBpcnFzLiAqLworI2RlZmluZSByYXdfbG9jYWxfaXJxX3VubWFzayhpbnRlcnJ1cHQpIFwKKwkoX19nZXRfY3B1X3ZhcihpbnRlcnJ1cHRzX2VuYWJsZWRfbWFzaykgfD0gSU5UX01BU0soaW50ZXJydXB0KSkKKworLyogQWxsb3cgdGhlIGdpdmVuIGludGVycnVwdCB0byBiZSBlbmFibGVkIGltbWVkaWF0ZWx5LCBpZiAhaXJxc19kaXNhYmxlZC4gKi8KKyNkZWZpbmUgcmF3X2xvY2FsX2lycV91bm1hc2tfbm93KGludGVycnVwdCkgZG8geyBcCisJcmF3X2xvY2FsX2lycV91bm1hc2soaW50ZXJydXB0KTsgXAorCWlmICghaXJxc19kaXNhYmxlZCgpKSBcCisJCWludGVycnVwdF9tYXNrX3Jlc2V0KGludGVycnVwdCk7IFwKK30gd2hpbGUgKDApCisKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBXZSBwcm92aWRlIGEgc29tZXdoYXQgbW9yZSByZXN0cmljdGVkIHNldCBmb3IgYXNzZW1ibHkuICovCisKKyNpZmRlZiBfX3RpbGVneF9fCisKKyNpZiBJTlRfTUVNX0VSUk9SICE9IDAKKyMgZXJyb3IgRml4IElSUV9ESVNBQkxFRCgpIG1hY3JvCisjZW5kaWYKKworLyogUmV0dXJuIDAgb3IgMSB0byBpbmRpY2F0ZSB3aGV0aGVyIGludGVycnVwdHMgYXJlIGN1cnJlbnRseSBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgSVJRU19ESVNBQkxFRCh0bXApCQkJCQlcCisJbWZzcHIgICB0bXAsIElOVEVSUlVQVF9NQVNLXzE7CQkJCVwKKwlhbmRpICAgIHRtcCwgdG1wLCAxCisKKy8qIExvYWQgdXAgYSBwb2ludGVyIHRvICZpbnRlcnJ1cHRzX2VuYWJsZWRfbWFzay4gKi8KKyNkZWZpbmUgR0VUX0lOVEVSUlVQVFNfRU5BQkxFRF9NQVNLX1BUUihyZWcpCQkJXAorCW1vdmVsaSByZWcsIGh3Ml9sYXN0KGludGVycnVwdHNfZW5hYmxlZF9tYXNrKTsgXAorCXNobDE2aW5zbGkgcmVnLCByZWcsIGh3MShpbnRlcnJ1cHRzX2VuYWJsZWRfbWFzayk7IFwKKwlzaGwxNmluc2xpIHJlZywgcmVnLCBodzAoaW50ZXJydXB0c19lbmFibGVkX21hc2spOyBcCisJYWRkICAgICByZWcsIHJlZywgdHAKKworLyogRGlzYWJsZSBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBJUlFfRElTQUJMRSh0bXAwLCB0bXAxKQkJCQkJXAorCW1vdmVsaSAgdG1wMCwgaHcyX2xhc3QoTElOVVhfTUFTS0FCTEVfSU5URVJSVVBUUyk7CVwKKwlzaGwxNmluc2xpIHRtcDAsIHRtcDAsIGh3MShMSU5VWF9NQVNLQUJMRV9JTlRFUlJVUFRTKTsJXAorCXNobDE2aW5zbGkgdG1wMCwgdG1wMCwgaHcwKExJTlVYX01BU0tBQkxFX0lOVEVSUlVQVFMpOwlcCisJbXRzcHIgICBJTlRFUlJVUFRfTUFTS19TRVRfMSwgdG1wMAorCisvKiBEaXNhYmxlIEFMTCBzeW5jaHJvbm91cyBpbnRlcnJ1cHRzICh1c2VkIGJ5IE5NSSBlbnRyeSkuICovCisjZGVmaW5lIElSUV9ESVNBQkxFX0FMTCh0bXApCQkJCQlcCisJbW92ZWkgICB0bXAsIC0xOwkJCQkJXAorCW10c3ByICAgSU5URVJSVVBUX01BU0tfU0VUXzEsIHRtcAorCisvKiBFbmFibGUgaW50ZXJydXB0cy4gKi8KKyNkZWZpbmUgSVJRX0VOQUJMRSh0bXAwLCB0bXAxKQkJCQkJXAorCUdFVF9JTlRFUlJVUFRTX0VOQUJMRURfTUFTS19QVFIodG1wMCk7CQkJXAorCWxkICAgICAgdG1wMCwgdG1wMDsJCQkJCVwKKwltdHNwciAgIElOVEVSUlVQVF9NQVNLX1JFU0VUXzEsIHRtcDAKKworI2Vsc2UgLyogIV9fdGlsZWd4X18gKi8KKworLyoKKyAqIFJldHVybiAwIG9yIDEgdG8gaW5kaWNhdGUgd2hldGhlciBpbnRlcnJ1cHRzIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuCisgKiBOb3RlIHRoYXQgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSB1c2UgYSBiaXQgZnJvbSB0aGUgImxvdyIgbWFzayB3b3JkLAorICogc2luY2Ugd2hlbiB3ZSBhcmUgZW5hYmxpbmcsIHRoYXQgaXMgdGhlIHdvcmQgd2Ugd3JpdGUgZmlyc3QsIHNvIGlmIHdlCisgKiBhcmUgaW50ZXJydXB0ZWQgYWZ0ZXIgb25seSB3cml0aW5nIGhhbGYgb2YgdGhlIG1hc2ssIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIgd2lsbCBjb3JyZWN0bHkgb2JzZXJ2ZSB0aGF0IHdlIGhhdmUgaW50ZXJydXB0cyBlbmFibGVkLCBhbmQKKyAqIHdpbGwgZW5hYmxlIGludGVycnVwdHMgaXRzZWxmIG9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgorICogKG1ha2luZyB0aGUgb3JpZ2luYWwgY29kZSdzIHdyaXRlIG9mIHRoZSAiaGlnaCIgbWFzayB3b3JkIGlkZW1wb3RlbnQpLgorICovCisjZGVmaW5lIElSUVNfRElTQUJMRUQodG1wKQkJCQkJXAorCW1mc3ByICAgdG1wLCBJTlRFUlJVUFRfTUFTS18xXzA7CQkJXAorCXNocmkgICAgdG1wLCB0bXAsIElOVF9NRU1fRVJST1I7CQkJXAorCWFuZGkgICAgdG1wLCB0bXAsIDEKKworLyogTG9hZCB1cCBhIHBvaW50ZXIgdG8gJmludGVycnVwdHNfZW5hYmxlZF9tYXNrLiAqLworI2RlZmluZSBHRVRfSU5URVJSVVBUU19FTkFCTEVEX01BU0tfUFRSKHJlZykJCQlcCisJbW92ZWxpICByZWcsIGxvMTYoaW50ZXJydXB0c19lbmFibGVkX21hc2spOwlcCisJYXVsaSAgICByZWcsIHJlZywgaGExNihpbnRlcnJ1cHRzX2VuYWJsZWRfbWFzayk7XAorCWFkZCAgICAgcmVnLCByZWcsIHRwCisKKy8qIERpc2FibGUgaW50ZXJydXB0cy4gKi8KKyNkZWZpbmUgSVJRX0RJU0FCTEUodG1wMCwgdG1wMSkJCQkJCVwKKwl7CQkJCQkJCVwKKwkgbW92ZWkgIHRtcDAsIC0xOwkJCQkJXAorCSBtb3ZlbGkgdG1wMSwgbG8xNihMSU5VWF9NQVNLQUJMRV9JTlRFUlJVUFRTKQkJXAorCX07CQkJCQkJCVwKKwl7CQkJCQkJCVwKKwkgbXRzcHIgIElOVEVSUlVQVF9NQVNLX1NFVF8xXzAsIHRtcDA7CQkJXAorCSBhdWxpICAgdG1wMSwgdG1wMSwgaGExNihMSU5VWF9NQVNLQUJMRV9JTlRFUlJVUFRTKQlcCisJfTsJCQkJCQkJXAorCW10c3ByICAgSU5URVJSVVBUX01BU0tfU0VUXzFfMSwgdG1wMQorCisvKiBEaXNhYmxlIEFMTCBzeW5jaHJvbm91cyBpbnRlcnJ1cHRzICh1c2VkIGJ5IE5NSSBlbnRyeSkuICovCisjZGVmaW5lIElSUV9ESVNBQkxFX0FMTCh0bXApCQkJCQlcCisJbW92ZWkgICB0bXAsIC0xOwkJCQkJXAorCW10c3ByICAgSU5URVJSVVBUX01BU0tfU0VUXzFfMCwgdG1wOwkJCVwKKwltdHNwciAgIElOVEVSUlVQVF9NQVNLX1NFVF8xXzEsIHRtcAorCisvKiBFbmFibGUgaW50ZXJydXB0cy4gKi8KKyNkZWZpbmUgSVJRX0VOQUJMRSh0bXAwLCB0bXAxKQkJCQkJXAorCUdFVF9JTlRFUlJVUFRTX0VOQUJMRURfTUFTS19QVFIodG1wMCk7CQkJXAorCXsJCQkJCQkJXAorCSBsdyAgICAgdG1wMCwgdG1wMDsJCQkJCVwKKwkgYWRkaSAgIHRtcDEsIHRtcDAsIDQJCQkJCVwKKwl9OwkJCQkJCQlcCisJbHcgICAgICB0bXAxLCB0bXAxOwkJCQkJXAorCW10c3ByICAgSU5URVJSVVBUX01BU0tfUkVTRVRfMV8wLCB0bXAwOwkJCVwKKwltdHNwciAgIElOVEVSUlVQVF9NQVNLX1JFU0VUXzFfMSwgdG1wMQorI2VuZGlmCisKKy8qCisgKiBEbyB0aGUgQ1BVJ3MgSVJRLXN0YXRlIHRyYWNpbmcgZnJvbSBhc3NlbWJseSBjb2RlLiBXZSBjYWxsIGEKKyAqIEMgZnVuY3Rpb24sIGJ1dCBhbG1vc3QgZXZlcnl3aGVyZSB3ZSBkbywgd2UgZG9uJ3QgbWluZCBjbG9iYmVyaW5nCisgKiBhbGwgdGhlIGNhbGxlci1zYXZlZCByZWdpc3RlcnMuCisgKi8KKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKyMgZGVmaW5lIFRSQUNFX0lSUVNfT04gIGphbCB0cmFjZV9oYXJkaXJxc19vbgorIyBkZWZpbmUgVFJBQ0VfSVJRU19PRkYgamFsIHRyYWNlX2hhcmRpcnFzX29mZgorI2Vsc2UKKyMgZGVmaW5lIFRSQUNFX0lSUVNfT04KKyMgZGVmaW5lIFRSQUNFX0lSUVNfT0ZGCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX0lSUUZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rZGVidWcuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWNlMWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2tkZWJ1Zy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9rZGVidWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2tleGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYTZjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rZXhlYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogYmFzZWQgb24ga2V4ZWMuaCBmcm9tIG90aGVyIGFyY2hpdGVjdHVyZXMgaW4gbGludXgtMi42LjE4CisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfS0VYRUNfSAorI2RlZmluZSBfQVNNX1RJTEVfS0VYRUNfSAorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyogTWF4aW11bSBwaHlzaWNhbCBhZGRyZXNzIHdlIGNhbiB1c2UgcGFnZXMgZnJvbS4gKi8KKyNkZWZpbmUgS0VYRUNfU09VUkNFX01FTU9SWV9MSU1JVCBUQVNLX1NJWkUKKy8qIE1heGltdW0gYWRkcmVzcyB3ZSBjYW4gcmVhY2ggaW4gcGh5c2ljYWwgYWRkcmVzcyBtb2RlLiAqLworI2RlZmluZSBLRVhFQ19ERVNUSU5BVElPTl9NRU1PUllfTElNSVQgVEFTS19TSVpFCisvKiBNYXhpbXVtIGFkZHJlc3Mgd2UgY2FuIHVzZSBmb3IgdGhlIGNvbnRyb2wgY29kZSBidWZmZXIuICovCisjZGVmaW5lIEtFWEVDX0NPTlRST0xfTUVNT1JZX0xJTUlUIFRBU0tfU0laRQorCisjZGVmaW5lIEtFWEVDX0NPTlRST0xfUEFHRV9TSVpFCVBBR0VfU0laRQorCisvKgorICogV2UgZG9uJ3QgYm90aGVyIHRvIHByb3ZpZGUgYSB1bmlxdWUgaWRlbnRpZmllciwgc2luY2Ugd2UgY2FuIG9ubHkKKyAqIHJlYm9vdCB3aXRoIGEgc2luZ2xlIHR5cGUgb2Yga2VybmVsIGltYWdlIGFueXdheS4KKyAqLworI2RlZmluZSBLRVhFQ19BUkNIIEtFWEVDX0FSQ0hfREVGQVVMVAorCisvKiBVc2UgdGhlIHRpbGUgb3ZlcnJpZGUgZm9yIHRoZSBwYWdlIGFsbG9jYXRvci4gKi8KK3N0cnVjdCBwYWdlICpraW1hZ2VfYWxsb2NfcGFnZXNfYXJjaChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKKyNkZWZpbmUga2ltYWdlX2FsbG9jX3BhZ2VzX2FyY2gga2ltYWdlX2FsbG9jX3BhZ2VzX2FyY2gKKworI2RlZmluZSBNQVhfTk9URV9CWVRFUyAxMDI0CisKKy8qIERlZmluZWQgaW4gYXJjaC90aWxlL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVsb2NhdGVfbmV3X2tlcm5lbFtdOworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplOworZXh0ZXJuIHZvaWQgcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQodm9pZCk7CisKKy8qIFByb3ZpZGUgYSBkdW1teSBkZWZpbml0aW9uIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX3NldHVwX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm4sIHN0cnVjdCBwdF9yZWdzICpvKQoreworfQorCisjZW5kaWYgLyogX0FTTV9USUxFX0tFWEVDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ODAxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfS01BUF9UWVBFU19ICisjZGVmaW5lIF9BU01fVElMRV9LTUFQX1RZUEVTX0gKKworLyoKKyAqIEluIFRJTEUgTGludXggZWFjaCBzZXQgb2YgZm91ciBvZiB0aGVzZSB1c2VzIGFub3RoZXIgMTZNQiBjaHVuayBvZgorICogYWRkcmVzcyBzcGFjZSwgZ2l2ZW4gNjQgdGlsZXMgYW5kIDY0S0IgcGFnZXMsIHNvIHdlIG9ubHkgZW5hYmxlCisgKiBvbmVzIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqLworZW51bSBrbV90eXBlIHsKKwlLTV9CT1VOQ0VfUkVBRCwKKwlLTV9TS0JfU1VOUlBDX0RBVEEsCisJS01fU0tCX0RBVEFfU09GVElSUSwKKwlLTV9VU0VSMCwKKwlLTV9VU0VSMSwKKwlLTV9CSU9fU1JDX0lSUSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fTUVNQ1BZMCwKKwlLTV9NRU1DUFkxLAorI2lmIGRlZmluZWQoQ09ORklHX0hJR0hQVEUpCisJS01fUFRFMCwKKwlLTV9QVEUxLAorI2VuZGlmCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmIC8qIF9BU01fVElMRV9LTUFQX1RZUEVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbGlua2FnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjFjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbGlua2FnZS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfTElOS0FHRV9ICisjZGVmaW5lIF9BU01fVElMRV9MSU5LQUdFX0gKKworI2luY2x1ZGUgPGZlZWRiYWNrLmg+CisKKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gOAorCisvKgorICogVGhlIFNURF9FTlRSWSBhbmQgU1REX0VORFBST0MgbWFjcm9zIHB1dCB0aGUgZnVuY3Rpb24gaW4gYQorICogc2VsZi1uYW1lZCAudGV4dC5mb28gc2VjdGlvbiwgYW5kIGlmIGxpbmtlciBmZWVkYmFjayBjb2xsZWN0aW9uCisgKiBpcyBlbmFibGVkLCBhZGQgYSBzdWl0YWJsZSBjYWxsIHRvIHRoZSBmZWVkYmFjayBjb2xsZWN0aW9uIGNvZGUuCisgKiBTVERfRU5UUllfU0VDVElPTiBsZXRzIHlvdSBzcGVjaWZ5IGEgbm9uLXN0YW5kYXJkIHNlY3Rpb24gbmFtZS4KKyAqLworCisjZGVmaW5lIFNURF9FTlRSWShuYW1lKSBcCisgIC5wdXNoc2VjdGlvbiAudGV4dC4jI25hbWUsICJheCI7IFwKKyAgRU5UUlkobmFtZSk7IFwKKyAgRkVFREJBQ0tfRU5URVIobmFtZSkKKworI2RlZmluZSBTVERfRU5UUllfU0VDVElPTihuYW1lLCBzZWN0aW9uKSBcCisgIC5wdXNoc2VjdGlvbiBzZWN0aW9uLCAiYXgiOyBcCisgIEVOVFJZKG5hbWUpOyBcCisgIEZFRURCQUNLX0VOVEVSX0VYUExJQ0lUKG5hbWUsIHNlY3Rpb24sIC5MZW5kXyMjbmFtZSAtIG5hbWUpCisKKyNkZWZpbmUgU1REX0VORFBST0MobmFtZSkgXAorICBFTkRQUk9DKG5hbWUpOyBcCisgIC5MZW5kXyMjbmFtZTo7IFwKKyAgLnBvcHNlY3Rpb24KKworLyogQ3JlYXRlIGEgZmlsZS1zdGF0aWMgZnVuY3Rpb24gZW50cnkgc2V0IHVwIGZvciBmZWVkYmFjayBnYXRoZXJpbmcuICovCisjZGVmaW5lIFNURF9FTlRSWV9MT0NBTChuYW1lKSBcCisgIC5wdXNoc2VjdGlvbiAudGV4dC4jI25hbWUsICJheCI7IFwKKyAgQUxJR047IFwKKyAgbmFtZTo7IFwKKyAgRkVFREJBQ0tfRU5URVIobmFtZSkKKworI2VuZGlmIC8qIF9BU01fVElMRV9MSU5LQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExYzUzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9sb2NhbC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9sb2NhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL21lbXByb2YuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tZW1wcm9mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5OTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tZW1wcm9mLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGUgaHlwZXJ2aXNvcidzIG1lbW9yeSBjb250cm9sbGVyIHByb2ZpbGluZyBpbmZyYXN0cnVjdHVyZSBhbGxvd3MKKyAqIHRoZSBwcm9ncmFtbWVyIHRvIGZpbmQgb3V0IHdoYXQgZnJhY3Rpb24gb2YgdGhlIGF2YWlsYWJsZSBtZW1vcnkKKyAqIGJhbmR3aWR0aCBpcyBiZWluZyBjb25zdW1lZCBhdCBlYWNoIG1lbW9yeSBjb250cm9sbGVyLiAgVGhlCisgKiBwcm9maWxlciBwcm92aWRlcyBzdGFydCwgc3RvcCwgYW5kIGNsZWFyIG9wZXJhdGlvbnMgdG8gYWxsb3dzCisgKiBwcm9maWxpbmcgb3ZlciBhIHNwZWNpZmljIHRpbWUgd2luZG93LCBhcyB3ZWxsIGFzIGFuIGludGVyZmFjZSBmb3IKKyAqIHJlYWRpbmcgdGhlIG1vc3QgcmVjZW50IHByb2ZpbGUgdmFsdWVzLgorICoKKyAqIFRoaXMgaGVhZGVyIGRlY2xhcmVzIElPQ1RMIGNvZGVzIG5lY2Vzc2FyeSB0byBjb250cm9sIG1lbXByb2YuCisgKi8KKyNpZm5kZWYgX0FTTV9USUxFX01FTVBST0ZfSAorI2RlZmluZSBfQVNNX1RJTEVfTUVNUFJPRl9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIE1FTVBST0ZfSU9DVExfVFlQRSAweEI0CisjZGVmaW5lIE1FTVBST0ZfSU9DVExfU1RBUlQgX0lPKE1FTVBST0ZfSU9DVExfVFlQRSwgMCkKKyNkZWZpbmUgTUVNUFJPRl9JT0NUTF9TVE9QIF9JTyhNRU1QUk9GX0lPQ1RMX1RZUEUsIDEpCisjZGVmaW5lIE1FTVBST0ZfSU9DVExfQ0xFQVIgX0lPKE1FTVBST0ZfSU9DVExfVFlQRSwgMikKKworI2VuZGlmIC8qIF9BU01fVElMRV9NRU1QUk9GX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tbWFuLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjgxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfTU1BTl9ICisjZGVmaW5lIF9BU01fVElMRV9NTUFOX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4tY29tbW9uLmg+CisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qIFN0YW5kYXJkIExpbnV4IGZsYWdzICovCisKKyNkZWZpbmUgTUFQX1BPUFVMQVRFCTB4MDA0MAkJLyogcG9wdWxhdGUgKHByZWZhdWx0KSBwYWdldGFibGVzICovCisjZGVmaW5lIE1BUF9OT05CTE9DSwkweDAwODAJCS8qIGRvIG5vdCBibG9jayBvbiBJTyAqLworI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCisjZGVmaW5lIE1BUF9MT0NLRUQJMHgwMjAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHgwNDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCisjZGVmaW5lIE1BUF9IVUdFVExCCTB4NDAwMAkJLyogY3JlYXRlIGEgaHVnZSBwYWdlIG1hcHBpbmcgKi8KKworCisvKgorICogRmxhZ3MgZm9yIG1sb2NrYWxsCisgKi8KKyNkZWZpbmUgTUNMX0NVUlJFTlQJMQkJLyogbG9jayBhbGwgY3VycmVudCBtYXBwaW5ncyAqLworI2RlZmluZSBNQ0xfRlVUVVJFCTIJCS8qIGxvY2sgYWxsIGZ1dHVyZSBtYXBwaW5ncyAqLworCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfTU1BTl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJmOTRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX01NVV9ICisjZGVmaW5lIF9BU01fVElMRV9NTVVfSAorCisvKiBDYXB0dXJlIGFueSBhcmNoLSBhbmQgbW0tc3BlY2lmaWMgaW5mb3JtYXRpb24uICovCitzdHJ1Y3QgbW1fY29udGV4dCB7CisJLyoKKwkgKiBXcml0dGVuIHVuZGVyIHRoZSBtbWFwX3NlbSBzZW1hcGhvcmU7IHJlYWQgd2l0aG91dCB0aGUKKwkgKiBzZW1hcGhvcmUgYnV0IGF0b21pY2FsbHksIGJ1dCBpdCBpcyBjb25zZXJ2YXRpdmVseSBzZXQuCisJICovCisJdW5zaWduZWQgaW50IHByaW9yaXR5X2NhY2hlZDsKK307CisKK3R5cGVkZWYgc3RydWN0IG1tX2NvbnRleHQgbW1fY29udGV4dF90OworCit2b2lkIGxlYXZlX21tKGludCBjcHUpOworCisjZW5kaWYgLyogX0FTTV9USUxFX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYzBkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9BU01fVElMRV9NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KKworc3RhdGljIGlubGluZSBpbnQKK2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAwOworfQorCisvKiBOb3RlIHRoYXQgYXJjaC90aWxlL2tlcm5lbC9oZWFkLlMgYWxzbyBjYWxscyBodl9pbnN0YWxsX2NvbnRleHQoKSAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5zdGFsbF9wYWdlX3RhYmxlKHBnZF90ICpwZ2RpciwgaW50IGFzaWQsIHBncHJvdF90IHByb3QpCit7CisJLyogRklYTUU6IERJUkVDVElPIHNob3VsZCBub3QgYWx3YXlzIGJlIHNldC4gRklYTUUuICovCisJaW50IHJjID0gaHZfaW5zdGFsbF9jb250ZXh0KF9fcGEocGdkaXIpLCBwcm90LCBhc2lkLCBIVl9DVFhfRElSRUNUSU8pOworCWlmIChyYyA8IDApCisJCXBhbmljKCJodl9pbnN0YWxsX2NvbnRleHQgZmFpbGVkOiAlZCIsIHJjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluc3RhbGxfcGFnZV90YWJsZShwZ2RfdCAqcGdkaXIsIGludCBhc2lkKQoreworCXB0ZV90ICpwdGVwID0gdmlydF90b19wdGUoTlVMTCwgKHVuc2lnbmVkIGxvbmcpcGdkaXIpOworCV9faW5zdGFsbF9wYWdlX3RhYmxlKHBnZGlyLCBhc2lkLCAqcHRlcCk7Cit9CisKKy8qCisgKiAiTGF6eSIgVExCIG1vZGUgaXMgZW50ZXJlZCB3aGVuIHdlIGFyZSBzd2l0Y2hpbmcgdG8gYSBrZXJuZWwgdGFzaywKKyAqIHdoaWNoIGJvcnJvd3MgdGhlIG1tIG9mIHRoZSBwcmV2aW91cyB0YXNrLiAgVGhlIGdvYWwgb2YgdGhpcworICogb3B0aW1pemF0aW9uIGlzIHRvIGF2b2lkIGhhdmluZyB0byBpbnN0YWxsIGEgbmV3IHBhZ2UgdGFibGUuICBPbgorICogZWFybHkgeDg2IG1hY2hpbmVzICh3aGVyZSB0aGUgY29uY2VwdCBvcmlnaW5hdGVkKSB5b3UgY291bGRuJ3QgZG8KKyAqIGFueXRoaW5nIHNob3J0IG9mIGEgZnVsbCBwYWdlIHRhYmxlIGluc3RhbGwgZm9yIGludmFsaWRhdGlvbiwgc28KKyAqIGhhbmRsaW5nIGEgcmVtb3RlIFRMQiBpbnZhbGlkYXRlIHJlcXVpcmVkIGRvaW5nIGEgcGFnZSB0YWJsZQorICogcmUtaW5zdGFsbC4gIFNvbWVvbmUgY2xlYXJseSBkZWNpZGVkIHRoYXQgaXQgd2FzIHNpbGx5IHRvIGtlZXAKKyAqIGRvaW5nIHRoaXMgd2hpbGUgaW4gImxhenkiIFRMQiBtb2RlLCBzbyB0aGUgb3B0aW1pemF0aW9uIGludm9sdmVzCisgKiBpbnN0YWxsaW5nIHRoZSBzd2FwcGVyIHBhZ2UgdGFibGUgaW5zdGVhZCB0aGUgZmlyc3QgdGltZSBvbmUKKyAqIG9jY3VycywgYW5kIGNsZWFyaW5nIHRoZSBjcHUgb3V0IG9mIGNwdV92bV9tYXNrLCBzbyB0aGUgY3B1IHJ1bm5pbmcKKyAqIHRoZSBrZXJuZWwgdGFzayBkb2Vzbid0IG5lZWQgdG8gdGFrZSBhbnkgbW9yZSBpbnRlcnJ1cHRzLiAgQXQgdGhhdAorICogcG9pbnQgaXQncyB0aGVuIG5lY2Vzc2FyeSB0byBleHBsaWNpdGx5IHJlaW5zdGFsbCBpdCB3aGVuIGNvbnRleHQKKyAqIHN3aXRjaGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBtbS4KKyAqCisgKiBPbiBUaWxlLCB3ZSBoYXZlIHRvIGRvIGEgcGFnZS10YWJsZSBpbnN0YWxsIHdoZW5ldmVyIERNQSBpcyBlbmFibGVkLAorICogc28gaW4gdGhhdCBjYXNlIGxhenkgbW9kZSBkb2Vzbid0IGhlbHAgYW55d2F5LiAgQW5kIG1vcmUgZ2VuZXJhbGx5LAorICogd2UgaGF2ZSBlZmZpY2llbnQgcGVyLXBhZ2UgVExCIHNob290ZG93biwgYW5kIGRvbid0IGV4cGVjdCB0byBzcGVuZAorICogdGhhdCBtdWNoIHRpbWUgaW4ga2VybmVsIHRhc2tzIGluIGdlbmVyYWwsIHNvIGp1c3QgbGVhdmluZyB0aGUKKyAqIGtlcm5lbCB0YXNrIGJvcnJvd2luZyB0aGUgb2xkIHBhZ2UgdGFibGUsIGJ1dCBoYW5kbGluZyBUTEIKKyAqIHNob290ZG93bnMsIGlzIGEgcmVhc29uYWJsZSB0aGluZyB0byBkby4gIEFuZCBpbXBvcnRhbnRseSwgdGhpcworICogbGV0cyB1cyB1c2UgdGhlIGh5cGVydmlzb3IncyBpbnRlcm5hbCBBUElzIGZvciBUTEIgc2hvb3Rkb3duLCB3aGljaAorICogbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBoYXZpbmcgVExCIHNob290ZG93bnMgYmxvY2tlZAorICogd2hlbiBMaW51eCBpcyBkaXNhYmxpbmcgaW50ZXJydXB0czsgc2VlIHRoZSBwYWdlIG1pZ3JhdGlvbiBjb2RlIGZvcgorICogYW4gZXhhbXBsZSBvZiB3aGVyZSBpdCdzIGltcG9ydGFudCBmb3IgVExCIHNob290ZG93bnMgdG8gY29tcGxldGUKKyAqIGV2ZW4gd2hlbiBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhdCB0aGUgTGludXggbGV2ZWwuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0KQoreworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwkvKgorCSAqIFdlIGhhdmUgdG8gZG8gYW4gImlkZW50aXR5IiBwYWdlIHRhYmxlIHN3aXRjaCBpbiBvcmRlciB0bworCSAqIGNsZWFyIGFueSBwZW5kaW5nIERNQSBpbnRlcnJ1cHRzLgorCSAqLworCWlmIChjdXJyZW50LT50aHJlYWQudGlsZV9kbWFfc3RhdGUuZW5hYmxlZCkKKwkJaW5zdGFsbF9wYWdlX3RhYmxlKG1tLT5wZ2QsIF9fZ2V0X2NwdV92YXIoY3VycmVudF9hc2lkKSk7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LAorCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKKworCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJCS8qIFBpY2sgbmV3IEFTSUQuICovCisJCWludCBhc2lkID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2FzaWQpICsgMTsKKwkJaWYgKGFzaWQgPiBtYXhfYXNpZCkgeworCQkJYXNpZCA9IG1pbl9hc2lkOworCQkJbG9jYWxfZmx1c2hfdGxiKCk7CisJCX0KKwkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2FzaWQpID0gYXNpZDsKKworCQkvKiBDbGVhciBjcHUgZnJvbSB0aGUgb2xkIG1tLCBhbmQgc2V0IGl0IGluIHRoZSBuZXcgb25lLiAqLworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZwcmV2LT5jcHVfdm1fbWFzayk7CisJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZuZXh0LT5jcHVfdm1fbWFzayk7CisKKwkJLyogUmUtbG9hZCBwYWdlIHRhYmxlcyAqLworCQlpbnN0YWxsX3BhZ2VfdGFibGUobmV4dC0+cGdkLCBhc2lkKTsKKworCQkvKiBTZWUgaG93IHdlIHNob3VsZCBzZXQgdGhlIHJlZC9ibGFjayBjYWNoZSBpbmZvICovCisJCWNoZWNrX21tX2NhY2hpbmcocHJldiwgbmV4dCk7CisKKwkJLyoKKwkJICogU2luY2Ugd2UncmUgY2hhbmdpbmcgdG8gYSBuZXcgbW0sIHdlIGhhdmUgdG8gZmx1c2gKKwkJICogdGhlIGljYWNoZSBpbiBjYXNlIHNvbWUgcGh5c2ljYWwgcGFnZSBub3cgYmVpbmcgbWFwcGVkCisJCSAqIGhhcyBzdWJzZXF1ZW50bHkgYmVlbiByZXB1cnBvc2VkIGFuZCBoYXMgbmV3IGNvZGUuCisJCSAqLworCQlfX2ZsdXNoX2ljYWNoZSgpOworCisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKKwkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQoreworCXN3aXRjaF9tbShwcmV2X21tLCBuZXh0X21tLCBOVUxMKTsKK30KKworI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLCBtbSkgICAgICAgICAgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX0FTTV9USUxFX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tbXpvbmUuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tbXpvbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjM0NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL21tem9uZS5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfTU1aT05FX0gKKyNkZWZpbmUgX0FTTV9USUxFX01NWk9ORV9ICisKK2V4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgbm9kZV9kYXRhW107CisjZGVmaW5lIE5PREVfREFUQShuaWQpCSgmbm9kZV9kYXRhW25pZF0pCisKK2V4dGVybiB2b2lkIGdldF9tZW1jZmdfbnVtYSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qCisgKiBHZW5lcmFsbHksIG1lbW9yeSByYW5nZXMgYXJlIGFsd2F5cyBkb2xlZCBvdXQgYnkgdGhlIGh5cGVydmlzb3IgaW4KKyAqIGZpeGVkLXNpemUsIHBvd2VyLW9mLXR3byBpbmNyZW1lbnRzLiAgVGhhdCB3b3VsZCBtYWtlIGNvbXB1dGluZyB0aGUgbm9kZQorICogdmVyeSBlYXN5LiAgV2UgY291bGQganVzdCB0YWtlIGEgY291cGxlIGhpZ2ggYml0cyBvZiB0aGUgUEEsIHdoaWNoCisgKiBkZW5vdGUgdGhlIG1lbW9yeSBzaGltLCBhbmQgd2UnZCBiZSBkb25lLiAgSG93ZXZlciwgd2hlbiB3ZSdyZSBkb2luZworICogbWVtb3J5IHN0cmlwaW5nLCB0aGlzIG1heSBub3QgYmUgdHJ1ZTsgUEFzIHdpdGggZGlmZmVyZW50IGhpZ2ggYml0CisgKiB2YWx1ZXMgbWlnaHQgYmUgaW4gdGhlIHNhbWUgbm9kZS4gIFRodXMsIHdlIGtlZXAgYSBsb29rdXAgdGFibGUgdG8KKyAqIHRyYW5zbGF0ZSB0aGUgaGlnaCBiaXRzIG9mIHRoZSBQRk4gdG8gdGhlIG5vZGUgbnVtYmVyLgorICovCitleHRlcm4gaW50IGhpZ2hiaXRzX3RvX25vZGVbXTsKKworc3RhdGljIGlubGluZSBpbnQgcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gaGlnaGJpdHNfdG9fbm9kZVtfX3Bmbl90b19oaWdoYml0cyhwZm4pXTsKK30KKworLyoKKyAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCisgKi8KKworI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCisjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJcGdfZGF0YV90ICpfX3BnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CQkJCVwKKwlfX3BnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIF9fcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlczsJCVwKK30pCisKKyNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGthZGRyKQl2aXJ0X2FkZHJfdmFsaWQoKHZvaWQgKilrYWRkcikKKworc3RhdGljIGlubGluZSBpbnQgcGZuX3ZhbGlkKGludCBwZm4pCit7CisJaW50IG5pZCA9IHBmbl90b19uaWQocGZuKTsKKworCWlmIChuaWQgPj0gMCkKKwkJcmV0dXJuIChwZm4gPCBub2RlX2VuZF9wZm4obmlkKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEluZm9ybWF0aW9uIG9uIHRoZSBOVU1BIG5vZGVzIHRoYXQgd2UgY29tcHV0ZSBlYXJseSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm5bXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbltdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9tZW1tYXBfcGZuW107CitleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3BlcmNwdV9wZm5bXTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfZnJlZV9wZm5bXTsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9sb3dtZW1fZW5kX3BmbltdOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX3Jlc2VydmVfc3RhcnRfcGZuOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX3Jlc2VydmVfZW5kX3BmbjsKKyNlbmRpZgorCisjZW5kaWYgLyogQ09ORklHX0RJU0NPTlRJR01FTSAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX01NWk9ORV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU0Yjc5ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXNnYnVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5MTM0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tc2didWYuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXNnYnVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjEwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vbXV0ZXguaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbXV0ZXgtZGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGUuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9vcGNvZGUtdGlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMzg5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX09QQ09ERV9USUxFX0gKKyNkZWZpbmUgX0FTTV9USUxFX09QQ09ERV9USUxFX0gKKworI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisjaWYgQ0hJUF9XT1JEX1NJWkUoKSA9PSA2NAorI2luY2x1ZGUgPGFzbS9vcGNvZGUtdGlsZV82NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vb3Bjb2RlLXRpbGVfMzIuaD4KKyNlbmRpZgorCisvKiBUaGVzZSBkZWZpbml0aW9ucyBhcmUgbm90IGNvcnJlY3QgZm9yIFRJTEU2NCwgc28ganVzdCBhdm9pZCB0aGVtLiAqLworI3VuZGVmIFRJTEVfRUxGX01BQ0hJTkVfQ09ERQorI3VuZGVmIFRJTEVfRUxGX05BTUUKKworI2VuZGlmIC8qIF9BU01fVElMRV9PUENPREVfVElMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGVfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9vcGNvZGUtdGlsZV8zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTYwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGVfMzIuaApAQCAtMCwwICsxLDE1MDYgQEAKKy8qIHRpbGUuaCAtLSBIZWFkZXIgZmlsZSBmb3IgVElMRSBvcGNvZGUgdGFibGUKKyAgIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFRpbGVyYSBDb3JwLiAqLworCisjaWZuZGVmIG9wY29kZV90aWxlX2gKKyNkZWZpbmUgb3Bjb2RlX3RpbGVfaAorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB0aWxlX2J1bmRsZV9iaXRzOworCisKK2VudW0KK3sKKyAgVElMRV9NQVhfT1BFUkFORFMgPSA1IC8qIG1tICovCit9OworCit0eXBlZGVmIGVudW0KK3sKKyAgVElMRV9PUENfQlBULAorICBUSUxFX09QQ19JTkZPLAorICBUSUxFX09QQ19JTkZPTCwKKyAgVElMRV9PUENfSiwKKyAgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19NT1ZFLAorICBUSUxFX09QQ19NT1ZFX1NOLAorICBUSUxFX09QQ19NT1ZFSSwKKyAgVElMRV9PUENfTU9WRUlfU04sCisgIFRJTEVfT1BDX01PVkVMSSwKKyAgVElMRV9PUENfTU9WRUxJX1NOLAorICBUSUxFX09QQ19NT1ZFTElTLAorICBUSUxFX09QQ19QUkVGRVRDSCwKKyAgVElMRV9PUENfUkFJU0UsCisgIFRJTEVfT1BDX0FERCwKKyAgVElMRV9PUENfQUREX1NOLAorICBUSUxFX09QQ19BRERCLAorICBUSUxFX09QQ19BRERCX1NOLAorICBUSUxFX09QQ19BRERCU19VLAorICBUSUxFX09QQ19BRERCU19VX1NOLAorICBUSUxFX09QQ19BRERILAorICBUSUxFX09QQ19BRERIX1NOLAorICBUSUxFX09QQ19BRERIUywKKyAgVElMRV9PUENfQURESFNfU04sCisgIFRJTEVfT1BDX0FEREksCisgIFRJTEVfT1BDX0FERElfU04sCisgIFRJTEVfT1BDX0FERElCLAorICBUSUxFX09QQ19BRERJQl9TTiwKKyAgVElMRV9PUENfQURESUgsCisgIFRJTEVfT1BDX0FERElIX1NOLAorICBUSUxFX09QQ19BRERMSSwKKyAgVElMRV9PUENfQURETElfU04sCisgIFRJTEVfT1BDX0FERExJUywKKyAgVElMRV9PUENfQUREUywKKyAgVElMRV9PUENfQUREU19TTiwKKyAgVElMRV9PUENfQURJRkZCX1UsCisgIFRJTEVfT1BDX0FESUZGQl9VX1NOLAorICBUSUxFX09QQ19BRElGRkgsCisgIFRJTEVfT1BDX0FESUZGSF9TTiwKKyAgVElMRV9PUENfQU5ELAorICBUSUxFX09QQ19BTkRfU04sCisgIFRJTEVfT1BDX0FOREksCisgIFRJTEVfT1BDX0FORElfU04sCisgIFRJTEVfT1BDX0FVTEksCisgIFRJTEVfT1BDX0FWR0JfVSwKKyAgVElMRV9PUENfQVZHQl9VX1NOLAorICBUSUxFX09QQ19BVkdILAorICBUSUxFX09QQ19BVkdIX1NOLAorICBUSUxFX09QQ19CQk5TLAorICBUSUxFX09QQ19CQk5TX1NOLAorICBUSUxFX09QQ19CQk5TVCwKKyAgVElMRV9PUENfQkJOU1RfU04sCisgIFRJTEVfT1BDX0JCUywKKyAgVElMRV9PUENfQkJTX1NOLAorICBUSUxFX09QQ19CQlNULAorICBUSUxFX09QQ19CQlNUX1NOLAorICBUSUxFX09QQ19CR0VaLAorICBUSUxFX09QQ19CR0VaX1NOLAorICBUSUxFX09QQ19CR0VaVCwKKyAgVElMRV9PUENfQkdFWlRfU04sCisgIFRJTEVfT1BDX0JHWiwKKyAgVElMRV9PUENfQkdaX1NOLAorICBUSUxFX09QQ19CR1pULAorICBUSUxFX09QQ19CR1pUX1NOLAorICBUSUxFX09QQ19CSVRYLAorICBUSUxFX09QQ19CSVRYX1NOLAorICBUSUxFX09QQ19CTEVaLAorICBUSUxFX09QQ19CTEVaX1NOLAorICBUSUxFX09QQ19CTEVaVCwKKyAgVElMRV9PUENfQkxFWlRfU04sCisgIFRJTEVfT1BDX0JMWiwKKyAgVElMRV9PUENfQkxaX1NOLAorICBUSUxFX09QQ19CTFpULAorICBUSUxFX09QQ19CTFpUX1NOLAorICBUSUxFX09QQ19CTlosCisgIFRJTEVfT1BDX0JOWl9TTiwKKyAgVElMRV9PUENfQk5aVCwKKyAgVElMRV9PUENfQk5aVF9TTiwKKyAgVElMRV9PUENfQllURVgsCisgIFRJTEVfT1BDX0JZVEVYX1NOLAorICBUSUxFX09QQ19CWiwKKyAgVElMRV9PUENfQlpfU04sCisgIFRJTEVfT1BDX0JaVCwKKyAgVElMRV9PUENfQlpUX1NOLAorICBUSUxFX09QQ19DTFosCisgIFRJTEVfT1BDX0NMWl9TTiwKKyAgVElMRV9PUENfQ1JDMzJfMzIsCisgIFRJTEVfT1BDX0NSQzMyXzMyX1NOLAorICBUSUxFX09QQ19DUkMzMl84LAorICBUSUxFX09QQ19DUkMzMl84X1NOLAorICBUSUxFX09QQ19DVFosCisgIFRJTEVfT1BDX0NUWl9TTiwKKyAgVElMRV9PUENfRFJBSU4sCisgIFRJTEVfT1BDX0RUTEJQUiwKKyAgVElMRV9PUENfRFdPUkRfQUxJR04sCisgIFRJTEVfT1BDX0RXT1JEX0FMSUdOX1NOLAorICBUSUxFX09QQ19GSU5WLAorICBUSUxFX09QQ19GTFVTSCwKKyAgVElMRV9PUENfRk5PUCwKKyAgVElMRV9PUENfSUNPSCwKKyAgVElMRV9PUENfSUxMLAorICBUSUxFX09QQ19JTlRIQiwKKyAgVElMRV9PUENfSU5USEJfU04sCisgIFRJTEVfT1BDX0lOVEhILAorICBUSUxFX09QQ19JTlRISF9TTiwKKyAgVElMRV9PUENfSU5UTEIsCisgIFRJTEVfT1BDX0lOVExCX1NOLAorICBUSUxFX09QQ19JTlRMSCwKKyAgVElMRV9PUENfSU5UTEhfU04sCisgIFRJTEVfT1BDX0lOViwKKyAgVElMRV9PUENfSVJFVCwKKyAgVElMRV9PUENfSkFMQiwKKyAgVElMRV9PUENfSkFMRiwKKyAgVElMRV9PUENfSkFMUiwKKyAgVElMRV9PUENfSkFMUlAsCisgIFRJTEVfT1BDX0pCLAorICBUSUxFX09QQ19KRiwKKyAgVElMRV9PUENfSlIsCisgIFRJTEVfT1BDX0pSUCwKKyAgVElMRV9PUENfTEIsCisgIFRJTEVfT1BDX0xCX1NOLAorICBUSUxFX09QQ19MQl9VLAorICBUSUxFX09QQ19MQl9VX1NOLAorICBUSUxFX09QQ19MQkFERCwKKyAgVElMRV9PUENfTEJBRERfU04sCisgIFRJTEVfT1BDX0xCQUREX1UsCisgIFRJTEVfT1BDX0xCQUREX1VfU04sCisgIFRJTEVfT1BDX0xILAorICBUSUxFX09QQ19MSF9TTiwKKyAgVElMRV9PUENfTEhfVSwKKyAgVElMRV9PUENfTEhfVV9TTiwKKyAgVElMRV9PUENfTEhBREQsCisgIFRJTEVfT1BDX0xIQUREX1NOLAorICBUSUxFX09QQ19MSEFERF9VLAorICBUSUxFX09QQ19MSEFERF9VX1NOLAorICBUSUxFX09QQ19MTkssCisgIFRJTEVfT1BDX0xOS19TTiwKKyAgVElMRV9PUENfTFcsCisgIFRJTEVfT1BDX0xXX1NOLAorICBUSUxFX09QQ19MV19OQSwKKyAgVElMRV9PUENfTFdfTkFfU04sCisgIFRJTEVfT1BDX0xXQURELAorICBUSUxFX09QQ19MV0FERF9TTiwKKyAgVElMRV9PUENfTFdBRERfTkEsCisgIFRJTEVfT1BDX0xXQUREX05BX1NOLAorICBUSUxFX09QQ19NQVhCX1UsCisgIFRJTEVfT1BDX01BWEJfVV9TTiwKKyAgVElMRV9PUENfTUFYSCwKKyAgVElMRV9PUENfTUFYSF9TTiwKKyAgVElMRV9PUENfTUFYSUJfVSwKKyAgVElMRV9PUENfTUFYSUJfVV9TTiwKKyAgVElMRV9PUENfTUFYSUgsCisgIFRJTEVfT1BDX01BWElIX1NOLAorICBUSUxFX09QQ19NRiwKKyAgVElMRV9PUENfTUZTUFIsCisgIFRJTEVfT1BDX01JTkJfVSwKKyAgVElMRV9PUENfTUlOQl9VX1NOLAorICBUSUxFX09QQ19NSU5ILAorICBUSUxFX09QQ19NSU5IX1NOLAorICBUSUxFX09QQ19NSU5JQl9VLAorICBUSUxFX09QQ19NSU5JQl9VX1NOLAorICBUSUxFX09QQ19NSU5JSCwKKyAgVElMRV9PUENfTUlOSUhfU04sCisgIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTlosCisgIFRJTEVfT1BDX01OWl9TTiwKKyAgVElMRV9PUENfTU5aQiwKKyAgVElMRV9PUENfTU5aQl9TTiwKKyAgVElMRV9PUENfTU5aSCwKKyAgVElMRV9PUENfTU5aSF9TTiwKKyAgVElMRV9PUENfTVRTUFIsCisgIFRJTEVfT1BDX01VTEhIX1NTLAorICBUSUxFX09QQ19NVUxISF9TU19TTiwKKyAgVElMRV9PUENfTVVMSEhfU1UsCisgIFRJTEVfT1BDX01VTEhIX1NVX1NOLAorICBUSUxFX09QQ19NVUxISF9VVSwKKyAgVElMRV9PUENfTVVMSEhfVVVfU04sCisgIFRJTEVfT1BDX01VTEhIQV9TUywKKyAgVElMRV9PUENfTVVMSEhBX1NTX1NOLAorICBUSUxFX09QQ19NVUxISEFfU1UsCisgIFRJTEVfT1BDX01VTEhIQV9TVV9TTiwKKyAgVElMRV9PUENfTVVMSEhBX1VVLAorICBUSUxFX09QQ19NVUxISEFfVVVfU04sCisgIFRJTEVfT1BDX01VTEhIU0FfVVUsCisgIFRJTEVfT1BDX01VTEhIU0FfVVVfU04sCisgIFRJTEVfT1BDX01VTEhMX1NTLAorICBUSUxFX09QQ19NVUxITF9TU19TTiwKKyAgVElMRV9PUENfTVVMSExfU1UsCisgIFRJTEVfT1BDX01VTEhMX1NVX1NOLAorICBUSUxFX09QQ19NVUxITF9VUywKKyAgVElMRV9PUENfTVVMSExfVVNfU04sCisgIFRJTEVfT1BDX01VTEhMX1VVLAorICBUSUxFX09QQ19NVUxITF9VVV9TTiwKKyAgVElMRV9PUENfTVVMSExBX1NTLAorICBUSUxFX09QQ19NVUxITEFfU1NfU04sCisgIFRJTEVfT1BDX01VTEhMQV9TVSwKKyAgVElMRV9PUENfTVVMSExBX1NVX1NOLAorICBUSUxFX09QQ19NVUxITEFfVVMsCisgIFRJTEVfT1BDX01VTEhMQV9VU19TTiwKKyAgVElMRV9PUENfTVVMSExBX1VVLAorICBUSUxFX09QQ19NVUxITEFfVVVfU04sCisgIFRJTEVfT1BDX01VTEhMU0FfVVUsCisgIFRJTEVfT1BDX01VTEhMU0FfVVVfU04sCisgIFRJTEVfT1BDX01VTExMX1NTLAorICBUSUxFX09QQ19NVUxMTF9TU19TTiwKKyAgVElMRV9PUENfTVVMTExfU1UsCisgIFRJTEVfT1BDX01VTExMX1NVX1NOLAorICBUSUxFX09QQ19NVUxMTF9VVSwKKyAgVElMRV9PUENfTVVMTExfVVVfU04sCisgIFRJTEVfT1BDX01VTExMQV9TUywKKyAgVElMRV9PUENfTVVMTExBX1NTX1NOLAorICBUSUxFX09QQ19NVUxMTEFfU1UsCisgIFRJTEVfT1BDX01VTExMQV9TVV9TTiwKKyAgVElMRV9PUENfTVVMTExBX1VVLAorICBUSUxFX09QQ19NVUxMTEFfVVVfU04sCisgIFRJTEVfT1BDX01VTExMU0FfVVUsCisgIFRJTEVfT1BDX01VTExMU0FfVVVfU04sCisgIFRJTEVfT1BDX01WTlosCisgIFRJTEVfT1BDX01WTlpfU04sCisgIFRJTEVfT1BDX01WWiwKKyAgVElMRV9PUENfTVZaX1NOLAorICBUSUxFX09QQ19NWiwKKyAgVElMRV9PUENfTVpfU04sCisgIFRJTEVfT1BDX01aQiwKKyAgVElMRV9PUENfTVpCX1NOLAorICBUSUxFX09QQ19NWkgsCisgIFRJTEVfT1BDX01aSF9TTiwKKyAgVElMRV9PUENfTkFQLAorICBUSUxFX09QQ19OT1AsCisgIFRJTEVfT1BDX05PUiwKKyAgVElMRV9PUENfTk9SX1NOLAorICBUSUxFX09QQ19PUiwKKyAgVElMRV9PUENfT1JfU04sCisgIFRJTEVfT1BDX09SSSwKKyAgVElMRV9PUENfT1JJX1NOLAorICBUSUxFX09QQ19QQUNLQlNfVSwKKyAgVElMRV9PUENfUEFDS0JTX1VfU04sCisgIFRJTEVfT1BDX1BBQ0tIQiwKKyAgVElMRV9PUENfUEFDS0hCX1NOLAorICBUSUxFX09QQ19QQUNLSFMsCisgIFRJTEVfT1BDX1BBQ0tIU19TTiwKKyAgVElMRV9PUENfUEFDS0xCLAorICBUSUxFX09QQ19QQUNLTEJfU04sCisgIFRJTEVfT1BDX1BDTlQsCisgIFRJTEVfT1BDX1BDTlRfU04sCisgIFRJTEVfT1BDX1JMLAorICBUSUxFX09QQ19STF9TTiwKKyAgVElMRV9PUENfUkxJLAorICBUSUxFX09QQ19STElfU04sCisgIFRJTEVfT1BDX1MxQSwKKyAgVElMRV9PUENfUzFBX1NOLAorICBUSUxFX09QQ19TMkEsCisgIFRJTEVfT1BDX1MyQV9TTiwKKyAgVElMRV9PUENfUzNBLAorICBUSUxFX09QQ19TM0FfU04sCisgIFRJTEVfT1BDX1NBREFCX1UsCisgIFRJTEVfT1BDX1NBREFCX1VfU04sCisgIFRJTEVfT1BDX1NBREFILAorICBUSUxFX09QQ19TQURBSF9TTiwKKyAgVElMRV9PUENfU0FEQUhfVSwKKyAgVElMRV9PUENfU0FEQUhfVV9TTiwKKyAgVElMRV9PUENfU0FEQl9VLAorICBUSUxFX09QQ19TQURCX1VfU04sCisgIFRJTEVfT1BDX1NBREgsCisgIFRJTEVfT1BDX1NBREhfU04sCisgIFRJTEVfT1BDX1NBREhfVSwKKyAgVElMRV9PUENfU0FESF9VX1NOLAorICBUSUxFX09QQ19TQiwKKyAgVElMRV9PUENfU0JBREQsCisgIFRJTEVfT1BDX1NFUSwKKyAgVElMRV9PUENfU0VRX1NOLAorICBUSUxFX09QQ19TRVFCLAorICBUSUxFX09QQ19TRVFCX1NOLAorICBUSUxFX09QQ19TRVFILAorICBUSUxFX09QQ19TRVFIX1NOLAorICBUSUxFX09QQ19TRVFJLAorICBUSUxFX09QQ19TRVFJX1NOLAorICBUSUxFX09QQ19TRVFJQiwKKyAgVElMRV9PUENfU0VRSUJfU04sCisgIFRJTEVfT1BDX1NFUUlILAorICBUSUxFX09QQ19TRVFJSF9TTiwKKyAgVElMRV9PUENfU0gsCisgIFRJTEVfT1BDX1NIQURELAorICBUSUxFX09QQ19TSEwsCisgIFRJTEVfT1BDX1NITF9TTiwKKyAgVElMRV9PUENfU0hMQiwKKyAgVElMRV9PUENfU0hMQl9TTiwKKyAgVElMRV9PUENfU0hMSCwKKyAgVElMRV9PUENfU0hMSF9TTiwKKyAgVElMRV9PUENfU0hMSSwKKyAgVElMRV9PUENfU0hMSV9TTiwKKyAgVElMRV9PUENfU0hMSUIsCisgIFRJTEVfT1BDX1NITElCX1NOLAorICBUSUxFX09QQ19TSExJSCwKKyAgVElMRV9PUENfU0hMSUhfU04sCisgIFRJTEVfT1BDX1NIUiwKKyAgVElMRV9PUENfU0hSX1NOLAorICBUSUxFX09QQ19TSFJCLAorICBUSUxFX09QQ19TSFJCX1NOLAorICBUSUxFX09QQ19TSFJILAorICBUSUxFX09QQ19TSFJIX1NOLAorICBUSUxFX09QQ19TSFJJLAorICBUSUxFX09QQ19TSFJJX1NOLAorICBUSUxFX09QQ19TSFJJQiwKKyAgVElMRV9PUENfU0hSSUJfU04sCisgIFRJTEVfT1BDX1NIUklILAorICBUSUxFX09QQ19TSFJJSF9TTiwKKyAgVElMRV9PUENfU0xULAorICBUSUxFX09QQ19TTFRfU04sCisgIFRJTEVfT1BDX1NMVF9VLAorICBUSUxFX09QQ19TTFRfVV9TTiwKKyAgVElMRV9PUENfU0xUQiwKKyAgVElMRV9PUENfU0xUQl9TTiwKKyAgVElMRV9PUENfU0xUQl9VLAorICBUSUxFX09QQ19TTFRCX1VfU04sCisgIFRJTEVfT1BDX1NMVEUsCisgIFRJTEVfT1BDX1NMVEVfU04sCisgIFRJTEVfT1BDX1NMVEVfVSwKKyAgVElMRV9PUENfU0xURV9VX1NOLAorICBUSUxFX09QQ19TTFRFQiwKKyAgVElMRV9PUENfU0xURUJfU04sCisgIFRJTEVfT1BDX1NMVEVCX1UsCisgIFRJTEVfT1BDX1NMVEVCX1VfU04sCisgIFRJTEVfT1BDX1NMVEVILAorICBUSUxFX09QQ19TTFRFSF9TTiwKKyAgVElMRV9PUENfU0xURUhfVSwKKyAgVElMRV9PUENfU0xURUhfVV9TTiwKKyAgVElMRV9PUENfU0xUSCwKKyAgVElMRV9PUENfU0xUSF9TTiwKKyAgVElMRV9PUENfU0xUSF9VLAorICBUSUxFX09QQ19TTFRIX1VfU04sCisgIFRJTEVfT1BDX1NMVEksCisgIFRJTEVfT1BDX1NMVElfU04sCisgIFRJTEVfT1BDX1NMVElfVSwKKyAgVElMRV9PUENfU0xUSV9VX1NOLAorICBUSUxFX09QQ19TTFRJQiwKKyAgVElMRV9PUENfU0xUSUJfU04sCisgIFRJTEVfT1BDX1NMVElCX1UsCisgIFRJTEVfT1BDX1NMVElCX1VfU04sCisgIFRJTEVfT1BDX1NMVElILAorICBUSUxFX09QQ19TTFRJSF9TTiwKKyAgVElMRV9PUENfU0xUSUhfVSwKKyAgVElMRV9PUENfU0xUSUhfVV9TTiwKKyAgVElMRV9PUENfU05FLAorICBUSUxFX09QQ19TTkVfU04sCisgIFRJTEVfT1BDX1NORUIsCisgIFRJTEVfT1BDX1NORUJfU04sCisgIFRJTEVfT1BDX1NORUgsCisgIFRJTEVfT1BDX1NORUhfU04sCisgIFRJTEVfT1BDX1NSQSwKKyAgVElMRV9PUENfU1JBX1NOLAorICBUSUxFX09QQ19TUkFCLAorICBUSUxFX09QQ19TUkFCX1NOLAorICBUSUxFX09QQ19TUkFILAorICBUSUxFX09QQ19TUkFIX1NOLAorICBUSUxFX09QQ19TUkFJLAorICBUSUxFX09QQ19TUkFJX1NOLAorICBUSUxFX09QQ19TUkFJQiwKKyAgVElMRV9PUENfU1JBSUJfU04sCisgIFRJTEVfT1BDX1NSQUlILAorICBUSUxFX09QQ19TUkFJSF9TTiwKKyAgVElMRV9PUENfU1VCLAorICBUSUxFX09QQ19TVUJfU04sCisgIFRJTEVfT1BDX1NVQkIsCisgIFRJTEVfT1BDX1NVQkJfU04sCisgIFRJTEVfT1BDX1NVQkJTX1UsCisgIFRJTEVfT1BDX1NVQkJTX1VfU04sCisgIFRJTEVfT1BDX1NVQkgsCisgIFRJTEVfT1BDX1NVQkhfU04sCisgIFRJTEVfT1BDX1NVQkhTLAorICBUSUxFX09QQ19TVUJIU19TTiwKKyAgVElMRV9PUENfU1VCUywKKyAgVElMRV9PUENfU1VCU19TTiwKKyAgVElMRV9PUENfU1csCisgIFRJTEVfT1BDX1NXQURELAorICBUSUxFX09QQ19TV0lOVDAsCisgIFRJTEVfT1BDX1NXSU5UMSwKKyAgVElMRV9PUENfU1dJTlQyLAorICBUSUxFX09QQ19TV0lOVDMsCisgIFRJTEVfT1BDX1RCTElEWEIwLAorICBUSUxFX09QQ19UQkxJRFhCMF9TTiwKKyAgVElMRV9PUENfVEJMSURYQjEsCisgIFRJTEVfT1BDX1RCTElEWEIxX1NOLAorICBUSUxFX09QQ19UQkxJRFhCMiwKKyAgVElMRV9PUENfVEJMSURYQjJfU04sCisgIFRJTEVfT1BDX1RCTElEWEIzLAorICBUSUxFX09QQ19UQkxJRFhCM19TTiwKKyAgVElMRV9PUENfVE5TLAorICBUSUxFX09QQ19UTlNfU04sCisgIFRJTEVfT1BDX1dINjQsCisgIFRJTEVfT1BDX1hPUiwKKyAgVElMRV9PUENfWE9SX1NOLAorICBUSUxFX09QQ19YT1JJLAorICBUSUxFX09QQ19YT1JJX1NOLAorICBUSUxFX09QQ19OT05FCit9IHRpbGVfbW5lbW9uaWM7CisKKy8qIDY0LWJpdCBwYXR0ZXJuIGZvciBhIHsgYnB0IDsgbm9wIH0gYnVuZGxlLiAqLworI2RlZmluZSBUSUxFX0JQVF9CVU5ETEUgMHg0MDBiM2NhZTcwMTY2MDAwVUxMCisKKworI2RlZmluZSBUSUxFX0VMRl9NQUNISU5FX0NPREUgRU1fVElMRVBSTworCisjZGVmaW5lIFRJTEVfRUxGX05BTUUgImVsZjMyLXRpbGVwcm8iCisKKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0JyT2ZmX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweDNmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Cck9mZl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MDAwMDdmZmYpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAyMCkpICYgMHgwMDAxODAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9CclR5cGVfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9JbW04X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgwMDAwMDAzZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDAwMDAwMGMwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfU04odGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9EZXN0X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDApKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzEpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tMTZfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tMTZfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tOF9TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1kwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW1PcGNvZGVFeHRlbnNpb25fWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIwKSkgJiAweDdmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0ltbU9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTEpKSAmIDB4N2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tUlJPcGNvZGVFeHRlbnNpb25fU04odGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDgpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9KT2ZmTG9uZ19YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MDAwMDdmZmYpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAyMCkpICYgMHgwMDAxODAwMCkgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDE0KSkgJiAweDAwMWUwMDAwKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMTYpKSAmIDB4MDdlMDAwMDApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgxODAwMDAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9KT2ZmX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgwMDAwN2ZmZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDIwKSkgJiAweDAwMDE4MDAwKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMTQpKSAmIDB4MDAxZTAwMDApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAxNikpICYgMHgwN2UwMDAwMCkgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDA4MDAwMDAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X01GX0ltbTE1X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzNykpICYgMHgwMDAwM2ZmZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDQ0KSkgJiAweDAwMDA0MDAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X01NRW5kX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9NTUVuZF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDkpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTU1TdGFydF9YMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTU1TdGFydF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTQpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTVRfSW1tMTVfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDAwMDAwMDNmKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4MDAwMDNmYzApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiA0NCkpICYgMHgwMDAwNDAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Nb2RlKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA2MykpICYgMHgxKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X05vUmVnT3Bjb2RlRXh0ZW5zaW9uX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMCkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9PcGNvZGVfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDI4KSkgJiAweDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OSkpICYgMHhmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9ZMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjcpKSAmIDB4Zik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9PcGNvZGVfWTEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDU5KSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1kyKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1NikpICYgMHg3KTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1JST3Bjb2RlRXh0ZW5zaW9uX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA0KSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgxZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0OSkpICYgMHgxZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1kwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1JSUk9wY29kZUV4dGVuc2lvbl9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDkpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Sb3V0ZU9wY29kZUV4dGVuc2lvbl9TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU19YMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjcpKSAmIDB4MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OCkpICYgMHgxKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoQW10X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TaEFtdF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDFmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoQW10X1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TcmNBX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA2KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDM3KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDYpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMih0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKChuID4+IDI2KSkgJiAweDAwMDAwMDAxKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTApKSAmIDB4MDAwMDAwM2UpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQkRlc3RfWTIodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIwKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWTEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY19TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuT3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Vbk9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5PcGNvZGVFeHRlbnNpb25fWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDFmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuT3Bjb2RlRXh0ZW5zaW9uX1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxNykpICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5TaE9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDgpKSAmIDB4M2ZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuU2hPcGNvZGVFeHRlbnNpb25fWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDE3KSkgJiAweDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDgpKSAmIDB4Nyk7Cit9CisKKworc3RhdGljIF9faW5saW5lIGludAorc2lnbl9leHRlbmQoaW50IG4sIGludCBudW1fYml0cykKK3sKKyAgaW50IHNoaWZ0ID0gKGludCkoc2l6ZW9mKGludCkgKiA4IC0gbnVtX2JpdHMpOworICByZXR1cm4gKG4gPDwgc2hpZnQpID4+IHNoaWZ0OworfQorCisKKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Cck9mZl9TTihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0JyT2ZmX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwN2ZmZikpIDw8IDQzKSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAxODAwMCkpIDw8IDIwKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9CclR5cGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCAzMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfRGVzdF9JbW04X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwMDAzZikpIDw8IDMxKSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwMDBjMCkpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9EZXN0X1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDMpIDw8IDIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbTE2X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmZmYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW0xNl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4ZmZmZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04X1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmKSA8PCAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmKSA8PCAxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4ZmYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHhmZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbThfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGZmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbU9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHg3ZikgPDwgMjApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbU9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4N2YpKSA8PCA1MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tUlJPcGNvZGVFeHRlbnNpb25fU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSk9mZkxvbmdfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA3ZmZmKSkgPDwgNDMpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDE4MDAwKSkgPDwgMjApIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMWUwMDAwKSkgPDwgMTQpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA3ZTAwMDAwKSkgPDwgMTYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDE4MDAwMDAwKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0pPZmZfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA3ZmZmKSkgPDwgNDMpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDE4MDAwKSkgPDwgMjApIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMWUwMDAwKSkgPDwgMTQpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA3ZTAwMDAwKSkgPDwgMTYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA4MDAwMDAwKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01GX0ltbTE1X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwM2ZmZikpIDw8IDM3KSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwNDAwMCkpIDw8IDQ0KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9NTUVuZF9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgxZikgPDwgMTgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01NRW5kX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgxZikpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9NTVN0YXJ0X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDFmKSA8PCAyMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTU1TdGFydF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA1NCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTVRfSW1tMTVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAwMDNmKSkgPDwgMzEpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAzZmMwKSkgPDwgMzcpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA0MDAwKSkgPDwgNDQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01vZGUoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDEpKSA8PCA2Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTm9SZWdPcGNvZGVFeHRlbnNpb25fU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4ZikgPDwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAxMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDcpIDw8IDI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCA1OSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1kwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGYpIDw8IDI3KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCA1OSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1kyKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHg3KSkgPDwgNTYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JST3Bjb2RlRXh0ZW5zaW9uX1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGYpIDw8IDQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgxZmYpIDw8IDE4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDFmZikpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgMTgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MykpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Sb3V0ZU9wY29kZUV4dGVuc2lvbl9TTihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MSkgPDwgMjcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDEpKSA8PCA1OCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaEFtdF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaEFtdF9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4M2YpKSA8PCAzNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4M2YpKSA8PCAzNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgwMDAwMDAwMSkgPDwgMjYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAwMDNlKSkgPDwgNTApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JEZXN0X1kyKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAyMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNCX1kxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNfU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5PcGNvZGVFeHRlbnNpb25fWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Vbk9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5PcGNvZGVFeHRlbnNpb25fWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Vbk9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDE3KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgzZmYpKSA8PCA0OCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHg3KSA8PCAxNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4NykpIDw8IDQ4KTsKK30KKworCisKK3R5cGVkZWYgZW51bQoreworICBUSUxFX1BJUEVMSU5FX1gwLAorICBUSUxFX1BJUEVMSU5FX1gxLAorICBUSUxFX1BJUEVMSU5FX1kwLAorICBUSUxFX1BJUEVMSU5FX1kxLAorICBUSUxFX1BJUEVMSU5FX1kyLAorfSB0aWxlX3BpcGVsaW5lOworCisjZGVmaW5lIHRpbGVfaXNfeF9waXBlbGluZShwKSAoKGludCkocCkgPD0gKGludClUSUxFX1BJUEVMSU5FX1gxKQorCit0eXBlZGVmIGVudW0KK3sKKyAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLAorICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLAorICBUSUxFX09QX1RZUEVfQUREUkVTUywKKyAgVElMRV9PUF9UWVBFX1NQUgorfSB0aWxlX29wZXJhbmRfdHlwZTsKKworLyogVGhpcyBpcyB0aGUgYml0IHRoYXQgZGV0ZXJtaW5lcyBpZiBhIGJ1bmRsZSBpcyBpbiB0aGUgWSBlbmNvZGluZy4gKi8KKyNkZWZpbmUgVElMRV9CVU5ETEVfWV9FTkNPRElOR19NQVNLICgodGlsZV9idW5kbGVfYml0cykxIDw8IDYzKQorCitlbnVtCit7CisgIC8qIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiBhIGJ1bmRsZSAoMiBmb3IgWCwgMyBmb3IgWSkuICovCisgIFRJTEVfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFID0gMywKKworICAvKiBIb3cgbWFueSBkaWZmZXJlbnQgcGlwZWxpbmUgZW5jb2RpbmdzIGFyZSB0aGVyZT8gWDAsIFgxLCBZMCwgWTEsIFkyLiAqLworICBUSUxFX05VTV9QSVBFTElORV9FTkNPRElOR1MgPSA1LAorCisgIC8qIExvZyBiYXNlIDIgb2YgVElMRV9CVU5ETEVfU0laRV9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX0JVTkRMRV9TSVpFX0lOX0JZVEVTID0gMywKKworICAvKiBJbnN0cnVjdGlvbnMgdGFrZSB0aGlzIG1hbnkgYnl0ZXMuICovCisgIFRJTEVfQlVORExFX1NJWkVfSU5fQllURVMgPSAxIDw8IFRJTEVfTE9HMl9CVU5ETEVfU0laRV9JTl9CWVRFUywKKworICAvKiBMb2cgYmFzZSAyIG9mIFRJTEVfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgPSAzLAorCisgIC8qIEJ1bmRsZXMgc2hvdWxkIGJlIGFsaWduZWQgbW9kdWxvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzLiAqLworICBUSUxFX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgPQorICAgICgxIDw8IFRJTEVfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTKSwKKworICAvKiBMb2cgYmFzZSAyIG9mIFRJTEVfU05fSU5TVFJVQ1RJT05fU0laRV9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX1NOX0lOU1RSVUNUSU9OX1NJWkVfSU5fQllURVMgPSAxLAorCisgIC8qIFN0YXRpYyBuZXR3b3JrIGluc3RydWN0aW9ucyB0YWtlIHRoaXMgbWFueSBieXRlcy4gKi8KKyAgVElMRV9TTl9JTlNUUlVDVElPTl9TSVpFX0lOX0JZVEVTID0KKyAgICAoMSA8PCBUSUxFX0xPRzJfU05fSU5TVFJVQ1RJT05fU0laRV9JTl9CWVRFUyksCisKKyAgLyogTnVtYmVyIG9mIHJlZ2lzdGVycyAoc29tZSBhcmUgbWFnaWMsIHN1Y2ggYXMgbmV0d29yayBJL08pLiAqLworICBUSUxFX05VTV9SRUdJU1RFUlMgPSA2NCwKKworICAvKiBOdW1iZXIgb2Ygc3RhdGljIG5ldHdvcmsgcmVnaXN0ZXJzLiAqLworICBUSUxFX05VTV9TTl9SRUdJU1RFUlMgPSA0Cit9OworCisKK3N0cnVjdCB0aWxlX29wZXJhbmQKK3sKKyAgLyogSXMgdGhpcyBvcGVyYW5kIGEgcmVnaXN0ZXIsIGltbWVkaWF0ZSBvciBhZGRyZXNzPyAqLworICB0aWxlX29wZXJhbmRfdHlwZSB0eXBlOworCisgIC8qIFRoZSBkZWZhdWx0IHJlbG9jYXRpb24gdHlwZSBmb3IgdGhpcyBvcGVyYW5kLiAgKi8KKyAgc2lnbmVkIGludCBkZWZhdWx0X3JlbG9jIDogMTY7CisKKyAgLyogSG93IG1hbnkgYml0cyBpcyB0aGlzIHZhbHVlPyAodXNlZCBmb3IgcmFuZ2UgY2hlY2tpbmcpICovCisgIHVuc2lnbmVkIGludCBudW1fYml0cyA6IDU7CisKKyAgLyogSXMgdGhlIHZhbHVlIHNpZ25lZD8gKHVzZWQgZm9yIHJhbmdlIGNoZWNraW5nKSAqLworICB1bnNpZ25lZCBpbnQgaXNfc2lnbmVkIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgYSBzb3VyY2UgcmVnaXN0ZXI/ICovCisgIHVuc2lnbmVkIGludCBpc19zcmNfcmVnIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgd3JpdHRlbj8gKGkuZS4gaXMgaXQgYSBkZXN0aW5hdGlvbiByZWdpc3RlcikgKi8KKyAgdW5zaWduZWQgaW50IGlzX2Rlc3RfcmVnIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgUEMtcmVsYXRpdmU/ICovCisgIHVuc2lnbmVkIGludCBpc19wY19yZWxhdGl2ZSA6IDE7CisKKyAgLyogQnkgaG93IG1hbnkgYml0cyBkbyB3ZSByaWdodCBzaGlmdCB0aGUgdmFsdWUgYmVmb3JlIGluc2VydGluZz8gKi8KKyAgdW5zaWduZWQgaW50IHJpZ2h0c2hpZnQgOiAyOworCisgIC8qIFJldHVybiB0aGUgYml0cyBmb3IgdGhpcyBvcGVyYW5kIHRvIGJlIE9SZWQgaW50byBhbiBleGlzdGluZyBidW5kbGUuICovCisgIHRpbGVfYnVuZGxlX2JpdHMgKCppbnNlcnQpIChpbnQgb3ApOworCisgIC8qIEV4dHJhY3QgdGhpcyBvcGVyYW5kIGFuZCByZXR1cm4gaXQuICovCisgIHVuc2lnbmVkIGludCAoKmV4dHJhY3QpICh0aWxlX2J1bmRsZV9iaXRzIGJ1bmRsZSk7Cit9OworCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGlsZV9vcGVyYW5kIHRpbGVfb3BlcmFuZHNbXTsKKworLyogT25lIGZpbml0ZS1zdGF0ZSBtYWNoaW5lIHBlciBwaXBlIGZvciByYXBpZCBpbnN0cnVjdGlvbiBkZWNvZGluZy4gKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCAqIGNvbnN0Cit0aWxlX2J1bmRsZV9kZWNvZGVyX2ZzbXNbVElMRV9OVU1fUElQRUxJTkVfRU5DT0RJTkdTXTsKKworCitzdHJ1Y3QgdGlsZV9vcGNvZGUKK3sKKyAgLyogVGhlIG9wY29kZSBtbmVtb25pYywgZS5nLiAiYWRkIiAqLworICBjb25zdCBjaGFyICpuYW1lOworCisgIC8qIFRoZSBlbnVtIHZhbHVlIGZvciB0aGlzIG1uZW1vbmljLiAqLworICB0aWxlX21uZW1vbmljIG1uZW1vbmljOworCisgIC8qIEEgYml0IG1hc2sgb2Ygd2hpY2ggb2YgdGhlIGZpdmUgcGlwZXMgdGhpcyBpbnN0cnVjdGlvbgorICAgICBpcyBjb21wYXRpYmxlIHdpdGg6CisgICAgIFgwICAweDAxCisgICAgIFgxICAweDAyCisgICAgIFkwICAweDA0CisgICAgIFkxICAweDA4CisgICAgIFkyICAweDEwICovCisgIHVuc2lnbmVkIGNoYXIgcGlwZXM7CisKKyAgLyogSG93IG1hbnkgb3BlcmFuZHMgYXJlIHRoZXJlPyAqLworICB1bnNpZ25lZCBjaGFyIG51bV9vcGVyYW5kczsKKworICAvKiBXaGljaCByZWdpc3RlciBkb2VzIHRoaXMgd3JpdGUgaW1wbGljaXRseSwgb3IgVFJFR19aRVJPIGlmIG5vbmU/ICovCisgIHVuc2lnbmVkIGNoYXIgaW1wbGljaXRseV93cml0dGVuX3JlZ2lzdGVyOworCisgIC8qIENhbiB0aGlzIGJlIGJ1bmRsZWQgd2l0aCBvdGhlciBpbnN0cnVjdGlvbnMgKGFsbW9zdCBhbHdheXMgdHJ1ZSkuICovCisgIHVuc2lnbmVkIGNoYXIgY2FuX2J1bmRsZTsKKworICAvKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhbmRzLiBFYWNoIG9mIHRoZXNlIGlzIGFuCisgICAqIGluZGV4IGludG8gdGhlIHRpbGVfb3BlcmFuZHNbXSB0YWJsZS4gKi8KKyAgdW5zaWduZWQgY2hhciBvcGVyYW5kc1tUSUxFX05VTV9QSVBFTElORV9FTkNPRElOR1NdW1RJTEVfTUFYX09QRVJBTkRTXTsKKworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0aWxlX29wY29kZSB0aWxlX29wY29kZXNbXTsKKworCisvKiBVc2VkIGZvciBub24tdGV4dHVhbCBkaXNhc3NlbWJseSBpbnRvIHN0cnVjdHMuICovCitzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uCit7CisgIGNvbnN0IHN0cnVjdCB0aWxlX29wY29kZSAqb3Bjb2RlOworICBjb25zdCBzdHJ1Y3QgdGlsZV9vcGVyYW5kICpvcGVyYW5kc1tUSUxFX01BWF9PUEVSQU5EU107CisgIGludCBvcGVyYW5kX3ZhbHVlc1tUSUxFX01BWF9PUEVSQU5EU107Cit9OworCisKKy8qIERpc2Fzc2VtYmxlIGEgYnVuZGxlIGludG8gYSBzdHJ1Y3QgZm9yIG1hY2hpbmUgcHJvY2Vzc2luZy4gKi8KK2V4dGVybiBpbnQgcGFyc2VfaW5zbl90aWxlKHRpbGVfYnVuZGxlX2JpdHMgYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aWxlX2RlY29kZWRfaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRbVElMRV9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdKTsKKworCisKKyNlbmRpZiAvKiBvcGNvZGVfdGlsZV9oICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGVfNjQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9vcGNvZGUtdGlsZV82NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTYwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlLXRpbGVfNjQuaApAQCAtMCwwICsxLDE1MDYgQEAKKy8qIHRpbGUuaCAtLSBIZWFkZXIgZmlsZSBmb3IgVElMRSBvcGNvZGUgdGFibGUKKyAgIENvcHlyaWdodCAoQykgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIENvbnRyaWJ1dGVkIGJ5IFRpbGVyYSBDb3JwLiAqLworCisjaWZuZGVmIG9wY29kZV90aWxlX2gKKyNkZWZpbmUgb3Bjb2RlX3RpbGVfaAorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB0aWxlX2J1bmRsZV9iaXRzOworCisKK2VudW0KK3sKKyAgVElMRV9NQVhfT1BFUkFORFMgPSA1IC8qIG1tICovCit9OworCit0eXBlZGVmIGVudW0KK3sKKyAgVElMRV9PUENfQlBULAorICBUSUxFX09QQ19JTkZPLAorICBUSUxFX09QQ19JTkZPTCwKKyAgVElMRV9PUENfSiwKKyAgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19NT1ZFLAorICBUSUxFX09QQ19NT1ZFX1NOLAorICBUSUxFX09QQ19NT1ZFSSwKKyAgVElMRV9PUENfTU9WRUlfU04sCisgIFRJTEVfT1BDX01PVkVMSSwKKyAgVElMRV9PUENfTU9WRUxJX1NOLAorICBUSUxFX09QQ19NT1ZFTElTLAorICBUSUxFX09QQ19QUkVGRVRDSCwKKyAgVElMRV9PUENfUkFJU0UsCisgIFRJTEVfT1BDX0FERCwKKyAgVElMRV9PUENfQUREX1NOLAorICBUSUxFX09QQ19BRERCLAorICBUSUxFX09QQ19BRERCX1NOLAorICBUSUxFX09QQ19BRERCU19VLAorICBUSUxFX09QQ19BRERCU19VX1NOLAorICBUSUxFX09QQ19BRERILAorICBUSUxFX09QQ19BRERIX1NOLAorICBUSUxFX09QQ19BRERIUywKKyAgVElMRV9PUENfQURESFNfU04sCisgIFRJTEVfT1BDX0FEREksCisgIFRJTEVfT1BDX0FERElfU04sCisgIFRJTEVfT1BDX0FERElCLAorICBUSUxFX09QQ19BRERJQl9TTiwKKyAgVElMRV9PUENfQURESUgsCisgIFRJTEVfT1BDX0FERElIX1NOLAorICBUSUxFX09QQ19BRERMSSwKKyAgVElMRV9PUENfQURETElfU04sCisgIFRJTEVfT1BDX0FERExJUywKKyAgVElMRV9PUENfQUREUywKKyAgVElMRV9PUENfQUREU19TTiwKKyAgVElMRV9PUENfQURJRkZCX1UsCisgIFRJTEVfT1BDX0FESUZGQl9VX1NOLAorICBUSUxFX09QQ19BRElGRkgsCisgIFRJTEVfT1BDX0FESUZGSF9TTiwKKyAgVElMRV9PUENfQU5ELAorICBUSUxFX09QQ19BTkRfU04sCisgIFRJTEVfT1BDX0FOREksCisgIFRJTEVfT1BDX0FORElfU04sCisgIFRJTEVfT1BDX0FVTEksCisgIFRJTEVfT1BDX0FWR0JfVSwKKyAgVElMRV9PUENfQVZHQl9VX1NOLAorICBUSUxFX09QQ19BVkdILAorICBUSUxFX09QQ19BVkdIX1NOLAorICBUSUxFX09QQ19CQk5TLAorICBUSUxFX09QQ19CQk5TX1NOLAorICBUSUxFX09QQ19CQk5TVCwKKyAgVElMRV9PUENfQkJOU1RfU04sCisgIFRJTEVfT1BDX0JCUywKKyAgVElMRV9PUENfQkJTX1NOLAorICBUSUxFX09QQ19CQlNULAorICBUSUxFX09QQ19CQlNUX1NOLAorICBUSUxFX09QQ19CR0VaLAorICBUSUxFX09QQ19CR0VaX1NOLAorICBUSUxFX09QQ19CR0VaVCwKKyAgVElMRV9PUENfQkdFWlRfU04sCisgIFRJTEVfT1BDX0JHWiwKKyAgVElMRV9PUENfQkdaX1NOLAorICBUSUxFX09QQ19CR1pULAorICBUSUxFX09QQ19CR1pUX1NOLAorICBUSUxFX09QQ19CSVRYLAorICBUSUxFX09QQ19CSVRYX1NOLAorICBUSUxFX09QQ19CTEVaLAorICBUSUxFX09QQ19CTEVaX1NOLAorICBUSUxFX09QQ19CTEVaVCwKKyAgVElMRV9PUENfQkxFWlRfU04sCisgIFRJTEVfT1BDX0JMWiwKKyAgVElMRV9PUENfQkxaX1NOLAorICBUSUxFX09QQ19CTFpULAorICBUSUxFX09QQ19CTFpUX1NOLAorICBUSUxFX09QQ19CTlosCisgIFRJTEVfT1BDX0JOWl9TTiwKKyAgVElMRV9PUENfQk5aVCwKKyAgVElMRV9PUENfQk5aVF9TTiwKKyAgVElMRV9PUENfQllURVgsCisgIFRJTEVfT1BDX0JZVEVYX1NOLAorICBUSUxFX09QQ19CWiwKKyAgVElMRV9PUENfQlpfU04sCisgIFRJTEVfT1BDX0JaVCwKKyAgVElMRV9PUENfQlpUX1NOLAorICBUSUxFX09QQ19DTFosCisgIFRJTEVfT1BDX0NMWl9TTiwKKyAgVElMRV9PUENfQ1JDMzJfMzIsCisgIFRJTEVfT1BDX0NSQzMyXzMyX1NOLAorICBUSUxFX09QQ19DUkMzMl84LAorICBUSUxFX09QQ19DUkMzMl84X1NOLAorICBUSUxFX09QQ19DVFosCisgIFRJTEVfT1BDX0NUWl9TTiwKKyAgVElMRV9PUENfRFJBSU4sCisgIFRJTEVfT1BDX0RUTEJQUiwKKyAgVElMRV9PUENfRFdPUkRfQUxJR04sCisgIFRJTEVfT1BDX0RXT1JEX0FMSUdOX1NOLAorICBUSUxFX09QQ19GSU5WLAorICBUSUxFX09QQ19GTFVTSCwKKyAgVElMRV9PUENfRk5PUCwKKyAgVElMRV9PUENfSUNPSCwKKyAgVElMRV9PUENfSUxMLAorICBUSUxFX09QQ19JTlRIQiwKKyAgVElMRV9PUENfSU5USEJfU04sCisgIFRJTEVfT1BDX0lOVEhILAorICBUSUxFX09QQ19JTlRISF9TTiwKKyAgVElMRV9PUENfSU5UTEIsCisgIFRJTEVfT1BDX0lOVExCX1NOLAorICBUSUxFX09QQ19JTlRMSCwKKyAgVElMRV9PUENfSU5UTEhfU04sCisgIFRJTEVfT1BDX0lOViwKKyAgVElMRV9PUENfSVJFVCwKKyAgVElMRV9PUENfSkFMQiwKKyAgVElMRV9PUENfSkFMRiwKKyAgVElMRV9PUENfSkFMUiwKKyAgVElMRV9PUENfSkFMUlAsCisgIFRJTEVfT1BDX0pCLAorICBUSUxFX09QQ19KRiwKKyAgVElMRV9PUENfSlIsCisgIFRJTEVfT1BDX0pSUCwKKyAgVElMRV9PUENfTEIsCisgIFRJTEVfT1BDX0xCX1NOLAorICBUSUxFX09QQ19MQl9VLAorICBUSUxFX09QQ19MQl9VX1NOLAorICBUSUxFX09QQ19MQkFERCwKKyAgVElMRV9PUENfTEJBRERfU04sCisgIFRJTEVfT1BDX0xCQUREX1UsCisgIFRJTEVfT1BDX0xCQUREX1VfU04sCisgIFRJTEVfT1BDX0xILAorICBUSUxFX09QQ19MSF9TTiwKKyAgVElMRV9PUENfTEhfVSwKKyAgVElMRV9PUENfTEhfVV9TTiwKKyAgVElMRV9PUENfTEhBREQsCisgIFRJTEVfT1BDX0xIQUREX1NOLAorICBUSUxFX09QQ19MSEFERF9VLAorICBUSUxFX09QQ19MSEFERF9VX1NOLAorICBUSUxFX09QQ19MTkssCisgIFRJTEVfT1BDX0xOS19TTiwKKyAgVElMRV9PUENfTFcsCisgIFRJTEVfT1BDX0xXX1NOLAorICBUSUxFX09QQ19MV19OQSwKKyAgVElMRV9PUENfTFdfTkFfU04sCisgIFRJTEVfT1BDX0xXQURELAorICBUSUxFX09QQ19MV0FERF9TTiwKKyAgVElMRV9PUENfTFdBRERfTkEsCisgIFRJTEVfT1BDX0xXQUREX05BX1NOLAorICBUSUxFX09QQ19NQVhCX1UsCisgIFRJTEVfT1BDX01BWEJfVV9TTiwKKyAgVElMRV9PUENfTUFYSCwKKyAgVElMRV9PUENfTUFYSF9TTiwKKyAgVElMRV9PUENfTUFYSUJfVSwKKyAgVElMRV9PUENfTUFYSUJfVV9TTiwKKyAgVElMRV9PUENfTUFYSUgsCisgIFRJTEVfT1BDX01BWElIX1NOLAorICBUSUxFX09QQ19NRiwKKyAgVElMRV9PUENfTUZTUFIsCisgIFRJTEVfT1BDX01JTkJfVSwKKyAgVElMRV9PUENfTUlOQl9VX1NOLAorICBUSUxFX09QQ19NSU5ILAorICBUSUxFX09QQ19NSU5IX1NOLAorICBUSUxFX09QQ19NSU5JQl9VLAorICBUSUxFX09QQ19NSU5JQl9VX1NOLAorICBUSUxFX09QQ19NSU5JSCwKKyAgVElMRV9PUENfTUlOSUhfU04sCisgIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTlosCisgIFRJTEVfT1BDX01OWl9TTiwKKyAgVElMRV9PUENfTU5aQiwKKyAgVElMRV9PUENfTU5aQl9TTiwKKyAgVElMRV9PUENfTU5aSCwKKyAgVElMRV9PUENfTU5aSF9TTiwKKyAgVElMRV9PUENfTVRTUFIsCisgIFRJTEVfT1BDX01VTEhIX1NTLAorICBUSUxFX09QQ19NVUxISF9TU19TTiwKKyAgVElMRV9PUENfTVVMSEhfU1UsCisgIFRJTEVfT1BDX01VTEhIX1NVX1NOLAorICBUSUxFX09QQ19NVUxISF9VVSwKKyAgVElMRV9PUENfTVVMSEhfVVVfU04sCisgIFRJTEVfT1BDX01VTEhIQV9TUywKKyAgVElMRV9PUENfTVVMSEhBX1NTX1NOLAorICBUSUxFX09QQ19NVUxISEFfU1UsCisgIFRJTEVfT1BDX01VTEhIQV9TVV9TTiwKKyAgVElMRV9PUENfTVVMSEhBX1VVLAorICBUSUxFX09QQ19NVUxISEFfVVVfU04sCisgIFRJTEVfT1BDX01VTEhIU0FfVVUsCisgIFRJTEVfT1BDX01VTEhIU0FfVVVfU04sCisgIFRJTEVfT1BDX01VTEhMX1NTLAorICBUSUxFX09QQ19NVUxITF9TU19TTiwKKyAgVElMRV9PUENfTVVMSExfU1UsCisgIFRJTEVfT1BDX01VTEhMX1NVX1NOLAorICBUSUxFX09QQ19NVUxITF9VUywKKyAgVElMRV9PUENfTVVMSExfVVNfU04sCisgIFRJTEVfT1BDX01VTEhMX1VVLAorICBUSUxFX09QQ19NVUxITF9VVV9TTiwKKyAgVElMRV9PUENfTVVMSExBX1NTLAorICBUSUxFX09QQ19NVUxITEFfU1NfU04sCisgIFRJTEVfT1BDX01VTEhMQV9TVSwKKyAgVElMRV9PUENfTVVMSExBX1NVX1NOLAorICBUSUxFX09QQ19NVUxITEFfVVMsCisgIFRJTEVfT1BDX01VTEhMQV9VU19TTiwKKyAgVElMRV9PUENfTVVMSExBX1VVLAorICBUSUxFX09QQ19NVUxITEFfVVVfU04sCisgIFRJTEVfT1BDX01VTEhMU0FfVVUsCisgIFRJTEVfT1BDX01VTEhMU0FfVVVfU04sCisgIFRJTEVfT1BDX01VTExMX1NTLAorICBUSUxFX09QQ19NVUxMTF9TU19TTiwKKyAgVElMRV9PUENfTVVMTExfU1UsCisgIFRJTEVfT1BDX01VTExMX1NVX1NOLAorICBUSUxFX09QQ19NVUxMTF9VVSwKKyAgVElMRV9PUENfTVVMTExfVVVfU04sCisgIFRJTEVfT1BDX01VTExMQV9TUywKKyAgVElMRV9PUENfTVVMTExBX1NTX1NOLAorICBUSUxFX09QQ19NVUxMTEFfU1UsCisgIFRJTEVfT1BDX01VTExMQV9TVV9TTiwKKyAgVElMRV9PUENfTVVMTExBX1VVLAorICBUSUxFX09QQ19NVUxMTEFfVVVfU04sCisgIFRJTEVfT1BDX01VTExMU0FfVVUsCisgIFRJTEVfT1BDX01VTExMU0FfVVVfU04sCisgIFRJTEVfT1BDX01WTlosCisgIFRJTEVfT1BDX01WTlpfU04sCisgIFRJTEVfT1BDX01WWiwKKyAgVElMRV9PUENfTVZaX1NOLAorICBUSUxFX09QQ19NWiwKKyAgVElMRV9PUENfTVpfU04sCisgIFRJTEVfT1BDX01aQiwKKyAgVElMRV9PUENfTVpCX1NOLAorICBUSUxFX09QQ19NWkgsCisgIFRJTEVfT1BDX01aSF9TTiwKKyAgVElMRV9PUENfTkFQLAorICBUSUxFX09QQ19OT1AsCisgIFRJTEVfT1BDX05PUiwKKyAgVElMRV9PUENfTk9SX1NOLAorICBUSUxFX09QQ19PUiwKKyAgVElMRV9PUENfT1JfU04sCisgIFRJTEVfT1BDX09SSSwKKyAgVElMRV9PUENfT1JJX1NOLAorICBUSUxFX09QQ19QQUNLQlNfVSwKKyAgVElMRV9PUENfUEFDS0JTX1VfU04sCisgIFRJTEVfT1BDX1BBQ0tIQiwKKyAgVElMRV9PUENfUEFDS0hCX1NOLAorICBUSUxFX09QQ19QQUNLSFMsCisgIFRJTEVfT1BDX1BBQ0tIU19TTiwKKyAgVElMRV9PUENfUEFDS0xCLAorICBUSUxFX09QQ19QQUNLTEJfU04sCisgIFRJTEVfT1BDX1BDTlQsCisgIFRJTEVfT1BDX1BDTlRfU04sCisgIFRJTEVfT1BDX1JMLAorICBUSUxFX09QQ19STF9TTiwKKyAgVElMRV9PUENfUkxJLAorICBUSUxFX09QQ19STElfU04sCisgIFRJTEVfT1BDX1MxQSwKKyAgVElMRV9PUENfUzFBX1NOLAorICBUSUxFX09QQ19TMkEsCisgIFRJTEVfT1BDX1MyQV9TTiwKKyAgVElMRV9PUENfUzNBLAorICBUSUxFX09QQ19TM0FfU04sCisgIFRJTEVfT1BDX1NBREFCX1UsCisgIFRJTEVfT1BDX1NBREFCX1VfU04sCisgIFRJTEVfT1BDX1NBREFILAorICBUSUxFX09QQ19TQURBSF9TTiwKKyAgVElMRV9PUENfU0FEQUhfVSwKKyAgVElMRV9PUENfU0FEQUhfVV9TTiwKKyAgVElMRV9PUENfU0FEQl9VLAorICBUSUxFX09QQ19TQURCX1VfU04sCisgIFRJTEVfT1BDX1NBREgsCisgIFRJTEVfT1BDX1NBREhfU04sCisgIFRJTEVfT1BDX1NBREhfVSwKKyAgVElMRV9PUENfU0FESF9VX1NOLAorICBUSUxFX09QQ19TQiwKKyAgVElMRV9PUENfU0JBREQsCisgIFRJTEVfT1BDX1NFUSwKKyAgVElMRV9PUENfU0VRX1NOLAorICBUSUxFX09QQ19TRVFCLAorICBUSUxFX09QQ19TRVFCX1NOLAorICBUSUxFX09QQ19TRVFILAorICBUSUxFX09QQ19TRVFIX1NOLAorICBUSUxFX09QQ19TRVFJLAorICBUSUxFX09QQ19TRVFJX1NOLAorICBUSUxFX09QQ19TRVFJQiwKKyAgVElMRV9PUENfU0VRSUJfU04sCisgIFRJTEVfT1BDX1NFUUlILAorICBUSUxFX09QQ19TRVFJSF9TTiwKKyAgVElMRV9PUENfU0gsCisgIFRJTEVfT1BDX1NIQURELAorICBUSUxFX09QQ19TSEwsCisgIFRJTEVfT1BDX1NITF9TTiwKKyAgVElMRV9PUENfU0hMQiwKKyAgVElMRV9PUENfU0hMQl9TTiwKKyAgVElMRV9PUENfU0hMSCwKKyAgVElMRV9PUENfU0hMSF9TTiwKKyAgVElMRV9PUENfU0hMSSwKKyAgVElMRV9PUENfU0hMSV9TTiwKKyAgVElMRV9PUENfU0hMSUIsCisgIFRJTEVfT1BDX1NITElCX1NOLAorICBUSUxFX09QQ19TSExJSCwKKyAgVElMRV9PUENfU0hMSUhfU04sCisgIFRJTEVfT1BDX1NIUiwKKyAgVElMRV9PUENfU0hSX1NOLAorICBUSUxFX09QQ19TSFJCLAorICBUSUxFX09QQ19TSFJCX1NOLAorICBUSUxFX09QQ19TSFJILAorICBUSUxFX09QQ19TSFJIX1NOLAorICBUSUxFX09QQ19TSFJJLAorICBUSUxFX09QQ19TSFJJX1NOLAorICBUSUxFX09QQ19TSFJJQiwKKyAgVElMRV9PUENfU0hSSUJfU04sCisgIFRJTEVfT1BDX1NIUklILAorICBUSUxFX09QQ19TSFJJSF9TTiwKKyAgVElMRV9PUENfU0xULAorICBUSUxFX09QQ19TTFRfU04sCisgIFRJTEVfT1BDX1NMVF9VLAorICBUSUxFX09QQ19TTFRfVV9TTiwKKyAgVElMRV9PUENfU0xUQiwKKyAgVElMRV9PUENfU0xUQl9TTiwKKyAgVElMRV9PUENfU0xUQl9VLAorICBUSUxFX09QQ19TTFRCX1VfU04sCisgIFRJTEVfT1BDX1NMVEUsCisgIFRJTEVfT1BDX1NMVEVfU04sCisgIFRJTEVfT1BDX1NMVEVfVSwKKyAgVElMRV9PUENfU0xURV9VX1NOLAorICBUSUxFX09QQ19TTFRFQiwKKyAgVElMRV9PUENfU0xURUJfU04sCisgIFRJTEVfT1BDX1NMVEVCX1UsCisgIFRJTEVfT1BDX1NMVEVCX1VfU04sCisgIFRJTEVfT1BDX1NMVEVILAorICBUSUxFX09QQ19TTFRFSF9TTiwKKyAgVElMRV9PUENfU0xURUhfVSwKKyAgVElMRV9PUENfU0xURUhfVV9TTiwKKyAgVElMRV9PUENfU0xUSCwKKyAgVElMRV9PUENfU0xUSF9TTiwKKyAgVElMRV9PUENfU0xUSF9VLAorICBUSUxFX09QQ19TTFRIX1VfU04sCisgIFRJTEVfT1BDX1NMVEksCisgIFRJTEVfT1BDX1NMVElfU04sCisgIFRJTEVfT1BDX1NMVElfVSwKKyAgVElMRV9PUENfU0xUSV9VX1NOLAorICBUSUxFX09QQ19TTFRJQiwKKyAgVElMRV9PUENfU0xUSUJfU04sCisgIFRJTEVfT1BDX1NMVElCX1UsCisgIFRJTEVfT1BDX1NMVElCX1VfU04sCisgIFRJTEVfT1BDX1NMVElILAorICBUSUxFX09QQ19TTFRJSF9TTiwKKyAgVElMRV9PUENfU0xUSUhfVSwKKyAgVElMRV9PUENfU0xUSUhfVV9TTiwKKyAgVElMRV9PUENfU05FLAorICBUSUxFX09QQ19TTkVfU04sCisgIFRJTEVfT1BDX1NORUIsCisgIFRJTEVfT1BDX1NORUJfU04sCisgIFRJTEVfT1BDX1NORUgsCisgIFRJTEVfT1BDX1NORUhfU04sCisgIFRJTEVfT1BDX1NSQSwKKyAgVElMRV9PUENfU1JBX1NOLAorICBUSUxFX09QQ19TUkFCLAorICBUSUxFX09QQ19TUkFCX1NOLAorICBUSUxFX09QQ19TUkFILAorICBUSUxFX09QQ19TUkFIX1NOLAorICBUSUxFX09QQ19TUkFJLAorICBUSUxFX09QQ19TUkFJX1NOLAorICBUSUxFX09QQ19TUkFJQiwKKyAgVElMRV9PUENfU1JBSUJfU04sCisgIFRJTEVfT1BDX1NSQUlILAorICBUSUxFX09QQ19TUkFJSF9TTiwKKyAgVElMRV9PUENfU1VCLAorICBUSUxFX09QQ19TVUJfU04sCisgIFRJTEVfT1BDX1NVQkIsCisgIFRJTEVfT1BDX1NVQkJfU04sCisgIFRJTEVfT1BDX1NVQkJTX1UsCisgIFRJTEVfT1BDX1NVQkJTX1VfU04sCisgIFRJTEVfT1BDX1NVQkgsCisgIFRJTEVfT1BDX1NVQkhfU04sCisgIFRJTEVfT1BDX1NVQkhTLAorICBUSUxFX09QQ19TVUJIU19TTiwKKyAgVElMRV9PUENfU1VCUywKKyAgVElMRV9PUENfU1VCU19TTiwKKyAgVElMRV9PUENfU1csCisgIFRJTEVfT1BDX1NXQURELAorICBUSUxFX09QQ19TV0lOVDAsCisgIFRJTEVfT1BDX1NXSU5UMSwKKyAgVElMRV9PUENfU1dJTlQyLAorICBUSUxFX09QQ19TV0lOVDMsCisgIFRJTEVfT1BDX1RCTElEWEIwLAorICBUSUxFX09QQ19UQkxJRFhCMF9TTiwKKyAgVElMRV9PUENfVEJMSURYQjEsCisgIFRJTEVfT1BDX1RCTElEWEIxX1NOLAorICBUSUxFX09QQ19UQkxJRFhCMiwKKyAgVElMRV9PUENfVEJMSURYQjJfU04sCisgIFRJTEVfT1BDX1RCTElEWEIzLAorICBUSUxFX09QQ19UQkxJRFhCM19TTiwKKyAgVElMRV9PUENfVE5TLAorICBUSUxFX09QQ19UTlNfU04sCisgIFRJTEVfT1BDX1dINjQsCisgIFRJTEVfT1BDX1hPUiwKKyAgVElMRV9PUENfWE9SX1NOLAorICBUSUxFX09QQ19YT1JJLAorICBUSUxFX09QQ19YT1JJX1NOLAorICBUSUxFX09QQ19OT05FCit9IHRpbGVfbW5lbW9uaWM7CisKKy8qIDY0LWJpdCBwYXR0ZXJuIGZvciBhIHsgYnB0IDsgbm9wIH0gYnVuZGxlLiAqLworI2RlZmluZSBUSUxFX0JQVF9CVU5ETEUgMHg0MDBiM2NhZTcwMTY2MDAwVUxMCisKKworI2RlZmluZSBUSUxFX0VMRl9NQUNISU5FX0NPREUgRU1fVElMRVBSTworCisjZGVmaW5lIFRJTEVfRUxGX05BTUUgImVsZjMyLXRpbGVwcm8iCisKKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0JyT2ZmX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweDNmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Cck9mZl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MDAwMDdmZmYpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAyMCkpICYgMHgwMDAxODAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9CclR5cGVfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9JbW04X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgwMDAwMDAzZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDAwMDAwMGMwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfU04odGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9EZXN0X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0Rlc3RfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDApKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzEpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tMTZfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tMTZfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tOF9TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1kwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW1PcGNvZGVFeHRlbnNpb25fWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIwKSkgJiAweDdmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0ltbU9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTEpKSAmIDB4N2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tUlJPcGNvZGVFeHRlbnNpb25fU04odGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDgpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9KT2ZmTG9uZ19YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MDAwMDdmZmYpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAyMCkpICYgMHgwMDAxODAwMCkgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDE0KSkgJiAweDAwMWUwMDAwKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMTYpKSAmIDB4MDdlMDAwMDApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgxODAwMDAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9KT2ZmX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgwMDAwN2ZmZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDIwKSkgJiAweDAwMDE4MDAwKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMTQpKSAmIDB4MDAxZTAwMDApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiAxNikpICYgMHgwN2UwMDAwMCkgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDA4MDAwMDAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X01GX0ltbTE1X1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzNykpICYgMHgwMDAwM2ZmZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDQ0KSkgJiAweDAwMDA0MDAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X01NRW5kX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9NTUVuZF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDkpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTU1TdGFydF9YMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTU1TdGFydF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTQpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTVRfSW1tMTVfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDAwMDAwMDNmKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4MDAwMDNmYzApIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiA0NCkpICYgMHgwMDAwNDAwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Nb2RlKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA2MykpICYgMHgxKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X05vUmVnT3Bjb2RlRXh0ZW5zaW9uX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAwKSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMCkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9PcGNvZGVfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDI4KSkgJiAweDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OSkpICYgMHhmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9ZMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjcpKSAmIDB4Zik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9PcGNvZGVfWTEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDU5KSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfT3Bjb2RlX1kyKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1NikpICYgMHg3KTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1JST3Bjb2RlRXh0ZW5zaW9uX1NOKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA0KSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgxZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0OSkpICYgMHgxZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1kwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1JSUk9wY29kZUV4dGVuc2lvbl9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDkpKSAmIDB4Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Sb3V0ZU9wY29kZUV4dGVuc2lvbl9TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU19YMCh0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMjcpKSAmIDB4MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OCkpICYgMHgxKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoQW10X1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TaEFtdF9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDFmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoQW10X1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TcmNBX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA2KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDM3KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDYpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMih0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKChuID4+IDI2KSkgJiAweDAwMDAwMDAxKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTApKSAmIDB4MDAwMDAwM2UpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQkRlc3RfWTIodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDIwKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWDAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWDEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWTEodGlsZV9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY19TTih0aWxlX2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMCkpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuT3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Vbk9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4MWYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5PcGNvZGVFeHRlbnNpb25fWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDFmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuT3Bjb2RlRXh0ZW5zaW9uX1kxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxNykpICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5TaE9wY29kZUV4dGVuc2lvbl9YMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDgpKSAmIDB4M2ZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuU2hPcGNvZGVFeHRlbnNpb25fWTAodGlsZV9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDE3KSkgJiAweDcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMSh0aWxlX2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDgpKSAmIDB4Nyk7Cit9CisKKworc3RhdGljIF9faW5saW5lIGludAorc2lnbl9leHRlbmQoaW50IG4sIGludCBudW1fYml0cykKK3sKKyAgaW50IHNoaWZ0ID0gKGludCkoc2l6ZW9mKGludCkgKiA4IC0gbnVtX2JpdHMpOworICByZXR1cm4gKG4gPDwgc2hpZnQpID4+IHNoaWZ0OworfQorCisKKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Cck9mZl9TTihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0JyT2ZmX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwN2ZmZikpIDw8IDQzKSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAxODAwMCkpIDw8IDIwKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9CclR5cGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCAzMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfRGVzdF9JbW04X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwMDAzZikpIDw8IDMxKSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwMDBjMCkpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9EZXN0X1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDMpIDw8IDIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbTE2X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmZmYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW0xNl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4ZmZmZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04X1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmKSA8PCAwKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmKSA8PCAxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4ZmYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHhmZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbThfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGZmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbU9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHg3ZikgPDwgMjApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0ltbU9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4N2YpKSA8PCA1MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tUlJPcGNvZGVFeHRlbnNpb25fU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfSk9mZkxvbmdfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA3ZmZmKSkgPDwgNDMpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDE4MDAwKSkgPDwgMjApIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMWUwMDAwKSkgPDwgMTQpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA3ZTAwMDAwKSkgPDwgMTYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDE4MDAwMDAwKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX0pPZmZfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA3ZmZmKSkgPDwgNDMpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDE4MDAwKSkgPDwgMjApIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMWUwMDAwKSkgPDwgMTQpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA3ZTAwMDAwKSkgPDwgMTYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDA4MDAwMDAwKSkgPDwgMzEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01GX0ltbTE1X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwM2ZmZikpIDw8IDM3KSB8CisgICAgICAgICAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgwMDAwNDAwMCkpIDw8IDQ0KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9NTUVuZF9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgxZikgPDwgMTgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01NRW5kX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgxZikpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9NTVN0YXJ0X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDFmKSA8PCAyMyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTU1TdGFydF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA1NCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTVRfSW1tMTVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAwMDNmKSkgPDwgMzEpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAzZmMwKSkgPDwgMzcpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDA0MDAwKSkgPDwgNDQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX01vZGUoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDEpKSA8PCA2Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfTm9SZWdPcGNvZGVFeHRlbnNpb25fU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4ZikgPDwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAxMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDcpIDw8IDI4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCA1OSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1kwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGYpIDw8IDI3KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweGYpKSA8PCA1OSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfT3Bjb2RlX1kyKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHg3KSkgPDwgNTYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JST3Bjb2RlRXh0ZW5zaW9uX1NOKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGYpIDw8IDQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgxZmYpIDw8IDE4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDFmZikpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgMTgpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MykpIDw8IDQ5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Sb3V0ZU9wY29kZUV4dGVuc2lvbl9TTihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MSkgPDwgMjcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDEpKSA8PCA1OCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaEFtdF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaEFtdF9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4M2YpKSA8PCAzNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4M2YpKSA8PCAzNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgwMDAwMDAwMSkgPDwgMjYpIHwKKyAgICAgICAgICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAwMDNlKSkgPDwgNTApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JEZXN0X1kyKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAyMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZV9idW5kbGVfYml0cworY3JlYXRlX1NyY0JfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNCX1kxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNfU04oaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MykgPDwgMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5PcGNvZGVFeHRlbnNpb25fWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Vbk9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5PcGNvZGVFeHRlbnNpb25fWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4MWYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9Vbk9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZmYpIDw8IDE3KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVfYnVuZGxlX2JpdHMKK2NyZWF0ZV9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlX2J1bmRsZV9iaXRzKShuICYgMHgzZmYpKSA8PCA0OCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHg3KSA8PCAxNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlX2J1bmRsZV9iaXRzCitjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZV9idW5kbGVfYml0cykobiAmIDB4NykpIDw8IDQ4KTsKK30KKworCisKK3R5cGVkZWYgZW51bQoreworICBUSUxFX1BJUEVMSU5FX1gwLAorICBUSUxFX1BJUEVMSU5FX1gxLAorICBUSUxFX1BJUEVMSU5FX1kwLAorICBUSUxFX1BJUEVMSU5FX1kxLAorICBUSUxFX1BJUEVMSU5FX1kyLAorfSB0aWxlX3BpcGVsaW5lOworCisjZGVmaW5lIHRpbGVfaXNfeF9waXBlbGluZShwKSAoKGludCkocCkgPD0gKGludClUSUxFX1BJUEVMSU5FX1gxKQorCit0eXBlZGVmIGVudW0KK3sKKyAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLAorICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLAorICBUSUxFX09QX1RZUEVfQUREUkVTUywKKyAgVElMRV9PUF9UWVBFX1NQUgorfSB0aWxlX29wZXJhbmRfdHlwZTsKKworLyogVGhpcyBpcyB0aGUgYml0IHRoYXQgZGV0ZXJtaW5lcyBpZiBhIGJ1bmRsZSBpcyBpbiB0aGUgWSBlbmNvZGluZy4gKi8KKyNkZWZpbmUgVElMRV9CVU5ETEVfWV9FTkNPRElOR19NQVNLICgodGlsZV9idW5kbGVfYml0cykxIDw8IDYzKQorCitlbnVtCit7CisgIC8qIE1heGltdW0gbnVtYmVyIG9mIGluc3RydWN0aW9ucyBpbiBhIGJ1bmRsZSAoMiBmb3IgWCwgMyBmb3IgWSkuICovCisgIFRJTEVfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFID0gMywKKworICAvKiBIb3cgbWFueSBkaWZmZXJlbnQgcGlwZWxpbmUgZW5jb2RpbmdzIGFyZSB0aGVyZT8gWDAsIFgxLCBZMCwgWTEsIFkyLiAqLworICBUSUxFX05VTV9QSVBFTElORV9FTkNPRElOR1MgPSA1LAorCisgIC8qIExvZyBiYXNlIDIgb2YgVElMRV9CVU5ETEVfU0laRV9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX0JVTkRMRV9TSVpFX0lOX0JZVEVTID0gMywKKworICAvKiBJbnN0cnVjdGlvbnMgdGFrZSB0aGlzIG1hbnkgYnl0ZXMuICovCisgIFRJTEVfQlVORExFX1NJWkVfSU5fQllURVMgPSAxIDw8IFRJTEVfTE9HMl9CVU5ETEVfU0laRV9JTl9CWVRFUywKKworICAvKiBMb2cgYmFzZSAyIG9mIFRJTEVfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgPSAzLAorCisgIC8qIEJ1bmRsZXMgc2hvdWxkIGJlIGFsaWduZWQgbW9kdWxvIHRoaXMgbnVtYmVyIG9mIGJ5dGVzLiAqLworICBUSUxFX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgPQorICAgICgxIDw8IFRJTEVfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTKSwKKworICAvKiBMb2cgYmFzZSAyIG9mIFRJTEVfU05fSU5TVFJVQ1RJT05fU0laRV9JTl9CWVRFUy4gKi8KKyAgVElMRV9MT0cyX1NOX0lOU1RSVUNUSU9OX1NJWkVfSU5fQllURVMgPSAxLAorCisgIC8qIFN0YXRpYyBuZXR3b3JrIGluc3RydWN0aW9ucyB0YWtlIHRoaXMgbWFueSBieXRlcy4gKi8KKyAgVElMRV9TTl9JTlNUUlVDVElPTl9TSVpFX0lOX0JZVEVTID0KKyAgICAoMSA8PCBUSUxFX0xPRzJfU05fSU5TVFJVQ1RJT05fU0laRV9JTl9CWVRFUyksCisKKyAgLyogTnVtYmVyIG9mIHJlZ2lzdGVycyAoc29tZSBhcmUgbWFnaWMsIHN1Y2ggYXMgbmV0d29yayBJL08pLiAqLworICBUSUxFX05VTV9SRUdJU1RFUlMgPSA2NCwKKworICAvKiBOdW1iZXIgb2Ygc3RhdGljIG5ldHdvcmsgcmVnaXN0ZXJzLiAqLworICBUSUxFX05VTV9TTl9SRUdJU1RFUlMgPSA0Cit9OworCisKK3N0cnVjdCB0aWxlX29wZXJhbmQKK3sKKyAgLyogSXMgdGhpcyBvcGVyYW5kIGEgcmVnaXN0ZXIsIGltbWVkaWF0ZSBvciBhZGRyZXNzPyAqLworICB0aWxlX29wZXJhbmRfdHlwZSB0eXBlOworCisgIC8qIFRoZSBkZWZhdWx0IHJlbG9jYXRpb24gdHlwZSBmb3IgdGhpcyBvcGVyYW5kLiAgKi8KKyAgc2lnbmVkIGludCBkZWZhdWx0X3JlbG9jIDogMTY7CisKKyAgLyogSG93IG1hbnkgYml0cyBpcyB0aGlzIHZhbHVlPyAodXNlZCBmb3IgcmFuZ2UgY2hlY2tpbmcpICovCisgIHVuc2lnbmVkIGludCBudW1fYml0cyA6IDU7CisKKyAgLyogSXMgdGhlIHZhbHVlIHNpZ25lZD8gKHVzZWQgZm9yIHJhbmdlIGNoZWNraW5nKSAqLworICB1bnNpZ25lZCBpbnQgaXNfc2lnbmVkIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgYSBzb3VyY2UgcmVnaXN0ZXI/ICovCisgIHVuc2lnbmVkIGludCBpc19zcmNfcmVnIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgd3JpdHRlbj8gKGkuZS4gaXMgaXQgYSBkZXN0aW5hdGlvbiByZWdpc3RlcikgKi8KKyAgdW5zaWduZWQgaW50IGlzX2Rlc3RfcmVnIDogMTsKKworICAvKiBJcyB0aGlzIG9wZXJhbmQgUEMtcmVsYXRpdmU/ICovCisgIHVuc2lnbmVkIGludCBpc19wY19yZWxhdGl2ZSA6IDE7CisKKyAgLyogQnkgaG93IG1hbnkgYml0cyBkbyB3ZSByaWdodCBzaGlmdCB0aGUgdmFsdWUgYmVmb3JlIGluc2VydGluZz8gKi8KKyAgdW5zaWduZWQgaW50IHJpZ2h0c2hpZnQgOiAyOworCisgIC8qIFJldHVybiB0aGUgYml0cyBmb3IgdGhpcyBvcGVyYW5kIHRvIGJlIE9SZWQgaW50byBhbiBleGlzdGluZyBidW5kbGUuICovCisgIHRpbGVfYnVuZGxlX2JpdHMgKCppbnNlcnQpIChpbnQgb3ApOworCisgIC8qIEV4dHJhY3QgdGhpcyBvcGVyYW5kIGFuZCByZXR1cm4gaXQuICovCisgIHVuc2lnbmVkIGludCAoKmV4dHJhY3QpICh0aWxlX2J1bmRsZV9iaXRzIGJ1bmRsZSk7Cit9OworCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdGlsZV9vcGVyYW5kIHRpbGVfb3BlcmFuZHNbXTsKKworLyogT25lIGZpbml0ZS1zdGF0ZSBtYWNoaW5lIHBlciBwaXBlIGZvciByYXBpZCBpbnN0cnVjdGlvbiBkZWNvZGluZy4gKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCAqIGNvbnN0Cit0aWxlX2J1bmRsZV9kZWNvZGVyX2ZzbXNbVElMRV9OVU1fUElQRUxJTkVfRU5DT0RJTkdTXTsKKworCitzdHJ1Y3QgdGlsZV9vcGNvZGUKK3sKKyAgLyogVGhlIG9wY29kZSBtbmVtb25pYywgZS5nLiAiYWRkIiAqLworICBjb25zdCBjaGFyICpuYW1lOworCisgIC8qIFRoZSBlbnVtIHZhbHVlIGZvciB0aGlzIG1uZW1vbmljLiAqLworICB0aWxlX21uZW1vbmljIG1uZW1vbmljOworCisgIC8qIEEgYml0IG1hc2sgb2Ygd2hpY2ggb2YgdGhlIGZpdmUgcGlwZXMgdGhpcyBpbnN0cnVjdGlvbgorICAgICBpcyBjb21wYXRpYmxlIHdpdGg6CisgICAgIFgwICAweDAxCisgICAgIFgxICAweDAyCisgICAgIFkwICAweDA0CisgICAgIFkxICAweDA4CisgICAgIFkyICAweDEwICovCisgIHVuc2lnbmVkIGNoYXIgcGlwZXM7CisKKyAgLyogSG93IG1hbnkgb3BlcmFuZHMgYXJlIHRoZXJlPyAqLworICB1bnNpZ25lZCBjaGFyIG51bV9vcGVyYW5kczsKKworICAvKiBXaGljaCByZWdpc3RlciBkb2VzIHRoaXMgd3JpdGUgaW1wbGljaXRseSwgb3IgVFJFR19aRVJPIGlmIG5vbmU/ICovCisgIHVuc2lnbmVkIGNoYXIgaW1wbGljaXRseV93cml0dGVuX3JlZ2lzdGVyOworCisgIC8qIENhbiB0aGlzIGJlIGJ1bmRsZWQgd2l0aCBvdGhlciBpbnN0cnVjdGlvbnMgKGFsbW9zdCBhbHdheXMgdHJ1ZSkuICovCisgIHVuc2lnbmVkIGNoYXIgY2FuX2J1bmRsZTsKKworICAvKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhbmRzLiBFYWNoIG9mIHRoZXNlIGlzIGFuCisgICAqIGluZGV4IGludG8gdGhlIHRpbGVfb3BlcmFuZHNbXSB0YWJsZS4gKi8KKyAgdW5zaWduZWQgY2hhciBvcGVyYW5kc1tUSUxFX05VTV9QSVBFTElORV9FTkNPRElOR1NdW1RJTEVfTUFYX09QRVJBTkRTXTsKKworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0aWxlX29wY29kZSB0aWxlX29wY29kZXNbXTsKKworCisvKiBVc2VkIGZvciBub24tdGV4dHVhbCBkaXNhc3NlbWJseSBpbnRvIHN0cnVjdHMuICovCitzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uCit7CisgIGNvbnN0IHN0cnVjdCB0aWxlX29wY29kZSAqb3Bjb2RlOworICBjb25zdCBzdHJ1Y3QgdGlsZV9vcGVyYW5kICpvcGVyYW5kc1tUSUxFX01BWF9PUEVSQU5EU107CisgIGludCBvcGVyYW5kX3ZhbHVlc1tUSUxFX01BWF9PUEVSQU5EU107Cit9OworCisKKy8qIERpc2Fzc2VtYmxlIGEgYnVuZGxlIGludG8gYSBzdHJ1Y3QgZm9yIG1hY2hpbmUgcHJvY2Vzc2luZy4gKi8KK2V4dGVybiBpbnQgcGFyc2VfaW5zbl90aWxlKHRpbGVfYnVuZGxlX2JpdHMgYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aWxlX2RlY29kZWRfaW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRbVElMRV9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdKTsKKworCisKKyNlbmRpZiAvKiBvcGNvZGVfdGlsZV9oICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlX2NvbnN0YW50cy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL29wY29kZV9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2E5ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL29wY29kZV9jb25zdGFudHMuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX09QQ09ERV9DT05TVEFOVFNfSAorI2RlZmluZSBfQVNNX1RJTEVfT1BDT0RFX0NPTlNUQU5UU19ICisKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2lmIENISVBfV09SRF9TSVpFKCkgPT0gNjQKKyNpbmNsdWRlIDxhc20vb3Bjb2RlX2NvbnN0YW50c182NC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vb3Bjb2RlX2NvbnN0YW50c18zMi5oPgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfT1BDT0RFX0NPTlNUQU5UU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlX2NvbnN0YW50c18zMi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL29wY29kZV9jb25zdGFudHNfMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjdkMDMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL29wY29kZV9jb25zdGFudHNfMzIuaApAQCAtMCwwICsxLDQ4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBUaGlzIGZpbGUgaXMgbWFjaGluZS1nZW5lcmF0ZWQ7IERPIE5PVCBFRElUISAqLworCisKKyNpZm5kZWYgX1RJTEVfT1BDT0RFX0NPTlNUQU5UU19ICisjZGVmaW5lIF9USUxFX09QQ09ERV9DT05TVEFOVFNfSAorZW51bQoreworICBBRERCU19VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5OCwKKyAgQUREQlNfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjgsCisgIEFEREJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEsCisgIEFEREJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDEsCisgIEFEREhTX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5OSwKKyAgQURESFNfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDY5LAorICBBRERIX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyLAorICBBRERIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyLAorICBBRERJQl9JTU1fMF9PUENPREVfWDAgPSAxLAorICBBRERJQl9JTU1fMF9PUENPREVfWDEgPSAxLAorICBBRERJSF9JTU1fMF9PUENPREVfWDAgPSAyLAorICBBRERJSF9JTU1fMF9PUENPREVfWDEgPSAyLAorICBBRERJX0lNTV8wX09QQ09ERV9YMCA9IDMsCisgIEFERElfSU1NXzBfT1BDT0RFX1gxID0gMywKKyAgQURESV9JTU1fMV9PUENPREVfU04gPSAxLAorICBBRERJX09QQ09ERV9ZMCA9IDksCisgIEFERElfT1BDT0RFX1kxID0gNywKKyAgQURETElTX09QQ09ERV9YMCA9IDEsCisgIEFERExJU19PUENPREVfWDEgPSAyLAorICBBRERMSV9PUENPREVfWDAgPSAyLAorICBBRERMSV9PUENPREVfWDEgPSAzLAorICBBRERTX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5NiwKKyAgQUREU19TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjYsCisgIEFERF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMywKKyAgQUREX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzLAorICBBRERfU1BFQ0lBTF8wX09QQ09ERV9ZMCA9IDAsCisgIEFERF9TUEVDSUFMXzBfT1BDT0RFX1kxID0gMCwKKyAgQURJRkZCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQsCisgIEFESUZGSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNSwKKyAgQU5ESV9JTU1fMF9PUENPREVfWDAgPSAxLAorICBBTkRJX0lNTV8wX09QQ09ERV9YMSA9IDQsCisgIEFORElfT1BDT0RFX1kwID0gMTAsCisgIEFORElfT1BDT0RFX1kxID0gOCwKKyAgQU5EX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2LAorICBBTkRfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQsCisgIEFORF9TUEVDSUFMXzJfT1BDT0RFX1kwID0gMCwKKyAgQU5EX1NQRUNJQUxfMl9PUENPREVfWTEgPSAwLAorICBBVUxJX09QQ09ERV9YMCA9IDMsCisgIEFVTElfT1BDT0RFX1gxID0gNCwKKyAgQVZHQl9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA3LAorICBBVkdIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4LAorICBCQk5TVF9CUkFOQ0hfT1BDT0RFX1gxID0gMTUsCisgIEJCTlNfQlJBTkNIX09QQ09ERV9YMSA9IDE0LAorICBCQk5TX09QQ09ERV9TTiA9IDYzLAorICBCQlNUX0JSQU5DSF9PUENPREVfWDEgPSAxMywKKyAgQkJTX0JSQU5DSF9PUENPREVfWDEgPSAxMiwKKyAgQkJTX09QQ09ERV9TTiA9IDYyLAorICBCR0VaVF9CUkFOQ0hfT1BDT0RFX1gxID0gNywKKyAgQkdFWl9CUkFOQ0hfT1BDT0RFX1gxID0gNiwKKyAgQkdFWl9PUENPREVfU04gPSA2MSwKKyAgQkdaVF9CUkFOQ0hfT1BDT0RFX1gxID0gNSwKKyAgQkdaX0JSQU5DSF9PUENPREVfWDEgPSA0LAorICBCR1pfT1BDT0RFX1NOID0gNTgsCisgIEJJVFhfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gMSwKKyAgQklUWF9VTl8wX1NIVU5fMF9PUENPREVfWTAgPSAxLAorICBCTEVaVF9CUkFOQ0hfT1BDT0RFX1gxID0gMTEsCisgIEJMRVpfQlJBTkNIX09QQ09ERV9YMSA9IDEwLAorICBCTEVaX09QQ09ERV9TTiA9IDU5LAorICBCTFpUX0JSQU5DSF9PUENPREVfWDEgPSA5LAorICBCTFpfQlJBTkNIX09QQ09ERV9YMSA9IDgsCisgIEJMWl9PUENPREVfU04gPSA2MCwKKyAgQk5aVF9CUkFOQ0hfT1BDT0RFX1gxID0gMywKKyAgQk5aX0JSQU5DSF9PUENPREVfWDEgPSAyLAorICBCTlpfT1BDT0RFX1NOID0gNTcsCisgIEJQVF9OT1JFR19SUl9JTU1fMF9PUENPREVfU04gPSAxLAorICBCUkFOQ0hfT1BDT0RFX1gxID0gNSwKKyAgQllURVhfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gMiwKKyAgQllURVhfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gMiwKKyAgQlpUX0JSQU5DSF9PUENPREVfWDEgPSAxLAorICBCWl9CUkFOQ0hfT1BDT0RFX1gxID0gMCwKKyAgQlpfT1BDT0RFX1NOID0gNTYsCisgIENMWl9VTl8wX1NIVU5fMF9PUENPREVfWDAgPSAzLAorICBDTFpfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gMywKKyAgQ1JDMzJfMzJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDksCisgIENSQzMyXzhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEwLAorICBDVFpfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gNCwKKyAgQ1RaX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDQsCisgIERSQUlOX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDEsCisgIERUTEJQUl9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAyLAorICBEV09SRF9BTElHTl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOTUsCisgIEZJTlZfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMywKKyAgRkxVU0hfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gNCwKKyAgRk5PUF9OT1JFR19SUl9JTU1fMF9PUENPREVfU04gPSAzLAorICBGTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDUsCisgIEZOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gNSwKKyAgRk5PUF9VTl8wX1NIVU5fMF9PUENPREVfWTAgPSA1LAorICBGTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9ZMSA9IDEsCisgIEhBTFRfTk9SRUdfUlJfSU1NXzBfT1BDT0RFX1NOID0gMCwKKyAgSUNPSF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSA2LAorICBJTExfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gNywKKyAgSUxMX1VOXzBfU0hVTl8wX09QQ09ERV9ZMSA9IDIsCisgIElNTV8wX09QQ09ERV9TTiA9IDAsCisgIElNTV8wX09QQ09ERV9YMCA9IDQsCisgIElNTV8wX09QQ09ERV9YMSA9IDYsCisgIElNTV8xX09QQ09ERV9TTiA9IDEsCisgIElNTV9PUENPREVfMF9YMCA9IDUsCisgIElOVEhCX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxMSwKKyAgSU5USEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDUsCisgIElOVEhIX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxMiwKKyAgSU5USEhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDYsCisgIElOVExCX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxMywKKyAgSU5UTEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDcsCisgIElOVExIX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxNCwKKyAgSU5UTEhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDgsCisgIElOVl9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSA4LAorICBJUkVUX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDksCisgIEpBTEJfT1BDT0RFX1gxID0gMTMsCisgIEpBTEZfT1BDT0RFX1gxID0gMTIsCisgIEpBTFJQX1NQRUNJQUxfMF9PUENPREVfWDEgPSA5LAorICBKQUxSUl9JTU1fMV9PUENPREVfU04gPSAzLAorICBKQUxSX1JSX0lNTV8wX09QQ09ERV9TTiA9IDUsCisgIEpBTFJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDEwLAorICBKQl9PUENPREVfWDEgPSAxMSwKKyAgSkZfT1BDT0RFX1gxID0gMTAsCisgIEpSUF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTEsCisgIEpSUl9JTU1fMV9PUENPREVfU04gPSAyLAorICBKUl9SUl9JTU1fMF9PUENPREVfU04gPSA0LAorICBKUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTIsCisgIExCQUREX0lNTV8wX09QQ09ERV9YMSA9IDIyLAorICBMQkFERF9VX0lNTV8wX09QQ09ERV9YMSA9IDIzLAorICBMQl9PUENPREVfWTIgPSAwLAorICBMQl9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxMCwKKyAgTEJfVV9PUENPREVfWTIgPSAxLAorICBMQl9VX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDExLAorICBMSEFERF9JTU1fMF9PUENPREVfWDEgPSAyNCwKKyAgTEhBRERfVV9JTU1fMF9PUENPREVfWDEgPSAyNSwKKyAgTEhfT1BDT0RFX1kyID0gMiwKKyAgTEhfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTIsCisgIExIX1VfT1BDT0RFX1kyID0gMywKKyAgTEhfVV9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxMywKKyAgTE5LX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxMywKKyAgTFdBRERfSU1NXzBfT1BDT0RFX1gxID0gMjYsCisgIExXQUREX05BX0lNTV8wX09QQ09ERV9YMSA9IDI3LAorICBMV19OQV9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAyNCwKKyAgTFdfT1BDT0RFX1kyID0gNCwKKyAgTFdfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTQsCisgIE1BWEJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTUsCisgIE1BWEJfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTQsCisgIE1BWEhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDE2LAorICBNQVhIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxNSwKKyAgTUFYSUJfVV9JTU1fMF9PUENPREVfWDAgPSA0LAorICBNQVhJQl9VX0lNTV8wX09QQ09ERV9YMSA9IDUsCisgIE1BWElIX0lNTV8wX09QQ09ERV9YMCA9IDUsCisgIE1BWElIX0lNTV8wX09QQ09ERV9YMSA9IDYsCisgIE1GU1BSX0lNTV8wX09QQ09ERV9YMSA9IDcsCisgIE1GX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDE1LAorICBNSU5CX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDE3LAorICBNSU5CX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDE2LAorICBNSU5IX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxOCwKKyAgTUlOSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTcsCisgIE1JTklCX1VfSU1NXzBfT1BDT0RFX1gwID0gNiwKKyAgTUlOSUJfVV9JTU1fMF9PUENPREVfWDEgPSA4LAorICBNSU5JSF9JTU1fMF9PUENPREVfWDAgPSA3LAorICBNSU5JSF9JTU1fMF9PUENPREVfWDEgPSA5LAorICBNTV9PUENPREVfWDAgPSA2LAorICBNTV9PUENPREVfWDEgPSA3LAorICBNTlpCX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxOSwKKyAgTU5aQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTgsCisgIE1OWkhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDIwLAorICBNTlpIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxOSwKKyAgTU5aX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyMSwKKyAgTU5aX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyMCwKKyAgTU5aX1NQRUNJQUxfMV9PUENPREVfWTAgPSAwLAorICBNTlpfU1BFQ0lBTF8xX09QQ09ERV9ZMSA9IDEsCisgIE1PVkVJX0lNTV8xX09QQ09ERV9TTiA9IDAsCisgIE1PVkVfUlJfSU1NXzBfT1BDT0RFX1NOID0gOCwKKyAgTVRTUFJfSU1NXzBfT1BDT0RFX1gxID0gMTAsCisgIE1VTEhIQV9TU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjIsCisgIE1VTEhIQV9TU19TUEVDSUFMXzdfT1BDT0RFX1kwID0gMCwKKyAgTVVMSEhBX1NVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyMywKKyAgTVVMSEhBX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyNCwKKyAgTVVMSEhBX1VVX1NQRUNJQUxfN19PUENPREVfWTAgPSAxLAorICBNVUxISFNBX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyNSwKKyAgTVVMSEhfU1NfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDI2LAorICBNVUxISF9TU19TUEVDSUFMXzZfT1BDT0RFX1kwID0gMCwKKyAgTVVMSEhfU1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDI3LAorICBNVUxISF9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjgsCisgIE1VTEhIX1VVX1NQRUNJQUxfNl9PUENPREVfWTAgPSAxLAorICBNVUxITEFfU1NfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDI5LAorICBNVUxITEFfU1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDMwLAorICBNVUxITEFfVVNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDMxLAorICBNVUxITEFfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDMyLAorICBNVUxITFNBX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAzMywKKyAgTVVMSExTQV9VVV9TUEVDSUFMXzVfT1BDT0RFX1kwID0gMCwKKyAgTVVMSExfU1NfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDM0LAorICBNVUxITF9TVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzUsCisgIE1VTEhMX1VTX1NQRUNJQUxfMF9PUENPREVfWDAgPSAzNiwKKyAgTVVMSExfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDM3LAorICBNVUxMTEFfU1NfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDM4LAorICBNVUxMTEFfU1NfU1BFQ0lBTF83X09QQ09ERV9ZMCA9IDIsCisgIE1VTExMQV9TVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzksCisgIE1VTExMQV9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDAsCisgIE1VTExMQV9VVV9TUEVDSUFMXzdfT1BDT0RFX1kwID0gMywKKyAgTVVMTExTQV9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDEsCisgIE1VTExMX1NTX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0MiwKKyAgTVVMTExfU1NfU1BFQ0lBTF82X09QQ09ERV9ZMCA9IDIsCisgIE1VTExMX1NVX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0MywKKyAgTVVMTExfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQ0LAorICBNVUxMTF9VVV9TUEVDSUFMXzZfT1BDT0RFX1kwID0gMywKKyAgTVZOWl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDUsCisgIE1WTlpfU1BFQ0lBTF8xX09QQ09ERV9ZMCA9IDEsCisgIE1WWl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDYsCisgIE1WWl9TUEVDSUFMXzFfT1BDT0RFX1kwID0gMiwKKyAgTVpCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0NywKKyAgTVpCX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyMSwKKyAgTVpIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0OCwKKyAgTVpIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyMiwKKyAgTVpfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQ5LAorICBNWl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMjMsCisgIE1aX1NQRUNJQUxfMV9PUENPREVfWTAgPSAzLAorICBNWl9TUEVDSUFMXzFfT1BDT0RFX1kxID0gMiwKKyAgTkFQX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDE2LAorICBOT1BfTk9SRUdfUlJfSU1NXzBfT1BDT0RFX1NOID0gMiwKKyAgTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDYsCisgIE5PUF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxNywKKyAgTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDYsCisgIE5PUF9VTl8wX1NIVU5fMF9PUENPREVfWTEgPSAzLAorICBOT1JFR19SUl9JTU1fMF9PUENPREVfU04gPSAwLAorICBOT1JfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDUwLAorICBOT1JfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDI0LAorICBOT1JfU1BFQ0lBTF8yX09QQ09ERV9ZMCA9IDEsCisgIE5PUl9TUEVDSUFMXzJfT1BDT0RFX1kxID0gMSwKKyAgT1JJX0lNTV8wX09QQ09ERV9YMCA9IDgsCisgIE9SSV9JTU1fMF9PUENPREVfWDEgPSAxMSwKKyAgT1JJX09QQ09ERV9ZMCA9IDExLAorICBPUklfT1BDT0RFX1kxID0gOSwKKyAgT1JfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDUxLAorICBPUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMjUsCisgIE9SX1NQRUNJQUxfMl9PUENPREVfWTAgPSAyLAorICBPUl9TUEVDSUFMXzJfT1BDT0RFX1kxID0gMiwKKyAgUEFDS0JTX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEwMywKKyAgUEFDS0JTX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDczLAorICBQQUNLSEJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDUyLAorICBQQUNLSEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDI2LAorICBQQUNLSFNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEwMiwKKyAgUEFDS0hTX1NQRUNJQUxfMF9PUENPREVfWDEgPSA3MiwKKyAgUEFDS0xCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1MywKKyAgUEFDS0xCX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyNywKKyAgUENOVF9VTl8wX1NIVU5fMF9PUENPREVfWDAgPSA3LAorICBQQ05UX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDcsCisgIFJMSV9TSFVOXzBfT1BDT0RFX1gwID0gMSwKKyAgUkxJX1NIVU5fMF9PUENPREVfWDEgPSAxLAorICBSTElfU0hVTl8wX09QQ09ERV9ZMCA9IDEsCisgIFJMSV9TSFVOXzBfT1BDT0RFX1kxID0gMSwKKyAgUkxfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDU0LAorICBSTF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMjgsCisgIFJMX1NQRUNJQUxfM19PUENPREVfWTAgPSAwLAorICBSTF9TUEVDSUFMXzNfT1BDT0RFX1kxID0gMCwKKyAgUlJfSU1NXzBfT1BDT0RFX1NOID0gMCwKKyAgUzFBX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1NSwKKyAgUzFBX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyOSwKKyAgUzFBX1NQRUNJQUxfMF9PUENPREVfWTAgPSAxLAorICBTMUFfU1BFQ0lBTF8wX09QQ09ERV9ZMSA9IDEsCisgIFMyQV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTYsCisgIFMyQV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzAsCisgIFMyQV9TUEVDSUFMXzBfT1BDT0RFX1kwID0gMiwKKyAgUzJBX1NQRUNJQUxfMF9PUENPREVfWTEgPSAyLAorICBTM0FfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDU3LAorICBTM0FfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDMxLAorICBTM0FfU1BFQ0lBTF81X09QQ09ERV9ZMCA9IDEsCisgIFMzQV9TUEVDSUFMXzVfT1BDT0RFX1kxID0gMSwKKyAgU0FEQUJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTgsCisgIFNBREFIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1OSwKKyAgU0FEQUhfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjAsCisgIFNBREJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjEsCisgIFNBREhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDYyLAorICBTQURIX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDYzLAorICBTQkFERF9JTU1fMF9PUENPREVfWDEgPSAyOCwKKyAgU0JfT1BDT0RFX1kyID0gNSwKKyAgU0JfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDMyLAorICBTRVFCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2NCwKKyAgU0VRQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzMsCisgIFNFUUhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDY1LAorICBTRVFIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzNCwKKyAgU0VRSUJfSU1NXzBfT1BDT0RFX1gwID0gOSwKKyAgU0VRSUJfSU1NXzBfT1BDT0RFX1gxID0gMTIsCisgIFNFUUlIX0lNTV8wX09QQ09ERV9YMCA9IDEwLAorICBTRVFJSF9JTU1fMF9PUENPREVfWDEgPSAxMywKKyAgU0VRSV9JTU1fMF9PUENPREVfWDAgPSAxMSwKKyAgU0VRSV9JTU1fMF9PUENPREVfWDEgPSAxNCwKKyAgU0VRSV9PUENPREVfWTAgPSAxMiwKKyAgU0VRSV9PUENPREVfWTEgPSAxMCwKKyAgU0VRX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2NiwKKyAgU0VRX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzNSwKKyAgU0VRX1NQRUNJQUxfNV9PUENPREVfWTAgPSAyLAorICBTRVFfU1BFQ0lBTF81X09QQ09ERV9ZMSA9IDIsCisgIFNIQUREX0lNTV8wX09QQ09ERV9YMSA9IDI5LAorICBTSEw4SUlfSU1NXzBfT1BDT0RFX1NOID0gMywKKyAgU0hMQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjcsCisgIFNITEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDM2LAorICBTSExIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2OCwKKyAgU0hMSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzcsCisgIFNITElCX1NIVU5fMF9PUENPREVfWDAgPSAyLAorICBTSExJQl9TSFVOXzBfT1BDT0RFX1gxID0gMiwKKyAgU0hMSUhfU0hVTl8wX09QQ09ERV9YMCA9IDMsCisgIFNITElIX1NIVU5fMF9PUENPREVfWDEgPSAzLAorICBTSExJX1NIVU5fMF9PUENPREVfWDAgPSA0LAorICBTSExJX1NIVU5fMF9PUENPREVfWDEgPSA0LAorICBTSExJX1NIVU5fMF9PUENPREVfWTAgPSAyLAorICBTSExJX1NIVU5fMF9PUENPREVfWTEgPSAyLAorICBTSExfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDY5LAorICBTSExfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDM4LAorICBTSExfU1BFQ0lBTF8zX09QQ09ERV9ZMCA9IDEsCisgIFNITF9TUEVDSUFMXzNfT1BDT0RFX1kxID0gMSwKKyAgU0hSMV9SUl9JTU1fMF9PUENPREVfU04gPSA5LAorICBTSFJCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA3MCwKKyAgU0hSQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzksCisgIFNIUkhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDcxLAorICBTSFJIX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0MCwKKyAgU0hSSUJfU0hVTl8wX09QQ09ERV9YMCA9IDUsCisgIFNIUklCX1NIVU5fMF9PUENPREVfWDEgPSA1LAorICBTSFJJSF9TSFVOXzBfT1BDT0RFX1gwID0gNiwKKyAgU0hSSUhfU0hVTl8wX09QQ09ERV9YMSA9IDYsCisgIFNIUklfU0hVTl8wX09QQ09ERV9YMCA9IDcsCisgIFNIUklfU0hVTl8wX09QQ09ERV9YMSA9IDcsCisgIFNIUklfU0hVTl8wX09QQ09ERV9ZMCA9IDMsCisgIFNIUklfU0hVTl8wX09QQ09ERV9ZMSA9IDMsCisgIFNIUl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzIsCisgIFNIUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNDEsCisgIFNIUl9TUEVDSUFMXzNfT1BDT0RFX1kwID0gMiwKKyAgU0hSX1NQRUNJQUxfM19PUENPREVfWTEgPSAyLAorICBTSFVOXzBfT1BDT0RFX1gwID0gNywKKyAgU0hVTl8wX09QQ09ERV9YMSA9IDgsCisgIFNIVU5fMF9PUENPREVfWTAgPSAxMywKKyAgU0hVTl8wX09QQ09ERV9ZMSA9IDExLAorICBTSF9PUENPREVfWTIgPSA2LAorICBTSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNDIsCisgIFNMVEJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDczLAorICBTTFRCX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0MywKKyAgU0xUQl9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA3NCwKKyAgU0xUQl9VX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0NCwKKyAgU0xURUJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDc1LAorICBTTFRFQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNDUsCisgIFNMVEVCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDc2LAorICBTTFRFQl9VX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0NiwKKyAgU0xURUhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDc3LAorICBTTFRFSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNDcsCisgIFNMVEVIX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDc4LAorICBTTFRFSF9VX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0OCwKKyAgU0xURV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzksCisgIFNMVEVfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQ5LAorICBTTFRFX1NQRUNJQUxfNF9PUENPREVfWTAgPSAwLAorICBTTFRFX1NQRUNJQUxfNF9PUENPREVfWTEgPSAwLAorICBTTFRFX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDgwLAorICBTTFRFX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDUwLAorICBTTFRFX1VfU1BFQ0lBTF80X09QQ09ERV9ZMCA9IDEsCisgIFNMVEVfVV9TUEVDSUFMXzRfT1BDT0RFX1kxID0gMSwKKyAgU0xUSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODEsCisgIFNMVEhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDUxLAorICBTTFRIX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDgyLAorICBTTFRIX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDUyLAorICBTTFRJQl9JTU1fMF9PUENPREVfWDAgPSAxMiwKKyAgU0xUSUJfSU1NXzBfT1BDT0RFX1gxID0gMTUsCisgIFNMVElCX1VfSU1NXzBfT1BDT0RFX1gwID0gMTMsCisgIFNMVElCX1VfSU1NXzBfT1BDT0RFX1gxID0gMTYsCisgIFNMVElIX0lNTV8wX09QQ09ERV9YMCA9IDE0LAorICBTTFRJSF9JTU1fMF9PUENPREVfWDEgPSAxNywKKyAgU0xUSUhfVV9JTU1fMF9PUENPREVfWDAgPSAxNSwKKyAgU0xUSUhfVV9JTU1fMF9PUENPREVfWDEgPSAxOCwKKyAgU0xUSV9JTU1fMF9PUENPREVfWDAgPSAxNiwKKyAgU0xUSV9JTU1fMF9PUENPREVfWDEgPSAxOSwKKyAgU0xUSV9PUENPREVfWTAgPSAxNCwKKyAgU0xUSV9PUENPREVfWTEgPSAxMiwKKyAgU0xUSV9VX0lNTV8wX09QQ09ERV9YMCA9IDE3LAorICBTTFRJX1VfSU1NXzBfT1BDT0RFX1gxID0gMjAsCisgIFNMVElfVV9PUENPREVfWTAgPSAxNSwKKyAgU0xUSV9VX09QQ09ERV9ZMSA9IDEzLAorICBTTFRfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDgzLAorICBTTFRfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDUzLAorICBTTFRfU1BFQ0lBTF80X09QQ09ERV9ZMCA9IDIsCisgIFNMVF9TUEVDSUFMXzRfT1BDT0RFX1kxID0gMiwKKyAgU0xUX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDg0LAorICBTTFRfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTQsCisgIFNMVF9VX1NQRUNJQUxfNF9PUENPREVfWTAgPSAzLAorICBTTFRfVV9TUEVDSUFMXzRfT1BDT0RFX1kxID0gMywKKyAgU05FQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODUsCisgIFNORUJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDU1LAorICBTTkVIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4NiwKKyAgU05FSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTYsCisgIFNORV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODcsCisgIFNORV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTcsCisgIFNORV9TUEVDSUFMXzVfT1BDT0RFX1kwID0gMywKKyAgU05FX1NQRUNJQUxfNV9PUENPREVfWTEgPSAzLAorICBTUEVDSUFMXzBfT1BDT0RFX1gwID0gMCwKKyAgU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDEsCisgIFNQRUNJQUxfMF9PUENPREVfWTAgPSAxLAorICBTUEVDSUFMXzBfT1BDT0RFX1kxID0gMSwKKyAgU1BFQ0lBTF8xX09QQ09ERV9ZMCA9IDIsCisgIFNQRUNJQUxfMV9PUENPREVfWTEgPSAyLAorICBTUEVDSUFMXzJfT1BDT0RFX1kwID0gMywKKyAgU1BFQ0lBTF8yX09QQ09ERV9ZMSA9IDMsCisgIFNQRUNJQUxfM19PUENPREVfWTAgPSA0LAorICBTUEVDSUFMXzNfT1BDT0RFX1kxID0gNCwKKyAgU1BFQ0lBTF80X09QQ09ERV9ZMCA9IDUsCisgIFNQRUNJQUxfNF9PUENPREVfWTEgPSA1LAorICBTUEVDSUFMXzVfT1BDT0RFX1kwID0gNiwKKyAgU1BFQ0lBTF81X09QQ09ERV9ZMSA9IDYsCisgIFNQRUNJQUxfNl9PUENPREVfWTAgPSA3LAorICBTUEVDSUFMXzdfT1BDT0RFX1kwID0gOCwKKyAgU1JBQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODgsCisgIFNSQUJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDU4LAorICBTUkFIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4OSwKKyAgU1JBSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTksCisgIFNSQUlCX1NIVU5fMF9PUENPREVfWDAgPSA4LAorICBTUkFJQl9TSFVOXzBfT1BDT0RFX1gxID0gOCwKKyAgU1JBSUhfU0hVTl8wX09QQ09ERV9YMCA9IDksCisgIFNSQUlIX1NIVU5fMF9PUENPREVfWDEgPSA5LAorICBTUkFJX1NIVU5fMF9PUENPREVfWDAgPSAxMCwKKyAgU1JBSV9TSFVOXzBfT1BDT0RFX1gxID0gMTAsCisgIFNSQUlfU0hVTl8wX09QQ09ERV9ZMCA9IDQsCisgIFNSQUlfU0hVTl8wX09QQ09ERV9ZMSA9IDQsCisgIFNSQV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOTAsCisgIFNSQV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjAsCisgIFNSQV9TUEVDSUFMXzNfT1BDT0RFX1kwID0gMywKKyAgU1JBX1NQRUNJQUxfM19PUENPREVfWTEgPSAzLAorICBTVUJCU19VX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxMDAsCisgIFNVQkJTX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDcwLAorICBTVUJCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5MSwKKyAgU1VCQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjEsCisgIFNVQkhTX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxMDEsCisgIFNVQkhTX1NQRUNJQUxfMF9PUENPREVfWDEgPSA3MSwKKyAgU1VCSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOTIsCisgIFNVQkhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDYyLAorICBTVUJTX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5NywKKyAgU1VCU19TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjcsCisgIFNVQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOTMsCisgIFNVQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjMsCisgIFNVQl9TUEVDSUFMXzBfT1BDT0RFX1kwID0gMywKKyAgU1VCX1NQRUNJQUxfMF9PUENPREVfWTEgPSAzLAorICBTV0FERF9JTU1fMF9PUENPREVfWDEgPSAzMCwKKyAgU1dJTlQwX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDE4LAorICBTV0lOVDFfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTksCisgIFNXSU5UMl9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAyMCwKKyAgU1dJTlQzX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDIxLAorICBTV19PUENPREVfWTIgPSA3LAorICBTV19TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjQsCisgIFRCTElEWEIwX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDgsCisgIFRCTElEWEIwX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDgsCisgIFRCTElEWEIxX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDksCisgIFRCTElEWEIxX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDksCisgIFRCTElEWEIyX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDEwLAorICBUQkxJRFhCMl9VTl8wX1NIVU5fMF9PUENPREVfWTAgPSAxMCwKKyAgVEJMSURYQjNfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gMTEsCisgIFRCTElEWEIzX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDExLAorICBUTlNfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMjIsCisgIFVOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDExLAorICBVTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxMSwKKyAgVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gNSwKKyAgVU5fMF9TSFVOXzBfT1BDT0RFX1kxID0gNSwKKyAgV0g2NF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAyMywKKyAgWE9SSV9JTU1fMF9PUENPREVfWDAgPSAyLAorICBYT1JJX0lNTV8wX09QQ09ERV9YMSA9IDIxLAorICBYT1JfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDk0LAorICBYT1JfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDY1LAorICBYT1JfU1BFQ0lBTF8yX09QQ09ERV9ZMCA9IDMsCisgIFhPUl9TUEVDSUFMXzJfT1BDT0RFX1kxID0gMworfTsKKworI2VuZGlmIC8qICFfVElMRV9PUENPREVfQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9vcGNvZGVfY29uc3RhbnRzXzY0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlX2NvbnN0YW50c182NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyN2QwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vb3Bjb2RlX2NvbnN0YW50c182NC5oCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBtYWNoaW5lLWdlbmVyYXRlZDsgRE8gTk9UIEVESVQhICovCisKKworI2lmbmRlZiBfVElMRV9PUENPREVfQ09OU1RBTlRTX0gKKyNkZWZpbmUgX1RJTEVfT1BDT0RFX0NPTlNUQU5UU19ICitlbnVtCit7CisgIEFEREJTX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDk4LAorICBBRERCU19VX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2OCwKKyAgQUREQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMSwKKyAgQUREQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMSwKKyAgQURESFNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDk5LAorICBBRERIU19TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjksCisgIEFEREhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDIsCisgIEFEREhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDIsCisgIEFERElCX0lNTV8wX09QQ09ERV9YMCA9IDEsCisgIEFERElCX0lNTV8wX09QQ09ERV9YMSA9IDEsCisgIEFERElIX0lNTV8wX09QQ09ERV9YMCA9IDIsCisgIEFERElIX0lNTV8wX09QQ09ERV9YMSA9IDIsCisgIEFERElfSU1NXzBfT1BDT0RFX1gwID0gMywKKyAgQURESV9JTU1fMF9PUENPREVfWDEgPSAzLAorICBBRERJX0lNTV8xX09QQ09ERV9TTiA9IDEsCisgIEFERElfT1BDT0RFX1kwID0gOSwKKyAgQURESV9PUENPREVfWTEgPSA3LAorICBBRERMSVNfT1BDT0RFX1gwID0gMSwKKyAgQURETElTX09QQ09ERV9YMSA9IDIsCisgIEFERExJX09QQ09ERV9YMCA9IDIsCisgIEFERExJX09QQ09ERV9YMSA9IDMsCisgIEFERFNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDk2LAorICBBRERTX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2NiwKKyAgQUREX1NQRUNJQUxfMF9PUENPREVfWDAgPSAzLAorICBBRERfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDMsCisgIEFERF9TUEVDSUFMXzBfT1BDT0RFX1kwID0gMCwKKyAgQUREX1NQRUNJQUxfMF9PUENPREVfWTEgPSAwLAorICBBRElGRkJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNCwKKyAgQURJRkZIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1LAorICBBTkRJX0lNTV8wX09QQ09ERV9YMCA9IDEsCisgIEFORElfSU1NXzBfT1BDT0RFX1gxID0gNCwKKyAgQU5ESV9PUENPREVfWTAgPSAxMCwKKyAgQU5ESV9PUENPREVfWTEgPSA4LAorICBBTkRfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDYsCisgIEFORF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNCwKKyAgQU5EX1NQRUNJQUxfMl9PUENPREVfWTAgPSAwLAorICBBTkRfU1BFQ0lBTF8yX09QQ09ERV9ZMSA9IDAsCisgIEFVTElfT1BDT0RFX1gwID0gMywKKyAgQVVMSV9PUENPREVfWDEgPSA0LAorICBBVkdCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDcsCisgIEFWR0hfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDgsCisgIEJCTlNUX0JSQU5DSF9PUENPREVfWDEgPSAxNSwKKyAgQkJOU19CUkFOQ0hfT1BDT0RFX1gxID0gMTQsCisgIEJCTlNfT1BDT0RFX1NOID0gNjMsCisgIEJCU1RfQlJBTkNIX09QQ09ERV9YMSA9IDEzLAorICBCQlNfQlJBTkNIX09QQ09ERV9YMSA9IDEyLAorICBCQlNfT1BDT0RFX1NOID0gNjIsCisgIEJHRVpUX0JSQU5DSF9PUENPREVfWDEgPSA3LAorICBCR0VaX0JSQU5DSF9PUENPREVfWDEgPSA2LAorICBCR0VaX09QQ09ERV9TTiA9IDYxLAorICBCR1pUX0JSQU5DSF9PUENPREVfWDEgPSA1LAorICBCR1pfQlJBTkNIX09QQ09ERV9YMSA9IDQsCisgIEJHWl9PUENPREVfU04gPSA1OCwKKyAgQklUWF9VTl8wX1NIVU5fMF9PUENPREVfWDAgPSAxLAorICBCSVRYX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDEsCisgIEJMRVpUX0JSQU5DSF9PUENPREVfWDEgPSAxMSwKKyAgQkxFWl9CUkFOQ0hfT1BDT0RFX1gxID0gMTAsCisgIEJMRVpfT1BDT0RFX1NOID0gNTksCisgIEJMWlRfQlJBTkNIX09QQ09ERV9YMSA9IDksCisgIEJMWl9CUkFOQ0hfT1BDT0RFX1gxID0gOCwKKyAgQkxaX09QQ09ERV9TTiA9IDYwLAorICBCTlpUX0JSQU5DSF9PUENPREVfWDEgPSAzLAorICBCTlpfQlJBTkNIX09QQ09ERV9YMSA9IDIsCisgIEJOWl9PUENPREVfU04gPSA1NywKKyAgQlBUX05PUkVHX1JSX0lNTV8wX09QQ09ERV9TTiA9IDEsCisgIEJSQU5DSF9PUENPREVfWDEgPSA1LAorICBCWVRFWF9VTl8wX1NIVU5fMF9PUENPREVfWDAgPSAyLAorICBCWVRFWF9VTl8wX1NIVU5fMF9PUENPREVfWTAgPSAyLAorICBCWlRfQlJBTkNIX09QQ09ERV9YMSA9IDEsCisgIEJaX0JSQU5DSF9PUENPREVfWDEgPSAwLAorICBCWl9PUENPREVfU04gPSA1NiwKKyAgQ0xaX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDMsCisgIENMWl9VTl8wX1NIVU5fMF9PUENPREVfWTAgPSAzLAorICBDUkMzMl8zMl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOSwKKyAgQ1JDMzJfOF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTAsCisgIENUWl9VTl8wX1NIVU5fMF9PUENPREVfWDAgPSA0LAorICBDVFpfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gNCwKKyAgRFJBSU5fVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMSwKKyAgRFRMQlBSX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDIsCisgIERXT1JEX0FMSUdOX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5NSwKKyAgRklOVl9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAzLAorICBGTFVTSF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSA0LAorICBGTk9QX05PUkVHX1JSX0lNTV8wX09QQ09ERV9TTiA9IDMsCisgIEZOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gNSwKKyAgRk5PUF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSA1LAorICBGTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDUsCisgIEZOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1kxID0gMSwKKyAgSEFMVF9OT1JFR19SUl9JTU1fMF9PUENPREVfU04gPSAwLAorICBJQ09IX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDYsCisgIElMTF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSA3LAorICBJTExfVU5fMF9TSFVOXzBfT1BDT0RFX1kxID0gMiwKKyAgSU1NXzBfT1BDT0RFX1NOID0gMCwKKyAgSU1NXzBfT1BDT0RFX1gwID0gNCwKKyAgSU1NXzBfT1BDT0RFX1gxID0gNiwKKyAgSU1NXzFfT1BDT0RFX1NOID0gMSwKKyAgSU1NX09QQ09ERV8wX1gwID0gNSwKKyAgSU5USEJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDExLAorICBJTlRIQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNSwKKyAgSU5USEhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEyLAorICBJTlRISF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNiwKKyAgSU5UTEJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEzLAorICBJTlRMQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNywKKyAgSU5UTEhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDE0LAorICBJTlRMSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gOCwKKyAgSU5WX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDgsCisgIElSRVRfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gOSwKKyAgSkFMQl9PUENPREVfWDEgPSAxMywKKyAgSkFMRl9PUENPREVfWDEgPSAxMiwKKyAgSkFMUlBfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDksCisgIEpBTFJSX0lNTV8xX09QQ09ERV9TTiA9IDMsCisgIEpBTFJfUlJfSU1NXzBfT1BDT0RFX1NOID0gNSwKKyAgSkFMUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTAsCisgIEpCX09QQ09ERV9YMSA9IDExLAorICBKRl9PUENPREVfWDEgPSAxMCwKKyAgSlJQX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxMSwKKyAgSlJSX0lNTV8xX09QQ09ERV9TTiA9IDIsCisgIEpSX1JSX0lNTV8wX09QQ09ERV9TTiA9IDQsCisgIEpSX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxMiwKKyAgTEJBRERfSU1NXzBfT1BDT0RFX1gxID0gMjIsCisgIExCQUREX1VfSU1NXzBfT1BDT0RFX1gxID0gMjMsCisgIExCX09QQ09ERV9ZMiA9IDAsCisgIExCX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDEwLAorICBMQl9VX09QQ09ERV9ZMiA9IDEsCisgIExCX1VfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTEsCisgIExIQUREX0lNTV8wX09QQ09ERV9YMSA9IDI0LAorICBMSEFERF9VX0lNTV8wX09QQ09ERV9YMSA9IDI1LAorICBMSF9PUENPREVfWTIgPSAyLAorICBMSF9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxMiwKKyAgTEhfVV9PUENPREVfWTIgPSAzLAorICBMSF9VX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDEzLAorICBMTktfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDEzLAorICBMV0FERF9JTU1fMF9PUENPREVfWDEgPSAyNiwKKyAgTFdBRERfTkFfSU1NXzBfT1BDT0RFX1gxID0gMjcsCisgIExXX05BX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDI0LAorICBMV19PUENPREVfWTIgPSA0LAorICBMV19VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxNCwKKyAgTUFYQl9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSAxNSwKKyAgTUFYQl9VX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxNCwKKyAgTUFYSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTYsCisgIE1BWEhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDE1LAorICBNQVhJQl9VX0lNTV8wX09QQ09ERV9YMCA9IDQsCisgIE1BWElCX1VfSU1NXzBfT1BDT0RFX1gxID0gNSwKKyAgTUFYSUhfSU1NXzBfT1BDT0RFX1gwID0gNSwKKyAgTUFYSUhfSU1NXzBfT1BDT0RFX1gxID0gNiwKKyAgTUZTUFJfSU1NXzBfT1BDT0RFX1gxID0gNywKKyAgTUZfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTUsCisgIE1JTkJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTcsCisgIE1JTkJfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMTYsCisgIE1JTkhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDE4LAorICBNSU5IX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxNywKKyAgTUlOSUJfVV9JTU1fMF9PUENPREVfWDAgPSA2LAorICBNSU5JQl9VX0lNTV8wX09QQ09ERV9YMSA9IDgsCisgIE1JTklIX0lNTV8wX09QQ09ERV9YMCA9IDcsCisgIE1JTklIX0lNTV8wX09QQ09ERV9YMSA9IDksCisgIE1NX09QQ09ERV9YMCA9IDYsCisgIE1NX09QQ09ERV9YMSA9IDcsCisgIE1OWkJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDE5LAorICBNTlpCX1NQRUNJQUxfMF9PUENPREVfWDEgPSAxOCwKKyAgTU5aSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjAsCisgIE1OWkhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDE5LAorICBNTlpfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDIxLAorICBNTlpfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDIwLAorICBNTlpfU1BFQ0lBTF8xX09QQ09ERV9ZMCA9IDAsCisgIE1OWl9TUEVDSUFMXzFfT1BDT0RFX1kxID0gMSwKKyAgTU9WRUlfSU1NXzFfT1BDT0RFX1NOID0gMCwKKyAgTU9WRV9SUl9JTU1fMF9PUENPREVfU04gPSA4LAorICBNVFNQUl9JTU1fMF9PUENPREVfWDEgPSAxMCwKKyAgTVVMSEhBX1NTX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyMiwKKyAgTVVMSEhBX1NTX1NQRUNJQUxfN19PUENPREVfWTAgPSAwLAorICBNVUxISEFfU1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDIzLAorICBNVUxISEFfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDI0LAorICBNVUxISEFfVVVfU1BFQ0lBTF83X09QQ09ERV9ZMCA9IDEsCisgIE1VTEhIU0FfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDI1LAorICBNVUxISF9TU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjYsCisgIE1VTEhIX1NTX1NQRUNJQUxfNl9PUENPREVfWTAgPSAwLAorICBNVUxISF9TVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjcsCisgIE1VTEhIX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAyOCwKKyAgTVVMSEhfVVVfU1BFQ0lBTF82X09QQ09ERV9ZMCA9IDEsCisgIE1VTEhMQV9TU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMjksCisgIE1VTEhMQV9TVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzAsCisgIE1VTEhMQV9VU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzEsCisgIE1VTEhMQV9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzIsCisgIE1VTEhMU0FfVVVfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDMzLAorICBNVUxITFNBX1VVX1NQRUNJQUxfNV9PUENPREVfWTAgPSAwLAorICBNVUxITF9TU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzQsCisgIE1VTEhMX1NVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAzNSwKKyAgTVVMSExfVVNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDM2LAorICBNVUxITF9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzcsCisgIE1VTExMQV9TU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMzgsCisgIE1VTExMQV9TU19TUEVDSUFMXzdfT1BDT0RFX1kwID0gMiwKKyAgTVVMTExBX1NVX1NQRUNJQUxfMF9PUENPREVfWDAgPSAzOSwKKyAgTVVMTExBX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0MCwKKyAgTVVMTExBX1VVX1NQRUNJQUxfN19PUENPREVfWTAgPSAzLAorICBNVUxMTFNBX1VVX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0MSwKKyAgTVVMTExfU1NfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQyLAorICBNVUxMTF9TU19TUEVDSUFMXzZfT1BDT0RFX1kwID0gMiwKKyAgTVVMTExfU1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQzLAorICBNVUxMTF9VVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDQsCisgIE1VTExMX1VVX1NQRUNJQUxfNl9PUENPREVfWTAgPSAzLAorICBNVk5aX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0NSwKKyAgTVZOWl9TUEVDSUFMXzFfT1BDT0RFX1kwID0gMSwKKyAgTVZaX1NQRUNJQUxfMF9PUENPREVfWDAgPSA0NiwKKyAgTVZaX1NQRUNJQUxfMV9PUENPREVfWTAgPSAyLAorICBNWkJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQ3LAorICBNWkJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDIxLAorICBNWkhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDQ4LAorICBNWkhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDIyLAorICBNWl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNDksCisgIE1aX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyMywKKyAgTVpfU1BFQ0lBTF8xX09QQ09ERV9ZMCA9IDMsCisgIE1aX1NQRUNJQUxfMV9PUENPREVfWTEgPSAyLAorICBOQVBfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTYsCisgIE5PUF9OT1JFR19SUl9JTU1fMF9PUENPREVfU04gPSAyLAorICBOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gNiwKKyAgTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDE3LAorICBOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gNiwKKyAgTk9QX1VOXzBfU0hVTl8wX09QQ09ERV9ZMSA9IDMsCisgIE5PUkVHX1JSX0lNTV8wX09QQ09ERV9TTiA9IDAsCisgIE5PUl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTAsCisgIE5PUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMjQsCisgIE5PUl9TUEVDSUFMXzJfT1BDT0RFX1kwID0gMSwKKyAgTk9SX1NQRUNJQUxfMl9PUENPREVfWTEgPSAxLAorICBPUklfSU1NXzBfT1BDT0RFX1gwID0gOCwKKyAgT1JJX0lNTV8wX09QQ09ERV9YMSA9IDExLAorICBPUklfT1BDT0RFX1kwID0gMTEsCisgIE9SSV9PUENPREVfWTEgPSA5LAorICBPUl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTEsCisgIE9SX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyNSwKKyAgT1JfU1BFQ0lBTF8yX09QQ09ERV9ZMCA9IDIsCisgIE9SX1NQRUNJQUxfMl9PUENPREVfWTEgPSAyLAorICBQQUNLQlNfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTAzLAorICBQQUNLQlNfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNzMsCisgIFBBQ0tIQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTIsCisgIFBBQ0tIQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMjYsCisgIFBBQ0tIU19TUEVDSUFMXzBfT1BDT0RFX1gwID0gMTAyLAorICBQQUNLSFNfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDcyLAorICBQQUNLTEJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDUzLAorICBQQUNLTEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDI3LAorICBQQ05UX1VOXzBfU0hVTl8wX09QQ09ERV9YMCA9IDcsCisgIFBDTlRfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gNywKKyAgUkxJX1NIVU5fMF9PUENPREVfWDAgPSAxLAorICBSTElfU0hVTl8wX09QQ09ERV9YMSA9IDEsCisgIFJMSV9TSFVOXzBfT1BDT0RFX1kwID0gMSwKKyAgUkxJX1NIVU5fMF9PUENPREVfWTEgPSAxLAorICBSTF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTQsCisgIFJMX1NQRUNJQUxfMF9PUENPREVfWDEgPSAyOCwKKyAgUkxfU1BFQ0lBTF8zX09QQ09ERV9ZMCA9IDAsCisgIFJMX1NQRUNJQUxfM19PUENPREVfWTEgPSAwLAorICBSUl9JTU1fMF9PUENPREVfU04gPSAwLAorICBTMUFfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDU1LAorICBTMUFfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDI5LAorICBTMUFfU1BFQ0lBTF8wX09QQ09ERV9ZMCA9IDEsCisgIFMxQV9TUEVDSUFMXzBfT1BDT0RFX1kxID0gMSwKKyAgUzJBX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1NiwKKyAgUzJBX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzMCwKKyAgUzJBX1NQRUNJQUxfMF9PUENPREVfWTAgPSAyLAorICBTMkFfU1BFQ0lBTF8wX09QQ09ERV9ZMSA9IDIsCisgIFMzQV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNTcsCisgIFMzQV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzEsCisgIFMzQV9TUEVDSUFMXzVfT1BDT0RFX1kwID0gMSwKKyAgUzNBX1NQRUNJQUxfNV9PUENPREVfWTEgPSAxLAorICBTQURBQl9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA1OCwKKyAgU0FEQUhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDU5LAorICBTQURBSF9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2MCwKKyAgU0FEQl9VX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2MSwKKyAgU0FESF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjIsCisgIFNBREhfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjMsCisgIFNCQUREX0lNTV8wX09QQ09ERV9YMSA9IDI4LAorICBTQl9PUENPREVfWTIgPSA1LAorICBTQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzIsCisgIFNFUUJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDY0LAorICBTRVFCX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzMywKKyAgU0VRSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjUsCisgIFNFUUhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDM0LAorICBTRVFJQl9JTU1fMF9PUENPREVfWDAgPSA5LAorICBTRVFJQl9JTU1fMF9PUENPREVfWDEgPSAxMiwKKyAgU0VRSUhfSU1NXzBfT1BDT0RFX1gwID0gMTAsCisgIFNFUUlIX0lNTV8wX09QQ09ERV9YMSA9IDEzLAorICBTRVFJX0lNTV8wX09QQ09ERV9YMCA9IDExLAorICBTRVFJX0lNTV8wX09QQ09ERV9YMSA9IDE0LAorICBTRVFJX09QQ09ERV9ZMCA9IDEyLAorICBTRVFJX09QQ09ERV9ZMSA9IDEwLAorICBTRVFfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDY2LAorICBTRVFfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDM1LAorICBTRVFfU1BFQ0lBTF81X09QQ09ERV9ZMCA9IDIsCisgIFNFUV9TUEVDSUFMXzVfT1BDT0RFX1kxID0gMiwKKyAgU0hBRERfSU1NXzBfT1BDT0RFX1gxID0gMjksCisgIFNITDhJSV9JTU1fMF9PUENPREVfU04gPSAzLAorICBTSExCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA2NywKKyAgU0hMQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzYsCisgIFNITEhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDY4LAorICBTSExIX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzNywKKyAgU0hMSUJfU0hVTl8wX09QQ09ERV9YMCA9IDIsCisgIFNITElCX1NIVU5fMF9PUENPREVfWDEgPSAyLAorICBTSExJSF9TSFVOXzBfT1BDT0RFX1gwID0gMywKKyAgU0hMSUhfU0hVTl8wX09QQ09ERV9YMSA9IDMsCisgIFNITElfU0hVTl8wX09QQ09ERV9YMCA9IDQsCisgIFNITElfU0hVTl8wX09QQ09ERV9YMSA9IDQsCisgIFNITElfU0hVTl8wX09QQ09ERV9ZMCA9IDIsCisgIFNITElfU0hVTl8wX09QQ09ERV9ZMSA9IDIsCisgIFNITF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNjksCisgIFNITF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gMzgsCisgIFNITF9TUEVDSUFMXzNfT1BDT0RFX1kwID0gMSwKKyAgU0hMX1NQRUNJQUxfM19PUENPREVfWTEgPSAxLAorICBTSFIxX1JSX0lNTV8wX09QQ09ERV9TTiA9IDksCisgIFNIUkJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDcwLAorICBTSFJCX1NQRUNJQUxfMF9PUENPREVfWDEgPSAzOSwKKyAgU0hSSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzEsCisgIFNIUkhfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQwLAorICBTSFJJQl9TSFVOXzBfT1BDT0RFX1gwID0gNSwKKyAgU0hSSUJfU0hVTl8wX09QQ09ERV9YMSA9IDUsCisgIFNIUklIX1NIVU5fMF9PUENPREVfWDAgPSA2LAorICBTSFJJSF9TSFVOXzBfT1BDT0RFX1gxID0gNiwKKyAgU0hSSV9TSFVOXzBfT1BDT0RFX1gwID0gNywKKyAgU0hSSV9TSFVOXzBfT1BDT0RFX1gxID0gNywKKyAgU0hSSV9TSFVOXzBfT1BDT0RFX1kwID0gMywKKyAgU0hSSV9TSFVOXzBfT1BDT0RFX1kxID0gMywKKyAgU0hSX1NQRUNJQUxfMF9PUENPREVfWDAgPSA3MiwKKyAgU0hSX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0MSwKKyAgU0hSX1NQRUNJQUxfM19PUENPREVfWTAgPSAyLAorICBTSFJfU1BFQ0lBTF8zX09QQ09ERV9ZMSA9IDIsCisgIFNIVU5fMF9PUENPREVfWDAgPSA3LAorICBTSFVOXzBfT1BDT0RFX1gxID0gOCwKKyAgU0hVTl8wX09QQ09ERV9ZMCA9IDEzLAorICBTSFVOXzBfT1BDT0RFX1kxID0gMTEsCisgIFNIX09QQ09ERV9ZMiA9IDYsCisgIFNIX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0MiwKKyAgU0xUQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzMsCisgIFNMVEJfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQzLAorICBTTFRCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDc0LAorICBTTFRCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQ0LAorICBTTFRFQl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzUsCisgIFNMVEVCX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0NSwKKyAgU0xURUJfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzYsCisgIFNMVEVCX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQ2LAorICBTTFRFSF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzcsCisgIFNMVEVIX1NQRUNJQUxfMF9PUENPREVfWDEgPSA0NywKKyAgU0xURUhfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gNzgsCisgIFNMVEVIX1VfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDQ4LAorICBTTFRFX1NQRUNJQUxfMF9PUENPREVfWDAgPSA3OSwKKyAgU0xURV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNDksCisgIFNMVEVfU1BFQ0lBTF80X09QQ09ERV9ZMCA9IDAsCisgIFNMVEVfU1BFQ0lBTF80X09QQ09ERV9ZMSA9IDAsCisgIFNMVEVfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODAsCisgIFNMVEVfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTAsCisgIFNMVEVfVV9TUEVDSUFMXzRfT1BDT0RFX1kwID0gMSwKKyAgU0xURV9VX1NQRUNJQUxfNF9PUENPREVfWTEgPSAxLAorICBTTFRIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4MSwKKyAgU0xUSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTEsCisgIFNMVEhfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODIsCisgIFNMVEhfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTIsCisgIFNMVElCX0lNTV8wX09QQ09ERV9YMCA9IDEyLAorICBTTFRJQl9JTU1fMF9PUENPREVfWDEgPSAxNSwKKyAgU0xUSUJfVV9JTU1fMF9PUENPREVfWDAgPSAxMywKKyAgU0xUSUJfVV9JTU1fMF9PUENPREVfWDEgPSAxNiwKKyAgU0xUSUhfSU1NXzBfT1BDT0RFX1gwID0gMTQsCisgIFNMVElIX0lNTV8wX09QQ09ERV9YMSA9IDE3LAorICBTTFRJSF9VX0lNTV8wX09QQ09ERV9YMCA9IDE1LAorICBTTFRJSF9VX0lNTV8wX09QQ09ERV9YMSA9IDE4LAorICBTTFRJX0lNTV8wX09QQ09ERV9YMCA9IDE2LAorICBTTFRJX0lNTV8wX09QQ09ERV9YMSA9IDE5LAorICBTTFRJX09QQ09ERV9ZMCA9IDE0LAorICBTTFRJX09QQ09ERV9ZMSA9IDEyLAorICBTTFRJX1VfSU1NXzBfT1BDT0RFX1gwID0gMTcsCisgIFNMVElfVV9JTU1fMF9PUENPREVfWDEgPSAyMCwKKyAgU0xUSV9VX09QQ09ERV9ZMCA9IDE1LAorICBTTFRJX1VfT1BDT0RFX1kxID0gMTMsCisgIFNMVF9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODMsCisgIFNMVF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTMsCisgIFNMVF9TUEVDSUFMXzRfT1BDT0RFX1kwID0gMiwKKyAgU0xUX1NQRUNJQUxfNF9PUENPREVfWTEgPSAyLAorICBTTFRfVV9TUEVDSUFMXzBfT1BDT0RFX1gwID0gODQsCisgIFNMVF9VX1NQRUNJQUxfMF9PUENPREVfWDEgPSA1NCwKKyAgU0xUX1VfU1BFQ0lBTF80X09QQ09ERV9ZMCA9IDMsCisgIFNMVF9VX1NQRUNJQUxfNF9PUENPREVfWTEgPSAzLAorICBTTkVCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4NSwKKyAgU05FQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTUsCisgIFNORUhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDg2LAorICBTTkVIX1NQRUNJQUxfMF9PUENPREVfWDEgPSA1NiwKKyAgU05FX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4NywKKyAgU05FX1NQRUNJQUxfMF9PUENPREVfWDEgPSA1NywKKyAgU05FX1NQRUNJQUxfNV9PUENPREVfWTAgPSAzLAorICBTTkVfU1BFQ0lBTF81X09QQ09ERV9ZMSA9IDMsCisgIFNQRUNJQUxfMF9PUENPREVfWDAgPSAwLAorICBTUEVDSUFMXzBfT1BDT0RFX1gxID0gMSwKKyAgU1BFQ0lBTF8wX09QQ09ERV9ZMCA9IDEsCisgIFNQRUNJQUxfMF9PUENPREVfWTEgPSAxLAorICBTUEVDSUFMXzFfT1BDT0RFX1kwID0gMiwKKyAgU1BFQ0lBTF8xX09QQ09ERV9ZMSA9IDIsCisgIFNQRUNJQUxfMl9PUENPREVfWTAgPSAzLAorICBTUEVDSUFMXzJfT1BDT0RFX1kxID0gMywKKyAgU1BFQ0lBTF8zX09QQ09ERV9ZMCA9IDQsCisgIFNQRUNJQUxfM19PUENPREVfWTEgPSA0LAorICBTUEVDSUFMXzRfT1BDT0RFX1kwID0gNSwKKyAgU1BFQ0lBTF80X09QQ09ERV9ZMSA9IDUsCisgIFNQRUNJQUxfNV9PUENPREVfWTAgPSA2LAorICBTUEVDSUFMXzVfT1BDT0RFX1kxID0gNiwKKyAgU1BFQ0lBTF82X09QQ09ERV9ZMCA9IDcsCisgIFNQRUNJQUxfN19PUENPREVfWTAgPSA4LAorICBTUkFCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA4OCwKKyAgU1JBQl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNTgsCisgIFNSQUhfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDg5LAorICBTUkFIX1NQRUNJQUxfMF9PUENPREVfWDEgPSA1OSwKKyAgU1JBSUJfU0hVTl8wX09QQ09ERV9YMCA9IDgsCisgIFNSQUlCX1NIVU5fMF9PUENPREVfWDEgPSA4LAorICBTUkFJSF9TSFVOXzBfT1BDT0RFX1gwID0gOSwKKyAgU1JBSUhfU0hVTl8wX09QQ09ERV9YMSA9IDksCisgIFNSQUlfU0hVTl8wX09QQ09ERV9YMCA9IDEwLAorICBTUkFJX1NIVU5fMF9PUENPREVfWDEgPSAxMCwKKyAgU1JBSV9TSFVOXzBfT1BDT0RFX1kwID0gNCwKKyAgU1JBSV9TSFVOXzBfT1BDT0RFX1kxID0gNCwKKyAgU1JBX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5MCwKKyAgU1JBX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2MCwKKyAgU1JBX1NQRUNJQUxfM19PUENPREVfWTAgPSAzLAorICBTUkFfU1BFQ0lBTF8zX09QQ09ERV9ZMSA9IDMsCisgIFNVQkJTX1VfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEwMCwKKyAgU1VCQlNfVV9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNzAsCisgIFNVQkJfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDkxLAorICBTVUJCX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2MSwKKyAgU1VCSFNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDEwMSwKKyAgU1VCSFNfU1BFQ0lBTF8wX09QQ09ERV9YMSA9IDcxLAorICBTVUJIX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5MiwKKyAgU1VCSF9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjIsCisgIFNVQlNfU1BFQ0lBTF8wX09QQ09ERV9YMCA9IDk3LAorICBTVUJTX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2NywKKyAgU1VCX1NQRUNJQUxfMF9PUENPREVfWDAgPSA5MywKKyAgU1VCX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2MywKKyAgU1VCX1NQRUNJQUxfMF9PUENPREVfWTAgPSAzLAorICBTVUJfU1BFQ0lBTF8wX09QQ09ERV9ZMSA9IDMsCisgIFNXQUREX0lNTV8wX09QQ09ERV9YMSA9IDMwLAorICBTV0lOVDBfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMTgsCisgIFNXSU5UMV9VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAxOSwKKyAgU1dJTlQyX1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDIwLAorICBTV0lOVDNfVU5fMF9TSFVOXzBfT1BDT0RFX1gxID0gMjEsCisgIFNXX09QQ09ERV9ZMiA9IDcsCisgIFNXX1NQRUNJQUxfMF9PUENPREVfWDEgPSA2NCwKKyAgVEJMSURYQjBfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gOCwKKyAgVEJMSURYQjBfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gOCwKKyAgVEJMSURYQjFfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gOSwKKyAgVEJMSURYQjFfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gOSwKKyAgVEJMSURYQjJfVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gMTAsCisgIFRCTElEWEIyX1VOXzBfU0hVTl8wX09QQ09ERV9ZMCA9IDEwLAorICBUQkxJRFhCM19VTl8wX1NIVU5fMF9PUENPREVfWDAgPSAxMSwKKyAgVEJMSURYQjNfVU5fMF9TSFVOXzBfT1BDT0RFX1kwID0gMTEsCisgIFROU19VTl8wX1NIVU5fMF9PUENPREVfWDEgPSAyMiwKKyAgVU5fMF9TSFVOXzBfT1BDT0RFX1gwID0gMTEsCisgIFVOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDExLAorICBVTl8wX1NIVU5fMF9PUENPREVfWTAgPSA1LAorICBVTl8wX1NIVU5fMF9PUENPREVfWTEgPSA1LAorICBXSDY0X1VOXzBfU0hVTl8wX09QQ09ERV9YMSA9IDIzLAorICBYT1JJX0lNTV8wX09QQ09ERV9YMCA9IDIsCisgIFhPUklfSU1NXzBfT1BDT0RFX1gxID0gMjEsCisgIFhPUl9TUEVDSUFMXzBfT1BDT0RFX1gwID0gOTQsCisgIFhPUl9TUEVDSUFMXzBfT1BDT0RFX1gxID0gNjUsCisgIFhPUl9TUEVDSUFMXzJfT1BDT0RFX1kwID0gMywKKyAgWE9SX1NQRUNJQUxfMl9PUENPREVfWTEgPSAzCit9OworCisjZW5kaWYgLyogIV9USUxFX09QQ09ERV9DT05TVEFOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5NGE5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfUEFHRV9ICisjZGVmaW5lIF9BU01fVElMRV9QQUdFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKKy8qIFBBR0VfU0hJRlQgYW5kIEhQQUdFX1NISUZUIGRldGVybWluZSB0aGUgcGFnZSBzaXplcy4gKi8KKyNkZWZpbmUgUEFHRV9TSElGVAkxNgorI2RlZmluZSBIUEFHRV9TSElGVAkyNAorCisjZGVmaW5lIFBBR0VfU0laRQkoX0FDKDEsIFVMKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBIUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IEhQQUdFX1NISUZUKQorCisjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUgLSAxKSkKKyNkZWZpbmUgSFBBR0VfTUFTSwkofihIUEFHRV9TSVpFIC0gMSkpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qCisgKiBUaGUgeyxIfVBBR0VfU0hJRlQgdmFsdWVzIG11c3QgbWF0Y2ggdGhlIEhWX0xPRzJfUEFHRV9TSVpFX3h4eAorICogZGVmaW5pdGlvbnMgaW4gPGh2L2h5cGVydmlzb3IuaD4uICBXZSB2YWxpZGF0ZSB0aGlzIGF0IGJ1aWxkIHRpbWUKKyAqIGhlcmUsIGFuZCBhZ2FpbiBhdCBydW50aW1lIGR1cmluZyBlYXJseSBib290LiAgV2UgcHJvdmlkZSBhCisgKiBzZXBhcmF0ZSBkZWZpbml0aW9uIHNpbmNlIHVzZXJzcGFjZSBkb2Vzbid0IGhhdmUgPGh2L2h5cGVydmlzb3IuaD4uCisgKgorICogQmUgY2FyZWZ1bCB0byBkaXN0aW5ndWlzaCBQQUdFX1NISUZUIGZyb20gSFZfUFRFX0lOREVYX1BGTiwgc2luY2UKKyAqIHRoZXkgYXJlIHRoZSBzYW1lIG9uIGkzODYgYnV0IG5vdCBUSUxFLgorICovCisjaWYgSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwgIT0gUEFHRV9TSElGVAorIyBlcnJvciBTbWFsbCBwYWdlIHNpemUgbWlzbWF0Y2ggaW4gTGludXgKKyNlbmRpZgorI2lmIEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFICE9IEhQQUdFX1NISUZUCisjIGVycm9yIEh1Z2UgcGFnZSBzaXplIG1pc21hdGNoIGluIExpbnV4CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKK3N0cnVjdCBwYWdlOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZSh2b2lkICpwYWdlKQoreworCW1lbXNldChwYWdlLCAwLCBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQoreworCW1lbWNweSh0bywgZnJvbSwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCXN0cnVjdCBwYWdlICpwZykKK3sKKwljbGVhcl9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCQkJc3RydWN0IHBhZ2UgKnRvcGFnZSkKK3sKKwljb3B5X3BhZ2UodG8sIGZyb20pOworfQorCisvKgorICogSHlwZXJ2aXNvciBwYWdlIHRhYmxlcyBhcmUgbWFkZSBvZiB0aGUgc2FtZSBiYXNpYyBzdHJ1Y3R1cmUuCisgKi8KKwordHlwZWRlZiBfX3U2NCBwdGV2YWxfdDsKK3R5cGVkZWYgX191NjQgcG1kdmFsX3Q7Cit0eXBlZGVmIF9fdTY0IHB1ZHZhbF90OwordHlwZWRlZiBfX3U2NCBwZ2R2YWxfdDsKK3R5cGVkZWYgX191NjQgcGdwcm90dmFsX3Q7CisKK3R5cGVkZWYgSFZfUFRFIHB0ZV90OwordHlwZWRlZiBIVl9QVEUgcGdkX3Q7Cit0eXBlZGVmIEhWX1BURSBwZ3Byb3RfdDsKKworLyoKKyAqIFVzZXIgTDIgcGFnZSB0YWJsZXMgYXJlIG1hbmFnZWQgYXMgb25lIEwyIHBhZ2UgdGFibGUgcGVyIHBhZ2UsCisgKiBiZWNhdXNlIHdlIHVzZSB0aGUgcGFnZSBhbGxvY2F0b3IgZm9yIHRoZW0uICBUaGlzIGtlZXBzIHRoZSBhbGxvY2F0aW9uCisgKiBzaW1wbGUgYW5kIG1ha2VzIGl0IHBvdGVudGlhbGx5IHVzZWZ1bCB0byBpbXBsZW1lbnQgSElHSFBURSBhdCBzb21lIHBvaW50LgorICogSG93ZXZlciwgaXQncyBhbHNvIGluZWZmaWNpZW50LCBzaW5jZSBMMiBwYWdlIHRhYmxlcyBhcmUgbXVjaCBzbWFsbGVyCisgKiB0aGFuIHBhZ2VzIChjdXJyZW50bHkgMktCIHZzIDY0S0IpLiAgU28gd2Ugc2hvdWxkIHJldmlzaXQgdGhpcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGFnZSAqcGd0YWJsZV90OworCisvKiBNdXN0IGJlIGEgbWFjcm8gc2luY2UgaXQgaXMgdXNlZCB0byBjcmVhdGUgY29uc3RhbnRzLiAqLworI2RlZmluZSBfX3BncHJvdCh2YWwpIGh2X3B0ZSh2YWwpCisKK3N0YXRpYyBpbmxpbmUgdTY0IHBncHJvdF92YWwocGdwcm90X3QgcGdwcm90KQoreworCXJldHVybiBodl9wdGVfdmFsKHBncHJvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHB0ZV92YWwocHRlX3QgcHRlKQoreworCXJldHVybiBodl9wdGVfdmFsKHB0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHBnZF92YWwocGdkX3QgcGdkKQoreworCXJldHVybiBodl9wdGVfdmFsKHBnZCk7Cit9CisKKyNpZmRlZiBfX3RpbGVneF9fCisKK3R5cGVkZWYgSFZfUFRFIHBtZF90OworCitzdGF0aWMgaW5saW5lIHU2NCBwbWRfdmFsKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gaHZfcHRlX3ZhbChwbWQpOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCkKKworI2RlZmluZSBIVUdFX01BWF9IU1RBVEUJCTIKKworI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKyNkZWZpbmUgSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQQorI2VuZGlmCisKKy8qIEVhY2ggbWVtb3J5IGNvbnRyb2xsZXIgaGFzIFBBcyBkaXN0aW5jdCBpbiB0aGVpciBoaWdoIGJpdHMuICovCisjZGVmaW5lIE5SX1BBX0hJR0hCSVRfU0hJRlQgKENISVBfUEFfV0lEVEgoKSAtIENISVBfTE9HX05VTV9NU0hJTVMoKSkKKyNkZWZpbmUgTlJfUEFfSElHSEJJVF9WQUxVRVMgKDEgPDwgQ0hJUF9MT0dfTlVNX01TSElNUygpKQorI2RlZmluZSBfX3BhX3RvX2hpZ2hiaXRzKHBhKSAoKHBoeXNfYWRkcl90KShwYSkgPj4gTlJfUEFfSElHSEJJVF9TSElGVCkKKyNkZWZpbmUgX19wZm5fdG9faGlnaGJpdHMocGZuKSAoKHBmbikgPj4gKE5SX1BBX0hJR0hCSVRfU0hJRlQgLSBQQUdFX1NISUZUKSkKKworI2lmZGVmIF9fdGlsZWd4X18KKworLyoKKyAqIFdlIHJlc2VydmUgdGhlIGxvd2VyIGhhbGYgb2YgbWVtb3J5IGZvciB1c2VyLXNwYWNlIHByb2dyYW1zLCBhbmQgdGhlCisgKiB1cHBlciBoYWxmIGZvciBzeXN0ZW0gY29kZS4gIFdlIHJlLW1hcCBhbGwgb2YgcGh5c2ljYWwgbWVtb3J5IGluIHRoZQorICogdXBwZXIgaGFsZiwgd2hpY2ggdGFrZXMgYSBxdWFydGVyIG9mIG91ciBWQSBzcGFjZS4gIFRoZW4gd2UgaGF2ZQorICogdGhlIHZtYWxsb2MgcmVnaW9ucy4gIFRoZSBzdXBlcnZpc29yIGNvZGUgbGl2ZXMgYXQgMHhmZmZmZmZmNzAwMDAwMDAwLAorICogd2l0aCB0aGUgaHlwZXJ2aXNvciBhYm92ZSB0aGF0LgorICoKKyAqIExvYWRhYmxlIGtlcm5lbCBtb2R1bGVzIGFyZSBwbGFjZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHN0YXRpYworICogc3VwZXJ2aXNvciBjb2RlLCB3aXRoIGVhY2ggYmVpbmcgYWxsb2NhdGVkIGEgMjU2TUIgcmVnaW9uIG9mCisgKiBhZGRyZXNzIHNwYWNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSByYW5nZSBvZiAiamFsIgorICogYW5kIG90aGVyIGJyYW5jaCBpbnN0cnVjdGlvbnMuCisgKgorICogRm9yIG5vdyB3ZSBrZWVwIGxpZmUgc2ltcGxlIGFuZCBqdXN0IGFsbG9jYXRlIG9uZSBwbWQgKDRHQikgZm9yIHZtYWxsb2MuCisgKiBTaW1pbGFybHksIGZvciBub3cgd2UgZG9uJ3QgcGxheSBhbnkgc3RydWN0IHBhZ2UgbWFwcGluZyBnYW1lcy4KKyAqLworCisjaWYgQ0hJUF9QQV9XSURUSCgpICsgMiA+IENISVBfVkFfV0lEVEgoKQorIyBlcnJvciBUb28gbXVjaCBQQSB0byBtYXAgd2l0aCB0aGUgVkEgYXZhaWxhYmxlIQorI2VuZGlmCisjZGVmaW5lIEhBTEZfVkFfU1BBQ0UgICAgICAgICAgIChfQUMoMSwgVUwpIDw8IChDSElQX1ZBX1dJRFRIKCkgLSAxKSkKKworI2RlZmluZSBNRU1fTE9XX0VORAkJKEhBTEZfVkFfU1BBQ0UgLSAxKSAgICAgICAgIC8qIGxvdyBoYWxmICovCisjZGVmaW5lIE1FTV9ISUdIX1NUQVJUCQkoLUhBTEZfVkFfU1BBQ0UpICAgICAgICAgICAgLyogaGlnaCBoYWxmICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQlNRU1fSElHSF9TVEFSVAorI2RlZmluZSBfVk1BTExPQ19TVEFSVAkJX0FDKDB4ZmZmZmZmZjUwMDAwMDAwMCwgVUwpIC8qIDQgR0IgKi8KKyNkZWZpbmUgSFVHRV9WTUFQX0JBU0UJCV9BQygweGZmZmZmZmY2MDAwMDAwMDAsIFVMKSAvKiA0IEdCICovCisjZGVmaW5lIE1FTV9TVl9TVEFSVAkJX0FDKDB4ZmZmZmZmZjcwMDAwMDAwMCwgVUwpIC8qIDI1NiBNQiAqLworI2RlZmluZSBNRU1fU1ZfSU5UUlBUCQlNRU1fU1ZfU1RBUlQKKyNkZWZpbmUgTUVNX01PRFVMRV9TVEFSVAlfQUMoMHhmZmZmZmZmNzEwMDAwMDAwLCBVTCkgLyogMjU2IE1CICovCisjZGVmaW5lIE1FTV9NT0RVTEVfRU5ECQkoTUVNX01PRFVMRV9TVEFSVCArICgyNTYqMTAyNCoxMDI0KSkKKyNkZWZpbmUgTUVNX0hWX1NUQVJUCQlfQUMoMHhmZmZmZmZmODAwMDAwMDAwLCBVTCkgLyogMzIgR0IgKi8KKworLyogSGlnaGVzdCBEVExCIGFkZHJlc3Mgd2Ugd2lsbCB1c2UgKi8KKyNkZWZpbmUgS0VSTkVMX0hJR0hfVkFERFIJTUVNX1NWX1NUQVJUCisKKy8qIFNpbmNlIHdlIGRvbid0IGN1cnJlbnRseSBwcm92aWRlIGFueSBmaXhtYXBzLCB3ZSB1c2UgYW4gaW1wb3NzaWJsZSBWQS4gKi8KKyNkZWZpbmUgRklYQUREUl9UT1AgICAgICAgICAgICAgTUVNX0hWX1NUQVJUCisKKyNlbHNlIC8qICFfX3RpbGVneF9fICovCisKKy8qCisgKiBBIFBBR0VfT0ZGU0VUIG9mIDB4QzAwMDAwMDAgbWVhbnMgdGhhdCB0aGUga2VybmVsIGhhcworICogYSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2Ugb2Ygb25lIGdpZ2FieXRlLCB3aGljaCBsaW1pdHMgdGhlCisgKiBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5IHlvdSBjYW4gdXNlIHRvIGFib3V0IDc2OE1CLgorICogSWYgeW91IHdhbnQgbW9yZSBwaHlzaWNhbCBtZW1vcnkgdGhhbiB0aGlzIHRoZW4gc2VlIHRoZSBDT05GSUdfSElHSE1FTQorICogb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGUgdG9wIHR3byAxNk1CIGNodW5rcyBpbiB0aGUgdGFibGUgYmVsb3cgKFZJUlQgYW5kIEhWKSBhcmUKKyAqIHVuYXZhaWxhYmxlIHRvIExpbnV4LiAgU2luY2UgdGhlIGtlcm5lbCBpbnRlcnJ1cHQgdmVjdG9ycyBtdXN0IGxpdmUKKyAqIGF0IDB4ZmQwMDAwMDAsIHdlIG1hcCBhbGwgb2YgdGhlIGJvdHRvbSBvZiBSQU0gYXQgdGhpcyBhZGRyZXNzIHdpdGgKKyAqIGEgaHVnZSBwYWdlIHRhYmxlIGVudHJ5IHRvIG1pbmltaXplIGl0cyBJVExCIGZvb3RwcmludCAoYXMgd2VsbCBhcworICogYXQgUEFHRV9PRkZTRVQpLiAgVGhlIGxhc3QgYXJjaGl0ZWN0ZWQgcmVxdWlyZW1lbnQgaXMgdGhhdCB1c2VyCisgKiBpbnRlcnJ1cHQgdmVjdG9ycyBsaXZlIGF0IDB4ZmMwMDAwMDAsIHNvIHdlIG1ha2UgdGhhdCByYW5nZSBvZgorICogbWVtb3J5IGF2YWlsYWJsZSB0byB1c2VyIHByb2Nlc3Nlcy4gIFRoZSByZW1haW5pbmcgcmVnaW9ucyBhcmUgc2l6ZWQKKyAqIGFzIHNob3duOyBhZnRlciB0aGUgZmlyc3QgZm91ciBhZGRyZXNzZXMsIHdlIHNob3cgInR5cGljYWwiIHZhbHVlcywKKyAqIHNpbmNlIHRoZSBhY3R1YWwgYWRkcmVzc2VzIGRlcGVuZCBvbiBrZXJuZWwgI2RlZmluZXMuCisgKgorICogTUVNX1ZJUlRfSU5UUlBUICAgICAgICAgICAgICAgICAweGZmMDAwMDAwCisgKiBNRU1fSFZfSU5UUlBUICAgICAgICAgICAgICAgICAgIDB4ZmUwMDAwMDAKKyAqIE1FTV9TVl9JTlRSUFQgKGtlcm5lbCBjb2RlKSAgICAgMHhmZDAwMDAwMAorICogTUVNX1VTRVJfSU5UUlBUICh1c2VyIHZlY3RvcikgICAweGZjMDAwMDAwCisgKiBGSVhfS01BUF94eHggICAgICAgICAgICAgICAgICAgIDB4ZjgwMDAwMDAgKHZpYSBOUl9DUFVTICogS01fVFlQRV9OUikKKyAqIFBLTUFQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgMHhmNzAwMDAwMCAodmlhIExBU1RfUEtNQVApCisgKiBIVUdFX1ZNQVAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjMwMDAwMDAgKHZpYSBDT05GSUdfTlJfSFVHRV9WTUFQUykKKyAqIFZNQUxMT0NfU1RBUlQgICAgICAgICAgICAgICAgICAgMHhmMDAwMDAwMCAodmlhIF9fVk1BTExPQ19SRVNFUlZFKQorICogbWFwcGVkIExPV01FTSAgICAgICAgICAgICAgICAgICAweGMwMDAwMDAwCisgKi8KKworI2RlZmluZSBNRU1fVVNFUl9JTlRSUFQJCV9BQygweGZjMDAwMDAwLCBVTCkKKyNkZWZpbmUgTUVNX1NWX0lOVFJQVAkJX0FDKDB4ZmQwMDAwMDAsIFVMKQorI2RlZmluZSBNRU1fSFZfSU5UUlBUCQlfQUMoMHhmZTAwMDAwMCwgVUwpCisjZGVmaW5lIE1FTV9WSVJUX0lOVFJQVAkJX0FDKDB4ZmYwMDAwMDAsIFVMKQorCisjZGVmaW5lIElOVFJQVF9TSVpFCQkweDQwMDAKKworLyogVG9sZXJhdGUgcGFnZSBzaXplIGxhcmdlciB0aGFuIHRoZSBhcmNoaXRlY3R1cmUgaW50ZXJydXB0IHJlZ2lvbiBzaXplLiAqLworI2lmIFBBR0VfU0laRSA+IElOVFJQVF9TSVpFCisjdW5kZWYgSU5UUlBUX1NJWkUKKyNkZWZpbmUgSU5UUlBUX1NJWkUgUEFHRV9TSVpFCisjZW5kaWYKKworI2RlZmluZSBLRVJORUxfSElHSF9WQUREUglNRU1fVVNFUl9JTlRSUFQKKyNkZWZpbmUgRklYQUREUl9UT1AJCShLRVJORUxfSElHSF9WQUREUiAtIFBBR0VfU0laRSkKKworI2RlZmluZSBQQUdFX09GRlNFVAkJX0FDKENPTkZJR19QQUdFX09GRlNFVCwgVUwpCisKKy8qIE9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzIHdlIG1peCBrZXJuZWwgbW9kdWxlcyBpbiB3aXRoIG90aGVyIHZtYXBzLiAqLworI2RlZmluZSBNRU1fTU9EVUxFX1NUQVJUCVZNQUxMT0NfU1RBUlQKKyNkZWZpbmUgTUVNX01PRFVMRV9FTkQJCVZNQUxMT0NfRU5ECisKKyNlbmRpZiAvKiBfX3RpbGVneF9fICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCisvKiBNYXAga2VybmVsIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHBhZ2UgZnJhbWVzLCBpbiBIUEFHRV9TSVpFIGNodW5rcy4gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHBiYXNlX21hcFtdOworZXh0ZXJuIHZvaWQgKnZiYXNlX21hcFtdOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2FkZHJfdG9fcGZuKGNvbnN0IHZvbGF0aWxlIHZvaWQgKl9rYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGthZGRyID0gKHVuc2lnbmVkIGxvbmcpX2thZGRyOworCXJldHVybiBwYmFzZV9tYXBba2FkZHIgPj4gSFBBR0VfU0hJRlRdICsKKwkJKChrYWRkciAmIChIUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnBmbl90b19rYWRkcih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gdmJhc2VfbWFwW19fcGZuX3RvX2hpZ2hiaXRzKHBmbildICsgKHBmbiA8PCBQQUdFX1NISUZUKTsKK30KKworc3RhdGljIGlubGluZSBwaHlzX2FkZHJfdCB2aXJ0X3RvX3BoeXMoY29uc3Qgdm9sYXRpbGUgdm9pZCAqa2FkZHIpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBrYWRkcl90b19wZm4oa2FkZHIpOworCXJldHVybiAoKHBoeXNfYWRkcl90KXBmbiA8PCBQQUdFX1NISUZUKSArCisJCSgodW5zaWduZWQgbG9uZylrYWRkciAmIChQQUdFX1NJWkUtMSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnBoeXNfdG9fdmlydChwaHlzX2FkZHJfdCBwYWRkcikKK3sKKwlyZXR1cm4gcGZuX3RvX2thZGRyKHBhZGRyID4+IFBBR0VfU0hJRlQpICsgKHBhZGRyICYgKFBBR0VfU0laRS0xKSk7Cit9CisKKy8qIFdpdGggSElHSE1FTSwgd2UgcGFjayBQQUdFX09GRlNFVCB0aHJvdWdoIGhpZ2hfbWVtb3J5IHdpdGggYWxsIHZhbGlkIFZBcy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZpcnRfYWRkcl92YWxpZChjb25zdCB2b2xhdGlsZSB2b2lkICprYWRkcikKK3sKKwlleHRlcm4gdm9pZCAqaGlnaF9tZW1vcnk7ICAvKiBjb3BpZWQgZnJvbSA8bGludXgvbW0uaD4gKi8KKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWthZGRyID49IFBBR0VfT0ZGU0VUICYmIGthZGRyIDwgaGlnaF9tZW1vcnkpOworfQorCisjZWxzZSAvKiAhQ09ORklHX0hJR0hNRU0gKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGthZGRyX3RvX3Bmbihjb25zdCB2b2xhdGlsZSB2b2lkICprYWRkcikKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWthZGRyIC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGZuX3RvX2thZGRyKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybiAodm9pZCAqKSgocGZuIDw8IFBBR0VfU0hJRlQpICsgUEFHRV9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IHZpcnRfdG9fcGh5cyhjb25zdCB2b2xhdGlsZSB2b2lkICprYWRkcikKK3sKKwlyZXR1cm4gKHBoeXNfYWRkcl90KSgodW5zaWduZWQgbG9uZylrYWRkciAtIFBBR0VfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpwaHlzX3RvX3ZpcnQocGh5c19hZGRyX3QgcGFkZHIpCit7CisJcmV0dXJuICh2b2lkICopKCh1bnNpZ25lZCBsb25nKXBhZGRyICsgUEFHRV9PRkZTRVQpOworfQorCisvKiBDaGVjayB0aGF0IHRoZSBnaXZlbiBhZGRyZXNzIGlzIHdpdGhpbiBzb21lIG1hcHBlZCByYW5nZSBvZiBQQXMuICovCisjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikgcGZuX3ZhbGlkKGthZGRyX3RvX3BmbihrYWRkcikpCisKKyNlbmRpZiAvKiAhQ09ORklHX0hJR0hNRU0gKi8KKworLyogQWxsIGNhbGxlcnMgYXJlIG5vdCBjb25zaXN0ZW50IGluIGhvdyB0aGV5IGNhbGwgdGhlc2UgZnVuY3Rpb25zLiAqLworI2RlZmluZSBfX3BhKGthZGRyKSB2aXJ0X3RvX3BoeXMoKHZvaWQgKikodW5zaWduZWQgbG9uZykoa2FkZHIpKQorI2RlZmluZSBfX3ZhKHBhZGRyKSBwaHlzX3RvX3ZpcnQoKHBoeXNfYWRkcl90KShwYWRkcikpCisKK2V4dGVybiBpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpOworCisjaWZkZWYgQ09ORklHX0ZMQVRNRU0KK3N0YXRpYyBpbmxpbmUgaW50IHBmbl92YWxpZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gcGZuIDwgbWF4X21hcG5yOworfQorI2VuZGlmCisKKy8qIFByb3ZpZGUgYXMgbWFjcm9zIHNpbmNlIHRoZXNlIHJlcXVpcmUgc29tZSBvdGhlciBoZWFkZXJzIGluY2x1ZGVkLiAqLworI2RlZmluZSBwYWdlX3RvX3BhKHBhZ2UpICgocGh5c19hZGRyX3QpKHBhZ2VfdG9fcGZuKHBhZ2UpKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpIHBmbl90b19wYWdlKGthZGRyX3RvX3BmbihrYWRkcikpCisjZGVmaW5lIHBhZ2VfdG9fdmlydChwYWdlKSBwZm5fdG9fa2FkZHIocGFnZV90b19wZm4ocGFnZSkpCisKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitleHRlcm4gcHRlX3QgKnZpcnRfdG9fcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUyBcCisJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9nZXRvcmRlci5oPgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjVkNDU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BhcmFtLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODUzYjBlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9QQ0lfQlJJREdFX0gKKyNkZWZpbmUgX0FTTV9USUxFX1BDSV9CUklER0VfSAorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBwY2lfY29udHJvbGxlcjsKKworLyoKKyAqIHBjaV9pb19iYXNlIHJldHVybnMgdGhlIG1lbW9yeSBhZGRyZXNzIGF0IHdoaWNoIHlvdSBjYW4gYWNjZXNzCisgKiB0aGUgSS9PIHNwYWNlIGZvciBQQ0kgYnVzIG51bWJlciBgYnVzJyAob3IgTlVMTCBvbiBlcnJvcikuCisgKi8KK2V4dGVybiB2b2lkIF9faW9tZW0gKnBjaV9idXNfaW9fYmFzZSh1bnNpZ25lZCBpbnQgYnVzKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9idXNfaW9fYmFzZV9waHlzKHVuc2lnbmVkIGludCBidXMpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2J1c19tZW1fYmFzZV9waHlzKHVuc2lnbmVkIGludCBidXMpOworCisvKiBBbGxvY2F0ZSBhIG5ldyBQQ0kgaG9zdCBicmlkZ2Ugc3RydWN0dXJlICovCitleHRlcm4gc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIodm9pZCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCByZXNvdXJjZXMgKi8KK2V4dGVybiB2b2lkIHBjaV9pbml0X3Jlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbGFncywgY2hhciAqbmFtZSk7CisKKy8qIEdldCB0aGUgUENJIGhvc3QgY29udHJvbGxlciBmb3IgYSBidXMgKi8KK2V4dGVybiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaV9idXNfdG9faG9zZShpbnQgYnVzKTsKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIFBDSSBjb250cm9sbGVyIChob3N0IGJyaWRnZSkKKyAqLworc3RydWN0IHBjaV9jb250cm9sbGVyIHsKKwlpbnQgaW5kZXg7CQkvKiBQQ0kgZG9tYWluIG51bWJlciAqLworCXN0cnVjdCBwY2lfYnVzICpyb290X2J1czsKKworCWludCBmaXJzdF9idXNubzsKKwlpbnQgbGFzdF9idXNubzsKKworCWludCBodl9jZmdfZmRbMl07CS8qIGNvbmZpZ3swLDF9IGZkcyBmb3IgdGhpcyBQQ0llIGNvbnRyb2xsZXIgKi8KKwlpbnQgaHZfbWVtX2ZkOwkJLyogZmQgdG8gSHlwZXJ2aXNvciBmb3IgTU1JTyBvcGVyYXRpb25zICovCisKKwlzdHJ1Y3QgcGNpX29wcyAqb3BzOworCisJaW50IGlycV9iYXNlOwkJLyogQmFzZSBJUlEgZnJvbSB0aGUgSHlwZXJ2aXNvcgkqLworCWludCBwbHhfZ2VuMTsJCS8qIGZsYWcgZm9yIFBMWCBHZW4gMSBjb25maWd1cmF0aW9uICovCisKKwkvKiBBZGRyZXNzIHJhbmdlcyB0aGF0IGFyZSByb3V0ZWQgdG8gdGhpcyBjb250cm9sbGVyL2JyaWRnZS4gKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtX3Jlc291cmNlc1szXTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfYnVzX3RvX2hvc3Qoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gYnVzLT5zeXNkYXRhOworfQorCitleHRlcm4gdm9pZCBzZXR1cF9pbmRpcmVjdF9wY2lfbm9tYXAoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJICAgICAgIHZvaWQgX19pb21lbSAqY2ZnX2FkZHIsIHZvaWQgX19pb21lbSAqY2ZnX2RhdGEpOworZXh0ZXJuIHZvaWQgc2V0dXBfaW5kaXJlY3RfcGNpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCSAgICAgICB1MzIgY2ZnX2FkZHIsIHUzMiBjZmdfZGF0YSk7CitleHRlcm4gdm9pZCBzZXR1cF9ncmFja2xlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSk7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIGNvbW1vbl9zd2l6emxlKHN0cnVjdCBwY2lfZGV2ICosIHVuc2lnbmVkIGNoYXIgKik7CisKKy8qCisgKiAgIFRoZSBmb2xsb3dpbmcgY29kZSBzd2l6emxlcyBmb3IgZXhhY3RseSBvbmUgYnJpZGdlLiAgVGhlIHJvdXRpbmUKKyAqICAgY29tbW9uX3N3aXp6bGUgYmVsb3cgaGFuZGxlcyBtdWx0aXBsZSBicmlkZ2VzLiAgQnV0IHRoZXJlIGFyZSBhCisgKiAgIHNvbWUgYm9hcmRzIHRoYXQgZG9uJ3QgZm9sbG93IHRoZSBQQ0kgc3BlYydzIHN1Z2dlc3Rpb24gc28gd2UKKyAqICAgYnJlYWsgdGhpcyBwaWVjZSBvdXQgc2VwYXJhdGVseS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGJyaWRnZV9zd2l6emxlKHVuc2lnbmVkIGNoYXIgcGluLAorCQl1bnNpZ25lZCBjaGFyIGlkc2VsKQoreworCXJldHVybiAoKChwaW4tMSkgKyBpZHNlbCkgJSA0KSArIDE7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQorICogZm9ybWF0IGZvciB0aG9zZSBQUEMgc3lzdGVtcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUgUENJCisgKiBpbnRlcnJ1cHRzIHByb3Blcmx5IHJvdXRlZC4KKyAqLworLyogRklYTUUgLSBkb3VibGUgY2hlY2sgdGhpcyAqLworI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUCAoeyBcCisJbG9uZyBfY3RsXyA9IC0xOyBcCisJaWYgKGlkc2VsID49IG1pbl9pZHNlbCAmJiBpZHNlbCA8PSBtYXhfaWRzZWwgJiYgcGluIDw9IGlycXNfcGVyX3Nsb3QpIFwKKwkJX2N0bF8gPSBwY2lfaXJxX3RhYmxlW2lkc2VsIC0gbWluX2lkc2VsXVtwaW4tMV07IFwKKwlfY3RsXzsgXAorfSkKKworLyoKKyAqIFNjYW4gdGhlIGJ1c2VzIGJlbG93IGEgZ2l2ZW4gUENJIGhvc3QgYnJpZGdlIGFuZCBhc3NpZ24gc3VpdGFibGUKKyAqIHJlc291cmNlcyB0byBhbGwgZGV2aWNlcyBmb3VuZC4KKyAqLworZXh0ZXJuIGludCBwY2lhdXRvX2J1c19zY2FuKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBpbnQpOworCisjaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKK3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpLTE7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fVElMRV9QQ0lfQlJJREdFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMxNWRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1BDSV9ICisjZGVmaW5lIF9BU01fVElMRV9QQ0lfSAorCisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKworLyoKKyAqIFRoZSBoeXBlcnZpc29yIG1hcHMgdGhlIGVudGlyZXR5IG9mIENQQS1zcGFjZSBhcyBidXMgYWRkcmVzc2VzLCBzbworICogYnVzIGFkZHJlc3NlcyBhcmUgcGh5c2ljYWwgYWRkcmVzc2VzLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrCisgKiBkZXZpY2UgbGF5ZXJzIHVzZSB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMgICAgIDEKKworc3RydWN0IHBjaV9jb250cm9sbGVyICpwY2lfYnVzX3RvX2hvc2UoaW50IGJ1cyk7Cit1bnNpZ25lZCBjaGFyIF9faW5pdCBjb21tb25fc3dpenpsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwaW5wKTsKK2ludCBfX2luaXQgdGlsZV9wY2lfaW5pdCh2b2lkKTsKK3ZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyKTsKK3ZvaWQgX19pb21lbSAqcGNpX2lvbWFwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBiYXIsIHVuc2lnbmVkIGxvbmcgbWF4KTsKK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOworCitpbnQgX19kZXZpbml0IF90aWxlX2NmZ19yZWFkKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgaW50IGJ1cywKKwkJCQkgICAgaW50IHNsb3QsCisJCQkJICAgIGludCBmdW5jdGlvbiwKKwkJCQkgICAgaW50IG9mZnNldCwKKwkJCQkgICAgaW50IHNpemUsCisJCQkJICAgIHUzMiAqdmFsKTsKK2ludCBfX2RldmluaXQgX3RpbGVfY2ZnX3dyaXRlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQkgICAgIGludCBidXMsCisJCQkJICAgICBpbnQgc2xvdCwKKwkJCQkgICAgIGludCBmdW5jdGlvbiwKKwkJCQkgICAgIGludCBvZmZzZXQsCisJCQkJICAgICBpbnQgc2l6ZSwKKwkJCQkgICAgIHUzMiB2YWwpOworCisvKgorICogVGhlc2UgYXJlIHVzZWQgdG8gdG8gY29uZmlnIHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIGVhcmx5IHN0YWdlcyBvZgorICogc2V0dXAgYmVmb3JlIHRoZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUgaGFzIGJlZW4gc2V0IHVwIGVub3VnaCB0byBiZQorICogYWJsZSB0byBkbyBjb25maWcgcmVhZHMgYW5kIHdyaXRlcy4KKyAqLworI2RlZmluZSBlYXJseV9jZmdfcmVhZCh3aGVyZSwgc2l6ZSwgdmFsdWUpIFwKKwlfdGlsZV9jZmdfcmVhZChjb250cm9sbGVyLCBcCisJCSAgICAgICBjdXJyZW50X2J1cywgXAorCQkgICAgICAgcGNpX3Nsb3QsIFwKKwkJICAgICAgIHBjaV9mbiwgXAorCQkgICAgICAgd2hlcmUsIFwKKwkJICAgICAgIHNpemUsIFwKKwkJICAgICAgIHZhbHVlKQorCisjZGVmaW5lIGVhcmx5X2NmZ193cml0ZSh3aGVyZSwgc2l6ZSwgdmFsdWUpIFwKKwlfdGlsZV9jZmdfd3JpdGUoY29udHJvbGxlciwgXAorCQkgICAgICAgY3VycmVudF9idXMsIFwKKwkJICAgICAgIHBjaV9zbG90LCBcCisJCSAgICAgICBwY2lfZm4sIFwKKwkJICAgICAgIHdoZXJlLCBcCisJCSAgICAgICBzaXplLCBcCisJCSAgICAgICB2YWx1ZSkKKworCisKKyNkZWZpbmUgUENJQ0ZHX0JZVEUJMQorI2RlZmluZSBQQ0lDRkdfV09SRAkyCisjZGVmaW5lIFBDSUNGR19EV09SRAk0CisKKyNkZWZpbmUJVElMRV9OVU1fUENJRQkyCisKKyNkZWZpbmUgcGNpX2RvbWFpbl9ucihidXMpICgoKHN0cnVjdCBwY2lfY29udHJvbGxlciAqKShidXMpLT5zeXNkYXRhKS0+aW5kZXgpCisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSBkb21haW4gbnVtYmVyIGluIC9wcm9jLgorICovCitzdGF0aWMgaW5saW5lIGludCBwY2lfcHJvY19kb21haW4oc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEkvTyBzcGFjZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKyAqLworCisjZGVmaW5lIFRJTEVfUENJRV9MT1dFUl9JTwkJMHgwCisjZGVmaW5lIFRJTEVfUENJRV9VUFBFUl9JTwkJMHgxMDAwMAorI2RlZmluZSBUSUxFX1BDSUVfUENJRV9JT19TSVpFCQkweDAwMDBGRkZGCisKKyNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJCTAKKyNkZWZpbmUgX1BBR0VfR1VBUkRFRAkJMAorCisKKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpICAgIHBjaV9hc3NpZ25fYWxsX2J1c2VzCitleHRlcm4gaW50IHBjaV9hc3NpZ25fYWxsX2J1c2VzOworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpYmlvc19zZXRfbWFzdGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogTm8gc3BlY2lhbCBidXMgbWFzdGVyaW5nIHNldHVwIGhhbmRsaW5nICovCit9CisKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwCisjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQlUSUxFX1BDSUVfTE9XRVJfSU8KKworLyoKKyAqIFRoaXMgZmxhZyB0ZWxscyBpZiB0aGUgcGxhdGZvcm0gaXMgVElMRW1wb3dlciB0aGF0IG5lZWRzCisgKiBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBQTFggc3dpdGNoIGNoaXAuCisgKi8KK2V4dGVybiBpbnQgYmxhZGVfcGNpOworCisvKiBpbXBsZW1lbnQgdGhlIHBjaV8gRE1BIEFQSSBpbiB0ZXJtcyBvZiB0aGUgZ2VuZXJpYyBkZXZpY2UgZG1hXyBvbmUgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisvKiBnZW5lcmljIHBjaSBzdHVmZiAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorCisvKiBVc2UgYW55IGNwdSBmb3IgUENJLiAqLworI2RlZmluZSBjcHVtYXNrX29mX3BjaWJ1cyhidXMpIGNwdV9vbmxpbmVfbWFzaworCisjZW5kaWYgLyogX0FTTV9USUxFX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMyOTRmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1BFUkNQVV9ICisjZGVmaW5lIF9BU01fVElMRV9QRVJDUFVfSAorCityZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fbXlfY3B1X29mZnNldCBfX2FzbV9fKCJ0cCIpOworI2RlZmluZSBfX215X2NwdV9vZmZzZXQgX19teV9jcHVfb2Zmc2V0CisjZGVmaW5lIHNldF9teV9jcHVfb2Zmc2V0KHRwKSAoX19teV9jcHVfb2Zmc2V0ID0gKHRwKSkKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYgLyogX0FTTV9USUxFX1BFUkNQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjUyNzkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9QR0FMTE9DX0gKKyNkZWZpbmUgX0FTTV9USUxFX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKworLyogQml0cyBmb3IgdGhlIHNpemUgb2YgdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLiAqLworI2RlZmluZSBMMl9LRVJORUxfUEdUQUJMRV9TSElGVCBcCisgIChIVl9MT0cyX1BBR0VfU0laRV9MQVJHRSAtIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMICsgSFZfTE9HMl9QVEVfU0laRSkKKworLyogV2UgY3VycmVudGx5IGFsbG9jYXRlIHVzZXIgTDIgcGFnZSB0YWJsZXMgYnkgcGFnZSAodW5saWtlIGtlcm5lbCBMMnMpLiAqLworI2lmIEwyX0tFUk5FTF9QR1RBQkxFX1NISUZUIDwgSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwKKyNkZWZpbmUgTDJfVVNFUl9QR1RBQkxFX1NISUZUIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMCisjZWxzZQorI2RlZmluZSBMMl9VU0VSX1BHVEFCTEVfU0hJRlQgTDJfS0VSTkVMX1BHVEFCTEVfU0hJRlQKKyNlbmRpZgorCisvKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSBuZWVkLCBhcyBhbiAib3JkZXIiLCBmb3IgYSB1c2VyIEwyIHBhZ2UgdGFibGU/ICovCisjZGVmaW5lIEwyX1VTRVJfUEdUQUJMRV9PUkRFUiAoTDJfVVNFUl9QR1RBQkxFX1NISUZUIC0gSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwpCisKKy8qIEhvdyBiaWcgaXMgYSBrZXJuZWwgTDIgcGFnZSB0YWJsZT8gKi8KKyNkZWZpbmUgTDJfS0VSTkVMX1BHVEFCTEVfU0laRSAoMSA8PCBMMl9LRVJORUxfUEdUQUJMRV9TSElGVCkKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKK3sKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlzZXRfcHRlX29yZGVyKHBtZHAsIHBtZCwgTDJfVVNFUl9QR1RBQkxFX09SREVSKTsKKyNlbHNlCisJc2V0X3B0ZV9vcmRlcigmcG1kcC0+cHVkLnBnZCwgcG1kLnB1ZC5wZ2QsIEwyX1VTRVJfUEdUQUJMRV9PUkRFUik7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtZF9wb3B1bGF0ZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJICAgICAgIHBtZF90ICpwbWQsIHB0ZV90ICpwdGVwKQoreworCXNldF9wbWQocG1kLCBwdGZuX3BtZChfX3BhKHB0ZXApID4+IEhWX0xPRzJfUEFHRV9UQUJMRV9BTElHTiwKKwkJCSAgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWRfcG9wdWxhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCisJCQkJcGd0YWJsZV90IHBhZ2UpCit7CisJc2V0X3BtZChwbWQsIHB0Zm5fcG1kKEhWX1BGTl9UT19QVEZOKHBhZ2VfdG9fcGZuKHBhZ2UpKSwKKwkJCSAgICAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgZnJlZSBwYWdlIHRhYmxlcy4KKyAqLworCitleHRlcm4gcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CitleHRlcm4gdm9pZCBwZ2RfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCk7CisKK2V4dGVybiBwZ3RhYmxlX3QgcHRlX2FsbG9jX29uZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcHRlKTsKKworI2RlZmluZSBwbWRfcGd0YWJsZShwbWQpIHBtZF9wYWdlKHBtZCkKKworc3RhdGljIGlubGluZSBwdGVfdCAqCitwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBwZm5fdG9fa2FkZHIocGFnZV90b19wZm4ocHRlX2FsbG9jX29uZShtbSwgYWRkcmVzcykpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZSkKK3sKKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpcHRlICYgKFBBR0VfU0laRS0xKSk7CisJcHRlX2ZyZWUobW0sIHZpcnRfdG9fcGFnZShwdGUpKTsKK30KKworZXh0ZXJuIHZvaWQgX19wdGVfZnJlZV90bGIoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHBhZ2UgKnB0ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCisvKgorICogR2V0IHRoZSBzbWFsbC1wYWdlIHB0ZV90IGxvd21lbSBlbnRyeSBmb3IgYSBnaXZlbiBwZm4uCisgKiBUaGlzIG1heSBvciBtYXkgbm90IGJlIGluIHVzZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGluaXRpYWwKKyAqIGh1Z2UtcGFnZSBlbnRyeSBmb3IgdGhlIHBhZ2UgaGFzIGFscmVhZHkgYmVlbiBzaGF0dGVyZWQuCisgKi8KK3B0ZV90ICpnZXRfcHJlYWxsb2NfcHRlKHVuc2lnbmVkIGxvbmcgcGZuKTsKKworLyogRHVyaW5nIGluaXQsIHdlIGNhbiBzaGF0dGVyIGtlcm5lbCBodWdlIHBhZ2VzIGlmIG5lZWRlZC4gKi8KK3ZvaWQgc2hhdHRlcl9wbWQocG1kX3QgKnBtZCk7CisKKyNpZmRlZiBfX3RpbGVneF9fCisvKiBXZSBzaGFyZSBhIHNpbmdsZSBwYWdlIGFsbG9jYXRvciBmb3IgYm90aCBMMSBhbmQgTDIgcGFnZSB0YWJsZXMuICovCisjaWYgSFZfTDFfU0laRSAhPSBIVl9MMl9TSVpFCisjIGVycm9yIFJld29yayBhc3N1bXB0aW9uIHRoYXQgTDEgYW5kIEwyIHBhZ2UgdGFibGVzIGFyZSBzYW1lIHNpemUuCisjZW5kaWYKKyNkZWZpbmUgTDFfVVNFUl9QR1RBQkxFX09SREVSIEwyX1VTRVJfUEdUQUJMRV9PUkRFUgorI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHB1ZCwgcG1kKSBcCisgIHBtZF9wb3B1bGF0ZV9rZXJuZWwoKG1tKSwgKHBtZF90ICopKHB1ZCksIChwdGVfdCAqKShwbWQpKQorI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyKSBcCisgICgocG1kX3QgKilwYWdlX3RvX3ZpcnQocHRlX2FsbG9jX29uZSgobW0pLCAoYWRkcikpKSkKKyNkZWZpbmUgcG1kX2ZyZWUobW0sIHBtZHApIFwKKyAgcHRlX2ZyZWUoKG1tKSwgdmlydF90b19wYWdlKHBtZHApKQorI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHBtZHAsIGFkZHJlc3MpIFwKKyAgX19wdGVfZnJlZV90bGIoKHRsYiksIHZpcnRfdG9fcGFnZShwbWRwKSwgKGFkZHJlc3MpKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM2NzM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMCwwICsxLDQ4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBhbmQgZGVmaW5lcyBuZWNlc3NhcnkgdG8gbW9kaWZ5IGFuZCB1c2UKKyAqIHRoZSBUSUxFIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9QR1RBQkxFX0gKKyNkZWZpbmUgX0FTTV9USUxFX1BHVEFCTEVfSAorCisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworc3RydWN0IG1tX3N0cnVjdDsKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdDsKKworLyoKKyAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCisgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVtQQUdFX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKKyNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCisKK2V4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltdOworZXh0ZXJuIHBncHJvdF90IHN3YXBwZXJfcGdwcm90OworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpwZ2RfY2FjaGU7CitleHRlcm4gc3BpbmxvY2tfdCBwZ2RfbG9jazsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHBnZF9saXN0OworCisvKgorICogVGhlIHZlcnkgbGFzdCBzbG90cyBpbiB0aGUgcGdkX3QgYXJlIGZvciBhZGRyZXNzZXMgdW51c2FibGUgYnkgTGludXgKKyAqIChwZ2RfYWRkcl9pbnZhbGlkKCkgcmV0dXJucyB0cnVlKS4gIFNvIHdlIHVzZSB0aGVtIGZvciB0aGUgbGlzdCBzdHJ1Y3R1cmUuCisgKiBUaGUgeDg2IGNvZGUgd2UgYXJlIG1vZGVsbGVkIG9uIHVzZXMgdGhlIHBhZ2UtPnByaXZhdGUvaW5kZXggZmllbGRzCisgKiAob2xkZXIgMi42IGtlcm5lbHMpIG9yIHRoZSBscnUgbGlzdCAobmV3ZXIgMi42IGtlcm5lbHMpLCBidXQgc2luY2UKKyAqIG91ciBwZ2RzIGFyZSBzbyBtdWNoIHNtYWxsZXIgdGhhbiBhIHBhZ2UsIGl0IHNlZW1zIGEgd2FzdGUgdG8KKyAqIHNwZW5kIGEgd2hvbGUgcGFnZSBvbiBlYWNoIHBnZC4KKyAqLworI2RlZmluZSBQR0RfTElTVF9PRkZTRVQgXAorICAoKFBUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpIC0gc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKQorI2RlZmluZSBwZ2RfdG9fbGlzdChwZ2QpIFwKKyAgKChzdHJ1Y3QgbGlzdF9oZWFkICopKChjaGFyICopKHBnZCkgKyBQR0RfTElTVF9PRkZTRVQpKQorI2RlZmluZSBsaXN0X3RvX3BnZChsaXN0KSBcCisgICgocGdkX3QgKikoKGNoYXIgKikobGlzdCkgLSBQR0RfTElTVF9PRkZTRVQpKQorCitleHRlcm4gdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNldF9wYWdlX2hvbWVzKHZvaWQpOworCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisKKyNkZWZpbmUgX1BBR0VfUFJFU0VOVCAgICAgICAgICAgSFZfUFRFX1BSRVNFTlQKKyNkZWZpbmUgX1BBR0VfSFVHRV9QQUdFICAgICAgICAgSFZfUFRFX1BBR0UKKyNkZWZpbmUgX1BBR0VfUkVBREFCTEUgICAgICAgICAgSFZfUFRFX1JFQURBQkxFCisjZGVmaW5lIF9QQUdFX1dSSVRBQkxFICAgICAgICAgIEhWX1BURV9XUklUQUJMRQorI2RlZmluZSBfUEFHRV9FWEVDVVRBQkxFICAgICAgICBIVl9QVEVfRVhFQ1VUQUJMRQorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRCAgICAgICAgICBIVl9QVEVfQUNDRVNTRUQKKyNkZWZpbmUgX1BBR0VfRElSVFkgICAgICAgICAgICAgSFZfUFRFX0RJUlRZCisjZGVmaW5lIF9QQUdFX0dMT0JBTCAgICAgICAgICAgIEhWX1BURV9HTE9CQUwKKyNkZWZpbmUgX1BBR0VfVVNFUiAgICAgICAgICAgICAgSFZfUFRFX1VTRVIKKworLyoKKyAqIEFsbCB0aGUgInN0YW5kYXJkIiBiaXRzLiAgQ2FjaGUtY29udHJvbCBiaXRzIGFyZSBtYW5hZ2VkIGVsc2V3aGVyZS4KKyAqIFRoaXMgaXMgdXNlZCB0byB0ZXN0IGZvciB2YWxpZCBsZXZlbC0yIHBhZ2UgdGFibGUgcG9pbnRlcnMgYnkgY2hlY2tpbmcKKyAqIGFsbCB0aGUgYml0cywgYW5kIHRvIG1hc2sgYXdheSB0aGUgY2FjaGUgY29udHJvbCBiaXRzIGZvciBtcHJvdGVjdC4KKyAqLworI2RlZmluZSBfUEFHRV9BTEwgKFwKKyAgX1BBR0VfUFJFU0VOVCB8IFwKKyAgX1BBR0VfSFVHRV9QQUdFIHwgXAorICBfUEFHRV9SRUFEQUJMRSB8IFwKKyAgX1BBR0VfV1JJVEFCTEUgfCBcCisgIF9QQUdFX0VYRUNVVEFCTEUgfCBcCisgIF9QQUdFX0FDQ0VTU0VEIHwgXAorICBfUEFHRV9ESVJUWSB8IFwKKyAgX1BBR0VfR0xPQkFMIHwgXAorICBfUEFHRV9VU0VSIFwKKykKKworI2RlZmluZSBQQUdFX05PTkUgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9TSEFSRUQgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEQUJMRSB8IF9QQUdFX1dSSVRBQkxFIHwgXAorCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEKQorCisjZGVmaW5lIFBBR0VfU0hBUkVEX0VYRUMgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEQUJMRSB8IF9QQUdFX1dSSVRBQkxFIHwgXAorCQkgX1BBR0VfRVhFQ1VUQUJMRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKKyNkZWZpbmUgUEFHRV9DT1BZX05PRVhFQyBcCisJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1JFQURBQkxFKQorI2RlZmluZSBQQUdFX0NPUFlfRVhFQyBcCisJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IFwKKwkJIF9QQUdFX1JFQURBQkxFIHwgX1BBR0VfRVhFQ1VUQUJMRSkKKyNkZWZpbmUgUEFHRV9DT1BZIFwKKwlQQUdFX0NPUFlfTk9FWEVDCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkgXAorCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SRUFEQUJMRSkKKyNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDIFwKKwlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkgX1BBR0VfUkVBREFCTEUgfCBfUEFHRV9FWEVDVVRBQkxFKQorCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STyBcCisgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9HTE9CQUwgfCBfUEFHRV9SRUFEQUJMRSB8IF9QQUdFX0FDQ0VTU0VEKQorI2RlZmluZSBfUEFHRV9LRVJORUwgXAorIChfUEFHRV9LRVJORUxfUk8gfCBfUEFHRV9XUklUQUJMRSB8IF9QQUdFX0RJUlRZKQorI2RlZmluZSBfUEFHRV9LRVJORUxfRVhFQyAgICAgICAoX1BBR0VfS0VSTkVMX1JPIHwgX1BBR0VfRVhFQ1VUQUJMRSkKKworI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoX1BBR0VfS0VSTkVMKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwkJX19wZ3Byb3QoX1BBR0VfS0VSTkVMX1JPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9FWEVDCV9fcGdwcm90KF9QQUdFX0tFUk5FTF9FWEVDKQorCisjZGVmaW5lIHBhZ2VfdG9fa3BncHJvdChwKSBQQUdFX0tFUk5FTAorCisvKgorICogV2UgY291bGQgdGlnaHRlbiB0aGVzZSB1cCwgYnV0IGZvciBub3cgd3JpdGFibGUgb3IgZXhlY3V0YWJsZQorICogaW1wbGllcyByZWFkYWJsZS4KKyAqLworI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkgICAgICAvKiB0aGlzIGlzIHdyaXRlLW9ubHksIHdoaWNoIHdlIHdvbid0IHN1cHBvcnQgKi8KKyNkZWZpbmUgX19QMDExCVBBR0VfQ09QWQorI2RlZmluZSBfX1AxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWV9FWEVDCisjZGVmaW5lIF9fUDExMQlQQUdFX0NPUFlfRVhFQworCisjZGVmaW5lIF9fUzAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19TMDAxCVBBR0VfUkVBRE9OTFkKKyNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECisjZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MxMDAJUEFHRV9SRUFET05MWV9FWEVDCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX0VYRUMKKyNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVEX0VYRUMKKyNkZWZpbmUgX19TMTExCVBBR0VfU0hBUkVEX0VYRUMKKworLyoKKyAqIEFsbCB0aGUgbm9ybWFsIF9QQUdFX0FMTCBiaXRzIGFyZSBpZ25vcmVkIGZvciBQTURzLCBleGNlcHQgUEFHRV9QUkVTRU5UCisgKiBhbmQgUEFHRV9IVUdFX1BBR0UsIHdoaWNoIG11c3QgYmUgb25lIGFuZCB6ZXJvLCByZXNwZWN0aXZlbHkuCisgKiBXZSBzZXQgdGhlIGlnbm9yZWQgYml0cyB0byB6ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX1RBQkxFICAgICBfUEFHRV9QUkVTRU5UCisKKy8qIEluaGVyaXQgdGhlIGNhY2hpbmcgZmxhZ3MgZnJvbSB0aGUgb2xkIHByb3RlY3Rpb24gYml0cy4gKi8KKyNkZWZpbmUgcGdwcm90X21vZGlmeShvbGRwcm90LCBuZXdwcm90KSBcCisgIChwZ3Byb3RfdCkgeyAoKG9sZHByb3QpLnZhbCAmIH5fUEFHRV9BTEwpIHwgKG5ld3Byb3QpLnZhbCB9CisKKy8qIEp1c3Qgc2V0dGluZyB0aGUgUEZOIHRvIHplcm8gc3VmZmljZXMuICovCisjZGVmaW5lIHB0ZV9wZ3Byb3QoeCkgaHZfcHRlX3NldF9wZm4oKHgpLCAwKQorCisvKgorICogRm9yIFBURXMgYW5kIFBERXMsIHdlIG11c3QgY2xlYXIgdGhlIFByZXNlbnQgYml0IGZpcnN0IHdoZW4KKyAqIGNsZWFyaW5nIGEgcGFnZSB0YWJsZSBlbnRyeSwgc28gY2xlYXIgdGhlIGJvdHRvbSBoYWxmIGZpcnN0IGFuZAorICogZW5mb3JjZSBvcmRlcmluZyB3aXRoIGEgYmFycmllci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2NsZWFyKHB0ZV90ICpwdGVwKQoreworI2lmZGVmIF9fdGlsZWd4X18KKwlwdGVwLT52YWwgPSAwOworI2Vsc2UKKwl1MzIgKnRtcCA9ICh1MzIgKilwdGVwOworCXRtcFswXSA9IDA7CisJYmFycmllcigpOworCXRtcFsxXSA9IDA7CisjZW5kaWYKK30KKyNkZWZpbmUgcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKSBfX3B0ZV9jbGVhcihwdGVwKQorCisvKgorICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgorICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgorICovCisjZGVmaW5lIHB0ZV9wcmVzZW50IGh2X3B0ZV9nZXRfcHJlc2VudAorI2RlZmluZSBwdGVfdXNlciBodl9wdGVfZ2V0X3VzZXIKKyNkZWZpbmUgcHRlX3JlYWQgaHZfcHRlX2dldF9yZWFkYWJsZQorI2RlZmluZSBwdGVfZGlydHkgaHZfcHRlX2dldF9kaXJ0eQorI2RlZmluZSBwdGVfeW91bmcgaHZfcHRlX2dldF9hY2Nlc3NlZAorI2RlZmluZSBwdGVfd3JpdGUgaHZfcHRlX2dldF93cml0YWJsZQorI2RlZmluZSBwdGVfZXhlYyBodl9wdGVfZ2V0X2V4ZWN1dGFibGUKKyNkZWZpbmUgcHRlX2h1Z2UgaHZfcHRlX2dldF9wYWdlCisjZGVmaW5lIHB0ZV9yZHByb3RlY3QgaHZfcHRlX2NsZWFyX3JlYWRhYmxlCisjZGVmaW5lIHB0ZV9leHByb3RlY3QgaHZfcHRlX2NsZWFyX2V4ZWN1dGFibGUKKyNkZWZpbmUgcHRlX21rY2xlYW4gaHZfcHRlX2NsZWFyX2RpcnR5CisjZGVmaW5lIHB0ZV9ta29sZCBodl9wdGVfY2xlYXJfYWNjZXNzZWQKKyNkZWZpbmUgcHRlX3dycHJvdGVjdCBodl9wdGVfY2xlYXJfd3JpdGFibGUKKyNkZWZpbmUgcHRlX21rc21hbGwgaHZfcHRlX2NsZWFyX3BhZ2UKKyNkZWZpbmUgcHRlX21rcmVhZCBodl9wdGVfc2V0X3JlYWRhYmxlCisjZGVmaW5lIHB0ZV9ta2V4ZWMgaHZfcHRlX3NldF9leGVjdXRhYmxlCisjZGVmaW5lIHB0ZV9ta2RpcnR5IGh2X3B0ZV9zZXRfZGlydHkKKyNkZWZpbmUgcHRlX21reW91bmcgaHZfcHRlX3NldF9hY2Nlc3NlZAorI2RlZmluZSBwdGVfbWt3cml0ZSBodl9wdGVfc2V0X3dyaXRhYmxlCisjZGVmaW5lIHB0ZV9ta2h1Z2UgaHZfcHRlX3NldF9wYWdlCisKKyNkZWZpbmUgcHRlX3NwZWNpYWwocHRlKSAwCisjZGVmaW5lIHB0ZV9ta3NwZWNpYWwocHRlKSAocHRlKQorCisvKgorICogVXNlIHNvbWUgc3BhcmUgYml0cyBpbiB0aGUgUFRFIGZvciB1c2VyLWNhY2hpbmcgdGFncy4KKyAqLworI2RlZmluZSBwdGVfc2V0X2ZvcmNlY2FjaGUgaHZfcHRlX3NldF9jbGllbnQwCisjZGVmaW5lIHB0ZV9nZXRfZm9yY2VjYWNoZSBodl9wdGVfZ2V0X2NsaWVudDAKKyNkZWZpbmUgcHRlX2NsZWFyX2ZvcmNlY2FjaGUgaHZfcHRlX2NsZWFyX2NsaWVudDAKKyNkZWZpbmUgcHRlX3NldF9hbnlob21lIGh2X3B0ZV9zZXRfY2xpZW50MQorI2RlZmluZSBwdGVfZ2V0X2FueWhvbWUgaHZfcHRlX2dldF9jbGllbnQxCisjZGVmaW5lIHB0ZV9jbGVhcl9hbnlob21lIGh2X3B0ZV9jbGVhcl9jbGllbnQxCisKKy8qCisgKiBBIG1pZ3JhdGluZyBQVEUgaGFzIFBBR0VfUFJFU0VOVCBjbGVhciBidXQgYWxsIHRoZSBvdGhlciBiaXRzIHByZXNlcnZlZC4KKyAqLworI2RlZmluZSBwdGVfbWlncmF0aW5nIGh2X3B0ZV9nZXRfbWlncmF0aW5nCisjZGVmaW5lIHB0ZV9ta21pZ3JhdGUoeCkgaHZfcHRlX3NldF9taWdyYXRpbmcoaHZfcHRlX2NsZWFyX3ByZXNlbnQoeCkpCisjZGVmaW5lIHB0ZV9kb25lbWlncmF0ZSh4KSBodl9wdGVfc2V0X3ByZXNlbnQoaHZfcHRlX2NsZWFyX21pZ3JhdGluZyh4KSkKKworI2RlZmluZSBwdGVfRVJST1IoZSkgXAorCXByX2VycigiJXM6JWQ6IGJhZCBwdGUgMHglMDE2bGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByX2VycigiJXM6JWQ6IGJhZCBwZ2QgMHglMDE2bGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQorCisvKgorICogc2V0X3B0ZV9vcmRlcigpIHNldHMgdGhlIGdpdmVuIFBURSBhbmQgYWxzbyBzYW5pdHktY2hlY2tzIHRoZQorICogcmVxdWVzdGVkIFBURSBhZ2FpbnN0IHRoZSBwYWdlIGhvbWVjYWNoaW5nLiAgVW5zcGVjaWZpZWQgcGFydHMKKyAqIG9mIHRoZSBQVEUgYXJlIGZpbGxlZCBpbiB3aGVuIGl0IGlzIHdyaXR0ZW4gdG8gbWVtb3J5LCBpLmUuIGFsbAorICogY2FjaGluZyBhdHRyaWJ1dGVzIGlmICIhZm9yY2VjYWNoZSIsIG9yIHRoZSBob21lIGNwdSBpZiAiYW55aG9tZSIuCisgKi8KK2V4dGVybiB2b2lkIHNldF9wdGVfb3JkZXIocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgaW50IG9yZGVyKTsKKworI2RlZmluZSBzZXRfcHRlKHB0ZXAsIHB0ZXZhbCkgc2V0X3B0ZV9vcmRlcihwdGVwLCBwdGV2YWwsIDApCisjZGVmaW5lIHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZXZhbCkgc2V0X3B0ZShwdGVwLCBwdGV2YWwpCisjZGVmaW5lIHNldF9wdGVfYXRvbWljKHB0ZXB0ciwgcHRldmFsKSBzZXRfcHRlKHB0ZXB0ciwgcHRldmFsKQorCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorCitzdGF0aWMgaW5saW5lIGludCBwdGVfbm9uZShwdGVfdCBwdGUpCit7CisJcmV0dXJuICFwdGUudmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHRlX3BmbihwdGVfdCBwdGUpCit7CisJcmV0dXJuIGh2X3B0ZV9nZXRfcGZuKHB0ZSk7Cit9CisKKy8qIFNldCBvciBnZXQgdGhlIHJlbW90ZSBjYWNoZSBjcHUgaW4gYSBwZ3Byb3Qgd2l0aCByZW1vdGUgY2FjaGluZy4gKi8KK2V4dGVybiBwZ3Byb3RfdCBzZXRfcmVtb3RlX2NhY2hlX2NwdShwZ3Byb3RfdCBwcm90LCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgZ2V0X3JlbW90ZV9jYWNoZV9jcHUocGdwcm90X3QgcHJvdCk7CisKK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gaHZfcHRlX3NldF9wZm4ocHJvdCwgcGZuKTsKK30KKworLyogU3VwcG9ydCBmb3IgcHJpb3JpdHkgbWFwcGluZ3MuICovCitleHRlcm4gdm9pZCBzdGFydF9tbV9jYWNoaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK2V4dGVybiB2b2lkIGNoZWNrX21tX2NhY2hpbmcoc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCk7CisKKy8qCisgKiBTdXBwb3J0IG5vbi1saW5lYXIgZmlsZSBtYXBwaW5ncyAoc2VlIHN5c19yZW1hcF9maWxlX3BhZ2VzKS4KKyAqIFRoaXMgaXMgZGVmaW5lZCBieSBDTElFTlQxIHNldCBidXQgQ0xJRU5UMCBhbmQgX1BBR0VfUFJFU0VOVCBjbGVhciwgYW5kIHRoZQorICogZmlsZSBvZmZzZXQgaW4gdGhlIDMyIGhpZ2ggYml0cy4KKyAqLworI2RlZmluZSBfUEFHRV9GSUxFICAgICAgICBIVl9QVEVfQ0xJRU5UMQorI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAzMgorI2RlZmluZSBwdGVfZmlsZShwdGUpICAgICAoaHZfcHRlX2dldF9jbGllbnQxKHB0ZSkgJiYgIWh2X3B0ZV9nZXRfY2xpZW50MChwdGUpKQorI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZSkudmFsID4+IDMyKQorI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7ICgoKGxvbmcgbG9uZykob2ZmKSkgPDwgMzIpIHwgX1BBR0VfRklMRSB9KQorCisvKgorICogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAoc2VlIDxsaW51eC9zd2Fwb3BzLmg+KS4KKyAqIFdlIHB1dCB0aGUgc3dhcCBmaWxlIHR5cGUrb2Zmc2V0IGluIHRoZSAzMiBoaWdoIGJpdHM7CisgKiBJIGJlbGlldmUgd2UgY2FuIGp1c3QgbGVhdmUgdGhlIGxvdyBiaXRzIGNsZWFyLgorICovCisjZGVmaW5lIF9fc3dwX3R5cGUoc3dwKQkJKChzd3ApLnZhbCAmIDB4MWYpCisjZGVmaW5lIF9fc3dwX29mZnNldChzd3ApCSgoc3dwKS52YWwgPj4gNSkKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2ZmKQkoKHN3cF9lbnRyeV90KSB7ICh0eXBlKSB8ICgob2ZmKSA8PCA1KSB9KQorI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IChwdGUpLnZhbCA+PiAzMiB9KQorI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKQkoKHB0ZV90KSB7ICgoKGxvbmcgbG9uZykgKChzd3ApLnZhbCkpIDw8IDMyKSB9KQorCisvKgorICogY2xvbmVfcGdkX3JhbmdlKHBnZF90ICpkc3QsIHBnZF90ICpzcmMsIGludCBjb3VudCk7CisgKgorICogIGRzdCAtIHBvaW50ZXIgdG8gcGdkIHJhbmdlIGFud2hlcmUgb24gYSBwZ2QgcGFnZQorICogIHNyYyAtICIiCisgKiAgY291bnQgLSB0aGUgbnVtYmVyIG9mIHBnZHMgdG8gY29weS4KKyAqCisgKiBkc3QgYW5kIHNyYyBjYW4gYmUgb24gdGhlIHNhbWUgcGFnZSwgYnV0IHRoZSByYW5nZSBtdXN0IG5vdCBvdmVybGFwLAorICogYW5kIG11c3Qgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNsb25lX3BnZF9yYW5nZShwZ2RfdCAqZHN0LCBwZ2RfdCAqc3JjLCBpbnQgY291bnQpCit7CisgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBjb3VudCAqIHNpemVvZihwZ2RfdCkpOworfQorCisvKgorICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKKyAqIGFuZCBhIHBhZ2UgZW50cnkgYW5kIHBhZ2UgZGlyZWN0b3J5IHRvIHRoZSBwYWdlIHRoZXkgcmVmZXIgdG8uCisgKi8KKworI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworLyoKKyAqIElmIHdlIGFyZSBkb2luZyBhbiBtcHJvdGVjdCgpLCBqdXN0IGFjY2VwdCB0aGUgbmV3IHZtYS0+dm1fcGFnZV9wcm90CisgKiB2YWx1ZSBhbmQgY29tYmluZSBpdCB3aXRoIHRoZSBQRk4gZnJvbSB0aGUgb2xkIFBURSB0byBnZXQgYSBuZXcgUFRFLgorICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXJldHVybiBwZm5fcHRlKGh2X3B0ZV9nZXRfcGZuKHB0ZSksIG5ld3Byb3QpOworfQorCisvKgorICogVGhlIHBnZCBwYWdlIGNhbiBiZSB0aG91Z2h0IG9mIGFuIGFycmF5IGxpa2UgdGhpczogcGdkX3RbUFRSU19QRVJfUEdEXQorICoKKyAqIFRoaXMgbWFjcm8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IGluIHRoZSBwZ2QgcGFnZSB3aGljaCB3b3VsZAorICogY29udHJvbCB0aGUgZ2l2ZW4gdmlydHVhbCBhZGRyZXNzLgorICovCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdEIC0gMSkpCisKKy8qCisgKiBwZ2Rfb2Zmc2V0KCkgcmV0dXJucyBhIChwZ2RfdCAqKQorICogcGdkX2luZGV4KCkgaXMgdXNlZCBnZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBwZ2QgcGFnZSdzIGFycmF5IG9mIHBnZF90J3MuCisgKi8KKyNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCArIHBnZF9pbmRleChhZGRyZXNzKSkKKworLyoKKyAqIEEgc2hvcnRjdXQgd2hpY2ggaW1wbGllcyB0aGUgdXNlIG9mIHRoZSBrZXJuZWwncyBwZ2QsIGluc3RlYWQKKyAqIG9mIGEgcHJvY2VzcydzLgorICovCisjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQorCisjaWYgZGVmaW5lZChDT05GSUdfSElHSFBURSkKK2V4dGVybiBwdGVfdCAqX3B0ZV9vZmZzZXRfbWFwKHBtZF90ICosIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgZW51bSBrbV90eXBlKTsKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBcCisJX3B0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcywgS01fUFRFMCkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgXAorCV9wdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MsIEtNX1BURTEpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpIGt1bm1hcF9hdG9taWMocHRlLCBLTV9QVEUwKQorI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkga3VubWFwX2F0b21pYyhwdGUsIEtNX1BURTEpCisjZWxzZQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpIHB0ZV9vZmZzZXRfa2VybmVsKGRpciwgYWRkcmVzcykKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQorI2RlZmluZSBwdGVfdW5tYXAocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogQ2xlYXIgYSBub24tZXhlY3V0YWJsZSBrZXJuZWwgUFRFIGFuZCBmbHVzaCBpdCBmcm9tIHRoZSBUTEIuICovCisjZGVmaW5lIGtwdGVfY2xlYXJfZmx1c2gocHRlcCwgdmFkZHIpCQlcCitkbyB7CQkJCQkJXAorCXB0ZV9jbGVhcigmaW5pdF9tbSwgKHZhZGRyKSwgKHB0ZXApKTsJXAorCWxvY2FsX2ZsdXNoX3RsYl9wYWdlKEZMVVNIX05PTkVYRUMsICh2YWRkciksIFBBR0VfU0laRSk7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBUaGUga2VybmVsIHBhZ2UgdGFibGVzIGNvbnRhaW4gd2hhdCB3ZSBuZWVkLCBhbmQgd2UgZmx1c2ggd2hlbiB3ZQorICogY2hhbmdlIHNwZWNpZmljIHBhZ2UgdGFibGUgZW50cmllcy4KKyAqLworI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkcmVzcywgcHRlKSBkbyB7IH0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfRkxBVE1FTQorI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCisjZW5kaWYgLyogQ09ORklHX0ZMQVRNRU0gKi8KKworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQkJXAorCQlyZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KQorCitleHRlcm4gdm9pZCB2bWFsbG9jX3N5bmNfYWxsKHZvaWQpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWZkZWYgX190aWxlZ3hfXworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzY0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlXzMyLmg+CisjZW5kaWYKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RhdGljIGlubGluZSBpbnQgcG1kX25vbmUocG1kX3QgcG1kKQoreworCS8qCisJICogT25seSBjaGVjayBsb3cgd29yZCBvbiAzMi1iaXQgcGxhdGZvcm1zLCBzaW5jZSBpdCBtaWdodCBiZQorCSAqIG91dCBvZiBzeW5jIHdpdGggdXBwZXIgaGFsZi4KKwkgKi8KKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbChwbWQpID09IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtZF9wcmVzZW50KHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX3ZhbChwbWQpICYgX1BBR0VfUFJFU0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1kX2JhZChwbWRfdCBwbWQpCit7CisJcmV0dXJuICgocG1kX3ZhbChwbWQpICYgX1BBR0VfQUxMKSAhPSBfUEFHRV9UQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlc190b19tYih1bnNpZ25lZCBsb25nIG5wZykKK3sKKwlyZXR1cm4gbnBnID4+ICgyMCAtIFBBR0VfU0hJRlQpOworfQorCisvKgorICogVGhlIHBtZCBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHBtZF90W1BUUlNfUEVSX1BNRF0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcG1kIHdoaWNoIHdvdWxkCisgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwbWRfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAoYWRkcmVzcyA+PiBQTURfU0hJRlQpICYgKFBUUlNfUEVSX1BNRCAtIDEpOworfQorCisvKgorICogQSBnaXZlbiBrZXJuZWwgcG1kX3QgbWFwcyB0byBhIHNwZWNpZmljIHZpcnR1YWwgYWRkcmVzcyAoZWl0aGVyIGEKKyAqIGtlcm5lbCBodWdlIHBhZ2Ugb3IgYSBrZXJuZWwgcHRlX3QgdGFibGUpLiAgU2luY2Uga2VybmVsIHB0ZV90CisgKiB0YWJsZXMgY2FuIGJlIGFsaWduZWQgYXQgc3ViLXBhZ2UgZ3JhbnVsYXJpdHksIHRoaXMgZnVuY3Rpb24gY2FuCisgKiByZXR1cm4gbm9uLXBhZ2UtYWxpZ25lZCBwb2ludGVycywgZGVzcGl0ZSBpdHMgbmFtZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZCkKK3sKKwlwaHlzX2FkZHJfdCBwYSA9CisJCShwaHlzX2FkZHJfdClwbWRfcHRmbihwbWQpIDw8IEhWX0xPRzJfUEFHRV9UQUJMRV9BTElHTjsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShwYSk7Cit9CisKKy8qCisgKiBBIHBtZF90IHBvaW50cyB0byB0aGUgYmFzZSBvZiBhIGh1Z2UgcGFnZSBvciB0byBhIHB0ZV90IGFycmF5LgorICogSWYgYSBwdGVfdCBhcnJheSwgc2luY2Ugd2UgY2FuIGhhdmUgbXVsdGlwbGUgcGVyIHBhZ2UsIHdlIGRvbid0CisgKiBoYXZlIGEgb25lLXRvLW9uZSBtYXBwaW5nIG9mIHBtZF90J3MgdG8gcGFnZXMuICBIb3dldmVyLCB0aGlzIGlzCisgKiBPSyBmb3IgcHRlX2xvY2twdHIoKSwgc2luY2Ugd2UganVzdCBlbmQgdXAgd2l0aCBwb3RlbnRpYWxseSBvbmUKKyAqIGxvY2sgYmVpbmcgdXNlZCBmb3Igc2V2ZXJhbCBwdGVfdCBhcnJheXMuCisgKi8KKyNkZWZpbmUgcG1kX3BhZ2UocG1kKSBwZm5fdG9fcGFnZShIVl9QVEZOX1RPX1BGTihwbWRfcHRmbihwbWQpKSkKKworLyoKKyAqIFRoZSBwdGUgcGFnZSBjYW4gYmUgdGhvdWdodCBvZiBhbiBhcnJheSBsaWtlIHRoaXM6IHB0ZV90W1BUUlNfUEVSX1BURV0KKyAqCisgKiBUaGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcHRlIHBhZ2Ugd2hpY2ggd291bGQKKyAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfb2Zmc2V0X2tlcm5lbChwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisgICAgICAgcmV0dXJuIChwdGVfdCAqKXBtZF9wYWdlX3ZhZGRyKCpwbWQpICsgcHRlX2luZGV4KGFkZHJlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbWRfaHVnZV9wYWdlKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gcG1kX3ZhbChwbWQpICYgX1BBR0VfSFVHRV9QQUdFOworfQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgorCisvKiBTdXBwb3J0IC9wcm9jL05OL3BndGFibGUgQVBJLiAqLworc3RydWN0IHNlcV9maWxlOworaW50IGFyY2hfcHJvY19wZ3RhYmxlX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHB0ZV90ICpwdGVwLCB2b2lkICoqZGF0YXApOworCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX1BHVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlYzM0OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1BHVEFCTEVfMzJfSAorI2RlZmluZSBfQVNNX1RJTEVfUEdUQUJMRV8zMl9ICisKKy8qCisgKiBUaGUgbGV2ZWwtMSBpbmRleCBpcyBkZWZpbmVkIGJ5IHRoZSBodWdlIHBhZ2Ugc2l6ZS4gIEEgUEdEIGlzIGNvbXBvc2VkCisgKiBvZiBQVFJTX1BFUl9QR0QgcGdkX3QncyBhbmQgaXMgdGhlIHRvcCBsZXZlbCBvZiB0aGUgcGFnZSB0YWJsZS4KKyAqLworI2RlZmluZSBQR0RJUl9TSElGVAlIVl9MT0cyX1BBR0VfU0laRV9MQVJHRQorI2RlZmluZSBQR0RJUl9TSVpFCUhWX1BBR0VfU0laRV9MQVJHRQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMSA8PCAoMzIgLSBQR0RJUl9TSElGVCkpCisKKy8qCisgKiBUaGUgbGV2ZWwtMiBpbmRleCBpcyBkZWZpbmVkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGh1Z2UKKyAqIHBhZ2Ugc2l6ZSBhbmQgdGhlIG5vcm1hbCBwYWdlIHNpemUuICBBIFBURSBpcyBjb21wb3NlZCBvZgorICogUFRSU19QRVJfUFRFIHB0ZV90J3MgYW5kIGlzIHRoZSBib3R0b20gbGV2ZWwgb2YgdGhlIHBhZ2UgdGFibGUuCisgKiBOb3RlIHRoYXQgdGhlIGh5cGVydmlzb3IgZG9jcyB1c2UgUFRFIGZvciB3aGF0IHdlIGNhbGwgcHRlX3QsIHNvCisgKiB0aGlzIG5vbWVuY2xhdHVyZSBpcyBzb21ld2hhdCBjb25mdXNpbmcuCisgKi8KKyNkZWZpbmUgUFRSU19QRVJfUFRFICgxIDw8IChIVl9MT0cyX1BBR0VfU0laRV9MQVJHRSAtIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIFJpZ2h0IG5vdyB3ZSBpbml0aWFsaXplIG9ubHkgYSBzaW5nbGUgcHRlIHRhYmxlLiBJdCBjYW4gYmUgZXh0ZW5kZWQKKyAqIGVhc2lseSwgc3Vic2VxdWVudCBwdGUgdGFibGVzIGhhdmUgdG8gYmUgYWxsb2NhdGVkIGluIG9uZSBwaHlzaWNhbAorICogY2h1bmsgb2YgUkFNLgorICoKKyAqIEhPV0VWRVIsIGlmIHdlIGFyZSB1c2luZyBhbiBhbGxvY2F0aW9uIHNjaGVtZSB3aXRoIHNsb3AgYWZ0ZXIgdGhlCisgKiBlbmQgb2YgdGhlIHBhZ2UgdGFibGUgKGUuZy4gd2hlcmUgb3VyIEwyIHBhZ2UgdGFibGVzIGFyZSAyS0IgYnV0CisgKiBvdXIgcGFnZXMgYXJlIDY0S0IgYW5kIHdlIGFyZSBhbGxvY2F0aW5nIHZpYSB0aGUgcGFnZSBhbGxvY2F0b3IpCisgKiB3ZSBjYW4ndCBleHRlbmQgaXQgZWFzaWx5LgorICovCisjZGVmaW5lIExBU1RfUEtNQVAgUFRSU19QRVJfUFRFCisKKyNkZWZpbmUgUEtNQVBfQkFTRSAgICgoRklYQUREUl9CT09UX1NUQVJUIC0gUEFHRV9TSVpFKkxBU1RfUEtNQVApICYgUEdESVJfTUFTSykKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisjIGRlZmluZSBfX1ZNQVBQSU5HX0VORAkoUEtNQVBfQkFTRSAmIH4oSFBBR0VfU0laRS0xKSkKKyNlbHNlCisjIGRlZmluZSBfX1ZNQVBQSU5HX0VORAkoRklYQUREUl9TVEFSVCAmIH4oSFBBR0VfU0laRS0xKSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hVR0VWTUFQCisjZGVmaW5lIEhVR0VfVk1BUF9FTkQJX19WTUFQUElOR19FTkQKKyNkZWZpbmUgSFVHRV9WTUFQX0JBU0UJKEhVR0VfVk1BUF9FTkQgLSBDT05GSUdfTlJfSFVHRV9WTUFQUyAqIEhQQUdFX1NJWkUpCisjZGVmaW5lIF9WTUFMTE9DX0VORAlIVUdFX1ZNQVBfQkFTRQorI2Vsc2UKKyNkZWZpbmUgX1ZNQUxMT0NfRU5ECV9fVk1BUFBJTkdfRU5ECisjZW5kaWYKKworLyoKKyAqIEFsaWduIHRoZSB2bWFsbG9jIGFyZWEgdG8gYW4gTDIgcGFnZSB0YWJsZSwgYW5kIGxlYXZlIGEgZ3VhcmQgcGFnZQorICogYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kLiAgVGhlIHZtYWxsb2MgY29kZSBhbHNvIHB1dHMgaW4gYW4gaW50ZXJuYWwKKyAqIGd1YXJkIHBhZ2UgYmV0d2VlbiBlYWNoIGFsbG9jYXRpb24uCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQJKF9WTUFMTE9DX0VORCAtIFBBR0VfU0laRSkKK2V4dGVybiB1bnNpZ25lZCBsb25nIFZNQUxMT0NfUkVTRVJWRSAvKiA9IENPTkZJR19WTUFMTE9DX1JFU0VSVkUgKi87CisjZGVmaW5lIF9WTUFMTE9DX1NUQVJUCShfVk1BTExPQ19FTkQgLSBWTUFMTE9DX1JFU0VSVkUpCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQJKF9WTUFMTE9DX1NUQVJUICsgUEFHRV9TSVpFKQorCisvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGFtb3VudCBvZiBsb3dtZW0uICovCisjZGVmaW5lIE1BWE1FTQkJKF9WTUFMTE9DX1NUQVJUIC0gUEFHRV9PRkZTRVQpCisKKy8qIFdlIGhhdmUgbm8gcG1kIG9yIHB1ZCBzaW5jZSB3ZSBhcmUgc3RyaWN0bHkgYSB0d28tbGV2ZWwgcGFnZSB0YWJsZSAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KKworLyogV2UgZG9uJ3QgZGVmaW5lIGFueSBwZ2RzIGZvciB0aGVzZSBhZGRyZXNzZXMuICovCitzdGF0aWMgaW5saW5lIGludCBwZ2RfYWRkcl9pbnZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gYWRkciA+PSBNRU1fSFZfSU5UUlBUOworfQorCisvKgorICogUHJvdmlkZSB2ZXJzaW9ucyBvZiB0aGVzZSByb3V0aW5lcyB0aGF0IGNhbiBiZSB1c2VkIHNhZmVseSB3aGVuCisgKiB0aGUgaHlwZXJ2aXNvciBtYXkgYmUgYXN5bmNocm9ub3VzbHkgbW9kaWZ5aW5nIGRpcnR5L2FjY2Vzc2VkIGJpdHMuCisgKiBwdGVwX2dldF9hbmRfY2xlYXIoKSBtYXRjaGVzIHRoZSBnZW5lcmljIG9uZSBidXQgd2UgcHJvdmlkZSBpdCB0bworICogYmUgcGFyYWxsZWwgd2l0aCB0aGUgNjQtYml0IGNvZGUuCisgKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCisKK2V4dGVybiBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKik7CitleHRlcm4gdm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKik7CisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKK3sKKwlwdGVfdCBwdGUgPSAqcHRlcDsKKwlwdGVfY2xlYXIoX21tLCBhZGRyLCBwdGVwKTsKKwlyZXR1cm4gcHRlOworfQorCisvKiBDcmVhdGUgYSBwbWQgZnJvbSBhIFBURk4uICovCitzdGF0aWMgaW5saW5lIHBtZF90IHB0Zm5fcG1kKHVuc2lnbmVkIGxvbmcgcHRmbiwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gKHBtZF90KXsgeyBodl9wdGVfc2V0X3B0Zm4ocHJvdCwgcHRmbikgfSB9OworfQorCisvKiBSZXR1cm4gdGhlIHBhZ2UtdGFibGUgZnJhbWUgbnVtYmVyIChwdGZuKSB0aGF0IGEgcG1kX3QgcG9pbnRzIGF0LiAqLworI2RlZmluZSBwbWRfcHRmbihwbWQpIGh2X3B0ZV9nZXRfcHRmbigocG1kKS5wdWQucGdkKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2NsZWFyKHBtZF90ICpwbWRwKQoreworCV9fcHRlX2NsZWFyKCZwbWRwLT5wdWQucGdkKTsKK30KKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX1BHVEFCTEVfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4NTA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb2xsLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BvbGwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYWU2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb3NpeF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfUFJPQ0VTU09SX0gKKyNkZWZpbmUgX0FTTV9USUxFX1BST0NFU1NPUl9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qCisgKiBOT1RFOiB3ZSBkb24ndCBpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4gb3IgPGxpbnV4L3BlcmNwdS5oPiBhcyBvbmUKKyAqIG5vcm1hbGx5IHdvdWxkLCBkdWUgdG8gI2luY2x1ZGUgZGVwZW5kZW5jaWVzLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKK3N0cnVjdCB0aHJlYWRfc3RydWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzZWc7Cit9IG1tX3NlZ21lbnRfdDsKKworLyoKKyAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFjcm8gdGhhdCByZXR1cm5zIGN1cnJlbnQKKyAqIGluc3RydWN0aW9uIHBvaW50ZXIgKCJwcm9ncmFtIGNvdW50ZXIiKS4KKyAqLwordm9pZCAqY3VycmVudF90ZXh0X2FkZHIodm9pZCk7CisKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpCisvKiBDYXB0dXJlIHRoZSBzdGF0ZSBvZiBhIHN1c3BlbmRlZCBETUEuICovCitzdHJ1Y3QgdGlsZV9kbWFfc3RhdGUgeworCWludCBlbmFibGVkOworCXVuc2lnbmVkIGxvbmcgc3JjOworCXVuc2lnbmVkIGxvbmcgZGVzdDsKKwl1bnNpZ25lZCBsb25nIHN0cmlkZXM7CisJdW5zaWduZWQgbG9uZyBjaHVua19zaXplOworCXVuc2lnbmVkIGxvbmcgc3JjX2NodW5rOworCXVuc2lnbmVkIGxvbmcgZGVzdF9jaHVuazsKKwl1bnNpZ25lZCBsb25nIGJ5dGU7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7Cit9OworCisvKgorICogQSBtYXNrIG9mIHRoZSBETUEgc3RhdHVzIHJlZ2lzdGVyIGZvciBzZWxlY3Rpbmcgb25seSB0aGUgJ3J1bm5pbmcnCisgKiBhbmQgJ2RvbmUnIGJpdHMuCisgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19NQVNLIFwKKyAgKFNQUl9ETUFfU1RBVFVTX19SVU5OSU5HX01BU0sgfCBTUFJfRE1BX1NUQVRVU19fRE9ORV9NQVNLKQorI2VuZGlmCisKKy8qCisgKiBUcmFjayBhc3luY2hyb25vdXMgVExCIGV2ZW50cyAoZmF1bHRzIGFuZCBhY2Nlc3MgdmlvbGF0aW9ucykKKyAqIHRoYXQgb2NjdXIgd2hpbGUgd2UgYXJlIGluIGtlcm5lbCBtb2RlIGZyb20gRE1BIG9yIHRoZSBTTiBwcm9jZXNzb3IuCisgKi8KK3N0cnVjdCBhc3luY190bGIgeworCXNob3J0IGZhdWx0X251bTsgICAgICAgICAvKiBvcmlnaW5hbCBmYXVsdCBudW1iZXI7IDAgaWYgbm9uZSAqLworCWNoYXIgaXNfZmF1bHQ7ICAgICAgICAgICAvKiB3YXMgaXQgYSBmYXVsdCAodnMgYW4gYWNjZXNzIHZpb2xhdGlvbikgKi8KKwljaGFyIGlzX3dyaXRlOyAgICAgICAgICAgLyogZm9yIGZhdWx0OiB3YXMgaXQgY2F1c2VkIGJ5IGEgd3JpdGU/ICovCisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOyAgIC8qIHdoYXQgYWRkcmVzcyBmYXVsdGVkPyAqLworfTsKKworI2lmZGVmIENPTkZJR19IQVJEV0FMTAorc3RydWN0IGhhcmR3YWxsX2luZm87CisjZW5kaWYKKworc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworCS8qIGtlcm5lbCBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAga3NwOworCS8qIGtlcm5lbCBQQyAqLworCXVuc2lnbmVkIGxvbmcgIHBjOworCS8qIHN0YXJ0aW5nIHVzZXIgc3RhY2sgcG9pbnRlciAoZm9yIHBhZ2UgbWlncmF0aW9uKSAqLworCXVuc2lnbmVkIGxvbmcgIHVzcDA7CisJLyogcGlkIG9mIHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoaXMgb25lICovCisJcGlkX3QgY3JlYXRvcl9waWQ7CisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCS8qIERNQSBpbmZvIGZvciBzdXNwZW5kZWQgdGhyZWFkcyAoYnl0ZSA9PSAwIG1lYW5zIG5vIERNQSBzdGF0ZSkgKi8KKwlzdHJ1Y3QgdGlsZV9kbWFfc3RhdGUgdGlsZV9kbWFfc3RhdGU7CisjZW5kaWYKKwkvKiBVc2VyIEVYX0NPTlRFWFQgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBleF9jb250ZXh0WzJdOworCS8qIFVzZXIgU1lTVEVNX1NBVkUgcmVnaXN0ZXJzICovCisJdW5zaWduZWQgbG9uZyBzeXN0ZW1fc2F2ZVs0XTsKKwkvKiBVc2VyIGludGVycnVwdCBtYXNrICovCisJdW5zaWduZWQgbG9uZyBsb25nIGludGVycnVwdF9tYXNrOworCS8qIFVzZXIgaW50ZXJydXB0LWNvbnRyb2wgMCBzdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcgaW50Y3RybF8wOworI2lmIENISVBfSEFTX1BST0NfU1RBVFVTX1NQUigpCisJLyogQW55IG90aGVyIG1pc2NlbGxhbmVvdXMgcHJvY2Vzc29yIHN0YXRlIGJpdHMgKi8KKwl1bnNpZ25lZCBsb25nIHByb2Nfc3RhdHVzOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hBUkRXQUxMCisJLyogSXMgdGhpcyB0YXNrIHRpZWQgdG8gYW4gYWN0aXZhdGVkIGhhcmR3YWxsPyAqLworCXN0cnVjdCBoYXJkd2FsbF9pbmZvICpoYXJkd2FsbDsKKwkvKiBDaGFpbnMgdGhpcyB0YXNrIGludG8gdGhlIGxpc3QgYXQgaGFyZHdhbGwtPmxpc3QuICovCisJc3RydWN0IGxpc3RfaGVhZCBoYXJkd2FsbF9saXN0OworI2VuZGlmCisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCS8qIEFzeW5jIERNQSBUTEIgZmF1bHQgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgYXN5bmNfdGxiIGRtYV9hc3luY190bGI7CisjZW5kaWYKKyNpZiBDSElQX0hBU19TTl9QUk9DKCkKKwkvKiBXYXMgc3RhdGljIG5ldHdvcmsgcHJvY2Vzc29yIHdoZW4gd2Ugd2VyZSBzd2l0Y2hlZCBvdXQ/ICovCisJaW50IHNuX3Byb2NfcnVubmluZzsKKwkvKiBBc3luYyBTTkkgVExCIGZhdWx0IGluZm9ybWF0aW9uICovCisJc3RydWN0IGFzeW5jX3RsYiBzbl9hc3luY190bGI7CisjZW5kaWYKK307CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBTdGFydCB3aXRoICJzcCIgdGhpcyBtYW55IGJ5dGVzIGJlbG93IHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBzdGFjay4KKyAqIFRoaXMgcHJlc2VydmVzIHRoZSBpbnZhcmlhbnQgdGhhdCBhIGNhbGxlZCBmdW5jdGlvbiBtYXkgd3JpdGUgdG8gKnNwLgorICovCisjZGVmaW5lIFNUQUNLX1RPUF9ERUxUQSA4CisKKy8qCisgKiBXaGVuIGVudGVyaW5nIHRoZSBrZXJuZWwgdmlhIGEgZmF1bHQsIHN0YXJ0IHdpdGggdGhlIHRvcCBvZiB0aGUKKyAqIHB0X3JlZ3Mgc3RydWN0dXJlIHRoaXMgbWFueSBieXRlcyBiZWxvdyB0aGUgdG9wIG9mIHRoZSBwYWdlLgorICogVGhpcyBhbGlnbnMgdGhlIHB0X3JlZ3Mgc3RydWN0dXJlIG9wdGltYWxseSBmb3IgY2FjaGUtbGluZSBhY2Nlc3MuCisgKi8KKyNpZmRlZiBfX3RpbGVneF9fCisjZGVmaW5lIEtTVEtfUFRSRUdTX0dBUCAgNDgKKyNlbHNlCisjZGVmaW5lIEtTVEtfUFRSRUdTX0dBUCAgNTYKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBUQVNLX1NJWkVfTUFYCQkoTUVNX0xPV19FTkQgKyAxKQorI2Vsc2UKKyNkZWZpbmUgVEFTS19TSVpFX01BWAkJUEFHRV9PRkZTRVQKKyNlbmRpZgorCisvKiBUQVNLX1NJWkUgYW5kIHJlbGF0ZWQgdmFyaWFibGVzIGFyZSBhbHdheXMgY2hlY2tlZCBpbiAiY3VycmVudCIgY29udGV4dC4gKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lIENPTVBBVF9UQVNLX1NJWkUJKDFVTCA8PCAzMSkKKyNkZWZpbmUgVEFTS19TSVpFCQkoKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICYgVFNfQ09NUEFUKSA/XAorCQkJCSBDT01QQVRfVEFTS19TSVpFIDogVEFTS19TSVpFX01BWCkKKyNlbHNlCisjZGVmaW5lIFRBU0tfU0laRQkJVEFTS19TSVpFX01BWAorI2VuZGlmCisKKy8qIFdlIHByb3ZpZGUgYSBtaW5pbWFsICJ2ZHNvIiBhIGxhIHg4NjsganVzdCB0aGUgc2lncmV0dXJuIGNvZGUgZm9yIG5vdy4gKi8KKyNkZWZpbmUgVkRTT19CQVNFCQkoVEFTS19TSVpFIC0gUEFHRV9TSVpFKQorCisjZGVmaW5lIFNUQUNLX1RPUAkJVkRTT19CQVNFCisKKy8qIFNUQUNLX1RPUF9NQVggaXMgdXNlZCB0ZW1wb3JhcmlseSBpbiBleGVjdmUgYW5kIHNob3VsZCBub3QgY2hlY2sgQ09NUEFULiAqLworI2RlZmluZSBTVEFDS19UT1BfTUFYCQlUQVNLX1NJWkVfTUFYCisKKy8qCisgKiBUaGlzIGRlY2lkZXMgd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHNlYXJjaCBmb3IgYSBmcmVlIGNodW5rIG9mIHZtCisgKiBzcGFjZSBkdXJpbmcgbW1hcCdzLCBpZiBpdCBpcyB1c2luZyBib3R0b20tdXAgbWFwcGluZy4KKyAqLworI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UJKFBBR0VfQUxJR04oVEFTS19TSVpFIC8gMykpCisKKyNkZWZpbmUgSEFWRV9BUkNIX1BJQ0tfTU1BUF9MQVlPVVQKKworI2RlZmluZSBJTklUX1RIUkVBRCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS5rc3AgPSAodW5zaWduZWQgbG9uZylpbml0X3N0YWNrICsgVEhSRUFEX1NJWkUgLSBTVEFDS19UT1BfREVMVEEsIFwKKwkuaW50ZXJydXB0X21hc2sgPSAtMVVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvKiBLZXJuZWwgc3RhY2sgdG9wIGZvciB0aGUgdGFzayB0aGF0IGZpcnN0IGJvb3RzIG9uIHRoaXMgY3B1LiAqLworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGJvb3Rfc3ApOworCisvKiBQQyB0byBib290IGZyb20gb24gdGhpcyBjcHUuICovCitERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgYm9vdF9wYyk7CisKKy8qIERvIG5lY2Vzc2FyeSBzZXR1cCB0byBzdGFydCB1cCBhIG5ld2x5IGV4ZWN1dGVkIHRocmVhZC4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF90aHJlYWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyB1c3ApCit7CisJcmVncy0+cGMgPSBwYzsKKwlyZWdzLT5zcCA9IHVzcDsKK30KKworLyogRnJlZSBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgYSB0aHJlYWQuICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spCit7CisJLyogTm90aGluZyBmb3Igbm93ICovCit9CisKKy8qIFByZXBhcmUgdG8gY29weSB0aHJlYWQgc3RhdGUgLSB1bmxhenkgYWxsIGxhenkgc3RhdHVzLiAqLworI2RlZmluZSBwcmVwYXJlX3RvX2NvcHkodHNrKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworCisvKgorICogUmV0dXJuIHNhdmVkIChrZXJuZWwpIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCisgKiBPbmx5IHVzZWQgaW4gYSBwcmludGsoKSBpbiBrZXJuZWwvc2NoZWQuYywgc28gZG9uJ3Qgd29yayB0b28gaGFyZC4KKyAqLworI2RlZmluZSB0aHJlYWRfc2F2ZWRfcGModCkgICAoKHQpLT50aHJlYWQucGMpCisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CisKKy8qIFJldHVybiBpbml0aWFsIGtzcCB2YWx1ZSBmb3IgZ2l2ZW4gdGFzay4gKi8KKyNkZWZpbmUgdGFza19rc3AwKHRhc2spICgodW5zaWduZWQgbG9uZykodGFzayktPnN0YWNrICsgVEhSRUFEX1NJWkUpCisKKy8qIFJldHVybiBzb21lIGluZm8gYWJvdXQgdGhlIHVzZXIgcHJvY2VzcyBUQVNLLiAqLworI2RlZmluZSBLU1RLX1RPUCh0YXNrKQkodGFza19rc3AwKHRhc2spIC0gU1RBQ0tfVE9QX0RFTFRBKQorI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAorICAoKHN0cnVjdCBwdF9yZWdzICopKHRhc2tfa3NwMCh0YXNrKSAtIEtTVEtfUFRSRUdTX0dBUCkgLSAxKQorI2RlZmluZSB0YXNrX3NwKHRhc2spCSh0YXNrX3B0X3JlZ3ModGFzayktPnNwKQorI2RlZmluZSB0YXNrX3BjKHRhc2spCSh0YXNrX3B0X3JlZ3ModGFzayktPnBjKQorLyogQWxpYXNlcyBmb3IgcGMgYW5kIHNwICh1c2VkIGluIGZzL3Byb2MvYXJyYXkuYykgKi8KKyNkZWZpbmUgS1NUS19FSVAodGFzaykJdGFza19wYyh0YXNrKQorI2RlZmluZSBLU1RLX0VTUCh0YXNrKQl0YXNrX3NwKHRhc2spCisKKy8qIFN0YW5kYXJkIGZvcm1hdCBmb3IgcHJpbnRpbmcgcmVnaXN0ZXJzIGFuZCBvdGhlciB3b3JkLXNpemUgZGF0YS4gKi8KKyNpZmRlZiBfX3RpbGVneF9fCisjIGRlZmluZSBSRUdGTVQgIjB4JTAxNmx4IgorI2Vsc2UKKyMgZGVmaW5lIFJFR0ZNVCAiMHglMDhseCIKKyNlbmRpZgorCisvKgorICogRG8gc29tZSBzbG93IGFjdGlvbiAoZS5nLiByZWFkIGEgc2xvdyBTUFIpLgorICogTm90ZSB0aGF0IHRoaXMgbXVzdCBhbHNvIGhhdmUgY29tcGlsZXItYmFycmllciBzZW1hbnRpY3Mgc2luY2UKKyAqIGl0IG1heSBiZSB1c2VkIGluIGEgYnVzeSBsb29wIHJlYWRpbmcgbWVtb3J5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCit7CisJX19pbnNuX21mc3ByKFNQUl9QQVNTKTsKKwliYXJyaWVyKCk7Cit9CisKK3N0cnVjdCBzaWdpbmZvOworZXh0ZXJuIHZvaWQgYXJjaF9jb3JlZHVtcF9zaWduYWwoc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHB0X3JlZ3MgKik7CisjZGVmaW5lIGFyY2hfY29yZWR1bXBfc2lnbmFsIGFyY2hfY29yZWR1bXBfc2lnbmFsCisKKy8qIEluZm8gb24gdGhpcyBwcm9jZXNzb3IgKHNlZSBmcy9wcm9jL2NwdWluZm8uYykgKi8KK3N0cnVjdCBzZXFfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcDsKKworLyogUHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2hpcCBtb2RlbC4gKi8KK2V4dGVybiBjaGFyIGNoaXBfbW9kZWxbNjRdOworCisvKiBEYXRhIG9uIHdoaWNoIHBoeXNpY2FsIG1lbW9yeSBjb250cm9sbGVyIGNvcnJlc3BvbmRzIHRvIHdoaWNoIE5VTUEgbm9kZS4gKi8KK2V4dGVybiBpbnQgbm9kZV9jb250cm9sbGVyW107CisKKworLyogRG8gd2UgZHVtcCBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZSB3aGVuIGEgdXNlciBhcHBsaWNhdGlvbiBjcmFzaGVzPyAqLworZXh0ZXJuIGludCBzaG93X2NyYXNoaW5mbzsKKworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorLyogRG9lcyB0aGUgaGVhcCBhbGxvY2F0b3IgcmV0dXJuIGhhc2gtZm9yLWhvbWUgcGFnZXMgYnkgZGVmYXVsdD8gKi8KK2V4dGVybiBpbnQgaGFzaF9kZWZhdWx0OworCisvKiBTaG91bGQga2VybmVsIHN0YWNrIHBhZ2VzIGJlIGhhc2gtZm9yLWhvbWU/ICovCitleHRlcm4gaW50IGtzdGFja19oYXNoOworCisvKiBEb2VzIE1BUF9BTk9OWU1PVVMgcmV0dXJuIGhhc2gtZm9yLWhvbWUgcGFnZXMgYnkgZGVmYXVsdD8gKi8KKyNkZWZpbmUgdWhlYXBfaGFzaCBoYXNoX2RlZmF1bHQKKworI2Vsc2UKKyNkZWZpbmUgaGFzaF9kZWZhdWx0IDAKKyNkZWZpbmUga3N0YWNrX2hhc2ggMAorI2RlZmluZSB1aGVhcF9oYXNoIDAKKyNlbmRpZgorCisvKiBBcmUgd2UgdXNpbmcgaHVnZSBwYWdlcyBpbiB0aGUgVExCIGZvciBrZXJuZWwgZGF0YT8gKi8KK2V4dGVybiBpbnQga2RhdGFfaHVnZTsKKworI2RlZmluZSBQUkVGRVRDSF9TVFJJREUgQ0hJUF9MMl9MSU5FX1NJWkUoKQorCisjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogRG8gc29tZSBzbG93IGFjdGlvbiAoZS5nLiByZWFkIGEgc2xvdyBTUFIpLiAqLworI2RlZmluZSBDUFVfUkVMQVggICAgICAgbWZzcHIgemVybywgU1BSX1BBU1MKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworLyogQXNzZW1ibHkgY29kZSBhc3N1bWVzIHRoYXQgdGhlIFBMIGlzIGluIHRoZSBsb3cgYml0cy4gKi8KKyNpZiBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX1NISUZUICE9IDAKKyMgZXJyb3IgRml4IGFzc2VtYmx5IGFzc3VtcHRpb25zIGFib3V0IFBMCisjZW5kaWYKKworLyogV2Ugc29tZXRpbWVzIHVzZSB0aGVzZSBtYWNyb3MgZm9yIEVYX0NPTlRFWFRfMF8xIGFzIHdlbGwuICovCisjaWYgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9TSElGVCAhPSBTUFJfRVhfQ09OVEVYVF8wXzFfX1BMX1NISUZUIHx8IFwKKyAgICBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX1JNQVNLICE9IFNQUl9FWF9DT05URVhUXzBfMV9fUExfUk1BU0sgfHwgXAorICAgIFNQUl9FWF9DT05URVhUXzFfMV9fSUNTX1NISUZUICE9IFNQUl9FWF9DT05URVhUXzBfMV9fSUNTX1NISUZUIHx8IFwKKyAgICBTUFJfRVhfQ09OVEVYVF8xXzFfX0lDU19STUFTSyAhPSBTUFJfRVhfQ09OVEVYVF8wXzFfX0lDU19STUFTSworIyBlcnJvciBGaXggYXNzdW1wdGlvbnMgdGhhdCBFWDEgbWFjcm9zIHdvcmsgZm9yIGJvdGggUEwwIGFuZCBQTDEKKyNlbmRpZgorCisvKiBBbGxvdyBwdWxsaW5nIGFwYXJ0IGFuZCByZWNvbWJpbmluZyB0aGUgUEwgYW5kIElDUyBiaXRzIGluIEVYX0NPTlRFWFQuICovCisjZGVmaW5lIEVYMV9QTChleDEpIFwKKyAgKCgoZXgxKSA+PiBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX1NISUZUKSAmIFNQUl9FWF9DT05URVhUXzFfMV9fUExfUk1BU0spCisjZGVmaW5lIEVYMV9JQ1MoZXgxKSBcCisgICgoKGV4MSkgPj4gU1BSX0VYX0NPTlRFWFRfMV8xX19JQ1NfU0hJRlQpICYgU1BSX0VYX0NPTlRFWFRfMV8xX19JQ1NfUk1BU0spCisjZGVmaW5lIFBMX0lDU19FWDEocGwsIGljcykgXAorICAoKChwbCkgPDwgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9TSElGVCkgfCBcCisgICAoKGljcykgPDwgU1BSX0VYX0NPTlRFWFRfMV8xX19JQ1NfU0hJRlQpKQorCisvKgorICogUHJvdmlkZSBzeW1ib2xpYyBjb25zdGFudHMgZm9yIFBMcy4KKyAqIE5vdGUgdGhhdCBhc3NlbWJseSBjb2RlIGFzc3VtZXMgdGhhdCBVU0VSX1BMIGlzIHplcm8uCisgKi8KKyNkZWZpbmUgVVNFUl9QTCAwCisjZGVmaW5lIEtFUk5FTF9QTCAxCisKKy8qIFNZU1RFTV9TQVZFXzFfMCBob2xkcyB0aGUgY3VycmVudCBjcHUgbnVtYmVyIE9SZWQgd2l0aCBrc3AwLiAqLworI2RlZmluZSBDUFVfTE9HX01BU0tfVkFMVUUgMTIKKyNkZWZpbmUgQ1BVX01BU0tfVkFMVUUgKCgxIDw8IENQVV9MT0dfTUFTS19WQUxVRSkgLSAxKQorI2lmIENPTkZJR19OUl9DUFVTID4gQ1BVX01BU0tfVkFMVUUKKyMgZXJyb3IgVG9vIG1hbnkgY3B1cyEKKyNlbmRpZgorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIFwKKwkoKGludClfX2luc25fbWZzcHIoU1BSX1NZU1RFTV9TQVZFXzFfMCkgJiBDUFVfTUFTS19WQUxVRSkKKyNkZWZpbmUgZ2V0X2N1cnJlbnRfa3NwMCgpIFwKKwkoX19pbnNuX21mc3ByKFNQUl9TWVNURU1fU0FWRV8xXzApICYgfkNQVV9NQVNLX1ZBTFVFKQorI2RlZmluZSBuZXh0X2N1cnJlbnRfa3NwMCh0YXNrKSAoeyBcCisJdW5zaWduZWQgbG9uZyBfX2tzcDAgPSB0YXNrX2tzcDAodGFzayk7IFwKKwlpbnQgX19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOyBcCisJQlVHX09OKF9fa3NwMCAmIENQVV9NQVNLX1ZBTFVFKTsgXAorCV9fa3NwMCB8IF9fY3B1OyBcCit9KQorCisjZW5kaWYgLyogX0FTTV9USUxFX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYWU4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9QVFJBQ0VfSAorI2RlZmluZSBfQVNNX1RJTEVfUFRSQUNFX0gKKworI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorI2luY2x1ZGUgPGFyY2gvYWJpLmg+CisKKy8qIFRoZXNlIG11c3QgbWF0Y2ggc3RydWN0IHB0X3JlZ3MsIGJlbG93LiAqLworI2lmIENISVBfV09SRF9TSVpFKCkgPT0gMzIKKyNkZWZpbmUgUFRSRUdTX09GRlNFVF9SRUcobikgICAgKChuKSo0KQorI2Vsc2UKKyNkZWZpbmUgUFRSRUdTX09GRlNFVF9SRUcobikgICAgKChuKSo4KQorI2VuZGlmCisjZGVmaW5lIFBUUkVHU19PRkZTRVRfQkFTRSAgICAgIDAKKyNkZWZpbmUgUFRSRUdTX09GRlNFVF9UUCAgICAgICAgUFRSRUdTX09GRlNFVF9SRUcoNTMpCisjZGVmaW5lIFBUUkVHU19PRkZTRVRfU1AgICAgICAgIFBUUkVHU19PRkZTRVRfUkVHKDU0KQorI2RlZmluZSBQVFJFR1NfT0ZGU0VUX0xSICAgICAgICBQVFJFR1NfT0ZGU0VUX1JFRyg1NSkKKyNkZWZpbmUgUFRSRUdTX05SX0dQUlMgICAgICAgICAgNTYKKyNkZWZpbmUgUFRSRUdTX09GRlNFVF9QQyAgICAgICAgUFRSRUdTX09GRlNFVF9SRUcoNTYpCisjZGVmaW5lIFBUUkVHU19PRkZTRVRfRVgxICAgICAgIFBUUkVHU19PRkZTRVRfUkVHKDU3KQorI2RlZmluZSBQVFJFR1NfT0ZGU0VUX0ZBVUxUTlVNICBQVFJFR1NfT0ZGU0VUX1JFRyg1OCkKKyNkZWZpbmUgUFRSRUdTX09GRlNFVF9PUklHX1IwICAgUFRSRUdTX09GRlNFVF9SRUcoNTkpCisjZGVmaW5lIFBUUkVHU19PRkZTRVRfRkxBR1MgICAgIFBUUkVHU19PRkZTRVRfUkVHKDYwKQorI2lmIENISVBfSEFTX0NNUEVYQ0goKQorI2RlZmluZSBQVFJFR1NfT0ZGU0VUX0NNUEVYQ0ggICBQVFJFR1NfT0ZGU0VUX1JFRyg2MSkKKyNlbmRpZgorI2RlZmluZSBQVFJFR1NfU0laRSAgICAgICAgICAgICBQVFJFR1NfT0ZGU0VUX1JFRyg2NCkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIEJlbmVmaXQgZnJvbSBjb25zaXN0ZW50IHVzZSBvZiAibG9uZyIgb24gYWxsIGNoaXBzLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0X3JlZ190OworI2Vsc2UKKy8qIFByb3ZpZGUgYXBwcm9wcmlhdGUgbGVuZ3RoIHR5cGUgdG8gdXNlcnNwYWNlIHJlZ2FyZGxlc3Mgb2YgLW0zMi8tbTY0LiAqLwordHlwZWRlZiB1aW50X3JlZ190IHB0X3JlZ190OworI2VuZGlmCisKKy8qCisgKiBUaGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZSBzdGFjayBkdXJpbmcgYQorICogc3lzdGVtIGNhbGwvZXhjZXB0aW9uLiAgSXQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOCBieXRlcyB0byBwcmVzZXJ2ZQorICogbm9ybWFsIHN0YWNrIGFsaWdubWVudCBydWxlcy4KKyAqCisgKiBNdXN0IHRyYWNrIDxzeXMvdWNvbnRleHQuaD4gYW5kIDxzeXMvcHJvY2ZzLmg+CisgKi8KK3N0cnVjdCBwdF9yZWdzIHsKKwkvKiBTYXZlZCBtYWluIHByb2Nlc3NvciByZWdpc3RlcnM7IDU2Li42MyBhcmUgc3BlY2lhbC4gKi8KKwkvKiB0cCwgc3AsIGFuZCBsciBtdXN0IGltbWVkaWF0ZWx5IGZvbGxvdyByZWdzW10gZm9yIGFsaWFzaW5nLiAqLworCXB0X3JlZ190IHJlZ3NbNTNdOworCXB0X3JlZ190IHRwOwkJLyogYWxpYXNlcyByZWdzW1RSRUdfVFBdICovCisJcHRfcmVnX3Qgc3A7CQkvKiBhbGlhc2VzIHJlZ3NbVFJFR19TUF0gKi8KKwlwdF9yZWdfdCBscjsJCS8qIGFsaWFzZXMgcmVnc1tUUkVHX0xSXSAqLworCisJLyogU2F2ZWQgc3BlY2lhbCByZWdpc3RlcnMuICovCisJcHRfcmVnX3QgcGM7CQkvKiBzdG9yZWQgaW4gRVhfQ09OVEVYVF8xXzAgKi8KKwlwdF9yZWdfdCBleDE7CQkvKiBzdG9yZWQgaW4gRVhfQ09OVEVYVF8xXzEgKFBMIGFuZCBJQ1MgYml0KSAqLworCXB0X3JlZ190IGZhdWx0bnVtOwkvKiBmYXVsdCBudW1iZXIgKElOVF9TV0lOVF8xIGZvciBzeXNjYWxsKSAqLworCXB0X3JlZ190IG9yaWdfcjA7CS8qIHIwIGF0IHN5c2NhbGwgZW50cnksIGVsc2UgemVybyAqLworCXB0X3JlZ190IGZsYWdzOwkJLyogZmxhZ3MgKHNlZSBiZWxvdykgKi8KKyNpZiAhQ0hJUF9IQVNfQ01QRVhDSCgpCisJcHRfcmVnX3QgcGFkWzNdOworI2Vsc2UKKwlwdF9yZWdfdCBjbXBleGNoOwkvKiB2YWx1ZSBvZiBDTVBFWENIX1ZBTFVFIFNQUiBhdCBpbnRlcnJ1cHQgKi8KKwlwdF9yZWdfdCBwYWRbMl07CisjZW5kaWYKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogRmxhZyBiaXRzIGluIHB0X3JlZ3MuZmxhZ3MgKi8KKyNkZWZpbmUgUFRfRkxBR1NfRElTQUJMRV9JUlEgICAgMSAgLyogb24gcmV0dXJuIHRvIGtlcm5lbCwgZGlzYWJsZSBpcnFzICovCisjZGVmaW5lIFBUX0ZMQUdTX0NBTExFUl9TQVZFUyAgIDIgIC8qIGNhbGxlci1zYXZlIHJlZ2lzdGVycyBhcmUgdmFsaWQgKi8KKyNkZWZpbmUgUFRfRkxBR1NfUkVTVE9SRV9SRUdTICAgNCAgLyogcmVzdG9yZSBjYWxsZWUtc2F2ZSByZWdzIG9uIHJldHVybiAqLworCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKKyNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUwkxNAorI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTCTE1CisKKy8qIFN1cHBvcnQgVElMRS1zcGVjaWZpYyBwdHJhY2Ugb3B0aW9ucywgd2l0aCBldmVudHMgc3RhcnRpbmcgYXQgMTYuICovCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFTUlHUkFURQkweDAwMDEwMDAwCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9NSUdSQVRFCTE2CisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBQVFJBQ0VfT19NQVNLX1RJTEUJKFBUUkFDRV9PX1RSQUNFTUlHUkFURSkKKyNkZWZpbmUgUFRfVFJBQ0VfTUlHUkFURQkweDAwMDgwMDAwCisjZGVmaW5lIFBUX1RSQUNFX01BU0tfVElMRQkoUFRfVFJBQ0VfTUlHUkFURSkKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCisjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorCisvKiBEb2VzIHRoZSBwcm9jZXNzIGFjY291bnQgZm9yIHVzZXIgb3IgZm9yIHN5c3RlbSB0aW1lPyAqLworI2RlZmluZSB1c2VyX21vZGUocmVncykgKEVYMV9QTCgocmVncyktPmV4MSkgPT0gVVNFUl9QTCkKKworLyogRmlsbCBpbiBhIHN0cnVjdCBwdF9yZWdzIHdpdGggdGhlIGN1cnJlbnQga2VybmVsIHJlZ2lzdGVycy4gKi8KK3N0cnVjdCBwdF9yZWdzICpnZXRfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyogVHJhY2UgdGhlIGN1cnJlbnQgc3lzY2FsbC4gKi8KK2V4dGVybiB2b2lkIGRvX3N5c2NhbGxfdHJhY2Uodm9pZCk7CisKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworI2RlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCSgxKQorCisvKgorICogQSBzdHJ1Y3R1cmUgZm9yIGFsbCBzaW5nbGUtc3RlcHBlciBzdGF0ZS4KKyAqCisgKiBBbHNvIHVwZGF0ZSBkZWZpbmVzIGluIGFzc2VtYmxlciBzZWN0aW9uIGlmIGl0IGNoYW5nZXMKKyAqLworc3RydWN0IHNpbmdsZV9zdGVwX3N0YXRlIHsKKwkvKiB0aGUgcGFnZSB0byB3aGljaCB3ZSB3aWxsIHdyaXRlIGhhY2tlZC11cCBidW5kbGVzICovCisJdm9pZCBfX3VzZXIgKmJ1ZmZlcjsKKworCXVuaW9uIHsKKwkJaW50IGZsYWdzOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBpc19lbmFibGVkOjEsIHVwZGF0ZToxLCB1cGRhdGVfcmVnOjY7CisJCX07CisJfTsKKworCXVuc2lnbmVkIGxvbmcgb3JpZ19wYzsJCS8qIHRoZSBvcmlnaW5hbCBQQyAqLworCXVuc2lnbmVkIGxvbmcgbmV4dF9wYzsJCS8qIHJldHVybiBQQyBpZiBubyBicmFuY2ggKFBDICsgMSkgKi8KKwl1bnNpZ25lZCBsb25nIGJyYW5jaF9uZXh0X3BjOwkvKiByZXR1cm4gUEMgaWYgd2UgZGlkIGJyYW5jaC9qdW1wICovCisJdW5zaWduZWQgbG9uZyB1cGRhdGVfdmFsdWU7CS8qIHZhbHVlIHRvIHJlc3RvcmUgdG8gdXBkYXRlX3RhcmdldCAqLworfTsKKworLyogU2luZ2xlLXN0ZXAgdGhlIGluc3RydWN0aW9uIGF0IHJlZ3MtPnBjICovCitleHRlcm4gdm9pZCBzaW5nbGVfc3RlcF9vbmNlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworc3RydWN0IHRhc2tfc3RydWN0OworCitleHRlcm4gdm9pZCBzZW5kX3NpZ3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJIGludCBlcnJvcl9jb2RlKTsKKworI2lmZGVmIF9fdGlsZWd4X18KKy8qIFdlIG5lZWQgdGhpcyBzaW5jZSBzaWd2YWxfdCBoYXMgYSB1c2VyIHBvaW50ZXIgaW4gaXQsIGZvciBHRVRTSUdJTkZPIGV0Yy4gKi8KKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19QVFJBQ0UKKyNlbmRpZgorCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIFNJTkdMRVNURVBfU1RBVEVfTUFTS19JU19FTkFCTEVEICAgICAgMHgxCisjZGVmaW5lIFNJTkdMRVNURVBfU1RBVEVfTUFTS19VUERBVEUgICAgICAgICAgMHgyCisjZGVmaW5lIFNJTkdMRVNURVBfU1RBVEVfVEFSR0VUX0xCICAgICAgICAgICAgICAyCisjZGVmaW5lIFNJTkdMRVNURVBfU1RBVEVfVEFSR0VUX1VCICAgICAgICAgICAgICA3CisKKyNlbmRpZiAvKiAhX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9USUxFX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcmVzb3VyY2UuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YmM0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcmVzb3VyY2UuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2MDQyNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfU0NBVFRFUkxJU1RfSAorI2RlZmluZSBfQVNNX1RJTEVfU0NBVFRFUkxJU1RfSAorCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xECSh+MFVMKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KKworI2VuZGlmIC8qIF9BU01fVElMRV9TQ0FUVEVSTElTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNjJkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NFQ1RJT05TX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NFQ1RJT05TX0gKKworI2RlZmluZSBhcmNoX2lzX2tlcm5lbF9kYXRhIGFyY2hfaXNfa2VybmVsX2RhdGEKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CisKKy8qIFRleHQgYW5kIGRhdGEgYXJlIGF0IGRpZmZlcmVudCBhcmVhcyBpbiB0aGUga2VybmVsIFZBIHNwYWNlLiAqLworZXh0ZXJuIGNoYXIgX3Npbml0ZGF0YVtdLCBfZWluaXRkYXRhW107CisKKy8qIFdyaXRlLW9uY2UgZGF0YSBpcyB3cml0YWJsZSBvbmx5IHRpbGwgdGhlIGVuZCBvZiBpbml0aWFsaXphdGlvbi4gKi8KK2V4dGVybiBjaGFyIF9fdzFkYXRhX2JlZ2luW10sIF9fdzFkYXRhX2VuZFtdOworCisKKy8qIE5vdCBleGFjdGx5IHNlY3Rpb25zLCBidXQgUEMgY29tcGFyaXNvbiBwb2ludHMgaW4gdGhlIGNvZGUuICovCitleHRlcm4gY2hhciBfX3J0X3NpZ3JldHVybltdLCBfX3J0X3NpZ3JldHVybl9lbmRbXTsKKyNpZm5kZWYgX190aWxlZ3hfXworZXh0ZXJuIGNoYXIgc3lzX2NtcHhjaGdbXSwgX19zeXNfY21weGNoZ19lbmRbXTsKK2V4dGVybiBjaGFyIF9fc3lzX2NtcHhjaGdfZ3JhYl9sb2NrW107CitleHRlcm4gY2hhciBfX3N0YXJ0X2F0b21pY19hc21fY29kZVtdLCBfX2VuZF9hdG9taWNfYXNtX2NvZGVbXTsKKyNlbmRpZgorCisvKiBIYW5kbGUgdGhlIGRpc2NvbnRpZ3VpdHkgYmV0d2VlbiBfc2RhdGEgYW5kIF9zdGV4dC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaXNfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zZGF0YSAmJgorCQlhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX2VuZDsKK30KKworI2VuZGlmIC8qIF9BU01fVElMRV9TRUNUSU9OU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VtYnVmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3M2I4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zZW1idWYuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VtYnVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2RkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NFVFVQX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NFVFVQX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworLyoKKyAqIFJlc2VydmVkIHNwYWNlIGZvciB2bWFsbG9jIGFuZCBpb21hcCAtIGRlZmluZWQgaW4gYXNtL3BhZ2UuaAorICovCisjZGVmaW5lIE1BWE1FTV9QRk4JUEZOX0RPV04oTUFYTUVNKQorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTIwNDgKKwordm9pZCBlYXJseV9wYW5pYyhjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIHdhcm5fZWFybHlfcHJpbnRrKHZvaWQpOwordm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NobWJ1Zi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NobWJ1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzA1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2htYnVmLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NobWJ1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NobXBhcmFtLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2YzMGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NobXBhcmFtLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NobXBhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Q3NjcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX1RJTEVfU0lHQ09OVEVYVF9ICisKKy8qIE5PVEU6IHdlIGNhbid0IGluY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPiBkdWUgdG8gI2luY2x1ZGUgZGVwZW5kZW5jaWVzLiAqLworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogTXVzdCB0cmFjayA8c3lzL3Vjb250ZXh0Lmg+ICovCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworfTsKKworI2VuZGlmIC8qIF9BU01fVElMRV9TSUdDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaWdmcmFtZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ2ZyYW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0ZDNkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaWdmcmFtZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfU0lHRlJBTUVfSAorI2RlZmluZSBfQVNNX1RJTEVfU0lHRlJBTUVfSAorCisvKiBJbmRpY2F0ZSB0aGF0IHN5c2NhbGwgcmV0dXJuIHNob3VsZCBub3QgZXhhbWluZSByMCAqLworI2RlZmluZSBJTlRfU1dJTlRfMV9TSUdSRVRVUk4gKH4wKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXJjaC9hYmkuaD4KKworc3RydWN0IHJ0X3NpZ2ZyYW1lIHsKKwl1bnNpZ25lZCBjaGFyIHNhdmVfYXJlYVtDX0FCSV9TQVZFX0FSRUFfU0laRV07IC8qIGNhbGxlciBzYXZlIGFyZWEgKi8KKwlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOworCXN0cnVjdCB1Y29udGV4dCB1YzsKK307CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU0lHRlJBTUVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxMmQxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9TSUdJTkZPX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NJR0lORk9fSAorCisjZGVmaW5lIF9fQVJDSF9TSV9UUkFQTk8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworLyoKKyAqIEFkZGl0aW9uYWwgVGlsZS1zcGVjaWZpYyBTSUdJTEwgc2lfY29kZXMKKyAqLworI2RlZmluZSBJTExfREJMRkxUCShfX1NJX0ZBVUxUfDkpCS8qIGRvdWJsZSBmYXVsdCAqLworI2RlZmluZSBJTExfSEFSRFdBTEwJKF9fU0lfRkFVTFR8MTApCS8qIHVzZXIgbmV0d29ya3MgaGFyZHdhbGwgdmlvbGF0aW9uICovCisjdW5kZWYgTlNJR0lMTAorI2RlZmluZSBOU0lHSUxMCQkxMAorCisjZW5kaWYgLyogX0FTTV9USUxFX1NJR0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ25hbC5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMDI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc2lnbmFsLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9TSUdOQUxfSAorI2RlZmluZSBfQVNNX1RJTEVfU0lHTkFMX0gKKworLyogRG8gbm90IG5vdGlmeSBhIHB0cmFjZXIgd2hlbiB0aGlzIHNpZ25hbCBpcyBoYW5kbGVkLiAqLworI2RlZmluZSBTQV9OT1BUUkFDRSAweDAyMDAwMDAwdQorCisvKiBVc2VkIGluIGVhcmxpZXIgVGlsZXJhIHJlbGVhc2VzLCBzbyBrZWVwaW5nIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eS4gKi8KKyNkZWZpbmUgU0FfUkVTVE9SRVIgMHgwNDAwMDAwMHUKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCitpbnQgcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICosIHN0cnVjdCBzaWdjb250ZXh0IF9fdXNlciAqLCBsb25nICopOworaW50IHNldHVwX3NpZ2NvbnRleHQoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOwordm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzIxMjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NNUF9ICisjZGVmaW5lIF9BU01fVElMRV9TTVBfSAorCisjaWZkZWYgQ09ORklHX1NNUAorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisKKy8qIFNldCB1cCB0aGlzIHRpbGUgdG8gc3VwcG9ydCByZWNlaXZpbmcgaHlwZXJ2aXNvciBtZXNzYWdlcyAqLwordm9pZCBpbml0X21lc3NhZ2luZyh2b2lkKTsKKworLyogU2V0IHVwIHRoaXMgdGlsZSB0byBzdXBwb3J0IHJlY2VpdmluZyBkZXZpY2UgaW50ZXJydXB0cyBhbmQgSVBJcy4gKi8KK3ZvaWQgaW5pdF9wZXJfdGlsZV9JUlFzKHZvaWQpOworCisvKiBTZW5kIGEgbWVzc2FnZSB0byBwcm9jZXNzb3JzIHNwZWNpZmllZCBpbiBtYXNrICovCit2b2lkIHNlbmRfSVBJX21hbnkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB0YWcpOworCisvKiBTZW5kIGEgbWVzc2FnZSB0byBhbGwgYnV0IHRoZSBzZW5kaW5nIHByb2Nlc3NvciAqLwordm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB0YWcpOworCisvKiBTZW5kIGEgbWVzc2FnZSB0byBhIHNwZWNpZmljIHByb2Nlc3NvciAqLwordm9pZCBzZW5kX0lQSV9zaW5nbGUoaW50IGRlc3QsIGludCB0YWcpOworCisvKiBQcm9jZXNzIGFuIElQSSBtZXNzYWdlICovCit2b2lkIGV2YWx1YXRlX21lc3NhZ2UoaW50IHRhZyk7CisKKy8qIEJvb3QgYSBzZWNvbmRhcnkgY3B1ICovCit2b2lkIG9ubGluZV9zZWNvbmRhcnkodm9pZCk7CisKKy8qIENhbGwgYSBmdW5jdGlvbiBvbiBhIHNwZWNpZmllZCBzZXQgb2YgQ1BVcyAobWF5IGluY2x1ZGUgdGhpcyBvbmUpLiAqLworZXh0ZXJuIHZvaWQgb25fZWFjaF9jcHVfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCSAgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sIGJvb2wgd2FpdCk7CisKKy8qIFRvcG9sb2d5IG9mIHRoZSBzdXBlcnZpc29yIHRpbGUgZ3JpZCwgYW5kIGNvb3JkaW5hdGVzIG9mIGJvb3QgcHJvY2Vzc29yICovCitleHRlcm4gSFZfVG9wb2xvZ3kgc21wX3RvcG9sb2d5OworCisvKiBBY2Nlc3NvcnMgZm9yIGdyaWQgc2l6ZSAqLworI2RlZmluZSBzbXBfaGVpZ2h0CQkoc21wX3RvcG9sb2d5LmhlaWdodCkKKyNkZWZpbmUgc21wX3dpZHRoCQkoc21wX3RvcG9sb2d5LndpZHRoKQorCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGNvbnZlcnRpbmcgY3B1IDwtPiBjb29yZHMuICovCitzdGF0aWMgaW5saW5lIGludCBjcHVfeChpbnQgY3B1KQoreworCXJldHVybiBjcHUgJSBzbXBfd2lkdGg7Cit9CitzdGF0aWMgaW5saW5lIGludCBjcHVfeShpbnQgY3B1KQoreworCXJldHVybiBjcHUgLyBzbXBfd2lkdGg7Cit9CitzdGF0aWMgaW5saW5lIGludCB4eV90b19jcHUoaW50IHgsIGludCB5KQoreworCXJldHVybiB5ICogc21wX3dpZHRoICsgeDsKK30KKworLyogSHlwZXJ2aXNvciBtZXNzYWdlIHRhZ3Mgc2VudCB2aWEgdGhlIHRpbGUgc2VuZF9JUEkqKCkgcm91dGluZXMuICovCisjZGVmaW5lIE1TR19UQUdfU1RBUlRfQ1BVCQkxCisjZGVmaW5lIE1TR19UQUdfU1RPUF9DUFUJCTIKKyNkZWZpbmUgTVNHX1RBR19DQUxMX0ZVTkNUSU9OX01BTlkJMworI2RlZmluZSBNU0dfVEFHX0NBTExfRlVOQ1RJT05fU0lOR0xFCTQKKworLyogSG9vayBmb3IgdGhlIGdlbmVyaWMgc21wX2NhbGxfZnVuY3Rpb25fbWFueSgpIHJvdXRpbmUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJc2VuZF9JUElfbWFueShtYXNrLCBNU0dfVEFHX0NBTExfRlVOQ1RJT05fTUFOWSk7Cit9CisKKy8qIEhvb2sgZm9yIHRoZSBnZW5lcmljIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpIHJvdXRpbmUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQoreworCXNlbmRfSVBJX3NpbmdsZShjcHUsIE1TR19UQUdfQ0FMTF9GVU5DVElPTl9TSU5HTEUpOworfQorCisvKiBQcmludCBvdXQgdGhlIGJvb3Qgc3RyaW5nIGRlc2NyaWJpbmcgd2hpY2ggY3B1cyB3ZXJlIGRpc2FibGVkLiAqLwordm9pZCBwcmludF9kaXNhYmxlZF9jcHVzKHZvaWQpOworCisjZWxzZSAvKiAhQ09ORklHX1NNUCAqLworCisjZGVmaW5lIG9uX2VhY2hfY3B1X21hc2sobWFzaywgZnVuYywgaW5mbywgd2FpdCkJCVwKKyAgZG8geyBpZiAoY3B1bWFza190ZXN0X2NwdSgwLCAobWFzaykpKSBmdW5jKGluZm8pOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHNtcF9tYXN0ZXJfY3B1CQkwCisjZGVmaW5lIHNtcF9oZWlnaHQJCTEKKyNkZWZpbmUgc21wX3dpZHRoCQkxCisjZGVmaW5lIGNwdV94KGNwdSkJCTAKKyNkZWZpbmUgY3B1X3koY3B1KQkJMAorI2RlZmluZSB4eV90b19jcHUoeCwgeSkJCTAKKworI2VuZGlmIC8qICFDT05GSUdfU01QICovCisKKworLyogV2hpY2ggY3B1cyBtYXkgYmUgdXNlZCBhcyB0aGUgbG90YXIgaW4gYSBwYWdlIHRhYmxlIGVudHJ5LiAqLworZXh0ZXJuIHN0cnVjdCBjcHVtYXNrIGNwdV9sb3Rhcl9tYXA7CisjZGVmaW5lIGNwdV9pc192YWxpZF9sb3RhcihjcHUpIGNwdW1hc2tfdGVzdF9jcHUoKGNwdSksICZjcHVfbG90YXJfbWFwKQorCisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisvKiBXaGljaCBwcm9jZXNzb3JzIGFyZSB1c2VkIGZvciBoYXNoLWZvci1ob21lIG1hcHBpbmcgKi8KK2V4dGVybiBzdHJ1Y3QgY3B1bWFzayBoYXNoX2Zvcl9ob21lX21hcDsKKyNlbmRpZgorCisvKiBXaGljaCBjcHVzIGNhbiBoYXZlIHRoZWlyIGNhY2hlIGZsdXNoZWQgYnkgaHZfZmx1c2hfcmVtb3RlKCkuICovCitleHRlcm4gc3RydWN0IGNwdW1hc2sgY3B1X2NhY2hlYWJsZV9tYXA7CisjZGVmaW5lIGNwdV9jYWNoZWFibGUoY3B1KSBjcHVtYXNrX3Rlc3RfY3B1KChjcHUpLCAmY3B1X2NhY2hlYWJsZV9tYXApCisKKy8qIENvbnZlcnQgYW4gSFZfTE9UQVIgdmFsdWUgaW50byBhIGNwdS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGh2X2xvdGFyX3RvX2NwdShIVl9MT1RBUiBsb3RhcikKK3sKKwlyZXR1cm4gSFZfTE9UQVJfWChsb3RhcikgKyAoSFZfTE9UQVJfWShsb3RhcikgKiBzbXBfd2lkdGgpOworfQorCisvKgorICogRXh0ZW5zaW9uIG9mIDxsaW51eC9jcHVtYXNrLmg+IGZ1bmN0aW9uYWxpdHkgd2hlbiB5b3UganVzdCB3YW50CisgKiB0byBleHByZXNzIGEgbWFzayBvciBzdXBwcmVzc2lvbiBvciBpbmNsdXNpb24gcmVnaW9uIHdpdGhvdXQKKyAqIGJlaW5nIHRvbyBjb25jZXJuZWQgYWJvdXQgZXhhY3RseSB3aGljaCBjcHVzIGFyZSB2YWxpZCBpbiB0aGF0IHJlZ2lvbi4KKyAqLworaW50IGJpdG1hcF9wYXJzZWxpc3RfY3JvcChjb25zdCBjaGFyICpicCwgdW5zaWduZWQgbG9uZyAqbWFza3AsIGludCBubWFza2JpdHMpOworCisjZGVmaW5lIGNwdWxpc3RfcGFyc2VfY3JvcChidWYsIGRzdCkgXAorCQkJX19jcHVsaXN0X3BhcnNlX2Nyb3AoKGJ1ZiksIChkc3QpLCBOUl9DUFVTKQorc3RhdGljIGlubGluZSBpbnQgX19jcHVsaXN0X3BhcnNlX2Nyb3AoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgY3B1bWFzayAqZHN0cCwKKwkJCQkJaW50IG5iaXRzKQoreworCXJldHVybiBiaXRtYXBfcGFyc2VsaXN0X2Nyb3AoYnVmLCBjcHVtYXNrX2JpdHMoZHN0cCksIG5iaXRzKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgSVBJIHN1YnN5c3RlbS4gKi8KK3ZvaWQgaXBpX2luaXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIGZvciBzdGFydC1jcHUgbWVzc2FnZSB0byBjYXVzZSB1cyB0byBqdW1wIHRvLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3RhcnRfY3B1X2Z1bmN0aW9uX2FkZHI7CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjcxMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zb2NrZXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zb2NraW9zLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc29ja2lvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjZkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc29ja2lvcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zb2NraW9zLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGJkNDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NQSU5MT0NLX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NQSU5MT0NLX0gKKworI2lmZGVmIF9fdGlsZWd4X18KKyNpbmNsdWRlIDxhc20vc3BpbmxvY2tfNjQuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3NwaW5sb2NrXzMyLmg+CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fVElMRV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZWZkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiAzMi1iaXQgU01QIHNwaW5sb2Nrcy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9TUElOTE9DS18zMl9ICisjZGVmaW5lIF9BU01fVElMRV9TUElOTE9DS18zMl9ICisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyoKKyAqIFdlIG9ubHkgdXNlIGV2ZW4gdGlja2V0IG51bWJlcnMgc28gdGhlICcxJyBpbnNlcnRlZCBieSBhIHRucyBpcworICogYW4gdW5hbWJpZ3VvdXMgInRpY2tldCBpcyBidXN5IiBmbGFnLgorICovCisjZGVmaW5lIFRJQ0tFVF9RVUFOVFVNIDIKKworCisvKgorICogU01QIHRpY2tldCBzcGlubG9ja3MsIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgQ1BVIGFueXdoZXJlCisgKgorICogKHRoZSB0eXBlIGRlZmluaXRpb25zIGFyZSBpbiBhc20vc3BpbmxvY2tfdHlwZXMuaCkKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXJjaF9zcGluX2lzX2xvY2tlZChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCit7CisJLyoKKwkgKiBOb3RlIHRoYXQgZXZlbiBpZiBhIG5ldyB0aWNrZXQgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcKKwkgKiBhY3F1aXJlZCwgc28gbG9jay0+bmV4dF90aWNrZXQgaXMgMSwgaXQncyBzdGlsbCByZWFzb25hYmxlCisJICogdG8gY2xhaW0gdGhlIGxvY2sgaXMgaGVsZCwgc2luY2UgaXQgd2lsbCBiZSBtb21lbnRhcmlseQorCSAqIGlmIG5vdCBhbHJlYWR5LiAgVGhlcmUncyBubyBuZWVkIHRvIHdhaXQgZm9yIGEgInZhbGlkIgorCSAqIGxvY2stPm5leHRfdGlja2V0IHRvIGJlY29tZSBhdmFpbGFibGUuCisJICovCisJcmV0dXJuIGxvY2stPm5leHRfdGlja2V0ICE9IGxvY2stPmN1cnJlbnRfdGlja2V0OworfQorCit2b2lkIGFyY2hfc3Bpbl9sb2NrKGFyY2hfc3BpbmxvY2tfdCAqbG9jayk7CisKKy8qIFdlIGNhbm5vdCB0YWtlIGFuIGludGVycnVwdCBhZnRlciBnZXR0aW5nIGEgdGlja2V0LCBzbyBkb24ndCBlbmFibGUgdGhlbS4gKi8KKyNkZWZpbmUgYXJjaF9zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIGFyY2hfc3Bpbl9sb2NrKGxvY2spCisKK2ludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zcGluX3VubG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCit7CisJLyogRm9yIGVmZmljaWVuY3ksIG92ZXJsYXAgZmV0Y2hpbmcgdGhlIG9sZCB0aWNrZXQgd2l0aCB0aGUgd21iKCkuICovCisJaW50IG9sZF90aWNrZXQgPSBsb2NrLT5jdXJyZW50X3RpY2tldDsKKwl3bWIoKTsgIC8qIGd1YXJhbnRlZSBhbnl0aGluZyBtb2RpZmllZCB1bmRlciB0aGUgbG9jayBpcyB2aXNpYmxlICovCisJbG9jay0+Y3VycmVudF90aWNrZXQgPSBvbGRfdGlja2V0ICsgVElDS0VUX1FVQU5UVU07Cit9CisKK3ZvaWQgYXJjaF9zcGluX3VubG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbG9jayk7CisKKy8qCisgKiBSZWFkLXdyaXRlIHNwaW5sb2NrcywgYWxsb3dpbmcgbXVsdGlwbGUgcmVhZGVycworICogYnV0IG9ubHkgb25lIHdyaXRlci4KKyAqCisgKiBXZSB1c2UgYSAidG5zL3N0b3JlLWJhY2siIHRlY2huaXF1ZSBvbiBhIHNpbmdsZSB3b3JkIHRvIG1hbmFnZQorICogdGhlIGxvY2sgc3RhdGUsIGxvb3BpbmcgYXJvdW5kIHRvIHJldHJ5IGlmIHRoZSB0bnMgcmV0dXJucyAxLgorICovCisKKy8qIEludGVybmFsIGxheW91dCBvZiB0aGUgd29yZDsgZG8gbm90IHVzZS4gKi8KKyNkZWZpbmUgX1dSX05FWFRfU0hJRlQJOAorI2RlZmluZSBfV1JfQ1VSUl9TSElGVCAgMTYKKyNkZWZpbmUgX1dSX1dJRFRIICAgICAgIDgKKyNkZWZpbmUgX1JEX0NPVU5UX1NISUZUIDI0CisjZGVmaW5lIF9SRF9DT1VOVF9XSURUSCA4CisKKy8qIEludGVybmFsIGZ1bmN0aW9uczsgZG8gbm90IHVzZS4gKi8KK3ZvaWQgYXJjaF9yZWFkX2xvY2tfc2xvdyhhcmNoX3J3bG9ja190ICosIHUzMik7CitpbnQgYXJjaF9yZWFkX3RyeWxvY2tfc2xvdyhhcmNoX3J3bG9ja190ICopOwordm9pZCBhcmNoX3JlYWRfdW5sb2NrX3Nsb3coYXJjaF9yd2xvY2tfdCAqKTsKK3ZvaWQgYXJjaF93cml0ZV9sb2NrX3Nsb3coYXJjaF9yd2xvY2tfdCAqLCB1MzIpOwordm9pZCBhcmNoX3dyaXRlX3VubG9ja19zbG93KGFyY2hfcndsb2NrX3QgKiwgdTMyKTsKKworLyoqCisgKiBhcmNoX3JlYWRfY2FuX2xvY2soKSAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcmVhZF9jYW5fbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJcmV0dXJuIChyd2xvY2stPmxvY2sgPDwgX1JEX0NPVU5UX1dJRFRIKSA9PSAwOworfQorCisvKioKKyAqIGFyY2hfd3JpdGVfY2FuX2xvY2soKSAtIHdvdWxkIHdyaXRlX3RyeWxvY2soKSBzdWNjZWVkPworICovCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3dyaXRlX2Nhbl9sb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKK3sKKwlyZXR1cm4gcndsb2NrLT5sb2NrID09IDA7Cit9CisKKy8qKgorICogYXJjaF9yZWFkX2xvY2soKSAtIGFjcXVpcmUgYSByZWFkIGxvY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3JlYWRfbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJdTMyIHZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOworCWlmICh1bmxpa2VseSh2YWwgPDwgX1JEX0NPVU5UX1dJRFRIKSkgeworCQlhcmNoX3JlYWRfbG9ja19zbG93KHJ3bG9jaywgdmFsKTsKKwkJcmV0dXJuOworCX0KKwlyd2xvY2stPmxvY2sgPSB2YWwgKyAoMSA8PCBfUkRfQ09VTlRfU0hJRlQpOworfQorCisvKioKKyAqIGFyY2hfcmVhZF9sb2NrKCkgLSBhY3F1aXJlIGEgd3JpdGUgbG9jay4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfd3JpdGVfbG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJdTMyIHZhbCA9IF9faW5zbl90bnMoKGludCAqKSZyd2xvY2stPmxvY2spOworCWlmICh1bmxpa2VseSh2YWwgIT0gMCkpIHsKKwkJYXJjaF93cml0ZV9sb2NrX3Nsb3cocndsb2NrLCB2YWwpOworCQlyZXR1cm47CisJfQorCXJ3bG9jay0+bG9jayA9IDEgPDwgX1dSX05FWFRfU0hJRlQ7Cit9CisKKy8qKgorICogYXJjaF9yZWFkX3RyeWxvY2soKSAtIHRyeSB0byBhY3F1aXJlIGEgcmVhZCBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3JlYWRfdHJ5bG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJaW50IGxvY2tlZDsKKwl1MzIgdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7CisJaWYgKHVubGlrZWx5KHZhbCAmIDEpKQorCQlyZXR1cm4gYXJjaF9yZWFkX3RyeWxvY2tfc2xvdyhyd2xvY2spOworCWxvY2tlZCA9ICh2YWwgPDwgX1JEX0NPVU5UX1dJRFRIKSA9PSAwOworCXJ3bG9jay0+bG9jayA9IHZhbCArIChsb2NrZWQgPDwgX1JEX0NPVU5UX1NISUZUKTsKKwlyZXR1cm4gbG9ja2VkOworfQorCisvKioKKyAqIGFyY2hfd3JpdGVfdHJ5bG9jaygpIC0gdHJ5IHRvIGFjcXVpcmUgYSB3cml0ZSBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIGludCBhcmNoX3dyaXRlX3RyeWxvY2soYXJjaF9yd2xvY2tfdCAqcndsb2NrKQoreworCXUzMiB2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKworCS8qCisJICogSWYgYSB0bnMgaXMgaW4gcHJvZ3Jlc3MsIG9yIHRoZXJlJ3MgYSB3YWl0aW5nIG9yIGFjdGl2ZSBsb2NrZXIsCisJICogb3IgYWN0aXZlIHJlYWRlcnMsIHdlIGNhbid0IHRha2UgdGhlIGxvY2ssIHNvIGdpdmUgdXAuCisJICovCisJaWYgKHVubGlrZWx5KHZhbCAhPSAwKSkgeworCQlpZiAoISh2YWwgJiAxKSkKKwkJCXJ3bG9jay0+bG9jayA9IHZhbDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2V0IHRoZSAibmV4dCIgZmllbGQgdG8gbWFyayBpdCBsb2NrZWQuICovCisJcndsb2NrLT5sb2NrID0gMSA8PCBfV1JfTkVYVF9TSElGVDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBhcmNoX3JlYWRfdW5sb2NrKCkgLSByZWxlYXNlIGEgcmVhZCBsb2NrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZWFkX3VubG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJdTMyIHZhbDsKKwltYigpOyAgLyogZ3VhcmFudGVlIGFueXRoaW5nIG1vZGlmaWVkIHVuZGVyIHRoZSBsb2NrIGlzIHZpc2libGUgKi8KKwl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwlpZiAodW5saWtlbHkodmFsICYgMSkpIHsKKwkJYXJjaF9yZWFkX3VubG9ja19zbG93KHJ3bG9jayk7CisJCXJldHVybjsKKwl9CisJcndsb2NrLT5sb2NrID0gdmFsIC0gKDEgPDwgX1JEX0NPVU5UX1NISUZUKTsKK30KKworLyoqCisgKiBhcmNoX3dyaXRlX3VubG9jaygpIC0gcmVsZWFzZSBhIHdyaXRlIGxvY2suCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3dyaXRlX3VubG9jayhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJdTMyIHZhbDsKKwltYigpOyAgLyogZ3VhcmFudGVlIGFueXRoaW5nIG1vZGlmaWVkIHVuZGVyIHRoZSBsb2NrIGlzIHZpc2libGUgKi8KKwl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwlpZiAodW5saWtlbHkodmFsICE9ICgxIDw8IF9XUl9ORVhUX1NISUZUKSkpIHsKKwkJYXJjaF93cml0ZV91bmxvY2tfc2xvdyhyd2xvY2ssIHZhbCk7CisJCXJldHVybjsKKwl9CisJcndsb2NrLT5sb2NrID0gMDsKK30KKworI2RlZmluZSBhcmNoX3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgYXJjaF9yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgYXJjaF93cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBhcmNoX3dyaXRlX2xvY2sobG9jaykKKworI2VuZGlmIC8qIF9BU01fVElMRV9TUElOTE9DS18zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MWY1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NQSU5MT0NLX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NQSU5MT0NLX1RZUEVTX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKKyMgZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKKyNlbmRpZgorCisjaWZkZWYgX190aWxlZ3hfXworCisvKiBMb3cgMTUgYml0cyBhcmUgIm5leHQiOyBoaWdoIDE1IGJpdHMgYXJlICJjdXJyZW50Ii4gKi8KK3R5cGVkZWYgc3RydWN0IGFyY2hfc3BpbmxvY2sgeworCXVuc2lnbmVkIGludCBsb2NrOworfSBhcmNoX3NwaW5sb2NrX3Q7CisKKyNkZWZpbmUgX19BUkNIX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQorCisvKiBIaWdoIGJpdCBpcyAid3JpdGVyIG93bnMiOyBsb3cgMzEgYml0cyBhcmUgYSBjb3VudCBvZiByZWFkZXJzLiAqLwordHlwZWRlZiBzdHJ1Y3QgYXJjaF9yd2xvY2sgeworCXVuc2lnbmVkIGludCBsb2NrOworfSBhcmNoX3J3bG9ja190OworCisjZGVmaW5lIF9fQVJDSF9SV19MT0NLX1VOTE9DS0VECQl7IDAgfQorCisjZWxzZQorCit0eXBlZGVmIHN0cnVjdCBhcmNoX3NwaW5sb2NrIHsKKwkvKiBOZXh0IHRpY2tldCBudW1iZXIgdG8gaGFuZCBvdXQuICovCisJaW50IG5leHRfdGlja2V0OworCS8qIFRoZSB0aWNrZXQgbnVtYmVyIHRoYXQgY3VycmVudGx5IG93bnMgdGhpcyBsb2NrLiAqLworCWludCBjdXJyZW50X3RpY2tldDsKK30gYXJjaF9zcGlubG9ja190OworCisjZGVmaW5lIF9fQVJDSF9TUElOX0xPQ0tfVU5MT0NLRUQJeyAwLCAwIH0KKworLyoKKyAqIEJ5dGUgMCBmb3IgdG5zIChvbmx5IHRoZSBsb3cgYml0IGlzIHVzZWQpLCBieXRlIDEgZm9yIHRpY2tldC1sb2NrICJuZXh0IiwKKyAqIGJ5dGUgMiBmb3IgdGlja2V0LWxvY2sgImN1cnJlbnQiLCBieXRlIDMgZm9yIHJlYWRlciBjb3VudC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgYXJjaF9yd2xvY2sgeworCXVuc2lnbmVkIGludCBsb2NrOworfSBhcmNoX3J3bG9ja190OworCisjZGVmaW5lIF9fQVJDSF9SV19MT0NLX1VOTE9DS0VECQl7IDAgfQorCisjZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU1BJTkxPQ0tfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YWNrLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTA4NDczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N0YWNrLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9TVEFDS19ICisjZGVmaW5lIF9BU01fVElMRV9TVEFDS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2JhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKworLyogRXZlcnl0aGluZyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYSBiYWNrdHJhY2UgaXRlcmF0aW9uICovCitzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yIHsKKwlCYWNrdHJhY2VJdGVyYXRvciBpdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7ICAgICAvKiB0YXNrIHdlIGFyZSBiYWNrdHJhY2luZyAqLworCUhWX1BURSAqcGd0YWJsZTsJICAgICAgLyogcGFnZSB0YWJsZSBmb3IgdXNlciBzcGFjZSBhY2Nlc3MgKi8KKwlpbnQgZW5kOwkJICAgICAgLyogaXRlcmF0aW9uIGNvbXBsZXRlLiAqLworCWludCBuZXdfY29udGV4dDsgICAgICAgICAgICAgIC8qIG5ldyBjb250ZXh0IGlzIHN0YXJ0aW5nICovCisJaW50IHByb2ZpbGU7ICAgICAgICAgICAgICAgICAgLyogcHJvZmlsaW5nLCBzbyBzdG9wIG9uIGFzeW5jIGludHJwdCAqLworCWludCB2ZXJib3NlOwkJICAgICAgLyogcHJpbnRrIGV4dHJhIGluZm8gKGRvbid0IHdhbnQgdG8KKwkJCQkgICAgICAgKiBkbyB0aGlzIGZvciBwcm9maWxpbmcpICovCisJaW50IGlzX2N1cnJlbnQ7ICAgICAgICAgICAgICAgLyogYmFja3RyYWNpbmcgY3VycmVudCB0YXNrICovCit9OworCisvKiBJdGVyYXRpb24gbWV0aG9kcyBmb3Iga2VybmVsIGJhY2t0cmFjZXMgKi8KKworLyoKKyAqIEluaXRpYWxpemUgYSBLQmFja3RyYWNlSXRlcmF0b3IgZnJvbSBhIHRhc2tfc3RydWN0LCBhbmQgb3B0aW9uYWxseSBmcm9tCisgKiBhIHNldCBvZiByZWdpc3RlcnMuICBJZiB0aGUgcmVnaXN0ZXJzIGFyZSBvbWl0dGVkLCB0aGUgcHJvY2VzcyBpcworICogYXNzdW1lZCB0byBiZSBkZXNjaGVkdWxlZCwgYW5kIHJlZ2lzdGVycyBhcmUgcmVhZCBmcm9tIHRoZSBwcm9jZXNzJ3MKKyAqIHRocmVhZF9zdHJ1Y3QgYW5kIHN0YWNrLiAgInZlcmJvc2UiIG1lYW5zIHRvIHByaW50ayBzb21lIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIGFib3V0IGZhdWx0IGhhbmRsZXJzIGFzIHdlIHBhc3MgdGhlbSBvbiB0aGUgc3RhY2suCisgKi8KK2V4dGVybiB2b2lkIEtCYWNrdHJhY2VJdGVyYXRvcl9pbml0KHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCwKKwkJCQkgICAgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOworCisvKiBJbml0aWFsaXplIGl0ZXJhdG9yIGJhc2VkIG9uIGN1cnJlbnQgc3RhY2suICovCitleHRlcm4gdm9pZCBLQmFja3RyYWNlSXRlcmF0b3JfaW5pdF9jdXJyZW50KHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCk7CisKKy8qIEhlbHBlciBtZXRob2QgZm9yIGFib3ZlLiAqLworZXh0ZXJuIHZvaWQgX0tCYWNrdHJhY2VJdGVyYXRvcl9pbml0X2N1cnJlbnQoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0LAorCQkJCXVsb25nIHBjLCB1bG9uZyBsciwgdWxvbmcgc3AsIHVsb25nIHI1Mik7CisKKy8qIE5vIG1vcmUgZnJhbWVzPyAqLworZXh0ZXJuIGludCBLQmFja3RyYWNlSXRlcmF0b3JfZW5kKHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCk7CisKKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgZnJhbWUuICovCitleHRlcm4gdm9pZCBLQmFja3RyYWNlSXRlcmF0b3JfbmV4dChzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICprYnQpOworCisvKgorICogRHVtcCBzdGFjayBnaXZlbiBjb21wbGV0ZSByZWdpc3RlciBpbmZvLiBVc2Ugb25seSBmcm9tIHRoZQorICogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU7IHNob3dfc3RhY2soKQorICogYW5kIGR1bXBfc3RhY2soKSAoaW4gZW50cnkuUykgYXJlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBlbnRyeSBwb2ludHMuCisgKi8KK2V4dGVybiB2b2lkIHRpbGVfc2hvd19zdGFjayhzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICosIGludCBoZWFkZXJzKTsKKworLyogRHVtcCBzdGFjayBvZiBjdXJyZW50IHByb2Nlc3MsIHdpdGggcmVnaXN0ZXJzIHRvIHNlZWQgdGhlIGJhY2t0cmFjZS4gKi8KK2V4dGVybiB2b2lkIGR1bXBfc3RhY2tfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKworLyogSGVscGVyIG1ldGhvZCBmb3IgYXNzZW1ibHkgZHVtcF9zdGFjaygpLiAqLworZXh0ZXJuIHZvaWQgX2R1bXBfc3RhY2soaW50IGR1bW15LCB1bG9uZyBwYywgdWxvbmcgbHIsIHVsb25nIHNwLCB1bG9uZyByNTIpOworCisjZW5kaWYgLyogX0FTTV9USUxFX1NUQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zdGF0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzkwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zdGF0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MWZlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc3RhdGZzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RyaW5nLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzNWNmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zdHJpbmcuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NUUklOR19ICisjZGVmaW5lIF9BU01fVElMRV9TVFJJTkdfSAorCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNIUgorI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKKyNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ1BZCisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTU1PVkUKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUkxFTgorCitleHRlcm4gX19rZXJuZWxfc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYyk7CitleHRlcm4gdm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitleHRlcm4gdm9pZCAqbWVtc2V0KHZvaWQgKiwgaW50LCBfX2tlcm5lbF9zaXplX3QpOworZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKK2V4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX2tlcm5lbF9zaXplX3QpOworCisjZW5kaWYgLyogX0FTTV9USUxFX1NUUklOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N3YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWM2ODZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NXQUJfSAorI2RlZmluZSBfQVNNX1RJTEVfU1dBQl9ICisKKy8qIFRpbGUgZ2NjIGlzIGFsd2F5cyA+PSA0LjMuMCwgc28gd2UgdXNlIF9fYnVpbHRpbl9ic3dhcC4gKi8KKyNkZWZpbmUgX19hcmNoX3N3YWIzMih4KSBfX2J1aWx0aW5fYnN3YXAzMih4KQorI2RlZmluZSBfX2FyY2hfc3dhYjY0KHgpIF9fYnVpbHRpbl9ic3dhcDY0KHgpCisKKy8qIFVzZSB0aGUgdmFyaWFudCB0aGF0IGlzIG5hdHVyYWwgZm9yIHRoZSB3b3Jkc2l6ZS4gKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgX19hcmNoX3N3YWIxNih4KSAoX19idWlsdGluX2Jzd2FwNjQoeCkgPj4gNDgpCisjZWxzZQorI2RlZmluZSBfX2FyY2hfc3dhYjE2KHgpIChfX2J1aWx0aW5fYnN3YXAzMih4KSA+PiAxNikKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9USUxFX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZTBkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogU2VlIGFzbS1nZW5lcmljL3N5c2NhbGwuaCBmb3IgZGVzY3JpcHRpb25zIG9mIHdoYXQgd2UgbXVzdCBkbyBoZXJlLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1NZU0NBTExfSAorI2RlZmluZSBfQVNNX1RJTEVfU1lTQ0FMTF9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFyY2gvYWJpLmg+CisKKy8qCisgKiBPbmx5IHRoZSBsb3cgMzIgYml0cyBvZiBvcmlnX3IwIGFyZSBtZWFuaW5nZnVsLCBzbyB3ZSByZXR1cm4gaW50LgorICogVGhpcyBpbXBvcnRhbnRseSBpZ25vcmVzIHRoZSBoaWdoIGJpdHMgb24gNjQtYml0LCBzbyBjb21wYXJpc29ucworICogc2lnbi1leHRlbmQgdGhlIGxvdyAzMiBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIGludCBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiByZWdzLT5yZWdzW1RSRUdfU1lTQ0FMTF9OUl07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3JvbGxiYWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+cmVnc1swXSA9IHJlZ3MtPm9yaWdfcjA7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9lcnJvcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGVycm9yID0gcmVncy0+cmVnc1swXTsKKwlyZXR1cm4gSVNfRVJSX1ZBTFVFKGVycm9yKSA/IGVycm9yIDogMDsKK30KKworc3RhdGljIGlubGluZSBsb25nIHN5c2NhbGxfZ2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+cmVnc1swXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN5c2NhbGxfc2V0X3JldHVybl92YWx1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJICAgIGludCBlcnJvciwgbG9uZyB2YWwpCit7CisJcmVncy0+cmVnc1swXSA9IChsb25nKSBlcnJvciA/OiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX2dldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSB1bnNpZ25lZCBsb25nICphcmdzKQoreworCUJVR19PTihpICsgbiA+IDYpOworCW1lbWNweShhcmdzLCAmcmVnc1tpXSwgbiAqIHNpemVvZihhcmdzWzBdKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeXNjYWxsX3NldF9hcmd1bWVudHMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSB1bnNpZ25lZCBpbnQgaSwgdW5zaWduZWQgaW50IG4sCisJCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICphcmdzKQoreworCUJVR19PTihpICsgbiA+IDYpOworCW1lbWNweSgmcmVnc1tpXSwgYXJncywgbiAqIHNpemVvZihhcmdzWzBdKSk7Cit9CisKKyNlbmRpZgkvKiBfQVNNX1RJTEVfU1lTQ0FMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTY1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIHN5c2NhbGxzLmggLSBMaW51eCBzeXNjYWxsIGludGVyZmFjZXMgKGFyY2gtc3BlY2lmaWMpCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEphc3dpbmRlciBTaW5naCBSYWpwdXQKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9TWVNDQUxMU19ICisjZGVmaW5lIF9BU01fVElMRV9TWVNDQUxMU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorCisvKiBUaGUgYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHN5c2NhbGxzLiAqLworZXh0ZXJuIHZvaWQgKnN5c19jYWxsX3RhYmxlW107CisjaWZkZWYgQ09ORklHX0NPTVBBVAorZXh0ZXJuIHZvaWQgKmNvbXBhdF9zeXNfY2FsbF90YWJsZVtdOworI2VuZGlmCisKKy8qCisgKiBOb3RlIHRoYXQgYnkgY29udmVudGlvbiwgYW55IHN5c2NhbGwgd2hpY2ggcmVxdWlyZXMgdGhlIGN1cnJlbnQKKyAqIHJlZ2lzdGVyIHNldCB0YWtlcyBhbiBhZGRpdGlvbmFsICJzdHJ1Y3QgcHRfcmVncyAqIiBwb2ludGVyOyB0aGUKKyAqIHN5c194eHgoKSBmdW5jdGlvbiBqdXN0IGFkZHMgdGhlIHBvaW50ZXIgYW5kIHRhaWwtY2FsbHMgdG8gX3N5c194eHgoKS4KKyAqLworCisvKiBrZXJuZWwvc3lzLmMgKi8KK3NzaXplX3Qgc3lzMzJfcmVhZGFoZWFkKGludCBmZCwgdTMyIG9mZnNldF9sbywgdTMyIG9mZnNldF9oaSwgdTMyIGNvdW50KTsKK2xvbmcgc3lzMzJfZmFkdmlzZTY0KGludCBmZCwgdTMyIG9mZnNldF9sbywgdTMyIG9mZnNldF9oaSwKKwkJICAgICB1MzIgbGVuLCBpbnQgYWR2aWNlKTsKK2ludCBzeXMzMl9mYWR2aXNlNjRfNjQoaW50IGZkLCB1MzIgb2Zmc2V0X2xvLCB1MzIgb2Zmc2V0X2hpLAorCQkgICAgICAgdTMyIGxlbl9sbywgdTMyIGxlbl9oaSwgaW50IGFkdmljZSk7Citsb25nIHN5c19mbHVzaF9jYWNoZSh2b2lkKTsKK2xvbmcgc3lzX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkgICAgICAgdW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZik7CisjaWZkZWYgX190aWxlZ3hfXworbG9uZyBzeXNfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKKwkgICAgICB1bnNpZ25lZCBsb25nIGZkLCBvZmZfdCBwZ29mZik7CisjZW5kaWYKKworLyoga2VybmVsL3Byb2Nlc3MuYyAqLworbG9uZyBzeXNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdzcCwKKwkgICAgICAgdm9pZCBfX3VzZXIgKnBhcmVudF90aWQsIHZvaWQgX191c2VyICpjaGlsZF90aWQpOworbG9uZyBfc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCXZvaWQgX191c2VyICpwYXJlbnRfdGlkLCB2b2lkIF9fdXNlciAqY2hpbGRfdGlkLAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Citsb25nIHN5c19mb3JrKHZvaWQpOworbG9uZyBfc3lzX2Zvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworbG9uZyBzeXNfdmZvcmsodm9pZCk7Citsb25nIF9zeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworbG9uZyBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICpmaWxlbmFtZSwgY2hhciBfX3VzZXIgKiBfX3VzZXIgKmFyZ3YsCisJCWNoYXIgX191c2VyICogX191c2VyICplbnZwKTsKK2xvbmcgX3N5c19leGVjdmUoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBjaGFyIF9fdXNlciAqIF9fdXNlciAqYXJndiwKKwkJIGNoYXIgX191c2VyICogX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIGtlcm5lbC9zaWduYWwuYyAqLworbG9uZyBzeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKiwgc3RhY2tfdCBfX3VzZXIgKik7Citsb25nIF9zeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCBfX3VzZXIgKiwgc3RhY2tfdCBfX3VzZXIgKiwKKwkJICAgICAgc3RydWN0IHB0X3JlZ3MgKik7Citsb25nIHN5c19ydF9zaWdyZXR1cm4odm9pZCk7Citsb25nIF9zeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogcGxhdGZvcm0taW5kZXBlbmRlbnQgZnVuY3Rpb25zICovCitsb25nIHN5c19ydF9zaWdzdXNwZW5kKHNpZ3NldF90IF9fdXNlciAqdW5ld3NldCwgc2l6ZV90IHNpZ3NldHNpemUpOworbG9uZyBzeXNfcnRfc2lnYWN0aW9uKGludCBzaWcsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICphY3QsCisJCSAgICAgIHN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LCBzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKyNpZm5kZWYgX190aWxlZ3hfXworLyogbW0vZmF1bHQuYyAqLworaW50IHN5c19jbXB4Y2hnX2JhZGFkZHIodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK2ludCBfc3lzX2NtcHhjaGdfYmFkYWRkcih1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwdF9yZWdzICopOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitsb25nIGNvbXBhdF9zeXNfZXhlY3ZlKGNoYXIgX191c2VyICpwYXRoLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKKwkJICAgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwKTsKK2xvbmcgX2NvbXBhdF9zeXNfZXhlY3ZlKGNoYXIgX191c2VyICpwYXRoLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKKwkJCWNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Citsb25nIGNvbXBhdF9zeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVzc19wdHIsCisJCQkgICAgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVvc3NfcHRyKTsKK2xvbmcgX2NvbXBhdF9zeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVzc19wdHIsCisJCQkgICAgIHN0cnVjdCBjb21wYXRfc2lnYWx0c3RhY2sgX191c2VyICp1b3NzX3B0ciwKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworbG9uZyBjb21wYXRfc3lzX3J0X3NpZ3JldHVybih2b2lkKTsKK2xvbmcgX2NvbXBhdF9zeXNfcnRfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworLyogVGhlc2UgZm91ciBhcmUgbm90IGRlZmluZWQgZm9yIDY0LWJpdCwgYnV0IHNlcnZlIGFzICJjb21wYXQiIHN5c2NhbGxzLiAqLworbG9uZyBzeXNfZmNudGw2NCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK2xvbmcgc3lzX2ZzdGF0NjQodW5zaWduZWQgbG9uZyBmZCwgc3RydWN0IHN0YXQ2NCBfX3VzZXIgKnN0YXRidWYpOworbG9uZyBzeXNfdHJ1bmNhdGU2NChjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwgbG9mZl90IGxlbmd0aCk7Citsb25nIHN5c19mdHJ1bmNhdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBsZW5ndGgpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NDliZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfU1lTVEVNX0gKKyNkZWZpbmUgX0FTTV9USUxFX1NZU1RFTV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisKKy8qIE5PVEU6IHdlIGNhbid0IGluY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPiBkdWUgdG8gI2luY2x1ZGUgZGVwZW5kZW5jaWVzLiAqLworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorI2luY2x1ZGUgPGFyY2gvc2ltX2RlZi5oPgorI2luY2x1ZGUgPGFyY2gvc3ByX2RlZi5oPgorCisvKgorICogcmVhZF9iYXJyaWVyX2RlcGVuZHMgLSBGbHVzaCBhbGwgcGVuZGluZyByZWFkcyB0aGF0IHN1YnNlcXVlbnRzIHJlYWRzCisgKiBkZXBlbmQgb24uCisgKgorICogTm8gZGF0YS1kZXBlbmRlbnQgcmVhZHMgZnJvbSBtZW1vcnktbGlrZSByZWdpb25zIGFyZSBldmVyIHJlb3JkZXJlZAorICogb3ZlciB0aGlzIGJhcnJpZXIuICBBbGwgcmVhZHMgcHJlY2VkaW5nIHRoaXMgcHJpbWl0aXZlIGFyZSBndWFyYW50ZWVkCisgKiB0byBhY2Nlc3MgbWVtb3J5IChidXQgbm90IG5lY2Vzc2FyaWx5IG90aGVyIENQVXMnIGNhY2hlcykgYmVmb3JlIGFueQorICogcmVhZHMgZm9sbG93aW5nIHRoaXMgcHJpbWl0aXZlIHRoYXQgZGVwZW5kIG9uIHRoZSBkYXRhIHJldHVybiBieQorICogYW55IG9mIHRoZSBwcmVjZWRpbmcgcmVhZHMuICBUaGlzIHByaW1pdGl2ZSBpcyBtdWNoIGxpZ2h0ZXIgd2VpZ2h0IHRoYW4KKyAqIHJtYigpIG9uIG1vc3QgQ1BVcywgYW5kIGlzIG5ldmVyIGhlYXZpZXIgd2VpZ2h0IHRoYW4gaXMKKyAqIHJtYigpLgorICoKKyAqIFRoZXNlIG9yZGVyaW5nIGNvbnN0cmFpbnRzIGFyZSByZXNwZWN0ZWQgYnkgYm90aCB0aGUgbG9jYWwgQ1BVCisgKiBhbmQgdGhlIGNvbXBpbGVyLgorICoKKyAqIE9yZGVyaW5nIGlzIG5vdCBndWFyYW50ZWVkIGJ5IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlc2UgcHJpbWl0aXZlcywKKyAqIG5vdCBldmVuIGJ5IGRhdGEgZGVwZW5kZW5jaWVzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICogbWVtb3J5X2JhcnJpZXIoKSBmb3IgZXhhbXBsZXMgYW5kIFVSTHMgdG8gbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdvdWxkIGZvcmNlIG9yZGVyaW5nICh0aGUgaW5pdGlhbAorICogdmFsdWUgb2YgImEiIGlzIHplcm8sICJiIiBpcyBvbmUsIGFuZCAicCIgaXMgIiZhIik6CisgKgorICogPHByb2dyYW1saXN0aW5nPgorICoJQ1BVIDAJCQkJQ1BVIDEKKyAqCisgKgliID0gMjsKKyAqCW1lbW9yeV9iYXJyaWVyKCk7CisgKglwID0gJmI7CQkJCXEgPSBwOworICoJCQkJCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisgKgkJCQkJZCA9ICpxOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBiZWNhdXNlIHRoZSByZWFkIG9mICIqcSIgZGVwZW5kcyBvbiB0aGUgcmVhZCBvZiAicCIgYW5kIHRoZXNlCisgKiB0d28gcmVhZHMgYXJlIHNlcGFyYXRlZCBieSBhIHJlYWRfYmFycmllcl9kZXBlbmRzKCkuICBIb3dldmVyLAorICogdGhlIGZvbGxvd2luZyBjb2RlLCB3aXRoIHRoZSBzYW1lIGluaXRpYWwgdmFsdWVzIGZvciAiYSIgYW5kICJiIjoKKyAqCisgKiA8cHJvZ3JhbWxpc3Rpbmc+CisgKglDUFUgMAkJCQlDUFUgMQorICoKKyAqCWEgPSAyOworICoJbWVtb3J5X2JhcnJpZXIoKTsKKyAqCWIgPSAzOwkJCQl5ID0gYjsKKyAqCQkJCQlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworICoJCQkJCXggPSBhOworICogPC9wcm9ncmFtbGlzdGluZz4KKyAqCisgKiBkb2VzIG5vdCBlbmZvcmNlIG9yZGVyaW5nLCBzaW5jZSB0aGVyZSBpcyBubyBkYXRhIGRlcGVuZGVuY3kgYmV0d2VlbgorICogdGhlIHJlYWQgb2YgImEiIGFuZCB0aGUgcmVhZCBvZiAiYiIuICBUaGVyZWZvcmUsIG9uIHNvbWUgQ1BVcywgc3VjaAorICogYXMgQWxwaGEsICJ5IiBjb3VsZCBiZSBzZXQgdG8gMyBhbmQgIngiIHRvIDAuICBVc2Ugcm1iKCkKKyAqIGluIGNhc2VzIGxpa2UgdGhpcyB3aGVyZSB0aGVyZSBhcmUgbm8gZGF0YSBkZXBlbmRlbmNpZXMuCisgKi8KKworI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX3N5bmMoKQlfX2luc25fbWYoKQorCisjaWYgQ0hJUF9IQVNfU1BMSVRfQ1lDTEUoKQorI2RlZmluZSBnZXRfY3ljbGVzX2xvdygpIF9faW5zbl9tZnNwcihTUFJfQ1lDTEVfTE9XKQorI2Vsc2UKKyNkZWZpbmUgZ2V0X2N5Y2xlc19sb3coKSBfX2luc25fbWZzcHIoU1BSX0NZQ0xFKSAgIC8qIGp1c3QgZ2V0IGFsbCA2NCBiaXRzICovCisjZW5kaWYKKworLyogRmVuY2UgdG8gZ3VhcmFudGVlIHZpc2liaWxpdHkgb2Ygc3RvcmVzIHRvIGluY29oZXJlbnQgbWVtb3J5LiAqLworc3RhdGljIGlubGluZSB2b2lkCittYl9pbmNvaGVyZW50KHZvaWQpCit7CisJX19pbnNuX21mKCk7CisKKyNpZiAhQ0hJUF9IQVNfTUZfV0FJVFNfRk9SX1ZJQ1RJTVMoKQorCXsKKwkJaW50IF9fbWJfaW5jb2hlcmVudCh2b2lkKTsKKyNpZiBDSElQX0hBU19USUxFX1dSSVRFX1BFTkRJTkcoKQorCQljb25zdCB1bnNpZ25lZCBsb25nIFdSSVRFX1RJTUVPVVRfQ1lDTEVTID0gNDAwOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gZ2V0X2N5Y2xlc19sb3coKTsKKwkJZG8geworCQkJaWYgKF9faW5zbl9tZnNwcihTUFJfVElMRV9XUklURV9QRU5ESU5HKSA9PSAwKQorCQkJCXJldHVybjsKKwkJfSB3aGlsZSAoKGdldF9jeWNsZXNfbG93KCkgLSBzdGFydCkgPCBXUklURV9USU1FT1VUX0NZQ0xFUyk7CisjZW5kaWYgLyogQ0hJUF9IQVNfVElMRV9XUklURV9QRU5ESU5HKCkgKi8KKwkJKHZvaWQpIF9fbWJfaW5jb2hlcmVudCgpOworCX0KKyNlbmRpZiAvKiBDSElQX0hBU19NRl9XQUlUU19GT1JfVklDVElNUygpICovCit9CisKKyNkZWZpbmUgZmFzdF93bWIoKQlfX3N5bmMoKQorI2RlZmluZSBmYXN0X3JtYigpCV9fc3luYygpCisjZGVmaW5lIGZhc3RfbWIoKQlfX3N5bmMoKQorI2RlZmluZSBmYXN0X2lvYigpCW1iX2luY29oZXJlbnQoKQorCisjZGVmaW5lIHdtYigpCQlmYXN0X3dtYigpCisjZGVmaW5lIHJtYigpCQlmYXN0X3JtYigpCisjZGVmaW5lIG1iKCkJCWZhc3RfbWIoKQorI2RlZmluZSBpb2IoKQkJZmFzdF9pb2IoKQorCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBzbXBfbWIoKQltYigpCisjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQorI2RlZmluZSBzbXBfd21iKCkJd21iKCkKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2Vsc2UKKyNkZWZpbmUgc21wX21iKCkJYmFycmllcigpCisjZGVmaW5lIHNtcF9ybWIoKQliYXJyaWVyKCkKKyNkZWZpbmUgc21wX3dtYigpCWJhcnJpZXIoKQorI2RlZmluZSBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgXAorCWRvIHsgdmFyID0gdmFsdWU7IG1iKCk7IH0gd2hpbGUgKDApCisKKy8qCisgKiBQYXVzZSB0aGUgRE1BIGVuZ2luZSBhbmQgc3RhdGljIG5ldHdvcmsgYmVmb3JlIHRhc2sgc3dpdGNoaW5nLgorICovCisjZGVmaW5lIHByZXBhcmVfYXJjaF9zd2l0Y2gobmV4dCkgX3ByZXBhcmVfYXJjaF9zd2l0Y2gobmV4dCkKK3ZvaWQgX3ByZXBhcmVfYXJjaF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KTsKKworCisvKgorICogc3dpdGNoX3RvKG4pIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdAorICogY2hlY2tpbmcgdGhhdCBuIGlzbid0IHRoZSBjdXJyZW50IHRhc2ssIGluIHdoaWNoIGNhc2UgaXQgZG9lcyBub3RoaW5nLgorICogVGhlIG51bWJlciBvZiBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIHNhdmVkIG9uIHRoZSBrZXJuZWwgc3RhY2sKKyAqIGlzIGRlZmluZWQgaGVyZSBmb3IgdXNlIGluIGNvcHlfdGhyZWFkKCkgYW5kIG11c3QgYWdyZWUgd2l0aCBfX3N3aXRjaF90bygpLgorICovCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworI2RlZmluZSBDQUxMRUVfU0FWRURfRklSU1RfUkVHIDMwCisjZGVmaW5lIENBTExFRV9TQVZFRF9SRUdTX0NPVU5UIDI0ICAgLyogcjMwIHRvIHI1MiwgcGx1cyBhbiBlbXB0eSB0byBhbGlnbiAqLworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0cnVjdCB0YXNrX3N0cnVjdDsKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpICgobGFzdCkgPSBfc3dpdGNoX3RvKChwcmV2KSwgKG5leHQpKSkKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgX3N3aXRjaF90bygpLiAqLworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJCSAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbmV3X3N5c3RlbV9zYXZlXzFfMCk7CisKKy8qIEFkZHJlc3MgdGhhdCBzd2l0Y2hlZC1hd2F5IGZyb20gdGFza3MgYXJlIGF0LiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3N3aXRjaF90b19wYyh2b2lkKTsKKworLyoKKyAqIE9uIFNNUCBzeXN0ZW1zLCB3aGVuIHRoZSBzY2hlZHVsZXIgZG9lcyBtaWdyYXRpb24tY29zdCBhdXRvZGV0ZWN0aW9uLAorICogaXQgbmVlZHMgYSB3YXkgdG8gZmx1c2ggYXMgbXVjaCBvZiB0aGUgQ1BVJ3MgY2FjaGVzIGFzIHBvc3NpYmxlOgorICoKKyAqIFRPRE86IGZpbGwgdGhpcyBpbiEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNjaGVkX2NhY2hlZmx1c2godm9pZCkKK3sKK30KKworI2RlZmluZSBhcmNoX2FsaWduX3N0YWNrKHgpICh4KQorCisvKgorICogSXMgdGhlIGtlcm5lbCBkb2luZyBmaXh1cHMgb2YgdW5hbGlnbmVkIGFjY2Vzc2VzPyAgSWYgPDAsIG5vIGtlcm5lbAorICogaW50ZXJ2ZW50aW9uIG9jY3VycyBhbmQgU0lHQlVTIGlzIGRlbGl2ZXJlZCB3aXRoIG5vIGRhdGEgYWRkcmVzcworICogaW5mby4gIElmIDAsIHRoZSBrZXJuZWwgc2luZ2xlLXN0ZXBzIHRoZSBpbnN0cnVjdGlvbiB0byBkaXNjb3ZlcgorICogdGhlIGRhdGEgYWRkcmVzcyB0byBwcm92aWRlIHdpdGggdGhlIFNJR0JVUy4gIElmIDEsIHRoZSBrZXJuZWwgZG9lcworICogYSBmaXh1cC4KKyAqLworZXh0ZXJuIGludCB1bmFsaWduZWRfZml4dXA7CisKKy8qIElzIHRoZSBrZXJuZWwgcHJpbnRpbmcgb24gZWFjaCB1bmFsaWduZWQgZml4dXA/ICovCitleHRlcm4gaW50IHVuYWxpZ25lZF9wcmludGs7CisKKy8qIE51bWJlciBvZiB1bmFsaWduZWQgZml4dXBzIHBlcmZvcm1lZCAqLworZXh0ZXJuIHVuc2lnbmVkIGludCB1bmFsaWduZWRfZml4dXBfY291bnQ7CisKKy8qIEluaXQtdGltZSByb3V0aW5lIHRvIGRvIHRpbGUtc3BlY2lmaWMgcGVyLWNwdSBzZXR1cC4gKi8KK3ZvaWQgc2V0dXBfY3B1KGludCBib290KTsKKworLyogVXNlci1sZXZlbCBETUEgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK3ZvaWQgZ3JhbnRfZG1hX21wbHModm9pZCk7Cit2b2lkIHJlc3RyaWN0X2RtYV9tcGxzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0hBUkRXQUxMCisvKiBVc2VyLWxldmVsIG5ldHdvcmsgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KK3ZvaWQgcmVzZXRfbmV0d29ya19zdGF0ZSh2b2lkKTsKK3ZvaWQgZ3JhbnRfbmV0d29ya19tcGxzKHZvaWQpOwordm9pZCByZXN0cmljdF9uZXR3b3JrX21wbHModm9pZCk7CitpbnQgaGFyZHdhbGxfZGVhY3RpdmF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCisvKiBIb29rIGhhcmR3YWxsIGNvZGUgaW50byBjaGFuZ2VzIGluIGFmZmluaXR5LiAqLworI2RlZmluZSBhcmNoX3NldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spIGRvIHsgXAorCWlmIChwLT50aHJlYWQuaGFyZHdhbGwgJiYgIWNwdW1hc2tfZXF1YWwoJnAtPmNwdXNfYWxsb3dlZCwgbmV3X21hc2spKSBcCisJCWhhcmR3YWxsX2RlYWN0aXZhdGUocCk7IFwKK30gd2hpbGUgKDApCisjZW5kaWYKKworLyogSW52b2tlIHRoZSBzaW11bGF0b3IgInN5c2NhbGwiIG1lY2hhbmlzbSAoc2VlIGFyY2gvdGlsZS9rZXJuZWwvZW50cnkuUykuICovCitleHRlcm4gaW50IF9zaW1fc3lzY2FsbChpbnQgc3lzY2FsbF9udW0sIC4uLik7CisjZGVmaW5lIHNpbV9zeXNjYWxsKHN5c2NhbGxfbnVtLCAuLi4pIFwKKwlfc2ltX3N5c2NhbGwoU0lNX0NPTlRST0xfU1lTQ0FMTCArIFwKKwkJKChzeXNjYWxsX251bSkgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpLCBcCisJCSMjIF9fVkFfQVJHU19fKQorCisvKgorICogS2VybmVsIHRocmVhZHMgY2FuIGNoZWNrIHRvIHNlZSBpZiB0aGV5IG5lZWQgdG8gbWlncmF0ZSB0aGVpcgorICogc3RhY2sgd2hlbmV2ZXIgdGhleSByZXR1cm4gZnJvbSBhIGNvbnRleHQgc3dpdGNoOyBmb3IgdXNlcgorICogdGhyZWFkcywgd2UgZGVmZXIgdW50aWwgdGhleSBhcmUgcmV0dXJuaW5nIHRvIHVzZXItc3BhY2UuCisgKi8KKyNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICh1bmxpa2VseSgocHJldiktPnN0YXRlID09IFRBU0tfREVBRCkpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX19pbnNuX210c3ByKFNQUl9TSU1fQ09OVFJPTCwgU0lNX0NPTlRST0xfT1NfRVhJVCB8ICAgICAgIFwKKwkJCSgocHJldiktPnBpZCA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOyAgICAgXAorCV9faW5zbl9tdHNwcihTUFJfU0lNX0NPTlRST0wsIFNJTV9DT05UUk9MX09TX1NXSVRDSCB8ICAgICAgICAgICAgIFwKKwkJKGN1cnJlbnQtPnBpZCA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOyAgICAgICAgICAgIFwKKwlpZiAoY3VycmVudC0+bW0gPT0gTlVMTCAmJiAha3N0YWNrX2hhc2ggJiYgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+aG9tZWNhY2hlX2NwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICAgXAorCQlob21lY2FjaGVfbWlncmF0ZV9rdGhyZWFkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworLyogU3VwcG9ydCBmdW5jdGlvbiBmb3IgZm9ya2luZyBhIG5ldyB0YXNrLiAqLwordm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOworCisvKiBDYWxsZWQgZnJvbSByZXRfZnJvbV9mb3JrKCkgd2hlbiBhIG5ldyBwcm9jZXNzIHN0YXJ0cyB1cC4gKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqc2ltX25vdGlmeV9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldik7CisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzNWIxMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90ZXJtYml0cy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwZDc4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MmYyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0FTTV9USUxFX1RIUkVBRF9JTkZPX0gKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyoKKyAqIExvdyBsZXZlbCB0YXNrIGRhdGEgdGhhdCBhc3NlbWJseSBjb2RlIG5lZWRzIGltbWVkaWF0ZSBhY2Nlc3MgdG8uCisgKiBUaGUgc3RydWN0dXJlIGlzIHBsYWNlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdXBlcnZpc29yIHN0YWNrLgorICovCitzdHJ1Y3QgdGhyZWFkX2luZm8geworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIG1haW4gdGFzayBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZXhlY19kb21haW4JKmV4ZWNfZG9tYWluOwkvKiBleGVjdXRpb24gZG9tYWluICovCisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBsb3cgbGV2ZWwgZmxhZ3MgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGF0dXM7CQkvKiB0aHJlYWQtc3luY2hyb25vdXMgZmxhZ3MgKi8KKwlfX3UzMgkJCWhvbWVjYWNoZV9jcHU7CS8qIENQVSB3ZSBhcmUgaG9tZWNhY2hlZCBvbiAqLworCV9fdTMyCQkJY3B1OwkJLyogY3VycmVudCBDUFUgKi8KKwlpbnQJCQlwcmVlbXB0X2NvdW50OwkvKiAwID0+IHByZWVtcHRhYmxlLAorCQkJCQkJICAgPDAgPT4gQlVHICovCisKKwltbV9zZWdtZW50X3QJCWFkZHJfbGltaXQ7CS8qIHRocmVhZCBhZGRyZXNzIHNwYWNlCisJCQkJCQkgICAoS0VSTkVMX0RTIG9yIFVTRVJfRFMpICovCisJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKKwlzdHJ1Y3Qgc2luZ2xlX3N0ZXBfc3RhdGUgKnN0ZXBfc3RhdGU7CS8qIHNpbmdsZSBzdGVwIHN0YXRlCisJCQkJCQkgICAoaWYgbm9uLXplcm8pICovCit9OworCisvKgorICogbWFjcm9zL2Z1bmN0aW9ucyBmb3IgZ2FpbmluZyBhY2Nlc3MgdG8gdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgSU5JVF9USFJFQURfSU5GTyh0c2spCQkJXAorewkJCQkJCVwKKwkudGFzawkJPSAmdHNrLAkJCVwKKwkuZXhlY19kb21haW4JPSAmZGVmYXVsdF9leGVjX2RvbWFpbiwJXAorCS5mbGFncwkJPSAwLAkJCVwKKwkuY3B1CQk9IDAsCQkJXAorCS5wcmVlbXB0X2NvdW50CT0gSU5JVF9QUkVFTVBUX0NPVU5ULAlcCisJLmFkZHJfbGltaXQJPSBLRVJORUxfRFMsCQlcCisJLnJlc3RhcnRfYmxvY2sJPSB7CQkJXAorCQkuZm4gPSBkb19ub19yZXN0YXJ0X3N5c2NhbGwsCVwKKwl9LAkJCQkJXAorCS5zdGVwX3N0YXRlCT0gTlVMTCwJCQlcCit9CisKKyNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCisjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmIFBBR0VfU0laRSA8IDgxOTIKKyNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgKDEzIC0gUEFHRV9TSElGVCkKKyNlbHNlCisjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSICgwKQorI2VuZGlmCisKKyNkZWZpbmUgVEhSRUFEX1NJWkUgKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKKyNkZWZpbmUgTE9HMl9USFJFQURfU0laRSAoUEFHRV9TSElGVCArIFRIUkVBRF9TSVpFX09SREVSKQorCisjZGVmaW5lIFNUQUNLX1dBUk4gICAgICAgICAgICAgKFRIUkVBRF9TSVpFLzgpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIEhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDLiAqLworcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBzdGFja19wb2ludGVyIF9fYXNtX18oInNwIik7CisKKyNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpIFwKKyAgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikoc3RhY2tfcG9pbnRlciAmIC1USFJFQURfU0laRSkpCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfVEhSRUFEX0lORk9fQUxMT0NBVE9SCitleHRlcm4gc3RydWN0IHRocmVhZF9pbmZvICphbGxvY190aHJlYWRfaW5mbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworZXh0ZXJuIHZvaWQgZnJlZV90aHJlYWRfaW5mbyhzdHJ1Y3QgdGhyZWFkX2luZm8gKmluZm8pOworCisvKiBTaXQgb24gYSBuYXAgaW5zdHJ1Y3Rpb24gdW50aWwgaW50ZXJydXB0ZWQuICovCitleHRlcm4gdm9pZCBzbXBfbmFwKHZvaWQpOworCisvKiBFbmFibGUgaW50ZXJydXB0cyByYWNlbGVzc2x5IGFuZCBuYXAgZm9yZXZlcjogaGVscGVyIGZvciBjcHVfaWRsZSgpLiAqLworZXh0ZXJuIHZvaWQgX2NwdV9pZGxlKHZvaWQpOworCisvKiBTd2l0Y2ggYm9vdCBpZGxlIHRocmVhZCB0byBhIGZyZXNobHktYWxsb2NhdGVkIHN0YWNrIGFuZCBmcmVlIG9sZCBzdGFjay4gKi8KK2V4dGVybiB2b2lkIGNwdV9pZGxlX29uX25ld19zdGFjayhzdHJ1Y3QgdGhyZWFkX2luZm8gKm9sZF90aSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbmV3X3NwLAorCQkJCSAgdW5zaWduZWQgbG9uZyBuZXdfc3MxMCk7CisKKyNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBHRVRfVEhSRUFEX0lORk8ocmVnKSBtb3ZlIHJlZywgc3A7IG1tIHJlZywgemVybywgTE9HMl9USFJFQURfU0laRSwgNjMKKyNlbHNlCisjZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpIG1tIHJlZywgc3AsIHplcm8sIExPRzJfVEhSRUFEX1NJWkUsIDMxCisjZW5kaWYKKworI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKworI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAorCisvKgorICogVGhyZWFkIGluZm9ybWF0aW9uIGZsYWdzIHRoYXQgdmFyaW91cyBhc3NlbWJseSBmaWxlcyBtYXkgbmVlZCB0byBhY2Nlc3MuCisgKiBLZWVwIGZsYWdzIGFjY2Vzc2VkIGZyZXF1ZW50bHkgaW4gbG93IGJpdHMsIHBhcnRpY3VsYXIgc2luY2UgaXQgbWFrZXMKKyAqIGl0IGVhc2llciB0byBidWlsZCBjb25zdGFudHMgaW4gYXNzZW1ibHkuCisgKi8KKyNkZWZpbmUgVElGX1NJR1BFTkRJTkcJCTAJLyogc2lnbmFsIHBlbmRpbmcgKi8KKyNkZWZpbmUgVElGX05FRURfUkVTQ0hFRAkxCS8qIHJlc2NoZWR1bGluZyBuZWNlc3NhcnkgKi8KKyNkZWZpbmUgVElGX1NJTkdMRVNURVAJCTIJLyogcmVzdG9yZSBzaW5nbGVzdGVwIG9uIHJldHVybiB0bworCQkJCQkgICB1c2VyIG1vZGUgKi8KKyNkZWZpbmUgVElGX0FTWU5DX1RMQgkJMwkvKiBnb3QgYW4gYXN5bmMgVExCIGZhdWx0IGluIGtlcm5lbCAqLworI2RlZmluZSBUSUZfU1lTQ0FMTF9UUkFDRQk0CS8qIHN5c2NhbGwgdHJhY2UgYWN0aXZlICovCisjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTUJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KKyNkZWZpbmUgVElGX1NFQ0NPTVAJCTYJLyogc2VjdXJlIGNvbXB1dGluZyAqLworI2RlZmluZSBUSUZfTUVNRElFCQk3CS8qIE9PTSBraWxsZXIgYXQgd29yayAqLworCisjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDE8PFRJRl9TSUdQRU5ESU5HKQorI2RlZmluZSBfVElGX05FRURfUkVTQ0hFRAkoMTw8VElGX05FRURfUkVTQ0hFRCkKKyNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMTw8VElGX1NJTkdMRVNURVApCisjZGVmaW5lIF9USUZfQVNZTkNfVExCCQkoMTw8VElGX0FTWU5DX1RMQikKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX1RSQUNFCSgxPDxUSUZfU1lTQ0FMTF9UUkFDRSkKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxPDxUSUZfU1lTQ0FMTF9BVURJVCkKKyNkZWZpbmUgX1RJRl9TRUNDT01QCQkoMTw8VElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfTUVNRElFCQkoMTw8VElGX01FTURJRSkKKworLyogV29yayB0byBkbyBvbiBhbnkgcmV0dXJuIHRvIHVzZXIgc3BhY2UuICovCisjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLIFwKKyAgKF9USUZfU0lHUEVORElOR3xfVElGX05FRURfUkVTQ0hFRHxfVElGX1NJTkdMRVNURVB8X1RJRl9BU1lOQ19UTEIpCisKKy8qCisgKiBUaHJlYWQtc3luY2hyb25vdXMgc3RhdHVzLgorICoKKyAqIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGZsYWdzIGluIHRoYXQgbm9ib2R5IGVsc2UKKyAqIGV2ZXIgdG91Y2hlcyBvdXIgdGhyZWFkLXN5bmNocm9ub3VzIHN0YXR1cywgc28gd2UgZG9uJ3QKKyAqIGhhdmUgdG8gd29ycnkgYWJvdXQgYXRvbWljIGFjY2Vzc2VzLgorICovCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBUU19DT01QQVQJCTB4MDAwMQkvKiAzMi1iaXQgY29tcGF0aWJpbGl0eSBtb2RlICovCisjZW5kaWYKKyNkZWZpbmUgVFNfUE9MTElORwkJMHgwMDA0CS8qIGluIGlkbGUgbG9vcCBidXQgbm90IHNsZWVwaW5nICovCisjZGVmaW5lIFRTX1JFU1RPUkVfU0lHTUFTSwkweDAwMDgJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwgKi8KKworI2RlZmluZSB0c2tfaXNfcG9sbGluZyh0KSAodGFza190aHJlYWRfaW5mbyh0KS0+c3RhdHVzICYgVFNfUE9MTElORykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSEFWRV9TRVRfUkVTVE9SRV9TSUdNQVNLCTEKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcmVzdG9yZV9zaWdtYXNrKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwl0aS0+c3RhdHVzIHw9IFRTX1JFU1RPUkVfU0lHTUFTSzsKKwlzZXRfYml0KFRJRl9TSUdQRU5ESU5HLCAmdGktPmZsYWdzKTsKK30KKyNlbmRpZgkvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfVEhSRUFEX0lORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFmNWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9USU1FWF9ICisjZGVmaW5lIF9BU01fVElMRV9USU1FWF9ICisKKy8qCisgKiBUaGlzIHJhdGUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBvc3NpYmxlIEhaIHZhbHVlcyAoMTAwLCAyNTAsIDEwMDApCisgKiBhbmQgYSBmcmFjdGlvbiBvZiB0aGUgcG9zc2libGUgaGFyZHdhcmUgdGltZXIgZnJlcXVlbmNpZXMuICBPdXIgdGltZXIKKyAqIGZyZXF1ZW5jeSBpcyBoaWdobHkgdHVuYWJsZSBidXQgYWxzbyBxdWl0ZSBwcmVjaXNlLCBzbyBmb3IgdGhlIHByaW1hcnkgdXNlCisgKiBvZiB0aGlzIHZhbHVlIChzZXR0aW5nIEFDVF9IWiBmcm9tIEhaKSB3ZSBqdXN0IHBpY2sgYSB2YWx1ZSB0aGF0IGNhdXNlcworICogQUNUX0haIHRvIGJlIHNldCB0byBIWi4gIFdlIG1ha2UgdGhlIHZhbHVlIHNvbWV3aGF0IGxhcmdlIGp1c3QgdG8gYmUKKyAqIG1vcmUgcm9idXN0IGluIGNhc2Ugc29tZW9uZSB0cmllcyBvdXQgYSBuZXcgdmFsdWUgb2YgSFouCisgKi8KKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTEwMDAwMDAKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7CisKKyNpZiBDSElQX0hBU19TUExJVF9DWUNMRSgpCitjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiBfX2luc25fbWZzcHIoU1BSX0NZQ0xFKTsKK30KKyNlbmRpZgorCitjeWNsZXNfdCBnZXRfY2xvY2tfcmF0ZSh2b2lkKTsKKworLyogQ2FsbGVkIGF0IGNwdSBpbml0aWFsaXphdGlvbiB0byBzZXQgc29tZSBsb3ctbGV2ZWwgY29uc3RhbnRzLiAqLwordm9pZCBzZXR1cF9jbG9jayh2b2lkKTsKKworLyogQ2FsbGVkIGF0IGNwdSBpbml0aWFsaXphdGlvbiB0byBzdGFydCB0aGUgdGlsZS10aW1lciBjbG9jayBkZXZpY2UuICovCit2b2lkIHNldHVwX3RpbGVfdGltZXIodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RsYi5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RsYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhODkxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGxiLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9UTEJfSAorI2RlZmluZSBfQVNNX1RJTEVfVExCX0gKKworI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9lbmRfdm1hKHRsYiwgdm1hKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpIGZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy90bGIuaD4KKworI2VuZGlmIC8qIF9BU01fVElMRV9UTEJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjE5OWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQVNNX1RJTEVfVExCRkxVU0hfSAorI2RlZmluZSBfQVNNX1RJTEVfVExCRkxVU0hfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisKKy8qCisgKiBSYXRoZXIgdGhhbiBhc3NvY2lhdGluZyBlYWNoIG1tIHdpdGggaXRzIG93biBBU0lELCB3ZSBqdXN0IHVzZQorICogQVNJRHMgdG8gYWxsb3cgdXMgdG8gbGF6aWx5IGZsdXNoIHRoZSBUTEIgd2hlbiB3ZSBzd2l0Y2ggbW1zLgorICogVGhpcyB3YXkgd2Ugb25seSBoYXZlIHRvIGRvIGFuIGFjdHVhbCBUTEIgZmx1c2ggb24gbW0gc3dpdGNoCisgKiBldmVyeSB0aW1lIHdlIHdyYXAgQVNJRHMsIG5vdCBldmVyeSBzaW5nbGUgdGltZSB3ZSBzd2l0Y2guCisgKgorICogRklYTUU6IFdlIG1pZ2h0IGltcHJvdmUgcGVyZm9ybWFuY2UgYnkga2VlcGluZyBBU0lEcyBhcm91bmQKKyAqIHByb3Blcmx5LCB0aG91Z2ggc2luY2UgdGhlIGh5cGVydmlzb3IgZGlyZWN0LW1hcHMgVkFzIHRvIFRTQgorICogZW50cmllcywgd2UncmUgbGlrZWx5IHRvIGhhdmUgbG9zdCBhdCBsZWFzdCB0aGUgZXhlY3V0YWJsZSBwYWdlCisgKiBtYXBwaW5ncyBieSB0aGUgdGltZSB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgbW0uCisgKi8KK0RFQ0xBUkVfUEVSX0NQVShpbnQsIGN1cnJlbnRfYXNpZCk7CisKKy8qIFRoZSBoeXBlcnZpc29yIHRlbGxzIHVzIHdoYXQgQVNJRHMgYXJlIGF2YWlsYWJsZSB0byB1cy4gKi8KK2V4dGVybiBpbnQgbWluX2FzaWQsIG1heF9hc2lkOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaHZfcGFnZV9zaXplKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEIpID8gSFBBR0VfU0laRSA6IFBBR0VfU0laRTsKK30KKworLyogUGFzcyBhcyB2bWEgcG9pbnRlciBmb3Igbm9uLWV4ZWN1dGFibGUgbWFwcGluZywgaWYgbm8gdm1hIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgRkxVU0hfTk9ORVhFQyAoKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKS0xVUwpCisKKy8qIEZsdXNoIGEgc2luZ2xlIHVzZXIgcGFnZSBvbiB0aGlzIGNwdS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9mbHVzaF90bGJfcGFnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZSkKK3sKKwlpbnQgcmMgPSBodl9mbHVzaF9wYWdlKGFkZHIsIHBhZ2Vfc2l6ZSk7CisJaWYgKHJjIDwgMCkKKwkJcGFuaWMoImh2X2ZsdXNoX3BhZ2UoJSNseCwlI2x4KSBmYWlsZWQ6ICVkIiwKKwkJICAgICAgYWRkciwgcGFnZV9zaXplLCByYyk7CisJaWYgKCF2bWEgfHwgKHZtYSAhPSBGTFVTSF9OT05FWEVDICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpKQorCQlfX2ZsdXNoX2ljYWNoZSgpOworfQorCisvKiBGbHVzaCByYW5nZSBvZiB1c2VyIHBhZ2VzIG9uIHRoaXMgY3B1LiAqLworc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9wYWdlcyhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IHJjID0gaHZfZmx1c2hfcGFnZXMoYWRkciwgcGFnZV9zaXplLCBsZW4pOworCWlmIChyYyA8IDApCisJCXBhbmljKCJodl9mbHVzaF9wYWdlcyglI2x4LCUjbHgsJSNseCkgZmFpbGVkOiAlZCIsCisJCSAgICAgIGFkZHIsIHBhZ2Vfc2l6ZSwgbGVuLCByYyk7CisJaWYgKCF2bWEgfHwgKHZtYSAhPSBGTFVTSF9OT05FWEVDICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykpKQorCQlfX2ZsdXNoX2ljYWNoZSgpOworfQorCisvKiBGbHVzaCBhbGwgdXNlciBwYWdlcyBvbiB0aGlzIGNwdS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9mbHVzaF90bGIodm9pZCkKK3sKKwlpbnQgcmMgPSBodl9mbHVzaF9hbGwoMSk7ICAgLyogcHJlc2VydmUgZ2xvYmFsIG1hcHBpbmdzICovCisJaWYgKHJjIDwgMCkKKwkJcGFuaWMoImh2X2ZsdXNoX2FsbCgxKSBmYWlsZWQ6ICVkIiwgcmMpOworCV9fZmx1c2hfaWNhY2hlKCk7Cit9CisKKy8qCisgKiBHbG9iYWwgcGFnZXMgaGF2ZSB0byBiZSBmbHVzaGVkIGEgYml0IGRpZmZlcmVudGx5LiBOb3QgYSByZWFsCisgKiBwZXJmb3JtYW5jZSBwcm9ibGVtIGJlY2F1c2UgdGhpcyBkb2VzIG5vdCBoYXBwZW4gb2Z0ZW4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgOyArK2kpIHsKKwkJSFZfVmlydEFkZHJSYW5nZSByID0gaHZfaW5xdWlyZV92aXJ0dWFsKGkpOworCQlpZiAoci5zaXplID09IDApCisJCQlicmVhazsKKwkJbG9jYWxfZmx1c2hfdGxiX3BhZ2VzKE5VTEwsIHIuc3RhcnQsIFBBR0VfU0laRSwgci5zaXplKTsKKwkJbG9jYWxfZmx1c2hfdGxiX3BhZ2VzKE5VTEwsIHIuc3RhcnQsIEhQQUdFX1NJWkUsIHIuc2l6ZSk7CisJfQorfQorCisvKgorICogVExCIGZsdXNoaW5nOgorICoKKyAqICAtIGZsdXNoX3RsYigpIGZsdXNoZXMgdGhlIGN1cnJlbnQgbW0gc3RydWN0IFRMQnMKKyAqICAtIGZsdXNoX3RsYl9hbGwoKSBmbHVzaGVzIGFsbCBwcm9jZXNzZXMgVExCcworICogIC0gZmx1c2hfdGxiX21tKG1tKSBmbHVzaGVzIHRoZSBzcGVjaWZpZWQgbW0gY29udGV4dCBUTEIncworICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKKyAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcworICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCisgKiAgLSBmbHVzaF90bGJfb3RoZXJzKGNwdW1hc2ssIG1tLCB2YSkgZmx1c2hlcyBUTEJzIG9uIG90aGVyIGNwdXMKKyAqCisgKiBIZXJlIChhcyBpbiB2bV9hcmVhX3N0cnVjdCksICJlbmQiIG1lYW5zIHRoZSBmaXJzdCBieXRlIGFmdGVyCisgKiBvdXIgZW5kIGFkZHJlc3MuCisgKi8KKworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKTsKK2V4dGVybiB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2VfbW0oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosCisJCQkgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3JhbmdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKKworI2RlZmluZSBmbHVzaF90bGIoKSAgICAgZmx1c2hfdGxiX2N1cnJlbnRfdGFzaygpCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDMxNzJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fVElMRV9UT1BPTE9HWV9ICisKKyNpZmRlZiBDT05GSUdfTlVNQQorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorCisvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIuICovCitleHRlcm4gc3RydWN0IGNwdW1hc2sgbm9kZV8yX2NwdV9tYXNrW107CitleHRlcm4gY2hhciBjcHVfMl9ub2RlW107CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIENQVSAnY3B1Jy4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNwdV90b19ub2RlKGludCBjcHUpCit7CisJcmV0dXJuIGNwdV8yX25vZGVbY3B1XTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbm9kZSBjb250YWluaW5nIE5vZGUgJ25vZGUnLgorICogVGhpcyBhcmNoaXRlY3R1cmUgaXMgZmxhdCwgc28gaXQgaXMgYSBwcmV0dHkgc2ltcGxlIGZ1bmN0aW9uIQorICovCisjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpIChub2RlKQorCisvKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQoreworCXJldHVybiAmbm9kZV8yX2NwdV9tYXNrW25vZGVdOworfQorCisvKiBGb3Igbm93LCB1c2UgbnVtYSBub2RlIC0xIGZvciBnbG9iYWwgYWxsb2NhdGlvbi4gKi8KKyNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKQkJKCh2b2lkKShidXMpLCAtMSkKKworLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFRJTEUgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAorCS5taW5faW50ZXJ2YWwJCT0gOCwJCQlcCisJLm1heF9pbnRlcnZhbAkJPSAzMiwJCQlcCisJLmJ1c3lfZmFjdG9yCQk9IDMyLAkJCVwKKwkuaW1iYWxhbmNlX3BjdAkJPSAxMjUsCQkJXAorCS5jYWNoZV9uaWNlX3RyaWVzCT0gMSwJCQlcCisJLmJ1c3lfaWR4CQk9IDMsCQkJXAorCS5pZGxlX2lkeAkJPSAxLAkJCVwKKwkubmV3aWRsZV9pZHgJCT0gMiwJCQlcCisJLndha2VfaWR4CQk9IDEsCQkJXAorCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKKwkJCQl8IFNEX0JBTEFOQ0VfTkVXSURMRQlcCisJCQkJfCBTRF9CQUxBTkNFX0VYRUMJXAorCQkJCXwgU0RfQkFMQU5DRV9GT1JLCVwKKwkJCQl8IFNEX1dBS0VfQUZGSU5FCVwKKwkJCQl8IFNEX1NFUklBTElaRSwJCVwKKwkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCisJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKK30KKworLyogQnkgZGVmaW5pdGlvbiwgd2UgY3JlYXRlIG5vZGVzIGJhc2VkIG9uIG9ubGluZSBtZW1vcnkuICovCisjZGVmaW5lIG5vZGVfaGFzX29ubGluZV9tZW0obmlkKSAxCisKKyNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLworCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KKworI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgdG9wb2xvZ3lfcGh5c2ljYWxfcGFja2FnZV9pZChjcHUpICAgICAgICgodm9pZCkoY3B1KSwgMCkKKyNkZWZpbmUgdG9wb2xvZ3lfY29yZV9pZChjcHUpICAgICAgICAgICAgICAgICAgIChjcHUpCisjZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpICAgICAgICAgICAgICAoKHZvaWQpKGNwdSksIGNwdV9vbmxpbmVfbWFzaykKKyNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSAgICAgICAgICAgIGNwdW1hc2tfb2YoY3B1KQorCisvKiBpbmRpY2F0ZXMgdGhhdCBwb2ludGVycyB0byB0aGUgdG9wb2xvZ3kgc3RydWN0IGNwdW1hc2sgbWFwcyBhcmUgdmFsaWQgKi8KKyNkZWZpbmUgYXJjaF9wcm92aWRlc190b3BvbG9neV9wb2ludGVycyAgICAgICAgIHllcworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RyYXBzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdHJhcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzJhOWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9UUkFQU19ICisjZGVmaW5lIF9BU01fVElMRV9UUkFQU19ICisKKy8qIG1tL2ZhdWx0LmMgKi8KK3ZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqLCBpbnQgZmF1bHRfbnVtLAorCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgd3JpdGUpOwordm9pZCBkb19hc3luY19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICopOworCisjaWZuZGVmIF9fdGlsZWd4X18KKy8qCisgKiBXZSByZXR1cm4gdGhpcyBzdHJ1Y3R1cmUgaW4gcmVnaXN0ZXJzIHRvIGF2b2lkIGhhdmluZyB0byB3cml0ZQorICogYWRkaXRpb25hbCBzYXZlL3Jlc3RvcmUgY29kZSBpbiB0aGUgaW50dmVjLlMgY2FsbGVyLgorICovCitzdHJ1Y3QgaW50dmVjX3N0YXRlIHsKKwl2b2lkICpoYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgdmVjbnVtOworCXVuc2lnbmVkIGxvbmcgZmF1bHRfbnVtOworCXVuc2lnbmVkIGxvbmcgaW5mbzsKKwl1bnNpZ25lZCBsb25nIHJldHZhbDsKK307CitzdHJ1Y3QgaW50dmVjX3N0YXRlIGRvX3BhZ2VfZmF1bHRfaWNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZmF1bHRfbnVtLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGluZm8pOworI2VuZGlmCisKKy8qIGtlcm5lbC90cmFwcy5jICovCit2b2lkIGRvX3RyYXAoc3RydWN0IHB0X3JlZ3MgKiwgaW50IGZhdWx0X251bSwgdW5zaWduZWQgbG9uZyByZWFzb24pOwordm9pZCBrZXJuZWxfZG91YmxlX2ZhdWx0KGludCBkdW1teSwgdWxvbmcgcGMsIHVsb25nIGxyLCB1bG9uZyBzcCwgdWxvbmcgcjUyKTsKKworLyoga2VybmVsL3RpbWUuYyAqLwordm9pZCBkb190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKiwgaW50IGZhdWx0X251bSk7CisKKy8qIGtlcm5lbC9tZXNzYWdpbmcuYyAqLwordm9pZCBodl9tZXNzYWdlX2ludHIoc3RydWN0IHB0X3JlZ3MgKiwgaW50IGludG51bSk7CisKKy8qIGtlcm5lbC9pcnEuYyAqLwordm9pZCB0aWxlX2Rldl9pbnRyKHN0cnVjdCBwdF9yZWdzICosIGludCBpbnRudW0pOworCisjaWZkZWYgQ09ORklHX0hBUkRXQUxMCisvKiBrZXJuZWwvaGFyZHdhbGwuYyAqLwordm9pZCBkb19oYXJkd2FsbF90cmFwKHN0cnVjdCBwdF9yZWdzICosIGludCBmYXVsdF9udW0pOworI2VuZGlmCisKKy8qIGtlcm5lbC9wdHJhY2UuYyAqLwordm9pZCBkb19icmVha3BvaW50KHN0cnVjdCBwdF9yZWdzICosIGludCBmYXVsdF9udW0pOworCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWU3OWJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3R5cGVzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE3YTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9VQUNDRVNTX0gKKyNkZWZpbmUgX0FTTV9USUxFX1VBQ0NFU1NfSAorCisvKgorICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3VhY2Nlc3MtdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgVkVSSUZZX1JFQUQJMAorI2RlZmluZSBWRVJJRllfV1JJVEUJMQorCisvKgorICogVGhlIGZzIHZhbHVlIGRldGVybWluZXMgd2hldGhlciBhcmd1bWVudCB2YWxpZGl0eSBjaGVja2luZyBzaG91bGQgYmUKKyAqIHBlcmZvcm1lZCBvciBub3QuICBJZiBnZXRfZnMoKSA9PSBVU0VSX0RTLCBjaGVja2luZyBpcyBwZXJmb3JtZWQsIHdpdGgKKyAqIGdldF9mcygpID09IEtFUk5FTF9EUywgY2hlY2tpbmcgaXMgYnlwYXNzZWQuCisgKgorICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhlc2UgbWFjcm9zIGFyZSBncm9zc2x5IG1pc25hbWVkLgorICovCisjZGVmaW5lIE1BS0VfTU1fU0VHKGEpICAoKG1tX3NlZ21lbnRfdCkgeyAoYSkgfSkKKworI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoLTFVTCkKKyNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoUEFHRV9PRkZTRVQpCisKKyNkZWZpbmUgZ2V0X2RzKCkJKEtFUk5FTF9EUykKKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLCBiKSAoKGEpLnNlZyA9PSAoYikuc2VnKQorCisjaWZuZGVmIF9fdGlsZWd4X18KKy8qCisgKiBXZSBjb3VsZCBhbGxvdyBtYXBwaW5nIGFsbCAxNiBNQiBhdCAweGZjMDAwMDAwLCBidXQgd2Ugc2V0IHVwIGEKKyAqIHNwZWNpYWwgaGFjayBpbiBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoKSB0byBhdXRvLWNyZWF0ZSBhIG1hcHBpbmcKKyAqIGZvciB0aGUgZmlyc3QgMTYgS0IsIGFuZCBpdCB3b3VsZCBzZWVtIHN0cmFuZ2UgdG8gaGF2ZSBkaWZmZXJlbnQKKyAqIHVzZXItYWNjZXNzaWJsZSBzZW1hbnRpY3MgZm9yIG1lbW9yeSBhdCAweGZjMDAwMDAwIGFuZCBhYm92ZSAweGZjMDA0MDAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc19hcmNoX21hcHBhYmxlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKGFkZHIgPj0gTUVNX1VTRVJfSU5UUlBUICYmCisJCWFkZHIgPCAoTUVNX1VTRVJfSU5UUlBUICsgSU5UUlBUX1NJWkUpICYmCisJCXNpemUgPD0gKE1FTV9VU0VSX0lOVFJQVCArIElOVFJQVF9TSVpFKSAtIGFkZHIpOworfQorI2RlZmluZSBpc19hcmNoX21hcHBhYmxlX3JhbmdlIGlzX2FyY2hfbWFwcGFibGVfcmFuZ2UKKyNlbHNlCisjZGVmaW5lIGlzX2FyY2hfbWFwcGFibGVfcmFuZ2UoYWRkciwgc2l6ZSkgMAorI2VuZGlmCisKKy8qCisgKiBUZXN0IHdoZXRoZXIgYSBibG9jayBvZiBtZW1vcnkgaXMgYSB2YWxpZCB1c2VyIHNwYWNlIGFkZHJlc3MuCisgKiBSZXR1cm5zIDAgaWYgdGhlIHJhbmdlIGlzIHZhbGlkLCBub256ZXJvIG90aGVyd2lzZS4KKyAqLworaW50IF9fcmFuZ2Vfb2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKioKKyAqIGFjY2Vzc19vazogLSBDaGVja3MgaWYgYSB1c2VyIHNwYWNlIHBvaW50ZXIgaXMgdmFsaWQKKyAqIEB0eXBlOiBUeXBlIG9mIGFjY2VzczogJVZFUklGWV9SRUFEIG9yICVWRVJJRllfV1JJVEUuICBOb3RlIHRoYXQKKyAqICAgICAgICAlVkVSSUZZX1dSSVRFIGlzIGEgc3VwZXJzZXQgb2YgJVZFUklGWV9SRUFEIC0gaWYgaXQgaXMgc2FmZQorICogICAgICAgIHRvIHdyaXRlIHRvIGEgYmxvY2ssIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHJlYWQgZnJvbSBpdC4KKyAqIEBhZGRyOiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gc3RhcnQgb2YgYmxvY2sgdG8gY2hlY2sKKyAqIEBzaXplOiBTaXplIG9mIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBDaGVja3MgaWYgYSBwb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UgaXMgdmFsaWQuCisgKgorICogUmV0dXJucyB0cnVlIChub256ZXJvKSBpZiB0aGUgbWVtb3J5IGJsb2NrIG1heSBiZSB2YWxpZCwgZmFsc2UgKHplcm8pCisgKiBpZiBpdCBpcyBkZWZpbml0ZWx5IGludmFsaWQuCisgKgorICogTm90ZSB0aGF0LCBkZXBlbmRpbmcgb24gYXJjaGl0ZWN0dXJlLCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGp1c3QKKyAqIGNoZWNrcyB0aGF0IHRoZSBwb2ludGVyIGlzIGluIHRoZSB1c2VyIHNwYWNlIHJhbmdlIC0gYWZ0ZXIgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiwgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgbWF5IHN0aWxsIHJldHVybiAtRUZBVUxULgorICovCisjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSAoeyBcCisJX19jaGtfdXNlcl9wdHIoYWRkcik7IFwKKwlsaWtlbHkoX19yYW5nZV9vaygodW5zaWduZWQgbG9uZykoYWRkciksIChzaXplKSkgPT0gMCk7CVwKK30pCisKKy8qCisgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQorICogYWRkcmVzcyBvZiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFsbG93ZWQgdG8gZmF1bHQsIGFuZCB0aGUgc2Vjb25kIGlzCisgKiB0aGUgYWRkcmVzcyBhdCB3aGljaCB0aGUgcHJvZ3JhbSBzaG91bGQgY29udGludWUuICBObyByZWdpc3RlcnMgYXJlCisgKiBtb2RpZmllZCwgc28gaXQgaXMgZW50aXJlbHkgdXAgdG8gdGhlIGNvbnRpbnVhdGlvbiBjb2RlIHRvIGZpZ3VyZSBvdXQKKyAqIHdoYXQgdG8gZG8uCisgKgorICogQWxsIHRoZSByb3V0aW5lcyBiZWxvdyB1c2UgYml0cyBvZiBmaXh1cCBjb2RlIHRoYXQgYXJlIG91dCBvZiBsaW5lCisgKiB3aXRoIHRoZSBtYWluIGluc3RydWN0aW9uIHBhdGguICBUaGlzIG1lYW5zIHdoZW4gZXZlcnl0aGluZyBpcyB3ZWxsLAorICogd2UgZG9uJ3QgZXZlbiBoYXZlIHRvIGp1bXAgb3ZlciB0aGVtLiAgRnVydGhlciwgdGhleSBkbyBub3QgaW50cnVkZQorICogb24gb3VyIGNhY2hlIG9yIHRsYiBlbnRyaWVzLgorICovCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7Cit9OworCitleHRlcm4gaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qCisgKiBXZSByZXR1cm4gdGhlIF9fZ2V0X3VzZXJfTiBmdW5jdGlvbiByZXN1bHRzIGluIGEgc3RydWN0dXJlLAorICogdGh1cyBpbiByMCBhbmQgcjEuICBJZiAiZXJyIiBpcyB6ZXJvLCAidmFsIiBpcyB0aGUgcmVzdWx0CisgKiBvZiB0aGUgcmVhZDsgb3RoZXJ3aXNlLCAiZXJyIiBpcyAtRUZBVUxULgorICoKKyAqIFdlIHJhcmVseSBuZWVkIDgtYnl0ZSB2YWx1ZXMgb24gYSAzMi1iaXQgYXJjaGl0ZWN0dXJlLCBidXQKKyAqIHdlIHNpemUgdGhlIHN0cnVjdHVyZSB0byBhY2NvbW1vZGF0ZS4gIEluIHByYWN0aWNlLCBmb3IgdGhlCisgKiB0aGUgc21hbGxlciByZWFkcywgd2UgY2FuIHplcm8gdGhlIGhpZ2ggd29yZCBmb3IgZnJlZSwgYW5kCisgKiB0aGUgY2FsbGVyIHdpbGwgaWdub3JlIGl0IGJ5IHZpcnR1ZSBvZiBjYXN0aW5nIGFueXdheS4KKyAqLworc3RydWN0IF9fZ2V0X3VzZXIgeworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IGVycjsKK307CisKKy8qCisgKiBGSVhNRTogd2Ugc2hvdWxkIGV4cHJlc3MgdGhlc2UgYXMgaW5saW5lIGV4dGVuZGVkIGFzc2VtYmxlciwgc2luY2UKKyAqIHRoZXkncmUgZnVuZGFtZW50YWxseSBqdXN0IGEgdmFyaWFibGUgZGVyZWZlcmVuY2UgYW5kIHNvbWUKKyAqIHN1cHBvcnRpbmcgZXhjZXB0aW9uX3RhYmxlIGd1bmsuICBOb3RlIHRoYXQgKGEgbGEgaTM4Nikgd2UgY2FuCisgKiBleHRlbmQgdGhlIGNvcHlfdG9fdXNlciBhbmQgY29weV9mcm9tX3VzZXIgcm91dGluZXMgdG8gY2FsbCBpbnRvCisgKiBzdWNoIGV4dGVuZGVkIGFzc2VtYmxlciByb3V0aW5lcywgdGhvdWdoIHdlIHdpbGwgaGF2ZSB0byB1c2UgYQorICogZGlmZmVyZW50IHJldHVybiBjb2RlIGluIHRoYXQgY2FzZSAoMSwgMiwgb3IgNCwgcmF0aGVyIHRoYW4gLUVGQVVMVCkuCisgKi8KK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBfX2dldF91c2VyXzEoY29uc3Qgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gc3RydWN0IF9fZ2V0X3VzZXIgX19nZXRfdXNlcl8yKGNvbnN0IHZvaWQgX191c2VyICopOworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIF9fZ2V0X3VzZXJfNChjb25zdCB2b2lkIF9fdXNlciAqKTsKK2V4dGVybiBzdHJ1Y3QgX19nZXRfdXNlciBfX2dldF91c2VyXzgoY29uc3Qgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gaW50IF9fcHV0X3VzZXJfMShsb25nLCB2b2lkIF9fdXNlciAqKTsKK2V4dGVybiBpbnQgX19wdXRfdXNlcl8yKGxvbmcsIHZvaWQgX191c2VyICopOworZXh0ZXJuIGludCBfX3B1dF91c2VyXzQobG9uZywgdm9pZCBfX3VzZXIgKik7CitleHRlcm4gaW50IF9fcHV0X3VzZXJfOChsb25nIGxvbmcsIHZvaWQgX191c2VyICopOworCisvKiBVbmltcGxlbWVudGVkIHJvdXRpbmVzIHRvIGNhdXNlIGxpbmtlciBmYWlsdXJlcyAqLworZXh0ZXJuIHN0cnVjdCBfX2dldF91c2VyIF9fZ2V0X3VzZXJfYmFkKHZvaWQpOworZXh0ZXJuIGludCBfX3B1dF91c2VyX2JhZCh2b2lkKTsKKworLyoKKyAqIENhcmVmdWw6IHdlIGhhdmUgdG8gY2FzdCB0aGUgcmVzdWx0IHRvIHRoZSB0eXBlIG9mIHRoZSBwb2ludGVyCisgKiBmb3Igc2lnbiByZWFzb25zLgorICovCisvKioKKyAqIF9fZ2V0X3VzZXI6IC0gR2V0IGEgc2ltcGxlIHZhcmlhYmxlIGZyb20gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQHg6ICAgVmFyaWFibGUgdG8gc3RvcmUgcmVzdWx0LgorICogQHB0cjogU291cmNlIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyBhIHNpbmdsZSBzaW1wbGUgdmFyaWFibGUgZnJvbSB1c2VyIHNwYWNlIHRvIGtlcm5lbAorICogc3BhY2UuICBJdCBzdXBwb3J0cyBzaW1wbGUgdHlwZXMgbGlrZSBjaGFyIGFuZCBpbnQsIGJ1dCBub3QgbGFyZ2VyCisgKiBkYXRhIHR5cGVzIGxpa2Ugc3RydWN0dXJlcyBvciBhcnJheXMuCisgKgorICogQHB0ciBtdXN0IGhhdmUgcG9pbnRlci10by1zaW1wbGUtdmFyaWFibGUgdHlwZSwgYW5kIHRoZSByZXN1bHQgb2YKKyAqIGRlcmVmZXJlbmNpbmcgQHB0ciBtdXN0IGJlIGFzc2lnbmFibGUgdG8gQHggd2l0aG91dCBhIGNhc3QuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKiBPbiBlcnJvciwgdGhlIHZhcmlhYmxlIEB4IGlzIHNldCB0byB6ZXJvLgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKi8KKyNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpCQkJCQkJXAorKHsJc3RydWN0IF9fZ2V0X3VzZXIgX19yZXQ7CQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIGNvbnN0IF9fdXNlciAqX19ndV9hZGRyID0gKHB0cik7CQlcCisJX19jaGtfdXNlcl9wdHIoX19ndV9hZGRyKTsJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZigqKF9fZ3VfYWRkcikpKSB7CQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlfX3JldCA9IF9fZ2V0X3VzZXJfMShfX2d1X2FkZHIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDI6CQkJCQkJCQlcCisJCV9fcmV0ID0gX19nZXRfdXNlcl8yKF9fZ3VfYWRkcik7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19yZXQgPSBfX2dldF91c2VyXzQoX19ndV9hZGRyKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlfX3JldCA9IF9fZ2V0X3VzZXJfOChfX2d1X2FkZHIpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwlkZWZhdWx0OgkJCQkJCQlcCisJCV9fcmV0ID0gX19nZXRfdXNlcl9iYWQoKTsJCQkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwkoeCkgPSAoX190eXBlb2ZfXygqX19ndV9hZGRyKSkgKF9fdHlwZW9mX18oKl9fZ3VfYWRkciAtICpfX2d1X2FkZHIpKSBcCisJICBfX3JldC52YWw7CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXQuZXJyOwkJCQkJCQlcCit9KQorCisvKioKKyAqIF9fcHV0X3VzZXI6IC0gV3JpdGUgYSBzaW1wbGUgdmFsdWUgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAeDogICBWYWx1ZSB0byBjb3B5IHRvIHVzZXIgc3BhY2UuCisgKiBAcHRyOiBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogVGhpcyBtYWNybyBjb3BpZXMgYSBzaW5nbGUgc2ltcGxlIHZhbHVlIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIKKyAqIHNwYWNlLiAgSXQgc3VwcG9ydHMgc2ltcGxlIHR5cGVzIGxpa2UgY2hhciBhbmQgaW50LCBidXQgbm90IGxhcmdlcgorICogZGF0YSB0eXBlcyBsaWtlIHN0cnVjdHVyZXMgb3IgYXJyYXlzLgorICoKKyAqIEBwdHIgbXVzdCBoYXZlIHBvaW50ZXItdG8tc2ltcGxlLXZhcmlhYmxlIHR5cGUsIGFuZCBAeCBtdXN0IGJlIGFzc2lnbmFibGUKKyAqIHRvIHRoZSByZXN1bHQgb2YgZGVyZWZlcmVuY2luZyBAcHRyLgorICoKKyAqIENhbGxlciBtdXN0IGNoZWNrIHRoZSBwb2ludGVyIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24uCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIC1FRkFVTFQgb24gZXJyb3IuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZTogVGhlICJjYXNlIDgiIGxvZ2ljIG9mIGNhc3RpbmcgdG8gdGhlIHR5cGUgb2YKKyAqIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcgdGhlIHZhbHVlIGZyb20gaXRzZWxmIGlzIGJhc2ljYWxseSBhIHdheQorICogb2Yga2VlcGluZyBhbGwgaW50ZWdlciB0eXBlcyB0aGUgc2FtZSwgYnV0IGNhc3RpbmcgYW55IHBvaW50ZXJzIHRvCisgKiBwdHJkaWZmX3QsIGkuZS4gYWxzbyBhbiBpbnRlZ2VyIHR5cGUuICBUaGlzIHdheSB0aGVyZSBhcmUgbm8KKyAqIHF1ZXN0aW9uYWJsZSBjYXN0cyBzZWVuIGJ5IHRoZSBjb21waWxlciBvbiBhbiBJTFAzMiBwbGF0Zm9ybS4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyKHgsIHB0cikJCQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19wdV9lcnIgPSAwOwkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX191c2VyICpfX3B1X2FkZHIgPSAocHRyKTsJCQlcCisJdHlwZW9mKCpfX3B1X2FkZHIpIF9fcHVfdmFsID0gKHgpOwkJCQlcCisJX19jaGtfdXNlcl9wdHIoX19wdV9hZGRyKTsJCQkJCVwKKwlzd2l0Y2ggKHNpemVvZihfX3B1X3ZhbCkpIHsJCQkJCVwKKwljYXNlIDE6CQkJCQkJCQlcCisJCV9fcHVfZXJyID0gX19wdXRfdXNlcl8xKChsb25nKV9fcHVfdmFsLCBfX3B1X2FkZHIpOwlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSAyOgkJCQkJCQkJXAorCQlfX3B1X2VyciA9IF9fcHV0X3VzZXJfMigobG9uZylfX3B1X3ZhbCwgX19wdV9hZGRyKTsJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgNDoJCQkJCQkJCVwKKwkJX19wdV9lcnIgPSBfX3B1dF91c2VyXzQoKGxvbmcpX19wdV92YWwsIF9fcHVfYWRkcik7CVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDg6CQkJCQkJCQlcCisJCV9fcHVfZXJyID0JCQkJCQlcCisJCSAgX19wdXRfdXNlcl84KChfX3R5cGVvZl9fKF9fcHVfdmFsIC0gX19wdV92YWwpKV9fcHVfdmFsLFwKKwkJCV9fcHVfYWRkcik7CQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJZGVmYXVsdDoJCQkJCQkJXAorCQlfX3B1X2VyciA9IF9fcHV0X3VzZXJfYmFkKCk7CQkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19wdV9lcnI7CQkJCQkJCVwKK30pCisKKy8qCisgKiBUaGUgdmVyc2lvbnMgb2YgZ2V0X3VzZXIgYW5kIHB1dF91c2VyIHdpdGhvdXQgaW5pdGlhbCB1bmRlcnNjb3JlcworICogY2hlY2sgdGhlIGFkZHJlc3Mgb2YgdGhlaXIgYXJndW1lbnRzIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBub3QKKyAqIGluIGtlcm5lbCBzcGFjZS4KKyAqLworI2RlZmluZSBwdXRfdXNlcih4LCBwdHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fdXNlciAqX19QdV9hZGRyID0gKHB0cik7CQkJXAorCWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIChfX1B1X2FkZHIpLCBzaXplb2YoKihfX1B1X2FkZHIpKSkgPwlcCisJCV9fcHV0X3VzZXIoKHgpLCAoX19QdV9hZGRyKSkgOgkJCQlcCisJCS1FRkFVTFQ7CQkJCQkJXAorfSkKKworI2RlZmluZSBnZXRfdXNlcih4LCBwdHIpCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIGNvbnN0IF9fdXNlciAqX19HdV9hZGRyID0gKHB0cik7CQlcCisJYWNjZXNzX29rKFZFUklGWV9SRUFELCAoX19HdV9hZGRyKSwgc2l6ZW9mKCooX19HdV9hZGRyKSkpID8JXAorCQlfX2dldF91c2VyKCh4KSwgKF9fR3VfYWRkcikpIDoJCQkJXAorCQkoKHgpID0gMCwgLUVGQVVMVCk7CQkJCQlcCit9KQorCisvKioKKyAqIF9fY29weV90b191c2VyKCkgLSBjb3B5IGRhdGEgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20ga2VybmVsIHNwYWNlIHRvIHVzZXIgc3BhY2UuICBDYWxsZXIgbXVzdCBjaGVjaworICogdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKgorICogQW4gYWx0ZXJuYXRlIHZlcnNpb24gLSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYygpIC0gaXMgZGVzaWduZWQKKyAqIHRvIGJlIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LCB0eXBpY2FsbHkgYnJhY2tldGVkIGJ5IGNhbGxzCisgKiB0byBwYWdlZmF1bHRfZGlzYWJsZSgpIGFuZCBwYWdlZmF1bHRfZW5hYmxlKCkuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYygKKwl2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK19fY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCW1pZ2h0X2ZhdWx0KCk7CisJcmV0dXJuIF9fY29weV90b191c2VyX2luYXRvbWljKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjaworY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikpCisJCW4gPSBfX2NvcHlfdG9fdXNlcih0bywgZnJvbSwgbik7CisJcmV0dXJuIG47Cit9CisKKy8qKgorICogX19jb3B5X2Zyb21fdXNlcigpIC0gY29weSBkYXRhIGZyb20gdXNlciBzcGFjZSwgd2l0aCBsZXNzIGNoZWNraW5nLgorICogQHRvOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqCisgKiBDb250ZXh0OiBVc2VyIGNvbnRleHQgb25seS4gIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgorICoKKyAqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8ga2VybmVsIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2sgd2l0aCBhY2Nlc3Nfb2soKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgbm90IGJlIGNvcGllZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICoKKyAqIElmIHNvbWUgZGF0YSBjb3VsZCBub3QgYmUgY29waWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFkIHRoZSBjb3BpZWQKKyAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCisgKgorICogQW4gYWx0ZXJuYXRlIHZlcnNpb24gLSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCkgLSBpcyBkZXNpZ25lZAorICogdG8gYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQsIHR5cGljYWxseSBicmFja2V0ZWQgYnkgY2FsbHMKKyAqIHRvIHBhZ2VmYXVsdF9kaXNhYmxlKCkgYW5kIHBhZ2VmYXVsdF9lbmFibGUoKS4gIFRoaXMgdmVyc2lvbgorICogZG9lcyAqTk9UKiBwYWQgd2l0aCB6ZXJvcy4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoCisJdm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fY29weV9mcm9tX3VzZXJfemVyb2luZygKKwl2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK19fY29weV9mcm9tX3VzZXIodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCit7CisgICAgICAgbWlnaHRfZmF1bHQoKTsKKyAgICAgICByZXR1cm4gX19jb3B5X2Zyb21fdXNlcl96ZXJvaW5nKHRvLCBmcm9tLCBuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjaworX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIG4pKQorCQluID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisJZWxzZQorCQltZW1zZXQodG8sIDAsIG4pOworCXJldHVybiBuOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0NPUFlfRlJPTV9VU0VSCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorCV9fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0Iik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY29weV9mcm9tX3VzZXIodm9pZCAqdG8sCisJCQkJCSAgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBuKQoreworCWludCBzeiA9IF9fY29tcGlsZXRpbWVfb2JqZWN0X3NpemUodG8pOworCisJaWYgKGxpa2VseShzeiA9PSAtMSB8fCBzeiA+PSBuKSkKKwkJbiA9IF9jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisJZWxzZQorCQljb3B5X2Zyb21fdXNlcl9vdmVyZmxvdygpOworCisJcmV0dXJuIG47Cit9CisjZWxzZQorI2RlZmluZSBjb3B5X2Zyb21fdXNlciBfY29weV9mcm9tX3VzZXIKKyNlbmRpZgorCisjaWZkZWYgX190aWxlZ3hfXworLyoqCisgKiBfX2NvcHlfaW5fdXNlcigpIC0gY29weSBkYXRhIHdpdGhpbiB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBmcm9tOiBTb3VyY2UgYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgorICogQG46ICAgIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICoKKyAqIENvbnRleHQ6IFVzZXIgY29udGV4dCBvbmx5LiAgVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAuCisgKgorICogQ29weSBkYXRhIGZyb20gdXNlciBzcGFjZSB0byB1c2VyIHNwYWNlLiAgQ2FsbGVyIG11c3QgY2hlY2sKKyAqIHRoZSBzcGVjaWZpZWQgYmxvY2tzIHdpdGggYWNjZXNzX29rKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X2luX3VzZXJfYXNtKAorCXZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbik7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKK19fY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKK3sKKwltaWdodF9zbGVlcCgpOworCXJldHVybiBfX2NvcHlfaW5fdXNlcl9hc20odG8sIGZyb20sIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCitjb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgbikgJiYgYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcm9tLCBuKSkKKwkJbiA9IF9fY29weV9pbl91c2VyKHRvLCBmcm9tLCBuKTsKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCisKKy8qKgorICogc3RybGVuX3VzZXI6IC0gR2V0IHRoZSBzaXplIG9mIGEgc3RyaW5nIGluIHVzZXIgc3BhY2UuCisgKiBAc3RyOiBUaGUgc3RyaW5nIHRvIG1lYXN1cmUuCisgKgorICogQ29udGV4dDogVXNlciBjb250ZXh0IG9ubHkuICBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KKyAqCisgKiBHZXQgdGhlIHNpemUgb2YgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgSU5DTFVESU5HIHRoZSB0ZXJtaW5hdGluZyBOVUwuCisgKiBPbiBleGNlcHRpb24sIHJldHVybnMgMC4KKyAqCisgKiBJZiB0aGVyZSBpcyBhIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgYSB2YWxpZCBzdHJpbmcsIHlvdSBtYXkgd2lzaCB0bworICogY29uc2lkZXIgdXNpbmcgc3Rybmxlbl91c2VyKCkgaW5zdGVhZC4KKyAqLworZXh0ZXJuIGxvbmcgc3Rybmxlbl91c2VyX2FzbShjb25zdCBjaGFyIF9fdXNlciAqc3RyLCBsb25nIG4pOworc3RhdGljIGlubGluZSBsb25nIF9fbXVzdF9jaGVjayBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnN0ciwgbG9uZyBuKQoreworCW1pZ2h0X2ZhdWx0KCk7CisJcmV0dXJuIHN0cm5sZW5fdXNlcl9hc20oc3RyLCBuKTsKK30KKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKSBzdHJubGVuX3VzZXIoc3RyLCBMT05HX01BWCkKKworLyoqCisgKiBzdHJuY3B5X2Zyb21fdXNlcjogLSBDb3B5IGEgTlVMIHRlcm1pbmF0ZWQgc3RyaW5nIGZyb20gdXNlcnNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCisgKiBAZHN0OiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIGtlcm5lbCBzcGFjZS4gIFRoaXMgYnVmZmVyIG11c3QgYmUgYXQKKyAqICAgICAgICAgbGVhc3QgQGNvdW50IGJ5dGVzIGxvbmcuCisgKiBAc3JjOiAgIFNvdXJjZSBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGNvdW50OiBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBjb3B5LCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4KKyAqCisgKiBDb3BpZXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgZnJvbSB1c2Vyc3BhY2UgdG8ga2VybmVsIHNwYWNlLgorICogQ2FsbGVyIG11c3QgY2hlY2sgdGhlIHNwZWNpZmllZCBibG9jayB3aXRoIGFjY2Vzc19vaygpIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIChub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZworICogTlVMKS4KKyAqCisgKiBJZiBhY2Nlc3MgdG8gdXNlcnNwYWNlIGZhaWxzLCByZXR1cm5zIC1FRkFVTFQgKHNvbWUgZGF0YSBtYXkgaGF2ZSBiZWVuCisgKiBjb3BpZWQpLgorICoKKyAqIElmIEBjb3VudCBpcyBzbWFsbGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBjb3BpZXMgQGNvdW50IGJ5dGVzCisgKiBhbmQgcmV0dXJucyBAY291bnQuCisgKi8KK2V4dGVybiBsb25nIHN0cm5jcHlfZnJvbV91c2VyX2FzbShjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcpOworc3RhdGljIGlubGluZSBsb25nIF9fbXVzdF9jaGVjayBfX3N0cm5jcHlfZnJvbV91c2VyKAorCWNoYXIgKmRzdCwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgbG9uZyBjb3VudCkKK3sKKwltaWdodF9mYXVsdCgpOworCXJldHVybiBzdHJuY3B5X2Zyb21fdXNlcl9hc20oZHN0LCBzcmMsIGNvdW50KTsKK30KK3N0YXRpYyBpbmxpbmUgbG9uZyBfX211c3RfY2hlY2sgc3RybmNweV9mcm9tX3VzZXIoCisJY2hhciAqZHN0LCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBsb25nIGNvdW50KQoreworCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHNyYywgMSkpCisJCXJldHVybiBfX3N0cm5jcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBjb3VudCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKKy8qKgorICogY2xlYXJfdXNlcjogLSBaZXJvIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UuCisgKiBAbWVtOiAgIERlc3RpbmF0aW9uIGFkZHJlc3MsIGluIHVzZXIgc3BhY2UuCisgKiBAbGVuOiAgIE51bWJlciBvZiBieXRlcyB0byB6ZXJvLgorICoKKyAqIFplcm8gYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjbGVhcmVkLgorICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGNsZWFyX3VzZXJfYXNtKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgX19jbGVhcl91c2VyKAorCXZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCW1pZ2h0X2ZhdWx0KCk7CisJcmV0dXJuIGNsZWFyX3VzZXJfYXNtKG1lbSwgbGVuKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgY2xlYXJfdXNlcigKKwl2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgbWVtLCBsZW4pKQorCQlyZXR1cm4gX19jbGVhcl91c2VyKG1lbSwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGZsdXNoX3VzZXI6IC0gRmx1c2ggYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBmcm9tIGNhY2hlLgorICogQG1lbTogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGxlbjogICBOdW1iZXIgb2YgYnl0ZXMgdG8gZmx1c2guCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgZmx1c2hlZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBmbHVzaF91c2VyX2FzbSh2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fZmx1c2hfdXNlcigKKwl2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlpbnQgcmV0dmFsOworCisJbWlnaHRfZmF1bHQoKTsKKwlyZXR2YWwgPSBmbHVzaF91c2VyX2FzbShtZW0sIGxlbik7CisJbWJfaW5jb2hlcmVudCgpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgZmx1c2hfdXNlcigKKwl2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgbWVtLCBsZW4pKQorCQlyZXR1cm4gX19mbHVzaF91c2VyKG1lbSwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGludl91c2VyOiAtIEludmFsaWRhdGUgYSBibG9jayBvZiBtZW1vcnkgaW4gdXNlciBzcGFjZSBmcm9tIGNhY2hlLgorICogQG1lbTogICBEZXN0aW5hdGlvbiBhZGRyZXNzLCBpbiB1c2VyIHNwYWNlLgorICogQGxlbjogICBOdW1iZXIgb2YgYnl0ZXMgdG8gaW52YWxpZGF0ZS4KKyAqCisgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBpbnZhbGlkYXRlZC4KKyAqIE9uIHN1Y2Nlc3MsIHRoaXMgd2lsbCBiZSB6ZXJvLgorICoKKyAqIE5vdGUgdGhhdCBvbiBUaWxlNjQsIHRoZSAiaW52IiBvcGVyYXRpb24gaXMgaW4gZmFjdCBhCisgKiAiZmx1c2ggYW5kIGludmFsaWRhdGUiLCBzbyBjYWNoZSB3cml0ZS1iYWNrcyB3aWxsIG9jY3VyIHByaW9yCisgKiB0byB0aGUgY2FjaGUgYmVpbmcgbWFya2VkIGludmFsaWQuCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGludl91c2VyX2FzbSh2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9faW52X3VzZXIoCisJdm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaW50IHJldHZhbDsKKworCW1pZ2h0X2ZhdWx0KCk7CisJcmV0dmFsID0gaW52X3VzZXJfYXNtKG1lbSwgbGVuKTsKKwltYl9pbmNvaGVyZW50KCk7CisJcmV0dXJuIHJldHZhbDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sgaW52X3VzZXIoCisJdm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG1lbSwgbGVuKSkKKwkJcmV0dXJuIF9faW52X3VzZXIobWVtLCBsZW4pOworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogZmludl91c2VyOiAtIEZsdXNoLWludmFsIGEgYmxvY2sgb2YgbWVtb3J5IGluIHVzZXIgc3BhY2UgZnJvbSBjYWNoZS4KKyAqIEBtZW06ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KKyAqIEBsZW46ICAgTnVtYmVyIG9mIGJ5dGVzIHRvIGludmFsaWRhdGUuCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgZmx1c2gtaW52YWxpZGF0ZWQuCisgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmludl91c2VyX2FzbSh2b2lkIF9fdXNlciAqbWVtLCB1bnNpZ25lZCBsb25nIGxlbik7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrIF9fZmludl91c2VyKAorCXZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCWludCByZXR2YWw7CisKKwltaWdodF9mYXVsdCgpOworCXJldHZhbCA9IGZpbnZfdXNlcl9hc20obWVtLCBsZW4pOworCW1iX2luY29oZXJlbnQoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBmaW52X3VzZXIoCisJdm9pZCBfX3VzZXIgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG1lbSwgbGVuKSkKKwkJcmV0dXJuIF9fZmludl91c2VyKG1lbSwgbGVuKTsKKwlyZXR1cm4gbGVuOworfQorCisjZW5kaWYgLyogX0FTTV9USUxFX1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMwN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Vjb250ZXh0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3ZTJkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS91bmFsaWduZWQuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX0FTTV9USUxFX1VOQUxJR05FRF9ICisjZGVmaW5lIF9BU01fVElMRV9VTkFMSUdORURfSAorCisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9ieXRlc2hpZnQuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorI2RlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9sZQorI2RlZmluZSBwdXRfdW5hbGlnbmVkCV9fcHV0X3VuYWxpZ25lZF9sZQorCisjZW5kaWYgLyogX0FTTV9USUxFX1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlM2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZiAhZGVmaW5lZChfQVNNX1RJTEVfVU5JU1REX0gpIHx8IGRlZmluZWQoX19TWVNDQUxMKQorI2RlZmluZSBfQVNNX1RJTEVfVU5JU1REX0gKKworI2lmbmRlZiBfX0xQNjRfXworLyogVXNlIHRoZSBmbGF2b3Igb2YgdGhpcyBzeXNjYWxsIHRoYXQgbWF0Y2hlcyB0aGUgMzItYml0IEFQSSBiZXR0ZXIuICovCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZTkNfRklMRV9SQU5HRTIKKyNlbmRpZgorCisvKiBVc2UgdGhlIHN0YW5kYXJkIEFCSSBmb3Igc3lzY2FsbHMuICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdW5pc3RkLmg+CisKKy8qIEFkZGl0aW9uYWwgVGlsZXJhLXNwZWNpZmljIHN5c2NhbGxzLiAqLworI2RlZmluZSBfX05SX2ZsdXNoX2NhY2hlCShfX05SX2FyY2hfc3BlY2lmaWNfc3lzY2FsbCArIDEpCitfX1NZU0NBTEwoX19OUl9mbHVzaF9jYWNoZSwgc3lzX2ZsdXNoX2NhY2hlKQorCisjaWZuZGVmIF9fdGlsZWd4X18KKy8qICJGYXN0IiBzeXNjYWxscyBwcm92aWRlIGF0b21pYyBzdXBwb3J0IGZvciAzMi1iaXQgY2hpcHMuICovCisjZGVmaW5lIF9fTlJfRkFTVF9jbXB4Y2hnCS0xCisjZGVmaW5lIF9fTlJfRkFTVF9hdG9taWNfdXBkYXRlCS0yCisjZGVmaW5lIF9fTlJfRkFTVF9jbXB4Y2hnNjQJLTMKKyNkZWZpbmUgX19OUl9jbXB4Y2hnX2JhZGFkZHIJKF9fTlJfYXJjaF9zcGVjaWZpY19zeXNjYWxsICsgMCkKK19fU1lTQ0FMTChfX05SX2NtcHhjaGdfYmFkYWRkciwgc3lzX2NtcHhjaGdfYmFkYWRkcikKKyNlbmRpZgorCisjaWZkZWYgX19LRVJORUxfXworLyogSW4gY29tcGF0IG1vZGUsIHdlIHVzZSBzeXNfbGxzZWVrKCkgZm9yIGNvbXBhdF9zeXNfbGxzZWVrKCkuICovCisjaWZkZWYgQ09ORklHX0NPTVBBVAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9USUxFX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vdXNlci5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM4YjRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3VzZXIuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9BU01fVElMRV9VU0VSX0gKKyNkZWZpbmUgX0FTTV9USUxFX1VTRVJfSAorCisvKiBUaGlzIGhlYWRlciBpcyBmb3IgYS5vdXQgZmlsZSBmb3JtYXRzLCB3aGljaCBUSUxFIGRvZXMgbm90IHN1cHBvcnQuICovCisKKyNlbmRpZiAvKiBfQVNNX1RJTEVfVVNFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20veG9yLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9hc20veG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZWIxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS94b3IuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMveG9yLmg+CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfcGNpZV9yY19pbnRmLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9kcnZfcGNpZV9yY19pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkMjI0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2Rydl9wY2llX3JjX2ludGYuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogQGZpbGUgZHJ2X3BjaWVfcmNfaW50Zi5oCisgKiBJbnRlcmZhY2UgZGVmaW5pdGlvbnMgZm9yIHRoZSBQQ0lFIFJvb3QgQ29tcGxleC4KKyAqLworCisjaWZuZGVmIF9TWVNfSFZfRFJWX1BDSUVfUkNfSU5URl9ICisjZGVmaW5lIF9TWVNfSFZfRFJWX1BDSUVfUkNfSU5URl9ICisKKy8qKiBGaWxlIG9mZnNldCBmb3IgcmVhZGluZyB0aGUgaW50ZXJydXB0IGJhc2UgbnVtYmVyIHVzZWQgZm9yIFBDSUUgbGVnYWN5CisgICAgaW50ZXJydXB0cyBhbmQgUExYIEdlbiAxIHJlcXVpcmVtZW50IGZsYWcgKi8KKyNkZWZpbmUgUENJRV9SQ19DT05GSUdfTUFTS19PRkYgMAorCisKKy8qKgorICogU3RydWN0dXJlIHVzZWQgZm9yIG9idGFpbmluZyBQQ0llIGNvbmZpZyBpbmZvcm1hdGlvbiwgcmVhZCBmcm9tIHRoZSBQQ0lFCisgKiBzdWJzeXN0ZW0gL2N0bCBmaWxlIGF0IGluaXRpYWxpemF0aW9uCisgKi8KK3R5cGVkZWYgc3RydWN0IHBjaWVfcmNfY29uZmlnCit7CisgIGludCBpbnRyOyAgICAgICAgICAgICAgICAgICAgIC8qKjwgaW50ZXJydXB0IG51bWJlciB1c2VkIGZvciBkb3duY2FsbCAqLworICBpbnQgcGx4X2dlbjE7ICAgICAgICAgICAgICAgICAvKio8IGZsYWcgZm9yIFBMWCBHZW4gMSBjb25maWd1cmF0aW9uICovCit9IHBjaWVfcmNfY29uZmlnX3Q7CisKKyNlbmRpZiAgLyogX1NZU19IVl9EUlZfUENJRV9SQ19JTlRGX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaCBiL2FyY2gvdGlsZS9pbmNsdWRlL2h2L2h5cGVydmlzb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWI0NmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvaHlwZXJ2aXNvci5oCkBAIC0wLDAgKzEsMjM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIEBmaWxlIGh5cGVydmlzb3IuaAorICogVGhlIGh5cGVydmlzb3IncyBwdWJsaWMgQVBJLgorICovCisKKyNpZm5kZWYgX1RJTEVfSFZfSAorI2RlZmluZSBfVElMRV9IVl9ICisKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2luY2x1ZGUgPGh2L3BhZ2VzaXplLmg+CisKKy8qIExpbnV4IGJ1aWxkcyB3YW50IHVuc2lnbmVkIGxvbmcgY29uc3RhbnRzLCBidXQgYXNzZW1ibGVyIHdhbnRzIG51bWJlcnMgKi8KKyNpZmRlZiBfX0FTU0VNQkxFUl9fCisvKiogT25lLCBmb3IgYXNzZW1ibGVyICovCisjZGVmaW5lIF9fSFZfU0laRV9PTkUgMQorI2VsaWYgIWRlZmluZWQoX190aWxlX18pICYmIENISVBfVkFfV0lEVEgoKSA+IDMyCisvKiogT25lLCBmb3IgNjQtYml0IG9uIGhvc3QgKi8KKyNkZWZpbmUgX19IVl9TSVpFX09ORSAxVUxMCisjZWxzZQorLyoqIE9uZSwgZm9yIExpbnV4ICovCisjZGVmaW5lIF9fSFZfU0laRV9PTkUgMVVMCisjZW5kaWYKKworLyoqIFRoZSBsb2cyIG9mIHRoZSBzcGFuIG9mIGEgbGV2ZWwtMSBwYWdlIHRhYmxlLCBpbiBieXRlcy4KKyAqLworI2RlZmluZSBIVl9MT0cyX0wxX1NQQU4gMzIKKworLyoqIFRoZSBzcGFuIG9mIGEgbGV2ZWwtMSBwYWdlIHRhYmxlLCBpbiBieXRlcy4KKyAqLworI2RlZmluZSBIVl9MMV9TUEFOIChfX0hWX1NJWkVfT05FIDw8IEhWX0xPRzJfTDFfU1BBTikKKworLyoqIFRoZSBzaXplIG9mIHNtYWxsIHBhZ2VzLCBpbiBieXRlcy4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgdmVyaWZpZWQKKyAqIGF0IHJ1bnRpbWUgYnkgY2FsbGluZyBodl9zeXNjb25mKEhWX1NZU0NPTkZfUEFHRV9TSVpFX1NNQUxMKS4KKyAqLworI2RlZmluZSBIVl9QQUdFX1NJWkVfU01BTEwgKF9fSFZfU0laRV9PTkUgPDwgSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwpCisKKy8qKiBUaGUgc2l6ZSBvZiBsYXJnZSBwYWdlcywgaW4gYnl0ZXMuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHZlcmlmaWVkCisgKiBhdCBydW50aW1lIGJ5IGNhbGxpbmcgaHZfc3lzY29uZihIVl9TWVNDT05GX1BBR0VfU0laRV9MQVJHRSkuCisgKi8KKyNkZWZpbmUgSFZfUEFHRV9TSVpFX0xBUkdFIChfX0hWX1NJWkVfT05FIDw8IEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFKQorCisvKiogVGhlIGxvZzIgb2YgdGhlIGdyYW51bGFyaXR5IGF0IHdoaWNoIHBhZ2UgdGFibGVzIG11c3QgYmUgYWxpZ25lZDsKKyAqICBpbiBvdGhlciB3b3JkcywgdGhlIENQQSBmb3IgYSBwYWdlIHRhYmxlIG11c3QgaGF2ZSB0aGlzIG1hbnkgemVybworICogIGJpdHMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgYWRkcmVzcy4KKyAqLworI2RlZmluZSBIVl9MT0cyX1BBR0VfVEFCTEVfQUxJR04gMTEKKworLyoqIFRoZSBncmFudWxhcml0eSBhdCB3aGljaCBwYWdlIHRhYmxlcyBtdXN0IGJlIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgSFZfUEFHRV9UQUJMRV9BTElHTiAoX19IVl9TSVpFX09ORSA8PCBIVl9MT0cyX1BBR0VfVEFCTEVfQUxJR04pCisKKy8qKiBOb3JtYWwgc3RhcnQgb2YgaHlwZXJ2aXNvciBnbHVlIGluIGNsaWVudCBwaHlzaWNhbCBtZW1vcnkuICovCisjZGVmaW5lIEhWX0dMVUVfU1RBUlRfQ1BBIDB4MTAwMDAKKworLyoqIFRoaXMgbXVjaCBzcGFjZSBpcyByZXNlcnZlZCBhdCBIVl9HTFVFX1NUQVJUX0NQQQorICogZm9yIHRoZSBoeXBlcnZpc29yIGdsdWUuIFRoZSBjbGllbnQgcHJvZ3JhbSBtdXN0IHN0YXJ0IGF0CisgKiBzb21lIGFkZHJlc3MgaGlnaGVyIHRoYW4gdGhpcywgYW5kIGluIHBhcnRpY3VsYXIgdGhlIGFkZHJlc3Mgb2YKKyAqIGl0cyB0ZXh0IHNlY3Rpb24gc2hvdWxkIGJlIGVxdWFsIHRvIHplcm8gbW9kdWxvIEhWX1BBR0VfU0laRV9MQVJHRQorICogc28gdGhhdCByZWxhdGl2ZSBvZmZzZXRzIHRvIHRoZSBIViBnbHVlIGFyZSBjb3JyZWN0LgorICovCisjZGVmaW5lIEhWX0dMVUVfUkVTRVJWRURfU0laRSAweDEwMDAwCisKKy8qKiBFYWNoIGVudHJ5IGluIHRoZSBodiBkaXNwYXRjaCBhcnJheSB0YWtlcyB0aGlzIG1hbnkgYnl0ZXMuICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0VOVFJZX1NJWkUgMzIKKworLyoqIFZlcnNpb24gb2YgdGhlIGh5cGVydmlzb3IgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhpcyBmaWxlICovCisjZGVmaW5lIF9IVl9WRVJTSU9OIDExCisKKy8qIEluZGV4IGludG8gaHlwZXJ2aXNvciBpbnRlcmZhY2UgZGlzcGF0Y2ggY29kZSBibG9ja3MuCisgKgorICogSHlwZXJ2aXNvciBjYWxscyBhcmUgaW52b2tlZCBmcm9tIHVzZXIgc3BhY2UgYnkgY2FsbGluZyBjb2RlCisgKiBhdCBhbiBhZGRyZXNzIEhWX0JBU0VfQUREUkVTUyArIChpbmRleCkgKiBIVl9ESVNQQVRDSF9FTlRSWV9TSVpFLAorICogd2hlcmUgaW5kZXggaXMgb25lIG9mIHRoZXNlIGVudW0gdmFsdWVzLgorICoKKyAqIE5vcm1hbGx5IGEgc3VwZXJ2aXNvciBpcyBleHBlY3RlZCB0byBwcm9kdWNlIGEgc2V0IG9mIHN5bWJvbHMKKyAqIHN0YXJ0aW5nIGF0IEhWX0JBU0VfQUREUkVTUyB0aGF0IG9iZXkgdGhpcyBjb252ZW50aW9uLCBidXQgYSB1c2VyCisgKiBwcm9ncmFtIGNvdWxkIGNhbGwgZGlyZWN0bHkgdGhyb3VnaCBmdW5jdGlvbiBwb2ludGVycyBpZiBkZXNpcmVkLgorICoKKyAqIFRoZXNlIG51bWJlcnMgYXJlIHBhcnQgb2YgdGhlIGJpbmFyeSBBUEkgYW5kIHdpbGwgbm90IGJlIGNoYW5nZWQKKyAqIHdpdGhvdXQgdXBkYXRpbmcgSFZfVkVSU0lPTiwgd2hpY2ggc2hvdWxkIGJlIGEgcmFyZSBldmVudC4KKyAqLworCisvKiogcmVzZXJ2ZWQuICovCisjZGVmaW5lIF9IVl9ESVNQQVRDSF9SRVNFUlZFRCAgICAgICAgICAgICAgICAgICAgIDAKKworLyoqIGh2X2luaXQgICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyoqIGh2X2luc3RhbGxfY29udGV4dCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9JTlNUQUxMX0NPTlRFWFQgICAgICAgICAgICAgICAyCisKKy8qKiBodl9zeXNjb25mICovCisjZGVmaW5lIEhWX0RJU1BBVENIX1NZU0NPTkYgICAgICAgICAgICAgICAgICAgICAgIDMKKworLyoqIGh2X2dldF9ydGMgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfR0VUX1JUQyAgICAgICAgICAgICAgICAgICAgICAgNAorCisvKiogaHZfc2V0X3J0YyAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9TRVRfUlRDICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8qKiBodl9mbHVzaF9hc2lkICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0ZMVVNIX0FTSUQgICAgICAgICAgICAgICAgICAgIDYKKworLyoqIGh2X2ZsdXNoX3BhZ2UgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfRkxVU0hfUEFHRSAgICAgICAgICAgICAgICAgICAgNworCisvKiogaHZfZmx1c2hfcGFnZXMgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfRkxVU0hfUEFHRVMgICAgICAgICAgICAgICAgICAgOAorCisvKiogaHZfcmVzdGFydCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9SRVNUQVJUICAgICAgICAgICAgICAgICAgICAgICA5CisKKy8qKiBodl9oYWx0ICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisKKy8qKiBodl9wb3dlcl9vZmYgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfUE9XRVJfT0ZGICAgICAgICAgICAgICAgICAgICAgMTEKKworLyoqIGh2X2lucXVpcmVfcGh5c2ljYWwgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfSU5RVUlSRV9QSFlTSUNBTCAgICAgICAgICAgICAgMTIKKworLyoqIGh2X2lucXVpcmVfbWVtb3J5X2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfSU5RVUlSRV9NRU1PUllfQ09OVFJPTExFUiAgICAgMTMKKworLyoqIGh2X2lucXVpcmVfdmlydHVhbCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9JTlFVSVJFX1ZJUlRVQUwgICAgICAgICAgICAgICAxNAorCisvKiogaHZfaW5xdWlyZV9hc2lkICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0lOUVVJUkVfQVNJRCAgICAgICAgICAgICAgICAgIDE1CisKKy8qKiBodl9uYW5vc2xlZXAgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfTkFOT1NMRUVQICAgICAgICAgICAgICAgICAgICAgMTYKKworLyoqIGh2X2NvbnNvbGVfcmVhZF9pZl9yZWFkeSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9DT05TT0xFX1JFQURfSUZfUkVBRFkgICAgICAgICAxNworCisvKiogaHZfY29uc29sZV93cml0ZSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9DT05TT0xFX1dSSVRFICAgICAgICAgICAgICAgICAxOAorCisvKiogaHZfZG93bmNhbGxfZGlzcGF0Y2ggKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfRE9XTkNBTExfRElTUEFUQ0ggICAgICAgICAgICAgMTkKKworLyoqIGh2X2lucXVpcmVfdG9wb2xvZ3kgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfSU5RVUlSRV9UT1BPTE9HWSAgICAgICAgICAgICAgMjAKKworLyoqIGh2X2ZzX2ZpbmRmaWxlICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0ZTX0ZJTkRGSUxFICAgICAgICAgICAgICAgICAgIDIxCisKKy8qKiBodl9mc19mc3RhdCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9GU19GU1RBVCAgICAgICAgICAgICAgICAgICAgICAyMgorCisvKiogaHZfZnNfcHJlYWQgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfRlNfUFJFQUQgICAgICAgICAgICAgICAgICAgICAgMjMKKworLyoqIGh2X3BoeXNhZGRyX3JlYWQ2NCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9QSFlTQUREUl9SRUFENjQgICAgICAgICAgICAgICAyNAorCisvKiogaHZfcGh5c2FkZHJfd3JpdGU2NCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9QSFlTQUREUl9XUklURTY0ICAgICAgICAgICAgICAyNQorCisvKiogaHZfZ2V0X2NvbW1hbmRfbGluZSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9HRVRfQ09NTUFORF9MSU5FICAgICAgICAgICAgICAyNgorCisvKiogaHZfc2V0X2NhY2hpbmcgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfU0VUX0NBQ0hJTkcgICAgICAgICAgICAgICAgICAgMjcKKworLyoqIGh2X2J6ZXJvX3BhZ2UgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfQlpFUk9fUEFHRSAgICAgICAgICAgICAgICAgICAgMjgKKworLyoqIGh2X3JlZ2lzdGVyX21lc3NhZ2Vfc3RhdGUgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfUkVHSVNURVJfTUVTU0FHRV9TVEFURSAgICAgICAgMjkKKworLyoqIGh2X3NlbmRfbWVzc2FnZSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9TRU5EX01FU1NBR0UgICAgICAgICAgICAgICAgICAzMAorCisvKiogaHZfcmVjZWl2ZV9tZXNzYWdlICovCisjZGVmaW5lIEhWX0RJU1BBVENIX1JFQ0VJVkVfTUVTU0FHRSAgICAgICAgICAgICAgIDMxCisKKy8qKiBodl9pbnF1aXJlX2NvbnRleHQgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfSU5RVUlSRV9DT05URVhUICAgICAgICAgICAgICAgMzIKKworLyoqIGh2X3N0YXJ0X2FsbF90aWxlcyAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9TVEFSVF9BTExfVElMRVMgICAgICAgICAgICAgICAzMworCisvKiogaHZfZGV2X29wZW4gKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfREVWX09QRU4gICAgICAgICAgICAgICAgICAgICAgMzQKKworLyoqIGh2X2Rldl9jbG9zZSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9ERVZfQ0xPU0UgICAgICAgICAgICAgICAgICAgICAzNQorCisvKiogaHZfZGV2X3ByZWFkICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0RFVl9QUkVBRCAgICAgICAgICAgICAgICAgICAgIDM2CisKKy8qKiBodl9kZXZfcHdyaXRlICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0RFVl9QV1JJVEUgICAgICAgICAgICAgICAgICAgIDM3CisKKy8qKiBodl9kZXZfcG9sbCAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9ERVZfUE9MTCAgICAgICAgICAgICAgICAgICAgICAzOAorCisvKiogaHZfZGV2X3BvbGxfY2FuY2VsICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0RFVl9QT0xMX0NBTkNFTCAgICAgICAgICAgICAgIDM5CisKKy8qKiBodl9kZXZfcHJlYWRhICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0RFVl9QUkVBREEgICAgICAgICAgICAgICAgICAgIDQwCisKKy8qKiBodl9kZXZfcHdyaXRlYSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9ERVZfUFdSSVRFQSAgICAgICAgICAgICAgICAgICA0MQorCisvKiogaHZfZmx1c2hfcmVtb3RlICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0ZMVVNIX1JFTU9URSAgICAgICAgICAgICAgICAgIDQyCisKKy8qKiBodl9jb25zb2xlX3B1dGMgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfQ09OU09MRV9QVVRDICAgICAgICAgICAgICAgICAgNDMKKworLyoqIGh2X2lucXVpcmVfdGlsZXMgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfSU5RVUlSRV9USUxFUyAgICAgICAgICAgICAgICAgNDQKKworLyoqIGh2X2NvbmZzdHIgKi8KKyNkZWZpbmUgSFZfRElTUEFUQ0hfQ09ORlNUUiAgICAgICAgICAgICAgICAgICAgICAgNDUKKworLyoqIGh2X3JlZXhlYyAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9SRUVYRUMgICAgICAgICAgICAgICAgICAgICAgICA0NgorCisvKiogaHZfc2V0X2NvbW1hbmRfbGluZSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9TRVRfQ09NTUFORF9MSU5FICAgICAgICAgICAgICA0NworCisjaWYgIUNISVBfSEFTX0lQSSgpCisKKy8qKiBodl9jbGVhcl9pbnRyICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0NMRUFSX0lOVFIgICAgICAgICAgICAgICAgICAgIDQ4CisKKy8qKiBodl9lbmFibGVfaW50ciAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9FTkFCTEVfSU5UUiAgICAgICAgICAgICAgICAgICA0OQorCisvKiogaHZfZGlzYWJsZV9pbnRyICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0RJU0FCTEVfSU5UUiAgICAgICAgICAgICAgICAgIDUwCisKKy8qKiBodl9yYWlzZV9pbnRyICovCisjZGVmaW5lIEhWX0RJU1BBVENIX1JBSVNFX0lOVFIgICAgICAgICAgICAgICAgICAgIDUxCisKKy8qKiBodl90cmlnZ2VyX2lwaSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9UUklHR0VSX0lQSSAgICAgICAgICAgICAgICAgICA1MgorCisjZW5kaWYgLyogIUNISVBfSEFTX0lQSSgpICovCisKKy8qKiBodl9zdG9yZV9tYXBwaW5nICovCisjZGVmaW5lIEhWX0RJU1BBVENIX1NUT1JFX01BUFBJTkcgICAgICAgICAgICAgICAgIDUzCisKKy8qKiBodl9pbnF1aXJlX3JlYWxwYSAqLworI2RlZmluZSBIVl9ESVNQQVRDSF9JTlFVSVJFX1JFQUxQQSAgICAgICAgICAgICAgICA1NAorCisvKiogaHZfZmx1c2hfYWxsICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0ZMVVNIX0FMTCAgICAgICAgICAgICAgICAgICAgIDU1CisKKyNpZiBDSElQX0hBU19JUEkoKQorLyoqIGh2X2dldF9pcGlfcHRlICovCisjZGVmaW5lIEhWX0RJU1BBVENIX0dFVF9JUElfUFRFICAgICAgICAgICAgICAgICAgIDU2CisjZW5kaWYKKworLyoqIE9uZSBtb3JlIHRoYW4gdGhlIGxhcmdlc3QgZGlzcGF0Y2ggdmFsdWUgKi8KKyNkZWZpbmUgX0hWX0RJU1BBVENIX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgNTcKKworCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KK3R5cGVkZWYgdTMyIF9faHYzMjsgICAgICAgIC8qKjwgMzItYml0IHZhbHVlICovCit0eXBlZGVmIHU2NCBfX2h2NjQ7ICAgICAgICAvKio8IDY0LWJpdCB2YWx1ZSAqLworI2Vsc2UKKyNpbmNsdWRlIDxzdGRpbnQuaD4KK3R5cGVkZWYgdWludDMyX3QgX19odjMyOyAgIC8qKjwgMzItYml0IHZhbHVlICovCit0eXBlZGVmIHVpbnQ2NF90IF9faHY2NDsgICAvKio8IDY0LWJpdCB2YWx1ZSAqLworI2VuZGlmCisKKworLyoqIEh5cGVydmlzb3IgcGh5c2ljYWwgYWRkcmVzcy4gKi8KK3R5cGVkZWYgX19odjY0IEhWX1BoeXNBZGRyOworCisjaWYgQ0hJUF9WQV9XSURUSCgpID4gMzIKKy8qKiBIeXBlcnZpc29yIHZpcnR1YWwgYWRkcmVzcy4gKi8KK3R5cGVkZWYgX19odjY0IEhWX1ZpcnRBZGRyOworI2Vsc2UKKy8qKiBIeXBlcnZpc29yIHZpcnR1YWwgYWRkcmVzcy4gKi8KK3R5cGVkZWYgX19odjMyIEhWX1ZpcnRBZGRyOworI2VuZGlmIC8qIENISVBfVkFfV0lEVEgoKSA+IDMyICovCisKKy8qKiBIeXBlcnZpc29yIEFTSUQuICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBIVl9BU0lEOworCisvKiogSHlwZXJ2aXNvciB0aWxlIGxvY2F0aW9uIGZvciBhIG1lbW9yeSBhY2Nlc3MKKyAqICgibG9jYXRpb24gb3ZlcnJpZGRlbiB0YXJnZXQiKS4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgSFZfTE9UQVI7CisKKy8qKiBIeXBlcnZpc29yIHNpemUgb2YgYSBwYWdlLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIEhWX1BhZ2VTaXplOworCisvKiogQSBwYWdlIHRhYmxlIGVudHJ5LgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX2h2NjQgdmFsOyAgICAgICAgICAgICAgICAvKio8IFZhbHVlIG9mIFBURSAqLworfSBIVl9QVEU7CisKKy8qKiBIeXBlcnZpc29yIGVycm9yIGNvZGUuICovCit0eXBlZGVmIGludCBIVl9FcnJubzsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxFUl9fICovCisKKyNkZWZpbmUgSFZfT0sgICAgICAgICAgIDAgICAgLyoqPCBObyBlcnJvciAqLworI2RlZmluZSBIVl9FSU5WQUwgICAgICAtODAxICAvKio8IEludmFsaWQgYXJndW1lbnQgKi8KKyNkZWZpbmUgSFZfRU5PREVWICAgICAgLTgwMiAgLyoqPCBObyBzdWNoIGRldmljZSAqLworI2RlZmluZSBIVl9FTk9FTlQgICAgICAtODAzICAvKio8IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgSFZfRUJBREYgICAgICAgLTgwNCAgLyoqPCBCYWQgZmlsZSBudW1iZXIgKi8KKyNkZWZpbmUgSFZfRUZBVUxUICAgICAgLTgwNSAgLyoqPCBCYWQgYWRkcmVzcyAqLworI2RlZmluZSBIVl9FUkVDSVAgICAgICAtODA2ICAvKio8IEJhZCByZWNpcGllbnRzICovCisjZGVmaW5lIEhWX0UyQklHICAgICAgIC04MDcgIC8qKjwgTWVzc2FnZSB0b28gYmlnICovCisjZGVmaW5lIEhWX0VOT1RTVVAgICAgIC04MDggIC8qKjwgU2VydmljZSBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEhWX0VCVVNZICAgICAgIC04MDkgIC8qKjwgRGV2aWNlIGJ1c3kgKi8KKyNkZWZpbmUgSFZfRU5PU1lTICAgICAgLTgxMCAgLyoqPCBJbnZhbGlkIHN5c2NhbGwgKi8KKyNkZWZpbmUgSFZfRVBFUk0gICAgICAgLTgxMSAgLyoqPCBObyBwZXJtaXNzaW9uICovCisjZGVmaW5lIEhWX0VOT1RSRUFEWSAgIC04MTIgIC8qKjwgRGV2aWNlIG5vdCByZWFkeSAqLworI2RlZmluZSBIVl9FSU8gICAgICAgICAtODEzICAvKio8IEkvTyBlcnJvciAqLworI2RlZmluZSBIVl9FTk9NRU0gICAgICAtODE0ICAvKio8IE91dCBvZiBtZW1vcnkgKi8KKworI2RlZmluZSBIVl9FUlJfTUFYICAgICAtODAxICAvKio8IExhcmdlc3QgSFYgZXJyb3IgY29kZSAqLworI2RlZmluZSBIVl9FUlJfTUlOICAgICAtODE0ICAvKio8IFNtYWxsZXN0IEhWIGVycm9yIGNvZGUgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qKiBQYXNzIEhWX1ZFUlNJT04gdG8gaHZfaW5pdCB0byByZXF1ZXN0IHRoaXMgdmVyc2lvbiBvZiB0aGUgaW50ZXJmYWNlLiAqLwordHlwZWRlZiBlbnVtIHsgSFZfVkVSU0lPTiA9IF9IVl9WRVJTSU9OIH0gSFZfVmVyc2lvbk51bWJlcjsKKworLyoqIEluaXRpYWxpemVzIHRoZSBoeXBlcnZpc29yLgorICoKKyAqIEBwYXJhbSBpbnRlcmZhY2VfdmVyc2lvbl9udW1iZXIgVGhlIHZlcnNpb24gb2YgdGhlIGh5cGVydmlzb3IgaW50ZXJmYWNlCisgKiB0aGF0IHRoaXMgcHJvZ3JhbSBleHBlY3RzLCB0eXBpY2FsbHkgSFZfVkVSU0lPTi4KKyAqIEBwYXJhbSBjaGlwX251bSBBcmNoaXRlY3R1cmUgbnVtYmVyIG9mIHRoZSBjaGlwIHRoZSBjbGllbnQgd2FzIGJ1aWx0IGZvci4KKyAqIEBwYXJhbSBjaGlwX3Jldl9udW0gUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjaGlwIHRoZSBjbGllbnQgd2FzIGJ1aWx0IGZvci4KKyAqLwordm9pZCBodl9pbml0KEhWX1ZlcnNpb25OdW1iZXIgaW50ZXJmYWNlX3ZlcnNpb25fbnVtYmVyLAorICAgICAgICAgICAgIGludCBjaGlwX251bSwgaW50IGNoaXBfcmV2X251bSk7CisKKworLyoqIFF1ZXJpZXMgd2UgY2FuIG1ha2UgZm9yIGh2X3N5c2NvbmYoKS4KKyAqCisgKiBUaGVzZSBudW1iZXJzIGFyZSBwYXJ0IG9mIHRoZSBiaW5hcnkgQVBJIGFuZCBndWFyYW50ZWVkIG5vdCB0byBjaGFuZ2UuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIC8qKiBBbiBpbnZhbGlkIHZhbHVlOyBkbyBub3QgdXNlLiAqLworICBfSFZfU1lTQ09ORl9SRVNFUlZFRCAgICAgICA9IDAsCisKKyAgLyoqIFRoZSBsZW5ndGggb2YgdGhlIGdsdWUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBodl8gcHJvY3MsIGluIGJ5dGVzLiAqLworICBIVl9TWVNDT05GX0dMVUVfU0laRSAgICAgICA9IDEsCisKKyAgLyoqIFRoZSBzaXplIG9mIHNtYWxsIHBhZ2VzLCBpbiBieXRlcy4gKi8KKyAgSFZfU1lTQ09ORl9QQUdFX1NJWkVfU01BTEwgPSAyLAorCisgIC8qKiBUaGUgc2l6ZSBvZiBsYXJnZSBwYWdlcywgaW4gYnl0ZXMuICovCisgIEhWX1NZU0NPTkZfUEFHRV9TSVpFX0xBUkdFID0gMywKKworICAvKiogUHJvY2Vzc29yIGNsb2NrIHNwZWVkLCBpbiBoZXJ0ei4gKi8KKyAgSFZfU1lTQ09ORl9DUFVfU1BFRUQgICAgICAgPSA0LAorCisgIC8qKiBQcm9jZXNzb3IgdGVtcGVyYXR1cmUsIGluIGRlZ3JlZXMgS2VsdmluLiAgVGhlIHZhbHVlCisgICAqICBIVl9TWVNDT05GX1RFTVBfS1RPQyBtYXkgYmUgc3VidHJhY3RlZCBmcm9tIHRoaXMgdG8gZ2V0IGRlZ3JlZXMKKyAgICogIENlbHNpdXMuICBJZiB0aGF0IENlbHNpdXMgdmFsdWUgaXMgSFZfU1lTQ09ORl9PVkVSVEVNUCwgdGhpcyBpbmRpY2F0ZXMKKyAgICogIHRoYXQgdGhlIHRlbXBlcmF0dXJlIGhhcyBoaXQgYW4gdXBwZXIgbGltaXQgYW5kIGlzIG5vIGxvbmdlciBiZWluZworICAgKiAgYWNjdXJhdGVseSB0cmFja2VkLgorICAgKi8KKyAgSFZfU1lTQ09ORl9DUFVfVEVNUCAgICAgICAgPSA1LAorCisgIC8qKiBCb2FyZCB0ZW1wZXJhdHVyZSwgaW4gZGVncmVlcyBLZWx2aW4uICBUaGUgdmFsdWUKKyAgICogIEhWX1NZU0NPTkZfVEVNUF9LVE9DIG1heSBiZSBzdWJ0cmFjdGVkIGZyb20gdGhpcyB0byBnZXQgZGVncmVlcworICAgKiAgQ2Vsc2l1cy4gIElmIHRoYXQgQ2Vsc2l1cyB2YWx1ZSBpcyBIVl9TWVNDT05GX09WRVJURU1QLCB0aGlzIGluZGljYXRlcworICAgKiAgdGhhdCB0aGUgdGVtcGVyYXR1cmUgaGFzIGhpdCBhbiB1cHBlciBsaW1pdCBhbmQgaXMgbm8gbG9uZ2VyIGJlaW5nCisgICAqICBhY2N1cmF0ZWx5IHRyYWNrZWQuCisgICAqLworICBIVl9TWVNDT05GX0JPQVJEX1RFTVAgICAgICA9IDYKKworfSBIVl9TeXNjb25mUXVlcnk7CisKKy8qKiBPZmZzZXQgdG8gc3VidHJhY3QgZnJvbSByZXR1cm5lZCBLZWx2aW4gdGVtcGVyYXR1cmUgdG8gZ2V0IGRlZ3JlZXMKKyAgICBDZWxzaXVzLiAqLworI2RlZmluZSBIVl9TWVNDT05GX1RFTVBfS1RPQyAyNzMKKworLyoqIFBzZXVkby10ZW1wZXJhdHVyZSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlbXBlcmF0dXJlIGhhcworICogIHBlZ2dlZCBhdCBpdHMgdXBwZXIgbGltaXQgYW5kIGlzIG5vIGxvbmdlciBhY2N1cmF0ZTsgbm90ZSB0aGF0IHRoaXMgaXMKKyAqICB0aGUgdmFsdWUgYWZ0ZXIgc3VidHJhY3RpbmcgSFZfU1lTQ09ORl9URU1QX0tUT0MuICovCisjZGVmaW5lIEhWX1NZU0NPTkZfT1ZFUlRFTVAgOTk5CisKKy8qKiBRdWVyeSBhIGNvbmZpZ3VyYXRpb24gdmFsdWUgZnJvbSB0aGUgaHlwZXJ2aXNvci4KKyAqIEBwYXJhbSBxdWVyeSBXaGljaCB2YWx1ZSBpcyByZXF1ZXN0ZWQgKEhWX1NZU0NPTkZfeHh4KS4KKyAqIEByZXR1cm4gVGhlIHJlcXVlc3RlZCB2YWx1ZSwgb3IgLTEgdGhlIHJlcXVlc3RlZCB2YWx1ZSBpcyBpbGxlZ2FsIG9yCisgKiAgICAgICAgIHVuYXZhaWxhYmxlLgorICovCitsb25nIGh2X3N5c2NvbmYoSFZfU3lzY29uZlF1ZXJ5IHF1ZXJ5KTsKKworCisvKiogUXVlcmllcyB3ZSBjYW4gbWFrZSBmb3IgaHZfY29uZnN0cigpLgorICoKKyAqIFRoZXNlIG51bWJlcnMgYXJlIHBhcnQgb2YgdGhlIGJpbmFyeSBBUEkgYW5kIGd1YXJhbnRlZWQgbm90IHRvIGNoYW5nZS4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgLyoqIEFuIGludmFsaWQgdmFsdWU7IGRvIG5vdCB1c2UuICovCisgIF9IVl9DT05GU1RSX1JFU0VSVkVEICAgICAgICA9IDAsCisKKyAgLyoqIEJvYXJkIHBhcnQgbnVtYmVyLiAqLworICBIVl9DT05GU1RSX0JPQVJEX1BBUlRfTlVNICAgPSAxLAorCisgIC8qKiBCb2FyZCBzZXJpYWwgbnVtYmVyLiAqLworICBIVl9DT05GU1RSX0JPQVJEX1NFUklBTF9OVU0gPSAyLAorCisgIC8qKiBDaGlwIHNlcmlhbCBudW1iZXIuICovCisgIEhWX0NPTkZTVFJfQ0hJUF9TRVJJQUxfTlVNICA9IDMsCisKKyAgLyoqIEJvYXJkIHJldmlzaW9uIGxldmVsLiAqLworICBIVl9DT05GU1RSX0JPQVJEX1JFViAgICAgICAgPSA0LAorCisgIC8qKiBIeXBlcnZpc29yIHNvZnR3YXJlIHZlcnNpb24uICovCisgIEhWX0NPTkZTVFJfSFZfU1dfVkVSICAgICAgICA9IDUsCisKKyAgLyoqIFRoZSBuYW1lIGZvciB0aGlzIGNoaXAgbW9kZWwuICovCisgIEhWX0NPTkZTVFJfQ0hJUF9NT0RFTCAgICAgICA9IDYsCisKKyAgLyoqIEh1bWFuLXJlYWRhYmxlIGJvYXJkIGRlc2NyaXB0aW9uLiAqLworICBIVl9DT05GU1RSX0JPQVJEX0RFU0MgICAgICAgPSA3LAorCisgIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgaHlwZXJ2aXNvciBjb25maWd1cmF0aW9uLiAqLworICBIVl9DT05GU1RSX0hWX0NPTkZJRyAgICAgICAgPSA4LAorCisgIC8qKiBIdW1hbi1yZWFkYWJsZSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhlIGJvb3QgaW1hZ2UgKGZvciBpbnN0YW5jZSwKKyAgICogIHdobyBidWlsdCBpdCBhbmQgd2hlbiwgd2hhdCBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHVzZWQpLiAqLworICBIVl9DT05GU1RSX0hWX0NPTkZJR19WRVIgICAgPSA5LAorCisgIC8qKiBNZXp6YW5pbmUgcGFydCBudW1iZXIuICovCisgIEhWX0NPTkZTVFJfTUVaWl9QQVJUX05VTSAgID0gMTAsCisKKyAgLyoqIE1lenphbmluZSBzZXJpYWwgbnVtYmVyLiAqLworICBIVl9DT05GU1RSX01FWlpfU0VSSUFMX05VTSA9IDExLAorCisgIC8qKiBNZXp6YW5pbmUgcmV2aXNpb24gbGV2ZWwuICovCisgIEhWX0NPTkZTVFJfTUVaWl9SRVYgICAgICAgID0gMTIsCisKKyAgLyoqIEh1bWFuLXJlYWRhYmxlIG1lenphbmluZSBkZXNjcmlwdGlvbi4gKi8KKyAgSFZfQ09ORlNUUl9NRVpaX0RFU0MgICAgICAgPSAxMywKKworICAvKiogQ29udHJvbCBwYXRoIGZvciB0aGUgb25ib2FyZCBuZXR3b3JrIHN3aXRjaC4gKi8KKyAgSFZfQ09ORlNUUl9TV0lUQ0hfQ09OVFJPTCAgPSAxNCwKKworICAvKiogQ2hpcCByZXZpc2lvbiBsZXZlbC4gKi8KKyAgSFZfQ09ORlNUUl9DSElQX1JFViAgICAgICAgPSAxNQorCit9IEhWX0NvbmZzdHJRdWVyeTsKKworLyoqIFF1ZXJ5IGEgY29uZmlndXJhdGlvbiBzdHJpbmcgZnJvbSB0aGUgaHlwZXJ2aXNvci4KKyAqCisgKiBAcGFyYW0gcXVlcnkgSWRlbnRpZmllciBmb3IgdGhlIHNwZWNpZmljIHN0cmluZyB0byBiZSByZXRyaWV2ZWQKKyAqICAgICAgICAoSFZfQ09ORlNUUl94eHgpLgorICogQHBhcmFtIGJ1ZiBCdWZmZXIgaW4gd2hpY2ggdG8gcGxhY2UgdGhlIHN0cmluZy4KKyAqIEBwYXJhbSBsZW4gTGVuZ3RoIG9mIHRoZSBidWZmZXIuCisgKiBAcmV0dXJuIElmIHF1ZXJ5IGlzIHZhbGlkLCB0aGVuIHRoZSBsZW5ndGggb2YgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nLAorICogICAgICAgIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgbnVsbDsgaWYgdGhpcyBpcyBncmVhdGVyIHRoYW4gbGVuLCB0aGUgc3RyaW5nCisgKiAgICAgICAgd2FzIHRydW5jYXRlZC4gIElmIHF1ZXJ5IGlzIGludmFsaWQsIEhWX0VJTlZBTC4gIElmIHRoZSBzcGVjaWZpZWQKKyAqICAgICAgICBidWZmZXIgaXMgbm90IHdyaXRhYmxlIGJ5IHRoZSBjbGllbnQsIEhWX0VGQVVMVC4KKyAqLworaW50IGh2X2NvbmZzdHIoSFZfQ29uZnN0clF1ZXJ5IHF1ZXJ5LCBIVl9WaXJ0QWRkciBidWYsIGludCBsZW4pOworCisvKiogVGlsZSBjb29yZGluYXRlICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiogWCBjb29yZGluYXRlLCByZWxhdGl2ZSB0byBzdXBlcnZpc29yJ3MgdG9wLWxlZnQgY29vcmRpbmF0ZSAqLworICBpbnQgeDsKKworICAvKiogWSBjb29yZGluYXRlLCByZWxhdGl2ZSB0byBzdXBlcnZpc29yJ3MgdG9wLWxlZnQgY29vcmRpbmF0ZSAqLworICBpbnQgeTsKK30gSFZfQ29vcmQ7CisKKworI2lmIENISVBfSEFTX0lQSSgpCisKKy8qKiBHZXQgdGhlIFBURSBmb3Igc2VuZGluZyBhbiBJUEkgdG8gYSBwYXJ0aWN1bGFyIHRpbGUuCisgKgorICogQHBhcmFtIHRpbGUgVGlsZSB3aGljaCB3aWxsIHJlY2VpdmUgdGhlIElQSS4KKyAqIEBwYXJhbSBwbCBJbmRpY2F0ZXMgd2hpY2ggSVBJIHJlZ2lzdGVyczogMCA9IElQSV8wLCAxID0gSVBJXzEuCisgKiBAcGFyYW0gcHRlIEZpbGxlZCB3aXRoIHJlc3VsdGluZyBQVEUuCisgKiBAcmVzdWx0IFplcm8gaWYgbm8gZXJyb3IsIG5vbi16ZXJvIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMuCisgKi8KK2ludCBodl9nZXRfaXBpX3B0ZShIVl9Db29yZCB0aWxlLCBpbnQgcGwsIEhWX1BURSogcHRlKTsKKworI2Vsc2UgLyogIUNISVBfSEFTX0lQSSgpICovCisKKy8qKiBBIHNldCBvZiBpbnRlcnJ1cHRzLiAqLwordHlwZWRlZiBfX2h2MzIgSFZfSW50ck1hc2s7CisKKy8qKiBUaGUgbG93IGludGVycnVwdCBudW1iZXJzIGFyZSByZXNlcnZlZCBmb3IgdXNlIGJ5IHRoZSBjbGllbnQgaW4KKyAqICBkZWxpdmVyaW5nIElQSXMuICBBbnkgaW50ZXJydXB0IG51bWJlcnMgaGlnaGVyIHRoYW4gdGhpcyB2YWx1ZSBhcmUKKyAqICByZXNlcnZlZCBmb3IgdXNlIGJ5IEhWIGRldmljZSBkcml2ZXJzLiAqLworI2RlZmluZSBIVl9NQVhfSVBJX0lOVEVSUlVQVCA3CisKKy8qKiBFbmFibGUgYSBzZXQgb2YgZGV2aWNlIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGVuYWJfbWFzayBCaXRtYXAgb2YgaW50ZXJydXB0cyB0byBlbmFibGUuCisgKi8KK3ZvaWQgaHZfZW5hYmxlX2ludHIoSFZfSW50ck1hc2sgZW5hYl9tYXNrKTsKKworLyoqIERpc2FibGUgYSBzZXQgb2YgZGV2aWNlIGludGVycnVwdHMuCisgKgorICogQHBhcmFtIGRpc2FiX21hc2sgQml0bWFwIG9mIGludGVycnVwdHMgdG8gZGlzYWJsZS4KKyAqLwordm9pZCBodl9kaXNhYmxlX2ludHIoSFZfSW50ck1hc2sgZGlzYWJfbWFzayk7CisKKy8qKiBDbGVhciBhIHNldCBvZiBkZXZpY2UgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW0gY2xlYXJfbWFzayBCaXRtYXAgb2YgaW50ZXJydXB0cyB0byBjbGVhci4KKyAqLwordm9pZCBodl9jbGVhcl9pbnRyKEhWX0ludHJNYXNrIGNsZWFyX21hc2spOworCisvKiogQXNzZXJ0IGEgc2V0IG9mIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIEBwYXJhbSBhc3NlcnRfbWFzayBCaXRtYXAgb2YgaW50ZXJydXB0cyB0byBjbGVhci4KKyAqLwordm9pZCBodl9hc3NlcnRfaW50cihIVl9JbnRyTWFzayBhc3NlcnRfbWFzayk7CisKKy8qKiBUcmlnZ2VyIGEgb25lLXNob3QgaW50ZXJydXB0IG9uIHNvbWUgdGlsZQorICoKKyAqIEBwYXJhbSB0aWxlIFdoaWNoIHRpbGUgdG8gaW50ZXJydXB0LgorICogQHBhcmFtIGludGVycnVwdCBJbnRlcnJ1cHQgbnVtYmVyIHRvIHRyaWdnZXI7IG11c3QgYmUgYmV0d2VlbiAwIGFuZAorICogICAgICAgIEhWX01BWF9JUElfSU5URVJSVVBULgorICogQHJldHVybiBIVl9PSyBvbiBzdWNjZXNzLCBvciBhIGh5cGVydmlzb3IgZXJyb3IgY29kZS4KKyAqLworSFZfRXJybm8gaHZfdHJpZ2dlcl9pcGkoSFZfQ29vcmQgdGlsZSwgaW50IGludGVycnVwdCk7CisKKyNlbmRpZiAvKiAhQ0hJUF9IQVNfSVBJKCkgKi8KKworLyoqIFN0b3JlIG1lbW9yeSBtYXBwaW5nIGluIGRlYnVnIG1lbW9yeSBzbyB0aGF0IGV4dGVybmFsIGRlYnVnZ2VyIGNhbiByZWFkIGl0LgorICogQSBtYXhpbXVtIG9mIDE2IGVudHJpZXMgY2FuIGJlIHN0b3JlZC4KKyAqCisgKiBAcGFyYW0gdmEgVkEgb2YgbWVtb3J5IHRoYXQgaXMgbWFwcGVkLgorICogQHBhcmFtIGxlbiBMZW5ndGggb2YgbWFwcGVkIG1lbW9yeS4KKyAqIEBwYXJhbSBwYSBQQSBvZiBtZW1vcnkgdGhhdCBpcyBtYXBwZWQuCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgLTEgaWYgdGhlIG1heGltdW0gbnVtYmVyIG9mIG1hcHBpbmdzIGlzIGV4Y2VlZGVkLgorICovCitpbnQgaHZfc3RvcmVfbWFwcGluZyhIVl9WaXJ0QWRkciB2YSwgdW5zaWduZWQgaW50IGxlbiwgSFZfUGh5c0FkZHIgcGEpOworCisvKiogR2l2ZW4gYSBjbGllbnQgUEEgYW5kIGEgbGVuZ3RoLCByZXR1cm4gaXRzIHJlYWwgKEhWKSBQQS4KKyAqCisgKiBAcGFyYW0gY3BhIENsaWVudCBwaHlzaWNhbCBhZGRyZXNzLgorICogQHBhcmFtIGxlbiBMZW5ndGggb2YgbWFwcGVkIG1lbW9yeS4KKyAqIEByZXR1cm4gcGh5c2ljYWwgYWRkcmVzcywgb3IgLTEgaWYgY3BhIG9yIGxlbiBpcyBub3QgdmFsaWQuCisgKi8KK0hWX1BoeXNBZGRyIGh2X2lucXVpcmVfcmVhbHBhKEhWX1BoeXNBZGRyIGNwYSwgdW5zaWduZWQgaW50IGxlbik7CisKKy8qKiBSVEMgcmV0dXJuIGZsYWcgZm9yIG5vIFJUQyBjaGlwIHByZXNlbnQuCisgKi8KKyNkZWZpbmUgSFZfUlRDX05PX0NISVAgICAgIDB4MQorCisvKiogUlRDIHJldHVybiBmbGFnIGZvciBsb3ctdm9sdGFnZSBjb25kaXRpb24sIGluZGljYXRpbmcgdGhhdCBiYXR0ZXJ5IGhhZAorICogZGllZCBhbmQgdGltZSByZWFkIGlzIHVucmVsaWFibGUuCisgKi8KKyNkZWZpbmUgSFZfUlRDX0xPV19WT0xUQUdFIDB4MgorCisvKiogRGF0ZS9UaW1lIG9mIGRheSAqLwordHlwZWRlZiBzdHJ1Y3QgeworI2lmIENISVBfV09SRF9TSVpFKCkgPiAzMgorICBfX2h2NjQgdG1fc2VjOyAgIC8qKjwgU2Vjb25kcywgMC01OSAqLworICBfX2h2NjQgdG1fbWluOyAgIC8qKjwgTWludXRlcywgMC01OSAqLworICBfX2h2NjQgdG1faG91cjsgIC8qKjwgSG91cnMsIDAtMjMgKi8KKyAgX19odjY0IHRtX21kYXk7ICAvKio8IERheSBvZiBtb250aCwgMC0zMCAqLworICBfX2h2NjQgdG1fbW9uOyAgIC8qKjwgTW9udGgsIDAtMTEgKi8KKyAgX19odjY0IHRtX3llYXI7ICAvKio8IFllYXJzIHNpbmNlIDE5MDAsIDAtMTk5ICovCisgIF9faHY2NCBmbGFnczsgICAgLyoqPCBSZXR1cm4gZmxhZ3MsIDAgaWYgbm8gZXJyb3IgKi8KKyNlbHNlCisgIF9faHYzMiB0bV9zZWM7ICAgLyoqPCBTZWNvbmRzLCAwLTU5ICovCisgIF9faHYzMiB0bV9taW47ICAgLyoqPCBNaW51dGVzLCAwLTU5ICovCisgIF9faHYzMiB0bV9ob3VyOyAgLyoqPCBIb3VycywgMC0yMyAqLworICBfX2h2MzIgdG1fbWRheTsgIC8qKjwgRGF5IG9mIG1vbnRoLCAwLTMwICovCisgIF9faHYzMiB0bV9tb247ICAgLyoqPCBNb250aCwgMC0xMSAqLworICBfX2h2MzIgdG1feWVhcjsgIC8qKjwgWWVhcnMgc2luY2UgMTkwMCwgMC0xOTkgKi8KKyAgX19odjMyIGZsYWdzOyAgICAvKio8IFJldHVybiBmbGFncywgMCBpZiBubyBlcnJvciAqLworI2VuZGlmCit9IEhWX1JUQ1RpbWU7CisKKy8qKiBSZWFkIHRoZSBjdXJyZW50IHRpbWUtb2YtZGF5IGNsb2NrLgorICogQHJldHVybiBIVl9SVENUaW1lIG9mIGN1cnJlbnQgdGltZSAoR01UKS4KKyAqLworSFZfUlRDVGltZSBodl9nZXRfcnRjKHZvaWQpOworCisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgdGltZS1vZi1kYXkgY2xvY2suCisgKiBAcGFyYW0gdGltZSB0aW1lIHRvIHJlc2V0IHRpbWUtb2YtZGF5IHRvIChHTVQpLgorICovCit2b2lkIGh2X3NldF9ydGMoSFZfUlRDVGltZSB0aW1lKTsKKworLyoqIEluc3RhbGxzIGEgY29udGV4dCwgY29tcHJpc2luZyBhIHBhZ2UgdGFibGUgYW5kIG90aGVyIGF0dHJpYnV0ZXMuCisgKgorICogIE9uY2UgdGhpcyBzZXJ2aWNlIGNvbXBsZXRlcywgcGFnZV90YWJsZSB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlCisgKiAgc3Vic2VxdWVudCB2aXJ0dWFsIGFkZHJlc3MgcmVmZXJlbmNlcyB0byBwaHlzaWNhbCBtZW1vcnkuCisgKgorICogIEluc3RhbGxpbmcgYSBjb250ZXh0IGRvZXMgbm90IGNhdXNlIGFuIGltcGxpY2l0IFRMQiBmbHVzaC4gIEJlZm9yZQorICogIHJldXNpbmcgYW4gQVNJRCB2YWx1ZSBmb3IgYSBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZSwgdGhlIGNsaWVudCBpcworICogIGV4cGVjdGVkIHRvIGZsdXNoIG9sZCByZWZlcmVuY2VzIGZyb20gdGhlIFRMQiB3aXRoIGh2X2ZsdXNoX2FzaWQoKS4KKyAqICAoQWx0ZXJuYXRlbHksIGh2X2ZsdXNoX2FsbCgpIG1heSBiZSB1c2VkIHRvIGZsdXNoIG1hbnkgQVNJRHMgYXQgb25jZS4pCisgKiAgQWZ0ZXIgaW52YWxpZGF0aW5nIGEgcGFnZSB0YWJsZSBlbnRyeSwgY2hhbmdpbmcgaXRzIGF0dHJpYnV0ZXMsIG9yCisgKiAgY2hhbmdpbmcgaXRzIHRhcmdldCBDUEEsIHRoZSBjbGllbnQgaXMgZXhwZWN0ZWQgdG8gZmx1c2ggb2xkIHJlZmVyZW5jZXMKKyAqICBmcm9tIHRoZSBUTEIgd2l0aCBodl9mbHVzaF9wYWdlKCkgb3IgaHZfZmx1c2hfcGFnZXMoKS4gTWFraW5nIGEKKyAqICBwcmV2aW91c2x5IGludmFsaWQgcGFnZSB2YWxpZCBkb2VzIG5vdCByZXF1aXJlIGEgZmx1c2guCisgKgorICogIFNwZWNpZnlpbmcgYW4gaW52YWxpZCBBU0lELCBvciBhbiBpbnZhbGlkIENQQSAoY2xpZW50IHBoeXNpY2FsIGFkZHJlc3MpCisgKiAgKGVpdGhlciBhcyBwYWdlX3RhYmxlX3BvaW50ZXIsIG9yIHdpdGhpbiB0aGUgcmVmZXJlbmNlZCB0YWJsZSksCisgKiAgb3IgYW5vdGhlciBwYWdlIHRhYmxlIGRhdGEgaXRlbSBkb2N1bWVudGVkIGFzIGFib3ZlIGFzIGlsbGVnYWwgbWF5CisgKiAgbGVhZCB0byBjbGllbnQgdGVybWluYXRpb247IHNpbmNlIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSB0YWJsZSBpcworICogIGRvbmUgYXMgbmVlZGVkLCB0aGlzIG1heSBoYXBwZW4gYmVmb3JlIHRoZSBzZXJ2aWNlIHJldHVybnMsIG9yIGF0CisgKiAgc29tZSBsYXRlciB0aW1lLCBvciBuZXZlciwgZGVwZW5kaW5nIHVwb24gdGhlIGNsaWVudCdzIHBhdHRlcm4gb2YKKyAqICBtZW1vcnkgcmVmZXJlbmNlcy4gIFBhZ2UgdGFibGUgZW50cmllcyB3aGljaCBzdXBwbHkgdHJhbnNsYXRpb25zIGZvcgorICogIGludmFsaWQgdmlydHVhbCBhZGRyZXNzZXMgbWF5IHJlc3VsdCBpbiBjbGllbnQgdGVybWluYXRpb24sIG9yIG1heQorICogIGJlIHNpbGVudGx5IGlnbm9yZWQuICAiSW52YWxpZCIgaW4gdGhpcyBjb250ZXh0IG1lYW5zIGEgdmFsdWUgd2hpY2gKKyAqICB3YXMgbm90IHByb3ZpZGVkIHRvIHRoZSBjbGllbnQgdmlhIHRoZSBhcHByb3ByaWF0ZSBodl9pbnF1aXJlXyogcm91dGluZS4KKyAqCisgKiAgVG8gc3VwcG9ydCBjaGFuZ2luZyB0aGUgaW5zdHJ1Y3Rpb24gVkFzIGF0IHRoZSBzYW1lIHRpbWUgYXMKKyAqICBpbnN0YWxsaW5nIHRoZSBuZXcgcGFnZSB0YWJsZSwgdGhpcyBjYWxsIGV4cGxpY2l0bHkgc3VwcG9ydHMKKyAqICBzZXR0aW5nIHRoZSAibHIiIHJlZ2lzdGVyIHRvIGEgZGlmZmVyZW50IGFkZHJlc3MgYW5kIHRoZW4ganVtcGluZworICogIGRpcmVjdGx5IHRvIHRoZSBodl9pbnN0YWxsX2NvbnRleHQoKSByb3V0aW5lLiAgSW4gdGhpcyBjYXNlLCB0aGUKKyAqICBuZXcgcGFnZSB0YWJsZSBkb2VzIG5vdCBuZWVkIHRvIGNvbnRhaW4gYW55IG1hcHBpbmcgZm9yIHRoZQorICogIGh2X2luc3RhbGxfY29udGV4dCBhZGRyZXNzIGl0c2VsZi4KKyAqCisgKiBAcGFyYW0gcGFnZV90YWJsZSBSb290IG9mIHRoZSBwYWdlIHRhYmxlLgorICogQHBhcmFtIGFjY2VzcyBQVEUgcHJvdmlkaW5nIGluZm8gb24gaG93IHRvIHJlYWQgdGhlIHBhZ2UgdGFibGUuICBUaGlzCisgKiAgIHZhbHVlIG11c3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIG11bHRpcGxlIHRpbGVzIHNoYXJpbmcgYSBwYWdlIHRhYmxlLAorICogICBhbmQgbXVzdCBhbHNvIGJlIGNvbnNpc3RlbnQgd2l0aCBhbnkgdmlydHVhbCBtYXBwaW5ncyB0aGUgY2xpZW50CisgKiAgIG1heSBiZSB1c2luZyB0byBhY2Nlc3MgdGhlIHBhZ2UgdGFibGUuCisgKiBAcGFyYW0gYXNpZCBIVl9BU0lEIHRoZSBwYWdlIHRhYmxlIGlzIHRvIGJlIHVzZWQgZm9yLgorICogQHBhcmFtIGZsYWdzIENvbnRleHQgZmxhZ3MsIGRlbm90aW5nIGF0dHJpYnV0ZXMgb3IgcHJpdmlsZWdlcyBvZiB0aGUKKyAqICAgY3VycmVudCBjb250ZXh0IChIVl9DVFhfeHh4KS4KKyAqIEByZXR1cm4gWmVybyBvbiBzdWNjZXNzLCBvciBhIGh5cGVydmlzb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaHZfaW5zdGFsbF9jb250ZXh0KEhWX1BoeXNBZGRyIHBhZ2VfdGFibGUsIEhWX1BURSBhY2Nlc3MsIEhWX0FTSUQgYXNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgX19odjMyIGZsYWdzKTsKKworI2VuZGlmIC8qICFfX0FTU0VNQkxFUl9fICovCisKKyNkZWZpbmUgSFZfQ1RYX0RJUkVDVElPICAgICAweDEgICAvKio8IERpcmVjdCBJL08gcmVxdWVzdHMgYXJlIGFjY2VwdGVkIGZyb20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMMC4gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qKiBWYWx1ZSByZXR1cm5lZCBmcm9tIGh2X2lucXVpcmVfY29udGV4dCgpLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyoqIFBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSAqLworICBIVl9QaHlzQWRkciBwYWdlX3RhYmxlOworCisgIC8qKiBQVEUgd2hpY2ggZGVmaW5lcyBhY2Nlc3MgbWV0aG9kIGZvciB0b3Agb2YgcGFnZSB0YWJsZSAqLworICBIVl9QVEUgYWNjZXNzOworCisgIC8qKiBBU0lEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhZ2UgdGFibGUgKi8KKyAgSFZfQVNJRCBhc2lkOworCisgIC8qKiBDb250ZXh0IGZsYWdzICovCisgIF9faHYzMiBmbGFnczsKK30gSFZfQ29udGV4dDsKKworLyoqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIGNvbnRleHQuCisgKiBAcmV0dXJuIFRoZSBkYXRhIHBhc3NlZCB0byB0aGUgbGFzdCBzdWNjZXNzZnVsIGh2X2luc3RhbGxfY29udGV4dCBjYWxsLgorICovCitIVl9Db250ZXh0IGh2X2lucXVpcmVfY29udGV4dCh2b2lkKTsKKworCisvKiogRmx1c2hlcyBhbGwgdHJhbnNsYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZWQgYWRkcmVzcyBzcGFjZQorICogIGlkZW50aWZpZXIgZnJvbSB0aGUgVExCIGFuZCBhbnkgb3RoZXIgaHlwZXJ2aXNvciBkYXRhIHN0cnVjdHVyZXMuCisgKiAgVHJhbnNsYXRpb25zIGluc3RhbGxlZCB3aXRoIHRoZSAiZ2xvYmFsIiBiaXQgYXJlIG5vdCBmbHVzaGVkLgorICoKKyAqICBTcGVjaWZ5aW5nIGFuIGludmFsaWQgQVNJRCBtYXkgbGVhZCB0byBjbGllbnQgdGVybWluYXRpb24uICAiSW52YWxpZCIKKyAqICBpbiB0aGlzIGNvbnRleHQgbWVhbnMgYSB2YWx1ZSB3aGljaCB3YXMgbm90IHByb3ZpZGVkIHRvIHRoZSBjbGllbnQKKyAqICB2aWEgPHR0Pmh2X2lucXVpcmVfYXNpZCgpPC90dD4uCisgKgorICogQHBhcmFtIGFzaWQgSFZfQVNJRCB3aG9zZSBlbnRyaWVzIGFyZSB0byBiZSBmbHVzaGVkLgorICogQHJldHVybiBaZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgaHlwZXJ2aXNvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisqLworaW50IGh2X2ZsdXNoX2FzaWQoSFZfQVNJRCBhc2lkKTsKKworCisvKiogRmx1c2hlcyBhbGwgdHJhbnNsYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZWQgdmlydHVhbCBhZGRyZXNzCisgKiAgYW5kIHBhZ2Ugc2l6ZSBmcm9tIHRoZSBUTEIgYW5kIG90aGVyIGh5cGVydmlzb3IgZGF0YSBzdHJ1Y3R1cmVzLiBPbmx5CisgKiAgcGFnZXMgdmlzaWJsZSB0byB0aGUgY3VycmVudCBBU0lEIGFyZSBhZmZlY3RlZDsgbm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMKKyAqICBnbG9iYWwgcGFnZXMgaW4gYWRkaXRpb24gdG8gcGFnZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgQVNJRC4KKyAqCisgKiAgVGhlIHN1cHBsaWVkIFZBIG5lZWQgbm90IGJlIGFsaWduZWQ7IGl0IG1heSBiZSBhbnl3aGVyZSBpbiB0aGUKKyAqICBzdWJqZWN0IHBhZ2UuCisgKgorICogIFNwZWNpZnlpbmcgYW4gaW52YWxpZCB2aXJ0dWFsIGFkZHJlc3MgbWF5IGxlYWQgdG8gY2xpZW50IHRlcm1pbmF0aW9uLAorICogIG9yIG1heSBzaWxlbnRseSBzdWNjZWVkLiAgIkludmFsaWQiIGluIHRoaXMgY29udGV4dCBtZWFucyBhIHZhbHVlCisgKiAgd2hpY2ggd2FzIG5vdCBwcm92aWRlZCB0byB0aGUgY2xpZW50IHZpYSBodl9pbnF1aXJlX3ZpcnR1YWwuCisgKgorICogQHBhcmFtIGFkZHJlc3MgQWRkcmVzcyBvZiB0aGUgcGFnZSB0byBmbHVzaC4KKyAqIEBwYXJhbSBwYWdlX3NpemUgU2l6ZSBvZiBwYWdlcyB0byBhc3N1bWUuCisgKiBAcmV0dXJuIFplcm8gb24gc3VjY2Vzcywgb3IgYSBoeXBlcnZpc29yIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGh2X2ZsdXNoX3BhZ2UoSFZfVmlydEFkZHIgYWRkcmVzcywgSFZfUGFnZVNpemUgcGFnZV9zaXplKTsKKworCisvKiogRmx1c2hlcyBhbGwgdHJhbnNsYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlCisgKiAgYW5kIHBhZ2Ugc2l6ZSBmcm9tIHRoZSBUTEIgYW5kIG90aGVyIGh5cGVydmlzb3IgZGF0YSBzdHJ1Y3R1cmVzLiBPbmx5CisgKiAgcGFnZXMgdmlzaWJsZSB0byB0aGUgY3VycmVudCBBU0lEIGFyZSBhZmZlY3RlZDsgbm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMKKyAqICBnbG9iYWwgcGFnZXMgaW4gYWRkaXRpb24gdG8gcGFnZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgQVNJRC4KKyAqCisgKiAgVGhlIHN1cHBsaWVkIFZBIG5lZWQgbm90IGJlIGFsaWduZWQ7IGl0IG1heSBiZSBhbnl3aGVyZSBpbiB0aGUKKyAqICBzdWJqZWN0IHBhZ2UuCisgKgorICogIFNwZWNpZnlpbmcgYW4gaW52YWxpZCB2aXJ0dWFsIGFkZHJlc3MgbWF5IGxlYWQgdG8gY2xpZW50IHRlcm1pbmF0aW9uLAorICogIG9yIG1heSBzaWxlbnRseSBzdWNjZWVkLiAgIkludmFsaWQiIGluIHRoaXMgY29udGV4dCBtZWFucyBhIHZhbHVlCisgKiAgd2hpY2ggd2FzIG5vdCBwcm92aWRlZCB0byB0aGUgY2xpZW50IHZpYSBodl9pbnF1aXJlX3ZpcnR1YWwuCisgKgorICogQHBhcmFtIHN0YXJ0IEFkZHJlc3MgdG8gZmx1c2guCisgKiBAcGFyYW0gcGFnZV9zaXplIFNpemUgb2YgcGFnZXMgdG8gYXNzdW1lLgorICogQHBhcmFtIHNpemUgVGhlIG51bWJlciBvZiBieXRlcyB0byBmbHVzaC4gQW55IHBhZ2UgaW4gdGhlIHJhbmdlCisgKiAgICAgICAgW3N0YXJ0LCBzdGFydCArIHNpemUpIHdpbGwgYmUgZmx1c2hlZCBmcm9tIHRoZSBUTEIuCisgKiBAcmV0dXJuIFplcm8gb24gc3VjY2Vzcywgb3IgYSBoeXBlcnZpc29yIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGh2X2ZsdXNoX3BhZ2VzKEhWX1ZpcnRBZGRyIHN0YXJ0LCBIVl9QYWdlU2l6ZSBwYWdlX3NpemUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKTsKKworCisvKiogRmx1c2hlcyBhbGwgbm9uLWdsb2JhbCB0cmFuc2xhdGlvbnMgKGlmIHByZXNlcnZlX2dsb2JhbCBpcyB0cnVlKSwKKyAqICBvciBhYnNvbHV0ZWx5IGFsbCB0cmFuc2xhdGlvbnMgKGlmIHByZXNlcnZlX2dsb2JhbCBpcyBmYWxzZSkuCisgKgorICogQHBhcmFtIHByZXNlcnZlX2dsb2JhbCBOb24temVybyBpZiB3ZSB3YW50IHRvIHByZXNlcnZlICJnbG9iYWwiIG1hcHBpbmdzLgorICogQHJldHVybiBaZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgaHlwZXJ2aXNvciBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisqLworaW50IGh2X2ZsdXNoX2FsbChpbnQgcHJlc2VydmVfZ2xvYmFsKTsKKworCisvKiogUmVzdGFydCBtYWNoaW5lIHdpdGggb3B0aW9uYWwgcmVzdGFydCBjb21tYW5kIGFuZCBvcHRpb25hbCBhcmdzLgorICogQHBhcmFtIGNtZCBDb25zdCBwb2ludGVyIHRvIGNvbW1hbmQgdG8gcmVzdGFydCB3aXRoLCBvciBOVUxMCisgKiBAcGFyYW0gYXJncyBDb25zdCBwb2ludGVyIHRvIGFyZ3VtZW50IHN0cmluZyB0byByZXN0YXJ0IHdpdGgsIG9yIE5VTEwKKyAqLwordm9pZCBodl9yZXN0YXJ0KEhWX1ZpcnRBZGRyIGNtZCwgSFZfVmlydEFkZHIgYXJncyk7CisKKworLyoqIEhhbHQgbWFjaGluZS4gKi8KK3ZvaWQgaHZfaGFsdCh2b2lkKTsKKworCisvKiogUG93ZXIgb2ZmIG1hY2hpbmUuICovCit2b2lkIGh2X3Bvd2VyX29mZih2b2lkKTsKKworCisvKiogUmUtZW50ZXIgdmlydHVhbC1pcy1waHlzaWNhbCBtZW1vcnkgdHJhbnNsYXRpb24gbW9kZSBhbmQgcmVzdGFydAorICogIGV4ZWN1dGlvbiBhdCBhIGdpdmVuIGFkZHJlc3MuCisgKiBAcGFyYW0gZW50cnkgQ2xpZW50IHBoeXNpY2FsIGFkZHJlc3MgYXQgd2hpY2ggdG8gYmVnaW4gZXhlY3V0aW9uLgorICogQHJldHVybiBBIGh5cGVydmlzb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlOyBpZiB0aGUgb3BlcmF0aW9uIGlzCisgKiAgICAgICAgIHN1Y2Nlc3NmdWwgdGhlIGNhbGwgZG9lcyBub3QgcmV0dXJuLgorICovCitpbnQgaHZfcmVleGVjKEhWX1BoeXNBZGRyIGVudHJ5KTsKKworCisvKiogQ2hpcCB0b3BvbG9neSAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyoqIFJlbGF0aXZlIGNvb3JkaW5hdGVzIG9mIHRoZSBxdWVyeWluZyB0aWxlICovCisgIEhWX0Nvb3JkIGNvb3JkOworCisgIC8qKiBXaWR0aCBvZiB0aGUgcXVlcnlpbmcgc3VwZXJ2aXNvcidzIHRpbGUgcmVjdGFuZ2xlLiAqLworICBpbnQgd2lkdGg7CisKKyAgLyoqIEhlaWdodCBvZiB0aGUgcXVlcnlpbmcgc3VwZXJ2aXNvcidzIHRpbGUgcmVjdGFuZ2xlLiAqLworICBpbnQgaGVpZ2h0OworCit9IEhWX1RvcG9sb2d5OworCisvKiogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGlsZSBjb29yZGluYXRlIHN5c3RlbS4KKyAqCisgKiBFYWNoIHN1cGVydmlzb3IgaXMgZ2l2ZW4gYSByZWN0YW5nbGUgb2YgdGlsZXMgaXQgcG90ZW50aWFsbHkgY29udHJvbHMuCisgKiBUaGVzZSB0aWxlcyBhcmUgbGFiZWxlZCB1c2luZyBhIHJlbGF0aXZlIGNvb3JkaW5hdGUgc3lzdGVtIHdpdGggKDAsMCkgYXMKKyAqIHRoZSB1cHBlciBsZWZ0IHRpbGUgcmVnYXJkbGVzcyBvZiB0aGVpciBwaHlzaWNhbCBsb2NhdGlvbiBvbiB0aGUgY2hpcC4KKyAqCisgKiBUaGlzIGNhbGwgcmV0dXJucyBib3RoIHRoZSBzaXplIG9mIHRoYXQgcmVjdGFuZ2xlIGFuZCB0aGUgcG9zaXRpb24KKyAqIHdpdGhpbiB0aGF0IHJlY3RhbmdsZSBvZiB0aGUgcXVlcnlpbmcgdGlsZS4KKyAqCisgKiBOb3QgYWxsIHRpbGVzIHdpdGhpbiB0aGF0IHJlY3RhbmdsZSBtYXkgYmUgYXZhaWxhYmxlIHRvIHRoZSBzdXBlcnZpc29yOworICogdG8gZ2V0IHRoZSBwcmVjaXNlIHNldCBvZiBhdmFpbGFibGUgdGlsZXMsIHlvdSBtdXN0IGFsc28gY2FsbAorICogaHZfaW5xdWlyZV90aWxlcyhIVl9JTlFfVElMRVNfQVZBSUwsIC4uLikuCisgKiovCitIVl9Ub3BvbG9neSBodl9pbnF1aXJlX3RvcG9sb2d5KHZvaWQpOworCisvKiogU2V0cyBvZiB0aWxlcyB3ZSBjYW4gcmV0cmlldmUgd2l0aCBodl9pbnF1aXJlX3RpbGVzKCkuCisgKgorICogVGhlc2UgbnVtYmVycyBhcmUgcGFydCBvZiB0aGUgYmluYXJ5IEFQSSBhbmQgZ3VhcmFudGVlZCBub3QgdG8gY2hhbmdlLgorICovCit0eXBlZGVmIGVudW0geworICAvKiogQW4gaW52YWxpZCB2YWx1ZTsgZG8gbm90IHVzZS4gKi8KKyAgX0hWX0lOUV9USUxFU19SRVNFUlZFRCAgICAgICA9IDAsCisKKyAgLyoqIEFsbCBhdmFpbGFibGUgdGlsZXMgd2l0aGluIHRoZSBzdXBlcnZpc29yJ3MgdGlsZSByZWN0YW5nbGUuICovCisgIEhWX0lOUV9USUxFU19BVkFJTCAgICAgICAgICAgPSAxLAorCisgIC8qKiBUaGUgc2V0IG9mIHRpbGVzIHVzZWQgZm9yIGhhc2gtZm9yLWhvbWUgY2FjaGluZy4gKi8KKyAgSFZfSU5RX1RJTEVTX0hGSF9DQUNIRSAgICAgICA9IDIsCisKKyAgLyoqIFRoZSBzZXQgb2YgdGlsZXMgdGhhdCBjYW4gYmUgbGVnYWxseSB1c2VkIGFzIGEgTE9UQVIgZm9yIGEgUFRFLiAqLworICBIVl9JTlFfVElMRVNfTE9UQVIgICAgICAgICAgID0gMworfSBIVl9JbnFUaWxlU2V0OworCisvKiogUmV0dXJucyBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB2YXJpb3VzIHNldHMgb2YgdGlsZXMgd2l0aGluIHRoZQorICogIHN1cGVydmlzb3IncyB0aWxlIHJlY3RhbmdsZS4KKyAqCisgKiBAcGFyYW0gc2V0IFdoaWNoIHNldCBvZiB0aWxlcyB0byByZXRyaWV2ZS4KKyAqIEBwYXJhbSBjcHVtYXNrIFBvaW50ZXIgdG8gYSByZXR1cm5lZCBiaXRtYXNrIChpbiByb3ctbWFqb3Igb3JkZXIsCisgKiAgICAgICAgc3VwZXJ2aXNvci1yZWxhdGl2ZSkgb2YgdGlsZXMuICBUaGUgbG93IGJpdCBvZiB0aGUgZmlyc3Qgd29yZAorICogICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSB0aWxlIGF0IHRoZSB1cHBlciBsZWZ0LWhhbmQgY29ybmVyIG9mIHRoZQorICogICAgICAgIHN1cGVydmlzb3IncyByZWN0YW5nbGUuICBJbiBvcmRlciBmb3IgdGhlIHN1cGVydmlzb3IgdG8ga25vdyB0aGUKKyAqICAgICAgICBidWZmZXIgbGVuZ3RoIHRvIHN1cHBseSwgaXQgc2hvdWxkIGZpcnN0IGNhbGwgaHZfaW5xdWlyZV90b3BvbG9neS4KKyAqIEBwYXJhbSBsZW5ndGggTnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHJldHVybmVkIGJpdG1hc2suCisgKiovCitIVl9FcnJubyBodl9pbnF1aXJlX3RpbGVzKEhWX0lucVRpbGVTZXQgc2V0LCBIVl9WaXJ0QWRkciBjcHVtYXNrLCBpbnQgbGVuZ3RoKTsKKworCisvKiogQW4gaWRlbnRpZmllciBmb3IgYSBtZW1vcnkgY29udHJvbGxlci4gTXVsdGlwbGUgbWVtb3J5IGNvbnRyb2xsZXJzCisgKiBtYXkgYmUgY29ubmVjdGVkIHRvIG9uZSBjaGlwLCBhbmQgdGhpcyB1bmlxdWVseSBpZGVudGlmaWVzIGVhY2ggb25lLgorICovCit0eXBlZGVmIGludCBIVl9NZW1vcnlDb250cm9sbGVyOworCisvKiogQSByYW5nZSBvZiBwaHlzaWNhbCBtZW1vcnkuICovCit0eXBlZGVmIHN0cnVjdAoreworICBIVl9QaHlzQWRkciBzdGFydDsgICAvKio8IFN0YXJ0aW5nIGFkZHJlc3MuICovCisgIF9faHY2NCBzaXplOyAgICAgICAgIC8qKjwgU2l6ZSBpbiBieXRlcy4gKi8KKyAgSFZfTWVtb3J5Q29udHJvbGxlciBjb250cm9sbGVyOyAgLyoqPCBXaGljaCBtZW1vcnkgY29udHJvbGxlciBvd25zIHRoaXMuICovCit9IEhWX1BoeXNBZGRyUmFuZ2U7CisKKy8qKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcmFuZ2Ugb2YgcGh5c2ljYWwgbWVtb3J5LgorICoKKyAqIGh2X2lucXVpcmVfcGh5c2ljYWwoKSByZXR1cm5zIG9uZSBvZiB0aGUgcmFuZ2VzIG9mIGNsaWVudAorICogcGh5c2ljYWwgYWRkcmVzc2VzIHdoaWNoIGFyZSBhdmFpbGFibGUgdG8gdGhpcyBjbGllbnQuCisgKgorICogVGhlIGZpcnN0IHJhbmdlIGlzIHJldHJpZXZlZCBieSBzcGVjaWZ5aW5nIGFuIGlkeCBvZiAwLCBhbmQKKyAqIHN1Y2Nlc3NpdmUgcmFuZ2VzIGFyZSByZXR1cm5lZCB3aXRoIHN1YnNlcXVlbnQgaWR4IHZhbHVlcy4gIFJhbmdlcworICogYXJlIG9yZGVyZWQgYnkgaW5jcmVhc2luZyBzdGFydCBhZGRyZXNzIChpLmUuLCBhcyBpZHggaW5jcmVhc2VzLAorICogc28gZG9lcyBzdGFydCksIGRvIG5vdCBvdmVybGFwLCBhbmQgZG8gbm90IHRvdWNoIChpLmUuLCB0aGUKKyAqIGF2YWlsYWJsZSBtZW1vcnkgaXMgZGVzY3JpYmVkIHdpdGggdGhlIGZld2VzdCBwb3NzaWJsZSByYW5nZXMpLgorICoKKyAqIElmIGFuIG91dC1vZi1yYW5nZSBpZHggdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgcmV0dXJuZWQgc2l6ZSB3aWxsIGJlIHplcm8uCisgKiBBIGNsaWVudCBjYW4gY291bnQgdGhlIG51bWJlciBvZiByYW5nZXMgYnkgaW5jcmVhc2luZyBpZHggdW50aWwgdGhlCisgKiByZXR1cm5lZCBzaXplIGlzIHplcm8uIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSB2YWxpZCByYW5nZS4KKyAqCisgKiBTb21lIGNsaWVudHMgbWlnaHQgbm90IGJlIHByZXBhcmVkIHRvIGRlYWwgd2l0aCBtb3JlIHRoYW4gb25lCisgKiBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlOyB0aGV5IHN0aWxsIG91Z2h0IHRvIGNhbGwgdGhpcyByb3V0aW5lIGFuZAorICogaXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UgaWYgdGhleSdyZSBnaXZlbiBtb3JlIHRoYW4gb25lIHJhbmdlLCBvbiB0aGUKKyAqIHRoZW9yeSB0aGF0IHdob2V2ZXIgY29uZmlndXJlZCB0aGUgaHlwZXJ2aXNvciB0byBwcm92aWRlIHRoYXQgbWVtb3J5CisgKiBzaG91bGQga25vdyB0aGF0IGl0J3MgYmVpbmcgd2FzdGVkLgorICovCitIVl9QaHlzQWRkclJhbmdlIGh2X2lucXVpcmVfcGh5c2ljYWwoaW50IGlkeCk7CisKKworLyoqIE1lbW9yeSBjb250cm9sbGVyIGluZm9ybWF0aW9uLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSFZfQ29vcmQgY29vcmQ7ICAgLyoqPCBSZWxhdGl2ZSB0aWxlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb3J0IHVzZWQgYnkgYQorICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCB0aWxlIHRvIGNvbW11bmljYXRlIHdpdGggdGhpcyBjb250cm9sbGVyLiAqLworICBfX2h2NjQgc3BlZWQ7ICAgICAvKio8IFNwZWVkIG9mIHRoaXMgY29udHJvbGxlciBpbiBieXRlcyBwZXIgc2Vjb25kLiAqLworfSBIVl9NZW1vcnlDb250cm9sbGVySW5mbzsKKworLyoqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIG1lbW9yeSBjb250cm9sbGVyLgorICoKKyAqICBodl9pbnF1aXJlX21lbW9yeV9jb250cm9sbGVyKGNvb3JkLGlkeCkgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhCisgKiAgcGFydGljdWxhciBjb250cm9sbGVyLiAgVHdvIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBhcmUgcmV0dXJuZWQ6CisgKiAgLSBUaGUgcmVsYXRpdmUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvcnQgb24gdGhlIGNvbnRyb2xsZXIgdGhhdCB0aGUgc3BlY2lmaWVkCisgKiAgICB0aWxlIHdvdWxkIHVzZSB0byBjb250YWN0IGl0LiAgVGhlIHJlbGF0aXZlIGNvb3JkaW5hdGVzIG1heSBsaWUKKyAqICAgIG91dHNpZGUgdGhlIHN1cGVydmlzb3IncyByZWN0YW5nbGUsIGkuZS4gdGhlIGNvbnRyb2xsZXIgbWF5IG5vdAorICogICAgYmUgYXR0YWNoZWQgdG8gYSBub2RlIG1hbmFnZWQgYnkgdGhlIHF1ZXJ5aW5nIG5vZGUncyBzdXBlcnZpc29yLgorICogICAgSW4gcGFydGljdWxhciBub3RlIHRoYXQgeCBvciB5IG1heSBiZSBuZWdhdGl2ZS4KKyAqICAtIFRoZSBzcGVlZCBvZiB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuICAoVGhpcyBpcyBhIG5vdC10by1leGNlZWQgdmFsdWUKKyAqICAgIGJhc2VkIG9uIHRoZSByYXcgaGFyZHdhcmUgZGF0YSByYXRlLCBhbmQgbWF5IG5vdCBiZSBhY2hpZXZhYmxlIGluCisgKiAgICBwcmFjdGljZTsgaXQgaXMgcHJvdmlkZWQgdG8gZ2l2ZSBjbGllbnRzIGluZm9ybWF0aW9uIG9uIHRoZSByZWxhdGl2ZQorICogICAgcGVyZm9ybWFuY2Ugb2YgdGhlIGF2YWlsYWJsZSBjb250cm9sbGVycy4pCisgKgorICogIENsaWVudHMgc2hvdWxkIGF2b2lkIGNhbGxpbmcgdGhpcyBpbnRlcmZhY2Ugd2l0aCBpbnZhbGlkIHZhbHVlcy4KKyAqICBBIGNsaWVudCB3aG8gZG9lcyBtYXkgYmUgdGVybWluYXRlZC4KKyAqIEBwYXJhbSBjb29yZCBUaWxlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHJlbGF0aXZlIHBvcnQgcG9zaXRpb24uCisgKiBAcGFyYW0gY29udHJvbGxlciBJbmRleCBvZiB0aGUgY29udHJvbGxlcjsgaWRlbnRpY2FsIHRvIHZhbHVlIHJldHVybmVkCisgKiAgICAgICAgZnJvbSBvdGhlciByb3V0aW5lcyBsaWtlIGh2X2lucXVpcmVfcGh5c2ljYWwuCisgKiBAcmV0dXJuIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cm9sbGVyLgorICovCitIVl9NZW1vcnlDb250cm9sbGVySW5mbyBodl9pbnF1aXJlX21lbW9yeV9jb250cm9sbGVyKEhWX0Nvb3JkIGNvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udHJvbGxlcik7CisKKworLyoqIEEgcmFuZ2Ugb2YgdmlydHVhbCBtZW1vcnkuICovCit0eXBlZGVmIHN0cnVjdAoreworICBIVl9WaXJ0QWRkciBzdGFydDsgICAvKio8IFN0YXJ0aW5nIGFkZHJlc3MuICovCisgIF9faHY2NCBzaXplOyAgICAgICAgIC8qKjwgU2l6ZSBpbiBieXRlcy4gKi8KK30gSFZfVmlydEFkZHJSYW5nZTsKKworLyoqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSByYW5nZSBvZiB2aXJ0dWFsIG1lbW9yeS4KKyAqCisgKiBodl9pbnF1aXJlX3ZpcnR1YWwoKSByZXR1cm5zIG9uZSBvZiB0aGUgcmFuZ2VzIG9mIGNsaWVudAorICogdmlydHVhbCBhZGRyZXNzZXMgd2hpY2ggYXJlIGF2YWlsYWJsZSB0byB0aGlzIGNsaWVudC4KKyAqCisgKiBUaGUgZmlyc3QgcmFuZ2UgaXMgcmV0cmlldmVkIGJ5IHNwZWNpZnlpbmcgYW4gaWR4IG9mIDAsIGFuZAorICogc3VjY2Vzc2l2ZSByYW5nZXMgYXJlIHJldHVybmVkIHdpdGggc3Vic2VxdWVudCBpZHggdmFsdWVzLiAgUmFuZ2VzCisgKiBhcmUgb3JkZXJlZCBieSBpbmNyZWFzaW5nIHN0YXJ0IGFkZHJlc3MgKGkuZS4sIGFzIGlkeCBpbmNyZWFzZXMsCisgKiBzbyBkb2VzIHN0YXJ0KSwgZG8gbm90IG92ZXJsYXAsIGFuZCBkbyBub3QgdG91Y2ggKGkuZS4sIHRoZQorICogYXZhaWxhYmxlIG1lbW9yeSBpcyBkZXNjcmliZWQgd2l0aCB0aGUgZmV3ZXN0IHBvc3NpYmxlIHJhbmdlcykuCisgKgorICogSWYgYW4gb3V0LW9mLXJhbmdlIGlkeCB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSByZXR1cm5lZCBzaXplIHdpbGwgYmUgemVyby4KKyAqIEEgY2xpZW50IGNhbiBjb3VudCB0aGUgbnVtYmVyIG9mIHJhbmdlcyBieSBpbmNyZWFzaW5nIGlkeCB1bnRpbCB0aGUKKyAqIHJldHVybmVkIHNpemUgaXMgemVyby4gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIHZhbGlkIHJhbmdlLgorICoKKyAqIFNvbWUgY2xpZW50cyBtYXkgd2VsbCBoYXZlIHZhcmlvdXMgdmlydHVhbCBhZGRyZXNzZXMgaGFyZHdpcmVkCisgKiBpbnRvIHRoZW1zZWx2ZXM7IGZvciBpbnN0YW5jZSwgdGhlaXIgaW5zdHJ1Y3Rpb24gc3RyZWFtIG1heQorICogaGF2ZSBiZWVuIGNvbXBpbGVkIGV4cGVjdGluZyB0byBsaXZlIGF0IGEgcGFydGljdWxhciBhZGRyZXNzLgorICogU3VjaCBjbGllbnRzIHNob3VsZCB1c2UgdGhpcyBpbnRlcmZhY2UgdG8gdmVyaWZ5IHRoZXkndmUgYmVlbgorICogZ2l2ZW4gdGhlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aGV5IGV4cGVjdCwgYW5kIGlzc3VlIGEgKHBvdGVudGlhbGx5CisgKiBmYXRhbCkgd2FybmluZyBtZXNzYWdlIG90aGVyd2lzZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNpemUgaXMgYSBfX2h2NjQsIG5vdCBhIF9faHYzMiwgc28gaXQgaXMKKyAqIHBvc3NpYmxlIHRvIGV4cHJlc3MgYSBzaW5nbGUgcmFuZ2Ugc3Bhbm5pbmcgdGhlIGVudGlyZSAzMi1iaXQKKyAqIGFkZHJlc3Mgc3BhY2UuCisgKi8KK0hWX1ZpcnRBZGRyUmFuZ2UgaHZfaW5xdWlyZV92aXJ0dWFsKGludCBpZHgpOworCisKKy8qKiBBIHJhbmdlIG9mIEFTSUQgdmFsdWVzLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSFZfQVNJRCBzdGFydDsgICAgICAgIC8qKjwgRmlyc3QgQVNJRCBpbiB0aGUgcmFuZ2UuICovCisgIHVuc2lnbmVkIGludCBzaXplOyAgICAvKio8IE51bWJlciBvZiBBU0lEcy4gWmVybyBmb3IgYW4gaW52YWxpZCByYW5nZS4gKi8KK30gSFZfQVNJRFJhbmdlOworCisvKiogUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHJhbmdlIG9mIEFTSURzLgorICoKKyAqIGh2X2lucXVpcmVfYXNpZCgpIHJldHVybnMgb25lIG9mIHRoZSByYW5nZXMgb2YgYWRkcmVzcworICogc3BhY2UgaWRlbnRpZmllcnMgd2hpY2ggYXJlIGF2YWlsYWJsZSB0byB0aGlzIGNsaWVudC4KKyAqCisgKiBUaGUgZmlyc3QgcmFuZ2UgaXMgcmV0cmlldmVkIGJ5IHNwZWNpZnlpbmcgYW4gaWR4IG9mIDAsIGFuZAorICogc3VjY2Vzc2l2ZSByYW5nZXMgYXJlIHJldHVybmVkIHdpdGggc3Vic2VxdWVudCBpZHggdmFsdWVzLiAgUmFuZ2VzCisgKiBhcmUgb3JkZXJlZCBieSBpbmNyZWFzaW5nIHN0YXJ0IHZhbHVlIChpLmUuLCBhcyBpZHggaW5jcmVhc2VzLAorICogc28gZG9lcyBzdGFydCksIGRvIG5vdCBvdmVybGFwLCBhbmQgZG8gbm90IHRvdWNoIChpLmUuLCB0aGUKKyAqIGF2YWlsYWJsZSBBU0lEcyBhcmUgZGVzY3JpYmVkIHdpdGggdGhlIGZld2VzdCBwb3NzaWJsZSByYW5nZXMpLgorICoKKyAqIElmIGFuIG91dC1vZi1yYW5nZSBpZHggdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgcmV0dXJuZWQgc2l6ZSB3aWxsIGJlIHplcm8uCisgKiBBIGNsaWVudCBjYW4gY291bnQgdGhlIG51bWJlciBvZiByYW5nZXMgYnkgaW5jcmVhc2luZyBpZHggdW50aWwgdGhlCisgKiByZXR1cm5lZCBzaXplIGlzIHplcm8uIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSB2YWxpZCByYW5nZS4KKyAqLworSFZfQVNJRFJhbmdlIGh2X2lucXVpcmVfYXNpZChpbnQgaWR4KTsKKworCisvKiogV2FpdHMgZm9yIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHRoZW4gcmV0dXJucy4KKyAqCisgKiBAcGFyYW0gbmFub3NlY3MgVGhlIG51bWJlciBvZiBuYW5vc2Vjb25kcyB0byBzbGVlcC4KKyAqLwordm9pZCBodl9uYW5vc2xlZXAoaW50IG5hbm9zZWNzKTsKKworCisvKiogUmVhZHMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgY29uc29sZSB3aXRob3V0IGJsb2NraW5nLgorICoKKyAqIEByZXR1cm4gQSB2YWx1ZSBmcm9tIDAtMjU1IGluZGljYXRlcyB0aGUgdmFsdWUgc3VjY2Vzc2Z1bGx5IHJlYWQuCisgKiBBIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIG5vIHZhbHVlIHdhcyByZWFkeS4KKyAqLworaW50IGh2X2NvbnNvbGVfcmVhZF9pZl9yZWFkeSh2b2lkKTsKKworCisvKiogV3JpdGVzIGEgY2hhcmFjdGVyIHRvIHRoZSBjb25zb2xlLCBibG9ja2luZyBpZiB0aGUgY29uc29sZSBpcyBidXN5LgorICoKKyAqICBUaGlzIGNhbGwgY2Fubm90IGZhaWwuIElmIHRoZSBjb25zb2xlIGlzIGJyb2tlbiBmb3Igc29tZSByZWFzb24sCisgKiAgb3V0cHV0IHdpbGwgc2ltcGx5IHZhbmlzaC4KKyAqIEBwYXJhbSBieXRlIENoYXJhY3RlciB0byB3cml0ZS4KKyAqLwordm9pZCBodl9jb25zb2xlX3B1dGMoaW50IGJ5dGUpOworCisKKy8qKiBXcml0ZXMgYSBzdHJpbmcgdG8gdGhlIGNvbnNvbGUsIGJsb2NraW5nIGlmIHRoZSBjb25zb2xlIGlzIGJ1c3kuCisgKiBAcGFyYW0gYnl0ZXMgUG9pbnRlciB0byBjaGFyYWN0ZXJzIHRvIHdyaXRlLgorICogQHBhcmFtIGxlbiBOdW1iZXIgb2YgY2hhcmFjdGVycyB0byB3cml0ZS4KKyAqIEByZXR1cm4gTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgSFZfRUZBVUxUIGlmIHRoZSBidWZmZXIgaXMgaW52YWxpZC4KKyAqLworaW50IGh2X2NvbnNvbGVfd3JpdGUoSFZfVmlydEFkZHIgYnl0ZXMsIGludCBsZW4pOworCisKKy8qKiBEaXNwYXRjaCB0aGUgbmV4dCBpbnRlcnJ1cHQgZnJvbSB0aGUgY2xpZW50IGRvd25jYWxsIG1lY2hhbmlzbS4KKyAqCisgKiAgVGhlIGh5cGVydmlzb3IgdXNlcyBkb3duY2FsbHMgdG8gbm90aWZ5IHRoZSBjbGllbnQgb2YgYXN5bmNocm9ub3VzCisgKiAgZXZlbnRzLiAgU29tZSBvZiB0aGVzZSBldmVudHMgYXJlIGh5cGVydmlzb3ItY3JlYXRlZCAobGlrZSBpbmNvbWluZworICogIG1lc3NhZ2VzKS4gIFNvbWUgYXJlIHJlZ3VsYXIgaW50ZXJydXB0cyB3aGljaCBpbml0aWFsbHkgb2NjdXIgaW4KKyAqICB0aGUgaHlwZXJ2aXNvciwgYW5kIGFyZSBub3JtYWxseSBoYW5kbGVkIGRpcmVjdGx5IGJ5IHRoZSBjbGllbnQ7CisgKiAgd2hlbiB0aGVzZSBvY2N1ciBpbiBhIGNsaWVudCdzIGludGVycnVwdCBjcml0aWNhbCBzZWN0aW9uLCB0aGV5IG11c3QKKyAqICBiZSBkZWxpdmVyZWQgdGhyb3VnaCB0aGUgZG93bmNhbGwgbWVjaGFuaXNtLgorICoKKyAqICBBIGRvd25jYWxsIGlzIGluaXRpYWxseSBkZWxpdmVyZWQgdG8gdGhlIGNsaWVudCBhcyBhbiBJTlRDVFJMXzEKKyAqICBpbnRlcnJ1cHQuICBVcG9uIGVudHJ5IHRvIHRoZSBJTlRDVFJMXzEgdmVjdG9yLCB0aGUgY2xpZW50IG11c3QKKyAqICBpbW1lZGlhdGVseSBpbnZva2UgdGhlIGh2X2Rvd25jYWxsX2Rpc3BhdGNoIHNlcnZpY2UuICBUaGlzIHNlcnZpY2UKKyAqICB3aWxsIG5vdCByZXR1cm47IGluc3RlYWQgaXQgd2lsbCBjYXVzZSBvbmUgb2YgdGhlIGNsaWVudCdzIGFjdHVhbAorICogIGRvd25jYWxsLWhhbmRsaW5nIGludGVycnVwdCB2ZWN0b3JzIHRvIGJlIGVudGVyZWQuICBUaGUgRVhfQ09OVEVYVAorICogIHJlZ2lzdGVycyBpbiB0aGUgY2xpZW50IHdpbGwgYmUgc2V0IHNvIHRoYXQgd2hlbiB0aGUgY2xpZW50IGlyZXRzLAorICogIGl0IHdpbGwgcmV0dXJuIHRvIHRoZSBjb2RlIHdoaWNoIHdhcyBpbnRlcnJ1cHRlZCBieSB0aGUgSU5UQ1RSTF8xCisgKiAgaW50ZXJydXB0LgorICoKKyAqICBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHRoZSBmaXJpbmcgb2YgSU5UQ1RSTF8xIGNhbiByYWNlIHdpdGgKKyAqICB0aGUgbG93ZXJpbmcgb2YgYSBkZXZpY2UgaW50ZXJydXB0LiAgSW4gc3VjaCBhIGNhc2UsIHRoZQorICogIGh2X2Rvd25jYWxsX2Rpc3BhdGNoIHNlcnZpY2UgbWF5IGlzc3VlIGFuIGlyZXQgaW5zdHJ1Y3Rpb24gaW5zdGVhZAorICogIG9mIGVudGVyaW5nIG9uZSBvZiB0aGUgY2xpZW50J3MgYWN0dWFsIGRvd25jYWxsLWhhbmRsaW5nIGludGVycnVwdAorICogIHZlY3RvcnMuICBUaGlzIHdpbGwgcmV0dXJuIGV4ZWN1dGlvbiB0byB0aGUgbG9jYXRpb24gdGhhdCB3YXMKKyAqICBpbnRlcnJ1cHRlZCBieSBJTlRDVFJMXzEuCisgKgorICogIEFueSBzYXZpbmcgb2YgcmVnaXN0ZXJzIHNob3VsZCBiZSBkb25lIGJ5IHRoZSBhY3R1YWwgaGFuZGxpbmcKKyAqICB2ZWN0b3JzOyBubyByZWdpc3RlcnMgc2hvdWxkIGJlIGNoYW5nZWQgYnkgdGhlIElOVENUUkxfMSBoYW5kbGVyLgorICogIEluIHBhcnRpY3VsYXIsIHRoZSBjbGllbnQgc2hvdWxkIG5vdCB1c2UgYSBqYWwgaW5zdHJ1Y3Rpb24gdG8gaW52b2tlCisgKiAgdGhlIGh2X2Rvd25jYWxsX2Rpc3BhdGNoIHNlcnZpY2UsIGFzIHRoYXQgd291bGQgb3ZlcndyaXRlIHRoZSBjbGllbnQncworICogIGxyIHJlZ2lzdGVyLiAgTm90ZSB0aGF0IHRoZSBodl9kb3duY2FsbF9kaXNwYXRjaCBzZXJ2aWNlIG1heSBvdmVyd3JpdGUKKyAqICBvbmUgb3IgbW9yZSBvZiB0aGUgY2xpZW50J3Mgc3lzdGVtIHNhdmUgcmVnaXN0ZXJzLgorICoKKyAqICBUaGUgY2xpZW50IG11c3Qgbm90IG1vZGlmeSB0aGUgSU5UQ1RSTF8xX1NUQVRVUyBTUFIuICBUaGUgaHlwZXJ2aXNvcgorICogIHdpbGwgc2V0IHRoaXMgcmVnaXN0ZXIgdG8gY2F1c2UgYSBkb3duY2FsbCB0byBoYXBwZW4sIGFuZCB3aWxsIGNsZWFyCisgKiAgaXQgd2hlbiBubyBmdXJ0aGVyIGRvd25jYWxscyBhcmUgcGVuZGluZy4KKyAqCisgKiAgV2hlbiBhIGRvd25jYWxsIHZlY3RvciBpcyBlbnRlcmVkLCB0aGUgSU5UQ1RSTF8xIGludGVycnVwdCB3aWxsIGJlCisgKiAgbWFza2VkLiAgV2hlbiB0aGUgY2xpZW50IGlzIGRvbmUgcHJvY2Vzc2luZyBhIGRvd25jYWxsLCBhbmQgaXMgcmVhZHkKKyAqICB0byBhY2NlcHQgYW5vdGhlciwgaXQgbXVzdCB1bm1hc2sgdGhpcyBpbnRlcnJ1cHQ7IGlmIG1vcmUgZG93bmNhbGxzCisgKiAgYXJlIHBlbmRpbmcsIHRoaXMgd2lsbCBjYXVzZSB0aGUgSU5UQ1RSTF8xIHZlY3RvciB0byBiZSByZWVudGVyZWQuCisgKiAgQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgaW50ZXJydXB0IHZlY3RvcnMgY2FuIGJlIGVudGVyZWQgdGhyb3VnaCBhCisgKiAgZG93bmNhbGw6CisgKgorICogIElOVF9NRVNTQUdFX1JDVl9EV05DTCAgIChoeXBlcnZpc29yIG1lc3NhZ2UgYXZhaWxhYmxlKQorICogIElOVF9ETUFUTEJfTUlTU19EV05DTCAgIChETUEgVExCIG1pc3MpCisgKiAgSU5UX1NOSVRMQl9NSVNTX0RXTkNMICAgKFNOSSBUTEIgbWlzcykKKyAqICBJTlRfRE1BVExCX0FDQ0VTU19EV05DTCAoRE1BIFRMQiBhY2Nlc3MgdmlvbGF0aW9uKQorICovCit2b2lkIGh2X2Rvd25jYWxsX2Rpc3BhdGNoKHZvaWQpOworCisjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi8KKworLyoqIFdlIHVzZSBhY3R1YWwgaW50ZXJydXB0IHZlY3RvcnMgd2hpY2ggbmV2ZXIgb2NjdXIgKHRoZXkncmUgb25seSB0aGVyZQorICogIHRvIGFsbG93IHNldHRpbmcgTVBMcyBmb3IgcmVsYXRlZCBTUFJzKSBmb3Igb3VyIGRvd25jYWxsIHZlY3RvcnMuCisgKi8KKy8qKiBNZXNzYWdlIHJlY2VpdmUgZG93bmNhbGwgaW50ZXJydXB0IHZlY3RvciAqLworI2RlZmluZSBJTlRfTUVTU0FHRV9SQ1ZfRFdOQ0wgICAgSU5UX0JPT1RfQUNDRVNTCisvKiogRE1BIFRMQiBtaXNzIGRvd25jYWxsIGludGVycnVwdCB2ZWN0b3IgKi8KKyNkZWZpbmUgSU5UX0RNQVRMQl9NSVNTX0RXTkNMICAgIElOVF9ETUFfQVNJRAorLyoqIFN0YXRpYyBuZXdvcmsgcHJvY2Vzc29yIGluc3RydWN0aW9uIFRMQiBtaXNzIGludGVycnVwdCB2ZWN0b3IgKi8KKyNkZWZpbmUgSU5UX1NOSVRMQl9NSVNTX0RXTkNMICAgIElOVF9TTklfQVNJRAorLyoqIERNQSBUTEIgYWNjZXNzIHZpb2xhdGlvbiBkb3duY2FsbCBpbnRlcnJ1cHQgdmVjdG9yICovCisjZGVmaW5lIElOVF9ETUFUTEJfQUNDRVNTX0RXTkNMICBJTlRfRE1BX0NQTAorLyoqIERldmljZSBpbnRlcnJ1cHQgZG93bmNhbGwgaW50ZXJydXB0IHZlY3RvciAqLworI2RlZmluZSBJTlRfREVWX0lOVFJfRFdOQ0wgICAgICAgSU5UX1dPUkxEX0FDQ0VTUworCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworLyoqIFJlcXVlc3RzIHRoZSBpbm9kZSBmb3IgYSBzcGVjaWZpYyBmdWxsIHBhdGhuYW1lLgorICoKKyAqIFBlcmZvcm1zIGEgbG9va3VwIGluIHRoZSBoeXBlcnZpc29yIGZpbGVzeXN0ZW0gZm9yIGEgZ2l2ZW4gZmlsZW5hbWUuCisgKiBNdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBpbm9kZS4KKyAqIElmIHRoZXJlIGlzIG5vIHN1Y2ggZmlsZW5hbWUsIEhWX0VOT0VOVCBpcyByZXR1cm5lZC4KKyAqIEEgYmFkIGZpbGVuYW1lIHBvaW50ZXIgbWF5IHJlc3VsdCBpbiBIVl9FRkFVTFQgaW5zdGVhZC4KKyAqCisgKiBAcGFyYW0gZmlsZW5hbWUgQ29uc3RhbnQgcG9pbnRlciB0byBuYW1lIG9mIHJlcXVlc3RlZCBmaWxlCisgKiBAcmV0dXJuIElub2RlIG9mIHJlcXVlc3RlZCBmaWxlCisgKi8KK2ludCBodl9mc19maW5kZmlsZShIVl9WaXJ0QWRkciBmaWxlbmFtZSk7CisKKworLyoqIERhdGEgcmV0dXJuZWQgZnJvbSBhbiBmc3RhdCByZXF1ZXN0LgorICogTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBubyBtb3JlIHRoYW4gNDAgYnl0ZXMgaW4gc2l6ZSBzbworICogdGhhdCBpdCBjYW4gYWx3YXlzIGJlIHJldHVybmVkIGNvbXBsZXRlbHkgaW4gcmVnaXN0ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQgc2l6ZTsgICAgICAgICAgICAgLyoqPCBTaXplIG9mIGZpbGUgKG9yIEhWX0Vycm5vIG9uIGVycm9yKSAqLworICB1bnNpZ25lZCBpbnQgZmxhZ3M7ICAgLyoqPCBGbGFncyAoc2VlIEhWX0ZTX0ZTVEFUX0ZMQUdTKSAqLworfSBIVl9GU19TdGF0SW5mbzsKKworLyoqIEJpdG1hc2sgZmxhZ3MgZm9yIGZzdGF0IHJlcXVlc3QgKi8KK3R5cGVkZWYgZW51bQoreworICBIVl9GU19JU0RJUiAgICA9IDB4MDAwMSAgIC8qKjwgSXMgdGhlIGVudHJ5IGEgZGlyZWN0b3J5PyAqLworfSBIVl9GU19GU1RBVF9GTEFHUzsKKworLyoqIEdldCBzdGF0IGluZm9ybWF0aW9uIG9uIGEgZ2l2ZW4gZmlsZSBpbm9kZS4KKyAqCisgKiBSZXR1cm4gaW5mb3JtYXRpb24gb24gdGhlIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gaW5vZGUuCisgKgorICogSUYgdGhlIEhWX0ZTX0lTRElSIGJpdCBpcyBzZXQsIHRoZSAiZmlsZSIgaXMgYSBkaXJlY3RvcnkuICBSZWFkaW5nCisgKiBpdCB3aWxsIHJldHVybiBOVUwtc2VwYXJhdGVkIGZpbGVuYW1lcyAobm8gZGlyZWN0b3J5IHBhcnQpIHJlbGF0aXZlCisgKiB0byB0aGUgcGF0aCB0byB0aGUgaW5vZGUgb2YgdGhlIGRpcmVjdG9yeSAiZmlsZSIuICBUaGVzZSBjYW4gYmUKKyAqIGFwcGVuZGVkIHRvIHRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgImZpbGUiIGFmdGVyIGEgZm9yd2FyZCBzbGFzaAorICogdG8gY3JlYXRlIGFkZGl0aW9uYWwgZmlsZW5hbWVzLiAgTm90ZSB0aGF0IGl0IGlzIG5vdCByZXF1aXJlZAorICogdGhhdCBhbGwgdmFsaWQgcGF0aHMgYmUgZGVjb21wb3NhYmxlIGludG8gdmFsaWQgcGFyZW50IGRpcmVjdG9yaWVzOworICogYSBmaWxlc3lzdGVtIG1heSB2YWxpZGx5IGhhdmUganVzdCBhIGZldyBmaWxlcywgbm9uZSBvZiB3aGljaCBoYXZlCisgKiBIVl9GU19JU0RJUiBzZXQuICBIb3dldmVyLCBpZiBjbGllbnRzIG1heSB3aXNoIHRvIGVudW1lcmF0ZSB0aGUKKyAqIGZpbGVzIGluIHRoZSBmaWxlc3lzdGVtLCBpdCBpcyByZWNvbW1lbmRlZCB0byBpbmNsdWRlIGFsbCB0aGUKKyAqIGFwcHJvcHJpYXRlIHBhcmVudCBkaXJlY3RvcnkgImZpbGVzIiB0byBnaXZlIGEgY29uc2lzdGVudCB2aWV3LgorICoKKyAqIEFuIGludmFsaWQgZmlsZSBpbm9kZSB3aWxsIGNhdXNlIGFuIEhWX0VCQURGIGVycm9yIHRvIGJlIHJldHVybmVkLgorICoKKyAqIEBwYXJhbSBpbm9kZSBUaGUgaW5vZGUgbnVtYmVyIG9mIHRoZSBxdWVyeQorICogQHJldHVybiBBbiBIVl9GU19TdGF0SW5mbyBzdHJ1Y3R1cmUKKyAqLworSFZfRlNfU3RhdEluZm8gaHZfZnNfZnN0YXQoaW50IGlub2RlKTsKKworCisvKiogUmVhZCBkYXRhIGZyb20gYSBzcGVjaWZpYyBoeXBlcnZpc29yIGZpbGUuCisgKiBPbiBlcnJvciwgbWF5IHJldHVybiBIVl9FQkFERiBmb3IgYSBiYWQgaW5vZGUgb3IgSFZfRUZBVUxUIGZvciBhIGJhZCBidWYuCisgKiBSZWFkcyBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUgd2lsbCByZXR1cm4gZmV3ZXIgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisgKiBSZWFkcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiBhIGZpbGUgd2lsbCByZXR1cm4gemVyby4KKyAqCisgKiBAcGFyYW0gaW5vZGUgdGhlIGh5cGVydmlzb3IgZmlsZSB0byByZWFkCisgKiBAcGFyYW0gYnVmIHRoZSBidWZmZXIgdG8gcmVhZCBkYXRhIGludG8KKyAqIEBwYXJhbSBsZW5ndGggdGhlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIHRvIHJlYWQKKyAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBmaWxlIHRvIHJlYWQgdGhlIGRhdGEgZnJvbQorICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHJlYWQsIG9yIGFuIEhWX0Vycm5vIGNvZGUKKyAqLworaW50IGh2X2ZzX3ByZWFkKGludCBpbm9kZSwgSFZfVmlydEFkZHIgYnVmLCBpbnQgbGVuZ3RoLCBpbnQgb2Zmc2V0KTsKKworCisvKiogUmVhZCBhIDY0LWJpdCB3b3JkIGZyb20gdGhlIHNwZWNpZmllZCBwaHlzaWNhbCBhZGRyZXNzLgorICogVGhlIGFkZHJlc3MgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KKyAqIFNwZWNpZnlpbmcgYW4gaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgbGVhZCB0byBjbGllbnQgdGVybWluYXRpb24uCisgKiBAcGFyYW0gYWRkciBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0byByZWFkCisgKiBAcGFyYW0gYWNjZXNzIFRoZSBQVEUgZGVzY3JpYmluZyBob3cgdG8gcmVhZCB0aGUgbWVtb3J5CisgKiBAcmV0dXJuIFRoZSA2NC1iaXQgdmFsdWUgcmVhZCBmcm9tIHRoZSBnaXZlbiBhZGRyZXNzCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBodl9waHlzYWRkcl9yZWFkNjQoSFZfUGh5c0FkZHIgYWRkciwgSFZfUFRFIGFjY2Vzcyk7CisKKworLyoqIFdyaXRlIGEgNjQtYml0IHdvcmQgdG8gdGhlIHNwZWNpZmllZCBwaHlzaWNhbCBhZGRyZXNzLgorICogVGhlIGFkZHJlc3MgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZC4KKyAqIFNwZWNpZnlpbmcgYW4gaW52YWxpZCBwaHlzaWNhbCBhZGRyZXNzIHdpbGwgbGVhZCB0byBjbGllbnQgdGVybWluYXRpb24uCisgKiBAcGFyYW0gYWRkciBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0byB3cml0ZQorICogQHBhcmFtIGFjY2VzcyBUaGUgUFRFIHRoYXQgc2F5cyBob3cgdG8gd3JpdGUgdGhlIG1lbW9yeQorICogQHBhcmFtIHZhbCBUaGUgNjQtYml0IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBnaXZlbiBhZGRyZXNzCisgKi8KK3ZvaWQgaHZfcGh5c2FkZHJfd3JpdGU2NChIVl9QaHlzQWRkciBhZGRyLCBIVl9QVEUgYWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpOworCisKKy8qKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kLWxpbmUgZm9yIHRoZSBzdXBlcnZpc29yLCBpZiBhbnkuCisgKiBUaGlzIHdpbGwgbm90IGluY2x1ZGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBib290ZWQgc3VwZXJ2aXNvciwgYnV0IG1heQorICogaW5jbHVkZSBjb25maWd1cmVkLWluIGJvb3QgYXJndW1lbnRzIG9yIHRoZSBodl9yZXN0YXJ0KCkgYXJndW1lbnRzLgorICogSWYgdGhlIGJ1ZmZlciBpcyBub3QgbG9uZyBlbm91Z2ggdGhlIGh5cGVydmlzb3Igd2lsbCBOVUwgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgb2YgdGhlIGJ1ZmZlciBidXQgbm90IHdyaXRlIGFueSBvdGhlciBkYXRhLgorICogQHBhcmFtIGJ1ZiBUaGUgdmlydHVhbCBhZGRyZXNzIHRvIHdyaXRlIHRoZSBjb21tYW5kLWxpbmUgc3RyaW5nIHRvLgorICogQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIGJ1ZiwgaW4gY2hhcmFjdGVycy4KKyAqIEByZXR1cm4gVGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIGNvbW1hbmQgbGluZSwgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwKKyAqICAgICAgICAgKG1heSBiZSBsYXJnZXIgdGhhbiAibGVuZ3RoIikuCisgKi8KK2ludCBodl9nZXRfY29tbWFuZF9saW5lKEhWX1ZpcnRBZGRyIGJ1ZiwgaW50IGxlbmd0aCk7CisKKworLyoqIFNldCBhIG5ldyB2YWx1ZSBmb3IgdGhlIGNvbW1hbmQtbGluZSBmb3IgdGhlIHN1cGVydmlzb3IsIHdoaWNoIHdpbGwKKyAqICBiZSByZXR1cm5lZCBmcm9tIHN1YnNlcXVlbnQgaW52b2NhdGlvbnMgb2YgaHZfZ2V0X2NvbW1hbmRfbGluZSgpIG9uCisgKiAgdGhpcyB0aWxlLgorICogQHBhcmFtIGJ1ZiBUaGUgdmlydHVhbCBhZGRyZXNzIHRvIHJlYWQgdGhlIGNvbW1hbmQtbGluZSBzdHJpbmcgZnJvbS4KKyAqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0aCBvZiBidWYsIGluIGNoYXJhY3RlcnM7IG11c3QgYmUgbm8gbW9yZSB0aGFuCisgKiAgICAgICAgSFZfQ09NTUFORF9MSU5FX0xFTi4KKyAqIEByZXR1cm4gWmVybyBpZiBzdWNjZXNzZnVsLCBvciBhIGh5cGVydmlzb3IgZXJyb3IgY29kZS4KKyAqLworSFZfRXJybm8gaHZfc2V0X2NvbW1hbmRfbGluZShIVl9WaXJ0QWRkciBidWYsIGludCBsZW5ndGgpOworCisvKiogTWF4aW11bSBzaXplIG9mIGEgY29tbWFuZCBsaW5lIHBhc3NlZCB0byBodl9zZXRfY29tbWFuZF9saW5lKCk7IG5vdGUKKyAqICB0aGF0IGEgbGluZSByZXR1cm5lZCBmcm9tIGh2X2dldF9jb21tYW5kX2xpbmUoKSBjb3VsZCBiZSBsYXJnZXIgdGhhbgorICogIHRoaXMuKi8KKyNkZWZpbmUgSFZfQ09NTUFORF9MSU5FX0xFTiAgMjU2CisKKy8qKiBUZWxsIHRoZSBoeXBlcnZpc29yIGhvdyB0byBjYWNoZSBub24tcHJpb3JpdHkgcGFnZXMKKyAqIChpdHMgb3duIGFzIHdlbGwgYXMgcGFnZXMgZXhwbGljaXRseSByZXByZXNlbnRlZCBpbiBwYWdlIHRhYmxlcykuCisgKiBOb3JtYWxseSB0aGVzZSB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIHJlZC9ibGFjayBwYWdlcywgYnV0CisgKiB3aGVuIHRoZSBzdXBlcnZpc29yIHN0YXJ0cyB0byBhbGxvY2F0ZSAicHJpb3JpdHkiIHBhZ2VzIGluIHRoZSBQVEUKKyAqIHRoZSBoeXBlcnZpc29yIHdpbGwgbmVlZCB0byBzdGFydCBtYXJraW5nIHRob3NlIHBhZ2VzIGFzIChlLmcuKSAicmVkIgorICogYW5kIG5vbi1wcmlvcml0eSBwYWdlcyBhcyBlaXRoZXIgImJsYWNrIiAoaWYgdGhleSBjYWNoZS1hbGlhcworICogd2l0aCB0aGUgZXhpc3RpbmcgcHJpb3JpdHkgcGFnZXMpIG9yICJyZWQvYmxhY2siIChpZiB0aGV5IGRvbid0KS4KKyAqIFRoZSBiaXRtYXNrIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHdoaWNoIHBhcnRzIG9mIHRoZSBjYWNoZQorICogaGF2ZSBiZWVuIHVzZWQgZm9yIHBpbm5lZCBwYWdlcyBzbyBmYXIgb24gdGhpcyB0aWxlOyBpZiAoMSA8PCBOKQorICogYXBwZWFycyBpbiB0aGUgYml0bWFzaywgdGhhdCBpbmRpY2F0ZXMgdGhhdCBhIHBhZ2UgaGFzIGJlZW4gbWFya2VkCisgKiAicHJpb3JpdHkiIHdob3NlIFBGTiBlcXVhbHMgTiwgbW9kIDguCisgKiBAcGFyYW0gYml0bWFzayBBIGJpdG1hcCBvZiBwcmlvcml0eSBwYWdlIHNldCB2YWx1ZXMKKyAqLwordm9pZCBodl9zZXRfY2FjaGluZyh1bnNpZ25lZCBpbnQgYml0bWFzayk7CisKKworLyoqIFplcm8gb3V0IGEgc3BlY2lmaWVkIG51bWJlciBvZiBwYWdlcy4KKyAqIFRoZSB2YSBhbmQgc2l6ZSBtdXN0IGJvdGggYmUgbXVsdGlwbGVzIG9mIDQwOTYuCisgKiBDYWNoZXMgYXJlIGJ5cGFzc2VkIGFuZCBtZW1vcnkgaXMgZGlyZWN0bHkgc2V0IHRvIHplcm8uCisgKiBUaGlzIEFQSSBpcyBpbXBsZW1lbnRlZCBvbmx5IGluIHRoZSBtYWdpYyBoeXBlcnZpc29yIGFuZCBpcyBpbnRlbmRlZAorICogdG8gcHJvdmlkZSBhIHBlcmZvcm1hbmNlIGJvb3N0IHRvIHRoZSBtaW5pbWFsIHN1cGVydmlzb3IgYnkKKyAqIGdpdmluZyBpdCBhIGZhc3Qgd2F5IHRvIHplcm8gbWVtb3J5IHBhZ2VzIHdoZW4gYWxsb2NhdGluZyB0aGVtLgorICogQHBhcmFtIHZhIFZpcnR1YWwgYWRkcmVzcyB3aGVyZSB0aGUgcGFnZSBoYXMgYmVlbiBtYXBwZWQKKyAqIEBwYXJhbSBzaXplIE51bWJlciBvZiBieXRlcyAobXVzdCBiZSBhIHBhZ2Ugc2l6ZSBtdWx0aXBsZSkKKyAqLwordm9pZCBodl9iemVyb19wYWdlKEhWX1ZpcnRBZGRyIHZhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKworLyoqIFN0YXRlIG9iamVjdCBmb3IgdGhlIGh5cGVydmlzb3IgbWVzc2FnaW5nIHN1YnN5c3RlbS4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisjaWYgQ0hJUF9WQV9XSURUSCgpID4gMzIKKyAgX19odjY0IG9wYXF1ZVsyXTsgLyoqPCBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzIGluc2lkZSAqLworI2Vsc2UKKyAgX19odjMyIG9wYXF1ZVsyXTsgLyoqPCBObyB1c2VyLXNlcnZpY2VhYmxlIHBhcnRzIGluc2lkZSAqLworI2VuZGlmCit9CitIVl9Nc2dTdGF0ZTsKKworLyoqIFJlZ2lzdGVyIHRvIHJlY2VpdmUgaW5jb21pbmcgbWVzc2FnZXMuCisgKgorICogIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBjdXJyZW50IHRpbGUgc28gdGhhdCBpdCBjYW4gcmVjZWl2ZQorICogIGluY29taW5nIG1lc3NhZ2VzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjbGllbnQgY2FuIHJlY2VpdmUKKyAqICBtZXNzYWdlcyB3aXRoIHRoZSBodl9yZWNlaXZlX21lc3NhZ2Ugcm91dGluZSwgYW5kIG11c3QgYmUgY2FsbGVkIG9uCisgKiAgZWFjaCB0aWxlIHdoaWNoIHdpbGwgcmVjZWl2ZSBtZXNzYWdlcy4KKyAqCisgKiAgbXNnc3RhdGUgaXMgdGhlIHZpcnR1YWwgYWRkcmVzcyBvZiBhIHN0YXRlIG9iamVjdCBvZiB0eXBlIEhWX01zZ1N0YXRlLgorICogIE9uY2UgdGhlIHN0YXRlIGlzIHJlZ2lzdGVyZWQsIHRoZSBjbGllbnQgbXVzdCBub3QgcmVhZCBvciB3cml0ZSB0aGUKKyAqICBzdGF0ZSBvYmplY3Q7IGRvaW5nIHNvIHdpbGwgY2F1c2UgdW5kZWZpbmVkIHJlc3VsdHMuCisgKgorICogIElmIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2l0aCBtc2dzdGF0ZSBzZXQgdG8gMCwgdGhlIGNsaWVudCdzIG1lc3NhZ2UKKyAqICBzdGF0ZSB3aWxsIGJlIGZyZWVkIGFuZCBpdCB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHJlY2VpdmUgbWVzc2FnZXMuCisgKiAgTm90ZSB0aGF0IHRoaXMgbWF5IGNhdXNlIHRoZSBsb3NzIG9mIGFueSBhcy15ZXQtdW5kZWxpdmVyZWQgbWVzc2FnZXMKKyAqICBmb3IgdGhlIGNsaWVudC4KKyAqCisgKiAgSWYgYW5vdGhlciBjbGllbnQgYXR0ZW1wdHMgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gYSBjbGllbnQgd2hpY2ggaGFzCisgKiAgbm90IHlldCBjYWxsZWQgaHZfcmVnaXN0ZXJfbWVzc2FnZV9zdGF0ZSwgb3Igd2hpY2ggaGFzIGZyZWVkIGl0cworICogIG1lc3NhZ2Ugc3RhdGUsIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIGRlbGl2ZXJlZCwgYXMgaWYgdGhlIGNsaWVudAorICogIGhhZCBpbnN1ZmZpY2llbnQgYnVmZmVyaW5nLgorICoKKyAqICBUaGlzIHJvdXRpbmUgcmV0dXJucyBIVl9PSyBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBzdWNjZXNzZnVsLCBhbmQKKyAqICBIVl9FSU5WQUwgaWYgdGhlIHN1cHBsaWVkIHN0YXRlIG9iamVjdCBpcyB1bnN1aXRhYmxlLiAgTm90ZSB0aGF0IHNvbWUKKyAqICBlcnJvcnMgbWF5IG5vdCBiZSBkZXRlY3RlZCBkdXJpbmcgdGhpcyByb3V0aW5lLCBidXQgbWlnaHQgYmUgZGV0ZWN0ZWQKKyAqICBkdXJpbmcgYSBzdWJzZXF1ZW50IG1lc3NhZ2UgZGVsaXZlcnkuCisgKiBAcGFyYW0gbXNnc3RhdGUgU3RhdGUgb2JqZWN0LgorICoqLworSFZfRXJybm8gaHZfcmVnaXN0ZXJfbWVzc2FnZV9zdGF0ZShIVl9Nc2dTdGF0ZSogbXNnc3RhdGUpOworCisvKiogUG9zc2libGUgbWVzc2FnZSByZWNpcGllbnQgc3RhdGVzLiAqLwordHlwZWRlZiBlbnVtCit7CisgIEhWX1RPX0JFX1NFTlQsICAgIC8qKjwgTm90IHNlbnQgKG5vdCBhdHRlbXB0ZWQsIG9yIHJlY2lwaWVudCBub3QgcmVhZHkpICovCisgIEhWX1NFTlQsICAgICAgICAgIC8qKjwgU3VjY2Vzc2Z1bGx5IHNlbnQgKi8KKyAgSFZfQkFEX1JFQ0lQICAgICAgLyoqPCBCYWQgcmVjaXBpZW50IGNvb3JkaW5hdGVzIChwZXJtYW5lbnQgZXJyb3IpICovCit9IEhWX1JlY2lwX1N0YXRlOworCisvKiogTWVzc2FnZSByZWNpcGllbnQuICovCit0eXBlZGVmIHN0cnVjdAoreworICAvKiogWCBjb29yZGluYXRlLCByZWxhdGl2ZSB0byBzdXBlcnZpc29yJ3MgdG9wLWxlZnQgY29vcmRpbmF0ZSAqLworICB1bnNpZ25lZCBpbnQgeDoxMTsKKworICAvKiogWSBjb29yZGluYXRlLCByZWxhdGl2ZSB0byBzdXBlcnZpc29yJ3MgdG9wLWxlZnQgY29vcmRpbmF0ZSAqLworICB1bnNpZ25lZCBpbnQgeToxMTsKKworICAvKiogU3RhdHVzIG9mIHRoaXMgcmVjaXBpZW50ICovCisgIEhWX1JlY2lwX1N0YXRlIHN0YXRlOjEwOworfSBIVl9SZWNpcGllbnQ7CisKKy8qKiBTZW5kIGEgbWVzc2FnZSB0byBhIHNldCBvZiByZWNpcGllbnRzLgorICoKKyAqICBUaGlzIHJvdXRpbmUgc2VuZHMgYSBtZXNzYWdlIHRvIGEgc2V0IG9mIHJlY2lwaWVudHMuCisgKgorICogIHJlY2lwcyBpcyBhbiBhcnJheSBvZiBIVl9SZWNpcGllbnQgc3RydWN0dXJlcy4gIEVhY2ggc3BlY2lmaWVzIGEgdGlsZSwKKyAqICBhbmQgYSBtZXNzYWdlIHN0YXRlOyBpbml0aWFsbHksIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIHN0YXRlIHdpbGwKKyAqICBiZSBzZXQgdG8gSFZfVE9fQkVfU0VOVC4gIG5yZWNpcCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZWNpcGllbnRzCisgKiAgaW4gdGhlIHJlY2lwcyBhcnJheS4KKyAqCisgKiAgRm9yIGVhY2ggcmVjaXBpZW50IHdob3NlIHN0YXRlIGlzIEhWX1RPX0JFX1NFTlQsIHRoZSBoeXBlcnZpc29yIGF0dGVtcHRzCisgKiAgdG8gc2VuZCB0aGF0IHRpbGUgdGhlIHNwZWNpZmllZCBtZXNzYWdlLiAgSW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5CisgKiAgcmVjZWl2ZSB0aGUgbWVzc2FnZSwgdGhlIHJlY2VpdmVyIG11c3QgYmUgYSB2YWxpZCB0aWxlIHRvIHdoaWNoIHRoZQorICogIHNlbmRlciBoYXMgYWNjZXNzLCBtdXN0IG5vdCBiZSB0aGUgc2VuZGluZyB0aWxlIGl0c2VsZiwgYW5kIG11c3QgaGF2ZQorICogIHN1ZmZpY2llbnQgZnJlZSBidWZmZXIgc3BhY2UuICAoVGhlIGh5cGVydmlzb3IgZ3VhcmFudGVlcyB0aGF0IGVhY2gKKyAqICB0aWxlIHdoaWNoIGhhcyBjYWxsZWQgaHZfcmVnaXN0ZXJfbWVzc2FnZV9zdGF0ZSgpIHdpbGwgYmUgYWJsZSB0bworICogIGJ1ZmZlciBvbmUgbWVzc2FnZSBmcm9tIGV2ZXJ5IG90aGVyIHRpbGUgd2hpY2ggY2FuIGxlZ2FsbHkgc2VuZCB0byBpdDsKKyAqICBtb3JlIHNwYWNlIG1heSBiZSBwcm92aWRlZCBidXQgaXMgbm90IGd1YXJhbnRlZWQuKSAgSWYgYW4gaW52YWxpZCB0aWxlCisgKiAgaXMgc3BlY2lmaWVkLCB0aGUgcmVjaXBpZW50J3Mgc3RhdGUgaXMgc2V0IHRvIEhWX0JBRF9SRUNJUDsgdGhpcyBpcyBhCisgKiAgcGVybWFuZW50IGRlbGl2ZXJ5IGVycm9yLiAgSWYgdGhlIG1lc3NhZ2UgaXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZAorICogIHRvIHRoZSByZWNpcGllbnQncyBidWZmZXIsIHRoZSByZWNpcGllbnQncyBzdGF0ZSBpcyBzZXQgdG8gSFZfU0VOVC4KKyAqICBPdGhlcndpc2UsIHRoZSByZWNpcGllbnQncyBzdGF0ZSBpcyB1bmNoYW5nZWQuICBNZXNzYWdlIGRlbGl2ZXJ5IGlzCisgKiAgc3luY2hyb25vdXM7IGFsbCBhdHRlbXB0cyB0byBzZW5kIG1lc3NhZ2VzIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHRoaXMKKyAqICByb3V0aW5lIHJldHVybnMuCisgKgorICogIElmIG5vIHBlcm1hbmVudCBkZWxpdmVyeSBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCwgdGhlIHJvdXRpbmUgcmV0dXJucworICogIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgc3VjY2Vzc2Z1bGx5IHNlbnQ6IHRoYXQgaXMsIHRoZSBudW1iZXIgb2YKKyAqICByZWNpcGllbnRzIHdob3NlIHN0YXRlcyBjaGFuZ2VkIGZyb20gSFZfVE9fQkVfU0VOVCB0byBIVl9TRU5UIGR1cmluZworICogIHRoaXMgb3BlcmF0aW9uLiAgSWYgYW55IHBlcm1hbmVudCBkZWxpdmVyeSBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZCwKKyAqICB0aGUgcm91dGluZSByZXR1cm5zIEhWX0VSRUNJUC4gIEluIHRoZSBldmVudCBvZiBwZXJtYW5lbnQgZGVsaXZlcnkKKyAqICBlcnJvcnMsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IGRlbGl2ZXJ5IHdhcyBub3QgYXR0ZW1wdGVkIHRvIGFsbAorICogIHJlY2lwaWVudHM7IGlmIGFueSBtZXNzYWdlcyB3ZXJlIHN1Y2Nlc2Z1bGx5IGRlbGl2ZXJlZCwgaG93ZXZlciwKKyAqICByZWNpcGllbnRzJyBzdGF0ZSB2YWx1ZXMgd2lsbCBiZSB1cGRhdGVkIGFwcHJvcHJpYXRlbHkuCisgKgorICogIEl0IGlzIGV4cGxpY2l0bHkgbGVnYWwgdG8gc3BlY2lmeSBhIHJlY2lwaWVudCBzdHJ1Y3R1cmUgd2hvc2Ugc3RhdGUKKyAqICBpcyBub3QgSFZfVE9fQkVfU0VOVDsgc3VjaCBhIHJlY2lwaWVudCBpcyBpZ25vcmVkLiAgT25lIHN1Z2dlc3RlZCB3YXkKKyAqICBvZiB1c2luZyBodl9zZW5kX21lc3NhZ2UgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gbXVsdGlwbGUgdGlsZXMgaXMgdG8gc2V0CisgKiAgdXAgYSBsaXN0IG9mIHJlY2lwaWVudHMsIGFuZCB0aGVuIGNhbGwgdGhlIHJvdXRpbmUgcmVwZWF0ZWRseSB3aXRoIHRoZQorICogIHNhbWUgbGlzdCwgZWFjaCB0aW1lIGFjY3VtdWxhdGluZyB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzIHN1Y2Nlc3NmdWxseQorICogIHNlbnQsIHVudGlsIGFsbCBtZXNzYWdlcyBhcmUgc2VudCwgYSBwZXJtYW5lbnQgZXJyb3IgaXMgZW5jb3VudGVyZWQsCisgKiAgb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGF0dGVtcHRzIGhhdmUgYmVlbiBtYWRlLiAgV2hlbiB1c2VkIGluIHRoaXMKKyAqICB3YXksIHRoZSByb3V0aW5lIHdpbGwgZGVsaXZlciBlYWNoIG1lc3NhZ2Ugbm8gbW9yZSB0aGFuIG9uY2UgdG8gZWFjaAorICogIHJlY2lwaWVudC4KKyAqCisgKiAgTm90ZSB0aGF0IGEgbWVzc2FnZSBiZWluZyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkIHRvIHRoZSByZWNpcGllbnQncworICogIGJ1ZmZlciBzcGFjZSBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCBpdCBpcyByZWNlaXZlZCBieSB0aGUgcmVjaXBpZW50LAorICogIGVpdGhlciBpbW1lZGlhdGVseSBvciBhdCBhbnkgdGltZSBpbiB0aGUgZnV0dXJlOyB0aGUgcmVjaXBpZW50IG1pZ2h0CisgKiAgbmV2ZXIgY2FsbCBodl9yZWNlaXZlX21lc3NhZ2UsIG9yIGNvdWxkIHJlZ2lzdGVyIGEgZGlmZmVyZW50IHN0YXRlCisgKiAgYnVmZmVyLCBsb3NpbmcgdGhlIG1lc3NhZ2UuCisgKgorICogIFNwZWNpZml5aW5nIHRoZSBzYW1lIHJlY2lwaWVudCBtb3JlIHRoYW4gb25jZSBpbiB0aGUgcmVjaXBpZW50IGxpc3QKKyAqICBpcyBhbiBlcnJvciwgd2hpY2ggd2lsbCBub3QgcmVzdWx0IGluIGFuIGVycm9yIHJldHVybiBidXQgd2hpY2ggbWF5CisgKiAgb3IgbWF5IG5vdCByZXN1bHQgaW4gbW9yZSB0aGFuIG9uZSBtZXNzYWdlIGJlaW5nIGRlbGl2ZXJlZCB0byB0aGUKKyAqICByZWNpcGllbnQgdGlsZS4KKyAqCisgKiAgYnVmIGFuZCBidWZsZW4gc3BlY2lmeSB0aGUgbWVzc2FnZSB0byBiZSBzZW50LiAgYnVmIGlzIGEgdmlydHVhbCBhZGRyZXNzCisgKiAgd2hpY2ggbXVzdCBiZSBjdXJyZW50bHkgbWFwcGVkIGluIHRoZSBjbGllbnQncyBwYWdlIHRhYmxlOyBpZiBub3QsIHRoZQorICogIHJvdXRpbmUgcmV0dXJucyBIVl9FRkFVTFQuICBidWZsZW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcworICogIHRoYW4gb3IgZXF1YWwgdG8gSFZfTUFYX01FU1NBR0VfU0laRSwgYW5kIG5yZWNpcCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUKKyAqICBudW1iZXIgb2YgdGlsZXMgdG8gd2hpY2ggdGhlIHNlbmRlciBoYXMgYWNjZXNzOyBpZiBub3QsIHRoZSByb3V0aW5lCisgKiAgcmV0dXJucyBIVl9FSU5WQUwuCisgKiBAcGFyYW0gcmVjaXBzIExpc3Qgb2YgcmVjaXBpZW50cy4KKyAqIEBwYXJhbSBucmVjaXAgTnVtYmVyIG9mIHJlY2lwaWVudHMuCisgKiBAcGFyYW0gYnVmIEFkZHJlc3Mgb2YgbWVzc2FnZSBkYXRhLgorICogQHBhcmFtIGJ1ZmxlbiBMZW5ndGggb2YgbWVzc2FnZSBkYXRhLgorICoqLworaW50IGh2X3NlbmRfbWVzc2FnZShIVl9SZWNpcGllbnQgKnJlY2lwcywgaW50IG5yZWNpcCwKKyAgICAgICAgICAgICAgICAgICAgSFZfVmlydEFkZHIgYnVmLCBpbnQgYnVmbGVuKTsKKworLyoqIE1heGltdW0gaHlwZXJ2aXNvciBtZXNzYWdlIHNpemUsIGluIGJ5dGVzICovCisjZGVmaW5lIEhWX01BWF9NRVNTQUdFX1NJWkUgMjgKKworCisvKiogUmV0dXJuIHZhbHVlIGZyb20gaHZfcmVjZWl2ZV9tZXNzYWdlKCkgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBtc2dsZW47ICAgICAvKio8IE1lc3NhZ2UgbGVuZ3RoIGluIGJ5dGVzLCBvciBhbiBlcnJvciBjb2RlICovCisgIF9faHYzMiBzb3VyY2U7ICAvKio8IENvZGUgaWRlbnRpZnlpbmcgbWVzc2FnZSBzZW5kZXIgKEhWX01TR194eHgpICovCit9IEhWX1Jjdk1zZ0luZm87CisKKyNkZWZpbmUgSFZfTVNHX1RJTEUgMHgwICAgICAgICAgLyoqPCBNZXNzYWdlIHNvdXJjZSBpcyBhbm90aGVyIHRpbGUgKi8KKyNkZWZpbmUgSFZfTVNHX0lOVFIgMHgxICAgICAgICAgLyoqPCBNZXNzYWdlIHNvdXJjZSBpcyBhIGRyaXZlciBpbnRlcnJ1cHQgKi8KKworLyoqIFJlY2VpdmUgYSBtZXNzYWdlLgorICoKKyAqIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgYSBtZXNzYWdlIGZyb20gdGhlIGNsaWVudCdzIGluY29taW5nIG1lc3NhZ2UKKyAqIGJ1ZmZlci4KKyAqCisgKiBNdWx0aXBsZSBtZXNzYWdlcyBzZW50IGZyb20gYSBwYXJ0aWN1bGFyIHNlbmRpbmcgdGlsZSB0byBhIHBhcnRpY3VsYXIKKyAqIHJlY2VpdmluZyB0aWxlIGFyZSByZWNlaXZlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgc2VudDsgaG93ZXZlciwKKyAqIG5vIG9yZGVyaW5nIGlzIGd1YXJhbnRlZWQgYmV0d2VlbiBtZXNzYWdlcyBzZW50IGJ5IGRpZmZlcmVudCB0aWxlcy4KKyAqCisgKiBXaGVuZXZlciB0aGUgYSBjbGllbnQncyBtZXNzYWdlIGJ1ZmZlciBpcyBlbXB0eSwgdGhlIGZpcnN0IG1lc3NhZ2UKKyAqIHN1YnNlcXVlbnRseSByZWNlaXZlZCB3aWxsIGNhdXNlIHRoZSBjbGllbnQncyBNRVNTQUdFX1JDVl9EV05DTAorICogaW50ZXJydXB0IHZlY3RvciB0byBiZSBpbnZva2VkIHRocm91Z2ggdGhlIGludGVycnVwdCBkb3duY2FsbCBtZWNoYW5pc20KKyAqIChzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBodl9kb3duY2FsbF9kaXNwYXRjaCgpIHJvdXRpbmUgZm9yIGRldGFpbHMKKyAqIG9uIGRvd25jYWxscykuCisgKgorICogQW5vdGhlciBtZXNzYWdlLWF2YWlsYWJsZSBkb3duY2FsbCB3aWxsIG5vdCBvY2N1ciB1bnRpbCBhIGNhbGwgdG8KKyAqIHRoaXMgcm91dGluZSBpcyBtYWRlIHdoZW4gdGhlIG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5LCBhbmQgYSBtZXNzYWdlCisgKiBzdWJzZXF1ZW50bHkgYXJyaXZlcy4gIE5vdGUgdGhhdCBzdWNoIGEgZG93bmNhbGwgY291bGQgb2NjdXIgd2hpbGUKKyAqIHRoaXMgcm91dGluZSBpcyBleGVjdXRpbmcuICBJZiB0aGUgY2FsbGluZyBjb2RlIGRvZXMgbm90IHdpc2ggdGhpcworICogdG8gaGFwcGVuLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgcm91dGluZSBiZSBjYWxsZWQgd2l0aCB0aGUKKyAqIElOVENUUkxfMSBpbnRlcnJ1cHQgbWFza2VkLCBvciBpbnNpZGUgYW4gaW50ZXJydXB0IGNyaXRpY2FsIHNlY3Rpb24uCisgKgorICogbXNnc3RhdGUgaXMgdGhlIHZhbHVlIHByZXZpb3VzbHkgcGFzc2VkIHRvIGh2X3JlZ2lzdGVyX21lc3NhZ2Vfc3RhdGUoKS4KKyAqIGJ1ZiBpcyB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaW50byB3aGljaCB0aGUgbWVzc2FnZSB3aWxsCisgKiBiZSB3cml0dGVuOyBidWZsZW4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIGFuIEhWX1Jjdk1zZ0luZm8gc3RydWN0dXJlLiAgVGhlIG1zZ2xlbiBtZW1iZXIKKyAqIG9mIHRoYXQgc3RydWN0dXJlIGlzIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQsIHplcm8gaWYgbm8KKyAqIG1lc3NhZ2UgaXMgYXZhaWxhYmxlLCBvciBIVl9FMkJJRyBpZiB0aGUgbWVzc2FnZSBpcyB0b28gbGFyZ2UgZm9yIHRoZQorICogc3BlY2lmaWVkIGJ1ZmZlci4gIElmIHRoZSBtZXNzYWdlIGlzIHRvbyBsYXJnZSwgaXQgaXMgbm90IGNvbnN1bWVkLAorICogYW5kIG1heSBiZSByZXRyaWV2ZWQgYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8gdGhpcyByb3V0aW5lIHNwZWNpZnlpbmcKKyAqIGEgc3VmZmljaWVudGx5IGxhcmdlIGJ1ZmZlci4gIEEgYnVmZmVyIHdoaWNoIGlzIEhWX01BWF9NRVNTQUdFX1NJWkUKKyAqIGJ5dGVzIGxvbmcgaXMgZ3VhcmFudGVlZCB0byBiZSBhYmxlIHRvIHJlY2VpdmUgYW55IHBvc3NpYmxlIG1lc3NhZ2UuCisgKgorICogVGhlIHNvdXJjZSBtZW1iZXIgb2YgdGhlIEhWX1Jjdk1zZ0luZm8gc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgc2VuZGVyCisgKiBvZiB0aGUgbWVzc2FnZS4gIEZvciBtZXNzYWdlcyBzZW50IGJ5IGFub3RoZXIgY2xpZW50IHRpbGUgdmlhIGFuCisgKiBodl9zZW5kX21lc3NhZ2UoKSBjYWxsLCB0aGlzIHZhbHVlIGlzIEhWX01TR19USUxFOyBmb3IgbWVzc2FnZXMgc2VudAorICogYXMgYSByZXN1bHQgb2YgYSBkZXZpY2UgaW50ZXJydXB0LCB0aGlzIHZhbHVlIGlzIEhWX01TR19JTlRSLgorICovCisKK0hWX1Jjdk1zZ0luZm8gaHZfcmVjZWl2ZV9tZXNzYWdlKEhWX01zZ1N0YXRlIG1zZ3N0YXRlLCBIVl9WaXJ0QWRkciBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmbGVuKTsKKworCisvKiogU3RhcnQgcmVtYWluaW5nIHRpbGVzIG93bmVkIGJ5IHRoaXMgc3VwZXJ2aXNvci4gIEluaXRpYWxseSwgb25seSBvbmUgdGlsZQorICogIGV4ZWN1dGVzIHRoZSBjbGllbnQgcHJvZ3JhbTsgYWZ0ZXIgaXQgY2FsbHMgdGhpcyBzZXJ2aWNlLCB0aGUgb3RoZXIgdGlsZXMKKyAqICBhcmUgc3RhcnRlZC4gIFRoaXMgYWxsb3dzIHRoZSBpbml0aWFsIHRpbGUgdG8gZG8gb25lLXRpbWUgY29uZmlndXJhdGlvbgorICogIG9mIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgd2l0aG91dCBoYXZpbmcgdG8gbG9jayB0aGVtIGFnYWluc3Qgc2ltdWx0YW5lb3VzCisgKiAgYWNjZXNzLgorICovCit2b2lkIGh2X3N0YXJ0X2FsbF90aWxlcyh2b2lkKTsKKworCisvKiogT3BlbiBhIGh5cGVydmlzb3IgZGV2aWNlLgorICoKKyAqICBUaGlzIHNlcnZpY2UgaW5pdGlhbGl6ZXMgYW4gSS9PIGRldmljZSBhbmQgaXRzIGh5cGVydmlzb3IgZHJpdmVyIHNvZnR3YXJlLAorICogIGFuZCBtYWtlcyBpdCBhdmFpbGFibGUgZm9yIHVzZS4gIFRoZSBvcGVuIG9wZXJhdGlvbiBpcyBwZXItZGV2aWNlIHBlci1jaGlwOworICogIG9uY2UgaXQgaGFzIGJlZW4gcGVyZm9ybWVkLCB0aGUgZGV2aWNlIGhhbmRsZSByZXR1cm5lZCBtYXkgYmUgdXNlZCBpbiBvdGhlcgorICogIGRldmljZSBzZXJ2aWNlcyBjYWxscyBtYWRlIGJ5IGFueSB0aWxlLgorICoKKyAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGRldmljZS4gIEEgYmFzZSBkZXZpY2UgbmFtZSBpcyBqdXN0IGEgdGV4dCBzdHJpbmcKKyAqICAgICAgICAoc2F5LCAicGNpZSIpLiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZiBhIGRldmljZSwgdGhlCisgKiAgICAgICAgYmFzZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGEgc2xhc2ggYW5kIGEgZGV2aWNlIG51bWJlciAoc2F5LCAicGNpZS8wIikuCisgKiAgICAgICAgU29tZSBkZXZpY2VzIG1heSBzdXBwb3J0IGZ1cnRoZXIgc3RydWN0dXJlIGJlbmVhdGggdGhvc2UgY29tcG9uZW50czsKKyAqICAgICAgICBtb3N0IG5vdGFibHksIGRldmljZXMgd2hpY2ggcmVxdWlyZSBjb250cm9sIG9wZXJhdGlvbnMgZG8gc28gYnkKKyAqICAgICAgICBzdXBwb3J0aW5nIHJlYWRzIGFuZC9vciB3cml0ZXMgdG8gYSBjb250cm9sIGRldmljZSB3aG9zZSBuYW1lCisgKiAgICAgICAgaW5jbHVkZXMgYSB0cmFpbGluZyAiL2N0bCIgKHNheSwgInBjaWUvMC9jdGwiKS4KKyAqIEBwYXJhbSBmbGFncyBGbGFncyAoSFZfREVWX3h4eCkuCisgKiBAcmV0dXJuIEEgcG9zaXRpdmUgaW50ZWdlciBkZXZpY2UgaGFuZGxlLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKi8KK2ludCBodl9kZXZfb3BlbihIVl9WaXJ0QWRkciBuYW1lLCBfX2h2MzIgZmxhZ3MpOworCisKKy8qKiBDbG9zZSBhIGh5cGVydmlzb3IgZGV2aWNlLgorICoKKyAqICBUaGlzIHNlcnZpY2UgdW5pbml0aWFsaXplcyBhbiBJL08gZGV2aWNlIGFuZCBpdHMgaHlwZXJ2aXNvciBkcml2ZXIKKyAqICBzb2Z0d2FyZSwgYW5kIG1ha2VzIGl0IHVuYXZhaWxhYmxlIGZvciB1c2UuICBUaGUgY2xvc2Ugb3BlcmF0aW9uIGlzCisgKiAgcGVyLWRldmljZSBwZXItY2hpcDsgb25jZSBpdCBoYXMgYmVlbiBwZXJmb3JtZWQsIHRoZSBkZXZpY2UgaXMgbm8gbG9uZ2VyCisgKiAgYXZhaWxhYmxlLiAgTm9ybWFsbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBldmVyIGNhbGwgdGhlIGNsb3NlIHNlcnZpY2UuCisgKgorICogQHBhcmFtIGRldmhkbCBEZXZpY2UgaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gYmUgY2xvc2VkLgorICogQHJldHVybiBaZXJvIGlmIHRoZSBjbG9zZSBpcyBzdWNjZXNzZnVsLCBvdGhlcndpc2UsIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGh2X2Rldl9jbG9zZShpbnQgZGV2aGRsKTsKKworCisvKiogUmVhZCBkYXRhIGZyb20gYSBoeXBlcnZpc29yIGRldmljZSBzeW5jaHJvbm91c2x5LgorICoKKyAqICBUaGlzIHNlcnZpY2UgdHJhbnNmZXJzIGRhdGEgZnJvbSBhIGh5cGVydmlzb3IgZGV2aWNlIHRvIGEgbWVtb3J5IGJ1ZmZlci4KKyAqICBXaGVuIHRoZSBzZXJ2aWNlIHJldHVybnMsIHRoZSBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSB0aGUgbWVtb3J5IGJ1ZmZlciwKKyAqICBhbmQgdGhlIGJ1ZmZlciB3aWxsIG5vdCBiZSBmdXJ0aGVyIG1vZGlmaWVkIGJ5IHRoZSBkcml2ZXIuCisgKgorICogIE5vIG9yZGVyaW5nIGlzIGd1YXJhbnRlZWQgYmV0d2VlbiByZXF1ZXN0cyBpc3N1ZWQgZnJvbSBkaWZmZXJlbnQgdGlsZXMuCisgKgorICogIERldmljZXMgbWF5IGNob29zZSB0byBzdXBwb3J0IGJvdGggdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVhZAorICogIG9wZXJhdGlvbnMsIG9ubHkgb25lIG9mIHRoZW0sIG9yIG5laXRoZXIgb2YgdGhlbS4KKyAqCisgKiBAcGFyYW0gZGV2aGRsIERldmljZSBoYW5kbGUgb2YgdGhlIGRldmljZSB0byBiZSByZWFkIGZyb20uCisgKiBAcGFyYW0gZmxhZ3MgRmxhZ3MgKEhWX0RFVl94eHgpLgorICogQHBhcmFtIHZhIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IGRhdGEgYnVmZmVyLiAgVGhpcyBidWZmZXIgbXVzdAorICogICAgICAgIGJlIG1hcHBlZCBpbiB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBwYWdlIHRhYmxlOyBpZiBub3QsIEhWX0VGQVVMVAorICogICAgICAgIG1heSBiZSByZXR1cm5lZC4KKyAqIEBwYXJhbSBsZW4gTnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkLgorICogQHBhcmFtIG9mZnNldCBEcml2ZXItZGVwZW5kZW50IG9mZnNldC4gIEZvciBhIHJhbmRvbS1hY2Nlc3MgZGV2aWNlLCB0aGlzIGlzCisgKiAgICAgICAgb2Z0ZW4gYSBieXRlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZTsgaW4gb3RoZXIgY2FzZXMsCisgKiAgICAgICAgbGlrZSBvbiBhIGNvbnRyb2wgZGV2aWNlLCBpdCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBtZWFuaW5nLgorICogQHJldHVybiBBIG5vbi1uZWdhdGl2ZSB2YWx1ZSBpZiB0aGUgcmVhZCB3YXMgYXQgbGVhc3QgcGFydGlhbGx5IHN1Y2Nlc3NmdWw7CisgKiAgICAgICAgIG90aGVyd2lzZSwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLiAgVGhlIHByZWNpc2UgaW50ZXJwcmV0YXRpb24gb2YKKyAqICAgICAgICAgdGhlIHJldHVybiB2YWx1ZSBpcyBkcml2ZXItZGVwZW5kZW50LCBidXQgbWFueSBkcml2ZXJzIHdpbGwgcmV0dXJuCisgKiAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLgorICovCitpbnQgaHZfZGV2X3ByZWFkKGludCBkZXZoZGwsIF9faHYzMiBmbGFncywgSFZfVmlydEFkZHIgdmEsIF9faHYzMiBsZW4sCisgICAgICAgICAgICAgICAgIF9faHY2NCBvZmZzZXQpOworCisjZGVmaW5lIEhWX0RFVl9OQl9FTVBUWSAgICAgMHgxICAgLyoqPCBEb24ndCBibG9jayB3aGVuIG5vIGJ5dGVzIG9mIGRhdGEgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0cmFuc2ZlcnJlZC4gKi8KKyNkZWZpbmUgSFZfREVWX05CX1BBUlRJQUwgICAweDIgICAvKio8IERvbid0IGJsb2NrIHdoZW4gc29tZSBieXRlcywgYnV0IG5vdCBhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSByZXF1ZXN0ZWQgYnl0ZXMsIGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQuICovCisjZGVmaW5lIEhWX0RFVl9OT0NBQ0hFICAgICAgMHg0ICAgLyoqPCBUaGUgY2FsbGVyIHdhcnJhbnRzIHRoYXQgbm9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlIGxpbmVzIHdoaWNoIG1pZ2h0IGNvbnRhaW4gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgcmVxdWVzdGVkIGJ1ZmZlciBhcmUgdmFsaWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VmdWwgd2l0aCBhc3luY2hyb25vdXMgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seS4gKi8KKworI2RlZmluZSBIVl9ERVZfQUxMRkxBR1MgICAgIChIVl9ERVZfTkJfRU1QVFkgfCBIVl9ERVZfTkJfUEFSVElBTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZfREVWX05PQ0FDSEUpICAgLyoqPCBBbGwgSFZfREVWX3h4eCBmbGFncyAqLworCisvKiogV3JpdGUgZGF0YSB0byBhIGh5cGVydmlzb3IgZGV2aWNlIHN5bmNocm9ub3VzbHkuCisgKgorICogIFRoaXMgc2VydmljZSB0cmFuc2ZlcnMgZGF0YSBmcm9tIGEgbWVtb3J5IGJ1ZmZlciB0byBhIGh5cGVydmlzb3IgZGV2aWNlLgorICogIFdoZW4gdGhlIHNlcnZpY2UgcmV0dXJucywgdGhlIGRhdGEgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBtZW1vcnkgYnVmZmVyLAorICogIGFuZCB0aGUgYnVmZmVyIG1heSBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY2xpZW50OyB0aGUgZGF0YSBtYXkgbm90CisgKiAgbmVjZXNzYXJpbHkgaGF2ZSBiZWVuIGNvbnZleWVkIHRvIHRoZSBhY3R1YWwgaGFyZHdhcmUgSS9PIGludGVyZmFjZS4KKyAqCisgKiAgTm8gb3JkZXJpbmcgaXMgZ3VhcmFudGVlZCBiZXR3ZWVuIHJlcXVlc3RzIGlzc3VlZCBmcm9tIGRpZmZlcmVudCB0aWxlcy4KKyAqCisgKiAgRGV2aWNlcyBtYXkgY2hvb3NlIHRvIHN1cHBvcnQgYm90aCB0aGUgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyB3cml0ZQorICogIG9wZXJhdGlvbnMsIG9ubHkgb25lIG9mIHRoZW0sIG9yIG5laXRoZXIgb2YgdGhlbS4KKyAqCisgKiBAcGFyYW0gZGV2aGRsIERldmljZSBoYW5kbGUgb2YgdGhlIGRldmljZSB0byBiZSB3cml0dGVuIHRvLgorICogQHBhcmFtIGZsYWdzIEZsYWdzIChIVl9ERVZfeHh4KS4KKyAqIEBwYXJhbSB2YSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHNvdXJjZSBkYXRhIGJ1ZmZlci4gIFRoaXMgYnVmZmVyIG11c3QKKyAqICAgICAgICBiZSBtYXBwZWQgaW4gdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgcGFnZSB0YWJsZTsgaWYgbm90LCBIVl9FRkFVTFQKKyAqICAgICAgICBtYXkgYmUgcmV0dXJuZWQuCisgKiBAcGFyYW0gbGVuIE51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZC4KKyAqIEBwYXJhbSBvZmZzZXQgRHJpdmVyLWRlcGVuZGVudCBvZmZzZXQuICBGb3IgYSByYW5kb20tYWNjZXNzIGRldmljZSwgdGhpcyBpcworICogICAgICAgIG9mdGVuIGEgYnl0ZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2U7IGluIG90aGVyIGNhc2VzLAorICogICAgICAgIGxpa2Ugb24gYSBjb250cm9sIGRldmljZSwgaXQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgbWVhbmluZy4KKyAqIEByZXR1cm4gQSBub24tbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHdyaXRlIHdhcyBhdCBsZWFzdCBwYXJ0aWFsbHkgc3VjY2Vzc2Z1bDsKKyAqICAgICAgICAgb3RoZXJ3aXNlLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuICBUaGUgcHJlY2lzZSBpbnRlcnByZXRhdGlvbiBvZgorICogICAgICAgICB0aGUgcmV0dXJuIHZhbHVlIGlzIGRyaXZlci1kZXBlbmRlbnQsIGJ1dCBtYW55IGRyaXZlcnMgd2lsbCByZXR1cm4KKyAqICAgICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQuCisgKi8KK2ludCBodl9kZXZfcHdyaXRlKGludCBkZXZoZGwsIF9faHYzMiBmbGFncywgSFZfVmlydEFkZHIgdmEsIF9faHYzMiBsZW4sCisgICAgICAgICAgICAgICAgICBfX2h2NjQgb2Zmc2V0KTsKKworCisvKiogSW50ZXJydXB0IGFyZ3VtZW50cywgdXNlZCBpbiB0aGUgYXN5bmNocm9ub3VzIEkvTyBpbnRlcmZhY2VzLiAqLworI2lmIENISVBfVkFfV0lEVEgoKSA+IDMyCit0eXBlZGVmIF9faHY2NCBIVl9JbnRBcmc7CisjZWxzZQordHlwZWRlZiBfX2h2MzIgSFZfSW50QXJnOworI2VuZGlmCisKKy8qKiBJbnRlcnJ1cHQgbWVzc2FnZXMgYXJlIGRlbGl2ZXJlZCB2aWEgdGhlIG1lY2hhbmlzbSBhcyBub3JtYWwgbWVzc2FnZXMsCisgKiAgYnV0IGhhdmUgYSBtZXNzYWdlIHNvdXJjZSBvZiBIVl9ERVZfSU5UUi4gIFRoZSBtZXNzYWdlIGlzIGZvcm1hdHRlZAorICogIGFzIGFuIEhWX0ludHJNc2cgc3RydWN0dXJlLgorICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIEhWX0ludEFyZyBpbnRhcmc7ICAvKio8IEludGVycnVwdCBhcmd1bWVudCwgcGFzc2VkIHRvIHRoZSBwb2xsL3ByZWFkYS9wd3JpdGVhCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzICovCisgIEhWX0ludEFyZyBpbnRkYXRhOyAvKio8IEludGVycnVwdC1zcGVjaWZpYyBpbnRlcnJ1cHQgZGF0YSAqLworfSBIVl9JbnRyTXNnOworCisvKiogUmVxdWVzdCBhbiBpbnRlcnJ1cHQgbWVzc2FnZSB3aGVuIGEgZGV2aWNlIGNvbmRpdGlvbiBpcyBzYXRpc2ZpZWQuCisgKgorICogIFRoaXMgc2VydmljZSByZXF1ZXN0cyB0aGF0IGFuIGludGVycnVwdCBtZXNzYWdlIGJlIGRlbGl2ZXJlZCB0byB0aGUKKyAqICByZXF1ZXN0aW5nIHRpbGUgd2hlbiBhIGRldmljZSBiZWNvbWVzIHJlYWRhYmxlIG9yIHdyaXRhYmxlLCBvciB3aGVuIGFueQorICogIGRhdGEgcXVldWVkIHRvIHRoZSBkZXZpY2UgdmlhIHByZXZpb3VzIHdyaXRlIG9wZXJhdGlvbnMgZnJvbSB0aGlzIHRpbGUKKyAqICBoYXMgYmVlbiBhY3R1YWxseSBzZW50IG91dCBvbiB0aGUgaGFyZHdhcmUgSS9PIGludGVyZmFjZS4gIERldmljZXMgbWF5CisgKiAgY2hvb3NlIHRvIHN1cHBvcnQgYW55LCBhbGwsIG9yIG5vbmUgb2YgdGhlIGF2YWlsYWJsZSBjb25kaXRpb25zLgorICoKKyAqICBJZiBtdWx0aXBsZSBjb25kaXRpb25zIGFyZSBzcGVjaWZpZWQsIG9ubHkgb25lIG1lc3NhZ2Ugd2lsbCBiZQorICogIGRlbGl2ZXJlZC4gIElmIHRoZSBldmVudCBtYXNrIGRlbGl2ZXJlZCB0byB0aGF0IGludGVycnVwdCBoYW5kbGVyCisgKiAgaW5kaWNhdGVzIHRoYXQgc29tZSBvZiB0aGUgY29uZGl0aW9ucyBoYXZlIG5vdCB5ZXQgb2NjdXJyZWQsIHRoZQorICogIGNsaWVudCBtdXN0IGlzc3VlIGFub3RoZXIgcG9sbCgpIGNhbGwgaWYgaXQgd2lzaGVzIHRvIHdhaXQgZm9yIHRob3NlCisgKiAgY29uZGl0aW9ucy4KKyAqCisgKiAgT25seSBvbmUgcG9sbCBtYXkgYmUgb3V0c3RhbmRpbmcgcGVyIGRldmljZSBoYW5kbGUgcGVyIHRpbGUuICBJZiBtb3JlIHRoYW4KKyAqICBvbmUgdGlsZSBpcyBwb2xsaW5nIG9uIHRoZSBzYW1lIGRldmljZSBhbmQgY29uZGl0aW9uLCB0aGV5IHdpbGwgYWxsIGJlCisgKiAgbm90aWZpZWQgd2hlbiBpdCBoYXBwZW5zLiAgQmVjYXVzZSBvZiB0aGlzLCBjbGllbnRzIG1heSBub3QgYXNzdW1lIHRoYXQKKyAqICB0aGUgY29uZGl0aW9uIHNpZ25hbGVkIGlzIG5lY2Vzc2FyaWx5IHN0aWxsIHRydWUgd2hlbiB0aGV5IHJlcXVlc3QgYQorICogIHN1YnNlcXVlbnQgc2VydmljZTsgZm9yIGluc3RhbmNlLCB0aGUgcmVhZGFibGUgZGF0YSB3aGljaCBjYXVzZWQgdGhlCisgKiAgcG9sbCBjYWxsIHRvIGludGVycnVwdCBtYXkgaGF2ZSBiZWVuIHJlYWQgYnkgYW5vdGhlciB0aWxlIGluIHRoZSBpbnRlcmltLgorICoKKyAqICBUaGUgbm90aWZpY2F0aW9uIGludGVycnVwdCBtZXNzYWdlIGNvdWxkIGNvbWUgZGlyZWN0bHksIG9yIHZpYSB0aGUKKyAqICBkb3duY2FsbCAoaW50Y3RybDEpIG1ldGhvZCwgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIHRpbGUgaXMgZG9pbmcKKyAqICB3aGVuIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUKKyAqICByZXF1ZXN0ZWQgaW50ZXJydXB0IHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGlzIHNlcnZpY2UgaXMgY2FsbGVkIGJ1dAorICogIGJlZm9yZSBpdCByZXR1cm5zLgorICoKKyAqIEBwYXJhbSBkZXZoZGwgRGV2aWNlIGhhbmRsZSBvZiB0aGUgZGV2aWNlIHRvIGJlIHBvbGxlZC4KKyAqIEBwYXJhbSBldmVudHMgRmxhZ3MgZGVub3RpbmcgdGhlIGV2ZW50cyB3aGljaCB3aWxsIGNhdXNlIHRoZSBpbnRlcnJ1cHQgdG8KKyAqICAgICAgICBiZSBkZWxpdmVyZWQgKEhWX0RFVlBPTExfeHh4KS4KKyAqIEBwYXJhbSBpbnRhcmcgVmFsdWUgd2hpY2ggd2lsbCBiZSBkZWxpdmVyZWQgYXMgdGhlIGludGFyZyBtZW1iZXIgb2YgdGhlCisgKiAgICAgICAgZXZlbnR1YWwgaW50ZXJydXB0IG1lc3NhZ2U7IHRoZSBpbnRkYXRhIG1lbWJlciB3aWxsIGJlIHNldCB0byBhCisgKiAgICAgICAgbWFzayBvZiBIVl9ERVZQT0xMX3h4eCB2YWx1ZXMgaW5kaWNhdGluZyB3aGljaCBjb25kaXRpb25zIGhhdmUgYmVlbgorICogICAgICAgIHNhdGlzaWZlZC4KKyAqIEByZXR1cm4gWmVybyBpZiB0aGUgaW50ZXJydXB0IHdhcyBzdWNjZXNzZnVsbHkgc2NoZWR1bGVkOyBvdGhlcndpc2UsIGEKKyAqICAgICAgICAgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGh2X2Rldl9wb2xsKGludCBkZXZoZGwsIF9faHYzMiBldmVudHMsIEhWX0ludEFyZyBpbnRhcmcpOworCisjZGVmaW5lIEhWX0RFVlBPTExfUkVBRCAgICAgMHgxICAgLyoqPCBUZXN0IGRldmljZSBmb3IgcmVhZGFiaWxpdHkgKi8KKyNkZWZpbmUgSFZfREVWUE9MTF9XUklURSAgICAweDIgICAvKio8IFRlc3QgZGV2aWNlIGZvciB3cml0YWJpbGl0eSAqLworI2RlZmluZSBIVl9ERVZQT0xMX0ZMVVNIICAgIDB4NCAgIC8qKjwgVGVzdCBkZXZpY2UgZm9yIG91dHB1dCBkcmFpbmVkICovCisKKworLyoqIENhbmNlbCBhIHJlcXVlc3QgZm9yIGFuIGludGVycnVwdCB3aGVuIGEgZGV2aWNlIGV2ZW50IG9jY3Vycy4KKyAqCisgKiAgVGhpcyBzZXJ2aWNlIHJlcXVlc3RzIHRoYXQgbm8gaW50ZXJydXB0IGJlIGRlbGl2ZXJlZCB3aGVuIHRoZSBldmVudHMKKyAqICBub3RlZCBpbiB0aGUgbGFzdC1pc3N1ZWQgcG9sbCgpIGNhbGwgaGFwcGVuLiAgT25jZSB0aGlzIHNlcnZpY2UgcmV0dXJucywKKyAqICB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIGNhbmNlbGVkOyBob3dldmVyLCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGludGVycnVwdAorICogIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGlzIHNlcnZpY2UgaXMgY2FsbGVkIGJ1dCBiZWZvcmUgaXQgcmV0dXJucy4KKyAqCisgKiBAcGFyYW0gZGV2aGRsIERldmljZSBoYW5kbGUgb2YgdGhlIGRldmljZSBvbiB3aGljaCB0byBjYW5jZWwgcG9sbGluZy4KKyAqIEByZXR1cm4gWmVybyBpZiB0aGUgcG9sbCB3YXMgc3VjY2Vzc2Z1bGx5IGNhbmNlbGVkOyBvdGhlcndpc2UsIGEgbmVnYXRpdmUKKyAqICAgICAgICAgZXJyb3IgY29kZS4KKyAqLworaW50IGh2X2Rldl9wb2xsX2NhbmNlbChpbnQgZGV2aGRsKTsKKworCisvKiogU2NhdHRlci1nYXRoZXIgbGlzdCBmb3IgcHJlYWRhL3B3cml0ZWEgY2FsbHMuICovCit0eXBlZGVmIHN0cnVjdAorI2lmIENISVBfVkFfV0lEVEgoKSA8PSAzMgorX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCg0KSkpCisjZW5kaWYKK3sKKyAgSFZfUGh5c0FkZHIgcGE7ICAvKio8IENsaWVudCBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgc2VnbWVudC4gKi8KKyAgSFZfUFRFIHB0ZTsgICAgICAvKio8IFBhZ2UgdGFibGUgZW50cnkgZGVzY3JpYmluZyB0aGUgY2FjaGluZyBhbmQgbG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgYnVmZmVyIHNlZ21lbnQuICBTb21lCisgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJzIGlnbm9yZSB0aGlzIGVsZW1lbnQgYW5kIHdpbGwgcmVxdWlyZSB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTk9DQUNIRSBmbGFnIGJlIHNldCBvbiB0aGVpciByZXF1ZXN0cy4gKi8KKyAgX19odjMyIGxlbjsgICAgICAvKio8IExlbmd0aCBvZiB0aGUgYnVmZmVyIHNlZ21lbnQuICovCit9IEhWX1NHTDsKKworI2RlZmluZSBIVl9TR0xfTUFYTEVOIDE2ICAvKio8IE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gYSBzY2F0dGVyLWdhdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QgKi8KKworLyoqIFJlYWQgZGF0YSBmcm9tIGEgaHlwZXJ2aXNvciBkZXZpY2UgYXN5bmNocm9ub3VzbHkuCisgKgorICogIFRoaXMgc2VydmljZSB0cmFuc2ZlcnMgZGF0YSBmcm9tIGEgaHlwZXJ2aXNvciBkZXZpY2UgdG8gYSBtZW1vcnkgYnVmZmVyLgorICogIFdoZW4gdGhlIHNlcnZpY2UgcmV0dXJucywgdGhlIHJlYWQgaGFzIGJlZW4gc2NoZWR1bGVkLiAgV2hlbiB0aGUgcmVhZAorICogIGNvbXBsZXRlcywgYW4gaW50ZXJydXB0IG1lc3NhZ2Ugd2lsbCBiZSBkZWxpdmVyZWQsIGFuZCB0aGUgYnVmZmVyIHdpbGwKKyAqICBub3QgYmUgZnVydGhlciBtb2RpZmllZCBieSB0aGUgZHJpdmVyLgorICoKKyAqICBUaGUgbnVtYmVyIG9mIHBvc3NpYmxlIG91dHN0YW5kaW5nIGFzeW5jaHJvbm91cyByZXF1ZXN0cyBpcyBkZWZpbmVkIGJ5CisgKiAgZWFjaCBkcml2ZXIsIGJ1dCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGl0IGJlIGF0IGxlYXN0IHR3byByZXF1ZXN0cworICogIHBlciB0aWxlIHBlciBkZXZpY2UuCisgKgorICogIE5vIG9yZGVyaW5nIGlzIGd1YXJhbnRlZWQgYmV0d2VlbiBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlcXVlc3RzLAorICogIGV2ZW4gdGhvc2UgaXNzdWVkIG9uIHRoZSBzYW1lIHRpbGUuCisgKgorICogIFRoZSBjb21wbGV0aW9uIGludGVycnVwdCBtZXNzYWdlIGNvdWxkIGNvbWUgZGlyZWN0bHksIG9yIHZpYSB0aGUgZG93bmNhbGwKKyAqICAoaW50Y3RybDEpIG1ldGhvZCwgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIHRpbGUgaXMgZG9pbmcgd2hlbiB0aGUgcmVhZAorICogIGNvbXBsZXRlcy4gIEludGVycnVwdHMgZG8gbm90IGNvYWxlc2NlOyBvbmUgaXMgZGVsaXZlcmVkIGZvciBlYWNoCisgKiAgYXN5bmNocm9ub3VzIEkvTyByZXF1ZXN0LiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcmVxdWVzdGVkCisgKiAgaW50ZXJydXB0IHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGlzIHNlcnZpY2UgaXMgY2FsbGVkIGJ1dCBiZWZvcmUgaXQKKyAqICByZXR1cm5zLgorICoKKyAqICBEZXZpY2VzIG1heSBjaG9vc2UgdG8gc3VwcG9ydCBib3RoIHRoZSBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlYWQKKyAqICBvcGVyYXRpb25zLCBvbmx5IG9uZSBvZiB0aGVtLCBvciBuZWl0aGVyIG9mIHRoZW0uCisgKgorICogQHBhcmFtIGRldmhkbCBEZXZpY2UgaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gYmUgcmVhZCBmcm9tLgorICogQHBhcmFtIGZsYWdzIEZsYWdzIChIVl9ERVZfeHh4KS4KKyAqIEBwYXJhbSBzZ2xfbGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdC4KKyAqIEBwYXJhbSBzZ2wgU2NhdHRlci1nYXRoZXIgbGlzdCBkZXNjcmliaW5nIHRoZSBtZW1vcnkgdG8gd2hpY2ggZGF0YSB3aWxsIGJlCisgKiAgICAgICAgd3JpdHRlbi4KKyAqIEBwYXJhbSBvZmZzZXQgRHJpdmVyLWRlcGVuZGVudCBvZmZzZXQuICBGb3IgYSByYW5kb20tYWNjZXNzIGRldmljZSwgdGhpcyBpcworICogICAgICAgIG9mdGVuIGEgYnl0ZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZpY2U7IGluIG90aGVyIGNhc2VzLAorICogICAgICAgIGxpa2Ugb24gYSBjb250cm9sIGRldmljZSwgaXQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgbWVhbmluZy4KKyAqIEBwYXJhbSBpbnRhcmcgVmFsdWUgd2hpY2ggd2lsbCBiZSBkZWxpdmVyZWQgYXMgdGhlIGludGFyZyBtZW1iZXIgb2YgdGhlCisgKiAgICAgICAgZXZlbnR1YWwgaW50ZXJydXB0IG1lc3NhZ2U7IHRoZSBpbnRkYXRhIG1lbWJlciB3aWxsIGJlIHNldCB0byB0aGUKKyAqICAgICAgICBub3JtYWwgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHJlYWQgcmVxdWVzdC4KKyAqIEByZXR1cm4gWmVybyBpZiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bGx5IHNjaGVkdWxlZDsgb3RoZXJ3aXNlLCBhIG5lZ2F0aXZlCisgKiAgICAgICAgIGVycm9yIGNvZGUuICBOb3RlIHRoYXQgc29tZSBkcml2ZXJzIG1heSBjaG9vc2UgdG8gcHJlLXZhbGlkYXRlCisgKiAgICAgICAgIHRoZWlyIGFyZ3VtZW50cywgYW5kIG1heSB0aHVzIGRldGVjdCBjZXJ0YWluIGRldmljZSBlcnJvcgorICogICAgICAgICBjb25kaXRpb25zIGF0IHRoaXMgdGltZSByYXRoZXIgdGhhbiB3aGVuIHRoZSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbgorICogICAgICAgICBvY2N1cnMsIGJ1dCB0aGlzIGlzIG5vdCByZXF1aXJlZC4KKyAqLworaW50IGh2X2Rldl9wcmVhZGEoaW50IGRldmhkbCwgX19odjMyIGZsYWdzLCBfX2h2MzIgc2dsX2xlbiwKKyAgICAgICAgICAgICAgICAgIEhWX1NHTCBzZ2xbLyogc2dsX2xlbiAqL10sIF9faHY2NCBvZmZzZXQsIEhWX0ludEFyZyBpbnRhcmcpOworCisKKy8qKiBXcml0ZSBkYXRhIHRvIGEgaHlwZXJ2aXNvciBkZXZpY2UgYXN5bmNocm9ub3VzbHkuCisgKgorICogIFRoaXMgc2VydmljZSB0cmFuc2ZlcnMgZGF0YSBmcm9tIGEgbWVtb3J5IGJ1ZmZlciB0byBhIGh5cGVydmlzb3IKKyAqICBkZXZpY2UuICBXaGVuIHRoZSBzZXJ2aWNlIHJldHVybnMsIHRoZSB3cml0ZSBoYXMgYmVlbiBzY2hlZHVsZWQuCisgKiAgV2hlbiB0aGUgd3JpdGUgY29tcGxldGVzLCBhbiBpbnRlcnJ1cHQgbWVzc2FnZSB3aWxsIGJlIGRlbGl2ZXJlZCwKKyAqICBhbmQgdGhlIGJ1ZmZlciBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGNsaWVudDsgdGhlIGRhdGEgbWF5IG5vdAorICogIG5lY2Vzc2FyaWx5IGhhdmUgYmVlbiBjb252ZXllZCB0byB0aGUgYWN0dWFsIGhhcmR3YXJlIEkvTyBpbnRlcmZhY2UuCisgKgorICogIFRoZSBudW1iZXIgb2YgcG9zc2libGUgb3V0c3RhbmRpbmcgYXN5bmNocm9ub3VzIHJlcXVlc3RzIGlzIGRlZmluZWQgYnkKKyAqICBlYWNoIGRyaXZlciwgYnV0IGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgaXQgYmUgYXQgbGVhc3QgdHdvIHJlcXVlc3RzCisgKiAgcGVyIHRpbGUgcGVyIGRldmljZS4KKyAqCisgKiAgTm8gb3JkZXJpbmcgaXMgZ3VhcmFudGVlZCBiZXR3ZWVuIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVxdWVzdHMsCisgKiAgZXZlbiB0aG9zZSBpc3N1ZWQgb24gdGhlIHNhbWUgdGlsZS4KKyAqCisgKiAgVGhlIGNvbXBsZXRpb24gaW50ZXJydXB0IG1lc3NhZ2UgY291bGQgY29tZSBkaXJlY3RseSwgb3IgdmlhIHRoZSBkb3duY2FsbAorICogIChpbnRjdHJsMSkgbWV0aG9kLCBkZXBlbmRpbmcgb24gd2hhdCB0aGUgdGlsZSBpcyBkb2luZyB3aGVuIHRoZSByZWFkCisgKiAgY29tcGxldGVzLiAgSW50ZXJydXB0cyBkbyBub3QgY29hbGVzY2U7IG9uZSBpcyBkZWxpdmVyZWQgZm9yIGVhY2gKKyAqICBhc3luY2hyb25vdXMgSS9PIHJlcXVlc3QuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoZSByZXF1ZXN0ZWQKKyAqICBpbnRlcnJ1cHQgdG8gYmUgZGVsaXZlcmVkIGFmdGVyIHRoaXMgc2VydmljZSBpcyBjYWxsZWQgYnV0IGJlZm9yZSBpdAorICogIHJldHVybnMuCisgKgorICogIERldmljZXMgbWF5IGNob29zZSB0byBzdXBwb3J0IGJvdGggdGhlIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgd3JpdGUKKyAqICBvcGVyYXRpb25zLCBvbmx5IG9uZSBvZiB0aGVtLCBvciBuZWl0aGVyIG9mIHRoZW0uCisgKgorICogQHBhcmFtIGRldmhkbCBEZXZpY2UgaGFuZGxlIG9mIHRoZSBkZXZpY2UgdG8gYmUgcmVhZCBmcm9tLgorICogQHBhcmFtIGZsYWdzIEZsYWdzIChIVl9ERVZfeHh4KS4KKyAqIEBwYXJhbSBzZ2xfbGVuIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2NhdHRlci1nYXRoZXIgbGlzdC4KKyAqIEBwYXJhbSBzZ2wgU2NhdHRlci1nYXRoZXIgbGlzdCBkZXNjcmliaW5nIHRoZSBtZW1vcnkgZnJvbSB3aGljaCBkYXRhIHdpbGwgYmUKKyAqICAgICAgICByZWFkLgorICogQHBhcmFtIG9mZnNldCBEcml2ZXItZGVwZW5kZW50IG9mZnNldC4gIEZvciBhIHJhbmRvbS1hY2Nlc3MgZGV2aWNlLCB0aGlzIGlzCisgKiAgICAgICAgb2Z0ZW4gYSBieXRlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRldmljZTsgaW4gb3RoZXIgY2FzZXMsCisgKiAgICAgICAgbGlrZSBvbiBhIGNvbnRyb2wgZGV2aWNlLCBpdCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBtZWFuaW5nLgorICogQHBhcmFtIGludGFyZyBWYWx1ZSB3aGljaCB3aWxsIGJlIGRlbGl2ZXJlZCBhcyB0aGUgaW50YXJnIG1lbWJlciBvZiB0aGUKKyAqICAgICAgICBldmVudHVhbCBpbnRlcnJ1cHQgbWVzc2FnZTsgdGhlIGludGRhdGEgbWVtYmVyIHdpbGwgYmUgc2V0IHRvIHRoZQorICogICAgICAgIG5vcm1hbCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgd3JpdGUgcmVxdWVzdC4KKyAqIEByZXR1cm4gWmVybyBpZiB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWxseSBzY2hlZHVsZWQ7IG90aGVyd2lzZSwgYSBuZWdhdGl2ZQorICogICAgICAgICBlcnJvciBjb2RlLiAgTm90ZSB0aGF0IHNvbWUgZHJpdmVycyBtYXkgY2hvb3NlIHRvIHByZS12YWxpZGF0ZQorICogICAgICAgICB0aGVpciBhcmd1bWVudHMsIGFuZCBtYXkgdGh1cyBkZXRlY3QgY2VydGFpbiBkZXZpY2UgZXJyb3IKKyAqICAgICAgICAgY29uZGl0aW9ucyBhdCB0aGlzIHRpbWUgcmF0aGVyIHRoYW4gd2hlbiB0aGUgY29tcGxldGlvbiBub3RpZmljYXRpb24KKyAqICAgICAgICAgb2NjdXJzLCBidXQgdGhpcyBpcyBub3QgcmVxdWlyZWQuCisgKi8KK2ludCBodl9kZXZfcHdyaXRlYShpbnQgZGV2aGRsLCBfX2h2MzIgZmxhZ3MsIF9faHYzMiBzZ2xfbGVuLAorICAgICAgICAgICAgICAgICAgIEhWX1NHTCBzZ2xbLyogc2dsX2xlbiAqL10sIF9faHY2NCBvZmZzZXQsIEhWX0ludEFyZyBpbnRhcmcpOworCisKKy8qKiBEZWZpbmUgYSBwYWlyIG9mIHRpbGUgYW5kIEFTSUQgdG8gaWRlbnRpZnkgYSB1c2VyIHByb2Nlc3MgY29udGV4dC4gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qKiBYIGNvb3JkaW5hdGUsIHJlbGF0aXZlIHRvIHN1cGVydmlzb3IncyB0b3AtbGVmdCBjb29yZGluYXRlICovCisgIHVuc2lnbmVkIGludCB4OjExOworCisgIC8qKiBZIGNvb3JkaW5hdGUsIHJlbGF0aXZlIHRvIHN1cGVydmlzb3IncyB0b3AtbGVmdCBjb29yZGluYXRlICovCisgIHVuc2lnbmVkIGludCB5OjExOworCisgIC8qKiBBU0lEIG9mIHRoZSBwcm9jZXNzIG9uIHRoaXMgeCx5IHRpbGUgKi8KKyAgSFZfQVNJRCBhc2lkOjEwOworfSBIVl9SZW1vdGVfQVNJRDsKKworLyoqIEZsdXNoIGNhY2hlIGFuZC9vciBUTEIgc3RhdGUgb24gcmVtb3RlIHRpbGVzLgorICoKKyAqIEBwYXJhbSBjYWNoZV9wYSBDbGllbnQgcGh5c2ljYWwgYWRkcmVzcyB0byBmbHVzaCBmcm9tIGNhY2hlIChpZ25vcmVkIGlmCisgKiAgICAgICAgdGhlIGxlbmd0aCBlbmNvZGVkIGluIGNhY2hlX2NvbnRyb2wgaXMgemVybywgb3IgaWYKKyAqICAgICAgICBIVl9GTFVTSF9FVklDVF9MMiBpcyBzZXQsIG9yIGlmIGNhY2hlX2NwdW1hc2sgaXMgTlVMTCkuCisgKiBAcGFyYW0gY2FjaGVfY29udHJvbCBUaGlzIGFyZ3VtZW50IGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGxlbmd0aCBvZgorICogICAgICAgIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgdG8gZmx1c2ggKG1heGltdW0gSFZfRkxVU0hfTUFYX0NBQ0hFX0xFTikuCisgKiAgICAgICAgWW91IGNhbiAib3IiIGluIEhWX0ZMVVNIX0VWSUNUX0wyIHRvIGZsdXNoIHRoZSB3aG9sZSBMMiBjYWNoZS4KKyAqICAgICAgICBZb3UgY2FuICJvciIgaW4gSFZfRkxVU0hfRVZJQ1RfTEkxIHRvIGZsdXNoIHRoZSB3aG9sZSBMSUkgY2FjaGUuCisgKiAgICAgICAgSFZfRkxVU0hfQUxMIGZsdXNoZXMgYWxsIGNhY2hlcy4KKyAqIEBwYXJhbSBjYWNoZV9jcHVtYXNrIEJpdG1hc2sgKGluIHJvdy1tYWpvciBvcmRlciwgc3VwZXJ2aXNvci1yZWxhdGl2ZSkgb2YKKyAqICAgICAgICB0aWxlIGluZGljZXMgdG8gcGVyZm9ybSBjYWNoZSBmbHVzaCBvbi4gIFRoZSBsb3cgYml0IG9mIHRoZSBmaXJzdAorICogICAgICAgIHdvcmQgY29ycmVzcG9uZHMgdG8gdGhlIHRpbGUgYXQgdGhlIHVwcGVyIGxlZnQtaGFuZCBjb3JuZXIgb2YgdGhlCisgKiAgICAgICAgc3VwZXJ2aXNvcidzIHJlY3RhbmdsZS4gIElmIHBhc3NlZCBhcyBhIE5VTEwgcG9pbnRlciwgZXF1aXZhbGVudAorICogICAgICAgIHRvIGFuIGVtcHR5IGJpdG1hc2suICBPbiBjaGlwcyB3aGljaCBzdXBwb3J0IGhhc2gtZm9yLWhvbWUgY2FjaGluZywKKyAqICAgICAgICBpZiBwYXNzZWQgYXMgLTEsIGVxdWl2YWxlbnQgdG8gYSBtYXNrIGNvbnRhaW5pbmcgdGlsZXMgd2hpY2ggY291bGQKKyAqICAgICAgICBiZSBkb2luZyBoYXNoLWZvci1ob21lIGNhY2hpbmcuCisgKiBAcGFyYW0gdGxiX3ZhIFZpcnR1YWwgYWRkcmVzcyB0byBmbHVzaCBmcm9tIFRMQiAoaWdub3JlZCBpZgorICogICAgICAgIHRsYl9sZW5ndGggaXMgemVybyBvciB0bGJfY3B1bWFzayBpcyBOVUxMKS4KKyAqIEBwYXJhbSB0bGJfbGVuZ3RoIE51bWJlciBvZiBieXRlcyBvZiBkYXRhIHRvIGZsdXNoIGZyb20gdGhlIFRMQi4KKyAqIEBwYXJhbSB0bGJfcGdzaXplIFBhZ2Ugc2l6ZSB0byB1c2UgZm9yIFRMQiBmbHVzaGVzLgorICogICAgICAgIHRsYl92YSBhbmQgdGxiX2xlbmd0aCBuZWVkIG5vdCBiZSBhbGlnbmVkIHRvIHRoaXMgc2l6ZS4KKyAqIEBwYXJhbSB0bGJfY3B1bWFzayBCaXRtYXNrIGZvciB0bGIgZmx1c2gsIGxpa2UgY2FjaGVfY3B1bWFzay4KKyAqICAgICAgICBJZiBwYXNzZWQgYXMgYSBOVUxMIHBvaW50ZXIsIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkgYml0bWFzay4KKyAqIEBwYXJhbSBhc2lkcyBQb2ludGVyIHRvIGFuIEhWX1JlbW90ZV9BU0lEIGFycmF5IG9mIHRpbGUvQVNJRCBwYWlycyB0byBmbHVzaC4KKyAqIEBwYXJhbSBhc2lkY291bnQgTnVtYmVyIG9mIEhWX1JlbW90ZV9BU0lEIGVudHJpZXMgaW4gYXNpZHNbXS4KKyAqIEByZXR1cm4gWmVybyBmb3Igc3VjY2Vzcywgb3IgZWxzZSBIVl9FSU5WQUwgb3IgSFZfRUZBVUxUIGZvciBlcnJvcnMgdGhhdAorICogICAgICAgIGFyZSBkZXRlY3RlZCB3aGlsZSBwYXJzaW5nIHRoZSBhcmd1bWVudHMuCisgKi8KK2ludCBodl9mbHVzaF9yZW1vdGUoSFZfUGh5c0FkZHIgY2FjaGVfcGEsIHVuc2lnbmVkIGxvbmcgY2FjaGVfY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyogY2FjaGVfY3B1bWFzaywKKyAgICAgICAgICAgICAgICAgICAgSFZfVmlydEFkZHIgdGxiX3ZhLCB1bnNpZ25lZCBsb25nIHRsYl9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGxiX3Bnc2l6ZSwgdW5zaWduZWQgbG9uZyogdGxiX2NwdW1hc2ssCisgICAgICAgICAgICAgICAgICAgIEhWX1JlbW90ZV9BU0lEKiBhc2lkcywgaW50IGFzaWRjb3VudCk7CisKKy8qKiBJbmNsdWRlIGluIGNhY2hlX2NvbnRyb2wgdG8gZW5zdXJlIGEgZmx1c2ggb2YgdGhlIGVudGlyZSBMMi4gKi8KKyNkZWZpbmUgSFZfRkxVU0hfRVZJQ1RfTDIgKDFVTCA8PCAzMSkKKworLyoqIEluY2x1ZGUgaW4gY2FjaGVfY29udHJvbCB0byBlbnN1cmUgYSBmbHVzaCBvZiB0aGUgZW50aXJlIEwxSS4gKi8KKyNkZWZpbmUgSFZfRkxVU0hfRVZJQ1RfTDFJICgxVUwgPDwgMzApCisKKy8qKiBNYXhpbXVtIGxlZ2FsIHNpemUgdG8gdXNlIGZvciB0aGUgImxlbmd0aCIgY29tcG9uZW50IG9mIGNhY2hlX2NvbnRyb2wuICovCisjZGVmaW5lIEhWX0ZMVVNIX01BWF9DQUNIRV9MRU4gKCgxVUwgPDwgMzApIC0gMSkKKworLyoqIFVzZSBmb3IgY2FjaGVfY29udHJvbCB0byBlbnN1cmUgYSBmbHVzaCBvZiBhbGwgY2FjaGVzLiAqLworI2RlZmluZSBIVl9GTFVTSF9BTEwgLTFVTAorCisjZWxzZSAgIC8qIF9fQVNTRU1CTEVSX18gKi8KKworLyoqIEluY2x1ZGUgaW4gY2FjaGVfY29udHJvbCB0byBlbnN1cmUgYSBmbHVzaCBvZiB0aGUgZW50aXJlIEwyLiAqLworI2RlZmluZSBIVl9GTFVTSF9FVklDVF9MMiAoMSA8PCAzMSkKKworLyoqIEluY2x1ZGUgaW4gY2FjaGVfY29udHJvbCB0byBlbnN1cmUgYSBmbHVzaCBvZiB0aGUgZW50aXJlIEwxSS4gKi8KKyNkZWZpbmUgSFZfRkxVU0hfRVZJQ1RfTDFJICgxIDw8IDMwKQorCisvKiogTWF4aW11bSBsZWdhbCBzaXplIHRvIHVzZSBmb3IgdGhlICJsZW5ndGgiIGNvbXBvbmVudCBvZiBjYWNoZV9jb250cm9sLiAqLworI2RlZmluZSBIVl9GTFVTSF9NQVhfQ0FDSEVfTEVOICgoMSA8PCAzMCkgLSAxKQorCisvKiogVXNlIGZvciBjYWNoZV9jb250cm9sIHRvIGVuc3VyZSBhIGZsdXNoIG9mIGFsbCBjYWNoZXMuICovCisjZGVmaW5lIEhWX0ZMVVNIX0FMTCAtMQorCisjZW5kaWYgIC8qIF9fQVNTRU1CTEVSX18gKi8KKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qKiBSZXR1cm4gYSA2NC1iaXQgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgUFRFIGlmIG5lZWRlZCAqLworI2RlZmluZSBodl9wdGVfdmFsKHB0ZSkgKChwdGUpLnZhbCkKKworLyoqIENhc3QgYSA2NC1iaXQgdmFsdWUgdG8gYW4gSFZfUFRFICovCisjZGVmaW5lIGh2X3B0ZSh2YWwpICgoSFZfUFRFKSB7IHZhbCB9KQorCisjZW5kaWYgIC8qICFfX0FTU0VNQkxFUl9fICovCisKKworLyoqIEJpdHMgaW4gdGhlIHNpemUgb2YgYW4gSFZfUFRFICovCisjZGVmaW5lIEhWX0xPRzJfUFRFX1NJWkUgMworCisvKiogU2l6ZSBvZiBhbiBIVl9QVEUgKi8KKyNkZWZpbmUgSFZfUFRFX1NJWkUgKDEgPDwgSFZfTE9HMl9QVEVfU0laRSkKKworCisvKiBCaXRzIGluIEhWX1BURSdzIGxvdyB3b3JkLiAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfUFJFU0VOVCAgICAgICAgICAwICAvKio8IFBURSBpcyB2YWxpZCAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfTUlHUkFUSU5HICAgICAgICAxICAvKio8IFBhZ2UgaXMgbWlncmF0aW5nICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9DTElFTlQwICAgICAgICAgIDIgIC8qKjwgUGFnZSBjbGllbnQgc3RhdGUgMCAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfQ0xJRU5UMSAgICAgICAgICAzICAvKio8IFBhZ2UgY2xpZW50IHN0YXRlIDEgKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX05DICAgICAgICAgICAgICAgNCAgLyoqPCBMMSQvTDIkIGluY29oZXJlbnQgd2l0aCBMMyQgKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX05PX0FMTE9DX0wxICAgICAgNSAgLyoqPCBQYWdlIGlzIHVuY2FjaGVkIGluIGxvY2FsIEwxJCAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfTk9fQUxMT0NfTDIgICAgICA2ICAvKio8IFBhZ2UgaXMgdW5jYWNoZWQgaW4gbG9jYWwgTDIkICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9DQUNIRURfUFJJT1JJVFkgIDcgIC8qKjwgUGFnZSBpcyBwcmlvcml0eSBjYWNoZWQgKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX1BBR0UgICAgICAgICAgICAgOCAgLyoqPCBQVEUgZGVzY3JpYmVzIGEgcGFnZSAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfR0xPQkFMICAgICAgICAgICA5ICAvKio8IFBhZ2UgaXMgZ2xvYmFsICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9VU0VSICAgICAgICAgICAgMTAgIC8qKjwgUGFnZSBpcyB1c2VyLWFjY2Vzc2libGUgKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX0FDQ0VTU0VEICAgICAgICAxMSAgLyoqPCBQYWdlIGhhcyBiZWVuIGFjY2Vzc2VkICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9ESVJUWSAgICAgICAgICAgMTIgIC8qKjwgUGFnZSBoYXMgYmVlbiB3cml0dGVuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgQml0cyAxMy0xNSBhcmUgcmVzZXJ2ZWQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlIHVzZS4gKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX01PREUgICAgICAgICAgICAxNiAgLyoqPCBQYWdlIG1vZGU7IHNlZSBIVl9QVEVfTU9ERV94eHggKi8KKyNkZWZpbmUgSFZfUFRFX01PREVfQklUUyAgICAgICAgICAgICAgMyAgLyoqPCBOdW1iZXIgb2YgYml0cyBpbiBtb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgQml0IDE5IGlzIHJlc2VydmVkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZSB1c2UuICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9MT1RBUiAgICAgICAgICAgMjAgIC8qKjwgUGFnZSdzIExPVEFSOyBtdXN0IGJlIGhpZ2ggYml0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHdvcmQgKi8KKyNkZWZpbmUgSFZfUFRFX0xPVEFSX0JJVFMgICAgICAgICAgICAxMiAgLyoqPCBOdW1iZXIgb2YgYml0cyBpbiBhIExPVEFSICovCisKKy8qIEJpdHMgaW4gSFZfUFRFJ3MgaGlnaCB3b3JkLiAqLworI2RlZmluZSBIVl9QVEVfSU5ERVhfUkVBREFCTEUgICAgICAgIDMyICAvKio8IFBhZ2UgaXMgcmVhZGFibGUgKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX1dSSVRBQkxFICAgICAgICAzMyAgLyoqPCBQYWdlIGlzIHdyaXRhYmxlICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9FWEVDVVRBQkxFICAgICAgMzQgIC8qKjwgUGFnZSBpcyBleGVjdXRhYmxlICovCisjZGVmaW5lIEhWX1BURV9JTkRFWF9QVEZOICAgICAgICAgICAgMzUgIC8qKjwgUGFnZSdzIFBURk47IG11c3QgYmUgaGlnaCBiaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygd29yZCAqLworI2RlZmluZSBIVl9QVEVfUFRGTl9CSVRTICAgICAgICAgICAgIDI5ICAvKio8IE51bWJlciBvZiBiaXRzIGluIGEgUFRGTiAqLworCisvKiogUG9zaXRpb24gb2YgdGhlIFBGTiBmaWVsZCB3aXRoaW4gdGhlIFBURSAoc3Vic2V0IG9mIHRoZSBQVEZOKS4gKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX1BGTiAoSFZfUFRFX0lOREVYX1BURk4gKyAoSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwgLSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWX0xPRzJfUEFHRV9UQUJMRV9BTElHTikpCisKKy8qKiBMZW5ndGggb2YgdGhlIFBGTiBmaWVsZCB3aXRoaW4gdGhlIFBURSAoc3Vic2V0IG9mIHRoZSBQVEZOKS4gKi8KKyNkZWZpbmUgSFZfUFRFX0lOREVYX1BGTl9CSVRTIChIVl9QVEVfSU5ERVhfUFRGTl9CSVRTIC0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIVl9MT0cyX1BBR0VfU0laRV9TTUFMTCAtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZfTE9HMl9QQUdFX1RBQkxFX0FMSUdOKSkKKworLyoKKyAqIExlZ2FsIHZhbHVlcyBmb3IgdGhlIFBURSdzIG1vZGUgZmllbGQKKyAqLworLyoqIERhdGEgaXMgbm90IHJlc2lkZW50IGluIGFueSBjYWNoZXM7IGxvYWRzIGFuZCBzdG9yZXMgYWNjZXNzIG1lbW9yeQorICogIGRpcmVjdGx5LgorICovCisjZGVmaW5lIEhWX1BURV9NT0RFX1VOQ0FDSEVEICAgICAgICAgIDEKKworLyoqIERhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIHRpbGUncyBsb2NhbCBMMSBhbmQvb3IgTDIgY2FjaGVzOyBpZiBhIGxvYWQKKyAqICBvciBzdG9yZSBtaXNzZXMgdGhlcmUsIGl0IGdvZXMgdG8gbWVtb3J5LgorICoKKyAqICBUaGUgY29weSBpbiB0aGUgbG9jYWwgTDEkL0wyJCBpcyBub3QgaW52YWxpZGF0ZWQgd2hlbiB0aGUgY29weSBpbgorICogIG1lbW9yeSBpcyBjaGFuZ2VkLgorICovCisjZGVmaW5lIEhWX1BURV9NT0RFX0NBQ0hFX05PX0wzICAgICAgIDIKKworLyoqIERhdGEgaXMgcmVzaWRlbnQgaW4gdGhlIHRpbGUncyBsb2NhbCBMMSBhbmQvb3IgTDIgY2FjaGVzLiAgSWYgYSBsb2FkCisgKiAgb3Igc3RvcmUgbWlzc2VzIHRoZXJlLCBpdCBnb2VzIHRvIGFuIEwzIGNhY2hlIGluIGEgZGVzaWduYXRlZCB0aWxlOworICogIGlmIGl0IG1pc3NlcyB0aGVyZSwgaXQgZ29lcyB0byBtZW1vcnkuCisgKgorICogIElmIHRoZSBOQyBiaXQgaXMgbm90IHNldCwgdGhlIGNvcHkgaW4gdGhlIGxvY2FsIEwxJC9MMiQgaXMgaW52YWxpZGF0ZWQKKyAqICB3aGVuIHRoZSBjb3B5IGluIHRoZSByZW1vdGUgTDMkIGlzIGNoYW5nZWQuICBPdGhlcndpc2UsIHN1Y2gKKyAqICBpbnZhbGlkYXRpb24gd2lsbCBub3Qgb2NjdXIuCisgKgorICogIENoaXBzIGZvciB3aGljaCBDSElQX0hBU19DT0hFUkVOVF9MT0NBTF9DQUNIRSgpIGlzIDAgZG8gbm90IHN1cHBvcnQKKyAqICBpbnZhbGlkYXRpb24gZnJvbSBhbiBMMyQgdG8gYW5vdGhlciB0aWxlJ3MgTDEkL0wyJC4gIElmIHRoZSBOQyBiaXQgaXMKKyAqICBjbGVhciBvbiBzdWNoIGEgY2hpcCwgbm8gY29weSBpcyBrZXB0IGluIHRoZSBsb2NhbCBMMSQvTDIkIGluIHRoaXMgbW9kZS4KKyAqLworI2RlZmluZSBIVl9QVEVfTU9ERV9DQUNIRV9USUxFX0wzICAgICAzCisKKy8qKiBEYXRhIGlzIHJlc2lkZW50IGluIHRoZSB0aWxlJ3MgbG9jYWwgTDEgYW5kL29yIEwyIGNhY2hlcy4gIElmIGEgbG9hZAorICogIG9yIHN0b3JlIG1pc3NlcyB0aGVyZSwgaXQgZ29lcyB0byBhbiBMMyBjYWNoZSBpbiBvbmUgb2YgYSBzZXQgb2YKKyAqICBkZXNpZ25hdGVkIHRpbGVzOyBpZiBpdCBtaXNzZXMgdGhlcmUsIGl0IGdvZXMgdG8gbWVtb3J5LiAgV2hpY2ggdGlsZQorICogIGlzIGNob3NlbiBmcm9tIHRoZSBzZXQgZGVwZW5kcyB1cG9uIGEgaGFzaCBmdW5jdGlvbiBhcHBsaWVkIHRvIHRoZQorICogIHBoeXNpY2FsIGFkZHJlc3MuICBUaGlzIG1vZGUgaXMgbm90IHN1cHBvcnRlZCBvbiBjaGlwcyBmb3Igd2hpY2gKKyAqICBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkgaXMgMC4KKyAqCisgKiAgSWYgdGhlIE5DIGJpdCBpcyBub3Qgc2V0LCB0aGUgY29weSBpbiB0aGUgbG9jYWwgTDEkL0wyJCBpcyBpbnZhbGlkYXRlZAorICogIHdoZW4gdGhlIGNvcHkgaW4gdGhlIHJlbW90ZSBMMyQgaXMgY2hhbmdlZC4gIE90aGVyd2lzZSwgc3VjaAorICogIGludmFsaWRhdGlvbiB3aWxsIG5vdCBvY2N1ci4KKyAqCisgKiAgQ2hpcHMgZm9yIHdoaWNoIENISVBfSEFTX0NPSEVSRU5UX0xPQ0FMX0NBQ0hFKCkgaXMgMCBkbyBub3Qgc3VwcG9ydAorICogIGludmFsaWRhdGlvbiBmcm9tIGFuIEwzJCB0byBhbm90aGVyIHRpbGUncyBMMSQvTDIkLiAgSWYgdGhlIE5DIGJpdCBpcworICogIGNsZWFyIG9uIHN1Y2ggYSBjaGlwLCBubyBjb3B5IGlzIGtlcHQgaW4gdGhlIGxvY2FsIEwxJC9MMiQgaW4gdGhpcyBtb2RlLgorICovCisjZGVmaW5lIEhWX1BURV9NT0RFX0NBQ0hFX0hBU0hfTDMgICAgIDQKKworLyoqIERhdGEgaXMgbm90IHJlc2lkZW50IGluIG1lbW9yeTsgYWNjZXNzZXMgYXJlIGluc3RlYWQgbWFkZSB0byBhbiBJL08KKyAqICBkZXZpY2UsIHdob3NlIHRpbGUgY29vcmRpbmF0ZXMgYXJlIGdpdmVuIGJ5IHRoZSBQVEUncyBMT1RBUiBmaWVsZC4KKyAqICBUaGlzIG1vZGUgaXMgb25seSBzdXBwb3J0ZWQgb24gY2hpcHMgZm9yIHdoaWNoIENISVBfSEFTX01NSU8oKSBpcyAxLgorICogIFRoZSBFWEVDVVRBQkxFIGJpdCBtYXkgbm90IGJlIHNldCBpbiBhbiBNTUlPIFBURS4KKyAqLworI2RlZmluZSBIVl9QVEVfTU9ERV9NTUlPICAgICAgICAgICAgICA1CisKKworLyogQyB3YW50cyAxVUxMIHNvIGl0IGlzIHR5cGVkIGFzIF9faHY2NCwgYnV0IHRoZSBhc3NlbWJsZXIgbmVlZHMganVzdCBudW1iZXJzLgorICogVGhlIGFzc2VtYmxlciBjYW4ndCBoYW5kbGUgc2hpZnRzIGdyZWF0ZXIgdGhhbiAzMSwgYnV0IHRyZWF0cyB0aGVtCisgKiBhcyBzaGlmdHMgbW9kIDMyLCBzbyBhc3NlbWJsZXIgY29kZSBtdXN0IGJlIGF3YXJlIG9mIHdoaWNoIHdvcmQKKyAqIHRoZSBiaXQgYmVsb25ncyBpbiB3aGVuIHVzaW5nIHRoZXNlIG1hY3Jvcy4KKyAqLworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgX19IVl9QVEVfT05FIDEgICAgICAgIC8qKjwgT25lLCBmb3IgYXNzZW1ibGVyICovCisjZWxzZQorI2RlZmluZSBfX0hWX1BURV9PTkUgMVVMTCAgICAgLyoqPCBPbmUsIGZvciBDICovCisjZW5kaWYKKworLyoqIElzIHRoaXMgUFRFIHByZXNlbnQ/CisgKgorICogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGlzIFBURSByZXByZXNlbnRzIGEgdmFsaWQgdHJhbnNsYXRpb24gb3IgbGV2ZWwtMgorICogcGFnZSB0YWJsZSBwb2ludGVyLiAgT3RoZXJ3aXNlLCB0aGUgcGFnZSB0YWJsZSBkb2VzIG5vdCBjb250YWluIGEKKyAqIHRyYW5zbGF0aW9uIGZvciB0aGUgc3ViamVjdCB2aXJ0dWFsIHBhZ2VzLgorICoKKyAqIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZSBvdGhlciBiaXRzIGluIHRoZSBQVEUgYXJlIG5vdAorICogaW50ZXJwcmV0ZWQgYnkgdGhlIGh5cGVydmlzb3IsIGFuZCBtYXkgY29udGFpbiBhbnkgdmFsdWUuCisgKi8KKyNkZWZpbmUgSFZfUFRFX1BSRVNFTlQgICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9QUkVTRU5UKQorCisvKiogRG9lcyB0aGlzIFBURSBtYXAgYSBwYWdlPworICoKKyAqIElmIHRoaXMgYml0IGlzIHNldCBpbiB0aGUgbGV2ZWwtMSBwYWdlIHRhYmxlLCB0aGUgZW50cnkgc2hvdWxkIGJlCisgKiBpbnRlcnByZXRlZCBhcyBhIGxldmVsLTIgcGFnZSB0YWJsZSBlbnRyeSBtYXBwaW5nIGEgbGFyZ2UgcGFnZS4KKyAqCisgKiBUaGlzIGJpdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjbGllbnQgd2hpbGUgUFJFU0VOVCBpcyBzZXQsIGFzCisgKiBkb2luZyBzbyBtYXkgcmFjZSB3aXRoIHRoZSBoeXBlcnZpc29yJ3MgdXBkYXRlIG9mIEFDQ0VTU0VEIGFuZCBESVJUWSBiaXRzLgorICoKKyAqIEluIGEgbGV2ZWwtMiBwYWdlIHRhYmxlLCB0aGlzIGJpdCBpcyBpZ25vcmVkIGFuZCBtdXN0IGJlIHplcm8uCisgKi8KKyNkZWZpbmUgSFZfUFRFX1BBR0UgICAgICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9QQUdFKQorCisvKiogSXMgdGhpcyBhIGdsb2JhbCAobm9uLUFTSUQpIG1hcHBpbmc/CisgKgorICogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGUgdHJhbnNsYXRpb25zIGVzdGFibGlzaGVkIGJ5IHRoaXMgUFRFIHdpbGwKKyAqIG5vdCBiZSBmbHVzaGVkIGZyb20gdGhlIFRMQiBieSB0aGUgaHZfZmx1c2hfYXNpZCgpIHNlcnZpY2U7IHRoZXkKKyAqIHdpbGwgYmUgZmx1c2hlZCBieSB0aGUgaHZfZmx1c2hfcGFnZSgpIG9yIGh2X2ZsdXNoX3BhZ2VzKCkgc2VydmljZXMuCisgKgorICogU2V0dGluZyB0aGlzIGJpdCBmb3IgdHJhbnNsYXRpb25zIHdoaWNoIGFyZSBpZGVudGljYWwgaW4gYWxsIHBhZ2UKKyAqIHRhYmxlcyAoZm9yIGluc3RhbmNlLCBjb2RlIGFuZCBkYXRhIGJlbG9uZ2luZyB0byBhIGNsaWVudCBPUykgY2FuCisgKiBiZSB2ZXJ5IGJlbmVmaWNpYWwsIGFzIGl0IHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YgVExCIG1pc3Nlcy4KKyAqIE5vdGUgdGhhdCwgd2hpbGUgaXQgaXMgbm90IGFuIGVycm9yIHdoaWNoIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgdGhlCisgKiBoeXBlcnZpc29yLCBpdCBpcyBhbiBleHRyZW1lbHkgYmFkIGlkZWEgdG8gc2V0IHRoaXMgYml0IGZvcgorICogdHJhbnNsYXRpb25zIHdoaWNoIGFyZSBfbm90XyBpZGVudGljYWwgaW4gYWxsIHBhZ2UgdGFibGVzLgorICoKKyAqIFRoaXMgYml0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGNsaWVudCB3aGlsZSBQUkVTRU5UIGlzIHNldCwgYXMKKyAqIGRvaW5nIHNvIG1heSByYWNlIHdpdGggdGhlIGh5cGVydmlzb3IncyB1cGRhdGUgb2YgQUNDRVNTRUQgYW5kIERJUlRZIGJpdHMuCisgKgorICogVGhpcyBiaXQgaXMgaWdub3JlZCBpbiBsZXZlbC0xIFBURXMgdW5sZXNzIHRoZSBQYWdlIGJpdCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgSFZfUFRFX0dMT0JBTCAgICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9HTE9CQUwpCisKKy8qKiBJcyB0aGlzIG1hcHBpbmcgYWNjZXNzaWJsZSB0byB1c2Vycz8KKyAqCisgKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGNvZGUgcnVubmluZyBhdCBhbnkgUEwgd2lsbCBiZSBwZXJtaXR0ZWQgdG8KKyAqIGFjY2VzcyB0aGUgdmlydHVhbCBhZGRyZXNzZXMgbWFwcGVkIGJ5IHRoaXMgUFRFLiAgT3RoZXJ3aXNlLCBvbmx5CisgKiBjb2RlIHJ1bm5pbmcgYXQgUEwgMSBvciBhYm92ZSB3aWxsIGJlIGFsbG93ZWQgdG8gZG8gc28uCisgKgorICogVGhpcyBiaXQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCBieSB0aGUgY2xpZW50IHdoaWxlIFBSRVNFTlQgaXMgc2V0LCBhcworICogZG9pbmcgc28gbWF5IHJhY2Ugd2l0aCB0aGUgaHlwZXJ2aXNvcidzIHVwZGF0ZSBvZiBBQ0NFU1NFRCBhbmQgRElSVFkgYml0cy4KKyAqCisgKiBUaGlzIGJpdCBpcyBpZ25vcmVkIGluIGxldmVsLTEgUFRFcyB1bmxlc3MgdGhlIFBhZ2UgYml0IGlzIHNldC4KKyAqLworI2RlZmluZSBIVl9QVEVfVVNFUiAgICAgICAgICAgICAgICAgIChfX0hWX1BURV9PTkUgPDwgSFZfUFRFX0lOREVYX1VTRVIpCisKKy8qKiBIYXMgdGhpcyBtYXBwaW5nIGJlZW4gYWNjZXNzZWQ/CisgKgorICogVGhpcyBiaXQgaXMgc2V0IGJ5IHRoZSBoeXBlcnZpc29yIHdoZW4gdGhlIG1lbW9yeSBkZXNjcmliZWQgYnkgdGhlCisgKiB0cmFuc2xhdGlvbiBpcyBhY2Nlc3NlZCBmb3IgdGhlIGZpcnN0IHRpbWUuICBJdCBpcyBuZXZlciBjbGVhcmVkIGJ5CisgKiB0aGUgaHlwZXJ2aXNvciwgYnV0IG1heSBiZSBjbGVhcmVkIGJ5IHRoZSBjbGllbnQuICBBZnRlciB0aGUgYml0CisgKiBoYXMgYmVlbiBjbGVhcmVkLCBzdWJzZXF1ZW50IHJlZmVyZW5jZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHNldAorICogaXQgYWdhaW4gdW50aWwgdGhlIHRyYW5zbGF0aW9uIGhhcyBiZWVuIGZsdXNoZWQgZnJvbSB0aGUgVExCLgorICoKKyAqIFRoaXMgYml0IGlzIGlnbm9yZWQgaW4gbGV2ZWwtMSBQVEVzIHVubGVzcyB0aGUgUGFnZSBiaXQgaXMgc2V0LgorICovCisjZGVmaW5lIEhWX1BURV9BQ0NFU1NFRCAgICAgICAgICAgICAgKF9fSFZfUFRFX09ORSA8PCBIVl9QVEVfSU5ERVhfQUNDRVNTRUQpCisKKy8qKiBJcyB0aGlzIG1hcHBpbmcgZGlydHk/CisgKgorICogVGhpcyBiaXQgaXMgc2V0IGJ5IHRoZSBoeXBlcnZpc29yIHdoZW4gdGhlIG1lbW9yeSBkZXNjcmliZWQgYnkgdGhlCisgKiB0cmFuc2xhdGlvbiBpcyB3cml0dGVuIGZvciB0aGUgZmlyc3QgdGltZS4gIEl0IGlzIG5ldmVyIGNsZWFyZWQgYnkKKyAqIHRoZSBoeXBlcnZpc29yLCBidXQgbWF5IGJlIGNsZWFyZWQgYnkgdGhlIGNsaWVudC4gIEFmdGVyIHRoZSBiaXQKKyAqIGhhcyBiZWVuIGNsZWFyZWQsIHN1YnNlcXVlbnQgcmVmZXJlbmNlcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gc2V0CisgKiBpdCBhZ2FpbiB1bnRpbCB0aGUgdHJhbnNsYXRpb24gaGFzIGJlZW4gZmx1c2hlZCBmcm9tIHRoZSBUTEIuCisgKgorICogVGhpcyBiaXQgaXMgaWdub3JlZCBpbiBsZXZlbC0xIFBURXMgdW5sZXNzIHRoZSBQYWdlIGJpdCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgSFZfUFRFX0RJUlRZICAgICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9ESVJUWSkKKworLyoqIE1pZ3JhdGluZyBiaXQgaW4gUFRFLgorICoKKyAqIFRoaXMgYml0IGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIGluc3BlY3RlZCBvciBtb2RpZmllZCBieSB0aGUKKyAqIGh5cGVydmlzb3IuICBUaGUgbmFtZSBpcyBpbmRpY2F0aXZlIG9mIHRoZSBzdWdnZXN0ZWQgdXNlIGJ5IHRoZSBjbGllbnQKKyAqIHRvIHRhZyBwYWdlcyB3aG9zZSBMMyBjYWNoZSBpcyBiZWluZyBtaWdyYXRlZCBmcm9tIG9uZSBjcHUgdG8gYW5vdGhlci4KKyAqLworI2RlZmluZSBIVl9QVEVfTUlHUkFUSU5HICAgICAgICAgICAgIChfX0hWX1BURV9PTkUgPDwgSFZfUFRFX0lOREVYX01JR1JBVElORykKKworLyoqIENsaWVudC1wcml2YXRlIGJpdCBpbiBQVEUuCisgKgorICogVGhpcyBiaXQgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgaW5zcGVjdGVkIG9yIG1vZGlmaWVkIGJ5IHRoZQorICogaHlwZXJ2aXNvci4KKyAqLworI2RlZmluZSBIVl9QVEVfQ0xJRU5UMCAgICAgICAgICAgICAgIChfX0hWX1BURV9PTkUgPDwgSFZfUFRFX0lOREVYX0NMSUVOVDApCisKKy8qKiBDbGllbnQtcHJpdmF0ZSBiaXQgaW4gUFRFLgorICoKKyAqIFRoaXMgYml0IGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIGluc3BlY3RlZCBvciBtb2RpZmllZCBieSB0aGUKKyAqIGh5cGVydmlzb3IuCisgKi8KKyNkZWZpbmUgSFZfUFRFX0NMSUVOVDEgICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9DTElFTlQxKQorCisvKiogTm9uLWNvaGVyZW50IChOQykgYml0IGluIFBURS4KKyAqCisgKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBtYXBwaW5nIHRoYXQgaXMgc2V0IHVwIHdpbGwgYmUgbm9uLWNvaGVyZW50CisgKiAoYWxzbyBrbm93biBhcyBub24taW5jbHVzaXZlKS4gIFRoaXMgbWVhbnMgdGhhdCBjaGFuZ2VzIHRvIHRoZSBMMworICogY2FjaGUgd2lsbCBub3QgY2F1c2UgYSBsb2NhbCBjb3B5IHRvIGJlIGludmFsaWRhdGVkLiAgSXQgaXMgZ2VuZXJhbGx5CisgKiByZWNvbW1lbmRlZCBvbmx5IGZvciByZWFkLW9ubHkgbWFwcGluZ3MuCisgKgorICogSW4gbGV2ZWwtMSBQVEVzLCBpZiB0aGUgUGFnZSBiaXQgaXMgY2xlYXIsIHRoaXMgYml0IGRldGVybWluZXMgaG93IHRoZQorICogbGV2ZWwtMiBwYWdlIHRhYmxlIGlzIGFjY2Vzc2VkLgorICovCisjZGVmaW5lIEhWX1BURV9OQyAgICAgICAgICAgICAgICAgICAgKF9fSFZfUFRFX09ORSA8PCBIVl9QVEVfSU5ERVhfTkMpCisKKy8qKiBJcyB0aGlzIHBhZ2UgcHJldmVudGVkIGZyb20gZmlsbGluZyB0aGUgTDEkPworICoKKyAqIElmIHRoaXMgYml0IGlzIHNldCwgdGhlIHBhZ2UgZGVzY3JpYmVkIGJ5IHRoZSBQVEUgd2lsbCBub3QgYmUgY2FjaGVkCisgKiB0aGUgbG9jYWwgY3B1J3MgTDEgY2FjaGUuCisgKgorICogSWYgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpIGlzIG5vdCB0cnVlIGluIDxjaGlwLmg+IGZvciB0aGlzIGNoaXAsCisgKiBpdCBpcyBpbGxlZ2FsIHRvIHVzZSB0aGlzIGF0dHJpYnV0ZSwgYW5kIG1heSBjYXVzZSBjbGllbnQgdGVybWluYXRpb24uCisgKgorICogSW4gbGV2ZWwtMSBQVEVzLCBpZiB0aGUgUGFnZSBiaXQgaXMgY2xlYXIsIHRoaXMgYml0CisgKiBkZXRlcm1pbmVzIGhvdyB0aGUgbGV2ZWwtMiBwYWdlIHRhYmxlIGlzIGFjY2Vzc2VkLgorICovCisjZGVmaW5lIEhWX1BURV9OT19BTExPQ19MMSAgICAgICAgICAgKF9fSFZfUFRFX09ORSA8PCBIVl9QVEVfSU5ERVhfTk9fQUxMT0NfTDEpCisKKy8qKiBJcyB0aGlzIHBhZ2UgcHJldmVudGVkIGZyb20gZmlsbGluZyB0aGUgTDIkPworICoKKyAqIElmIHRoaXMgYml0IGlzIHNldCwgdGhlIHBhZ2UgZGVzY3JpYmVkIGJ5IHRoZSBQVEUgd2lsbCBub3QgYmUgY2FjaGVkCisgKiB0aGUgbG9jYWwgY3B1J3MgTDIgY2FjaGUuCisgKgorICogSWYgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpIGlzIG5vdCB0cnVlIGluIDxjaGlwLmg+IGZvciB0aGlzIGNoaXAsCisgKiBpdCBpcyBpbGxlZ2FsIHRvIHVzZSB0aGlzIGF0dHJpYnV0ZSwgYW5kIG1heSBjYXVzZSBjbGllbnQgdGVybWluYXRpb24uCisgKgorICogSW4gbGV2ZWwtMSBQVEVzLCBpZiB0aGUgUGFnZSBiaXQgaXMgY2xlYXIsIHRoaXMgYml0IGRldGVybWluZXMgaG93IHRoZQorICogbGV2ZWwtMiBwYWdlIHRhYmxlIGlzIGFjY2Vzc2VkLgorICovCisjZGVmaW5lIEhWX1BURV9OT19BTExPQ19MMiAgICAgICAgICAgKF9fSFZfUFRFX09ORSA8PCBIVl9QVEVfSU5ERVhfTk9fQUxMT0NfTDIpCisKKy8qKiBJcyB0aGlzIGEgcHJpb3JpdHkgcGFnZT8KKyAqCisgKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBwYWdlIGRlc2NyaWJlZCBieSB0aGUgUFRFIHdpbGwgYmUgZ2l2ZW4KKyAqIHByaW9yaXR5IGluIHRoZSBjYWNoZS4gIE5vcm1hbGx5IHRoaXMgdHJhbnNsYXRlcyBpbnRvIGFsbG93aW5nIHRoZQorICogcGFnZSB0byB1c2Ugb25seSB0aGUgInJlZCIgaGFsZiBvZiB0aGUgY2FjaGUuICBUaGUgY2xpZW50IG1heSB3aXNoIHRvCisgKiB0aGVuIHVzZSB0aGUgaHZfc2V0X2NhY2hpbmcgc2VydmljZSB0byBzcGVjaWZ5IHRoYXQgb3RoZXIgcGFnZXMgd2hpY2gKKyAqIGFsaWFzIHRoaXMgcGFnZSB3aWxsIHVzZSBvbmx5IHRoZSAiYmxhY2siIGhhbGYgb2YgdGhlIGNhY2hlLgorICoKKyAqIElmIHRoZSBDYWNoZWQgUHJpb3JpdHkgYml0IGlzIGNsZWFyLCB0aGUgaHlwZXJ2aXNvciB1c2VzIHRoZQorICogY3VycmVudCBodl9zZXRfY2FjaGluZygpIHZhbHVlIHRvIGNob29zZSBob3cgdG8gY2FjaGUgdGhlIHBhZ2UuCisgKgorICogSXQgaXMgaWxsZWdhbCB0byBzZXQgdGhlIENhY2hlZCBQcmlvcml0eSBiaXQgaWYgdGhlIE5vbi1DYWNoZWQgYml0CisgKiBpcyBzZXQgYW5kIHRoZSBDYWNoZWQgUmVtb3RlbHkgYml0IGlzIGNsZWFyLCBpLmUuIGlmIHJlcXVlc3RzIHRvCisgKiB0aGUgcGFnZSBtYXAgZGlyZWN0bHkgdG8gbWVtb3J5LgorICoKKyAqIFRoaXMgYml0IGlzIGlnbm9yZWQgaW4gbGV2ZWwtMSBQVEVzIHVubGVzcyB0aGUgUGFnZSBiaXQgaXMgc2V0LgorICovCisjZGVmaW5lIEhWX1BURV9DQUNIRURfUFJJT1JJVFkgICAgICAgKF9fSFZfUFRFX09ORSA8PCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhWX1BURV9JTkRFWF9DQUNIRURfUFJJT1JJVFkpCisKKy8qKiBJcyB0aGlzIGEgcmVhZGFibGUgbWFwcGluZz8KKyAqCisgKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGNvZGUgd2lsbCBiZSBwZXJtaXR0ZWQgdG8gcmVhZCBmcm9tIChlLmcuLAorICogaXNzdWUgbG9hZCBpbnN0cnVjdGlvbnMgYWdhaW5zdCkgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIG1hcHBlZCBieQorICogdGhpcyBQVEUuCisgKgorICogSXQgaXMgaWxsZWdhbCBmb3IgdGhpcyBiaXQgdG8gYmUgY2xlYXIgaWYgdGhlIFdyaXRhYmxlIGJpdCBpcyBzZXQuCisgKgorICogVGhpcyBiaXQgaXMgaWdub3JlZCBpbiBsZXZlbC0xIFBURXMgdW5sZXNzIHRoZSBQYWdlIGJpdCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgSFZfUFRFX1JFQURBQkxFICAgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9SRUFEQUJMRSkKKworLyoqIElzIHRoaXMgYSB3cml0YWJsZSBtYXBwaW5nPworICoKKyAqIElmIHRoaXMgYml0IGlzIHNldCwgY29kZSB3aWxsIGJlIHBlcm1pdHRlZCB0byB3cml0ZSB0byAoZS5nLiwgaXNzdWUKKyAqIHN0b3JlIGluc3RydWN0aW9ucyBhZ2FpbnN0KSB0aGUgdmlydHVhbCBhZGRyZXNzZXMgbWFwcGVkIGJ5IHRoaXMKKyAqIFBURS4KKyAqCisgKiBUaGlzIGJpdCBpcyBpZ25vcmVkIGluIGxldmVsLTEgUFRFcyB1bmxlc3MgdGhlIFBhZ2UgYml0IGlzIHNldC4KKyAqLworI2RlZmluZSBIVl9QVEVfV1JJVEFCTEUgICAgICAgICAgICAgIChfX0hWX1BURV9PTkUgPDwgSFZfUFRFX0lOREVYX1dSSVRBQkxFKQorCisvKiogSXMgdGhpcyBhbiBleGVjdXRhYmxlIG1hcHBpbmc/CisgKgorICogSWYgdGhpcyBiaXQgaXMgc2V0LCBjb2RlIHdpbGwgYmUgcGVybWl0dGVkIHRvIGV4ZWN1dGUgZnJvbQorICogKGUuZy4sIGp1bXAgdG8pIHRoZSB2aXJ0dWFsIGFkZHJlc3NlcyBtYXBwZWQgYnkgdGhpcyBQVEUuCisgKgorICogVGhpcyBiaXQgYXBwbGllcyB0byBhbnkgcHJvY2Vzc29yIG9uIHRoZSB0aWxlLCBpZiB0aGVyZSBhcmUgbW9yZQorICogdGhhbiBvbmUuCisgKgorICogVGhpcyBiaXQgaXMgaWdub3JlZCBpbiBsZXZlbC0xIFBURXMgdW5sZXNzIHRoZSBQYWdlIGJpdCBpcyBzZXQuCisgKi8KKyNkZWZpbmUgSFZfUFRFX0VYRUNVVEFCTEUgICAgICAgICAgICAoX19IVl9QVEVfT05FIDw8IEhWX1BURV9JTkRFWF9FWEVDVVRBQkxFKQorCisvKiogVGhlIHdpZHRoIG9mIGEgTE9UQVIncyB4IG9yIHkgYml0ZmllbGQuICovCisjZGVmaW5lIEhWX0xPVEFSX1dJRFRIIDExCisKKy8qKiBDb252ZXJ0cyBhbiB4LHkgcGFpciB0byBhIExPVEFSIHZhbHVlLiAqLworI2RlZmluZSBIVl9YWV9UT19MT1RBUih4LCB5KSAoKEhWX0xPVEFSKSgoKHgpIDw8IEhWX0xPVEFSX1dJRFRIKSB8ICh5KSkpCisKKy8qKiBFeHRyYWN0cyB0aGUgWCBjb21wb25lbnQgb2YgYSBsb3Rhci4gKi8KKyNkZWZpbmUgSFZfTE9UQVJfWChsb3RhcikgKChsb3RhcikgPj4gSFZfTE9UQVJfV0lEVEgpCisKKy8qKiBFeHRyYWN0cyB0aGUgWSBjb21wb25lbnQgb2YgYSBsb3Rhci4gKi8KKyNkZWZpbmUgSFZfTE9UQVJfWShsb3RhcikgKChsb3RhcikgJiAoKDEgPDwgSFZfTE9UQVJfV0lEVEgpIC0gMSkpCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisvKiogRGVmaW5lIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgYSBQVEUgYml0LiAqLworI2RlZmluZSBfSFZfQklUKG5hbWUsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBfX2lubGluZSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitodl9wdGVfZ2V0XyMjbmFtZShIVl9QVEUgcHRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIChwdGUudmFsID4+IEhWX1BURV9JTkRFWF8jI2JpdCkgJiAxOyAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBfX2lubGluZSBIVl9QVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitodl9wdGVfc2V0XyMjbmFtZShIVl9QVEUgcHRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHRlLnZhbCB8PSAxVUxMIDw8IEhWX1BURV9JTkRFWF8jI2JpdDsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBwdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgX19pbmxpbmUgSFZfUFRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoraHZfcHRlX2NsZWFyXyMjbmFtZShIVl9QVEUgcHRlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB0ZS52YWwgJj0gfigxVUxMIDw8IEhWX1BURV9JTkRFWF8jI2JpdCk7ICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gcHRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyogR2VuZXJhdGUgYWNjZXNzb3JzIHRvIGdldCwgc2V0LCBhbmQgY2xlYXIgdmFyaW91cyBQVEUgZmxhZ3MuCisgKi8KK19IVl9CSVQocHJlc2VudCwgICAgICAgICBQUkVTRU5UKQorX0hWX0JJVChwYWdlLCAgICAgICAgICAgIFBBR0UpCitfSFZfQklUKGNsaWVudDAsICAgICAgICAgQ0xJRU5UMCkKK19IVl9CSVQoY2xpZW50MSwgICAgICAgICBDTElFTlQxKQorX0hWX0JJVChtaWdyYXRpbmcsICAgICAgIE1JR1JBVElORykKK19IVl9CSVQobmMsICAgICAgICAgICAgICBOQykKK19IVl9CSVQocmVhZGFibGUsICAgICAgICBSRUFEQUJMRSkKK19IVl9CSVQod3JpdGFibGUsICAgICAgICBXUklUQUJMRSkKK19IVl9CSVQoZXhlY3V0YWJsZSwgICAgICBFWEVDVVRBQkxFKQorX0hWX0JJVChhY2Nlc3NlZCwgICAgICAgIEFDQ0VTU0VEKQorX0hWX0JJVChkaXJ0eSwgICAgICAgICAgIERJUlRZKQorX0hWX0JJVChub19hbGxvY19sMSwgICAgIE5PX0FMTE9DX0wxKQorX0hWX0JJVChub19hbGxvY19sMiwgICAgIE5PX0FMTE9DX0wyKQorX0hWX0JJVChjYWNoZWRfcHJpb3JpdHksIENBQ0hFRF9QUklPUklUWSkKK19IVl9CSVQoZ2xvYmFsLCAgICAgICAgICBHTE9CQUwpCitfSFZfQklUKHVzZXIsICAgICAgICAgICAgVVNFUikKKworI3VuZGVmIF9IVl9CSVQKKworLyoqIEdldCB0aGUgcGFnZSBtb2RlIGZyb20gdGhlIFBURS4KKyAqCisgKiBUaGlzIGZpZWxkIGdlbmVyYWxseSBkZXRlcm1pbmVzIHdoZXRoZXIgYW5kIGhvdyBhY2Nlc3NlcyB0byB0aGUgcGFnZQorICogYXJlIGNhY2hlZDsgdGhlIEhWX1BURV9NT0RFX3h4eCBzeW1ib2xzIGRlZmluZSB0aGUgbGVnYWwgdmFsdWVzIGZvciB0aGUKKyAqIHBhZ2UgbW9kZS4gIFRoZSBOQywgTk9fQUxMT0NfTDEsIGFuZCBOT19BTExPQ19MMiBiaXRzIG1vZGlmeSB0aGlzCisgKiBnZW5lcmFsIHBvbGljeS4KKyAqLworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAoraHZfcHRlX2dldF9tb2RlKGNvbnN0IEhWX1BURSBwdGUpCit7CisgIHJldHVybiAoKChfX2h2MzIpIHB0ZS52YWwpID4+IEhWX1BURV9JTkRFWF9NT0RFKSAmCisgICAgICAgICAoKDEgPDwgSFZfUFRFX01PREVfQklUUykgLSAxKTsKK30KKworLyoqIFNldCB0aGUgcGFnZSBtb2RlIGludG8gYSBQVEUuICBTZWUgaHZfcHRlX2dldF9tb2RlLiAqLworc3RhdGljIF9faW5saW5lIEhWX1BURQoraHZfcHRlX3NldF9tb2RlKEhWX1BURSBwdGUsIHVuc2lnbmVkIGludCB2YWwpCit7CisgIHB0ZS52YWwgJj0gfigoKDFVTEwgPDwgSFZfUFRFX01PREVfQklUUykgLSAxKSA8PCBIVl9QVEVfSU5ERVhfTU9ERSk7CisgIHB0ZS52YWwgfD0gdmFsIDw8IEhWX1BURV9JTkRFWF9NT0RFOworICByZXR1cm4gcHRlOworfQorCisvKiogR2V0IHRoZSBwYWdlIGZyYW1lIG51bWJlciBmcm9tIHRoZSBQVEUuCisgKgorICogVGhpcyBmaWVsZCBjb250YWlucyB0aGUgdXBwZXIgYml0cyBvZiB0aGUgQ1BBIChjbGllbnQgcGh5c2ljYWwKKyAqIGFkZHJlc3MpIG9mIHRoZSB0YXJnZXQgcGFnZTsgdGhlIGNvbXBsZXRlIENQQSBpcyB0aGlzIGZpZWxkIHdpdGgKKyAqIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMIHplcm8gYml0cyBhcHBlbmRlZCB0byBpdC4KKyAqCisgKiBGb3IgUFRFcyBpbiBhIGxldmVsLTEgcGFnZSB0YWJsZSB3aGVyZSB0aGUgUGFnZSBiaXQgaXMgc2V0LCB0aGUKKyAqIENQQSBtdXN0IGJlIGFsaWduZWQgbW9kdWxvIHRoZSBsYXJnZSBwYWdlIHNpemUuCisgKi8KK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2h2X3B0ZV9nZXRfcGZuKGNvbnN0IEhWX1BURSBwdGUpCit7CisgIHJldHVybiBwdGUudmFsID4+IEhWX1BURV9JTkRFWF9QRk47Cit9CisKKworLyoqIFNldCB0aGUgcGFnZSBmcmFtZSBudW1iZXIgaW50byBhIFBURS4gIFNlZSBodl9wdGVfZ2V0X3Bmbi4gKi8KK3N0YXRpYyBfX2lubGluZSBIVl9QVEUKK2h2X3B0ZV9zZXRfcGZuKEhWX1BURSBwdGUsIHVuc2lnbmVkIGludCB2YWwpCit7CisgIC8qCisgICAqIE5vdGUgdGhhdCB0aGUgdXNlIG9mICJQVEZOIiBpbiB0aGUgbmV4dCBsaW5lIGlzIGludGVudGlvbmFsOyB3ZQorICAgKiBkb24ndCB3YW50IGFueSBnYXJiYWdlIGxvd2VyIGJpdHMgbGVmdCBpbiB0aGF0IGZpZWxkLgorICAgKi8KKyAgcHRlLnZhbCAmPSB+KCgoMVVMTCA8PCBIVl9QVEVfUFRGTl9CSVRTKSAtIDEpIDw8IEhWX1BURV9JTkRFWF9QVEZOKTsKKyAgcHRlLnZhbCB8PSAoX19odjY0KSB2YWwgPDwgSFZfUFRFX0lOREVYX1BGTjsKKyAgcmV0dXJuIHB0ZTsKK30KKworLyoqIEdldCB0aGUgcGFnZSB0YWJsZSBmcmFtZSBudW1iZXIgZnJvbSB0aGUgUFRFLgorICoKKyAqIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIHVwcGVyIGJpdHMgb2YgdGhlIENQQSAoY2xpZW50IHBoeXNpY2FsCisgKiBhZGRyZXNzKSBvZiB0aGUgdGFyZ2V0IHBhZ2UgdGFibGU7IHRoZSBjb21wbGV0ZSBDUEEgaXMgdGhpcyBmaWVsZCB3aXRoCisgKiB3aXRoIEhWX1BBR0VfVEFCTEVfQUxJR04gemVybyBiaXRzIGFwcGVuZGVkIHRvIGl0LgorICoKKyAqIEZvciBQVEVzIGluIGEgbGV2ZWwtMSBwYWdlIHRhYmxlIHdoZW4gdGhlIFBhZ2UgYml0IGlzIG5vdCBzZXQsIHRoZQorICogQ1BBIG11c3QgYmUgYWxpZ25lZCBtb2R1bG8gdGhlIHN0aWN0ZXIgb2YgSFZfUEFHRV9UQUJMRV9BTElHTiBhbmQKKyAqIHRoZSBsZXZlbC0yIHBhZ2UgdGFibGUgc2l6ZS4KKyAqLworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGxvbmcKK2h2X3B0ZV9nZXRfcHRmbihjb25zdCBIVl9QVEUgcHRlKQoreworICByZXR1cm4gcHRlLnZhbCA+PiBIVl9QVEVfSU5ERVhfUFRGTjsKK30KKworCisvKiogU2V0IHRoZSBwYWdlIHRhYmxlIGZyYW1lIG51bWJlciBpbnRvIGEgUFRFLiAgU2VlIGh2X3B0ZV9nZXRfcHRmbi4gKi8KK3N0YXRpYyBfX2lubGluZSBIVl9QVEUKK2h2X3B0ZV9zZXRfcHRmbihIVl9QVEUgcHRlLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKyAgcHRlLnZhbCAmPSB+KCgoMVVMTCA8PCBIVl9QVEVfUFRGTl9CSVRTKS0xKSA8PCBIVl9QVEVfSU5ERVhfUFRGTik7CisgIHB0ZS52YWwgfD0gKF9faHY2NCkgdmFsIDw8IEhWX1BURV9JTkRFWF9QVEZOOworICByZXR1cm4gcHRlOworfQorCisKKy8qKiBHZXQgdGhlIHJlbW90ZSB0aWxlIGNhY2hpbmcgdGhpcyBwYWdlLgorICoKKyAqIFNwZWNpZmllcyB0aGUgcmVtb3RlIHRpbGUgd2hpY2ggaXMgcHJvdmlkaW5nIHRoZSBMMyBjYWNoZSBmb3IgdGhpcyBwYWdlLgorICoKKyAqIFRoaXMgZmllbGQgaXMgaWdub3JlZCB1bmxlc3MgdGhlIHBhZ2UgbW9kZSBpcyBIVl9QVEVfTU9ERV9DQUNIRV9USUxFX0wzLgorICoKKyAqIEluIGxldmVsLTEgUFRFcywgaWYgdGhlIFBhZ2UgYml0IGlzIGNsZWFyLCB0aGlzIGZpZWxkIGRldGVybWluZXMgaG93IHRoZQorICogbGV2ZWwtMiBwYWdlIHRhYmxlIGlzIGFjY2Vzc2VkLgorICovCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50Citodl9wdGVfZ2V0X2xvdGFyKGNvbnN0IEhWX1BURSBwdGUpCit7CisgIHVuc2lnbmVkIGludCBsb3RhciA9ICgoX19odjMyKSBwdGUudmFsKSA+PiBIVl9QVEVfSU5ERVhfTE9UQVI7CisKKyAgcmV0dXJuIEhWX1hZX1RPX0xPVEFSKCAobG90YXIgPj4gKEhWX1BURV9MT1RBUl9CSVRTIC8gMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChsb3RhciAmICgoMSA8PCAoSFZfUFRFX0xPVEFSX0JJVFMgLyAyKSkgLSAxKSkgKTsKK30KKworCisvKiogU2V0IHRoZSByZW1vdGUgdGlsZSBjYWNoaW5nIGEgcGFnZSBpbnRvIGEgUFRFLiAgU2VlIGh2X3B0ZV9nZXRfbG90YXIuICovCitzdGF0aWMgX19pbmxpbmUgSFZfUFRFCitodl9wdGVfc2V0X2xvdGFyKEhWX1BURSBwdGUsIHVuc2lnbmVkIGludCB2YWwpCit7CisgIHVuc2lnbmVkIGludCB4ID0gSFZfTE9UQVJfWCh2YWwpOworICB1bnNpZ25lZCBpbnQgeSA9IEhWX0xPVEFSX1kodmFsKTsKKworICBwdGUudmFsICY9IH4oKCgxVUxMIDw8IEhWX1BURV9MT1RBUl9CSVRTKS0xKSA8PCBIVl9QVEVfSU5ERVhfTE9UQVIpOworICBwdGUudmFsIHw9ICh4IDw8IChIVl9QVEVfSU5ERVhfTE9UQVIgKyBIVl9QVEVfTE9UQVJfQklUUyAvIDIpKSB8CisgICAgICAgICAgICAgKHkgPDwgSFZfUFRFX0lOREVYX0xPVEFSKTsKKyAgcmV0dXJuIHB0ZTsKK30KKworI2VuZGlmICAvKiAhX19BU1NFTUJMRVJfXyAqLworCisvKiogQ29udmVydHMgYSBjbGllbnQgcGh5c2ljYWwgYWRkcmVzcyB0byBhIHBmbi4gKi8KKyNkZWZpbmUgSFZfQ1BBX1RPX1BGTihwKSAoKHApID4+IEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMKQorCisvKiogQ29udmVydHMgYSBwZm4gdG8gYSBjbGllbnQgcGh5c2ljYWwgYWRkcmVzcy4gKi8KKyNkZWZpbmUgSFZfUEZOX1RPX0NQQShwKSAoKChIVl9QaHlzQWRkcikocCkpIDw8IEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMKQorCisvKiogQ29udmVydHMgYSBjbGllbnQgcGh5c2ljYWwgYWRkcmVzcyB0byBhIHB0Zm4uICovCisjZGVmaW5lIEhWX0NQQV9UT19QVEZOKHApICgocCkgPj4gSFZfTE9HMl9QQUdFX1RBQkxFX0FMSUdOKQorCisvKiogQ29udmVydHMgYSBwdGZuIHRvIGEgY2xpZW50IHBoeXNpY2FsIGFkZHJlc3MuICovCisjZGVmaW5lIEhWX1BURk5fVE9fQ1BBKHApICgoKEhWX1BoeXNBZGRyKShwKSkgPDwgSFZfTE9HMl9QQUdFX1RBQkxFX0FMSUdOKQorCisvKiogQ29udmVydHMgYSBwdGZuIHRvIGEgcGZuLiAqLworI2RlZmluZSBIVl9QVEZOX1RPX1BGTihwKSBcCisgICgocCkgPj4gKEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMIC0gSFZfTE9HMl9QQUdFX1RBQkxFX0FMSUdOKSkKKworLyoqIENvbnZlcnRzIGEgcGZuIHRvIGEgcHRmbi4gKi8KKyNkZWZpbmUgSFZfUEZOX1RPX1BURk4ocCkgXAorICAoKHApIDw8IChIVl9MT0cyX1BBR0VfU0laRV9TTUFMTCAtIEhWX0xPRzJfUEFHRV9UQUJMRV9BTElHTikpCisKKyNpZiBDSElQX1ZBX1dJRFRIKCkgPiAzMgorCisvKiogTG9nIG51bWJlciBvZiBIVl9QVEUgZW50cmllcyBpbiBMMCBwYWdlIHRhYmxlICovCisjZGVmaW5lIEhWX0xPRzJfTDBfRU5UUklFUyAoQ0hJUF9WQV9XSURUSCgpIC0gSFZfTE9HMl9MMV9TUEFOKQorCisvKiogTnVtYmVyIG9mIEhWX1BURSBlbnRyaWVzIGluIEwwIHBhZ2UgdGFibGUgKi8KKyNkZWZpbmUgSFZfTDBfRU5UUklFUyAoMSA8PCBIVl9MT0cyX0wwX0VOVFJJRVMpCisKKy8qKiBMb2cgc2l6ZSBvZiBMMCBwYWdlIHRhYmxlIGluIGJ5dGVzICovCisjZGVmaW5lIEhWX0xPRzJfTDBfU0laRSAoSFZfTE9HMl9QVEVfU0laRSArIEhWX0xPRzJfTDBfRU5UUklFUykKKworLyoqIFNpemUgb2YgTDAgcGFnZSB0YWJsZSBpbiBieXRlcyAqLworI2RlZmluZSBIVl9MMF9TSVpFICgxIDw8IEhWX0xPRzJfTDBfU0laRSkKKworI2lmZGVmIF9fQVNTRU1CTEVSX18KKworLyoqIEluZGV4IGluIEwwIGZvciBhIHNwZWNpZmljIFZBICovCisjZGVmaW5lIEhWX0wwX0lOREVYKHZhKSBcCisgICgoKHZhKSA+PiBIVl9MT0cyX0wxX1NQQU4pICYgKEhWX0wwX0VOVFJJRVMgLSAxKSkKKworI2Vsc2UKKworLyoqIEluZGV4IGluIEwxIGZvciBhIHNwZWNpZmljIFZBICovCisjZGVmaW5lIEhWX0wwX0lOREVYKHZhKSBcCisgICgoKEhWX1ZpcnRBZGRyKSh2YSkgPj4gSFZfTE9HMl9MMV9TUEFOKSAmIChIVl9MMF9FTlRSSUVTIC0gMSkpCisKKyNlbmRpZgorCisjZW5kaWYgLyogQ0hJUF9WQV9XSURUSCgpID4gMzIgKi8KKworLyoqIExvZyBudW1iZXIgb2YgSFZfUFRFIGVudHJpZXMgaW4gTDEgcGFnZSB0YWJsZSAqLworI2RlZmluZSBIVl9MT0cyX0wxX0VOVFJJRVMgKEhWX0xPRzJfTDFfU1BBTiAtIEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFKQorCisvKiogTnVtYmVyIG9mIEhWX1BURSBlbnRyaWVzIGluIEwxIHBhZ2UgdGFibGUgKi8KKyNkZWZpbmUgSFZfTDFfRU5UUklFUyAoMSA8PCBIVl9MT0cyX0wxX0VOVFJJRVMpCisKKy8qKiBMb2cgc2l6ZSBvZiBMMSBwYWdlIHRhYmxlIGluIGJ5dGVzICovCisjZGVmaW5lIEhWX0xPRzJfTDFfU0laRSAoSFZfTE9HMl9QVEVfU0laRSArIEhWX0xPRzJfTDFfRU5UUklFUykKKworLyoqIFNpemUgb2YgTDEgcGFnZSB0YWJsZSBpbiBieXRlcyAqLworI2RlZmluZSBIVl9MMV9TSVpFICgxIDw8IEhWX0xPRzJfTDFfU0laRSkKKworLyoqIExvZyBudW1iZXIgb2YgSFZfUFRFIGVudHJpZXMgaW4gbGV2ZWwtMiBwYWdlIHRhYmxlICovCisjZGVmaW5lIEhWX0xPRzJfTDJfRU5UUklFUyAoSFZfTE9HMl9QQUdFX1NJWkVfTEFSR0UgLSBIVl9MT0cyX1BBR0VfU0laRV9TTUFMTCkKKworLyoqIE51bWJlciBvZiBIVl9QVEUgZW50cmllcyBpbiBsZXZlbC0yIHBhZ2UgdGFibGUgKi8KKyNkZWZpbmUgSFZfTDJfRU5UUklFUyAoMSA8PCBIVl9MT0cyX0wyX0VOVFJJRVMpCisKKy8qKiBMb2cgc2l6ZSBvZiBsZXZlbC0yIHBhZ2UgdGFibGUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgSFZfTE9HMl9MMl9TSVpFIChIVl9MT0cyX1BURV9TSVpFICsgSFZfTE9HMl9MMl9FTlRSSUVTKQorCisvKiogU2l6ZSBvZiBsZXZlbC0yIHBhZ2UgdGFibGUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgSFZfTDJfU0laRSAoMSA8PCBIVl9MT0cyX0wyX1NJWkUpCisKKyNpZmRlZiBfX0FTU0VNQkxFUl9fCisKKyNpZiBDSElQX1ZBX1dJRFRIKCkgPiAzMgorCisvKiogSW5kZXggaW4gTDEgZm9yIGEgc3BlY2lmaWMgVkEgKi8KKyNkZWZpbmUgSFZfTDFfSU5ERVgodmEpIFwKKyAgKCgodmEpID4+IEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFKSAmIChIVl9MMV9FTlRSSUVTIC0gMSkpCisKKyNlbHNlIC8qIENISVBfVkFfV0lEVEgoKSA+IDMyICovCisKKy8qKiBJbmRleCBpbiBMMSBmb3IgYSBzcGVjaWZpYyBWQSAqLworI2RlZmluZSBIVl9MMV9JTkRFWCh2YSkgXAorICAoKCh2YSkgPj4gSFZfTE9HMl9QQUdFX1NJWkVfTEFSR0UpKQorCisjZW5kaWYgLyogQ0hJUF9WQV9XSURUSCgpID4gMzIgKi8KKworLyoqIEluZGV4IGluIGxldmVsLTIgcGFnZSB0YWJsZSBmb3IgYSBzcGVjaWZpYyBWQSAqLworI2RlZmluZSBIVl9MMl9JTkRFWCh2YSkgXAorICAoKCh2YSkgPj4gSFZfTE9HMl9QQUdFX1NJWkVfU01BTEwpICYgKEhWX0wyX0VOVFJJRVMgLSAxKSkKKworI2Vsc2UgLyogX19BU1NFTUJMRVIgX18gKi8KKworI2lmIENISVBfVkFfV0lEVEgoKSA+IDMyCisKKy8qKiBJbmRleCBpbiBMMSBmb3IgYSBzcGVjaWZpYyBWQSAqLworI2RlZmluZSBIVl9MMV9JTkRFWCh2YSkgXAorICAoKChIVl9WaXJ0QWRkcikodmEpID4+IEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFKSAmIChIVl9MMV9FTlRSSUVTIC0gMSkpCisKKyNlbHNlIC8qIENISVBfVkFfV0lEVEgoKSA+IDMyICovCisKKy8qKiBJbmRleCBpbiBMMSBmb3IgYSBzcGVjaWZpYyBWQSAqLworI2RlZmluZSBIVl9MMV9JTkRFWCh2YSkgXAorICAoKChIVl9WaXJ0QWRkcikodmEpID4+IEhWX0xPRzJfUEFHRV9TSVpFX0xBUkdFKSkKKworI2VuZGlmIC8qIENISVBfVkFfV0lEVEgoKSA+IDMyICovCisKKy8qKiBJbmRleCBpbiBsZXZlbC0yIHBhZ2UgdGFibGUgZm9yIGEgc3BlY2lmaWMgVkEgKi8KKyNkZWZpbmUgSFZfTDJfSU5ERVgodmEpIFwKKyAgKCgoSFZfVmlydEFkZHIpKHZhKSA+PiBIVl9MT0cyX1BBR0VfU0laRV9TTUFMTCkgJiAoSFZfTDJfRU5UUklFUyAtIDEpKQorCisjZW5kaWYgLyogX19BU1NFTUJMRVIgX18gKi8KKworI2VuZGlmIC8qIF9USUxFX0hWX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9pbmNsdWRlL2h2L3BhZ2VzaXplLmggYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9wYWdlc2l6ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YmVkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvaW5jbHVkZS9odi9wYWdlc2l6ZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBAZmlsZSBwYWdlc2l6ZS5oCisgKi8KKworI2lmbmRlZiBfSFZfUEFHRVNJWkVfSAorI2RlZmluZSBfSFZfUEFHRVNJWkVfSAorCisvKiogVGhlIGxvZzIgb2YgdGhlIHNpemUgb2Ygc21hbGwgcGFnZXMsIGluIGJ5dGVzLiBUaGlzIHZhbHVlIHNob3VsZAorICogYmUgdmVyaWZpZWQgYXQgcnVudGltZSBieSBjYWxsaW5nIGh2X3N5c2NvbmYoSFZfU1lTQ09ORl9QQUdFX1NJWkVfU01BTEwpLgorICovCisjZGVmaW5lIEhWX0xPRzJfUEFHRV9TSVpFX1NNQUxMIDE2CisKKy8qKiBUaGUgbG9nMiBvZiB0aGUgc2l6ZSBvZiBsYXJnZSBwYWdlcywgaW4gYnl0ZXMuIFRoaXMgdmFsdWUgc2hvdWxkIGJlCisgKiB2ZXJpZmllZCBhdCBydW50aW1lIGJ5IGNhbGxpbmcgaHZfc3lzY29uZihIVl9TWVNDT05GX1BBR0VfU0laRV9MQVJHRSkuCisgKi8KKyNkZWZpbmUgSFZfTE9HMl9QQUdFX1NJWkVfTEFSR0UgMjQKKworI2VuZGlmIC8qIF9IVl9QQUdFU0laRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9odi9zeXNjYWxsX3B1YmxpYy5oIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvc3lzY2FsbF9wdWJsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2MwODM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2luY2x1ZGUvaHYvc3lzY2FsbF9wdWJsaWMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogQGZpbGUgc3lzY2FsbC5oCisgKiBJbmRpY2VzIGZvciB0aGUgaHlwZXJ2aXNvciBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gYmUgY2FsbGVkCisgKiBkaXJlY3RseSwgcmF0aGVyIHRoYW4gb25seSB0aHJvdWdoIGh5cGVydmlzb3ItZ2VuZXJhdGVkICJnbHVlIiBjb2RlLgorICovCisKKyNpZm5kZWYgX1NZU19IVl9JTkNMVURFX1NZU0NBTExfUFVCTElDX0gKKyNkZWZpbmUgX1NZU19IVl9JTkNMVURFX1NZU0NBTExfUFVCTElDX0gKKworLyoqIEZhc3Qgc3lzY2FsbCBmbGFnIGJpdCBsb2NhdGlvbi4gIFdoZW4gdGhpcyBiaXQgaXMgc2V0LCB0aGUgaHlwZXJ2aXNvcgorICogIGhhbmRsZXMgdGhlIHN5c2NhbGwgc3BlY2lhbGx5LgorICovCisjZGVmaW5lIEhWX1NZU19GQVNUX1NISUZUICAgICAgICAgICAgICAgICAxNAorCisvKiogRmFzdCBzeXNjYWxsIGZsYWcgYml0IG1hc2suICovCisjZGVmaW5lIEhWX1NZU19GQVNUX01BU0sgICAgICAgICAgICAgICAgICAoMSA8PCBIVl9TWVNfRkFTVF9TSElGVCkKKworLyoqIEJpdCBsb2NhdGlvbiBmb3IgZmxhZ2dpbmcgZmFzdCBzeXNjYWxscyB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBQTDAuICovCisjZGVmaW5lIEhWX1NZU19GQVNUX1BMT19TSElGVCAgICAgICAgICAgICAxMworCisvKiogRmFzdCBzeXNjYWxsIGFsbG93aW5nIFBMMCBiaXQgbWFzay4gKi8KKyNkZWZpbmUgSFZfU1lTX0ZBU1RfUEwwX01BU0sgICAgICAgICAgICAgICgxIDw8IEhWX1NZU19GQVNUX1BMT19TSElGVCkKKworLyoqIFBlcmZvcm0gYW4gTUYgdGhhdCB3YWl0cyBmb3IgYWxsIHZpY3RpbXMgdG8gcmVhY2ggRFJBTS4gKi8KKyNkZWZpbmUgSFZfU1lTX2ZlbmNlX2luY29oZXJlbnQgICAgICAgICAoNTEgfCBIVl9TWVNfRkFTVF9NQVNLIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSFZfU1lTX0ZBU1RfUEwwX01BU0spCisKKyNlbmRpZiAvKiAhX1NZU19IVl9JTkNMVURFX1NZU0NBTExfUFVCTElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3RpbGUva2VybmVsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMmIxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMTcgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eC9USUxFIGtlcm5lbC4KKyMKKworZXh0cmEteSA6PSB2bWxpbnV4LmxkcyBoZWFkXyQoQklUUykubworb2JqLXkgOj0gYmFja3RyYWNlLm8gZW50cnkubyBpbml0X3Rhc2subyBpcnEubyBtZXNzYWdpbmcubyBcCisJcGNpLWRtYS5vIHByb2MubyBwcm9jZXNzLm8gcHRyYWNlLm8gcmVib290Lm8gXAorCXNldHVwLm8gc2lnbmFsLm8gc2luZ2xlX3N0ZXAubyBzdGFjay5vIHN5cy5vIHRpbWUubyB0cmFwcy5vIFwKKwlpbnR2ZWNfJChCSVRTKS5vIHJlZ3NfJChCSVRTKS5vIHRpbGUtZGVzY18kKEJJVFMpLm8KKworb2JqLSQoQ09ORklHX0hBUkRXQUxMKQkJKz0gaGFyZHdhbGwubworb2JqLSQoQ09ORklHX1RJTEVHWCkJCSs9IGZ1dGV4XzY0Lm8KK29iai0kKENPTkZJR19DT01QQVQpCQkrPSBjb21wYXQubyBjb21wYXRfc2lnbmFsLm8KK29iai0kKENPTkZJR19TTVApCQkrPSBzbXBib290Lm8gc21wLm8gdGxiLm8KK29iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8KK29iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCitvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvdGlsZS9rZXJuZWwvYXNtLW9mZnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWRkZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogR2VuZXJhdGVzIGRlZmluaXRpb25zIGZyb20gYy10eXBlIHN0cnVjdHVyZXMgdXNlZCBieSBhc3NlbWJseSBzb3VyY2VzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKworLyogQ2hlY2sgZm9yIGNvbXBhdGlibGUgY29tcGlsZXIgZWFybHkgaW4gdGhlIGJ1aWxkLiAqLworI2lmZGVmIENPTkZJR19USUxFR1gKKyMgaWZuZGVmIF9fdGlsZWd4X18KKyMgIGVycm9yIENhbiBvbmx5IGJ1aWxkIFRJTEUtR3ggY29uZmlndXJhdGlvbnMgd2l0aCB0aWxlZ3ggY29tcGlsZXIKKyMgZW5kaWYKKyMgaWZuZGVmIF9fTFA2NF9fCisjICBlcnJvciBNdXN0IG5vdCBzcGVjaWZ5IC1tMzIgd2hlbiBidWlsZGluZyB0aGUgVElMRS1HeCBrZXJuZWwKKyMgZW5kaWYKKyNlbHNlCisjIGlmZGVmIF9fdGlsZWd4X18KKyMgIGVycm9yIENhbiBub3QgYnVpbGQgVElMRVByby9USUxFNjQgY29uZmlndXJhdGlvbnMgd2l0aCB0aWxlZ3ggY29tcGlsZXIKKyMgZW5kaWYKKyNlbmRpZgorCit2b2lkIGZvbyh2b2lkKQoreworCURFRklORShTSU5HTEVTVEVQX1NUQVRFX0JVRkZFUl9PRkZTRVQsIFwKKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNpbmdsZV9zdGVwX3N0YXRlLCBidWZmZXIpKTsKKwlERUZJTkUoU0lOR0xFU1RFUF9TVEFURV9GTEFHU19PRkZTRVQsIFwKKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNpbmdsZV9zdGVwX3N0YXRlLCBmbGFncykpOworCURFRklORShTSU5HTEVTVEVQX1NUQVRFX09SSUdfUENfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzaW5nbGVfc3RlcF9zdGF0ZSwgb3JpZ19wYykpOworCURFRklORShTSU5HTEVTVEVQX1NUQVRFX05FWFRfUENfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzaW5nbGVfc3RlcF9zdGF0ZSwgbmV4dF9wYykpOworCURFRklORShTSU5HTEVTVEVQX1NUQVRFX0JSQU5DSF9ORVhUX1BDX09GRlNFVCwgXAorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2luZ2xlX3N0ZXBfc3RhdGUsIGJyYW5jaF9uZXh0X3BjKSk7CisJREVGSU5FKFNJTkdMRVNURVBfU1RBVEVfVVBEQVRFX1ZBTFVFX09GRlNFVCwgXAorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2luZ2xlX3N0ZXBfc3RhdGUsIHVwZGF0ZV92YWx1ZSkpOworCisJREVGSU5FKFRIUkVBRF9JTkZPX1RBU0tfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgdGFzaykpOworCURFRklORShUSFJFQURfSU5GT19GTEFHU19PRkZTRVQsIFwKKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBmbGFncykpOworCURFRklORShUSFJFQURfSU5GT19TVEFUVVNfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgc3RhdHVzKSk7CisJREVGSU5FKFRIUkVBRF9JTkZPX0hPTUVDQUNIRV9DUFVfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgaG9tZWNhY2hlX2NwdSkpOworCURFRklORShUSFJFQURfSU5GT19TVEVQX1NUQVRFX09GRlNFVCwgXAorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHN0ZXBfc3RhdGUpKTsKKworCURFRklORShUQVNLX1NUUlVDVF9USFJFQURfS1NQX09GRlNFVCwKKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHRhc2tfc3RydWN0LCB0aHJlYWQua3NwKSk7CisJREVGSU5FKFRBU0tfU1RSVUNUX1RIUkVBRF9QQ19PRkZTRVQsCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgdGhyZWFkLnBjKSk7CisKKwlERUZJTkUoSFZfVE9QT0xPR1lfV0lEVEhfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKEhWX1RvcG9sb2d5LCB3aWR0aCkpOworCURFRklORShIVl9UT1BPTE9HWV9IRUlHSFRfT0ZGU0VULCBcCisJICAgICAgIG9mZnNldG9mKEhWX1RvcG9sb2d5LCBoZWlnaHQpKTsKKworCURFRklORShJUlFfQ1BVU1RBVF9TWVNDQUxMX0NPVU5UX09GRlNFVCwgXAorCSAgICAgICBvZmZzZXRvZihpcnFfY3B1c3RhdF90LCBpcnFfc3lzY2FsbF9jb3VudCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9iYWNrdHJhY2UuYyBiL2FyY2gvdGlsZS9rZXJuZWwvYmFja3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvYmFja3RyYWNlLmMKQEAgLTAsMCArMSw2MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL2JhY2t0cmFjZS5oPgorCisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKyNpZiBUSUxFX0NISVAgPCAxMAorCisKKyNpbmNsdWRlIDxhc20vb3Bjb2RlLXRpbGUuaD4KKworCisjZGVmaW5lIFRSRUdfU1AgNTQKKyNkZWZpbmUgVFJFR19MUiA1NQorCisKKy8qKiBBIGRlY29kZWQgYnVuZGxlIHVzZWQgZm9yIGJhY2t0cmFjZXIgYW5hbHlzaXMuICovCitzdHJ1Y3QgQmFja3RyYWNlQnVuZGxlIHsKKwl0aWxlX2J1bmRsZV9iaXRzIGJpdHM7CisJaW50IG51bV9pbnNuczsKKwlzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uCisJaW5zbnNbVElMRV9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdOworfTsKKworCisvKiBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIG5hdGl2ZSB0b29scy4gKi8KKy8qKiBEZWZhdWx0IGZ1bmN0aW9uIHRvIHJlYWQgbWVtb3J5LiAqLworc3RhdGljIGJvb2wgYnRfcmVhZF9tZW1vcnkodm9pZCAqcmVzdWx0LCBWaXJ0dWFsQWRkcmVzcyBhZGRyLAorCQkJICAgc2l6ZV90IHNpemUsIHZvaWQgKmV4dHJhKQoreworCS8qIEZJWE1FOiB0aGlzIHNob3VsZCBkbyBzb21lIGhvcnJpYmxlIHNpZ25hbCBzdHVmZiB0byBjYXRjaAorCSAqIFNFR1YgY2xlYW5seSBhbmQgZmFpbC4KKwkgKgorCSAqIE9yIGVsc2UgdGhlIGNhbGxlciBzaG91bGQgZG8gdGhlIHNldGptcCBmb3IgZWZmaWNpZW5jeS4KKwkgKi8KKworCW1lbWNweShyZXN1bHQsIChjb25zdCB2b2lkICopYWRkciwgc2l6ZSk7CisJcmV0dXJuIHRydWU7Cit9CisKKworLyoqIExvY2F0ZXMgYW4gaW5zdHJ1Y3Rpb24gaW5zaWRlIHRoZSBnaXZlbiBidW5kbGUgdGhhdAorICogaGFzIHRoZSBzcGVjaWZpZWQgbW5lbW9uaWMsIGFuZCB3aG9zZSBmaXJzdCAnbnVtX29wZXJhbmRzX3RvX21hdGNoJworICogb3BlcmFuZHMgZXhhY3RseSBtYXRjaCB0aG9zZSBpbiAnb3BlcmFuZF92YWx1ZXMnLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpbGVfZGVjb2RlZF9pbnN0cnVjdGlvbiAqZmluZF9tYXRjaGluZ19pbnNuKAorCWNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSwKKwl0aWxlX21uZW1vbmljIG1uZW1vbmljLAorCWNvbnN0IGludCAqb3BlcmFuZF92YWx1ZXMsCisJaW50IG51bV9vcGVyYW5kc190b19tYXRjaCkKK3sKKwlpbnQgaSwgajsKKwlib29sIG1hdGNoOworCisJZm9yIChpID0gMDsgaSA8IGJ1bmRsZS0+bnVtX2luc25zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHRpbGVfZGVjb2RlZF9pbnN0cnVjdGlvbiAqaW5zbiA9CisJCQkmYnVuZGxlLT5pbnNuc1tpXTsKKworCQlpZiAoaW5zbi0+b3Bjb2RlLT5tbmVtb25pYyAhPSBtbmVtb25pYykKKwkJCWNvbnRpbnVlOworCisJCW1hdGNoID0gdHJ1ZTsKKwkJZm9yIChqID0gMDsgaiA8IG51bV9vcGVyYW5kc190b19tYXRjaDsgaisrKSB7CisJCQlpZiAob3BlcmFuZF92YWx1ZXNbal0gIT0gaW5zbi0+b3BlcmFuZF92YWx1ZXNbal0pIHsKKwkJCQltYXRjaCA9IGZhbHNlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNoKQorCQkJcmV0dXJuIGluc247CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKiBEb2VzIHRoaXMgYnVuZGxlIGNvbnRhaW4gYW4gJ2lyZXQnIGluc3RydWN0aW9uPyAqLworc3RhdGljIGlubGluZSBib29sIGJ0X2hhc19pcmV0KGNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSkKK3sKKwlyZXR1cm4gZmluZF9tYXRjaGluZ19pbnNuKGJ1bmRsZSwgVElMRV9PUENfSVJFVCwgTlVMTCwgMCkgIT0gTlVMTDsKK30KKworLyoqIERvZXMgdGhpcyBidW5kbGUgY29udGFpbiBhbiAnYWRkaSBzcCwgc3AsIE9GRlNFVCcgb3IKKyAqICdhZGRsaSBzcCwgc3AsIE9GRlNFVCcgaW5zdHJ1Y3Rpb24sIGFuZCBpZiBzbywgd2hhdCBpcyBPRkZTRVQ/CisgKi8KK3N0YXRpYyBib29sIGJ0X2hhc19hZGRpX3NwKGNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSwgaW50ICphZGp1c3QpCit7CisJc3RhdGljIGNvbnN0IGludCB2YWxzWzJdID0geyBUUkVHX1NQLCBUUkVHX1NQIH07CisKKwljb25zdCBzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uICppbnNuID0KKwkJZmluZF9tYXRjaGluZ19pbnNuKGJ1bmRsZSwgVElMRV9PUENfQURESSwgdmFscywgMik7CisJaWYgKGluc24gPT0gTlVMTCkKKwkJaW5zbiA9IGZpbmRfbWF0Y2hpbmdfaW5zbihidW5kbGUsIFRJTEVfT1BDX0FERExJLCB2YWxzLCAyKTsKKwlpZiAoaW5zbiA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqYWRqdXN0ID0gaW5zbi0+b3BlcmFuZF92YWx1ZXNbMl07CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKiBEb2VzIHRoaXMgYnVuZGxlIGNvbnRhaW4gYW55ICdpbmZvIE9QJyBvciAnaW5mb2wgT1AnCisgKiBpbnN0cnVjdGlvbiwgYW5kIGlmIHNvLCB3aGF0IGFyZSB0aGVpciBPUD8gIE5vdGUgdGhhdCBPUCBpcyBpbnRlcnByZXRlZAorICogYXMgYW4gdW5zaWduZWQgdmFsdWUgYnkgdGhpcyBjb2RlIHNpbmNlIHRoYXQncyB3aGF0IHRoZSBjYWxsZXIgd2FudHMuCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaW5mbyBvcHMgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgYnRfZ2V0X2luZm9fb3BzKGNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSwKKwkJaW50IG9wZXJhbmRzW01BWF9JTkZPX09QU19QRVJfQlVORExFXSkKK3sKKwlpbnQgbnVtX29wcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVuZGxlLT5udW1faW5zbnM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uICppbnNuID0KKwkJCSZidW5kbGUtPmluc25zW2ldOworCisJCWlmIChpbnNuLT5vcGNvZGUtPm1uZW1vbmljID09IFRJTEVfT1BDX0lORk8gfHwKKwkJICAgIGluc24tPm9wY29kZS0+bW5lbW9uaWMgPT0gVElMRV9PUENfSU5GT0wpIHsKKwkJCW9wZXJhbmRzW251bV9vcHMrK10gPSBpbnNuLT5vcGVyYW5kX3ZhbHVlc1swXTsKKwkJfQorCX0KKworCXJldHVybiBudW1fb3BzOworfQorCisvKiogRG9lcyB0aGlzIGJ1bmRsZSBjb250YWluIGEganJwIGluc3RydWN0aW9uLCBhbmQgaWYgc28sIHRvIHdoaWNoCisgKiByZWdpc3RlciBpcyBpdCBqdW1waW5nPworICovCitzdGF0aWMgYm9vbCBidF9oYXNfanJwKGNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSwgaW50ICp0YXJnZXRfcmVnKQoreworCWNvbnN0IHN0cnVjdCB0aWxlX2RlY29kZWRfaW5zdHJ1Y3Rpb24gKmluc24gPQorCQlmaW5kX21hdGNoaW5nX2luc24oYnVuZGxlLCBUSUxFX09QQ19KUlAsIE5VTEwsIDApOworCWlmIChpbnNuID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKworCSp0YXJnZXRfcmVnID0gaW5zbi0+b3BlcmFuZF92YWx1ZXNbMF07CisJcmV0dXJuIHRydWU7Cit9CisKKy8qKiBEb2VzIHRoaXMgYnVuZGxlIG1vZGlmeSB0aGUgc3BlY2lmaWVkIHJlZ2lzdGVyIGluIGFueSB3YXk/ICovCitzdGF0aWMgYm9vbCBidF9tb2RpZmllc19yZWcoY29uc3Qgc3RydWN0IEJhY2t0cmFjZUJ1bmRsZSAqYnVuZGxlLCBpbnQgcmVnKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCBidW5kbGUtPm51bV9pbnNuczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCB0aWxlX2RlY29kZWRfaW5zdHJ1Y3Rpb24gKmluc24gPQorCQkJJmJ1bmRsZS0+aW5zbnNbaV07CisKKwkJaWYgKGluc24tPm9wY29kZS0+aW1wbGljaXRseV93cml0dGVuX3JlZ2lzdGVyID09IHJlZykKKwkJCXJldHVybiB0cnVlOworCisJCWZvciAoaiA9IDA7IGogPCBpbnNuLT5vcGNvZGUtPm51bV9vcGVyYW5kczsgaisrKQorCQkJaWYgKGluc24tPm9wZXJhbmRzW2pdLT5pc19kZXN0X3JlZyAmJgorCQkJICAgIGluc24tPm9wZXJhbmRfdmFsdWVzW2pdID09IHJlZykKKwkJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKiBEb2VzIHRoaXMgYnVuZGxlIG1vZGlmeSBzcD8gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBidF9tb2RpZmllc19zcChjb25zdCBzdHJ1Y3QgQmFja3RyYWNlQnVuZGxlICpidW5kbGUpCit7CisJcmV0dXJuIGJ0X21vZGlmaWVzX3JlZyhidW5kbGUsIFRSRUdfU1ApOworfQorCisvKiogRG9lcyB0aGlzIGJ1bmRsZSBtb2RpZnkgbHI/ICovCitzdGF0aWMgaW5saW5lIGJvb2wgYnRfbW9kaWZpZXNfbHIoY29uc3Qgc3RydWN0IEJhY2t0cmFjZUJ1bmRsZSAqYnVuZGxlKQoreworCXJldHVybiBidF9tb2RpZmllc19yZWcoYnVuZGxlLCBUUkVHX0xSKTsKK30KKworLyoqIERvZXMgdGhpcyBidW5kbGUgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24gJ21vdmUgZnAsIHNwJz8gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBidF9oYXNfbW92ZV9yNTJfc3AoY29uc3Qgc3RydWN0IEJhY2t0cmFjZUJ1bmRsZSAqYnVuZGxlKQoreworCXN0YXRpYyBjb25zdCBpbnQgdmFsc1syXSA9IHsgNTIsIFRSRUdfU1AgfTsKKwlyZXR1cm4gZmluZF9tYXRjaGluZ19pbnNuKGJ1bmRsZSwgVElMRV9PUENfTU9WRSwgdmFscywgMikgIT0gTlVMTDsKK30KKworLyoqIERvZXMgdGhpcyBidW5kbGUgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24gJ3N3IHNwLCBscic/ICovCitzdGF0aWMgaW5saW5lIGJvb2wgYnRfaGFzX3N3X3NwX2xyKGNvbnN0IHN0cnVjdCBCYWNrdHJhY2VCdW5kbGUgKmJ1bmRsZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IHZhbHNbMl0gPSB7IFRSRUdfU1AsIFRSRUdfTFIgfTsKKwlyZXR1cm4gZmluZF9tYXRjaGluZ19pbnNuKGJ1bmRsZSwgVElMRV9PUENfU1csIHZhbHMsIDIpICE9IE5VTEw7Cit9CisKKy8qKiBMb2NhdGVzIHRoZSBjYWxsZXIncyBQQyBhbmQgU1AgZm9yIGEgcHJvZ3JhbSBzdGFydGluZyBhdCB0aGUKKyAqIGdpdmVuIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB2b2lkIGZpbmRfY2FsbGVyX3BjX2FuZF9jYWxsZXJfc3AoQ2FsbGVyTG9jYXRpb24gKmxvY2F0aW9uLAorCQkJCQkgY29uc3QgVmlydHVhbEFkZHJlc3Mgc3RhcnRfcGMsCisJCQkJCSBCYWNrdHJhY2VNZW1vcnlSZWFkZXIgcmVhZF9tZW1vcnlfZnVuYywKKwkJCQkJIHZvaWQgKnJlYWRfbWVtb3J5X2Z1bmNfZXh0cmEpCit7CisJLyogSGF2ZSB3ZSBleHBsaWNpdGx5IGRlY2lkZWQgd2hhdCB0aGUgc3AgaXMsCisJICogcmF0aGVyIHRoYW4ganVzdCB0aGUgZGVmYXVsdD8KKwkgKi8KKwlib29sIHNwX2RldGVybWluZWQgPSBmYWxzZTsKKworCS8qIEhhcyBhbnkgYnVuZGxlIHNlZW4gc28gZmFyIG1vZGlmaWVkIGxyPyAqLworCWJvb2wgbHJfbW9kaWZpZWQgPSBmYWxzZTsKKworCS8qIEhhdmUgd2Ugc2VlbiBhIG1vdmUgZnJvbSBzcCB0byBmcD8gKi8KKwlib29sIHNwX21vdmVkX3RvX3I1MiA9IGZhbHNlOworCisJLyogSGF2ZSB3ZSBzZWVuIGEgdGVybWluYXRpbmcgYnVuZGxlPyAqLworCWJvb2wgc2Vlbl90ZXJtaW5hdGluZ19idW5kbGUgPSBmYWxzZTsKKworCS8qIEN1dCBkb3duIG9uIHJvdW5kLXRyaXAgcmVhZGluZyBvdmVyaGVhZCBieSByZWFkaW5nIHNldmVyYWwKKwkgKiBidW5kbGVzIGF0IGEgdGltZS4KKwkgKi8KKwl0aWxlX2J1bmRsZV9iaXRzIHByZWZldGNoZWRfYnVuZGxlc1szMl07CisJaW50IG51bV9idW5kbGVzX3ByZWZldGNoZWQgPSAwOworCWludCBuZXh0X2J1bmRsZSA9IDA7CisJVmlydHVhbEFkZHJlc3MgcGM7CisKKwkvKiBEZWZhdWx0IHRvIGFzc3VtaW5nIHRoYXQgdGhlIGNhbGxlcidzIHNwIGlzIHRoZSBjdXJyZW50IHNwLgorCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBzdGFydCBiYWNrdHJhY2luZworCSAqIHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIGVwaWxvZy4KKwkgKi8KKwlsb2NhdGlvbi0+c3BfbG9jYXRpb24gPSBTUF9MT0NfT0ZGU0VUOworCWxvY2F0aW9uLT5zcF9vZmZzZXQgPSAwOworCisJLyogRGVmYXVsdCB0byBoYXZpbmcgbm8gaWRlYSB3aGVyZSB0aGUgY2FsbGVyIFBDIGlzLiAqLworCWxvY2F0aW9uLT5wY19sb2NhdGlvbiA9IFBDX0xPQ19VTktOT1dOOworCisJLyogRG9uJ3QgZXZlbiB0cnkgaWYgdGhlIFBDIGlzIG5vdCBhbGlnbmVkLiAqLworCWlmIChzdGFydF9wYyAlIFRJTEVfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUyAhPSAwKQorCQlyZXR1cm47CisKKwlmb3IgKHBjID0gc3RhcnRfcGM7OyBwYyArPSBzaXplb2YodGlsZV9idW5kbGVfYml0cykpIHsKKworCQlzdHJ1Y3QgQmFja3RyYWNlQnVuZGxlIGJ1bmRsZTsKKwkJaW50IG51bV9pbmZvX29wcywgaW5mb19vcGVyYW5kc1tNQVhfSU5GT19PUFNfUEVSX0JVTkRMRV07CisJCWludCBvbmVfYWdvLCBqcnBfcmVnOworCQlib29sIGhhc19qcnA7CisKKwkJaWYgKG5leHRfYnVuZGxlID49IG51bV9idW5kbGVzX3ByZWZldGNoZWQpIHsKKwkJCS8qIFByZWZldGNoIHNvbWUgYnl0ZXMsIGJ1dCBkb24ndCBjcm9zcyBhIHBhZ2UKKwkJCSAqIGJvdW5kYXJ5IHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UgYSByZWFkIGZhaWx1cmUgd2UKKwkJCSAqIGRvbid0IGNhcmUgYWJvdXQgaWYgd2Ugb25seSBuZWVkIHRoZSBmaXJzdCBmZXcKKwkJCSAqIGJ5dGVzLiBOb3RlOiB3ZSBkb24ndCBjYXJlIHdoYXQgdGhlIGFjdHVhbCBwYWdlCisJCQkgKiBzaXplIGlzOyB1c2luZyB0aGUgbWluaW11bSBwb3NzaWJsZSBwYWdlIHNpemUgd2lsbAorCQkJICogcHJldmVudCBhbnkgcHJvYmxlbXMuCisJCQkgKi8KKwkJCXVuc2lnbmVkIGludCBieXRlc190b19wcmVmZXRjaCA9IDQwOTYgLSAocGMgJiA0MDk1KTsKKwkJCWlmIChieXRlc190b19wcmVmZXRjaCA+IHNpemVvZiBwcmVmZXRjaGVkX2J1bmRsZXMpCisJCQkJYnl0ZXNfdG9fcHJlZmV0Y2ggPSBzaXplb2YgcHJlZmV0Y2hlZF9idW5kbGVzOworCisJCQlpZiAoIXJlYWRfbWVtb3J5X2Z1bmMocHJlZmV0Y2hlZF9idW5kbGVzLCBwYywKKwkJCQkJICAgICAgYnl0ZXNfdG9fcHJlZmV0Y2gsCisJCQkJCSAgICAgIHJlYWRfbWVtb3J5X2Z1bmNfZXh0cmEpKSB7CisJCQkJaWYgKHBjID09IHN0YXJ0X3BjKSB7CisJCQkJCS8qIFRoZSBwcm9ncmFtIHByb2JhYmx5IGNhbGxlZCBhIGJhZAorCQkJCQkgKiBhZGRyZXNzLCBzdWNoIGFzIGEgTlVMTCBwb2ludGVyLgorCQkJCQkgKiBTbyB0cmVhdCB0aGlzIGFzIGlmIHdlIGFyZSBhdCB0aGUKKwkJCQkJICogc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIHByb2xvZyBzbyB0aGUKKwkJCQkJICogYmFja3RyYWNlIHdpbGwgc2hvdyBob3cgd2UgZ290IGhlcmUuCisJCQkJCSAqLworCQkJCQlsb2NhdGlvbi0+cGNfbG9jYXRpb24gPSBQQ19MT0NfSU5fTFI7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQkvKiBVbnJlYWRhYmxlIGFkZHJlc3MuIEdpdmUgdXAuICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCW5leHRfYnVuZGxlID0gMDsKKwkJCW51bV9idW5kbGVzX3ByZWZldGNoZWQgPQorCQkJCWJ5dGVzX3RvX3ByZWZldGNoIC8gc2l6ZW9mKHRpbGVfYnVuZGxlX2JpdHMpOworCQl9CisKKwkJLyogRGVjb2RlIHRoZSBuZXh0IGJ1bmRsZS4gKi8KKwkJYnVuZGxlLmJpdHMgPSBwcmVmZXRjaGVkX2J1bmRsZXNbbmV4dF9idW5kbGUrK107CisJCWJ1bmRsZS5udW1faW5zbnMgPQorCQkJcGFyc2VfaW5zbl90aWxlKGJ1bmRsZS5iaXRzLCBwYywgYnVuZGxlLmluc25zKTsKKwkJbnVtX2luZm9fb3BzID0gYnRfZ2V0X2luZm9fb3BzKCZidW5kbGUsIGluZm9fb3BlcmFuZHMpOworCisJCS8qIEZpcnN0IGxvb2sgYXQgYW55IG9uZV9hZ28gaW5mbyBvcHMgaWYgdGhleSBhcmUgaW50ZXJlc3RpbmcsCisJCSAqIHNpbmNlIHRoZXkgc2hvdWxkIHNoYWRvdyBhbnkgbm9uLW9uZS1hZ28gaW5mbyBvcHMuCisJCSAqLworCQlmb3IgKG9uZV9hZ28gPSAocGMgIT0gc3RhcnRfcGMpID8gMSA6IDA7CisJCSAgICAgb25lX2FnbyA+PSAwOyBvbmVfYWdvLS0pIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9pbmZvX29wczsgaSsrKSB7CisJCQkJaW50IGluZm9fb3BlcmFuZCA9IGluZm9fb3BlcmFuZHNbaV07CisJCQkJaWYgKGluZm9fb3BlcmFuZCA8IENBTExFUl9VTktOT1dOX0JBU0UpCXsKKwkJCQkJLyogV2VpcmQ7IHJlc2VydmVkIHZhbHVlLCBpZ25vcmUgaXQuICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCS8qIFNraXAgaW5mbyBvcHMgd2hpY2ggYXJlIG5vdCBpbiB0aGUKKwkJCQkgKiAib25lX2FnbyIgbW9kZSB3ZSB3YW50IHJpZ2h0IG5vdy4KKwkJCQkgKi8KKwkJCQlpZiAoKChpbmZvX29wZXJhbmQgJiBPTkVfQlVORExFX0FHT19GTEFHKSAhPSAwKQorCQkJCSAgICAhPSAob25lX2FnbyAhPSAwKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBDbGVhciB0aGUgZmxhZyB0byBtYWtlIGxhdGVyIGNoZWNraW5nCisJCQkJICogZWFzaWVyLiAqLworCQkJCWluZm9fb3BlcmFuZCAmPSB+T05FX0JVTkRMRV9BR09fRkxBRzsKKworCQkJCS8qIERlZmF1bHQgdG8gbG9va2luZyBhdCBQQ19JTl9MUl9GTEFHLiAqLworCQkJCWlmIChpbmZvX29wZXJhbmQgJiBQQ19JTl9MUl9GTEFHKQorCQkJCQlsb2NhdGlvbi0+cGNfbG9jYXRpb24gPQorCQkJCQkJUENfTE9DX0lOX0xSOworCQkJCWVsc2UKKwkJCQkJbG9jYXRpb24tPnBjX2xvY2F0aW9uID0KKwkJCQkJCVBDX0xPQ19PTl9TVEFDSzsKKworCQkJCXN3aXRjaCAoaW5mb19vcGVyYW5kKSB7CisJCQkJY2FzZSBDQUxMRVJfVU5LTk9XTl9CQVNFOgorCQkJCQlsb2NhdGlvbi0+cGNfbG9jYXRpb24gPSBQQ19MT0NfVU5LTk9XTjsKKwkJCQkJbG9jYXRpb24tPnNwX2xvY2F0aW9uID0gU1BfTE9DX1VOS05PV047CisJCQkJCXJldHVybjsKKworCQkJCWNhc2UgQ0FMTEVSX1NQX0lOX1I1Ml9CQVNFOgorCQkJCWNhc2UgQ0FMTEVSX1NQX0lOX1I1Ml9CQVNFIHwgUENfSU5fTFJfRkxBRzoKKwkJCQkJbG9jYXRpb24tPnNwX2xvY2F0aW9uID0gU1BfTE9DX0lOX1I1MjsKKwkJCQkJcmV0dXJuOworCisJCQkJZGVmYXVsdDoKKwkJCQl7CisJCQkJCWNvbnN0IHVuc2lnbmVkIGludCB2YWwgPSBpbmZvX29wZXJhbmQKKwkJCQkJCS0gQ0FMTEVSX1NQX09GRlNFVF9CQVNFOworCQkJCQljb25zdCB1bnNpZ25lZCBpbnQgc3Bfb2Zmc2V0ID0KKwkJCQkJCSh2YWwgPj4gTlVNX0lORk9fT1BfRkxBR1MpICogODsKKwkJCQkJaWYgKHNwX29mZnNldCA8IDMyNzY4KSB7CisJCQkJCQkvKiBUaGlzIGlzIGEgcHJvcGVybHkgZW5jb2RlZAorCQkJCQkJICogU1Agb2Zmc2V0LiAqLworCQkJCQkJbG9jYXRpb24tPnNwX2xvY2F0aW9uID0KKwkJCQkJCQlTUF9MT0NfT0ZGU0VUOworCQkJCQkJbG9jYXRpb24tPnNwX29mZnNldCA9CisJCQkJCQkJc3Bfb2Zmc2V0OworCQkJCQkJcmV0dXJuOworCQkJCQl9IGVsc2UgeworCQkJCQkJLyogVGhpcyBsb29rZWQgbGlrZSBhbiBTUAorCQkJCQkJICogb2Zmc2V0LCBidXQgaXQncyBvdXRzaWRlCisJCQkJCQkgKiB0aGUgbGVnYWwgcmFuZ2UsIHNvIHRoaXMKKwkJCQkJCSAqIG11c3QgYmUgYW4gdW5yZWNvZ25pemVkCisJCQkJCQkgKiBpbmZvIG9wZXJhbmQuICBJZ25vcmUgaXQuCisJCQkJCQkgKi8KKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoc2Vlbl90ZXJtaW5hdGluZ19idW5kbGUpIHsKKwkJCS8qIFdlIHNhdyBhIHRlcm1pbmF0aW5nIGJ1bmRsZSBkdXJpbmcgdGhlIHByZXZpb3VzCisJCQkgKiBpdGVyYXRpb24sIHNvIHdlIHdlcmUgb25seSBsb29raW5nIGZvciBhbiBpbmZvIG9wLgorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCWlmIChidW5kbGUuYml0cyA9PSAwKSB7CisJCQkvKiBXYWNreSB0ZXJtaW5hdGluZyBidW5kbGUuIFN0b3AgbG9vcGluZywgYW5kIGhvcGUKKwkJCSAqIHdlJ3ZlIGFscmVhZHkgc2VlbiBlbm91Z2ggdG8gZmluZCB0aGUgY2FsbGVyLgorCQkJICovCisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFRyeSB0byBkZXRlcm1pbmUgY2FsbGVyJ3MgU1AuCisJCSAqLworCisJCWlmICghc3BfZGV0ZXJtaW5lZCkgeworCQkJaW50IGFkanVzdDsKKwkJCWlmIChidF9oYXNfYWRkaV9zcCgmYnVuZGxlLCAmYWRqdXN0KSkgeworCQkJCWxvY2F0aW9uLT5zcF9sb2NhdGlvbiA9IFNQX0xPQ19PRkZTRVQ7CisKKwkJCQlpZiAoYWRqdXN0IDw9IDApIHsKKwkJCQkJLyogV2UgYXJlIGluIHByb2xvZyBhYm91dCB0byBhZGp1c3QKKwkJCQkJICogU1AuICovCisJCQkJCWxvY2F0aW9uLT5zcF9vZmZzZXQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdlIGFyZSBpbiBlcGlsb2cgcmVzdG9yaW5nIFNQLiAqLworCQkJCQlsb2NhdGlvbi0+c3Bfb2Zmc2V0ID0gYWRqdXN0OworCQkJCX0KKworCQkJCXNwX2RldGVybWluZWQgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoYnRfaGFzX21vdmVfcjUyX3NwKCZidW5kbGUpKSB7CisJCQkJCS8qIE1heWJlIGluIHByb2xvZywgY3JlYXRpbmcgYW4KKwkJCQkJICogYWxsb2NhLXN0eWxlIGZyYW1lLiAgQnV0IG1heWJlIGluCisJCQkJCSAqIHRoZSBtaWRkbGUgb2YgYSBmaXhlZC1zaXplIGZyYW1lCisJCQkJCSAqIGNsb2JiZXJpbmcgcjUyIHdpdGggU1AuCisJCQkJCSAqLworCQkJCQlzcF9tb3ZlZF90b19yNTIgPSB0cnVlOworCQkJCX0KKworCQkJCWlmIChidF9tb2RpZmllc19zcCgmYnVuZGxlKSkgeworCQkJCQlpZiAoc3BfbW92ZWRfdG9fcjUyKSB7CisJCQkJCQkvKiBXZSBzYXcgU1AgZ2V0IHNhdmVkIGludG8KKwkJCQkJCSAqIHI1MiBlYXJsaWVyIChvciBub3cpLCB3aGljaAorCQkJCQkJICogbXVzdCBoYXZlIGJlZW4gaW4gdGhlCisJCQkJCQkgKiBwcm9sb2csIHNvIHdlIG5vdyBrbm93IHRoYXQKKwkJCQkJCSAqIFNQIGlzIHN0aWxsIGhvbGRpbmcgdGhlCisJCQkJCQkgKiBjYWxsZXIncyBzcCB2YWx1ZS4KKwkJCQkJCSAqLworCQkJCQkJbG9jYXRpb24tPnNwX2xvY2F0aW9uID0KKwkJCQkJCQlTUF9MT0NfT0ZGU0VUOworCQkJCQkJbG9jYXRpb24tPnNwX29mZnNldCA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBTb21lb25lIG11c3QgaGF2ZSBzYXZlZAorCQkJCQkJICogYXNpZGUgdGhlIGNhbGxlcidzIFNQIHZhbHVlCisJCQkJCQkgKiBpbnRvIHI1Miwgc28gcjUyIGhvbGRzIHRoZQorCQkJCQkJICogY3VycmVudCB2YWx1ZS4KKwkJCQkJCSAqLworCQkJCQkJbG9jYXRpb24tPnNwX2xvY2F0aW9uID0KKwkJCQkJCQlTUF9MT0NfSU5fUjUyOworCQkJCQl9CisJCQkJCXNwX2RldGVybWluZWQgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChidF9oYXNfaXJldCgmYnVuZGxlKSkgeworCQkJLyogVGhpcyBpcyBhIHRlcm1pbmF0aW5nIGJ1bmRsZS4gKi8KKwkJCXNlZW5fdGVybWluYXRpbmdfYnVuZGxlID0gdHJ1ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVHJ5IHRvIGRldGVybWluZSBjYWxsZXIncyBQQy4KKwkJICovCisKKwkJanJwX3JlZyA9IC0xOworCQloYXNfanJwID0gYnRfaGFzX2pycCgmYnVuZGxlLCAmanJwX3JlZyk7CisJCWlmIChoYXNfanJwKQorCQkJc2Vlbl90ZXJtaW5hdGluZ19idW5kbGUgPSB0cnVlOworCisJCWlmIChsb2NhdGlvbi0+cGNfbG9jYXRpb24gPT0gUENfTE9DX1VOS05PV04pIHsKKwkJCWlmIChoYXNfanJwKSB7CisJCQkJaWYgKGpycF9yZWcgPT0gVFJFR19MUiAmJiAhbHJfbW9kaWZpZWQpIHsKKwkJCQkJLyogTG9va3MgbGlrZSBhIGxlYWYgZnVuY3Rpb24sIG9yIGVsc2UKKwkJCQkJICogbHIgaXMgYWxyZWFkeSByZXN0b3JlZC4gKi8KKwkJCQkJbG9jYXRpb24tPnBjX2xvY2F0aW9uID0KKwkJCQkJCVBDX0xPQ19JTl9MUjsKKwkJCQl9IGVsc2UgeworCQkJCQlsb2NhdGlvbi0+cGNfbG9jYXRpb24gPQorCQkJCQkJUENfTE9DX09OX1NUQUNLOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoYnRfaGFzX3N3X3NwX2xyKCZidW5kbGUpKSB7CisJCQkJLyogSW4gcHJvbG9nLCBzcGlsbGluZyBpbml0aWFsIGxyIHRvIHN0YWNrLiAqLworCQkJCWxvY2F0aW9uLT5wY19sb2NhdGlvbiA9IFBDX0xPQ19JTl9MUjsKKwkJCX0gZWxzZSBpZiAoYnRfbW9kaWZpZXNfbHIoJmJ1bmRsZSkpIHsKKwkJCQlscl9tb2RpZmllZCA9IHRydWU7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgYmFja3RyYWNlX2luaXQoQmFja3RyYWNlSXRlcmF0b3IgKnN0YXRlLAorCQkgICAgQmFja3RyYWNlTWVtb3J5UmVhZGVyIHJlYWRfbWVtb3J5X2Z1bmMsCisJCSAgICB2b2lkICpyZWFkX21lbW9yeV9mdW5jX2V4dHJhLAorCQkgICAgVmlydHVhbEFkZHJlc3MgcGMsIFZpcnR1YWxBZGRyZXNzIGxyLAorCQkgICAgVmlydHVhbEFkZHJlc3Mgc3AsIFZpcnR1YWxBZGRyZXNzIHI1MikKK3sKKwlDYWxsZXJMb2NhdGlvbiBsb2NhdGlvbjsKKwlWaXJ0dWFsQWRkcmVzcyBmcCwgaW5pdGlhbF9mcmFtZV9jYWxsZXJfcGM7CisKKwlpZiAocmVhZF9tZW1vcnlfZnVuYyA9PSBOVUxMKSB7CisJCXJlYWRfbWVtb3J5X2Z1bmMgPSBidF9yZWFkX21lbW9yeTsKKwl9CisKKwkvKiBGaW5kIG91dCB3aGVyZSB3ZSBhcmUgaW4gdGhlIGluaXRpYWwgZnJhbWUuICovCisJZmluZF9jYWxsZXJfcGNfYW5kX2NhbGxlcl9zcCgmbG9jYXRpb24sIHBjLAorCQkJCSAgICAgcmVhZF9tZW1vcnlfZnVuYywgcmVhZF9tZW1vcnlfZnVuY19leHRyYSk7CisKKwlzd2l0Y2ggKGxvY2F0aW9uLnNwX2xvY2F0aW9uKSB7CisJY2FzZSBTUF9MT0NfVU5LTk9XTjoKKwkJLyogR2l2ZSB1cC4gKi8KKwkJZnAgPSAtMTsKKwkJYnJlYWs7CisKKwljYXNlIFNQX0xPQ19JTl9SNTI6CisJCWZwID0gcjUyOworCQlicmVhazsKKworCWNhc2UgU1BfTE9DX09GRlNFVDoKKwkJZnAgPSBzcCArIGxvY2F0aW9uLnNwX29mZnNldDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBHaXZlIHVwLiAqLworCQlmcCA9IC0xOworCQlicmVhazsKKwl9CisKKwkvKiBUaGUgZnJhbWUgcG9pbnRlciBzaG91bGQgdGhlb3JldGljYWxseSBiZSBhbGlnbmVkIG1vZCA4LiBJZgorCSAqIGl0J3Mgbm90IGV2ZW4gYWxpZ25lZCBtb2QgNCB0aGVuIHNvbWV0aGluZyB0ZXJyaWJsZSBoYXBwZW5lZAorCSAqIGFuZCB3ZSBzaG91bGQgbWFyayBpdCBhcyBpbnZhbGlkLgorCSAqLworCWlmIChmcCAlIDQgIT0gMCkKKwkJZnAgPSAtMTsKKworCS8qIC0xIG1lYW5zICJkb24ndCBrbm93IGluaXRpYWxfZnJhbWVfY2FsbGVyX3BjIi4gKi8KKwlpbml0aWFsX2ZyYW1lX2NhbGxlcl9wYyA9IC0xOworCisJc3dpdGNoIChsb2NhdGlvbi5wY19sb2NhdGlvbikgeworCWNhc2UgUENfTE9DX1VOS05PV046CisJCS8qIEdpdmUgdXAuICovCisJCWZwID0gLTE7CisJCWJyZWFrOworCisJY2FzZSBQQ19MT0NfSU5fTFI6CisJCWlmIChsciA9PSAwIHx8IGxyICUgVElMRV9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTICE9IDApIHsKKwkJCS8qIEdpdmUgdXAuICovCisJCQlmcCA9IC0xOworCQl9IGVsc2UgeworCQkJaW5pdGlhbF9mcmFtZV9jYWxsZXJfcGMgPSBscjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUENfTE9DX09OX1NUQUNLOgorCQkvKiBMZWF2ZSBpbml0aWFsX2ZyYW1lX2NhbGxlcl9wYyBhcyAtMSwKKwkJICogbWVhbmluZyBjaGVjayB0aGUgc3RhY2suCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEdpdmUgdXAuICovCisJCWZwID0gLTE7CisJCWJyZWFrOworCX0KKworCXN0YXRlLT5wYyA9IHBjOworCXN0YXRlLT5zcCA9IHNwOworCXN0YXRlLT5mcCA9IGZwOworCXN0YXRlLT5pbml0aWFsX2ZyYW1lX2NhbGxlcl9wYyA9IGluaXRpYWxfZnJhbWVfY2FsbGVyX3BjOworCXN0YXRlLT5yZWFkX21lbW9yeV9mdW5jID0gcmVhZF9tZW1vcnlfZnVuYzsKKwlzdGF0ZS0+cmVhZF9tZW1vcnlfZnVuY19leHRyYSA9IHJlYWRfbWVtb3J5X2Z1bmNfZXh0cmE7Cit9CisKK2Jvb2wgYmFja3RyYWNlX25leHQoQmFja3RyYWNlSXRlcmF0b3IgKnN0YXRlKQoreworCVZpcnR1YWxBZGRyZXNzIG5leHRfZnAsIG5leHRfcGMsIG5leHRfZnJhbWVbMl07CisKKwlpZiAoc3RhdGUtPmZwID09IC0xKSB7CisJCS8qIE5vIHBhcmVudCBmcmFtZS4gKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFRyeSB0byByZWFkIHRoZSBmcmFtZSBsaW5rYWdlIGRhdGEgY2hhaW5pbmcgdG8gdGhlIG5leHQgZnVuY3Rpb24uICovCisJaWYgKCFzdGF0ZS0+cmVhZF9tZW1vcnlfZnVuYygmbmV4dF9mcmFtZSwgc3RhdGUtPmZwLCBzaXplb2YgbmV4dF9mcmFtZSwKKwkJCQkgICAgIHN0YXRlLT5yZWFkX21lbW9yeV9mdW5jX2V4dHJhKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbmV4dF9mcCA9IG5leHRfZnJhbWVbMV07CisJaWYgKG5leHRfZnAgJSA0ICE9IDApIHsKKwkJLyogQ2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpcyBzdXNwZWN0LCBzbyBnaXZlIHVwLgorCQkgKiBUZWNobmljYWxseSBpdCBzaG91bGQgYmUgYWxpZ25lZCBtb2QgOCwgYnV0IHdlIHdpbGwKKwkJICogYmUgZm9yZ2l2aW5nIGhlcmUuCisJCSAqLworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHN0YXRlLT5pbml0aWFsX2ZyYW1lX2NhbGxlcl9wYyAhPSAtMSkgeworCQkvKiBXZSBtdXN0IGJlIGluIHRoZSBpbml0aWFsIHN0YWNrIGZyYW1lIGFuZCBhbHJlYWR5IGtub3cgdGhlCisJCSAqIGNhbGxlciBQQy4KKwkJICovCisJCW5leHRfcGMgPSBzdGF0ZS0+aW5pdGlhbF9mcmFtZV9jYWxsZXJfcGM7CisKKwkJLyogRm9yY2UgcmVhZGluZyBzdGFjayBuZXh0IHRpbWUsIGluIGNhc2Ugd2Ugd2VyZSBpbiB0aGUKKwkJICogaW5pdGlhbCBmcmFtZS4gIFdlIGRvbid0IGRvIHRoaXMgYWJvdmUganVzdCB0byBwYXJhbm9pZGx5CisJCSAqIGF2b2lkIGNoYW5naW5nIHRoZSBzdHJ1Y3QgYXQgYWxsIHdoZW4gd2UgcmV0dXJuIGZhbHNlLgorCQkgKi8KKwkJc3RhdGUtPmluaXRpYWxfZnJhbWVfY2FsbGVyX3BjID0gLTE7CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSBjYWxsZXIgUEMgZnJvbSB0aGUgZnJhbWUgbGlua2FnZSBhcmVhLiAqLworCQluZXh0X3BjID0gbmV4dF9mcmFtZVswXTsKKwkJaWYgKG5leHRfcGMgPT0gMCB8fAorCQkgICAgbmV4dF9wYyAlIFRJTEVfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUyAhPSAwKSB7CisJCQkvKiBUaGUgUEMgaXMgc3VzcGVjdCwgc28gZ2l2ZSB1cC4gKi8KKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qIFVwZGF0ZSBzdGF0ZSB0byBiZWNvbWUgdGhlIGNhbGxlcidzIHN0YWNrIGZyYW1lLiAqLworCXN0YXRlLT5wYyA9IG5leHRfcGM7CisJc3RhdGUtPnNwID0gc3RhdGUtPmZwOworCXN0YXRlLT5mcCA9IG5leHRfZnA7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2Vsc2UgLyogVElMRV9DSElQIDwgMTAgKi8KKwordm9pZCBiYWNrdHJhY2VfaW5pdChCYWNrdHJhY2VJdGVyYXRvciAqc3RhdGUsCisJCSAgICBCYWNrdHJhY2VNZW1vcnlSZWFkZXIgcmVhZF9tZW1vcnlfZnVuYywKKwkJICAgIHZvaWQgKnJlYWRfbWVtb3J5X2Z1bmNfZXh0cmEsCisJCSAgICBWaXJ0dWFsQWRkcmVzcyBwYywgVmlydHVhbEFkZHJlc3MgbHIsCisJCSAgICBWaXJ0dWFsQWRkcmVzcyBzcCwgVmlydHVhbEFkZHJlc3MgcjUyKQoreworCXN0YXRlLT5wYyA9IHBjOworCXN0YXRlLT5zcCA9IHNwOworCXN0YXRlLT5mcCA9IC0xOworCXN0YXRlLT5pbml0aWFsX2ZyYW1lX2NhbGxlcl9wYyA9IC0xOworCXN0YXRlLT5yZWFkX21lbW9yeV9mdW5jID0gcmVhZF9tZW1vcnlfZnVuYzsKKwlzdGF0ZS0+cmVhZF9tZW1vcnlfZnVuY19leHRyYSA9IHJlYWRfbWVtb3J5X2Z1bmNfZXh0cmE7Cit9CisKK2Jvb2wgYmFja3RyYWNlX25leHQoQmFja3RyYWNlSXRlcmF0b3IgKnN0YXRlKSB7IHJldHVybiBmYWxzZTsgfQorCisjZW5kaWYgLyogVElMRV9DSElQIDwgMTAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvY29tcGF0LmMgYi9hcmNoL3RpbGUva2VybmVsL2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTA2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL2NvbXBhdC5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIEFkanVzdCB1bmlzdGQuaCB0byBwcm92aWRlIDMyLWJpdCBudW1iZXJzIGFuZCBmdW5jdGlvbnMuICovCisjZGVmaW5lIF9fU1lTQ0FMTF9DT01QQVQKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21zZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGFzbS9zeXNjYWxscy5oPgorCisvKgorICogU3lzY2FsbHMgdGhhdCB0YWtlIDY0LWJpdCBudW1iZXJzIHRyYWRpdGlvbmFsbHkgdGFrZSB0aGVtIGluIDMyLWJpdAorICogImhpZ2giIGFuZCAibG93IiB2YWx1ZSBwYXJ0cyBvbiAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4KKyAqIEluIHByaW5jaXBsZSwgb25lIGNvdWxkIGltYWdpbmUgcGFzc2luZyBzb21lIHJlZ2lzdGVyIGFyZ3VtZW50cyBhcworICogZnVsbHkgNjQtYml0IG9uIFRJTEUtR3ggaW4gMzItYml0IG1vZGUsIGJ1dCBpdCBzZWVtcyBlYXNpZXIgdG8KKyAqIGFkYXB0IHRoZSB1c3VhbCBjb252ZW50aW9uLgorICovCisKK2xvbmcgY29tcGF0X3N5c190cnVuY2F0ZTY0KGNoYXIgX191c2VyICpmaWxlbmFtZSwgdTMyIGR1bW15LCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlyZXR1cm4gc3lzX3RydW5jYXRlKGZpbGVuYW1lLCAoKGxvZmZfdCloaWdoIDw8IDMyKSB8IGxvdyk7Cit9CisKK2xvbmcgY29tcGF0X3N5c19mdHJ1bmNhdGU2NCh1bnNpZ25lZCBpbnQgZmQsIHUzMiBkdW1teSwgdTMyIGxvdywgdTMyIGhpZ2gpCit7CisJcmV0dXJuIHN5c19mdHJ1bmNhdGUoZmQsICgobG9mZl90KWhpZ2ggPDwgMzIpIHwgbG93KTsKK30KKworbG9uZyBjb21wYXRfc3lzX3ByZWFkNjQodW5zaWduZWQgaW50IGZkLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJdTMyIGR1bW15LCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlyZXR1cm4gc3lzX3ByZWFkNjQoZmQsIHVidWYsIGNvdW50LCAoKGxvZmZfdCloaWdoIDw8IDMyKSB8IGxvdyk7Cit9CisKK2xvbmcgY29tcGF0X3N5c19wd3JpdGU2NCh1bnNpZ25lZCBpbnQgZmQsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY291bnQsCisJCQkgdTMyIGR1bW15LCB1MzIgbG93LCB1MzIgaGlnaCkKK3sKKwlyZXR1cm4gc3lzX3B3cml0ZTY0KGZkLCB1YnVmLCBjb3VudCwgKChsb2ZmX3QpaGlnaCA8PCAzMikgfCBsb3cpOworfQorCitsb25nIGNvbXBhdF9zeXNfbG9va3VwX2Rjb29raWUodTMyIGxvdywgdTMyIGhpZ2gsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN5c19sb29rdXBfZGNvb2tpZSgoKGxvZmZfdCloaWdoIDw8IDMyKSB8IGxvdywgYnVmLCBsZW4pOworfQorCitsb25nIGNvbXBhdF9zeXNfc3luY19maWxlX3JhbmdlMihpbnQgZmQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgdTMyIG9mZnNldF9sbywgdTMyIG9mZnNldF9oaSwKKwkJCQkgdTMyIG5ieXRlc19sbywgdTMyIG5ieXRlc19oaSkKK3sKKwlyZXR1cm4gc3lzX3N5bmNfZmlsZV9yYW5nZShmZCwgKChsb2ZmX3Qpb2Zmc2V0X2hpIDw8IDMyKSB8IG9mZnNldF9sbywKKwkJCQkgICAoKGxvZmZfdCluYnl0ZXNfaGkgPDwgMzIpIHwgbmJ5dGVzX2xvLAorCQkJCSAgIGZsYWdzKTsKK30KKworbG9uZyBjb21wYXRfc3lzX2ZhbGxvY2F0ZShpbnQgZmQsIGludCBtb2RlLAorCQkJICB1MzIgb2Zmc2V0X2xvLCB1MzIgb2Zmc2V0X2hpLAorCQkJICB1MzIgbGVuX2xvLCB1MzIgbGVuX2hpKQoreworCXJldHVybiBzeXNfZmFsbG9jYXRlKGZkLCBtb2RlLCAoKGxvZmZfdClvZmZzZXRfaGkgPDwgMzIpIHwgb2Zmc2V0X2xvLAorCQkJICAgICAoKGxvZmZfdClsZW5faGkgPDwgMzIpIHwgbGVuX2xvKTsKK30KKworCisKK2xvbmcgY29tcGF0X3N5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwoY29tcGF0X3BpZF90IHBpZCwKKwkJCQkgICAgICBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqaW50ZXJ2YWwpCit7CisJc3RydWN0IHRpbWVzcGVjIHQ7CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisKKwlzZXRfZnMoS0VSTkVMX0RTKTsKKwlyZXQgPSBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZCwKKwkJCQkJKHN0cnVjdCB0aW1lc3BlYyBfX2ZvcmNlIF9fdXNlciAqKSZ0KTsKKwlzZXRfZnMob2xkX2ZzKTsKKwlpZiAocHV0X2NvbXBhdF90aW1lc3BlYygmdCwgaW50ZXJ2YWwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIHVzdWFsIGNvbXBhdF9zeXNfbXNnc25kKCkgYW5kIF9tc2dyY3YoKSBzZWVtIHRvIGJlIGFzc3VtaW5nCisgKiBzb21lIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb24gdGhhbiBvdXIgbm9ybWFsIDMyLWJpdCB0aWxlIGNvZGUuCisgKi8KKworLyogQWxyZWFkeSBkZWZpbmVkIGluIGlwYy9jb21wYXQuYywgYnV0IHdlIG5lZWQgaXQgaGVyZS4gKi8KK3N0cnVjdCBjb21wYXRfbXNnYnVmIHsKKwljb21wYXRfbG9uZ190IG10eXBlOworCWNoYXIgbXRleHRbMV07Cit9OworCitsb25nIHRpbGVfY29tcGF0X3N5c19tc2dzbmQoaW50IG1zcWlkLAorCQkJICAgIHN0cnVjdCBjb21wYXRfbXNnYnVmIF9fdXNlciAqbXNncCwKKwkJCSAgICBzaXplX3QgbXNnc3osIGludCBtc2dmbGcpCit7CisJY29tcGF0X2xvbmdfdCBtdHlwZTsKKworCWlmIChnZXRfdXNlcihtdHlwZSwgJm1zZ3AtPm10eXBlKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGRvX21zZ3NuZChtc3FpZCwgbXR5cGUsIG1zZ3AtPm10ZXh0LCBtc2dzeiwgbXNnZmxnKTsKK30KKworbG9uZyB0aWxlX2NvbXBhdF9zeXNfbXNncmN2KGludCBtc3FpZCwKKwkJCSAgICBzdHJ1Y3QgY29tcGF0X21zZ2J1ZiBfX3VzZXIgKm1zZ3AsCisJCQkgICAgc2l6ZV90IG1zZ3N6LCBsb25nIG1zZ3R5cCwgaW50IG1zZ2ZsZykKK3sKKwlsb25nIGVyciwgbXR5cGU7CisKKwllcnIgPSAgZG9fbXNncmN2KG1zcWlkLCAmbXR5cGUsIG1zZ3AtPm10ZXh0LCBtc2dzeiwgbXNndHlwLCBtc2dmbGcpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDsKKworCWlmIChwdXRfdXNlcihtdHlwZSwgJm1zZ3AtPm10eXBlKSkKKwkJZXJyID0gLUVGQVVMVDsKKyBvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyogUHJvdmlkZSB0aGUgY29tcGF0IHN5c2NhbGwgbnVtYmVyIHRvIGNhbGwgbWFwcGluZy4gKi8KKyN1bmRlZiBfX1NZU0NBTEwKKyNkZWZpbmUgX19TWVNDQUxMKG5yLCBjYWxsKSBbbnJdID0gKGNvbXBhdF8jI2NhbGwpLAorCisvKiBUaGUgZ2VuZXJpYyB2ZXJzaW9ucyBvZiB0aGVzZSBkb24ndCB3b3JrIGZvciBUaWxlLiAqLworI2RlZmluZSBjb21wYXRfc3lzX21zZ3JjdiB0aWxlX2NvbXBhdF9zeXNfbXNncmN2CisjZGVmaW5lIGNvbXBhdF9zeXNfbXNnc25kIHRpbGVfY29tcGF0X3N5c19tc2dzbmQKKworLyogU2VlIGNvbW1lbnRzIGluIHN5cy5jICovCisjZGVmaW5lIGNvbXBhdF9zeXNfZmFkdmlzZTY0IHN5czMyX2ZhZHZpc2U2NAorI2RlZmluZSBjb21wYXRfc3lzX2ZhZHZpc2U2NF82NCBzeXMzMl9mYWR2aXNlNjRfNjQKKyNkZWZpbmUgY29tcGF0X3N5c19yZWFkYWhlYWQgc3lzMzJfcmVhZGFoZWFkCisjZGVmaW5lIGNvbXBhdF9zeXNfc3luY19maWxlX3JhbmdlIGNvbXBhdF9zeXNfc3luY19maWxlX3JhbmdlMgorCisvKiBUaGUgbmF0aXZlIDY0LWJpdCAic3RydWN0IHN0YXQiIG1hdGNoZXMgdGhlIDMyLWJpdCAic3RydWN0IHN0YXQ2NCIuICovCisjZGVmaW5lIGNvbXBhdF9zeXNfc3RhdDY0IHN5c19uZXdzdGF0CisjZGVmaW5lIGNvbXBhdF9zeXNfbHN0YXQ2NCBzeXNfbmV3bHN0YXQKKyNkZWZpbmUgY29tcGF0X3N5c19mc3RhdDY0IHN5c19uZXdmc3RhdAorI2RlZmluZSBjb21wYXRfc3lzX2ZzdGF0YXQ2NCBzeXNfbmV3ZnN0YXRhdAorCisvKiBQYXNzIGZ1bGwgNjQtYml0IHZhbHVlcyB0aHJvdWdoIHB0cmFjZS4gKi8KKyNkZWZpbmUgY29tcGF0X3N5c19wdHJhY2UgdGlsZV9jb21wYXRfc3lzX3B0cmFjZQorCisvKgorICogTm90ZSB0aGF0IHdlIGNhbid0IGluY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPiBoZXJlIHNpbmNlIHRoZSBoZWFkZXIKKyAqIGd1YXJkIHdpbGwgZGVmZWF0IHVzOyA8YXNtL3VuaXN0ZC5oPiBjaGVja3MgZm9yIF9fU1lTQ0FMTCBhcyB3ZWxsLgorICovCit2b2lkICpjb21wYXRfc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsc10gPSB7CisJWzAgLi4uIF9fTlJfc3lzY2FsbHMtMV0gPSBzeXNfbmlfc3lzY2FsbCwKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMgYi9hcmNoL3RpbGUva2VybmVsL2NvbXBhdF9zaWduYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWVmYjIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTAsMCArMSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc2lnZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhcmNoL2ludGVycnVwdHMuaD4KKworc3RydWN0IGNvbXBhdF9zaWdhY3Rpb24geworCWNvbXBhdF91cHRyX3Qgc2FfaGFuZGxlcjsKKwljb21wYXRfdWxvbmdfdCBzYV9mbGFnczsKKwljb21wYXRfdXB0cl90IHNhX3Jlc3RvcmVyOworCXNpZ3NldF90IHNhX21hc2sgX19wYWNrZWQ7Cit9OworCitzdHJ1Y3QgY29tcGF0X3NpZ2FsdHN0YWNrIHsKKwljb21wYXRfdXB0cl90IHNzX3NwOworCWludCBzc19mbGFnczsKKwljb21wYXRfc2l6ZV90IHNzX3NpemU7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Vjb250ZXh0IHsKKwljb21wYXRfdWxvbmdfdAkgIHVjX2ZsYWdzOworCWNvbXBhdF91cHRyX3QgICAgIHVjX2xpbms7CisJc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjawkgIHVjX3N0YWNrOworCXN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OworCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCit9OworCitzdHJ1Y3QgY29tcGF0X3NpZ2luZm8geworCWludCBzaV9zaWdubzsKKwlpbnQgc2lfZXJybm87CisJaW50IHNpX2NvZGU7CisKKwl1bmlvbiB7CisJCWludCBfcGFkW1NJX1BBRF9TSVpFXTsKKworCQkvKiBraWxsKCkgKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCXVuc2lnbmVkIGludCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KKwkJfSBfa2lsbDsKKworCQkvKiBQT1NJWC4xYiB0aW1lcnMgKi8KKwkJc3RydWN0IHsKKwkJCWNvbXBhdF90aW1lcl90IF90aWQ7CS8qIHRpbWVyIGlkICovCisJCQlpbnQgX292ZXJydW47CQkvKiBvdmVycnVuIGNvdW50ICovCisJCQljb21wYXRfc2lndmFsX3QgX3NpZ3ZhbDsJLyogc2FtZSBhcyBiZWxvdyAqLworCQkJaW50IF9zeXNfcHJpdmF0ZTsJLyogbm90IHRvIGJlIHBhc3NlZCB0byB1c2VyICovCisJCQlpbnQgX292ZXJydW5faW5jcjsJLyogYW1vdW50IHRvIGFkZCB0byBvdmVycnVuICovCisJCX0gX3RpbWVyOworCisJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGludCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCXVuc2lnbmVkIGludCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KKwkJCWNvbXBhdF9zaWd2YWxfdCBfc2lndmFsOworCQl9IF9ydDsKKworCQkvKiBTSUdDSExEICovCisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpbnQgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KKwkJCXVuc2lnbmVkIGludCBfdWlkOwkvKiBzZW5kZXIncyB1aWQgKi8KKwkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCisJCQljb21wYXRfY2xvY2tfdCBfdXRpbWU7CisJCQljb21wYXRfY2xvY2tfdCBfc3RpbWU7CisJCX0gX3NpZ2NobGQ7CisKKwkJLyogU0lHSUxMLCBTSUdGUEUsIFNJR1NFR1YsIFNJR0JVUyAqLworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IF9hZGRyOwkvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCisjaWZkZWYgX19BUkNIX1NJX1RSQVBOTworCQkJaW50IF90cmFwbm87CS8qIFRSQVAgIyB3aGljaCBjYXVzZWQgdGhlIHNpZ25hbCAqLworI2VuZGlmCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCisJCQlpbnQgX2ZkOworCQl9IF9zaWdwb2xsOworCX0gX3NpZmllbGRzOworfTsKKworc3RydWN0IGNvbXBhdF9ydF9zaWdmcmFtZSB7CisJdW5zaWduZWQgY2hhciBzYXZlX2FyZWFbQ19BQklfU0FWRV9BUkVBX1NJWkVdOyAvKiBjYWxsZXIgc2F2ZSBhcmVhICovCisJc3RydWN0IGNvbXBhdF9zaWdpbmZvIGluZm87CisJc3RydWN0IGNvbXBhdF91Y29udGV4dCB1YzsKK307CisKKyNkZWZpbmUgX0JMT0NLQUJMRSAofihzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkpCisKK2xvbmcgY29tcGF0X3N5c19ydF9zaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IGNvbXBhdF9zaWdhY3Rpb24gX191c2VyICphY3QsCisJCQkgICAgIHN0cnVjdCBjb21wYXRfc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKKwkJCSAgICAgc2l6ZV90IHNpZ3NldHNpemUpCit7CisJc3RydWN0IGtfc2lnYWN0aW9uIG5ld19zYSwgb2xkX3NhOworCWludCByZXQgPSAtRUlOVkFMOworCisJLyogWFhYOiBEb24ndCBwcmVjbHVkZSBoYW5kbGluZyBkaWZmZXJlbnQgc2l6ZWQgc2lnc2V0X3Qncy4gICovCisJaWYgKHNpZ3NldHNpemUgIT0gc2l6ZW9mKHNpZ3NldF90KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYWN0KSB7CisJCWNvbXBhdF91cHRyX3QgaGFuZGxlciwgcmVzdG9yZXI7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGFjdCwgc2l6ZW9mKCphY3QpKSB8fAorCQkgICAgX19nZXRfdXNlcihoYW5kbGVyLCAmYWN0LT5zYV9oYW5kbGVyKSB8fAorCQkgICAgX19nZXRfdXNlcihuZXdfc2Euc2Euc2FfZmxhZ3MsICZhY3QtPnNhX2ZsYWdzKSB8fAorCQkgICAgX19nZXRfdXNlcihyZXN0b3JlciwgJmFjdC0+c2FfcmVzdG9yZXIpIHx8CisJCSAgICBfX2NvcHlfZnJvbV91c2VyKCZuZXdfc2Euc2Euc2FfbWFzaywgJmFjdC0+c2FfbWFzaywKKwkJCQkgICAgIHNpemVvZihzaWdzZXRfdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCW5ld19zYS5zYS5zYV9oYW5kbGVyID0gY29tcGF0X3B0cihoYW5kbGVyKTsKKwkJbmV3X3NhLnNhLnNhX3Jlc3RvcmVyID0gY29tcGF0X3B0cihyZXN0b3Jlcik7CisJfQorCisJcmV0ID0gZG9fc2lnYWN0aW9uKHNpZywgYWN0ID8gJm5ld19zYSA6IE5VTEwsIG9hY3QgPyAmb2xkX3NhIDogTlVMTCk7CisKKwlpZiAoIXJldCAmJiBvYWN0KSB7CisJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgb2FjdCwgc2l6ZW9mKCpvYWN0KSkgfHwKKwkJICAgIF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdChvbGRfc2Euc2Euc2FfaGFuZGxlciksCisJCQkgICAgICAgJm9hY3QtPnNhX2hhbmRsZXIpIHx8CisJCSAgICBfX3B1dF91c2VyKHB0cl90b19jb21wYXQob2xkX3NhLnNhLnNhX3Jlc3RvcmVyKSwKKwkJCSAgICAgICAmb2FjdC0+c2FfcmVzdG9yZXIpIHx8CisJCSAgICBfX3B1dF91c2VyKG9sZF9zYS5zYS5zYV9mbGFncywgJm9hY3QtPnNhX2ZsYWdzKSB8fAorCQkgICAgX19jb3B5X3RvX3VzZXIoJm9hY3QtPnNhX21hc2ssICZvbGRfc2Euc2Euc2FfbWFzaywKKwkJCQkgICBzaXplb2Yoc2lnc2V0X3QpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitsb25nIGNvbXBhdF9zeXNfcnRfc2lncXVldWVpbmZvKGludCBwaWQsIGludCBzaWcsCisJCQkJc3RydWN0IGNvbXBhdF9zaWdpbmZvIF9fdXNlciAqdWluZm8pCit7CisJc2lnaW5mb190IGluZm87CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CisKKwlpZiAoY29weV9zaWdpbmZvX2Zyb21fdXNlcjMyKCZpbmZvLCB1aW5mbykpCisJCXJldHVybiAtRUZBVUxUOworCXNldF9mcyhLRVJORUxfRFMpOworCXJldCA9IHN5c19ydF9zaWdxdWV1ZWluZm8ocGlkLCBzaWcsIChzaWdpbmZvX3QgX19mb3JjZSBfX3VzZXIgKikmaW5mbyk7CisJc2V0X2ZzKG9sZF9mcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNvcHlfc2lnaW5mb190b191c2VyMzIoc3RydWN0IGNvbXBhdF9zaWdpbmZvIF9fdXNlciAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKK3sKKwlpbnQgZXJyOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB0bywgc2l6ZW9mKHN0cnVjdCBjb21wYXRfc2lnaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIElmIHlvdSBjaGFuZ2Ugc2lnaW5mb190IHN0cnVjdHVyZSwgcGxlYXNlIG1ha2Ugc3VyZSB0aGF0CisJICAgdGhpcyBjb2RlIGlzIGZpeGVkIGFjY29yZGluZ2x5LgorCSAgIEl0IHNob3VsZCBuZXZlciBjb3B5IGFueSBwYWQgY29udGFpbmVkIGluIHRoZSBzdHJ1Y3R1cmUKKwkgICB0byBhdm9pZCBzZWN1cml0eSBsZWFrcywgYnV0IG11c3QgY29weSB0aGUgZ2VuZXJpYworCSAgIDMgaW50cyBwbHVzIHRoZSByZWxldmFudCB1bmlvbiBtZW1iZXIuICAqLworCWVyciA9IF9fcHV0X3VzZXIoZnJvbS0+c2lfc2lnbm8sICZ0by0+c2lfc2lnbm8pOworCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX2Vycm5vLCAmdG8tPnNpX2Vycm5vKTsKKwllcnIgfD0gX19wdXRfdXNlcigoc2hvcnQpZnJvbS0+c2lfY29kZSwgJnRvLT5zaV9jb2RlKTsKKworCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkgeworCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9waWQsICZ0by0+c2lfcGlkKTsKKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoZnJvbS0+c2lfcHRyKSwgJnRvLT5zaV9wdHIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZpcnN0IDMyYml0cyBvZiB1bmlvbnMgYXJlIGFsd2F5cyBwcmVzZW50OgorCQkgKiBzaV9waWQgPT09IHNpX2JhbmQgPT09IHNpX3RpZCA9PT0gc2lfYWRkcihMUyBoYWxmKQorCQkgKi8KKwkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+X3NpZmllbGRzLl9wYWRbMF0sCisJCQkJICAmdG8tPl9zaWZpZWxkcy5fcGFkWzBdKTsKKwkJc3dpdGNoIChmcm9tLT5zaV9jb2RlID4+IDE2KSB7CisJCWNhc2UgX19TSV9GQVVMVCA+PiAxNjoKKwkJCWJyZWFrOworCQljYXNlIF9fU0lfQ0hMRCA+PiAxNjoKKwkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3V0aW1lLCAmdG8tPnNpX3V0aW1lKTsKKwkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3N0aW1lLCAmdG8tPnNpX3N0aW1lKTsKKwkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3N0YXR1cywgJnRvLT5zaV9zdGF0dXMpOworCQkJLyogRkFMTCBUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCWNhc2UgX19TSV9LSUxMID4+IDE2OgorCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfdWlkLCAmdG8tPnNpX3VpZCk7CisJCQlicmVhazsKKwkJY2FzZSBfX1NJX1BPTEwgPj4gMTY6CisJCQllcnIgfD0gX19wdXRfdXNlcihmcm9tLT5zaV9mZCwgJnRvLT5zaV9mZCk7CisJCQlicmVhazsKKwkJY2FzZSBfX1NJX1RJTUVSID4+IDE2OgorCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfb3ZlcnJ1biwgJnRvLT5zaV9vdmVycnVuKTsKKwkJCWVyciB8PSBfX3B1dF91c2VyKHB0cl90b19jb21wYXQoZnJvbS0+c2lfcHRyKSwKKwkJCQkJICAmdG8tPnNpX3B0cik7CisJCQlicmVhazsKKwkJCSAvKiBUaGlzIGlzIG5vdCBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBhcyBvZiBub3cuICAqLworCQljYXNlIF9fU0lfUlQgPj4gMTY6CisJCWNhc2UgX19TSV9NRVNHUSA+PiAxNjoKKwkJCWVyciB8PSBfX3B1dF91c2VyKGZyb20tPnNpX3VpZCwgJnRvLT5zaV91aWQpOworCQkJZXJyIHw9IF9fcHV0X3VzZXIoZnJvbS0+c2lfaW50LCAmdG8tPnNpX2ludCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitpbnQgY29weV9zaWdpbmZvX2Zyb21fdXNlcjMyKHNpZ2luZm9fdCAqdG8sIHN0cnVjdCBjb21wYXRfc2lnaW5mbyBfX3VzZXIgKmZyb20pCit7CisJaW50IGVycjsKKwl1MzIgcHRyMzI7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgZnJvbSwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfc2lnaW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IF9fZ2V0X3VzZXIodG8tPnNpX3NpZ25vLCAmZnJvbS0+c2lfc2lnbm8pOworCWVyciB8PSBfX2dldF91c2VyKHRvLT5zaV9lcnJubywgJmZyb20tPnNpX2Vycm5vKTsKKwllcnIgfD0gX19nZXRfdXNlcih0by0+c2lfY29kZSwgJmZyb20tPnNpX2NvZGUpOworCisJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3BpZCwgJmZyb20tPnNpX3BpZCk7CisJZXJyIHw9IF9fZ2V0X3VzZXIodG8tPnNpX3VpZCwgJmZyb20tPnNpX3VpZCk7CisJZXJyIHw9IF9fZ2V0X3VzZXIocHRyMzIsICZmcm9tLT5zaV9wdHIpOworCXRvLT5zaV9wdHIgPSBjb21wYXRfcHRyKHB0cjMyKTsKKworCXJldHVybiBlcnI7Cit9CisKK2xvbmcgX2NvbXBhdF9zeXNfc2lnYWx0c3RhY2soY29uc3Qgc3RydWN0IGNvbXBhdF9zaWdhbHRzdGFjayBfX3VzZXIgKnVzc19wdHIsCisJCQkgICAgIHN0cnVjdCBjb21wYXRfc2lnYWx0c3RhY2sgX191c2VyICp1b3NzX3B0ciwKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RhY2tfdCB1c3MsIHVvc3M7CisJaW50IHJldDsKKwltbV9zZWdtZW50X3Qgc2VnOworCisJaWYgKHVzc19wdHIpIHsKKwkJdTMyIHB0cjsKKworCQltZW1zZXQoJnVzcywgMCwgc2l6ZW9mKHN0YWNrX3QpKTsKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVzc19wdHIsIHNpemVvZigqdXNzX3B0cikpIHx8CisJCQkgICAgX19nZXRfdXNlcihwdHIsICZ1c3NfcHRyLT5zc19zcCkgfHwKKwkJCSAgICBfX2dldF91c2VyKHVzcy5zc19mbGFncywgJnVzc19wdHItPnNzX2ZsYWdzKSB8fAorCQkJICAgIF9fZ2V0X3VzZXIodXNzLnNzX3NpemUsICZ1c3NfcHRyLT5zc19zaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQl1c3Muc3Nfc3AgPSBjb21wYXRfcHRyKHB0cik7CisJfQorCXNlZyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXJldCA9IGRvX3NpZ2FsdHN0YWNrKHVzc19wdHIgPyAoc3RhY2tfdCBfX3VzZXIgX19mb3JjZSAqKSZ1c3MgOiBOVUxMLAorCQkJICAgICAoc3RhY2tfdCBfX3VzZXIgX19mb3JjZSAqKSZ1b3NzLAorCQkJICAgICAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKHJlZ3MtPnNwKSk7CisJc2V0X2ZzKHNlZyk7CisJaWYgKHJldCA+PSAwICYmIHVvc3NfcHRyKSAgeworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVvc3NfcHRyLCBzaXplb2YoKnVvc3NfcHRyKSkgfHwKKwkJICAgIF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdCh1b3NzLnNzX3NwKSwgJnVvc3NfcHRyLT5zc19zcCkgfHwKKwkJICAgIF9fcHV0X3VzZXIodW9zcy5zc19mbGFncywgJnVvc3NfcHRyLT5zc19mbGFncykgfHwKKwkJICAgIF9fcHV0X3VzZXIodW9zcy5zc19zaXplLCAmdW9zc19wdHItPnNzX3NpemUpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworbG9uZyBfY29tcGF0X3N5c19ydF9zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGNvbXBhdF9ydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lID0KKwkJKHN0cnVjdCBjb21wYXRfcnRfc2lnZnJhbWUgX191c2VyICopIGNvbXBhdF9wdHIocmVncy0+c3ApOworCXNpZ3NldF90IHNldDsKKwlsb25nIHIwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCisJCWdvdG8gYmFkZnJhbWU7CisJaWYgKF9fY29weV9mcm9tX3VzZXIoJnNldCwgJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzaXplb2Yoc2V0KSkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlzaWdkZWxzZXRtYXNrKCZzZXQsIH5fQkxPQ0tBQkxFKTsKKwlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwljdXJyZW50LT5ibG9ja2VkID0gc2V0OworCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKworCWlmIChyZXN0b3JlX3NpZ2NvbnRleHQocmVncywgJmZyYW1lLT51Yy51Y19tY29udGV4dCwgJnIwKSkKKwkJZ290byBiYWRmcmFtZTsKKworCWlmIChfY29tcGF0X3N5c19zaWdhbHRzdGFjaygmZnJhbWUtPnVjLnVjX3N0YWNrLCBOVUxMLCByZWdzKSAhPSAwKQorCQlnb3RvIGJhZGZyYW1lOworCisJcmV0dXJuIHIwOworCitiYWRmcmFtZToKKwlmb3JjZV9zaWcoU0lHU0VHViwgY3VycmVudCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hpY2ggc3RhY2sgdG8gdXNlLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqY29tcGF0X2dldF9zaWdmcmFtZShzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLAorCQkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgICBzaXplX3QgZnJhbWVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNwOworCisJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8KKwlzcCA9ICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIocmVncy0+c3ApOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93CisJICogaXQsIGRvbid0LiAgUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2UKKwkgKiB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJICovCisJaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3AgLSBmcmFtZV9zaXplKSkpCisJCXJldHVybiAodm9pZCBfX3VzZXIgX19mb3JjZSAqKS0xVUw7CisKKwkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgeworCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQorCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwl9CisKKwlzcCAtPSBmcmFtZV9zaXplOworCS8qCisJICogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgYWNjb3JkaW5nIHRvIHRoZSBUSUxFIEFCSSwKKwkgKiBpLmUuIHNvIHRoYXQgb24gZnVuY3Rpb24gZW50cnkgKHNwICYgMTUpID09IDAuCisJICovCisJc3AgJj0gLTE2VUw7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSBzcDsKK30KKworaW50IGNvbXBhdF9zZXR1cF9ydF9mcmFtZShpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCisJCQkgIHNpZ3NldF90ICpzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdG9yZXI7CisJc3RydWN0IGNvbXBhdF9ydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lOworCWludCBlcnIgPSAwOworCWludCB1c2lnOworCisJZnJhbWUgPSBjb21wYXRfZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJdXNpZyA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4KKwkJJiYgY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcAorCQkmJiBzaWcgPCAzMgorCQk/IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXBbc2lnXQorCQk6IHNpZzsKKworCS8qIEFsd2F5cyB3cml0ZSBhdCBsZWFzdCB0aGUgc2lnbmFsIG51bWJlciBmb3IgdGhlIHN0YWNrIGJhY2t0cmFjZXIuICovCisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1NJR0lORk8pIHsKKwkJLyogQXQgc2lncmV0dXJuIHRpbWUsIHJlc3RvcmUgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyB0b28uICovCisJCWVyciB8PSBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKCZmcmFtZS0+aW5mbywgaW5mbyk7CisJCXJlZ3MtPmZsYWdzIHw9IFBUX0ZMQUdTX1JFU1RPUkVfUkVHUzsKKwl9IGVsc2UgeworCQllcnIgfD0gX19wdXRfdXNlcihpbmZvLT5zaV9zaWdubywgJmZyYW1lLT5pbmZvLnNpX3NpZ25vKTsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KKwllcnIgfD0gX19jbGVhcl91c2VyKCZmcmFtZS0+c2F2ZV9hcmVhLCBzaXplb2YoZnJhbWUtPnNhdmVfYXJlYSkpOworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIocHRyX3RvX2NvbXBhdCgodm9pZCAqKShjdXJyZW50LT5zYXNfc3Nfc3ApKSwKKwkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19zcCk7CisJZXJyIHw9IF9fcHV0X3VzZXIoc2FzX3NzX2ZsYWdzKHJlZ3MtPnNwKSwKKwkJCSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CisJZXJyIHw9IHNldHVwX3NpZ2NvbnRleHQoJmZyYW1lLT51Yy51Y19tY29udGV4dCwgcmVncyk7CisJZXJyIHw9IF9fY29weV90b191c2VyKCZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2V0LCBzaXplb2YoKnNldCkpOworCWlmIChlcnIpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJcmVzdG9yZXIgPSBWRFNPX0JBU0U7CisJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKQorCQlyZXN0b3JlciA9IHB0cl90b19jb21wYXRfcmVnKGthLT5zYS5zYV9yZXN0b3Jlcik7CisKKwkvKgorCSAqIFNldCB1cCByZWdpc3RlcnMgZm9yIHNpZ25hbCBoYW5kbGVyLgorCSAqIFJlZ2lzdGVycyB0aGF0IHdlIGRvbid0IG1vZGlmeSBrZWVwIHRoZSB2YWx1ZSB0aGV5IGhhZCBmcm9tCisJICogdXNlci1zcGFjZSBhdCB0aGUgdGltZSB3ZSB0b29rIHRoZSBzaWduYWwuCisJICovCisJcmVncy0+cGMgPSBwdHJfdG9fY29tcGF0X3JlZyhrYS0+c2Euc2FfaGFuZGxlcik7CisJcmVncy0+ZXgxID0gUExfSUNTX0VYMShVU0VSX1BMLCAxKTsgLyogc2V0IGNyaXQgc2VjIGluIGhhbmRsZXIgKi8KKwlyZWdzLT5zcCA9IHB0cl90b19jb21wYXRfcmVnKGZyYW1lKTsKKwlyZWdzLT5sciA9IHJlc3RvcmVyOworCXJlZ3MtPnJlZ3NbMF0gPSAodW5zaWduZWQgbG9uZykgdXNpZzsKKworCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKSB7CisJCS8qIE5lZWQgZXh0cmEgYXJndW1lbnRzLCBzbyBtYXJrIHRvIHJlc3RvcmUgY2FsbGVyLXNhdmVzLiAqLworCQlyZWdzLT5yZWdzWzFdID0gcHRyX3RvX2NvbXBhdF9yZWcoJmZyYW1lLT5pbmZvKTsKKwkJcmVncy0+cmVnc1syXSA9IHB0cl90b19jb21wYXRfcmVnKCZmcmFtZS0+dWMpOworCQlyZWdzLT5mbGFncyB8PSBQVF9GTEFHU19DQUxMRVJfU0FWRVM7CisJfQorCisJLyoKKwkgKiBOb3RpZnkgYW55IHRyYWNlciB0aGF0IHdhcyBzaW5nbGUtc3RlcHBpbmcgaXQuCisJICogVGhlIHRyYWNlciBtYXkgd2FudCB0byBzaW5nbGUtc3RlcCBpbnNpZGUgdGhlCisJICogaGFuZGxlciB0b28uCisJICovCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApKQorCQlwdHJhY2Vfbm90aWZ5KFNJR1RSQVApOworCisJcmV0dXJuIDA7CisKK2dpdmVfc2lnc2VndjoKKwlmb3JjZV9zaWdzZWd2KHNpZywgY3VycmVudCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC90aWxlL2tlcm5lbC9lYXJseV9wcmludGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzU0ZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisKK3N0YXRpYyB2b2lkIGVhcmx5X2h2X3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIG4pCit7CisJaHZfY29uc29sZV93cml0ZSgoSFZfVmlydEFkZHIpIHMsIG4pOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgZWFybHlfaHZfY29uc29sZSA9IHsKKwkubmFtZSA9CQkiZWFybHlodiIsCisJLndyaXRlID0JZWFybHlfaHZfd3JpdGUsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorfTsKKworLyogRGlyZWN0IGludGVyZmFjZSBmb3IgZW1lcmdlbmNpZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSAqZWFybHlfY29uc29sZSA9ICZlYXJseV9odl9jb25zb2xlOworc3RhdGljIGludCBlYXJseV9jb25zb2xlX2luaXRpYWxpemVkOworc3RhdGljIGludCBlYXJseV9jb25zb2xlX2NvbXBsZXRlOworCitzdGF0aWMgdm9pZCBlYXJseV92cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwljaGFyIGJ1Zls1MTJdOworCWludCBuID0gdnNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKKwllYXJseV9jb25zb2xlLT53cml0ZShlYXJseV9jb25zb2xlLCBidWYsIG4pOworfQorCit2b2lkIGVhcmx5X3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWVhcmx5X3ZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCBlYXJseV9wYW5pYyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXJhd19sb2NhbF9pcnFfZGlzYWJsZV9hbGwoKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwllYXJseV9wcmludGsoIktlcm5lbCBwYW5pYyAtIG5vdCBzeW5jaW5nOiAiKTsKKwllYXJseV92cHJpbnRrKGZtdCwgYXApOworCWVhcmx5X2NvbnNvbGUtPndyaXRlKGVhcmx5X2NvbnNvbGUsICJcbiIsIDEpOworCXZhX2VuZChhcCk7CisJZHVtcF9zdGFjaygpOworCWh2X2hhbHQoKTsKK30KKworc3RhdGljIGludCBfX2luaXRkYXRhIGtlZXBfZWFybHk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2Vhcmx5X3ByaW50ayhjaGFyICpzdHIpCit7CisJaWYgKGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQpCisJCXJldHVybiAxOworCisJaWYgKHN0ciAhPSBOVUxMICYmIHN0cm5jbXAoc3RyLCAia2VlcCIsIDQpID09IDApCisJCWtlZXBfZWFybHkgPSAxOworCisJZWFybHlfY29uc29sZSA9ICZlYXJseV9odl9jb25zb2xlOworCWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgPSAxOworCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCkKK3sKKwllYXJseV9jb25zb2xlX2NvbXBsZXRlID0gMTsKKwlpZiAoIWVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQgfHwgIWVhcmx5X2NvbnNvbGUpCisJCXJldHVybjsKKwlpZiAoIWtlZXBfZWFybHkpIHsKKwkJZWFybHlfcHJpbnRrKCJkaXNhYmxpbmcgZWFybHkgY29uc29sZVxuIik7CisJCXVucmVnaXN0ZXJfY29uc29sZShlYXJseV9jb25zb2xlKTsKKwkJZWFybHlfY29uc29sZV9pbml0aWFsaXplZCA9IDA7CisJfSBlbHNlIHsKKwkJZWFybHlfcHJpbnRrKCJrZWVwaW5nIGVhcmx5IGNvbnNvbGVcbiIpOworCX0KK30KKwordm9pZCB3YXJuX2Vhcmx5X3ByaW50ayh2b2lkKQoreworCWlmIChlYXJseV9jb25zb2xlX2NvbXBsZXRlIHx8IGVhcmx5X2NvbnNvbGVfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwllYXJseV9wcmludGsoIlwKK01hY2hpbmUgc2h1dHRpbmcgZG93biBiZWZvcmUgY29uc29sZSBvdXRwdXQgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuXG5cCitZb3UgbWF5IHdpc2ggdG8gcmVib290IGFuZCBhZGQgdGhlIG9wdGlvbiAnZWFybHlwcmludGsnIHRvIHlvdXJcblwKK2Jvb3QgY29tbWFuZCBsaW5lIHRvIHNlZSBhbnkgZGlhZ25vc3RpYyBlYXJseSBjb25zb2xlIG91dHB1dC5cblwKKyIpOworfQorCitlYXJseV9wYXJhbSgiZWFybHlwcmludGsiLCBzZXR1cF9lYXJseV9wcmludGspOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC90aWxlL2tlcm5lbC9lbnRyeS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMDEzODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL2VudHJ5LlMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhcmNoL2FiaS5oPgorCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBibnp0IGJuZXp0CisjZW5kaWYKKworU1REX0VOVFJZKGN1cnJlbnRfdGV4dF9hZGRyKQorCXsgbW92ZSByMCwgbHI7IGpycCBsciB9CisJU1REX0VORFBST0MoY3VycmVudF90ZXh0X2FkZHIpCisKK1NURF9FTlRSWShfc2ltX3N5c2NhbGwpCisJLyoKKwkgKiBXYWl0IGZvciByMC1yOSB0byBiZSByZWFkeSAoYW5kIGxyIG9uIHRoZSBvZmYgY2hhbmNlIHdlCisJICogd2FudCB0aGUgc3lzY2FsbCB0byBsb2NhdGUgaXRzIGNhbGxlciksIHRoZW4gbWFrZSBhIG1hZ2ljCisJICogc2ltdWxhdG9yIHN5c2NhbGwuCisJICoKKwkgKiBXZSBjYXJlZnVsbHkgc3RhbGwgdW50aWwgdGhlIHJlZ2lzdGVycyBhcmUgcmVhZGFibGUgaW4gY2FzZSB0aGV5CisJICogYXJlIHRoZSB0YXJnZXQgb2YgYSBzbG93IGxvYWQsIGV0Yy4gc28gdGhhdCB0aWxlLXNpbSB3aWxsCisJICogZGVmaW5pdGVseSBiZSBhYmxlIHRvIHJlYWQgYWxsIG9mIHRoZW0gaW5zaWRlIHRoZSBtYWdpYyBzeXNjYWxsLgorCSAqCisJICogVGVjaG5pY2FsbHkgdGhpcyBpcyB3cm9uZyBmb3IgcjMtcjkgYW5kIGxyLCBzaW5jZSBhbiBpbnRlcnJ1cHQKKwkgKiBjb3VsZCBjb21lIGluIGFuZCByZXN0b3JlIHRoZSByZWdpc3RlcnMgd2l0aCBhIHNsb3cgbG9hZCByaWdodAorCSAqIGJlZm9yZSBleGVjdXRpbmcgdGhlIG10c3ByLiBXZSBtYXkgbmVlZCB0byBtb2RpZnkgdGlsZS1zaW0gdG8KKwkgKiBleHBsaWNpdGx5IHN0YWxsIGZvciB0aGlzIGNhc2UsIGJ1dCB3ZSBkbyBub3QgeWV0IGhhdmUKKwkgKiBhIHdheSB0byBpbXBsZW1lbnQgc3VjaCBhIHN0YWxsLgorCSAqLworCXsgYW5kIHplcm8sIGxyLCByOSA7IGFuZCB6ZXJvLCByOCwgcjcgfQorCXsgYW5kIHplcm8sIHI2LCByNSA7IGFuZCB6ZXJvLCByNCwgcjMgfQorCXsgYW5kIHplcm8sIHIyLCByMSA7IG10c3ByIFNJTV9DT05UUk9MLCByMCB9CisJeyBqcnAgbHIgfQorCVNURF9FTkRQUk9DKF9zaW1fc3lzY2FsbCkKKworLyoKKyAqIEltcGxlbWVudCBleGVjdmUoKS4gIFRoZSBpMzg2IGNvZGUgaGFzIGEgbm90ZSB0aGF0IGZvcmtpbmcgZnJvbSBrZXJuZWwKKyAqIHNwYWNlIHJlc3VsdHMgaW4gbm8gY29weSBvbiB3cml0ZSB1bnRpbCB0aGUgZXhlY3ZlLCBzbyB3ZSBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHdyaXRlIHRvIHRoZSBzdGFjayBoZXJlLgorICovCitTVERfRU5UUlkoa2VybmVsX2V4ZWN2ZSkKKwltb3ZlbGkgVFJFR19TWVNDQUxMX05SX05BTUUsIF9fTlJfZXhlY3ZlCisJc3dpbnQxCisJanJwIGxyCisJU1REX0VORFBST0Moa2VybmVsX2V4ZWN2ZSkKKworLyogRGVsYXkgYSBmaXhlZCBudW1iZXIgb2YgY3ljbGVzLiAqLworU1REX0VOVFJZKF9fZGVsYXkpCisJeyBhZGRpIHIwLCByMCwgLTE7IGJuenQgcjAsIC4gfQorCWpycCBscgorCVNURF9FTkRQUk9DKF9fZGVsYXkpCisKKy8qCisgKiBXZSBkb24ndCBydW4gdGhpcyBmdW5jdGlvbiBkaXJlY3RseSwgYnV0IGluc3RlYWQgY29weSBpdCB0byBhIHBhZ2UKKyAqIHdlIG1hcCBpbnRvIGV2ZXJ5IHVzZXIgcHJvY2Vzcy4gIFNlZSB2ZHNvX3NldHVwKCkuCisgKgorICogTm90ZSB0aGF0IGxpYmMgaGFzIGEgY29weSBvZiB0aGlzIGZ1bmN0aW9uIHRoYXQgaXQgdXNlcyB0byBjb21wYXJlCisgKiBhZ2FpbnN0IHRoZSBQQyB3aGVuIGEgc3RhY2sgYmFja3RyYWNlIGVuZHMsIHNvIGlmIHRoaXMgY29kZSBpcworICogY2hhbmdlZCwgdGhlIGxpYmMgaW1wbGVtZW50YXRpb24ocykgc2hvdWxkIGFsc28gYmUgdXBkYXRlZC4KKyAqLworCS5wdXNoc2VjdGlvbiAuZGF0YQorRU5UUlkoX19ydF9zaWdyZXR1cm4pCisJbW92ZWxpIFRSRUdfU1lTQ0FMTF9OUl9OQU1FLF9fTlJfcnRfc2lncmV0dXJuCisJc3dpbnQxCisJRU5EUFJPQyhfX3J0X3NpZ3JldHVybikKKwlFTlRSWShfX3J0X3NpZ3JldHVybl9lbmQpCisJLnBvcHNlY3Rpb24KKworU1REX0VOVFJZKGR1bXBfc3RhY2spCisJeyBtb3ZlIHIyLCBscjsgbG5rIHIxIH0KKwl7IG1vdmUgcjQsIHI1MjsgYWRkbGkgcjEsIHIxLCBkdW1wX3N0YWNrIC0gLiB9CisJeyBtb3ZlIHIzLCBzcDsgaiBfZHVtcF9zdGFjayB9CisJanJwIGxyICAgLyoga2VlcCBiYWNrdHJhY2VyIGhhcHB5ICovCisJU1REX0VORFBST0MoZHVtcF9zdGFjaykKKworU1REX0VOVFJZKEtCYWNrdHJhY2VJdGVyYXRvcl9pbml0X2N1cnJlbnQpCisJeyBtb3ZlIHIyLCBscjsgbG5rIHIxIH0KKwl7IG1vdmUgcjQsIHI1MjsgYWRkbGkgcjEsIHIxLCBLQmFja3RyYWNlSXRlcmF0b3JfaW5pdF9jdXJyZW50IC0gLiB9CisJeyBtb3ZlIHIzLCBzcDsgaiBfS0JhY2t0cmFjZUl0ZXJhdG9yX2luaXRfY3VycmVudCB9CisJanJwIGxyICAgLyoga2VlcCBiYWNrdHJhY2VyIGhhcHB5ICovCisJU1REX0VORFBST0MoS0JhY2t0cmFjZUl0ZXJhdG9yX2luaXRfY3VycmVudCkKKworLyoKKyAqIFJlc2V0IG91ciBzdGFjayB0byByMS9yMiAoc3AgYW5kIGtzcDArY3B1IHJlc3BlY3RpdmVseSksIHRoZW4KKyAqIGZyZWUgdGhlIG9sZCBzdGFjayAocGFzc2VkIGluIHIwKSBhbmQgcmUtaW52b2tlIGNwdV9pZGxlKCkuCisgKiBXZSB1cGRhdGUgc3AgYW5kIGtzcDAgc2ltdWx0YW5lb3VzbHkgdG8gYXZvaWQgYmFja3RyYWNlciB3YXJuaW5ncy4KKyAqLworU1REX0VOVFJZKGNwdV9pZGxlX29uX25ld19zdGFjaykKKwl7CisJIG1vdmUgc3AsIHIxCisJIG10c3ByIFNZU1RFTV9TQVZFXzFfMCwgcjIKKwl9CisJamFsIGZyZWVfdGhyZWFkX2luZm8KKwlqIGNwdV9pZGxlCisJU1REX0VORFBST0MoY3B1X2lkbGVfb25fbmV3X3N0YWNrKQorCisvKiBMb29wIGZvcmV2ZXIgb24gYSBuYXAgZHVyaW5nIFNNUCBib290LiAqLworU1REX0VOVFJZKHNtcF9uYXApCisJbmFwCisJaiBzbXBfbmFwIC8qIHdlIGFyZSBub3QgYXJjaGl0ZWN0dXJhbGx5IGd1YXJhbnRlZWQgbm90IHRvIGV4aXQgbmFwICovCisJanJwIGxyICAgIC8qIGNsdWUgaW4gdGhlIGJhY2t0cmFjZXIgKi8KKwlTVERfRU5EUFJPQyhzbXBfbmFwKQorCisvKgorICogRW5hYmxlIGludGVycnVwdHMgcmFjZWxlc3NseSBhbmQgdGhlbiBuYXAgdW50aWwgaW50ZXJydXB0ZWQuCisgKiBUaGlzIGZ1bmN0aW9uJ3MgX2NwdV9pZGxlX25hcCBhZGRyZXNzIGlzIHNwZWNpYWw7IHNlZSBpbnR2ZWMuUy4KKyAqIFdoZW4gaW50ZXJydXB0ZWQgYXQgX2NwdV9pZGxlX25hcCwgd2UgYnVtcCB0aGUgUEMgZm9yd2FyZCA4LCBhbmQKKyAqIGFzIGEgcmVzdWx0IHJldHVybiB0byB0aGUgZnVuY3Rpb24gdGhhdCBjYWxsZWQgX2NwdV9pZGxlKCkuCisgKi8KK1NURF9FTlRSWShfY3B1X2lkbGUpCisJeworCSBsbmsgcjAKKwkgbW92ZWkgcjEsIDEKKwl9CisJeworCSBhZGRsaSByMCwgcjAsIF9jcHVfaWRsZV9uYXAgLSAuCisJIG10c3ByIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCByMQorCX0KKwlJUlFfRU5BQkxFKHIyLCByMykgICAgICAgICAvKiB1bm1hc2ssIGJ1dCBzdGlsbCB3aXRoIElDUyBzZXQgKi8KKwltdHNwciBFWF9DT05URVhUXzFfMSwgcjEgICAvKiBQTDEsIElDUyBjbGVhciAqLworCW10c3ByIEVYX0NPTlRFWFRfMV8wLCByMAorCWlyZXQKKwkuZ2xvYmFsIF9jcHVfaWRsZV9uYXAKK19jcHVfaWRsZV9uYXA6CisJbmFwCisJanJwIGxyCisJU1REX0VORFBST0MoX2NwdV9pZGxlKQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9oYXJkd2FsbC5jIGIvYXJjaC90aWxlL2tlcm5lbC9oYXJkd2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGI5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL2hhcmR3YWxsLmMKQEAgLTAsMCArMSw3OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhbGwuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorCisjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisKKworLyoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgdHJhY2tzIHRoZSByZWN0YW5nbGUgZGF0YSwgZXRjLiwgYXNzb2NpYXRlZAorICogb25lLXRvLW9uZSB3aXRoIGEgInN0cnVjdCBmaWxlICoiIGZyb20gb3BlbmluZyBIQVJEV0FMTF9GSUxFLgorICogTm90ZSB0aGF0IHRoZSBmaWxlJ3MgcHJpdmF0ZSBkYXRhIHBvaW50cyBiYWNrIHRvIHRoaXMgc3RydWN0dXJlLgorICovCitzdHJ1Y3QgaGFyZHdhbGxfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAgICAgICAgICAvKiAicmVjdGFuZ2xlcyIgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGFza19oZWFkOyAgICAgICAgLyogaGVhZCBvZiB0YXNrcyBpbiB0aGlzIGhhcmR3YWxsICovCisJaW50IHVsaGNfeDsgICAgICAgICAgICAgICAgICAgICAgICAvKiB1cHBlciBsZWZ0IGhhbmQgY29ybmVyIHggY29vcmQgKi8KKwlpbnQgdWxoY195OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVwcGVyIGxlZnQgaGFuZCBjb3JuZXIgeSBjb29yZCAqLworCWludCB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVjdGFuZ2xlIHdpZHRoICovCisJaW50IGhlaWdodDsgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWN0YW5nbGUgaGVpZ2h0ICovCisJaW50IHRlYXJkb3duX2luX3Byb2dyZXNzOyAgICAgICAgICAvKiBhcmUgd2UgdGVhcmluZyB0aGlzIG9uZSBkb3duPyAqLworfTsKKworLyogQ3VycmVudGx5IGFsbG9jYXRlZCBoYXJkd2FsbCByZWN0YW5nbGVzICovCitzdGF0aWMgTElTVF9IRUFEKHJlY3RhbmdsZXMpOworCisvKgorICogR3VhcmQgY2hhbmdlcyB0byB0aGUgaGFyZHdhbGwgZGF0YSBzdHJ1Y3R1cmVzLgorICogVGhpcyBjb3VsZCBiZSBmaW5lciBncmFpbmVkIChlLmcuIG9uZSBsb2NrIGZvciB0aGUgbGlzdCBvZiBoYXJkd2FsbAorICogcmVjdGFuZ2xlcywgdGhlbiBzZXBhcmF0ZSBlbWJlZGRlZCBsb2NrcyBmb3IgZWFjaCBvbmUncyBsaXN0IG9mIHRhc2tzKSwKKyAqIGJ1dCB0aGVyZSBhcmUgc3VidGxlIGNvcnJlY3RuZXNzIGlzc3VlcyB3aGVuIHRyeWluZyB0byBzdGFydCB3aXRoCisgKiBhIHRhc2sncyAiaGFyZHdhbGwiIHBvaW50ZXIgYW5kIGxvY2sgdGhlIGNvcnJlY3QgcmVjdGFuZ2xlJ3MgZW1iZWRkZWQKKyAqIGxvY2sgaW4gdGhlIHByZXNlbmNlIG9mIGEgc2ltdWx0YW5lb3VzIGRlYWN0aXZhdGlvbiwgc28gaXQgc2VlbXMKKyAqIGVhc2llciB0byBoYXZlIGEgc2luZ2xlIGxvY2ssIGdpdmVuIHRoYXQgbm9uZSBvZiB0aGVzZSBkYXRhCisgKiBzdHJ1Y3R1cmVzIGFyZSB0b3VjaGVkIHZlcnkgZnJlcXVlbnRseSBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhoYXJkd2FsbF9sb2NrKTsKKworLyogQWxsb3cgZGlzYWJsaW5nIFVETiBhY2Nlc3MuICovCitzdGF0aWMgaW50IHVkbl9kaXNhYmxlZDsKK3N0YXRpYyBpbnQgX19pbml0IG5vdWRuKGNoYXIgKnN0cikKK3sKKwlwcl9pbmZvKCJVc2VyLXNwYWNlIFVETiBhY2Nlc3MgaXMgZGlzYWJsZWRcbiIpOworCXVkbl9kaXNhYmxlZCA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm91ZG4iLCBub3Vkbik7CisKKworLyoKKyAqIExvdy1sZXZlbCBwcmltaXRpdmVzCisgKi8KKworLyogU2V0IGEgQ1BVIGJpdCBpZiB0aGUgQ1BVIGlzIG9ubGluZS4gKi8KKyNkZWZpbmUgY3B1X29ubGluZV9zZXQoY3B1LCBkc3QpIGRvIHsgXAorCWlmIChjcHVfb25saW5lKGNwdSkpICAgICAgICAgIFwKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgZHN0KTsgICAgXAorfSB3aGlsZSAoMCkKKworCisvKiBEb2VzIHRoZSBnaXZlbiByZWN0YW5nbGUgY29udGFpbiB0aGUgZ2l2ZW4geCx5IGNvb3JkaW5hdGU/ICovCitzdGF0aWMgaW50IGNvbnRhaW5zKHN0cnVjdCBoYXJkd2FsbF9pbmZvICpyLCBpbnQgeCwgaW50IHkpCit7CisJcmV0dXJuICh4ID49IHItPnVsaGNfeCAmJiB4IDwgci0+dWxoY194ICsgci0+d2lkdGgpICYmCisJCSh5ID49IHItPnVsaGNfeSAmJiB5IDwgci0+dWxoY195ICsgci0+aGVpZ2h0KTsKK30KKworLyogQ29tcHV0ZSB0aGUgcmVjdGFuZ2xlIHBhcmFtZXRlcnMgYW5kIHZhbGlkYXRlIHRoZSBjcHVtYXNrLiAqLworc3RhdGljIGludCBzZXR1cF9yZWN0YW5nbGUoc3RydWN0IGhhcmR3YWxsX2luZm8gKnIsIHN0cnVjdCBjcHVtYXNrICptYXNrKQoreworCWludCB4LCB5LCBjcHUsIHVsaGMsIGxyaGM7CisKKwkvKiBUaGUgZmlyc3QgY3B1IGlzIHRoZSBVTEhDLCB0aGUgbGFzdCB0aGUgTFJIQy4gKi8KKwl1bGhjID0gZmluZF9maXJzdF9iaXQoY3B1bWFza19iaXRzKG1hc2spLCBucl9jcHVtYXNrX2JpdHMpOworCWxyaGMgPSBmaW5kX2xhc3RfYml0KGNwdW1hc2tfYml0cyhtYXNrKSwgbnJfY3B1bWFza19iaXRzKTsKKworCS8qIENvbXB1dGUgdGhlIHJlY3RhbmdsZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGNwdXMuICovCisJci0+dWxoY194ID0gY3B1X3godWxoYyk7CisJci0+dWxoY195ID0gY3B1X3kodWxoYyk7CisJci0+d2lkdGggPSBjcHVfeChscmhjKSAtIHItPnVsaGNfeCArIDE7CisJci0+aGVpZ2h0ID0gY3B1X3kobHJoYykgLSByLT51bGhjX3kgKyAxOworCisJLyogV2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIHBvc2l0aXZlICovCisJaWYgKHItPndpZHRoIDw9IDAgfHwgci0+aGVpZ2h0IDw9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29uZmlybSB0aGF0IHRoZSBjcHVtYXNrIGlzIGV4YWN0bHkgdGhlIHJlY3RhbmdsZS4gKi8KKwlmb3IgKHkgPSAwLCBjcHUgPSAwOyB5IDwgc21wX2hlaWdodDsgKyt5KQorCQlmb3IgKHggPSAwOyB4IDwgc21wX3dpZHRoOyArK3gsICsrY3B1KQorCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBtYXNrKSAhPSBjb250YWlucyhyLCB4LCB5KSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogTm90ZSB0aGF0IG9mZmxpbmUgY3B1cyBjYW4ndCBiZSBkcmFpbmVkIHdoZW4gdGhpcyBVRE4KKwkgKiByZWN0YW5nbGUgZXZlbnR1YWxseSBjbG9zZXMuICBXZSB1c2VkIHRvIGRldGVjdCB0aGlzCisJICogc2l0dWF0aW9uIGFuZCBwcmludCBhIHdhcm5pbmcsIGJ1dCBpdCBhbm5veWVkIHVzZXJzIGFuZAorCSAqIHRoZXkgaWdub3JlZCBpdCBhbnl3YXksIHNvIG5vdyB3ZSBqdXN0IHJldHVybiB3aXRob3V0IGEKKwkgKiB3YXJuaW5nLgorCSAqLworCXJldHVybiAwOworfQorCisvKiBEbyB0aGUgdHdvIGdpdmVuIHJlY3RhbmdsZXMgb3ZlcmxhcCBvbiBhbnkgY3B1PyAqLworc3RhdGljIGludCBvdmVybGFwcyhzdHJ1Y3QgaGFyZHdhbGxfaW5mbyAqYSwgc3RydWN0IGhhcmR3YWxsX2luZm8gKmIpCit7CisJcmV0dXJuIGEtPnVsaGNfeCArIGEtPndpZHRoID4gYi0+dWxoY194ICYmICAgIC8qIEEgbm90IHRvIHRoZSBsZWZ0ICovCisJCWItPnVsaGNfeCArIGItPndpZHRoID4gYS0+dWxoY194ICYmICAgLyogQiBub3QgdG8gdGhlIGxlZnQgKi8KKwkJYS0+dWxoY195ICsgYS0+aGVpZ2h0ID4gYi0+dWxoY195ICYmICAvKiBBIG5vdCBhYm92ZSAqLworCQliLT51bGhjX3kgKyBiLT5oZWlnaHQgPiBhLT51bGhjX3k7ICAgIC8qIEIgbm90IGFib3ZlICovCit9CisKKworLyoKKyAqIEhhcmR3YXJlIG1hbmFnZW1lbnQgb2YgaGFyZHdhbGwgc2V0dXAsIHRlYXJkb3duLCB0cmFwcGluZywKKyAqIGFuZCBlbmFibGluZy9kaXNhYmxpbmcgUEwwIGFjY2VzcyB0byB0aGUgbmV0d29ya3MuCisgKi8KKworLyogQml0IGZpZWxkIHZhbHVlcyB0byBtYXNrIHRvZ2V0aGVyIGZvciB3cml0ZXMgdG8gU1BSX1hETl9ESVJFQ1RJT05fUFJPVEVDVCAqLworZW51bSBkaXJlY3Rpb25fcHJvdGVjdCB7CisJTl9QUk9URUNUID0gKDEgPDwgMCksCisJRV9QUk9URUNUID0gKDEgPDwgMSksCisJU19QUk9URUNUID0gKDEgPDwgMiksCisJV19QUk9URUNUID0gKDEgPDwgMykKK307CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9maXJld2FsbF9pbnRlcnJ1cHRzKHZvaWQpCit7CisJcmF3X2xvY2FsX2lycV91bm1hc2tfbm93KElOVF9VRE5fRklSRVdBTEwpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2ZpcmV3YWxsX2ludGVycnVwdHModm9pZCkKK3sKKwlyYXdfbG9jYWxfaXJxX21hc2tfbm93KElOVF9VRE5fRklSRVdBTEwpOworfQorCisvKiBTZXQgdXAgaGFyZHdhbGwgb24gdGhpcyBjcHUgYmFzZWQgb24gdGhlIHBhc3NlZCBoYXJkd2FsbF9pbmZvLiAqLworc3RhdGljIHZvaWQgaGFyZHdhbGxfc2V0dXBfaXBpX2Z1bmModm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgaGFyZHdhbGxfaW5mbyAqciA9IGluZm87CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgeCA9IGNwdSAlIHNtcF93aWR0aDsKKwlpbnQgeSA9IGNwdSAvIHNtcF93aWR0aDsKKwlpbnQgYml0cyA9IDA7CisJaWYgKHggPT0gci0+dWxoY194KQorCQliaXRzIHw9IFdfUFJPVEVDVDsKKwlpZiAoeCA9PSByLT51bGhjX3ggKyByLT53aWR0aCAtIDEpCisJCWJpdHMgfD0gRV9QUk9URUNUOworCWlmICh5ID09IHItPnVsaGNfeSkKKwkJYml0cyB8PSBOX1BST1RFQ1Q7CisJaWYgKHkgPT0gci0+dWxoY195ICsgci0+aGVpZ2h0IC0gMSkKKwkJYml0cyB8PSBTX1BST1RFQ1Q7CisJQlVHX09OKGJpdHMgPT0gMCk7CisJX19pbnNuX210c3ByKFNQUl9VRE5fRElSRUNUSU9OX1BST1RFQ1QsIGJpdHMpOworCWVuYWJsZV9maXJld2FsbF9pbnRlcnJ1cHRzKCk7CisKK30KKworLyogU2V0IHVwIGFsbCBjcHVzIG9uIGVkZ2Ugb2YgcmVjdGFuZ2xlIHRvIGVuYWJsZS9kaXNhYmxlIGhhcmR3YWxsIFNQUnMuICovCitzdGF0aWMgdm9pZCBoYXJkd2FsbF9zZXR1cChzdHJ1Y3QgaGFyZHdhbGxfaW5mbyAqcikKK3sKKwlpbnQgeCwgeSwgY3B1LCBkZWx0YTsKKwlzdHJ1Y3QgY3B1bWFzayByZWN0X2NwdXM7CisKKwljcHVtYXNrX2NsZWFyKCZyZWN0X2NwdXMpOworCisJLyogRmlyc3QgaW5jbHVkZSB0aGUgdG9wIGFuZCBib3R0b20gZWRnZXMgKi8KKwljcHUgPSByLT51bGhjX3kgKiBzbXBfd2lkdGggKyByLT51bGhjX3g7CisJZGVsdGEgPSAoci0+aGVpZ2h0IC0gMSkgKiBzbXBfd2lkdGg7CisJZm9yICh4ID0gMDsgeCA8IHItPndpZHRoOyArK3gsICsrY3B1KSB7CisJCWNwdV9vbmxpbmVfc2V0KGNwdSwgJnJlY3RfY3B1cyk7CisJCWNwdV9vbmxpbmVfc2V0KGNwdSArIGRlbHRhLCAmcmVjdF9jcHVzKTsKKwl9CisKKwkvKiBUaGVuIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlcyAqLworCWNwdSAtPSByLT53aWR0aDsKKwlkZWx0YSA9IHItPndpZHRoIC0gMTsKKwlmb3IgKHkgPSAwOyB5IDwgci0+aGVpZ2h0OyArK3ksIGNwdSArPSBzbXBfd2lkdGgpIHsKKwkJY3B1X29ubGluZV9zZXQoY3B1LCAmcmVjdF9jcHVzKTsKKwkJY3B1X29ubGluZV9zZXQoY3B1ICsgZGVsdGEsICZyZWN0X2NwdXMpOworCX0KKworCS8qIFRoZW4gdGVsbCBhbGwgdGhlIGNwdXMgdG8gc2V0IHVwIHRoZWlyIHByb3RlY3Rpb24gU1BSICovCisJb25fZWFjaF9jcHVfbWFzaygmcmVjdF9jcHVzLCBoYXJkd2FsbF9zZXR1cF9pcGlfZnVuYywgciwgMSk7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGRvX2hhcmR3YWxsX3RyYXAoc3RydWN0IHB0X3JlZ3MqIHJlZ3MsIGludCBmYXVsdF9udW0pCit7CisJc3RydWN0IGhhcmR3YWxsX2luZm8gKnJlY3Q7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisJaW50IHgsIHk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgZm91bmRfcHJvY2Vzc2VzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CisJaXJxX2VudGVyKCk7CisKKwkvKiBUaGlzIHRpbGUgdHJhcHBlZCBhIG5ldHdvcmsgYWNjZXNzOyBmaW5kIHRoZSByZWN0YW5nbGUuICovCisJeCA9IGNwdSAlIHNtcF93aWR0aDsKKwl5ID0gY3B1IC8gc21wX3dpZHRoOworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWN0LCAmcmVjdGFuZ2xlcywgbGlzdCkgeworCQlpZiAoY29udGFpbnMocmVjdCwgeCwgeSkpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBub3QgdG8gZmluZCB0aGlzIGNwdSBvbiB0aGUKKwkgKiByZWN0YW5nbGUgbGlzdCwgc2luY2Ugb25seSBjcHVzIGluIHJlY3RhbmdsZXMgZ2V0IGhhcmR3YWxsZWQuCisJICogVGhlIGhhcmR3YWxsIGlzIG9ubHkgcmVtb3ZlZCBhZnRlciB0aGUgVUROIGlzIGRyYWluZWQuCisJICovCisJQlVHX09OKCZyZWN0LT5saXN0ID09ICZyZWN0YW5nbGVzKTsKKworCS8qCisJICogSWYgd2UgYWxyZWFkeSBzdGFydGVkIHRlYXJkb3duIG9uIHRoaXMgaGFyZHdhbGwsIGRvbid0IHdvcnJ5OworCSAqIHRoZSBhYm9ydCBzaWduYWwgaGFzIGJlZW4gc2VudCBhbmQgd2UgYXJlIGp1c3Qgd2FpdGluZyBmb3IgdGhpbmdzCisJICogdG8gcXVpZXNjZS4KKwkgKi8KKwlpZiAocmVjdC0+dGVhcmRvd25faW5fcHJvZ3Jlc3MpIHsKKwkJcHJfbm90aWNlKCJjcHUgJWQ6IGRldGVjdGVkIGhhcmR3YWxsIHZpb2xhdGlvbiAlI2x4IgorCQkgICAgICAgIiB3aGlsZSB0ZWFyZG93biBhbHJlYWR5IGluIHByb2dyZXNzXG4iLAorCQkgICAgICAgY3B1LCAobG9uZykgX19pbnNuX21mc3ByKFNQUl9VRE5fRElSRUNUSU9OX1BST1RFQ1QpKTsKKwkJZ290byBkb25lOworCX0KKworCS8qCisJICogS2lsbCBvZmYgYW55IHByb2Nlc3MgdGhhdCBpcyBhY3RpdmF0ZWQgaW4gdGhpcyByZWN0YW5nbGUuCisJICogV2UgYnlwYXNzIHNlY3VyaXR5IHRvIGRlbGl2ZXIgdGhlIHNpZ25hbCwgc2luY2UgaXQgbXVzdCBiZQorCSAqIG9uZSBvZiB0aGUgYWN0aXZhdGVkIHByb2Nlc3NlcyB0aGF0IGdlbmVyYXRlZCB0aGUgVUROCisJICogbWVzc2FnZSB0aGF0IGNhdXNlZCB0aGlzIHRyYXAsIGFuZCBhbGwgdGhlIGFjdGl2YXRlZAorCSAqIHByb2Nlc3NlcyBzaGFyZWQgYSBzaW5nbGUgb3BlbiBmaWxlIHNvIGFyZSBwcmV0dHkgdGlnaHRseQorCSAqIGJvdW5kIHRvZ2V0aGVyIGZyb20gYSBzZWN1cml0eSBwb2ludCBvZiB2aWV3IHRvIGJlZ2luIHdpdGguCisJICovCisJcmVjdC0+dGVhcmRvd25faW5fcHJvZ3Jlc3MgPSAxOworCXdtYigpOyAvKiBFbnN1cmUgdmlzaWJpbGl0eSBvZiByZWN0YW5nbGUgYmVmb3JlIG5vdGlmeWluZyBwcm9jZXNzZXMuICovCisJcHJfbm90aWNlKCJjcHUgJWQ6IGRldGVjdGVkIGhhcmR3YWxsIHZpb2xhdGlvbiAlI2x4Li4uXG4iLAorCSAgICAgICBjcHUsIChsb25nKSBfX2luc25fbWZzcHIoU1BSX1VETl9ESVJFQ1RJT05fUFJPVEVDVCkpOworCWluZm8uc2lfc2lnbm8gPSBTSUdJTEw7CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gSUxMX0hBUkRXQUxMOworCWZvdW5kX3Byb2Nlc3NlcyA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmcmVjdC0+dGFza19oZWFkLCB0aHJlYWQuaGFyZHdhbGxfbGlzdCkgeworCQlCVUdfT04ocC0+dGhyZWFkLmhhcmR3YWxsICE9IHJlY3QpOworCQlpZiAocC0+c2lnaGFuZCkgeworCQkJZm91bmRfcHJvY2Vzc2VzID0gMTsKKwkJCXByX25vdGljZSgiaGFyZHdhbGw6IGtpbGxpbmcgJWRcbiIsIHAtPnBpZCk7CisJCQlzcGluX2xvY2soJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOworCQkJX19ncm91cF9zZW5kX3NpZ19pbmZvKGluZm8uc2lfc2lnbm8sICZpbmZvLCBwKTsKKwkJCXNwaW5fdW5sb2NrKCZwLT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJfQorCX0KKwlpZiAoIWZvdW5kX3Byb2Nlc3NlcykKKwkJcHJfbm90aWNlKCJoYXJkd2FsbDogbm8gYXNzb2NpYXRlZCBwcm9jZXNzZXMhXG4iKTsKKworIGRvbmU6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIGRpc2FibGUgZmlyZXdhbGwgaW50ZXJydXB0cyBub3csIG9yIGVsc2Ugd2hlbiB3ZQorCSAqIHJldHVybiBmcm9tIHRoaXMgaGFuZGxlciwgd2Ugd2lsbCBzaW1wbHkgcmUtaW50ZXJydXB0IGJhY2sgdG8KKwkgKiBpdC4gIEhvd2V2ZXIsIHdlIGNhbid0IGNsZWFyIHRoZSBwcm90ZWN0aW9uIGJpdHMsIHNpbmNlIHdlCisJICogaGF2ZW4ndCB5ZXQgZHJhaW5lZCB0aGUgbmV0d29yaywgYW5kIHRoYXQgd291bGQgYWxsb3cgcGFja2V0cworCSAqIHRvIGNyb3NzIG91dCBvZiB0aGUgaGFyZHdhbGwgcmVnaW9uLgorCSAqLworCWRpc2FibGVfZmlyZXdhbGxfaW50ZXJydXB0cygpOworCisJaXJxX2V4aXQoKTsKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCisvKiBBbGxvdyBhY2Nlc3MgZnJvbSB1c2VyIHNwYWNlIHRvIHRoZSBVRE4uICovCit2b2lkIGdyYW50X25ldHdvcmtfbXBscyh2b2lkKQoreworCV9faW5zbl9tdHNwcihTUFJfTVBMX1VETl9BQ0NFU1NfU0VUXzAsIDEpOworCV9faW5zbl9tdHNwcihTUFJfTVBMX1VETl9BVkFJTF9TRVRfMCwgMSk7CisJX19pbnNuX210c3ByKFNQUl9NUExfVUROX0NPTVBMRVRFX1NFVF8wLCAxKTsKKwlfX2luc25fbXRzcHIoU1BSX01QTF9VRE5fVElNRVJfU0VUXzAsIDEpOworI2lmICFDSElQX0hBU19SRVYxX1hETigpCisJX19pbnNuX210c3ByKFNQUl9NUExfVUROX1JFRklMTF9TRVRfMCwgMSk7CisJX19pbnNuX210c3ByKFNQUl9NUExfVUROX0NBX1NFVF8wLCAxKTsKKyNlbmRpZgorfQorCisvKiBEZW55IGFjY2VzcyBmcm9tIHVzZXIgc3BhY2UgdG8gdGhlIFVETi4gKi8KK3ZvaWQgcmVzdHJpY3RfbmV0d29ya19tcGxzKHZvaWQpCit7CisJX19pbnNuX210c3ByKFNQUl9NUExfVUROX0FDQ0VTU19TRVRfMSwgMSk7CisJX19pbnNuX210c3ByKFNQUl9NUExfVUROX0FWQUlMX1NFVF8xLCAxKTsKKwlfX2luc25fbXRzcHIoU1BSX01QTF9VRE5fQ09NUExFVEVfU0VUXzEsIDEpOworCV9faW5zbl9tdHNwcihTUFJfTVBMX1VETl9USU1FUl9TRVRfMSwgMSk7CisjaWYgIUNISVBfSEFTX1JFVjFfWEROKCkKKwlfX2luc25fbXRzcHIoU1BSX01QTF9VRE5fUkVGSUxMX1NFVF8xLCAxKTsKKwlfX2luc25fbXRzcHIoU1BSX01QTF9VRE5fQ0FfU0VUXzEsIDEpOworI2VuZGlmCit9CisKKworLyoKKyAqIENvZGUgdG8gY3JlYXRlLCBhY3RpdmF0ZSwgZGVhY3RpdmF0ZSwgYW5kIGRlc3Ryb3kgaGFyZHdhbGwgcmVjdGFuZ2xlcy4KKyAqLworCisvKiBDcmVhdGUgYSBoYXJkd2FsbCBmb3IgdGhlIGdpdmVuIHJlY3RhbmdsZSAqLworc3RhdGljIHN0cnVjdCBoYXJkd2FsbF9pbmZvICpoYXJkd2FsbF9jcmVhdGUoCisJc2l6ZV90IHNpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpiaXRzKQoreworCXN0cnVjdCBoYXJkd2FsbF9pbmZvICppdGVyLCAqcmVjdDsKKwlzdHJ1Y3QgY3B1bWFzayBtYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOworCisJLyogUmVqZWN0IGNyYXp5IHNpemVzIG91dCBvZiBoYW5kLCBhIGxhIHN5c19tYmluZCgpLiAqLworCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIENvcHkgd2hhdGV2ZXIgZml0cyBpbnRvIGEgY3B1bWFzay4gKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJm1hc2ssIGJpdHMsIG1pbihzaXplb2Yoc3RydWN0IGNwdW1hc2spLCBzaXplKSkpCisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCisJLyoKKwkgKiBJZiB0aGUgc2l6ZSB3YXMgc2hvcnQsIGNsZWFyIHRoZSByZXN0IG9mIHRoZSBtYXNrOworCSAqIG90aGVyd2lzZSB2YWxpZGF0ZSB0aGF0IHRoZSByZXN0IG9mIHRoZSB1c2VyIG1hc2sgd2FzIHplcm8KKwkgKiAod2UgZG9uJ3QgdHJ5IGhhcmQgdG8gYmUgZWZmaWNpZW50IHdoZW4gdmFsaWRhdGluZyBodWdlIG1hc2tzKS4KKwkgKi8KKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgY3B1bWFzaykpIHsKKwkJbWVtc2V0KChjaGFyICopJm1hc2sgKyBzaXplLCAwLCBzaXplb2Yoc3RydWN0IGNwdW1hc2spIC0gc2l6ZSk7CisJfSBlbHNlIGlmIChzaXplID4gc2l6ZW9mKHN0cnVjdCBjcHVtYXNrKSkgeworCQlzaXplX3QgaTsKKwkJZm9yIChpID0gc2l6ZW9mKHN0cnVjdCBjcHVtYXNrKTsgaSA8IHNpemU7ICsraSkgeworCQkJY2hhciBjOworCQkJaWYgKGdldF91c2VyKGMsICZiaXRzW2ldKSkKKwkJCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwkJCWlmIChjKQorCQkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQl9CisJfQorCisJLyogQWxsb2NhdGUgYSBuZXcgcmVjdGFuZ2xlIG9wdGltaXN0aWNhbGx5LiAqLworCXJlY3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGFyZHdhbGxfaW5mbyksCisJCQlHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKHJlY3QgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJSU5JVF9MSVNUX0hFQUQoJnJlY3QtPnRhc2tfaGVhZCk7CisKKwkvKiBDb21wdXRlIHRoZSByZWN0YW5nbGUgc2l6ZSBhbmQgdmFsaWRhdGUgdGhhdCBpdCdzIHBsYXVzaWJsZS4gKi8KKwlyYyA9IHNldHVwX3JlY3RhbmdsZShyZWN0LCAmbWFzayk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUocmVjdCk7CisJCXJldHVybiBFUlJfUFRSKHJjKTsKKwl9CisKKwkvKiBDb25maXJtIGl0IGRvZXNuJ3Qgb3ZlcmxhcCBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVyLCAmcmVjdGFuZ2xlcywgbGlzdCkgeworCQlpZiAob3ZlcmxhcHMoaXRlciwgcmVjdCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhcmR3YWxsX2xvY2ssIGZsYWdzKTsKKwkJCWtmcmVlKHJlY3QpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwkJfQorCX0KKwlsaXN0X2FkZF90YWlsKCZyZWN0LT5saXN0LCAmcmVjdGFuZ2xlcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCisJLyogU2V0IHVwIGFwcHJvcHJpYXRlIGhhcmR3YWxsaW5nIG9uIGFsbCBhZmZlY3RlZCBjcHVzLiAqLworCWhhcmR3YWxsX3NldHVwKHJlY3QpOworCisJcmV0dXJuIHJlY3Q7Cit9CisKKy8qIEFjdGl2YXRlIGEgZ2l2ZW4gaGFyZHdhbGwgb24gdGhpcyBjcHUgZm9yIHRoaXMgcHJvY2Vzcy4gKi8KK3N0YXRpYyBpbnQgaGFyZHdhbGxfYWN0aXZhdGUoc3RydWN0IGhhcmR3YWxsX2luZm8gKnJlY3QpCit7CisJaW50IGNwdSwgeCwgeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN1cnJlbnQ7CisJc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnRzID0gJnAtPnRocmVhZDsKKworCS8qIFJlcXVpcmUgYSByZWN0YW5nbGUuICovCisJaWYgKHJlY3QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyogTm90IGFsbG93ZWQgdG8gYWN0aXZhdGUgYSByZWN0YW5nbGUgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uICovCisJaWYgKHJlY3QtPnRlYXJkb3duX2luX3Byb2dyZXNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogR2V0IG91ciBhZmZpbml0eTsgaWYgd2UncmUgbm90IGJvdW5kIHRvIHRoaXMgdGlsZSB1bmlxdWVseSwKKwkgKiB3ZSBjYW4ndCBhY2Nlc3MgdGhlIG5ldHdvcmsgcmVnaXN0ZXJzLgorCSAqLworCWlmIChjcHVtYXNrX3dlaWdodCgmcC0+Y3B1c19hbGxvd2VkKSAhPSAxKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogTWFrZSBzdXJlIHdlIGFyZSBib3VuZCB0byBhIGNwdSBpbiB0aGlzIHJlY3RhbmdsZS4gKi8KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJQlVHX09OKGNwdW1hc2tfZmlyc3QoJnAtPmNwdXNfYWxsb3dlZCkgIT0gY3B1KTsKKwl4ID0gY3B1X3goY3B1KTsKKwl5ID0gY3B1X3koY3B1KTsKKwlpZiAoIWNvbnRhaW5zKHJlY3QsIHgsIHkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIElmIHdlIGFyZSBhbHJlYWR5IGJvdW5kIHRvIHRoaXMgaGFyZHdhbGwsIGl0J3MgYSBuby1vcC4gKi8KKwlpZiAodHMtPmhhcmR3YWxsKSB7CisJCUJVR19PTih0cy0+aGFyZHdhbGwgIT0gcmVjdCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFN1Y2Nlc3MhICBUaGlzIHByb2Nlc3MgZ2V0cyB0byB1c2UgdGhlIHVzZXIgbmV0d29ya3Mgb24gdGhpcyBjcHUuICovCisJdHMtPmhhcmR3YWxsID0gcmVjdDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZ0cy0+aGFyZHdhbGxfbGlzdCwgJnJlY3QtPnRhc2tfaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCWdyYW50X25ldHdvcmtfbXBscygpOworCXByaW50ayhLRVJOX0RFQlVHICJQaWQgJWQgKCVzKSBhY3RpdmF0ZWQgZm9yIGhhcmR3YWxsOiBjcHUgJWRcbiIsCisJICAgICAgIHAtPnBpZCwgcC0+Y29tbSwgY3B1KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlYWN0aXZhdGUgYSB0YXNrJ3MgaGFyZHdhbGwuICBNdXN0IGhvbGQgaGFyZHdhbGxfbG9jay4KKyAqIFRoaXMgbWV0aG9kIG1heSBiZSBjYWxsZWQgZnJvbSBmcmVlX3Rhc2soKSwgc28gd2UgZG9uJ3Qgd2FudCB0bworICogcmVseSBvbiB0b28gbWFueSBmaWVsZHMgb2Ygc3RydWN0IHRhc2tfc3RydWN0IHN0aWxsIGJlaW5nIHZhbGlkLgorICogV2UgYXNzdW1lIHRoZSBjcHVzX2FsbG93ZWQsIHBpZCwgYW5kIGNvbW0gZmllbGRzIGFyZSBzdGlsbCB2YWxpZC4KKyAqLworc3RhdGljIHZvaWQgX2hhcmR3YWxsX2RlYWN0aXZhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0cyA9ICZ0YXNrLT50aHJlYWQ7CisKKwlpZiAoY3B1bWFza193ZWlnaHQoJnRhc2stPmNwdXNfYWxsb3dlZCkgIT0gMSkgeworCQlwcl9lcnIoInBpZCAlZCAoJXMpIHJlbGVhc2luZyBuZXR3b3JrcyB3aXRoIgorCQkgICAgICAgIiBhbiBhZmZpbml0eSBtYXNrIGNvbnRhaW5pbmcgJWQgY3B1cyFcbiIsCisJCSAgICAgICB0YXNrLT5waWQsIHRhc2stPmNvbW0sCisJCSAgICAgICBjcHVtYXNrX3dlaWdodCgmdGFzay0+Y3B1c19hbGxvd2VkKSk7CisJCUJVRygpOworCX0KKworCUJVR19PTih0cy0+aGFyZHdhbGwgPT0gTlVMTCk7CisJdHMtPmhhcmR3YWxsID0gTlVMTDsKKwlsaXN0X2RlbCgmdHMtPmhhcmR3YWxsX2xpc3QpOworCWlmICh0YXNrID09IGN1cnJlbnQpCisJCXJlc3RyaWN0X25ldHdvcmtfbXBscygpOworfQorCisvKiBEZWFjdGl2YXRlIGEgdGFzaydzIGhhcmR3YWxsLiAqLworaW50IGhhcmR3YWxsX2RlYWN0aXZhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGFjdGl2YXRlZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisJYWN0aXZhdGVkID0gKHRhc2stPnRocmVhZC5oYXJkd2FsbCAhPSBOVUxMKTsKKwlpZiAoYWN0aXZhdGVkKQorCQlfaGFyZHdhbGxfZGVhY3RpdmF0ZSh0YXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWFjdGl2YXRlZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUGlkICVkICglcykgZGVhY3RpdmF0ZWQgZm9yIGhhcmR3YWxsOiBjcHUgJWRcbiIsCisJICAgICAgIHRhc2stPnBpZCwgdGFzay0+Y29tbSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gMDsKK30KKworLyogU3RvcCBhIFVETiBzd2l0Y2ggYmVmb3JlIGRyYWluaW5nIHRoZSBuZXR3b3JrLiAqLworc3RhdGljIHZvaWQgc3RvcF91ZG5fc3dpdGNoKHZvaWQgKmlnbm9yZWQpCit7CisjaWYgIUNISVBfSEFTX1JFVjFfWEROKCkKKwkvKiBGcmVlemUgdGhlIHN3aXRjaCBhbmQgdGhlIGRlbXV4LiAqLworCV9faW5zbl9tdHNwcihTUFJfVUROX1NQX0ZSRUVaRSwKKwkJICAgICBTUFJfVUROX1NQX0ZSRUVaRV9fU1BfRlJaX01BU0sgfAorCQkgICAgIFNQUl9VRE5fU1BfRlJFRVpFX19ERU1VWF9GUlpfTUFTSyB8CisJCSAgICAgU1BSX1VETl9TUF9GUkVFWkVfX05PTl9ERVNUX0VYVF9NQVNLKTsKKyNlbmRpZgorfQorCisvKiBEcmFpbiBhbGwgdGhlIHN0YXRlIGZyb20gYSBzdG9wcGVkIHN3aXRjaC4gKi8KK3N0YXRpYyB2b2lkIGRyYWluX3Vkbl9zd2l0Y2godm9pZCAqaWdub3JlZCkKK3sKKyNpZiAhQ0hJUF9IQVNfUkVWMV9YRE4oKQorCWludCBpOworCWludCBmcm9tX3RpbGVfd29yZHMsIGNhX2NvdW50OworCisJLyogRW1wdHkgb3V0IHRoZSA1IHN3aXRjaCBwb2ludCBmaWZvcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWludCB3b3JkcywgajsKKwkJX19pbnNuX210c3ByKFNQUl9VRE5fU1BfRklGT19TRUwsIGkpOworCQl3b3JkcyA9IF9faW5zbl9tZnNwcihTUFJfVUROX1NQX1NUQVRFKSAmIDB4RjsKKwkJZm9yIChqID0gMDsgaiA8IHdvcmRzOyBqKyspCisJCQkodm9pZCkgX19pbnNuX21mc3ByKFNQUl9VRE5fU1BfRklGT19EQVRBKTsKKwkJQlVHX09OKChfX2luc25fbWZzcHIoU1BSX1VETl9TUF9TVEFURSkgJiAweEYpICE9IDApOworCX0KKworCS8qIER1bXAgb3V0IHRoZSAzIHdvcmQgZmlmbyBhdCB0b3AuICovCisJZnJvbV90aWxlX3dvcmRzID0gKF9faW5zbl9tZnNwcihTUFJfVUROX0RFTVVYX1NUQVRVUykgPj4gMTApICYgMHgzOworCWZvciAoaSA9IDA7IGkgPCBmcm9tX3RpbGVfd29yZHM7IGkrKykKKwkJKHZvaWQpIF9faW5zbl9tZnNwcihTUFJfVUROX0RFTVVYX1dSSVRFX0ZJRk8pOworCisJLyogRW1wdHkgb3V0IGRlbXV4ZXMuICovCisJd2hpbGUgKF9faW5zbl9tZnNwcihTUFJfVUROX0RBVEFfQVZBSUwpICYgKDEgPDwgMCkpCisJCSh2b2lkKSBfX3RpbGVfdWRuMF9yZWNlaXZlKCk7CisJd2hpbGUgKF9faW5zbl9tZnNwcihTUFJfVUROX0RBVEFfQVZBSUwpICYgKDEgPDwgMSkpCisJCSh2b2lkKSBfX3RpbGVfdWRuMV9yZWNlaXZlKCk7CisJd2hpbGUgKF9faW5zbl9tZnNwcihTUFJfVUROX0RBVEFfQVZBSUwpICYgKDEgPDwgMikpCisJCSh2b2lkKSBfX3RpbGVfdWRuMl9yZWNlaXZlKCk7CisJd2hpbGUgKF9faW5zbl9tZnNwcihTUFJfVUROX0RBVEFfQVZBSUwpICYgKDEgPDwgMykpCisJCSh2b2lkKSBfX3RpbGVfdWRuM19yZWNlaXZlKCk7CisJQlVHX09OKChfX2luc25fbWZzcHIoU1BSX1VETl9EQVRBX0FWQUlMKSAmIDB4RikgIT0gMCk7CisKKwkvKiBFbXB0eSBvdXQgY2F0Y2ggYWxsLiAqLworCWNhX2NvdW50ID0gX19pbnNuX21mc3ByKFNQUl9VRE5fREVNVVhfQ0FfQ09VTlQpOworCWZvciAoaSA9IDA7IGkgPCBjYV9jb3VudDsgaSsrKQorCQkodm9pZCkgX19pbnNuX21mc3ByKFNQUl9VRE5fQ0FfREFUQSk7CisJQlVHX09OKF9faW5zbl9tZnNwcihTUFJfVUROX0RFTVVYX0NBX0NPVU5UKSAhPSAwKTsKKworCS8qIENsZWFyIGRlbXV4IGxvZ2ljLiAqLworCV9faW5zbl9tdHNwcihTUFJfVUROX0RFTVVYX0NUTCwgMSk7CisKKwkvKgorCSAqIFdyaXRlIHN3aXRjaCBzdGF0ZTsgZXhwZXJpbWVudGF0aW9uIGluZGljYXRlcyB0aGF0IDB4YzMwMDAKKwkgKiBpcyBhbiBpZGxlIHN3aXRjaCBwb2ludC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCV9faW5zbl9tdHNwcihTUFJfVUROX1NQX0ZJRk9fU0VMLCBpKTsKKwkJX19pbnNuX210c3ByKFNQUl9VRE5fU1BfU1RBVEUsIDB4YzMwMDApOworCX0KKyNlbmRpZgorfQorCisvKiBSZXNldCByYW5kb20gVUROIHN0YXRlIHJlZ2lzdGVycyBhdCBib290IHVwIGFuZCBkdXJpbmcgaGFyZHdhbGwgdGVhcmRvd24uICovCit2b2lkIHJlc2V0X25ldHdvcmtfc3RhdGUodm9pZCkKK3sKKyNpZiAhQ0hJUF9IQVNfUkVWMV9YRE4oKQorCS8qIFJlc2V0IFVETiBjb29yZGluYXRlcyB0byB0aGVpciBzdGFuZGFyZCB2YWx1ZSAqLworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgaW50IHggPSBjcHUgJSBzbXBfd2lkdGg7CisJdW5zaWduZWQgaW50IHkgPSBjcHUgLyBzbXBfd2lkdGg7CisjZW5kaWYKKworCWlmICh1ZG5fZGlzYWJsZWQpCisJCXJldHVybjsKKworI2lmICFDSElQX0hBU19SRVYxX1hETigpCisJX19pbnNuX210c3ByKFNQUl9VRE5fVElMRV9DT09SRCwgKHggPDwgMTgpIHwgKHkgPDwgNykpOworCisJLyogU2V0IGRlbXV4IHRhZ3MgdG8gcHJlZGVmaW5lZCB2YWx1ZXMgYW5kIGVuYWJsZSB0aGVtLiAqLworCV9faW5zbl9tdHNwcihTUFJfVUROX1RBR19WQUxJRCwgMHhmKTsKKwlfX2luc25fbXRzcHIoU1BSX1VETl9UQUdfMCwgKDEgPDwgMCkpOworCV9faW5zbl9tdHNwcihTUFJfVUROX1RBR18xLCAoMSA8PCAxKSk7CisJX19pbnNuX210c3ByKFNQUl9VRE5fVEFHXzIsICgxIDw8IDIpKTsKKwlfX2luc25fbXRzcHIoU1BSX1VETl9UQUdfMywgKDEgPDwgMykpOworI2VuZGlmCisKKwkvKiBDbGVhciBvdXQgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyBzbyB3ZSBoYXZlIGEgY2xlYW4gc2xhdGUuICovCisJX19pbnNuX210c3ByKFNQUl9VRE5fQVZBSUxfRU4sIDApOworCV9faW5zbl9tdHNwcihTUFJfVUROX0RFQURMT0NLX1RJTUVPVVQsIDApOworI2lmICFDSElQX0hBU19SRVYxX1hETigpCisJX19pbnNuX210c3ByKFNQUl9VRE5fUkVGSUxMX0VOLCAwKTsKKwlfX2luc25fbXRzcHIoU1BSX1VETl9ERU1VWF9RVUVVRV9TRUwsIDApOworCV9faW5zbl9tdHNwcihTUFJfVUROX1NQX0ZJRk9fU0VMLCAwKTsKKyNlbmRpZgorCisJLyogU3RhcnQgdGhlIHN3aXRjaCBhbmQgZGVtdXguICovCisjaWYgIUNISVBfSEFTX1JFVjFfWEROKCkKKwlfX2luc25fbXRzcHIoU1BSX1VETl9TUF9GUkVFWkUsIDApOworI2VuZGlmCit9CisKKy8qIFJlc3RhcnQgYSBVRE4gc3dpdGNoIGFmdGVyIGRyYWluaW5nLiAqLworc3RhdGljIHZvaWQgcmVzdGFydF91ZG5fc3dpdGNoKHZvaWQgKmlnbm9yZWQpCit7CisJcmVzZXRfbmV0d29ya19zdGF0ZSgpOworCisJLyogRGlzYWJsZSBmaXJld2FsbCBpbnRlcnJ1cHRzLiAqLworCV9faW5zbl9tdHNwcihTUFJfVUROX0RJUkVDVElPTl9QUk9URUNULCAwKTsKKwlkaXNhYmxlX2ZpcmV3YWxsX2ludGVycnVwdHMoKTsKK30KKworLyogQnVpbGQgYSBzdHJ1Y3QgY3B1bWFzayBjb250YWluaW5nIGFsbCB2YWxpZCB0aWxlcyBpbiBib3VuZGluZyByZWN0YW5nbGUuICovCitzdGF0aWMgdm9pZCBmaWxsX21hc2soc3RydWN0IGhhcmR3YWxsX2luZm8gKnIsIHN0cnVjdCBjcHVtYXNrICpyZXN1bHQpCit7CisJaW50IHgsIHksIGNwdTsKKworCWNwdW1hc2tfY2xlYXIocmVzdWx0KTsKKworCWNwdSA9IHItPnVsaGNfeSAqIHNtcF93aWR0aCArIHItPnVsaGNfeDsKKwlmb3IgKHkgPSAwOyB5IDwgci0+aGVpZ2h0OyArK3ksIGNwdSArPSBzbXBfd2lkdGggLSByLT53aWR0aCkgeworCQlmb3IgKHggPSAwOyB4IDwgci0+d2lkdGg7ICsreCwgKytjcHUpCisJCQljcHVfb25saW5lX3NldChjcHUsIHJlc3VsdCk7CisJfQorfQorCisvKiBMYXN0IHJlZmVyZW5jZSB0byBhIGhhcmR3YWxsIGlzIGdvbmUsIHNvIGNsZWFyIHRoZSBuZXR3b3JrLiAqLworc3RhdGljIHZvaWQgaGFyZHdhbGxfZGVzdHJveShzdHJ1Y3QgaGFyZHdhbGxfaW5mbyAqcmVjdCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY3B1bWFzayBtYXNrOworCisJLyogTWFrZSBzdXJlIHRoaXMgZmlsZSBhY3R1YWxseSByZXByZXNlbnRzIGEgcmVjdGFuZ2xlLiAqLworCWlmIChyZWN0ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qCisJICogRGVhY3RpdmF0ZSBhbnkgcmVtYWluaW5nIHRhc2tzLiAgSXQncyBwb3NzaWJsZSB0byByYWNlIHdpdGgKKwkgKiBzb21lIG90aGVyIHRocmVhZCB0aGF0IGlzIGV4aXRpbmcgYW5kIGhhc24ndCB5ZXQgY2FsbGVkCisJICogZGVhY3RpdmF0ZSAod2hlbiBmcmVlaW5nIGl0cyB0aHJlYWRfaW5mbyksIHNvIHdlIGNhcmVmdWxseQorCSAqIGRlYWN0aXZhdGUgYW55IHJlbWFpbmluZyB0YXNrcyBiZWZvcmUgZnJlZWluZyB0aGUKKwkgKiBoYXJkd2FsbF9pbmZvIG9iamVjdCBpdHNlbGYuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhcmR3YWxsX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhc2ssICZyZWN0LT50YXNrX2hlYWQsIHRocmVhZC5oYXJkd2FsbF9saXN0KQorCQlfaGFyZHdhbGxfZGVhY3RpdmF0ZSh0YXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisKKwkvKiBEcmFpbiB0aGUgVUROLiAqLworCXByaW50ayhLRVJOX0RFQlVHICJDbGVhcmluZyBoYXJkd2FsbCByZWN0YW5nbGUgJWR4JWQgJWQsJWRcbiIsCisJICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPnVsaGNfeCwgcmVjdC0+dWxoY195KTsKKwlmaWxsX21hc2socmVjdCwgJm1hc2spOworCW9uX2VhY2hfY3B1X21hc2soJm1hc2ssIHN0b3BfdWRuX3N3aXRjaCwgTlVMTCwgMSk7CisJb25fZWFjaF9jcHVfbWFzaygmbWFzaywgZHJhaW5fdWRuX3N3aXRjaCwgTlVMTCwgMSk7CisKKwkvKiBSZXN0YXJ0IHN3aXRjaCBhbmQgZGlzYWJsZSBmaXJld2FsbC4gKi8KKwlvbl9lYWNoX2NwdV9tYXNrKCZtYXNrLCByZXN0YXJ0X3Vkbl9zd2l0Y2gsIE5VTEwsIDEpOworCisJLyogTm93IGZyZWUgdGhlIHJlY3RhbmdsZSBmcm9tIHRoZSBsaXN0LiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZoYXJkd2FsbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZyZWN0LT50YXNrX2hlYWQpKTsKKwlsaXN0X2RlbCgmcmVjdC0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCWtmcmVlKHJlY3QpOworfQorCisKKy8qCisgKiBEdW1wIGhhcmR3YWxsIHN0YXRlIHZpYSAvcHJvYzsgaW5pdGlhbGl6ZWQgaW4gYXJjaC90aWxlL3N5cy9wcm9jLmMuCisgKi8KK2ludCBwcm9jX3RpbGVfaGFyZHdhbGxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KQoreworCXN0cnVjdCBoYXJkd2FsbF9pbmZvICpyOworCisJaWYgKHVkbl9kaXNhYmxlZCkgeworCQlzZXFfcHJpbnRmKHNmLCAiJWR4JWQgMCwwIHBpZHM6XG4iLCBzbXBfd2lkdGgsIHNtcF9oZWlnaHQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZoYXJkd2FsbF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZyZWN0YW5nbGVzLCBsaXN0KSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwkJc2VxX3ByaW50ZihzZiwgIiVkeCVkICVkLCVkIHBpZHM6IiwKKwkJCSAgIHItPndpZHRoLCByLT5oZWlnaHQsIHItPnVsaGNfeCwgci0+dWxoY195KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmci0+dGFza19oZWFkLCB0aHJlYWQuaGFyZHdhbGxfbGlzdCkgeworCQkJdW5zaWduZWQgaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QoJnAtPmNwdXNfYWxsb3dlZCk7CisJCQl1bnNpZ25lZCBpbnQgeCA9IGNwdSAlIHNtcF93aWR0aDsKKwkJCXVuc2lnbmVkIGludCB5ID0gY3B1IC8gc21wX3dpZHRoOworCQkJc2VxX3ByaW50ZihzZiwgIiAlZEAlZCwlZCIsIHAtPnBpZCwgeCwgeSk7CisJCX0KKwkJc2VxX3ByaW50ZihzZiwgIlxuIik7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmaGFyZHdhbGxfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIENoYXJhY3RlciBkZXZpY2Ugc3VwcG9ydCB2aWEgaW9jdGwvY2xvc2UuCisgKi8KKworc3RhdGljIGxvbmcgaGFyZHdhbGxfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisJc3RydWN0IGhhcmR3YWxsX2luZm8gKnJlY3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoX0lPQ19UWVBFKGEpICE9IEhBUkRXQUxMX0lPQ1RMX0JBU0UpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChfSU9DX05SKGEpKSB7CisJY2FzZSBfSEFSRFdBTExfQ1JFQVRFOgorCQlpZiAodWRuX2Rpc2FibGVkKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCWlmIChyZWN0ICE9IE5VTEwpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCQlyZWN0ID0gaGFyZHdhbGxfY3JlYXRlKF9JT0NfU0laRShhKSwKKwkJCQkJKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICopYik7CisJCWlmIChJU19FUlIocmVjdCkpCisJCQlyZXR1cm4gUFRSX0VSUihyZWN0KTsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmVjdDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIF9IQVJEV0FMTF9BQ1RJVkFURToKKwkJcmV0dXJuIGhhcmR3YWxsX2FjdGl2YXRlKHJlY3QpOworCisJY2FzZSBfSEFSRFdBTExfREVBQ1RJVkFURToKKwkJaWYgKGN1cnJlbnQtPnRocmVhZC5oYXJkd2FsbCAhPSByZWN0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBoYXJkd2FsbF9kZWFjdGl2YXRlKGN1cnJlbnQpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcgaGFyZHdhbGxfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgdW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKwkvKiBTaWduLWV4dGVuZCB0aGUgYXJndW1lbnQgc28gaXQgY2FuIGJlIHVzZWQgYXMgYSBwb2ludGVyLiAqLworCXJldHVybiBoYXJkd2FsbF9pb2N0bChmaWxlLCBhLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGIpKTsKK30KKyNlbmRpZgorCisvKiBUaGUgdXNlciBwcm9jZXNzIGNsb3NlZCB0aGUgZmlsZTsgcmV2b2tlIGFjY2VzcyB0byB1c2VyIG5ldHdvcmtzLiAqLworc3RhdGljIGludCBoYXJkd2FsbF9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBvd25lcikKK3sKKwlzdHJ1Y3QgaGFyZHdhbGxfaW5mbyAqcmVjdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChyZWN0KSB7CisJCS8qCisJCSAqIE5PVEU6IGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIGFjdGl2YXRlZCBvbiB0aGlzIGhhcmR3YWxsCisJCSAqIGZpbGUsIHRoZSBvdGhlciB0aHJlYWRzIHdpbGwgY29udGludWUgaGF2aW5nIGFjY2VzcyB0byB0aGUKKwkJICogVUROIHVudGlsIHRoZXkgYXJlIGNvbnRleHQtc3dpdGNoZWQgb3V0IGFuZCBiYWNrIGluIGFnYWluLgorCQkgKgorCQkgKiBOT1RFOiBBIE5VTEwgZmlsZXMgcG9pbnRlciBtZWFucyB0aGUgdGFzayBpcyBiZWluZyB0b3JuCisJCSAqIGRvd24sIHNvIGluIHRoYXQgY2FzZSB3ZSBhbHNvIGRlYWN0aXZhdGUgaXQuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGFyZHdhbGxfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGFzaywgdG1wLCAmcmVjdC0+dGFza19oZWFkLAorCQkJCQkgdGhyZWFkLmhhcmR3YWxsX2xpc3QpIHsKKwkJCWlmICh0YXNrLT5maWxlcyA9PSBvd25lciB8fCB0YXNrLT5maWxlcyA9PSBOVUxMKQorCQkJCV9oYXJkd2FsbF9kZWFjdGl2YXRlKHRhc2spOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhcmR3YWxsX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBoYXJkd2FsbCBpcyBnb25lLCBzbyBkZXN0cm95IGl0LiAqLworc3RhdGljIGludCBoYXJkd2FsbF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWhhcmR3YWxsX2Rlc3Ryb3koZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2X2hhcmR3YWxsX2ZvcHMgPSB7CisJLnVubG9ja2VkX2lvY3RsID0gaGFyZHdhbGxfaW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgICA9IGhhcmR3YWxsX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5mbHVzaCAgICAgICAgICA9IGhhcmR3YWxsX2ZsdXNoLAorCS5yZWxlYXNlICAgICAgICA9IGhhcmR3YWxsX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IGNkZXYgaGFyZHdhbGxfZGV2OworCitzdGF0aWMgaW50IF9faW5pdCBkZXZfaGFyZHdhbGxfaW5pdCh2b2lkKQoreworCWludCByYzsKKwlkZXZfdCBkZXY7CisKKwlyYyA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgMCwgMSwgImhhcmR3YWxsIik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCWNkZXZfaW5pdCgmaGFyZHdhbGxfZGV2LCAmZGV2X2hhcmR3YWxsX2ZvcHMpOworCXJjID0gY2Rldl9hZGQoJmhhcmR3YWxsX2RldiwgZGV2LCAxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoZGV2X2hhcmR3YWxsX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3RpbGUva2VybmVsL2hlYWRfMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjRmNmMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9oZWFkXzMyLlMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVElMRSBzdGFydHVwIGNvZGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKy8qCisgKiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgZW50cnkgY29kZSBmb3Iga2VybmVsIGltYWdlcy4gSXQgcGVyZm9ybXMgdGhlCisgKiBtaW5pbWFsIHNldHVwIG5lZWRlZCB0byBjYWxsIHRoZSBnZW5lcmljIEMgcm91dGluZXMuCisgKi8KKworCV9fSEVBRAorRU5UUlkoX3N0YXJ0KQorCS8qIE5vdGlmeSB0aGUgaHlwZXJ2aXNvciBvZiB3aGF0IHZlcnNpb24gb2YgdGhlIEFQSSB3ZSB3YW50ICovCisJeworCSAgbW92ZWkgcjEsIFRJTEVfQ0hJUAorCSAgbW92ZWkgcjIsIFRJTEVfQ0hJUF9SRVYKKwl9CisJeworCSAgbW92ZWxpIHIwLCBfSFZfVkVSU0lPTgorCSAgamFsIGh2X2luaXQKKwl9CisJLyogR2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0IEFTSUQgaW4gcjAgKi8KKwl7CisJICBtb3ZlIHIwLCB6ZXJvCisJICBqYWwgaHZfaW5xdWlyZV9hc2lkCisJfQorCS8qIEluc3RhbGwgdGhlIGRlZmF1bHQgcGFnZSB0YWJsZSAqLworCXsKKwkgIG1vdmVsaSByNiwgbG8xNihzd2FwcGVyX3BncHJvdCAtIFBBR0VfT0ZGU0VUKQorCSAgbW92ZSByNCwgcjAgICAgIC8qIHVzZSBzdGFydGluZyBBU0lEIG9mIHJhbmdlIGZvciB0aGlzIHBhZ2UgdGFibGUgKi8KKwl9CisJeworCSAgbW92ZWxpIHIwLCBsbzE2KHN3YXBwZXJfcGdfZGlyIC0gUEFHRV9PRkZTRVQpCisJICBhdWxpIHI2LCByNiwgaGExNihzd2FwcGVyX3BncHJvdCAtIFBBR0VfT0ZGU0VUKQorCX0KKwl7CisJICBsdyByMiwgcjYKKwkgIGFkZGkgcjYsIHI2LCA0CisJfQorCXsKKwkgIGx3IHIzLCByNgorCSAgYXVsaSByMCwgcjAsIGhhMTYoc3dhcHBlcl9wZ19kaXIgLSBQQUdFX09GRlNFVCkKKwl9CisJeworCSAgaW52IHI2CisJICBtb3ZlIHIxLCB6ZXJvICAgLyogaGlnaCAzMiBiaXRzIG9mIENQQSBpcyB6ZXJvICovCisJfQorCXsKKwkgIG1vdmVsaSBsciwgbG8xNigxZikKKwkgIG1vdmUgcjUsIHplcm8KKwl9CisJeworCSAgYXVsaSBsciwgbHIsIGhhMTYoMWYpCisJICBqIGh2X2luc3RhbGxfY29udGV4dAorCX0KKzE6CisKKwkvKiBHZXQgb3VyIHByb2Nlc3NvciBudW1iZXIgYW5kIHNhdmUgaXQgYXdheSBpbiBTQVZFXzFfMC4gKi8KKwlqYWwgaHZfaW5xdWlyZV90b3BvbG9neQorCW11bGxsX3V1IHI0LCByMSwgcjIgICAgICAgIC8qIHIxID09IHksIHIyID09IHdpZHRoICovCisJYWRkIHI0LCByNCwgcjAgICAgICAgICAgICAgLyogcjAgPT0geCwgc28gcjQgPT0gY3B1ID09IHkqd2lkdGggKyB4ICovCisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBMb2FkIHVwIG91ciBwZXItY3B1IG9mZnNldC4gIFdoZW4gdGhlIGZpcnN0IChtYXN0ZXIpIHRpbGUKKwkgKiBib290cywgdGhpcyB2YWx1ZSBpcyBzdGlsbCB6ZXJvLCBzbyB3ZSB3aWxsIGxvYWQgYm9vdF9wYworCSAqIHdpdGggc3RhcnRfa2VybmVsLCBhbmQgYm9vdF9zcCB3aXRoIGluaXRfc3RhY2sgKyBUSFJFQURfU0laRS4KKwkgKiBUaGUgbWFzdGVyIHRpbGUgaW5pdGlhbGl6ZXMgdGhlIHBlci1jcHUgb2Zmc2V0IGFycmF5LCBzbyB0aGF0CisJICogd2hlbiBzdWJzZXF1ZW50IChzZWNvbmRhcnkpIHRpbGVzIGJvb3QsIHRoZXkgd2lsbCBpbnN0ZWFkIGxvYWQKKwkgKiBmcm9tIHRoZWlyIHBlci1jcHUgdmVyc2lvbnMgb2YgYm9vdF9zcCBhbmQgYm9vdF9wYy4KKwkgKi8KKwltb3ZlbGkgcjUsIGxvMTYoX19wZXJfY3B1X29mZnNldCkKKwlhdWxpIHI1LCByNSwgaGExNihfX3Blcl9jcHVfb2Zmc2V0KQorCXMyYSByNSwgcjQsIHI1CisJbHcgcjUsIHI1CisJYm56IHI1LCAxZgorCisJLyoKKwkgKiBTYXZlIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBzbXBfdG9wb2xvZ3kgdmFyaWFibGUKKwkgKiBmb3IgbGF0ZXIgdXNlLgorCSAqLworCW1vdmVsaSByMCwgbG8xNihzbXBfdG9wb2xvZ3kgKyBIVl9UT1BPTE9HWV9XSURUSF9PRkZTRVQpCisJYXVsaSByMCwgcjAsIGhhMTYoc21wX3RvcG9sb2d5ICsgSFZfVE9QT0xPR1lfV0lEVEhfT0ZGU0VUKQorCXsKKwkgIHN3IHIwLCByMgorCSAgYWRkaSByMCwgcjAsIChIVl9UT1BPTE9HWV9IRUlHSFRfT0ZGU0VUIC0gSFZfVE9QT0xPR1lfV0lEVEhfT0ZGU0VUKQorCX0KKwlzdyByMCwgcjMKKzE6CisjZWxzZQorCW1vdmUgcjUsIHplcm8KKyNlbmRpZgorCisJLyogTG9hZCBhbmQgZ28gd2l0aCB0aGUgY29ycmVjdCBwYyBhbmQgc3AuICovCisJeworCSAgYWRkbGkgcjEsIHI1LCBsbzE2KGJvb3Rfc3ApCisJICBhZGRsaSByMCwgcjUsIGxvMTYoYm9vdF9wYykKKwl9CisJeworCSAgYXVsaSByMSwgcjEsIGhhMTYoYm9vdF9zcCkKKwkgIGF1bGkgcjAsIHIwLCBoYTE2KGJvb3RfcGMpCisJfQorCWx3IHIwLCByMAorCWx3IHNwLCByMQorCW9yIHI0LCBzcCwgcjQKKwltdHNwciBTWVNURU1fU0FWRV8xXzAsIHI0ICAvKiBzYXZlIGtzcDAgKyBjcHUgKi8KKwlhZGRpIHNwLCBzcCwgLVNUQUNLX1RPUF9ERUxUQQorCXsKKwkgIG1vdmUgbHIsIHplcm8gICAvKiBzdG9wIGJhY2t0cmFjZXMgaW4gdGhlIGNhbGxlZCBmdW5jdGlvbiAqLworCSAganIgcjAKKwl9CisJRU5EUFJPQyhfc3RhcnQpCisKKy5zZWN0aW9uICIuYnNzLnBhZ2VfYWxpZ25lZCIsInciCisJLmFsaWduIFBBR0VfU0laRQorRU5UUlkoZW1wdHlfemVyb19wYWdlKQorCS5maWxsIFBBR0VfU0laRSwxLDAKKwlFTkQoZW1wdHlfemVyb19wYWdlKQorCisJLm1hY3JvIFBURSB2YSwgY3BhLCBiaXRzMSwgbm9fb3JnPTAKKwkuaWZlcSBcbm9fb3JnCisJLm9yZyBzd2FwcGVyX3BnX2RpciArIEhWX0wxX0lOREVYKFx2YSkgKiBIVl9QVEVfU0laRQorCS5lbmRpZgorCS53b3JkIEhWX1BURV9QQUdFIHwgSFZfUFRFX0RJUlRZIHwgSFZfUFRFX1BSRVNFTlQgfCBIVl9QVEVfQUNDRVNTRUQgfCBcCisJICAgICAgKEhWX1BURV9NT0RFX0NBQ0hFX05PX0wzIDw8IEhWX1BURV9JTkRFWF9NT0RFKQorCS53b3JkIChcYml0czEpIHwgKEhWX0NQQV9UT19QRk4oXGNwYSkgPDwgSFZfUFRFX0lOREVYX1BGTikKKwkuZW5kbQorCisuc2VjdGlvbiAiLmRhdGEucGFnZV9hbGlnbmVkIiwid2EiCisJLmFsaWduIFBBR0VfU0laRQorRU5UUlkoc3dhcHBlcl9wZ19kaXIpCisJLyoKKwkgKiBBbGwgZGF0YSBwYWdlcyBmcm9tIFBBR0VfT0ZGU0VUIHRvIE1FTV9VU0VSX0lOVFJQVCBhcmUgbWFwcGVkIGFzCisJICogVkEgPSBQQSArIFBBR0VfT0ZGU0VULiAgV2UgcmVtYXAgdGhpbmdzIHdpdGggbW9yZSBwcmVjaXNlIGFjY2VzcworCSAqIHBlcm1pc3Npb25zIGFuZCBtb3JlIHJlc3BlY3QgZm9yIHNpemUgb2YgUkFNIGxhdGVyLgorCSAqLworCS5zZXQgYWRkciwgMAorCS5yZXB0IChNRU1fVVNFUl9JTlRSUFQgLSBQQUdFX09GRlNFVCkgPj4gUEdESVJfU0hJRlQKKwlQVEUgYWRkciArIFBBR0VfT0ZGU0VULCBhZGRyLCBIVl9QVEVfUkVBREFCTEUgfCBIVl9QVEVfV1JJVEFCTEUKKwkuc2V0IGFkZHIsIGFkZHIgKyBQR0RJUl9TSVpFCisJLmVuZHIKKworCS8qIFRoZSB0cnVlIHRleHQgVkFzIGFyZSBtYXBwZWQgYXMgVkEgPSBQQSArIE1FTV9TVl9JTlRSUFQgKi8KKwlQVEUgTUVNX1NWX0lOVFJQVCwgMCwgSFZfUFRFX1JFQURBQkxFIHwgSFZfUFRFX0VYRUNVVEFCTEUKKwkub3JnIHN3YXBwZXJfcGdfZGlyICsgSFZfTDFfU0laRQorCUVORChzd2FwcGVyX3BnX2RpcikKKworCS8qCisJICogSXNvbGF0ZSBzd2FwcGVyX3BncHJvdCB0byBpdHMgb3duIGNhY2hlIGxpbmUsIHNpbmNlIGVhY2ggY3B1CisJICogc3RhcnRpbmcgdXAgd2lsbCByZWFkIGl0IHVzaW5nIFZBLWlzLVBBIGFuZCBsb2NhbCBob21pbmcuCisJICogVGhpcyB3b3VsZCBvdGhlcndpc2UgbGlrZWx5IGNvbmZsaWN0IHdpdGggb3RoZXIgZGF0YSBvbiB0aGUgY2FjaGUKKwkgKiBsaW5lLCBvbmNlIHdlIGhhdmUgc2V0IGl0cyBwZXJtYW5lbnQgaG9tZSBpbiB0aGUgcGFnZSB0YWJsZXMuCisJICovCisJX19JTklUREFUQQorCS5hbGlnbiBDSElQX0wyX0xJTkVfU0laRSgpCitFTlRSWShzd2FwcGVyX3BncHJvdCkKKwlQVEUJMCwgMCwgSFZfUFRFX1JFQURBQkxFIHwgSFZfUFRFX1dSSVRBQkxFLCAxCisJLmFsaWduIENISVBfTDJfTElORV9TSVpFKCkKKwlFTkQoc3dhcHBlcl9wZ3Byb3QpCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2h2Z2x1ZS5sZHMgYi9hcmNoL3RpbGUva2VybmVsL2h2Z2x1ZS5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3Y2QwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvaHZnbHVlLmxkcwpAQCAtMCwwICsxLDU4IEBACisvKiBIeXBlcnZpc29yIGNhbGwgdmVjdG9yIGFkZHJlc3Nlczsgc2VlIDxodi9oeXBlcnZpc29yLmg+ICovCitodl9pbml0ID0gVEVYVF9PRkZTRVQgKyAweDEwMDIwOworaHZfaW5zdGFsbF9jb250ZXh0ID0gVEVYVF9PRkZTRVQgKyAweDEwMDQwOworaHZfc3lzY29uZiA9IFRFWFRfT0ZGU0VUICsgMHgxMDA2MDsKK2h2X2dldF9ydGMgPSBURVhUX09GRlNFVCArIDB4MTAwODA7Citodl9zZXRfcnRjID0gVEVYVF9PRkZTRVQgKyAweDEwMGEwOworaHZfZmx1c2hfYXNpZCA9IFRFWFRfT0ZGU0VUICsgMHgxMDBjMDsKK2h2X2ZsdXNoX3BhZ2UgPSBURVhUX09GRlNFVCArIDB4MTAwZTA7Citodl9mbHVzaF9wYWdlcyA9IFRFWFRfT0ZGU0VUICsgMHgxMDEwMDsKK2h2X3Jlc3RhcnQgPSBURVhUX09GRlNFVCArIDB4MTAxMjA7Citodl9oYWx0ID0gVEVYVF9PRkZTRVQgKyAweDEwMTQwOworaHZfcG93ZXJfb2ZmID0gVEVYVF9PRkZTRVQgKyAweDEwMTYwOworaHZfaW5xdWlyZV9waHlzaWNhbCA9IFRFWFRfT0ZGU0VUICsgMHgxMDE4MDsKK2h2X2lucXVpcmVfbWVtb3J5X2NvbnRyb2xsZXIgPSBURVhUX09GRlNFVCArIDB4MTAxYTA7Citodl9pbnF1aXJlX3ZpcnR1YWwgPSBURVhUX09GRlNFVCArIDB4MTAxYzA7Citodl9pbnF1aXJlX2FzaWQgPSBURVhUX09GRlNFVCArIDB4MTAxZTA7Citodl9uYW5vc2xlZXAgPSBURVhUX09GRlNFVCArIDB4MTAyMDA7Citodl9jb25zb2xlX3JlYWRfaWZfcmVhZHkgPSBURVhUX09GRlNFVCArIDB4MTAyMjA7Citodl9jb25zb2xlX3dyaXRlID0gVEVYVF9PRkZTRVQgKyAweDEwMjQwOworaHZfZG93bmNhbGxfZGlzcGF0Y2ggPSBURVhUX09GRlNFVCArIDB4MTAyNjA7Citodl9pbnF1aXJlX3RvcG9sb2d5ID0gVEVYVF9PRkZTRVQgKyAweDEwMjgwOworaHZfZnNfZmluZGZpbGUgPSBURVhUX09GRlNFVCArIDB4MTAyYTA7Citodl9mc19mc3RhdCA9IFRFWFRfT0ZGU0VUICsgMHgxMDJjMDsKK2h2X2ZzX3ByZWFkID0gVEVYVF9PRkZTRVQgKyAweDEwMmUwOworaHZfcGh5c2FkZHJfcmVhZDY0ID0gVEVYVF9PRkZTRVQgKyAweDEwMzAwOworaHZfcGh5c2FkZHJfd3JpdGU2NCA9IFRFWFRfT0ZGU0VUICsgMHgxMDMyMDsKK2h2X2dldF9jb21tYW5kX2xpbmUgPSBURVhUX09GRlNFVCArIDB4MTAzNDA7Citodl9zZXRfY2FjaGluZyA9IFRFWFRfT0ZGU0VUICsgMHgxMDM2MDsKK2h2X2J6ZXJvX3BhZ2UgPSBURVhUX09GRlNFVCArIDB4MTAzODA7Citodl9yZWdpc3Rlcl9tZXNzYWdlX3N0YXRlID0gVEVYVF9PRkZTRVQgKyAweDEwM2EwOworaHZfc2VuZF9tZXNzYWdlID0gVEVYVF9PRkZTRVQgKyAweDEwM2MwOworaHZfcmVjZWl2ZV9tZXNzYWdlID0gVEVYVF9PRkZTRVQgKyAweDEwM2UwOworaHZfaW5xdWlyZV9jb250ZXh0ID0gVEVYVF9PRkZTRVQgKyAweDEwNDAwOworaHZfc3RhcnRfYWxsX3RpbGVzID0gVEVYVF9PRkZTRVQgKyAweDEwNDIwOworaHZfZGV2X29wZW4gPSBURVhUX09GRlNFVCArIDB4MTA0NDA7Citodl9kZXZfY2xvc2UgPSBURVhUX09GRlNFVCArIDB4MTA0NjA7Citodl9kZXZfcHJlYWQgPSBURVhUX09GRlNFVCArIDB4MTA0ODA7Citodl9kZXZfcHdyaXRlID0gVEVYVF9PRkZTRVQgKyAweDEwNGEwOworaHZfZGV2X3BvbGwgPSBURVhUX09GRlNFVCArIDB4MTA0YzA7Citodl9kZXZfcG9sbF9jYW5jZWwgPSBURVhUX09GRlNFVCArIDB4MTA0ZTA7Citodl9kZXZfcHJlYWRhID0gVEVYVF9PRkZTRVQgKyAweDEwNTAwOworaHZfZGV2X3B3cml0ZWEgPSBURVhUX09GRlNFVCArIDB4MTA1MjA7Citodl9mbHVzaF9yZW1vdGUgPSBURVhUX09GRlNFVCArIDB4MTA1NDA7Citodl9jb25zb2xlX3B1dGMgPSBURVhUX09GRlNFVCArIDB4MTA1NjA7Citodl9pbnF1aXJlX3RpbGVzID0gVEVYVF9PRkZTRVQgKyAweDEwNTgwOworaHZfY29uZnN0ciA9IFRFWFRfT0ZGU0VUICsgMHgxMDVhMDsKK2h2X3JlZXhlYyA9IFRFWFRfT0ZGU0VUICsgMHgxMDVjMDsKK2h2X3NldF9jb21tYW5kX2xpbmUgPSBURVhUX09GRlNFVCArIDB4MTA1ZTA7Citodl9jbGVhcl9pbnRyID0gVEVYVF9PRkZTRVQgKyAweDEwNjAwOworaHZfZW5hYmxlX2ludHIgPSBURVhUX09GRlNFVCArIDB4MTA2MjA7Citodl9kaXNhYmxlX2ludHIgPSBURVhUX09GRlNFVCArIDB4MTA2NDA7Citodl9yYWlzZV9pbnRyID0gVEVYVF9PRkZTRVQgKyAweDEwNjYwOworaHZfdHJpZ2dlcl9pcGkgPSBURVhUX09GRlNFVCArIDB4MTA2ODA7Citodl9zdG9yZV9tYXBwaW5nID0gVEVYVF9PRkZTRVQgKyAweDEwNmEwOworaHZfaW5xdWlyZV9yZWFscGEgPSBURVhUX09GRlNFVCArIDB4MTA2YzA7Citodl9mbHVzaF9hbGwgPSBURVhUX09GRlNFVCArIDB4MTA2ZTA7Citodl9nZXRfaXBpX3B0ZSA9IFRFWFRfT0ZGU0VUICsgMHgxMDcwMDsKK2h2X2dsdWVfaW50ZXJuYWxzID0gVEVYVF9PRkZTRVQgKyAweDEwNzIwOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9pbml0X3Rhc2suYyBiL2FyY2gvdGlsZS9rZXJuZWwvaW5pdF90YXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4YjMxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRfdGFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXJ0X2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IElOSVRfU0lHTkFMUyhpbml0X3NpZ25hbHMpOworc3RhdGljIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCBpbml0X3NpZ2hhbmQgPSBJTklUX1NJR0hBTkQoaW5pdF9zaWdoYW5kKTsKKworLyoKKyAqIEluaXRpYWwgdGhyZWFkIHN0cnVjdHVyZS4KKyAqCisgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgVEhSRUFEX1NJWkUgYWxpZ25lZCBkdWUgdG8gdGhlCisgKiB3YXkgcHJvY2VzcyBzdGFja3MgYXJlIGhhbmRsZWQuIFRoaXMgaXMgZG9uZSBieSBoYXZpbmcgYSBzcGVjaWFsCisgKiAiaW5pdF90YXNrIiBsaW5rZXIgbWFwIGVudHJ5Li4KKyAqLwordW5pb24gdGhyZWFkX3VuaW9uIGluaXRfdGhyZWFkX3VuaW9uIF9faW5pdF90YXNrX2RhdGEgPSB7CisJSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spCit9OworCisvKgorICogSW5pdGlhbCB0YXNrIHN0cnVjdHVyZS4KKyAqCisgKiBBbGwgb3RoZXIgdGFzayBzdHJ1Y3RzIHdpbGwgYmUgYWxsb2NhdGVkIG9uIHNsYWJzIGluIGZvcmsuYworICovCitzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrID0gSU5JVF9UQVNLKGluaXRfdGFzayk7CitFWFBPUlRfU1lNQk9MKGluaXRfdGFzayk7CisKKy8qCisgKiBwZXItQ1BVIHN0YWNrIGFuZCBib290IGluZm8uCisgKi8KK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGJvb3Rfc3ApID0KKwkodW5zaWduZWQgbG9uZylpbml0X3N0YWNrICsgVEhSRUFEX1NJWkU7CisKKyNpZmRlZiBDT05GSUdfU01QCitERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBib290X3BjKSA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0X2tlcm5lbDsKKyNlbHNlCisvKgorICogVGhlIHZhcmlhYmxlIG11c3QgYmUgX19pbml0ZGF0YSBzaW5jZSBpdCByZWZlcmVuY2VzIF9faW5pdCBjb2RlLgorICogV2l0aCBDT05GSUdfU01QIGl0IGlzIHBlci1jcHUgZGF0YSwgd2hpY2ggaXMgZXhlbXB0IGZyb20gdmFsaWRhdGlvbi4KKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGJvb3RfcGMgPSAodW5zaWduZWQgbG9uZylzdGFydF9rZXJuZWw7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvaW50dmVjXzMyLlMgYi9hcmNoL3RpbGUva2VybmVsL2ludHZlY18zMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MDRjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL2ludHZlY18zMi5TCkBAIC0wLDAgKzEsMjAwOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBMaW51eCBpbnRlcnJ1cHQgdmVjdG9ycy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFyY2gvYWJpLmg+CisjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorIyBlcnJvciAiTm8gc3VwcG9ydCBmb3Iga2VybmVsIHByZWVtcHRpb24gY3VycmVudGx5IgorI2VuZGlmCisKKyNpZiBJTlRfSU5UQ1RSTF8xIDwgMzIgfHwgSU5UX0lOVENUUkxfMSA+PSA0OAorIyBlcnJvciBJTlRfSU5UQ1RSTF8xIGNvZGVkIHRvIHNldCBoaWdoIGludGVycnVwdCBtYXNrCisjZW5kaWYKKworI2RlZmluZSBQVFJFR1NfUFRSKHJlZywgcHRyZWcpIGFkZGxpIHJlZywgc3AsIENfQUJJX1NBVkVfQVJFQV9TSVpFICsgKHB0cmVnKQorCisjZGVmaW5lIFBUUkVHU19PRkZTRVRfU1lTQ0FMTCBQVFJFR1NfT0ZGU0VUX1JFRyhUUkVHX1NZU0NBTExfTlIpCisKKyNpZiAhQ0hJUF9IQVNfV0g2NCgpCisJLyogQnkgbWFraW5nIHRoaXMgYW4gZW1wdHkgbWFjcm8sIHdlIGNhbiB1c2Ugd2g2NCBpbiB0aGUgY29kZS4gKi8KKwkubWFjcm8gIHdoNjQgcmVnCisJLmVuZG0KKyNlbmRpZgorCisJLm1hY3JvICBwdXNoX3JlZyByZWcsIHB0cj1zcCwgZGVsdGE9LTQKKwl7CisJIHN3ICAgICBccHRyLCBccmVnCisJIGFkZGxpICBccHRyLCBccHRyLCBcZGVsdGEKKwl9CisJLmVuZG0KKworCS5tYWNybyAgcG9wX3JlZyByZWcsIHB0cj1zcCwgZGVsdGE9NAorCXsKKwkgbHcgICAgIFxyZWcsIFxwdHIKKwkgYWRkbGkgIFxwdHIsIFxwdHIsIFxkZWx0YQorCX0KKwkuZW5kbQorCisJLm1hY3JvICBwb3BfcmVnX3plcm8gcmVnLCB6cmVnLCBwdHI9c3AsIGRlbHRhPTQKKwl7CisJIG1vdmUgICBcenJlZywgemVybworCSBsdyAgICAgXHJlZywgXHB0cgorCSBhZGRpICAgXHB0ciwgXHB0ciwgXGRlbHRhCisJfQorCS5lbmRtCisKKwkubWFjcm8gIHB1c2hfZXh0cmFfY2FsbGVlX3NhdmVzIHJlZworCVBUUkVHU19QVFIoXHJlZywgUFRSRUdTX09GRlNFVF9SRUcoNTEpKQorCXB1c2hfcmVnIHI1MSwgXHJlZworCXB1c2hfcmVnIHI1MCwgXHJlZworCXB1c2hfcmVnIHI0OSwgXHJlZworCXB1c2hfcmVnIHI0OCwgXHJlZworCXB1c2hfcmVnIHI0NywgXHJlZworCXB1c2hfcmVnIHI0NiwgXHJlZworCXB1c2hfcmVnIHI0NSwgXHJlZworCXB1c2hfcmVnIHI0NCwgXHJlZworCXB1c2hfcmVnIHI0MywgXHJlZworCXB1c2hfcmVnIHI0MiwgXHJlZworCXB1c2hfcmVnIHI0MSwgXHJlZworCXB1c2hfcmVnIHI0MCwgXHJlZworCXB1c2hfcmVnIHIzOSwgXHJlZworCXB1c2hfcmVnIHIzOCwgXHJlZworCXB1c2hfcmVnIHIzNywgXHJlZworCXB1c2hfcmVnIHIzNiwgXHJlZworCXB1c2hfcmVnIHIzNSwgXHJlZworCXB1c2hfcmVnIHIzNCwgXHJlZywgUFRSRUdTX09GRlNFVF9CQVNFIC0gUFRSRUdTX09GRlNFVF9SRUcoMzQpCisJLmVuZG0KKworCS5tYWNybyAgcGFuaWMgc3RyCisJLnB1c2hzZWN0aW9uIC5yb2RhdGEsICJhIgorMToKKwkuYXNjaXogICJcc3RyIgorCS5wb3BzZWN0aW9uCisJeworCSBtb3ZlbGkgcjAsIGxvMTYoMWIpCisJfQorCXsKKwkgYXVsaSAgIHIwLCByMCwgaGExNigxYikKKwkgamFsICAgIHBhbmljCisJfQorCS5lbmRtCisKKyNpZmRlZiBfX0NPTExFQ1RfTElOS0VSX0ZFRURCQUNLX18KKwkucHVzaHNlY3Rpb24gLnRleHQuaW50dmVjX2ZlZWRiYWNrLCJheCIKK2ludHZlY19mZWVkYmFjazoKKwkucG9wc2VjdGlvbgorI2VuZGlmCisKKwkvKgorCSAqIERlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXIuCisJICoKKwkgKiB2ZWNudW0gaXMgd2hlcmUgd2UnbGwgcHV0IHRoaXMgY29kZS4KKwkgKiBjX3JvdXRpbmUgaXMgdGhlIEMgcm91dGluZSB3ZSdsbCBjYWxsLgorCSAqCisJICogVGhlIEMgcm91dGluZSBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50czoKKwkgKiAtIEEgcG9pbnRlciB0byB0aGUgcHRfcmVncyBzdGF0ZS4KKwkgKiAtIFRoZSBpbnRlcnJ1cHQgdmVjdG9yIG51bWJlci4KKwkgKgorCSAqIFRoZSAicHJvY2Vzc2luZyIgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBjb2RlIGZvciBwcm9jZXNzaW5nCisJICogdGhlIGludGVycnVwdC4gRGVmYXVsdHMgdG8gImhhbmRsZV9pbnRlcnJ1cHQiLgorCSAqLworCS5tYWNybyAgaW50X2hhbmQgdmVjbnVtLCB2ZWNuYW1lLCBjX3JvdXRpbmUsIHByb2Nlc3Npbmc9aGFuZGxlX2ludGVycnVwdAorCS5vcmcgICAgKFx2ZWNudW0gPDwgOCkKK2ludHZlY19cdmVjbmFtZToKKwkuaWZjICAgIFx2ZWNudW0sIElOVF9TV0lOVF8xCisJYmx6ICAgICBUUkVHX1NZU0NBTExfTlJfTkFNRSwgc3lzX2NtcHhjaGcKKwkuZW5kaWYKKworCS8qIFRlbXBvcmFyaWx5IHNhdmUgYSByZWdpc3RlciBzbyB3ZSBoYXZlIHNvbWV3aGVyZSB0byB3b3JrLiAqLworCisJbXRzcHIgICBTWVNURU1fU0FWRV8xXzEsIHIwCisJbWZzcHIgICByMCwgRVhfQ09OVEVYVF8xXzEKKworCS8qIFRoZSBjbXB4Y2hnIGNvZGUgY2xlYXJzIHNwIHRvIGZvcmNlIHVzIHRvIHJlc2V0IGl0IGhlcmUgb24gZmF1bHQuICovCisJeworCSBieiAgICAgc3AsIDJmCisJIGFuZGkgICByMCwgcjAsIFNQUl9FWF9DT05URVhUXzFfMV9fUExfTUFTSyAgLyogbWFzayBvZmYgSUNTICovCisJfQorCisJLmlmYyAgICBcdmVjbnVtLCBJTlRfRE9VQkxFX0ZBVUxUCisJLyoKKwkgKiBGb3IgZG91YmxlLWZhdWx0cyBmcm9tIHVzZXItc3BhY2UsIGZhbGwgdGhyb3VnaCB0byB0aGUgbm9ybWFsCisJICogcmVnaXN0ZXIgc2F2ZSBhbmQgc3RhY2sgc2V0dXAgcGF0aC4gIE90aGVyd2lzZSwgaXQncyB0aGUKKwkgKiBoeXBlcnZpc29yIGdpdmluZyB1cyBvbmUgbGFzdCBjaGFuY2UgdG8gZHVtcCBkaWFnbm9zdGljcywgYW5kIHdlCisJICogYnJhbmNoIHRvIHRoZSBrZXJuZWxfZG91YmxlX2ZhdWx0IHJvdXRpbmUgdG8gZG8gc28uCisJICovCisJYnogICAgICByMCwgMWYKKwlqICAgICAgIF9rZXJuZWxfZG91YmxlX2ZhdWx0CisxOgorCS5lbHNlCisJLyoKKwkgKiBJZiB3ZSdyZSBjb21pbmcgZnJvbSB1c2VyLXNwYWNlLCB0aGVuIHNldCBzcCB0byB0aGUgdG9wIG9mCisJICogdGhlIGtlcm5lbCBzdGFjay4gIE90aGVyd2lzZSwgYXNzdW1lIHNwIGlzIGFscmVhZHkgdmFsaWQuCisJICovCisJeworCSBibnogICAgcjAsIDBmCisJIG1vdmUgICByMCwgc3AKKwl9CisJLmVuZGlmCisKKwkuaWZjICAgIFxjX3JvdXRpbmUsIGRvX3BhZ2VfZmF1bHQKKwkvKgorCSAqIFRoZSBwYWdlX2ZhdWx0IGhhbmRsZXIgbWF5IGJlIGRvd25jYWxsZWQgZGlyZWN0bHkgYnkgdGhlCisJICogaHlwZXJ2aXNvciBldmVuIHdoZW4gTGludXggaXMgcnVubmluZyBhbmQgaGFzIElDUyBzZXQuCisJICoKKwkgKiBJbiB0aGlzIGNhc2UgdGhlIGNvbnRlbnRzIG9mIEVYX0NPTlRFWFRfMV8xIHJlZmxlY3QgdGhlCisJICogcHJldmlvdXMgZmF1bHQgYW5kIGNhbid0IGJlIHJlbGllZCBvbiB0byBjaG9vc2Ugd2hldGhlciBvcgorCSAqIG5vdCB0byByZWluaXRpYWxpemUgdGhlIHN0YWNrIHBvaW50ZXIuICBTbyB3ZSBhZGQgYSB0ZXN0CisJICogdG8gc2VlIHdoZXRoZXIgU1lTVEVNX1NBVkVfMV8yIGhhcyB0aGUgaGlnaCBiaXQgc2V0LAorCSAqIGFuZCBpZiBzbyB3ZSBkb24ndCByZWluaXRpYWxpemUgc3AsIHNpbmNlIHdlIG11c3QgYmUgY29taW5nCisJICogZnJvbSBMaW51eC4gIChJbiBmYWN0IHRoZSBwcmVjaXNlIGNhc2UgaXMgISh2YWwgJiB+MSksCisJICogYnV0IGFueSBMaW51eCBQQyBoYXMgdG8gaGF2ZSB0aGUgaGlnaCBiaXQgc2V0LikKKwkgKgorCSAqIE5vdGUgdGhhdCB0aGUgaHlwZXJ2aXNvciAqYWx3YXlzKiBzZXRzIFNZU1RFTV9TQVZFXzFfMiBmb3IKKwkgKiBhbnkgcGF0aCB0aGF0IHR1cm5zIGludG8gYSBkb3duY2FsbCB0byBvbmUgb2Ygb3VyIFRMQiBoYW5kbGVycy4KKwkgKi8KKwltZnNwciAgIHIwLCBTWVNURU1fU0FWRV8xXzIKKwl7CisJIGJseiAgICByMCwgMGYgICAgLyogaGlnaCBiaXQgaW4gU19TXzFfMiBpcyBmb3IgYSBQQyB0byB1c2UgKi8KKwkgbW92ZSAgIHIwLCBzcAorCX0KKwkuZW5kaWYKKworMjoKKwkvKgorCSAqIFNZU1RFTV9TQVZFXzFfMCBob2xkcyB0aGUgY3B1IG51bWJlciBpbiB0aGUgbG93IGJpdHMsIGFuZAorCSAqIHRoZSBjdXJyZW50IHN0YWNrIHRvcCBpbiB0aGUgaGlnaGVyIGJpdHMuICBTbyB3ZSByZWNvdmVyCisJICogb3VyIHN0YWNrIHRvcCBieSBqdXN0IG1hc2tpbmcgb2ZmIHRoZSBsb3cgYml0cywgdGhlbgorCSAqIHBvaW50IHNwIGF0IHRoZSB0b3AgYWxpZ25lZCBhZGRyZXNzIG9uIHRoZSBhY3R1YWwgc3RhY2sgcGFnZS4KKwkgKi8KKwltZnNwciAgIHIwLCBTWVNURU1fU0FWRV8xXzAKKwltbSAgICAgIHIwLCByMCwgemVybywgTE9HMl9USFJFQURfU0laRSwgMzEKKworMDoKKwkvKgorCSAqIEFsaWduIHRoZSBzdGFjayBtb2QgNjQgc28gd2UgY2FuIHByb3Blcmx5IHByZWRpY3Qgd2hhdAorCSAqIGNhY2hlIGxpbmVzIHdlIG5lZWQgdG8gd3JpdGUtaGludCB0byByZWR1Y2UgbWVtb3J5IGZldGNoCisJICogbGF0ZW5jeSBhcyB3ZSBlbnRlciB0aGUga2VybmVsLiAgVGhlIGxheW91dCBvZiBtZW1vcnkgaXMKKwkgKiBhcyBmb2xsb3dzLCB3aXRoIGNhY2hlIGxpbmUgMCBhdCB0aGUgbG93ZXN0IFZBLCBhbmQgY2FjaGUKKwkgKiBsaW5lIDQganVzdCBiZWxvdyB0aGUgcjAgdmFsdWUgdGhpcyAiYW5kaSIgY29tcHV0ZXMuCisJICogTm90ZSB0aGF0IHdlIG5ldmVyIHdyaXRlIHRvIGNhY2hlIGxpbmUgNCwgYW5kIHdlIHNraXAKKwkgKiBjYWNoZSBsaW5lIDEgZm9yIHN5c2NhbGxzLgorCSAqCisJICogICAgY2FjaGUgbGluZSA0OiBwdHJlZ3MgcGFkZGluZyAodHdvIHdvcmRzKQorCSAqICAgIGNhY2hlIGxpbmUgMzogcjQ2Li4ubHIsIHBjLCBleDEsIGZhdWx0bnVtLCBvcmlnX3IwLCBmbGFncywgcGFkCisJICogICAgY2FjaGUgbGluZSAyOiByMzAuLi5yNDUKKwkgKiAgICBjYWNoZSBsaW5lIDE6IHIxNC4uLnIyOQorCSAqICAgIGNhY2hlIGxpbmUgMDogMiB4IGZyYW1lLCByMC4ucjEzCisJICovCisJYW5kaSAgICByMCwgcjAsIC02NAorCisJLyoKKwkgKiBQdXNoIHRoZSBmaXJzdCBmb3VyIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2ssIHNvIHRoYXQgd2UgY2FuIHNldAorCSAqIHRoZW0gdG8gdmVjdG9yLXVuaXF1ZSB2YWx1ZXMgYmVmb3JlIHdlIGp1bXAgdG8gdGhlIGNvbW1vbiBjb2RlLgorCSAqCisJICogUmVnaXN0ZXJzIGFyZSBwdXNoZWQgb24gdGhlIHN0YWNrIGFzIGEgc3RydWN0IHB0X3JlZ3MsCisJICogd2l0aCB0aGUgc3AgaW5pdGlhbGx5IGp1c3QgYWJvdmUgdGhlIHN0cnVjdCwgYW5kIHdoZW4gd2UncmUKKwkgKiBkb25lLCBzcCBwb2ludHMgdG8gdGhlIGJhc2Ugb2YgdGhlIHN0cnVjdCwgbWludXMKKwkgKiBDX0FCSV9TQVZFX0FSRUFfU0laRSwgc28gd2UgY2FuIGRpcmVjdGx5IGphbCB0byBDIGNvZGUuCisJICoKKwkgKiBUaGlzIHJvdXRpbmUgc2F2ZXMganVzdCB0aGUgZmlyc3QgZm91ciByZWdpc3RlcnMsIHBsdXMgdGhlCisJICogc3RhY2sgY29udGV4dCBzbyB3ZSBjYW4gZG8gcHJvcGVyIGJhY2t0cmFjaW5nIHJpZ2h0IGF3YXksCisJICogYW5kIGRlZmVycyB0byBoYW5kbGVfaW50ZXJydXB0IHRvIHNhdmUgdGhlIHJlc3QuCisJICogVGhlIGJhY2t0cmFjZXIgbmVlZHMgcGMsIGV4MSwgbHIsIHNwLCByNTIsIGFuZCBmYXVsdG51bS4KKwkgKi8KKwlhZGRsaSAgIHIwLCByMCwgUFRSRUdTX09GRlNFVF9MUiAtIChQVFJFR1NfU0laRSArIEtTVEtfUFRSRUdTX0dBUCkKKwl3aDY0ICAgIHIwICAgIC8qIGNhY2hlIGxpbmUgMyAqLworCXsKKwkgc3cgICAgIHIwLCBscgorCSBhZGRsaSAgcjAsIHIwLCBQVFJFR1NfT0ZGU0VUX1NQIC0gUFRSRUdTX09GRlNFVF9MUgorCX0KKwl7CisJIHN3ICAgICByMCwgc3AKKwkgYWRkbGkgIHNwLCByMCwgUFRSRUdTX09GRlNFVF9SRUcoNTIpIC0gUFRSRUdTX09GRlNFVF9TUAorCX0KKwl7CisJIHN3ICAgICBzcCwgcjUyCisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfUkVHKDEpIC0gUFRSRUdTX09GRlNFVF9SRUcoNTIpCisJfQorCXdoNjQgICAgc3AgICAgLyogY2FjaGUgbGluZSAwICovCisJeworCSBzdyAgICAgc3AsIHIxCisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfUkVHKDIpIC0gUFRSRUdTX09GRlNFVF9SRUcoMSkKKwl9CisJeworCSBzdyAgICAgc3AsIHIyCisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfUkVHKDMpIC0gUFRSRUdTX09GRlNFVF9SRUcoMikKKwl9CisJeworCSBzdyAgICAgc3AsIHIzCisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfUEMgLSBQVFJFR1NfT0ZGU0VUX1JFRygzKQorCX0KKwltZnNwciAgIHIwLCBFWF9DT05URVhUXzFfMAorCS5pZmMgXHByb2Nlc3NpbmcsaGFuZGxlX3N5c2NhbGwKKwkvKgorCSAqIEJ1bXAgdGhlIHNhdmVkIFBDIGJ5IG9uZSBidW5kbGUgc28gdGhhdCB3aGVuIHdlIHJldHVybiwgd2Ugd29uJ3QKKwkgKiBleGVjdXRlIHRoZSBzYW1lIHN3aW50IGluc3RydWN0aW9uIGFnYWluLiAgV2UgbmVlZCB0byBkbyB0aGlzIHdoaWxlCisJICogd2UncmUgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24uCisJICovCisJYWRkaSAgICByMCwgcjAsIDgKKwkuZW5kaWYKKwl7CisJIHN3ICAgICBzcCwgcjAKKwkgYWRkbGkgIHNwLCBzcCwgUFRSRUdTX09GRlNFVF9FWDEgLSBQVFJFR1NfT0ZGU0VUX1BDCisJfQorCW1mc3ByICAgcjAsIEVYX0NPTlRFWFRfMV8xCisJeworCSBzdyAgICAgc3AsIHIwCisJIGFkZGkgICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfRkFVTFROVU0gLSBQVFJFR1NfT0ZGU0VUX0VYMQorCS8qCisJICogVXNlIHIwIGZvciBzeXNjYWxscyBzbyBpdCdzIGEgdGVtcG9yYXJ5OyB1c2UgcjEgZm9yIGludGVycnVwdHMKKwkgKiBzbyB0aGF0IGl0IGdldHMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkIHRvIHRoZSBoYW5kbGVyIHJvdXRpbmUuCisJICogTm90ZSB0aGF0IHRoZSAuaWYgY29uZGl0aW9uYWwgY29uZnVzaW5nbHkgc3BhbnMgYnVuZGxlcy4KKwkgKi8KKwkgLmlmYyBccHJvY2Vzc2luZyxoYW5kbGVfc3lzY2FsbAorCSBtb3ZlaSAgcjAsIFx2ZWNudW0KKwl9CisJeworCSBzdyAgICAgc3AsIHIwCisJIC5lbHNlCisJIG1vdmVpICByMSwgXHZlY251bQorCX0KKwl7CisJIHN3ICAgICBzcCwgcjEKKwkgLmVuZGlmCisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfUkVHKDApIC0gUFRSRUdTX09GRlNFVF9GQVVMVE5VTQorCX0KKwltZnNwciAgIHIwLCBTWVNURU1fU0FWRV8xXzEgICAgLyogT3JpZ2luYWwgcjAgKi8KKwl7CisJIHN3ICAgICBzcCwgcjAKKwkgYWRkaSAgIHNwLCBzcCwgLVBUUkVHU19PRkZTRVRfUkVHKDApIC0gNAorCX0KKwl7CisJIHN3ICAgICBzcCwgemVybyAgICAgICAgLyogd3JpdGUgemVybyBpbnRvICJOZXh0IFNQIiBmcmFtZSBwb2ludGVyICovCisJIGFkZGkgICBzcCwgc3AsIC00ICAgICAgLyogbGVhdmUgU1AgcG9pbnRpbmcgYXQgYm90dG9tIG9mIGZyYW1lICovCisJfQorCS5pZmMgXHByb2Nlc3NpbmcsaGFuZGxlX3N5c2NhbGwKKwlqICAgICAgIGhhbmRsZV9zeXNjYWxsCisJLmVsc2UKKwkvKgorCSAqIENhcHR1cmUgcGVyLWludGVycnVwdCBTUFIgY29udGV4dCB0byByZWdpc3RlcnMuCisJICogV2Ugb3ZlcmxvYWQgdGhlIG1lYW5pbmcgb2YgcjMgb24gdGhpcyBwYXRoIHN1Y2ggdGhhdCBpZiBpdHMgYml0IDMxCisJICogaXMgc2V0LCB3ZSBoYXZlIHRvIG1hc2sgYWxsIGludGVycnVwdHMgaW5jbHVkaW5nIE5NSXMgYmVmb3JlCisJICogY2xlYXJpbmcgdGhlIGludGVycnVwdCBjcml0aWNhbCBzZWN0aW9uIGJpdC4KKwkgKiBTZWUgZGlzY3Vzc2lvbiBiZWxvdyBhdCAiZmluaXNoX2ludGVycnVwdF9zYXZlIi4KKwkgKi8KKwkuaWZjIFxjX3JvdXRpbmUsIGRvX3BhZ2VfZmF1bHQKKwltZnNwciAgIHIyLCBTWVNURU1fU0FWRV8xXzMgICAvKiBhZGRyZXNzIG9mIHBhZ2UgZmF1bHQgKi8KKwltZnNwciAgIHIzLCBTWVNURU1fU0FWRV8xXzIgICAvKiBpbmZvIGFib3V0IHBhZ2UgZmF1bHQgKi8KKwkuZWxzZQorCS5pZmMgXHZlY251bSwgSU5UX0RPVUJMRV9GQVVMVAorCXsKKwkgbWZzcHIgIHIyLCBTWVNURU1fU0FWRV8xXzIgICAvKiBkb3VibGUgZmF1bHQgaW5mbyBmcm9tIEhWICovCisJIG1vdmVpICByMywgMAorCX0KKwkuZWxzZQorCS5pZmMgXGNfcm91dGluZSwgZG9fdHJhcAorCXsKKwkgbWZzcHIgIHIyLCBHUFZfUkVBU09OCisJIG1vdmVpICByMywgMAorCX0KKwkuZWxzZQorCS5pZmMgXGNfcm91dGluZSwgb3BfaGFuZGxlX3BlcmZfaW50ZXJydXB0CisJeworCSBtZnNwciAgcjIsIFBFUkZfQ09VTlRfU1RTCisJIG1vdmVpICByMywgLTEgICAvKiBub3QgdXNlZCwgYnV0IHNldCBmb3IgY29uc2lzdGVuY3kgKi8KKwl9CisJLmVsc2UKKyNpZiBDSElQX0hBU19BVVhfUEVSRl9DT1VOVEVSUygpCisJLmlmYyBcY19yb3V0aW5lLCBvcF9oYW5kbGVfYXV4X3BlcmZfaW50ZXJydXB0CisJeworCSBtZnNwciAgcjIsIEFVWF9QRVJGX0NPVU5UX1NUUworCSBtb3ZlaSAgcjMsIC0xICAgLyogbm90IHVzZWQsIGJ1dCBzZXQgZm9yIGNvbnNpc3RlbmN5ICovCisJfQorCS5lbHNlCisjZW5kaWYKKwltb3ZlaSAgIHIzLCAwCisjaWYgQ0hJUF9IQVNfQVVYX1BFUkZfQ09VTlRFUlMoKQorCS5lbmRpZgorI2VuZGlmCisJLmVuZGlmCisJLmVuZGlmCisJLmVuZGlmCisJLmVuZGlmCisJLyogUHV0IGZ1bmN0aW9uIHBvaW50ZXIgaW4gcjAgKi8KKwltb3ZlbGkgIHIwLCBsbzE2KFxjX3JvdXRpbmUpCisJeworCSBhdWxpICAgcjAsIHIwLCBoYTE2KFxjX3JvdXRpbmUpCisJIGogICAgICAgXHByb2Nlc3NpbmcKKwl9CisJLmVuZGlmCisJRU5EUFJPQyhpbnR2ZWNfXHZlY25hbWUpCisKKyNpZmRlZiBfX0NPTExFQ1RfTElOS0VSX0ZFRURCQUNLX18KKwkucHVzaHNlY3Rpb24gLnRleHQuaW50dmVjX2ZlZWRiYWNrLCJheCIKKwkub3JnICAgIChcdmVjbnVtIDw8IDUpCisJRkVFREJBQ0tfRU5URVJfRVhQTElDSVQoaW50dmVjX1x2ZWNuYW1lLCAuaW50cnB0MSwgMSA8PCA4KQorCWpycCAgICAgbHIKKwkucG9wc2VjdGlvbgorI2VuZGlmCisKKwkuZW5kbQorCisKKwkvKgorCSAqIFNhdmUgdGhlIHJlc3Qgb2YgdGhlIHJlZ2lzdGVycyB0aGF0IHdlIGRpZG4ndCBzYXZlIGluIHRoZSBhY3R1YWwKKwkgKiB2ZWN0b3IgaXRzZWxmLiAgV2UgY2FuJ3QgdXNlIHIwLXIxMCBpbmNsdXNpdmUgaGVyZS4KKwkgKi8KKwkubWFjcm8gIGZpbmlzaF9pbnRlcnJ1cHRfc2F2ZSwgZnVuY3Rpb24KKworCS8qIElmIGl0J3MgYSBzeXNjYWxsLCBzYXZlIGEgcHJvcGVyIG9yaWdfcjAsIG90aGVyd2lzZSBqdXN0IHplcm8uICovCisJUFRSRUdTX1BUUihyNTIsIFBUUkVHU19PRkZTRVRfT1JJR19SMCkKKwl7CisJIC5pZmMgXGZ1bmN0aW9uLGhhbmRsZV9zeXNjYWxsCisJIHN3ICAgICByNTIsIHIwCisJIC5lbHNlCisJIHN3ICAgICByNTIsIHplcm8KKwkgLmVuZGlmCisJIFBUUkVHU19QVFIocjUyLCBQVFJFR1NfT0ZGU0VUX1RQKQorCX0KKworCS8qCisJICogRm9yIG9yZGluYXJ5IHN5c2NhbGxzLCB3ZSBzYXZlIG5laXRoZXIgY2FsbGVyLSBub3IgY2FsbGVlLQorCSAqIHNhdmUgcmVnaXN0ZXJzLCBzaW5jZSB0aGUgc3lzY2FsbCBpbnZva2VyIGRvZXNuJ3QgZXhwZWN0IHRoZQorCSAqIGNhbGxlci1zYXZlcyB0byBiZSBzYXZlZCwgYW5kIHRoZSBjYWxsZWQga2VybmVsIGZ1bmN0aW9ucyB3aWxsCisJICogdGFrZSBjYXJlIG9mIHNhdmluZyB0aGUgY2FsbGVlLXNhdmVzIGZvciB1cy4KKwkgKgorCSAqIEZvciBpbnRlcnJ1cHRzIHdlIHNhdmUganVzdCB0aGUgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzLiAgU2F2aW5nCisJICogdGhlbSBpcyByZXF1aXJlZCAoc2luY2UgdGhlICJjYWxsZXIiIGNhbid0IHNhdmUgdGhlbSkuICBBZ2FpbiwKKwkgKiB0aGUgY2FsbGVkIGtlcm5lbCBmdW5jdGlvbnMgd2lsbCByZXN0b3JlIHRoZSBjYWxsZWUtc2F2ZQorCSAqIHJlZ2lzdGVycyBmb3IgdXMgYXBwcm9wcmlhdGVseS4KKwkgKgorCSAqIE9uIHJldHVybiwgd2Ugbm9ybWFsbHkgcmVzdG9yZSBub3RoaW5nIHNwZWNpYWwgZm9yIHN5c2NhbGxzLAorCSAqIGFuZCBqdXN0IHRoZSBjYWxsZXItc2F2ZSByZWdpc3RlcnMgZm9yIGludGVycnVwdHMuCisJICoKKwkgKiBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBpbXBvcnRhbnQgY2F2ZWF0cyB0byBhbGwgdGhpczoKKwkgKgorCSAqIC0gV2UgYWx3YXlzIHNhdmUgYSBmZXcgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIHRvIGdpdmUgdXMKKwkgKiAgIHNvbWUgc2NyYXRjaHBhZCByZWdpc3RlcnMgdG8gY2FycnkgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLgorCSAqCisJICogLSBmb3JrL3Zmb3JrL2V0YyByZXF1aXJlIHVzIHRvIHNhdmUgYWxsIHRoZSBjYWxsZWUtc2F2ZQorCSAqICAgcmVnaXN0ZXJzLCB3aGljaCB3ZSBkbyBpbiBQVFJFR1NfU1lTQ0FMTF9BTExfUkVHUywgYmVsb3cuCisJICoKKwkgKiAtIFdlIGFsd2F5cyBzYXZlIHIwLi5yNSBhbmQgcjEwIGZvciBzeXNjYWxscywgc2luY2Ugd2UgbmVlZAorCSAqICAgdG8gcmVsb2FkIHRoZW0gYSBiaXQgbGF0ZXIgZm9yIHRoZSBhY3R1YWwga2VybmVsIGNhbGwsIGFuZAorCSAqICAgc2luY2Ugd2UgbWlnaHQgbmVlZCB0aGVtIGZvciAtRVJFU1RBUlROT0lOVFIsIGV0Yy4KKwkgKgorCSAqIC0gQmVmb3JlIGludm9raW5nIGEgc2lnbmFsIGhhbmRsZXIsIHdlIHNhdmUgdGhlIHVuc2F2ZWQKKwkgKiAgIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBzbyB0aGV5IGFyZSB2aXNpYmxlIHRvIHRoZQorCSAqICAgc2lnbmFsIGhhbmRsZXIgb3IgYW55IHB0cmFjZXIuCisJICoKKwkgKiAtIElmIHRoZSB1bnNhdmVkIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhcmUgbW9kaWZpZWQsIHdlIHNldAorCSAqICAgYSBiaXQgaW4gcHRfcmVncyBzbyB3ZSBrbm93IHRvIHJlbG9hZCB0aGVtIGZyb20gcHRfcmVncworCSAqICAgYW5kIG5vdCBqdXN0IHJlbHkgb24gdGhlIGtlcm5lbCBmdW5jdGlvbiB1bndpbmRpbmcuCisJICogICAoRG9uZSBmb3IgcHRyYWNlIHJlZ2lzdGVyIHdyaXRlcyBhbmQgU0FfU0lHSU5GTyBoYW5kbGVyLikKKwkgKi8KKwl7CisJIHN3ICAgICByNTIsIHRwCisJIFBUUkVHU19QVFIocjUyLCBQVFJFR1NfT0ZGU0VUX1JFRygzMykpCisJfQorCXdoNjQgICAgcjUyICAgIC8qIGNhY2hlIGxpbmUgMiAqLworCXB1c2hfcmVnIHIzMywgcjUyCisJcHVzaF9yZWcgcjMyLCByNTIKKwlwdXNoX3JlZyByMzEsIHI1MgorCS5pZmMgXGZ1bmN0aW9uLGhhbmRsZV9zeXNjYWxsCisJcHVzaF9yZWcgcjMwLCByNTIsIFBUUkVHU19PRkZTRVRfU1lTQ0FMTCAtIFBUUkVHU19PRkZTRVRfUkVHKDMwKQorCXB1c2hfcmVnIFRSRUdfU1lTQ0FMTF9OUl9OQU1FLCByNTIsIFwKKwkgIFBUUkVHU19PRkZTRVRfUkVHKDUpIC0gUFRSRUdTX09GRlNFVF9TWVNDQUxMCisJLmVsc2UKKworCXB1c2hfcmVnIHIzMCwgcjUyLCBQVFJFR1NfT0ZGU0VUX1JFRygyOSkgLSBQVFJFR1NfT0ZGU0VUX1JFRygzMCkKKwl3aDY0ICAgIHI1MiAgICAvKiBjYWNoZSBsaW5lIDEgKi8KKwlwdXNoX3JlZyByMjksIHI1MgorCXB1c2hfcmVnIHIyOCwgcjUyCisJcHVzaF9yZWcgcjI3LCByNTIKKwlwdXNoX3JlZyByMjYsIHI1MgorCXB1c2hfcmVnIHIyNSwgcjUyCisJcHVzaF9yZWcgcjI0LCByNTIKKwlwdXNoX3JlZyByMjMsIHI1MgorCXB1c2hfcmVnIHIyMiwgcjUyCisJcHVzaF9yZWcgcjIxLCByNTIKKwlwdXNoX3JlZyByMjAsIHI1MgorCXB1c2hfcmVnIHIxOSwgcjUyCisJcHVzaF9yZWcgcjE4LCByNTIKKwlwdXNoX3JlZyByMTcsIHI1MgorCXB1c2hfcmVnIHIxNiwgcjUyCisJcHVzaF9yZWcgcjE1LCByNTIKKwlwdXNoX3JlZyByMTQsIHI1MgorCXB1c2hfcmVnIHIxMywgcjUyCisJcHVzaF9yZWcgcjEyLCByNTIKKwlwdXNoX3JlZyByMTEsIHI1MgorCXB1c2hfcmVnIHIxMCwgcjUyCisJcHVzaF9yZWcgcjksIHI1MgorCXB1c2hfcmVnIHI4LCByNTIKKwlwdXNoX3JlZyByNywgcjUyCisJcHVzaF9yZWcgcjYsIHI1MgorCisJLmVuZGlmCisKKwlwdXNoX3JlZyByNSwgcjUyCisJc3cgICAgICByNTIsIHI0CisKKwkvKiBMb2FkIHRwIHdpdGggb3VyIHBlci1jcHUgb2Zmc2V0LiAqLworI2lmZGVmIENPTkZJR19TTVAKKwl7CisJIG1mc3ByICByMjAsIFNZU1RFTV9TQVZFXzFfMAorCSBtb3ZlbGkgcjIxLCBsbzE2KF9fcGVyX2NwdV9vZmZzZXQpCisJfQorCXsKKwkgYXVsaSAgIHIyMSwgcjIxLCBoYTE2KF9fcGVyX2NwdV9vZmZzZXQpCisJIG1tICAgICByMjAsIHIyMCwgemVybywgMCwgTE9HMl9USFJFQURfU0laRS0xCisJfQorCXMyYSAgICAgcjIwLCByMjAsIHIyMQorCWx3ICAgICAgdHAsIHIyMAorI2Vsc2UKKwltb3ZlICAgIHRwLCB6ZXJvCisjZW5kaWYKKworCS8qCisJICogSWYgd2Ugd2lsbCBiZSByZXR1cm5pbmcgdG8gdGhlIGtlcm5lbCwgd2Ugd2lsbCBuZWVkIHRvCisJICogcmVzZXQgdGhlIGludGVycnVwdCBtYXNrcyB0byB0aGUgc3RhdGUgdGhleSBoYWQgYmVmb3JlLgorCSAqIFNldCBESVNBQkxFX0lSUSBpbiBmbGFncyBpZmYgd2UgY2FtZSBmcm9tIFBMMSB3aXRoIGlycXMgZGlzYWJsZWQuCisJICogV2UgbG9hZCBmbGFncyBpbiByMzIgaGVyZSBzbyB3ZSBjYW4ganVtcCB0byAuTHJlc3RvcmVfcmVncworCSAqIGRpcmVjdGx5IGFmdGVyIGRvX3BhZ2VfZmF1bHRfaWNzKCkgaWYgbmVjZXNzYXJ5LgorCSAqLworCW1mc3ByICAgcjMyLCBFWF9DT05URVhUXzFfMQorCXsKKwkgYW5kaSAgIHIzMiwgcjMyLCBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX01BU0sgIC8qIG1hc2sgb2ZmIElDUyAqLworCSBQVFJFR1NfUFRSKHIyMSwgUFRSRUdTX09GRlNFVF9GTEFHUykKKwl9CisJYnp0ICAgICByMzIsIDFmICAgICAgIC8qIHplcm8gaWYgZnJvbSB1c2VyIHNwYWNlICovCisJSVJRU19ESVNBQkxFRChyMzIpICAgIC8qIHplcm8gaWYgaXJxcyBlbmFibGVkICovCisjaWYgUFRfRkxBR1NfRElTQUJMRV9JUlEgIT0gMQorIyBlcnJvciBWYWx1ZSBvZiBJUlFTX0RJU0FCTEVEIHVzZWQgdG8gc2V0IFBUX0ZMQUdTX0RJU0FCTEVfSVJROyBmaXgKKyNlbmRpZgorMToKKwkuaWZuYyBcZnVuY3Rpb24saGFuZGxlX3N5c2NhbGwKKwkvKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBzYXZlZCB0aGUgY2FsbGVyLXNhdmUgcmVnaXN0ZXJzIGFib3ZlLiAqLworCW9yaSAgICAgcjMyLCByMzIsIFBUX0ZMQUdTX0NBTExFUl9TQVZFUworCS5lbmRpZgorCXN3ICAgICAgcjIxLCByMzIKKworI2lmZGVmIF9fQ09MTEVDVF9MSU5LRVJfRkVFREJBQ0tfXworCS8qCisJICogTm90aWZ5IHRoZSBmZWVkYmFjayByb3V0aW5lcyB0aGF0IHdlIHdlcmUgaW4gdGhlCisJICogYXBwcm9wcmlhdGUgZml4ZWQgaW50ZXJydXB0IHZlY3RvciBhcmVhLiAgTm90ZSB0aGF0IHdlCisJICogc3RpbGwgaGF2ZSBJQ1Mgc2V0IGF0IHRoaXMgcG9pbnQsIHNvIHdlIGNhbid0IGludm9rZSBhbnkKKwkgKiBhdG9taWMgb3BlcmF0aW9ucyBvciB3ZSB3aWxsIHBhbmljLiAgVGhlIGZlZWRiYWNrCisJICogcm91dGluZXMgaW50ZXJuYWxseSBwcmVzZXJ2ZSByMC4ucjEwIGFuZCByMzAgdXAuCisJICovCisJLmlmbmMgXGZ1bmN0aW9uLGhhbmRsZV9zeXNjYWxsCisJc2hsaSAgICByMjAsIHIxLCA1CisJLmVsc2UKKwltb3ZlbGkgIHIyMCwgSU5UX1NXSU5UXzEgPDwgNQorCS5lbmRpZgorCWFkZGxpICAgcjIwLCByMjAsIGxvMTYoaW50dmVjX2ZlZWRiYWNrKQorCWF1bGkgICAgcjIwLCByMjAsIGhhMTYoaW50dmVjX2ZlZWRiYWNrKQorCWphbHIgICAgcjIwCisKKwkvKiBBbmQgbm93IG5vdGlmeSB0aGUgZmVlZGJhY2sgcm91dGluZXMgdGhhdCB3ZSBhcmUgaGVyZS4gKi8KKwlGRUVEQkFDS19FTlRFUihcZnVuY3Rpb24pCisjZW5kaWYKKworCS8qCisJICogd2UndmUgY2FwdHVyZWQgZW5vdWdoIHN0YXRlIHRvIHRoZSBzdGFjayAoaW5jbHVkaW5nIGluCisJICogcGFydGljdWxhciBvdXIgRVhfQ09OVEVYVCBzdGF0ZSkgdGhhdCB3ZSBjYW4gbm93IHJlbGVhc2UKKwkgKiB0aGUgaW50ZXJydXB0IGNyaXRpY2FsIHNlY3Rpb24gYW5kIHJlcGxhY2UgaXQgd2l0aCBvdXIKKwkgKiBzdGFuZGFyZCAiaW50ZXJydXB0cyBkaXNhYmxlZCIgbWFzayB2YWx1ZS4gIFRoaXMgYWxsb3dzCisJICogc3luY2hyb25vdXMgaW50ZXJydXB0cyAoYW5kIHByb2ZpbGUgaW50ZXJydXB0cykgdG8gcHVuY2gKKwkgKiB0aHJvdWdoIGZyb20gdGhpcyBwb2ludCBvbndhcmRzLgorCSAqCisJICogSWYgYml0IDMxIG9mIHIzIGlzIHNldCBkdXJpbmcgYSBub24tTk1JIGludGVycnVwdCwgd2Uga25vdyB3ZQorCSAqIGFyZSBvbiB0aGUgcGF0aCB3aGVyZSB0aGUgaHlwZXJ2aXNvciBoYXMgcHVuY2hlZCB0aHJvdWdoIG91cgorCSAqIElDUyB3aXRoIGEgcGFnZSBmYXVsdCwgc28gd2UgY2FsbCBvdXQgdG8gZG9fcGFnZV9mYXVsdF9pY3MoKQorCSAqIHRvIGZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0LiAgSWYgdGhlIGZhdWx0IHdhcyBpbgorCSAqIGFuIGF0b21pYyBvcCwgd2UgdW5sb2NrIHRoZSBhdG9taWMgbG9jaywgYWRqdXN0IHRoZQorCSAqIHNhdmVkIHJlZ2lzdGVyIHN0YXRlIGEgbGl0dGxlLCBhbmQgcmV0dXJuICJ6ZXJvIiBpbiByNCwKKwkgKiBmYWxsaW5nIHRocm91Z2ggaW50byB0aGUgbm9ybWFsIHBhZ2UtZmF1bHQgaW50ZXJydXB0IGNvZGUuCisJICogSWYgdGhlIGZhdWx0IHdhcyBpbiBhIGtlcm5lbC1zcGFjZSBhdG9taWMgb3BlcmF0aW9uLCB0aGVuCisJICogZG9fcGFnZV9mYXVsdF9pY3MoKSByZXNvbHZlcyBpdCBpdHNlbGYsIHJldHVybnMgIm9uZSIgaW4gcjQsCisJICogYW5kIGFzIGEgcmVzdWx0IGdvZXMgZGlyZWN0bHkgdG8gcmVzdG9yaW5nIHJlZ2lzdGVycyBhbmQgaXJldCwKKwkgKiB3aXRob3V0IHRyeWluZyB0byBhZGp1c3QgdGhlIGludGVycnVwdCBtYXNrcyBhdCBhbGwuCisJICogVGhlIGRvX3BhZ2VfZmF1bHRfaWNzKCkgQVBJIGludm9sdmVzIHBhc3NpbmcgYW5kIHJldHVybmluZworCSAqIGEgZml2ZS13b3JkIHN0cnVjdCAoaW4gcmVnaXN0ZXJzKSB0byBhdm9pZCB3cml0aW5nIHRoZQorCSAqIHNhdmUgYW5kIHJlc3RvcmUgY29kZSBoZXJlLgorCSAqLworCS5pZmMgXGZ1bmN0aW9uLGhhbmRsZV9ubWkKKwlJUlFfRElTQUJMRV9BTEwocjIwKQorCS5lbHNlCisJLmlmbmMgXGZ1bmN0aW9uLGhhbmRsZV9zeXNjYWxsCisJYmdlenQgICByMywgMWYKKwl7CisJIFBUUkVHU19QVFIocjAsIFBUUkVHU19PRkZTRVRfQkFTRSkKKwkgamFsICAgIGRvX3BhZ2VfZmF1bHRfaWNzCisJfQorCUZFRURCQUNLX1JFRU5URVIoXGZ1bmN0aW9uKQorCWJ6dCAgICAgcjQsIDFmCisJaiAgICAgICAuTHJlc3RvcmVfcmVncworMToKKwkuZW5kaWYKKwlJUlFfRElTQUJMRShyMjAsIHIyMSkKKwkuZW5kaWYKKwltdHNwciAgIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCB6ZXJvCisKKyNpZiBDSElQX0hBU19XSDY0KCkKKwkvKgorCSAqIFByZXBhcmUgdGhlIGZpcnN0IDI1NiBzdGFjayBieXRlcyB0byBiZSByYXBpZGx5IGFjY2Vzc2libGUKKwkgKiB3aXRob3V0IGhhdmluZyB0byBmZXRjaCB0aGUgYmFja2dyb3VuZCBkYXRhLiAgV2UgZG9uJ3QgcmVhbGx5CisJICoga25vdyBob3cgZmFyIHRvIHdyaXRlLWhpbnQsIGJ1dCBrZXJuZWwgc3RhY2tzIGdlbmVyYWxseQorCSAqIGFyZW4ndCB0aGF0IGJpZywgYW5kIHdyaXRlLWhpbnRpbmcgaGVyZSBkb2VzIHRha2Ugc29tZSB0aW1lLgorCSAqLworCWFkZGkgICAgcjUyLCBzcCwgLTY0CisJeworCSB3aDY0ICAgcjUyCisJIGFkZGkgICByNTIsIHI1MiwgLTY0CisJfQorCXsKKwkgd2g2NCAgIHI1MgorCSBhZGRpICAgcjUyLCByNTIsIC02NAorCX0KKwl7CisJIHdoNjQgICByNTIKKwkgYWRkaSAgIHI1MiwgcjUyLCAtNjQKKwl9CisJd2g2NCAgICByNTIKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJLmlmbmMgXGZ1bmN0aW9uLGhhbmRsZV9ubWkKKwkvKgorCSAqIFdlIGZpbmFsbHkgaGF2ZSBlbm91Z2ggc3RhdGUgc2V0IHVwIHRvIG5vdGlmeSB0aGUgaXJxCisJICogdHJhY2luZyBjb2RlIHRoYXQgaXJxcyB3ZXJlIGRpc2FibGVkIG9uIGVudHJ5IHRvIHRoZSBoYW5kbGVyLgorCSAqIFRoZSBUUkFDRV9JUlFTX09GRiBjYWxsIGNsb2JiZXJzIHJlZ2lzdGVycyByMC1yMjkuCisJICogRm9yIHN5c2NhbGxzLCB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlZ2lzdGVyIHN0YXRlIHNhdmVkIGF3YXkKKwkgKiBvbiB0aGUgc3RhY2ssIHNvIHdlIGRvbid0IGJvdGhlciB0byBkbyBhbnkgcmVnaXN0ZXIgc2F2ZXMgaGVyZSwKKwkgKiBhbmQgbGF0ZXIgd2UgcG9wIHRoZSByZWdpc3RlcnMgYmFjayBvZmYgdGhlIGtlcm5lbCBzdGFjay4KKwkgKiBGb3IgaW50ZXJydXB0IGhhbmRsZXJzLCBzYXZlIHIwLXIzIGluIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMuCisJICovCisJLmlmbmMgXGZ1bmN0aW9uLGhhbmRsZV9zeXNjYWxsCisJeyBtb3ZlIHIzMCwgcjA7IG1vdmUgcjMxLCByMSB9CisJeyBtb3ZlIHIzMiwgcjI7IG1vdmUgcjMzLCByMyB9CisJLmVuZGlmCisJVFJBQ0VfSVJRU19PRkYKKwkuaWZuYyBcZnVuY3Rpb24saGFuZGxlX3N5c2NhbGwKKwl7IG1vdmUgcjAsIHIzMDsgbW92ZSByMSwgcjMxIH0KKwl7IG1vdmUgcjIsIHIzMjsgbW92ZSByMywgcjMzIH0KKwkuZW5kaWYKKwkuZW5kaWYKKyNlbmRpZgorCisJLmVuZG0KKworCS5tYWNybyAgY2hlY2tfc2luZ2xlX3N0ZXBwaW5nLCBraW5kLCBub3Rfc2luZ2xlX3N0ZXBwaW5nCisJLyoKKwkgKiBDaGVjayBmb3Igc2luZ2xlIHN0ZXBwaW5nIGluIHVzZXItbGV2ZWwgcHJpdgorCSAqICAga2luZCBjYW4gYmUgIm5vcm1hbCIsICJpbGwiLCBvciAic3lzY2FsbCIKKwkgKiBBdCBlbmQsIGlmIGZhbGwtdGhydQorCSAqICAgcjI5OiB0aHJlYWRfaW5mby0+c3RlcF9zdGF0ZQorCSAqICAgcjI4OiAmcHRfcmVncy0+cGMKKwkgKiAgIHIyNzogcHRfcmVncy0+cGMKKwkgKiAgIHIyNjogdGhyZWFkX2luZm8tPnN0ZXBfc3RhdGUtPmJ1ZmZlcgorCSAqLworCisJLyogQ2hlY2sgZm9yIHNpbmdsZSBzdGVwcGluZyAqLworCUdFVF9USFJFQURfSU5GTyhyMjkpCisJeworCSAvKiBHZXQgcG9pbnRlciB0byBmaWVsZCBob2xkaW5nIHN0ZXAgc3RhdGUgKi8KKwkgYWRkaSAgIHIyOSwgcjI5LCBUSFJFQURfSU5GT19TVEVQX1NUQVRFX09GRlNFVAorCisJIC8qIEdldCBwb2ludGVyIHRvIEVYMSBpbiByZWdpc3RlciBzdGF0ZSAqLworCSBQVFJFR1NfUFRSKHIyNywgUFRSRUdTX09GRlNFVF9FWDEpCisJfQorCXsKKwkgLyogR2V0IHBvaW50ZXIgdG8gZmllbGQgaG9sZGluZyBQQyAqLworCSBQVFJFR1NfUFRSKHIyOCwgUFRSRUdTX09GRlNFVF9QQykKKworCSAvKiBMb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBzdGVwIHN0YXRlICovCisJIGx3ICAgICByMjksIHIyOQorCX0KKwkvKiBMb2FkIEVYMSAqLworCWx3ICAgICAgcjI3LCByMjcKKwl7CisJIC8qIFBvaW50cyB0byBmbGFncyAqLworCSBhZGRpICAgcjIzLCByMjksIFNJTkdMRVNURVBfU1RBVEVfRkxBR1NfT0ZGU0VUCisKKwkgLyogTm8gc2luZ2xlIHN0ZXBwaW5nIGlmIHRoZXJlIGlzIG5vIHN0ZXAgc3RhdGUgc3RydWN0dXJlICovCisJIGJ6dCAgICByMjksIFxub3Rfc2luZ2xlX3N0ZXBwaW5nCisJfQorCXsKKwkgLyogbWFzayBvZmYgSUNTIGFuZCBhbnkgb3RoZXIgaGlnaCBiaXRzICovCisJIGFuZGkgICByMjcsIHIyNywgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9NQVNLCisKKwkgLyogTG9hZCBwb2ludGVyIHRvIHNpbmdsZSBzdGVwIGluc3RydWN0aW9uIGJ1ZmZlciAqLworCSBsdyAgICAgcjI2LCByMjkKKwl9CisJLyogQ2hlY2sgcHJpdiBzdGF0ZSAqLworCWJueiAgICAgcjI3LCBcbm90X3NpbmdsZV9zdGVwcGluZworCisJLyogR2V0IGZsYWdzICovCisJbHcgICAgICByMjIsIHIyMworCXsKKwkgLyogQnJhbmNoIGlmIHNpbmdsZS1zdGVwIG1vZGUgbm90IGVuYWJsZWQgKi8KKwkgYmJuc3QgIHIyMiwgXG5vdF9zaW5nbGVfc3RlcHBpbmcKKworCSAvKiBDbGVhciBlbmFibGVkIGZsYWcgKi8KKwkgYW5kaSAgIHIyMiwgcjIyLCB+U0lOR0xFU1RFUF9TVEFURV9NQVNLX0lTX0VOQUJMRUQKKwl9CisJLmlmYyBca2luZCxub3JtYWwKKwl7CisJIC8qIExvYWQgUEMgKi8KKwkgbHcgICAgIHIyNywgcjI4CisKKwkgLyogUG9pbnQgdG8gdGhlIGVudHJ5IGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIFBDICovCisJIGFkZGkgICByMjQsIHIyOSwgU0lOR0xFU1RFUF9TVEFURV9PUklHX1BDX09GRlNFVAorCX0KKwl7CisJIC8qIERpc2FibGUgc2luZ2xlIHN0ZXBwaW5nIGZsYWcgKi8KKwkgc3cgICAgIHIyMywgcjIyCisJfQorCXsKKwkgLyogR2V0IHRoZSBvcmlnaW5hbCBwYyAqLworCSBsdyAgICAgcjI0LCByMjQKKworCSAvKiBTZWUgaWYgdGhlIFBDIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgc2luZ2xlIHN0ZXAgYnVmZmVyICovCisJIHNlcSAgICByMjUsIHIyNiwgcjI3CisJfQorCS8qCisJICogTk9URTogaXQgaXMgcmVhbGx5IGV4cGVjdGVkIHRoYXQgdGhlIFBDIGJlIGluIHRoZSBzaW5nbGUgc3RlcCBidWZmZXIKKwkgKiAgICAgICBhdCB0aGlzIHBvaW50CisJICovCisJYnp0ICAgICByMjUsIFxub3Rfc2luZ2xlX3N0ZXBwaW5nCisKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBQQyAqLworCXN3ICAgICAgcjI4LCByMjQKKwkuZWxzZQorCS5pZmMgXGtpbmQsc3lzY2FsbAorCXsKKwkgLyogTG9hZCBQQyAqLworCSBsdyAgICAgcjI3LCByMjgKKworCSAvKiBQb2ludCB0byB0aGUgZW50cnkgY29udGFpbmluZyB0aGUgbmV4dCBQQyAqLworCSBhZGRpICAgcjI0LCByMjksIFNJTkdMRVNURVBfU1RBVEVfTkVYVF9QQ19PRkZTRVQKKwl9CisJeworCSAvKiBJbmNyZW1lbnQgdGhlIHN0b3BwZWQgUEMgYnkgdGhlIGJ1bmRsZSBzaXplICovCisJIGFkZGkgICByMjYsIHIyNiwgOAorCisJIC8qIERpc2FibGUgc2luZ2xlIHN0ZXBwaW5nIGZsYWcgKi8KKwkgc3cgICAgIHIyMywgcjIyCisJfQorCXsKKwkgLyogR2V0IHRoZSBuZXh0IHBjICovCisJIGx3ICAgICByMjQsIHIyNAorCisJIC8qCisJICAqIFNlZSBpZiB0aGUgUEMgaXMgb25lIGJ1bmRsZSBwYXN0IHRoZSBzdGFydCBvZiB0aGUKKwkgICogc2luZ2xlIHN0ZXAgYnVmZmVyCisJICAqLworCSBzZXEgICAgcjI1LCByMjYsIHIyNworCX0KKwl7CisJIC8qCisJICAqIE5PVEU6IGl0IGlzIHJlYWxseSBleHBlY3RlZCB0aGF0IHRoZSBQQyBiZSBpbiB0aGUKKwkgICogc2luZ2xlIHN0ZXAgYnVmZmVyIGF0IHRoaXMgcG9pbnQKKwkgICovCisJIGJ6dCAgICByMjUsIFxub3Rfc2luZ2xlX3N0ZXBwaW5nCisJfQorCS8qIFNldCB0byB0aGUgbmV4dCBQQyAqLworCXN3ICAgICAgcjI4LCByMjQKKwkuZWxzZQorCXsKKwkgLyogUG9pbnQgdG8gM3JkIGJ1bmRsZSBpbiBidWZmZXIgKi8KKwkgYWRkaSAgIHIyNSwgcjI2LCAxNgorCisJIC8qIExvYWQgUEMgKi8KKwkgbHcgICAgICByMjcsIHIyOAorCX0KKwl7CisJIC8qIERpc2FibGUgc2luZ2xlIHN0ZXBwaW5nIGZsYWcgKi8KKwkgc3cgICAgICByMjMsIHIyMgorCisJIC8qIFNlZSBpZiB0aGUgUEMgaXMgaW4gdGhlIHNpbmdsZSBzdGVwIGJ1ZmZlciAqLworCSBzbHRlX3UgIHIyNCwgcjI2LCByMjcKKwl9CisJeworCSBzbHRlX3UgcjI1LCByMjcsIHIyNQorCisJIC8qCisJICAqIE5PVEU6IGl0IGlzIHJlYWxseSBleHBlY3RlZCB0aGF0IHRoZSBQQyBiZSBpbiB0aGUKKwkgICogc2luZ2xlIHN0ZXAgYnVmZmVyIGF0IHRoaXMgcG9pbnQKKwkgICovCisJIGJ6dCAgICByMjQsIFxub3Rfc2luZ2xlX3N0ZXBwaW5nCisJfQorCWJ6dCAgICAgcjI1LCBcbm90X3NpbmdsZV9zdGVwcGluZworCS5lbmRpZgorCS5lbmRpZgorCS5lbmRtCisKKwkvKgorCSAqIFJlZGlzcGF0Y2ggYSBkb3duY2FsbC4KKwkgKi8KKwkubWFjcm8gIGRjX2Rpc3BhdGNoIHZlY251bSwgdmVjbmFtZQorCS5vcmcgICAgKFx2ZWNudW0gPDwgOCkKK2ludHZlY19cdmVjbmFtZToKKwlqICAgICAgIGh2X2Rvd25jYWxsX2Rpc3BhdGNoCisJRU5EUFJPQyhpbnR2ZWNfXHZlY25hbWUpCisJLmVuZG0KKworCS8qCisJICogQ29tbW9uIGNvZGUgZm9yIG1vc3QgaW50ZXJydXB0cy4gIFRoZSBDIGZ1bmN0aW9uIHdlJ3JlIGV2ZW50dWFsbHkKKwkgKiBnb2luZyB0byBpcyBpbiByMCwgYW5kIHRoZSBmYXVsdG51bSBpcyBpbiByMTsgdGhlIG9yaWdpbmFsCisJICogdmFsdWVzIGZvciB0aG9zZSByZWdpc3RlcnMgYXJlIG9uIHRoZSBzdGFjay4KKwkgKi8KKwkucHVzaHNlY3Rpb24gLnRleHQuaGFuZGxlX2ludGVycnVwdCwiYXgiCitoYW5kbGVfaW50ZXJydXB0OgorCWZpbmlzaF9pbnRlcnJ1cHRfc2F2ZSBoYW5kbGVfaW50ZXJydXB0CisKKwkvKgorCSAqIENoZWNrIGZvciBpZiB3ZSBhcmUgc2luZ2xlIHN0ZXBwaW5nIGluIHVzZXIgbGV2ZWwuIElmIHNvLCB0aGVuCisJICogd2UgbmVlZCB0byByZXN0b3JlIHRoZSBQQy4KKwkgKi8KKworCWNoZWNrX3NpbmdsZV9zdGVwcGluZyBub3JtYWwsIC5MZGlzcGF0Y2hfaW50ZXJydXB0CisuTGRpc3BhdGNoX2ludGVycnVwdDoKKworCS8qIEp1bXAgdG8gdGhlIEMgcm91dGluZTsgaXQgc2hvdWxkIGVuYWJsZSBpcnFzIGFzIHNvb24gYXMgcG9zc2libGUuICovCisJeworCSBqYWxyICAgcjAKKwkgUFRSRUdTX1BUUihyMCwgUFRSRUdTX09GRlNFVF9CQVNFKQorCX0KKwlGRUVEQkFDS19SRUVOVEVSKGhhbmRsZV9pbnRlcnJ1cHQpCisJeworCSBtb3ZlaSAgcjMwLCAwICAgLyogbm90IGFuIE5NSSAqLworCSBqICAgICAgaW50ZXJydXB0X3JldHVybgorCX0KKwlTVERfRU5EUFJPQyhoYW5kbGVfaW50ZXJydXB0KQorCisvKgorICogVGhpcyByb3V0aW5lIHRha2VzIGEgYm9vbGVhbiBpbiByMzAgaW5kaWNhdGluZyBpZiB0aGlzIGlzIGFuIE5NSS4KKyAqIElmIHNvLCB3ZSBhbHNvIGV4cGVjdCBhIGJvb2xlYW4gaW4gcjMxIGluZGljYXRpbmcgd2hldGhlciB0bworICogcmUtZW5hYmxlIHRoZSBvcHJvZmlsZSBpbnRlcnJ1cHRzLgorICovCitTVERfRU5UUlkoaW50ZXJydXB0X3JldHVybikKKwkvKiBJZiB3ZSdyZSByZXN1bWluZyB0byBrZXJuZWwgc3BhY2UsIGRvbid0IGNoZWNrIHRocmVhZCBmbGFncy4gKi8KKwl7CisJIGJueiAgICByMzAsIC5McmVzdG9yZV9hbGwgIC8qIE5NSXMgZG9uJ3Qgc3BlY2lhbC1jYXNlIHVzZXItc3BhY2UgKi8KKwkgUFRSRUdTX1BUUihyMjksIFBUUkVHU19PRkZTRVRfRVgxKQorCX0KKwlsdyAgICAgIHIyOSwgcjI5CisJYW5kaSAgICByMjksIHIyOSwgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9NQVNLICAvKiBtYXNrIG9mZiBJQ1MgKi8KKwl7CisJIGJ6dCAgICByMjksIC5McmVzdW1lX3VzZXJzcGFjZQorCSBQVFJFR1NfUFRSKHIyOSwgUFRSRUdTX09GRlNFVF9QQykKKwl9CisKKwkvKiBJZiB3ZSdyZSByZXN1bWluZyB0byBfY3B1X2lkbGVfbmFwLCBidW1wIFBDIGZvcndhcmQgYnkgOC4gKi8KKwl7CisJIGx3ICAgICByMjgsIHIyOQorCSBtb3ZlbGkgcjI3LCBsbzE2KF9jcHVfaWRsZV9uYXApCisJfQorCXsKKwkgYXVsaSAgIHIyNywgcjI3LCBoYTE2KF9jcHVfaWRsZV9uYXApCisJfQorCXsKKwkgc2VxICAgIHIyNywgcjI3LCByMjgKKwl9CisJeworCSBiYm5zICAgcjI3LCAuTHJlc3RvcmVfYWxsCisJIGFkZGkgICByMjgsIHIyOCwgOAorCX0KKwlzdyAgICAgIHIyOSwgcjI4CisJaiAgICAgICAuTHJlc3RvcmVfYWxsCisKKy5McmVzdW1lX3VzZXJzcGFjZToKKwlGRUVEQkFDS19SRUVOVEVSKGludGVycnVwdF9yZXR1cm4pCisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cyBzbyBhcyB0byBtYWtlIHN1cmUgd2UgZG9uJ3QKKwkgKiBtaXNzIGFuIGludGVycnVwdCB0aGF0IHNldHMgYW55IG9mIHRoZSB0aHJlYWQgZmxhZ3MgKGxpa2UKKwkgKiBuZWVkX3Jlc2NoZWQgb3Igc2lncGVuZGluZykgYmV0d2VlbiBzYW1wbGluZyBhbmQgdGhlIGlyZXQuCisJICogUm91dGluZXMgbGlrZSBzY2hlZHVsZSgpIG9yIGRvX3NpZ25hbCgpIG1heSByZS1lbmFibGUKKwkgKiBpbnRlcnJ1cHRzIGJlZm9yZSByZXR1cm5pbmcuCisJICovCisJSVJRX0RJU0FCTEUocjIwLCByMjEpCisJVFJBQ0VfSVJRU19PRkYgIC8qIE5vdGU6IGNsb2JiZXJzIHJlZ2lzdGVycyByMC1yMjkgKi8KKworCS8qIEdldCBiYXNlIG9mIHN0YWNrIGluIHIzMjsgbm90ZSByMzAvMzEgYXJlIHVzZWQgYXMgYXJndW1lbnRzIGhlcmUuICovCisJR0VUX1RIUkVBRF9JTkZPKHIzMikKKworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSB3b3JrIHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlci4gKi8KKwl7CisJIGFkZGkgICByMjksIHIzMiwgVEhSRUFEX0lORk9fRkxBR1NfT0ZGU0VUCisJIG1vdmVsaSByMjgsIGxvMTYoX1RJRl9BTExXT1JLX01BU0spCisJfQorCXsKKwkgbHcgICAgIHIyOSwgcjI5CisJIGF1bGkgICByMjgsIHIyOCwgaGExNihfVElGX0FMTFdPUktfTUFTSykKKwl9CisJYW5kICAgICByMjgsIHIyOSwgcjI4CisJYm56ICAgICByMjgsIC5Md29ya19wZW5kaW5nCisKKwkvKgorCSAqIEluIHRoZSBOTUkgY2FzZSB3ZQorCSAqIG9taXQgdGhlIGNhbGwgdG8gc2luZ2xlX3Byb2Nlc3NfY2hlY2tfbm9oeiwgd2hpY2ggbm9ybWFsbHkgY2hlY2tzCisJICogdG8gc2VlIGlmIHdlIHNob3VsZCBzdGFydCBvciBzdG9wIHRoZSBzY2hlZHVsZXIgdGljaywgYmVjYXVzZQorCSAqIHdlIGNhbid0IGNhbGwgYXJiaXRyYXJ5IExpbnV4IGNvZGUgZnJvbSBhbiBOTUkgY29udGV4dC4KKwkgKiBXZSBhbHdheXMgY2FsbCB0aGUgaG9tZWNhY2hlIFRMQiBkZWZlcnJhbCBjb2RlIHRvIHJlLXRyaWdnZXIKKwkgKiB0aGUgZGVmZXJyYWwgbWVjaGFuaXNtLgorCSAqCisJICogVGhlIG90aGVyIGNodW5rIG9mIHJlc3BvbnNpYmlsaXR5IHRoaXMgY29kZSBoYXMgaXMgdG8gcmVzZXQgdGhlCisJICogaW50ZXJydXB0IG1hc2tzIGFwcHJvcHJpYXRlbHkgdG8gcmVzZXQgaXJxcyBhbmQgTk1Jcy4gIFdlIGhhdmUKKwkgKiB0byBjYWxsIFRSQUNFX0lSUVNfT0ZGIGFuZCBUUkFDRV9JUlFTX09OIHRvIHN1cHBvcnQgYWxsIHRoZQorCSAqIGxvY2tkZXAtdHlwZSBzdHVmZiwgYnV0IHdlIGNhbid0IHNldCBJQ1MgdW50aWwgYWZ0ZXJ3YXJkcywgc2luY2UKKwkgKiBJQ1MgY2FuIG9ubHkgYmUgdXNlZCBpbiB2ZXJ5IHRpZ2h0IGNodW5rcyBvZiBjb2RlIHRvIGF2b2lkCisJICogdHJpcHBpbmcgb3ZlciB2YXJpb3VzIGFzc2VydGlvbnMgdGhhdCBpdCBpcyBvZmYuCisJICoKKwkgKiAoVGhlcmUgaXMgd2hhdCBsb29rcyBsaWtlIGEgd2luZG93IG9mIHZ1bG5lcmFiaWxpdHkgaGVyZSBzaW5jZQorCSAqIHdlIG1pZ2h0IHRha2UgYSBwcm9maWxlIGludGVycnVwdCBiZXR3ZWVuIHRoZSB0d28gU1BSIHdyaXRlcworCSAqIHRoYXQgc2V0IHRoZSBtYXNrLCBidXQgc2luY2Ugd2Ugd3JpdGUgdGhlIGxvdyBTUFIgd29yZCBmaXJzdCwKKwkgKiBhbmQgb3VyIGludGVycnVwdCBlbnRyeSBjb2RlIGNoZWNrcyB0aGUgbG93IFNQUiB3b3JkLCBhbnkKKwkgKiBwcm9maWxlIGludGVycnVwdCB3aWxsIGFjdHVhbGx5IGRpc2FibGUgaW50ZXJydXB0cyBpbiBib3RoIFNQUnMKKwkgKiBiZWZvcmUgcmV0dXJuaW5nLCB3aGljaCBpcyBPSy4pCisJICovCisuTHJlc3RvcmVfYWxsOgorCVBUUkVHU19QVFIocjAsIFBUUkVHU19PRkZTRVRfRVgxKQorCXsKKwkgbHcgICAgIHIwLCByMAorCSBQVFJFR1NfUFRSKHIzMiwgUFRSRUdTX09GRlNFVF9GTEFHUykKKwl9CisJeworCSBhbmRpICAgcjAsIHIwLCBTUFJfRVhfQ09OVEVYVF8xXzFfX1BMX01BU0sKKwkgbHcgICAgIHIzMiwgcjMyCisJfQorCWJueiAgICByMCwgMWYKKwlqICAgICAgIDJmCisjaWYgUFRfRkxBR1NfRElTQUJMRV9JUlEgIT0gMQorIyBlcnJvciBBc3N1bWluZyBQVF9GTEFHU19ESVNBQkxFX0lSUSA9PSAxIHNvIHdlIGNhbiB1c2UgYmJuc3QgYmVsb3cKKyNlbmRpZgorMToJYmJuc3QgICByMzIsIDJmCisJSVJRX0RJU0FCTEUocjIwLHIyMSkKKwlUUkFDRV9JUlFTX09GRgorCW1vdmVpICAgcjAsIDEKKwltdHNwciAgIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCByMAorCWJ6dCAgICAgcjMwLCAuTHJlc3RvcmVfcmVncworCWogICAgICAgM2YKKzI6CVRSQUNFX0lSUVNfT04KKwltb3ZlaSAgIHIwLCAxCisJbXRzcHIgICBJTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiwgcjAKKwlJUlFfRU5BQkxFKHIyMCwgcjIxKQorCWJ6dCAgICAgcjMwLCAuTHJlc3RvcmVfcmVncworMzoKKworCisJLyoKKwkgKiBXZSBub3cgY29tbWl0IHRvIHJldHVybmluZyBmcm9tIHRoaXMgaW50ZXJydXB0LCBzaW5jZSB3ZSB3aWxsIGJlCisJICogZG9pbmcgdGhpbmdzIGxpa2Ugc2V0dGluZyBFWF9DT05URVhUIFNQUnMgYW5kIHVud2luZGluZyB0aGUgc3RhY2sKKwkgKiBmcmFtZS4gIE5vIGNhbGxzIHNob3VsZCBiZSBtYWRlIHRvIGFueSBvdGhlciBjb2RlIGFmdGVyIHRoaXMgcG9pbnQuCisJICogVGhpcyBjb2RlIHNob3VsZCBvbmx5IGJlIGVudGVyZWQgd2l0aCBJQ1Mgc2V0LgorCSAqIHIzMiBtdXN0IHN0aWxsIGJlIHNldCB0byBwdHJlZ3MuZmxhZ3MuCisJICogV2UgbGF1bmNoIGxvYWRzIHRvIGVhY2ggY2FjaGUgbGluZSBzZXBhcmF0ZWx5IGZpcnN0LCBzbyB3ZSBjYW4KKwkgKiBnZXQgc29tZSBwYXJhbGxlbGlzbSBvdXQgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uCisJICogV2Ugc3RhcnQgemVyb2luZyBjYWxsZXItc2F2ZWQgcmVnaXN0ZXJzIHRocm91Z2hvdXQsIHNpbmNlCisJICogdGhhdCB3aWxsIHNhdmUgc29tZSBjeWNsZXMgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgYSBzeXNjYWxsLgorCSAqLworLkxyZXN0b3JlX3JlZ3M6CisJRkVFREJBQ0tfUkVFTlRFUihpbnRlcnJ1cHRfcmV0dXJuKSAgIC8qIGNhbGxlZCBmcm9tIGVsc2V3aGVyZSAqLworCisJLyoKKwkgKiBSb3RhdGUgc28gd2UgaGF2ZSBvbmUgaGlnaCBiaXQgYW5kIG9uZSBsb3cgYml0IHRvIHRlc3QuCisJICogLSBsb3cgYml0IHNheXMgd2hldGhlciB0byByZXN0b3JlIGFsbCB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycywKKwkgKiAgIG9yIGp1c3QgcjMwLXIzMywgYW5kIHI1MiB1cC4KKwkgKiAtIGhpZ2ggYml0IChpLmUuIHNpZ24gYml0KSBzYXlzIHdoZXRoZXIgdG8gcmVzdG9yZSBhbGwgdGhlCisJICogICBjYWxsZXItc2F2ZWQgcmVnaXN0ZXJzLCBvciBqdXN0IHIwLgorCSAqLworI2lmIFBUX0ZMQUdTX0NBTExFUl9TQVZFUyAhPSAyIHx8IFBUX0ZMQUdTX1JFU1RPUkVfUkVHUyAhPSA0CisjIGVycm9yIFJvdGF0ZSB0cmljayBkb2VzIG5vdCB3b3JrIDotKQorI2VuZGlmCisJeworCSBybGkgICAgcjIwLCByMzIsIDMwCisJIFBUUkVHU19QVFIoc3AsIFBUUkVHU19PRkZTRVRfUkVHKDApKQorCX0KKworCS8qCisJICogTG9hZCBjYWNoZSBsaW5lcyAwLCAyLCBhbmQgMyBpbiB0aGF0IG9yZGVyLCB0aGVuIHVzZQorCSAqIHRoZSBsYXN0IGxvYWRlZCB2YWx1ZSwgd2hpY2ggbWFrZXMgaXQgbGlrZWx5IHRoYXQgdGhlIG90aGVyCisJICogY2FjaGUgbGluZXMgaGF2ZSBhbHNvIGxvYWRlZCwgYXQgd2hpY2ggcG9pbnQgd2Ugc2hvdWxkIGJlCisJICogYWJsZSB0byBzYWZlbHkgcmVhZCBhbGwgdGhlIHJlbWFpbmluZyB3b3JkcyBvbiB0aG9zZSBjYWNoZQorCSAqIGxpbmVzIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIG1lbW9yeSBzdWJzeXN0ZW0uCisJICovCisJcG9wX3JlZ196ZXJvIHIwLCByMSwgc3AsIFBUUkVHU19PRkZTRVRfUkVHKDMwKSAtIFBUUkVHU19PRkZTRVRfUkVHKDApCisJcG9wX3JlZ196ZXJvIHIzMCwgcjIsIHNwLCBQVFJFR1NfT0ZGU0VUX1BDIC0gUFRSRUdTX09GRlNFVF9SRUcoMzApCisJcG9wX3JlZ196ZXJvIHIyMSwgcjMsIHNwLCBQVFJFR1NfT0ZGU0VUX0VYMSAtIFBUUkVHU19PRkZTRVRfUEMKKwlwb3BfcmVnX3plcm8gbHIsIHI0LCBzcCwgUFRSRUdTX09GRlNFVF9SRUcoNTIpIC0gUFRSRUdTX09GRlNFVF9FWDEKKwl7CisJIG10c3ByICBFWF9DT05URVhUXzFfMCwgcjIxCisJIG1vdmUgICByNSwgemVybworCX0KKwl7CisJIG10c3ByICBFWF9DT05URVhUXzFfMSwgbHIKKwkgYW5kaSAgIGxyLCBsciwgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9NQVNLICAvKiBtYXNrIG9mZiBJQ1MgKi8KKwl9CisKKwkvKiBSZXN0b3JlIGNhbGxlZS1zYXZlZHMgdGhhdCB3ZSBhY3R1YWxseSB1c2UuICovCisJcG9wX3JlZ196ZXJvIHI1MiwgcjYsIHNwLCBQVFJFR1NfT0ZGU0VUX1JFRygzMSkgLSBQVFJFR1NfT0ZGU0VUX1JFRyg1MikKKwlwb3BfcmVnX3plcm8gcjMxLCByNworCXBvcF9yZWdfemVybyByMzIsIHI4CisJcG9wX3JlZ196ZXJvIHIzMywgcjksIHNwLCBQVFJFR1NfT0ZGU0VUX1JFRygyOSkgLSBQVFJFR1NfT0ZGU0VUX1JFRygzMykKKworCS8qCisJICogSWYgd2UgbW9kaWZpZWQgb3RoZXIgY2FsbGVlLXNhdmVkcywgcmVzdG9yZSB0aGVtIG5vdy4KKwkgKiBUaGlzIGlzIHJhcmUsIGJ1dCBjb3VsZCBiZSB2aWEgcHRyYWNlIG9yIHNpZ25hbCBoYW5kbGVyLgorCSAqLworCXsKKwkgbW92ZSAgIHIxMCwgemVybworCSBiYnMgICAgcjIwLCAuTHJlc3RvcmVfY2FsbGVlcworCX0KKy5MY29udGludWVfcmVzdG9yZV9yZWdzOgorCisJLyogQ2hlY2sgaWYgd2UncmUgcmV0dXJuaW5nIGZyb20gYSBzeXNjYWxsLiAqLworCXsKKwkgbW92ZSAgIHIxMSwgemVybworCSBibHp0ICAgcjIwLCAxZiAgLyogbm8sIHNvIGdvIHJlc3RvcmUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzICovCisJfQorCisJLyoKKwkgKiBDaGVjayBpZiB3ZSdyZSByZXR1cm5pbmcgdG8gdXNlcnNwYWNlLgorCSAqIE5vdGUgdGhhdCBpZiB3ZSdyZSBub3QsIHdlIGRvbid0IHdvcnJ5IGFib3V0IHplcm9pbmcgZXZlcnl0aGluZy4KKwkgKi8KKwl7CisJIGFkZGxpICBzcCwgc3AsIFBUUkVHU19PRkZTRVRfTFIgLSBQVFJFR1NfT0ZGU0VUX1JFRygyOSkKKwkgYm56ICAgIGxyLCAuTGtlcm5lbF9yZXR1cm4KKwl9CisKKwkvKgorCSAqIE9uIHJldHVybiBmcm9tIHN5c2NhbGwsIHdlJ3ZlIHJlc3RvcmVkIHIwIGZyb20gcHRfcmVncywgYnV0IHdlCisJICogY2xlYXIgdGhlIHJlbWFpbmRlciBvZiB0aGUgY2FsbGVyLXNhdmVkIHJlZ2lzdGVycy4gIFdlIGNvdWxkCisJICogcmVzdG9yZSB0aGUgc3lzY2FsbCBhcmd1bWVudHMsIGJ1dCB0aGVyZSdzIG5vdCBtdWNoIHBvaW50LAorCSAqIGFuZCBpdCBlbnN1cmVzIHVzZXIgcHJvZ3JhbXMgYXJlbid0IHRyeWluZyB0byB1c2UgdGhlCisJICogY2FsbGVyLXNhdmVzIGlmIHdlIGNsZWFyIHRoZW0sIGFzIHdlbGwgYXMgYXZvaWRpbmcgbGVha2luZworCSAqIGtlcm5lbCBwb2ludGVycyBpbnRvIHVzZXJzcGFjZS4KKwkgKi8KKwlwb3BfcmVnX3plcm8gbHIsIHIxMiwgc3AsIFBUUkVHU19PRkZTRVRfVFAgLSBQVFJFR1NfT0ZGU0VUX0xSCisJcG9wX3JlZ196ZXJvIHRwLCByMTMsIHNwLCBQVFJFR1NfT0ZGU0VUX1NQIC0gUFRSRUdTX09GRlNFVF9UUAorCXsKKwkgbHcgICAgIHNwLCBzcAorCSBtb3ZlICAgcjE0LCB6ZXJvCisJIG1vdmUgICByMTUsIHplcm8KKwl9CisJeyBtb3ZlIHIxNiwgemVybzsgbW92ZSByMTcsIHplcm8gfQorCXsgbW92ZSByMTgsIHplcm87IG1vdmUgcjE5LCB6ZXJvIH0KKwl7IG1vdmUgcjIwLCB6ZXJvOyBtb3ZlIHIyMSwgemVybyB9CisJeyBtb3ZlIHIyMiwgemVybzsgbW92ZSByMjMsIHplcm8gfQorCXsgbW92ZSByMjQsIHplcm87IG1vdmUgcjI1LCB6ZXJvIH0KKwl7IG1vdmUgcjI2LCB6ZXJvOyBtb3ZlIHIyNywgemVybyB9CisJeyBtb3ZlIHIyOCwgemVybzsgbW92ZSByMjksIHplcm8gfQorCWlyZXQKKworCS8qCisJICogTm90IGEgc3lzY2FsbCwgc28gcmVzdG9yZSBjYWxsZXItc2F2ZWQgcmVnaXN0ZXJzLgorCSAqIEZpcnN0IGtpY2sgb2ZmIGEgbG9hZCBmb3IgY2FjaGUgbGluZSAxLCB3aGljaCB3ZSdyZSB0b3VjaGluZworCSAqIGZvciB0aGUgZmlyc3QgdGltZSBoZXJlLgorCSAqLworCS5hbGlnbiA2NAorMToJcG9wX3JlZyByMjksIHNwLCBQVFJFR1NfT0ZGU0VUX1JFRygxKSAtIFBUUkVHU19PRkZTRVRfUkVHKDI5KQorCXBvcF9yZWcgcjEKKwlwb3BfcmVnIHIyCisJcG9wX3JlZyByMworCXBvcF9yZWcgcjQKKwlwb3BfcmVnIHI1CisJcG9wX3JlZyByNgorCXBvcF9yZWcgcjcKKwlwb3BfcmVnIHI4CisJcG9wX3JlZyByOQorCXBvcF9yZWcgcjEwCisJcG9wX3JlZyByMTEKKwlwb3BfcmVnIHIxMgorCXBvcF9yZWcgcjEzCisJcG9wX3JlZyByMTQKKwlwb3BfcmVnIHIxNQorCXBvcF9yZWcgcjE2CisJcG9wX3JlZyByMTcKKwlwb3BfcmVnIHIxOAorCXBvcF9yZWcgcjE5CisJcG9wX3JlZyByMjAKKwlwb3BfcmVnIHIyMQorCXBvcF9yZWcgcjIyCisJcG9wX3JlZyByMjMKKwlwb3BfcmVnIHIyNAorCXBvcF9yZWcgcjI1CisJcG9wX3JlZyByMjYKKwlwb3BfcmVnIHIyNworCXBvcF9yZWcgcjI4LCBzcCwgUFRSRUdTX09GRlNFVF9MUiAtIFBUUkVHU19PRkZTRVRfUkVHKDI4KQorCS8qIHIyOSBhbHJlYWR5IHJlc3RvcmVkIGFib3ZlICovCisJYm56ICAgICBsciwgLkxrZXJuZWxfcmV0dXJuCisJcG9wX3JlZyBsciwgc3AsIFBUUkVHU19PRkZTRVRfVFAgLSBQVFJFR1NfT0ZGU0VUX0xSCisJcG9wX3JlZyB0cCwgc3AsIFBUUkVHU19PRkZTRVRfU1AgLSBQVFJFR1NfT0ZGU0VUX1RQCisJbHcgICAgICBzcCwgc3AKKwlpcmV0CisKKwkvKgorCSAqIFdlIGNhbid0IHJlc3RvcmUgdHAgd2hlbiBpbiBrZXJuZWwgbW9kZSwgc2luY2UgYSB0aHJlYWQgbWlnaHQKKwkgKiBoYXZlIG1pZ3JhdGVkIGZyb20gYW5vdGhlciBjcHUgYW5kIGJyb3VnaHQgYSBzdGFsZSB0cCB2YWx1ZS4KKwkgKi8KKy5Ma2VybmVsX3JldHVybjoKKwlwb3BfcmVnIGxyLCBzcCwgUFRSRUdTX09GRlNFVF9TUCAtIFBUUkVHU19PRkZTRVRfTFIKKwlsdyAgICAgIHNwLCBzcAorCWlyZXQKKworCS8qIFJlc3RvcmUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBmcm9tIHIzNCB0byByNTEuICovCisuTHJlc3RvcmVfY2FsbGVlczoKKwlhZGRsaSAgc3AsIHNwLCBQVFJFR1NfT0ZGU0VUX1JFRygzNCkgLSBQVFJFR1NfT0ZGU0VUX1JFRygyOSkKKwlwb3BfcmVnIHIzNAorCXBvcF9yZWcgcjM1CisJcG9wX3JlZyByMzYKKwlwb3BfcmVnIHIzNworCXBvcF9yZWcgcjM4CisJcG9wX3JlZyByMzkKKwlwb3BfcmVnIHI0MAorCXBvcF9yZWcgcjQxCisJcG9wX3JlZyByNDIKKwlwb3BfcmVnIHI0MworCXBvcF9yZWcgcjQ0CisJcG9wX3JlZyByNDUKKwlwb3BfcmVnIHI0NgorCXBvcF9yZWcgcjQ3CisJcG9wX3JlZyByNDgKKwlwb3BfcmVnIHI0OQorCXBvcF9yZWcgcjUwCisJcG9wX3JlZyByNTEsIHNwLCBQVFJFR1NfT0ZGU0VUX1JFRygyOSkgLSBQVFJFR1NfT0ZGU0VUX1JFRyg1MSkKKwlqIC5MY29udGludWVfcmVzdG9yZV9yZWdzCisKKy5Md29ya19wZW5kaW5nOgorCS8qIE1hc2sgdGhlIHJlc2NoZWR1bGUgZmxhZyAqLworCWFuZGkgICAgcjI4LCByMjksIF9USUZfTkVFRF9SRVNDSEVECisKKwl7CisJIC8qCisJICAqIElmIHRoZSBORUVEX1JFU0NIRUQgZmxhZyBpcyBjYWxsZWQsIHdlIGNhbGwgc2NoZWR1bGUoKSwgd2hpY2gKKwkgICogbWF5IGRyb3AgdGhpcyBjb250ZXh0IHJpZ2h0IGhlcmUgYW5kIGdvIGRvIHNvbWV0aGluZyBlbHNlLgorCSAgKiBPbiByZXR1cm4sIGp1bXAgYmFjayB0byAuTHJlc3VtZV91c2Vyc3BhY2UgYW5kIHJlY2hlY2suCisJICAqLworCSBieiAgICAgcjI4LCAuTGFzeW5jX3RsYgorCisJIC8qIE1hc2sgdGhlIGFzeW5jLXRsYiBmbGFnICovCisJIGFuZGkgICByMjgsIHIyOSwgX1RJRl9BU1lOQ19UTEIKKwl9CisKKwlqYWwgICAgIHNjaGVkdWxlCisJRkVFREJBQ0tfUkVFTlRFUihpbnRlcnJ1cHRfcmV0dXJuKQorCisJLyogUmVsb2FkIHRoZSBmbGFncyBhbmQgY2hlY2sgYWdhaW4gKi8KKwlqICAgICAgIC5McmVzdW1lX3VzZXJzcGFjZQorCisuTGFzeW5jX3RsYjoKKwl7CisJIGJ6ICAgICByMjgsIC5MbmVlZF9zaWdwZW5kaW5nCisKKwkgLyogTWFzayB0aGUgc2lncGVuZGluZyBmbGFnICovCisJIGFuZGkgICByMjgsIHIyOSwgX1RJRl9TSUdQRU5ESU5HCisJfQorCisJUFRSRUdTX1BUUihyMCwgUFRSRUdTX09GRlNFVF9CQVNFKQorCWphbCAgICAgZG9fYXN5bmNfcGFnZV9mYXVsdAorCUZFRURCQUNLX1JFRU5URVIoaW50ZXJydXB0X3JldHVybikKKworCS8qCisJICogR28gcmVzdGFydCB0aGUgInJlc3VtZSB1c2Vyc3BhY2UiIHByb2Nlc3MuICBXZSBtYXkgaGF2ZQorCSAqIGZpcmVkIGEgc2lnbmFsLCBhbmQgd2UgbmVlZCB0byBkaXNhYmxlIGludGVycnVwdHMgYWdhaW4uCisJICovCisJaiAgICAgICAuTHJlc3VtZV91c2Vyc3BhY2UKKworLkxuZWVkX3NpZ3BlbmRpbmc6CisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBlaXRoZXIgZG9pbmcgc2lnbmFsIGhhbmRsaW5nIG9yIHNpbmdsZS1zdGVwLAorCSAqIHNvIGVpdGhlciB3YXkgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSByZWdpc3RlcnMgc2F2ZWQuCisJICovCisJcHVzaF9leHRyYV9jYWxsZWVfc2F2ZXMgcjAKKworCXsKKwkgLyogSWYgbm8gc2lnbmFsIHBlbmRpbmcsIHNraXAgdG8gc2luZ2xlc3RlcCBjaGVjayAqLworCSBieiAgICAgcjI4LCAuTG5lZWRfc2luZ2xlc3RlcAorCisJIC8qIE1hc2sgdGhlIHNpbmdsZXN0ZXAgZmxhZyAqLworCSBhbmRpICAgcjI4LCByMjksIF9USUZfU0lOR0xFU1RFUAorCX0KKworCWphbCAgICAgZG9fc2lnbmFsCisJRkVFREJBQ0tfUkVFTlRFUihpbnRlcnJ1cHRfcmV0dXJuKQorCisJLyogUmVsb2FkIHRoZSBmbGFncyBhbmQgY2hlY2sgYWdhaW4gKi8KKwlqICAgICAgIC5McmVzdW1lX3VzZXJzcGFjZQorCisuTG5lZWRfc2luZ2xlc3RlcDoKKwl7CisJIC8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIEVYMSBmaWVsZCAqLworCSBQVFJFR1NfUFRSKHIyOSwgUFRSRUdTX09GRlNFVF9FWDEpCisKKwkgLyogSWYgd2UgZ2V0IGhlcmUsIG91ciBiaXQgbXVzdCBiZSBzZXQuICovCisJIGJ6ICAgICByMjgsIC5Md29ya19jb25mdXNpb24KKwl9CisJLyogSWYgd2UgYXJlIGluIHByaXYgbW9kZSwgZG9uJ3Qgc2luZ2xlIHN0ZXAgKi8KKwlsdyAgICAgIHIyOCwgcjI5CisJYW5kaSAgICByMjgsIHIyOCwgU1BSX0VYX0NPTlRFWFRfMV8xX19QTF9NQVNLICAvKiBtYXNrIG9mZiBJQ1MgKi8KKwlibnogICAgIHIyOCwgLkxyZXN0b3JlX2FsbAorCisJLyogQWxsb3cgaW50ZXJydXB0cyB3aXRoaW4gdGhlIHNpbmdsZSBzdGVwIGNvZGUgKi8KKwlUUkFDRV9JUlFTX09OICAvKiBOb3RlOiBjbG9iYmVycyByZWdpc3RlcnMgcjAtcjI5ICovCisJSVJRX0VOQUJMRShyMjAsIHIyMSkKKworCS8qIHRyeSB0byBzaW5nbGUtc3RlcCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiAqLworCVBUUkVHU19QVFIocjAsIFBUUkVHU19PRkZTRVRfQkFTRSkKKwlqYWwgICAgIHNpbmdsZV9zdGVwX29uY2UKKwlGRUVEQkFDS19SRUVOVEVSKGludGVycnVwdF9yZXR1cm4pCisKKwkvKiBSZS1kaXNhYmxlIGludGVycnVwdHMuICBUUkFDRV9JUlFTX09GRiBpbiAuTHJlc3RvcmVfYWxsLiAqLworCUlSUV9ESVNBQkxFKHIyMCxyMjEpCisKKwlqICAgICAgIC5McmVzdG9yZV9hbGwKKworLkx3b3JrX2NvbmZ1c2lvbjoKKwltb3ZlICAgIHIwLCByMjgKKwlwYW5pYyAgICJ0aHJlYWRfaW5mbyBhbGx3b3JrIGZsYWdzIHVuaGFuZGxlZCBvbiB1c2Vyc3BhY2UgcmVzdW1lOiAlI3giCisKKwlTVERfRU5EUFJPQyhpbnRlcnJ1cHRfcmV0dXJuKQorCisJLyoKKwkgKiBUaGlzIGludGVycnVwdCB2YXJpYW50IGNsZWFycyB0aGUgSU5UX0lOVENUUkxfMSBpbnRlcnJ1cHQgbWFzayBiaXQKKwkgKiBiZWZvcmUgcmV0dXJuaW5nLCBzbyB3ZSBjYW4gcHJvcGVybHkgZ2V0IG1vcmUgZG93bmNhbGxzLgorCSAqLworCS5wdXNoc2VjdGlvbiAudGV4dC5oYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsLCJheCIKK2hhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGw6CisJZmluaXNoX2ludGVycnVwdF9zYXZlIGhhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGwKKwljaGVja19zaW5nbGVfc3RlcHBpbmcgbm9ybWFsLCAuTGRpc3BhdGNoX2Rvd25jYWxsCisuTGRpc3BhdGNoX2Rvd25jYWxsOgorCisJLyogQ2xlYXIgSU5UQ1RSTF8xIGZyb20gdGhlIHNldCBvZiBpbnRlcnJ1cHRzIHdlIGV2ZXIgZW5hYmxlLiAqLworCUdFVF9JTlRFUlJVUFRTX0VOQUJMRURfTUFTS19QVFIocjMwKQorCXsKKwkgYWRkaSAgIHIzMCwgcjMwLCA0CisJIG1vdmVpICByMzEsIElOVF9NQVNLKElOVF9JTlRDVFJMXzEpCisJfQorCXsKKwkgbHcgICAgIHIyMCwgcjMwCisJIG5vciAgICByMjEsIHIzMSwgemVybworCX0KKwlhbmQgICAgIHIyMCwgcjIwLCByMjEKKwlzdyAgICAgIHIzMCwgcjIwCisKKwl7CisJIGphbHIgICByMAorCSBQVFJFR1NfUFRSKHIwLCBQVFJFR1NfT0ZGU0VUX0JBU0UpCisJfQorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbCkKKworCS8qIEFsbG93IElOVENUUkxfMSB0byBiZSBlbmFibGVkIG5leHQgdGltZSB3ZSBlbmFibGUgaW50ZXJydXB0cy4gKi8KKwlsdyAgICAgIHIyMCwgcjMwCisJb3IgICAgICByMjAsIHIyMCwgcjMxCisJc3cgICAgICByMzAsIHIyMAorCisJeworCSBtb3ZlaSAgcjMwLCAwICAgLyogbm90IGFuIE5NSSAqLworCSBqICAgICAgaW50ZXJydXB0X3JldHVybgorCX0KKwlTVERfRU5EUFJPQyhoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsKQorCisJLyoKKwkgKiBTb21lIGludGVycnVwdHMgZG9uJ3QgY2hlY2sgZm9yIHNpbmdsZSBzdGVwcGluZworCSAqLworCS5wdXNoc2VjdGlvbiAudGV4dC5oYW5kbGVfaW50ZXJydXB0X25vX3NpbmdsZV9zdGVwLCJheCIKK2hhbmRsZV9pbnRlcnJ1cHRfbm9fc2luZ2xlX3N0ZXA6CisJZmluaXNoX2ludGVycnVwdF9zYXZlIGhhbmRsZV9pbnRlcnJ1cHRfbm9fc2luZ2xlX3N0ZXAKKwl7CisJIGphbHIgICByMAorCSBQVFJFR1NfUFRSKHIwLCBQVFJFR1NfT0ZGU0VUX0JBU0UpCisJfQorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX2ludGVycnVwdF9ub19zaW5nbGVfc3RlcCkKKwl7CisJIG1vdmVpICByMzAsIDAgICAvKiBub3QgYW4gTk1JICovCisJIGogICAgICBpbnRlcnJ1cHRfcmV0dXJuCisJfQorCVNURF9FTkRQUk9DKGhhbmRsZV9pbnRlcnJ1cHRfbm9fc2luZ2xlX3N0ZXApCisKKwkvKgorCSAqICJOTUkiIGludGVycnVwdHMgbWFzayBBTEwgaW50ZXJydXB0cyBiZWZvcmUgY2FsbGluZyB0aGUKKwkgKiBoYW5kbGVyLCBhbmQgZG9uJ3QgY2hlY2sgdGhyZWFkIGZsYWdzLCBldGMuLCBvbiB0aGUgd2F5CisJICogYmFjayBvdXQuICBJbiBnZW5lcmFsLCB0aGUgb25seSB0aGluZ3Mgd2UgZG8gaGVyZSBmb3IgTk1JcworCSAqIGFyZSB0aGUgcmVnaXN0ZXIgc2F2ZS9yZXN0b3JlLCBmaXhpbmcgdGhlIFBDIGlmIHdlIHdlcmUKKwkgKiBkb2luZyBzaW5nbGUgc3RlcCwgYW5kIHRoZSBkYXRhcGxhbmUga2VybmVsLVRMQiBtYW5hZ2VtZW50LgorCSAqIFdlIGRvbid0IChmb3IgZXhhbXBsZSkgZGVhbCB3aXRoIHN0YXJ0L3N0b3Agb2YgdGhlIHNjaGVkIHRpY2suCisJICovCisJLnB1c2hzZWN0aW9uIC50ZXh0LmhhbmRsZV9ubWksImF4IgoraGFuZGxlX25taToKKwlmaW5pc2hfaW50ZXJydXB0X3NhdmUgaGFuZGxlX25taQorCWNoZWNrX3NpbmdsZV9zdGVwcGluZyBub3JtYWwsIC5MZGlzcGF0Y2hfbm1pCisuTGRpc3BhdGNoX25taToKKwl7CisJIGphbHIgICByMAorCSBQVFJFR1NfUFRSKHIwLCBQVFJFR1NfT0ZGU0VUX0JBU0UpCisJfQorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX25taSkKKwlqICAgICAgIGludGVycnVwdF9yZXR1cm4KKwlTVERfRU5EUFJPQyhoYW5kbGVfbm1pKQorCisJLyoKKwkgKiBQYXJhbGxlbCBjb2RlIGZvciBzeXNjYWxscyB0byBoYW5kbGVfaW50ZXJydXB0LgorCSAqLworCS5wdXNoc2VjdGlvbiAudGV4dC5oYW5kbGVfc3lzY2FsbCwiYXgiCitoYW5kbGVfc3lzY2FsbDoKKwlmaW5pc2hfaW50ZXJydXB0X3NhdmUgaGFuZGxlX3N5c2NhbGwKKworCS8qCisJICogQ2hlY2sgZm9yIGlmIHdlIGFyZSBzaW5nbGUgc3RlcHBpbmcgaW4gdXNlciBsZXZlbC4gSWYgc28sIHRoZW4KKwkgKiB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIFBDLgorCSAqLworCWNoZWNrX3NpbmdsZV9zdGVwcGluZyBzeXNjYWxsLCAuTGRpc3BhdGNoX3N5c2NhbGwKKy5MZGlzcGF0Y2hfc3lzY2FsbDoKKworCS8qIEVuYWJsZSBpcnFzLiAqLworCVRSQUNFX0lSUVNfT04KKwlJUlFfRU5BQkxFKHIyMCwgcjIxKQorCisJLyogQnVtcCB0aGUgY291bnRlciBmb3Igc3lzY2FsbHMgbWFkZSBvbiB0aGlzIHRpbGUuICovCisJbW92ZWxpICByMjAsIGxvMTYoaXJxX3N0YXQgKyBJUlFfQ1BVU1RBVF9TWVNDQUxMX0NPVU5UX09GRlNFVCkKKwlhdWxpICAgIHIyMCwgcjIwLCBoYTE2KGlycV9zdGF0ICsgSVJRX0NQVVNUQVRfU1lTQ0FMTF9DT1VOVF9PRkZTRVQpCisJYWRkICAgICByMjAsIHIyMCwgdHAKKwlsdyAgICAgIHIyMSwgcjIwCisJYWRkaSAgICByMjEsIHIyMSwgMQorCXN3ICAgICAgcjIwLCByMjEKKworCS8qIFRyYWNlIHN5c2NhbGxzLCBpZiByZXF1ZXN0ZWQuICovCisJR0VUX1RIUkVBRF9JTkZPKHIzMSkKKwlhZGRpCXIzMSwgcjMxLCBUSFJFQURfSU5GT19GTEFHU19PRkZTRVQKKwlsdwlyMzAsIHIzMQorCWFuZGkgICAgcjMwLCByMzAsIF9USUZfU1lTQ0FMTF9UUkFDRQorCWJ6dAlyMzAsIC5McmVzdG9yZV9zeXNjYWxsX3JlZ3MKKwlqYWwJZG9fc3lzY2FsbF90cmFjZQorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX3N5c2NhbGwpCisKKwkvKgorCSAqIFdlIGFsd2F5cyByZWxvYWQgb3VyIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjayBhdCB0aGlzCisJICogcG9pbnQuICBUaGV5IG1pZ2h0IGJlIHZhbGlkLCBpZiB3ZSBkaWRuJ3QgYnVpbGQgd2l0aAorCSAqIFRSQUNFX0lSUUZMQUdTLCBhbmQgdGhpcyBpc24ndCBhIGRhdGFwbGFuZSB0aWxlLCBhbmQgd2UncmUgbm90CisJICogZG9pbmcgc3lzY2FsbCB0cmFjaW5nLCBidXQgdGhlcmUgYXJlIGVub3VnaCBjYXNlcyBub3cgdGhhdCBpdAorCSAqIHNlZW1zIHNpbXBsZXN0IGp1c3QgdG8gZG8gdGhlIHJlbG9hZCB1bmNvbmRpdGlvbmFsbHkuCisJICovCisuTHJlc3RvcmVfc3lzY2FsbF9yZWdzOgorCVBUUkVHU19QVFIocjExLCBQVFJFR1NfT0ZGU0VUX1JFRygwKSkKKwlwb3BfcmVnIHIwLCByMTEKKwlwb3BfcmVnIHIxLCByMTEKKwlwb3BfcmVnIHIyLCByMTEKKwlwb3BfcmVnIHIzLCByMTEKKwlwb3BfcmVnIHI0LCByMTEKKwlwb3BfcmVnIHI1LCByMTEsIFBUUkVHU19PRkZTRVRfU1lTQ0FMTCAtIFBUUkVHU19PRkZTRVRfUkVHKDUpCisJcG9wX3JlZyBUUkVHX1NZU0NBTExfTlJfTkFNRSwgcjExCisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgc3lzY2FsbCBudW1iZXIgaXMgd2l0aGluIHRoZSBsZWdhbCByYW5nZS4gKi8KKwltb3ZlbGkgIHIyMSwgX19OUl9zeXNjYWxscworCXsKKwkgc2x0X3UgIHIyMSwgVFJFR19TWVNDQUxMX05SX05BTUUsIHIyMQorCSBtb3ZlbGkgcjIwLCBsbzE2KHN5c19jYWxsX3RhYmxlKQorCX0KKwl7CisJIGJibnMgICByMjEsIC5MaW52YWxpZF9zeXNjYWxsCisJIGF1bGkgICByMjAsIHIyMCwgaGExNihzeXNfY2FsbF90YWJsZSkKKwl9CisJczJhICAgICByMjAsIFRSRUdfU1lTQ0FMTF9OUl9OQU1FLCByMjAKKwlsdyAgICAgIHIyMCwgcjIwCisKKwkvKiBKdW1wIHRvIHN5c2NhbGwgaGFuZGxlci4gKi8KKwlqYWxyICAgIHIyMDsgLkxoYW5kbGVfc3lzY2FsbF9saW5rOgorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX3N5c2NhbGwpCisKKwkvKgorCSAqIFdyaXRlIG91ciByMCBvbnRvIHRoZSBzdGFjayBzbyBpdCBnZXRzIHJlc3RvcmVkIGluc3RlYWQKKwkgKiBvZiB3aGF0ZXZlciB0aGUgdXNlciBoYWQgdGhlcmUgYmVmb3JlLgorCSAqLworCVBUUkVHU19QVFIocjI5LCBQVFJFR1NfT0ZGU0VUX1JFRygwKSkKKwlzdyAgICAgIHIyOSwgcjAKKworCS8qIERvIHN5c2NhbGwgdHJhY2UgYWdhaW4sIGlmIHJlcXVlc3RlZC4gKi8KKwlsdwlyMzAsIHIzMQorCWFuZGkgICAgcjMwLCByMzAsIF9USUZfU1lTQ0FMTF9UUkFDRQorCWJ6dCAgICAgcjMwLCAxZgorCWphbAlkb19zeXNjYWxsX3RyYWNlCisJRkVFREJBQ0tfUkVFTlRFUihoYW5kbGVfc3lzY2FsbCkKKzE6CWogICAgICAgLkxyZXN1bWVfdXNlcnNwYWNlICAgLyoganVtcCBpbnRvIG1pZGRsZSBvZiBpbnRlcnJ1cHRfcmV0dXJuICovCisKKy5MaW52YWxpZF9zeXNjYWxsOgorCS8qIFJlcG9ydCBhbiBpbnZhbGlkIHN5c2NhbGwgYmFjayB0byB0aGUgdXNlciBwcm9ncmFtICovCisJeworCSBQVFJFR1NfUFRSKHIyOSwgUFRSRUdTX09GRlNFVF9SRUcoMCkpCisJIG1vdmVpICByMjgsIC1FTk9TWVMKKwl9CisJc3cgICAgICByMjksIHIyOAorCWogICAgICAgLkxyZXN1bWVfdXNlcnNwYWNlICAgLyoganVtcCBpbnRvIG1pZGRsZSBvZiBpbnRlcnJ1cHRfcmV0dXJuICovCisJU1REX0VORFBST0MoaGFuZGxlX3N5c2NhbGwpCisKKwkvKiBSZXR1cm4gdGhlIGFkZHJlc3MgZm9yIG9wcm9maWxlIHRvIHN1cHByZXNzIGluIGJhY2t0cmFjZXMuICovCitTVERfRU5UUllfU0VDVElPTihoYW5kbGVfc3lzY2FsbF9saW5rX2FkZHJlc3MsIC50ZXh0LmhhbmRsZV9zeXNjYWxsKQorCWxuayAgICAgcjAKKwl7CisJIGFkZGxpICByMCwgcjAsIC5MaGFuZGxlX3N5c2NhbGxfbGluayAtIC4KKwkganJwICAgIGxyCisJfQorCVNURF9FTkRQUk9DKGhhbmRsZV9zeXNjYWxsX2xpbmtfYWRkcmVzcykKKworU1REX0VOVFJZKHJldF9mcm9tX2ZvcmspCisJamFsICAgICBzaW1fbm90aWZ5X2ZvcmsKKwlqYWwgICAgIHNjaGVkdWxlX3RhaWwKKwlGRUVEQkFDS19SRUVOVEVSKHJldF9mcm9tX2ZvcmspCisJaiAgICAgICAuTHJlc3VtZV91c2Vyc3BhY2UgICAvKiBqdW1wIGludG8gbWlkZGxlIG9mIGludGVycnVwdF9yZXR1cm4gKi8KKwlTVERfRU5EUFJPQyhyZXRfZnJvbV9mb3JrKQorCisJLyoKKwkgKiBDb2RlIGZvciBpbGwgaW50ZXJydXB0LgorCSAqLworCS5wdXNoc2VjdGlvbiAudGV4dC5oYW5kbGVfaWxsLCJheCIKK2hhbmRsZV9pbGw6CisJZmluaXNoX2ludGVycnVwdF9zYXZlIGhhbmRsZV9pbGwKKworCS8qCisJICogQ2hlY2sgZm9yIGlmIHdlIGFyZSBzaW5nbGUgc3RlcHBpbmcgaW4gdXNlciBsZXZlbC4gSWYgc28sIHRoZW4KKwkgKiB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIFBDLgorCSAqLworCWNoZWNrX3NpbmdsZV9zdGVwcGluZyBpbGwsIC5MZGlzcGF0Y2hfbm9ybWFsX2lsbAorCisJeworCSAvKiBTZWUgaWYgdGhlIFBDIGlzIHRoZSAxc3QgYnVuZGxlIGluIHRoZSBidWZmZXIgKi8KKwkgc2VxICAgIHIyNSwgcjI3LCByMjYKKworCSAvKiBQb2ludCB0byB0aGUgMm5kIGJ1bmRsZSBpbiB0aGUgYnVmZmVyICovCisJIGFkZGkgICByMjYsIHIyNiwgOAorCX0KKwl7CisJIC8qIFBvaW50IHRvIHRoZSBvcmlnaW5hbCBwYyAqLworCSBhZGRpICAgcjI0LCByMjksIFNJTkdMRVNURVBfU1RBVEVfT1JJR19QQ19PRkZTRVQKKworCSAvKiBCcmFuY2ggaWYgdGhlIFBDIGlzIHRoZSAxc3QgYnVuZGxlIGluIHRoZSBidWZmZXIgKi8KKwkgYm56ICAgIHIyNSwgM2YKKwl9CisJeworCSAvKiBTZWUgaWYgdGhlIFBDIGlzIHRoZSAybmQgYnVuZGxlIG9mIHRoZSBidWZmZXIgKi8KKwkgc2VxICAgIHIyNSwgcjI3LCByMjYKKworCSAvKiBTZXQgUEMgdG8gbmV4dCBpbnN0cnVjdGlvbiAqLworCSBhZGRpICAgcjI0LCByMjksIFNJTkdMRVNURVBfU1RBVEVfTkVYVF9QQ19PRkZTRVQKKwl9CisJeworCSAvKiBQb2ludCB0byBmbGFncyAqLworCSBhZGRpICAgcjI1LCByMjksIFNJTkdMRVNURVBfU1RBVEVfRkxBR1NfT0ZGU0VUCisKKwkgLyogQnJhbmNoIGlmIFBDIGlzIGluIHRoZSBzZWNvbmQgYnVuZGxlICovCisJIGJ6ICAgICByMjUsIDJmCisJfQorCS8qIExvYWQgZmxhZ3MgKi8KKwlsdyAgICAgIHIyNSwgcjI1CisJeworCSAvKgorCSAgKiBHZXQgdGhlIG9mZnNldCBmb3IgdGhlIHJlZ2lzdGVyIHRvIHJlc3RvcmUKKwkgICogTm90ZTogdGhlIGxvd2VyIGJvdW5kIGlzIDIsIHNvIHdlIGhhdmUgaW1wbGljaXQgc2NhbGluZyBieSA0LgorCSAgKiAgTm8gbXVsdGlwbGljYXRpb24gb2YgdGhlIHJlZ2lzdGVyIG51bWJlciBieSB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyCisJICAqICBpcyBuZWVkZWQuCisJICAqLworCSBtbSAgICAgcjI3LCByMjUsIHplcm8sIFNJTkdMRVNURVBfU1RBVEVfVEFSR0VUX0xCLCBcCisJCVNJTkdMRVNURVBfU1RBVEVfVEFSR0VUX1VCCisKKwkgLyogTWFzayBSZXdyaXRlX0xSICovCisJIGFuZGkgICByMjUsIHIyNSwgU0lOR0xFU1RFUF9TVEFURV9NQVNLX1VQREFURQorCX0KKwl7CisJIGFkZGkgICByMjksIHIyOSwgU0lOR0xFU1RFUF9TVEFURV9VUERBVEVfVkFMVUVfT0ZGU0VUCisKKwkgLyogRG9uJ3QgcmV3cml0ZSB0ZW1wIHJlZ2lzdGVyICovCisJIGJ6ICAgICByMjUsIDNmCisJfQorCXsKKwkgLyogR2V0IHRoZSB0ZW1wIHZhbHVlICovCisJIGx3ICAgICByMjksIHIyOQorCisJIC8qIFBvaW50IHRvIHdoZXJlIHRoZSByZWdpc3RlciBpcyBzdG9yZWQgKi8KKwkgYWRkICAgIHIyNywgcjI3LCBzcAorCX0KKworCS8qIEFkZCBpbiB0aGUgQyBBQkkgc2F2ZSBhcmVhIHNpemUgdG8gdGhlIHJlZ2lzdGVyIG9mZnNldCAqLworCWFkZGkgICAgcjI3LCByMjcsIENfQUJJX1NBVkVfQVJFQV9TSVpFCisKKwkvKiBSZXN0b3JlIHRoZSB1c2VyJ3MgcmVnaXN0ZXIgd2l0aCB0aGUgdGVtcCB2YWx1ZSAqLworCXN3ICAgICAgcjI3LCByMjkKKwlqICAgICAgIDNmCisKKzI6CisJLyogTXVzdCBiZSBpbiB0aGUgdGhpcmQgYnVuZGxlICovCisJYWRkaSAgICByMjQsIHIyOSwgU0lOR0xFU1RFUF9TVEFURV9CUkFOQ0hfTkVYVF9QQ19PRkZTRVQKKworMzoKKwkvKiBzZXQgUEMgYW5kIGNvbnRpbnVlICovCisJbHcgICAgICByMjYsIHIyNAorCXN3ICAgICAgcjI4LCByMjYKKworCS8qIENsZWFyIFRJRl9TSU5HTEVTVEVQICovCisJR0VUX1RIUkVBRF9JTkZPKHIwKQorCisJYWRkaSAgICByMSwgcjAsIFRIUkVBRF9JTkZPX0ZMQUdTX09GRlNFVAorCXsKKwkgbHcgICAgIHIyLCByMQorCSBhZGRpICAgcjAsIHIwLCBUSFJFQURfSU5GT19UQVNLX09GRlNFVCAgLyogY3VycmVudGx5IGEgbm8tb3AgKi8KKwl9CisJYW5kaSAgICByMiwgcjIsIH5fVElGX1NJTkdMRVNURVAKKwlzdyAgICAgIHIxLCByMgorCisJLyogSXNzdWUgYSBzaWd0cmFwICovCisJeworCSBsdyAgICAgcjAsIHIwICAgICAgICAgIC8qIGluZGlyZWN0IHRocnUgdGhyZWFkX2luZm8gdG8gZ2V0IHRhc2tfaW5mbyovCisJIGFkZGkgICByMSwgc3AsIENfQUJJX1NBVkVfQVJFQV9TSVpFICAvKiBwdXQgcHRyZWdzIHBvaW50ZXIgaW50byByMSAqLworCSBtb3ZlICAgcjIsIHplcm8gICAgICAgIC8qIGxvYWQgZXJyb3IgY29kZSBpbnRvIHIyICovCisJfQorCisJamFsICAgICBzZW5kX3NpZ3RyYXAgICAgLyogaXNzdWUgYSBTSUdUUkFQICovCisJRkVFREJBQ0tfUkVFTlRFUihoYW5kbGVfaWxsKQorCWogICAgICAgLkxyZXN1bWVfdXNlcnNwYWNlICAgLyoganVtcCBpbnRvIG1pZGRsZSBvZiBpbnRlcnJ1cHRfcmV0dXJuICovCisKKy5MZGlzcGF0Y2hfbm9ybWFsX2lsbDoKKwl7CisJIGphbHIgICByMAorCSBQVFJFR1NfUFRSKHIwLCBQVFJFR1NfT0ZGU0VUX0JBU0UpCisJfQorCUZFRURCQUNLX1JFRU5URVIoaGFuZGxlX2lsbCkKKwl7CisJIG1vdmVpICByMzAsIDAgICAvKiBub3QgYW4gTk1JICovCisJIGogICAgICBpbnRlcnJ1cHRfcmV0dXJuCisJfQorCVNURF9FTkRQUk9DKGhhbmRsZV9pbGwpCisKKwkucHVzaHNlY3Rpb24gLnJvZGF0YSwgImEiCisJLmFsaWduICA4CiticHRfY29kZToKKwlicHQKKwlFTkRQUk9DKGJwdF9jb2RlKQorCS5wb3BzZWN0aW9uCisKKy8qIFZhcmlvdXMgc3R1YiBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIHN5c2NhbGwgaGFuZGxlcnMgKi8KKworU1REX0VOVFJZX0xPQ0FMKF9rZXJuZWxfZG91YmxlX2ZhdWx0KQorCW1mc3ByICAgcjEsIEVYX0NPTlRFWFRfMV8wCisJbW92ZSAgICByMiwgbHIKKwltb3ZlICAgIHIzLCBzcAorCW1vdmUgICAgcjQsIHI1MgorCWFkZGkgICAgc3AsIHNwLCAtQ19BQklfU0FWRV9BUkVBX1NJWkUKKwlqICAgICAgIGtlcm5lbF9kb3VibGVfZmF1bHQKKwlTVERfRU5EUFJPQyhfa2VybmVsX2RvdWJsZV9mYXVsdCkKKworU1REX0VOVFJZX0xPQ0FMKGJhZF9pbnRyKQorCW1mc3ByICAgcjIsIEVYX0NPTlRFWFRfMV8wCisJcGFuaWMgICAiVW5oYW5kbGVkIGludGVycnVwdCAlI3g6IFBDICUjbHgiCisJU1REX0VORFBST0MoYmFkX2ludHIpCisKKy8qIFB1dCBhZGRyZXNzIG9mIHB0X3JlZ3MgaW4gcmVnIGFuZCBqdW1wLiAqLworI2RlZmluZSBQVFJFR1NfU1lTQ0FMTCh4LCByZWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJU1REX0VOVFJZKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgUFRSRUdTX1BUUihyZWcsIFBUUkVHU19PRkZTRVRfQkFTRSk7ICAgICAgICAgICBcCisJIGogICAgICBfIyN4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlTVERfRU5EUFJPQyh4KQorCitQVFJFR1NfU1lTQ0FMTChzeXNfZXhlY3ZlLCByMykKK1BUUkVHU19TWVNDQUxMKHN5c19zaWdhbHRzdGFjaywgcjIpCitQVFJFR1NfU1lTQ0FMTChzeXNfcnRfc2lncmV0dXJuLCByMCkKKworLyogU2F2ZSBhZGRpdGlvbmFsIGNhbGxlZS1zYXZlcyB0byBwdF9yZWdzLCBwdXQgYWRkcmVzcyBpbiByZWcgYW5kIGp1bXAuICovCisjZGVmaW5lIFBUUkVHU19TWVNDQUxMX0FMTF9SRUdTKHgsIHJlZykgICAgICAgICAgICAgICAgIFwKKwlTVERfRU5UUlkoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHVzaF9leHRyYV9jYWxsZWVfc2F2ZXMgcmVnOyAgICAgICAgICAgICAgICAgICAgXAorCWogICAgICAgXyMjeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlTVERfRU5EUFJPQyh4KQorCitQVFJFR1NfU1lTQ0FMTF9BTExfUkVHUyhzeXNfZm9yaywgcjApCitQVFJFR1NfU1lTQ0FMTF9BTExfUkVHUyhzeXNfdmZvcmssIHIwKQorUFRSRUdTX1NZU0NBTExfQUxMX1JFR1Moc3lzX2Nsb25lLCByNCkKK1BUUkVHU19TWVNDQUxMX0FMTF9SRUdTKHN5c19jbXB4Y2hnX2JhZGFkZHIsIHIxKQorCisvKgorICogVGhpcyBlbnRyeXBvaW50IGlzIHRha2VuIGZvciB0aGUgY21weGNoZyBhbmQgYXRvbWljX3VwZGF0ZSBmYXN0CisgKiBzd2ludHMuICBXZSBtYXkgd2lzaCB0byBnZW5lcmFsaXplIGl0IHRvIG90aGVyIGZhc3Qgc3dpbnRzIGF0IHNvbWUKKyAqIHBvaW50LCBidXQgZm9yIG5vdyB0aGVyZSBhcmUganVzdCB0d28gdmVyeSBzaW1pbGFyIG9uZXMsIHdoaWNoCisgKiBtYWtlcyBpdCBmYXN0ZXIuCisgKgorICogVGhlIGZhc3Qgc3dpbnQgY29kZSBpcyBkZXNpZ25lZCB0byBoYXZlIGEgc21hbGwgZm9vdHByaW50LiAgSXQgZG9lcworICogbm90IHNhdmUgb3IgcmVzdG9yZSBhbnkgR1BScywgY291bnRpbmcgb24gdGhlIGNhbGxlci1zYXZlIHJlZ2lzdGVycworICogdG8gYmUgYXZhaWxhYmxlIHRvIGl0IG9uIGVudHJ5LiAgSXQgZG9lcyBub3QgbW9kaWZ5IGFueSBjYWxsZWUtc2F2ZQorICogcmVnaXN0ZXJzIChpbmNsdWRpbmcgImxyIikuICBJdCBkb2VzIG5vdCBjaGVjayB3aGF0IFBMIGl0IGlzIGJlaW5nCisgKiBjYWxsZWQgYXQsIHNvIHlvdSdkIGJldHRlciBub3QgY2FsbCBpdCBvdGhlciB0aGFuIGF0IFBMMC4KKyAqCisgKiBJdCBkb2VzIG5vdCB1c2UgdGhlIHN0YWNrLCBidXQgc2luY2UgaXQgbWlnaHQgYmUgcmUtaW50ZXJydXB0ZWQgYnkKKyAqIGEgcGFnZSBmYXVsdCB3aGljaCB3b3VsZCBhc3N1bWUgdGhlIHN0YWNrIHdhcyB2YWxpZCwgaXQgZG9lcworICogc2F2ZS9yZXN0b3JlIHRoZSBzdGFjayBwb2ludGVyIGFuZCB6ZXJvIGl0IG91dCB0byBtYWtlIHN1cmUgaXQgZ2V0cyByZXNldC4KKyAqIFNpbmNlIHdlIGFsd2F5cyBrZWVwIGludGVycnVwdHMgZGlzYWJsZWQsIHRoZSBoeXBlcnZpc29yIHdvbid0CisgKiBjbG9iYmVyIG91ciBFWF9DT05URVhUXzFfeCByZWdpc3RlcnMsIHNvIHdlIGRvbid0IHNhdmUvcmVzdG9yZSB0aGVtCisgKiAob3RoZXIgdGhhbiB0byBhZHZhbmNlIHRoZSBQQyBvbiByZXR1cm4pLgorICoKKyAqIFdlIGhhdmUgdG8gbWFudWFsbHkgdmFsaWRhdGUgdGhlIHVzZXIgdnMga2VybmVsIGFkZHJlc3MgcmFuZ2UKKyAqIChzaW5jZSBhdCBQTDEgd2UgY2FuIHJlYWQvd3JpdGUgYm90aCksIGFuZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucworICogd2UgZG9uJ3QgYWxsb3cgY21weGNoZyBvbiB0aGUgZmMwMDAwMDAgbWVtb3J5IHJlZ2lvbiwgc2luY2Ugd2Ugb25seQorICogdmFsaWRhdGUgdGhhdCB0aGUgdXNlciBhZGRyZXNzIGlzIGJlbG93IFBBR0VfT0ZGU0VULgorICoKKyAqIFdlIHBsYWNlIGl0IGluIHRoZSBfX0hFQUQgc2VjdGlvbiB0byBlbnN1cmUgaXQgaXMgcmVsYXRpdmVseQorICogbmVhciB0byB0aGUgaW50dmVjX1NXSU5UXzEgY29kZSAocmVhY2hhYmxlIGJ5IGEgY29uZGl0aW9uYWwgYnJhbmNoKS4KKyAqCisgKiBNdXN0IG1hdGNoIHJlZ2lzdGVyIHVzYWdlIGluIGRvX3BhZ2VfZmF1bHQoKS4KKyAqLworCV9fSEVBRAorCS5hbGlnbiA2NAorCS8qIEFsaWduIG11Y2ggbGF0ZXIganVtcCBvbiB0aGUgc3RhcnQgb2YgYSBjYWNoZSBsaW5lLiAqLworI2lmICFBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkKKwlub3A7IG5vcAorI2VuZGlmCitFTlRSWShzeXNfY21weGNoZykKKworCS8qCisJICogU2F2ZSAic3AiIGFuZCBzZXQgaXQgemVybyBmb3IgYW55IHBvc3NpYmxlIHBhZ2UgZmF1bHQuCisJICoKKwkgKiBIQUNLOiBXZSB3YW50IHRvIGJvdGggemVybyBzcCBhbmQgY2hlY2sgcjAncyBhbGlnbm1lbnQsCisJICogc28gd2UgZG8gYm90aCBhdCBvbmNlLiBJZiAic3AiIGJlY29tZXMgbm9uemVybyB3ZQorCSAqIGtub3cgcjAgaXMgdW5hbGlnbmVkIGFuZCBicmFuY2ggdG8gdGhlIGVycm9yIGhhbmRsZXIgdGhhdAorCSAqIHJlc3RvcmVzIHNwLCBzbyB0aGlzIGlzIE9LLgorCSAqCisJICogSUNTIGlzIGRpc2FibGVkIHJpZ2h0IG5vdyBzbyBoYXZpbmcgYSBnYXJiYWdlIGJ1dCBub256ZXJvCisJICogc3AgaXMgT0ssIHNpbmNlIHdlIHdvbid0IGV4ZWN1dGUgYW55IGZhdWx0aW5nIGluc3RydWN0aW9ucworCSAqIHdoZW4gaXQgaXMgbm9uemVyby4KKwkgKi8KKwl7CisJIG1vdmUgICByMjcsIHNwCisJIGFuZGkJc3AsIHIwLCAzCisJfQorCisJLyoKKwkgKiBHZXQgdGhlIGxvY2sgYWRkcmVzcyBpbiBBVE9NSUNfTE9DS19SRUcsIGFuZCBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlCisJICogYWRkcmVzcyBpcyBsZXNzIHRoYW4gUEFHRV9PRkZTRVQsIHNpbmNlIHRoYXQgd29uJ3QgdHJhcCBhdCBQTDEuCisJICogV2Ugb25seSB1c2UgYml0cyBsZXNzIHRoYW4gUEFHRV9TSElGVCB0byBhdm9pZCBoYXZpbmcgdG8gd29ycnkKKwkgKiBhYm91dCBhbGlhc2luZyBhbW9uZyBtdWx0aXBsZSBtYXBwaW5ncyBvZiB0aGUgc2FtZSBwaHlzaWNhbCBwYWdlLAorCSAqIGFuZCB3ZSBpZ25vcmUgdGhlIGxvdyAzIGJpdHMgc28gd2UgaGF2ZSBvbmUgbG9jayB0aGF0IGNvdmVycworCSAqIGJvdGggYSBjbXB4Y2hnNjQoKSBhbmQgYSBjbXB4Y2hnKCkgb24gZWl0aGVyIGl0cyBsb3cgb3IgaGlnaCB3b3JkLgorCSAqIE5PVEU6IHRoaXMgY29kZSBtdXN0IG1hdGNoIF9fYXRvbWljX2hhc2hlZF9sb2NrKCkgaW4gbGliL2F0b21pYy5jLgorCSAqLworCisjaWYgQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpCisJeworCSAvKiBDaGVjayBmb3IgdW5hbGlnbmVkIGlucHV0LiAqLworCSBibnogICAgc3AsIC5MY21weGNoZ19iYWRhZGRyCisJIG1tICAgICByMjUsIHIwLCB6ZXJvLCAzLCBQQUdFX1NISUZULTEKKwl9CisJeworCSBjcmMzMl8zMiByMjUsIHplcm8sIHIyNQorCSBtb3ZlbGkgcjIxLCBsbzE2KGF0b21pY19sb2NrX3B0cikKKwl9CisJeworCSBhdWxpICAgcjIxLCByMjEsIGhhMTYoYXRvbWljX2xvY2tfcHRyKQorCSBhdWxpICAgcjIzLCB6ZXJvLCBoaTE2KFBBR0VfT0ZGU0VUKSAgLyogaHVnZXBhZ2UtYWxpZ25lZCAqLworCX0KKwl7CisJIHNocmkJcjIwLCByMjUsIDMyIC0gQVRPTUlDX0hBU0hfTDFfU0hJRlQKKwkgc2x0X3UgIHIyMywgcjAsIHIyMworCisJIC8qCisJICAqIEVuc3VyZSB0aGF0IHRoZSBUTEIgaXMgbG9hZGVkIGJlZm9yZSB3ZSB0YWtlIG91dCB0aGUgbG9jay4KKwkgICogT24gVElMRVBybywgdGhpcyB3aWxsIHN0YXJ0IGZldGNoaW5nIHRoZSB2YWx1ZSBhbGwgdGhlIHdheQorCSAgKiBpbnRvIG91ciBMMSBhcyB3ZWxsIChhbmQgaWYgaXQgZ2V0cyBtb2RpZmllZCBiZWZvcmUgd2UKKwkgICogZ3JhYiB0aGUgbG9jaywgaXQgd2lsbCBiZSBpbnZhbGlkYXRlZCBmcm9tIG91ciBjYWNoZQorCSAgKiBiZWZvcmUgd2UgcmVsb2FkIGl0KS4gIE9uIHRpbGU2NCwgd2UnbGwgc3RhcnQgZmV0Y2hpbmcgaXQKKwkgICogaW50byBvdXIgTDEgaWYgd2UncmUgdGhlIGhvbWUsIGFuZCBpZiB3ZSdyZSBub3QsIHdlJ2xsCisJICAqIHN0aWxsIGF0IGxlYXN0IHN0YXJ0IGZldGNoaW5nIGl0IGludG8gdGhlIGhvbWUncyBMMi4KKwkgICovCisJIGx3CXIyNiwgcjAKKwl9CisJeworCSBzMmEgICAgcjIxLCByMjAsIHIyMQorCSBiYm5zICAgcjIzLCAuTGNtcHhjaGdfYmFkYWRkcgorCX0KKwl7CisJIGx3ICAgICByMjEsIHIyMQorCSBzZXFpCXIyMywgVFJFR19TWVNDQUxMX05SX05BTUUsIF9fTlJfRkFTVF9jbXB4Y2hnNjQKKwkgYW5kaQlyMjUsIHIyNSwgQVRPTUlDX0hBU0hfTDJfU0laRSAtIDEKKwl9CisJeworCSAvKiBCcmFuY2ggYXdheSBhdCB0aGlzIHBvaW50IGlmIHdlJ3JlIGRvaW5nIGEgNjQtYml0IGNtcHhjaGcuICovCisJIGJicyAgICByMjMsIC5MY21weGNoZzY0CisJIGFuZGkgICByMjMsIHIwLCA3ICAgICAgIC8qIFByZWNvbXB1dGUgYWxpZ25tZW50IGZvciBjbXB4Y2hnNjQuICovCisJfQorCisJeworCSAvKgorCSAgKiBXZSB2ZXJ5IGNhcmVmdWxseSBhbGlnbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHJ1bnMgd2l0aAorCSAgKiB0aGUgbG9jayBoZWxkIChuaW5lIGJ1bmRsZXMpIHNvIHRoYXQgd2Uga25vdyBpdCBpcyBhbGwgaW4KKwkgICogdGhlIGljYWNoZSB3aGVuIHdlIHN0YXJ0LiAgVGhpcyBpbnN0cnVjdGlvbiAodGhlIGp1bXApIGlzCisJICAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgY2FjaGUgbGluZSwgYWRkcmVzcyB6ZXJvIG1vZCA2NDsKKwkgICogd2UganVtcCB0byBzb21ld2hlcmUgaW4gdGhlIHNlY29uZCBjYWNoZSBsaW5lIHRvIGlzc3VlIHRoZQorCSAgKiB0bnMsIHRoZW4ganVtcCBiYWNrIHRvIGZpbmlzaCB1cC4KKwkgICovCisJIHMyYQlBVE9NSUNfTE9DS19SRUdfTkFNRSwgcjI1LCByMjEKKwkgaiAgICAgIC5MY21weGNoZzMyX3RucworCX0KKworI2Vsc2UgLyogQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpICovCisJeworCSAvKiBDaGVjayBmb3IgdW5hbGlnbmVkIGlucHV0LiAqLworCSBibnogICAgc3AsIC5MY21weGNoZ19iYWRhZGRyCisJIGF1bGkgICByMjMsIHplcm8sIGhpMTYoUEFHRV9PRkZTRVQpICAvKiBodWdlcGFnZS1hbGlnbmVkICovCisJfQorCXsKKwkgLyoKKwkgICogU2xpZGUgYml0cyBpbnRvIHBvc2l0aW9uIGZvciAnbW0nLiBXZSB3YW50IHRvIGlnbm9yZQorCSAgKiB0aGUgbG93IDMgYml0cyBvZiByMCwgYW5kIGNvbnNpZGVyIG9ubHkgdGhlIG5leHQKKwkgICogQVRPTUlDX0hBU0hfU0hJRlQgYml0cy4KKwkgICogQmVjYXVzZSBvZiBDIHBvaW50ZXIgYXJpdGhtZXRpYywgd2Ugd2FudCB0byBjb21wdXRlIHRoaXM6CisJICAqCisJICAqICgoY2hhciopYXRvbWljX2xvY2tzICsKKwkgICogICgoKHIwID4+IDMpICYgKDEgPDwgKEFUT01JQ19IQVNIX1NJWkUgLSAxKSkpIDw8IDIpKQorCSAgKgorCSAgKiBJbnN0ZWFkIG9mIHR3byBzaGlmdHMgd2UganVzdCAiPj4gMSIsIGFuZCB1c2UgJ21tJworCSAgKiB0byBpZ25vcmUgdGhlIGxvdyBhbmQgaGlnaCBiaXRzIHdlIGRvbid0IHdhbnQuCisJICAqLworCSBzaHJpCXIyNSwgcjAsIDEKKworCSBzbHRfdSAgcjIzLCByMCwgcjIzCisKKwkgLyoKKwkgICogRW5zdXJlIHRoYXQgdGhlIFRMQiBpcyBsb2FkZWQgYmVmb3JlIHdlIHRha2Ugb3V0IHRoZSBsb2NrLgorCSAgKiBPbiB0aWxlcHJvLCB0aGlzIHdpbGwgc3RhcnQgZmV0Y2hpbmcgdGhlIHZhbHVlIGFsbCB0aGUgd2F5CisJICAqIGludG8gb3VyIEwxIGFzIHdlbGwgKGFuZCBpZiBpdCBnZXRzIG1vZGlmaWVkIGJlZm9yZSB3ZQorCSAgKiBncmFiIHRoZSBsb2NrLCBpdCB3aWxsIGJlIGludmFsaWRhdGVkIGZyb20gb3VyIGNhY2hlCisJICAqIGJlZm9yZSB3ZSByZWxvYWQgaXQpLiAgT24gdGlsZTY0LCB3ZSdsbCBzdGFydCBmZXRjaGluZyBpdAorCSAgKiBpbnRvIG91ciBMMSBpZiB3ZSdyZSB0aGUgaG9tZSwgYW5kIGlmIHdlJ3JlIG5vdCwgd2UnbGwKKwkgICogc3RpbGwgYXQgbGVhc3Qgc3RhcnQgZmV0Y2hpbmcgaXQgaW50byB0aGUgaG9tZSdzIEwyLgorCSAgKi8KKwkgbHcJcjI2LCByMAorCX0KKwl7CisJIC8qIGF0b21pY19sb2NrcyBpcyBwYWdlIGFsaWduZWQgc28gdGhpcyBzdWZmaWNlcyB0byBnZXQgaXRzIGFkZHIuICovCisJIGF1bGkJcjIxLCB6ZXJvLCBoaTE2KGF0b21pY19sb2NrcykKKworCSBiYm5zICAgcjIzLCAuTGNtcHhjaGdfYmFkYWRkcgorCX0KKwl7CisJIC8qCisJICAqIEluc2VydCB0aGUgaGFzaCBiaXRzIGludG8gdGhlIHBhZ2UtYWxpZ25lZCBwb2ludGVyLgorCSAgKiBBVE9NSUNfSEFTSF9TSElGVCBpcyBzbyBiaWcgdGhhdCB3ZSBkb24ndCBhY3R1YWxseSBoYXNoCisJICAqIHRoZSB1bm1hc2tlZCBhZGRyZXNzIGJpdHMsIGFzIHRoYXQgbWF5IGNhdXNlIHVubmVjZXNzYXJ5CisJICAqIGNvbGxpc2lvbnMuCisJICAqLworCSBtbQlBVE9NSUNfTE9DS19SRUdfTkFNRSwgcjI1LCByMjEsIDIsIChBVE9NSUNfSEFTSF9TSElGVCArIDIpIC0gMQorCisJIHNlcWkJcjIzLCBUUkVHX1NZU0NBTExfTlJfTkFNRSwgX19OUl9GQVNUX2NtcHhjaGc2NAorCX0KKwl7CisJIC8qIEJyYW5jaCBhd2F5IGF0IHRoaXMgcG9pbnQgaWYgd2UncmUgZG9pbmcgYSA2NC1iaXQgY21weGNoZy4gKi8KKwkgYmJzICAgIHIyMywgLkxjbXB4Y2hnNjQKKwkgYW5kaSAgIHIyMywgcjAsIDcgICAgICAgLyogUHJlY29tcHV0ZSBhbGlnbm1lbnQgZm9yIGNtcHhjaGc2NC4gKi8KKwl9CisJeworCSAvKgorCSAgKiBXZSB2ZXJ5IGNhcmVmdWxseSBhbGlnbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IHJ1bnMgd2l0aAorCSAgKiB0aGUgbG9jayBoZWxkIChuaW5lIGJ1bmRsZXMpIHNvIHRoYXQgd2Uga25vdyBpdCBpcyBhbGwgaW4KKwkgICogdGhlIGljYWNoZSB3aGVuIHdlIHN0YXJ0LiAgVGhpcyBpbnN0cnVjdGlvbiAodGhlIGp1bXApIGlzCisJICAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgY2FjaGUgbGluZSwgYWRkcmVzcyB6ZXJvIG1vZCA2NDsKKwkgICogd2UganVtcCB0byBzb21ld2hlcmUgaW4gdGhlIHNlY29uZCBjYWNoZSBsaW5lIHRvIGlzc3VlIHRoZQorCSAgKiB0bnMsIHRoZW4ganVtcCBiYWNrIHRvIGZpbmlzaCB1cC4KKwkgICovCisJIGogICAgICAuTGNtcHhjaGczMl90bnMKKwl9CisKKyNlbmRpZiAvKiBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkgKi8KKworCUVOVFJZKF9fc3lzX2NtcHhjaGdfZ3JhYl9sb2NrKQorCisJLyoKKwkgKiBQZXJmb3JtIHRoZSBhY3R1YWwgY21weGNoZyBvciBhdG9taWNfdXBkYXRlLgorCSAqIE5vdGUgdGhhdCBfX2Z1dGV4X21hcmtfdW5sb2NrZWQoKSBpbiB1Q2xpYmMgcmVsaWVzIG9uCisJICogYXRvbWljX3VwZGF0ZSgpIHRvIGFsd2F5cyBwZXJmb3JtIGFuICJtZiIsIHNvIGRvbid0IG1ha2UKKwkgKiBpdCBvcHRpb25hbCBvciBjb25kaXRpb25hbCB3aXRob3V0IG1vZGlmeWluZyB0aGF0IGNvZGUuCisJICovCisuTGRvX2NtcHhjaGczMjoKKwl7CisJIGx3ICAgICByMjEsIHIwCisJIHNlcWkJcjIzLCBUUkVHX1NZU0NBTExfTlJfTkFNRSwgX19OUl9GQVNUX2F0b21pY191cGRhdGUKKwkgbW92ZQlyMjQsIHIyCisJfQorCXsKKwkgc2VxICAgIHIyMiwgcjIxLCByMSAgICAgLyogU2VlIGlmIGNtcHhjaGcgbWF0Y2hlcy4gKi8KKwkgYW5kCXIyNSwgcjIxLCByMSAgICAgLyogSWYgYXRvbWljX3VwZGF0ZSwgY29tcHV0ZSAoKm1lbSAmIG1hc2spICovCisJfQorCXsKKwkgb3IJcjIyLCByMjIsIHIyMyAgICAvKiBTa2lwIGNvbXBhcmUgYnJhbmNoIGZvciBhdG9taWNfdXBkYXRlLiAqLworCSBhZGQJcjI1LCByMjUsIHIyICAgICAvKiBDb21wdXRlICgqbWVtICYgbWFzaykgKyBhZGRlbmQuICovCisJfQorCXsKKwkgbXZueglyMjQsIHIyMywgcjI1ICAgIC8qIFVzZSBhdG9taWNfdXBkYXRlIHZhbHVlIGlmIGFwcHJvcHJpYXRlLiAqLworCSBiYm5zICAgcjIyLCAuTGNtcHhjaGczMl9taXNtYXRjaAorCX0KKwlzdyAgICAgIHIwLCByMjQKKworCS8qIERvIHNsb3cgbXRzcHIgaGVyZSBzbyB0aGUgZm9sbG93aW5nICJtZiIgd2FpdHMgbGVzcy4gKi8KKwl7CisJIG1vdmUgICBzcCwgcjI3CisJIG10c3ByICBFWF9DT05URVhUXzFfMCwgcjI4CisJfQorCW1mCisKKwkvKiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9uIGlzIHRoZSBzdGFydCBvZiB0aGUgc2Vjb25kIGNhY2hlIGxpbmUuICovCisJeworCSBtb3ZlICAgcjAsIHIyMQorCSBzdyAgICAgQVRPTUlDX0xPQ0tfUkVHX05BTUUsIHplcm8KKwl9CisJaXJldAorCisJLyogRHVwbGljYXRlZCBjb2RlIGhlcmUgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgZG9uJ3Qgb3ZlcmxhcCAibWYiICovCisuTGNtcHhjaGczMl9taXNtYXRjaDoKKwl7CisJIG1vdmUgICByMCwgcjIxCisJIHN3ICAgICBBVE9NSUNfTE9DS19SRUdfTkFNRSwgemVybworCX0KKwl7CisJIG1vdmUgICBzcCwgcjI3CisJIG10c3ByICBFWF9DT05URVhUXzFfMCwgcjI4CisJfQorCWlyZXQKKworCS8qCisJICogVGhlIGxvY2tpbmcgY29kZSBpcyB0aGUgc2FtZSBmb3IgMzItYml0IGNtcHhjaGcvYXRvbWljX3VwZGF0ZSwKKwkgKiBhbmQgZm9yIDY0LWJpdCBjbXB4Y2hnLiAgV2UgcHJvdmlkZSBpdCBhcyBhIG1hY3JvIGFuZCBwdXQKKwkgKiBpdCBpbnRvIGJvdGggdmVyc2lvbnMuICBXZSBjYW4ndCBzaGFyZSB0aGUgY29kZSBsaXRlcmFsbHkKKwkgKiBzaW5jZSBpdCBkZXBlbmRzIG9uIGhhdmluZyB0aGUgcmlnaHQgYnJhbmNoLWJhY2sgYWRkcmVzcy4KKwkgKiBOb3RlIHRoYXQgdGhlIGZpcnN0IGZldyBpbnN0cnVjdGlvbnMgc2hvdWxkIHNoYXJlIHRoZSBjYWNoZQorCSAqIGxpbmUgd2l0aCB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGFjdHVhbCBsb2NrZWQgY29kZS4KKwkgKi8KKwkubWFjcm8gIGNtcHhjaGdfbG9jaywgYml0d2lkdGgKKworCS8qIExvY2s7IGlmIHdlIHN1Y2NlZWQsIGp1bXAgYmFjayB1cCB0byB0aGUgcmVhZC1tb2RpZnktd3JpdGUuICovCisjaWZkZWYgQ09ORklHX1NNUAorCXRucyAgICAgcjIxLCBBVE9NSUNfTE9DS19SRUdfTkFNRQorI2Vsc2UKKwkvKgorCSAqIE5vbi1TTVAgcHJlc2VydmVzIGFsbCB0aGUgbG9jayBpbmZyYXN0cnVjdHVyZSwgdG8ga2VlcCB0aGUKKwkgKiBjb2RlIHNpbXBsZXIgZm9yIHRoZSBpbnRlcmVzdGluZyAoU01QKSBjYXNlLiAgSG93ZXZlciwgd2UgZG8KKwkgKiBvbmUgc21hbGwgb3B0aW1pemF0aW9uIGhlcmUgYW5kIGluIGF0b21pY19hc20uUywgd2hpY2ggaXMKKwkgKiB0byBmYWtlIG91dCBhY3F1aXJpbmcgdGhlIGFjdHVhbCBsb2NrIGluIHRoZSBhdG9taWNfbG9jayB0YWJsZS4KKwkgKi8KKwltb3ZlaQlyMjEsIDAKKyNlbmRpZgorCisJLyogSXNzdWUgdGhlIHNsb3cgU1BSIGhlcmUgd2hpbGUgdGhlIHRucyByZXN1bHQgaXMgaW4gZmxpZ2h0LiAqLworCW1mc3ByICAgcjI4LCBFWF9DT05URVhUXzFfMAorCisJeworCSBhZGRpICAgcjI4LCByMjgsIDggICAgLyogcmV0dXJuIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgc3dpbnQxICovCisJIGJ6dCAgICByMjEsIC5MZG9fY21weGNoZ1xiaXR3aWR0aAorCX0KKwkvKgorCSAqIFRoZSBwcmVjZWRpbmcgaW5zdHJ1Y3Rpb24gaXMgdGhlIGxhc3QgdGhpbmcgdGhhdCBtdXN0IGJlCisJICogb24gdGhlIHNlY29uZCBjYWNoZSBsaW5lLgorCSAqLworCisjaWZkZWYgQ09ORklHX1NNUAorCS8qCisJICogV2UgZmFpbGVkIHRvIGFjcXVpcmUgdGhlIHRucyBsb2NrIG9uIG91ciBmaXJzdCB0cnkuICBOb3cgdXNlCisJICogYm91bmRlZCBleHBvbmVudGlhbCBiYWNrb2ZmIHRvIHJldHJ5LCBsaWtlIF9fYXRvbWljX3NwaW5sb2NrKCkuCisJICovCisJeworCSBtb3ZlbGkgcjIzLCAyMDQ4ICAgICAgIC8qIG1heGltdW0gYmFja29mZiB0aW1lIGluIGN5Y2xlcyAqLworCSBtb3ZlbGkgcjI1LCAzMiAgICAgICAgIC8qIHN0YXJ0aW5nIGJhY2tvZmYgdGltZSBpbiBjeWNsZXMgKi8KKwl9CisxOgltZnNwciAgIHIyNiwgQ1lDTEVfTE9XICAvKiBnZXQgc3RhcnQgcG9pbnQgZm9yIHRoaXMgYmFja29mZiAqLworMjoJbWZzcHIgICByMjIsIENZQ0xFX0xPVyAgLyogdGVzdCB0byBzZWUgaWYgd2UndmUgYmFja2VkIG9mZiBlbm91Z2ggKi8KKwlzdWIgICAgIHIyMiwgcjIyLCByMjYKKwlzbHQgICAgIHIyMiwgcjIyLCByMjUKKwliYnN0ICAgIHIyMiwgMmIKKwl7CisJIHNobGkgICByMjUsIHIyNSwgMSAgICAgLyogZG91YmxlIHRoZSBiYWNrb2ZmOyByZXRyeSB0aGUgdG5zICovCisJIHRucyAgICByMjEsIEFUT01JQ19MT0NLX1JFR19OQU1FCisJfQorCXNsdCAgICAgcjI2LCByMjMsIHIyNSAgIC8qIGlzIHRoZSBwcm9wb3NlZCBiYWNrb2ZmIHRvbyBiaWc/ICovCisJeworCSBtdm56ICAgcjI1LCByMjYsIHIyMworCSBienQgICAgcjIxLCAuTGRvX2NtcHhjaGdcYml0d2lkdGgKKwl9CisJaiAgICAgICAxYgorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwkuZW5kbQorCisuTGNtcHhjaGczMl90bnM6CisJY21weGNoZ19sb2NrIDMyCisKKwkvKgorCSAqIFRoaXMgY29kZSBpcyBpbnZva2VkIGZyb20gc3lzX2NtcHhjaGcgYWZ0ZXIgbW9zdCBvZiB0aGUKKwkgKiBwcmVjb25kaXRpb25zIGhhdmUgYmVlbiBjaGVja2VkLiAgV2Ugc3RpbGwgbmVlZCB0byBjaGVjaworCSAqIHRoYXQgcjAgaXMgOC1ieXRlIGFsaWduZWQsIHNpbmNlIGlmIGl0J3Mgbm90IHdlIHdvbid0CisJICogYWN0dWFsbHkgYmUgYXRvbWljLiAgSG93ZXZlciwgQVRPTUlDX0xPQ0tfUkVHIGhhcyB0aGUgYXRvbWljCisJICogbG9jayBwb2ludGVyIGFuZCByMjcvcjI4IGhhdmUgdGhlIHNhdmVkIFNQL1BDLgorCSAqIHIyMyBpcyBob2xkaW5nICJyMCAmIDciIHNvIHdlIGNhbiB0ZXN0IGZvciBhbGlnbm1lbnQuCisJICogVGhlIGNvbXBhcmUgdmFsdWUgaXMgaW4gcjIvcjM7IHRoZSBuZXcgdmFsdWUgaXMgaW4gcjQvcjUuCisJICogT24gcmV0dXJuLCB3ZSBtdXN0IHB1dCB0aGUgb2xkIHZhbHVlIGluIHIwL3IxLgorCSAqLworCS5hbGlnbiA2NAorLkxjbXB4Y2hnNjQ6CisJeworI2lmIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQorCSBzMmEJQVRPTUlDX0xPQ0tfUkVHX05BTUUsIHIyNSwgcjIxCisjZW5kaWYKKwkgYnp0ICAgICByMjMsIC5MY21weGNoZzY0X3RucworCX0KKwlqICAgICAgIC5MY21weGNoZ19iYWRhZGRyCisKKy5MZG9fY21weGNoZzY0OgorCXsKKwkgbHcgICAgIHIyMSwgcjAKKwkgYWRkaSAgIHIyNSwgcjAsIDQKKwl9CisJeworCSBsdyAgICAgcjEsIHIyNQorCX0KKwlzZXEgICAgIHIyNiwgcjIxLCByMgorCXsKKwkgYnogICAgIHIyNiwgLkxjbXB4Y2hnNjRfbWlzbWF0Y2gKKwkgc2VxICAgIHIyNiwgcjEsIHIzCisJfQorCXsKKwkgYnogICAgIHIyNiwgLkxjbXB4Y2hnNjRfbWlzbWF0Y2gKKwl9CisJc3cgICAgICByMCwgcjQKKwlzdyAgICAgIHIyNSwgcjUKKworCS8qCisJICogVGhlIDMyLWJpdCBwYXRoIHByb3ZpZGVzIG9wdGltaXplZCAibWF0Y2giIGFuZCAibWlzbWF0Y2giCisJICogaXJldCBwYXRocywgYnV0IHdlIGRvbid0IGhhdmUgZW5vdWdoIGJ1bmRsZXMgaW4gdGhpcyBjYWNoZSBsaW5lCisJICogdG8gZG8gdGhhdCwgc28gd2UganVzdCBtYWtlIGV2ZW4gdGhlICJtaXNtYXRjaCIgcGF0aCBkbyBhbiAibWYiLgorCSAqLworLkxjbXB4Y2hnNjRfbWlzbWF0Y2g6CisJeworCSBtb3ZlICAgc3AsIHIyNworCSBtdHNwciAgRVhfQ09OVEVYVF8xXzAsIHIyOAorCX0KKwltZgorCXsKKwkgbW92ZSAgIHIwLCByMjEKKwkgc3cgICAgIEFUT01JQ19MT0NLX1JFR19OQU1FLCB6ZXJvCisJfQorCWlyZXQKKworLkxjbXB4Y2hnNjRfdG5zOgorCWNtcHhjaGdfbG9jayA2NAorCisKKwkvKgorCSAqIFJlc2V0IHNwIGFuZCByZXZlY3RvciB0byBzeXNfY21weGNoZ19iYWRhZGRyKCksIHdoaWNoIHdpbGwKKwkgKiBqdXN0IHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBzaWduYWwgYW5kIGV4aXQuICBEb2luZyBpdCB0aGlzCisJICogd2F5IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZHVwbGljYXRlIHRoZSBjb2RlIGluIGludHZlYy5TJ3MKKwkgKiBpbnRfaGFuZCBtYWNybyB0aGF0IGxvY2F0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisJICovCisuTGNtcHhjaGdfYmFkYWRkcjoKKwl7CisJIG1vdmVsaSBUUkVHX1NZU0NBTExfTlJfTkFNRSwgX19OUl9jbXB4Y2hnX2JhZGFkZHIKKwkgbW92ZSAgIHNwLCByMjcKKwl9CisJaiAgICAgICBpbnR2ZWNfU1dJTlRfMQorCUVORFBST0Moc3lzX2NtcHhjaGcpCisJRU5UUlkoX19zeXNfY21weGNoZ19lbmQpCisKKworLyogVGhlIHNpbmdsZS1zdGVwIHN1cHBvcnQgbWF5IG5lZWQgdG8gcmVhZCBhbGwgdGhlIHJlZ2lzdGVycy4gKi8KK2ludF91bmFsaWduOgorCXB1c2hfZXh0cmFfY2FsbGVlX3NhdmVzIHIwCisJaiAgICAgICBkb190cmFwCisKKy8qIEluY2x1ZGUgLmludHJwdDEgYXJyYXkgb2YgaW50ZXJydXB0IHZlY3RvcnMgKi8KKwkuc2VjdGlvbiAiLmludHJwdDEiLCAiYXgiCisKKyNkZWZpbmUgb3BfaGFuZGxlX3BlcmZfaW50ZXJydXB0IGJhZF9pbnRyCisjZGVmaW5lIG9wX2hhbmRsZV9hdXhfcGVyZl9pbnRlcnJ1cHQgYmFkX2ludHIKKworI2lmbmRlZiBDT05GSUdfSEFSRFdBTEwKKyNkZWZpbmUgZG9faGFyZHdhbGxfdHJhcCBiYWRfaW50cgorI2VuZGlmCisKKwlpbnRfaGFuZCAgICAgSU5UX0lUTEJfTUlTUywgSVRMQl9NSVNTLCBcCisJCSAgICAgZG9fcGFnZV9mYXVsdCwgaGFuZGxlX2ludGVycnVwdF9ub19zaW5nbGVfc3RlcAorCWludF9oYW5kICAgICBJTlRfTUVNX0VSUk9SLCBNRU1fRVJST1IsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9JTEwsIElMTCwgZG9fdHJhcCwgaGFuZGxlX2lsbAorCWludF9oYW5kICAgICBJTlRfR1BWLCBHUFYsIGRvX3RyYXAKKwlpbnRfaGFuZCAgICAgSU5UX1NOX0FDQ0VTUywgU05fQUNDRVNTLCBkb190cmFwCisJaW50X2hhbmQgICAgIElOVF9JRE5fQUNDRVNTLCBJRE5fQUNDRVNTLCBkb190cmFwCisJaW50X2hhbmQgICAgIElOVF9VRE5fQUNDRVNTLCBVRE5fQUNDRVNTLCBkb190cmFwCisJaW50X2hhbmQgICAgIElOVF9JRE5fUkVGSUxMLCBJRE5fUkVGSUxMLCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfVUROX1JFRklMTCwgVUROX1JFRklMTCwgYmFkX2ludHIKKwlpbnRfaGFuZCAgICAgSU5UX0lETl9DT01QTEVURSwgSUROX0NPTVBMRVRFLCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfVUROX0NPTVBMRVRFLCBVRE5fQ09NUExFVEUsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9TV0lOVF8zLCBTV0lOVF8zLCBkb190cmFwCisJaW50X2hhbmQgICAgIElOVF9TV0lOVF8yLCBTV0lOVF8yLCBkb190cmFwCisJaW50X2hhbmQgICAgIElOVF9TV0lOVF8xLCBTV0lOVF8xLCBTWVNDQUxMLCBoYW5kbGVfc3lzY2FsbAorCWludF9oYW5kICAgICBJTlRfU1dJTlRfMCwgU1dJTlRfMCwgZG9fdHJhcAorCWludF9oYW5kICAgICBJTlRfVU5BTElHTl9EQVRBLCBVTkFMSUdOX0RBVEEsIGludF91bmFsaWduCisJaW50X2hhbmQgICAgIElOVF9EVExCX01JU1MsIERUTEJfTUlTUywgZG9fcGFnZV9mYXVsdAorCWludF9oYW5kICAgICBJTlRfRFRMQl9BQ0NFU1MsIERUTEJfQUNDRVNTLCBkb19wYWdlX2ZhdWx0CisJaW50X2hhbmQgICAgIElOVF9ETUFUTEJfTUlTUywgRE1BVExCX01JU1MsIGRvX3BhZ2VfZmF1bHQKKwlpbnRfaGFuZCAgICAgSU5UX0RNQVRMQl9BQ0NFU1MsIERNQVRMQl9BQ0NFU1MsIGRvX3BhZ2VfZmF1bHQKKwlpbnRfaGFuZCAgICAgSU5UX1NOSVRMQl9NSVNTLCBTTklUTEJfTUlTUywgZG9fcGFnZV9mYXVsdAorCWludF9oYW5kICAgICBJTlRfU05fTk9USUZZLCBTTl9OT1RJRlksIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9TTl9GSVJFV0FMTCwgU05fRklSRVdBTEwsIGRvX2hhcmR3YWxsX3RyYXAKKwlpbnRfaGFuZCAgICAgSU5UX0lETl9GSVJFV0FMTCwgSUROX0ZJUkVXQUxMLCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfVUROX0ZJUkVXQUxMLCBVRE5fRklSRVdBTEwsIGRvX2hhcmR3YWxsX3RyYXAKKwlpbnRfaGFuZCAgICAgSU5UX1RJTEVfVElNRVIsIFRJTEVfVElNRVIsIGRvX3RpbWVyX2ludGVycnVwdAorCWludF9oYW5kICAgICBJTlRfSUROX1RJTUVSLCBJRE5fVElNRVIsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9VRE5fVElNRVIsIFVETl9USU1FUiwgYmFkX2ludHIKKwlpbnRfaGFuZCAgICAgSU5UX0RNQV9OT1RJRlksIERNQV9OT1RJRlksIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9JRE5fQ0EsIElETl9DQSwgYmFkX2ludHIKKwlpbnRfaGFuZCAgICAgSU5UX1VETl9DQSwgVUROX0NBLCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfSUROX0FWQUlMLCBJRE5fQVZBSUwsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9VRE5fQVZBSUwsIFVETl9BVkFJTCwgYmFkX2ludHIKKwlpbnRfaGFuZCAgICAgSU5UX1BFUkZfQ09VTlQsIFBFUkZfQ09VTlQsIFwKKwkJICAgICBvcF9oYW5kbGVfcGVyZl9pbnRlcnJ1cHQsIGhhbmRsZV9ubWkKKwlpbnRfaGFuZCAgICAgSU5UX0lOVENUUkxfMywgSU5UQ1RSTF8zLCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfSU5UQ1RSTF8yLCBJTlRDVFJMXzIsIGJhZF9pbnRyCisJZGNfZGlzcGF0Y2ggIElOVF9JTlRDVFJMXzEsIElOVENUUkxfMQorCWludF9oYW5kICAgICBJTlRfSU5UQ1RSTF8wLCBJTlRDVFJMXzAsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9NRVNTQUdFX1JDVl9EV05DTCwgTUVTU0FHRV9SQ1ZfRFdOQ0wsIFwKKwkJICAgICBodl9tZXNzYWdlX2ludHIsIGhhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGwKKwlpbnRfaGFuZCAgICAgSU5UX0RFVl9JTlRSX0RXTkNMLCBERVZfSU5UUl9EV05DTCwgXAorCQkgICAgIHRpbGVfZGV2X2ludHIsIGhhbmRsZV9pbnRlcnJ1cHRfZG93bmNhbGwKKwlpbnRfaGFuZCAgICAgSU5UX0lfQVNJRCwgSV9BU0lELCBiYWRfaW50cgorCWludF9oYW5kICAgICBJTlRfRF9BU0lELCBEX0FTSUQsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9ETUFUTEJfTUlTU19EV05DTCwgRE1BVExCX01JU1NfRFdOQ0wsIFwKKwkJICAgICBkb19wYWdlX2ZhdWx0LCBoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsCisJaW50X2hhbmQgICAgIElOVF9TTklUTEJfTUlTU19EV05DTCwgU05JVExCX01JU1NfRFdOQ0wsIFwKKwkJICAgICBkb19wYWdlX2ZhdWx0LCBoYW5kbGVfaW50ZXJydXB0X2Rvd25jYWxsCisJaW50X2hhbmQgICAgIElOVF9ETUFUTEJfQUNDRVNTX0RXTkNMLCBETUFUTEJfQUNDRVNTX0RXTkNMLCBcCisJCSAgICAgZG9fcGFnZV9mYXVsdCwgaGFuZGxlX2ludGVycnVwdF9kb3duY2FsbAorCWludF9oYW5kICAgICBJTlRfU05fQ1BMLCBTTl9DUEwsIGJhZF9pbnRyCisJaW50X2hhbmQgICAgIElOVF9ET1VCTEVfRkFVTFQsIERPVUJMRV9GQVVMVCwgZG9fdHJhcAorI2lmIENISVBfSEFTX0FVWF9QRVJGX0NPVU5URVJTKCkKKwlpbnRfaGFuZCAgICAgSU5UX0FVWF9QRVJGX0NPVU5ULCBBVVhfUEVSRl9DT1VOVCwgXAorCQkgICAgIG9wX2hhbmRsZV9hdXhfcGVyZl9pbnRlcnJ1cHQsIGhhbmRsZV9ubWkKKyNlbmRpZgorCisJLyogU3ludGhldGljIGludGVycnVwdCBkZWxpdmVyZWQgb25seSBieSB0aGUgc2ltdWxhdG9yICovCisJaW50X2hhbmQgICAgIElOVF9CUkVBS1BPSU5ULCBCUkVBS1BPSU5ULCBkb19icmVha3BvaW50CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL2lycS5jIGIvYXJjaC90aWxlL2tlcm5lbC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTZjNjAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9pcnEuYwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxodi9kcnZfcGNpZV9yY19pbnRmLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKy8qIEJpdC1mbGFnIHN0b3JlZCBpbiBpcnFfZGVzYy0+Y2hpcF9kYXRhIHRvIGluZGljYXRlIEhXLWNsZWFyZWQgaXJxcy4gKi8KKyNkZWZpbmUgSVNfSFdfQ0xFQVJFRCAxCisKKy8qCisgKiBUaGUgc2V0IG9mIGludGVycnVwdHMgd2UgZW5hYmxlIGZvciByYXdfbG9jYWxfaXJxX2VuYWJsZSgpLgorICogVGhpcyBpcyBpbml0aWFsaXplZCB0byBoYXZlIGp1c3QgYSBzaW5nbGUgaW50ZXJydXB0IHRoYXQgdGhlIGtlcm5lbAorICogZG9lc24ndCBhY3R1YWxseSB1c2UgYXMgYSBzZW50aW5lbC4gIER1cmluZyBrZXJuZWwgaW5pdCwKKyAqIGludGVycnVwdHMgYXJlIGFkZGVkIGFzIHRoZSBrZXJuZWwgZ2V0cyBwcmVwYXJlZCB0byBzdXBwb3J0IHRoZW0uCisgKiBOT1RFOiB3ZSBjb3VsZCBwcm9iYWJseSBpbml0aWFsaXplIHRoZW0gYWxsIHN0YXRpY2FsbHkgdXAgZnJvbnQuCisgKi8KK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcgbG9uZywgaW50ZXJydXB0c19lbmFibGVkX21hc2spID0KKyAgSU5JVElBTF9JTlRFUlJVUFRTX0VOQUJMRUQ7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woaW50ZXJydXB0c19lbmFibGVkX21hc2spOworCisvKiBEZWZpbmUgcGVyLXRpbGUgZGV2aWNlIGludGVycnVwdCBzdGF0aXN0aWNzIHN0YXRlLiAqLworREVGSU5FX1BFUl9DUFUoaXJxX2NwdXN0YXRfdCwgaXJxX3N0YXQpIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woaXJxX3N0YXQpOworCisvKgorICogRGVmaW5lIHBlci10aWxlIGlycSBkaXNhYmxlIG1hc2s7IHRoZSBoYXJkd2FyZS9IViBvbmx5IGhhcyBhIHNpbmdsZQorICogbWFzayB0aGF0IHdlIHVzZSB0byBpbXBsZW1lbnQgYm90aCBtYXNraW5nIGFuZCBkaXNhYmxpbmcuCisgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBpcnFfZGlzYWJsZV9tYXNrKQorCV9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CisKKy8qCisgKiBQZXItdGlsZSBJUlEgbmVzdGluZyBkZXB0aC4gIFVzZWQgdG8gbWFrZSBzdXJlIHdlIGVuYWJsZSBuZXdseQorICogZW5hYmxlZCBJUlFzIGJlZm9yZSBleGl0aW5nIHRoZSBvdXRlcm1vc3QgaW50ZXJydXB0LgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBpcnFfZGVwdGgpOworCisvKiBTdGF0ZSBmb3IgYWxsb2NhdGluZyBJUlFzIG9uIEd4LiAqLworI2lmIENISVBfSEFTX0lQSSgpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhdmFpbGFibGVfaXJxcyA9IH4oMVVMIDw8IElSUV9SRVNDSEVEVUxFKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXZhaWxhYmxlX2lycXNfbG9jayk7CisjZW5kaWYKKworI2lmIENISVBfSEFTX0lQSSgpCisvKiBVc2UgU1BScyB0byBtYW5pcHVsYXRlIGRldmljZSBpbnRlcnJ1cHRzLiAqLworI2RlZmluZSBtYXNrX2lycXMoaXJxX21hc2spIF9faW5zbl9tdHNwcihTUFJfSVBJX01BU0tfU0VUXzEsIGlycV9tYXNrKQorI2RlZmluZSB1bm1hc2tfaXJxcyhpcnFfbWFzaykgX19pbnNuX210c3ByKFNQUl9JUElfTUFTS19SRVNFVF8xLCBpcnFfbWFzaykKKyNkZWZpbmUgY2xlYXJfaXJxcyhpcnFfbWFzaykgX19pbnNuX210c3ByKFNQUl9JUElfRVZFTlRfUkVTRVRfMSwgaXJxX21hc2spCisjZWxzZQorLyogVXNlIEhWIHRvIG1hbmlwdWxhdGUgZGV2aWNlIGludGVycnVwdHMuICovCisjZGVmaW5lIG1hc2tfaXJxcyhpcnFfbWFzaykgaHZfZGlzYWJsZV9pbnRyKGlycV9tYXNrKQorI2RlZmluZSB1bm1hc2tfaXJxcyhpcnFfbWFzaykgaHZfZW5hYmxlX2ludHIoaXJxX21hc2spCisjZGVmaW5lIGNsZWFyX2lycXMoaXJxX21hc2spIGh2X2NsZWFyX2ludHIoaXJxX21hc2spCisjZW5kaWYKKworLyoKKyAqIFRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcGF0aCwgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgSFYgaW50ZXJydXB0CisgKiBlbXVsYXRpb24gb24gVElMRTY0IGFuZCBUSUxFUHJvLCBhbmQgSVBJIGhhcmR3YXJlIG9uIFRJTEUtR3guCisgKi8KK3ZvaWQgdGlsZV9kZXZfaW50cihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGludG51bSkKK3sKKwlpbnQgZGVwdGggPSBfX2dldF9jcHVfdmFyKGlycV9kZXB0aCkrKzsKKwl1bnNpZ25lZCBsb25nIG9yaWdpbmFsX2lycXM7CisJdW5zaWduZWQgbG9uZyByZW1haW5pbmdfaXJxczsKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CisKKyNpZiBDSElQX0hBU19JUEkoKQorCS8qCisJICogUGVuZGluZyBpbnRlcnJ1cHRzIGFyZSBsaXN0ZWQgaW4gYW4gU1BSLiAgV2UgbWlnaHQgYmUKKwkgKiBuZXN0ZWQsIHNvIGJlIHN1cmUgdG8gb25seSBoYW5kbGUgaXJxcyB0aGF0IHdlcmVuJ3QgYWxyZWFkeQorCSAqIG1hc2tlZCBieSBhIHByZXZpb3VzIGludGVycnVwdC4gIFRoZW4sIG1hc2sgb3V0IHRoZSBvbmVzCisJICogd2UncmUgZ29pbmcgdG8gaGFuZGxlLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbWFza2VkID0gX19pbnNuX21mc3ByKFNQUl9JUElfTUFTS18xKTsKKwlvcmlnaW5hbF9pcnFzID0gX19pbnNuX21mc3ByKFNQUl9JUElfRVZFTlRfMSkgJiB+bWFza2VkOworCV9faW5zbl9tdHNwcihTUFJfSVBJX01BU0tfU0VUXzEsIG9yaWdpbmFsX2lycXMpOworI2Vsc2UKKwkvKgorCSAqIEh5cGVydmlzb3IgcGVyZm9ybXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIEd4IGNvZGUgYWJvdmUgYW5kCisJICogdGhlbiBwdXRzIHRoZSBwZW5kaW5nIGludGVycnVwdCBtYXNrIGludG8gYSBzeXN0ZW0gc2F2ZSByZWcKKwkgKiBmb3IgdXMgdG8gZmluZC4KKwkgKi8KKwlvcmlnaW5hbF9pcnFzID0gX19pbnNuX21mc3ByKFNQUl9TWVNURU1fU0FWRV8xXzMpOworI2VuZGlmCisJcmVtYWluaW5nX2lycXMgPSBvcmlnaW5hbF9pcnFzOworCisJLyogVHJhY2sgdGltZSBzcGVudCBoZXJlIGluIGFuIGludGVycnVwdCBjb250ZXh0LiAqLworCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCWlycV9lbnRlcigpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKKwkvKiBEZWJ1Z2dpbmcgY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93OiBsZXNzIHRoYW4gMS84dGggc3RhY2sgZnJlZT8gKi8KKwl7CisJCWxvbmcgc3AgPSBzdGFja19wb2ludGVyIC0gKGxvbmcpIGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaWYgKHVubGlrZWx5KHNwIDwgKHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pICsgU1RBQ0tfV0FSTikpKSB7CisJCQlwcl9lbWVyZygidGlsZV9kZXZfaW50cjogIgorCQkJICAgICAgICJzdGFjayBvdmVyZmxvdzogJWxkXG4iLAorCQkJICAgICAgIHNwIC0gc2l6ZW9mKHN0cnVjdCB0aHJlYWRfaW5mbykpOworCQkJZHVtcF9zdGFjaygpOworCQl9CisJfQorI2VuZGlmCisJd2hpbGUgKHJlbWFpbmluZ19pcnFzKSB7CisJCXVuc2lnbmVkIGxvbmcgaXJxID0gX19mZnMocmVtYWluaW5nX2lycXMpOworCQlyZW1haW5pbmdfaXJxcyAmPSB+KDFVTCA8PCBpcnEpOworCisJCS8qIENvdW50IGRldmljZSBpcnFzOyBMaW51eCBJUElzIGFyZSBjb3VudGVkIGVsc2V3aGVyZS4gKi8KKwkJaWYgKGlycSAhPSBJUlFfUkVTQ0hFRFVMRSkKKwkJCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9kZXZfaW50cl9jb3VudCsrOworCisJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCX0KKworCS8qCisJICogSWYgd2Ugd2VyZW4ndCBuZXN0ZWQsIHR1cm4gb24gYWxsIGVuYWJsZWQgaW50ZXJydXB0cywKKwkgKiBpbmNsdWRpbmcgYW55IHRoYXQgd2VyZSByZWVuYWJsZWQgZHVyaW5nIGludGVycnVwdAorCSAqIGhhbmRsaW5nLgorCSAqLworCWlmIChkZXB0aCA9PSAwKQorCQl1bm1hc2tfaXJxcyh+X19nZXRfY3B1X3ZhcihpcnFfZGlzYWJsZV9tYXNrKSk7CisKKwlfX2dldF9jcHVfdmFyKGlycV9kZXB0aCktLTsKKworCS8qCisJICogVHJhY2sgdGltZSBzcGVudCBhZ2FpbnN0IHRoZSBjdXJyZW50IHByb2Nlc3MgYWdhaW4gYW5kCisJICogcHJvY2VzcyBhbnkgc29mdGlycXMgaWYgdGhleSBhcmUgd2FpdGluZy4KKwkgKi8KKwlpcnFfZXhpdCgpOworCXNldF9pcnFfcmVncyhvbGRfcmVncyk7Cit9CisKKworLyoKKyAqIFJlbW92ZSBhbiBpcnEgZnJvbSB0aGUgZGlzYWJsZWQgbWFzay4gIElmIHdlJ3JlIGluIGFuIGludGVycnVwdAorICogY29udGV4dCwgZGVmZXIgZW5hYmxpbmcgdGhlIEhXIGludGVycnVwdCB1bnRpbCB3ZSBsZWF2ZS4KKyAqLwordm9pZCBlbmFibGVfcGVyY3B1X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWdldF9jcHVfdmFyKGlycV9kaXNhYmxlX21hc2spICY9IH4oMVVMIDw8IGlycSk7CisJaWYgKF9fZ2V0X2NwdV92YXIoaXJxX2RlcHRoKSA9PSAwKQorCQl1bm1hc2tfaXJxcygxVUwgPDwgaXJxKTsKKwlwdXRfY3B1X3ZhcihpcnFfZGlzYWJsZV9tYXNrKTsKK30KK0VYUE9SVF9TWU1CT0woZW5hYmxlX3BlcmNwdV9pcnEpOworCisvKgorICogQWRkIGFuIGlycSB0byB0aGUgZGlzYWJsZWQgbWFzay4gIFdlIGRpc2FibGUgdGhlIEhXIGludGVycnVwdAorICogaW1tZWRpYXRlbHkgc28gdGhhdCB0aGVyZSdzIG5vIHBvc3NpYmlsaXR5IG9mIGl0IGZpcmluZy4gIElmIHdlJ3JlCisgKiBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCwgdGhlIHJldHVybiBwYXRoIGlzIGNhcmVmdWwgdG8gYXZvaWQKKyAqIHVubWFza2luZyBhIG5ld2x5IGRpc2FibGVkIGludGVycnVwdC4KKyAqLwordm9pZCBkaXNhYmxlX3BlcmNwdV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlnZXRfY3B1X3ZhcihpcnFfZGlzYWJsZV9tYXNrKSB8PSAoMVVMIDw8IGlycSk7CisJbWFza19pcnFzKDFVTCA8PCBpcnEpOworCXB1dF9jcHVfdmFyKGlycV9kaXNhYmxlX21hc2spOworfQorRVhQT1JUX1NZTUJPTChkaXNhYmxlX3BlcmNwdV9pcnEpOworCisvKiBNYXNrIGFuIGludGVycnVwdC4gKi8KK3N0YXRpYyB2b2lkIHRpbGVfaXJxX2NoaXBfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCW1hc2tfaXJxcygxVUwgPDwgaXJxKTsKK30KKworLyogVW5tYXNrIGFuIGludGVycnVwdC4gKi8KK3N0YXRpYyB2b2lkIHRpbGVfaXJxX2NoaXBfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5tYXNrX2lycXMoMVVMIDw8IGlycSk7Cit9CisKKy8qCisgKiBDbGVhciBhbiBpbnRlcnJ1cHQgYmVmb3JlIHByb2Nlc3NpbmcgaXQgc28gdGhhdCBhbnkgbmV3IGFzc2VydGlvbnMKKyAqIHdpbGwgdHJpZ2dlciBhbm90aGVyIGlycS4KKyAqLworc3RhdGljIHZvaWQgdGlsZV9pcnFfY2hpcF9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoKHVuc2lnbmVkIGxvbmcpZ2V0X2lycV9jaGlwX2RhdGEoaXJxKSAhPSBJU19IV19DTEVBUkVEKQorCQljbGVhcl9pcnFzKDFVTCA8PCBpcnEpOworfQorCisvKgorICogRm9yIHBlci1jcHUgaW50ZXJydXB0cywgd2UgbmVlZCB0byBhdm9pZCB1bm1hc2tpbmcgYW55IGludGVycnVwdHMKKyAqIHRoYXQgd2UgZGlzYWJsZWQgdmlhIGRpc2FibGVfcGVyY3B1X2lycSgpLgorICovCitzdGF0aWMgdm9pZCB0aWxlX2lycV9jaGlwX2VvaSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKF9fZ2V0X2NwdV92YXIoaXJxX2Rpc2FibGVfbWFzaykgJiAoMVVMIDw8IGlycSkpKQorCQl1bm1hc2tfaXJxcygxVUwgPDwgaXJxKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0aWxlX2lycV9jaGlwID0geworCS50eXBlbmFtZSA9ICJ0aWxlX2lycV9jaGlwIiwKKwkuYWNrID0gdGlsZV9pcnFfY2hpcF9hY2ssCisJLmVvaSA9IHRpbGVfaXJxX2NoaXBfZW9pLAorCS5tYXNrID0gdGlsZV9pcnFfY2hpcF9tYXNrLAorCS51bm1hc2sgPSB0aWxlX2lycV9jaGlwX3VubWFzaywKK307CisKK3ZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCit7CisJaXBpX2luaXQoKTsKK30KKwordm9pZCBfX2NwdWluaXQgc2V0dXBfaXJxX3JlZ3Modm9pZCkKK3sKKwkvKiBFbmFibGUgaW50ZXJydXB0IGRlbGl2ZXJ5LiAqLworCXVubWFza19pcnFzKH4wVUwpOworI2lmIENISVBfSEFTX0lQSSgpCisJcmF3X2xvY2FsX2lycV91bm1hc2soSU5UX0lQSV8xKTsKKyNlbmRpZgorfQorCit2b2lkIHRpbGVfaXJxX2FjdGl2YXRlKHVuc2lnbmVkIGludCBpcnEsIGludCB0aWxlX2lycV90eXBlKQoreworCS8qCisJICogV2UgdXNlIGhhbmRsZV9sZXZlbF9pcnEoKSBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIHBlbmRpbmcKKwkgKiBpbnRlcnJ1cHQgdmVjdG9yICh3aGV0aGVyIG1vZGVsZWQgYnkgdGhlIEhWIG9uIFRJTEU2NCBhbmQKKwkgKiBUSUxFUHJvIG9yIGltcGxlbWVudGVkIGluIGhhcmR3YXJlIG9uIFRJTEUtR3gpIGhhcworCSAqIGxldmVsLXN0eWxlIHNlbWFudGljcyBmb3IgZWFjaCBiaXQuICBBbiBpbnRlcnJ1cHQgZmlyZXMKKwkgKiB3aGVuZXZlciBhIGJpdCBpcyBoaWdoLCBub3QganVzdCBhdCBlZGdlcy4KKwkgKi8KKwlpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlID0gaGFuZGxlX2xldmVsX2lycTsKKwlpZiAodGlsZV9pcnFfdHlwZSA9PSBUSUxFX0lSUV9QRVJDUFUpCisJCWhhbmRsZSA9IGhhbmRsZV9wZXJjcHVfaXJxOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZ0aWxlX2lycV9jaGlwLCBoYW5kbGUpOworCisJLyoKKwkgKiBGbGFnIGludGVycnVwdHMgdGhhdCBhcmUgaGFyZHdhcmUtY2xlYXJlZCBzbyB0aGF0IGFjaygpCisJICogd29uJ3QgY2xlYXIgdGhlbS4KKwkgKi8KKwlpZiAodGlsZV9pcnFfdHlwZSA9PSBUSUxFX0lSUV9IV19DTEVBUikKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCAodm9pZCAqKUlTX0hXX0NMRUFSRUQpOworfQorRVhQT1JUX1NZTUJPTCh0aWxlX2lycV9hY3RpdmF0ZSk7CisKKwordm9pZCBhY2tfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXByX2VycigidW5leHBlY3RlZCBJUlEgdHJhcCBhdCB2ZWN0b3IgJTAyeFxuIiwgaXJxKTsKK30KKworLyoKKyAqIEdlbmVyaWMsIGNvbnRyb2xsZXItaW5kZXBlbmRlbnQgZnVuY3Rpb25zOgorICovCisKK2ludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQoreworCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpID09IDApIHsKKwkJc2VxX3ByaW50ZihwLCAiICAgICAgICAgICAiKTsKKwkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykKKwkJCWlmIChjcHVfb25saW5lKGopKQorCQkJCXNlcV9wcmludGYocCwgIkNQVSUtOGQiLCBqKTsKKwkJc2VxX3B1dGMocCwgJ1xuJyk7CisJfQorCisJaWYgKGkgPCBOUl9JUlFTKSB7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247CisJCWlmICghYWN0aW9uKQorCQkJZ290byBza2lwOworCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOworI2lmbmRlZiBDT05GSUdfU01QCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CisjZWxzZQorCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKKyNlbmRpZgorCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKKwkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CisKKwkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQorCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CisKKwkJc2VxX3B1dGMocCwgJ1xuJyk7Citza2lwOgorCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIENISVBfSEFTX0lQSSgpCitpbnQgY3JlYXRlX2lycSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJlc3VsdDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdmFpbGFibGVfaXJxc19sb2NrLCBmbGFncyk7CisJaWYgKGF2YWlsYWJsZV9pcnFzID09IDApCisJCXJlc3VsdCA9IC1FTk9NRU07CisJZWxzZSB7CisJCXJlc3VsdCA9IF9fZmZzKGF2YWlsYWJsZV9pcnFzKTsKKwkJYXZhaWxhYmxlX2lycXMgJj0gfigxVUwgPDwgcmVzdWx0KTsKKwkJZHluYW1pY19pcnFfaW5pdChyZXN1bHQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdmFpbGFibGVfaXJxc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChjcmVhdGVfaXJxKTsKKwordm9pZCBkZXN0cm95X2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXZhaWxhYmxlX2lycXNfbG9jaywgZmxhZ3MpOworCWF2YWlsYWJsZV9pcnFzIHw9ICgxVUwgPDwgaXJxKTsKKwlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXZhaWxhYmxlX2lycXNfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChkZXN0cm95X2lycSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC90aWxlL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3YTI2NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJhc2VkIG9uIG1hY2hpbmVfa2V4ZWMuYyBmcm9tIG90aGVyIGFyY2hpdGVjdHVyZXMgaW4gbGludXgtMi42LjE4CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisKKy8qCisgKiBUaGlzIHN0dWZmIGlzIG5vdCBpbiBlbGYuaCBhbmQgaXMgbm90IGluIGFueSBvdGhlciBrZXJuZWwgaW5jbHVkZS4KKyAqIFRoaXMgc3R1ZmYgaXMgbmVlZGVkIGJlbG93IGluIHRoZSBsaXR0bGUgYm9vdCBub3RlcyBwYXJzZXIgdG8KKyAqIGV4dHJhY3QgdGhlIGNvbW1hbmQgbGluZSBzbyB3ZSBjYW4gcGFzcyBpdCB0byB0aGUgaHlwZXJ2aXNvci4KKyAqLworc3RydWN0IEVsZjMyX0JoZHIgeworCUVsZjMyX1dvcmQgYl9zaWduYXR1cmU7CisJRWxmMzJfV29yZCBiX3NpemU7CisJRWxmMzJfSGFsZiBiX2NoZWNrc3VtOworCUVsZjMyX0hhbGYgYl9yZWNvcmRzOworfTsKKyNkZWZpbmUgRUxGX0JPT1RfTUFHSUMJCTB4MEUxRkIwMDcKKyNkZWZpbmUgRUJOX0NPTU1BTkRfTElORQkweDAwMDAwMDA0CisjZGVmaW5lIHJvdW5kdXBzeihYKSAoKChYKSArIDMpICYgfjMpCisKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworCisKK3ZvaWQgbWFjaGluZV9zaHV0ZG93bih2b2lkKQoreworCS8qCisJICogTm9ybWFsbHkgd2Ugd291bGQgc3RvcCBhbGwgdGhlIG90aGVyIHByb2Nlc3NvcnMgaGVyZSwgYnV0CisJICogdGhlIGNoZWNrIGluIG1hY2hpbmVfa2V4ZWNfcHJlcGFyZSBiZWxvdyBlbnN1cmVzIHdlJ2xsIG9ubHkKKwkgKiBnZXQgdGhpcyBmYXIgaWYgd2UndmUgYmVlbiBib290ZWQgd2l0aCAibm9zbXAiIG9uIHRoZQorCSAqIGNvbW1hbmQgbGluZSBvciB3aXRob3V0IENPTkZJR19TTVAgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvCisJICogaGVyZSAoZm9yIG5vdykuCisJICovCit9CisKK3ZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwkvKgorCSAqIENhbm5vdCBoYXBwZW4uICBUaGlzIHR5cGUgb2Yga2V4ZWMgaXMgZGlzYWJsZWQgb24gdGhpcworCSAqIGFyY2hpdGVjdHVyZSAoYW5kIGVuZm9yY2VkIGluIG1hY2hpbmVfa2V4ZWNfcHJlcGFyZSBiZWxvdykuCisJICovCit9CisKKworaW50IG1hY2hpbmVfa2V4ZWNfcHJlcGFyZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSB7CisJCXByX3dhcm5pbmcoIiVzOiBkZXRlY3RlZCBhdHRlbXB0IHRvIGtleGVjICIKKwkJICAgICAgICJ3aXRoIG51bV9vbmxpbmVfY3B1cygpID4gMVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCWlmIChpbWFnZS0+dHlwZSAhPSBLRVhFQ19UWVBFX0RFRkFVTFQpIHsKKwkJcHJfd2FybmluZygiJXM6IGRldGVjdGVkIGF0dGVtcHQgdG8ga2V4ZWMgIgorCQkgICAgICAgIndpdGggdW5zdXBwb3J0ZWQgdHlwZTogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywKKwkJICAgICAgIGltYWdlLT50eXBlKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwkvKgorCSAqIFdlIGRpZCBub3RoaW5nIGluIG1hY2hpbmVfa2V4ZWNfcHJlcGFyZSwKKwkgKiBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8gaGVyZS4KKwkgKi8KK30KKworLyoKKyAqIElmIHdlIGNhbiBmaW5kIGVsZiBib290IG5vdGVzIG9uIHRoaXMgcGFnZSwgcmV0dXJuIHRoZSBjb21tYW5kCisgKiBsaW5lLiAgT3RoZXJ3aXNlLCBzaWxlbnRseSByZXR1cm4gbnVsbC4gIFNvbWV3aGF0IGtsdWRneSwgYnV0IG5vCisgKiBnb29kIHdheSB0byBkbyB0aGlzIHdpdGhvdXQgc2lnbmlmaWNhbnRseSByZWFyY2hpdGVjdGluZyB0aGUKKyAqIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBrZXhlYyBjb2RlLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICprZXhlY19ibjJjbCh2b2lkICpwZykKK3sKKwlzdHJ1Y3QgRWxmMzJfQmhkciAqYmhkcnA7CisJRWxmMzJfTmhkciAqbmhkcnA7CisJdW5zaWduZWQgY2hhciAqZGVzYzsKKwl1bnNpZ25lZCBjaGFyICpjb21tYW5kX2xpbmU7CisJX19zdW0xNiBjc3VtOworCisJYmhkcnAgPSAoc3RydWN0IEVsZjMyX0JoZHIgKikgcGc7CisKKwkvKgorCSAqIFRoaXMgcm91dGluZSBpcyBpbnZva2VkIGZvciBldmVyeSBzb3VyY2UgcGFnZSwgc28gbWFrZQorCSAqIHN1cmUgdG8gcXVpZXRseSBpZ25vcmUgZXZlcnkgaW1wb3NzaWJsZSBwYWdlLgorCSAqLworCWlmIChiaGRycC0+Yl9zaWduYXR1cmUgIT0gRUxGX0JPT1RfTUFHSUMgfHwKKwkgICAgYmhkcnAtPmJfc2l6ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHdlIGdldCBhIGNoZWNrc3VtIG1pc21hdGNoLCB3YXJuIHdpdGggdGhlIGNoZWNrc3VtCisJICogc28gd2UgY2FuIGRpYWdub3NlIGJldHRlci4KKwkgKi8KKwljc3VtID0gaXBfY29tcHV0ZV9jc3VtKHBnLCBiaGRycC0+Yl9zaXplKTsKKwlpZiAoY3N1bSAhPSAwKSB7CisJCXByX3dhcm5pbmcoIiVzOiBiYWQgY2hlY2tzdW0gJSN4IChzaXplICVkKVxuIiwKKwkJCSAgIF9fZnVuY19fLCBjc3VtLCBiaGRycC0+Yl9zaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbmhkcnAgPSAoRWxmMzJfTmhkciAqKSAoYmhkcnAgKyAxKTsKKworCXdoaWxlIChuaGRycC0+bl90eXBlICE9IEVCTl9DT01NQU5EX0xJTkUpIHsKKworCQlkZXNjID0gKHVuc2lnbmVkIGNoYXIgKikgKG5oZHJwICsgMSk7CisJCWRlc2MgKz0gcm91bmR1cHN6KG5oZHJwLT5uX2Rlc2Nzeik7CisKKwkJbmhkcnAgPSAoRWxmMzJfTmhkciAqKSBkZXNjOworCisJCS8qIHN0aWxsIGluIGJvdW5kcz8gKi8KKwkJaWYgKCh1bnNpZ25lZCBjaGFyICopIChuaGRycCArIDEpID4KKwkJICAgICgodW5zaWduZWQgY2hhciAqKSBwZykgKyBiaGRycC0+Yl9zaXplKSB7CisKKwkJCXByX2luZm8oIiVzOiBvdXQgb2YgYm91bmRzXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWNvbW1hbmRfbGluZSA9ICh1bnNpZ25lZCBjaGFyICopIChuaGRycCArIDEpOworCWRlc2MgPSBjb21tYW5kX2xpbmU7CisKKwl3aGlsZSAoKmRlc2MgIT0gJ1wwJykgeworCQlkZXNjKys7CisJCWlmICgoKHVuc2lnbmVkIGxvbmcpZGVzYyAmIFBBR0VfTUFTSykgIT0gKHVuc2lnbmVkIGxvbmcpcGcpIHsKKwkJCXByX2luZm8oIiVzOiByYW4gb2ZmIGVuZCBvZiBwYWdlXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIGNvbW1hbmRfbGluZTsKK30KKworc3RhdGljIHZvaWQga2V4ZWNfZmluZF9hbmRfc2V0X2NvbW1hbmRfbGluZShzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwlraW1hZ2VfZW50cnlfdCAqcHRyLCBlbnRyeTsKKworCXVuc2lnbmVkIGNoYXIgKmNvbW1hbmRfbGluZSA9IDA7CisJdW5zaWduZWQgY2hhciAqcjsKKwlIVl9FcnJubyBodmVycjsKKworCWZvciAocHRyID0gJmltYWdlLT5oZWFkOworCSAgICAgKGVudHJ5ID0gKnB0cikgJiYgIShlbnRyeSAmIElORF9ET05FKTsKKwkgICAgIHB0ciA9IChlbnRyeSAmIElORF9JTkRJUkVDVElPTikgPworCQkgICAgIHBoeXNfdG9fdmlydCgoZW50cnkgJiBQQUdFX01BU0spKSA6IHB0ciArIDEpIHsKKworCQlpZiAoKGVudHJ5ICYgSU5EX1NPVVJDRSkpIHsKKwkJCXZvaWQgKnZhID0KKwkJCQlrbWFwX2F0b21pY19wZm4oZW50cnkgPj4gUEFHRV9TSElGVCwgS01fVVNFUjApOworCQkJciA9IGtleGVjX2JuMmNsKHZhKTsKKwkJCWlmIChyKSB7CisJCQkJY29tbWFuZF9saW5lID0gcjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWt1bm1hcF9hdG9taWModmEsIEtNX1VTRVIwKTsKKwkJfQorCX0KKworCWlmIChjb21tYW5kX2xpbmUgIT0gMCkgeworCQlwcl9pbmZvKCJzZXR0aW5nIG5ldyBjb21tYW5kIGxpbmUgdG8gXCIlc1wiXG4iLAorCQkgICAgICAgY29tbWFuZF9saW5lKTsKKworCQlodmVyciA9IGh2X3NldF9jb21tYW5kX2xpbmUoCisJCQkoSFZfVmlydEFkZHIpIGNvbW1hbmRfbGluZSwgc3RybGVuKGNvbW1hbmRfbGluZSkpOworCQlrdW5tYXBfYXRvbWljKGNvbW1hbmRfbGluZSwgS01fVVNFUjApOworCX0gZWxzZSB7CisJCXByX2luZm8oIiVzOiBubyBjb21tYW5kIGxpbmUgZm91bmQ7IG1ha2luZyBlbXB0eVxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJaHZlcnIgPSBodl9zZXRfY29tbWFuZF9saW5lKChIVl9WaXJ0QWRkcikgY29tbWFuZF9saW5lLCAwKTsKKwl9CisJaWYgKGh2ZXJyKQorCQlwcl93YXJuaW5nKCIlczogaHZfc2V0X2NvbW1hbmRfbGluZSByZXR1cm5lZCBlcnJvcjogJWRcbiIsCisJCQkgICBfX2Z1bmNfXywgaHZlcnIpOworfQorCisvKgorICogVGhlIGtleGVjIGNvZGUgcmFuZ2UtY2hlY2tzIGFsbCBpdHMgUEFzLCBzbyB0byBhdm9pZCBoYXZpbmcgaXQgcnVuCisgKiBhbW9rIGFuZCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoZW4gc2VxdWVzdGVyIGl0IGZyb20gZXZlcnkgb3RoZXIKKyAqIGNvbnRyb2xsZXIsIHdlIGZvcmNlIGl0IHRvIGNvbWUgZnJvbSBjb250cm9sbGVyIHplcm8uICBXZSBhbHNvCisgKiBkaXNhYmxlIHRoZSBvb20ta2lsbGVyIHNpbmNlIGlmIHdlIGRvIGVuZCB1cCBydW5uaW5nIG91dCBvZiBtZW1vcnksCisgKiB0aGF0IGFsbW9zdCBjZXJ0YWlubHkgd29uJ3QgaGVscC4KKyAqLworc3RydWN0IHBhZ2UgKmtpbWFnZV9hbGxvY19wYWdlc19hcmNoKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJZ2ZwX21hc2sgfD0gX19HRlBfVEhJU05PREUgfCBfX0dGUF9OT1JFVFJZOworCXJldHVybiBhbGxvY19wYWdlc19ub2RlKDAsIGdmcF9tYXNrLCBvcmRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3F1YXNpX3ZhX2lzX3BhKHZvaWQpCit7CisJSFZfUFRFICpwZ3RhYmxlOworCUhWX1BURSBwdGU7CisJaW50IGk7CisKKwkvKgorCSAqIEZsdXNoIG91ciBUTEIgdG8gcHJldmVudCBjb25mbGljdHMgYmV0d2VlbiB0aGUgcHJldmlvdXMgY29udGVudHMKKwkgKiBhbmQgdGhlIG5ldyBzdHVmZiB3ZSdyZSBhYm91dCB0byBhZGQuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCisJLyogc2V0dXAgVkEgaXMgUEEsIGF0IGxlYXN0IHVwIHRvIFBBR0VfT0ZGU0VUICovCisKKwlwZ3RhYmxlID0gKEhWX1BURSAqKWN1cnJlbnQtPm1tLT5wZ2Q7CisJcHRlID0gaHZfcHRlKF9QQUdFX0tFUk5FTCB8IF9QQUdFX0hVR0VfUEFHRSk7CisJcHRlID0gaHZfcHRlX3NldF9tb2RlKHB0ZSwgSFZfUFRFX01PREVfQ0FDSEVfTk9fTDMpOworCisJZm9yIChpID0gMDsgaSA8IHBnZF9pbmRleChQQUdFX09GRlNFVCk7IGkrKykKKwkJcGd0YWJsZVtpXSA9IHBmbl9wdGUoaSA8PCAoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUKSwgcHRlKTsKK30KKworCitOT1JFVF9UWVBFIHZvaWQgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKK3sKKwl2b2lkICpyZWJvb3RfY29kZV9idWZmZXI7CisJTk9SRVRfVFlQRSB2b2lkICgqcm5rKSh1bnNpZ25lZCBsb25nLCB2b2lkICosIHVuc2lnbmVkIGxvbmcpCisJCUFUVFJJQl9OT1JFVDsKKworCS8qIE1hc2sgYWxsIGludGVycnVwdHMgYmVmb3JlIHN0YXJ0aW5nIHRvIHJlYm9vdC4gKi8KKwlpbnRlcnJ1cHRfbWFza19zZXRfbWFzayh+MFVMTCk7CisKKwlrZXhlY19maW5kX2FuZF9zZXRfY29tbWFuZF9saW5lKGltYWdlKTsKKworCS8qCisJICogQWRqdXN0IHRoZSBob21lIGNhY2hpbmcgb2YgdGhlIGNvbnRyb2wgcGFnZSB0byBiZSBjYWNoZWQgb24KKwkgKiB0aGlzIGNwdSwgYW5kIGNvcHkgdGhlIGFzc2VtYmx5IGhlbHBlciBpbnRvIHRoZSBjb250cm9sCisJICogY29kZSBwYWdlLCB3aGljaCB3ZSBtYXAgaW4gdGhlIHZtYWxsb2MgYXJlYS4KKwkgKi8KKwlob21lY2FjaGVfY2hhbmdlX3BhZ2VfaG9tZShpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UsIDAsCisJCQkJICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZWJvb3RfY29kZV9idWZmZXIgPSB2bWFwKCZpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UsIDEsIDAsCisJCQkJICBfX3BncHJvdChfUEFHRV9LRVJORUwgfCBfUEFHRV9FWEVDVVRBQkxFKSk7CisJbWVtY3B5KHJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKKwkgICAgICAgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplKTsKKwlfX2ZsdXNoX2ljYWNoZV9yYW5nZSgKKwkJKHVuc2lnbmVkIGxvbmcpIHJlYm9vdF9jb2RlX2J1ZmZlciwKKwkJKHVuc2lnbmVkIGxvbmcpIHJlYm9vdF9jb2RlX2J1ZmZlciArIHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CisKKwlzZXR1cF9xdWFzaV92YV9pc19wYSgpOworCisJLyogbm93IGNhbGwgaXQgKi8KKwlybmsgPSByZWJvb3RfY29kZV9idWZmZXI7CisJKCpybmspKGltYWdlLT5oZWFkLCByZWJvb3RfY29kZV9idWZmZXIsIGltYWdlLT5zdGFydCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL21lc3NhZ2luZy5jIGIvYXJjaC90aWxlL2tlcm5lbC9tZXNzYWdpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDIzZWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9tZXNzYWdpbmcuYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9odl9kcml2ZXIuaD4KKyNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzLmg+CisKKy8qIEFsbCBtZXNzYWdlcyBhcmUgc3RvcmVkIGhlcmUgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShIVl9Nc2dTdGF0ZSwgbXNnX3N0YXRlKTsKKwordm9pZCBfX2NwdWluaXQgaW5pdF9tZXNzYWdpbmcodm9pZCkKK3sKKwkvKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciBtZXNzYWdlcyBpbiBrZXJuZWwgc3BhY2UgKi8KKwlIVl9Nc2dTdGF0ZSAqc3RhdGUgPSAmX19nZXRfY3B1X3Zhcihtc2dfc3RhdGUpOworCWludCByYyA9IGh2X3JlZ2lzdGVyX21lc3NhZ2Vfc3RhdGUoc3RhdGUpOworCWlmIChyYyAhPSBIVl9PSykKKwkJcGFuaWMoImh2X3JlZ2lzdGVyX21lc3NhZ2Vfc3RhdGU6IGVycm9yICVkIiwgcmMpOworCisJLyogTWFrZSBzdXJlIGRvd25jYWxsIGludGVycnVwdHMgd2lsbCBiZSBlbmFibGVkLiAqLworCXJhd19sb2NhbF9pcnFfdW5tYXNrKElOVF9JTlRDVFJMXzEpOworfQorCit2b2lkIGh2X21lc3NhZ2VfaW50cihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGludG51bSkKK3sKKwkvKgorCSAqIFdlIGVudGVyIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgbGVhdmUgdGhlbSBkaXNhYmxlZCwKKwkgKiB0byBtYXRjaCBleHBlY3RhdGlvbnMgb2YgY2FsbGVkIGZ1bmN0aW9ucyAoZS5nLgorCSAqIGRvX2NjdXBkYXRlX2xvY2FsKCkgaW4gbW0vc2xhYi5jKS4gIFRoaXMgaXMgYWxzbyBjb25zaXN0ZW50CisJICogd2l0aCBub3JtYWwgY2FsbCBlbnRyeSBmb3IgZGV2aWNlIGludGVycnVwdHMuCisJICovCisKKwlpbnQgbWVzc2FnZVtIVl9NQVhfTUVTU0FHRV9TSVpFL3NpemVvZihpbnQpXTsKKwlIVl9SY3ZNc2dJbmZvIHJtaTsKKwlpbnQgbm1zZ3MgPSAwOworCisJLyogVHJhY2sgdGltZSBzcGVudCBoZXJlIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCisJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCWlycV9lbnRlcigpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKKwkvKiBEZWJ1Z2dpbmcgY2hlY2sgZm9yIHN0YWNrIG92ZXJmbG93OiBsZXNzIHRoYW4gMS84dGggc3RhY2sgZnJlZT8gKi8KKwl7CisJCWxvbmcgc3AgPSBzdGFja19wb2ludGVyIC0gKGxvbmcpIGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaWYgKHVubGlrZWx5KHNwIDwgKHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pICsgU1RBQ0tfV0FSTikpKSB7CisJCQlwcl9lbWVyZygiaHZfbWVzc2FnZV9pbnRyOiAiCisJCQkgICAgICAgInN0YWNrIG92ZXJmbG93OiAlbGRcbiIsCisJCQkgICAgICAgc3AgLSBzaXplb2Yoc3RydWN0IHRocmVhZF9pbmZvKSk7CisJCQlkdW1wX3N0YWNrKCk7CisJCX0KKwl9CisjZW5kaWYKKworCXdoaWxlICgxKSB7CisJCXJtaSA9IGh2X3JlY2VpdmVfbWVzc2FnZShfX2dldF9jcHVfdmFyKG1zZ19zdGF0ZSksCisJCQkJCSAoSFZfVmlydEFkZHIpIG1lc3NhZ2UsCisJCQkJCSBzaXplb2YobWVzc2FnZSkpOworCQlpZiAocm1pLm1zZ2xlbiA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKHJtaS5tc2dsZW4gPCAwKQorCQkJcGFuaWMoImh2X3JlY2VpdmVfbWVzc2FnZSBmYWlsZWQ6ICVkIiwgcm1pLm1zZ2xlbik7CisKKwkJKytubXNnczsKKworCQlpZiAocm1pLnNvdXJjZSA9PSBIVl9NU0dfVElMRSkgeworCQkJaW50IHRhZzsKKworCQkJLyogd2UganVzdCBzZW5kIHRhZ3MgZm9yIG5vdyAqLworCQkJQlVHX09OKHJtaS5tc2dsZW4gIT0gc2l6ZW9mKGludCkpOworCisJCQl0YWcgPSBtZXNzYWdlWzBdOworI2lmZGVmIENPTkZJR19TTVAKKwkJCWV2YWx1YXRlX21lc3NhZ2UobWVzc2FnZVswXSk7CisjZWxzZQorCQkJcGFuaWMoIlJlY2VpdmVkIElQSSBtZXNzYWdlICVkIGluIFVQIG1vZGUiLCB0YWcpOworI2VuZGlmCisJCX0gZWxzZSBpZiAocm1pLnNvdXJjZSA9PSBIVl9NU0dfSU5UUikgeworCQkJSFZfSW50ck1zZyAqaGltID0gKEhWX0ludHJNc2cgKiltZXNzYWdlOworCQkJc3RydWN0IGh2X2RyaXZlcl9jYiAqY2IgPQorCQkJCShzdHJ1Y3QgaHZfZHJpdmVyX2NiICopaGltLT5pbnRhcmc7CisJCQljYi0+Y2FsbGJhY2soY2IsIGhpbS0+aW50ZGF0YSk7CisJCQlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfaHZfbXNnX2NvdW50Kys7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdvdHRlbiBhIG1lc3NhZ2UgZG93bmNhbGwgd2l0aCBubworCSAqIG1lc3NhZ2VzIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAobm1zZ3MgPT0gMCkKKwkJcGFuaWMoIk1lc3NhZ2UgZG93bmNhbGwgaW52b2tlZCB3aXRoIG5vIG1lc3NhZ2VzISIpOworCisJLyoKKwkgKiBUcmFjayB0aW1lIHNwZW50IGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcyBhZ2FpbiBhbmQKKwkgKiBwcm9jZXNzIGFueSBzb2Z0aXJxcyBpZiB0aGV5IGFyZSB3YWl0aW5nLgorCSAqLworCWlycV9leGl0KCk7CisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3RpbGUva2VybmVsL21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWI4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL21vZHVsZS5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIEJhc2VkIG9uIGkzODYgdmVyc2lvbiwgY29weXJpZ2h0IChDKSAyMDAxIFJ1c3R5IFJ1c3NlbGwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZWxvYWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9vcGNvZGUtdGlsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKyNpZmRlZiBfX3RpbGVneF9fCisjIGRlZmluZSBFbGZfUmVsYSBFbGY2NF9SZWxhCisjIGRlZmluZSBFTEZfUl9TWU0gRUxGNjRfUl9TWU0KKyMgZGVmaW5lIEVMRl9SX1RZUEUgRUxGNjRfUl9UWVBFCisjZWxzZQorIyBkZWZpbmUgRWxmX1JlbGEgRWxmMzJfUmVsYQorIyBkZWZpbmUgRUxGX1JfU1lNIEVMRjMyX1JfU1lNCisjIGRlZmluZSBFTEZfUl9UWVBFIEVMRjMyX1JfVFlQRQorI2VuZGlmCisKKyNpZmRlZiBNT0RVTEVfREVCVUcKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZtdC4uLikKKyNlbmRpZgorCisvKgorICogQWxsb2NhdGUgc29tZSBhZGRyZXNzIHNwYWNlIGluIHRoZSByYW5nZSBNRU1fTU9EVUxFX1NUQVJUIHRvCisgKiBNRU1fTU9EVUxFX0VORCBhbmQgcG9wdWxhdGUgaXQgd2l0aCBtZW1vcnkuCisgKi8KK3ZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlwZ3Byb3RfdCBwcm90X3J3eCA9IF9fcGdwcm90KF9QQUdFX0tFUk5FTCB8IF9QQUdFX0tFUk5FTF9FWEVDKTsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCWludCBpID0gMDsKKwlpbnQgbnBhZ2VzOworCisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJbnBhZ2VzID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwlwYWdlcyA9IGttYWxsb2MobnBhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAocGFnZXMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7IGkgPCBucGFnZXM7ICsraSkgeworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0pOworCQlpZiAoIXBhZ2VzW2ldKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlhcmVhID0gX19nZXRfdm1fYXJlYShzaXplLCBWTV9BTExPQywgTUVNX01PRFVMRV9TVEFSVCwgTUVNX01PRFVMRV9FTkQpOworCWlmICghYXJlYSkKKwkJZ290byBlcnJvcjsKKworCWlmIChtYXBfdm1fYXJlYShhcmVhLCBwcm90X3J3eCwgJnBhZ2VzKSkgeworCQl2dW5tYXAoYXJlYS0+YWRkcik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIGFyZWEtPmFkZHI7CisKK2Vycm9yOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJX19mcmVlX3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHBhZ2VzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworCisvKiBGcmVlIG1lbW9yeSByZXR1cm5lZCBmcm9tIG1vZHVsZV9hbGxvYyAqLwordm9pZCBtb2R1bGVfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QsIHZvaWQgKm1vZHVsZV9yZWdpb24pCit7CisJdmZyZWUobW9kdWxlX3JlZ2lvbik7CisJLyoKKwkgKiBGSVhNRTogSWYgbW9kdWxlX3JlZ2lvbiA9PSBtb2QtPmluaXRfcmVnaW9uLCB0cmltIGV4Y2VwdGlvbgorCSAqIHRhYmxlIGVudHJpZXMuCisJICovCit9CisKKy8qIFdlIGRvbid0IG5lZWQgYW55dGhpbmcgc3BlY2lhbC4gKi8KK2ludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsCisJCQkgICAgICBFbGZfU2hkciAqc2VjaGRycywKKwkJCSAgICAgIGNoYXIgKnNlY3N0cmluZ3MsCisJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhcHBseV9yZWxvY2F0ZShFbGZfU2hkciAqc2VjaGRycywKKwkJICAgY29uc3QgY2hhciAqc3RydGFiLAorCQkgICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCisJCSAgIHVuc2lnbmVkIGludCByZWxzZWMsCisJCSAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCXByX2VycigibW9kdWxlICVzOiAucmVsIHJlbG9jYXRpb24gdW5zdXBwb3J0ZWRcbiIsIG1lLT5uYW1lKTsKKwlyZXR1cm4gLUVOT0VYRUM7Cit9CisKKyNpZmRlZiBfX3RpbGVneF9fCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgaGlnaCAxNiBiaXRzIG9mICJ2YWx1ZSIgaXMganVzdCB0aGUgc2lnbi1leHRlbnNpb24gb2YKKyAqIHRoZSBsb3cgNDggYml0cy4KKyAqLworc3RhdGljIGludCB2YWxpZGF0ZV9odzJfbGFzdChsb25nIHZhbHVlLCBzdHJ1Y3QgbW9kdWxlICptZSkKK3sKKwlpZiAoKCh2YWx1ZSA8PCAxNikgPj4gMTYpICE9IHZhbHVlKSB7CisJCXByX3dhcm5pbmcoIm1vZHVsZSAlczogT3V0IG9mIHJhbmdlIEhXMl9MQVNUIHZhbHVlICUjbHhcbiIsCisJCQkgICBtZS0+bmFtZSwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBWYWxpZGF0ZSB0aGF0ICJ2YWx1ZSIgaXNuJ3QgdG9vIGJpZyB0byBob2xkIGluIGEgSnVtcE9mZiByZWxvY2F0aW9uLgorICovCitzdGF0aWMgaW50IHZhbGlkYXRlX2p1bXBvZmYobG9uZyB2YWx1ZSkKK3sKKwkvKiBEZXRlcm1pbmUgc2l6ZSBvZiBqdW1wIG9mZnNldC4gKi8KKwlpbnQgc2hpZnQgPSBfX2J1aWx0aW5fY2x6bChnZXRfSnVtcE9mZl9YMShjcmVhdGVfSnVtcE9mZl9YMSgtMSkpKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBmaXRzIGludG8gdGhlIHJlbG9jYXRpb24gc2xvdC4gKi8KKwlsb25nIGYgPSBnZXRfSnVtcE9mZl9YMShjcmVhdGVfSnVtcE9mZl9YMSh2YWx1ZSkpOworCWYgPSAoZiA8PCBzaGlmdCkgPj4gc2hpZnQ7CisKKwlyZXR1cm4gZiA9PSB2YWx1ZTsKK30KKyNlbmRpZgorCitpbnQgYXBwbHlfcmVsb2NhdGVfYWRkKEVsZl9TaGRyICpzZWNoZHJzLAorCQkgICAgICAgY29uc3QgY2hhciAqc3RydGFiLAorCQkgICAgICAgdW5zaWduZWQgaW50IHN5bWluZGV4LAorCQkgICAgICAgdW5zaWduZWQgaW50IHJlbHNlYywKKwkJICAgICAgIHN0cnVjdCBtb2R1bGUgKm1lKQoreworCXVuc2lnbmVkIGludCBpOworCUVsZl9SZWxhICpyZWwgPSAodm9pZCAqKXNlY2hkcnNbcmVsc2VjXS5zaF9hZGRyOworCUVsZl9TeW0gKnN5bTsKKwl1NjQgKmxvY2F0aW9uOworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwlERUJVR1AoIkFwcGx5aW5nIHJlbG9jYXRlIHNlY3Rpb24gJXUgdG8gJXVcbiIsIHJlbHNlYywKKwkgICAgICAgc2VjaGRyc1tyZWxzZWNdLnNoX2luZm8pOworCWZvciAoaSA9IDA7IGkgPCBzZWNoZHJzW3JlbHNlY10uc2hfc2l6ZSAvIHNpemVvZigqcmVsKTsgaSsrKSB7CisJCS8qIFRoaXMgaXMgd2hlcmUgdG8gbWFrZSB0aGUgY2hhbmdlICovCisJCWxvY2F0aW9uID0gKHZvaWQgKilzZWNoZHJzW3NlY2hkcnNbcmVsc2VjXS5zaF9pbmZvXS5zaF9hZGRyCisJCQkrIHJlbFtpXS5yX29mZnNldDsKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgc3ltYm9sIGl0IGlzIHJlZmVycmluZyB0by4KKwkJICogTm90ZSB0aGF0IGFsbCB1bmRlZmluZWQgc3ltYm9scyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisJCSAqLworCQlzeW0gPSAoRWxmX1N5bSAqKXNlY2hkcnNbc3ltaW5kZXhdLnNoX2FkZHIKKwkJCSsgRUxGX1JfU1lNKHJlbFtpXS5yX2luZm8pOworCQl2YWx1ZSA9IHN5bS0+c3RfdmFsdWUgKyByZWxbaV0ucl9hZGRlbmQ7CisKKwkJc3dpdGNoIChFTEZfUl9UWVBFKHJlbFtpXS5yX2luZm8pKSB7CisKKyNkZWZpbmUgTVVOR0UoZnVuYykgKCpsb2NhdGlvbiA9ICgoKmxvY2F0aW9uICYgfmZ1bmMoLTEpKSB8IGZ1bmModmFsdWUpKSkKKworI2lmbmRlZiBfX3RpbGVneF9fCisJCWNhc2UgUl9USUxFXzMyOgorCQkJKih1aW50MzJfdCAqKWxvY2F0aW9uID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBSX1RJTEVfSU1NMTZfWDBfSEE6CisJCQl2YWx1ZSA9ICh2YWx1ZSArIDB4ODAwMCkgPj4gMTY7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSBSX1RJTEVfSU1NMTZfWDBfTE86CisJCQlNVU5HRShjcmVhdGVfSW1tMTZfWDApOworCQkJYnJlYWs7CisJCWNhc2UgUl9USUxFX0lNTTE2X1gxX0hBOgorCQkJdmFsdWUgPSAodmFsdWUgKyAweDgwMDApID4+IDE2OworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgUl9USUxFX0lNTTE2X1gxX0xPOgorCQkJTVVOR0UoY3JlYXRlX0ltbTE2X1gxKTsKKwkJCWJyZWFrOworCQljYXNlIFJfVElMRV9KT0ZGTE9OR19YMToKKwkJCXZhbHVlIC09ICh1bnNpZ25lZCBsb25nKSBsb2NhdGlvbjsgIC8qIHBjLXJlbGF0aXZlICovCisJCQl2YWx1ZSA9IChsb25nKSB2YWx1ZSA+PiAzOyAgICAgLyogY291bnQgYnkgaW5zdHJzICovCisJCQlNVU5HRShjcmVhdGVfSk9mZkxvbmdfWDEpOworCQkJYnJlYWs7CisjZWxzZQorCQljYXNlIFJfVElMRUdYXzY0OgorCQkJKmxvY2F0aW9uID0gdmFsdWU7CisJCQlicmVhazsKKwkJY2FzZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzJfTEFTVDoKKwkJCWlmICghdmFsaWRhdGVfaHcyX2xhc3QodmFsdWUsIG1lKSkKKwkJCQlyZXR1cm4gLUVOT0VYRUM7CisJCQl2YWx1ZSA+Pj0gMTY7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzE6CisJCQl2YWx1ZSA+Pj0gMTY7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzA6CisJCQlNVU5HRShjcmVhdGVfSW1tMTZfWDApOworCQkJYnJlYWs7CisJCWNhc2UgUl9USUxFR1hfSU1NMTZfWDFfSFcyX0xBU1Q6CisJCQlpZiAoIXZhbGlkYXRlX2h3Ml9sYXN0KHZhbHVlLCBtZSkpCisJCQkJcmV0dXJuIC1FTk9FWEVDOworCQkJdmFsdWUgPj49IDE2OworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgUl9USUxFR1hfSU1NMTZfWDFfSFcxOgorCQkJdmFsdWUgPj49IDE2OworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgUl9USUxFR1hfSU1NMTZfWDFfSFcwOgorCQkJTVVOR0UoY3JlYXRlX0ltbTE2X1gxKTsKKwkJCWJyZWFrOworCQljYXNlIFJfVElMRUdYX0pVTVBPRkZfWDE6CisJCQl2YWx1ZSAtPSAodW5zaWduZWQgbG9uZykgbG9jYXRpb247ICAvKiBwYy1yZWxhdGl2ZSAqLworCQkJdmFsdWUgPSAobG9uZykgdmFsdWUgPj4gMzsgICAgIC8qIGNvdW50IGJ5IGluc3RycyAqLworCQkJaWYgKCF2YWxpZGF0ZV9qdW1wb2ZmKHZhbHVlKSkgeworCQkJCXByX3dhcm5pbmcoIm1vZHVsZSAlczogT3V0IG9mIHJhbmdlIGp1bXAgdG8iCisJCQkJCSAgICIgJSNsbHggYXQgJSNsbHggKCVwKVxuIiwgbWUtPm5hbWUsCisJCQkJCSAgIHN5bS0+c3RfdmFsdWUgKyByZWxbaV0ucl9hZGRlbmQsCisJCQkJCSAgIHJlbFtpXS5yX29mZnNldCwgbG9jYXRpb24pOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KKwkJCU1VTkdFKGNyZWF0ZV9KdW1wT2ZmX1gxKTsKKwkJCWJyZWFrOworI2VuZGlmCisKKyN1bmRlZiBNVU5HRQorCisJCWRlZmF1bHQ6CisJCQlwcl9lcnIoIm1vZHVsZSAlczogVW5rbm93biByZWxvY2F0aW9uOiAlZFxuIiwKKwkJCSAgICAgICBtZS0+bmFtZSwgKGludCkgRUxGX1JfVFlQRShyZWxbaV0ucl9pbmZvKSk7CisJCQlyZXR1cm4gLUVOT0VYRUM7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKKwkJICAgIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAorCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCit7CisJLyogRklYTUU6IHBlcmhhcHMgcmVtb3ZlIHRoZSAid3JpdGFibGUiIGJpdCBmcm9tIHRoZSBUTEI/ICovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gvdGlsZS9rZXJuZWwvcGNpLWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDVlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL3BjaS1kbWEuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisKKy8qIEdlbmVyaWMgRE1BIG1hcHBpbmcgZnVuY3Rpb25zOiAqLworCisvKgorICogQWxsb2NhdGUgd2hhdCBMaW51eCBjYWxscyAiY29oZXJlbnQiIG1lbW9yeSwgd2hpY2ggZm9yIHVzIGp1c3QKKyAqIG1lYW5zIHVuY2FjaGVkLgorICovCit2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHNpemVfdCBzaXplLAorCQkJIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCisJCQkgZ2ZwX3QgZ2ZwKQoreworCXU2NCBkbWFfbWFzayA9IGRldi0+Y29oZXJlbnRfZG1hX21hc2sgPzogRE1BX0JJVF9NQVNLKDMyKTsKKwlpbnQgbm9kZSA9IGRldl90b19ub2RlKGRldik7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCXN0cnVjdCBwYWdlICpwZzsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlnZnAgfD0gX19HRlBfWkVSTzsKKworCS8qCisJICogQnkgZm9yY2luZyBOVU1BIG5vZGUgMCBmb3IgMzItYml0IG1hc2tzIHdlIGVuc3VyZSB0aGF0IHRoZQorCSAqIGhpZ2ggMzIgYml0cyBvZiB0aGUgcmVzdWx0aW5nIFBBIHdpbGwgYmUgemVyby4gIElmIHRoZSBtYXNrCisJICogc2l6ZSBpcywgZS5nLiwgMjQsIHdlIG1heSBzdGlsbCBub3QgYmUgYWJsZSB0byBndWFyYW50ZWUgYQorCSAqIHN1aXRhYmxlIG1lbW9yeSBhZGRyZXNzLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgcmV0dXJuIE5VTEwuCisJICogQnV0IHN1Y2ggZGV2aWNlcyBhcmUgdW5jb21tb24uCisJICovCisJaWYgKGRtYV9tYXNrIDw9IERNQV9CSVRfTUFTSygzMikpCisJCW5vZGUgPSAwOworCisJcGcgPSBob21lY2FjaGVfYWxsb2NfcGFnZXNfbm9kZShub2RlLCBnZnAsIG9yZGVyLCBQQUdFX0hPTUVfVU5DQUNIRUQpOworCWlmIChwZyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWFkZHIgPSBwYWdlX3RvX3BoeXMocGcpOworCWlmIChhZGRyICsgc2l6ZSA+IGRtYV9tYXNrKSB7CisJCWhvbWVjYWNoZV9mcmVlX3BhZ2VzKGFkZHIsIG9yZGVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRtYV9oYW5kbGUgPSBhZGRyOworCXJldHVybiBwYWdlX2FkZHJlc3MocGcpOworfQorRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfY29oZXJlbnQpOworCisvKgorICogRnJlZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIHdpdGggZG1hX2FsbG9jX2NvaGVyZW50LgorICovCit2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCSAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlob21lY2FjaGVfZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOworCisvKgorICogVGhlIG1hcCByb3V0aW5lcyAibWFwIiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UgZm9yIERNQQorICogYWNjZXNzZXMuICBUaGUgbWVtb3J5IGJlbG9uZ3MgdG8gdGhlIGRldmljZSBhZnRlciB0aGlzIGNhbGwgaXMKKyAqIGlzc3VlZCwgdW50aWwgaXQgaXMgdW5tYXBwZWQgd2l0aCBkbWFfdW5tYXBfc2luZ2xlLgorICoKKyAqIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55IG1hcHBpbmcsIHdlIGp1c3QgZmx1c2ggdGhlIGFkZHJlc3MgcmFuZ2UKKyAqIG91dCBvZiB0aGUgY2FjaGUgYW5kIHJldHVybiBhIERNQSBhZGRyZXNzLgorICoKKyAqIFRoZSB1bm1hcCByb3V0aW5lcyBkbyB3aGF0ZXZlciBpcyBuZWNlc3NhcnkgYmVmb3JlIHRoZSBwcm9jZXNzb3IKKyAqIGFjY2Vzc2VzIHRoZSBtZW1vcnkgYWdhaW4sIGFuZCBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRyaXZlcgorICogdG91Y2hlcyB0aGUgbWVtb3J5LiAgV2UgY2FuIGdldCBhd2F5IHdpdGggYSBjYWNoZSBpbnZhbGlkYXRlIGlmIHdlCisgKiBjYW4gY291bnQgb24gbm90aGluZyBoYXZpbmcgYmVlbiB0b3VjaGVkLgorICovCisKKworLyoKKyAqIGRtYV9tYXBfc2luZ2xlIGNhbiBiZSBwYXNzZWQgYW55IG1lbW9yeSBhZGRyZXNzLCBhbmQgdGhlcmUgYXBwZWFyCisgKiB0byBiZSBubyBhbGlnbm1lbnQgY29uc3RyYWludHMuCisgKgorICogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciB3aWxsIHNoYXJlIGEgY2FjaGUKKyAqIGxpbmUgd2l0aCBzb21lIG90aGVyIGRhdGEgdGhhdCBoYXMgYmVlbiB0b3VjaGVkIGluIHRoZSBtZWFudGltZS4KKyAqLworZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCB0aGlzcGFnZTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlXQVJOX09OKHNpemUgPT0gMCk7CisKKwlkbWFfYWRkciA9IF9fcGEocHRyKTsKKworCS8qIFdlIG1pZ2h0IGhhdmUgYmVlbiBoYW5kZWQgYSBidWZmZXIgdGhhdCB3cmFwcyBhIHBhZ2UgYm91bmRhcnkgKi8KKwl3aGlsZSAoKGludClzaXplID4gMCkgeworCQkvKiBUaGUgYW1vdW50IHRvIGZsdXNoIHRoYXQncyBvbiB0aGlzIHBhZ2UgKi8KKwkJdGhpc3BhZ2UgPSBQQUdFX1NJWkUgLSAoKHVuc2lnbmVkIGxvbmcpcHRyICYgKFBBR0VfU0laRSAtIDEpKTsKKwkJdGhpc3BhZ2UgPSBtaW4oKGludCl0aGlzcGFnZSwgKGludClzaXplKTsKKwkJLyogSXMgdGhpcyB2YWxpZCBmb3IgYW55IHBhZ2Ugd2UgY291bGQgYmUgaGFuZGVkPyAqLworCQlwYWdlID0gcGZuX3RvX3BhZ2Uoa2FkZHJfdG9fcGZuKHB0cikpOworCQlob21lY2FjaGVfZmx1c2hfY2FjaGUocGFnZSwgMCk7CisJCXB0ciArPSB0aGlzcGFnZTsKKwkJc2l6ZSAtPSB0aGlzcGFnZTsKKwl9CisKKwlyZXR1cm4gZG1hX2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2luZ2xlKTsKKwordm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworfQorRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2luZ2xlKTsKKworaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAorCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpOworCisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJV0FSTl9PTihuZW50cyA9PSAwIHx8IHNnbGlzdC0+bGVuZ3RoID09IDApOworCisJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVudHMsIGkpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpOworCQlwYWdlID0gcGZuX3RvX3BhZ2Uoc2ctPmRtYV9hZGRyZXNzID4+IFBBR0VfU0hJRlQpOworCQlob21lY2FjaGVfZmx1c2hfY2FjaGUocGFnZSwgMCk7CisJfQorCisJcmV0dXJuIG5lbnRzOworfQorRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKKwordm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV91bm1hcF9zZyk7CisKK2RtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCisJaG9tZWNhY2hlX2ZsdXNoX2NhY2hlKHBhZ2UsIDApOworCisJcmV0dXJuIHBhZ2VfdG9fcGEocGFnZSkgKyBvZmZzZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfcGFnZSk7CisKK3ZvaWQgZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyZXNzLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3VubWFwX3BhZ2UpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9ET1dOKGRtYV9oYW5kbGUpOworCXVuc2lnbmVkIGxvbmcgZW5kID0gUEZOX0RPV04oZG1hX2hhbmRsZSArIHNpemUgLSAxKTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpCisJCWhvbWVjYWNoZV9mbHVzaF9jYWNoZShwZm5fdG9fcGFnZShpKSwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJV0FSTl9PTihuZWxlbXMgPT0gMCB8fCBzZ1swXS5sZW5ndGggPT0gMCk7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnX2Zvcl9jcHUpOworCisvKgorICogRmx1c2ggYW5kIGludmFsaWRhdGUgY2FjaGUgZm9yIHNjYXR0ZXJsaXN0LgorICovCit2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlXQVJOX09OKG5lbGVtcyA9PSAwIHx8IHNnbGlzdC0+bGVuZ3RoID09IDApOworCisJZm9yX2VhY2hfc2coc2dsaXN0LCBzZywgbmVsZW1zLCBpKSB7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgc2ctPmRtYV9hZGRyZXNzLAorCQkJCQkgICBzZ19kbWFfbGVuKHNnKSwgZGlyZWN0aW9uKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UpOworCit2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlICsgb2Zmc2V0LCBzaXplLCBkaXJlY3Rpb24pOworfQorRVhQT1JUX1NZTUJPTChkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSk7CisKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSArIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UpOworCisvKgorICogZG1hX2FsbG9jX25vbmNvaGVyZW50KCkgcmV0dXJucyBub24tY2FjaGVhYmxlIG1lbW9yeSwgc28gdGhlcmUncyBubworICogbmVlZCB0byBkbyBhbnkgZmx1c2hpbmcgaGVyZS4KKyAqLwordm9pZCBkbWFfY2FjaGVfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cit9CitFWFBPUlRfU1lNQk9MKGRtYV9jYWNoZV9zeW5jKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcHJvYy5jIGIvYXJjaC90aWxlL2tlcm5lbC9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlZjkyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcHJvYy5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKKworLyoKKyAqIFN1cHBvcnQgL3Byb2MvY3B1aW5mbworICovCisKKyNkZWZpbmUgY3B1X3RvX3B0cihuKSAoKHZvaWQgKikoKGxvbmcpKG4pKzEpKQorI2RlZmluZSBwdHJfdG9fY3B1KHApICgobG9uZykocCkgLSAxKQorCitzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJaW50IG4gPSBwdHJfdG9fY3B1KHYpOworCisJaWYgKG4gPT0gMCkgeworCQljaGFyIGJ1ZltOUl9DUFVTKjVdOworCQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBjcHVfb25saW5lX21hc2spOworCQlzZXFfcHJpbnRmKG0sICJjcHUgY291bnRcdDogJWRcbiIsIG51bV9vbmxpbmVfY3B1cygpKTsKKwkJc2VxX3ByaW50ZihtLCAiY3B1IGxpc3RcdDogJXNcbiIsIGJ1Zik7CisJCXNlcV9wcmludGYobSwgIm1vZGVsIG5hbWVcdDogJXNcbiIsIGNoaXBfbW9kZWwpOworCQlzZXFfcHJpbnRmKG0sICJmbGFnc1x0XHQ6XG4iKTsgIC8qIG5vdGhpbmcgZm9yIG5vdyAqLworCQlzZXFfcHJpbnRmKG0sICJjcHUgTUh6XHRcdDogJWxsdS4lMDZsbHVcbiIsCisJCQkgICBnZXRfY2xvY2tfcmF0ZSgpIC8gMTAwMDAwMCwKKwkJCSAgIChnZXRfY2xvY2tfcmF0ZSgpICUgMTAwMDAwMCkpOworCQlzZXFfcHJpbnRmKG0sICJib2dvbWlwc1x0OiAlbHUuJTAybHVcblxuIiwKKwkJCSAgIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJCSAgIChsb29wc19wZXJfamlmZnkvKDUwMDAvSFopKSAlIDEwMCk7CisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCWlmICghY3B1X29ubGluZShuKSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCXNlcV9wcmludGYobSwgInByb2Nlc3Nvclx0OiAlZFxuIiwgbik7CisKKwkvKiBQcmludCBvbmx5IG51bV9vbmxpbmVfY3B1cygpIGJsYW5rIGxpbmVzIHRvdGFsLiAqLworCWlmIChjcHVtYXNrX25leHQobiwgY3B1X29ubGluZV9tYXNrKSA8IG5yX2NwdV9pZHMpCisJCXNlcV9wcmludGYobSwgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gKnBvcyA8IG5yX2NwdV9pZHMgPyBjcHVfdG9fcHRyKCpwb3MpIDogTlVMTDsKK30KK3N0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIGNfc3RhcnQobSwgcG9zKTsKK30KK3N0YXRpYyB2b2lkIGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKKwkuc3RhcnQJPSBjX3N0YXJ0LAorCS5uZXh0CT0gY19uZXh0LAorCS5zdG9wCT0gY19zdG9wLAorCS5zaG93CT0gc2hvd19jcHVpbmZvLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC90aWxlL2tlcm5lbC9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ1OTBhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNjcxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc3RhY2suaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CisjaWZkZWYgQ09ORklHX0hBUkRXQUxMCisjaW5jbHVkZSA8YXNtL2hhcmR3YWxsLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKyNpbmNsdWRlIDxhcmNoL2FiaS5oPgorCisKKy8qCisgKiBVc2UgdGhlICh4ODYpICJpZGxlPXBvbGwiIG9wdGlvbiB0byBwcmVmZXIgbG93IGxhdGVuY3kgd2hlbiBsZWF2aW5nIHRoZQorICogaWRsZSBsb29wIG92ZXIgbG93IHBvd2VyIHdoaWxlIGluIHRoZSBpZGxlIGxvb3AsIGUuZy4gaWYgd2UgaGF2ZQorICogb25lIHRocmVhZCBwZXIgY29yZSBhbmQgd2Ugd2FudCB0byBnZXQgdGhyZWFkcyBvdXQgb2YgZnV0ZXggd2FpdHMgZmFzdC4KKyAqLworc3RhdGljIGludCBub19pZGxlX25hcDsKK3N0YXRpYyBpbnQgX19pbml0IGlkbGVfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc3RyY21wKHN0ciwgInBvbGwiKSkgeworCQlwcl9pbmZvKCJ1c2luZyBwb2xsaW5nIGlkbGUgdGhyZWFkcy5cbiIpOworCQlub19pZGxlX25hcCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgImhhbHQiKSkKKwkJbm9faWRsZV9uYXAgPSAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiaWRsZSIsIGlkbGVfc2V0dXApOworCisvKgorICogVGhlIGlkbGUgdGhyZWFkLiBUaGVyZSdzIG5vIHVzZWZ1bCB3b3JrIHRvIGJlCisgKiBkb25lLCBzbyBqdXN0IHRyeSB0byBjb25zZXJ2ZSBwb3dlciBhbmQgaGF2ZSBhCisgKiBsb3cgZXhpdCBsYXRlbmN5IChpZSBzaXQgaW4gYSBsb29wIHdhaXRpbmcgZm9yCisgKiBzb21lYm9keSB0byBzYXkgdGhhdCB0aGV5J2QgbGlrZSB0byByZXNjaGVkdWxlKQorICovCit2b2lkIGNwdV9pZGxlKHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKKworCWlmIChub19pZGxlX25hcCkgeworCQl3aGlsZSAoMSkgeworCQkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJCQljcHVfcmVsYXgoKTsKKwkJCXNjaGVkdWxlKCk7CisJCX0KKwl9CisKKwkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5vIHByaW9yaXR5IGF0IGFsbCAqLworCXdoaWxlICgxKSB7CisJCXRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2soMSk7CisJCXdoaWxlICghbmVlZF9yZXNjaGVkKCkpIHsKKwkJCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQorCQkJCUJVRygpOyAgLyogbm8gSE9UUExVR19DUFUgKi8KKworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlkbGVfdGltZXN0YW1wID0gamlmZmllczsKKwkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOworCQkJLyoKKwkJCSAqIFRTX1BPTExJTkctY2xlYXJlZCBzdGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHdlCisJCQkgKiB0ZXN0IE5FRURfUkVTQ0hFRDoKKwkJCSAqLworCQkJc21wX21iKCk7CisKKwkJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQkJX2NwdV9pZGxlKCk7CisJCQllbHNlCisJCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKKwkJfQorCQl0aWNrX25vaHpfcmVzdGFydF9zY2hlZF90aWNrKCk7CisJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwkJc2NoZWR1bGUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJfQorfQorCitzdHJ1Y3QgdGhyZWFkX2luZm8gKmFsbG9jX3RocmVhZF9pbmZvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlnZnBfdCBmbGFncyA9IEdGUF9LRVJORUw7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UKKwlmbGFncyB8PSBfX0dGUF9aRVJPOworI2VuZGlmCisKKwlwYWdlID0gYWxsb2NfcGFnZXMoZmxhZ3MsIFRIUkVBRF9TSVpFX09SREVSKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIChzdHJ1Y3QgdGhyZWFkX2luZm8gKilwYWdlX2FkZHJlc3MocGFnZSk7Cit9CisKKy8qCisgKiBGcmVlIGEgdGhyZWFkX2luZm8gbm9kZSwgYW5kIGFsbCBvZiBpdHMgZGVyaXZhdGl2ZQorICogZGF0YSBzdHJ1Y3R1cmVzLgorICovCit2b2lkIGZyZWVfdGhyZWFkX2luZm8oc3RydWN0IHRocmVhZF9pbmZvICppbmZvKQoreworCXN0cnVjdCBzaW5nbGVfc3RlcF9zdGF0ZSAqc3RlcF9zdGF0ZSA9IGluZm8tPnN0ZXBfc3RhdGU7CisKKyNpZmRlZiBDT05GSUdfSEFSRFdBTEwKKwkvKgorCSAqIFdlIGZyZWUgYSB0aHJlYWRfaW5mbyBmcm9tIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaGFzCisJICogYmVlbiBzY2hlZHVsZWQgbmV4dCwgc28gdGhlIG9yaWdpbmFsIHRhc2sgaXMgYWxyZWFkeSBkZWFkLgorCSAqIENhbGxpbmcgZGVhY3RpdmF0ZSBoZXJlIGp1c3QgZnJlZXMgdXAgdGhlIGRhdGEgc3RydWN0dXJlcy4KKwkgKiBJZiB0aGUgdGFzayB3ZSdyZSBmcmVlaW5nIGhlbGQgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIGEKKwkgKiBoYXJkd2FsbCBmZCwgaXQgd291bGQgaGF2ZSBiZWVuIHJlbGVhc2VkIHByaW9yIHRvIHRoaXMgcG9pbnQKKwkgKiBhbnl3YXkgdmlhIGV4aXRfZmlsZXMoKSwgYW5kICJoYXJkd2FsbCIgd291bGQgYmUgTlVMTCBieSBub3cuCisJICovCisJaWYgKGluZm8tPnRhc2stPnRocmVhZC5oYXJkd2FsbCkKKwkJaGFyZHdhbGxfZGVhY3RpdmF0ZShpbmZvLT50YXNrKTsKKyNlbmRpZgorCisJaWYgKHN0ZXBfc3RhdGUpIHsKKworCQkvKgorCQkgKiBGSVhNRTogd2UgZG9uJ3QgbXVubWFwIHN0ZXBfc3RhdGUtPmJ1ZmZlcgorCQkgKiBiZWNhdXNlIHRoZSBtbV9zdHJ1Y3QgZm9yIHRoaXMgcHJvY2VzcyAoaW5mby0+dGFzay0+bW0pCisJCSAqIGhhcyBhbHJlYWR5IGJlZW4gemVyb2VkIGluIGV4aXRfbW0oKS4gIEtlZXBpbmcgYQorCQkgKiByZWZlcmVuY2UgdG8gaXQgaGVyZSBzZWVtcyBsaWtlIGEgYmFkIG1vdmUsIHNvIHRoaXMKKwkJICogbWVhbnMgd2UgY2FuJ3QgbXVubWFwKCkgdGhlIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSBpZiB3ZQorCQkgKiBwdHJhY2UgbXVsdGlwbGUgdGhyZWFkcyBpbiBhIHByb2Nlc3MsIHdlIHdpbGwgc2xvd2x5CisJCSAqIGxlYWsgdXNlciBtZW1vcnkuICAoTm90ZSB0aGF0IGFzIHNvb24gYXMgdGhlIGxhc3QKKwkJICogdGhyZWFkIGluIGEgcHJvY2VzcyBkaWVzLCB3ZSB3aWxsIHJlY2xhaW0gYWxsIHVzZXIKKwkJICogbWVtb3J5IGluY2x1ZGluZyBzaW5nbGUtc3RlcCBidWZmZXJzIGluIHRoZSB1c3VhbCB3YXkuKQorCQkgKiBXZSBzaG91bGQgZWl0aGVyIGFzc2lnbiBhIGtlcm5lbCBWQSB0byB0aGlzIGJ1ZmZlcgorCQkgKiBzb21laG93LCBvciB3ZSBzaG91bGQgYXNzb2NpYXRlIHRoZSBidWZmZXIocykgd2l0aCB0aGUKKwkJICogbW0gaXRzZWxmIHNvIHdlIGNhbiBjbGVhbiB0aGVtIHVwIHRoYXQgd2F5LgorCQkgKi8KKwkJa2ZyZWUoc3RlcF9zdGF0ZSk7CisJfQorCisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWluZm8pOworfQorCitzdGF0aWMgdm9pZCBzYXZlX2FyY2hfc3RhdGUoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpOworCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKKwkJdW5zaWduZWQgbG9uZyBzdGFja19zaXplLAorCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpjaGlsZHJlZ3M7CisJdW5zaWduZWQgbG9uZyBrc3A7CisKKwkvKgorCSAqIFdoZW4gY3JlYXRpbmcgYSBuZXcga2VybmVsIHRocmVhZCB3ZSBwYXNzIHNwIGFzIHplcm8uCisJICogQXNzaWduIGl0IHRvIGEgcmVhc29uYWJsZSB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHRoZSBzdGFjay4KKwkgKi8KKwlpZiAoc3AgPT0gMCAmJiByZWdzLT5leDEgPT0gUExfSUNTX0VYMShLRVJORUxfUEwsIDApKQorCQlzcCA9IEtTVEtfVE9QKHApOworCisJLyoKKwkgKiBEbyBub3QgY2xvbmUgc3RlcCBzdGF0ZSBmcm9tIHRoZSBwYXJlbnQ7IGVhY2ggdGhyZWFkCisJICogbXVzdCBtYWtlIGl0cyBvd24gbGF6aWx5LgorCSAqLworCXRhc2tfdGhyZWFkX2luZm8ocCktPnN0ZXBfc3RhdGUgPSBOVUxMOworCisJLyoKKwkgKiBTdGFydCBuZXcgdGhyZWFkIGluIHJldF9mcm9tX2Zvcmsgc28gaXQgc2NoZWR1bGVzIHByb3Blcmx5CisJICogYW5kIHRoZW4gcmV0dXJuIGZyb20gaW50ZXJydXB0IGxpa2UgdGhlIHBhcmVudC4KKwkgKi8KKwlwLT50aHJlYWQucGMgPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKKworCS8qIFNhdmUgdXNlciBzdGFjayB0b3AgcG9pbnRlciBzbyB3ZSBjYW4gSUQgdGhlIHN0YWNrIHZtIGFyZWEgbGF0ZXIuICovCisJcC0+dGhyZWFkLnVzcDAgPSBzcDsKKworCS8qIFJlY29yZCB0aGUgcGlkIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0aGlzIG9uZS4gKi8KKwlwLT50aHJlYWQuY3JlYXRvcl9waWQgPSBjdXJyZW50LT5waWQ7CisKKwkvKgorCSAqIENvcHkgdGhlIHJlZ2lzdGVycyBvbnRvIHRoZSBrZXJuZWwgc3RhY2sgc28gdGhlCisJICogcmV0dXJuLWZyb20taW50ZXJydXB0IGNvZGUgd2lsbCByZWxvYWQgaXQgaW50byByZWdpc3RlcnMuCisJICovCisJY2hpbGRyZWdzID0gdGFza19wdF9yZWdzKHApOworCSpjaGlsZHJlZ3MgPSAqcmVnczsKKwljaGlsZHJlZ3MtPnJlZ3NbMF0gPSAwOyAgICAgICAgIC8qIHJldHVybiB2YWx1ZSBpcyB6ZXJvICovCisJY2hpbGRyZWdzLT5zcCA9IHNwOyAgLyogb3ZlcnJpZGUgd2l0aCBuZXcgdXNlciBzdGFjayBwb2ludGVyICovCisKKwkvKgorCSAqIENvcHkgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgZnJvbSB0aGUgcGFzc2VkIHB0X3JlZ3Mgc3RydWN0CisJICogaW50byB0aGUgY29udGV4dC1zd2l0Y2ggY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBhcmVhLgorCSAqIFdlIGhhdmUgdG8gcmVzdG9yZSB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBzaW5jZSB3ZSBtYXkKKwkgKiBiZSBjbG9uaW5nIGEgdXNlcnNwYWNlIHRhc2sgd2l0aCB1c2Vyc3BhY2UgcmVnaXN0ZXIgc3RhdGUsCisJICogYW5kIHdlIHdvbid0IGJlIHVud2luZGluZyB0aGUgc2FtZSBrZXJuZWwgZnJhbWVzIHRvIHJlc3RvcmUgdGhlbS4KKwkgKiBaZXJvIG91dCB0aGUgQyBBQkkgc2F2ZSBhcmVhIHRvIG1hcmsgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisJICovCisJa3NwID0gKHVuc2lnbmVkIGxvbmcpIGNoaWxkcmVnczsKKwlrc3AgLT0gQ19BQklfU0FWRV9BUkVBX1NJWkU7ICAgLyogaW50ZXJydXB0LWVudHJ5IHNhdmUgYXJlYSAqLworCSgobG9uZyAqKWtzcClbMF0gPSAoKGxvbmcgKilrc3ApWzFdID0gMDsKKwlrc3AgLT0gQ0FMTEVFX1NBVkVEX1JFR1NfQ09VTlQgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJbWVtY3B5KCh2b2lkICopa3NwLCAmcmVncy0+cmVnc1tDQUxMRUVfU0FWRURfRklSU1RfUkVHXSwKKwkgICAgICAgQ0FMTEVFX1NBVkVEX1JFR1NfQ09VTlQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWtzcCAtPSBDX0FCSV9TQVZFX0FSRUFfU0laRTsgICAvKiBfX3N3aXRjaF90bygpIHNhdmUgYXJlYSAqLworCSgobG9uZyAqKWtzcClbMF0gPSAoKGxvbmcgKilrc3ApWzFdID0gMDsKKwlwLT50aHJlYWQua3NwID0ga3NwOworCisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCS8qCisJICogTm8gRE1BIGluIHRoZSBuZXcgdGhyZWFkLiAgV2UgbW9kZWwgdGhpcyBvbiB0aGUgZmFjdCB0aGF0CisJICogZm9yaygpIGNsZWFycyB0aGUgcGVuZGluZyBzaWduYWxzLCBhbGFybXMsIGFuZCBhaW8gZm9yIHRoZSBjaGlsZC4KKwkgKi8KKwltZW1zZXQoJnAtPnRocmVhZC50aWxlX2RtYV9zdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCB0aWxlX2RtYV9zdGF0ZSkpOworCW1lbXNldCgmcC0+dGhyZWFkLmRtYV9hc3luY190bGIsIDAsIHNpemVvZihzdHJ1Y3QgYXN5bmNfdGxiKSk7CisjZW5kaWYKKworI2lmIENISVBfSEFTX1NOX1BST0MoKQorCS8qIExpa2V3aXNlLCB0aGUgbmV3IHRocmVhZCBpcyBub3QgcnVubmluZyBzdGF0aWMgcHJvY2Vzc29yIGNvZGUuICovCisJcC0+dGhyZWFkLnNuX3Byb2NfcnVubmluZyA9IDA7CisJbWVtc2V0KCZwLT50aHJlYWQuc25fYXN5bmNfdGxiLCAwLCBzaXplb2Yoc3RydWN0IGFzeW5jX3RsYikpOworI2VuZGlmCisKKyNpZiBDSElQX0hBU19QUk9DX1NUQVRVU19TUFIoKQorCS8qIE5ldyB0aHJlYWQgaGFzIGl0cyBtaXNjZWxsYW5lb3VzIHByb2Nlc3NvciBzdGF0ZSBiaXRzIGNsZWFyLiAqLworCXAtPnRocmVhZC5wcm9jX3N0YXR1cyA9IDA7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IQVJEV0FMTAorCS8qIE5ldyB0aHJlYWQgZG9lcyBub3Qgb3duIGFueSBuZXR3b3Jrcy4gKi8KKwlwLT50aHJlYWQuaGFyZHdhbGwgPSBOVUxMOworI2VuZGlmCisKKworCS8qCisJICogU3RhcnQgdGhlIG5ldyB0aHJlYWQgd2l0aCB0aGUgY3VycmVudCBhcmNoaXRlY3R1cmUgc3RhdGUKKwkgKiAodXNlciBpbnRlcnJ1cHQgbWFza3MsIGV0Yy4pLgorCSAqLworCXNhdmVfYXJjaF9zdGF0ZSgmcC0+dGhyZWFkKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuICJjdXJyZW50IiBpZiBpdCBsb29rcyBwbGF1c2libGUsIG9yIGVsc2UgYSBwb2ludGVyIHRvIGEgZHVtbXkuCisgKiBUaGlzIGNhbiBiZSBoZWxwZnVsIGlmIHdlIGFyZSBqdXN0IHRyeWluZyB0byBlbWl0IGEgY2xlYW4gcGFuaWMuCisgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqdmFsaWRhdGVfY3VycmVudCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgY29ycnVwdCA9IHsgLmNvbW0gPSAiPGNvcnJ1cHQ+IiB9OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlpZiAodW5saWtlbHkoKHVuc2lnbmVkIGxvbmcpdHNrIDwgUEFHRV9PRkZTRVQgfHwKKwkJICAgICAodm9pZCAqKXRzayA+IGhpZ2hfbWVtb3J5IHx8CisJCSAgICAgKCh1bnNpZ25lZCBsb25nKXRzayAmIChfX2FsaWdub2ZfXygqdHNrKSAtIDEpKSAhPSAwKSkgeworCQlwcl9lcnIoIkNvcnJ1cHQgJ2N1cnJlbnQnICVwIChzcCAlI2x4KVxuIiwgdHNrLCBzdGFja19wb2ludGVyKTsKKwkJdHNrID0gJmNvcnJ1cHQ7CisJfQorCXJldHVybiB0c2s7Cit9CisKKy8qIFRha2UgYW5kIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgdGFzaywgZm9yIHNjaGVkdWxlX3RhaWwoKS4gKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqc2ltX25vdGlmeV9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisJX19pbnNuX210c3ByKFNQUl9TSU1fQ09OVFJPTCwgU0lNX0NPTlRST0xfT1NfRk9SS19QQVJFTlQgfAorCQkgICAgICh0c2stPnRocmVhZC5jcmVhdG9yX3BpZCA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOworCV9faW5zbl9tdHNwcihTUFJfU0lNX0NPTlRST0wsIFNJTV9DT05UUk9MX09TX0ZPUksgfAorCQkgICAgICh0c2stPnBpZCA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpOworCXJldHVybiBwcmV2OworfQorCitpbnQgZHVtcF90YXNrX3JlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGVsZl9ncmVnc2V0X3QgKnJlZ3MpCit7CisJc3RydWN0IHB0X3JlZ3MgKnB0cmVncyA9IHRhc2tfcHRfcmVncyh0c2spOworCWVsZl9jb3JlX2NvcHlfcmVncyhyZWdzLCBwdHJlZ3MpOworCXJldHVybiAxOworfQorCisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCisvKiBBbGxvdyB1c2VyIHByb2Nlc3NlcyB0byBhY2Nlc3MgdGhlIERNQSBTUFJzICovCit2b2lkIGdyYW50X2RtYV9tcGxzKHZvaWQpCit7CisJX19pbnNuX210c3ByKFNQUl9NUExfRE1BX0NQTF9TRVRfMCwgMSk7CisJX19pbnNuX210c3ByKFNQUl9NUExfRE1BX05PVElGWV9TRVRfMCwgMSk7Cit9CisKKy8qIEZvcmJpZCB1c2VyIHByb2Nlc3NlcyBmcm9tIGFjY2Vzc2luZyB0aGUgRE1BIFNQUnMgKi8KK3ZvaWQgcmVzdHJpY3RfZG1hX21wbHModm9pZCkKK3sKKwlfX2luc25fbXRzcHIoU1BSX01QTF9ETUFfQ1BMX1NFVF8xLCAxKTsKKwlfX2luc25fbXRzcHIoU1BSX01QTF9ETUFfTk9USUZZX1NFVF8xLCAxKTsKK30KKworLyogUGF1c2UgdGhlIERNQSBlbmdpbmUsIHRoZW4gc2F2ZSBvZmYgaXRzIHN0YXRlIHJlZ2lzdGVycy4gKi8KK3N0YXRpYyB2b2lkIHNhdmVfdGlsZV9kbWFfc3RhdGUoc3RydWN0IHRpbGVfZG1hX3N0YXRlICpkbWEpCit7CisJdW5zaWduZWQgbG9uZyBzdGF0ZSA9IF9faW5zbl9tZnNwcihTUFJfRE1BX1VTRVJfU1RBVFVTKTsKKwl1bnNpZ25lZCBsb25nIHBvc3Rfc3VzcGVuZF9zdGF0ZTsKKworCS8qIElmIHdlJ3JlIHJ1bm5pbmcsIHN1c3BlbmQgdGhlIGVuZ2luZS4gKi8KKwlpZiAoKHN0YXRlICYgRE1BX1NUQVRVU19NQVNLKSA9PSBTUFJfRE1BX1NUQVRVU19fUlVOTklOR19NQVNLKQorCQlfX2luc25fbXRzcHIoU1BSX0RNQV9DVFIsIFNQUl9ETUFfQ1RSX19TVVNQRU5EX01BU0spOworCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgZW5naW5lIHRvIGlkbGUsIHRoZW4gc2F2ZSByZWdzLiAgTm90ZSB0aGF0IHdlCisJICogd2FudCB0byByZWNvcmQgdGhlICJydW5uaW5nIiBiaXQgZnJvbSBiZWZvcmUgc3VzcGVuc2lvbiwKKwkgKiBhbmQgdGhlICJkb25lIiBiaXQgZnJvbSBhZnRlciwgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkKKwkgKiBkaXN0aW5ndWlzaCBhIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc3VzcGVuZGVkIHRoZSBlbmdpbmUgZnJvbQorCSAqIHRoZSBjYXNlIHdoZXJlIHRoZSBrZXJuZWwgc3VzcGVuZGVkIGFzIHBhcnQgb2YgdGhlIGNvbnRleHQKKwkgKiBzd2FwLgorCSAqLworCWRvIHsKKwkJcG9zdF9zdXNwZW5kX3N0YXRlID0gX19pbnNuX21mc3ByKFNQUl9ETUFfVVNFUl9TVEFUVVMpOworCX0gd2hpbGUgKHBvc3Rfc3VzcGVuZF9zdGF0ZSAmIFNQUl9ETUFfU1RBVFVTX19CVVNZX01BU0spOworCisJZG1hLT5zcmMgPSBfX2luc25fbWZzcHIoU1BSX0RNQV9TUkNfQUREUik7CisJZG1hLT5zcmNfY2h1bmsgPSBfX2luc25fbWZzcHIoU1BSX0RNQV9TUkNfQ0hVTktfQUREUik7CisJZG1hLT5kZXN0ID0gX19pbnNuX21mc3ByKFNQUl9ETUFfRFNUX0FERFIpOworCWRtYS0+ZGVzdF9jaHVuayA9IF9faW5zbl9tZnNwcihTUFJfRE1BX0RTVF9DSFVOS19BRERSKTsKKwlkbWEtPnN0cmlkZXMgPSBfX2luc25fbWZzcHIoU1BSX0RNQV9TVFJJREUpOworCWRtYS0+Y2h1bmtfc2l6ZSA9IF9faW5zbl9tZnNwcihTUFJfRE1BX0NIVU5LX1NJWkUpOworCWRtYS0+Ynl0ZSA9IF9faW5zbl9tZnNwcihTUFJfRE1BX0JZVEUpOworCWRtYS0+c3RhdHVzID0gKHN0YXRlICYgU1BSX0RNQV9TVEFUVVNfX1JVTk5JTkdfTUFTSykgfAorCQkocG9zdF9zdXNwZW5kX3N0YXRlICYgU1BSX0RNQV9TVEFUVVNfX0RPTkVfTUFTSyk7Cit9CisKKy8qIFJlc3RhcnQgYSBETUEgdGhhdCB3YXMgcnVubmluZyBiZWZvcmUgd2Ugd2VyZSBjb250ZXh0LXN3aXRjaGVkIG91dC4gKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGlsZV9kbWFfc3RhdGUoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpCit7CisJY29uc3Qgc3RydWN0IHRpbGVfZG1hX3N0YXRlICpkbWEgPSAmdC0+dGlsZV9kbWFfc3RhdGU7CisKKwkvKgorCSAqIFRoZSBvbmx5IHdheSB0byByZXN0b3JlIHRoZSBkb25lIGJpdCBpcyB0byBydW4gYSB6ZXJvCisJICogbGVuZ3RoIHRyYW5zYWN0aW9uLgorCSAqLworCWlmICgoZG1hLT5zdGF0dXMgJiBTUFJfRE1BX1NUQVRVU19fRE9ORV9NQVNLKSAmJgorCSAgICAhKF9faW5zbl9tZnNwcihTUFJfRE1BX1VTRVJfU1RBVFVTKSAmIFNQUl9ETUFfU1RBVFVTX19ET05FX01BU0spKSB7CisJCV9faW5zbl9tdHNwcihTUFJfRE1BX0JZVEUsIDApOworCQlfX2luc25fbXRzcHIoU1BSX0RNQV9DVFIsIFNQUl9ETUFfQ1RSX19SRVFVRVNUX01BU0spOworCQl3aGlsZSAoX19pbnNuX21mc3ByKFNQUl9ETUFfVVNFUl9TVEFUVVMpICYKKwkJICAgICAgIFNQUl9ETUFfU1RBVFVTX19CVVNZX01BU0spCisJCQk7CisJfQorCisJX19pbnNuX210c3ByKFNQUl9ETUFfU1JDX0FERFIsIGRtYS0+c3JjKTsKKwlfX2luc25fbXRzcHIoU1BSX0RNQV9TUkNfQ0hVTktfQUREUiwgZG1hLT5zcmNfY2h1bmspOworCV9faW5zbl9tdHNwcihTUFJfRE1BX0RTVF9BRERSLCBkbWEtPmRlc3QpOworCV9faW5zbl9tdHNwcihTUFJfRE1BX0RTVF9DSFVOS19BRERSLCBkbWEtPmRlc3RfY2h1bmspOworCV9faW5zbl9tdHNwcihTUFJfRE1BX1NUUklERSwgZG1hLT5zdHJpZGVzKTsKKwlfX2luc25fbXRzcHIoU1BSX0RNQV9DSFVOS19TSVpFLCBkbWEtPmNodW5rX3NpemUpOworCV9faW5zbl9tdHNwcihTUFJfRE1BX0JZVEUsIGRtYS0+Ynl0ZSk7CisKKwkvKgorCSAqIFJlc3RhcnQgdGhlIGVuZ2luZSBpZiB3ZSB3ZXJlIHJ1bm5pbmcgYW5kIG5vdCBkb25lLgorCSAqIENsZWFyIGEgcGVuZGluZyBhc3luYyBETUEgZmF1bHQgdGhhdCB3ZSB3ZXJlIHdhaXRpbmcgb24gcmV0dXJuCisJICogdG8gdXNlciBzcGFjZSB0byBleGVjdXRlLCBzaW5jZSB3ZSBleHBlY3QgdGhlIERNQSBlbmdpbmUKKwkgKiB0byByZWdlbmVyYXRlIHRob3NlIGZhdWx0cyBmb3IgdXMgbm93LiAgTm90ZSB0aGF0IHdlIGRvbid0CisJICogdHJ5IHRvIGNsZWFyIHRoZSBUSUZfQVNZTkNfVExCIGZsYWcsIHNpbmNlIGl0J3MgcmVsYXRpdmVseQorCSAqIGhhcm1sZXNzIGlmIHNldCwgYW5kIGl0IGNvdmVycyBib3RoIERNQSBhbmQgdGhlIFNOIHByb2Nlc3Nvci4KKwkgKi8KKwlpZiAoKGRtYS0+c3RhdHVzICYgRE1BX1NUQVRVU19NQVNLKSA9PSBTUFJfRE1BX1NUQVRVU19fUlVOTklOR19NQVNLKSB7CisJCXQtPmRtYV9hc3luY190bGIuZmF1bHRfbnVtID0gMDsKKwkJX19pbnNuX210c3ByKFNQUl9ETUFfQ1RSLCBTUFJfRE1BX0NUUl9fUkVRVUVTVF9NQVNLKTsKKwl9Cit9CisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBzYXZlX2FyY2hfc3RhdGUoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpCit7CisjaWYgQ0hJUF9IQVNfU1BMSVRfSU5UUl9NQVNLKCkKKwl0LT5pbnRlcnJ1cHRfbWFzayA9IF9faW5zbl9tZnNwcihTUFJfSU5URVJSVVBUX01BU0tfMF8wKSB8CisJCSgodTY0KV9faW5zbl9tZnNwcihTUFJfSU5URVJSVVBUX01BU0tfMF8xKSA8PCAzMik7CisjZWxzZQorCXQtPmludGVycnVwdF9tYXNrID0gX19pbnNuX21mc3ByKFNQUl9JTlRFUlJVUFRfTUFTS18wKTsKKyNlbmRpZgorCXQtPmV4X2NvbnRleHRbMF0gPSBfX2luc25fbWZzcHIoU1BSX0VYX0NPTlRFWFRfMF8wKTsKKwl0LT5leF9jb250ZXh0WzFdID0gX19pbnNuX21mc3ByKFNQUl9FWF9DT05URVhUXzBfMSk7CisJdC0+c3lzdGVtX3NhdmVbMF0gPSBfX2luc25fbWZzcHIoU1BSX1NZU1RFTV9TQVZFXzBfMCk7CisJdC0+c3lzdGVtX3NhdmVbMV0gPSBfX2luc25fbWZzcHIoU1BSX1NZU1RFTV9TQVZFXzBfMSk7CisJdC0+c3lzdGVtX3NhdmVbMl0gPSBfX2luc25fbWZzcHIoU1BSX1NZU1RFTV9TQVZFXzBfMik7CisJdC0+c3lzdGVtX3NhdmVbM10gPSBfX2luc25fbWZzcHIoU1BSX1NZU1RFTV9TQVZFXzBfMyk7CisJdC0+aW50Y3RybF8wID0gX19pbnNuX21mc3ByKFNQUl9JTlRDVFJMXzBfU1RBVFVTKTsKKyNpZiBDSElQX0hBU19QUk9DX1NUQVRVU19TUFIoKQorCXQtPnByb2Nfc3RhdHVzID0gX19pbnNuX21mc3ByKFNQUl9QUk9DX1NUQVRVUyk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcmVzdG9yZV9hcmNoX3N0YXRlKGNvbnN0IHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0KQoreworI2lmIENISVBfSEFTX1NQTElUX0lOVFJfTUFTSygpCisJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfTUFTS18wXzAsICh1MzIpIHQtPmludGVycnVwdF9tYXNrKTsKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLXzBfMSwgdC0+aW50ZXJydXB0X21hc2sgPj4gMzIpOworI2Vsc2UKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9NQVNLXzAsIHQtPmludGVycnVwdF9tYXNrKTsKKyNlbmRpZgorCV9faW5zbl9tdHNwcihTUFJfRVhfQ09OVEVYVF8wXzAsIHQtPmV4X2NvbnRleHRbMF0pOworCV9faW5zbl9tdHNwcihTUFJfRVhfQ09OVEVYVF8wXzEsIHQtPmV4X2NvbnRleHRbMV0pOworCV9faW5zbl9tdHNwcihTUFJfU1lTVEVNX1NBVkVfMF8wLCB0LT5zeXN0ZW1fc2F2ZVswXSk7CisJX19pbnNuX210c3ByKFNQUl9TWVNURU1fU0FWRV8wXzEsIHQtPnN5c3RlbV9zYXZlWzFdKTsKKwlfX2luc25fbXRzcHIoU1BSX1NZU1RFTV9TQVZFXzBfMiwgdC0+c3lzdGVtX3NhdmVbMl0pOworCV9faW5zbl9tdHNwcihTUFJfU1lTVEVNX1NBVkVfMF8zLCB0LT5zeXN0ZW1fc2F2ZVszXSk7CisJX19pbnNuX210c3ByKFNQUl9JTlRDVFJMXzBfU1RBVFVTLCB0LT5pbnRjdHJsXzApOworI2lmIENISVBfSEFTX1BST0NfU1RBVFVTX1NQUigpCisJX19pbnNuX210c3ByKFNQUl9QUk9DX1NUQVRVUywgdC0+cHJvY19zdGF0dXMpOworI2VuZGlmCisjaWYgQ0hJUF9IQVNfVElMRV9SVEZfSFdNKCkKKwkvKgorCSAqIENsZWFyIHRoaXMgd2hlbmV2ZXIgd2Ugc3dpdGNoIGJhY2sgdG8gYSBwcm9jZXNzIGluIGNhc2UKKwkgKiB0aGUgcHJldmlvdXMgcHJvY2VzcyB3YXMgbW9ua2V5aW5nIHdpdGggaXQuICBFdmVuIGlmIGVuYWJsZWQKKwkgKiBpbiBDQk9YX01TUjEgdmlhIFRJTEVfUlRGX0hXTV9NSU4sIGl0J3Mgc3RpbGwganVzdCBhCisJICogcGVyZm9ybWFuY2UgaGludCwgc28gaXNuJ3Qgd29ydGggYSBmdWxsIHNhdmUvcmVzdG9yZS4KKwkgKi8KKwlfX2luc25fbXRzcHIoU1BSX1RJTEVfUlRGX0hXTSwgMCk7CisjZW5kaWYKK30KKworCit2b2lkIF9wcmVwYXJlX2FyY2hfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKK3sKKyNpZiBDSElQX0hBU19TTl9QUk9DKCkKKwlpbnQgc25jdGw7CisjZW5kaWYKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpCisJc3RydWN0IHRpbGVfZG1hX3N0YXRlICpkbWEgPSAmY3VycmVudC0+dGhyZWFkLnRpbGVfZG1hX3N0YXRlOworCWlmIChkbWEtPmVuYWJsZWQpCisJCXNhdmVfdGlsZV9kbWFfc3RhdGUoZG1hKTsKKyNlbmRpZgorI2lmIENISVBfSEFTX1NOX1BST0MoKQorCS8qCisJICogU3VzcGVuZCB0aGUgc3RhdGljIG5ldHdvcmsgcHJvY2Vzc29yIGlmIGl0IHdhcyBydW5uaW5nLgorCSAqIFdlIGRvIG5vdCBzdXNwZW5kIHRoZSBmYWJyaWMgaXRzZWxmLCBqdXN0IGxpa2Ugd2UgZG9uJ3QKKwkgKiB0cnkgdG8gc3VzcGVuZCB0aGUgVUROLgorCSAqLworCXNuY3RsID0gX19pbnNuX21mc3ByKFNQUl9TTkNUTCk7CisJY3VycmVudC0+dGhyZWFkLnNuX3Byb2NfcnVubmluZyA9CisJCShzbmN0bCAmIFNQUl9TTkNUTF9fRlJaUFJPQ19NQVNLKSA9PSAwOworCWlmIChjdXJyZW50LT50aHJlYWQuc25fcHJvY19ydW5uaW5nKQorCQlfX2luc25fbXRzcHIoU1BSX1NOQ1RMLCBzbmN0bCB8IFNQUl9TTkNUTF9fRlJaUFJPQ19NQVNLKTsKKyNlbmRpZgorfQorCisKK3N0cnVjdCB0YXNrX3N0cnVjdCAqX19zY2hlZCBfc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKKwkJCQkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQoreworCS8qIERNQSBzdGF0ZSBpcyBhbHJlYWR5IHNhdmVkOyBzYXZlIG9mZiBvdGhlciBhcmNoIHN0YXRlLiAqLworCXNhdmVfYXJjaF9zdGF0ZSgmcHJldi0+dGhyZWFkKTsKKworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwkvKgorCSAqIFJlc3RvcmUgRE1BIGluIG5ldyB0YXNrIGlmIGRlc2lyZWQuCisJICogTm90ZSB0aGF0IGl0IGlzIG9ubHkgc2FmZSB0byByZXN0YXJ0IGhlcmUgc2luY2UgaW50ZXJydXB0cworCSAqIGFyZSBkaXNhYmxlZCwgc28gd2UgY2FuJ3QgdGFrZSBhbnkgRE1BVExCIG1pc3Mgb3IgYWNjZXNzCisJICogaW50ZXJydXB0cyBiZWZvcmUgd2UgaGF2ZSBmaW5pc2hlZCBzd2l0Y2hpbmcgc3RhY2tzLgorCSAqLworCWlmIChuZXh0LT50aHJlYWQudGlsZV9kbWFfc3RhdGUuZW5hYmxlZCkgeworCQlyZXN0b3JlX3RpbGVfZG1hX3N0YXRlKCZuZXh0LT50aHJlYWQpOworCQlncmFudF9kbWFfbXBscygpOworCX0gZWxzZSB7CisJCXJlc3RyaWN0X2RtYV9tcGxzKCk7CisJfQorI2VuZGlmCisKKwkvKiBSZXN0b3JlIG90aGVyIGFyY2ggc3RhdGUuICovCisJcmVzdG9yZV9hcmNoX3N0YXRlKCZuZXh0LT50aHJlYWQpOworCisjaWYgQ0hJUF9IQVNfU05fUFJPQygpCisJLyoKKwkgKiBSZXN0YXJ0IHN0YXRpYyBuZXR3b3JrIHByb2Nlc3NvciBpbiB0aGUgbmV3IHByb2Nlc3MKKwkgKiBpZiBpdCB3YXMgcnVubmluZyBiZWZvcmUuCisJICovCisJaWYgKG5leHQtPnRocmVhZC5zbl9wcm9jX3J1bm5pbmcpIHsKKwkJaW50IHNuY3RsID0gX19pbnNuX21mc3ByKFNQUl9TTkNUTCk7CisJCV9faW5zbl9tdHNwcihTUFJfU05DVEwsIHNuY3RsICYgflNQUl9TTkNUTF9fRlJaUFJPQ19NQVNLKTsKKwl9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19IQVJEV0FMTAorCS8qIEVuYWJsZSBvciBkaXNhYmxlIGFjY2VzcyB0byB0aGUgbmV0d29yayByZWdpc3RlcnMgYXBwcm9wcmlhdGVseS4gKi8KKwlpZiAocHJldi0+dGhyZWFkLmhhcmR3YWxsICE9IE5VTEwpIHsKKwkJaWYgKG5leHQtPnRocmVhZC5oYXJkd2FsbCA9PSBOVUxMKQorCQkJcmVzdHJpY3RfbmV0d29ya19tcGxzKCk7CisJfSBlbHNlIGlmIChuZXh0LT50aHJlYWQuaGFyZHdhbGwgIT0gTlVMTCkgeworCQlncmFudF9uZXR3b3JrX21wbHMoKTsKKwl9CisjZW5kaWYKKworCS8qCisJICogU3dpdGNoIGtlcm5lbCBTUCwgUEMsIGFuZCBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzLgorCSAqIEluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgdGFzaywgcmV0dXJuIHRoZSBvbGQgdGFzayBwb2ludGVyCisJICogKGkuZS4gdGhlIHRhc2sgdGhhdCBhY3R1YWxseSBjYWxsZWQgX19zd2l0Y2hfdG8pLgorCSAqIFBhc3MgdGhlIHZhbHVlIHRvIHVzZSBmb3IgU1lTVEVNX1NBVkVfMV8wIHdoZW4gd2UgcmVzZXQgb3VyIHNwLgorCSAqLworCXJldHVybiBfX3N3aXRjaF90byhwcmV2LCBuZXh0LCBuZXh0X2N1cnJlbnRfa3NwMChuZXh0KSk7Cit9CisKK2xvbmcgX3N5c19mb3JrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBkb19mb3JrKFNJR0NITEQsIHJlZ3MtPnNwLCByZWdzLCAwLCBOVUxMLCBOVUxMKTsKK30KKworbG9uZyBfc3lzX2Nsb25lKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3c3AsCisJCXZvaWQgX191c2VyICpwYXJlbnRfdGlkcHRyLCB2b2lkIF9fdXNlciAqY2hpbGRfdGlkcHRyLAorCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoIW5ld3NwKQorCQluZXdzcCA9IHJlZ3MtPnNwOworCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgcmVncywgMCwKKwkJICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7Cit9CisKK2xvbmcgX3N5c192Zm9yayhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gZG9fZm9yayhDTE9ORV9WRk9SSyB8IENMT05FX1ZNIHwgU0lHQ0hMRCwgcmVncy0+c3AsCisJCSAgICAgICByZWdzLCAwLCBOVUxMLCBOVUxMKTsKK30KKworLyoKKyAqIHN5c19leGVjdmUoKSBleGVjdXRlcyBhIG5ldyBwcm9ncmFtLgorICovCitsb25nIF9zeXNfZXhlY3ZlKGNoYXIgX191c2VyICpwYXRoLCBjaGFyIF9fdXNlciAqX191c2VyICphcmd2LAorCQkgY2hhciBfX3VzZXIgKl9fdXNlciAqZW52cCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJbG9uZyBlcnJvcjsKKwljaGFyICpmaWxlbmFtZTsKKworCWZpbGVuYW1lID0gZ2V0bmFtZShwYXRoKTsKKwllcnJvciA9IFBUUl9FUlIoZmlsZW5hbWUpOworCWlmIChJU19FUlIoZmlsZW5hbWUpKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGRvX2V4ZWN2ZShmaWxlbmFtZSwgYXJndiwgZW52cCwgcmVncyk7CisJcHV0bmFtZShmaWxlbmFtZSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorbG9uZyBfY29tcGF0X3N5c19leGVjdmUoY2hhciBfX3VzZXIgKnBhdGgsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAorCQkJY29tcGF0X3VwdHJfdCBfX3VzZXIgKmVudnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWxvbmcgZXJyb3I7CisJY2hhciAqZmlsZW5hbWU7CisKKwlmaWxlbmFtZSA9IGdldG5hbWUocGF0aCk7CisJZXJyb3IgPSBQVFJfRVJSKGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKGZpbGVuYW1lKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBjb21wYXRfZG9fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwLCByZWdzKTsKKwlwdXRuYW1lKGZpbGVuYW1lKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisjZW5kaWYKKwordW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3Iga2J0OworCisJaWYgKCFwIHx8IHAgPT0gY3VycmVudCB8fCBwLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCisJCXJldHVybiAwOworCisJZm9yIChLQmFja3RyYWNlSXRlcmF0b3JfaW5pdCgma2J0LCBwLCBOVUxMKTsKKwkgICAgICFLQmFja3RyYWNlSXRlcmF0b3JfZW5kKCZrYnQpOworCSAgICAgS0JhY2t0cmFjZUl0ZXJhdG9yX25leHQoJmtidCkpIHsKKwkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMoa2J0Lml0LnBjKSkKKwkJCXJldHVybiBrYnQuaXQucGM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBwYXNzIGluIGxyIGFzIHplcm8gKGNsZWFyZWQgaW4ga2VybmVsX3RocmVhZCkgYW5kIHRoZSBjYWxsZXIKKyAqIHBhcnQgb2YgdGhlIGJhY2t0cmFjZSBBQkkgb24gdGhlIHN0YWNrIGFsc28gemVyb2VkIChpbiBjb3B5X3RocmVhZCkKKyAqIHNvIHRoYXQgYmFja3RyYWNlcyB3aWxsIHN0b3Agd2l0aCB0aGlzIGZ1bmN0aW9uLgorICogTm90ZSB0aGF0IHdlIGRvbid0IHVzZSByMCwgc2luY2UgY29weV90aHJlYWQoKSBjbGVhcnMgaXQuCisgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X2tlcm5lbF90aHJlYWQoaW50IGR1bW15LCBpbnQgKCpmbikoaW50KSwgaW50IGFyZykKK3sKKwlkb19leGl0KGZuKGFyZykpOworfQorCisvKgorICogQ3JlYXRlIGEga2VybmVsIHRocmVhZAorICovCitpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcHRfcmVncyByZWdzOworCisJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2YocmVncykpOworCXJlZ3MuZXgxID0gUExfSUNTX0VYMShLRVJORUxfUEwsIDApOyAgLyogcnVuIGF0IGtlcm5lbCBQTCwgbm8gSUNTICovCisJcmVncy5wYyA9IChsb25nKSBzdGFydF9rZXJuZWxfdGhyZWFkOworCXJlZ3MuZmxhZ3MgPSBQVF9GTEFHU19DQUxMRVJfU0FWRVM7ICAgLyogbmVlZCB0byByZXN0b3JlIHIxIGFuZCByMiAqLworCXJlZ3MucmVnc1sxXSA9IChsb25nKSBmbjsgICAgICAgICAgICAgLyogZnVuY3Rpb24gcG9pbnRlciAqLworCXJlZ3MucmVnc1syXSA9IChsb25nKSBhcmc7ICAgICAgICAgICAgLyogcGFyYW1ldGVyIHJlZ2lzdGVyICovCisKKwkvKiBPaywgY3JlYXRlIHRoZSBuZXcgcHJvY2Vzcy4uICovCisJcmV0dXJuIGRvX2ZvcmsoZmxhZ3MgfCBDTE9ORV9WTSB8IENMT05FX1VOVFJBQ0VELCAwLCAmcmVncywKKwkJICAgICAgIDAsIE5VTEwsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKKworLyogRmx1c2ggdGhyZWFkIHN0YXRlLiAqLwordm9pZCBmbHVzaF90aHJlYWQodm9pZCkKK3sKKwkvKiBOb3RoaW5nICovCit9CisKKy8qCisgKiBGcmVlIGN1cnJlbnQgdGhyZWFkIGRhdGEgc3RydWN0dXJlcyBldGMuLgorICovCit2b2lkIGV4aXRfdGhyZWFkKHZvaWQpCit7CisJLyogTm90aGluZyAqLworfQorCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHZhbGlkYXRlX2N1cnJlbnQoKTsKKwlpbnQgaTsKKworCXByX2VycigiXG4iKTsKKwlwcl9lcnIoIiBQaWQ6ICVkLCBjb21tOiAlMjBzLCBDUFU6ICVkXG4iLAorCSAgICAgICB0c2stPnBpZCwgdHNrLT5jb21tLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworI2lmZGVmIF9fdGlsZWd4X18KKwlmb3IgKGkgPSAwOyBpIDwgNTE7IGkgKz0gMykKKwkJcHJfZXJyKCIgciUtMmQ6ICJSRUdGTVQiIHIlLTJkOiAiUkVHRk1UIiByJS0yZDogIlJFR0ZNVCJcbiIsCisJCSAgICAgICBpLCByZWdzLT5yZWdzW2ldLCBpKzEsIHJlZ3MtPnJlZ3NbaSsxXSwKKwkJICAgICAgIGkrMiwgcmVncy0+cmVnc1tpKzJdKTsKKwlwcl9lcnIoIiByNTE6ICJSRUdGTVQiIHI1MjogIlJFR0ZNVCIgdHAgOiAiUkVHRk1UIlxuIiwKKwkgICAgICAgcmVncy0+cmVnc1s1MV0sIHJlZ3MtPnJlZ3NbNTJdLCByZWdzLT50cCk7CisJcHJfZXJyKCIgc3AgOiAiUkVHRk1UIiBsciA6ICJSRUdGTVQiXG4iLCByZWdzLT5zcCwgcmVncy0+bHIpOworI2Vsc2UKKwlmb3IgKGkgPSAwOyBpIDwgNTI7IGkgKz0gMykKKwkJcHJfZXJyKCIgciUtMmQ6ICJSRUdGTVQiIHIlLTJkOiAiUkVHRk1UCisJCSAgICAgICAiIHIlLTJkOiAiUkVHRk1UIiByJS0yZDogIlJFR0ZNVCJcbiIsCisJCSAgICAgICBpLCByZWdzLT5yZWdzW2ldLCBpKzEsIHJlZ3MtPnJlZ3NbaSsxXSwKKwkJICAgICAgIGkrMiwgcmVncy0+cmVnc1tpKzJdLCBpKzMsIHJlZ3MtPnJlZ3NbaSszXSk7CisJcHJfZXJyKCIgcjUyOiAiUkVHRk1UIiB0cCA6ICJSRUdGTVQiIHNwIDogIlJFR0ZNVCIgbHIgOiAiUkVHRk1UIlxuIiwKKwkgICAgICAgcmVncy0+cmVnc1s1Ml0sIHJlZ3MtPnRwLCByZWdzLT5zcCwgcmVncy0+bHIpOworI2VuZGlmCisJcHJfZXJyKCIgcGMgOiAiUkVHRk1UIiBleDE6ICVsZCAgICAgZmF1bHRudW06ICVsZFxuIiwKKwkgICAgICAgcmVncy0+cGMsIHJlZ3MtPmV4MSwgcmVncy0+ZmF1bHRudW0pOworCisJZHVtcF9zdGFja19yZWdzKHJlZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvdGlsZS9rZXJuZWwvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2MWJkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvcHRyYWNlLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogQ29waWVkIGZyb20gaTM4NjogUm9zcyBCaXJvIDEvMjMvOTIKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKwordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKK30KKwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TSU5HTEVTVEVQKTsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIHB1dCBhIHdvcmQgb24gdGhlIHByb2Nlc3MncyBwcml2aWxlZ2VkIHN0YWNrLgorICovCitzdGF0aWMgdm9pZCBwdXRyZWcoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJlZ25vID0gYWRkciAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwlzdHJ1Y3QgcHRfcmVncyAqY2hpbGRyZWdzID0gdGFza19wdF9yZWdzKHRhc2spOworCWNoaWxkcmVncy0+cmVnc1tyZWdub10gPSB2YWx1ZTsKKwljaGlsZHJlZ3MtPmZsYWdzIHw9IFBUX0ZMQUdTX1JFU1RPUkVfUkVHUzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0cmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCByZWdubyA9IGFkZHIgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyh0YXNrKTsKKwlyZXR1cm4gY2hpbGRyZWdzLT5yZWdzW3JlZ25vXTsKK30KKworLyoKKyAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgorICovCit2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CisKKwkvKgorCSAqIFRoZXNlIHR3byBhcmUgY3VycmVudGx5IHVudXNlZCwgYnV0IHdpbGwgYmUgc2V0IGJ5IGFyY2hfcHRyYWNlKCkKKwkgKiBhbmQgdXNlZCBpbiB0aGUgc3lzY2FsbCBhc3NlbWJseSB3aGVuIHdlIGRvIHN1cHBvcnQgdGhlbS4KKwkgKi8KKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKK30KKworbG9uZyBhcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBsb25nIHJlcXVlc3QsIGxvbmcgYWRkciwgbG9uZyBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgX191c2VyICpkYXRhcDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlpbnQgaTsKKwlsb25nIHJldCA9IC1FSU87CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJaWYgKHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCktPnN0YXR1cyAmIFRTX0NPTVBBVCkKKwkJZGF0YSA9ICh1MzIpZGF0YTsKKwlpZiAodGFza190aHJlYWRfaW5mbyhjaGlsZCktPnN0YXR1cyAmIFRTX0NPTVBBVCkKKwkJYWRkciA9ICh1MzIpYWRkcjsKKyNlbmRpZgorCWRhdGFwID0gKHVuc2lnbmVkIGxvbmcgX191c2VyIF9fZm9yY2UgKilkYXRhOworCisJc3dpdGNoIChyZXF1ZXN0KSB7CisKKwljYXNlIFBUUkFDRV9QRUVLVVNSOiAgLyogUmVhZCByZWdpc3RlciBmcm9tIHB0X3JlZ3MuICovCisJCWlmIChhZGRyICYgKHNpemVvZihkYXRhKS0xKSkKKwkJCWJyZWFrOworCQlpZiAoYWRkciA8IDAgfHwgYWRkciA+PSBQVFJFR1NfU0laRSkKKwkJCWJyZWFrOworCQl0bXAgPSBnZXRyZWcoY2hpbGQsIGFkZHIpOyAgIC8qIFJlYWQgcmVnaXN0ZXIgKi8KKwkJcmV0ID0gcHV0X3VzZXIodG1wLCBkYXRhcCk7CisJCWJyZWFrOworCisJY2FzZSBQVFJBQ0VfUE9LRVVTUjogIC8qIFdyaXRlIHJlZ2lzdGVyIGluIHB0X3JlZ3MuICovCisJCWlmIChhZGRyICYgKHNpemVvZihkYXRhKS0xKSkKKwkJCWJyZWFrOworCQlpZiAoYWRkciA8IDAgfHwgYWRkciA+PSBQVFJFR1NfU0laRSkKKwkJCWJyZWFrOworCQlwdXRyZWcoY2hpbGQsIGFkZHIsIGRhdGEpOyAgIC8qIFdyaXRlIHJlZ2lzdGVyICovCisJCXJldCA9IDA7CisJCWJyZWFrOworCisJY2FzZSBQVFJBQ0VfR0VUUkVHUzogIC8qIEdldCBhbGwgcmVnaXN0ZXJzIGZyb20gdGhlIGNoaWxkLiAqLworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRhdGFwLCBQVFJFR1NfU0laRSkpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IFBUUkVHU19TSVpFOyBpICs9IHNpemVvZihsb25nKSkgeworCQkJcmV0ID0gX19wdXRfdXNlcihnZXRyZWcoY2hpbGQsIGkpLCBkYXRhcCk7CisJCQlpZiAocmV0ICE9IDApCisJCQkJYnJlYWs7CisJCQlkYXRhcCsrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQVFJBQ0VfU0VUUkVHUzogIC8qIFNldCBhbGwgcmVnaXN0ZXJzIGluIHRoZSBjaGlsZC4gKi8KKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGRhdGFwLCBQVFJFR1NfU0laRSkpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IFBUUkVHU19TSVpFOyBpICs9IHNpemVvZihsb25nKSkgeworCQkJcmV0ID0gX19nZXRfdXNlcih0bXAsIGRhdGFwKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlicmVhazsKKwkJCXB1dHJlZyhjaGlsZCwgaSwgdG1wKTsKKwkJCWRhdGFwKys7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBUUkFDRV9HRVRGUFJFR1M6ICAvKiBHZXQgdGhlIGNoaWxkIEZQVSBzdGF0ZS4gKi8KKwljYXNlIFBUUkFDRV9TRVRGUFJFR1M6ICAvKiBTZXQgdGhlIGNoaWxkIEZQVSBzdGF0ZS4gKi8KKwkJYnJlYWs7CisKKwljYXNlIFBUUkFDRV9TRVRPUFRJT05TOgorCQkvKiBTdXBwb3J0IFRJTEUtc3BlY2lmaWMgcHRyYWNlIG9wdGlvbnMuICovCisJCWNoaWxkLT5wdHJhY2UgJj0gflBUX1RSQUNFX01BU0tfVElMRTsKKwkJdG1wID0gZGF0YSAmIFBUUkFDRV9PX01BU0tfVElMRTsKKwkJZGF0YSAmPSB+UFRSQUNFX09fTUFTS19USUxFOworCQlyZXQgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7CisJCWlmICh0bXAgJiBQVFJBQ0VfT19UUkFDRU1JR1JBVEUpCisJCQljaGlsZC0+cHRyYWNlIHw9IFBUX1RSQUNFX01JR1JBVEU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCWlmICh0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpLT5zdGF0dXMgJiBUU19DT01QQVQpIHsKKwkJCXJldCA9IGNvbXBhdF9wdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwKKwkJCQkJCSAgICBhZGRyLCBkYXRhKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorLyogTm90IHVzZWQ7IHdlIGhhbmRsZSBjb21wYXQgaXNzdWVzIGluIGFyY2hfcHRyYWNlKCkgZGlyZWN0bHkuICovCitsb25nIGNvbXBhdF9hcmNoX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBjb21wYXRfbG9uZ190IHJlcXVlc3QsCisJCQkgICAgICAgY29tcGF0X3Vsb25nX3QgYWRkciwgY29tcGF0X3Vsb25nX3QgZGF0YSkKK3sKKwlCVUcoKTsKK30KKyNlbmRpZgorCit2b2lkIGRvX3N5c2NhbGxfdHJhY2Uodm9pZCkKK3sKKwlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQorCQlyZXR1cm47CisKKwlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgMHg4MCBwcm92aWRlcyBhIHdheSBmb3IgdGhlIHRyYWNpbmcgcGFyZW50IHRvIGRpc3Rpbmd1aXNoCisJICogYmV0d2VlbiBhIHN5c2NhbGwgc3RvcCBhbmQgU0lHVFJBUCBkZWxpdmVyeQorCSAqLworCXB0cmFjZV9ub3RpZnkoU0lHVFJBUHwoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkgPyAweDgwIDogMCkpOworCisJLyoKKwkgKiB0aGlzIGlzbid0IHRoZSBzYW1lIGFzIGNvbnRpbnVpbmcgd2l0aCBhIHNpZ25hbCwgYnV0IGl0IHdpbGwgZG8KKwkgKiBmb3Igbm9ybWFsIHVzZS4gIHN0cmFjZSBvbmx5IGNvbnRpbnVlcyB3aXRoIGEgc2lnbmFsIGlmIHRoZQorCSAqIHN0b3BwaW5nIHNpZ25hbCBpcyBub3QgU0lHVFJBUC4gIC1icmwKKwkgKi8KKwlpZiAoY3VycmVudC0+ZXhpdF9jb2RlKSB7CisJCXNlbmRfc2lnKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7CisJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CisJfQorfQorCit2b2lkIHNlbmRfc2lndHJhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlcnJvcl9jb2RlKQoreworCXN0cnVjdCBzaWdpbmZvIGluZm87CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7CisJaW5mby5zaV9jb2RlICA9IFRSQVBfQlJLUFQ7CisJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKSByZWdzLT5wYzsKKworCS8qIFNlbmQgdXMgdGhlIGZha2V5IFNJR1RSQVAgKi8KKwlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgdHNrKTsKK30KKworLyogSGFuZGxlIHN5bnRoZXRpYyBpbnRlcnJ1cHQgZGVsaXZlcmVkIG9ubHkgYnkgdGhlIHNpbXVsYXRvci4gKi8KK3ZvaWQgX19rcHJvYmVzIGRvX2JyZWFrcG9pbnQoc3RydWN0IHB0X3JlZ3MqIHJlZ3MsIGludCBmYXVsdF9udW0pCit7CisJc2VuZF9zaWd0cmFwKGN1cnJlbnQsIHJlZ3MsIGZhdWx0X251bSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3JlYm9vdC5jIGIvYXJjaC90aWxlL2tlcm5lbC9yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Q4NmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9yZWJvb3QuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisjaWZuZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgc21wX3NlbmRfc3RvcCgpCisjZW5kaWYKKwordm9pZCBtYWNoaW5lX2hhbHQodm9pZCkKK3sKKwl3YXJuX2Vhcmx5X3ByaW50aygpOworCXJhd19sb2NhbF9pcnFfZGlzYWJsZV9hbGwoKTsKKwlzbXBfc2VuZF9zdG9wKCk7CisJaHZfaGFsdCgpOworfQorCit2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJd2Fybl9lYXJseV9wcmludGsoKTsKKwlyYXdfbG9jYWxfaXJxX2Rpc2FibGVfYWxsKCk7CisJc21wX3NlbmRfc3RvcCgpOworCWh2X3Bvd2VyX29mZigpOworfQorCit2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICpjbWQpCit7CisJcmF3X2xvY2FsX2lycV9kaXNhYmxlX2FsbCgpOworCXNtcF9zZW5kX3N0b3AoKTsKKwlodl9yZXN0YXJ0KChIVl9WaXJ0QWRkcikgInZtbGludXgiLCAoSFZfVmlydEFkZHIpIGNtZCk7Cit9CisKKy8qIE5vIGludGVyZXN0aW5nIGRpc3RpbmN0aW9uIHRvIGJlIG1hZGUgaGVyZS4gKi8KK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcmVnc18zMi5TIGIvYXJjaC90aWxlL2tlcm5lbC9yZWdzXzMyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4ZDZlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL3JlZ3NfMzIuUwpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXJjaC9zcHJfZGVmLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisvKgorICogU2VlIDxhc20vc3lzdGVtLmg+OyBjYWxsZWQgd2l0aCBwcmV2IGFuZCBuZXh0IHRhc2tfc3RydWN0IHBvaW50ZXJzLgorICogInByZXYiIGlzIHJldHVybmVkIGluIHIwIGZvciBfc3dpdGNoX3RvIGFuZCBhbHNvIGZvciByZXRfZnJvbV9mb3JrLgorICoKKyAqIFdlIHdhbnQgdG8gc2F2ZSBwYy9zcCBpbiAicHJldiIsIGFuZCBnZXQgdGhlIG5ldyBwYy9zcCBmcm9tICJuZXh0Ii4KKyAqIFdlIGFsc28gbmVlZCB0byBzYXZlIGFsbCB0aGUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2suCisgKgorICogSW50ZWwgZW5hYmxlcy9kaXNhYmxlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGN5Y2xlIGNvdW50ZXIgaW4KKyAqIHNlY2NvbXAgKHNlY3VyZSBjb21wdXRpbmcpIGVudmlyb25tZW50cyBpZiBuZWNlc3NhcnksIGJhc2VkIG9uCisgKiBoYXNfc2VjdXJlX2NvbXB1dGluZygpLiAgV2UgbWlnaHQgd2FudCB0byBkbyB0aGlzIGF0IHNvbWUgcG9pbnQsCisgKiB0aG91Z2ggaXQgd291bGQgcmVxdWlyZSB2aXJ0dWFsaXppbmcgdGhlIG90aGVyIFNQUnMgdW5kZXIgV09STERfQUNDRVNTLgorICoKKyAqIFNpbmNlIHdlJ3JlIHNhdmluZyB0byB0aGUgc3RhY2ssIHdlIG9taXQgc3AgZnJvbSB0aGlzIGxpc3QuCisgKiBBbmQgZm9yIHBhcmFsbGVscyB3aXRoIG90aGVyIGFyY2hpdGVjdHVyZXMsIHdlIHNhdmUgbHIgc2VwYXJhdGVseSwKKyAqIGluIHRoZSB0aHJlYWRfc3RydWN0IGl0c2VsZiAoYXMgdGhlICJwYyIgZmllbGQpLgorICoKKyAqIFRoaXMgY29kZSBhbHNvIG5lZWRzIHRvIGJlIGFsaWduZWQgd2l0aCBwcm9jZXNzLmMgY29weV90aHJlYWQoKQorICovCisKKyNpZiBDQUxMRUVfU0FWRURfUkVHU19DT1VOVCAhPSAyNAorIyBlcnJvciBNaXNtYXRjaCBiZXR3ZWVuIDxhc20vc3lzdGVtLmg+IGFuZCBrZXJuZWwvZW50cnkuUworI2VuZGlmCisjZGVmaW5lIEZSQU1FX1NJWkUgKCgyICsgQ0FMTEVFX1NBVkVEX1JFR1NfQ09VTlQpICogNCkKKworI2RlZmluZSBTQVZFX1JFRyhyKSB7IHN3IHIxMiwgcjsgYWRkaSByMTIsIHIxMiwgNCB9CisjZGVmaW5lIExPQURfUkVHKHIpIHsgbHcgciwgcjEyOyBhZGRpIHIxMiwgcjEyLCA0IH0KKyNkZWZpbmUgRk9SX0VBQ0hfQ0FMTEVFX1NBVkVEX1JFRyhmKQkJCQkJXAorCQkJCQkJCWYocjMwKTsgZihyMzEpOyBcCisJZihyMzIpOyBmKHIzMyk7IGYocjM0KTsgZihyMzUpOwlmKHIzNik7IGYocjM3KTsgZihyMzgpOyBmKHIzOSk7IFwKKwlmKHI0MCk7IGYocjQxKTsgZihyNDIpOyBmKHI0Myk7IGYocjQ0KTsgZihyNDUpOyBmKHI0Nik7IGYocjQ3KTsgXAorCWYocjQ4KTsgZihyNDkpOyBmKHI1MCk7IGYocjUxKTsgZihyNTIpOworCitTVERfRU5UUllfU0VDVElPTihfX3N3aXRjaF90bywgLnNjaGVkLnRleHQpCisJeworCSAgbW92ZSByMTAsIHNwCisJICBzdyBzcCwgbHIKKwkgIGFkZGkgc3AsIHNwLCAtRlJBTUVfU0laRQorCX0KKwl7CisJICBhZGRpIHIxMSwgc3AsIDQKKwkgIGFkZGkgcjEyLCBzcCwgOAorCX0KKwl7CisJICBzdyByMTEsIHIxMAorCSAgYWRkbGkgcjQsIHIxLCBUQVNLX1NUUlVDVF9USFJFQURfS1NQX09GRlNFVAorCX0KKwl7CisJICBsdyByMTMsIHI0ICAgLyogTG9hZCBuZXcgc3AgdG8gYSB0ZW1wIHJlZ2lzdGVyIGVhcmx5LiAqLworCSAgYWRkbGkgcjMsIHIwLCBUQVNLX1NUUlVDVF9USFJFQURfS1NQX09GRlNFVAorCX0KKwlGT1JfRUFDSF9DQUxMRUVfU0FWRURfUkVHKFNBVkVfUkVHKQorCXsKKwkgIHN3IHIzLCBzcAorCSAgYWRkbGkgcjMsIHIwLCBUQVNLX1NUUlVDVF9USFJFQURfUENfT0ZGU0VUCisJfQorCXsKKwkgIHN3IHIzLCBscgorCSAgYWRkbGkgcjQsIHIxLCBUQVNLX1NUUlVDVF9USFJFQURfUENfT0ZGU0VUCisJfQorCXsKKwkgIGx3IGxyLCByNAorCSAgYWRkaSByMTIsIHIxMywgOAorCX0KKwl7CisJICAvKiBVcGRhdGUgc3AgYW5kIGtzcDAgc2ltdWx0YW5lb3VzbHkgdG8gYXZvaWQgYmFja3RyYWNlciB3YXJuaW5ncy4gKi8KKwkgIG1vdmUgc3AsIHIxMworCSAgbXRzcHIgU1lTVEVNX1NBVkVfMV8wLCByMgorCX0KKwlGT1JfRUFDSF9DQUxMRUVfU0FWRURfUkVHKExPQURfUkVHKQorLkxfX3N3aXRjaF90b19wYzoKKwl7CisJICBhZGRpIHNwLCBzcCwgRlJBTUVfU0laRQorCSAganJwIGxyICAgLyogcjAgaXMgc3RpbGwgdmFsaWQgaGVyZSwgc28gcmV0dXJuIGl0ICovCisJfQorCVNURF9FTkRQUk9DKF9fc3dpdGNoX3RvKQorCisvKiBSZXR1cm4gYSBzdWl0YWJsZSBhZGRyZXNzIGZvciB0aGUgYmFja3RyYWNlciBmb3Igc3VzcGVuZGVkIHRocmVhZHMgKi8KK1NURF9FTlRSWV9TRUNUSU9OKGdldF9zd2l0Y2hfdG9fcGMsIC5zY2hlZC50ZXh0KQorCWxuayByMAorCXsKKwkgIGFkZGxpIHIwLCByMCwgLkxfX3N3aXRjaF90b19wYyAtIC4KKwkgIGpycCBscgorCX0KKwlTVERfRU5EUFJPQyhnZXRfc3dpdGNoX3RvX3BjKQorCitTVERfRU5UUlkoZ2V0X3B0X3JlZ3MpCisJLmlycCByZWcsIHIwLCByMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByNywgXAorCQkgcjgsIHI5LCByMTAsIHIxMSwgcjEyLCByMTMsIHIxNCwgcjE1LCBcCisJCSByMTYsIHIxNywgcjE4LCByMTksIHIyMCwgcjIxLCByMjIsIHIyMywgXAorCQkgcjI0LCByMjUsIHIyNiwgcjI3LCByMjgsIHIyOSwgcjMwLCByMzEsIFwKKwkJIHIzMiwgcjMzLCByMzQsIHIzNSwgcjM2LCByMzcsIHIzOCwgcjM5LCBcCisJCSByNDAsIHI0MSwgcjQyLCByNDMsIHI0NCwgcjQ1LCByNDYsIHI0NywgXAorCQkgcjQ4LCByNDksIHI1MCwgcjUxLCByNTIsIHRwLCBzcAorCXsKKwkgc3cgcjAsIFxyZWcKKwkgYWRkaSByMCwgcjAsIDQKKwl9CisJLmVuZHIKKwl7CisJIHN3IHIwLCBscgorCSBhZGRpIHIwLCByMCwgUFRSRUdTX09GRlNFVF9QQyAtIFBUUkVHU19PRkZTRVRfTFIKKwl9CisJbG5rIHIxCisJeworCSBzdyByMCwgcjEKKwkgYWRkaSByMCwgcjAsIFBUUkVHU19PRkZTRVRfRVgxIC0gUFRSRUdTX09GRlNFVF9QQworCX0KKwltZnNwciByMSwgSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04KKwlzaGxpIHIxLCByMSwgU1BSX0VYX0NPTlRFWFRfMV8xX19JQ1NfU0hJRlQKKwlvcmkgcjEsIHIxLCBLRVJORUxfUEwKKwl7CisJIHN3IHIwLCByMQorCSBhZGRpIHIwLCByMCwgUFRSRUdTX09GRlNFVF9GQVVMVE5VTSAtIFBUUkVHU19PRkZTRVRfRVgxCisJfQorCXsKKwkgc3cgcjAsIHplcm8gICAgICAgLyogY2xlYXIgZmF1bHRudW0gKi8KKwkgYWRkaSByMCwgcjAsIFBUUkVHU19PRkZTRVRfT1JJR19SMCAtIFBUUkVHU19PRkZTRVRfRkFVTFROVU0KKwl9CisJeworCSBzdyByMCwgemVybyAgICAgICAvKiBjbGVhciBvcmlnX3IwICovCisJIGFkZGxpIHIwLCByMCwgLVBUUkVHU19PRkZTRVRfT1JJR19SMCAgICAvKiByZXN0b3JlIHIwIHRvIGJhc2UgKi8KKwl9CisJanJwIGxyCisJU1REX0VORFBST0MoZ2V0X3B0X3JlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIGIvYXJjaC90aWxlL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBiNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwpAQCAtMCwwICsxLDI4MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBjb3B5IG5ldyBrZXJuZWwgaW50byBwbGFjZSBhbmQgdGhlbiBjYWxsIGh2X3JlZXhlYworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisjZGVmaW5lIF9fX2h2YglNRU1fU1ZfSU5UUlBUICsgSFZfR0xVRV9TVEFSVF9DUEEKKworI2RlZmluZSBfX19odl9kaXNwYXRjaChmKSAoX19faHZiICsgKEhWX0RJU1BBVENIX0VOVFJZX1NJWkUgKiBmKSkKKworI2RlZmluZSBfX19odl9jb25zb2xlX3B1dGMgX19faHZfZGlzcGF0Y2goSFZfRElTUEFUQ0hfQ09OU09MRV9QVVRDKQorI2RlZmluZSBfX19odl9oYWx0ICAgICAgICAgX19faHZfZGlzcGF0Y2goSFZfRElTUEFUQ0hfSEFMVCkKKyNkZWZpbmUgX19faHZfcmVleGVjICAgICAgIF9fX2h2X2Rpc3BhdGNoKEhWX0RJU1BBVENIX1JFRVhFQykKKyNkZWZpbmUgX19faHZfZmx1c2hfcmVtb3RlIF9fX2h2X2Rpc3BhdGNoKEhWX0RJU1BBVENIX0ZMVVNIX1JFTU9URSkKKworI3VuZGVmIFJFTE9DQVRFX05FV19LRVJORUxfVkVSQk9TRQorCitTVERfRU5UUlkocmVsb2NhdGVfbmV3X2tlcm5lbCkKKworCW1vdmUJcjMwLCByMAkJLyogcGFnZSBsaXN0ICovCisJbW92ZQlyMzEsIHIxCQkvKiBhZGRyZXNzIG9mIHBhZ2Ugd2UgYXJlIG9uICovCisJbW92ZQlyMzIsIHIyCQkvKiBzdGFydCBhZGRyZXNzIG9mIG5ldyBrZXJuZWwgKi8KKworCXNocmkJcjEsIHIxLCBQQUdFX1NISUZUCisJYWRkaQlyMSwgcjEsIDEKKwlzaGxpCXNwLCByMSwgUEFHRV9TSElGVAorCWFkZGkJc3AsIHNwLCAtOAorCS8qIHdlIG5vdyBoYXZlIGEgc3RhY2sgKHdoZXRoZXIgd2UgbmVlZCBvbmUgb3Igbm90KSAqLworCisJbW92ZWxpCXI0MCwgbG8xNihfX19odl9jb25zb2xlX3B1dGMpCisJYXVsaQlyNDAsIHI0MCwgaGExNihfX19odl9jb25zb2xlX3B1dGMpCisKKyNpZmRlZiBSRUxPQ0FURV9ORVdfS0VSTkVMX1ZFUkJPU0UKKwltb3ZlbGkJcjAsICdyJworCWphbHIJcjQwCisKKwltb3ZlbGkJcjAsICdfJworCWphbHIJcjQwCisKKwltb3ZlbGkJcjAsICduJworCWphbHIJcjQwCisKKwltb3ZlbGkJcjAsICdfJworCWphbHIJcjQwCisKKwltb3ZlbGkJcjAsICdrJworCWphbHIJcjQwCisKKwltb3ZlbGkJcjAsICdcbicKKwlqYWxyCXI0MAorI2VuZGlmCisKKwkvKgorCSAqIFRocm91Z2hvdXQgdGhpcyBjb2RlIHIzMCBpcyBwb2ludGVyIHRvIHRoZSBlbGVtZW50IG9mIHBhZ2UKKwkgKiBsaXN0IHdlIGFyZSB3b3JraW5nIG9uLgorCSAqCisJICogTm9ybWFsbHkgd2UgZ2V0IHRvIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlIHBhZ2UgbGlzdCBieQorCSAqIGluY3JlbWVudGluZyByMzAgYnkgZm91ci4gIFRoZSBleGNlcHRpb24gaXMgaWYgdGhlIGVsZW1lbnQKKwkgKiBvbiB0aGUgcGFnZSBsaXN0IGlzIGFuIElORF9JTkRJUkVDVElPTiBpbiB3aGljaCBjYXNlIHdlIHVzZQorCSAqIHRoZSBlbGVtZW50IHdpdGggdGhlIGxvdyBiaXRzIG1hc2tlZCBvZmYgYXMgdGhlIG5ldyB2YWx1ZQorCSAqIG9mIHIzMC4KKwkgKgorCSAqIFRvIGdldCB0aGlzIHN0YXJ0ZWQsIHdlIG5lZWQgdGhlIHZhbHVlIHBhc3NlZCB0byB1cyAod2hpY2gKKwkgKiB3aWxsIGFsd2F5cyBiZSBhbiBJTkRfSU5ESVJFQ1RJT04pIGluIG1lbW9yeSBzb21ld2hlcmUgd2l0aAorCSAqIHIzMCBwb2ludGluZyBhdCBpdC4gIFRvIGRvIHRoYXQsIHdlIHB1c2ggdGhlIHZhbHVlIHBhc3NlZAorCSAqIHRvIHVzIG9uIHRoZSBzdGFjayBhbmQgbWFrZSByMzAgcG9pbnQgdG8gaXQuCisJICovCisKKwlzdwlzcCwgcjMwCisJbW92ZQlyMzAsIHNwCisJYWRkaQlzcCwgc3AsIC04CisKKyNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKKwkvKgorCSAqIE9uIFRJTEVQcm8sIHdlIG5lZWQgdG8gZmx1c2ggYWxsIHRpbGVzJyBjYWNoZXMsIHNpbmNlIHdlIG1heQorCSAqIGhhdmUgYmVlbiBkb2luZyBoYXNoLWZvci1ob21lIGNhY2hpbmcgdGhlcmUuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IGRvIHRoaXMgX2FmdGVyXyB3ZSdyZSBjb21wbGV0ZWx5IGRvbmUgbW9kaWZ5aW5nIGFueSBtZW1vcnkKKwkgKiBvdGhlciB0aGFuIG91ciBvdXRwdXQgYnVmZmVyICh3aGljaCB3ZSBrbm93IGlzIGxvY2FsbHkgY2FjaGVkKS4KKwkgKiBXZSB3YW50IHRoZSBjYWNoZXMgdG8gYmUgZnVsbHkgY2xlYW4gd2hlbiB3ZSBkbyB0aGUgcmVleGVjLAorCSAqIGJlY2F1c2UgdGhlIGh5cGVydmlzb3IgaXMgZ29pbmcgdG8gZG8gdGhpcyBmbHVzaCBhZ2FpbiBhdCB0aGF0CisJICogcG9pbnQsIGFuZCB3ZSBkb24ndCB3YW50IHRoYXQgc2Vjb25kIGZsdXNoIHRvIG92ZXJ3cml0ZSBhbnkgbWVtb3J5LgorCSAqLworCXsKKwkgbW92ZQlyMCwgemVybwkgLyogY2FjaGVfcGEgKi8KKwkgbW92ZQlyMSwgemVybworCX0KKwl7CisJIGF1bGkJcjIsIHplcm8sIGhhMTYoSFZfRkxVU0hfRVZJQ1RfTDIpIC8qIGNhY2hlX2NvbnRyb2wgKi8KKwkgbW92ZWkJcjMsIC0xCQkgLyogY2FjaGVfY3B1bWFzazsgLTEgbWVhbnMgYWxsIGNsaWVudCB0aWxlcyAqLworCX0KKwl7CisJIG1vdmUJcjQsIHplcm8JIC8qIHRsYl92YSAqLworCSBtb3ZlCXI1LCB6ZXJvCSAvKiB0bGJfbGVuZ3RoICovCisJfQorCXsKKwkgbW92ZQlyNiwgemVybwkgLyogdGxiX3Bnc2l6ZSAqLworCSBtb3ZlCXI3LCB6ZXJvCSAvKiB0bGJfY3B1bWFzayAqLworCX0KKwl7CisJIG1vdmUJcjgsIHplcm8JIC8qIGFzaWRzICovCisJIG1vdmVsaQlyMjAsIGxvMTYoX19faHZfZmx1c2hfcmVtb3RlKQorCX0KKwl7CisJIG1vdmUJcjksIHplcm8JIC8qIGFzaWRjb3VudCAqLworCSBhdWxpCXIyMCwgcjIwLCBoYTE2KF9fX2h2X2ZsdXNoX3JlbW90ZSkKKwl9CisKKwlqYWxyCXIyMAorI2VuZGlmCisKKwkvKiByMzMgaXMgZGVzdGluYXRpb24gcG9pbnRlciwgZGVmYXVsdCB0byB6ZXJvICovCisKKwltb3ZlbGkJcjMzLCAwCisKKy5MbG9vcDoJbHcJcjEwLCByMzAKKworCWFuZGkJcjksIHIxMCwgMHhmCS8qIGxvdyA0IGJpdHMgdGVsbCB1cyB3aGF0IHR5cGUgaXQgaXMgKi8KKwl4b3IJcjEwLCByMTAsIHI5CS8qIHIxMCBpcyBub3cgdmFsdWUgd2l0aCBsb3cgNCBiaXRzIHN0cmlwcGVkICovCisKKwlzZXFpCXIwLCByOSwgMHgxCS8qIElORF9ERVNUSU5BVElPTiAqLworCWJ6dAlyMCwgLkx0cnkyCisKKwltb3ZlCXIzMywgcjEwCisKKyNpZmRlZiBSRUxPQ0FURV9ORVdfS0VSTkVMX1ZFUkJPU0UKKwltb3ZlbGkJcjAsICdkJworCWphbHIJcjQwCisjZW5kaWYKKworCWFkZGkJcjMwLCByMzAsIDQKKwlqCS5MbG9vcAorCisuTHRyeTI6CisJc2VxaQlyMCwgcjksIDB4MgkvKiBJTkRfSU5ESVJFQ1RJT04gKi8KKwlienQJcjAsIC5MdHJ5NAorCisJbW92ZQlyMzAsIHIxMAorCisjaWZkZWYgUkVMT0NBVEVfTkVXX0tFUk5FTF9WRVJCT1NFCisJbW92ZWxpCXIwLCAnaScKKwlqYWxyCXI0MAorI2VuZGlmCisKKwlqCS5MbG9vcAorCisuTHRyeTQ6CisJc2VxaQlyMCwgcjksIDB4NAkvKiBJTkRfRE9ORSAqLworCWJ6dAlyMCwgLkx0cnk4CisKKwltZgorCisjaWZkZWYgUkVMT0NBVEVfTkVXX0tFUk5FTF9WRVJCT1NFCisJbW92ZWxpCXIwLCAnRCcKKwlqYWxyCXI0MAorCW1vdmVsaQlyMCwgJ1xuJworCWphbHIJcjQwCisjZW5kaWYKKworCW1vdmUJcjAsIHIzMgorCW1vdmVsaQlyMSwgMAkJLyogYXJnIHRvIGh2X3JlZXhlYyBpcyA2NCBiaXRzICovCisKKwltb3ZlbGkJcjQxLCBsbzE2KF9fX2h2X3JlZXhlYykKKwlhdWxpCXI0MSwgcjQxLCBoYTE2KF9fX2h2X3JlZXhlYykKKworCWphbHIJcjQxCisKKwkvKiB3ZSBzaG91bGQgbm90IGdldCBoZXJlICovCisKKwltb3ZlbGkJcjAsICc/JworCWphbHIJcjQwCisJbW92ZWxpCXIwLCAnXG4nCisJamFscglyNDAKKworCWoJLkxoYWx0CisKKy5MdHJ5ODoJc2VxaQlyMCwgcjksIDB4OAkvKiBJTkRfU09VUkNFICovCisJYnoJcjAsIC5MZXJyCS8qIHVua25vd24gdHlwZSAqLworCisJLyogY29weSBwYWdlIGF0IHIxMCB0byBwYWdlIGF0IHIzMyAqLworCisJbW92ZQlyMTEsIHIzMworCisJbW92ZWxpCXIwLCBsbzE2KFBBR0VfU0laRSkKKwlhdWxpCXIwLCByMCwgaGExNihQQUdFX1NJWkUpCisJYWRkCXIzMywgcjMzLCByMAorCisJLyogY29weSB3b3JkIGF0IHIxMCB0byB3b3JkIGF0IHIxMSB1bnRpbCByMTEgZXF1YWxzIHIzMyAqLworCisJLyogV2Uga25vdyBwYWdlIHNpemUgbXVzdCBiZSBtdWx0aXBsZSBvZiAxNiwgc28gd2UgY2FuIHVucm9sbAorCSAqIDE2IHRpbWVzIHNhZmVseSB3aXRob3V0IGFueSBlZGdlIGNhc2UgY2hlY2tpbmcuCisJICoKKwkgKiBJc3N1ZSBhIGZsdXNoIG9mIHRoZSBkZXN0aW5hdGlvbiBldmVyeSAxNiB3b3JkcyB0byBhdm9pZAorCSAqIGluY29oZXJlbmNlIHdoZW4gc3RhcnRpbmcgdGhlIG5ldyBrZXJuZWwuICAoTm93IHRoaXMgaXMKKwkgKiBqdXN0IGdvb2QgcGFyYW5vaWEgYmVjYXVzZSB0aGUgaHZfcmVleGVjIGNhbGwgd2lsbCBhbHNvCisJICogdGFrZSBjYXJlIG9mIHRoaXMuKQorCSAqLworCisxOgorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwOyBhZGRpCXIxMSwgcjExLCA0IH0KKwl7IGx3CXIwLCByMTA7IGFkZGkJcjEwLCByMTAsIDQgfQorCXsgc3cJcjExLCByMDsgYWRkaQlyMTEsIHIxMSwgNCB9CisJeyBsdwlyMCwgcjEwOyBhZGRpCXIxMCwgcjEwLCA0IH0KKwl7IHN3CXIxMSwgcjA7IGFkZGkJcjExLCByMTEsIDQgfQorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwOyBhZGRpCXIxMSwgcjExLCA0IH0KKwl7IGx3CXIwLCByMTA7IGFkZGkJcjEwLCByMTAsIDQgfQorCXsgc3cJcjExLCByMDsgYWRkaQlyMTEsIHIxMSwgNCB9CisJeyBsdwlyMCwgcjEwOyBhZGRpCXIxMCwgcjEwLCA0IH0KKwl7IHN3CXIxMSwgcjA7IGFkZGkJcjExLCByMTEsIDQgfQorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwOyBhZGRpCXIxMSwgcjExLCA0IH0KKwl7IGx3CXIwLCByMTA7IGFkZGkJcjEwLCByMTAsIDQgfQorCXsgc3cJcjExLCByMDsgYWRkaQlyMTEsIHIxMSwgNCB9CisJeyBsdwlyMCwgcjEwOyBhZGRpCXIxMCwgcjEwLCA0IH0KKwl7IHN3CXIxMSwgcjA7IGFkZGkJcjExLCByMTEsIDQgfQorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwOyBhZGRpCXIxMSwgcjExLCA0IH0KKwl7IGx3CXIwLCByMTA7IGFkZGkJcjEwLCByMTAsIDQgfQorCXsgc3cJcjExLCByMDsgYWRkaQlyMTEsIHIxMSwgNCB9CisJeyBsdwlyMCwgcjEwOyBhZGRpCXIxMCwgcjEwLCA0IH0KKwl7IHN3CXIxMSwgcjA7IGFkZGkJcjExLCByMTEsIDQgfQorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwOyBhZGRpCXIxMSwgcjExLCA0IH0KKwl7IGx3CXIwLCByMTA7IGFkZGkJcjEwLCByMTAsIDQgfQorCXsgc3cJcjExLCByMDsgYWRkaQlyMTEsIHIxMSwgNCB9CisJeyBsdwlyMCwgcjEwOyBhZGRpCXIxMCwgcjEwLCA0IH0KKwl7IHN3CXIxMSwgcjA7IGFkZGkJcjExLCByMTEsIDQgfQorCXsgbHcJcjAsIHIxMDsgYWRkaQlyMTAsIHIxMCwgNCB9CisJeyBzdwlyMTEsIHIwIH0KKwl7IGZsdXNoIHIxMSAgICA7IGFkZGkJcjExLCByMTEsIDQgfQorCisJc2VxCXIwLCByMzMsIHIxMQorCWJ6dAlyMCwgMWIKKworI2lmZGVmIFJFTE9DQVRFX05FV19LRVJORUxfVkVSQk9TRQorCW1vdmVsaQlyMCwgJ3MnCisJamFscglyNDAKKyNlbmRpZgorCisJYWRkaQlyMzAsIHIzMCwgNAorCWoJLkxsb29wCisKKworLkxlcnI6CW1vdmVsaQlyMCwgJ2UnCisJamFscglyNDAKKwltb3ZlbGkJcjAsICdyJworCWphbHIJcjQwCisJbW92ZWxpCXIwLCAncicKKwlqYWxyCXI0MAorCW1vdmVsaQlyMCwgJ1xuJworCWphbHIJcjQwCisuTGhhbHQ6CisJbW92ZWxpCXI0MSwgbG8xNihfX19odl9oYWx0KQorCWF1bGkJcjQxLCByNDEsIGhhMTYoX19faHZfaGFsdCkKKworCWphbHIJcjQxCisJU1REX0VORFBST0MocmVsb2NhdGVfbmV3X2tlcm5lbCkKKworCS5zZWN0aW9uIC5yb2RhdGEsImEiCisKKwkuZ2xvYmwgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplCityZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU6CisJLmxvbmcgLkxlbmRfcmVsb2NhdGVfbmV3X2tlcm5lbCAtIHJlbG9jYXRlX25ld19rZXJuZWwKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGQyMWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9zZXR1cC5jCkBAIC0wLDAgKzEsMTUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8YXJjaC9pbnRlcnJ1cHRzLmg+CisKKy8qIDxsaW51eC9zbXAuaD4gZG9lc24ndCBwcm92aWRlIHRoaXMgZGVmaW5pdGlvbi4gKi8KKyNpZm5kZWYgQ09ORklHX1NNUAorI2RlZmluZSBzZXR1cF9tYXhfY3B1cyAxCisjZW5kaWYKKworc3RhdGljIGlubGluZSBpbnQgQUJTKGludCB4KSB7IHJldHVybiB4ID49IDAgPyB4IDogLXg7IH0KKworLyogQ2hpcCBpbmZvcm1hdGlvbiAqLworY2hhciBjaGlwX21vZGVsWzY0XSBfX3dyaXRlX29uY2U7CisKK3N0cnVjdCBwZ2xpc3RfZGF0YSBub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOworCisvKiBXZSBvbmx5IGNyZWF0ZSBib290bWVtIGRhdGEgb24gbm9kZSAwLiAqLworc3RhdGljIGJvb3RtZW1fZGF0YV90IF9faW5pdGRhdGEgbm9kZTBfYmRhdGE7CisKKy8qIEluZm9ybWF0aW9uIG9uIHRoZSBOVU1BIG5vZGVzIHRoYXQgd2UgY29tcHV0ZSBlYXJseSAqLwordW5zaWduZWQgbG9uZyBfX2NwdWluaXRkYXRhIG5vZGVfc3RhcnRfcGZuW01BWF9OVU1OT0RFU107Cit1bnNpZ25lZCBsb25nIF9fY3B1aW5pdGRhdGEgbm9kZV9lbmRfcGZuW01BWF9OVU1OT0RFU107Cit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9tZW1tYXBfcGZuW01BWF9OVU1OT0RFU107Cit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9wZXJjcHVfcGZuW01BWF9OVU1OT0RFU107Cit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgbm9kZV9mcmVlX3BmbltNQVhfTlVNTk9ERVNdOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKy8qIFBhZ2UgZnJhbWUgaW5kZXggb2YgZW5kIG9mIGxvd21lbSBvbiBlYWNoIGNvbnRyb2xsZXIuICovCit1bnNpZ25lZCBsb25nIF9fY3B1aW5pdGRhdGEgbm9kZV9sb3dtZW1fZW5kX3BmbltNQVhfTlVNTk9ERVNdOworCisvKiBOdW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgbWFwcGVkIGludG8gbG93bWVtLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtYXBwYWJsZV9waHlzcGFnZXM7CisjZW5kaWYKKworLyogRGF0YSBvbiB3aGljaCBwaHlzaWNhbCBtZW1vcnkgY29udHJvbGxlciBjb3JyZXNwb25kcyB0byB3aGljaCBOVU1BIG5vZGUgKi8KK2ludCBub2RlX2NvbnRyb2xsZXJbTUFYX05VTU5PREVTXSA9IHsgWzAgLi4uIE1BWF9OVU1OT0RFUy0xXSA9IC0xIH07CisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorLyogTWFwIGluZm9ybWF0aW9uIGZyb20gVkFzIHRvIFBBcyAqLwordW5zaWduZWQgbG9uZyBwYmFzZV9tYXBbMSA8PCAoMzIgLSBIUEFHRV9TSElGVCldCisgIF9fd3JpdGVfb25jZSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwyX0NBQ0hFX0JZVEVTKSkpOworRVhQT1JUX1NZTUJPTChwYmFzZV9tYXApOworCisvKiBNYXAgaW5mb3JtYXRpb24gZnJvbSBQQXMgdG8gVkFzICovCit2b2lkICp2YmFzZV9tYXBbTlJfUEFfSElHSEJJVF9WQUxVRVNdCisgIF9fd3JpdGVfb25jZSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwyX0NBQ0hFX0JZVEVTKSkpOworRVhQT1JUX1NZTUJPTCh2YmFzZV9tYXApOworI2VuZGlmCisKKy8qIE5vZGUgbnVtYmVyIGFzIGEgZnVuY3Rpb24gb2YgdGhlIGhpZ2ggUEEgYml0cyAqLworaW50IGhpZ2hiaXRzX3RvX25vZGVbTlJfUEFfSElHSEJJVF9WQUxVRVNdIF9fd3JpdGVfb25jZTsKK0VYUE9SVF9TWU1CT0woaGlnaGJpdHNfdG9fbm9kZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBtYXhtZW1fcGZuID0gLTFVOworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG1heG5vZGVtZW1fcGZuW01BWF9OVU1OT0RFU10gPSB7CisJWzAgLi4uIE1BWF9OVU1OT0RFUy0xXSA9IC0xVQorfTsKK3N0YXRpYyBub2RlbWFza190IF9faW5pdGRhdGEgaXNvbG5vZGVzOworCisjaWZkZWYgQ09ORklHX1BDSQorZW51bSB7IERFRkFVTFRfUENJX1JFU0VSVkVfTUIgPSA2NCB9Oworc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIHBjaV9yZXNlcnZlX21iID0gREVGQVVMVF9QQ0lfUkVTRVJWRV9NQjsKK3Vuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBwY2lfcmVzZXJ2ZV9zdGFydF9wZm4gPSAtMVU7Cit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGNpX3Jlc2VydmVfZW5kX3BmbiA9IC0xVTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9tYXhtZW0oY2hhciAqc3RyKQoreworCWxvbmcgbWF4bWVtX21iOworCWlmIChzdHIgPT0gTlVMTCB8fCBzdHJpY3Rfc3RydG9sKHN0ciwgMCwgJm1heG1lbV9tYikgIT0gMCB8fAorCSAgICBtYXhtZW1fbWIgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXhtZW1fcGZuID0gKG1heG1lbV9tYiA+PiAoSFBBR0VfU0hJRlQgLSAyMCkpIDw8CisJCShIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQpOworCXByX2luZm8oIkZvcmNpbmcgUkFNIHVzZWQgdG8gbm8gbW9yZSB0aGFuICVkTUJcbiIsCisJICAgICAgIG1heG1lbV9wZm4gPj4gKDIwIC0gUEFHRV9TSElGVCkpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm1heG1lbSIsIHNldHVwX21heG1lbSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX21heG5vZGVtZW0oY2hhciAqc3RyKQoreworCWNoYXIgKmVuZHA7CisJbG9uZyBtYXhub2RlbWVtX21iLCBub2RlOworCisJbm9kZSA9IHN0ciA/IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZHAsIDApIDogSU5UX01BWDsKKwlpZiAobm9kZSA+PSBNQVhfTlVNTk9ERVMgfHwgKmVuZHAgIT0gJzonIHx8CisJICAgIHN0cmljdF9zdHJ0b2woZW5kcCsxLCAwLCAmbWF4bm9kZW1lbV9tYikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXhub2RlbWVtX3Bmbltub2RlXSA9IChtYXhub2RlbWVtX21iID4+IChIUEFHRV9TSElGVCAtIDIwKSkgPDwKKwkJKEhQQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7CisJcHJfaW5mbygiRm9yY2luZyBSQU0gdXNlZCBvbiBub2RlICVsZCB0byBubyBtb3JlIHRoYW4gJWRNQlxuIiwKKwkgICAgICAgbm9kZSwgbWF4bm9kZW1lbV9wZm5bbm9kZV0gPj4gKDIwIC0gUEFHRV9TSElGVCkpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm1heG5vZGVtZW0iLCBzZXR1cF9tYXhub2RlbWVtKTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaXNvbG5vZGVzKGNoYXIgKnN0cikKK3sKKwljaGFyIGJ1ZltNQVhfTlVNTk9ERVMgKiA1XTsKKwlpZiAoc3RyID09IE5VTEwgfHwgbm9kZWxpc3RfcGFyc2Uoc3RyLCBpc29sbm9kZXMpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbm9kZWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlzb2xub2Rlcyk7CisJcHJfaW5mbygiU2V0IGlzb2xub2RlcyB2YWx1ZSB0byAnJXMnXG4iLCBidWYpOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImlzb2xub2RlcyIsIHNldHVwX2lzb2xub2Rlcyk7CisKKyNpZmRlZiBDT05GSUdfUENJCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9wY2lfcmVzZXJ2ZShjaGFyKiBzdHIpCit7CisJdW5zaWduZWQgbG9uZyBtYjsKKworCWlmIChzdHIgPT0gTlVMTCB8fCBzdHJpY3Rfc3RydG91bChzdHIsIDAsICZtYikgIT0gMCB8fAorCSAgICBtYiA+IDMgKiAxMDI0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBjaV9yZXNlcnZlX21iID0gbWI7CisJcHJfaW5mbygiUmVzZXJ2aW5nICVkTUIgZm9yIFBDSUUgcm9vdCBjb21wbGV4IG1hcHBpbmdzXG4iLAorCSAgICAgICBwY2lfcmVzZXJ2ZV9tYik7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgicGNpX3Jlc2VydmUiLCBzZXR1cF9wY2lfcmVzZXJ2ZSk7CisjZW5kaWYKKworI2lmbmRlZiBfX3RpbGVneF9fCisvKgorICogdm1hbGxvYz1zaXplIGZvcmNlcyB0aGUgdm1hbGxvYyBhcmVhIHRvIGJlIGV4YWN0bHkgJ3NpemUnIGJ5dGVzLgorICogVGhpcyBjYW4gYmUgdXNlZCB0byBpbmNyZWFzZSAob3IgZGVjcmVhc2UpIHRoZSB2bWFsbG9jIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX3ZtYWxsb2MoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCVZNQUxMT0NfUkVTRVJWRSA9IChtZW1wYXJzZShhcmcsICZhcmcpICsgUEdESVJfU0laRSAtIDEpICYgUEdESVJfTUFTSzsKKworCS8qIFNlZSB2YWxpZGF0ZV92YSgpIGZvciBtb3JlIG9uIHRoaXMgdGVzdC4gKi8KKwlpZiAoKGxvbmcpX1ZNQUxMT0NfU1RBUlQgPj0gMCkKKwkJZWFybHlfcGFuaWMoIlwidm1hbGxvYz0lI2x4XCIgdmFsdWUgdG9vIGxhcmdlOiBtYXhpbXVtICUjbHhcbiIsCisJCQkgICAgVk1BTExPQ19SRVNFUlZFLCBfVk1BTExPQ19FTkQgLSAweDgwMDAwMDAwVUwpOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgidm1hbGxvYyIsIHBhcnNlX3ZtYWxsb2MpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorLyoKKyAqIERldGVybWluZSBmb3IgZWFjaCBjb250cm9sbGVyIHdoZXJlIGl0cyBsb3dtZW0gaXMgbWFwcGVkIGFuZCBob3cKKyAqIG11Y2ggb2YgaXQgaXMgbWFwcGVkIHRoZXJlLiAgT24gY29udHJvbGxlciB6ZXJvLCB0aGUgZmlyc3QgZmV3CisgKiBtZWdhYnl0ZXMgYXJlIG1hcHBlZCBhdCAweGZkMDAwMDAwIGFzIGNvZGUsIHNvIGluIHByaW5jaXBsZSB3ZQorICogY291bGQgc3RhcnQgb3VyIGRhdGEgbWFwcGluZ3MgaGlnaGVyIHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndAorICogYm90aGVyLCB0byBhdm9pZCBhZGRpdGlvbmFsIGNvbmZ1c2lvbi4KKyAqCisgKiBPbmUgcXVlc3Rpb24gaXMgd2hldGhlciwgb24gc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiA3NjggTWIgYW5kCisgKiBjb250cm9sbGVycyBvZiBkaWZmZXJlbnQgc2l6ZXMsIHRvIG1hcCBpbiBhIHByb3BvcnRpb25hdGUgYW1vdW50IG9mCisgKiBlYWNoIG9uZSwgb3IgdG8gdHJ5IHRvIG1hcCB0aGUgc2FtZSBhbW91bnQgZnJvbSBlYWNoIGNvbnRyb2xsZXIuCisgKiAoRS5nLiBpZiB3ZSBoYXZlIHRocmVlIGNvbnRyb2xsZXJzIHdpdGggMjU2TUIsIDFHQiwgYW5kIDI1Nk1CCisgKiByZXNwZWN0aXZlbHksIGRvIHdlIG1hcCAyNTZNQiBmcm9tIGVhY2gsIG9yIGRvIHdlIG1hcCAxMjggTUIsIDUxMgorICogTUIsIGFuZCAxMjggTUIgcmVzcGVjdGl2ZWx5PykgIEZvciBub3cgd2UgdXNlIGEgcHJvcG9ydGlvbmF0ZQorICogc29sdXRpb24gbGlrZSB0aGUgbGF0dGVyLgorICoKKyAqIFRoZSBWQS9QQSBtYXBwaW5nIGRlbWFuZHMgdGhhdCB3ZSBhbGlnbiBvdXIgZGVjaXNpb25zIGF0IDE2IE1CCisgKiBib3VuZGFyaWVzIHNvIHRoYXQgd2UgY2FuIHJhcGlkbHkgY29udmVydCBWQSB0byBQQS4KKyAqLworc3RhdGljIHZvaWQgKl9faW5pdCBzZXR1cF9wYV92YV9tYXBwaW5nKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjdXJyX3BhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gUEFHRV9PRkZTRVQ7CisJbm9kZW1hc2tfdCBoaWdob25seW5vZGVzID0gaXNvbG5vZGVzOworCWludCBpLCBqOworCisJbWVtc2V0KHBiYXNlX21hcCwgLTEsIHNpemVvZihwYmFzZV9tYXApKTsKKwltZW1zZXQodmJhc2VfbWFwLCAtMSwgc2l6ZW9mKHZiYXNlX21hcCkpOworCisJLyogTm9kZSB6ZXJvIGNhbm5vdCBiZSBpc29sYXRlZCBmb3IgTE9XTUVNIHB1cnBvc2VzLiAqLworCW5vZGVfY2xlYXIoMCwgaGlnaG9ubHlub2Rlcyk7CisKKwkvKiBDb3VudCB1cCB0aGUgbnVtYmVyIG9mIHBhZ2VzIG9uIG5vbi1oaWdob25seW5vZGVzIGNvbnRyb2xsZXJzLiAqLworCW1hcHBhYmxlX3BoeXNwYWdlcyA9IDA7CisJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCQlpZiAoIW5vZGVfaXNzZXQoaSwgaGlnaG9ubHlub2RlcykpCisJCQltYXBwYWJsZV9waHlzcGFnZXMgKz0KKwkJCQlub2RlX2VuZF9wZm5baV0gLSBub2RlX3N0YXJ0X3BmbltpXTsKKwl9CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBub2RlX3N0YXJ0X3BmbltpXTsKKwkJdW5zaWduZWQgbG9uZyBlbmQgPSBub2RlX2VuZF9wZm5baV07CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGVuZCAtIHN0YXJ0OworCQl1bnNpZ25lZCBsb25nIHZhZGRyX2VuZDsKKworCQlpZiAobm9kZV9pc3NldChpLCBoaWdob25seW5vZGVzKSkgeworCQkJLyogTWFyayB0aGlzIGNvbnRyb2xsZXIgYXMgaGF2aW5nIG5vIGxvd21lbS4gKi8KKwkJCW5vZGVfbG93bWVtX2VuZF9wZm5baV0gPSBzdGFydDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY3Vycl9wYWdlcyArPSBzaXplOworCQlpZiAobWFwcGFibGVfcGh5c3BhZ2VzID4gTUFYTUVNX1BGTikgeworCQkJdmFkZHJfZW5kID0gUEFHRV9PRkZTRVQgKworCQkJCSgoKHU2NCljdXJyX3BhZ2VzICogTUFYTUVNX1BGTiAvCisJCQkJICBtYXBwYWJsZV9waHlzcGFnZXMpCisJCQkJIDw8IFBBR0VfU0hJRlQpOworCQl9IGVsc2UgeworCQkJdmFkZHJfZW5kID0gUEFHRV9PRkZTRVQgKyAoY3Vycl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwkJfQorCQlmb3IgKGogPSAwOyB2YWRkciA8IHZhZGRyX2VuZDsgdmFkZHIgKz0gSFBBR0VfU0laRSwgKytqKSB7CisJCQl1bnNpZ25lZCBsb25nIHRoaXNfcGZuID0KKwkJCQlzdGFydCArIChqIDw8IEhVR0VUTEJfUEFHRV9PUkRFUik7CisJCQlwYmFzZV9tYXBbdmFkZHIgPj4gSFBBR0VfU0hJRlRdID0gdGhpc19wZm47CisJCQlpZiAodmJhc2VfbWFwW19fcGZuX3RvX2hpZ2hiaXRzKHRoaXNfcGZuKV0gPT0KKwkJCSAgICAodm9pZCAqKS0xKQorCQkJCXZiYXNlX21hcFtfX3Bmbl90b19oaWdoYml0cyh0aGlzX3BmbildID0KKwkJCQkJKHZvaWQgKikodmFkZHIgJiBIUEFHRV9NQVNLKTsKKwkJfQorCQlub2RlX2xvd21lbV9lbmRfcGZuW2ldID0gc3RhcnQgKyAoaiA8PCBIVUdFVExCX1BBR0VfT1JERVIpOworCQlCVUdfT04obm9kZV9sb3dtZW1fZW5kX3BmbltpXSA+IGVuZCk7CisJfQorCisJLyogUmV0dXJuIGhpZ2hlc3QgYWRkcmVzcyBvZiBhbnkgbWFwcGVkIG1lbW9yeS4gKi8KKwlyZXR1cm4gKHZvaWQgKil2YWRkcjsKK30KKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLworCisvKgorICogUmVnaXN0ZXIgb3VyIG1vc3QgaW1wb3J0YW50IG1lbW9yeSBtYXBwaW5ncyB3aXRoIHRoZSBkZWJ1ZyBzdHViLgorICoKKyAqIFRoaXMgaXMgdXAgdG8gNCBtYXBwaW5ncyBmb3IgbG93bWVtLCBvbmUgbWFwcGluZyBwZXIgbWVtb3J5CisgKiBjb250cm9sbGVyLCBwbHVzIG9uZSBmb3Igb3VyIHRleHQgc2VnbWVudC4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IHN0b3JlX3Blcm1hbmVudF9tYXBwaW5ncyh2b2lkKQoreworCWludCBpOworCisJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCQlIVl9QaHlzQWRkciBwYSA9ICgoSFZfUGh5c0FkZHIpbm9kZV9zdGFydF9wZm5baV0pIDw8IFBBR0VfU0hJRlQ7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJSFZfUGh5c0FkZHIgaGlnaF9tYXBwZWRfcGEgPSBub2RlX2xvd21lbV9lbmRfcGZuW2ldOworI2Vsc2UKKwkJSFZfUGh5c0FkZHIgaGlnaF9tYXBwZWRfcGEgPSBub2RlX2VuZF9wZm5baV07CisjZW5kaWYKKworCQl1bnNpZ25lZCBsb25nIHBhZ2VzID0gaGlnaF9tYXBwZWRfcGEgLSBub2RlX3N0YXJ0X3BmbltpXTsKKwkJSFZfVmlydEFkZHIgYWRkciA9IChIVl9WaXJ0QWRkcikgX192YShwYSk7CisJCWh2X3N0b3JlX21hcHBpbmcoYWRkciwgcGFnZXMgPDwgUEFHRV9TSElGVCwgcGEpOworCX0KKworCWh2X3N0b3JlX21hcHBpbmcoKEhWX1ZpcnRBZGRyKV9zdGV4dCwKKwkJCSAodWludDMyX3QpKF9laW5pdHRleHQgLSBfc3RleHQpLCAwKTsKK30KKworLyoKKyAqIFVzZSBodl9pbnF1aXJlX3BoeXNpY2FsKCkgdG8gcG9wdWxhdGUgbm9kZV97c3RhcnQsZW5kfV9wZm5bXQorICogYW5kIG5vZGVfb25saW5lX21hcCwgZG9pbmcgc3VpdGFibGUgc2FuaXR5LWNoZWNraW5nLgorICogQWxzbyBzZXQgbWluX2xvd19wZm4sIG1heF9sb3dfcGZuLCBhbmQgbWF4X3Bmbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX21lbW9yeSh2b2lkKQoreworCWludCBpLCBqOworCWludCBoaWdoYml0c19zZWVuW05SX1BBX0hJR0hCSVRfVkFMVUVTXSA9IHsgMCB9OworI2lmZGVmIENPTkZJR19ISUdITUVNCisJbG9uZyBoaWdobWVtX3BhZ2VzOworI2VuZGlmCisjaWZuZGVmIF9fdGlsZWd4X18KKwlpbnQgY2FwOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfSElHSE1FTSkgfHwgZGVmaW5lZChfX3RpbGVneF9fKQorCWxvbmcgbG93bWVtX3BhZ2VzOworI2VuZGlmCisKKwkvKiBXZSBhcmUgdXNpbmcgYSBjaGFyIHRvIGhvbGQgdGhlIGNwdV8yX25vZGVbXSBtYXBwaW5nICovCisJQlVHX09OKE1BWF9OVU1OT0RFUyA+IDEyNyk7CisKKwkvKiBEaXNjb3ZlciB0aGUgcmFuZ2VzIG9mIG1lbW9yeSBhdmFpbGFibGUgdG8gdXMgKi8KKwlmb3IgKGkgPSAwOyA7ICsraSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplLCBlbmQsIGhpZ2hiaXRzOworCQlIVl9QaHlzQWRkclJhbmdlIHJhbmdlID0gaHZfaW5xdWlyZV9waHlzaWNhbChpKTsKKwkJaWYgKHJhbmdlLnNpemUgPT0gMCkKKwkJCWJyZWFrOworI2lmZGVmIENPTkZJR19GTEFUTUVNCisJCWlmIChpID4gMCkgeworCQkJcHJfZXJyKCJDYW4ndCB1c2UgZGlzY29udGlndW91cyBQQXM6ICUjbGx4Li4lI2xseFxuIiwKKwkJCSAgICAgICByYW5nZS5zaXplLCByYW5nZS5zdGFydCArIHJhbmdlLnNpemUpOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2lmbmRlZiBfX3RpbGVneF9fCisJCWlmICgodW5zaWduZWQgbG9uZylyYW5nZS5zdGFydCkgeworCQkJcHJfZXJyKCJSYW5nZSBub3QgYXQgNEdCIG11bHRpcGxlOiAlI2xseC4uJSNsbHhcbiIsCisJCQkgICAgICAgcmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2Uuc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisJCWlmICgocmFuZ2Uuc3RhcnQgJiAoSFBBR0VfU0laRS0xKSkgIT0gMCB8fAorCQkgICAgKHJhbmdlLnNpemUgJiAoSFBBR0VfU0laRS0xKSkgIT0gMCkgeworCQkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0X3BhID0gcmFuZ2Uuc3RhcnQ7CisJCQl1bnNpZ25lZCBsb25nIGxvbmcgb3JpZ19zaXplID0gcmFuZ2Uuc2l6ZTsKKwkJCXJhbmdlLnN0YXJ0ID0gKHN0YXJ0X3BhICsgSFBBR0VfU0laRSAtIDEpICYgSFBBR0VfTUFTSzsKKwkJCXJhbmdlLnNpemUgLT0gKHJhbmdlLnN0YXJ0IC0gc3RhcnRfcGEpOworCQkJcmFuZ2Uuc2l6ZSAmPSBIUEFHRV9NQVNLOworCQkJcHJfZXJyKCJSYW5nZSBub3QgaHVnZXBhZ2UtYWxpZ25lZDogJSNsbHguLiUjbGx4OiIKKwkJCSAgICAgICAiIG5vdyAlI2xseC0lI2xseFxuIiwKKwkJCSAgICAgICBzdGFydF9wYSwgc3RhcnRfcGEgKyBvcmlnX3NpemUsCisJCQkgICAgICAgcmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2Uuc2l6ZSk7CisJCX0KKwkJaGlnaGJpdHMgPSBfX3BhX3RvX2hpZ2hiaXRzKHJhbmdlLnN0YXJ0KTsKKwkJaWYgKGhpZ2hiaXRzID49IE5SX1BBX0hJR0hCSVRfVkFMVUVTKSB7CisJCQlwcl9lcnIoIlBBIGhpZ2ggYml0cyB0b28gaGlnaDogJSNsbHguLiUjbGx4XG4iLAorCQkJICAgICAgIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLnNpemUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGhpZ2hiaXRzX3NlZW5baGlnaGJpdHNdKSB7CisJCQlwcl9lcnIoIlJhbmdlIG92ZXJsYXBzIGluIGhpZ2ggYml0czogJSNsbHguLiUjbGx4XG4iLAorCQkJICAgICAgIHJhbmdlLnN0YXJ0LCByYW5nZS5zdGFydCArIHJhbmdlLnNpemUpOworCQkJY29udGludWU7CisJCX0KKwkJaGlnaGJpdHNfc2VlbltoaWdoYml0c10gPSAxOworCQlpZiAoUEZOX0RPV04ocmFuZ2Uuc2l6ZSkgPiBtYXhub2RlbWVtX3BmbltpXSkgeworCQkJaW50IG1heF9zaXplID0gbWF4bm9kZW1lbV9wZm5baV07CisJCQlpZiAobWF4X3NpemUgPiAwKSB7CisJCQkJcHJfZXJyKCJNYXhub2RlbWVtIHJlZHVjZWQgbm9kZSAlZCB0byIKKwkJCQkgICAgICAgIiAlZCBwYWdlc1xuIiwgaSwgbWF4X3NpemUpOworCQkJCXJhbmdlLnNpemUgPSBQRk5fUEhZUyhtYXhfc2l6ZSk7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiTWF4bm9kZW1lbSBkaXNhYmxlZCBub2RlICVkXG4iLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAobnVtX3BoeXNwYWdlcyArIFBGTl9ET1dOKHJhbmdlLnNpemUpID4gbWF4bWVtX3BmbikgeworCQkJaW50IG1heF9zaXplID0gbWF4bWVtX3BmbiAtIG51bV9waHlzcGFnZXM7CisJCQlpZiAobWF4X3NpemUgPiAwKSB7CisJCQkJcHJfZXJyKCJNYXhtZW0gcmVkdWNlZCBub2RlICVkIHRvICVkIHBhZ2VzXG4iLAorCQkJCSAgICAgICBpLCBtYXhfc2l6ZSk7CisJCQkJcmFuZ2Uuc2l6ZSA9IFBGTl9QSFlTKG1heF9zaXplKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfZXJyKCJNYXhtZW0gZGlzYWJsZWQgbm9kZSAlZFxuIiwgaSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKGkgPj0gTUFYX05VTU5PREVTKSB7CisJCQlwcl9lcnIoIlRvbyBtYW55IFBBIG5vZGVzICgjJWQpOiAlI2xseC4uLiUjbGx4XG4iLAorCQkJICAgICAgIGksIHJhbmdlLnNpemUsIHJhbmdlLnNpemUgKyByYW5nZS5zdGFydCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0YXJ0ID0gcmFuZ2Uuc3RhcnQgPj4gUEFHRV9TSElGVDsKKwkJc2l6ZSA9IHJhbmdlLnNpemUgPj4gUEFHRV9TSElGVDsKKwkJZW5kID0gc3RhcnQgKyBzaXplOworCisjaWZuZGVmIF9fdGlsZWd4X18KKwkJaWYgKCgoSFZfUGh5c0FkZHIpZW5kIDw8IFBBR0VfU0hJRlQpICE9CisJCSAgICAocmFuZ2Uuc3RhcnQgKyByYW5nZS5zaXplKSkgeworCQkJcHJfZXJyKCJQQXMgdG9vIGhpZ2ggdG8gcmVwcmVzZW50OiAlI2xseC4uJSNsbHhcbiIsCisJCQkgICAgICAgcmFuZ2Uuc3RhcnQsIHJhbmdlLnN0YXJ0ICsgcmFuZ2Uuc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BDSQorCQkvKgorCQkgKiBCbG9ja3MgdGhhdCBvdmVybGFwIHRoZSBwY2kgcmVzZXJ2ZWQgcmVnaW9uIG11c3QKKwkJICogaGF2ZSBlbm91Z2ggc3BhY2UgdG8gaG9sZCB0aGUgbWF4aW11bSBwZXJjcHUgZGF0YQorCQkgKiByZWdpb24gYXQgdGhlIHRvcCBvZiB0aGUgcmFuZ2UuICBJZiB0aGVyZSBpc24ndAorCQkgKiBlbm91Z2ggc3BhY2UgYWJvdmUgdGhlIHJlc2VydmVkIHJlZ2lvbiwganVzdAorCQkgKiB0cnVuY2F0ZSB0aGUgbm9kZS4KKwkJICovCisJCWlmIChzdGFydCA8PSBwY2lfcmVzZXJ2ZV9zdGFydF9wZm4gJiYKKwkJICAgIGVuZCA+IHBjaV9yZXNlcnZlX3N0YXJ0X3BmbikgeworCQkJdW5zaWduZWQgaW50IHBlcl9jcHVfc2l6ZSA9CisJCQkJX19wZXJfY3B1X2VuZCAtIF9fcGVyX2NwdV9zdGFydDsKKwkJCXVuc2lnbmVkIGludCBwZXJjcHVfcGFnZXMgPQorCQkJCU5SX0NQVVMgKiAoUEZOX1VQKHBlcl9jcHVfc2l6ZSkgPj4gUEFHRV9TSElGVCk7CisJCQlpZiAoZW5kIDwgcGNpX3Jlc2VydmVfZW5kX3BmbiArIHBlcmNwdV9wYWdlcykgeworCQkJCWVuZCA9IHBjaV9yZXNlcnZlX3N0YXJ0X3BmbjsKKwkJCQlwcl9lcnIoIlBDSSBtYXBwaW5nIHJlZ2lvbiByZWR1Y2VkIG5vZGUgJWQgdG8iCisJCQkJICAgICAgICIgJWxkIHBhZ2VzXG4iLCBpLCBlbmQgLSBzdGFydCk7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWZvciAoaiA9IF9fcGZuX3RvX2hpZ2hiaXRzKHN0YXJ0KTsKKwkJICAgICBqIDw9IF9fcGZuX3RvX2hpZ2hiaXRzKGVuZCAtIDEpOyBqKyspCisJCQloaWdoYml0c190b19ub2RlW2pdID0gaTsKKworCQlub2RlX3N0YXJ0X3BmbltpXSA9IHN0YXJ0OworCQlub2RlX2VuZF9wZm5baV0gPSBlbmQ7CisJCW5vZGVfY29udHJvbGxlcltpXSA9IHJhbmdlLmNvbnRyb2xsZXI7CisJCW51bV9waHlzcGFnZXMgKz0gc2l6ZTsKKwkJbWF4X3BmbiA9IGVuZDsKKworCQkvKiBNYXJrIG5vZGUgYXMgb25saW5lICovCisJCW5vZGVfc2V0KGksIG5vZGVfb25saW5lX21hcCk7CisJCW5vZGVfc2V0KGksIG5vZGVfcG9zc2libGVfbWFwKTsKKwl9CisKKyNpZm5kZWYgX190aWxlZ3hfXworCS8qCisJICogRm9yIDRLQiBwYWdlcywgbWVtX21hcCAic3RydWN0IHBhZ2UiIGRhdGEgaXMgMSUgb2YgdGhlIHNpemUKKwkgKiBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5LCBzbyBjYW4gYmUgcXVpdGUgYmlnICg2NDAgTUIgZm9yCisJICogZm91ciAxNkcgem9uZXMpLiAgVGhlc2Ugc3RydWN0dXJlcyBtdXN0IGJlIG1hcHBlZCBpbgorCSAqIGxvd21lbSwgYW5kIHNpbmNlIHdlIGN1cnJlbnRseSBjYXAgb3V0IGF0IGFib3V0IDc2OCBNQiwKKwkgKiBpdCdzIGltcHJhY3RpY2FsIHRvIHRyeSB0byB1c2UgdGhpcyBtdWNoIGFkZHJlc3Mgc3BhY2UuCisJICogRm9yIG5vdywgYXJiaXRyYXJpbHkgY2FwIHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgbWVtb3J5CisJICogd2UncmUgd2lsbGluZyB0byB1c2UgYXQgOCBtaWxsaW9uIHBhZ2VzICgzMkdCIG9mIDRLQiBwYWdlcykuCisJICovCisJY2FwID0gOCAqIDEwMjQgKiAxMDI0OyAgLyogOCBtaWxsaW9uIHBhZ2VzICovCisJaWYgKG51bV9waHlzcGFnZXMgPiBjYXApIHsKKwkJaW50IG51bV9ub2RlcyA9IG51bV9vbmxpbmVfbm9kZXMoKTsKKwkJaW50IGNhcF9lYWNoID0gY2FwIC8gbnVtX25vZGVzOworCQl1bnNpZ25lZCBsb25nIGRyb3BwZWRfcGFnZXMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX25vZGVzOyArK2kpIHsKKwkJCWludCBzaXplID0gbm9kZV9lbmRfcGZuW2ldIC0gbm9kZV9zdGFydF9wZm5baV07CisJCQlpZiAoc2l6ZSA+IGNhcF9lYWNoKSB7CisJCQkJZHJvcHBlZF9wYWdlcyArPSAoc2l6ZSAtIGNhcF9lYWNoKTsKKwkJCQlub2RlX2VuZF9wZm5baV0gPSBub2RlX3N0YXJ0X3BmbltpXSArIGNhcF9lYWNoOworCQkJfQorCQl9CisJCW51bV9waHlzcGFnZXMgLT0gZHJvcHBlZF9wYWdlczsKKwkJcHJfd2FybmluZygiT25seSB1c2luZyAlbGRNQiBtZW1vcnk7IgorCQkgICAgICAgIiBpZ25vcmluZyAlbGRNQi5cbiIsCisJCSAgICAgICBudW1fcGh5c3BhZ2VzID4+ICgyMCAtIFBBR0VfU0hJRlQpLAorCQkgICAgICAgZHJvcHBlZF9wYWdlcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CisJCXByX3dhcm5pbmcoIkNvbnNpZGVyIHVzaW5nIGEgbGFyZ2VyIHBhZ2Ugc2l6ZS5cbiIpOworCX0KKyNlbmRpZgorCisJLyogSGVhcCBzdGFydHMganVzdCBhYm92ZSB0aGUgbGFzdCBsb2FkZWQgYWRkcmVzcy4gKi8KKwltaW5fbG93X3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZylfZW5kIC0gUEFHRV9PRkZTRVQpOworCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkvKiBGaW5kIHdoZXJlIHdlIG1hcCBsb3dtZW0gZnJvbSBlYWNoIGNvbnRyb2xsZXIuICovCisJaGlnaF9tZW1vcnkgPSBzZXR1cF9wYV92YV9tYXBwaW5nKCk7CisKKwkvKiBTZXQgbWF4X2xvd19wZm4gYmFzZWQgb24gd2hhdCBub2RlIDAgY2FuIGRpcmVjdGx5IGFkZHJlc3MuICovCisJbWF4X2xvd19wZm4gPSBub2RlX2xvd21lbV9lbmRfcGZuWzBdOworCisJbG93bWVtX3BhZ2VzID0gKG1hcHBhYmxlX3BoeXNwYWdlcyA+IE1BWE1FTV9QRk4pID8KKwkJTUFYTUVNX1BGTiA6IG1hcHBhYmxlX3BoeXNwYWdlczsKKwloaWdobWVtX3BhZ2VzID0gKGxvbmcpIChudW1fcGh5c3BhZ2VzIC0gbG93bWVtX3BhZ2VzKTsKKworCXByX25vdGljZSgiJWxkTUIgSElHSE1FTSBhdmFpbGFibGUuXG4iLAorCSAgICAgICBwYWdlc190b19tYihoaWdobWVtX3BhZ2VzID4gMCA/IGhpZ2htZW1fcGFnZXMgOiAwKSk7CisJcHJfbm90aWNlKCIlbGRNQiBMT1dNRU0gYXZhaWxhYmxlLlxuIiwKKwkJCXBhZ2VzX3RvX21iKGxvd21lbV9wYWdlcykpOworI2Vsc2UKKwkvKiBTZXQgbWF4X2xvd19wZm4gYmFzZWQgb24gd2hhdCBub2RlIDAgY2FuIGRpcmVjdGx5IGFkZHJlc3MuICovCisJbWF4X2xvd19wZm4gPSBub2RlX2VuZF9wZm5bMF07CisKKyNpZm5kZWYgX190aWxlZ3hfXworCWlmIChub2RlX2VuZF9wZm5bMF0gPiBNQVhNRU1fUEZOKSB7CisJCXByX3dhcm5pbmcoIk9ubHkgdXNpbmcgJWxkTUIgTE9XTUVNLlxuIiwKKwkJICAgICAgIE1BWE1FTT4+MjApOworCQlwcl93YXJuaW5nKCJVc2UgYSBISUdITUVNIGVuYWJsZWQga2VybmVsLlxuIik7CisJCW1heF9sb3dfcGZuID0gTUFYTUVNX1BGTjsKKwkJbWF4X3BmbiA9IE1BWE1FTV9QRk47CisJCW51bV9waHlzcGFnZXMgPSBNQVhNRU1fUEZOOworCQlub2RlX2VuZF9wZm5bMF0gPSBNQVhNRU1fUEZOOworCX0gZWxzZSB7CisJCXByX25vdGljZSgiJWxkTUIgbWVtb3J5IGF2YWlsYWJsZS5cbiIsCisJCSAgICAgICBwYWdlc190b19tYihub2RlX2VuZF9wZm5bMF0pKTsKKwl9CisJZm9yIChpID0gMTsgaSA8IE1BWF9OVU1OT0RFUzsgKytpKSB7CisJCW5vZGVfc3RhcnRfcGZuW2ldID0gMDsKKwkJbm9kZV9lbmRfcGZuW2ldID0gMDsKKwl9CisJaGlnaF9tZW1vcnkgPSBfX3ZhKG5vZGVfZW5kX3BmblswXSk7CisjZWxzZQorCWxvd21lbV9wYWdlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgKytpKSB7CisJCWludCBwYWdlcyA9IG5vZGVfZW5kX3BmbltpXSAtIG5vZGVfc3RhcnRfcGZuW2ldOworCQlsb3dtZW1fcGFnZXMgKz0gcGFnZXM7CisJCWlmIChwYWdlcykKKwkJCWhpZ2hfbWVtb3J5ID0gcGZuX3RvX2thZGRyKG5vZGVfZW5kX3BmbltpXSk7CisJfQorCXByX25vdGljZSgiJWxkTUIgbWVtb3J5IGF2YWlsYWJsZS5cbiIsCisJICAgICAgIHBhZ2VzX3RvX21iKGxvd21lbV9wYWdlcykpOworI2VuZGlmCisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGZpcnN0X2FsbG9jX3BmbiwgbGFzdF9hbGxvY19wZm47CisKKwkvKiBQcm92aWRlIGEgbm9kZSAwIGJkYXRhLiAqLworCU5PREVfREFUQSgwKS0+YmRhdGEgPSAmbm9kZTBfYmRhdGE7CisKKyNpZmRlZiBDT05GSUdfUENJCisJLyogRG9uJ3QgbGV0IGJvb3QgbWVtb3J5IGFsaWFzIHRoZSBQQ0kgcmVnaW9uLiAqLworCWxhc3RfYWxsb2NfcGZuID0gbWluKG1heF9sb3dfcGZuLCBwY2lfcmVzZXJ2ZV9zdGFydF9wZm4pOworI2Vsc2UKKwlsYXN0X2FsbG9jX3BmbiA9IG1heF9sb3dfcGZuOworI2VuZGlmCisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3IgKHdpdGggbG93IG1lbW9yeSBvbmx5KToKKwkgKiBUaGUgZmlyc3QgYXJndW1lbnQgc2F5cyB3aGVyZSB0byBwdXQgdGhlIGJpdG1hcCwgYW5kIHRoZQorCSAqIHNlY29uZCBzYXlzIHdoZXJlIHRoZSBlbmQgb2YgYWxsb2NhdGFibGUgbWVtb3J5IGlzLgorCSAqLworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbShtaW5fbG93X3BmbiwgbGFzdF9hbGxvY19wZm4pOworCisJLyoKKwkgKiBMZXQgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIHVzZSBhbGwgdGhlIHNwYWNlIHdlJ3ZlIGdpdmVuIGl0CisJICogZXhjZXB0IGZvciBpdHMgb3duIGJpdG1hcC4KKwkgKi8KKwlmaXJzdF9hbGxvY19wZm4gPSBtaW5fbG93X3BmbiArIFBGTl9VUChib290bWFwX3NpemUpOworCWlmIChmaXJzdF9hbGxvY19wZm4gPj0gbGFzdF9hbGxvY19wZm4pCisJCWVhcmx5X3BhbmljKCJOb3QgZW5vdWdoIG1lbW9yeSBvbiBjb250cm9sbGVyIDAgZm9yIGJvb3RtZW1cbiIpOworCisJZnJlZV9ib290bWVtKFBGTl9QSFlTKGZpcnN0X2FsbG9jX3BmbiksCisJCSAgICAgUEZOX1BIWVMobGFzdF9hbGxvY19wZm4gLSBmaXJzdF9hbGxvY19wZm4pKTsKKworI2lmZGVmIENPTkZJR19LRVhFQworCWlmIChjcmFzaGtfcmVzLnN0YXJ0ICE9IGNyYXNoa19yZXMuZW5kKQorCQlyZXNlcnZlX2Jvb3RtZW0oY3Jhc2hrX3Jlcy5zdGFydCwKKwkJCWNyYXNoa19yZXMuZW5kIC0gY3Jhc2hrX3Jlcy5zdGFydCArIDEsIDApOworI2VuZGlmCisKK30KKwordm9pZCAqX19pbml0IGFsbG9jX3JlbWFwKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgcGFnZXMgPSBub2RlX2VuZF9wZm5bbmlkXSAtIG5vZGVfc3RhcnRfcGZuW25pZF07CisJdm9pZCAqbWFwID0gcGZuX3RvX2thZGRyKG5vZGVfbWVtbWFwX3BmbltuaWRdKTsKKwlCVUdfT04oc2l6ZSAhPSBwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpOworCW1lbXNldChtYXAsIDAsIHNpemUpOworCXJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBlcmNwdV9zaXplKHZvaWQpCit7CisJaW50IHNpemUgPSBBTElHTihfX3Blcl9jcHVfZW5kIC0gX19wZXJfY3B1X3N0YXJ0LCBQQUdFX1NJWkUpOworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJaWYgKHNpemUgPCBQRVJDUFVfRU5PVUdIX1JPT00pCisJCXNpemUgPSBQRVJDUFVfRU5PVUdIX1JPT007CisjZW5kaWYKKwkvKiBJbiBzZXZlcmFsIHBsYWNlcyB3ZSBhc3N1bWUgdGhlIHBlci1jcHUgZGF0YSBmaXRzIG9uIGEgaHVnZSBwYWdlLiAqLworCUJVR19PTihrZGF0YV9odWdlICYmIHNpemUgPiBIUEFHRV9TSVpFKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFsbG9jX2Jvb3RtZW1fcGZuKGludCBzaXplLCB1bnNpZ25lZCBsb25nIGdvYWwpCit7CisJdm9pZCAqa3ZhID0gX19hbGxvY19ib290bWVtKHNpemUsIFBBR0VfU0laRSwgZ29hbCk7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBrYWRkcl90b19wZm4oa3ZhKTsKKwlCVUdfT04oZ29hbCAmJiBQRk5fUEhZUyhwZm4pICE9IGdvYWwpOworCXJldHVybiBwZm47Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB6b25lX3NpemVzX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHsgMCB9OworCXVuc2lnbmVkIGxvbmcgbm9kZV9wZXJjcHVbTUFYX05VTU5PREVTXSA9IHsgMCB9OworCWludCBzaXplID0gcGVyY3B1X3NpemUoKTsKKwlpbnQgbnVtX2NwdXMgPSBzbXBfaGVpZ2h0ICogc21wX3dpZHRoOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jcHVzOyArK2kpCisJCW5vZGVfcGVyY3B1W2NwdV90b19ub2RlKGkpXSArPSBzaXplOworCisJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbm9kZV9zdGFydF9wZm5baV07CisJCXVuc2lnbmVkIGxvbmcgZW5kID0gbm9kZV9lbmRfcGZuW2ldOworI2lmZGVmIENPTkZJR19ISUdITUVNCisJCXVuc2lnbmVkIGxvbmcgbG93bWVtX2VuZCA9IG5vZGVfbG93bWVtX2VuZF9wZm5baV07CisjZWxzZQorCQl1bnNpZ25lZCBsb25nIGxvd21lbV9lbmQgPSBlbmQ7CisjZW5kaWYKKwkJaW50IG1lbW1hcF9zaXplID0gKGVuZCAtIHN0YXJ0KSAqIHNpemVvZihzdHJ1Y3QgcGFnZSk7CisJCW5vZGVfZnJlZV9wZm5baV0gPSBzdGFydDsKKworCQkvKgorCQkgKiBTZXQgYXNpZGUgcGFnZXMgZm9yIHBlci1jcHUgZGF0YSBhbmQgdGhlIG1lbV9tYXAgYXJyYXkuCisJCSAqCisJCSAqIFNpbmNlIHRoZSBwZXItY3B1IGRhdGEgcmVxdWlyZXMgc3BlY2lhbCBob21lY2FjaGluZywKKwkJICogaWYgd2UgYXJlIGluIGtkYXRhX2h1Z2UgbW9kZSwgd2UgcHV0IGl0IGF0IHRoZSBlbmQgb2YKKwkJICogdGhlIGxvd21lbSByZWdpb24uICBJZiB3ZSdyZSBub3QgaW4ga2RhdGFfaHVnZSBtb2RlLAorCQkgKiB3ZSB0YWtlIHRoZSBwZXItY3B1IHBhZ2VzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUKKwkJICogY29udHJvbGxlciwgc2luY2UgdGhhdCBhdm9pZHMgZnJhZ21lbnRpbmcgYSBodWdlIHBhZ2UKKwkJICogdGhhdCB1c2VycyBtaWdodCB3YW50LiAgV2UgYWx3YXlzIHRha2UgdGhlIG1lbW1hcAorCQkgKiBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGNvbnRyb2xsZXIsIHNpbmNlIHdpdGgKKwkJICoga2RhdGFfaHVnZSB0aGF0IGxldHMgaXQgYmUgdW5kZXIgYSBodWdlIFRMQiBlbnRyeS4KKwkJICoKKwkJICogSWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBpc29sbm9kZXMgZm9yIGEgY29udHJvbGxlciwKKwkJICogdGhvdWdoLCB0aGVyZSdsbCBiZSBubyBsb3dtZW0sIHNvIHdlIGp1c3QgYWxsb2NfYm9vdG1lbQorCQkgKiB0aGUgbWVtbWFwLiAgVGhlcmUgd2lsbCBiZSBubyBwZXJjcHUgbWVtb3J5IGVpdGhlci4KKwkJICovCisJCWlmIChfX3Bmbl90b19oaWdoYml0cyhzdGFydCkgPT0gMCkgeworCQkJLyogSW4gbG93IFBBcywgYWxsb2NhdGUgdmlhIGJvb3RtZW0uICovCisJCQl1bnNpZ25lZCBsb25nIGdvYWwgPSAwOworCQkJbm9kZV9tZW1tYXBfcGZuW2ldID0KKwkJCQlhbGxvY19ib290bWVtX3BmbihtZW1tYXBfc2l6ZSwgZ29hbCk7CisJCQlpZiAoa2RhdGFfaHVnZSkKKwkJCQlnb2FsID0gUEZOX1BIWVMobG93bWVtX2VuZCkgLSBub2RlX3BlcmNwdVtpXTsKKwkJCWlmIChub2RlX3BlcmNwdVtpXSkKKwkJCQlub2RlX3BlcmNwdV9wZm5baV0gPQorCQkJCSAgICBhbGxvY19ib290bWVtX3Bmbihub2RlX3BlcmNwdVtpXSwgZ29hbCk7CisJCX0gZWxzZSBpZiAoY3B1X2lzc2V0KGksIGlzb2xub2RlcykpIHsKKwkJCW5vZGVfbWVtbWFwX3BmbltpXSA9IGFsbG9jX2Jvb3RtZW1fcGZuKG1lbW1hcF9zaXplLCAwKTsKKwkJCUJVR19PTihub2RlX3BlcmNwdVtpXSAhPSAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEluIGhpZ2ggUEFzLCBqdXN0IHJlc2VydmUgc29tZSBwYWdlcy4gKi8KKwkJCW5vZGVfbWVtbWFwX3BmbltpXSA9IG5vZGVfZnJlZV9wZm5baV07CisJCQlub2RlX2ZyZWVfcGZuW2ldICs9IFBGTl9VUChtZW1tYXBfc2l6ZSk7CisJCQlpZiAoIWtkYXRhX2h1Z2UpIHsKKwkJCQlub2RlX3BlcmNwdV9wZm5baV0gPSBub2RlX2ZyZWVfcGZuW2ldOworCQkJCW5vZGVfZnJlZV9wZm5baV0gKz0gUEZOX1VQKG5vZGVfcGVyY3B1W2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJbm9kZV9wZXJjcHVfcGZuW2ldID0KKwkJCQkJbG93bWVtX2VuZCAtIFBGTl9VUChub2RlX3BlcmNwdVtpXSk7CisJCQl9CisJCX0KKworI2lmZGVmIENPTkZJR19ISUdITUVNCisJCWlmIChzdGFydCA+IGxvd21lbV9lbmQpIHsKKwkJCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gMDsKKwkJCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IGVuZCAtIHN0YXJ0OworCQl9IGVsc2UgeworCQkJem9uZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBsb3dtZW1fZW5kIC0gc3RhcnQ7CisJCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSBlbmQgLSBsb3dtZW1fZW5kOworCQl9CisjZWxzZQorCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IGVuZCAtIHN0YXJ0OworI2VuZGlmCisKKwkJLyoKKwkJICogRXZlcnlvbmUgc2hhcmVzIG5vZGUgMCdzIGJvb3RtZW0gYWxsb2NhdG9yLCBidXQKKwkJICogd2UgdXNlIGFsbG9jX3JlbWFwKCksIGFib3ZlLCB0byBwdXQgdGhlIGFjdHVhbAorCQkgKiBzdHJ1Y3QgcGFnZSBhcnJheSBvbiB0aGUgaW5kaXZpZHVhbCBjb250cm9sbGVycywKKwkJICogd2hpY2ggaXMgbW9zdCBvZiB0aGUgZGF0YSB0aGF0IHdlIGFjdHVhbGx5IGNhcmUgYWJvdXQuCisJCSAqIFdlIGNhbid0IHBsYWNlIGJvb3RtZW0gYWxsb2NhdG9ycyBvbiB0aGUgb3RoZXIKKwkJICogY29udHJvbGxlcnMgc2luY2UgdGhlIGJvb3RtZW0gYWxsb2NhdG9yIGNhbiBvbmx5CisJCSAqIG9wZXJhdGUgb24gMzItYml0IHBoeXNpY2FsIGFkZHJlc3Nlcy4KKwkJICovCisJCU5PREVfREFUQShpKS0+YmRhdGEgPSBOT0RFX0RBVEEoMCktPmJkYXRhOworCisJCWZyZWVfYXJlYV9pbml0X25vZGUoaSwgem9uZXNfc2l6ZSwgc3RhcnQsIE5VTEwpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICBETUEgem9uZTogJWxkIHBlci1jcHUgcGFnZXNcbiIsCisJCSAgICAgICBQRk5fVVAobm9kZV9wZXJjcHVbaV0pKTsKKworCQkvKiBUcmFjayB0aGUgdHlwZSBvZiBtZW1vcnkgb24gZWFjaCBub2RlICovCisJCWlmICh6b25lc19zaXplW1pPTkVfTk9STUFMXSkKKwkJCW5vZGVfc2V0X3N0YXRlKGksIE5fTk9STUFMX01FTU9SWSk7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkJaWYgKGVuZCAhPSBzdGFydCkKKwkJCW5vZGVfc2V0X3N0YXRlKGksIE5fSElHSF9NRU1PUlkpOworI2VuZGlmCisKKwkJbm9kZV9zZXRfb25saW5lKGkpOworCX0KK30KKworI2lmZGVmIENPTkZJR19OVU1BCisKKy8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KK3N0cnVjdCBjcHVtYXNrIG5vZGVfMl9jcHVfbWFza1tNQVhfTlVNTk9ERVNdIF9fd3JpdGVfb25jZTsKK0VYUE9SVF9TWU1CT0wobm9kZV8yX2NwdV9tYXNrKTsKKworLyogd2hpY2ggbm9kZSBlYWNoIGxvZ2ljYWwgQ1BVIGlzIG9uICovCitjaGFyIGNwdV8yX25vZGVbTlJfQ1BVU10gX193cml0ZV9vbmNlIF9fYXR0cmlidXRlX18oKGFsaWduZWQoTDJfQ0FDSEVfQllURVMpKSk7CitFWFBPUlRfU1lNQk9MKGNwdV8yX25vZGUpOworCisvKiBSZXR1cm4gY3B1X3RvX25vZGUoKSBleGNlcHQgZm9yIGNwdXMgbm90IHlldCBhc3NpZ25lZCwgd2hpY2ggcmV0dXJuIC0xICovCitzdGF0aWMgaW50IF9faW5pdCBjcHVfdG9fYm91bmRfbm9kZShpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayogdW5ib3VuZF9jcHVzKQoreworCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkgfHwgY3B1bWFza190ZXN0X2NwdShjcHUsIHVuYm91bmRfY3B1cykpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiBjcHVfdG9fbm9kZShjcHUpOworfQorCisvKiBSZXR1cm4gbnVtYmVyIG9mIGltbWVkaWF0ZWx5LWFkamFjZW50IHRpbGVzIHNoYXJpbmcgdGhlIHNhbWUgTlVNQSBub2RlLiAqLworc3RhdGljIGludCBfX2luaXQgbm9kZV9uZWlnaGJvcnMoaW50IG5vZGUsIGludCBjcHUsCisJCQkJIHN0cnVjdCBjcHVtYXNrICp1bmJvdW5kX2NwdXMpCit7CisJaW50IG5laWdoYm9ycyA9IDA7CisJaW50IHcgPSBzbXBfd2lkdGg7CisJaW50IGggPSBzbXBfaGVpZ2h0OworCWludCB4ID0gY3B1ICUgdzsKKwlpbnQgeSA9IGNwdSAvIHc7CisJaWYgKHggPiAwICYmIGNwdV90b19ib3VuZF9ub2RlKGNwdS0xLCB1bmJvdW5kX2NwdXMpID09IG5vZGUpCisJCSsrbmVpZ2hib3JzOworCWlmICh4IDwgdy0xICYmIGNwdV90b19ib3VuZF9ub2RlKGNwdSsxLCB1bmJvdW5kX2NwdXMpID09IG5vZGUpCisJCSsrbmVpZ2hib3JzOworCWlmICh5ID4gMCAmJiBjcHVfdG9fYm91bmRfbm9kZShjcHUtdywgdW5ib3VuZF9jcHVzKSA9PSBub2RlKQorCQkrK25laWdoYm9yczsKKwlpZiAoeSA8IGgtMSAmJiBjcHVfdG9fYm91bmRfbm9kZShjcHUrdywgdW5ib3VuZF9jcHVzKSA9PSBub2RlKQorCQkrK25laWdoYm9yczsKKwlyZXR1cm4gbmVpZ2hib3JzOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbnVtYV9tYXBwaW5nKHZvaWQpCit7CisJaW50IGRpc3RhbmNlW01BWF9OVU1OT0RFU11bTlJfQ1BVU107CisJSFZfQ29vcmQgY29vcmQ7CisJaW50IGNwdSwgbm9kZSwgY3B1cywgaSwgeCwgeTsKKwlpbnQgbnVtX25vZGVzID0gbnVtX29ubGluZV9ub2RlcygpOworCXN0cnVjdCBjcHVtYXNrIHVuYm91bmRfY3B1czsKKwlub2RlbWFza190IGRlZmF1bHRfbm9kZXM7CisKKwljcHVtYXNrX2NsZWFyKCZ1bmJvdW5kX2NwdXMpOworCisJLyogR2V0IHNldCBvZiBub2RlcyB3ZSB3aWxsIHVzZSBmb3IgZGVmYXVsdHMgKi8KKwlub2Rlc19hbmRub3QoZGVmYXVsdF9ub2Rlcywgbm9kZV9vbmxpbmVfbWFwLCBpc29sbm9kZXMpOworCWlmIChub2Rlc19lbXB0eShkZWZhdWx0X25vZGVzKSkgeworCQlCVUdfT04oIW5vZGVfaXNzZXQoMCwgbm9kZV9vbmxpbmVfbWFwKSk7CisJCXByX2VycigiRm9yY2luZyBOVU1BIG5vZGUgemVybyBhdmFpbGFibGUgYXMgYSBkZWZhdWx0IG5vZGVcbiIpOworCQlub2RlX3NldCgwLCBkZWZhdWx0X25vZGVzKTsKKwl9CisKKwkvKiBQb3B1bGF0ZSB0aGUgZGlzdGFuY2VbXSBhcnJheSAqLworCW1lbXNldChkaXN0YW5jZSwgLTEsIHNpemVvZihkaXN0YW5jZSkpOworCWNwdSA9IDA7CisJZm9yIChjb29yZC55ID0gMDsgY29vcmQueSA8IHNtcF9oZWlnaHQ7ICsrY29vcmQueSkgeworCQlmb3IgKGNvb3JkLnggPSAwOyBjb29yZC54IDwgc21wX3dpZHRoOworCQkgICAgICsrY29vcmQueCwgKytjcHUpIHsKKwkJCUJVR19PTihjcHUgPj0gbnJfY3B1X2lkcyk7CisJCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKSB7CisJCQkJY3B1XzJfbm9kZVtjcHVdID0gLTE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgZGVmYXVsdF9ub2RlcykgeworCQkJCUhWX01lbW9yeUNvbnRyb2xsZXJJbmZvIGluZm8gPQorCQkJCQlodl9pbnF1aXJlX21lbW9yeV9jb250cm9sbGVyKAorCQkJCQkJY29vcmQsIG5vZGVfY29udHJvbGxlcltub2RlXSk7CisJCQkJZGlzdGFuY2Vbbm9kZV1bY3B1XSA9CisJCQkJCUFCUyhpbmZvLmNvb3JkLngpICsgQUJTKGluZm8uY29vcmQueSk7CisJCQl9CisJCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmdW5ib3VuZF9jcHVzKTsKKwkJfQorCX0KKwljcHVzID0gY3B1OworCisJLyoKKwkgKiBSb3VuZC1yb2JpbiB0aHJvdWdoIHRoZSBOVU1BIG5vZGVzIHVudGlsIGFsbCB0aGUgY3B1cyBhcmUKKwkgKiBhc3NpZ25lZC4gIFdlIGNvdWxkIGJlIG1vcmUgY2xldmVyIGhlcmUgKGUuZy4gY3JlYXRlIGZvdXIKKwkgKiBzb3J0ZWQgbGlua2VkIGxpc3RzIG9uIHRoZSBzYW1lIHNldCBvZiBjcHUgbm9kZXMsIGFuZCBwdWxsCisJICogb2ZmIHRoZW0gaW4gcm91bmQtcm9iaW4gc2VxdWVuY2UsIHJlbW92aW5nIGZyb20gYWxsIGZvdXIKKwkgKiBsaXN0cyBlYWNoIHRpbWUpIGJ1dCBnaXZlbiB0aGUgcmVsYXRpdmVseSBzbWFsbCBudW1iZXJzCisJICogaW52b2x2ZWQsIE8obl4yKSBzZWVtIE9LIGZvciBhIG9uZS10aW1lIGNvc3QuCisJICovCisJbm9kZSA9IGZpcnN0X25vZGUoZGVmYXVsdF9ub2Rlcyk7CisJd2hpbGUgKCFjcHVtYXNrX2VtcHR5KCZ1bmJvdW5kX2NwdXMpKSB7CisJCWludCBiZXN0X2NwdSA9IC0xOworCQlpbnQgYmVzdF9kaXN0YW5jZSA9IElOVF9NQVg7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1czsgKytjcHUpIHsKKwkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgJnVuYm91bmRfY3B1cykpIHsKKwkJCQkvKgorCQkJCSAqIENvbXB1dGUgbWV0cmljLCB3aGljaCBpcyBob3cgbXVjaAorCQkJCSAqIGNsb3NlciB0aGUgY3B1IGlzIHRvIHRoaXMgbWVtb3J5CisJCQkJICogY29udHJvbGxlciB0aGFuIHRoZSBvdGhlcnMsIHNoaWZ0ZWQKKwkJCQkgKiB1cCwgYW5kIHRoZW4gdGhlIG51bWJlciBvZgorCQkJCSAqIG5laWdoYm9ycyBhbHJlYWR5IGluIHRoZSBub2RlIGFzIGFuCisJCQkJICogZXBzaWxvbiBhZGp1c3RtZW50IHRvIHRyeSB0byBrZWVwCisJCQkJICogdGhlIG5vZGVzIGNvbXBhY3QuCisJCQkJICovCisJCQkJaW50IGQgPSBkaXN0YW5jZVtub2RlXVtjcHVdICogbnVtX25vZGVzOworCQkJCWZvcl9lYWNoX25vZGVfbWFzayhpLCBkZWZhdWx0X25vZGVzKSB7CisJCQkJCWlmIChpICE9IG5vZGUpCisJCQkJCQlkIC09IGRpc3RhbmNlW2ldW2NwdV07CisJCQkJfQorCQkJCWQgKj0gODsgIC8qIGFsbG93IHNwYWNlIGZvciBlcHNpbG9uICovCisJCQkJZCAtPSBub2RlX25laWdoYm9ycyhub2RlLCBjcHUsICZ1bmJvdW5kX2NwdXMpOworCQkJCWlmIChkIDwgYmVzdF9kaXN0YW5jZSkgeworCQkJCQliZXN0X2NwdSA9IGNwdTsKKwkJCQkJYmVzdF9kaXN0YW5jZSA9IGQ7CisJCQkJfQorCQkJfQorCQl9CisJCUJVR19PTihiZXN0X2NwdSA8IDApOworCQljcHVtYXNrX3NldF9jcHUoYmVzdF9jcHUsICZub2RlXzJfY3B1X21hc2tbbm9kZV0pOworCQljcHVfMl9ub2RlW2Jlc3RfY3B1XSA9IG5vZGU7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGJlc3RfY3B1LCAmdW5ib3VuZF9jcHVzKTsKKwkJbm9kZSA9IG5leHRfbm9kZShub2RlLCBkZWZhdWx0X25vZGVzKTsKKwkJaWYgKG5vZGUgPT0gTUFYX05VTU5PREVTKQorCQkJbm9kZSA9IGZpcnN0X25vZGUoZGVmYXVsdF9ub2Rlcyk7CisJfQorCisJLyogUHJpbnQgb3V0IG5vZGUgYXNzaWdubWVudHMgYW5kIHNldCBkZWZhdWx0cyBmb3IgZGlzYWJsZWQgY3B1cyAqLworCWNwdSA9IDA7CisJZm9yICh5ID0gMDsgeSA8IHNtcF9oZWlnaHQ7ICsreSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiTlVNQSBjcHUtdG8tbm9kZSByb3cgJWQ6IiwgeSk7CisJCWZvciAoeCA9IDA7IHggPCBzbXBfd2lkdGg7ICsreCwgKytjcHUpIHsKKwkJCWlmIChjcHVfdG9fbm9kZShjcHUpIDwgMCkgeworCQkJCXByX2NvbnQoIiAtIik7CisJCQkJY3B1XzJfbm9kZVtjcHVdID0gZmlyc3Rfbm9kZShkZWZhdWx0X25vZGVzKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfY29udCgiICVkIiwgY3B1X3RvX25vZGUoY3B1KSk7CisJCQl9CisJCX0KKwkJcHJfY29udCgiXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1IGNwdV9kZXZpY2VzW05SX0NQVVNdOworCitzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQorCQlyZWdpc3Rlcl9vbmVfbm9kZShpKTsKKworCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpCisJCXJlZ2lzdGVyX2NwdSgmY3B1X2RldmljZXNbaV0sIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKKworI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCisKKyNkZWZpbmUgc2V0dXBfbnVtYV9tYXBwaW5nKCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX05VTUEgKi8KKworLyoqCisgKiBzZXR1cF9jcHUoKSAtIERvIGFsbCBuZWNlc3NhcnkgcGVyLWNwdSwgdGlsZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqIEBib290OiBJcyB0aGlzIHRoZSBib290IGNwdT8KKyAqCisgKiBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgb24gdGhlIGJvb3QgY3B1LCBvciBvbmxpbmVfc2Vjb25kYXJ5KCkuCisgKi8KK3ZvaWQgX19jcHVpbml0IHNldHVwX2NwdShpbnQgYm9vdCkKK3sKKwkvKiBUaGUgYm9vdCBjcHUgc2V0cyB1cCBpdHMgcGVybWFuZW50IG1hcHBpbmdzIG11Y2ggZWFybGllci4gKi8KKwlpZiAoIWJvb3QpCisJCXN0b3JlX3Blcm1hbmVudF9tYXBwaW5ncygpOworCisJLyogQWxsb3cgYXN5bmNocm9ub3VzIFRMQiBpbnRlcnJ1cHRzLiAqLworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwlyYXdfbG9jYWxfaXJxX3VubWFzayhJTlRfRE1BVExCX01JU1MpOworCXJhd19sb2NhbF9pcnFfdW5tYXNrKElOVF9ETUFUTEJfQUNDRVNTKTsKKyNlbmRpZgorI2lmIENISVBfSEFTX1NOX1BST0MoKQorCXJhd19sb2NhbF9pcnFfdW5tYXNrKElOVF9TTklUTEJfTUlTUyk7CisjZW5kaWYKKworCS8qCisJICogQWxsb3cgdXNlciBhY2Nlc3MgdG8gbWFueSBnZW5lcmljIFNQUnMsIGxpa2UgdGhlIGN5Y2xlCisJICogY291bnRlciwgUEFTUy9GQUlML0RPTkUsIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCBldGMuCisJICovCisJX19pbnNuX210c3ByKFNQUl9NUExfV09STERfQUNDRVNTX1NFVF8wLCAxKTsKKworI2lmIENISVBfSEFTX1NOKCkKKwkvKiBTdGF0aWMgbmV0d29yayBpcyBub3QgcmVzdHJpY3RlZC4gKi8KKwlfX2luc25fbXRzcHIoU1BSX01QTF9TTl9BQ0NFU1NfU0VUXzAsIDEpOworI2VuZGlmCisjaWYgQ0hJUF9IQVNfU05fUFJPQygpCisJX19pbnNuX210c3ByKFNQUl9NUExfU05fTk9USUZZX1NFVF8wLCAxKTsKKwlfX2luc25fbXRzcHIoU1BSX01QTF9TTl9DUExfU0VUXzAsIDEpOworI2VuZGlmCisKKwkvKgorCSAqIFNldCB0aGUgTVBMIGZvciBpbnRlcnJ1cHQgY29udHJvbCAwIHRvIHVzZXIgbGV2ZWwuCisJICogVGhpcyBpbmNsdWRlcyBhY2Nlc3MgdG8gdGhlIFNZU1RFTV9TQVZFIGFuZCBFWF9DT05URVhUIFNQUnMsCisJICogYXMgd2VsbCBhcyB0aGUgUEwgMCBpbnRlcnJ1cHQgbWFzay4KKwkgKi8KKwlfX2luc25fbXRzcHIoU1BSX01QTF9JTlRDVFJMXzBfU0VUXzAsIDEpOworCisJLyogSW5pdGlhbGl6ZSBJUlEgc3VwcG9ydCBmb3IgdGhpcyBjcHUuICovCisJc2V0dXBfaXJxX3JlZ3MoKTsKKworI2lmZGVmIENPTkZJR19IQVJEV0FMTAorCS8qIFJlc2V0IHRoZSBuZXR3b3JrIHN0YXRlIG9uIHRoaXMgY3B1LiAqLworCXJlc2V0X25ldHdvcmtfc3RhdGUoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IF9faW5pdGRhdGEgc2V0X2luaXRyYW1mc19maWxlOworc3RhdGljIGNoYXIgX19pbml0ZGF0YSBpbml0cmFtZnNfZmlsZVsxMjhdID0gImluaXRyYW1mcy5jcGlvLmd6IjsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfaW5pdHJhbWZzX2ZpbGUoY2hhciAqc3RyKQoreworCWlmIChzdHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3RybmNweShpbml0cmFtZnNfZmlsZSwgc3RyLCBzaXplb2YoaW5pdHJhbWZzX2ZpbGUpIC0gMSk7CisJc2V0X2luaXRyYW1mc19maWxlID0gMTsKKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImluaXRyYW1mc19maWxlIiwgc2V0dXBfaW5pdHJhbWZzX2ZpbGUpOworCisvKgorICogV2UgbG9vayBmb3IgYW4gYWRkaXRpb25hbCAiaW5pdHJhbWZzLmNwaW8uZ3oiIGZpbGUgaW4gdGhlIGh2ZnMuCisgKiBJZiB0aGVyZSBpcyBvbmUsIHdlIGFsbG9jYXRlIHNvbWUgbWVtb3J5IGZvciBpdCBhbmQgaXQgd2lsbCBiZQorICogdW5wYWNrZWQgdG8gdGhlIGluaXRyYW1mcyBhZnRlciBhbnkgYnVpbHQtaW4gaW5pdHJhbWZzX2RhdGEuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBsb2FkX2h2X2luaXRyZCh2b2lkKQoreworCUhWX0ZTX1N0YXRJbmZvIHN0YXQ7CisJaW50IGZkLCByYzsKKwl2b2lkICppbml0cmQ7CisKKwlmZCA9IGh2X2ZzX2ZpbmRmaWxlKChIVl9WaXJ0QWRkcikgaW5pdHJhbWZzX2ZpbGUpOworCWlmIChmZCA9PSBIVl9FTk9FTlQpIHsKKwkJaWYgKHNldF9pbml0cmFtZnNfZmlsZSkKKwkJCXByX3dhcm5pbmcoIk5vIHN1Y2ggaHZmcyBpbml0cmFtZnMgZmlsZSAnJXMnXG4iLAorCQkJCSAgIGluaXRyYW1mc19maWxlKTsKKwkJcmV0dXJuOworCX0KKwlCVUdfT04oZmQgPCAwKTsKKwlzdGF0ID0gaHZfZnNfZnN0YXQoZmQpOworCUJVR19PTihzdGF0LnNpemUgPCAwKTsKKwlpZiAoc3RhdC5mbGFncyAmIEhWX0ZTX0lTRElSKSB7CisJCXByX3dhcm5pbmcoIklnbm9yaW5nIGh2ZnMgZmlsZSAnJXMnOiBpdCdzIGEgZGlyZWN0b3J5LlxuIiwKKwkJCSAgIGluaXRyYW1mc19maWxlKTsKKwkJcmV0dXJuOworCX0KKwlpbml0cmQgPSBhbGxvY19ib290bWVtX3BhZ2VzKHN0YXQuc2l6ZSk7CisJcmMgPSBodl9mc19wcmVhZChmZCwgKEhWX1ZpcnRBZGRyKSBpbml0cmQsIHN0YXQuc2l6ZSwgMCk7CisJaWYgKHJjICE9IHN0YXQuc2l6ZSkgeworCQlwcl9lcnIoIkVycm9yIHJlYWRpbmcgJWQgYnl0ZXMgZnJvbSBodmZzIGZpbGUgJyVzJzogJWRcbiIsCisJCSAgICAgICBzdGF0LnNpemUsIGluaXRyYW1mc19maWxlLCByYyk7CisJCWZyZWVfYm9vdG1lbSgodW5zaWduZWQgbG9uZykgaW5pdHJkLCBzdGF0LnNpemUpOworCQlyZXR1cm47CisJfQorCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBpbml0cmQ7CisJaW5pdHJkX2VuZCA9IGluaXRyZF9zdGFydCArIHN0YXQuc2l6ZTsKK30KKwordm9pZCBfX2luaXQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgYmVnaW4sIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZyZWVfYm9vdG1lbShiZWdpbiwgZW5kIC0gYmVnaW4pOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdmFsaWRhdGVfaHYodm9pZCkKK3sKKwkvKgorCSAqIEl0IG1heSBhbHJlYWR5IGJlIHRvbyBsYXRlLCBidXQgbGV0J3MgY2hlY2sgb3VyIGJ1aWx0LWluCisJICogY29uZmlndXJhdGlvbiBhZ2FpbnN0IHdoYXQgdGhlIGh5cGVydmlzb3IgaXMgcHJvdmlkaW5nLgorCSAqLworCXVuc2lnbmVkIGxvbmcgZ2x1ZV9zaXplID0gaHZfc3lzY29uZihIVl9TWVNDT05GX0dMVUVfU0laRSk7CisJaW50IGh2X3BhZ2Vfc2l6ZSA9IGh2X3N5c2NvbmYoSFZfU1lTQ09ORl9QQUdFX1NJWkVfU01BTEwpOworCWludCBodl9ocGFnZV9zaXplID0gaHZfc3lzY29uZihIVl9TWVNDT05GX1BBR0VfU0laRV9MQVJHRSk7CisJSFZfQVNJRFJhbmdlIGFzaWRfcmFuZ2U7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCUhWX1RvcG9sb2d5IHRvcG9sb2d5ID0gaHZfaW5xdWlyZV90b3BvbG9neSgpOworCUJVR19PTih0b3BvbG9neS5jb29yZC54ICE9IDAgfHwgdG9wb2xvZ3kuY29vcmQueSAhPSAwKTsKKwlpZiAodG9wb2xvZ3kud2lkdGggIT0gMSB8fCB0b3BvbG9neS5oZWlnaHQgIT0gMSkgeworCQlwcl93YXJuaW5nKCJXYXJuaW5nOiBib290aW5nIFVQIGtlcm5lbCBvbiAlZHglZCBncmlkOyIKKwkJCSAgICIgd2lsbCBpZ25vcmUgYWxsIGJ1dCBmaXJzdCB0aWxlLlxuIiwKKwkJCSAgIHRvcG9sb2d5LndpZHRoLCB0b3BvbG9neS5oZWlnaHQpOworCX0KKyNlbmRpZgorCisJaWYgKFBBR0VfT0ZGU0VUICsgSFZfR0xVRV9TVEFSVF9DUEEgKyBnbHVlX3NpemUgPiAodW5zaWduZWQgbG9uZylfdGV4dCkKKwkJZWFybHlfcGFuaWMoIkh5cGVydmlzb3IgZ2x1ZSBzaXplICVsZCBpcyB0b28gYmlnIVxuIiwKKwkJCSAgICBnbHVlX3NpemUpOworCWlmIChodl9wYWdlX3NpemUgIT0gUEFHRV9TSVpFKQorCQllYXJseV9wYW5pYygiSHlwZXJ2aXNvciBwYWdlIHNpemUgJSN4ICE9IG91ciAlI2x4XG4iLAorCQkJICAgIGh2X3BhZ2Vfc2l6ZSwgUEFHRV9TSVpFKTsKKwlpZiAoaHZfaHBhZ2Vfc2l6ZSAhPSBIUEFHRV9TSVpFKQorCQllYXJseV9wYW5pYygiSHlwZXJ2aXNvciBodWdlIHBhZ2Ugc2l6ZSAlI3ggIT0gb3VyICUjbHhcbiIsCisJCQkgICAgaHZfaHBhZ2Vfc2l6ZSwgSFBBR0VfU0laRSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyoKKwkgKiBTb21lIGh5cGVydmlzb3IgQVBJcyB0YWtlIGEgcG9pbnRlciB0byBhIGJpdG1hcCBhcnJheQorCSAqIHdob3NlIHNpemUgaXMgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBjcHVzIG9uIHRoZSBjaGlwLgorCSAqIFdlIHVzZSBhIHN0cnVjdCBjcHVtYXNrIGZvciB0aGlzLCBzbyBpdCBtdXN0IGJlIGJpZyBlbm91Z2guCisJICovCisJaWYgKChzbXBfaGVpZ2h0ICogc21wX3dpZHRoKSA+IG5yX2NwdV9pZHMpCisJCWVhcmx5X3BhbmljKCJIeXBlcnZpc29yICVkIHggJWQgZ3JpZCB0b28gYmlnIGZvciBMaW51eCIKKwkJCSAgICAiIE5SX0NQVVMgJWRcbiIsIHNtcF9oZWlnaHQsIHNtcF93aWR0aCwKKwkJCSAgICBucl9jcHVfaWRzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBDaGVjayB0aGF0IHdlJ3JlIHVzaW5nIGFsbG93ZWQgQVNJRHMsIGFuZCBpbml0aWFsaXplIHRoZQorCSAqIHZhcmlvdXMgYXNpZCB2YXJpYWJsZXMgdG8gdGhlaXIgYXBwcm9wcmlhdGUgaW5pdGlhbCBzdGF0ZXMuCisJICovCisJYXNpZF9yYW5nZSA9IGh2X2lucXVpcmVfYXNpZCgwKTsKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfYXNpZCkgPSBtaW5fYXNpZCA9IGFzaWRfcmFuZ2Uuc3RhcnQ7CisJbWF4X2FzaWQgPSBhc2lkX3JhbmdlLnN0YXJ0ICsgYXNpZF9yYW5nZS5zaXplIC0gMTsKKworCWlmIChodl9jb25mc3RyKEhWX0NPTkZTVFJfQ0hJUF9NT0RFTCwgKEhWX1ZpcnRBZGRyKWNoaXBfbW9kZWwsCisJCSAgICAgICBzaXplb2YoY2hpcF9tb2RlbCkpIDwgMCkgeworCQlwcl9lcnIoIldhcm5pbmc6IEhWX0NPTkZTVFJfQ0hJUF9NT0RFTCBub3QgYXZhaWxhYmxlXG4iKTsKKwkJc3RybGNweShjaGlwX21vZGVsLCAidW5rbm93biIsIHNpemVvZihjaGlwX21vZGVsKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdmFsaWRhdGVfdmEodm9pZCkKK3sKKyNpZm5kZWYgX190aWxlZ3hfXyAgIC8qIEZJWE1FOiBHWDogcHJvYmFibHkgc29tZSB2YWxpZGF0aW9uIHJlbGV2YW50IGhlcmUgKi8KKwkvKgorCSAqIFNpbWlsYXJseSwgbWFrZSBzdXJlIHdlJ3JlIG9ubHkgdXNpbmcgYWxsb3dlZCBWQXMuCisJICogV2UgYXNzdW1lIHdlIGNhbiBjb250aWd1b3VzbHkgdXNlIE1FTV9VU0VSX0lOVFJQVCAuLiBNRU1fSFZfSU5UUlBULAorCSAqIGFuZCAwIC4uIEtFUk5FTF9ISUdIX1ZBRERSLgorCSAqIEluIGFkZGl0aW9uLCBtYWtlIHN1cmUgd2UgQ0FOJ1QgdXNlIHRoZSBlbmQgb2YgbWVtb3J5LCBzaW5jZQorCSAqIHdlIHVzZSB0aGUgbGFzdCBjaHVuayBvZiBlYWNoIHBnZCBmb3IgdGhlIHBnZF9saXN0LgorCSAqLworCWludCBpLCBmY19mZF9vayA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXhfdmEgPSAwOworCXVuc2lnbmVkIGxvbmcgbGlzdF92YSA9CisJCSgoUEdEX0xJU1RfT0ZGU0VUIC8gc2l6ZW9mKHBnZF90KSkgPDwgUEdESVJfU0hJRlQpOworCisJZm9yIChpID0gMDsgOyArK2kpIHsKKwkJSFZfVmlydEFkZHJSYW5nZSByYW5nZSA9IGh2X2lucXVpcmVfdmlydHVhbChpKTsKKwkJaWYgKHJhbmdlLnNpemUgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAocmFuZ2Uuc3RhcnQgPD0gTUVNX1VTRVJfSU5UUlBUICYmCisJCSAgICByYW5nZS5zdGFydCArIHJhbmdlLnNpemUgPj0gTUVNX0hWX0lOVFJQVCkKKwkJCWZjX2ZkX29rID0gMTsKKwkJaWYgKHJhbmdlLnN0YXJ0ID09IDApCisJCQltYXhfdmEgPSByYW5nZS5zaXplOworCQlCVUdfT04ocmFuZ2Uuc3RhcnQgKyByYW5nZS5zaXplID4gbGlzdF92YSk7CisJfQorCWlmICghZmNfZmRfb2spCisJCWVhcmx5X3BhbmljKCJIeXBlcnZpc29yIG5vdCBjb25maWd1cmVkIGZvciBWQXMgMHhmYy8weGZkXG4iKTsKKwlpZiAobWF4X3ZhID09IDApCisJCWVhcmx5X3BhbmljKCJIeXBlcnZpc29yIG5vdCBjb25maWd1cmVkIGZvciBsb3cgVkFzXG4iKTsKKwlpZiAobWF4X3ZhIDwgS0VSTkVMX0hJR0hfVkFERFIpCisJCWVhcmx5X3BhbmljKCJIeXBlcnZpc29yIG1heCBWQSAlI2x4IHNtYWxsZXIgdGhhbiAlI2x4XG4iLAorCQkJICAgIG1heF92YSwgS0VSTkVMX0hJR0hfVkFERFIpOworCisJLyogS2VybmVsIFBDcyBtdXN0IGhhdmUgdGhlaXIgaGlnaCBiaXQgc2V0OyBzZWUgaW50dmVjLlMuICovCisJaWYgKChsb25nKVZNQUxMT0NfU1RBUlQgPj0gMCkKKwkJZWFybHlfcGFuaWMoCisJCQkiTGludXggVk1BTExPQyByZWdpb24gYmVsb3cgdGhlIDJHQiBsaW5lICglI2x4KSFcbiIKKwkJCSJSZWNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggZmV3ZXIgTlJfSFVHRV9WTUFQU1xuIgorCQkJIm9yIHNtYWxsZXIgVk1BTExPQ19SRVNFUlZFLlxuIiwKKwkJCVZNQUxMT0NfU1RBUlQpOworI2VuZGlmCit9CisKKy8qCisgKiBjcHVfbG90YXJfbWFwIGxpc3RzIGFsbCB0aGUgY3B1cyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIHN1cGVydmlzb3IKKyAqIHRvIGNhY2hlIGRhdGEgb24gYXQgYSBwYWdlIGxldmVsLCBpLmUuIHdoYXQgY3B1cyBjYW4gYmUgcGxhY2VkIGluCisgKiB0aGUgTE9UQVIgZmllbGQgb2YgYSBQVEUuICBJdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBzZXQgb2YgcG9zc2libGUKKyAqIGNwdXMgcGx1cyBhbnkgb3RoZXIgY3B1cyB0aGF0IGFyZSB3aWxsaW5nIHRvIHNoYXJlIHRoZWlyIGNhY2hlLgorICogSXQgaXMgc2V0IGJ5IGh2X2lucXVpcmVfdGlsZXMoSFZfSU5RX1RJTEVTX0xPVEFSKS4KKyAqLworc3RydWN0IGNwdW1hc2sgX193cml0ZV9vbmNlIGNwdV9sb3Rhcl9tYXA7CitFWFBPUlRfU1lNQk9MKGNwdV9sb3Rhcl9tYXApOworCisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisvKgorICogaGFzaF9mb3JfaG9tZV9tYXAgbGlzdHMgYWxsIHRoZSB0aWxlcyB0aGF0IGhhc2gtZm9yLWhvbWUgZGF0YQorICogd2lsbCBiZSBjYWNoZWQgb24uICBOb3RlIHRoYXQgdGhpcyBtYXkgaW5jbHVkZXMgdGlsZXMgdGhhdCBhcmUgbm90CisgKiB2YWxpZCBmb3IgdGhpcyBzdXBlcnZpc29yIHRvIHVzZSBvdGhlcndpc2UgKGUuZy4gaWYgYSBoeXBlcnZpc29yCisgKiBkZXZpY2UgaXMgYmVpbmcgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgc3VwZXJ2aXNvcnMpLgorICogSXQgaXMgc2V0IGJ5IGh2X2lucXVpcmVfdGlsZXMoSFZfSU5RX1RJTEVTX0hGSF9DQUNIRSkuCisgKi8KK3N0cnVjdCBjcHVtYXNrIGhhc2hfZm9yX2hvbWVfbWFwOworRVhQT1JUX1NZTUJPTChoYXNoX2Zvcl9ob21lX21hcCk7CisjZW5kaWYKKworLyoKKyAqIGNwdV9jYWNoZWFibGVfbWFwIGxpc3RzIGFsbCB0aGUgY3B1cyB3aG9zZSBjYWNoZXMgdGhlIGh5cGVydmlzb3IgY2FuCisgKiBmbHVzaCBvbiBvdXIgYmVoYWxmLiAgSXQgaXMgc2V0IHRvIGNwdV9wb3NzaWJsZV9tYXAgT1InZWQgd2l0aAorICogaGFzaF9mb3JfaG9tZV9tYXAsIGFuZCBpdCBpcyB3aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8KKyAqIGh2X2ZsdXNoX3JlbW90ZSgpIHRvIGZsdXNoIGFsbCBjYWNoZXMuICBOb3RlIHRoYXQgaWYgdGhlcmUgYXJlCisgKiBkZWRpY2F0ZWQgaHlwZXJ2aXNvciBkcml2ZXIgdGlsZXMgdGhhdCBoYXZlIGF1dGhvcml6ZWQgdXNlIG9mIHRoZWlyCisgKiBjYWNoZSwgdGhvc2UgdGlsZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBjcHVfbG90YXJfbWFwLCBOT1QgaW4KKyAqIGNwdV9jYWNoZWFibGVfbWFwLCBhcyB0aGV5IGFyZSBhIHNwZWNpYWwgY2FzZS4KKyAqLworc3RydWN0IGNwdW1hc2sgX193cml0ZV9vbmNlIGNwdV9jYWNoZWFibGVfbWFwOworRVhQT1JUX1NZTUJPTChjcHVfY2FjaGVhYmxlX21hcCk7CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBjcHVtYXNrIGRpc2FibGVkX21hcDsKKworc3RhdGljIGludCBfX2luaXQgZGlzYWJsZWRfY3B1cyhjaGFyICpzdHIpCit7CisJaW50IGJvb3RfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKHN0ciA9PSBOVUxMIHx8IGNwdWxpc3RfcGFyc2VfY3JvcChzdHIsICZkaXNhYmxlZF9tYXApICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGJvb3RfY3B1LCAmZGlzYWJsZWRfbWFwKSkgeworCQlwcl9lcnIoImRpc2FibGVkX2NwdXM6IGNhbid0IGRpc2FibGUgYm9vdCBjcHUgJWRcbiIsIGJvb3RfY3B1KTsKKwkJY3B1bWFza19jbGVhcl9jcHUoYm9vdF9jcHUsICZkaXNhYmxlZF9tYXApOworCX0KKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImRpc2FibGVkX2NwdXMiLCBkaXNhYmxlZF9jcHVzKTsKKwordm9pZCBfX2luaXQgcHJpbnRfZGlzYWJsZWRfY3B1cyh2b2lkKQoreworCWlmICghY3B1bWFza19lbXB0eSgmZGlzYWJsZWRfbWFwKSkgeworCQljaGFyIGJ1ZlsxMDBdOworCQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmZGlzYWJsZWRfbWFwKTsKKwkJcHJfaW5mbygiQ1BVcyBub3QgYXZhaWxhYmxlIGZvciBMaW51eDogJXNcbiIsIGJ1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY3B1X21hcHModm9pZCkKK3sKKwlzdHJ1Y3QgY3B1bWFzayBodl9kaXNhYmxlZF9tYXAsIGNwdV9wb3NzaWJsZV9pbml0OworCWludCBib290X2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgY3B1cywgaSwgcmM7CisKKwkvKiBMZWFybiB3aGljaCBjcHVzIGFyZSBhbGxvd2VkIGJ5IHRoZSBoeXBlcnZpc29yLiAqLworCXJjID0gaHZfaW5xdWlyZV90aWxlcyhIVl9JTlFfVElMRVNfQVZBSUwsCisJCQkgICAgICAoSFZfVmlydEFkZHIpIGNwdW1hc2tfYml0cygmY3B1X3Bvc3NpYmxlX2luaXQpLAorCQkJICAgICAgc2l6ZW9mKGNwdV9jYWNoZWFibGVfbWFwKSk7CisJaWYgKHJjIDwgMCkKKwkJZWFybHlfcGFuaWMoImh2X2lucXVpcmVfdGlsZXMoQVZBSUwpIGZhaWxlZDogcmMgJWRcbiIsIHJjKTsKKwlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoYm9vdF9jcHUsICZjcHVfcG9zc2libGVfaW5pdCkpCisJCWVhcmx5X3BhbmljKCJCb290IENQVSAlZCBkaXNhYmxlZCBieSBoeXBlcnZpc29yIVxuIiwgYm9vdF9jcHUpOworCisJLyogQ29tcHV0ZSB0aGUgY3B1cyBkaXNhYmxlZCBieSB0aGUgaHZjb25maWcgZmlsZS4gKi8KKwljcHVtYXNrX2NvbXBsZW1lbnQoJmh2X2Rpc2FibGVkX21hcCwgJmNwdV9wb3NzaWJsZV9pbml0KTsKKworCS8qIEluY2x1ZGUgdGhlbSB3aXRoIHRoZSBjcHVzIGRpc2FibGVkIGJ5ICJkaXNhYmxlZF9jcHVzIi4gKi8KKwljcHVtYXNrX29yKCZkaXNhYmxlZF9tYXAsICZkaXNhYmxlZF9tYXAsICZodl9kaXNhYmxlZF9tYXApOworCisJLyoKKwkgKiBEaXNhYmxlIGV2ZXJ5IGNwdSBhZnRlciAic2V0dXBfbWF4X2NwdXMiLiAgQnV0IGRvbid0IG1hcmsKKwkgKiBhcyBkaXNhYmxlZCB0aGUgY3B1cyB0aGF0IGFyZSBvdXRzaWRlIG9mIG91ciBpbml0aWFsIHJlY3RhbmdsZSwKKwkgKiBzaW5jZSB0aGF0IHR1cm5zIG91dCB0byBiZSBjb25mdXNpbmcuCisJICovCisJY3B1cyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGNwdSAqLworCWNwdW1hc2tfc2V0X2NwdShib290X2NwdSwgJmRpc2FibGVkX21hcCk7ICAgLyogaWdub3JlIHRoaXMgY3B1ICovCisJZm9yIChpID0gMDsgY3B1cyA8IHNldHVwX21heF9jcHVzOyArK2kpCisJCWlmICghY3B1bWFza190ZXN0X2NwdShpLCAmZGlzYWJsZWRfbWFwKSkKKwkJCSsrY3B1czsKKwlmb3IgKDsgaSA8IHNtcF9oZWlnaHQgKiBzbXBfd2lkdGg7ICsraSkKKwkJY3B1bWFza19zZXRfY3B1KGksICZkaXNhYmxlZF9tYXApOworCWNwdW1hc2tfY2xlYXJfY3B1KGJvb3RfY3B1LCAmZGlzYWJsZWRfbWFwKTsgLyogcmVzZXQgdGhpcyBjcHUgKi8KKwlmb3IgKGkgPSBzbXBfaGVpZ2h0ICogc21wX3dpZHRoOyBpIDwgTlJfQ1BVUzsgKytpKQorCQljcHVtYXNrX2NsZWFyX2NwdShpLCAmZGlzYWJsZWRfbWFwKTsKKworCS8qCisJICogU2V0dXAgY3B1X3Bvc3NpYmxlIG1hcCBhcyBldmVyeSBjcHUgYWxsb2NhdGVkIHRvIHVzLCBtaW51cworCSAqIHRoZSByZXN1bHRzIG9mIGFueSAiZGlzYWJsZWRfY3B1cyIgc2V0dGluZ3MuCisJICovCisJY3B1bWFza19hbmRub3QoJmNwdV9wb3NzaWJsZV9pbml0LCAmY3B1X3Bvc3NpYmxlX2luaXQsICZkaXNhYmxlZF9tYXApOworCWluaXRfY3B1X3Bvc3NpYmxlKCZjcHVfcG9zc2libGVfaW5pdCk7CisKKwkvKiBMZWFybiB3aGljaCBjcHVzIGFyZSB2YWxpZCBmb3IgTE9UQVIgY2FjaGluZy4gKi8KKwlyYyA9IGh2X2lucXVpcmVfdGlsZXMoSFZfSU5RX1RJTEVTX0xPVEFSLAorCQkJICAgICAgKEhWX1ZpcnRBZGRyKSBjcHVtYXNrX2JpdHMoJmNwdV9sb3Rhcl9tYXApLAorCQkJICAgICAgc2l6ZW9mKGNwdV9sb3Rhcl9tYXApKTsKKwlpZiAocmMgPCAwKSB7CisJCXByX2Vycigid2FybmluZzogbm8gSFZfSU5RX1RJTEVTX0xPVEFSOyB1c2luZyBBVkFJTFxuIik7CisJCWNwdV9sb3Rhcl9tYXAgPSBjcHVfcG9zc2libGVfbWFwOworCX0KKworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorCS8qIFJldHJpZXZlIHNldCBvZiBDUFVzIHVzZWQgZm9yIGhhc2gtZm9yLWhvbWUgY2FjaGluZyAqLworCXJjID0gaHZfaW5xdWlyZV90aWxlcyhIVl9JTlFfVElMRVNfSEZIX0NBQ0hFLAorCQkJICAgICAgKEhWX1ZpcnRBZGRyKSBoYXNoX2Zvcl9ob21lX21hcC5iaXRzLAorCQkJICAgICAgc2l6ZW9mKGhhc2hfZm9yX2hvbWVfbWFwKSk7CisJaWYgKHJjIDwgMCkKKwkJZWFybHlfcGFuaWMoImh2X2lucXVpcmVfdGlsZXMoSEZIX0NBQ0hFKSBmYWlsZWQ6IHJjICVkXG4iLCByYyk7CisJY3B1bWFza19vcigmY3B1X2NhY2hlYWJsZV9tYXAsICZjcHVfcG9zc2libGVfbWFwLCAmaGFzaF9mb3JfaG9tZV9tYXApOworI2Vsc2UKKwljcHVfY2FjaGVhYmxlX21hcCA9IGNwdV9wb3NzaWJsZV9tYXA7CisjZW5kaWYKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBkYXRhcGxhbmUoY2hhciAqc3RyKQoreworCXByX3dhcm5pbmcoIldBUk5JTkc6IGRhdGFwbGFuZSBzdXBwb3J0IGRpc2FibGVkIGluIHRoaXMga2VybmVsXG4iKTsKKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oImRhdGFwbGFuZSIsIGRhdGFwbGFuZSk7CisKKyNpZmRlZiBDT05GSUdfQ01ETElORV9CT09MCitzdGF0aWMgY2hhciBfX2luaXRkYXRhIGJ1aWx0aW5fY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gPSBDT05GSUdfQ01ETElORTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCit7CisJaW50IGxlbjsKKworI2lmIGRlZmluZWQoQ09ORklHX0NNRExJTkVfQk9PTCkgJiYgZGVmaW5lZChDT05GSUdfQ01ETElORV9PVkVSUklERSkKKwlsZW4gPSBodl9nZXRfY29tbWFuZF9saW5lKChIVl9WaXJ0QWRkcikgYm9vdF9jb21tYW5kX2xpbmUsCisJCQkJICBDT01NQU5EX0xJTkVfU0laRSk7CisJaWYgKGJvb3RfY29tbWFuZF9saW5lWzBdKQorCQlwcl93YXJuaW5nKCJXQVJOSU5HOiBpZ25vcmluZyBkeW5hbWljIGNvbW1hbmQgbGluZSBcIiVzXCJcbiIsCisJCQkgICBib290X2NvbW1hbmRfbGluZSk7CisJc3RybGNweShib290X2NvbW1hbmRfbGluZSwgYnVpbHRpbl9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CisjZWxzZQorCWNoYXIgKmh2X2NtZGxpbmU7CisjaWYgZGVmaW5lZChDT05GSUdfQ01ETElORV9CT09MKQorCWlmIChidWlsdGluX2NtZGxpbmVbMF0pIHsKKwkJaW50IGJ1aWx0aW5fbGVuID0gc3RybGNweShib290X2NvbW1hbmRfbGluZSwgYnVpbHRpbl9jbWRsaW5lLAorCQkJCQkgIENPTU1BTkRfTElORV9TSVpFKTsKKwkJaWYgKGJ1aWx0aW5fbGVuIDwgQ09NTUFORF9MSU5FX1NJWkUtMSkKKwkJCWJvb3RfY29tbWFuZF9saW5lW2J1aWx0aW5fbGVuKytdID0gJyAnOworCQlodl9jbWRsaW5lID0gJmJvb3RfY29tbWFuZF9saW5lW2J1aWx0aW5fbGVuXTsKKwkJbGVuID0gQ09NTUFORF9MSU5FX1NJWkUgLSBidWlsdGluX2xlbjsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJaHZfY21kbGluZSA9IGJvb3RfY29tbWFuZF9saW5lOworCQlsZW4gPSBDT01NQU5EX0xJTkVfU0laRTsKKwl9CisJbGVuID0gaHZfZ2V0X2NvbW1hbmRfbGluZSgoSFZfVmlydEFkZHIpIGh2X2NtZGxpbmUsIGxlbik7CisJaWYgKGxlbiA8IDAgfHwgbGVuID4gQ09NTUFORF9MSU5FX1NJWkUpCisJCWVhcmx5X3BhbmljKCJodl9nZXRfY29tbWFuZF9saW5lIGZhaWxlZDogJWRcbiIsIGxlbik7CisjZW5kaWYKKworCSpjbWRsaW5lX3AgPSBib290X2NvbW1hbmRfbGluZTsKKworCS8qIFNldCBkaXNhYmxlZF9tYXAgYW5kIHNldHVwX21heF9jcHVzIHZlcnkgZWFybHkgKi8KKwlwYXJzZV9lYXJseV9wYXJhbSgpOworCisJLyogTWFrZSBzdXJlIHRoZSBrZXJuZWwgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBoeXBlcnZpc29yLiAqLworCXZhbGlkYXRlX2h2KCk7CisJdmFsaWRhdGVfdmEoKTsKKworCXNldHVwX2NwdV9tYXBzKCk7CisKKworI2lmZGVmIENPTkZJR19QQ0kKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIFBDSSBzdHJ1Y3R1cmVzLiAgVGhpcyBpcyBkb25lIGJlZm9yZSBtZW1vcnkKKwkgKiBzZXR1cCBzbyB0aGF0IHdlIGtub3cgd2hldGhlciBvciBub3QgYSBwY2lfcmVzZXJ2ZSByZWdpb24KKwkgKiBpcyBuZWNlc3NhcnkuCisJICovCisJaWYgKHRpbGVfcGNpX2luaXQoKSA9PSAwKQorCQlwY2lfcmVzZXJ2ZV9tYiA9IDA7CisKKwkvKiBQQ0kgc3lzdGVtcyByZXNlcnZlIGEgcmVnaW9uIGp1c3QgYmVsb3cgNEdCIGZvciBtYXBwaW5nIGlvbWVtLiAqLworCXBjaV9yZXNlcnZlX2VuZF9wZm4gID0gKDEgPDwgKDMyIC0gUEFHRV9TSElGVCkpOworCXBjaV9yZXNlcnZlX3N0YXJ0X3BmbiA9IHBjaV9yZXNlcnZlX2VuZF9wZm4gLQorCQkocGNpX3Jlc2VydmVfbWIgPDwgKDIwIC0gUEFHRV9TSElGVCkpOworI2VuZGlmCisKKwlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3RleHQ7CisJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSBfZXRleHQ7CisJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBfZWRhdGE7CisJaW5pdF9tbS5icmsgPSAodW5zaWduZWQgbG9uZykgX2VuZDsKKworCXNldHVwX21lbW9yeSgpOworCXN0b3JlX3Blcm1hbmVudF9tYXBwaW5ncygpOworCXNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKCk7CisKKwkvKgorCSAqIE5PVEU6IGJlZm9yZSB0aGlzIHBvaW50IF9ub2JvZHlfIGlzIGFsbG93ZWQgdG8gYWxsb2NhdGUKKwkgKiBhbnkgbWVtb3J5IHVzaW5nIHRoZSBib290bWVtIGFsbG9jYXRvci4KKwkgKi8KKworCXBhZ2luZ19pbml0KCk7CisJc2V0dXBfbnVtYV9tYXBwaW5nKCk7CisJem9uZV9zaXplc19pbml0KCk7CisJc2V0X3BhZ2VfaG9tZXMoKTsKKwlzZXR1cF9jcHUoMSk7CisJc2V0dXBfY2xvY2soKTsKKwlsb2FkX2h2X2luaXRyZCgpOworfQorCisKKy8qCisgKiBTZXQgdXAgcGVyLWNwdSBtZW1vcnkuCisgKi8KKwordW5zaWduZWQgbG9uZyBfX3Blcl9jcHVfb2Zmc2V0W05SX0NQVVNdIF9fd3JpdGVfb25jZTsKK0VYUE9SVF9TWU1CT0woX19wZXJfY3B1X29mZnNldCk7CisKK3N0YXRpYyBzaXplX3QgX19pbml0ZGF0YSBwZm5fb2Zmc2V0W01BWF9OVU1OT0RFU10gPSB7IDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcGVyY3B1X3BmbltOUl9DUFVTXSA9IHsgMCB9OworCisvKgorICogQXMgdGhlIHBlcmNwdSBjb2RlIGFsbG9jYXRlcyBwYWdlcywgd2UgcmV0dXJuIHRoZSBwYWdlcyBmcm9tIHRoZQorICogZW5kIG9mIHRoZSBub2RlIGZvciB0aGUgc3BlY2lmaWVkIGNwdS4KKyAqLworc3RhdGljIHZvaWQgKl9faW5pdCBwY3B1X2ZjX2FsbG9jKHVuc2lnbmVkIGludCBjcHUsIHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCit7CisJaW50IG5pZCA9IGNwdV90b19ub2RlKGNwdSk7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBub2RlX3BlcmNwdV9wZm5bbmlkXSArIHBmbl9vZmZzZXRbbmlkXTsKKworCUJVR19PTihzaXplICUgUEFHRV9TSVpFICE9IDApOworCXBmbl9vZmZzZXRbbmlkXSArPSBzaXplIC8gUEFHRV9TSVpFOworCWlmIChwZXJjcHVfcGZuW2NwdV0gPT0gMCkKKwkJcGVyY3B1X3BmbltjcHVdID0gcGZuOworCXJldHVybiBwZm5fdG9fa2FkZHIocGZuKTsKK30KKworLyoKKyAqIFBhZ2VzIHJlc2VydmVkIGZvciBwZXJjcHUgbWVtb3J5IGFyZSBub3QgZnJlZWFibGUsIGFuZCBpbiBhbnkgY2FzZSB3ZSBhcmUKKyAqIG9uIGEgc2hvcnQgcGF0aCB0byBwYW5pYygpIGluIHNldHVwX3Blcl9jcHVfYXJlYSgpIGF0IHRoaXMgcG9pbnQgYW55d2F5LgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGNwdV9mY19mcmVlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7Cit9CisKKy8qCisgKiBTZXQgdXAgdm1hbGxvYyBwYWdlIHRhYmxlcyB1c2luZyBib290bWVtIGZvciB0aGUgcGVyY3B1IGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBwY3B1X2ZjX3BvcHVsYXRlX3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKworCUJVR19PTihwZ2RfYWRkcl9pbnZhbGlkKGFkZHIpKTsKKworCXBnZCA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4KGFkZHIpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlCVUdfT04oIXB1ZF9wcmVzZW50KCpwdWQpKTsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKHBtZF9wcmVzZW50KCpwbWQpKSB7CisJCUJVR19PTihwbWRfaHVnZV9wYWdlKCpwbWQpKTsKKwl9IGVsc2UgeworCQlwdGUgPSBfX2FsbG9jX2Jvb3RtZW0oTDJfS0VSTkVMX1BHVEFCTEVfU0laRSwKKwkJCQkgICAgICBIVl9QQUdFX1RBQkxFX0FMSUdOLCAwKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1kLCBwdGUpOworCX0KK30KKwordm9pZCBfX2luaXQgc2V0dXBfcGVyX2NwdV9hcmVhcyh2b2lkKQoreworCXN0cnVjdCBwYWdlICpwZzsKKwl1bnNpZ25lZCBsb25nIGRlbHRhLCBwZm4sIGxvd21lbV92YTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBwZXJjcHVfc2l6ZSgpOworCWNoYXIgKnB0cjsKKwlpbnQgcmMsIGNwdSwgaTsKKworCXJjID0gcGNwdV9wYWdlX2ZpcnN0X2NodW5rKFBFUkNQVV9NT0RVTEVfUkVTRVJWRSwgcGNwdV9mY19hbGxvYywKKwkJCQkgICBwY3B1X2ZjX2ZyZWUsIHBjcHVfZmNfcG9wdWxhdGVfcHRlKTsKKwlpZiAocmMgPCAwKQorCQlwYW5pYygiQ2Fubm90IGluaXRpYWxpemUgcGVyY3B1IGFyZWEgKGVycj0lZCkiLCByYyk7CisKKwlkZWx0YSA9ICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0OworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJX19wZXJfY3B1X29mZnNldFtjcHVdID0gZGVsdGEgKyBwY3B1X3VuaXRfb2Zmc2V0c1tjcHVdOworCisJCS8qIGZpbnYgdGhlIGNvcHkgb3V0IG9mIGNhY2hlIHNvIHdlIGNhbiBjaGFuZ2UgaG9tZWNhY2hlICovCisJCXB0ciA9IHBjcHVfYmFzZV9hZGRyICsgcGNwdV91bml0X29mZnNldHNbY3B1XTsKKwkJX19maW52X2J1ZmZlcihwdHIsIHNpemUpOworCQlwZm4gPSBwZXJjcHVfcGZuW2NwdV07CisKKwkJLyogUmV3cml0ZSB0aGUgcGFnZSB0YWJsZXMgdG8gY2FjaGUgb24gdGhhdCBjcHUgKi8KKwkJcGcgPSBwZm5fdG9fcGFnZShwZm4pOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBQQUdFX1NJWkUsICsrcGZuLCArK3BnKSB7CisKKwkJCS8qIFVwZGF0ZSB0aGUgdm1hbGxvYyBtYXBwaW5nIGFuZCBwYWdlIGhvbWUuICovCisJCQlwdGVfdCAqcHRlcCA9CisJCQkJdmlydF90b19wdGUoTlVMTCwgKHVuc2lnbmVkIGxvbmcpcHRyICsgaSk7CisJCQlwdGVfdCBwdGUgPSAqcHRlcDsKKwkJCUJVR19PTihwZm4gIT0gcHRlX3BmbihwdGUpKTsKKwkJCXB0ZSA9IGh2X3B0ZV9zZXRfbW9kZShwdGUsIEhWX1BURV9NT0RFX0NBQ0hFX1RJTEVfTDMpOworCQkJcHRlID0gc2V0X3JlbW90ZV9jYWNoZV9jcHUocHRlLCBjcHUpOworCQkJc2V0X3B0ZShwdGVwLCBwdGUpOworCisJCQkvKiBVcGRhdGUgdGhlIGxvd21lbSBtYXBwaW5nIGZvciBjb25zaXN0ZW5jeS4gKi8KKwkJCWxvd21lbV92YSA9ICh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcihwZm4pOworCQkJcHRlcCA9IHZpcnRfdG9fcHRlKE5VTEwsIGxvd21lbV92YSk7CisJCQlpZiAocHRlX2h1Z2UoKnB0ZXApKSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgImVhcmx5IHNoYXR0ZXIgb2YgaHVnZSBwYWdlIgorCQkJCSAgICAgICAiIGF0ICUjbHhcbiIsIGxvd21lbV92YSk7CisJCQkJc2hhdHRlcl9wbWQoKHBtZF90ICopcHRlcCk7CisJCQkJcHRlcCA9IHZpcnRfdG9fcHRlKE5VTEwsIGxvd21lbV92YSk7CisJCQkJQlVHX09OKHB0ZV9odWdlKCpwdGVwKSk7CisJCQl9CisJCQlCVUdfT04ocGZuICE9IHB0ZV9wZm4oKnB0ZXApKTsKKwkJCXNldF9wdGUocHRlcCwgcHRlKTsKKwkJfQorCX0KKworCS8qIFNldCBvdXIgdGhyZWFkIHBvaW50ZXIgYXBwcm9wcmlhdGVseS4gKi8KKwlzZXRfbXlfY3B1X29mZnNldChfX3Blcl9jcHVfb2Zmc2V0W3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCisJLyogTWFrZSBzdXJlIHRoZSBmaW52J3MgaGF2ZSBjb21wbGV0ZWQuICovCisJbWJfaW5jb2hlcmVudCgpOworCisJLyogRmx1c2ggdGhlIFRMQiBzbyB3ZSByZWZlcmVuY2UgaXQgcHJvcGVybHkgZnJvbSBoZXJlIG9uIG91dC4gKi8KKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGF0YV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJLZXJuZWwgZGF0YSIsCisJLnN0YXJ0CT0gMCwKKwkuZW5kCT0gMCwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb2RlX3Jlc291cmNlID0geworCS5uYW1lCT0gIktlcm5lbCBjb2RlIiwKKwkuc3RhcnQJPSAwLAorCS5lbmQJPSAwLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfTUVNCit9OworCisvKgorICogV2UgcmVzZXJ2ZSBhbGwgcmVzb3VyY2VzIGFib3ZlIDRHQiBzbyB0aGF0IFBDSSB3b24ndCB0cnkgdG8gcHV0CisgKiBtYXBwaW5ncyBhYm92ZSA0R0I7IHRoZSBzdGFuZGFyZCBhbGxvd3MgdGhhdCBmb3Igc29tZSBkZXZpY2VzIGJ1dAorICogdGhlIHByb2JpbmcgY29kZSB0cnVuYXRlcyB2YWx1ZXMgdG8gMzIgYml0cy4KKyAqLworI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UqIF9faW5pdAoraW5zZXJ0X25vbl9idXNfcmVzb3VyY2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9BVE9NSUMpOworCXJlcy0+bmFtZSA9ICJOb24tQnVzIFBoeXNpY2FsIEFkZHJlc3MgU3BhY2UiOworCXJlcy0+c3RhcnQgPSAoMVVMTCA8PCAzMik7CisJcmVzLT5lbmQgPSAtMUxMOworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTTsKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKSkgeworCQlrZnJlZShyZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlKiBfX2luaXQKK2luc2VydF9yYW1fcmVzb3VyY2UodTY0IHN0YXJ0X3BmbiwgdTY0IGVuZF9wZm4pCit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfQVRPTUlDKTsKKwlyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7CisJcmVzLT5zdGFydCA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCXJlcy0+ZW5kID0gKGVuZF9wZm4gPDwgUEFHRV9TSElGVCkgLSAxOworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX01FTTsKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKSkgeworCQlrZnJlZShyZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFJlcXVlc3QgYWRkcmVzcyBzcGFjZSBmb3IgYWxsIHN0YW5kYXJkIHJlc291cmNlcworICoKKyAqIElmIHRoZSBzeXN0ZW0gaW5jbHVkZXMgUENJIHJvb3QgY29tcGxleCBkcml2ZXJzLCB3ZSBuZWVkIHRvIGNyZWF0ZQorICogYSB3aW5kb3cganVzdCBiZWxvdyA0R0Igd2hlcmUgUENJIEJBUnMgY2FuIGJlIG1hcHBlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZCkKK3sKKwlpbnQgaTsKKwllbnVtIHsgQ09ERV9ERUxUQSA9IE1FTV9TVl9JTlRSUFQgLSBQQUdFX09GRlNFVCB9OworCisJaW9tZW1fcmVzb3VyY2UuZW5kID0gLTFMTDsKKyNpZmRlZiBDT05GSUdfUENJCisJaW5zZXJ0X25vbl9idXNfcmVzb3VyY2UoKTsKKyNlbmRpZgorCisJZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCQl1NjQgc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm5baV07CisJCXU2NCBlbmRfcGZuID0gbm9kZV9lbmRfcGZuW2ldOworCisjaWZkZWYgQ09ORklHX1BDSQorCQlpZiAoc3RhcnRfcGZuIDw9IHBjaV9yZXNlcnZlX3N0YXJ0X3BmbiAmJgorCQkgICAgZW5kX3BmbiA+IHBjaV9yZXNlcnZlX3N0YXJ0X3BmbikgeworCQkJaWYgKGVuZF9wZm4gPiBwY2lfcmVzZXJ2ZV9lbmRfcGZuKQorCQkJCWluc2VydF9yYW1fcmVzb3VyY2UocGNpX3Jlc2VydmVfZW5kX3BmbiwKKwkJCQkJCSAgICAgZW5kX3Bmbik7CisJCQllbmRfcGZuID0gcGNpX3Jlc2VydmVfc3RhcnRfcGZuOworCQl9CisjZW5kaWYKKwkJaW5zZXJ0X3JhbV9yZXNvdXJjZShzdGFydF9wZm4sIGVuZF9wZm4pOworCX0KKworCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSBfX3BhKF90ZXh0IC0gQ09ERV9ERUxUQSk7CisJY29kZV9yZXNvdXJjZS5lbmQgPSBfX3BhKF9ldGV4dCAtIENPREVfREVMVEEpLTE7CisJZGF0YV9yZXNvdXJjZS5zdGFydCA9IF9fcGEoX3NkYXRhKTsKKwlkYXRhX3Jlc291cmNlLmVuZCA9IF9fcGEoX2VuZCktMTsKKworCWluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZjb2RlX3Jlc291cmNlKTsKKwlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmZGF0YV9yZXNvdXJjZSk7CisKKyNpZmRlZiBDT05GSUdfS0VYRUMKKwlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmY3Jhc2hrX3Jlcyk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwocmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc2lnbmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViNjZhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvc2lnbmFsLmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWNvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vc2lnZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhcmNoL2ludGVycnVwdHMuaD4KKworI2RlZmluZSBERUJVR19TSUcgMAorCisjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQorCisKK2xvbmcgX3N5c19zaWdhbHRzdGFjayhjb25zdCBzdGFja190IF9fdXNlciAqdXNzLAorCQkgICAgICBzdGFja190IF9fdXNlciAqdW9zcywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIGRvX3NpZ2FsdHN0YWNrKHVzcywgdW9zcywgcmVncy0+c3ApOworfQorCisKKy8qCisgKiBEbyBhIHNpZ25hbCByZXR1cm47IHVuZG8gdGhlIHNpZ25hbCBzdGFjay4KKyAqLworCitpbnQgcmVzdG9yZV9zaWdjb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkgICAgICAgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYywgbG9uZyAqcHIwKQoreworCWludCBlcnIgPSAwOworCWludCBpOworCisJLyogQWx3YXlzIG1ha2UgYW55IHBlbmRpbmcgcmVzdGFydGVkIHN5c3RlbSBjYWxscyByZXR1cm4gLUVJTlRSICovCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrLmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgcHRfcmVncykvc2l6ZW9mKGxvbmcpOyArK2kpCisJCWVyciB8PSBfX2dldF91c2VyKCgobG9uZyAqKXJlZ3MpW2ldLAorCQkJCSAgJigobG9uZyBfX3VzZXIgKikoJnNjLT5yZWdzKSlbaV0pOworCisJcmVncy0+ZmF1bHRudW0gPSBJTlRfU1dJTlRfMV9TSUdSRVRVUk47CisKKwllcnIgfD0gX19nZXRfdXNlcigqcHIwLCAmc2MtPnJlZ3MucmVnc1swXSk7CisJcmV0dXJuIGVycjsKK30KKworLyogc2lncmV0dXJuKCkgcmV0dXJucyBsb25nIHNpbmNlIGl0IHJlc3RvcmVzIHIwIGluIHRoZSBpbnRlcnJ1cHRlZCBjb2RlLiAqLworbG9uZyBfc3lzX3J0X3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICpmcmFtZSA9CisJCShzdHJ1Y3QgcnRfc2lnZnJhbWUgX191c2VyICopKHJlZ3MtPnNwKTsKKwlzaWdzZXRfdCBzZXQ7CisJbG9uZyByMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcmFtZSwgc2l6ZW9mKCpmcmFtZSkpKQorCQlnb3RvIGJhZGZyYW1lOworCWlmIChfX2NvcHlfZnJvbV91c2VyKCZzZXQsICZmcmFtZS0+dWMudWNfc2lnbWFzaywgc2l6ZW9mKHNldCkpKQorCQlnb3RvIGJhZGZyYW1lOworCisJc2lnZGVsc2V0bWFzaygmc2V0LCB+X0JMT0NLQUJMRSk7CisJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJY3VycmVudC0+YmxvY2tlZCA9IHNldDsKKwlyZWNhbGNfc2lncGVuZGluZygpOworCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisKKwlpZiAocmVzdG9yZV9zaWdjb250ZXh0KHJlZ3MsICZmcmFtZS0+dWMudWNfbWNvbnRleHQsICZyMCkpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlpZiAoZG9fc2lnYWx0c3RhY2soJmZyYW1lLT51Yy51Y19zdGFjaywgTlVMTCwgcmVncy0+c3ApID09IC1FRkFVTFQpCisJCWdvdG8gYmFkZnJhbWU7CisKKwlyZXR1cm4gcjA7CisKK2JhZGZyYW1lOgorCWZvcmNlX3NpZyhTSUdTRUdWLCBjdXJyZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB1cCBhIHNpZ25hbCBmcmFtZS4KKyAqLworCitpbnQgc2V0dXBfc2lnY29udGV4dChzdHJ1Y3Qgc2lnY29udGV4dCBfX3VzZXIgKnNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpL3NpemVvZihsb25nKTsgKytpKQorCQllcnIgfD0gX19wdXRfdXNlcigoKGxvbmcgKilyZWdzKVtpXSwKKwkJCQkgICYoKGxvbmcgX191c2VyICopKCZzYy0+cmVncykpW2ldKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgd2hpY2ggc3RhY2sgdG8gdXNlLi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fdXNlciAqZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQlzaXplX3QgZnJhbWVfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHNwOworCisJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8KKwlzcCA9IHJlZ3MtPnNwOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgb24gdGhlIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgYW5kIHdvdWxkIG92ZXJmbG93CisJICogaXQsIGRvbid0LiAgUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2UKKwkgKiB3aWxsIGRpZSB3aXRoIFNJR1NFR1YuCisJICovCisJaWYgKG9uX3NpZ19zdGFjayhzcCkgJiYgIWxpa2VseShvbl9zaWdfc3RhY2soc3AgLSBmcmFtZV9zaXplKSkpCisJCXJldHVybiAodm9pZCBfX3VzZXIgX19mb3JjZSAqKS0xVUw7CisKKwkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgeworCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQorCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwl9CisKKwlzcCAtPSBmcmFtZV9zaXplOworCS8qCisJICogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgYWNjb3JkaW5nIHRvIHRoZSBUSUxFIEFCSSwKKwkgKiBpLmUuIHNvIHRoYXQgb24gZnVuY3Rpb24gZW50cnkgKHNwICYgMTUpID09IDAuCisJICovCisJc3AgJj0gLTE2VUw7CisJcmV0dXJuICh2b2lkIF9fdXNlciAqKSBzcDsKK30KKworc3RhdGljIGludCBzZXR1cF9ydF9mcmFtZShpbnQgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLCBzaWdpbmZvX3QgKmluZm8sCisJCQkgICBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIHJlc3RvcmVyOworCXN0cnVjdCBydF9zaWdmcmFtZSBfX3VzZXIgKmZyYW1lOworCWludCBlcnIgPSAwOworCWludCB1c2lnOworCisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKKwkJZ290byBnaXZlX3NpZ3NlZ3Y7CisKKwl1c2lnID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbgorCQkmJiBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluLT5zaWduYWxfaW52bWFwCisJCSYmIHNpZyA8IDMyCisJCT8gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcFtzaWddCisJCTogc2lnOworCisJLyogQWx3YXlzIHdyaXRlIGF0IGxlYXN0IHRoZSBzaWduYWwgbnVtYmVyIGZvciB0aGUgc3RhY2sgYmFja3RyYWNlci4gKi8KKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykgeworCQkvKiBBdCBzaWdyZXR1cm4gdGltZSwgcmVzdG9yZSB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIHRvby4gKi8KKwkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZmcmFtZS0+aW5mbywgaW5mbyk7CisJCXJlZ3MtPmZsYWdzIHw9IFBUX0ZMQUdTX1JFU1RPUkVfUkVHUzsKKwl9IGVsc2UgeworCQllcnIgfD0gX19wdXRfdXNlcihpbmZvLT5zaV9zaWdubywgJmZyYW1lLT5pbmZvLnNpX3NpZ25vKTsKKwl9CisKKwkvKiBDcmVhdGUgdGhlIHVjb250ZXh0LiAgKi8KKwllcnIgfD0gX19jbGVhcl91c2VyKCZmcmFtZS0+c2F2ZV9hcmVhLCBzaXplb2YoZnJhbWUtPnNhdmVfYXJlYSkpOworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3MpOworCWVyciB8PSBfX3B1dF91c2VyKE5VTEwsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9IF9fcHV0X3VzZXIoKHZvaWQgX191c2VyICopKGN1cnJlbnQtPnNhc19zc19zcCksCisJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOworCWVyciB8PSBfX3B1dF91c2VyKHNhc19zc19mbGFncyhyZWdzLT5zcCksCisJCQkgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOworCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOworCWVyciB8PSBzZXR1cF9zaWdjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIHJlZ3MpOworCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmZnJhbWUtPnVjLnVjX3NpZ21hc2ssIHNldCwgc2l6ZW9mKCpzZXQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKworCXJlc3RvcmVyID0gVkRTT19CQVNFOworCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikKKwkJcmVzdG9yZXIgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOworCisJLyoKKwkgKiBTZXQgdXAgcmVnaXN0ZXJzIGZvciBzaWduYWwgaGFuZGxlci4KKwkgKiBSZWdpc3RlcnMgdGhhdCB3ZSBkb24ndCBtb2RpZnkga2VlcCB0aGUgdmFsdWUgdGhleSBoYWQgZnJvbQorCSAqIHVzZXItc3BhY2UgYXQgdGhlIHRpbWUgd2UgdG9vayB0aGUgc2lnbmFsLgorCSAqLworCXJlZ3MtPnBjID0gKHVuc2lnbmVkIGxvbmcpIGthLT5zYS5zYV9oYW5kbGVyOworCXJlZ3MtPmV4MSA9IFBMX0lDU19FWDEoVVNFUl9QTCwgMSk7IC8qIHNldCBjcml0IHNlYyBpbiBoYW5kbGVyICovCisJcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJcmVncy0+bHIgPSByZXN0b3JlcjsKKwlyZWdzLT5yZWdzWzBdID0gKHVuc2lnbmVkIGxvbmcpIHVzaWc7CisKKwlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykgeworCQkvKiBOZWVkIGV4dHJhIGFyZ3VtZW50cywgc28gbWFyayB0byByZXN0b3JlIGNhbGxlci1zYXZlcy4gKi8KKwkJcmVncy0+cmVnc1sxXSA9ICh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPmluZm87CisJCXJlZ3MtPnJlZ3NbMl0gPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT51YzsKKwkJcmVncy0+ZmxhZ3MgfD0gUFRfRkxBR1NfQ0FMTEVSX1NBVkVTOworCX0KKworCS8qCisJICogTm90aWZ5IGFueSB0cmFjZXIgdGhhdCB3YXMgc2luZ2xlLXN0ZXBwaW5nIGl0LgorCSAqIFRoZSB0cmFjZXIgbWF5IHdhbnQgdG8gc2luZ2xlLXN0ZXAgaW5zaWRlIHRoZQorCSAqIGhhbmRsZXIgdG9vLgorCSAqLworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TSU5HTEVTVEVQKSkKKwkJcHRyYWNlX25vdGlmeShTSUdUUkFQKTsKKworCXJldHVybiAwOworCitnaXZlX3NpZ3NlZ3Y6CisJZm9yY2Vfc2lnc2VndihzaWcsIGN1cnJlbnQpOworCXJldHVybiAtRUZBVUxUOworfQorCisvKgorICogT0ssIHdlJ3JlIGludm9raW5nIGEgaGFuZGxlcgorICovCisKK3N0YXRpYyBpbnQgaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc2lnaW5mb190ICppbmZvLAorCQkJIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ3NldF90ICpvbGRzZXQsCisJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJldDsKKworCisJLyogQXJlIHdlIGZyb20gYSBzeXN0ZW0gY2FsbD8gKi8KKwlpZiAocmVncy0+ZmF1bHRudW0gPT0gSU5UX1NXSU5UXzEpIHsKKwkJLyogSWYgc28sIGNoZWNrIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLiAqLworCQlzd2l0Y2ggKHJlZ3MtPnJlZ3NbMF0pIHsKKwkJY2FzZSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOgorCQljYXNlIC1FUkVTVEFSVE5PSEFORDoKKwkJCXJlZ3MtPnJlZ3NbMF0gPSAtRUlOVFI7CisJCQlicmVhazsKKworCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKSB7CisJCQkJcmVncy0+cmVnc1swXSA9IC1FSU5UUjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgLUVSRVNUQVJUTk9JTlRSOgorCQkJLyogUmVsb2FkIGNhbGxlci1zYXZlcyB0byByZXN0b3JlIHIwLi5yNSBhbmQgcjEwLiAqLworCQkJcmVncy0+ZmxhZ3MgfD0gUFRfRkxBR1NfQ0FMTEVSX1NBVkVTOworCQkJcmVncy0+cmVnc1swXSA9IHJlZ3MtPm9yaWdfcjA7CisJCQlyZWdzLT5wYyAtPSA4OworCQl9CisJfQorCisJLyogU2V0IHVwIHRoZSBzdGFjayBmcmFtZSAqLworI2lmZGVmIENPTkZJR19DT01QQVQKKwlpZiAoaXNfY29tcGF0X3Rhc2soKSkKKwkJcmV0ID0gY29tcGF0X3NldHVwX3J0X2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncyk7CisJZWxzZQorI2VuZGlmCisJCXJldCA9IHNldHVwX3J0X2ZyYW1lKHNpZywga2EsIGluZm8sIG9sZHNldCwgcmVncyk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFRoaXMgY29kZSBpcyBvbmx5IGNhbGxlZCBmcm9tIHN5c3RlbSBjYWxscyBvciBmcm9tCisJCSAqIHRoZSB3b3JrX3BlbmRpbmcgcGF0aCBpbiB0aGUgcmV0dXJuLXRvLXVzZXIgY29kZSwgYW5kCisJCSAqIGVpdGhlciB3YXkgd2UgY2FuIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIHVuY29uZGl0aW9uYWxseS4KKwkJICovCisJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCQlzaWdvcnNldHMoJmN1cnJlbnQtPmJsb2NrZWQsCisJCQkgICZjdXJyZW50LT5ibG9ja2VkLCAma2EtPnNhLnNhX21hc2spOworCQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKKwkJCXNpZ2FkZHNldCgmY3VycmVudC0+YmxvY2tlZCwgc2lnKTsKKwkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTm90ZSB0aGF0ICdpbml0JyBpcyBhIHNwZWNpYWwgcHJvY2VzczogaXQgZG9lc24ndCBnZXQgc2lnbmFscyBpdCBkb2Vzbid0CisgKiB3YW50IHRvIGhhbmRsZS4gVGh1cyB5b3UgY2Fubm90IGtpbGwgaW5pdCBldmVuIHdpdGggYSBTSUdLSUxMIGV2ZW4gYnkKKyAqIG1pc3Rha2UuCisgKi8KK3ZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXNpZ2luZm9fdCBpbmZvOworCWludCBzaWducjsKKwlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CisJc2lnc2V0X3QgKm9sZHNldDsKKworCS8qCisJICogaTM4NiB3aWxsIGNoZWNrIGlmIHdlJ3JlIGNvbWluZyBmcm9tIGtlcm5lbCBtb2RlIGFuZCBiYWlsIG91dAorCSAqIGhlcmUuICBJbiBteSBleHBlcmllbmNlIHRoaXMganVzdCB0dXJucyB3ZWlyZCBjcmFzaGVzIGludG8KKwkgKiB3ZWlyZCBzcGluLWhhbmdzLiAgQnV0IGlmIHdlIGZpbmQgYSBjYXNlIHdoZXJlIHRoaXMgc2VlbXMKKwkgKiBoZWxwZnVsLCB3ZSBjYW4gcmVpbnN0YXRlIHRoZSBjaGVjayBvbiAiIXVzZXJfbW9kZShyZWdzKSIuCisJICovCisKKwlpZiAoY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJiBUU19SRVNUT1JFX1NJR01BU0spCisJCW9sZHNldCA9ICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrOworCWVsc2UKKwkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7CisKKwlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKKwlpZiAoc2lnbnIgPiAwKSB7CisJCS8qIFdoZWUhIEFjdHVhbGx5IGRlbGl2ZXIgdGhlIHNpZ25hbC4gICovCisJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAmaW5mbywgJmthLCBvbGRzZXQsIHJlZ3MpID09IDApIHsKKwkJCS8qCisJCQkgKiBBIHNpZ25hbCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZDsgdGhlIHNhdmVkCisJCQkgKiBzaWdtYXNrIHdpbGwgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgc2lnbmFsIGZyYW1lLAorCQkJICogYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLCBzbyB3ZSBjYW4gc2ltcGx5CisJCQkgKiBjbGVhciB0aGUgVFNfUkVTVE9SRV9TSUdNQVNLIGZsYWcuCisJCQkgKi8KKwkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19SRVNUT1JFX1NJR01BU0s7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLworCWlmIChyZWdzLT5mYXVsdG51bSA9PSBJTlRfU1dJTlRfMSkgeworCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KKwkJc3dpdGNoIChyZWdzLT5yZWdzWzBdKSB7CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5mbGFncyB8PSBQVF9GTEFHU19DQUxMRVJfU0FWRVM7CisJCQlyZWdzLT5yZWdzWzBdID0gcmVncy0+b3JpZ19yMDsKKwkJCXJlZ3MtPnBjIC09IDg7CisJCQlicmVhazsKKworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCQlyZWdzLT5mbGFncyB8PSBQVF9GTEFHU19DQUxMRVJfU0FWRVM7CisJCQlyZWdzLT5yZWdzW1RSRUdfU1lTQ0FMTF9OUl0gPSBfX05SX3Jlc3RhcnRfc3lzY2FsbDsKKwkJCXJlZ3MtPnBjIC09IDg7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIElmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIGp1c3QgcHV0IHRoZSBzYXZlZCBzaWdtYXNrIGJhY2suICovCisJaWYgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICYgVFNfUkVTVE9SRV9TSUdNQVNLKSB7CisJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19SRVNUT1JFX1NJR01BU0s7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgTlVMTCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9zaW5nbGVfc3RlcC5jIGIvYXJjaC90aWxlL2tlcm5lbC9zaW5nbGVfc3RlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlYzRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL3NpbmdsZV9zdGVwLmMKQEAgLTAsMCArMSw2NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogQSBjb2RlLXJld3JpdGVyIHRoYXQgZW5hYmxlcyBpbnN0cnVjdGlvbiBzaW5nbGUtc3RlcHBpbmcuCisgKiBEZXJpdmVkIGZyb20gaUxpYidzIHNpbmdsZS1zdGVwcGluZyBjb2RlLgorICovCisKKyNpZm5kZWYgX190aWxlZ3hfXyAgIC8qIE5vIHN1cHBvcnQgZm9yIHNpbmdsZS1zdGVwIHlldC4gKi8KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgb24gdGhlIFRJTEUgcGxhdGZvcm0gKi8KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vb3Bjb2RlLXRpbGUuaD4KKyNpbmNsdWRlIDxhc20vb3Bjb2RlX2NvbnN0YW50cy5oPgorI2luY2x1ZGUgPGFyY2gvYWJpLmg+CisKKyNkZWZpbmUgc2lnbkV4dGVuZDE3KHZhbCkgc2lnbl9leHRlbmQoKHZhbCksIDE3KQorI2RlZmluZSBUSUxFX1gxX01BU0sgKDB4ZmZmZmZmZmZVTEwgPDwgMzEpCisKK2ludCB1bmFsaWduZWRfcHJpbnRrOworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF91bmFsaWduZWRfcHJpbnRrKGNoYXIgKnN0cikKK3sKKwlsb25nIHZhbDsKKwlpZiAoc3RyaWN0X3N0cnRvbChzdHIsIDAsICZ2YWwpICE9IDApCisJCXJldHVybiAwOworCXVuYWxpZ25lZF9wcmludGsgPSB2YWw7CisJcHJfaW5mbygiUHJpbnRrIGZvciBlYWNoIHVuYWxpZ25lZCBkYXRhIGFjY2Vzc2VzIGlzICVzXG4iLAorCQl1bmFsaWduZWRfcHJpbnRrID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJ1bmFsaWduZWRfcHJpbnRrPSIsIHNldHVwX3VuYWxpZ25lZF9wcmludGspOworCit1bnNpZ25lZCBpbnQgdW5hbGlnbmVkX2ZpeHVwX2NvdW50OworCitlbnVtIG1lbV9vcCB7CisJTUVNT1BfTk9ORSwKKwlNRU1PUF9MT0FELAorCU1FTU9QX1NUT1JFLAorCU1FTU9QX0xPQURfUE9TVElOQ1IsCisJTUVNT1BfU1RPUkVfUE9TVElOQ1IKK307CisKK3N0YXRpYyBpbmxpbmUgdGlsZV9idW5kbGVfYml0cyBzZXRfQnJPZmZfWDEodGlsZV9idW5kbGVfYml0cyBuLCBpbnQzMl90IG9mZnNldCkKK3sKKwl0aWxlX2J1bmRsZV9iaXRzIHJlc3VsdDsKKworCS8qIG1hc2sgb3V0IHRoZSBvbGQgb2Zmc2V0ICovCisJdGlsZV9idW5kbGVfYml0cyBtYXNrID0gY3JlYXRlX0JyT2ZmX1gxKC0xKTsKKwlyZXN1bHQgPSBuICYgKH5tYXNrKTsKKworCS8qIG9yIGluIHRoZSBuZXcgb2Zmc2V0ICovCisJcmVzdWx0IHw9IGNyZWF0ZV9Cck9mZl9YMShvZmZzZXQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB0aWxlX2J1bmRsZV9iaXRzIG1vdmVfWDEodGlsZV9idW5kbGVfYml0cyBuLCBpbnQgZGVzdCwgaW50IHNyYykKK3sKKwl0aWxlX2J1bmRsZV9iaXRzIHJlc3VsdDsKKwl0aWxlX2J1bmRsZV9iaXRzIG9wOworCisJcmVzdWx0ID0gbiAmICh+VElMRV9YMV9NQVNLKTsKKworCW9wID0gY3JlYXRlX09wY29kZV9YMShTUEVDSUFMXzBfT1BDT0RFX1gxKSB8CisJCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoT1JfU1BFQ0lBTF8wX09QQ09ERV9YMSkgfAorCQljcmVhdGVfRGVzdF9YMShkZXN0KSB8CisJCWNyZWF0ZV9TcmNCX1gxKFRSRUdfWkVSTykgfAorCQljcmVhdGVfU3JjQV9YMShzcmMpIDsKKworCXJlc3VsdCB8PSBvcDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHRpbGVfYnVuZGxlX2JpdHMgbm9wX1gxKHRpbGVfYnVuZGxlX2JpdHMgbikKK3sKKwlyZXR1cm4gbW92ZV9YMShuLCBUUkVHX1pFUk8sIFRSRUdfWkVSTyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdGlsZV9idW5kbGVfYml0cyBhZGRpX1gxKAorCXRpbGVfYnVuZGxlX2JpdHMgbiwgaW50IGRlc3QsIGludCBzcmMsIGludCBpbW0pCit7CisJbiAmPSB+VElMRV9YMV9NQVNLOworCisJbiB8PSAgKGNyZWF0ZV9TcmNBX1gxKHNyYykgfAorCSAgICAgICBjcmVhdGVfRGVzdF9YMShkZXN0KSB8CisJICAgICAgIGNyZWF0ZV9JbW04X1gxKGltbSkgfAorCSAgICAgICBjcmVhdGVfU19YMSgwKSB8CisJICAgICAgIGNyZWF0ZV9PcGNvZGVfWDEoSU1NXzBfT1BDT0RFX1gxKSB8CisJICAgICAgIGNyZWF0ZV9JbW1PcGNvZGVFeHRlbnNpb25fWDEoQURESV9JTU1fMF9PUENPREVfWDEpKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgdGlsZV9idW5kbGVfYml0cyByZXdyaXRlX2xvYWRfc3RvcmVfdW5hbGlnbmVkKAorCXN0cnVjdCBzaW5nbGVfc3RlcF9zdGF0ZSAqc3RhdGUsCisJdGlsZV9idW5kbGVfYml0cyBidW5kbGUsCisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJZW51bSBtZW1fb3AgbWVtX29wLAorCWludCBzaXplLCBpbnQgc2lnbl9leHQpCit7CisJdW5zaWduZWQgY2hhciBfX3VzZXIgKmFkZHI7CisJaW50IHZhbF9yZWcsIGFkZHJfcmVnLCBlcnIsIHZhbDsKKworCS8qIEdldCBhZGRyZXNzIGFuZCB2YWx1ZSByZWdpc3RlcnMgKi8KKwlpZiAoYnVuZGxlICYgVElMRV9CVU5ETEVfWV9FTkNPRElOR19NQVNLKSB7CisJCWFkZHJfcmVnID0gZ2V0X1NyY0FfWTIoYnVuZGxlKTsKKwkJdmFsX3JlZyA9IGdldF9TcmNCRGVzdF9ZMihidW5kbGUpOworCX0gZWxzZSBpZiAobWVtX29wID09IE1FTU9QX0xPQUQgfHwgbWVtX29wID09IE1FTU9QX0xPQURfUE9TVElOQ1IpIHsKKwkJYWRkcl9yZWcgPSBnZXRfU3JjQV9YMShidW5kbGUpOworCQl2YWxfcmVnICA9IGdldF9EZXN0X1gxKGJ1bmRsZSk7CisJfSBlbHNlIHsKKwkJYWRkcl9yZWcgPSBnZXRfU3JjQV9YMShidW5kbGUpOworCQl2YWxfcmVnICA9IGdldF9TcmNCX1gxKGJ1bmRsZSk7CisJfQorCisJLyoKKwkgKiBJZiByZWdpc3RlcnMgYXJlIG5vdCBHUFJzLCBkb24ndCB0cnkgdG8gaGFuZGxlIGl0LgorCSAqCisJICogRklYTUU6IHdlIGNvdWxkIGhhbmRsZSBub24tR1BSIGxvYWRzIGJ5IGdldHRpbmcgdGhlIHJlYWwgdmFsdWUKKwkgKiBmcm9tIG1lbW9yeSwgd3JpdGluZyBpdCB0byB0aGUgc2luZ2xlIHN0ZXAgYnVmZmVyLCB1c2luZyBhCisJICogdGVtcF9yZWcgdG8gaG9sZCBhIHBvaW50ZXIgdG8gdGhhdCBtZW1vcnksIHRoZW4gZXhlY3V0aW5nIHRoYXQKKwkgKiBpbnN0cnVjdGlvbiBhbmQgcmVzZXR0aW5nIHRlbXBfcmVnLiAgRm9yIG5vbi1HUFIgc3RvcmVzLCBpdCdzIGEKKwkgKiBsaXR0bGUgdHJpY2tpZXI7IHdlIGNvdWxkIHVzZSB0aGUgc2luZ2xlIHN0ZXAgYnVmZmVyIGZvciB0aGF0CisJICogdG9vLCBidXQgd2UnZCBoYXZlIHRvIGFkZCBzb21lIG1vcmUgc3RhdGUgYml0cyBzbyB0aGF0IHdlIGNvdWxkCisJICogY2FsbCBiYWNrIGluIGhlcmUgdG8gY29weSB0aGF0IHZhbHVlIHRvIHRoZSByZWFsIHRhcmdldC4gIEZvcgorCSAqIG5vdywgd2UganVzdCBoYW5kbGUgdGhlIHNpbXBsZSBjYXNlLgorCSAqLworCWlmICgodmFsX3JlZyA+PSBQVFJFR1NfTlJfR1BSUyAmJgorCSAgICAgKHZhbF9yZWcgIT0gVFJFR19aRVJPIHx8CisJICAgICAgbWVtX29wID09IE1FTU9QX0xPQUQgfHwKKwkgICAgICBtZW1fb3AgPT0gTUVNT1BfTE9BRF9QT1NUSU5DUikpIHx8CisJICAgIGFkZHJfcmVnID49IFBUUkVHU19OUl9HUFJTKQorCQlyZXR1cm4gYnVuZGxlOworCisJLyogSWYgaXQncyBhbGlnbmVkLCBkb24ndCBoYW5kbGUgaXQgc3BlY2lhbGx5ICovCisJYWRkciA9ICh2b2lkIF9fdXNlciAqKXJlZ3MtPnJlZ3NbYWRkcl9yZWddOworCWlmICgoKHVuc2lnbmVkIGxvbmcpYWRkciAlIHNpemUpID09IDApCisJCXJldHVybiBidW5kbGU7CisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCisjIGVycm9yIFdlIGFzc3VtZSBsaXR0bGUtZW5kaWFuIHJlcHJlc2VudGF0aW9uIHdpdGggY29weV94eF91c2VyIHNpemUgMiBoZXJlCisjZW5kaWYKKwkvKiBIYW5kbGUgdW5hbGlnbmVkIGxvYWQvc3RvcmUgKi8KKwlpZiAobWVtX29wID09IE1FTU9QX0xPQUQgfHwgbWVtX29wID09IE1FTU9QX0xPQURfUE9TVElOQ1IpIHsKKwkJdW5zaWduZWQgc2hvcnQgdmFsXzE2OworCQlzd2l0Y2ggKHNpemUpIHsKKwkJY2FzZSAyOgorCQkJZXJyID0gY29weV9mcm9tX3VzZXIoJnZhbF8xNiwgYWRkciwgc2l6ZW9mKHZhbF8xNikpOworCQkJdmFsID0gc2lnbl9leHQgPyAoKHNob3J0KXZhbF8xNikgOiB2YWxfMTY7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJZXJyID0gY29weV9mcm9tX3VzZXIoJnZhbCwgYWRkciwgc2l6ZW9mKHZhbCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlpZiAoZXJyID09IDApIHsKKwkJCXN0YXRlLT51cGRhdGVfcmVnID0gdmFsX3JlZzsKKwkJCXN0YXRlLT51cGRhdGVfdmFsdWUgPSB2YWw7CisJCQlzdGF0ZS0+dXBkYXRlID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCXZhbCA9ICh2YWxfcmVnID09IFRSRUdfWkVSTykgPyAwIDogcmVncy0+cmVnc1t2YWxfcmVnXTsKKwkJZXJyID0gY29weV90b191c2VyKGFkZHIsICZ2YWwsIHNpemUpOworCX0KKworCWlmIChlcnIpIHsKKwkJc2lnaW5mb190IGluZm8gPSB7CisJCQkuc2lfc2lnbm8gPSBTSUdTRUdWLAorCQkJLnNpX2NvZGUgPSBTRUdWX01BUEVSUiwKKwkJCS5zaV9hZGRyID0gYWRkcgorCQl9OworCQlmb3JjZV9zaWdfaW5mbyhpbmZvLnNpX3NpZ25vLCAmaW5mbywgY3VycmVudCk7CisJCXJldHVybiAodGlsZV9idW5kbGVfYml0cykgMDsKKwl9CisKKwlpZiAodW5hbGlnbmVkX2ZpeHVwID09IDApIHsKKwkJc2lnaW5mb190IGluZm8gPSB7CisJCQkuc2lfc2lnbm8gPSBTSUdCVVMsCisJCQkuc2lfY29kZSA9IEJVU19BRFJBTE4sCisJCQkuc2lfYWRkciA9IGFkZHIKKwkJfTsKKwkJZm9yY2Vfc2lnX2luZm8oaW5mby5zaV9zaWdubywgJmluZm8sIGN1cnJlbnQpOworCQlyZXR1cm4gKHRpbGVfYnVuZGxlX2JpdHMpIDA7CisJfQorCisJaWYgKHVuYWxpZ25lZF9wcmludGsgfHwgdW5hbGlnbmVkX2ZpeHVwX2NvdW50ID09IDApIHsKKwkJcHJfaW5mbygiUHJvY2VzcyAlZC8lczogUEMgJSNseDogRml4dXAgb2YiCisJCQkiIHVuYWxpZ25lZCAlcyBhdCAlI2x4LlxuIiwKKwkJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgcmVncy0+cGMsCisJCQkobWVtX29wID09IE1FTU9QX0xPQUQgfHwKKwkJCSBtZW1fb3AgPT0gTUVNT1BfTE9BRF9QT1NUSU5DUikgPworCQkJImxvYWQiIDogInN0b3JlIiwKKwkJCSh1bnNpZ25lZCBsb25nKWFkZHIpOworCQlpZiAoIXVuYWxpZ25lZF9wcmludGspIHsKKyNkZWZpbmUgUCBwcl9pbmZvCitQKCJcbiIpOworUCgiVW5hbGlnbmVkIGZpeHVwcyBpbiB0aGUga2VybmVsIHdpbGwgc2xvdyB5b3VyIGFwcGxpY2F0aW9uIGNvbnNpZGVyYWJseS5cbiIpOworUCgiVG8gZmluZCB0aGVtLCB3cml0ZSBhIFwiMVwiIHRvIC9wcm9jL3N5cy90aWxlL3VuYWxpZ25lZF9maXh1cC9wcmludGssXG4iKTsKK1AoIndoaWNoIHJlcXVlc3RzIHRoZSBrZXJuZWwgc2hvdyBhbGwgdW5hbGlnbmVkIGZpeHVwcywgb3Igd3JpdGUgYSBcIjBcIlxuIik7CitQKCJ0byAvcHJvYy9zeXMvdGlsZS91bmFsaWduZWRfZml4dXAvZW5hYmxlZCwgaW4gd2hpY2ggY2FzZSBlYWNoIHVuYWxpZ25lZFxuIik7CitQKCJhY2Nlc3Mgd2lsbCBiZWNvbWUgYSBTSUdCVVMgeW91IGNhbiBkZWJ1Zy4gTm8gZnVydGhlciB3YXJuaW5ncyB3aWxsIGJlXG4iKTsKK1AoInNob3duIHNvIGFzIHRvIGF2b2lkIGFkZGl0aW9uYWwgc2xvd2Rvd24sIGJ1dCB5b3UgY2FuIHRyYWNrIHRoZSBudW1iZXJcbiIpOworUCgib2YgZml4dXBzIHBlcmZvcm1lZCB2aWEgL3Byb2Mvc3lzL3RpbGUvdW5hbGlnbmVkX2ZpeHVwL2NvdW50LlxuIik7CitQKCJVc2UgdGhlIHRpbGUtYWRkcjJsaW5lIGNvbW1hbmQgKHNlZSBcImluZm8gYWRkcjJsaW5lXCIpIHRvIGRlY29kZSBQQ3MuXG4iKTsKK1AoIlxuIik7CisjdW5kZWYgUAorCQl9CisJfQorCSsrdW5hbGlnbmVkX2ZpeHVwX2NvdW50OworCisJaWYgKGJ1bmRsZSAmIFRJTEVfQlVORExFX1lfRU5DT0RJTkdfTUFTSykgeworCQkvKiBDb252ZXJ0IHRoZSBZMiBpbnN0cnVjdGlvbiB0byBhIHByZWZldGNoLiAqLworCQlidW5kbGUgJj0gfihjcmVhdGVfU3JjQkRlc3RfWTIoLTEpIHwKKwkJCSAgICBjcmVhdGVfT3Bjb2RlX1kyKC0xKSk7CisJCWJ1bmRsZSB8PSAoY3JlYXRlX1NyY0JEZXN0X1kyKFRSRUdfWkVSTykgfAorCQkJICAgY3JlYXRlX09wY29kZV9ZMihMV19PUENPREVfWTIpKTsKKwkvKiBSZXBsYWNlIHRoZSBsb2FkIHBvc3RpbmNyIHdpdGggYW4gYWRkaSAqLworCX0gZWxzZSBpZiAobWVtX29wID09IE1FTU9QX0xPQURfUE9TVElOQ1IpIHsKKwkJYnVuZGxlID0gYWRkaV9YMShidW5kbGUsIGFkZHJfcmVnLCBhZGRyX3JlZywKKwkJCQkgZ2V0X0ltbThfWDEoYnVuZGxlKSk7CisJLyogUmVwbGFjZSB0aGUgc3RvcmUgcG9zdGluY3Igd2l0aCBhbiBhZGRpICovCisJfSBlbHNlIGlmIChtZW1fb3AgPT0gTUVNT1BfU1RPUkVfUE9TVElOQ1IpIHsKKwkJYnVuZGxlID0gYWRkaV9YMShidW5kbGUsIGFkZHJfcmVnLCBhZGRyX3JlZywKKwkJCQkgZ2V0X0Rlc3RfSW1tOF9YMShidW5kbGUpKTsKKwl9IGVsc2UgeworCQkvKiBDb252ZXJ0IHRoZSBYMSBpbnN0cnVjdGlvbiB0byBhIG5vcC4gKi8KKwkJYnVuZGxlICY9IH4oY3JlYXRlX09wY29kZV9YMSgtMSkgfAorCQkJICAgIGNyZWF0ZV9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gxKC0xKSB8CisJCQkgICAgY3JlYXRlX1VuT3Bjb2RlRXh0ZW5zaW9uX1gxKC0xKSk7CisJCWJ1bmRsZSB8PSAoY3JlYXRlX09wY29kZV9YMShTSFVOXzBfT1BDT0RFX1gxKSB8CisJCQkgICBjcmVhdGVfVW5TaE9wY29kZUV4dGVuc2lvbl9YMSgKKwkJCQkgICBVTl8wX1NIVU5fMF9PUENPREVfWDEpIHwKKwkJCSAgIGNyZWF0ZV9Vbk9wY29kZUV4dGVuc2lvbl9YMSgKKwkJCQkgICBOT1BfVU5fMF9TSFVOXzBfT1BDT0RFX1gxKSk7CisJfQorCisJcmV0dXJuIGJ1bmRsZTsKK30KKworLyoqCisgKiBzaW5nbGVfc3RlcF9vbmNlKCkgLSBlbnRyeSBwb2ludCB3aGVuIHNpbmdsZSBzdGVwcGluZyBoYXMgYmVlbiB0cmlnZ2VyZWQuCisgKiBAcmVnczogVGhlIG1hY2hpbmUgcmVnaXN0ZXIgc3RhdGUKKyAqCisgKiAgV2hlbiB3ZSBhcnJpdmUgYXQgdGhpcyByb3V0aW5lIHZpYSBhIHRyYW1wb2xpbmUsIHRoZSBzaW5nbGUgc3RlcAorICogIGVuZ2luZSBjb3BpZXMgdGhlIGV4ZWN1dGluZyBidW5kbGUgdG8gdGhlIHNpbmdsZSBzdGVwIGJ1ZmZlci4KKyAqICBJZiB0aGUgaW5zdHJ1Y3Rpb24gaXMgYSBjb25kaXRpb24gYnJhbmNoLCB0aGVuIHRoZSB0YXJnZXQgaXMKKyAqICByZXNldCB0byBvbmUgcGFzdCB0aGUgbmV4dCBpbnN0cnVjdGlvbi4gSWYgdGhlIGluc3RydWN0aW9uCisgKiAgc2V0cyB0aGUgbHIsIHRoZW4gdGhhdCBpcyBub3RlZC4gSWYgdGhlIGluc3RydWN0aW9uIGlzIGEganVtcAorICogIG9yIGNhbGwsIHRoZW4gdGhlIG5ldyB0YXJnZXQgcGMgaXMgcHJlc2VydmVkIGFuZCB0aGUgY3VycmVudAorICogIGJ1bmRsZSBpbnN0cnVjdGlvbiBzZXQgdG8gbnVsbC4KKyAqCisgKiAgVGhlIG5lY2Vzc2FyeSBwb3N0LXNpbmdsZS1zdGVwIHJld3JpdGluZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4KKyAqICBzaW5nbGVfc3RlcF9zdGF0ZS0+ICBXZSB1c2UgZGF0YSBzZWdtZW50IHZhbHVlcyBiZWNhdXNlIHRoZQorICogIHN0YWNrIHdpbGwgYmUgcmV3b3VuZCB3aGVuIHdlIHJ1biB0aGUgcmV3cml0dGVuIHNpbmdsZS1zdGVwcGVkCisgKiAgaW5zdHJ1Y3Rpb24uCisgKi8KK3ZvaWQgc2luZ2xlX3N0ZXBfb25jZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlleHRlcm4gdGlsZV9idW5kbGVfYml0cyBfX3NpbmdsZV9zdGVwX2lsbF9pbnNuOworCWV4dGVybiB0aWxlX2J1bmRsZV9iaXRzIF9fc2luZ2xlX3N0ZXBfal9pbnNuOworCWV4dGVybiB0aWxlX2J1bmRsZV9iaXRzIF9fc2luZ2xlX3N0ZXBfYWRkbGlfaW5zbjsKKwlleHRlcm4gdGlsZV9idW5kbGVfYml0cyBfX3NpbmdsZV9zdGVwX2F1bGlfaW5zbjsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmluZm8gPSAodm9pZCAqKWN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlzdHJ1Y3Qgc2luZ2xlX3N0ZXBfc3RhdGUgKnN0YXRlID0gaW5mby0+c3RlcF9zdGF0ZTsKKwlpbnQgaXNfc2luZ2xlX3N0ZXAgPSB0ZXN0X3RpX3RocmVhZF9mbGFnKGluZm8sIFRJRl9TSU5HTEVTVEVQKTsKKwl0aWxlX2J1bmRsZV9iaXRzIF9fdXNlciAqYnVmZmVyLCAqcGM7CisJdGlsZV9idW5kbGVfYml0cyBidW5kbGU7CisJaW50IHRlbXBfcmVnOworCWludCB0YXJnZXRfcmVnID0gVFJFR19MUjsKKwlpbnQgZXJyOworCWVudW0gbWVtX29wIG1lbV9vcCA9IE1FTU9QX05PTkU7CisJaW50IHNpemUgPSAwLCBzaWduX2V4dCA9IDA7ICAvKiBoYXBweSBjb21waWxlciAqLworCisJYXNtKAorIiAgICAucHVzaHNlY3Rpb24gLnJvZGF0YS5zaW5nbGVfc3RlcFxuIgorIiAgICAuYWxpZ24gOFxuIgorIiAgICAuZ2xvYmwgICAgX19zaW5nbGVfc3RlcF9pbGxfaW5zblxuIgorIl9fc2luZ2xlX3N0ZXBfaWxsX2luc246XG4iCisiICAgIGlsbFxuIgorIiAgICAuZ2xvYmwgICAgX19zaW5nbGVfc3RlcF9hZGRsaV9pbnNuXG4iCisiX19zaW5nbGVfc3RlcF9hZGRsaV9pbnNuOlxuIgorIiAgICB7IG5vcDsgYWRkbGkgcjAsIHplcm8sIDAgfVxuIgorIiAgICAuZ2xvYmwgICAgX19zaW5nbGVfc3RlcF9hdWxpX2luc25cbiIKKyJfX3NpbmdsZV9zdGVwX2F1bGlfaW5zbjpcbiIKKyIgICAgeyBub3A7IGF1bGkgcjAsIHIwLCAwIH1cbiIKKyIgICAgLmdsb2JsICAgIF9fc2luZ2xlX3N0ZXBfal9pbnNuXG4iCisiX19zaW5nbGVfc3RlcF9qX2luc246XG4iCisiICAgIGogLlxuIgorIiAgICAucG9wc2VjdGlvblxuIgorCSk7CisKKwlpZiAoc3RhdGUgPT0gTlVMTCkgeworCQkvKiBhbGxvY2F0ZSBhIHBhZ2Ugb2Ygd3JpdGFibGUsIGV4ZWN1dGFibGUgbWVtb3J5ICovCisJCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNpbmdsZV9zdGVwX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChzdGF0ZSA9PSBOVUxMKSB7CisJCQlwcl9lcnIoIk91dCBvZiBrZXJuZWwgbWVtb3J5IHRyeWluZyB0byBzaW5nbGUtc3RlcFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBhbGxvY2F0ZSBhIGNhY2hlIGxpbmUgb2Ygd3JpdGFibGUsIGV4ZWN1dGFibGUgbWVtb3J5ICovCisJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWJ1ZmZlciA9ICh2b2lkIF9fdXNlciAqKSBkb19tbWFwKE5VTEwsIDAsIDY0LAorCQkJCQkgIFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkJCSAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLAorCQkJCQkgIDApOworCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCQlpZiAoSVNfRVJSKCh2b2lkIF9fZm9yY2UgKilidWZmZXIpKSB7CisJCQlrZnJlZShzdGF0ZSk7CisJCQlwcl9lcnIoIk91dCBvZiBrZXJuZWwgcGFnZXMgdHJ5aW5nIHRvIHNpbmdsZS1zdGVwXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXN0YXRlLT5idWZmZXIgPSBidWZmZXI7CisJCXN0YXRlLT5pc19lbmFibGVkID0gMDsKKworCQlpbmZvLT5zdGVwX3N0YXRlID0gc3RhdGU7CisKKwkJLyogVmFsaWRhdGUgb3VyIHN0b3JlZCBpbnN0cnVjdGlvbiBwYXR0ZXJucyAqLworCQlCVUdfT04oZ2V0X09wY29kZV9YMShfX3NpbmdsZV9zdGVwX2FkZGxpX2luc24pICE9CisJCSAgICAgICBBRERMSV9PUENPREVfWDEpOworCQlCVUdfT04oZ2V0X09wY29kZV9YMShfX3NpbmdsZV9zdGVwX2F1bGlfaW5zbikgIT0KKwkJICAgICAgIEFVTElfT1BDT0RFX1gxKTsKKwkJQlVHX09OKGdldF9TcmNBX1gxKF9fc2luZ2xlX3N0ZXBfYWRkbGlfaW5zbikgIT0gVFJFR19aRVJPKTsKKwkJQlVHX09OKGdldF9EZXN0X1gxKF9fc2luZ2xlX3N0ZXBfYWRkbGlfaW5zbikgIT0gMCk7CisJCUJVR19PTihnZXRfSk9mZkxvbmdfWDEoX19zaW5nbGVfc3RlcF9qX2luc24pICE9IDApOworCX0KKworCS8qCisJICogSWYgd2UgYXJlIHJldHVybmluZyBmcm9tIGEgc3lzY2FsbCwgd2Ugc3RpbGwgaGF2ZW4ndCBoaXQgdGhlCisJICogImlsbCIgZm9yIHRoZSBzd2ludDEgaW5zdHJ1Y3Rpb24uICBTbyBiYWNrIHRoZSBQQyB1cCB0byBiZQorCSAqIHBvaW50aW5nIGF0IHRoZSBzd2ludDEsIGJ1dCB3ZSdsbCBhY3R1YWxseSByZXR1cm4gZGlyZWN0bHkKKwkgKiBiYWNrIHRvIHRoZSAiaWxsIiBzbyB3ZSBjb21lIGJhY2sgaW4gdmlhIFNJR0lMTCBhcyBpZiB3ZQorCSAqIGhhZCAiZXhlY3V0ZWQiIHRoZSBzd2ludDEgd2l0aG91dCBldmVyIGJlaW5nIGluIGtlcm5lbCBzcGFjZS4KKwkgKi8KKwlpZiAocmVncy0+ZmF1bHRudW0gPT0gSU5UX1NXSU5UXzEpCisJCXJlZ3MtPnBjIC09IDg7CisKKwlwYyA9ICh0aWxlX2J1bmRsZV9iaXRzIF9fdXNlciAqKShyZWdzLT5wYyk7CisJaWYgKGdldF91c2VyKGJ1bmRsZSwgcGMpICE9IDApIHsKKwkJcHJfZXJyKCJDb3VsZG4ndCByZWFkIGluc3RydWN0aW9uIGF0ICVwIHRyeWluZyB0byBzdGVwXG4iLCBwYyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBXZSdsbCBmb2xsb3cgdGhlIGluc3RydWN0aW9uIHdpdGggMiBpbGwgb3AgYnVuZGxlcyAqLworCXN0YXRlLT5vcmlnX3BjID0gKHVuc2lnbmVkIGxvbmcpcGM7CisJc3RhdGUtPm5leHRfcGMgPSAodW5zaWduZWQgbG9uZykocGMgKyAxKTsKKwlzdGF0ZS0+YnJhbmNoX25leHRfcGMgPSAwOworCXN0YXRlLT51cGRhdGUgPSAwOworCisJaWYgKCEoYnVuZGxlICYgVElMRV9CVU5ETEVfWV9FTkNPRElOR19NQVNLKSkgeworCQkvKiB0d28gd2lkZSwgY2hlY2sgZm9yIGNvbnRyb2wgZmxvdyAqLworCQlpbnQgb3Bjb2RlID0gZ2V0X09wY29kZV9YMShidW5kbGUpOworCisJCXN3aXRjaCAob3Bjb2RlKSB7CisJCS8qIGJyYW5jaGVzICovCisJCWNhc2UgQlJBTkNIX09QQ09ERV9YMToKKwkJeworCQkJaW50MzJfdCBvZmZzZXQgPSBzaWduRXh0ZW5kMTcoZ2V0X0JyT2ZmX1gxKGJ1bmRsZSkpOworCisJCQkvKgorCQkJICogRm9yIGJyYW5jaGVzLCB3ZSB1c2UgYSByZXdyaXRpbmcgdHJpY2sgdG8gbGV0IHRoZQorCQkJICogaGFyZHdhcmUgZXZhbHVhdGUgd2hldGhlciB0aGUgYnJhbmNoIGlzIHRha2VuIG9yCisJCQkgKiB1bnRha2VuLiAgV2UgcmVjb3JkIHRoZSB0YXJnZXQgb2Zmc2V0IGFuZCB0aGVuCisJCQkgKiByZXdyaXRlIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gdG8gdGFyZ2V0IDEgaW5zbgorCQkJICogYWhlYWQgaWYgdGhlIGJyYW5jaCBpcyB0YWtlbi4gIFdlIHRoZW4gZm9sbG93IHRoZQorCQkJICogcmV3cml0dGVuIGJyYW5jaCB3aXRoIHR3byBidW5kbGVzLCBlYWNoIGNvbnRhaW5pbmcKKwkJCSAqIGFuICJpbGwiIGluc3RydWN0aW9uLiBUaGUgc3VwZXJ2aXNvciBleGFtaW5lcyB0aGUKKwkJCSAqIHBjIGFmdGVyIHRoZSBzaW5nbGUgc3RlcCBjb2RlIGlzIGV4ZWN1dGVkLCBhbmQgaWYKKwkJCSAqIHRoZSBwYyBpcyB0aGUgZmlyc3QgaWxsIGluc3RydWN0aW9uLCB0aGVuIHRoZQorCQkJICogYnJhbmNoIChpZiBhbnkpIHdhcyBub3QgdGFrZW4uICBJZiB0aGUgcGMgaXMgdGhlCisJCQkgKiBzZWNvbmQgaWxsIGluc3RydWN0aW9uLCB0aGVuIHRoZSBicmFuY2ggd2FzCisJCQkgKiB0YWtlbi4gVGhlIG5ldyBwYyBpcyBjb21wdXRlZCBmb3IgdGhlc2UgY2FzZXMsIGFuZAorCQkJICogaW5zZXJ0ZWQgaW50byB0aGUgcmVnaXN0ZXJzIGZvciB0aGUgdGhyZWFkLiAgSWYKKwkJCSAqIHRoZSBwYyBpcyB0aGUgc3RhcnQgb2YgdGhlIHNpbmdsZSBzdGVwIGNvZGUsIHRoZW4KKwkJCSAqIGFuIGV4Y2VwdGlvbiBvciBpbnRlcnJ1cHQgd2FzIHRha2VuIGJlZm9yZSB0aGUKKwkJCSAqIGNvZGUgc3RhcnRlZCBwcm9jZXNzaW5nLCBhbmQgdGhlIHNhbWUgIm9yaWdpbmFsIgorCQkJICogcGMgaXMgcmVzdG9yZWQuICBUaGlzIGNoYW5nZSwgZGlmZmVyZW50IGZyb20gdGhlCisJCQkgKiBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiwgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKKwkJCSAqIGV4ZWN1dGluZyBhIHNpbmdsZSB1c2VyIGluc3RydWN0aW9uLgorCQkJICovCisJCQlzdGF0ZS0+YnJhbmNoX25leHRfcGMgPSAodW5zaWduZWQgbG9uZykocGMgKyBvZmZzZXQpOworCisJCQkvKiByZXdyaXRlIGJyYW5jaCBvZmZzZXQgdG8gZ28gZm9yd2FyZCBvbmUgYnVuZGxlICovCisJCQlidW5kbGUgPSBzZXRfQnJPZmZfWDEoYnVuZGxlLCAyKTsKKwkJfQorCQlicmVhazsKKworCQkvKiBqdW1wcyAqLworCQljYXNlIEpBTEJfT1BDT0RFX1gxOgorCQljYXNlIEpBTEZfT1BDT0RFX1gxOgorCQkJc3RhdGUtPnVwZGF0ZSA9IDE7CisJCQlzdGF0ZS0+bmV4dF9wYyA9CisJCQkJKHVuc2lnbmVkIGxvbmcpIChwYyArIGdldF9KT2ZmTG9uZ19YMShidW5kbGUpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSkJfT1BDT0RFX1gxOgorCQljYXNlIEpGX09QQ09ERV9YMToKKwkJCXN0YXRlLT5uZXh0X3BjID0KKwkJCQkodW5zaWduZWQgbG9uZykgKHBjICsgZ2V0X0pPZmZMb25nX1gxKGJ1bmRsZSkpOworCQkJYnVuZGxlID0gbm9wX1gxKGJ1bmRsZSk7CisJCQlicmVhazsKKworCQljYXNlIFNQRUNJQUxfMF9PUENPREVfWDE6CisJCQlzd2l0Y2ggKGdldF9SUlJPcGNvZGVFeHRlbnNpb25fWDEoYnVuZGxlKSkgeworCQkJLyoganVtcC1yZWdpc3RlciAqLworCQkJY2FzZSBKQUxSUF9TUEVDSUFMXzBfT1BDT0RFX1gxOgorCQkJY2FzZSBKQUxSX1NQRUNJQUxfMF9PUENPREVfWDE6CisJCQkJc3RhdGUtPnVwZGF0ZSA9IDE7CisJCQkJc3RhdGUtPm5leHRfcGMgPQorCQkJCQlyZWdzLT5yZWdzW2dldF9TcmNBX1gxKGJ1bmRsZSldOworCQkJCWJyZWFrOworCisJCQljYXNlIEpSUF9TUEVDSUFMXzBfT1BDT0RFX1gxOgorCQkJY2FzZSBKUl9TUEVDSUFMXzBfT1BDT0RFX1gxOgorCQkJCXN0YXRlLT5uZXh0X3BjID0KKwkJCQkJcmVncy0+cmVnc1tnZXRfU3JjQV9YMShidW5kbGUpXTsKKwkJCQlidW5kbGUgPSBub3BfWDEoYnVuZGxlKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMTktfU1BFQ0lBTF8wX09QQ09ERV9YMToKKwkJCQlzdGF0ZS0+dXBkYXRlID0gMTsKKwkJCQl0YXJnZXRfcmVnID0gZ2V0X0Rlc3RfWDEoYnVuZGxlKTsKKwkJCQlicmVhazsKKworCQkJLyogc3RvcmVzICovCisJCQljYXNlIFNIX1NQRUNJQUxfMF9PUENPREVfWDE6CisJCQkJbWVtX29wID0gTUVNT1BfU1RPUkU7CisJCQkJc2l6ZSA9IDI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1dfU1BFQ0lBTF8wX09QQ09ERV9YMToKKwkJCQltZW1fb3AgPSBNRU1PUF9TVE9SRTsKKwkJCQlzaXplID0gNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIGxvYWRzIGFuZCBpcmV0ICovCisJCWNhc2UgU0hVTl8wX09QQ09ERV9YMToKKwkJCWlmIChnZXRfVW5TaE9wY29kZUV4dGVuc2lvbl9YMShidW5kbGUpID09CisJCQkgICAgVU5fMF9TSFVOXzBfT1BDT0RFX1gxKSB7CisJCQkJc3dpdGNoIChnZXRfVW5PcGNvZGVFeHRlbnNpb25fWDEoYnVuZGxlKSkgeworCQkJCWNhc2UgTEhfVU5fMF9TSFVOXzBfT1BDT0RFX1gxOgorCQkJCQltZW1fb3AgPSBNRU1PUF9MT0FEOworCQkJCQlzaXplID0gMjsKKwkJCQkJc2lnbl9leHQgPSAxOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgTEhfVV9VTl8wX1NIVU5fMF9PUENPREVfWDE6CisJCQkJCW1lbV9vcCA9IE1FTU9QX0xPQUQ7CisJCQkJCXNpemUgPSAyOworCQkJCQlzaWduX2V4dCA9IDA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBMV19VTl8wX1NIVU5fMF9PUENPREVfWDE6CisJCQkJCW1lbV9vcCA9IE1FTU9QX0xPQUQ7CisJCQkJCXNpemUgPSA0OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgSVJFVF9VTl8wX1NIVU5fMF9PUENPREVfWDE6CisJCQkJeworCQkJCQl1bnNpZ25lZCBsb25nIGV4MF8wID0gX19pbnNuX21mc3ByKAorCQkJCQkJU1BSX0VYX0NPTlRFWFRfMF8wKTsKKwkJCQkJdW5zaWduZWQgbG9uZyBleDBfMSA9IF9faW5zbl9tZnNwcigKKwkJCQkJCVNQUl9FWF9DT05URVhUXzBfMSk7CisJCQkJCS8qCisJCQkJCSAqIFNwZWNpYWwtY2FzZSBpdCBpZiB3ZSdyZSBpcmV0J2luZworCQkJCQkgKiB0byBQTDAgYWdhaW4uICBPdGhlcndpc2UganVzdCBsZXQKKwkJCQkJICogaXQgcnVuIGFuZCBpdCB3aWxsIGdlbmVyYXRlIFNJR0lMTC4KKwkJCQkJICovCisJCQkJCWlmIChFWDFfUEwoZXgwXzEpID09IFVTRVJfUEwpIHsKKwkJCQkJCXN0YXRlLT5uZXh0X3BjID0gZXgwXzA7CisJCQkJCQlyZWdzLT5leDEgPSBleDBfMTsKKwkJCQkJCWJ1bmRsZSA9IG5vcF9YMShidW5kbGUpOworCQkJCQl9CisJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisjaWYgQ0hJUF9IQVNfV0g2NCgpCisJCS8qIHBvc3RpbmNyZW1lbnQgb3BlcmF0aW9ucyAqLworCQljYXNlIElNTV8wX09QQ09ERV9YMToKKwkJCXN3aXRjaCAoZ2V0X0ltbU9wY29kZUV4dGVuc2lvbl9YMShidW5kbGUpKSB7CisJCQljYXNlIExXQUREX0lNTV8wX09QQ09ERV9YMToKKwkJCQltZW1fb3AgPSBNRU1PUF9MT0FEX1BPU1RJTkNSOworCQkJCXNpemUgPSA0OworCQkJCWJyZWFrOworCisJCQljYXNlIExIQUREX0lNTV8wX09QQ09ERV9YMToKKwkJCQltZW1fb3AgPSBNRU1PUF9MT0FEX1BPU1RJTkNSOworCQkJCXNpemUgPSAyOworCQkJCXNpZ25fZXh0ID0gMTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBMSEFERF9VX0lNTV8wX09QQ09ERV9YMToKKwkJCQltZW1fb3AgPSBNRU1PUF9MT0FEX1BPU1RJTkNSOworCQkJCXNpemUgPSAyOworCQkJCXNpZ25fZXh0ID0gMDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTV0FERF9JTU1fMF9PUENPREVfWDE6CisJCQkJbWVtX29wID0gTUVNT1BfU1RPUkVfUE9TVElOQ1I7CisJCQkJc2l6ZSA9IDQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU0hBRERfSU1NXzBfT1BDT0RFX1gxOgorCQkJCW1lbV9vcCA9IE1FTU9QX1NUT1JFX1BPU1RJTkNSOworCQkJCXNpemUgPSAyOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLyogQ0hJUF9IQVNfV0g2NCgpICovCisJCX0KKworCQlpZiAoc3RhdGUtPnVwZGF0ZSkgeworCQkJLyoKKwkJCSAqIEdldCBhbiBhdmFpbGFibGUgcmVnaXN0ZXIuICBXZSBzdGFydCB3aXRoIGEKKwkJCSAqIGJpdG1hc2sgd2l0aCAxJ3MgZm9yIGF2YWlsYWJsZSByZWdpc3RlcnMuCisJCQkgKiBXZSB0cnVuY2F0ZSB0byB0aGUgbG93IDMyIHJlZ2lzdGVycyBzaW5jZQorCQkJICogd2UgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSBzZXQgYml0cyBpbiB0aGUKKwkJCSAqIGxvdyAzMiBiaXRzLCB0aGVuIHVzZSBjdHogdG8gcGljayB0aGUgZmlyc3QuCisJCQkgKi8KKwkJCXUzMiBtYXNrID0gKHUzMikgfigoMVVMTCA8PCBnZXRfRGVzdF9YMChidW5kbGUpKSB8CisJCQkJCSAgICgxVUxMIDw8IGdldF9TcmNBX1gwKGJ1bmRsZSkpIHwKKwkJCQkJICAgKDFVTEwgPDwgZ2V0X1NyY0JfWDAoYnVuZGxlKSkgfAorCQkJCQkgICAoMVVMTCA8PCB0YXJnZXRfcmVnKSk7CisJCQl0ZW1wX3JlZyA9IF9fYnVpbHRpbl9jdHoobWFzayk7CisJCQlzdGF0ZS0+dXBkYXRlX3JlZyA9IHRlbXBfcmVnOworCQkJc3RhdGUtPnVwZGF0ZV92YWx1ZSA9IHJlZ3MtPnJlZ3NbdGVtcF9yZWddOworCQkJcmVncy0+cmVnc1t0ZW1wX3JlZ10gPSAodW5zaWduZWQgbG9uZykgKHBjKzEpOworCQkJcmVncy0+ZmxhZ3MgfD0gUFRfRkxBR1NfUkVTVE9SRV9SRUdTOworCQkJYnVuZGxlID0gbW92ZV9YMShidW5kbGUsIHRhcmdldF9yZWcsIHRlbXBfcmVnKTsKKwkJfQorCX0gZWxzZSB7CisJCWludCBvcGNvZGUgPSBnZXRfT3Bjb2RlX1kyKGJ1bmRsZSk7CisKKwkJc3dpdGNoIChvcGNvZGUpIHsKKwkJLyogbG9hZHMgKi8KKwkJY2FzZSBMSF9PUENPREVfWTI6CisJCQltZW1fb3AgPSBNRU1PUF9MT0FEOworCQkJc2l6ZSA9IDI7CisJCQlzaWduX2V4dCA9IDE7CisJCQlicmVhazsKKworCQljYXNlIExIX1VfT1BDT0RFX1kyOgorCQkJbWVtX29wID0gTUVNT1BfTE9BRDsKKwkJCXNpemUgPSAyOworCQkJc2lnbl9leHQgPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBMV19PUENPREVfWTI6CisJCQltZW1fb3AgPSBNRU1PUF9MT0FEOworCQkJc2l6ZSA9IDQ7CisJCQlicmVhazsKKworCQkvKiBzdG9yZXMgKi8KKwkJY2FzZSBTSF9PUENPREVfWTI6CisJCQltZW1fb3AgPSBNRU1PUF9TVE9SRTsKKwkJCXNpemUgPSAyOworCQkJYnJlYWs7CisKKwkJY2FzZSBTV19PUENPREVfWTI6CisJCQltZW1fb3AgPSBNRU1PUF9TVE9SRTsKKwkJCXNpemUgPSA0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gcmV3cml0ZSBhbiB1bmFsaWduZWQgbG9hZC9zdG9yZS4KKwkgKiBSZXR1cm5pbmcgemVybyBpcyBhIHNwZWNpYWwgdmFsdWUgbWVhbmluZyB3ZSBuZWVkIHRvIFNJR1NFR1YuCisJICovCisJaWYgKG1lbV9vcCAhPSBNRU1PUF9OT05FICYmIHVuYWxpZ25lZF9maXh1cCA+PSAwKSB7CisJCWJ1bmRsZSA9IHJld3JpdGVfbG9hZF9zdG9yZV91bmFsaWduZWQoc3RhdGUsIGJ1bmRsZSwgcmVncywKKwkJCQkJCSAgICAgIG1lbV9vcCwgc2l6ZSwgc2lnbl9leHQpOworCQlpZiAoYnVuZGxlID09IDApCisJCQlyZXR1cm47CisJfQorCisJLyogd3JpdGUgdGhlIGJ1bmRsZSB0byBvdXIgZXhlY3V0aW9uIGFyZWEgKi8KKwlidWZmZXIgPSBzdGF0ZS0+YnVmZmVyOworCWVyciA9IF9fcHV0X3VzZXIoYnVuZGxlLCBidWZmZXIrKyk7CisKKwkvKgorCSAqIElmIHdlJ3JlIHJlYWxseSBzaW5nbGUtc3RlcHBpbmcsIHdlIHRha2UgYW4gSU5UX0lMTCBhZnRlci4KKwkgKiBJZiB3ZSdyZSBqdXN0IGhhbmRsaW5nIGFuIHVuYWxpZ25lZCBhY2Nlc3MsIHdlIGNhbiBqdXN0CisJICoganVtcCBkaXJlY3RseSBiYWNrIHRvIHdoZXJlIHdlIHdlcmUgaW4gdXNlciBjb2RlLgorCSAqLworCWlmIChpc19zaW5nbGVfc3RlcCkgeworCQllcnIgfD0gX19wdXRfdXNlcihfX3NpbmdsZV9zdGVwX2lsbF9pbnNuLCBidWZmZXIrKyk7CisJCWVyciB8PSBfX3B1dF91c2VyKF9fc2luZ2xlX3N0ZXBfaWxsX2luc24sIGJ1ZmZlcisrKTsKKwl9IGVsc2UgeworCQlsb25nIGRlbHRhOworCisJCWlmIChzdGF0ZS0+dXBkYXRlKSB7CisJCQkvKiBXZSBoYXZlIHNvbWUgc3RhdGUgdG8gdXBkYXRlOyBkbyBpdCBpbmxpbmUgKi8KKwkJCWludCBoYTE2OworCQkJYnVuZGxlID0gX19zaW5nbGVfc3RlcF9hZGRsaV9pbnNuOworCQkJYnVuZGxlIHw9IGNyZWF0ZV9EZXN0X1gxKHN0YXRlLT51cGRhdGVfcmVnKTsKKwkJCWJ1bmRsZSB8PSBjcmVhdGVfSW1tMTZfWDEoc3RhdGUtPnVwZGF0ZV92YWx1ZSk7CisJCQllcnIgfD0gX19wdXRfdXNlcihidW5kbGUsIGJ1ZmZlcisrKTsKKwkJCWJ1bmRsZSA9IF9fc2luZ2xlX3N0ZXBfYXVsaV9pbnNuOworCQkJYnVuZGxlIHw9IGNyZWF0ZV9EZXN0X1gxKHN0YXRlLT51cGRhdGVfcmVnKTsKKwkJCWJ1bmRsZSB8PSBjcmVhdGVfU3JjQV9YMShzdGF0ZS0+dXBkYXRlX3JlZyk7CisJCQloYTE2ID0gKHN0YXRlLT51cGRhdGVfdmFsdWUgKyAweDgwMDApID4+IDE2OworCQkJYnVuZGxlIHw9IGNyZWF0ZV9JbW0xNl9YMShoYTE2KTsKKwkJCWVyciB8PSBfX3B1dF91c2VyKGJ1bmRsZSwgYnVmZmVyKyspOworCQkJc3RhdGUtPnVwZGF0ZSA9IDA7CisJCX0KKworCQkvKiBFbmQgd2l0aCBhIGp1bXAgYmFjayB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiAqLworCQlkZWx0YSA9ICgocmVncy0+cGMgKyBUSUxFX0JVTkRMRV9TSVpFX0lOX0JZVEVTKSAtCisJCQkodW5zaWduZWQgbG9uZylidWZmZXIpID4+CisJCQlUSUxFX0xPRzJfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUzsKKwkJYnVuZGxlID0gX19zaW5nbGVfc3RlcF9qX2luc247CisJCWJ1bmRsZSB8PSBjcmVhdGVfSk9mZkxvbmdfWDEoZGVsdGEpOworCQllcnIgfD0gX19wdXRfdXNlcihidW5kbGUsIGJ1ZmZlcisrKTsKKwl9CisKKwlpZiAoZXJyKSB7CisJCXByX2VycigiRmF1bHQgd2hlbiB3cml0aW5nIHRvIHNpbmdsZS1zdGVwIGJ1ZmZlclxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEZsdXNoIHRoZSBidWZmZXIuCisJICogV2UgZG8gYSBsb2NhbCBmbHVzaCBvbmx5LCBzaW5jZSB0aGlzIGlzIGEgdGhyZWFkLXNwZWNpZmljIGJ1ZmZlci4KKwkgKi8KKwlfX2ZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+YnVmZmVyLAorCQkJICAgICAodW5zaWduZWQgbG9uZylidWZmZXIpOworCisJLyogSW5kaWNhdGUgZW5hYmxlZCAqLworCXN0YXRlLT5pc19lbmFibGVkID0gaXNfc2luZ2xlX3N0ZXA7CisJcmVncy0+cGMgPSAodW5zaWduZWQgbG9uZylzdGF0ZS0+YnVmZmVyOworCisJLyogRmF1bHQgaW1tZWRpYXRlbHkgaWYgd2UgYXJlIGNvbWluZyBiYWNrIGZyb20gYSBzeXNjYWxsLiAqLworCWlmIChyZWdzLT5mYXVsdG51bSA9PSBJTlRfU1dJTlRfMSkKKwkJcmVncy0+cGMgKz0gODsKK30KKworI2VuZGlmIC8qICFfX3RpbGVneF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3NtcC5jIGIvYXJjaC90aWxlL2tlcm5lbC9zbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I1ZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9zbXAuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUSUxFIFNNUCBzdXBwb3J0IHJvdXRpbmVzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisKK0hWX1RvcG9sb2d5IHNtcF90b3BvbG9neSBfX3dyaXRlX29uY2U7CitFWFBPUlRfU1lNQk9MKHNtcF90b3BvbG9neSk7CisKKyNpZiBDSElQX0hBU19JUEkoKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqaXBpX21hcHBpbmdzW05SX0NQVVNdOworI2VuZGlmCisKKworLyoKKyAqIFRvcC1sZXZlbCBzZW5kX0lQSSooKSBmdW5jdGlvbnMgdG8gc2VuZCBtZXNzYWdlcyB0byBvdGhlciBjcHVzLgorICovCisKKy8qIFNldCBieSBzbXBfc2VuZF9zdG9wKCkgdG8gYXZvaWQgcmVjdXJzaXZlIHBhbmljcy4gKi8KK3N0YXRpYyBpbnQgc3RvcHBpbmdfY3B1czsKKwordm9pZCBzZW5kX0lQSV9zaW5nbGUoaW50IGNwdSwgaW50IHRhZykKK3sKKwlIVl9SZWNpcGllbnQgcmVjaXAgPSB7CisJCS55ID0gY3B1IC8gc21wX3dpZHRoLAorCQkueCA9IGNwdSAlIHNtcF93aWR0aCwKKwkJLnN0YXRlID0gSFZfVE9fQkVfU0VOVAorCX07CisJaW50IHJjID0gaHZfc2VuZF9tZXNzYWdlKCZyZWNpcCwgMSwgKEhWX1ZpcnRBZGRyKSZ0YWcsIHNpemVvZih0YWcpKTsKKwlCVUdfT04ocmMgPD0gMCk7Cit9CisKK3ZvaWQgc2VuZF9JUElfbWFueShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHRhZykKK3sKKwlIVl9SZWNpcGllbnQgcmVjaXBbTlJfQ1BVU107CisJaW50IGNwdSwgc2VudDsKKwlpbnQgbnJlY2lwID0gMDsKKwlpbnQgbXlfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWZvcl9lYWNoX2NwdShjcHUsIG1hc2spIHsKKwkJSFZfUmVjaXBpZW50ICpyOworCQlCVUdfT04oY3B1ID09IG15X2NwdSk7CisJCXIgPSAmcmVjaXBbbnJlY2lwKytdOworCQlyLT55ID0gY3B1IC8gc21wX3dpZHRoOworCQlyLT54ID0gY3B1ICUgc21wX3dpZHRoOworCQlyLT5zdGF0ZSA9IEhWX1RPX0JFX1NFTlQ7CisJfQorCXNlbnQgPSAwOworCXdoaWxlIChzZW50IDwgbnJlY2lwKSB7CisJCWludCByYyA9IGh2X3NlbmRfbWVzc2FnZShyZWNpcCwgbnJlY2lwLAorCQkJCQkgKEhWX1ZpcnRBZGRyKSZ0YWcsIHNpemVvZih0YWcpKTsKKwkJaWYgKHJjIDw9IDApIHsKKwkJCWlmICghc3RvcHBpbmdfY3B1cykgIC8qIGF2b2lkIHJlY3Vyc2l2ZSBwYW5pYyAqLworCQkJCXBhbmljKCJodl9zZW5kX21lc3NhZ2UgcmV0dXJuZWQgJWQiLCByYyk7CisJCQlicmVhazsKKwkJfQorCQlzZW50ICs9IHJjOworCX0KK30KKwordm9pZCBzZW5kX0lQSV9hbGxidXRzZWxmKGludCB0YWcpCit7CisJc3RydWN0IGNwdW1hc2sgbWFzazsKKwljcHVtYXNrX2NvcHkoJm1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CisJY3B1bWFza19jbGVhcl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCAmbWFzayk7CisJc2VuZF9JUElfbWFueSgmbWFzaywgdGFnKTsKK30KKworCisvKgorICogUHJvdmlkZSBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrLCBidXQgYWxzbyBydW4gZnVuY3Rpb24gbG9jYWxseQorICogaWYgc3BlY2lmaWVkIGluIHRoZSBtYXNrLgorICovCit2b2lkIG9uX2VhY2hfY3B1X21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHZvaWQgKCpmdW5jKSh2b2lkICopLAorCQkgICAgICB2b2lkICppbmZvLCBib29sIHdhaXQpCit7CisJaW50IGNwdSA9IGdldF9jcHUoKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KG1hc2ssIGZ1bmMsIGluZm8sIHdhaXQpOworCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbWFzaykpIHsKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJZnVuYyhpbmZvKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCX0KKwlwdXRfY3B1KCk7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9ucyByZWxhdGVkIHRvIHN0YXJ0aW5nL3N0b3BwaW5nIGNwdXMuCisgKi8KKworLyogSGFuZGxlciB0byBzdGFydCB0aGUgY3VycmVudCBjcHUuICovCitzdGF0aWMgdm9pZCBzbXBfc3RhcnRfY3B1X2ludGVycnVwdCh2b2lkKQoreworCWdldF9pcnFfcmVncygpLT5wYyA9IHN0YXJ0X2NwdV9mdW5jdGlvbl9hZGRyOworfQorCisvKiBIYW5kbGVyIHRvIHN0b3AgdGhlIGN1cnJlbnQgY3B1LiAqLworc3RhdGljIHZvaWQgc21wX3N0b3BfY3B1X2ludGVycnVwdCh2b2lkKQoreworCXNldF9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSwgMCk7CisJcmF3X2xvY2FsX2lycV9kaXNhYmxlX2FsbCgpOworCWZvciAoOzspCisJCWFzbSgibmFwIik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlICdzdG9wJyBmdW5jdGlvbiBvbiBhbGwgb3RoZXIgQ1BVcyBpbiB0aGUgc3lzdGVtLiAqLwordm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpCit7CisJc3RvcHBpbmdfY3B1cyA9IDE7CisJc2VuZF9JUElfYWxsYnV0c2VsZihNU0dfVEFHX1NUT1BfQ1BVKTsKK30KKworCisvKgorICogRGlzcGF0Y2ggY29kZSBjYWxsZWQgZnJvbSBodl9tZXNzYWdlX2ludHIoKSBmb3IgSFZfTVNHX1RJTEUgaHYgbWVzc2FnZXMuCisgKi8KK3ZvaWQgZXZhbHVhdGVfbWVzc2FnZShpbnQgdGFnKQoreworCXN3aXRjaCAodGFnKSB7CisJY2FzZSBNU0dfVEFHX1NUQVJUX0NQVTogLyogU3RhcnQgdXAgYSBjcHUgKi8KKwkJc21wX3N0YXJ0X2NwdV9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TR19UQUdfU1RPUF9DUFU6IC8qIFNlbnQgdG8gc2h1dCBkb3duIHNsYXZlIENQVSdzICovCisJCXNtcF9zdG9wX2NwdV9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TR19UQUdfQ0FMTF9GVU5DVElPTl9NQU5ZOiAvKiBDYWxsIGZ1bmN0aW9uIG9uIGNwdW1hc2sgKi8KKwkJZ2VuZXJpY19zbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TR19UQUdfQ0FMTF9GVU5DVElPTl9TSU5HTEU6IC8qIENhbGwgZnVuY3Rpb24gb24gb25lIG90aGVyIENQVSAqLworCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwYW5pYygiVW5rbm93biBJUEkgbWVzc2FnZSB0YWcgJWQiLCB0YWcpOworCQlicmVhazsKKwl9Cit9CisKKworLyoKKyAqIGZsdXNoX2ljYWNoZV9yYW5nZSgpIGNvZGUgdXNlcyBzbXBfY2FsbF9mdW5jdGlvbigpLgorICovCisKK3N0cnVjdCBpcGlfZmx1c2ggeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7Cit9OworCitzdGF0aWMgdm9pZCBpcGlfZmx1c2hfaWNhY2hlX3JhbmdlKHZvaWQgKmluZm8pCit7CisJc3RydWN0IGlwaV9mbHVzaCAqZmx1c2ggPSAoc3RydWN0IGlwaV9mbHVzaCAqKSBpbmZvOworCV9fZmx1c2hfaWNhY2hlX3JhbmdlKGZsdXNoLT5zdGFydCwgZmx1c2gtPmVuZCk7Cit9CisKK3ZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBpcGlfZmx1c2ggZmx1c2ggPSB7IHN0YXJ0LCBlbmQgfTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlvbl9lYWNoX2NwdShpcGlfZmx1c2hfaWNhY2hlX3JhbmdlLCAmZmx1c2gsIDEpOworCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKKworLyogQ2FsbGVkIHdoZW4gc21wX3NlbmRfcmVzY2hlZHVsZSgpIHRyaWdnZXJzIElSUV9SRVNDSEVEVUxFLiAqLworc3RhdGljIGlycXJldHVybl90IGhhbmRsZV9yZXNjaGVkdWxlX2lwaShpbnQgaXJxLCB2b2lkICp0b2tlbikKK3sKKwkvKgorCSAqIE5vdGhpbmcgdG8gZG8gaGVyZTsgd2hlbiB3ZSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQsIHRoZQorCSAqIHJlc2NoZWR1bGluZyB3aWxsIG9jY3VyIHRoZXJlLiBCdXQgZG8gYnVtcCB0aGUgaW50ZXJydXB0CisJICogcHJvZmlsZXIgY291bnQgaW4gdGhlIG1lYW50aW1lLgorCSAqLworCV9fZ2V0X2NwdV92YXIoaXJxX3N0YXQpLmlycV9yZXNjaGVkX2NvdW50Kys7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHJlc2NoZWRfYWN0aW9uID0geworCS5oYW5kbGVyID0gaGFuZGxlX3Jlc2NoZWR1bGVfaXBpLAorCS5uYW1lID0gInJlc2NoZWQiLAorCS5kZXZfaWQgPSBoYW5kbGVfcmVzY2hlZHVsZV9pcGkgLyogdW5pcXVlIHRva2VuICovLAorfTsKKwordm9pZCBfX2luaXQgaXBpX2luaXQodm9pZCkKK3sKKyNpZiBDSElQX0hBU19JUEkoKQorCWludCBjcHU7CisJLyogTWFwIElQSSB0cmlnZ2VyIE1NSU8gYWRkcmVzc2VzLiAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJSFZfQ29vcmQgdGlsZTsKKwkJSFZfUFRFIHB0ZTsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisKKwkJdGlsZS54ID0gY3B1X3goY3B1KTsKKwkJdGlsZS55ID0gY3B1X3koY3B1KTsKKwkJaWYgKGh2X2dldF9pcGlfcHRlKHRpbGUsIDEsICZwdGUpICE9IDApCisJCQlwYW5pYygiRmFpbGVkIHRvIGluaXRpYWxpemUgSVBJIGZvciBjcHUgJWRcbiIsIGNwdSk7CisKKwkJb2Zmc2V0ID0gaHZfcHRlX2dldF9wZm4ocHRlKSA8PCBQQUdFX1NISUZUOworCQlpcGlfbWFwcGluZ3NbY3B1XSA9IGlvcmVtYXBfcHJvdChvZmZzZXQsIFBBR0VfU0laRSwgcHRlKTsKKwl9CisjZW5kaWYKKworCS8qIEJpbmQgaGFuZGxlX3Jlc2NoZWR1bGVfaXBpKCkgdG8gSVJRX1JFU0NIRURVTEUuICovCisJdGlsZV9pcnFfYWN0aXZhdGUoSVJRX1JFU0NIRURVTEUsIFRJTEVfSVJRX1BFUkNQVSk7CisJQlVHX09OKHNldHVwX2lycShJUlFfUkVTQ0hFRFVMRSwgJnJlc2NoZWRfYWN0aW9uKSk7Cit9CisKKyNpZiBDSElQX0hBU19JUEkoKQorCit2b2lkIHNtcF9zZW5kX3Jlc2NoZWR1bGUoaW50IGNwdSkKK3sKKwlXQVJOX09OKGNwdV9pc19vZmZsaW5lKGNwdSkpOworCisJLyoKKwkgKiBXZSBqdXN0IHdhbnQgdG8gZG8gYW4gTU1JTyBzdG9yZS4gIFRoZSB0cmFkaXRpb25hbCB3cml0ZXEoKQorCSAqIGZ1bmN0aW9ucyBhcmVuJ3QgcmVhbGx5IGNvcnJlY3QgaGVyZSwgc2luY2UgdGhleSdyZSBhbHdheXMKKwkgKiBkaXJlY3RlZCBhdCB0aGUgUENJIHNoaW0uICBGb3Igbm93LCBqdXN0IGRvIGEgcmF3IHN0b3JlLAorCSAqIGNhc3RpbmcgYXdheSB0aGUgX19pb21lbSBhdHRyaWJ1dGUuCisJICovCisJKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UgKilpcGlfbWFwcGluZ3NbY3B1XSlbSVJRX1JFU0NIRURVTEVdID0gMDsKK30KKworI2Vsc2UKKwordm9pZCBzbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCit7CisJSFZfQ29vcmQgY29vcmQ7CisKKwlXQVJOX09OKGNwdV9pc19vZmZsaW5lKGNwdSkpOworCisJY29vcmQueSA9IGNwdV95KGNwdSk7CisJY29vcmQueCA9IGNwdV94KGNwdSk7CisJaHZfdHJpZ2dlcl9pcGkoY29vcmQsIElSUV9SRVNDSEVEVUxFKTsKK30KKworI2VuZGlmIC8qIENISVBfSEFTX0lQSSgpICovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc21wYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDYyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL3NtcGJvb3QuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKworLyogU3RhdGUgb2YgZWFjaCBDUFUuICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfc3RhdGUpID0geyAwIH07CisKKy8qIFRoZSBtZXNzYWdpbmcgY29kZSBqdW1wcyB0byB0aGlzIHBvaW50ZXIgZHVyaW5nIGJvb3QtdXAgKi8KK3Vuc2lnbmVkIGxvbmcgc3RhcnRfY3B1X2Z1bmN0aW9uX2FkZHI7CisKKy8qIENhbGxlZCB2ZXJ5IGVhcmx5IGR1cmluZyBzdGFydHVwIHRvIG1hcmsgYm9vdCBjcHUgYXMgb25saW5lICovCit2b2lkIF9faW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc2V0X2NwdV9vbmxpbmUoY3B1LCAxKTsKKwlzZXRfY3B1X3ByZXNlbnQoY3B1LCAxKTsKKwlfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgPSBDUFVfT05MSU5FOworCisJaW5pdF9tZXNzYWdpbmcoKTsKK30KKworc3RhdGljIHZvaWQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpOworCisvKgorICogQ2FsbGVkIGF0IHRoZSB0b3Agb2YgaW5pdCgpIHRvIGxhdW5jaCBhbGwgdGhlIG90aGVyIENQVXMuCisgKiBUaGV5IHJ1biBmcmVlIHRvIGNvbXBsZXRlIHRoZWlyIGluaXRpYWxpemF0aW9uIGFuZCB0aGVuIHdhaXQKKyAqIHVudGlsIHRoZXkgZ2V0IGFuIElQSSBmcm9tIHRoZSBib290IGNwdSB0byBjb21lIG9ubGluZS4KKyAqLwordm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCit7CisJbG9uZyByYzsKKwlpbnQgY3B1LCBjcHVfY291bnQ7CisJaW50IGJvb3RfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSBib290X2NwdTsKKworCS8qCisJICogUGluIHRoaXMgdGFzayB0byB0aGUgYm9vdCBDUFUgd2hpbGUgd2UgYnJpbmcgdXAgdGhlIG90aGVycywKKwkgKiBqdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2VsZXNzbHkgbWlncmF0ZSBhcyB0aGV5IGNvbWUgdXAuCisJICovCisJcmMgPSBzY2hlZF9zZXRhZmZpbml0eShjdXJyZW50LT5waWQsIGNwdW1hc2tfb2YoYm9vdF9jcHUpKTsKKwlpZiAocmMgIT0gMCkKKwkJcHJfZXJyKCJDb3VsZG4ndCBzZXQgaW5pdCBhZmZpbml0eSB0byBib290IGNwdSAoJWxkKVxuIiwgcmMpOworCisJLyogUHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZGlzYWJsZWQgYW5kIGRhdGFwbGFuZSBjcHVzLiAqLworCXByaW50X2Rpc2FibGVkX2NwdXMoKTsKKworCS8qCisJICogVGVsbCB0aGUgbWVzc2FnaW5nIHN1YnN5c3RlbSBob3cgdG8gcmVzcG9uZCB0byB0aGUKKwkgKiBzdGFydHVwIG1lc3NhZ2UuICBXZSB1c2UgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbiB0byBhdm9pZAorCSAqIGNvbmZ1c2luZyB0aGUgbGlua2VyIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgbWVzc2FnaW5nCisJICogc3Vic3lzdGVtIGlzIGNhbGxpbmcgX19pbml0IGNvZGUuCisJICovCisJc3RhcnRfY3B1X2Z1bmN0aW9uX2FkZHIgPSAodW5zaWduZWQgbG9uZykgJm9ubGluZV9zZWNvbmRhcnk7CisKKwkvKiBTZXQgdXAgdGhyZWFkIGNvbnRleHQgZm9yIGFsbCBuZXcgcHJvY2Vzc29ycy4gKi8KKwljcHVfY291bnQgPSAxOworCWZvciAoY3B1ID0gMDsgY3B1IDwgTlJfQ1BVUzsgKytjcHUpCXsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICppZGxlOworCisJCWlmIChjcHUgPT0gYm9vdF9jcHUpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKSB7CisJCQkvKgorCQkJICogTWFrZSB0aGlzIHByb2Nlc3NvciBkbyBub3RoaW5nIG9uIGJvb3QuCisJCQkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgZ2l2ZSB0aGUgYm9vdF9wYyBmdW5jdGlvbgorCQkJICogYSBzdGFjaywgc28gaXQgaGFzIHRvIGJlIGFzc2VtYmx5IGNvZGUuCisJCQkgKi8KKwkJCXBlcl9jcHUoYm9vdF9zcCwgY3B1KSA9IDA7CisJCQlwZXJfY3B1KGJvb3RfcGMsIGNwdSkgPSAodW5zaWduZWQgbG9uZykgc21wX25hcDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ3JlYXRlIGEgbmV3IGlkbGUgdGhyZWFkIHRvIHJ1biBzdGFydF9zZWNvbmRhcnkoKSAqLworCQlpZGxlID0gZm9ya19pZGxlKGNwdSk7CisJCWlmIChJU19FUlIoaWRsZSkpCisJCQlwYW5pYygiZmFpbGVkIGZvcmsgZm9yIENQVSAlZCIsIGNwdSk7CisJCWlkbGUtPnRocmVhZC5wYyA9ICh1bnNpZ25lZCBsb25nKSBzdGFydF9zZWNvbmRhcnk7CisKKwkJLyogTWFrZSB0aGlzIHRocmVhZCB0aGUgYm9vdCB0aHJlYWQgZm9yIHRoaXMgcHJvY2Vzc29yICovCisJCXBlcl9jcHUoYm9vdF9zcCwgY3B1KSA9IHRhc2tfa3NwMChpZGxlKTsKKwkJcGVyX2NwdShib290X3BjLCBjcHUpID0gaWRsZS0+dGhyZWFkLnBjOworCisJCSsrY3B1X2NvdW50OworCX0KKwlCVUdfT04oY3B1X2NvdW50ID4gKG1heF9jcHVzID8gbWF4X2NwdXMgOiAxKSk7CisKKwkvKiBGaXJlIHVwIHRoZSBvdGhlciB0aWxlcywgaWYgYW55ICovCisJaW5pdF9jcHVfcHJlc2VudChjcHVfcG9zc2libGVfbWFzayk7CisJaWYgKGNwdW1hc2tfd2VpZ2h0KGNwdV9wcmVzZW50X21hc2spID4gMSkgeworCQltYigpOyAgLyogbWFrZSBzdXJlIGFsbCBkYXRhIGlzIHZpc2libGUgdG8gbmV3IHByb2Nlc3NvcnMgKi8KKwkJaHZfc3RhcnRfYWxsX3RpbGVzKCk7CisJfQorfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgY3B1bWFzayBpbml0X2FmZmluaXR5OworCitzdGF0aWMgX19pbml0IGludCByZXNldF9pbml0X2FmZmluaXR5KHZvaWQpCit7CisJbG9uZyByYyA9IHNjaGVkX3NldGFmZmluaXR5KGN1cnJlbnQtPnBpZCwgJmluaXRfYWZmaW5pdHkpOworCWlmIChyYyAhPSAwKQorCQlwcl93YXJuaW5nKCJjb3VsZG4ndCByZXNldCBpbml0IGFmZmluaXR5ICglbGQpXG4iLAorCQkgICAgICAgcmMpOworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChyZXNldF9pbml0X2FmZmluaXR5KTsKKworc3RhdGljIHN0cnVjdCBjcHVtYXNrIGNwdV9zdGFydGVkIF9fY3B1aW5pdGRhdGE7CisKKy8qCisgKiBBY3RpdmF0ZSBhIHNlY29uZGFyeSBwcm9jZXNzb3IuICBWZXJ5IG1pbmltYWw7IGRvbid0IGFkZCBhbnl0aGluZworICogdG8gdGhpcyBwYXRoIHdpdGhvdXQga25vd2luZyB3aGF0IHlvdSdyZSBkb2luZywgc2luY2UgU01QIGJvb3RpbmcKKyAqIGlzIHByZXR0eSBmcmFnaWxlLgorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgc3RhcnRfc2Vjb25kYXJ5KHZvaWQpCit7CisJaW50IGNwdWlkID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogU2V0IG91ciB0aHJlYWQgcG9pbnRlciBhcHByb3ByaWF0ZWx5LiAqLworCXNldF9teV9jcHVfb2Zmc2V0KF9fcGVyX2NwdV9vZmZzZXRbY3B1aWRdKTsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCisJLyoKKwkgKiBJbiBsYXJnZSBtYWNoaW5lcyBldmVuIHRoaXMgd2lsbCBzbG93IHVzIGRvd24sIHNpbmNlIHdlCisJICogd2lsbCBiZSBjb250ZW5kaW5nIGZvciBmb3IgdGhlIHByaW50ayBzcGlubG9jay4KKwkgKi8KKwkvKiBwcmludGsoS0VSTl9ERUJVRyAiSW5pdGlhbGl6aW5nIENQVSMlZFxuIiwgY3B1aWQpOyAqLworCisJLyogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCBhc2lkIGZvciBvdXIgZmlyc3QgcGFnZSB0YWJsZS4gKi8KKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfYXNpZCkgPSBtaW5fYXNpZDsKKworCS8qIFNldCB1cCB0aGlzIHRocmVhZCBhcyBhbm90aGVyIG93bmVyIG9mIHRoZSBpbml0X21tICovCisJYXRvbWljX2luYygmaW5pdF9tbS5tbV9jb3VudCk7CisJY3VycmVudC0+YWN0aXZlX21tID0gJmluaXRfbW07CisJaWYgKGN1cnJlbnQtPm1tKQorCQlCVUcoKTsKKwllbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgY3VycmVudCk7CisKKwkvKiBBbGxvdyBoeXBlcnZpc29yIG1lc3NhZ2VzIHRvIGJlIHJlY2VpdmVkICovCisJaW5pdF9tZXNzYWdpbmcoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkvKiBJbmRpY2F0ZSB0aGF0IHdlJ3JlIHJlYWR5IHRvIGNvbWUgdXAuICovCisJLyogTXVzdCBub3QgZG8gdGhpcyBiZWZvcmUgd2UncmUgcmVhZHkgdG8gcmVjZWl2ZSBtZXNzYWdlcyAqLworCWlmIChjcHVtYXNrX3Rlc3RfYW5kX3NldF9jcHUoY3B1aWQsICZjcHVfc3RhcnRlZCkpIHsKKwkJcHJfd2FybmluZygiQ1BVIyVkIGFscmVhZHkgc3RhcnRlZCFcbiIsIGNwdWlkKTsKKwkJZm9yICg7OykKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9CisKKwlzbXBfbmFwKCk7Cit9CisKKy8qCisgKiBCcmluZyBhIHNlY29uZGFyeSBwcm9jZXNzb3Igb25saW5lLgorICovCit2b2lkIF9fY3B1aW5pdCBvbmxpbmVfc2Vjb25kYXJ5KHZvaWQpCit7CisJLyoKKwkgKiBsb3ctbWVtb3J5IG1hcHBpbmdzIGhhdmUgYmVlbiBjbGVhcmVkLCBmbHVzaCB0aGVtIGZyb20KKwkgKiB0aGUgbG9jYWwgVExCcyB0b28uCisJICovCisJbG9jYWxfZmx1c2hfdGxiKCk7CisKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCisJLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXNrICovCisJd21iKCk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKKwkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKKwkgKiBJUEkgcmVjaXBpZW50cywgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIGRldGVybWluYXRpb24gaXMgbWFkZQorCSAqIGZvciB3aGljaCBjcHVzIHJlY2VpdmUgdGhlIElQSS4gSG9sZGluZyB0aGlzCisJICogbG9jayBoZWxwcyB1cyB0byBub3QgaW5jbHVkZSB0aGlzIGNwdSBpbiBhIGN1cnJlbnRseSBpbiBwcm9ncmVzcworCSAqIHNtcF9jYWxsX2Z1bmN0aW9uKCkuCisJICovCisJaXBpX2NhbGxfbG9jaygpOworCXNldF9jcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSwgMSk7CisJaXBpX2NhbGxfdW5sb2NrKCk7CisJX19nZXRfY3B1X3ZhcihjcHVfc3RhdGUpID0gQ1BVX09OTElORTsKKworCS8qIFNldCB1cCB0aWxlLXNwZWNpZmljIHN0YXRlIGZvciB0aGlzIGNwdS4gKi8KKwlzZXR1cF9jcHUoMCk7CisKKwkvKiBTZXQgdXAgdGlsZS10aW1lciBjbG9jay1ldmVudCBkZXZpY2Ugb24gdGhpcyBjcHUgKi8KKwlzZXR1cF90aWxlX3RpbWVyKCk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJY3B1X2lkbGUoKTsKK30KKworaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQoreworCS8qIFdhaXQgNXMgdG90YWwgZm9yIGFsbCBDUFVzIGZvciB0aGVtIHRvIGNvbWUgb25saW5lICovCisJc3RhdGljIGludCB0aW1lb3V0OworCWZvciAoOyAhY3B1bWFza190ZXN0X2NwdShjcHUsICZjcHVfc3RhcnRlZCk7IHRpbWVvdXQrKykgeworCQlpZiAodGltZW91dCA+PSA1MDAwMCkgeworCQkJcHJfaW5mbygic2tpcHBpbmcgdW5yZXNwb25zaXZlIGNwdSVkXG4iLCBjcHUpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJdWRlbGF5KDEwMCk7CisJfQorCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCXBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID0gQ1BVX1VQX1BSRVBBUkU7CisKKwkvKiBVbmxlYXNoIHRoZSBDUFUhICovCisJc2VuZF9JUElfc2luZ2xlKGNwdSwgTVNHX1RBR19TVEFSVF9DUFUpOworCXdoaWxlICghY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykpCisJCWNwdV9yZWxheCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwYW5pY19zdGFydF9jcHUodm9pZCkKK3sKKwlwYW5pYygiUmVjZWl2ZWQgYSBNU0dfU1RBUlRfQ1BVIElQSSBhZnRlciBib290IGZpbmlzaGVkLiIpOworfQorCit2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKK3sKKwlpbnQgY3B1LCBuZXh0LCByYzsKKworCS8qIFJlc2V0IHRoZSByZXNwb25zZSB0byBhIChub3cgaWxsZWdhbCkgTVNHX1NUQVJUX0NQVSBJUEkuICovCisJc3RhcnRfY3B1X2Z1bmN0aW9uX2FkZHIgPSAodW5zaWduZWQgbG9uZykgJnBhbmljX3N0YXJ0X2NwdTsKKworCWNwdW1hc2tfY29weSgmaW5pdF9hZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKTsKKworCS8qCisJICogUGluIG91cnNlbHZlcyB0byBhIHNpbmdsZSBjcHUgaW4gdGhlIGluaXRpYWwgYWZmaW5pdHkgc2V0CisJICogc28gdGhhdCBrZXJuZWwgbWFwcGluZ3MgZm9yIHRoZSByb290ZnMgYXJlIG5vdCBpbiB0aGUgZGF0YXBsYW5lLAorCSAqIGlmIHNldCwgYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG1pZ3JhdGluZyBkdXJpbmcgYnJpbmd1cC4KKwkgKiBVc2UgdGhlIGxhc3QgY3B1IGp1c3QgaW4gY2FzZSB0aGUgd2hvbGUgY2hpcCBoYXMgYmVlbgorCSAqIGlzb2xhdGVkIGZyb20gdGhlIHNjaGVkdWxlciwgdG8ga2VlcCBpbml0IGF3YXkgZnJvbSBsaWtlbHkKKwkgKiBtb3JlIHVzZWZ1bCB1c2VyIGNvZGUuICBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHdvcmsgc2NoZWR1bGVkCisJICogdmlhIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygpIGluIHRoZSBpbml0IHJvdXRpbmVzIHdpbGwgbGFuZAorCSAqIG9uIHRoaXMgY3B1LgorCSAqLworCWZvciAoY3B1ID0gY3B1bWFza19maXJzdCgmaW5pdF9hZmZpbml0eSk7CisJICAgICAobmV4dCA9IGNwdW1hc2tfbmV4dChjcHUsICZpbml0X2FmZmluaXR5KSkgPCBucl9jcHVfaWRzOworCSAgICAgY3B1ID0gbmV4dCkKKwkJOworCXJjID0gc2NoZWRfc2V0YWZmaW5pdHkoY3VycmVudC0+cGlkLCBjcHVtYXNrX29mKGNwdSkpOworCWlmIChyYyAhPSAwKQorCQlwcl9lcnIoIkNvdWxkbid0IHNldCBpbml0IGFmZmluaXR5IHRvIGNwdSAlZCAoJWQpXG4iLCBjcHUsIHJjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvc3RhY2suYyBiL2FyY2gvdGlsZS9rZXJuZWwvc3RhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI2OGQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9zdGFjay5jCkBAIC0wLDAgKzEsNDg2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8YXNtL2JhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3Vjb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3NpZ2ZyYW1lLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrLmg+CisjaW5jbHVkZSA8YXJjaC9hYmkuaD4KKyNpbmNsdWRlIDxhcmNoL2ludGVycnVwdHMuaD4KKworCisvKiBJcyBhZGRyZXNzIG9uIHRoZSBzcGVjaWZpZWQga2VybmVsIHN0YWNrPyAqLworc3RhdGljIGludCBpbl9rZXJuZWxfc3RhY2soc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0LCBWaXJ0dWFsQWRkcmVzcyBzcCkKK3sKKwl1bG9uZyBrc3RhY2tfYmFzZSA9ICh1bG9uZykga2J0LT50YXNrLT5zdGFjazsKKwlpZiAoa3N0YWNrX2Jhc2UgPT0gMCkgIC8qIGNvcnJ1cHQgdGFzayBwb2ludGVyOyBqdXN0IGZvbGxvdyBzdGFjay4uLiAqLworCQlyZXR1cm4gc3AgPj0gUEFHRV9PRkZTRVQgJiYgc3AgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeTsKKwlyZXR1cm4gc3AgPj0ga3N0YWNrX2Jhc2UgJiYgc3AgPCBrc3RhY2tfYmFzZSArIFRIUkVBRF9TSVpFOworfQorCisvKiBJcyBhZGRyZXNzIGluIHRoZSBzcGVjaWZpZWQga2VybmVsIGNvZGU/ICovCitzdGF0aWMgaW50IGluX2tlcm5lbF90ZXh0KFZpcnR1YWxBZGRyZXNzIGFkZHJlc3MpCit7CisJcmV0dXJuIChhZGRyZXNzID49IE1FTV9TVl9JTlRSUFQgJiYKKwkJYWRkcmVzcyA8IE1FTV9TVl9JTlRSUFQgKyBIUEFHRV9TSVpFKTsKK30KKworLyogSXMgYWRkcmVzcyB2YWxpZCBmb3IgcmVhZGluZz8gKi8KK3N0YXRpYyBpbnQgdmFsaWRfYWRkcmVzcyhzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICprYnQsIFZpcnR1YWxBZGRyZXNzIGFkZHJlc3MpCit7CisJSFZfUFRFICpsMV9wZ3RhYmxlID0ga2J0LT5wZ3RhYmxlOworCUhWX1BURSAqbDJfcGd0YWJsZTsKKwl1bnNpZ25lZCBsb25nIHBmbjsKKwlIVl9QVEUgcHRlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJaWYgKGwxX3BndGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CS8qIGNhbid0IHJlYWQgdXNlciBzcGFjZSBpbiBvdGhlciB0YXNrcyAqLworCisJcHRlID0gbDFfcGd0YWJsZVtIVl9MMV9JTkRFWChhZGRyZXNzKV07CisJaWYgKCFodl9wdGVfZ2V0X3ByZXNlbnQocHRlKSkKKwkJcmV0dXJuIDA7CisJcGZuID0gaHZfcHRlX2dldF9wZm4ocHRlKTsKKwlpZiAocHRlX2h1Z2UocHRlKSkgeworCQlpZiAoIXBmbl92YWxpZChwZm4pKSB7CisJCQlwcl9lcnIoImh1Z2UgcGFnZSBoYXMgYmFkIHBmbiAlI2x4XG4iLCBwZm4pOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIGh2X3B0ZV9nZXRfcHJlc2VudChwdGUpICYmIGh2X3B0ZV9nZXRfcmVhZGFibGUocHRlKTsKKwl9CisKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJcHJfZXJyKCJMMiBwYWdlIHRhYmxlIG5vdCBpbiBMT1dNRU0gKCUjbGx4KVxuIiwKKwkJICAgICAgIEhWX1BGTl9UT19DUEEocGZuKSk7CisJCXJldHVybiAwOworCX0KKwlsMl9wZ3RhYmxlID0gKEhWX1BURSAqKXBmbl90b19rYWRkcihwZm4pOworCXB0ZSA9IGwyX3BndGFibGVbSFZfTDJfSU5ERVgoYWRkcmVzcyldOworCXJldHVybiBodl9wdGVfZ2V0X3ByZXNlbnQocHRlKSAmJiBodl9wdGVfZ2V0X3JlYWRhYmxlKHB0ZSk7Cit9CisKKy8qIENhbGxiYWNrIGZvciBiYWNrdHJhY2VyOyBiYXNpY2FsbHkgYSBnbG9yaWZpZWQgbWVtY3B5ICovCitzdGF0aWMgYm9vbCByZWFkX21lbW9yeV9mdW5jKHZvaWQgKnJlc3VsdCwgVmlydHVhbEFkZHJlc3MgYWRkcmVzcywKKwkJCSAgICAgdW5zaWduZWQgaW50IHNpemUsIHZvaWQgKnZrYnQpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICprYnQgPSAoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqKXZrYnQ7CisJaWYgKGluX2tlcm5lbF90ZXh0KGFkZHJlc3MpKSB7CisJCS8qIE9LIHRvIHJlYWQga2VybmVsIGNvZGUuICovCisJfSBlbHNlIGlmIChhZGRyZXNzID49IFBBR0VfT0ZGU0VUKSB7CisJCS8qIFdlIG9ubHkgdG9sZXJhdGUga2VybmVsLXNwYWNlIHJlYWRzIG9mIHRoaXMgdGFzaydzIHN0YWNrICovCisJCWlmICghaW5fa2VybmVsX3N0YWNrKGtidCwgYWRkcmVzcykpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCF2YWxpZF9hZGRyZXNzKGtidCwgYWRkcmVzcykpIHsKKwkJcmV0dXJuIDA7CS8qIGludmFsaWQgdXNlci1zcGFjZSBhZGRyZXNzICovCisJfQorCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJcmV0dmFsID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhyZXN1bHQsCisJCQkJCSAgICh2b2lkIF9fdXNlciBfX2ZvcmNlICopYWRkcmVzcywKKwkJCQkJICAgc2l6ZSk7CisJcGFnZWZhdWx0X2VuYWJsZSgpOworCXJldHVybiAocmV0dmFsID09IDApOworfQorCisvKiBSZXR1cm4gYSBwdF9yZWdzIHBvaW50ZXIgZm9yIGEgdmFsaWQgZmF1bHQgaGFuZGxlciBmcmFtZSAqLworc3RhdGljIHN0cnVjdCBwdF9yZWdzICp2YWxpZF9mYXVsdF9oYW5kbGVyKHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IqIGtidCkKK3sKKyNpZm5kZWYgX190aWxlZ3hfXworCWNvbnN0IGNoYXIgKmZhdWx0ID0gTlVMTDsgIC8qIGhhcHB5IGNvbXBpbGVyICovCisJY2hhciBmYXVsdF9idWZbNjRdOworCVZpcnR1YWxBZGRyZXNzIHNwID0ga2J0LT5pdC5zcDsKKwlzdHJ1Y3QgcHRfcmVncyAqcDsKKworCWlmICghaW5fa2VybmVsX3N0YWNrKGtidCwgc3ApKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWluX2tlcm5lbF9zdGFjayhrYnQsIHNwICsgQ19BQklfU0FWRV9BUkVBX1NJWkUgKyBQVFJFR1NfU0laRS0xKSkKKwkJcmV0dXJuIE5VTEw7CisJcCA9IChzdHJ1Y3QgcHRfcmVncyAqKShzcCArIENfQUJJX1NBVkVfQVJFQV9TSVpFKTsKKwlpZiAocC0+ZmF1bHRudW0gPT0gSU5UX1NXSU5UXzEgfHwgcC0+ZmF1bHRudW0gPT0gSU5UX1NXSU5UXzFfU0lHUkVUVVJOKQorCQlmYXVsdCA9ICJzeXNjYWxsIjsKKwllbHNlIHsKKwkJaWYgKGtidC0+dmVyYm9zZSkgeyAgICAgLyogZWxzZSB3ZSBhcmVuJ3QgZ29pbmcgdG8gdXNlIGl0ICovCisJCQlzbnByaW50ZihmYXVsdF9idWYsIHNpemVvZihmYXVsdF9idWYpLAorCQkJCSAiaW50ZXJydXB0ICVsZCIsIHAtPmZhdWx0bnVtKTsKKwkJCWZhdWx0ID0gZmF1bHRfYnVmOworCQl9CisJfQorCWlmIChFWDFfUEwocC0+ZXgxKSA9PSBLRVJORUxfUEwgJiYKKwkgICAgaW5fa2VybmVsX3RleHQocC0+cGMpICYmCisJICAgIGluX2tlcm5lbF9zdGFjayhrYnQsIHAtPnNwKSAmJgorCSAgICBwLT5zcCA+PSBzcCkgeworCQlpZiAoa2J0LT52ZXJib3NlKQorCQkJcHJfZXJyKCIgIDwlcyB3aGlsZSBpbiBrZXJuZWwgbW9kZT5cbiIsIGZhdWx0KTsKKwl9IGVsc2UgaWYgKEVYMV9QTChwLT5leDEpID09IFVTRVJfUEwgJiYKKwkgICAgcC0+cGMgPCBQQUdFX09GRlNFVCAmJgorCSAgICBwLT5zcCA8IFBBR0VfT0ZGU0VUKSB7CisJCWlmIChrYnQtPnZlcmJvc2UpCisJCQlwcl9lcnIoIiAgPCVzIHdoaWxlIGluIHVzZXIgbW9kZT5cbiIsIGZhdWx0KTsKKwl9IGVsc2UgaWYgKGtidC0+dmVyYm9zZSkgeworCQlwcl9lcnIoIiAgKG9kZCBmYXVsdDogcGMgJSNseCwgc3AgJSNseCwgZXgxICUjbHg/KVxuIiwKKwkJICAgICAgIHAtPnBjLCBwLT5zcCwgcC0+ZXgxKTsKKwkJcCA9IE5VTEw7CisJfQorCWlmICgha2J0LT5wcm9maWxlIHx8IChJTlRfTUFTSyhwLT5mYXVsdG51bSkgJiBRVUVVRURfSU5URVJSVVBUUykgPT0gMCkKKwkJcmV0dXJuIHA7CisjZW5kaWYKKwlyZXR1cm4gTlVMTDsKK30KKworLyogSXMgdGhlIHBjIHBvaW50aW5nIHRvIGEgc2lncmV0dXJuIHRyYW1wb2xpbmU/ICovCitzdGF0aWMgaW50IGlzX3NpZ3JldHVybihWaXJ0dWFsQWRkcmVzcyBwYykKK3sKKwlyZXR1cm4gKHBjID09IFZEU09fQkFTRSk7Cit9CisKKy8qIFJldHVybiBhIHB0X3JlZ3MgcG9pbnRlciBmb3IgYSB2YWxpZCBzaWduYWwgaGFuZGxlciBmcmFtZSAqLworc3RhdGljIHN0cnVjdCBwdF9yZWdzICp2YWxpZF9zaWdmcmFtZShzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yKiBrYnQpCit7CisJQmFja3RyYWNlSXRlcmF0b3IgKmIgPSAma2J0LT5pdDsKKworCWlmIChiLT5wYyA9PSBWRFNPX0JBU0UpIHsKKwkJc3RydWN0IHJ0X3NpZ2ZyYW1lICpmcmFtZTsKKwkJdW5zaWduZWQgbG9uZyBzaWdmcmFtZV90b3AgPQorCQkJYi0+c3AgKyBzaXplb2Yoc3RydWN0IHJ0X3NpZ2ZyYW1lKSAtIDE7CisJCWlmICghdmFsaWRfYWRkcmVzcyhrYnQsIGItPnNwKSB8fAorCQkgICAgIXZhbGlkX2FkZHJlc3Moa2J0LCBzaWdmcmFtZV90b3ApKSB7CisJCQlpZiAoa2J0LT52ZXJib3NlKQorCQkJCXByX2VycigiICAob2RkIHNpZ25hbDogc3AgJSNseD8pXG4iLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykoYi0+c3ApKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWZyYW1lID0gKHN0cnVjdCBydF9zaWdmcmFtZSAqKWItPnNwOworCQlpZiAoa2J0LT52ZXJib3NlKSB7CisJCQlwcl9lcnIoIiAgPHJlY2VpdmVkIHNpZ25hbCAlZD5cbiIsCisJCQkgICAgICAgZnJhbWUtPmluZm8uc2lfc2lnbm8pOworCQl9CisJCXJldHVybiAmZnJhbWUtPnVjLnVjX21jb250ZXh0LnJlZ3M7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IEtCYWNrdHJhY2VJdGVyYXRvcl9pc19zaWdyZXR1cm4oc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0KQoreworCXJldHVybiBpc19zaWdyZXR1cm4oa2J0LT5pdC5wYyk7Cit9CisKK3N0YXRpYyBpbnQgS0JhY2t0cmFjZUl0ZXJhdG9yX3Jlc3RhcnQoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0KQoreworCXN0cnVjdCBwdF9yZWdzICpwOworCisJcCA9IHZhbGlkX2ZhdWx0X2hhbmRsZXIoa2J0KTsKKwlpZiAocCA9PSBOVUxMKQorCQlwID0gdmFsaWRfc2lnZnJhbWUoa2J0KTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwliYWNrdHJhY2VfaW5pdCgma2J0LT5pdCwgcmVhZF9tZW1vcnlfZnVuYywga2J0LAorCQkgICAgICAgcC0+cGMsIHAtPmxyLCBwLT5zcCwgcC0+cmVnc1s1Ml0pOworCWtidC0+bmV3X2NvbnRleHQgPSAxOworCXJldHVybiAxOworfQorCisvKiBGaW5kIGEgZnJhbWUgdGhhdCBpc24ndCBhIHNpZ3JldHVybiwgaWYgdGhlcmUgaXMgb25lLiAqLworc3RhdGljIGludCBLQmFja3RyYWNlSXRlcmF0b3JfbmV4dF9pdGVtX2luY2x1c2l2ZSgKKwlzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yICprYnQpCit7CisJZm9yICg7OykgeworCQlkbyB7CisJCQlpZiAoIUtCYWNrdHJhY2VJdGVyYXRvcl9pc19zaWdyZXR1cm4oa2J0KSkKKwkJCQlyZXR1cm4gMTsKKwkJfSB3aGlsZSAoYmFja3RyYWNlX25leHQoJmtidC0+aXQpKTsKKworCQlpZiAoIUtCYWNrdHJhY2VJdGVyYXRvcl9yZXN0YXJ0KGtidCkpCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBJZiB0aGUgY3VycmVudCBzcCBpcyBvbiBhIHBhZ2UgZGlmZmVyZW50IHRoYW4gd2hhdCB3ZSByZWNvcmRlZAorICogYXMgdGhlIHRvcC1vZi1rZXJuZWwtc3RhY2sgbGFzdCB0aW1lIHdlIGNvbnRleHQgc3dpdGNoZWQsIHdlIGhhdmUKKyAqIHByb2JhYmx5IGJsb3duIHRoZSBzdGFjaywgYW5kIG5vdGhpbmcgaXMgZ29pbmcgdG8gd29yayBvdXQgd2VsbC4KKyAqIElmIHdlIGNhbiBhdCBsZWFzdCBnZXQgb3V0IGEgd2FybmluZywgdGhhdCBtYXkgaGVscCB0aGUgZGVidWcsCisgKiB0aG91Z2ggd2UgcHJvYmFibHkgd29uJ3QgYmUgYWJsZSB0byBiYWNrdHJhY2UgaW50byB0aGUgY29kZSB0aGF0CisgKiBhY3R1YWxseSBkaWQgdGhlIHJlY3Vyc2l2ZSBkYW1hZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHZhbGlkYXRlX3N0YWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdW5zaWduZWQgbG9uZyBrc3AwID0gZ2V0X2N1cnJlbnRfa3NwMCgpOworCXVuc2lnbmVkIGxvbmcga3NwMF9iYXNlID0ga3NwMCAtIFRIUkVBRF9TSVpFOworCXVuc2lnbmVkIGxvbmcgc3AgPSBzdGFja19wb2ludGVyOworCisJaWYgKEVYMV9QTChyZWdzLT5leDEpID09IEtFUk5FTF9QTCAmJiByZWdzLT5zcCA+PSBrc3AwKSB7CisJCXByX2VycigiV0FSTklORzogY3B1ICVkOiBrZXJuZWwgc3RhY2sgcGFnZSAlI2x4IHVuZGVycnVuIVxuIgorCQkgICAgICAgIiAgc3AgJSNseCAoJSNseCBpbiBjYWxsZXIpLCBjYWxsZXIgcGMgJSNseCwgbHIgJSNseFxuIiwKKwkJICAgICAgIGNwdSwga3NwMF9iYXNlLCBzcCwgcmVncy0+c3AsIHJlZ3MtPnBjLCByZWdzLT5scik7CisJfQorCisJZWxzZSBpZiAoc3AgPCBrc3AwX2Jhc2UgKyBzaXplb2Yoc3RydWN0IHRocmVhZF9pbmZvKSkgeworCQlwcl9lcnIoIldBUk5JTkc6IGNwdSAlZDoga2VybmVsIHN0YWNrIHBhZ2UgJSNseCBvdmVycnVuIVxuIgorCQkgICAgICAgIiAgc3AgJSNseCAoJSNseCBpbiBjYWxsZXIpLCBjYWxsZXIgcGMgJSNseCwgbHIgJSNseFxuIiwKKwkJICAgICAgIGNwdSwga3NwMF9iYXNlLCBzcCwgcmVncy0+c3AsIHJlZ3MtPnBjLCByZWdzLT5scik7CisJfQorfQorCit2b2lkIEtCYWNrdHJhY2VJdGVyYXRvcl9pbml0KHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCwKKwkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlWaXJ0dWFsQWRkcmVzcyBwYywgbHIsIHNwLCByNTI7CisJaW50IGlzX2N1cnJlbnQ7CisKKwkvKgorCSAqIFNldCB1cCBjYWxsYmFjayBpbmZvcm1hdGlvbi4gIFdlIGdyYWIgdGhlIGtlcm5lbCBzdGFjayBiYXNlCisJICogc28gd2Ugd2lsbCBhbGxvdyByZWFkcyBvZiB0aGF0IGFkZHJlc3MgcmFuZ2UsIGFuZCBpZiB3ZSdyZQorCSAqIGFza2luZyBhYm91dCB0aGUgY3VycmVudCBwcm9jZXNzIHdlIGdyYWIgdGhlIHBhZ2UgdGFibGUKKwkgKiBzbyB3ZSBjYW4gY2hlY2sgdXNlciBhY2Nlc3NlcyBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgdGhlbS4KKwkgKiBXZSBmbHVzaCB0aGUgVExCIHRvIGF2b2lkIGFueSB3ZWlyZCBza2V3IGlzc3Vlcy4KKwkgKi8KKwlpc19jdXJyZW50ID0gKHQgPT0gTlVMTCk7CisJa2J0LT5pc19jdXJyZW50ID0gaXNfY3VycmVudDsKKwlpZiAoaXNfY3VycmVudCkKKwkJdCA9IHZhbGlkYXRlX2N1cnJlbnQoKTsKKwlrYnQtPnRhc2sgPSB0OworCWtidC0+cGd0YWJsZSA9IE5VTEw7CisJa2J0LT52ZXJib3NlID0gMDsgICAvKiBvdmVycmlkZSBpbiBjYWxsZXIgaWYgZGVzaXJlZCAqLworCWtidC0+cHJvZmlsZSA9IDA7ICAgLyogb3ZlcnJpZGUgaW4gY2FsbGVyIGlmIGRlc2lyZWQgKi8KKwlrYnQtPmVuZCA9IDA7CisJa2J0LT5uZXdfY29udGV4dCA9IDA7CisJaWYgKGlzX2N1cnJlbnQpIHsKKwkJSFZfUGh5c0FkZHIgcGdkaXJfcGEgPSBodl9pbnF1aXJlX2NvbnRleHQoKS5wYWdlX3RhYmxlOworCQlpZiAocGdkaXJfcGEgPT0gKHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXIgLSBQQUdFX09GRlNFVCkgeworCQkJLyoKKwkJCSAqIE5vdCBqdXN0IGFuIG9wdGltaXphdGlvbjogdGhpcyBhbHNvIGFsbG93cworCQkJICogdGhpcyB0byB3b3JrIGF0IGFsbCBiZWZvcmUgdmEvcGEgbWFwcGluZ3MKKwkJCSAqIGFyZSBzZXQgdXAuCisJCQkgKi8KKwkJCWtidC0+cGd0YWJsZSA9IHN3YXBwZXJfcGdfZGlyOworCQl9IGVsc2UgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShQRk5fRE9XTihwZ2Rpcl9wYSkpOworCQkJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJCQlrYnQtPnBndGFibGUgPSBfX3ZhKHBnZGlyX3BhKTsKKwkJCWVsc2UKKwkJCQlwcl9lcnIoInBhZ2UgdGFibGUgbm90IGluIExPV01FTSIKKwkJCQkgICAgICAgIiAoJSNsbHgpXG4iLCBwZ2Rpcl9wYSk7CisJCX0KKwkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCQl2YWxpZGF0ZV9zdGFjayhyZWdzKTsKKwl9CisKKwlpZiAocmVncyA9PSBOVUxMKSB7CisJCWlmIChpc19jdXJyZW50IHx8IHQtPnN0YXRlID09IFRBU0tfUlVOTklORykgeworCQkJLyogQ2FuJ3QgZG8gdGhpczsgd2UgbmVlZCByZWdpc3RlcnMgKi8KKwkJCWtidC0+ZW5kID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlwYyA9IGdldF9zd2l0Y2hfdG9fcGMoKTsKKwkJbHIgPSB0LT50aHJlYWQucGM7CisJCXNwID0gdC0+dGhyZWFkLmtzcDsKKwkJcjUyID0gMDsKKwl9IGVsc2UgeworCQlwYyA9IHJlZ3MtPnBjOworCQlsciA9IHJlZ3MtPmxyOworCQlzcCA9IHJlZ3MtPnNwOworCQlyNTIgPSByZWdzLT5yZWdzWzUyXTsKKwl9CisKKwliYWNrdHJhY2VfaW5pdCgma2J0LT5pdCwgcmVhZF9tZW1vcnlfZnVuYywga2J0LCBwYywgbHIsIHNwLCByNTIpOworCWtidC0+ZW5kID0gIUtCYWNrdHJhY2VJdGVyYXRvcl9uZXh0X2l0ZW1faW5jbHVzaXZlKGtidCk7Cit9CitFWFBPUlRfU1lNQk9MKEtCYWNrdHJhY2VJdGVyYXRvcl9pbml0KTsKKworaW50IEtCYWNrdHJhY2VJdGVyYXRvcl9lbmQoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0KQoreworCXJldHVybiBrYnQtPmVuZDsKK30KK0VYUE9SVF9TWU1CT0woS0JhY2t0cmFjZUl0ZXJhdG9yX2VuZCk7CisKK3ZvaWQgS0JhY2t0cmFjZUl0ZXJhdG9yX25leHQoc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciAqa2J0KQoreworCWtidC0+bmV3X2NvbnRleHQgPSAwOworCWlmICghYmFja3RyYWNlX25leHQoJmtidC0+aXQpICYmCisJICAgICFLQmFja3RyYWNlSXRlcmF0b3JfcmVzdGFydChrYnQpKSB7CisJCQlrYnQtPmVuZCA9IDE7CisJCQlyZXR1cm47CisJCX0KKworCWtidC0+ZW5kID0gIUtCYWNrdHJhY2VJdGVyYXRvcl9uZXh0X2l0ZW1faW5jbHVzaXZlKGtidCk7Cit9CitFWFBPUlRfU1lNQk9MKEtCYWNrdHJhY2VJdGVyYXRvcl9uZXh0KTsKKworLyoKKyAqIFRoaXMgbWV0aG9kIHdyYXBzIHRoZSBiYWNrdHJhY2VyJ3MgbW9yZSBnZW5lcmljIHN1cHBvcnQuCisgKiBJdCBpcyBvbmx5IGludm9rZWQgZnJvbSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvZGU7IHNob3dfc3RhY2soKQorICogYW5kIGR1bXBfc3RhY2soKSAoaW4gZW50cnkuUykgYXJlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBlbnRyeSBwb2ludHMuCisgKi8KK3ZvaWQgdGlsZV9zaG93X3N0YWNrKHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCwgaW50IGhlYWRlcnMpCit7CisJaW50IGk7CisKKwlpZiAoaGVhZGVycykgeworCQkvKgorCQkgKiBBZGQgYSBibGFuayBsaW5lIHNpbmNlIGlmIHdlIGFyZSBjYWxsZWQgZnJvbSBwYW5pYygpLAorCQkgKiB0aGVuIGJ1c3Rfc3BpbmxvY2tzKCkgc3BpdCBvdXQgYSBzcGFjZSBpbiBmcm9udCBvZiB1cworCQkgKiBhbmQgaXQgd2lsbCBtZXNzIHVwIG91ciBLRVJOX0VSUi4KKwkJICovCisJCXByX2VycigiXG4iKTsKKwkJcHJfZXJyKCJTdGFydGluZyBzdGFjayBkdW1wIG9mIHRpZCAlZCwgcGlkICVkICglcykiCisJCSAgICAgICAiIG9uIGNwdSAlZCBhdCBjeWNsZSAlbGxkXG4iLAorCQkgICAgICAga2J0LT50YXNrLT5waWQsIGtidC0+dGFzay0+dGdpZCwga2J0LT50YXNrLT5jb21tLAorCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCBnZXRfY3ljbGVzKCkpOworCX0KKyNpZmRlZiBfX3RpbGVneF9fCisJaWYgKGtidC0+aXNfY3VycmVudCkgeworCQlfX2luc25fbXRzcHIoU1BSX1NJTV9DT05UUk9MLAorCQkJICAgICBTSU1fRFVNUF9TUFJfQVJHKFNJTV9EVU1QX0JBQ0tUUkFDRSkpOworCX0KKyNlbmRpZgorCWtidC0+dmVyYm9zZSA9IDE7CisJaSA9IDA7CisJZm9yICg7ICFLQmFja3RyYWNlSXRlcmF0b3JfZW5kKGtidCk7IEtCYWNrdHJhY2VJdGVyYXRvcl9uZXh0KGtidCkpIHsKKwkJY2hhciAqbW9kbmFtZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0ga2J0LT5pdC5wYzsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7CisJCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOKzEwMF07CisKKwkJaWYgKGFkZHJlc3MgPj0gUEFHRV9PRkZTRVQpCisJCQluYW1lID0ga2FsbHN5bXNfbG9va3VwKGFkZHJlc3MsICZzaXplLCAmb2Zmc2V0LAorCQkJCQkgICAgICAgJm1vZG5hbWUsIG5hbWVidWYpOworCQllbHNlCisJCQluYW1lID0gTlVMTDsKKworCQlpZiAoIW5hbWUpCisJCQluYW1lYnVmWzBdID0gJ1wwJzsKKwkJZWxzZSB7CisJCQlzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lYnVmKTsKKwkJCXNpemVfdCByZW1haW5pbmcgPSAoc2l6ZW9mKG5hbWVidWYpIC0gMSkgLSBuYW1lbGVuOworCQkJY2hhciAqcCA9IG5hbWVidWYgKyBuYW1lbGVuOworCQkJaW50IHJjID0gc25wcmludGYocCwgcmVtYWluaW5nLCAiKyUjbHgvJSNseCAiLAorCQkJCQkgIG9mZnNldCwgc2l6ZSk7CisJCQlpZiAobW9kbmFtZSAmJiByYyA8IHJlbWFpbmluZykKKwkJCQlzbnByaW50ZihwICsgcmMsIHJlbWFpbmluZyAtIHJjLAorCQkJCQkgIlslc10gIiwgbW9kbmFtZSk7CisJCQluYW1lYnVmW3NpemVvZihuYW1lYnVmKS0xXSA9ICdcMCc7CisJCX0KKworCQlwcl9lcnIoIiAgZnJhbWUgJWQ6IDB4JWx4ICVzKHNwIDB4JWx4KVxuIiwKKwkJICAgICAgIGkrKywgYWRkcmVzcywgbmFtZWJ1ZiwgKHVuc2lnbmVkIGxvbmcpKGtidC0+aXQuc3ApKTsKKworCQlpZiAoaSA+PSAxMDApIHsKKwkJCXByX2VycigiU3RhY2sgZHVtcCB0cnVuY2F0ZWQiCisJCQkgICAgICAgIiAoJWQgZnJhbWVzKVxuIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaGVhZGVycykKKwkJcHJfZXJyKCJTdGFjayBkdW1wIGNvbXBsZXRlXG4iKTsKK30KK0VYUE9SVF9TWU1CT0wodGlsZV9zaG93X3N0YWNrKTsKKworCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIHNob3dfcmVncygpIGFuZCBfZHVtcF9zdGFjaygpICovCit2b2lkIGR1bXBfc3RhY2tfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yIGtidDsKKwlLQmFja3RyYWNlSXRlcmF0b3JfaW5pdCgma2J0LCBOVUxMLCByZWdzKTsKKwl0aWxlX3Nob3dfc3RhY2soJmtidCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2tfcmVncyk7CisKK3N0YXRpYyBzdHJ1Y3QgcHRfcmVncyAqcmVnc190b19wdF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICAgICB1bG9uZyBwYywgdWxvbmcgbHIsIHVsb25nIHNwLCB1bG9uZyByNTIpCit7CisJbWVtc2V0KHJlZ3MsIDAsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCXJlZ3MtPnBjID0gcGM7CisJcmVncy0+bHIgPSBscjsKKwlyZWdzLT5zcCA9IHNwOworCXJlZ3MtPnJlZ3NbNTJdID0gcjUyOworCXJldHVybiByZWdzOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGR1bXBfc3RhY2soKSBhbmQganVzdCBjb252ZXJ0cyB0byBwdF9yZWdzICovCit2b2lkIF9kdW1wX3N0YWNrKGludCBkdW1teSwgdWxvbmcgcGMsIHVsb25nIGxyLCB1bG9uZyBzcCwgdWxvbmcgcjUyKQoreworCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CisJZHVtcF9zdGFja19yZWdzKHJlZ3NfdG9fcHRfcmVncygmcmVncywgcGMsIGxyLCBzcCwgcjUyKSk7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkIGZyb20gS0JhY2t0cmFjZUl0ZXJhdG9yX2luaXRfY3VycmVudCgpICovCit2b2lkIF9LQmFja3RyYWNlSXRlcmF0b3JfaW5pdF9jdXJyZW50KHN0cnVjdCBLQmFja3RyYWNlSXRlcmF0b3IgKmtidCwgdWxvbmcgcGMsCisJCQkJICAgICAgdWxvbmcgbHIsIHVsb25nIHNwLCB1bG9uZyByNTIpCit7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlLQmFja3RyYWNlSXRlcmF0b3JfaW5pdChrYnQsIE5VTEwsCisJCQkJcmVnc190b19wdF9yZWdzKCZyZWdzLCBwYywgbHIsIHNwLCByNTIpKTsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgb25seSBmcm9tIGtlcm5lbC9zY2hlZC5jLCB3aXRoIGVzcCA9PSBOVUxMICovCit2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICplc3ApCit7CisJc3RydWN0IEtCYWNrdHJhY2VJdGVyYXRvciBrYnQ7CisJaWYgKHRhc2sgPT0gTlVMTCB8fCB0YXNrID09IGN1cnJlbnQpCisJCUtCYWNrdHJhY2VJdGVyYXRvcl9pbml0X2N1cnJlbnQoJmtidCk7CisJZWxzZQorCQlLQmFja3RyYWNlSXRlcmF0b3JfaW5pdCgma2J0LCB0YXNrLCBOVUxMKTsKKwl0aWxlX3Nob3dfc3RhY2soJmtidCwgMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQorCisvKiBTdXBwb3J0IGdlbmVyaWMgTGludXggc3RhY2sgQVBJIHRvbyAqLworCit2b2lkIHNhdmVfc3RhY2tfdHJhY2VfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlzdHJ1Y3QgS0JhY2t0cmFjZUl0ZXJhdG9yIGtidDsKKwlpbnQgc2tpcCA9IHRyYWNlLT5za2lwOworCWludCBpID0gMDsKKworCWlmICh0YXNrID09IE5VTEwgfHwgdGFzayA9PSBjdXJyZW50KQorCQlLQmFja3RyYWNlSXRlcmF0b3JfaW5pdF9jdXJyZW50KCZrYnQpOworCWVsc2UKKwkJS0JhY2t0cmFjZUl0ZXJhdG9yX2luaXQoJmtidCwgdGFzaywgTlVMTCk7CisJZm9yICg7ICFLQmFja3RyYWNlSXRlcmF0b3JfZW5kKCZrYnQpOyBLQmFja3RyYWNlSXRlcmF0b3JfbmV4dCgma2J0KSkgeworCQlpZiAoc2tpcCkgeworCQkJLS1za2lwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGkgPj0gdHJhY2UtPm1heF9lbnRyaWVzIHx8IGtidC5pdC5wYyA8IFBBR0VfT0ZGU0VUKQorCQkJYnJlYWs7CisJCXRyYWNlLT5lbnRyaWVzW2krK10gPSBrYnQuaXQucGM7CisJfQorCXRyYWNlLT5ucl9lbnRyaWVzID0gaTsKK30KK0VYUE9SVF9TWU1CT0woc2F2ZV9zdGFja190cmFjZV90c2spOworCit2b2lkIHNhdmVfc3RhY2tfdHJhY2Uoc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlzYXZlX3N0YWNrX3RyYWNlX3RzayhOVUxMLCB0cmFjZSk7Cit9CisKKyNlbmRpZgorCisvKiBJbiBlbnRyeS5TICovCitFWFBPUlRfU1lNQk9MKEtCYWNrdHJhY2VJdGVyYXRvcl9pbml0X2N1cnJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9zeXMuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc3lzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmODdlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvc3lzLmMKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHZhcmlvdXMgcmFuZG9tIHN5c3RlbSBjYWxscyB0aGF0CisgKiBoYXZlIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2Ugb24gdGhlIExpbnV4L1RJTEUKKyAqIHBsYXRmb3JtLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisjaW5jbHVkZSA8YXJjaC9jaGlwLmg+CisKK1NZU0NBTExfREVGSU5FMChmbHVzaF9jYWNoZSkKK3sKKwlob21lY2FjaGVfZXZpY3QoY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN5c2NhbGxzIHRoYXQgcGFzcyA2NC1iaXQgdmFsdWVzIG9uIDMyLWJpdCBzeXN0ZW1zIG5vcm1hbGx5CisgKiBwYXNzIHRoZW0gYXMgKGxvdyxoaWdoKSB3b3JkIHBhY2tlZCBpbnRvIHRoZSBpbW1lZGlhdGVseSBhZGphY2VudAorICogcmVnaXN0ZXJzLiAgSWYgdGhlIGxvdyB3b3JkIG5hdHVyYWxseSBmYWxscyBvbiBhbiBldmVuIHJlZ2lzdGVyLAorICogb3VyIEFCSSBtYWtlcyBpdCB3b3JrIGNvcnJlY3RseTsgaWYgbm90LCB3ZSBhZGp1c3QgaXQgaGVyZS4KKyAqIEhhbmRsaW5nIGl0IGhlcmUgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBmaXggdWNsaWJjIEFORCBnbGliYyBBTkQKKyAqIGFueSBvdGhlciBzdGFuZGFyZCBsaWJjcyB3ZSB3YW50IHRvIHN1cHBvcnQuCisgKi8KKworI2lmICFkZWZpbmVkKF9fdGlsZWd4X18pIHx8IGRlZmluZWQoQ09ORklHX0NPTVBBVCkKKworc3NpemVfdCBzeXMzMl9yZWFkYWhlYWQoaW50IGZkLCB1MzIgb2Zmc2V0X2xvLCB1MzIgb2Zmc2V0X2hpLCB1MzIgY291bnQpCit7CisJcmV0dXJuIHN5c19yZWFkYWhlYWQoZmQsICgobG9mZl90KW9mZnNldF9oaSA8PCAzMikgfCBvZmZzZXRfbG8sIGNvdW50KTsKK30KKworbG9uZyBzeXMzMl9mYWR2aXNlNjQoaW50IGZkLCB1MzIgb2Zmc2V0X2xvLCB1MzIgb2Zmc2V0X2hpLAorCQkgICAgIHUzMiBsZW4sIGludCBhZHZpY2UpCit7CisJcmV0dXJuIHN5c19mYWR2aXNlNjRfNjQoZmQsICgobG9mZl90KW9mZnNldF9oaSA8PCAzMikgfCBvZmZzZXRfbG8sCisJCQkJbGVuLCBhZHZpY2UpOworfQorCitpbnQgc3lzMzJfZmFkdmlzZTY0XzY0KGludCBmZCwgdTMyIG9mZnNldF9sbywgdTMyIG9mZnNldF9oaSwKKwkJICAgICAgIHUzMiBsZW5fbG8sIHUzMiBsZW5faGksIGludCBhZHZpY2UpCit7CisJcmV0dXJuIHN5c19mYWR2aXNlNjRfNjQoZmQsICgobG9mZl90KW9mZnNldF9oaSA8PCAzMikgfCBvZmZzZXRfbG8sCisJCQkJKChsb2ZmX3QpbGVuX2hpIDw8IDMyKSB8IGxlbl9sbywgYWR2aWNlKTsKK30KKworI2VuZGlmIC8qIDMyLWJpdCBzeXNjYWxsIHdyYXBwZXJzICovCisKKy8qIE5vdGU6IHVzZWQgYnkgdGhlIGNvbXBhdCBjb2RlIGV2ZW4gaW4gNjQtYml0IExpbnV4LiAqLworU1lTQ0FMTF9ERUZJTkU2KG1tYXAyLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBsZW4sCisJCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLAorCQl1bnNpZ25lZCBsb25nLCBmZCwgdW5zaWduZWQgbG9uZywgb2ZmXzRrKQoreworI2RlZmluZSBQQUdFX0FESlVTVCAoUEFHRV9TSElGVCAtIDEyKQorCWlmIChvZmZfNGsgJiAoKDEgPDwgUEFHRV9BREpVU1QpIC0gMSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBzeXNfbW1hcF9wZ29mZihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwKKwkJCSAgICAgIG9mZl80ayA+PiBQQUdFX0FESlVTVCk7Cit9CisKKyNpZmRlZiBfX3RpbGVneF9fCitTWVNDQUxMX0RFRklORTYobW1hcCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAorCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBmbGFncywKKwkJdW5zaWduZWQgbG9uZywgZmQsIG9mZl90LCBvZmZzZXQpCit7CisJaWYgKG9mZnNldCAmICgoMSA8PCBQQUdFX1NISUZUKSAtIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gc3lzX21tYXBfcGdvZmYoYWRkciwgbGVuLCBwcm90LCBmbGFncywgZmQsCisJCQkgICAgICBvZmZzZXQgPj4gUEFHRV9TSElGVCk7Cit9CisjZW5kaWYKKworCisvKiBQcm92aWRlIHRoZSBhY3R1YWwgc3lzY2FsbCBudW1iZXIgdG8gY2FsbCBtYXBwaW5nLiAqLworI3VuZGVmIF9fU1lTQ0FMTAorI2RlZmluZSBfX1NZU0NBTEwobnIsIGNhbGwpIFtucl0gPSAoY2FsbCksCisKKyNpZm5kZWYgX190aWxlZ3hfXworLyogU2VlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuICovCisjZGVmaW5lIHN5c19mYWR2aXNlNjQgc3lzMzJfZmFkdmlzZTY0CisjZGVmaW5lIHN5c19mYWR2aXNlNjRfNjQgc3lzMzJfZmFkdmlzZTY0XzY0CisjZGVmaW5lIHN5c19yZWFkYWhlYWQgc3lzMzJfcmVhZGFoZWFkCisjZGVmaW5lIHN5c19zeW5jX2ZpbGVfcmFuZ2Ugc3lzX3N5bmNfZmlsZV9yYW5nZTIKKyNlbmRpZgorCisvKgorICogTm90ZSB0aGF0IHdlIGNhbid0IGluY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPiBoZXJlIHNpbmNlIHRoZSBoZWFkZXIKKyAqIGd1YXJkIHdpbGwgZGVmZWF0IHVzOyA8YXNtL3VuaXN0ZC5oPiBjaGVja3MgZm9yIF9fU1lTQ0FMTCBhcyB3ZWxsLgorICovCit2b2lkICpzeXNfY2FsbF90YWJsZVtfX05SX3N5c2NhbGxzXSA9IHsKKwlbMCAuLi4gX19OUl9zeXNjYWxscy0xXSA9IHN5c19uaV9zeXNjYWxsLAorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KK307CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3RpbGUtZGVzY18zMi5jIGIvYXJjaC90aWxlL2tlcm5lbC90aWxlLWRlc2NfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFmMGUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC90aWxlLWRlc2NfMzIuYwpAQCAtMCwwICsxLDI0OTggQEAKKy8qIFRoaXMgZGVmaW5lIGlzIEJGRF9SRUxPQ18jI3ggZm9yIHJlYWwgYmZkLCBvciAtMSBmb3IgZXZlcnlvbmUgZWxzZS4gKi8KKyNkZWZpbmUgQkZEX1JFTE9DKHgpIC0xCisKKy8qIFNwZWNpYWwgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBUUkVHX0xSIDU1CisjZGVmaW5lIFRSRUdfU04gNTYKKyNkZWZpbmUgVFJFR19aRVJPIDYzCisKKy8qIEZJWE1FOiBSZW5hbWUgdGhpcy4gKi8KKyNpbmNsdWRlIDxhc20vb3Bjb2RlLXRpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorCitjb25zdCBzdHJ1Y3QgdGlsZV9vcGNvZGUgdGlsZV9vcGNvZGVzWzM5NV0gPQoreworIHsgImJwdCIsIFRJTEVfT1BDX0JQVCwgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiaW5mbyIsIFRJTEVfT1BDX0lORk8sIDB4ZiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwIH0sIHsgMSB9LCB7IDIgfSwgeyAzIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbmZvbCIsIFRJTEVfT1BDX0lORk9MLCAweDMsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNCB9LCB7IDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJqIiwgVElMRV9PUENfSiwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImphbCIsIFRJTEVfT1BDX0pBTCwgMHgyLCAxLCBUUkVHX0xSLCAxLAorICAgIHsgeyAwLCB9LCB7IDYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtb3ZlIiwgVElMRV9PUENfTU9WRSwgMHhmLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDggfSwgeyA5LCAxMCB9LCB7IDExLCAxMiB9LCB7IDEzLCAxNCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW92ZS5zbiIsIFRJTEVfT1BDX01PVkVfU04sIDB4MywgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW92ZWkiLCBUSUxFX09QQ19NT1ZFSSwgMHhmLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDAgfSwgeyA5LCAxIH0sIHsgMTEsIDIgfSwgeyAxMywgMyB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW92ZWkuc24iLCBUSUxFX09QQ19NT1ZFSV9TTiwgMHgzLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCAwIH0sIHsgOSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1vdmVsaSIsIFRJTEVfT1BDX01PVkVMSSwgMHgzLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDQgfSwgeyA5LCA1IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW92ZWxpLnNuIiwgVElMRV9PUENfTU9WRUxJX1NOLCAweDMsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDQgfSwgeyA5LCA1IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW92ZWxpcyIsIFRJTEVfT1BDX01PVkVMSVMsIDB4MywgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgNCB9LCB7IDksIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJwcmVmZXRjaCIsIFRJTEVfT1BDX1BSRUZFVENILCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMTUgfSB9LAorICB9LAorICB7ICJyYWlzZSIsIFRJTEVfT1BDX1JBSVNFLCAweDIsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGQiLCBUSUxFX09QQ19BREQsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDExLCAxMiwgMTggfSwgeyAxMywgMTQsIDE5IH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGQuc24iLCBUSUxFX09QQ19BRERfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRiIiwgVElMRV9PUENfQUREQiwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYWRkYi5zbiIsIFRJTEVfT1BDX0FEREJfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRic191IiwgVElMRV9PUENfQUREQlNfVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYWRkYnNfdS5zbiIsIFRJTEVfT1BDX0FEREJTX1VfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRoIiwgVElMRV9PUENfQURESCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYWRkaC5zbiIsIFRJTEVfT1BDX0FEREhfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRocyIsIFRJTEVfT1BDX0FEREhTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRocy5zbiIsIFRJTEVfT1BDX0FEREhTX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYWRkaSIsIFRJTEVfT1BDX0FEREksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAxMSwgMTIsIDIgfSwgeyAxMywgMTQsIDMgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkZGkuc24iLCBUSUxFX09QQ19BRERJX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkZGliIiwgVElMRV9PUENfQURESUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRpYi5zbiIsIFRJTEVfT1BDX0FERElCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkZGloIiwgVElMRV9PUENfQURESUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRpaC5zbiIsIFRJTEVfT1BDX0FERElIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkZGxpIiwgVElMRV9PUENfQURETEksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCA0IH0sIHsgOSwgMTAsIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRsaS5zbiIsIFRJTEVfT1BDX0FERExJX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDQgfSwgeyA5LCAxMCwgNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkZGxpcyIsIFRJTEVfT1BDX0FERExJUywgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCA0IH0sIHsgOSwgMTAsIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGRzIiwgVElMRV9PUENfQUREUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYWRkcy5zbiIsIFRJTEVfT1BDX0FERFNfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGlmZmJfdSIsIFRJTEVfT1BDX0FESUZGQl9VLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkaWZmYl91LnNuIiwgVElMRV9PUENfQURJRkZCX1VfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFkaWZmaCIsIFRJTEVfT1BDX0FESUZGSCwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhZGlmZmguc24iLCBUSUxFX09QQ19BRElGRkhfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFuZCIsIFRJTEVfT1BDX0FORCwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFuZC5zbiIsIFRJTEVfT1BDX0FORF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImFuZGkiLCBUSUxFX09QQ19BTkRJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMTEsIDEyLCAyIH0sIHsgMTMsIDE0LCAzIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhbmRpLnNuIiwgVElMRV9PUENfQU5ESV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhdWxpIiwgVElMRV9PUENfQVVMSSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDQgfSwgeyA5LCAxMCwgNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImF2Z2JfdSIsIFRJTEVfT1BDX0FWR0JfVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJhdmdiX3Uuc24iLCBUSUxFX09QQ19BVkdCX1VfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImF2Z2giLCBUSUxFX09QQ19BVkdILCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImF2Z2guc24iLCBUSUxFX09QQ19BVkdIX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiYm5zIiwgVElMRV9PUENfQkJOUywgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmJucy5zbiIsIFRJTEVfT1BDX0JCTlNfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiYm5zdCIsIFRJTEVfT1BDX0JCTlNULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiYm5zdC5zbiIsIFRJTEVfT1BDX0JCTlNUX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmJzIiwgVElMRV9PUENfQkJTLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiYnMuc24iLCBUSUxFX09QQ19CQlNfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiYnN0IiwgVElMRV9PUENfQkJTVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmJzdC5zbiIsIFRJTEVfT1BDX0JCU1RfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiZ2V6IiwgVElMRV9PUENfQkdFWiwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmdlei5zbiIsIFRJTEVfT1BDX0JHRVpfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiZ2V6dCIsIFRJTEVfT1BDX0JHRVpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiZ2V6dC5zbiIsIFRJTEVfT1BDX0JHRVpUX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmd6IiwgVElMRV9PUENfQkdaLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiZ3ouc24iLCBUSUxFX09QQ19CR1pfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiZ3p0IiwgVElMRV9PUENfQkdaVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmd6dC5zbiIsIFRJTEVfT1BDX0JHWlRfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiaXR4IiwgVElMRV9PUENfQklUWCwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDggfSwgeyAwLCB9LCB7IDExLCAxMiB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiaXR4LnNuIiwgVElMRV9PUENfQklUWF9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibGV6IiwgVElMRV9PUENfQkxFWiwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmxlei5zbiIsIFRJTEVfT1BDX0JMRVpfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibGV6dCIsIFRJTEVfT1BDX0JMRVpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibGV6dC5zbiIsIFRJTEVfT1BDX0JMRVpUX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmx6IiwgVElMRV9PUENfQkxaLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibHouc24iLCBUSUxFX09QQ19CTFpfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibHp0IiwgVElMRV9PUENfQkxaVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYmx6dC5zbiIsIFRJTEVfT1BDX0JMWlRfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibnoiLCBUSUxFX09QQ19CTlosIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwLCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImJuei5zbiIsIFRJTEVfT1BDX0JOWl9TTiwgMHgyLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwLCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImJuenQiLCBUSUxFX09QQ19CTlpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJibnp0LnNuIiwgVElMRV9PUENfQk5aVF9TTiwgMHgyLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwLCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImJ5dGV4IiwgVElMRV9PUENfQllURVgsIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4IH0sIHsgMCwgfSwgeyAxMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYnl0ZXguc24iLCBUSUxFX09QQ19CWVRFWF9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJieiIsIFRJTEVfT1BDX0JaLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJiei5zbiIsIFRJTEVfT1BDX0JaX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiYnp0IiwgVElMRV9PUENfQlpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJienQuc24iLCBUSUxFX09QQ19CWlRfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJjbHoiLCBUSUxFX09QQ19DTFosIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4IH0sIHsgMCwgfSwgeyAxMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiY2x6LnNuIiwgVElMRV9PUENfQ0xaX1NOLCAweDEsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDggfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImNyYzMyXzMyIiwgVElMRV9PUENfQ1JDMzJfMzIsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiY3JjMzJfMzIuc24iLCBUSUxFX09QQ19DUkMzMl8zMl9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiY3JjMzJfOCIsIFRJTEVfT1BDX0NSQzMyXzgsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiY3JjMzJfOC5zbiIsIFRJTEVfT1BDX0NSQzMyXzhfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImN0eiIsIFRJTEVfT1BDX0NUWiwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDggfSwgeyAwLCB9LCB7IDExLCAxMiB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJjdHouc24iLCBUSUxFX09QQ19DVFpfU04sIDB4MSwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiZHJhaW4iLCBUSUxFX09QQ19EUkFJTiwgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiZHRsYnByIiwgVElMRV9PUENfRFRMQlBSLCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImR3b3JkX2FsaWduIiwgVElMRV9PUENfRFdPUkRfQUxJR04sIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImR3b3JkX2FsaWduLnNuIiwgVElMRV9PUENfRFdPUkRfQUxJR05fU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJmaW52IiwgVElMRV9PUENfRklOViwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJmbHVzaCIsIFRJTEVfT1BDX0ZMVVNILCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImZub3AiLCBUSUxFX09QQ19GTk9QLCAweGYsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgIH0sIHsgIH0sIHsgIH0sIHsgIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpY29oIiwgVElMRV9PUENfSUNPSCwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbGwiLCBUSUxFX09QQ19JTEwsIDB4YSwgMCwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7ICB9LCB7IDAsIH0sIHsgIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbnRoYiIsIFRJTEVfT1BDX0lOVEhCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbnRoYi5zbiIsIFRJTEVfT1BDX0lOVEhCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiaW50aGgiLCBUSUxFX09QQ19JTlRISCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiaW50aGguc24iLCBUSUxFX09QQ19JTlRISF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImludGxiIiwgVElMRV9PUENfSU5UTEIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImludGxiLnNuIiwgVElMRV9PUENfSU5UTEJfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbnRsaCIsIFRJTEVfT1BDX0lOVExILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJpbnRsaC5zbiIsIFRJTEVfT1BDX0lOVExIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiaW52IiwgVElMRV9PUENfSU5WLCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImlyZXQiLCBUSUxFX09QQ19JUkVULCAweDIsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJqYWxiIiwgVElMRV9PUENfSkFMQiwgMHgyLCAxLCBUUkVHX0xSLCAxLAorICAgIHsgeyAwLCB9LCB7IDIyIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAiamFsZiIsIFRJTEVfT1BDX0pBTEYsIDB4MiwgMSwgVFJFR19MUiwgMSwKKyAgICB7IHsgMCwgfSwgeyAyMiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImphbHIiLCBUSUxFX09QQ19KQUxSLCAweDIsIDEsIFRSRUdfTFIsIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJqYWxycCIsIFRJTEVfT1BDX0pBTFJQLCAweDIsIDEsIFRSRUdfTFIsIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJqYiIsIFRJTEVfT1BDX0pCLCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAyMiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImpmIiwgVElMRV9PUENfSkYsIDB4MiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDIyIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAianIiLCBUSUxFX09QQ19KUiwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJqcnAiLCBUSUxFX09QQ19KUlAsIDB4MiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibGIiLCBUSUxFX09QQ19MQiwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDIzLCAxNSB9IH0sCisgIH0sCisgIHsgImxiLnNuIiwgVElMRV9PUENfTEJfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxiX3UiLCBUSUxFX09QQ19MQl9VLCAweDEyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMjMsIDE1IH0gfSwKKyAgfSwKKyAgeyAibGJfdS5zbiIsIFRJTEVfT1BDX0xCX1VfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxiYWRkIiwgVElMRV9PUENfTEJBREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDI0LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibGJhZGQuc24iLCBUSUxFX09QQ19MQkFERF9TTiwgMHgyLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDI0LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibGJhZGRfdSIsIFRJTEVfT1BDX0xCQUREX1UsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDI0LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibGJhZGRfdS5zbiIsIFRJTEVfT1BDX0xCQUREX1VfU04sIDB4MiwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxoIiwgVElMRV9PUENfTEgsIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAyMywgMTUgfSB9LAorICB9LAorICB7ICJsaC5zbiIsIFRJTEVfT1BDX0xIX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsaF91IiwgVElMRV9PUENfTEhfVSwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDIzLCAxNSB9IH0sCisgIH0sCisgIHsgImxoX3Uuc24iLCBUSUxFX09QQ19MSF9VX1NOLCAweDIsIDIsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMTAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsaGFkZCIsIFRJTEVfT1BDX0xIQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxoYWRkLnNuIiwgVElMRV9PUENfTEhBRERfU04sIDB4MiwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxoYWRkX3UiLCBUSUxFX09QQ19MSEFERF9VLCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImxoYWRkX3Uuc24iLCBUSUxFX09QQ19MSEFERF9VX1NOLCAweDIsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMjQsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsbmsiLCBUSUxFX09QQ19MTkssIDB4MiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDkgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsbmsuc24iLCBUSUxFX09QQ19MTktfU04sIDB4MiwgMSwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibHciLCBUSUxFX09QQ19MVywgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDIzLCAxNSB9IH0sCisgIH0sCisgIHsgImx3LnNuIiwgVElMRV9PUENfTFdfU04sIDB4MiwgMiwgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImx3X25hIiwgVElMRV9PUENfTFdfTkEsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibHdfbmEuc24iLCBUSUxFX09QQ19MV19OQV9TTiwgMHgyLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibHdhZGQiLCBUSUxFX09QQ19MV0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMjQsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsd2FkZC5zbiIsIFRJTEVfT1BDX0xXQUREX1NOLCAweDIsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDAsIH0sIHsgOSwgMjQsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJsd2FkZF9uYSIsIFRJTEVfT1BDX0xXQUREX05BLCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgImx3YWRkX25hLnNuIiwgVElMRV9PUENfTFdBRERfTkFfU04sIDB4MiwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1heGJfdSIsIFRJTEVfT1BDX01BWEJfVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWF4Yl91LnNuIiwgVElMRV9PUENfTUFYQl9VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWF4aCIsIFRJTEVfT1BDX01BWEgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1heGguc24iLCBUSUxFX09QQ19NQVhIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWF4aWJfdSIsIFRJTEVfT1BDX01BWElCX1UsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtYXhpYl91LnNuIiwgVElMRV9PUENfTUFYSUJfVV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtYXhpaCIsIFRJTEVfT1BDX01BWElILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWF4aWguc24iLCBUSUxFX09QQ19NQVhJSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtZiIsIFRJTEVfT1BDX01GLCAweDIsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtZnNwciIsIFRJTEVfT1BDX01GU1BSLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAyNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1pbmJfdSIsIFRJTEVfT1BDX01JTkJfVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWluYl91LnNuIiwgVElMRV9PUENfTUlOQl9VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWluaCIsIFRJTEVfT1BDX01JTkgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1pbmguc24iLCBUSUxFX09QQ19NSU5IX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWluaWJfdSIsIFRJTEVfT1BDX01JTklCX1UsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtaW5pYl91LnNuIiwgVElMRV9PUENfTUlOSUJfVV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtaW5paCIsIFRJTEVfT1BDX01JTklILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibWluaWguc24iLCBUSUxFX09QQ19NSU5JSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtbSIsIFRJTEVfT1BDX01NLCAweDMsIDUsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYsIDI2LCAyNyB9LCB7IDksIDEwLCAxNywgMjgsIDI5IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW56IiwgVElMRV9PUENfTU5aLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW56LnNuIiwgVElMRV9PUENfTU5aX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW56YiIsIFRJTEVfT1BDX01OWkIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1uemIuc24iLCBUSUxFX09QQ19NTlpCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibW56aCIsIFRJTEVfT1BDX01OWkgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm1uemguc24iLCBUSUxFX09QQ19NTlpIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXRzcHIiLCBUSUxFX09QQ19NVFNQUiwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMzAsIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGhfc3MiLCBUSUxFX09QQ19NVUxISF9TUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoX3NzLnNuIiwgVElMRV9PUENfTVVMSEhfU1NfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoX3N1IiwgVElMRV9PUENfTVVMSEhfU1UsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGhfc3Uuc24iLCBUSUxFX09QQ19NVUxISF9TVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGhfdXUiLCBUSUxFX09QQ19NVUxISF9VVSwgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoX3V1LnNuIiwgVElMRV9PUENfTVVMSEhfVVVfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoYV9zcyIsIFRJTEVfT1BDX01VTEhIQV9TUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMzEsIDEyLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxoaGFfc3Muc24iLCBUSUxFX09QQ19NVUxISEFfU1NfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxoaGFfc3UiLCBUSUxFX09QQ19NVUxISEFfU1UsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoYV9zdS5zbiIsIFRJTEVfT1BDX01VTEhIQV9TVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhoYV91dSIsIFRJTEVfT1BDX01VTEhIQV9VVSwgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMzEsIDEyLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxoaGFfdXUuc24iLCBUSUxFX09QQ19NVUxISEFfVVVfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxoaHNhX3V1IiwgVElMRV9PUENfTVVMSEhTQV9VVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGhzYV91dS5zbiIsIFRJTEVfT1BDX01VTEhIU0FfVVVfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxobF9zcyIsIFRJTEVfT1BDX01VTEhMX1NTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsX3NzLnNuIiwgVElMRV9PUENfTVVMSExfU1NfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsX3N1IiwgVElMRV9PUENfTVVMSExfU1UsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxfc3Uuc24iLCBUSUxFX09QQ19NVUxITF9TVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxfdXMiLCBUSUxFX09QQ19NVUxITF9VUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxobF91cy5zbiIsIFRJTEVfT1BDX01VTEhMX1VTX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxobF91dSIsIFRJTEVfT1BDX01VTEhMX1VVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsX3V1LnNuIiwgVElMRV9PUENfTVVMSExfVVVfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsYV9zcyIsIFRJTEVfT1BDX01VTEhMQV9TUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxhX3NzLnNuIiwgVElMRV9PUENfTVVMSExBX1NTX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxhX3N1IiwgVElMRV9PUENfTVVMSExBX1NVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxobGFfc3Uuc24iLCBUSUxFX09QQ19NVUxITEFfU1VfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxobGFfdXMiLCBUSUxFX09QQ19NVUxITEFfVVMsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsYV91cy5zbiIsIFRJTEVfT1BDX01VTEhMQV9VU19TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGhsYV91dSIsIFRJTEVfT1BDX01VTEhMQV9VVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxhX3V1LnNuIiwgVElMRV9PUENfTVVMSExBX1VVX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxzYV91dSIsIFRJTEVfT1BDX01VTEhMU0FfVVUsIDB4NSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDMxLCAxMiwgMTggfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsaGxzYV91dS5zbiIsIFRJTEVfT1BDX01VTEhMU0FfVVVfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxsbF9zcyIsIFRJTEVfT1BDX01VTExMX1NTLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDExLCAxMiwgMTggfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxfc3Muc24iLCBUSUxFX09QQ19NVUxMTF9TU19TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxfc3UiLCBUSUxFX09QQ19NVUxMTF9TVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxsbF9zdS5zbiIsIFRJTEVfT1BDX01VTExMX1NVX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxsbF91dSIsIFRJTEVfT1BDX01VTExMX1VVLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDExLCAxMiwgMTggfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxfdXUuc24iLCBUSUxFX09QQ19NVUxMTF9VVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxhX3NzIiwgVElMRV9PUENfTVVMTExBX1NTLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAzMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGxsYV9zcy5zbiIsIFRJTEVfT1BDX01VTExMQV9TU19TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGxsYV9zdSIsIFRJTEVfT1BDX01VTExMQV9TVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxhX3N1LnNuIiwgVElMRV9PUENfTVVMTExBX1NVX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXVsbGxhX3V1IiwgVElMRV9PUENfTVVMTExBX1VVLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAzMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGxsYV91dS5zbiIsIFRJTEVfT1BDX01VTExMQV9VVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm11bGxsc2FfdXUiLCBUSUxFX09QQ19NVUxMTFNBX1VVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtdWxsbHNhX3V1LnNuIiwgVElMRV9PUENfTVVMTExTQV9VVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm12bnoiLCBUSUxFX09QQ19NVk5aLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAzMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm12bnouc24iLCBUSUxFX09QQ19NVk5aX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXZ6IiwgVElMRV9PUENfTVZaLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAzMSwgMTIsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm12ei5zbiIsIFRJTEVfT1BDX01WWl9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm16IiwgVElMRV9PUENfTVosIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDExLCAxMiwgMTggfSwgeyAxMywgMTQsIDE5IH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtei5zbiIsIFRJTEVfT1BDX01aX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibXpiIiwgVElMRV9PUENfTVpCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtemIuc24iLCBUSUxFX09QQ19NWkJfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJtemgiLCBUSUxFX09QQ19NWkgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm16aC5zbiIsIFRJTEVfT1BDX01aSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm5hcCIsIFRJTEVfT1BDX05BUCwgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAibm9wIiwgVElMRV9PUENfTk9QLCAweGYsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgIH0sIHsgIH0sIHsgIH0sIHsgIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJub3IiLCBUSUxFX09QQ19OT1IsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDExLCAxMiwgMTggfSwgeyAxMywgMTQsIDE5IH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJub3Iuc24iLCBUSUxFX09QQ19OT1JfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJvciIsIFRJTEVfT1BDX09SLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAib3Iuc24iLCBUSUxFX09QQ19PUl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgIm9yaSIsIFRJTEVfT1BDX09SSSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDExLCAxMiwgMiB9LCB7IDEzLCAxNCwgMyB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAib3JpLnNuIiwgVElMRV9PUENfT1JJX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInBhY2tic191IiwgVElMRV9PUENfUEFDS0JTX1UsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInBhY2tic191LnNuIiwgVElMRV9PUENfUEFDS0JTX1VfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJwYWNraGIiLCBUSUxFX09QQ19QQUNLSEIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInBhY2toYi5zbiIsIFRJTEVfT1BDX1BBQ0tIQl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInBhY2tocyIsIFRJTEVfT1BDX1BBQ0tIUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAicGFja2hzLnNuIiwgVElMRV9PUENfUEFDS0hTX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAicGFja2xiIiwgVElMRV9PUENfUEFDS0xCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJwYWNrbGIuc24iLCBUSUxFX09QQ19QQUNLTEJfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJwY250IiwgVElMRV9PUENfUENOVCwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDggfSwgeyAwLCB9LCB7IDExLCAxMiB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJwY250LnNuIiwgVElMRV9PUENfUENOVF9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJybCIsIFRJTEVfT1BDX1JMLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAicmwuc24iLCBUSUxFX09QQ19STF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInJsaSIsIFRJTEVfT1BDX1JMSSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMTEsIDEyLCAzNCB9LCB7IDEzLCAxNCwgMzUgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInJsaS5zbiIsIFRJTEVfT1BDX1JMSV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMxYSIsIFRJTEVfT1BDX1MxQSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMxYS5zbiIsIFRJTEVfT1BDX1MxQV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMyYSIsIFRJTEVfT1BDX1MyQSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMyYS5zbiIsIFRJTEVfT1BDX1MyQV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMzYSIsIFRJTEVfT1BDX1MzQSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInMzYS5zbiIsIFRJTEVfT1BDX1MzQV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNhZGFiX3UiLCBUSUxFX09QQ19TQURBQl9VLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzYWRhYl91LnNuIiwgVElMRV9PUENfU0FEQUJfVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNhZGFoIiwgVElMRV9PUENfU0FEQUgsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMSwgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNhZGFoLnNuIiwgVElMRV9PUENfU0FEQUhfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzYWRhaF91IiwgVElMRV9PUENfU0FEQUhfVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2FkYWhfdS5zbiIsIFRJTEVfT1BDX1NBREFIX1VfU04sIDB4MSwgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgMjEsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzYWRiX3UiLCBUSUxFX09QQ19TQURCX1UsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2FkYl91LnNuIiwgVElMRV9PUENfU0FEQl9VX1NOLCAweDEsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzYWRoIiwgVElMRV9PUENfU0FESCwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzYWRoLnNuIiwgVElMRV9PUENfU0FESF9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2FkaF91IiwgVElMRV9PUENfU0FESF9VLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNhZGhfdS5zbiIsIFRJTEVfT1BDX1NBREhfVV9TTiwgMHgxLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2IiLCBUSUxFX09QQ19TQiwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNSwgMzYgfSB9LAorICB9LAorICB7ICJzYmFkZCIsIFRJTEVfT1BDX1NCQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAyNCwgMTcsIDM3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2VxIiwgVElMRV9PUENfU0VRLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2VxLnNuIiwgVElMRV9PUENfU0VRX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2VxYiIsIFRJTEVfT1BDX1NFUUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNlcWIuc24iLCBUSUxFX09QQ19TRVFCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2VxaCIsIFRJTEVfT1BDX1NFUUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNlcWguc24iLCBUSUxFX09QQ19TRVFIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2VxaSIsIFRJTEVfT1BDX1NFUUksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAxMSwgMTIsIDIgfSwgeyAxMywgMTQsIDMgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNlcWkuc24iLCBUSUxFX09QQ19TRVFJX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNlcWliIiwgVElMRV9PUENfU0VRSUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzZXFpYi5zbiIsIFRJTEVfT1BDX1NFUUlCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNlcWloIiwgVElMRV9PUENfU0VRSUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzZXFpaC5zbiIsIFRJTEVfT1BDX1NFUUlIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNoIiwgVElMRV9PUENfU0gsIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMTUsIDM2IH0gfSwKKyAgfSwKKyAgeyAic2hhZGQiLCBUSUxFX09QQ19TSEFERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMjQsIDE3LCAzNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNobCIsIFRJTEVfT1BDX1NITCwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNobC5zbiIsIFRJTEVfT1BDX1NITF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNobGIiLCBUSUxFX09QQ19TSExCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaGxiLnNuIiwgVElMRV9PUENfU0hMQl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNobGgiLCBUSUxFX09QQ19TSExILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaGxoLnNuIiwgVElMRV9PUENfU0hMSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNobGkiLCBUSUxFX09QQ19TSExJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAxMSwgMTIsIDM0IH0sIHsgMTMsIDE0LCAzNSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hsaS5zbiIsIFRJTEVfT1BDX1NITElfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaGxpYiIsIFRJTEVfT1BDX1NITElCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaGxpYi5zbiIsIFRJTEVfT1BDX1NITElCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hsaWgiLCBUSUxFX09QQ19TSExJSCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hsaWguc24iLCBUSUxFX09QQ19TSExJSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNociIsIFRJTEVfT1BDX1NIUiwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNoci5zbiIsIFRJTEVfT1BDX1NIUl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNocmIiLCBUSUxFX09QQ19TSFJCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaHJiLnNuIiwgVElMRV9PUENfU0hSQl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNocmgiLCBUSUxFX09QQ19TSFJILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaHJoLnNuIiwgVElMRV9PUENfU0hSSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNocmkiLCBUSUxFX09QQ19TSFJJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAxMSwgMTIsIDM0IH0sIHsgMTMsIDE0LCAzNSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hyaS5zbiIsIFRJTEVfT1BDX1NIUklfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaHJpYiIsIFRJTEVfT1BDX1NIUklCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzaHJpYi5zbiIsIFRJTEVfT1BDX1NIUklCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hyaWgiLCBUSUxFX09QQ19TSFJJSCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2hyaWguc24iLCBUSUxFX09QQ19TSFJJSF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdCIsIFRJTEVfT1BDX1NMVCwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdC5zbiIsIFRJTEVfT1BDX1NMVF9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdF91IiwgVElMRV9PUENfU0xUX1UsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDExLCAxMiwgMTggfSwgeyAxMywgMTQsIDE5IH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRfdS5zbiIsIFRJTEVfT1BDX1NMVF9VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0YiIsIFRJTEVfT1BDX1NMVEIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGIuc24iLCBUSUxFX09QQ19TTFRCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0Yl91IiwgVElMRV9PUENfU0xUQl9VLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRiX3Uuc24iLCBUSUxFX09QQ19TTFRCX1VfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRlIiwgVElMRV9PUENfU0xURSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMTEsIDEyLCAxOCB9LCB7IDEzLCAxNCwgMTkgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGUuc24iLCBUSUxFX09QQ19TTFRFX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0ZV91IiwgVElMRV9PUENfU0xURV9VLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0ZV91LnNuIiwgVElMRV9PUENfU0xURV9VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0ZWIiLCBUSUxFX09QQ19TTFRFQiwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0ZWIuc24iLCBUSUxFX09QQ19TTFRFQl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGViX3UiLCBUSUxFX09QQ19TTFRFQl9VLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRlYl91LnNuIiwgVElMRV9PUENfU0xURUJfVV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGVoIiwgVElMRV9PUENfU0xURUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGVoLnNuIiwgVElMRV9PUENfU0xURUhfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRlaF91IiwgVElMRV9PUENfU0xURUhfVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0ZWhfdS5zbiIsIFRJTEVfT1BDX1NMVEVIX1VfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRoIiwgVElMRV9PUENfU0xUSCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0aC5zbiIsIFRJTEVfT1BDX1NMVEhfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRoX3UiLCBUSUxFX09QQ19TTFRIX1UsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGhfdS5zbiIsIFRJTEVfT1BDX1NMVEhfVV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGkiLCBUSUxFX09QQ19TTFRJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMTEsIDEyLCAyIH0sIHsgMTMsIDE0LCAzIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRpLnNuIiwgVElMRV9PUENfU0xUSV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRpX3UiLCBUSUxFX09QQ19TTFRJX1UsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAxMSwgMTIsIDIgfSwgeyAxMywgMTQsIDMgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGlfdS5zbiIsIFRJTEVfT1BDX1NMVElfVV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRpYiIsIFRJTEVfT1BDX1NMVElCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0aWIuc24iLCBUSUxFX09QQ19TTFRJQl9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRpYl91IiwgVElMRV9PUENfU0xUSUJfVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGliX3Uuc24iLCBUSUxFX09QQ19TTFRJQl9VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGloIiwgVElMRV9PUENfU0xUSUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzbHRpaC5zbiIsIFRJTEVfT1BDX1NMVElIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDAgfSwgeyA5LCAxMCwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNsdGloX3UiLCBUSUxFX09QQ19TTFRJSF9VLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic2x0aWhfdS5zbiIsIFRJTEVfT1BDX1NMVElIX1VfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMCB9LCB7IDksIDEwLCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic25lIiwgVElMRV9PUENfU05FLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic25lLnNuIiwgVElMRV9PUENfU05FX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic25lYiIsIFRJTEVfT1BDX1NORUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNuZWIuc24iLCBUSUxFX09QQ19TTkVCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic25laCIsIFRJTEVfT1BDX1NORUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNuZWguc24iLCBUSUxFX09QQ19TTkVIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3JhIiwgVElMRV9PUENfU1JBLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3JhLnNuIiwgVElMRV9PUENfU1JBX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3JhYiIsIFRJTEVfT1BDX1NSQUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNyYWIuc24iLCBUSUxFX09QQ19TUkFCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3JhaCIsIFRJTEVfT1BDX1NSQUgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNyYWguc24iLCBUSUxFX09QQ19TUkFIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3JhaSIsIFRJTEVfT1BDX1NSQUksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDExLCAxMiwgMzQgfSwgeyAxMywgMTQsIDM1IH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzcmFpLnNuIiwgVElMRV9PUENfU1JBSV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNyYWliIiwgVElMRV9PUENfU1JBSUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAzMiB9LCB7IDksIDEwLCAzMyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInNyYWliLnNuIiwgVElMRV9PUENfU1JBSUJfU04sIDB4MywgMywgVFJFR19TTiwgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzcmFpaCIsIFRJTEVfT1BDX1NSQUlILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMzIgfSwgeyA5LCAxMCwgMzMgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzcmFpaC5zbiIsIFRJTEVfT1BDX1NSQUlIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDMyIH0sIHsgOSwgMTAsIDMzIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViIiwgVElMRV9PUENfU1VCLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViLnNuIiwgVElMRV9PUENfU1VCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViYiIsIFRJTEVfT1BDX1NVQkIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN1YmIuc24iLCBUSUxFX09QQ19TVUJCX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViYnNfdSIsIFRJTEVfT1BDX1NVQkJTX1UsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN1YmJzX3Uuc24iLCBUSUxFX09QQ19TVUJCU19VX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViaCIsIFRJTEVfT1BDX1NVQkgsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN1Ymguc24iLCBUSUxFX09QQ19TVUJIX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViaHMiLCBUSUxFX09QQ19TVUJIUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3ViaHMuc24iLCBUSUxFX09QQ19TVUJIU19TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN1YnMiLCBUSUxFX09QQ19TVUJTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzdWJzLnNuIiwgVElMRV9PUENfU1VCU19TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAxNiB9LCB7IDksIDEwLCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN3IiwgVElMRV9PUENfU1csIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxMCwgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMTUsIDM2IH0gfSwKKyAgfSwKKyAgeyAic3dhZGQiLCBUSUxFX09QQ19TV0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMjQsIDE3LCAzNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN3aW50MCIsIFRJTEVfT1BDX1NXSU5UMCwgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAic3dpbnQxIiwgVElMRV9PUENfU1dJTlQxLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJzd2ludDIiLCBUSUxFX09QQ19TV0lOVDIsIDB4MiwgMCwgVFJFR19aRVJPLCAwLAorICAgIHsgeyAwLCB9LCB7ICB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInN3aW50MyIsIFRJTEVfT1BDX1NXSU5UMywgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjAiLCBUSUxFX09QQ19UQkxJRFhCMCwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4IH0sIHsgMCwgfSwgeyAzMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjAuc24iLCBUSUxFX09QQ19UQkxJRFhCMF9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjEiLCBUSUxFX09QQ19UQkxJRFhCMSwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4IH0sIHsgMCwgfSwgeyAzMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjEuc24iLCBUSUxFX09QQ19UQkxJRFhCMV9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjIiLCBUSUxFX09QQ19UQkxJRFhCMiwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4IH0sIHsgMCwgfSwgeyAzMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjIuc24iLCBUSUxFX09QQ19UQkxJRFhCMl9TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjMiLCBUSUxFX09QQ19UQkxJRFhCMywgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIxLCA4IH0sIHsgMCwgfSwgeyAzMSwgMTIgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidGJsaWR4YjMuc24iLCBUSUxFX09QQ19UQkxJRFhCM19TTiwgMHgxLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAyMSwgOCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAidG5zIiwgVElMRV9PUENfVE5TLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA5LCAxMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisgIH0sCisgIHsgInRucy5zbiIsIFRJTEVfT1BDX1ROU19TTiwgMHgyLCAyLCBUUkVHX1NOLCAxLAorICAgIHsgeyAwLCB9LCB7IDksIDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAid2g2NCIsIFRJTEVfT1BDX1dINjQsIDB4MiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDEwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAieG9yIiwgVElMRV9PUENfWE9SLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNywgOCwgMTYgfSwgeyA5LCAxMCwgMTcgfSwgeyAxMSwgMTIsIDE4IH0sIHsgMTMsIDE0LCAxOSB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAieG9yLnNuIiwgVElMRV9PUENfWE9SX1NOLCAweDMsIDMsIFRSRUdfU04sIDEsCisgICAgeyB7IDcsIDgsIDE2IH0sIHsgOSwgMTAsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyAgfSwKKyAgeyAieG9yaSIsIFRJTEVfT1BDX1hPUkksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7ICJ4b3JpLnNuIiwgVElMRV9PUENfWE9SSV9TTiwgMHgzLCAzLCBUUkVHX1NOLCAxLAorICAgIHsgeyA3LCA4LCAwIH0sIHsgOSwgMTAsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorICB9LAorICB7IE5VTEwsIFRJTEVfT1BDX05PTkUsIDAsIDAsIFRSRUdfWkVSTywgMCwgeyB7IDAsIH0gfSwKKyAgfQorfTsKKyNkZWZpbmUgQklURklFTEQoc3RhcnQsIHNpemUpICgoc3RhcnQpIHwgKCgoMSA8PCAoc2l6ZSkpIC0gMSkgPDwgNikpCisjZGVmaW5lIENISUxEKGFycmF5X2luZGV4KSAoVElMRV9PUENfTk9ORSArIChhcnJheV9pbmRleCkpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWNvZGVfWDBfZnNtWzExNTNdID0KK3sKKyAgQklURklFTEQoMjIsIDkpIC8qIGluZGV4IDAgKi8sCisgIENISUxEKDUxMyksIENISUxEKDUzMCksIENISUxEKDU0NyksIENISUxEKDU2NCksIENISUxEKDU5NiksIENISUxEKDYxMyksCisgIENISUxEKDYzMCksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIENISUxEKDY2MyksIENISUxEKDY4MCksIENISUxEKDY5NyksIENISUxEKDcxNCksIENISUxEKDc0NiksCisgIENISUxEKDc2MyksIENISUxEKDc4MCksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksIENISUxEKDgxMyksCisgIENISUxEKDgxMyksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksCisgIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDgyOCksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksCisgIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg0MyksIENISUxEKDg3MyksIENISUxEKDg3OCksIENISUxEKDg4MyksCisgIENISUxEKDkwMyksIENISUxEKDkwOCksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIENISUxEKDkxMyksCisgIENISUxEKDkxOCksIENISUxEKDkyMyksIENISUxEKDk0MyksIENISUxEKDk0OCksIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIENISUxEKDk1MyksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIENISUxEKDk4OCksIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBDSElMRCg5OTMpLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBDSElMRCgxMDc2KSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDUxMyAqLywKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfQUREQiwgVElMRV9PUENfQURESCwgVElMRV9PUENfQURELAorICBUSUxFX09QQ19BRElGRkJfVSwgVElMRV9PUENfQURJRkZILCBUSUxFX09QQ19BTkQsIFRJTEVfT1BDX0FWR0JfVSwKKyAgVElMRV9PUENfQVZHSCwgVElMRV9PUENfQ1JDMzJfMzIsIFRJTEVfT1BDX0NSQzMyXzgsIFRJTEVfT1BDX0lOVEhCLAorICBUSUxFX09QQ19JTlRISCwgVElMRV9PUENfSU5UTEIsIFRJTEVfT1BDX0lOVExILCBUSUxFX09QQ19NQVhCX1UsCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA1MzAgKi8sCisgIFRJTEVfT1BDX01BWEgsIFRJTEVfT1BDX01JTkJfVSwgVElMRV9PUENfTUlOSCwgVElMRV9PUENfTU5aQiwgVElMRV9PUENfTU5aSCwKKyAgVElMRV9PUENfTU5aLCBUSUxFX09QQ19NVUxISEFfU1MsIFRJTEVfT1BDX01VTEhIQV9TVSwgVElMRV9PUENfTVVMSEhBX1VVLAorICBUSUxFX09QQ19NVUxISFNBX1VVLCBUSUxFX09QQ19NVUxISF9TUywgVElMRV9PUENfTVVMSEhfU1UsCisgIFRJTEVfT1BDX01VTEhIX1VVLCBUSUxFX09QQ19NVUxITEFfU1MsIFRJTEVfT1BDX01VTEhMQV9TVSwKKyAgVElMRV9PUENfTVVMSExBX1VTLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNTQ3ICovLAorICBUSUxFX09QQ19NVUxITEFfVVUsIFRJTEVfT1BDX01VTEhMU0FfVVUsIFRJTEVfT1BDX01VTEhMX1NTLAorICBUSUxFX09QQ19NVUxITF9TVSwgVElMRV9PUENfTVVMSExfVVMsIFRJTEVfT1BDX01VTEhMX1VVLCBUSUxFX09QQ19NVUxMTEFfU1MsCisgIFRJTEVfT1BDX01VTExMQV9TVSwgVElMRV9PUENfTVVMTExBX1VVLCBUSUxFX09QQ19NVUxMTFNBX1VVLAorICBUSUxFX09QQ19NVUxMTF9TUywgVElMRV9PUENfTVVMTExfU1UsIFRJTEVfT1BDX01VTExMX1VVLCBUSUxFX09QQ19NVk5aLAorICBUSUxFX09QQ19NVlosIFRJTEVfT1BDX01aQiwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDU2NCAqLywKKyAgVElMRV9PUENfTVpILCBUSUxFX09QQ19NWiwgVElMRV9PUENfTk9SLCBDSElMRCg1ODEpLCBUSUxFX09QQ19QQUNLSEIsCisgIFRJTEVfT1BDX1BBQ0tMQiwgVElMRV9PUENfUkwsIFRJTEVfT1BDX1MxQSwgVElMRV9PUENfUzJBLCBUSUxFX09QQ19TM0EsCisgIFRJTEVfT1BDX1NBREFCX1UsIFRJTEVfT1BDX1NBREFILCBUSUxFX09QQ19TQURBSF9VLCBUSUxFX09QQ19TQURCX1UsCisgIFRJTEVfT1BDX1NBREgsIFRJTEVfT1BDX1NBREhfVSwKKyAgQklURklFTEQoMTIsIDIpIC8qIGluZGV4IDU4MSAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgQ0hJTEQoNTg2KSwKKyAgQklURklFTEQoMTQsIDIpIC8qIGluZGV4IDU4NiAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgQ0hJTEQoNTkxKSwKKyAgQklURklFTEQoMTYsIDIpIC8qIGluZGV4IDU5MSAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgVElMRV9PUENfTU9WRSwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDU5NiAqLywKKyAgVElMRV9PUENfU0VRQiwgVElMRV9PUENfU0VRSCwgVElMRV9PUENfU0VRLCBUSUxFX09QQ19TSExCLCBUSUxFX09QQ19TSExILAorICBUSUxFX09QQ19TSEwsIFRJTEVfT1BDX1NIUkIsIFRJTEVfT1BDX1NIUkgsIFRJTEVfT1BDX1NIUiwgVElMRV9PUENfU0xUQiwKKyAgVElMRV9PUENfU0xUQl9VLCBUSUxFX09QQ19TTFRFQiwgVElMRV9PUENfU0xURUJfVSwgVElMRV9PUENfU0xURUgsCisgIFRJTEVfT1BDX1NMVEVIX1UsIFRJTEVfT1BDX1NMVEUsCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA2MTMgKi8sCisgIFRJTEVfT1BDX1NMVEVfVSwgVElMRV9PUENfU0xUSCwgVElMRV9PUENfU0xUSF9VLCBUSUxFX09QQ19TTFQsCisgIFRJTEVfT1BDX1NMVF9VLCBUSUxFX09QQ19TTkVCLCBUSUxFX09QQ19TTkVILCBUSUxFX09QQ19TTkUsIFRJTEVfT1BDX1NSQUIsCisgIFRJTEVfT1BDX1NSQUgsIFRJTEVfT1BDX1NSQSwgVElMRV9PUENfU1VCQiwgVElMRV9PUENfU1VCSCwgVElMRV9PUENfU1VCLAorICBUSUxFX09QQ19YT1IsIFRJTEVfT1BDX0RXT1JEX0FMSUdOLAorICBCSVRGSUVMRCgxOCwgMykgLyogaW5kZXggNjMwICovLAorICBDSElMRCg2MzkpLCBDSElMRCg2NDIpLCBDSElMRCg2NDUpLCBDSElMRCg2NDgpLCBDSElMRCg2NTEpLCBDSElMRCg2NTQpLAorICBDSElMRCg2NTcpLCBDSElMRCg2NjApLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggNjM5ICovLAorICBUSUxFX09QQ19BRERTLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggNjQyICovLAorICBUSUxFX09QQ19TVUJTLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggNjQ1ICovLAorICBUSUxFX09QQ19BRERCU19VLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggNjQ4ICovLAorICBUSUxFX09QQ19BRERIUywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDY1MSAqLywKKyAgVElMRV9PUENfU1VCQlNfVSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDY1NCAqLywKKyAgVElMRV9PUENfU1VCSFMsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA2NTcgKi8sCisgIFRJTEVfT1BDX1BBQ0tIUywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDY2MCAqLywKKyAgVElMRV9PUENfUEFDS0JTX1UsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA2NjMgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0FEREJfU04sIFRJTEVfT1BDX0FEREhfU04sIFRJTEVfT1BDX0FERF9TTiwKKyAgVElMRV9PUENfQURJRkZCX1VfU04sIFRJTEVfT1BDX0FESUZGSF9TTiwgVElMRV9PUENfQU5EX1NOLAorICBUSUxFX09QQ19BVkdCX1VfU04sIFRJTEVfT1BDX0FWR0hfU04sIFRJTEVfT1BDX0NSQzMyXzMyX1NOLAorICBUSUxFX09QQ19DUkMzMl84X1NOLCBUSUxFX09QQ19JTlRIQl9TTiwgVElMRV9PUENfSU5USEhfU04sCisgIFRJTEVfT1BDX0lOVExCX1NOLCBUSUxFX09QQ19JTlRMSF9TTiwgVElMRV9PUENfTUFYQl9VX1NOLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNjgwICovLAorICBUSUxFX09QQ19NQVhIX1NOLCBUSUxFX09QQ19NSU5CX1VfU04sIFRJTEVfT1BDX01JTkhfU04sIFRJTEVfT1BDX01OWkJfU04sCisgIFRJTEVfT1BDX01OWkhfU04sIFRJTEVfT1BDX01OWl9TTiwgVElMRV9PUENfTVVMSEhBX1NTX1NOLAorICBUSUxFX09QQ19NVUxISEFfU1VfU04sIFRJTEVfT1BDX01VTEhIQV9VVV9TTiwgVElMRV9PUENfTVVMSEhTQV9VVV9TTiwKKyAgVElMRV9PUENfTVVMSEhfU1NfU04sIFRJTEVfT1BDX01VTEhIX1NVX1NOLCBUSUxFX09QQ19NVUxISF9VVV9TTiwKKyAgVElMRV9PUENfTVVMSExBX1NTX1NOLCBUSUxFX09QQ19NVUxITEFfU1VfU04sIFRJTEVfT1BDX01VTEhMQV9VU19TTiwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDY5NyAqLywKKyAgVElMRV9PUENfTVVMSExBX1VVX1NOLCBUSUxFX09QQ19NVUxITFNBX1VVX1NOLCBUSUxFX09QQ19NVUxITF9TU19TTiwKKyAgVElMRV9PUENfTVVMSExfU1VfU04sIFRJTEVfT1BDX01VTEhMX1VTX1NOLCBUSUxFX09QQ19NVUxITF9VVV9TTiwKKyAgVElMRV9PUENfTVVMTExBX1NTX1NOLCBUSUxFX09QQ19NVUxMTEFfU1VfU04sIFRJTEVfT1BDX01VTExMQV9VVV9TTiwKKyAgVElMRV9PUENfTVVMTExTQV9VVV9TTiwgVElMRV9PUENfTVVMTExfU1NfU04sIFRJTEVfT1BDX01VTExMX1NVX1NOLAorICBUSUxFX09QQ19NVUxMTF9VVV9TTiwgVElMRV9PUENfTVZOWl9TTiwgVElMRV9PUENfTVZaX1NOLCBUSUxFX09QQ19NWkJfU04sCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA3MTQgKi8sCisgIFRJTEVfT1BDX01aSF9TTiwgVElMRV9PUENfTVpfU04sIFRJTEVfT1BDX05PUl9TTiwgQ0hJTEQoNzMxKSwKKyAgVElMRV9PUENfUEFDS0hCX1NOLCBUSUxFX09QQ19QQUNLTEJfU04sIFRJTEVfT1BDX1JMX1NOLCBUSUxFX09QQ19TMUFfU04sCisgIFRJTEVfT1BDX1MyQV9TTiwgVElMRV9PUENfUzNBX1NOLCBUSUxFX09QQ19TQURBQl9VX1NOLCBUSUxFX09QQ19TQURBSF9TTiwKKyAgVElMRV9PUENfU0FEQUhfVV9TTiwgVElMRV9PUENfU0FEQl9VX1NOLCBUSUxFX09QQ19TQURIX1NOLAorICBUSUxFX09QQ19TQURIX1VfU04sCisgIEJJVEZJRUxEKDEyLCAyKSAvKiBpbmRleCA3MzEgKi8sCisgIFRJTEVfT1BDX09SX1NOLCBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIENISUxEKDczNiksCisgIEJJVEZJRUxEKDE0LCAyKSAvKiBpbmRleCA3MzYgKi8sCisgIFRJTEVfT1BDX09SX1NOLCBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIENISUxEKDc0MSksCisgIEJJVEZJRUxEKDE2LCAyKSAvKiBpbmRleCA3NDEgKi8sCisgIFRJTEVfT1BDX09SX1NOLCBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIFRJTEVfT1BDX01PVkVfU04sCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA3NDYgKi8sCisgIFRJTEVfT1BDX1NFUUJfU04sIFRJTEVfT1BDX1NFUUhfU04sIFRJTEVfT1BDX1NFUV9TTiwgVElMRV9PUENfU0hMQl9TTiwKKyAgVElMRV9PUENfU0hMSF9TTiwgVElMRV9PUENfU0hMX1NOLCBUSUxFX09QQ19TSFJCX1NOLCBUSUxFX09QQ19TSFJIX1NOLAorICBUSUxFX09QQ19TSFJfU04sIFRJTEVfT1BDX1NMVEJfU04sIFRJTEVfT1BDX1NMVEJfVV9TTiwgVElMRV9PUENfU0xURUJfU04sCisgIFRJTEVfT1BDX1NMVEVCX1VfU04sIFRJTEVfT1BDX1NMVEVIX1NOLCBUSUxFX09QQ19TTFRFSF9VX1NOLAorICBUSUxFX09QQ19TTFRFX1NOLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNzYzICovLAorICBUSUxFX09QQ19TTFRFX1VfU04sIFRJTEVfT1BDX1NMVEhfU04sIFRJTEVfT1BDX1NMVEhfVV9TTiwgVElMRV9PUENfU0xUX1NOLAorICBUSUxFX09QQ19TTFRfVV9TTiwgVElMRV9PUENfU05FQl9TTiwgVElMRV9PUENfU05FSF9TTiwgVElMRV9PUENfU05FX1NOLAorICBUSUxFX09QQ19TUkFCX1NOLCBUSUxFX09QQ19TUkFIX1NOLCBUSUxFX09QQ19TUkFfU04sIFRJTEVfT1BDX1NVQkJfU04sCisgIFRJTEVfT1BDX1NVQkhfU04sIFRJTEVfT1BDX1NVQl9TTiwgVElMRV9PUENfWE9SX1NOLCBUSUxFX09QQ19EV09SRF9BTElHTl9TTiwKKyAgQklURklFTEQoMTgsIDMpIC8qIGluZGV4IDc4MCAqLywKKyAgQ0hJTEQoNzg5KSwgQ0hJTEQoNzkyKSwgQ0hJTEQoNzk1KSwgQ0hJTEQoNzk4KSwgQ0hJTEQoODAxKSwgQ0hJTEQoODA0KSwKKyAgQ0hJTEQoODA3KSwgQ0hJTEQoODEwKSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDc4OSAqLywKKyAgVElMRV9PUENfQUREU19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDc5MiAqLywKKyAgVElMRV9PUENfU1VCU19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDc5NSAqLywKKyAgVElMRV9PUENfQUREQlNfVV9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDc5OCAqLywKKyAgVElMRV9PUENfQURESFNfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4MDEgKi8sCisgIFRJTEVfT1BDX1NVQkJTX1VfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4MDQgKi8sCisgIFRJTEVfT1BDX1NVQkhTX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggODA3ICovLAorICBUSUxFX09QQ19QQUNLSFNfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4MTAgKi8sCisgIFRJTEVfT1BDX1BBQ0tCU19VX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg2LCAyKSAvKiBpbmRleCA4MTMgKi8sCisgIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgVElMRV9PUENfQURETElfU04sIENISUxEKDgxOCksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDgxOCAqLywKKyAgVElMRV9PUENfQURETElfU04sIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgQ0hJTEQoODIzKSwKKyAgQklURklFTEQoMTAsIDIpIC8qIGluZGV4IDgyMyAqLywKKyAgVElMRV9PUENfQURETElfU04sIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgVElMRV9PUENfTU9WRUxJX1NOLAorICBCSVRGSUVMRCg2LCAyKSAvKiBpbmRleCA4MjggKi8sCisgIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgVElMRV9PUENfQURETEksIENISUxEKDgzMyksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDgzMyAqLywKKyAgVElMRV9PUENfQURETEksIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgQ0hJTEQoODM4KSwKKyAgQklURklFTEQoMTAsIDIpIC8qIGluZGV4IDgzOCAqLywKKyAgVElMRV9PUENfQURETEksIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgVElMRV9PUENfTU9WRUxJLAorICBCSVRGSUVMRCgwLCAyKSAvKiBpbmRleCA4NDMgKi8sCisgIFRJTEVfT1BDX0FVTEksIFRJTEVfT1BDX0FVTEksIFRJTEVfT1BDX0FVTEksIENISUxEKDg0OCksCisgIEJJVEZJRUxEKDIsIDIpIC8qIGluZGV4IDg0OCAqLywKKyAgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgQ0hJTEQoODUzKSwKKyAgQklURklFTEQoNCwgMikgLyogaW5kZXggODUzICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4NTgpLAorICBCSVRGSUVMRCg2LCAyKSAvKiBpbmRleCA4NTggKi8sCisgIFRJTEVfT1BDX0FVTEksIFRJTEVfT1BDX0FVTEksIFRJTEVfT1BDX0FVTEksIENISUxEKDg2MyksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDg2MyAqLywKKyAgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgQ0hJTEQoODY4KSwKKyAgQklURklFTEQoMTAsIDIpIC8qIGluZGV4IDg2OCAqLywKKyAgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgVElMRV9PUENfQVVMSSwgVElMRV9PUENfSU5GT0wsCisgIEJJVEZJRUxEKDIwLCAyKSAvKiBpbmRleCA4NzMgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0FERElCLCBUSUxFX09QQ19BRERJSCwgVElMRV9PUENfQURESSwKKyAgQklURklFTEQoMjAsIDIpIC8qIGluZGV4IDg3OCAqLywKKyAgVElMRV9PUENfTUFYSUJfVSwgVElMRV9PUENfTUFYSUgsIFRJTEVfT1BDX01JTklCX1UsIFRJTEVfT1BDX01JTklILAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggODgzICovLAorICBDSElMRCg4ODgpLCBUSUxFX09QQ19TRVFJQiwgVElMRV9PUENfU0VRSUgsIFRJTEVfT1BDX1NFUUksCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDg4OCAqLywKKyAgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgQ0hJTEQoODkzKSwKKyAgQklURklFTEQoOCwgMikgLyogaW5kZXggODkzICovLAorICBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBDSElMRCg4OTgpLAorICBCSVRGSUVMRCgxMCwgMikgLyogaW5kZXggODk4ICovLAorICBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19NT1ZFSSwKKyAgQklURklFTEQoMjAsIDIpIC8qIGluZGV4IDkwMyAqLywKKyAgVElMRV9PUENfU0xUSUIsIFRJTEVfT1BDX1NMVElCX1UsIFRJTEVfT1BDX1NMVElILCBUSUxFX09QQ19TTFRJSF9VLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggOTA4ICovLAorICBUSUxFX09QQ19TTFRJLCBUSUxFX09QQ19TTFRJX1UsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIwLCAyKSAvKiBpbmRleCA5MTMgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0FERElCX1NOLCBUSUxFX09QQ19BRERJSF9TTiwgVElMRV9PUENfQURESV9TTiwKKyAgQklURklFTEQoMjAsIDIpIC8qIGluZGV4IDkxOCAqLywKKyAgVElMRV9PUENfTUFYSUJfVV9TTiwgVElMRV9PUENfTUFYSUhfU04sIFRJTEVfT1BDX01JTklCX1VfU04sCisgIFRJTEVfT1BDX01JTklIX1NOLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggOTIzICovLAorICBDSElMRCg5MjgpLCBUSUxFX09QQ19TRVFJQl9TTiwgVElMRV9PUENfU0VRSUhfU04sIFRJTEVfT1BDX1NFUUlfU04sCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDkyOCAqLywKKyAgVElMRV9PUENfT1JJX1NOLCBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgQ0hJTEQoOTMzKSwKKyAgQklURklFTEQoOCwgMikgLyogaW5kZXggOTMzICovLAorICBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgVElMRV9PUENfT1JJX1NOLCBDSElMRCg5MzgpLAorICBCSVRGSUVMRCgxMCwgMikgLyogaW5kZXggOTM4ICovLAorICBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgVElMRV9PUENfT1JJX1NOLCBUSUxFX09QQ19NT1ZFSV9TTiwKKyAgQklURklFTEQoMjAsIDIpIC8qIGluZGV4IDk0MyAqLywKKyAgVElMRV9PUENfU0xUSUJfU04sIFRJTEVfT1BDX1NMVElCX1VfU04sIFRJTEVfT1BDX1NMVElIX1NOLAorICBUSUxFX09QQ19TTFRJSF9VX1NOLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggOTQ4ICovLAorICBUSUxFX09QQ19TTFRJX1NOLCBUSUxFX09QQ19TTFRJX1VfU04sIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIwLCAyKSAvKiBpbmRleCA5NTMgKi8sCisgIFRJTEVfT1BDX05PTkUsIENISUxEKDk1OCksIFRJTEVfT1BDX1hPUkksIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDAsIDIpIC8qIGluZGV4IDk1OCAqLywKKyAgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgQ0hJTEQoOTYzKSwKKyAgQklURklFTEQoMiwgMikgLyogaW5kZXggOTYzICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg5NjgpLAorICBCSVRGSUVMRCg0LCAyKSAvKiBpbmRleCA5NjggKi8sCisgIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIENISUxEKDk3MyksCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDk3MyAqLywKKyAgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgQ0hJTEQoOTc4KSwKKyAgQklURklFTEQoOCwgMikgLyogaW5kZXggOTc4ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg5ODMpLAorICBCSVRGSUVMRCgxMCwgMikgLyogaW5kZXggOTgzICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19JTkZPLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggOTg4ICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19BTkRJX1NOLCBUSUxFX09QQ19YT1JJX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNywgNSkgLyogaW5kZXggOTkzICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19STEksIFRJTEVfT1BDX1NITElCLCBUSUxFX09QQ19TSExJSCwgVElMRV9PUENfU0hMSSwKKyAgVElMRV9PUENfU0hSSUIsIFRJTEVfT1BDX1NIUklILCBUSUxFX09QQ19TSFJJLCBUSUxFX09QQ19TUkFJQiwKKyAgVElMRV9PUENfU1JBSUgsIFRJTEVfT1BDX1NSQUksIENISUxEKDEwMjYpLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxMiwgNCkgLyogaW5kZXggMTAyNiAqLywKKyAgVElMRV9PUENfTk9ORSwgQ0hJTEQoMTA0MyksIENISUxEKDEwNDYpLCBDSElMRCgxMDQ5KSwgQ0hJTEQoMTA1MiksCisgIENISUxEKDEwNTUpLCBDSElMRCgxMDU4KSwgQ0hJTEQoMTA2MSksIENISUxEKDEwNjQpLCBDSElMRCgxMDY3KSwKKyAgQ0hJTEQoMTA3MCksIENISUxEKDEwNzMpLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTA0MyAqLywKKyAgVElMRV9PUENfQklUWCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDEpIC8qIGluZGV4IDEwNDYgKi8sCisgIFRJTEVfT1BDX0JZVEVYLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTA0OSAqLywKKyAgVElMRV9PUENfQ0xaLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTA1MiAqLywKKyAgVElMRV9PUENfQ1RaLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTA1NSAqLywKKyAgVElMRV9PUENfRk5PUCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDEpIC8qIGluZGV4IDEwNTggKi8sCisgIFRJTEVfT1BDX05PUCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDEpIC8qIGluZGV4IDEwNjEgKi8sCisgIFRJTEVfT1BDX1BDTlQsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMDY0ICovLAorICBUSUxFX09QQ19UQkxJRFhCMCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDEpIC8qIGluZGV4IDEwNjcgKi8sCisgIFRJTEVfT1BDX1RCTElEWEIxLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTA3MCAqLywKKyAgVElMRV9PUENfVEJMSURYQjIsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMDczICovLAorICBUSUxFX09QQ19UQkxJRFhCMywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTcsIDUpIC8qIGluZGV4IDEwNzYgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX1JMSV9TTiwgVElMRV9PUENfU0hMSUJfU04sIFRJTEVfT1BDX1NITElIX1NOLAorICBUSUxFX09QQ19TSExJX1NOLCBUSUxFX09QQ19TSFJJQl9TTiwgVElMRV9PUENfU0hSSUhfU04sIFRJTEVfT1BDX1NIUklfU04sCisgIFRJTEVfT1BDX1NSQUlCX1NOLCBUSUxFX09QQ19TUkFJSF9TTiwgVElMRV9PUENfU1JBSV9TTiwgQ0hJTEQoMTEwOSksCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDEyLCA0KSAvKiBpbmRleCAxMTA5ICovLAorICBUSUxFX09QQ19OT05FLCBDSElMRCgxMTI2KSwgQ0hJTEQoMTEyOSksIENISUxEKDExMzIpLCBDSElMRCgxMTM1KSwKKyAgQ0hJTEQoMTA1NSksIENISUxEKDEwNTgpLCBDSElMRCgxMTM4KSwgQ0hJTEQoMTE0MSksIENISUxEKDExNDQpLAorICBDSElMRCgxMTQ3KSwgQ0hJTEQoMTE1MCksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMTI2ICovLAorICBUSUxFX09QQ19CSVRYX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTEyOSAqLywKKyAgVElMRV9PUENfQllURVhfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMTMyICovLAorICBUSUxFX09QQ19DTFpfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMTM1ICovLAorICBUSUxFX09QQ19DVFpfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMTM4ICovLAorICBUSUxFX09QQ19QQ05UX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTE0MSAqLywKKyAgVElMRV9PUENfVEJMSURYQjBfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAxKSAvKiBpbmRleCAxMTQ0ICovLAorICBUSUxFX09QQ19UQkxJRFhCMV9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDEpIC8qIGluZGV4IDExNDcgKi8sCisgIFRJTEVfT1BDX1RCTElEWEIyX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMSkgLyogaW5kZXggMTE1MCAqLywKKyAgVElMRV9PUENfVEJMSURYQjNfU04sIFRJTEVfT1BDX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVjb2RlX1gxX2ZzbVsxNTQwXSA9Cit7CisgIEJJVEZJRUxEKDU0LCA5KSAvKiBpbmRleCAwICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBDSElMRCg1MTMpLCBDSElMRCg1NjEpLCBDSElMRCg1OTQpLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBDSElMRCg2NDEpLCBDSElMRCg2ODkpLAorICBDSElMRCg3MjIpLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLCBDSElMRCg3NjYpLAorICBDSElMRCg3NjYpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLAorICBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLAorICBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLAorICBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLAorICBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLAorICBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3ODEpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLAorICBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLAorICBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLAorICBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLAorICBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLAorICBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg3OTYpLCBDSElMRCg4MjYpLAorICBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLAorICBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLAorICBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4MjYpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLAorICBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLAorICBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLCBDSElMRCg4NDMpLAorICBDSElMRCg4NDMpLCBDSElMRCg4NjApLCBDSElMRCg4OTkpLCBDSElMRCg5MjMpLCBDSElMRCg5MzIpLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBDSElMRCg5NDEpLCBDSElMRCg5NTApLCBDSElMRCg5NzQpLCBDSElMRCg5ODMpLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLAorICBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sCisgIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwKKyAgVElMRV9PUENfTU0sIFRJTEVfT1BDX01NLCBUSUxFX09QQ19NTSwgVElMRV9PUENfTU0sIENISUxEKDk5MiksCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIENISUxEKDEzMzQpLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KLAorICBUSUxFX09QQ19KLCBUSUxFX09QQ19KLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwKKyAgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsCisgIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwKKyAgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsCisgIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwKKyAgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsCisgIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwKKyAgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsCisgIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLCBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX0pBTCwgVElMRV9PUENfSkFMLAorICBUSUxFX09QQ19KQUwsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQ5LCA1KSAvKiBpbmRleCA1MTMgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0FEREIsIFRJTEVfT1BDX0FEREgsIFRJTEVfT1BDX0FERCwgVElMRV9PUENfQU5ELAorICBUSUxFX09QQ19JTlRIQiwgVElMRV9PUENfSU5USEgsIFRJTEVfT1BDX0lOVExCLCBUSUxFX09QQ19JTlRMSCwKKyAgVElMRV9PUENfSkFMUlAsIFRJTEVfT1BDX0pBTFIsIFRJTEVfT1BDX0pSUCwgVElMRV9PUENfSlIsIFRJTEVfT1BDX0xOSywKKyAgVElMRV9PUENfTUFYQl9VLCBUSUxFX09QQ19NQVhILCBUSUxFX09QQ19NSU5CX1UsIFRJTEVfT1BDX01JTkgsCisgIFRJTEVfT1BDX01OWkIsIFRJTEVfT1BDX01OWkgsIFRJTEVfT1BDX01OWiwgVElMRV9PUENfTVpCLCBUSUxFX09QQ19NWkgsCisgIFRJTEVfT1BDX01aLCBUSUxFX09QQ19OT1IsIENISUxEKDU0NiksIFRJTEVfT1BDX1BBQ0tIQiwgVElMRV9PUENfUEFDS0xCLAorICBUSUxFX09QQ19STCwgVElMRV9PUENfUzFBLCBUSUxFX09QQ19TMkEsIFRJTEVfT1BDX1MzQSwKKyAgQklURklFTEQoNDMsIDIpIC8qIGluZGV4IDU0NiAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgQ0hJTEQoNTUxKSwKKyAgQklURklFTEQoNDUsIDIpIC8qIGluZGV4IDU1MSAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgQ0hJTEQoNTU2KSwKKyAgQklURklFTEQoNDcsIDIpIC8qIGluZGV4IDU1NiAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgVElMRV9PUENfTU9WRSwKKyAgQklURklFTEQoNDksIDUpIC8qIGluZGV4IDU2MSAqLywKKyAgVElMRV9PUENfU0IsIFRJTEVfT1BDX1NFUUIsIFRJTEVfT1BDX1NFUUgsIFRJTEVfT1BDX1NFUSwgVElMRV9PUENfU0hMQiwKKyAgVElMRV9PUENfU0hMSCwgVElMRV9PUENfU0hMLCBUSUxFX09QQ19TSFJCLCBUSUxFX09QQ19TSFJILCBUSUxFX09QQ19TSFIsCisgIFRJTEVfT1BDX1NILCBUSUxFX09QQ19TTFRCLCBUSUxFX09QQ19TTFRCX1UsIFRJTEVfT1BDX1NMVEVCLAorICBUSUxFX09QQ19TTFRFQl9VLCBUSUxFX09QQ19TTFRFSCwgVElMRV9PUENfU0xURUhfVSwgVElMRV9PUENfU0xURSwKKyAgVElMRV9PUENfU0xURV9VLCBUSUxFX09QQ19TTFRILCBUSUxFX09QQ19TTFRIX1UsIFRJTEVfT1BDX1NMVCwKKyAgVElMRV9PUENfU0xUX1UsIFRJTEVfT1BDX1NORUIsIFRJTEVfT1BDX1NORUgsIFRJTEVfT1BDX1NORSwgVElMRV9PUENfU1JBQiwKKyAgVElMRV9PUENfU1JBSCwgVElMRV9PUENfU1JBLCBUSUxFX09QQ19TVUJCLCBUSUxFX09QQ19TVUJILCBUSUxFX09QQ19TVUIsCisgIEJJVEZJRUxEKDQ5LCA0KSAvKiBpbmRleCA1OTQgKi8sCisgIENISUxEKDYxMSksIENISUxEKDYxNCksIENISUxEKDYxNyksIENISUxEKDYyMCksIENISUxEKDYyMyksIENISUxEKDYyNiksCisgIENISUxEKDYyOSksIENISUxEKDYzMiksIENISUxEKDYzNSksIENISUxEKDYzOCksIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA2MTEgKi8sCisgIFRJTEVfT1BDX1NXLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNjE0ICovLAorICBUSUxFX09QQ19YT1IsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA2MTcgKi8sCisgIFRJTEVfT1BDX0FERFMsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA2MjAgKi8sCisgIFRJTEVfT1BDX1NVQlMsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA2MjMgKi8sCisgIFRJTEVfT1BDX0FEREJTX1UsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA2MjYgKi8sCisgIFRJTEVfT1BDX0FEREhTLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNjI5ICovLAorICBUSUxFX09QQ19TVUJCU19VLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNjMyICovLAorICBUSUxFX09QQ19TVUJIUywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDYzNSAqLywKKyAgVElMRV9PUENfUEFDS0hTLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNjM4ICovLAorICBUSUxFX09QQ19QQUNLQlNfVSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDksIDUpIC8qIGluZGV4IDY0MSAqLywKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfQUREQl9TTiwgVElMRV9PUENfQURESF9TTiwgVElMRV9PUENfQUREX1NOLAorICBUSUxFX09QQ19BTkRfU04sIFRJTEVfT1BDX0lOVEhCX1NOLCBUSUxFX09QQ19JTlRISF9TTiwgVElMRV9PUENfSU5UTEJfU04sCisgIFRJTEVfT1BDX0lOVExIX1NOLCBUSUxFX09QQ19KQUxSUCwgVElMRV9PUENfSkFMUiwgVElMRV9PUENfSlJQLCBUSUxFX09QQ19KUiwKKyAgVElMRV9PUENfTE5LX1NOLCBUSUxFX09QQ19NQVhCX1VfU04sIFRJTEVfT1BDX01BWEhfU04sIFRJTEVfT1BDX01JTkJfVV9TTiwKKyAgVElMRV9PUENfTUlOSF9TTiwgVElMRV9PUENfTU5aQl9TTiwgVElMRV9PUENfTU5aSF9TTiwgVElMRV9PUENfTU5aX1NOLAorICBUSUxFX09QQ19NWkJfU04sIFRJTEVfT1BDX01aSF9TTiwgVElMRV9PUENfTVpfU04sIFRJTEVfT1BDX05PUl9TTiwKKyAgQ0hJTEQoNjc0KSwgVElMRV9PUENfUEFDS0hCX1NOLCBUSUxFX09QQ19QQUNLTEJfU04sIFRJTEVfT1BDX1JMX1NOLAorICBUSUxFX09QQ19TMUFfU04sIFRJTEVfT1BDX1MyQV9TTiwgVElMRV9PUENfUzNBX1NOLAorICBCSVRGSUVMRCg0MywgMikgLyogaW5kZXggNjc0ICovLAorICBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIFRJTEVfT1BDX09SX1NOLCBDSElMRCg2NzkpLAorICBCSVRGSUVMRCg0NSwgMikgLyogaW5kZXggNjc5ICovLAorICBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIFRJTEVfT1BDX09SX1NOLCBDSElMRCg2ODQpLAorICBCSVRGSUVMRCg0NywgMikgLyogaW5kZXggNjg0ICovLAorICBUSUxFX09QQ19PUl9TTiwgVElMRV9PUENfT1JfU04sIFRJTEVfT1BDX09SX1NOLCBUSUxFX09QQ19NT1ZFX1NOLAorICBCSVRGSUVMRCg0OSwgNSkgLyogaW5kZXggNjg5ICovLAorICBUSUxFX09QQ19TQiwgVElMRV9PUENfU0VRQl9TTiwgVElMRV9PUENfU0VRSF9TTiwgVElMRV9PUENfU0VRX1NOLAorICBUSUxFX09QQ19TSExCX1NOLCBUSUxFX09QQ19TSExIX1NOLCBUSUxFX09QQ19TSExfU04sIFRJTEVfT1BDX1NIUkJfU04sCisgIFRJTEVfT1BDX1NIUkhfU04sIFRJTEVfT1BDX1NIUl9TTiwgVElMRV9PUENfU0gsIFRJTEVfT1BDX1NMVEJfU04sCisgIFRJTEVfT1BDX1NMVEJfVV9TTiwgVElMRV9PUENfU0xURUJfU04sIFRJTEVfT1BDX1NMVEVCX1VfU04sCisgIFRJTEVfT1BDX1NMVEVIX1NOLCBUSUxFX09QQ19TTFRFSF9VX1NOLCBUSUxFX09QQ19TTFRFX1NOLAorICBUSUxFX09QQ19TTFRFX1VfU04sIFRJTEVfT1BDX1NMVEhfU04sIFRJTEVfT1BDX1NMVEhfVV9TTiwgVElMRV9PUENfU0xUX1NOLAorICBUSUxFX09QQ19TTFRfVV9TTiwgVElMRV9PUENfU05FQl9TTiwgVElMRV9PUENfU05FSF9TTiwgVElMRV9PUENfU05FX1NOLAorICBUSUxFX09QQ19TUkFCX1NOLCBUSUxFX09QQ19TUkFIX1NOLCBUSUxFX09QQ19TUkFfU04sIFRJTEVfT1BDX1NVQkJfU04sCisgIFRJTEVfT1BDX1NVQkhfU04sIFRJTEVfT1BDX1NVQl9TTiwKKyAgQklURklFTEQoNDksIDQpIC8qIGluZGV4IDcyMiAqLywKKyAgQ0hJTEQoNjExKSwgQ0hJTEQoNzM5KSwgQ0hJTEQoNzQyKSwgQ0hJTEQoNzQ1KSwgQ0hJTEQoNzQ4KSwgQ0hJTEQoNzUxKSwKKyAgQ0hJTEQoNzU0KSwgQ0hJTEQoNzU3KSwgQ0hJTEQoNzYwKSwgQ0hJTEQoNzYzKSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDczOSAqLywKKyAgVElMRV9PUENfWE9SX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNzQyICovLAorICBUSUxFX09QQ19BRERTX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNzQ1ICovLAorICBUSUxFX09QQ19TVUJTX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNzQ4ICovLAorICBUSUxFX09QQ19BRERCU19VX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggNzUxICovLAorICBUSUxFX09QQ19BRERIU19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDc1NCAqLywKKyAgVElMRV9PUENfU1VCQlNfVV9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDc1NyAqLywKKyAgVElMRV9PUENfU1VCSFNfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCA3NjAgKi8sCisgIFRJTEVfT1BDX1BBQ0tIU19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDc2MyAqLywKKyAgVElMRV9PUENfUEFDS0JTX1VfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA3NjYgKi8sCisgIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgVElMRV9PUENfQURETElfU04sIENISUxEKDc3MSksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA3NzEgKi8sCisgIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgVElMRV9PUENfQURETElfU04sIENISUxEKDc3NiksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA3NzYgKi8sCisgIFRJTEVfT1BDX0FERExJX1NOLCBUSUxFX09QQ19BRERMSV9TTiwgVElMRV9PUENfQURETElfU04sIFRJTEVfT1BDX01PVkVMSV9TTiwKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDc4MSAqLywKKyAgVElMRV9PUENfQURETEksIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgQ0hJTEQoNzg2KSwKKyAgQklURklFTEQoMzksIDIpIC8qIGluZGV4IDc4NiAqLywKKyAgVElMRV9PUENfQURETEksIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgQ0hJTEQoNzkxKSwKKyAgQklURklFTEQoNDEsIDIpIC8qIGluZGV4IDc5MSAqLywKKyAgVElMRV9PUENfQURETEksIFRJTEVfT1BDX0FERExJLCBUSUxFX09QQ19BRERMSSwgVElMRV9PUENfTU9WRUxJLAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggNzk2ICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4MDEpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggODAxICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4MDYpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggODA2ICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4MTEpLAorICBCSVRGSUVMRCgzNywgMikgLyogaW5kZXggODExICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4MTYpLAorICBCSVRGSUVMRCgzOSwgMikgLyogaW5kZXggODE2ICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBDSElMRCg4MjEpLAorICBCSVRGSUVMRCg0MSwgMikgLyogaW5kZXggODIxICovLAorICBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19BVUxJLCBUSUxFX09QQ19JTkZPTCwKKyAgQklURklFTEQoMzEsIDQpIC8qIGluZGV4IDgyNiAqLywKKyAgVElMRV9PUENfQlosIFRJTEVfT1BDX0JaVCwgVElMRV9PUENfQk5aLCBUSUxFX09QQ19CTlpULCBUSUxFX09QQ19CR1osCisgIFRJTEVfT1BDX0JHWlQsIFRJTEVfT1BDX0JHRVosIFRJTEVfT1BDX0JHRVpULCBUSUxFX09QQ19CTFosIFRJTEVfT1BDX0JMWlQsCisgIFRJTEVfT1BDX0JMRVosIFRJTEVfT1BDX0JMRVpULCBUSUxFX09QQ19CQlMsIFRJTEVfT1BDX0JCU1QsIFRJTEVfT1BDX0JCTlMsCisgIFRJTEVfT1BDX0JCTlNULAorICBCSVRGSUVMRCgzMSwgNCkgLyogaW5kZXggODQzICovLAorICBUSUxFX09QQ19CWl9TTiwgVElMRV9PUENfQlpUX1NOLCBUSUxFX09QQ19CTlpfU04sIFRJTEVfT1BDX0JOWlRfU04sCisgIFRJTEVfT1BDX0JHWl9TTiwgVElMRV9PUENfQkdaVF9TTiwgVElMRV9PUENfQkdFWl9TTiwgVElMRV9PUENfQkdFWlRfU04sCisgIFRJTEVfT1BDX0JMWl9TTiwgVElMRV9PUENfQkxaVF9TTiwgVElMRV9PUENfQkxFWl9TTiwgVElMRV9PUENfQkxFWlRfU04sCisgIFRJTEVfT1BDX0JCU19TTiwgVElMRV9PUENfQkJTVF9TTiwgVElMRV9PUENfQkJOU19TTiwgVElMRV9PUENfQkJOU1RfU04sCisgIEJJVEZJRUxEKDUxLCAzKSAvKiBpbmRleCA4NjAgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0FERElCLCBUSUxFX09QQ19BRERJSCwgVElMRV9PUENfQURESSwgQ0hJTEQoODY5KSwKKyAgVElMRV9PUENfTUFYSUJfVSwgVElMRV9PUENfTUFYSUgsIFRJTEVfT1BDX01GU1BSLAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggODY5ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4NzQpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggODc0ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4NzkpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggODc5ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4ODQpLAorICBCSVRGSUVMRCgzNywgMikgLyogaW5kZXggODg0ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4ODkpLAorICBCSVRGSUVMRCgzOSwgMikgLyogaW5kZXggODg5ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4OTQpLAorICBCSVRGSUVMRCg0MSwgMikgLyogaW5kZXggODk0ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19JTkZPLAorICBCSVRGSUVMRCg1MSwgMykgLyogaW5kZXggODk5ICovLAorICBUSUxFX09QQ19NSU5JQl9VLCBUSUxFX09QQ19NSU5JSCwgVElMRV9PUENfTVRTUFIsIENISUxEKDkwOCksCisgIFRJTEVfT1BDX1NFUUlCLCBUSUxFX09QQ19TRVFJSCwgVElMRV9PUENfU0VRSSwgVElMRV9PUENfU0xUSUIsCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA5MDggKi8sCisgIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIENISUxEKDkxMyksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA5MTMgKi8sCisgIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIENISUxEKDkxOCksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA5MTggKi8sCisgIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIFRJTEVfT1BDX01PVkVJLAorICBCSVRGSUVMRCg1MSwgMykgLyogaW5kZXggOTIzICovLAorICBUSUxFX09QQ19TTFRJQl9VLCBUSUxFX09QQ19TTFRJSCwgVElMRV9PUENfU0xUSUhfVSwgVElMRV9PUENfU0xUSSwKKyAgVElMRV9PUENfU0xUSV9VLCBUSUxFX09QQ19YT1JJLCBUSUxFX09QQ19MQkFERCwgVElMRV9PUENfTEJBRERfVSwKKyAgQklURklFTEQoNTEsIDMpIC8qIGluZGV4IDkzMiAqLywKKyAgVElMRV9PUENfTEhBREQsIFRJTEVfT1BDX0xIQUREX1UsIFRJTEVfT1BDX0xXQURELCBUSUxFX09QQ19MV0FERF9OQSwKKyAgVElMRV9PUENfU0JBREQsIFRJTEVfT1BDX1NIQURELCBUSUxFX09QQ19TV0FERCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTEsIDMpIC8qIGluZGV4IDk0MSAqLywKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfQURESUJfU04sIFRJTEVfT1BDX0FERElIX1NOLCBUSUxFX09QQ19BRERJX1NOLAorICBUSUxFX09QQ19BTkRJX1NOLCBUSUxFX09QQ19NQVhJQl9VX1NOLCBUSUxFX09QQ19NQVhJSF9TTiwgVElMRV9PUENfTUZTUFIsCisgIEJJVEZJRUxEKDUxLCAzKSAvKiBpbmRleCA5NTAgKi8sCisgIFRJTEVfT1BDX01JTklCX1VfU04sIFRJTEVfT1BDX01JTklIX1NOLCBUSUxFX09QQ19NVFNQUiwgQ0hJTEQoOTU5KSwKKyAgVElMRV9PUENfU0VRSUJfU04sIFRJTEVfT1BDX1NFUUlIX1NOLCBUSUxFX09QQ19TRVFJX1NOLCBUSUxFX09QQ19TTFRJQl9TTiwKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDk1OSAqLywKKyAgVElMRV9PUENfT1JJX1NOLCBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgQ0hJTEQoOTY0KSwKKyAgQklURklFTEQoMzksIDIpIC8qIGluZGV4IDk2NCAqLywKKyAgVElMRV9PUENfT1JJX1NOLCBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgQ0hJTEQoOTY5KSwKKyAgQklURklFTEQoNDEsIDIpIC8qIGluZGV4IDk2OSAqLywKKyAgVElMRV9PUENfT1JJX1NOLCBUSUxFX09QQ19PUklfU04sIFRJTEVfT1BDX09SSV9TTiwgVElMRV9PUENfTU9WRUlfU04sCisgIEJJVEZJRUxEKDUxLCAzKSAvKiBpbmRleCA5NzQgKi8sCisgIFRJTEVfT1BDX1NMVElCX1VfU04sIFRJTEVfT1BDX1NMVElIX1NOLCBUSUxFX09QQ19TTFRJSF9VX1NOLAorICBUSUxFX09QQ19TTFRJX1NOLCBUSUxFX09QQ19TTFRJX1VfU04sIFRJTEVfT1BDX1hPUklfU04sIFRJTEVfT1BDX0xCQUREX1NOLAorICBUSUxFX09QQ19MQkFERF9VX1NOLAorICBCSVRGSUVMRCg1MSwgMykgLyogaW5kZXggOTgzICovLAorICBUSUxFX09QQ19MSEFERF9TTiwgVElMRV9PUENfTEhBRERfVV9TTiwgVElMRV9PUENfTFdBRERfU04sCisgIFRJTEVfT1BDX0xXQUREX05BX1NOLCBUSUxFX09QQ19TQkFERCwgVElMRV9PUENfU0hBREQsIFRJTEVfT1BDX1NXQURELAorICBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg0NiwgNykgLyogaW5kZXggOTkyICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBDSElMRCgxMTIxKSwKKyAgQ0hJTEQoMTEyMSksIENISUxEKDExMjEpLCBDSElMRCgxMTIxKSwgQ0hJTEQoMTEyNCksIENISUxEKDExMjQpLAorICBDSElMRCgxMTI0KSwgQ0hJTEQoMTEyNCksIENISUxEKDExMjcpLCBDSElMRCgxMTI3KSwgQ0hJTEQoMTEyNyksCisgIENISUxEKDExMjcpLCBDSElMRCgxMTMwKSwgQ0hJTEQoMTEzMCksIENISUxEKDExMzApLCBDSElMRCgxMTMwKSwKKyAgQ0hJTEQoMTEzMyksIENISUxEKDExMzMpLCBDSElMRCgxMTMzKSwgQ0hJTEQoMTEzMyksIENISUxEKDExMzYpLAorICBDSElMRCgxMTM2KSwgQ0hJTEQoMTEzNiksIENISUxEKDExMzYpLCBDSElMRCgxMTM5KSwgQ0hJTEQoMTEzOSksCisgIENISUxEKDExMzkpLCBDSElMRCgxMTM5KSwgQ0hJTEQoMTE0MiksIENISUxEKDExNDIpLCBDSElMRCgxMTQyKSwKKyAgQ0hJTEQoMTE0MiksIENISUxEKDExNDUpLCBDSElMRCgxMTQ1KSwgQ0hJTEQoMTE0NSksIENISUxEKDExNDUpLAorICBDSElMRCgxMTQ4KSwgQ0hJTEQoMTE0OCksIENISUxEKDExNDgpLCBDSElMRCgxMTQ4KSwgQ0hJTEQoMTE1MSksCisgIENISUxEKDEyNDIpLCBDSElMRCgxMjkwKSwgQ0hJTEQoMTMyMyksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMTIxICovLAorICBUSUxFX09QQ19STEksIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMTI0ICovLAorICBUSUxFX09QQ19TSExJQiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExMjcgKi8sCisgIFRJTEVfT1BDX1NITElILCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTEzMCAqLywKKyAgVElMRV9PUENfU0hMSSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExMzMgKi8sCisgIFRJTEVfT1BDX1NIUklCLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTEzNiAqLywKKyAgVElMRV9PUENfU0hSSUgsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMTM5ICovLAorICBUSUxFX09QQ19TSFJJLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTE0MiAqLywKKyAgVElMRV9PUENfU1JBSUIsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMTQ1ICovLAorICBUSUxFX09QQ19TUkFJSCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExNDggKi8sCisgIFRJTEVfT1BDX1NSQUksIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCAxMTUxICovLAorICBUSUxFX09QQ19OT05FLCBDSElMRCgxMTYwKSwgQ0hJTEQoMTE2MyksIENISUxEKDExNjYpLCBDSElMRCgxMTY5KSwKKyAgQ0hJTEQoMTE3MiksIENISUxEKDExNzUpLCBDSElMRCgxMTc4KSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExNjAgKi8sCisgIFRJTEVfT1BDX0RSQUlOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTE2MyAqLywKKyAgVElMRV9PUENfRFRMQlBSLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTE2NiAqLywKKyAgVElMRV9PUENfRklOViwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExNjkgKi8sCisgIFRJTEVfT1BDX0ZMVVNILCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTE3MiAqLywKKyAgVElMRV9PUENfRk5PUCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExNzUgKi8sCisgIFRJTEVfT1BDX0lDT0gsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAxMTc4ICovLAorICBDSElMRCgxMTgzKSwgQ0hJTEQoMTIxMSksIENISUxEKDEyMzkpLCBDSElMRCgxMjM5KSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDExODMgKi8sCisgIENISUxEKDExODYpLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggMTE4NiAqLywKKyAgVElMRV9PUENfSUxMLCBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX0lMTCwgQ0hJTEQoMTE5MSksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCAxMTkxICovLAorICBUSUxFX09QQ19JTEwsIENISUxEKDExOTYpLCBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX0lMTCwKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDExOTYgKi8sCisgIFRJTEVfT1BDX0lMTCwgQ0hJTEQoMTIwMSksIFRJTEVfT1BDX0lMTCwgVElMRV9PUENfSUxMLAorICBCSVRGSUVMRCgzOSwgMikgLyogaW5kZXggMTIwMSAqLywKKyAgVElMRV9PUENfSUxMLCBDSElMRCgxMjA2KSwgVElMRV9PUENfSUxMLCBUSUxFX09QQ19JTEwsCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCAxMjA2ICovLAorICBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX0lMTCwgVElMRV9PUENfQlBULCBUSUxFX09QQ19JTEwsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjExICovLAorICBDSElMRCgxMjE0KSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDEyMTQgKi8sCisgIFRJTEVfT1BDX0lMTCwgVElMRV9PUENfSUxMLCBUSUxFX09QQ19JTEwsIENISUxEKDEyMTkpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTIxOSAqLywKKyAgVElMRV9PUENfSUxMLCBDSElMRCgxMjI0KSwgVElMRV9PUENfSUxMLCBUSUxFX09QQ19JTEwsCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCAxMjI0ICovLAorICBUSUxFX09QQ19JTEwsIENISUxEKDEyMjkpLCBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX0lMTCwKKyAgQklURklFTEQoMzksIDIpIC8qIGluZGV4IDEyMjkgKi8sCisgIFRJTEVfT1BDX0lMTCwgQ0hJTEQoMTIzNCksIFRJTEVfT1BDX0lMTCwgVElMRV9PUENfSUxMLAorICBCSVRGSUVMRCg0MSwgMikgLyogaW5kZXggMTIzNCAqLywKKyAgVElMRV9PUENfSUxMLCBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX1JBSVNFLCBUSUxFX09QQ19JTEwsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjM5ICovLAorICBUSUxFX09QQ19JTEwsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCAxMjQyICovLAorICBDSElMRCgxMjUxKSwgQ0hJTEQoMTI1NCksIENISUxEKDEyNTcpLCBDSElMRCgxMjc1KSwgQ0hJTEQoMTI3OCksCisgIENISUxEKDEyODEpLCBDSElMRCgxMjg0KSwgQ0hJTEQoMTI4NyksCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjUxICovLAorICBUSUxFX09QQ19JTlYsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjU0ICovLAorICBUSUxFX09QQ19JUkVULCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTI1NyAqLywKKyAgQ0hJTEQoMTI2MCksIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAxMjYwICovLAorICBUSUxFX09QQ19MQiwgVElMRV9PUENfTEIsIFRJTEVfT1BDX0xCLCBDSElMRCgxMjY1KSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDEyNjUgKi8sCisgIFRJTEVfT1BDX0xCLCBUSUxFX09QQ19MQiwgVElMRV9PUENfTEIsIENISUxEKDEyNzApLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTI3MCAqLywKKyAgVElMRV9PUENfTEIsIFRJTEVfT1BDX0xCLCBUSUxFX09QQ19MQiwgVElMRV9PUENfUFJFRkVUQ0gsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjc1ICovLAorICBUSUxFX09QQ19MQl9VLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTI3OCAqLywKKyAgVElMRV9PUENfTEgsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjgxICovLAorICBUSUxFX09QQ19MSF9VLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTI4NCAqLywKKyAgVElMRV9PUENfTFcsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxMjg3ICovLAorICBUSUxFX09QQ19NRiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDMsIDMpIC8qIGluZGV4IDEyOTAgKi8sCisgIENISUxEKDEyOTkpLCBDSElMRCgxMzAyKSwgQ0hJTEQoMTMwNSksIENISUxEKDEzMDgpLCBDSElMRCgxMzExKSwKKyAgQ0hJTEQoMTMxNCksIENISUxEKDEzMTcpLCBDSElMRCgxMzIwKSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEyOTkgKi8sCisgIFRJTEVfT1BDX05BUCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMDIgKi8sCisgIFRJTEVfT1BDX05PUCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMDUgKi8sCisgIFRJTEVfT1BDX1NXSU5UMCwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMDggKi8sCisgIFRJTEVfT1BDX1NXSU5UMSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMTEgKi8sCisgIFRJTEVfT1BDX1NXSU5UMiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMTQgKi8sCisgIFRJTEVfT1BDX1NXSU5UMywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMTcgKi8sCisgIFRJTEVfT1BDX1ROUywgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDEzMjAgKi8sCisgIFRJTEVfT1BDX1dINjQsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQzLCAyKSAvKiBpbmRleCAxMzIzICovLAorICBDSElMRCgxMzI4KSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDUsIDEpIC8qIGluZGV4IDEzMjggKi8sCisgIENISUxEKDEzMzEpLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTMzMSAqLywKKyAgVElMRV9PUENfTFdfTkEsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQ2LCA3KSAvKiBpbmRleCAxMzM0ICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBDSElMRCgxNDYzKSwKKyAgQ0hJTEQoMTQ2MyksIENISUxEKDE0NjMpLCBDSElMRCgxNDYzKSwgQ0hJTEQoMTQ2NiksIENISUxEKDE0NjYpLAorICBDSElMRCgxNDY2KSwgQ0hJTEQoMTQ2NiksIENISUxEKDE0NjkpLCBDSElMRCgxNDY5KSwgQ0hJTEQoMTQ2OSksCisgIENISUxEKDE0NjkpLCBDSElMRCgxNDcyKSwgQ0hJTEQoMTQ3MiksIENISUxEKDE0NzIpLCBDSElMRCgxNDcyKSwKKyAgQ0hJTEQoMTQ3NSksIENISUxEKDE0NzUpLCBDSElMRCgxNDc1KSwgQ0hJTEQoMTQ3NSksIENISUxEKDE0NzgpLAorICBDSElMRCgxNDc4KSwgQ0hJTEQoMTQ3OCksIENISUxEKDE0NzgpLCBDSElMRCgxNDgxKSwgQ0hJTEQoMTQ4MSksCisgIENISUxEKDE0ODEpLCBDSElMRCgxNDgxKSwgQ0hJTEQoMTQ4NCksIENISUxEKDE0ODQpLCBDSElMRCgxNDg0KSwKKyAgQ0hJTEQoMTQ4NCksIENISUxEKDE0ODcpLCBDSElMRCgxNDg3KSwgQ0hJTEQoMTQ4NyksIENISUxEKDE0ODcpLAorICBDSElMRCgxNDkwKSwgQ0hJTEQoMTQ5MCksIENISUxEKDE0OTApLCBDSElMRCgxNDkwKSwgQ0hJTEQoMTE1MSksCisgIENISUxEKDE0OTMpLCBDSElMRCgxNTE3KSwgQ0hJTEQoMTUyOSksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNDYzICovLAorICBUSUxFX09QQ19STElfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNDY2ICovLAorICBUSUxFX09QQ19TSExJQl9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE0NjkgKi8sCisgIFRJTEVfT1BDX1NITElIX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTQ3MiAqLywKKyAgVElMRV9PUENfU0hMSV9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE0NzUgKi8sCisgIFRJTEVfT1BDX1NIUklCX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTQ3OCAqLywKKyAgVElMRV9PUENfU0hSSUhfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNDgxICovLAorICBUSUxFX09QQ19TSFJJX1NOLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg1MywgMSkgLyogaW5kZXggMTQ4NCAqLywKKyAgVElMRV9PUENfU1JBSUJfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNDg3ICovLAorICBUSUxFX09QQ19TUkFJSF9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE0OTAgKi8sCisgIFRJTEVfT1BDX1NSQUlfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCAxNDkzICovLAorICBDSElMRCgxMjUxKSwgQ0hJTEQoMTI1NCksIENISUxEKDE1MDIpLCBDSElMRCgxNTA1KSwgQ0hJTEQoMTUwOCksCisgIENISUxEKDE1MTEpLCBDSElMRCgxNTE0KSwgQ0hJTEQoMTI4NyksCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNTAyICovLAorICBUSUxFX09QQ19MQl9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE1MDUgKi8sCisgIFRJTEVfT1BDX0xCX1VfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNTA4ICovLAorICBUSUxFX09QQ19MSF9TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE1MTEgKi8sCisgIFRJTEVfT1BDX0xIX1VfU04sIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNTE0ICovLAorICBUSUxFX09QQ19MV19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDMsIDMpIC8qIGluZGV4IDE1MTcgKi8sCisgIENISUxEKDEyOTkpLCBDSElMRCgxMzAyKSwgQ0hJTEQoMTMwNSksIENISUxEKDEzMDgpLCBDSElMRCgxMzExKSwKKyAgQ0hJTEQoMTMxNCksIENISUxEKDE1MjYpLCBDSElMRCgxMzIwKSwKKyAgQklURklFTEQoNTMsIDEpIC8qIGluZGV4IDE1MjYgKi8sCisgIFRJTEVfT1BDX1ROU19TTiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDMsIDIpIC8qIGluZGV4IDE1MjkgKi8sCisgIENISUxEKDE1MzQpLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg0NSwgMSkgLyogaW5kZXggMTUzNCAqLywKKyAgQ0hJTEQoMTUzNyksIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDUzLCAxKSAvKiBpbmRleCAxNTM3ICovLAorICBUSUxFX09QQ19MV19OQV9TTiwgVElMRV9PUENfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWNvZGVfWTBfZnNtWzE2OF0gPQoreworICBCSVRGSUVMRCgyNywgNCkgLyogaW5kZXggMCAqLywKKyAgVElMRV9PUENfTk9ORSwgQ0hJTEQoMTcpLCBDSElMRCgyMiksIENISUxEKDI3KSwgQ0hJTEQoNDcpLCBDSElMRCg1MiksCisgIENISUxEKDU3KSwgQ0hJTEQoNjIpLCBDSElMRCg2NyksIFRJTEVfT1BDX0FEREksIENISUxEKDcyKSwgQ0hJTEQoMTAyKSwKKyAgVElMRV9PUENfU0VRSSwgQ0hJTEQoMTE3KSwgVElMRV9PUENfU0xUSSwgVElMRV9PUENfU0xUSV9VLAorICBCSVRGSUVMRCgxOCwgMikgLyogaW5kZXggMTcgKi8sCisgIFRJTEVfT1BDX0FERCwgVElMRV9PUENfUzFBLCBUSUxFX09QQ19TMkEsIFRJTEVfT1BDX1NVQiwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDIyICovLAorICBUSUxFX09QQ19NTlosIFRJTEVfT1BDX01WTlosIFRJTEVfT1BDX01WWiwgVElMRV9PUENfTVosCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCAyNyAqLywKKyAgVElMRV9PUENfQU5ELCBUSUxFX09QQ19OT1IsIENISUxEKDMyKSwgVElMRV9PUENfWE9SLAorICBCSVRGSUVMRCgxMiwgMikgLyogaW5kZXggMzIgKi8sCisgIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgVElMRV9PUENfT1IsIENISUxEKDM3KSwKKyAgQklURklFTEQoMTQsIDIpIC8qIGluZGV4IDM3ICovLAorICBUSUxFX09QQ19PUiwgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBDSElMRCg0MiksCisgIEJJVEZJRUxEKDE2LCAyKSAvKiBpbmRleCA0MiAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgVElMRV9PUENfTU9WRSwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDQ3ICovLAorICBUSUxFX09QQ19STCwgVElMRV9PUENfU0hMLCBUSUxFX09QQ19TSFIsIFRJTEVfT1BDX1NSQSwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDUyICovLAorICBUSUxFX09QQ19TTFRFLCBUSUxFX09QQ19TTFRFX1UsIFRJTEVfT1BDX1NMVCwgVElMRV9PUENfU0xUX1UsCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCA1NyAqLywKKyAgVElMRV9PUENfTVVMSExTQV9VVSwgVElMRV9PUENfUzNBLCBUSUxFX09QQ19TRVEsIFRJTEVfT1BDX1NORSwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDYyICovLAorICBUSUxFX09QQ19NVUxISF9TUywgVElMRV9PUENfTVVMSEhfVVUsIFRJTEVfT1BDX01VTExMX1NTLCBUSUxFX09QQ19NVUxMTF9VVSwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDY3ICovLAorICBUSUxFX09QQ19NVUxISEFfU1MsIFRJTEVfT1BDX01VTEhIQV9VVSwgVElMRV9PUENfTVVMTExBX1NTLAorICBUSUxFX09QQ19NVUxMTEFfVVUsCisgIEJJVEZJRUxEKDAsIDIpIC8qIGluZGV4IDcyICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg3NyksCisgIEJJVEZJRUxEKDIsIDIpIC8qIGluZGV4IDc3ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4MiksCisgIEJJVEZJRUxEKDQsIDIpIC8qIGluZGV4IDgyICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4NyksCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDg3ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg5MiksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDkyICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg5NyksCisgIEJJVEZJRUxEKDEwLCAyKSAvKiBpbmRleCA5NyAqLywKKyAgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfSU5GTywKKyAgQklURklFTEQoNiwgMikgLyogaW5kZXggMTAyICovLAorICBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBDSElMRCgxMDcpLAorICBCSVRGSUVMRCg4LCAyKSAvKiBpbmRleCAxMDcgKi8sCisgIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIENISUxEKDExMiksCisgIEJJVEZJRUxEKDEwLCAyKSAvKiBpbmRleCAxMTIgKi8sCisgIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIFRJTEVfT1BDX01PVkVJLAorICBCSVRGSUVMRCgxNSwgNSkgLyogaW5kZXggMTE3ICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19STEksCisgIFRJTEVfT1BDX1JMSSwgVElMRV9PUENfUkxJLCBUSUxFX09QQ19STEksIFRJTEVfT1BDX1NITEksIFRJTEVfT1BDX1NITEksCisgIFRJTEVfT1BDX1NITEksIFRJTEVfT1BDX1NITEksIFRJTEVfT1BDX1NIUkksIFRJTEVfT1BDX1NIUkksIFRJTEVfT1BDX1NIUkksCisgIFRJTEVfT1BDX1NIUkksIFRJTEVfT1BDX1NSQUksIFRJTEVfT1BDX1NSQUksIFRJTEVfT1BDX1NSQUksIFRJTEVfT1BDX1NSQUksCisgIENISUxEKDE1MCksIENISUxEKDE1OSksIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCisgIEJJVEZJRUxEKDEyLCAzKSAvKiBpbmRleCAxNTAgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX0JJVFgsIFRJTEVfT1BDX0JZVEVYLCBUSUxFX09QQ19DTFosIFRJTEVfT1BDX0NUWiwKKyAgVElMRV9PUENfRk5PUCwgVElMRV9PUENfTk9QLCBUSUxFX09QQ19QQ05ULAorICBCSVRGSUVMRCgxMiwgMykgLyogaW5kZXggMTU5ICovLAorICBUSUxFX09QQ19UQkxJRFhCMCwgVElMRV9PUENfVEJMSURYQjEsIFRJTEVfT1BDX1RCTElEWEIyLCBUSUxFX09QQ19UQkxJRFhCMywKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWNvZGVfWTFfZnNtWzE0MF0gPQoreworICBCSVRGSUVMRCg1OSwgNCkgLyogaW5kZXggMCAqLywKKyAgVElMRV9PUENfTk9ORSwgQ0hJTEQoMTcpLCBDSElMRCgyMiksIENISUxEKDI3KSwgQ0hJTEQoNDcpLCBDSElMRCg1MiksCisgIENISUxEKDU3KSwgVElMRV9PUENfQURESSwgQ0hJTEQoNjIpLCBDSElMRCg5MiksIFRJTEVfT1BDX1NFUUksIENISUxEKDEwNyksCisgIFRJTEVfT1BDX1NMVEksIFRJTEVfT1BDX1NMVElfVSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDE3ICovLAorICBUSUxFX09QQ19BREQsIFRJTEVfT1BDX1MxQSwgVElMRV9PUENfUzJBLCBUSUxFX09QQ19TVUIsCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCAyMiAqLywKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTU5aLCBUSUxFX09QQ19NWiwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDI3ICovLAorICBUSUxFX09QQ19BTkQsIFRJTEVfT1BDX05PUiwgQ0hJTEQoMzIpLCBUSUxFX09QQ19YT1IsCisgIEJJVEZJRUxEKDQzLCAyKSAvKiBpbmRleCAzMiAqLywKKyAgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgQ0hJTEQoMzcpLAorICBCSVRGSUVMRCg0NSwgMikgLyogaW5kZXggMzcgKi8sCisgIFRJTEVfT1BDX09SLCBUSUxFX09QQ19PUiwgVElMRV9PUENfT1IsIENISUxEKDQyKSwKKyAgQklURklFTEQoNDcsIDIpIC8qIGluZGV4IDQyICovLAorICBUSUxFX09QQ19PUiwgVElMRV9PUENfT1IsIFRJTEVfT1BDX09SLCBUSUxFX09QQ19NT1ZFLAorICBCSVRGSUVMRCg0OSwgMikgLyogaW5kZXggNDcgKi8sCisgIFRJTEVfT1BDX1JMLCBUSUxFX09QQ19TSEwsIFRJTEVfT1BDX1NIUiwgVElMRV9PUENfU1JBLAorICBCSVRGSUVMRCg0OSwgMikgLyogaW5kZXggNTIgKi8sCisgIFRJTEVfT1BDX1NMVEUsIFRJTEVfT1BDX1NMVEVfVSwgVElMRV9PUENfU0xULCBUSUxFX09QQ19TTFRfVSwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDU3ICovLAorICBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19TM0EsIFRJTEVfT1BDX1NFUSwgVElMRV9PUENfU05FLAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggNjIgKi8sCisgIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIENISUxEKDY3KSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDY3ICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg3MiksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCA3MiAqLywKKyAgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgQ0hJTEQoNzcpLAorICBCSVRGSUVMRCgzNywgMikgLyogaW5kZXggNzcgKi8sCisgIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIFRJTEVfT1BDX0FOREksIENISUxEKDgyKSwKKyAgQklURklFTEQoMzksIDIpIC8qIGluZGV4IDgyICovLAorICBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBUSUxFX09QQ19BTkRJLCBDSElMRCg4NyksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA4NyAqLywKKyAgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfQU5ESSwgVElMRV9PUENfSU5GTywKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDkyICovLAorICBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgVElMRV9PUENfT1JJLCBDSElMRCg5NyksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA5NyAqLywKKyAgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgQ0hJTEQoMTAyKSwKKyAgQklURklFTEQoNDEsIDIpIC8qIGluZGV4IDEwMiAqLywKKyAgVElMRV9PUENfT1JJLCBUSUxFX09QQ19PUkksIFRJTEVfT1BDX09SSSwgVElMRV9PUENfTU9WRUksCisgIEJJVEZJRUxEKDQ4LCAzKSAvKiBpbmRleCAxMDcgKi8sCisgIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX1JMSSwgVElMRV9PUENfU0hMSSwgVElMRV9PUENfU0hSSSwgVElMRV9PUENfU1JBSSwKKyAgQ0hJTEQoMTE2KSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDMsIDMpIC8qIGluZGV4IDExNiAqLywKKyAgVElMRV9PUENfTk9ORSwgQ0hJTEQoMTI1KSwgQ0hJTEQoMTMwKSwgQ0hJTEQoMTM1KSwgVElMRV9PUENfTk9ORSwKKyAgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDYsIDIpIC8qIGluZGV4IDEyNSAqLywKKyAgVElMRV9PUENfRk5PUCwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwgVElMRV9PUENfTk9ORSwKKyAgQklURklFTEQoNDYsIDIpIC8qIGluZGV4IDEzMCAqLywKKyAgVElMRV9PUENfSUxMLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLCBUSUxFX09QQ19OT05FLAorICBCSVRGSUVMRCg0NiwgMikgLyogaW5kZXggMTM1ICovLAorICBUSUxFX09QQ19OT1AsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsIFRJTEVfT1BDX05PTkUsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVjb2RlX1kyX2ZzbVsyNF0gPQoreworICBCSVRGSUVMRCg1NiwgMykgLyogaW5kZXggMCAqLywKKyAgQ0hJTEQoOSksIFRJTEVfT1BDX0xCX1UsIFRJTEVfT1BDX0xILCBUSUxFX09QQ19MSF9VLCBUSUxFX09QQ19MVywKKyAgVElMRV9PUENfU0IsIFRJTEVfT1BDX1NILCBUSUxFX09QQ19TVywKKyAgQklURklFTEQoMjAsIDIpIC8qIGluZGV4IDkgKi8sCisgIFRJTEVfT1BDX0xCLCBUSUxFX09QQ19MQiwgVElMRV9PUENfTEIsIENISUxEKDE0KSwKKyAgQklURklFTEQoMjIsIDIpIC8qIGluZGV4IDE0ICovLAorICBUSUxFX09QQ19MQiwgVElMRV9PUENfTEIsIFRJTEVfT1BDX0xCLCBDSElMRCgxOSksCisgIEJJVEZJRUxEKDI0LCAyKSAvKiBpbmRleCAxOSAqLywKKyAgVElMRV9PUENfTEIsIFRJTEVfT1BDX0xCLCBUSUxFX09QQ19MQiwgVElMRV9PUENfUFJFRkVUQ0gsCit9OworCisjdW5kZWYgQklURklFTEQKKyN1bmRlZiBDSElMRAorY29uc3QgdW5zaWduZWQgc2hvcnQgKiBjb25zdAordGlsZV9idW5kbGVfZGVjb2Rlcl9mc21zW1RJTEVfTlVNX1BJUEVMSU5FX0VOQ09ESU5HU10gPQoreworICBkZWNvZGVfWDBfZnNtLAorICBkZWNvZGVfWDFfZnNtLAorICBkZWNvZGVfWTBfZnNtLAorICBkZWNvZGVfWTFfZnNtLAorICBkZWNvZGVfWTJfZnNtCit9OworY29uc3Qgc3RydWN0IHRpbGVfb3BlcmFuZCB0aWxlX29wZXJhbmRzWzQzXSA9Cit7CisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9JTU04X1gwKSwKKyAgICA4LCAxLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9JbW04X1gwLCBnZXRfSW1tOF9YMAorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVfSU1NOF9YMSksCisgICAgOCwgMSwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfSW1tOF9YMSwgZ2V0X0ltbThfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFX0lNTThfWTApLAorICAgIDgsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0ltbThfWTAsIGdldF9JbW04X1kwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9JTU04X1kxKSwKKyAgICA4LCAxLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9JbW04X1kxLCBnZXRfSW1tOF9ZMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVfSU1NMTZfWDApLAorICAgIDE2LCAxLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9JbW0xNl9YMCwgZ2V0X0ltbTE2X1gwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9JTU0xNl9YMSksCisgICAgMTYsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0ltbTE2X1gxLCBnZXRfSW1tMTZfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9BRERSRVNTLCBCRkRfUkVMT0MoVElMRV9KT0ZGTE9OR19YMSksCisgICAgMjksIDEsIDAsIDAsIDEsIFRJTEVfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTLAorICAgIGNyZWF0ZV9KT2ZmTG9uZ19YMSwgZ2V0X0pPZmZMb25nX1gxCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAwLCAxLCAwLCAwLAorICAgIGNyZWF0ZV9EZXN0X1gwLCBnZXRfRGVzdF9YMAorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9YMCwgZ2V0X1NyY0FfWDAKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDAsIDEsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfWDEsIGdldF9EZXN0X1gxCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAxLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TcmNBX1gxLCBnZXRfU3JjQV9YMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfRGVzdF9ZMCwgZ2V0X0Rlc3RfWTAKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NyY0FfWTAsIGdldF9TcmNBX1kwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAwLCAxLCAwLCAwLAorICAgIGNyZWF0ZV9EZXN0X1kxLCBnZXRfRGVzdF9ZMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9ZMSwgZ2V0X1NyY0FfWTEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NyY0FfWTIsIGdldF9TcmNBX1kyCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAxLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TcmNCX1gwLCBnZXRfU3JjQl9YMAorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQl9YMSwgZ2V0X1NyY0JfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NyY0JfWTAsIGdldF9TcmNCX1kwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAxLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TcmNCX1kxLCBnZXRfU3JjQl9ZMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0FERFJFU1MsIEJGRF9SRUxPQyhUSUxFX0JST0ZGX1gxKSwKKyAgICAxNywgMSwgMCwgMCwgMSwgVElMRV9MT0cyX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMsCisgICAgY3JlYXRlX0JyT2ZmX1gxLCBnZXRfQnJPZmZfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDEsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfWDAsIGdldF9EZXN0X1gwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfQUREUkVTUywgQkZEX1JFTE9DKE5PTkUpLAorICAgIDI4LCAxLCAwLCAwLCAxLCBUSUxFX0xPRzJfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUywKKyAgICBjcmVhdGVfSk9mZl9YMSwgZ2V0X0pPZmZfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDAsIDEsIDAsIDAsCisgICAgY3JlYXRlX1NyY0JEZXN0X1kyLCBnZXRfU3JjQkRlc3RfWTIKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDEsIDAsIDAsCisgICAgY3JlYXRlX1NyY0FfWDEsIGdldF9TcmNBX1gxCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfU1BSLCBCRkRfUkVMT0MoVElMRV9NRl9JTU0xNV9YMSksCisgICAgMTUsIDAsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX01GX0ltbTE1X1gxLCBnZXRfTUZfSW1tMTVfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFX01NU1RBUlRfWDApLAorICAgIDUsIDAsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX01NU3RhcnRfWDAsIGdldF9NTVN0YXJ0X1gwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9NTUVORF9YMCksCisgICAgNSwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfTU1FbmRfWDAsIGdldF9NTUVuZF9YMAorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVfTU1TVEFSVF9YMSksCisgICAgNSwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfTU1TdGFydF9YMSwgZ2V0X01NU3RhcnRfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFX01NRU5EX1gxKSwKKyAgICA1LCAwLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9NTUVuZF9YMSwgZ2V0X01NRW5kX1gxCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfU1BSLCBCRkRfUkVMT0MoVElMRV9NVF9JTU0xNV9YMSksCisgICAgMTUsIDAsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX01UX0ltbTE1X1gxLCBnZXRfTVRfSW1tMTVfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDEsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfWTAsIGdldF9EZXN0X1kwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9TSEFNVF9YMCksCisgICAgNSwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU2hBbXRfWDAsIGdldF9TaEFtdF9YMAorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVfU0hBTVRfWDEpLAorICAgIDUsIDAsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NoQW10X1gxLCBnZXRfU2hBbXRfWDEKKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFX1NIQU1UX1kwKSwKKyAgICA1LCAwLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TaEFtdF9ZMCwgZ2V0X1NoQW10X1kwCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRV9TSEFNVF9ZMSksCisgICAgNSwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU2hBbXRfWTEsIGdldF9TaEFtdF9ZMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQkRlc3RfWTIsIGdldF9TcmNCRGVzdF9ZMgorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDgsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfSW1tOF9YMSwgZ2V0X0Rlc3RfSW1tOF9YMQorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0FERFJFU1MsIEJGRF9SRUxPQyhUSUxFX1NOX0JST0ZGKSwKKyAgICAxMCwgMSwgMCwgMCwgMSwgVElMRV9MT0cyX1NOX0lOU1RSVUNUSU9OX1NJWkVfSU5fQllURVMsCisgICAgY3JlYXRlX0JyT2ZmX1NOLCBnZXRfQnJPZmZfU04KKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFX1NOX1VJTU04KSwKKyAgICA4LCAwLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9JbW04X1NOLCBnZXRfSW1tOF9TTgorICB9LAorICB7CisgICAgVElMRV9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVfU05fSU1NOCksCisgICAgOCwgMSwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfSW1tOF9TTiwgZ2V0X0ltbThfU04KKyAgfSwKKyAgeworICAgIFRJTEVfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDIsIDAsIDAsIDEsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfU04sIGdldF9EZXN0X1NOCisgIH0sCisgIHsKKyAgICBUSUxFX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICAyLCAwLCAxLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TcmNfU04sIGdldF9TcmNfU04KKyAgfQorfTsKKworCisKKworLyogR2l2ZW4gYSBzZXQgb2YgYnVuZGxlIGJpdHMgYW5kIHRoZSBsb29rdXAgRlNNIGZvciBhIHNwZWNpZmljIHBpcGUsCisgKiByZXR1cm5zIHdoaWNoIGluc3RydWN0aW9uIHRoZSBidW5kbGUgY29udGFpbnMgaW4gdGhhdCBwaXBlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHRpbGVfb3Bjb2RlICoKK2ZpbmRfb3Bjb2RlKHRpbGVfYnVuZGxlX2JpdHMgYml0cywgY29uc3QgdW5zaWduZWQgc2hvcnQgKnRhYmxlKQoreworICBpbnQgaW5kZXggPSAwOworCisgIHdoaWxlICgxKQorICB7CisgICAgdW5zaWduZWQgc2hvcnQgYml0c3BlYyA9IHRhYmxlW2luZGV4XTsKKyAgICB1bnNpZ25lZCBpbnQgYml0ZmllbGQgPQorICAgICAgKCh1bnNpZ25lZCBpbnQpKGJpdHMgPj4gKGJpdHNwZWMgJiA2MykpKSAmIChiaXRzcGVjID4+IDYpOworCisgICAgdW5zaWduZWQgc2hvcnQgbmV4dCA9IHRhYmxlW2luZGV4ICsgMSArIGJpdGZpZWxkXTsKKyAgICBpZiAobmV4dCA8PSBUSUxFX09QQ19OT05FKQorICAgICAgcmV0dXJuICZ0aWxlX29wY29kZXNbbmV4dF07CisKKyAgICBpbmRleCA9IG5leHQgLSBUSUxFX09QQ19OT05FOworICB9Cit9CisKKworaW50CitwYXJzZV9pbnNuX3RpbGUodGlsZV9idW5kbGVfYml0cyBiaXRzLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYywKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uCisgICAgICAgICAgICAgICAgZGVjb2RlZFtUSUxFX01BWF9JTlNUUlVDVElPTlNfUEVSX0JVTkRMRV0pCit7CisgIGludCBudW1faW5zdHJ1Y3Rpb25zID0gMDsKKyAgaW50IHBpcGU7CisKKyAgaW50IG1pbl9waXBlLCBtYXhfcGlwZTsKKyAgaWYgKChiaXRzICYgVElMRV9CVU5ETEVfWV9FTkNPRElOR19NQVNLKSA9PSAwKQorICB7CisgICAgbWluX3BpcGUgPSBUSUxFX1BJUEVMSU5FX1gwOworICAgIG1heF9waXBlID0gVElMRV9QSVBFTElORV9YMTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBtaW5fcGlwZSA9IFRJTEVfUElQRUxJTkVfWTA7CisgICAgbWF4X3BpcGUgPSBUSUxFX1BJUEVMSU5FX1kyOworICB9CisKKyAgLyogRm9yIGVhY2ggcGlwZSwgZmluZCBhbiBpbnN0cnVjdGlvbiB0aGF0IGZpdHMuICovCisgIGZvciAocGlwZSA9IG1pbl9waXBlOyBwaXBlIDw9IG1heF9waXBlOyBwaXBlKyspCisgIHsKKyAgICBjb25zdCBzdHJ1Y3QgdGlsZV9vcGNvZGUgKm9wYzsKKyAgICBzdHJ1Y3QgdGlsZV9kZWNvZGVkX2luc3RydWN0aW9uICpkOworICAgIGludCBpOworCisgICAgZCA9ICZkZWNvZGVkW251bV9pbnN0cnVjdGlvbnMrK107CisgICAgb3BjID0gZmluZF9vcGNvZGUgKGJpdHMsIHRpbGVfYnVuZGxlX2RlY29kZXJfZnNtc1twaXBlXSk7CisgICAgZC0+b3Bjb2RlID0gb3BjOworCisgICAgLyogRGVjb2RlIGVhY2ggb3BlcmFuZCwgc2lnbiBleHRlbmRpbmcsIGV0Yy4gYXMgYXBwcm9wcmlhdGUuICovCisgICAgZm9yIChpID0gMDsgaSA8IG9wYy0+bnVtX29wZXJhbmRzOyBpKyspCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHRpbGVfb3BlcmFuZCAqb3AgPQorICAgICAgICAmdGlsZV9vcGVyYW5kc1tvcGMtPm9wZXJhbmRzW3BpcGVdW2ldXTsKKyAgICAgIGludCBvcHZhbCA9IG9wLT5leHRyYWN0IChiaXRzKTsKKyAgICAgIGlmIChvcC0+aXNfc2lnbmVkKQorICAgICAgeworICAgICAgICAvKiBTaWduLWV4dGVuZCB0aGUgb3BlcmFuZC4gKi8KKyAgICAgICAgaW50IHNoaWZ0ID0gKGludCkoKHNpemVvZihpbnQpICogOCkgLSBvcC0+bnVtX2JpdHMpOworICAgICAgICBvcHZhbCA9IChvcHZhbCA8PCBzaGlmdCkgPj4gc2hpZnQ7CisgICAgICB9CisKKyAgICAgIC8qIEFkanVzdCBQQy1yZWxhdGl2ZSBzY2FsZWQgYnJhbmNoIG9mZnNldHMuICovCisgICAgICBpZiAob3AtPnR5cGUgPT0gVElMRV9PUF9UWVBFX0FERFJFU1MpCisgICAgICB7CisgICAgICAgIG9wdmFsICo9IFRJTEVfQlVORExFX1NJWkVfSU5fQllURVM7CisgICAgICAgIG9wdmFsICs9IChpbnQpcGM7CisgICAgICB9CisKKyAgICAgIC8qIFJlY29yZCB0aGUgZmluYWwgdmFsdWUuICovCisgICAgICBkLT5vcGVyYW5kc1tpXSA9IG9wOworICAgICAgZC0+b3BlcmFuZF92YWx1ZXNbaV0gPSBvcHZhbDsKKyAgICB9CisgIH0KKworICByZXR1cm4gbnVtX2luc3RydWN0aW9uczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jIGIvYXJjaC90aWxlL2tlcm5lbC90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhYjI1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvdGltZS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFN1cHBvcnQgdGhlIGN5Y2xlIGNvdW50ZXIgY2xvY2tzb3VyY2UgYW5kIHRpbGUgdGltZXIgY2xvY2sgZXZlbnQgZGV2aWNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhcmNoL2ludGVycnVwdHMuaD4KKyNpbmNsdWRlIDxhcmNoL3Nwcl9kZWYuaD4KKworCisvKgorICogRGVmaW5lIHRoZSBjeWNsZSBjb3VudGVyIGNsb2NrIHNvdXJjZS4KKyAqLworCisvKiBIb3cgbWFueSBjeWNsZXMgcGVyIHNlY29uZCB3ZSBhcmUgcnVubmluZyBhdC4gKi8KK3N0YXRpYyBjeWNsZXNfdCBjeWNsZXNfcGVyX3NlYyBfX3dyaXRlX29uY2U7CisKKy8qCisgKiBXZSBzZXQgdXAgc2hpZnQgYW5kIG11bHRpcGx5IHZhbHVlcyB3aXRoIGEgbWluc2VjIG9mIGZpdmUgc2Vjb25kcywKKyAqIHNpbmNlIG91ciB0aW1lciBjb3VudGVyIGNvdW50cyBkb3duIDMxIGJpdHMgYXQgYSBmcmVxdWVuY3kgb2YKKyAqIG5vIGxlc3MgdGhhbiA1MDAgTUh6LiAgU2VlIEBtaW5zZWMgZm9yIGNsb2Nrc19jYWxjX211bHRfc2hpZnQoKS4KKyAqIFdlIGNvdWxkIHVzZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgdGhlIDY0LWJpdCBmcmVlLXJ1bm5pbmcKKyAqIGN5Y2xlIGNvdW50ZXIsIGJ1dCB3ZSB1c2UgdGhlIHNhbWUgb25lIGZvciBjb25zaXN0ZW5jeSwgYW5kIHNpbmNlCisgKiB3ZSB3aWxsIGJlIHJlYXNvbmFibHkgcHJlY2lzZSB3aXRoIHRoaXMgdmFsdWUgYW55d2F5LgorICovCisjZGVmaW5lIFRJTEVfTUlOU0VDIDUKKworY3ljbGVzX3QgZ2V0X2Nsb2NrX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gY3ljbGVzX3Blcl9zZWM7Cit9CisKKyNpZiBDSElQX0hBU19TUExJVF9DWUNMRSgpCitjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGhpZ2ggPSBfX2luc25fbWZzcHIoU1BSX0NZQ0xFX0hJR0gpOworCXVuc2lnbmVkIGludCBsb3cgPSBfX2luc25fbWZzcHIoU1BSX0NZQ0xFX0xPVyk7CisJdW5zaWduZWQgaW50IGhpZ2gyID0gX19pbnNuX21mc3ByKFNQUl9DWUNMRV9ISUdIKTsKKworCXdoaWxlICh1bmxpa2VseShoaWdoICE9IGhpZ2gyKSkgeworCQlsb3cgPSBfX2luc25fbWZzcHIoU1BSX0NZQ0xFX0xPVyk7CisJCWhpZ2ggPSBoaWdoMjsKKwkJaGlnaDIgPSBfX2luc25fbWZzcHIoU1BSX0NZQ0xFX0hJR0gpOworCX0KKworCXJldHVybiAoKChjeWNsZXNfdCloaWdoKSA8PCAzMikgfCBsb3c7Cit9CisjZW5kaWYKKworc3RhdGljIGN5Y2xlc190IGNsb2Nrc291cmNlX2dldF9jeWNsZXMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlyZXR1cm4gZ2V0X2N5Y2xlcygpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGN5Y2xlX2NvdW50ZXJfY3MgPSB7CisJLm5hbWUgPSAiY3ljbGUgY291bnRlciIsCisJLnJhdGluZyA9IDMwMCwKKwkucmVhZCA9IGNsb2Nrc291cmNlX2dldF9jeWNsZXMsCisJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKKwkuZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSBmcm9tIHNldHVwX2FyY2goKSB0byBzZXQgY3ljbGVzX3Blcl9zZWMuCisgKiBXZSBpbml0aWFsaXplIGl0IGVhcmx5IHNvIHdlIGNhbiB1c2UgaXQgdG8gc2V0IHVwIGxvb3BzX3Blcl9qaWZmeS4KKyAqLwordm9pZCBfX2luaXQgc2V0dXBfY2xvY2sodm9pZCkKK3sKKwljeWNsZXNfcGVyX3NlYyA9IGh2X3N5c2NvbmYoSFZfU1lTQ09ORl9DUFVfU1BFRUQpOworCWNsb2Nrc291cmNlX2NhbGNfbXVsdF9zaGlmdCgmY3ljbGVfY291bnRlcl9jcywgY3ljbGVzX3Blcl9zZWMsCisJCQkJICAgIFRJTEVfTUlOU0VDKTsKK30KKwordm9pZCBfX2luaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCit7CisJbG9vcHNfcGVyX2ppZmZ5ID0gZ2V0X2Nsb2NrX3JhdGUoKSAvIEhaOworCXByX2luZm8oIkNsb2NrIHJhdGUgeWllbGRzICVsdS4lMDJsdSBCb2dvTUlQUyAobHBqPSVsdSlcbiIsCisJCWxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKKwkJKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwLCBsb29wc19wZXJfamlmZnkpOworfQorCisvKiBDYWxsZWQgZmFpcmx5IGxhdGUgaW4gaW5pdC9tYWluLmMsIGJ1dCBiZWZvcmUgd2UgZ28gc21wLiAqLwordm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrIHNvdXJjZS4gKi8KKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY3ljbGVfY291bnRlcl9jcyk7CisKKwkvKiBTdGFydCB1cCB0aGUgdGlsZS10aW1lciBpbnRlcnJ1cHQgc291cmNlIG9uIHRoZSBib290IGNwdS4gKi8KKwlzZXR1cF90aWxlX3RpbWVyKCk7Cit9CisKKworLyoKKyAqIERlZmluZSB0aGUgdGlsZSB0aW1lciBjbG9jayBldmVudCBkZXZpY2UuICBUaGUgdGltZXIgaXMgZHJpdmVuIGJ5CisgKiB0aGUgVElMRV9USU1FUl9DT05UUk9MIHJlZ2lzdGVyLCB3aGljaCBjb25zaXN0cyBvZiBhIDMxLWJpdCBkb3duCisgKiBjb3VudGVyLCBwbHVzIGJpdCAzMSwgd2hpY2ggc2lnbmlmaWVzIHRoYXQgdGhlIGNvdW50ZXIgaGFzIHdyYXBwZWQKKyAqIGZyb20gemVybyB0byAoMioqMzEpIC0gMS4gIFRoZSBJTlRfVElMRV9USU1FUiBpbnRlcnJ1cHQgd2lsbCBiZQorICogcmFpc2VkIGFzIGxvbmcgYXMgYml0IDMxIGlzIHNldC4KKyAqLworCisjZGVmaW5lIE1BWF9USUNLIDB4N2ZmZmZmZmYgICAvKiB3ZSBoYXZlIDMxIGJpdHMgb2YgY291bnRkb3duIHRpbWVyICovCisKK3N0YXRpYyBpbnQgdGlsZV90aW1lcl9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIHRpY2tzLAorCQkJCSAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCUJVR19PTih0aWNrcyA+IE1BWF9USUNLKTsKKwlfX2luc25fbXRzcHIoU1BSX1RJTEVfVElNRVJfQ09OVFJPTCwgdGlja3MpOworCXJhd19sb2NhbF9pcnFfdW5tYXNrX25vdyhJTlRfVElMRV9USU1FUik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXaGVuZXZlciBhbnlvbmUgdHJpZXMgdG8gY2hhbmdlIG1vZGVzLCB3ZSBqdXN0IG1hc2sgaW50ZXJydXB0cworICogYW5kIHdhaXQgZm9yIHRoZSBuZXh0IGV2ZW50IHRvIGdldCBzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHRpbGVfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXJhd19sb2NhbF9pcnFfbWFza19ub3coSU5UX1RJTEVfVElNRVIpOworfQorCisvKgorICogU2V0IG1pbl9kZWx0YV9ucyB0byAxIG1pY3Jvc2Vjb25kLCBzaW5jZSBpdCB0YWtlcyBhYm91dAorICogdGhhdCBsb25nIHRvIGZpcmUgdGhlIGludGVycnVwdC4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIHRpbGVfdGltZXIpID0geworCS5uYW1lID0gInRpbGUgdGltZXIiLAorCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLm1pbl9kZWx0YV9ucyA9IDEwMDAsCisJLnJhdGluZyA9IDEwMCwKKwkuaXJxID0gLTEsCisJLnNldF9uZXh0X2V2ZW50ID0gdGlsZV90aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUgPSB0aWxlX3RpbWVyX3NldF9tb2RlLAorfTsKKwordm9pZCBfX2NwdWluaXQgc2V0dXBfdGlsZV90aW1lcih2b2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZfX2dldF9jcHVfdmFyKHRpbGVfdGltZXIpOworCisJLyogRmlsbCBpbiBmaWVsZHMgdGhhdCBhcmUgc3BlZWQtc3BlY2lmaWMuICovCisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KGV2dCwgY3ljbGVzX3Blcl9zZWMsIFRJTEVfTUlOU0VDKTsKKwlldnQtPm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoTUFYX1RJQ0ssIGV2dCk7CisKKwkvKiBNYXJrIGFzIGJlaW5nIGZvciB0aGlzIGNwdSBvbmx5LiAqLworCWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCS8qIFN0YXJ0IG91dCB3aXRoIHRpbWVyIG5vdCBmaXJpbmcuICovCisJcmF3X2xvY2FsX2lycV9tYXNrX25vdyhJTlRfVElMRV9USU1FUik7CisKKwkvKiBSZWdpc3RlciB0aWxlIHRpbWVyLiAqLworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShldnQpOworfQorCisvKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHZlY3Rvci4gKi8KK3ZvaWQgZG9fdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZmF1bHRfbnVtKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmX19nZXRfY3B1X3Zhcih0aWxlX3RpbWVyKTsKKworCS8qCisJICogTWFzayB0aGUgdGltZXIgaW50ZXJydXB0IGhlcmUsIHNpbmNlIHdlIGFyZSBhIG9uZXNob3QgdGltZXIKKwkgKiBhbmQgdGhlcmUgYXJlIG5vdyBieSBkZWZpbml0aW9uIG5vIGV2ZW50cyBwZW5kaW5nLgorCSAqLworCXJhd19sb2NhbF9pcnFfbWFzayhJTlRfVElMRV9USU1FUik7CisKKwkvKiBUcmFjayB0aW1lIHNwZW50IGhlcmUgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKi8KKwlpcnFfZW50ZXIoKTsKKworCS8qIFRyYWNrIGludGVycnVwdCBjb3VudC4gKi8KKwlfX2dldF9jcHVfdmFyKGlycV9zdGF0KS5pcnFfdGltZXJfY291bnQrKzsKKworCS8qIENhbGwgdGhlIGdlbmVyaWMgdGltZXIgaGFuZGxlciAqLworCWV2dC0+ZXZlbnRfaGFuZGxlcihldnQpOworCisJLyoKKwkgKiBUcmFjayB0aW1lIHNwZW50IGFnYWluc3QgdGhlIGN1cnJlbnQgcHJvY2VzcyBhZ2FpbiBhbmQKKwkgKiBwcm9jZXNzIGFueSBzb2Z0aXJxcyBpZiB0aGV5IGFyZSB3YWl0aW5nLgorCSAqLworCWlycV9leGl0KCk7CisKKwlzZXRfaXJxX3JlZ3Mob2xkX3JlZ3MpOworfQorCisvKgorICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KKyAqIE5vdGUgdGhhdCB3aXRoIExPQ0tERVAsIHRoaXMgaXMgY2FsbGVkIGR1cmluZyBsb2NrZGVwX2luaXQoKSwgYW5kCisgKiB3ZSB3aWxsIGNsYWltIHRoYXQgc2NoZWRfY2xvY2soKSBpcyB6ZXJvIGZvciBhIGxpdHRsZSB3aGlsZSwgdW50aWwKKyAqIHdlIHJ1biBzZXR1cF9jbG9jaygpLCBhYm92ZS4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIGNsb2Nrc291cmNlX2N5YzJucyhnZXRfY3ljbGVzKCksCisJCQkJICBjeWNsZV9jb3VudGVyX2NzLm11bHQsCisJCQkJICBjeWNsZV9jb3VudGVyX2NzLnNoaWZ0KTsKK30KKworaW50IHNldHVwX3Byb2ZpbGluZ190aW1lcih1bnNpZ25lZCBpbnQgbXVsdGlwbGllcikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvdGxiLmMgYi9hcmNoL3RpbGUva2VybmVsL3RsYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmZjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUva2VybmVsL3RsYi5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2hvbWVjYWNoZS5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKworLyogRnJvbSB0bGJmbHVzaC5oICovCitERUZJTkVfUEVSX0NQVShpbnQsIGN1cnJlbnRfYXNpZCk7CitpbnQgbWluX2FzaWQsIG1heF9hc2lkOworCisvKgorICogTm90ZSB0aGF0IHdlIGZsdXNoIHRoZSBMMUkgKGZvciBWTV9FWEVDIHBhZ2VzKSBhcyB3ZWxsIGFzIHRoZSBUTEIKKyAqIHNvIHRoYXQgd2hlbiB3ZSBhcmUgdW5tYXBwaW5nIGFuIGV4ZWN1dGFibGUgcGFnZSwgd2UgYWxzbyBmbHVzaCBpdC4KKyAqIENvbWJpbmVkIHdpdGggZmx1c2hpbmcgdGhlIEwxSSBhdCBjb250ZXh0IHN3aXRjaCB0aW1lLCB0aGlzIG1lYW5zCisgKiB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSBvdGhlciBpY2FjaGUgZmx1c2hlcy4KKyAqLworCit2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlIVl9SZW1vdGVfQVNJRCBhc2lkc1tOUl9DUFVTXTsKKwlpbnQgaSA9IDAsIGNwdTsKKwlmb3JfZWFjaF9jcHUoY3B1LCAmbW0tPmNwdV92bV9tYXNrKSB7CisJCUhWX1JlbW90ZV9BU0lEICphc2lkID0gJmFzaWRzW2krK107CisJCWFzaWQtPnkgPSBjcHUgLyBzbXBfdG9wb2xvZ3kud2lkdGg7CisJCWFzaWQtPnggPSBjcHUgJSBzbXBfdG9wb2xvZ3kud2lkdGg7CisJCWFzaWQtPmFzaWQgPSBwZXJfY3B1KGN1cnJlbnRfYXNpZCwgY3B1KTsKKwl9CisJZmx1c2hfcmVtb3RlKDAsIEhWX0ZMVVNIX0VWSUNUX0wxSSwgJm1tLT5jcHVfdm1fbWFzaywKKwkJICAgICAwLCAwLCAwLCBOVUxMLCBhc2lkcywgaSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2N1cnJlbnRfdGFzayh2b2lkKQoreworCWZsdXNoX3RsYl9tbShjdXJyZW50LT5tbSk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2VfbW0oY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBodl9wYWdlX3NpemUodm1hKTsKKwlpbnQgY2FjaGUgPSAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpID8gSFZfRkxVU0hfRVZJQ1RfTDFJIDogMDsKKwlmbHVzaF9yZW1vdGUoMCwgY2FjaGUsICZtbS0+Y3B1X3ZtX21hc2ssCisJCSAgICAgdmEsIHNpemUsIHNpemUsICZtbS0+Y3B1X3ZtX21hc2ssIE5VTEwsIDApOworfQorCit2b2lkIGZsdXNoX3RsYl9wYWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHZhKQoreworCWZsdXNoX3RsYl9wYWdlX21tKHZtYSwgdm1hLT52bV9tbSwgdmEpOworfQorRVhQT1JUX1NZTUJPTChmbHVzaF90bGJfcGFnZSk7CisKK3ZvaWQgZmx1c2hfdGxiX3JhbmdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGh2X3BhZ2Vfc2l6ZSh2bWEpOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwlpbnQgY2FjaGUgPSAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpID8gSFZfRkxVU0hfRVZJQ1RfTDFJIDogMDsKKwlmbHVzaF9yZW1vdGUoMCwgY2FjaGUsICZtbS0+Y3B1X3ZtX21hc2ssIHN0YXJ0LCBlbmQgLSBzdGFydCwgc2l6ZSwKKwkJICAgICAmbW0tPmNwdV92bV9tYXNrLCBOVUxMLCAwKTsKK30KKwordm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgOyArK2kpIHsKKwkJSFZfVmlydEFkZHJSYW5nZSByID0gaHZfaW5xdWlyZV92aXJ0dWFsKGkpOworCQlpZiAoci5zaXplID09IDApCisJCQlicmVhazsKKwkJZmx1c2hfcmVtb3RlKDAsIEhWX0ZMVVNIX0VWSUNUX0wxSSwgY3B1X29ubGluZV9tYXNrLAorCQkJICAgICByLnN0YXJ0LCByLnNpemUsIFBBR0VfU0laRSwgY3B1X29ubGluZV9tYXNrLAorCQkJICAgICBOVUxMLCAwKTsKKwkJZmx1c2hfcmVtb3RlKDAsIDAsIE5VTEwsCisJCQkgICAgIHIuc3RhcnQsIHIuc2l6ZSwgSFBBR0VfU0laRSwgY3B1X29ubGluZV9tYXNrLAorCQkJICAgICBOVUxMLCAwKTsKKwl9Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlmbHVzaF9yZW1vdGUoMCwgSFZfRkxVU0hfRVZJQ1RfTDFJLCBjcHVfb25saW5lX21hc2ssCisJCSAgICAgc3RhcnQsIGVuZCAtIHN0YXJ0LCBQQUdFX1NJWkUsIGNwdV9vbmxpbmVfbWFzaywgTlVMTCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUva2VybmVsL3RyYXBzLmMgYi9hcmNoL3RpbGUva2VybmVsL3RyYXBzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MGFiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9rZXJuZWwvdHJhcHMuYwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9vcGNvZGUtdGlsZS5oPgorI2luY2x1ZGUgPGFzbS9vcGNvZGVfY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisKKyNpbmNsdWRlIDxhcmNoL2ludGVycnVwdHMuaD4KKyNpbmNsdWRlIDxhcmNoL3Nwcl9kZWYuaD4KKwordm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCit7CisJLyogTm90aGluZyBuZWVkZWQgaGVyZSBzaW5jZSB3ZSBsaW5rIGNvZGUgYXQgLmludHJwdDEgKi8KK30KKworaW50IHVuYWxpZ25lZF9maXh1cCA9IDE7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3VuYWxpZ25lZF9maXh1cChjaGFyICpzdHIpCit7CisJLyoKKwkgKiBTYXkgIj0tMSIgdG8gY29tcGxldGVseSBkaXNhYmxlIGl0LiAgSWYgeW91IGp1c3QgZG8gIj0wIiwgd2UKKwkgKiB3aWxsIHN0aWxsIHBhcnNlIHRoZSBpbnN0cnVjdGlvbiwgdGhlbiBmaXJlIGEgU0lHQlVTIHdpdGgKKwkgKiB0aGUgY29ycmVjdCBhZGRyZXNzIGZyb20gaW5zaWRlIHRoZSBzaW5nbGVfc3RlcCBjb2RlLgorCSAqLworCWxvbmcgdmFsOworCWlmIChzdHJpY3Rfc3RydG9sKHN0ciwgMCwgJnZhbCkgIT0gMCkKKwkJcmV0dXJuIDA7CisJdW5hbGlnbmVkX2ZpeHVwID0gdmFsOworCXByX2luZm8oIkZpeHVwcyBmb3IgdW5hbGlnbmVkIGRhdGEgYWNjZXNzZXMgYXJlICVzXG4iLAorCSAgICAgICB1bmFsaWduZWRfZml4dXAgPj0gMCA/CisJICAgICAgICh1bmFsaWduZWRfZml4dXAgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSA6CisJICAgICAgICJjb21wbGV0ZWx5IGRpc2FibGVkIik7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJ1bmFsaWduZWRfZml4dXA9Iiwgc2V0dXBfdW5hbGlnbmVkX2ZpeHVwKTsKKworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKworc3RhdGljIGludCBkbWFfZGlzYWJsZWQ7CisKK3N0YXRpYyBpbnQgX19pbml0IG5vZG1hKGNoYXIgKnN0cikKK3sKKwlwcl9pbmZvKCJVc2VyLXNwYWNlIERNQSBpcyBkaXNhYmxlZFxuIik7CisJZG1hX2Rpc2FibGVkID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vZG1hIiwgbm9kbWEpOworCisvKiBIb3cgdG8gZGVjb2RlIFNQUl9HUFZfUkVBU09OICovCisjZGVmaW5lIElSRVRfRVJST1IgKDFVIDw8IDMxKQorI2RlZmluZSBNVF9FUlJPUiAgICgxVSA8PCAzMCkKKyNkZWZpbmUgTUZfRVJST1IgICAoMVUgPDwgMjkpCisjZGVmaW5lIFNQUl9JTkRFWCAgKCgxVSA8PCAxNSkgLSAxKQorI2RlZmluZSBTUFJfTVBMX1NISUZUICA5ICAvKiBzdGFydGluZyBiaXQgcG9zaXRpb24gZm9yIE1QTCBlbmNvZGVkIGluIFNQUiAqLworCisvKgorICogU2VlIGlmIHRoaXMgR1BWIGlzIGp1c3QgdG8gbm90aWZ5IHRoZSBrZXJuZWwgb2YgU1BSIHVzZSBhbmQgd2UgY2FuCisgKiByZXRyeSB0aGUgdXNlciBpbnN0cnVjdGlvbiBhZnRlciBhZGp1c3Rpbmcgc29tZSBNUExzIHN1aXRhYmx5LgorICovCitzdGF0aWMgaW50IHJldHJ5X2dwdih1bnNpZ25lZCBpbnQgZ3B2X3JlYXNvbikKK3sKKwlpbnQgbXBsOworCisJaWYgKGdwdl9yZWFzb24gJiBJUkVUX0VSUk9SKQorCQlyZXR1cm4gMDsKKworCUJVR19PTigoZ3B2X3JlYXNvbiAmIChNVF9FUlJPUnxNRl9FUlJPUikpID09IDApOworCW1wbCA9IChncHZfcmVhc29uICYgU1BSX0lOREVYKSA+PiBTUFJfTVBMX1NISUZUOworCWlmIChtcGwgPT0gSU5UX0RNQV9OT1RJRlkgJiYgIWRtYV9kaXNhYmxlZCkgeworCQkvKiBVc2VyIGlzIHR1cm5pbmcgb24gRE1BLiBBbGxvdyBpdCBhbmQgcmV0cnkuICovCisJCXByaW50ayhLRVJOX0RFQlVHICJQcm9jZXNzICVkLyVzIGlzIG5vdyBlbmFibGVkIGZvciBETUFcbiIsCisJCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0pOworCQlCVUdfT04oY3VycmVudC0+dGhyZWFkLnRpbGVfZG1hX3N0YXRlLmVuYWJsZWQpOworCQljdXJyZW50LT50aHJlYWQudGlsZV9kbWFfc3RhdGUuZW5hYmxlZCA9IDE7CisJCWdyYW50X2RtYV9tcGxzKCk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ0hJUF9IQVNfVElMRV9ETUEoKSAqLworCisjaWZkZWYgX190aWxlZ3hfXworI2RlZmluZSBidW5kbGVfYml0cyB0aWxlZ3hfYnVuZGxlX2JpdHMKKyNlbHNlCisjZGVmaW5lIGJ1bmRsZV9iaXRzIHRpbGVfYnVuZGxlX2JpdHMKKyNlbmRpZgorCitleHRlcm4gYnVuZGxlX2JpdHMgYnB0X2NvZGU7CisKK2FzbSgiLnB1c2hzZWN0aW9uIC5yb2RhdGEuYnB0X2NvZGUsXCJhXCI7IgorICAgICIuYWxpZ24gODsiCisgICAgImJwdF9jb2RlOiBicHQ7IgorICAgICIuc2l6ZSBicHRfY29kZSwuLWJwdF9jb2RlOyIKKyAgICAiLnBvcHNlY3Rpb24iKTsKKworc3RhdGljIGludCBzcGVjaWFsX2lsbChidW5kbGVfYml0cyBidW5kbGUsIGludCAqc2lncCwgaW50ICpjb2RlcCkKK3sKKwlpbnQgc2lnLCBjb2RlLCBtYXhjb2RlOworCisJaWYgKGJ1bmRsZSA9PSBicHRfY29kZSkgeworCQkqc2lncCA9IFNJR1RSQVA7CisJCSpjb2RlcCA9IFRSQVBfQlJLUFQ7CisJCXJldHVybiAxOworCX0KKworCS8qIElmIGl0J3MgYSAicmFpc2UiIGJ1bmRsZSwgdGhlbiAiaWxsIiBtdXN0IGJlIGluIHBpcGUgWDEuICovCisjaWZkZWYgX190aWxlZ3hfXworCWlmICgoYnVuZGxlICYgVElMRUdYX0JVTkRMRV9NT0RFX01BU0spICE9IDApCisJCXJldHVybiAwOworCWlmIChnZXRfT3Bjb2RlX1gxKGJ1bmRsZSkgIT0gVU5BUllfT1BDT0RFX1gxKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1gxKGJ1bmRsZSkgIT0gSUxMX1VOQVJZX09QQ09ERV9YMSkKKwkJcmV0dXJuIDA7CisjZWxzZQorCWlmIChidW5kbGUgJiBUSUxFX0JVTkRMRV9ZX0VOQ09ESU5HX01BU0spCisJCXJldHVybiAwOworCWlmIChnZXRfT3Bjb2RlX1gxKGJ1bmRsZSkgIT0gU0hVTl8wX09QQ09ERV9YMSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF9VblNoT3Bjb2RlRXh0ZW5zaW9uX1gxKGJ1bmRsZSkgIT0gVU5fMF9TSFVOXzBfT1BDT0RFX1gxKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X1VuT3Bjb2RlRXh0ZW5zaW9uX1gxKGJ1bmRsZSkgIT0gSUxMX1VOXzBfU0hVTl8wX09QQ09ERV9YMSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKworCS8qIENoZWNrIHRoYXQgdGhlIG1hZ2ljIGRpc3Rpbmd1aXNoZXJzIGFyZSBzZXQgdG8gbWVhbiAicmFpc2UiLiAqLworCWlmIChnZXRfRGVzdF9YMShidW5kbGUpICE9IDI5IHx8IGdldF9TcmNBX1gxKGJ1bmRsZSkgIT0gMzcpCisJCXJldHVybiAwOworCisJLyogVGhlcmUgbXVzdCBiZSBhbiAiYWRkbGkgemVybywgemVybywgVkFMIiBpbiBYMC4gKi8KKwlpZiAoZ2V0X09wY29kZV9YMChidW5kbGUpICE9IEFERExJX09QQ09ERV9YMCkKKwkJcmV0dXJuIDA7CisJaWYgKGdldF9EZXN0X1gwKGJ1bmRsZSkgIT0gVFJFR19aRVJPKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X1NyY0FfWDAoYnVuZGxlKSAhPSBUUkVHX1pFUk8pCisJCXJldHVybiAwOworCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgcHJvcG9zZWQgc2lnbmFsIG51bWJlciBhbmQgc2lfY29kZSB2YWx1ZS4KKwkgKiBOb3RlIHRoYXQgd2UgZW1iZWQgdGhlc2UgaW4gdGhlIHN0YXRpYyBpbnN0cnVjdGlvbiBpdHNlbGYKKwkgKiBzbyB0aGF0IHdlIHBlcnR1cmIgdGhlIHJlZ2lzdGVyIHN0YXRlIGFzIGxpdHRsZSBhcyBwb3NzaWJsZQorCSAqIGF0IHRoZSB0aW1lIG9mIHRoZSBhY3R1YWwgZmF1bHQ7IGl0J3MgdW5saWtlbHkgeW91J2QgZXZlcgorCSAqIG5lZWQgdG8gZHluYW1pY2FsbHkgY2hvb3NlIHdoaWNoIGtpbmQgb2YgZmF1bHQgdG8gcmFpc2UKKwkgKiBmcm9tIHVzZXIgc3BhY2UuCisJICovCisJc2lnID0gZ2V0X0ltbTE2X1gwKGJ1bmRsZSkgJiAweDNmOworCXN3aXRjaCAoc2lnKSB7CisJY2FzZSBTSUdJTEw6CisJCW1heGNvZGUgPSBOU0lHSUxMOworCQlicmVhazsKKwljYXNlIFNJR0ZQRToKKwkJbWF4Y29kZSA9IE5TSUdGUEU7CisJCWJyZWFrOworCWNhc2UgU0lHU0VHVjoKKwkJbWF4Y29kZSA9IE5TSUdTRUdWOworCQlicmVhazsKKwljYXNlIFNJR0JVUzoKKwkJbWF4Y29kZSA9IE5TSUdCVVM7CisJCWJyZWFrOworCWNhc2UgU0lHVFJBUDoKKwkJbWF4Y29kZSA9IE5TSUdUUkFQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJY29kZSA9IChnZXRfSW1tMTZfWDAoYnVuZGxlKSA+PiA2KSAmIDB4ZjsKKwlpZiAoY29kZSA8PSAwIHx8IGNvZGUgPiBtYXhjb2RlKQorCQlyZXR1cm4gMDsKKworCS8qIE1ha2UgaXQgdGhlIHJlcXVlc3RlZCBzaWduYWwuICovCisJKnNpZ3AgPSBzaWc7CisJKmNvZGVwID0gY29kZSB8IF9fU0lfRkFVTFQ7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGRvX3RyYXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBmYXVsdF9udW0sCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHJlYXNvbikKK3sKKwlzaWdpbmZvX3QgaW5mbyA9IHsgMCB9OworCWludCBzaWdubywgY29kZTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJYnVuZGxlX2JpdHMgaW5zdHI7CisKKwkvKiBSZS1lbmFibGUgaW50ZXJydXB0cy4gKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkvKgorCSAqIElmIGl0IGhpdHMgaW4ga2VybmVsIG1vZGUgYW5kIHdlIGNhbid0IGZpeCBpdCB1cCwganVzdCBleGl0IHRoZQorCSAqIGN1cnJlbnQgcHJvY2VzcyBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuCisJICovCisJaWYgKCF1c2VyX21vZGUocmVncykpIHsKKwkJaWYgKGZpeHVwX2V4Y2VwdGlvbihyZWdzKSkgIC8qIG9ubHkgVU5BTElHTl9EQVRBIGluIHByYWN0aWNlICovCisJCQlyZXR1cm47CisJCXByX2FsZXJ0KCJLZXJuZWwgdG9vayBiYWQgdHJhcCAlZCBhdCBQQyAlI2x4XG4iLAorCQkgICAgICAgZmF1bHRfbnVtLCByZWdzLT5wYyk7CisJCWlmIChmYXVsdF9udW0gPT0gSU5UX0dQVikKKwkJCXByX2FsZXJ0KCJHUFZfUkVBU09OIGlzICUjbHhcbiIsIHJlYXNvbik7CisJCXNob3dfcmVncyhyZWdzKTsKKwkJZG9fZXhpdChTSUdLSUxMKTsgIC8qIEZJWE1FOiBpbXBsZW1lbnQgaTM4NiBkaWUoKSAqLworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChmYXVsdF9udW0pIHsKKwljYXNlIElOVF9JTEw6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zdHIsICh2b2lkIF9fdXNlciAqKXJlZ3MtPnBjLAorCQkJCSAgIHNpemVvZihpbnN0cikpKSB7CisJCQlwcl9lcnIoIlVucmVhZGFibGUgaW5zdHJ1Y3Rpb24gZm9yIElOVF9JTEw6IgorCQkJICAgICAgICIgJSNseFxuIiwgcmVncy0+cGMpOworCQkJZG9fZXhpdChTSUdLSUxMKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXNwZWNpYWxfaWxsKGluc3RyLCAmc2lnbm8sICZjb2RlKSkgeworCQkJc2lnbm8gPSBTSUdJTEw7CisJCQljb2RlID0gSUxMX0lMTE9QQzsKKwkJfQorCQlhZGRyZXNzID0gcmVncy0+cGM7CisJCWJyZWFrOworCWNhc2UgSU5UX0dQVjoKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpCisJCWlmIChyZXRyeV9ncHYocmVhc29uKSkKKwkJCXJldHVybjsKKyNlbmRpZgorCQkvKkZBTExUSFJPVUdIKi8KKwljYXNlIElOVF9VRE5fQUNDRVNTOgorCWNhc2UgSU5UX0lETl9BQ0NFU1M6CisjaWYgQ0hJUF9IQVNfU04oKQorCWNhc2UgSU5UX1NOX0FDQ0VTUzoKKyNlbmRpZgorCQlzaWdubyA9IFNJR0lMTDsKKwkJY29kZSA9IElMTF9QUlZSRUc7CisJCWFkZHJlc3MgPSByZWdzLT5wYzsKKwkJYnJlYWs7CisJY2FzZSBJTlRfU1dJTlRfMzoKKwljYXNlIElOVF9TV0lOVF8yOgorCWNhc2UgSU5UX1NXSU5UXzA6CisJCXNpZ25vID0gU0lHSUxMOworCQljb2RlID0gSUxMX0lMTFRSUDsKKwkJYWRkcmVzcyA9IHJlZ3MtPnBjOworCQlicmVhazsKKwljYXNlIElOVF9VTkFMSUdOX0RBVEE6CisjaWZuZGVmIF9fdGlsZWd4X18gIC8qIEZJWE1FOiBHWDogbm8gc2luZ2xlLXN0ZXAgeWV0ICovCisJCWlmICh1bmFsaWduZWRfZml4dXAgPj0gMCkgeworCQkJc3RydWN0IHNpbmdsZV9zdGVwX3N0YXRlICpzdGF0ZSA9CisJCQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGVwX3N0YXRlOworCQkJaWYgKCFzdGF0ZSB8fAorCQkJICAgICh2b2lkIF9fdXNlciAqKShyZWdzLT5wYykgIT0gc3RhdGUtPmJ1ZmZlcikgeworCQkJCXNpbmdsZV9zdGVwX29uY2UocmVncyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisjZW5kaWYKKwkJc2lnbm8gPSBTSUdCVVM7CisJCWNvZGUgPSBCVVNfQURSQUxOOworCQlhZGRyZXNzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlRfRE9VQkxFX0ZBVUxUOgorCQkvKgorCQkgKiBGb3IgZG91YmxlIGZhdWx0LCAicmVhc29uIiBpcyBhY3R1YWxseSBwYXNzZWQgYXMKKwkJICogU1lTVEVNX1NBVkVfMV8yLCB0aGUgaHlwZXJ2aXNvcidzIGRvdWJsZS1mYXVsdCBpbmZvLCBzbworCQkgKiB3ZSBjYW4gcHJvdmlkZSB0aGUgb3JpZ2luYWwgZmF1bHQgbnVtYmVyIHJhdGhlciB0aGFuCisJCSAqIHRoZSB1bmludGVyZXN0aW5nICJJTlRfRE9VQkxFX0ZBVUxUIiBzbyB0aGUgdXNlciBjYW4KKwkJICogbGVhcm4gd2hhdCBhY3R1YWxseSBzdHJ1Y2sgd2hpbGUgUEwwIElDUyB3YXMgc2V0LgorCQkgKi8KKwkJZmF1bHRfbnVtID0gcmVhc29uOworCQlzaWdubyA9IFNJR0lMTDsKKwkJY29kZSA9IElMTF9EQkxGTFQ7CisJCWFkZHJlc3MgPSByZWdzLT5wYzsKKwkJYnJlYWs7CisjaWZkZWYgX190aWxlZ3hfXworCWNhc2UgSU5UX0lMTF9UUkFOUzoKKwkJc2lnbm8gPSBTSUdTRUdWOworCQljb2RlID0gU0VHVl9NQVBFUlI7CisJCWlmIChyZWFzb24gJiBTUFJfSUxMX1RSQU5TX1JFQVNPTl9fSV9TVFJFQU1fVkFfUk1BU0spCisJCQlhZGRyZXNzID0gcmVncy0+cGM7CisJCWVsc2UKKwkJCWFkZHJlc3MgPSAwOyAgLyogRklYTUU6IEdYOiBzaW5nbGUtc3RlcCBmb3IgYWRkcmVzcyAqLworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXBhbmljKCJVbmV4cGVjdGVkIGRvX3RyYXAgaW50ZXJydXB0IG51bWJlciAlZCIsIGZhdWx0X251bSk7CisJCXJldHVybjsKKwl9CisKKwlpbmZvLnNpX3NpZ25vID0gc2lnbm87CisJaW5mby5zaV9jb2RlID0gY29kZTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCWlmIChzaWdubyA9PSBTSUdJTEwpCisJCWluZm8uc2lfdHJhcG5vID0gZmF1bHRfbnVtOworCWZvcmNlX3NpZ19pbmZvKHNpZ25vLCAmaW5mbywgY3VycmVudCk7Cit9CisKK3ZvaWQga2VybmVsX2RvdWJsZV9mYXVsdChpbnQgZHVtbXksIHVsb25nIHBjLCB1bG9uZyBsciwgdWxvbmcgc3AsIHVsb25nIHI1MikKK3sKKwlfZHVtcF9zdGFjayhkdW1teSwgcGMsIGxyLCBzcCwgcjUyKTsKKwlwcl9lbWVyZygiRG91YmxlIGZhdWx0OiBleGl0aW5nXG4iKTsKKwltYWNoaW5lX2hhbHQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdGlsZS9rZXJuZWwvdm1saW51eC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWZkYzBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisvKiBUZXh0IGxvYWRzIHN0YXJ0aW5nIGZyb20gdGhlIHN1cGVydmlzb3IgaW50ZXJydXB0IHZlY3RvciBhZGRyZXNzLiAqLworI2RlZmluZSBURVhUX09GRlNFVCBNRU1fU1ZfSU5UUlBUCisKK09VVFBVVF9BUkNIKHRpbGUpCitFTlRSWShfc3RhcnQpCitqaWZmaWVzID0gamlmZmllc182NDsKKworUEhEUlMKK3sKKyAgaW50cnB0MSBQVF9MT0FEIDsKKyAgdGV4dCBQVF9MT0FEIDsKKyAgZGF0YSBQVF9MT0FEIDsKK30KK1NFQ1RJT05TCit7CisgIC8qIFRleHQgaXMgbG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgVkEgdGhhbiBkYXRhOyBzdGFydCB3aXRoIHRleHQuICovCisgICN1bmRlZiBMT0FEX09GRlNFVAorICAjZGVmaW5lIExPQURfT0ZGU0VUIFRFWFRfT0ZGU0VUCisKKyAgLyogSW50ZXJydXB0IHZlY3RvcnMgKi8KKyAgLmludHJwdDEgKExPQURfT0ZGU0VUKSA6IEFUICggMCApICAgLyogcHV0IGF0IHRoZSBzdGFydCBvZiBwaHlzaWNhbCBtZW1vcnkgKi8KKyAgeworICAgIF90ZXh0ID0gLjsKKyAgICBfc3RleHQgPSAuOworICAgICooLmludHJwdDEpCisgIH0gOmludHJwdDEgPTAKKworICAvKiBIeXBlcnZpc29yIGNhbGwgdmVjdG9ycyAqLworICAjaW5jbHVkZSAiaHZnbHVlLmxkcyIKKworICAvKiBOb3cgdGhlIHJlYWwgY29kZSAqLworICAuID0gQUxJR04oMHgyMDAwMCk7CisgIC50ZXh0IDogQVQgKEFERFIoLnRleHQpIC0gTE9BRF9PRkZTRVQpIHsKKyAgICBIRUFEX1RFWFQKKyAgICBTQ0hFRF9URVhUCisgICAgTE9DS19URVhUCisgICAgX19maXhfdGV4dF9lbmQgPSAuOyAgIC8qIHRpbGUtY3BhY2sgd29uJ3QgcmVhcnJhbmdlIGJlZm9yZSB0aGlzICovCisgICAgVEVYVF9URVhUCisgICAgKigudGV4dC4qKQorICAgICooLmNvbGR0ZXh0KikKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nbnUud2FybmluZykKKyAgfSA6dGV4dCA9MAorICBfZXRleHQgPSAuOworCisgIC8qICJJbml0IiBpcyBkaXZpZGVkIGludG8gdHdvIGFyZWFzIHdpdGggdmVyeSBkaWZmZXJlbnQgdmlydHVhbCBhZGRyZXNzZXMuICovCisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKKworICAvKiBOb3cgd2Ugc2tpcCBiYWNrIHRvIFBBR0VfT0ZGU0VUIGZvciB0aGUgZGF0YS4gKi8KKyAgLiA9ICguIC0gVEVYVF9PRkZTRVQgKyBQQUdFX09GRlNFVCk7CisgICN1bmRlZiBMT0FEX09GRlNFVAorICAjZGVmaW5lIExPQURfT0ZGU0VUIFBBR0VfT0ZGU0VUCisKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CisgIFZNTElOVVhfU1lNQk9MKF9zaW5pdGRhdGEpID0gLjsKKyAgLmluaXQucGFnZSA6IEFUIChBRERSKC5pbml0LnBhZ2UpIC0gTE9BRF9PRkZTRVQpIHsKKyAgICAqKC5pbml0LnBhZ2UpCisgIH0gOmRhdGEgPTAKKyAgSU5JVF9EQVRBX1NFQ1RJT04oMTYpCisgIFBFUkNQVShQQUdFX1NJWkUpCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOworICBWTUxJTlVYX1NZTUJPTChfZWluaXRkYXRhKSA9IC47CisKKyAgX3NkYXRhID0gLjsgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgb2YgZGF0YSBzZWN0aW9uICovCisKKyAgUk9fREFUQV9TRUNUSU9OKFBBR0VfU0laRSkKKworICAvKiBpbml0aWFsbHkgd3JpdGVhYmxlLCB0aGVuIHJlYWQtb25seSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKKyAgX193MWRhdGFfYmVnaW4gPSAuOworICAudzFkYXRhIDogQVQoQUREUigudzFkYXRhKSAtIExPQURfT0ZGU0VUKSB7CisgICAgVk1MSU5VWF9TWU1CT0woX193MWRhdGFfYmVnaW4pID0gLjsKKyAgICAqKC53MWRhdGEpCisgICAgVk1MSU5VWF9TWU1CT0woX193MWRhdGFfZW5kKSA9IC47CisgIH0KKworICBSV19EQVRBX1NFQ1RJT04oTDJfQ0FDSEVfQllURVMsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCisKKyAgX2VkYXRhID0gLjsKKworICBFWENFUFRJT05fVEFCTEUoTDJfQ0FDSEVfQllURVMpCisgIE5PVEVTCisKKworICBCU1NfU0VDVElPTig4LCBQQUdFX1NJWkUsIDEpCisgIF9lbmQgPSAuIDsKKworICBTVEFCU19ERUJVRworICBEV0FSRl9ERUJVRworCisgIERJU0NBUkRTCit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL01ha2VmaWxlIGIvYXJjaC90aWxlL2xpYi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzhhZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2xpYi9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACisjCisjIE1ha2VmaWxlIGZvciBUSUxFLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgorIworCitsaWIteSA9IGNhY2hlZmx1c2gubyBjaGVja3N1bS5vIGNwdW1hc2subyBkZWxheS5vIFwKKwltYl9pbmNvaGVyZW50Lm8gdWFjY2Vzcy5vIFwKKwltZW1jcHlfJChCSVRTKS5vIG1lbWNocl8kKEJJVFMpLm8gbWVtbW92ZV8kKEJJVFMpLm8gbWVtc2V0XyQoQklUUykubyBcCisJc3RyY2hyXyQoQklUUykubyBzdHJsZW5fJChCSVRTKS5vCisKK2lmbmVxICgkKENPTkZJR19USUxFR1gpLHkpCitsaWIteSArPSBhdG9taWNfMzIubyBhdG9taWNfYXNtXzMyLm8gbWVtY3B5X3RpbGU2NC5vCitlbmRpZgorCitsaWItJChDT05GSUdfU01QKSArPSBzcGlubG9ja18kKEJJVFMpLm8gdXNlcmNvcHlfJChCSVRTKS5vCisKK29iai0kKENPTkZJR19NT0RVTEVTKSArPSBleHBvcnRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvYXRvbWljXzMyLmMgYi9hcmNoL3RpbGUvbGliL2F0b21pY18zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDBiNDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL2F0b21pY18zMi5jCkBAIC0wLDAgKzEsMzMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9mdXRleC5oPgorI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisvKiBTZWUgPGFzbS9hdG9taWNfMzIuaD4gKi8KKyNpZiBBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkKKworLyoKKyAqIEEgYmxvY2sgb2YgbWVtb3J5IGNvbnRhaW5pbmcgbG9ja3MgZm9yIGF0b21pYyBvcHMuIEVhY2ggaW5zdGFuY2Ugb2YgdGhpcworICogc3RydWN0IHdpbGwgYmUgaG9tZWQgb24gYSBkaWZmZXJlbnQgQ1BVLgorICovCitzdHJ1Y3QgYXRvbWljX2xvY2tzX29uX2NwdSB7CisJaW50IGxvY2tbQVRPTUlDX0hBU0hfTDJfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoQVRPTUlDX0hBU0hfTDJfU0laRSAqIDQpKSk7CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYXRvbWljX2xvY2tzX29uX2NwdSwgYXRvbWljX2xvY2tfcG9vbCk7CisKKy8qIFRoZSBsb2NrcyB3ZSdsbCB1c2UgdW50aWwgX19pbml0X2F0b21pY19wZXJfY3B1IGlzIGNhbGxlZC4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXRvbWljX2xvY2tzX29uX2NwdSBfX2luaXRkYXRhIGluaXRpYWxfYXRvbWljX2xvY2tzOworCisvKiBIYXNoIGludG8gdGhpcyB2ZWN0b3IgdG8gZ2V0IGEgcG9pbnRlciB0byBsb2NrIGZvciB0aGUgZ2l2ZW4gYXRvbWljLiAqLworc3RydWN0IGF0b21pY19sb2Nrc19vbl9jcHUgKmF0b21pY19sb2NrX3B0cltBVE9NSUNfSEFTSF9MMV9TSVpFXQorCV9fd3JpdGVfb25jZSA9IHsKKwlbMCAuLi4gQVRPTUlDX0hBU0hfTDFfU0laRS0xXSAoJmluaXRpYWxfYXRvbWljX2xvY2tzKQorfTsKKworI2Vsc2UgLyogQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpICovCisKKy8qIFRoaXMgcGFnZSBpcyByZW1hcHBlZCBvbiBzdGFydHVwIHRvIGJlIGhhc2gtZm9yLWhvbWUuICovCitpbnQgYXRvbWljX2xvY2tzW1BBR0VfU0laRSAvIHNpemVvZihpbnQpIC8qIE9ubHkgQVRPTUlDX0hBU0hfU0laRSBpcyB1c2VkICovXQorICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSksIHNlY3Rpb24oIi5ic3MucGFnZV9hbGlnbmVkIikpKTsKKworI2VuZGlmIC8qIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKSAqLworCitzdGF0aWMgaW5saW5lIGludCAqX19hdG9taWNfaGFzaGVkX2xvY2sodm9sYXRpbGUgdm9pZCAqdikKK3sKKwkvKiBOT1RFOiB0aGlzIGNvZGUgbXVzdCBtYXRjaCAic3lzX2NtcHhjaGciIGluIGtlcm5lbC9pbnR2ZWMuUyAqLworI2lmIEFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQorCXVuc2lnbmVkIGxvbmcgaSA9CisJCSh1bnNpZ25lZCBsb25nKSB2ICYgKChQQUdFX1NJWkUtMSkgJiAtc2l6ZW9mKGxvbmcgbG9uZykpOworCXVuc2lnbmVkIGxvbmcgbiA9IF9faW5zbl9jcmMzMl8zMigwLCBpKTsKKworCS8qIEdyYWIgaGlnaCBiaXRzIGZvciBMMSBpbmRleC4gKi8KKwl1bnNpZ25lZCBsb25nIGwxX2luZGV4ID0gbiA+PiAoKHNpemVvZihuKSAqIDgpIC0gQVRPTUlDX0hBU0hfTDFfU0hJRlQpOworCS8qIEdyYWIgbG93IGJpdHMgZm9yIEwyIGluZGV4LiAqLworCXVuc2lnbmVkIGxvbmcgbDJfaW5kZXggPSBuICYgKEFUT01JQ19IQVNIX0wyX1NJWkUgLSAxKTsKKworCXJldHVybiAmYXRvbWljX2xvY2tfcHRyW2wxX2luZGV4XS0+bG9ja1tsMl9pbmRleF07CisjZWxzZQorCS8qCisJICogVXNlIGJpdHMgWzMsIDMgKyBBVE9NSUNfSEFTSF9TSElGVCkgYXMgdGhlIGxvY2sgaW5kZXguCisJICogVXNpbmcgbW0gd29ya3MgaGVyZSBiZWNhdXNlIGF0b21pY19sb2NrcyBpcyBwYWdlIGFsaWduZWQuCisJICovCisJdW5zaWduZWQgbG9uZyBwdHIgPSBfX2luc25fbW0oKHVuc2lnbmVkIGxvbmcpdiA+PiAxLAorCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKWF0b21pY19sb2NrcywKKwkJCQkgICAgICAyLCAoQVRPTUlDX0hBU0hfU0hJRlQgKyAyKSAtIDEpOworCXJldHVybiAoaW50ICopcHRyOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfU01QCisvKiBSZXR1cm4gd2hldGhlciB0aGUgcGFzc2VkIHBvaW50ZXIgaXMgYSB2YWxpZCBhdG9taWMgbG9jayBwb2ludGVyLiAqLworc3RhdGljIGludCBpc19hdG9taWNfbG9jayhpbnQgKnApCit7CisjaWYgQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFUT01JQ19IQVNIX0wxX1NJWkU7ICsraSkgeworCisJCWlmIChwID49ICZhdG9taWNfbG9ja19wdHJbaV0tPmxvY2tbMF0gJiYKKwkJICAgIHAgPCAmYXRvbWljX2xvY2tfcHRyW2ldLT5sb2NrW0FUT01JQ19IQVNIX0wyX1NJWkVdKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIHAgPj0gJmF0b21pY19sb2Nrc1swXSAmJiBwIDwgJmF0b21pY19sb2Nrc1tBVE9NSUNfSEFTSF9TSVpFXTsKKyNlbmRpZgorfQorCit2b2lkIF9fYXRvbWljX2ZhdWx0X3VubG9jayhpbnQgKmlycWxvY2tfd29yZCkKK3sKKwlCVUdfT04oIWlzX2F0b21pY19sb2NrKGlycWxvY2tfd29yZCkpOworCUJVR19PTigqaXJxbG9ja193b3JkICE9IDEpOworCSppcnFsb2NrX3dvcmQgPSAwOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgaW5saW5lIGludCAqX19hdG9taWNfc2V0dXAodm9sYXRpbGUgdm9pZCAqdikKK3sKKwkvKiBJc3N1ZSBhIGxvYWQgdG8gdGhlIHRhcmdldCB0byBicmluZyBpdCBpbnRvIGNhY2hlLiAqLworCSoodm9sYXRpbGUgaW50ICopdjsKKwlyZXR1cm4gX19hdG9taWNfaGFzaGVkX2xvY2sodik7Cit9CisKK2ludCBfYXRvbWljX3hjaGcoYXRvbWljX3QgKnYsIGludCBuKQoreworCXJldHVybiBfX2F0b21pY194Y2hnKCZ2LT5jb3VudGVyLCBfX2F0b21pY19zZXR1cCh2KSwgbikudmFsOworfQorRVhQT1JUX1NZTUJPTChfYXRvbWljX3hjaGcpOworCitpbnQgX2F0b21pY194Y2hnX2FkZChhdG9taWNfdCAqdiwgaW50IGkpCit7CisJcmV0dXJuIF9fYXRvbWljX3hjaGdfYWRkKCZ2LT5jb3VudGVyLCBfX2F0b21pY19zZXR1cCh2KSwgaSkudmFsOworfQorRVhQT1JUX1NZTUJPTChfYXRvbWljX3hjaGdfYWRkKTsKKworaW50IF9hdG9taWNfeGNoZ19hZGRfdW5sZXNzKGF0b21pY190ICp2LCBpbnQgYSwgaW50IHUpCit7CisJLyoKKwkgKiBOb3RlOiBhcmd1bWVudCBvcmRlciBpcyBzd2l0Y2hlZCBoZXJlIHNpbmNlIGl0IGlzIGVhc2llcgorCSAqIHRvIHVzZSB0aGUgZmlyc3QgYXJndW1lbnQgY29uc2lzdGVudGx5IGFzIHRoZSAib2xkIHZhbHVlIgorCSAqIGluIHRoZSBhc3NlbWJseSwgYXMgaXMgZG9uZSBmb3IgX2F0b21pY19jbXB4Y2hnKCkuCisJICovCisJcmV0dXJuIF9fYXRvbWljX3hjaGdfYWRkX3VubGVzcygmdi0+Y291bnRlciwgX19hdG9taWNfc2V0dXAodiksIHUsIGEpCisJCS52YWw7Cit9CitFWFBPUlRfU1lNQk9MKF9hdG9taWNfeGNoZ19hZGRfdW5sZXNzKTsKKworaW50IF9hdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG8sIGludCBuKQoreworCXJldHVybiBfX2F0b21pY19jbXB4Y2hnKCZ2LT5jb3VudGVyLCBfX2F0b21pY19zZXR1cCh2KSwgbywgbikudmFsOworfQorRVhQT1JUX1NZTUJPTChfYXRvbWljX2NtcHhjaGcpOworCit1bnNpZ25lZCBsb25nIF9hdG9taWNfb3Iodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCXJldHVybiBfX2F0b21pY19vcigoaW50ICopcCwgX19hdG9taWNfc2V0dXAocCksIG1hc2spLnZhbDsKK30KK0VYUE9SVF9TWU1CT0woX2F0b21pY19vcik7CisKK3Vuc2lnbmVkIGxvbmcgX2F0b21pY19hbmRuKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnAsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlyZXR1cm4gX19hdG9taWNfYW5kbigoaW50ICopcCwgX19hdG9taWNfc2V0dXAocCksIG1hc2spLnZhbDsKK30KK0VYUE9SVF9TWU1CT0woX2F0b21pY19hbmRuKTsKKwordW5zaWduZWQgbG9uZyBfYXRvbWljX3hvcih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpwLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJcmV0dXJuIF9fYXRvbWljX3hvcigoaW50ICopcCwgX19hdG9taWNfc2V0dXAocCksIG1hc2spLnZhbDsKK30KK0VYUE9SVF9TWU1CT0woX2F0b21pY194b3IpOworCisKK3U2NCBfYXRvbWljNjRfeGNoZyhhdG9taWM2NF90ICp2LCB1NjQgbikKK3sKKwlyZXR1cm4gX19hdG9taWM2NF94Y2hnKCZ2LT5jb3VudGVyLCBfX2F0b21pY19zZXR1cCh2KSwgbik7Cit9CitFWFBPUlRfU1lNQk9MKF9hdG9taWM2NF94Y2hnKTsKKwordTY0IF9hdG9taWM2NF94Y2hnX2FkZChhdG9taWM2NF90ICp2LCB1NjQgaSkKK3sKKwlyZXR1cm4gX19hdG9taWM2NF94Y2hnX2FkZCgmdi0+Y291bnRlciwgX19hdG9taWNfc2V0dXAodiksIGkpOworfQorRVhQT1JUX1NZTUJPTChfYXRvbWljNjRfeGNoZ19hZGQpOworCit1NjQgX2F0b21pYzY0X3hjaGdfYWRkX3VubGVzcyhhdG9taWM2NF90ICp2LCB1NjQgYSwgdTY0IHUpCit7CisJLyoKKwkgKiBOb3RlOiBhcmd1bWVudCBvcmRlciBpcyBzd2l0Y2hlZCBoZXJlIHNpbmNlIGl0IGlzIGVhc2llcgorCSAqIHRvIHVzZSB0aGUgZmlyc3QgYXJndW1lbnQgY29uc2lzdGVudGx5IGFzIHRoZSAib2xkIHZhbHVlIgorCSAqIGluIHRoZSBhc3NlbWJseSwgYXMgaXMgZG9uZSBmb3IgX2F0b21pY19jbXB4Y2hnKCkuCisJICovCisJcmV0dXJuIF9fYXRvbWljNjRfeGNoZ19hZGRfdW5sZXNzKCZ2LT5jb3VudGVyLCBfX2F0b21pY19zZXR1cCh2KSwKKwkJCQkJICB1LCBhKTsKK30KK0VYUE9SVF9TWU1CT0woX2F0b21pYzY0X3hjaGdfYWRkX3VubGVzcyk7CisKK3U2NCBfYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LCB1NjQgbywgdTY0IG4pCit7CisJcmV0dXJuIF9fYXRvbWljNjRfY21weGNoZygmdi0+Y291bnRlciwgX19hdG9taWNfc2V0dXAodiksIG8sIG4pOworfQorRVhQT1JUX1NZTUJPTChfYXRvbWljNjRfY21weGNoZyk7CisKKworc3RhdGljIGlubGluZSBpbnQgKl9fZnV0ZXhfc2V0dXAoaW50IF9fdXNlciAqdikKK3sKKwkvKgorCSAqIElzc3VlIGEgcHJlZmV0Y2ggdG8gdGhlIGNvdW50ZXIgdG8gYnJpbmcgaXQgaW50byBjYWNoZS4KKwkgKiBBcyBmb3IgX19hdG9taWNfc2V0dXAsIGJ1dCB3ZSBjYW4ndCBkbyBhIHJlYWQgaW50byB0aGUgTDEKKwkgKiBzaW5jZSBpdCBtaWdodCBmYXVsdDsgaW5zdGVhZCB3ZSBkbyBhIHByZWZldGNoIGludG8gdGhlIEwyLgorCSAqLworCV9faW5zbl9wcmVmZXRjaCh2KTsKKwlyZXR1cm4gX19hdG9taWNfaGFzaGVkX2xvY2soKGludCBfX2ZvcmNlICopdik7Cit9CisKK3N0cnVjdCBfX2dldF91c2VyIGZ1dGV4X3NldChpbnQgX191c2VyICp2LCBpbnQgaSkKK3sKKwlyZXR1cm4gX19hdG9taWNfeGNoZygoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBpKTsKK30KKworc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfYWRkKGludCBfX3VzZXIgKnYsIGludCBuKQoreworCXJldHVybiBfX2F0b21pY194Y2hnX2FkZCgoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBuKTsKK30KKworc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfb3IoaW50IF9fdXNlciAqdiwgaW50IG4pCit7CisJcmV0dXJuIF9fYXRvbWljX29yKChpbnQgX19mb3JjZSAqKXYsIF9fZnV0ZXhfc2V0dXAodiksIG4pOworfQorCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF9hbmRuKGludCBfX3VzZXIgKnYsIGludCBuKQoreworCXJldHVybiBfX2F0b21pY19hbmRuKChpbnQgX19mb3JjZSAqKXYsIF9fZnV0ZXhfc2V0dXAodiksIG4pOworfQorCitzdHJ1Y3QgX19nZXRfdXNlciBmdXRleF94b3IoaW50IF9fdXNlciAqdiwgaW50IG4pCit7CisJcmV0dXJuIF9fYXRvbWljX3hvcigoaW50IF9fZm9yY2UgKil2LCBfX2Z1dGV4X3NldHVwKHYpLCBuKTsKK30KKworc3RydWN0IF9fZ2V0X3VzZXIgZnV0ZXhfY21weGNoZyhpbnQgX191c2VyICp2LCBpbnQgbywgaW50IG4pCit7CisJcmV0dXJuIF9fYXRvbWljX2NtcHhjaGcoKGludCBfX2ZvcmNlICopdiwgX19mdXRleF9zZXR1cCh2KSwgbywgbik7Cit9CisKKy8qCisgKiBJZiBhbnkgb2YgdGhlIGF0b21pYyBvciBmdXRleCByb3V0aW5lcyBoaXQgYSBiYWQgYWRkcmVzcyAobm90IGluCisgKiB0aGUgcGFnZSB0YWJsZXMgYXQga2VybmVsIFBMKSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhlIGZ1dGV4CisgKiByb3V0aW5lcyBhcmUgbmV2ZXIgdXNlZCBvbiBrZXJuZWwgc3BhY2UsIGFuZCB0aGUgbm9ybWFsIGF0b21pY3MgYW5kCisgKiBiaXRvcHMgYXJlIG5ldmVyIHVzZWQgb24gdXNlciBzcGFjZS4gIFNvIGEgZmF1bHQgb24ga2VybmVsIHNwYWNlCisgKiBtdXN0IGJlIGZhdGFsLCBidXQgYSBmYXVsdCBvbiB1c2Vyc3BhY2UgaXMgYSBmdXRleCBmYXVsdCBhbmQgd2UKKyAqIG5lZWQgdG8gcmV0dXJuIC1FRkFVTFQuICBOb3RlIHRoYXQgdGhlIGNvbnRleHQgdGhpcyByb3V0aW5lIGlzCisgKiBpbnZva2VkIGluIGlzIHRoZSBjb250ZXh0IG9mIHRoZSAiX2F0b21pY194eHgoKSIgcm91dGluZXMgY2FsbGVkCisgKiBieSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZS4KKyAqLworc3RydWN0IF9fZ2V0X3VzZXIgX19hdG9taWNfYmFkX2FkZHJlc3MoaW50IF9fdXNlciAqYWRkcikKK3sKKwlpZiAodW5saWtlbHkoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGFkZHIsIHNpemVvZihpbnQpKSkpCisJCXBhbmljKCJCYWQgYWRkcmVzcyB1c2VkIGZvciBrZXJuZWwgYXRvbWljIG9wOiAlcFxuIiwgYWRkcik7CisJcmV0dXJuIChzdHJ1Y3QgX19nZXRfdXNlcikgeyAuZXJyID0gLUVGQVVMVCB9OworfQorCisKKyNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKK3N0YXRpYyBpbnQgX19pbml0IG5vYXRvbWljaGFzaChjaGFyICpzdHIpCit7CisJcHJfd2FybmluZygibm9hdG9taWNoYXNoIGlzIGRlcHJlY2F0ZWQuXG4iKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vYXRvbWljaGFzaCIsIG5vYXRvbWljaGFzaCk7CisjZW5kaWYKKwordm9pZCBfX2luaXQgX19pbml0X2F0b21pY19wZXJfY3B1KHZvaWQpCit7CisjaWYgQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpCisKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgYWN0dWFsX2NwdTsKKworCS8qCisJICogQmVmb3JlIHRoaXMgaXMgY2FsbGVkIGZyb20gc2V0dXAsIHdlIGp1c3QgaGF2ZSBvbmUgbG9jayBmb3IKKwkgKiBhbGwgYXRvbWljIG9iamVjdHMvb3BlcmF0aW9ucy4gIEhlcmUgd2UgcmVwbGFjZSB0aGUKKwkgKiBlbGVtZW50cyBvZiBhdG9taWNfbG9ja19wdHIgc28gdGhhdCB0aGV5IHBvaW50IGF0IHBlcl9jcHUKKwkgKiBpbnRlZ2Vycy4gIFRoaXMgc2VlbWluZ2x5IG92ZXItY29tcGxleCBhcHByb2FjaCBzdGVtcyBmcm9tCisJICogdGhlIGZhY3QgdGhhdCBERUZJTkVfUEVSX0NQVSBkZWZpbmVzIGFuIGVudHJ5IGZvciBlYWNoIGNwdQorCSAqIGluIHRoZSBncmlkLCBub3QgZWFjaCBjcHUgZnJvbSAwLi5BVE9NSUNfSEFTSF9TSVpFLTEuICBCdXQKKwkgKiBmb3IgZWZmaWNpZW50IGhhc2hpbmcgb2YgYXRvbWljcyB0byB0aGVpciBsb2NrcyB3ZSB3YW50IGEKKwkgKiBjb21waWxlIHRpbWUgY29uc3RhbnQgcG93ZXIgb2YgMiBmb3IgdGhlIHNpemUgb2YgdGhpcworCSAqIHRhYmxlLCBzbyB3ZSB1c2UgQVRPTUlDX0hBU0hfU0laRS4KKwkgKgorCSAqIEhlcmUgd2UgcG9wdWxhdGUgYXRvbWljX2xvY2tfcHRyIGZyb20gdGhlIHBlciBjcHUKKwkgKiBhdG9taWNfbG9ja19wb29sLCBpbnRlcnNwZXJzaW5nIGJ5IGFjdHVhbCBjcHUgc28gdGhhdAorCSAqIHN1YnNlcXVlbnQgZWxlbWVudHMgYXJlIGhvbWVkIG9uIGNvbnNlY3V0aXZlIGNwdXMuCisJICovCisKKwlhY3R1YWxfY3B1ID0gY3B1bWFza19maXJzdChjcHVfcG9zc2libGVfbWFzayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRPTUlDX0hBU0hfTDFfU0laRTsgKytpKSB7CisJCS8qCisJCSAqIFByZWluY3JlbWVudCB0byBzbGlnaHRseSBiaWFzIGFnYWluc3QgdXNpbmcgY3B1IDAsCisJCSAqIHdoaWNoIGhhcyBwbGVudHkgb2Ygc3R1ZmYgaG9tZWQgb24gaXQgYWxyZWFkeS4KKwkJICovCisJCWFjdHVhbF9jcHUgPSBjcHVtYXNrX25leHQoYWN0dWFsX2NwdSwgY3B1X3Bvc3NpYmxlX21hc2spOworCQlpZiAoYWN0dWFsX2NwdSA+PSBucl9jcHVfaWRzKQorCQkJYWN0dWFsX2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X3Bvc3NpYmxlX21hc2spOworCisJCWF0b21pY19sb2NrX3B0cltpXSA9ICZwZXJfY3B1KGF0b21pY19sb2NrX3Bvb2wsIGFjdHVhbF9jcHUpOworCX0KKworI2Vsc2UgLyogQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpICovCisKKwkvKiBWYWxpZGF0ZSBwb3dlci1vZi10d28gYW5kICJiaWdnZXIgdGhhbiBjcHVzIiBhc3N1bXB0aW9uICovCisJQlVHX09OKEFUT01JQ19IQVNIX1NJWkUgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSk7CisJQlVHX09OKEFUT01JQ19IQVNIX1NJWkUgPCBucl9jcHVfaWRzKTsKKworCS8qCisJICogT24gVElMRVBybyB3ZSBwcmVmZXIgdG8gdXNlIGEgc2luZ2xlIGhhc2gtZm9yLWhvbWUKKwkgKiBwYWdlLCBzaW5jZSB0aGlzIG1lYW5zIGF0b21pYyBvcGVyYXRpb25zIGFyZSBsZXNzCisJICogbGlrZWx5IHRvIGVuY291bnRlciBhIFRMQiBmYXVsdCBhbmQgdGh1cyBzaG91bGQKKwkgKiBpbiBnZW5lcmFsIHBlcmZvcm0gZmFzdGVyLiAgWW91IG1heSB3aXNoIHRvIGRpc2FibGUKKwkgKiB0aGlzIGluIHNpdHVhdGlvbnMgd2hlcmUgZmV3IGhhc2gtZm9yLWhvbWUgdGlsZXMKKwkgKiBhcmUgY29uZmlndXJlZC4KKwkgKi8KKwlCVUdfT04oKHVuc2lnbmVkIGxvbmcpYXRvbWljX2xvY2tzICUgUEFHRV9TSVpFICE9IDApOworCisJLyogVGhlIGxvY2tzIG11c3QgYWxsIGZpdCBvbiBvbmUgcGFnZS4gKi8KKwlCVUdfT04oQVRPTUlDX0hBU0hfU0laRSAqIHNpemVvZihpbnQpID4gUEFHRV9TSVpFKTsKKworCS8qCisJICogV2UgdXNlIHRoZSBwYWdlIG9mZnNldCBvZiB0aGUgYXRvbWljIHZhbHVlJ3MgYWRkcmVzcyBhcworCSAqIGFuIGluZGV4IGludG8gYXRvbWljX2xvY2tzLCBleGNsdWRpbmcgdGhlIGxvdyAzIGJpdHMuCisJICogVGhhdCBzaG91bGQgbm90IHByb2R1Y2UgbW9yZSBpbmRpY2VzIHRoYW4gQVRPTUlDX0hBU0hfU0laRS4KKwkgKi8KKwlCVUdfT04oKFBBR0VfU0laRSA+PiAzKSA+IEFUT01JQ19IQVNIX1NJWkUpOworCisjZW5kaWYgLyogQVRPTUlDX0xPQ0tTX0ZPVU5EX1ZJQV9UQUJMRSgpICovCisKKwkvKiBUaGUgZnV0ZXggY29kZSBtYWtlcyB0aGlzIGFzc3VtcHRpb24sIHNvIHdlIHZhbGlkYXRlIGl0IGhlcmUuICovCisJQlVHX09OKHNpemVvZihhdG9taWNfdCkgIT0gc2l6ZW9mKGludCkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9hdG9taWNfYXNtXzMyLlMgYi9hcmNoL3RpbGUvbGliL2F0b21pY19hc21fMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTU1MTRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2xpYi9hdG9taWNfYXNtXzMyLlMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogU3VwcG9ydCByb3V0aW5lcyBmb3IgYXRvbWljIG9wZXJhdGlvbnMuICBFYWNoIGZ1bmN0aW9uIHRha2VzOgorICoKKyAqIHIwOiBhZGRyZXNzIHRvIG1hbmlwdWxhdGUKKyAqIHIxOiBwb2ludGVyIHRvIGF0b21pYyBsb2NrIGd1YXJkaW5nIHRoaXMgb3BlcmF0aW9uIChmb3IgRlVURVhfTE9DS19SRUcpCisgKiByMjogbmV3IHZhbHVlIHRvIHdyaXRlLCBvciBmb3IgY21weGNoZy9hZGRfdW5sZXNzLCB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QKKyAqIHIzOiAoY21weGNoZy94Y2hnX2FkZF91bmxlc3MpIG5ldyB2YWx1ZSB0byB3cml0ZSBvciBhZGQ7CisgKiAgICAgKGF0b21pYzY0IG9wcykgaGlnaCB3b3JkIG9mIHZhbHVlIHRvIHdyaXRlCisgKiByNC9yNTogKGNtcHhjaGc2NC9hZGRfdW5sZXNzNjQpIG5ldyB2YWx1ZSB0byB3cml0ZSBvciBhZGQKKyAqCisgKiBUaGUgMzItYml0IHJvdXRpbmVzIHJldHVybiBhICJzdHJ1Y3QgX19nZXRfdXNlciIgc28gdGhhdCB0aGUgZnV0ZXggY29kZQorICogaGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJldHVybiAtRUZBVUxUIHRvIHRoZSB1c2VyIGlmIG5lZWRlZC4KKyAqIFRoZSA2NC1iaXQgcm91dGluZXMganVzdCByZXR1cm4gYSAibG9uZyBsb25nIiB3aXRoIHRoZSB2YWx1ZSwKKyAqIHNpbmNlIHRoZXkgYXJlIG9ubHkgdXNlZCBmcm9tIGtlcm5lbCBzcGFjZSBhbmQgZG9uJ3QgZXhwZWN0IHRvIGZhdWx0LgorICogU3VwcG9ydCBmb3IgMTYtYml0IG9wcyBpcyBpbmNsdWRlZCBpbiB0aGUgZnJhbWV3b3JrIGJ1dCB3ZSBkb24ndCBwcm92aWRlCisgKiBhbnkgKHg4Nl82NCBoYXMgYW4gYXRvbWljX2luY19zaG9ydCgpLCBzbyB3ZSBtaWdodCB3YW50IHRvIHNvbWUgZGF5KS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGNhbGxlciBpcyBhZHZpc2VkIHRvIGlzc3VlIGEgc3VpdGFibGUgTDEgb3IgTDIKKyAqIHByZWZldGNoIG9uIHRoZSBhZGRyZXNzIGJlaW5nIG1hbmlwdWxhdGVkIHRvIGF2b2lkIGV4dHJhIHN0YWxscy4KKyAqIEluIGFkZGl0aW9uLCB0aGUgaG90IHBhdGggaXMgb24gdHdvIGljYWNoZSBsaW5lcywgYW5kIHdlIHN0YXJ0IHdpdGgKKyAqIGEganVtcCB0byB0aGUgc2Vjb25kIGxpbmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGJvdGggaW4gY2FjaGUgc28KKyAqIHRoYXQgd2UgbmV2ZXIgc3RhbGwgd2FpdGluZyBvbiBpY2FjaGUgZmlsbCB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLgorICogKFRoaXMgZG9lc24ndCB3b3JrIG91dCB3aXRoIG1vc3QgNjQtYml0IG9wcywgc2luY2UgdGhleSBjb25zdW1lCisgKiB0b28gbWFueSBidW5kbGVzLCBzbyBtYXkgdGFrZSBhbiBleHRyYSBpLWNhY2hlIHN0YWxsLikKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBzZXQgdGhlIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OIGJpdCwganVzdAorICogbGlrZSBzeXNfY21weGNoZygpLCBzbyB0aGF0IE5NSXMgbGlrZSBQRVJGX0NPVU5UIHdpbGwgbm90IGludGVycnVwdAorICogdGhlIGNvZGUsIGp1c3QgcGFnZSBmYXVsdHMuCisgKgorICogSWYgdGhlIGxvYWQgb3Igc3RvcmUgZmF1bHRzIGluIGEgd2F5IHRoYXQgY2FuIGJlIGRpcmVjdGx5IGZpeGVkIGluCisgKiB0aGUgZG9fcGFnZV9mYXVsdF9pY3MoKSBoYW5kbGVyIChlLmcuIGEgdm1hbGxvYyByZWZlcmVuY2UpIHdlIGZpeCBpdAorICogZGlyZWN0bHksIHJldHVybiB0byB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBmYXVsdGVkLCBhbmQgcmV0cnkgaXQuCisgKgorICogSWYgdGhlIGxvYWQgb3Igc3RvcmUgZmF1bHRzIGluIGEgd2F5IHRoYXQgcG90ZW50aWFsbHkgcmVxdWlyZXMgdXMKKyAqIHRvIHJlbGVhc2UgdGhlIGF0b21pYyBsb2NrLCB0aGVuIHJldHJ5IChlLmcuIGEgbWlncmF0aW5nIFBURSksIHdlCisgKiByZXNldCB0aGUgUEMgaW4gZG9fcGFnZV9mYXVsdF9pY3MoKSB0byB0aGUgInRucyIgaW5zdHJ1Y3Rpb24gc28KKyAqIHRoYXQgb24gcmV0dXJuIHdlIHdpbGwgcmVhY3F1aXJlIHRoZSBsb2NrIGFuZCByZXN0YXJ0IHRoZSBvcC4gIFdlCisgKiBhcmUgc29tZXdoYXQgb3ZlcmxvYWRpbmcgdGhlIGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBub3Rpb24gYnkgZG9pbmcKKyAqIHRoaXMsIHNpbmNlIHRob3NlIGVudHJpZXMgYXJlIG5vdCBub3JtYWxseSB1c2VkIGZvciBtaWdyYXRpbmcgUFRFcy4KKyAqCisgKiBJZiB0aGUgbWFpbiBwYWdlIGZhdWx0IGhhbmRsZXIgZGlzY292ZXJzIGEgYmFkIGFkZHJlc3MsIGl0IHdpbGwgc2VlCisgKiB0aGUgUEMgcG9pbnRpbmcgdG8gdGhlICJ0bnMiIGluc3RydWN0aW9uIChkdWUgdG8gdGhlIGVhcmxpZXIKKyAqIGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBwcm9jZXNzaW5nIGluIGRvX3BhZ2VfZmF1bHRfaWNzKSwgYW5kCisgKiByZS1yZXNldCB0aGUgUEMgdG8gdGhlIGZhdWx0IGhhbmRsZXIsIGF0b21pY19iYWRfYWRkcmVzcygpLCB3aGljaAorICogZWZmZWN0aXZlbHkgdGFrZXMgb3ZlciBmcm9tIHRoZSBhdG9taWMgb3AgYW5kIGNhbiBlaXRoZXIgcmV0dXJuIGEKKyAqIGJhZCAic3RydWN0IF9fZ2V0X3VzZXIiIChmb3IgdXNlciBhZGRyZXNzZXMpIG9yIGNhbiBqdXN0IHBhbmljIChmb3IKKyAqIGJhZCBrZXJuZWwgYWRkcmVzc2VzKS4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIHZhbHVlIHdlIHdvdWxkIHN0b3JlIGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UKKyAqIGxvYWRlZCwgd2UgYnlwYXNzIHRoZSBsb2FkLiAgT3RoZXIgcGxhdGZvcm1zIHdpdGggdHJ1ZSBhdG9taWNzIGNhbgorICogbWFrZSB0aGUgZ3VhcmFudGVlIHRoYXQgYSBub24tYXRvbWljIF9fY2xlYXJfYml0KCksIGZvciBleGFtcGxlLAorICogY2FuIHNhZmVseSByYWNlIHdpdGggYW4gYXRvbWljIHRlc3RfYW5kX3NldF9iaXQoKTsgdGhpcyBleGFtcGxlIGlzCisgKiBmcm9tIGJpdF9zcGlubG9jay5oIGluIHNsdWJfbG9jaygpIC8gc2x1Yl91bmxvY2soKS4gIFdlIGNhbid0IGRvCisgKiB0aGF0IG9uIFRpbGUgc2luY2UgdGhlICJhdG9taWMiIG9wIGlzIHJlYWxseSBqdXN0IGEKKyAqIHJlYWQvbW9kaWZ5L3dyaXRlLCBhbmQgY2FuIHJhY2Ugd2l0aCB0aGUgbm9uLWF0b21pYworICogcmVhZC9tb2RpZnkvd3JpdGUuICBIb3dldmVyLCBpZiB3ZSBjYW4gc2hvcnQtY2lyY3VpdCB0aGUgd3JpdGUgd2hlbgorICogaXQgaXMgbm90IG5lZWRlZCwgaW4gdGhlIGF0b21pYyBjYXNlLCB3ZSBhdm9pZCB0aGUgcmFjZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworCS5zZWN0aW9uIC50ZXh0LmF0b21pYywiYXgiCitFTlRSWShfX3N0YXJ0X2F0b21pY19hc21fY29kZSkKKworCS5tYWNybyAgYXRvbWljX29wLCBuYW1lLCBiaXR3aWR0aCwgYm9keQorCS5hbGlnbiAgNjQKK1NURF9FTlRSWV9TRUNUSU9OKF9fYXRvbWljXG5hbWUsIC50ZXh0LmF0b21pYykKKwl7CisJIG1vdmVpICByMjQsIDEKKwkgaiAgICAgIDRmCQkvKiBicmFuY2ggdG8gc2Vjb25kIGNhY2hlIGxpbmUgKi8KKwl9CisxOgl7CisJIC5pZmMgXGJpdHdpZHRoLDE2CisJIGxoICAgICByMjIsIHIwCisJIC5lbHNlCisJIGx3ICAgICByMjIsIHIwCisJIGFkZGkgICByMjgsIHIwLCA0CisJIC5lbmRpZgorCX0KKwkuaWZjIFxiaXR3aWR0aCw2NAorCWx3ICAgICAgcjIzLCByMjgKKwkuZW5kaWYKKwlcYm9keSAvKiBzZXQgcjI0LCBhbmQgcjI1IGlmIDY0LWJpdCAqLworCXsKKwkgc2VxICAgIHIyNiwgcjIyLCByMjQKKwkgc2VxICAgIHIyNywgcjIzLCByMjUKKwl9CisJLmlmYyBcYml0d2lkdGgsNjQKKwliYm5zdCAgIHIyNywgMmYKKwkuZW5kaWYKKwliYnMgICAgIHIyNiwgM2YJCS8qIHNraXAgd3JpdGUtYmFjayBpZiBpdCdzIHRoZSBzYW1lIHZhbHVlICovCisyOgl7CisJIC5pZmMgXGJpdHdpZHRoLDE2CisJIHNoICAgICByMCwgcjI0CisJIC5lbHNlCisJIHN3ICAgICByMCwgcjI0CisJIC5lbmRpZgorCX0KKwkuaWZjIFxiaXR3aWR0aCw2NAorCXN3ICAgICAgcjI4LCByMjUKKwkuZW5kaWYKKwltZgorMzoJeworCSBtb3ZlICAgcjAsIHIyMgorCSAuaWZjIFxiaXR3aWR0aCw2NAorCSBtb3ZlICAgcjEsIHIyMworCSAuZWxzZQorCSBtb3ZlICAgcjEsIHplcm8KKwkgLmVuZGlmCisJIHN3ICAgICBBVE9NSUNfTE9DS19SRUdfTkFNRSwgemVybworCX0KKwltdHNwciAgIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCB6ZXJvCisJanJwICAgICBscgorNDoJeworCSBtb3ZlICAgQVRPTUlDX0xPQ0tfUkVHX05BTUUsIHIxCisJIG10c3ByICBJTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiwgcjI0CisJfQorI2lmbmRlZiBDT05GSUdfU01QCisJaiAgICAgICAxYgkJLyogbm8gYXRvbWljIGxvY2tzICovCisjZWxzZQorCXsKKwkgdG5zICAgIHIyMSwgQVRPTUlDX0xPQ0tfUkVHX05BTUUKKwkgbW92ZWxpIHIyMywgMjA0OCAgICAgICAvKiBtYXhpbXVtIGJhY2tvZmYgdGltZSBpbiBjeWNsZXMgKi8KKwl9CisJeworCSBienQgICAgcjIxLCAxYgkJLyogYnJhbmNoIGlmIGxvY2sgYWNxdWlyZWQgKi8KKwkgbW92ZWxpIHIyNSwgMzIgICAgICAgICAvKiBzdGFydGluZyBiYWNrb2ZmIHRpbWUgaW4gY3ljbGVzICovCisJfQorNToJbXRzcHIgICBJTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiwgemVybworCW1mc3ByICAgcjI2LCBDWUNMRV9MT1cgIC8qIGdldCBzdGFydCBwb2ludCBmb3IgdGhpcyBiYWNrb2ZmICovCis2OgltZnNwciAgIHIyMiwgQ1lDTEVfTE9XICAvKiB0ZXN0IHRvIHNlZSBpZiB3ZSd2ZSBiYWNrZWQgb2ZmIGVub3VnaCAqLworCXN1YiAgICAgcjIyLCByMjIsIHIyNgorCXNsdCAgICAgcjIyLCByMjIsIHIyNQorCWJic3QgICAgcjIyLCA2YgorCXsKKwkgbXRzcHIgIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCByMjQKKwkgc2hsaSAgIHIyNSwgcjI1LCAxICAgICAvKiBkb3VibGUgdGhlIGJhY2tvZmY7IHJldHJ5IHRoZSB0bnMgKi8KKwl9CisJeworCSB0bnMgICAgcjIxLCBBVE9NSUNfTE9DS19SRUdfTkFNRQorCSBzbHQgICAgcjI2LCByMjMsIHIyNSAgIC8qIGlzIHRoZSBwcm9wb3NlZCBiYWNrb2ZmIHRvbyBiaWc/ICovCisJfQorCXsKKwkgYnp0ICAgIHIyMSwgMWIJCS8qIGJyYW5jaCBpZiBsb2NrIGFjcXVpcmVkICovCisJIG12bnogICByMjUsIHIyNiwgcjIzCisJfQorCWogICAgICAgNWIKKyNlbmRpZgorCVNURF9FTkRQUk9DKF9fYXRvbWljXG5hbWUpCisJLmlmYyBcYml0d2lkdGgsMzIKKwkucHVzaHNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkud29yZCAgIDFiLCBfX2F0b21pY1xuYW1lCisJLndvcmQgICAyYiwgX19hdG9taWNcbmFtZQorCS53b3JkICAgX19hdG9taWNcbmFtZSwgX19hdG9taWNfYmFkX2FkZHJlc3MKKwkucG9wc2VjdGlvbgorCS5lbmRpZgorCS5lbmRtCisKK2F0b21pY19vcCBfY21weGNoZywgMzIsICJzZXEgcjI2LCByMjIsIHIyOyB7IGJibnMgcjI2LCAzZjsgbW92ZSByMjQsIHIzIH0iCithdG9taWNfb3AgX3hjaGcsIDMyLCAibW92ZSByMjQsIHIyIgorYXRvbWljX29wIF94Y2hnX2FkZCwgMzIsICJhZGQgcjI0LCByMjIsIHIyIgorYXRvbWljX29wIF94Y2hnX2FkZF91bmxlc3MsIDMyLCBcCisJInNuZSByMjYsIHIyMiwgcjI7IHsgYmJucyByMjYsIDNmOyBhZGQgcjI0LCByMjIsIHIzIH0iCithdG9taWNfb3AgX29yLCAzMiwgIm9yIHIyNCwgcjIyLCByMiIKK2F0b21pY19vcCBfYW5kbiwgMzIsICJub3IgcjIsIHIyLCB6ZXJvOyBhbmQgcjI0LCByMjIsIHIyIgorYXRvbWljX29wIF94b3IsIDMyLCAieG9yIHIyNCwgcjIyLCByMiIKKworYXRvbWljX29wIDY0X2NtcHhjaGcsIDY0LCAieyBzZXEgcjI2LCByMjIsIHIyOyBzZXEgcjI3LCByMjMsIHIzIH07IFwKKwl7IGJibnMgcjI2LCAzZjsgbW92ZSByMjQsIHI0IH07IHsgYmJucyByMjcsIDNmOyBtb3ZlIHIyNSwgcjUgfSIKK2F0b21pY19vcCA2NF94Y2hnLCA2NCwgInsgbW92ZSByMjQsIHIyOyBtb3ZlIHIyNSwgcjMgfSIKK2F0b21pY19vcCA2NF94Y2hnX2FkZCwgNjQsICJ7IGFkZCByMjQsIHIyMiwgcjI7IGFkZCByMjUsIHIyMywgcjMgfTsgXAorCXNsdF91IHIyNiwgcjI0LCByMjI7IGFkZCByMjUsIHIyNSwgcjI2IgorYXRvbWljX29wIDY0X3hjaGdfYWRkX3VubGVzcywgNjQsIFwKKwkieyBzbmUgcjI2LCByMjIsIHIyOyBzbmUgcjI3LCByMjMsIHIzIH07IFwKKwl7IGJibnMgcjI2LCAzZjsgYWRkIHIyNCwgcjIyLCByNCB9OyBcCisJeyBiYm5zIHIyNywgM2Y7IGFkZCByMjUsIHIyMywgcjUgfTsgXAorCXNsdF91IHIyNiwgcjI0LCByMjI7IGFkZCByMjUsIHIyNSwgcjI2IgorCisJanJwICAgICBsciAgICAgICAgICAgICAgLyogaGFwcHkgYmFja3RyYWNlciAqLworCitFTlRSWShfX2VuZF9hdG9taWNfYXNtX2NvZGUpCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL2NhY2hlZmx1c2guYyBiL2FyY2gvdGlsZS9saWIvY2FjaGVmbHVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjYxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL2NhY2hlZmx1c2guYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXJjaC9pY2FjaGUuaD4KKworCit2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludmFsaWRhdGVfaWNhY2hlKChjb25zdCB2b2lkICopc3RhcnQsIGVuZCAtIHN0YXJ0LCBQQUdFX1NJWkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9jaGVja3N1bS5jIGIvYXJjaC90aWxlL2xpYi9jaGVja3N1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmFiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL2NoZWNrc3VtLmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKiBTdXBwb3J0IGNvZGUgZm9yIHRoZSBtYWluIGxpYi9jaGVja3N1bS5jLgorICovCisKKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbG9uZ3RvMTYodW5zaWduZWQgbG9uZyB4KQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworI2lmZGVmIF9fdGlsZWd4X18KKwlyZXQgPSBfX2luc25fdjJzYWR1KHgsIDApOworCXJldCA9IF9faW5zbl92MnNhZHUocmV0LCAwKTsKKyNlbHNlCisJcmV0ID0gX19pbnNuX3NhZGhfdSh4LCAwKTsKKwlyZXQgPSBfX2luc25fc2FkaF91KHJldCwgMCk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitfX3dzdW0gZG9fY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuKQoreworCWludCBvZGQsIGNvdW50OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKKworCWlmIChsZW4gPD0gMCkKKwkJZ290byBvdXQ7CisJb2RkID0gMSAmICh1bnNpZ25lZCBsb25nKSBidWZmOworCWlmIChvZGQpIHsKKwkJcmVzdWx0ID0gKCpidWZmIDw8IDgpOworCQlsZW4tLTsKKwkJYnVmZisrOworCX0KKwljb3VudCA9IGxlbiA+PiAxOwkJLyogbnIgb2YgMTYtYml0IHdvcmRzLi4gKi8KKwlpZiAoY291bnQpIHsKKwkJaWYgKDIgJiAodW5zaWduZWQgbG9uZykgYnVmZikgeworCQkJcmVzdWx0ICs9ICooY29uc3QgdW5zaWduZWQgc2hvcnQgKilidWZmOworCQkJY291bnQtLTsKKwkJCWxlbiAtPSAyOworCQkJYnVmZiArPSAyOworCQl9CisJCWNvdW50ID4+PSAxOwkJLyogbnIgb2YgMzItYml0IHdvcmRzLi4gKi8KKwkJaWYgKGNvdW50KSB7CisjaWZkZWYgX190aWxlZ3hfXworCQkJaWYgKDQgJiAodW5zaWduZWQgbG9uZykgYnVmZikgeworCQkJCXVuc2lnbmVkIGludCB3ID0gKihjb25zdCB1bnNpZ25lZCBpbnQgKilidWZmOworCQkJCXJlc3VsdCA9IF9faW5zbl92MnNhZGF1KHJlc3VsdCwgdywgMCk7CisJCQkJY291bnQtLTsKKwkJCQlsZW4gLT0gNDsKKwkJCQlidWZmICs9IDQ7CisJCQl9CisJCQljb3VudCA+Pj0gMTsJCS8qIG5yIG9mIDY0LWJpdCB3b3Jkcy4uICovCisjZW5kaWYKKworCQkJLyoKKwkJCSAqIFRoaXMgYWxnb3JpdGhtIGNvdWxkIHdyYXAgYXJvdW5kIGZvciB2ZXJ5CisJCQkgKiBsYXJnZSBidWZmZXJzLCBidXQgdGhvc2Ugc2hvdWxkIGJlIGltcG9zc2libGUuCisJCQkgKi8KKwkJCUJVR19PTihjb3VudCA+PSA2NTUzMCk7CisKKwkJCXdoaWxlIChjb3VudCkgeworCQkJCXVuc2lnbmVkIGxvbmcgdyA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKWJ1ZmY7CisJCQkJY291bnQtLTsKKwkJCQlidWZmICs9IHNpemVvZih3KTsKKyNpZmRlZiBfX3RpbGVneF9fCisJCQkJcmVzdWx0ID0gX19pbnNuX3Yyc2FkYXUocmVzdWx0LCB3LCAwKTsKKyNlbHNlCisJCQkJcmVzdWx0ID0gX19pbnNuX3NhZGFoX3UocmVzdWx0LCB3LCAwKTsKKyNlbmRpZgorCQkJfQorI2lmZGVmIF9fdGlsZWd4X18KKwkJCWlmIChsZW4gJiA0KSB7CisJCQkJdW5zaWduZWQgaW50IHcgPSAqKGNvbnN0IHVuc2lnbmVkIGludCAqKWJ1ZmY7CisJCQkJcmVzdWx0ID0gX19pbnNuX3Yyc2FkYXUocmVzdWx0LCB3LCAwKTsKKwkJCQlidWZmICs9IDQ7CisJCQl9CisjZW5kaWYKKwkJfQorCQlpZiAobGVuICYgMikgeworCQkJcmVzdWx0ICs9ICooY29uc3QgdW5zaWduZWQgc2hvcnQgKikgYnVmZjsKKwkJCWJ1ZmYgKz0gMjsKKwkJfQorCX0KKwlpZiAobGVuICYgMSkKKwkJcmVzdWx0ICs9ICpidWZmOworCXJlc3VsdCA9IGxvbmd0bzE2KHJlc3VsdCk7CisJaWYgKG9kZCkKKwkJcmVzdWx0ID0gc3dhYjE2KHJlc3VsdCk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvY3B1bWFzay5jIGIvYXJjaC90aWxlL2xpYi9jcHVtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjNDAzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvY3B1bWFzay5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKy8qCisgKiBBbGxvdyBjcm9wcGluZyBvdXQgYml0cyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCisgKiBNb3ZlIHRvICJsaWIiIGRpcmVjdG9yeSBpZiBtb3JlIGNsaWVudHMgd2FudCB0byB1c2UgdGhpcyByb3V0aW5lLgorICovCitpbnQgYml0bWFwX3BhcnNlbGlzdF9jcm9wKGNvbnN0IGNoYXIgKmJwLCB1bnNpZ25lZCBsb25nICptYXNrcCwgaW50IG5tYXNrYml0cykKK3sKKwl1bnNpZ25lZCBhLCBiOworCisJYml0bWFwX3plcm8obWFza3AsIG5tYXNrYml0cyk7CisJZG8geworCQlpZiAoIWlzZGlnaXQoKmJwKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlhID0gc2ltcGxlX3N0cnRvdWwoYnAsIChjaGFyICoqKSZicCwgMTApOworCQliID0gYTsKKwkJaWYgKCpicCA9PSAnLScpIHsKKwkJCWJwKys7CisJCQlpZiAoIWlzZGlnaXQoKmJwKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWIgPSBzaW1wbGVfc3RydG91bChicCwgKGNoYXIgKiopJmJwLCAxMCk7CisJCX0KKwkJaWYgKCEoYSA8PSBiKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoYiA+PSBubWFza2JpdHMpCisJCQliID0gbm1hc2tiaXRzLTE7CisJCXdoaWxlIChhIDw9IGIpIHsKKwkJCXNldF9iaXQoYSwgbWFza3ApOworCQkJYSsrOworCQl9CisJCWlmICgqYnAgPT0gJywnKQorCQkJYnArKzsKKwl9IHdoaWxlICgqYnAgIT0gJ1wwJyAmJiAqYnAgIT0gJ1xuJyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL2RlbGF5LmMgYi9hcmNoL3RpbGUvbGliL2RlbGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwMWIwMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvZGVsYXkuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKwordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQoreworCWh2X25hbm9zbGVlcCh1c2VjcyAqIDEwMDApOworfQorRVhQT1JUX1NZTUJPTChfX3VkZWxheSk7CisKK3ZvaWQgX19uZGVsYXkodW5zaWduZWQgbG9uZyBuc2VjcykKK3sKKwlodl9uYW5vc2xlZXAobnNlY3MpOworfQorRVhQT1JUX1NZTUJPTChfX25kZWxheSk7CisKKy8qIEZJWE1FOiBzaG91bGQgYmUgZGVjbGFyZWQgaW4gYSBoZWFkZXIgc29tZXdoZXJlLiAqLworRVhQT1JUX1NZTUJPTChfX2RlbGF5KTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvZXhwb3J0cy5jIGIvYXJjaC90aWxlL2xpYi9leHBvcnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjN2I1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvZXhwb3J0cy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogRXhwb3J0cyBmcm9tIGFzc2VtYmxlciBjb2RlIGFuZCBmcm9tIGxpYnRpbGUtY2MuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKiBhcmNoL3RpbGUvbGliL3VzZXJjb3B5LlMgKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CitFWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfMSk7CitFWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfMik7CitFWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfNCk7CitFWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfOCk7CitFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfMSk7CitFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfMik7CitFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfNCk7CitFWFBPUlRfU1lNQk9MKF9fcHV0X3VzZXJfOCk7CitFWFBPUlRfU1lNQk9MKHN0cm5sZW5fdXNlcl9hc20pOworRVhQT1JUX1NZTUJPTChzdHJuY3B5X2Zyb21fdXNlcl9hc20pOworRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyX2FzbSk7CisKKy8qIGFyY2gvdGlsZS9rZXJuZWwvZW50cnkuUyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KK0VYUE9SVF9TWU1CT0woY3VycmVudF90ZXh0X2FkZHIpOworRVhQT1JUX1NZTUJPTChkdW1wX3N0YWNrKTsKKworLyogYXJjaC90aWxlL2xpYi9fX21lbWNweS5TICovCisvKiBOT1RFOiBvbiBUSUxFNjQsIHRoZXNlIHN5bWJvbHMgYXBwZWFyIGluIGFyY2gvdGlsZS9saWIvbWVtY3B5X3RpbGU2NC5jICovCitFWFBPUlRfU1lNQk9MKG1lbWNweSk7CitFWFBPUlRfU1lNQk9MKF9fY29weV90b191c2VyX2luYXRvbWljKTsKK0VYUE9SVF9TWU1CT0woX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyk7CitFWFBPUlRfU1lNQk9MKF9fY29weV9mcm9tX3VzZXJfemVyb2luZyk7CisKKy8qIGh5cGVydmlzb3IgZ2x1ZSAqLworI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KK0VYUE9SVF9TWU1CT0woaHZfZGV2X29wZW4pOworRVhQT1JUX1NZTUJPTChodl9kZXZfcHJlYWQpOworRVhQT1JUX1NZTUJPTChodl9kZXZfcHdyaXRlKTsKK0VYUE9SVF9TWU1CT0woaHZfZGV2X2Nsb3NlKTsKKworLyogLWx0aWxlLWNjICovCit1aW50MzJfdCBfX3VkaXZzaTModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX3VkaXZzaTMpOworaW50MzJfdCBfX2RpdnNpMyhpbnQzMl90IGRpdmlkZW5kLCBpbnQzMl90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX2RpdnNpMyk7Cit1aW50NjRfdCBfX3VkaXZkaTModWludDY0X3QgZGl2aWRlbmQsIHVpbnQ2NF90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX3VkaXZkaTMpOworaW50NjRfdCBfX2RpdmRpMyhpbnQ2NF90IGRpdmlkZW5kLCBpbnQ2NF90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX2RpdmRpMyk7Cit1aW50MzJfdCBfX3Vtb2RzaTModWludDMyX3QgZGl2aWRlbmQsIHVpbnQzMl90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX3Vtb2RzaTMpOworaW50MzJfdCBfX21vZHNpMyhpbnQzMl90IGRpdmlkZW5kLCBpbnQzMl90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX21vZHNpMyk7Cit1aW50NjRfdCBfX3Vtb2RkaTModWludDY0X3QgZGl2aWRlbmQsIHVpbnQ2NF90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX3Vtb2RkaTMpOworaW50NjRfdCBfX21vZGRpMyhpbnQ2NF90IGRpdmlkZW5kLCBpbnQ2NF90IGRpdmlzb3IpOworRVhQT1JUX1NZTUJPTChfX21vZGRpMyk7CisjaWZuZGVmIF9fdGlsZWd4X18KK3VpbnQ2NF90IF9fbGxfbXVsKHVpbnQ2NF90IG4wLCB1aW50NjRfdCBuMSk7CitFWFBPUlRfU1lNQk9MKF9fbGxfbXVsKTsKKyNlbmRpZgorI2lmbmRlZiBfX3RpbGVneF9fCitpbnQ2NF90IF9fbXVsZGkzKGludDY0X3QsIGludDY0X3QpOworRVhQT1JUX1NZTUJPTChfX211bGRpMyk7Cit1aW50NjRfdCBfX2xzaHJkaTModWludDY0X3QsIHVuc2lnbmVkIGludCk7CitFWFBPUlRfU1lNQk9MKF9fbHNocmRpMyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvbWJfaW5jb2hlcmVudC5TIGIvYXJjaC90aWxlL2xpYi9tYl9pbmNvaGVyZW50LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5YWQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvbWJfaW5jb2hlcmVudC5TCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogQXNzZW1ibHkgY29kZSBmb3IgaW52b2tpbmcgdGhlIEhWJ3MgZmVuY2VfaW5jb2hlcmVudCBzeXNjYWxsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8aHYvc3lzY2FsbF9wdWJsaWMuaD4KKyNpbmNsdWRlIDxhcmNoL2FiaS5oPgorI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisjaWYgIUNISVBfSEFTX01GX1dBSVRTX0ZPUl9WSUNUSU1TKCkKKworLyoKKyAqIEludm9rZSB0aGUgaHlwZXJ2aXNvcidzIGZlbmNlX2luY29oZXJlbnQgc3lzY2FsbCwgd2hpY2ggZ3VhcmFudGVlcworICogdGhhdCBhbGwgdmljdGltcyBmb3IgY2FjaGVsaW5lcyBob21lZCBvbiB0aGlzIHRpbGUgaGF2ZSByZWFjaGVkIG1lbW9yeS4KKyAqLworU1REX0VOVFJZKF9fbWJfaW5jb2hlcmVudCkKKwltb3ZlbGkgVFJFR19TWVNDQUxMX05SX05BTUUsIEhWX1NZU19mZW5jZV9pbmNvaGVyZW50CisJc3dpbnQyCisJanJwIGxyCisJU1REX0VORFBST0MoX19tYl9pbmNvaGVyZW50KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvbWVtY2hyXzMyLmMgYi9hcmNoL3RpbGUvbGliL21lbWNocl8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMzUyODMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL21lbWNocl8zMi5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCit7CisJLyogR2V0IGFuIGFsaWduZWQgcG9pbnRlci4gKi8KKwljb25zdCB1aW50cHRyX3Qgc19pbnQgPSAodWludHB0cl90KSBzOworCWNvbnN0IHVpbnQzMl90ICpwID0gKGNvbnN0IHVpbnQzMl90ICopKHNfaW50ICYgLTQpOworCisJLyogQ3JlYXRlIGZvdXIgY29waWVzIG9mIHRoZSBieXRlIGZvciB3aGljaCB3ZSBhcmUgbG9va2luZy4gKi8KKwljb25zdCB1aW50MzJfdCBnb2FsID0gMHgwMTAxMDEwMSAqICh1aW50OF90KSBjOworCisJLyogUmVhZCB0aGUgZmlyc3Qgd29yZCwgYnV0IG11bmdlIGl0IHNvIHRoYXQgYnl0ZXMgYmVmb3JlIHRoZSBhcnJheQorCSAqIHdpbGwgbm90IG1hdGNoIGdvYWwuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBzaGlmdCBjb3VudCBleHByZXNzaW9uIHdvcmtzIGJlY2F1c2Ugd2Uga25vdworCSAqIHNoaWZ0IGNvdW50cyBhcmUgdGFrZW4gbW9kIDMyLgorCSAqLworCWNvbnN0IHVpbnQzMl90IGJlZm9yZV9tYXNrID0gKDEgPDwgKHNfaW50IDw8IDMpKSAtIDE7CisJdWludDMyX3QgdiA9ICgqcCB8IGJlZm9yZV9tYXNrKSBeIChnb2FsICYgYmVmb3JlX21hc2spOworCisJLyogQ29tcHV0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgbGFzdCBieXRlLiAqLworCWNvbnN0IGNoYXIgKmNvbnN0IGxhc3RfYnl0ZV9wdHIgPSAoY29uc3QgY2hhciAqKXMgKyBuIC0gMTsKKworCS8qIENvbXB1dGUgdGhlIGFkZHJlc3Mgb2YgdGhlIHdvcmQgY29udGFpbmluZyB0aGUgbGFzdCBieXRlLiAqLworCWNvbnN0IHVpbnQzMl90ICpjb25zdCBsYXN0X3dvcmRfcHRyID0KKwkgICAgKGNvbnN0IHVpbnQzMl90ICopKCh1aW50cHRyX3QpIGxhc3RfYnl0ZV9wdHIgJiAtNCk7CisKKwl1aW50MzJfdCBiaXRzOworCWNoYXIgKnJldDsKKworCWlmIChfX2J1aWx0aW5fZXhwZWN0KG4gPT0gMCwgMCkpIHsKKwkJLyogRG9uJ3QgZGVyZWZlcmVuY2UgYW55IG1lbW9yeSBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuICovCisJCXJldHVybiBOVUxMOworCX0KKworCXdoaWxlICgoYml0cyA9IF9faW5zbl9zZXFiKHYsIGdvYWwpKSA9PSAwKSB7CisJCWlmIChfX2J1aWx0aW5fZXhwZWN0KHAgPT0gbGFzdF93b3JkX3B0ciwgMCkpIHsKKwkJCS8qIFdlIGFscmVhZHkgcmVhZCB0aGUgbGFzdCB3b3JkIGluIHRoZSBhcnJheSwKKwkJCSAqIHNvIGdpdmUgdXAuCisJCQkgKi8KKwkJCXJldHVybiBOVUxMOworCQl9CisJCXYgPSAqKytwOworCX0KKworCS8qIFdlIGZvdW5kIGEgbWF0Y2gsIGJ1dCBpdCBtaWdodCBiZSBpbiBhIGJ5dGUgcGFzdCB0aGUgZW5kCisJICogb2YgdGhlIGFycmF5LgorCSAqLworCXJldCA9ICgoY2hhciAqKXApICsgKF9faW5zbl9jdHooYml0cykgPj4gMyk7CisJcmV0dXJuIChyZXQgPD0gbGFzdF9ieXRlX3B0cikgPyByZXQgOiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChtZW1jaHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2xpYi9tZW1jcHlfMzIuUyBiL2FyY2gvdGlsZS9saWIvbWVtY3B5XzMyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyOTg0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvbWVtY3B5XzMyLlMKQEAgLTAsMCArMSw2MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIHNoYXJlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHVzZXJzcGFjZSBtZW1jcHkgYW5kCisgKiB0aGUga2VybmVsJ3MgbWVtY3B5LCBjb3B5X3RvX3VzZXIgYW5kIGNvcHlfZnJvbV91c2VyLgorICovCisKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2lmIENISVBfSEFTX1dINjQoKSB8fCBkZWZpbmVkKE1FTUNQWV9URVNUX1dINjQpCisjZGVmaW5lIE1FTUNQWV9VU0VfV0g2NAorI2VuZGlmCisKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworLyogT24gVElMRTY0LCB3ZSB3cmFwIHRoZXNlIGZ1bmN0aW9ucyB2aWEgYXJjaC90aWxlL2xpYi9tZW1jcHlfdGlsZTY0LmMgKi8KKyNpZiAhQ0hJUF9IQVNfQ09IRVJFTlRfTE9DQUxfQ0FDSEUoKQorI2RlZmluZSBtZW1jcHkgX19tZW1jcHlfYXNtCisjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyX2luYXRvbWljX2FzbQorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfYXNtCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfemVyb2luZyBfX2NvcHlfZnJvbV91c2VyX3plcm9pbmdfYXNtCisjZW5kaWYKKworI2RlZmluZSBJU19NRU1DUFkJICAwCisjZGVmaW5lIElTX0NPUFlfRlJPTV9VU0VSICAxCisjZGVmaW5lIElTX0NPUFlfRlJPTV9VU0VSX1pFUk9JTkcgIDIKKyNkZWZpbmUgSVNfQ09QWV9UT19VU0VSICAgLTEKKworCS5zZWN0aW9uIC50ZXh0Lm1lbWNweV9jb21tb24sICJheCIKKwkuYWxpZ24gNjQKKworLyogVXNlIHRoaXMgdG8gcHJlZmFjZSBlYWNoIGJ1bmRsZSB0aGF0IGNhbiBjYXVzZSBhbiBleGNlcHRpb24gc28KKyAqIHRoZSBrZXJuZWwgY2FuIGNsZWFuIHVwIHByb3Blcmx5LiBUaGUgc3BlY2lhbCBjbGVhbnVwIGNvZGUgc2hvdWxkCisgKiBub3QgdXNlIHRoZXNlLCBzaW5jZSBpdCBrbm93cyB3aGF0IGl0IGlzIGRvaW5nLgorICovCisjZGVmaW5lIEVYIFwKKwkucHVzaHNlY3Rpb24gX19leF90YWJsZSwgImEiOyBcCisJLndvcmQgOWYsIG1lbWNweV9jb21tb25fZml4dXA7IFwKKwkucG9wc2VjdGlvbjsgXAorCTkKKworCisvKiBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIHRha2VzIHRoZSBrZXJuZWwgdGFyZ2V0IGFkZHJlc3MgaW4gcjAsCisgKiB0aGUgdXNlciBzb3VyY2UgaW4gcjEsIGFuZCB0aGUgYnl0ZXMgdG8gY29weSBpbiByMi4KKyAqIEl0IHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvcGlhYmxlIGJ5dGVzIChob3BlZnVsbHkgemVybykgaW4gcjAuCisgKi8KK0VOVFJZKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMpCisudHlwZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljLCBAZnVuY3Rpb24KKyAgICAgICAgRkVFREJBQ0tfRU5URVJfRVhQTElDSVQoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYywgXAorCSAgLnRleHQubWVtY3B5X2NvbW1vbiwgXAorICAgICAgICAgIC5MZW5kX21lbWNweV9jb21tb24gLSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKQorCXsgbW92ZWkgcjI5LCBJU19DT1BZX0ZST01fVVNFUjsgaiBtZW1jcHlfY29tbW9uIH0KKwkuc2l6ZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljLCAuIC0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYworCisvKiBfX2NvcHlfZnJvbV91c2VyX3plcm9pbmcgaXMgbGlrZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljLCBidXQKKyAqIGFueSB1bmNvcGlhYmxlIGJ5dGVzIGFyZSB6ZXJvZWQgaW4gdGhlIHRhcmdldC4KKyAqLworRU5UUlkoX19jb3B5X2Zyb21fdXNlcl96ZXJvaW5nKQorLnR5cGUgX19jb3B5X2Zyb21fdXNlcl96ZXJvaW5nLCBAZnVuY3Rpb24KKyAgICAgICAgRkVFREJBQ0tfUkVFTlRFUihfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKQorCXsgbW92ZWkgcjI5LCBJU19DT1BZX0ZST01fVVNFUl9aRVJPSU5HOyBqIG1lbWNweV9jb21tb24gfQorCS5zaXplIF9fY29weV9mcm9tX3VzZXJfemVyb2luZywgLiAtIF9fY29weV9mcm9tX3VzZXJfemVyb2luZworCisvKiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyB0YWtlcyB0aGUgdXNlciB0YXJnZXQgYWRkcmVzcyBpbiByMCwKKyAqIHRoZSBrZXJuZWwgc291cmNlIGluIHIxLCBhbmQgdGhlIGJ5dGVzIHRvIGNvcHkgaW4gcjIuCisgKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb3BpYWJsZSBieXRlcyAoaG9wZWZ1bGx5IHplcm8pIGluIHIwLgorICovCitFTlRSWShfX2NvcHlfdG9fdXNlcl9pbmF0b21pYykKKy50eXBlIF9fY29weV90b191c2VyX2luYXRvbWljLCBAZnVuY3Rpb24KKyAgICAgICAgRkVFREJBQ0tfUkVFTlRFUihfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKQorCXsgbW92ZWkgcjI5LCBJU19DT1BZX1RPX1VTRVI7IGogbWVtY3B5X2NvbW1vbiB9CisJLnNpemUgX19jb3B5X3RvX3VzZXJfaW5hdG9taWMsIC4gLSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYworCitFTlRSWShtZW1jcHkpCisudHlwZSBtZW1jcHksIEBmdW5jdGlvbgorICAgICAgICBGRUVEQkFDS19SRUVOVEVSKF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMpCisJeyBtb3ZlaSByMjksIElTX01FTUNQWSB9CisJLnNpemUgbWVtY3B5LCAuIC0gbWVtY3B5CisJLyogRmFsbCB0aHJvdWdoICovCisKKwkudHlwZSBtZW1jcHlfY29tbW9uLCBAZnVuY3Rpb24KK21lbWNweV9jb21tb246CisJLyogT24gZW50cnksIHIyOSBob2xkcyBvbmUgb2YgdGhlIElTXyogbWFjcm8gdmFsdWVzIGZyb20gYWJvdmUuICovCisKKworCS8qIHIwIGlzIHRoZSBkZXN0LCByMSBpcyB0aGUgc291cmNlLCByMiBpcyB0aGUgc2l6ZS4gKi8KKworCS8qIFNhdmUgYXNpZGUgb3JpZ2luYWwgZGVzdCBzbyB3ZSBjYW4gcmV0dXJuIGl0IGF0IHRoZSBlbmQuICovCisJeyBzdyBzcCwgbHI7IG1vdmUgcjIzLCByMDsgb3IgcjQsIHIwLCByMSB9CisKKwkvKiBDaGVjayBmb3IgYW4gZW1wdHkgc2l6ZS4gKi8KKwl7IGJ6IHIyLCAuTGRvbmU7IGFuZGkgcjQsIHI0LCAzIH0KKworCS8qIFNhdmUgYXNpZGUgb3JpZ2luYWwgdmFsdWVzIGluIGNhc2Ugb2YgYSBmYXVsdC4gKi8KKwl7IG1vdmUgcjI0LCByMTsgbW92ZSByMjUsIHIyIH0KKwltb3ZlIHIyNywgbHIKKworCS8qIENoZWNrIGZvciBhbiB1bmFsaWduZWQgc291cmNlIG9yIGRlc3QuICovCisJeyBibnogcjQsIC5MY29weV91bmFsaWduZWRfbWF5YmVfbWFueTsgYWRkbGkgcjQsIHIyLCAtMjU2IH0KKworLkxjaGVja19hbGlnbmVkX2NvcHlfc2l6ZToKKwkvKiBJZiB3ZSBhcmUgY29weWluZyA8IDI1NiBieXRlcywgYnJhbmNoIHRvIHNpbXBsZSBjYXNlLiAqLworCXsgYmx6dCByNCwgLkxjb3B5XzhfY2hlY2s7IHNsdGlfdSByOCwgcjIsIDggfQorCisJLyogQ29weWluZyA+PSAyNTYgYnl0ZXMsIHNvIGp1bXAgdG8gY29tcGxleCBwcmVmZXRjaGluZyBsb29wLiAqLworCXsgYW5kaSByNiwgcjEsIDYzOyBqIC5MY29weV9tYW55IH0KKworLyoKKyAqCisgKiBBbGlnbmVkIDQgYnl0ZSBhdCBhIHRpbWUgY29weSBsb29wCisgKgorICovCisKKy5MY29weV84X2xvb3A6CisJLyogQ29weSB0d28gd29yZHMgYXQgYSB0aW1lIHRvIGhpZGUgbG9hZCBsYXRlbmN5LiAqLworRVg6CXsgbHcgcjMsIHIxOyBhZGRpIHIxLCByMSwgNDsgc2x0aV91IHI4LCByMiwgMTYgfQorRVg6CXsgbHcgcjQsIHIxOyBhZGRpIHIxLCByMSwgNCB9CitFWDoJeyBzdyByMCwgcjM7IGFkZGkgcjAsIHIwLCA0OyBhZGRpIHIyLCByMiwgLTQgfQorRVg6CXsgc3cgcjAsIHI0OyBhZGRpIHIwLCByMCwgNDsgYWRkaSByMiwgcjIsIC00IH0KKy5MY29weV84X2NoZWNrOgorCXsgYnp0IHI4LCAuTGNvcHlfOF9sb29wOyBzbHRpX3UgcjQsIHIyLCA0IH0KKworCS8qIENvcHkgb2RkIGxlZnRvdmVyIHdvcmQsIGlmIGFueS4gKi8KKwl7IGJuenQgcjQsIC5MY2hlY2tfb2RkX3N0cmFnZ2xlcnMgfQorRVg6CXsgbHcgcjMsIHIxOyBhZGRpIHIxLCByMSwgNCB9CitFWDoJeyBzdyByMCwgcjM7IGFkZGkgcjAsIHIwLCA0OyBhZGRpIHIyLCByMiwgLTQgfQorCisuTGNoZWNrX29kZF9zdHJhZ2dsZXJzOgorCXsgYm56IHIyLCAuTGNvcHlfdW5hbGlnbmVkX2ZldyB9CisKKy5MZG9uZToKKwkvKiBGb3IgbWVtY3B5IHJldHVybiBvcmlnaW5hbCBkZXN0IGFkZHJlc3MsIGVsc2UgemVyby4gKi8KKwl7IG16IHIwLCByMjksIHIyMzsganJwIGxyIH0KKworCisvKgorICoKKyAqIFByZWZldGNoaW5nIG11bHRpcGxlIGNhY2hlIGxpbmUgY29weSBoYW5kbGVyIChmb3IgbGFyZ2UgdHJhbnNmZXJzKS4KKyAqCisgKi8KKworCS8qIENvcHkgd29yZHMgdW50aWwgcjEgaXMgY2FjaGUtbGluZS1hbGlnbmVkLiAqLworLkxhbGlnbl9sb29wOgorRVg6CXsgbHcgcjMsIHIxOyBhZGRpIHIxLCByMSwgNCB9CisJeyBhbmRpIHI2LCByMSwgNjMgfQorRVg6CXsgc3cgcjAsIHIzOyBhZGRpIHIwLCByMCwgNDsgYWRkaSByMiwgcjIsIC00IH0KKy5MY29weV9tYW55OgorCXsgYm56dCByNiwgLkxhbGlnbl9sb29wOyBhZGRpIHI5LCByMCwgNjMgfQorCisJeyBhZGRpIHIzLCByMSwgNjA7IGFuZGkgcjksIHI5LCAtNjQgfQorCisjaWZkZWYgTUVNQ1BZX1VTRV9XSDY0CisgICAgICAgIC8qIE5vIG5lZWQgdG8gcHJlZmV0Y2ggZHN0LCB3ZSdsbCBqdXN0IGRvIHRoZSB3aDY0CisgICAgICAgICAqIHJpZ2h0IGJlZm9yZSB3ZSBjb3B5IGEgbGluZS4KKwkgKi8KKyNlbmRpZgorCitFWDoJeyBsdyByNSwgcjM7IGFkZGkgcjMsIHIzLCA2NDsgbW92ZWkgcjQsIDEgfQorICAgICAgICAvKiBJbnRlbnRpb25hbGx5IHN0YWxsIGZvciBhIGZldyBjeWNsZXMgdG8gbGVhdmUgTDIgY2FjaGUgYWxvbmUuICovCisgICAgICAgIHsgYm56dCB6ZXJvLCAuOyBtb3ZlIHIyNywgbHIgfQorRVg6CXsgbHcgcjYsIHIzOyBhZGRpIHIzLCByMywgNjQgfQorICAgICAgICAvKiBJbnRlbnRpb25hbGx5IHN0YWxsIGZvciBhIGZldyBjeWNsZXMgdG8gbGVhdmUgTDIgY2FjaGUgYWxvbmUuICovCisgICAgICAgIHsgYm56dCB6ZXJvLCAuIH0KK0VYOgl7IGx3IHI3LCByMzsgYWRkaSByMywgcjMsIDY0IH0KKyNpZm5kZWYgTUVNQ1BZX1VTRV9XSDY0CisgICAgICAgIC8qIFByZWZldGNoIHRoZSBkZXN0ICovCisgICAgICAgIC8qIEludGVudGlvbmFsbHkgc3RhbGwgZm9yIGEgZmV3IGN5Y2xlcyB0byBsZWF2ZSBMMiBjYWNoZSBhbG9uZS4gKi8KKyAgICAgICAgeyBibnp0IHplcm8sIC4gfQorICAgICAgICAvKiBVc2UgYSByZWFsIGxvYWQgdG8gY2F1c2UgYSBUTEIgbWlzcyBpZiBuZWNlc3NhcnkuICBXZSBhcmVuJ3QgdXNpbmcKKyAgICAgICAgICogcjI4LCBzbyB0aGlzIHNob3VsZCBiZSBmaW5lLgorICAgICAgICAgKi8KK0VYOgl7IGx3IHIyOCwgcjk7IGFkZGkgcjksIHI5LCA2NCB9CisgICAgICAgIC8qIEludGVudGlvbmFsbHkgc3RhbGwgZm9yIGEgZmV3IGN5Y2xlcyB0byBsZWF2ZSBMMiBjYWNoZSBhbG9uZS4gKi8KKyAgICAgICAgeyBibnp0IHplcm8sIC4gfQorICAgICAgICB7IHByZWZldGNoIHI5OyBhZGRpIHI5LCByOSwgNjQgfQorICAgICAgICAvKiBJbnRlbnRpb25hbGx5IHN0YWxsIGZvciBhIGZldyBjeWNsZXMgdG8gbGVhdmUgTDIgY2FjaGUgYWxvbmUuICovCisgICAgICAgIHsgYm56dCB6ZXJvLCAuIH0KKyAgICAgICAgeyBwcmVmZXRjaCByOTsgYWRkaSByOSwgcjksIDY0IH0KKyNlbmRpZgorICAgICAgICAvKiBJbnRlbnRpb25hbGx5IHN0YWxsIGZvciBhIGZldyBjeWNsZXMgdG8gbGVhdmUgTDIgY2FjaGUgYWxvbmUuICovCisgICAgICAgIHsgYnogemVybywgLkxiaWdfbG9vcDIgfQorCisJLyogT24gZW50cnkgdG8gdGhpcyBsb29wOgorCSAqIC0gcjAgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBkc3QgbGluZSAwCisJICogLSByMSBwb2ludHMgdG8gc3RhcnQgb2Ygc3JjIGxpbmUgMAorCSAqIC0gcjIgPj0gKDI1NiAtIDYwKSwgb25seSB0aGUgZmlyc3QgdGltZSB0aGUgbG9vcCB0cmlwcy4KKwkgKiAtIHIzIGNvbnRhaW5zIHIxICsgMTI4ICsgNjAgICAgW3BvaW50ZXIgdG8gZW5kIG9mIHNvdXJjZSBsaW5lIDJdCisJICogICBUaGlzIGlzIG91ciBwcmVmZXRjaCBhZGRyZXNzLiBXaGVuIHdlIGdldCBuZWFyIHRoZSBlbmQKKwkgKiAgIHJhdGhlciB0aGFuIHByZWZldGNoaW5nIG9mZiB0aGUgZW5kIHRoaXMgaXMgY2hhbmdlZCB0byBwb2ludAorCSAqICAgdG8gc29tZSAic2FmZSIgcmVjZW50bHkgbG9hZGVkIGFkZHJlc3MuCisJICogLSByNSBjb250YWlucyAqKHIxICsgNjApICAgICAgIFtpLmUuIGxhc3Qgd29yZCBvZiBzb3VyY2UgbGluZSAwXQorCSAqIC0gcjYgY29udGFpbnMgKihyMSArIDY0ICsgNjApICBbaS5lLiBsYXN0IHdvcmQgb2Ygc291cmNlIGxpbmUgMV0KKyAgICAgICAgICogLSByOSBjb250YWlucyAoKHIwICsgNjMpICYgLTY0KQorCSAqICAgICBbc3RhcnQgb2YgbmV4dCBkc3QgY2FjaGUgbGluZS5dCisJICovCisKKy5MYmlnX2xvb3A6CisJeyBqYWwgLkxjb3B5X2xpbmUyOyBhZGQgcjE1LCByMSwgcjIgfQorCisuTGJpZ19sb29wMjoKKwkvKiBDb3B5IGxpbmUgMCwgZmlyc3Qgc3RhbGxpbmcgdW50aWwgcjUgaXMgcmVhZHkuICovCitFWDoJeyBtb3ZlIHIxMiwgcjU7IGx3IHIxNiwgcjEgfQorCXsgYnogcjQsIC5MY29weV84X2NoZWNrOyBzbHRpX3UgcjgsIHIyLCA4IH0KKyAgICAgICAgLyogUHJlZmV0Y2ggc2V2ZXJhbCBsaW5lcyBhaGVhZC4gKi8KK0VYOgl7IGx3IHI1LCByMzsgYWRkaSByMywgcjMsIDY0IH0KKyAgICAgICAgeyBqYWwgLkxjb3B5X2xpbmUgfQorCisJLyogQ29weSBsaW5lIDEsIGZpcnN0IHN0YWxsaW5nIHVudGlsIHI2IGlzIHJlYWR5LiAqLworRVg6CXsgbW92ZSByMTIsIHI2OyBsdyByMTYsIHIxIH0KKwl7IGJ6IHI0LCAuTGNvcHlfOF9jaGVjazsgc2x0aV91IHI4LCByMiwgOCB9CisgICAgICAgIC8qIFByZWZldGNoIHNldmVyYWwgbGluZXMgYWhlYWQuICovCitFWDoJeyBsdyByNiwgcjM7IGFkZGkgcjMsIHIzLCA2NCB9CisJeyBqYWwgLkxjb3B5X2xpbmUgfQorCisJLyogQ29weSBsaW5lIDIsIGZpcnN0IHN0YWxsaW5nIHVudGlsIHI3IGlzIHJlYWR5LiAqLworRVg6CXsgbW92ZSByMTIsIHI3OyBsdyByMTYsIHIxIH0KKwl7IGJ6IHI0LCAuTGNvcHlfOF9jaGVjazsgc2x0aV91IHI4LCByMiwgOCB9CisgICAgICAgIC8qIFByZWZldGNoIHNldmVyYWwgbGluZXMgYWhlYWQuICovCitFWDoJeyBsdyByNywgcjM7IGFkZGkgcjMsIHIzLCA2NCB9CisgICAgICAgIC8qIFVzZSB1cCBhIGNhY2hlcy1idXN5IGN5Y2xlIGJ5IGp1bXBpbmcgYmFjayB0byB0aGUgdG9wIG9mIHRoZQorICAgICAgICAgKiBsb29wLiBNaWdodCBhcyB3ZWxsIGdldCBpdCBvdXQgb2YgdGhlIHdheSBub3cuCisgICAgICAgICAqLworICAgICAgICB7IGogLkxiaWdfbG9vcCB9CisKKworCS8qIE9uIGVudHJ5OgorCSAqIC0gcjAgcG9pbnRzIHRvIHRoZSBkZXN0aW5hdGlvbiBsaW5lLgorCSAqIC0gcjEgcG9pbnRzIHRvIHRoZSBzb3VyY2UgbGluZS4KKyAgICAgICAgICogLSByMyBpcyB0aGUgbmV4dCBwcmVmZXRjaCBhZGRyZXNzLgorCSAqIC0gcjkgaG9sZHMgdGhlIGxhc3QgYWRkcmVzcyB1c2VkIGZvciB3aDY0LgorCSAqIC0gcjEyID0gV09SRF8xNQorICAgICAgICAgKiAtIHIxNiA9IFdPUkRfMC4KKyAgICAgICAgICogLSByMTcgPT0gcjEgKyAxNi4KKyAgICAgICAgICogLSByMjcgaG9sZHMgc2F2ZWQgbHIgdG8gcmVzdG9yZS4KKwkgKgorCSAqIE9uIGV4aXQ6CisJICogLSByMCBpcyBpbmNyZW1lbnRlZCBieSA2NC4KKwkgKiAtIHIxIGlzIGluY3JlbWVudGVkIGJ5IDY0LCB1bmxlc3MgdGhhdCB3b3VsZCBwb2ludCB0byBhIHdvcmQKKyAgICAgICAgICogICBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc291cmNlIGFycmF5LCBpbiB3aGljaCBjYXNlIGl0IGlzIHJlZGlyZWN0ZWQKKyAgICAgICAgICogICB0byBwb2ludCB0byBhbiBhcmJpdHJhcnkgd29yZCBhbHJlYWR5IGluIHRoZSBjYWNoZS4KKwkgKiAtIHIyIGlzIGRlY3JlbWVudGVkIGJ5IDY0LgorICAgICAgICAgKiAtIHIzIGlzIHVuY2hhbmdlZCwgdW5sZXNzIGl0IHBvaW50cyB0byBhIHdvcmQgYmV5b25kIHRoZQorICAgICAgICAgKiAgIGVuZCBvZiB0aGUgc291cmNlIGFycmF5LCBpbiB3aGljaCBjYXNlIGl0IGlzIHJlZGlyZWN0ZWQKKyAgICAgICAgICogICB0byBwb2ludCB0byBhbiBhcmJpdHJhcnkgd29yZCBhbHJlYWR5IGluIHRoZSBjYWNoZS4KKyAgICAgICAgICogICBSZWRpcmVjdGluZyBpcyBPSyBzaW5jZSBpZiB3ZSBhcmUgdGhhdCBjbG9zZSB0byB0aGUgZW5kCisgICAgICAgICAqICAgb2YgdGhlIGFycmF5IHdlIHdpbGwgbm90IGNvbWUgYmFjayB0byB0aGlzIHN1YnJvdXRpbmUKKyAgICAgICAgICogICBhbmQgdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgcHJlZmV0Y2hlZCBhZGRyZXNzLgorCSAqIC0gcjQgaXMgbm9uemVybyBpZmYgcjIgPj0gNjQuCisgICAgICAgICAqIC0gcjkgaXMgaW5jcmVtZW50ZWQgYnkgNjQsIHVubGVzcyBpdCBwb2ludHMgYmV5b25kIHRoZQorICAgICAgICAgKiAgIGVuZCBvZiB0aGUgbGFzdCBmdWxsIGRlc3RpbmF0aW9uIGNhY2hlIGxpbmUsIGluIHdoaWNoCisgICAgICAgICAqICAgY2FzZSBpdCBpcyByZWRpcmVjdGVkIHRvIGEgInNhZmUgYWRkcmVzcyIgdGhhdCBjYW4gYmUKKyAgICAgICAgICogICBjbG9iYmVyZWQgKHNwIC0gNjQpCisJICogLSBsciBjb250YWlucyB0aGUgdmFsdWUgaW4gcjI3LgorCSAqLworCisvKiByMjYgdW51c2VkICovCisKKy5MY29weV9saW5lOgorICAgICAgICAvKiBUT0RPOiB3aGVuIHIzIGdvZXMgcGFzdCB0aGUgZW5kLCB3ZSB3b3VsZCBsaWtlIHRvIHJlZGlyZWN0IGl0CisgICAgICAgICAqIHRvIHByZWZldGNoIHRoZSBsYXN0IHBhcnRpYWwgY2FjaGUgbGluZSAoaWYgYW55KSBqdXN0IG9uY2UsIGZvciB0aGUKKyAgICAgICAgICogYmVuZWZpdCBvZiB0aGUgZmluYWwgY2xlYW51cCBsb29wLiBCdXQgd2UgZG9uJ3Qgd2FudCB0bworICAgICAgICAgKiBwcmVmZXRjaCB0aGF0IGxpbmUgbW9yZSB0aGFuIG9uY2UsIG9yIHN1YnNlcXVlbnQgcHJlZmV0Y2hlcworICAgICAgICAgKiB3aWxsIGdvIGludG8gdGhlIFJURi4gQnV0IHRoZW4gLkxiaWdfbG9vcCBzaG91bGQgdW5jb25kaXRpb25hbGx5CisgICAgICAgICAqIGJyYW5jaCB0byB0b3Agb2YgbG9vcCB0byBleGVjdXRlIGZpbmFsIHByZWZldGNoLCBhbmQgaXRzCisgICAgICAgICAqIG5vcCBzaG91bGQgYmVjb21lIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorICAgICAgICAgKi8KKworICAgICAgICAvKiBXZSBuZWVkIHR3byBub24tbWVtb3J5IGN5Y2xlcyBoZXJlIHRvIGNvdmVyIHRoZSByZXNvdXJjZXMKKyAgICAgICAgICogdXNlZCBieSB0aGUgbG9hZHMgaW5pdGlhdGVkIGJ5IHRoZSBjYWxsZXIuCisgICAgICAgICAqLworICAgICAgICB7IGFkZCByMTUsIHIxLCByMiB9CisuTGNvcHlfbGluZTI6CisgICAgICAgIHsgc2x0X3UgcjEzLCByMywgcjE1OyBhZGRpIHIxNywgcjEsIDE2IH0KKworICAgICAgICAvKiBOT1RFOiB0aGlzIHdpbGwgc3RhbGwgZm9yIG9uZSBjeWNsZSBhcyBMMSBpcyBidXN5LiAqLworCisgICAgICAgIC8qIEZpbGwgc2Vjb25kIEwxRCBsaW5lLiAqLworRVg6CXsgbHcgcjE3LCByMTc7IGFkZGkgcjEsIHIxLCA0ODsgbXZ6IHIzLCByMTMsIHIxIH0gLyogcjE3ID0gV09SRF80ICovCisKKyNpZmRlZiBNRU1DUFlfVEVTVF9XSDY0CisgICAgICAgIC8qIElzc3VlIGEgZmFrZSB3aDY0IHRoYXQgY2xvYmJlcnMgdGhlIGRlc3RpbmF0aW9uIHdvcmRzCisgICAgICAgICAqIHdpdGggcmFuZG9tIGdhcmJhZ2UsIGZvciB0ZXN0aW5nLgorICAgICAgICAgKi8KKwl7IG1vdmVpIHIxOSwgNjQ7IGNyYzMyXzMyIHIxMCwgcjIsIHI5IH0KKy5Md2g2NF90ZXN0X2xvb3A6CitFWDoJeyBzdyByOSwgcjEwOyBhZGRpIHI5LCByOSwgNDsgYWRkaSByMTksIHIxOSwgLTQgfQorICAgICAgICB7IGJuenQgcjE5LCAuTHdoNjRfdGVzdF9sb29wOyBjcmMzMl8zMiByMTAsIHIxMCwgcjE5IH0KKyNlbGlmIENISVBfSEFTX1dINjQoKQorICAgICAgICAvKiBQcmVwYXJlIGRlc3RpbmF0aW9uIGxpbmUgZm9yIHdyaXRpbmcuICovCitFWDoJeyB3aDY0IHI5OyBhZGRpIHI5LCByOSwgNjQgfQorI2Vsc2UKKyAgICAgICAgLyogUHJlZmV0Y2ggZGVzdCBsaW5lICovCisJeyBwcmVmZXRjaCByOTsgYWRkaSByOSwgcjksIDY0IH0KKyNlbmRpZgorICAgICAgICAvKiBMb2FkIHNldmVuIHdvcmRzIHRoYXQgYXJlIEwxRCBoaXRzIHRvIGNvdmVyIHdoNjQgTDIgdXNhZ2UuICovCisKKyAgICAgICAgLyogTG9hZCB0aGUgdGhyZWUgcmVtYWluaW5nIHdvcmRzIGZyb20gdGhlIGxhc3QgTDFEIGxpbmUsIHdoaWNoCisgICAgICAgICAqIHdlIGtub3cgaGFzIGFscmVhZHkgZmlsbGVkIHRoZSBMMUQuCisgICAgICAgICAqLworRVg6CXsgbHcgcjQsIHIxOyAgYWRkaSByMSwgcjEsIDQ7ICAgYWRkaSByMjAsIHIxLCAxNiB9ICAgLyogcjQgPSBXT1JEXzEyICovCitFWDoJeyBsdyByOCwgcjE7ICBhZGRpIHIxLCByMSwgNDsgICBzbHRfdSByMTMsIHIyMCwgcjE1IH0vKiByOCA9IFdPUkRfMTMgKi8KK0VYOgl7IGx3IHIxMSwgcjE7IGFkZGkgcjEsIHIxLCAtNTI7IG12eiByMjAsIHIxMywgcjEgfSAgLyogcjExID0gV09SRF8xNCAqLworCisgICAgICAgIC8qIExvYWQgdGhlIHRocmVlIHJlbWFpbmluZyB3b3JkcyBmcm9tIHRoZSBmaXJzdCBMMUQgbGluZSwgZmlyc3QKKyAgICAgICAgICogc3RhbGxpbmcgdW50aWwgaXQgaGFzIGZpbGxlZCBieSAibG9va2luZyBhdCIgcjE2LgorICAgICAgICAgKi8KK0VYOgl7IGx3IHIxMywgcjE7IGFkZGkgcjEsIHIxLCA0OyBtb3ZlIHplcm8sIHIxNiB9ICAgLyogcjEzID0gV09SRF8xICovCitFWDoJeyBsdyByMTQsIHIxOyBhZGRpIHIxLCByMSwgNCB9ICAgICAgICAgICAgICAgICAgIC8qIHIxNCA9IFdPUkRfMiAqLworRVg6CXsgbHcgcjE1LCByMTsgYWRkaSByMSwgcjEsIDg7IGFkZGkgcjEwLCByMCwgNjAgfSAvKiByMTUgPSBXT1JEXzMgKi8KKworICAgICAgICAvKiBMb2FkIHNlY29uZCB3b3JkIGZyb20gdGhlIHNlY29uZCBMMUQgbGluZSwgZmlyc3QKKyAgICAgICAgICogc3RhbGxpbmcgdW50aWwgaXQgaGFzIGZpbGxlZCBieSAibG9va2luZyBhdCIgcjE3LgorICAgICAgICAgKi8KK0VYOgl7IGx3IHIxOSwgcjE7IGFkZGkgcjEsIHIxLCA0OyBtb3ZlIHplcm8sIHIxNyB9ICAvKiByMTkgPSBXT1JEXzUgKi8KKworICAgICAgICAvKiBTdG9yZSBsYXN0IHdvcmQgdG8gdGhlIGRlc3RpbmF0aW9uIGxpbmUsIHBvdGVudGlhbGx5IGRpcnR5aW5nIGl0CisgICAgICAgICAqIGZvciB0aGUgZmlyc3QgdGltZSwgd2hpY2gga2VlcHMgdGhlIEwyIGJ1c3kgZm9yIHR3byBjeWNsZXMuCisgICAgICAgICAqLworRVg6CXsgc3cgcjEwLCByMTIgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlKFdPUkRfMTUpICovCisKKyAgICAgICAgLyogVXNlIHR3byBMMUQgaGl0cyB0byBjb3ZlciB0aGUgc3cgTDIgYWNjZXNzIGFib3ZlLiAqLworRVg6CXsgbHcgcjEwLCByMTsgYWRkaSByMSwgcjEsIDQgfSAgICAgICAgICAgICAgICAgIC8qIHIxMCA9IFdPUkRfNiAqLworRVg6CXsgbHcgcjEyLCByMTsgYWRkaSByMSwgcjEsIDQgfSAgICAgICAgICAgICAgICAgIC8qIHIxMiA9IFdPUkRfNyAqLworCisgICAgICAgIC8qIEZpbGwgdGhpcmQgTDFEIGxpbmUuICovCitFWDoJeyBsdyByMTgsIHIxOyBhZGRpIHIxLCByMSwgNCB9ICAgICAgICAgICAgICAgICAgLyogcjE4ID0gV09SRF84ICovCisKKyAgICAgICAgLyogU3RvcmUgZmlyc3QgTDFEIGxpbmUuICovCitFWDoJeyBzdyByMCwgcjE2OyBhZGRpIHIwLCByMCwgNDsgYWRkIHIxNiwgcjAsIHIyIH0gLyogc3RvcmUoV09SRF8wKSAqLworRVg6CXsgc3cgcjAsIHIxMzsgYWRkaSByMCwgcjAsIDQ7IGFuZGkgcjE2LCByMTYsIC02NCB9IC8qIHN0b3JlKFdPUkRfMSkgKi8KK0VYOgl7IHN3IHIwLCByMTQ7IGFkZGkgcjAsIHIwLCA0OyBzbHRfdSByMTYsIHI5LCByMTYgfSAvKiBzdG9yZShXT1JEXzIpICovCisjaWZkZWYgTUVNQ1BZX1VTRV9XSDY0CitFWDoJeyBzdyByMCwgcjE1OyBhZGRpIHIwLCByMCwgNDsgYWRkaSByMTMsIHNwLCAtNjQgfSAvKiBzdG9yZShXT1JEXzMpICovCisjZWxzZQorICAgICAgICAvKiBCYWNrIHVwIHRoZSByOSB0byBhIGNhY2hlIGxpbmUgd2UgYXJlIGFscmVhZHkgc3RvcmluZyB0bworCSAqIGlmIGl0IGdldHMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZXN0IHZlY3Rvci4gIFN0cmljdGx5IHNwZWFraW5nLAorCSAqIHdlIGRvbid0IG5lZWQgdG8gYmFjayB1cCB0byB0aGUgc3RhcnQgb2YgYSBjYWNoZSBsaW5lLCBidXQgaXQncyBmcmVlCisJICogYW5kIHRpZHksIHNvIHdoeSBub3Q/CisgICAgICAgICAqLworRVg6CXsgc3cgcjAsIHIxNTsgYWRkaSByMCwgcjAsIDQ7IGFuZGkgcjEzLCByMCwgLTY0IH0gLyogc3RvcmUoV09SRF8zKSAqLworI2VuZGlmCisgICAgICAgIC8qIFN0b3JlIHNlY29uZCBMMUQgbGluZS4gKi8KK0VYOgl7IHN3IHIwLCByMTc7IGFkZGkgcjAsIHIwLCA0OyBtdnogcjksIHIxNiwgcjEzIH0vKiBzdG9yZShXT1JEXzQpICovCitFWDoJeyBzdyByMCwgcjE5OyBhZGRpIHIwLCByMCwgNCB9ICAgICAgICAgICAgICAgICAgLyogc3RvcmUoV09SRF81KSAqLworRVg6CXsgc3cgcjAsIHIxMDsgYWRkaSByMCwgcjAsIDQgfSAgICAgICAgICAgICAgICAgIC8qIHN0b3JlKFdPUkRfNikgKi8KK0VYOgl7IHN3IHIwLCByMTI7IGFkZGkgcjAsIHIwLCA0IH0gICAgICAgICAgICAgICAgICAvKiBzdG9yZShXT1JEXzcpICovCisKK0VYOgl7IGx3IHIxMywgcjE7IGFkZGkgcjEsIHIxLCA0OyBtb3ZlIHplcm8sIHIxOCB9ICAvKiByMTMgPSBXT1JEXzkgKi8KK0VYOgl7IGx3IHIxNCwgcjE7IGFkZGkgcjEsIHIxLCA0IH0gICAgICAgICAgICAgICAgICAvKiByMTQgPSBXT1JEXzEwICovCitFWDoJeyBsdyByMTUsIHIxOyBtb3ZlIHIxLCByMjAgICB9ICAgICAgICAgICAgICAgICAgLyogcjE1ID0gV09SRF8xMSAqLworCisgICAgICAgIC8qIFN0b3JlIHRoaXJkIEwxRCBsaW5lLiAqLworRVg6CXsgc3cgcjAsIHIxODsgYWRkaSByMCwgcjAsIDQgfSAgICAgICAgICAgICAgICAgIC8qIHN0b3JlKFdPUkRfOCkgKi8KK0VYOgl7IHN3IHIwLCByMTM7IGFkZGkgcjAsIHIwLCA0IH0gICAgICAgICAgICAgICAgICAvKiBzdG9yZShXT1JEXzkpICovCitFWDoJeyBzdyByMCwgcjE0OyBhZGRpIHIwLCByMCwgNCB9ICAgICAgICAgICAgICAgICAgLyogc3RvcmUoV09SRF8xMCkgKi8KK0VYOgl7IHN3IHIwLCByMTU7IGFkZGkgcjAsIHIwLCA0IH0gICAgICAgICAgICAgICAgICAvKiBzdG9yZShXT1JEXzExKSAqLworCisgICAgICAgIC8qIFN0b3JlIHJlc3Qgb2YgZm91cnRoIEwxRCBsaW5lLiAqLworRVg6CXsgc3cgcjAsIHI0OyAgYWRkaSByMCwgcjAsIDQgfSAgICAgICAgICAgICAgICAgIC8qIHN0b3JlKFdPUkRfMTIpICovCisgICAgICAgIHsKK0VYOglzdyByMCwgcjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZShXT1JEXzEzKSAqLworICAgICAgICBhZGRpIHIwLCByMCwgNAorCS8qIFdpbGwgcjIgYmUgPiA2NCBhZnRlciB3ZSBzdWJ0cmFjdCA2NCBiZWxvdz8gKi8KKyAgICAgICAgc2hyaSByNCwgcjIsIDcKKyAgICAgICAgfQorICAgICAgICB7CitFWDoJc3cgcjAsIHIxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmUoV09SRF8xNCkgKi8KKyAgICAgICAgYWRkaSByMCwgcjAsIDgKKyAgICAgICAgLyogUmVjb3JkIDY0IGJ5dGVzIHN1Y2Nlc3NmdWxseSBjb3BpZWQuICovCisgICAgICAgIGFkZGkgcjIsIHIyLCAtNjQKKyAgICAgICAgfQorCisJeyBqcnAgbHI7IG1vdmUgbHIsIHIyNyB9CisKKyAgICAgICAgLyogQ29udmV5IHRvIHRoZSBiYWNrdHJhY2UgbGlicmFyeSB0aGF0IHRoZSBzdGFjayBmcmFtZSBpcyBzaXplCisJICogemVybywgYW5kIHRoZSByZWFsIHJldHVybiBhZGRyZXNzIGlzIG9uIHRoZSBzdGFjayByYXRoZXIgdGhhbgorCSAqIGluICdscicuCisJICovCisJeyBpbmZvIDggfQorCisJLmFsaWduIDY0CisuTGNvcHlfdW5hbGlnbmVkX21heWJlX21hbnk6CisJLyogU2tpcCB0aGUgc2V0dXAgb3ZlcmhlYWQgaWYgd2UgYXJlbid0IGNvcHlpbmcgbWFueSBieXRlcy4gKi8KKwl7IHNsdGlfdSByOCwgcjIsIDIwOyBzdWIgcjQsIHplcm8sIHIwIH0KKwl7IGJuenQgcjgsIC5MY29weV91bmFsaWduZWRfZmV3OyBhbmRpIHI0LCByNCwgMyB9CisJeyBieiByNCwgLkxkZXN0X2lzX3dvcmRfYWxpZ25lZDsgYWRkIHIxOCwgcjEsIHIyIH0KKworLyoKKyAqCisgKiB1bmFsaWduZWQgNCBieXRlIGF0IGEgdGltZSBjb3B5IGhhbmRsZXIuCisgKgorICovCisKKwkvKiBDb3B5IHNpbmdsZSBieXRlcyB1bnRpbCByMCA9PSAwIG1vZCA0LCBzbyB3ZSBjYW4gc3RvcmUgd29yZHMuICovCisuTGFsaWduX2Rlc3RfbG9vcDoKK0VYOgl7IGxiX3UgcjMsIHIxOyBhZGRpIHIxLCByMSwgMTsgYWRkaSByNCwgcjQsIC0xIH0KK0VYOgl7IHNiIHIwLCByMzsgICBhZGRpIHIwLCByMCwgMTsgYWRkaSByMiwgcjIsIC0xIH0KKwl7IGJuenQgcjQsIC5MYWxpZ25fZGVzdF9sb29wOyBhbmRpIHIzLCByMSwgMyB9CisKKwkvKiBJZiBzb3VyY2UgYW5kIGRlc3QgYXJlIG5vdyAqYm90aCogYWxpZ25lZCwgZG8gYW4gYWxpZ25lZCBjb3B5LiAqLworCXsgYnogcjMsIC5MY2hlY2tfYWxpZ25lZF9jb3B5X3NpemU7IGFkZGxpIHI0LCByMiwgLTI1NiB9CisKKy5MZGVzdF9pc193b3JkX2FsaWduZWQ6CisKKyNpZiBDSElQX0hBU19EV09SRF9BTElHTigpCitFWDoJeyBhbmRpIHI4LCByMCwgNjM7IGx3YWRkX25hIHI2LCByMSwgNH0KKwl7IHNsdGlfdSByOSwgcjIsIDY0OyBieiByOCwgLkxkZXN0X2lzX0wyX2xpbmVfYWxpZ25lZCB9CisKKwkvKiBUaGlzIGNvcGllcyB1bmFsaWduZWQgd29yZHMgdW50aWwgZWl0aGVyIHRoZXJlIGFyZSBmZXdlcgorCSAqIHRoYW4gNCBieXRlcyBsZWZ0IHRvIGNvcHksIG9yIHVudGlsIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyCisJICogaXMgY2FjaGUtYWxpZ25lZCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgorCSAqCisJICogT24gZW50cnk6CisJICogLSByMCBpcyB0aGUgbmV4dCBzdG9yZSBhZGRyZXNzLgorCSAqIC0gcjEgcG9pbnRzIDQgYnl0ZXMgcGFzdCB0aGUgbG9hZCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gcjAuCisJICogLSByMiA+PSA0CisJICogLSByNiBpcyB0aGUgbmV4dCBhbGlnbmVkIHdvcmQgbG9hZGVkLgorCSAqLworLkxjb3B5X3VuYWxpZ25lZF9zcmNfd29yZHM6CitFWDoJeyBsd2FkZF9uYSByNywgcjEsIDQ7IHNsdGlfdSByOCwgcjIsIDQgKyA0IH0KKwkvKiBzdGFsbCAqLworCXsgZHdvcmRfYWxpZ24gcjYsIHI3LCByMTsgc2x0aV91IHI5LCByMiwgNjQgKyA0IH0KK0VYOgl7IHN3YWRkIHIwLCByNiwgNDsgYWRkaSByMiwgcjIsIC00IH0KKwl7IGJueiByOCwgLkxjbGVhbnVwX3VuYWxpZ25lZF93b3JkczsgYW5kaSByOCwgcjAsIDYzIH0KKwl7IGJuenQgcjgsIC5MY29weV91bmFsaWduZWRfc3JjX3dvcmRzOyBtb3ZlIHI2LCByNyB9CisKKwkvKiBPbiBlbnRyeToKKwkgKiAtIHIwIGlzIHRoZSBuZXh0IHN0b3JlIGFkZHJlc3MuCisJICogLSByMSBwb2ludHMgNCBieXRlcyBwYXN0IHRoZSBsb2FkIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byByMC4KKwkgKiAtIHIyID49IDQgKCMgb2YgYnl0ZXMgbGVmdCB0byBzdG9yZSkuCisJICogLSByNiBpcyB0aGUgbmV4dCBhbGlnbmVkIHNyYyB3b3JkIHZhbHVlLgorCSAqIC0gcjkgPSAocjIgPCA2NFUpLgorCSAqIC0gcjE4IHBvaW50cyBvbmUgYnl0ZSBwYXN0IHRoZSBlbmQgb2Ygc291cmNlIG1lbW9yeS4KKwkgKi8KKy5MZGVzdF9pc19MMl9saW5lX2FsaWduZWQ6CisKKwl7CisJLyogTm90IGEgZnVsbCBjYWNoZSBsaW5lIHJlbWFpbnMuICovCisJYm56IHI5LCAuTGNsZWFudXBfdW5hbGlnbmVkX3dvcmRzCisJbW92ZSByNywgcjYKKwl9CisKKwkvKiByMiA+PSA2NCAqLworCisJLyogS2ljayBvZmYgdHdvIHByZWZldGNoZXMsIGJ1dCBkb24ndCBnbyBwYXN0IHRoZSBlbmQuICovCisJeyBhZGRpIHIzLCByMSwgNjMgLSA0OyBhZGRpIHI4LCByMSwgNjQgKyA2MyAtIDQgfQorCXsgcHJlZmV0Y2ggcjM7IG1vdmUgcjMsIHI4OyBzbHRfdSByOCwgcjgsIHIxOCB9CisJeyBtdnogcjMsIHI4LCByMTsgYWRkaSByOCwgcjMsIDY0IH0KKwl7IHByZWZldGNoIHIzOyBtb3ZlIHIzLCByODsgc2x0X3UgcjgsIHI4LCByMTggfQorCXsgbXZ6IHIzLCByOCwgcjE7IG1vdmVpIHIxNywgMCB9CisKKy5MY29weV91bmFsaWduZWRfbGluZToKKwkvKiBQcmVmZXRjaCBhbm90aGVyIGxpbmUuICovCisJeyBwcmVmZXRjaCByMzsgYWRkaSByMTUsIHIxLCA2MDsgYWRkaSByMywgcjMsIDY0IH0KKwkvKiBGaXJlIG9mZiBhIGxvYWQgb2YgdGhlIGxhc3Qgd29yZCB3ZSBhcmUgYWJvdXQgdG8gY29weS4gKi8KK0VYOgl7IGx3X25hIHIxNSwgcjE1OyBzbHRfdSByOCwgcjMsIHIxOCB9CisKK0VYOgl7IG12eiByMywgcjgsIHIxOyB3aDY0IHIwIH0KKworCS8qIFRoaXMgbG9vcCBydW5zIHR3aWNlLgorCSAqCisJICogT24gZW50cnk6CisJICogLSByMTcgaXMgZXZlbiBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJhdGlvbiwgYW5kIG9kZCBiZWZvcmUKKwkgKiAgIHRoZSBzZWNvbmQuICBJdCBpcyBpbmNyZW1lbnRlZCBpbnNpZGUgdGhlIGxvb3AuICBFbmNvdW50ZXJpbmcKKwkgKiAgIGFuIGV2ZW4gdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcCBtYWtlcyBpdCBzdG9wLgorCSAqLworLkxjb3B5X2hhbGZfYW5fdW5hbGlnbmVkX2xpbmU6CitFWDoJeworCS8qIFN0YWxsIHVudGlsIHRoZSBsYXN0IGJ5dGUgaXMgcmVhZHkuIEluIHRoZSBzdGVhZHkgc3RhdGUgdGhpcworCSAqIGd1YXJhbnRlZXMgYWxsIHdvcmRzIHRvIGxvYWQgYmVsb3cgd2lsbCBiZSBpbiB0aGUgTDIgY2FjaGUsIHdoaWNoCisJICogYXZvaWRzIHNodW50aW5nIHRoZSBsb2FkcyB0byB0aGUgUlRGLgorCSAqLworCW1vdmUgemVybywgcjE1CisJbHdhZGRfbmEgcjcsIHIxLCAxNgorCX0KK0VYOgl7IGx3YWRkX25hIHIxMSwgcjEsIDEyIH0KK0VYOgl7IGx3YWRkX25hIHIxNCwgcjEsIC0yNCB9CitFWDoJeyBsd2FkZF9uYSByOCwgcjEsIDQgfQorRVg6CXsgbHdhZGRfbmEgcjksIHIxLCA0IH0KK0VYOgl7CisJbHdhZGRfbmEgcjEwLCByMSwgOAorCS8qIHIxNiA9IChyMiA8IDY0KSwgYWZ0ZXIgd2Ugc3VidHJhY3QgMzIgZnJvbSByMiBiZWxvdy4gKi8KKwlzbHRpX3UgcjE2LCByMiwgNjQgKyAzMgorCX0KK0VYOgl7IGx3YWRkX25hIHIxMiwgcjEsIDQ7IGFkZGkgcjE3LCByMTcsIDEgfQorRVg6CXsgbHdhZGRfbmEgcjEzLCByMSwgODsgZHdvcmRfYWxpZ24gcjYsIHI3LCByMSB9CitFWDoJeyBzd2FkZCByMCwgcjYsICA0OyBkd29yZF9hbGlnbiByNywgIHI4LCAgcjEgfQorRVg6CXsgc3dhZGQgcjAsIHI3LCAgNDsgZHdvcmRfYWxpZ24gcjgsICByOSwgIHIxIH0KK0VYOgl7IHN3YWRkIHIwLCByOCwgIDQ7IGR3b3JkX2FsaWduIHI5LCAgcjEwLCByMSB9CitFWDoJeyBzd2FkZCByMCwgcjksICA0OyBkd29yZF9hbGlnbiByMTAsIHIxMSwgcjEgfQorRVg6CXsgc3dhZGQgcjAsIHIxMCwgNDsgZHdvcmRfYWxpZ24gcjExLCByMTIsIHIxIH0KK0VYOgl7IHN3YWRkIHIwLCByMTEsIDQ7IGR3b3JkX2FsaWduIHIxMiwgcjEzLCByMSB9CitFWDoJeyBzd2FkZCByMCwgcjEyLCA0OyBkd29yZF9hbGlnbiByMTMsIHIxNCwgcjEgfQorRVg6CXsgc3dhZGQgcjAsIHIxMywgNDsgYWRkaSByMiwgcjIsIC0zMiB9CisJeyBtb3ZlIHI2LCByMTQ7IGJic3QgcjE3LCAuTGNvcHlfaGFsZl9hbl91bmFsaWduZWRfbGluZSB9CisKKwl7IGJ6dCByMTYsIC5MY29weV91bmFsaWduZWRfbGluZTsgbW92ZSByNywgcjYgfQorCisJLyogT24gZW50cnk6CisJICogLSByMCBpcyB0aGUgbmV4dCBzdG9yZSBhZGRyZXNzLgorCSAqIC0gcjEgcG9pbnRzIDQgYnl0ZXMgcGFzdCB0aGUgbG9hZCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gcjAuCisJICogLSByMiA+PSAwICgjIG9mIGJ5dGVzIGxlZnQgdG8gc3RvcmUpLgorCSAqIC0gcjcgaXMgdGhlIG5leHQgYWxpZ25lZCBzcmMgd29yZCB2YWx1ZS4KKwkgKi8KKy5MY2xlYW51cF91bmFsaWduZWRfd29yZHM6CisJLyogSGFuZGxlIGFueSB0cmFpbGluZyBieXRlcy4gKi8KKwl7IGJ6IHIyLCAuTGNvcHlfdW5hbGlnbmVkX2RvbmU7IHNsdGlfdSByOCwgcjIsIDQgfQorCXsgYnp0IHI4LCAuTGNvcHlfdW5hbGlnbmVkX3NyY193b3JkczsgbW92ZSByNiwgcjcgfQorCisJLyogTW92ZSByMSBiYWNrIHRvIHRoZSBwb2ludCB3aGVyZSBpdCBjb3JyZXNwb25kcyB0byByMC4gKi8KKwl7IGFkZGkgcjEsIHIxLCAtNCB9CisKKyNlbHNlIC8qICFDSElQX0hBU19EV09SRF9BTElHTigpICovCisKKwkvKiBDb21wdXRlIHJpZ2h0L2xlZnQgc2hpZnQgY291bnRzIGFuZCBsb2FkIGluaXRpYWwgc291cmNlIHdvcmRzLiAqLworCXsgYW5kaSByNSwgcjEsIC00OyBhbmRpIHIzLCByMSwgMyB9CitFWDoJeyBsdyByNiwgcjU7IGFkZGkgcjUsIHI1LCA0OyBzaGxpIHIzLCByMywgMyB9CitFWDoJeyBsdyByNywgcjU7IGFkZGkgcjUsIHI1LCA0OyBzdWIgcjQsIHplcm8sIHIzIH0KKworCS8qIExvYWQgYW5kIHN0b3JlIG9uZSB3b3JkIGF0IGEgdGltZSwgdXNpbmcgc2hpZnRzIGFuZCBPUnMKKwkgKiB0byBjb3JyZWN0IGZvciB0aGUgbWlzYWxpZ25lZCBzcmMuCisJICovCisuTGNvcHlfdW5hbGlnbmVkX3NyY19sb29wOgorCXsgc2hyIHI2LCByNiwgcjM7IHNobCByOCwgcjcsIHI0IH0KK0VYOgl7IGx3IHI3LCByNTsgb3IgcjgsIHI4LCByNjsgbW92ZSByNiwgcjcgfQorRVg6CXsgc3cgcjAsIHI4OyBhZGRpIHIwLCByMCwgNDsgYWRkaSByMiwgcjIsIC00IH0KKwl7IGFkZGkgcjUsIHI1LCA0OyBzbHRpX3UgcjgsIHIyLCA4IH0KKwl7IGJ6dCByOCwgLkxjb3B5X3VuYWxpZ25lZF9zcmNfbG9vcDsgYWRkaSByMSwgcjEsIDQgfQorCisJeyBieiByMiwgLkxjb3B5X3VuYWxpZ25lZF9kb25lIH0KKyNlbmRpZiAvKiAhQ0hJUF9IQVNfRFdPUkRfQUxJR04oKSAqLworCisJLyogRmFsbCB0aHJvdWdoICovCisKKy8qCisgKgorICogMSBieXRlIGF0IGEgdGltZSBjb3B5IGhhbmRsZXIuCisgKgorICovCisKKy5MY29weV91bmFsaWduZWRfZmV3OgorRVg6CXsgbGJfdSByMywgcjE7IGFkZGkgcjEsIHIxLCAxIH0KK0VYOgl7IHNiIHIwLCByMzsgICBhZGRpIHIwLCByMCwgMTsgYWRkaSByMiwgcjIsIC0xIH0KKwl7IGJuenQgcjIsIC5MY29weV91bmFsaWduZWRfZmV3IH0KKworLkxjb3B5X3VuYWxpZ25lZF9kb25lOgorCisJLyogRm9yIG1lbWNweSByZXR1cm4gb3JpZ2luYWwgZGVzdCBhZGRyZXNzLCBlbHNlIHplcm8uICovCisJeyBteiByMCwgcjI5LCByMjM7IGpycCBsciB9CisKKy5MZW5kX21lbWNweV9jb21tb246CisJLnNpemUgbWVtY3B5X2NvbW1vbiwgLkxlbmRfbWVtY3B5X2NvbW1vbiAtIG1lbWNweV9jb21tb24KKworCS5zZWN0aW9uIC5maXh1cCwiYXgiCittZW1jcHlfY29tbW9uX2ZpeHVwOgorCS50eXBlIG1lbWNweV9jb21tb25fZml4dXAsIEBmdW5jdGlvbgorCisJLyogU2tpcCBhbnkgYnl0ZXMgd2UgYWxyZWFkeSBzdWNjZXNzZnVsbHkgY29waWVkLgorCSAqIHIyIChudW0gcmVtYWluaW5nKSBpcyBjb3JyZWN0LCBidXQgcjAgKGRzdCkgYW5kIHIxIChzcmMpCisJICogbWF5IG5vdCBiZSBxdWl0ZSByaWdodCBiZWNhdXNlIG9mIHVucm9sbGluZyBhbmQgcHJlZmV0Y2hpbmcuCisJICogU28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlaXIgdmFsdWVzIGFzIHRoZSBhZGRyZXNzIGp1c3QKKwkgKiBhZnRlciB0aGUgbGFzdCBieXRlIHdlIGFyZSBzdXJlIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkIGFuZAorCSAqIHRoZW4gc3RvcmVkLgorCSAqLworCisJLyogRGV0ZXJtaW5lIGhvdyBtYW55IGJ5dGVzIHdlIHN1Y2Nlc3NmdWxseSBjb3BpZWQuICovCisJeyBzdWIgcjMsIHIyNSwgcjIgfQorCisJLyogQWRkIHRoaXMgdG8gdGhlIG9yaWdpbmFsIHIwIGFuZCByMSB0byBnZXQgdGhlaXIgbmV3IHZhbHVlcy4gKi8KKwl7IGFkZCByMCwgcjIzLCByMzsgYWRkIHIxLCByMjQsIHIzIH0KKworCXsgYnp0IHIyOSwgbWVtY3B5X2ZpeHVwX2xvb3AgfQorCXsgYmx6dCByMjksIGNvcHlfdG9fdXNlcl9maXh1cF9sb29wIH0KKworY29weV9mcm9tX3VzZXJfZml4dXBfbG9vcDoKKwkvKiBUcnkgY29weWluZyB0aGUgcmVzdCBvbmUgYnl0ZSBhdCBhIHRpbWUsIGV4cGVjdGluZyBhIGxvYWQgZmF1bHQuICovCisuTGNmdToJeyBsYl91IHIzLCByMTsgYWRkaSByMSwgcjEsIDEgfQorCXsgc2IgcjAsIHIzOyBhZGRpIHIwLCByMCwgMTsgYWRkaSByMiwgcjIsIC0xIH0KKwl7IGJuenQgcjIsIGNvcHlfZnJvbV91c2VyX2ZpeHVwX2xvb3AgfQorCisuTGNvcHlfZnJvbV91c2VyX2ZpeHVwX3plcm9fcmVtYWluZGVyOgorCXsgYmJzIHIyOSwgMmYgfSAgLyogbG93IGJpdCBzZXQgbWVhbnMgSVNfQ09QWV9GUk9NX1VTRVIgKi8KKwkvKiBieXRlLWF0LWEtdGltZSBsb29wIGZhdWx0ZWQsIHNvIHplcm8gdGhlIHJlc3QuICovCisJeyBtb3ZlIHIzLCByMjsgYnogcjIsIDJmIC8qIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBidXQgaGFuZGxlIGl0LiAqLyB9CisxOiAgICAgIHsgc2IgcjAsIHplcm87IGFkZGkgcjAsIHIwLCAxOyBhZGRpIHIzLCByMywgLTEgfQorCXsgYm56dCByMywgMWIgfQorMjoJbW92ZSBsciwgcjI3CisJeyBtb3ZlIHIwLCByMjsganJwIGxyIH0KKworY29weV90b191c2VyX2ZpeHVwX2xvb3A6CisJLyogVHJ5IGNvcHlpbmcgdGhlIHJlc3Qgb25lIGJ5dGUgYXQgYSB0aW1lLCBleHBlY3RpbmcgYSBzdG9yZSBmYXVsdC4gKi8KKwl7IGxiX3UgcjMsIHIxOyBhZGRpIHIxLCByMSwgMSB9CisuTGN0dToJeyBzYiByMCwgcjM7IGFkZGkgcjAsIHIwLCAxOyBhZGRpIHIyLCByMiwgLTEgfQorCXsgYm56dCByMiwgY29weV90b191c2VyX2ZpeHVwX2xvb3AgfQorLkxjb3B5X3RvX3VzZXJfZml4dXBfZG9uZToKKwltb3ZlIGxyLCByMjcKKwl7IG1vdmUgcjAsIHIyOyBqcnAgbHIgfQorCittZW1jcHlfZml4dXBfbG9vcDoKKwkvKiBUcnkgY29weWluZyB0aGUgcmVzdCBvbmUgYnl0ZSBhdCBhIHRpbWUuIFdlIGV4cGVjdCBhIGRpc2FzdHJvdXMKKwkgKiBmYXVsdCB0byBoYXBwZW4gc2luY2Ugd2UgYXJlIGluIGZpeHVwIGNvZGUsIGJ1dCBsZXQgaXQgaGFwcGVuLgorCSAqLworCXsgbGJfdSByMywgcjE7IGFkZGkgcjEsIHIxLCAxIH0KKwl7IHNiIHIwLCByMzsgYWRkaSByMCwgcjAsIDE7IGFkZGkgcjIsIHIyLCAtMSB9CisJeyBibnp0IHIyLCBtZW1jcHlfZml4dXBfbG9vcCB9CisJLyogVGhpcyBzaG91bGQgYmUgdW5yZWFjaGFibGUsIHdlIHNob3VsZCBoYXZlIGZhdWx0ZWQgYWdhaW4uCisJICogQnV0IGJlIHBhcmFub2lkIGFuZCBoYW5kbGUgaXQgaW4gY2FzZSBzb21lIGludGVycnVwdCBjaGFuZ2VkCisJICogdGhlIFRMQiBvciBzb21ldGhpbmcuCisJICovCisJbW92ZSBsciwgcjI3CisJeyBtb3ZlIHIwLCByMjM7IGpycCBsciB9CisKKwkuc2l6ZSBtZW1jcHlfY29tbW9uX2ZpeHVwLCAuIC0gbWVtY3B5X2NvbW1vbl9maXh1cAorCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkud29yZCAuTGNmdSwgLkxjb3B5X2Zyb21fdXNlcl9maXh1cF96ZXJvX3JlbWFpbmRlcgorCS53b3JkIC5MY3R1LCAuTGNvcHlfdG9fdXNlcl9maXh1cF9kb25lCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL21lbWNweV90aWxlNjQuYyBiL2FyY2gvdGlsZS9saWIvbWVtY3B5X3RpbGU2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZWRlYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL21lbWNweV90aWxlNjQuYwpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworCisjaWYgIUNISVBfSEFTX0NPSEVSRU5UX0xPQ0FMX0NBQ0hFKCkKKworLyogRGVmaW5lZCBpbiBtZW1jcHkuUyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19tZW1jcHlfYXNtKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19jb3B5X3RvX3VzZXJfaW5hdG9taWNfYXNtKAorCXZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWNfYXNtKAorCXZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fY29weV9mcm9tX3VzZXJfemVyb2luZ19hc20oCisJdm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgKCptZW1jcHlfdCkodm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOworCisvKiBTaXplIGFib3ZlIHdoaWNoIHRvIGNvbnNpZGVyIFRMQiBnYW1lcyBmb3IgcGVyZm9ybWFuY2UgKi8KKyNkZWZpbmUgTEFSR0VfQ09QWV9DVVRPRkYgMjA0OAorCisvKiBDb21tdW5pY2F0ZSB0byB0aGUgc2ltdWxhdG9yIHdoYXQgd2UgYXJlIHRyeWluZyB0byBkby4gKi8KKyNkZWZpbmUgc2ltX2FsbG93X211bHRpcGxlX2NhY2hpbmcoYikgXAorICBfX2luc25fbXRzcHIoU1BSX1NJTV9DT05UUk9MLCBcCisgICBTSU1fQ09OVFJPTF9BTExPV19NVUxUSVBMRV9DQUNISU5HIHwgKChiKSA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpCisKKy8qCisgKiBDb3B5IG1lbW9yeSBieSBicmllZmx5IGVuYWJsaW5nIGluY29oZXJlbnQgY2FjaGVsaW5lLWF0LWEtdGltZSBtb2RlLgorICoKKyAqIFdlIHNldCB1cCBvdXIgb3duIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gUFRFcyB0aGF0IHdlIGZ1bGx5IGNvbnRyb2wuCisgKiBUaGlzIGlzIHRoZSBvbmx5IHdheSB0byBndWFyYW50ZWUgdGhhdCB3ZSBkb24ndCByYWNlIHdpdGggYW5vdGhlcgorICogdGhyZWFkIHRoYXQgaXMgbW9kaWZ5aW5nIHRoZSBQVEU7IHdlIGNhbid0IGFmZm9yZCB0byB0cnkgdGhlCisgKiBjb3B5X3t0byxmcm9tfV91c2VyKCkgdGVjaG5pcXVlIG9mIGNhdGNoaW5nIHRoZSBpbnRlcnJ1cHQsIHNpbmNlCisgKiB3ZSBtdXN0IHJ1biB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgdG8gYXZvaWQgdGhlIHJpc2sgb2Ygc29tZQorICogb3RoZXIgY29kZSBzZWVpbmcgdGhlIGluY29oZXJlbnQgZGF0YSBpbiBvdXIgY2FjaGUuICAoUmVjYWxsIHRoYXQKKyAqIG91ciBjYWNoZSBpcyBpbmRleGVkIGJ5IFBBLCBzbyBldmVuIGlmIHRoZSBvdGhlciBjb2RlIGRvZXNuJ3QgdXNlCisgKiBvdXIgS01fTUVNQ1BZIHZpcnR1YWwgYWRkcmVzc2VzLCB0aGV5J2xsIHN0aWxsIGhpdCBpbiBjYWNoZSB1c2luZworICogdGhlIG5vcm1hbCBWQXMgdGhhdCBhcmVuJ3Qgc3VwcG9zZWQgdG8gaGl0IGluIGNhY2hlLikKKyAqLworc3RhdGljIHZvaWQgbWVtY3B5X211bHRpY2FjaGUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc291cmNlLAorCQkJICAgICAgcHRlX3QgZHN0X3B0ZSwgcHRlX3Qgc3JjX3B0ZSwgaW50IGxlbikKK3sKKwlpbnQgaWR4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5ld3NyYywgbmV3ZHN0OworCXBtZF90ICpwbWRwOworCXB0ZV90ICpwdGVwOworCWludCBjcHUgPSBnZXRfY3B1KCk7CisKKwkvKgorCSAqIERpc2FibGUgaW50ZXJydXB0cyBzbyB0aGF0IHdlIGRvbid0IHJlY3Vyc2UgaW50byBtZW1jcHkoKQorCSAqIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCBub3IgYWNjaWRlbnRhbGx5IHJlZmVyZW5jZQorCSAqIHRoZSBQQSBvZiB0aGUgc291cmNlIGZyb20gYW4gaW50ZXJydXB0IHJvdXRpbmUuICBBbHNvCisJICogbm90aWZ5IHRoZSBzaW11bGF0b3IgdGhhdCB3ZSdyZSBwbGF5aW5nIGdhbWVzIHNvIHdlIGRvbid0CisJICogZ2VuZXJhdGUgc3B1cmlvdXMgY29oZXJlbmN5IHdhcm5pbmdzLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlzaW1fYWxsb3dfbXVsdGlwbGVfY2FjaGluZygxKTsKKworCS8qIFNldCB1cCB0aGUgbmV3IGRlc3QgbWFwcGluZyAqLworCWlkeCA9IEZJWF9LTUFQX0JFR0lOICsgKEtNX1RZUEVfTlIgKiBjcHUpICsgS01fTUVNQ1BZMDsKKwluZXdkc3QgPSBfX2ZpeF90b192aXJ0KGlkeCkgKyAoKHVuc2lnbmVkIGxvbmcpZGVzdCAmIChQQUdFX1NJWkUtMSkpOworCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rKG5ld2RzdCksIG5ld2RzdCksIG5ld2RzdCk7CisJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIG5ld2RzdCk7CisJaWYgKHB0ZV92YWwoKnB0ZXApICE9IHB0ZV92YWwoZHN0X3B0ZSkpIHsKKwkJc2V0X3B0ZShwdGVwLCBkc3RfcHRlKTsKKwkJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgbmV3ZHN0LCBQQUdFX1NJWkUpOworCX0KKworCS8qIFNldCB1cCB0aGUgbmV3IHNvdXJjZSBtYXBwaW5nICovCisJaWR4ICs9IChLTV9NRU1DUFkwIC0gS01fTUVNQ1BZMSk7CisJc3JjX3B0ZSA9IGh2X3B0ZV9zZXRfbmMoc3JjX3B0ZSk7CisJc3JjX3B0ZSA9IGh2X3B0ZV9jbGVhcl93cml0YWJsZShzcmNfcHRlKTsgIC8qIGJlIHBhcmFub2lkICovCisJbmV3c3JjID0gX19maXhfdG9fdmlydChpZHgpICsgKCh1bnNpZ25lZCBsb25nKXNvdXJjZSAmIChQQUdFX1NJWkUtMSkpOworCXBtZHAgPSBwbWRfb2Zmc2V0KHB1ZF9vZmZzZXQocGdkX29mZnNldF9rKG5ld3NyYyksIG5ld3NyYyksIG5ld3NyYyk7CisJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIG5ld3NyYyk7CisJKnB0ZXAgPSBzcmNfcHRlOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCisJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgbmV3c3JjLCBQQUdFX1NJWkUpOworCisJLyogQWN0dWFsbHkgbW92ZSB0aGUgZGF0YS4gKi8KKwlfX21lbWNweV9hc20oKHZvaWQgKiluZXdkc3QsIChjb25zdCB2b2lkICopbmV3c3JjLCBsZW4pOworCisJLyoKKwkgKiBSZW1hcCB0aGUgc291cmNlIGFzIGxvY2FsbHktY2FjaGVkIGFuZCBub3QgT0xPQydlZCBzbyB0aGF0CisJICogd2UgY2FuIGludmFsIHdpdGhvdXQgYWxzbyBpbnZhbGluZyB0aGUgcmVtb3RlIGNwdSdzIGNhY2hlLgorCSAqIFRoaXMgYWxzbyBhdm9pZHMga25vd24gZXJyYXRhIHdpdGggaW52J2luZyBjYWNoZWFibGUgb2xvYyBkYXRhLgorCSAqLworCXNyY19wdGUgPSBodl9wdGVfc2V0X21vZGUoc3JjX3B0ZSwgSFZfUFRFX01PREVfQ0FDSEVfTk9fTDMpOworCXNyY19wdGUgPSBodl9wdGVfc2V0X3dyaXRhYmxlKHNyY19wdGUpOyAvKiBuZWVkIHdyaXRlIGFjY2VzcyBmb3IgaW52ICovCisJKnB0ZXAgPSBzcmNfcHRlOyAgIC8qIHNldF9wdGUoKSB3b3VsZCBiZSBjb25mdXNlZCBieSB0aGlzICovCisJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgbmV3c3JjLCBQQUdFX1NJWkUpOworCisJLyoKKwkgKiBEbyB0aGUgYWN0dWFsIGludmFsaWRhdGlvbiwgY292ZXJpbmcgdGhlIGZ1bGwgTDIgY2FjaGUgbGluZQorCSAqIGF0IHRoZSBlbmQgc2luY2UgX19tZW1jcHlfYXNtKCkgaXMgc29tZXdoYXQgYWdncmVzc2l2ZS4KKwkgKi8KKwlfX2ludl9idWZmZXIoKHZvaWQgKiluZXdzcmMsIGxlbik7CisKKwkvKgorCSAqIFdlJ3JlIGRvbmU6IG5vdGlmeSB0aGUgc2ltdWxhdG9yIHRoYXQgYWxsIGlzIGJhY2sgdG8gbm9ybWFsLAorCSAqIGFuZCByZS1lbmFibGUgaW50ZXJydXB0cyBhbmQgcHJlLWVtcHRpb24uCisJICovCisJc2ltX2FsbG93X211bHRpcGxlX2NhY2hpbmcoMCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXB1dF9jcHUoKTsKK30KKworLyoKKyAqIElkZW50aWZ5IGxhcmdlIGNvcGllcyBmcm9tIHJlbW90ZWx5LWNhY2hlZCBtZW1vcnksIGFuZCBjb3B5IHRoZW0KKyAqIHZpYSBtZW1jcHlfbXVsdGljYWNoZSgpIGlmIHRoZXkgbG9vayBnb29kLCBvdGhlcndpc2UgZmFsbCBiYWNrCisgKiB0byB0aGUgcGFydGljdWxhciBraW5kIG9mIGNvcHlpbmcgcGFzc2VkIGFzIHRoZSBtZW1jcHlfdCBmdW5jdGlvbi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmFzdF9jb3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNvdXJjZSwgaW50IGxlbiwKKwkJCSAgICAgICBtZW1jcHlfdCBmdW5jKQoreworCS8qCisJICogQ2hlY2sgaWYgaXQncyBiaWcgZW5vdWdoIHRvIGJvdGhlciB3aXRoLiAgV2UgbWF5IGVuZCB1cCBkb2luZyBhCisJICogc21hbGwgY29weSB2aWEgVExCIG1hbmlwdWxhdGlvbiBpZiB3ZSdyZSBuZWFyIGEgcGFnZSBib3VuZGFyeSwKKwkgKiBidXQgcHJlc3VtYWJseSB3ZSdsbCBtYWtlIGl0IHVwIHdoZW4gd2UgaGl0IHRoZSBzZWNvbmQgcGFnZS4KKwkgKi8KKwl3aGlsZSAobGVuID49IExBUkdFX0NPUFlfQ1VUT0ZGKSB7CisJCWludCBjb3B5X3NpemUsIGJ5dGVzX2xlZnRfb25fcGFnZTsKKwkJcHRlX3QgKnNyY19wdGVwLCAqZHN0X3B0ZXA7CisJCXB0ZV90IHNyY19wdGUsIGRzdF9wdGU7CisJCXN0cnVjdCBwYWdlICpzcmNfcGFnZSwgKmRzdF9wYWdlOworCisJCS8qIElzIHRoZSBzb3VyY2UgcGFnZSBvbG9jJ2VkIHRvIGEgcmVtb3RlIGNwdT8gKi8KK3JldHJ5X3NvdXJjZToKKwkJc3JjX3B0ZXAgPSB2aXJ0X3RvX3B0ZShjdXJyZW50LT5tbSwgKHVuc2lnbmVkIGxvbmcpc291cmNlKTsKKwkJaWYgKHNyY19wdGVwID09IE5VTEwpCisJCQlicmVhazsKKwkJc3JjX3B0ZSA9ICpzcmNfcHRlcDsKKwkJaWYgKCFodl9wdGVfZ2V0X3ByZXNlbnQoc3JjX3B0ZSkgfHwKKwkJICAgICFodl9wdGVfZ2V0X3JlYWRhYmxlKHNyY19wdGUpIHx8CisJCSAgICBodl9wdGVfZ2V0X21vZGUoc3JjX3B0ZSkgIT0gSFZfUFRFX01PREVfQ0FDSEVfVElMRV9MMykKKwkJCWJyZWFrOworCQlpZiAoZ2V0X3JlbW90ZV9jYWNoZV9jcHUoc3JjX3B0ZSkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJYnJlYWs7CisJCXNyY19wYWdlID0gcGZuX3RvX3BhZ2UoaHZfcHRlX2dldF9wZm4oc3JjX3B0ZSkpOworCQlnZXRfcGFnZShzcmNfcGFnZSk7CisJCWlmIChwdGVfdmFsKHNyY19wdGUpICE9IHB0ZV92YWwoKnNyY19wdGVwKSkgeworCQkJcHV0X3BhZ2Uoc3JjX3BhZ2UpOworCQkJZ290byByZXRyeV9zb3VyY2U7CisJCX0KKwkJaWYgKHB0ZV9odWdlKHNyY19wdGUpKSB7CisJCQkvKiBBZGp1c3QgdGhlIFBURSB0byBjb3JyZXNwb25kIHRvIGEgc21hbGwgcGFnZSAqLworCQkJaW50IHBmbiA9IGh2X3B0ZV9nZXRfcGZuKHNyY19wdGUpOworCQkJcGZuICs9ICgoKHVuc2lnbmVkIGxvbmcpc291cmNlICYgKEhQQUdFX1NJWkUtMSkpCisJCQkJPj4gUEFHRV9TSElGVCk7CisJCQlzcmNfcHRlID0gcGZuX3B0ZShwZm4sIHNyY19wdGUpOworCQkJc3JjX3B0ZSA9IHB0ZV9ta3NtYWxsKHNyY19wdGUpOworCQl9CisKKwkJLyogSXMgdGhlIGRlc3RpbmF0aW9uIHBhZ2Ugd3JpdGFibGU/ICovCityZXRyeV9kZXN0OgorCQlkc3RfcHRlcCA9IHZpcnRfdG9fcHRlKGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylkZXN0KTsKKwkJaWYgKGRzdF9wdGVwID09IE5VTEwpIHsKKwkJCXB1dF9wYWdlKHNyY19wYWdlKTsKKwkJCWJyZWFrOworCQl9CisJCWRzdF9wdGUgPSAqZHN0X3B0ZXA7CisJCWlmICghaHZfcHRlX2dldF9wcmVzZW50KGRzdF9wdGUpIHx8CisJCSAgICAhaHZfcHRlX2dldF93cml0YWJsZShkc3RfcHRlKSkgeworCQkJcHV0X3BhZ2Uoc3JjX3BhZ2UpOworCQkJYnJlYWs7CisJCX0KKwkJZHN0X3BhZ2UgPSBwZm5fdG9fcGFnZShodl9wdGVfZ2V0X3Bmbihkc3RfcHRlKSk7CisJCWlmIChkc3RfcGFnZSA9PSBzcmNfcGFnZSkgeworCQkJLyoKKwkJCSAqIFNvdXJjZSBhbmQgZGVzdCBhcmUgb24gdGhlIHNhbWUgcGFnZTsgdGhpcworCQkJICogcG90ZW50aWFsbHkgZXhwb3NlcyB1cyB0byBpbmNvaGVyZW5jZSBpZiBhbnkKKwkJCSAqIHBhcnQgb2Ygc3JjIGFuZCBkZXN0IG92ZXJsYXAgb24gYSBjYWNoZSBsaW5lLgorCQkJICogSnVzdCBnaXZlIHVwIHJhdGhlciB0aGFuIHRyeWluZyB0byBiZSBwcmVjaXNlLgorCQkJICovCisJCQlwdXRfcGFnZShzcmNfcGFnZSk7CisJCQlicmVhazsKKwkJfQorCQlnZXRfcGFnZShkc3RfcGFnZSk7CisJCWlmIChwdGVfdmFsKGRzdF9wdGUpICE9IHB0ZV92YWwoKmRzdF9wdGVwKSkgeworCQkJcHV0X3BhZ2UoZHN0X3BhZ2UpOworCQkJZ290byByZXRyeV9kZXN0OworCQl9CisJCWlmIChwdGVfaHVnZShkc3RfcHRlKSkgeworCQkJLyogQWRqdXN0IHRoZSBQVEUgdG8gY29ycmVzcG9uZCB0byBhIHNtYWxsIHBhZ2UgKi8KKwkJCWludCBwZm4gPSBodl9wdGVfZ2V0X3Bmbihkc3RfcHRlKTsKKwkJCXBmbiArPSAoKCh1bnNpZ25lZCBsb25nKWRlc3QgJiAoSFBBR0VfU0laRS0xKSkKKwkJCQk+PiBQQUdFX1NISUZUKTsKKwkJCWRzdF9wdGUgPSBwZm5fcHRlKHBmbiwgZHN0X3B0ZSk7CisJCQlkc3RfcHRlID0gcHRlX21rc21hbGwoZHN0X3B0ZSk7CisJCX0KKworCQkvKiBBbGwgbG9va3MgZ29vZDogY3JlYXRlIGEgY2FjaGFibGUgUFRFIGFuZCBjb3B5IGZyb20gaXQgKi8KKwkJY29weV9zaXplID0gbGVuOworCQlieXRlc19sZWZ0X29uX3BhZ2UgPQorCQkJUEFHRV9TSVpFIC0gKCgoaW50KXNvdXJjZSkgJiAoUEFHRV9TSVpFLTEpKTsKKwkJaWYgKGNvcHlfc2l6ZSA+IGJ5dGVzX2xlZnRfb25fcGFnZSkKKwkJCWNvcHlfc2l6ZSA9IGJ5dGVzX2xlZnRfb25fcGFnZTsKKwkJYnl0ZXNfbGVmdF9vbl9wYWdlID0KKwkJCVBBR0VfU0laRSAtICgoKGludClkZXN0KSAmIChQQUdFX1NJWkUtMSkpOworCQlpZiAoY29weV9zaXplID4gYnl0ZXNfbGVmdF9vbl9wYWdlKQorCQkJY29weV9zaXplID0gYnl0ZXNfbGVmdF9vbl9wYWdlOworCQltZW1jcHlfbXVsdGljYWNoZShkZXN0LCBzb3VyY2UsIGRzdF9wdGUsIHNyY19wdGUsIGNvcHlfc2l6ZSk7CisKKwkJLyogUmVsZWFzZSB0aGUgcGFnZXMgKi8KKwkJcHV0X3BhZ2UoZHN0X3BhZ2UpOworCQlwdXRfcGFnZShzcmNfcGFnZSk7CisKKwkJLyogQ29udGludWUgb24gdGhlIG5leHQgcGFnZSAqLworCQlkZXN0ICs9IGNvcHlfc2l6ZTsKKwkJc291cmNlICs9IGNvcHlfc2l6ZTsKKwkJbGVuIC09IGNvcHlfc2l6ZTsKKwl9CisKKwlyZXR1cm4gZnVuYyhkZXN0LCBzb3VyY2UsIGxlbik7Cit9CisKK3ZvaWQgKm1lbWNweSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgX19rZXJuZWxfc2l6ZV90IG4pCit7CisJaWYgKG4gPCBMQVJHRV9DT1BZX0NVVE9GRikKKwkJcmV0dXJuICh2b2lkICopX19tZW1jcHlfYXNtKHRvLCBmcm9tLCBuKTsKKwllbHNlCisJCXJldHVybiAodm9pZCAqKWZhc3RfY29weSh0bywgZnJvbSwgbiwgX19tZW1jcHlfYXNtKTsKK30KKwordW5zaWduZWQgbG9uZyBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyh2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuIDwgTEFSR0VfQ09QWV9DVVRPRkYpCisJCXJldHVybiBfX2NvcHlfdG9fdXNlcl9pbmF0b21pY19hc20odG8sIGZyb20sIG4pOworCWVsc2UKKwkJcmV0dXJuIGZhc3RfY29weSh0bywgZnJvbSwgbiwgX19jb3B5X3RvX3VzZXJfaW5hdG9taWNfYXNtKTsKK30KKwordW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuIDwgTEFSR0VfQ09QWV9DVVRPRkYpCisJCXJldHVybiBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX2FzbSh0bywgZnJvbSwgbik7CisJZWxzZQorCQlyZXR1cm4gZmFzdF9jb3B5KHRvLCBmcm9tLCBuLCBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX2FzbSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcl96ZXJvaW5nKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworCWlmIChuIDwgTEFSR0VfQ09QWV9DVVRPRkYpCisJCXJldHVybiBfX2NvcHlfZnJvbV91c2VyX3plcm9pbmdfYXNtKHRvLCBmcm9tLCBuKTsKKwllbHNlCisJCXJldHVybiBmYXN0X2NvcHkodG8sIGZyb20sIG4sIF9fY29weV9mcm9tX3VzZXJfemVyb2luZ19hc20pOworfQorCisjZW5kaWYgLyogIUNISVBfSEFTX0NPSEVSRU5UX0xPQ0FMX0NBQ0hFKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvbWVtbW92ZV8zMi5jIGIvYXJjaC90aWxlL2xpYi9tZW1tb3ZlXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ2MTVhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvbWVtbW92ZV8zMi5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKK3sKKwlpZiAoKGNvbnN0IGNoYXIgKilzcmMgPj0gKGNoYXIgKilkZXN0ICsgbgorCSAgICB8fCAoY2hhciAqKWRlc3QgPj0gKGNvbnN0IGNoYXIgKilzcmMgKyBuKSB7CisJCS8qIFdlIGZvdW5kIG5vIG92ZXJsYXAsIHNvIGxldCBtZW1jcHkgZG8gYWxsIHRoZSBoZWF2eQorCQkgKiBsaWZ0aW5nIChwcmVmZXRjaGluZywgZXRjLikKKwkJICovCisJCXJldHVybiBtZW1jcHkoZGVzdCwgc3JjLCBuKTsKKwl9CisKKwlpZiAobiAhPSAwKSB7CisJCWNvbnN0IHVpbnQ4X3QgKmluOworCQl1aW50OF90IHg7CisJCXVpbnQ4X3QgKm91dDsKKwkJaW50IHN0cmlkZTsKKworCQlpZiAoc3JjIDwgZGVzdCkgeworCQkJLyogY29weSBiYWNrd2FyZHMgKi8KKwkJCWluID0gKGNvbnN0IHVpbnQ4X3QgKilzcmMgKyBuIC0gMTsKKwkJCW91dCA9ICh1aW50OF90ICopZGVzdCArIG4gLSAxOworCQkJc3RyaWRlID0gLTE7CisJCX0gZWxzZSB7CisJCQkvKiBjb3B5IGZvcndhcmRzICovCisJCQlpbiA9IChjb25zdCB1aW50OF90ICopc3JjOworCQkJb3V0ID0gKHVpbnQ4X3QgKilkZXN0OworCQkJc3RyaWRlID0gMTsKKwkJfQorCisJCS8qIE1hbnVhbGx5IHNvZnR3YXJlLXBpcGVsaW5lIHRoaXMgbG9vcC4gKi8KKwkJeCA9ICppbjsKKwkJaW4gKz0gc3RyaWRlOworCisJCXdoaWxlICgtLW4gIT0gMCkgeworCQkJKm91dCA9IHg7CisJCQlvdXQgKz0gc3RyaWRlOworCQkJeCA9ICppbjsKKwkJCWluICs9IHN0cmlkZTsKKwkJfQorCisJCSpvdXQgPSB4OworCX0KKworCXJldHVybiBkZXN0OworfQorRVhQT1JUX1NZTUJPTChtZW1tb3ZlKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9saWIvbWVtc2V0XzMyLmMgYi9hcmNoL3RpbGUvbGliL21lbXNldF8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGU1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL21lbXNldF8zMi5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKwordm9pZCAqbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKwl1aW50MzJfdCAqb3V0MzI7CisJaW50IG4zMjsKKwl1aW50MzJfdCB2MTYsIHYzMjsKKwl1aW50OF90ICpvdXQ4ID0gczsKKyNpZiAhQ0hJUF9IQVNfV0g2NCgpCisJaW50IGFoZWFkMzI7CisjZWxzZQorCWludCB0b19hbGlnbjMyOworI2VuZGlmCisKKwkvKiBFeHBlcmltZW50YXRpb24gc2hvd3MgdGhhdCBhIHRyaXZpYWwgdGlnaHQgbG9vcCBpcyBhIHdpbiB1cCB1bnRpbAorCSAqIGFyb3VuZCBhIHNpemUgb2YgMjAsIHdoZXJlIHdyaXRpbmcgYSB3b3JkIGF0IGEgdGltZSBzdGFydHMgdG8gd2luLgorCSAqLworI2RlZmluZSBCWVRFX0NVVE9GRiAyMAorCisjaWYgQllURV9DVVRPRkYgPCAzCisJLyogVGhpcyBtdXN0IGJlIGF0IGxlYXN0IGF0IGxlYXN0IHRoaXMgYmlnLCBvciBzb21lIGNvZGUgbGF0ZXIKKwkgKiBvbiBkb2Vzbid0IHdvcmsuCisJICovCisjZXJyb3IgIkJZVEVfQ1VUT0ZGIGlzIHRvbyBzbWFsbCIKKyNlbmRpZgorCisJaWYgKG4gPCBCWVRFX0NVVE9GRikgeworCQkvKiBTdHJhbmdlbHksIHRoaXMgdHVybnMgb3V0IHRvIGJlIHRoZSB0aWdodGVzdCB3YXkgdG8KKwkJICogd3JpdGUgdGhpcyBsb29wLgorCQkgKi8KKwkJaWYgKG4gIT0gMCkgeworCQkJZG8geworCQkJCS8qIFN0cmFuZ2VseSwgY29tYmluaW5nIHRoZXNlIGludG8gb25lIGxpbmUKKwkJCQkgKiBwZXJmb3JtcyB3b3JzZS4KKwkJCQkgKi8KKwkJCQkqb3V0OCA9IGM7CisJCQkJb3V0OCsrOworCQkJfSB3aGlsZSAoLS1uICE9IDApOworCQl9CisKKwkJcmV0dXJuIHM7CisJfQorCisjaWYgIUNISVBfSEFTX1dINjQoKQorCS8qIFVzZSBhIHNwYXJlIGlzc3VlIHNsb3QgdG8gc3RhcnQgcHJlZmV0Y2hpbmcgdGhlIGZpcnN0IGNhY2hlCisJICogbGluZSBlYXJseS4gVGhpcyBpbnN0cnVjdGlvbiBpcyBmcmVlIGFzIHRoZSBzdG9yZSBjYW4gYmUgYnVyaWVkCisJICogaW4gb3RoZXJ3aXNlIGlkbGUgaXNzdWUgc2xvdHMgZG9pbmcgQUxVIG9wcy4KKwkgKi8KKwlfX2luc25fcHJlZmV0Y2gob3V0OCk7CisKKwkvKiBXZSBwcmVmZXRjaCB0aGUgZW5kIHNvIHRoYXQgYSBzaG9ydCBtZW1zZXQgdGhhdCBzcGFucyB0d28gY2FjaGUKKwkgKiBsaW5lcyBnZXRzIHNvbWUgcHJlZmV0Y2hpbmcgYmVuZWZpdC4gQWdhaW4gd2UgYmVsaWV2ZSB0aGlzIGlzIGZyZWUKKwkgKiB0byBpc3N1ZS4KKwkgKi8KKwlfX2luc25fcHJlZmV0Y2goJm91dDhbbiAtIDFdKTsKKyNlbmRpZiAvKiAhQ0hJUF9IQVNfV0g2NCgpICovCisKKworCS8qIEFsaWduICdvdXQ4Jy4gV2Uga25vdyBuID49IDMgc28gdGhpcyB3b24ndCB3cml0ZSBwYXN0IHRoZSBlbmQuICovCisJd2hpbGUgKCgodWludHB0cl90KSBvdXQ4ICYgMykgIT0gMCkgeworCQkqb3V0OCsrID0gYzsKKwkJLS1uOworCX0KKworCS8qIEFsaWduICduJy4gKi8KKwl3aGlsZSAobiAmIDMpCisJCW91dDhbLS1uXSA9IGM7CisKKwlvdXQzMiA9ICh1aW50MzJfdCAqKSBvdXQ4OworCW4zMiA9IG4gPj4gMjsKKworCS8qIFRpbGUgaW5wdXQgYnl0ZSBvdXQgdG8gMzIgYml0cy4gKi8KKwl2MTYgPSBfX2luc25faW50bGIoYywgYyk7CisJdjMyID0gX19pbnNuX2ludGxoKHYxNiwgdjE2KTsKKworCS8qIFRoaXMgbXVzdCBiZSBhdCBsZWFzdCA4IG9yIHRoZSBmb2xsb3dpbmcgbG9vcCBkb2Vzbid0IHdvcmsuICovCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUyAoQ0hJUF9MMl9MSU5FX1NJWkUoKSAvIDQpCisKKyNpZiAhQ0hJUF9IQVNfV0g2NCgpCisKKwlhaGVhZDMyID0gQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTOworCisJLyogV2UgYWxyZWFkeSBwcmVmZXRjaGVkIHRoZSBmaXJzdCBhbmQgbGFzdCBjYWNoZSBsaW5lcywgc28KKwkgKiB3ZSBvbmx5IG5lZWQgdG8gZG8gbW9yZSBwcmVmZXRjaGluZyBpZiB3ZSBhcmUgc3RvcmluZworCSAqIHRvIG1vcmUgdGhhbiB0d28gY2FjaGUgbGluZXMuCisJICovCisJaWYgKG4zMiA+IENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUyAqIDIpIHsKKwkJaW50IGk7CisKKwkJLyogUHJlZmV0Y2ggdGhlIG5leHQgc2V2ZXJhbCBjYWNoZSBsaW5lcy4KKwkJICogVGhpcyBpcyB0aGUgc2V0dXAgY29kZSBmb3IgdGhlIHNvZnR3YXJlLXBpcGVsaW5lZAorCQkgKiBsb29wIGJlbG93LgorCQkgKi8KKyNkZWZpbmUgTUFYX1BSRUZFVENIIDUKKwkJYWhlYWQzMiA9IG4zMiAmIC1DQUNIRV9MSU5FX1NJWkVfSU5fV09SRFM7CisJCWlmIChhaGVhZDMyID4gTUFYX1BSRUZFVENIICogQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTKQorCQkJYWhlYWQzMiA9IE1BWF9QUkVGRVRDSCAqIENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUzsKKworCQlmb3IgKGkgPSBDQUNIRV9MSU5FX1NJWkVfSU5fV09SRFM7CisJCSAgICAgaSA8IGFoZWFkMzI7IGkgKz0gQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTKQorCQkJX19pbnNuX3ByZWZldGNoKCZvdXQzMltpXSk7CisJfQorCisJaWYgKG4zMiA+IGFoZWFkMzIpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWludCBqOworCisJCQkvKiBQcmVmZXRjaCBieSByZWFkaW5nIG9uZSB3b3JkIHNldmVyYWwgY2FjaGUgbGluZXMKKwkJCSAqIGFoZWFkLiAgU2luY2UgbG9hZHMgYXJlIG5vbi1ibG9ja2luZyB0aGlzIHdpbGwKKwkJCSAqIGNhdXNlIHRoZSBmdWxsIGNhY2hlIGxpbmUgdG8gYmUgcmVhZCB3aGlsZSB3ZSBhcmUKKwkJCSAqIGZpbmlzaGluZyBlYXJsaWVyIGNhY2hlIGxpbmVzLiAgVXNpbmcgYSBzdG9yZQorCQkJICogaGVyZSBjYXVzZXMgbWljcm9hcmNoaXRlY3R1cmFsIHBlcmZvcm1hbmNlCisJCQkgKiBwcm9ibGVtcyB3aGVyZSBhIHZpY3RpbWl6aW5nIHN0b3JlIG1pc3MgZ29lcyB0bworCQkJICogdGhlIGhlYWQgb2YgdGhlIHJldHJ5IEZJRk8gYW5kIGxvY2tzIHRoZSBwaXBlIGZvcgorCQkJICogYSBmZXcgY3ljbGVzLiAgU28gYSBmZXcgc3Vic2VxdWVudCBzdG9yZXMgaW4gdGhpcworCQkJICogbG9vcCBnbyBpbnRvIHRoZSByZXRyeSBGSUZPLCBhbmQgdGhlbiBsYXRlcgorCQkJICogc3RvcmVzIHNlZSBvdGhlciBzdG9yZXMgdG8gdGhlIHNhbWUgY2FjaGUgbGluZQorCQkJICogYXJlIGFscmVhZHkgaW4gdGhlIHJldHJ5IEZJRk8gYW5kIHRoZW1zZWx2ZXMgZ28KKwkJCSAqIGludG8gdGhlIHJldHJ5IEZJRk8sIGZpbGxpbmcgaXQgdXAgYW5kIGdyaW5kaW5nCisJCQkgKiB0byBhIGhhbHQgd2FpdGluZyBmb3IgdGhlIG9yaWdpbmFsIG1pc3MgdG8gYmUKKwkJCSAqIHNhdGlzZmllZC4KKwkJCSAqLworCQkJX19pbnNuX3ByZWZldGNoKCZvdXQzMlthaGVhZDMyXSk7CisKKyNpZiAxCisjaWYgQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTICUgNCAhPSAwCisjZXJyb3IgIlVuaGFuZGxlZCBDQUNIRV9MSU5FX1NJWkVfSU5fV09SRFMiCisjZW5kaWYKKworCQkJbjMyIC09IENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUzsKKworCQkJLyogU2F2ZSBpY2FjaGUgc3BhY2UgYnkgb25seSBwYXJ0aWFsbHkgdW5yb2xsaW5nCisJCQkgKiB0aGlzIGxvb3AuCisJCQkgKi8KKwkJCWZvciAoaiA9IENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUyAvIDQ7IGogPiAwOyBqLS0pIHsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCX0KKyNlbHNlCisJCQkvKiBVbmZvcnR1bmF0ZWx5LCBkdWUgdG8gYSBjb2RlIGdlbmVyYXRvciBmbGF3IHRoaXMKKwkJCSAqIGFsbG9jYXRlcyBhIHNlcGFyYXRlIHJlZ2lzdGVyIGZvciBlYWNoIG9mIHRoZXNlCisJCQkgKiBzdG9yZXMsIHdoaWNoIHJlcXVpcmVzIGEgbGFyZ2UgbnVtYmVyIG9mIHNwaWxscywKKwkJCSAqIHdoaWNoIG1ha2VzIHRoaXMgcHJvY2VkdXJlIGVub3Jtb3VzbHkgYmlnZ2VyCisJCQkgKiAoc29tZXRoaW5nIGxpa2UgNzAlKQorCQkJICovCisJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCSpvdXQzMisrID0gdjMyOworCQkJKm91dDMyKysgPSB2MzI7CisJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCSpvdXQzMisrID0gdjMyOworCQkJKm91dDMyKysgPSB2MzI7CisJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCSpvdXQzMisrID0gdjMyOworCQkJKm91dDMyKysgPSB2MzI7CisJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCSpvdXQzMisrID0gdjMyOworCQkJKm91dDMyKysgPSB2MzI7CisJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCSpvdXQzMisrID0gdjMyOworCQkJKm91dDMyKysgPSB2MzI7CisJCQluMzIgLT0gMTY7CisjZW5kaWYKKworCQkJLyogVG8gc2F2ZSBjb21waWxlZCBjb2RlIHNpemUsIHJldXNlIHRoaXMgbG9vcCBldmVuCisJCQkgKiB3aGVuIHdlIHJ1biBvdXQgb2YgcHJlZmV0Y2hpbmcgdG8gZG8gYnkgZHJvcHBpbmcKKwkJCSAqIGFoZWFkMzIgZG93bi4KKwkJCSAqLworCQkJaWYgKG4zMiA8PSBhaGVhZDMyKSB7CisJCQkJLyogTm90IGV2ZW4gYSBmdWxsIGNhY2hlIGxpbmUgbGVmdCwKKwkJCQkgKiBzbyBzdG9wIG5vdy4KKwkJCQkgKi8KKwkJCQlpZiAobjMyIDwgQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTKQorCQkJCQlicmVhazsKKworCQkJCS8qIENob29zZSBhIHNtYWxsIGVub3VnaCB2YWx1ZSB0aGF0IHdlIGRvbid0CisJCQkJICogcHJlZmV0Y2ggcGFzdCB0aGUgZW5kLiAgVGhlcmUncyBubyBzZW5zZQorCQkJCSAqIGluIHRvdWNoaW5nIGNhY2hlIGxpbmVzIHdlIGRvbid0IGhhdmUgdG8uCisJCQkJICovCisJCQkJYWhlYWQzMiA9IENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUyAtIDE7CisJCQl9CisJCX0KKwl9CisKKyNlbHNlIC8qIENISVBfSEFTX1dINjQoKSAqLworCisJLyogRGV0ZXJtaW5lIGhvdyBtYW55IHdvcmRzIHdlIG5lZWQgdG8gZW1pdCBiZWZvcmUgdGhlICdvdXQzMicKKwkgKiBwb2ludGVyIGJlY29tZXMgYWxpZ25lZCBtb2R1bG8gdGhlIGNhY2hlIGxpbmUgc2l6ZS4KKwkgKi8KKwl0b19hbGlnbjMyID0KKwkJKC0oKHVpbnRwdHJfdClvdXQzMiA+PiAyKSkgJiAoQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTIC0gMSk7CisKKwkvKiBPbmx5IGJvdGhlciBhbGlnbmluZyBhbmQgdXNpbmcgd2g2NCBpZiB0aGVyZSBpcyBhdCBsZWFzdAorCSAqIG9uZSBmdWxsIGNhY2hlIGxpbmUgdG8gcHJvY2Vzcy4gIFRoaXMgY2hlY2sgYWxzbyBwcmV2ZW50cworCSAqIG92ZXJydW5uaW5nIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciB3aXRoIGFsaWdubWVudCB3b3Jkcy4KKwkgKi8KKwlpZiAodG9fYWxpZ24zMiA8PSBuMzIgLSBDQUNIRV9MSU5FX1NJWkVfSU5fV09SRFMpIHsKKwkJaW50IGxpbmVzX2xlZnQ7CisKKwkJLyogQWxpZ24gb3V0MzIgbW9kIHRoZSBjYWNoZSBsaW5lIHNpemUgc28gd2UgY2FuIHVzZSB3aDY0LiAqLworCQluMzIgLT0gdG9fYWxpZ24zMjsKKwkJZm9yICg7IHRvX2FsaWduMzIgIT0gMDsgdG9fYWxpZ24zMi0tKSB7CisJCQkqb3V0MzIgPSB2MzI7CisJCQlvdXQzMisrOworCQl9CisKKwkJLyogVXNlIHVuc2lnbmVkIGRpdmlkZSB0byB0dXJuIHRoaXMgaW50byBhIHJpZ2h0IHNoaWZ0LiAqLworCQlsaW5lc19sZWZ0ID0gKHVuc2lnbmVkKW4zMiAvIENBQ0hFX0xJTkVfU0laRV9JTl9XT1JEUzsKKworCQlkbyB7CisJCQkvKiBPbmx5IHdoNjQgYSBmZXcgbGluZXMgYXQgYSB0aW1lLCBzbyB3ZSBkb24ndAorCQkJICogZXhjZWVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiB2aWN0aW0gbGluZXMuCisJCQkgKi8KKwkJCWludCB4ID0gKChsaW5lc19sZWZ0IDwgQ0hJUF9NQVhfT1VUU1RBTkRJTkdfVklDVElNUygpKQorCQkJCSAgPyBsaW5lc19sZWZ0CisJCQkJICA6IENISVBfTUFYX09VVFNUQU5ESU5HX1ZJQ1RJTVMoKSk7CisJCQl1aW50MzJfdCAqd2ggPSBvdXQzMjsKKwkJCWludCBpID0geDsKKwkJCWludCBqOworCisJCQlsaW5lc19sZWZ0IC09IHg7CisKKwkJCWRvIHsKKwkJCQlfX2luc25fd2g2NCh3aCk7CisJCQkJd2ggKz0gQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTOworCQkJfSB3aGlsZSAoLS1pKTsKKworCQkJZm9yIChqID0geCAqIChDQUNIRV9MSU5FX1NJWkVfSU5fV09SRFMgLyA0KTsKKwkJCSAgICAgaiAhPSAwOyBqLS0pIHsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCQkqb3V0MzIrKyA9IHYzMjsKKwkJCX0KKwkJfSB3aGlsZSAobGluZXNfbGVmdCAhPSAwKTsKKworCQkvKiBXZSBwcm9jZXNzZWQgYWxsIGZ1bGwgbGluZXMgYWJvdmUsIHNvIG9ubHkgdGhpcyBtYW55CisJCSAqIHdvcmRzIHJlbWFpbiB0byBiZSBwcm9jZXNzZWQuCisJCSAqLworCQluMzIgJj0gQ0FDSEVfTElORV9TSVpFX0lOX1dPUkRTIC0gMTsKKwl9CisKKyNlbmRpZiAvKiBDSElQX0hBU19XSDY0KCkgKi8KKworCS8qIE5vdyBoYW5kbGUgYW55IGxlZnRvdmVyIHZhbHVlcy4gKi8KKwlpZiAobjMyICE9IDApIHsKKwkJZG8geworCQkJKm91dDMyID0gdjMyOworCQkJb3V0MzIrKzsKKwkJfSB3aGlsZSAoLS1uMzIgIT0gMCk7CisJfQorCisJcmV0dXJuIHM7Cit9CitFWFBPUlRfU1lNQk9MKG1lbXNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3NwaW5sb2NrXzMyLmMgYi9hcmNoL3RpbGUvbGliL3NwaW5sb2NrXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1ZTI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvc3BpbmxvY2tfMzIuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisKKyNpbmNsdWRlICJzcGlubG9ja19jb21tb24uaCIKKwordm9pZCBhcmNoX3NwaW5fbG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCit7CisJaW50IG15X3RpY2tldDsKKwlpbnQgaXRlcmF0aW9ucyA9IDA7CisJaW50IGRlbHRhOworCisJd2hpbGUgKChteV90aWNrZXQgPSBfX2luc25fdG5zKCh2b2lkICopJmxvY2stPm5leHRfdGlja2V0KSkgJiAxKQorCQlkZWxheV9iYWNrb2ZmKGl0ZXJhdGlvbnMrKyk7CisKKwkvKiBJbmNyZW1lbnQgdGhlIG5leHQgdGlja2V0IG51bWJlciwgaW1wbGljaXRseSByZWxlYXNpbmcgdG5zIGxvY2suICovCisJbG9jay0+bmV4dF90aWNrZXQgPSBteV90aWNrZXQgKyBUSUNLRVRfUVVBTlRVTTsKKworCS8qIFdhaXQgdW50aWwgaXQncyBvdXIgdHVybi4gKi8KKwl3aGlsZSAoKGRlbHRhID0gbXlfdGlja2V0IC0gbG9jay0+Y3VycmVudF90aWNrZXQpICE9IDApCisJCXJlbGF4KCgxMjggLyBDWUNMRVNfUEVSX1JFTEFYX0xPT1ApICogZGVsdGEpOworfQorRVhQT1JUX1NZTUJPTChhcmNoX3NwaW5fbG9jayk7CisKK2ludCBhcmNoX3NwaW5fdHJ5bG9jayhhcmNoX3NwaW5sb2NrX3QgKmxvY2spCit7CisJLyoKKwkgKiBHcmFiIGEgdGlja2V0OyBubyBuZWVkIHRvIHJldHJ5IGlmIGl0J3MgYnVzeSwgd2UnbGwganVzdAorCSAqIHRyZWF0IHRoYXQgdGhlIHNhbWUgYXMgImxvY2tlZCIsIHNpbmNlIHNvbWVvbmUgZWxzZQorCSAqIHdpbGwgbG9jayBpdCBtb21lbnRhcmlseSBhbnl3YXkuCisJICovCisJaW50IG15X3RpY2tldCA9IF9faW5zbl90bnMoKHZvaWQgKikmbG9jay0+bmV4dF90aWNrZXQpOworCisJaWYgKG15X3RpY2tldCA9PSBsb2NrLT5jdXJyZW50X3RpY2tldCkgeworCQkvKiBOb3QgY3VycmVudGx5IGxvY2tlZCwgc28gbG9jayBpdCBieSBrZWVwaW5nIHRoaXMgdGlja2V0LiAqLworCQlsb2NrLT5uZXh0X3RpY2tldCA9IG15X3RpY2tldCArIFRJQ0tFVF9RVUFOVFVNOworCQkvKiBTdWNjZXNzISAqLworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIShteV90aWNrZXQgJiAxKSkgeworCQkvKiBSZWxlYXNlIG5leHRfdGlja2V0LiAqLworCQlsb2NrLT5uZXh0X3RpY2tldCA9IG15X3RpY2tldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woYXJjaF9zcGluX3RyeWxvY2spOworCit2b2lkIGFyY2hfc3Bpbl91bmxvY2tfd2FpdChhcmNoX3NwaW5sb2NrX3QgKmxvY2spCit7CisJdTMyIGl0ZXJhdGlvbnMgPSAwOworCXdoaWxlIChhcmNoX3NwaW5faXNfbG9ja2VkKGxvY2spKQorCQlkZWxheV9iYWNrb2ZmKGl0ZXJhdGlvbnMrKyk7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl91bmxvY2tfd2FpdCk7CisKKy8qCisgKiBUaGUgbG93IGJ5dGUgaXMgYWx3YXlzIHJlc2VydmVkIHRvIGJlIHRoZSBtYXJrZXIgZm9yIGEgInRucyIgb3BlcmF0aW9uCisgKiBzaW5jZSB0aGUgbG93IGJpdCBpcyBzZXQgdG8gIjEiIGJ5IGEgdG5zLiAgVGhlIG5leHQgc2V2ZW4gYml0cyBhcmUKKyAqIHplcm9lcy4gIFRoZSBuZXh0IGJ5dGUgaG9sZHMgdGhlICJuZXh0IiB3cml0ZXIgdmFsdWUsIGkuZS4gdGhlIHRpY2tldAorICogYXZhaWxhYmxlIGZvciB0aGUgbmV4dCB0YXNrIHRoYXQgd2FudHMgdG8gd3JpdGUuICBUaGUgdGhpcmQgYnl0ZSBob2xkcworICogdGhlIGN1cnJlbnQgd3JpdGVyIHZhbHVlLCBpLmUuIHRoZSB3cml0ZXIgd2hvIGhvbGRzIHRoZSBjdXJyZW50IHRpY2tldC4KKyAqIElmIGN1cnJlbnQgPT0gbmV4dCA9PSAwLCB0aGVyZSBhcmUgbm8gaW50ZXJlc3RlZCB3cml0ZXJzLgorICovCisjZGVmaW5lIFdSX05FWFRfU0hJRlQgICBfV1JfTkVYVF9TSElGVAorI2RlZmluZSBXUl9DVVJSX1NISUZUICAgX1dSX0NVUlJfU0hJRlQKKyNkZWZpbmUgV1JfV0lEVEggICAgICAgIF9XUl9XSURUSAorI2RlZmluZSBXUl9NQVNLICAgICAgICAgKCgxIDw8IFdSX1dJRFRIKSAtIDEpCisKKy8qCisgKiBUaGUgbGFzdCBlaWdodCBiaXRzIGhvbGQgdGhlIGFjdGl2ZSByZWFkZXIgY291bnQuICBUaGlzIGhhcyB0byBiZQorICogemVybyBiZWZvcmUgYSB3cml0ZXIgY2FuIHN0YXJ0IHRvIHdyaXRlLgorICovCisjZGVmaW5lIFJEX0NPVU5UX1NISUZUICBfUkRfQ09VTlRfU0hJRlQKKyNkZWZpbmUgUkRfQ09VTlRfV0lEVEggIF9SRF9DT1VOVF9XSURUSAorI2RlZmluZSBSRF9DT1VOVF9NQVNLICAgKCgxIDw8IFJEX0NPVU5UX1dJRFRIKSAtIDEpCisKKworLyogTG9jayB0aGUgd29yZCwgc3Bpbm5pbmcgdW50aWwgdGhlcmUgYXJlIG5vIHRucy1lcnMuICovCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfcndsb2NrKGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKK3sKKwl1MzIgaXRlcmF0aW9ucyA9IDA7CisJZm9yICg7OykgeworCQl1MzIgdmFsID0gX19pbnNuX3RucygoaW50ICopJnJ3bG9jay0+bG9jayk7CisJCWlmICh1bmxpa2VseSh2YWwgJiAxKSkgeworCQkJZGVsYXlfYmFja29mZihpdGVyYXRpb25zKyspOworCQkJY29udGludWU7CisJCX0KKwkJcmV0dXJuIHZhbDsKKwl9Cit9CisKK2ludCBhcmNoX3JlYWRfdHJ5bG9ja19zbG93KGFyY2hfcndsb2NrX3QgKnJ3bG9jaykKK3sKKwl1MzIgdmFsID0gZ2V0X3J3bG9jayhyd2xvY2spOworCWludCBsb2NrZWQgPSAodmFsIDw8IFJEX0NPVU5UX1dJRFRIKSA9PSAwOworCXJ3bG9jay0+bG9jayA9IHZhbCArIChsb2NrZWQgPDwgUkRfQ09VTlRfU0hJRlQpOworCXJldHVybiBsb2NrZWQ7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfcmVhZF90cnlsb2NrX3Nsb3cpOworCit2b2lkIGFyY2hfcmVhZF91bmxvY2tfc2xvdyhhcmNoX3J3bG9ja190ICpyd2xvY2spCit7CisJdTMyIHZhbCA9IGdldF9yd2xvY2socndsb2NrKTsKKwlyd2xvY2stPmxvY2sgPSB2YWwgLSAoMSA8PCBSRF9DT1VOVF9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfcmVhZF91bmxvY2tfc2xvdyk7CisKK3ZvaWQgYXJjaF93cml0ZV91bmxvY2tfc2xvdyhhcmNoX3J3bG9ja190ICpyd2xvY2ssIHUzMiB2YWwpCit7CisJdTMyIGVxLCBtYXNrID0gMSA8PCBXUl9DVVJSX1NISUZUOworCXdoaWxlICh1bmxpa2VseSh2YWwgJiAxKSkgeworCQkvKiBMaW1pdGVkIGJhY2tvZmYgc2luY2Ugd2UgYXJlIHRoZSBoaWdoZXN0LXByaW9yaXR5IHRhc2suICovCisJCXJlbGF4KDQpOworCQl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwl9CisJdmFsID0gX19pbnNuX2FkZGIodmFsLCBtYXNrKTsKKwllcSA9IF9faW5zbl9zZXFiKHZhbCwgdmFsIDw8IChXUl9DVVJSX1NISUZUIC0gV1JfTkVYVF9TSElGVCkpOworCXZhbCA9IF9faW5zbl9teihlcSAmIG1hc2ssIHZhbCk7CisJcndsb2NrLT5sb2NrID0gdmFsOworfQorRVhQT1JUX1NZTUJPTChhcmNoX3dyaXRlX3VubG9ja19zbG93KTsKKworLyoKKyAqIFdlIHNwaW4gdW50aWwgZXZlcnl0aGluZyBidXQgdGhlIHJlYWRlciBiaXRzICh3aGljaCBhcmUgaW4gdGhlIGhpZ2gKKyAqIHBhcnQgb2YgdGhlIHdvcmQpIGFyZSB6ZXJvLCBpLmUuIG5vIGFjdGl2ZSBvciB3YWl0aW5nIHdyaXRlcnMsIG5vIHRucy4KKyAqCisgKiBJU1NVRTogVGhpcyBhcHByb2FjaCBjYW4gcGVybWFuZW50bHkgc3RhcnZlIHJlYWRlcnMuICBBIHJlYWRlciB3aG8gc2VlcworICogYSB3cml0ZXIgY291bGQgaW5zdGVhZCB0YWtlIGEgdGlja2V0IGxvY2sgKGp1c3QgbGlrZSBhIHdyaXRlciB3b3VsZCksCisgKiBhbmQgYXRvbWljYWxseSBlbnRlciByZWFkIG1vZGUgKHdpdGggMSByZWFkZXIpIHdoZW4gaXQgZ2V0cyB0aGUgdGlja2V0LgorICogVGhpcyB3YXkgYm90aCByZWFkZXJzIGFuZCB3cml0ZXJzIHdpbGwgYWx3YXlzIG1ha2UgZm9yd2FyZCBwcm9ncmVzcworICogaW4gYSBmaW5pdGUgdGltZS4KKyAqLwordm9pZCBhcmNoX3JlYWRfbG9ja19zbG93KGFyY2hfcndsb2NrX3QgKnJ3bG9jaywgdTMyIHZhbCkKK3sKKwl1MzIgaXRlcmF0aW9ucyA9IDA7CisJZG8geworCQlpZiAoISh2YWwgJiAxKSkKKwkJCXJ3bG9jay0+bG9jayA9IHZhbDsKKwkJZGVsYXlfYmFja29mZihpdGVyYXRpb25zKyspOworCQl2YWwgPSBfX2luc25fdG5zKChpbnQgKikmcndsb2NrLT5sb2NrKTsKKwl9IHdoaWxlICgodmFsIDw8IFJEX0NPVU5UX1dJRFRIKSAhPSAwKTsKKwlyd2xvY2stPmxvY2sgPSB2YWwgKyAoMSA8PCBSRF9DT1VOVF9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MKGFyY2hfcmVhZF9sb2NrX3Nsb3cpOworCit2b2lkIGFyY2hfd3JpdGVfbG9ja19zbG93KGFyY2hfcndsb2NrX3QgKnJ3bG9jaywgdTMyIHZhbCkKK3sKKwkvKgorCSAqIFRoZSB0cmFpbGluZyB1bmRlcnNjb3JlIG9uIHRoaXMgdmFyaWFibGUgKGFuZCBjdXJyXyBiZWxvdykKKwkgKiByZW1pbmRzIHVzIHRoYXQgdGhlIGhpZ2ggYml0cyBhcmUgZ2FyYmFnZTsgd2UgbWFzayB0aGVtIG91dAorCSAqIHdoZW4gd2UgY29tcGFyZSB0aGVtLgorCSAqLworCXUzMiBteV90aWNrZXRfOworCisJLyogVGFrZSBvdXQgdGhlIG5leHQgdGlja2V0OyB0aGlzIHdpbGwgYWxzbyBzdG9wIHdvdWxkLWJlIHJlYWRlcnMuICovCisJaWYgKHZhbCAmIDEpCisJCXZhbCA9IGdldF9yd2xvY2socndsb2NrKTsKKwlyd2xvY2stPmxvY2sgPSBfX2luc25fYWRkYih2YWwsIDEgPDwgV1JfTkVYVF9TSElGVCk7CisKKwkvKiBFeHRyYWN0IG15IHRpY2tldCB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbCB3b3JkLiAqLworCW15X3RpY2tldF8gPSB2YWwgPj4gV1JfTkVYVF9TSElGVDsKKworCS8qCisJICogV2FpdCB1bnRpbCB0aGUgImN1cnJlbnQiIGZpZWxkIG1hdGNoZXMgb3VyIHRpY2tldCwgYW5kCisJICogdGhlcmUgYXJlIG5vIHJlbWFpbmluZyByZWFkZXJzLgorCSAqLworCWZvciAoOzspIHsKKwkJdTMyIGN1cnJfID0gdmFsID4+IFdSX0NVUlJfU0hJRlQ7CisJCXUzMiByZWFkZXJzID0gdmFsID4+IFJEX0NPVU5UX1NISUZUOworCQl1MzIgZGVsdGEgPSAoKG15X3RpY2tldF8gLSBjdXJyXykgJiBXUl9NQVNLKSArICEhcmVhZGVyczsKKwkJaWYgKGxpa2VseShkZWx0YSA9PSAwKSkKKwkJCWJyZWFrOworCisJCS8qIERlbGF5IGJhc2VkIG9uIGhvdyBtYW55IGxvY2staG9sZGVycyBhcmUgc3RpbGwgb3V0IHRoZXJlLiAqLworCQlyZWxheCgoMjU2IC8gQ1lDTEVTX1BFUl9SRUxBWF9MT09QKSAqIGRlbHRhKTsKKworCQkvKgorCQkgKiBHZXQgYSBub24tdG5zIHZhbHVlIHRvIGNoZWNrOyB3ZSBkb24ndCBuZWVkIHRvIHRucworCQkgKiBpdCBvdXJzZWx2ZXMuICBTaW5jZSB3ZSdyZSBub3QgdG5zJ2luZywgd2UgcmV0cnkKKwkJICogbW9yZSByYXBpZGx5IHRvIGdldCBhIHZhbGlkIHZhbHVlLgorCQkgKi8KKwkJd2hpbGUgKCh2YWwgPSByd2xvY2stPmxvY2spICYgMSkKKwkJCXJlbGF4KDQpOworCX0KK30KK0VYUE9SVF9TWU1CT0woYXJjaF93cml0ZV9sb2NrX3Nsb3cpOworCitpbnQgX190bnNfYXRvbWljX2FjcXVpcmUoYXRvbWljX3QgKmxvY2spCit7CisJaW50IHJldDsKKwl1MzIgaXRlcmF0aW9ucyA9IDA7CisKKwlCVUdfT04oX19pbnNuX21mc3ByKFNQUl9JTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTikpOworCV9faW5zbl9tdHNwcihTUFJfSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04sIDEpOworCisJd2hpbGUgKChyZXQgPSBfX2luc25fdG5zKCh2b2lkICopJmxvY2stPmNvdW50ZXIpKSA9PSAxKQorCQlkZWxheV9iYWNrb2ZmKGl0ZXJhdGlvbnMrKyk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX3Ruc19hdG9taWNfcmVsZWFzZShhdG9taWNfdCAqcCwgaW50IHYpCit7CisJcC0+Y291bnRlciA9IHY7CisJX19pbnNuX210c3ByKFNQUl9JTlRFUlJVUFRfQ1JJVElDQUxfU0VDVElPTiwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3NwaW5sb2NrX2NvbW1vbi5oIGIvYXJjaC90aWxlL2xpYi9zcGlubG9ja19jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTAxMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2xpYi9zcGlubG9ja19jb21tb24uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGludG8gc3BpbmxvY2tfMzIuYyBvciBfNjQuYy4KKyAqLworCisvKgorICogVGhlIG1mc3ByIGluIF9fc3BpbmxvY2tfcmVsYXgoKSBpcyA1IG9yIDYgY3ljbGVzIHBsdXMgMiBmb3IgbG9vcAorICogb3ZlcmhlYWQuCisgKi8KKyNpZmRlZiBfX3RpbGVneF9fCisjZGVmaW5lIENZQ0xFU19QRVJfUkVMQVhfTE9PUCA3CisjZWxzZQorI2RlZmluZSBDWUNMRVNfUEVSX1JFTEFYX0xPT1AgOAorI2VuZGlmCisKKy8qCisgKiBJZGxlIHRoZSBjb3JlIGZvciBDWUNMRVNfUEVSX1JFTEFYX0xPT1AgKiBpdGVyYXRpb25zIGN5Y2xlcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCityZWxheChpbnQgaXRlcmF0aW9ucykKK3sKKwlmb3IgKC8qYWJvdmUqLzsgaXRlcmF0aW9ucyA+IDA7IGl0ZXJhdGlvbnMtLSkKKwkJX19pbnNuX21mc3ByKFNQUl9QQVNTKTsKKwliYXJyaWVyKCk7Cit9CisKKy8qIFBlcmZvcm0gYm91bmRlZCBleHBvbmVudGlhbCBiYWNrb2ZmLiovCitzdGF0aWMgdm9pZCBkZWxheV9iYWNrb2ZmKGludCBpdGVyYXRpb25zKQoreworCXUzMiBleHBvbmVudCwgbG9vcHM7CisKKwkvKgorCSAqIDJeZXhwb25lbnQgaXMgaG93IG1hbnkgdGltZXMgd2UgZ28gYXJvdW5kIHRoZSBsb29wLAorCSAqIHdoaWNoIHRha2VzIDggY3ljbGVzLiAgV2Ugd2FudCB0byBzdGFydCB3aXRoIGEgMTYtIHRvIDMxLWN5Y2xlCisJICogbG9vcCwgc28gd2UgbmVlZCB0byBnbyBhcm91bmQgbWluaW11bSAyID0gMl4xIHRpbWVzLCBzbyB3ZQorCSAqIGJpYXMgdGhlIG9yaWdpbmFsIHZhbHVlIHVwIGJ5IDEuCisJICovCisJZXhwb25lbnQgPSBpdGVyYXRpb25zICsgMTsKKworCS8qCisJICogRG9uJ3QgYWxsb3cgZXhwb25lbnQgdG8gZXhjZWVkIDcsIHNvIHdlIGhhdmUgMTI4IGxvb3BzLAorCSAqIG9yIDEsMDI0ICh0byAyLDA0NykgY3ljbGVzLCBhcyBvdXIgbWF4aW11bS4KKwkgKi8KKwlpZiAoZXhwb25lbnQgPiA4KQorCQlleHBvbmVudCA9IDg7CisKKwlsb29wcyA9IDEgPDwgZXhwb25lbnQ7CisKKwkvKiBBZGQgYSByYW5kb21uZXNzIGZhY3RvciBzbyB0d28gY3B1cyBuZXZlciBnZXQgaW4gbG9jayBzdGVwLiAqLworCWxvb3BzICs9IF9faW5zbl9jcmMzMl8zMihzdGFja19wb2ludGVyLCBnZXRfY3ljbGVzX2xvdygpKSAmCisJCShsb29wcyAtIDEpOworCisJcmVsYXgoMSA8PCBleHBvbmVudCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3N0cmNocl8zMi5jIGIvYXJjaC90aWxlL2xpYi9zdHJjaHJfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRlNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2xpYi9zdHJjaHJfMzIuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjdW5kZWYgc3RyY2hyCisKK2NoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYykKK3sKKwlpbnQgeiwgZzsKKworCS8qIEdldCBhbiBhbGlnbmVkIHBvaW50ZXIuICovCisJY29uc3QgdWludHB0cl90IHNfaW50ID0gKHVpbnRwdHJfdCkgczsKKwljb25zdCB1aW50MzJfdCAqcCA9IChjb25zdCB1aW50MzJfdCAqKShzX2ludCAmIC00KTsKKworCS8qIENyZWF0ZSBmb3VyIGNvcGllcyBvZiB0aGUgYnl0ZSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcuICovCisJY29uc3QgdWludDMyX3QgZ29hbCA9IDB4MDEwMTAxMDEgKiAodWludDhfdCkgYzsKKworCS8qIFJlYWQgdGhlIGZpcnN0IGFsaWduZWQgd29yZCwgYnV0IGZvcmNlIGJ5dGVzIGJlZm9yZSB0aGUgc3RyaW5nIHRvCisJICogbWF0Y2ggbmVpdGhlciB6ZXJvIG5vciBnb2FsICh3ZSBtYWtlIHN1cmUgdGhlIGhpZ2ggYml0IG9mIGVhY2gKKwkgKiBieXRlIGlzIDEsIGFuZCB0aGUgbG93IDcgYml0cyBhcmUgYWxsIHRoZSBvcHBvc2l0ZSBvZiB0aGUgZ29hbAorCSAqIGJ5dGUpLgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgc2hpZnQgY291bnQgZXhwcmVzc2lvbiB3b3JrcyBiZWNhdXNlIHdlIGtub3cgc2hpZnQKKwkgKiBjb3VudHMgYXJlIHRha2VuIG1vZCAzMi4KKwkgKi8KKwljb25zdCB1aW50MzJfdCBiZWZvcmVfbWFzayA9ICgxIDw8IChzX2ludCA8PCAzKSkgLSAxOworCXVpbnQzMl90IHYgPSAoKnAgfCBiZWZvcmVfbWFzaykgXiAoZ29hbCAmIF9faW5zbl9zaHJpYihiZWZvcmVfbWFzaywgMSkpOworCisJdWludDMyX3QgemVyb19tYXRjaGVzLCBnb2FsX21hdGNoZXM7CisJd2hpbGUgKDEpIHsKKwkJLyogTG9vayBmb3IgYSB0ZXJtaW5hdGluZyAnXDAnLiAqLworCQl6ZXJvX21hdGNoZXMgPSBfX2luc25fc2VxYih2LCAwKTsKKworCQkvKiBMb29rIGZvciB0aGUgZ29hbCBieXRlLiAqLworCQlnb2FsX21hdGNoZXMgPSBfX2luc25fc2VxYih2LCBnb2FsKTsKKworCQlpZiAoX19idWlsdGluX2V4cGVjdCh6ZXJvX21hdGNoZXMgfCBnb2FsX21hdGNoZXMsIDApKQorCQkJYnJlYWs7CisKKwkJdiA9ICorK3A7CisJfQorCisJeiA9IF9faW5zbl9jdHooemVyb19tYXRjaGVzKTsKKwlnID0gX19pbnNuX2N0eihnb2FsX21hdGNoZXMpOworCisJLyogSWYgd2UgZm91bmQgYyBiZWZvcmUgJ1wwJyB3ZSBnb3QgYSBtYXRjaC4gTm90ZSB0aGF0IGlmIGMgPT0gJ1wwJworCSAqIHRoZW4gZyA9PSB6LCBhbmQgd2UgY29ycmVjdGx5IHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgJ1wwJworCSAqIHJhdGhlciB0aGFuIE5VTEwuCisJICovCisJcmV0dXJuIChnIDw9IHopID8gKChjaGFyICopcCkgKyAoZyA+PiAzKSA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHN0cmNocik7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3N0cmxlbl8zMi5jIGIvYXJjaC90aWxlL2xpYi9zdHJsZW5fMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZmODhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL2xpYi9zdHJsZW5fMzIuYwpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCitzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpCit7CisJLyogR2V0IGFuIGFsaWduZWQgcG9pbnRlci4gKi8KKwljb25zdCB1aW50cHRyX3Qgc19pbnQgPSAodWludHB0cl90KSBzOworCWNvbnN0IHVpbnQzMl90ICpwID0gKGNvbnN0IHVpbnQzMl90ICopKHNfaW50ICYgLTQpOworCisJLyogUmVhZCB0aGUgZmlyc3Qgd29yZCwgYnV0IGZvcmNlIGJ5dGVzIGJlZm9yZSB0aGUgc3RyaW5nIHRvIGJlIG5vbnplcm8uCisJICogVGhpcyBleHByZXNzaW9uIHdvcmtzIGJlY2F1c2Ugd2Uga25vdyBzaGlmdCBjb3VudHMgYXJlIHRha2VuIG1vZCAzMi4KKwkgKi8KKwl1aW50MzJfdCB2ID0gKnAgfCAoKDEgPDwgKHNfaW50IDw8IDMpKSAtIDEpOworCisJdWludDMyX3QgYml0czsKKwl3aGlsZSAoKGJpdHMgPSBfX2luc25fc2VxYih2LCAwKSkgPT0gMCkKKwkJdiA9ICorK3A7CisKKwlyZXR1cm4gKChjb25zdCBjaGFyICopcCkgKyAoX19pbnNuX2N0eihiaXRzKSA+PiAzKSAtIHM7Cit9CitFWFBPUlRfU1lNQk9MKHN0cmxlbik7CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3VhY2Nlc3MuYyBiL2FyY2gvdGlsZS9saWIvdWFjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbGliL3VhY2Nlc3MuYwpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2ludCBfX3JhbmdlX29rKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnOworCXJldHVybiAhKChhZGRyIDwgbGltaXQgJiYgc2l6ZSA8PSBsaW1pdCAtIGFkZHIpIHx8CisJCSBpc19hcmNoX21hcHBhYmxlX3JhbmdlKGFkZHIsIHNpemUpKTsKK30KK0VYUE9SVF9TWU1CT0woX19yYW5nZV9vayk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfQ09QWV9GUk9NX1VTRVIKK3ZvaWQgY29weV9mcm9tX3VzZXJfb3ZlcmZsb3codm9pZCkKK3sKKyAgICAgICBXQVJOKDEsICJCdWZmZXIgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iKTsKK30KK0VYUE9SVF9TWU1CT0woY29weV9mcm9tX3VzZXJfb3ZlcmZsb3cpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbGliL3VzZXJjb3B5XzMyLlMgYi9hcmNoL3RpbGUvbGliL3VzZXJjb3B5XzMyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Zjc2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9saWIvdXNlcmNvcHlfMzIuUwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFyY2gvY2hpcC5oPgorCisvKiBBY2Nlc3MgdXNlciBtZW1vcnksIGJ1dCB1c2UgTU1VIHRvIGF2b2lkIHByb3BhZ2F0aW5nIGtlcm5lbCBleGNlcHRpb25zLiAqLworCisJLnB1c2hzZWN0aW9uIC5maXh1cCwiYXgiCisKK2dldF91c2VyX2ZhdWx0OgorCXsgbW92ZSByMCwgemVybzsgbW92ZSByMSwgemVybyB9CisJeyBtb3ZlaSByMiwgLUVGQVVMVDsganJwIGxyIH0KKwlFTkRQUk9DKGdldF91c2VyX2ZhdWx0KQorCitwdXRfdXNlcl9mYXVsdDoKKwl7IG1vdmVpIHIwLCAtRUZBVUxUOyBqcnAgbHIgfQorCUVORFBST0MocHV0X3VzZXJfZmF1bHQpCisKKwkucG9wc2VjdGlvbgorCisvKgorICogX19nZXRfdXNlcl9OIGZ1bmN0aW9ucyB0YWtlIGEgcG9pbnRlciBpbiByMCwgYW5kIHJldHVybiAwIGluIHIyCisgKiBvbiBzdWNjZXNzLCB3aXRoIHRoZSB2YWx1ZSBpbiByMDsgb3IgZWxzZSAtRUZBVUxUIGluIHIyLgorICovCisjZGVmaW5lIF9fZ2V0X3VzZXJfTihieXRlcywgTE9BRCkgXAorCVNURF9FTlRSWShfX2dldF91c2VyXyMjYnl0ZXMpOyBcCisxOgl7IExPQUQgcjAsIHIwOyBtb3ZlIHIxLCB6ZXJvOyBtb3ZlIHIyLCB6ZXJvIH07IFwKKwlqcnAgbHI7IFwKKwlTVERfRU5EUFJPQyhfX2dldF91c2VyXyMjYnl0ZXMpOyBcCisJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsImEiOyBcCisJLndvcmQgMWIsIGdldF91c2VyX2ZhdWx0OyBcCisJLnBvcHNlY3Rpb24KKworX19nZXRfdXNlcl9OKDEsIGxiX3UpCitfX2dldF91c2VyX04oMiwgbGhfdSkKK19fZ2V0X3VzZXJfTig0LCBsdykKKworLyoKKyAqIF9fZ2V0X3VzZXJfOCB0YWtlcyBhIHBvaW50ZXIgaW4gcjAsIGFuZCByZXR1cm5zIDAgaW4gcjIKKyAqIG9uIHN1Y2Nlc3MsIHdpdGggdGhlIHZhbHVlIGluIHIwL3IxOyBvciBlbHNlIC1FRkFVTFQgaW4gcjIuCisgKi8KKwlTVERfRU5UUlkoX19nZXRfdXNlcl84KTsKKzE6CXsgbHcgcjAsIHIwOyBhZGRpIHIxLCByMCwgNCB9OworMjoJeyBsdyByMSwgcjE7IG1vdmUgcjIsIHplcm8gfTsKKwlqcnAgbHI7CisJU1REX0VORFBST0MoX19nZXRfdXNlcl84KTsKKwkucHVzaHNlY3Rpb24gX19leF90YWJsZSwiYSI7CisJLndvcmQgMWIsIGdldF91c2VyX2ZhdWx0OworCS53b3JkIDJiLCBnZXRfdXNlcl9mYXVsdDsKKwkucG9wc2VjdGlvbgorCisvKgorICogX19wdXRfdXNlcl9OIGZ1bmN0aW9ucyB0YWtlIGEgdmFsdWUgaW4gcjAgYW5kIGEgcG9pbnRlciBpbiByMSwKKyAqIGFuZCByZXR1cm4gMCBpbiByMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQgb24gZmFpbHVyZS4KKyAqLworI2RlZmluZSBfX3B1dF91c2VyX04oYnl0ZXMsIFNUT1JFKSBcCisJU1REX0VOVFJZKF9fcHV0X3VzZXJfIyNieXRlcyk7IFwKKzE6CXsgU1RPUkUgcjEsIHIwOyBtb3ZlIHIwLCB6ZXJvIH07IFwKKwlqcnAgbHI7IFwKKwlTVERfRU5EUFJPQyhfX3B1dF91c2VyXyMjYnl0ZXMpOyBcCisJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsImEiOyBcCisJLndvcmQgMWIsIHB1dF91c2VyX2ZhdWx0OyBcCisJLnBvcHNlY3Rpb24KKworX19wdXRfdXNlcl9OKDEsIHNiKQorX19wdXRfdXNlcl9OKDIsIHNoKQorX19wdXRfdXNlcl9OKDQsIHN3KQorCisvKgorICogX19wdXRfdXNlcl84IHRha2VzIGEgdmFsdWUgaW4gcjAvcjEgYW5kIGEgcG9pbnRlciBpbiByMiwKKyAqIGFuZCByZXR1cm5zIDAgaW4gcjAgb24gc3VjY2VzcyBvciAtRUZBVUxUIG9uIGZhaWx1cmUuCisgKi8KK1NURF9FTlRSWShfX3B1dF91c2VyXzgpCisxOiAgICAgIHsgc3cgcjIsIHIwOyBhZGRpIHIyLCByMiwgNCB9CisyOiAgICAgIHsgc3cgcjIsIHIxOyBtb3ZlIHIwLCB6ZXJvIH0KKwlqcnAgbHIKKwlTVERfRU5EUFJPQyhfX3B1dF91c2VyXzgpCisJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLndvcmQgMWIsIHB1dF91c2VyX2ZhdWx0CisJLndvcmQgMmIsIHB1dF91c2VyX2ZhdWx0CisJLnBvcHNlY3Rpb24KKworCisvKgorICogc3Rybmxlbl91c2VyX2FzbSB0YWtlcyB0aGUgcG9pbnRlciBpbiByMCwgYW5kIHRoZSBsZW5ndGggYm91bmQgaW4gcjEuCisgKiBJdCByZXR1cm5zIHRoZSBsZW5ndGgsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMLCBvciB6ZXJvIG9uIGV4Y2VwdGlvbi4KKyAqIElmIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIGJvdW5kLCByZXR1cm5zIG9uZSBwbHVzIHRoZSBib3VuZC4KKyAqLworU1REX0VOVFJZKHN0cm5sZW5fdXNlcl9hc20pCisJeyBieiByMSwgMmY7IGFkZGkgcjMsIHIwLCAtMSB9ICAvKiBiaWFzIGRvd24gdG8gaW5jbHVkZSBOVUwgKi8KKzE6ICAgICAgeyBsYl91IHI0LCByMDsgYWRkaSByMSwgcjEsIC0xIH0KKwlieiByNCwgMmYKKwl7IGJuenQgcjEsIDFiOyBhZGRpIHIwLCByMCwgMSB9CisyOiAgICAgIHsgc3ViIHIwLCByMCwgcjM7IGpycCBsciB9CisJU1REX0VORFBST0Moc3Rybmxlbl91c2VyX2FzbSkKKwkucHVzaHNlY3Rpb24gLmZpeHVwLCJheCIKK3N0cm5sZW5fdXNlcl9mYXVsdDoKKwl7IG1vdmUgcjAsIHplcm87IGpycCBsciB9CisJRU5EUFJPQyhzdHJubGVuX3VzZXJfZmF1bHQpCisJLnNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkud29yZCAxYiwgc3Rybmxlbl91c2VyX2ZhdWx0CisJLnBvcHNlY3Rpb24KKworLyoKKyAqIHN0cm5jcHlfZnJvbV91c2VyX2FzbSB0YWtlcyB0aGUga2VybmVsIHRhcmdldCBwb2ludGVyIGluIHIwLAorICogdGhlIHVzZXJzcGFjZSBzb3VyY2UgcG9pbnRlciBpbiByMSwgYW5kIHRoZSBsZW5ndGggYm91bmQgKGluY2x1ZGluZworICogdGhlIHRyYWlsaW5nIE5VTCkgaW4gcjIuICBPbiBzdWNjZXNzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmcgbGVuZ3RoCisgKiAobm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMKSwgb3IgLUVGQVVMVCBvbiBmYWlsdXJlLgorICovCitTVERfRU5UUlkoc3RybmNweV9mcm9tX3VzZXJfYXNtKQorCXsgYnogcjIsIDJmOyBtb3ZlIHIzLCByMCB9CisxOiAgICAgIHsgbGJfdSByNCwgcjE7IGFkZGkgcjEsIHIxLCAxOyBhZGRpIHIyLCByMiwgLTEgfQorCXsgc2IgcjAsIHI0OyBhZGRpIHIwLCByMCwgMSB9CisJYnogcjIsIDJmCisJYm56dCByNCwgMWIKKwlhZGRpIHIwLCByMCwgLTEgICAvKiBkb24ndCBjb3VudCB0aGUgdHJhaWxpbmcgTlVMICovCisyOiAgICAgIHsgc3ViIHIwLCByMCwgcjM7IGpycCBsciB9CisJU1REX0VORFBST0Moc3RybmNweV9mcm9tX3VzZXJfYXNtKQorCS5wdXNoc2VjdGlvbiAuZml4dXAsImF4Igorc3RybmNweV9mcm9tX3VzZXJfZmF1bHQ6CisJeyBtb3ZlaSByMCwgLUVGQVVMVDsganJwIGxyIH0KKwlFTkRQUk9DKHN0cm5jcHlfZnJvbV91c2VyX2ZhdWx0KQorCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLndvcmQgMWIsIHN0cm5jcHlfZnJvbV91c2VyX2ZhdWx0CisJLnBvcHNlY3Rpb24KKworLyoKKyAqIGNsZWFyX3VzZXJfYXNtIHRha2VzIHRoZSB1c2VyIHRhcmdldCBhZGRyZXNzIGluIHIwIGFuZCB0aGUKKyAqIG51bWJlciBvZiBieXRlcyB0byB6ZXJvIGluIHIxLgorICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29waWFibGUgYnl0ZXMgKGhvcGVmdWxseSB6ZXJvKSBpbiByMC4KKyAqIE5vdGUgdGhhdCB3ZSBkb24ndCB1c2UgYSBzZXBhcmF0ZSAuZml4dXAgc2VjdGlvbiBoZXJlIHNpbmNlIHdlIGZhbGwKKyAqIHRocm91Z2ggaW50byB0aGUgImZpeHVwIiBjb2RlIGFzIHRoZSBsYXN0IHN0cmFpZ2h0LWxpbmUgYnVuZGxlIGFueXdheS4KKyAqLworU1REX0VOVFJZKGNsZWFyX3VzZXJfYXNtKQorCXsgYnogcjEsIDJmOyBvciByMiwgcjAsIHIxIH0KKwlhbmRpIHIyLCByMiwgMworCWJ6dCByMiwgLkxjbGVhcl9hbGlnbmVkX3VzZXJfYXNtCisxOiAgICAgIHsgc2IgcjAsIHplcm87IGFkZGkgcjAsIHIwLCAxOyBhZGRpIHIxLCByMSwgLTEgfQorCWJuenQgcjEsIDFiCisyOiAgICAgIHsgbW92ZSByMCwgcjE7IGpycCBsciB9CisJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLndvcmQgMWIsIDJiCisJLnBvcHNlY3Rpb24KKworLkxjbGVhcl9hbGlnbmVkX3VzZXJfYXNtOgorMTogICAgICB7IHN3IHIwLCB6ZXJvOyBhZGRpIHIwLCByMCwgNDsgYWRkaSByMSwgcjEsIC00IH0KKwlibnp0IHIxLCAxYgorMjogICAgICB7IG1vdmUgcjAsIHIxOyBqcnAgbHIgfQorCVNURF9FTkRQUk9DKGNsZWFyX3VzZXJfYXNtKQorCS5wdXNoc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS53b3JkIDFiLCAyYgorCS5wb3BzZWN0aW9uCisKKy8qCisgKiBmbHVzaF91c2VyX2FzbSB0YWtlcyB0aGUgdXNlciB0YXJnZXQgYWRkcmVzcyBpbiByMCBhbmQgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgdG8gZmx1c2ggaW4gcjEuCisgKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5mbHVzaGFibGUgYnl0ZXMgKGhvcGVmdWxseSB6ZXJvKSBpbiByMC4KKyAqLworU1REX0VOVFJZKGZsdXNoX3VzZXJfYXNtKQorCWJ6IHIxLCAyZgorCXsgbW92ZWkgcjIsIEwyX0NBQ0hFX0JZVEVTOyBhZGQgcjEsIHIwLCByMSB9CisJeyBzdWIgcjIsIHplcm8sIHIyOyBhZGRpIHIxLCByMSwgTDJfQ0FDSEVfQllURVMtMSB9CisJeyBhbmQgcjAsIHIwLCByMjsgYW5kIHIxLCByMSwgcjIgfQorCXsgc3ViIHIxLCByMSwgcjAgfQorMTogICAgICB7IGZsdXNoIHIwOyBhZGRpIHIxLCByMSwgLUNISVBfRkxVU0hfU1RSSURFKCkgfQorCXsgYWRkaSByMCwgcjAsIENISVBfRkxVU0hfU1RSSURFKCk7IGJuenQgcjEsIDFiIH0KKzI6ICAgICAgeyBtb3ZlIHIwLCByMTsganJwIGxyIH0KKwlTVERfRU5EUFJPQyhmbHVzaF91c2VyX2FzbSkKKwkucHVzaHNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkud29yZCAxYiwgMmIKKwkucG9wc2VjdGlvbgorCisvKgorICogaW52X3VzZXJfYXNtIHRha2VzIHRoZSB1c2VyIHRhcmdldCBhZGRyZXNzIGluIHIwIGFuZCB0aGUKKyAqIG51bWJlciBvZiBieXRlcyB0byBpbnZhbGlkYXRlIGluIHIxLgorICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG5vdCBpbnYnYWJsZSBieXRlcyAoaG9wZWZ1bGx5IHplcm8pIGluIHIwLgorICovCitTVERfRU5UUlkoaW52X3VzZXJfYXNtKQorCWJ6IHIxLCAyZgorCXsgbW92ZWkgcjIsIEwyX0NBQ0hFX0JZVEVTOyBhZGQgcjEsIHIwLCByMSB9CisJeyBzdWIgcjIsIHplcm8sIHIyOyBhZGRpIHIxLCByMSwgTDJfQ0FDSEVfQllURVMtMSB9CisJeyBhbmQgcjAsIHIwLCByMjsgYW5kIHIxLCByMSwgcjIgfQorCXsgc3ViIHIxLCByMSwgcjAgfQorMTogICAgICB7IGludiByMDsgYWRkaSByMSwgcjEsIC1DSElQX0lOVl9TVFJJREUoKSB9CisJeyBhZGRpIHIwLCByMCwgQ0hJUF9JTlZfU1RSSURFKCk7IGJuenQgcjEsIDFiIH0KKzI6ICAgICAgeyBtb3ZlIHIwLCByMTsganJwIGxyIH0KKwlTVERfRU5EUFJPQyhpbnZfdXNlcl9hc20pCisJLnB1c2hzZWN0aW9uIF9fZXhfdGFibGUsImEiCisJLndvcmQgMWIsIDJiCisJLnBvcHNlY3Rpb24KKworLyoKKyAqIGZpbnZfdXNlcl9hc20gdGFrZXMgdGhlIHVzZXIgdGFyZ2V0IGFkZHJlc3MgaW4gcjAgYW5kIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHRvIGZsdXNoLWludmFsaWRhdGUgaW4gcjEuCisgKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm90IGZpbnYnYWJsZSBieXRlcyAoaG9wZWZ1bGx5IHplcm8pIGluIHIwLgorICovCitTVERfRU5UUlkoZmludl91c2VyX2FzbSkKKwlieiByMSwgMmYKKwl7IG1vdmVpIHIyLCBMMl9DQUNIRV9CWVRFUzsgYWRkIHIxLCByMCwgcjEgfQorCXsgc3ViIHIyLCB6ZXJvLCByMjsgYWRkaSByMSwgcjEsIEwyX0NBQ0hFX0JZVEVTLTEgfQorCXsgYW5kIHIwLCByMCwgcjI7IGFuZCByMSwgcjEsIHIyIH0KKwl7IHN1YiByMSwgcjEsIHIwIH0KKzE6ICAgICAgeyBmaW52IHIwOyBhZGRpIHIxLCByMSwgLUNISVBfRklOVl9TVFJJREUoKSB9CisJeyBhZGRpIHIwLCByMCwgQ0hJUF9GSU5WX1NUUklERSgpOyBibnp0IHIxLCAxYiB9CisyOiAgICAgIHsgbW92ZSByMCwgcjE7IGpycCBsciB9CisJU1REX0VORFBST0MoZmludl91c2VyX2FzbSkKKwkucHVzaHNlY3Rpb24gX19leF90YWJsZSwiYSIKKwkud29yZCAxYiwgMmIKKwkucG9wc2VjdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL01ha2VmaWxlIGIvYXJjaC90aWxlL21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNTJhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbW0vTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXggdGlsZS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCisjCisKK29iai15CTo9IGluaXQubyBwZ3RhYmxlLm8gZmF1bHQubyBleHRhYmxlLm8gZWxmLm8gXAorCSAgIG1tYXAubyBob21lY2FjaGUubyBtaWdyYXRlXyQoQklUUykubworCitvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKSArPSBodWdldGxicGFnZS5vCitvYmotJChDT05GSUdfSElHSE1FTSkgKz0gaGlnaG1lbS5vCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vZWxmLmMgYi9hcmNoL3RpbGUvbW0vZWxmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlNThlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9tbS9lbGYuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKKy8qIE5vdGlmeSBhIHJ1bm5pbmcgc2ltdWxhdG9yLCBpZiBhbnksIHRoYXQgYW4gZXhlYyBqdXN0IG9jY3VycmVkLiAqLworc3RhdGljIHZvaWQgc2ltX25vdGlmeV9leGVjKGNvbnN0IGNoYXIgKmJpbmFyeV9uYW1lKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwlkbyB7CisJCWMgPSAqYmluYXJ5X25hbWUrKzsKKwkJX19pbnNuX210c3ByKFNQUl9TSU1fQ09OVFJPTCwKKwkJCSAgICAgKFNJTV9DT05UUk9MX09TX0VYRUMKKwkJCSAgICAgIHwgKGMgPDwgX1NJTV9DT05UUk9MX09QRVJBVE9SX0JJVFMpKSk7CisKKwl9IHdoaWxlIChjKTsKK30KKworc3RhdGljIGludCBub3RpZnlfZXhlYyh2b2lkKQoreworCWludCByZXR2YWwgPSAwOyAgLyogZmFpbHVyZSAqLworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gY3VycmVudC0+bW0tPm1tYXA7CisJd2hpbGUgKHZtYSkgeworCQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKSAmJiB2bWEtPnZtX2ZpbGUpCisJCQlicmVhazsKKwkJdm1hID0gdm1hLT52bV9uZXh0OworCX0KKwlpZiAodm1hKSB7CisJCWNoYXIgKmJ1ZiA9IChjaGFyICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZikgeworCQkJY2hhciAqcGF0aCA9IGRfcGF0aCgmdm1hLT52bV9maWxlLT5mX3BhdGgsCisJCQkJCSAgICBidWYsIFBBR0VfU0laRSk7CisJCQlpZiAoIUlTX0VSUihwYXRoKSkgeworCQkJCXNpbV9ub3RpZnlfZXhlYyhwYXRoKTsKKwkJCQlyZXR2YWwgPSAxOworCQkJfQorCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogTm90aWZ5IGEgcnVubmluZyBzaW11bGF0b3IsIGlmIGFueSwgdGhhdCB3ZSBsb2FkZWQgYW4gaW50ZXJwcmV0ZXIuICovCitzdGF0aWMgdm9pZCBzaW1fbm90aWZ5X2ludGVycCh1bnNpZ25lZCBsb25nIGxvYWRfYWRkcikKK3sKKwlzaXplX3QgaTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGxvYWRfYWRkcik7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBsb2FkX2FkZHIgPj4gKGkgKiA4KTsKKwkJX19pbnNuX210c3ByKFNQUl9TSU1fQ09OVFJPTCwKKwkJCSAgICAgKFNJTV9DT05UUk9MX09TX0lOVEVSUAorCQkJICAgICAgfCAoYyA8PCBfU0lNX0NPTlRST0xfT1BFUkFUT1JfQklUUykpKTsKKwl9Cit9CisKKworLyogS2VybmVsIGFkZHJlc3Mgb2YgcGFnZSB1c2VkIHRvIG1hcCByZWFkLW9ubHkga2VybmVsIGRhdGEgaW50byB1c2Vyc3BhY2UuICovCitzdGF0aWMgdm9pZCAqdmRzb19wYWdlOworCisvKiBPbmUtZW50cnkgYXJyYXkgdXNlZCBmb3IgaW5zdGFsbF9zcGVjaWFsX21hcHBpbmcuICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKnZkc29fcGFnZXNbMV07CisKK3N0YXRpYyBpbnQgX19pbml0IHZkc29fc2V0dXAodm9pZCkKK3sKKwl2ZHNvX3BhZ2UgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKwltZW1jcHkodmRzb19wYWdlLCBfX3J0X3NpZ3JldHVybiwgX19ydF9zaWdyZXR1cm5fZW5kIC0gX19ydF9zaWdyZXR1cm4pOworCXZkc29fcGFnZXNbMF0gPSB2aXJ0X3RvX3BhZ2UodmRzb19wYWdlKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbCh2ZHNvX3NldHVwKTsKKworY29uc3QgY2hhciAqYXJjaF92bWFfbmFtZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpZiAodm1hLT52bV9wcml2YXRlX2RhdGEgPT0gdmRzb19wYWdlcykKKwkJcmV0dXJuICJbdmRzb10iOworI2lmbmRlZiBfX3RpbGVneF9fCisJaWYgKHZtYS0+dm1fc3RhcnQgPT0gTUVNX1VTRVJfSU5UUlBUKQorCQlyZXR1cm4gIltpbnRycHRdIjsKKyNlbmRpZgorCXJldHVybiBOVUxMOworfQorCitpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkJaW50IGV4ZWN1dGFibGVfc3RhY2spCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qCisJICogTm90aWZ5IHRoZSBzaW11bGF0b3IgdGhhdCBhbiBleGVjIGp1c3Qgb2NjdXJyZWQuCisJICogSWYgd2UgY2FuJ3QgZmluZCB0aGUgZmlsZW5hbWUgb2YgdGhlIG1hcHBpbmcsIGp1c3QgdXNlCisJICogd2hhdGV2ZXIgd2FzIHBhc3NlZCBhcyB0aGUgbGludXhfYmlucHJtIGZpbGVuYW1lLgorCSAqLworCWlmICghbm90aWZ5X2V4ZWMoKSkKKwkJc2ltX25vdGlmeV9leGVjKGJwcm0tPmZpbGVuYW1lKTsKKworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisKKwkvKgorCSAqIE1BWVdSSVRFIHRvIGFsbG93IGdkYiB0byBDT1cgYW5kIHNldCBicmVha3BvaW50cworCSAqCisJICogTWFrZSBzdXJlIHRoZSB2RFNPIGdldHMgaW50byBldmVyeSBjb3JlIGR1bXAuICBEdW1waW5nIGl0cworCSAqIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIKKwkgKiB3aXRob3V0IG1hdGNoaW5nIHVwIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvCisJICogc2VlIHdoYXQgUEMgdmFsdWVzIG1lYW50LgorCSAqLworCXZkc29fYmFzZSA9IFZEU09fQkFTRTsKKwlyZXR2YWwgPSBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyhtbSwgdmRzb19iYXNlLCBQQUdFX1NJWkUsCisJCQkJCSBWTV9SRUFEfFZNX0VYRUN8CisJCQkJCSBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUN8CisJCQkJCSBWTV9BTFdBWVNEVU1QLAorCQkJCQkgdmRzb19wYWdlcyk7CisKKyNpZm5kZWYgX190aWxlZ3hfXworCS8qCisJICogU2V0IHVwIGEgdXNlci1pbnRlcnJ1cHQgbWFwcGluZyBoZXJlOyB0aGUgdXNlciBjYW4ndAorCSAqIGNyZWF0ZSBvbmUgdGhlbXNlbHZlcyBzaW5jZSBpdCBpcyBhYm92ZSBUQVNLX1NJWkUuCisJICogV2UgbWFrZSBpdCB1bndyaXRhYmxlIGJ5IGRlZmF1bHQsIHNvIHRoZSBtb2RlbCBmb3IgYWRkaW5nCisJICogaW50ZXJydXB0IHZlY3RvcnMgYWx3YXlzIGludm9sdmVzIGFuIG1wcm90ZWN0LgorCSAqLworCWlmICghcmV0dmFsKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IE1FTV9VU0VSX0lOVFJQVDsKKwkJYWRkciA9IG1tYXBfcmVnaW9uKE5VTEwsIGFkZHIsIElOVFJQVF9TSVpFLAorCQkJCSAgIE1BUF9GSVhFRHxNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLAorCQkJCSAgIFZNX1JFQUR8Vk1fRVhFQ3wKKwkJCQkgICBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUMsIDApOworCQlpZiAoYWRkciA+ICh1bnNpZ25lZCBsb25nKSAtUEFHRV9TSVpFKQorCQkJcmV0dmFsID0gKGludCkgYWRkcjsKKwl9CisjZW5kaWYKKworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworCit2b2lkIGVsZl9wbGF0X2luaXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgbG9hZF9hZGRyKQoreworCS8qIFplcm8gYWxsIHJlZ2lzdGVycy4gKi8KKwltZW1zZXQocmVncywgMCwgc2l6ZW9mKCpyZWdzKSk7CisKKwkvKiBSZXBvcnQgdGhlIGludGVycHJldGVyJ3MgbG9hZCBhZGRyZXNzLiAqLworCXNpbV9ub3RpZnlfaW50ZXJwKGxvYWRfYWRkcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vZXh0YWJsZS5jIGIvYXJjaC90aWxlL21tL2V4dGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmIwYWNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL21tL2V4dGFibGUuYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwljb25zdCBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpmaXh1cDsKKworCWZpeHVwID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+cGMpOworCWlmIChmaXh1cCkgeworCQlyZWdzLT5wYyA9IGZpeHVwLT5maXh1cDsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vZmF1bHQuYyBiL2FyY2gvdGlsZS9tbS9mYXVsdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMTFmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbW0vZmF1bHQuYwpAQCAtMCwwICsxLDg2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBGcm9tIGkzODYgY29kZSBjb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4JCS8qIEZvciB1bmJsYW5rX3NjcmVlbigpICovCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KKworI2luY2x1ZGUgPGFyY2gvaW50ZXJydXB0cy5oPgorCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBmb3JjZV9zaWdfaW5mb19mYXVsdChpbnQgc2lfc2lnbm8sIGludCBzaV9jb2RlLAorCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IGZhdWx0X251bSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc2lnaW5mb190IGluZm87CisKKwlpZiAodW5saWtlbHkodHNrLT5waWQgPCAyKSkgeworCQlwYW5pYygiU2lnbmFsICVkIChjb2RlICVkKSBhdCAlI2x4IHNlbnQgdG8gJXMhIiwKKwkJICAgICAgc2lfc2lnbm8sIHNpX2NvZGUgJiAweGZmZmYsIGFkZHJlc3MsCisJCSAgICAgIHRzay0+cGlkID8gImluaXQiIDogInRoZSBpZGxlIHRhc2siKTsKKwl9CisKKwlpbmZvLnNpX3NpZ25vID0gc2lfc2lnbm87CisJaW5mby5zaV9lcnJubyA9IDA7CisJaW5mby5zaV9jb2RlID0gc2lfY29kZTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKilhZGRyZXNzOworCWluZm8uc2lfdHJhcG5vID0gZmF1bHRfbnVtOworCWZvcmNlX3NpZ19pbmZvKHNpX3NpZ25vLCAmaW5mbywgdHNrKTsKK30KKworI2lmbmRlZiBfX3RpbGVneF9fCisvKgorICogU3ludGhlc2l6ZSB0aGUgZmF1bHQgYSBQTDAgcHJvY2VzcyB3b3VsZCBnZXQgYnkgZG9pbmcgYSB3b3JkLWxvYWQgb2YKKyAqIGFuIHVuYWxpZ25lZCBhZGRyZXNzIG9yIGEgaGlnaCBrZXJuZWwgYWRkcmVzcy4gIENhbGxlZCBpbmRpcmVjdGx5CisgKiBmcm9tIHN5c19jbXB4Y2hnKCkgaW4ga2VybmVsL2ludHZlYy5TLgorICovCitpbnQgX3N5c19jbXB4Y2hnX2JhZGFkZHIodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoYWRkcmVzcyA+PSBQQUdFX09GRlNFVCkKKwkJZm9yY2Vfc2lnX2luZm9fZmF1bHQoU0lHU0VHViwgU0VHVl9NQVBFUlIsIGFkZHJlc3MsCisJCQkJICAgICBJTlRfRFRMQl9NSVNTLCBjdXJyZW50KTsKKwllbHNlCisJCWZvcmNlX3NpZ19pbmZvX2ZhdWx0KFNJR0JVUywgQlVTX0FEUkFMTiwgYWRkcmVzcywKKwkJCQkgICAgIElOVF9VTkFMSUdOX0RBVEEsIGN1cnJlbnQpOworCisJLyoKKwkgKiBBZGp1c3QgcGMgdG8gcG9pbnQgYXQgdGhlIGFjdHVhbCBpbnN0cnVjdGlvbiwgd2hpY2ggaXMgdW51c3VhbAorCSAqIGZvciBzeXNjYWxscyBub3JtYWxseSwgYnV0IGlzIGFwcHJvcHJpYXRlIHdoZW4gd2UgYXJlIGNsYWltaW5nCisJICogdGhhdCBhIHN5c2NhbGwgc3dpbnQxIGNhdXNlZCBhIHBhZ2UgZmF1bHQgb3IgYnVzIGVycm9yLgorCSAqLworCXJlZ3MtPnBjIC09IDg7CisKKwkvKgorCSAqIE1hcmsgdGhpcyBhcyBhIGNhbGxlci1zYXZlIGludGVycnVwdCwgbGlrZSBhIG5vcm1hbCBwYWdlIGZhdWx0LAorCSAqIHNvIHRoYXQgd2hlbiB3ZSBnbyB0aHJvdWdoIHRoZSBzaWduYWwgaGFuZGxlciBwYXRoIHdlIHdpbGwKKwkgKiBwcm9wZXJseSByZXN0b3JlIHIwLCByMSwgYW5kIHIyIGZvciB0aGUgc2lnbmFsIGhhbmRsZXIgYXJndW1lbnRzLgorCSAqLworCXJlZ3MtPmZsYWdzIHw9IFBUX0ZMQUdTX0NBTExFUl9TQVZFUzsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgcG1kX3QgKnZtYWxsb2Nfc3luY19vbmUocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXVuc2lnbmVkIGluZGV4ID0gcGdkX2luZGV4KGFkZHJlc3MpOworCXBnZF90ICpwZ2RfazsKKwlwdWRfdCAqcHVkLCAqcHVkX2s7CisJcG1kX3QgKnBtZCwgKnBtZF9rOworCisJcGdkICs9IGluZGV4OworCXBnZF9rID0gaW5pdF9tbS5wZ2QgKyBpbmRleDsKKworCWlmICghcGdkX3ByZXNlbnQoKnBnZF9rKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CisJcHVkX2sgPSBwdWRfb2Zmc2V0KHBnZF9rLCBhZGRyZXNzKTsKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWRfaykpCisJCXJldHVybiBOVUxMOworCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOworCXBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcmVzcyk7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kX2spKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKSB7CisJCXNldF9wbWQocG1kLCAqcG1kX2spOworCQlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKKwl9IGVsc2UKKwkJQlVHX09OKHBtZF9wdGZuKCpwbWQpICE9IHBtZF9wdGZuKCpwbWRfaykpOworCXJldHVybiBwbWRfazsKK30KKworLyoKKyAqIEhhbmRsZSBhIGZhdWx0IG9uIHRoZSB2bWFsbG9jIG9yIG1vZHVsZSBtYXBwaW5nIGFyZWEKKyAqLworc3RhdGljIGlubGluZSBpbnQgdm1hbGxvY19mYXVsdChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcG1kX3QgKnBtZF9rOworCXB0ZV90ICpwdGVfazsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gdm1hbGxvYyBhcmVhICovCisJaWYgKCEoYWRkcmVzcyA+PSBWTUFMTE9DX1NUQVJUICYmIGFkZHJlc3MgPCBWTUFMTE9DX0VORCkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogU3luY2hyb25pemUgdGhpcyB0YXNrJ3MgdG9wIGxldmVsIHBhZ2UtdGFibGUKKwkgKiB3aXRoIHRoZSAncmVmZXJlbmNlJyBwYWdlIHRhYmxlLgorCSAqLworCXBtZF9rID0gdm1hbGxvY19zeW5jX29uZShwZ2QsIGFkZHJlc3MpOworCWlmICghcG1kX2spCisJCXJldHVybiAtMTsKKwlpZiAocG1kX2h1Z2UoKnBtZF9rKSkKKwkJcmV0dXJuIDA7ICAgLyogc3VwcG9ydCBUSUxFIGh1Z2Vfdm1hcCgpIEFQSSAqLworCXB0ZV9rID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2ssIGFkZHJlc3MpOworCWlmICghcHRlX3ByZXNlbnQoKnB0ZV9rKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKiBXYWl0IHVudGlsIHRoaXMgUFRFIGhhcyBjb21wbGV0ZWQgbWlncmF0aW9uLiAqLworc3RhdGljIHZvaWQgd2FpdF9mb3JfbWlncmF0aW9uKHB0ZV90ICpwdGUpCit7CisJaWYgKHB0ZV9taWdyYXRpbmcoKnB0ZSkpIHsKKwkJLyoKKwkJICogV2FpdCB1bnRpbCB0aGUgbWlncmF0ZXIgZml4ZXMgdXAgdGhpcyBwdGUuCisJCSAqIFdlIHNjYWxlIHRoZSBsb29wIGNvdW50IGJ5IHRoZSBjbG9jayByYXRlIHNvIHdlJ2xsIHdhaXQgZm9yCisJCSAqIGEgZmV3IHNlY29uZHMgaGVyZS4KKwkJICovCisJCWludCByZXRyaWVzID0gMDsKKwkJaW50IGJvdW5kID0gZ2V0X2Nsb2NrX3JhdGUoKTsKKwkJd2hpbGUgKHB0ZV9taWdyYXRpbmcoKnB0ZSkpIHsKKwkJCWJhcnJpZXIoKTsKKwkJCWlmICgrK3JldHJpZXMgPiBib3VuZCkKKwkJCQlwYW5pYygiSGl0IG1pZ3JhdGluZyBQVEUgKCUjbGx4KSBhbmQiCisJCQkJICAgICAgIiBwYWdlIFBGTiAlI2x4IHN0aWxsIG1pZ3JhdGluZyIsCisJCQkJICAgICAgcHRlLT52YWwsIHB0ZV9wZm4oKnB0ZSkpOworCQl9CisJfQorfQorCisvKgorICogSXQncyBub3QgZ2VuZXJhbGx5IHNhZmUgdG8gdXNlICJjdXJyZW50IiB0byBnZXQgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciwKKyAqIHNpbmNlIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgYW4gb3Byb2ZpbGUgaW50ZXJydXB0IGluIHRoZSBtaWRkbGUgb2YgYQorICogdGFzayBzd2l0Y2guCisgKi8KK3N0YXRpYyBwZ2RfdCAqZ2V0X2N1cnJlbnRfcGdkKHZvaWQpCit7CisJSFZfQ29udGV4dCBjdHggPSBodl9pbnF1aXJlX2NvbnRleHQoKTsKKwl1bnNpZ25lZCBsb25nIHBnZF9wZm4gPSBjdHgucGFnZV90YWJsZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICpwZ2RfcGFnZSA9IHBmbl90b19wYWdlKHBnZF9wZm4pOworCUJVR19PTihQYWdlSGlnaE1lbShwZ2RfcGFnZSkpOyAgIC8qIG9vcHMsIEhJR0hQVEU/ICovCisJcmV0dXJuIChwZ2RfdCAqKSBfX3ZhKGN0eC5wYWdlX3RhYmxlKTsKK30KKworLyoKKyAqIFdlIGNhbiByZWNlaXZlIGEgcGFnZSBmYXVsdCBmcm9tIGEgbWlncmF0aW5nIFBURSBhdCBhbnkgdGltZS4KKyAqIEhhbmRsZSBpdCBieSBqdXN0IHdhaXRpbmcgdW50aWwgdGhlIGZhdWx0IHJlc29sdmVzLgorICoKKyAqIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBnZXQgYSBtaWdyYXRpbmcga2VybmVsIFBURSB0aGF0IHJlc29sdmVzCisgKiBpdHNlbGYgZHVyaW5nIHRoZSBkb3duY2FsbCBmcm9tIGh5cGVydmlzb3IgdG8gTGludXguICBXZSBqdXN0IGNoZWNrCisgKiBoZXJlIHRvIHNlZSBpZiB0aGUgUFRFIHNlZW1zIHZhbGlkLCBhbmQgaWYgc28gd2UgcmV0cnkgaXQuCisgKgorICogTk9URSEgV2UgTVVTVCBOT1QgdGFrZSBhbnkgbG9ja3MgZm9yIHRoaXMgY2FzZS4gIFdlIG1heSBiZSBpbiBhbgorICogaW50ZXJydXB0IG9yIGEgY3JpdGljYWwgcmVnaW9uLCBhbmQgbXVzdCBkbyBhcyBsaXR0bGUgYXMgcG9zc2libGUuCisgKiBTaW1pbGFybHksIHdlIGNhbid0IHVzZSBhdG9taWMgb3BzIGhlcmUsIHNpbmNlIHdlIG1heSBiZSBoYW5kbGluZyBhCisgKiBmYXVsdCBjYXVzZWQgYnkgYW4gYXRvbWljIG9wIGFjY2Vzcy4KKyAqLworc3RhdGljIGludCBoYW5kbGVfbWlncmF0aW5nX3B0ZShwZ2RfdCAqcGdkLCBpbnQgZmF1bHRfbnVtLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQlpbnQgaXNfa2VybmVsX21vZGUsIGludCB3cml0ZSkKK3sKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKwlwdGVfdCBwdGV2YWw7CisKKwlpZiAocGdkX2FkZHJfaW52YWxpZChhZGRyZXNzKSkKKwkJcmV0dXJuIDA7CisKKwlwZ2QgKz0gcGdkX2luZGV4KGFkZHJlc3MpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwlpZiAoIXB1ZCB8fCAhcHVkX3ByZXNlbnQoKnB1ZCkpCisJCXJldHVybiAwOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKKwlpZiAoIXBtZCB8fCAhcG1kX3ByZXNlbnQoKnBtZCkpCisJCXJldHVybiAwOworCXB0ZSA9IHBtZF9odWdlX3BhZ2UoKnBtZCkgPyAoKHB0ZV90ICopcG1kKSA6CisJCXB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcmVzcyk7CisJcHRldmFsID0gKnB0ZTsKKwlpZiAocHRlX21pZ3JhdGluZyhwdGV2YWwpKSB7CisJCXdhaXRfZm9yX21pZ3JhdGlvbihwdGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWlzX2tlcm5lbF9tb2RlIHx8ICFwdGVfcHJlc2VudChwdGV2YWwpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmF1bHRfbnVtID09IElOVF9JVExCX01JU1MpIHsKKwkJaWYgKHB0ZV9leGVjKHB0ZXZhbCkpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKHdyaXRlKSB7CisJCWlmIChwdGVfd3JpdGUocHRldmFsKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlmIChwdGVfcmVhZChwdGV2YWwpKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgcmVzcG9uc2libGUgZm9yIGZhdWx0aW5nIGluIHVzZXIgcGFnZXMuCisgKiBJdCBwYXNzZXMgdGhlIHdvcmsgb2ZmIHRvIG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUgcm91dGluZXMuCisgKiBJdCByZXR1cm5zIHRydWUgaWYgdGhlIGZhdWx0IHdhcyBzdWNjZXNzZnVsbHkgaGFuZGxlZC4KKyAqLworc3RhdGljIGludCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCSAgICAgaW50IGZhdWx0X251bSwKKwkJCSAgICAgaW50IGlzX3BhZ2VfZmF1bHQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgaW50IHdyaXRlKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfb2Zmc2V0OworCWludCBmYXVsdDsKKwlpbnQgc2lfY29kZTsKKwlpbnQgaXNfa2VybmVsX21vZGU7CisJcGdkX3QgKnBnZDsKKworCS8qIG9uIFRJTEUsIHByb3RlY3Rpb24gZmF1bHRzIGFyZSBhbHdheXMgd3JpdGVzICovCisJaWYgKCFpc19wYWdlX2ZhdWx0KQorCQl3cml0ZSA9IDE7CisKKwlpc19rZXJuZWxfbW9kZSA9IChFWDFfUEwocmVncy0+ZXgxKSAhPSBVU0VSX1BMKTsKKworCXRzayA9IHZhbGlkYXRlX2N1cnJlbnQoKTsKKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIHdlIG1pZ2h0IGJlIG92ZXJ3cml0aW5nIHRoZSBzdGFjaywgYW5kIGJhaWwKKwkgKiBvdXQgaWYgc28uICBUaGUgcGFnZSBmYXVsdCBjb2RlIGlzIGEgcmVsYXRpdmVseSBsaWtlbHkKKwkgKiBwbGFjZSB0byBnZXQgdHJhcHBlZCBpbiBhbiBpbmZpbml0ZSByZWdyZXNzLCBhbmQgb25jZSB3ZQorCSAqIG92ZXJ3cml0ZSB0aGUgd2hvbGUgc3RhY2ssIGl0IGJlY29tZXMgdmVyeSBoYXJkIHRvIHJlY292ZXIuCisJICovCisJc3RhY2tfb2Zmc2V0ID0gc3RhY2tfcG9pbnRlciAmIChUSFJFQURfU0laRS0xKTsKKwlpZiAoc3RhY2tfb2Zmc2V0IDwgVEhSRUFEX1NJWkUgLyA4KSB7CisJCXByX2FsZXJ0KCJQb3RlbnRpYWwgc3RhY2sgb3ZlcnJ1bjogc3AgJSNseFxuIiwKKwkJICAgICAgIHN0YWNrX3BvaW50ZXIpOworCQlzaG93X3JlZ3MocmVncyk7CisJCXByX2FsZXJ0KCJLaWxsaW5nIGN1cnJlbnQgcHJvY2VzcyAlZC8lc1xuIiwKKwkJICAgICAgIHRzay0+cGlkLCB0c2stPmNvbW0pOworCQlkb19ncm91cF9leGl0KFNJR0tJTEwpOworCX0KKworCS8qCisJICogRWFybHkgb24sIHdlIG5lZWQgdG8gY2hlY2sgZm9yIG1pZ3JhdGluZyBQVEUgZW50cmllczsKKwkgKiBzZWUgaG9tZWNhY2hlLmMuICBJZiB3ZSBmaW5kIGEgbWlncmF0aW5nIFBURSwgd2Ugd2FpdCB1bnRpbAorCSAqIHRoZSBiYWNraW5nIHBhZ2UgY2xhaW1zIHRvIGJlIGRvbmUgbWlncmF0aW5nLCB0aGVuIHdlIHByb2NlZGUuCisJICogRm9yIGtlcm5lbCBQVEVzLCB3ZSByZXdyaXRlIHRoZSBQVEUgYW5kIHJldHVybiBhbmQgcmV0cnkuCisJICogT3RoZXJ3aXNlLCB3ZSB0cmVhdCB0aGUgZmF1bHQgbGlrZSBhIG5vcm1hbCAibm8gUFRFIiBmYXVsdCwKKwkgKiByYXRoZXIgdGhhbiB0cnlpbmcgdG8gcGF0Y2ggdXAgdGhlIGV4aXN0aW5nIFBURS4KKwkgKi8KKwlwZ2QgPSBnZXRfY3VycmVudF9wZ2QoKTsKKwlpZiAoaGFuZGxlX21pZ3JhdGluZ19wdGUocGdkLCBmYXVsdF9udW0sIGFkZHJlc3MsCisJCQkJIGlzX2tlcm5lbF9tb2RlLCB3cml0ZSkpCisJCXJldHVybiAxOworCisJc2lfY29kZSA9IFNFR1ZfTUFQRVJSOworCisJLyoKKwkgKiBXZSBmYXVsdC1pbiBrZXJuZWwtc3BhY2UgdmlydHVhbCBtZW1vcnkgb24tZGVtYW5kLiBUaGUKKwkgKiAncmVmZXJlbmNlJyBwYWdlIHRhYmxlIGlzIGluaXRfbW0ucGdkLgorCSAqCisJICogTk9URSEgV2UgTVVTVCBOT1QgdGFrZSBhbnkgbG9ja3MgZm9yIHRoaXMgY2FzZS4gV2UgbWF5CisJICogYmUgaW4gYW4gaW50ZXJydXB0IG9yIGEgY3JpdGljYWwgcmVnaW9uLCBhbmQgc2hvdWxkCisJICogb25seSBjb3B5IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBtYXN0ZXIgcGFnZSB0YWJsZSwKKwkgKiBub3RoaW5nIG1vcmUuCisJICoKKwkgKiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIGZhdWx0IGhhcHBlbnMgaW4ga2VybmVsIHNwYWNlCisJICogYW5kIHRoYXQgdGhlIGZhdWx0IHdhcyBub3QgYSBwcm90ZWN0aW9uIGZhdWx0LgorCSAqLworCWlmICh1bmxpa2VseShhZGRyZXNzID49IFRBU0tfU0laRSAmJgorCQkgICAgICFpc19hcmNoX21hcHBhYmxlX3JhbmdlKGFkZHJlc3MsIDApKSkgeworCQlpZiAoaXNfa2VybmVsX21vZGUgJiYgaXNfcGFnZV9mYXVsdCAmJgorCQkgICAgdm1hbGxvY19mYXVsdChwZ2QsIGFkZHJlc3MpID49IDApCisJCQlyZXR1cm4gMTsKKwkJLyoKKwkJICogRG9uJ3QgdGFrZSB0aGUgbW0gc2VtYXBob3JlIGhlcmUuIElmIHdlIGZpeHVwIGEgcHJlZmV0Y2gKKwkJICogZmF1bHQgd2UgY291bGQgb3RoZXJ3aXNlIGRlYWRsb2NrLgorCQkgKi8KKwkJbW0gPSBOVUxMOyAgLyogaGFwcHkgY29tcGlsZXIgKi8KKwkJdm1hID0gTlVMTDsKKwkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHRyeWluZyB0byB0b3VjaCB1c2VyLXNwYWNlIGFkZHJlc3Nlcywgd2UgbXVzdAorCSAqIGJlIGVpdGhlciBhdCBQTDAsIG9yIGVsc2Ugd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQgaW4gdGhlCisJICoga2VybmVsLCBzbyBlaXRoZXIgd2F5IHdlIGNhbiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlLgorCSAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKworCW1tID0gdHNrLT5tbTsKKworCS8qCisJICogSWYgd2UncmUgaW4gYW4gaW50ZXJydXB0LCBoYXZlIG5vIHVzZXIgY29udGV4dCBvciBhcmUgcnVubmluZyBpbiBhbgorCSAqIGF0b21pYyByZWdpb24gdGhlbiB3ZSBtdXN0IG5vdCB0YWtlIHRoZSBmYXVsdC4KKwkgKi8KKwlpZiAoaW5fYXRvbWljKCkgfHwgIW1tKSB7CisJCXZtYSA9IE5VTEw7ICAvKiBoYXBweSBjb21waWxlciAqLworCQlnb3RvIGJhZF9hcmVhX25vc2VtYXBob3JlOworCX0KKworCS8qCisJICogV2hlbiBydW5uaW5nIGluIHRoZSBrZXJuZWwgd2UgZXhwZWN0IGZhdWx0cyB0byBvY2N1ciBvbmx5IHRvCisJICogYWRkcmVzc2VzIGluIHVzZXIgc3BhY2UuICBBbGwgb3RoZXIgZmF1bHRzIHJlcHJlc2VudCBlcnJvcnMgaW4gdGhlCisJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIGFuCisJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCisJICogd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdCBhZ2FpbnN0IHRoZQorCSAqIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5IHJlZmVyZW5jZXMgdXNlcgorCSAqIHNwYWNlIGZyb20gd2VsbCBkZWZpbmVkIGFyZWFzIG9mIGNvZGUsIHdoaWNoIGFyZSBsaXN0ZWQgaW4gdGhlCisJICogZXhjZXB0aW9ucyB0YWJsZS4KKwkgKgorCSAqIEFzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCisJICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGEgZGVhZGxvY2suCisJICogQXR0ZW1wdCB0byBsb2NrIHRoZSBhZGRyZXNzIHNwYWNlLCBpZiB3ZSBjYW5ub3Qgd2UgdGhlbiB2YWxpZGF0ZSB0aGUKKwkgKiBzb3VyY2UuICBJZiB0aGlzIGlzIGludmFsaWQgd2UgY2FuIHNraXAgdGhlIGFkZHJlc3Mgc3BhY2UgY2hlY2ssCisJICogdGh1cyBhdm9pZGluZyB0aGUgZGVhZGxvY2suCisJICovCisJaWYgKCFkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSkgeworCQlpZiAoaXNfa2VybmVsX21vZGUgJiYKKwkJICAgICFzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wYykpIHsKKwkJCXZtYSA9IE5VTEw7ICAvKiBoYXBweSBjb21waWxlciAqLworCQkJZ290byBiYWRfYXJlYV9ub3NlbWFwaG9yZTsKKwkJfQorCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJfQorCisJdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOworCWlmICghdm1hKQorCQlnb3RvIGJhZF9hcmVhOworCWlmICh2bWEtPnZtX3N0YXJ0IDw9IGFkZHJlc3MpCisJCWdvdG8gZ29vZF9hcmVhOworCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pKQorCQlnb3RvIGJhZF9hcmVhOworCWlmIChyZWdzLT5zcCA8IFBBR0VfT0ZGU0VUKSB7CisJCS8qCisJCSAqIGFjY2Vzc2luZyB0aGUgc3RhY2sgYmVsb3cgc3AgaXMgYWx3YXlzIGEgYnVnLgorCQkgKi8KKwkJaWYgKGFkZHJlc3MgPCByZWdzLT5zcCkKKwkJCWdvdG8gYmFkX2FyZWE7CisJfQorCWlmIChleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkKKwkJZ290byBiYWRfYXJlYTsKKworLyoKKyAqIE9rLCB3ZSBoYXZlIGEgZ29vZCB2bV9hcmVhIGZvciB0aGlzIG1lbW9yeSBhY2Nlc3MsIHNvCisgKiB3ZSBjYW4gaGFuZGxlIGl0Li4KKyAqLworZ29vZF9hcmVhOgorCXNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKKwlpZiAoZmF1bHRfbnVtID09IElOVF9JVExCX01JU1MpIHsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpKQorCQkJZ290byBiYWRfYXJlYTsKKwl9IGVsc2UgaWYgKHdyaXRlKSB7CisjaWZkZWYgVEVTVF9WRVJJRllfQVJFQQorCQlpZiAoIWlzX3BhZ2VfZmF1bHQgJiYgcmVncy0+Y3MgPT0gS0VSTkVMX0NTKQorCQkJcHJfZXJyKCJXUCBmYXVsdCBhdCAiUkVHRk1UIlxuIiwgcmVncy0+ZWlwKTsKKyNlbmRpZgorCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQorCQkJZ290byBiYWRfYXJlYTsKKwl9IGVsc2UgeworCQlpZiAoIWlzX3BhZ2VfZmF1bHQgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkpCisJCQlnb3RvIGJhZF9hcmVhOworCX0KKworIHN1cnZpdmU6CisJLyoKKwkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwKKwkgKiBtYWtlIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvCisJICogdGhlIGZhdWx0LgorCSAqLworCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlKTsKKwlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKKwkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQorCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKKwkJCWdvdG8gZG9fc2lnYnVzOworCQlCVUcoKTsKKwl9CisJaWYgKGZhdWx0ICYgVk1fRkFVTFRfTUFKT1IpCisJCXRzay0+bWFqX2ZsdCsrOworCWVsc2UKKwkJdHNrLT5taW5fZmx0Kys7CisKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpIHx8IENISVBfSEFTX1NOX1BST0MoKQorCS8qCisJICogSWYgdGhpcyB3YXMgYW4gYXN5bmNocm9ub3VzIGZhdWx0LAorCSAqIHJlc3RhcnQgdGhlIGFwcHJvcHJpYXRlIGVuZ2luZS4KKwkgKi8KKwlzd2l0Y2ggKGZhdWx0X251bSkgeworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwljYXNlIElOVF9ETUFUTEJfTUlTUzoKKwljYXNlIElOVF9ETUFUTEJfTUlTU19EV05DTDoKKwljYXNlIElOVF9ETUFUTEJfQUNDRVNTOgorCWNhc2UgSU5UX0RNQVRMQl9BQ0NFU1NfRFdOQ0w6CisJCV9faW5zbl9tdHNwcihTUFJfRE1BX0NUUiwgU1BSX0RNQV9DVFJfX1JFUVVFU1RfTUFTSyk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgQ0hJUF9IQVNfU05fUFJPQygpCisJY2FzZSBJTlRfU05JVExCX01JU1M6CisJY2FzZSBJTlRfU05JVExCX01JU1NfRFdOQ0w6CisJCV9faW5zbl9tdHNwcihTUFJfU05DVEwsCisJCQkgICAgIF9faW5zbl9tZnNwcihTUFJfU05DVEwpICYKKwkJCSAgICAgflNQUl9TTkNUTF9fRlJaUFJPQ19NQVNLKTsKKwkJYnJlYWs7CisjZW5kaWYKKwl9CisjZW5kaWYKKworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIDE7CisKKy8qCisgKiBTb21ldGhpbmcgdHJpZWQgdG8gYWNjZXNzIG1lbW9yeSB0aGF0IGlzbid0IGluIG91ciBtZW1vcnkgbWFwLi4KKyAqIEZpeCBpdCwgYnV0IGNoZWNrIGlmIGl0J3Mga2VybmVsIG9yIHVzZXIgZmlyc3QuLgorICovCitiYWRfYXJlYToKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCitiYWRfYXJlYV9ub3NlbWFwaG9yZToKKwkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KKwlpZiAoIWlzX2tlcm5lbF9tb2RlKSB7CisJCS8qCisJCSAqIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBpbnRlcnJ1cHRzIG9mZiBoZXJlLgorCQkgKi8KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCWZvcmNlX3NpZ19pbmZvX2ZhdWx0KFNJR1NFR1YsIHNpX2NvZGUsIGFkZHJlc3MsCisJCQkJICAgICBmYXVsdF9udW0sIHRzayk7CisJCXJldHVybiAwOworCX0KKworbm9fY29udGV4dDoKKwkvKiBBcmUgd2UgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMga2VybmVsIGZhdWx0PyAgKi8KKwlpZiAoZml4dXBfZXhjZXB0aW9uKHJlZ3MpKQorCQlyZXR1cm4gMDsKKworLyoKKyAqIE9vcHMuIFRoZSBrZXJuZWwgdHJpZWQgdG8gYWNjZXNzIHNvbWUgYmFkIHBhZ2UuIFdlJ2xsIGhhdmUgdG8KKyAqIHRlcm1pbmF0ZSB0aGluZ3Mgd2l0aCBleHRyZW1lIHByZWp1ZGljZS4KKyAqLworCisJYnVzdF9zcGlubG9ja3MoMSk7CisKKwkvKiBGSVhNRTogbm8gbG9va3VwX2FkZHJlc3MoKSB5ZXQgKi8KKyNpZmRlZiBTVVBQT1JUX0xPT0tVUF9BRERSRVNTCisJaWYgKGZhdWx0X251bSA9PSBJTlRfSVRMQl9NSVNTKSB7CisJCXB0ZV90ICpwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzKTsKKworCQlpZiAocHRlICYmIHB0ZV9wcmVzZW50KCpwdGUpICYmICFwdGVfZXhlY19rZXJuZWwoKnB0ZSkpCisJCQlwcl9jcml0KCJrZXJuZWwgdHJpZWQgdG8gZXhlY3V0ZSIKKwkJCSAgICAgICAiIG5vbi1leGVjdXRhYmxlIHBhZ2UgLSBleHBsb2l0IGF0dGVtcHQ/IgorCQkJICAgICAgICIgKHVpZDogJWQpXG4iLCBjdXJyZW50LT51aWQpOworCX0KKyNlbmRpZgorCWlmIChhZGRyZXNzIDwgUEFHRV9TSVpFKQorCQlwcl9hbGVydCgiVW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlXG4iKTsKKwllbHNlCisJCXByX2FsZXJ0KCJVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVxdWVzdFxuIik7CisJcHJfYWxlcnQoIiBhdCB2aXJ0dWFsIGFkZHJlc3MgIlJFR0ZNVCIsIHBjICJSRUdGTVQiXG4iLAorCQkgYWRkcmVzcywgcmVncy0+cGMpOworCisJc2hvd19yZWdzKHJlZ3MpOworCisJaWYgKHVubGlrZWx5KHRzay0+cGlkIDwgMikpIHsKKwkJcGFuaWMoIktlcm5lbCBwYWdlIGZhdWx0IHJ1bm5pbmcgJXMhIiwKKwkJICAgICAgdHNrLT5waWQgPyAiaW5pdCIgOiAidGhlIGlkbGUgdGFzayIpOworCX0KKworCS8qCisJICogTW9yZSBGSVhNRTogd2Ugc2hvdWxkIHByb2JhYmx5IGNvcHkgdGhlIGkzODYgaGVyZSBhbmQKKwkgKiBpbXBsZW1lbnQgYSBnZW5lcmljIGRpZSgpIHJvdXRpbmUuICBOb3QgdG9kYXkuCisJICovCisjaWZkZWYgU1VQUE9SVF9ESUUKKwlkaWUoIk9vcHMiLCByZWdzKTsKKyNlbmRpZgorCWJ1c3Rfc3BpbmxvY2tzKDEpOworCisJZG9fZ3JvdXBfZXhpdChTSUdLSUxMKTsKKworLyoKKyAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZQorICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgorICovCitvdXRfb2ZfbWVtb3J5OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKKwkJeWllbGQoKTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlnb3RvIHN1cnZpdmU7CisJfQorCXByX2FsZXJ0KCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOworCWlmICghaXNfa2VybmVsX21vZGUpCisJCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7CisJZ290byBub19jb250ZXh0OworCitkb19zaWdidXM6CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKworCS8qIEtlcm5lbCBtb2RlPyBIYW5kbGUgZXhjZXB0aW9ucyBvciBkaWUgKi8KKwlpZiAoaXNfa2VybmVsX21vZGUpCisJCWdvdG8gbm9fY29udGV4dDsKKworCWZvcmNlX3NpZ19pbmZvX2ZhdWx0KFNJR0JVUywgQlVTX0FEUkVSUiwgYWRkcmVzcywgZmF1bHRfbnVtLCB0c2spOworCXJldHVybiAwOworfQorCisjaWZuZGVmIF9fdGlsZWd4X18KKworLyogV2UgbXVzdCByZWxlYXNlIElDUyBiZWZvcmUgcGFuaWNraW5nIG9yIHdlIHdvbid0IGdldCBhbnl3aGVyZS4gKi8KKyNkZWZpbmUgaWNzX3BhbmljKGZtdCwgLi4uKSBkbyB7IFwKKwlfX2luc25fbXRzcHIoU1BSX0lOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCAwKTsgXAorCXBhbmljKGZtdCwgX19WQV9BUkdTX18pOyBcCit9IHdoaWxlICgwKQorCisvKgorICogV2hlbiB3ZSB0YWtlIGFuIElUTEIgb3IgRFRMQiBmYXVsdCBvciBhY2Nlc3MgdmlvbGF0aW9uIGluIHRoZQorICogc3VwZXJ2aXNvciB3aGlsZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBiaXQgaXMgc2V0LCB0aGUgaHlwZXJ2aXNvciBpcworICogcmVsdWN0YW50IHRvIHdyaXRlIG5ldyB2YWx1ZXMgaW50byB0aGUgRVhfQ09OVEVYVF8xX3ggcmVnaXN0ZXJzLAorICogc2luY2UgdGhhdCBtaWdodCBpbmRpY2F0ZSB3ZSBoYXZlIG5vdCB5ZXQgc3F1aXJyZWxlZCB0aGUgU1BSCisgKiBjb250ZW50cyBhd2F5IGFuZCBjYW4gdGh1cyBzYWZlbHkgdGFrZSBhIHJlY3Vyc2l2ZSBpbnRlcnJ1cHQuCisgKiBBY2NvcmRpbmdseSwgdGhlIGh5cGVydmlzb3IgcGFzc2VzIHVzIHRoZSBQQyB2aWEgU1lTVEVNX1NBVkVfMV8yLgorICovCitzdHJ1Y3QgaW50dmVjX3N0YXRlIGRvX3BhZ2VfZmF1bHRfaWNzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgZmF1bHRfbnVtLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGluZm8pCit7CisJdW5zaWduZWQgbG9uZyBwYyA9IGluZm8gJiB+MTsKKwlpbnQgd3JpdGUgPSBpbmZvICYgMTsKKwlwZ2RfdCAqcGdkID0gZ2V0X2N1cnJlbnRfcGdkKCk7CisKKwkvKiBSZXR2YWwgaXMgMSBhdCBmaXJzdCBzaW5jZSB3ZSB3aWxsIGhhbmRsZSB0aGUgZmF1bHQgZnVsbHkuICovCisJc3RydWN0IGludHZlY19zdGF0ZSBzdGF0ZSA9IHsKKwkJZG9fcGFnZV9mYXVsdCwgZmF1bHRfbnVtLCBhZGRyZXNzLCB3cml0ZSwgMQorCX07CisKKwkvKiBWYWxpZGF0ZSB0aGF0IHdlIGFyZSBwbGF1c2libHkgaW4gdGhlIHJpZ2h0IHJvdXRpbmUuICovCisJaWYgKChwYyAmIDB4NykgIT0gMCB8fCBwYyA8IFBBR0VfT0ZGU0VUIHx8CisJICAgIChmYXVsdF9udW0gIT0gSU5UX0RUTEJfTUlTUyAmJgorCSAgICAgZmF1bHRfbnVtICE9IElOVF9EVExCX0FDQ0VTUykpIHsKKwkJdW5zaWduZWQgbG9uZyBvbGRfcGMgPSByZWdzLT5wYzsKKwkJcmVncy0+cGMgPSBwYzsKKwkJaWNzX3BhbmljKCJCYWQgSUNTIHBhZ2UgZmF1bHQgYXJnczoiCisJCQkgICIgb2xkIFBDICUjbHgsIGZhdWx0ICVkLyVkIGF0ICUjbHhcbiIsCisJCQkgIG9sZF9wYywgZmF1bHRfbnVtLCB3cml0ZSwgYWRkcmVzcyk7CisJfQorCisJLyogV2UgbWlnaHQgYmUgZmF1bHRpbmcgb24gYSB2bWFsbG9jIHBhZ2UsIHNvIGNoZWNrIHRoYXQgZmlyc3QuICovCisJaWYgKGZhdWx0X251bSAhPSBJTlRfRFRMQl9BQ0NFU1MgJiYgdm1hbGxvY19mYXVsdChwZ2QsIGFkZHJlc3MpID49IDApCisJCXJldHVybiBzdGF0ZTsKKworCS8qCisJICogSWYgd2UgZmF1bHRlZCB3aXRoIElDUyBzZXQgaW4gc3lzX2NtcHhjaGcsIHdlIGFyZSBwcm92aWRpbmcKKwkgKiBhIHVzZXIgc3lzY2FsbCBzZXJ2aWNlIHRoYXQgc2hvdWxkIGdlbmVyYXRlIGEgc2lnbmFsIG9uCisJICogZmF1bHQuICBXZSBkaWRuJ3Qgc2V0IHVwIGEga2VybmVsIHN0YWNrIG9uIGluaXRpYWwgZW50cnkgdG8KKwkgKiBzeXNfY21weGNoZywgYnV0IGluc3RlYWQgaGFkIG9uZSBzZXQgdXAgYnkgdGhlIGZhdWx0LCB3aGljaAorCSAqIChiZWNhdXNlIHN5c19jbXB4Y2hnIG5ldmVyIHJlbGVhc2VzIElDUykgY2FtZSB0byB1cyB2aWEgdGhlCisJICogU1lTVEVNX1NBVkVfMV8yIG1lY2hhbmlzbSwgYW5kIHRodXMgRVhfQ09OVEVYVF8xX1swMV0gYXJlCisJICogc3RpbGwgcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsIHVzZXIgY29kZS4gIFdlIHJlbGVhc2UgdGhlCisJICogYXRvbWljIGxvY2sgYW5kIHJld3JpdGUgcHRfcmVncyBzbyB0aGF0IGl0IGFwcGVhcnMgdGhhdCB3ZQorCSAqIGNhbWUgZnJvbSB1c2VyLXNwYWNlIGRpcmVjdGx5LCBhbmQgYWZ0ZXIgd2UgZmluaXNoIHRoZQorCSAqIGZhdWx0IHdlJ2xsIGdvIGJhY2sgdG8gdXNlciBzcGFjZSBhbmQgcmUtaXNzdWUgdGhlIHN3aW50LgorCSAqIFRoaXMgd2F5IHRoZSBiYWNrdHJhY2UgaW5mb3JtYXRpb24gaXMgY29ycmVjdCBpZiB3ZSBuZWVkIHRvCisJICogZW1pdCBhIHN0YWNrIGR1bXAgYXQgYW55IHBvaW50IHdoaWxlIGhhbmRsaW5nIHRoaXMuCisJICoKKwkgKiBNdXN0IG1hdGNoIHJlZ2lzdGVyIHVzZSBpbiBzeXNfY21weGNoZygpLgorCSAqLworCWlmIChwYyA+PSAodW5zaWduZWQgbG9uZykgc3lzX2NtcHhjaGcgJiYKKwkgICAgcGMgPCAodW5zaWduZWQgbG9uZykgX19zeXNfY21weGNoZ19lbmQpIHsKKyNpZmRlZiBDT05GSUdfU01QCisJCS8qIERvbid0IHVubG9jayBiZWZvcmUgd2UgY291bGQgaGF2ZSBsb2NrZWQuICovCisJCWlmIChwYyA+PSAodW5zaWduZWQgbG9uZylfX3N5c19jbXB4Y2hnX2dyYWJfbG9jaykgeworCQkJaW50ICpsb2NrX3B0ciA9IChpbnQgKikocmVncy0+cmVnc1tBVE9NSUNfTE9DS19SRUddKTsKKwkJCV9fYXRvbWljX2ZhdWx0X3VubG9jayhsb2NrX3B0cik7CisJCX0KKyNlbmRpZgorCQlyZWdzLT5zcCA9IHJlZ3MtPnJlZ3NbMjddOworCX0KKworCS8qCisJICogV2UgY2FuIGFsc28gZmF1bHQgaW4gdGhlIGF0b21pYyBhc3NlbWJseSwgaW4gd2hpY2gKKwkgKiBjYXNlIHdlIHVzZSB0aGUgZXhjZXB0aW9uIHRhYmxlIHRvIGRvIHRoZSBmaXJzdC1sZXZlbCBmaXh1cC4KKwkgKiBXZSBtYXkgcmUtZml4dXAgYWdhaW4gaW4gdGhlIHJlYWwgZmF1bHQgaGFuZGxlciBpZiBpdAorCSAqIHR1cm5zIG91dCB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpcyBqdXN0IGJhZCwgYW5kIG5vdCwKKwkgKiBmb3IgZXhhbXBsZSwgbWlncmF0aW5nLgorCSAqLworCWVsc2UgaWYgKHBjID49ICh1bnNpZ25lZCBsb25nKSBfX3N0YXJ0X2F0b21pY19hc21fY29kZSAmJgorCQkgICBwYyA8ICh1bnNpZ25lZCBsb25nKSBfX2VuZF9hdG9taWNfYXNtX2NvZGUpIHsKKwkJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZml4dXA7CisjaWZkZWYgQ09ORklHX1NNUAorCQkvKiBVbmxvY2sgdGhlIGF0b21pYyBsb2NrLiAqLworCQlpbnQgKmxvY2tfcHRyID0gKGludCAqKShyZWdzLT5yZWdzW0FUT01JQ19MT0NLX1JFR10pOworCQlfX2F0b21pY19mYXVsdF91bmxvY2sobG9ja19wdHIpOworI2VuZGlmCisJCWZpeHVwID0gc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocGMpOworCQlpZiAoIWZpeHVwKQorCQkJaWNzX3BhbmljKCJJQ1MgYXRvbWljIGZhdWx0IG5vdCBpbiB0YWJsZToiCisJCQkJICAiIFBDICUjbHgsIGZhdWx0ICVkIiwgcGMsIGZhdWx0X251bSk7CisJCXJlZ3MtPnBjID0gZml4dXAtPmZpeHVwOworCQlyZWdzLT5leDEgPSBQTF9JQ1NfRVgxKEtFUk5FTF9QTCwgMCk7CisJfQorCisJLyoKKwkgKiBOT1RFOiB0aGUgb25lIG90aGVyIHR5cGUgb2YgYWNjZXNzIHRoYXQgbWlnaHQgYnJpbmcgdXMgaGVyZQorCSAqIGFyZSB0aGUgbWVtb3J5IG9wcyBpbiBfX3Ruc19hdG9taWNfYWNxdWlyZS9fX3Ruc19hdG9taWNfcmVsZWFzZSwKKwkgKiBidXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBzcGVjaWFsbHkgZm9yIHRoZW0gc2luY2Ugd2UgY2FuCisJICogYWx3YXlzIHNhZmVseSByZXR1cm4gdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGZhdWx0IGFuZCByZXRyeSwKKwkgKiBzaW5jZSBubyBzZXBhcmF0ZSBhdG9taWMgbG9ja3MgYXJlIGludm9sdmVkLgorCSAqLworCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIHJlbGVhc2VkIHRoZSBhdG9taWMgbG9jayAoaWYgbmVjZXNzYXJ5KSwKKwkgKiBpdCdzIHNhZmUgdG8gc3BpbiBpZiB0aGUgUFRFIHRoYXQgY2F1c2VkIHRoZSBmYXVsdCB3YXMgbWlncmF0aW5nLgorCSAqLworCWlmIChmYXVsdF9udW0gPT0gSU5UX0RUTEJfQUNDRVNTKQorCQl3cml0ZSA9IDE7CisJaWYgKGhhbmRsZV9taWdyYXRpbmdfcHRlKHBnZCwgZmF1bHRfbnVtLCBhZGRyZXNzLCAxLCB3cml0ZSkpCisJCXJldHVybiBzdGF0ZTsKKworCS8qIFJldHVybiB6ZXJvIHNvIHRoYXQgd2UgY29udGludWUgb24gd2l0aCBub3JtYWwgZmF1bHQgaGFuZGxpbmcuICovCisJc3RhdGUucmV0dmFsID0gMDsKKwlyZXR1cm4gc3RhdGU7Cit9CisKKyNlbmRpZiAvKiAhX190aWxlZ3hfXyAqLworCisvKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgcGFnZSBmYXVsdHMuICBJdCBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzLCBhbmQgdGhlCisgKiBwcm9ibGVtLCBhbmQgdGhlbiBwYXNzZXMgaXQgaGFuZGxlX3BhZ2VfZmF1bHQoKSBmb3Igbm9ybWFsIERUTEIgYW5kCisgKiBJVExCIGlzc3VlcywgYW5kIGZvciBETUEgb3IgU04gcHJvY2Vzc29yIGZhdWx0cyB3aGVuIHdlIGFyZSBpbiB1c2VyCisgKiBzcGFjZS4gIEZvciB0aGUgbGF0dGVyLCBpZiB3ZSdyZSBpbiBrZXJuZWwgbW9kZSwgd2UganVzdCBzYXZlIHRoZQorICogaW50ZXJydXB0IGF3YXkgYXBwcm9wcmlhdGVseSBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAgV2UgY2FuJ3QgZG8KKyAqIHBhZ2UgZmF1bHRzIGZvciB1c2VyIGNvZGUgd2hpbGUgaW4ga2VybmVsIG1vZGUuCisgKi8KK3ZvaWQgZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZhdWx0X251bSwKKwkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHdyaXRlKQoreworCWludCBpc19wYWdlX2ZhdWx0OworCisJLyogVGhpcyBjYXNlIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBieSBkb19wYWdlX2ZhdWx0X2ljcygpLiAqLworCUJVR19PTih3cml0ZSAmIH4xKTsKKworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwkvKgorCSAqIElmIGl0J3MgYSBETUEgZmF1bHQsIHN1c3BlbmQgdGhlIHRyYW5zZmVyIHdoaWxlIHdlJ3JlCisJICogaGFuZGxpbmcgdGhlIG1pc3M7IHdlJ2xsIHJlc3RhcnQgYWZ0ZXIgaXQncyBoYW5kbGVkLiAgSWYgd2UKKwkgKiBkb24ndCBzdXNwZW5kLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBwcm9jZXNzIGNvdWxkIHN3YXAKKwkgKiBvdXQgYW5kIGJhY2sgaW4sIGFuZCByZXN0YXJ0IHRoZSBlbmdpbmUgc2luY2UgdGhlIERNQSBpcworCSAqIHN0aWxsICdydW5uaW5nJy4KKwkgKi8KKwlpZiAoZmF1bHRfbnVtID09IElOVF9ETUFUTEJfTUlTUyB8fAorCSAgICBmYXVsdF9udW0gPT0gSU5UX0RNQVRMQl9BQ0NFU1MgfHwKKwkgICAgZmF1bHRfbnVtID09IElOVF9ETUFUTEJfTUlTU19EV05DTCB8fAorCSAgICBmYXVsdF9udW0gPT0gSU5UX0RNQVRMQl9BQ0NFU1NfRFdOQ0wpIHsKKwkJX19pbnNuX210c3ByKFNQUl9ETUFfQ1RSLCBTUFJfRE1BX0NUUl9fU1VTUEVORF9NQVNLKTsKKwkJd2hpbGUgKF9faW5zbl9tZnNwcihTUFJfRE1BX1VTRVJfU1RBVFVTKSAmCisJCSAgICAgICBTUFJfRE1BX1NUQVRVU19fQlVTWV9NQVNLKQorCQkJOworCX0KKyNlbmRpZgorCisJLyogVmFsaWRhdGUgZmF1bHQgbnVtIGFuZCBkZWNpZGUgaWYgdGhpcyBpcyBhIGZpcnN0LXRpbWUgcGFnZSBmYXVsdC4gKi8KKwlzd2l0Y2ggKGZhdWx0X251bSkgeworCWNhc2UgSU5UX0lUTEJfTUlTUzoKKwljYXNlIElOVF9EVExCX01JU1M6CisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCWNhc2UgSU5UX0RNQVRMQl9NSVNTOgorCWNhc2UgSU5UX0RNQVRMQl9NSVNTX0RXTkNMOgorI2VuZGlmCisjaWYgQ0hJUF9IQVNfU05fUFJPQygpCisJY2FzZSBJTlRfU05JVExCX01JU1M6CisJY2FzZSBJTlRfU05JVExCX01JU1NfRFdOQ0w6CisjZW5kaWYKKwkJaXNfcGFnZV9mYXVsdCA9IDE7CisJCWJyZWFrOworCisJY2FzZSBJTlRfRFRMQl9BQ0NFU1M6CisjaWYgQ0hJUF9IQVNfVElMRV9ETUEoKQorCWNhc2UgSU5UX0RNQVRMQl9BQ0NFU1M6CisJY2FzZSBJTlRfRE1BVExCX0FDQ0VTU19EV05DTDoKKyNlbmRpZgorCQlpc19wYWdlX2ZhdWx0ID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwYW5pYygiQmFkIGZhdWx0IG51bWJlciAlZCBpbiBkb19wYWdlX2ZhdWx0IiwgZmF1bHRfbnVtKTsKKwl9CisKKwlpZiAoRVgxX1BMKHJlZ3MtPmV4MSkgIT0gVVNFUl9QTCkgeworCQlzdHJ1Y3QgYXN5bmNfdGxiICphc3luYzsKKwkJc3dpdGNoIChmYXVsdF9udW0pIHsKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpCisJCWNhc2UgSU5UX0RNQVRMQl9NSVNTOgorCQljYXNlIElOVF9ETUFUTEJfQUNDRVNTOgorCQljYXNlIElOVF9ETUFUTEJfTUlTU19EV05DTDoKKwkJY2FzZSBJTlRfRE1BVExCX0FDQ0VTU19EV05DTDoKKwkJCWFzeW5jID0gJmN1cnJlbnQtPnRocmVhZC5kbWFfYXN5bmNfdGxiOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBDSElQX0hBU19TTl9QUk9DKCkKKwkJY2FzZSBJTlRfU05JVExCX01JU1M6CisJCWNhc2UgSU5UX1NOSVRMQl9NSVNTX0RXTkNMOgorCQkJYXN5bmMgPSAmY3VycmVudC0+dGhyZWFkLnNuX2FzeW5jX3RsYjsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlhc3luYyA9IE5VTEw7CisJCX0KKwkJaWYgKGFzeW5jKSB7CisKKwkJCS8qCisJCQkgKiBObyB2bWFsbG9jIGNoZWNrIHJlcXVpcmVkLCBzbyB3ZSBjYW4gYWxsb3cKKwkJCSAqIGludGVycnVwdHMgaW1tZWRpYXRlbHkgYXQgdGhpcyBwb2ludC4KKwkJCSAqLworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCQlzZXRfdGhyZWFkX2ZsYWcoVElGX0FTWU5DX1RMQik7CisJCQlpZiAoYXN5bmMtPmZhdWx0X251bSAhPSAwKSB7CisJCQkJcGFuaWMoIlNlY29uZCBhc3luYyBmYXVsdCAlZDsiCisJCQkJICAgICAgIiBvbGQgZmF1bHQgd2FzICVkICglI2x4LyVsZCkiLAorCQkJCSAgICAgIGZhdWx0X251bSwgYXN5bmMtPmZhdWx0X251bSwKKwkJCQkgICAgICBhZGRyZXNzLCB3cml0ZSk7CisJCQl9CisJCQlCVUdfT04oZmF1bHRfbnVtID09IDApOworCQkJYXN5bmMtPmZhdWx0X251bSA9IGZhdWx0X251bTsKKwkJCWFzeW5jLT5pc19mYXVsdCA9IGlzX3BhZ2VfZmF1bHQ7CisJCQlhc3luYy0+aXNfd3JpdGUgPSB3cml0ZTsKKwkJCWFzeW5jLT5hZGRyZXNzID0gYWRkcmVzczsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWhhbmRsZV9wYWdlX2ZhdWx0KHJlZ3MsIGZhdWx0X251bSwgaXNfcGFnZV9mYXVsdCwgYWRkcmVzcywgd3JpdGUpOworfQorCisKKyNpZiBDSElQX0hBU19USUxFX0RNQSgpIHx8IENISVBfSEFTX1NOX1BST0MoKQorLyoKKyAqIENoZWNrIGFuIGFzeW5jX3RsYiBzdHJ1Y3R1cmUgdG8gc2VlIGlmIGEgZGVmZXJyZWQgZmF1bHQgaXMgd2FpdGluZywKKyAqIGFuZCBpZiBzbyBwYXNzIGl0IHRvIHRoZSBwYWdlLWZhdWx0IGNvZGUuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9hc3luY19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCSAgICBzdHJ1Y3QgYXN5bmNfdGxiICphc3luYykKK3sKKwlpZiAoYXN5bmMtPmZhdWx0X251bSkgeworCQkvKgorCQkgKiBDbGVhciBhc3luYy0+ZmF1bHRfbnVtIGJlZm9yZSBjYWxsaW5nIHRoZSBwYWdlLWZhdWx0CisJCSAqIGhhbmRsZXIgc28gdGhhdCBpZiB3ZSByZS1pbnRlcnJ1cHQgYmVmb3JlIHJldHVybmluZworCQkgKiBmcm9tIHRoZSBmdW5jdGlvbiB3ZSBoYXZlIHNvbWV3aGVyZSB0byBwdXQgdGhlCisJCSAqIGluZm9ybWF0aW9uIGZyb20gdGhlIG5ldyBpbnRlcnJ1cHQuCisJCSAqLworCQlpbnQgZmF1bHRfbnVtID0gYXN5bmMtPmZhdWx0X251bTsKKwkJYXN5bmMtPmZhdWx0X251bSA9IDA7CisJCWhhbmRsZV9wYWdlX2ZhdWx0KHJlZ3MsIGZhdWx0X251bSwgYXN5bmMtPmlzX2ZhdWx0LAorCQkJCSAgYXN5bmMtPmFkZHJlc3MsIGFzeW5jLT5pc193cml0ZSk7CisJfQorfQorI2VuZGlmIC8qIENISVBfSEFTX1RJTEVfRE1BKCkgfHwgQ0hJUF9IQVNfU05fUFJPQygpICovCisKKworLyoKKyAqIFRoaXMgcm91dGluZSBlZmZlY3RpdmVseSByZS1pc3N1ZXMgYXN5bmNocm9ub3VzIHBhZ2UgZmF1bHRzCisgKiB3aGVuIHdlIGFyZSByZXR1cm5pbmcgdG8gdXNlciBzcGFjZS4KKyAqLwordm9pZCBkb19hc3luY19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qCisJICogQ2xlYXIgdGhyZWFkIGZsYWcgZWFybHkuICBJZiB3ZSByZS1pbnRlcnJ1cHQgd2hpbGUgcHJvY2Vzc2luZworCSAqIGNvZGUgaGVyZSwgd2Ugd2lsbCByZXNldCBpdCBhbmQgcmVjYWxsIHRoaXMgcm91dGluZSBiZWZvcmUKKwkgKiByZXR1cm5pbmcgdG8gdXNlciBzcGFjZS4KKwkgKi8KKwljbGVhcl90aHJlYWRfZmxhZyhUSUZfQVNZTkNfVExCKTsKKworI2lmIENISVBfSEFTX1RJTEVfRE1BKCkKKwloYW5kbGVfYXN5bmNfcGFnZV9mYXVsdChyZWdzLCAmY3VycmVudC0+dGhyZWFkLmRtYV9hc3luY190bGIpOworI2VuZGlmCisjaWYgQ0hJUF9IQVNfU05fUFJPQygpCisJaGFuZGxlX2FzeW5jX3BhZ2VfZmF1bHQocmVncywgJmN1cnJlbnQtPnRocmVhZC5zbl9hc3luY190bGIpOworI2VuZGlmCit9CisKK3ZvaWQgdm1hbGxvY19zeW5jX2FsbCh2b2lkKQoreworI2lmZGVmIF9fdGlsZWd4X18KKwkvKiBDdXJyZW50bHkgYWxsIEwxIGtlcm5lbCBwbWQncyBhcmUgc3RhdGljIGFuZCBzaGFyZWQuICovCisJQlVHX09OKHBnZF9pbmRleChWTUFMTE9DX0VORCkgIT0gcGdkX2luZGV4KFZNQUxMT0NfU1RBUlQpKTsKKyNlbHNlCisJLyoKKwkgKiBOb3RlIHRoYXQgcmFjZXMgaW4gdGhlIHVwZGF0ZXMgb2YgaW5zeW5jIGFuZCBzdGFydCBhcmVuJ3QKKwkgKiBwcm9ibGVtYXRpYzogaW5zeW5jIGNhbiBvbmx5IGdldCBzZXQgYml0cyBhZGRlZCwgYW5kIHVwZGF0ZXMgdG8KKwkgKiBzdGFydCBhcmUgb25seSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgKHdpdGhvdXQgYWZmZWN0aW5nIGNvcnJlY3RuZXNzCisJICogaWYgdW5kb25lKS4KKwkgKi8KKwlzdGF0aWMgREVDTEFSRV9CSVRNQVAoaW5zeW5jLCBQVFJTX1BFUl9QR0QpOworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEFHRV9PRkZTRVQ7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCisJQlVJTERfQlVHX09OKFBBR0VfT0ZGU0VUICYgflBHRElSX01BU0spOworCWZvciAoYWRkcmVzcyA9IHN0YXJ0OyBhZGRyZXNzID49IFBBR0VfT0ZGU0VUOyBhZGRyZXNzICs9IFBHRElSX1NJWkUpIHsKKwkJaWYgKCF0ZXN0X2JpdChwZ2RfaW5kZXgoYWRkcmVzcyksIGluc3luYykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOworCQkJbGlzdF9mb3JfZWFjaChwb3MsICZwZ2RfbGlzdCkKKwkJCQlpZiAoIXZtYWxsb2Nfc3luY19vbmUobGlzdF90b19wZ2QocG9zKSwKKwkJCQkJCQkJYWRkcmVzcykpIHsKKwkJCQkJLyogTXVzdCBiZSBhdCBmaXJzdCBlbnRyeSBpbiBsaXN0LiAqLworCQkJCQlCVUdfT04ocG9zICE9IHBnZF9saXN0Lm5leHQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZ2RfbG9jaywgZmxhZ3MpOworCQkJaWYgKHBvcyAhPSBwZ2RfbGlzdC5uZXh0KQorCQkJCXNldF9iaXQocGdkX2luZGV4KGFkZHJlc3MpLCBpbnN5bmMpOworCQl9CisJCWlmIChhZGRyZXNzID09IHN0YXJ0ICYmIHRlc3RfYml0KHBnZF9pbmRleChhZGRyZXNzKSwgaW5zeW5jKSkKKwkJCXN0YXJ0ID0gYWRkcmVzcyArIFBHRElSX1NJWkU7CisJfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaGlnaG1lbS5jIGIvYXJjaC90aWxlL21tL2hpZ2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjFjZGZmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL21tL2hpZ2htZW0uYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxhc20vaG9tZWNhY2hlLmg+CisKKyNkZWZpbmUga21hcF9nZXRfcHRlKHZhZGRyKSBcCisJcHRlX29mZnNldF9rZXJuZWwocG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZF9vZmZzZXRfayh2YWRkciksICh2YWRkcikpLFwKKwkJKHZhZGRyKSksICh2YWRkcikpCisKKwordm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl2b2lkICprdmE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlwdGVfdCAqcHRlcDsKKworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlrdmEgPSBrbWFwX2hpZ2gocGFnZSk7CisKKwkvKgorCSAqIFJld3JpdGUgdGhlIFBURSB1bmRlciB0aGUgbG9jay4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBwYWdlCisJICogaXMgbm90IGN1cnJlbnRseSBtaWdyYXRpbmcuCisJICovCisJcHRlcCA9IGttYXBfZ2V0X3B0ZSgodW5zaWduZWQgbG9uZylrdmEpOworCWZsYWdzID0gaG9tZWNhY2hlX2twdGVfbG9jaygpOworCXNldF9wdGVfYXQoJmluaXRfbW0sIGt2YSwgcHRlcCwgbWtfcHRlKHBhZ2UsIHBhZ2VfdG9fa3BncHJvdChwYWdlKSkpOworCWhvbWVjYWNoZV9rcHRlX3VubG9jayhmbGFncyk7CisKKwlyZXR1cm4ga3ZhOworfQorRVhQT1JUX1NZTUJPTChrbWFwKTsKKwordm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGluX2ludGVycnVwdCgpKQorCQlCVUcoKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm47CisJa3VubWFwX2hpZ2gocGFnZSk7Cit9CitFWFBPUlRfU1lNQk9MKGt1bm1hcCk7CisKK3N0YXRpYyB2b2lkIGRlYnVnX2ttYXBfYXRvbWljX3Byb3QoZW51bSBrbV90eXBlIHR5cGUpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KKwlzdGF0aWMgdW5zaWduZWQgd2Fybl9jb3VudCA9IDEwOworCisJaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPT0gMCkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShpbl9pbnRlcnJ1cHQoKSkpIHsKKwkJaWYgKGluX2lycSgpKSB7CisJCQlpZiAodHlwZSAhPSBLTV9JUlEwICYmIHR5cGUgIT0gS01fSVJRMSAmJgorCQkJICAgIHR5cGUgIT0gS01fQklPX1NSQ19JUlEgJiYKKwkJCSAgICAvKiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmICovCisJCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJd2Fybl9jb3VudC0tOworCQkJfQorCQl9IGVsc2UgaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsJLyogc29mdGlycSAqLworCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NPRlRJUlEwICYmIHR5cGUgIT0gS01fU09GVElSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NLQl9TVU5SUENfREFUQSAmJgorCQkJICAgIHR5cGUgIT0gS01fU0tCX0RBVEFfU09GVElSUSAmJgorCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCXdhcm5fY291bnQtLTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh0eXBlID09IEtNX0lSUTAgfHwgdHlwZSA9PSBLTV9JUlExIHx8IHR5cGUgPT0gS01fQk9VTkNFX1JFQUQgfHwKKwkgICAgdHlwZSA9PSBLTV9CSU9fU1JDX0lSUSAvKiB8fCB0eXBlID09IEtNX0JJT19EU1RfSVJRICovKSB7CisJCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CisJCQlXQVJOX09OKDEpOworCQkJd2Fybl9jb3VudC0tOworCQl9CisJfSBlbHNlIGlmICh0eXBlID09IEtNX1NPRlRJUlEwIHx8IHR5cGUgPT0gS01fU09GVElSUTEpIHsKKwkJaWYgKGlycV9jb3VudCgpID09IDAgJiYgIWlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXdhcm5fY291bnQtLTsKKwkJfQorCX0KKyNlbmRpZgorfQorCisvKgorICogRGVzY3JpYmUgYSBzaW5nbGUgYXRvbWljIG1hcHBpbmcgb2YgYSBwYWdlIG9uIGEgZ2l2ZW4gY3B1IGF0IGEKKyAqIGdpdmVuIGFkZHJlc3MsIGFuZCBhbGxvdyBpdCB0byBiZSBsaW5rZWQgaW50byBhIGxpc3QuCisgKi8KK3N0cnVjdCBhdG9taWNfbWFwcGVkX3BhZ2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGxvbmcgdmE7Cit9OworCitzdGF0aWMgc3BpbmxvY2tfdCBhbXBfbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZhbXBfbG9jayk7CitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhbXBfbGlzdCA9IExJU1RfSEVBRF9JTklUKGFtcF9saXN0KTsKKworLyoKKyAqIENvbWJpbmluZyB0aGlzIHN0cnVjdHVyZSB3aXRoIGEgcGVyLWNwdSBkZWNsYXJhdGlvbiBsZXRzIHVzIGdpdmUKKyAqIGVhY2ggY3B1IGFuIGF0b21pY19tYXBwZWRfcGFnZSBzdHJ1Y3R1cmUgcGVyIHR5cGUuCisgKi8KK3N0cnVjdCBrbWFwX2FtcHMgeworCXN0cnVjdCBhdG9taWNfbWFwcGVkX3BhZ2UgcGVyX3R5cGVbS01fVFlQRV9OUl07Cit9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrbWFwX2FtcHMsIGFtcHMpOworCisvKgorICogQWRkIGEgcGFnZSBhbmQgdmEsIG9uIHRoaXMgY3B1LCB0byB0aGUgbGlzdCBvZiBrbWFwX2F0b21pYyBwYWdlcywKKyAqIGFuZCB3cml0ZSB0aGUgbmV3IHB0ZSB0byBtZW1vcnkuICBXcml0aW5nIHRoZSBuZXcgUFRFIHVuZGVyIHRoZQorICogbG9jayBndWFyYW50ZWVzIHRoYXQgaXQgaXMgZWl0aGVyIG9uIHRoZSBsaXN0IGJlZm9yZSBtaWdyYXRpb24gc3RhcnRzCisgKiAoaWYgd2Ugd29uIHRoZSByYWNlKSwgb3Igc2V0X3B0ZSgpIHNldHMgdGhlIG1pZ3JhdGluZyBiaXQgaW4gdGhlIFBURQorICogKGlmIHdlIGxvc3QgdGhlIHJhY2UpLiAgQW5kIGRvaW5nIGl0IHVuZGVyIHRoZSBsb2NrIGd1YXJhbnRlZXMKKyAqIHRoYXQgd2hlbiBrbWFwX2F0b21pY19maXhfb25lX3B0ZSgpIGNvbWVzIGFsb25nLCBpdCBmaW5kcyBhIHZhbGlkCisgKiBQVEUgaW4gbWVtb3J5LCBpZmYgdGhlIG1hcHBpbmcgaXMgc3RpbGwgb24gdGhlIGFtcF9saXN0LgorICoKKyAqIEZpbmFsbHksIGRvaW5nIGl0IHVuZGVyIHRoZSBsb2NrIGxldHMgdXMgc2FmZWx5IGV4YW1pbmUgdGhlIHBhZ2UKKyAqIHRvIHNlZSBpZiBpdCBpcyBpbW11dGFibGUgb3Igbm90LCBmb3IgdGhlIGdlbmVyaWMga21hcF9hdG9taWMoKSBjYXNlLgorICogSWYgd2UgZXhhbWluZSBpdCBlYXJsaWVyIHdlIGFyZSBleHBvc2VkIHRvIGEgcmFjZSB3aGVyZSBpdCBsb29rcworICogd3JpdGFibGUgZWFybGllciwgYnV0IGJlY29tZXMgaW1tdXRhYmxlIGJlZm9yZSB3ZSB3cml0ZSB0aGUgUFRFLgorICovCitzdGF0aWMgdm9pZCBrbWFwX2F0b21pY19yZWdpc3RlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgdmEsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXRvbWljX21hcHBlZF9wYWdlICphbXA7CisKKwlmbGFncyA9IGhvbWVjYWNoZV9rcHRlX2xvY2soKTsKKwlzcGluX2xvY2soJmFtcF9sb2NrKTsKKworCS8qIFdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCwgbm93IGZpbGwgaW4gdGhlIHBlci1jcHUgaW5mby4gKi8KKwlhbXAgPSAmX19nZXRfY3B1X3ZhcihhbXBzKS5wZXJfdHlwZVt0eXBlXTsKKwlhbXAtPnBhZ2UgPSBwYWdlOworCWFtcC0+Y3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWFtcC0+dmEgPSB2YTsKKworCS8qIEZvciBnZW5lcmljIGttYXBfYXRvbWljKCksIGNob29zZSB0aGUgUFRFIHdyaXRhYmlsaXR5IG5vdy4gKi8KKwlpZiAoIXB0ZV9yZWFkKHB0ZXZhbCkpCisJCXB0ZXZhbCA9IG1rX3B0ZShwYWdlLCBwYWdlX3RvX2twZ3Byb3QocGFnZSkpOworCisJbGlzdF9hZGQoJmFtcC0+bGlzdCwgJmFtcF9saXN0KTsKKwlzZXRfcHRlKHB0ZXAsIHB0ZXZhbCk7CisJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7CisKKwlzcGluX3VubG9jaygmYW1wX2xvY2spOworCWhvbWVjYWNoZV9rcHRlX3VubG9jayhmbGFncyk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSBwYWdlIGFuZCB2YSwgb24gdGhpcyBjcHUsIGZyb20gdGhlIGxpc3Qgb2Yga21hcF9hdG9taWMgcGFnZXMuCisgKiBMaW5lYXItdGltZSBzZWFyY2gsIGJ1dCB3ZSBjb3VudCBvbiB0aGUgbGlzdHMgYmVpbmcgc2hvcnQuCisgKiBXZSBkb24ndCBuZWVkIHRvIGFkanVzdCB0aGUgUFRFIHVuZGVyIHRoZSBsb2NrIChhcyBvcHBvc2VkIHRvIHRoZQorICoga21hcF9hdG9taWNfcmVnaXN0ZXIoKSBjYXNlKSwgc2luY2Ugd2UncmUganVzdCB1bmNvbmRpdGlvbmFsbHkKKyAqIHplcm9pbmcgdGhlIFBURSBhZnRlciBpdCdzIG9mZiB0aGUgbGlzdC4KKyAqLworc3RhdGljIHZvaWQga21hcF9hdG9taWNfdW5yZWdpc3RlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhdG9taWNfbWFwcGVkX3BhZ2UgKmFtcDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhbXBfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYW1wLCAmYW1wX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGFtcC0+cGFnZSA9PSBwYWdlICYmIGFtcC0+Y3B1ID09IGNwdSAmJiBhbXAtPnZhID09IHZhKQorCQkJYnJlYWs7CisJfQorCUJVR19PTigmYW1wLT5saXN0ID09ICZhbXBfbGlzdCk7CisJbGlzdF9kZWwoJmFtcC0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wX2xvY2ssIGZsYWdzKTsKK30KKworLyogSGVscGVyIHJvdXRpbmUgZm9yIGttYXBfYXRvbWljX2ZpeF9rcHRlKCksIGJlbG93LiAqLworc3RhdGljIHZvaWQga21hcF9hdG9taWNfZml4X29uZV9rcHRlKHN0cnVjdCBhdG9taWNfbWFwcGVkX3BhZ2UgKmFtcCwKKwkJCQkgICAgIGludCBmaW5pc2hlZCkKK3sKKwlwdGVfdCAqcHRlcCA9IGttYXBfZ2V0X3B0ZShhbXAtPnZhKTsKKwlpZiAoIWZpbmlzaGVkKSB7CisJCXNldF9wdGUocHRlcCwgcHRlX21rbWlncmF0ZSgqcHRlcCkpOworCQlmbHVzaF9yZW1vdGUoMCwgMCwgTlVMTCwgYW1wLT52YSwgUEFHRV9TSVpFLCBQQUdFX1NJWkUsCisJCQkgICAgIGNwdW1hc2tfb2YoYW1wLT5jcHUpLCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBSZXdyaXRlIGEgZGVmYXVsdCBrZXJuZWwgUFRFIGZvciB0aGlzIHBhZ2UuCisJCSAqIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBzZXRfcHRlKCkgd3JpdGVzIHRoZQorCQkgKiBwcmVzZW50K21pZ3JhdGluZyBiaXRzIGxhc3QuCisJCSAqLworCQlwdGVfdCBwdGUgPSBta19wdGUoYW1wLT5wYWdlLCBwYWdlX3RvX2twZ3Byb3QoYW1wLT5wYWdlKSk7CisJCXNldF9wdGUocHRlcCwgcHRlKTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGhvbWVjYWNoZV9maXhfa3B0ZSgpOyBzZWUKKyAqIGl0cyBjb21tZW50cyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgImZpbmlzaGVkIiBhcmd1bWVudCBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBob2xkIHRoZSBsb2NrIHdoaWxlIGRvaW5nIHRoZSByZW1vdGUgZmx1c2hlcywgd2hpY2gKKyAqIHdpbGwgc3RhbGwgYW55IHVucmVsYXRlZCBjcHVzIHRyeWluZyB0byBkbyBrbWFwX2F0b21pYyBvcGVyYXRpb25zLgorICogV2UgY291bGQganVzdCB1cGRhdGUgdGhlIFBURXMgdW5kZXIgdGhlIGxvY2ssIGFuZCBzYXZlIGF3YXkgY29waWVzCisgKiBvZiB0aGUgc3RydWN0cyAob3IganVzdCB0aGUgdmErY3B1KSwgdGhlbiBmbHVzaCB0aGVtIGFmdGVyIHdlCisgKiByZWxlYXNlIHRoZSBsb2NrLCBidXQgaXQgc2VlbXMgZWFzaWVyIGp1c3QgdG8gZG8gaXQgYWxsIHVuZGVyIHRoZSBsb2NrLgorICovCit2b2lkIGttYXBfYXRvbWljX2ZpeF9rcHRlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZmluaXNoZWQpCit7CisJc3RydWN0IGF0b21pY19tYXBwZWRfcGFnZSAqYW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhbXAsICZhbXBfbGlzdCwgbGlzdCkgeworCQlpZiAoYW1wLT5wYWdlID09IHBhZ2UpCisJCQlrbWFwX2F0b21pY19maXhfb25lX2twdGUoYW1wLCBmaW5pc2hlZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBrbWFwX2F0b21pYy9rdW5tYXBfYXRvbWljIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4ga21hcC9rdW5tYXAKKyAqIGJlY2F1c2UgdGhlIGttYXAgY29kZSBtdXN0IHBlcmZvcm0gYSBnbG9iYWwgVExCIGludmFsaWRhdGlvbiB3aGVuCisgKiB0aGUga21hcCBwb29sIHdyYXBzLgorICoKKyAqIE5vdGUgdGhhdCB0aGV5IG1heSBiZSBzbG93ZXIgdGhhbiBvbiB4ODYgKGV0Yy4pIGJlY2F1c2UgdW5saWtlIG9uCisgKiB0aG9zZSBwbGF0Zm9ybXMsIHdlIGRvIGhhdmUgdG8gdGFrZSBhIGdsb2JhbCBsb2NrIHRvIG1hcCBhbmQgdW5tYXAKKyAqIHBhZ2VzIG9uIFRpbGUgKHNlZSBhYm92ZSkuCisgKgorICogV2hlbiBob2xkaW5nIGFuIGF0b21pYyBrbWFwIGlzIGlzIG5vdCBsZWdhbCB0byBzbGVlcCwgc28gYXRvbWljCisgKiBrbWFwcyBhcmUgYXBwcm9wcmlhdGUgZm9yIHNob3J0LCB0aWdodCBjb2RlIHBhdGhzIG9ubHkuCisgKi8KK3ZvaWQgKmttYXBfYXRvbWljX3Byb3Qoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KQoreworCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCXB0ZV90ICpwdGU7CisKKwkvKiBldmVuICFDT05GSUdfUFJFRU1QVCBuZWVkcyB0aGlzLCBmb3IgaW5fYXRvbWljIGluIGRvX3BhZ2VfZmF1bHQgKi8KKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCisJLyogQXZvaWQgaWNhY2hlIGZsdXNoZXMgYnkgZGlzYWxsb3dpbmcgYXRvbWljIGV4ZWN1dGFibGUgbWFwcGluZ3MuICovCisJQlVHX09OKHB0ZV9leGVjKHByb3QpKTsKKworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwlkZWJ1Z19rbWFwX2F0b21pY19wcm90KHR5cGUpOworCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOworCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CisJcHRlID0ga21hcF9nZXRfcHRlKHZhZGRyKTsKKwlCVUdfT04oIXB0ZV9ub25lKCpwdGUpKTsKKworCS8qIFJlZ2lzdGVyIHRoYXQgdGhpcyBwYWdlIGlzIG1hcHBlZCBhdG9taWNhbGx5IG9uIHRoaXMgY3B1LiAqLworCWttYXBfYXRvbWljX3JlZ2lzdGVyKHBhZ2UsIHR5cGUsIHZhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7CisKKwlyZXR1cm4gKHZvaWQgKil2YWRkcjsKK30KK0VYUE9SVF9TWU1CT0woa21hcF9hdG9taWNfcHJvdCk7CisKK3ZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKwkvKiBQQUdFX05PTkUgaXMgYSBtYWdpYyB2YWx1ZSB0aGF0IHRlbGxzIHVzIHRvIGNoZWNrIGltbXV0YWJpbGl0eS4gKi8KKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdChwYWdlLCB0eXBlLCBQQUdFX05PTkUpOworfQorRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CisKK3ZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOworCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCA9IHR5cGUgKyBLTV9UWVBFX05SKnNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogRm9yY2Ugb3RoZXIgbWFwcGluZ3MgdG8gT29wcyBpZiB0aGV5IHRyeSB0byBhY2Nlc3MgdGhpcyBwdGUgd2l0aG91dAorCSAqIGZpcnN0IHJlbWFwcGluZyBpdC4gIEtlZXBpbmcgc3RhbGUgbWFwcGluZ3MgYXJvdW5kIGlzIGEgYmFkIGlkZWEuCisJICovCisJaWYgKHZhZGRyID09IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4raWR4KSkgeworCQlwdGVfdCAqcHRlID0ga21hcF9nZXRfcHRlKHZhZGRyKTsKKwkJcHRlX3QgcHRldmFsID0gKnB0ZTsKKwkJQlVHX09OKCFwdGVfcHJlc2VudChwdGV2YWwpICYmICFwdGVfbWlncmF0aW5nKHB0ZXZhbCkpOworCQlrbWFwX2F0b21pY191bnJlZ2lzdGVyKHB0ZV9wYWdlKHB0ZXZhbCksIHZhZGRyKTsKKwkJa3B0ZV9jbGVhcl9mbHVzaChwdGUsIHZhZGRyKTsKKwl9IGVsc2UgeworCQkvKiBNdXN0IGJlIGEgbG93bWVtIHBhZ2UgKi8KKwkJQlVHX09OKHZhZGRyIDwgUEFHRV9PRkZTRVQpOworCQlCVUdfT04odmFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkpOworCX0KKworCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOworCXBhZ2VmYXVsdF9lbmFibGUoKTsKK30KK0VYUE9SVF9TWU1CT0woa3VubWFwX2F0b21pYyk7CisKKy8qCisgKiBUaGlzIEFQSSBpcyBzdXBwb3NlZCB0byBhbGxvdyB1cyB0byBtYXAgbWVtb3J5IHdpdGhvdXQgYSAic3RydWN0IHBhZ2UiLgorICogQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgdGhpcywgdGhvdWdoIHRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorICovCit2b2lkICprbWFwX2F0b21pY19wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlKQoreworCXJldHVybiBrbWFwX2F0b21pYyhwZm5fdG9fcGFnZShwZm4pLCB0eXBlKTsKK30KK3ZvaWQgKmttYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdChwZm5fdG9fcGFnZShwZm4pLCB0eXBlLCBwcm90KTsKK30KKworc3RydWN0IHBhZ2UgKmttYXBfYXRvbWljX3RvX3BhZ2Uodm9pZCAqcHRyKQoreworCXB0ZV90ICpwdGU7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKKworCWlmICh2YWRkciA8IEZJWEFERFJfU1RBUlQpCisJCXJldHVybiB2aXJ0X3RvX3BhZ2UocHRyKTsKKworCXB0ZSA9IGttYXBfZ2V0X3B0ZSh2YWRkcik7CisJcmV0dXJuIHB0ZV9wYWdlKCpwdGUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2hvbWVjYWNoZS5jIGIvYXJjaC90aWxlL21tL2hvbWVjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YzQ3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbW0vaG9tZWNhY2hlLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBjb2RlIG1haW50YWlucyB0aGUgImhvbWUiIGZvciBlYWNoIHBhZ2UgaW4gdGhlIHN5c3RlbS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcm1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2hvbWVjYWNoZS5oPgorCisjaW5jbHVkZSAibWlncmF0ZS5oIgorCisKKyNpZiBDSElQX0hBU19DT0hFUkVOVF9MT0NBTF9DQUNIRSgpCisKKy8qCisgKiBUaGUgbm9hbGxvY2wyIG9wdGlvbiBzdXBwcmVzc2VzIGFsbCB1c2Ugb2YgdGhlIEwyIGNhY2hlIHRvIGNhY2hlCisgKiBsb2NhbGx5IGZyb20gYSByZW1vdGUgaG9tZS4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gdXNpbmcgaXQgaWYgd2UKKyAqIGRvbid0IGhhdmUgY29oZXJlbnQgbG9jYWwgY2FjaGluZywgdGhvdWdoLgorICovCitzdGF0aWMgaW50IF9fd3JpdGVfb25jZSBub2FsbG9jbDI7CitzdGF0aWMgaW50IF9faW5pdCBzZXRfbm9hbGxvY2wyKGNoYXIgKnN0cikKK3sKKwlub2FsbG9jbDIgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vYWxsb2NsMiIsIHNldF9ub2FsbG9jbDIpOworCisjZWxzZQorCisjZGVmaW5lIG5vYWxsb2NsMiAwCisKKyNlbmRpZgorCisvKiBQcm92aWRlIG5vLW9wIHZlcnNpb25zIG9mIHRoZXNlIHJvdXRpbmVzIHRvIGtlZXAgZmx1c2hfcmVtb3RlKCkgY2xlYW5lci4gKi8KKyNkZWZpbmUgbWFya19jYWNoZXNfZXZpY3RlZF9zdGFydCgpIDAKKyNkZWZpbmUgbWFya19jYWNoZXNfZXZpY3RlZF9maW5pc2gobWFzaywgdGltZXN0YW1wKSBkbyB7fSB3aGlsZSAoMCkKKworCisvKgorICogVXBkYXRlIHRoZSBpcnFfc3RhdCBmb3IgY3B1cyB0aGF0IHdlIGFyZSBnb2luZyB0byBpbnRlcnJ1cHQKKyAqIHdpdGggVExCIG9yIGNhY2hlIGZsdXNoZXMuICBBbHNvIGhhbmRsZSByZW1vdmluZyBkYXRhcGxhbmUgY3B1cworICogZnJvbSB0aGUgVExCIGZsdXNoIHNldCwgYW5kIHNldHRpbmcgZGF0YXBsYW5lX3RsYl9zdGF0ZSBpbnN0ZWFkLgorICovCitzdGF0aWMgdm9pZCBodl9mbHVzaF91cGRhdGUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNhY2hlX2NwdW1hc2ssCisJCQkgICAgc3RydWN0IGNwdW1hc2sgKnRsYl9jcHVtYXNrLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgdGxiX3ZhLCB1bnNpZ25lZCBsb25nIHRsYl9sZW5ndGgsCisJCQkgICAgSFZfUmVtb3RlX0FTSUQgKmFzaWRzLCBpbnQgYXNpZGNvdW50KQoreworCXN0cnVjdCBjcHVtYXNrIG1hc2s7CisJaW50IGksIGNwdTsKKworCWNwdW1hc2tfY2xlYXIoJm1hc2spOworCWlmIChjYWNoZV9jcHVtYXNrKQorCQljcHVtYXNrX29yKCZtYXNrLCAmbWFzaywgY2FjaGVfY3B1bWFzayk7CisJaWYgKHRsYl9jcHVtYXNrICYmIHRsYl9sZW5ndGgpIHsKKwkJY3B1bWFza19vcigmbWFzaywgJm1hc2ssIHRsYl9jcHVtYXNrKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXNpZGNvdW50OyArK2kpCisJCWNwdW1hc2tfc2V0X2NwdShhc2lkc1tpXS55ICogc21wX3dpZHRoICsgYXNpZHNbaV0ueCwgJm1hc2spOworCisJLyoKKwkgKiBEb24ndCBib3RoZXIgdG8gdXBkYXRlIGF0b21pY2FsbHk7IGxvc2luZyBhIGNvdW50CisJICogaGVyZSBpcyBub3QgdGhhdCBjcml0aWNhbC4KKwkgKi8KKwlmb3JfZWFjaF9jcHUoY3B1LCAmbWFzaykKKwkJKytwZXJfY3B1KGlycV9zdGF0LCBjcHUpLmlycV9odl9mbHVzaF9jb3VudDsKK30KKworLyoKKyAqIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBhcm91bmQgaHZfZmx1c2hfcmVtb3RlKCkgZG9lcyBzZXZlcmFsIHRoaW5nczoKKyAqCisgKiAgLSBQcm92aWRlcyBhIHJldHVybiB2YWx1ZSBlcnJvci1jaGVja2luZyBwYW5pYyBwYXRoLCBzaW5jZQorICogICAgdGhlcmUncyBuZXZlciBhbnkgZ29vZCByZWFzb24gZm9yIGh2X2ZsdXNoX3JlbW90ZSgpIHRvIGZhaWwuCisgKiAgLSBBY2NlcHRzIGEgMzItYml0IFBGTiByYXRoZXIgdGhhbiBhIDY0LWJpdCBQQSwgd2hpY2ggZ2VuZXJhbGx5CisgKiAgICBpcyB0aGUgdHlwZSB0aGF0IExpbnV4IHdhbnRzIHRvIHBhc3MgYXJvdW5kIGFueXdheS4KKyAqICAtIENlbnRyYWxpemVzIHRoZSBtYXJrX2NhY2hlc19ldmljdGVkKCkgaGFuZGxpbmcuCisgKiAgLSBDYW5vbmljYWxpemVzIHRoYXQgbGVuZ3RocyBvZiB6ZXJvIG1ha2UgY3B1bWFza3MgTlVMTC4KKyAqICAtIEhhbmRsZXMgZGVmZXJyaW5nIFRMQiBmbHVzaGVzIGZvciBkYXRhcGxhbmUgdGlsZXMuCisgKiAgLSBUcmFja3MgcmVtb3RlIGludGVycnVwdHMgaW4gdGhlIHBlci1jcHUgaXJxX2NwdXN0YXRfdC4KKyAqCisgKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBjYWNoZSBmbHVzaCBjb21wbGV0ZXMgYmVmb3JlCisgKiB1cGRhdGluZyB0aGUgcGVyLWNwdSBsYXN0X2NhY2hlX2ZsdXNoIHdvcmQsIHNpbmNlIG90aGVyd2lzZSBhbm90aGVyCisgKiBjb25jdXJyZW50IGZsdXNoIGNhbiByYWNlLCBjb25jbHVkZSB0aGUgZmx1c2ggaGFzIGFscmVhZHkKKyAqIGNvbXBsZXRlZCwgYW5kIHN0YXJ0IHRvIHVzZSB0aGUgcGFnZSB3aGlsZSBpdCdzIHN0aWxsIGRpcnR5CisgKiByZW1vdGVseSAocnVubmluZyBjb25jdXJyZW50bHkgd2l0aCB0aGUgYWN0dWFsIGV2aWN0LCBwcmVzdW1hYmx5KS4KKyAqLwordm9pZCBmbHVzaF9yZW1vdGUodW5zaWduZWQgbG9uZyBjYWNoZV9wZm4sIHVuc2lnbmVkIGxvbmcgY2FjaGVfY29udHJvbCwKKwkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY2FjaGVfY3B1bWFza19vcmlnLAorCQkgIEhWX1ZpcnRBZGRyIHRsYl92YSwgdW5zaWduZWQgbG9uZyB0bGJfbGVuZ3RoLAorCQkgIHVuc2lnbmVkIGxvbmcgdGxiX3Bnc2l6ZSwKKwkJICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqdGxiX2NwdW1hc2tfb3JpZywKKwkJICBIVl9SZW1vdGVfQVNJRCAqYXNpZHMsIGludCBhc2lkY291bnQpCit7CisJaW50IHJjOworCWludCB0aW1lc3RhbXAgPSAwOyAgLyogaGFwcHkgY29tcGlsZXIgKi8KKwlzdHJ1Y3QgY3B1bWFzayBjYWNoZV9jcHVtYXNrX2NvcHksIHRsYl9jcHVtYXNrX2NvcHk7CisJc3RydWN0IGNwdW1hc2sgKmNhY2hlX2NwdW1hc2ssICp0bGJfY3B1bWFzazsKKwlIVl9QaHlzQWRkciBjYWNoZV9wYTsKKwljaGFyIGNhY2hlX2J1ZltOUl9DUFVTKjVdLCB0bGJfYnVmW05SX0NQVVMqNV07CisKKwltYigpOyAgIC8qIHByb3ZpZGVkIGp1c3QgdG8gc2ltcGxpZnkgIm1hZ2ljIGh5cGVydmlzb3IiIG1vZGUgKi8KKworCS8qCisJICogQ2Fub25pY2FsaXplIGFuZCBjb3B5IHRoZSBjcHVtYXNrcy4KKwkgKi8KKwlpZiAoY2FjaGVfY3B1bWFza19vcmlnICYmIGNhY2hlX2NvbnRyb2wpIHsKKwkJY3B1bWFza19jb3B5KCZjYWNoZV9jcHVtYXNrX2NvcHksIGNhY2hlX2NwdW1hc2tfb3JpZyk7CisJCWNhY2hlX2NwdW1hc2sgPSAmY2FjaGVfY3B1bWFza19jb3B5OworCX0gZWxzZSB7CisJCWNwdW1hc2tfY2xlYXIoJmNhY2hlX2NwdW1hc2tfY29weSk7CisJCWNhY2hlX2NwdW1hc2sgPSBOVUxMOworCX0KKwlpZiAoY2FjaGVfY3B1bWFzayA9PSBOVUxMKQorCQljYWNoZV9jb250cm9sID0gMDsKKwlpZiAodGxiX2NwdW1hc2tfb3JpZyAmJiB0bGJfbGVuZ3RoKSB7CisJCWNwdW1hc2tfY29weSgmdGxiX2NwdW1hc2tfY29weSwgdGxiX2NwdW1hc2tfb3JpZyk7CisJCXRsYl9jcHVtYXNrID0gJnRsYl9jcHVtYXNrX2NvcHk7CisJfSBlbHNlIHsKKwkJY3B1bWFza19jbGVhcigmdGxiX2NwdW1hc2tfY29weSk7CisJCXRsYl9jcHVtYXNrID0gTlVMTDsKKwl9CisKKwlodl9mbHVzaF91cGRhdGUoY2FjaGVfY3B1bWFzaywgdGxiX2NwdW1hc2ssIHRsYl92YSwgdGxiX2xlbmd0aCwKKwkJCWFzaWRzLCBhc2lkY291bnQpOworCWNhY2hlX3BhID0gKEhWX1BoeXNBZGRyKWNhY2hlX3BmbiA8PCBQQUdFX1NISUZUOworCWlmIChjYWNoZV9jb250cm9sICYgSFZfRkxVU0hfRVZJQ1RfTDIpCisJCXRpbWVzdGFtcCA9IG1hcmtfY2FjaGVzX2V2aWN0ZWRfc3RhcnQoKTsKKwlyYyA9IGh2X2ZsdXNoX3JlbW90ZShjYWNoZV9wYSwgY2FjaGVfY29udHJvbCwKKwkJCSAgICAgY3B1bWFza19iaXRzKGNhY2hlX2NwdW1hc2spLAorCQkJICAgICB0bGJfdmEsIHRsYl9sZW5ndGgsIHRsYl9wZ3NpemUsCisJCQkgICAgIGNwdW1hc2tfYml0cyh0bGJfY3B1bWFzayksCisJCQkgICAgIGFzaWRzLCBhc2lkY291bnQpOworCWlmIChjYWNoZV9jb250cm9sICYgSFZfRkxVU0hfRVZJQ1RfTDIpCisJCW1hcmtfY2FjaGVzX2V2aWN0ZWRfZmluaXNoKGNhY2hlX2NwdW1hc2ssIHRpbWVzdGFtcCk7CisJaWYgKHJjID09IDApCisJCXJldHVybjsKKwljcHVtYXNrX3NjbnByaW50ZihjYWNoZV9idWYsIHNpemVvZihjYWNoZV9idWYpLCAmY2FjaGVfY3B1bWFza19jb3B5KTsKKwljcHVtYXNrX3NjbnByaW50Zih0bGJfYnVmLCBzaXplb2YodGxiX2J1ZiksICZ0bGJfY3B1bWFza19jb3B5KTsKKworCXByX2VycigiaHZfZmx1c2hfcmVtb3RlKCUjbGx4LCAlI2x4LCAlcCBbJXNdLCIKKwkgICAgICAgIiAlI2x4LCAlI2x4LCAlI2x4LCAlcCBbJXNdLCAlcCwgJWQpID0gJWRcbiIsCisJICAgICAgIGNhY2hlX3BhLCBjYWNoZV9jb250cm9sLCBjYWNoZV9jcHVtYXNrLCBjYWNoZV9idWYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKXRsYl92YSwgdGxiX2xlbmd0aCwgdGxiX3Bnc2l6ZSwKKwkgICAgICAgdGxiX2NwdW1hc2ssIHRsYl9idWYsCisJICAgICAgIGFzaWRzLCBhc2lkY291bnQsIHJjKTsKKwlwYW5pYygiVW5zYWZlIHRvIGNvbnRpbnVlLiIpOworfQorCit2b2lkIGhvbWVjYWNoZV9ldmljdChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlmbHVzaF9yZW1vdGUoMCwgSFZfRkxVU0hfRVZJQ1RfTDIsIG1hc2ssIDAsIDAsIDAsIE5VTEwsIE5VTEwsIDApOworfQorCisvKiBSZXR1cm4gYSBtYXNrIG9mIHRoZSBjcHVzIHdob3NlIGNhY2hlcyBjdXJyZW50bHkgb3duIHRoZXNlIHBhZ2VzLiAqLworc3RhdGljIHZvaWQgaG9tZWNhY2hlX21hc2soc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlcywKKwkJCSAgIHN0cnVjdCBjcHVtYXNrICpob21lX21hc2spCit7CisJaW50IGk7CisJY3B1bWFza19jbGVhcihob21lX21hc2spOworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgKytpKSB7CisJCWludCBob21lID0gcGFnZV9ob21lKCZwYWdlW2ldKTsKKwkJaWYgKGhvbWUgPT0gUEFHRV9IT01FX0lNTVVUQUJMRSB8fAorCQkgICAgaG9tZSA9PSBQQUdFX0hPTUVfSU5DT0hFUkVOVCkgeworCQkJY3B1bWFza19jb3B5KGhvbWVfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOworCQkJcmV0dXJuOworCQl9CisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJCWlmIChob21lID09IFBBR0VfSE9NRV9IQVNIKSB7CisJCQljcHVtYXNrX29yKGhvbWVfbWFzaywgaG9tZV9tYXNrLCAmaGFzaF9mb3JfaG9tZV9tYXApOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQlpZiAoaG9tZSA9PSBQQUdFX0hPTUVfVU5DQUNIRUQpCisJCQljb250aW51ZTsKKwkJQlVHX09OKGhvbWUgPCAwIHx8IGhvbWUgPj0gTlJfQ1BVUyk7CisJCWNwdW1hc2tfc2V0X2NwdShob21lLCBob21lX21hc2spOworCX0KK30KKworLyoKKyAqIFJldHVybiB0aGUgcGFzc2VkIGxlbmd0aCwgb3IgemVybyBpZiBpdCdzIGxvbmcgZW5vdWdoIHRoYXQgd2UKKyAqIGJlbGlldmUgd2Ugc2hvdWxkIGV2aWN0IHRoZSB3aG9sZSBMMiBjYWNoZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FjaGVfZmx1c2hfbGVuZ3RoKHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQoreworCXJldHVybiAobGVuZ3RoID49IENISVBfTDJfQ0FDSEVfU0laRSgpKSA/IEhWX0ZMVVNIX0VWSUNUX0wyIDogbGVuZ3RoOworfQorCisvKiBPbiB0aGUgc2ltdWxhdG9yLCBjb25maXJtIGxpbmVzIGhhdmUgYmVlbiBldmljdGVkIGV2ZXJ5d2hlcmUuICovCitzdGF0aWMgdm9pZCB2YWxpZGF0ZV9saW5lc19ldmljdGVkKHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplX3QgbGVuZ3RoKQoreworCXNpbV9zeXNjYWxsKFNJTV9TWVNDQUxMX1ZBTElEQVRFX0xJTkVTX0VWSUNURUQsCisJCSAgICAoSFZfUGh5c0FkZHIpcGZuIDw8IFBBR0VfU0hJRlQsIGxlbmd0aCk7Cit9CisKKy8qIEZsdXNoIGEgcGFnZSBvdXQgb2Ygd2hhdGV2ZXIgY2FjaGUocykgaXQgaXMgaW4uICovCit2b2lkIGhvbWVjYWNoZV9mbHVzaF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKQoreworCWludCBwYWdlcyA9IDEgPDwgb3JkZXI7CisJaW50IGxlbmd0aCA9IGNhY2hlX2ZsdXNoX2xlbmd0aChwYWdlcyAqIFBBR0VfU0laRSk7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKKwlzdHJ1Y3QgY3B1bWFzayBob21lX21hc2s7CisKKwlob21lY2FjaGVfbWFzayhwYWdlLCBwYWdlcywgJmhvbWVfbWFzayk7CisJZmx1c2hfcmVtb3RlKHBmbiwgbGVuZ3RoLCAmaG9tZV9tYXNrLCAwLCAwLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwl2YWxpZGF0ZV9saW5lc19ldmljdGVkKHBmbiwgcGFnZXMgKiBQQUdFX1NJWkUpOworfQorCisKKy8qIFJlcG9ydCB0aGUgaG9tZSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gUFRFLiAqLworc3RhdGljIGludCBwdGVfdG9faG9tZShwdGVfdCBwdGUpCit7CisJaWYgKGh2X3B0ZV9nZXRfbmMocHRlKSkKKwkJcmV0dXJuIFBBR0VfSE9NRV9JTU1VVEFCTEU7CisJc3dpdGNoIChodl9wdGVfZ2V0X21vZGUocHRlKSkgeworCWNhc2UgSFZfUFRFX01PREVfQ0FDSEVfVElMRV9MMzoKKwkJcmV0dXJuIGdldF9yZW1vdGVfY2FjaGVfY3B1KHB0ZSk7CisJY2FzZSBIVl9QVEVfTU9ERV9DQUNIRV9OT19MMzoKKwkJcmV0dXJuIFBBR0VfSE9NRV9JTkNPSEVSRU5UOworCWNhc2UgSFZfUFRFX01PREVfVU5DQUNIRUQ6CisJCXJldHVybiBQQUdFX0hPTUVfVU5DQUNIRUQ7CisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJY2FzZSBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzOgorCQlyZXR1cm4gUEFHRV9IT01FX0hBU0g7CisjZW5kaWYKKwl9CisJcGFuaWMoIkJhZCBQVEUgJSNsbHhcbiIsIHB0ZS52YWwpOworfQorCisvKiBVcGRhdGUgdGhlIGhvbWUgb2YgYSBQVEUgaWYgbmVjZXNzYXJ5IChjYW4gYWxzbyBiZSB1c2VkIGZvciBhIHBncHJvdF90KS4gKi8KK3B0ZV90IHB0ZV9zZXRfaG9tZShwdGVfdCBwdGUsIGludCBob21lKQoreworCS8qIENoZWNrIGZvciBub24tbGluZWFyIGZpbGUgbWFwcGluZyAiUFRFcyIgYW5kIHBhc3MgdGhlbSB0aHJvdWdoLiAqLworCWlmIChwdGVfZmlsZShwdGUpKQorCQlyZXR1cm4gcHRlOworCisjaWYgQ0hJUF9IQVNfTU1JTygpCisJLyogQ2hlY2sgZm9yIE1NSU8gbWFwcGluZ3MgYW5kIHBhc3MgdGhlbSB0aHJvdWdoLiAqLworCWlmIChodl9wdGVfZ2V0X21vZGUocHRlKSA9PSBIVl9QVEVfTU9ERV9NTUlPKQorCQlyZXR1cm4gcHRlOworI2VuZGlmCisKKworCS8qCisJICogT25seSBpbW11dGFibGUgcGFnZXMgZ2V0IE5DIG1hcHBpbmdzLiAgSWYgd2UgaGF2ZSBhCisJICogbm9uLWNvaGVyZW50IFBURSwgYnV0IHRoZSB1bmRlcmx5aW5nIHBhZ2UgaXMgbm90CisJICogaW1tdXRhYmxlLCBpdCdzIGxpa2VseSB0aGUgcmVzdWx0IG9mIGEgZm9yY2VkCisJICogY2FjaGluZyBzZXR0aW5nIHJ1bm5pbmcgdXAgYWdhaW5zdCBwdHJhY2Ugc2V0dGluZworCSAqIHRoZSBwYWdlIHRvIGJlIHdyaXRhYmxlIHVuZGVybmVhdGguICBJbiB0aGlzIGNhc2UsCisJICoganVzdCBrZWVwIHRoZSBQVEUgY29oZXJlbnQuCisJICovCisJaWYgKGh2X3B0ZV9nZXRfbmMocHRlKSAmJiBob21lICE9IFBBR0VfSE9NRV9JTU1VVEFCTEUpIHsKKwkJcHRlID0gaHZfcHRlX2NsZWFyX25jKHB0ZSk7CisJCXByX2Vycigibm9uLWltbXV0YWJsZSBwYWdlIGluY29oZXJlbnRseSByZWZlcmVuY2VkOiAlI2xseFxuIiwKKwkJICAgICAgIHB0ZS52YWwpOworCX0KKworCXN3aXRjaCAoaG9tZSkgeworCisJY2FzZSBQQUdFX0hPTUVfVU5DQUNIRUQ6CisJCXB0ZSA9IGh2X3B0ZV9zZXRfbW9kZShwdGUsIEhWX1BURV9NT0RFX1VOQ0FDSEVEKTsKKwkJYnJlYWs7CisKKwljYXNlIFBBR0VfSE9NRV9JTkNPSEVSRU5UOgorCQlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9OT19MMyk7CisJCWJyZWFrOworCisJY2FzZSBQQUdFX0hPTUVfSU1NVVRBQkxFOgorCQkvKgorCQkgKiBXZSBjb3VsZCBob21lIHRoaXMgcGFnZSBhbnl3aGVyZSwgc2luY2UgaXQncyBpbW11dGFibGUsCisJCSAqIGJ1dCBieSBkZWZhdWx0IGp1c3QgaG9tZSBpdCB0byBmb2xsb3cgImhhc2hfZGVmYXVsdCIuCisJCSAqLworCQlCVUdfT04oaHZfcHRlX2dldF93cml0YWJsZShwdGUpKTsKKwkJaWYgKHB0ZV9nZXRfZm9yY2VjYWNoZShwdGUpKSB7CisJCQkvKiBVcGdyYWRlICJmb3JjZSBhbnkgY3B1IiB0byAiTm8gTDMiIGZvciBpbW11dGFibGUuICovCisJCQlpZiAoaHZfcHRlX2dldF9tb2RlKHB0ZSkgPT0gSFZfUFRFX01PREVfQ0FDSEVfVElMRV9MMworCQkJICAgICYmIHB0ZV9nZXRfYW55aG9tZShwdGUpKSB7CisJCQkJcHRlID0gaHZfcHRlX3NldF9tb2RlKHB0ZSwKKwkJCQkJCSAgICAgIEhWX1BURV9NT0RFX0NBQ0hFX05PX0wzKTsKKwkJCX0KKwkJfSBlbHNlCisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJCWlmIChoYXNoX2RlZmF1bHQpCisJCQlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzKTsKKwkJZWxzZQorI2VuZGlmCisJCQlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9OT19MMyk7CisJCXB0ZSA9IGh2X3B0ZV9zZXRfbmMocHRlKTsKKwkJYnJlYWs7CisKKyNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKKwljYXNlIFBBR0VfSE9NRV9IQVNIOgorCQlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzKTsKKwkJYnJlYWs7CisjZW5kaWYKKworCWRlZmF1bHQ6CisJCUJVR19PTihob21lIDwgMCB8fCBob21lID49IE5SX0NQVVMgfHwKKwkJICAgICAgICFjcHVfaXNfdmFsaWRfbG90YXIoaG9tZSkpOworCQlwdGUgPSBodl9wdGVfc2V0X21vZGUocHRlLCBIVl9QVEVfTU9ERV9DQUNIRV9USUxFX0wzKTsKKwkJcHRlID0gc2V0X3JlbW90ZV9jYWNoZV9jcHUocHRlLCBob21lKTsKKwkJYnJlYWs7CisJfQorCisjaWYgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpCisJaWYgKG5vYWxsb2NsMikKKwkJcHRlID0gaHZfcHRlX3NldF9ub19hbGxvY19sMihwdGUpOworCisJLyogU2ltcGxpZnkgIm5vIGxvY2FsIGFuZCBubyBsMyIgdG8gInVuY2FjaGVkIiAqLworCWlmIChodl9wdGVfZ2V0X25vX2FsbG9jX2wyKHB0ZSkgJiYgaHZfcHRlX2dldF9ub19hbGxvY19sMShwdGUpICYmCisJICAgIGh2X3B0ZV9nZXRfbW9kZShwdGUpID09IEhWX1BURV9NT0RFX0NBQ0hFX05PX0wzKSB7CisJCXB0ZSA9IGh2X3B0ZV9zZXRfbW9kZShwdGUsIEhWX1BURV9NT0RFX1VOQ0FDSEVEKTsKKwl9CisjZW5kaWYKKworCS8qIENoZWNraW5nIHRoaXMgY2FzZSBoZXJlIGdpdmVzIGEgYmV0dGVyIHBhbmljIHRoYW4gZnJvbSB0aGUgaHYuICovCisJQlVHX09OKGh2X3B0ZV9nZXRfbW9kZShwdGUpID09IDApOworCisJcmV0dXJuIHB0ZTsKK30KKworLyoKKyAqIFRoZSByb3V0aW5lcyBpbiB0aGlzIHNlY3Rpb24gYXJlIHRoZSAic3RhdGljIiB2ZXJzaW9ucyBvZiB0aGUgbm9ybWFsCisgKiBkeW5hbWljIGhvbWVjYWNoaW5nIHJvdXRpbmVzOyB0aGV5IGp1c3Qgc2V0IHRoZSBob21lIGNhY2hlCisgKiBvZiBhIGtlcm5lbCBwYWdlIG9uY2UsIGFuZCByZXF1aXJlIGEgZnVsbC1jaGlwIGNhY2hlL1RMQiBmbHVzaCwKKyAqIHNvIHRoZXkncmUgbm90IHN1aXRhYmxlIGZvciBhbnl0aGluZyBidXQgaW5mcmVxdWVudCB1c2UuCisgKi8KKworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorc3RhdGljIGlubGluZSBpbnQgaW5pdGlhbF9wYWdlX2hvbWUodm9pZCkgeyByZXR1cm4gUEFHRV9IT01FX0hBU0g7IH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpbml0aWFsX3BhZ2VfaG9tZSh2b2lkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworaW50IHBhZ2VfaG9tZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJcmV0dXJuIGluaXRpYWxfcGFnZV9ob21lKCk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBrdmEgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSk7CisJCXJldHVybiBwdGVfdG9faG9tZSgqdmlydF90b19wdGUoTlVMTCwga3ZhKSk7CisJfQorfQorCit2b2lkIGhvbWVjYWNoZV9jaGFuZ2VfcGFnZV9ob21lKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGludCBob21lKQoreworCWludCBpLCBwYWdlcyA9ICgxIDw8IG9yZGVyKTsKKwl1bnNpZ25lZCBsb25nIGt2YTsKKworCUJVR19PTihQYWdlSGlnaE1lbShwYWdlKSk7CisJQlVHX09OKHBhZ2VfY291bnQocGFnZSkgPiAxKTsKKwlCVUdfT04ocGFnZV9tYXBjb3VudChwYWdlKSAhPSAwKTsKKwlrdmEgPSAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCWZsdXNoX3JlbW90ZSgwLCBIVl9GTFVTSF9FVklDVF9MMiwgJmNwdV9jYWNoZWFibGVfbWFwLAorCQkgICAgIGt2YSwgcGFnZXMgKiBQQUdFX1NJWkUsIFBBR0VfU0laRSwgY3B1X29ubGluZV9tYXNrLAorCQkgICAgIE5VTEwsIDApOworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyArK2ksIGt2YSArPSBQQUdFX1NJWkUpIHsKKwkJcHRlX3QgKnB0ZXAgPSB2aXJ0X3RvX3B0ZShOVUxMLCBrdmEpOworCQlwdGVfdCBwdGV2YWwgPSAqcHRlcDsKKwkJQlVHX09OKCFwdGVfcHJlc2VudChwdGV2YWwpIHx8IHB0ZV9odWdlKHB0ZXZhbCkpOworCQkqcHRlcCA9IHB0ZV9zZXRfaG9tZShwdGV2YWwsIGhvbWUpOworCX0KK30KKworc3RydWN0IHBhZ2UgKmhvbWVjYWNoZV9hbGxvY19wYWdlcyhnZnBfdCBnZnBfbWFzaywKKwkJCQkgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBob21lKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCUJVR19PTihnZnBfbWFzayAmIF9fR0ZQX0hJR0hNRU0pOyAgIC8qIG11c3QgYmUgbG93bWVtICovCisJcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7CisJaWYgKHBhZ2UpCisJCWhvbWVjYWNoZV9jaGFuZ2VfcGFnZV9ob21lKHBhZ2UsIG9yZGVyLCBob21lKTsKKwlyZXR1cm4gcGFnZTsKK30KKworc3RydWN0IHBhZ2UgKmhvbWVjYWNoZV9hbGxvY19wYWdlc19ub2RlKGludCBuaWQsIGdmcF90IGdmcF9tYXNrLAorCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBob21lKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCUJVR19PTihnZnBfbWFzayAmIF9fR0ZQX0hJR0hNRU0pOyAgIC8qIG11c3QgYmUgbG93bWVtICovCisJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBnZnBfbWFzaywgb3JkZXIpOworCWlmIChwYWdlKQorCQlob21lY2FjaGVfY2hhbmdlX3BhZ2VfaG9tZShwYWdlLCBvcmRlciwgaG9tZSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3ZvaWQgaG9tZWNhY2hlX2ZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAoYWRkciA9PSAwKQorCQlyZXR1cm47CisKKwlWTV9CVUdfT04oIXZpcnRfYWRkcl92YWxpZCgodm9pZCAqKWFkZHIpKTsKKwlwYWdlID0gdmlydF90b19wYWdlKCh2b2lkICopYWRkcik7CisJaWYgKHB1dF9wYWdlX3Rlc3R6ZXJvKHBhZ2UpKSB7CisJCWludCBwYWdlcyA9ICgxIDw8IG9yZGVyKTsKKwkJaG9tZWNhY2hlX2NoYW5nZV9wYWdlX2hvbWUocGFnZSwgb3JkZXIsIGluaXRpYWxfcGFnZV9ob21lKCkpOworCQl3aGlsZSAocGFnZXMtLSkKKwkJCV9fZnJlZV9wYWdlKHBhZ2UrKyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDY4OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVElMRSBIdWdlIFRMQiBQYWdlIFN1cHBvcnQgZm9yIEtlcm5lbC4KKyAqIFRha2VuIGZyb20gaTM4NiBodWdldGxiIGltcGxlbWVudGF0aW9uOgorICogQ29weXJpZ2h0IChDKSAyMDAyLCBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK3B0ZV90ICpodWdlX3B0ZV9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwdGVfdCAqcHRlID0gTlVMTDsKKworCS8qIFdlIGRvIG5vdCB5ZXQgc3VwcG9ydCBtdWx0aXBsZSBodWdlIHBhZ2Ugc2l6ZXMuICovCisJQlVHX09OKHN6ICE9IFBNRF9TSVpFKTsKKworCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOworCXB1ZCA9IHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyKTsKKwlpZiAocHVkKQorCQlwdGUgPSAocHRlX3QgKikgcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpOworCUJVR19PTihwdGUgJiYgIXB0ZV9ub25lKCpwdGUpICYmICFwdGVfaHVnZSgqcHRlKSk7CisKKwlyZXR1cm4gcHRlOworfQorCitwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQgPSBOVUxMOworCisJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CisJaWYgKHBnZF9wcmVzZW50KCpwZ2QpKSB7CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJaWYgKHB1ZF9wcmVzZW50KCpwdWQpKQorCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCX0KKwlyZXR1cm4gKHB0ZV90ICopIHBtZDsKK30KKworI2lmZGVmIEhVR0VUTEJfVEVTVAorc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgIGludCB3cml0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkcmVzczsKKwlpbnQgbGVuZ3RoID0gMTsKKwlpbnQgbnI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJaWYgKCF2bWEgfHwgIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXB0ZSA9IGh1Z2VfcHRlX29mZnNldChtbSwgYWRkcmVzcyk7CisKKwkvKiBodWdldGxiIHNob3VsZCBiZSBsb2NrZWQsIGFuZCBoZW5jZSwgcHJlZmF1bHRlZCAqLworCVdBUk5fT04oIXB0ZSB8fCBwdGVfbm9uZSgqcHRlKSk7CisKKwlwYWdlID0gJnB0ZV9wYWdlKCpwdGUpW3ZwZm4gJSAoSFBBR0VfU0laRS9QQUdFX1NJWkUpXTsKKworCVdBUk5fT04oIVBhZ2VIZWFkKHBhZ2UpKTsKKworCXJldHVybiBwYWdlOworfQorCitpbnQgcG1kX2h1Z2UocG1kX3QgcG1kKQoreworCXJldHVybiAwOworfQorCitpbnQgcHVkX2h1Z2UocHVkX3QgcHVkKQoreworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgICAgIHBtZF90ICpwbWQsIGludCB3cml0ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2Vsc2UKKworc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCSAgICAgIGludCB3cml0ZSkKK3sKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworaW50IHBtZF9odWdlKHBtZF90IHBtZCkKK3sKKwlyZXR1cm4gISEocG1kX3ZhbChwbWQpICYgX1BBR0VfSFVHRV9QQUdFKTsKK30KKworaW50IHB1ZF9odWdlKHB1ZF90IHB1ZCkKK3sKKwlyZXR1cm4gISEocHVkX3ZhbChwdWQpICYgX1BBR0VfSFVHRV9QQUdFKTsKK30KKworc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgICBwbWRfdCAqcG1kLCBpbnQgd3JpdGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gcHRlX3BhZ2UoKihwdGVfdCAqKXBtZCk7CisJaWYgKHBhZ2UpCisJCXBhZ2UgKz0gKChhZGRyZXNzICYgflBNRF9NQVNLKSA+PiBQQUdFX1NISUZUKTsKKwlyZXR1cm4gcGFnZTsKK30KKworc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgICBwdWRfdCAqcHVkLCBpbnQgd3JpdGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gcHRlX3BhZ2UoKihwdGVfdCAqKXB1ZCk7CisJaWYgKHBhZ2UpCisJCXBhZ2UgKz0gKChhZGRyZXNzICYgflBVRF9NQVNLKSA+PiBQQUdFX1NISUZUKTsKKwlyZXR1cm4gcGFnZTsKK30KKworaW50IGh1Z2VfcG1kX3Vuc2hhcmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKmFkZHIsIHB0ZV90ICpwdGVwKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVJDSF9IVUdFVExCX1VOTUFQUEVEX0FSRUEKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFfYm90dG9tdXAoc3RydWN0IGZpbGUgKmZpbGUsCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCXVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOworCisJaWYgKGxlbiA+IG1tLT5jYWNoZWRfaG9sZV9zaXplKSB7CisJCXN0YXJ0X2FkZHIgPSBtbS0+ZnJlZV9hcmVhX2NhY2hlOworCX0gZWxzZSB7CisJCXN0YXJ0X2FkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKKwl9CisKK2Z1bGxfc2VhcmNoOgorCWFkZHIgPSBBTElHTihzdGFydF9hZGRyLCBodWdlX3BhZ2Vfc2l6ZShoKSk7CisKKwlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsgOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwkJLyogQXQgdGhpcyBwb2ludDogICghdm1hIHx8IGFkZHIgPCB2bWEtPnZtX2VuZCkuICovCisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPCBhZGRyKSB7CisJCQkvKgorCQkJICogU3RhcnQgYSBuZXcgc2VhcmNoIC0ganVzdCBpbiBjYXNlIHdlIG1pc3NlZAorCQkJICogc29tZSBob2xlcy4KKwkJCSAqLworCQkJaWYgKHN0YXJ0X2FkZHIgIT0gVEFTS19VTk1BUFBFRF9CQVNFKSB7CisJCQkJc3RhcnRfYWRkciA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IDA7CisJCQkJZ290byBmdWxsX3NlYXJjaDsKKwkJCX0KKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkgeworCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CisJCQlyZXR1cm4gYWRkcjsKKwkJfQorCQlpZiAoYWRkciArIG1tLT5jYWNoZWRfaG9sZV9zaXplIDwgdm1hLT52bV9zdGFydCkKKwkJCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gdm1hLT52bV9zdGFydCAtIGFkZHI7CisJCWFkZHIgPSBBTElHTih2bWEtPnZtX2VuZCwgaHVnZV9wYWdlX3NpemUoaCkpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBsb25nIGFkZHIwLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgKnByZXZfdm1hOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5tbWFwX2Jhc2UsIGFkZHIgPSBhZGRyMDsKKwl1bnNpZ25lZCBsb25nIGxhcmdlc3RfaG9sZSA9IG1tLT5jYWNoZWRfaG9sZV9zaXplOworCWludCBmaXJzdF90aW1lID0gMTsKKworCS8qIGRvbid0IGFsbG93IGFsbG9jYXRpb25zIGFib3ZlIGN1cnJlbnQgYmFzZSAqLworCWlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlID4gYmFzZSkKKwkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGJhc2U7CisKKwlpZiAobGVuIDw9IGxhcmdlc3RfaG9sZSkgeworCQlsYXJnZXN0X2hvbGUgPSAwOworCQltbS0+ZnJlZV9hcmVhX2NhY2hlICA9IGJhc2U7CisJfQordHJ5X2FnYWluOgorCS8qIG1ha2Ugc3VyZSBpdCBjYW4gZml0IGluIHRoZSByZW1haW5pbmcgYWRkcmVzcyBzcGFjZSAqLworCWlmIChtbS0+ZnJlZV9hcmVhX2NhY2hlIDwgbGVuKQorCQlnb3RvIGZhaWw7CisKKwkvKiBlaXRoZXIgbm8gYWRkcmVzcyByZXF1ZXN0ZWQgb3IgY2FudCBmaXQgaW4gcmVxdWVzdGVkIGFkZHJlc3MgaG9sZSAqLworCWFkZHIgPSAobW0tPmZyZWVfYXJlYV9jYWNoZSAtIGxlbikgJiBodWdlX3BhZ2VfbWFzayhoKTsKKwlkbyB7CisJCS8qCisJCSAqIExvb2t1cCBmYWlsdXJlIG1lYW5zIG5vIHZtYSBpcyBhYm92ZSB0aGlzIGFkZHJlc3MsCisJCSAqIGkuZS4gcmV0dXJuIHdpdGggc3VjY2VzczoKKwkJICovCisJCXZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIGFkZHIsICZwcmV2X3ZtYSk7CisJCWlmICghdm1hKSB7CisJCQlyZXR1cm4gYWRkcjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogbmV3IHJlZ2lvbiBmaXRzIGJldHdlZW4gcHJldl92bWEtPnZtX2VuZCBhbmQKKwkJICogdm1hLT52bV9zdGFydCwgdXNlIGl0OgorCQkgKi8KKwkJaWYgKGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCAmJgorCQkJICAgICghcHJldl92bWEgfHwgKGFkZHIgPj0gcHJldl92bWEtPnZtX2VuZCkpKSB7CisJCQkvKiByZW1lbWJlciB0aGUgYWRkcmVzcyBhcyBhIGhpbnQgZm9yIG5leHQgdGltZSAqLworCQkJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSBsYXJnZXN0X2hvbGU7CisJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYWRkcjsKKwkJCXJldHVybiBhZGRyOworCQl9IGVsc2UgeworCQkJLyogcHVsbCBmcmVlX2FyZWFfY2FjaGUgZG93biB0byB0aGUgZmlyc3QgaG9sZSAqLworCQkJaWYgKG1tLT5mcmVlX2FyZWFfY2FjaGUgPT0gdm1hLT52bV9lbmQpIHsKKwkJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gdm1hLT52bV9zdGFydDsKKwkJCQltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IGxhcmdlc3RfaG9sZTsKKwkJCX0KKwkJfQorCisJCS8qIHJlbWVtYmVyIHRoZSBsYXJnZXN0IGhvbGUgd2Ugc2F3IHNvIGZhciAqLworCQlpZiAoYWRkciArIGxhcmdlc3RfaG9sZSA8IHZtYS0+dm1fc3RhcnQpCisJCQlsYXJnZXN0X2hvbGUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKKworCQkvKiB0cnkganVzdCBiZWxvdyB0aGUgY3VycmVudCB2bWEtPnZtX3N0YXJ0ICovCisJCWFkZHIgPSAodm1hLT52bV9zdGFydCAtIGxlbikgJiBodWdlX3BhZ2VfbWFzayhoKTsKKworCX0gd2hpbGUgKGxlbiA8PSB2bWEtPnZtX3N0YXJ0KTsKKworZmFpbDoKKwkvKgorCSAqIGlmIGhpbnQgbGVmdCB1cyB3aXRoIG5vIHNwYWNlIGZvciB0aGUgcmVxdWVzdGVkCisJICogbWFwcGluZyB0aGVuIHRyeSBhZ2FpbjoKKwkgKi8KKwlpZiAoZmlyc3RfdGltZSkgeworCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwkJbGFyZ2VzdF9ob2xlID0gMDsKKwkJZmlyc3RfdGltZSA9IDA7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKwkvKgorCSAqIEEgZmFpbGVkIG1tYXAoKSB2ZXJ5IGxpa2VseSBjYXVzZXMgYXBwbGljYXRpb24gZmFpbHVyZSwKKwkgKiBzbyBmYWxsIGJhY2sgdG8gdGhlIGJvdHRvbS11cCBmdW5jdGlvbiBoZXJlLiBUaGlzIHNjZW5hcmlvCisJICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpCisJICogYWxsb2NhdGlvbnMuCisJICovCisJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CisJYWRkciA9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFfYm90dG9tdXAoZmlsZSwgYWRkcjAsCisJCQlsZW4sIHBnb2ZmLCBmbGFncyk7CisKKwkvKgorCSAqIFJlc3RvcmUgdGhlIHRvcGRvd24gYmFzZToKKwkgKi8KKwltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwltbS0+Y2FjaGVkX2hvbGVfc2l6ZSA9IH4wVUw7CisKKwlyZXR1cm4gYWRkcjsKK30KKwordW5zaWduZWQgbG9uZyBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJaWYgKGxlbiAmIH5odWdlX3BhZ2VfbWFzayhoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGxlbiA+IFRBU0tfU0laRSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpIHsKKwkJaWYgKHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UoZmlsZSwgYWRkciwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gYWRkcjsKKwl9CisKKwlpZiAoYWRkcikgeworCQlhZGRyID0gQUxJR04oYWRkciwgaHVnZV9wYWdlX3NpemUoaCkpOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJldHVybiBhZGRyOworCX0KKwlpZiAoY3VycmVudC0+bW0tPmdldF91bm1hcHBlZF9hcmVhID09IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEpCisJCXJldHVybiBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhX2JvdHRvbXVwKGZpbGUsIGFkZHIsIGxlbiwKKwkJCQlwZ29mZiwgZmxhZ3MpOworCWVsc2UKKwkJcmV0dXJuIGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxlLCBhZGRyLCBsZW4sCisJCQkJcGdvZmYsIGZsYWdzKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfaHVnZXBhZ2VzeihjaGFyICpvcHQpCit7CisJdW5zaWduZWQgbG9uZyBwcyA9IG1lbXBhcnNlKG9wdCwgJm9wdCk7CisJaWYgKHBzID09IFBNRF9TSVpFKSB7CisJCWh1Z2V0bGJfYWRkX2hzdGF0ZShQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwl9IGVsc2UgaWYgKHBzID09IFBVRF9TSVpFKSB7CisJCWh1Z2V0bGJfYWRkX2hzdGF0ZShQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwl9IGVsc2UgeworCQlwcl9lcnIoImh1Z2VwYWdlc3o6IFVuc3VwcG9ydGVkIHBhZ2Ugc2l6ZSAlbHUgTVxuIiwKKwkJCXBzID4+IDIwKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorX19zZXR1cCgiaHVnZXBhZ2Vzej0iLCBzZXR1cF9odWdlcGFnZXN6KTsKKworI2VuZGlmIC8qSEFWRV9BUkNIX0hVR0VUTEJfVU5NQVBQRURfQVJFQSovCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaW5pdC5jIGIvYXJjaC90aWxlL21tL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODljOWVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL21tL2luaXQuYwpAQCAtMCwwICsxLDEwODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUgIExpbnVzIFRvcnZhbGRzCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CisjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZWZpLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vdGxiLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL2hvbWVjYWNoZS5oPgorI2luY2x1ZGUgPGh2L2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhcmNoL2NoaXAuaD4KKworI2luY2x1ZGUgIm1pZ3JhdGUuaCIKKworLyoKKyAqIFdlIGNvdWxkIHNldCBGT1JDRV9NQVhfWk9ORU9SREVSIHRvICIoSFBBR0VfU0hJRlQgLSBQQUdFX1NISUZUICsgMSkiCisgKiBpbiB0aGUgVGlsZSBLY29uZmlnLCBidXQgdGhpcyBnZW5lcmF0ZXMgY29uZmlndXJlIHdhcm5pbmdzLgorICogRG8gaXQgaGVyZSBhbmQgZm9yY2UgcGVvcGxlIHRvIGdldCBpdCByaWdodCB0byBjb21waWxlIHRoaXMgZmlsZS4KKyAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCA0S0Igc21hbGwgcGFnZXMgYW5kIDE2TUIgaHVnZSBwYWdlcywKKyAqIHRoZSBkZWZhdWx0IHZhbHVlIGRvZXNuJ3QgYWxsb3cgdXMgdG8gZ3JvdXAgZW5vdWdoIHNtYWxsIHBhZ2VzCisgKiB0b2dldGhlciB0byBtYWtlIHVwIGEgaHVnZSBwYWdlLgorICovCisjaWYgQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVIgPCBIUEFHRV9TSElGVCAtIFBBR0VfU0hJRlQgKyAxCisjIGVycm9yICJDaGFuZ2UgRk9SQ0VfTUFYX1pPTkVPUkRFUiBpbiBhcmNoL3RpbGUvS2NvbmZpZyB0byBtYXRjaCBwYWdlIHNpemUiCisjZW5kaWYKKworI2RlZmluZSBjbGVhcl9wZ2QocG1kcHRyKSAoKihwbWRwdHIpID0gaHZfcHRlKDApKQorCisjaWZuZGVmIF9fdGlsZWd4X18KK3Vuc2lnbmVkIGxvbmcgVk1BTExPQ19SRVNFUlZFID0gQ09ORklHX1ZNQUxMT0NfUkVTRVJWRTsKKyNlbmRpZgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCisvKiBDcmVhdGUgYW4gTDIgcGFnZSB0YWJsZSAqLworc3RhdGljIHB0ZV90ICogX19pbml0IGFsbG9jX3B0ZSh2b2lkKQoreworCXJldHVybiBfX2FsbG9jX2Jvb3RtZW0oTDJfS0VSTkVMX1BHVEFCTEVfU0laRSwgSFZfUEFHRV9UQUJMRV9BTElHTiwgMCk7Cit9CisKKy8qCisgKiBMMiBwYWdlIHRhYmxlcyBwZXIgY29udHJvbGxlci4gIFdlIGFsbG9jYXRlIHRoZXNlIGFsbCBhdCBvbmNlIGZyb20KKyAqIHRoZSBib290bWVtIGFsbG9jYXRvciBhbmQgc3RvcmUgdGhlbSBoZXJlLiAgVGhpcyBzYXZlcyBvbiBrZXJuZWwgTDIKKyAqIHBhZ2UgdGFibGUgbWVtb3J5LCBjb21wYXJlZCB0byBhbGxvY2F0aW5nIGEgZnVsbCA2NEsgcGFnZSBwZXIgTDIKKyAqIHBhZ2UgdGFibGUsIGFuZCBhbHNvIG1lYW5zIHRoYXQgaW4gY2FzZXMgd2hlcmUgd2UgdXNlIGh1Z2UgcGFnZXMsCisgKiB3ZSBhcmUgZ3VhcmFudGVlZCB0byBsYXRlciBiZSBhYmxlIHRvIHNoYXR0ZXIgdGhvc2UgaHVnZSBwYWdlcyBhbmQKKyAqIHN3aXRjaCB0byB1c2luZyB0aGVzZSBwYWdlIHRhYmxlcyBpbnN0ZWFkLCB3aXRob3V0IHJlcXVpcmluZworICogZnVydGhlciBhbGxvY2F0aW9uLiAgRWFjaCBsMl9wdGVzW10gZW50cnkgcG9pbnRzIHRvIHRoZSBmaXJzdCBwYWdlCisgKiB0YWJsZSBmb3IgdGhlIGZpcnN0IGh1Z2VwYWdlLXNpemUgcGllY2Ugb2YgbWVtb3J5IG9uIHRoZQorICogY29udHJvbGxlcjsgb3RoZXIgcGFnZSB0YWJsZXMgYXJlIGp1c3QgaW5kZXhlZCBkaXJlY3RseSwgaS5lLiB0aGUKKyAqIEwyIHBhZ2UgdGFibGVzIGFyZSBjb250aWd1b3VzIGluIG1lbW9yeSBmb3IgZWFjaCBjb250cm9sbGVyLgorICovCitzdGF0aWMgcHRlX3QgKmwyX3B0ZXNbTUFYX05VTU5PREVTXTsKK3N0YXRpYyBpbnQgbnVtX2wyX3B0ZXNbTUFYX05VTU5PREVTXTsKKworc3RhdGljIHZvaWQgaW5pdF9wcmVhbGxvY19wdGVzKGludCBub2RlLCBpbnQgcGFnZXMpCit7CisJQlVHX09OKHBhZ2VzICYgKEhWX0wyX0VOVFJJRVMtMSkpOworCWlmIChwYWdlcykgeworCQludW1fbDJfcHRlc1tub2RlXSA9IHBhZ2VzOworCQlsMl9wdGVzW25vZGVdID0gX19hbGxvY19ib290bWVtKHBhZ2VzICogc2l6ZW9mKHB0ZV90KSwKKwkJCQkJCUhWX1BBR0VfVEFCTEVfQUxJR04sIDApOworCX0KK30KKworcHRlX3QgKmdldF9wcmVhbGxvY19wdGUodW5zaWduZWQgbG9uZyBwZm4pCit7CisJaW50IG5vZGUgPSBwZm5fdG9fbmlkKHBmbik7CisJcGZuICY9IH4oLTFVTCA8PCAoTlJfUEFfSElHSEJJVF9TSElGVCAtIFBBR0VfU0hJRlQpKTsKKwlCVUdfT04obm9kZSA+PSBNQVhfTlVNTk9ERVMpOworCUJVR19PTihwZm4gPj0gbnVtX2wyX3B0ZXNbbm9kZV0pOworCXJldHVybiAmbDJfcHRlc1tub2RlXVtwZm5dOworfQorCisvKgorICogV2hhdCBjYWNoaW5nIGRvIHdlIGV4cGVjdCBwYWdlcyBmcm9tIHRoZSBoZWFwIHRvIGhhdmUgd2hlbgorICogdGhleSBhcmUgYWxsb2NhdGVkIGR1cmluZyBib290dXA/ICAoT25jZSB3ZSd2ZSBpbnN0YWxsZWQgdGhlCisgKiAicmVhbCIgc3dhcHBlcl9wZ19kaXIuKQorICovCitzdGF0aWMgaW50IGluaXRpYWxfaGVhcF9ob21lKHZvaWQpCit7CisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJaWYgKGhhc2hfZGVmYXVsdCkKKwkJcmV0dXJuIFBBR0VfSE9NRV9IQVNIOworI2VuZGlmCisJcmV0dXJuIHNtcF9wcm9jZXNzb3JfaWQoKTsKK30KKworLyoKKyAqIFBsYWNlIGEgcG9pbnRlciB0byBhbiBMMiBwYWdlIHRhYmxlIGluIGEgbWlkZGxlIHBhZ2UKKyAqIGRpcmVjdG9yeSBlbnRyeS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGFzc2lnbl9wdGUocG1kX3QgKnBtZCwgcHRlX3QgKnBhZ2VfdGFibGUpCit7CisJcGh5c19hZGRyX3QgcGEgPSBfX3BhKHBhZ2VfdGFibGUpOworCXVuc2lnbmVkIGxvbmcgbDJfcHRmbiA9IHBhID4+IEhWX0xPRzJfUEFHRV9UQUJMRV9BTElHTjsKKwlwdGVfdCBwdGV2YWwgPSBodl9wdGVfc2V0X3B0Zm4oX19wZ3Byb3QoX1BBR0VfVEFCTEUpLCBsMl9wdGZuKTsKKwlCVUdfT04oKHBhICYgKEhWX1BBR0VfVEFCTEVfQUxJR04tMSkpICE9IDApOworCXB0ZXZhbCA9IHB0ZV9zZXRfaG9tZShwdGV2YWwsIGluaXRpYWxfaGVhcF9ob21lKCkpOworCSoocHRlX3QgKilwbWQgPSBwdGV2YWw7CisJaWYgKHBhZ2VfdGFibGUgIT0gKHB0ZV90ICopcG1kX3BhZ2VfdmFkZHIoKnBtZCkpCisJCUJVRygpOworfQorCisjaWZkZWYgX190aWxlZ3hfXworCisjaWYgSFZfTDFfU0laRSAhPSBIVl9MMl9TSVpFCisjIGVycm9yIFJld29yayBhc3N1bXB0aW9uIHRoYXQgTDEgYW5kIEwyIHBhZ2UgdGFibGVzIGFyZSBzYW1lIHNpemUuCisjZW5kaWYKKworLyogU2luY2UgcG1kX3QgYXJyYXlzIGFuZCBwdGVfdCBhcnJheXMgYXJlIHRoZSBzYW1lIHNpemUsIGp1c3QgdXNlIGNhc3RzLiAqLworc3RhdGljIGlubGluZSBwbWRfdCAqYWxsb2NfcG1kKHZvaWQpCit7CisJcmV0dXJuIChwbWRfdCAqKWFsbG9jX3B0ZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzaWduX3BtZChwdWRfdCAqcHVkLCBwbWRfdCAqcG1kKQoreworCWFzc2lnbl9wdGUoKHBtZF90ICopcHVkLCAocHRlX3QgKilwbWQpOworfQorCisjZW5kaWYgLyogX190aWxlZ3hfXyAqLworCisvKiBSZXBsYWNlIHRoZSBnaXZlbiBwbWQgd2l0aCBhIGZ1bGwgUFRFIHRhYmxlLiAqLwordm9pZCBfX2luaXQgc2hhdHRlcl9wbWQocG1kX3QgKnBtZCkKK3sKKwlwdGVfdCAqcHRlID0gZ2V0X3ByZWFsbG9jX3B0ZShwdGVfcGZuKCoocHRlX3QgKilwbWQpKTsKKwlhc3NpZ25fcHRlKHBtZCwgcHRlKTsKK30KKworI2lmZGVmIENPTkZJR19ISUdITUVNCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGNlcnRhaW4gcmFuZ2Ugb2Yga2VybmVsIHZpcnR1YWwgbWVtb3J5CisgKiB3aXRoIG5ldyBib290bWVtIHBhZ2UgdGFibGVzLCBldmVyeXdoZXJlIHBhZ2UgdGFibGVzIGFyZSBtaXNzaW5nIGluCisgKiB0aGUgZ2l2ZW4gcmFuZ2UuCisgKi8KKworLyoKKyAqIE5PVEU6IFRoZSBwYWdldGFibGVzIGFyZSBhbGxvY2F0ZWQgY29udGlndW91cyBvbiB0aGUgcGh5c2ljYWwgc3BhY2UKKyAqIHNvIHdlIGNhbiBjYWNoZSB0aGUgcGxhY2Ugb2YgdGhlIGZpcnN0IG9uZSBhbmQgbW92ZSBhcm91bmQgd2l0aG91dAorICogY2hlY2tpbmcgdGhlIHBnZCBldmVyeSB0aW1lLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGFnZV90YWJsZV9yYW5nZV9pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgcGdkX3QgKnBnZF9iYXNlKQoreworCXBnZF90ICpwZ2Q7CisJaW50IHBnZF9pZHg7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKworCXZhZGRyID0gc3RhcnQ7CisJcGdkX2lkeCA9IHBnZF9pbmRleCh2YWRkcik7CisJcGdkID0gcGdkX2Jhc2UgKyBwZ2RfaWR4OworCisJZm9yICggOyAocGdkX2lkeCA8IFBUUlNfUEVSX1BHRCkgJiYgKHZhZGRyICE9IGVuZCk7IHBnZCsrLCBwZ2RfaWR4KyspIHsKKwkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkX29mZnNldChwZ2QsIHZhZGRyKSwgdmFkZHIpOworCQlpZiAocG1kX25vbmUoKnBtZCkpCisJCQlhc3NpZ25fcHRlKHBtZCwgYWxsb2NfcHRlKCkpOworCQl2YWRkciArPSBQTURfU0laRTsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KKworCisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBrdGV4dF9oYXNoID0gMTsgIC8qIC50ZXh0IHBhZ2VzICovCitzdGF0aWMgaW50IF9faW5pdGRhdGEga2RhdGFfaGFzaCA9IDE7ICAvKiAuZGF0YSBhbmQgLmJzcyBwYWdlcyAqLworaW50IF9fd3JpdGVfb25jZSBoYXNoX2RlZmF1bHQgPSAxOyAgICAgLyoga2VybmVsIGFsbG9jYXRvciBwYWdlcyAqLworRVhQT1JUX1NZTUJPTChoYXNoX2RlZmF1bHQpOworaW50IF9fd3JpdGVfb25jZSBrc3RhY2tfaGFzaCA9IDE7ICAgICAgLyogaWYgbm8gaG9tZWNhY2hpbmcsIHVzZSBoNGggKi8KKyNlbmRpZiAvKiBDSElQX0hBU19DQk9YX0hPTUVfTUFQICovCisKKy8qCisgKiBDUFVzIHRvIHVzZSB0byBmb3Igc3RyaXBpbmcgdGhlIHBhZ2VzIG9mIGtlcm5lbCBkYXRhLiAgSWYgaGFzaC1mb3ItaG9tZQorICogaXMgYXZhaWxhYmxlLCB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYga2NhY2hlX2hhc2ggc2V0cyB1cCB0aGUKKyAqIC5kYXRhIGFuZCAuYnNzIHRvIGJlIHBhZ2UtaG9tZWQsIGFuZCB3ZSBkb24ndCB3YW50IHRoZSBkZWZhdWx0IG1vZGUKKyAqIG9mIHVzaW5nIHRoZSBmdWxsIHNldCBvZiBrZXJuZWwgY3B1cyBmb3IgdGhlIHN0cmlwaW5nLgorICovCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3QgY3B1bWFzayBrZGF0YV9tYXNrOworc3RhdGljIF9faW5pdGRhdGEgaW50IGtkYXRhX2FyZ19zZWVuOworCitpbnQgX193cml0ZV9vbmNlIGtkYXRhX2h1Z2U7ICAgICAgIC8qIGlmIG5vIGhvbWVjYWNoaW5nLCBzbWFsbCBwYWdlcyAqLworCisKKy8qIENvbWJpbmUgYSBnZW5lcmljIHBncHJvdF90IHdpdGggY2FjaGUgaG9tZSB0byBnZXQgYSBjYWNoZS1hd2FyZSBwZ3Byb3QuICovCitzdGF0aWMgcGdwcm90X3QgX19pbml0IGNvbnN0cnVjdF9wZ3Byb3QocGdwcm90X3QgcHJvdCwgaW50IGhvbWUpCit7CisJcHJvdCA9IHB0ZV9zZXRfaG9tZShwcm90LCBob21lKTsKKyNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKKwlpZiAoaG9tZSA9PSBQQUdFX0hPTUVfSU1NVVRBQkxFKSB7CisJCWlmIChrdGV4dF9oYXNoKQorCQkJcHJvdCA9IGh2X3B0ZV9zZXRfbW9kZShwcm90LCBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzKTsKKwkJZWxzZQorCQkJcHJvdCA9IGh2X3B0ZV9zZXRfbW9kZShwcm90LCBIVl9QVEVfTU9ERV9DQUNIRV9OT19MMyk7CisJfQorI2VuZGlmCisJcmV0dXJuIHByb3Q7Cit9CisKKy8qCisgKiBGb3IgYSBnaXZlbiBrZXJuZWwgZGF0YSBWQSwgaG93IHNob3VsZCBpdCBiZSBjYWNoZWQ/CisgKiBXZSByZXR1cm4gdGhlIGNvbXBsZXRlIHBncHJvdF90IHdpdGggY2FjaGluZyBiaXRzIHNldC4KKyAqLworc3RhdGljIHBncHJvdF90IF9faW5pdCBpbml0X3BncHJvdCh1bG9uZyBhZGRyZXNzKQoreworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBwYWdlOworCWVudW0geyBDT0RFX0RFTFRBID0gTUVNX1NWX0lOVFJQVCAtIFBBR0VfT0ZGU0VUIH07CisKKyNpZiBDSElQX0hBU19DQk9YX0hPTUVfTUFQKCkKKwkvKiBGb3Iga2RhdGE9aHVnZSwgZXZlcnl0aGluZyBpcyBqdXN0IGhhc2gtZm9yLWhvbWUuICovCisJaWYgKGtkYXRhX2h1Z2UpCisJCXJldHVybiBjb25zdHJ1Y3RfcGdwcm90KFBBR0VfS0VSTkVMLCBQQUdFX0hPTUVfSEFTSCk7CisjZW5kaWYKKworCS8qIFdlIG1hcCB0aGUgYWxpYXNlZCBwYWdlcyBvZiBwZXJtYW5lbnQgdGV4dCBpbmFjY2Vzc2libGUuICovCisJaWYgKGFkZHJlc3MgPCAodWxvbmcpIF9zaW5pdHRleHQgLSBDT0RFX0RFTFRBKQorCQlyZXR1cm4gUEFHRV9OT05FOworCisJLyoKKwkgKiBXZSBtYXAgcmVhZC1vbmx5IGRhdGEgbm9uLWNvaGVyZW50IGZvciBwZXJmb3JtYW5jZS4gIFdlIGNvdWxkCisJICogdXNlIG5laWdoYm9yaG9vZCBjYWNoaW5nIG9uIFRJTEU2NCwgYnV0IGl0J3Mgbm90IGNsZWFyIGl0J3MgYSB3aW4uCisJICovCisJaWYgKChhZGRyZXNzID49ICh1bG9uZykgX19zdGFydF9yb2RhdGEgJiYKKwkgICAgIGFkZHJlc3MgPCAodWxvbmcpIF9fZW5kX3JvZGF0YSkgfHwKKwkgICAgYWRkcmVzcyA9PSAodWxvbmcpIGVtcHR5X3plcm9fcGFnZSkgeworCQlyZXR1cm4gY29uc3RydWN0X3BncHJvdChQQUdFX0tFUk5FTF9STywgUEFHRV9IT01FX0lNTVVUQUJMRSk7CisJfQorCisJLyogQXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGtlZXAgdGhlIGJvb3QgaW5pdCBzdGFjayBoZXJlLiAqLworCWlmIChhZGRyZXNzID49ICh1bG9uZykmaW5pdF90aHJlYWRfdW5pb24gJiYKKwkgICAgYWRkcmVzcyA8ICh1bG9uZykmaW5pdF90aHJlYWRfdW5pb24gKyBUSFJFQURfU0laRSkKKwkJcmV0dXJuIGNvbnN0cnVjdF9wZ3Byb3QoUEFHRV9LRVJORUwsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKyNpZm5kZWYgX190aWxlZ3hfXworI2lmICFBVE9NSUNfTE9DS1NfRk9VTkRfVklBX1RBQkxFKCkKKwkvKiBGb3JjZSB0aGUgYXRvbWljX2xvY2tzW10gYXJyYXkgcGFnZSB0byBiZSBoYXNoLWZvci1ob21lLiAqLworCWlmIChhZGRyZXNzID09ICh1bG9uZykgYXRvbWljX2xvY2tzKQorCQlyZXR1cm4gY29uc3RydWN0X3BncHJvdChQQUdFX0tFUk5FTCwgUEFHRV9IT01FX0hBU0gpOworI2VuZGlmCisjZW5kaWYKKworCS8qCisJICogRXZlcnl0aGluZyBlbHNlIHRoYXQgaXNuJ3QgZGF0YSBvciBic3MgaXMgaGVhcCwgc28gbWFyayBpdAorCSAqIHdpdGggdGhlIGluaXRpYWwgaGVhcCBob21lIChoYXNoLWZvci1ob21lLCBvciB0aGlzIGNwdSkuICBUaGlzCisJICogaW5jbHVkZXMgYW55IGFkZHJlc3NlcyBhZnRlciB0aGUgbG9hZGVkIGltYWdlIGFuZCBhbnkgYWRkcmVzcyBiZWZvcmUKKwkgKiBfZWluaXRkYXRhLCBzaW5jZSB3ZSBhbHJlYWR5IGNhcHR1cmVkIHRoZSBjYXNlIG9mIHRleHQgYmVmb3JlCisJICogX3Npbml0dGV4dCwgYW5kIF9fcGEoZWluaXR0ZXh0KSBpcyBhcHByb3hpbWF0ZWx5IF9fcGEoc2luaXRkYXRhKS4KKwkgKgorCSAqIEFsbCB0aGUgTE9XTUVNIHBhZ2VzIHRoYXQgd2UgbWFyayB0aGlzIHdheSB3aWxsIGdldCB0aGVpcgorCSAqIHN0cnVjdCBwYWdlIGhvbWVjYWNoZSBwcm9wZXJseSBtYXJrZWQgbGF0ZXIsIGluIHNldF9wYWdlX2hvbWVzKCkuCisJICogVGhlIEhJR0hNRU0gcGFnZXMgd2UgbGVhdmUgd2l0aCBhIGRlZmF1bHQgemVybyBmb3IgdGhlaXIKKwkgKiBob21lcywgYnV0IHdpdGggYSB6ZXJvIGZyZWVfdGltZSB3ZSBkb24ndCBoYXZlIHRvIGFjdHVhbGx5CisJICogZG8gYSBmbHVzaCBhY3Rpb24gdGhlIGZpcnN0IHRpbWUgd2UgdXNlIHRoZW0sIGVpdGhlci4KKwkgKi8KKwlpZiAoYWRkcmVzcyA+PSAodWxvbmcpIF9lbmQgfHwgYWRkcmVzcyA8ICh1bG9uZykgX2Vpbml0ZGF0YSkKKwkJcmV0dXJuIGNvbnN0cnVjdF9wZ3Byb3QoUEFHRV9LRVJORUwsIGluaXRpYWxfaGVhcF9ob21lKCkpOworCisjaWYgQ0hJUF9IQVNfQ0JPWF9IT01FX01BUCgpCisJLyogVXNlIGhhc2gtZm9yLWhvbWUgaWYgcmVxdWVzdGVkIGZvciBkYXRhL2Jzcy4gKi8KKwlpZiAoa2RhdGFfaGFzaCkKKwkJcmV0dXJuIGNvbnN0cnVjdF9wZ3Byb3QoUEFHRV9LRVJORUwsIFBBR0VfSE9NRV9IQVNIKTsKKyNlbmRpZgorCisJLyoKKwkgKiBNYWtlIHRoZSB3MWRhdGEgaG9tZWQgbGlrZSBoZWFwIHRvIHN0YXJ0IHdpdGgsIHRvIGF2b2lkCisJICogbWFraW5nIGl0IHBhcnQgb2YgdGhlIHBhZ2Utc3RyaXBlZCBkYXRhIGFyZWEgd2hlbiB3ZSdyZSBqdXN0CisJICogZ29pbmcgdG8gY29udmVydCBpdCB0byByZWFkLW9ubHkgc29vbiBhbnl3YXkuCisJICovCisJaWYgKGFkZHJlc3MgPj0gKHVsb25nKV9fdzFkYXRhX2JlZ2luICYmIGFkZHJlc3MgPCAodWxvbmcpX193MWRhdGFfZW5kKQorCQlyZXR1cm4gY29uc3RydWN0X3BncHJvdChQQUdFX0tFUk5FTCwgaW5pdGlhbF9oZWFwX2hvbWUoKSk7CisKKwkvKgorCSAqIE90aGVyd2lzZSB3ZSBqdXN0IGhhbmQgb3V0IGNvbnNlY3V0aXZlIGNwdXMuICBUbyBhdm9pZAorCSAqIHJlcXVpcmluZyB0aGlzIGZ1bmN0aW9uIHRvIGhvbGQgc3RhdGUsIHdlIGp1c3Qgd2FsayBmb3J3YXJkIGZyb20KKwkgKiBfc2RhdGEgYnkgUEFHRV9TSVpFLCBza2lwcGluZyB0aGUgcmVhZG9ubHkgYW5kIGluaXQgZGF0YSwgdG8gcmVhY2gKKwkgKiB0aGUgcmVxdWVzdGVkIGFkZHJlc3MsIHdoaWxlIHdhbGtpbmcgY3B1IGhvbWUgYXJvdW5kIGtkYXRhX21hc2suCisJICogVGhpcyBpcyB0eXBpY2FsbHkgbm8gbW9yZSB0aGFuIGEgZG96ZW4gb3Igc28gaXRlcmF0aW9ucy4KKwkgKi8KKwlwYWdlID0gKCgodWxvbmcpX193MWRhdGFfZW5kKSArIFBBR0VfU0laRSAtIDEpICYgUEFHRV9NQVNLOworCUJVR19PTihhZGRyZXNzIDwgcGFnZSB8fCBhZGRyZXNzID49ICh1bG9uZylfZW5kKTsKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KCZrZGF0YV9tYXNrKTsKKwlmb3IgKDsgcGFnZSA8IGFkZHJlc3M7IHBhZ2UgKz0gUEFHRV9TSVpFKSB7CisJCWlmIChwYWdlID49ICh1bG9uZykmaW5pdF90aHJlYWRfdW5pb24gJiYKKwkJICAgIHBhZ2UgPCAodWxvbmcpJmluaXRfdGhyZWFkX3VuaW9uICsgVEhSRUFEX1NJWkUpCisJCQljb250aW51ZTsKKwkJaWYgKHBhZ2UgPT0gKHVsb25nKWVtcHR5X3plcm9fcGFnZSkKKwkJCWNvbnRpbnVlOworI2lmbmRlZiBfX3RpbGVneF9fCisjaWYgIUFUT01JQ19MT0NLU19GT1VORF9WSUFfVEFCTEUoKQorCQlpZiAocGFnZSA9PSAodWxvbmcpYXRvbWljX2xvY2tzKQorCQkJY29udGludWU7CisjZW5kaWYKKyNlbmRpZgorCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCAma2RhdGFfbWFzayk7CisJCWlmIChjcHUgPT0gTlJfQ1BVUykKKwkJCWNwdSA9IGNwdW1hc2tfZmlyc3QoJmtkYXRhX21hc2spOworCX0KKwlyZXR1cm4gY29uc3RydWN0X3BncHJvdChQQUdFX0tFUk5FTCwgY3B1KTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB1cCBob3cgd2UgY2FjaGUgdGhlIGtlcm5lbCB0ZXh0LiAgSWYgd2UgaGF2ZQorICogaGFzaC1mb3ItaG9tZSBzdXBwb3J0LCBub3JtYWxseSB0aGF0IGlzIHVzZWQgaW5zdGVhZCAoc2VlIHRoZQorICoga2NhY2hlX2hhc2ggYm9vdCBmbGFnIGZvciBtb3JlIGluZm9ybWF0aW9uKS4gIEJ1dCBpZiB3ZSBlbmQgdXAKKyAqIHVzaW5nIGEgcGFnZS1iYXNlZCBjYWNoaW5nIHRlY2huaXF1ZSwgdGhpcyBvcHRpb24gc2V0cyB1cCB0aGUKKyAqIGRldGFpbHMgb2YgdGhhdC4gIEluIGFkZGl0aW9uLCB0aGUgImt0ZXh0PW5vY2FjaGUiIG9wdGlvbiBtYXkKKyAqIGFsd2F5cyBiZSB1c2VkIHRvIGRpc2FibGUgbG9jYWwgY2FjaGluZyBvZiB0ZXh0IHBhZ2VzLCBpZiBkZXNpcmVkLgorICovCisKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBrdGV4dF9hcmdfc2VlbjsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBrdGV4dF9zbWFsbDsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBrdGV4dF9sb2NhbDsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBrdGV4dF9hbGw7CitzdGF0aWMgaW50IF9faW5pdGRhdGEga3RleHRfbm9uZGF0YXBsYW5lOworc3RhdGljIGludCBfX2luaXRkYXRhIGt0ZXh0X25vY2FjaGU7CitzdGF0aWMgc3RydWN0IGNwdW1hc2sgX19pbml0ZGF0YSBrdGV4dF9tYXNrOworCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9rdGV4dChjaGFyICpzdHIpCit7CisJaWYgKHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIElmIHlvdSBoYXZlIGEgbGVhZGluZyAibm9jYWNoZSIsIHR1cm4gb2ZmIGt0ZXh0IGNhY2hpbmcgKi8KKwlpZiAoc3RybmNtcChzdHIsICJub2NhY2hlIiwgNykgPT0gMCkgeworCQlrdGV4dF9ub2NhY2hlID0gMTsKKwkJcHJfaW5mbygia3RleHQ6IGRpc2FibGluZyBsb2NhbCBjYWNoaW5nIG9mIGtlcm5lbCB0ZXh0XG4iKTsKKwkJc3RyICs9IDc7CisJCWlmICgqc3RyID09ICcsJykKKwkJCSsrc3RyOworCQlpZiAoKnN0ciA9PSAnXDAnKQorCQkJcmV0dXJuIDA7CisJfQorCisJa3RleHRfYXJnX3NlZW4gPSAxOworCisJLyogRGVmYXVsdCBzZXR0aW5nIG9uIFRpbGU2NDogdXNlIGEgaHVnZSBwYWdlICovCisJaWYgKHN0cmNtcChzdHIsICJodWdlIikgPT0gMCkKKwkJcHJfaW5mbygia3RleHQ6IHVzaW5nIG9uZSBodWdlIGxvY2FsbHkgY2FjaGVkIHBhZ2VcbiIpOworCisJLyogUGF5IFRMQiBjb3N0IGJ1dCBnZXQgbm8gY2FjaGUgYmVuZWZpdDogY2FjaGUgc21hbGwgcGFnZXMgbG9jYWxseSAqLworCWVsc2UgaWYgKHN0cmNtcChzdHIsICJsb2NhbCIpID09IDApIHsKKwkJa3RleHRfc21hbGwgPSAxOworCQlrdGV4dF9sb2NhbCA9IDE7CisJCXByX2luZm8oImt0ZXh0OiB1c2luZyBzbWFsbCBwYWdlcyB3aXRoIGxvY2FsIGNhY2hpbmdcbiIpOworCX0KKworCS8qIE5laWdoYm9yaG9vZCBjYWNoZSBrdGV4dCBwYWdlcyBvbiBhbGwgY3B1cy4gKi8KKwllbHNlIGlmIChzdHJjbXAoc3RyLCAiYWxsIikgPT0gMCkgeworCQlrdGV4dF9zbWFsbCA9IDE7CisJCWt0ZXh0X2FsbCA9IDE7CisJCXByX2luZm8oImt0ZXh0OiB1c2luZyBtYXhpbWFsIGNhY2hpbmcgbmVpZ2hib3Job29kXG4iKTsKKwl9CisKKworCS8qIE5laWdoYm9yaG9vZCBrdGV4dCBwYWdlcyBvbiBzcGVjaWZpZWQgbWFzayAqLworCWVsc2UgaWYgKGNwdWxpc3RfcGFyc2Uoc3RyLCAma3RleHRfbWFzaykgPT0gMCkgeworCQljaGFyIGJ1ZltOUl9DUFVTICogNV07CisJCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICZrdGV4dF9tYXNrKTsKKwkJaWYgKGNwdW1hc2tfd2VpZ2h0KCZrdGV4dF9tYXNrKSA+IDEpIHsKKwkJCWt0ZXh0X3NtYWxsID0gMTsKKwkJCXByX2luZm8oImt0ZXh0OiB1c2luZyBjYWNoaW5nIG5laWdoYm9yaG9vZCAlcyAiCisJCQkgICAgICAgIndpdGggc21hbGwgcGFnZXNcbiIsIGJ1Zik7CisJCX0gZWxzZSB7CisJCQlwcl9pbmZvKCJrdGV4dDogY2FjaGluZyBvbiBjcHUgJXMgd2l0aCBvbmUgaHVnZSBwYWdlXG4iLAorCQkJICAgICAgIGJ1Zik7CisJCX0KKwl9CisKKwllbHNlIGlmICgqc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgia3RleHQiLCBzZXR1cF9rdGV4dCk7CisKKworc3RhdGljIGlubGluZSBwZ3Byb3RfdCBrdGV4dF9zZXRfbm9jYWNoZShwZ3Byb3RfdCBwcm90KQoreworCWlmICgha3RleHRfbm9jYWNoZSkKKwkJcHJvdCA9IGh2X3B0ZV9zZXRfbmMocHJvdCk7CisjaWYgQ0hJUF9IQVNfTkNfQU5EX05PQUxMT0NfQklUUygpCisJZWxzZQorCQlwcm90ID0gaHZfcHRlX3NldF9ub19hbGxvY19sMihwcm90KTsKKyNlbmRpZgorCXJldHVybiBwcm90OworfQorCisjaWZuZGVmIF9fdGlsZWd4X18KK3N0YXRpYyBwbWRfdCAqX19pbml0IGdldF9wbWQocGdkX3QgcGd0YWJsZXNbXSwgdW5zaWduZWQgbG9uZyB2YSkKK3sKKwlyZXR1cm4gcG1kX29mZnNldChwdWRfb2Zmc2V0KCZwZ3RhYmxlc1twZ2RfaW5kZXgodmEpXSwgdmEpLCB2YSk7Cit9CisjZWxzZQorc3RhdGljIHBtZF90ICpfX2luaXQgZ2V0X3BtZChwZ2RfdCBwZ3RhYmxlc1tdLCB1bnNpZ25lZCBsb25nIHZhKQoreworCXB1ZF90ICpwdWQgPSBwdWRfb2Zmc2V0KCZwZ3RhYmxlc1twZ2RfaW5kZXgodmEpXSwgdmEpOworCWlmIChwdWRfbm9uZSgqcHVkKSkKKwkJYXNzaWduX3BtZChwdWQsIGFsbG9jX3BtZCgpKTsKKwlyZXR1cm4gcG1kX29mZnNldChwdWQsIHZhKTsKK30KKyNlbmRpZgorCisvKiBUZW1wb3JhcnkgcGFnZSB0YWJsZSB3ZSB1c2UgZm9yIHN0YWdpbmcuICovCitzdGF0aWMgcGdkX3QgcGd0YWJsZXNbUFRSU19QRVJfUEdEXQorIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5pbml0LnBhZ2UiKSkpOworCisvKgorICogVGhpcyBtYXBzIHRoZSBwaHlzaWNhbCBtZW1vcnkgdG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSwgYSB0b3RhbAorICogb2YgbWF4X2xvd19wZm4gcGFnZXMsIGJ5IGNyZWF0aW5nIHBhZ2UgdGFibGVzIHN0YXJ0aW5nIGZyb20gYWRkcmVzcworICogUEFHRV9PRkZTRVQuCisgKgorICogVGhpcyByb3V0aW5lIHRyYW5zaXRpb25zIHVzIGZyb20gdXNpbmcgYSBzZXQgb2YgY29tcGlsZWQtaW4gbGFyZ2UKKyAqIHBhZ2VzIHRvIHVzaW5nIHNvbWUgbW9yZSBwcmVjaXNlIGNhY2hpbmcsIGluY2x1ZGluZyByZW1vdmluZyBhY2Nlc3MKKyAqIHRvIGNvZGUgcGFnZXMgbWFwcGVkIGF0IFBBR0VfT0ZGU0VUIChleGVjdXRlZCBvbmx5IGF0IE1FTV9TVl9TVEFSVCkKKyAqIG1hcmtpbmcgcmVhZC1vbmx5IGRhdGEgYXMgbG9jYWxseSBjYWNoZWFibGUsIHN0cmlwaW5nIHRoZSByZW1haW5pbmcKKyAqIC5kYXRhIGFuZCAuYnNzIGFjcm9zcyBhbGwgdGhlIGF2YWlsYWJsZSB0aWxlcywgYW5kIHJlbW92aW5nIGFjY2VzcworICogdG8gcGFnZXMgYWJvdmUgdGhlIHRvcCBvZiBSQU0gKHRodXMgZW5zdXJpbmcgYSBwYWdlIGZhdWx0IGZyb20gYSBiYWQKKyAqIHZpcnR1YWwgYWRkcmVzcyByYXRoZXIgdGhhbiBhIGh5cGVydmlzb3Igc2hvb3QgZG93biBmb3IgYWNjZXNzaW5nCisgKiBtZW1vcnkgb3V0c2lkZSB0aGUgYXNzaWduZWQgbGltaXRzKS4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQocGdkX3QgKnBnZF9iYXNlKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcGZuOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKwlpbnQgcHRlX29mczsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbXlfY3B1X21hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3RydWN0IGNwdW1hc2sga3N0cmlwZV9tYXNrOworCWludCByYywgaTsKKworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorCWlmIChrdGV4dF9hcmdfc2VlbiAmJiBrdGV4dF9oYXNoKSB7CisJCXByX3dhcm5pbmcoIndhcm5pbmc6IFwia3RleHRcIiBib290IGFyZ3VtZW50IGlnbm9yZWQiCisJCQkgICAiIGlmIFwia2NhY2hlX2hhc2hcIiBzZXRzIHVwIHRleHQgaGFzaC1mb3ItaG9tZVxuIik7CisJCWt0ZXh0X3NtYWxsID0gMDsKKwl9CisKKwlpZiAoa2RhdGFfYXJnX3NlZW4gJiYga2RhdGFfaGFzaCkgeworCQlwcl93YXJuaW5nKCJ3YXJuaW5nOiBcImtkYXRhXCIgYm9vdCBhcmd1bWVudCBpZ25vcmVkIgorCQkJICAgIiBpZiBcImtjYWNoZV9oYXNoXCIgc2V0cyB1cCBkYXRhIGhhc2gtZm9yLWhvbWVcbiIpOworCX0KKworCWlmIChrZGF0YV9odWdlICYmICFoYXNoX2RlZmF1bHQpIHsKKwkJcHJfd2FybmluZygid2FybmluZzogZGlzYWJsaW5nIFwia2RhdGE9aHVnZVwiOyByZXF1aXJlcyIKKwkJCSAgIiBrY2FjaGVfaGFzaD1hbGwgb3IgPWFsbGJ1dHN0YWNrXG4iKTsKKwkJa2RhdGFfaHVnZSA9IDA7CisJfQorI2VuZGlmCisKKwkvKgorCSAqIFNldCB1cCBhIG1hc2sgZm9yIGNwdXMgdG8gdXNlIGZvciBrZXJuZWwgc3RyaXBpbmcuCisJICogVGhpcyBpcyBub3JtYWxseSBhbGwgY3B1cywgYnV0IG1pbnVzIGRhdGFwbGFuZSBjcHVzIGlmIGFueS4KKwkgKiBJZiB0aGUgZGF0YXBsYW5lIGNvdmVycyB0aGUgd2hvbGUgY2hpcCwgd2Ugc3RyaXBlIG92ZXIKKwkgKiB0aGUgd2hvbGUgY2hpcCB0b28uCisJICovCisJY3B1bWFza19jb3B5KCZrc3RyaXBlX21hc2ssIGNwdV9wb3NzaWJsZV9tYXNrKTsKKwlpZiAoIWtkYXRhX2FyZ19zZWVuKQorCQlrZGF0YV9tYXNrID0ga3N0cmlwZV9tYXNrOworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwgaW4gTDIgcGFnZSB0YWJsZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyArK2kpIHsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBub2RlX2xvd21lbV9lbmRfcGZuW2ldOworI2Vsc2UKKwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gbm9kZV9lbmRfcGZuW2ldOworI2VuZGlmCisJCXVuc2lnbmVkIGxvbmcgZW5kX2h1Z2VfcGZuID0gMDsKKworCQkvKiBQcmUtc2hhdHRlciB0aGUgbGFzdCBodWdlIHBhZ2UgdG8gYWxsb3cgcGVyLWNwdSBwYWdlcy4gKi8KKwkJaWYgKGtkYXRhX2h1Z2UpCisJCQllbmRfaHVnZV9wZm4gPSBlbmRfcGZuIC0gKEhQQUdFX1NJWkUgPj4gUEFHRV9TSElGVCk7CisKKwkJcGZuID0gbm9kZV9zdGFydF9wZm5baV07CisKKwkJLyogQWxsb2NhdGUgZW5vdWdoIG1lbW9yeSB0byBob2xkIEwyIHBhZ2UgdGFibGVzIGZvciBub2RlLiAqLworCQlpbml0X3ByZWFsbG9jX3B0ZXMoaSwgZW5kX3BmbiAtIHBmbik7CisKKwkJYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSBwZm5fdG9fa2FkZHIocGZuKTsKKwkJd2hpbGUgKHBmbiA8IGVuZF9wZm4pIHsKKwkJCUJVR19PTihhZGRyZXNzICYgKEhQQUdFX1NJWkUtMSkpOworCQkJcG1kID0gZ2V0X3BtZChwZ3RhYmxlcywgYWRkcmVzcyk7CisJCQlwdGUgPSBnZXRfcHJlYWxsb2NfcHRlKHBmbik7CisJCQlpZiAocGZuIDwgZW5kX2h1Z2VfcGZuKSB7CisJCQkJcGdwcm90X3QgcHJvdCA9IGluaXRfcGdwcm90KGFkZHJlc3MpOworCQkJCSoocHRlX3QgKilwbWQgPSBwdGVfbWtodWdlKHBmbl9wdGUocGZuLCBwcm90KSk7CisJCQkJZm9yIChwdGVfb2ZzID0gMDsgcHRlX29mcyA8IFBUUlNfUEVSX1BURTsKKwkJCQkgICAgIHBmbisrLCBwdGVfb2ZzKyssIGFkZHJlc3MgKz0gUEFHRV9TSVpFKQorCQkJCQlwdGVbcHRlX29mc10gPSBwZm5fcHRlKHBmbiwgcHJvdCk7CisJCQl9IGVsc2UgeworCQkJCWlmIChrZGF0YV9odWdlKQorCQkJCQlwcmludGsoS0VSTl9ERUJVRyAicHJlLXNoYXR0ZXJlZCBodWdlIgorCQkJCQkgICAgICAgIiBwYWdlIGF0ICUjbHhcbiIsIGFkZHJlc3MpOworCQkJCWZvciAocHRlX29mcyA9IDA7IHB0ZV9vZnMgPCBQVFJTX1BFUl9QVEU7CisJCQkJICAgICBwZm4rKywgcHRlX29mcysrLCBhZGRyZXNzICs9IFBBR0VfU0laRSkgeworCQkJCQlwZ3Byb3RfdCBwcm90ID0gaW5pdF9wZ3Byb3QoYWRkcmVzcyk7CisJCQkJCXB0ZVtwdGVfb2ZzXSA9IHBmbl9wdGUocGZuLCBwcm90KTsKKwkJCQl9CisJCQkJYXNzaWduX3B0ZShwbWQsIHB0ZSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFNldCBvciBjaGVjayBrdGV4dF9tYXAgbm93IHRoYXQgd2UgaGF2ZSBjcHVfcG9zc2libGVfbWFzaworCSAqIGFuZCBrc3RyaXBlX21hc2sgdG8gd29yayB3aXRoLgorCSAqLworCWlmIChrdGV4dF9hbGwpCisJCWNwdW1hc2tfY29weSgma3RleHRfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOworCWVsc2UgaWYgKGt0ZXh0X25vbmRhdGFwbGFuZSkKKwkJa3RleHRfbWFzayA9IGtzdHJpcGVfbWFzazsKKwllbHNlIGlmICghY3B1bWFza19lbXB0eSgma3RleHRfbWFzaykpIHsKKwkJLyogU2FuaXR5LWNoZWNrIGFueSBtYXNrIHRoYXQgd2FzIHJlcXVlc3RlZCAqLworCQlzdHJ1Y3QgY3B1bWFzayBiYWQ7CisJCWNwdW1hc2tfYW5kbm90KCZiYWQsICZrdGV4dF9tYXNrLCBjcHVfcG9zc2libGVfbWFzayk7CisJCWNwdW1hc2tfYW5kKCZrdGV4dF9tYXNrLCAma3RleHRfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOworCQlpZiAoIWNwdW1hc2tfZW1wdHkoJmJhZCkpIHsKKwkJCWNoYXIgYnVmW05SX0NQVVMgKiA1XTsKKwkJCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICZiYWQpOworCQkJcHJfaW5mbygia3RleHQ6IG5vdCB1c2luZyB1bmF2YWlsYWJsZSBjcHVzICVzXG4iLCBidWYpOworCQl9CisJCWlmIChjcHVtYXNrX2VtcHR5KCZrdGV4dF9tYXNrKSkgeworCQkJcHJfd2FybmluZygia3RleHQ6IG5vIHZhbGlkIGNwdXM7IGNhY2hpbmcgb24gJWQuXG4iLAorCQkJCSAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCQljcHVtYXNrX2NvcHkoJmt0ZXh0X21hc2ssCisJCQkJICAgICBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOworCQl9CisJfQorCisJYWRkcmVzcyA9IE1FTV9TVl9JTlRSUFQ7CisJcG1kID0gZ2V0X3BtZChwZ3RhYmxlcywgYWRkcmVzcyk7CisJaWYgKGt0ZXh0X3NtYWxsKSB7CisJCS8qIEFsbG9jYXRlIGFuIEwyIFBURSBmb3IgdGhlIGtlcm5lbCB0ZXh0ICovCisJCWludCBjcHUgPSAwOworCQlwZ3Byb3RfdCBwcm90ID0gY29uc3RydWN0X3BncHJvdChQQUdFX0tFUk5FTF9FWEVDLAorCQkJCQkJIFBBR0VfSE9NRV9JTU1VVEFCTEUpOworCisJCWlmIChrdGV4dF9sb2NhbCkgeworCQkJaWYgKGt0ZXh0X25vY2FjaGUpCisJCQkJcHJvdCA9IGh2X3B0ZV9zZXRfbW9kZShwcm90LAorCQkJCQkJICAgICAgIEhWX1BURV9NT0RFX1VOQ0FDSEVEKTsKKwkJCWVsc2UKKwkJCQlwcm90ID0gaHZfcHRlX3NldF9tb2RlKHByb3QsCisJCQkJCQkgICAgICAgSFZfUFRFX01PREVfQ0FDSEVfTk9fTDMpOworCQl9IGVsc2UgeworCQkJcHJvdCA9IGh2X3B0ZV9zZXRfbW9kZShwcm90LAorCQkJCQkgICAgICAgSFZfUFRFX01PREVfQ0FDSEVfVElMRV9MMyk7CisJCQljcHUgPSBjcHVtYXNrX2ZpcnN0KCZrdGV4dF9tYXNrKTsKKworCQkJcHJvdCA9IGt0ZXh0X3NldF9ub2NhY2hlKHByb3QpOworCQl9CisKKwkJQlVHX09OKGFkZHJlc3MgIT0gKHVuc2lnbmVkIGxvbmcpX3N0ZXh0KTsKKwkJcGZuID0gMDsgIC8qIGNvZGUgc3RhcnRzIGF0IFBBIDAgKi8KKwkJcHRlID0gYWxsb2NfcHRlKCk7CisJCWZvciAocHRlX29mcyA9IDA7IGFkZHJlc3MgPCAodW5zaWduZWQgbG9uZylfZWluaXR0ZXh0OworCQkgICAgIHBmbisrLCBwdGVfb2ZzKyssIGFkZHJlc3MgKz0gUEFHRV9TSVpFKSB7CisJCQlpZiAoIWt0ZXh0X2xvY2FsKSB7CisJCQkJcHJvdCA9IHNldF9yZW1vdGVfY2FjaGVfY3B1KHByb3QsIGNwdSk7CisJCQkJY3B1ID0gY3B1bWFza19uZXh0KGNwdSwgJmt0ZXh0X21hc2spOworCQkJCWlmIChjcHUgPT0gTlJfQ1BVUykKKwkJCQkJY3B1ID0gY3B1bWFza19maXJzdCgma3RleHRfbWFzayk7CisJCQl9CisJCQlwdGVbcHRlX29mc10gPSBwZm5fcHRlKHBmbiwgcHJvdCk7CisJCX0KKwkJYXNzaWduX3B0ZShwbWQsIHB0ZSk7CisJfSBlbHNlIHsKKwkJcHRlX3QgcHRldmFsID0gcGZuX3B0ZSgwLCBQQUdFX0tFUk5FTF9FWEVDKTsKKwkJcHRldmFsID0gcHRlX21raHVnZShwdGV2YWwpOworI2lmIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKQorCQlpZiAoa3RleHRfaGFzaCkgeworCQkJcHRldmFsID0gaHZfcHRlX3NldF9tb2RlKHB0ZXZhbCwKKwkJCQkJCSBIVl9QVEVfTU9ERV9DQUNIRV9IQVNIX0wzKTsKKwkJCXB0ZXZhbCA9IGt0ZXh0X3NldF9ub2NhY2hlKHB0ZXZhbCk7CisJCX0gZWxzZQorI2VuZGlmIC8qIENISVBfSEFTX0NCT1hfSE9NRV9NQVAoKSAqLworCQlpZiAoY3B1bWFza193ZWlnaHQoJmt0ZXh0X21hc2spID09IDEpIHsKKwkJCXB0ZXZhbCA9IHNldF9yZW1vdGVfY2FjaGVfY3B1KHB0ZXZhbCwKKwkJCQkJICAgICAgY3B1bWFza19maXJzdCgma3RleHRfbWFzaykpOworCQkJcHRldmFsID0gaHZfcHRlX3NldF9tb2RlKHB0ZXZhbCwKKwkJCQkJCSBIVl9QVEVfTU9ERV9DQUNIRV9USUxFX0wzKTsKKwkJCXB0ZXZhbCA9IGt0ZXh0X3NldF9ub2NhY2hlKHB0ZXZhbCk7CisJCX0gZWxzZSBpZiAoa3RleHRfbm9jYWNoZSkKKwkJCXB0ZXZhbCA9IGh2X3B0ZV9zZXRfbW9kZShwdGV2YWwsCisJCQkJCQkgSFZfUFRFX01PREVfVU5DQUNIRUQpOworCQllbHNlCisJCQlwdGV2YWwgPSBodl9wdGVfc2V0X21vZGUocHRldmFsLAorCQkJCQkJIEhWX1BURV9NT0RFX0NBQ0hFX05PX0wzKTsKKwkJKihwdGVfdCAqKXBtZCA9IHB0ZXZhbDsKKwl9CisKKwkvKiBTZXQgc3dhcHBlcl9wZ3Byb3QgaGVyZSBzbyBpdCBpcyBmbHVzaGVkIHRvIG1lbW9yeSByaWdodCBhd2F5LiAqLworCXN3YXBwZXJfcGdwcm90ID0gaW5pdF9wZ3Byb3QoKHVuc2lnbmVkIGxvbmcpc3dhcHBlcl9wZ19kaXIpOworCisJLyoKKwkgKiBTaW5jZSB3ZSBtYXkgYmUgY2hhbmdpbmcgdGhlIGNhY2hpbmcgb2YgdGhlIHN0YWNrIGFuZCBwYWdlCisJICogdGFibGUgaXRzZWxmLCB3ZSBpbnZva2UgYW4gYXNzZW1ibHkgaGVscGVyIHRvIGRvIHRoZQorCSAqIGZvbGxvd2luZyBzdGVwczoKKwkgKgorCSAqICAtIGZsdXNoIHRoZSBjYWNoZSBzbyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5IHNsYXRlCisJICogIC0gaW5zdGFsbCBwZ3RhYmxlc1tdIGFzIHRoZSByZWFsIHBhZ2UgdGFibGUKKwkgKiAgLSBmbHVzaCB0aGUgVExCIHNvIHRoZSBuZXcgcGFnZSB0YWJsZSB0YWtlcyBlZmZlY3QKKwkgKi8KKwlyYyA9IGZsdXNoX2FuZF9pbnN0YWxsX2NvbnRleHQoX19wYShwZ3RhYmxlcyksCisJCQkJICAgICAgIGluaXRfcGdwcm90KCh1bnNpZ25lZCBsb25nKXBndGFibGVzKSwKKwkJCQkgICAgICAgX19nZXRfY3B1X3ZhcihjdXJyZW50X2FzaWQpLAorCQkJCSAgICAgICBjcHVtYXNrX2JpdHMobXlfY3B1X21hc2spKTsKKwlCVUdfT04ocmMgIT0gMCk7CisKKwkvKiBDb3B5IHRoZSBwYWdlIHRhYmxlIGJhY2sgdG8gdGhlIG5vcm1hbCBzd2FwcGVyX3BnX2Rpci4gKi8KKwltZW1jcHkocGdkX2Jhc2UsIHBndGFibGVzLCBzaXplb2YocGd0YWJsZXMpKTsKKwlfX2luc3RhbGxfcGFnZV90YWJsZShwZ2RfYmFzZSwgX19nZXRfY3B1X3ZhcihjdXJyZW50X2FzaWQpLAorCQkJICAgICBzd2FwcGVyX3BncHJvdCk7Cit9CisKKy8qCisgKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCisgKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCisgKgorICogT24gVGlsZSwgdGhlIG9ubHkgdmFsaWQgdGhpbmdzIGZvciB3aGljaCB3ZSBjYW4ganVzdCBoYW5kIG91dCB1bmNoZWNrZWQKKyAqIFBURXMgYXJlIHRoZSBrZXJuZWwgY29kZSBhbmQgZGF0YS4gIEFueXRoaW5nIGVsc2UgbWlnaHQgY2hhbmdlIGl0cworICogaG9taW5nIHdpdGggdGltZSwgYW5kIHdlIHdvdWxkbid0IGtub3cgdG8gYWRqdXN0IHRoZSAvZGV2L21lbSBQVEVzLgorICogTm90ZSB0aGF0IGluaXRfdGhyZWFkX3VuaW9uIGlzIHJlbGVhc2VkIHRvIGhlYXAgc29vbiBhZnRlciBib290LAorICogc28gd2UgaW5jbHVkZSBpdCBpbiB0aGUgaW5pdCBkYXRhLgorICoKKyAqIEZvciBUSUxFLUd4LCB3ZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIGFsbG93aW5nIGFjY2VzcyB0byBQQQorICogcmVnaW9ucyBjb3JyZXNwb25kaW5nIHRvIFBDSSBzcGFjZSwgZXRjLgorICovCitpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCit7CisJcmV0dXJuIHBhZ2VuciA8IGthZGRyX3RvX3BmbihfZW5kKSAmJgorCQkhKHBhZ2VuciA+PSBrYWRkcl90b19wZm4oJmluaXRfdGhyZWFkX3VuaW9uKSB8fAorCQkgIHBhZ2VuciA8IGthZGRyX3RvX3BmbihfZWluaXRkYXRhKSkgJiYKKwkJIShwYWdlbnIgPj0ga2FkZHJfdG9fcGZuKF9zaW5pdHRleHQpIHx8CisJCSAgcGFnZW5yIDw9IGthZGRyX3RvX3BmbihfZWluaXR0ZXh0LTEpKTsKK30KKworI2lmZGVmIENPTkZJR19ISUdITUVNCitzdGF0aWMgdm9pZCBfX2luaXQgcGVybWFuZW50X2ttYXBzX2luaXQocGdkX3QgKnBnZF9iYXNlKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGU7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKworCXZhZGRyID0gUEtNQVBfQkFTRTsKKwlwYWdlX3RhYmxlX3JhbmdlX2luaXQodmFkZHIsIHZhZGRyICsgUEFHRV9TSVpFKkxBU1RfUEtNQVAsIHBnZF9iYXNlKTsKKworCXBnZCA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4KHZhZGRyKTsKKwlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgdmFkZHIpOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCB2YWRkcik7CisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7CisJcGttYXBfcGFnZV90YWJsZSA9IHB0ZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLworCisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2ZyZWVfcGZuX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2Uoc3RhcnQpOworCisJZm9yIChwZm4gPSBzdGFydDsgcGZuIDwgZW5kOyApIHsKKwkJLyogT3B0aW1pemUgYnkgZnJlZWluZyBwYWdlcyBpbiBsYXJnZSBiYXRjaGVzICovCisJCWludCBvcmRlciA9IF9fZmZzKHBmbik7CisJCWludCBjb3VudCwgaTsKKwkJc3RydWN0IHBhZ2UgKnA7CisKKwkJaWYgKG9yZGVyID49IE1BWF9PUkRFUikKKwkJCW9yZGVyID0gTUFYX09SREVSLTE7CisJCWNvdW50ID0gMSA8PCBvcmRlcjsKKwkJd2hpbGUgKHBmbiArIGNvdW50ID4gZW5kKSB7CisJCQljb3VudCA+Pj0gMTsKKwkJCS0tb3JkZXI7CisJCX0KKwkJZm9yIChwID0gcGFnZSwgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK3ApIHsKKwkJCV9fQ2xlYXJQYWdlUmVzZXJ2ZWQocCk7CisJCQkvKgorCQkJICogSGFja3kgZGlyZWN0IHNldCB0byBhdm9pZCB1bm5lY2Vzc2FyeQorCQkJICogbG9jayB0YWtlL3JlbGVhc2UgZm9yIEVWRVJZIHBhZ2UgaGVyZS4KKwkJCSAqLworCQkJcC0+X2NvdW50LmNvdW50ZXIgPSAwOworCQkJcC0+X21hcGNvdW50LmNvdW50ZXIgPSAtMTsKKwkJfQorCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CisJCV9fZnJlZV9wYWdlcyhwYWdlLCBvcmRlcik7CisJCXRvdGFscmFtX3BhZ2VzICs9IGNvdW50OworCisJCXBhZ2UgKz0gY291bnQ7CisJCXBmbiArPSBjb3VudDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfbm9uX2Jvb3RtZW1fcGFnZXNfaW5pdCh2b2lkKQoreworCXN0cnVjdCB6b25lICp6OworCWZvcl9lYWNoX3pvbmUoeikgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJCWludCBuaWQgPSB6LT56b25lX3BnZGF0LT5ub2RlX2lkOworCQlpbnQgaWR4ID0gem9uZV9pZHgoeik7CisKKwkJc3RhcnQgPSB6LT56b25lX3N0YXJ0X3BmbjsKKwkJaWYgKHN0YXJ0ID09IDApCisJCQljb250aW51ZTsgIC8qIGJvb3RtZW0gKi8KKwkJZW5kID0gc3RhcnQgKyB6LT5zcGFubmVkX3BhZ2VzOworCQlpZiAoaWR4ID09IFpPTkVfTk9STUFMKSB7CisJCQlCVUdfT04oc3RhcnQgIT0gbm9kZV9zdGFydF9wZm5bbmlkXSk7CisJCQlzdGFydCA9IG5vZGVfZnJlZV9wZm5bbmlkXTsKKwkJfQorI2lmZGVmIENPTkZJR19ISUdITUVNCisJCWlmIChpZHggPT0gWk9ORV9ISUdITUVNKQorCQkJdG90YWxoaWdoX3BhZ2VzICs9IHotPnNwYW5uZWRfcGFnZXM7CisjZW5kaWYKKwkJaWYgKGtkYXRhX2h1Z2UpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcGVyY3B1X3BmbiA9IG5vZGVfcGVyY3B1X3BmbltuaWRdOworCQkJaWYgKHN0YXJ0IDwgcGVyY3B1X3BmbiAmJiBlbmQgPiBwZXJjcHVfcGZuKQorCQkJCWVuZCA9IHBlcmNwdV9wZm47CisJCX0KKyNpZmRlZiBDT05GSUdfUENJCisJCWlmIChzdGFydCA8PSBwY2lfcmVzZXJ2ZV9zdGFydF9wZm4gJiYKKwkJICAgIGVuZCA+IHBjaV9yZXNlcnZlX3N0YXJ0X3BmbikgeworCQkJaWYgKGVuZCA+IHBjaV9yZXNlcnZlX2VuZF9wZm4pCisJCQkJaW5pdF9mcmVlX3Bmbl9yYW5nZShwY2lfcmVzZXJ2ZV9lbmRfcGZuLCBlbmQpOworCQkJZW5kID0gcGNpX3Jlc2VydmVfc3RhcnRfcGZuOworCQl9CisjZW5kaWYKKwkJaW5pdF9mcmVlX3Bmbl9yYW5nZShzdGFydCwgZW5kKTsKKwl9Cit9CisKKy8qCisgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzIC0gbm90ZSB0aGF0IGFsbCBvZiBsb3dtZW0gaXMKKyAqIGFscmVhZHkgbWFwcGVkIGJ5IGhlYWQuUy4KKyAqLwordm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGVuZDsKKyNlbmRpZgorI2lmZGVmIF9fdGlsZWd4X18KKwlwdWRfdCAqcHVkOworI2VuZGlmCisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CisKKwlrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF9iYXNlKTsKKworI2lmZGVmIENPTkZJR19ISUdITUVNCisJLyoKKwkgKiBGaXhlZCBtYXBwaW5ncywgb25seSB0aGUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUgaGFzIHRvIGJlCisJICogY3JlYXRlZCAtIG1hcHBpbmdzIHdpbGwgYmUgc2V0IGJ5IHNldF9maXhtYXAoKToKKwkgKi8KKwl2YWRkciA9IF9fZml4X3RvX3ZpcnQoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzIC0gMSkgJiBQTURfTUFTSzsKKwllbmQgPSAoRklYQUREUl9UT1AgKyBQTURfU0laRSAtIDEpICYgUE1EX01BU0s7CisJcGFnZV90YWJsZV9yYW5nZV9pbml0KHZhZGRyLCBlbmQsIHBnZF9iYXNlKTsKKwlwZXJtYW5lbnRfa21hcHNfaW5pdChwZ2RfYmFzZSk7CisjZW5kaWYKKworI2lmZGVmIF9fdGlsZWd4X18KKwkvKgorCSAqIFNpbmNlIEdYIGFsbG9jYXRlcyBqdXN0IG9uZSBwbWRfdCBhcnJheSB3b3J0aCBvZiB2bWFsbG9jIHNwYWNlLAorCSAqIHdlIGdvIGFoZWFkIGFuZCBhbGxvY2F0ZSBpdCBzdGF0aWNhbGx5IGhlcmUsIHRoZW4gc2hhcmUgaXQKKwkgKiBnbG9iYWxseS4gIEFzIGEgcmVzdWx0IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYW55IHRhc2sKKwkgKiBjaGFuZ2luZyBpbml0X21tIG9uY2Ugd2UgZ2V0IHVwIGFuZCBydW5uaW5nLCBhbmQgdGhlcmUncyBubworCSAqIG5lZWQgZm9yIGUuZy4gdm1hbGxvY19zeW5jX2FsbCgpLgorCSAqLworCUJVSUxEX0JVR19PTihwZ2RfaW5kZXgoVk1BTExPQ19TVEFSVCkgIT0gcGdkX2luZGV4KFZNQUxMT0NfRU5EKSk7CisJcHVkID0gcHVkX29mZnNldChwZ2RfYmFzZSArIHBnZF9pbmRleChWTUFMTE9DX1NUQVJUKSwgVk1BTExPQ19TVEFSVCk7CisJYXNzaWduX3BtZChwdWQsIGFsbG9jX3BtZCgpKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBXYWxrIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMgYW5kIGRlcml2ZSB0aGUgcGFnZV9ob21lKCkgZnJvbQorICogdGhlIFBURXMsIHNvIHRoYXQgc2V0X3B0ZSgpIGNhbiBwcm9wZXJseSB2YWxpZGF0ZSB0aGUgY2FjaGluZworICogb2YgYWxsIFBURXMgaXQgc2Vlcy4KKyAqLwordm9pZCBfX2luaXQgc2V0X3BhZ2VfaG9tZXModm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNldF9tYXhfbWFwbnJfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19GTEFUTUVNCisJbWF4X21hcG5yID0gbWF4X2xvd19wZm47CisjZW5kaWYKK30KKwordm9pZCBfX2luaXQgbWVtX2luaXQodm9pZCkKK3sKKwlpbnQgY29kZXNpemUsIGRhdGFzaXplLCBpbml0c2l6ZTsKKwlpbnQgaTsKKyNpZm5kZWYgX190aWxlZ3hfXworCXZvaWQgKmxhc3Q7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GTEFUTUVNCisJaWYgKCFtZW1fbWFwKQorCQlCVUcoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkvKiBjaGVjayB0aGF0IGZpeG1hcCBhbmQgcGttYXAgZG8gbm90IG92ZXJsYXAgKi8KKwlpZiAoUEtNQVBfQUREUihMQVNUX1BLTUFQLTEpID49IEZJWEFERFJfU1RBUlQpIHsKKwkJcHJfZXJyKCJmaXhtYXAgYW5kIGttYXAgYXJlYXMgb3ZlcmxhcCIKKwkJICAgICAgICIgLSB0aGlzIHdpbGwgY3Jhc2hcbiIpOworCQlwcl9lcnIoInBrc3RhcnQ6ICVseGggcGtlbmQ6ICVseGggZml4c3RhcnQgJWx4aFxuIiwKKwkJICAgICAgIFBLTUFQX0JBU0UsIFBLTUFQX0FERFIoTEFTVF9QS01BUC0xKSwKKwkJICAgICAgIEZJWEFERFJfU1RBUlQpOworCQlCVUcoKTsKKwl9CisjZW5kaWYKKworCXNldF9tYXhfbWFwbnJfaW5pdCgpOworCisJLyogdGhpcyB3aWxsIHB1dCBhbGwgYm9vdG1lbSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KKwl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtKCk7CisKKwkvKiBjb3VudCBhbGwgcmVtYWluaW5nIExPV01FTSBhbmQgZ2l2ZSBhbGwgSElHSE1FTSB0byBwYWdlIGFsbG9jYXRvciAqLworCXNldF9ub25fYm9vdG1lbV9wYWdlc19pbml0KCk7CisKKwljb2Rlc2l6ZSA9ICAodW5zaWduZWQgbG9uZykmX2V0ZXh0IC0gKHVuc2lnbmVkIGxvbmcpJl90ZXh0OworCWRhdGFzaXplID0gICh1bnNpZ25lZCBsb25nKSZfZW5kIC0gKHVuc2lnbmVkIGxvbmcpJl9zZGF0YTsKKwlpbml0c2l6ZSA9ICAodW5zaWduZWQgbG9uZykmX2Vpbml0dGV4dCAtICh1bnNpZ25lZCBsb25nKSZfc2luaXR0ZXh0OworCWluaXRzaXplICs9ICh1bnNpZ25lZCBsb25nKSZfZWluaXRkYXRhIC0gKHVuc2lnbmVkIGxvbmcpJl9zaW5pdGRhdGE7CisKKwlwcl9pbmZvKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIGRhdGEsICVkayBpbml0LCAlbGRrIGhpZ2htZW0pXG4iLAorCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKKwkJbnVtX3BoeXNwYWdlcyA8PCAoUEFHRV9TSElGVC0xMCksCisJCWNvZGVzaXplID4+IDEwLAorCQlkYXRhc2l6ZSA+PiAxMCwKKwkJaW5pdHNpemUgPj4gMTAsCisJCSh1bnNpZ25lZCBsb25nKSAodG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkKKwkgICAgICAgKTsKKworCS8qCisJICogSW4gZGVidWcgbW9kZSwgZHVtcCBzb21lIGludGVyZXN0aW5nIG1lbW9yeSBtYXBwaW5ncy4KKwkgKi8KKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCXByaW50ayhLRVJOX0RFQlVHICIgIEtNQVAgICAgJSNseCAtICUjbHhcbiIsCisJICAgICAgIEZJWEFERFJfU1RBUlQsIEZJWEFERFJfVE9QICsgUEFHRV9TSVpFIC0gMSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiAgUEtNQVAgICAlI2x4IC0gJSNseFxuIiwKKwkgICAgICAgUEtNQVBfQkFTRSwgUEtNQVBfQUREUihMQVNUX1BLTUFQKSAtIDEpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hVR0VWTUFQCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgSFVHRU1BUCAlI2x4IC0gJSNseFxuIiwKKwkgICAgICAgSFVHRV9WTUFQX0JBU0UsIEhVR0VfVk1BUF9FTkQgLSAxKTsKKyNlbmRpZgorCXByaW50ayhLRVJOX0RFQlVHICIgIFZNQUxMT0MgJSNseCAtICUjbHhcbiIsCisJICAgICAgIF9WTUFMTE9DX1NUQVJULCBfVk1BTExPQ19FTkQgLSAxKTsKKyNpZmRlZiBfX3RpbGVneF9fCisJZm9yIChpID0gTUFYX05VTU5PREVTLTE7IGkgPj0gMDsgLS1pKSB7CisJCXN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZSA9ICZub2RlX2RhdGFbaV07CisJCWlmIChub2RlLT5ub2RlX3ByZXNlbnRfcGFnZXMpIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAodW5zaWduZWQgbG9uZykKKwkJCQlwZm5fdG9fa2FkZHIobm9kZS0+bm9kZV9zdGFydF9wZm4pOworCQkJdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArCisJCQkJKG5vZGUtPm5vZGVfcHJlc2VudF9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgIE1FTSVkICAgICUjbHggLSAlI2x4XG4iLAorCQkJICAgICAgIGksIHN0YXJ0LCBlbmQgLSAxKTsKKwkJfQorCX0KKyNlbHNlCisJbGFzdCA9IGhpZ2hfbWVtb3J5OworCWZvciAoaSA9IE1BWF9OVU1OT0RFUy0xOyBpID49IDA7IC0taSkgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpdmJhc2VfbWFwW2ldICE9IC0xVUwpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgIExPV01FTSVkICUjbHggLSAlI2x4XG4iLAorCQkJICAgICAgIGksICh1bnNpZ25lZCBsb25nKSAodmJhc2VfbWFwW2ldKSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZykgKGxhc3QtMSkpOworCQkJbGFzdCA9IHZiYXNlX21hcFtpXTsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZuZGVmIF9fdGlsZWd4X18KKwkvKgorCSAqIENvbnZlcnQgZnJvbSB1c2luZyBvbmUgbG9jayBmb3IgYWxsIGF0b21pYyBvcGVyYXRpb25zIHRvCisJICogb25lIHBlciBjcHUuCisJICovCisJX19pbml0X2F0b21pY19wZXJfY3B1KCk7CisjZW5kaWYKK30KKworLyoKKyAqIHRoaXMgaXMgZm9yIHRoZSBub24tTlVNQSwgc2luZ2xlIG5vZGUgU01QIHN5c3RlbSBjYXNlLgorICogU3BlY2lmaWNhbGx5LCBpbiB0aGUgY2FzZSBvZiB4ODYsIHdlIHdpbGwgYWx3YXlzIGFkZAorICogbWVtb3J5IHRvIHRoZSBoaWdobWVtIGZvciBub3cuCisgKi8KKyNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKK2ludCBhcmNoX2FkZF9tZW1vcnkodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9ICZjb250aWdfcGFnZV9kYXRhOworCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzICsgTUFYX05SX1pPTkVTLTE7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisKKwlyZXR1cm4gX19hZGRfcGFnZXMoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7Cit9CisKK2ludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKworc3RydWN0IGttZW1fY2FjaGUgKnBnZF9jYWNoZTsKKwordm9pZCBfX2luaXQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpCit7CisJcGdkX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsCisJCQkJUFRSU19QRVJfUEdEKnNpemVvZihwZ2RfdCksCisJCQkJUFRSU19QRVJfUEdEKnNpemVvZihwZ2RfdCksCisJCQkJMCwKKwkJCQlOVUxMKTsKKwlpZiAoIXBnZF9jYWNoZSkKKwkJcGFuaWMoInBndGFibGVfY2FjaGVfaW5pdCgpOiBDYW5ub3QgY3JlYXRlIHBnZCBjYWNoZSIpOworfQorCisjaWYgIUNISVBfSEFTX0NPSEVSRU5UX0xPQ0FMX0NBQ0hFKCkKKy8qCisgKiBUaGUgX193MWRhdGEgYXJlYSBob2xkcyBkYXRhIHRoYXQgaXMgb25seSB3cml0dGVuIGR1cmluZyBpbml0aWFsaXphdGlvbiwKKyAqIGFuZCBpcyByZWFkLW9ubHkgYW5kIHRodXMgZnJlZWx5IGNhY2hlYWJsZSB0aGVyZWFmdGVyLiAgRml4IHRoZSBwYWdlCisgKiB0YWJsZSBlbnRyaWVzIHRoYXQgY292ZXIgdGhhdCByZWdpb24gYWNjb3JkaW5nbHkuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfdzFkYXRhX3JvKHZvaWQpCit7CisJLyogTG9vcCBvdmVyIHBhZ2UgdGFibGUgZW50cmllcyAqLworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKV9fdzFkYXRhX2JlZ2luOworCUJVR19PTigoYWRkciAmIChQQUdFX1NJWkUtMSkpICE9IDApOworCWZvciAoOyBhZGRyIDw9ICh1bnNpZ25lZCBsb25nKV9fdzFkYXRhX2VuZCAtIDE7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0ga2FkZHJfdG9fcGZuKCh2b2lkICopYWRkcik7CisJCXB0ZV90ICpwdGVwID0gdmlydF90b19wdGUoTlVMTCwgYWRkcik7CisJCUJVR19PTihwdGVfaHVnZSgqcHRlcCkpOyAgIC8qIG5vdCByZWxldmFudCBmb3Iga2RhdGFfaHVnZSAqLworCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGVwLCBwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUxfUk8pKTsKKwl9Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKK3N0YXRpYyBsb25nIF9fd3JpdGVfb25jZSBpbml0ZnJlZTsKKyNlbHNlCitzdGF0aWMgbG9uZyBfX3dyaXRlX29uY2UgaW5pdGZyZWUgPSAxOworI2VuZGlmCisKKy8qIFNlbGVjdCB3aGV0aGVyIHRvIGZyZWUgKDEpIG9yIG1hcmsgdW51c2FibGUgKDApIHRoZSBfX2luaXQgcGFnZXMuICovCitzdGF0aWMgaW50IF9faW5pdCBzZXRfaW5pdGZyZWUoY2hhciAqc3RyKQoreworCXN0cmljdF9zdHJ0b2woc3RyLCAwLCAmaW5pdGZyZWUpOworCXByX2luZm8oImluaXRmcmVlOiAlcyBmcmVlIGluaXQgcGFnZXNcbiIsIGluaXRmcmVlID8gIndpbGwiIDogIndvbid0Iik7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJpbml0ZnJlZT0iLCBzZXRfaW5pdGZyZWUpOworCitzdGF0aWMgdm9pZCBmcmVlX2luaXRfcGFnZXMoY2hhciAqd2hhdCwgdW5zaWduZWQgbG9uZyBiZWdpbiwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGJlZ2luOworCisJaWYgKGtkYXRhX2h1Z2UgJiYgIWluaXRmcmVlKSB7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IGlnbm9yaW5nIGluaXRmcmVlPTA6IgorCQkJICAgIiBpbmNvbXBhdGlibGUgd2l0aCBrZGF0YT1odWdlXG4iKTsKKwkJaW5pdGZyZWUgPSAxOworCX0KKwllbmQgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0s7CisJbG9jYWxfZmx1c2hfdGxiX3BhZ2VzKE5VTEwsIGJlZ2luLCBQQUdFX1NJWkUsIGVuZCAtIGJlZ2luKTsKKwlmb3IgKGFkZHIgPSBiZWdpbjsgYWRkciA8IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJLyoKKwkJICogTm90ZSB3ZSBqdXN0IHJlc2V0IHRoZSBob21lIGhlcmUgZGlyZWN0bHkgaW4gdGhlCisJCSAqIHBhZ2UgdGFibGUuICBXZSBrbm93IHRoaXMgaXMgc2FmZSBiZWNhdXNlIG91ciBjYWxsZXIKKwkJICoganVzdCBmbHVzaGVkIHRoZSBjYWNoZXMgb24gYWxsIHRoZSBvdGhlciBjcHVzLAorCQkgKiBhbmQgdGhleSB3b24ndCBiZSB0b3VjaGluZyBhbnkgb2YgdGhlc2UgcGFnZXMuCisJCSAqLworCQlpbnQgcGZuID0ga2FkZHJfdG9fcGZuKCh2b2lkICopYWRkcik7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKwkJcHRlX3QgKnB0ZXAgPSB2aXJ0X3RvX3B0ZShOVUxMLCBhZGRyKTsKKwkJaWYgKCFpbml0ZnJlZSkgeworCQkJLyoKKwkJCSAqIElmIGRlYnVnZ2luZyBwYWdlIGFjY2Vzc2VzIHRoZW4gZG8gbm90IGZyZWUKKwkJCSAqIHRoaXMgbWVtb3J5IGJ1dCBtYXJrIHRoZW0gbm90IHByZXNlbnQgLSBhbnkKKwkJCSAqIGJ1Z2d5IGluaXQtc2VjdGlvbiBhY2Nlc3Mgd2lsbCBjcmVhdGUgYQorCQkJICoga2VybmVsIHBhZ2UgZmF1bHQ6CisJCQkgKi8KKwkJCXB0ZV9jbGVhcigmaW5pdF9tbSwgYWRkciwgcHRlcCk7CisJCQljb250aW51ZTsKKwkJfQorCQlfX0NsZWFyUGFnZVJlc2VydmVkKHBhZ2UpOworCQlpbml0X3BhZ2VfY291bnQocGFnZSk7CisJCWlmIChwdGVfaHVnZSgqcHRlcCkpCisJCQlCVUdfT04oIWtkYXRhX2h1Z2UpOworCQllbHNlCisJCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRyLCBwdGVwLAorCQkJCSAgIHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTCkpOworCQltZW1zZXQoKHZvaWQgKilhZGRyLCBQT0lTT05fRlJFRV9JTklUTUVNLCBQQUdFX1NJWkUpOworCQlmcmVlX3BhZ2UoYWRkcik7CisJCXRvdGFscmFtX3BhZ2VzKys7CisJfQorCXByX2luZm8oIkZyZWVpbmcgJXM6ICVsZGsgZnJlZWRcbiIsIHdoYXQsIChlbmQgLSBiZWdpbikgPj4gMTApOworfQorCit2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgdGV4dF9kZWx0YSA9IE1FTV9TVl9JTlRSUFQgLSBQQUdFX09GRlNFVDsKKworCS8qCisJICogRXZpY3QgdGhlIGRpcnR5IGluaXRkYXRhIG9uIHRoZSBib290IGNwdSwgZXZpY3QgdGhlIHcxZGF0YQorCSAqIHdoZXJldmVyIGl0J3MgaG9tZWQsIGFuZCBldmljdCBhbGwgdGhlIGluaXQgY29kZSBldmVyeXdoZXJlLgorCSAqIFdlIGFyZSBndWFyYW50ZWVkIHRoYXQgbm8gb25lIHdpbGwgdG91Y2ggdGhlIGluaXQgcGFnZXMgYW55CisJICogbW9yZSwgYW5kIGFsdGhvdWdoIG90aGVyIGNwdXMgbWF5IGJlIHRvdWNoaW5nIHRoZSB3MWRhdGEsCisJICogd2Ugb25seSBhY3R1YWxseSBjaGFuZ2UgdGhlIGNhY2hpbmcgb24gdGlsZTY0LCB3aGljaCB3b24ndAorCSAqIGJlIGtlZXBpbmcgbG9jYWwgY29waWVzIGluIHRoZSBvdGhlciB0aWxlcycgY2FjaGVzIGFueXdheS4KKwkgKi8KKwlob21lY2FjaGVfZXZpY3QoJmNwdV9jYWNoZWFibGVfbWFwKTsKKworCS8qIEZyZWUgdGhlIGRhdGEgcGFnZXMgdGhhdCB3ZSB3b24ndCB1c2UgYWdhaW4gYWZ0ZXIgaW5pdC4gKi8KKwlmcmVlX2luaXRfcGFnZXMoInVudXNlZCBrZXJuZWwgZGF0YSIsCisJCQkodW5zaWduZWQgbG9uZylfc2luaXRkYXRhLAorCQkJKHVuc2lnbmVkIGxvbmcpX2Vpbml0ZGF0YSk7CisKKwkvKgorCSAqIEZyZWUgdGhlIHBhZ2VzIG1hcHBlZCBmcm9tIDB4YzAwMDAwMDAgdGhhdCBjb3JyZXNwb25kIHRvIGNvZGUKKwkgKiBwYWdlcyBmcm9tIDB4ZmQwMDAwMDAgdGhhdCB3ZSB3b24ndCB1c2UgYWdhaW4gYWZ0ZXIgaW5pdC4KKwkgKi8KKwlmcmVlX2luaXRfcGFnZXMoInVudXNlZCBrZXJuZWwgdGV4dCIsCisJCQkodW5zaWduZWQgbG9uZylfc2luaXR0ZXh0IC0gdGV4dF9kZWx0YSwKKwkJCSh1bnNpZ25lZCBsb25nKV9laW5pdHRleHQgLSB0ZXh0X2RlbHRhKTsKKworI2lmICFDSElQX0hBU19DT0hFUkVOVF9MT0NBTF9DQUNIRSgpCisJLyoKKwkgKiBVcGdyYWRlIHRoZSAudzFkYXRhIHNlY3Rpb24gdG8gZ2xvYmFsbHkgY2FjaGVkLgorCSAqIFdlIGRvbid0IGRvIHRoaXMgb24gdGlsZXBybywgc2luY2UgdGhlIGNhY2hlIGFyY2hpdGVjdHVyZQorCSAqIHByZXR0eSBtdWNoIG1ha2VzIGl0IGlycmVsZXZhbnQsIGFuZCBpbiBhbnkgY2FzZSB3ZSBlbmQKKwkgKiB1cCBoYXZpbmcgcmFjaW5nIGlzc3VlcyB3aXRoIG90aGVyIHRpbGVzIHRoYXQgbWF5IHRvdWNoCisJICogdGhlIGRhdGEgYWZ0ZXIgd2UgZmx1c2ggdGhlIGNhY2hlIGJ1dCBiZWZvcmUgd2UgdXBkYXRlCisJICogdGhlIFBURXMgYW5kIGZsdXNoIHRoZSBUTEJzLCBjYXVzaW5nIHNoYXJlciBzaG9vdGRvd25zCisJICogbGF0ZXIuICBFdmVuIHRob3VnaCB0aGlzIGlzIHRvIGNsZWFuIGRhdGEsIGl0IHNlZW1zIGxpa2UKKwkgKiBhbiB1bm5lY2Vzc2FyeSBjb21wbGljYXRpb24uCisJICovCisJbWFya193MWRhdGFfcm8oKTsKKyNlbmRpZgorCisJLyogRG8gYSBnbG9iYWwgVExCIGZsdXNoIHNvIGV2ZXJ5b25lIHNlZXMgdGhlIGNoYW5nZXMuICovCisJZmx1c2hfdGxiX2FsbCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL21pZ3JhdGUuaCBiL2FyY2gvdGlsZS9tbS9taWdyYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q0NWEwOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvdGlsZS9tbS9taWdyYXRlLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqCisgKiBTdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIG1pZ3JhdGlvbiwgZXhwb3NlZCBoZXJlIGZvciB1c2UgYnkKKyAqIGFyY2gvdGlsZS9rZXJuZWwvYXNtLW9mZnNldHMuYy4KKyAqLworCisjaWZuZGVmIE1NX01JR1JBVEVfSAorI2RlZmluZSBNTV9NSUdSQVRFX0gKKworI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBoZWxwZXIgd2hlbiBzZXR0aW5nIHVwIHRoZSBpbml0aWFsCisgKiBwYWdlIHRhYmxlIChzd2FwcGVyX3BnX2RpcikuCisgKi8KK2V4dGVybiBpbnQgZmx1c2hfYW5kX2luc3RhbGxfY29udGV4dChIVl9QaHlzQWRkciBwYWdlX3RhYmxlLCBIVl9QVEUgYWNjZXNzLAorCQkJCSAgICAgSFZfQVNJRCBhc2lkLAorCQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqY3B1bWFzayk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIG1pZ3JhdGlvbiBhcyBhICJoZWxwZXIiIGFzIGZvbGxvd3M6CisgKgorICogIC0gU2V0IHRoZSBzdGFjayBQVEUgaXRzZWxmIHRvICJtaWdyYXRpbmciLgorICogIC0gRG8gYSBnbG9iYWwgVExCIGZsdXNoIGZvciAodmEsbGVuZ3RoKSBhbmQgdGhlIHNwZWNpZmllZCBBU0lEcy4KKyAqICAtIERvIGEgY2FjaGUtZXZpY3Qgb24gYWxsIG5lY2Vzc2FyeSBjcHVzLgorICogIC0gV3JpdGUgdGhlIG5ldyBzdGFjayBQVEUuCisgKgorICogTm90ZSB0aGF0IGFueSBub24tTlVMTCBwb2ludGVycyBtdXN0IG5vdCBwb2ludCB0byB0aGUgcGFnZSB0aGF0CisgKiBpcyBoYW5kbGVkIGJ5IHRoZSBzdGFja19wdGUgaXRzZWxmLgorICovCitleHRlcm4gaW50IGhvbWVjYWNoZV9taWdyYXRlX3N0YWNrX2FuZF9mbHVzaChwdGVfdCBzdGFja19wdGUsIHVuc2lnbmVkIGxvbmcgdmEsCisJCQkJICAgICBzaXplX3QgbGVuZ3RoLCBwdGVfdCAqc3RhY2tfcHRlcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjYWNoZV9jcHVtYXNrLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRsYl9jcHVtYXNrLAorCQkJCSAgICAgSFZfUmVtb3RlX0FTSUQgKmFzaWRzLAorCQkJCSAgICAgaW50IGFzaWRjb3VudCk7CisKKyNlbmRpZiAvKiBNTV9NSUdSQVRFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9taWdyYXRlXzMyLlMgYi9hcmNoL3RpbGUvbW0vbWlncmF0ZV8zMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Mzg3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbW0vbWlncmF0ZV8zMi5TCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgVGlsZXJhIENvcnBvcmF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgorICogICBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqICAgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBhIGhlbHBlciBmb3IgbWlncmF0aW5nIHRoZSBob21lIG9mIGEgc2V0IG9mIHBhZ2VzIHRvCisgKiBhIG5ldyBjcHUuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gaW4gaG9tZWNhY2hlLmMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxodi9oeXBlcnZpc29yLmg+CisKKwkudGV4dAorCisvKgorICogRmlyc3QsIHNvbWUgZGVmaW5pdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgdGhlIGNvZGUgaW4gdGhlIGZpbGUuCisgKi8KKworLyogTG9jYWxzIChjYWxsZXItc2F2ZSkgKi8KKyNkZWZpbmUgcl90bXAJCXIxMAorI2RlZmluZSByX3NhdmVfc3AJcjExCisKKy8qIFdoYXQgd2Ugc2F2ZSB3aGVyZSBpbiB0aGUgc3RhY2sgZnJhbWU7IG11c3QgaW5jbHVkZSBhbGwgY2FsbGVlLXNhdmVzLiAqLworI2RlZmluZSBGUkFNRV9TUAk0CisjZGVmaW5lIEZSQU1FX1IzMAk4CisjZGVmaW5lIEZSQU1FX1IzMQkxMgorI2RlZmluZSBGUkFNRV9SMzIJMTYKKyNkZWZpbmUgRlJBTUVfUjMzCTIwCisjZGVmaW5lIEZSQU1FX1IzNAkyNAorI2RlZmluZSBGUkFNRV9SMzUJMjgKKyNkZWZpbmUgRlJBTUVfU0laRQkzMgorCisKKworCisvKgorICogT24gZW50cnk6CisgKgorICogICByMCBsb3cgd29yZCBvZiB0aGUgbmV3IGNvbnRleHQgUEEgdG8gaW5zdGFsbCAobW92ZWQgdG8gcl9jb250ZXh0X2xvKQorICogICByMSBoaWdoIHdvcmQgb2YgdGhlIG5ldyBjb250ZXh0IFBBIHRvIGluc3RhbGwgKG1vdmVkIHRvIHJfY29udGV4dF9oaSkKKyAqICAgcjIgbG93IHdvcmQgb2YgUFRFIHRvIHVzZSBmb3IgY29udGV4dCBhY2Nlc3MgKG1vdmVkIHRvIHJfYWNjZXNzX2xvKQorICogICByMyBoaWdoIHdvcmQgb2YgUFRFIHRvIHVzZSBmb3IgY29udGV4dCBhY2Nlc3MgKG1vdmVkIHRvIHJfYWNjZXNzX2xvKQorICogICByNCBBU0lEIHRvIHVzZSBmb3IgbmV3IGNvbnRleHQgKG1vdmVkIHRvIHJfYXNpZCkKKyAqICAgcjUgcG9pbnRlciB0byBjcHVtYXNrIHdpdGgganVzdCB0aGlzIGNwdSBzZXQgaW4gaXQgKHJfbXlfY3B1bWFzaykKKyAqLworCisvKiBBcmd1bWVudHMgKGNhbGxlci1zYXZlKSAqLworI2RlZmluZSByX2NvbnRleHRfbG9faW4JcjAKKyNkZWZpbmUgcl9jb250ZXh0X2hpX2luCXIxCisjZGVmaW5lIHJfYWNjZXNzX2xvX2luCXIyCisjZGVmaW5lIHJfYWNjZXNzX2hpX2luCXIzCisjZGVmaW5lIHJfYXNpZF9pbglyNAorI2RlZmluZSByX215X2NwdW1hc2sJcjUKKworLyogTG9jYWxzIChjYWxsZWUtc2F2ZSk7IG11c3Qgbm90IGJlIG1vcmUgdGhhbiBGUkFNRV94eHggYWJvdmUuICovCisjZGVmaW5lIHJfc2F2ZV9pY3MJcjMwCisjZGVmaW5lIHJfY29udGV4dF9sbwlyMzEKKyNkZWZpbmUgcl9jb250ZXh0X2hpCXIzMgorI2RlZmluZSByX2FjY2Vzc19sbwlyMzMKKyNkZWZpbmUgcl9hY2Nlc3NfaGkJcjM0CisjZGVmaW5lIHJfYXNpZAkJcjM1CisKK1NURF9FTlRSWShmbHVzaF9hbmRfaW5zdGFsbF9jb250ZXh0KQorCS8qCisJICogQ3JlYXRlIGEgc3RhY2sgZnJhbWU7IHdlIGNhbid0IHRvdWNoIGl0IG9uY2Ugd2UgZmx1c2ggdGhlCisJICogY2FjaGUgdW50aWwgd2UgaW5zdGFsbCB0aGUgbmV3IHBhZ2UgdGFibGUgYW5kIGZsdXNoIHRoZSBUTEIuCisJICovCisJeworCSBtb3ZlIHJfc2F2ZV9zcCwgc3AKKwkgc3cgc3AsIGxyCisJIGFkZGkgc3AsIHNwLCAtRlJBTUVfU0laRQorCX0KKwlhZGRpIHJfdG1wLCBzcCwgRlJBTUVfU1AKKwl7CisJIHN3IHJfdG1wLCByX3NhdmVfc3AKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzMAorCX0KKwl7CisJIHN3IHJfdG1wLCByMzAKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzMQorCX0KKwl7CisJIHN3IHJfdG1wLCByMzEKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzMgorCX0KKwl7CisJIHN3IHJfdG1wLCByMzIKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzMworCX0KKwl7CisJIHN3IHJfdG1wLCByMzMKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzNAorCX0KKwl7CisJIHN3IHJfdG1wLCByMzQKKwkgYWRkaSByX3RtcCwgc3AsIEZSQU1FX1IzNQorCX0KKwlzdyByX3RtcCwgcjM1CisKKwkvKiBNb3ZlIHNvbWUgYXJndW1lbnRzIHRvIGNhbGxlZS1zYXZlIHJlZ2lzdGVycy4gKi8KKwl7CisJIG1vdmUgcl9jb250ZXh0X2xvLCByX2NvbnRleHRfbG9faW4KKwkgbW92ZSByX2NvbnRleHRfaGksIHJfY29udGV4dF9oaV9pbgorCX0KKwl7CisJIG1vdmUgcl9hY2Nlc3NfbG8sIHJfYWNjZXNzX2xvX2luCisJIG1vdmUgcl9hY2Nlc3NfaGksIHJfYWNjZXNzX2hpX2luCisJfQorCW1vdmUgcl9hc2lkLCByX2FzaWRfaW4KKworCS8qIERpc2FibGUgaW50ZXJydXB0cywgc2luY2Ugd2UgY2FuJ3QgdXNlIG91ciBzdGFjay4gKi8KKwl7CisJIG1mc3ByIHJfc2F2ZV9pY3MsIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OCisJIG1vdmVpIHJfdG1wLCAxCisJfQorCW10c3ByIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCByX3RtcAorCisJLyogRmlyc3QsIGZsdXNoIG91ciBMMiBjYWNoZS4gKi8KKwl7CisJIG1vdmUgcjAsIHplcm8gIC8qIGNhY2hlX3BhICovCisJIG1vdmUgcjEsIHplcm8KKwl9CisJeworCSBhdWxpIHIyLCB6ZXJvLCBoYTE2KEhWX0ZMVVNIX0VWSUNUX0wyKSAgLyogY2FjaGVfY29udHJvbCAqLworCSBtb3ZlIHIzLCByX215X2NwdW1hc2sgIC8qIGNhY2hlX2NwdW1hc2sgKi8KKwl9CisJeworCSBtb3ZlIHI0LCB6ZXJvICAvKiB0bGJfdmEgKi8KKwkgbW92ZSByNSwgemVybyAgLyogdGxiX2xlbmd0aCAqLworCX0KKwl7CisJIG1vdmUgcjYsIHplcm8gIC8qIHRsYl9wZ3NpemUgKi8KKwkgbW92ZSByNywgemVybyAgLyogdGxiX2NwdW1hc2sgKi8KKwl9CisJeworCSBtb3ZlIHI4LCB6ZXJvICAvKiBhc2lkcyAqLworCSBtb3ZlIHI5LCB6ZXJvICAvKiBhc2lkY291bnQgKi8KKwl9CisJamFsIGh2X2ZsdXNoX3JlbW90ZQorCWJueiByMCwgLkxkb25lCisKKwkvKiBOb3cgaW5zdGFsbCB0aGUgbmV3IHBhZ2UgdGFibGUuICovCisJeworCSBtb3ZlIHIwLCByX2NvbnRleHRfbG8KKwkgbW92ZSByMSwgcl9jb250ZXh0X2hpCisJfQorCXsKKwkgbW92ZSByMiwgcl9hY2Nlc3NfbG8KKwkgbW92ZSByMywgcl9hY2Nlc3NfaGkKKwl9CisJeworCSBtb3ZlIHI0LCByX2FzaWQKKwkgbW92ZWkgcjUsIEhWX0NUWF9ESVJFQ1RJTworCX0KKwlqYWwgaHZfaW5zdGFsbF9jb250ZXh0CisJYm56IHIwLCAuTGRvbmUKKworCS8qIEZpbmFsbHksIGZsdXNoIHRoZSBUTEIuICovCisJeworCSBtb3ZlaSByMCwgMCAgIC8qIHByZXNlcnZlX2dsb2JhbCAqLworCSBqYWwgaHZfZmx1c2hfYWxsCisJfQorCisuTGRvbmU6CisJLyogUmVzZXQgaW50ZXJydXB0cyBiYWNrIGhvdyB0aGV5IHdlcmUgYmVmb3JlLiAqLworCW10c3ByIElOVEVSUlVQVF9DUklUSUNBTF9TRUNUSU9OLCByX3NhdmVfaWNzCisKKwkvKiBSZXN0b3JlIHRoZSBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIGFuZCByZXR1cm4uICovCisJYWRkbGkgbHIsIHNwLCBGUkFNRV9TSVpFCisJeworCSBsdyBsciwgbHIKKwkgYWRkbGkgcl90bXAsIHNwLCBGUkFNRV9SMzAKKwl9CisJeworCSBsdyByMzAsIHJfdG1wCisJIGFkZGxpIHJfdG1wLCBzcCwgRlJBTUVfUjMxCisJfQorCXsKKwkgbHcgcjMxLCByX3RtcAorCSBhZGRsaSByX3RtcCwgc3AsIEZSQU1FX1IzMgorCX0KKwl7CisJIGx3IHIzMiwgcl90bXAKKwkgYWRkbGkgcl90bXAsIHNwLCBGUkFNRV9SMzMKKwl9CisJeworCSBsdyByMzMsIHJfdG1wCisJIGFkZGxpIHJfdG1wLCBzcCwgRlJBTUVfUjM0CisJfQorCXsKKwkgbHcgcjM0LCByX3RtcAorCSBhZGRsaSByX3RtcCwgc3AsIEZSQU1FX1IzNQorCX0KKwl7CisJIGx3IHIzNSwgcl90bXAKKwkgYWRkaSBzcCwgc3AsIEZSQU1FX1NJWkUKKwl9CisJanJwIGxyCisJU1REX0VORFBST0MoZmx1c2hfYW5kX2luc3RhbGxfY29udGV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9tbWFwLmMgYi9hcmNoL3RpbGUvbW0vbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NmY0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3RpbGUvbW0vbW1hcC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVGFrZW4gZnJvbSB0aGUgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIHNpbXBsaWZpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisKKy8qCisgKiBUb3Agb2YgbW1hcCBhcmVhIChqdXN0IGJlbG93IHRoZSBwcm9jZXNzIHN0YWNrKS4KKyAqCisgKiBMZWF2ZSBhbiBhdCBsZWFzdCB+MTI4IE1CIGhvbGUuCisgKi8KKyNkZWZpbmUgTUlOX0dBUCAoMTI4KjEwMjQqMTAyNCkKKyNkZWZpbmUgTUFYX0dBUCAoVEFTS19TSVpFLzYqNSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIGdhcCA9IHJsaW1pdChSTElNSVRfU1RBQ0spOworCXVuc2lnbmVkIGxvbmcgcmFuZG9tX2ZhY3RvciA9IDA7CisKKwlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpCisJCXJhbmRvbV9mYWN0b3IgPSBnZXRfcmFuZG9tX2ludCgpICUgKDEwMjQqMTAyNCk7CisKKwlpZiAoZ2FwIDwgTUlOX0dBUCkKKwkJZ2FwID0gTUlOX0dBUDsKKwllbHNlIGlmIChnYXAgPiBNQVhfR0FQKQorCQlnYXAgPSBNQVhfR0FQOworCisJcmV0dXJuIFBBR0VfQUxJR04oVEFTS19TSVpFIC0gZ2FwIC0gcmFuZG9tX2ZhY3Rvcik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uLCBjYWxsZWQgdmVyeSBlYXJseSBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgbmV3CisgKiBwcm9jZXNzIFZNIGltYWdlLCBzZXRzIHVwIHdoaWNoIFZNIGxheW91dCBmdW5jdGlvbiB0byB1c2U6CisgKi8KK3ZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworI2lmICFkZWZpbmVkKF9fdGlsZWd4X18pCisJaW50IGlzXzMyYml0ID0gMTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkKKwlpbnQgaXNfMzJiaXQgPSBpc19jb21wYXRfdGFzaygpOworI2Vsc2UKKwlpbnQgaXNfMzJiaXQgPSAwOworI2VuZGlmCisKKwkvKgorCSAqIFVzZSBzdGFuZGFyZCBsYXlvdXQgaWYgdGhlIGV4cGVjdGVkIHN0YWNrIGdyb3d0aCBpcyB1bmxpbWl0ZWQKKwkgKiBvciB3ZSBhcmUgcnVubmluZyBuYXRpdmUgNjQgYml0cy4KKwkgKi8KKwlpZiAoIWlzXzMyYml0IHx8IHJsaW1pdChSTElNSVRfU1RBQ0spID09IFJMSU1fSU5GSU5JVFkpIHsKKwkJbW0tPm1tYXBfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYTsKKwkJbW0tPnVubWFwX2FyZWEgPSBhcmNoX3VubWFwX2FyZWE7CisJfSBlbHNlIHsKKwkJbW0tPm1tYXBfYmFzZSA9IG1tYXBfYmFzZShtbSk7CisJCW1tLT5nZXRfdW5tYXBwZWRfYXJlYSA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bjsKKwkJbW0tPnVubWFwX2FyZWEgPSBhcmNoX3VubWFwX2FyZWFfdG9wZG93bjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vcGd0YWJsZS5jIGIvYXJjaC90aWxlL21tL3BndGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGMyMzE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC90aWxlL21tL3BndGFibGUuYwpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIFRpbGVyYSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKKyAqICAgTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiAgIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9ob21lY2FjaGUuaD4KKworI2RlZmluZSBLKHgpICgoeCkgPDwgKFBBR0VfU0hJRlQtMTApKQorCisvKgorICogVGhlIG5vcm1hbCBzaG93X2ZyZWVfYXJlYXMoKSBpcyB0b28gdmVyYm9zZSBvbiBUaWxlLCB3aXRoIGRvemVucworICogb2YgcHJvY2Vzc29ycyBhbmQgb2Z0ZW4gZm91ciBOVU1BIHpvbmVzIGVhY2ggd2l0aCBoaWdoIGFuZCBsb3dtZW0uCisgKi8KK3ZvaWQgc2hvd19tZW0odm9pZCkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKworCXByX2VycigiQWN0aXZlOiVsdSBpbmFjdGl2ZTolbHUgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IgorCSAgICAgICAiIGZyZWU6JWx1XG4gc2xhYjolbHUgbWFwcGVkOiVsdSBwYWdldGFibGVzOiVsdSBib3VuY2U6JWx1IgorCSAgICAgICAiIHBhZ2VjYWNoZTolbHUgc3dhcDolbHVcbiIsCisJICAgICAgIChnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfQU5PTikgKworCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9BQ1RJVkVfRklMRSkpLAorCSAgICAgICAoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfQU5PTikgKworCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9JTkFDVElWRV9GSUxFKSksCisJICAgICAgIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpLAorCSAgICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spLAorCSAgICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpLAorCSAgICAgICBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKSwKKwkgICAgICAgKGdsb2JhbF9wYWdlX3N0YXRlKE5SX1NMQUJfUkVDTEFJTUFCTEUpICsKKwkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSksCisJICAgICAgIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSwKKwkgICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSwKKwkgICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQk9VTkNFKSwKKwkgICAgICAgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9QQUdFUyksCisJICAgICAgIG5yX3N3YXBfcGFnZXMpOworCisJZm9yX2VhY2hfem9uZSh6b25lKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yZGVyLCB0b3RhbCA9IDAsIGxhcmdlc3Rfb3JkZXIgPSAtMTsKKworCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQorCQkJY29udGludWU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChvcmRlciA9IDA7IG9yZGVyIDwgTUFYX09SREVSOyBvcmRlcisrKSB7CisJCQlpbnQgbnIgPSB6b25lLT5mcmVlX2FyZWFbb3JkZXJdLm5yX2ZyZWU7CisJCQl0b3RhbCArPSBuciA8PCBvcmRlcjsKKwkJCWlmIChucikKKwkJCQlsYXJnZXN0X29yZGVyID0gb3JkZXI7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlwcl9lcnIoIk5vZGUgJWQgJTdzOiAlbHVrQiAobGFyZ2VzdCAlbHVLYilcbiIsCisJCSAgICAgICB6b25lX3RvX25pZCh6b25lKSwgem9uZS0+bmFtZSwKKwkJICAgICAgIEsodG90YWwpLCBsYXJnZXN0X29yZGVyID8gSygxVUwpIDw8IGxhcmdlc3Rfb3JkZXIgOiAwKTsKKwl9Cit9CisKKy8qCisgKiBBc3NvY2lhdGUgYSB2aXJ0dWFsIHBhZ2UgZnJhbWUgd2l0aCBhIGdpdmVuIHBoeXNpY2FsIHBhZ2UgZnJhbWUKKyAqIGFuZCBwcm90ZWN0aW9uIGZsYWdzIGZvciB0aGF0IGZyYW1lLgorICovCitzdGF0aWMgdm9pZCBzZXRfcHRlX3Bmbih1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgZmxhZ3MpCit7CisJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOworCXBtZF90ICpwbWQ7CisJcHRlX3QgKnB0ZTsKKworCXBnZCA9IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4KHZhZGRyKTsKKwlpZiAocGdkX25vbmUoKnBnZCkpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisJcHVkID0gcHVkX29mZnNldChwZ2QsIHZhZGRyKTsKKwlpZiAocHVkX25vbmUoKnB1ZCkpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisJcG1kID0gcG1kX29mZnNldChwdWQsIHZhZGRyKTsKKwlpZiAocG1kX25vbmUoKnBtZCkpIHsKKwkJQlVHKCk7CisJCXJldHVybjsKKwl9CisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCB2YWRkcik7CisJLyogPHBmbixmbGFncz4gc3RvcmVkIGFzLWlzLCB0byBwZXJtaXQgY2xlYXJpbmcgZW50cmllcyAqLworCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgZmxhZ3MpKTsKKworCS8qCisJICogSXQncyBlbm91Z2ggdG8gZmx1c2ggdGhpcyBvbmUgbWFwcGluZy4KKwkgKiBUaGlzIGFwcGVhcnMgY29uc2VydmF0aXZlIHNpbmNlIGl0IGlzIG9ubHkgY2FsbGVkCisJICogZnJvbSBfX3NldF9maXhtYXAuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgdmFkZHIsIFBBR0VfU0laRSk7Cit9CisKK3ZvaWQgX19zZXRfZml4bWFwKGVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeCwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBmbGFncykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSBfX2ZpeF90b192aXJ0KGlkeCk7CisKKwlpZiAoaWR4ID49IF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcykgeworCQlCVUcoKTsKKwkJcmV0dXJuOworCX0KKwlzZXRfcHRlX3BmbihhZGRyZXNzLCBwaHlzID4+IFBBR0VfU0hJRlQsIGZsYWdzKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0hJR0hQVEUpCitwdGVfdCAqX3B0ZV9vZmZzZXRfbWFwKHBtZF90ICpkaXIsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgZW51bSBrbV90eXBlIHR5cGUpCit7CisJcHRlX3QgKnB0ZSA9IGttYXBfYXRvbWljKHBtZF9wYWdlKCpkaXIpLCB0eXBlKSArCisJCShwbWRfcHRmbigqZGlyKSA8PCBIVl9MT0cyX1BBR0VfVEFCTEVfQUxJR04pICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gJnB0ZVtwdGVfaW5kZXgoYWRkcmVzcyldOworfQorI2VuZGlmCisKKy8qCisgKiBMaXN0IG9mIGFsbCBwZ2QncyBuZWVkZWQgc28gaXQgY2FuIGludmFsaWRhdGUgZW50cmllcyBpbiBib3RoIGNhY2hlZAorICogYW5kIHVuY2FjaGVkIHBnZCdzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGNvZGVwYXRoLWJhc2VkIGxvY2tpbmcKKyAqIGFnYWluc3QgcGFnZWF0dHIuYzsgaXQgaXMgdGhlIHVuaXF1ZSBjYXNlIGluIHdoaWNoIGEgdmFsaWQgY2hhbmdlCisgKiBvZiBrZXJuZWwgcGFnZXRhYmxlcyBjYW4ndCBiZSBsYXppbHkgc3luY2hyb25pemVkIGJ5IHZtYWxsb2MgZmF1bHRzLgorICogdm1hbGxvYyBmYXVsdHMgd29yayBiZWNhdXNlIGF0dGFjaGVkIHBhZ2V0YWJsZXMgYXJlIG5ldmVyIGZyZWVkLgorICogVGhlIGxvY2tpbmcgc2NoZW1lIHdhcyBjaG9zZW4gb24gdGhlIGJhc2lzIG9mIG1hbmZyZWQncworICogcmVjb21tZW5kYXRpb25zIGFuZCBoYXZpbmcgbm8gY29yZSBpbXBhY3Qgd2hhdHNvZXZlci4KKyAqIC0tIHdsaQorICovCitERUZJTkVfU1BJTkxPQ0socGdkX2xvY2spOworTElTVF9IRUFEKHBnZF9saXN0KTsKKworc3RhdGljIGlubGluZSB2b2lkIHBnZF9saXN0X2FkZChwZ2RfdCAqcGdkKQoreworCWxpc3RfYWRkKHBnZF90b19saXN0KHBnZCksICZwZ2RfbGlzdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfbGlzdF9kZWwocGdkX3QgKnBnZCkKK3sKKwlsaXN0X2RlbChwZ2RfdG9fbGlzdChwZ2QpKTsKK30KKworI2RlZmluZSBLRVJORUxfUEdEX0lOREVYX1NUQVJUIHBnZF9pbmRleChQQUdFX09GRlNFVCkKKyNkZWZpbmUgS0VSTkVMX1BHRF9QVFJTIChQVFJTX1BFUl9QR0QgLSBLRVJORUxfUEdEX0lOREVYX1NUQVJUKQorCitzdGF0aWMgdm9pZCBwZ2RfY3RvcihwZ2RfdCAqcGdkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltZW1zZXQocGdkLCAwLCBLRVJORUxfUEdEX0lOREVYX1NUQVJUKnNpemVvZihwZ2RfdCkpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOworCisjaWZuZGVmIF9fdGlsZWd4X18KKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHVzZXIgaW50ZXJydXB0IHZlY3RvciBoYXMgbm8gTDIuCisJICogSXQgbmV2ZXIgc2hvdWxkIGZvciB0aGUgc3dhcHBlciwgYW5kIG5ldyBwYWdlIHRhYmxlcworCSAqIHNob3VsZCBhbHdheXMgc3RhcnQgd2l0aCBhbiBlbXB0eSB1c2VyIGludGVycnVwdCB2ZWN0b3IuCisJICovCisJQlVHX09OKCgodTY0ICopc3dhcHBlcl9wZ19kaXIpW3BnZF9pbmRleChNRU1fVVNFUl9JTlRSUFQpXSAhPSAwKTsKKyNlbmRpZgorCisJY2xvbmVfcGdkX3JhbmdlKHBnZCArIEtFUk5FTF9QR0RfSU5ERVhfU1RBUlQsCisJCQlzd2FwcGVyX3BnX2RpciArIEtFUk5FTF9QR0RfSU5ERVhfU1RBUlQsCisJCQlLRVJORUxfUEdEX1BUUlMpOworCisJcGdkX2xpc3RfYWRkKHBnZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGdkX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcGdkX2R0b3IocGdkX3QgKnBnZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOyAvKiBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZwZ2RfbG9jaywgZmxhZ3MpOworCXBnZF9saXN0X2RlbChwZ2QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBnZF9sb2NrLCBmbGFncyk7Cit9CisKK3BnZF90ICpwZ2RfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKnBnZCA9IGttZW1fY2FjaGVfYWxsb2MocGdkX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAocGdkKQorCQlwZ2RfY3RvcihwZ2QpOworCXJldHVybiBwZ2Q7Cit9CisKK3ZvaWQgcGdkX2ZyZWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpCit7CisJcGdkX2R0b3IocGdkKTsKKwlrbWVtX2NhY2hlX2ZyZWUocGdkX2NhY2hlLCBwZ2QpOworfQorCisKKyNkZWZpbmUgTDJfVVNFUl9QR1RBQkxFX1BBR0VTICgxIDw8IEwyX1VTRVJfUEdUQUJMRV9PUkRFUikKKworc3RydWN0IHBhZ2UgKnB0ZV9hbGxvY19vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlnZnBfdCBmbGFncyA9IEdGUF9LRVJORUx8X19HRlBfUkVQRUFUfF9fR0ZQX1pFUk98X19HRlBfQ09NUDsKKwlzdHJ1Y3QgcGFnZSAqcDsKKworI2lmZGVmIENPTkZJR19ISUdIUFRFCisJZmxhZ3MgfD0gX19HRlBfSElHSE1FTTsKKyNlbmRpZgorCisJcCA9IGFsbG9jX3BhZ2VzKGZsYWdzLCBMMl9VU0VSX1BHVEFCTEVfT1JERVIpOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcGd0YWJsZV9wYWdlX2N0b3IocCk7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBGcmVlIHBhZ2UgaW1tZWRpYXRlbHkgKHVzZWQgaW4gX19wdGVfYWxsb2MgaWYgd2UgcmFjZWQgd2l0aCBhbm90aGVyCisgKiBwcm9jZXNzKS4gIFdlIGhhdmUgdG8gY29ycmVjdCB3aGF0ZXZlciBwdGVfYWxsb2Nfb25lKCkgZGlkIGJlZm9yZQorICogcmV0dXJuaW5nIHRoZSBwYWdlcyB0byB0aGUgYWxsb2NhdG9yLgorICovCit2b2lkIHB0ZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcCkKK3sKKwlwZ3RhYmxlX3BhZ2VfZHRvcihwKTsKKwlfX2ZyZWVfcGFnZXMocCwgTDJfVVNFUl9QR1RBQkxFX09SREVSKTsKK30KKwordm9pZCBfX3B0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3QgcGFnZSAqcHRlLAorCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCWludCBpOworCisJcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsKKwl0bGItPm5lZWRfZmx1c2ggPSAxOworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJc3RydWN0IHBhZ2UgKnB0ZV9wYWdlc1tMMl9VU0VSX1BHVEFCTEVfUEFHRVNdOworCQlmb3IgKGkgPSAwOyBpIDwgTDJfVVNFUl9QR1RBQkxFX1BBR0VTOyArK2kpCisJCQlwdGVfcGFnZXNbaV0gPSBwdGUgKyBpOworCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHB0ZV9wYWdlcywgTDJfVVNFUl9QR1RBQkxFX1BBR0VTKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTDJfVVNFUl9QR1RBQkxFX1BBR0VTOyArK2kpIHsKKwkJdGxiLT5wYWdlc1t0bGItPm5yKytdID0gcHRlICsgaTsKKwkJaWYgKHRsYi0+bnIgPj0gRlJFRV9QVEVfTlIpCisJCQl0bGJfZmx1c2hfbW11KHRsYiwgMCwgMCk7CisJfQorfQorCisjaWZuZGVmIF9fdGlsZWd4X18KKworLyoKKyAqIEZJWE1FOiBuZWVkcyB0byBiZSBhdG9taWMgdnMgaHlwZXJ2aXNvciB3cml0ZXMuICBGb3Igbm93IHdlIG1ha2UgdGhlCisgKiB3aW5kb3cgb2YgdnVsbmVyYWJpbGl0eSBhIGJpdCBzbWFsbGVyIGJ5IGRvaW5nIGFuIHVubG9ja2VkIDgtYml0IHVwZGF0ZS4KKyAqLworaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworI2lmIEhWX1BURV9JTkRFWF9BQ0NFU1NFRCA8IDggfHwgSFZfUFRFX0lOREVYX0FDQ0VTU0VEID49IDE2CisjIGVycm9yIENvZGUgYXNzdW1lcyBIVl9QVEUgImFjY2Vzc2VkIiBiaXQgaW4gc2Vjb25kIGJ5dGUKKyNlbmRpZgorCXU4ICp0bXAgPSAodTggKilwdGVwOworCXU4IHNlY29uZF9ieXRlID0gdG1wWzFdOworCWlmICghKHNlY29uZF9ieXRlICYgKDEgPDwgKEhWX1BURV9JTkRFWF9BQ0NFU1NFRCAtIDgpKSkpCisJCXJldHVybiAwOworCXRtcFsxXSA9IHNlY29uZF9ieXRlICYgfigxIDw8IChIVl9QVEVfSU5ERVhfQUNDRVNTRUQgLSA4KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGF0b21pYyB2cyBoeXBlcnZpc29yIHdyaXRlcywgc2luY2UgdGhlIGh5cGVydmlzb3IKKyAqIGFsd2F5cyB3cml0ZXMgdGhlIGxvdyB3b3JkICh3aGVyZSAiYWNjZXNzZWQiIGFuZCAiZGlydHkiIGFyZSkgYW5kIHRoaXMKKyAqIHJvdXRpbmUgb25seSB3cml0ZXMgdGhlIGhpZ2ggd29yZC4KKyAqLwordm9pZCBwdGVwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQoreworI2lmIEhWX1BURV9JTkRFWF9XUklUQUJMRSA8IDMyCisjIGVycm9yIENvZGUgYXNzdW1lcyBIVl9QVEUgIndyaXRhYmxlIiBiaXQgaW4gaGlnaCB3b3JkCisjZW5kaWYKKwl1MzIgKnRtcCA9ICh1MzIgKilwdGVwOworCXRtcFsxXSA9IHRtcFsxXSAmIH4oMSA8PCAoSFZfUFRFX0lOREVYX1dSSVRBQkxFIC0gMzIpKTsKK30KKworI2VuZGlmCisKK3B0ZV90ICp2aXJ0X3RvX3B0ZShzdHJ1Y3QgbW1fc3RydWN0KiBtbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCisJaWYgKHBnZF9hZGRyX2ludmFsaWQoYWRkcikpCisJCXJldHVybiBOVUxMOworCisJcGdkID0gbW0gPyBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKSA6IHN3YXBwZXJfcGdfZGlyICsgcGdkX2luZGV4KGFkZHIpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKQorCQlyZXR1cm4gTlVMTDsKKwlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgYWRkcik7CisJaWYgKHBtZF9odWdlX3BhZ2UoKnBtZCkpCisJCXJldHVybiAocHRlX3QgKilwbWQ7CisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7Cit9CisKK3BncHJvdF90IHNldF9yZW1vdGVfY2FjaGVfY3B1KHBncHJvdF90IHByb3QsIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IHdpZHRoID0gc21wX3dpZHRoOworCWludCB4ID0gY3B1ICUgd2lkdGg7CisJaW50IHkgPSBjcHUgLyB3aWR0aDsKKwlCVUdfT04oeSA+PSBzbXBfaGVpZ2h0KTsKKwlCVUdfT04oaHZfcHRlX2dldF9tb2RlKHByb3QpICE9IEhWX1BURV9NT0RFX0NBQ0hFX1RJTEVfTDMpOworCUJVR19PTihjcHUgPCAwIHx8IGNwdSA+PSBOUl9DUFVTKTsKKwlCVUdfT04oIWNwdV9pc192YWxpZF9sb3RhcihjcHUpKTsKKwlyZXR1cm4gaHZfcHRlX3NldF9sb3Rhcihwcm90LCBIVl9YWV9UT19MT1RBUih4LCB5KSk7Cit9CisKK2ludCBnZXRfcmVtb3RlX2NhY2hlX2NwdShwZ3Byb3RfdCBwcm90KQoreworCUhWX0xPVEFSIGxvdGFyID0gaHZfcHRlX2dldF9sb3Rhcihwcm90KTsKKwlpbnQgeCA9IEhWX0xPVEFSX1gobG90YXIpOworCWludCB5ID0gSFZfTE9UQVJfWShsb3Rhcik7CisJQlVHX09OKGh2X3B0ZV9nZXRfbW9kZShwcm90KSAhPSBIVl9QVEVfTU9ERV9DQUNIRV9USUxFX0wzKTsKKwlyZXR1cm4geCArIHkgKiBzbXBfd2lkdGg7Cit9CisKK3ZvaWQgc2V0X3B0ZV9vcmRlcihwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCBpbnQgb3JkZXIpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCisJLyogVXBkYXRlIHRoZSBob21lIG9mIGEgUFRFIGlmIG5lY2Vzc2FyeSAqLworCXB0ZSA9IHB0ZV9zZXRfaG9tZShwdGUsIHBhZ2VfaG9tZShwYWdlKSk7CisKKyNpZmRlZiBfX3RpbGVneF9fCisJKnB0ZXAgPSBwdGU7CisjZWxzZQorCS8qCisJICogV2hlbiBzZXR0aW5nIGEgUFRFLCB3cml0ZSB0aGUgaGlnaCBiaXRzIGZpcnN0LCB0aGVuIHdyaXRlCisJICogdGhlIGxvdyBiaXRzLiAgVGhpcyBzZXRzIHRoZSAicHJlc2VudCIgYml0IG9ubHkgYWZ0ZXIgdGhlCisJICogb3RoZXIgYml0cyBhcmUgaW4gcGxhY2UuICBJZiBhIHBhcnRpY3VsYXIgUFRFIHVwZGF0ZQorCSAqIGludm9sdmVzIHRyYW5zaXRpb25pbmcgZnJvbSBvbmUgdmFsaWQgUFRFIHRvIGFub3RoZXIsIGl0CisJICogbWF5IGJlIG5lY2Vzc2FyeSB0byBjYWxsIHNldF9wdGVfb3JkZXIoKSBtb3JlIHRoYW4gb25jZSwKKwkgKiB0cmFuc2l0aW9uaW5nIHZpYSBhIHN1aXRhYmxlIGludGVybWVkaWF0ZSBzdGF0ZS4KKwkgKiBOb3RlIHRoYXQgdGhpcyBzZXF1ZW5jZSBhbHNvIG1lYW5zIHRoYXQgaWYgd2UgYXJlIHRyYW5zaXRpb25pbmcKKwkgKiBmcm9tIGFueSBtaWdyYXRpbmcgUFRFIHRvIGEgbm9uLW1pZ3JhdGluZyBvbmUsIHdlIHdpbGwgbm90CisJICogc2VlIGEgaGFsZi11cGRhdGVkIFBURSB3aXRoIHRoZSBtaWdyYXRpbmcgYml0IG9mZi4KKwkgKi8KKyNpZiBIVl9QVEVfSU5ERVhfUFJFU0VOVCA+PSAzMiB8fCBIVl9QVEVfSU5ERVhfTUlHUkFUSU5HID49IDMyCisjIGVycm9yIE11c3Qgd3JpdGUgdGhlIHByZXNlbnQgYW5kIG1pZ3JhdGluZyBiaXRzIGxhc3QKKyNlbmRpZgorCSgodTMyICopcHRlcClbMV0gPSAodTMyKShwdGVfdmFsKHB0ZSkgPj4gMzIpOworCWJhcnJpZXIoKTsKKwkoKHUzMiAqKXB0ZXApWzBdID0gKHUzMikocHRlX3ZhbChwdGUpKTsKKyNlbmRpZgorfQorCisvKiBDYW4gdGhpcyBtbSBsb2FkIGEgUFRFIHdpdGggY2FjaGVkX3ByaW9yaXR5IHNldD8gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1tX2lzX3ByaW9yaXR5X2NhY2hlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gbW0tPmNvbnRleHQucHJpb3JpdHlfY2FjaGVkOworfQorCisvKgorICogQWRkIGEgcHJpb3JpdHkgbWFwcGluZyB0byBhbiBtbV9jb250ZXh0IGFuZAorICogbm90aWZ5IHRoZSBoeXBlcnZpc29yIGlmIHRoaXMgaXMgdGhlIGZpcnN0IG9uZS4KKyAqLwordm9pZCBzdGFydF9tbV9jYWNoaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmICghbW1faXNfcHJpb3JpdHlfY2FjaGVkKG1tKSkgeworCQltbS0+Y29udGV4dC5wcmlvcml0eV9jYWNoZWQgPSAtMVU7CisJCWh2X3NldF9jYWNoaW5nKC0xVSk7CisJfQorfQorCisvKgorICogVmFsaWRhdGUgYW5kIHJldHVybiB0aGUgcHJpb3JpdHlfY2FjaGVkIGZsYWcuICBXZSBrbm93IGlmIGl0J3MgemVybworICogdGhhdCB3ZSBkb24ndCBuZWVkIHRvIHNjYW4sIHNpbmNlIHdlIGltbWVkaWF0ZWx5IHNldCBpdCBub24temVybworICogd2hlbiB3ZSBmaXJzdCBjb25zaWRlciBhIE1BUF9DQUNIRV9QUklPUklUWSBtYXBwaW5nLgorICoKKyAqIFdlIG9ubHkgX3RyeV8gdG8gYWNxdWlyZSB0aGUgbW1hcF9zZW0gc2VtYXBob3JlOyBpZiB3ZSBjYW4ndCBhY3F1aXJlIGl0LAorICogc2luY2Ugd2UncmUgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKHNlcnZpY2luZyBzd2l0Y2hfbW0pIHdlIGRvbid0CisgKiB3b3JyeSBhYm91dCBpdCBhbmQgZG9uJ3QgdW5zZXQgdGhlICJwcmlvcml0eV9jYWNoZWQiIGZpZWxkLgorICogUHJlc3VtYWJseSB3ZSdsbCBjb21lIGJhY2sgbGF0ZXIgYW5kIGhhdmUgbW9yZSBsdWNrIGFuZCBjbGVhcgorICogdGhlIHZhbHVlIHRoZW47IGZvciBub3cgd2UnbGwganVzdCBrZWVwIHRoZSBjYWNoZSBtYXJrZWQgZm9yIHByaW9yaXR5LgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVwZGF0ZV9wcmlvcml0eV9jYWNoZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYgKG1tLT5jb250ZXh0LnByaW9yaXR5X2NhY2hlZCAmJiBkb3duX3dyaXRlX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpIHsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bTsKKwkJZm9yICh2bSA9IG1tLT5tbWFwOyB2bTsgdm0gPSB2bS0+dm1fbmV4dCkgeworCQkJaWYgKGh2X3B0ZV9nZXRfY2FjaGVkX3ByaW9yaXR5KHZtLT52bV9wYWdlX3Byb3QpKQorCQkJCWJyZWFrOworCQl9CisJCWlmICh2bSA9PSBOVUxMKQorCQkJbW0tPmNvbnRleHQucHJpb3JpdHlfY2FjaGVkID0gMDsKKwkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJfQorCXJldHVybiBtbS0+Y29udGV4dC5wcmlvcml0eV9jYWNoZWQ7Cit9CisKKy8qIFNldCBjYWNoaW5nIGNvcnJlY3RseSBmb3IgYW4gbW0gdGhhdCB3ZSBhcmUgc3dpdGNoaW5nIHRvLiAqLwordm9pZCBjaGVja19tbV9jYWNoaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCit7CisJaWYgKCFtbV9pc19wcmlvcml0eV9jYWNoZWQobmV4dCkpIHsKKwkJLyoKKwkJICogSWYgdGhlIG5ldyBtbSBkb2Vzbid0IHVzZSBwcmlvcml0eSBjYWNoaW5nLCBqdXN0IHNlZSBpZiB3ZQorCQkgKiBuZWVkIHRoZSBodl9zZXRfY2FjaGluZygpLCBvciBjYW4gYXNzdW1lIGl0J3MgYWxyZWFkeSB6ZXJvLgorCQkgKi8KKwkJaWYgKG1tX2lzX3ByaW9yaXR5X2NhY2hlZChwcmV2KSkKKwkJCWh2X3NldF9jYWNoaW5nKDApOworCX0gZWxzZSB7CisJCWh2X3NldF9jYWNoaW5nKHVwZGF0ZV9wcmlvcml0eV9jYWNoZWQobmV4dCkpOworCX0KK30KKworI2lmIENISVBfSEFTX01NSU8oKQorCisvKiBNYXAgYW4gYXJiaXRyYXJ5IE1NSU8gYWRkcmVzcywgaG9tZWQgYWNjb3JkaW5nIHRvIHBncHJvdCwgaW50byBWQSBzcGFjZS4gKi8KK3ZvaWQgX19pb21lbSAqaW9yZW1hcF9wcm90KHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIHBncHJvdF90IGhvbWUpCit7CisJdm9pZCAqYWRkcjsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHI7CisJcGdwcm90X3QgcGdwcm90OworCisJLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KKwlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKKwlpZiAoIXNpemUgfHwgbGFzdF9hZGRyIDwgcGh5c19hZGRyKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIENyZWF0ZSBhIHJlYWQvd3JpdGUsIE1NSU8gVkEgbWFwcGluZyBob21lZCBhdCB0aGUgcmVxdWVzdGVkIHNoaW0uICovCisJcGdwcm90ID0gUEFHRV9LRVJORUw7CisJcGdwcm90ID0gaHZfcHRlX3NldF9tb2RlKHBncHJvdCwgSFZfUFRFX01PREVfTU1JTyk7CisJcGdwcm90ID0gaHZfcHRlX3NldF9sb3RhcihwZ3Byb3QsIGh2X3B0ZV9nZXRfbG90YXIoaG9tZSkpOworCisJLyoKKwkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAorCSAqLworCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7CisJcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKKwlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIrMSkgLSBwaHlzX2FkZHI7CisKKwkvKgorCSAqIE9rLCBnbyBmb3IgaXQuLgorCSAqLworCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQIC8qIHwgb3RoZXIgZmxhZ3M/ICovKTsKKwlpZiAoIWFyZWEpCisJCXJldHVybiBOVUxMOworCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKKwlhZGRyID0gYXJlYS0+YWRkcjsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgcGdwcm90KSkgeworCQlyZW1vdmVfdm1fYXJlYSgodm9pZCAqKShQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZykgYWRkcikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKSAob2Zmc2V0ICsgKGNoYXIgKilhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW9yZW1hcF9wcm90KTsKKworLyogTWFwIGEgUENJIE1NSU8gYnVzIGFkZHJlc3MgaW50byBWQSBzcGFjZS4gKi8KK3ZvaWQgX19pb21lbSAqaW9yZW1hcChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcGFuaWMoImlvcmVtYXAgZm9yIFBDSSBNTUlPIGlzIG5vdCBzdXBwb3J0ZWQiKTsKK30KK0VYUE9SVF9TWU1CT0woaW9yZW1hcCk7CisKKy8qIFVubWFwIGFuIE1NSU8gVkEgbWFwcGluZy4gKi8KK3ZvaWQgaW91bm1hcCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHJfaW4pCit7CisJdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyID0gKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKQorCQkoUEFHRV9NQVNLICYgKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyX2luKTsKKyNpZiAxCisJdnVubWFwKCh2b2lkICogX19mb3JjZSlhZGRyKTsKKyNlbHNlCisJLyogeDg2IHVzZXMgdGhpcyBjb21wbGljYXRlZCBmbG93IGluc3RlYWQgb2YgdnVubWFwKCkuICBJcworCSAqIHRoZXJlIGFueSBwYXJ0aWN1bGFyIHJlYXNvbiB3ZSBzaG91bGQgZG8gdGhlIHNhbWU/ICovCisJc3RydWN0IHZtX3N0cnVjdCAqcCwgKm87CisKKwkvKiBVc2UgdGhlIHZtIGFyZWEgdW5sb2NrZWQsIGFzc3VtaW5nIHRoZSBjYWxsZXIKKwkgICBlbnN1cmVzIHRoZXJlIGlzbid0IGFub3RoZXIgaW91bm1hcCBmb3IgdGhlIHNhbWUgYWRkcmVzcworCSAgIGluIHBhcmFsbGVsLiBSZXVzZSBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIGlzIHByZXZlbnRlZCBieQorCSAgIGxlYXZpbmcgaXQgaW4gdGhlIGdsb2JhbCBsaXN0cyB1bnRpbCB3ZSdyZSBkb25lIHdpdGggaXQuCisJICAgY3BhIHRha2VzIGNhcmUgb2YgdGhlIGRpcmVjdCBtYXBwaW5ncy4gKi8KKwlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKKwlmb3IgKHAgPSB2bWxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5hZGRyID09IGFkZHIpCisJCQlicmVhazsKKwl9CisJcmVhZF91bmxvY2soJnZtbGlzdF9sb2NrKTsKKworCWlmICghcCkgeworCQlwcl9lcnIoImlvdW5tYXA6IGJhZCBhZGRyZXNzICVwXG4iLCBhZGRyKTsKKwkJZHVtcF9zdGFjaygpOworCQlyZXR1cm47CisJfQorCisJLyogRmluYWxseSByZW1vdmUgaXQgKi8KKwlvID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKilhZGRyKTsKKwlCVUdfT04ocCAhPSBvIHx8IG8gPT0gTlVMTCk7CisJa2ZyZWUocCk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woaW91bm1hcCk7CisKKyNlbmRpZiAvKiBDSElQX0hBU19NTUlPKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZy5jb21tb24gYi9hcmNoL3VtL0tjb25maWcuY29tbW9uCmluZGV4IDBkMjA3ZTcuLjdjOGUyNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vS2NvbmZpZy5jb21tb24KKysrIGIvYXJjaC91bS9LY29uZmlnLmNvbW1vbgpAQCAtNTUsMTAgKzU1LDYgQEAKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEJVRwogCi1jb25maWcgR0VORVJJQ19USU1FCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYwppbmRleCA2ZTUxNDI0Li4yNWUxOTY1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jCkBAIC0yMTAsOSArMjEwLDkgQEAKIAlsaXN0X2Zvcl9lYWNoKGVsZSwgJmxpc3QpIHsKIAkJY2hhbiA9IGxpc3RfZW50cnkoZWxlLCBzdHJ1Y3QgY2hhbiwgZnJlZV9saXN0KTsKIAotCQlpZiAoY2hhbi0+aW5wdXQpCisJCWlmIChjaGFuLT5pbnB1dCAmJiBjaGFuLT5lbmFibGVkKQogCQkJZnJlZV9pcnEoY2hhbi0+bGluZS0+ZHJpdmVyLT5yZWFkX2lycSwgY2hhbik7Ci0JCWlmIChjaGFuLT5vdXRwdXQpCisJCWlmIChjaGFuLT5vdXRwdXQgJiYgY2hhbi0+ZW5hYmxlZCkKIAkJCWZyZWVfaXJxKGNoYW4tPmxpbmUtPmRyaXZlci0+d3JpdGVfaXJxLCBjaGFuKTsKIAkJY2hhbi0+ZW5hYmxlZCA9IDA7CiAJfQpAQCAtMjMxLDkgKzIzMSw5IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycXNfdG9fZnJlZV9sb2NrLCBmbGFncyk7CiAJfQogCWVsc2UgewotCQlpZiAoY2hhbi0+aW5wdXQpCisJCWlmIChjaGFuLT5pbnB1dCAmJiBjaGFuLT5lbmFibGVkKQogCQkJZnJlZV9pcnEoY2hhbi0+bGluZS0+ZHJpdmVyLT5yZWFkX2lycSwgY2hhbik7Ci0JCWlmIChjaGFuLT5vdXRwdXQpCisJCWlmIChjaGFuLT5vdXRwdXQgJiYgY2hhbi0+ZW5hYmxlZCkKIAkJCWZyZWVfaXJxKGNoYW4tPmxpbmUtPmRyaXZlci0+d3JpdGVfaXJxLCBjaGFuKTsKIAkJY2hhbi0+ZW5hYmxlZCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvaG9zdGF1ZGlvX2tlcm4uYwppbmRleCBhZTQyNjk1Li42ODE0MmRmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvaG9zdGF1ZGlvX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvaG9zdGF1ZGlvX2tlcm4uYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlICJsaW51eC9zbGFiLmgiCiAjaW5jbHVkZSAibGludXgvc291bmQuaCIKICNpbmNsdWRlICJsaW51eC9zb3VuZGNhcmQuaCIKKyNpbmNsdWRlICJsaW51eC9zbXBfbG9jay5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCiAjaW5jbHVkZSAiaW5pdC5oIgogI2luY2x1ZGUgIm9zLmgiCkBAIC0xOTgsNyArMTk5LDEwIEBACiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQl3ID0gMTsKIAorCWxvY2tfa2VybmVsKCk7CiAJcmV0ID0gb3Nfb3Blbl9maWxlKGRzcCwgb2Zfc2V0X3J3KE9QRU5GTEFHUygpLCByLCB3KSwgMCk7CisJdW5sb2NrX2tlcm5lbCgpOworCiAJaWYgKHJldCA8IDApIHsKIAkJa2ZyZWUoc3RhdGUpOwogCQlyZXR1cm4gcmV0OwpAQCAtMjU0LDcgKzI1OCw5IEBACiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQogCQl3ID0gMTsKIAorCWxvY2tfa2VybmVsKCk7CiAJcmV0ID0gb3Nfb3Blbl9maWxlKG1peGVyLCBvZl9zZXRfcncoT1BFTkZMQUdTKCksIHIsIHcpLCAwKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImhvc3RhdWRpb19vcGVuX21peGRldiBmYWlsZWQgdG8gb3BlbiAnJXMnLCAiCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IGRhOTkyYTMuLjFiY2QyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAibGludXgvbW0uaCIKICNpbmNsdWRlICJsaW51eC9zbGFiLmgiCiAjaW5jbHVkZSAibGludXgvdm1hbGxvYy5oIgorI2luY2x1ZGUgImxpbnV4L3NtcF9sb2NrLmgiCiAjaW5jbHVkZSAibGludXgvYmxrcGcuaCIKICNpbmNsdWRlICJsaW51eC9nZW5oZC5oIgogI2luY2x1ZGUgImxpbnV4L3NwaW5sb2NrLmgiCkBAIC0xMDk4LDYgKzEwOTksNyBAQAogCXN0cnVjdCB1YmQgKnViZF9kZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGVyciA9IDA7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWlmKHViZF9kZXYtPmNvdW50ID09IDApewogCQllcnIgPSB1YmRfb3Blbl9kZXYodWJkX2Rldik7CiAJCWlmKGVycil7CkBAIC0xMTE1LDcgKzExMTcsOCBAQAogCSAgICAgICAgaWYoLS11YmRfZGV2LT5jb3VudCA9PSAwKSB1YmRfY2xvc2VfZGV2KHViZF9kZXYpOwogCSAgICAgICAgZXJyID0gLUVST0ZTOwogCX0qLwotIG91dDoKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTEyMyw4ICsxMTI2LDEwIEBACiB7CiAJc3RydWN0IHViZCAqdWJkX2RldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYoLS11YmRfZGV2LT5jb3VudCA9PSAwKQogCQl1YmRfY2xvc2VfZGV2KHViZF9kZXYpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGI5NDhjMTQuLjE3YTJjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTk0LDcgKzk0LDYgQEAKIAogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0jZGVmaW5lIGRtYV9pc19jb25zaXN0ZW50KGQsIGgpICgxKQogCiBzdGF0aWMgaW5saW5lIGludAogZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAwODRkZTRhLi4wMDMyZjkyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC02MCw3ICs2MCw3IEBACiAJc2V0X3B1ZChwdWQsIF9fcHVkKF9QQUdFX1RBQkxFICsgX19wYShwbWQpKSkKIAogI2lmZGVmIENPTkZJR182NEJJVAotI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBzZXRfNjRiaXQoKHBoeXNfdCAqKSAocHVkcHRyKSwgcHVkX3ZhbChwdWR2YWwpKQorI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKSBzZXRfNjRiaXQoKHU2NCAqKSAocHVkcHRyKSwgcHVkX3ZhbChwdWR2YWwpKQogI2Vsc2UKICNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbCkgKCoocHVkcHRyKSA9IChwdWR2YWwpKQogI2VuZGlmCkBAIC03Myw3ICs3Myw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX21rdXB0b2RhdGUocGdkX3QgcGdkKSB7IHBnZF92YWwocGdkKSAmPSB+X1BBR0VfTkVXUEFHRTsgfQogCiAjaWZkZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIHNldF82NGJpdCgocGh5c190ICopIChwbWRwdHIpLCBwbWRfdmFsKHBtZHZhbCkpCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIHNldF82NGJpdCgodTY0ICopIChwbWRwdHIpLCBwbWRfdmFsKHBtZHZhbCkpCiAjZWxzZQogI2RlZmluZSBzZXRfcG1kKHBtZHB0ciwgcG1kdmFsKSAoKihwbWRwdHIpID0gKHBtZHZhbCkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaCBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaAppbmRleCBjZDQwZmRkLi5jNDYxN2JhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oCkBAIC0xNjEsNiArMTYxLDkgQEAKIAkJCSAgICAgIGxvbmcgKnNwYXJlX291dCk7CiBleHRlcm4gaW50IG9zX2NoYW5nZV9kaXIoY2hhciAqZGlyKTsKIGV4dGVybiBpbnQgb3NfZmNoYW5nZV9kaXIoaW50IGZkKTsKK2V4dGVybiB1bnNpZ25lZCBvc19tYWpvcih1bnNpZ25lZCBsb25nIGxvbmcgZGV2KTsKK2V4dGVybiB1bnNpZ25lZCBvc19taW5vcih1bnNpZ25lZCBsb25nIGxvbmcgZGV2KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgb3NfbWFrZWRldih1bnNpZ25lZCBtYWpvciwgdW5zaWduZWQgbWlub3IpOwogCiAvKiBzdGFydF91cC5jICovCiBleHRlcm4gdm9pZCBvc19lYXJseV9jaGVja3Modm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jIGIvYXJjaC91bS9rZXJuZWwva3N5bXMuYwppbmRleCA4MzZmYzliLi4wYWUwZGZjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCisrKyBiL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKQEAgLTU4LDYgKzU4LDkgQEAKIEVYUE9SVF9TWU1CT0wob3NfcmN2X2ZkKTsKIEVYUE9SVF9TWU1CT0wocnVuX2hlbHBlcik7CiBFWFBPUlRfU1lNQk9MKHN0YXJ0X3RocmVhZCk7CitFWFBPUlRfU1lNQk9MKG9zX21ham9yKTsKK0VYUE9SVF9TWU1CT0wob3NfbWlub3IpOworRVhQT1JUX1NZTUJPTChvc19tYWtlZGV2KTsKIAogRVhQT1JUX1NZTUJPTChhZGRfc2lnaW9fZmQpOwogRVhQT1JUX1NZTUJPTChpZ25vcmVfc2lnaW9fZmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwppbmRleCA0ODQ1MDk5Li5lMDUxMDQ5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNyw5ICs3LDYgQEAKICNpbmNsdWRlICJsaW51eC9wdHJhY2UuaCIKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImFzbS91YWNjZXNzLmgiCi0jaWZkZWYgQ09ORklHX1BST0NfTU0KLSNpbmNsdWRlICJwcm9jX21tLmgiCi0jZW5kaWYKICNpbmNsdWRlICJza2FzX3B0cmFjZS5oIgogCiAKQEAgLTE1OCwyNCArMTU1LDYgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BST0NfTU0KLQljYXNlIFBUUkFDRV9TV0lUQ0hfTU06IHsKLQkJc3RydWN0IG1tX3N0cnVjdCAqb2xkID0gY2hpbGQtPm1tOwotCQlzdHJ1Y3QgbW1fc3RydWN0ICpuZXcgPSBwcm9jX21tX2dldF9tbShkYXRhKTsKLQotCQlpZiAoSVNfRVJSKG5ldykpIHsKLQkJCXJldCA9IFBUUl9FUlIobmV3KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYXRvbWljX2luYygmbmV3LT5tbV91c2Vycyk7Ci0JCWNoaWxkLT5tbSA9IG5ldzsKLQkJY2hpbGQtPmFjdGl2ZV9tbSA9IG5ldzsKLQkJbW1wdXQob2xkKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCiAjaWZkZWYgUFRSQUNFX0FSQ0hfUFJDVEwKIAljYXNlIFBUUkFDRV9BUkNIX1BSQ1RMOgogCQkvKiBYWFggQ2FsbHMgcHRyYWNlIG9uIHRoZSBob3N0IC0gbmVlZHMgc29tZSBTTVAgdGhpbmtpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWUuYyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwppbmRleCBjOGI5YzQ2Li5hMDhkOWZhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZS5jCkBAIC0xMDIsMTYgKzEwMiwxNiBAQAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmaXRpbWVyX2Nsb2NrZXZlbnQpOwogfQogCit2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCWxvbmcgbG9uZyBuc2VjcyA9IG9zX25zZWNzKCk7CisKKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYyh0cywgbnNlY3MgLyBOU0VDX1BFUl9TRUMsCisJCQkJbnNlY3MgJSBOU0VDX1BFUl9TRUMpOworfQorCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQlsb25nIGxvbmcgbnNlY3M7Ci0KIAl0aW1lcl9pbml0KCk7Ci0KLQluc2VjcyA9IG9zX25zZWNzKCk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCAtbnNlY3MgLyBOU0VDX1BFUl9TRUMsCi0JCQkJLW5zZWNzICUgTlNFQ19QRVJfU0VDKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIG5zZWNzIC8gTlNFQ19QRVJfU0VDLAotCQkJCW5zZWNzICUgTlNFQ19QRVJfU0VDKTsKIAlsYXRlX3RpbWVfaW5pdCA9IHNldHVwX2l0aW1lcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvZmlsZS5jIGIvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKaW5kZXggYjVhZmNmZC4uMTQwZTU4NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9maWxlLmMKQEAgLTU2MSwzICs1NjEsMTggQEAKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KKwordW5zaWduZWQgb3NfbWFqb3IodW5zaWduZWQgbG9uZyBsb25nIGRldikKK3sKKwlyZXR1cm4gbWFqb3IoZGV2KTsKK30KKwordW5zaWduZWQgb3NfbWlub3IodW5zaWduZWQgbG9uZyBsb25nIGRldikKK3sKKwlyZXR1cm4gbWlub3IoZGV2KTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIG9zX21ha2VkZXYodW5zaWduZWQgbWFqb3IsIHVuc2lnbmVkIG1pbm9yKQoreworCXJldHVybiBtYWtlZGV2KG1ham9yLCBtaW5vcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jIGIvYXJjaC91bS9vcy1MaW51eC91c2VyX3N5bXMuYwppbmRleCA4OWI0OGExLi4wNWY1ZWE4IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L3VzZXJfc3ltcy5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXNlcl9zeW1zLmMKQEAgLTEwMyw2ICsxMDMsMTAgQEAKIEVYUE9SVF9TWU1CT0xfUFJPVE8oZnN5bmMpOwogRVhQT1JUX1NZTUJPTF9QUk9UTyhmZGF0YXN5bmMpOwogCitFWFBPUlRfU1lNQk9MX1BST1RPKGxzdGF0NjQpOworRVhQT1JUX1NZTUJPTF9QUk9UTyhmc3RhdDY0KTsKK0VYUE9SVF9TWU1CT0xfUFJPVE8obWtub2QpOworCiAvKiBFeHBvcnQgc3ltYm9scyB1c2VkIGJ5IEdDQyBmb3IgdGhlIHN0YWNrIHByb3RlY3Rvci4gKi8KIGV4dGVybiB2b2lkIF9fc3RhY2tfc21hc2hfaGFuZGxlcih2b2lkICopIF9fYXR0cmlidXRlX18oKHdlYWspKTsKIEVYUE9SVF9TWU1CT0woX19zdGFja19zbWFzaF9oYW5kbGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGRjYjA1OTMuLmE4NGZjMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNTUsNiArNTUsNyBAQAogCXNlbGVjdCBIQVZFX0hXX0JSRUFLUE9JTlQKIAlzZWxlY3QgSEFWRV9NSVhFRF9CUkVBS1BPSU5UU19SRUdTCiAJc2VsZWN0IFBFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFNfTk1JCiAJc2VsZWN0IEFOT05fSU5PREVTCiAJc2VsZWN0IEhBVkVfQVJDSF9LTUVNQ0hFQ0sKIAlzZWxlY3QgSEFWRV9VU0VSX1JFVFVSTl9OT1RJRklFUgpAQCAtNzIsOSArNzMsNiBAQAogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWciIGlmIFg4Nl8zMgogCWRlZmF1bHQgImFyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIgaWYgWDg2XzY0CiAKLWNvbmZpZyBHRU5FUklDX1RJTUUKLQlkZWZfYm9vbCB5Ci0KIGNvbmZpZyBHRU5FUklDX0NNT1NfVVBEQVRFCiAJZGVmX2Jvb2wgeQogCkBAIC0yMDQ2LDcgKzIwNDQsNyBAQAogCiBjb25maWcgU0N4MjAwSFJfVElNRVIKIAl0cmlzdGF0ZSAiTmF0U2VtaSBTQ3gyMDAgMjdNSHogSGlnaC1SZXNvbHV0aW9uIFRpbWVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTQ3gyMDAgJiYgR0VORVJJQ19USU1FCisJZGVwZW5kcyBvbiBTQ3gyMDAKIAlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2Nrc291cmNlIGJ1aWx0IHVwb24gdGhlIG9uLWNoaXAKQEAgLTIwNjIsNiArMjA2MCwxNSBAQAogCSAgQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyB0aGUgdW5pcXVlIGZlYXR1cmVzIG9mIHRoZSBPTFBDCiAJICBYTyBoYXJkd2FyZS4KIAorY29uZmlnIE9MUENfT1BFTkZJUk1XQVJFCisJYm9vbCAiU3VwcG9ydCBmb3IgT0xQQydzIE9wZW4gRmlybXdhcmUiCisJZGVwZW5kcyBvbiAhWDg2XzY0ICYmICFYODZfUEFFCisJZGVmYXVsdCB5IGlmIE9MUEMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBPcGVuIEZpcm13YXJlCisJICB0aGF0IGlzIHVzZWQgb24gdGhlIE9MUEMgWE8tMSBDaGlsZHJlbidzIE1hY2hpbmUuCisJICBJZiB1bnN1cmUsIHNheSBOIGhlcmUuCisKIGVuZGlmICMgWDg2XzMyCiAKIGNvbmZpZyBLOF9OQgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKaW5kZXggZWM3NDljMi4uZjdjYjA4NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCkBAIC0yNiwxMCArMjYsMTAgQEAKIHRhcmdldHMJCSs9IGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGltYWdlLmlzbyBtdG9vbHMuY29uZgogc3ViZGlyLQkJOj0gY29tcHJlc3NlZAogCi1zZXR1cC15CQkrPSBhMjAubyBiaW9zY2FsbC5vIGNtZGxpbmUubyBjb3B5Lm8gY3B1Lm8gY3B1Y2hlY2subyBlZGQubwotc2V0dXAteQkJKz0gaGVhZGVyLm8gbWFpbi5vIG1jYS5vIG1lbW9yeS5vIHBtLm8gcG1qdW1wLm8KLXNldHVwLXkJCSs9IHByaW50Zi5vIHJlZ3MubyBzdHJpbmcubyB0dHkubyB2aWRlby5vIHZpZGVvLW1vZGUubwotc2V0dXAteQkJKz0gdmVyc2lvbi5vCitzZXR1cC15CQkrPSBhMjAubyBiaW9zY2FsbC5vIGNtZGxpbmUubyBjb3B5Lm8gY3B1Lm8gY3B1Y2hlY2subworc2V0dXAteQkJKz0gZWFybHlfc2VyaWFsX2NvbnNvbGUubyBlZGQubyBoZWFkZXIubyBtYWluLm8gbWNhLm8gbWVtb3J5Lm8KK3NldHVwLXkJCSs9IHBtLm8gcG1qdW1wLm8gcHJpbnRmLm8gcmVncy5vIHN0cmluZy5vIHR0eS5vIHZpZGVvLm8KK3NldHVwLXkJCSs9IHZpZGVvLW1vZGUubyB2ZXJzaW9uLm8KIHNldHVwLSQoQ09ORklHX1g4Nl9BUE1fQk9PVCkgKz0gYXBtLm8KIAogIyBUaGUgbGluayBvcmRlciBvZiB0aGUgdmlkZW8tKi5vIG1vZHVsZXMgY2FuIG1hdHRlci4gIEluIHBhcnRpY3VsYXIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2Jvb3QuaCBiL2FyY2gveDg2L2Jvb3QvYm9vdC5oCmluZGV4IDk4MjM5ZDIuLmM3MDkzYmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvYm9vdC5oCisrKyBiL2FyY2gveDg2L2Jvb3QvYm9vdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiYml0b3BzLmgiCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSAiY3R5cGUuaCIKIAogLyogVXNlZnVsIG1hY3JvcyAqLwogI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQpAQCAtMzcsNiArMzgsOCBAQAogZXh0ZXJuIHN0cnVjdCBzZXR1cF9oZWFkZXIgaGRyOwogZXh0ZXJuIHN0cnVjdCBib290X3BhcmFtcyBib290X3BhcmFtczsKIAorI2RlZmluZSBjcHVfcmVsYXgoKQlhc20gdm9sYXRpbGUoInJlcDsgbm9wIikKKwogLyogQmFzaWMgcG9ydCBJL08gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXRiKHU4IHYsIHUxNiBwb3J0KQogewpAQCAtMTk4LDExICsyMDEsNiBAQAogCXJldHVybiBkaWZmOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc2RpZ2l0KGludCBjaCkKLXsKLQlyZXR1cm4gKGNoID49ICcwJykgJiYgKGNoIDw9ICc5Jyk7Ci19Ci0KIC8qIEhlYXAgLS0gYXZhaWxhYmxlIGZvciBkeW5hbWljIGxpc3RzLiAqLwogZXh0ZXJuIGNoYXIgX2VuZFtdOwogZXh0ZXJuIGNoYXIgKkhFQVA7CkBAIC0yODcsOCArMjg1LDE4IEBACiB2b2lkIGludGNhbGwodTggaW50X25vLCBjb25zdCBzdHJ1Y3QgYmlvc3JlZ3MgKmlyZWcsIHN0cnVjdCBiaW9zcmVncyAqb3JlZyk7CiAKIC8qIGNtZGxpbmUuYyAqLwotaW50IGNtZGxpbmVfZmluZF9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKTsKLWludCBjbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2woY29uc3QgY2hhciAqb3B0aW9uKTsKK2ludCBfX2NtZGxpbmVfZmluZF9vcHRpb24odTMyIGNtZGxpbmVfcHRyLCBjb25zdCBjaGFyICpvcHRpb24sIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUpOworaW50IF9fY21kbGluZV9maW5kX29wdGlvbl9ib29sKHUzMiBjbWRsaW5lX3B0ciwgY29uc3QgY2hhciAqb3B0aW9uKTsKK3N0YXRpYyBpbmxpbmUgaW50IGNtZGxpbmVfZmluZF9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKQoreworCXJldHVybiBfX2NtZGxpbmVfZmluZF9vcHRpb24oYm9vdF9wYXJhbXMuaGRyLmNtZF9saW5lX3B0ciwgb3B0aW9uLCBidWZmZXIsIGJ1ZnNpemUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2woY29uc3QgY2hhciAqb3B0aW9uKQoreworCXJldHVybiBfX2NtZGxpbmVfZmluZF9vcHRpb25fYm9vbChib290X3BhcmFtcy5oZHIuY21kX2xpbmVfcHRyLCBvcHRpb24pOworfQorCiAKIC8qIGNwdS5jLCBjcHVjaGVjay5jICovCiBzdHJ1Y3QgY3B1X2ZlYXR1cmVzIHsKQEAgLTMwMCw2ICszMDgsMTAgQEAKIGludCBjaGVja19jcHUoaW50ICpjcHVfbGV2ZWxfcHRyLCBpbnQgKnJlcV9sZXZlbF9wdHIsIHUzMiAqKmVycl9mbGFnc19wdHIpOwogaW50IHZhbGlkYXRlX2NwdSh2b2lkKTsKIAorLyogZWFybHlfc2VyaWFsX2NvbnNvbGUuYyAqLworZXh0ZXJuIGludCBlYXJseV9zZXJpYWxfYmFzZTsKK3ZvaWQgY29uc29sZV9pbml0KHZvaWQpOworCiAvKiBlZGQuYyAqLwogdm9pZCBxdWVyeV9lZGQodm9pZCk7CiAKQEAgLTMyOSw4ICszNDEsMTAgQEAKIAogLyogc3RyaW5nLmMgKi8KIGludCBzdHJjbXAoY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMik7CitpbnQgc3RybmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBjb3VudCk7CiBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgbWF4bGVuKTsKIHVuc2lnbmVkIGludCBhdG91KGNvbnN0IGNoYXIgKnMpOwordW5zaWduZWQgbG9uZyBsb25nIHNpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCwgY2hhciAqKmVuZHAsIHVuc2lnbmVkIGludCBiYXNlKTsKIAogLyogdHR5LmMgKi8KIHZvaWQgcHV0cyhjb25zdCBjaGFyICopOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jbWRsaW5lLmMgYi9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYwppbmRleCBhMWQzNTYzLi42YjNiNmY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYworKysgYi9hcmNoL3g4Ni9ib290L2NtZGxpbmUuYwpAQCAtMjcsOSArMjcsOCBAQAogICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudCAocmVnYXJkbGVzcyBvZiBpZiBpdCB3YXMKICAqIHRydW5jYXRlZCB0byBmaXQgaW4gdGhlIGJ1ZmZlciksIG9yIC0xIG9uIG5vdCBmb3VuZC4KICAqLwotaW50IGNtZGxpbmVfZmluZF9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKQoraW50IF9fY21kbGluZV9maW5kX29wdGlvbih1MzIgY21kbGluZV9wdHIsIGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSkKIHsKLQl1MzIgY21kbGluZV9wdHIgPSBib290X3BhcmFtcy5oZHIuY21kX2xpbmVfcHRyOwogCWFkZHJfdCBjcHRyOwogCWNoYXIgYzsKIAlpbnQgbGVuID0gLTE7CkBAIC0xMDAsOSArOTksOCBAQAogICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhhdCBvcHRpb24gKHN0YXJ0cyBjb3VudGluZyB3aXRoIDEpCiAgKiBvciAwIG9uIG5vdCBmb3VuZAogICovCi1pbnQgY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNvbnN0IGNoYXIgKm9wdGlvbikKK2ludCBfX2NtZGxpbmVfZmluZF9vcHRpb25fYm9vbCh1MzIgY21kbGluZV9wdHIsIGNvbnN0IGNoYXIgKm9wdGlvbikKIHsKLQl1MzIgY21kbGluZV9wdHIgPSBib290X3BhcmFtcy5oZHIuY21kX2xpbmVfcHRyOwogCWFkZHJfdCBjcHRyOwogCWNoYXIgYzsKIAlpbnQgcG9zID0gMCwgd3N0YXJ0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBmYmI0N2RhLi4wYzIyOTU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXggaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIwogCi10YXJnZXRzIDo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgdm1saW51eC5iaW4ubHpvIGhlYWRfJChCSVRTKS5vIG1pc2MubyBwaWdneS5vCit0YXJnZXRzIDo9IHZtbGludXgubGRzIHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIHZtbGludXguYmluLmx6bWEgdm1saW51eC5iaW4ubHpvIGhlYWRfJChCSVRTKS5vIG1pc2MubyBzdHJpbmcubyBjbWRsaW5lLm8gZWFybHlfc2VyaWFsX2NvbnNvbGUubyBwaWdneS5vCiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZlBJQwpAQCAtMjMsNyArMjMsNyBAQAogCiBob3N0cHJvZ3MteQk6PSBta3BpZ2d5CiAKLSQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChvYmopL2hlYWRfJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL3BpZ2d5Lm8gRk9SQ0UKKyQob2JqKS92bWxpbnV4OiAkKG9iaikvdm1saW51eC5sZHMgJChvYmopL2hlYWRfJChCSVRTKS5vICQob2JqKS9taXNjLm8gJChvYmopL3N0cmluZy5vICQob2JqKS9jbWRsaW5lLm8gJChvYmopL2Vhcmx5X3NlcmlhbF9jb25zb2xlLm8gJChvYmopL3BpZ2d5Lm8gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKIAlAOgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvY21kbGluZS5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2NtZGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjYyZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2NtZGxpbmUuYwpAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSAibWlzYy5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmczsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnModW5zaWduZWQgbG9uZyBzZWcpCit7CisJZnMgPSBzZWcgPDwgNDsgIC8qIHNoaWZ0IGl0IGJhY2sgKi8KK30KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBhZGRyX3Q7CitzdGF0aWMgaW5saW5lIGNoYXIgcmRmczgoYWRkcl90IGFkZHIpCit7CisJcmV0dXJuICooKGNoYXIgKikoZnMgKyBhZGRyKSk7Cit9CisjaW5jbHVkZSAiLi4vY21kbGluZS5jIgoraW50IGNtZGxpbmVfZmluZF9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICpidWZmZXIsIGludCBidWZzaXplKQoreworCXJldHVybiBfX2NtZGxpbmVfZmluZF9vcHRpb24ocmVhbF9tb2RlLT5oZHIuY21kX2xpbmVfcHRyLCBvcHRpb24sIGJ1ZmZlciwgYnVmc2l6ZSk7Cit9CitpbnQgY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwlyZXR1cm4gX19jbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2wocmVhbF9tb2RlLT5oZHIuY21kX2xpbmVfcHRyLCBvcHRpb24pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvZWFybHlfc2VyaWFsX2NvbnNvbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjFlODFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMKQEAgLTAsMCArMSw1IEBACisjaW5jbHVkZSAibWlzYy5oIgorCitpbnQgZWFybHlfc2VyaWFsX2Jhc2U7CisKKyNpbmNsdWRlICIuLi9lYXJseV9zZXJpYWxfY29uc29sZS5jIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKaW5kZXggZjU0M2I3MC4uNjdhNjU1YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCkBAIC0xMjQsNiArMTI0LDE5IEBACiAJcmVwCXN0b3NsCiAKIC8qCisgKiBBZGp1c3Qgb3VyIG93biBHT1QKKyAqLworCWxlYWwJX2dvdCglZWJ4KSwgJWVkeAorCWxlYWwJX2Vnb3QoJWVieCksICVlY3gKKzE6CisJY21wbAklZWN4LCAlZWR4CisJamFlCTJmCisJYWRkbAklZWJ4LCAoJWVkeCkKKwlhZGRsCSQ0LCAlZWR4CisJam1wCTFiCisyOgorCisvKgogICogRG8gdGhlIGRlY29tcHJlc3Npb24sIGFuZCBqdW1wIHRvIHRoZSBuZXcga2VybmVsLi4KICAqLwogCWxlYWwJel9leHRyYWN0X29mZnNldF9uZWdhdGl2ZSglZWJ4KSwgJWVicApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKaW5kZXggZmFmZjBkYy4uNTJmODVhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCkBAIC0yODAsNiArMjgwLDE5IEBACiAJcmVwCXN0b3NxCiAKIC8qCisgKiBBZGp1c3Qgb3VyIG93biBHT1QKKyAqLworCWxlYXEJX2dvdCglcmlwKSwgJXJkeAorCWxlYXEJX2Vnb3QoJXJpcCksICVyY3gKKzE6CisJY21wcQklcmN4LCAlcmR4CisJamFlCTJmCisJYWRkcQklcmJ4LCAoJXJkeCkKKwlhZGRxCSQ4LCAlcmR4CisJam1wCTFiCisyOgorCQorLyoKICAqIERvIHRoZSBkZWNvbXByZXNzaW9uLCBhbmQganVtcCB0byB0aGUgbmV3IGtlcm5lbC4uCiAgKi8KIAlwdXNocQklcnNpCQkJLyogU2F2ZSB0aGUgcmVhbCBtb2RlIGFyZ3VtZW50ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCA1MWUyNDA3Li44ZjdiZWY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTksMjMgKzksNyBAQAogICogSGlnaCBsb2FkZWQgc3R1ZmYgYnkgSGFucyBMZXJtZW4gJiBXZXJuZXIgQWxtZXNiZXJnZXIsIEZlYi4gMTk5NgogICovCiAKLS8qCi0gKiB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwsIGJlY2F1c2Ugbm8gaW5kaXJlY3Rpb25zIGFyZSBhbGxvd2VkIGhlcmUsIGFuZAotICogcGFyYXZpcnRfb3BzIGlzIGEga2luZCBvZiBvbmUuIEFzIGl0IHdpbGwgb25seSBydW4gaW4gYmFyZW1ldGFsIGFueXdheSwKLSAqIHdlIGp1c3Qga2VlcCBpdCBmcm9tIGhhcHBlbmluZwotICovCi0jdW5kZWYgQ09ORklHX1BBUkFWSVJUCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBfQVNNX1g4Nl9ERVNDX0ggMQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lbGYuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3QuaD4KLSNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CisjaW5jbHVkZSAibWlzYy5oIgogCiAvKiBXQVJOSU5HISEKICAqIFRoaXMgY29kZSBpcyBjb21waWxlZCB3aXRoIC1mUElDIGFuZCBpdCBpcyByZWxvY2F0ZWQgZHluYW1pY2FsbHkKQEAgLTEyMywxNSArMTA3LDEzIEBACiAvKgogICogVGhpcyBpcyBzZXQgdXAgYnkgdGhlIHNldHVwLXJvdXRpbmUgYXQgYm9vdC10aW1lCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYm9vdF9wYXJhbXMgKnJlYWxfbW9kZTsJCS8qIFBvaW50ZXIgdG8gcmVhbC1tb2RlIGRhdGEgKi8KK3N0cnVjdCBib290X3BhcmFtcyAqcmVhbF9tb2RlOwkJLyogUG9pbnRlciB0byByZWFsLW1vZGUgZGF0YSAqLwogc3RhdGljIGludCBxdWlldDsKK3N0YXRpYyBpbnQgZGVidWc7CiAKIHZvaWQgKm1lbXNldCh2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pOwogdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pOwogCi1zdGF0aWMgdm9pZCBfX3B1dHN0cihpbnQsIGNvbnN0IGNoYXIgKik7Ci0jZGVmaW5lIHB1dHN0cihfX3gpICBfX3B1dHN0cigwLCBfX3gpCi0KICNpZmRlZiBDT05GSUdfWDg2XzY0CiAjZGVmaW5lIG1lbXB0ciBsb25nCiAjZWxzZQpAQCAtMTcwLDcgKzE1MiwyMSBAQAogCQl2aWRtZW1baV0gPSAnICc7CiB9CiAKLXN0YXRpYyB2b2lkIF9fcHV0c3RyKGludCBlcnJvciwgY29uc3QgY2hhciAqcykKKyNkZWZpbmUgWE1UUkRZICAgICAgICAgIDB4MjAKKworI2RlZmluZSBUWFIgICAgICAgICAgICAgMCAgICAgICAvKiAgVHJhbnNtaXQgcmVnaXN0ZXIgKFdSSVRFKSAqLworI2RlZmluZSBMU1IgICAgICAgICAgICAgNSAgICAgICAvKiAgTGluZSBTdGF0dXMgICAgICAgICAgICAgICAqLworc3RhdGljIHZvaWQgc2VyaWFsX3B1dGNoYXIoaW50IGNoKQoreworCXVuc2lnbmVkIHRpbWVvdXQgPSAweGZmZmY7CisKKwl3aGlsZSAoKGluYihlYXJseV9zZXJpYWxfYmFzZSArIExTUikgJiBYTVRSRFkpID09IDAgJiYgLS10aW1lb3V0KQorCQljcHVfcmVsYXgoKTsKKworCW91dGIoY2gsIGVhcmx5X3NlcmlhbF9iYXNlICsgVFhSKTsKK30KKwordm9pZCBfX3B1dHN0cihpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKnMpCiB7CiAJaW50IHgsIHksIHBvczsKIAljaGFyIGM7CkBAIC0xNzksNiArMTc1LDE0IEBACiAJaWYgKCFlcnJvcikKIAkJcmV0dXJuOwogI2VuZGlmCisJaWYgKGVhcmx5X3NlcmlhbF9iYXNlKSB7CisJCWNvbnN0IGNoYXIgKnN0ciA9IHM7CisJCXdoaWxlICgqc3RyKSB7CisJCQlpZiAoKnN0ciA9PSAnXG4nKQorCQkJCXNlcmlhbF9wdXRjaGFyKCdccicpOworCQkJc2VyaWFsX3B1dGNoYXIoKnN0cisrKTsKKwkJfQorCX0KIAogCWlmIChyZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbW9kZSA9PSAwICYmCiAJICAgIGxpbmVzID09IDAgJiYgY29scyA9PSAwKQpAQCAtMzA1LDggKzMwOSwxMCBAQAogewogCXJlYWxfbW9kZSA9IHJtb2RlOwogCi0JaWYgKHJlYWxfbW9kZS0+aGRyLmxvYWRmbGFncyAmIFFVSUVUX0ZMQUcpCisJaWYgKGNtZGxpbmVfZmluZF9vcHRpb25fYm9vbCgicXVpZXQiKSkKIAkJcXVpZXQgPSAxOworCWlmIChjbWRsaW5lX2ZpbmRfb3B0aW9uX2Jvb2woImRlYnVnIikpCisJCWRlYnVnID0gMTsKIAogCWlmIChyZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbW9kZSA9PSA3KSB7CiAJCXZpZG1lbSA9IChjaGFyICopIDB4YjAwMDA7CkBAIC0zMTksNiArMzI1LDEwIEBACiAJbGluZXMgPSByZWFsX21vZGUtPnNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXM7CiAJY29scyA9IHJlYWxfbW9kZS0+c2NyZWVuX2luZm8ub3JpZ192aWRlb19jb2xzOwogCisJY29uc29sZV9pbml0KCk7CisJaWYgKGRlYnVnKQorCQlwdXRzdHIoImVhcmx5IGNvbnNvbGUgaW4gZGVjb21wcmVzc19rZXJuZWxcbiIpOworCiAJZnJlZV9tZW1fcHRyICAgICA9IGhlYXA7CS8qIEhlYXAgKi8KIAlmcmVlX21lbV9lbmRfcHRyID0gaGVhcCArIEJPT1RfSEVBUF9TSVpFOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzYy5oIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjE5YzgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2MuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIEJPT1RfQ09NUFJFU1NFRF9NSVNDX0gKKyNkZWZpbmUgQk9PVF9DT01QUkVTU0VEX01JU0NfSAorCisvKgorICogd2UgaGF2ZSB0byBiZSBjYXJlZnVsLCBiZWNhdXNlIG5vIGluZGlyZWN0aW9ucyBhcmUgYWxsb3dlZCBoZXJlLCBhbmQKKyAqIHBhcmF2aXJ0X29wcyBpcyBhIGtpbmQgb2Ygb25lLiBBcyBpdCB3aWxsIG9ubHkgcnVuIGluIGJhcmVtZXRhbCBhbnl3YXksCisgKiB3ZSBqdXN0IGtlZXAgaXQgZnJvbSBoYXBwZW5pbmcKKyAqLworI3VuZGVmIENPTkZJR19QQVJBVklSVAorI2lmZGVmIENPTkZJR19YODZfMzIKKyNkZWZpbmUgX0FTTV9YODZfREVTQ19IIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9ib290Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RwYXJhbS5oPgorCisjZGVmaW5lIEJPT1RfQk9PVF9ICisjaW5jbHVkZSAiLi4vY3R5cGUuaCIKKworLyogbWlzYy5jICovCitleHRlcm4gc3RydWN0IGJvb3RfcGFyYW1zICpyZWFsX21vZGU7CQkvKiBQb2ludGVyIHRvIHJlYWwtbW9kZSBkYXRhICovCit2b2lkIF9fcHV0c3RyKGludCBlcnJvciwgY29uc3QgY2hhciAqcyk7CisjZGVmaW5lIHB1dHN0cihfX3gpICBfX3B1dHN0cigwLCBfX3gpCisjZGVmaW5lIHB1dHMoX194KSAgX19wdXRzdHIoMCwgX194KQorCisvKiBjbWRsaW5lLmMgKi8KK2ludCBjbWRsaW5lX2ZpbmRfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbiwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSk7CitpbnQgY21kbGluZV9maW5kX29wdGlvbl9ib29sKGNvbnN0IGNoYXIgKm9wdGlvbik7CisKKy8qIGVhcmx5X3NlcmlhbF9jb25zb2xlLmMgKi8KK2V4dGVybiBpbnQgZWFybHlfc2VyaWFsX2Jhc2U7Cit2b2lkIGNvbnNvbGVfaW5pdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvc3RyaW5nLmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliM2U2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9zdHJpbmcuYwpAQCAtMCwwICsxLDIgQEAKKyNpbmNsdWRlICJtaXNjLmgiCisjaW5jbHVkZSAiLi4vc3RyaW5nLmMiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCmluZGV4IDVkZGFiY2UuLjM0ZDA0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TCkBAIC00MSw2ICs0MSwxMiBAQAogCQkqKC5yb2RhdGEuKikKIAkJX2Vyb2RhdGEgPSAuIDsKIAl9CisJLmdvdCA6IHsKKwkJX2dvdCA9IC47CisJCUtFRVAoKiguZ290LnBsdCkpCisJCUtFRVAoKiguZ290KSkKKwkJX2Vnb3QgPSAuOworCX0KIAkuZGF0YSA6CXsKIAkJX2RhdGEgPSAuIDsKIAkJKiguZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY3R5cGUuaCBiL2FyY2gveDg2L2Jvb3QvY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWUxMzQwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvYm9vdC9jdHlwZS5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpZm5kZWYgQk9PVF9JU0RJR0lUX0gKKworI2RlZmluZSBCT09UX0lTRElHSVRfSAorCitzdGF0aWMgaW5saW5lIGludCBpc2RpZ2l0KGludCBjaCkKK3sKKwlyZXR1cm4gKGNoID49ICcwJykgJiYgKGNoIDw9ICc5Jyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzeGRpZ2l0KGludCBjaCkKK3sKKwlpZiAoaXNkaWdpdChjaCkpCisJCXJldHVybiB0cnVlOworCisJaWYgKChjaCA+PSAnYScpICYmIChjaCA8PSAnZicpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiAoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMgYi9hcmNoL3g4Ni9ib290L2Vhcmx5X3NlcmlhbF9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwZjRiOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2Jvb3QvZWFybHlfc2VyaWFsX2NvbnNvbGUuYwpAQCAtMCwwICsxLDEzOSBAQAorI2luY2x1ZGUgImJvb3QuaCIKKworI2RlZmluZSBERUZBVUxUX1NFUklBTF9QT1JUIDB4M2Y4IC8qIHR0eVMwICovCisKKyNkZWZpbmUgWE1UUkRZICAgICAgICAgIDB4MjAKKworI2RlZmluZSBETEFCCQkweDgwCisKKyNkZWZpbmUgVFhSICAgICAgICAgICAgIDAgICAgICAgLyogIFRyYW5zbWl0IHJlZ2lzdGVyIChXUklURSkgKi8KKyNkZWZpbmUgUlhSICAgICAgICAgICAgIDAgICAgICAgLyogIFJlY2VpdmUgcmVnaXN0ZXIgIChSRUFEKSAgKi8KKyNkZWZpbmUgSUVSICAgICAgICAgICAgIDEgICAgICAgLyogIEludGVycnVwdCBFbmFibGUgICAgICAgICAgKi8KKyNkZWZpbmUgSUlSICAgICAgICAgICAgIDIgICAgICAgLyogIEludGVycnVwdCBJRCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkNSICAgICAgICAgICAgIDIgICAgICAgLyogIEZJRk8gY29udHJvbCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTENSICAgICAgICAgICAgIDMgICAgICAgLyogIExpbmUgY29udHJvbCAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTUNSICAgICAgICAgICAgIDQgICAgICAgLyogIE1vZGVtIGNvbnRyb2wgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTFNSICAgICAgICAgICAgIDUgICAgICAgLyogIExpbmUgU3RhdHVzICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTVNSICAgICAgICAgICAgIDYgICAgICAgLyogIE1vZGVtIFN0YXR1cyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRExMICAgICAgICAgICAgIDAgICAgICAgLyogIERpdmlzb3IgTGF0Y2ggTG93ICAgICAgICAgKi8KKyNkZWZpbmUgRExIICAgICAgICAgICAgIDEgICAgICAgLyogIERpdmlzb3IgbGF0Y2ggSGlnaCAgICAgICAgKi8KKworI2RlZmluZSBERUZBVUxUX0JBVUQgOTYwMAorCitzdGF0aWMgdm9pZCBlYXJseV9zZXJpYWxfaW5pdChpbnQgcG9ydCwgaW50IGJhdWQpCit7CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGRpdmlzb3I7CisKKwlvdXRiKDB4MywgcG9ydCArIExDUik7CS8qIDhuMSAqLworCW91dGIoMCwgcG9ydCArIElFUik7CS8qIG5vIGludGVycnVwdCAqLworCW91dGIoMCwgcG9ydCArIEZDUik7CS8qIG5vIGZpZm8gKi8KKwlvdXRiKDB4MywgcG9ydCArIE1DUik7CS8qIERUUiArIFJUUyAqLworCisJZGl2aXNvcgk9IDExNTIwMCAvIGJhdWQ7CisJYyA9IGluYihwb3J0ICsgTENSKTsKKwlvdXRiKGMgfCBETEFCLCBwb3J0ICsgTENSKTsKKwlvdXRiKGRpdmlzb3IgJiAweGZmLCBwb3J0ICsgRExMKTsKKwlvdXRiKChkaXZpc29yID4+IDgpICYgMHhmZiwgcG9ydCArIERMSCk7CisJb3V0YihjICYgfkRMQUIsIHBvcnQgKyBMQ1IpOworCisJZWFybHlfc2VyaWFsX2Jhc2UgPSBwb3J0OworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9lYXJseXByaW50ayh2b2lkKQoreworCWludCBiYXVkID0gREVGQVVMVF9CQVVEOworCWNoYXIgYXJnWzMyXTsKKwlpbnQgcG9zID0gMDsKKwlpbnQgcG9ydCA9IDA7CisKKwlpZiAoY21kbGluZV9maW5kX29wdGlvbigiZWFybHlwcmludGsiLCBhcmcsIHNpemVvZiBhcmcpID4gMCkgeworCQljaGFyICplOworCisJCWlmICghc3RybmNtcChhcmcsICJzZXJpYWwiLCA2KSkgeworCQkJcG9ydCA9IERFRkFVTFRfU0VSSUFMX1BPUlQ7CisJCQlwb3MgKz0gNjsKKwkJfQorCisJCWlmIChhcmdbcG9zXSA9PSAnLCcpCisJCQlwb3MrKzsKKworCQlpZiAoIXN0cm5jbXAoYXJnLCAidHR5UyIsIDQpKSB7CisJCQlzdGF0aWMgY29uc3QgaW50IGJhc2VzW10gPSB7IDB4M2Y4LCAweDJmOCB9OworCQkJaW50IGlkeCA9IDA7CisKKwkJCWlmICghc3RybmNtcChhcmcgKyBwb3MsICJ0dHlTIiwgNCkpCisJCQkJcG9zICs9IDQ7CisKKwkJCWlmIChhcmdbcG9zKytdID09ICcxJykKKwkJCQlpZHggPSAxOworCisJCQlwb3J0ID0gYmFzZXNbaWR4XTsKKwkJfQorCisJCWlmIChhcmdbcG9zXSA9PSAnLCcpCisJCQlwb3MrKzsKKworCQliYXVkID0gc2ltcGxlX3N0cnRvdWxsKGFyZyArIHBvcywgJmUsIDApOworCQlpZiAoYmF1ZCA9PSAwIHx8IGFyZyArIHBvcyA9PSBlKQorCQkJYmF1ZCA9IERFRkFVTFRfQkFVRDsKKwl9CisKKwlpZiAocG9ydCkKKwkJZWFybHlfc2VyaWFsX2luaXQocG9ydCwgYmF1ZCk7Cit9CisKKyNkZWZpbmUgQkFTRV9CQVVEICgxODQzMjAwLzE2KQorc3RhdGljIHVuc2lnbmVkIGludCBwcm9iZV9iYXVkKGludCBwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgbGNyLCBkbGwsIGRsaDsKKwl1bnNpZ25lZCBpbnQgcXVvdDsKKworCWxjciA9IGluYihwb3J0ICsgTENSKTsKKwlvdXRiKGxjciB8IERMQUIsIHBvcnQgKyBMQ1IpOworCWRsbCA9IGluYihwb3J0ICsgRExMKTsKKwlkbGggPSBpbmIocG9ydCArIERMSCk7CisJb3V0YihsY3IsIHBvcnQgKyBMQ1IpOworCXF1b3QgPSAoZGxoIDw8IDgpIHwgZGxsOworCisJcmV0dXJuIEJBU0VfQkFVRCAvIHF1b3Q7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbnNvbGVfdWFydDgyNTAodm9pZCkKK3sKKwljaGFyIG9wdHN0cls2NF0sICpvcHRpb25zOworCWludCBiYXVkID0gREVGQVVMVF9CQVVEOworCWludCBwb3J0ID0gMDsKKworCS8qCisJICogY29uc29sZT11YXJ0ODI1MCxpbywweDNmOCwxMTUyMDBuOAorCSAqIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGxhc3Qgb25lIGNvbnNvbGUgIQorCSAqLworCWlmIChjbWRsaW5lX2ZpbmRfb3B0aW9uKCJjb25zb2xlIiwgb3B0c3RyLCBzaXplb2Ygb3B0c3RyKSA8PSAwKQorCQlyZXR1cm47CisKKwlvcHRpb25zID0gb3B0c3RyOworCisJaWYgKCFzdHJuY21wKG9wdGlvbnMsICJ1YXJ0ODI1MCxpbywiLCAxMikpCisJCXBvcnQgPSBzaW1wbGVfc3RydG91bGwob3B0aW9ucyArIDEyLCAmb3B0aW9ucywgMCk7CisJZWxzZSBpZiAoIXN0cm5jbXAob3B0aW9ucywgInVhcnQsaW8sIiwgOCkpCisJCXBvcnQgPSBzaW1wbGVfc3RydG91bGwob3B0aW9ucyArIDgsICZvcHRpb25zLCAwKTsKKwllbHNlCisJCXJldHVybjsKKworCWlmIChvcHRpb25zICYmIChvcHRpb25zWzBdID09ICcsJykpCisJCWJhdWQgPSBzaW1wbGVfc3RydG91bGwob3B0aW9ucyArIDEsICZvcHRpb25zLCAwKTsKKwllbHNlCisJCWJhdWQgPSBwcm9iZV9iYXVkKHBvcnQpOworCisJaWYgKHBvcnQpCisJCWVhcmx5X3NlcmlhbF9pbml0KHBvcnQsIGJhdWQpOworfQorCit2b2lkIGNvbnNvbGVfaW5pdCh2b2lkKQoreworCXBhcnNlX2Vhcmx5cHJpbnRrKCk7CisKKwlpZiAoIWVhcmx5X3NlcmlhbF9iYXNlKQorCQlwYXJzZV9jb25zb2xlX3VhcnQ4MjUwKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L21haW4uYyBiL2FyY2gveDg2L2Jvb3QvbWFpbi5jCmluZGV4IDE0MDE3MmIuLjQwMzU4YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWFpbi5jCisrKyBiL2FyY2gveDg2L2Jvb3QvbWFpbi5jCkBAIC0xMzAsNiArMTMwLDExIEBACiAJLyogRmlyc3QsIGNvcHkgdGhlIGJvb3QgaGVhZGVyIGludG8gdGhlICJ6ZXJvcGFnZSIgKi8KIAljb3B5X2Jvb3RfcGFyYW1zKCk7CiAKKwkvKiBJbml0aWFsaXplIHRoZSBlYXJseS1ib290IGNvbnNvbGUgKi8KKwljb25zb2xlX2luaXQoKTsKKwlpZiAoY21kbGluZV9maW5kX29wdGlvbl9ib29sKCJkZWJ1ZyIpKQorCQlwdXRzKCJlYXJseSBjb25zb2xlIGluIHNldHVwIGNvZGVcbiIpOworCiAJLyogRW5kIG9mIGhlYXAgY2hlY2sgKi8KIAlpbml0X2hlYXAoKTsKIApAQCAtMTY4LDEwICsxNzMsNiBAQAogCS8qIFNldCB0aGUgdmlkZW8gbW9kZSAqLwogCXNldF92aWRlbygpOwogCi0JLyogUGFyc2UgY29tbWFuZCBsaW5lIGZvciAncXVpZXQnIGFuZCBwYXNzIGl0IHRvIGRlY29tcHJlc3Nvci4gKi8KLQlpZiAoY21kbGluZV9maW5kX29wdGlvbl9ib29sKCJxdWlldCIpKQotCQlib290X3BhcmFtcy5oZHIubG9hZGZsYWdzIHw9IFFVSUVUX0ZMQUc7Ci0KIAkvKiBEbyB0aGUgbGFzdCB0aGluZ3MgYW5kIGludm9rZSBwcm90ZWN0ZWQgbW9kZSAqLwogCWdvX3RvX3Byb3RlY3RlZF9tb2RlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ByaW50Zi5jIGIvYXJjaC94ODYvYm9vdC9wcmludGYuYwppbmRleCA1MGU0N2NkLi5jZGFjOTFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ByaW50Zi5jCisrKyBiL2FyY2gveDg2L2Jvb3QvcHJpbnRmLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNkZWZpbmUgU01BTEwJMzIJCS8qIE11c3QgYmUgMzIgPT0gMHgyMCAqLwogI2RlZmluZSBTUEVDSUFMCTY0CQkvKiAweCAqLwogCi0jZGVmaW5lIGRvX2RpdihuLGJhc2UpICh7IFwKKyNkZWZpbmUgX19kb19kaXYobiwgYmFzZSkgKHsgXAogaW50IF9fcmVzOyBcCiBfX3JlcyA9ICgodW5zaWduZWQgbG9uZykgbikgJSAodW5zaWduZWQpIGJhc2U7IFwKIG4gPSAoKHVuc2lnbmVkIGxvbmcpIG4pIC8gKHVuc2lnbmVkKSBiYXNlOyBcCkBAIC04Myw3ICs4Myw3IEBACiAJCXRtcFtpKytdID0gJzAnOwogCWVsc2UKIAkJd2hpbGUgKG51bSAhPSAwKQotCQkJdG1wW2krK10gPSAoZGlnaXRzW2RvX2RpdihudW0sIGJhc2UpXSB8IGxvY2FzZSk7CisJCQl0bXBbaSsrXSA9IChkaWdpdHNbX19kb19kaXYobnVtLCBiYXNlKV0gfCBsb2Nhc2UpOwogCWlmIChpID4gcHJlY2lzaW9uKQogCQlwcmVjaXNpb24gPSBpOwogCXNpemUgLT0gcHJlY2lzaW9uOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9zdHJpbmcuYyBiL2FyY2gveDg2L2Jvb3Qvc3RyaW5nLmMKaW5kZXggZjk0YjdhMC4uM2NiYzQwNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9zdHJpbmcuYworKysgYi9hcmNoL3g4Ni9ib290L3N0cmluZy5jCkBAIC0zMCw2ICszMCwyMiBAQAogCXJldHVybiAwOwogfQogCitpbnQgc3RybmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKworCXdoaWxlIChjb3VudCkgeworCQljMSA9ICpjcysrOworCQljMiA9ICpjdCsrOworCQlpZiAoYzEgIT0gYzIpCisJCQlyZXR1cm4gYzEgPCBjMiA/IC0xIDogMTsKKwkJaWYgKCFjMSkKKwkJCWJyZWFrOworCQljb3VudC0tOworCX0KKwlyZXR1cm4gMDsKK30KKwogc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqcywgc2l6ZV90IG1heGxlbikKIHsKIAljb25zdCBjaGFyICplcyA9IHM7CkBAIC00OCwzICs2NCw1MCBAQAogCQlpID0gaSAqIDEwICsgKCpzKysgLSAnMCcpOwogCXJldHVybiBpOwogfQorCisvKiBXb3JrcyBvbmx5IGZvciBkaWdpdHMgYW5kIGxldHRlcnMsIGJ1dCBzbWFsbCBhbmQgZmFzdCAqLworI2RlZmluZSBUT0xPV0VSKHgpICgoeCkgfCAweDIwKQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNpbXBsZV9ndWVzc19iYXNlKGNvbnN0IGNoYXIgKmNwKQoreworCWlmIChjcFswXSA9PSAnMCcpIHsKKwkJaWYgKFRPTE9XRVIoY3BbMV0pID09ICd4JyAmJiBpc3hkaWdpdChjcFsyXSkpCisJCQlyZXR1cm4gMTY7CisJCWVsc2UKKwkJCXJldHVybiA4OworCX0gZWxzZSB7CisJCXJldHVybiAxMDsKKwl9Cit9CisKKy8qKgorICogc2ltcGxlX3N0cnRvdWxsIC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nIGxvbmcKKyAqIEBjcDogVGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcKKyAqIEBlbmRwOiBBIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgcGFyc2VkIHN0cmluZyB3aWxsIGJlIHBsYWNlZCBoZXJlCisgKiBAYmFzZTogVGhlIG51bWJlciBiYXNlIHRvIHVzZQorICovCisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwLCB1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gMDsKKworCWlmICghYmFzZSkKKwkJYmFzZSA9IHNpbXBsZV9ndWVzc19iYXNlKGNwKTsKKworCWlmIChiYXNlID09IDE2ICYmIGNwWzBdID09ICcwJyAmJiBUT0xPV0VSKGNwWzFdKSA9PSAneCcpCisJCWNwICs9IDI7CisKKwl3aGlsZSAoaXN4ZGlnaXQoKmNwKSkgeworCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AgLSAnMCcgOiBUT0xPV0VSKCpjcCkgLSAnYScgKyAxMDsKKwkJaWYgKHZhbHVlID49IGJhc2UpCisJCQlicmVhazsKKwkJcmVzdWx0ID0gcmVzdWx0ICogYmFzZSArIHZhbHVlOworCQljcCsrOworCX0KKwlpZiAoZW5kcCkKKwkJKmVuZHAgPSAoY2hhciAqKWNwOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdHR5LmMgYi9hcmNoL3g4Ni9ib290L3R0eS5jCmluZGV4IDAxZWM2OWMuLmRlZjI0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdHR5LmMKKysrIGIvYXJjaC94ODYvYm9vdC90dHkuYwpAQCAtMTAsMjQgKzEwLDM3IEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKgotICogVmVyeSBzaW1wbGUgc2NyZWVuIEkvTwotICogWFhYOiBQcm9iYWJseSBzaG91bGQgYWRkIHZlcnkgc2ltcGxlIHNlcmlhbCBJL08/CisgKiBWZXJ5IHNpbXBsZSBzY3JlZW4gYW5kIHNlcmlhbCBJL08KICAqLwogCiAjaW5jbHVkZSAiYm9vdC5oIgogCitpbnQgZWFybHlfc2VyaWFsX2Jhc2U7CisKKyNkZWZpbmUgWE1UUkRZICAgICAgICAgIDB4MjAKKworI2RlZmluZSBUWFIgICAgICAgICAgICAgMCAgICAgICAvKiAgVHJhbnNtaXQgcmVnaXN0ZXIgKFdSSVRFKSAqLworI2RlZmluZSBMU1IgICAgICAgICAgICAgNSAgICAgICAvKiAgTGluZSBTdGF0dXMgICAgICAgICAgICAgICAqLworCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBpbiAuaW5pdHRleHQgc28gdGhleSBjYW4gYmUgdXNlZCB0byBzaWduYWwKICAqIGVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbi4KICAqLwogCi12b2lkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5pbml0dGV4dCIpKSkgcHV0Y2hhcihpbnQgY2gpCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdHRleHQiKSkpIHNlcmlhbF9wdXRjaGFyKGludCBjaCkKK3sKKwl1bnNpZ25lZCB0aW1lb3V0ID0gMHhmZmZmOworCisJd2hpbGUgKChpbmIoZWFybHlfc2VyaWFsX2Jhc2UgKyBMU1IpICYgWE1UUkRZKSA9PSAwICYmIC0tdGltZW91dCkKKwkJY3B1X3JlbGF4KCk7CisKKwlvdXRiKGNoLCBlYXJseV9zZXJpYWxfYmFzZSArIFRYUik7Cit9CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5pbml0dGV4dCIpKSkgYmlvc19wdXRjaGFyKGludCBjaCkKIHsKIAlzdHJ1Y3QgYmlvc3JlZ3MgaXJlZzsKIAotCWlmIChjaCA9PSAnXG4nKQotCQlwdXRjaGFyKCdccicpOwkvKiBcbiAtPiBcclxuICovCi0KIAlpbml0cmVncygmaXJlZyk7CiAJaXJlZy5ieCA9IDB4MDAwNzsKIAlpcmVnLmN4ID0gMHgwMDAxOwpAQCAtMzYsNiArNDksMTcgQEAKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCBOVUxMKTsKIH0KIAordm9pZCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdHRleHQiKSkpIHB1dGNoYXIoaW50IGNoKQoreworCWlmIChjaCA9PSAnXG4nKQorCQlwdXRjaGFyKCdccicpOwkvKiBcbiAtPiBcclxuICovCisKKwliaW9zX3B1dGNoYXIoY2gpOworCisJaWYgKGVhcmx5X3NlcmlhbF9iYXNlICE9IDApCisJCXNlcmlhbF9wdXRjaGFyKGNoKTsKK30KKwogdm9pZCBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuaW5pdHRleHQiKSkpIHB1dHMoY29uc3QgY2hhciAqc3RyKQogewogCXdoaWxlICgqc3RyKQpAQCAtMTEyLDMgKzEzNiw0IEBACiAKIAlyZXR1cm4gMDsJCS8qIFRpbWVvdXQhICovCiB9CisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcgYi9hcmNoL3g4Ni9jb25maWdzL2kzODZfZGVmY29uZmlnCmluZGV4IGQyOGZhZDEuLmUzYTMyNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MvaTM4Nl9kZWZjb25maWcKKysrIGIvYXJjaC94ODYvY29uZmlncy9pMzg2X2RlZmNvbmZpZwpAQCAtMTQ3MSw2ICsxNDcxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19DT1JFVEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BLR1RFTVAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnIGIvYXJjaC94ODYvY29uZmlncy94ODZfNjRfZGVmY29uZmlnCmluZGV4IDZjODZhY2QuLjQyNTFmODMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZjb25maWcKQEAgLTE0NTYsNiArMTQ1Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQ09SRVRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QS0dURU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IGU3OTBiYzEuLmI4NmZlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtODQyLDQgKzg0Miw3IEBACiAJLnF1YWQgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbwkvKiAzMzUgKi8KIAkucXVhZCBzeXNfcGVyZl9ldmVudF9vcGVuCiAJLnF1YWQgY29tcGF0X3N5c19yZWN2bW1zZworCS5xdWFkIHN5c19mYW5vdGlmeV9pbml0CisJLnF1YWQgc3lzMzJfZmFub3RpZnlfbWFyaworCS5xdWFkIHN5c19wcmxpbWl0NjQJCS8qIDM0MCAqLwogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwppbmRleCA2MjZiZTE1Li4zZDA5MzMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCkBAIC01NDYsMyArNTQ2LDEyIEBACiAJcmV0dXJuIHN5c19mYWxsb2NhdGUoZmQsIG1vZGUsICgodTY0KW9mZnNldF9oaSA8PCAzMikgfCBvZmZzZXRfbG8sCiAJCQkgICAgICgodTY0KWxlbl9oaSA8PCAzMikgfCBsZW5fbG8pOwogfQorCithc21saW5rYWdlIGxvbmcgc3lzMzJfZmFub3RpZnlfbWFyayhpbnQgZmFub3RpZnlfZmQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgICAgdTMyIG1hc2tfbG8sIHUzMiBtYXNrX2hpLAorCQkJCSAgICBpbnQgZmQsIGNvbnN0IGNoYXIgIF9fdXNlciAqcGF0aG5hbWUpCit7CisJcmV0dXJuIHN5c19mYW5vdGlmeV9tYXJrKGZhbm90aWZ5X2ZkLCBmbGFncywKKwkJCQkgKCh1NjQpbWFza19oaSA8PCAzMikgfCBtYXNrX2xvLAorCQkJCSBmZCwgcGF0aG5hbWUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCmluZGV4IGFhMmMzOWQuLjkyMDkxZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTEzNCw3ICsxMzQsNyBAQAogCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA8PSAweDA1ICYmCiAJICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPCAweDBBKQogCQlyZXR1cm4gMTsKLQllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQU1EQzFFKSkKKwllbHNlIGlmIChjMWVfZGV0ZWN0ZWQpCiAJCXJldHVybiAxOwogCWVsc2UKIAkJcmV0dXJuIG1heF9jc3RhdGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAppbmRleCAwM2I2YmI1Li5iYzZhYmI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTQ1LDEwICs0NSw5IEBACiBzdHJ1Y3QgYWx0X2luc3RyIHsKIAl1OCAqaW5zdHI7CQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLwogCXU4ICpyZXBsYWNlbWVudDsKLQl1OCAgY3B1aWQ7CQkvKiBjcHVpZCBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLworCXUxNiBjcHVpZDsJCS8qIGNwdWlkIGJpdCBzZXQgZm9yIHJlcGxhY2VtZW50ICovCiAJdTggIGluc3RybGVuOwkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCiAJdTggIHJlcGxhY2VtZW50bGVuOwkvKiBsZW5ndGggb2YgbmV3IGluc3RydWN0aW9uLCA8PSBpbnN0cmxlbiAqLwotCXU4ICBwYWQxOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAl1MzIgcGFkMjsKICNlbmRpZgpAQCAtODYsOSArODUsMTEgQEAKICAgICAgIF9BU01fQUxJR04gIlxuIgkJCQkJCQlcCiAgICAgICBfQVNNX1BUUiAiNjYxYlxuIgkJCQkvKiBsYWJlbCAgICAgICAgICAgKi8JXAogICAgICAgX0FTTV9QVFIgIjY2M2ZcbiIJCQkJLyogbmV3IGluc3RydWN0aW9uICovCVwKLSAgICAgICIJIC5ieXRlICIgX19zdHJpbmdpZnkoZmVhdHVyZSkgIlxuIgkvKiBmZWF0dXJlIGJpdCAgICAgKi8JXAorICAgICAgIgkgLndvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAiXG4iCS8qIGZlYXR1cmUgYml0ICAgICAqLwlcCiAgICAgICAiCSAuYnl0ZSA2NjJiLTY2MWJcbiIJCQkvKiBzb3VyY2VsZW4gICAgICAgKi8JXAogICAgICAgIgkgLmJ5dGUgNjY0Zi02NjNmXG4iCQkJLyogcmVwbGFjZW1lbnRsZW4gICovCVwKKyAgICAgICIucHJldmlvdXNcbiIJCQkJCQkJXAorICAgICAgIi5zZWN0aW9uIC5kaXNjYXJkLFwiYXdcIixAcHJvZ2JpdHNcbiIJCQkJXAogICAgICAgIgkgLmJ5dGUgMHhmZiArICg2NjRmLTY2M2YpIC0gKDY2MmItNjYxYilcbiIgLyogcmxlbiA8PSBzbGVuICovCVwKICAgICAgICIucHJldmlvdXNcbiIJCQkJCQkJXAogICAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJheFwiXG4iCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBiX3RpbWVyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGJfdGltZXIuaAppbmRleCBjNzRhMmVlLi5hNjliMWFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGJfdGltZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGJfdGltZXIuaApAQCAtNTUsNyArNTUsNiBAQAogZXh0ZXJuIGludCBhcmNoX3NldHVwX2FwYnRfaXJxcyhpbnQgaXJxLCBpbnQgdHJpZ2dlciwgaW50IG1hc2ssIGludCBjcHUpOwogZXh0ZXJuIHZvaWQgYXBidF9zZXR1cF9zZWNvbmRhcnlfY2xvY2sodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkOwotZXh0ZXJuIGludCBkaXNhYmxlX2FwYnRfcGVyY3B1OwogCiBleHRlcm4gc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqc2ZpX2dldF9tdG1yKGludCBoaW50KTsKIGV4dGVybiB2b2lkIHNmaV9mcmVlX210bXIoc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqbXRtcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290cGFyYW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCmluZGV4IDZiZTMzZDguLjhlNjIxODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3RwYXJhbS5oCkBAIC03MCw2ICs3MCwxNCBAQAogCV9fdTggIHRhYmxlWzE0XTsKIH07CiAKKy8qIEdsZWFuZWQgZnJvbSBPRlcncyBzZXQtcGFyYW1ldGVycyBpbiBjcHUveDg2L3BjL2xpbnV4LmZ0aCAqLworc3RydWN0IG9scGNfb2Z3X2hlYWRlciB7CisJX191MzIgb2Z3X21hZ2ljOwkvKiBPRlcgc2lnbmF0dXJlICovCisJX191MzIgb2Z3X3ZlcnNpb247CisJX191MzIgY2lmX2hhbmRsZXI7CS8qIGNhbGxiYWNrIGludG8gT0ZXICovCisJX191MzIgaXJxX2Rlc2NfdGFibGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgZWZpX2luZm8gewogCV9fdTMyIGVmaV9sb2FkZXJfc2lnbmF0dXJlOwogCV9fdTMyIGVmaV9zeXN0YWI7CkBAIC05Miw3ICsxMDAsOCBAQAogCV9fdTggIGhkMF9pbmZvWzE2XTsJLyogb2Jzb2xldGUhICovCQkvKiAweDA4MCAqLwogCV9fdTggIGhkMV9pbmZvWzE2XTsJLyogb2Jzb2xldGUhICovCQkvKiAweDA5MCAqLwogCXN0cnVjdCBzeXNfZGVzY190YWJsZSBzeXNfZGVzY190YWJsZTsJCS8qIDB4MGEwICovCi0JX191OCAgX3BhZDRbMTQ0XTsJCQkJLyogMHgwYjAgKi8KKwlzdHJ1Y3Qgb2xwY19vZndfaGVhZGVyIG9scGNfb2Z3X2hlYWRlcjsJCS8qIDB4MGIwICovCisJX191OCAgX3BhZDRbMTI4XTsJCQkJLyogMHgwYzAgKi8KIAlzdHJ1Y3QgZWRpZF9pbmZvIGVkaWRfaW5mbzsJCQkvKiAweDE0MCAqLwogCXN0cnVjdCBlZmlfaW5mbyBlZmlfaW5mbzsJCQkvKiAweDFjMCAqLwogCV9fdTMyIGFsdF9tZW1fazsJCQkJLyogMHgxZTAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaAppbmRleCA4ODU5ZTEyLi4yODRhNmU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCkBAIC0xMSwzOCArMTEsNDIgQEAKIGV4dGVybiB2b2lkIF9feGNoZ193cm9uZ19zaXplKHZvaWQpOwogCiAvKgotICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQotICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAotICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5LgorICogU2luY2UgdGhpcyBpcyBnZW5lcmFsbHkgdXNlZCB0byBwcm90ZWN0IG90aGVyIG1lbW9yeSBpbmZvcm1hdGlvbiwgd2UKKyAqIHVzZSAiYXNtIHZvbGF0aWxlIiBhbmQgIm1lbW9yeSIgY2xvYmJlcnMgdG8gcHJldmVudCBnY2MgZnJvbSBtb3ZpbmcKKyAqIGluZm9ybWF0aW9uIGFyb3VuZC4KICAqLwotCi1zdHJ1Y3QgX194Y2hnX2R1bW15IHsKLQl1bnNpZ25lZCBsb25nIGFbMTAwXTsKLX07Ci0jZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHgpKQotCiAjZGVmaW5lIF9feGNoZyh4LCBwdHIsIHNpemUpCQkJCQkJXAogKHsJCQkJCQkJCQlcCiAJX190eXBlb2YoKihwdHIpKSBfX3ggPSAoeCk7CQkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgieGNoZ2IgJWIwLCUxIgkJCQlcCi0JCQkgICAgIDogIj1xIiAoX194KQkJCQlcCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1OCAqX19wdHIgPSAodm9sYXRpbGUgdTggKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hnYiAlMCwlMSIJCQkJXAorCQkJICAgICA6ICI9cSIgKF9feCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiMCIgKF9feCkJCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgieGNoZ3cgJXcwLCUxIgkJCQlcCi0JCQkgICAgIDogIj1yIiAoX194KQkJCQlcCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MTYgKl9fcHRyID0gKHZvbGF0aWxlIHUxNiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUoInhjaGd3ICUwLCUxIgkJCQlcCisJCQkgICAgIDogIj1yIiAoX194KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICIwIiAoX194KQkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHUzMiAqX19wdHIgPSAodm9sYXRpbGUgdTMyICopKHB0cik7CQlcCiAJCWFzbSB2b2xhdGlsZSgieGNoZ2wgJTAsJTEiCQkJCVwKLQkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogIjAiIChfX3gpCQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJZGVmYXVsdDoJCQkJCQkJXAogCQlfX3hjaGdfd3Jvbmdfc2l6ZSgpOwkJCQkJXAogCX0JCQkJCQkJCVwKQEAgLTUzLDYwICs1NywzMyBAQAogCV9feGNoZygodiksIChwdHIpLCBzaXplb2YoKnB0cikpCiAKIC8qCi0gKiBUaGUgc2VtYW50aWNzIG9mIFhDSEdDTVA4QiBhcmUgYSBiaXQgc3RyYW5nZSwgdGhpcyBpcyB3aHkKLSAqIHRoZXJlIGlzIGEgbG9vcCBhbmQgdGhlIGxvYWRpbmcgb2YgJSVlYXggYW5kICUlZWR4IGhhcyB0bwotICogYmUgaW5zaWRlLiBUaGlzIGlubGluZXMgd2VsbCBpbiBtb3N0IGNhc2VzLCB0aGUgY2FjaGVkCi0gKiBjb3N0IGlzIGFyb3VuZCB+MzggY3ljbGVzLiAoaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCB3YW50Ci0gKiB0byBkbyBhbiBTSU1ELzNETk9XIS9NTVgvRlBVIDY0LWJpdCBzdG9yZSBoZXJlLCBidXQgdGhhdAotICogbWlnaHQgaGF2ZSBhbiBpbXBsaWNpdCBGUFUtc2F2ZSBhcyBhIGNvc3QsIHNvIGl0J3Mgbm90Ci0gKiBjbGVhciB3aGljaCBwYXRoIHRvIGdvLikKKyAqIENNUFhDSEc4QiBvbmx5IHdyaXRlcyB0byB0aGUgdGFyZ2V0IGlmIHdlIGhhZCB0aGUgcHJldmlvdXMKKyAqIHZhbHVlIGluIHJlZ2lzdGVycywgb3RoZXJ3aXNlIGl0IGFjdHMgYXMgYSByZWFkIGFuZCBnaXZlcyB1cyB0aGUKKyAqICJuZXcgcHJldmlvdXMiIHZhbHVlLiAgVGhhdCBpcyB3aHkgdGhlcmUgaXMgYSBsb29wLiAgUHJlbG9hZGluZworICogRURYOkVBWCBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogaW4gdGhlIGNvbW1vbiBjYXNlIGl0IG1lYW5zCisgKiB3ZSBuZWVkIG9ubHkgb25lIGxvY2tlZCBvcGVyYXRpb24uCiAgKgotICogY21weGNoZzhiIG11c3QgYmUgdXNlZCB3aXRoIHRoZSBsb2NrIHByZWZpeCBoZXJlIHRvIGFsbG93Ci0gKiB0aGUgaW5zdHJ1Y3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXRvbWljYWxseSwgc2VlIHBhZ2UgMy0xMDIKLSAqIG9mIHRoZSBpbnN0cnVjdGlvbiBzZXQgcmVmZXJlbmNlIDI0MzE5MTAyLnBkZi4gV2UgbmVlZAotICogdGhlIHJlYWRlciBzaWRlIHRvIHNlZSB0aGUgY29oZXJlbnQgNjRiaXQgdmFsdWUuCisgKiBBIFNJTUQvM0ROT1chL01NWC9GUFUgNjQtYml0IHN0b3JlIGhlcmUgd291bGQgcmVxdWlyZSBhdCB0aGUgdmVyeQorICogbGVhc3QgYW4gRlBVIHNhdmUgYW5kL29yICVjcjAudHMgbWFuaXB1bGF0aW9uLgorICoKKyAqIGNtcHhjaGc4YiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgbG9jayBwcmVmaXggaGVyZSB0byBhbGxvdyB0aGUKKyAqIGluc3RydWN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkuICBXZSBuZWVkIHRvIGhhdmUgdGhlIHJlYWRlcgorICogc2lkZSB0byBzZWUgdGhlIGNvaGVyZW50IDY0Yml0IHZhbHVlLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXQodW5zaWduZWQgbG9uZyBsb25nICpwdHIsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0XzY0Yml0KHZvbGF0aWxlIHU2NCAqcHRyLCB1NjQgdmFsdWUpCiB7CisJdTMyIGxvdyAgPSB2YWx1ZTsKKwl1MzIgaGlnaCA9IHZhbHVlID4+IDMyOworCXU2NCBwcmV2ID0gKnB0cjsKKwogCWFzbSB2b2xhdGlsZSgiXG4xOlx0IgotCQkgICAgICJtb3ZsICglMCksICUlZWF4XG5cdCIKLQkJICAgICAibW92bCA0KCUwKSwgJSVlZHhcblx0IgotCQkgICAgIExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgKCUwKVxuXHQiCisJCSAgICAgTE9DS19QUkVGSVggImNtcHhjaGc4YiAlMFxuXHQiCiAJCSAgICAgImpueiAxYiIKLQkJICAgICA6IC8qIG5vIG91dHB1dHMgKi8KLQkJICAgICA6ICJEIihwdHIpLAotCQkgICAgICAgImIiKGxvdyksCi0JCSAgICAgICAiYyIoaGlnaCkKLQkJICAgICA6ICJheCIsICJkeCIsICJtZW1vcnkiKTsKKwkJICAgICA6ICI9bSIgKCpwdHIpLCAiK0EiIChwcmV2KQorCQkgICAgIDogImIiIChsb3cpLCAiYyIgKGhpZ2gpCisJCSAgICAgOiAibWVtb3J5Iik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdF9jb25zdGFudCh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKLQkJCQkJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQotewotCV9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCl2YWx1ZSwgKHVuc2lnbmVkIGludCkodmFsdWUgPj4gMzIpKTsKLX0KLQotI2RlZmluZSBsbF9sb3coeCkJKigoKHVuc2lnbmVkIGludCAqKSYoeCkpICsgMCkKLSNkZWZpbmUgbGxfaGlnaCh4KQkqKCgodW5zaWduZWQgaW50ICopJih4KSkgKyAxKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfdmFyKHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSkKLXsKLQlfX3NldF82NGJpdChwdHIsIGxsX2xvdyh2YWx1ZSksIGxsX2hpZ2godmFsdWUpKTsKLX0KLQotI2RlZmluZSBzZXRfNjRiaXQocHRyLCB2YWx1ZSkJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKCh2YWx1ZSkpCQlcCi0JID8gX19zZXRfNjRiaXRfY29uc3RhbnQoKHB0ciksICh2YWx1ZSkpCVwKLQkgOiBfX3NldF82NGJpdF92YXIoKHB0ciksICh2YWx1ZSkpKQotCi0jZGVmaW5lIF9zZXRfNjRiaXQocHRyLCB2YWx1ZSkJCQkJCQlcCi0JKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbHVlKQkJCQkJXAotCSA/IF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLAkJCVwKLQkJICAgICAgICh1bnNpZ25lZCBpbnQpKCh2YWx1ZSkgPj4gMzIpKQkJCVwKLQkgOiBfX3NldF82NGJpdChwdHIsIGxsX2xvdygodmFsdWUpKSwgbGxfaGlnaCgodmFsdWUpKSkpCi0KIGV4dGVybiB2b2lkIF9fY21weGNoZ193cm9uZ19zaXplKHZvaWQpOwogCiAvKgpAQCAtMTIxLDIzICs5OCwzMiBAQAogCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlYjEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAicSIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTggKl9fcHRyID0gKHZvbGF0aWxlIHU4ICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlMiwlMSIJCQlcCisJCQkgICAgIDogIj1hIiAoX19yZXQpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogInEiIChfX25ldyksICIwIiAoX19vbGQpCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hndyAldzEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAiciIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTE2ICpfX3B0ciA9ICh2b2xhdGlsZSB1MTYgKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiciIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdsICUxLCUyIgkJCVwKLQkJCSAgICAgOiAiPWEiKF9fcmV0KQkJCQlcCi0JCQkgICAgIDogInIiKF9fbmV3KSwgIm0iKCpfX3hnKHB0cikpLCAiMCIoX19vbGQpCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHUzMiAqX19wdHIgPSAodm9sYXRpbGUgdTMyICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnbCAlMiwlMSIJCQlcCisJCQkgICAgIDogIj1hIiAoX19yZXQpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogInIiIChfX25ldyksICIwIiAoX19vbGQpCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAlkZWZhdWx0OgkJCQkJCQlcCiAJCV9fY21weGNoZ193cm9uZ19zaXplKCk7CQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMTc1LDMyICsxNjEsMjggQEAKIAkJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKG4pKSkKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2NtcHhjaGc2NCh2b2xhdGlsZSB2b2lkICpwdHIsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9sZCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQorc3RhdGljIGlubGluZSB1NjQgX19jbXB4Y2hnNjQodm9sYXRpbGUgdTY0ICpwdHIsIHU2NCBvbGQsIHU2NCBuZXcpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXY7Ci0JYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICJjbXB4Y2hnOGIgJTMiCi0JCSAgICAgOiAiPUEiKHByZXYpCi0JCSAgICAgOiAiYiIoKHVuc2lnbmVkIGxvbmcpbmV3KSwKLQkJICAgICAgICJjIigodW5zaWduZWQgbG9uZykobmV3ID4+IDMyKSksCi0JCSAgICAgICAibSIoKl9feGcocHRyKSksCi0JCSAgICAgICAiMCIob2xkKQorCXU2NCBwcmV2OworCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiY21weGNoZzhiICUxIgorCQkgICAgIDogIj1BIiAocHJldiksCisJCSAgICAgICAiK20iICgqcHRyKQorCQkgICAgIDogImIiICgodTMyKW5ldyksCisJCSAgICAgICAiYyIgKCh1MzIpKG5ldyA+PiAzMikpLAorCQkgICAgICAgIjAiIChvbGQpCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIHByZXY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIF9fY21weGNoZzY0X2xvY2FsKHZvbGF0aWxlIHZvaWQgKnB0ciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGQsCi0JCQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3KQorc3RhdGljIGlubGluZSB1NjQgX19jbXB4Y2hnNjRfbG9jYWwodm9sYXRpbGUgdTY0ICpwdHIsIHU2NCBvbGQsIHU2NCBuZXcpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHByZXY7Ci0JYXNtIHZvbGF0aWxlKCJjbXB4Y2hnOGIgJTMiCi0JCSAgICAgOiAiPUEiKHByZXYpCi0JCSAgICAgOiAiYiIoKHVuc2lnbmVkIGxvbmcpbmV3KSwKLQkJICAgICAgICJjIigodW5zaWduZWQgbG9uZykobmV3ID4+IDMyKSksCi0JCSAgICAgICAibSIoKl9feGcocHRyKSksCi0JCSAgICAgICAiMCIob2xkKQorCXU2NCBwcmV2OworCWFzbSB2b2xhdGlsZSgiY21weGNoZzhiICUxIgorCQkgICAgIDogIj1BIiAocHJldiksCisJCSAgICAgICAiK20iICgqcHRyKQorCQkgICAgIDogImIiICgodTMyKW5ldyksCisJCSAgICAgICAiYyIgKCh1MzIpKG5ldyA+PiAzMikpLAorCQkgICAgICAgIjAiIChvbGQpCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIHByZXY7CiB9CkBAIC0yNjQsOCArMjQ2LDYgQEAKICAqIHRvIHNpbXVsYXRlIHRoZSBjbXB4Y2hnOGIgb24gdGhlIDgwMzg2IGFuZCA4MDQ4NiBDUFUuCiAgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBjbXB4Y2hnXzQ4Nl91NjQodm9sYXRpbGUgdm9pZCAqLCB1NjQsIHU2NCk7Ci0KICNkZWZpbmUgY21weGNoZzY0KHB0ciwgbywgbikJCQkJCVwKICh7CQkJCQkJCQlcCiAJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQlcCkBAIC0yODMsMjAgKzI2MywyMCBAQAogCV9fcmV0OyB9KQogCiAKLQotI2RlZmluZSBjbXB4Y2hnNjRfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAotKHsJCQkJCQkJCQlcCi0JX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQkJXAotCWlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiA0KSkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjRfbG9jYWwoKHB0ciksCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ180ODZfdTY0KChwdHIpLAlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJXAorKHsJCQkJCQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19vbGQgPSAobyk7CQkJCVwKKwlfX3R5cGVvZl9fKCoocHRyKSkgX19uZXcgPSAobik7CQkJCVwKKwlhbHRlcm5hdGl2ZV9pbygiY2FsbCBjbXB4Y2hnOGJfZW11IiwJCQlcCisJCSAgICAgICAiY21weGNoZzhiICglJWVzaSkiICwJCQlcCisJCSAgICAgICBYODZfRkVBVFVSRV9DWDgsCQkJCVwKKwkJICAgICAgICI9QSIgKF9fcmV0KSwJCQkJXAorCQkgICAgICAgIlMiICgocHRyKSksICIwIiAoX19vbGQpLAkJXAorCQkgICAgICAgImIiICgodW5zaWduZWQgaW50KV9fbmV3KSwJCVwKKwkJICAgICAgICJjIiAoKHVuc2lnbmVkIGludCkoX19uZXc+PjMyKSkJCVwKKwkJICAgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJX19yZXQ7IH0pCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzY0LmgKaW5kZXggNDg1YWU0MS4uNDIzYWU1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ182NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfNjQuaApAQCAtMyw1MSArMyw2MCBAQAogCiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+IC8qIFByb3ZpZGVzIExPQ0tfUFJFRklYICovCiAKLSNkZWZpbmUgX194Zyh4KSAoKHZvbGF0aWxlIGxvbmcgKikoeCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfNjRiaXQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcHRyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfNjRiaXQodm9sYXRpbGUgdTY0ICpwdHIsIHU2NCB2YWwpCiB7CiAJKnB0ciA9IHZhbDsKIH0KIAotI2RlZmluZSBfc2V0XzY0Yml0IHNldF82NGJpdAotCiBleHRlcm4gdm9pZCBfX3hjaGdfd3Jvbmdfc2l6ZSh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY21weGNoZ193cm9uZ19zaXplKHZvaWQpOwogCiAvKgotICogTm90ZTogbm8gImxvY2siIHByZWZpeCBldmVuIG9uIFNNUDogeGNoZyBhbHdheXMgaW1wbGllcyBsb2NrIGFueXdheQotICogTm90ZSAyOiB4Y2hnIGhhcyBzaWRlIGVmZmVjdCwgc28gdGhhdCBhdHRyaWJ1dGUgdm9sYXRpbGUgaXMgbmVjZXNzYXJ5LAotICoJICBidXQgZ2VuZXJhbGx5IHRoZSBwcmltaXRpdmUgaXMgaW52YWxpZCwgKnB0ciBpcyBvdXRwdXQgYXJndW1lbnQuIC0tQU5LCisgKiBOb3RlOiBubyAibG9jayIgcHJlZml4IGV2ZW4gb24gU01QOiB4Y2hnIGFsd2F5cyBpbXBsaWVzIGxvY2sgYW55d2F5LgorICogU2luY2UgdGhpcyBpcyBnZW5lcmFsbHkgdXNlZCB0byBwcm90ZWN0IG90aGVyIG1lbW9yeSBpbmZvcm1hdGlvbiwgd2UKKyAqIHVzZSAiYXNtIHZvbGF0aWxlIiBhbmQgIm1lbW9yeSIgY2xvYmJlcnMgdG8gcHJldmVudCBnY2MgZnJvbSBtb3ZpbmcKKyAqIGluZm9ybWF0aW9uIGFyb3VuZC4KICAqLwogI2RlZmluZSBfX3hjaGcoeCwgcHRyLCBzaXplKQkJCQkJCVwKICh7CQkJCQkJCQkJXAogCV9fdHlwZW9mKCoocHRyKSkgX194ID0gKHgpOwkJCQkJXAogCXN3aXRjaCAoc2l6ZSkgewkJCQkJCQlcCiAJY2FzZSAxOgkJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUoInhjaGdiICViMCwlMSIJCQkJXAotCQkJICAgICA6ICI9cSIgKF9feCkJCQkJXAotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTggKl9fcHRyID0gKHZvbGF0aWxlIHU4ICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZSgieGNoZ2IgJTAsJTEiCQkJCVwKKwkJCSAgICAgOiAiPXEiIChfX3gpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogIjAiIChfX3gpCQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUoInhjaGd3ICV3MCwlMSIJCQkJXAotCQkJICAgICA6ICI9ciIgKF9feCkJCQkJXAotCQkJICAgICA6ICJtIiAoKl9feGcocHRyKSksICIwIiAoX194KQkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTE2ICpfX3B0ciA9ICh2b2xhdGlsZSB1MTYgKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKCJ4Y2hndyAlMCwlMSIJCQkJXAorCQkJICAgICA6ICI9ciIgKF9feCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiMCIgKF9feCkJCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZSgieGNoZ2wgJWswLCUxIgkJCQlcCi0JCQkgICAgIDogIj1yIiAoX194KQkJCQlcCi0JCQkgICAgIDogIm0iICgqX194ZyhwdHIpKSwgIjAiIChfX3gpCQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MzIgKl9fcHRyID0gKHZvbGF0aWxlIHUzMiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUoInhjaGdsICUwLCUxIgkJCQlcCisJCQkgICAgIDogIj1yIiAoX194KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICIwIiAoX194KQkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgODoJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCXZvbGF0aWxlIHU2NCAqX19wdHIgPSAodm9sYXRpbGUgdTY0ICopKHB0cik7CQlcCiAJCWFzbSB2b2xhdGlsZSgieGNoZ3EgJTAsJTEiCQkJCVwKLQkJCSAgICAgOiAiPXIiIChfX3gpCQkJCVwKLQkJCSAgICAgOiAibSIgKCpfX3hnKHB0cikpLCAiMCIgKF9feCkJCVwKKwkJCSAgICAgOiAiPXIiIChfX3gpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogIjAiIChfX3gpCQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJZGVmYXVsdDoJCQkJCQkJXAogCQlfX3hjaGdfd3Jvbmdfc2l6ZSgpOwkJCQkJXAogCX0JCQkJCQkJCVwKQEAgLTcxLDI5ICs4MCw0MSBAQAogCV9fdHlwZW9mX18oKihwdHIpKSBfX25ldyA9IChuZXcpOwkJCQlcCiAJc3dpdGNoIChzaXplKSB7CQkJCQkJCVwKIAljYXNlIDE6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlYjEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAicSIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTggKl9fcHRyID0gKHZvbGF0aWxlIHU4ICopKHB0cik7CQlcCisJCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hnYiAlMiwlMSIJCQlcCisJCQkgICAgIDogIj1hIiAoX19yZXQpLCAiK20iICgqX19wdHIpCQlcCisJCQkgICAgIDogInEiIChfX25ldyksICIwIiAoX19vbGQpCQkJXAogCQkJICAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCQlcCi0JCWFzbSB2b2xhdGlsZShsb2NrICJjbXB4Y2hndyAldzEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAiciIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTE2ICpfX3B0ciA9ICh2b2xhdGlsZSB1MTYgKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGd3ICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiciIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWNhc2UgNDoJCQkJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdsICVrMSwlMiIJCQlcCi0JCQkgICAgIDogIj1hIihfX3JldCkJCQkJXAotCQkJICAgICA6ICJyIihfX25ldyksICJtIigqX194ZyhwdHIpKSwgIjAiKF9fb2xkKQlcCisJewkJCQkJCQkJXAorCQl2b2xhdGlsZSB1MzIgKl9fcHRyID0gKHZvbGF0aWxlIHUzMiAqKShwdHIpOwkJXAorCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ2wgJTIsJTEiCQkJXAorCQkJICAgICA6ICI9YSIgKF9fcmV0KSwgIittIiAoKl9fcHRyKQkJXAorCQkJICAgICA6ICJyIiAoX19uZXcpLCAiMCIgKF9fb2xkKQkJCVwKIAkJCSAgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAotCQlhc20gdm9sYXRpbGUobG9jayAiY21weGNoZ3EgJTEsJTIiCQkJXAotCQkJICAgICA6ICI9YSIoX19yZXQpCQkJCVwKLQkJCSAgICAgOiAiciIoX19uZXcpLCAibSIoKl9feGcocHRyKSksICIwIihfX29sZCkJXAorCXsJCQkJCQkJCVwKKwkJdm9sYXRpbGUgdTY0ICpfX3B0ciA9ICh2b2xhdGlsZSB1NjQgKikocHRyKTsJCVwKKwkJYXNtIHZvbGF0aWxlKGxvY2sgImNtcHhjaGdxICUyLCUxIgkJCVwKKwkJCSAgICAgOiAiPWEiIChfX3JldCksICIrbSIgKCpfX3B0cikJCVwKKwkJCSAgICAgOiAiciIgKF9fbmV3KSwgIjAiIChfX29sZCkJCQlcCiAJCQkgICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJCVwKIAkJX19jbXB4Y2hnX3dyb25nX3NpemUoKTsJCQkJCVwKIAl9CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNDY4MTQ1OS4uNzgxYTUwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtNiw3ICs2LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9yZXF1aXJlZC1mZWF0dXJlcy5oPgogCi0jZGVmaW5lIE5DQVBJTlRTCTkJLyogTiAzMi1iaXQgd29yZHMgd29ydGggb2YgaW5mbyAqLworI2RlZmluZSBOQ0FQSU5UUwkxMAkvKiBOIDMyLWJpdCB3b3JkcyB3b3J0aCBvZiBpbmZvICovCiAKIC8qCiAgKiBOb3RlOiBJZiB0aGUgY29tbWVudCBiZWdpbnMgd2l0aCBhIHF1b3RlZCBzdHJpbmcsIHRoYXQgc3RyaW5nIGlzIHVzZWQKQEAgLTg5LDcgKzg5LDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDICgzKjMyKzE4KSAvKiAiIiBMZmVuY2Ugc3luY2hyb25pemVzIFJEVFNDICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFXzExQVAJKDMqMzIrMTkpIC8qICIiIEJhZCBsb2NhbCBBUElDIGFrYSAxMUFQICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PUEwJKDMqMzIrMjApIC8qIFRoZSBOT1BMICgwRiAxRikgaW5zdHJ1Y3Rpb25zICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FNREMxRQkoMyozMisyMSkgLyogQU1EIEMxRSBkZXRlY3RlZCAqLworCQkJCQkgIC8qIDIxIGF2YWlsYWJsZSwgd2FzIEFNRF9DMUUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfWFRPUE9MT0dZCSgzKjMyKzIyKSAvKiBjcHUgdG9wb2xvZ3kgZW51bSBleHRlbnNpb25zICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1RTQ19SRUxJQUJMRSAoMyozMisyMykgLyogVFNDIGlzIGtub3duIHRvIGJlIHJlbGlhYmxlICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDCSgzKjMyKzI0KSAvKiBUU0MgZG9lcyBub3Qgc3RvcCBpbiBDIHN0YXRlcyAqLwpAQCAtMTI0LDYgKzEyNCw4IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hTQVZFCSg0KjMyKzI2KSAvKiBYU0FWRS9YUlNUT1IvWFNFVEJWL1hHRVRCViAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9PU1hTQVZFCSg0KjMyKzI3KSAvKiAiIiBYU0FWRSBlbmFibGVkIGluIHRoZSBPUyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9BVlgJCSg0KjMyKzI4KSAvKiBBZHZhbmNlZCBWZWN0b3IgRXh0ZW5zaW9ucyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9GMTZDCSg0KjMyKzI5KSAvKiAxNi1iaXQgZnAgY29udmVyc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUkRSTkQJKDQqMzIrMzApIC8qIFRoZSBSRFJBTkQgaW5zdHJ1Y3Rpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFlQRVJWSVNPUgkoNCozMiszMSkgLyogUnVubmluZyBvbiBhIGh5cGVydmlzb3IgKi8KIAogLyogVklBL0N5cml4L0NlbnRhdXItZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4QzAwMDAwMDEsIHdvcmQgNSAqLwpAQCAtMTU3LDIyICsxNTksMjkgQEAKIAogLyoKICAqIEF1eGlsaWFyeSBmbGFnczogTGludXggZGVmaW5lZCAtIEZvciBmZWF0dXJlcyBzY2F0dGVyZWQgaW4gdmFyaW91cwotICogQ1BVSUQgbGV2ZWxzIGxpa2UgMHg2LCAweEEgZXRjCisgKiBDUFVJRCBsZXZlbHMgbGlrZSAweDYsIDB4QSBldGMsIHdvcmQgNwogICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0lEQQkJKDcqMzIrIDApIC8qIEludGVsIER5bmFtaWMgQWNjZWxlcmF0aW9uICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FSQVQJKDcqMzIrIDEpIC8qIEFsd2F5cyBSdW5uaW5nIEFQSUMgVGltZXIgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1BCCQkoNyozMisgMikgLyogQU1EIENvcmUgUGVyZm9ybWFuY2UgQm9vc3QgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBCCQkoNyozMisgMykgLyogSUEzMl9FTkVSR1lfUEVSRl9CSUFTIHN1cHBvcnQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNBVkVPUFQJKDcqMzIrIDQpIC8qIE9wdGltaXplZCBYc2F2ZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTE4JCSg3KjMyKyA1KSAvKiBJbnRlbCBQb3dlciBMaW1pdCBOb3RpZmljYXRpb24gKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUFRTCQkoNyozMisgNikgLyogSW50ZWwgUGFja2FnZSBUaGVybWFsIFN0YXR1cyAqLwogCi0vKiBWaXJ0dWFsaXphdGlvbiBmbGFnczogTGludXggZGVmaW5lZCAqLworLyogVmlydHVhbGl6YXRpb24gZmxhZ3M6IExpbnV4IGRlZmluZWQsIHdvcmQgOCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9UUFJfU0hBRE9XICAoOCozMisgMCkgLyogSW50ZWwgVFBSIFNoYWRvdyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9WTk1JICAgICAgICAoOCozMisgMSkgLyogSW50ZWwgVmlydHVhbCBOTUkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRkxFWFBSSU9SSVRZICg4KjMyKyAyKSAvKiBJbnRlbCBGbGV4UHJpb3JpdHkgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfRVBUICAgICAgICAgKDgqMzIrIDMpIC8qIEludGVsIEV4dGVuZGVkIFBhZ2UgVGFibGUgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfVlBJRCAgICAgICAgKDgqMzIrIDQpIC8qIEludGVsIFZpcnR1YWwgUHJvY2Vzc29yIElEICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX05QVAkJKDgqMzIrNSkgIC8qIEFNRCBOZXN0ZWQgUGFnZSBUYWJsZSBzdXBwb3J0ICovCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0xCUlYJKDgqMzIrNikgIC8qIEFNRCBMQlIgVmlydHVhbGl6YXRpb24gc3VwcG9ydCAqLwotI2RlZmluZSBYODZfRkVBVFVSRV9TVk1MCSg4KjMyKzcpICAvKiAic3ZtX2xvY2siIEFNRCBTVk0gbG9ja2luZyBNU1IgKi8KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTlJJUFMJKDgqMzIrOCkgIC8qICJucmlwX3NhdmUiIEFNRCBTVk0gbmV4dF9yaXAgc2F2ZSAqLworI2RlZmluZSBYODZfRkVBVFVSRV9OUFQJCSg4KjMyKyA1KSAvKiBBTUQgTmVzdGVkIFBhZ2UgVGFibGUgc3VwcG9ydCAqLworI2RlZmluZSBYODZfRkVBVFVSRV9MQlJWCSg4KjMyKyA2KSAvKiBBTUQgTEJSIFZpcnR1YWxpemF0aW9uIHN1cHBvcnQgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZNTAkoOCozMisgNykgLyogInN2bV9sb2NrIiBBTUQgU1ZNIGxvY2tpbmcgTVNSICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05SSVBTCSg4KjMyKyA4KSAvKiAibnJpcF9zYXZlIiBBTUQgU1ZNIG5leHRfcmlwIHNhdmUgKi8KKworLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDc6MCAoZWJ4KSwgd29yZCA5ICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZTR1NCQVNFCSg5KjMyKyAwKSAvKiB7UkQvV1J9e0ZTL0dTfUJBU0UgaW5zdHJ1Y3Rpb25zKi8KIAogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQogCkBAIC0xOTQsNyArMjAzLDkgQEAKIAkgICAoKChiaXQpPj41KT09NCAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzQpKSB8fAlcCiAJICAgKCgoYml0KT4+NSk9PTUgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s1KSkgfHwJXAogCSAgICgoKGJpdCk+PjUpPT02ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNikpIHx8CVwKLQkgICAoKChiaXQpPj41KT09NyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzcpKSApCVwKKwkgICAoKChiaXQpPj41KT09NyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzcpKSB8fAlcCisJICAgKCgoYml0KT4+NSk9PTggJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s4KSkgfHwJXAorCSAgICgoKGJpdCk+PjUpPT05ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLOSkpICkJXAogCSAgPyAxIDoJCQkJCQkJCVwKIAkgdGVzdF9jcHVfY2FwKGMsIGJpdCkpCiAKQEAgLTI5MSw3ICszMDIsNyBAQAogICogcGF0Y2ggdGhlIHRhcmdldCBjb2RlIGZvciBhZGRpdGlvbmFsIHBlcmZvcm1hbmNlLgogICoKICAqLwotc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3B1cmUgYm9vbCBfX3N0YXRpY19jcHVfaGFzKHU4IGJpdCkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19wdXJlIGJvb2wgX19zdGF0aWNfY3B1X2hhcyh1MTYgYml0KQogewogI2lmIF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA1KQogCQlhc20gZ290bygiMTogam1wICVsW3Rfbm9dXG4iCkBAIC0zMDAsMTEgKzMxMSwxMSBAQAogCQkJIF9BU01fQUxJR04gIlxuIgogCQkJIF9BU01fUFRSICIxYlxuIgogCQkJIF9BU01fUFRSICIwXG4iIAkvKiBubyByZXBsYWNlbWVudCAqLwotCQkJICIgLmJ5dGUgJVAwXG4iCQkvKiBmZWF0dXJlIGJpdCAqLworCQkJICIgLndvcmQgJVAwXG4iCQkvKiBmZWF0dXJlIGJpdCAqLwogCQkJICIgLmJ5dGUgMmIgLSAxYlxuIgkvKiBzb3VyY2UgbGVuICovCiAJCQkgIiAuYnl0ZSAwXG4iCQkvKiByZXBsYWNlbWVudCBsZW4gKi8KLQkJCSAiIC5ieXRlIDB4ZmYgKyAwIC0gKDJiLTFiKVxuIgkvKiBwYWRkaW5nICovCiAJCQkgIi5wcmV2aW91c1xuIgorCQkJIC8qIHNraXBwaW5nIHNpemUgY2hlY2sgc2luY2UgcmVwbGFjZW1lbnQgc2l6ZSA9IDAgKi8KIAkJCSA6IDogImkiIChiaXQpIDogOiB0X25vKTsKIAkJcmV0dXJuIHRydWU7CiAJdF9ubzoKQEAgLTMxOCwxMCArMzI5LDEyIEBACiAJCQkgICAgIF9BU01fQUxJR04gIlxuIgogCQkJICAgICBfQVNNX1BUUiAiMWJcbiIKIAkJCSAgICAgX0FTTV9QVFIgIjNmXG4iCi0JCQkgICAgICIgLmJ5dGUgJVAxXG4iCQkvKiBmZWF0dXJlIGJpdCAqLworCQkJICAgICAiIC53b3JkICVQMVxuIgkJLyogZmVhdHVyZSBiaXQgKi8KIAkJCSAgICAgIiAuYnl0ZSAyYiAtIDFiXG4iCQkvKiBzb3VyY2UgbGVuICovCiAJCQkgICAgICIgLmJ5dGUgNGYgLSAzZlxuIgkJLyogcmVwbGFjZW1lbnQgbGVuICovCi0JCQkgICAgICIgLmJ5dGUgMHhmZiArICg0Zi0zZikgLSAoMmItMWIpXG4iIC8qIHBhZGRpbmcgKi8KKwkJCSAgICAgIi5wcmV2aW91c1xuIgorCQkJICAgICAiLnNlY3Rpb24gLmRpc2NhcmQsXCJhd1wiLEBwcm9nYml0c1xuIgorCQkJICAgICAiIC5ieXRlIDB4ZmYgKyAoNGYtM2YpIC0gKDJiLTFiKVxuIiAvKiBzaXplIGNoZWNrICovCiAJCQkgICAgICIucHJldmlvdXNcbiIKIAkJCSAgICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIKIAkJCSAgICAgIjM6IG1vdmIgJDEsJTBcbiIKQEAgLTMzNyw3ICszNTAsNyBAQAogKAkJCQkJCQkJXAogCV9fYnVpbHRpbl9jb25zdGFudF9wKGJvb3RfY3B1X2hhcyhiaXQpKSA/CQlcCiAJCWJvb3RfY3B1X2hhcyhiaXQpIDoJCQkJXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmICEoKGJpdCkgJiB+MHhmZikpID8JXAorCV9fYnVpbHRpbl9jb25zdGFudF9wKGJpdCkgPwkJCQlcCiAJCV9fc3RhdGljX2NwdV9oYXMoYml0KSA6CQkJCVwKIAkJYm9vdF9jcHVfaGFzKGJpdCkJCQkJXAogKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYWM5MWVlZC4uZDRjNDE5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC01NCw3ICs1NCw2IEBACiAKICNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKIAogZXh0ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB1NjQgbWFzayk7CiBleHRlcm4gaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKQEAgLTg3LDEzICs4Niw2IEBACiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCS8qIG5vIGVhc3kgd2F5IHRvIGdldCBjYWNoZSBzaXplIG9uIGFsbCB4ODYsIHNvIHJldHVybiB0aGUKLQkgKiBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCi0JcmV0dXJuIGJvb3RfY3B1X2RhdGEueDg2X2NsZmx1c2hfc2l6ZTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRtYV9hbGxvY19jb2hlcmVudF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJCSAgICBnZnBfdCBnZnApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKaW5kZXggYTcyNjY1MC4uOGNhYWM3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaApAQCAtNjEsNyArNjEsNyBAQAogdm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOwogdm9pZCAqa21hcF9hdG9taWNfcHJvdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpOwogdm9pZCAqa21hcF9hdG9taWMoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKLXZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKK3ZvaWQga3VubWFwX2F0b21pY19ub3R5cGVjaGVjayh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKTsKIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOwogdm9pZCAqa21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KTsKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKaW5kZXggOTQyMjU1My4uNTI4YTExZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaApAQCAtMjAsMTAgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAvKiBBdmFpbGFibGUgSFcgYnJlYWtwb2ludCBsZW5ndGggZW5jb2RpbmdzICovCisjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl9YCQkweDAwCiAjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl8xCQkweDQwCiAjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl8yCQkweDQ0CiAjZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl80CQkweDRjCi0jZGVmaW5lIFg4Nl9CUkVBS1BPSU5UX0xFTl9FWEVDVVRFCTB4NDAKIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgWDg2X0JSRUFLUE9JTlRfTEVOXzgJCTB4NDgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaAppbmRleCA4MTVjNWIyLi5hNzNhOGQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCkBAIC0zMSw3ICszMSw2IEBACiBleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCk7CiBleHRlcm4gdm9pZCBfX21hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIGV4dGVybiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CiAKIGV4dGVybiB1c2VyX3JlZ3NldF9hY3RpdmVfZm4gZnByZWdzX2FjdGl2ZSwgeGZwcmVnc19hY3RpdmU7CkBAIC01OCwxMSArNTcsMjUgQEAKIAogI2RlZmluZSBYODdfRlNXX0VTICgxIDw8IDcpCS8qIEV4Y2VwdGlvbiBTdW1tYXJ5ICovCiAKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19wdXJlIGJvb2wgdXNlX3hzYXZlb3B0KHZvaWQpCit7CisJcmV0dXJuIHN0YXRpY19jcHVfaGFzKFg4Nl9GRUFUVVJFX1hTQVZFT1BUKTsKK30KKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX3B1cmUgYm9vbCB1c2VfeHNhdmUodm9pZCkKIHsKIAlyZXR1cm4gc3RhdGljX2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNBVkUpOwogfQogCitleHRlcm4gdm9pZCBfX3Nhbml0aXplX2kzODdfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2FuaXRpemVfaTM4N19zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAoIXVzZV94c2F2ZW9wdCgpKQorCQlyZXR1cm47CisJX19zYW5pdGl6ZV9pMzg3X3N0YXRlKHRzayk7Cit9CisKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKIC8qIElnbm9yZSBkZWxheWVkIGV4Y2VwdGlvbnMgZnJvbSB1c2VyIHNwYWNlICovCkBAIC0xMjcsNiArMTQwLDE1IEBACiB7CiAJaW50IGVycjsKIAorCS8qCisJICogQ2xlYXIgdGhlIGJ5dGVzIG5vdCB0b3VjaGVkIGJ5IHRoZSBmeHNhdmUgYW5kIHJlc2VydmVkCisJICogZm9yIHRoZSBTVyB1c2FnZS4KKwkgKi8KKwllcnIgPSBfX2NsZWFyX3VzZXIoJmZ4LT5zd19yZXNlcnZlZCwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgX2ZweF9zd19ieXRlcykpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCWFzbSB2b2xhdGlsZSgiMTogIHJleDY0L2Z4c2F2ZSAoJVtmeF0pXG5cdCIKIAkJICAgICAiMjpcbiIKIAkJICAgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKaW5kZXggZjMyYTQzMC4uYzYyYzEzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmgKQEAgLTM4LDYgKzM4LDEwIEBACiAjZGVmaW5lIE1DTV9BRERSX01FTQkgMwkvKiBtZW1vcnkgYWRkcmVzcyAqLwogI2RlZmluZSBNQ01fQUREUl9HRU5FUklDIDcJLyogZ2VuZXJpYyAqLwogCisvKiBDVEwyIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgTUNJX0NUTDJfQ01DSV9FTgkJKDFVTEwgPDwgMzApCisjZGVmaW5lIE1DSV9DVEwyX0NNQ0lfVEhSRVNIT0xEX01BU0sJMHg3ZmZmVUxMCisKICNkZWZpbmUgTUNKX0NUWF9NQVNLCQkzCiAjZGVmaW5lIE1DSl9DVFgoZmxhZ3MpCQkoKGZsYWdzKSAmIE1DSl9DVFhfTUFTSykKICNkZWZpbmUgTUNKX0NUWF9SQU5ET00JCTAgICAgLyogaW5qZWN0IGNvbnRleHQ6IHJhbmRvbSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXJzdC5oCmluZGV4IDQ1MWQzMGUuLjE2MzUwNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21yc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmgKQEAgLTEzLDYgKzEzLDMyIEBACiBleHRlcm4gaW50IHBjaV9tcnN0X2luaXQodm9pZCk7CiBpbnQgX19pbml0IHNmaV9wYXJzZV9tcnRjKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSk7CiAKKy8qCisgKiBNZWRmaWVsZCBpcyB0aGUgZm9sbG93LXVwIG9mIE1vb3Jlc3Rvd24sIGl0IGNvbWJpbmVzIHR3byBjaGlwIHNvbHV0aW9uIGludG8KKyAqIG9uZS4gT3RoZXIgdGhhbiB0aGF0IGl0IGFsc28gYWRkZWQgYWx3YXlzLW9uIGFuZCBjb25zdGFudCB0c2MgYW5kIGxhcGljCisgKiB0aW1lcnMuIE1lZGZpZWxkIGlzIHRoZSBwbGF0Zm9ybSBuYW1lLCBhbmQgdGhlIGNoaXAgbmFtZSBpcyBjYWxsZWQgUGVud2VsbAorICogd2UgdHJlYXQgTWVkZmllbGQvUGVud2VsbCBhcyBhIHZhcmlhbnQgb2YgTW9vcmVzdG93bi4gUGVud2VsbCBjYW4gYmUKKyAqIGlkZW50aWZpZWQgdmlhIE1TUnMuCisgKi8KK2VudW0gbXJzdF9jcHVfdHlwZSB7CisJTVJTVF9DUFVfQ0hJUF9MSU5DUk9GVCA9IDEsCisJTVJTVF9DUFVfQ0hJUF9QRU5XRUxMLAorfTsKKworZXh0ZXJuIGVudW0gbXJzdF9jcHVfdHlwZSBfX21yc3RfY3B1X2NoaXA7CitzdGF0aWMgZW51bSBtcnN0X2NwdV90eXBlIG1yc3RfaWRlbnRpZnlfY3B1KHZvaWQpCit7CisJcmV0dXJuIF9fbXJzdF9jcHVfY2hpcDsKK30KKworZW51bSBtcnN0X3RpbWVyX29wdGlvbnMgeworCU1SU1RfVElNRVJfREVGQVVMVCwKKwlNUlNUX1RJTUVSX0FQQlRfT05MWSwKKwlNUlNUX1RJTUVSX0xBUElDX0FQQlQsCit9OworCitleHRlcm4gZW51bSBtcnN0X3RpbWVyX29wdGlvbnMgbXJzdF90aW1lcl9vcHRpb25zOworCiAjZGVmaW5lIFNGSV9NVE1SX01BWF9OVU0gOAogI2RlZmluZSBTRklfTVJUQ19NQVgJOAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDUwOWE0MjEuLjk4NmY3NzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC05Niw5ICs5Niw2IEBACiAjZGVmaW5lIE1TUl9JQTMyX01DMF9DVEwyCQkweDAwMDAwMjgwCiAjZGVmaW5lIE1TUl9JQTMyX01DeF9DVEwyKHgpCQkoTVNSX0lBMzJfTUMwX0NUTDIgKyAoeCkpCiAKLSNkZWZpbmUgQ01DSV9FTgkJCSgxVUxMIDw8IDMwKQotI2RlZmluZSBDTUNJX1RIUkVTSE9MRF9NQVNLCQkweGZmZmZVTEwKLQogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCQkweDAwMDAwMGMxCiAjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMQkJCTB4MDAwMDAwYzIKICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwCQkJMHgwMDAwMDE4NgpAQCAtMTYxLDggKzE1OCw2IEBACiAjZGVmaW5lIE1TUl9LN19GSURfVklEX1NUQVRVUwkJMHhjMDAxMDA0MgogCiAvKiBLNiBNU1JzICovCi0jZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhjMDAwMDA4MAotI2RlZmluZSBNU1JfSzZfU1RBUgkJCTB4YzAwMDAwODEKICNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweGMwMDAwMDgyCiAjZGVmaW5lIE1TUl9LNl9VV0NDUgkJCTB4YzAwMDAwODUKICNkZWZpbmUgTVNSX0s2X0VQTVIJCQkweGMwMDAwMDg2CkBAIC0yMjYsMTIgKzIyMSwxNCBAQAogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MCQkweDAwMDAwMTlhCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDAwMDAwMTliCiAKLSNkZWZpbmUgVEhFUk1fSU5UX0xPV19FTkFCTEUJCSgxIDw8IDApCi0jZGVmaW5lIFRIRVJNX0lOVF9ISUdIX0VOQUJMRQkJKDEgPDwgMSkKKyNkZWZpbmUgVEhFUk1fSU5UX0hJR0hfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBUSEVSTV9JTlRfTE9XX0VOQUJMRQkJKDEgPDwgMSkKKyNkZWZpbmUgVEhFUk1fSU5UX1BMTl9FTkFCTEUJCSgxIDw8IDI0KQogCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX1NUQVRVUwkJMHgwMDAwMDE5YwogCiAjZGVmaW5lIFRIRVJNX1NUQVRVU19QUk9DSE9UCQkoMSA8PCAwKQorI2RlZmluZSBUSEVSTV9TVEFUVVNfUE9XRVJfTElNSVQJKDEgPDwgMTApCiAKICNkZWZpbmUgTVNSX1RIRVJNMl9DVEwJCQkweDAwMDAwMTlkCiAKQEAgLTI0MSw2ICsyMzgsMTkgQEAKIAogI2RlZmluZSBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQJMHgwMDAwMDFhMgogCisjZGVmaW5lIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMJMHgwMDAwMDFiMAorCisjZGVmaW5lIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTCQkweDAwMDAwMWIxCisKKyNkZWZpbmUgUEFDS0FHRV9USEVSTV9TVEFUVVNfUFJPQ0hPVAkJKDEgPDwgMCkKKyNkZWZpbmUgUEFDS0FHRV9USEVSTV9TVEFUVVNfUE9XRVJfTElNSVQJKDEgPDwgMTApCisKKyNkZWZpbmUgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9JTlRFUlJVUFQJMHgwMDAwMDFiMgorCisjZGVmaW5lIFBBQ0tBR0VfVEhFUk1fSU5UX0hJR0hfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBQQUNLQUdFX1RIRVJNX0lOVF9MT1dfRU5BQkxFCQkoMSA8PCAxKQorI2RlZmluZSBQQUNLQUdFX1RIRVJNX0lOVF9QTE5fRU5BQkxFCQkoMSA8PCAyNCkKKwogLyogTUlTQ19FTkFCTEUgYml0czogYXJjaGl0ZWN0dXJhbCAqLwogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GQVNUX1NUUklORwkoMVVMTCA8PCAwKQogI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UQ0MJCSgxVUxMIDw8IDEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCmluZGV4IGM1YmM0YzIuLjA4NGVmOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0xNDgsOCArMTQ4LDggQEAKICNkZWZpbmUgcmRtc3IobXNyLCB2YWwxLCB2YWwyKQkJCQkJXAogZG8gewkJCQkJCQkJXAogCXU2NCBfX3ZhbCA9IG5hdGl2ZV9yZWFkX21zcigobXNyKSk7CQkJXAotCSh2YWwxKSA9ICh1MzIpX192YWw7CQkJCQlcCi0JKHZhbDIpID0gKHUzMikoX192YWwgPj4gMzIpOwkJCQlcCisJKHZvaWQpKCh2YWwxKSA9ICh1MzIpX192YWwpOwkJCQlcCisJKHZvaWQpKCh2YWwyKSA9ICh1MzIpKF9fdmFsID4+IDMyKSk7CQkJXAogfSB3aGlsZSAoMCkKIAogc3RhdGljIGlubGluZSB2b2lkIHdybXNyKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm1pLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCA5M2RhOWMzLi45MzJmMGY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ubWkuaApAQCAtMTcsNyArMTcsOSBAQAogCiBleHRlcm4gdm9pZCBkaWVfbm1pKGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBkb19wYW5pYyk7CiBleHRlcm4gaW50IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKTsKKyNpZiAhZGVmaW5lZChDT05GSUdfTE9DS1VQX0RFVEVDVE9SKQogZXh0ZXJuIGludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKKyNlbmRpZgogZXh0ZXJuIGludCBhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQodW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgcmVzZXJ2ZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgcmVsZWFzZV9wZXJmY3RyX25taSh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwY19vZncuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmZGU0NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGNfb2Z3LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl9PTFBDX09GV19ICisjZGVmaW5lIF9BU01fWDg2X09MUENfT0ZXX0gKKworLyogaW5kZXggaW50byB0aGUgcGFnZSB0YWJsZSBjb250YWluaW5nIHRoZSBlbnRyeSBPRlcgb2NjdXBpZXMgKi8KKyNkZWZpbmUgT0xQQ19PRldfUERFX05SIDEwMjIKKworI2RlZmluZSBPTFBDX09GV19TSUcgMHgyMDU3NDY0RgkvKiBha2EgIk9GVyAiICovCisKKyNpZmRlZiBDT05GSUdfT0xQQ19PUEVORklSTVdBUkUKKworLyogcnVuIGFuIE9GVyBjb21tYW5kIGJ5IGNhbGxpbmcgaW50byB0aGUgZmlybXdhcmUgKi8KKyNkZWZpbmUgb2xwY19vZncobmFtZSwgYXJncywgcmVzKSBcCisJX19vbHBjX29mdygobmFtZSksIEFSUkFZX1NJWkUoYXJncyksIGFyZ3MsIEFSUkFZX1NJWkUocmVzKSwgcmVzKQorCitleHRlcm4gaW50IF9fb2xwY19vZncoY29uc3QgY2hhciAqbmFtZSwgaW50IG5yX2FyZ3MsIGNvbnN0IHZvaWQgKiphcmdzLCBpbnQgbnJfcmVzLAorCQl2b2lkICoqcmVzKTsKKworLyogZGV0ZXJtaW5lIHdoZXRoZXIgT0ZXIGlzIGF2YWlsYWJsZSBhbmQgbGl2ZXMgaW4gdGhlIHByb3BlciBtZW1vcnkgKi8KK2V4dGVybiB2b2lkIG9scGNfb2Z3X2RldGVjdCh2b2lkKTsKKworLyogaW5zdGFsbCBPRlcncyBwZGUgcGVybWFuZW50bHkgaW50byB0aGUga2VybmVsJ3MgcGd0YWJsZSAqLworZXh0ZXJuIHZvaWQgc2V0dXBfb2xwY19vZndfcGdkKHZvaWQpOworCisjZWxzZSAvKiAhQ09ORklHX09MUENfT1BFTkZJUk1XQVJFICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbHBjX29md19kZXRlY3Qodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfb2xwY19vZndfcGdkKHZvaWQpIHsgfQorCisjZW5kaWYgLyogIUNPTkZJR19PTFBDX09QRU5GSVJNV0FSRSAqLworCisjZW5kaWYgLyogX0FTTV9YODZfT0xQQ19PRldfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCmluZGV4IGNkMmEzMWQuLjQ5YzcyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgUENJX0hBU19JT19FQ1MJCTB4NDAwMDAKICNkZWZpbmUgUENJX05PQVNTSUdOX1JPTVMJMHg4MDAwMAogI2RlZmluZSBQQ0lfUk9PVF9OT19DUlMJCTB4MTAwMDAwCisjZGVmaW5lIFBDSV9OT0FTU0lHTl9CQVJTCTB4MjAwMDAwCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpX3Byb2JlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGlycV90YWJsZV9hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCmluZGV4IDI1NDg4M2QuLjZlNzQyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTY4LDggKzY4LDkgQEAKIAogdW5pb24gY3B1aWQxMF9lZHggewogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBudW1fY291bnRlcnNfZml4ZWQ6NDsKLQkJdW5zaWduZWQgaW50IHJlc2VydmVkOjI4OworCQl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzX2ZpeGVkOjU7CisJCXVuc2lnbmVkIGludCBiaXRfd2lkdGhfZml4ZWQ6ODsKKwkJdW5zaWduZWQgaW50IHJlc2VydmVkOjE5OwogCX0gc3BsaXQ7CiAJdW5zaWduZWQgaW50IGZ1bGw7CiB9OwpAQCAtMTQwLDYgKzE0MSwxOSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCXBlcmZfbWlzY19mbGFncyhyZWdzKQogCisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KKworLyoKKyAqIFdlIGFidXNlIGJpdCAzIGZyb20gZmxhZ3MgdG8gcGFzcyBleGFjdCBpbmZvcm1hdGlvbiwgc2VlIHBlcmZfbWlzY19mbGFncworICogYW5kIHRoZSBjb21tZW50IHdpdGggUEVSRl9FRkxBR1NfRVhBQ1QuCisgKi8KKyNkZWZpbmUgcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHJlZ3MsIF9faXApCQl7CVwKKwkocmVncyktPmlwID0gKF9faXApOwkJCQkJXAorCShyZWdzKS0+YnAgPSBjYWxsZXJfZnJhbWVfcG9pbnRlcigpOwkJCVwKKwkocmVncyktPmNzID0gX19LRVJORUxfQ1M7CQkJCVwKKwlyZWdzLT5mbGFncyA9IDA7CQkJCQlcCit9CisKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9od19wZXJmX2V2ZW50cyh2b2lkKQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudHNfbGFwaWNfaW5pdCh2b2lkKQl7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAppbmRleCA2NGE4ZWJmLi5kZWY1MDA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIEFSQ0hfUDRfUkVTRVJWRURfRVNDUgkoMikgLyogSVFfRVNDUigwLDEpIG5vdCBhbHdheXMgcHJlc2VudCAqLwogI2RlZmluZSBBUkNIX1A0X01BWF9FU0NSCShBUkNIX1A0X1RPVEFMX0VTQ1IgLSBBUkNIX1A0X1JFU0VSVkVEX0VTQ1IpCiAjZGVmaW5lIEFSQ0hfUDRfTUFYX0NDQ1IJKDE4KQotI2RlZmluZSBBUkNIX1A0X01BWF9DT1VOVEVSCShBUkNIX1A0X01BWF9DQ0NSIC8gMikKIAogI2RlZmluZSBQNF9FU0NSX0VWRU5UX01BU0sJMHg3ZTAwMDAwMFUKICNkZWZpbmUgUDRfRVNDUl9FVkVOVF9TSElGVAkyNQpAQCAtNzEsMTAgKzcwLDYgQEAKICNkZWZpbmUgUDRfQ0NDUl9USFJFU0hPTEQodikJCSgodikgPDwgUDRfQ0NDUl9USFJFU0hPTERfU0hJRlQpCiAjZGVmaW5lIFA0X0NDQ1JfRVNFTCh2KQkJCSgodikgPDwgUDRfQ0NDUl9FU0NSX1NFTEVDVF9TSElGVCkKIAotLyogQ3VzdG9tIGJpdHMgaW4gcmVlcnZlZCBDQ0NSIGFyZWEgKi8KLSNkZWZpbmUgUDRfQ0NDUl9DQUNIRV9PUFNfTUFTSwkJMHgwMDAwMDAzZlUKLQotCiAvKiBOb24gSFQgbWFzayAqLwogI2RlZmluZSBQNF9DQ0NSX01BU0sJCQkJXAogCShQNF9DQ0NSX09WRgkJCXwJXApAQCAtMTA2LDggKzEwMSw3IEBACiAgKiBFU0NSIGFuZCBDQ0NSIGJ1dCByYXRoZXIgYW4gb25seSBwYWNrZWQgdmFsdWUgc2hvdWxkCiAgKiBiZSB1bnBhY2tlZCBhbmQgd3JpdHRlbiB0byBhIHByb3BlciBhZGRyZXNzZXMKICAqCi0gKiB0aGUgYmFzZSBpZGVhIGlzIHRvIHBhY2sgYXMgbXVjaCBpbmZvIGFzCi0gKiBwb3NzaWJsZQorICogdGhlIGJhc2UgaWRlYSBpcyB0byBwYWNrIGFzIG11Y2ggaW5mbyBhcyBwb3NzaWJsZQogICovCiAjZGVmaW5lIHA0X2NvbmZpZ19wYWNrX2VzY3IodikJCSgoKHU2NCkodikpIDw8IDMyKQogI2RlZmluZSBwNF9jb25maWdfcGFja19jY2NyKHYpCQkoKCh1NjQpKHYpKSAmIDB4ZmZmZmZmZmZVTEwpCkBAIC0xMzAsOCArMTI0LDYgQEAKIAkJdDsJCQkJCVwKIAl9KQogCi0jZGVmaW5lIHA0X2NvbmZpZ191bnBhY2tfY2FjaGVfZXZlbnQodikJKCgodTY0KSh2KSkgJiBQNF9DQ0NSX0NBQ0hFX09QU19NQVNLKQotCiAjZGVmaW5lIFA0X0NPTkZJR19IVF9TSElGVAkJNjMKICNkZWZpbmUgUDRfQ09ORklHX0hUCQkJKDFVTEwgPDwgUDRfQ09ORklHX0hUX1NISUZUKQogCkBAIC0yMTQsNiArMjA2LDEyIEBACiAJcmV0dXJuIGVzY3I7CiB9CiAKKy8qCisgKiBUaGlzIGFyZSB0aGUgZXZlbnRzIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluICJFdmVudCBTZWxlY3QiCisgKiBmaWVsZCBvZiBFU0NSIHJlZ2lzdGVyLCB0aGV5IGFyZSBsaWtlIHVuaXF1ZSBrZXlzIHdoaWNoIGFsbG93CisgKiB0aGUga2VybmVsIHRvIGRldGVybWluYXRlIHdoaWNoIENDQ1IgYW5kIENPVU5URVIgc2hvdWxkIGJlCisgKiB1c2VkIHRvIHRyYWNrIGFuIGV2ZW50CisgKi8KIGVudW0gUDRfRVZFTlRTIHsKIAlQNF9FVkVOVF9UQ19ERUxJVkVSX01PREUsCiAJUDRfRVZFTlRfQlBVX0ZFVENIX1JFUVVFU1QsCkBAIC01NjEsNyArNTU5LDcgQEAKICAqIGEgY2FsbGVyIHNob3VsZCB1c2UgUDRfRVNDUl9FTUFTS19OQU1FIGhlbHBlciB0bwogICogcGljayB0aGUgRXZlbnRNYXNrIG5lZWRlZCwgZm9yIGV4YW1wbGUKICAqCi0gKglQNF9FU0NSX0VNQVNLX05BTUUoUDRfRVZFTlRfVENfREVMSVZFUl9NT0RFLCBERCkKKyAqCVA0X0VTQ1JfRU1BU0tfQklUKFA0X0VWRU5UX1RDX0RFTElWRVJfTU9ERSwgREQpCiAgKi8KIGVudW0gUDRfRVNDUl9FTUFTS1MgewogCVA0X0dFTl9FU0NSX0VNQVNLKFA0X0VWRU5UX1RDX0RFTElWRVJfTU9ERSwgREQsIDApLApAQCAtNzUzLDQzICs3NTEsNTAgQEAKIAlQNF9HRU5fRVNDUl9FTUFTSyhQNF9FVkVOVF9JTlNUUl9DT01QTEVURUQsIEJPR1VTLCAxKSwKIH07CiAKLS8qIFA0IFBFQlM6IHN0YWxlIGZvciBhIHdoaWxlICovCi0jZGVmaW5lIFA0X1BFQlNfTUVUUklDX01BU0sJMHgwMDAwMWZmZlUKLSNkZWZpbmUgUDRfUEVCU19VT0JfVEFHCQkweDAxMDAwMDAwVQotI2RlZmluZSBQNF9QRUJTX0VOQUJMRQkJMHgwMjAwMDAwMFUKKy8qCisgKiBQNCBQRUJTIHNwZWNpZmljcyAoUmVwbGF5IEV2ZW50IG9ubHkpCisgKgorICogRm9ybWF0IChiaXRzKToKKyAqICAgMC02OiBtZXRyaWMgZnJvbSBQNF9QRUJTX01FVFJJQyBlbnVtCisgKiAgICA3IDogcmVzZXJ2ZWQKKyAqICAgIDggOiByZXNlcnZlZAorICogOS0xMSA6IHJlc2VydmVkCisgKgorICogTm90ZSB3ZSBoYXZlIFVPUCBhbmQgUEVCUyBiaXRzIHJlc2VydmVkIGZvciBub3cKKyAqIGp1c3QgaW4gY2FzZSBpZiB3ZSB3aWxsIG5lZWQgdGhlbSBvbmNlCisgKi8KKyNkZWZpbmUgUDRfUEVCU19DT05GSUdfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSBQNF9QRUJTX0NPTkZJR19VT1BfVEFHCQkoMSA8PCA4KQorI2RlZmluZSBQNF9QRUJTX0NPTkZJR19NRVRSSUNfTUFTSwkweDNmCisjZGVmaW5lIFA0X1BFQlNfQ09ORklHX01BU0sJCTB4ZmYKIAotLyogUmVwbGF5IG1ldHJpY3MgZm9yIE1TUl9JQTMyX1BFQlNfRU5BQkxFIGFuZCBNU1JfUDRfUEVCU19NQVRSSVhfVkVSVCAqLwotI2RlZmluZSBQNF9QRUJTX18xc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkCTB4MzAwMDAwMQotI2RlZmluZSBQNF9QRUJTX18ybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkCTB4MzAwMDAwMgotI2RlZmluZSBQNF9QRUJTX19kdGxiX2xvYWRfbWlzc19yZXRpcmVkCQkweDMwMDAwMDQKLSNkZWZpbmUgUDRfUEVCU19fZHRsYl9zdG9yZV9taXNzX3JldGlyZWQJMHgzMDAwMDA0Ci0jZGVmaW5lIFA0X1BFQlNfX2R0bGJfYWxsX21pc3NfcmV0aXJlZAkJMHgzMDAwMDA0Ci0jZGVmaW5lIFA0X1BFQlNfX3RhZ2dlZF9taXNwcmVkX2JyYW5jaAkJMHgzMDE4MDAwCi0jZGVmaW5lIFA0X1BFQlNfX21vYl9sb2FkX3JlcGxheV9yZXRpcmVkCTB4MzAwMDIwMAotI2RlZmluZSBQNF9QRUJTX19zcGxpdF9sb2FkX3JldGlyZWQJCTB4MzAwMDQwMAotI2RlZmluZSBQNF9QRUJTX19zcGxpdF9zdG9yZV9yZXRpcmVkCQkweDMwMDA0MDAKKy8qCisgKiBtZW06IE9ubHkgY291bnRlcnMgTVNSX0lRX0NPVU5URVI0ICgxNikgYW5kCisgKiBNU1JfSVFfQ09VTlRFUjUgKDE3KSBhcmUgYWxsb3dlZCBmb3IgUEVCUyBzYW1wbGluZworICovCisjZGVmaW5lIFA0X1BFQlNfRU5BQkxFCQkJMHgwMjAwMDAwMFUKKyNkZWZpbmUgUDRfUEVCU19FTkFCTEVfVU9QX1RBRwkJMHgwMTAwMDAwMFUKIAotI2RlZmluZSBQNF9WRVJUX18xc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkCTB4MDAwMDAwMQotI2RlZmluZSBQNF9WRVJUX18ybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkCTB4MDAwMDAwMQotI2RlZmluZSBQNF9WRVJUX19kdGxiX2xvYWRfbWlzc19yZXRpcmVkCQkweDAwMDAwMDEKLSNkZWZpbmUgUDRfVkVSVF9fZHRsYl9zdG9yZV9taXNzX3JldGlyZWQJMHgwMDAwMDAyCi0jZGVmaW5lIFA0X1ZFUlRfX2R0bGJfYWxsX21pc3NfcmV0aXJlZAkJMHgwMDAwMDAzCi0jZGVmaW5lIFA0X1ZFUlRfX3RhZ2dlZF9taXNwcmVkX2JyYW5jaAkJMHgwMDAwMDEwCi0jZGVmaW5lIFA0X1ZFUlRfX21vYl9sb2FkX3JlcGxheV9yZXRpcmVkCTB4MDAwMDAwMQotI2RlZmluZSBQNF9WRVJUX19zcGxpdF9sb2FkX3JldGlyZWQJCTB4MDAwMDAwMQotI2RlZmluZSBQNF9WRVJUX19zcGxpdF9zdG9yZV9yZXRpcmVkCQkweDAwMDAwMDIKKyNkZWZpbmUgcDRfY29uZmlnX3VucGFja19tZXRyaWModikJKCgodTY0KSh2KSkgJiBQNF9QRUJTX0NPTkZJR19NRVRSSUNfTUFTSykKKyNkZWZpbmUgcDRfY29uZmlnX3VucGFja19wZWJzKHYpCSgoKHU2NCkodikpICYgUDRfUEVCU19DT05GSUdfTUFTSykKIAotZW51bSBQNF9DQUNIRV9FVkVOVFMgewotCVA0X0NBQ0hFX19OT05FLAorI2RlZmluZSBwNF9jb25maWdfcGVic19oYXModiwgbWFzaykJKHA0X2NvbmZpZ191bnBhY2tfcGVicyh2KSAmIChtYXNrKSkKIAotCVA0X0NBQ0hFX18xc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkLAotCVA0X0NBQ0hFX18ybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkLAotCVA0X0NBQ0hFX19kdGxiX2xvYWRfbWlzc19yZXRpcmVkLAotCVA0X0NBQ0hFX19kdGxiX3N0b3JlX21pc3NfcmV0aXJlZCwKLQlQNF9DQUNIRV9faXRsYl9yZWZlcmVuY2VfaGl0LAotCVA0X0NBQ0hFX19pdGxiX3JlZmVyZW5jZV9taXNzLAorZW51bSBQNF9QRUJTX01FVFJJQyB7CisJUDRfUEVCU19NRVRSSUNfX25vbmUsCiAKLQlQNF9DQUNIRV9fTUFYCisJUDRfUEVCU19NRVRSSUNfXzFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfXzJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfX2R0bGJfc3RvcmVfbWlzc19yZXRpcmVkLAorCVA0X1BFQlNfTUVUUklDX19kdGxiX2FsbF9taXNzX3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfX3RhZ2dlZF9taXNwcmVkX2JyYW5jaCwKKwlQNF9QRUJTX01FVFJJQ19fbW9iX2xvYWRfcmVwbGF5X3JldGlyZWQsCisJUDRfUEVCU19NRVRSSUNfX3NwbGl0X2xvYWRfcmV0aXJlZCwKKwlQNF9QRUJTX01FVFJJQ19fc3BsaXRfc3RvcmVfcmV0aXJlZCwKKworCVA0X1BFQlNfTUVUUklDX19tYXgKIH07CiAKICNlbmRpZiAvKiBQRVJGX0VWRU5UX1A0X0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDE4MWJlNTIuLjA3NjA1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTEyNiw4ICsxMjYsOCBAQAogLyogeDg2LTY0IGFsd2F5cyBoYXMgYWxsIHBhZ2UgdGFibGVzIG1hcHBlZC4gKi8KICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQogI2RlZmluZSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoZGlyLCBhZGRyZXNzKSBwdGVfb2Zmc2V0X2tlcm5lbCgoZGlyKSwgKGFkZHJlc3MpKQotI2RlZmluZSBwdGVfdW5tYXAocHRlKSAvKiBOT1AgKi8KLSNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIC8qIE5PUCAqLworI2RlZmluZSBwdGVfdW5tYXAocHRlKSAoKHZvaWQpKHB0ZSkpLyogTk9QICovCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSAoKHZvaWQpKHB0ZSkpIC8qIE5PUCAqLwogCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyZXNzLCBwdGVwKSBkbyB7IH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggN2U1YzZhNi4uMzI1YjdiZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTc2Miw2ICs3NjIsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGU7CiBleHRlcm4gdW5zaWduZWQgbG9uZwkJaWRsZV9oYWx0OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWlkbGVfbm9td2FpdDsKK2V4dGVybiBib29sCQkJYzFlX2RldGVjdGVkOwogCiAvKgogICogb24gc3lzdGVtcyB3aXRoIGNhY2hlcywgY2FjaGVzIG11c3QgYmUgZmxhc2hlZCBhcyB0aGUgYWJzb2x1dGUKQEAgLTEwMjUsNCArMTAyNiwyNCBAQAogCXJldHVybiByYXRpbzsKIH0KIAorLyoKKyAqIEFNRCBlcnJhdGEgY2hlY2tpbmcKKyAqLworI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorZXh0ZXJuIGNvbnN0IGludCBhbWRfZXJyYXR1bV8zODNbXTsKK2V4dGVybiBjb25zdCBpbnQgYW1kX2VycmF0dW1fNDAwW107CitleHRlcm4gYm9vbCBjcHVfaGFzX2FtZF9lcnJhdHVtKGNvbnN0IGludCAqKTsKKworI2RlZmluZSBBTURfTEVHQUNZX0VSUkFUVU0oLi4uKQkJeyAtMSwgX19WQV9BUkdTX18sIDAgfQorI2RlZmluZSBBTURfT1NWV19FUlJBVFVNKG9zdndfaWQsIC4uLikJeyBvc3Z3X2lkLCBfX1ZBX0FSR1NfXywgMCB9CisjZGVmaW5lIEFNRF9NT0RFTF9SQU5HRShmLCBtX3N0YXJ0LCBzX3N0YXJ0LCBtX2VuZCwgc19lbmQpIFwKKwkoKGYgPDwgMjQpIHwgKG1fc3RhcnQgPDwgMTYpIHwgKHNfc3RhcnQgPDwgMTIpIHwgKG1fZW5kIDw8IDQpIHwgKHNfZW5kKSkKKyNkZWZpbmUgQU1EX01PREVMX1JBTkdFX0ZBTUlMWShyYW5nZSkJKCgocmFuZ2UpID4+IDI0KSAmIDB4ZmYpCisjZGVmaW5lIEFNRF9NT0RFTF9SQU5HRV9TVEFSVChyYW5nZSkJKCgocmFuZ2UpID4+IDEyKSAmIDB4ZmZmKQorI2RlZmluZSBBTURfTU9ERUxfUkFOR0VfRU5EKHJhbmdlKQkoKHJhbmdlKSAmIDB4ZmZmKQorCisjZWxzZQorI2RlZmluZSBjcHVfaGFzX2FtZF9lcnJhdHVtKHgpCShmYWxzZSkKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcmVxdWlyZWQtZmVhdHVyZXMuaAppbmRleCA2NGNmMmQyLi42YzdmYzI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKQEAgLTg0LDUgKzg0LDcgQEAKICNkZWZpbmUgUkVRVUlSRURfTUFTSzUJMAogI2RlZmluZSBSRVFVSVJFRF9NQVNLNgkwCiAjZGVmaW5lIFJFUVVJUkVEX01BU0s3CTAKKyNkZWZpbmUgUkVRVUlSRURfTUFTSzgJMAorI2RlZmluZSBSRVFVSVJFRF9NQVNLOQkwCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9SRVFVSVJFRF9GRUFUVVJFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCA2MDZlZGUxLi5kMWU0MWIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9yd3NlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3J3c2VtLmgKQEAgLTExOCw3ICsxMTgsNyBAQAogewogCWFzbSB2b2xhdGlsZSgiIyBiZWdpbm5pbmcgZG93bl9yZWFkXG5cdCIKIAkJICAgICBMT0NLX1BSRUZJWCBfQVNNX0lOQyAiKCUxKVxuXHQiCi0JCSAgICAgLyogYWRkcyAweDAwMDAwMDAxLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAvKiBhZGRzIDB4MDAwMDAwMDEgKi8KIAkJICAgICAiICBqbnMgICAgICAgIDFmXG4iCiAJCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWRcbiIKIAkJICAgICAiMTpcblx0IgpAQCAtMTU2LDExICsxNTYsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fZG93bl93cml0ZV9uZXN0ZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLCBpbnQgc3ViY2xhc3MpCiB7CiAJcndzZW1fY291bnRfdCB0bXA7Ci0KLQl0bXAgPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0IgogCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKLQkJICAgICAvKiBzdWJ0cmFjdCAweDAwMDBmZmZmLCByZXR1cm5zIHRoZSBvbGQgdmFsdWUgKi8KKwkJICAgICAvKiBhZGRzIDB4ZmZmZjAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkgICAgICIgIHRlc3QgICAgICAlMSwlMVxuXHQiCiAJCSAgICAgLyogd2FzIHRoZSBjb3VudCAwIGJlZm9yZT8gKi8KIAkJICAgICAiICBqeiAgICAgICAgMWZcbiIKQEAgLTE2OCw3ICsxNjYsNyBAQAogCQkgICAgICIxOlxuIgogCQkgICAgICIjIGVuZGluZyBkb3duX3dyaXRlIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKLQkJICAgICA6ICJhIiAoc2VtKSwgIjEiICh0bXApCisJCSAgICAgOiAiYSIgKHNlbSksICIxIiAoUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCiAJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKQEAgLTE5NSwxNiArMTkzLDE2IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCXJ3c2VtX2NvdW50X3QgdG1wID0gLVJXU0VNX0FDVElWRV9SRUFEX0JJQVM7CisJcndzZW1fY291bnRfdCB0bXA7CiAJYXNtIHZvbGF0aWxlKCIjIGJlZ2lubmluZyBfX3VwX3JlYWRcblx0IgogCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKIAkJICAgICAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSAgICAgIiAgam5zICAgICAgICAxZlxuXHQiCi0JCSAgICAgIiAgY2FsbCBjYWxsX3J3c2VtX3dha2VcbiIKKwkJICAgICAiICBjYWxsIGNhbGxfcndzZW1fd2FrZVxuIiAvKiBleHBlY3RzIG9sZCB2YWx1ZSBpbiAlZWR4ICovCiAJCSAgICAgIjE6XG4iCiAJCSAgICAgIiMgZW5kaW5nIF9fdXBfcmVhZFxuIgogCQkgICAgIDogIittIiAoc2VtLT5jb3VudCksICI9ZCIgKHRtcCkKLQkJICAgICA6ICJhIiAoc2VtKSwgIjEiICh0bXApCisJCSAgICAgOiAiYSIgKHNlbSksICIxIiAoLVJXU0VNX0FDVElWRV9SRUFEX0JJQVMpCiAJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CiB9CiAKQEAgLTIxNiwxMCArMjE0LDkgQEAKIAlyd3NlbV9jb3VudF90IHRtcDsKIAlhc20gdm9sYXRpbGUoIiMgYmVnaW5uaW5nIF9fdXBfd3JpdGVcblx0IgogCQkgICAgIExPQ0tfUFJFRklYICIgIHhhZGQgICAgICAlMSwoJTIpXG5cdCIKLQkJICAgICAvKiB0cmllcyB0byB0cmFuc2l0aW9uCi0JCQkweGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KLQkJICAgICAiICBqeiAgICAgICAxZlxuIgotCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iCisJCSAgICAgLyogc3VidHJhY3RzIDB4ZmZmZjAwMDEsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLworCQkgICAgICIgIGpucyAgICAgICAgMWZcblx0IgorCQkgICAgICIgIGNhbGwgY2FsbF9yd3NlbV93YWtlXG4iIC8qIGV4cGVjdHMgb2xkIHZhbHVlIGluICVlZHggKi8KIAkJICAgICAiMTpcblx0IgogCQkgICAgICIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCiAJCSAgICAgOiAiK20iIChzZW0tPmNvdW50KSwgIj1kIiAodG1wKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggZmIwYjE4Ny4uNDI0MDg3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAoMHgwMGZmZmZmZikKICNkZWZpbmUgQVJDSF9IQVNfU0dfQ0hBSU4KIAogI2VuZGlmIC8qIF9BU01fWDg2X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAppbmRleCA0ZGFiNzhlLi4yYjE2YTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCkBAIC0xLDYgKzEsMTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICogIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBBbmRpIEtsZWVuLCBTdVNFIExhYnMKKyAqLworCiAjaWZuZGVmIF9BU01fWDg2X1NUQUNLVFJBQ0VfSAogI2RlZmluZSBfQVNNX1g4Nl9TVEFDS1RSQUNFX0gKIAorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKwogZXh0ZXJuIGludCBrc3RhY2tfZGVwdGhfdG9fcHJpbnQ7CiAKIHN0cnVjdCB0aHJlYWRfaW5mbzsKQEAgLTQyLDQgKzQ5LDQ2IEBACiAJCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLAogCQljb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgKm9wcywgdm9pZCAqZGF0YSk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjZGVmaW5lIFNUQUNLU0xPVFNfUEVSX0xJTkUgOAorI2RlZmluZSBnZXRfYnAoYnApIGFzbSgibW92bCAlJWVicCwgJTAiIDogIj1yIiAoYnApIDopCisjZWxzZQorI2RlZmluZSBTVEFDS1NMT1RTX1BFUl9MSU5FIDQKKyNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdnEgJSVyYnAsICUwIiA6ICI9ciIgKGJwKSA6KQorI2VuZGlmCisKK2V4dGVybiB2b2lkCitzaG93X3RyYWNlX2xvZ19sdmwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJdW5zaWduZWQgbG9uZyAqc3RhY2ssIHVuc2lnbmVkIGxvbmcgYnAsIGNoYXIgKmxvZ19sdmwpOworCitleHRlcm4gdm9pZAorc2hvd19zdGFja19sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCXVuc2lnbmVkIGxvbmcgKnNwLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBjb2RlX2J5dGVzOworCisvKiBUaGUgZm9ybSBvZiB0aGUgdG9wIG9mIHRoZSBmcmFtZSBvbiB0aGUgc3RhY2sgKi8KK3N0cnVjdCBzdGFja19mcmFtZSB7CisJc3RydWN0IHN0YWNrX2ZyYW1lICpuZXh0X2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgcmV0dXJuX2FkZHJlc3M7Cit9OworCitzdHJ1Y3Qgc3RhY2tfZnJhbWVfaWEzMiB7CisgICAgdTMyIG5leHRfZnJhbWU7CisgICAgdTMyIHJldHVybl9hZGRyZXNzOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNhbGxlcl9mcmFtZV9wb2ludGVyKHZvaWQpCit7CisJc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZTsKKworCWdldF9icChmcmFtZSk7CisKKyNpZmRlZiBDT05GSUdfRlJBTUVfUE9JTlRFUgorCWZyYW1lID0gZnJhbWUtPm5leHRfZnJhbWU7CisjZW5kaWYKKworCXJldHVybiAodW5zaWduZWQgbG9uZylmcmFtZTsKK30KKwogI2VuZGlmIC8qIF9BU01fWDg2X1NUQUNLVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKaW5kZXggM2FkNDIxNy4uY2Y0ZTJlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCkBAIC04MCw0ICs4MCw3IEBACiAKIC8qIGlhMzIvaXBjMzIuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5czMyX2lwYyh1MzIsIGludCwgaW50LCBpbnQsIGNvbXBhdF91cHRyX3QsIHUzMik7CisKK2FzbWxpbmthZ2UgbG9uZyBzeXMzMl9mYW5vdGlmeV9tYXJrKGludCwgdW5zaWduZWQgaW50LCB1MzIsIHUzMiwgaW50LAorCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqKTsKICNlbmRpZiAvKiBfQVNNX1g4Nl9TWVNfSUEzMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCmluZGV4IGJlYjliNWYuLmI3NjZhNWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCkBAIC0zNDMsMTAgKzM0MywxMyBAQAogI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvCTMzNQogI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbgkzMzYKICNkZWZpbmUgX19OUl9yZWN2bW1zZwkJMzM3CisjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkzMzgKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCTMzOQorI2RlZmluZSBfX05SX3BybGltaXQ2NAkJMzQwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfc3lzY2FsbHMgMzM4CisjZGVmaW5lIE5SX3N5c2NhbGxzIDM0MQogCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCmluZGV4IGZmNDMwN2IuLjM2M2U5YjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC02NjMsNiArNjYzLDEyIEBACiBfX1NZU0NBTEwoX19OUl9wZXJmX2V2ZW50X29wZW4sIHN5c19wZXJmX2V2ZW50X29wZW4pCiAjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCQkJMjk5CiBfX1NZU0NBTEwoX19OUl9yZWN2bW1zZywgc3lzX3JlY3ZtbXNnKQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJCQkzMDAKK19fU1lTQ0FMTChfX05SX2Zhbm90aWZ5X2luaXQsIHN5c19mYW5vdGlmeV9pbml0KQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJCQkzMDEKK19fU1lTQ0FMTChfX05SX2Zhbm90aWZ5X21hcmssIHN5c19mYW5vdGlmeV9tYXJrKQorI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCQkzMDIKK19fU1lTQ0FMTChfX05SX3BybGltaXQ2NCwgc3lzX3BybGltaXQ2NCkKIAogI2lmbmRlZiBfX05PX1NUVUJTCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaAppbmRleCAwMThhMGE0Li5iZjVmN2QzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKQEAgLTExMiwxMyArMTEyLDkgQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1mbl90b19sb2NhbF9wZm4odW5zaWduZWQgbG9uZyBtZm4pCiB7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwogCXVuc2lnbmVkIGxvbmcgcGZuID0gbWZuX3RvX3BmbihtZm4pOwotCWlmICgocGZuIDwgbWF4X21hcG5yKQotCSAgICAmJiAheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkKLQkgICAgJiYgKGdldF9waHlzX3RvX21hY2hpbmUocGZuKSAhPSBtZm4pKQotCQlyZXR1cm4gbWF4X21hcG5yOyAvKiBmb3JjZSAhcGZuX3ZhbGlkKCkgKi8KLQkvKiBYWFggZml4bWU7IG5vdCB0cnVlIHdpdGggc3BhcnNlbWVtICovCisJaWYgKGdldF9waHlzX3RvX21hY2hpbmUocGZuKSAhPSBtZm4pCisJCXJldHVybiAtMTsgLyogZm9yY2UgIXBmbl92YWxpZCgpICovCiAJcmV0dXJuIHBmbjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3N3aW90bGIteGVuLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vc3dpb3RsYi14ZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmUxYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3N3aW90bGIteGVuLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfQVNNX1g4Nl9TV0lPVExCX1hFTl9ICisjZGVmaW5lIF9BU01fWDg2X1NXSU9UTEJfWEVOX0gKKworI2lmZGVmIENPTkZJR19TV0lPVExCX1hFTgorZXh0ZXJuIGludCB4ZW5fc3dpb3RsYjsKK2V4dGVybiBpbnQgX19pbml0IHBjaV94ZW5fc3dpb3RsYl9kZXRlY3Qodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcGNpX3hlbl9zd2lvdGxiX2luaXQodm9pZCk7CisjZWxzZQorI2RlZmluZSB4ZW5fc3dpb3RsYiAoMCkKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBwY2lfeGVuX3N3aW90bGJfZGV0ZWN0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGNpX3hlbl9zd2lvdGxiX2luaXQodm9pZCkgeyB9CisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X1NXSU9UTEJfWEVOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94c2F2ZS5oCmluZGV4IDMyYzM2NjYuLmM2Y2UyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hzYXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veHNhdmUuaApAQCAtMyw3ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisKKyNkZWZpbmUgWFNUQVRFX0NQVUlECQkweDAwMDAwMDBkCiAKICNkZWZpbmUgWFNUQVRFX0ZQCTB4MQogI2RlZmluZSBYU1RBVEVfU1NFCTB4MgpAQCAtMzIsMTAgKzMzLDggQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCB4c3RhdGVfc2l6ZTsKIGV4dGVybiB1NjQgcGNudHh0X21hc2s7Ci1leHRlcm4gc3RydWN0IHhzYXZlX3N0cnVjdCAqaW5pdF94c3RhdGVfYnVmOwogZXh0ZXJuIHU2NCB4c3RhdGVfZnhfc3dfYnl0ZXNbVVNFUl9YU1RBVEVfRlhfU1dfV09SRFNdOwogCi1leHRlcm4gdm9pZCB4c2F2ZV9jbnR4dF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgeHNhdmVfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVwZGF0ZV9yZWdzZXRfeHN0YXRlX2luZm8odW5zaWduZWQgaW50IHNpemUsIHU2NCB4c3RhdGVfbWFzayk7CiBleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwpAQCAtNjUsNiArNjQsMTYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHhzYXZlX3VzZXIoc3RydWN0IHhzYXZlX3N0cnVjdCBfX3VzZXIgKmJ1ZikKIHsKIAlpbnQgZXJyOworCisJLyoKKwkgKiBDbGVhciB0aGUgeHNhdmUgaGVhZGVyIGZpcnN0LCBzbyB0aGF0IHJlc2VydmVkIGZpZWxkcyBhcmUKKwkgKiBpbml0aWFsaXplZCB0byB6ZXJvLgorCSAqLworCWVyciA9IF9fY2xlYXJfdXNlcigmYnVmLT54c2F2ZV9oZHIsCisJCQkgICBzaXplb2Yoc3RydWN0IHhzYXZlX2hkcl9zdHJ1Y3QpKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiMTogLmJ5dGUgIiBSRVhfUFJFRklYICIweDBmLDB4YWUsMHgyN1xuIgogCQkJICAgICAiMjpcbiIKIAkJCSAgICAgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKQEAgLTExNywxMiArMTI2LDI1IEBACiAJCSAgICAgOiAgICJtZW1vcnkiKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHhzYXZlX3N0YXRlKHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKmZ4LCB1NjQgbWFzaykKK3sKKwl1MzIgbG1hc2sgPSBtYXNrOworCXUzMiBobWFzayA9IG1hc2sgPj4gMzI7CisKKwlhc20gdm9sYXRpbGUoIi5ieXRlICIgUkVYX1BSRUZJWCAiMHgwZiwweGFlLDB4Mjdcblx0IgorCQkgICAgIDogOiAiRCIgKGZ4KSwgIm0iICgqZngpLCAiYSIgKGxtYXNrKSwgImQiIChobWFzaykKKwkJICAgICA6ICAgIm1lbW9yeSIpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZnB1X3hzYXZlKHN0cnVjdCBmcHUgKmZwdSkKIHsKIAkvKiBUaGlzLCBob3dldmVyLCB3ZSBjYW4gd29yayBhcm91bmQgYnkgZm9yY2luZyB0aGUgY29tcGlsZXIgdG8gc2VsZWN0CiAJICAgYW4gYWRkcmVzc2luZyBtb2RlIHRoYXQgZG9lc24ndCByZXF1aXJlIGV4dGVuZGVkIHJlZ2lzdGVycy4gKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgIiBSRVhfUFJFRklYICIweDBmLDB4YWUsMHgyNyIKLQkJCSAgICAgOiA6ICJEIiAoJihmcHUtPnN0YXRlLT54c2F2ZSkpLAotCQkJCSAiYSIgKC0xKSwgImQiKC0xKSA6ICJtZW1vcnkiKTsKKwlhbHRlcm5hdGl2ZV9pbnB1dCgKKwkJIi5ieXRlICIgUkVYX1BSRUZJWCAiMHgwZiwweGFlLDB4MjciLAorCQkiLmJ5dGUgIiBSRVhfUFJFRklYICIweDBmLDB4YWUsMHgzNyIsCisJCVg4Nl9GRUFUVVJFX1hTQVZFT1BULAorCQlbZnhdICJEIiAoJmZwdS0+c3RhdGUtPnhzYXZlKSwgImEiICgtMSksICJkIiAoLTEpIDoKKwkJIm1lbW9yeSIpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZTc3YjIyMC4uMDkyNTY3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTA0LDYgKzEwNCw3IEBACiBzY3gyMDAteQkJCSs9IHNjeDIwMF8zMi5vCiAKIG9iai0kKENPTkZJR19PTFBDKQkJKz0gb2xwYy5vCitvYmotJChDT05GSUdfT0xQQ19PUEVORklSTVdBUkUpCSs9IG9scGNfb2Z3Lm8KIG9iai0kKENPTkZJR19YODZfTVJTVCkJCSs9IG1yc3QubwogCiBtaWNyb2NvZGUteQkJCQk6PSBtaWNyb2NvZGVfY29yZS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCmluZGV4IDU4MGI0ZTIuLjI4NTk1ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5TCkBAIC0xMDQsNyArMTA0LDcgQEAKIAltb3ZsCSVlYXgsICVlY3gKIAlvcmwJJWVkeCwgJWVjeAogCWp6CTFmCi0JbW92bAkkMHhjMDAwMDA4MCwgJWVjeAorCW1vdmwJJE1TUl9FRkVSLCAlZWN4CiAJd3Jtc3IKIDE6CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggNzAyMzc3My4uZjY1YWI4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTIxNCw2ICsyMTQsNyBAQAogCQl1OCAqaW5zdHIgPSBhLT5pbnN0cjsKIAkJQlVHX09OKGEtPnJlcGxhY2VtZW50bGVuID4gYS0+aW5zdHJsZW4pOwogCQlCVUdfT04oYS0+aW5zdHJsZW4gPiBzaXplb2YoaW5zbmJ1ZikpOworCQlCVUdfT04oYS0+Y3B1aWQgPj0gTkNBUElOVFMqMzIpOwogCQlpZiAoIWJvb3RfY3B1X2hhcyhhLT5jcHVpZCkpCiAJCQljb250aW51ZTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggMGQyMDI4Ni4uZmEwNDRlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMjU3Miw2ICsyNTcyLDExIEBACiBzdGF0aWMgaW50IGFtZF9pb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2FwKQogeworCXN3aXRjaCAoY2FwKSB7CisJY2FzZSBJT01NVV9DQVBfQ0FDSEVfQ09IRVJFTkNZOgorCQlyZXR1cm4gMTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYwOSw4ICsyNjE0LDcgQEAKIAogCXB0X2RvbWFpbi0+bW9kZSB8PSBQQUdFX01PREVfTk9ORTsKIAotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJaWYgKCFjaGVja19kZXZpY2UoJmRldi0+ZGV2KSkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggYTM1MzQ3NS4uOGRkNzc4MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtNDMsMTAgKzQzLDExIEBACiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FwYl90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKICNkZWZpbmUgQVBCVF9NQVNLCQkJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKICNkZWZpbmUgQVBCVF9TSElGVAkJCTIyCi0jZGVmaW5lIEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcJCTE1MAorI2RlZmluZSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HCQkxMTAKICNkZWZpbmUgQVBCVF9DTE9DS1NPVVJDRV9SQVRJTkcJCTI1MAogI2RlZmluZSBBUEJUX01JTl9ERUxUQV9VU0VDCQkyMDAKIApAQCAtODMsOCArODQsNiBAQAogCWNoYXIgbmFtZVsxMF07CiB9OwogCi1pbnQgZGlzYWJsZV9hcGJ0X3BlcmNwdSBfX2NwdWluaXRkYXRhOwotCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFwYnRfZGV2LCBjcHVfYXBidF9kZXYpOwogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTk1LDI5ICsxOTQsNiBAQAogfTsKIAogLyoKLSAqIGlmIHVzZXIgZG9lcyBub3Qgd2FudCB0byB1c2UgcGVyIENQVSBhcGIgdGltZXIsIGp1c3QgZ2l2ZSBpdCBhIGxvd2VyIHJhdGluZwotICogdGhhbiBsb2NhbCBhcGljIHRpbWVyIGFuZCBza2lwIHRoZSBsYXRlIHBlciBjcHUgdGltZXIgaW5pdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNldHVwX3g4Nl9tcnN0X3RpbWVyKGNoYXIgKmFyZykKLXsKLQlpZiAoIWFyZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3RyY21wKCJhcGJ0X29ubHkiLCBhcmcpID09IDApCi0JCWRpc2FibGVfYXBidF9wZXJjcHUgPSAwOwotCWVsc2UgaWYgKHN0cmNtcCgibGFwaWNfYW5kX2FwYnQiLCBhcmcpID09IDApCi0JCWRpc2FibGVfYXBidF9wZXJjcHUgPSAxOwotCWVsc2UgewotCQlwcl93YXJuaW5nKCJYODYgTVJTVCB0aW1lciBvcHRpb24gJXMgbm90IHJlY29nbmlzZWQiCi0JCQkgICAiIHVzZSB4ODZfbXJzdF90aW1lcj1hcGJ0X29ubHkgb3IgbGFwaWNfYW5kX2FwYnRcbiIsCi0JCQkgICBhcmcpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1fX3NldHVwKCJ4ODZfbXJzdF90aW1lcj0iLCBzZXR1cF94ODZfbXJzdF90aW1lcik7Ci0KLS8qCiAgKiBzdGFydCBjb3VudCBkb3duIGZyb20gMHhmZmZmX2ZmZmYuIHRoaXMgaXMgZG9uZSBieSB0b2dnbGluZyB0aGUgZW5hYmxlIGJpdAogICogdGhlbiBsb2FkIGluaXRpYWwgbG9hZCBjb3VudCB0byB+MC4KICAqLwpAQCAtMzM1LDcgKzMxMSw3IEBACiAJYWRldi0+bnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCW1lbWNweSgmYWRldi0+ZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2Yoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSkpOwogCi0JaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpIHsKKwlpZiAobXJzdF90aW1lcl9vcHRpb25zID09IE1SU1RfVElNRVJfTEFQSUNfQVBCVCkgewogCQlhcGJ0X2Nsb2NrZXZlbnQucmF0aW5nID0gQVBCVF9DTE9DS0VWRU5UX1JBVElORyAtIDEwMDsKIAkJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJmFkZXYtPmV2dDsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNsb2NrZXZlbnQgcmVnaXN0ZXJlZCBhcyBnbG9iYWxcbiIsCkBAIC00MjksNyArNDA1LDggQEAKIAogc3RhdGljIF9faW5pdCBpbnQgYXBidF9sYXRlX2luaXQodm9pZCkKIHsKLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSB8fCAhYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQpCisJaWYgKG1yc3RfdGltZXJfb3B0aW9ucyA9PSBNUlNUX1RJTUVSX0xBUElDX0FQQlQgfHwKKwkJIWFwYl90aW1lcl9ibG9ja19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAkvKiBUaGlzIG5vdGlmaWVyIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd29ya3F1ZXVlIGlzIHJlYWR5ICovCiAJaG90Y3B1X25vdGlmaWVyKGFwYnRfY3B1aHBfbm90aWZ5LCAtMjApOwpAQCAtNDUwLDYgKzQyNyw4IEBACiAJaW50IHRpbWVyX251bTsKIAlzdHJ1Y3QgYXBidF9kZXYgKmFkZXYgPSBFVlRfVE9fQVBCVF9ERVYoZXZ0KTsKIAorCUJVR19PTighYXBidF92aXJ0X2FkZHJlc3MpOworCiAJdGltZXJfbnVtID0gYWRldi0+bnVtOwogCXByX2RlYnVnKCIlcyBDUFUgJWQgdGltZXIgJWQgbW9kZT0lZFxuIiwKIAkJIF9fZnVuY19fLCBmaXJzdF9jcHUoKmV2dC0+Y3B1bWFzayksIHRpbWVyX251bSwgbW9kZSk7CkBAIC02NzYsNyArNjU1LDcgQEAKIAl9CiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGtlcm5lbCBjbWRsaW5lIGRpc2FibGUgYXBiIHRpbWVyLCBzbyB3ZSB3aWxsIHVzZSBsYXBpYyB0aW1lcnMgKi8KLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkgeworCWlmIChtcnN0X3RpbWVyX29wdGlvbnMgPT0gTVJTVF9USU1FUl9MQVBJQ19BUEJUKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImFwYnQ6IGRpc2FibGVkIHBlciBjcHUgdGltZXJcbiIpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwZXJ0dXJlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwppbmRleCBiNWQ4YjBiLi5hMmUwY2FmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBlcnR1cmVfNjQuYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJICogb3IgQklPUyBmb3JnZXQgdG8gcHV0IHRoYXQgaW4gcmVzZXJ2ZWQuCiAJICogdHJ5IHRvIHVwZGF0ZSBlODIwIHRvIG1ha2UgdGhhdCByZWdpb24gYXMgcmVzZXJ2ZWQuCiAJICovCi0JdTMyIGFncF9hcGVyX2Jhc2UgPSAwLCBhZ3BfYXBlcl9vcmRlciA9IDA7CisJdTMyIGFncF9hcGVyX29yZGVyID0gMDsKIAlpbnQgaSwgZml4LCBzbG90LCB2YWxpZF9hZ3AgPSAwOwogCXUzMiBjdGw7CiAJdTMyIGFwZXJfc2l6ZSA9IDAsIGFwZXJfb3JkZXIgPSAwLCBsYXN0X2FwZXJfb3JkZXIgPSAwOwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCXJldHVybjsKIAogCS8qIFRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZSBvZiBpb21tdV9ob2xlX2luaXQgKi8KLQlhZ3BfYXBlcl9iYXNlID0gc2VhcmNoX2FncF9icmlkZ2UoJmFncF9hcGVyX29yZGVyLCAmdmFsaWRfYWdwKTsKKwlzZWFyY2hfYWdwX2JyaWRnZSgmYWdwX2FwZXJfb3JkZXIsICZ2YWxpZF9hZ3ApOwogCiAJZml4ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXNfZGV2X3Jhbmdlcyk7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQppbmRleCA1NjVjMWJmLi45MTBmMjBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9NYWtlZmlsZQpAQCAtMiw3ICsyLDEyIEBACiAjIE1ha2VmaWxlIGZvciBsb2NhbCBBUElDIGRyaXZlcnMgYW5kIGZvciB0aGUgSU8tQVBJQyBjb2RlCiAjCiAKLW9iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gYXBpYy5vIGFwaWNfbm9vcC5vIHByb2JlXyQoQklUUykubyBpcGkubyBubWkubworb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkrPSBhcGljLm8gYXBpY19ub29wLm8gcHJvYmVfJChCSVRTKS5vIGlwaS5vCitpZm5lcSAoJChDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUikseSkKK29iai0kKENPTkZJR19YODZfTE9DQUxfQVBJQykJKz0gbm1pLm8KK2VuZGlmCitvYmotJChDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUikJKz0gaHdfbm1pLm8KKwogb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBpb19hcGljLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBpcGkubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCmluZGV4IDQyNWU1M2EuLjg1OTM1ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCkBAIC0xMjksNyArMTI5LDYgQEAKICAqIEdTSSBvdmVycmlkZSBmb3IgRVM3MDAwIHBsYXRmb3Jtcy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50CQkJYmFzZTsKIAogc3RhdGljIGludCBfX2NwdWluaXQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX21pcChpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGVpcCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2h3X25taS5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaHdfbm1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmZDY5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2h3X25taS5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIEhXIE5NSSB3YXRjaGRvZyBzdXBwb3J0CisgKgorICogIHN0YXJ0ZWQgYnkgRG9uIFppY2t1cywgQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4KKyAqCisgKiAgQXJjaCBzcGVjaWZpYyBjYWxscyB0byBzdXBwb3J0IE5NSSB3YXRjaGRvZworICoKKyAqICBCaXRzIGNvcGllZCBmcm9tIG9yaWdpbmFsIG5taS5jIGZpbGUKKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgorCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisvKiBGb3IgcmVsaWFiaWxpdHksIHdlJ3JlIHByZXBhcmVkIHRvIHdhc3RlIGJpdHMgaGVyZS4gKi8KK3N0YXRpYyBERUNMQVJFX0JJVE1BUChiYWNrdHJhY2VfbWFzaywgTlJfQ1BVUykgX19yZWFkX21vc3RseTsKKwordTY0IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCh2b2lkKQoreworCXJldHVybiAodTY0KShjcHVfa2h6KSAqIDEwMDAgKiA2MDsKK30KKworI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRwordm9pZCBhcmNoX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2Uodm9pZCkKK3sKKwlpbnQgaTsKKworCWNwdW1hc2tfY29weSh0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSwgY3B1X29ubGluZV9tYXNrKTsKKworCXByaW50ayhLRVJOX0lORk8gInNlbmRpbmcgTk1JIHRvIGFsbCBDUFVzOlxuIik7CisJYXBpYy0+c2VuZF9JUElfYWxsKE5NSV9WRUNUT1IpOworCisJLyogV2FpdCBmb3IgdXAgdG8gMTAgc2Vjb25kcyBmb3IgYWxsIENQVXMgdG8gZG8gdGhlIGJhY2t0cmFjZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMCAqIDEwMDA7IGkrKykgeworCQlpZiAoY3B1bWFza19lbXB0eSh0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSkpCisJCQlicmVhazsKKwkJbWRlbGF5KDEpOworCX0KK30KKworc3RhdGljIGludCBfX2twcm9iZXMKK2FyY2hfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQoreworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IF9fYXJnczsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIERJRV9OTUk6CisJY2FzZSBESUVfTk1JX0lQSToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmVncyA9IGFyZ3MtPnJlZ3M7CisKKwlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIHRvX2NwdW1hc2soYmFja3RyYWNlX21hc2spKSkgeworCQlzdGF0aWMgYXJjaF9zcGlubG9ja190IGxvY2sgPSBfX0FSQ0hfU1BJTl9MT0NLX1VOTE9DS0VEOworCisJCWFyY2hfc3Bpbl9sb2NrKCZsb2NrKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOworCQlzaG93X3JlZ3MocmVncyk7CisJCWR1bXBfc3RhY2soKTsKKwkJYXJjaF9zcGluX3VubG9jaygmbG9jayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpOworCQlyZXR1cm4gTk9USUZZX1NUT1A7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgX19yZWFkX21vc3RseSBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYmFja3RyYWNlX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsICAgICAgICAgID0gYXJjaF90cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlX2hhbmRsZXIsCisJLm5leHQgICAgICAgICAgICAgICAgICAgPSBOVUxMLAorCS5wcmlvcml0eSAgICAgICAgICAgICAgID0gMQorfTsKKworc3RhdGljIGludCBfX2luaXQgcmVnaXN0ZXJfdHJpZ2dlcl9hbGxfY3B1X2JhY2t0cmFjZSh2b2lkKQoreworCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmYmFja3RyYWNlX25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKHJlZ2lzdGVyX3RyaWdnZXJfYWxsX2NwdV9iYWNrdHJhY2UpOworI2VuZGlmCisKKy8qIFNUVUIgY2FsbHMgdG8gbWltaWMgb2xkIG5taV93YXRjaGRvZyBiZWhhdmlvdXIgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19YODZfTE9DQUxfQVBJQykKK3Vuc2lnbmVkIGludCBubWlfd2F0Y2hkb2cgPSBOTUlfTk9ORTsKK0VYUE9SVF9TWU1CT0wobm1pX3dhdGNoZG9nKTsKK3ZvaWQgYWNwaV9ubWlfZW5hYmxlKHZvaWQpIHsgcmV0dXJuOyB9Cit2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorYXRvbWljX3Qgbm1pX2FjdGl2ZSA9IEFUT01JQ19JTklUKDApOyAgICAgICAgICAgLyogb3Byb2ZpbGUgdXNlcyB0aGlzICovCitFWFBPUlRfU1lNQk9MKG5taV9hY3RpdmUpOworaW50IHVua25vd25fbm1pX3BhbmljOwordm9pZCBjcHVfbm1pX3NldF93ZF9lbmFibGVkKHZvaWQpIHsgcmV0dXJuOyB9Cit2b2lkIHN0b3BfYXBpY19ubWlfd2F0Y2hkb2codm9pZCAqdW51c2VkKSB7IHJldHVybjsgfQordm9pZCBzZXR1cF9hcGljX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpIHsgcmV0dXJuOyB9CitpbnQgX19pbml0IGNoZWNrX25taV93YXRjaGRvZyh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggZTQxZWQyNC4uNGRjMDA4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzM5Nyw3ICszMzk3LDcgQEAKIAogCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAotCXJlYWRfbXNpX21zZ19kZXNjKGRlc2MsICZtc2cpOworCWdldF9jYWNoZWRfbXNpX21zZ19kZXNjKGRlc2MsICZtc2cpOwogCiAJbXNnLmRhdGEgJj0gfk1TSV9EQVRBX1ZFQ1RPUl9NQVNLOwogCW1zZy5kYXRhIHw9IE1TSV9EQVRBX1ZFQ1RPUihjZmctPnZlY3Rvcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IDFlZGFmMTUuLmE0M2Y3MWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC00MDEsMTMgKzQwMSw2IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpbnQgcmMgPSAwOwogCi0JLyogY2hlY2sgZm9yIG90aGVyIHVzZXJzIGZpcnN0ICovCi0JaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm5taSIsIHJlZ3MsIHJlYXNvbiwgMiwgU0lHSU5UKQotCQkJPT0gTk9USUZZX1NUT1ApIHsKLQkJcmMgPSAxOwotCQl0b3VjaGVkID0gMTsKLQl9Ci0KIAlzdW0gPSBnZXRfdGltZXJfaXJxcyhjcHUpOwogCiAJaWYgKF9fZ2V0X2NwdV92YXIobm1pX3RvdWNoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggM2E3ODVkYS4uM2YwZWJlNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xMiwxMSArMTIsMTEgQEAKIG5vc3RhY2twIDo9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKQogQ0ZMQUdTX2NvbW1vbi5vCQk6PSAkKG5vc3RhY2twKQogCi1vYmoteQkJCTo9IGludGVsX2NhY2hlaW5mby5vIGFkZG9uX2NwdWlkX2ZlYXR1cmVzLm8KK29iai15CQkJOj0gaW50ZWxfY2FjaGVpbmZvLm8gc2NhdHRlcmVkLm8gdG9wb2xvZ3kubwogb2JqLXkJCQkrPSBwcm9jLm8gY2FwZmxhZ3MubyBwb3dlcmZsYWdzLm8gY29tbW9uLm8KIG9iai15CQkJKz0gdm13YXJlLm8gaHlwZXJ2aXNvci5vIHNjaGVkLm8gbXNoeXBlcnYubwogCi1vYmotJChDT05GSUdfWDg2XzMyKQkrPSBidWdzLm8gY21weGNoZy5vCitvYmotJChDT05GSUdfWDg2XzMyKQkrPSBidWdzLm8KIG9iai0kKENPTkZJR19YODZfNjQpCSs9IGJ1Z3NfNjQubwogCiBvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTCkJCSs9IGludGVsLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmYTU2OC4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqCVJvdXRpbmVzIHRvIGluZGVudGlmeSBhZGRpdGlvbmFsIGNwdSBmZWF0dXJlcyB0aGF0IGFyZSBzY2F0dGVyZWQgaW4KLSAqCWNwdWlkIHNwYWNlLgotICovCi0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0KLSNpbmNsdWRlIDxhc20vcGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0jaW5jbHVkZSA8YXNtL2FwaWMuaD4KLQotc3RydWN0IGNwdWlkX2JpdCB7Ci0JdTE2IGZlYXR1cmU7Ci0JdTggcmVnOwotCXU4IGJpdDsKLQl1MzIgbGV2ZWw7Ci19OwotCi1lbnVtIGNwdWlkX3JlZ3MgewotCUNSX0VBWCA9IDAsCi0JQ1JfRUNYLAotCUNSX0VEWCwKLQlDUl9FQlgKLX07Ci0KLXZvaWQgX19jcHVpbml0IGluaXRfc2NhdHRlcmVkX2NwdWlkX2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKLXsKLQl1MzIgbWF4X2xldmVsOwotCXUzMiByZWdzWzRdOwotCWNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgKmNiOwotCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgX19jcHVpbml0Y29uc3QgY3B1aWRfYml0c1tdID0gewotCQl7IFg4Nl9GRUFUVVJFX0lEQSwgICAJCUNSX0VBWCwgMSwgMHgwMDAwMDAwNiB9LAotCQl7IFg4Nl9GRUFUVVJFX0FSQVQsICAJCUNSX0VBWCwgMiwgMHgwMDAwMDAwNiB9LAotCQl7IFg4Nl9GRUFUVVJFX0FQRVJGTVBFUkYsCUNSX0VDWCwgMCwgMHgwMDAwMDAwNiB9LAotCQl7IFg4Nl9GRUFUVVJFX0NQQiwgICAJCUNSX0VEWCwgOSwgMHg4MDAwMDAwNyB9LAotCQl7IFg4Nl9GRUFUVVJFX05QVCwgICAJCUNSX0VEWCwgMCwgMHg4MDAwMDAwYSB9LAotCQl7IFg4Nl9GRUFUVVJFX0xCUlYsICAJCUNSX0VEWCwgMSwgMHg4MDAwMDAwYSB9LAotCQl7IFg4Nl9GRUFUVVJFX1NWTUwsICAJCUNSX0VEWCwgMiwgMHg4MDAwMDAwYSB9LAotCQl7IFg4Nl9GRUFUVVJFX05SSVBTLCAJCUNSX0VEWCwgMywgMHg4MDAwMDAwYSB9LAotCQl7IDAsIDAsIDAsIDAgfQotCX07Ci0KLQlmb3IgKGNiID0gY3B1aWRfYml0czsgY2ItPmZlYXR1cmU7IGNiKyspIHsKLQotCQkvKiBWZXJpZnkgdGhhdCB0aGUgbGV2ZWwgaXMgdmFsaWQgKi8KLQkJbWF4X2xldmVsID0gY3B1aWRfZWF4KGNiLT5sZXZlbCAmIDB4ZmZmZjAwMDApOwotCQlpZiAobWF4X2xldmVsIDwgY2ItPmxldmVsIHx8Ci0JCSAgICBtYXhfbGV2ZWwgPiAoY2ItPmxldmVsIHwgMHhmZmZmKSkKLQkJCWNvbnRpbnVlOwotCi0JCWNwdWlkKGNiLT5sZXZlbCwgJnJlZ3NbQ1JfRUFYXSwgJnJlZ3NbQ1JfRUJYXSwKLQkJCSZyZWdzW0NSX0VDWF0sICZyZWdzW0NSX0VEWF0pOwotCi0JCWlmIChyZWdzW2NiLT5yZWddICYgKDEgPDwgY2ItPmJpdCkpCi0JCQlzZXRfY3B1X2NhcChjLCBjYi0+ZmVhdHVyZSk7Ci0JfQotfQotCi0vKiBsZWFmIDB4YiBTTVQgbGV2ZWwgKi8KLSNkZWZpbmUgU01UX0xFVkVMCTAKLQotLyogbGVhZiAweGIgc3ViLWxlYWYgdHlwZXMgKi8KLSNkZWZpbmUgSU5WQUxJRF9UWVBFCTAKLSNkZWZpbmUgU01UX1RZUEUJMQotI2RlZmluZSBDT1JFX1RZUEUJMgotCi0jZGVmaW5lIExFQUZCX1NVQlRZUEUoZWN4KQkJKCgoZWN4KSA+PiA4KSAmIDB4ZmYpCi0jZGVmaW5lIEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpCSgoZWF4KSAmIDB4MWYpCi0jZGVmaW5lIExFVkVMX01BWF9TSUJMSU5HUyhlYngpCQkoKGVieCkgJiAweGZmZmYpCi0KLS8qCi0gKiBDaGVjayBmb3IgZXh0ZW5kZWQgdG9wb2xvZ3kgZW51bWVyYXRpb24gY3B1aWQgbGVhZiAweGIgYW5kIGlmIGl0Ci0gKiBleGlzdHMsIHVzZSBpdCBmb3IgcG9wdWxhdGluZyBpbml0aWFsX2FwaWNpZCBhbmQgY3B1IHRvcG9sb2d5Ci0gKiBkZXRlY3Rpb24uCi0gKi8KLXZvaWQgX19jcHVpbml0IGRldGVjdF9leHRlbmRlZF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHgsIHN1Yl9pbmRleDsKLQl1bnNpZ25lZCBpbnQgaHRfbWFza193aWR0aCwgY29yZV9wbHVzX21hc2tfd2lkdGg7Ci0JdW5zaWduZWQgaW50IGNvcmVfc2VsZWN0X21hc2ssIGNvcmVfbGV2ZWxfc2libGluZ3M7Ci0Jc3RhdGljIGJvb2wgcHJpbnRlZDsKLQotCWlmIChjLT5jcHVpZF9sZXZlbCA8IDB4YikKLQkJcmV0dXJuOwotCi0JY3B1aWRfY291bnQoMHhiLCBTTVRfTEVWRUwsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGUgY3B1aWQgbGVhZiAweGIgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCi0JICovCi0JaWYgKGVieCA9PSAwIHx8IChMRUFGQl9TVUJUWVBFKGVjeCkgIT0gU01UX1RZUEUpKQotCQlyZXR1cm47Ci0KLQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9YVE9QT0xPR1kpOwotCi0JLyoKLQkgKiBpbml0aWFsIGFwaWMgaWQsIHdoaWNoIGFsc28gcmVwcmVzZW50cyAzMi1iaXQgZXh0ZW5kZWQgeDJhcGljIGlkLgotCSAqLwotCWMtPmluaXRpYWxfYXBpY2lkID0gZWR4OwotCi0JLyoKLQkgKiBQb3B1bGF0ZSBIVCByZWxhdGVkIGluZm9ybWF0aW9uIGZyb20gc3ViLWxlYWYgbGV2ZWwgMC4KLQkgKi8KLQljb3JlX2xldmVsX3NpYmxpbmdzID0gc21wX251bV9zaWJsaW5ncyA9IExFVkVMX01BWF9TSUJMSU5HUyhlYngpOwotCWNvcmVfcGx1c19tYXNrX3dpZHRoID0gaHRfbWFza193aWR0aCA9IEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpOwotCi0Jc3ViX2luZGV4ID0gMTsKLQlkbyB7Ci0JCWNwdWlkX2NvdW50KDB4Yiwgc3ViX2luZGV4LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQotCQkvKgotCQkgKiBDaGVjayBmb3IgdGhlIENvcmUgdHlwZSBpbiB0aGUgaW1wbGVtZW50ZWQgc3ViIGxlYXZlcy4KLQkJICovCi0JCWlmIChMRUFGQl9TVUJUWVBFKGVjeCkgPT0gQ09SRV9UWVBFKSB7Ci0JCQljb3JlX2xldmVsX3NpYmxpbmdzID0gTEVWRUxfTUFYX1NJQkxJTkdTKGVieCk7Ci0JCQljb3JlX3BsdXNfbWFza193aWR0aCA9IEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzdWJfaW5kZXgrKzsKLQl9IHdoaWxlIChMRUFGQl9TVUJUWVBFKGVjeCkgIT0gSU5WQUxJRF9UWVBFKTsKLQotCWNvcmVfc2VsZWN0X21hc2sgPSAofigtMSA8PCBjb3JlX3BsdXNfbWFza193aWR0aCkpID4+IGh0X21hc2tfd2lkdGg7Ci0KLQljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBodF9tYXNrX3dpZHRoKQotCQkJCQkJICYgY29yZV9zZWxlY3RfbWFzazsKLQljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgY29yZV9wbHVzX21hc2tfd2lkdGgpOwotCS8qCi0JICogUmVpbml0IHRoZSBhcGljaWQsIG5vdyB0aGF0IHdlIGhhdmUgZXh0ZW5kZWQgaW5pdGlhbF9hcGljaWQuCi0JICovCi0JYy0+YXBpY2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIDApOwotCi0JYy0+eDg2X21heF9jb3JlcyA9IChjb3JlX2xldmVsX3NpYmxpbmdzIC8gc21wX251bV9zaWJsaW5ncyk7Ci0KLQlpZiAoIXByaW50ZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKLQkJICAgICAgIGMtPnBoeXNfcHJvY19pZCk7Ci0JCWlmIChjLT54ODZfbWF4X2NvcmVzID4gMSkKLQkJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFByb2Nlc3NvciBDb3JlIElEOiAlZFxuIiwKLQkJCSAgICAgICBjLT5jcHVfY29yZV9pZCk7Ci0JCXByaW50ZWQgPSAxOwotCX0KLQlyZXR1cm47Ci0jZW5kaWYKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IGU0ODU4MjUuLjYwYTU3YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJCX0KIAogCX0KLQlpZiAoYy0+eDg2ID09IDB4MTAgfHwgYy0+eDg2ID09IDB4MTEpCisJaWYgKGMtPng4NiA+PSAweDEwKQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7CiAKIAkvKiBnZXQgYXBpY2lkIGluc3RlYWQgb2YgaW5pdGlhbCBhcGljIGlkIGZyb20gY3B1aWQgKi8KQEAgLTUyOSw3ICs1MjksNyBAQAogCQkJbnVtX2NhY2hlX2xlYXZlcyA9IDM7CiAJfQogCi0JaWYgKGMtPng4NiA+PSAweGYgJiYgYy0+eDg2IDw9IDB4MTEpCisJaWYgKGMtPng4NiA+PSAweGYpCiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0s4KTsKIAogCWlmIChjcHVfaGFzX3htbTIpIHsKQEAgLTU0Niw3ICs1NDYsNyBAQAogCQlmYW0xMGhfY2hlY2tfZW5hYmxlX21tY2ZnKCk7CiAJfQogCi0JaWYgKGMgPT0gJmJvb3RfY3B1X2RhdGEgJiYgYy0+eDg2ID49IDB4ZiAmJiBjLT54ODYgPD0gMHgxMSkgeworCWlmIChjID09ICZib290X2NwdV9kYXRhICYmIGMtPng4NiA+PSAweGYpIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIHRzZWc7CiAKIAkJLyoKQEAgLTYwOSwzICs2MDksNzQgQEAKIH07CiAKIGNwdV9kZXZfcmVnaXN0ZXIoYW1kX2NwdV9kZXYpOworCisvKgorICogQU1EIGVycmF0YSBjaGVja2luZworICoKKyAqIEVycmF0YSBhcmUgZGVmaW5lZCBhcyBhcnJheXMgb2YgaW50cyB1c2luZyB0aGUgQU1EX0xFR0FDWV9FUlJBVFVNKCkgb3IKKyAqIEFNRF9PU1ZXX0VSUkFUVU0oKSBtYWNyb3MuIFRoZSBsYXR0ZXIgaXMgaW50ZW5kZWQgZm9yIG5ld2VyIGVycmF0YSB0aGF0CisgKiBoYXZlIGFuIE9TVlcgaWQgYXNzaWduZWQsIHdoaWNoIGl0IHRha2VzIGFzIGZpcnN0IGFyZ3VtZW50LiBCb3RoIHRha2UgYQorICogdmFyaWFibGUgbnVtYmVyIG9mIGZhbWlseS1zcGVjaWZpYyBtb2RlbC1zdGVwcGluZyByYW5nZXMgY3JlYXRlZCBieQorICogQU1EX01PREVMX1JBTkdFKCkuIEVhY2ggZXJyYXR1bSBhbHNvIGhhcyB0byBiZSBkZWNsYXJlZCBhcyBleHRlcm4gY29uc3QKKyAqIGludFtdIGluIGFyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oLgorICoKKyAqIEV4YW1wbGU6CisgKgorICogY29uc3QgaW50IGFtZF9lcnJhdHVtXzMxOVtdID0KKyAqCUFNRF9MRUdBQ1lfRVJSQVRVTShBTURfTU9ERUxfUkFOR0UoMHgxMCwgMHgyLCAweDEsIDB4NCwgMHgyKSwKKyAqCQkJICAgQU1EX01PREVMX1JBTkdFKDB4MTAsIDB4OCwgMHgwLCAweDgsIDB4MCksCisgKgkJCSAgIEFNRF9NT0RFTF9SQU5HRSgweDEwLCAweDksIDB4MCwgMHg5LCAweDApKTsKKyAqLworCitjb25zdCBpbnQgYW1kX2VycmF0dW1fNDAwW10gPQorCUFNRF9PU1ZXX0VSUkFUVU0oMSwgQU1EX01PREVMX1JBTkdFKDB4ZiwgMHg0MSwgMHgyLCAweGZmLCAweGYpLAorCQkJICAgIEFNRF9NT0RFTF9SQU5HRSgweDEwLCAweDIsIDB4MSwgMHhmZiwgMHhmKSk7CitFWFBPUlRfU1lNQk9MX0dQTChhbWRfZXJyYXR1bV80MDApOworCitjb25zdCBpbnQgYW1kX2VycmF0dW1fMzgzW10gPQorCUFNRF9PU1ZXX0VSUkFUVU0oMywgQU1EX01PREVMX1JBTkdFKDB4MTAsIDAsIDAsIDB4ZmYsIDB4ZikpOworRVhQT1JUX1NZTUJPTF9HUEwoYW1kX2VycmF0dW1fMzgzKTsKKworYm9vbCBjcHVfaGFzX2FtZF9lcnJhdHVtKGNvbnN0IGludCAqZXJyYXR1bSkKK3sKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmNwdSA9ICZjdXJyZW50X2NwdV9kYXRhOworCWludCBvc3Z3X2lkID0gKmVycmF0dW0rKzsKKwl1MzIgcmFuZ2U7CisJdTMyIG1zOworCisJLyoKKwkgKiBJZiBjYWxsZWQgZWFybHkgZW5vdWdoIHRoYXQgY3VycmVudF9jcHVfZGF0YSBoYXNuJ3QgYmVlbiBpbml0aWFsaXplZAorCSAqIHlldCwgZmFsbCBiYWNrIHRvIGJvb3RfY3B1X2RhdGEuCisJICovCisJaWYgKGNwdS0+eDg2ID09IDApCisJCWNwdSA9ICZib290X2NwdV9kYXRhOworCisJaWYgKGNwdS0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG9zdndfaWQgPj0gMCAmJiBvc3Z3X2lkIDwgNjU1MzYgJiYKKwkgICAgY3B1X2hhcyhjcHUsIFg4Nl9GRUFUVVJFX09TVlcpKSB7CisJCXU2NCBvc3Z3X2xlbjsKKworCQlyZG1zcmwoTVNSX0FNRDY0X09TVldfSURfTEVOR1RILCBvc3Z3X2xlbik7CisJCWlmIChvc3Z3X2lkIDwgb3N2d19sZW4pIHsKKwkJCXU2NCBvc3Z3X2JpdHM7CisKKwkJCXJkbXNybChNU1JfQU1ENjRfT1NWV19TVEFUVVMgKyAob3N2d19pZCA+PiA2KSwKKwkJCSAgICBvc3Z3X2JpdHMpOworCQkJcmV0dXJuIG9zdndfYml0cyAmICgxVUxMIDw8IChvc3Z3X2lkICYgMHgzZikpOworCQl9CisJfQorCisJLyogT1NWVyB1bmF2YWlsYWJsZSBvciBJRCB1bmtub3duLCBtYXRjaCBmYW1pbHktbW9kZWwtc3RlcHBpbmcgcmFuZ2UgKi8KKwltcyA9IChjcHUtPng4Nl9tb2RlbCA8PCA4KSB8IGNwdS0+eDg2X21hc2s7CisJd2hpbGUgKChyYW5nZSA9ICplcnJhdHVtKyspKQorCQlpZiAoKGNwdS0+eDg2ID09IEFNRF9NT0RFTF9SQU5HRV9GQU1JTFkocmFuZ2UpKSAmJgorCQkgICAgKG1zID49IEFNRF9NT0RFTF9SQU5HRV9TVEFSVChyYW5nZSkpICYmCisJCSAgICAobXMgPD0gQU1EX01PREVMX1JBTkdFX0VORChyYW5nZSkpKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNwdV9oYXNfYW1kX2VycmF0dW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jbXB4Y2hnLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NtcHhjaGcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA1NmNjZi4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NtcHhjaGcuYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBjbXB4Y2hnKigpIGZhbGxiYWNrcyBmb3IgQ1BVIG5vdCBzdXBwb3J0aW5nIHRoZXNlIGluc3RydWN0aW9ucwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKLXVuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTgodm9sYXRpbGUgdm9pZCAqcHRyLCB1OCBvbGQsIHU4IG5ldykKLXsKLQl1OCBwcmV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZXYgPSAqKHU4ICopcHRyOwotCWlmIChwcmV2ID09IG9sZCkKLQkJKih1OCAqKXB0ciA9IG5ldzsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIHByZXY7Ci19Ci1FWFBPUlRfU1lNQk9MKGNtcHhjaGdfMzg2X3U4KTsKLQotdW5zaWduZWQgbG9uZyBjbXB4Y2hnXzM4Nl91MTYodm9sYXRpbGUgdm9pZCAqcHRyLCB1MTYgb2xkLCB1MTYgbmV3KQotewotCXUxNiBwcmV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZXYgPSAqKHUxNiAqKXB0cjsKLQlpZiAocHJldiA9PSBvbGQpCi0JCSoodTE2ICopcHRyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gcHJldjsKLX0KLUVYUE9SVF9TWU1CT0woY21weGNoZ18zODZfdTE2KTsKLQotdW5zaWduZWQgbG9uZyBjbXB4Y2hnXzM4Nl91MzIodm9sYXRpbGUgdm9pZCAqcHRyLCB1MzIgb2xkLCB1MzIgbmV3KQotewotCXUzMiBwcmV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXByZXYgPSAqKHUzMiAqKXB0cjsKLQlpZiAocHJldiA9PSBvbGQpCi0JCSoodTMyICopcHRyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlyZXR1cm4gcHJldjsKLX0KLUVYUE9SVF9TWU1CT0woY21weGNoZ18zODZfdTMyKTsKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19YODZfQ01QWENIRzY0Ci11bnNpZ25lZCBsb25nIGxvbmcgY21weGNoZ180ODZfdTY0KHZvbGF0aWxlIHZvaWQgKnB0ciwgdTY0IG9sZCwgdTY0IG5ldykKLXsKLQl1NjQgcHJldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogUG9vciBtYW4ncyBjbXB4Y2hnOGIgZm9yIDM4NiBhbmQgNDg2LiBVbnN1aXRhYmxlIGZvciBTTVAgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcHJldiA9ICoodTY0ICopcHRyOwotCWlmIChwcmV2ID09IG9sZCkKLQkJKih1NjQgKilwdHIgPSBuZXc7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBwcmV2OwotfQotRVhQT1JUX1NZTUJPTChjbXB4Y2hnXzQ4Nl91NjQpOwotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDY4ZTRhNmYuLjQ5MGRhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtMTQwLDEwICsxNDAsMTggQEAKIHN0YXRpYyBpbnQgX19pbml0IHg4Nl94c2F2ZV9zZXR1cChjaGFyICpzKQogewogCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWFNBVkUpOworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWFNBVkVPUFQpOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm94c2F2ZSIsIHg4Nl94c2F2ZV9zZXR1cCk7CiAKK3N0YXRpYyBpbnQgX19pbml0IHg4Nl94c2F2ZW9wdF9zZXR1cChjaGFyICpzKQoreworCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWFNBVkVPUFQpOworCXJldHVybiAxOworfQorX19zZXR1cCgibm94c2F2ZW9wdCIsIHg4Nl94c2F2ZW9wdF9zZXR1cCk7CisKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBzdGF0aWMgaW50IGNhY2hlc2l6ZV9vdmVycmlkZSBfX2NwdWluaXRkYXRhID0gLTE7CiBzdGF0aWMgaW50IGRpc2FibGVfeDg2X3NlcmlhbF9uciBfX2NwdWluaXRkYXRhID0gMTsKQEAgLTU1MSw2ICs1NTksMTYgQEAKIAkJYy0+eDg2X2NhcGFiaWxpdHlbNF0gPSBleGNhcDsKIAl9CiAKKwkvKiBBZGRpdGlvbmFsIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDcgKi8KKwlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwNykgeworCQl1MzIgZWF4LCBlYngsIGVjeCwgZWR4OworCisJCWNwdWlkX2NvdW50KDB4MDAwMDAwMDcsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJCWlmIChlYXggPiAwKQorCQkJYy0+eDg2X2NhcGFiaWxpdHlbOV0gPSBlYng7CisJfQorCiAJLyogQU1ELWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4ODAwMDAwMDEgKi8KIAl4bHZsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID0geGx2bDsKQEAgLTU3Niw2ICs1OTQsNyBAQAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA3KQogCQljLT54ODZfcG93ZXIgPSBjcHVpZF9lZHgoMHg4MDAwMDAwNyk7CiAKKwlpbml0X3NjYXR0ZXJlZF9jcHVpZF9mZWF0dXJlcyhjKTsKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGlkZW50aWZ5X2NwdV93aXRob3V0X2NwdWlkKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTczMSw3ICs3NTAsNiBAQAogCiAJZ2V0X21vZGVsX25hbWUoYyk7IC8qIERlZmF1bHQgbmFtZSAqLwogCi0JaW5pdF9zY2F0dGVyZWRfY3B1aWRfZmVhdHVyZXMoYyk7CiAJZGV0ZWN0X25vcGwoYyk7CiB9CiAKQEAgLTExOTIsNiArMTIxMCw3IEBACiAJZGJnX3Jlc3RvcmVfZGVidWdfcmVncygpOwogCiAJZnB1X2luaXQoKTsKKwl4c2F2ZV9pbml0KCk7CiAKIAlyYXdfbG9jYWxfc2F2ZV9mbGFncyhrZXJuZWxfZWZsYWdzKTsKIApAQCAtMTI1MiwxMiArMTI3MSw3IEBACiAJY2xlYXJfdXNlZF9tYXRoKCk7CiAJbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQoKTsKIAotCS8qCi0JICogQm9vdCBwcm9jZXNzb3IgdG8gc2V0dXAgdGhlIEZQIGFuZCBleHRlbmRlZCBzdGF0ZSBjb250ZXh0IGluZm8uCi0JICovCi0JaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBib290X2NwdV9pZCkKLQkJaW5pdF90aHJlYWRfeHN0YXRlKCk7Ci0KKwlmcHVfaW5pdCgpOwogCXhzYXZlX2luaXQoKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggMzNlYWUyMC4uODk4YzJmNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0zNDcsOCArMzQ3LDggQEAKIAlyZXR1cm4gbDM7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdAotYW1kX2NoZWNrX2wzX2Rpc2FibGUoaW50IGluZGV4LCBzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZikKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBhbWRfY2hlY2tfbDNfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZiwKKwkJCQkJICAgaW50IGluZGV4KQogewogCWludCBub2RlOwogCkBAIC0zOTYsMjAgKzM5NiwzOSBAQAogCXRoaXNfbGVhZi0+bDMgPSBsM19jYWNoZXNbbm9kZV07CiB9CiAKKy8qCisgKiBjaGVjayB3aGV0aGVyIGEgc2xvdCB1c2VkIGZvciBkaXNhYmxpbmcgYW4gTDMgaW5kZXggaXMgb2NjdXBpZWQuCisgKiBAbDM6IEwzIGNhY2hlIGRlc2NyaXB0b3IKKyAqIEBzbG90OiBzbG90IG51bWJlciAoMC4uMSkKKyAqCisgKiBAcmV0dXJuczogdGhlIGRpc2FibGVkIGluZGV4IGlmIHVzZWQgb3IgbmVnYXRpdmUgdmFsdWUgaWYgc2xvdCBmcmVlLgorICovCitpbnQgYW1kX2dldF9sM19kaXNhYmxlX3Nsb3Qoc3RydWN0IGFtZF9sM19jYWNoZSAqbDMsIHVuc2lnbmVkIHNsb3QpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IDA7CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQobDMtPmRldiwgMHgxQkMgKyBzbG90ICogNCwgJnJlZyk7CisKKwkvKiBjaGVjayB3aGV0aGVyIHRoaXMgc2xvdCBpcyBhY3RpdmF0ZWQgYWxyZWFkeSAqLworCWlmIChyZWcgJiAoM1VMIDw8IDMwKSkKKwkJcmV0dXJuIHJlZyAmIDB4ZmZmOworCisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X2NhY2hlX2Rpc2FibGUoc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmLCBjaGFyICpidWYsCiAJCQkJICB1bnNpZ25lZCBpbnQgc2xvdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdGhpc19sZWFmLT5sMy0+ZGV2OwotCXVuc2lnbmVkIGludCByZWcgPSAwOworCWludCBpbmRleDsKIAogCWlmICghdGhpc19sZWFmLT5sMyB8fCAhdGhpc19sZWFmLT5sMy0+Y2FuX2Rpc2FibGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRUlOVkFMOworCWluZGV4ID0gYW1kX2dldF9sM19kaXNhYmxlX3Nsb3QodGhpc19sZWFmLT5sMywgc2xvdCk7CisJaWYgKGluZGV4ID49IDApCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpbmRleCk7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDFCQyArIHNsb3QgKiA0LCAmcmVnKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIHJlZyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiRlJFRVxuIik7CiB9CiAKICNkZWZpbmUgU0hPV19DQUNIRV9ESVNBQkxFKHNsb3QpCQkJCQlcCkBAIC00NTEsMzcgKzQ3MCw3NCBAQAogCX0KIH0KIAotCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9jYWNoZV9kaXNhYmxlKHN0cnVjdCBfY3B1aWQ0X2luZm8gKnRoaXNfbGVhZiwKLQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgc2xvdCkKKy8qCisgKiBkaXNhYmxlIGEgTDMgY2FjaGUgaW5kZXggYnkgdXNpbmcgYSBkaXNhYmxlLXNsb3QKKyAqCisgKiBAbDM6ICAgIEwzIGNhY2hlIGRlc2NyaXB0b3IKKyAqIEBjcHU6ICAgQSBDUFUgb24gdGhlIG5vZGUgY29udGFpbmluZyB0aGUgTDMgY2FjaGUKKyAqIEBzbG90OiAgc2xvdCBudW1iZXIgKDAuLjEpCisgKiBAaW5kZXg6IGluZGV4IHRvIGRpc2FibGUKKyAqCisgKiBAcmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIHN0YXR1cyBvbiBmYWlsdXJlCisgKi8KK2ludCBhbWRfc2V0X2wzX2Rpc2FibGVfc2xvdChzdHJ1Y3QgYW1kX2wzX2NhY2hlICpsMywgaW50IGNwdSwgdW5zaWduZWQgc2xvdCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGluZGV4KQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0aGlzX2xlYWYtPmwzLT5kZXY7Ci0JaW50IGNwdSA9IGNwdW1hc2tfZmlyc3QodG9fY3B1bWFzayh0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKSk7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSAwOworCWludCByZXQgPSAwOwogCiAjZGVmaW5lIFNVQkNBQ0hFX01BU0sJKDNVTCA8PCAyMCkKICNkZWZpbmUgU1VCQ0FDSEVfSU5ERVgJMHhmZmYKIAotCWlmICghdGhpc19sZWFmLT5sMyB8fCAhdGhpc19sZWFmLT5sMy0+Y2FuX2Rpc2FibGUpCisJLyoKKwkgKiBjaGVjayB3aGV0aGVyIHRoaXMgc2xvdCBpcyBhbHJlYWR5IHVzZWQgb3IKKwkgKiB0aGUgaW5kZXggaXMgYWxyZWFkeSBkaXNhYmxlZAorCSAqLworCXJldCA9IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KGwzLCBzbG90KTsKKwlpZiAocmV0ID49IDApCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyoKKwkgKiBjaGVjayB3aGV0aGVyIHRoZSBvdGhlciBzbG90IGhhcyBkaXNhYmxlZCB0aGUKKwkgKiBzYW1lIGluZGV4IGFscmVhZHkKKwkgKi8KKwlpZiAoaW5kZXggPT0gYW1kX2dldF9sM19kaXNhYmxlX3Nsb3QobDMsICFzbG90KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBkbyBub3QgYWxsb3cgd3JpdGVzIG91dHNpZGUgb2YgYWxsb3dlZCBiaXRzICovCisJaWYgKChpbmRleCAmIH4oU1VCQ0FDSEVfTUFTSyB8IFNVQkNBQ0hFX0lOREVYKSkgfHwKKwkgICAgKChpbmRleCAmIFNVQkNBQ0hFX0lOREVYKSA+IGwzLT5pbmRpY2VzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhbWRfbDNfZGlzYWJsZV9pbmRleChsMywgY3B1LCBzbG90LCBpbmRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfY2FjaGVfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCisJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgIHVuc2lnbmVkIGludCBzbG90KQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gMDsKKwlpbnQgY3B1LCBlcnIgPSAwOworCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKCFkZXYpCisJaWYgKCF0aGlzX2xlYWYtPmwzIHx8ICF0aGlzX2xlYWYtPmwzLT5jYW5fZGlzYWJsZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwljcHUgPSBjcHVtYXNrX2ZpcnN0KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCkpOworCiAJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBkbyBub3QgYWxsb3cgd3JpdGVzIG91dHNpZGUgb2YgYWxsb3dlZCBiaXRzICovCi0JaWYgKCh2YWwgJiB+KFNVQkNBQ0hFX01BU0sgfCBTVUJDQUNIRV9JTkRFWCkpIHx8Ci0JICAgICgodmFsICYgU1VCQ0FDSEVfSU5ERVgpID4gdGhpc19sZWFmLT5sMy0+aW5kaWNlcykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYW1kX2wzX2Rpc2FibGVfaW5kZXgodGhpc19sZWFmLT5sMywgY3B1LCBzbG90LCB2YWwpOwotCisJZXJyID0gYW1kX3NldF9sM19kaXNhYmxlX3Nsb3QodGhpc19sZWFmLT5sMywgY3B1LCBzbG90LCB2YWwpOworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRUVYSVNUKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTDMgZGlzYWJsZSBzbG90ICVkIGluIHVzZSFcbiIsCisJCQkJCSAgICBzbG90KTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC01MDIsNyArNTU4LDcgQEAKIAogI2Vsc2UJLyogQ09ORklHX0NQVV9TVVBfQU1EICovCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQKLWFtZF9jaGVja19sM19kaXNhYmxlKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mb19yZWdzICp0aGlzX2xlYWYpCithbWRfY2hlY2tfbDNfZGlzYWJsZShzdHJ1Y3QgX2NwdWlkNF9pbmZvX3JlZ3MgKnRoaXNfbGVhZiwgaW50IGluZGV4KQogewogfTsKICNlbmRpZiAvKiBDT05GSUdfQ1BVX1NVUF9BTUQgKi8KQEAgLTUxOCw3ICs1NzQsNyBAQAogCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgewogCQlhbWRfY3B1aWQ0KGluZGV4LCAmZWF4LCAmZWJ4LCAmZWN4KTsKLQkJYW1kX2NoZWNrX2wzX2Rpc2FibGUoaW5kZXgsIHRoaXNfbGVhZik7CisJCWFtZF9jaGVja19sM19kaXNhYmxlKHRoaXNfbGVhZiwgaW5kZXgpOwogCX0gZWxzZSB7CiAJCWNwdWlkX2NvdW50KDQsIGluZGV4LCAmZWF4LmZ1bGwsICZlYnguZnVsbCwgJmVjeC5mdWxsLCAmZWR4KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDE5NzBlZjkuLmVkNDE1NjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC01MSw3ICs1MSw3IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKG1jZV9yZWFkX211dGV4KTsKIAogI2RlZmluZSByY3VfZGVyZWZlcmVuY2VfY2hlY2tfbWNlKHApIFwKLQlyY3VfZGVyZWZlcmVuY2VfY2hlY2soKHApLCBcCisJcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKChwKSwgXAogCQkJICAgICAgcmN1X3JlYWRfbG9ja19zY2hlZF9oZWxkKCkgfHwgXAogCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZtY2VfcmVhZF9tdXRleCkpCiAKQEAgLTEwNyw4ICsxMDcsOCBAQAogc3RhdGljIGludCBkZWZhdWx0X2RlY29kZV9tY2Uoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgICAgdm9pZCAqZGF0YSkKIHsKLQlwcl9lbWVyZygiTm8gaHVtYW4gcmVhZGFibGUgTUNFIGRlY29kaW5nIHN1cHBvcnQgb24gdGhpcyBDUFUgdHlwZS5cbiIpOwotCXByX2VtZXJnKCJSdW4gdGhlIG1lc3NhZ2UgdGhyb3VnaCAnbWNlbG9nIC0tYXNjaWknIHRvIGRlY29kZS5cbiIpOworCXByX2VtZXJnKEhXX0VSUiAiTm8gaHVtYW4gcmVhZGFibGUgTUNFIGRlY29kaW5nIHN1cHBvcnQgb24gdGhpcyBDUFUgdHlwZS5cbiIpOworCXByX2VtZXJnKEhXX0VSUiAiUnVuIHRoZSBtZXNzYWdlIHRocm91Z2ggJ21jZWxvZyAtLWFzY2lpJyB0byBkZWNvZGUuXG4iKTsKIAogCXJldHVybiBOT1RJRllfU1RPUDsKIH0KQEAgLTIxMSwxMSArMjExLDExIEBACiAKIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewotCXByX2VtZXJnKCJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMTZMeCBCYW5rICVkOiAlMDE2THhcbiIsCisJcHJfZW1lcmcoSFdfRVJSICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlTHggQmFuayAlZDogJTAxNkx4XG4iLAogCSAgICAgICBtLT5leHRjcHUsIG0tPm1jZ3N0YXR1cywgbS0+YmFuaywgbS0+c3RhdHVzKTsKIAogCWlmIChtLT5pcCkgewotCQlwcl9lbWVyZygiUklQJXMgJTAyeDo8JTAxNkx4PiAiLAorCQlwcl9lbWVyZyhIV19FUlIgIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKIAkJCSEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAogCQkJCW0tPmNzLCBtLT5pcCk7CiAKQEAgLTIyNCwxNCArMjI0LDE0IEBACiAJCXByX2NvbnQoIlxuIik7CiAJfQogCi0JcHJfZW1lcmcoIlRTQyAlbGx4ICIsIG0tPnRzYyk7CisJcHJfZW1lcmcoSFdfRVJSICJUU0MgJWxseCAiLCBtLT50c2MpOwogCWlmIChtLT5hZGRyKQogCQlwcl9jb250KCJBRERSICVsbHggIiwgbS0+YWRkcik7CiAJaWYgKG0tPm1pc2MpCiAJCXByX2NvbnQoIk1JU0MgJWxseCAiLCBtLT5taXNjKTsKIAogCXByX2NvbnQoIlxuIik7Ci0JcHJfZW1lcmcoIlBST0NFU1NPUiAldToleCBUSU1FICVsbHUgU09DS0VUICV1IEFQSUMgJXhcbiIsCisJcHJfZW1lcmcoSFdfRVJSICJQUk9DRVNTT1IgJXU6JXggVElNRSAlbGx1IFNPQ0tFVCAldSBBUElDICV4XG4iLAogCQltLT5jcHV2ZW5kb3IsIG0tPmNwdWlkLCBtLT50aW1lLCBtLT5zb2NrZXRpZCwgbS0+YXBpY2lkKTsKIAogCS8qCkBAIC0yNDEsMTYgKzI0MSw2IEBACiAJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgbSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50X21jZV9oZWFkKHZvaWQpCi17Ci0JcHJfZW1lcmcoIlxuSEFSRFdBUkUgRVJST1JcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQotewotCXByX2VtZXJnKCJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iKTsKLX0KLQogI2RlZmluZSBQQU5JQ19USU1FT1VUIDUgLyogNSBzZWNvbmRzICovCiAKIHN0YXRpYyBhdG9taWNfdCBtY2VfcGFuaWNlZDsKQEAgLTI5MSw3ICsyODEsNiBAQAogCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJm1jZV9mYWtlX3BhbmljZWQpID4gMSkKIAkJCXJldHVybjsKIAl9Ci0JcHJpbnRfbWNlX2hlYWQoKTsKIAkvKiBGaXJzdCBwcmludCBjb3JyZWN0ZWQgb25lcyB0aGF0IGFyZSBzdGlsbCB1bmxvZ2dlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBNQ0VfTE9HX0xFTjsgaSsrKSB7CiAJCXN0cnVjdCBtY2UgKm0gPSAmbWNlbG9nLmVudHJ5W2ldOwpAQCAtMzIyLDE2ICszMTEsMTUgQEAKIAkJCWFwZWlfZXJyID0gYXBlaV93cml0ZV9tY2UoZmluYWwpOwogCX0KIAlpZiAoY3B1X21pc3NpbmcpCi0JCXByaW50ayhLRVJOX0VNRVJHICJTb21lIENQVXMgZGlkbid0IGFuc3dlciBpbiBzeW5jaHJvbml6YXRpb25cbiIpOwotCXByaW50X21jZV90YWlsKCk7CisJCXByX2VtZXJnKEhXX0VSUiAiU29tZSBDUFVzIGRpZG4ndCBhbnN3ZXIgaW4gc3luY2hyb25pemF0aW9uXG4iKTsKIAlpZiAoZXhwKQotCQlwcmludGsoS0VSTl9FTUVSRyAiTWFjaGluZSBjaGVjazogJXNcbiIsIGV4cCk7CisJCXByX2VtZXJnKEhXX0VSUiAiTWFjaGluZSBjaGVjazogJXNcbiIsIGV4cCk7CiAJaWYgKCFmYWtlX3BhbmljKSB7CiAJCWlmIChwYW5pY190aW1lb3V0ID09IDApCiAJCQlwYW5pY190aW1lb3V0ID0gbWNlX3BhbmljX3RpbWVvdXQ7CiAJCXBhbmljKG1zZyk7CiAJfSBlbHNlCi0JCXByaW50ayhLRVJOX0VNRVJHICJGYWtlIGtlcm5lbCBwYW5pYzogJXNcbiIsIG1zZyk7CisJCXByX2VtZXJnKEhXX0VSUiAiRmFrZSBrZXJuZWwgcGFuaWM6ICVzXG4iLCBtc2cpOwogfQogCiAvKiBTdXBwb3J0IGNvZGUgZm9yIHNvZnR3YXJlIGVycm9yIGluamVjdGlvbiAqLwpAQCAtMTIyMSw3ICsxMjA5LDcgQEAKIAkJCXNjaGVkdWxlX3dvcmsoJm1jZV90cmlnZ2VyX3dvcmspOwogCiAJCWlmIChfX3JhdGVsaW1pdCgmcmF0ZWxpbWl0KSkKLQkJCXByaW50ayhLRVJOX0lORk8gIk1hY2hpbmUgY2hlY2sgZXZlbnRzIGxvZ2dlZFxuIik7CisJCQlwcl9pbmZvKEhXX0VSUiAiTWFjaGluZSBjaGVjayBldmVudHMgbG9nZ2VkXG4iKTsKIAogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCmluZGV4IDYyYjQ4ZTQuLjZmY2QwOTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCkBAIC05NSwxOSArOTUsMjAgQEAKIAkJcmRtc3JsKE1TUl9JQTMyX01DeF9DVEwyKGkpLCB2YWwpOwogCiAJCS8qIEFscmVhZHkgb3duZWQgYnkgc29tZW9uZSBlbHNlPyAqLwotCQlpZiAodmFsICYgQ01DSV9FTikgeworCQlpZiAodmFsICYgTUNJX0NUTDJfQ01DSV9FTikgewogCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpLCBvd25lZCkgJiYgIWJvb3QpCiAJCQkJcHJpbnRfdXBkYXRlKCJTSEQiLCAmaGRyLCBpKTsKIAkJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJdmFsIHw9IENNQ0lfRU4gfCBDTUNJX1RIUkVTSE9MRDsKKwkJdmFsICY9IH5NQ0lfQ1RMMl9DTUNJX1RIUkVTSE9MRF9NQVNLOworCQl2YWwgfD0gTUNJX0NUTDJfQ01DSV9FTiB8IENNQ0lfVEhSRVNIT0xEOwogCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTDIoaSksIHZhbCk7CiAJCXJkbXNybChNU1JfSUEzMl9NQ3hfQ1RMMihpKSwgdmFsKTsKIAogCQkvKiBEaWQgdGhlIGVuYWJsZSBiaXQgc3RpY2s/IC0tIHRoZSBiYW5rIHN1cHBvcnRzIENNQ0kgKi8KLQkJaWYgKHZhbCAmIENNQ0lfRU4pIHsKKwkJaWYgKHZhbCAmIE1DSV9DVEwyX0NNQ0lfRU4pIHsKIAkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBvd25lZCkgJiYgIWJvb3QpCiAJCQkJcHJpbnRfdXBkYXRlKCJDTUNJIiwgJmhkciwgaSk7CiAJCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CkBAIC0xNTUsNyArMTU2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQkvKiBEaXNhYmxlIENNQ0kgKi8KIAkJcmRtc3JsKE1TUl9JQTMyX01DeF9DVEwyKGkpLCB2YWwpOwotCQl2YWwgJj0gfihDTUNJX0VOfENNQ0lfVEhSRVNIT0xEX01BU0spOworCQl2YWwgJj0gfihNQ0lfQ1RMMl9DTUNJX0VOfE1DSV9DVEwyX0NNQ0lfVEhSRVNIT0xEX01BU0spOwogCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTDIoaSksIHZhbCk7CiAJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggZTFhMGEzYi4uYzJhOGIyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC0zNCwxNSArMzQsMjUgQEAKIC8qIEhvdyBsb25nIHRvIHdhaXQgYmV0d2VlbiByZXBvcnRpbmcgdGhlcm1hbCBldmVudHMgKi8KICNkZWZpbmUgQ0hFQ0tfSU5URVJWQUwJCSgzMDAgKiBIWikKIAotLyoKLSAqIEN1cnJlbnQgdGhlcm1hbCB0aHJvdHRsaW5nIHN0YXRlOgotICovCi1zdHJ1Y3QgdGhlcm1hbF9zdGF0ZSB7Ci0JYm9vbAkJCWlzX3Rocm90dGxlZDsKKyNkZWZpbmUgVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5UCTAKKyNkZWZpbmUgUE9XRVJfTElNSVRfRVZFTlQJCTEKIAorLyoKKyAqIEN1cnJlbnQgdGhlcm1hbCBldmVudCBzdGF0ZToKKyAqLworc3RydWN0IF90aGVybWFsX3N0YXRlIHsKKwlib29sCQkJbmV3X2V2ZW50OworCWludAkJCWV2ZW50OwogCXU2NAkJCW5leHRfY2hlY2s7Ci0JdW5zaWduZWQgbG9uZwkJdGhyb3R0bGVfY291bnQ7Ci0JdW5zaWduZWQgbG9uZwkJbGFzdF90aHJvdHRsZV9jb3VudDsKKwl1bnNpZ25lZCBsb25nCQljb3VudDsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X2NvdW50OworfTsKKworc3RydWN0IHRoZXJtYWxfc3RhdGUgeworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBjb3JlX3Rocm90dGxlOworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBjb3JlX3Bvd2VyX2xpbWl0OworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBwYWNrYWdlX3Rocm90dGxlOworCXN0cnVjdCBfdGhlcm1hbF9zdGF0ZSBwYWNrYWdlX3Bvd2VyX2xpbWl0OwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aGVybWFsX3N0YXRlLCB0aGVybWFsX3N0YXRlKTsKQEAgLTUzLDExICs2MywxMyBAQAogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKF9uYW1lKQkJCQlcCi0Jc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI19uYW1lLCBOVUxMKQorCXN0YXRpYyBTWVNERVZfQVRUUihfbmFtZSwgMDQ0NCwJCQkJCVwKKwkJCSAgIHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjX25hbWUsCQlcCisJCQkJICAgTlVMTCkJCQkJXAogCi0jZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKG5hbWUpCQkJXAorI2RlZmluZSBkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhldmVudCwgbmFtZSkJCVwKIAkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHRoZXJtX3Rocm90X3N5c2Rldl9zaG93XyMjbmFtZSgJCQkJXAorc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNldmVudCMjXyMjbmFtZSgJCVwKIAkJCXN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCQkJCVwKIAkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAkJCVwKIAkJCWNoYXIgKmJ1ZikJCQkJCVwKQEAgLTY2LDMwICs3OCw0MiBAQAogCXNzaXplX3QgcmV0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJcHJlZW1wdF9kaXNhYmxlKCk7CS8qIENQVSBob3RwbHVnICovCQkJXAotCWlmIChjcHVfb25saW5lKGNwdSkpCQkJCQkJXAorCWlmIChjcHVfb25saW5lKGNwdSkpIHsJCQkJCQlcCiAJCXJldCA9IHNwcmludGYoYnVmLCAiJWx1XG4iLAkJCQlcCi0JCQkgICAgICBwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIGNwdSkubmFtZSk7CVwKLQllbHNlCQkJCQkJCQlcCisJCQkgICAgICBwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIGNwdSkuZXZlbnQubmFtZSk7CVwKKwl9IGVsc2UJCQkJCQkJCVwKIAkJcmV0ID0gMDsJCQkJCQlcCiAJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCiAJCQkJCQkJCQlcCiAJcmV0dXJuIHJldDsJCQkJCQkJXAogfQogCi1kZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyh0aHJvdHRsZV9jb3VudCk7Ci1kZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyh0aHJvdHRsZV9jb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhjb3JlX3Rocm90dGxlLCBjb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhjb3JlX3Rocm90dGxlX2NvdW50KTsKKworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9zaG93X2Z1bmMoY29yZV9wb3dlcl9saW1pdCwgY291bnQpOworZGVmaW5lX3RoZXJtX3Rocm90X3N5c2Rldl9vbmVfcm8oY29yZV9wb3dlcl9saW1pdF9jb3VudCk7CisKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKHBhY2thZ2VfdGhyb3R0bGUsIGNvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKHBhY2thZ2VfdGhyb3R0bGVfY291bnQpOworCitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfZnVuYyhwYWNrYWdlX3Bvd2VyX2xpbWl0LCBjb3VudCk7CitkZWZpbmVfdGhlcm1fdGhyb3Rfc3lzZGV2X29uZV9ybyhwYWNrYWdlX3Bvd2VyX2xpbWl0X2NvdW50KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRoZXJtYWxfdGhyb3R0bGVfYXR0cnNbXSA9IHsKLQkmYXR0cl90aHJvdHRsZV9jb3VudC5hdHRyLAorCSZhdHRyX2NvcmVfdGhyb3R0bGVfY291bnQuYXR0ciwKIAlOVUxMCiB9OwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0aGVybWFsX3Rocm90dGxlX2F0dHJfZ3JvdXAgPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0aGVybWFsX2F0dHJfZ3JvdXAgPSB7CiAJLmF0dHJzCT0gdGhlcm1hbF90aHJvdHRsZV9hdHRycywKIAkubmFtZQk9ICJ0aGVybWFsX3Rocm90dGxlIgogfTsKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KIAorI2RlZmluZSBDT1JFX0xFVkVMCTAKKyNkZWZpbmUgUEFDS0FHRV9MRVZFTAkxCisKIC8qKioKICAqIHRoZXJtX3Rocm90X3Byb2Nlc3MgLSBQcm9jZXNzIHRoZXJtYWwgdGhyb3R0bGluZyBldmVudCBmcm9tIGludGVycnVwdAogICogQGN1cnI6IFdoZXRoZXIgdGhlIGNvbmRpdGlvbiBpcyBjdXJyZW50IG9yIG5vdCAoYm9vbGVhbiksIHNpbmNlIHRoZQpAQCAtMTA2LDM5ICsxMzAsNzAgQEAKICAqICAgICAgICAgIDEgOiBFdmVudCBzaG91bGQgYmUgbG9nZ2VkIGZ1cnRoZXIsIGFuZCBhIG1lc3NhZ2UgaGFzIGJlZW4KICAqICAgICAgICAgICAgICBwcmludGVkIHRvIHRoZSBzeXNsb2cuCiAgKi8KLXN0YXRpYyBpbnQgdGhlcm1fdGhyb3RfcHJvY2Vzcyhib29sIGlzX3Rocm90dGxlZCkKK3N0YXRpYyBpbnQgdGhlcm1fdGhyb3RfcHJvY2Vzcyhib29sIG5ld19ldmVudCwgaW50IGV2ZW50LCBpbnQgbGV2ZWwpCiB7Ci0Jc3RydWN0IHRoZXJtYWxfc3RhdGUgKnN0YXRlOwotCXVuc2lnbmVkIGludCB0aGlzX2NwdTsKLQlib29sIHdhc190aHJvdHRsZWQ7CisJc3RydWN0IF90aGVybWFsX3N0YXRlICpzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJYm9vbCBvbGRfZXZlbnQ7CiAJdTY0IG5vdzsKKwlzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSAqcHN0YXRlID0gJnBlcl9jcHUodGhlcm1hbF9zdGF0ZSwgdGhpc19jcHUpOwogCi0JdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJbm93ID0gZ2V0X2ppZmZpZXNfNjQoKTsKLQlzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKKwlpZiAobGV2ZWwgPT0gQ09SRV9MRVZFTCkgeworCQlpZiAoZXZlbnQgPT0gVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5UKQorCQkJc3RhdGUgPSAmcHN0YXRlLT5jb3JlX3Rocm90dGxlOworCQllbHNlIGlmIChldmVudCA9PSBQT1dFUl9MSU1JVF9FVkVOVCkKKwkJCXN0YXRlID0gJnBzdGF0ZS0+Y29yZV9wb3dlcl9saW1pdDsKKwkJZWxzZQorCQkJIHJldHVybiAwOworCX0gZWxzZSBpZiAobGV2ZWwgPT0gUEFDS0FHRV9MRVZFTCkgeworCQlpZiAoZXZlbnQgPT0gVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5UKQorCQkJc3RhdGUgPSAmcHN0YXRlLT5wYWNrYWdlX3Rocm90dGxlOworCQllbHNlIGlmIChldmVudCA9PSBQT1dFUl9MSU1JVF9FVkVOVCkKKwkJCXN0YXRlID0gJnBzdGF0ZS0+cGFja2FnZV9wb3dlcl9saW1pdDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAwOwogCi0Jd2FzX3Rocm90dGxlZCA9IHN0YXRlLT5pc190aHJvdHRsZWQ7Ci0Jc3RhdGUtPmlzX3Rocm90dGxlZCA9IGlzX3Rocm90dGxlZDsKKwlvbGRfZXZlbnQgPSBzdGF0ZS0+bmV3X2V2ZW50OworCXN0YXRlLT5uZXdfZXZlbnQgPSBuZXdfZXZlbnQ7CiAKLQlpZiAoaXNfdGhyb3R0bGVkKQotCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQrKzsKKwlpZiAobmV3X2V2ZW50KQorCQlzdGF0ZS0+Y291bnQrKzsKIAogCWlmICh0aW1lX2JlZm9yZTY0KG5vdywgc3RhdGUtPm5leHRfY2hlY2spICYmCi0JCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQgIT0gc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQpCisJCQlzdGF0ZS0+Y291bnQgIT0gc3RhdGUtPmxhc3RfY291bnQpCiAJCXJldHVybiAwOwogCiAJc3RhdGUtPm5leHRfY2hlY2sgPSBub3cgKyBDSEVDS19JTlRFUlZBTDsKLQlzdGF0ZS0+bGFzdF90aHJvdHRsZV9jb3VudCA9IHN0YXRlLT50aHJvdHRsZV9jb3VudDsKKwlzdGF0ZS0+bGFzdF9jb3VudCA9IHN0YXRlLT5jb3VudDsKIAogCS8qIGlmIHdlIGp1c3QgZW50ZXJlZCB0aGUgdGhlcm1hbCBldmVudCAqLwotCWlmIChpc190aHJvdHRsZWQpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6IFRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwgdGhpc19jcHUsIHN0YXRlLT50aHJvdHRsZV9jb3VudCk7CisJaWYgKG5ld19ldmVudCkgeworCQlpZiAoZXZlbnQgPT0gVEhFUk1BTF9USFJPVFRMSU5HX0VWRU5UKQorCQkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6ICVzIHRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwKKwkJCQl0aGlzX2NwdSwKKwkJCQlsZXZlbCA9PSBDT1JFX0xFVkVMID8gIkNvcmUiIDogIlBhY2thZ2UiLAorCQkJCXN0YXRlLT5jb3VudCk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiAlcyBwb3dlciBsaW1pdCBub3RpZmljYXRpb24gKHRvdGFsIGV2ZW50cyA9ICVsdSlcbiIsCisJCQkJdGhpc19jcHUsCisJCQkJbGV2ZWwgPT0gQ09SRV9MRVZFTCA/ICJDb3JlIiA6ICJQYWNrYWdlIiwKKwkJCQlzdGF0ZS0+Y291bnQpOwogCiAJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIAkJcmV0dXJuIDE7CiAJfQotCWlmICh3YXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNQVSVkOiBUZW1wZXJhdHVyZS9zcGVlZCBub3JtYWxcbiIsIHRoaXNfY3B1KTsKKwlpZiAob2xkX2V2ZW50KSB7CisJCWlmIChldmVudCA9PSBUSEVSTUFMX1RIUk9UVExJTkdfRVZFTlQpCisJCQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogJXMgdGVtcGVyYXR1cmUvc3BlZWQgbm9ybWFsXG4iLAorCQkJCXRoaXNfY3B1LAorCQkJCWxldmVsID09IENPUkVfTEVWRUwgPyAiQ29yZSIgOiAiUGFja2FnZSIpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDogJXMgcG93ZXIgbGltaXQgbm9ybWFsXG4iLAorCQkJCXRoaXNfY3B1LAorCQkJCWxldmVsID09IENPUkVfTEVWRUwgPyAiQ29yZSIgOiAiUGFja2FnZSIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE0OSwxMyArMjA0LDMyIEBACiAvKiBBZGQvUmVtb3ZlIHRoZXJtYWxfdGhyb3R0bGUgaW50ZXJmYWNlIGZvciBDUFUgZGV2aWNlOiAqLwogc3RhdGljIF9fY3B1aW5pdCBpbnQgdGhlcm1hbF90aHJvdHRsZV9hZGRfZGV2KHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQogewotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJnN5c19kZXYtPmtvYmosCi0JCQkJICAmdGhlcm1hbF90aHJvdHRsZV9hdHRyX2dyb3VwKTsKKwlpbnQgZXJyOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLCAmdGhlcm1hbF9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJZXJyID0gc3lzZnNfYWRkX2ZpbGVfdG9fZ3JvdXAoJnN5c19kZXYtPmtvYmosCisJCQkJCSAgICAgICZhdHRyX2NvcmVfcG93ZXJfbGltaXRfY291bnQuYXR0ciwKKwkJCQkJICAgICAgdGhlcm1hbF9hdHRyX2dyb3VwLm5hbWUpOworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BUUykpCisJCWVyciA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZzeXNfZGV2LT5rb2JqLAorCQkJCQkgICAgICAmYXR0cl9wYWNrYWdlX3Rocm90dGxlX2NvdW50LmF0dHIsCisJCQkJCSAgICAgIHRoZXJtYWxfYXR0cl9ncm91cC5uYW1lKTsKKwkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJCWVyciA9IHN5c2ZzX2FkZF9maWxlX3RvX2dyb3VwKCZzeXNfZGV2LT5rb2JqLAorCQkJCQkmYXR0cl9wYWNrYWdlX3Bvd2VyX2xpbWl0X2NvdW50LmF0dHIsCisJCQkJCXRoZXJtYWxfYXR0cl9ncm91cC5uYW1lKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBfX2NwdWluaXQgdm9pZCB0aGVybWFsX3Rocm90dGxlX3JlbW92ZV9kZXYoc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYpCiB7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZzeXNfZGV2LT5rb2JqLCAmdGhlcm1hbF90aHJvdHRsZV9hdHRyX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZ0aGVybWFsX2F0dHJfZ3JvdXApOwogfQogCiAvKiBNdXRleCBwcm90ZWN0aW5nIGRldmljZSBjcmVhdGlvbiBhZ2FpbnN0IENQVSBob3RwbHVnOiAqLwpAQCAtMjI2LDE0ICszMDAsNTAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCisvKgorICogU2V0IHVwIHRoZSBtb3N0IHR3byBzaWduaWZpY2FudCBiaXQgdG8gbm90aWZ5IG1jZSBsb2cgdGhhdCB0aGlzIHRoZXJtYWwKKyAqIGV2ZW50IHR5cGUuCisgKiBUaGlzIGlzIGEgdGVtcCBzb2x1dGlvbi4gTWF5IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSB3aXRoIG1jZSBsb2cKKyAqIGluZnJhc3R1cmUuCisgKi8KKyNkZWZpbmUgQ09SRV9USFJPVFRMRUQJCSgwKQorI2RlZmluZSBDT1JFX1BPV0VSX0xJTUlUCSgoX191NjQpMSA8PCA2MikKKyNkZWZpbmUgUEFDS0FHRV9USFJPVFRMRUQJKChfX3U2NCkyIDw8IDYyKQorI2RlZmluZSBQQUNLQUdFX1BPV0VSX0xJTUlUCSgoX191NjQpMyA8PCA2MikKKwogLyogVGhlcm1hbCB0cmFuc2l0aW9uIGludGVycnVwdCBoYW5kbGVyICovCiBzdGF0aWMgdm9pZCBpbnRlbF90aGVybWFsX2ludGVycnVwdCh2b2lkKQogewogCV9fdTY0IG1zcl92YWw7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKLQlpZiAodGhlcm1fdGhyb3RfcHJvY2VzcygobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QUk9DSE9UKSAhPSAwKSkKLQkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChtc3JfdmFsKTsKKworCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJiBUSEVSTV9TVEFUVVNfUFJPQ0hPVCwKKwkJCQlUSEVSTUFMX1RIUk9UVExJTkdfRVZFTlQsCisJCQkJQ09SRV9MRVZFTCkgIT0gMCkKKwkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChDT1JFX1RIUk9UVExFRCB8IG1zcl92YWwpOworCisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFRIRVJNX1NUQVRVU19QT1dFUl9MSU1JVCwKKwkJCQkJUE9XRVJfTElNSVRfRVZFTlQsCisJCQkJCUNPUkVfTEVWRUwpICE9IDApCisJCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KENPUkVfUE9XRVJfTElNSVQgfCBtc3JfdmFsKTsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BUUykpIHsKKwkJcmRtc3JsKE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKKwkJaWYgKHRoZXJtX3Rocm90X3Byb2Nlc3MobXNyX3ZhbCAmIFBBQ0tBR0VfVEhFUk1fU1RBVFVTX1BST0NIT1QsCisJCQkJCVRIRVJNQUxfVEhST1RUTElOR19FVkVOVCwKKwkJCQkJUEFDS0FHRV9MRVZFTCkgIT0gMCkKKwkJCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoUEFDS0FHRV9USFJPVFRMRUQgfCBtc3JfdmFsKTsKKwkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKG1zcl92YWwgJgorCQkJCQlQQUNLQUdFX1RIRVJNX1NUQVRVU19QT1dFUl9MSU1JVCwKKwkJCQkJUE9XRVJfTElNSVRfRVZFTlQsCisJCQkJCVBBQ0tBR0VfTEVWRUwpICE9IDApCisJCQkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChQQUNLQUdFX1BPV0VSX0xJTUlUCisJCQkJCQkJICB8IG1zcl92YWwpOworCX0KIH0KIAogc3RhdGljIHZvaWQgdW5leHBlY3RlZF90aGVybWFsX2ludGVycnVwdCh2b2lkKQpAQCAtMzM1LDggKzQ0NSwyNiBAQAogCWFwaWNfd3JpdGUoQVBJQ19MVlRUSE1SLCBoKTsKIAogCXJkbXNyKE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCwgbCwgaCk7Ci0Jd3Jtc3IoTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBULAotCQlsIHwgKFRIRVJNX0lOVF9MT1dfRU5BQkxFIHwgVEhFUk1fSU5UX0hJR0hfRU5BQkxFKSwgaCk7CisJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUExOKSkKKwkJd3Jtc3IoTVNSX0lBMzJfVEhFUk1fSU5URVJSVVBULAorCQkgICAgICBsIHwgKFRIRVJNX0lOVF9MT1dfRU5BQkxFCisJCQl8IFRIRVJNX0lOVF9ISUdIX0VOQUJMRSB8IFRIRVJNX0lOVF9QTE5fRU5BQkxFKSwgaCk7CisJZWxzZQorCQl3cm1zcihNU1JfSUEzMl9USEVSTV9JTlRFUlJVUFQsCisJCSAgICAgIGwgfCAoVEhFUk1fSU5UX0xPV19FTkFCTEUgfCBUSEVSTV9JTlRfSElHSF9FTkFCTEUpLCBoKTsKKworCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BUUykpIHsKKwkJcmRtc3IoTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9JTlRFUlJVUFQsIGwsIGgpOworCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9QTE4pKQorCQkJd3Jtc3IoTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9JTlRFUlJVUFQsCisJCQkgICAgICBsIHwgKFBBQ0tBR0VfVEhFUk1fSU5UX0xPV19FTkFCTEUKKwkJCQl8IFBBQ0tBR0VfVEhFUk1fSU5UX0hJR0hfRU5BQkxFCisJCQkJfCBQQUNLQUdFX1RIRVJNX0lOVF9QTE5fRU5BQkxFKSwgaCk7CisJCWVsc2UKKwkJCXdybXNyKE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fSU5URVJSVVBULAorCQkJICAgICAgbCB8IChQQUNLQUdFX1RIRVJNX0lOVF9MT1dfRU5BQkxFCisJCQkJfCBQQUNLQUdFX1RIRVJNX0lOVF9ISUdIX0VOQUJMRSksIGgpOworCX0KIAogCXNtcF90aGVybWFsX3ZlY3RvciA9IGludGVsX3RoZXJtYWxfaW50ZXJydXB0OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21zaHlwZXJ2LmMKaW5kZXggMTZmNDFiYi4uZDk0NGJmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tc2h5cGVydi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXNoeXBlcnYuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tc2h5cGVydi5oPgogCiBzdHJ1Y3QgbXNfaHlwZXJ2X2luZm8gbXNfaHlwZXJ2OworRVhQT1JUX1NZTUJPTF9HUEwobXNfaHlwZXJ2KTsKIAogc3RhdGljIGJvb2wgX19pbml0IG1zX2h5cGVydl9wbGF0Zm9ybSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMDYxMzBiNS4uYzVmNTlkMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC02MzIsOSArNjMyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGdyYW5fYmFzZSwgY2h1bmtfYmFzZSwgbG9zZV9iYXNlOwogCWNoYXIgZ3Jhbl9mYWN0b3IsIGNodW5rX2ZhY3RvciwgbG9zZV9mYWN0b3I7CiAKLQlncmFuX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uZ3Jhbl9zaXplaywgJmdyYW5fZmFjdG9yKSwKLQljaHVua19iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmNodW5rX3NpemVrLCAmY2h1bmtfZmFjdG9yKSwKLQlsb3NlX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaywgJmxvc2VfZmFjdG9yKSwKKwlncmFuX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0uZ3Jhbl9zaXplaywgJmdyYW5fZmFjdG9yKTsKKwljaHVua19iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmNodW5rX3NpemVrLCAmY2h1bmtfZmFjdG9yKTsKKwlsb3NlX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaywgJmxvc2VfZmFjdG9yKTsKIAogCXByX2luZm8oIiVzZ3Jhbl9zaXplOiAlbGQlYyBcdGNodW5rX3NpemU6ICVsZCVjIFx0IiwKIAkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCBmZDMxYTQ0Li43ZDI4ZDdkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKQEAgLTQzMywxMyArNDMzLDEyIEBACiB7CiAJdW5zaWduZWQgaW50IG1hc2tfbG8sIG1hc2tfaGksIGJhc2VfbG8sIGJhc2VfaGk7CiAJdW5zaWduZWQgaW50IHRtcCwgaGk7Ci0JaW50IGNwdTsKIAogCS8qCiAJICogZ2V0X210cnIgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSBtdHJyX3N0YXRlLCBhbHNvIGl0IGNvdWxkIGJlIGNhbGxlZAogCSAqIGZyb20gYW55IGNwdSwgc28gdHJ5IHRvIHByaW50IGl0IG91dCBkaXJlY3RseS4KIAkgKi8KLQljcHUgPSBnZXRfY3B1KCk7CisJZ2V0X2NwdSgpOwogCiAJcmRtc3IoTVRSUnBoeXNNYXNrX01TUihyZWcpLCBtYXNrX2xvLCBtYXNrX2hpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggNzk1NTZiZC4uMDFjMGYzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiAvKiBGSVhNRToga3ZtX3BhcmEuaCBuZWVkcyB0aGlzICovCiAKKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE0MywyMiArMTQ0LDI4IEBACiAJbXRycl90eXBlCXNtcF90eXBlOwogfTsKIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfc3RvcF93b3JrLCBtdHJyX3dvcmspOworCiAvKioKLSAqIGlwaV9oYW5kbGVyIC0gU3luY2hyb25pc2F0aW9uIGhhbmRsZXIuIEV4ZWN1dGVkIGJ5ICJvdGhlciIgQ1BVcy4KKyAqIG10cnJfd29ya19oYW5kbGVyIC0gU3luY2hyb25pc2F0aW9uIGhhbmRsZXIuIEV4ZWN1dGVkIGJ5ICJvdGhlciIgQ1BVcy4KICAqIEBpbmZvOiBwb2ludGVyIHRvIG10cnIgY29uZmlndXJhdGlvbiBkYXRhCiAgKgogICogUmV0dXJucyBub3RoaW5nLgogICovCi1zdGF0aWMgdm9pZCBpcGlfaGFuZGxlcih2b2lkICppbmZvKQorc3RhdGljIGludCBtdHJyX3dvcmtfaGFuZGxlcih2b2lkICppbmZvKQogewogI2lmZGVmIENPTkZJR19TTVAKIAlzdHJ1Y3Qgc2V0X210cnJfZGF0YSAqZGF0YSA9IGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWF0b21pY19kZWMoJmRhdGEtPmNvdW50KTsKKwl3aGlsZSAoIWF0b21pY19yZWFkKCZkYXRhLT5nYXRlKSkKKwkJY3B1X3JlbGF4KCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5jb3VudCk7Ci0Jd2hpbGUgKCFhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCisJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLT5nYXRlKSkKIAkJY3B1X3JlbGF4KCk7CiAKIAkvKiAgVGhlIG1hc3RlciBoYXMgY2xlYXJlZCBtZSB0byBleGVjdXRlICAqLwpAQCAtMTczLDEyICsxODAsMTMgQEAKIAl9CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5jb3VudCk7Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLT5nYXRlKSkKKwl3aGlsZSAoIWF0b21pY19yZWFkKCZkYXRhLT5nYXRlKSkKIAkJY3B1X3JlbGF4KCk7CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5jb3VudCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogI2VuZGlmCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHR5cGVzX2NvbXBhdGlibGUobXRycl90eXBlIHR5cGUxLCBtdHJyX3R5cGUgdHlwZTIpCkBAIC0xOTgsNyArMjA2LDcgQEAKICAqCiAgKiBUaGlzIGlzIGtpbmRhIHRyaWNreSwgYnV0IGZvcnR1bmF0ZWx5LCBJbnRlbCBzcGVsbGVkIGl0IG91dCBmb3IgdXMgY2xlYW5seToKICAqCi0gKiAxLiBTZW5kIElQSSB0byBkbyB0aGUgZm9sbG93aW5nOgorICogMS4gUXVldWUgd29yayB0byBkbyB0aGUgZm9sbG93aW5nIG9uIGFsbCBwcm9jZXNzb3JzOgogICogMi4gRGlzYWJsZSBJbnRlcnJ1cHRzCiAgKiAzLiBXYWl0IGZvciBhbGwgcHJvY3MgdG8gZG8gc28KICAqIDQuIEVudGVyIG5vLWZpbGwgY2FjaGUgbW9kZQpAQCAtMjE1LDE0ICsyMjMsMTcgQEAKICAqIDE1LiBFbmFibGUgaW50ZXJydXB0cy4KICAqCiAgKiBXaGF0IGRvZXMgdGhhdCBtZWFuIGZvciB1cz8gV2VsbCwgZmlyc3Qgd2Ugc2V0IGRhdGEuY291bnQgdG8gdGhlIG51bWJlcgotICogb2YgQ1BVcy4gQXMgZWFjaCBDUFUgZGlzYWJsZXMgaW50ZXJydXB0cywgaXQnbGwgZGVjcmVtZW50IGl0IG9uY2UuIFdlIHdhaXQKLSAqIHVudGlsIGl0IGhpdHMgMCBhbmQgcHJvY2VlZC4gV2Ugc2V0IHRoZSBkYXRhLmdhdGUgZmxhZyBhbmQgcmVzZXQgZGF0YS5jb3VudC4KLSAqIE1lYW53aGlsZSwgdGhleSBhcmUgd2FpdGluZyBmb3IgdGhhdCBmbGFnIHRvIGJlIHNldC4gT25jZSBpdCdzIHNldCwgZWFjaAorICogb2YgQ1BVcy4gQXMgZWFjaCBDUFUgYW5ub3VuY2VzIHRoYXQgaXQgc3RhcnRlZCB0aGUgcmVuZGV6dm91cyBoYW5kbGVyIGJ5CisgKiBkZWNyZW1lbnRpbmcgdGhlIGNvdW50LCBXZSByZXNldCBkYXRhLmNvdW50IGFuZCBzZXQgdGhlIGRhdGEuZ2F0ZSBmbGFnCisgKiBhbGxvd2luZyBhbGwgdGhlIGNwdSdzIHRvIHByb2NlZWQgd2l0aCB0aGUgd29yay4gQXMgZWFjaCBjcHUgZGlzYWJsZXMKKyAqIGludGVycnVwdHMsIGl0J2xsIGRlY3JlbWVudCBkYXRhLmNvdW50IG9uY2UuIFdlIHdhaXQgdW50aWwgaXQgaGl0cyAwIGFuZAorICogcHJvY2VlZC4gV2UgY2xlYXIgdGhlIGRhdGEuZ2F0ZSBmbGFnIGFuZCByZXNldCBkYXRhLmNvdW50LiBNZWFud2hpbGUsIHRoZXkKKyAqIGFyZSB3YWl0aW5nIGZvciB0aGF0IGZsYWcgdG8gYmUgY2xlYXJlZC4gT25jZSBpdCdzIGNsZWFyZWQsIGVhY2gKICAqIENQVSBnb2VzIHRocm91Z2ggdGhlIHRyYW5zaXRpb24gb2YgdXBkYXRpbmcgTVRSUnMuCiAgKiBUaGUgQ1BVIHZlbmRvcnMgbWF5IGVhY2ggZG8gaXQgZGlmZmVyZW50bHksCiAgKiBzbyB3ZSBjYWxsIG10cnJfaWYtPnNldCgpIGNhbGxiYWNrIGFuZCBsZXQgdGhlbSB0YWtlIGNhcmUgb2YgaXQuCiAgKiBXaGVuIHRoZXkncmUgZG9uZSwgdGhleSBhZ2FpbiBkZWNyZW1lbnQgZGF0YS0+Y291bnQgYW5kIHdhaXQgZm9yIGRhdGEuZ2F0ZQotICogdG8gYmUgcmVzZXQuCisgKiB0byBiZSBzZXQuCiAgKiBXaGVuIHdlIGZpbmlzaCwgd2Ugd2FpdCBmb3IgZGF0YS5jb3VudCB0byBoaXQgMCBhbmQgdG9nZ2xlIHRoZSBkYXRhLmdhdGUgZmxhZwogICogRXZlcnlvbmUgdGhlbiBlbmFibGVzIGludGVycnVwdHMgYW5kIHdlIGFsbCBjb250aW51ZSBvbi4KICAqCkBAIC0yMzQsNiArMjQ1LDkgQEAKIHsKIAlzdHJ1Y3Qgc2V0X210cnJfZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNwdTsKKworCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJZGF0YS5zbXBfcmVnID0gcmVnOwogCWRhdGEuc21wX2Jhc2UgPSBiYXNlOwpAQCAtMjQ2LDggKzI2MCwyMyBAQAogCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMCk7CiAKIAkvKiBTdGFydCB0aGUgYmFsbCByb2xsaW5nIG9uIG90aGVyIENQVXMgKi8KLQlpZiAoc21wX2NhbGxfZnVuY3Rpb24oaXBpX2hhbmRsZXIsICZkYXRhLCAwKSAhPSAwKQotCQlwYW5pYygibXRycjogdGltZWQgb3V0IHdhaXRpbmcgZm9yIG90aGVyIENQVXNcbiIpOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBjcHVfc3RvcF93b3JrICp3b3JrID0gJnBlcl9jcHUobXRycl93b3JrLCBjcHUpOworCisJCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJY29udGludWU7CisKKwkJc3RvcF9vbmVfY3B1X25vd2FpdChjcHUsIG10cnJfd29ya19oYW5kbGVyLCAmZGF0YSwgd29yayk7CisJfQorCisKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQorCQljcHVfcmVsYXgoKTsKKworCS8qIE9rLCByZXNldCBjb3VudCBhbmQgdG9nZ2xlIGdhdGUgKi8KKwlhdG9taWNfc2V0KCZkYXRhLmNvdW50LCBudW1fYm9vdGluZ19jcHVzKCkgLSAxKTsKKwlzbXBfd21iKCk7CisJYXRvbWljX3NldCgmZGF0YS5nYXRlLCAxKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtMjU3LDcgKzI4Niw3IEBACiAJLyogT2ssIHJlc2V0IGNvdW50IGFuZCB0b2dnbGUgZ2F0ZSAqLwogCWF0b21pY19zZXQoJmRhdGEuY291bnQsIG51bV9ib290aW5nX2NwdXMoKSAtIDEpOwogCXNtcF93bWIoKTsKLQlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDEpOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMCk7CiAKIAkvKiBEbyBvdXIgTVRSUiBidXNpbmVzcyAqLwogCkBAIC0yNzksNyArMzA4LDcgQEAKIAogCWF0b21pY19zZXQoJmRhdGEuY291bnQsIG51bV9ib290aW5nX2NwdXMoKSAtIDEpOwogCXNtcF93bWIoKTsKLQlhdG9taWNfc2V0KCZkYXRhLmdhdGUsIDApOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMSk7CiAKIAkvKgogCSAqIFdhaXQgaGVyZSBmb3IgZXZlcnlvbmUgdG8gaGF2ZSBzZWVuIHRoZSBnYXRlIGNoYW5nZQpAQCAtMjg5LDYgKzMxOCw3IEBACiAJCWNwdV9yZWxheCgpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA1ZGI1YjdkLi5mMmRhMjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMjIwLDYgKzIyMCw3IEBACiAJCQkJCQkgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsKIAlzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqZXZlbnRfY29uc3RyYWludHM7CiAJdm9pZAkJKCpxdWlya3MpKHZvaWQpOworCWludAkJcGVyZmN0cl9zZWNvbmRfd3JpdGU7CiAKIAlpbnQJCSgqY3B1X3ByZXBhcmUpKGludCBjcHUpOwogCXZvaWQJCSgqY3B1X3N0YXJ0aW5nKShpbnQgY3B1KTsKQEAgLTI5NSwxMCArMjk2LDEwIEBACiAJICogY291bnQgdG8gdGhlIGdlbmVyaWMgZXZlbnQgYXRvbWljYWxseToKIAkgKi8KIGFnYWluOgotCXByZXZfcmF3X2NvdW50ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKKwlwcmV2X3Jhd19jb3VudCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wcmV2X2NvdW50KTsKIAlyZG1zcmwoaHdjLT5ldmVudF9iYXNlICsgaWR4LCBuZXdfcmF3X2NvdW50KTsKIAotCWlmIChhdG9taWM2NF9jbXB4Y2hnKCZod2MtPnByZXZfY291bnQsIHByZXZfcmF3X2NvdW50LAorCWlmIChsb2NhbDY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCiAJCQkJCW5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQogCQlnb3RvIGFnYWluOwogCkBAIC0zMTMsOCArMzE0LDggQEAKIAlkZWx0YSA9IChuZXdfcmF3X2NvdW50IDw8IHNoaWZ0KSAtIChwcmV2X3Jhd19jb3VudCA8PCBzaGlmdCk7CiAJZGVsdGEgPj49IHNoaWZ0OwogCi0JYXRvbWljNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKLQlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKwlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKIAogCXJldHVybiBuZXdfcmF3X2NvdW50OwogfQpAQCAtNDM4LDcgKzQzOSw3IEBACiAJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKIAkJaHdjLT5zYW1wbGVfcGVyaW9kID0geDg2X3BtdS5tYXhfcGVyaW9kOwogCQlod2MtPmxhc3RfcGVyaW9kID0gaHdjLT5zYW1wbGVfcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIHdlIGhhdmUgYSBQTVUgaW5pdGlhbGl6ZWQgYnV0IG5vIEFQSUMKQEAgLTg4NSw3ICs4ODYsNyBAQAogeDg2X3BlcmZfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7Ci0JczY0IGxlZnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnBlcmlvZF9sZWZ0KTsKKwlzNjQgbGVmdCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKIAlpbnQgcmV0ID0gMCwgaWR4ID0gaHdjLT5pZHg7CiAKQEAgLTg5NywxNCArODk4LDE0IEBACiAJICovCiAJaWYgKHVubGlrZWx5KGxlZnQgPD0gLXBlcmlvZCkpIHsKIAkJbGVmdCA9IHBlcmlvZDsKLQkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwkJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOwogCQlod2MtPmxhc3RfcGVyaW9kID0gcGVyaW9kOwogCQlyZXQgPSAxOwogCX0KIAogCWlmICh1bmxpa2VseShsZWZ0IDw9IDApKSB7CiAJCWxlZnQgKz0gcGVyaW9kOwotCQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGxlZnQpOworCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CiAJCXJldCA9IDE7CiAJfQpAQCAtOTIzLDEwICs5MjQsMTkgQEAKIAkgKiBUaGUgaHcgZXZlbnQgc3RhcnRzIGNvdW50aW5nIGZyb20gdGhpcyBldmVudCBvZmZzZXQsCiAJICogbWFyayBpdCB0byBiZSBhYmxlIHRvIGV4dHJhIGZ1dHVyZSBkZWx0YXM6CiAJICovCi0JYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOworCWxvY2FsNjRfc2V0KCZod2MtPnByZXZfY291bnQsICh1NjQpLWxlZnQpOwogCi0Jd3Jtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwKKwl3cm1zcmwoaHdjLT5ldmVudF9iYXNlICsgaWR4LCAodTY0KSgtbGVmdCkgJiB4ODZfcG11LmNudHZhbF9tYXNrKTsKKworCS8qCisJICogRHVlIHRvIGVycmF0dW0gb24gY2VydGFuIGNwdSB3ZSBuZWVkCisJICogYSBzZWNvbmQgd3JpdGUgdG8gYmUgc3VyZSB0aGUgcmVnaXN0ZXIKKwkgKiBpcyB1cGRhdGVkIHByb3Blcmx5CisJICovCisJaWYgKHg4Nl9wbXUucGVyZmN0cl9zZWNvbmRfd3JpdGUpIHsKKwkJd3Jtc3JsKGh3Yy0+ZXZlbnRfYmFzZSArIGlkeCwKIAkJCSh1NjQpKC1sZWZ0KSAmIHg4Nl9wbXUuY250dmFsX21hc2spOworCX0KIAogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIApAQCAtOTY5LDcgKzk3OSw3IEBACiAJICogc2tpcCB0aGUgc2NoZWR1bGFiaWxpdHkgdGVzdCBoZXJlLCBpdCB3aWxsIGJlIHBlZm9ybWVkCiAJICogYXQgY29tbWl0IHRpbWUoLT5jb21taXRfdHhuKSBhcyBhIHdob2xlCiAJICovCi0JaWYgKGNwdWMtPmdyb3VwX2ZsYWcgJiBQRVJGX0VWRU5UX1RYTl9TVEFSVEVEKQorCWlmIChjcHVjLT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE4pCiAJCWdvdG8gb3V0OwogCiAJcmV0ID0geDg2X3BtdS5zY2hlZHVsZV9ldmVudHMoY3B1YywgbiwgYXNzaWduKTsKQEAgLTEwOTYsNyArMTEwNiw3IEBACiAJICogVGhlIGV2ZW50cyBuZXZlciBnb3Qgc2NoZWR1bGVkIGFuZCAtPmNhbmNlbF90eG4gd2lsbCB0cnVuY2F0ZQogCSAqIHRoZSBldmVudF9saXN0LgogCSAqLwotCWlmIChjcHVjLT5ncm91cF9mbGFnICYgUEVSRl9FVkVOVF9UWE5fU1RBUlRFRCkKKwlpZiAoY3B1Yy0+Z3JvdXBfZmxhZyAmIFBFUkZfRVZFTlRfVFhOKQogCQlyZXR1cm47CiAKIAl4ODZfcG11X3N0b3AoZXZlbnQpOwpAQCAtMTM4OCw3ICsxMzk4LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCi0JY3B1Yy0+Z3JvdXBfZmxhZyB8PSBQRVJGX0VWRU5UX1RYTl9TVEFSVEVEOworCWNwdWMtPmdyb3VwX2ZsYWcgfD0gUEVSRl9FVkVOVF9UWE47CiAJY3B1Yy0+bl90eG4gPSAwOwogfQogCkBAIC0xNDAxLDcgKzE0MTEsNyBAQAogewogCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKLQljcHVjLT5ncm91cF9mbGFnICY9IH5QRVJGX0VWRU5UX1RYTl9TVEFSVEVEOworCWNwdWMtPmdyb3VwX2ZsYWcgJj0gflBFUkZfRVZFTlRfVFhOOwogCS8qCiAJICogVHJ1bmNhdGUgdGhlIGNvbGxlY3RlZCBldmVudHMuCiAJICovCkBAIC0xNDM1LDExICsxNDQ1LDcgQEAKIAkgKi8KIAltZW1jcHkoY3B1Yy0+YXNzaWduLCBhc3NpZ24sIG4qc2l6ZW9mKGludCkpOwogCi0JLyoKLQkgKiBDbGVhciBvdXQgdGhlIHR4biBjb3VudCBzbyB0aGF0IC0+Y2FuY2VsX3R4bigpIHdoaWNoIGdldHMKLQkgKiBydW4gYWZ0ZXIgLT5jb21taXRfdHhuKCkgZG9lc24ndCB1bmRvIHRoaW5ncy4KLQkgKi8KLQljcHVjLT5uX3R4biA9IDA7CisJY3B1Yy0+Z3JvdXBfZmxhZyAmPSB+UEVSRl9FVkVOVF9UWE47CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MDcsOCArMTYxMyw2IEBACiAJLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFja19icCwKIH07CiAKLSNpbmNsdWRlICIuLi9kdW1wc3RhY2suaCIKLQogc3RhdGljIHZvaWQKIHBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSkKIHsKQEAgLTE3MzAsMjIgKzE3MzQsNiBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotdm9pZCBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXAsIGludCBza2lwKQotewotCXJlZ3MtPmlwID0gaXA7Ci0JLyoKLQkgKiBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MgYWRkcyBhbm90aGVyIGNhbGwsIHdlIG5lZWQgdG8gaW5jcmVtZW50Ci0JICogdGhlIHNraXAgbGV2ZWwKLQkgKi8KLQlyZWdzLT5icCA9IHJld2luZF9mcmFtZV9wb2ludGVyKHNraXAgKyAxKTsKLQlyZWdzLT5jcyA9IF9fS0VSTkVMX0NTOwotCS8qCi0JICogV2UgYWJ1c2UgYml0IDMgdG8gcGFzcyBleGFjdCBpbmZvcm1hdGlvbiwgc2VlIHBlcmZfbWlzY19mbGFncwotCSAqIGFuZCB0aGUgY29tbWVudCB3aXRoIFBFUkZfRUZMQUdTX0VYQUNULgotCSAqLwotCXJlZ3MtPmZsYWdzID0gMDsKLX0KLQogdW5zaWduZWQgbG9uZyBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggYWU4NWQ2OS4uMTA3NzExYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTIxLDIyICsyMSwzNiBAQAogCWNoYXIgY250clsyXVtQNF9DTlRSX0xJTUlUXTsJCS8qIGNvdW50ZXIgaW5kZXggKG9mZnNldCksIC0xIG9uIGFic2NlbmNlICovCiB9OwogCi1zdHJ1Y3QgcDRfY2FjaGVfZXZlbnRfYmluZCB7CitzdHJ1Y3QgcDRfcGVic19iaW5kIHsKIAl1bnNpZ25lZCBpbnQgbWV0cmljX3BlYnM7CiAJdW5zaWduZWQgaW50IG1ldHJpY192ZXJ0OwogfTsKIAotI2RlZmluZSBQNF9HRU5fQ0FDSEVfRVZFTlRfQklORChuYW1lKQkJXAotCVtQNF9DQUNIRV9fIyNuYW1lXSA9IHsJCQlcCi0JCS5tZXRyaWNfcGVicyA9IFA0X1BFQlNfXyMjbmFtZSwJXAotCQkubWV0cmljX3ZlcnQgPSBQNF9WRVJUX18jI25hbWUsCVwKKy8qIGl0IHNldHMgUDRfUEVCU19FTkFCTEVfVU9QX1RBRyBhcyB3ZWxsICovCisjZGVmaW5lIFA0X0dFTl9QRUJTX0JJTkQobmFtZSwgcGVicywgdmVydCkJCQlcCisJW1A0X1BFQlNfTUVUUklDX18jI25hbWVdID0gewkJCQlcCisJCS5tZXRyaWNfcGVicyA9IHBlYnMgfCBQNF9QRUJTX0VOQUJMRV9VT1BfVEFHLAlcCisJCS5tZXRyaWNfdmVydCA9IHZlcnQsCQkJCVwKIAl9CiAKLXN0YXRpYyBzdHJ1Y3QgcDRfY2FjaGVfZXZlbnRfYmluZCBwNF9jYWNoZV9ldmVudF9iaW5kX21hcFtdID0gewotCVA0X0dFTl9DQUNIRV9FVkVOVF9CSU5EKDFzdGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQpLAotCVA0X0dFTl9DQUNIRV9FVkVOVF9CSU5EKDJuZGxfY2FjaGVfbG9hZF9taXNzX3JldGlyZWQpLAotCVA0X0dFTl9DQUNIRV9FVkVOVF9CSU5EKGR0bGJfbG9hZF9taXNzX3JldGlyZWQpLAotCVA0X0dFTl9DQUNIRV9FVkVOVF9CSU5EKGR0bGJfc3RvcmVfbWlzc19yZXRpcmVkKSwKKy8qCisgKiBub3RlIHdlIGhhdmUgUDRfUEVCU19FTkFCTEVfVU9QX1RBRyBhbHdheXMgc2V0IGhlcmUKKyAqCisgKiBpdCdzIG5lZWRlZCBmb3IgbWFwcGluZyBQNF9QRUJTX0NPTkZJR19NRVRSSUNfTUFTSyBiaXRzIG9mCisgKiBldmVudCBjb25maWd1cmF0aW9uIHRvIGZpbmQgb3V0IHdoaWNoIHZhbHVlcyBhcmUgdG8gYmUKKyAqIHdyaXR0ZW4gaW50byBNU1JfSUEzMl9QRUJTX0VOQUJMRSBhbmQgTVNSX1A0X1BFQlNfTUFUUklYX1ZFUlQKKyAqIHJlc2dpc3RlcnMKKyAqLworc3RhdGljIHN0cnVjdCBwNF9wZWJzX2JpbmQgcDRfcGVic19iaW5kX21hcFtdID0geworCVA0X0dFTl9QRUJTX0JJTkQoMXN0bF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCwJMHgwMDAwMDAxLCAweDAwMDAwMDEpLAorCVA0X0dFTl9QRUJTX0JJTkQoMm5kbF9jYWNoZV9sb2FkX21pc3NfcmV0aXJlZCwJMHgwMDAwMDAyLCAweDAwMDAwMDEpLAorCVA0X0dFTl9QRUJTX0JJTkQoZHRsYl9sb2FkX21pc3NfcmV0aXJlZCwJMHgwMDAwMDA0LCAweDAwMDAwMDEpLAorCVA0X0dFTl9QRUJTX0JJTkQoZHRsYl9zdG9yZV9taXNzX3JldGlyZWQsCTB4MDAwMDAwNCwgMHgwMDAwMDAyKSwKKwlQNF9HRU5fUEVCU19CSU5EKGR0bGJfYWxsX21pc3NfcmV0aXJlZCwJCTB4MDAwMDAwNCwgMHgwMDAwMDAzKSwKKwlQNF9HRU5fUEVCU19CSU5EKHRhZ2dlZF9taXNwcmVkX2JyYW5jaCwJCTB4MDAxODAwMCwgMHgwMDAwMDEwKSwKKwlQNF9HRU5fUEVCU19CSU5EKG1vYl9sb2FkX3JlcGxheV9yZXRpcmVkLAkweDAwMDAyMDAsIDB4MDAwMDAwMSksCisJUDRfR0VOX1BFQlNfQklORChzcGxpdF9sb2FkX3JldGlyZWQsCQkweDAwMDA0MDAsIDB4MDAwMDAwMSksCisJUDRfR0VOX1BFQlNfQklORChzcGxpdF9zdG9yZV9yZXRpcmVkLAkJMHgwMDAwNDAwLCAweDAwMDAwMDIpLAogfTsKIAogLyoKQEAgLTI4MSwxMCArMjk1LDEwIEBACiAJfSwKIH07CiAKLSNkZWZpbmUgUDRfR0VOX0NBQ0hFX0VWRU5UKGV2ZW50LCBiaXQsIGNhY2hlX2V2ZW50KQkJCSAgXAorI2RlZmluZSBQNF9HRU5fQ0FDSEVfRVZFTlQoZXZlbnQsIGJpdCwgbWV0cmljKQkJCQkgIFwKIAlwNF9jb25maWdfcGFja19lc2NyKFA0X0VTQ1JfRVZFTlQoZXZlbnQpCQkJfCBcCiAJCQkgICAgUDRfRVNDUl9FTUFTS19CSVQoZXZlbnQsIGJpdCkpCQl8IFwKLQlwNF9jb25maWdfcGFja19jY2NyKGNhY2hlX2V2ZW50CQkJCQl8IFwKKwlwNF9jb25maWdfcGFja19jY2NyKG1ldHJpYwkJCQkJfCBcCiAJCQkgICAgUDRfQ0NDUl9FU0VMKFA0X09QQ09ERV9FU0VMKFA0X09QQ09ERShldmVudCkpKSkKIAogc3RhdGljIF9faW5pdGNvbnN0IGNvbnN0IHU2NCBwNF9od19jYWNoZV9ldmVudF9pZHMKQEAgLTI5NiwzNCArMzEwLDM0IEBACiAJWyBDKE9QX1JFQUQpIF0gPSB7CiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAogCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IFA0X0dFTl9DQUNIRV9FVkVOVChQNF9FVkVOVF9SRVBMQVlfRVZFTlQsIE5CT0dVUywKLQkJCQkJCVA0X0NBQ0hFX18xc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKKwkJCQkJCVA0X1BFQlNfTUVUUklDX18xc3RsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKIAl9LAogIH0sCiAgWyBDKExMICApIF0gPSB7CiAJWyBDKE9QX1JFQUQpIF0gPSB7CiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwLAogCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IFA0X0dFTl9DQUNIRV9FVkVOVChQNF9FVkVOVF9SRVBMQVlfRVZFTlQsIE5CT0dVUywKLQkJCQkJCVA0X0NBQ0hFX18ybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKKwkJCQkJCVA0X1BFQlNfTUVUUklDX18ybmRsX2NhY2hlX2xvYWRfbWlzc19yZXRpcmVkKSwKIAl9LAogfSwKICBbIEMoRFRMQikgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAsCiAJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gUDRfR0VOX0NBQ0hFX0VWRU5UKFA0X0VWRU5UX1JFUExBWV9FVkVOVCwgTkJPR1VTLAotCQkJCQkJUDRfQ0FDSEVfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQpLAorCQkJCQkJUDRfUEVCU19NRVRSSUNfX2R0bGJfbG9hZF9taXNzX3JldGlyZWQpLAogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MCwKIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQNF9HRU5fQ0FDSEVfRVZFTlQoUDRfRVZFTlRfUkVQTEFZX0VWRU5ULCBOQk9HVVMsCi0JCQkJCQlQNF9DQUNIRV9fZHRsYl9zdG9yZV9taXNzX3JldGlyZWQpLAorCQkJCQkJUDRfUEVCU19NRVRSSUNfX2R0bGJfc3RvcmVfbWlzc19yZXRpcmVkKSwKIAl9LAogIH0sCiAgWyBDKElUTEIpIF0gPSB7CiAJWyBDKE9QX1JFQUQpIF0gPSB7CiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gUDRfR0VOX0NBQ0hFX0VWRU5UKFA0X0VWRU5UX0lUTEJfUkVGRVJFTkNFLCBISVQsCi0JCQkJCQlQNF9DQUNIRV9faXRsYl9yZWZlcmVuY2VfaGl0KSwKKwkJCQkJCVA0X1BFQlNfTUVUUklDX19ub25lKSwKIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQNF9HRU5fQ0FDSEVfRVZFTlQoUDRfRVZFTlRfSVRMQl9SRUZFUkVOQ0UsIE1JU1MsCi0JCQkJCQlQNF9DQUNIRV9faXRsYl9yZWZlcmVuY2VfbWlzcyksCisJCQkJCQlQNF9QRUJTX01FVFJJQ19fbm9uZSksCiAJfSwKIAlbIEMoT1BfV1JJVEUpIF0gPSB7CiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gLTEsCkBAIC00MTQsMTEgKzQyOCwzNyBAQAogCXJldHVybiBjb25maWc7CiB9CiAKK3N0YXRpYyBpbnQgcDRfdmFsaWRhdGVfcmF3X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwl1bnNpZ25lZCBpbnQgdjsKKworCS8qIHVzZXIgZGF0YSBtYXkgaGF2ZSBvdXQtb2YtYm91bmQgZXZlbnQgaW5kZXggKi8KKwl2ID0gcDRfY29uZmlnX3VucGFja19ldmVudChldmVudC0+YXR0ci5jb25maWcpOworCWlmICh2ID49IEFSUkFZX1NJWkUocDRfZXZlbnRfYmluZF9tYXApKSB7CisJCXByX3dhcm5pbmcoIlA0IFBNVTogVW5rbm93biBldmVudCBjb2RlOiAlZFxuIiwgdik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogaXQgbWF5IGhhdmUgc29tZSBzY3Jld2VkIFBFQlMgYml0cworCSAqLworCWlmIChwNF9jb25maWdfcGVic19oYXMoZXZlbnQtPmF0dHIuY29uZmlnLCBQNF9QRUJTX0NPTkZJR19FTkFCTEUpKSB7CisJCXByX3dhcm5pbmcoIlA0IFBNVTogUEVCUyBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdiA9IHA0X2NvbmZpZ191bnBhY2tfbWV0cmljKGV2ZW50LT5hdHRyLmNvbmZpZyk7CisJaWYgKHYgPj0gQVJSQVlfU0laRShwNF9wZWJzX2JpbmRfbWFwKSkgeworCQlwcl93YXJuaW5nKCJQNCBQTVU6IFVua25vd24gbWV0cmljIGNvZGU6ICVkXG4iLCB2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcDRfaHdfY29uZmlnKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCWludCByYyA9IDA7Ci0JdW5zaWduZWQgaW50IGV2bnQ7CiAJdTMyIGVzY3IsIGNjY3I7CiAKIAkvKgpAQCAtNDM4LDEyICs0NzgsOSBAQAogCiAJaWYgKGV2ZW50LT5hdHRyLnR5cGUgPT0gUEVSRl9UWVBFX1JBVykgewogCi0JCS8qIHVzZXIgZGF0YSBtYXkgaGF2ZSBvdXQtb2YtYm91bmQgZXZlbnQgaW5kZXggKi8KLQkJZXZudCA9IHA0X2NvbmZpZ191bnBhY2tfZXZlbnQoZXZlbnQtPmF0dHIuY29uZmlnKTsKLQkJaWYgKGV2bnQgPj0gQVJSQVlfU0laRShwNF9ldmVudF9iaW5kX21hcCkpIHsKLQkJCXJjID0gLUVJTlZBTDsKKwkJcmMgPSBwNF92YWxpZGF0ZV9yYXdfZXZlbnQoZXZlbnQpOworCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKLQkJfQogCiAJCS8qCiAJCSAqIFdlIGRvbid0IGNvbnRyb2wgcmF3IGV2ZW50cyBzbyBpdCdzIHVwIHRvIHRoZSBjYWxsZXIKQEAgLTQ1MSwxMiArNDg4LDE1IEBACiAJCSAqIG9uIEhUIG1hY2hpbmUgYnV0IGFsbG93IEhULWNvbXBhdGlibGUgc3BlY2lmaWNzIHRvIGJlCiAJCSAqIHBhc3NlZCBvbikKIAkJICoKKwkJICogTm90ZSB0aGF0IGZvciBSQVcgZXZlbnRzIHdlIGFsbG93IHVzZXIgdG8gdXNlIFA0X0NDQ1JfUkVTRVJWRUQKKwkJICogYml0cyBzaW5jZSB3ZSBrZWVwIGFkZGl0aW9uYWwgaW5mbyBoZXJlIChmb3IgY2FjaGUgZXZlbnRzIGFuZCBldGMpCisJCSAqCiAJCSAqIFhYWDogSFQgd2lkZSB0aGluZ3Mgc2hvdWxkIGNoZWNrIHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYKIAkJICogICAgICBDQVBfU1lTX0FETUlOCiAJCSAqLwogCQlldmVudC0+aHcuY29uZmlnIHw9IGV2ZW50LT5hdHRyLmNvbmZpZyAmCiAJCQkocDRfY29uZmlnX3BhY2tfZXNjcihQNF9FU0NSX01BU0tfSFQpIHwKLQkJCSBwNF9jb25maWdfcGFja19jY2NyKFA0X0NDQ1JfTUFTS19IVCkpOworCQkJIHA0X2NvbmZpZ19wYWNrX2NjY3IoUDRfQ0NDUl9NQVNLX0hUIHwgUDRfQ0NDUl9SRVNFUlZFRCkpOwogCX0KIAogCXJjID0geDg2X3NldHVwX3BlcmZjdHIoZXZlbnQpOwpAQCAtNDgyLDYgKzUyMiwyOSBAQAogCXJldHVybiBvdmVyZmxvdzsKIH0KIAorc3RhdGljIHZvaWQgcDRfcG11X2Rpc2FibGVfcGVicyh2b2lkKQoreworCS8qCisJICogRklYTUUKKwkgKgorCSAqIEl0J3Mgc3RpbGwgYWxsb3dlZCB0aGF0IHR3byB0aHJlYWRzIHNldHVwIHNhbWUgY2FjaGUKKwkgKiBldmVudHMgc28gd2UgY2FuJ3Qgc2ltcGx5IGNsZWFyIG1ldHJpY3MgdW50aWwgd2Uga25ldworCSAqIG5vb25lIGlzIGRlcGVuZGluZyBvbiB1cywgc28gd2UgbmVlZCBraW5kIG9mIGNvdW50ZXIKKwkgKiBmb3IgIlJlcGxheUV2ZW50IiB1c2Vycy4KKwkgKgorCSAqIFdoYXQgaXMgbW9yZSBjb21wbGV4IC0tIFJBVyBldmVudHMsIGlmIHVzZXIgKGZvciBzb21lCisJICogcmVhc29uKSB3aWxsIHBhc3Mgc29tZSBjYWNoZSBldmVudCBtZXRyaWMgd2l0aCBpbXByb3BlcgorCSAqIGV2ZW50IG9wY29kZSAtLSBpdCdzIGZpbmUgZnJvbSBoYXJkd2FyZSBwb2ludCBvZiB2aWV3CisJICogYnV0IGNvbXBsZXRlbHkgbm9uc2VuY2UgZnJvbSAibWVhbmluZyIgb2Ygc3VjaCBhY3Rpb24uCisJICoKKwkgKiBTbyBhdCBtb21lbnQgbGV0IGxlYXZlIG1ldHJpY3MgdHVybmVkIG9uIGZvcmV2ZXIgLS0gaXQncworCSAqIG9rIGZvciBub3cgYnV0IG5lZWQgdG8gYmUgcmV2aXNpdGVkIQorCSAqCisJICogKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKE1TUl9JQTMyX1BFQlNfRU5BQkxFLCAodTY0KTApOworCSAqICh2b2lkKWNoZWNraW5nX3dybXNybChNU1JfUDRfUEVCU19NQVRSSVhfVkVSVCwgKHU2NCkwKTsKKwkgKi8KK30KKwogc3RhdGljIGlubGluZSB2b2lkIHA0X3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKQEAgLTUwNyw2ICs1NzAsMjYgQEAKIAkJCWNvbnRpbnVlOwogCQlwNF9wbXVfZGlzYWJsZV9ldmVudChldmVudCk7CiAJfQorCisJcDRfcG11X2Rpc2FibGVfcGVicygpOworfQorCisvKiBjb25maWd1cmF0aW9uIG11c3QgYmUgdmFsaWQgKi8KK3N0YXRpYyB2b2lkIHA0X3BtdV9lbmFibGVfcGVicyh1NjQgY29uZmlnKQoreworCXN0cnVjdCBwNF9wZWJzX2JpbmQgKmJpbmQ7CisJdW5zaWduZWQgaW50IGlkeDsKKworCUJVSUxEX0JVR19PTihQNF9QRUJTX01FVFJJQ19fbWF4ID4gUDRfUEVCU19DT05GSUdfTUVUUklDX01BU0spOworCisJaWR4ID0gcDRfY29uZmlnX3VucGFja19tZXRyaWMoY29uZmlnKTsKKwlpZiAoaWR4ID09IFA0X1BFQlNfTUVUUklDX19ub25lKQorCQlyZXR1cm47CisKKwliaW5kID0gJnA0X3BlYnNfYmluZF9tYXBbaWR4XTsKKworCSh2b2lkKWNoZWNraW5nX3dybXNybChNU1JfSUEzMl9QRUJTX0VOQUJMRSwJKHU2NCliaW5kLT5tZXRyaWNfcGVicyk7CisJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKE1TUl9QNF9QRUJTX01BVFJJWF9WRVJULAkodTY0KWJpbmQtPm1ldHJpY192ZXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgcDRfcG11X2VuYWJsZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCkBAIC01MTUsOSArNTk4LDcgQEAKIAlpbnQgdGhyZWFkID0gcDRfaHRfY29uZmlnX3RocmVhZChod2MtPmNvbmZpZyk7CiAJdTY0IGVzY3JfY29uZiA9IHA0X2NvbmZpZ191bnBhY2tfZXNjcihwNF9jbGVhcl9odF9iaXQoaHdjLT5jb25maWcpKTsKIAl1bnNpZ25lZCBpbnQgaWR4ID0gcDRfY29uZmlnX3VucGFja19ldmVudChod2MtPmNvbmZpZyk7Ci0JdW5zaWduZWQgaW50IGlkeF9jYWNoZSA9IHA0X2NvbmZpZ191bnBhY2tfY2FjaGVfZXZlbnQoaHdjLT5jb25maWcpOwogCXN0cnVjdCBwNF9ldmVudF9iaW5kICpiaW5kOwotCXN0cnVjdCBwNF9jYWNoZV9ldmVudF9iaW5kICpiaW5kX2NhY2hlOwogCXU2NCBlc2NyX2FkZHIsIGNjY3I7CiAKIAliaW5kID0gJnA0X2V2ZW50X2JpbmRfbWFwW2lkeF07CkBAIC01MzcsMTYgKzYxOCwxMCBAQAogCWNjY3IgPSBwNF9jb25maWdfdW5wYWNrX2NjY3IoaHdjLT5jb25maWcpOwogCiAJLyoKLQkgKiBpdCBjb3VsZCBiZSBDYWNoZSBldmVudCBzbyB0aGF0IHdlIG5lZWQgdG8KLQkgKiBzZXQgbWV0cmljcyBpbnRvIGFkZGl0aW9uYWwgTVNScworCSAqIGl0IGNvdWxkIGJlIENhY2hlIGV2ZW50IHNvIHdlIG5lZWQgdG8gd3JpdGUgbWV0cmljcworCSAqIGludG8gYWRkaXRpb25hbCBNU1JzCiAJICovCi0JQlVJTERfQlVHX09OKFA0X0NBQ0hFX19NQVggPiBQNF9DQ0NSX0NBQ0hFX09QU19NQVNLKTsKLQlpZiAoaWR4X2NhY2hlID4gUDRfQ0FDSEVfX05PTkUgJiYKLQkJaWR4X2NhY2hlIDwgQVJSQVlfU0laRShwNF9jYWNoZV9ldmVudF9iaW5kX21hcCkpIHsKLQkJYmluZF9jYWNoZSA9ICZwNF9jYWNoZV9ldmVudF9iaW5kX21hcFtpZHhfY2FjaGVdOwotCQkodm9pZCljaGVja2luZ193cm1zcmwoTVNSX0lBMzJfUEVCU19FTkFCTEUsICh1NjQpYmluZF9jYWNoZS0+bWV0cmljX3BlYnMpOwotCQkodm9pZCljaGVja2luZ193cm1zcmwoTVNSX1A0X1BFQlNfTUFUUklYX1ZFUlQsICh1NjQpYmluZF9jYWNoZS0+bWV0cmljX3ZlcnQpOwotCX0KKwlwNF9wbXVfZW5hYmxlX3BlYnMoaHdjLT5jb25maWcpOwogCiAJKHZvaWQpY2hlY2tpbmdfd3Jtc3JsKGVzY3JfYWRkciwgZXNjcl9jb25mKTsKIAkodm9pZCljaGVja2luZ193cm1zcmwoaHdjLT5jb25maWdfYmFzZSArIGh3Yy0+aWR4LApAQCAtODI5LDYgKzkwNCwxNSBAQAogCS5tYXhfcGVyaW9kCQk9ICgxVUxMIDw8IDM5KSAtIDEsCiAJLmh3X2NvbmZpZwkJPSBwNF9od19jb25maWcsCiAJLnNjaGVkdWxlX2V2ZW50cwk9IHA0X3BtdV9zY2hlZHVsZV9ldmVudHMsCisJLyoKKwkgKiBUaGlzIGhhbmRsZXMgZXJyYXR1bSBOMTUgaW4gaW50ZWwgZG9jIDI0OTE5OS0wMjksCisJICogdGhlIGNvdW50ZXIgbWF5IG5vdCBiZSB1cGRhdGVkIGNvcnJlY3RseSBvbiB3cml0ZQorCSAqIHNvIHdlIG5lZWQgYSBzZWNvbmQgd3JpdGUgb3BlcmF0aW9uIHRvIGRvIHRoZSB0cmljaworCSAqICh0aGUgb2ZmaWNpYWwgd29ya2Fyb3VuZCBkaWRuJ3Qgd29yaykKKwkgKgorCSAqIHRoZSBmb3JtZXIgaWRlYSBpcyB0YWtlbiBmcm9tIE9Qcm9maWxlIGNvZGUKKwkgKi8KKwkucGVyZmN0cl9zZWNvbmRfd3JpdGUJPSAxLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgcDRfcG11X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvc2NhdHRlcmVkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YjRkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3NjYXR0ZXJlZC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKglSb3V0aW5lcyB0byBpbmRlbnRpZnkgYWRkaXRpb25hbCBjcHUgZmVhdHVyZXMgdGhhdCBhcmUgc2NhdHRlcmVkIGluCisgKgljcHVpZCBzcGFjZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorCisjaW5jbHVkZSA8YXNtL3BhdC5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisKK3N0cnVjdCBjcHVpZF9iaXQgeworCXUxNiBmZWF0dXJlOworCXU4IHJlZzsKKwl1OCBiaXQ7CisJdTMyIGxldmVsOworCXUzMiBzdWJfbGVhZjsKK307CisKK2VudW0gY3B1aWRfcmVncyB7CisJQ1JfRUFYID0gMCwKKwlDUl9FQ1gsCisJQ1JfRURYLAorCUNSX0VCWAorfTsKKwordm9pZCBfX2NwdWluaXQgaW5pdF9zY2F0dGVyZWRfY3B1aWRfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworCXUzMiBtYXhfbGV2ZWw7CisJdTMyIHJlZ3NbNF07CisJY29uc3Qgc3RydWN0IGNwdWlkX2JpdCAqY2I7CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGNwdWlkX2JpdCBfX2NwdWluaXRjb25zdCBjcHVpZF9iaXRzW10gPSB7CisJCXsgWDg2X0ZFQVRVUkVfSURBLAkJQ1JfRUFYLCAxLCAweDAwMDAwMDA2LCAwIH0sCisJCXsgWDg2X0ZFQVRVUkVfQVJBVCwJCUNSX0VBWCwgMiwgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX1BMTiwJCUNSX0VBWCwgNCwgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX1BUUywJCUNSX0VBWCwgNiwgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX0FQRVJGTVBFUkYsCUNSX0VDWCwgMCwgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX0VQQiwJCUNSX0VDWCwgMywgMHgwMDAwMDAwNiwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX1hTQVZFT1BULAkJQ1JfRUFYLAkwLCAweDAwMDAwMDBkLCAxIH0sCisJCXsgWDg2X0ZFQVRVUkVfQ1BCLAkJQ1JfRURYLCA5LCAweDgwMDAwMDA3LCAwIH0sCisJCXsgWDg2X0ZFQVRVUkVfTlBULAkJQ1JfRURYLCAwLCAweDgwMDAwMDBhLCAwIH0sCisJCXsgWDg2X0ZFQVRVUkVfTEJSViwJCUNSX0VEWCwgMSwgMHg4MDAwMDAwYSwgMCB9LAorCQl7IFg4Nl9GRUFUVVJFX1NWTUwsCQlDUl9FRFgsIDIsIDB4ODAwMDAwMGEsIDAgfSwKKwkJeyBYODZfRkVBVFVSRV9OUklQUywJCUNSX0VEWCwgMywgMHg4MDAwMDAwYSwgMCB9LAorCQl7IDAsIDAsIDAsIDAsIDAgfQorCX07CisKKwlmb3IgKGNiID0gY3B1aWRfYml0czsgY2ItPmZlYXR1cmU7IGNiKyspIHsKKworCQkvKiBWZXJpZnkgdGhhdCB0aGUgbGV2ZWwgaXMgdmFsaWQgKi8KKwkJbWF4X2xldmVsID0gY3B1aWRfZWF4KGNiLT5sZXZlbCAmIDB4ZmZmZjAwMDApOworCQlpZiAobWF4X2xldmVsIDwgY2ItPmxldmVsIHx8CisJCSAgICBtYXhfbGV2ZWwgPiAoY2ItPmxldmVsIHwgMHhmZmZmKSkKKwkJCWNvbnRpbnVlOworCisJCWNwdWlkX2NvdW50KGNiLT5sZXZlbCwgY2ItPnN1Yl9sZWFmLCAmcmVnc1tDUl9FQVhdLAorCQkJICAgICZyZWdzW0NSX0VCWF0sICZyZWdzW0NSX0VDWF0sICZyZWdzW0NSX0VEWF0pOworCisJCWlmIChyZWdzW2NiLT5yZWddICYgKDEgPDwgY2ItPmJpdCkpCisJCQlzZXRfY3B1X2NhcChjLCBjYi0+ZmVhdHVyZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS90b3BvbG9neS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS90b3BvbG9neS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTdlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RvcG9sb2d5LmMKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENoZWNrIGZvciBleHRlbmRlZCB0b3BvbG9neSBlbnVtZXJhdGlvbiBjcHVpZCBsZWFmIDB4YiBhbmQgaWYgaXQKKyAqIGV4aXN0cywgdXNlIGl0IGZvciBwb3B1bGF0aW5nIGluaXRpYWxfYXBpY2lkIGFuZCBjcHUgdG9wb2xvZ3kKKyAqIGRldGVjdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcGF0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisvKiBsZWFmIDB4YiBTTVQgbGV2ZWwgKi8KKyNkZWZpbmUgU01UX0xFVkVMCTAKKworLyogbGVhZiAweGIgc3ViLWxlYWYgdHlwZXMgKi8KKyNkZWZpbmUgSU5WQUxJRF9UWVBFCTAKKyNkZWZpbmUgU01UX1RZUEUJMQorI2RlZmluZSBDT1JFX1RZUEUJMgorCisjZGVmaW5lIExFQUZCX1NVQlRZUEUoZWN4KQkJKCgoZWN4KSA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpCSgoZWF4KSAmIDB4MWYpCisjZGVmaW5lIExFVkVMX01BWF9TSUJMSU5HUyhlYngpCQkoKGVieCkgJiAweGZmZmYpCisKKy8qCisgKiBDaGVjayBmb3IgZXh0ZW5kZWQgdG9wb2xvZ3kgZW51bWVyYXRpb24gY3B1aWQgbGVhZiAweGIgYW5kIGlmIGl0CisgKiBleGlzdHMsIHVzZSBpdCBmb3IgcG9wdWxhdGluZyBpbml0aWFsX2FwaWNpZCBhbmQgY3B1IHRvcG9sb2d5CisgKiBkZXRlY3Rpb24uCisgKi8KK3ZvaWQgX19jcHVpbml0IGRldGVjdF9leHRlbmRlZF90b3BvbG9neShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHgsIHN1Yl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgaHRfbWFza193aWR0aCwgY29yZV9wbHVzX21hc2tfd2lkdGg7CisJdW5zaWduZWQgaW50IGNvcmVfc2VsZWN0X21hc2ssIGNvcmVfbGV2ZWxfc2libGluZ3M7CisJc3RhdGljIGJvb2wgcHJpbnRlZDsKKworCWlmIChjLT5jcHVpZF9sZXZlbCA8IDB4YikKKwkJcmV0dXJuOworCisJY3B1aWRfY291bnQoMHhiLCBTTVRfTEVWRUwsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJLyoKKwkgKiBjaGVjayBpZiB0aGUgY3B1aWQgbGVhZiAweGIgaXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQuCisJICovCisJaWYgKGVieCA9PSAwIHx8IChMRUFGQl9TVUJUWVBFKGVjeCkgIT0gU01UX1RZUEUpKQorCQlyZXR1cm47CisKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9YVE9QT0xPR1kpOworCisJLyoKKwkgKiBpbml0aWFsIGFwaWMgaWQsIHdoaWNoIGFsc28gcmVwcmVzZW50cyAzMi1iaXQgZXh0ZW5kZWQgeDJhcGljIGlkLgorCSAqLworCWMtPmluaXRpYWxfYXBpY2lkID0gZWR4OworCisJLyoKKwkgKiBQb3B1bGF0ZSBIVCByZWxhdGVkIGluZm9ybWF0aW9uIGZyb20gc3ViLWxlYWYgbGV2ZWwgMC4KKwkgKi8KKwljb3JlX2xldmVsX3NpYmxpbmdzID0gc21wX251bV9zaWJsaW5ncyA9IExFVkVMX01BWF9TSUJMSU5HUyhlYngpOworCWNvcmVfcGx1c19tYXNrX3dpZHRoID0gaHRfbWFza193aWR0aCA9IEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpOworCisJc3ViX2luZGV4ID0gMTsKKwlkbyB7CisJCWNwdWlkX2NvdW50KDB4Yiwgc3ViX2luZGV4LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKworCQkvKgorCQkgKiBDaGVjayBmb3IgdGhlIENvcmUgdHlwZSBpbiB0aGUgaW1wbGVtZW50ZWQgc3ViIGxlYXZlcy4KKwkJICovCisJCWlmIChMRUFGQl9TVUJUWVBFKGVjeCkgPT0gQ09SRV9UWVBFKSB7CisJCQljb3JlX2xldmVsX3NpYmxpbmdzID0gTEVWRUxfTUFYX1NJQkxJTkdTKGVieCk7CisJCQljb3JlX3BsdXNfbWFza193aWR0aCA9IEJJVFNfU0hJRlRfTkVYVF9MRVZFTChlYXgpOworCQkJYnJlYWs7CisJCX0KKworCQlzdWJfaW5kZXgrKzsKKwl9IHdoaWxlIChMRUFGQl9TVUJUWVBFKGVjeCkgIT0gSU5WQUxJRF9UWVBFKTsKKworCWNvcmVfc2VsZWN0X21hc2sgPSAofigtMSA8PCBjb3JlX3BsdXNfbWFza193aWR0aCkpID4+IGh0X21hc2tfd2lkdGg7CisKKwljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBodF9tYXNrX3dpZHRoKQorCQkJCQkJICYgY29yZV9zZWxlY3RfbWFzazsKKwljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgY29yZV9wbHVzX21hc2tfd2lkdGgpOworCS8qCisJICogUmVpbml0IHRoZSBhcGljaWQsIG5vdyB0aGF0IHdlIGhhdmUgZXh0ZW5kZWQgaW5pdGlhbF9hcGljaWQuCisJICovCisJYy0+YXBpY2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIDApOworCisJYy0+eDg2X21heF9jb3JlcyA9IChjb3JlX2xldmVsX3NpYmxpbmdzIC8gc21wX251bV9zaWJsaW5ncyk7CisKKwlpZiAoIXByaW50ZWQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAgIkNQVTogUGh5c2ljYWwgUHJvY2Vzc29yIElEOiAlZFxuIiwKKwkJICAgICAgIGMtPnBoeXNfcHJvY19pZCk7CisJCWlmIChjLT54ODZfbWF4X2NvcmVzID4gMSkKKwkJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFByb2Nlc3NvciBDb3JlIElEOiAlZFxuIiwKKwkJCSAgICAgICBjLT5jcHVfY29yZV9pZCk7CisJCXByaW50ZWQgPSAxOworCX0KKwlyZXR1cm47CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCmluZGV4IGI5ZDFmZjUuLjIyN2IwNDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwpAQCAtNTEsNyArNTEsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB2bXdhcmVfZ2V0X3RzY19raHoodm9pZCkKIHsKLQl1aW50NjRfdCB0c2NfaHo7CisJdWludDY0X3QgdHNjX2h6LCBscGo7CiAJdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OwogCiAJVk1XQVJFX1BPUlQoR0VUSFosIGVheCwgZWJ4LCBlY3gsIGVkeCk7CkBAIC02Miw2ICs2MiwxMyBAQAogCXByaW50ayhLRVJOX0lORk8gIlRTQyBmcmVxIHJlYWQgZnJvbSBoeXBlcnZpc29yIDogJWx1LiUwM2x1IE1IelxuIiwKIAkJCSAodW5zaWduZWQgbG9uZykgdHNjX2h6IC8gMTAwMCwKIAkJCSAodW5zaWduZWQgbG9uZykgdHNjX2h6ICUgMTAwMCk7CisKKwlpZiAoIXByZXNldF9scGopIHsKKwkJbHBqID0gKCh1NjQpdHNjX2h6ICogMTAwMCk7CisJCWRvX2RpdihscGosIEhaKTsKKwkJcHJlc2V0X2xwaiA9IGxwajsKKwl9CisKIAlyZXR1cm4gdHNjX2h6OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggYzg5YTM4Ni4uNmU4NzUyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTgsNyArMTgsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAotI2luY2x1ZGUgImR1bXBzdGFjay5oIgogCiBpbnQgcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pOwogaW50IHBhbmljX29uX2lvX25taTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaCBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhOTNiZS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgQW5kaSBLbGVlbiwgU3VTRSBMYWJzCi0gKi8KLQotI2lmbmRlZiBEVU1QU1RBQ0tfSAotI2RlZmluZSBEVU1QU1RBQ0tfSAotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBTVEFDS1NMT1RTX1BFUl9MSU5FIDgKLSNkZWZpbmUgZ2V0X2JwKGJwKSBhc20oIm1vdmwgJSVlYnAsICUwIiA6ICI9ciIgKGJwKSA6KQotI2Vsc2UKLSNkZWZpbmUgU1RBQ0tTTE9UU19QRVJfTElORSA0Ci0jZGVmaW5lIGdldF9icChicCkgYXNtKCJtb3ZxICUlcmJwLCAlMCIgOiAiPXIiIChicCkgOikKLSNlbmRpZgotCi0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotCi1leHRlcm4gdm9pZAotc2hvd190cmFjZV9sb2dfbHZsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCXVuc2lnbmVkIGxvbmcgKnN0YWNrLCB1bnNpZ25lZCBsb25nIGJwLCBjaGFyICpsb2dfbHZsKTsKLQotZXh0ZXJuIHZvaWQKLXNob3dfc3RhY2tfbG9nX2x2bChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQl1bnNpZ25lZCBsb25nICpzcCwgdW5zaWduZWQgbG9uZyBicCwgY2hhciAqbG9nX2x2bCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgY29kZV9ieXRlczsKLQotLyogVGhlIGZvcm0gb2YgdGhlIHRvcCBvZiB0aGUgZnJhbWUgb24gdGhlIHN0YWNrICovCi1zdHJ1Y3Qgc3RhY2tfZnJhbWUgewotCXN0cnVjdCBzdGFja19mcmFtZSAqbmV4dF9mcmFtZTsKLQl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOwotfTsKLQotc3RydWN0IHN0YWNrX2ZyYW1lX2lhMzIgewotICAgIHUzMiBuZXh0X2ZyYW1lOwotICAgIHUzMiByZXR1cm5fYWRkcmVzczsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZXdpbmRfZnJhbWVfcG9pbnRlcihpbnQgbikKLXsKLQlzdHJ1Y3Qgc3RhY2tfZnJhbWUgKmZyYW1lOwotCi0JZ2V0X2JwKGZyYW1lKTsKLQotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0Jd2hpbGUgKG4tLSkgewotCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoJmZyYW1lLT5uZXh0X2ZyYW1lLCBmcmFtZSkpCi0JCQlicmVhazsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiAodW5zaWduZWQgbG9uZylmcmFtZTsKLX0KLQotI2VuZGlmIC8qIERVTVBTVEFDS19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzMyLmMKaW5kZXggMTE1NDBhMS4uMGY2Mzc2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfMzIuYwpAQCAtMTYsOCArMTYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAotI2luY2x1ZGUgImR1bXBzdGFjay5oIgotCiAKIHZvaWQgZHVtcF90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQl1bnNpZ25lZCBsb25nICpzdGFjaywgdW5zaWduZWQgbG9uZyBicCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCAyNzJjOWYxLi41N2EyMWYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCi0jaW5jbHVkZSAiZHVtcHN0YWNrLmgiCiAKICNkZWZpbmUgTl9FWENFUFRJT05fU1RBQ0tTX0VORCBcCiAJCShOX0VYQ0VQVElPTl9TVEFDS1MgKyBERUJVR19TVEtTWi9FWENFUFRJT05fU1RLU1ogLSAyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA2YjE5NjgzLi4yMjdkMDA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUwpAQCAtNjExLDE0ICs2MTEsMTQgQEAKICAqIGNvbXBlbnNhdGluZyBmb3IgdGhlIG9mZnNldCBieSBjaGFuZ2luZyB0byB0aGUgRVNQRklYIHNlZ21lbnQgd2l0aAogICogYSBiYXNlIGFkZHJlc3MgdGhhdCBtYXRjaGVzIGZvciB0aGUgZGlmZmVyZW5jZS4KICAqLworI2RlZmluZSBHRFRfRVNQRklYX1NTIFBFUl9DUFVfVkFSKGdkdF9wYWdlKSArIChHRFRfRU5UUllfRVNQRklYX1NTICogOCkKIAltb3YgJWVzcCwgJWVkeAkJCS8qIGxvYWQga2VybmVsIGVzcCAqLwogCW1vdiBQVF9PTERFU1AoJWVzcCksICVlYXgJLyogbG9hZCB1c2Vyc3BhY2UgZXNwICovCiAJbW92ICVkeCwgJWF4CQkJLyogZWF4OiBuZXcga2VybmVsIGVzcCAqLwogCXN1YiAlZWF4LCAlZWR4CQkJLyogb2Zmc2V0IChsb3cgd29yZCBpcyAwKSAqLwotCVBFUl9DUFUoZ2R0X3BhZ2UsICVlYngpCiAJc2hyICQxNiwgJWVkeAotCW1vdiAlZGwsIEdEVF9FTlRSWV9FU1BGSVhfU1MgKiA4ICsgNCglZWJ4KSAvKiBiaXRzIDE2Li4yMyAqLwotCW1vdiAlZGgsIEdEVF9FTlRSWV9FU1BGSVhfU1MgKiA4ICsgNyglZWJ4KSAvKiBiaXRzIDI0Li4zMSAqLworCW1vdiAlZGwsIEdEVF9FU1BGSVhfU1MgKyA0IC8qIGJpdHMgMTYuLjIzICovCisJbW92ICVkaCwgR0RUX0VTUEZJWF9TUyArIDcgLyogYml0cyAyNC4uMzEgKi8KIAlwdXNobCAkX19FU1BGSVhfU1MKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAogCXB1c2ggJWVheAkJCS8qIG5ldyBrZXJuZWwgZXNwICovCkBAIC03OTEsOSArNzkxLDggQEAKICAqIG5vcm1hbCBzdGFjayBhbmQgYWRqdXN0cyBFU1Agd2l0aCB0aGUgbWF0Y2hpbmcgb2Zmc2V0LgogICovCiAJLyogZml4dXAgdGhlIHN0YWNrICovCi0JUEVSX0NQVShnZHRfcGFnZSwgJWVieCkKLQltb3YgR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDggKyA0KCVlYngpLCAlYWwgLyogYml0cyAxNi4uMjMgKi8KLQltb3YgR0RUX0VOVFJZX0VTUEZJWF9TUyAqIDggKyA3KCVlYngpLCAlYWggLyogYml0cyAyNC4uMzEgKi8KKwltb3YgR0RUX0VTUEZJWF9TUyArIDQsICVhbCAvKiBiaXRzIDE2Li4yMyAqLworCW1vdiBHRFRfRVNQRklYX1NTICsgNywgJWFoIC8qIGJpdHMgMjQuLjMxICovCiAJc2hsICQxNiwgJWVheAogCWFkZGwgJWVzcCwgJWVheAkJCS8qIHRoZSBhZGp1c3RlZCBzdGFjayBwb2ludGVyICovCiAJcHVzaGwgJF9fS0VSTkVMX0RTCkBAIC05MTQsNyArOTEzLDcgQEAKIAkuYmFsaWduIDQKIAkubG9uZyA2NjFiCiAJLmxvbmcgNjYzZgotCS5ieXRlIFg4Nl9GRUFUVVJFX1hNTQorCS53b3JkIFg4Nl9GRUFUVVJFX1hNTQogCS5ieXRlIDY2MmItNjYxYgogCS5ieXRlIDY2NGYtNjYzZgogLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDY0OWVkMTcuLmM1ZWE1Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC0xMDY1LDYgKzEwNjUsNyBAQAogRU5EKFxzeW0pCiAuZW5kbQogCisjZGVmaW5lIElOSVRfVFNTX0lTVCh4KSBQRVJfQ1BVX1ZBUihpbml0X3RzcykgKyAoVFNTX2lzdCArICgoeCkgLSAxKSAqIDgpCiAubWFjcm8gcGFyYW5vaWR6ZXJvZW50cnlfaXN0IHN5bSBkb19zeW0gaXN0CiBFTlRSWShcc3ltKQogCUlOVFJfRlJBTUUKQEAgLTEwNzYsMTAgKzEwNzcsOSBAQAogCVRSQUNFX0lSUVNfT0ZGCiAJbW92cSAlcnNwLCVyZGkJCS8qIHB0X3JlZ3MgcG9pbnRlciAqLwogCXhvcmwgJWVzaSwlZXNpCQkvKiBubyBlcnJvciBjb2RlICovCi0JUEVSX0NQVShpbml0X3RzcywgJXIxMikKLQlzdWJxICRFWENFUFRJT05fU1RLU1osIFRTU19pc3QgKyAoXGlzdCAtIDEpICogOCglcjEyKQorCXN1YnEgJEVYQ0VQVElPTl9TVEtTWiwgSU5JVF9UU1NfSVNUKFxpc3QpCiAJY2FsbCBcZG9fc3ltCi0JYWRkcSAkRVhDRVBUSU9OX1NUS1NaLCBUU1NfaXN0ICsgKFxpc3QgLSAxKSAqIDgoJXIxMikKKwlhZGRxICRFWENFUFRJT05fU1RLU1osIElOSVRfVFNTX0lTVChcaXN0KQogCWptcCBwYXJhbm9pZF9leGl0CS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCiAJQ0ZJX0VORFBST0MKIEVORChcc3ltKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggMzdjM2Q0Yi4uZmY0YzQ1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMzEsNiArMTMxLDEyIEBACiAJbW92c2wKIDE6CiAKKyNpZmRlZiBDT05GSUdfT0xQQ19PUEVORklSTVdBUkUKKwkvKiBzYXZlIE9GVydzIHBnZGlyIHRhYmxlIGZvciBsYXRlciB1c2Ugd2hlbiBjYWxsaW5nIGludG8gT0ZXICovCisJbW92bCAlY3IzLCAlZWF4CisJbW92bCAlZWF4LCBwYShvbHBjX29md19wZ2QpCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCS8qIFRoaXMgaXMgY2FuIG9ubHkgdHJpcCBmb3IgYSBicm9rZW4gYm9vdGxvYWRlci4uLiAqLwogCWNtcHcgJDB4MjA3LCBwYShib290X3BhcmFtcyArIEJQX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwppbmRleCAzZDFlNmYxLi4yMzkwNDZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKQEAgLTIzNCw5ICsyMzQsOCBAQAogCSAqIGluaXQgZGF0YSBzZWN0aW9uIHRpbGwgcGVyIGNwdSBhcmVhcyBhcmUgc2V0IHVwLgogCSAqLwogCW1vdmwJJE1TUl9HU19CQVNFLCVlY3gKLQltb3ZxCWluaXRpYWxfZ3MoJXJpcCksJXJheAotCW1vdnEgICAgJXJheCwlcmR4Ci0Jc2hycQkkMzIsJXJkeAorCW1vdmwJaW5pdGlhbF9ncyglcmlwKSwlZWF4CisJbW92bAlpbml0aWFsX2dzKzQoJXJpcCksJWVkeAogCXdybXNyCQogCiAJLyogZXNpIGlzIHBvaW50ZXIgdG8gcmVhbCBtb2RlIHN0cnVjdHVyZSB3aXRoIGludGVyZXN0aW5nIGluZm8uCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBiYTM5MGQ3Li4zM2RiY2M0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vaHBldC5oPgogCiAjZGVmaW5lIEhQRVRfTUFTSwkJCUNMT0NLU09VUkNFX01BU0soMzIpCi0jZGVmaW5lIEhQRVRfU0hJRlQJCQkyMgogCiAvKiBGU0VDID0gMTBeLTE1CiAgICBOU0VDID0gMTBeLTkgKi8KQEAgLTc4Nyw3ICs3ODYsNiBAQAogCS5yYXRpbmcJCT0gMjUwLAogCS5yZWFkCQk9IHJlYWRfaHBldCwKIAkubWFzawkJPSBIUEVUX01BU0ssCi0JLnNoaWZ0CQk9IEhQRVRfU0hJRlQsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogCS5yZXN1bWUJCT0gaHBldF9yZXN1bWVfY291bnRlciwKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC03OTgsNiArNzk2LDcgQEAKIHN0YXRpYyBpbnQgaHBldF9jbG9ja3NvdXJjZV9yZWdpc3Rlcih2b2lkKQogewogCXU2NCBzdGFydCwgbm93OworCXU2NCBocGV0X2ZyZXE7CiAJY3ljbGVfdCB0MTsKIAogCS8qIFN0YXJ0IHRoZSBjb3VudGVyICovCkBAIC04MzIsOSArODMxLDE1IEBACiAJICogIG11bHQgPSAoaHBldF9wZXJpb2QgKiAyXnNoaWZ0KS8xMF42CiAJICogIG11bHQgPSAoaHBldF9wZXJpb2QgPDwgc2hpZnQpL0ZTRUNfUEVSX05TRUMKIAkgKi8KLQljbG9ja3NvdXJjZV9ocGV0Lm11bHQgPSBkaXZfc2MoaHBldF9wZXJpb2QsIEZTRUNfUEVSX05TRUMsIEhQRVRfU0hJRlQpOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2hwZXQpOworCS8qIE5lZWQgdG8gY29udmVydCBocGV0X3BlcmlvZCAoZnNlYy9jeWMpIHRvIGN5Yy9zZWM6CisJICoKKwkgKiBjeWMvc2VjID0gRlNFQ19QRVJfU0VDL2hwZXRfcGVyaW9kKGZzZWMvY3ljKQorCSAqIGN5Yy9zZWMgPSAoRlNFQ19QRVJfTlNFQyAqIE5TRUNfUEVSX1NFQykvaHBldF9wZXJpb2QKKwkgKi8KKwlocGV0X2ZyZXEgPSBGU0VDX1BFUl9OU0VDICogTlNFQ19QRVJfU0VDOworCWRvX2RpdihocGV0X2ZyZXEsIGhwZXRfcGVyaW9kKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfaHBldCwgKHUzMilocGV0X2ZyZXEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCBhOGYxYjgwLi5hNDc0ZWMzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTIwOCw2ICsyMDgsOSBAQAogewogCS8qIExlbiAqLwogCXN3aXRjaCAoeDg2X2xlbikgeworCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOX1g6CisJCSpnZW5fbGVuID0gc2l6ZW9mKGxvbmcpOworCQlicmVhazsKIAljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8xOgogCQkqZ2VuX2xlbiA9IEhXX0JSRUFLUE9JTlRfTEVOXzE7CiAJCWJyZWFrOwpAQCAtMjUxLDYgKzI1NCwyOSBAQAogCiAJaW5mby0+YWRkcmVzcyA9IGJwLT5hdHRyLmJwX2FkZHI7CiAKKwkvKiBUeXBlICovCisJc3dpdGNoIChicC0+YXR0ci5icF90eXBlKSB7CisJY2FzZSBIV19CUkVBS1BPSU5UX1c6CisJCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9XUklURTsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I6CisJCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9SVzsKKwkJYnJlYWs7CisJY2FzZSBIV19CUkVBS1BPSU5UX1g6CisJCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9FWEVDVVRFOworCQkvKgorCQkgKiB4ODYgaW5zdCBicmVha3BvaW50cyBuZWVkIHRvIGhhdmUgYSBzcGVjaWZpYyB1bmRlZmluZWQgbGVuLgorCQkgKiBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayB1c2Vyc3BhY2UgaXMgbm90IHRyeWluZyB0byBzZXR1cAorCQkgKiBhbiB1bnN1cHBvcnRlZCBsZW5ndGgsIHRvIGdldCBhIHJhbmdlIGJyZWFrcG9pbnQgZm9yIGV4YW1wbGUuCisJCSAqLworCQlpZiAoYnAtPmF0dHIuYnBfbGVuID09IHNpemVvZihsb25nKSkgeworCQkJaW5mby0+bGVuID0gWDg2X0JSRUFLUE9JTlRfTEVOX1g7CisJCQlyZXR1cm4gMDsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIExlbiAqLwogCXN3aXRjaCAoYnAtPmF0dHIuYnBfbGVuKSB7CiAJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8xOgpAQCAtMjcxLDIxICsyOTcsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBUeXBlICovCi0Jc3dpdGNoIChicC0+YXR0ci5icF90eXBlKSB7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1c6Ci0JCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9XUklURTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1cgfCBIV19CUkVBS1BPSU5UX1I6Ci0JCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9SVzsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1g6Ci0JCWluZm8tPnR5cGUgPSBYODZfQlJFQUtQT0lOVF9FWEVDVVRFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIC8qCkBAIC0zMDUsNiArMzE2LDkgQEAKIAlyZXQgPSAtRUlOVkFMOwogCiAJc3dpdGNoIChpbmZvLT5sZW4pIHsKKwljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl9YOgorCQlhbGlnbiA9IHNpemVvZihsb25nKSAtMTsKKwkJYnJlYWs7CiAJY2FzZSBYODZfQlJFQUtQT0lOVF9MRU5fMToKIAkJYWxpZ24gPSAwOwogCQlicmVhazsKQEAgLTQ2Niw2ICs0ODAsMTMgQEAKIAogCQlwZXJmX2JwX2V2ZW50KGJwLCBhcmdzLT5yZWdzKTsKIAorCQkvKgorCQkgKiBTZXQgdXAgcmVzdW1lIGZsYWcgdG8gYXZvaWQgYnJlYWtwb2ludCByZWN1cnNpb24gd2hlbgorCQkgKiByZXR1cm5pbmcgYmFjayB0byBvcmlnaW4uCisJCSAqLworCQlpZiAoYnAtPmh3LmluZm8udHlwZSA9PSBYODZfQlJFQUtQT0lOVF9FWEVDVVRFKQorCQkJYXJncy0+cmVncy0+ZmxhZ3MgfD0gWDg2X0VGTEFHU19SRjsKKwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCmluZGV4IGM0NDQ0YmMuLjFmMTFmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwpAQCAtNTksMTggKzU5LDE4IEBACiAJc3R0cygpOwogfQogCi12b2lkIF9fY3B1aW5pdCBpbml0X3RocmVhZF94c3RhdGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBpbml0X3RocmVhZF94c3RhdGUodm9pZCkKIHsKKwkvKgorCSAqIE5vdGUgdGhhdCB4c3RhdGVfc2l6ZSBtaWdodCBiZSBvdmVyd3JpdGVuIGxhdGVyIGR1cmluZworCSAqIHhzYXZlX2luaXQoKS4KKwkgKi8KKwogCWlmICghSEFWRV9IV0ZQKSB7CiAJCXhzdGF0ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpMzg3X3NvZnRfc3RydWN0KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChjcHVfaGFzX3hzYXZlKSB7Ci0JCXhzYXZlX2NudHh0X2luaXQoKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChjcHVfaGFzX2Z4c3IpCiAJCXhzdGF0ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QpOwogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTg0LDYgKzg0LDcgQEAKICAqIENhbGxlZCBhdCBib290dXAgdG8gc2V0IHVwIHRoZSBpbml0aWFsIEZQVSBzdGF0ZSB0aGF0IGlzIGxhdGVyIGNsb25lZAogICogaW50byBhbGwgcHJvY2Vzc2VzLgogICovCisKIHZvaWQgX19jcHVpbml0IGZwdV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBvbGRjcjAgPSByZWFkX2NyMCgpOwpAQCAtOTMsMTkgKzk0LDI0IEBACiAKIAl3cml0ZV9jcjAob2xkY3IwICYgfihYODZfQ1IwX1RTfFg4Nl9DUjBfRU0pKTsgLyogY2xlYXIgVFMgYW5kIEVNICovCiAKLQkvKgotCSAqIEJvb3QgcHJvY2Vzc29yIHRvIHNldHVwIHRoZSBGUCBhbmQgZXh0ZW5kZWQgc3RhdGUgY29udGV4dCBpbmZvLgotCSAqLwogCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQlpbml0X3RocmVhZF94c3RhdGUoKTsKLQl4c2F2ZV9pbml0KCk7CiAKIAlteGNzcl9mZWF0dXJlX21hc2tfaW5pdCgpOwogCS8qIGNsZWFuIHN0YXRlIGluIGluaXQgKi8KIAljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyA9IDA7CiAJY2xlYXJfdXNlZF9tYXRoKCk7CiB9Ci0jZW5kaWYJLyogQ09ORklHX1g4Nl82NCAqLworCisjZWxzZQkvKiBDT05GSUdfWDg2XzY0ICovCisKK3ZvaWQgX19jcHVpbml0IGZwdV9pbml0KHZvaWQpCit7CisJaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCisJCWluaXRfdGhyZWFkX3hzdGF0ZSgpOworfQorCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwogCiB2b2lkIGZwdV9maW5pdChzdHJ1Y3QgZnB1ICpmcHUpCiB7CkBAIC0xOTEsNiArMTk3LDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJc2FuaXRpemVfaTM4N19zdGF0ZSh0YXJnZXQpOworCiAJcmV0dXJuIHVzZXJfcmVnc2V0X2NvcHlvdXQoJnBvcywgJmNvdW50LCAma2J1ZiwgJnVidWYsCiAJCQkJICAgJnRhcmdldC0+dGhyZWFkLmZwdS5zdGF0ZS0+ZnhzYXZlLCAwLCAtMSk7CiB9CkBAIC0yMDgsNiArMjE2LDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJc2FuaXRpemVfaTM4N19zdGF0ZSh0YXJnZXQpOworCiAJcmV0ID0gdXNlcl9yZWdzZXRfY29weWluKCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLAogCQkJCSAmdGFyZ2V0LT50aHJlYWQuZnB1LnN0YXRlLT5meHNhdmUsIDAsIC0xKTsKIApAQCAtNDQ3LDYgKzQ1Nyw4IEBACiAJCQkJCSAgIC0xKTsKIAl9CiAKKwlzYW5pdGl6ZV9pMzg3X3N0YXRlKHRhcmdldCk7CisKIAlpZiAoa2J1ZiAmJiBwb3MgPT0gMCAmJiBjb3VudCA9PSBzaXplb2YoZW52KSkgewogCQljb252ZXJ0X2Zyb21fZnhzcihrYnVmLCB0YXJnZXQpOwogCQlyZXR1cm4gMDsKQEAgLTQ2OCw2ICs0ODAsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlzYW5pdGl6ZV9pMzg3X3N0YXRlKHRhcmdldCk7CisKIAlpZiAoIUhBVkVfSFdGUCkKIAkJcmV0dXJuIGZwcmVnc19zb2Z0X3NldCh0YXJnZXQsIHJlZ3NldCwgcG9zLCBjb3VudCwga2J1ZiwgdWJ1Zik7CiAKQEAgLTUzNCw2ICs1NDgsOSBAQAogCXN0cnVjdCBfZnBzdGF0ZV9pYTMyIF9fdXNlciAqZnggPSBidWY7CiAJaW50IGVyciA9IDA7CiAKKworCXNhbml0aXplX2kzODdfc3RhdGUodHNrKTsKKwogCS8qCiAJICogRm9yIGxlZ2FjeSBjb21wYXRpYmxlLCB3ZSBhbHdheXMgc2V0IEZQL1NTRSBiaXRzIGluIHRoZSBiaXQKIAkgKiB2ZWN0b3Igd2hpbGUgc2F2aW5nIHRoZSBzdGF0ZSB0byB0aGUgdXNlciBjb250ZXh0LgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggNjc1ODc5Yi4uMWJmYjZjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMjYsMTYgKzEyNiwyMiBAQAogfQogCiAvKgotICogQ2hlY2sgZm9yIHRoZSBSRVggcHJlZml4IHdoaWNoIGNhbiBvbmx5IGV4aXN0IG9uIFg4Nl82NAotICogWDg2XzMyIGFsd2F5cyByZXR1cm5zIDAKKyAqIFNraXAgdGhlIHByZWZpeGVzIG9mIHRoZSBpbnN0cnVjdGlvbi4KICAqLwotc3RhdGljIGludCBfX2twcm9iZXMgaXNfUkVYX3ByZWZpeChrcHJvYmVfb3Bjb2RlX3QgKmluc24pCitzdGF0aWMga3Byb2JlX29wY29kZV90ICpfX2twcm9iZXMgc2tpcF9wcmVmaXhlcyhrcHJvYmVfb3Bjb2RlX3QgKmluc24pCiB7CisJaW5zbl9hdHRyX3QgYXR0cjsKKworCWF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKChpbnNuX2J5dGVfdCkqaW5zbik7CisJd2hpbGUgKGluYXRfaXNfbGVnYWN5X3ByZWZpeChhdHRyKSkgeworCQlpbnNuKys7CisJCWF0dHIgPSBpbmF0X2dldF9vcGNvZGVfYXR0cmlidXRlKChpbnNuX2J5dGVfdCkqaW5zbik7CisJfQogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAoKCppbnNuICYgMHhmMCkgPT0gMHg0MCkKLQkJcmV0dXJuIDE7CisJaWYgKGluYXRfaXNfcmV4X3ByZWZpeChhdHRyKSkKKwkJaW5zbisrOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuIGluc247CiB9CiAKIC8qCkBAIC0yNzIsNiArMjc4LDkgQEAKICAqLwogc3RhdGljIGludCBfX2twcm9iZXMgaXNfSUZfbW9kaWZpZXIoa3Byb2JlX29wY29kZV90ICppbnNuKQogeworCS8qIFNraXAgcHJlZml4ZXMgKi8KKwlpbnNuID0gc2tpcF9wcmVmaXhlcyhpbnNuKTsKKwogCXN3aXRjaCAoKmluc24pIHsKIAljYXNlIDB4ZmE6CQkvKiBjbGkgKi8KIAljYXNlIDB4ZmI6CQkvKiBzdGkgKi8KQEAgLTI4MCwxMyArMjg5LDYgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyoKLQkgKiBvbiBYODZfNjQsIDB4NDAtMHg0ZiBhcmUgUkVYIHByZWZpeGVzIHNvIHdlIG5lZWQgdG8gbG9vawotCSAqIGF0IHRoZSBuZXh0IGJ5dGUgaW5zdGVhZC4uIGJ1dCBvZiBjb3Vyc2Ugbm90IHJlY3Vyc2UgaW5maW5pdGVseQotCSAqLwotCWlmIChpc19SRVhfcHJlZml4KGluc24pKQotCQlyZXR1cm4gaXNfSUZfbW9kaWZpZXIoKytpbnNuKTsKLQogCXJldHVybiAwOwogfQogCkBAIC04MDMsOSArODA1LDggQEAKIAl1bnNpZ25lZCBsb25nIG9yaWdfaXAgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwogCWtwcm9iZV9vcGNvZGVfdCAqaW5zbiA9IHAtPmFpbnNuLmluc247CiAKLQkvKnNraXAgdGhlIFJFWCBwcmVmaXgqLwotCWlmIChpc19SRVhfcHJlZml4KGluc24pKQotCQlpbnNuKys7CisJLyogU2tpcCBwcmVmaXhlcyAqLworCWluc24gPSBza2lwX3ByZWZpeGVzKGluc24pOwogCiAJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfVEY7CiAJc3dpdGNoICgqaW5zbikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21yc3QuYyBiL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMKaW5kZXggNTkxNWUwYi4uNzlhZTY4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21yc3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXJzdC5jCkBAIC0yNSw4ICsyNSwzNCBAQAogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9hcGJfdGltZXIuaD4KIAorLyoKKyAqIHRoZSBjbG9ja2V2ZW50IGRldmljZXMgb24gTW9vcmVzdG93bi9NZWRmaWVsZCBjYW4gYmUgQVBCVCBvciBMQVBJQyBjbG9jaywKKyAqIGNtZGxpbmUgb3B0aW9uIHg4Nl9tcnN0X3RpbWVyIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uCisgKiB0byBwcmVmZXIgb25lIG9yIHRoZSBvdGhlci4KKyAqIGF0IHJ1bnRpbWUsIHRoZXJlIGFyZSBiYXNpY2FsbHkgdGhyZWUgdGltZXIgY29uZmlndXJhdGlvbnM6CisgKiAxLiBwZXIgY3B1IGFwYnQgY2xvY2sgb25seQorICogMi4gcGVyIGNwdSBhbHdheXMtb24gbGFwaWMgY2xvY2tzIG9ubHksIHRoaXMgaXMgUGVud2VsbC9NZWRmaWVsZCBvbmx5CisgKiAzLiBwZXIgY3B1IGxhcGljIGNsb2NrIChDM1NUT1ApIGFuZCBvbmUgYXBidCBjbG9jaywgd2l0aCBicm9hZGNhc3QuCisgKgorICogYnkgZGVmYXVsdCAod2l0aG91dCBjbWRsaW5lIG9wdGlvbiksIHBsYXRmb3JtIGNvZGUgZmlyc3QgZGV0ZWN0cyBjcHUgdHlwZQorICogdG8gc2VlIGlmIHdlIGFyZSBvbiBsaW5jcm9mdCBvciBwZW53ZWxsLCB0aGVuIHNldCB1cCBib3RoIGxhcGljIG9yIGFwYnQKKyAqIGNsb2NrcyBhY2NvcmRpbmdseS4KKyAqIGkuZS4gYnkgZGVmYXVsdCwgbWVkZmllbGQgdXNlcyBjb25maWd1cmF0aW9uICMyLCBtb29yZXN0b3duIHVzZXMgIzEuCisgKiBjb25maWcgIzMgaXMgc3VwcG9ydGVkIGJ1dCBub3QgcmVjb21tZW5kZWQgb24gbWVkZmllbGQuCisgKgorICogcmF0aW5nIGFuZCBmZWF0dXJlIHN1bW1hcnk6CisgKiBsYXBpYyAod2l0aCBDM1NUT1ApIC0tLS0tLS0tLSAxMDAKKyAqIGFwYnQgKGFsd2F5cy1vbikgLS0tLS0tLS0tLS0tIDExMAorICogbGFwaWMgKGFsd2F5cy1vbixBUkFUKSAtLS0tLS0gMTUwCisgKi8KKworX19jcHVpbml0ZGF0YSBlbnVtIG1yc3RfdGltZXJfb3B0aW9ucyBtcnN0X3RpbWVyX29wdGlvbnM7CisKIHN0YXRpYyB1MzIgc2ZpX210aW1lcl91c2FnZVtTRklfTVRNUl9NQVhfTlVNXTsKIHN0YXRpYyBzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5IHNmaV9tdGltZXJfYXJyYXlbU0ZJX01UTVJfTUFYX05VTV07CitlbnVtIG1yc3RfY3B1X3R5cGUgX19tcnN0X2NwdV9jaGlwOworRVhQT1JUX1NZTUJPTF9HUEwoX19tcnN0X2NwdV9jaGlwKTsKKwogaW50IHNmaV9tdGltZXJfbnVtOwogCiBzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSBzZmlfbXJ0Y19hcnJheVtTRklfTVJUQ19NQVhdOwpAQCAtMTY3LDE4ICsxOTMsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogdGhlIHNlY29uZGFyeSBjbG9jayBpbiBNb29yZXN0b3duIGNhbiBiZSBBUEJUIG9yIExBUElDIGNsb2NrLCBkZWZhdWx0IHRvCi0gKiBBUEJUIGJ1dCBjbWRsaW5lIG9wdGlvbiBjYW4gYWxzbyBvdmVycmlkZSBpdC4KLSAqLwotc3RhdGljIHZvaWQgX19jcHVpbml0IG1yc3Rfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCi17Ci0JLyogcmVzdG9yZSBkZWZhdWx0IGxhcGljIGNsb2NrIGlmIGRpc2FibGVkIGJ5IGNtZGxpbmUgKi8KLQlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkKLQkJcmV0dXJuIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKCk7Ci0JYXBidF9zZXR1cF9zZWNvbmRhcnlfY2xvY2soKTsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG1yc3RfY2FsaWJyYXRlX3RzYyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlOwpAQCAtMTk1LDYgKzIwOSwyMSBAQAogCiB2b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQogeworCXN3aXRjaCAobXJzdF90aW1lcl9vcHRpb25zKSB7CisJY2FzZSBNUlNUX1RJTUVSX0FQQlRfT05MWToKKwkJYnJlYWs7CisJY2FzZSBNUlNUX1RJTUVSX0xBUElDX0FQQlQ6CisJCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHNldHVwX2Jvb3RfQVBJQ19jbG9jazsKKwkJeDg2X2NwdWluaXQuc2V0dXBfcGVyY3B1X2Nsb2NrZXYgPSBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVJBVCkpCisJCQlicmVhazsKKwkJeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gc2V0dXBfYm9vdF9BUElDX2Nsb2NrOworCQl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrOworCQlyZXR1cm47CisJfQorCS8qIHdlIG5lZWQgYXQgbGVhc3Qgb25lIEFQQiB0aW1lciAqLwogCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01UTVIsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tdG1yKTsKIAlwcmVfaW5pdF9hcGljX0lSUTAoKTsKIAlhcGJ0X3RpbWVfaW5pdCgpOwpAQCAtMjA1LDE2ICsyMzQsMjEgQEAKIAlzZmlfdGFibGVfcGFyc2UoU0ZJX1NJR19NUlRDLCBOVUxMLCBOVUxMLCBzZmlfcGFyc2VfbXJ0Yyk7CiB9CiAKLS8qCi0gKiBpZiB3ZSB1c2UgcGVyIGNwdSBhcGIgdGltZXIsIHRoZSBib290Y2xvY2sgYWxyZWFkeSBzZXR1cC4gaWYgd2UgdXNlIGxhcGljCi0gKiB0aW1lciBhbmQgb25lIGFwYnQgdGltZXIgZm9yIGJyb2FkY2FzdCwgd2UgbmVlZCB0byBzZXQgdXAgbGFwaWMgYm9vdCBjbG9jay4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG1yc3Rfc2V0dXBfYm9vdF9jbG9jayh2b2lkKQordm9pZCBfX2NwdWluaXQgbXJzdF9hcmNoX3NldHVwKHZvaWQpCiB7Ci0JcHJfaW5mbygiJXM6IHBlciBjcHUgYXBidCBmbGFnICVkIFxuIiwgX19mdW5jX18sIGRpc2FibGVfYXBidF9wZXJjcHUpOwotCWlmIChkaXNhYmxlX2FwYnRfcGVyY3B1KQotCQlzZXR1cF9ib290X0FQSUNfY2xvY2soKTsKLX07CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHgyNykKKwkJX19tcnN0X2NwdV9jaGlwID0gTVJTVF9DUFVfQ0hJUF9QRU5XRUxMOworCWVsc2UgaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDYgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gMHgyNikKKwkJX19tcnN0X2NwdV9jaGlwID0gTVJTVF9DUFVfQ0hJUF9MSU5DUk9GVDsKKwllbHNlIHsKKwkJcHJfZXJyKCJVbmtub3duIE1vb3Jlc3Rvd24gQ1BVICglZDolZCksIGRlZmF1bHQgdG8gTGluY3JvZnRcbiIsCisJCQlib290X2NwdV9kYXRhLng4NiwgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwpOworCQlfX21yc3RfY3B1X2NoaXAgPSBNUlNUX0NQVV9DSElQX0xJTkNST0ZUOworCX0KKwlwcl9kZWJ1ZygiTW9vcmVzdG93biBDUFUgJXMgaWRlbnRpZmllZFxuIiwKKwkJKF9fbXJzdF9jcHVfY2hpcCA9PSBNUlNUX0NQVV9DSElQX0xJTkNST0ZUKSA/CisJCSJMaW5jcm9mdCIgOiAiUGVud2VsbCIpOworfQogCiAvKiBNSUQgc3lzdGVtcyBkb24ndCBoYXZlIGk4MDQyIGNvbnRyb2xsZXIgKi8KIHN0YXRpYyBpbnQgbXJzdF9pODA0Ml9kZXRlY3Qodm9pZCkKQEAgLTIzMiwxMSArMjY2LDEzIEBACiAJeDg2X2luaXQucmVzb3VyY2VzLnJlc2VydmVfcmVzb3VyY2VzID0geDg2X2luaXRfbm9vcDsKIAogCXg4Nl9pbml0LnRpbWVycy50aW1lcl9pbml0ID0gbXJzdF90aW1lX2luaXQ7Ci0JeDg2X2luaXQudGltZXJzLnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gbXJzdF9zZXR1cF9ib290X2Nsb2NrOworCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IHg4Nl9pbml0X25vb3A7CiAKIAl4ODZfaW5pdC5pcnFzLnByZV92ZWN0b3JfaW5pdCA9IHg4Nl9pbml0X25vb3A7CiAKLQl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IG1yc3Rfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrOworCXg4Nl9pbml0Lm9lbS5hcmNoX3NldHVwID0gbXJzdF9hcmNoX3NldHVwOworCisJeDg2X2NwdWluaXQuc2V0dXBfcGVyY3B1X2Nsb2NrZXYgPSBhcGJ0X3NldHVwX3NlY29uZGFyeV9jbG9jazsKIAogCXg4Nl9wbGF0Zm9ybS5jYWxpYnJhdGVfdHNjID0gbXJzdF9jYWxpYnJhdGVfdHNjOwogCXg4Nl9wbGF0Zm9ybS5pODA0Ml9kZXRlY3QgPSBtcnN0X2k4MDQyX2RldGVjdDsKQEAgLTI1MCwzICsyODYsMjYgQEAKIAl4ODZfaW5pdC5tcHBhcnNlLmdldF9zbXBfY29uZmlnID0geDg2X2luaXRfdWludF9ub29wOwogCiB9CisKKy8qCisgKiBpZiB1c2VyIGRvZXMgbm90IHdhbnQgdG8gdXNlIHBlciBDUFUgYXBiIHRpbWVyLCBqdXN0IGdpdmUgaXQgYSBsb3dlciByYXRpbmcKKyAqIHRoYW4gbG9jYWwgYXBpYyB0aW1lciBhbmQgc2tpcCB0aGUgbGF0ZSBwZXIgY3B1IHRpbWVyIGluaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBzZXR1cF94ODZfbXJzdF90aW1lcihjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcCgiYXBidF9vbmx5IiwgYXJnKSA9PSAwKQorCQltcnN0X3RpbWVyX29wdGlvbnMgPSBNUlNUX1RJTUVSX0FQQlRfT05MWTsKKwllbHNlIGlmIChzdHJjbXAoImxhcGljX2FuZF9hcGJ0IiwgYXJnKSA9PSAwKQorCQltcnN0X3RpbWVyX29wdGlvbnMgPSBNUlNUX1RJTUVSX0xBUElDX0FQQlQ7CisJZWxzZSB7CisJCXByX3dhcm5pbmcoIlg4NiBNUlNUIHRpbWVyIG9wdGlvbiAlcyBub3QgcmVjb2duaXNlZCIKKwkJCSAgICIgdXNlIHg4Nl9tcnN0X3RpbWVyPWFwYnRfb25seSBvciBsYXBpY19hbmRfYXBidFxuIiwKKwkJCSAgIGFyZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KK19fc2V0dXAoIng4Nl9tcnN0X3RpbWVyPSIsIHNldHVwX3g4Nl9tcnN0X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jCmluZGV4IDgyOTcxNjAuLjBlMGNkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMKKysrIGIvYXJjaC94ODYva2VybmVsL29scGMuYwpAQCAtMjEsMTAgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vb2xwYy5oPgotCi0jaWZkZWYgQ09ORklHX09QRU5fRklSTVdBUkUKLSNpbmNsdWRlIDxhc20vb2Z3Lmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vb2xwY19vZncuaD4KIAogc3RydWN0IG9scGNfcGxhdGZvcm1fdCBvbHBjX3BsYXRmb3JtX2luZm87CiBFWFBPUlRfU1lNQk9MX0dQTChvbHBjX3BsYXRmb3JtX2luZm8pOwpAQCAtMTQ1LDcgKzE0Miw3IEBACiAJICogVGhlIE9CRiBmbGFnIHdpbGwgc29tZXRpbWVzIG1pc2JlaGF2ZSBkdWUgdG8gd2hhdCB3ZSBiZWxpZXZlCiAJICogaXMgYSBoYXJkd2FyZSBxdWlyay4uCiAJICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9scGMtZWM6ICBydW5uaW5nIGNtZCAweCV4XG4iLCBjbWQpOworCXByX2RldmVsKCJvbHBjLWVjOiAgcnVubmluZyBjbWQgMHgleFxuIiwgY21kKTsKIAlvdXRiKGNtZCwgMHg2Yyk7CiAKIAlpZiAod2FpdF9vbl9pYmYoMHg2YywgMCkpIHsKQEAgLTE2Miw4ICsxNTksNyBAQAogCQkJCQkJIiBFQyBhY2NlcHQgZGF0YSFcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIm9scGMtZWM6ICBzZW5kaW5nIGNtZCBhcmcgMHgleFxuIiwKLQkJCQkJaW5idWZbaV0pOworCQkJcHJfZGV2ZWwoIm9scGMtZWM6ICBzZW5kaW5nIGNtZCBhcmcgMHgleFxuIiwgaW5idWZbaV0pOwogCQkJb3V0YihpbmJ1ZltpXSwgMHg2OCk7CiAJCX0KIAl9CkBAIC0xNzYsOCArMTcyLDcgQEAKIAkJCQlnb3RvIHJlc3RhcnQ7CiAJCQl9CiAJCQlvdXRidWZbaV0gPSBpbmIoMHg2OCk7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAib2xwYy1lYzogIHJlY2VpdmVkIDB4JXhcbiIsCi0JCQkJCW91dGJ1ZltpXSk7CisJCQlwcl9kZXZlbCgib2xwYy1lYzogIHJlY2VpdmVkIDB4JXhcbiIsIG91dGJ1ZltpXSk7CiAJCX0KIAl9CiAKQEAgLTE4OCwxNCArMTgzLDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvbHBjX2VjX2NtZCk7CiAKLSNpZmRlZiBDT05GSUdfT1BFTl9GSVJNV0FSRQorI2lmZGVmIENPTkZJR19PTFBDX09QRU5GSVJNV0FSRQogc3RhdGljIHZvaWQgX19pbml0IHBsYXRmb3JtX2RldGVjdCh2b2lkKQogewogCXNpemVfdCBwcm9wc2l6ZTsKIAlfX2JlMzIgcmV2OworCWNvbnN0IHZvaWQgKmFyZ3NbXSA9IHsgTlVMTCwgImJvYXJkLXJldmlzaW9uLWludCIsICZyZXYsICh2b2lkICopNCB9OworCXZvaWQgKnJlc1tdID0geyAmcHJvcHNpemUgfTsKIAotCWlmIChvZncoImdldHByb3AiLCA0LCAxLCBOVUxMLCAiYm9hcmQtcmV2aXNpb24taW50IiwgJnJldiwgNCwKLQkJCSZwcm9wc2l6ZSkgfHwgcHJvcHNpemUgIT0gNCkgeworCWlmIChvbHBjX29mdygiZ2V0cHJvcCIsIGFyZ3MsIHJlcykgfHwgcHJvcHNpemUgIT0gNCkgewogCQlwcmludGsoS0VSTl9FUlIgIm9mdzogZ2V0cHJvcCBjYWxsIGZhaWxlZCFcbiIpOwogCQlyZXYgPSBjcHVfdG9fYmUzMigwKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvb2xwY19vZncuYyBiL2FyY2gveDg2L2tlcm5lbC9vbHBjX29mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMThhYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvb2xwY19vZncuYwpAQCAtMCwwICsxLDEwNiBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL29scGNfb2Z3Lmg+CisKKy8qIGFkZHJlc3Mgb2YgT0ZXIGNhbGxiYWNrIGludGVyZmFjZTsgd2lsbCBiZSBOVUxMIGlmIE9GVyBpc24ndCBmb3VuZCAqLworc3RhdGljIGludCAoKm9scGNfb2Z3X2NpZikoaW50ICopOworCisvKiBwYWdlIGRpciBlbnRyeSBjb250YWluaW5nIE9GVydzIHBnZGlyIHRhYmxlOyBmaWxsZWQgaW4gYnkgaGVhZF8zMi5TICovCit1MzIgb2xwY19vZndfcGdkIF9faW5pdGRhdGE7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sob2Z3X2xvY2spOworCisjZGVmaW5lIE1BWEFSR1MgMTAKKwordm9pZCBfX2luaXQgc2V0dXBfb2xwY19vZndfcGdkKHZvaWQpCit7CisJcGdkX3QgKmJhc2UsICpvZndfcGRlOworCisJaWYgKCFvbHBjX29md19jaWYpCisJCXJldHVybjsKKworCS8qIGZldGNoIE9GVydzIFBERSAqLworCWJhc2UgPSBlYXJseV9pb3JlbWFwKG9scGNfb2Z3X3BnZCwgc2l6ZW9mKG9scGNfb2Z3X3BnZCkgKiBQVFJTX1BFUl9QR0QpOworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZW1hcCBPRlcncyBwZ2QgLSBkaXNhYmxpbmcgT0ZXIVxuIik7CisJCW9scGNfb2Z3X2NpZiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJb2Z3X3BkZSA9ICZiYXNlW09MUENfT0ZXX1BERV9OUl07CisKKwkvKiBpbnN0YWxsIE9GVydzIFBERSBwZXJtYW5lbnRseSBpbnRvIHRoZSBrZXJuZWwncyBwZ3RhYmxlICovCisJc2V0X3BnZCgmc3dhcHBlcl9wZ19kaXJbT0xQQ19PRldfUERFX05SXSwgKm9md19wZGUpOworCS8qIGltcGxpY2l0IG9wdGltaXphdGlvbiBiYXJyaWVyIGhlcmUgZHVlIHRvIHVuaW5saW5lIGZ1bmN0aW9uIHJldHVybiAqLworCisJZWFybHlfaW91bm1hcChiYXNlLCBzaXplb2Yob2xwY19vZndfcGdkKSAqIFBUUlNfUEVSX1BHRCk7Cit9CisKK2ludCBfX29scGNfb2Z3KGNvbnN0IGNoYXIgKm5hbWUsIGludCBucl9hcmdzLCBjb25zdCB2b2lkICoqYXJncywgaW50IG5yX3JlcywKKwkJdm9pZCAqKnJlcykKK3sKKwlpbnQgb2Z3X2FyZ3NbTUFYQVJHUyArIDNdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCwgaSwgKnA7CisKKwlCVUdfT04obnJfYXJncyArIG5yX3JlcyA+IE1BWEFSR1MpOworCisJaWYgKCFvbHBjX29md19jaWYpCisJCXJldHVybiAtRUlPOworCisJb2Z3X2FyZ3NbMF0gPSAoaW50KW5hbWU7CisJb2Z3X2FyZ3NbMV0gPSBucl9hcmdzOworCW9md19hcmdzWzJdID0gbnJfcmVzOworCisJcCA9ICZvZndfYXJnc1szXTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYXJnczsgaSsrLCBwKyspCisJCSpwID0gKGludClhcmdzW2ldOworCisJLyogY2FsbCBpbnRvIG9mdyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZvZndfbG9jaywgZmxhZ3MpOworCXJldCA9IG9scGNfb2Z3X2NpZihvZndfYXJncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2Z3X2xvY2ssIGZsYWdzKTsKKworCWlmICghcmV0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9yZXM7IGkrKywgcCsrKQorCQkJKigoaW50ICopcmVzW2ldKSA9ICpwOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX29scGNfb2Z3KTsKKworLyogT0ZXIGNpZiBfc2hvdWxkXyBiZSBhYm92ZSB0aGlzIGFkZHJlc3MgKi8KKyNkZWZpbmUgT0ZXX01JTiAweGZmMDAwMDAwCisKKy8qIE9GVyBzdGFydHMgb24gYSAxTUIgYm91bmRhcnkgKi8KKyNkZWZpbmUgT0ZXX0JPVU5EICgxPDwyMCkKKwordm9pZCBfX2luaXQgb2xwY19vZndfZGV0ZWN0KHZvaWQpCit7CisJc3RydWN0IG9scGNfb2Z3X2hlYWRlciAqaGRyID0gJmJvb3RfcGFyYW1zLm9scGNfb2Z3X2hlYWRlcjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJLyogZW5zdXJlIE9GVyBib290ZWQgdXMgYnkgY2hlY2tpbmcgZm9yICJPRlcgIiBzdHJpbmcgKi8KKwlpZiAoaGRyLT5vZndfbWFnaWMgIT0gT0xQQ19PRldfU0lHKQorCQlyZXR1cm47CisKKwlvbHBjX29md19jaWYgPSAoaW50ICgqKShpbnQgKikpaGRyLT5jaWZfaGFuZGxlcjsKKworCWlmICgodW5zaWduZWQgbG9uZylvbHBjX29md19jaWYgPCBPRldfTUlOKSB7CisJCXByaW50ayhLRVJOX0VSUiAiT0ZXIGRldGVjdGVkLCBidXQgY2lmIGhhcyBpbnZhbGlkIGFkZHJlc3MgMHglbHggLSBkaXNhYmxpbmcuXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nKW9scGNfb2Z3X2NpZik7CisJCW9scGNfb2Z3X2NpZiA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKiBkZXRlcm1pbmUgd2hlcmUgT0ZXIHN0YXJ0cyBpbiBtZW1vcnkgKi8KKwlzdGFydCA9IHJvdW5kX2Rvd24oKHVuc2lnbmVkIGxvbmcpb2xwY19vZndfY2lmLCBPRldfQk9VTkQpOworCXByaW50ayhLRVJOX0lORk8gIk9GVyBkZXRlY3RlZCBpbiBtZW1vcnksIGNpZiBAIDB4JWx4IChyZXNlcnZpbmcgdG9wICVsZE1CKVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKW9scGNfb2Z3X2NpZiwgKC1zdGFydCkgPj4gMjApOworCXJlc2VydmVfdG9wX2FkZHJlc3MoLXN0YXJ0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDRiN2UzZDguLjlmMDdjZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWxnYXJ5Lmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgorI2luY2x1ZGUgPGFzbS94ZW4vc3dpb3RsYi14ZW4uaD4KIAogc3RhdGljIGludCBmb3JiaWRfZGFjIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTEzMiw3ICsxMzMsNyBAQAogCS8qIGZyZWUgdGhlIHJhbmdlIHNvIGlvbW11IGNvdWxkIGdldCBzb21lIHJhbmdlIGxlc3MgdGhhbiA0RyAqLwogCWRtYTMyX2ZyZWVfYm9vdG1lbSgpOwogCi0JaWYgKHBjaV9zd2lvdGxiX2RldGVjdCgpKQorCWlmIChwY2lfeGVuX3N3aW90bGJfZGV0ZWN0KCkgfHwgcGNpX3N3aW90bGJfZGV0ZWN0KCkpCiAJCWdvdG8gb3V0OwogCiAJZ2FydF9pb21tdV9ob2xlX2luaXQoKTsKQEAgLTE0NCw2ICsxNDUsOCBAQAogCS8qIG5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciBnYXJ0X2lvbW11X2hvbGVfaW5pdCAqLwogCWFtZF9pb21tdV9kZXRlY3QoKTsKIG91dDoKKwlwY2lfeGVuX3N3aW90bGJfaW5pdCgpOworCiAJcGNpX3N3aW90bGJfaW5pdCgpOwogfQogCkBAIC0yOTYsNyArMjk5LDcgQEAKICNlbmRpZgogCXg4Nl9pbml0LmlvbW11LmlvbW11X2luaXQoKTsKIAotCWlmIChzd2lvdGxiKSB7CisJaWYgKHN3aW90bGIgfHwgeGVuX3N3aW90bGIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogIgogCQkgICAgICAgIlVzaW5nIHNvZnR3YXJlIGJvdW5jZSBidWZmZXJpbmcgZm9yIElPIChTV0lPVExCKVxuIik7CiAJCXN3aW90bGJfcHJpbnRfaW5mbygpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggY2JjZjAxMy4uZDQwMWYxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC01MjYsNDQgKzUyNiwxMCBAQAogCXJldHVybiAoZWR4ICYgTVdBSVRfRURYX0MxKTsKIH0KIAotLyoKLSAqIENoZWNrIGZvciBBTUQgQ1BVcywgd2hlcmUgQVBJQyB0aW1lciBpbnRlcnJ1cHQgZG9lcyBub3Qgd2FrZSB1cCBDUFUgZnJvbSBDMWUuCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKLSAqIC0gRXJyYXR1bSAjNDAwIGZvciBOUFQgZmFtaWx5IDB4ZiBhbmQgZmFtaWx5IDB4MTAgQ1BVcwotICogLSBFcnJhdHVtICMzNjUgZm9yIGZhbWlseSAweDExIChub3QgYWZmZWN0ZWQgYmVjYXVzZSBDMWUgbm90IGluIHVzZSkKLSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgY2hlY2tfYzFlX2lkbGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCXU2NCB2YWw7Ci0JaWYgKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpCi0JCWdvdG8gbm9fYzFlX2lkbGU7Ci0KLQkvKiBGYW1pbHkgMHgwZiBtb2RlbHMgPCByZXYgRiBkbyBub3QgaGF2ZSBDMUUgKi8KLQlpZiAoYy0+eDg2ID09IDB4MEYgJiYgYy0+eDg2X21vZGVsID49IDB4NDApCi0JCXJldHVybiAxOwotCi0JaWYgKGMtPng4NiA9PSAweDEwKSB7Ci0JCS8qCi0JCSAqIGNoZWNrIE9TVlcgYml0IGZvciBDUFVzIHRoYXQgYXJlIG5vdCBhZmZlY3RlZAotCQkgKiBieSBlcnJhdHVtICM0MDAKLQkJICovCi0JCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX09TVlcpKSB7Ci0JCQlyZG1zcmwoTVNSX0FNRDY0X09TVldfSURfTEVOR1RILCB2YWwpOwotCQkJaWYgKHZhbCA+PSAyKSB7Ci0JCQkJcmRtc3JsKE1TUl9BTUQ2NF9PU1ZXX1NUQVRVUywgdmFsKTsKLQkJCQlpZiAoISh2YWwgJiBCSVQoMSkpKQotCQkJCQlnb3RvIG5vX2MxZV9pZGxlOwotCQkJfQotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotbm9fYzFlX2lkbGU6Ci0JcmV0dXJuIDA7Ci19Citib29sIGMxZV9kZXRlY3RlZDsKK0VYUE9SVF9TWU1CT0woYzFlX2RldGVjdGVkKTsKIAogc3RhdGljIGNwdW1hc2tfdmFyX3QgYzFlX21hc2s7Ci1zdGF0aWMgaW50IGMxZV9kZXRlY3RlZDsKIAogdm9pZCBjMWVfcmVtb3ZlX2NwdShpbnQgY3B1KQogewpAQCAtNTg1LDEyICs1NTEsMTIgQEAKIAkJdTMyIGxvLCBoaTsKIAogCQlyZG1zcihNU1JfSzhfSU5UX1BFTkRJTkdfTVNHLCBsbywgaGkpOworCiAJCWlmIChsbyAmIEs4X0lOVFBfQzFFX0FDVElWRV9NQVNLKSB7Ci0JCQljMWVfZGV0ZWN0ZWQgPSAxOworCQkJYzFlX2RldGVjdGVkID0gdHJ1ZTsKIAkJCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKSkKIAkJCQltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHQgaW4gQU1EIEMxRSIpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiU3lzdGVtIGhhcyBBTUQgQzFFIGVuYWJsZWRcbiIpOwotCQkJc2V0X2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FNREMxRSk7CiAJCX0KIAl9CiAKQEAgLTYzOSw3ICs2MDUsOCBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyAidXNpbmcgbXdhaXQgaW4gaWRsZSB0aHJlYWRzLlxuIik7CiAJCXBtX2lkbGUgPSBtd2FpdF9pZGxlOwotCX0gZWxzZSBpZiAoY2hlY2tfYzFlX2lkbGUoYykpIHsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfYW1kX2VycmF0dW0oYW1kX2VycmF0dW1fNDAwKSkgeworCQkvKiBFNDAwOiBBUElDIHRpbWVyIGludGVycnVwdCBkb2VzIG5vdCB3YWtlIHVwIENQVSBmcm9tIEMxZSAqLwogCQlwcmludGsoS0VSTl9JTkZPICJ1c2luZyBDMUUgYXdhcmUgaWRsZSByb3V0aW5lXG4iKTsKIAkJcG1faWRsZSA9IGMxZV9pZGxlOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uOTY1ODZjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC01Nyw2ICs1Nyw4IEBACiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CiAKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KKwogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwogCiAvKgpAQCAtMTExLDYgKzExMyw4IEBACiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJCX0KIAkJdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljaygpOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCAzYzI0MjJhLi4zZDllYTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTUxLDYgKzUxLDggQEAKICNpbmNsdWRlIDxhc20vc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxhc20vZGVidWdyZWcuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgorCiBhc21saW5rYWdlIGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG9sZF9yc3ApOwpAQCAtMTM4LDYgKzE0MCw5IEBACiAJCQlzdG9wX2NyaXRpY2FsX3RpbWluZ3MoKTsKIAkJCXBtX2lkbGUoKTsKIAkJCXN0YXJ0X2NyaXRpY2FsX3RpbWluZ3MoKTsKKworCQkJdHJhY2VfcG93ZXJfZW5kKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKIAkJCS8qIEluIG1hbnkgY2FzZXMgdGhlIGludGVycnVwdCB0aGF0IGVuZGVkIGlkbGUKIAkJCSAgIGhhcyBhbHJlYWR5IGNhbGxlZCBleGl0X2lkbGUuIEJ1dCBzb21lIGlkbGUKIAkJCSAgIGxvb3BzIGNhbiBiZSB3b2tlbiB1cCB3aXRob3V0IGludGVycnVwdC4gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggYjRhZTRhYy4uYjAwOGU3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKyNpbmNsdWRlIDxhc20vb2xwY19vZncuaD4KIAogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KQEAgLTczNiwxMCArNzM3LDE1IEBACiAJLyogVk1JIG1heSByZWxvY2F0ZSB0aGUgZml4bWFwOyBkbyB0aGlzIGJlZm9yZSB0b3VjaGluZyBpb3JlbWFwIGFyZWEgKi8KIAl2bWlfaW5pdCgpOwogCisJLyogT0ZXIGFsc28gbWF5IHJlbG9jYXRlIHRoZSBmaXhtYXAgKi8KKwlvbHBjX29md19kZXRlY3QoKTsKKwogCWVhcmx5X3RyYXBfaW5pdCgpOwogCWVhcmx5X2NwdV9pbml0KCk7CiAJZWFybHlfaW9yZW1hcF9pbml0KCk7CiAKKwlzZXR1cF9vbHBjX29md19wZ2QoKTsKKwogCVJPT1RfREVWID0gb2xkX2RlY29kZV9kZXYoYm9vdF9wYXJhbXMuaGRyLnJvb3RfZGV2KTsKIAlzY3JlZW5faW5mbyA9IGJvb3RfcGFyYW1zLnNjcmVlbl9pbmZvOwogCWVkaWRfaW5mbyA9IGJvb3RfcGFyYW1zLmVkaWRfaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IGM0ZjMzYjIuLmE1ZTkyOGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNzM1LDEyICs3MzUsOCBAQAogCQlnb3RvIGRvX3Jlc3Q7CiAJfQogCi0JaWYgKCFrZXZlbnRkX3VwKCkgfHwgY3VycmVudF9pc19rZXZlbnRkKCkpCi0JCWNfaWRsZS53b3JrLmZ1bmMoJmNfaWRsZS53b3JrKTsKLQllbHNlIHsKLQkJc2NoZWR1bGVfd29yaygmY19pZGxlLndvcmspOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjX2lkbGUuZG9uZSk7Ci0JfQorCXNjaGVkdWxlX3dvcmsoJmNfaWRsZS53b3JrKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjX2lkbGUuZG9uZSk7CiAKIAlpZiAoSVNfRVJSKGNfaWRsZS5pZGxlKSkgewogCQlwcmludGsoImZhaWxlZCBmb3JrIGZvciBDUFUgJWRcbiIsIGNwdSk7CkBAIC04MTYsNiArODEyLDEzIEBACiAJCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9jYWxsaW5fbWFzaykpCiAJCQkJYnJlYWs7CS8qIEl0IGhhcyBib290ZWQgKi8KIAkJCXVkZWxheSgxMDApOworCQkJLyoKKwkJCSAqIEFsbG93IG90aGVyIHRhc2tzIHRvIHJ1biB3aGlsZSB3ZSB3YWl0IGZvciB0aGUKKwkJCSAqIEFQIHRvIGNvbWUgb25saW5lLiBUaGlzIGFsc28gZ2l2ZXMgYSBjaGFuY2UKKwkJCSAqIGZvciB0aGUgTVRSUiB3b3JrKHRyaWdnZXJlZCBieSB0aGUgQVAgY29taW5nIG9ubGluZSkKKwkJCSAqIHRvIGJlIGNvbXBsZXRlZCBpbiB0aGUgc3RvcCBtYWNoaW5lIGNvbnRleHQuCisJCQkgKi8KKwkJCXNjaGVkdWxlKCk7CiAJCX0KIAogCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGNwdV9jYWxsaW5fbWFzaykpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYwppbmRleCA5MjJlZWZiLi5iNTNjNTI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKQEAgLTIzLDExICsyMywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZlX3N0YWNrX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgcmVsaWFibGUpCitzdGF0aWMgdm9pZAorX19zYXZlX3N0YWNrX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIHJlbGlhYmxlLCBib29sIG5vc2NoZWQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSA9IGRhdGE7CisjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIAlpZiAoIXJlbGlhYmxlKQogCQlyZXR1cm47CisjZW5kaWYKKwlpZiAobm9zY2hlZCAmJiBpbl9zY2hlZF9mdW5jdGlvbnMoYWRkcikpCisJCXJldHVybjsKIAlpZiAodHJhY2UtPnNraXAgPiAwKSB7CiAJCXRyYWNlLT5za2lwLS07CiAJCXJldHVybjsKQEAgLTM2LDIwICs0MSwxNSBAQAogCQl0cmFjZS0+ZW50cmllc1t0cmFjZS0+bnJfZW50cmllcysrXSA9IGFkZHI7CiB9CiAKK3N0YXRpYyB2b2lkIHNhdmVfc3RhY2tfYWRkcmVzcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCByZWxpYWJsZSkKK3sKKwlyZXR1cm4gX19zYXZlX3N0YWNrX2FkZHJlc3MoZGF0YSwgYWRkciwgcmVsaWFibGUsIGZhbHNlKTsKK30KKwogc3RhdGljIHZvaWQKIHNhdmVfc3RhY2tfYWRkcmVzc19ub3NjaGVkKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHJlbGlhYmxlKQogewotCXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2UgPSAoc3RydWN0IHN0YWNrX3RyYWNlICopZGF0YTsKLQlpZiAoIXJlbGlhYmxlKQotCQlyZXR1cm47Ci0JaWYgKGluX3NjaGVkX2Z1bmN0aW9ucyhhZGRyKSkKLQkJcmV0dXJuOwotCWlmICh0cmFjZS0+c2tpcCA+IDApIHsKLQkJdHJhY2UtPnNraXAtLTsKLQkJcmV0dXJuOwotCX0KLQlpZiAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpCi0JCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gYWRkcjsKKwlyZXR1cm4gX19zYXZlX3N0YWNrX2FkZHJlc3MoZGF0YSwgYWRkciwgcmVsaWFibGUsIHRydWUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIHNhdmVfc3RhY2tfb3BzID0gewpAQCAtOTYsMTIgKzk2LDEzIEBACiAKIC8qIFVzZXJzcGFjZSBzdGFja3RyYWNlIC0gYmFzZWQgb24ga2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyAqLwogCi1zdHJ1Y3Qgc3RhY2tfZnJhbWUgeworc3RydWN0IHN0YWNrX2ZyYW1lX3VzZXIgewogCWNvbnN0IHZvaWQgX191c2VyCSpuZXh0X2ZwOwogCXVuc2lnbmVkIGxvbmcJCXJldF9hZGRyOwogfTsKIAotc3RhdGljIGludCBjb3B5X3N0YWNrX2ZyYW1lKGNvbnN0IHZvaWQgX191c2VyICpmcCwgc3RydWN0IHN0YWNrX2ZyYW1lICpmcmFtZSkKK3N0YXRpYyBpbnQKK2NvcHlfc3RhY2tfZnJhbWUoY29uc3Qgdm9pZCBfX3VzZXIgKmZwLCBzdHJ1Y3Qgc3RhY2tfZnJhbWVfdXNlciAqZnJhbWUpCiB7CiAJaW50IHJldDsKIApAQCAtMTI2LDcgKzEyNyw3IEBACiAJCXRyYWNlLT5lbnRyaWVzW3RyYWNlLT5ucl9lbnRyaWVzKytdID0gcmVncy0+aXA7CiAKIAl3aGlsZSAodHJhY2UtPm5yX2VudHJpZXMgPCB0cmFjZS0+bWF4X2VudHJpZXMpIHsKLQkJc3RydWN0IHN0YWNrX2ZyYW1lIGZyYW1lOworCQlzdHJ1Y3Qgc3RhY2tfZnJhbWVfdXNlciBmcmFtZTsKIAogCQlmcmFtZS5uZXh0X2ZwID0gTlVMTDsKIAkJZnJhbWUucmV0X2FkZHIgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKaW5kZXggOGIzNzI5My4uYjM1Nzg2ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCkBAIC0zMzcsMyArMzM3LDYgQEAKIAkubG9uZyBzeXNfcnRfdGdzaWdxdWV1ZWluZm8JLyogMzM1ICovCiAJLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgogCS5sb25nIHN5c19yZWN2bW1zZworCS5sb25nIHN5c19mYW5vdGlmeV9pbml0CisJLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKKwkubG9uZyBzeXNfcHJsaW1pdDY0CQkvKiAzNDAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggNzI1ZWY0ZC4uNjA3ODhkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTM5Miw3ICszOTIsMTMgQEAKIAkJaWYgKG5vdGlmeV9kaWUoRElFX05NSV9JUEksICJubWlfaXBpIiwgcmVncywgcmVhc29uLCAyLCBTSUdJTlQpCiAJCQkJCQkJCT09IE5PVElGWV9TVE9QKQogCQkJcmV0dXJuOworCiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCisJCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCByZWFzb24sIDIsIFNJR0lOVCkKKwkJCQkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCXJldHVybjsKKworI2lmbmRlZiBDT05GSUdfTE9DS1VQX0RFVEVDVE9SCiAJCS8qCiAJCSAqIE9rLCBzbyB0aGlzIGlzIG5vbmUgb2YgdGhlIGRvY3VtZW50ZWQgTk1JIHNvdXJjZXMsCiAJCSAqIHNvIGl0IG11c3QgYmUgdGhlIE5NSSB3YXRjaGRvZy4KQEAgLTQwMCw2ICs0MDYsNyBAQAogCQlpZiAobm1pX3dhdGNoZG9nX3RpY2socmVncywgcmVhc29uKSkKIAkJCXJldHVybjsKIAkJaWYgKCFkb19ubWlfY2FsbGJhY2socmVncywgY3B1KSkKKyNlbmRpZiAvKiAhQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUiAqLwogCQkJdW5rbm93bl9ubWlfZXJyb3IocmVhc29uLCByZWdzKTsKICNlbHNlCiAJCXVua25vd25fbm1pX2Vycm9yKHJlYXNvbiwgcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggOWZhZjkxYS4uY2U4ZTUwMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtNzUxLDcgKzc1MSw2IEBACiAJLnJlYWQgICAgICAgICAgICAgICAgICAgPSByZWFkX3RzYywKIAkucmVzdW1lCQkJPSByZXN1bWVfdHNjLAogCS5tYXNrICAgICAgICAgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCi0JLnNoaWZ0ICAgICAgICAgICAgICAgICAgPSAyMiwKIAkuZmxhZ3MgICAgICAgICAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTIHwKIAkJCQkgIENMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWSwKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC04NDUsOCArODQ0LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGluaXRfdHNjX2Nsb2Nrc291cmNlKHZvaWQpCiB7Ci0JY2xvY2tzb3VyY2VfdHNjLm11bHQgPSBjbG9ja3NvdXJjZV9raHoybXVsdCh0c2Nfa2h6LAotCQkJY2xvY2tzb3VyY2VfdHNjLnNoaWZ0KTsKIAlpZiAodHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlKQogCQljbG9ja3NvdXJjZV90c2MuZmxhZ3MgJj0gfkNMT0NLX1NPVVJDRV9NVVNUX1ZFUklGWTsKIAkvKiBsb3dlciB0aGUgcmF0aW5nIGlmIHdlIGFscmVhZHkga25vdyBpdHMgdW5zdGFibGU6ICovCkBAIC04NTQsNyArODUxLDcgQEAKIAkJY2xvY2tzb3VyY2VfdHNjLnJhdGluZyA9IDA7CiAJCWNsb2Nrc291cmNlX3RzYy5mbGFncyAmPSB+Q0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CiAJfQotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV90c2MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2toeigmY2xvY2tzb3VyY2VfdHNjLCB0c2Nfa2h6KTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdmVyaWZ5X2NwdV82NC5TCmluZGV4IDQ1YjZmOGEuLjU2YThjMmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92ZXJpZnlfY3B1XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZlcmlmeV9jcHVfNjQuUwpAQCAtMzEsNiArMzEsNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KIAogdmVyaWZ5X2NwdToKIAlwdXNoZmwJCQkJIyBTYXZlIGNhbGxlciBwYXNzZWQgZmxhZ3MKQEAgLTg4LDcgKzg5LDcgQEAKIAlqZQl2ZXJpZnlfY3B1X3NzZV9vawogCXRlc3QJJWRpLCVkaQogCWp6CXZlcmlmeV9jcHVfbm9fbG9uZ21vZGUJIyBvbmx5IHRyeSB0byBmb3JjZSBTU0Ugb24gQU1ECi0JbW92bAkkMHhjMDAxMDAxNSwlZWN4CSMgSFdDUgorCW1vdmwJJE1TUl9LN19IV0NSLCVlY3gKIAlyZG1zcgogCWJ0cgkkMTUsJWVheAkJIyBlbmFibGUgU1NFCiAJd3Jtc3IKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggMWMwYzZhYi4uZGNiYjI4YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTczLDggKzczLDggQEAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCB1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp3YWxsX3RpbWUsIHN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2ssCi0JCSAgICAgdTMyIG11bHQpCit2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IHRpbWVzcGVjICp3dG0sCisJCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNsb2NrLCB1MzIgbXVsdCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAJdnN5c2NhbGxfZ3RvZF9kYXRhLmNsb2NrLnNoaWZ0ID0gY2xvY2stPnNoaWZ0OwogCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfc2VjID0gd2FsbF90aW1lLT50dl9zZWM7CiAJdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9uc2VjID0gd2FsbF90aW1lLT50dl9uc2VjOwotCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RvX21vbm90b25pYyA9IHdhbGxfdG9fbW9ub3RvbmljOworCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RvX21vbm90b25pYyA9ICp3dG07CiAJdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9jb2Fyc2UgPSBfX2N1cnJlbnRfa2VybmVsX3RpbWUoKTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE2OSwxMyArMTY5LDE4IEBACiAgKiB1bmxpa2VseSAqLwogdGltZV90IF9fdnN5c2NhbGwoMSkgdnRpbWUodGltZV90ICp0KQogewotCXN0cnVjdCB0aW1ldmFsIHR2OworCXVuc2lnbmVkIHNlcTsKIAl0aW1lX3QgcmVzdWx0OwogCWlmICh1bmxpa2VseSghX192c3lzY2FsbF9ndG9kX2RhdGEuc3lzY3RsX2VuYWJsZWQpKQogCQlyZXR1cm4gdGltZV9zeXNjYWxsKHQpOwogCi0JdmdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotCXJlc3VsdCA9IHR2LnR2X3NlYzsKKwlkbyB7CisJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJl9fdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2spOworCisJCXJlc3VsdCA9IF9fdnN5c2NhbGxfZ3RvZF9kYXRhLndhbGxfdGltZV9zZWM7CisKKwl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZfX3ZzeXNjYWxsX2d0b2RfZGF0YS5sb2NrLCBzZXEpKTsKKwogCWlmICh0KQogCQkqdCA9IHJlc3VsdDsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3hzYXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwppbmRleCAzN2U2OGZjLi45YzI1M2JkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveHNhdmUuYwpAQCAtMTYsMTEgKzE2LDg4IEBACiAgKi8KIHU2NCBwY250eHRfbWFzazsKIAorLyoKKyAqIFJlcHJlc2VudHMgaW5pdCBzdGF0ZSBmb3IgdGhlIHN1cHBvcnRlZCBleHRlbmRlZCBzdGF0ZS4KKyAqLworc3RhdGljIHN0cnVjdCB4c2F2ZV9zdHJ1Y3QgKmluaXRfeHN0YXRlX2J1ZjsKKwogc3RydWN0IF9mcHhfc3dfYnl0ZXMgZnhfc3dfcmVzZXJ2ZWQ7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiBzdHJ1Y3QgX2ZweF9zd19ieXRlcyBmeF9zd19yZXNlcnZlZF9pYTMyOwogI2VuZGlmCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnhzdGF0ZV9vZmZzZXRzLCAqeHN0YXRlX3NpemVzLCB4c3RhdGVfZmVhdHVyZXM7CisKKy8qCisgKiBJZiBhIHByb2Nlc3NvciBpbXBsZW1lbnRhdGlvbiBkaXNjZXJuIHRoYXQgYSBwcm9jZXNzb3Igc3RhdGUgY29tcG9uZW50IGlzCisgKiBpbiBpdHMgaW5pdGlhbGl6ZWQgc3RhdGUgaXQgbWF5IG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlCisgKiB4c2F2ZV9oZHIueHN0YXRlX2J2IGFzICcwJywgd2l0aCBvdXQgbW9kaWZ5aW5nIHRoZSBjb3JyZXNwb25kaW5nIG1lbW9yeQorICogbGF5b3V0IGluIHRoZSBjYXNlIG9mIHhzYXZlb3B0LiBXaGlsZSBwcmVzZW50aW5nIHRoZSB4c3RhdGUgaW5mb3JtYXRpb24gdG8KKyAqIHRoZSB1c2VyLCB3ZSBhbHdheXMgZW5zdXJlIHRoYXQgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYSBmZWF0dXJlIHdpbGwgYmUgaW4KKyAqIHRoZSBpbml0IHN0YXRlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGhlYWRlciBiaXQgaXMgemVyby4gVGhpcyBpcyB0byBlbnN1cmUKKyAqIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBzZWUgc29tZSBzdGFsZSBzdGF0ZSBpbiB0aGUgbWVtb3J5IGxheW91dCBkdXJpbmcKKyAqIHNpZ25hbCBoYW5kbGluZywgZGVidWdnaW5nIGV0Yy4KKyAqLwordm9pZCBfX3Nhbml0aXplX2kzODdfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdTY0IHhzdGF0ZV9idjsKKwlpbnQgZmVhdHVyZV9iaXQgPSAweDI7CisJc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCAqZnggPSAmdHNrLT50aHJlYWQuZnB1LnN0YXRlLT5meHNhdmU7CisKKwlpZiAoIWZ4KQorCQlyZXR1cm47CisKKwlCVUdfT04odGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJiBUU19VU0VERlBVKTsKKworCXhzdGF0ZV9idiA9IHRzay0+dGhyZWFkLmZwdS5zdGF0ZS0+eHNhdmUueHNhdmVfaGRyLnhzdGF0ZV9idjsKKworCS8qCisJICogTm9uZSBvZiB0aGUgZmVhdHVyZSBiaXRzIGFyZSBpbiBpbml0IHN0YXRlLiBTbyBub3RoaW5nIGVsc2UKKwkgKiB0byBkbyBmb3IgdXMsIGFzIHRoZSBtZW1vcnkgbGF5b3V0IGlzIHVwdG8gZGF0ZS4KKwkgKi8KKwlpZiAoKHhzdGF0ZV9idiAmIHBjbnR4dF9tYXNrKSA9PSBwY250eHRfbWFzaykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGUCBpcyBpbiBpbml0IHN0YXRlCisJICovCisJaWYgKCEoeHN0YXRlX2J2ICYgWFNUQVRFX0ZQKSkgeworCQlmeC0+Y3dkID0gMHgzN2Y7CisJCWZ4LT5zd2QgPSAwOworCQlmeC0+dHdkID0gMDsKKwkJZngtPmZvcCA9IDA7CisJCWZ4LT5yaXAgPSAwOworCQlmeC0+cmRwID0gMDsKKwkJbWVtc2V0KCZmeC0+c3Rfc3BhY2VbMF0sIDAsIDEyOCk7CisJfQorCisJLyoKKwkgKiBTU0UgaXMgaW4gaW5pdCBzdGF0ZQorCSAqLworCWlmICghKHhzdGF0ZV9idiAmIFhTVEFURV9TU0UpKQorCQltZW1zZXQoJmZ4LT54bW1fc3BhY2VbMF0sIDAsIDI1Nik7CisKKwl4c3RhdGVfYnYgPSAocGNudHh0X21hc2sgJiB+eHN0YXRlX2J2KSA+PiAyOworCisJLyoKKwkgKiBVcGRhdGUgYWxsIHRoZSBvdGhlciBtZW1vcnkgbGF5b3V0cyBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBoZWFkZXIgYml0IGlzIGluIHRoZSBpbml0IHN0YXRlLgorCSAqLworCXdoaWxlICh4c3RhdGVfYnYpIHsKKwkJaWYgKHhzdGF0ZV9idiAmIDB4MSkgeworCQkJaW50IG9mZnNldCA9IHhzdGF0ZV9vZmZzZXRzW2ZlYXR1cmVfYml0XTsKKwkJCWludCBzaXplID0geHN0YXRlX3NpemVzW2ZlYXR1cmVfYml0XTsKKworCQkJbWVtY3B5KCgodm9pZCAqKSBmeCkgKyBvZmZzZXQsCisJCQkgICAgICAgKCh2b2lkICopIGluaXRfeHN0YXRlX2J1ZikgKyBvZmZzZXQsCisJCQkgICAgICAgc2l6ZSk7CisJCX0KKworCQl4c3RhdGVfYnYgPj49IDE7CisJCWZlYXR1cmVfYml0Kys7CisJfQorfQorCiAvKgogICogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbiBpbiB0aGUKICAqIHVzZXIgZnBzdGF0ZSBwb2ludGVyIGluIHRoZSBzaWdjb250ZXh0LgpAQCAtMzYsMTUgKzExMywxNCBAQAogCiAJZXJyID0gX19jb3B5X2Zyb21fdXNlcihmeF9zd191c2VyLCAmYnVmLT5zd19yZXNlcnZlZFswXSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IF9mcHhfc3dfYnl0ZXMpKTsKLQogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCXJldHVybiAtRUZBVUxUOwogCiAJLyoKIAkgKiBGaXJzdCBNYWdpYyBjaGVjayBmYWlsZWQuCiAJICovCiAJaWYgKGZ4X3N3X3VzZXItPm1hZ2ljMSAhPSBGUF9YU1RBVEVfTUFHSUMxKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgZXJyb3Igc2NlbmFyaW9zLgpAQCAtNTIsMTkgKzEyOCwyMSBAQAogCWlmIChmeF9zd191c2VyLT54c3RhdGVfc2l6ZSA8IG1pbl94c3RhdGVfc2l6ZSB8fAogCSAgICBmeF9zd191c2VyLT54c3RhdGVfc2l6ZSA+IHhzdGF0ZV9zaXplIHx8CiAJICAgIGZ4X3N3X3VzZXItPnhzdGF0ZV9zaXplID4gZnhfc3dfdXNlci0+ZXh0ZW5kZWRfc2l6ZSkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IF9fZ2V0X3VzZXIobWFnaWMyLCAoX191MzIgKikgKCgodm9pZCAqKWZwc3RhdGUpICsKIAkJCQkJICAgIGZ4X3N3X3VzZXItPmV4dGVuZGVkX3NpemUgLQogCQkJCQkgICAgRlBfWFNUQVRFX01BR0lDMl9TSVpFKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAkvKgogCSAqIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2Ygc2Vjb25kIG1hZ2ljIHdvcmQgYXQgdGhlIGVuZCBvZiBtZW1vcnkKIAkgKiBsYXlvdXQuIFRoaXMgZGV0ZWN0cyB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBqdXN0IGNvcGllZCB0aGUgbGVnYWN5CiAJICogZnBzdGF0ZSBsYXlvdXQgd2l0aCBvdXQgY29weWluZyB0aGUgZXh0ZW5kZWQgc3RhdGUgaW5mb3JtYXRpb24KIAkgKiBpbiB0aGUgbWVtb3J5IGxheW91dC4KIAkgKi8KLQlpZiAoZXJyIHx8IG1hZ2ljMiAhPSBGUF9YU1RBVEVfTUFHSUMyKQotCQlyZXR1cm4gLTE7CisJaWYgKG1hZ2ljMiAhPSBGUF9YU1RBVEVfTUFHSUMyKQorCQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldHVybiAwOwogfQpAQCAtOTEsMTQgKzE2OSw2IEBACiAJCXJldHVybiAwOwogCiAJaWYgKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICYgVFNfVVNFREZQVSkgewotCQkvKgotCSAJICogU3RhcnQgd2l0aCBjbGVhcmluZyB0aGUgdXNlciBidWZmZXIuIFRoaXMgd2lsbCBwcmVzZW50IGEKLQkgCSAqIGNsZWFuIGNvbnRleHQgZm9yIHRoZSBieXRlcyBub3QgdG91Y2hlZCBieSB0aGUgZnhzYXZlL3hzYXZlLgotCQkgKi8KLQkJZXJyID0gX19jbGVhcl91c2VyKGJ1Ziwgc2lnX3hzdGF0ZV9zaXplKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KIAkJaWYgKHVzZV94c2F2ZSgpKQogCQkJZXJyID0geHNhdmVfdXNlcihidWYpOwogCQllbHNlCkBAIC0xMDksNiArMTc5LDcgQEAKIAkJdGFza190aHJlYWRfaW5mbyh0c2spLT5zdGF0dXMgJj0gflRTX1VTRURGUFU7CiAJCXN0dHMoKTsKIAl9IGVsc2UgeworCQlzYW5pdGl6ZV9pMzg3X3N0YXRlKHRzayk7CiAJCWlmIChfX2NvcHlfdG9fdXNlcihidWYsICZ0c2stPnRocmVhZC5mcHUuc3RhdGUtPmZ4c2F2ZSwKIAkJCQkgICB4c3RhdGVfc2l6ZSkpCiAJCQlyZXR1cm4gLTE7CkBAIC0xODQsOCArMjU1LDggQEAKIAkgKiBpbml0IHRoZSBzdGF0ZSBza2lwcGVkIGJ5IHRoZSB1c2VyLgogCSAqLwogCW1hc2sgPSBwY250eHRfbWFzayAmIH5tYXNrOwotCi0JeHJzdG9yX3N0YXRlKGluaXRfeHN0YXRlX2J1ZiwgbWFzayk7CisJaWYgKHVubGlrZWx5KG1hc2spKQorCQl4cnN0b3Jfc3RhdGUoaW5pdF94c3RhdGVfYnVmLCBtYXNrKTsKIAogCXJldHVybiAwOwogCkBAIC0yNzQsMTEgKzM0NSw2IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIFJlcHJlc2VudHMgaW5pdCBzdGF0ZSBmb3IgdGhlIHN1cHBvcnRlZCBleHRlbmRlZCBzdGF0ZS4KLSAqLwotc3RydWN0IHhzYXZlX3N0cnVjdCAqaW5pdF94c3RhdGVfYnVmOwotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogdW5zaWduZWQgaW50IHNpZ194c3RhdGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgX2Zwc3RhdGUpOwogI2VuZGlmCkBAIC0yODYsMzcgKzM1Miw3NyBAQAogLyoKICAqIEVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvY2Vzc29yIHN0YXRlIHNhdmUvcmVzdG9yZSBmZWF0dXJlCiAgKi8KLXZvaWQgX19jcHVpbml0IHhzYXZlX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB4c3RhdGVfZW5hYmxlKHZvaWQpCiB7Ci0JaWYgKCFjcHVfaGFzX3hzYXZlKQotCQlyZXR1cm47Ci0KIAlzZXRfaW5fY3I0KFg4Nl9DUjRfT1NYU0FWRSk7Ci0KLQkvKgotCSAqIEVuYWJsZSBhbGwgdGhlIGZlYXR1cmVzIHRoYXQgdGhlIEhXIGlzIGNhcGFibGUgb2YKLQkgKiBhbmQgdGhlIExpbnV4IGtlcm5lbCBpcyBhd2FyZSBvZi4KLQkgKi8KIAl4c2V0YnYoWENSX1hGRUFUVVJFX0VOQUJMRURfTUFTSywgcGNudHh0X21hc2spOwogfQogCiAvKgorICogUmVjb3JkIHRoZSBvZmZzZXRzIGFuZCBzaXplcyBvZiBkaWZmZXJlbnQgc3RhdGUgbWFuYWdlZCBieSB0aGUgeHNhdmUKKyAqIG1lbW9yeSBsYXlvdXQuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF94c3RhdGVfZmVhdHVyZXModm9pZCkKK3sKKwlpbnQgZWF4LCBlYngsIGVjeCwgZWR4LCBsZWFmID0gMHgyOworCisJeHN0YXRlX2ZlYXR1cmVzID0gZmxzNjQocGNudHh0X21hc2spOworCXhzdGF0ZV9vZmZzZXRzID0gYWxsb2NfYm9vdG1lbSh4c3RhdGVfZmVhdHVyZXMgKiBzaXplb2YoaW50KSk7CisJeHN0YXRlX3NpemVzID0gYWxsb2NfYm9vdG1lbSh4c3RhdGVfZmVhdHVyZXMgKiBzaXplb2YoaW50KSk7CisKKwlkbyB7CisJCWNwdWlkX2NvdW50KFhTVEFURV9DUFVJRCwgbGVhZiwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CisKKwkJaWYgKGVheCA9PSAwKQorCQkJYnJlYWs7CisKKwkJeHN0YXRlX29mZnNldHNbbGVhZl0gPSBlYng7CisJCXhzdGF0ZV9zaXplc1tsZWFmXSA9IGVheDsKKworCQlsZWFmKys7CisJfSB3aGlsZSAoMSk7Cit9CisKKy8qCiAgKiBzZXR1cCB0aGUgeHN0YXRlIGltYWdlIHJlcHJlc2VudGluZyB0aGUgaW5pdCBzdGF0ZQogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfeHN0YXRlX2luaXQodm9pZCkKIHsKKwlzZXR1cF94c3RhdGVfZmVhdHVyZXMoKTsKKworCS8qCisJICogU2V0dXAgaW5pdF94c3RhdGVfYnVmIHRvIHJlcHJlc2VudCB0aGUgaW5pdCBzdGF0ZSBvZgorCSAqIGFsbCB0aGUgZmVhdHVyZXMgbWFuYWdlZCBieSB0aGUgeHNhdmUKKwkgKi8KIAlpbml0X3hzdGF0ZV9idWYgPSBhbGxvY19ib290bWVtKHhzdGF0ZV9zaXplKTsKIAlpbml0X3hzdGF0ZV9idWYtPmkzODcubXhjc3IgPSBNWENTUl9ERUZBVUxUOworCisJY2x0cygpOworCS8qCisJICogSW5pdCBhbGwgdGhlIGZlYXR1cmVzIHN0YXRlIHdpdGggaGVhZGVyX2J2IGJlaW5nIDB4MAorCSAqLworCXhyc3Rvcl9zdGF0ZShpbml0X3hzdGF0ZV9idWYsIC0xKTsKKwkvKgorCSAqIER1bXAgdGhlIGluaXQgc3RhdGUgYWdhaW4uIFRoaXMgaXMgdG8gaWRlbnRpZnkgdGhlIGluaXQgc3RhdGUKKwkgKiBvZiBhbnkgZmVhdHVyZSB3aGljaCBpcyBub3QgcmVwcmVzZW50ZWQgYnkgYWxsIHplcm8ncy4KKwkgKi8KKwl4c2F2ZV9zdGF0ZShpbml0X3hzdGF0ZV9idWYsIC0xKTsKKwlzdHRzKCk7CiB9CiAKIC8qCiAgKiBFbmFibGUgYW5kIGluaXRpYWxpemUgdGhlIHhzYXZlIGZlYXR1cmUuCiAgKi8KLXZvaWQgX19yZWYgeHNhdmVfY250eHRfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhzdGF0ZV9lbmFibGVfYm9vdF9jcHUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwogCi0JY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKwlpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCA8IFhTVEFURV9DUFVJRCkgeworCQlXQVJOKDEsIEtFUk5fRVJSICJYU1RBVEVfQ1BVSUQgbWlzc2luZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwljcHVpZF9jb3VudChYU1RBVEVfQ1BVSUQsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCXBjbnR4dF9tYXNrID0gZWF4ICsgKCh1NjQpZWR4IDw8IDMyKTsKIAogCWlmICgocGNudHh0X21hc2sgJiBYU1RBVEVfRlBTU0UpICE9IFhTVEFURV9GUFNTRSkgewpAQCAtMzI5LDEyICs0MzUsMTMgQEAKIAkgKiBTdXBwb3J0IG9ubHkgdGhlIHN0YXRlIGtub3duIHRvIE9TLgogCSAqLwogCXBjbnR4dF9tYXNrID0gcGNudHh0X21hc2sgJiBYQ05UWFRfTUFTSzsKLQl4c2F2ZV9pbml0KCk7CisKKwl4c3RhdGVfZW5hYmxlKCk7CiAKIAkvKgogCSAqIFJlY29tcHV0ZSB0aGUgY29udGV4dCBzaXplIGZvciBlbmFibGVkIGZlYXR1cmVzCiAJICovCi0JY3B1aWRfY291bnQoMHhkLCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKKwljcHVpZF9jb3VudChYU1RBVEVfQ1BVSUQsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCXhzdGF0ZV9zaXplID0gZWJ4OwogCiAJdXBkYXRlX3JlZ3NldF94c3RhdGVfaW5mbyh4c3RhdGVfc2l6ZSwgcGNudHh0X21hc2spOwpAQCAtMzQ2LDMgKzQ1MywyMyBAQAogCSAgICAgICAiY250eHQgc2l6ZSAweCV4XG4iLAogCSAgICAgICBwY250eHRfbWFzaywgeHN0YXRlX3NpemUpOwogfQorCisvKgorICogRm9yIHRoZSB2ZXJ5IGZpcnN0IGluc3RhbmNlLCB0aGlzIGNhbGxzIHhzdGF0ZV9lbmFibGVfYm9vdF9jcHUoKTsKKyAqIGZvciBhbGwgc3Vic2VxdWVudCBpbnN0YW5jZXMsIHRoaXMgY2FsbHMgeHN0YXRlX2VuYWJsZSgpLgorICoKKyAqIFRoaXMgaXMgc29tZXdoYXQgb2JmdXNjYXRlZCBkdWUgdG8gdGhlIGxhY2sgb2YgcG93ZXJmdWwgZW5vdWdoCisgKiBvdmVycmlkZXMgZm9yIHRoZSBzZWN0aW9uIGNoZWNrcy4KKyAqLwordm9pZCBfX2NwdWluaXQgeHNhdmVfaW5pdCh2b2lkKQoreworCXN0YXRpYyBfX3JlZmRhdGEgdm9pZCAoKm5leHRfZnVuYykodm9pZCkgPSB4c3RhdGVfZW5hYmxlX2Jvb3RfY3B1OworCXZvaWQgKCp0aGlzX2Z1bmMpKHZvaWQpOworCisJaWYgKCFjcHVfaGFzX3hzYXZlKQorCQlyZXR1cm47CisKKwl0aGlzX2Z1bmMgPSBuZXh0X2Z1bmM7CisJbmV4dF9mdW5jID0geHN0YXRlX2VuYWJsZTsKKwl0aGlzX2Z1bmMoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCAwZGNjOTVlLi4zMTFmNmRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0yODEsMTEgKzI4MSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fc2V0X3NwdGUodTY0ICpzcHRlcCwgdTY0IHNwdGUpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKXNwdGVwLCBzcHRlKTsKLSNlbHNlCi0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nIGxvbmcgKilzcHRlcCwgc3B0ZSk7Ci0jZW5kaWYKKwlzZXRfNjRiaXQoc3B0ZXAsIHNwdGUpOwogfQogCiBzdGF0aWMgdTY0IF9feGNoZ19zcHRlKHU2NCAqc3B0ZXAsIHU2NCBuZXdfc3B0ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA1NmM5YjZiLi5iYzViOWI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1MzIgaW5kZXg7ICAgLyogSW5kZXggb2YgdGhlIE1TUiAqLwogCWJvb2wgYWx3YXlzOyAvKiBUcnVlIGlmIGludGVyY2VwdCBpcyBhbHdheXMgb24gKi8KIH0gZGlyZWN0X2FjY2Vzc19tc3JzW10gPSB7Ci0JeyAuaW5kZXggPSBNU1JfSzZfU1RBUiwJCQkJLmFsd2F5cyA9IHRydWUgIH0sCisJeyAuaW5kZXggPSBNU1JfU1RBUiwJCQkJLmFsd2F5cyA9IHRydWUgIH0sCiAJeyAuaW5kZXggPSBNU1JfSUEzMl9TWVNFTlRFUl9DUywJCS5hbHdheXMgPSB0cnVlICB9LAogI2lmZGVmIENPTkZJR19YODZfNjQKIAl7IC5pbmRleCA9IE1TUl9HU19CQVNFLAkJCQkuYWx3YXlzID0gdHJ1ZSAgfSwKQEAgLTM4NCw4ICszODQsNyBAQAogCWludCBlcnI7CiAJdTY0IHZhbDsKIAotCS8qIE9ubHkgRmFtMTBoIGlzIGFmZmVjdGVkICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTApCisJaWYgKCFjcHVfaGFzX2FtZF9lcnJhdHVtKGFtZF9lcnJhdHVtXzM4MykpCiAJCXJldHVybjsKIAogCS8qIFVzZSBfc2FmZSB2YXJpYW50cyB0byBub3QgYnJlYWsgbmVzdGVkIHZpcnR1YWxpemF0aW9uICovCkBAIC0yNDMzLDcgKzI0MzIsNyBAQAogCQkqZGF0YSA9IHRzY19vZmZzZXQgKyBuYXRpdmVfcmVhZF90c2MoKTsKIAkJYnJlYWs7CiAJfQotCWNhc2UgTVNSX0s2X1NUQVI6CisJY2FzZSBNU1JfU1RBUjoKIAkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuc3RhcjsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMjU1Nyw3ICsyNTU2LDcgQEAKIAogCQlicmVhazsKIAl9Ci0JY2FzZSBNU1JfSzZfU1RBUjoKKwljYXNlIE1TUl9TVEFSOgogCQlzdm0tPnZtY2ItPnNhdmUuc3RhciA9IGRhdGE7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19YODZfNjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXguYyBiL2FyY2gveDg2L2t2bS92bXguYwppbmRleCAyN2EwMjIyLi40OWIyNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdm14LmMKKysrIGIvYXJjaC94ODYva3ZtL3ZteC5jCkBAIC0yNDAsMTQgKzI0MCwxNCBAQAogc3RhdGljIHZvaWQgZXB0X3NhdmVfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIC8qCi0gKiBLZWVwIE1TUl9LNl9TVEFSIGF0IHRoZSBlbmQsIGFzIHNldHVwX21zcnMoKSB3aWxsIHRyeSB0byBvcHRpbWl6ZSBpdAorICogS2VlcCBNU1JfU1RBUiBhdCB0aGUgZW5kLCBhcyBzZXR1cF9tc3JzKCkgd2lsbCB0cnkgdG8gb3B0aW1pemUgaXQKICAqIGF3YXkgYnkgZGVjcmVtZW50aW5nIHRoZSBhcnJheSBzaXplLgogICovCiBzdGF0aWMgY29uc3QgdTMyIHZteF9tc3JfaW5kZXhbXSA9IHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJTVNSX1NZU0NBTExfTUFTSywgTVNSX0xTVEFSLCBNU1JfQ1NUQVIsCiAjZW5kaWYKLQlNU1JfRUZFUiwgTVNSX1RTQ19BVVgsIE1TUl9LNl9TVEFSLAorCU1TUl9FRkVSLCBNU1JfVFNDX0FVWCwgTVNSX1NUQVIsCiB9OwogI2RlZmluZSBOUl9WTVhfTVNSIEFSUkFZX1NJWkUodm14X21zcl9pbmRleCkKIApAQCAtMTExNywxMCArMTExNywxMCBAQAogCQlpZiAoaW5kZXggPj0gMCAmJiB2bXgtPnJkdHNjcF9lbmFibGVkKQogCQkJbW92ZV9tc3JfdXAodm14LCBpbmRleCwgc2F2ZV9ubXNycysrKTsKIAkJLyoKLQkJICogTVNSX0s2X1NUQVIgaXMgb25seSBuZWVkZWQgb24gbG9uZyBtb2RlIGd1ZXN0cywgYW5kIG9ubHkKKwkJICogTVNSX1NUQVIgaXMgb25seSBuZWVkZWQgb24gbG9uZyBtb2RlIGd1ZXN0cywgYW5kIG9ubHkKIAkJICogaWYgZWZlci5zY2UgaXMgZW5hYmxlZC4KIAkJICovCi0JCWluZGV4ID0gX19maW5kX21zcl9pbmRleCh2bXgsIE1TUl9LNl9TVEFSKTsKKwkJaW5kZXggPSBfX2ZpbmRfbXNyX2luZGV4KHZteCwgTVNSX1NUQVIpOwogCQlpZiAoKGluZGV4ID49IDApICYmICh2bXgtPnZjcHUuYXJjaC5lZmVyICYgRUZFUl9TQ0UpKQogCQkJbW92ZV9tc3JfdXAodm14LCBpbmRleCwgc2F2ZV9ubXNycysrKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggOTdhYWIwMy4uMjVmMTkwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtNzMzLDcgKzczMyw3IEBACiAJSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgSFZfWDY0X01TUl9IWVBFUkNBTEwsCiAJSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFLAogCU1TUl9JQTMyX1NZU0VOVEVSX0NTLCBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwKLQlNU1JfSzZfU1RBUiwKKwlNU1JfU1RBUiwKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJTVNSX0NTVEFSLCBNU1JfS0VSTkVMX0dTX0JBU0UsIE1TUl9TWVNDQUxMX01BU0ssIE1TUl9MU1RBUiwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IGY4NzFlMDQuLmUxMGNmMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwogICAgICAgICBsaWIteSArPSBzdHJzdHJfMzIubwogICAgICAgICBsaWIteSArPSBzZW1hcGhvcmVfMzIubyBzdHJpbmdfMzIubworICAgICAgICBsaWIteSArPSBjbXB4Y2hnLm8KIGlmbmVxICgkKENPTkZJR19YODZfQ01QWENIRzY0KSx5KQogICAgICAgICBsaWIteSArPSBjbXB4Y2hnOGJfZW11Lm8gYXRvbWljNjRfMzg2XzMyLm8KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY2xlYXJfcGFnZV82NC5TIGIvYXJjaC94ODYvbGliL2NsZWFyX3BhZ2VfNjQuUwppbmRleCBlYmVhZmNjLi5hYTQzMjZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY2xlYXJfcGFnZV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9jbGVhcl9wYWdlXzY0LlMKQEAgLTUyLDcgKzUyLDcgQEAKIAkuYWxpZ24gOAogCS5xdWFkIGNsZWFyX3BhZ2UKIAkucXVhZCAxYgotCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECisJLndvcmQgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKIAkuYnl0ZSAuTGNsZWFyX3BhZ2VfZW5kIC0gY2xlYXJfcGFnZQogCS5ieXRlIDJiIC0gMWIKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jbXB4Y2hnLmMgYi9hcmNoL3g4Ni9saWIvY21weGNoZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjE5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvY21weGNoZy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBjbXB4Y2hnKigpIGZhbGxiYWNrcyBmb3IgQ1BVIG5vdCBzdXBwb3J0aW5nIHRoZXNlIGluc3RydWN0aW9ucworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2lmbmRlZiBDT05GSUdfWDg2X0NNUFhDSEcKK3Vuc2lnbmVkIGxvbmcgY21weGNoZ18zODZfdTgodm9sYXRpbGUgdm9pZCAqcHRyLCB1OCBvbGQsIHU4IG5ldykKK3sKKwl1OCBwcmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXByZXYgPSAqKHU4ICopcHRyOworCWlmIChwcmV2ID09IG9sZCkKKwkJKih1OCAqKXB0ciA9IG5ldzsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIHByZXY7Cit9CitFWFBPUlRfU1lNQk9MKGNtcHhjaGdfMzg2X3U4KTsKKwordW5zaWduZWQgbG9uZyBjbXB4Y2hnXzM4Nl91MTYodm9sYXRpbGUgdm9pZCAqcHRyLCB1MTYgb2xkLCB1MTYgbmV3KQoreworCXUxNiBwcmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXByZXYgPSAqKHUxNiAqKXB0cjsKKwlpZiAocHJldiA9PSBvbGQpCisJCSoodTE2ICopcHRyID0gbmV3OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcHJldjsKK30KK0VYUE9SVF9TWU1CT0woY21weGNoZ18zODZfdTE2KTsKKwordW5zaWduZWQgbG9uZyBjbXB4Y2hnXzM4Nl91MzIodm9sYXRpbGUgdm9pZCAqcHRyLCB1MzIgb2xkLCB1MzIgbmV3KQoreworCXUzMiBwcmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBQb29yIG1hbidzIGNtcHhjaGcgZm9yIDM4Ni4gVW5zdWl0YWJsZSBmb3IgU01QICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXByZXYgPSAqKHUzMiAqKXB0cjsKKwlpZiAocHJldiA9PSBvbGQpCisJCSoodTMyICopcHRyID0gbmV3OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gcHJldjsKK30KK0VYUE9SVF9TWU1CT0woY21weGNoZ18zODZfdTMyKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NvcHlfcGFnZV82NC5TIGIvYXJjaC94ODYvbGliL2NvcHlfcGFnZV82NC5TCmluZGV4IDcyN2E1ZDQuLjZmZWMyZDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jb3B5X3BhZ2VfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY29weV9wYWdlXzY0LlMKQEAgLTExMyw3ICsxMTMsNyBAQAogCS5hbGlnbiA4CiAJLnF1YWQgY29weV9wYWdlCiAJLnF1YWQgMWIKLQkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAorCS53b3JkIFg4Nl9GRUFUVVJFX1JFUF9HT09ECiAJLmJ5dGUgLkxjb3B5X3BhZ2VfZW5kIC0gY29weV9wYWdlCiAJLmJ5dGUgMmIgLSAxYgogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCmluZGV4IDcxMTAwYzkuLmE0NjAxNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKQEAgLTI5LDcgKzI5LDcgQEAKIAkuYWxpZ24gOAogCS5xdWFkICAwYgogCS5xdWFkICAyYgotCS5ieXRlICBcZmVhdHVyZQkJCS8qIHdoZW4gZmVhdHVyZSBpcyBzZXQgKi8KKwkud29yZCAgXGZlYXR1cmUJCQkvKiB3aGVuIGZlYXR1cmUgaXMgc2V0ICovCiAJLmJ5dGUgIDUKIAkuYnl0ZSAgNQogCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCmluZGV4IGY4MmU4ODQuLmJjYmNkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCS5hbGlnbiA4CiAJLnF1YWQgbWVtY3B5CiAJLnF1YWQgLkxtZW1jcHlfYwotCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECisJLndvcmQgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKIAogCS8qCiAJICogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5TCmluZGV4IGU4OGQzYjguLjA5ZDM0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCS5hbGlnbiA4CiAJLnF1YWQgbWVtc2V0CiAJLnF1YWQgLkxtZW1zZXRfYwotCS5ieXRlIFg4Nl9GRUFUVVJFX1JFUF9HT09ECisJLndvcmQgWDg2X0ZFQVRVUkVfUkVQX0dPT0QKIAkuYnl0ZSAuTGZpbmFsIC0gbWVtc2V0CiAJLmJ5dGUgLkxtZW1zZXRfZSAtIC5MbWVtc2V0X2MKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKaW5kZXggYTcyNWI3Zi4uMDAwMmEzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKKysrIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKQEAgLTM3LDYgKzM3LDI4IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIH07CiAKKy8qIGluZGljZXMgZm9yIGFkZHJlc3NfbWFya2Vyczsga2VlcCBzeW5jJ2Qgdy8gYWRkcmVzc19tYXJrZXJzIGJlbG93ICovCitlbnVtIGFkZHJlc3NfbWFya2Vyc19pZHggeworCVVTRVJfU1BBQ0VfTlIgPSAwLAorI2lmZGVmIENPTkZJR19YODZfNjQKKwlLRVJORUxfU1BBQ0VfTlIsCisJTE9XX0tFUk5FTF9OUiwKKwlWTUFMTE9DX1NUQVJUX05SLAorCVZNRU1NQVBfU1RBUlRfTlIsCisJSElHSF9LRVJORUxfTlIsCisJTU9EVUxFU19WQUREUl9OUiwKKwlNT0RVTEVTX0VORF9OUiwKKyNlbHNlCisJS0VSTkVMX1NQQUNFX05SLAorCVZNQUxMT0NfU1RBUlRfTlIsCisJVk1BTExPQ19FTkRfTlIsCisjIGlmZGVmIENPTkZJR19ISUdITUVNCisJUEtNQVBfQkFTRV9OUiwKKyMgZW5kaWYKKwlGSVhBRERSX1NUQVJUX05SLAorI2VuZGlmCit9OworCiAvKiBBZGRyZXNzIHNwYWNlIG1hcmtlcnMgaGludHMgKi8KIHN0YXRpYyBzdHJ1Y3QgYWRkcl9tYXJrZXIgYWRkcmVzc19tYXJrZXJzW10gPSB7CiAJeyAwLCAiVXNlciBTcGFjZSIgfSwKQEAgLTMzMSwxNCArMzUzLDEyIEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogTm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50IG9uIHg4Ni0zMiAqLwotCWFkZHJlc3NfbWFya2Vyc1syXS5zdGFydF9hZGRyZXNzID0gVk1BTExPQ19TVEFSVDsKLQlhZGRyZXNzX21hcmtlcnNbM10uc3RhcnRfYWRkcmVzcyA9IFZNQUxMT0NfRU5EOworCWFkZHJlc3NfbWFya2Vyc1tWTUFMTE9DX1NUQVJUX05SXS5zdGFydF9hZGRyZXNzID0gVk1BTExPQ19TVEFSVDsKKwlhZGRyZXNzX21hcmtlcnNbVk1BTExPQ19FTkRfTlJdLnN0YXJ0X2FkZHJlc3MgPSBWTUFMTE9DX0VORDsKICMgaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlhZGRyZXNzX21hcmtlcnNbNF0uc3RhcnRfYWRkcmVzcyA9IFBLTUFQX0JBU0U7Ci0JYWRkcmVzc19tYXJrZXJzWzVdLnN0YXJ0X2FkZHJlc3MgPSBGSVhBRERSX1NUQVJUOwotIyBlbHNlCi0JYWRkcmVzc19tYXJrZXJzWzRdLnN0YXJ0X2FkZHJlc3MgPSBGSVhBRERSX1NUQVJUOworCWFkZHJlc3NfbWFya2Vyc1tQS01BUF9CQVNFX05SXS5zdGFydF9hZGRyZXNzID0gUEtNQVBfQkFTRTsKICMgZW5kaWYKKwlhZGRyZXNzX21hcmtlcnNbRklYQUREUl9TVEFSVF9OUl0uc3RhcnRfYWRkcmVzcyA9IEZJWEFERFJfU1RBUlQ7CiAjZW5kaWYKIAogCXBlID0gZGVidWdmc19jcmVhdGVfZmlsZSgia2VybmVsX3BhZ2VfdGFibGVzIiwgMDYwMCwgTlVMTCwgTlVMTCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwppbmRleCA2M2E2YmE2Li41ZThmYTEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuIGttYXBfYXRvbWljX3Byb3QocGFnZSwgdHlwZSwga21hcF9wcm90KTsKIH0KIAotdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCit2b2lkIGt1bm1hcF9hdG9taWNfbm90eXBlY2hlY2sodm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGt2YWRkciAmIFBBR0VfTUFTSzsKIAllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0xMDIsNyArMTAyLDcgQEAKIEVYUE9SVF9TWU1CT0woa21hcCk7CiBFWFBPUlRfU1lNQk9MKGt1bm1hcCk7CiBFWFBPUlRfU1lNQk9MKGttYXBfYXRvbWljKTsKLUVYUE9SVF9TWU1CT0woa3VubWFwX2F0b21pYyk7CitFWFBPUlRfU1lNQk9MKGt1bm1hcF9hdG9taWNfbm90eXBlY2hlY2spOwogRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pY19wcm90KTsKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWNfdG9fcGFnZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCAxMmU0ZDJkLi4zYmE2ZTA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC02Miw4ICs2Miw4IEBACiBzdGF0aWMgdm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHJlc291cmNlX3NpemVfdCBwaHlzX2FkZHIsCiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBwcm90X3ZhbCwgdm9pZCAqY2FsbGVyKQogewotCXVuc2lnbmVkIGxvbmcgcGZuLCBvZmZzZXQsIHZhZGRyOwotCXJlc291cmNlX3NpemVfdCBsYXN0X2FkZHI7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHZhZGRyOworCXJlc291cmNlX3NpemVfdCBwZm4sIGxhc3RfcGZuLCBsYXN0X2FkZHI7CiAJY29uc3QgcmVzb3VyY2Vfc2l6ZV90IHVuYWxpZ25lZF9waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJY29uc3QgdW5zaWduZWQgbG9uZyB1bmFsaWduZWRfc2l6ZSA9IHNpemU7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKQEAgLTEwMCwxMCArMTAwLDggQEAKIAkvKgogCSAqIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nLi4KIAkgKi8KLQlmb3IgKHBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOwotCQkJCShwZm4gPDwgUEFHRV9TSElGVCkgPCAobGFzdF9hZGRyICYgUEFHRV9NQVNLKTsKLQkJCQlwZm4rKykgewotCisJbGFzdF9wZm4gPSBsYXN0X2FkZHIgPj4gUEFHRV9TSElGVDsKKwlmb3IgKHBmbiA9IHBoeXNfYWRkciA+PiBQQUdFX1NISUZUOyBwZm4gPD0gbGFzdF9wZm47IHBmbisrKSB7CiAJCWludCBpc19yYW0gPSBwYWdlX2lzX3JhbShwZm4pOwogCiAJCWlmIChpc19yYW0gJiYgcGZuX3ZhbGlkKHBmbikgJiYgIVBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKSkKQEAgLTExNSw3ICsxMTMsNyBAQAogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCiAJICovCiAJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKLQlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXBoeXNfYWRkciAmPSBQSFlTSUNBTF9QQUdFX01BU0s7CiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyKzEpIC0gcGh5c19hZGRyOwogCiAJcmV0dmFsID0gcmVzZXJ2ZV9tZW10eXBlKHBoeXNfYWRkciwgKHU2NClwaHlzX2FkZHIgKyBzaXplLApAQCAtNjEzLDcgKzYxMSw3IEBACiAJCXJldHVybjsKIAl9CiAJb2Zmc2V0ID0gdmlydF9hZGRyICYgflBBR0VfTUFTSzsKLQlucnBhZ2VzID0gUEFHRV9BTElHTihvZmZzZXQgKyBzaXplIC0gMSkgPj4gUEFHRV9TSElGVDsKKwlucnBhZ2VzID0gUEFHRV9BTElHTihvZmZzZXQgKyBzaXplKSA+PiBQQUdFX1NISUZUOwogCiAJaWR4ID0gRklYX0JUTUFQX0JFR0lOIC0gTlJfRklYX0JUTUFQUypzbG90OwogCXdoaWxlIChucnBhZ2VzID4gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0va21taW8uYyBiL2FyY2gveDg2L21tL2ttbWlvLmMKaW5kZXggNWQwZTY3Zi4uZTVkNWUyYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0va21taW8uYworKysgYi9hcmNoL3g4Ni9tbS9rbW1pby5jCkBAIC00NSw2ICs0NSw4IEBACiAJICogUHJvdGVjdGVkIGJ5IGttbWlvX2xvY2ssIHdoZW4gbGlua2VkIGludG8ga21taW9fcGFnZV90YWJsZS4KIAkgKi8KIAlpbnQgY291bnQ7CisKKwlib29sIHNjaGVkdWxlZF9mb3JfcmVsZWFzZTsKIH07CiAKIHN0cnVjdCBrbW1pb19kZWxheWVkX3JlbGVhc2UgewpAQCAtMzk4LDggKzQwMCwxMSBAQAogCUJVR19PTihmLT5jb3VudCA8IDApOwogCWlmICghZi0+Y291bnQpIHsKIAkJZGlzYXJtX2ttbWlvX2ZhdWx0X3BhZ2UoZik7Ci0JCWYtPnJlbGVhc2VfbmV4dCA9ICpyZWxlYXNlX2xpc3Q7Ci0JCSpyZWxlYXNlX2xpc3QgPSBmOworCQlpZiAoIWYtPnNjaGVkdWxlZF9mb3JfcmVsZWFzZSkgeworCQkJZi0+cmVsZWFzZV9uZXh0ID0gKnJlbGVhc2VfbGlzdDsKKwkJCSpyZWxlYXNlX2xpc3QgPSBmOworCQkJZi0+c2NoZWR1bGVkX2Zvcl9yZWxlYXNlID0gdHJ1ZTsKKwkJfQogCX0KIH0KIApAQCAtNDcxLDggKzQ3NiwxMCBAQAogCQkJcHJldnAgPSAmZi0+cmVsZWFzZV9uZXh0OwogCQl9IGVsc2UgewogCQkJKnByZXZwID0gZi0+cmVsZWFzZV9uZXh0OworCQkJZi0+cmVsZWFzZV9uZXh0ID0gTlVMTDsKKwkJCWYtPnNjaGVkdWxlZF9mb3JfcmVsZWFzZSA9IGZhbHNlOwogCQl9Ci0JCWYgPSBmLT5yZWxlYXNlX25leHQ7CisJCWYgPSAqcHJldnA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmttbWlvX2xvY2ssIGZsYWdzKTsKIApAQCAtNTEwLDYgKzUxNyw5IEBACiAJa21taW9fY291bnQtLTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZrbW1pb19sb2NrLCBmbGFncyk7CiAKKwlpZiAoIXJlbGVhc2VfbGlzdCkKKwkJcmV0dXJuOworCiAJZHJlbGVhc2UgPSBrbWFsbG9jKHNpemVvZigqZHJlbGVhc2UpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRyZWxlYXNlKSB7CiAJCXByX2NyaXQoImxlYWtpbmcga21taW9fZmF1bHRfcGFnZSBvYmplY3RzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQuYyBiL2FyY2gveDg2L21tL3BhdC5jCmluZGV4IDY0MTIxYTEuLmY2ZmY1N2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhdC5jCisrKyBiL2FyY2gveDg2L21tL3BhdC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXR1cm4gcmVxX3R5cGU7CiB9CiAKLXN0YXRpYyBpbnQgcGF0X3BhZ2VyYW5nZV9pc19yYW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgaW50IHBhdF9wYWdlcmFuZ2VfaXNfcmFtKHJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGVuZCkKIHsKIAlpbnQgcmFtX3BhZ2UgPSAwLCBub3RfcmFtcGFnZSA9IDA7CiAJdW5zaWduZWQgbG9uZyBwYWdlX25yOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGZfaW4uYyBiL2FyY2gveDg2L21tL3BmX2luLmMKaW5kZXggMzA4ZTMyNS4uMzhlNmQxNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGZfaW4uYworKysgYi9hcmNoL3g4Ni9tbS9wZl9pbi5jCkBAIC00MCwxNiArNDAsMTYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX3JvcFtdID0gewogCTB4OEEsIDB4OEIsIDB4QjYwRiwgMHhCNzBGLCAweEJFMEYsIDB4QkYwRgogfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVnX3dvcFtdID0geyAweDg4LCAweDg5IH07CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZ193b3BbXSA9IHsgMHg4OCwgMHg4OSwgMHhBQSwgMHhBQiB9Owogc3RhdGljIHVuc2lnbmVkIGludCBpbW1fd29wW10gPSB7IDB4QzYsIDB4QzcgfTsKIC8qIElBMzIgTWFudWFsIDMsIDMtNDMyKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnc4W10gPSB7IDB4ODgsIDB4OEEsIDB4QzYgfTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnc4W10gPSB7IDB4ODgsIDB4OEEsIDB4QzYsIDB4QUEgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnczMltdID0gewotCTB4ODksIDB4OEIsIDB4QzcsIDB4QjYwRiwgMHhCNzBGLCAweEJFMEYsIDB4QkYwRgorCTB4ODksIDB4OEIsIDB4QzcsIDB4QjYwRiwgMHhCNzBGLCAweEJFMEYsIDB4QkYwRiwgMHhBQgogfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXc4W10gPSB7IDB4ODgsIDB4OEEsIDB4QzYsIDB4QjYwRiwgMHhCRTBGIH07CitzdGF0aWMgdW5zaWduZWQgaW50IG13OFtdID0geyAweDg4LCAweDhBLCAweEM2LCAweEI2MEYsIDB4QkUwRiwgMHhBQSB9Owogc3RhdGljIHVuc2lnbmVkIGludCBtdzE2W10gPSB7IDB4QjcwRiwgMHhCRjBGIH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IG13MzJbXSA9IHsgMHg4OSwgMHg4QiwgMHhDNyB9Oworc3RhdGljIHVuc2lnbmVkIGludCBtdzMyW10gPSB7IDB4ODksIDB4OEIsIDB4QzcsIDB4QUIgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXc2NFtdID0ge307CiAjZWxzZSAvKiBub3QgX19pMzg2X18gKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHByZWZpeF9jb2Rlc1tdID0gewpAQCAtNjMsMjAgKzYzLDIwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHJlZ19yb3BbXSA9IHsKIAkweDhBLCAweDhCLCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYKIH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJlZ193b3BbXSA9IHsgMHg4OCwgMHg4OSB9Oworc3RhdGljIHVuc2lnbmVkIGludCByZWdfd29wW10gPSB7IDB4ODgsIDB4ODksIDB4QUEsIDB4QUIgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW1tX3dvcFtdID0geyAweEM2LCAweEM3IH07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJ3OFtdID0geyAweEM2LCAweDg4LCAweDhBIH07CitzdGF0aWMgdW5zaWduZWQgaW50IHJ3OFtdID0geyAweEM2LCAweDg4LCAweDhBLCAweEFBIH07CiBzdGF0aWMgdW5zaWduZWQgaW50IHJ3MzJbXSA9IHsKLQkweEM3LCAweDg5LCAweDhCLCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYKKwkweEM3LCAweDg5LCAweDhCLCAweEI2MEYsIDB4QjcwRiwgMHhCRTBGLCAweEJGMEYsIDB4QUIKIH07CiAvKiA4IGJpdCBvbmx5ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG13OFtdID0geyAweEM2LCAweDg4LCAweDhBLCAweEI2MEYsIDB4QkUwRiB9Oworc3RhdGljIHVuc2lnbmVkIGludCBtdzhbXSA9IHsgMHhDNiwgMHg4OCwgMHg4QSwgMHhCNjBGLCAweEJFMEYsIDB4QUEgfTsKIC8qIDE2IGJpdCBvbmx5ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG13MTZbXSA9IHsgMHhCNzBGLCAweEJGMEYgfTsKIC8qIDE2IG9yIDMyIGJpdCAqLwogc3RhdGljIHVuc2lnbmVkIGludCBtdzMyW10gPSB7IDB4QzcgfTsKIC8qIDE2LCAzMiBvciA2NCBiaXQgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXc2NFtdID0geyAweDg5LCAweDhCIH07CitzdGF0aWMgdW5zaWduZWQgaW50IG13NjRbXSA9IHsgMHg4OSwgMHg4QiwgMHhBQiB9OwogI2VuZGlmIC8qIG5vdCBfX2kzODZfXyAqLwogCiBzdHJ1Y3QgcHJlZml4X2JpdHMgewpAQCAtNDEwLDcgKzQxMCw2IEBACiB1bnNpZ25lZCBsb25nIGdldF9pbnNfcmVnX3ZhbCh1bnNpZ25lZCBsb25nIGluc19hZGRyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBpbnQgb3Bjb2RlOwotCXVuc2lnbmVkIGNoYXIgbW9kX3JtOwogCWludCByZWc7CiAJdW5zaWduZWQgY2hhciAqcDsKIAlzdHJ1Y3QgcHJlZml4X2JpdHMgcHJmOwpAQCAtNDM3LDggKzQzNiwxMyBAQAogCWdvdG8gZXJyOwogCiBkb193b3JrOgotCW1vZF9ybSA9ICpwOwotCXJlZyA9ICgobW9kX3JtID4+IDMpICYgMHg3KSB8IChwcmYucmV4ciA8PCAzKTsKKwkvKiBmb3IgU1RPUywgc291cmNlIHJlZ2lzdGVyIGlzIGZpeGVkICovCisJaWYgKG9wY29kZSA9PSAweEFBIHx8IG9wY29kZSA9PSAweEFCKSB7CisJCXJlZyA9IGFyZ19BWDsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBjaGFyIG1vZF9ybSA9ICpwOworCQlyZWcgPSAoKG1vZF9ybSA+PiAzKSAmIDB4NykgfCAocHJmLnJleHIgPDwgMyk7CisJfQogCXN3aXRjaCAoZ2V0X2luc19yZWdfd2lkdGgoaW5zX2FkZHIpKSB7CiAJY2FzZSAxOgogCQlyZXR1cm4gKmdldF9yZWdfdzgocmVnLCBwcmYucmV4LCByZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYyBiL2FyY2gveDg2L21tL3Rlc3RtbWlvdHJhY2UuYwppbmRleCA4NTY1ZDk0Li4zODg2OGFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS90ZXN0bW1pb3RyYWNlLmMKKysrIGIvYXJjaC94ODYvbW0vdGVzdG1taW90cmFjZS5jCkBAIC05MCw2ICs5MCwyNyBAQAogCWlvdW5tYXAocCk7CiB9CiAKKy8qCisgKiBUZXN0cyBob3cgbW1pb3RyYWNlIGJlaGF2ZXMgaW4gZmFjZSBvZiBtdWx0aXBsZSBpb3JlbWFwIC8gaW91bm1hcHMgaW4KKyAqIGEgc2hvcnQgdGltZS4gV2UgaGFkIGEgYnVnIGluIGRlZmVycmVkIGZyZWVpbmcgcHJvY2VkdXJlIHdoaWNoIHRyaWVkCisgKiB0byBmcmVlIHRoaXMgcmVnaW9uIG11bHRpcGxlIHRpbWVzIChpb3JlbWFwIGNhbiByZXVzZSB0aGUgc2FtZSBhZGRyZXNzCisgKiBmb3IgbWFueSBtYXBwaW5ncykuCisgKi8KK3N0YXRpYyB2b2lkIGRvX3Rlc3RfYnVsa19pb3JlbWFwcGluZyh2b2lkKQoreworCXZvaWQgX19pb21lbSAqcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgKytpKSB7CisJCXAgPSBpb3JlbWFwX25vY2FjaGUobW1pb19hZGRyZXNzLCBQQUdFX1NJWkUpOworCQlpZiAocCkKKwkJCWlvdW5tYXAocCk7CisJfQorCisJLyogRm9yY2UgZnJlZWluZy4gSWYgaXQgd2lsbCBjcmFzaCB3ZSB3aWxsIGtub3cgd2h5LiAqLworCXN5bmNocm9uaXplX3JjdSgpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gKHJlYWRfZmFyKSA/ICg4IDw8IDIwKSA6ICgxNiA8PCAxMCk7CkBAIC0xMDQsNiArMTI1LDcgQEAKIAkJICAgImFuZCB3cml0aW5nIDE2IGtCIG9mIHJ1YmJpc2ggaW4gdGhlcmUuXG4iLAogCQkgICBzaXplID4+IDEwLCBtbWlvX2FkZHJlc3MpOwogCWRvX3Rlc3Qoc2l6ZSk7CisJZG9fdGVzdF9idWxrX2lvcmVtYXBwaW5nKCk7CiAJcHJfaW5mbygiQWxsIGRvbmUuXG4iKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3RsYi5jIGIvYXJjaC94ODYvbW0vdGxiLmMKaW5kZXggNDI2ZjNhMS4uYzAzZjE0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vdGxiLmMKKysrIGIvYXJjaC94ODYvbW0vdGxiLmMKQEAgLTI3OCwxMSArMjc4LDkgQEAKIAogc3RhdGljIHZvaWQgZG9fZmx1c2hfdGxiX2FsbCh2b2lkICppbmZvKQogewotCXVuc2lnbmVkIGxvbmcgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJX19mbHVzaF90bGJfYWxsKCk7CiAJaWYgKHBlcmNwdV9yZWFkKGNwdV90bGJzdGF0ZS5zdGF0ZSkgPT0gVExCU1RBVEVfTEFaWSkKLQkJbGVhdmVfbW0oY3B1KTsKKwkJbGVhdmVfbW0oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9ubWlfaW50LmMKaW5kZXggYjI4ZDJmMS4uMWJhNjdkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCisrKyBiL2FyY2gveDg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtNjM0LDYgKzYzNCwxOCBAQAogCWlmIChmb3JjZV9hcmNoX3BlcmZtb24gJiYgY3B1X2hhc19hcmNoX3BlcmZtb24pCiAJCXJldHVybiAwOwogCisJLyoKKwkgKiBEb2N1bWVudGF0aW9uIG9uIGlkZW50aWZ5aW5nIEludGVsIHByb2Nlc3NvcnMgYnkgQ1BVIGZhbWlseQorCSAqIGFuZCBtb2RlbCBjYW4gYmUgZm91bmQgaW4gdGhlIEludGVsIFNvZnR3YXJlIERldmVsb3BlcidzCisJICogTWFudWFscyAoU0RNKToKKwkgKgorCSAqICBodHRwOi8vd3d3LmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscy8KKwkgKgorCSAqIEFzIG9mIE1heSAyMDEwIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGlzIHdhcyBpbiB0aGU6CisJICogIkludGVsIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzCisJICogTWFudWFsIFZvbHVtZSAzQjogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlIiwgIlRhYmxlIEItMQorCSAqIENQVUlEIFNpZ25hdHVyZSBWYWx1ZXMgb2YgRGlzcGxheUZhbWlseV9EaXNwbGF5TW9kZWwiLgorCSAqLwogCXN3aXRjaCAoY3B1X21vZGVsKSB7CiAJY2FzZSAwIC4uLiAyOgogCQkqY3B1X3R5cGUgPSAiaTM4Ni9wcHJvIjsKQEAgLTY1NSwxMiArNjY3LDEyIEBACiAJY2FzZSAxNTogY2FzZSAyMzoKIAkJKmNwdV90eXBlID0gImkzODYvY29yZV8yIjsKIAkJYnJlYWs7CisJY2FzZSAweDFhOgogCWNhc2UgMHgyZToKLQljYXNlIDI2OgogCQlzcGVjID0gJm9wX2FyY2hfcGVyZm1vbl9zcGVjOwogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlX2k3IjsKIAkJYnJlYWs7Ci0JY2FzZSAyODoKKwljYXNlIDB4MWM6CiAJCSpjcHVfdHlwZSA9ICJpMzg2L2F0b20iOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2FjcGkuYyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKaW5kZXggMmVjMDRjNC4uMTU0NjZjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2FjcGkuYworKysgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCkBAIC0zNCw2ICszNCwxNSBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJ4MzgwMCIpLAogCQl9LAogCX0sCisJLyogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjAwNyAqLworCS8qIDIwMDYgQU1EIEhUL1ZJQSBzeXN0ZW0gd2l0aCB0d28gaG9zdCBicmlkZ2VzICovCisgICAgICAgIHsKKwkJLmNhbGxiYWNrID0gc2V0X3VzZV9jcnMsCisJCS5pZGVudCA9ICJBU1JvY2sgQUxpdmVTQVRBMi1HTEFOIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkFMaXZlU0FUQTItR0xBTiIpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgIH0sCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9jb21tb24uYyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwppbmRleCAyMTVhMjdhLi5hMDc3MmFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKKysrIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCkBAIC0xMjUsNiArMTI1LDIzIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpYmlvc19maXh1cF9kZXZpY2VfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyb21fciA9ICZkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdOworCXN0cnVjdCByZXNvdXJjZSAqYmFyX3I7CisJaW50IGJhcjsKKworCWlmIChwY2lfcHJvYmUgJiBQQ0lfTk9BU1NJR05fQkFSUykgeworCQkvKgorCQkqIElmIHRoZSBCSU9TIGRpZCBub3QgYXNzaWduIHRoZSBCQVIsIHplcm8gb3V0IHRoZQorCQkqIHJlc291cmNlIHNvIHRoZSBrZXJuZWwgZG9lc24ndCBhdHRtZXB0IHRvIGFzc2lnbgorCQkqIGl0IGxhdGVyIG9uIGluIHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMKKwkJKi8KKwkJZm9yIChiYXIgPSAwOyBiYXIgPD0gUENJX1NURF9SRVNPVVJDRV9FTkQ7IGJhcisrKSB7CisJCQliYXJfciA9ICZkZXYtPnJlc291cmNlW2Jhcl07CisJCQlpZiAoYmFyX3ItPnN0YXJ0ID09IDAgJiYgYmFyX3ItPmVuZCAhPSAwKSB7CisJCQkJYmFyX3ItPmZsYWdzID0gMDsKKwkJCQliYXJfci0+ZW5kID0gMDsKKwkJCX0KKwkJfQorCX0KIAogCWlmIChwY2lfcHJvYmUgJiBQQ0lfTk9BU1NJR05fUk9NUykgewogCQlpZiAocm9tX3ItPnBhcmVudCkKQEAgLTUwOSw2ICs1MjYsOSBAQAogCX0gZWxzZSBpZiAoIXN0cmNtcChzdHIsICJub3JvbSIpKSB7CiAJCXBjaV9wcm9iZSB8PSBQQ0lfTk9BU1NJR05fUk9NUzsKIAkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIGlmICghc3RyY21wKHN0ciwgIm5vYmFyIikpIHsKKwkJcGNpX3Byb2JlIHw9IFBDSV9OT0FTU0lHTl9CQVJTOworCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiYXNzaWduLWJ1c3NlcyIpKSB7CiAJCXBjaV9wcm9iZSB8PSBQQ0lfQVNTSUdOX0FMTF9CVVNTRVM7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2lycS5jIGIvYXJjaC94ODYvcGNpL2lycS5jCmluZGV4IDk4MTBhMGYuLmY1NDdlZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pcnEuYworKysgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKQEAgLTk4OSw3ICs5ODksNyBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIFBDSSBJTlQgJWMgLT4gSVJRICVkXG4iLCBtc2csICdBJyArIHBpbiAtIDEsIGlycSk7CiAKIAkvKiBVcGRhdGUgSVJRIGZvciBhbGwgZGV2aWNlcyB3aXRoIHRoZSBzYW1lIHBpcnEgdmFsdWUgKi8KLQl3aGlsZSAoKGRldjIgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYyKSkgIT0gTlVMTCkgeworCWZvcl9lYWNoX3BjaV9kZXYoZGV2MikgewogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYyLCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7CiAJCWlmICghcGluKQogCQkJY29udGludWU7CkBAIC0xMDI4LDcgKzEwMjgsNyBAQAogCXU4IHBpbjsKIAogCURCRyhLRVJOX0RFQlVHICJQQ0k6IElSUSBmaXh1cFxuIik7Ci0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJLyoKIAkJICogSWYgdGhlIEJJT1MgaGFzIHNldCBhbiBvdXQgb2YgcmFuZ2UgSVJRIG51bWJlciwganVzdAogCQkgKiBpZ25vcmUgaXQuICBBbHNvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggSVJRJ3MgYXJlCkBAIC0xMDUyLDcgKzEwNTIsNyBAQAogCQlyZXR1cm47CiAKIAlkZXYgPSBOVUxMOwotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgeworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4pOwogCQlpZiAoIXBpbikKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2xlZ2FjeS5jIGIvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCmluZGV4IDhkNDYwZWEuLmM4OTI2NmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYworKysgYi9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBwY2liaW9zX3NjYW5fc3BlY2lmaWNfYnVzKGludCBidXNuKQordm9pZCBfX2RldmluaXQgcGNpYmlvc19zY2FuX3NwZWNpZmljX2J1cyhpbnQgYnVzbikKIHsKIAlpbnQgZGV2Zm47CiAJbG9uZyBub2RlOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby9NYWtlZmlsZSBiL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKaW5kZXggNmI0ZmZlZC4uNGEyYWZhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCkBAIC0xMjAsNyArMTIwLDggQEAKIHF1aWV0X2NtZF92ZHNvID0gVkRTTyAgICAkQAogICAgICAgY21kX3Zkc28gPSAkKENDKSAtbm9zdGRsaWIgLW8gJEAgXAogCQkgICAgICAgJChWRFNPX0xERkxBR1MpICQoVkRTT19MREZMQUdTXyQoZmlsdGVyICUubGRzLCQoXkYpKSkgXAotCQkgICAgICAgLVdsLC1ULCQoZmlsdGVyICUubGRzLCReKSAkKGZpbHRlciAlLm8sJF4pCisJCSAgICAgICAtV2wsLVQsJChmaWx0ZXIgJS5sZHMsJF4pICQoZmlsdGVyICUubywkXikgJiYgXAorCQkgc2ggJChzcmN0cmVlKS8kKHNyYykvY2hlY2t1bmRlZi5zaCAnJChOTSknICckQCcKIAogVkRTT19MREZMQUdTID0gLWZQSUMgLXNoYXJlZCAkKGNhbGwgY2MtbGRvcHRpb24sIC1XbCQoY29tbWEpLS1oYXNoLXN0eWxlPXN5c3YpCiBHQ09WX1BST0ZJTEUgOj0gbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby9jaGVja3VuZGVmLnNoIGIvYXJjaC94ODYvdmRzby9jaGVja3VuZGVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlZTkwYTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni92ZHNvL2NoZWNrdW5kZWYuc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCitubT0iJDEiCitmaWxlPSIkMiIKKyRubSAiJGZpbGUiIHwgZ3JlcCAnXiAqVScgPiAvZGV2L251bGwgMj4mMQoraWYgWyAkPyAtZXEgMSBdOyB0aGVuCisgICAgZXhpdCAwCitlbHNlCisgICAgZWNobyAiJGZpbGU6IHVuZGVmaW5lZCBzeW1ib2xzIGZvdW5kIiA+JjIKKyAgICBleGl0IDEKK2ZpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jIGIvYXJjaC94ODYvdmRzby92ZHNvMzItc2V0dXAuYwppbmRleCAwMmI0NDJlLi4zNmRmOTkxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92ZHNvL3Zkc28zMi1zZXR1cC5jCisrKyBiL2FyY2gveDg2L3Zkc28vdmRzbzMyLXNldHVwLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCi1fX2luaXRjYWxsKHN5c2VudGVyX3NldHVwKTsKK3N1YnN5c19pbml0Y2FsbChzeXNlbnRlcl9zZXR1cCk7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAvKiBSZWdpc3RlciB2c3lzY2FsbDMyIGludG8gdGhlIEFCSSB0YWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby92bWEuYyBiL2FyY2gveDg2L3Zkc28vdm1hLmMKaW5kZXggYWM3NDg2OS4uNGI1ZDI2ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby92bWEuYworKysgYi9hcmNoL3g4Ni92ZHNvL3ZtYS5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJKih0eXBlb2YoX18gIyMgeCkgKiopIHZhcl9yZWYoVkRTTzY0X1NZTUJPTCh2YmFzZSwgeCksICN4KSA9ICZfXyAjIyB4OwogI2luY2x1ZGUgInZleHRlcm4uaCIKICN1bmRlZiBWRVhURVJOCisJdnVubWFwKHZiYXNlKTsKIAlyZXR1cm4gMDsKIAogIG9vbToKQEAgLTc0LDcgKzc1LDcgQEAKIAl2ZHNvX2VuYWJsZWQgPSAwOwogCXJldHVybiAtRU5PTUVNOwogfQotX19pbml0Y2FsbChpbml0X3Zkc29fdmFycyk7CitzdWJzeXNfaW5pdGNhbGwoaW5pdF92ZHNvX3ZhcnMpOwogCiBzdHJ1Y3QgbGludXhfYmlucHJtOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUgYi9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKaW5kZXggOTMwOTU0Ni4uNzc5Mzg1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQpAQCAtMTgsMyArMTgsNCBAQAogb2JqLSQoQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUykrPSBzcGlubG9jay5vCiBvYmotJChDT05GSUdfWEVOX0RFQlVHX0ZTKQkrPSBkZWJ1Z2ZzLm8KIAorb2JqLSQoQ09ORklHX1NXSU9UTEJfWEVOKQkrPSBwY2ktc3dpb3RsYi14ZW4ubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGQ0ZmY1ZTguLjdkNDZjODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTExNzIsNiArMTE3MiwxMCBAQAogCiAJcGdkID0gKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2U7CiAKKwlpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQorCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+KF9QQUdFX1BXVCB8IF9QQUdFX1BDRCk7CisKKwlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9JT01BUDsKIAkvKiBEb24ndCBkbyB0aGUgZnVsbCB2Y3B1X2luZm8gcGxhY2VtZW50IHN0dWZmIHVudGlsIHdlIGhhdmUgYQogCSAgIHBvc3NpYmxlIG1hcCBhbmQgYSBub24tZHVtbXkgc2hhcmVkX2luZm8uICovCiAJcGVyX2NwdSh4ZW5fdmNwdSwgMCkgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+dmNwdV9pbmZvWzBdOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IDQxM2IxOWIuLjQyMDg2YWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KIApAQCAtNTEsMTUgKzUyLDE5IEBACiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgogCisjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9wYWdlLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2h2bS9odm1fb3AuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3ZlcnNpb24uaD4KKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgogI2luY2x1ZGUgPHhlbi9odmMtY29uc29sZS5oPgogCiAjaW5jbHVkZSAibXVsdGljYWxscy5oIgpAQCAtNjgsNiArNzMsMTMgQEAKIAogI2RlZmluZSBNTVVfVVBEQVRFX0hJU1RPCTMwCiAKKy8qCisgKiBQcm90ZWN0cyBhdG9taWMgcmVzZXJ2YXRpb24gZGVjcmVhc2UvaW5jcmVhc2UgYWdhaW5zdCBjb25jdXJyZW50IGluY3JlYXNlcy4KKyAqIEFsc28gcHJvdGVjdHMgbm9uLWF0b21pYyB1cGRhdGVzIG9mIGN1cnJlbnRfcGFnZXMgYW5kIGRyaXZlcl9wYWdlcywgYW5kCisgKiBiYWxsb29uIGxpc3RzLgorICovCitERUZJTkVfU1BJTkxPQ0soeGVuX3Jlc2VydmF0aW9uX2xvY2spOworCiAjaWZkZWYgQ09ORklHX1hFTl9ERUJVR19GUwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTM3OCw2ICszOTAsMjggQEAKIAlyZXR1cm4gUGFnZVBpbm5lZChwYWdlKTsKIH0KIAorc3RhdGljIGJvb2wgeGVuX2lvbWFwX3B0ZShwdGVfdCBwdGUpCit7CisJcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfSU9NQVA7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9zZXRfaW9tYXBfcHRlKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpCit7CisJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisJc3RydWN0IG1tdV91cGRhdGUgKnU7CisKKwltY3MgPSB4ZW5fbWNfZW50cnkoc2l6ZW9mKCp1KSk7CisJdSA9IG1jcy5hcmdzOworCisJLyogcHRlcCBtaWdodCBiZSBrbWFwcGVkIHdoZW4gdXNpbmcgMzItYml0IEhJR0hQVEUgKi8KKwl1LT5wdHIgPSBhcmJpdHJhcnlfdmlydF90b19tYWNoaW5lKHB0ZXApLm1hZGRyOworCXUtPnZhbCA9IHB0ZV92YWxfbWEocHRldmFsKTsKKworCU1VTFRJX21tdV91cGRhdGUobWNzLm1jLCBtY3MuYXJncywgMSwgTlVMTCwgRE9NSURfSU8pOworCisJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKK30KKwogc3RhdGljIHZvaWQgeGVuX2V4dGVuZF9tbXVfdXBkYXRlKGNvbnN0IHN0cnVjdCBtbXVfdXBkYXRlICp1cGRhdGUpCiB7CiAJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CkBAIC00NTQsNiArNDg4LDExIEBACiB2b2lkIHhlbl9zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRldmFsKQogeworCWlmICh4ZW5faW9tYXBfcHRlKHB0ZXZhbCkpIHsKKwkJeGVuX3NldF9pb21hcF9wdGUocHRlcCwgcHRldmFsKTsKKwkJZ290byBvdXQ7CisJfQorCiAJQUREX1NUQVRTKHNldF9wdGVfYXQsIDEpOwogLy8JQUREX1NUQVRTKHNldF9wdGVfYXRfcGlubmVkLCB4ZW5fcGFnZV9waW5uZWQocHRlcCkpOwogCUFERF9TVEFUUyhzZXRfcHRlX2F0X2N1cnJlbnQsIG1tID09IGN1cnJlbnQtPm1tKTsKQEAgLTUyNCw4ICs1NjMsMjUgQEAKIAlyZXR1cm4gdmFsOwogfQogCitzdGF0aWMgcHRldmFsX3QgaW9tYXBfcHRlKHB0ZXZhbF90IHZhbCkKK3sKKwlpZiAodmFsICYgX1BBR0VfUFJFU0VOVCkgeworCQl1bnNpZ25lZCBsb25nIHBmbiA9ICh2YWwgJiBQVEVfUEZOX01BU0spID4+IFBBR0VfU0hJRlQ7CisJCXB0ZXZhbF90IGZsYWdzID0gdmFsICYgUFRFX0ZMQUdTX01BU0s7CisKKwkJLyogV2UgYXNzdW1lIHRoZSBwdGUgZnJhbWUgbnVtYmVyIGlzIGEgTUZOLCBzbworCQkgICBqdXN0IHVzZSBpdCBhcy1pcy4gKi8KKwkJdmFsID0gKChwdGV2YWxfdClwZm4gPDwgUEFHRV9TSElGVCkgfCBmbGFnczsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCiBwdGV2YWxfdCB4ZW5fcHRlX3ZhbChwdGVfdCBwdGUpCiB7CisJaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpICYmIChwdGUucHRlICYgX1BBR0VfSU9NQVApKQorCQlyZXR1cm4gcHRlLnB0ZTsKKwogCXJldHVybiBwdGVfbWZuX3RvX3BmbihwdGUucHRlKTsKIH0KIFBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX3B0ZV92YWwpOwpAQCAtNTM4LDcgKzU5NCwyMiBAQAogCiBwdGVfdCB4ZW5fbWFrZV9wdGUocHRldmFsX3QgcHRlKQogewotCXB0ZSA9IHB0ZV9wZm5fdG9fbWZuKHB0ZSk7CisJcGh5c19hZGRyX3QgYWRkciA9IChwdGUgJiBQVEVfUEZOX01BU0spOworCisJLyoKKwkgKiBVbnByaXZpbGVnZWQgZG9tYWlucyBhcmUgYWxsb3dlZCB0byBkbyBJT01BUHBpbmdzIGZvcgorCSAqIFBDSSBwYXNzdGhyb3VnaCwgYnV0IG5vdCBtYXAgSVNBIHNwYWNlLiAgVGhlIElTQQorCSAqIG1hcHBpbmdzIGFyZSBqdXN0IGR1bW15IGxvY2FsIG1hcHBpbmdzIHRvIGtlZXAgb3RoZXIKKwkgKiBwYXJ0cyBvZiB0aGUga2VybmVsIGhhcHB5LgorCSAqLworCWlmICh1bmxpa2VseShwdGUgJiBfUEFHRV9JT01BUCkgJiYKKwkgICAgKHhlbl9pbml0aWFsX2RvbWFpbigpIHx8IGFkZHIgPj0gSVNBX0VORF9BRERSRVNTKSkgeworCQlwdGUgPSBpb21hcF9wdGUocHRlKTsKKwl9IGVsc2UgeworCQlwdGUgJj0gfl9QQUdFX0lPTUFQOworCQlwdGUgPSBwdGVfcGZuX3RvX21mbihwdGUpOworCX0KKwogCXJldHVybiBuYXRpdmVfbWFrZV9wdGUocHRlKTsKIH0KIFBWX0NBTExFRV9TQVZFX1JFR1NfVEhVTksoeGVuX21ha2VfcHRlKTsKQEAgLTU5NCw2ICs2NjUsMTEgQEAKIAogdm9pZCB4ZW5fc2V0X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogeworCWlmICh4ZW5faW9tYXBfcHRlKHB0ZSkpIHsKKwkJeGVuX3NldF9pb21hcF9wdGUocHRlcCwgcHRlKTsKKwkJcmV0dXJuOworCX0KKwogCUFERF9TVEFUUyhwdGVfdXBkYXRlLCAxKTsKIC8vCUFERF9TVEFUUyhwdGVfdXBkYXRlX3Bpbm5lZCwgeGVuX3BhZ2VfcGlubmVkKHB0ZXApKTsKIAlBRERfU1RBVFMocHRlX3VwZGF0ZV9iYXRjaGVkLCBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9NTVUpOwpAQCAtNjEwLDYgKzY4NiwxMSBAQAogI2lmZGVmIENPTkZJR19YODZfUEFFCiB2b2lkIHhlbl9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogeworCWlmICh4ZW5faW9tYXBfcHRlKHB0ZSkpIHsKKwkJeGVuX3NldF9pb21hcF9wdGUocHRlcCwgcHRlKTsKKwkJcmV0dXJuOworCX0KKwogCXNldF82NGJpdCgodTY0ICopcHRlcCwgbmF0aXZlX3B0ZV92YWwocHRlKSk7CiB9CiAKQEAgLTkzNiw4ICsxMDE3LDYgQEAKICAgIHJlYWQtb25seSwgYW5kIGNhbiBiZSBwaW5uZWQuICovCiBzdGF0aWMgdm9pZCBfX3hlbl9wZ2RfcGluKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogewotCXZtX3VubWFwX2FsaWFzZXMoKTsKLQogCXhlbl9tY19iYXRjaCgpOwogCiAJaWYgKF9feGVuX3BnZF93YWxrKG1tLCBwZ2QsIHhlbl9waW5fcGFnZSwgVVNFUl9MSU1JVCkpIHsKQEAgLTE1MDEsNyArMTU4MCw2IEBACiAJaWYgKFBhZ2VQaW5uZWQodmlydF90b19wYWdlKG1tLT5wZ2QpKSkgewogCQlTZXRQYWdlUGlubmVkKHBhZ2UpOwogCi0JCXZtX3VubWFwX2FsaWFzZXMoKTsKIAkJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgewogCQkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkb25seShfX3ZhKFBGTl9QSFlTKCh1bnNpZ25lZCBsb25nKXBmbikpKTsKIAkJCWlmIChsZXZlbCA9PSBQVF9QVEUgJiYgVVNFX1NQTElUX1BUTE9DS1MpCkBAIC0xODEyLDkgKzE4OTAsMTYgQEAKIAkJcHRlID0gcGZuX3B0ZShwaHlzLCBwcm90KTsKIAkJYnJlYWs7CiAKLQlkZWZhdWx0OgorCWNhc2UgRklYX1BBUkFWSVJUX0JPT1RNQVA6CisJCS8qIFRoaXMgaXMgYW4gTUZOLCBidXQgaXQgaXNuJ3QgYW4gSU8gbWFwcGluZyBmcm9tIHRoZQorCQkgICBJTyBkb21haW4gKi8KIAkJcHRlID0gbWZuX3B0ZShwaHlzLCBwcm90KTsKIAkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBCeSBkZWZhdWx0LCBzZXRfZml4bWFwIGlzIHVzZWQgZm9yIGhhcmR3YXJlIG1hcHBpbmdzICovCisJCXB0ZSA9IG1mbl9wdGUocGh5cywgX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX0lPTUFQKSk7CisJCWJyZWFrOwogCX0KIAogCV9fbmF0aXZlX3NldF9maXhtYXAoaWR4LCBwdGUpOwpAQCAtMTk0MCw4ICsyMDI1LDIwNiBAQAogCXg4Nl9pbml0LnBhZ2luZy5wYWdldGFibGVfc2V0dXBfc3RhcnQgPSB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0OwogCXg4Nl9pbml0LnBhZ2luZy5wYWdldGFibGVfc2V0dXBfZG9uZSA9IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZTsKIAlwdl9tbXVfb3BzID0geGVuX21tdV9vcHM7CisKKwl2bWFwX2xhenlfdW5tYXAgPSBmYWxzZTsKIH0KIAorLyogUHJvdGVjdGVkIGJ5IHhlbl9yZXNlcnZhdGlvbl9sb2NrLiAqLworI2RlZmluZSBNQVhfQ09OVElHX09SREVSIDkgLyogMk1CICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkaXNjb250aWdfZnJhbWVzWzE8PE1BWF9DT05USUdfT1JERVJdOworCisjZGVmaW5lIFZPSURfUFRFIChtZm5fcHRlKDAsIF9fcGdwcm90KDApKSkKK3N0YXRpYyB2b2lkIHhlbl96YXBfcGZuX3JhbmdlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGludCBvcmRlciwKKwkJCQl1bnNpZ25lZCBsb25nICppbl9mcmFtZXMsCisJCQkJdW5zaWduZWQgbG9uZyAqb3V0X2ZyYW1lcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsKKworCXhlbl9tY19iYXRjaCgpOworCWZvciAoaSA9IDA7IGkgPCAoMVVMPDxvcmRlcik7IGkrKywgdmFkZHIgKz0gUEFHRV9TSVpFKSB7CisJCW1jcyA9IF9feGVuX21jX2VudHJ5KDApOworCisJCWlmIChpbl9mcmFtZXMpCisJCQlpbl9mcmFtZXNbaV0gPSB2aXJ0X3RvX21mbih2YWRkcik7CisKKwkJTVVMVElfdXBkYXRlX3ZhX21hcHBpbmcobWNzLm1jLCB2YWRkciwgVk9JRF9QVEUsIDApOworCQlzZXRfcGh5c190b19tYWNoaW5lKHZpcnRfdG9fcGZuKHZhZGRyKSwgSU5WQUxJRF9QMk1fRU5UUlkpOworCisJCWlmIChvdXRfZnJhbWVzKQorCQkJb3V0X2ZyYW1lc1tpXSA9IHZpcnRfdG9fcGZuKHZhZGRyKTsKKwl9CisJeGVuX21jX2lzc3VlKDApOworfQorCisvKgorICogVXBkYXRlIHRoZSBwZm4tdG8tbWZuIG1hcHBpbmdzIGZvciBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZSwgZWl0aGVyIHRvCisgKiBwb2ludCB0byBhbiBhcnJheSBvZiBtZm5zLCBvciBjb250aWd1b3VzbHkgZnJvbSBhIHNpbmdsZSBzdGFydGluZworICogbWZuLgorICovCitzdGF0aWMgdm9pZCB4ZW5fcmVtYXBfZXhjaGFuZ2VkX3B0ZXModW5zaWduZWQgbG9uZyB2YWRkciwgaW50IG9yZGVyLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbWZucywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmlyc3RfbWZuKQoreworCXVuc2lnbmVkIGksIGxpbWl0OworCXVuc2lnbmVkIGxvbmcgbWZuOworCisJeGVuX21jX2JhdGNoKCk7CisKKwlsaW1pdCA9IDF1IDw8IG9yZGVyOworCWZvciAoaSA9IDA7IGkgPCBsaW1pdDsgaSsrLCB2YWRkciArPSBQQUdFX1NJWkUpIHsKKwkJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3M7CisJCXVuc2lnbmVkIGZsYWdzOworCisJCW1jcyA9IF9feGVuX21jX2VudHJ5KDApOworCQlpZiAobWZucykKKwkJCW1mbiA9IG1mbnNbaV07CisJCWVsc2UKKwkJCW1mbiA9IGZpcnN0X21mbiArIGk7CisKKwkJaWYgKGkgPCAobGltaXQgLSAxKSkKKwkJCWZsYWdzID0gMDsKKwkJZWxzZSB7CisJCQlpZiAob3JkZXIgPT0gMCkKKwkJCQlmbGFncyA9IFVWTUZfSU5WTFBHIHwgVVZNRl9BTEw7CisJCQllbHNlCisJCQkJZmxhZ3MgPSBVVk1GX1RMQl9GTFVTSCB8IFVWTUZfQUxMOworCQl9CisKKwkJTVVMVElfdXBkYXRlX3ZhX21hcHBpbmcobWNzLm1jLCB2YWRkciwKKwkJCQltZm5fcHRlKG1mbiwgUEFHRV9LRVJORUwpLCBmbGFncyk7CisKKwkJc2V0X3BoeXNfdG9fbWFjaGluZSh2aXJ0X3RvX3Bmbih2YWRkciksIG1mbik7CisJfQorCisJeGVuX21jX2lzc3VlKDApOworfQorCisvKgorICogUGVyZm9ybSB0aGUgaHlwZXJjYWxsIHRvIGV4Y2hhbmdlIGEgcmVnaW9uIG9mIG91ciBwZm5zIHRvIHBvaW50IHRvCisgKiBtZW1vcnkgd2l0aCB0aGUgcmVxdWlyZWQgY29udGlndW91cyBhbGlnbm1lbnQuICBUYWtlcyB0aGUgcGZucyBhcworICogaW5wdXQsIGFuZCBwb3B1bGF0ZXMgbWZucyBhcyBvdXRwdXQuCisgKgorICogUmV0dXJucyBhIHN1Y2Nlc3MgY29kZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGh5cGVydmlzb3Igd2FzIGFibGUgdG8KKyAqIHNhdGlzZnkgdGhlIHJlcXVlc3Qgb3Igbm90LgorICovCitzdGF0aWMgaW50IHhlbl9leGNoYW5nZV9tZW1vcnkodW5zaWduZWQgbG9uZyBleHRlbnRzX2luLCB1bnNpZ25lZCBpbnQgb3JkZXJfaW4sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcGZuc19pbiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dGVudHNfb3V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9vdXQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqbWZuc19vdXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKK3sKKwlsb25nIHJjOworCWludCBzdWNjZXNzOworCisJc3RydWN0IHhlbl9tZW1vcnlfZXhjaGFuZ2UgZXhjaGFuZ2UgPSB7CisJCS5pbiA9IHsKKwkJCS5ucl9leHRlbnRzICAgPSBleHRlbnRzX2luLAorCQkJLmV4dGVudF9vcmRlciA9IG9yZGVyX2luLAorCQkJLmV4dGVudF9zdGFydCA9IHBmbnNfaW4sCisJCQkuZG9taWQgICAgICAgID0gRE9NSURfU0VMRgorCQl9LAorCQkub3V0ID0geworCQkJLm5yX2V4dGVudHMgICA9IGV4dGVudHNfb3V0LAorCQkJLmV4dGVudF9vcmRlciA9IG9yZGVyX291dCwKKwkJCS5leHRlbnRfc3RhcnQgPSBtZm5zX291dCwKKwkJCS5hZGRyZXNzX2JpdHMgPSBhZGRyZXNzX2JpdHMsCisJCQkuZG9taWQgICAgICAgID0gRE9NSURfU0VMRgorCQl9CisJfTsKKworCUJVR19PTihleHRlbnRzX2luIDw8IG9yZGVyX2luICE9IGV4dGVudHNfb3V0IDw8IG9yZGVyX291dCk7CisKKwlyYyA9IEhZUEVSVklTT1JfbWVtb3J5X29wKFhFTk1FTV9leGNoYW5nZSwgJmV4Y2hhbmdlKTsKKwlzdWNjZXNzID0gKGV4Y2hhbmdlLm5yX2V4Y2hhbmdlZCA9PSBleHRlbnRzX2luKTsKKworCUJVR19PTighc3VjY2VzcyAmJiAoKGV4Y2hhbmdlLm5yX2V4Y2hhbmdlZCAhPSAwKSB8fCAocmMgPT0gMCkpKTsKKwlCVUdfT04oc3VjY2VzcyAmJiAocmMgIT0gMCkpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2ludCB4ZW5fY3JlYXRlX2NvbnRpZ3VvdXNfcmVnaW9uKHVuc2lnbmVkIGxvbmcgdnN0YXJ0LCB1bnNpZ25lZCBpbnQgb3JkZXIsCisJCQkJIHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCit7CisJdW5zaWduZWQgbG9uZyAqaW5fZnJhbWVzID0gZGlzY29udGlnX2ZyYW1lcywgb3V0X2ZyYW1lOworCXVuc2lnbmVkIGxvbmcgIGZsYWdzOworCWludCAgICAgICAgICAgIHN1Y2Nlc3M7CisKKwkvKgorCSAqIEN1cnJlbnRseSBhbiBhdXRvLXRyYW5zbGF0ZWQgZ3Vlc3Qgd2lsbCBub3QgcGVyZm9ybSBJL08sIG5vciB3aWxsCisJICogaXQgcmVxdWlyZSBQQUUgcGFnZSBkaXJlY3RvcmllcyBiZWxvdyA0R0IuIFRoZXJlZm9yZSBhbnkgY2FsbHMgdG8KKwkgKiB0aGlzIGZ1bmN0aW9uIGFyZSByZWR1bmRhbnQgYW5kIGNhbiBiZSBpZ25vcmVkLgorCSAqLworCisJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShvcmRlciA+IE1BWF9DT05USUdfT1JERVIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldCgodm9pZCAqKSB2c3RhcnQsIDAsIFBBR0VfU0laRSA8PCBvcmRlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGVuX3Jlc2VydmF0aW9uX2xvY2ssIGZsYWdzKTsKKworCS8qIDEuIFphcCBjdXJyZW50IFBURXMsIHJlbWVtYmVyaW5nIE1GTnMuICovCisJeGVuX3phcF9wZm5fcmFuZ2UodnN0YXJ0LCBvcmRlciwgaW5fZnJhbWVzLCBOVUxMKTsKKworCS8qIDIuIEdldCBhIG5ldyBjb250aWd1b3VzIG1lbW9yeSBleHRlbnQuICovCisJb3V0X2ZyYW1lID0gdmlydF90b19wZm4odnN0YXJ0KTsKKwlzdWNjZXNzID0geGVuX2V4Y2hhbmdlX21lbW9yeSgxVUwgPDwgb3JkZXIsIDAsIGluX2ZyYW1lcywKKwkJCQkgICAgICAxLCBvcmRlciwgJm91dF9mcmFtZSwKKwkJCQkgICAgICBhZGRyZXNzX2JpdHMpOworCisJLyogMy4gTWFwIHRoZSBuZXcgZXh0ZW50IGluIHBsYWNlIG9mIG9sZCBwYWdlcy4gKi8KKwlpZiAoc3VjY2VzcykKKwkJeGVuX3JlbWFwX2V4Y2hhbmdlZF9wdGVzKHZzdGFydCwgb3JkZXIsIE5VTEwsIG91dF9mcmFtZSk7CisJZWxzZQorCQl4ZW5fcmVtYXBfZXhjaGFuZ2VkX3B0ZXModnN0YXJ0LCBvcmRlciwgaW5fZnJhbWVzLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhlbl9yZXNlcnZhdGlvbl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc3VjY2VzcyA/IDAgOiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2NyZWF0ZV9jb250aWd1b3VzX3JlZ2lvbik7CisKK3ZvaWQgeGVuX2Rlc3Ryb3lfY29udGlndW91c19yZWdpb24odW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGludCBvcmRlcikKK3sKKwl1bnNpZ25lZCBsb25nICpvdXRfZnJhbWVzID0gZGlzY29udGlnX2ZyYW1lcywgaW5fZnJhbWU7CisJdW5zaWduZWQgbG9uZyAgZmxhZ3M7CisJaW50IHN1Y2Nlc3M7CisKKwlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShvcmRlciA+IE1BWF9DT05USUdfT1JERVIpKQorCQlyZXR1cm47CisKKwltZW1zZXQoKHZvaWQgKikgdnN0YXJ0LCAwLCBQQUdFX1NJWkUgPDwgb3JkZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnhlbl9yZXNlcnZhdGlvbl9sb2NrLCBmbGFncyk7CisKKwkvKiAxLiBGaW5kIHN0YXJ0IE1GTiBvZiBjb250aWd1b3VzIGV4dGVudC4gKi8KKwlpbl9mcmFtZSA9IHZpcnRfdG9fbWZuKHZzdGFydCk7CisKKwkvKiAyLiBaYXAgY3VycmVudCBQVEVzLiAqLworCXhlbl96YXBfcGZuX3JhbmdlKHZzdGFydCwgb3JkZXIsIE5VTEwsIG91dF9mcmFtZXMpOworCisJLyogMy4gRG8gdGhlIGV4Y2hhbmdlIGZvciBub24tY29udGlndW91cyBNRk5zLiAqLworCXN1Y2Nlc3MgPSB4ZW5fZXhjaGFuZ2VfbWVtb3J5KDEsIG9yZGVyLCAmaW5fZnJhbWUsIDFVTCA8PCBvcmRlciwKKwkJCQkJMCwgb3V0X2ZyYW1lcywgMCk7CisKKwkvKiA0LiBNYXAgbmV3IHBhZ2VzIGluIHBsYWNlIG9mIG9sZCBwYWdlcy4gKi8KKwlpZiAoc3VjY2VzcykKKwkJeGVuX3JlbWFwX2V4Y2hhbmdlZF9wdGVzKHZzdGFydCwgb3JkZXIsIG91dF9mcmFtZXMsIDApOworCWVsc2UKKwkJeGVuX3JlbWFwX2V4Y2hhbmdlZF9wdGVzKHZzdGFydCwgb3JkZXIsIE5VTEwsIGluX2ZyYW1lKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhlbl9yZXNlcnZhdGlvbl9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZGVzdHJveV9jb250aWd1b3VzX3JlZ2lvbik7CisKICNpZmRlZiBDT05GSUdfWEVOX1BWSFZNCiBzdGF0aWMgdm9pZCB4ZW5faHZtX2V4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wY2ktc3dpb3RsYi14ZW4uYyBiL2FyY2gveDg2L3hlbi9wY2ktc3dpb3RsYi14ZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDEzZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3BjaS1zd2lvdGxiLXhlbi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIEdsdWUgY29kZSB0byBsaWIvc3dpb3RsYi14ZW4uYyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDx4ZW4vc3dpb3RsYi14ZW4uaD4KKworI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPHhlbi94ZW4uaD4KKworaW50IHhlbl9zd2lvdGxiIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgeGVuX3N3aW90bGJfZG1hX29wcyA9IHsKKwkubWFwcGluZ19lcnJvciA9IHhlbl9zd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAorCS5hbGxvY19jb2hlcmVudCA9IHhlbl9zd2lvdGxiX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50ID0geGVuX3N3aW90bGJfZnJlZV9jb2hlcmVudCwKKwkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHhlbl9zd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUsCisJLnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgPSB4ZW5fc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlLAorCS5zeW5jX3NnX2Zvcl9jcHUgPSB4ZW5fc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCisJLnN5bmNfc2dfZm9yX2RldmljZSA9IHhlbl9zd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZSwKKwkubWFwX3NnID0geGVuX3N3aW90bGJfbWFwX3NnX2F0dHJzLAorCS51bm1hcF9zZyA9IHhlbl9zd2lvdGxiX3VubWFwX3NnX2F0dHJzLAorCS5tYXBfcGFnZSA9IHhlbl9zd2lvdGxiX21hcF9wYWdlLAorCS51bm1hcF9wYWdlID0geGVuX3N3aW90bGJfdW5tYXBfcGFnZSwKKwkuZG1hX3N1cHBvcnRlZCA9IHhlbl9zd2lvdGxiX2RtYV9zdXBwb3J0ZWQsCit9OworCisvKgorICogcGNpX3hlbl9zd2lvdGxiX2RldGVjdCAtIHNldCB4ZW5fc3dpb3RsYiB0byAxIGlmIG5lY2Vzc2FyeQorICoKKyAqIFRoaXMgcmV0dXJucyBub24temVybyBpZiB3ZSBhcmUgZm9yY2VkIHRvIHVzZSB4ZW5fc3dpb3RsYiAoYnkgdGhlIGJvb3QKKyAqIG9wdGlvbikuCisgKi8KK2ludCBfX2luaXQgcGNpX3hlbl9zd2lvdGxiX2RldGVjdCh2b2lkKQoreworCisJLyogSWYgcnVubmluZyBhcyBQViBndWVzdCwgZWl0aGVyIGlvbW11PXNvZnQsIG9yIHN3aW90bGI9Zm9yY2Ugd2lsbAorCSAqIGFjdGl2YXRlIHRoaXMgSU9NTVUuIElmIHJ1bm5pbmcgYXMgUFYgcHJpdmlsZWdlZCwgYWN0aXZhdGUgaXQKKwkgKiBpcnJlZ2FyZGxlc3NzLgorCSAqLworCWlmICgoeGVuX2luaXRpYWxfZG9tYWluKCkgfHwgc3dpb3RsYiB8fCBzd2lvdGxiX2ZvcmNlKSAmJgorCSAgICAoeGVuX3B2X2RvbWFpbigpKSkKKwkJeGVuX3N3aW90bGIgPSAxOworCisJLyogSWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgWGVuLCB3ZSBNVVNUIGRpc2FibGUgdGhlIG5hdGl2ZSBTV0lPVExCLgorCSAqIERvbid0IHdvcnJ5IGFib3V0IHN3aW90bGJfZm9yY2UgZmxhZyBhY3RpdmF0aW5nIHRoZSBuYXRpdmUsIGFzCisJICogdGhlICdzd2lvdGxiJyBmbGFnIGlzIHRoZSBvbmx5IG9uZSB0dXJuaW5nIGl0IG9uLiAqLworCWlmICh4ZW5fcHZfZG9tYWluKCkpCisJCXN3aW90bGIgPSAwOworCisJcmV0dXJuIHhlbl9zd2lvdGxiOworfQorCit2b2lkIF9faW5pdCBwY2lfeGVuX3N3aW90bGJfaW5pdCh2b2lkKQoreworCWlmICh4ZW5fc3dpb3RsYikgeworCQl4ZW5fc3dpb3RsYl9pbml0KDEpOworCQlkbWFfb3BzID0gJnhlbl9zd2lvdGxiX2RtYV9vcHM7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggZWJlMjI4ZC4uMDg1OWJmZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC00OCw5ICs0OCw2IEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAotY29uZmlnIEdFTkVSSUNfVElNRQotCWRlZl9ib29sIHkKLQogc291cmNlICJpbml0L0tjb25maWciCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IGVkOGNkM2MuLmQyZmQ5MzIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMjksNiArMjksNiBAQAogIyBkZWZpbmUgQ0FDSEVfV0FZX1NJWkUgSUNBQ0hFX1dBWV9TSVpFCiAjZW5kaWYKIAotI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9ETUFfTUlOQUxJR04JTDFfQ0FDSEVfQllURVMKIAogI2VuZGlmCS8qIF9YVEVOU0FfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggNTE4ODJhZS4uNDkyYzk1NyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xNjEsMTQgKzE2MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQotewotCXJldHVybiBMMV9DQUNIRV9CWVRFUzsKLX0KLQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKLQogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCAwZmZhOTQyLi5hYjE4MDAwIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtODEsNiArODEsNyBAQAogIyBkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKICMgZGVmaW5lIFRJT0NQS1RfTk9TVE9QCQkxNgogIyBkZWZpbmUgVElPQ1BLVF9ET1NUT1AJCTMyCisjIGRlZmluZSBUSU9DUEtUX0lPQ1RMCQk2NAogCiAKICNkZWZpbmUgVElPQ05PVFRZCV9JTygnVCcsIDM0KQpAQCAtOTcsNiArOTgsNyBAQAogI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgNDUsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVElPQ0dQVE4JX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAvKiBHZXQgUHR5IE51bWJlciAob2YgcHR5LW11eCBkZXZpY2UpICovCiAjZGVmaW5lIFRJT0NTUFRMQ0sJX0lPVygnVCcsMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLDB4MzYsIGludCkgIC8qIEdlbmVyYXRlIHNpZ25hbCBvbiBQdHkgc2xhdmUgKi8KIAogI2RlZmluZSBUSU9DU0VSQ09ORklHCV9JTygnVCcsIDgzKQogI2RlZmluZSBUSU9DU0VSR1dJTEQJX0lPUignVCcsIDg0LCAgaW50KQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbG9jYWw2NC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbG9jYWw2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YzkzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9sb2NhbDY0LmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsNjQuaD4KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGIxZjlmZGMuLmEwNDIxYTYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaApAQCAtMTMsNiArMTMsNCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRCAofjBVTCkKLQogI2VuZGlmCS8qIF9YVEVOU0FfU0NBVFRFUkxJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGVybWJpdHMuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKaW5kZXggODVhYTZhM2MuLjBkNmM4NzEgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vdGVybWJpdHMuaApAQCAtMTk2LDYgKzE5Niw3IEBACiAjZGVmaW5lIEZMVVNITwkwMDEwMDAwCiAjZGVmaW5lIFBFTkRJTgkwMDQwMDAwCiAjZGVmaW5lIElFWFRFTgkwMTAwMDAwCisjZGVmaW5lIEVYVFBST0MJMDIwMDAwMAogCiAvKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstYmFycmllci5jIGIvYmxvY2svYmxrLWJhcnJpZXIuYwppbmRleCAwZDcxMGM5Li5mMGZhZWZjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstYmFycmllci5jCisrKyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIGJsa19xdWV1ZV9vcmRlcmVkIC0gZG9lcyB0aGlzIHF1ZXVlIHN1cHBvcnQgb3JkZXJlZCB3cml0ZXMKICAqIEBxOiAgICAgICAgdGhlIHJlcXVlc3QgcXVldWUKICAqIEBvcmRlcmVkOiAgb25lIG9mIFFVRVVFX09SREVSRURfKgotICogQHByZXBhcmVfZmx1c2hfZm46IHJxIHNldHVwIGhlbHBlciBmb3IgY2FjaGUgZmx1c2ggb3JkZXJlZCB3cml0ZXMKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgRm9yIGpvdXJuYWxsZWQgZmlsZSBzeXN0ZW1zLCBkb2luZyBvcmRlcmVkIHdyaXRlcyBvbiBhIGNvbW1pdApAQCAtMjIsMTUgKzIxLDggQEAKICAqICAgZmVhdHVyZSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZCBpbmRpY2F0ZSBzby4KICAqCiAgKiovCi1pbnQgYmxrX3F1ZXVlX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIG9yZGVyZWQsCi0JCSAgICAgIHByZXBhcmVfZmx1c2hfZm4gKnByZXBhcmVfZmx1c2hfZm4pCitpbnQgYmxrX3F1ZXVlX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIG9yZGVyZWQpCiB7Ci0JaWYgKCFwcmVwYXJlX2ZsdXNoX2ZuICYmIChvcmRlcmVkICYgKFFVRVVFX09SREVSRURfRE9fUFJFRkxVU0ggfAotCQkJCQkgICAgIFFVRVVFX09SREVSRURfRE9fUE9TVEZMVVNIKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcHJlcGFyZV9mbHVzaF9mbiByZXF1aXJlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAob3JkZXJlZCAhPSBRVUVVRV9PUkRFUkVEX05PTkUgJiYKIAkgICAgb3JkZXJlZCAhPSBRVUVVRV9PUkRFUkVEX0RSQUlOICYmCiAJICAgIG9yZGVyZWQgIT0gUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCAmJgpAQCAtNDQsNyArMzYsNiBAQAogCiAJcS0+b3JkZXJlZCA9IG9yZGVyZWQ7CiAJcS0+bmV4dF9vcmRlcmVkID0gb3JkZXJlZDsKLQlxLT5wcmVwYXJlX2ZsdXNoX2ZuID0gcHJlcGFyZV9mbHVzaF9mbjsKIAogCXJldHVybiAwOwogfQpAQCAtNzksNyArNzAsNyBAQAogCSAqCiAJICogaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXgua2VybmVsLzUzNzQ3MwogCSAqLwotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKQorCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCXJldHVybiBRVUVVRV9PUkRTRVFfRFJBSU47CiAKIAlpZiAoKHJxLT5jbWRfZmxhZ3MgJiBSRVFfT1JERVJFRF9DT0xPUikgPT0KQEAgLTE0MywxMCArMTM0LDEwIEBACiAJfQogCiAJYmxrX3JxX2luaXQocSwgcnEpOwotCXJxLT5jbWRfZmxhZ3MgPSBSRVFfSEFSREJBUlJJRVI7Ci0JcnEtPnJxX2Rpc2sgPSBxLT5iYXJfcnEucnFfZGlzazsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9GUzsKKwlycS0+Y21kX2ZsYWdzID0gUkVRX0hBUkRCQVJSSUVSIHwgUkVRX0ZMVVNIOworCXJxLT5ycV9kaXNrID0gcS0+b3JpZ19iYXJfcnEtPnJxX2Rpc2s7CiAJcnEtPmVuZF9pbyA9IGVuZF9pbzsKLQlxLT5wcmVwYXJlX2ZsdXNoX2ZuKHEsIHJxKTsKIAogCWVsdl9pbnNlcnQocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCk7CiB9CkBAIC0yMDMsNyArMTk0LDcgQEAKIAkJLyogaW5pdGlhbGl6ZSBwcm94eSByZXF1ZXN0IGFuZCBxdWV1ZSBpdCAqLwogCQlibGtfcnFfaW5pdChxLCBycSk7CiAJCWlmIChiaW9fZGF0YV9kaXIocS0+b3JpZ19iYXJfcnEtPmJpbykgPT0gV1JJVEUpCi0JCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9SVzsKKwkJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1dSSVRFOwogCQlpZiAocS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfRE9fRlVBKQogCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRlVBOwogCQlpbml0X3JlcXVlc3RfZnJvbV9iaW8ocnEsIHEtPm9yaWdfYmFyX3JxLT5iaW8pOwpAQCAtMjM2LDcgKzIyNyw4IEBACiBib29sIGJsa19kb19vcmRlcmVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJxcCkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSAqcnFwOwotCWNvbnN0IGludCBpc19iYXJyaWVyID0gYmxrX2ZzX3JlcXVlc3QocnEpICYmIGJsa19iYXJyaWVyX3JxKHJxKTsKKwljb25zdCBpbnQgaXNfYmFycmllciA9IHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyAmJgorCQkJCShycS0+Y21kX2ZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKTsKIAogCWlmICghcS0+b3Jkc2VxKSB7CiAJCWlmICghaXNfYmFycmllcikKQEAgLTI2MSw3ICsyNTMsNyBAQAogCSAqLwogCiAJLyogU3BlY2lhbCByZXF1ZXN0cyBhcmUgbm90IHN1YmplY3QgdG8gb3JkZXJpbmcgcnVsZXMuICovCi0JaWYgKCFibGtfZnNfcmVxdWVzdChycSkgJiYKKwlpZiAocnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTICYmCiAJICAgIHJxICE9ICZxLT5wcmVfZmx1c2hfcnEgJiYgcnEgIT0gJnEtPnBvc3RfZmx1c2hfcnEpCiAJCXJldHVybiB0cnVlOwogCkBAIC0zMTksNiArMzExLDE1IEBACiAJaWYgKCFxKQogCQlyZXR1cm4gLUVOWElPOwogCisJLyoKKwkgKiBzb21lIGJsb2NrIGRldmljZXMgbWF5IG5vdCBoYXZlIHRoZWlyIHF1ZXVlIGNvcnJlY3RseSBzZXQgdXAgaGVyZQorCSAqIChlLmcuIGxvb3AgZGV2aWNlIHdpdGhvdXQgYSBiYWNraW5nIGZpbGUpIGFuZCBzbyBpc3N1aW5nIGEgZmx1c2gKKwkgKiBoZXJlIHdpbGwgcGFuaWMuIEVuc3VyZSB0aGVyZSBpcyBhIHJlcXVlc3QgZnVuY3Rpb24gYmVmb3JlIGlzc3VpbmcKKwkgKiB0aGUgYmFycmllci4KKwkgKi8KKwlpZiAoIXEtPm1ha2VfcmVxdWVzdF9mbikKKwkJcmV0dXJuIC1FTlhJTzsKKwogCWJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMCk7CiAJYmlvLT5iaV9lbmRfaW8gPSBiaW9fZW5kX2VtcHR5X2JhcnJpZXI7CiAJYmlvLT5iaV9iZGV2ID0gYmRldjsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IGYwNjQwZDcuLmVlMWExZTcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiICBiaW8gJXAsIGJpb3RhaWwgJXAsIGJ1ZmZlciAlcCwgbGVuICV1XG4iLAogCSAgICAgICBycS0+YmlvLCBycS0+YmlvdGFpbCwgcnEtPmJ1ZmZlciwgYmxrX3JxX2J5dGVzKHJxKSk7CiAKLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlwcmludGsoS0VSTl9JTkZPICIgIGNkYjogIik7CiAJCWZvciAoYml0ID0gMDsgYml0IDwgQkxLX01BWF9DREI7IGJpdCsrKQogCQkJcHJpbnRrKCIlMDJ4ICIsIHJxLT5jbWRbYml0XSk7CkBAIC02MDgsNiArNjA4LDcgQEAKIAogCXEtPnJlcXVlc3RfZm4JCT0gcmZuOwogCXEtPnByZXBfcnFfZm4JCT0gTlVMTDsKKwlxLT51bnByZXBfcnFfZm4JCT0gTlVMTDsKIAlxLT51bnBsdWdfZm4JCT0gZ2VuZXJpY191bnBsdWdfZGV2aWNlOwogCXEtPnF1ZXVlX2ZsYWdzCQk9IFFVRVVFX0ZMQUdfREVGQVVMVDsKIAlxLT5xdWV1ZV9sb2NrCQk9IGxvY2s7CkBAIC0xMTM1LDMwICsxMTM2LDQ2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGJsa19wdXRfcmVxdWVzdCk7CiAKKy8qKgorICogYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQgLSBhZGQgYSBwYXlsb2FkIHRvIGEgcmVxdWVzdAorICogQHJxOiByZXF1ZXN0IHRvIHVwZGF0ZQorICogQHBhZ2U6IHBhZ2UgYmFja2luZyB0aGUgcGF5bG9hZAorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBwYXlsb2FkLgorICoKKyAqIFRoaXMgYWxsb3dzIHRvIGxhdGVyIGFkZCBhIHBheWxvYWQgdG8gYW4gYWxyZWFkeSBzdWJtaXR0ZWQgcmVxdWVzdCBieQorICogYSBibG9jayBkcml2ZXIuICBUaGUgZHJpdmVyIG5lZWRzIHRvIHRha2UgY2FyZSBvZiBmcmVlaW5nIHRoZSBwYXlsb2FkCisgKiBpdHNlbGYuCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgYSBxdWl0ZSBob3JyaWJsZSBoYWNrIGFuZCBub3RoaW5nIGJ1dCBoYW5kbGluZyBvZgorICogZGlzY2FyZCByZXF1ZXN0cyBzaG91bGQgZXZlciB1c2UgaXQuCisgKi8KK3ZvaWQgYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOworCisJYmlvLT5iaV9pb192ZWMtPmJ2X3BhZ2UgPSBwYWdlOworCWJpby0+YmlfaW9fdmVjLT5idl9vZmZzZXQgPSAwOworCWJpby0+YmlfaW9fdmVjLT5idl9sZW4gPSBsZW47CisKKwliaW8tPmJpX3NpemUgPSBsZW47CisJYmlvLT5iaV92Y250ID0gMTsKKwliaW8tPmJpX3BoeXNfc2VnbWVudHMgPSAxOworCisJcnEtPl9fZGF0YV9sZW4gPSBycS0+cmVzaWRfbGVuID0gbGVuOworCXJxLT5ucl9waHlzX3NlZ21lbnRzID0gMTsKKwlycS0+YnVmZmVyID0gYmlvX2RhdGEoYmlvKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfcmVxdWVzdF9wYXlsb2FkKTsKKwogdm9pZCBpbml0X3JlcXVlc3RfZnJvbV9iaW8oc3RydWN0IHJlcXVlc3QgKnJlcSwgc3RydWN0IGJpbyAqYmlvKQogewogCXJlcS0+Y3B1ID0gYmlvLT5iaV9jb21wX2NwdTsKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfRlM7CiAKLQkvKgotCSAqIEluaGVyaXQgRkFJTEZBU1QgZnJvbSBiaW8gKGZvciByZWFkLWFoZWFkLCBhbmQgZXhwbGljaXQKLQkgKiBGQUlMRkFTVCkuICBGQUlMRkFTVCBmbGFncyBhcmUgaWRlbnRpY2FsIGZvciByZXEgYW5kIGJpby4KLQkgKi8KLQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpKQorCXJlcS0+Y21kX2ZsYWdzIHw9IGJpby0+YmlfcncgJiBSRVFfQ09NTU9OX01BU0s7CisJaWYgKGJpby0+YmlfcncgJiBSRVFfUkFIRUFEKQogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfTUFTSzsKLQllbHNlCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IGJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSzsKLQotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSkKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RJU0NBUkQ7Ci0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfSEFSREJBUlJJRVI7Ci0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9SV19TWU5DOwotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19NRVRBKSkKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1JXX01FVEE7Ci0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX05PSURMRSkpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9OT0lETEU7CiAKIAlyZXEtPmVycm9ycyA9IDA7CiAJcmVxLT5fX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwpAQCAtMTE4MSwxMiArMTE5OCwxMiBAQAogCWludCBlbF9yZXQ7CiAJdW5zaWduZWQgaW50IGJ5dGVzID0gYmlvLT5iaV9zaXplOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByaW8gPSBiaW9fcHJpbyhiaW8pOwotCWNvbnN0IGJvb2wgc3luYyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTyk7Ci0JY29uc3QgYm9vbCB1bnBsdWcgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19VTlBMVUcpOworCWNvbnN0IGJvb2wgc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOworCWNvbnN0IGJvb2wgdW5wbHVnID0gKGJpby0+YmlfcncgJiBSRVFfVU5QTFVHKTsKIAljb25zdCB1bnNpZ25lZCBpbnQgZmYgPSBiaW8tPmJpX3J3ICYgUkVRX0ZBSUxGQVNUX01BU0s7CiAJaW50IHJ3X2ZsYWdzOwogCi0JaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmCisJaWYgKChiaW8tPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKQEAgLTEyMDAsNyArMTIxNyw3IEBACiAKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCi0JaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSB8fCBlbHZfcXVldWVfZW1wdHkocSkpCisJaWYgKHVubGlrZWx5KChiaW8tPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSKSkgfHwgZWx2X3F1ZXVlX2VtcHR5KHEpKQogCQlnb3RvIGdldF9ycTsKIAogCWVsX3JldCA9IGVsdl9tZXJnZShxLCAmcmVxLCBiaW8pOwpAQCAtMTI3NSw3ICsxMjkyLDcgQEAKIAkgKi8KIAlyd19mbGFncyA9IGJpb19kYXRhX2RpcihiaW8pOwogCWlmIChzeW5jKQotCQlyd19mbGFncyB8PSBSRVFfUldfU1lOQzsKKwkJcndfZmxhZ3MgfD0gUkVRX1NZTkM7CiAKIAkvKgogCSAqIEdyYWIgYSBmcmVlIHJlcXVlc3QuIFRoaXMgaXMgbWlnaHQgc2xlZXAgYnV0IGNhbiBub3QgZmFpbC4KQEAgLTE0NjQsNyArMTQ4MSw3IEBACiAJCQlnb3RvIGVuZF9pbzsKIAkJfQogCi0JCWlmICh1bmxpa2VseSghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgJiYKKwkJaWYgKHVubGlrZWx5KCEoYmlvLT5iaV9ydyAmIFJFUV9ESVNDQVJEKSAmJgogCQkJICAgICBucl9zZWN0b3JzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImJpbyB0b28gYmlnIGRldmljZSAlcyAoJXUgPiAldSlcbiIsCiAJCQkgICAgICAgYmRldm5hbWUoYmlvLT5iaV9iZGV2LCBiKSwKQEAgLTE0OTcsOCArMTUxNCwxMCBAQAogCQlpZiAoYmlvX2NoZWNrX2VvZChiaW8sIG5yX3NlY3RvcnMpKQogCQkJZ290byBlbmRfaW87CiAKLQkJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpICYmCi0JCSAgICAhYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKKwkJaWYgKChiaW8tPmJpX3J3ICYgUkVRX0RJU0NBUkQpICYmCisJCSAgICAoIWJsa19xdWV1ZV9kaXNjYXJkKHEpIHx8CisJCSAgICAgKChiaW8tPmJpX3J3ICYgUkVRX1NFQ1VSRSkgJiYKKwkJICAgICAgIWJsa19xdWV1ZV9zZWNkaXNjYXJkKHEpKSkpIHsKIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBlbmRfaW87CiAJCX0KQEAgLTE1ODMsNyArMTYwMiw3IEBACiAJICogSWYgaXQncyBhIHJlZ3VsYXIgcmVhZC93cml0ZSBvciBhIGJhcnJpZXIgd2l0aCBkYXRhIGF0dGFjaGVkLAogCSAqIGdvIHRocm91Z2ggdGhlIG5vcm1hbCBhY2NvdW50aW5nIHN0dWZmIGJlZm9yZSBzdWJtaXNzaW9uLgogCSAqLwotCWlmIChiaW9faGFzX2RhdGEoYmlvKSAmJiAhKHJ3ICYgKDEgPDwgQklPX1JXX0RJU0NBUkQpKSkgeworCWlmIChiaW9faGFzX2RhdGEoYmlvKSAmJiAhKHJ3ICYgUkVRX0RJU0NBUkQpKSB7CiAJCWlmIChydyAmIFdSSVRFKSB7CiAJCQljb3VudF92bV9ldmVudHMoUEdQR09VVCwgY291bnQpOwogCQl9IGVsc2UgewpAQCAtMTYyOCw2ICsxNjQ3LDkgQEAKICAqLwogaW50IGJsa19ycV9jaGVja19saW1pdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQorCQlyZXR1cm4gMDsKKwogCWlmIChibGtfcnFfc2VjdG9ycyhycSkgPiBxdWV1ZV9tYXhfc2VjdG9ycyhxKSB8fAogCSAgICBibGtfcnFfYnl0ZXMocnEpID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkgPDwgOSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvdmVyIG1heCBzaXplIGxpbWl0LlxuIiwgX19mdW5jX18pOwpAQCAtMTc5Niw3ICsxODE4LDcgQEAKIAkJCSAqIHNlZXMgdGhpcyByZXF1ZXN0IChwb3NzaWJseSBhZnRlcgogCQkJICogcmVxdWV1ZWluZykuICBOb3RpZnkgSU8gc2NoZWR1bGVyLgogCQkJICovCi0JCQlpZiAoYmxrX3NvcnRlZF9ycShycSkpCisJCQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9TT1JURUQpCiAJCQkJZWx2X2FjdGl2YXRlX3JxKHEsIHJxKTsKIAogCQkJLyoKQEAgLTE5ODQsMTAgKzIwMDYsMTEgQEAKIAkgKiBUT0RPOiB0ajogVGhpcyBpcyB0b28gc3VidGxlLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIGxldAogCSAqIGxvdyBsZXZlbCBkcml2ZXJzIGRvIHdoYXQgdGhleSBzZWUgZml0LgogCSAqLwotCWlmIChibGtfZnNfcmVxdWVzdChyZXEpKQorCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQogCQlyZXEtPmVycm9ycyA9IDA7CiAKLQlpZiAoZXJyb3IgJiYgKGJsa19mc19yZXF1ZXN0KHJlcSkgJiYgIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpKSB7CisJaWYgKGVycm9yICYmIHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgJiYKKwkgICAgIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgJXMsIHNlY3RvciAlbGx1XG4iLAogCQkJCXJlcS0+cnFfZGlzayA/IHJlcS0+cnFfZGlzay0+ZGlza19uYW1lIDogIj8iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYmxrX3JxX3BvcyhyZXEpKTsKQEAgLTIwNzQsNyArMjA5Nyw3IEBACiAJcmVxLT5idWZmZXIgPSBiaW9fZGF0YShyZXEtPmJpbyk7CiAKIAkvKiB1cGRhdGUgc2VjdG9yIG9ubHkgZm9yIHJlcXVlc3RzIHdpdGggY2xlYXIgZGVmaW5pdGlvbiBvZiBzZWN0b3IgKi8KLQlpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSB8fCBibGtfZGlzY2FyZF9ycShyZXEpKQorCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTIHx8IChyZXEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKSkKIAkJcmVxLT5fX3NlY3RvciArPSB0b3RhbF9ieXRlcyA+PiA5OwogCiAJLyogbWl4ZWQgYXR0cmlidXRlcyBhbHdheXMgZm9sbG93IHRoZSBmaXJzdCBiaW8gKi8KQEAgLTIxMTEsMTEgKzIxMzQsMzIgQEAKIAkgICAgYmxrX3VwZGF0ZV9yZXF1ZXN0KHJxLT5uZXh0X3JxLCBlcnJvciwgYmlkaV9ieXRlcykpCiAJCXJldHVybiB0cnVlOwogCi0JYWRkX2Rpc2tfcmFuZG9tbmVzcyhycS0+cnFfZGlzayk7CisJaWYgKGJsa19xdWV1ZV9hZGRfcmFuZG9tKHJxLT5xKSkKKwkJYWRkX2Rpc2tfcmFuZG9tbmVzcyhycS0+cnFfZGlzayk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qKgorICogYmxrX3VucHJlcF9yZXF1ZXN0IC0gdW5wcmVwYXJlIGEgcmVxdWVzdAorICogQHJlcToJdGhlIHJlcXVlc3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgcmVxdWVzdCByZWFkeSBmb3IgY29tcGxldGUgcmVzdWJtaXNzaW9uIChvcgorICogY29tcGxldGlvbikuICBJdCBoYXBwZW5zIG9ubHkgYWZ0ZXIgYWxsIGVycm9yIGhhbmRsaW5nIGlzIGNvbXBsZXRlLAorICogc28gcmVwcmVzZW50cyB0aGUgYXBwcm9wcmlhdGUgbW9tZW50IHRvIGRlYWxsb2NhdGUgYW55IHJlc291cmNlcworICogdGhhdCB3ZXJlIGFsbG9jYXRlZCB0byB0aGUgcmVxdWVzdCBpbiB0aGUgcHJlcF9ycV9mbi4gIFRoZSBxdWV1ZQorICogbG9jayBpcyBoZWxkIHdoZW4gY2FsbGluZyB0aGlzLgorICovCit2b2lkIGJsa191bnByZXBfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcmVxLT5xOworCisJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9ET05UUFJFUDsKKwlpZiAocS0+dW5wcmVwX3JxX2ZuKQorCQlxLT51bnByZXBfcnFfZm4ocSwgcmVxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa191bnByZXBfcmVxdWVzdCk7CisKIC8qCiAgKiBxdWV1ZSBsb2NrIG11c3QgYmUgaGVsZAogICovCkBAIC0yMTI2LDExICsyMTcwLDE1IEBACiAKIAlCVUdfT04oYmxrX3F1ZXVlZF9ycShyZXEpKTsKIAotCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkgJiYgYmxrX2ZzX3JlcXVlc3QocmVxKSkKKwlpZiAodW5saWtlbHkobGFwdG9wX21vZGUpICYmIHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCiAJCWxhcHRvcF9pb19jb21wbGV0aW9uKCZyZXEtPnEtPmJhY2tpbmdfZGV2X2luZm8pOwogCiAJYmxrX2RlbGV0ZV90aW1lcihyZXEpOwogCisJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0RPTlRQUkVQKQorCQlibGtfdW5wcmVwX3JlcXVlc3QocmVxKTsKKworCiAJYmxrX2FjY291bnRfaW9fZG9uZShyZXEpOwogCiAJaWYgKHJlcS0+ZW5kX2lvKQpAQCAtMjM2Myw3ICsyNDExLDcgQEAKIAkJICAgICBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJLyogQml0IDAgKFIvVykgaXMgaWRlbnRpY2FsIGluIHJxLT5jbWRfZmxhZ3MgYW5kIGJpby0+YmlfcncgKi8KLQlycS0+Y21kX2ZsYWdzIHw9IGJpby0+YmlfcncgJiBSRVFfUlc7CisJcnEtPmNtZF9mbGFncyB8PSBiaW8tPmJpX3J3ICYgUkVRX1dSSVRFOwogCiAJaWYgKGJpb19oYXNfZGF0YShiaW8pKSB7CiAJCXJxLT5ucl9waHlzX3NlZ21lbnRzID0gYmlvX3BoeXNfc2VnbWVudHMocSwgYmlvKTsKQEAgLTI0NTAsNiArMjQ5OCw4IEBACiB7CiAJZHN0LT5jcHUgPSBzcmMtPmNwdTsKIAlkc3QtPmNtZF9mbGFncyA9IChycV9kYXRhX2RpcihzcmMpIHwgUkVRX05PTUVSR0UpOworCWlmIChzcmMtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQorCQlkc3QtPmNtZF9mbGFncyB8PSBSRVFfRElTQ0FSRDsKIAlkc3QtPmNtZF90eXBlID0gc3JjLT5jbWRfdHlwZTsKIAlkc3QtPl9fc2VjdG9yID0gYmxrX3JxX3BvcyhzcmMpOwogCWRzdC0+X19kYXRhX2xlbiA9IGJsa19ycV9ieXRlcyhzcmMpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWV4ZWMuYyBiL2Jsb2NrL2Jsay1leGVjLmMKaW5kZXggNDk1NTdlOS4uZTE2NzJmMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWV4ZWMuYworKysgYi9ibG9jay9ibGstZXhlYy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJX19lbHZfYWRkX3JlcXVlc3QocSwgcnEsIHdoZXJlLCAxKTsKIAlfX2dlbmVyaWNfdW5wbHVnX2RldmljZShxKTsKIAkvKiB0aGUgcXVldWUgaXMgc3RvcHBlZCBzbyBpdCB3b24ndCBiZSBwbHVnZ2VkK3VucGx1Z2dlZCAqLwotCWlmIChibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpKQorCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfUE1fUkVTVU1FKQogCQlxLT5yZXF1ZXN0X2ZuKHEpOwogCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1saWIuYyBiL2Jsb2NrL2Jsay1saWIuYwppbmRleCBkMDIxNmI5Li5jMzkyMDI5IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbGliLmMKKysrIGIvYmxvY2svYmxrLWxpYi5jCkBAIC0xOSw3ICsxOSw2IEBACiAKIAlpZiAoYmlvLT5iaV9wcml2YXRlKQogCQljb21wbGV0ZShiaW8tPmJpX3ByaXZhdGUpOwotCV9fZnJlZV9wYWdlKGJpb19wYWdlKGJpbykpOwogCiAJYmlvX3B1dChiaW8pOwogfQpAQCAtNDIsOCArNDEsOCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAJaW50IHR5cGUgPSBmbGFncyAmIEJMS0RFVl9JRkxfQkFSUklFUiA/CiAJCURJU0NBUkRfQkFSUklFUiA6IERJU0NBUkRfTk9CQVJSSUVSOworCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzOwogCXN0cnVjdCBiaW8gKmJpbzsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcSkKQEAgLTUyLDM2ICs1MSwzNiBAQAogCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXdoaWxlIChucl9zZWN0cyAmJiAhcmV0KSB7Ci0JCXVuc2lnbmVkIGludCBzZWN0b3Jfc2l6ZSA9IHEtPmxpbWl0cy5sb2dpY2FsX2Jsb2NrX3NpemU7Ci0JCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzID0KLQkJCW1pbihxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycywgVUlOVF9NQVggPj4gOSk7CisJLyoKKwkgKiBFbnN1cmUgdGhhdCBtYXhfZGlzY2FyZF9zZWN0b3JzIGlzIG9mIHRoZSBwcm9wZXIKKwkgKiBncmFudWxhcml0eQorCSAqLworCW1heF9kaXNjYXJkX3NlY3RvcnMgPSBtaW4ocS0+bGltaXRzLm1heF9kaXNjYXJkX3NlY3RvcnMsIFVJTlRfTUFYID4+IDkpOworCWlmIChxLT5saW1pdHMuZGlzY2FyZF9ncmFudWxhcml0eSkgeworCQl1bnNpZ25lZCBpbnQgZGlzY19zZWN0cyA9IHEtPmxpbWl0cy5kaXNjYXJkX2dyYW51bGFyaXR5ID4+IDk7CiAKKwkJbWF4X2Rpc2NhcmRfc2VjdG9ycyAmPSB+KGRpc2Nfc2VjdHMgLSAxKTsKKwl9CisKKwlpZiAoZmxhZ3MgJiBCTEtERVZfSUZMX1NFQ1VSRSkgeworCQlpZiAoIWJsa19xdWV1ZV9zZWNkaXNjYXJkKHEpKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl0eXBlIHw9IERJU0NBUkRfU0VDVVJFOworCX0KKworCXdoaWxlIChucl9zZWN0cyAmJiAhcmV0KSB7CiAJCWJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMSk7Ci0JCWlmICghYmlvKQotCQkJZ290byBvdXQ7CisJCWlmICghYmlvKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwogCQliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKIAkJYmlvLT5iaV9lbmRfaW8gPSBibGtkZXZfZGlzY2FyZF9lbmRfaW87CiAJCWJpby0+YmlfYmRldiA9IGJkZXY7CiAJCWlmIChmbGFncyAmIEJMS0RFVl9JRkxfV0FJVCkKIAkJCWJpby0+YmlfcHJpdmF0ZSA9ICZ3YWl0OwogCi0JCS8qCi0JCSAqIEFkZCBhIHplcm9lZCBvbmUtc2VjdG9yIHBheWxvYWQgYXMgdGhhdCdzIHdoYXQKLQkJICogb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG5lZWQuICBJZiB3ZSdsbCBldmVyIG5lZWQKLQkJICogbW9yZSB0aGUgaW50ZXJmYWNlIHdpbGwgbmVlZCByZXZpc2l0aW5nLgotCQkgKi8KLQkJcGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwX21hc2sgfCBfX0dGUF9aRVJPKTsKLQkJaWYgKCFwYWdlKQotCQkJZ290byBvdXRfZnJlZV9iaW87Ci0JCWlmIChiaW9fYWRkX3BjX3BhZ2UocSwgYmlvLCBwYWdlLCBzZWN0b3Jfc2l6ZSwgMCkgPCBzZWN0b3Jfc2l6ZSkKLQkJCWdvdG8gb3V0X2ZyZWVfcGFnZTsKLQotCQkvKgotCQkgKiBBbmQgb3ZlcnJpZGUgdGhlIGJpbyBzaXplIC0gdGhlIHdheSBkaXNjYXJkIHdvcmtzIHdlCi0JCSAqIHRvdWNoIG1hbnkgbW9yZSBibG9ja3Mgb24gZGlzayB0aGFuIHRoZSBhY3R1YWwgcGF5bG9hZAotCQkgKiBsZW5ndGguCi0JCSAqLwogCQlpZiAobnJfc2VjdHMgPiBtYXhfZGlzY2FyZF9zZWN0b3JzKSB7CiAJCQliaW8tPmJpX3NpemUgPSBtYXhfZGlzY2FyZF9zZWN0b3JzIDw8IDk7CiAJCQlucl9zZWN0cyAtPSBtYXhfZGlzY2FyZF9zZWN0b3JzOwpAQCAtMTAzLDEzICsxMDIsOCBAQAogCQkJcmV0ID0gLUVJTzsKIAkJYmlvX3B1dChiaW8pOwogCX0KKwogCXJldHVybiByZXQ7Ci1vdXRfZnJlZV9wYWdlOgotCV9fZnJlZV9wYWdlKHBhZ2UpOwotb3V0X2ZyZWVfYmlvOgotCWJpb19wdXQoYmlvKTsKLW91dDoKLQlyZXR1cm4gLUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2lzc3VlX2Rpc2NhcmQpOwogCkBAIC0xNTcsNyArMTUxLDcgQEAKIGludCBibGtkZXZfaXNzdWVfemVyb291dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsCiAJCQlzZWN0b3JfdCBucl9zZWN0cywgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAlzdHJ1Y3QgYmlvICpiaW87CiAJc3RydWN0IGJpb19iYXRjaCBiYjsKIAl1bnNpZ25lZCBpbnQgc3osIGlzc3VlZCA9IDA7CkBAIC0xNzUsMTEgKzE2OSwxNCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiBzdWJtaXQ6CisJcmV0ID0gMDsKIAl3aGlsZSAobnJfc2VjdHMgIT0gMCkgewogCQliaW8gPSBiaW9fYWxsb2MoZ2ZwX21hc2ssCiAJCQkJbWluKG5yX3NlY3RzLCAoc2VjdG9yX3QpQklPX01BWF9QQUdFUykpOwotCQlpZiAoIWJpbykKKwkJaWYgKCFiaW8pIHsKKwkJCXJldCA9IC1FTk9NRU07CiAJCQlicmVhazsKKwkJfQogCiAJCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwogCQliaW8tPmJpX2JkZXYgICA9IGJkZXY7CkBAIC0xOTgsNiArMTk1LDcgQEAKIAkJCWlmIChyZXQgPCAoc3ogPDwgOSkpCiAJCQkJYnJlYWs7CiAJCX0KKwkJcmV0ID0gMDsKIAkJaXNzdWVkKys7CiAJCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CiAJfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1hcC5jIGIvYmxvY2svYmxrLW1hcC5jCmluZGV4IDkwODNjZjAuLmM2NWQ3NTkgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1tYXAuYworKysgYi9ibG9jay9ibGstbWFwLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihiaW8pOwogCiAJaWYgKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSkKLQkJYmlvLT5iaV9ydyB8PSAoMSA8PCBCSU9fUlcpOworCQliaW8tPmJpX3J3IHw9ICgxIDw8IFJFUV9XUklURSk7CiAKIAlpZiAoZG9fY29weSkKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfQ09QWV9VU0VSOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA1ZTdkYzk5Li4zYjBjZDQyIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtMTIsNyArMTIsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfX2Jsa19yZWNhbGNfcnFfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkJCSAgICAgc3RydWN0IGJpbyAqYmlvKQogewotCXVuc2lnbmVkIGludCBwaHlzX3NpemU7CiAJc3RydWN0IGJpb192ZWMgKmJ2LCAqYnZwcnYgPSBOVUxMOwogCWludCBjbHVzdGVyLCBpLCBoaWdoLCBoaWdocHJ2ID0gMTsKIAl1bnNpZ25lZCBpbnQgc2VnX3NpemUsIG5yX3BoeXNfc2VnczsKQEAgLTI0LDcgKzIzLDcgQEAKIAlmYmlvID0gYmlvOwogCWNsdXN0ZXIgPSB0ZXN0X2JpdChRVUVVRV9GTEFHX0NMVVNURVIsICZxLT5xdWV1ZV9mbGFncyk7CiAJc2VnX3NpemUgPSAwOwotCXBoeXNfc2l6ZSA9IG5yX3BoeXNfc2VncyA9IDA7CisJbnJfcGh5c19zZWdzID0gMDsKIAlmb3JfZWFjaF9iaW8oYmlvKSB7CiAJCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKIAkJCS8qCkBAIC0xODAsNyArMTc5LDcgQEAKIAl9CiAKIAlpZiAocS0+ZG1hX2RyYWluX3NpemUgJiYgcS0+ZG1hX2RyYWluX25lZWRlZChycSkpIHsKLQkJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUlcpCisJCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1dSSVRFKQogCQkJbWVtc2V0KHEtPmRtYV9kcmFpbl9idWZmZXIsIDAsIHEtPmRtYV9kcmFpbl9zaXplKTsKIAogCQlzZy0+cGFnZV9saW5rICY9IH4weDAyOwpAQCAtMjI2LDcgKzIyNSw3IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgbWF4X3NlY3RvcnM7CiAKLQlpZiAodW5saWtlbHkoYmxrX3BjX3JlcXVlc3QocmVxKSkpCisJaWYgKHVubGlrZWx5KHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpKQogCQltYXhfc2VjdG9ycyA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpOwogCWVsc2UKIAkJbWF4X3NlY3RvcnMgPSBxdWV1ZV9tYXhfc2VjdG9ycyhxKTsKQEAgLTI1MCw3ICsyNDksNyBAQAogewogCXVuc2lnbmVkIHNob3J0IG1heF9zZWN0b3JzOwogCi0JaWYgKHVubGlrZWx5KGJsa19wY19yZXF1ZXN0KHJlcSkpKQorCWlmICh1bmxpa2VseShyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSkKIAkJbWF4X3NlY3RvcnMgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKIAllbHNlCiAJCW1heF9zZWN0b3JzID0gcXVldWVfbWF4X3NlY3RvcnMocSk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstc2V0dGluZ3MuYyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCmluZGV4IGY1ZWQ1YTEuLmEyMzRmNGIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCisrKyBiL2Jsb2NrL2Jsay1zZXR0aW5ncy5jCkBAIC0zNyw2ICszNywyMyBAQAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfcHJlcF9ycSk7CiAKIC8qKgorICogYmxrX3F1ZXVlX3VucHJlcF9ycSAtIHNldCBhbiB1bnByZXBhcmVfcmVxdWVzdCBmdW5jdGlvbiBmb3IgcXVldWUKKyAqIEBxOgkJcXVldWUKKyAqIEB1Zm46CXVucHJlcGFyZV9yZXF1ZXN0IGZ1bmN0aW9uCisgKgorICogSXQncyBwb3NzaWJsZSBmb3IgYSBxdWV1ZSB0byByZWdpc3RlciBhbiB1bnByZXBhcmVfcmVxdWVzdCBjYWxsYmFjaworICogd2hpY2ggaXMgaW52b2tlZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgZmluYWxseSBjb21wbGV0ZWQuIFRoZSBnb2FsCisgKiBvZiB0aGUgZnVuY3Rpb24gaXMgdG8gZGVhbGxvY2F0ZSBhbnkgZGF0YSB0aGF0IHdhcyBhbGxvY2F0ZWQgaW4gdGhlCisgKiBwcmVwYXJlX3JlcXVlc3QgY2FsbGJhY2suCisgKgorICovCit2b2lkIGJsa19xdWV1ZV91bnByZXBfcnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVucHJlcF9ycV9mbiAqdWZuKQoreworCXEtPnVucHJlcF9ycV9mbiA9IHVmbjsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3VucHJlcF9ycSk7CisKKy8qKgogICogYmxrX3F1ZXVlX21lcmdlX2J2ZWMgLSBzZXQgYSBtZXJnZV9idmVjIGZ1bmN0aW9uIGZvciBxdWV1ZQogICogQHE6CQlxdWV1ZQogICogQG1iZm46CW1lcmdlX2J2ZWNfZm4KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggMzA2NzU5Yi4uMDAxYWIxOCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTE4MCwyNiArMTgwLDM2IEBACiAJcmV0dXJuIHF1ZXVlX3Zhcl9zaG93KG1heF9od19zZWN0b3JzX2tiLCAocGFnZSkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBxdWV1ZV9ub25yb3Rfc2hvdyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqcGFnZSkKLXsKLQlyZXR1cm4gcXVldWVfdmFyX3Nob3coIWJsa19xdWV1ZV9ub25yb3QocSksIHBhZ2UpOworI2RlZmluZSBRVUVVRV9TWVNGU19CSVRfRk5TKG5hbWUsIGZsYWcsIG5lZykJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3F1ZXVlX3Nob3dfIyNuYW1lKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQkJCVwKK3sJCQkJCQkJCQlcCisJaW50IGJpdDsJCQkJCQkJXAorCWJpdCA9IHRlc3RfYml0KFFVRVVFX0ZMQUdfIyNmbGFnLCAmcS0+cXVldWVfZmxhZ3MpOwkJXAorCXJldHVybiBxdWV1ZV92YXJfc2hvdyhuZWcgPyAhYml0IDogYml0LCBwYWdlKTsJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3QJCQkJCQkJCVwKK3F1ZXVlX3N0b3JlXyMjbmFtZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KSBcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJCVwKKwlzc2l6ZV90IHJldDsJCQkJCQkJXAorCXJldCA9IHF1ZXVlX3Zhcl9zdG9yZSgmdmFsLCBwYWdlLCBjb3VudCk7CQkJXAorCWlmIChuZWcpCQkJCQkJCVwKKwkJdmFsID0gIXZhbDsJCQkJCQlcCisJCQkJCQkJCQlcCisJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsJCQkJCVwKKwlpZiAodmFsKQkJCQkJCQlcCisJCXF1ZXVlX2ZsYWdfc2V0KFFVRVVFX0ZMQUdfIyNmbGFnLCBxKTsJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfIyNmbGFnLCBxKTsJCQlcCisJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KIAotc3RhdGljIHNzaXplX3QgcXVldWVfbm9ucm90X3N0b3JlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjb25zdCBjaGFyICpwYWdlLAotCQkJCSAgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgbm07Ci0Jc3NpemVfdCByZXQgPSBxdWV1ZV92YXJfc3RvcmUoJm5tLCBwYWdlLCBjb3VudCk7Ci0KLQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCWlmIChubSkKLQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX05PTlJPVCwgcSk7Ci0JZWxzZQotCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX05PTlJPVCwgcSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KK1FVRVVFX1NZU0ZTX0JJVF9GTlMobm9ucm90LCBOT05ST1QsIDEpOworUVVFVUVfU1lTRlNfQklUX0ZOUyhyYW5kb20sIEFERF9SQU5ET00sIDApOworUVVFVUVfU1lTRlNfQklUX0ZOUyhpb3N0YXRzLCBJT19TVEFULCAwKTsKKyN1bmRlZiBRVUVVRV9TWVNGU19CSVRfRk5TCiAKIHN0YXRpYyBzc2l6ZV90IHF1ZXVlX25vbWVyZ2VzX3Nob3coc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKnBhZ2UpCiB7CkBAIC0yNTAsMjcgKzI2MCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgcXVldWVfaW9zdGF0c19zaG93KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpwYWdlKQotewotCXJldHVybiBxdWV1ZV92YXJfc2hvdyhibGtfcXVldWVfaW9fc3RhdChxKSwgcGFnZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHF1ZXVlX2lvc3RhdHNfc3RvcmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNvbnN0IGNoYXIgKnBhZ2UsCi0JCQkJICAgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgc3RhdHM7Ci0Jc3NpemVfdCByZXQgPSBxdWV1ZV92YXJfc3RvcmUoJnN0YXRzLCBwYWdlLCBjb3VudCk7Ci0KLQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCWlmIChzdGF0cykKLQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19JT19TVEFULCBxKTsKLQllbHNlCi0JCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19JT19TVEFULCBxKTsKLQlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3RydWN0IHF1ZXVlX3N5c2ZzX2VudHJ5IHF1ZXVlX3JlcXVlc3RzX2VudHJ5ID0gewogCS5hdHRyID0gey5uYW1lID0gIm5yX3JlcXVlc3RzIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAogCS5zaG93ID0gcXVldWVfcmVxdWVzdHNfc2hvdywKQEAgLTM1Miw4ICszNDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHF1ZXVlX3N5c2ZzX2VudHJ5IHF1ZXVlX25vbnJvdF9lbnRyeSA9IHsKIAkuYXR0ciA9IHsubmFtZSA9ICJyb3RhdGlvbmFsIiwgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiB9LAotCS5zaG93ID0gcXVldWVfbm9ucm90X3Nob3csCi0JLnN0b3JlID0gcXVldWVfbm9ucm90X3N0b3JlLAorCS5zaG93ID0gcXVldWVfc2hvd19ub25yb3QsCisJLnN0b3JlID0gcXVldWVfc3RvcmVfbm9ucm90LAogfTsKIAogc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9ub21lcmdlc19lbnRyeSA9IHsKQEAgLTM3MCw4ICszNTksMTQgQEAKIAogc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9pb3N0YXRzX2VudHJ5ID0gewogCS5hdHRyID0gey5uYW1lID0gImlvc3RhdHMiLCAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSIH0sCi0JLnNob3cgPSBxdWV1ZV9pb3N0YXRzX3Nob3csCi0JLnN0b3JlID0gcXVldWVfaW9zdGF0c19zdG9yZSwKKwkuc2hvdyA9IHF1ZXVlX3Nob3dfaW9zdGF0cywKKwkuc3RvcmUgPSBxdWV1ZV9zdG9yZV9pb3N0YXRzLAorfTsKKworc3RhdGljIHN0cnVjdCBxdWV1ZV9zeXNmc19lbnRyeSBxdWV1ZV9yYW5kb21fZW50cnkgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiYWRkX3JhbmRvbSIsIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IgfSwKKwkuc2hvdyA9IHF1ZXVlX3Nob3dfcmFuZG9tLAorCS5zdG9yZSA9IHF1ZXVlX3N0b3JlX3JhbmRvbSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CkBAIC0zOTQsNiArMzg5LDcgQEAKIAkmcXVldWVfbm9tZXJnZXNfZW50cnkuYXR0ciwKIAkmcXVldWVfcnFfYWZmaW5pdHlfZW50cnkuYXR0ciwKIAkmcXVldWVfaW9zdGF0c19lbnRyeS5hdHRyLAorCSZxdWV1ZV9yYW5kb21fZW50cnkuYXR0ciwKIAlOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCA1ZWUzZDdlLi42ZTdkYzg3IDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMTYxLDggKzE2MSwxMCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBibGtfZG9faW9fc3RhdChzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JcmV0dXJuIHJxLT5ycV9kaXNrICYmIGJsa19ycV9pb19zdGF0KHJxKSAmJgotCSAgICAgICAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSk7CisJcmV0dXJuIHJxLT5ycV9kaXNrICYmCisJICAgICAgIChycS0+Y21kX2ZsYWdzICYgUkVRX0lPX1NUQVQpICYmCisJICAgICAgIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgfHwKKwkgICAgICAgIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCA3OTgyYjgzLi5lYjQwODZmIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgY2ZxX2Jpb19zeW5jKHN0cnVjdCBiaW8gKmJpbykKIHsKLQlyZXR1cm4gYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOworCXJldHVybiBiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogfQogCiAvKgpAQCAtNjQ2LDkgKzY0NiwxMCBAQAogCQlyZXR1cm4gcnExOwogCWVsc2UgaWYgKHJxX2lzX3N5bmMocnEyKSAmJiAhcnFfaXNfc3luYyhycTEpKQogCQlyZXR1cm4gcnEyOwotCWlmIChycV9pc19tZXRhKHJxMSkgJiYgIXJxX2lzX21ldGEocnEyKSkKKwlpZiAoKHJxMS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpICYmICEocnEyLT5jbWRfZmxhZ3MgJiBSRVFfTUVUQSkpCiAJCXJldHVybiBycTE7Ci0JZWxzZSBpZiAocnFfaXNfbWV0YShycTIpICYmICFycV9pc19tZXRhKHJxMSkpCisJZWxzZSBpZiAoKHJxMi0+Y21kX2ZsYWdzICYgUkVRX01FVEEpICYmCisJCSAhKHJxMS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpKQogCQlyZXR1cm4gcnEyOwogCiAJczEgPSBibGtfcnFfcG9zKHJxMSk7CkBAIC0xNDg0LDcgKzE0ODUsNyBAQAogCWNmcXEtPmNmcWQtPnJxX3F1ZXVlZC0tOwogCWNmcV9ibGtpb2NnX3VwZGF0ZV9pb19yZW1vdmVfc3RhdHMoJihSUV9DRlFHKHJxKSktPmJsa2csCiAJCQkJCXJxX2RhdGFfZGlyKHJxKSwgcnFfaXNfc3luYyhycSkpOwotCWlmIChycV9pc19tZXRhKHJxKSkgeworCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpIHsKIAkJV0FSTl9PTighY2ZxcS0+bWV0YV9wZW5kaW5nKTsKIAkJY2ZxcS0+bWV0YV9wZW5kaW5nLS07CiAJfQpAQCAtMzE3Niw3ICszMTc3LDcgQEAKIAkgKiBTbyBib3RoIHF1ZXVlcyBhcmUgc3luYy4gTGV0IHRoZSBuZXcgcmVxdWVzdCBnZXQgZGlzayB0aW1lIGlmCiAJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCiAJICovCi0JaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCisJaWYgKChycS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTMyMzAsNyArMzIzMSw3IEBACiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBSUV9DSUMocnEpOwogCiAJY2ZxZC0+cnFfcXVldWVkKys7Ci0JaWYgKHJxX2lzX21ldGEocnEpKQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX01FVEEpCiAJCWNmcXEtPm1ldGFfcGVuZGluZysrOwogCiAJY2ZxX3VwZGF0ZV9pb190aGlua3RpbWUoY2ZxZCwgY2ljKTsKQEAgLTMzNjUsNyArMzM2Niw4IEBACiAJdW5zaWduZWQgbG9uZyBub3c7CiAKIAlub3cgPSBqaWZmaWVzOwotCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAiY29tcGxldGUgcnFub2lkbGUgJWQiLCAhIXJxX25vaWRsZShycSkpOworCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAiY29tcGxldGUgcnFub2lkbGUgJWQiLAorCQkgICAgICEhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTk9JRExFKSk7CiAKIAljZnFfdXBkYXRlX2h3X3RhZyhjZnFkKTsKIApAQCAtMzQxOSwxMSArMzQyMSwxMiBAQAogCQkJY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgMSk7CiAJCWVsc2UgaWYgKHN5bmMgJiYgY2ZxcV9lbXB0eSAmJgogCQkJICFjZnFfY2xvc2VfY29vcGVyYXRvcihjZnFkLCBjZnFxKSkgewotCQkJY2ZxZC0+bm9pZGxlX3RyZWVfcmVxdWlyZXNfaWRsZSB8PSAhcnFfbm9pZGxlKHJxKTsKKwkJCWNmcWQtPm5vaWRsZV90cmVlX3JlcXVpcmVzX2lkbGUgfD0KKwkJCQkhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTk9JRExFKTsKIAkJCS8qCiAJCQkgKiBJZGxpbmcgaXMgZW5hYmxlZCBmb3IgU1lOQ19XT1JLTE9BRC4KIAkJCSAqIFNZTkNfTk9JRExFX1dPUktMT0FEIGlkbGVzIGF0IHRoZSBlbmQgb2YgdGhlIHRyZWUKLQkJCSAqIG9ubHkgaWYgd2UgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uZSAhcnFfbm9pZGxlIHJlcXVlc3QKKwkJCSAqIG9ubHkgaWYgd2UgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uZSAhUkVRX05PSURMRSByZXF1ZXN0CiAJCQkgKi8KIAkJCWlmIChjZnFkLT5zZXJ2aW5nX3R5cGUgPT0gU1lOQ19XT1JLTE9BRAogCQkJICAgIHx8IGNmcWQtPm5vaWRsZV90cmVlX3JlcXVpcmVzX2lkbGUKZGlmZiAtLWdpdCBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKaW5kZXggZjI2MDUxZi4uMTE5ZjA3YiAxMDA2NDQKLS0tIGEvYmxvY2svY29tcGF0X2lvY3RsLmMKKysrIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKQEAgLTUzNSw1NiArNTM1LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIHsKLQljaGFyIG5hbWVbMzJdOwotCXUxNiBhY3RfbWFzazsKLQl1MzIgYnVmX3NpemU7Ci0JdTMyIGJ1Zl9ucjsKLQljb21wYXRfdTY0IHN0YXJ0X2xiYTsKLQljb21wYXRfdTY0IGVuZF9sYmE7Ci0JdTMyIHBpZDsKLX07Ci0jZGVmaW5lIEJMS1RSQUNFU0VUVVAzMiBfSU9XUigweDEyLCAxMTUsIHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXApCi0KLXN0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjaGFyIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCBidXRzOwotCXN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXAgY2J1dHM7Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7Ci0JY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCWludCByZXQ7Ci0KLQlxID0gYmRldl9nZXRfcXVldWUoYmRldik7Ci0JaWYgKCFxKQotCQlyZXR1cm4gLUVOWElPOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQliZGV2bmFtZShiZGV2LCBiKTsKLQotCWJ1dHMgPSAoc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwKSB7Ci0JCS5hY3RfbWFzayA9IGNidXRzLmFjdF9tYXNrLAotCQkuYnVmX3NpemUgPSBjYnV0cy5idWZfc2l6ZSwKLQkJLmJ1Zl9uciA9IGNidXRzLmJ1Zl9uciwKLQkJLnN0YXJ0X2xiYSA9IGNidXRzLnN0YXJ0X2xiYSwKLQkJLmVuZF9sYmEgPSBjYnV0cy5lbmRfbGJhLAotCQkucGlkID0gY2J1dHMucGlkLAotCX07Ci0JbWVtY3B5KCZidXRzLm5hbWUsICZjYnV0cy5uYW1lLCAzMik7Ci0KLQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0JcmV0ID0gZG9fYmxrX3RyYWNlX3NldHVwKHEsIGIsIGJkZXYtPmJkX2RldiwgYmRldiwgJmJ1dHMpOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMubmFtZSwgMzIpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNvbXBhdF9ibGtkZXZfZHJpdmVyX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCXVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC03NTMsNiArNzAzLDcgQEAKIAljYXNlIEJMS0ZMU0JVRjoKIAljYXNlIEJMS1JPU0VUOgogCWNhc2UgQkxLRElTQ0FSRDoKKwljYXNlIEJMS1NFQ0RJU0NBUkQ6CiAJLyoKIAkgKiB0aGUgb25lcyBiZWxvdyBhcmUgaW1wbGVtZW50ZWQgaW4gYmxrZGV2X2xvY2tlZF9pb2N0bCwKIAkgKiBidXQgd2UgY2FsbCBibGtkZXZfaW9jdGwsIHdoaWNoIGdldHMgdGhlIGxvY2sgZm9yIHVzCkBAIC04MDIsMTYgKzc1MywxMCBAQAogCQlyZXR1cm4gY29tcGF0X3B1dF91NjQoYXJnLCBiZGV2LT5iZF9pbm9kZS0+aV9zaXplKTsKIAogCWNhc2UgQkxLVFJBQ0VTRVRVUDMyOgotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXQgPSBjb21wYXRfYmxrX3RyYWNlX3NldHVwKGJkZXYsIGNvbXBhdF9wdHIoYXJnKSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIHJldDsKIAljYXNlIEJMS1RSQUNFU1RBUlQ6IC8qIGNvbXBhdGlibGUgKi8KIAljYXNlIEJMS1RSQUNFU1RPUDogIC8qIGNvbXBhdGlibGUgKi8KIAljYXNlIEJMS1RSQUNFVEVBUkRPV046IC8qIGNvbXBhdGlibGUgKi8KLQkJbG9ja19rZXJuZWwoKTsKIAkJcmV0ID0gYmxrX3RyYWNlX2lvY3RsKGJkZXYsIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0OwogCWRlZmF1bHQ6CiAJCWlmIChkaXNrLT5mb3BzLT5jb21wYXRfaW9jdGwpCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCA5MjNhOTEzLi5lYzU4NWM5IDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTc5LDggKzc5LDEzIEBACiAJLyoKIAkgKiBEb24ndCBtZXJnZSBmaWxlIHN5c3RlbSByZXF1ZXN0cyBhbmQgZGlzY2FyZCByZXF1ZXN0cwogCSAqLwotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSAhPQotCSAgICBiaW9fcndfZmxhZ2dlZChycS0+YmlvLCBCSU9fUldfRElTQ0FSRCkpCisJaWYgKChiaW8tPmJpX3J3ICYgUkVRX0RJU0NBUkQpICE9IChycS0+YmlvLT5iaV9ydyAmIFJFUV9ESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERvbid0IG1lcmdlIGRpc2NhcmQgcmVxdWVzdHMgYW5kIHNlY3VyZSBkaXNjYXJkIHJlcXVlc3RzCisJICovCisJaWYgKChiaW8tPmJpX3J3ICYgUkVRX1NFQ1VSRSkgIT0gKHJxLT5iaW8tPmJpX3J3ICYgUkVRX1NFQ1VSRSkpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTQyOCw3ICs0MzMsOCBAQAogCWxpc3RfZm9yX2VhY2hfcHJldihlbnRyeSwgJnEtPnF1ZXVlX2hlYWQpIHsKIAkJc3RydWN0IHJlcXVlc3QgKnBvcyA9IGxpc3RfZW50cnlfcnEoZW50cnkpOwogCi0JCWlmIChibGtfZGlzY2FyZF9ycShycSkgIT0gYmxrX2Rpc2NhcmRfcnEocG9zKSkKKwkJaWYgKChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpICE9CisJCSAgICAocG9zLT5jbWRfZmxhZ3MgJiBSRVFfRElTQ0FSRCkpCiAJCQlicmVhazsKIAkJaWYgKHJxX2RhdGFfZGlyKHJxKSAhPSBycV9kYXRhX2Rpcihwb3MpKQogCQkJYnJlYWs7CkBAIC01NTgsNyArNTY0LDcgQEAKIAkgKi8KIAlpZiAoYmxrX2FjY291bnRfcnEocnEpKSB7CiAJCXEtPmluX2ZsaWdodFtycV9pc19zeW5jKHJxKV0tLTsKLQkJaWYgKGJsa19zb3J0ZWRfcnEocnEpKQorCQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9TT1JURUQpCiAJCQllbHZfZGVhY3RpdmF0ZV9ycShxLCBycSk7CiAJfQogCkBAIC02NDQsNyArNjUwLDggQEAKIAkJYnJlYWs7CiAKIAljYXNlIEVMRVZBVE9SX0lOU0VSVF9TT1JUOgotCQlCVUdfT04oIWJsa19mc19yZXF1ZXN0KHJxKSAmJiAhYmxrX2Rpc2NhcmRfcnEocnEpKTsKKwkJQlVHX09OKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUyAmJgorCQkgICAgICAgIShycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpKTsKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfU09SVEVEOwogCQlxLT5ucl9zb3J0ZWQrKzsKIAkJaWYgKHJxX21lcmdlYWJsZShycSkpIHsKQEAgLTcxNiw3ICs3MjMsNyBAQAogCQkvKgogCQkgKiB0b2dnbGUgb3JkZXJlZCBjb2xvcgogCQkgKi8KLQkJaWYgKGJsa19iYXJyaWVyX3JxKHJxKSkKKwkJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfSEFSREJBUlJJRVIpCiAJCQlxLT5vcmRjb2xvciBePSAxOwogCiAJCS8qCkBAIC03MjksNyArNzM2LDggQEAKIAkJICogdGhpcyByZXF1ZXN0IGlzIHNjaGVkdWxpbmcgYm91bmRhcnksIHVwZGF0ZQogCQkgKiBlbmRfc2VjdG9yCiAJCSAqLwotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSkgeworCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTIHx8CisJCSAgICAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKSkgewogCQkJcS0+ZW5kX3NlY3RvciA9IHJxX2VuZF9zZWN0b3IocnEpOwogCQkJcS0+Ym91bmRhcnlfcnEgPSBycTsKIAkJfQpAQCAtODQzLDcgKzg1MSw4IEBACiAJICovCiAJaWYgKGJsa19hY2NvdW50X3JxKHJxKSkgewogCQlxLT5pbl9mbGlnaHRbcnFfaXNfc3luYyhycSldLS07Ci0JCWlmIChibGtfc29ydGVkX3JxKHJxKSAmJiBlLT5vcHMtPmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4pCisJCWlmICgocnEtPmNtZF9mbGFncyAmIFJFUV9TT1JURUQpICYmCisJCSAgICBlLT5vcHMtPmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4pCiAJCQllLT5vcHMtPmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4ocSwgcnEpOwogCX0KIApkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggZThlYjY3OS4uZDgwNTJmMCAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0xMTQsOCArMTE0LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgYmxrX2lvY3RsX2Rpc2NhcmQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdWludDY0X3Qgc3RhcnQsCi0JCQkgICAgIHVpbnQ2NF90IGxlbikKKwkJCSAgICAgdWludDY0X3QgbGVuLCBpbnQgc2VjdXJlKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBCTEtERVZfSUZMX1dBSVQ7CisKIAlpZiAoc3RhcnQgJiA1MTEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChsZW4gJiA1MTEpCkBAIC0xMjUsOCArMTI3LDkgQEAKIAogCWlmIChzdGFydCArIGxlbiA+IChiZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IDkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIGxlbiwgR0ZQX0tFUk5FTCwKLQkJCQkgICAgQkxLREVWX0lGTF9XQUlUKTsKKwlpZiAoc2VjdXJlKQorCQlmbGFncyB8PSBCTEtERVZfSUZMX1NFQ1VSRTsKKwlyZXR1cm4gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIGxlbiwgR0ZQX0tFUk5FTCwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHB1dF91c2hvcnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIHNob3J0IHZhbCkKQEAgLTE2MywxOCArMTY2LDEwIEBACiAJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKLQlpbnQgcmV0OwogCiAJaWYgKGRpc2stPmZvcHMtPmlvY3RsKQogCQlyZXR1cm4gZGlzay0+Zm9wcy0+aW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwogCi0JaWYgKGRpc2stPmZvcHMtPmxvY2tlZF9pb2N0bCkgewotCQlsb2NrX2tlcm5lbCgpOwotCQlyZXQgPSBkaXNrLT5mb3BzLT5sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwotCQl1bmxvY2tfa2VybmVsKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAvKgpAQCAtMTg1LDggKzE4MCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa2Rldl9kcml2ZXJfaW9jdGwpOwogCiAvKgotICogYWx3YXlzIGtlZXAgdGhpcyBpbiBzeW5jIHdpdGggY29tcGF0X2Jsa2Rldl9pb2N0bCgpIGFuZAotICogY29tcGF0X2Jsa2Rldl9sb2NrZWRfaW9jdGwoKQorICogYWx3YXlzIGtlZXAgdGhpcyBpbiBzeW5jIHdpdGggY29tcGF0X2Jsa2Rldl9pb2N0bCgpCiAgKi8KIGludCBibGtkZXZfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBjbWQsCiAJCQl1bnNpZ25lZCBsb25nIGFyZykKQEAgLTIwNiwxMCArMjAwLDggQEAKIAkJaWYgKHJldCAhPSAtRUlOVkFMICYmIHJldCAhPSAtRU5PVFRZKQogCQkJcmV0dXJuIHJldDsKIAotCQlsb2NrX2tlcm5lbCgpOwogCQlmc3luY19iZGV2KGJkZXYpOwogCQlpbnZhbGlkYXRlX2JkZXYoYmRldik7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIEJMS1JPU0VUOgpAQCAtMjIxLDEyICsyMTMsMTEgQEAKIAkJCXJldHVybiAtRUFDQ0VTOwogCQlpZiAoZ2V0X3VzZXIobiwgKGludCBfX3VzZXIgKikoYXJnKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJbG9ja19rZXJuZWwoKTsKIAkJc2V0X2RldmljZV9ybyhiZGV2LCBuKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsKIAotCWNhc2UgQkxLRElTQ0FSRDogeworCWNhc2UgQkxLRElTQ0FSRDoKKwljYXNlIEJMS1NFQ0RJU0NBUkQ6IHsKIAkJdWludDY0X3QgcmFuZ2VbMl07CiAKIAkJaWYgKCEobW9kZSAmIEZNT0RFX1dSSVRFKSkKQEAgLTIzNSw3ICsyMjYsOCBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIocmFuZ2UsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHJhbmdlKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyZXR1cm4gYmxrX2lvY3RsX2Rpc2NhcmQoYmRldiwgcmFuZ2VbMF0sIHJhbmdlWzFdKTsKKwkJcmV0dXJuIGJsa19pb2N0bF9kaXNjYXJkKGJkZXYsIHJhbmdlWzBdLCByYW5nZVsxXSwKKwkJCQkJIGNtZCA9PSBCTEtTRUNESVNDQVJEKTsKIAl9CiAKIAljYXNlIEhESU9fR0VUR0VPOiB7CkBAIC0zMDksMTQgKzMwMSwxMCBAQAogCQkJYmRfcmVsZWFzZShiZGV2KTsKIAkJcmV0dXJuIHJldDsKIAljYXNlIEJMS1BHOgotCQlsb2NrX2tlcm5lbCgpOwogCQlyZXQgPSBibGtwZ19pb2N0bChiZGV2LCAoc3RydWN0IGJsa3BnX2lvY3RsX2FyZyBfX3VzZXIgKikgYXJnKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAljYXNlIEJMS1JSUEFSVDoKLQkJbG9ja19rZXJuZWwoKTsKIAkJcmV0ID0gYmxrZGV2X3JlcmVhZF9wYXJ0KGJkZXYpOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCWNhc2UgQkxLR0VUU0laRToKIAkJc2l6ZSA9IGJkZXYtPmJkX2lub2RlLT5pX3NpemU7CkBAIC0zMjksOSArMzE3LDcgQEAKIAljYXNlIEJMS1RSQUNFU1RPUDoKIAljYXNlIEJMS1RSQUNFU0VUVVA6CiAJY2FzZSBCTEtUUkFDRVRFQVJET1dOOgotCQlsb2NrX2tlcm5lbCgpOwogCQlyZXQgPSBibGtfdHJhY2VfaW9jdGwoYmRldiwgY21kLCAoY2hhciBfX3VzZXIgKikgYXJnKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L0tjb25maWcgYi9jcnlwdG8vYXN5bmNfdHgvS2NvbmZpZwppbmRleCBlMjhlMjc2Li41ZGUyZWQxIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvS2NvbmZpZworKysgYi9jcnlwdG8vYXN5bmNfdHgvS2NvbmZpZwpAQCAtMjIsNiArMjIsMjAgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBBU1lOQ19DT1JFCiAJc2VsZWN0IEFTWU5DX1BRCisJc2VsZWN0IEFTWU5DX1hPUgorCitjb25maWcgQVNZTkNfUkFJRDZfVEVTVAorCXRyaXN0YXRlICJTZWxmIHRlc3QgZm9yIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHJhaWQ2IHJlY292ZXJ5IgorCWRlcGVuZHMgb24gQVNZTkNfUkFJRDZfUkVDT1YKKwlzZWxlY3QgQVNZTkNfTUVNQ1BZCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIG9uZS1zaG90IHNlbGYgdGVzdCB0aGF0IHBlcm11dGVzIHRocm91Z2ggdGhlCisJICByZWNvdmVyeSBvZiBhbGwgdGhlIHBvc3NpYmxlIHR3byBkaXNrIGZhaWx1cmUgc2NlbmFyaW9zIGZvciBhCisJICBOLWRpc2sgYXJyYXkuICBSZWNvdmVyeSBpcyBwZXJmb3JtZWQgd2l0aCB0aGUgYXN5bmNocm9ub3VzCisJICByYWlkNiByZWNvdmVyeSByb3V0aW5lcywgYW5kIHdpbGwgb3B0aW9uYWxseSB1c2UgYW4gb2ZmbG9hZAorCSAgZW5naW5lIGlmIG9uZSBpcyBhdmFpbGFibGUuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBBU1lOQ19UWF9ESVNBQkxFX1BRX1ZBTF9ETUEKIAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA5MTg3NGUwLi5hZTQ3MzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTEwMSw3ICsxMDEsOSBAQAogb2JqLSQoQ09ORklHX0NSWVBUTykJCSs9IGNyeXB0by8KIG9iai0kKENPTkZJR19TVVBFUkgpCQkrPSBzaC8KIG9iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaC8KLW9iai0kKENPTkZJR19HRU5FUklDX1RJTUUpCSs9IGNsb2Nrc291cmNlLworaWZuZGVmIENPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorb2JqLXkJCQkJKz0gY2xvY2tzb3VyY2UvCitlbmRpZgogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpCSs9IGRtYS8KIG9iai0kKENPTkZJR19EQ0EpCQkrPSBkY2EvCiBvYmotJChDT05GSUdfSElEKQkJKz0gaGlkLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwppbmRleCA0NDZhY2VkLi5iNzY4NDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwpAQCAtNzcsNyArNzcsNyBAQAogCXBvd2VyX3NhdmluZ19td2FpdF9lYXggPSAoaGlnaGVzdF9jc3RhdGUgPDwgTVdBSVRfU1VCU1RBVEVfU0laRSkgfAogCQkoaGlnaGVzdF9zdWJjc3RhdGUgLSAxKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorI2lmIGRlZmluZWQoQ09ORklHX1g4NikKIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6CiAJY2FzZSBYODZfVkVORE9SX0lOVEVMOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCmluZGV4IGMzZjQzZGEuLmUwZTZhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNldmVudHMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKQEAgLTc4LDcgKzc4LDkgQEAKIHUzMiBhY3BpX2V2X2dwZV9kZXRlY3Qoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9saXN0KTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFza3Moc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFzayhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pOworCithY3BpX3N0YXR1cyBhY3BpX2V2X2VuYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKIAogc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsCiAJCQkJCQkgICAgICAgdTMyIGdwZV9udW1iZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCmluZGV4IDg5OWQ2OGEuLjE4ZTc5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKQEAgLTEwMCwxMyArMTAwLDYgQEAKIHU4IEFDUElfSU5JVF9HTE9CQUwoYWNwaV9nYmxfY3JlYXRlX29zaV9tZXRob2QsIFRSVUUpOwogCiAvKgotICogRGlzYWJsZSB3YWtldXAgR1BFcyBkdXJpbmcgcnVudGltZT8gRGVmYXVsdCBpcyBUUlVFIGJlY2F1c2UgV0FLRSBhbmQKLSAqIFJVTlRJTUUgR1BFcyBzaG91bGQgbmV2ZXIgYmUgc2hhcmVkLCBhbmQgV0FLRSBHUEVzIHNob3VsZCB0eXBpY2FsbHkgb25seQotICogYmUgZW5hYmxlZCBqdXN0IGJlZm9yZSBnb2luZyB0byBzbGVlcC4KLSAqLwotdTggQUNQSV9JTklUX0dMT0JBTChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQsIFRSVUUpOwotCi0vKgogICogT3B0aW9uYWxseSB1c2UgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBBQ1BJIHJlZ2lzdGVyIHdpZHRocy4gU2V0IHRoaXMgdG8KICAqIFRSVUUgdG8gdXNlIHRoZSBkZWZhdWx0cywgaWYgYW4gRkFEVCBjb250YWlucyBpbmNvcnJlY3Qgd2lkdGhzL2xlbmd0aHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNod2FyZS5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKaW5kZXggMzIzOTE1OC4uMTIwYjNhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKQEAgLTkwLDE2ICs5MCwxMyBAQAogLyoKICAqIGh3Z3BlIC0gR1BFIHN1cHBvcnQKICAqLwotdTMyIGFjcGlfaHdfZ3BlX3JlZ2lzdGVyX2JpdChzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCit1MzIgYWNwaV9od19nZXRfZ3BlX3JlZ2lzdGVyX2JpdChzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCiAJCQkgICAgIHN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbyk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2h3X2xvd19zZXRfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbywgdTggYWN0aW9uKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKLQotYWNwaV9zdGF0dXMKIGFjcGlfaHdfZGlzYWJsZV9ncGVfYmxvY2soc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9pbmZvLAogCQkJICBzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrLCB2b2lkICpjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAppbmRleCAxNDdhN2U2Li4xZWUwYmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbG9jYWwuaApAQCAtMTg0LDggKzE4NCw5IEBACiAJdTggZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGZsYWdzICovCiAJYWNwaV9vd25lcl9pZCBvd25lcl9pZDsJLyogTm9kZSBjcmVhdG9yICovCiAJdW5pb24gYWNwaV9uYW1lX3VuaW9uIG5hbWU7CS8qIEFDUEkgTmFtZSwgYWx3YXlzIDQgY2hhcnMgcGVyIEFDUEkgc3BlYyAqLworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnQ7CS8qIFBhcmVudCBub2RlICovCiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmNoaWxkOwkvKiBGaXJzdCBjaGlsZCAqLwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwZWVyOwkvKiBQZWVyLiBQYXJlbnQgaWYgQU5PQkpfRU5EX09GX1BFRVJfTElTVCBzZXQgKi8KKwlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqcGVlcjsJLyogRmlyc3QgcGVlciAqLwogCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgQVNMIGNvbXBpbGVyIGFuZCBkaXNhc3NlbWJsZXIgb25seQpAQCAtMTk5LDcgKzIwMCw3IEBACiAKIC8qIE5hbWVzcGFjZSBOb2RlIGZsYWdzICovCiAKLSNkZWZpbmUgQU5PQkpfRU5EX09GX1BFRVJfTElTVCAgICAgICAgICAweDAxCS8qIEVuZC1vZi1saXN0LCBQZWVyIGZpZWxkIHBvaW50cyB0byBwYXJlbnQgKi8KKyNkZWZpbmUgQU5PQkpfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAweDAxCS8qIEF2YWlsYWJsZSBmb3IgdXNlICovCiAjZGVmaW5lIEFOT0JKX1RFTVBPUkFSWSAgICAgICAgICAgICAgICAgMHgwMgkvKiBOb2RlIGlzIGNyZWF0ZSBieSBhIG1ldGhvZCBhbmQgaXMgdGVtcG9yYXJ5ICovCiAjZGVmaW5lIEFOT0JKX01FVEhPRF9BUkcgICAgICAgICAgICAgICAgMHgwNAkvKiBOb2RlIGlzIGEgbWV0aG9kIGFyZ3VtZW50ICovCiAjZGVmaW5lIEFOT0JKX01FVEhPRF9MT0NBTCAgICAgICAgICAgICAgMHgwOAkvKiBOb2RlIGlzIGEgbWV0aG9kIGxvY2FsICovCkBAIC00MjgsNyArNDI5LDYgQEAKIAl1OCBmbGFnczsJCS8qIE1pc2MgaW5mbyBhYm91dCB0aGlzIEdQRSAqLwogCXU4IGdwZV9udW1iZXI7CQkvKiBUaGlzIEdQRSAqLwogCXU4IHJ1bnRpbWVfY291bnQ7CS8qIFJlZmVyZW5jZXMgdG8gYSBydW4gR1BFICovCi0JdTggd2FrZXVwX2NvdW50OwkvKiBSZWZlcmVuY2VzIHRvIGEgd2FrZSBHUEUgKi8KIH07CiAKIC8qIEluZm9ybWF0aW9uIGFib3V0IGEgR1BFIHJlZ2lzdGVyIHBhaXIsIG9uZSBwZXIgZWFjaCBzdGF0dXMvZW5hYmxlIHBhaXIgaW4gYW4gYXJyYXkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaAppbmRleCAyNTgxNTljLi45ZjYwZmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCkBAIC0zNjksMTEgKzM2OSw0IEBACiAKIHZvaWQgYWNwaV9uc190ZXJtaW5hdGUodm9pZCk7CiAKLXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX25zX2dldF9wYXJlbnRfbm9kZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZQotCQkJCQkJICAgICpub2RlKTsKLQotc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfZ2V0X25leHRfdmFsaWRfbm9kZShzdHJ1Y3QKLQkJCQkJCQlhY3BpX25hbWVzcGFjZV9ub2RlCi0JCQkJCQkJKm5vZGUpOwotCiAjZW5kaWYJCQkJLyogX19BQ05BTUVTUF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAppbmRleCBjZGUxOGVhLi41NDg1N2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCkBAIC05MSwxNCArOTEsMTQgQEAKIAogLyogVmFsdWVzIGZvciBGbGFnIGJ5dGUgYWJvdmUgKi8KIAotI2RlZmluZSBBT1BPQkpfQU1MX0NPTlNUQU5UICAgICAgICAgMHgwMQotI2RlZmluZSBBT1BPQkpfU1RBVElDX1BPSU5URVIgICAgICAgMHgwMgotI2RlZmluZSBBT1BPQkpfREFUQV9WQUxJRCAgICAgICAgICAgMHgwNAotI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAotI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAotI2RlZmluZSBBT1BPQkpfU0lOR0xFX0RBVFVNICAgICAgICAgMHgyMAotI2RlZmluZSBBT1BPQkpfSU5WQUxJRCAgICAgICAgICAgICAgMHg0MAkvKiBVc2VkIGlmIGhvc3QgT1Mgd29uJ3QgYWxsb3cgYW4gb3BfcmVnaW9uIGFkZHJlc3MgKi8KLSNkZWZpbmUgQU9QT0JKX01PRFVMRV9MRVZFTCAgICAgICAgIDB4ODAKKyNkZWZpbmUgQU9QT0JKX0FNTF9DT05TVEFOVCAgICAgICAgIDB4MDEJLyogSW50ZWdlciBpcyBhbiBBTUwgY29uc3RhbnQgKi8KKyNkZWZpbmUgQU9QT0JKX1NUQVRJQ19QT0lOVEVSICAgICAgIDB4MDIJLyogRGF0YSBpcyBwYXJ0IG9mIGFuIEFDUEkgdGFibGUsIGRvbid0IGRlbGV0ZSAqLworI2RlZmluZSBBT1BPQkpfREFUQV9WQUxJRCAgICAgICAgICAgMHgwNAkvKiBPYmplY3QgaXMgaW50aWFsaXplZCBhbmQgZGF0YSBpcyB2YWxpZCAqLworI2RlZmluZSBBT1BPQkpfT0JKRUNUX0lOSVRJQUxJWkVEICAgMHgwOAkvKiBSZWdpb24gaXMgaW5pdGlhbGl6ZWQsIF9SRUcgd2FzIHJ1biAqLworI2RlZmluZSBBT1BPQkpfU0VUVVBfQ09NUExFVEUgICAgICAgMHgxMAkvKiBSZWdpb24gc2V0dXAgaXMgY29tcGxldGUgKi8KKyNkZWZpbmUgQU9QT0JKX0lOVkFMSUQgICAgICAgICAgICAgIDB4MjAJLyogSG9zdCBPUyB3b24ndCBhbGxvdyBhIFJlZ2lvbiBhZGRyZXNzICovCisjZGVmaW5lIEFPUE9CSl9NT0RVTEVfTEVWRUwgICAgICAgICAweDQwCS8qIE1ldGhvZCBpcyBhY3R1YWxseSBtb2R1bGUtbGV2ZWwgY29kZSAqLworI2RlZmluZSBBT1BPQkpfTU9ESUZJRURfTkFNRVNQQUNFICAgMHg4MAkvKiBNZXRob2QgbW9kaWZpZWQgdGhlIG5hbWVzcGFjZSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IDk3MTE2MDguLjEwOTk4ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTUwMywxNSArNTAzLDE2IEBACiAJe3siX1dBSyIsIDEsIEFDUElfUlRZUEVfTk9ORSB8IEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfUEFDS0FHRX19LAogCQkJICB7e3tBQ1BJX1BUWVBFMV9GSVhFRCwgQUNQSV9SVFlQRV9JTlRFR0VSLCAyLDB9LCAwLDB9fSwgLyogRml4ZWQtbGVuZ3RoICgyIEludCksIGJ1dCBpcyBvcHRpb25hbCAqLwogCi0Je3t7MCwwLDAsMH0sIDAsMH19IC8qIFRhYmxlIHRlcm1pbmF0b3IgKi8KKwkvKiBfV0RHL19XRUQgYXJlIE1TIGV4dGVuc2lvbnMgZGVmaW5lZCBieSAiV2luZG93cyBJbnN0cnVtZW50YXRpb24iICovCisKKwl7eyJfV0RHIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKwl7eyJfV0VEIiwgMSwKKwkgIEFDUElfUlRZUEVfSU5URUdFUiB8IEFDUElfUlRZUEVfU1RSSU5HIHwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwKKworCXt7ezAsIDAsIDAsIDB9LCAwLCAwfX0gIC8qIFRhYmxlIHRlcm1pbmF0b3IgKi8KIH07CiAKICNpZiAwCi0JLyogTm90IGltcGxlbWVudGVkICovCi0KLQl7eyJfV0RHIiwgMCwgQUNQSV9SVFlQRV9CVUZGRVJ9fSwgIC8qIE1TIEV4dGVuc2lvbiAqLwotCXt7Il9XRUQiLCAxLCBBQ1BJX1JUWVBFX1BBQ0tBR0V9fSwgLyogTVMgRXh0ZW5zaW9uICovCi0KIAkvKiBUaGlzIGlzIGFuIGludGVybmFsbHkgaW1wbGVtZW50ZWQgY29udHJvbCBtZXRob2QsIG5vIG5lZWQgdG8gY2hlY2sgKi8KIAl7eyJfT1NJIiwgMSwgQUNQSV9SVFlQRV9JTlRFR0VSfX0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaAppbmRleCAxNjFiYzBlLi42ZTVkZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oCkBAIC0xMjcsMjIgKzEyNywyMiBAQAogCWFjcGlfcGFyc2VfdXB3YXJkcyBhc2NlbmRpbmdfY2FsbGJhY2s7CiB9OwogCi0vKiBJbmZvIHVzZWQgYnkgYWNwaV9wc19pbml0X29iamVjdHMgKi8KKy8qIEluZm8gdXNlZCBieSBhY3BpX25zX2luaXRpYWxpemVfb2JqZWN0cyBhbmQgYWNwaV9kc19pbml0aWFsaXplX29iamVjdHMgKi8KIAogc3RydWN0IGFjcGlfaW5pdF93YWxrX2luZm8gewotCXUxNiBtZXRob2RfY291bnQ7Ci0JdTE2IGRldmljZV9jb3VudDsKLQl1MTYgb3BfcmVnaW9uX2NvdW50OwotCXUxNiBmaWVsZF9jb3VudDsKLQl1MTYgYnVmZmVyX2NvdW50OwotCXUxNiBwYWNrYWdlX2NvdW50OwotCXUxNiBvcF9yZWdpb25faW5pdDsKLQl1MTYgZmllbGRfaW5pdDsKLQl1MTYgYnVmZmVyX2luaXQ7Ci0JdTE2IHBhY2thZ2VfaW5pdDsKLQl1MTYgb2JqZWN0X2NvdW50OwotCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CiAJdTMyIHRhYmxlX2luZGV4OworCXUzMiBvYmplY3RfY291bnQ7CisJdTMyIG1ldGhvZF9jb3VudDsKKwl1MzIgZGV2aWNlX2NvdW50OworCXUzMiBvcF9yZWdpb25fY291bnQ7CisJdTMyIGZpZWxkX2NvdW50OworCXUzMiBidWZmZXJfY291bnQ7CisJdTMyIHBhY2thZ2VfY291bnQ7CisJdTMyIG9wX3JlZ2lvbl9pbml0OworCXUzMiBmaWVsZF9pbml0OworCXUzMiBidWZmZXJfaW5pdDsKKwl1MzIgcGFja2FnZV9pbml0OworCWFjcGlfb3duZXJfaWQgb3duZXJfaWQ7CiB9OwogCiBzdHJ1Y3QgYWNwaV9nZXRfZGV2aWNlc19pbmZvIHsKQEAgLTIwMSwxMSArMjAxLDExIEBACiAvKiBJbmZvIHVzZWQgYnkgYWNwaV9uc19pbml0aWFsaXplX2RldmljZXMgKi8KIAogc3RydWN0IGFjcGlfZGV2aWNlX3dhbGtfaW5mbyB7Ci0JdTE2IGRldmljZV9jb3VudDsKLQl1MTYgbnVtX1NUQTsKLQl1MTYgbnVtX0lOSTsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9kZXNjICp0YWJsZV9kZXNjOwogCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmV2YWx1YXRlX2luZm87CisJdTMyIGRldmljZV9jb3VudDsKKwl1MzIgbnVtX1NUQTsKKwl1MzIgbnVtX0lOSTsKIH07CiAKIC8qIFRCRDogW1Jlc3RydWN0dXJlXSBNZXJnZSB3aXRoIHN0cnVjdCBhYm92ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKaW5kZXggYWJlMTQwMy4uY2M0YTM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogCQkJICAiKioqKiBTdGFydGluZyBpbml0aWFsaXphdGlvbiBvZiBuYW1lc3BhY2Ugb2JqZWN0cyAqKioqXG4iKSk7CiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwgIlBhcnNpbmcgYWxsIENvbnRyb2wgTWV0aG9kczoiKSk7CiAKLQlpbmZvLm1ldGhvZF9jb3VudCA9IDA7Ci0JaW5mby5vcF9yZWdpb25fY291bnQgPSAwOwotCWluZm8ub2JqZWN0X2NvdW50ID0gMDsKLQlpbmZvLmRldmljZV9jb3VudCA9IDA7Ci0JaW5mby50YWJsZV9pbmRleCA9IHRhYmxlX2luZGV4OworCS8qIFNldCBhbGwgaW5pdCBpbmZvIHRvIHplcm8gKi8KKworCUFDUElfTUVNU0VUKCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfaW5pdF93YWxrX2luZm8pKTsKKwogCWluZm8ub3duZXJfaWQgPSBvd25lcl9pZDsKKwlpbmZvLnRhYmxlX2luZGV4ID0gdGFibGVfaW5kZXg7CiAKIAkvKiBXYWxrIGVudGlyZSBuYW1lc3BhY2UgZnJvbSB0aGUgc3VwcGxpZWQgcm9vdCAqLwogCkBAIC0yMDQsMTMgKzIwNCwxMyBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCi0JCQkgICAgICAiXG5UYWJsZSBbJTQuNHNdKGlkICU0LjRYKSAtICVoZCBPYmplY3RzIHdpdGggJWhkIERldmljZXMgJWhkIE1ldGhvZHMgJWhkIFJlZ2lvbnNcbiIsCisJCQkgICAgICAiXG5UYWJsZSBbJTQuNHNdKGlkICU0LjRYKSAtICV1IE9iamVjdHMgd2l0aCAldSBEZXZpY2VzICV1IE1ldGhvZHMgJXUgUmVnaW9uc1xuIiwKIAkJCSAgICAgIHRhYmxlLT5zaWduYXR1cmUsIG93bmVyX2lkLCBpbmZvLm9iamVjdF9jb3VudCwKIAkJCSAgICAgIGluZm8uZGV2aWNlX2NvdW50LCBpbmZvLm1ldGhvZF9jb3VudCwKIAkJCSAgICAgIGluZm8ub3BfcmVnaW9uX2NvdW50KSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJICAiJWhkIE1ldGhvZHMsICVoZCBSZWdpb25zXG4iLCBpbmZvLm1ldGhvZF9jb3VudCwKKwkJCSAgIiV1IE1ldGhvZHMsICV1IFJlZ2lvbnNcbiIsIGluZm8ubWV0aG9kX2NvdW50LAogCQkJICBpbmZvLm9wX3JlZ2lvbl9jb3VudCkpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCAyYTlhNTYxLi42NDc1MGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC01ODQsOCArNTg0LDIyIEBACiAJCSAqIHdhbnQgbWFrZSB0aGUgb2JqZWN0cyBwZXJtYW5lbnQuCiAJCSAqLwogCQlpZiAoIShtZXRob2RfZGVzYy0+bWV0aG9kLmZsYWdzICYgQU9QT0JKX01PRFVMRV9MRVZFTCkpIHsKLQkJCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihtZXRob2RfZGVzYy0+bWV0aG9kLgotCQkJCQkJCSAgb3duZXJfaWQpOworCisJCQkvKiBEZWxldGUgYW55IGRpcmVjdCBjaGlsZHJlbiBvZiAoY3JlYXRlZCBieSkgdGhpcyBtZXRob2QgKi8KKworCQkJYWNwaV9uc19kZWxldGVfbmFtZXNwYWNlX3N1YnRyZWUod2Fsa19zdGF0ZS0+CisJCQkJCQkJIG1ldGhvZF9ub2RlKTsKKworCQkJLyoKKwkJCSAqIERlbGV0ZSBhbnkgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBieSB0aGlzIG1ldGhvZAorCQkJICogZWxzZXdoZXJlIGluIHRoZSBuYW1lc3BhY2UgKGlmIGFueSB3ZXJlIGNyZWF0ZWQpLgorCQkJICovCisJCQlpZiAobWV0aG9kX2Rlc2MtPm1ldGhvZC4KKwkJCSAgICBmbGFncyAmIEFPUE9CSl9NT0RJRklFRF9OQU1FU1BBQ0UpIHsKKwkJCQlhY3BpX25zX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIobWV0aG9kX2Rlc2MtPgorCQkJCQkJCQkgIG1ldGhvZC4KKwkJCQkJCQkJICBvd25lcl9pZCk7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTYwNSw3ICs2MTksNyBAQAogCQkgKiB3ZSBpbW1lZGlhdGVseSByZXVzZSBpdCBmb3IgdGhlIG5leHQgdGhyZWFkIGV4ZWN1dGluZyB0aGlzIG1ldGhvZAogCQkgKi8KIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9ESVNQQVRDSCwKLQkJCQkgICIqKiogQ29tcGxldGVkIGV4ZWN1dGlvbiBvZiBvbmUgdGhyZWFkLCAlZCB0aHJlYWRzIHJlbWFpbmluZ1xuIiwKKwkJCQkgICIqKiogQ29tcGxldGVkIGV4ZWN1dGlvbiBvZiBvbmUgdGhyZWFkLCAldSB0aHJlYWRzIHJlbWFpbmluZ1xuIiwKIAkJCQkgIG1ldGhvZF9kZXNjLT5tZXRob2QudGhyZWFkX2NvdW50KSk7CiAJfSBlbHNlIHsKIAkJLyogVGhpcyBpcyB0aGUgb25seSBleGVjdXRpbmcgdGhyZWFkIGZvciB0aGlzIG1ldGhvZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IGYzZDUyZjUuLjgwOTUzMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTEwMiw4ICsxMDIsNyBAQAogCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0ubmFtZS5pbnRlZ2VyIHw9IChpIDw8IDI0KTsKIAkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmRlc2NyaXB0b3JfdHlwZSA9IEFDUElfREVTQ19UWVBFX05BTUVEOwogCQl3YWxrX3N0YXRlLT5hcmd1bWVudHNbaV0udHlwZSA9IEFDUElfVFlQRV9BTlk7Ci0JCXdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpXS5mbGFncyA9Ci0JCSAgICBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUIHwgQU5PQkpfTUVUSE9EX0FSRzsKKwkJd2Fsa19zdGF0ZS0+YXJndW1lbnRzW2ldLmZsYWdzID0gQU5PQkpfTUVUSE9EX0FSRzsKIAl9CiAKIAkvKiBJbml0IHRoZSBtZXRob2QgbG9jYWxzICovCkBAIC0xMTYsOCArMTE1LDcgQEAKIAkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLmRlc2NyaXB0b3JfdHlwZSA9CiAJCSAgICBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKIAkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLnR5cGUgPSBBQ1BJX1RZUEVfQU5ZOwotCQl3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaV0uZmxhZ3MgPQotCQkgICAgQU5PQkpfRU5EX09GX1BFRVJfTElTVCB8IEFOT0JKX01FVEhPRF9MT0NBTDsKKwkJd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2ldLmZsYWdzID0gQU5PQkpfTUVUSE9EX0xPQ0FMOwogCX0KIAogCXJldHVybl9WT0lEOwpAQCAtMTQ2LDcgKzE0NCw3IEBACiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBBQ1BJX01FVEhPRF9OVU1fTE9DQUxTOyBpbmRleCsrKSB7CiAJCWlmICh3YWxrX3N0YXRlLT5sb2NhbF92YXJpYWJsZXNbaW5kZXhdLm9iamVjdCkgewotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiRGVsZXRpbmcgTG9jYWwlZD0lcFxuIiwKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIkRlbGV0aW5nIExvY2FsJXU9JXBcbiIsCiAJCQkJCSAgaW5kZXgsCiAJCQkJCSAgd2Fsa19zdGF0ZS0+bG9jYWxfdmFyaWFibGVzW2luZGV4XS4KIAkJCQkJICBvYmplY3QpKTsKQEAgLTE2Miw3ICsxNjAsNyBAQAogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQUNQSV9NRVRIT0RfTlVNX0FSR1M7IGluZGV4KyspIHsKIAkJaWYgKHdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpbmRleF0ub2JqZWN0KSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICJEZWxldGluZyBBcmclZD0lcFxuIiwKKwkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIkRlbGV0aW5nIEFyZyV1PSVwXG4iLAogCQkJCQkgIGluZGV4LAogCQkJCQkgIHdhbGtfc3RhdGUtPmFyZ3VtZW50c1tpbmRleF0ub2JqZWN0KSk7CiAKQEAgLTIyNiw3ICsyMjQsNyBAQAogCQlpbmRleCsrOwogCX0KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIiVkIGFyZ3MgcGFzc2VkIHRvIG1ldGhvZFxuIiwgaW5kZXgpKTsKKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICIldSBhcmdzIHBhc3NlZCB0byBtZXRob2RcbiIsIGluZGV4KSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIApAQCAtMzIzLDcgKzMyMSw3IEBACiAJQUNQSV9GVU5DVElPTl9UUkFDRShkc19tZXRob2RfZGF0YV9zZXRfdmFsdWUpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLAotCQkJICAiTmV3T2JqICVwIFR5cGUgJTIuMlgsIFJlZnM9JWQgWyVzXVxuIiwgb2JqZWN0LAorCQkJICAiTmV3T2JqICVwIFR5cGUgJTIuMlgsIFJlZnM9JXUgWyVzXVxuIiwgb2JqZWN0LAogCQkJICB0eXBlLCBvYmplY3QtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQsCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShvYmplY3QtPmNvbW1vbi50eXBlKSkpOwogCkBAIC01NDMsNyArNTQxLDcgQEAKIAl1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICpuZXdfb2JqX2Rlc2M7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGRzX3N0b3JlX29iamVjdF90b19sb2NhbCk7Ci0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiVHlwZT0lMi4yWCBJbmRleD0lZCBPYmo9JXBcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiVHlwZT0lMi4yWCBJbmRleD0ldSBPYmo9JXBcbiIsCiAJCQkgIHR5cGUsIGluZGV4LCBvYmpfZGVzYykpOwogCiAJLyogUGFyYW1ldGVyIHZhbGlkYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwppbmRleCAzNjA3YWRjLi44ZTg1ZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCkBAIC04MSw2ICs4MSw3IEBACiB7CiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfb2JqZWN0X3R5cGUgdHlwZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZHNfYnVpbGRfaW50ZXJuYWxfb2JqZWN0KTsKIApAQCAtMTcyLDcgKzE3MywyMCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCi0JCQlzd2l0Y2ggKG9wLT5jb21tb24ubm9kZS0+dHlwZSkgeworCQkJLyoKKwkJCSAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIEFsaWFzIG9iamVjdHMuIFdlIG5lZWQgdG8gc2V0dXAgdGhlIHR5cGUKKwkJCSAqIGFuZCB0aGUgT3AtPkNvbW1vbi5Ob2RlIHRvIHBvaW50IHRvIHRoZSBBbGlhcyB0YXJnZXQuIE5vdGUsCisJCQkgKiBBbGlhcyBoYXMgYXQgbW9zdCBvbmUgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gaW50ZXJuYWxseS4KKwkJCSAqLworCQkJdHlwZSA9IG9wLT5jb21tb24ubm9kZS0+dHlwZTsKKwkJCWlmICh0eXBlID09IEFDUElfVFlQRV9MT0NBTF9BTElBUykgeworCQkJCXR5cGUgPSBvYmpfZGVzYy0+Y29tbW9uLnR5cGU7CisJCQkJb3AtPmNvbW1vbi5ub2RlID0KKwkJCQkgICAgQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSwKKwkJCQkJCSAgb3AtPmNvbW1vbi5ub2RlLT5vYmplY3QpOworCQkJfQorCisJCQlzd2l0Y2ggKHR5cGUpIHsKIAkJCQkvKgogCQkJCSAqIEZvciB0aGVzZSB0eXBlcywgd2UgbmVlZCB0aGUgYWN0dWFsIG5vZGUsIG5vdCB0aGUgc3Vib2JqZWN0LgogCQkJCSAqIEhvd2V2ZXIsIHRoZSBzdWJvYmplY3QgZGlkIG5vdCBnZXQgYW4gZXh0cmEgcmVmZXJlbmNlIGNvdW50IGFib3ZlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCmluZGV4IDUzYTdlNDEuLjdjMGU3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCiAJLyogRXhlY3V0ZSB0aGUgQU1MIGNvZGUgZm9yIHRoZSB0ZXJtX2FyZyBhcmd1bWVudHMgKi8KIAotCXN0YXR1cyA9IGFjcGlfZHNfZXhlY3V0ZV9hcmd1bWVudHMobm9kZSwgYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSksCisJc3RhdHVzID0gYWNwaV9kc19leGVjdXRlX2FyZ3VtZW50cyhub2RlLCBub2RlLT5wYXJlbnQsCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9sZW5ndGgsCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9zdGFydCk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCS8qIEV4ZWN1dGUgdGhlIEFNTCBjb2RlIGZvciB0aGUgdGVybV9hcmcgYXJndW1lbnRzICovCiAKLQlzdGF0dXMgPSBhY3BpX2RzX2V4ZWN1dGVfYXJndW1lbnRzKG5vZGUsIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpLAorCXN0YXR1cyA9IGFjcGlfZHNfZXhlY3V0ZV9hcmd1bWVudHMobm9kZSwgbm9kZS0+cGFyZW50LAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfbGVuZ3RoLAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfc3RhcnQpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAKIAkvKiBFeGVjdXRlIHRoZSBhcmd1bWVudCBBTUwgKi8KIAotCXN0YXR1cyA9IGFjcGlfZHNfZXhlY3V0ZV9hcmd1bWVudHMobm9kZSwgYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSksCisJc3RhdHVzID0gYWNwaV9kc19leGVjdXRlX2FyZ3VtZW50cyhub2RlLCBub2RlLT5wYXJlbnQsCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9sZW5ndGgsCiAJCQkJCSAgIGV4dHJhX2Rlc2MtPmV4dHJhLmFtbF9zdGFydCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN1dGlscy5jCmluZGV4IDMwNmM2MmEuLjE1MTM1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN1dGlscy5jCkBAIC03NDYsNyArNzQ2LDcgQEAKIAkJaW5kZXgtLTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0RJU1BBVENILAotCQkJCSAgIkFyZyAjJWQgKCVwKSBkb25lLCBBcmcxPSVwXG4iLCBpbmRleCwgYXJnLAorCQkJCSAgIkFyZyAjJXUgKCVwKSBkb25lLCBBcmcxPSVwXG4iLCBpbmRleCwgYXJnLAogCQkJCSAgZmlyc3RfYXJnKSk7CiAJfQogCkBAIC03NjAsNyArNzYwLDcgQEAKIAkgKi8KIAlhY3BpX2RzX29ial9zdGFja19wb3BfYW5kX2RlbGV0ZShhcmdfY291bnQsIHdhbGtfc3RhdGUpOwogCi0JQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIldoaWxlIGNyZWF0aW5nIEFyZyAlZCIsIGluZGV4KSk7CisJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIldoaWxlIGNyZWF0aW5nIEFyZyAldSIsIGluZGV4KSk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKaW5kZXggZjU3OTU5MS4uMzAzNjE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKQEAgLTEwMiw5ICsxMDIsOCBAQAogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBDb21wbGV0ZXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEZBRFQtZGVmaW5lZCBHUEUgYmxvY2tzCi0gKiAgICAgICAgICAgICAgKDAgYW5kIDEpLiBUaGlzIGNhdXNlcyB0aGUgX1BSVyBtZXRob2RzIHRvIGJlIHJ1biwgc28gdGhlIEhXCi0gKiAgICAgICAgICAgICAgbXVzdCBiZSBmdWxseSBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LCBpbmNsdWRpbmcgZ2xvYmFsIGxvY2sKLSAqICAgICAgICAgICAgICBzdXBwb3J0LgorICogICAgICAgICAgICAgICgwIGFuZCAxKS4gVGhlIEhXIG11c3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludCwKKyAqICAgICAgICAgICAgICBpbmNsdWRpbmcgZ2xvYmFsIGxvY2sgc3VwcG9ydC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggN2MyYzMzNi4uN2E2YTNlNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKQEAgLTU0LDUxICs1NCw4NiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzCisgKiBGVU5DVElPTjogICAgYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgICAgIC0gR1BFIHRvIHVwZGF0ZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogVXBkYXRlcyBHUEUgcmVnaXN0ZXIgZW5hYmxlIG1hc2tzIGJhc2VkIHVwb24gd2hldGhlciB0aGVyZSBhcmUKLSAqICAgICAgICAgICAgICByZWZlcmVuY2VzIChlaXRoZXIgd2FrZSBvciBydW4pIHRvIHRoaXMgR1BFCisgKiBERVNDUklQVElPTjogVXBkYXRlcyBHUEUgcmVnaXN0ZXIgZW5hYmxlIG1hc2sgYmFzZWQgdXBvbiB3aGV0aGVyIHRoZXJlIGFyZQorICogICAgICAgICAgICAgIHJ1bnRpbWUgcmVmZXJlbmNlcyB0byB0aGlzIEdQRQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGFjcGlfc3RhdHVzCi1hY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbykKK2FjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFzayhzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCiB7CiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOwogCXUzMiByZWdpc3Rlcl9iaXQ7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2spOwogCiAJZ3BlX3JlZ2lzdGVyX2luZm8gPSBncGVfZXZlbnRfaW5mby0+cmVnaXN0ZXJfaW5mbzsKIAlpZiAoIWdwZV9yZWdpc3Rlcl9pbmZvKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRVhJU1QpOwogCX0KIAotCXJlZ2lzdGVyX2JpdCA9IGFjcGlfaHdfZ3BlX3JlZ2lzdGVyX2JpdChncGVfZXZlbnRfaW5mbywKKwlyZWdpc3Rlcl9iaXQgPSBhY3BpX2h3X2dldF9ncGVfcmVnaXN0ZXJfYml0KGdwZV9ldmVudF9pbmZvLAogCQkJCQkJZ3BlX3JlZ2lzdGVyX2luZm8pOwogCi0JLyogQ2xlYXIgdGhlIHdha2UvcnVuIGJpdHMgdXAgZnJvbnQgKi8KKwkvKiBDbGVhciB0aGUgcnVuIGJpdCB1cCBmcm9udCAqLwogCi0JQUNQSV9DTEVBUl9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwgcmVnaXN0ZXJfYml0KTsKIAlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl9ydW4sIHJlZ2lzdGVyX2JpdCk7CiAKLQkvKiBTZXQgdGhlIG1hc2sgYml0cyBvbmx5IGlmIHRoZXJlIGFyZSByZWZlcmVuY2VzIHRvIHRoaXMgR1BFICovCisJLyogU2V0IHRoZSBtYXNrIGJpdCBvbmx5IGlmIHRoZXJlIGFyZSByZWZlcmVuY2VzIHRvIHRoaXMgR1BFICovCiAKIAlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKLQkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgcmVnaXN0ZXJfYml0KTsKLQl9Ci0KLQlpZiAoZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCkgewotCQlBQ1BJX1NFVF9CSVQoZ3BlX3JlZ2lzdGVyX2luZm8tPmVuYWJsZV9mb3Jfd2FrZSwgcmVnaXN0ZXJfYml0KTsKKwkJQUNQSV9TRVRfQklUKGdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfZm9yX3J1biwgKHU4KXJlZ2lzdGVyX2JpdCk7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9ldl9lbmFibGVfZ3BlCisgKgorICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAtIEdQRSB0byBlbmFibGUKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IENsZWFyIHRoZSBnaXZlbiBHUEUgZnJvbSBzdGFsZSBldmVudHMgYW5kIGVuYWJsZSBpdC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMKK2FjcGlfZXZfZW5hYmxlX2dwZShzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8pCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShldl9lbmFibGVfZ3BlKTsKKworCS8qCisJICogV2Ugd2lsbCBvbmx5IGFsbG93IGEgR1BFIHRvIGJlIGVuYWJsZWQgaWYgaXQgaGFzIGVpdGhlciBhbgorCSAqIGFzc29jaWF0ZWQgbWV0aG9kIChfTHh4L19FeHgpIG9yIGEgaGFuZGxlci4gT3RoZXJ3aXNlLCB0aGUKKwkgKiBHUEUgd2lsbCBiZSBpbW1lZGlhdGVseSBkaXNhYmxlZCBieSBhY3BpX2V2X2dwZV9kaXNwYXRjaCB0aGUKKwkgKiBmaXJzdCB0aW1lIGl0IGZpcmVzLgorCSAqLworCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19IQU5ETEVSKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpICovCisJc3RhdHVzID0gYWNwaV9od19jbGVhcl9ncGUoZ3BlX2V2ZW50X2luZm8pOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIHJlcXVlc3RlZCBHUEUgKi8KKwlzdGF0dXMgPSBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9FTkFCTEUpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC00MTcsOCArNDUyLDEyIEBACiAJCX0KIAl9CiAKLQkvKiBFbmFibGUgdGhpcyBHUEUgKi8KLQkodm9pZClhY3BpX2h3X3dyaXRlX2dwZV9lbmFibGVfcmVnKGdwZV9ldmVudF9pbmZvKTsKKwkvKgorCSAqIEVuYWJsZSB0aGlzIEdQRSwgY29uZGl0aW9uYWxseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBHUEUgd2lsbCBvbmx5IGJlCisJICogcGh5c2ljYWxseSBlbmFibGVkIGlmIHRoZSBlbmFibGVfZm9yX3J1biBiaXQgaXMgc2V0IGluIHRoZSBldmVudF9pbmZvCisJICovCisJKHZvaWQpYWNwaV9od19sb3dfc2V0X2dwZShncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfQ09ORF9FTkFCTEUpOworCiAJcmV0dXJuX1ZPSUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwppbmRleCAzNDFhMzhjLi44NTQ0NWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCkBAIC00MzksOCArNDM5LDYgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwotCXN0cnVjdCBhY3BpX2dwZV93YWxrX2luZm8gd2Fsa19pbmZvOwotCXUzMiB3YWtlX2dwZV9jb3VudDsKIAl1MzIgZ3BlX2VuYWJsZWRfY291bnQ7CiAJdTMyIGdwZV9pbmRleDsKIAl1MzIgZ3BlX251bWJlcjsKQEAgLTQ1NiwzNyArNDU0LDkgQEAKIAl9CiAKIAkvKgotCSAqIFJ1bnRpbWUgb3B0aW9uOiBTaG91bGQgd2FrZSBHUEVzIGJlIGVuYWJsZWQgYXQgcnVudGltZT8gIFRoZSBkZWZhdWx0Ci0JICogaXMgbm8sIHRoZXkgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBqdXN0IGFzIHRoZSBtYWNoaW5lIGdvZXMgdG8gc2xlZXAuCisJICogRW5hYmxlIGFsbCBHUEVzIHRoYXQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kLiAgQW55IG90aGVyIEdQRXMKKwkgKiB3aXRoaW4gdGhpcyBibG9jayBtdXN0IGJlIGVuYWJsZWQgdmlhIHRoZSBhY3BpX2VuYWJsZV9ncGUgaW50ZXJmYWNlLgogCSAqLwotCWlmIChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQpIHsKLQkJLyoKLQkJICogRGlmZmVyZW50aWF0ZSBydW50aW1lIHZzIHdha2UgR1BFcywgdmlhIHRoZSBfUFJXIGNvbnRyb2wgbWV0aG9kcy4KLQkJICogRWFjaCBHUEUgdGhhdCBoYXMgb25lIG9yIG1vcmUgX1BSV3MgdGhhdCByZWZlcmVuY2UgaXQgaXMgYnkKLQkJICogZGVmaW5pdGlvbiBhIHdha2UgR1BFIGFuZCB3aWxsIG5vdCBiZSBlbmFibGVkIHdoaWxlIHRoZSBtYWNoaW5lCi0JCSAqIGlzIHJ1bm5pbmcuCi0JCSAqLwotCQl3YWxrX2luZm8uZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrOwotCQl3YWxrX2luZm8uZ3BlX2RldmljZSA9IGdwZV9kZXZpY2U7Ci0JCXdhbGtfaW5mby5leGVjdXRlX2J5X293bmVyX2lkID0gRkFMU0U7Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCQkJICAgQUNQSV9VSU5UMzJfTUFYLCBBQ1BJX05TX1dBTEtfVU5MT0NLLAotCQkJCQkgICBhY3BpX2V2X21hdGNoX3Byd19hbmRfZ3BlLCBOVUxMLAotCQkJCQkgICAmd2Fsa19pbmZvLCBOVUxMKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCQkiV2hpbGUgZXhlY3V0aW5nIF9QUlcgbWV0aG9kcyIpKTsKLQkJfQotCX0KLQotCS8qCi0JICogRW5hYmxlIGFsbCBHUEVzIHRoYXQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGFuZCBhcmUgbm90Ci0JICogY2FwYWJsZSBvZiBnZW5lcmF0aW5nIHdha2V1cHMuIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrCi0JICogbXVzdCBiZSBlbmFibGVkIHZpYSB0aGUgYWNwaV9lbmFibGVfZ3BlIGludGVyZmFjZS4KLQkgKi8KLQl3YWtlX2dwZV9jb3VudCA9IDA7CiAJZ3BlX2VuYWJsZWRfY291bnQgPSAwOwogCiAJaWYgKGdwZV9kZXZpY2UgPT0gYWNwaV9nYmxfZmFkdF9ncGVfZGV2aWNlKSB7CkBAIC01MDIsMzUgKzQ3MiwyMSBAQAogCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvW2dwZV9pbmRleF07CiAJCQlncGVfbnVtYmVyID0gZ3BlX2luZGV4ICsgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcjsKIAotCQkJLyoKLQkJCSAqIElmIHRoZSBHUEUgaGFzIGFscmVhZHkgYmVlbiBlbmFibGVkIGZvciBydW50aW1lCi0JCQkgKiBzaWduYWxpbmcsIG1ha2Ugc3VyZSBpdCByZW1haW5zIGVuYWJsZWQsIGJ1dCBkbyBub3QKLQkJCSAqIGluY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50ZXIuCi0JCQkgKi8KLQkJCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgewotCQkJCWFjcGlfc2V0X2dwZShncGVfZGV2aWNlLCBncGVfbnVtYmVyLAotCQkJCQkJQUNQSV9HUEVfRU5BQkxFKTsKLQkJCQlncGVfZW5hYmxlZF9jb3VudCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpIHsKLQkJCQl3YWtlX2dwZV9jb3VudCsrOwotCQkJCWlmIChhY3BpX2dibF9sZWF2ZV93YWtlX2dwZXNfZGlzYWJsZWQpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCiAJCQkvKiBJZ25vcmUgR1BFcyB0aGF0IGhhdmUgbm8gY29ycmVzcG9uZGluZyBfTHh4L19FeHggbWV0aG9kICovCiAKIAkJCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KIAotCQkJLyogRW5hYmxlIHRoaXMgR1BFICovCisJCQkvKgorCQkJICogSWYgdGhlIEdQRSBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQgZm9yIHJ1bnRpbWUKKwkJCSAqIHNpZ25hbGluZywgbWFrZSBzdXJlIGl0IHJlbWFpbnMgZW5hYmxlZCwgYnV0IGRvIG5vdAorCQkJICogaW5jcmVtZW50IGl0cyByZWZlcmVuY2UgY291bnRlci4KKwkJCSAqLworCQkJc3RhdHVzID0gZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQgPworCQkJCWFjcGlfZXZfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbykgOgorCQkJCWFjcGlfZW5hYmxlX2dwZShncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKIAotCQkJc3RhdHVzID0gYWNwaV9lbmFibGVfZ3BlKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIsCi0JCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKIAkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCiAJCQkJCQkiQ291bGQgbm90IGVuYWJsZSBHUEUgMHglMDJYIiwKQEAgLTU0MiwxMCArNDk4LDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoZ3BlX2VuYWJsZWRfY291bnQgfHwgd2FrZV9ncGVfY291bnQpIHsKKwlpZiAoZ3BlX2VuYWJsZWRfY291bnQpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTklULAotCQkJCSAgIkVuYWJsZWQgJXUgUnVudGltZSBHUEVzLCBhZGRlZCAldSBXYWtlIEdQRXMgaW4gdGhpcyBibG9ja1xuIiwKLQkJCQkgIGdwZV9lbmFibGVkX2NvdW50LCB3YWtlX2dwZV9jb3VudCkpOworCQkJCSAgIkVuYWJsZWQgJXUgR1BFcyBpbiB0aGlzIGJsb2NrXG4iLAorCQkJCSAgZ3BlX2VuYWJsZWRfY291bnQpKTsKIAl9CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWluaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVpbml0LmMKaW5kZXggM2Y2YzJkMi4uMzA4NGM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWluaXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlaW5pdC5jCkBAIC0yMTEsOSArMjExLDcgQEAKICAqIERFU0NSSVBUSU9OOiBDaGVjayBmb3IgbmV3IEdQRSBtZXRob2RzIChfTHh4L19FeHgpIG1hZGUgYXZhaWxhYmxlIGFzIGEKICAqICAgICAgICAgICAgICByZXN1bHQgb2YgYSBMb2FkKCkgb3IgbG9hZF90YWJsZSgpIG9wZXJhdGlvbi4gSWYgbmV3IEdQRQogICogICAgICAgICAgICAgIG1ldGhvZHMgaGF2ZSBiZWVuIGluc3RhbGxlZCwgcmVnaXN0ZXIgdGhlIG5ldyBtZXRob2RzIGFuZAotICogICAgICAgICAgICAgIGVuYWJsZSBhbmQgcnVudGltZSBHUEVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBBbHNvLAotICogICAgICAgICAgICAgIHJ1biBhbnkgbmV3bHkgbG9hZGVkIF9QUlcgbWV0aG9kcyBpbiBvcmRlciB0byBkaXNjb3ZlciBhbnkKLSAqICAgICAgICAgICAgICBuZXcgQ0FOX1dBS0UgR1BFcy4KKyAqICAgICAgICAgICAgICBlbmFibGUgYW5kIHJ1bnRpbWUgR1BFcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlbS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0yMjMsNDkgKzIyMSwxMiBAQAogCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7CiAJc3RydWN0IGFjcGlfZ3BlX3dhbGtfaW5mbyB3YWxrX2luZm87CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7Ci0JdTMyIG5ld193YWtlX2dwZV9jb3VudCA9IDA7Ci0KLQkvKiBXZSB3aWxsIGV4YW1pbmUgb25seSBfUFJXL19MeHgvX0V4eCBtZXRob2RzIG93bmVkIGJ5IHRoaXMgdGFibGUgKi8KLQotCXdhbGtfaW5mby5vd25lcl9pZCA9IHRhYmxlX293bmVyX2lkOwotCXdhbGtfaW5mby5leGVjdXRlX2J5X293bmVyX2lkID0gVFJVRTsKLQl3YWxrX2luZm8uY291bnQgPSAwOwotCi0JaWYgKGFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCkgewotCQkvKgotCQkgKiAxKSBSdW4gYW55IG5ld2x5LWxvYWRlZCBfUFJXIG1ldGhvZHMgdG8gZmluZCBhbnkgR1BFcyB0aGF0Ci0JCSAqIGNhbiBub3cgYmUgbWFya2VkIGFzIENBTl9XQUtFIEdQRXMuIE5vdGU6IFdlIG11c3QgcnVuIHRoZQotCQkgKiBfUFJXIG1ldGhvZHMgYmVmb3JlIHdlIHByb2Nlc3MgdGhlIF9MeHgvX0V4eCBtZXRob2RzIGJlY2F1c2UKLQkJICogd2Ugd2lsbCBlbmFibGUgYWxsIHJ1bnRpbWUgR1BFcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldwotCQkgKiBfTHh4L19FeHggbWV0aG9kcyBhdCB0aGUgdGltZSB3ZSBwcm9jZXNzIHRob3NlIG1ldGhvZHMuCi0JCSAqCi0JCSAqIFVubG9jayBpbnRlcnByZXRlciBzbyB0aGF0IHdlIGNhbiBydW4gdGhlIF9QUlcgbWV0aG9kcy4KLQkJICovCi0JCXdhbGtfaW5mby5ncGVfYmxvY2sgPSBOVUxMOwotCQl3YWxrX2luZm8uZ3BlX2RldmljZSA9IE5VTEw7Ci0KLQkJYWNwaV9leF9leGl0X2ludGVycHJldGVyKCk7Ci0KLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgQUNQSV9ST09UX09CSkVDVCwKLQkJCQkJICAgQUNQSV9VSU5UMzJfTUFYLAotCQkJCQkgICBBQ1BJX05TX1dBTEtfTk9fVU5MT0NLLAotCQkJCQkgICBhY3BpX2V2X21hdGNoX3Byd19hbmRfZ3BlLCBOVUxMLAotCQkJCQkgICAmd2Fsa19pbmZvLCBOVUxMKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCQkiV2hpbGUgZXhlY3V0aW5nIF9QUlcgbWV0aG9kcyIpKTsKLQkJfQotCi0JCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKLQkJbmV3X3dha2VfZ3BlX2NvdW50ID0gd2Fsa19pbmZvLmNvdW50OwotCX0KIAogCS8qCiAJICogMikgRmluZCBhbnkgX0x4eC9fRXh4IEdQRSBtZXRob2RzIHRoYXQgaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLgogCSAqCi0JICogQW55IEdQRXMgdGhhdCBjb3JyZXNwb25kIHRvIG5ldyBfTHh4L19FeHggbWV0aG9kcyBhbmQgYXJlIG5vdAotCSAqIG1hcmtlZCBhcyBDQU5fV0FLRSBhcmUgaW1tZWRpYXRlbHkgZW5hYmxlZC4KKwkgKiBBbnkgR1BFcyB0aGF0IGNvcnJlc3BvbmQgdG8gbmV3IF9MeHgvX0V4eCBtZXRob2RzIGFyZSBpbW1lZGlhdGVseQorCSAqIGVuYWJsZWQuCiAJICoKIAkgKiBFeGFtaW5lIHRoZSBuYW1lc3BhY2UgdW5kZXJuZWF0aCBlYWNoIGdwZV9kZXZpY2Ugd2l0aGluIHRoZQogCSAqIGdwZV9ibG9jayBsaXN0cy4KQEAgLTI3NSw2ICsyMzYsOCBAQAogCQlyZXR1cm47CiAJfQogCisJd2Fsa19pbmZvLm93bmVyX2lkID0gdGFibGVfb3duZXJfaWQ7CisJd2Fsa19pbmZvLmV4ZWN1dGVfYnlfb3duZXJfaWQgPSBUUlVFOwogCXdhbGtfaW5mby5jb3VudCA9IDA7CiAJd2Fsa19pbmZvLmVuYWJsZV90aGlzX2dwZSA9IFRSVUU7CiAKQEAgLTMwNywxMCArMjcwLDggQEAKIAkJZ3BlX3hydXB0X2luZm8gPSBncGVfeHJ1cHRfaW5mby0+bmV4dDsKIAl9CiAKLQlpZiAod2Fsa19pbmZvLmNvdW50IHx8IG5ld193YWtlX2dwZV9jb3VudCkgewotCQlBQ1BJX0lORk8oKEFFX0lORk8sCi0JCQkgICAiRW5hYmxlZCAldSBuZXcgcnVudGltZSBHUEVzLCBhZGRlZCAldSBuZXcgd2FrZXVwIEdQRXMiLAotCQkJICAgd2Fsa19pbmZvLmNvdW50LCBuZXdfd2FrZV9ncGVfY291bnQpKTsKKwlpZiAod2Fsa19pbmZvLmNvdW50KSB7CisJCUFDUElfSU5GTygoQUVfSU5GTywgIkVuYWJsZWQgJXUgbmV3IEdQRXMiLCB3YWxrX2luZm8uY291bnQpKTsKIAl9CiAKIAkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKQEAgLTM4Niw5ICszNDcsNiBAQAogCS8qCiAJICogMykgRWRnZS9MZXZlbCBkZXRlcm1pbmF0aW9uIGlzIGJhc2VkIG9uIHRoZSAybmQgY2hhcmFjdGVyCiAJICogICAgb2YgdGhlIG1ldGhvZCBuYW1lCi0JICoKLQkgKiBOT1RFOiBEZWZhdWx0IEdQRSB0eXBlIGlzIFJVTlRJTUUgb25seS4gTGF0ZXIsIGlmIGEgX1BSVyBvYmplY3QgaXMKLQkgKiBmb3VuZCB0aGF0IHBvaW50cyB0byB0aGlzIEdQRSwgdGhlIEFDUElfR1BFX0NBTl9XQUtFIGZsYWcgaXMgc2V0LgogCSAqLwogCXN3aXRjaCAobmFtZVsxXSkgewogCWNhc2UgJ0wnOgpAQCAtNDcxLDI0ICs0MjksMTggQEAKIAkgKi8KIAlpZiAod2Fsa19pbmZvLT5lbmFibGVfdGhpc19ncGUpIHsKIAotCQkvKiBJZ25vcmUgR1BFcyB0aGF0IGNhbiB3YWtlIHRoZSBzeXN0ZW0gKi8KKwkJd2Fsa19pbmZvLT5jb3VudCsrOworCQlncGVfZGV2aWNlID0gd2Fsa19pbmZvLT5ncGVfZGV2aWNlOwogCi0JCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSB8fAotCQkgICAgIWFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCkgewotCQkJd2Fsa19pbmZvLT5jb3VudCsrOwotCQkJZ3BlX2RldmljZSA9IHdhbGtfaW5mby0+Z3BlX2RldmljZTsKKwkJaWYgKGdwZV9kZXZpY2UgPT0gYWNwaV9nYmxfZmFkdF9ncGVfZGV2aWNlKSB7CisJCQlncGVfZGV2aWNlID0gTlVMTDsKKwkJfQogCi0JCQlpZiAoZ3BlX2RldmljZSA9PSBhY3BpX2dibF9mYWR0X2dwZV9kZXZpY2UpIHsKLQkJCQlncGVfZGV2aWNlID0gTlVMTDsKLQkJCX0KLQotCQkJc3RhdHVzID0gYWNwaV9lbmFibGVfZ3BlKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIsCi0JCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCi0JCQkJCQkiQ291bGQgbm90IGVuYWJsZSBHUEUgMHglMDJYIiwKLQkJCQkJCWdwZV9udW1iZXIpKTsKLQkJCX0KKwkJc3RhdHVzID0gYWNwaV9lbmFibGVfZ3BlKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsCisJCQkJCSJDb3VsZCBub3QgZW5hYmxlIEdQRSAweCUwMlgiLAorCQkJCQlncGVfbnVtYmVyKSk7CiAJCX0KIAl9CiAKQEAgLTQ5NywxNTcgKzQ0OSwzIEBACiAJCQkgIG5hbWUsIGdwZV9udW1iZXIpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X21hdGNoX3Byd19hbmRfZ3BlCi0gKgotICogUEFSQU1FVEVSUzogIENhbGxiYWNrIGZyb20gd2Fsa19uYW1lc3BhY2UKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzLiBOT1RFOiBXZSBpZ25vcmUgZXJyb3JzIHNvIHRoYXQgdGhlIF9QUlcgd2FsayBpcwotICogICAgICAgICAgICAgIG5vdCBhYm9ydGVkIG9uIGEgc2luZ2xlIF9QUlcgZmFpbHVyZS4KLSAqCi0gKiBERVNDUklQVElPTjogQ2FsbGVkIGZyb20gYWNwaV93YWxrX25hbWVzcGFjZS4gRXhwZWN0cyBlYWNoIG9iamVjdCB0byBiZSBhCi0gKiAgICAgICAgICAgICAgRGV2aWNlLiBSdW4gdGhlIF9QUlcgbWV0aG9kLiBJZiBwcmVzZW50LCBleHRyYWN0IHRoZSBHUEUKLSAqICAgICAgICAgICAgICBudW1iZXIgYW5kIG1hcmsgdGhlIEdQRSBhcyBhIENBTl9XQUtFIEdQRS4gQWxsb3dzIGEKLSAqICAgICAgICAgICAgICBwZXItb3duZXJfaWQgZXhlY3V0aW9uIGlmIGV4ZWN1dGVfYnlfb3duZXJfaWQgaXMgVFJVRSBpbiB0aGUKLSAqICAgICAgICAgICAgICB3YWxrX2luZm8gcGFyYW1ldGVyIGJsb2NrLgotICoKLSAqIElmIHdhbGtfaW5mby0+ZXhlY3V0ZV9ieV9vd25lcl9pZCBpcyBUUlVFLCB3ZSBvbmx5IGV4ZWN1dGUgX1BSV3Mgd2l0aCB0aGF0Ci0gKiAgICBvd25lci4KLSAqIElmIHdhbGtfaW5mby0+Z3BlX2RldmljZSBpcyBOVUxMLCB3ZSBleGVjdXRlIGV2ZXJ5IF9QUlcgZm91bmQuIE90aGVyd2lzZSwKLSAqICAgIHdlIG9ubHkgZXhlY3V0ZSBfUFJXcyB0aGF0IHJlZmVyIHRvIHRoZSBpbnB1dCBncGVfZGV2aWNlLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWFjcGlfc3RhdHVzCi1hY3BpX2V2X21hdGNoX3Byd19hbmRfZ3BlKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCi0JCQkgIHUzMiBsZXZlbCwgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKLXsKLQlzdHJ1Y3QgYWNwaV9ncGVfd2Fsa19pbmZvICp3YWxrX2luZm8gPQotCSAgICBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX2dwZV93YWxrX2luZm8sIGNvbnRleHQpOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpncGVfZGV2aWNlOwotCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnRhcmdldF9ncGVfZGV2aWNlOwotCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwcndfbm9kZTsKLQlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqcGtnX2Rlc2M7Ci0JdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqb2JqX2Rlc2M7Ci0JdTMyIGdwZV9udW1iZXI7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRShldl9tYXRjaF9wcndfYW5kX2dwZSk7Ci0KLQkvKiBDaGVjayBmb3IgYSBfUFJXIG1ldGhvZCB1bmRlciB0aGlzIGRldmljZSAqLwotCi0Jc3RhdHVzID0gYWNwaV9uc19nZXRfbm9kZShvYmpfaGFuZGxlLCBNRVRIT0RfTkFNRV9fUFJXLAotCQkJCSAgQUNQSV9OU19OT19VUFNFQVJDSCwgJnByd19ub2RlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKLQl9Ci0KLQkvKiBDaGVjayBpZiByZXF1ZXN0ZWQgb3duZXJfaWQgbWF0Y2hlcyB0aGlzIG93bmVyX2lkICovCi0KLQlpZiAoKHdhbGtfaW5mby0+ZXhlY3V0ZV9ieV9vd25lcl9pZCkgJiYKLQkgICAgKHByd19ub2RlLT5vd25lcl9pZCAhPSB3YWxrX2luZm8tPm93bmVyX2lkKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCS8qIEV4ZWN1dGUgdGhlIF9QUlcgKi8KLQotCXN0YXR1cyA9IGFjcGlfdXRfZXZhbHVhdGVfb2JqZWN0KHByd19ub2RlLCBOVUxMLAotCQkJCQkgQUNQSV9CVFlQRV9QQUNLQUdFLCAmcGtnX2Rlc2MpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwotCX0KLQotCS8qIFRoZSByZXR1cm5lZCBfUFJXIHBhY2thZ2UgbXVzdCBoYXZlIGF0IGxlYXN0IHR3byBlbGVtZW50cyAqLwotCi0JaWYgKHBrZ19kZXNjLT5wYWNrYWdlLmNvdW50IDwgMikgewotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JLyogRXh0cmFjdCBwb2ludGVycyBmcm9tIHRoZSBpbnB1dCBjb250ZXh0ICovCi0KLQlncGVfZGV2aWNlID0gd2Fsa19pbmZvLT5ncGVfZGV2aWNlOwotCWdwZV9ibG9jayA9IHdhbGtfaW5mby0+Z3BlX2Jsb2NrOwotCi0JLyoKLQkgKiBUaGUgX1BSVyBvYmplY3QgbXVzdCByZXR1cm4gYSBwYWNrYWdlLCB3ZSBhcmUgb25seSBpbnRlcmVzdGVkCi0JICogaW4gdGhlIGZpcnN0IGVsZW1lbnQKLQkgKi8KLQlvYmpfZGVzYyA9IHBrZ19kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdOwotCi0JaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCS8qIFVzZSBGQURULWRlZmluZWQgR1BFIGRldmljZSAoZnJvbSBkZWZpbml0aW9uIG9mIF9QUlcpICovCi0KLQkJdGFyZ2V0X2dwZV9kZXZpY2UgPSBOVUxMOwotCQlpZiAoZ3BlX2RldmljZSkgewotCQkJdGFyZ2V0X2dwZV9kZXZpY2UgPSBhY3BpX2dibF9mYWR0X2dwZV9kZXZpY2U7Ci0JCX0KLQotCQkvKiBJbnRlZ2VyIGlzIHRoZSBHUEUgbnVtYmVyIGluIHRoZSBGQURUIGRlc2NyaWJlZCBHUEUgYmxvY2tzICovCi0KLQkJZ3BlX251bWJlciA9ICh1MzIpb2JqX2Rlc2MtPmludGVnZXIudmFsdWU7Ci0JfSBlbHNlIGlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQotCQkvKiBQYWNrYWdlIGNvbnRhaW5zIGEgR1BFIHJlZmVyZW5jZSBhbmQgR1BFIG51bWJlciB3aXRoaW4gYSBHUEUgYmxvY2sgKi8KLQotCQlpZiAoKG9ial9kZXNjLT5wYWNrYWdlLmNvdW50IDwgMikgfHwKLQkJICAgICgob2JqX2Rlc2MtPnBhY2thZ2UuZWxlbWVudHNbMF0pLT5jb21tb24udHlwZSAhPQotCQkgICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHx8Ci0JCSAgICAoKG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzFdKS0+Y29tbW9uLnR5cGUgIT0KLQkJICAgICBBQ1BJX1RZUEVfSU5URUdFUikpIHsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCi0JCS8qIEdldCBHUEUgYmxvY2sgcmVmZXJlbmNlIGFuZCBkZWNvZGUgKi8KLQotCQl0YXJnZXRfZ3BlX2RldmljZSA9Ci0JCSAgICBvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1swXS0+cmVmZXJlbmNlLm5vZGU7Ci0JCWdwZV9udW1iZXIgPSAodTMyKW9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzFdLT5pbnRlZ2VyLnZhbHVlOwotCX0gZWxzZSB7Ci0JCS8qIFVua25vd24gdHlwZSwganVzdCBpZ25vcmUgaXQgKi8KLQotCQlnb3RvIGNsZWFudXA7Ci0JfQotCi0JLyogR2V0IHRoZSBncGVfZXZlbnRfaW5mbyBmb3IgdGhpcyBHUEUgKi8KLQotCWlmIChncGVfZGV2aWNlKSB7Ci0JCS8qCi0JCSAqIElzIHRoaXMgR1BFIHdpdGhpbiB0aGlzIGJsb2NrPwotCQkgKgotCQkgKiBUUlVFIGlmIGFuZCBvbmx5IGlmIHRoZXNlIGNvbmRpdGlvbnMgYXJlIHRydWU6Ci0JCSAqICAgICAxKSBUaGUgR1BFIGRldmljZXMgbWF0Y2guCi0JCSAqICAgICAyKSBUaGUgR1BFIGluZGV4KG51bWJlcikgaXMgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgR3BlIEJsb2NrCi0JCSAqICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgR1BFIGRldmljZS4KLQkJICovCi0JCWlmIChncGVfZGV2aWNlICE9IHRhcmdldF9ncGVfZGV2aWNlKSB7Ci0JCQlnb3RvIGNsZWFudXA7Ci0JCX0KLQotCQlncGVfZXZlbnRfaW5mbyA9Ci0JCSAgICBhY3BpX2V2X2xvd19nZXRfZ3BlX2luZm8oZ3BlX251bWJlciwgZ3BlX2Jsb2NrKTsKLQl9IGVsc2UgewotCQkvKiBncGVfZGV2aWNlIGlzIE5VTEwsIGp1c3QgbWF0Y2ggdGhlIHRhcmdldF9kZXZpY2UgYW5kIGdwZV9udW1iZXIgKi8KLQotCQlncGVfZXZlbnRfaW5mbyA9Ci0JCSAgICBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyh0YXJnZXRfZ3BlX2RldmljZSwgZ3BlX251bWJlcik7Ci0JfQotCi0JaWYgKGdwZV9ldmVudF9pbmZvKSB7Ci0JCWlmICghKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0NBTl9XQUtFKSkgewotCi0JCQkvKiBUaGlzIEdQRSBjYW4gd2FrZSB0aGUgc3lzdGVtICovCi0KLQkJCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSBBQ1BJX0dQRV9DQU5fV0FLRTsKLQkJCXdhbGtfaW5mby0+Y291bnQrKzsKLQkJfQotCX0KLQotICAgICAgY2xlYW51cDoKLQlhY3BpX3V0X3JlbW92ZV9yZWZlcmVuY2UocGtnX2Rlc2MpOwotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKaW5kZXggMmUzYjAzMy4uZjQwZDI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUocmVnaW9uX29iai0+cmVnaW9uLm5vZGUpOworCXBhcmVudF9ub2RlID0gcmVnaW9uX29iai0+cmVnaW9uLm5vZGUtPnBhcmVudDsKIAogCS8qCiAJICogR2V0IHRoZSBfU0VHIGFuZCBfQkJOIHZhbHVlcyBmcm9tIHRoZSBkZXZpY2UgdXBvbiB3aGljaCB0aGUgaGFuZGxlcgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXBjaV9yb290X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwY2lfcm9vdF9ub2RlKTsKKwkJCXBjaV9yb290X25vZGUgPSBwY2lfcm9vdF9ub2RlLT5wYXJlbnQ7CiAJCX0KIAogCQkvKiBQQ0kgcm9vdCBicmlkZ2Ugbm90IGZvdW5kLCB1c2UgbmFtZXNwYWNlIHJvb3Qgbm9kZSAqLwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJICovCiAJcGNpX2RldmljZV9ub2RlID0gcmVnaW9uX29iai0+cmVnaW9uLm5vZGU7CiAJd2hpbGUgKHBjaV9kZXZpY2Vfbm9kZSAmJiAocGNpX2RldmljZV9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9ERVZJQ0UpKSB7Ci0JCXBjaV9kZXZpY2Vfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHBjaV9kZXZpY2Vfbm9kZSk7CisJCXBjaV9kZXZpY2Vfbm9kZSA9IHBjaV9kZXZpY2Vfbm9kZS0+cGFyZW50OwogCX0KIAogCWlmICghcGNpX2RldmljZV9ub2RlKSB7CkBAIC01MjEsNyArNTIxLDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PVF9FWElTVCk7CiAJfQogCi0Jbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHJlZ2lvbl9vYmotPnJlZ2lvbi5ub2RlKTsKKwlub2RlID0gcmVnaW9uX29iai0+cmVnaW9uLm5vZGUtPnBhcmVudDsKIAlzcGFjZV9pZCA9IHJlZ2lvbl9vYmotPnJlZ2lvbi5zcGFjZV9pZDsKIAogCS8qIFNldHVwIGRlZmF1bHRzICovCkBAIC02NTQsNyArNjU0LDcgQEAKIAogCQkvKiBUaGlzIG5vZGUgZG9lcyBub3QgaGF2ZSB0aGUgaGFuZGxlciB3ZSBuZWVkOyBQb3AgdXAgb25lIGxldmVsICovCiAKLQkJbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpOworCQlub2RlID0gbm9kZS0+cGFyZW50OwogCX0KIAogCS8qIElmIHdlIGdldCBoZXJlLCB0aGVyZSBpcyBubyBoYW5kbGVyIGZvciB0aGlzIHJlZ2lvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCmluZGV4IDE4YjNmMTQuLjBlYzkwMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKQEAgLTIxMywxMDEgKzIxMyw3MSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2NsZWFyX2FuZF9lbmFibGVfZ3BlCi0gKgotICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAtIEdQRSB0byBlbmFibGUKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzCi0gKgotICogREVTQ1JJUFRJT046IENsZWFyIHRoZSBnaXZlbiBHUEUgZnJvbSBzdGFsZSBldmVudHMgYW5kIGVuYWJsZSBpdC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX2NsZWFyX2FuZF9lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0KLQkvKgotCSAqIFdlIHdpbGwgb25seSBhbGxvdyBhIEdQRSB0byBiZSBlbmFibGVkIGlmIGl0IGhhcyBlaXRoZXIgYW4KLQkgKiBhc3NvY2lhdGVkIG1ldGhvZCAoX0x4eC9fRXh4KSBvciBhIGhhbmRsZXIuIE90aGVyd2lzZSwgdGhlCi0JICogR1BFIHdpbGwgYmUgaW1tZWRpYXRlbHkgZGlzYWJsZWQgYnkgYWNwaV9ldl9ncGVfZGlzcGF0Y2ggdGhlCi0JICogZmlyc3QgdGltZSBpdCBmaXJlcy4KLQkgKi8KLQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fSEFORExFUik7Ci0JfQotCi0JLyogQ2xlYXIgdGhlIEdQRSAob2Ygc3RhbGUgZXZlbnRzKSAqLwotCXN0YXR1cyA9IGFjcGlfaHdfY2xlYXJfZ3BlKGdwZV9ldmVudF9pbmZvKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQotCi0JLyogRW5hYmxlIHRoZSByZXF1ZXN0ZWQgR1BFICovCi0Jc3RhdHVzID0gYWNwaV9od19sb3dfc2V0X2dwZShncGVfZXZlbnRfaW5mbywgQUNQSV9HUEVfRU5BQkxFKTsKLQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3NldF9ncGUKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2dwZV93YWtldXAKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UuIE5VTEwgZm9yIEdQRTAvR1BFMQogICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jawotICogICAgICAgICAgICAgIGFjdGlvbiAgICAgICAgICAtIEFDUElfR1BFX0VOQUJMRSBvciBBQ1BJX0dQRV9ESVNBQkxFCisgKiAgICAgICAgICAgICAgQWN0aW9uICAgICAgICAgIC0gRW5hYmxlIG9yIERpc2FibGUKICAqCiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgotICogREVTQ1JJUFRJT046IEVuYWJsZSBvciBkaXNhYmxlIGFuIGluZGl2aWR1YWwgR1BFLiBUaGlzIGZ1bmN0aW9uIGJ5cGFzc2VzCi0gKiAgICAgICAgICAgICAgdGhlIHJlZmVyZW5jZSBjb3VudCBtZWNoYW5pc20gdXNlZCBpbiB0aGUgYWNwaV9lbmFibGVfZ3BlIGFuZAotICogICAgICAgICAgICAgIGFjcGlfZGlzYWJsZV9ncGUgaW50ZXJmYWNlcyAtLSBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlLgotICoKLSAqIE5vdGU6IFR5cGljYWxseSB1c2VkIHRvIGRpc2FibGUgYSBydW50aW1lIEdQRSBmb3Igc2hvcnQgcGVyaW9kIG9mIHRpbWUsCi0gKiB0aGVuIHJlLWVuYWJsZSBpdCwgd2l0aG91dCBkaXN0dXJiaW5nIHRoZSBleGlzdGluZyByZWZlcmVuY2UgY291bnRzLiBUaGlzCi0gKiBpcyB1c2VmdWwsIGZvciBleGFtcGxlLCBpbiB0aGUgRW1iZWRkZWQgQ29udHJvbGxlciAoRUMpIGRyaXZlci4KKyAqIERFU0NSSVBUSU9OOiBTZXQgb3IgY2xlYXIgdGhlIEdQRSdzIHdha2V1cCBlbmFibGUgbWFzayBiaXQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfc2V0X2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlciwgdTggYWN0aW9uKQorYWNwaV9zdGF0dXMgYWNwaV9ncGVfd2FrZXVwKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBhY3Rpb24pCiB7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqZ3BlX3JlZ2lzdGVyX2luZm87CiAJYWNwaV9jcHVfZmxhZ3MgZmxhZ3M7CisJdTMyIHJlZ2lzdGVyX2JpdDsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9zZXRfZ3BlKTsKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZ3BlX3dha2V1cCk7CiAKIAlmbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrKTsKIAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyICovCiAKIAlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwotCWlmICghZ3BlX2V2ZW50X2luZm8pIHsKKwlpZiAoIWdwZV9ldmVudF9pbmZvIHx8ICEoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfQ0FOX1dBS0UpKSB7CiAJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAorCWdwZV9yZWdpc3Rlcl9pbmZvID0gZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm87CisJaWYgKCFncGVfcmVnaXN0ZXJfaW5mbykgeworCQlzdGF0dXMgPSBBRV9OT1RfRVhJU1Q7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCXJlZ2lzdGVyX2JpdCA9CisJICAgIGFjcGlfaHdfZ2V0X2dwZV9yZWdpc3Rlcl9iaXQoZ3BlX2V2ZW50X2luZm8sIGdwZV9yZWdpc3Rlcl9pbmZvKTsKKwogCS8qIFBlcmZvcm0gdGhlIGFjdGlvbiAqLwogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFDUElfR1BFX0VOQUJMRToKLQkJc3RhdHVzID0gYWNwaV9jbGVhcl9hbmRfZW5hYmxlX2dwZShncGVfZXZlbnRfaW5mbyk7CisJCUFDUElfU0VUX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLAorCQkJICAgICAodTgpcmVnaXN0ZXJfYml0KTsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfR1BFX0RJU0FCTEU6Ci0JCXN0YXR1cyA9IGFjcGlfaHdfbG93X3NldF9ncGUoZ3BlX2V2ZW50X2luZm8sIEFDUElfR1BFX0RJU0FCTEUpOworCQlBQ1BJX0NMRUFSX0JJVChncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX2Zvcl93YWtlLAorCQkJICAgICAgICh1OClyZWdpc3Rlcl9iaXQpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CisJCUFDUElfRVJST1IoKEFFX0lORk8sICIldSwgSW52YWxpZCBhY3Rpb24iLCBhY3Rpb24pKTsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJYnJlYWs7CiAJfQogCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Cit1bmxvY2tfYW5kX2V4aXQ6CiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2dwZSkKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dwZV93YWtldXApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzE1LDE3ICsyODUsMTQgQEAKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gUGFyZW50IEdQRSBEZXZpY2UuIE5VTEwgZm9yIEdQRTAvR1BFMQogICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jawotICogICAgICAgICAgICAgIGdwZV90eXBlICAgICAgICAtIEFDUElfR1BFX1RZUEVfUlVOVElNRSBvciBBQ1BJX0dQRV9UWVBFX1dBS0UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBib3RoCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBBZGQgYSByZWZlcmVuY2UgdG8gYSBHUEUuIE9uIHRoZSBmaXJzdCByZWZlcmVuY2UsIHRoZSBHUEUgaXMKLSAqICAgICAgICAgICAgICBoYXJkd2FyZS1lbmFibGVkIChmb3IgcnVudGltZSBHUEVzKSwgb3IgdGhlIEdQRSByZWdpc3RlciBtYXNrCi0gKiAgICAgICAgICAgICAgaXMgdXBkYXRlZCAoZm9yIHdha2UgR1BFcykuCisgKiAgICAgICAgICAgICAgaGFyZHdhcmUtZW5hYmxlZC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYWNwaV9zdGF0dXMgYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBncGVfdHlwZSkKK2FjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2dwZShhY3BpX2hhbmRsZSBncGVfZGV2aWNlLCB1MzIgZ3BlX251bWJlcikKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CkBAIC0zMzMsMTIgKzMwMCw2IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW5hYmxlX2dwZSk7CiAKLQkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwotCi0JaWYgKCFncGVfdHlwZSB8fCAoZ3BlX3R5cGUgJiB+QUNQSV9HUEVfVFlQRV9XQUtFX1JVTikpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KQEAgLTM0OSw0NiArMzEwLDE5IEBACiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAotCWlmIChncGVfdHlwZSAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkgewotCQlpZiAoZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQgPT0gQUNQSV9VSU5UOF9NQVgpIHsKLQkJCXN0YXR1cyA9IEFFX0xJTUlUOwkvKiBUb28gbWFueSByZWZlcmVuY2VzICovCi0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKLQkJfQotCi0JCWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50Kys7Ci0JCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAxKSB7Ci0JCQlzdGF0dXMgPSBhY3BpX2V2X3VwZGF0ZV9ncGVfZW5hYmxlX21hc2tzKGdwZV9ldmVudF9pbmZvKTsKLQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJCXN0YXR1cyA9IGFjcGlfY2xlYXJfYW5kX2VuYWJsZV9ncGUoZ3BlX2V2ZW50X2luZm8pOwotCQkJfQotCi0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCQlncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudC0tOwotCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCQkJfQotCQl9CisJaWYgKGdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50ID09IEFDUElfVUlOVDhfTUFYKSB7CisJCXN0YXR1cyA9IEFFX0xJTUlUOwkvKiBUb28gbWFueSByZWZlcmVuY2VzICovCisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAotCWlmIChncGVfdHlwZSAmIEFDUElfR1BFX1RZUEVfV0FLRSkgewotCQkvKiBUaGUgR1BFIG11c3QgaGF2ZSB0aGUgYWJpbGl0eSB0byB3YWtlIHRoZSBzeXN0ZW0gKi8KLQotCQlpZiAoIShncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9DQU5fV0FLRSkpIHsKLQkJCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwlncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCsrOworCWlmIChncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCA9PSAxKSB7CisJCXN0YXR1cyA9IGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFzayhncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJc3RhdHVzID0gYWNwaV9ldl9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKIAkJfQotCi0JCWlmIChncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50ID09IEFDUElfVUlOVDhfTUFYKSB7Ci0JCQlzdGF0dXMgPSBBRV9MSU1JVDsJLyogVG9vIG1hbnkgcmVmZXJlbmNlcyAqLwotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBVcGRhdGUgdGhlIGVuYWJsZSBtYXNrIG9uIHRoZSBmaXJzdCB3YWtldXAgcmVmZXJlbmNlLiBXYWtlIEdQRXMKLQkJICogYXJlIG9ubHkgaGFyZHdhcmUtZW5hYmxlZCBqdXN0IGJlZm9yZSBzbGVlcGluZy4KLQkJICovCi0JCWdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQrKzsKLQkJaWYgKGdwZV9ldmVudF9pbmZvLT53YWtldXBfY291bnQgPT0gMSkgewotCQkJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKIAkJfQogCX0KIApAQCAtNDA0LDggKzMzOCw2IEBACiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIFBhcmVudCBHUEUgRGV2aWNlLiBOVUxMIGZvciBHUEUwL0dQRTEKICAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBHUEUgbGV2ZWwgd2l0aGluIHRoZSBHUEUgYmxvY2sKLSAqICAgICAgICAgICAgICBncGVfdHlwZSAgICAgICAgLSBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUgb3IgQUNQSV9HUEVfVFlQRV9XQUtFCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYm90aAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC00MTQsNyArMzQ2LDcgQEAKICAqICAgICAgICAgICAgICB0aGUgR1BFIG1hc2sgYml0IGRpc2FibGVkIChmb3Igd2FrZSBHUEVzKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBncGVfdHlwZSkKK2FjcGlfc3RhdHVzIGFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwpAQCAtNDIyLDEyICszNTQsNiBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2Rpc2FibGVfZ3BlKTsKIAotCS8qIFBhcmFtZXRlciB2YWxpZGF0aW9uICovCi0KLQlpZiAoIWdwZV90eXBlIHx8IChncGVfdHlwZSAmIH5BQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCiAJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CiAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLwpAQCAtNDQwLDQxICszNjYsMjEgQEAKIAogCS8qIEhhcmR3YXJlLWRpc2FibGUgYSBydW50aW1lIEdQRSBvbiByZW1vdmFsIG9mIHRoZSBsYXN0IHJlZmVyZW5jZSAqLwogCi0JaWYgKGdwZV90eXBlICYgQUNQSV9HUEVfVFlQRV9SVU5USU1FKSB7Ci0JCWlmICghZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKLQkJCXN0YXR1cyA9IEFFX0xJTUlUOwkvKiBUaGVyZSBhcmUgbm8gcmVmZXJlbmNlcyB0byByZW1vdmUgKi8KLQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwotCQl9Ci0KLQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKLQkJaWYgKCFncGVfZXZlbnRfaW5mby0+cnVudGltZV9jb3VudCkgewotCQkJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7Ci0JCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLAotCQkJCQkJCSAgICAgQUNQSV9HUEVfRElTQUJMRSk7Ci0JCQl9Ci0KLQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJCWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50Kys7Ci0JCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JCQl9Ci0JCX0KKwlpZiAoIWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50KSB7CisJCXN0YXR1cyA9IEFFX0xJTUlUOwkvKiBUaGVyZSBhcmUgbm8gcmVmZXJlbmNlcyB0byByZW1vdmUgKi8KKwkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyoKLQkgKiBVcGRhdGUgbWFza3MgZm9yIHdha2UgR1BFIG9uIHJlbW92YWwgb2YgdGhlIGxhc3QgcmVmZXJlbmNlLgotCSAqIE5vIG5lZWQgdG8gaGFyZHdhcmUtZGlzYWJsZSB3YWtlIEdQRXMgaGVyZSwgdGhleSBhcmUgbm90IGN1cnJlbnRseQotCSAqIGVuYWJsZWQuCi0JICovCi0JaWYgKGdwZV90eXBlICYgQUNQSV9HUEVfVFlQRV9XQUtFKSB7Ci0JCWlmICghZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCkgewotCQkJc3RhdHVzID0gQUVfTElNSVQ7CS8qIFRoZXJlIGFyZSBubyByZWZlcmVuY2VzIHRvIHJlbW92ZSAqLwotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQtLTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50KSB7CisJCXN0YXR1cyA9IGFjcGlfZXZfdXBkYXRlX2dwZV9lbmFibGVfbWFzayhncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJc3RhdHVzID0KKwkJCSAgICBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLAorCQkJCQkJQUNQSV9HUEVfRElTQUJMRSk7CiAJCX0KLQotCQlncGVfZXZlbnRfaW5mby0+d2FrZXVwX2NvdW50LS07Ci0JCWlmICghZ3BlX2V2ZW50X2luZm8tPndha2V1cF9jb3VudCkgewotCQkJc3RhdHVzID0gYWNwaV9ldl91cGRhdGVfZ3BlX2VuYWJsZV9tYXNrcyhncGVfZXZlbnRfaW5mbyk7CisJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQkJZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQrKzsKIAkJfQogCX0KIApAQCAtNDg2LDYgKzM5Miw1OSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2dwZV9jYW5fd2FrZQorICoKKyAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBQYXJlbnQgR1BFIERldmljZS4gTlVMTCBmb3IgR1BFMC9HUEUxCisgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBTZXQgdGhlIEFDUElfR1BFX0NBTl9XQUtFIGZsYWcgZm9yIHRoZSBnaXZlbiBHUEUuICBJZiB0aGUgR1BFCisgKiAgICAgICAgICAgICAgaGFzIGEgY29ycmVzcG9uZGluZyBtZXRob2QgYW5kIGlzIGN1cnJlbnRseSBlbmFibGVkLCBkaXNhYmxlIGl0CisgKiAgICAgICAgICAgICAgKEdQRXMgd2l0aCBjb3JyZXNwb25kaW5nIG1ldGhvZHMgYXJlIGVuYWJsZWQgdW5jb25kaXRpb25hbGx5CisgKiAgICAgICAgICAgICAgZHVyaW5nIGluaXRpYWxpemF0aW9uLCBidXQgR1BFcyB0aGF0IGNhbiB3YWtlIHVwIGFyZSBleHBlY3RlZAorICogICAgICAgICAgICAgIHRvIGJlIGluaXRpYWxseSBkaXNhYmxlZCkuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2FjcGlfc3RhdHVzIGFjcGlfZ3BlX2Nhbl93YWtlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKKwlhY3BpX2NwdV9mbGFncyBmbGFnczsKKwl1OCBkaXNhYmxlID0gMDsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9ncGVfY2FuX3dha2UpOworCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLworCisJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCWlmIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9DQU5fV0FLRSkgeworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwl9CisKKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gQUNQSV9HUEVfQ0FOX1dBS0U7CisJZGlzYWJsZSA9IChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpCisJCSYmIGdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50OworCit1bmxvY2tfYW5kX2V4aXQ6CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKKworCWlmIChkaXNhYmxlKQorCQlzdGF0dXMgPSBhY3BpX2Rpc2FibGVfZ3BlKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CitBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9ncGVfY2FuX3dha2UpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfZGlzYWJsZV9ldmVudAogICoKICAqIFBBUkFNRVRFUlM6ICBFdmVudCAgICAgICAgICAgLSBUaGUgZml4ZWQgZXZlbnR0byBiZSBlbmFibGVkCkBAIC04MDAsNyArNzU5LDcgQEAKIAogCW9ial9kZXNjLT5kZXZpY2UuZ3BlX2Jsb2NrID0gZ3BlX2Jsb2NrOwogCi0JLyogUnVuIHRoZSBfUFJXIG1ldGhvZHMgYW5kIGVuYWJsZSB0aGUgcnVudGltZSBHUEVzIGluIHRoZSBuZXcgYmxvY2sgKi8KKwkvKiBFbmFibGUgdGhlIHJ1bnRpbWUgR1BFcyBpbiB0aGUgbmV3IGJsb2NrICovCiAKIAlzdGF0dXMgPSBhY3BpX2V2X2luaXRpYWxpemVfZ3BlX2Jsb2NrKG5vZGUsIGdwZV9ibG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwppbmRleCAwMDg2MjFjLi4xODgzMjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAlhY3BpX25zX2V4ZWNfbW9kdWxlX2NvZGVfbGlzdCgpOwogCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAotCS8qIFVwZGF0ZSBHUEVzIGZvciBhbnkgbmV3IF9QUlcgb3IgX0x4eC9fRXh4IG1ldGhvZHMuIElnbm9yZSBlcnJvcnMgKi8KKwkvKiBVcGRhdGUgR1BFcyBmb3IgYW55IG5ldyBfTHh4L19FeHggbWV0aG9kcy4gSWdub3JlIGVycm9ycyAqLwogCiAJc3RhdHVzID0gYWNwaV90Yl9nZXRfb3duZXJfaWQodGFibGVfaW5kZXgsICZvd25lcl9pZCk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwppbmRleCBkMzlkNDM4Li5mMDY3YmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKQEAgLTc0Miw3ICs3NDIsNyBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCSAgIioqKiogU3RhcnQgb3BlcmFuZCBkdW1wIGZvciBvcGNvZGUgWyVzXSwgJWQgb3BlcmFuZHNcbiIsCisJCQkgICIqKioqIFN0YXJ0IG9wZXJhbmQgZHVtcCBmb3Igb3Bjb2RlIFslc10sICV1IG9wZXJhbmRzXG4iLAogCQkJICBvcGNvZGVfbmFtZSwgbnVtX29wZXJhbmRzKSk7CiAKIAlpZiAobnVtX29wZXJhbmRzID09IDApIHsKQEAgLTgxMiw3ICs4MTIsNyBAQAogCWFjcGlfZXhfb3V0X3N0cmluZygiVHlwZSIsIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShub2RlLT50eXBlKSk7CiAJYWNwaV9leF9vdXRfcG9pbnRlcigiQXR0YWNoZWQgT2JqZWN0IiwKIAkJCSAgICBhY3BpX25zX2dldF9hdHRhY2hlZF9vYmplY3Qobm9kZSkpOwotCWFjcGlfZXhfb3V0X3BvaW50ZXIoIlBhcmVudCIsIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpKTsKKwlhY3BpX2V4X291dF9wb2ludGVyKCJQYXJlbnQiLCBub2RlLT5wYXJlbnQpOwogCiAJYWNwaV9leF9kdW1wX29iamVjdChBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QsIG5vZGUpLAogCQkJICAgIGFjcGlfZXhfZHVtcF9ub2RlKTsKQEAgLTk0NSw3ICs5NDUsNyBAQAogCiAJY2FzZSBBQ1BJX1RZUEVfUEFDS0FHRToKIAotCQlhY3BpX29zX3ByaW50ZigiW1BhY2thZ2VdIENvbnRhaW5zICVkIEVsZW1lbnRzOlxuIiwKKwkJYWNwaV9vc19wcmludGYoIltQYWNrYWdlXSBDb250YWlucyAldSBFbGVtZW50czpcbiIsCiAJCQkgICAgICAgb2JqX2Rlc2MtPnBhY2thZ2UuY291bnQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBvYmpfZGVzYy0+cGFja2FnZS5jb3VudDsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IGE2ZGMyNmYuLjA0NzIxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC01MzQsMTMgKzUzNCwxMyBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1JFQUQpIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCQkgICJWYWx1ZSBSZWFkICU4LjhYJTguOFgsIFdpZHRoICVkXG4iLAorCQkJCQkgICJWYWx1ZSBSZWFkICU4LjhYJTguOFgsIFdpZHRoICV1XG4iLAogCQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NCgqdmFsdWUpLAogCQkJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCiAJCQkJCSAgYWNjZXNzX2J5dGVfd2lkdGgpKTsKIAkJfSBlbHNlIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCQkgICJWYWx1ZSBXcml0dGVuICU4LjhYJTguOFgsIFdpZHRoICVkXG4iLAorCQkJCQkgICJWYWx1ZSBXcml0dGVuICU4LjhYJTguOFgsIFdpZHRoICV1XG4iLAogCQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NCgqdmFsdWUpLAogCQkJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuCiAJCQkJCSAgYWNjZXNzX2J5dGVfd2lkdGgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCmluZGV4IDI1MDU5ZGEuLjk4YTMzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYwpAQCAtMTA4LDExICsxMDgsMTEgQEAKIAlmaWVsZF9ieXRlX2xlbmd0aCA9IGZpZWxkX2J5dGVfZW5kX29mZnNldCAtIGZpZWxkX2J5dGVfb2Zmc2V0OwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkgICJCaXQgbGVuZ3RoICVkLCBCaXQgb2Zmc2V0ICVkXG4iLAorCQkJICAiQml0IGxlbmd0aCAldSwgQml0IG9mZnNldCAldVxuIiwKIAkJCSAgZmllbGRfYml0X2xlbmd0aCwgZmllbGRfYml0X29mZnNldCkpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkgICJCeXRlIExlbmd0aCAlZCwgQnl0ZSBPZmZzZXQgJWQsIEVuZCBPZmZzZXQgJWRcbiIsCisJCQkgICJCeXRlIExlbmd0aCAldSwgQnl0ZSBPZmZzZXQgJXUsIEVuZCBPZmZzZXQgJXVcbiIsCiAJCQkgIGZpZWxkX2J5dGVfbGVuZ3RoLCBmaWVsZF9ieXRlX29mZnNldCwKIAkJCSAgZmllbGRfYnl0ZV9lbmRfb2Zmc2V0KSk7CiAKQEAgLTE0NywxMSArMTQ3LDExIEBACiAJCQlhY2Nlc3NlcyA9IGZpZWxkX2VuZF9vZmZzZXQgLSBmaWVsZF9zdGFydF9vZmZzZXQ7CiAKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCQkgICJBY2Nlc3NXaWR0aCAlZCBlbmQgaXMgd2l0aGluIHJlZ2lvblxuIiwKKwkJCQkJICAiQWNjZXNzV2lkdGggJXUgZW5kIGlzIHdpdGhpbiByZWdpb25cbiIsCiAJCQkJCSAgYWNjZXNzX2J5dGVfd2lkdGgpKTsKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkJCSAgIkZpZWxkIFN0YXJ0ICVkLCBGaWVsZCBFbmQgJWQgLS0gcmVxdWlyZXMgJWQgYWNjZXNzZXNcbiIsCisJCQkJCSAgIkZpZWxkIFN0YXJ0ICV1LCBGaWVsZCBFbmQgJXUgLS0gcmVxdWlyZXMgJXUgYWNjZXNzZXNcbiIsCiAJCQkJCSAgZmllbGRfc3RhcnRfb2Zmc2V0LCBmaWVsZF9lbmRfb2Zmc2V0LAogCQkJCQkgIGFjY2Vzc2VzKSk7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogCiAJCQlpZiAoYWNjZXNzZXMgPD0gMSkgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAotCQkJCQkJICAiRW50aXJlIGZpZWxkIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIG9uZSBvcGVyYXRpb24gb2Ygc2l6ZSAlZFxuIiwKKwkJCQkJCSAgIkVudGlyZSBmaWVsZCBjYW4gYmUgYWNjZXNzZWQgd2l0aCBvbmUgb3BlcmF0aW9uIG9mIHNpemUgJXVcbiIsCiAJCQkJCQkgIGFjY2Vzc19ieXRlX3dpZHRoKSk7CiAJCQkJcmV0dXJuX1ZBTFVFKGFjY2Vzc19ieXRlX3dpZHRoKTsKIAkJCX0KQEAgLTE3NCw3ICsxNzQsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkJCSAgIkFjY2Vzc1dpZHRoICVkIGVuZCBpcyBOT1Qgd2l0aGluIHJlZ2lvblxuIiwKKwkJCQkJICAiQWNjZXNzV2lkdGggJXUgZW5kIGlzIE5PVCB3aXRoaW4gcmVnaW9uXG4iLAogCQkJCQkgIGFjY2Vzc19ieXRlX3dpZHRoKSk7CiAJCQlpZiAoYWNjZXNzX2J5dGVfd2lkdGggPT0gMSkgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELApAQCAtMTkwLDcgKzE5MCw3IEBACiAJCQkgKiBwcmV2aW91cyBhY2Nlc3MKIAkJCSAqLwogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCi0JCQkJCSAgIkJhY2tpbmcgb2ZmIHRvIHByZXZpb3VzIG9wdGltYWwgYWNjZXNzIHdpZHRoIG9mICVkXG4iLAorCQkJCQkgICJCYWNraW5nIG9mZiB0byBwcmV2aW91cyBvcHRpbWFsIGFjY2VzcyB3aWR0aCBvZiAldVxuIiwKIAkJCQkJICBtaW5pbXVtX2FjY2Vzc193aWR0aCkpOwogCQkJcmV0dXJuX1ZBTFVFKG1pbmltdW1fYWNjZXNzX3dpZHRoKTsKIAkJfQpAQCAtMzg1LDE1ICszODUsNiBAQAogCSAgICAoZmllbGRfYml0X3Bvc2l0aW9uIC0KIAkgICAgIEFDUElfTVVMXzgob2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iYXNlX2J5dGVfb2Zmc2V0KSk7CiAKLQkvKgotCSAqIERvZXMgdGhlIGVudGlyZSBmaWVsZCBmaXQgd2l0aGluIGEgc2luZ2xlIGZpZWxkIGFjY2VzcyBlbGVtZW50PyAoZGF0dW0pCi0JICogKGkuZS4sIHdpdGhvdXQgY3Jvc3NpbmcgYSBkYXR1bSBib3VuZGFyeSkKLQkgKi8KLQlpZiAoKG9ial9kZXNjLT5jb21tb25fZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCArCi0JICAgICBmaWVsZF9iaXRfbGVuZ3RoKSA8PSAodTE2KSBhY2Nlc3NfYml0X3dpZHRoKSB7Ci0JCW9ial9kZXNjLT5jb21tb24uZmxhZ3MgfD0gQU9QT0JKX1NJTkdMRV9EQVRVTTsKLQl9Ci0KIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKaW5kZXggNTMxMDAwZi4uODgxOWQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICAgICgodTY0KSBhZGRyZXNzIC0gKHU2NCkgbWVtX2luZm8tPm1hcHBlZF9waHlzaWNhbF9hZGRyZXNzKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCSAgIlN5c3RlbS1NZW1vcnkgKHdpZHRoICVkKSBSL1cgJWQgQWRkcmVzcz0lOC44WCU4LjhYXG4iLAorCQkJICAiU3lzdGVtLU1lbW9yeSAod2lkdGggJXUpIFIvVyAldSBBZGRyZXNzPSU4LjhYJTguOFhcbiIsCiAJCQkgIGJpdF93aWR0aCwgZnVuY3Rpb24sCiAJCQkgIEFDUElfRk9STUFUX05BVElWRV9VSU5UKGFkZHJlc3MpKSk7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXhfc3lzdGVtX2lvX3NwYWNlX2hhbmRsZXIpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAiU3lzdGVtLUlPICh3aWR0aCAlZCkgUi9XICVkIEFkZHJlc3M9JTguOFglOC44WFxuIiwKKwkJCSAgIlN5c3RlbS1JTyAod2lkdGggJXUpIFIvVyAldSBBZGRyZXNzPSU4LjhYJTguOFhcbiIsCiAJCQkgIGJpdF93aWR0aCwgZnVuY3Rpb24sCiAJCQkgIEFDUElfRk9STUFUX05BVElWRV9VSU5UKGFkZHJlc3MpKSk7CiAKQEAgLTM3Myw3ICszNzMsNyBAQAogCXBjaV9yZWdpc3RlciA9ICh1MTYpICh1MzIpIGFkZHJlc3M7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkgICJQY2ktQ29uZmlnICVkICglZCkgU2VnKCUwNHgpIEJ1cyglMDR4KSBEZXYoJTA0eCkgRnVuYyglMDR4KSBSZWcoJTA0eClcbiIsCisJCQkgICJQY2ktQ29uZmlnICV1ICgldSkgU2VnKCUwNHgpIEJ1cyglMDR4KSBEZXYoJTA0eCkgRnVuYyglMDR4KSBSZWcoJTA0eClcbiIsCiAJCQkgIGZ1bmN0aW9uLCBiaXRfd2lkdGgsIHBjaV9pZC0+c2VnbWVudCwgcGNpX2lkLT5idXMsCiAJCQkgIHBjaV9pZC0+ZGV2aWNlLCBwY2lfaWQtPmZ1bmN0aW9uLCBwY2lfcmVnaXN0ZXIpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCmluZGV4IDM0NTAzMDkuLjE0NzUwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOglhY3BpX2h3X2dwZV9yZWdpc3Rlcl9iaXQKKyAqIEZVTkNUSU9OOglhY3BpX2h3X2dldF9ncGVfcmVnaXN0ZXJfYml0CiAgKgogICogUEFSQU1FVEVSUzoJZ3BlX2V2ZW50X2luZm8JICAgIC0gSW5mbyBibG9jayBmb3IgdGhlIEdQRQogICoJCWdwZV9yZWdpc3Rlcl9pbmZvICAgLSBJbmZvIGJsb2NrIGZvciB0aGUgR1BFIHJlZ2lzdGVyCkBAIC02OSw3ICs2OSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGFjcGlfaHdfZ3BlX3JlZ2lzdGVyX2JpdChzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCit1MzIgYWNwaV9od19nZXRfZ3BlX3JlZ2lzdGVyX2JpdChzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm8sCiAJCQkgICAgIHN0cnVjdCBhY3BpX2dwZV9yZWdpc3Rlcl9pbmZvICpncGVfcmVnaXN0ZXJfaW5mbykKIHsKIAlyZXR1cm4gKHUzMikxIDw8IChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCS8qIFNldCBvdCBjbGVhciBqdXN0IHRoZSBiaXQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIEdQRSAqLwogCi0JcmVnaXN0ZXJfYml0ID0gYWNwaV9od19ncGVfcmVnaXN0ZXJfYml0KGdwZV9ldmVudF9pbmZvLAorCXJlZ2lzdGVyX2JpdCA9IGFjcGlfaHdfZ2V0X2dwZV9yZWdpc3Rlcl9iaXQoZ3BlX2V2ZW50X2luZm8sCiAJCQkJCQlncGVfcmVnaXN0ZXJfaW5mbyk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIEFDUElfR1BFX0NPTkRfRU5BQkxFOgpAQCAtMTQzLDMxICsxNDMsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcKLSAqCi0gKiBQQVJBTUVURVJTOiAgZ3BlX2V2ZW50X2luZm8gICAgICAtIEluZm8gYmxvY2sgZm9yIHRoZSBHUEUgdG8gYmUgZW5hYmxlZAotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogV3JpdGUgYSBHUEUgZW5hYmxlIHJlZ2lzdGVyLiAgTm90ZTogVGhlIGJpdCBmb3IgdGhpcyBHUEUgbXVzdAotICogICAgICAgICAgICAgIGFscmVhZHkgYmUgY2xlYXJlZCBvciBzZXQgaW4gdGhlIHBhcmVudCByZWdpc3RlcgotICogICAgICAgICAgICAgIGVuYWJsZV9mb3JfcnVuIG1hc2suCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9zdGF0dXMKLWFjcGlfaHdfd3JpdGVfZ3BlX2VuYWJsZV9yZWcoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKiBncGVfZXZlbnRfaW5mbykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0KLQlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7Ci0KLQlzdGF0dXMgPSBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9DT05EX0VOQUJMRSk7Ci0JcmV0dXJuIChzdGF0dXMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfY2xlYXJfZ3BlCiAgKgogICogUEFSQU1FVEVSUzogIGdwZV9ldmVudF9pbmZvICAgICAgLSBJbmZvIGJsb2NrIGZvciB0aGUgR1BFIHRvIGJlIGNsZWFyZWQKQEAgLTE5Myw3ICsxNjgsNyBAQAogCQlyZXR1cm4gKEFFX05PVF9FWElTVCk7CiAJfQogCi0JcmVnaXN0ZXJfYml0ID0gYWNwaV9od19ncGVfcmVnaXN0ZXJfYml0KGdwZV9ldmVudF9pbmZvLAorCXJlZ2lzdGVyX2JpdCA9IGFjcGlfaHdfZ2V0X2dwZV9yZWdpc3Rlcl9iaXQoZ3BlX2V2ZW50X2luZm8sCiAJCQkJCQlncGVfcmVnaXN0ZXJfaW5mbyk7CiAKIAkvKgpAQCAtMjQxLDcgKzIxNiw3IEBACiAKIAkvKiBHZXQgdGhlIHJlZ2lzdGVyIGJpdG1hc2sgZm9yIHRoaXMgR1BFICovCiAKLQlyZWdpc3Rlcl9iaXQgPSBhY3BpX2h3X2dwZV9yZWdpc3Rlcl9iaXQoZ3BlX2V2ZW50X2luZm8sCisJcmVnaXN0ZXJfYml0ID0gYWNwaV9od19nZXRfZ3BlX3JlZ2lzdGVyX2JpdChncGVfZXZlbnRfaW5mbywKIAkJCQkJCWdwZV9yZWdpc3Rlcl9pbmZvKTsKIAogCS8qIEdQRSBjdXJyZW50bHkgZW5hYmxlZD8gKGVuYWJsZWQgZm9yIHJ1bnRpbWU/KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwppbmRleCAzNmViODAzLi4zNzk2ODExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lOSVQsCi0JCQkgICJFbnRlcmluZyBzbGVlcCBzdGF0ZSBbUyVkXVxuIiwgc2xlZXBfc3RhdGUpKTsKKwkJCSAgIkVudGVyaW5nIHNsZWVwIHN0YXRlIFtTJXVdXG4iLCBzbGVlcF9zdGF0ZSkpOwogCiAJLyogQ2xlYXIgdGhlIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCmluZGV4IDNhMjgxNDYuLjBjZDkyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKQEAgLTMzOCw4ICszMzgsNyBAQAogCQkJICovCiAJCQl3aGlsZSAoIWFjcGlfbnNfb3BlbnNfc2NvcGUocHJlZml4X25vZGUtPnR5cGUpICYmCiAJCQkgICAgICAgcHJlZml4X25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgewotCQkJCXByZWZpeF9ub2RlID0KLQkJCQkgICAgYWNwaV9uc19nZXRfcGFyZW50X25vZGUocHJlZml4X25vZGUpOworCQkJCXByZWZpeF9ub2RlID0gcHJlZml4X25vZGUtPnBhcmVudDsKIAkJCX0KIAkJfQogCX0KQEAgLTQxOSw3ICs0MTgsNyBAQAogCQkJCS8qIEJhY2t1cCB0byB0aGUgcGFyZW50IG5vZGUgKi8KIAogCQkJCW51bV9jYXJhdHMrKzsKLQkJCQl0aGlzX25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZSh0aGlzX25vZGUpOworCQkJCXRoaXNfbm9kZSA9IHRoaXNfbm9kZS0+cGFyZW50OwogCQkJCWlmICghdGhpc19ub2RlKSB7CiAKIAkJCQkJLyogQ3VycmVudCBzY29wZSBoYXMgbm8gcGFyZW50IHNjb3BlICovCkBAIC00MzMsNyArNDMyLDcgQEAKIAogCQkJaWYgKHNlYXJjaF9wYXJlbnRfZmxhZyA9PSBBQ1BJX05TX05PX1VQU0VBUkNIKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKLQkJCQkJCSAgIlNlYXJjaCBzY29wZSBpcyBbJTQuNHNdLCBwYXRoIGhhcyAlZCBjYXJhdChzKVxuIiwKKwkJCQkJCSAgIlNlYXJjaCBzY29wZSBpcyBbJTQuNHNdLCBwYXRoIGhhcyAldSBjYXJhdChzKVxuIiwKIAkJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lCiAJCQkJCQkgICh0aGlzX25vZGUpLCBudW1fY2FyYXRzKSk7CiAJCQl9CkBAIC00OTUsNyArNDk0LDcgQEAKIAkJCXBhdGgrKzsKIAogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKLQkJCQkJICAiTXVsdGkgUGF0aG5hbWUgKCVkIFNlZ21lbnRzLCBGbGFncz0lWClcbiIsCisJCQkJCSAgIk11bHRpIFBhdGhuYW1lICgldSBTZWdtZW50cywgRmxhZ3M9JVgpXG4iLAogCQkJCQkgIG51bV9zZWdtZW50cywgZmxhZ3MpKTsKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCmluZGV4IDk4MjI2OWMuLjFlNWZmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX3JlbW92ZV9ub2RlLCBub2RlKTsKIAotCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobm9kZSk7CisJcGFyZW50X25vZGUgPSBub2RlLT5wYXJlbnQ7CiAKIAlwcmV2X25vZGUgPSBOVUxMOwogCW5leHRfbm9kZSA9IHBhcmVudF9ub2RlLT5jaGlsZDsKQEAgLTE2OCwyOSArMTY4LDIwIEBACiAKIAl3aGlsZSAobmV4dF9ub2RlICE9IG5vZGUpIHsKIAkJcHJldl9ub2RlID0gbmV4dF9ub2RlOwotCQluZXh0X25vZGUgPSBwcmV2X25vZGUtPnBlZXI7CisJCW5leHRfbm9kZSA9IG5leHRfbm9kZS0+cGVlcjsKIAl9CiAKIAlpZiAocHJldl9ub2RlKSB7CiAKIAkJLyogTm9kZSBpcyBub3QgZmlyc3QgY2hpbGQsIHVubGluayBpdCAqLwogCi0JCXByZXZfbm9kZS0+cGVlciA9IG5leHRfbm9kZS0+cGVlcjsKLQkJaWYgKG5leHRfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUKSB7Ci0JCQlwcmV2X25vZGUtPmZsYWdzIHw9IEFOT0JKX0VORF9PRl9QRUVSX0xJU1Q7Ci0JCX0KKwkJcHJldl9ub2RlLT5wZWVyID0gbm9kZS0+cGVlcjsKIAl9IGVsc2UgewotCQkvKiBOb2RlIGlzIGZpcnN0IGNoaWxkIChoYXMgbm8gcHJldmlvdXMgcGVlcikgKi8KLQotCQlpZiAobmV4dF9ub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKLQotCQkJLyogTm8gcGVlcnMgYXQgYWxsICovCi0KLQkJCXBhcmVudF9ub2RlLT5jaGlsZCA9IE5VTEw7Ci0JCX0gZWxzZSB7CS8qIExpbmsgcGVlciBsaXN0IHRvIHBhcmVudCAqLwotCi0JCQlwYXJlbnRfbm9kZS0+Y2hpbGQgPSBuZXh0X25vZGUtPnBlZXI7Ci0JCX0KKwkJLyoKKwkJICogTm9kZSBpcyBmaXJzdCBjaGlsZCAoaGFzIG5vIHByZXZpb3VzIHBlZXIpLgorCQkgKiBMaW5rIHBlZXIgbGlzdCB0byBwYXJlbnQKKwkJICovCisJCXBhcmVudF9ub2RlLT5jaGlsZCA9IG5vZGUtPnBlZXI7CiAJfQogCiAJLyogRGVsZXRlIHRoZSBub2RlIGFuZCBhbnkgYXR0YWNoZWQgb2JqZWN0cyAqLwpAQCAtMjI4LDMzICsyMTksNDIgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UobnNfaW5zdGFsbF9ub2RlKTsKIAotCS8qCi0JICogR2V0IHRoZSBvd25lciBJRCBmcm9tIHRoZSBXYWxrIHN0YXRlLiBUaGUgb3duZXIgSUQgaXMgdXNlZCB0byB0cmFjawotCSAqIHRhYmxlIGRlbGV0aW9uIGFuZCBkZWxldGlvbiBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbWV0aG9kcy4KLQkgKi8KIAlpZiAod2Fsa19zdGF0ZSkgeworCQkvKgorCQkgKiBHZXQgdGhlIG93bmVyIElEIGZyb20gdGhlIFdhbGsgc3RhdGUuIFRoZSBvd25lciBJRCBpcyB1c2VkIHRvCisJCSAqIHRyYWNrIHRhYmxlIGRlbGV0aW9uIGFuZCBkZWxldGlvbiBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbWV0aG9kcy4KKwkJICovCiAJCW93bmVyX2lkID0gd2Fsa19zdGF0ZS0+b3duZXJfaWQ7CisKKwkJaWYgKCh3YWxrX3N0YXRlLT5tZXRob2RfZGVzYykgJiYKKwkJICAgIChwYXJlbnRfbm9kZSAhPSB3YWxrX3N0YXRlLT5tZXRob2Rfbm9kZSkpIHsKKwkJCS8qCisJCQkgKiBBIG1ldGhvZCBpcyBjcmVhdGluZyBhIG5ldyBub2RlIHRoYXQgaXMgbm90IGEgY2hpbGQgb2YgdGhlCisJCQkgKiBtZXRob2QgKGl0IGlzIG5vbi1sb2NhbCkuIE1hcmsgdGhlIGV4ZWN1dGluZyBtZXRob2QgYXMgaGF2aW5nCisJCQkgKiBtb2RpZmllZCB0aGUgbmFtZXNwYWNlLiBUaGlzIGlzIHVzZWQgZm9yIGNsZWFudXAgd2hlbiB0aGUKKwkJCSAqIG1ldGhvZCBleGl0cy4KKwkJCSAqLworCQkJd2Fsa19zdGF0ZS0+bWV0aG9kX2Rlc2MtPm1ldGhvZC5mbGFncyB8PQorCQkJICAgIEFPUE9CSl9NT0RJRklFRF9OQU1FU1BBQ0U7CisJCX0KIAl9CiAKIAkvKiBMaW5rIHRoZSBuZXcgZW50cnkgaW50byB0aGUgcGFyZW50IGFuZCBleGlzdGluZyBjaGlsZHJlbiAqLwogCisJbm9kZS0+cGVlciA9IE5VTEw7CisJbm9kZS0+cGFyZW50ID0gcGFyZW50X25vZGU7CiAJY2hpbGRfbm9kZSA9IHBhcmVudF9ub2RlLT5jaGlsZDsKKwogCWlmICghY2hpbGRfbm9kZSkgewogCQlwYXJlbnRfbm9kZS0+Y2hpbGQgPSBub2RlOwotCQlub2RlLT5mbGFncyB8PSBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUOwotCQlub2RlLT5wZWVyID0gcGFyZW50X25vZGU7CiAJfSBlbHNlIHsKLQkJd2hpbGUgKCEoY2hpbGRfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUKSkgeworCQkvKiBBZGQgbm9kZSB0byB0aGUgZW5kIG9mIHRoZSBwZWVyIGxpc3QgKi8KKworCQl3aGlsZSAoY2hpbGRfbm9kZS0+cGVlcikgewogCQkJY2hpbGRfbm9kZSA9IGNoaWxkX25vZGUtPnBlZXI7CiAJCX0KIAogCQljaGlsZF9ub2RlLT5wZWVyID0gbm9kZTsKLQotCQkvKiBDbGVhciBlbmQtb2YtbGlzdCBmbGFnICovCi0KLQkJY2hpbGRfbm9kZS0+ZmxhZ3MgJj0gfkFOT0JKX0VORF9PRl9QRUVSX0xJU1Q7Ci0JCW5vZGUtPmZsYWdzIHw9IEFOT0JKX0VORF9PRl9QRUVSX0xJU1Q7Ci0JCW5vZGUtPnBlZXIgPSBwYXJlbnRfbm9kZTsKIAl9CiAKIAkvKiBJbml0IHRoZSBuZXcgZW50cnkgKi8KQEAgLTI4OCw5ICsyODgsOCBAQAogCiB2b2lkIGFjcGlfbnNfZGVsZXRlX2NoaWxkcmVuKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpwYXJlbnRfbm9kZSkKIHsKLQlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqY2hpbGRfbm9kZTsKIAlzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqbmV4dF9ub2RlOwotCXU4IGZsYWdzOworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlX3RvX2RlbGV0ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKG5zX2RlbGV0ZV9jaGlsZHJlbiwgcGFyZW50X25vZGUpOwogCkBAIC0yOTgsMzcgKzI5NywyNiBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQkvKiBJZiBubyBjaGlsZHJlbiwgYWxsIGRvbmUhICovCi0KLQljaGlsZF9ub2RlID0gcGFyZW50X25vZGUtPmNoaWxkOwotCWlmICghY2hpbGRfbm9kZSkgewotCQlyZXR1cm5fVk9JRDsKLQl9Ci0KIAkvKiBEZWFsbG9jYXRlIGFsbCBjaGlsZHJlbiBhdCB0aGlzIGxldmVsICovCiAKLQlkbyB7Ci0KLQkJLyogR2V0IHRoZSB0aGluZ3Mgd2UgbmVlZCAqLwotCi0JCW5leHRfbm9kZSA9IGNoaWxkX25vZGUtPnBlZXI7Ci0JCWZsYWdzID0gY2hpbGRfbm9kZS0+ZmxhZ3M7CisJbmV4dF9ub2RlID0gcGFyZW50X25vZGUtPmNoaWxkOworCXdoaWxlIChuZXh0X25vZGUpIHsKIAogCQkvKiBHcmFuZGNoaWxkcmVuIHNob3VsZCBoYXZlIGFsbCBiZWVuIGRlbGV0ZWQgYWxyZWFkeSAqLwogCi0JCWlmIChjaGlsZF9ub2RlLT5jaGlsZCkgeworCQlpZiAobmV4dF9ub2RlLT5jaGlsZCkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkZvdW5kIGEgZ3JhbmRjaGlsZCEgUD0lcCBDPSVwIiwKLQkJCQkgICAgcGFyZW50X25vZGUsIGNoaWxkX25vZGUpKTsKKwkJCQkgICAgcGFyZW50X25vZGUsIG5leHRfbm9kZSkpOwogCQl9CiAKIAkJLyoKIAkJICogRGVsZXRlIHRoaXMgY2hpbGQgbm9kZSBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBjaGlsZCBpbiB0aGUgbGlzdC4KIAkJICogTm8gbmVlZCB0byB1bmxpbmsgdGhlIG5vZGUgc2luY2Ugd2UgYXJlIGRlbGV0aW5nIHRoZSBlbnRpcmUgYnJhbmNoLgogCQkgKi8KLQkJYWNwaV9uc19kZWxldGVfbm9kZShjaGlsZF9ub2RlKTsKLQkJY2hpbGRfbm9kZSA9IG5leHRfbm9kZTsKLQotCX0gd2hpbGUgKCEoZmxhZ3MgJiBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUKSk7CisJCW5vZGVfdG9fZGVsZXRlID0gbmV4dF9ub2RlOworCQluZXh0X25vZGUgPSBuZXh0X25vZGUtPnBlZXI7CisJCWFjcGlfbnNfZGVsZXRlX25vZGUobm9kZV90b19kZWxldGUpOworCX07CiAKIAkvKiBDbGVhciB0aGUgcGFyZW50J3MgY2hpbGQgcG9pbnRlciAqLwogCkBAIC00MDUsNyArMzkzLDcgQEAKIAogCQkJLyogTW92ZSB1cCB0aGUgdHJlZSB0byB0aGUgZ3JhbmRwYXJlbnQgKi8KIAotCQkJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwYXJlbnRfbm9kZSk7CisJCQlwYXJlbnRfbm9kZSA9IHBhcmVudF9ub2RlLT5wYXJlbnQ7CiAJCX0KIAl9CiAKQEAgLTUxMCw3ICs0OTgsNyBAQAogCiAJCQkvKiBNb3ZlIHVwIHRoZSB0cmVlIHRvIHRoZSBncmFuZHBhcmVudCAqLwogCi0JCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHBhcmVudF9ub2RlKTsKKwkJCXBhcmVudF9ub2RlID0gcGFyZW50X25vZGUtPnBhcmVudDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKaW5kZXggMjExMGNjMi4uYTU0ZGMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCkBAIC00NDEsNyArNDQxLDcgQEAKIAkJCXJldHVybiAoQUVfT0spOwogCQl9CiAKLQkJYWNwaV9vc19wcmludGYoIihSJWQpIiwgb2JqX2Rlc2MtPmNvbW1vbi5yZWZlcmVuY2VfY291bnQpOworCQlhY3BpX29zX3ByaW50ZigiKFIldSkiLCBvYmpfZGVzYy0+Y29tbW9uLnJlZmVyZW5jZV9jb3VudCk7CiAKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX01FVEhPRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCmluZGV4IDRlNTI3MmMuLjY2MGEyNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwpAQCAtMTAzLDggKzEwMyw4IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKLQkJCSAgICAgICJcbkluaXRpYWxpemVkICVoZC8laGQgUmVnaW9ucyAlaGQvJWhkIEZpZWxkcyAlaGQvJWhkICIKLQkJCSAgICAgICJCdWZmZXJzICVoZC8laGQgUGFja2FnZXMgKCVoZCBub2RlcylcbiIsCisJCQkgICAgICAiXG5Jbml0aWFsaXplZCAldS8ldSBSZWdpb25zICV1LyV1IEZpZWxkcyAldS8ldSAiCisJCQkgICAgICAiQnVmZmVycyAldS8ldSBQYWNrYWdlcyAoJXUgbm9kZXMpXG4iLAogCQkJICAgICAgaW5mby5vcF9yZWdpb25faW5pdCwgaW5mby5vcF9yZWdpb25fY291bnQsCiAJCQkgICAgICBpbmZvLmZpZWxkX2luaXQsIGluZm8uZmllbGRfY291bnQsCiAJCQkgICAgICBpbmZvLmJ1ZmZlcl9pbml0LCBpbmZvLmJ1ZmZlcl9jb3VudCwKQEAgLTExMiw5ICsxMTIsOSBAQAogCQkJICAgICAgaW5mby5vYmplY3RfY291bnQpKTsKIAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkgICIlaGQgQ29udHJvbCBNZXRob2RzIGZvdW5kXG4iLCBpbmZvLm1ldGhvZF9jb3VudCkpOworCQkJICAiJXUgQ29udHJvbCBNZXRob2RzIGZvdW5kXG4iLCBpbmZvLm1ldGhvZF9jb3VudCkpOwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRElTUEFUQ0gsCi0JCQkgICIlaGQgT3AgUmVnaW9ucyBmb3VuZFxuIiwgaW5mby5vcF9yZWdpb25fY291bnQpKTsKKwkJCSAgIiV1IE9wIFJlZ2lvbnMgZm91bmRcbiIsIGluZm8ub3BfcmVnaW9uX2NvdW50KSk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogfQpAQCAtMjA4LDggKzIwOCw4IEBACiAJfQogCiAJQUNQSV9ERUJVR19QUklOVF9SQVcoKEFDUElfREJfSU5JVCwKLQkJCSAgICAgICJcbkV4ZWN1dGVkICVoZCBfSU5JIG1ldGhvZHMgcmVxdWlyaW5nICVoZCBfU1RBIGV4ZWN1dGlvbnMgIgotCQkJICAgICAgIihleGFtaW5lZCAlaGQgb2JqZWN0cylcbiIsCisJCQkgICAgICAiXG5FeGVjdXRlZCAldSBfSU5JIG1ldGhvZHMgcmVxdWlyaW5nICV1IF9TVEEgZXhlY3V0aW9ucyAiCisJCQkgICAgICAiKGV4YW1pbmVkICV1IG9iamVjdHMpXG4iLAogCQkJICAgICAgaW5mby5udW1fSU5JLCBpbmZvLm51bV9TVEEsIGluZm8uZGV2aWNlX2NvdW50KSk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTQxMCw3ICs0MTAsNyBAQAogCSAqIFRoZSBvbmx5IF9JTkkgbWV0aG9kcyB0aGF0IHdlIGNhcmUgYWJvdXQgYXJlIHRob3NlIHRoYXQgYXJlCiAJICogcHJlc2VudCB1bmRlciBEZXZpY2UsIFByb2Nlc3NvciwgYW5kIFRoZXJtYWwgb2JqZWN0cy4KIAkgKi8KLQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpOworCXBhcmVudF9ub2RlID0gbm9kZS0+cGFyZW50OwogCXN3aXRjaCAocGFyZW50X25vZGUtPnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9ERVZJQ0U6CiAJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgpAQCAtNDIwLDcgKzQyMCw3IEBACiAKIAkJd2hpbGUgKHBhcmVudF9ub2RlKSB7CiAJCQlwYXJlbnRfbm9kZS0+ZmxhZ3MgfD0gQU5PQkpfU1VCVFJFRV9IQVNfSU5JOwotCQkJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwYXJlbnRfbm9kZSk7CisJCQlwYXJlbnRfbm9kZSA9IHBhcmVudF9ub2RlLT5wYXJlbnQ7CiAJCX0KIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc25hbWVzLmMKaW5kZXggN2RlYTAwMy4uZDMxMDRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc25hbWVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc25hbWVzLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAkJLyogUHV0IHRoZSBuYW1lIGludG8gdGhlIGJ1ZmZlciAqLwogCiAJCUFDUElfTU9WRV8zMl9UT18zMigobmFtZV9idWZmZXIgKyBpbmRleCksICZwYXJlbnRfbm9kZS0+bmFtZSk7Ci0JCXBhcmVudF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUocGFyZW50X25vZGUpOworCQlwYXJlbnRfbm9kZSA9IHBhcmVudF9ub2RlLT5wYXJlbnQ7CiAKIAkJLyogUHJlZml4IG5hbWUgd2l0aCB0aGUgcGF0aCBzZXBhcmF0b3IgKi8KIApAQCAtMTk4LDcgKzE5OCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQlzaXplICs9IEFDUElfUEFUSF9TRUdNRU5UX0xFTkdUSDsKLQkJbmV4dF9ub2RlID0gYWNwaV9uc19nZXRfcGFyZW50X25vZGUobmV4dF9ub2RlKTsKKwkJbmV4dF9ub2RlID0gbmV4dF9ub2RlLT5wYXJlbnQ7CiAJfQogCiAJaWYgKCFzaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcGFyc2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCmluZGV4IDI3Y2RhNTIuLjU4MDhjODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCkBAIC0xMzYsOCArMTM2LDggQEAKIAogCS8qIFBhcnNlIHRoZSBBTUwgKi8KIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICIqUEFSU0UqIHBhc3MgJWQgcGFyc2VcbiIsCi0JCQkgICh1bnNpZ25lZClwYXNzX251bWJlcikpOworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICIqUEFSU0UqIHBhc3MgJXUgcGFyc2VcbiIsCisJCQkgIHBhc3NfbnVtYmVyKSk7CiAJc3RhdHVzID0gYWNwaV9wc19wYXJzZV9hbWwod2Fsa19zdGF0ZSk7CiAKICAgICAgIGNsZWFudXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKaW5kZXggZDRiZTM3Ny4uZDFjMTM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYwpAQCAtNTU2LDcgKzU1Niw3IEBACiAKIAkJLyogTmVlZCBhbiBJbnRlZ2VyIC0gY3JlYXRlIGEgemVyby12YWx1ZSBpbnRlZ2VyICovCiAKLQkJbmV3X29iamVjdCA9IGFjcGlfdXRfY3JlYXRlX2ludGVnZXJfb2JqZWN0KDApOworCQluZXdfb2JqZWN0ID0gYWNwaV91dF9jcmVhdGVfaW50ZWdlcl9vYmplY3QoKHU2NCkwKTsKIAl9IGVsc2UgaWYgKGV4cGVjdGVkX2J0eXBlcyAmIEFDUElfUlRZUEVfU1RSSU5HKSB7CiAKIAkJLyogTmVlZCBhIFN0cmluZyAtIGNyZWF0ZSBhIE5VTEwgc3RyaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYwppbmRleCA2MWJkMGY2Li40MDA5NDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKQEAgLTExMiw2ICsxMTIsMTMgQEAKICAqIF9HVE06IENvbnZlcnQgQnVmZmVyIG9mIEJZVEVzIHRvIGEgQnVmZmVyIG9mIERXT1JEcwogICogX1BTUzogU29ydCB0aGUgbGlzdCBkZXNjZW5kaW5nIGJ5IFBvd2VyCiAgKiBfVFNTOiBTb3J0IHRoZSBsaXN0IGRlc2NlbmRpbmcgYnkgUG93ZXIKKyAqCisgKiBOYW1lcyB0aGF0IG11c3QgYmUgcGFja2FnZXMsIGJ1dCBjYW5ub3QgYmUgc29ydGVkOgorICoKKyAqIF9CQ0w6IFZhbHVlcyBhcmUgdGllZCB0byB0aGUgUGFja2FnZSBpbmRleCB3aGVyZSB0aGV5IGFwcGVhciwgYW5kIGNhbm5vdAorICogYmUgbW92ZWQgb3Igc29ydGVkLiBUaGVzZSBpbmRleCB2YWx1ZXMgYXJlIHVzZWQgZm9yIF9CUUMgYW5kIF9CQ00uCisgKiBIb3dldmVyLCB3ZSBjYW4gZml4IHRoZSBjYXNlIHdoZXJlIGEgYnVmZmVyIGlzIHJldHVybmVkLCBieSBjb252ZXJ0aW5nCisgKiBpdCB0byBhIFBhY2thZ2Ugb2YgaW50ZWdlcnMuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9yZXBhaXJfaW5mbyBhY3BpX25zX3JlcGFpcmFibGVfbmFtZXNbXSA9IHsKIAl7Il9BTFIiLCBhY3BpX25zX3JlcGFpcl9BTFJ9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCmluZGV4IGE4ZTQyYjUuLjQxMTAyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKQEAgLTE1MiwxNyArMTUyLDYgQEAKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJCX0KIAotCQkvKgotCQkgKiBUaGUgbGFzdCBlbnRyeSBpbiB0aGUgbGlzdCBwb2ludHMgYmFjayB0byB0aGUgcGFyZW50LAotCQkgKiBzbyBhIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZW5kLW9mLWxpc3QKLQkJICovCi0JCWlmIChub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKLQotCQkJLyogU2VhcmNoZWQgZW50aXJlIGxpc3QsIHdlIGFyZSBkb25lICovCi0KLQkJCWJyZWFrOwotCQl9Ci0KIAkJLyogRGlkbid0IG1hdGNoIG5hbWUsIG1vdmUgb24gdG8gdGhlIG5leHQgcGVlciBvYmplY3QgKi8KIAogCQlub2RlID0gbm9kZS0+cGVlcjsKQEAgLTIxNyw3ICsyMDYsNyBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShuc19zZWFyY2hfcGFyZW50X3RyZWUpOwogCi0JcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKTsKKwlwYXJlbnRfbm9kZSA9IG5vZGUtPnBhcmVudDsKIAogCS8qCiAJICogSWYgdGhlcmUgaXMgbm8gcGFyZW50IChpLmUuLCB3ZSBhcmUgYXQgdGhlIHJvb3QpIG9yIHR5cGUgaXMgImxvY2FsIiwKQEAgLTI2MSw3ICsyNTAsNyBAQAogCiAJCS8qIE5vdCBmb3VuZCBoZXJlLCBnbyB1cCBhbm90aGVyIGxldmVsICh1bnRpbCB3ZSByZWFjaCB0aGUgcm9vdCkgKi8KIAotCQlwYXJlbnRfbm9kZSA9IGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKHBhcmVudF9ub2RlKTsKKwkJcGFyZW50X25vZGUgPSBwYXJlbnRfbm9kZS0+cGFyZW50OwogCX0KIAogCS8qIE5vdCBmb3VuZCBpbiBwYXJlbnQgdHJlZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwppbmRleCBiYWI1NTk3Li5lMWFkZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYwpAQCAtODQ3LDExNiArODQ3LDMgQEAKIAlBQ1BJX0ZSRUUoaW50ZXJuYWxfcGF0aCk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogRlVOQ1RJT046ICAgIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlCi0gKgotICogUEFSQU1FVEVSUzogIE5vZGUgICAgICAgLSBDdXJyZW50IHRhYmxlIGVudHJ5Ci0gKgotICogUkVUVVJOOiAgICAgIFBhcmVudCBlbnRyeSBvZiB0aGUgZ2l2ZW4gZW50cnkKLSAqCi0gKiBERVNDUklQVElPTjogT2J0YWluIHRoZSBwYXJlbnQgZW50cnkgZm9yIGEgZ2l2ZW4gZW50cnkgaW4gdGhlIG5hbWVzcGFjZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9uc19nZXRfcGFyZW50X25vZGUoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUKLQkJCQkJCSAgICAqbm9kZSkKLXsKLQlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7Ci0KLQlpZiAoIW5vZGUpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQkvKgotCSAqIFdhbGsgdG8gdGhlIGVuZCBvZiB0aGlzIHBlZXIgbGlzdC4gVGhlIGxhc3QgZW50cnkgaXMgbWFya2VkIHdpdGggYSBmbGFnCi0JICogYW5kIHRoZSBwZWVyIHBvaW50ZXIgaXMgcmVhbGx5IGEgcG9pbnRlciBiYWNrIHRvIHRoZSBwYXJlbnQuIFRoaXMgc2F2ZXMKLQkgKiBwdXR0aW5nIGEgcGFyZW50IGJhY2sgcG9pbnRlciBpbiBlYWNoIGFuZCBldmVyeSBuYW1lZCBvYmplY3QhCi0JICovCi0Jd2hpbGUgKCEobm9kZS0+ZmxhZ3MgJiBBTk9CSl9FTkRfT0ZfUEVFUl9MSVNUKSkgewotCQlub2RlID0gbm9kZS0+cGVlcjsKLQl9Ci0KLQlyZXR1cm4gKG5vZGUtPnBlZXIpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2dldF9uZXh0X3ZhbGlkX25vZGUKLSAqCi0gKiBQQVJBTUVURVJTOiAgTm9kZSAgICAgICAtIEN1cnJlbnQgdGFibGUgZW50cnkKLSAqCi0gKiBSRVRVUk46ICAgICAgTmV4dCB2YWxpZCBOb2RlIGluIHRoZSBsaW5rZWQgbm9kZSBsaXN0LiBOVUxMIGlmIG5vIG1vcmUgdmFsaWQKLSAqICAgICAgICAgICAgICBub2Rlcy4KLSAqCi0gKiBERVNDUklQVElPTjogRmluZCB0aGUgbmV4dCB2YWxpZCBub2RlIHdpdGhpbiBhIG5hbWUgdGFibGUuCi0gKiAgICAgICAgICAgICAgVXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgTlVMTC1lbmQtb2YtbGlzdCBsb29wcy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqYWNwaV9uc19nZXRfbmV4dF92YWxpZF9ub2RlKHN0cnVjdAotCQkJCQkJCWFjcGlfbmFtZXNwYWNlX25vZGUKLQkJCQkJCQkqbm9kZSkKLXsKLQotCS8qIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoaXMgcGVlciBsaXN0LCByZXR1cm4gTlVMTCAqLwotCi0JaWYgKG5vZGUtPmZsYWdzICYgQU5PQkpfRU5EX09GX1BFRVJfTElTVCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQkvKiBPdGhlcndpc2UganVzdCByZXR1cm4gdGhlIG5leHQgcGVlciAqLwotCi0JcmV0dXJuIChub2RlLT5wZWVyKTsKLX0KLQotI2lmZGVmIEFDUElfT0JTT0xFVEVfRlVOQ1RJT05TCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX25zX2ZpbmRfcGFyZW50X25hbWUKLSAqCi0gKiBQQVJBTUVURVJTOiAgKmNoaWxkX25vZGUgICAgICAgICAgICAtIE5hbWVkIE9iaiB3aG9zZSBuYW1lIGlzIHRvIGJlIGZvdW5kCi0gKgotICogUkVUVVJOOiAgICAgIFRoZSBBQ1BJIG5hbWUKLSAqCi0gKiBERVNDUklQVElPTjogU2VhcmNoIGZvciB0aGUgZ2l2ZW4gb2JqIGluIGl0cyBwYXJlbnQgc2NvcGUgYW5kIHJldHVybiB0aGUKLSAqICAgICAgICAgICAgICBuYW1lIHNlZ21lbnQsIG9yICI/Pz8/IiBpZiB0aGUgcGFyZW50IG5hbWUgY2FuJ3QgYmUgZm91bmQKLSAqICAgICAgICAgICAgICAod2hpY2ggInNob3VsZCBub3QgaGFwcGVuIikuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotYWNwaV9uYW1lIGFjcGlfbnNfZmluZF9wYXJlbnRfbmFtZShzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqIGNoaWxkX25vZGUpCi17Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKnBhcmVudF9ub2RlOwotCi0JQUNQSV9GVU5DVElPTl9UUkFDRShuc19maW5kX3BhcmVudF9uYW1lKTsKLQotCWlmIChjaGlsZF9ub2RlKSB7Ci0KLQkJLyogVmFsaWQgZW50cnkuICBHZXQgdGhlIHBhcmVudCBOb2RlICovCi0KLQkJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShjaGlsZF9ub2RlKTsKLQkJaWYgKHBhcmVudF9ub2RlKSB7Ci0JCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCi0JCQkJCSAgIlBhcmVudCBvZiAlcCBbJTQuNHNdIGlzICVwIFslNC40c11cbiIsCi0JCQkJCSAgY2hpbGRfbm9kZSwKLQkJCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUoY2hpbGRfbm9kZSksCi0JCQkJCSAgcGFyZW50X25vZGUsCi0JCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSkpOwotCi0JCQlpZiAocGFyZW50X25vZGUtPm5hbWUuaW50ZWdlcikgewotCQkJCXJldHVybl9WQUxVRSgoYWNwaV9uYW1lKSBwYXJlbnRfbm9kZS0+bmFtZS4KLQkJCQkJICAgICBpbnRlZ2VyKTsKLQkJCX0KLQkJfQotCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKLQkJCQkgICJVbmFibGUgdG8gZmluZCBwYXJlbnQgb2YgJXAgKCU0LjRzKVxuIiwKLQkJCQkgIGNoaWxkX25vZGUsCi0JCQkJICBhY3BpX3V0X2dldF9ub2RlX25hbWUoY2hpbGRfbm9kZSkpKTsKLQl9Ci0KLQlyZXR1cm5fVkFMVUUoQUNQSV9VTktOT1dOX05BTUUpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYwppbmRleCAwMGU3OWZiLi4yY2Q1YmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKQEAgLTc5LDE1ICs3OSw2IEBACiAJCXJldHVybiBwYXJlbnRfbm9kZS0+Y2hpbGQ7CiAJfQogCi0JLyoKLQkgKiBHZXQgdGhlIG5leHQgbm9kZS4KLQkgKgotCSAqIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoaXMgcGVlciBsaXN0LCByZXR1cm4gTlVMTAotCSAqLwotCWlmIChjaGlsZF9ub2RlLT5mbGFncyAmIEFOT0JKX0VORF9PRl9QRUVSX0xJU1QpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJLyogT3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBuZXh0IHBlZXIgKi8KIAogCXJldHVybiBjaGlsZF9ub2RlLT5wZWVyOwpAQCAtMTQ2LDkgKzEzNyw5IEBACiAJCQlyZXR1cm4gKG5leHRfbm9kZSk7CiAJCX0KIAotCQkvKiBPdGhlcndpc2UsIG1vdmUgb24gdG8gdGhlIG5leHQgbm9kZSAqLworCQkvKiBPdGhlcndpc2UsIG1vdmUgb24gdG8gdGhlIG5leHQgcGVlciBub2RlICovCiAKLQkJbmV4dF9ub2RlID0gYWNwaV9uc19nZXRfbmV4dF92YWxpZF9ub2RlKG5leHRfbm9kZSk7CisJCW5leHRfbm9kZSA9IG5leHRfbm9kZS0+cGVlcjsKIAl9CiAKIAkvKiBOb3QgZm91bmQgKi8KQEAgLTM1NSw3ICszNDYsNyBAQAogCQkJICovCiAJCQlsZXZlbC0tOwogCQkJY2hpbGRfbm9kZSA9IHBhcmVudF9ub2RlOwotCQkJcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShwYXJlbnRfbm9kZSk7CisJCQlwYXJlbnRfbm9kZSA9IHBhcmVudF9ub2RlLT5wYXJlbnQ7CiAKIAkJCW5vZGVfcHJldmlvdXNseV92aXNpdGVkID0gVFJVRTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmb2JqLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwppbmRleCBlYWZlZjI0Li5hMWYwNGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAkvKiBHZXQgdGhlIHBhcmVudCBlbnRyeSAqLwogCi0JcGFyZW50X25vZGUgPSBhY3BpX25zX2dldF9wYXJlbnRfbm9kZShub2RlKTsKKwlwYXJlbnRfbm9kZSA9IG5vZGUtPnBhcmVudDsKIAkqcmV0X2hhbmRsZSA9IEFDUElfQ0FTVF9QVFIoYWNwaV9oYW5kbGUsIHBhcmVudF9ub2RlKTsKIAogCS8qIFJldHVybiBleGNlcHRpb24gaWYgcGFyZW50IGlzIG51bGwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYwppbmRleCA2NjExNjc1Li4wNTU4NzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCkBAIC04MTMsMTAgKzgxMywxMCBAQAogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QubmFtZS5pbnRlZ2VyID0gQUNQSV9ST09UX05BTUU7CiAJYWNwaV9nYmxfcm9vdF9ub2RlX3N0cnVjdC5kZXNjcmlwdG9yX3R5cGUgPSBBQ1BJX0RFU0NfVFlQRV9OQU1FRDsKIAlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LnR5cGUgPSBBQ1BJX1RZUEVfREVWSUNFOworCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3QucGFyZW50ID0gTlVMTDsKIAlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmNoaWxkID0gTlVMTDsKIAlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LnBlZXIgPSBOVUxMOwogCWFjcGlfZ2JsX3Jvb3Rfbm9kZV9zdHJ1Y3Qub2JqZWN0ID0gTlVMTDsKLQlhY3BpX2dibF9yb290X25vZGVfc3RydWN0LmZsYWdzID0gQU5PQkpfRU5EX09GX1BFRVJfTElTVDsKIAogI2lmZGVmIEFDUElfREVCVUdfT1VUUFVUCiAJYWNwaV9nYmxfbG93ZXN0X3N0YWNrX3BvaW50ZXIgPSBBQ1BJX0NBU1RfUFRSKGFjcGlfc2l6ZSwgQUNQSV9TSVpFX01BWCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCmluZGV4IGRiOWQ4Y2EuLjdmOGNlZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCkBAIC0yOTMsMTIgKzI5Myw4IEBACiAJICogQ29tcGxldGUgdGhlIEdQRSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEdQRSBibG9ja3MgZGVmaW5lZCBpbiB0aGUgRkFEVAogCSAqIChHUEUgYmxvY2sgMCBhbmQgMSkuCiAJICoKLQkgKiBOb3RlMTogVGhpcyBpcyB3aGVyZSB0aGUgX1BSVyBtZXRob2RzIGFyZSBleGVjdXRlZCBmb3IgdGhlIEdQRXMuIFRoZXNlCi0JICogbWV0aG9kcyBjYW4gb25seSBiZSBleGVjdXRlZCBhZnRlciB0aGUgU0NJIGFuZCBHbG9iYWwgTG9jayBoYW5kbGVycyBhcmUKLQkgKiBpbnN0YWxsZWQgYW5kIGluaXRpYWxpemVkLgotCSAqCi0JICogTm90ZTI6IEN1cnJlbnRseSwgdGhlcmUgc2VlbXMgdG8gYmUgbm8gbmVlZCB0byBydW4gdGhlIF9SRUcgbWV0aG9kcwotCSAqIGJlZm9yZSBleGVjdXRpb24gb2YgdGhlIF9QUlcgbWV0aG9kcyBhbmQgZW5hYmxpbmcgb2YgdGhlIEdQRXMuCisJICogTk9URTogQ3VycmVudGx5LCB0aGVyZSBzZWVtcyB0byBiZSBubyBuZWVkIHRvIHJ1biB0aGUgX1JFRyBtZXRob2RzCisJICogYmVmb3JlIGVuYWJsaW5nIHRoZSBHUEVzLgogCSAqLwogCWlmICghKGZsYWdzICYgQUNQSV9OT19FVkVOVF9JTklUKSkgewogCQlzdGF0dXMgPSBhY3BpX2V2X2luc3RhbGxfZmFkdF9ncGVzKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMgYi9kcml2ZXJzL2FjcGkvYXBlaS9lcnN0LmMKaW5kZXggODY0ZGQ0Ni4uMTg2NDVmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvZXJzdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hcGVpL2Vyc3QuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9jcGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGFjcGkvYXBlaS5oPgogCiAjaW5jbHVkZSAiYXBlaS1pbnRlcm5hbC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDdkODU3ZGEuLjE1NzVhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTQyNCw4ICs0MjQsNyBAQAogCWlmIChkZXZpY2UtPndha2V1cC5mbGFncy52YWxpZCkgewogCQkvKiBCdXR0b24ncyBHUEUgaXMgcnVuLXdha2UgR1BFICovCiAJCWFjcGlfZW5hYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCQlkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyKTsKIAkJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQrKzsKIAkJZGV2aWNlLT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDE7CiAJfQpAQCAtNDQ4LDggKzQ0Nyw3IEBACiAKIAlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MudmFsaWQpIHsKIAkJYWNwaV9kaXNhYmxlX2dwZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCWRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCQlkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyKTsKIAkJZGV2aWNlLT53YWtldXAucnVuX3dha2VfY291bnQtLTsKIAkJZGV2aWNlLT53YWtldXAuc3RhdGUuZW5hYmxlZCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCAxZmEwYWFmLi5mMzEyOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMzAzLDExICszMDMsOCBAQAogCXByX2RlYnVnKFBSRUZJWCAidHJhbnNhY3Rpb24gc3RhcnRcbiIpOwogCS8qIGRpc2FibGUgR1BFIGR1cmluZyB0cmFuc2FjdGlvbiBpZiBzdG9ybSBpcyBkZXRlY3RlZCAqLwogCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7Ci0JCS8qCi0JCSAqIEl0IGhhcyB0byBiZSBkaXNhYmxlZCBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwgcmVnYXJkbGVzcyBvZiB0aGUKLQkJICogR1BFIHJlZmVyZW5jZSBjb3VudGluZywgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIuCi0JCSAqLwotCQlhY3BpX3NldF9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfRElTQUJMRSk7CisJCS8qIEl0IGhhcyB0byBiZSBkaXNhYmxlZCwgc28gdGhhdCBpdCBkb2Vzbid0IHRyaWdnZXIuICovCisJCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CiAJfQogCiAJc3RhdHVzID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgdCk7CkBAIC0zMTYsMTIgKzMxMyw4IEBACiAJZWNfY2hlY2tfc2NpX3N5bmMoZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfR1BFX1NUT1JNLCAmZWMtPmZsYWdzKSkgewogCQltc2xlZXAoMSk7Ci0JCS8qCi0JCSAqIEl0IGlzIHNhZmUgdG8gZW5hYmxlIHRoZSBHUEUgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24uICBVc2UKLQkJICogYWNwaV9zZXRfZ3BlKCkgZm9yIHRoYXQsIHNpbmNlIHdlIHVzZWQgaXQgdG8gZGlzYWJsZSB0aGUgR1BFCi0JCSAqIGFib3ZlLgotCQkgKi8KLQkJYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0VOQUJMRSk7CisJCS8qIEl0IGlzIHNhZmUgdG8gZW5hYmxlIHRoZSBHUEUgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24uICovCisJCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKIAl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IEFDUElfRUNfU1RPUk1fVEhSRVNIT0xEKSB7CiAJCXByX2luZm8oUFJFRklYICJHUEUgc3Rvcm0gZGV0ZWN0ZWQsICIKIAkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iKTsKQEAgLTc0Niw3ICs3MzksNyBAQAogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSwgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCQkJICAgIEFDUElfQURSX1NQQUNFX0VDLAogCQkJCQkJICAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIsCkBAIC03NjMsNyArNzU2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwotCQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtNzc0LDcgKzc2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGVjX3JlbW92ZV9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7Ci0JYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CiAJaWYgKEFDUElfRkFJTFVSRShhY3BpX3JlbW92ZV9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQlBQ1BJX0FEUl9TUEFDRV9FQywgJmFjcGlfZWNfc3BhY2VfaGFuZGxlcikpKQogCQlwcl9lcnIoUFJFRklYICJmYWlsZWQgdG8gcmVtb3ZlIHNwYWNlIGhhbmRsZXJcbiIpOwpAQCAtMTAxOCwyMiArMTAxMSw2IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9lY19zdXNwZW5kKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGFjcGlfZWMgKmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwotCS8qIFN0b3AgdXNpbmcgdGhlIEdQRSwgYnV0IGtlZXAgaXQgcmVmZXJlbmNlIGNvdW50ZWQuICovCi0JYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0RJU0FCTEUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjcGlfZWNfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQotewotCXN0cnVjdCBhY3BpX2VjICplYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQkvKiBFbmFibGUgdGhlIEdQRSBhZ2FpbiwgYnV0IGRvbid0IHJlZmVyZW5jZSBjb3VudCBpdCBvbmNlIG1vcmUuICovCi0JYWNwaV9zZXRfZ3BlKE5VTEwsIGVjLT5ncGUsIEFDUElfR1BFX0VOQUJMRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9lY19kcml2ZXIgPSB7CiAJLm5hbWUgPSAiZWMiLAogCS5jbGFzcyA9IEFDUElfRUNfQ0xBU1MsCkBAIC0xMDQxLDggKzEwMTgsNiBAQAogCS5vcHMgPSB7CiAJCS5hZGQgPSBhY3BpX2VjX2FkZCwKIAkJLnJlbW92ZSA9IGFjcGlfZWNfcmVtb3ZlLAotCQkuc3VzcGVuZCA9IGFjcGlfZWNfc3VzcGVuZCwKLQkJLnJlc3VtZSA9IGFjcGlfZWNfcmVzdW1lLAogCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDc4NDE4Y2UuLmYxNGQzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTE5MSwzNiArMTkxLDExIEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgdm9pZCBiaW5kX3RvX2NwdTAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YoMCkpOwotCWtmcmVlKHdvcmspOwotfQotCi1zdGF0aWMgdm9pZCBiaW5kX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCi17Ci0Jc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOwotCi0Jd29yayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3b3JrX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCUlOSVRfV09SSyh3b3JrLCBiaW5kX3RvX2NwdTApOwotCXF1ZXVlX3dvcmsod3EsIHdvcmspOwotfQotCiBhY3BpX3N0YXR1cyBhY3BpX29zX2luaXRpYWxpemUxKHZvaWQpCiB7Ci0JLyoKLQkgKiBPbiBzb21lIG1hY2hpbmVzLCBhIHNvZnR3YXJlLWluaXRpYXRlZCBTTUkgY2F1c2VzIGNvcnJ1cHRpb24gdW5sZXNzCi0JICogdGhlIFNNSSBydW5zIG9uIENQVSAwLiAgQW4gU01JIGNhbiBiZSBpbml0aWF0ZWQgYnkgYW55IEFNTCwgYnV0Ci0JICogdHlwaWNhbGx5IGl0J3MgZG9uZSBpbiBHUEUtcmVsYXRlZCBtZXRob2RzIHRoYXQgYXJlIHJ1biB2aWEKLQkgKiB3b3JrcXVldWVzLCBzbyB3ZSBjYW4gYXZvaWQgdGhlIGtub3duIGNvcnJ1cHRpb24gY2FzZXMgYnkgYmluZGluZwotCSAqIHRoZSB3b3JrcXVldWVzIHRvIENQVSAwLgotCSAqLwotCWthY3BpZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrYWNwaWQiKTsKLQliaW5kX3dvcmtxdWV1ZShrYWNwaWRfd3EpOwotCWthY3BpX25vdGlmeV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrYWNwaV9ub3RpZnkiKTsKLQliaW5kX3dvcmtxdWV1ZShrYWNwaV9ub3RpZnlfd3EpOwotCWthY3BpX2hvdHBsdWdfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia2FjcGlfaG90cGx1ZyIpOwotCWJpbmRfd29ya3F1ZXVlKGthY3BpX2hvdHBsdWdfd3EpOworCWthY3BpZF93cSA9IGNyZWF0ZV93b3JrcXVldWUoImthY3BpZCIpOworCWthY3BpX25vdGlmeV93cSA9IGNyZWF0ZV93b3JrcXVldWUoImthY3BpX25vdGlmeSIpOworCWthY3BpX2hvdHBsdWdfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJrYWNwaV9ob3RwbHVnIik7CiAJQlVHX09OKCFrYWNwaWRfd3EpOwogCUJVR19PTigha2FjcGlfbm90aWZ5X3dxKTsKIAlCVUdfT04oIWthY3BpX2hvdHBsdWdfd3EpOwpAQCAtNzY2LDcgKzc0MSwxNCBAQAogCWVsc2UKIAkJSU5JVF9XT1JLKCZkcGMtPndvcmssIGFjcGlfb3NfZXhlY3V0ZV9kZWZlcnJlZCk7CiAKLQlyZXQgPSBxdWV1ZV93b3JrKHF1ZXVlLCAmZHBjLT53b3JrKTsKKwkvKgorCSAqIE9uIHNvbWUgbWFjaGluZXMsIGEgc29mdHdhcmUtaW5pdGlhdGVkIFNNSSBjYXVzZXMgY29ycnVwdGlvbiB1bmxlc3MKKwkgKiB0aGUgU01JIHJ1bnMgb24gQ1BVIDAuICBBbiBTTUkgY2FuIGJlIGluaXRpYXRlZCBieSBhbnkgQU1MLCBidXQKKwkgKiB0eXBpY2FsbHkgaXQncyBkb25lIGluIEdQRS1yZWxhdGVkIG1ldGhvZHMgdGhhdCBhcmUgcnVuIHZpYQorCSAqIHdvcmtxdWV1ZXMsIHNvIHdlIGNhbiBhdm9pZCB0aGUga25vd24gY29ycnVwdGlvbiBjYXNlcyBieSBhbHdheXMKKwkgKiBxdWV1ZWluZyBvbiBDUFUgMC4KKwkgKi8KKwlyZXQgPSBxdWV1ZV93b3JrX29uKDAsIHF1ZXVlLCAmZHBjLT53b3JrKTsKIAogCWlmICghcmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVgKQEAgLTEwNjQsMjYgKzEwNDYsNiBAQAogCiBfX3NldHVwKCJhY3BpX3NlcmlhbGl6ZSIsIGFjcGlfc2VyaWFsaXplX3NldHVwKTsKIAotLyoKLSAqIFdha2UgYW5kIFJ1bi1UaW1lIEdQRVMgYXJlIGV4cGVjdGVkIHRvIGJlIHNlcGFyYXRlLgotICogV2UgZGlzYWJsZSB3YWtlLUdQRXMgYXQgcnVuLXRpbWUgdG8gcHJldmVudCBzcHVyaW91cwotICogaW50ZXJydXB0cy4KLSAqCi0gKiBIb3dldmVyLCBpZiBhIHN5c3RlbSBleGlzdHMgdGhhdCBzaGFyZXMgV2FrZSBhbmQKLSAqIFJ1bi10aW1lIGV2ZW50cyBvbiB0aGUgc2FtZSBHUEUgdGhpcyBmbGFnIGlzIGF2YWlsYWJsZQotICogdG8gdGVsbCBMaW51eCB0byBrZWVwIHRoZSB3YWtlLXRpbWUgR1BFcyBlbmFibGVkIGF0IHJ1bi10aW1lLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3dha2VfZ3Blc19hbHdheXNfb25fc2V0dXAoY2hhciAqc3RyKQotewotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJ3YWtlIEdQRXMgbm90IGRpc2FibGVkXG4iKTsKLQotCWFjcGlfZ2JsX2xlYXZlX3dha2VfZ3Blc19kaXNhYmxlZCA9IEZBTFNFOwotCi0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImFjcGlfd2FrZV9ncGVzX2Fsd2F5c19vbiIsIGFjcGlfd2FrZV9ncGVzX2Fsd2F5c19vbl9zZXR1cCk7Ci0KIC8qIENoZWNrIG9mIHJlc291cmNlIGludGVyZmVyZW5jZSBiZXR3ZWVuIG5hdGl2ZSBkcml2ZXJzIGFuZCBBQ1BJCiAgKiBPcGVyYXRpb25SZWdpb25zIChTeXN0ZW1JTyBhbmQgU3lzdGVtIE1lbW9yeSBvbmx5KS4KICAqIElPIHBvcnRzIGFuZCBtZW1vcnkgZGVjbGFyZWQgaW4gQUNQSSBtaWdodCBiZSB1c2VkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA0ZWFjNTkzLi4xZjY3MDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CkBAIC01NDMsNiArNTQ0LDE0IEBACiAJaWYgKGZsYWdzICE9IGJhc2VfZmxhZ3MpCiAJCWFjcGlfcGNpX29zY19zdXBwb3J0KHJvb3QsIGZsYWdzKTsKIAorCXN0YXR1cyA9IGFjcGlfcGNpX29zY19jb250cm9sX3NldChyb290LT5kZXZpY2UtPmhhbmRsZSwKKwkJCQkJICBPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJVbmFibGUgdG8gYXNzdW1lIFBDSWUgY29udHJvbDogRGlzYWJsaW5nIEFTUE1cbiIpOworCQlwY2llX25vX2FzcG0oKTsKKwl9CisKIAlwY2lfYWNwaV9hZGRfYnVzX3BtX25vdGlmaWVyKGRldmljZSwgcm9vdC0+YnVzKTsKIAlpZiAoZGV2aWNlLT53YWtldXAuZmxhZ3MucnVuX3dha2UpCiAJCWRldmljZV9zZXRfcnVuX3dha2Uocm9vdC0+YnVzLT5icmlkZ2UsIHRydWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCBlOWE4MDI2Li5iNGMyZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJaWYgKGNwdV9oYXMoJmNwdV9kYXRhKHByLT5pZCksIFg4Nl9GRUFUVVJFX0FSQVQpKQogCQlyZXR1cm47CiAKLQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FNREMxRSkpCisJaWYgKGMxZV9kZXRlY3RlZCkKIAkJdHlwZSA9IEFDUElfU1RBVEVfQzE7CiAKIAkvKgpAQCAtMjY0LDcgKzI2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2KQorI2lmIGRlZmluZWQoQ09ORklHX1g4NikKIHN0YXRpYyB2b2lkIHRzY19jaGVja19zdGF0ZShpbnQgc3RhdGUpCiB7CiAJc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IDdmMmUwNTEuLmIyMzgyNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtNzQwLDYgKzc0MCw4IEBACiAJCWRldmljZS0+d2FrZXVwLnJlc291cmNlcy5oYW5kbGVzW2ldID0gZWxlbWVudC0+cmVmZXJlbmNlLmhhbmRsZTsKIAl9CiAKKwlhY3BpX2dwZV9jYW5fd2FrZShkZXZpY2UtPndha2V1cC5ncGVfZGV2aWNlLCBkZXZpY2UtPndha2V1cC5ncGVfbnVtYmVyKTsKKwogCXJldHVybiBBRV9PSzsKIH0KIApAQCAtNzY0LDggKzc2Niw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlzdGF0dXMgPSBhY3BpX2dldF9ncGVfc3RhdHVzKE5VTEwsIGRldmljZS0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCSZldmVudF9zdGF0dXMpOworCXN0YXR1cyA9IGFjcGlfZ2V0X2dwZV9zdGF0dXMoZGV2aWNlLT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJZGV2aWNlLT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkJCSZldmVudF9zdGF0dXMpOwogCWlmIChzdGF0dXMgPT0gQUVfT0spCiAJCWRldmljZS0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlID0KIAkJCQkhIShldmVudF9zdGF0dXMgJiBBQ1BJX0VWRU5UX0ZMQUdfSEFORExFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggMjg2MmM3OC4uZTE0MzIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTY2MywxOCArNjYzLDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKGVuYWJsZSkgewotCQllcnJvciA9IGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoYWRldiwKLQkJCQkJCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlKTsKLQkJaWYgKCFlcnJvcikKLQkJCWFjcGlfZW5hYmxlX2dwZShhZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJYWRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCUFDUElfR1BFX1RZUEVfV0FLRSk7Ci0JfSBlbHNlIHsKLQkJYWNwaV9kaXNhYmxlX2dwZShhZGV2LT53YWtldXAuZ3BlX2RldmljZSwgYWRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKLQkJZXJyb3IgPSBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihhZGV2KTsKLQl9CisJZXJyb3IgPSBlbmFibGUgPworCQlhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYsIGFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlKSA6CisJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGFkZXYpOwogCWlmICghZXJyb3IpCiAJCWRldl9pbmZvKGRldiwgIndha2UtdXAgY2FwYWJpbGl0eSAlcyBieSBBQ1BJXG4iLAogCQkJCWVuYWJsZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IGY4ZGI1MGEuLjU5ODFiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTM4OCwxMiArMzg4LDEwIEBACiAJaWYgKGluZGV4IDwgbnVtX2dwZXMpIHsKIAkJaWYgKCFzdHJjbXAoYnVmLCAiZGlzYWJsZVxuIikgJiYKIAkJCQkoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9kaXNhYmxlX2dwZShoYW5kbGUsIGluZGV4LAotCQkJCQkJQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCXJlc3VsdCA9IGFjcGlfZGlzYWJsZV9ncGUoaGFuZGxlLCBpbmRleCk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZW5hYmxlXG4iKSAmJgogCQkJCSEoc3RhdHVzICYgQUNQSV9FVkVOVF9GTEFHX0VOQUJMRUQpKQotCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgsCi0JCQkJCQlBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOworCQkJcmVzdWx0ID0gYWNwaV9lbmFibGVfZ3BlKGhhbmRsZSwgaW5kZXgpOwogCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgImNsZWFyXG4iKSAmJgogCQkJCShzdGF0dXMgJiBBQ1BJX0VWRU5UX0ZMQUdfU0VUKSkKIAkJCXJlc3VsdCA9IGFjcGlfY2xlYXJfZ3BlKGhhbmRsZSwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IDM4ODc0N2EuLmM4MDUzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTY0LDEzICs2NCwxNCBAQAogCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9CiAJCQljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGFjcGlfZGV2aWNlLCB3YWtldXBfbGlzdCk7CiAKLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCB8fCAhZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZAorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkCisJCSAgICB8fCAhKGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgfHwgZGV2LT53YWtldXAucHJlcGFyZV9jb3VudCkKIAkJICAgIHx8IHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpCiAJCQljb250aW51ZTsKIAogCQkvKiBUaGUgd2FrZS11cCBwb3dlciBzaG91bGQgaGF2ZSBiZWVuIGVuYWJsZWQgYWxyZWFkeS4gKi8KLQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJQUNQSV9HUEVfVFlQRV9XQUtFKTsKKwkJYWNwaV9ncGVfd2FrZXVwKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJQUNQSV9HUEVfRU5BQkxFKTsKIAl9CiB9CiAKQEAgLTg5LDEzICs5MCwxNiBAQAogCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9CiAJCQljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGFjcGlfZGV2aWNlLCB3YWtldXBfbGlzdCk7CiAKLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCB8fCAhZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZAorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnZhbGlkCisJCSAgICB8fCAhKGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgfHwgZGV2LT53YWtldXAucHJlcGFyZV9jb3VudCkKIAkJICAgIHx8IChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWFjcGlfZGlzYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQlBQ1BJX0dQRV9UWVBFX1dBS0UpOwotCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOworCQlhY3BpX2dwZV93YWtldXAoZGV2LT53YWtldXAuZ3BlX2RldmljZSwgZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQlBQ1BJX0dQRV9ESVNBQkxFKTsKKworCQlpZiAoZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCkKKwkJCWFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKGRldik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9LY29uZmlnIGIvZHJpdmVycy9hdGEvS2NvbmZpZwppbmRleCBhYTg1YTk4Li42NWUzZTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAgLTE4Nyw2ICsxODcsMTUgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFNBVEFfRFdDCisJdHJpc3RhdGUgIkRlc2lnbldhcmUgQ29yZXMgU0FUQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gNDYwRVgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIFNBVEEgY29udHJvbGxlciBvZiB0aGUKKwkgIEFwcGxpZWRNaWNybyBwcm9jZXNzb3IgNDYwRVguCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBTQVRBX01WCiAJdHJpc3RhdGUgIk1hcnZlbGwgU0FUQSBzdXBwb3J0IgogCWhlbHAKQEAgLTY0Miw2ICs2NTEsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFBBVEFfUFhBCisJdHJpc3RhdGUgIlBYQSBETUEtY2FwYWJsZSBQQVRBIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX1BYQQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgaGFyZGRyaXZlIGF0dGFjaGVkIHRvIFBYQSBDUFUncyBidXMuCisKKwkgIE5PVEU6IFRoaXMgZHJpdmVyIHV0aWxpemVzIFBYQSBETUEgY29udHJvbGxlciwgaW4gY2FzZSB5b3VyIGhhcmR3YXJlCisJICAgICAgICBpcyBub3QgY2FwYWJsZSBvZiBkb2luZyBNV0RNQSwgdXNlIHBhdGFfcGxhdGZvcm0gaW5zdGVhZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFBBVEFfV0lOQk9ORAogCXRyaXN0YXRlICJXaW5ib25kIFNMODJDMTA1IFBBVEEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtNzk2LDYgKzgxNiwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgUEFUQV9TQU1TVU5HX0NGCisJdHJpc3RhdGUgIlNhbXN1bmcgU29DIFBBVEEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNBTVNVTkdfREVWX0lERQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYmFzaWMgc3VwcG9ydCBmb3IgU2Ftc3VuZydzIFMzQy9TNVAgYm9hcmQKKwkgIFBBVEEgY29udHJvbGxlcnMgdmlhIHRoZSBuZXcgQVRBIGxheWVyCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBQQVRBX1dJTkJPTkRfVkxCCiAJdHJpc3RhdGUgIldpbmJvbmQgVzgzNzU5QSBWTEIgUEFUQSBzdXBwb3J0IChFeHBlcmltZW50YWwpIgogCWRlcGVuZHMgb24gSVNBICYmIEVYUEVSSU1FTlRBTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvTWFrZWZpbGUgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQppbmRleCA3ZWY4OWQ3Li4xNThlYWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2F0YS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19TQVRBX0ZTTCkJCSs9IHNhdGFfZnNsLm8KIG9iai0kKENPTkZJR19TQVRBX0lOSUMxNjJYKQkrPSBzYXRhX2luaWMxNjJ4Lm8KIG9iai0kKENPTkZJR19TQVRBX1NJTDI0KQkrPSBzYXRhX3NpbDI0Lm8KK29iai0kKENPTkZJR19TQVRBX0RXQykJCSs9IHNhdGFfZHdjXzQ2MGV4Lm8KIAogIyBTRkYgdy8gY3VzdG9tIERNQQogb2JqLSQoQ09ORklHX1BEQ19BRE1BKQkJKz0gcGRjX2FkbWEubwpAQCAtODcsOCArODgsMTEgQEAKIG9iai0kKENPTkZJR19QQVRBX1FESSkJCSs9IHBhdGFfcWRpLm8KIG9iai0kKENPTkZJR19QQVRBX1JCNTMyKQkrPSBwYXRhX3JiNTMyX2NmLm8KIG9iai0kKENPTkZJR19QQVRBX1JaMTAwMCkJKz0gcGF0YV9yejEwMDAubworb2JqLSQoQ09ORklHX1BBVEFfU0FNU1VOR19DRikJKz0gcGF0YV9zYW1zdW5nX2NmLm8KIG9iai0kKENPTkZJR19QQVRBX1dJTkJPTkRfVkxCKQkrPSBwYXRhX3dpbmJvbmQubwogCitvYmotJChDT05GSUdfUEFUQV9QWEEpCQkrPSBwYXRhX3B4YS5vCisKICMgU2hvdWxkIGJlIGxhc3QgYnV0IHR3byBsaWJhdGEgZHJpdmVyCiBvYmotJChDT05GSUdfUEFUQV9BQ1BJKQkJKz0gcGF0YV9hY3BpLm8KICMgU2hvdWxkIGJlIGxhc3QgYnV0IG9uZSBsaWJhdGEgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggZjI1MjI1My4uZmU3NWQ4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIAogCVZQUklOVEsoIkVOVEVSXG4iKTsKIAotCVdBUk5fT04oQVRBX01BWF9RVUVVRSA+IEFIQ0lfTUFYX0NNRFMpOworCVdBUk5fT04oKGludClBVEFfTUFYX1FVRVVFID4gQUhDSV9NQVhfQ01EUyk7CiAKIAlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJ2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKaW5kZXggNWUxMWIxNi4uNGU5N2YzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwpAQCAtNTQsMTkgKzU0LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewotCQlyYyA9IHBkYXRhLT5pbml0KGRldik7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQl9Ci0KIAlpZiAocGRhdGEgJiYgcGRhdGEtPmF0YV9wb3J0X2luZm8pCiAJCXBpID0gKnBkYXRhLT5hdGFfcG9ydF9pbmZvOwogCiAJaHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFocHJpdikgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyMDsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBhbGxvYyBhaGNpX2hvc3RfcHJpdlxuIik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWhwcml2LT5mbGFncyB8PSAodW5zaWduZWQgbG9uZylwaS5wcml2YXRlX2RhdGE7CkBAIC03NCw4ICs2OCwxOSBAQAogCWhwcml2LT5tbWlvID0gZGV2bV9pb3JlbWFwKGRldiwgbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlpZiAoIWhwcml2LT5tbWlvKSB7CiAJCWRldl9lcnIoZGV2LCAiY2FuJ3QgbWFwICVwUlxuIiwgbWVtKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIGVycjA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogU29tZSBwbGF0Zm9ybXMgbWlnaHQgbmVlZCB0byBwcmVwYXJlIGZvciBtbWlvIHJlZ2lvbiBhY2Nlc3MsCisJICogd2hpY2ggY291bGQgYmUgZG9uZSBpbiB0aGUgZm9sbG93aW5nIGluaXQgY2FsbC4gU28sIHRoZSBtbWlvCisJICogcmVnaW9uIHNob3VsZG4ndCBiZSBhY2Nlc3NlZCBiZWZvcmUgaW5pdCAoaWYgcHJvdmlkZWQpIGhhcworCSAqIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KKwkgKi8KKwlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKKwkJcmMgPSBwZGF0YS0+aW5pdChkZXYsIGhwcml2LT5tbWlvKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOwogCX0KIAogCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyhkZXYsIGhwcml2LApAQCAtMTY2LDcgKzE3MSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFoY2lfZHJpdmVyID0gewotCS5wcm9iZSA9IGFoY2lfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGFoY2lfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJhaGNpIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCmluZGV4IDcxMDdhNjkuLmNjNWY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtNTQsNyArNTQsNiBAQAogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CiAJaW50IGRtYV9lbmFibGVkID0gMDsKIAlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBBVEFfR0VOX0ZPUkNFX0RNQSkgewogCQlkbWFfZW5hYmxlZCA9IDB4ZmY7CkBAIC02Myw5ICs2Miw2IEBACiAJCWRtYV9lbmFibGVkID0gaW9yZWFkOChhcC0+aW9hZGRyLmJtZG1hX2FkZHIgKyBBVEFfRE1BX1NUQVRVUyk7CiAJfQogCi0JaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NFTkFURUspCi0JCWRtYV9lbmFibGVkID0gMHhGRjsKLQogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCS8qIFdlIGRvbid0IHJlYWxseSBjYXJlICovCiAJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggNzQwOWY5OC4uMzk3MWJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC0xNTgsNiArMTU4LDcgQEAKIHN0cnVjdCBwaWl4X2hvc3RfcHJpdiB7CiAJY29uc3QgaW50ICptYXA7CiAJdTMyIHNhdmVkX2lvY2ZnOworCXNwaW5sb2NrX3Qgc2lkcHJfbG9jazsJLyogRklYTUU6IHJlbW92ZSBvbmNlIGxvY2tpbmcgaW4gRUggaXMgZml4ZWQgKi8KIAl2b2lkIF9faW9tZW0gKnNpZHByOwogfTsKIApAQCAtOTUxLDEyICs5NTIsMTUgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1MzIgKnZhbCkKIHsKIAlzdHJ1Y3QgcGlpeF9ob3N0X3ByaXYgKmhwcml2ID0gbGluay0+YXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHJlZyA+PSBBUlJBWV9TSVpFKHBpaXhfc2lkeF9tYXApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZocHJpdi0+c2lkcHJfbG9jaywgZmxhZ3MpOwogCXBpaXhfc2lkcHJfc2VsKGxpbmssIHJlZyk7CiAJKnZhbCA9IGlvcmVhZDMyKGhwcml2LT5zaWRwciArIFBJSVhfU0lEUFJfREFUQSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHByaXYtPnNpZHByX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY0LDEyICs5NjgsMTUgQEAKIAkJCQl1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKQogewogCXN0cnVjdCBwaWl4X2hvc3RfcHJpdiAqaHByaXYgPSBsaW5rLT5hcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocmVnID49IEFSUkFZX1NJWkUocGlpeF9zaWR4X21hcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwcml2LT5zaWRwcl9sb2NrLCBmbGFncyk7CiAJcGlpeF9zaWRwcl9zZWwobGluaywgcmVnKTsKIAlpb3dyaXRlMzIodmFsLCBocHJpdi0+c2lkcHIgKyBQSUlYX1NJRFBSX0RBVEEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwcml2LT5zaWRwcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NjYsNiArMTU3Myw3IEBACiAJaHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhwcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFocHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CisJc3Bpbl9sb2NrX2luaXQoJmhwcml2LT5zaWRwcl9sb2NrKTsKIAogCS8qIFNhdmUgSU9DRkcsIHRoaXMgd2lsbCBiZSB1c2VkIGZvciBjYWJsZSBkZXRlY3Rpb24sIHF1aXJrCiAJICogZGV0ZWN0aW9uIGFuZCByZXN0b3JhdGlvbiBvbiBkZXRhY2guICBUaGlzIGlzIG5lY2Vzc2FyeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggZGRmOGU0OC4uN2VmN2M0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC05OCw4ICs5OCw2IEBACiAKIHVuc2lnbmVkIGludCBhdGFfcHJpbnRfaWQgPSAxOwogCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXRhX2F1eF93cTsKLQogc3RydWN0IGF0YV9mb3JjZV9wYXJhbSB7CiAJY29uc3QgY2hhcgkqbmFtZTsKIAl1bnNpZ25lZCBpbnQJY2JsOwpAQCAtNDE2NywxNSArNDE2NSwxMyBAQAogCXsgIldEQyBBQzIzMjAwTCIsCSIyMS4xME4yMSIsCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiQ29tcGFxIENSRC04MjQxQiIsIAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJDUkQtODQwMEIiLAkJTlVMTCwgCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAotCXsgIkNSRC04NDgwQiIsCQlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKLQl7ICJDUkQtODQ4MkIiLAkJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCisJeyAiQ1JELTg0OFswMl1CIiwJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiQ1JELTg0IiwJCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIlNhbkRpc2sgU0RQM0IiLAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJTYW5EaXNrIFNEUDNCLTY0IiwJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCiAJeyAiU0FOWU8gQ0QtUk9NIENSRCIsCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIkhJVEFDSEkgQ0RSLTgiLAlOVUxMLAkJQVRBX0hPUktBR0VfTk9ETUEgfSwKLQl7ICJISVRBQ0hJIENEUi04MzM1IiwJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCi0JeyAiSElUQUNISSBDRFItODQzNSIsCU5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAorCXsgIkhJVEFDSEkgQ0RSLThbMzRdMzUiLE5VTEwsCQlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIlRvc2hpYmEgQ0QtUk9NIFhNLTYyMDJCIiwgTlVMTCwJQVRBX0hPUktBR0VfTk9ETUEgfSwKIAl7ICJUT1NISUJBIENELVJPTSBYTS0xNzAyQkMiLCBOVUxMLAlBVEFfSE9SS0FHRV9OT0RNQSB9LAogCXsgIkNELTUzMkUtQSIsIAkJTlVMTCwJCUFUQV9IT1JLQUdFX05PRE1BIH0sCkBAIC00MjExLDcwICs0MjA3LDE2IEBACiAJeyAiT0NaIENPUkVfU1NEIiwJIjAyLjEwMTA0IiwJQVRBX0hPUktBR0VfTk9OQ1EgfSwKIAogCS8qIFNlYWdhdGUgTkNRICsgRkxVU0ggQ0FDSEUgZmlybXdhcmUgYnVnICovCi0JeyAiU1QzMTUwMDM0MUFTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzE1MDAzNDFBUyIsCSJTRDE2IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMxNTAwMzQxQVMiLAkiU0QxNyIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMTUwMDM0MUFTIiwJIlNEMTgiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzE1MDAzNDFBUyIsCSJTRDE5IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKKwl7ICJTVDMxNTAwMzQxQVMiLAkiU0QxWzUtOV0iLAlBVEFfSE9SS0FHRV9OT05DUSB8CiAJCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCiAKLQl7ICJTVDMxMDAwMzMzQVMiLAkiU0QxNSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMTAwMDMzM0FTIiwJIlNEMTYiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzEwMDAzMzNBUyIsCSJTRDE3IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMxMDAwMzMzQVMiLAkiU0QxOCIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzMTAwMDMzM0FTIiwJIlNEMTkiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAorCXsgIlNUMzEwMDAzMzNBUyIsCSJTRDFbNS05XSIsCUFUQV9IT1JLQUdFX05PTkNRIHwKIAkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKIAotCXsgIlNUMzY0MDYyM0FTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDYyM0FTIiwJIlNEMTYiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDYyM0FTIiwJIlNEMTciLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDYyM0FTIiwJIlNEMTgiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzY0MDYyM0FTIiwJIlNEMTkiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAorCXsgIlNUMzY0MFszNl0yM0FTIiwJIlNEMVs1LTldIiwJQVRBX0hPUktBR0VfTk9OQ1EgfAogCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAogCi0JeyAiU1QzNjQwMzIzQVMiLAkiU0QxNSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzNjQwMzIzQVMiLAkiU0QxNiIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzNjQwMzIzQVMiLAkiU0QxNyIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzNjQwMzIzQVMiLAkiU0QxOCIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0JeyAiU1QzNjQwMzIzQVMiLAkiU0QxOSIsCQlBVEFfSE9SS0FHRV9OT05DUSB8Ci0JCQkJCQlBVEFfSE9SS0FHRV9GSVJNV0FSRV9XQVJOIH0sCi0KLQl7ICJTVDMzMjA4MTNBUyIsCSJTRDE1IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA4MTNBUyIsCSJTRDE2IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA4MTNBUyIsCSJTRDE3IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA4MTNBUyIsCSJTRDE4IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQl7ICJTVDMzMjA4MTNBUyIsCSJTRDE5IiwJCUFUQV9IT1JLQUdFX05PTkNRIHwKLQkJCQkJCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gfSwKLQotCXsgIlNUMzMyMDYxM0FTIiwJIlNEMTUiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzMyMDYxM0FTIiwJIlNEMTYiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzMyMDYxM0FTIiwJIlNEMTciLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzMyMDYxM0FTIiwJIlNEMTgiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAotCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAotCXsgIlNUMzMyMDYxM0FTIiwJIlNEMTkiLAkJQVRBX0hPUktBR0VfTk9OQ1EgfAorCXsgIlNUMzMyMFs2OF0xM0FTIiwJIlNEMVs1LTldIiwJQVRBX0hPUktBR0VfTk9OQ1EgfAogCQkJCQkJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiB9LAogCiAJLyogQmxhY2tsaXN0IGVudHJpZXMgdGFrZW4gZnJvbSBTaWxpY29uIEltYWdlIDMxMjQvMzEzMgpAQCAtNDMwMywxMiArNDI0NSw3IEBACiAJLyogRGV2aWNlcyB3aGljaCBnZXQgdGhlIElWQiB3cm9uZyAqLwogCXsgIlFVQU5UVU0gRklSRUJBTExsY3QxMCAwNSIsICJBMDMuMDkwMCIsIEFUQV9IT1JLQUdFX0lWQiwgfSwKIAkvKiBNYXliZSB3ZSBzaG91bGQganVzdCBibGFja2xpc3QgVFNTVGNvcnAuLi4gKi8KLQl7ICJUU1NUY29ycCBDRERWRFcgU0gtUzIwMkgiLCAiU0IwMCIsCSAgQVRBX0hPUktBR0VfSVZCLCB9LAotCXsgIlRTU1Rjb3JwIENERFZEVyBTSC1TMjAySCIsICJTQjAxIiwJICBBVEFfSE9SS0FHRV9JVkIsIH0sCi0JeyAiVFNTVGNvcnAgQ0REVkRXIFNILVMyMDJKIiwgIlNCMDAiLAkgIEFUQV9IT1JLQUdFX0lWQiwgfSwKLQl7ICJUU1NUY29ycCBDRERWRFcgU0gtUzIwMkoiLCAiU0IwMSIsCSAgQVRBX0hPUktBR0VfSVZCLCB9LAotCXsgIlRTU1Rjb3JwIENERFZEVyBTSC1TMjAyTiIsICJTQjAwIiwJICBBVEFfSE9SS0FHRV9JVkIsIH0sCi0JeyAiVFNTVGNvcnAgQ0REVkRXIFNILVMyMDJOIiwgIlNCMDEiLAkgIEFUQV9IT1JLQUdFX0lWQiwgfSwKKwl7ICJUU1NUY29ycCBDRERWRFcgU0gtUzIwMltISk5dIiwgIlNCMFswMV0iLCAgQVRBX0hPUktBR0VfSVZCLCB9LAogCiAJLyogRGV2aWNlcyB0aGF0IGRvIG5vdCBuZWVkIGJyaWRnaW5nIGxpbWl0cyBhcHBsaWVkICovCiAJeyAiTVRST04gTVNQLVNBVEEqIiwJCU5VTEwsCUFUQV9IT1JLQUdFX0JSSURHRV9PSywgfSwKQEAgLTQzMjYsMjkgKzQyNjMsNzMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBpbnQgc3Rybl9wYXR0ZXJuX2NtcChjb25zdCBjaGFyICpwYXR0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgd2lsZGNoYXIpCisvKioKKyAqCWdsb2JfbWF0Y2ggLSBtYXRjaCBhIHRleHQgc3RyaW5nIGFnYWluc3QgYSBnbG9iLXN0eWxlIHBhdHRlcm4KKyAqCUB0ZXh0OiB0aGUgc3RyaW5nIHRvIGJlIGV4YW1pbmVkCisgKglAcGF0dGVybjogdGhlIGdsb2Itc3R5bGUgcGF0dGVybiB0byBiZSBtYXRjaGVkIGFnYWluc3QKKyAqCisgKglFaXRoZXIvYm90aCBvZiB0ZXh0IGFuZCBwYXR0ZXJuIGNhbiBiZSBlbXB0eSBzdHJpbmdzLgorICoKKyAqCU1hdGNoIHRleHQgYWdhaW5zdCBhIGdsb2Itc3R5bGUgcGF0dGVybiwgd2l0aCB3aWxkY2FyZHMgYW5kIHNpbXBsZSBzZXRzOgorICoKKyAqCQk/CW1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIuCisgKgkJKgltYXRjaGVzIGFueSBydW4gb2YgY2hhcmFjdGVycy4KKyAqCQlbeHl6XQltYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIHRoZSBzZXQ6IHgsIHksIG9yIHouCisgKgkJW2EtZF0JbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSB0aGUgcmFuZ2U6IGEsIGIsIGMsIG9yIGQuCisgKgkJW2EtZDAtOV0gbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBlaXRoZXIgcmFuZ2UuCisgKgorICoJVGhlIHNwZWNpYWwgY2hhcmFjdGVycyA/LCBbLCAtLCBvciAqLCBjYW4gYmUgbWF0Y2hlZCB1c2luZyBhIHNldCwgZWcuIFsqXQorICoJQmVoYXZpb3VyIHdpdGggbWFsZm9ybWVkIHBhdHRlcm5zIGlzIHVuZGVmaW5lZCwgdGhvdWdoIGdlbmVyYWxseSByZWFzb25hYmxlLgorICoKKyAqCVNhbXBsZSBwYXR0ZXJuczogICJTRDE/IiwgICJTRDFbMC01XSIsICAiKlIwIiwgICJTRCoxP1swMTJdKnh4IgorICoKKyAqCVRoaXMgZnVuY3Rpb24gdXNlcyBvbmUgbGV2ZWwgb2YgcmVjdXJzaW9uIHBlciAnKicgaW4gcGF0dGVybi4KKyAqCVNpbmNlIGl0IGNhbGxzIF9ub3RoaW5nXyBlbHNlLCBhbmQgaGFzIF9ub18gZXhwbGljaXQgbG9jYWwgdmFyaWFibGVzLAorICoJdGhpcyB3aWxsIG5vdCBjYXVzZSBzdGFjayBwcm9ibGVtcyBmb3IgYW55IHJlYXNvbmFibGUgdXNlIGhlcmUuCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gbWF0Y2gsIDEgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGdsb2JfbWF0Y2ggKGNvbnN0IGNoYXIgKnRleHQsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCiB7Ci0JY29uc3QgY2hhciAqcDsKLQlpbnQgbGVuOworCWRvIHsKKwkJLyogTWF0Y2ggc2luZ2xlIGNoYXJhY3RlciBvciBhICc/JyB3aWxkY2FyZCAqLworCQlpZiAoKnRleHQgPT0gKnBhdHRlcm4gfHwgKnBhdHRlcm4gPT0gJz8nKSB7CisJCQlpZiAoISpwYXR0ZXJuKyspCisJCQkJcmV0dXJuIDA7ICAvKiBFbmQgb2YgYm90aCBzdHJpbmdzOiBtYXRjaCAqLworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc2luZ2xlIGNoYXIgYWdhaW5zdCBhICdbJyBicmFja2V0ZWQgJ10nIHBhdHRlcm4gc2V0ICovCisJCQlpZiAoISp0ZXh0IHx8ICpwYXR0ZXJuICE9ICdbJykKKwkJCQlicmVhazsgIC8qIE5vdCBhIHBhdHRlcm4gc2V0ICovCisJCQl3aGlsZSAoKisrcGF0dGVybiAmJiAqcGF0dGVybiAhPSAnXScgJiYgKnRleHQgIT0gKnBhdHRlcm4pIHsKKwkJCQlpZiAoKnBhdHRlcm4gPT0gJy0nICYmICoocGF0dGVybiAtIDEpICE9ICdbJykKKwkJCQkJaWYgKCp0ZXh0ID4gKihwYXR0ZXJuIC0gMSkgJiYgKnRleHQgPCAqKHBhdHRlcm4gKyAxKSkgeworCQkJCQkJKytwYXR0ZXJuOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCX0KKwkJCWlmICghKnBhdHRlcm4gfHwgKnBhdHRlcm4gPT0gJ10nKQorCQkJCXJldHVybiAxOyAgLyogTm8gbWF0Y2ggKi8KKwkJCXdoaWxlICgqcGF0dGVybiAmJiAqcGF0dGVybisrICE9ICddJyk7CisJCX0KKwl9IHdoaWxlICgqKyt0ZXh0ICYmICpwYXR0ZXJuKTsKIAotCS8qCi0JICogY2hlY2sgZm9yIHRyYWlsaW5nIHdpbGRjYXJkOiAqXDAKLQkgKi8KLQlwID0gc3RyY2hyKHBhdHQsIHdpbGRjaGFyKTsKLQlpZiAocCAmJiAoKCoocCArIDEpKSA9PSAwKSkKLQkJbGVuID0gcCAtIHBhdHQ7Ci0JZWxzZSB7Ci0JCWxlbiA9IHN0cmxlbihuYW1lKTsKLQkJaWYgKCFsZW4pIHsKLQkJCWlmICghKnBhdHQpCi0JCQkJcmV0dXJuIDA7Ci0JCQlyZXR1cm4gLTE7CisJLyogTWF0Y2ggYW55IHJ1biBvZiBjaGFycyBhZ2FpbnN0IGEgJyonIHdpbGRjYXJkICovCisJaWYgKCpwYXR0ZXJuID09ICcqJykgeworCQlpZiAoISorK3BhdHRlcm4pCisJCQlyZXR1cm4gMDsgIC8qIE1hdGNoOiBhdm9pZCByZWN1cnNpb24gYXQgZW5kIG9mIHBhdHRlcm4gKi8KKwkJLyogTG9vcCB0byBoYW5kbGUgYWRkaXRpb25hbCBwYXR0ZXJuIGNoYXJzIGFmdGVyIHRoZSB3aWxkY2FyZCAqLworCQl3aGlsZSAoKnRleHQpIHsKKwkJCWlmIChnbG9iX21hdGNoKHRleHQsIHBhdHRlcm4pID09IDApCisJCQkJcmV0dXJuIDA7ICAvKiBSZW1haW5kZXIgbWF0Y2hlZCAqLworCQkJKyt0ZXh0OyAgLyogQWJzb3JiIChtYXRjaCkgdGhpcyBjaGFyIGFuZCB0cnkgYWdhaW4gKi8KIAkJfQogCX0KLQotCXJldHVybiBzdHJuY21wKHBhdHQsIG5hbWUsIGxlbik7CisJaWYgKCEqdGV4dCAmJiAhKnBhdHRlcm4pCisJCXJldHVybiAwOyAgLyogRW5kIG9mIGJvdGggc3RyaW5nczogbWF0Y2ggKi8KKwlyZXR1cm4gMTsgIC8qIE5vIG1hdGNoICovCiB9Ci0KKyAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGF0YV9kZXZfYmxhY2tsaXN0ZWQoY29uc3Qgc3RydWN0IGF0YV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBjaGFyIG1vZGVsX251bVtBVEFfSURfUFJPRF9MRU4gKyAxXTsKQEAgLTQzNTksMTAgKzQzNDAsMTAgQEAKIAlhdGFfaWRfY19zdHJpbmcoZGV2LT5pZCwgbW9kZWxfcmV2LCBBVEFfSURfRldfUkVWLCBzaXplb2YobW9kZWxfcmV2KSk7CiAKIAl3aGlsZSAoYWQtPm1vZGVsX251bSkgewotCQlpZiAoIXN0cm5fcGF0dGVybl9jbXAoYWQtPm1vZGVsX251bSwgbW9kZWxfbnVtLCAnKicpKSB7CisJCWlmICghZ2xvYl9tYXRjaChtb2RlbF9udW0sIGFkLT5tb2RlbF9udW0pKSB7CiAJCQlpZiAoYWQtPm1vZGVsX3JldiA9PSBOVUxMKQogCQkJCXJldHVybiBhZC0+aG9ya2FnZTsKLQkJCWlmICghc3Rybl9wYXR0ZXJuX2NtcChhZC0+bW9kZWxfcmV2LCBtb2RlbF9yZXYsICcqJykpCisJCQlpZiAoIWdsb2JfbWF0Y2gobW9kZWxfcmV2LCBhZC0+bW9kZWxfcmV2KSkKIAkJCQlyZXR1cm4gYWQtPmhvcmthZ2U7CiAJCX0KIAkJYWQrKzsKQEAgLTU2MTEsNiArNTU5Miw3IEBACiAJYXAtPm1zZ19lbmFibGUgPSBBVEFfTVNHX0RSViB8IEFUQV9NU0dfRVJSIHwgQVRBX01TR19XQVJOOwogI2VuZGlmCiAKKwltdXRleF9pbml0KCZhcC0+c2NzaV9zY2FuX211dGV4KTsKIAlJTklUX0RFTEFZRURfV09SSygmYXAtPmhvdHBsdWdfdGFzaywgYXRhX3Njc2lfaG90cGx1Zyk7CiAJSU5JVF9XT1JLKCZhcC0+c2NzaV9yZXNjYW5fdGFzaywgYXRhX3Njc2lfZGV2X3Jlc2Nhbik7CiAJSU5JVF9MSVNUX0hFQUQoJmFwLT5laF9kb25lX3EpOwpAQCAtNjU0OSwyOSArNjUzMSwyMCBAQAogCiAJYXRhX3BhcnNlX2ZvcmNlX3BhcmFtKCk7CiAKLQlhdGFfYXV4X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImF0YV9hdXgiKTsKLQlpZiAoIWF0YV9hdXhfd3EpCi0JCWdvdG8gZmFpbDsKLQogCXJjID0gYXRhX3NmZl9pbml0KCk7Ci0JaWYgKHJjKQotCQlnb3RvIGZhaWw7CisJaWYgKHJjKSB7CisJCWtmcmVlKGF0YV9mb3JjZV90YmwpOworCQlyZXR1cm4gcmM7CisJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgImxpYmF0YSB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiBsb2FkZWQuXG4iKTsKIAlyZXR1cm4gMDsKLQotZmFpbDoKLQlrZnJlZShhdGFfZm9yY2VfdGJsKTsKLQlpZiAoYXRhX2F1eF93cSkKLQkJZGVzdHJveV93b3JrcXVldWUoYXRhX2F1eF93cSk7Ci0JcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRhX2V4aXQodm9pZCkKIHsKIAlhdGFfc2ZmX2V4aXQoKTsKIAlrZnJlZShhdGFfZm9yY2VfdGJsKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShhdGFfYXV4X3dxKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKGF0YV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZjc3YTY3My4uYzlhZTI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTcyNyw3ICs3MjcsNyBAQAogCWlmIChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0xPQURJTkcpCiAJCWFwLT5wZmxhZ3MgJj0gfkFUQV9QRkxBR19MT0FESU5HOwogCWVsc2UgaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfU0NTSV9IT1RQTFVHKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXRhX2F1eF93cSwgJmFwLT5ob3RwbHVnX3Rhc2ssIDApOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFwLT5ob3RwbHVnX3Rhc2ssIDApOwogCiAJaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfUkVDT1ZFUkVEKQogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgIkVIIGNvbXBsZXRlXG4iKTsKQEAgLTIyMTQsNiArMjIxNCw3IEBACiAJCXsgQVRBX0NNRF9TTUFSVCwJCSJTTUFSVCIgfSwKIAkJeyBBVEFfQ01EX01FRElBX0xPQ0ssCQkiRE9PUiBMT0NLIiB9LAogCQl7IEFUQV9DTURfTUVESUFfVU5MT0NLLAkJIkRPT1IgVU5MT0NLIiB9LAorCQl7IEFUQV9DTURfRFNNLAkJCSJEQVRBIFNFVCBNQU5BR0VNRU5UIiB9LAogCQl7IEFUQV9DTURfQ0hLX01FRF9DUkRfVFlQLCAJIkNIRUNLIE1FRElBIENBUkQgVFlQRSIgfSwKIAkJeyBBVEFfQ01EX0NGQV9SRVFfRVhUX0VSUiwgCSJDRkEgUkVRVUVTVCBFWFRFTkRFRCBFUlJPUiIgfSwKIAkJeyBBVEFfQ01EX0NGQV9XUklURV9ORSwJCSJDRkEgV1JJVEUgU0VDVE9SUyBXSVRIT1VUIEVSQVNFIiB9LApAQCAtMjk0NCw3ICsyOTQ1LDcgQEAKIAkJCWVoYy0+aS5mbGFncyB8PSBBVEFfRUhJX1NFVE1PREU7CiAKIAkJCS8qIHNjaGVkdWxlIHRoZSBzY3NpX3Jlc2Nhbl9kZXZpY2UoKSBoZXJlICovCi0JCQlxdWV1ZV93b3JrKGF0YV9hdXhfd3EsICYoYXAtPnNjc2lfcmVzY2FuX3Rhc2spKTsKKwkJCXNjaGVkdWxlX3dvcmsoJihhcC0+c2NzaV9yZXNjYW5fdGFzaykpOwogCQl9IGVsc2UgaWYgKGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9VTktOT1dOICYmCiAJCQkgICBlaGMtPnRyaWVzW2Rldi0+ZGV2bm9dICYmCiAJCQkgICBhdGFfY2xhc3NfZW5hYmxlZChlaGMtPmNsYXNzZXNbZGV2LT5kZXZub10pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCBhNTQyNzNkLi5hODkxNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTExMTEsMTAgKzExMTEsMTAgQEAKICAqLwogc3RhdGljIGludCBhdGFwaV9kcmFpbl9uZWVkZWQoc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChsaWtlbHkoIWJsa19wY19yZXF1ZXN0KHJxKSkpCisJaWYgKGxpa2VseShycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfQkxPQ0tfUEMpKQogCQlyZXR1cm4gMDsKIAotCWlmICghYmxrX3JxX2J5dGVzKHJxKSB8fCAocnEtPmNtZF9mbGFncyAmIFJFUV9SVykpCisJaWYgKCFibGtfcnFfYnl0ZXMocnEpIHx8IChycS0+Y21kX2ZsYWdzICYgUkVRX1dSSVRFKSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gYXRhcGlfY21kX3R5cGUocnEtPmNtZFswXSkgPT0gQVRBUElfTUlTQzsKQEAgLTM0MzUsNyArMzQzNSw3IEBACiAJCQkJIiAgICAgICAgICAgICAgICAgIHN3aXRjaGluZyB0byBhc3luY1xuIik7CiAJfQogCi0JcXVldWVfZGVsYXllZF93b3JrKGF0YV9hdXhfd3EsICZhcC0+aG90cGx1Z190YXNrLAorCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fbG9uZ193cSwgJmFwLT5ob3RwbHVnX3Rhc2ssCiAJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaKSk7CiB9CiAKQEAgLTM1ODIsNiArMzU4Miw3IEBACiAJfQogCiAJRFBSSU5USygiRU5URVJcbiIpOworCW11dGV4X2xvY2soJmFwLT5zY3NpX3NjYW5fbXV0ZXgpOwogCiAJLyogVW5wbHVnIGRldGFjaGVkIGRldmljZXMuICBXZSBjYW5ub3QgdXNlIGxpbmsgaXRlcmF0b3IgaGVyZQogCSAqIGJlY2F1c2UgUE1QIGxpbmtzIGhhdmUgdG8gYmUgc2Nhbm5lZCBldmVuIGlmIFBNUCBpcwpAQCAtMzU5NSw2ICszNTk2LDcgQEAKIAkvKiBzY2FuIGZvciBuZXcgb25lcyAqLwogCWF0YV9zY3NpX3NjYW5faG9zdChhcCwgMCk7CiAKKwltdXRleF91bmxvY2soJmFwLT5zY3NpX3NjYW5fbXV0ZXgpOwogCURQUklOVEsoIkVYSVRcbiIpOwogfQogCkBAIC0zNjczLDkgKzM2NzUsNyBAQAogICoJQHdvcms6IFBvaW50ZXIgdG8gQVRBIHBvcnQgdG8gcGVyZm9ybSBzY3NpX3Jlc2Nhbl9kZXZpY2UoKQogICoKICAqCUFmdGVyIEFUQSBwYXNzIHRocnUgKFNBVCkgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwKLSAqCWxpYmF0YSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlcyB0byBTQ1NJIGxheWVyLiAgVGhpcwotICoJZnVuY3Rpb24gbXVzdCBiZSBleGVjdXRlZCBmcm9tIGF0YV9hdXhfd3Egc3VjaCB0aGF0IHNkZXYKLSAqCWF0dGFjaC9kZXRhY2ggZG9uJ3QgcmFjZSB3aXRoIHJlc2Nhbi4KKyAqCWxpYmF0YSBuZWVkIHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlcyB0byBTQ1NJIGxheWVyLgogICoKICAqCUxPQ0tJTkc6CiAgKglLZXJuZWwgdGhyZWFkIGNvbnRleHQgKG1heSBzbGVlcCkuCkBAIC0zNjg4LDYgKzM2ODgsNyBAQAogCXN0cnVjdCBhdGFfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCW11dGV4X2xvY2soJmFwLT5zY3NpX3NjYW5fbXV0ZXgpOwogCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CiAKIAlhdGFfZm9yX2VhY2hfbGluayhsaW5rLCBhcCwgRURHRSkgewpAQCAtMzcwNyw2ICszNzA4LDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZhcC0+c2NzaV9zY2FuX211dGV4KTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZWZhNGExOC4uNjc0YzE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMzMxOCwxNCArMzMxOCw3IEBACiAKIGludCBfX2luaXQgYXRhX3NmZl9pbml0KHZvaWQpCiB7Ci0JLyoKLQkgKiBGSVhNRTogSW4gVVAgY2FzZSwgdGhlcmUgaXMgb25seSBvbmUgd29ya3F1ZXVlIHRocmVhZCBhbmQgaWYgeW91Ci0JICogaGF2ZSBtb3JlIHRoYW4gb25lIFBJTyBkZXZpY2UsIGxhdGVuY3kgaXMgYmxvb2R5IGF3ZnVsLCB3aXRoCi0JICogb2NjYXNpb25hbCBtdWx0aS1zZWNvbmQgImhpY2N1cHMiIGFzIG9uZSBQSU8gZGV2aWNlIHdhaXRzIGZvcgotCSAqIGFub3RoZXIuICBJdCdzIGFuIHVnbHkgd2FydCB0aGF0IHVzZXJzIERPIG9jY2FzaW9uYWxseSBjb21wbGFpbgotCSAqIGFib3V0OyBsdWNraWx5IG1vc3QgdXNlcnMgaGF2ZSBhdCBtb3N0IG9uZSBQSU8gcG9sbGVkIGRldmljZS4KLQkgKi8KLQlhdGFfc2ZmX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiYXRhX3NmZiIpOworCWF0YV9zZmZfd3EgPSBhbGxvY193b3JrcXVldWUoImF0YV9zZmYiLCBXUV9SRVNDVUVSLCBXUV9NQVhfQUNUSVZFKTsKIAlpZiAoIWF0YV9zZmZfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IDRiODRlZDYuLjljZTFlY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC01NCw3ICs1NCw2IEBACiB9OwogCiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9wcmludF9pZDsKLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXRhX2F1eF93cTsKIGV4dGVybiBpbnQgYXRhcGlfcGFzc3RocnUxNjsKIGV4dGVybiBpbnQgbGliYXRhX2Z1YTsKIGV4dGVybiBpbnQgbGliYXRhX25vYWNwaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDExOGMyOGUuLmU5NDRhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMjAxLDIzICsyMDAsMjUgQEAKIAogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBkZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQlwZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpIHsKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQkJcGRldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQl9CiAJCWlmIChpby0+bndpbiA9PSAyKSB7Ci0JCQlwZGV2LT5pby5OdW1Qb3J0czEgPSA4OwotCQkJcGRldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gKHN0ay0+aXNfa21lKSA/IDIgOiAxOwotCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBkZXYsICZwZGV2LT5pbykgIT0gMCkKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5lbmQgPSA4OworCQkJcGRldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcGRldi0+cmVzb3VyY2VbMV0tPmVuZCA9IChzdGstPmlzX2ttZSkgPyAyIDogMTsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MjsKKwkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAJCX0gZWxzZSBpZiAoKGlvLT5ud2luID09IDEpICYmIChpby0+d2luWzBdLmxlbiA+PSAxNikpIHsKLQkJCXBkZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOwotCQkJcGRldi0+aW8uTnVtUG9ydHMyID0gMDsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQlwZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CisJCQlwZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2KSAhPSAwKQogCQkJCXJldHVybiAtRU5PREVWOwotCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MSArIDB4MGU7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHgwZTsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJLyogSWYgd2UndmUgZ290IHRoaXMgZmFyLCB3ZSdyZSBkb25lICovCkBAIC0yNDYsOSArMjQ3LDggQEAKIAlzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyAqb3BzID0gJnBjbWNpYV9wb3J0X29wczsKIAogCS8qIFNldCB1cCBhdHRyaWJ1dGVzIGluIG9yZGVyIHRvIHByb2JlIGNhcmQgYW5kIGdldCByZXNvdXJjZXMgKi8KLQlwZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCXBkZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcGRldi0+aW8uSU9BZGRyTGluZXMgPSAzOworCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlwZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJcGRldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCXBkZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC0yNzEsNyArMjcxLDcgQEAKIAkJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhwZGV2LCBwY21jaWFfY2hlY2tfb25lX2NvbmZpZywgc3RrKSkKIAkJCWdvdG8gZmFpbGVkOyAvKiBObyBzdWl0YWJsZSBjb25maWcgZm91bmQgKi8KIAl9Ci0JaW9fYmFzZSA9IHBkZXYtPmlvLkJhc2VQb3J0MTsKKwlpb19iYXNlID0gcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCWN0bF9iYXNlID0gc3RrLT5jdGxfYmFzZTsKIAlpZiAoIXBkZXYtPmlycSkKIAkJZ290byBmYWlsZWQ7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAogCS8qIEZJWE1FOiBDb3VsZCBiZSBtb3JlIHBvcnRzIGF0IGJhc2UgKyAweDEwIGJ1dCB3ZSBvbmx5IGRlYWwgd2l0aAogCSAgIG9uZSByaWdodCBub3cgKi8KLQlpZiAocGRldi0+aW8uTnVtUG9ydHMxID49IDB4MjApCisJaWYgKHJlc291cmNlX3NpemUocGRldi0+cmVzb3VyY2VbMF0pID49IDB4MjApCiAJCW5fcG9ydHMgPSAyOwogCiAJaWYgKHBkZXYtPm1hbmZfaWQgPT0gMHgwMDk3ICYmIHBkZXYtPmNhcmRfaWQgPT0gMHgxNjIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9weGEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcHhhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5OGM2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcHhhLmMKQEAgLTAsMCArMSw0MTEgQEAKKy8qCisgKiBHZW5lcmljIFBYQSBQQVRBIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3BhdGFfcHhhLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKworI2RlZmluZSBEUlZfTkFNRQkicGF0YV9weGEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjEiCisKK3N0cnVjdCBwYXRhX3B4YV9kYXRhIHsKKwl1aW50MzJfdAkJZG1hX2NoYW5uZWw7CisJc3RydWN0IHB4YV9kbWFfZGVzYwkqZG1hX2Rlc2M7CisJZG1hX2FkZHJfdAkJZG1hX2Rlc2NfYWRkcjsKKwl1aW50MzJfdAkJZG1hX2Rlc2NfaWQ7CisKKwkvKiBETUEgSU8gcGh5c2ljYWwgYWRkcmVzcyAqLworCXVpbnQzMl90CQlkbWFfaW9fYWRkcjsKKwkvKiBQWEEgRFJFUTwwOjI+IHBpbiBzZWxlY3RvciAqLworCXVpbnQzMl90CQlkbWFfZHJlcTsKKwkvKiBETUEgRENTUiByZWdpc3RlciB2YWx1ZSAqLworCXVpbnQzMl90CQlkbWFfZGNzcjsKKworCXN0cnVjdCBjb21wbGV0aW9uCWRtYV9kb25lOworfTsKKworLyoKKyAqIFNldHVwIHRoZSBETUEgZGVzY3JpcHRvcnMuIFRoZSBzaXplIGlzIHRyYW5zZmVyIGNhcHBlZCBhdCA0ayBwZXIgZGVzY3JpcHRvciwKKyAqIGlmIHRoZSB0cmFuc2ZlciBpcyBsb25nZXIsIGl0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgY2hhaW5lZCBkZXNjcmlwdG9ycy4KKyAqLworc3RhdGljIHZvaWQgcHhhX2xvYWRfZG1hYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBwYXRhX3B4YV9kYXRhICpwZCA9IHFjLT5hcC0+cHJpdmF0ZV9kYXRhOworCisJdWludDMyX3QgY3B1X2xlbiwgc2VnX2xlbjsKKwlkbWFfYWRkcl90IGNwdV9hZGRyOworCisJY3B1X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJY3B1X2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJZG8geworCQlzZWdfbGVuID0gKGNwdV9sZW4gPiAweDEwMDApID8gMHgxMDAwIDogY3B1X2xlbjsKKworCQlwZC0+ZG1hX2Rlc2NbcGQtPmRtYV9kZXNjX2lkXS5kZGFkciA9IHBkLT5kbWFfZGVzY19hZGRyICsKKwkJCSgocGQtPmRtYV9kZXNjX2lkICsgMSkgKiBzaXplb2Yoc3RydWN0IHB4YV9kbWFfZGVzYykpOworCisJCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWRdLmRjbWQgPSBEQ01EX0JVUlNUMzIgfAorCQkJCQlEQ01EX1dJRFRIMiB8IChEQ01EX0xFTkdUSCAmIHNlZ19sZW4pOworCisJCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfV1JJVEUpIHsKKwkJCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWRdLmRzYWRyID0gY3B1X2FkZHI7CisJCQlwZC0+ZG1hX2Rlc2NbcGQtPmRtYV9kZXNjX2lkXS5kdGFkciA9IHBkLT5kbWFfaW9fYWRkcjsKKwkJCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWRdLmRjbWQgfD0gRENNRF9JTkNTUkNBRERSIHwKKwkJCQkJCURDTURfRkxPV1RSRzsKKwkJfSBlbHNlIHsKKwkJCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWRdLmRzYWRyID0gcGQtPmRtYV9pb19hZGRyOworCQkJcGQtPmRtYV9kZXNjW3BkLT5kbWFfZGVzY19pZF0uZHRhZHIgPSBjcHVfYWRkcjsKKwkJCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWRdLmRjbWQgfD0gRENNRF9JTkNUUkdBRERSIHwKKwkJCQkJCURDTURfRkxPV1NSQzsKKwkJfQorCisJCWNwdV9sZW4gLT0gc2VnX2xlbjsKKwkJY3B1X2FkZHIgKz0gc2VnX2xlbjsKKwkJcGQtPmRtYV9kZXNjX2lkKys7CisKKwl9IHdoaWxlIChjcHVfbGVuKTsKKworCS8qIFNob3VsZCBub3QgaGFwcGVuICovCisJaWYgKHNlZ19sZW4gJiAweDFmKQorCQlEQUxHTiB8PSAoMSA8PCBwZC0+ZG1hX2RyZXEpOworfQorCisvKgorICogUHJlcGFyZSB0YXNrZmlsZSBmb3Igc3VibWlzc2lvbi4KKyAqLworc3RhdGljIHZvaWQgcHhhX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgcGF0YV9weGFfZGF0YSAqcGQgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgc2kgPSAwOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwlpZiAoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpCisJCXJldHVybjsKKworCXBkLT5kbWFfZGVzY19pZCA9IDA7CisKKwlEQ1NSKHBkLT5kbWFfY2hhbm5lbCkgPSAwOworCURBTEdOICY9IH4oMSA8PCBwZC0+ZG1hX2RyZXEpOworCisJZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpCisJCXB4YV9sb2FkX2RtYWMoc2csIHFjKTsKKworCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWQgLSAxXS5kZGFkciA9IEREQURSX1NUT1A7CisKKwkvKiBGaXJlIElSUSBvbmx5IGF0IHRoZSBlbmQgb2YgbGFzdCBibG9jayAqLworCXBkLT5kbWFfZGVzY1twZC0+ZG1hX2Rlc2NfaWQgLSAxXS5kY21kIHw9IERDTURfRU5ESVJRRU47CisKKwlEREFEUihwZC0+ZG1hX2NoYW5uZWwpID0gcGQtPmRtYV9kZXNjX2FkZHI7CisJRFJDTVIocGQtPmRtYV9kcmVxKSA9IERSQ01SX01BUFZMRCB8IHBkLT5kbWFfY2hhbm5lbDsKKworfQorCisvKgorICogQ29uZmlndXJlIHRoZSBETUEgY29udHJvbGxlciwgbG9hZCB0aGUgRE1BIGRlc2NyaXB0b3JzLCBidXQgZG9uJ3Qgc3RhcnQgdGhlCisgKiBETUEgY29udHJvbGxlciB5ZXQuIE9ubHkgaXNzdWUgdGhlIEFUQSBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZCBweGFfYm1kbWFfc2V0dXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlxYy0+YXAtPm9wcy0+c2ZmX2V4ZWNfY29tbWFuZChxYy0+YXAsICZxYy0+dGYpOworfQorCisvKgorICogRXhlY3V0ZSB0aGUgRE1BIHRyYW5zZmVyLgorICovCitzdGF0aWMgdm9pZCBweGFfYm1kbWFfc3RhcnQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgcGF0YV9weGFfZGF0YSAqcGQgPSBxYy0+YXAtPnByaXZhdGVfZGF0YTsKKwlpbml0X2NvbXBsZXRpb24oJnBkLT5kbWFfZG9uZSk7CisJRENTUihwZC0+ZG1hX2NoYW5uZWwpID0gRENTUl9SVU47Cit9CisKKy8qCisgKiBXYWl0IHVudGlsIHRoZSBETUEgdHJhbnNmZXIgY29tcGxldGVzLCB0aGVuIHN0b3AgdGhlIERNQSBjb250cm9sbGVyLgorICovCitzdGF0aWMgdm9pZCBweGFfYm1kbWFfc3RvcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXN0cnVjdCBwYXRhX3B4YV9kYXRhICpwZCA9IHFjLT5hcC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKChEQ1NSKHBkLT5kbWFfY2hhbm5lbCkgJiBEQ1NSX1JVTikgJiYKKwkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwZC0+ZG1hX2RvbmUsIEhaKSkKKwkJZGV2X2VycihxYy0+YXAtPmRldiwgIlRpbWVvdXQgd2FpdGluZyBmb3IgRE1BIGNvbXBsZXRpb24hIik7CisKKwlEQ1NSKHBkLT5kbWFfY2hhbm5lbCkgPSAwOworfQorCisvKgorICogUmVhZCBETUEgc3RhdHVzLiBUaGUgYm1kbWFfc3RvcCgpIHdpbGwgdGFrZSBjYXJlIG9mIHByb3Blcmx5IGZpbmlzaGluZyB0aGUKKyAqIERNQSB0cmFuc2ZlciBzbyB3ZSBhbHdheXMgaGF2ZSBETUEtY29tcGxldGUgaW50ZXJydXB0IGhlcmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHB4YV9ibWRtYV9zdGF0dXMoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgcGF0YV9weGFfZGF0YSAqcGQgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGNoYXIgcmV0ID0gQVRBX0RNQV9JTlRSOworCisJaWYgKHBkLT5kbWFfZGNzciAmIERDU1JfQlVTRVJSKQorCQlyZXQgfD0gQVRBX0RNQV9FUlI7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTm8gSVJRIHJlZ2lzdGVyIHByZXNlbnQgc28gd2UgZG8gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQgcHhhX2lycV9jbGVhcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworfQorCisvKgorICogQ2hlY2sgZm9yIEFUQVBJIERNQS4gQVRBUEkgRE1BIGlzIHVuc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLiBJdCdzIHN0aWxsCisgKiB1bmNsZWFyIHdoeSBBVEFQSSBoYXMgRE1BIGlzc3Vlcy4KKyAqLworc3RhdGljIGludCBweGFfY2hlY2tfYXRhcGlfZG1hKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBweGFfYXRhX3NodCA9IHsKKwlBVEFfQk1ETUFfU0hUKERSVl9OQU1FKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBweGFfYXRhX3BvcnRfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAorCS5jYWJsZV9kZXRlY3QJCT0gYXRhX2NhYmxlXzQwd2lyZSwKKworCS5ibWRtYV9zZXR1cAkJPSBweGFfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0CQk9IHB4YV9ibWRtYV9zdGFydCwKKwkuYm1kbWFfc3RvcAkJPSBweGFfYm1kbWFfc3RvcCwKKwkuYm1kbWFfc3RhdHVzCQk9IHB4YV9ibWRtYV9zdGF0dXMsCisKKwkuY2hlY2tfYXRhcGlfZG1hCT0gcHhhX2NoZWNrX2F0YXBpX2RtYSwKKworCS5zZmZfaXJxX2NsZWFyCQk9IHB4YV9pcnFfY2xlYXIsCisKKwkucWNfcHJlcAkJPSBweGFfcWNfcHJlcCwKK307CisKKy8qCisgKiBETUEgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkIHB4YV9hdGFfZG1hX2lycShpbnQgZG1hLCB2b2lkICpwb3J0KQoreworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBwb3J0OworCXN0cnVjdCBwYXRhX3B4YV9kYXRhICpwZCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwlwZC0+ZG1hX2Rjc3IgPSBEQ1NSKGRtYSk7CisJRENTUihkbWEpID0gcGQtPmRtYV9kY3NyOworCisJaWYgKHBkLT5kbWFfZGNzciAmIERDU1JfU1RPUFNUQVRFKQorCQljb21wbGV0ZSgmcGQtPmRtYV9kb25lKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcHhhX2F0YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXN0cnVjdCBwYXRhX3B4YV9kYXRhICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqY21kX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmN0bF9yZXM7CisJc3RydWN0IHJlc291cmNlICpkbWFfcmVzOworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3JlczsKKwlzdHJ1Y3QgcGF0YV9weGFfcGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIFJlc291cmNlIHZhbGlkYXRpb24sIHRocmVlIHJlc291cmNlcyBhcmUgbmVlZGVkOgorCSAqICAtIENNRCBwb3J0IGJhc2UgYWRkcmVzcworCSAqICAtIENUTCBwb3J0IGJhc2UgYWRkcmVzcworCSAqICAtIERNQSBwb3J0IGJhc2UgYWRkcmVzcworCSAqICAtIElSUSBwaW4KKwkgKi8KKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSA0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbnVtYmVyIG9mIHJlc291cmNlc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQ01EIHBvcnQgYmFzZSBhZGRyZXNzCisJICovCisJY21kX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHVubGlrZWx5KGNtZF9yZXMgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBDVEwgcG9ydCBiYXNlIGFkZHJlc3MKKwkgKi8KKwljdGxfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAodW5saWtlbHkoY3RsX3JlcyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIERNQSBwb3J0IGJhc2UgYWRkcmVzcworCSAqLworCWRtYV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOworCWlmICh1bmxpa2VseShkbWFfcmVzID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogSVJRIHBpbgorCSAqLworCWlycV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmICh1bmxpa2VseShpcnFfcmVzID09IE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogQWxsb2NhdGUgdGhlIGhvc3QKKwkgKi8KKwlob3N0ID0gYXRhX2hvc3RfYWxsb2MoJnBkZXYtPmRldiwgMSk7CisJaWYgKCFob3N0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFwCQk9IGhvc3QtPnBvcnRzWzBdOworCWFwLT5vcHMJCT0gJnB4YV9hdGFfcG9ydF9vcHM7CisJYXAtPnBpb19tYXNrCT0gQVRBX1BJTzQ7CisJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUEyOworCWFwLT5mbGFncwk9IEFUQV9GTEFHX01NSU87CisKKwlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIGNtZF9yZXMtPnN0YXJ0LAorCQkJCQkJcmVzb3VyY2Vfc2l6ZShjbWRfcmVzKSk7CisJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCBjdGxfcmVzLT5zdGFydCwKKwkJCQkJCXJlc291cmNlX3NpemUoY3RsX3JlcykpOworCWFwLT5pb2FkZHIuYm1kbWFfYWRkcgk9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCBkbWFfcmVzLT5zdGFydCwKKwkJCQkJCXJlc291cmNlX3NpemUoZG1hX3JlcykpOworCisJLyoKKwkgKiBBZGp1c3QgcmVnaXN0ZXIgb2Zmc2V0cworCSAqLworCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBhcC0+aW9hZGRyLmN0bF9hZGRyOworCWFwLT5pb2FkZHIuZGF0YV9hZGRyCT0gYXAtPmlvYWRkci5jbWRfYWRkciArCisJCQkJCShBVEFfUkVHX0RBVEEgPDwgcGRhdGEtPnJlZ19zaGlmdCk7CisJYXAtPmlvYWRkci5lcnJvcl9hZGRyCT0gYXAtPmlvYWRkci5jbWRfYWRkciArCisJCQkJCShBVEFfUkVHX0VSUiA8PCBwZGF0YS0+cmVnX3NoaWZ0KTsKKwlhcC0+aW9hZGRyLmZlYXR1cmVfYWRkcgk9IGFwLT5pb2FkZHIuY21kX2FkZHIgKworCQkJCQkoQVRBX1JFR19GRUFUVVJFIDw8IHBkYXRhLT5yZWdfc2hpZnQpOworCWFwLT5pb2FkZHIubnNlY3RfYWRkcgk9IGFwLT5pb2FkZHIuY21kX2FkZHIgKworCQkJCQkoQVRBX1JFR19OU0VDVCA8PCBwZGF0YS0+cmVnX3NoaWZ0KTsKKwlhcC0+aW9hZGRyLmxiYWxfYWRkcgk9IGFwLT5pb2FkZHIuY21kX2FkZHIgKworCQkJCQkoQVRBX1JFR19MQkFMIDw8IHBkYXRhLT5yZWdfc2hpZnQpOworCWFwLT5pb2FkZHIubGJhbV9hZGRyCT0gYXAtPmlvYWRkci5jbWRfYWRkciArCisJCQkJCShBVEFfUkVHX0xCQU0gPDwgcGRhdGEtPnJlZ19zaGlmdCk7CisJYXAtPmlvYWRkci5sYmFoX2FkZHIJPSBhcC0+aW9hZGRyLmNtZF9hZGRyICsKKwkJCQkJKEFUQV9SRUdfTEJBSCA8PCBwZGF0YS0+cmVnX3NoaWZ0KTsKKwlhcC0+aW9hZGRyLmRldmljZV9hZGRyCT0gYXAtPmlvYWRkci5jbWRfYWRkciArCisJCQkJCShBVEFfUkVHX0RFVklDRSA8PCBwZGF0YS0+cmVnX3NoaWZ0KTsKKwlhcC0+aW9hZGRyLnN0YXR1c19hZGRyCT0gYXAtPmlvYWRkci5jbWRfYWRkciArCisJCQkJCShBVEFfUkVHX1NUQVRVUyA8PCBwZGF0YS0+cmVnX3NoaWZ0KTsKKwlhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcgk9IGFwLT5pb2FkZHIuY21kX2FkZHIgKworCQkJCQkoQVRBX1JFR19DTUQgPDwgcGRhdGEtPnJlZ19zaGlmdCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFuZCBsb2FkIGRyaXZlcidzIGludGVybmFsIGRhdGEgc3RydWN0dXJlCisJICovCisJZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHBhdGFfcHhhX2RhdGEpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJYXAtPnByaXZhdGVfZGF0YSA9IGRhdGE7CisJZGF0YS0+ZG1hX2RyZXEgPSBwZGF0YS0+ZG1hX2RyZXE7CisJZGF0YS0+ZG1hX2lvX2FkZHIgPSBkbWFfcmVzLT5zdGFydDsKKworCS8qCisJICogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBETUEgZGVzY3JpcHRvcnMKKwkgKi8KKwlkYXRhLT5kbWFfZGVzYyA9IGRtYW1fYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCQkmZGF0YS0+ZG1hX2Rlc2NfYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhLT5kbWFfZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFJlcXVlc3QgdGhlIERNQSBjaGFubmVsCisJICovCisJZGF0YS0+ZG1hX2NoYW5uZWwgPSBweGFfcmVxdWVzdF9kbWEoRFJWX05BTUUsIERNQV9QUklPX0xPVywKKwkJCQkJCXB4YV9hdGFfZG1hX2lycSwgYXApOworCWlmIChkYXRhLT5kbWFfY2hhbm5lbCA8IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKgorCSAqIFN0b3AgYW5kIGNsZWFyIHRoZSBETUEgY2hhbm5lbAorCSAqLworCURDU1IoZGF0YS0+ZG1hX2NoYW5uZWwpID0gMDsKKworCS8qCisJICogQWN0aXZhdGUgdGhlIEFUQSBob3N0CisJICovCisJcmV0ID0gYXRhX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxX3Jlcy0+c3RhcnQsIGF0YV9zZmZfaW50ZXJydXB0LAorCQkJCXBkYXRhLT5pcnFfZmxhZ3MsICZweGFfYXRhX3NodCk7CisJaWYgKHJldCkKKwkJcHhhX2ZyZWVfZG1hKGRhdGEtPmRtYV9jaGFubmVsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB4YV9hdGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBwYXRhX3B4YV9kYXRhICpkYXRhID0gaG9zdC0+cG9ydHNbMF0tPnByaXZhdGVfZGF0YTsKKworCXB4YV9mcmVlX2RtYShkYXRhLT5kbWFfY2hhbm5lbCk7CisKKwlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhX2F0YV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHB4YV9hdGFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGFfYXRhX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCQk9IERSVl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YV9hdGFfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YV9hdGFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHB4YV9hdGFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGFfYXRhX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHB4YV9hdGFfaW5pdCk7Cittb2R1bGVfZXhpdChweGFfYXRhX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJETUEtY2FwYWJsZSBkcml2ZXIgZm9yIFBBVEEgb24gUFhBIENQVSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2Ftc3VuZ19jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9zYW1zdW5nX2NmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY5Y2ZiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2Ftc3VuZ19jZi5jCkBAIC0wLDAgKzEsNjgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQorICoKKyAqIFBBVEEgZHJpdmVyIGZvciBTYW1zdW5nIFNvQ3MuCisgKiBTdXBwb3J0cyBDRiBJbnRlcmZhY2UgaW4gVHJ1ZSBJREUgbW9kZS4gQ3VycmVudGx5IG9ubHkgUElPIG1vZGUgaGFzIGJlZW4KKyAqIGltcGxlbWVudGVkOyBVRE1BIHN1cHBvcnQgaGFzIHRvIGJlIGFkZGVkLgorICoKKyAqIEJhc2VkIG9uOgorICoJUEFUQSBkcml2ZXIgZm9yIEFUOTFTQU05MjYwIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlcgorICoJUEFUQSBkcml2ZXIgZm9yIFRvc2hpYmEgU0NDIGNvbnRyb2xsZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxwbGF0L2F0YS5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1hdGEuaD4KKworI2RlZmluZSBEUlZfTkFNRSAicGF0YV9zYW1zdW5nX2NmIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xIgorCitlbnVtIHMzY19jcHVfdHlwZSB7CisJVFlQRV9TM0M2NFhYLAorCVRZUEVfUzVQQzEwMCwKKwlUWVBFX1M1UFYyMTAsCit9OworCisvKgorICogc3RydWN0IHMzY19pZGVfaW5mbyAtIFMzQyBQQVRBIGluc3RhbmNlLgorICogQGNsazogVGhlIGNsb2NrIHJlc291cmNlIGZvciB0aGlzIGNvbnRyb2xsZXIuCisgKiBAaWRlX2FkZHI6IFRoZSBhcmVhIG1hcHBlZCBmb3IgdGhlIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqIEBzZnJfYWRkcjogVGhlIGFyZWEgbWFwcGVkIGZvciB0aGUgc3BlY2lhbCBmdW5jdGlvbiByZWdpc3RlcnMuCisgKiBAaXJxOiBUaGUgSVJRIG51bWJlciB3ZSBhcmUgdXNpbmcuCisgKiBAY3B1X3R5cGU6IFRoZSBleGFjdCB0eXBlIG9mIHRoaXMgY29udHJvbGxlci4KKyAqIEBmaWZvX3N0YXR1c19yZWc6IFRoZSBBVEFfRklGT19TVEFUVVMgcmVnaXN0ZXIgb2Zmc2V0LgorICovCitzdHJ1Y3QgczNjX2lkZV9pbmZvIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICppZGVfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnNmcl9hZGRyOworCXVuc2lnbmVkIGludCBpcnE7CisJZW51bSBzM2NfY3B1X3R5cGUgY3B1X3R5cGU7CisJdW5zaWduZWQgaW50IGZpZm9fc3RhdHVzX3JlZzsKK307CisKK3N0YXRpYyB2b2lkIHBhdGFfczNjX3NldF9lbmRpYW4odm9pZCBfX2lvbWVtICpzM2NfaWRlX3JlZ2Jhc2UsIHU4IG1vZGUpCit7CisJdTMyIHJlZyA9IHJlYWRsKHMzY19pZGVfcmVnYmFzZSArIFMzQ19BVEFfQ0ZHKTsKKwlyZWcgPSBtb2RlID8gKHJlZyAmIH5TM0NfQVRBX0NGR19TV0FQKSA6IChyZWcgfCBTM0NfQVRBX0NGR19TV0FQKTsKKwl3cml0ZWwocmVnLCBzM2NfaWRlX3JlZ2Jhc2UgKyBTM0NfQVRBX0NGRyk7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfczNjX2NmZ19tb2RlKHZvaWQgX19pb21lbSAqczNjX2lkZV9zZnJiYXNlKQoreworCS8qIFNlbGVjdCB0cnVlLWlkZSBhcyB0aGUgaW50ZXJuYWwgb3BlcmF0aW5nIG1vZGUgKi8KKwl3cml0ZWwocmVhZGwoczNjX2lkZV9zZnJiYXNlICsgUzNDX0NGQVRBX01VWCkgfCBTM0NfQ0ZBVEFfTVVYX1RSVUVJREUsCisJCXMzY19pZGVfc2ZyYmFzZSArIFMzQ19DRkFUQV9NVVgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworcGF0YV9zM2Nfc2V0dXBfdGltaW5nKHN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBhdGFfdGltaW5nICphdGEpCit7CisJaW50IHQxID0gYXRhLT5zZXR1cDsKKwlpbnQgdDIgPSBhdGEtPmFjdDhiOworCWludCB0MmkgPSBhdGEtPnJlYzhiOworCXVsb25nIHBpb3RpbWU7CisKKwlwaW90aW1lID0gKCh0MmkgJiAweGZmKSA8PCAxMikgfCAoKHQyICYgMHhmZikgPDwgNCkgfCAodDEgJiAweGYpOworCisJcmV0dXJuIHBpb3RpbWU7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGFfczNjX3NldF9waW9tb2RlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGFfdGltaW5nIHRpbWluZzsKKwlpbnQgY3ljbGVfdGltZTsKKwl1bG9uZyBhdGFfY2ZnID0gcmVhZGwoaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0NGRyk7CisJdWxvbmcgcGlvdGltZTsKKworCS8qIEVuYWJsZXMgSU9SRFkgaWYgbW9kZSByZXF1aXJlcyBpdCAqLworCWlmIChhdGFfcGlvX25lZWRfaW9yZHkoYWRldikpCisJCWF0YV9jZmcgfD0gUzNDX0FUQV9DRkdfSU9SRFlFTjsKKwllbHNlCisJCWF0YV9jZmcgJj0gflMzQ19BVEFfQ0ZHX0lPUkRZRU47CisKKwljeWNsZV90aW1lID0gKGludCkoMTAwMDAwMDAwMFVMIC8gY2xrX2dldF9yYXRlKGluZm8tPmNsaykpOworCisJYXRhX3RpbWluZ19jb21wdXRlKGFkZXYsIGFkZXYtPnBpb19tb2RlLCAmdGltaW5nLAorCQkJCQljeWNsZV90aW1lICogMTAwMCwgMCk7CisKKwlwaW90aW1lID0gcGF0YV9zM2Nfc2V0dXBfdGltaW5nKGluZm8sICZ0aW1pbmcpOworCisJd3JpdGVsKGF0YV9jZmcsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9DRkcpOworCXdyaXRlbChwaW90aW1lLCBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX1RJTUUpOworfQorCisvKgorICogV2FpdHMgdW50aWwgdGhlIElERSBjb250cm9sbGVyIGlzIGFibGUgdG8gcGVyZm9ybSBuZXh0IHJlYWQvd3JpdGUKKyAqIG9wZXJhdGlvbiB0byB0aGUgZGlzay4gTmVlZGVkIGZvciA2NFhYIHNlcmllcyBib2FyZHMgb25seS4KKyAqLworc3RhdGljIGludCB3YWl0X2Zvcl9ob3N0X3JlYWR5KHN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8pCit7CisJdWxvbmcgdGltZW91dDsKKwl2b2lkIF9faW9tZW0gKmZpZm9fcmVnID0gaW5mby0+aWRlX2FkZHIgKyBpbmZvLT5maWZvX3N0YXR1c19yZWc7CisKKwkvKiB3YWl0IGZvciBtYXhpbXVtIG9mIDIwIG1zZWMgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQlpZiAoKHJlYWRsKGZpZm9fcmVnKSA+PiAyOCkgPT0gMCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVCVVNZOworfQorCisvKgorICogV3JpdGVzIHRvIG9uZSBvZiB0aGUgdGFzayBmaWxlIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgYXRhX291dGIoc3RydWN0IGF0YV9ob3N0ICpob3N0LCB1OCBhZGRyLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwlzdHJ1Y3QgczNjX2lkZV9pbmZvICppbmZvID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCisJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwl3cml0ZWIoYWRkciwgcmVnKTsKK30KKworLyoKKyAqIFJlYWRzIGZyb20gb25lIG9mIHRoZSB0YXNrIGZpbGUgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdTggYXRhX2luYihzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QsIHZvaWQgX19pb21lbSAqcmVnKQoreworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdTggdGVtcDsKKworCXdhaXRfZm9yX2hvc3RfcmVhZHkoaW5mbyk7CisJKHZvaWQpIHJlYWRiKHJlZyk7CisJd2FpdF9mb3JfaG9zdF9yZWFkeShpbmZvKTsKKwl0ZW1wID0gcmVhZGIoaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19SREFUQSk7CisJcmV0dXJuIHRlbXA7Cit9CisKKy8qCisgKiBwYXRhX3MzY190Zl9sb2FkIC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gaG9zdCBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHBhdGFfczNjX3RmX2xvYWQoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQljb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXVuc2lnbmVkIGludCBpc19hZGRyID0gdGYtPmZsYWdzICYgQVRBX1RGTEFHX0lTQUREUjsKKworCWlmICh0Zi0+Y3RsICE9IGFwLT5sYXN0X2N0bCkgeworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmN0bCwgaW9hZGRyLT5jdGxfYWRkcik7CisJCWFwLT5sYXN0X2N0bCA9IHRmLT5jdGw7CisJCWF0YV93YWl0X2lkbGUoYXApOworCX0KKworCWlmIChpc19hZGRyICYmICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfTEJBNDgpKSB7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+aG9iX2ZlYXR1cmUsIGlvYWRkci0+ZmVhdHVyZV9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5ob2JfbnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+aG9iX2xiYWwsIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5ob2JfbGJhbSwgaW9hZGRyLT5sYmFtX2FkZHIpOworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmhvYl9sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJfQorCisJaWYgKGlzX2FkZHIpIHsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5mZWF0dXJlLCBpb2FkZHItPmZlYXR1cmVfYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+bnNlY3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+bGJhbCwgaW9hZGRyLT5sYmFsX2FkZHIpOworCQlhdGFfb3V0YihhcC0+aG9zdCwgdGYtPmxiYW0sIGlvYWRkci0+bGJhbV9hZGRyKTsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5sYmFoLCBpb2FkZHItPmxiYWhfYWRkcik7CisJfQorCisJaWYgKHRmLT5mbGFncyAmIEFUQV9URkxBR19ERVZJQ0UpCisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+ZGV2aWNlLCBpb2FkZHItPmRldmljZV9hZGRyKTsKKworCWF0YV93YWl0X2lkbGUoYXApOworfQorCisvKgorICogcGF0YV9zM2NfdGZfcmVhZCAtIGlucHV0IGRldmljZSdzIEFUQSB0YXNrZmlsZSBzaGFkb3cgcmVnaXN0ZXJzCisgKi8KK3N0YXRpYyB2b2lkIHBhdGFfczNjX3RmX3JlYWQoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKKworCXRmLT5mZWF0dXJlID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwl0Zi0+bnNlY3QgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPm5zZWN0X2FkZHIpOworCXRmLT5sYmFsID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFsX2FkZHIpOworCXRmLT5sYmFtID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFtX2FkZHIpOworCXRmLT5sYmFoID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFoX2FkZHIpOworCXRmLT5kZXZpY2UgPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmRldmljZV9hZGRyKTsKKworCWlmICh0Zi0+ZmxhZ3MgJiBBVEFfVEZMQUdfTEJBNDgpIHsKKwkJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5jdGwgfCBBVEFfSE9CLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJdGYtPmhvYl9mZWF0dXJlID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5lcnJvcl9hZGRyKTsKKwkJdGYtPmhvYl9uc2VjdCA9IGF0YV9pbmIoYXAtPmhvc3QsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJCXRmLT5ob2JfbGJhbCA9IGF0YV9pbmIoYXAtPmhvc3QsIGlvYWRkci0+bGJhbF9hZGRyKTsKKwkJdGYtPmhvYl9sYmFtID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFtX2FkZHIpOworCQl0Zi0+aG9iX2xiYWggPSBhdGFfaW5iKGFwLT5ob3N0LCBpb2FkZHItPmxiYWhfYWRkcik7CisJCWF0YV9vdXRiKGFwLT5ob3N0LCB0Zi0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwkJYXAtPmxhc3RfY3RsID0gdGYtPmN0bDsKKwl9Cit9CisKKy8qCisgKiBwYXRhX3MzY19leGVjX2NvbW1hbmQgLSBpc3N1ZSBBVEEgY29tbWFuZCB0byBob3N0IGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgcGF0YV9zM2NfZXhlY19jb21tYW5kKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJY29uc3Qgc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJYXRhX291dGIoYXAtPmhvc3QsIHRmLT5jb21tYW5kLCBhcC0+aW9hZGRyLmNvbW1hbmRfYWRkcik7CisJYXRhX3NmZl9wYXVzZShhcCk7Cit9CisKKy8qCisgKiBwYXRhX3MzY19jaGVja19zdGF0dXMgLSBSZWFkIGRldmljZSBzdGF0dXMgcmVnaXN0ZXIKKyAqLworc3RhdGljIHU4IHBhdGFfczNjX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhdGFfaW5iKGFwLT5ob3N0LCBhcC0+aW9hZGRyLnN0YXR1c19hZGRyKTsKK30KKworLyoKKyAqIHBhdGFfczNjX2NoZWNrX2FsdHN0YXR1cyAtIFJlYWQgYWx0ZXJuYXRlIGRldmljZSBzdGF0dXMgcmVnaXN0ZXIKKyAqLworc3RhdGljIHU4IHBhdGFfczNjX2NoZWNrX2FsdHN0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhdGFfaW5iKGFwLT5ob3N0LCBhcC0+aW9hZGRyLmFsdHN0YXR1c19hZGRyKTsKK30KKworLyoKKyAqIHBhdGFfczNjX2RhdGFfeGZlciAtIFRyYW5zZmVyIGRhdGEgYnkgUElPCisgKi8KK3Vuc2lnbmVkIGludCBwYXRhX3MzY19kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCBydykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gZGV2LT5saW5rLT5hcDsKKwlzdHJ1Y3QgczNjX2lkZV9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKmRhdGFfYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOworCXVuc2lnbmVkIGludCB3b3JkcyA9IGJ1ZmxlbiA+PiAxLCBpOworCXUxNiAqZGF0YV9wdHIgPSAodTE2ICopYnVmOworCisJLyogUmVxdWlyZXMgd2FpdCBzYW1lIGFzIGluIGF0YV9pbmIvYXRhX291dGIgKi8KKwlpZiAocncgPT0gUkVBRCkKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyssIGRhdGFfcHRyKyspIHsKKwkJCXdhaXRfZm9yX2hvc3RfcmVhZHkoaW5mbyk7CisJCQkodm9pZCkgcmVhZHcoZGF0YV9hZGRyKTsKKwkJCXdhaXRfZm9yX2hvc3RfcmVhZHkoaW5mbyk7CisJCQkqZGF0YV9wdHIgPSByZWFkdyhpbmZvLT5pZGVfYWRkcgorCQkJCQkrIFMzQ19BVEFfUElPX1JEQVRBKTsKKwkJfQorCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyssIGRhdGFfcHRyKyspIHsKKwkJCXdhaXRfZm9yX2hvc3RfcmVhZHkoaW5mbyk7CisJCQl3cml0ZXcoKmRhdGFfcHRyLCBkYXRhX2FkZHIpOworCQl9CisKKwlpZiAoYnVmbGVuICYgMHgwMSkKKwkJZGV2X2VycihhcC0+ZGV2LCAidW5leHBlY3RlZCB0cmFpbGluZyBkYXRhXG4iKTsKKworCXJldHVybiB3b3JkcyA8PCAxOworfQorCisvKgorICogcGF0YV9zM2NfZGV2X3NlbGVjdCAtIFNlbGVjdCBkZXZpY2Ugb24gQVRBIGJ1cworICovCitzdGF0aWMgdm9pZCBwYXRhX3MzY19kZXZfc2VsZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBkZXZpY2UpCit7CisJdTggdG1wID0gQVRBX0RFVklDRV9PQlM7CisKKwlpZiAoZGV2aWNlICE9IDApCisJCXRtcCB8PSBBVEFfREVWMTsKKworCWF0YV9vdXRiKGFwLT5ob3N0LCB0bXAsIGFwLT5pb2FkZHIuZGV2aWNlX2FkZHIpOworCWF0YV9zZmZfcGF1c2UoYXApOworfQorCisvKgorICogcGF0YV9zM2NfZGV2Y2hrIC0gUEFUQSBkZXZpY2UgcHJlc2VuY2UgZGV0ZWN0aW9uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGF0YV9zM2NfZGV2Y2hrKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJdW5zaWduZWQgaW50IGRldmljZSkKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCXU4IG5zZWN0LCBsYmFsOworCisJcGF0YV9zM2NfZGV2X3NlbGVjdChhcCwgZGV2aWNlKTsKKworCWF0YV9vdXRiKGFwLT5ob3N0LCAweDU1LCBpb2FkZHItPm5zZWN0X2FkZHIpOworCWF0YV9vdXRiKGFwLT5ob3N0LCAweGFhLCBpb2FkZHItPmxiYWxfYWRkcik7CisKKwlhdGFfb3V0YihhcC0+aG9zdCwgMHhhYSwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlhdGFfb3V0YihhcC0+aG9zdCwgMHg1NSwgaW9hZGRyLT5sYmFsX2FkZHIpOworCisJYXRhX291dGIoYXAtPmhvc3QsIDB4NTUsIGlvYWRkci0+bnNlY3RfYWRkcik7CisJYXRhX291dGIoYXAtPmhvc3QsIDB4YWEsIGlvYWRkci0+bGJhbF9hZGRyKTsKKworCW5zZWN0ID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5uc2VjdF9hZGRyKTsKKwlsYmFsID0gYXRhX2luYihhcC0+aG9zdCwgaW9hZGRyLT5sYmFsX2FkZHIpOworCisJaWYgKChuc2VjdCA9PSAweDU1KSAmJiAobGJhbCA9PSAweGFhKSkKKwkJcmV0dXJuIDE7CS8qIHdlIGZvdW5kIGEgZGV2aWNlICovCisKKwlyZXR1cm4gMDsJCS8qIG5vdGhpbmcgZm91bmQgKi8KK30KKworLyoKKyAqIHBhdGFfczNjX3dhaXRfYWZ0ZXJfcmVzZXQgLSB3YWl0IGZvciBkZXZpY2VzIHRvIGJlY29tZSByZWFkeSBhZnRlciByZXNldAorICovCitzdGF0aWMgaW50IHBhdGFfczNjX3dhaXRfYWZ0ZXJfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLAorCQl1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCWludCByYzsKKworCW1zbGVlcChBVEFfV0FJVF9BRlRFUl9SRVNFVCk7CisKKwkvKiBhbHdheXMgY2hlY2sgcmVhZGluZXNzIG9mIHRoZSBtYXN0ZXIgZGV2aWNlICovCisJcmMgPSBhdGFfc2ZmX3dhaXRfcmVhZHkobGluaywgZGVhZGxpbmUpOworCS8qIC1FTk9ERVYgbWVhbnMgdGhlIG9kZCBjbG93biBmb3Jnb3QgdGhlIEQ3IHB1bGxkb3duIHJlc2lzdG9yCisJICogYW5kIFRGIHN0YXR1cyBpcyAweGZmLCBiYWlsIG91dCBvbiBpdCB0b28uCisJICovCisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBhdGFfczNjX2J1c19zb2Z0cmVzZXQgLSBQQVRBIGRldmljZSBzb2Z0d2FyZSByZXNldAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBhdGFfczNjX2J1c19zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlzdHJ1Y3QgYXRhX2lvcG9ydHMgKmlvYWRkciA9ICZhcC0+aW9hZGRyOworCisJLyogc29mdHdhcmUgcmVzZXQuICBjYXVzZXMgZGV2MCB0byBiZSBzZWxlY3RlZCAqLworCWF0YV9vdXRiKGFwLT5ob3N0LCBhcC0+Y3RsLCBpb2FkZHItPmN0bF9hZGRyKTsKKwl1ZGVsYXkoMjApOworCWF0YV9vdXRiKGFwLT5ob3N0LCBhcC0+Y3RsIHwgQVRBX1NSU1QsIGlvYWRkci0+Y3RsX2FkZHIpOworCXVkZWxheSgyMCk7CisJYXRhX291dGIoYXAtPmhvc3QsIGFwLT5jdGwsIGlvYWRkci0+Y3RsX2FkZHIpOworCWFwLT5sYXN0X2N0bCA9IGFwLT5jdGw7CisKKwlyZXR1cm4gcGF0YV9zM2Nfd2FpdF9hZnRlcl9yZXNldCgmYXAtPmxpbmssIGRlYWRsaW5lKTsKK30KKworLyoKKyAqIHBhdGFfczNjX3NvZnRyZXNldCAtIHJlc2V0IGhvc3QgcG9ydCB2aWEgQVRBIFNSU1QKKyAqLworc3RhdGljIGludCBwYXRhX3MzY19zb2Z0cmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCisJCQkgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisJdW5zaWduZWQgaW50IGRldm1hc2sgPSAwOworCWludCByYzsKKwl1OCBlcnI7CisKKwkvKiBkZXRlcm1pbmUgaWYgZGV2aWNlIDAgaXMgcHJlc2VudCAqLworCWlmIChwYXRhX3MzY19kZXZjaGsoYXAsIDApKQorCQlkZXZtYXNrIHw9ICgxIDw8IDApOworCisJLyogc2VsZWN0IGRldmljZSAwIGFnYWluICovCisJcGF0YV9zM2NfZGV2X3NlbGVjdChhcCwgMCk7CisKKwkvKiBpc3N1ZSBidXMgcmVzZXQgKi8KKwlyYyA9IHBhdGFfczNjX2J1c19zb2Z0cmVzZXQoYXAsIGRlYWRsaW5lKTsKKwkvKiBpZiBsaW5rIGlzIG9jY3VwaWVkLCAtRU5PREVWIHRvbyBpcyBhbiBlcnJvciAqLworCWlmIChyYyAmJiByYyAhPSAtRU5PREVWKSB7CisJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0VSUiwgIlNSU1QgZmFpbGVkIChlcnJubz0lZClcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzICovCisJY2xhc3Nlc1swXSA9IGF0YV9zZmZfZGV2X2NsYXNzaWZ5KCZhcC0+bGluay5kZXZpY2VbMF0sCisJCQkJCSAgZGV2bWFzayAmICgxIDw8IDApLCAmZXJyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogcGF0YV9zM2Nfc2V0X2RldmN0bCAtIFdyaXRlIGRldmljZSBjb250cm9sIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB2b2lkIHBhdGFfczNjX3NldF9kZXZjdGwoc3RydWN0IGF0YV9wb3J0ICphcCwgdTggY3RsKQoreworCWF0YV9vdXRiKGFwLT5ob3N0LCBjdGwsIGFwLT5pb2FkZHIuY3RsX2FkZHIpOworfQorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwYXRhX3MzY19zaHQgPSB7CisJQVRBX1BJT19TSFQoRFJWX05BTUUpLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHBhdGFfczNjX3BvcnRfb3BzID0geworCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKKwkuc2ZmX2NoZWNrX3N0YXR1cwk9IHBhdGFfczNjX2NoZWNrX3N0YXR1cywKKwkuc2ZmX2NoZWNrX2FsdHN0YXR1cyAgICA9IHBhdGFfczNjX2NoZWNrX2FsdHN0YXR1cywKKwkuc2ZmX3RmX2xvYWQJCT0gcGF0YV9zM2NfdGZfbG9hZCwKKwkuc2ZmX3RmX3JlYWQJCT0gcGF0YV9zM2NfdGZfcmVhZCwKKwkuc2ZmX2RhdGFfeGZlcgkJPSBwYXRhX3MzY19kYXRhX3hmZXIsCisJLnNmZl9leGVjX2NvbW1hbmQJPSBwYXRhX3MzY19leGVjX2NvbW1hbmQsCisJLnNmZl9kZXZfc2VsZWN0ICAgICAgICAgPSBwYXRhX3MzY19kZXZfc2VsZWN0LAorCS5zZmZfc2V0X2RldmN0bCAgICAgICAgID0gcGF0YV9zM2Nfc2V0X2RldmN0bCwKKwkuc29mdHJlc2V0CQk9IHBhdGFfczNjX3NvZnRyZXNldCwKKwkuc2V0X3Bpb21vZGUJCT0gcGF0YV9zM2Nfc2V0X3Bpb21vZGUsCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGF0YV9zNXBfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5zZXRfcGlvbW9kZQkJPSBwYXRhX3MzY19zZXRfcGlvbW9kZSwKK307CisKK3N0YXRpYyB2b2lkIHBhdGFfczNjX2VuYWJsZSh2b2lkICpzM2NfaWRlX3JlZ2Jhc2UsIGJvb2wgc3RhdGUpCit7CisJdTMyIHRlbXAgPSByZWFkbChzM2NfaWRlX3JlZ2Jhc2UgKyBTM0NfQVRBX0NUUkwpOworCXRlbXAgPSBzdGF0ZSA/ICh0ZW1wIHwgMSkgOiAodGVtcCAmIH4xKTsKKwl3cml0ZWwodGVtcCwgczNjX2lkZV9yZWdiYXNlICsgUzNDX0FUQV9DVFJMKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHBhdGFfczNjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2luc3RhbmNlOworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9JUlEpOworCXdyaXRlbChyZWcsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9JUlEpOworCisJcmV0dXJuIGF0YV9zZmZfaW50ZXJydXB0KGlycSwgZGV2X2luc3RhbmNlKTsKK30KKworc3RhdGljIHZvaWQgcGF0YV9zM2NfaHdpbml0KHN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8sCisJCQkJc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgKnBkYXRhKQoreworCXN3aXRjaCAoaW5mby0+Y3B1X3R5cGUpIHsKKwljYXNlIFRZUEVfUzNDNjRYWDoKKwkJLyogQ29uZmlndXJlIGFzIGJpZyBlbmRpYW4gKi8KKwkJcGF0YV9zM2NfY2ZnX21vZGUoaW5mby0+c2ZyX2FkZHIpOworCQlwYXRhX3MzY19zZXRfZW5kaWFuKGluZm8tPmlkZV9hZGRyLCAxKTsKKwkJcGF0YV9zM2NfZW5hYmxlKGluZm8tPmlkZV9hZGRyLCB0cnVlKTsKKwkJbXNsZWVwKDEwMCk7CisKKwkJLyogUmVtb3ZlIElSUSBTdGF0dXMgKi8KKwkJd3JpdGVsKDB4MWYsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9JUlEpOworCQl3cml0ZWwoMHgxYiwgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0lSUV9NU0spOworCQlicmVhazsKKworCWNhc2UgVFlQRV9TNVBDMTAwOgorCQlwYXRhX3MzY19jZmdfbW9kZShpbmZvLT5zZnJfYWRkcik7CisJCS8qIEZBTExUSFJPVUdIICovCisKKwljYXNlIFRZUEVfUzVQVjIxMDoKKwkJLyogQ29uZmlndXJlIGFzIGxpdHRsZSBlbmRpYW4gKi8KKwkJcGF0YV9zM2Nfc2V0X2VuZGlhbihpbmZvLT5pZGVfYWRkciwgMCk7CisJCXBhdGFfczNjX2VuYWJsZShpbmZvLT5pZGVfYWRkciwgdHJ1ZSk7CisJCW1zbGVlcCgxMDApOworCisJCS8qIFJlbW92ZSBJUlEgU3RhdHVzICovCisJCXdyaXRlbCgweDNmLCBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfSVJRKTsKKwkJd3JpdGVsKDB4M2YsIGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9JUlFfTVNLKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBhdGFfczNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgczNjX2lkZV9pbmZvICppbmZvOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0OworCWVudW0gczNjX2NwdV90eXBlIGNwdV90eXBlOworCWludCByZXQ7CisKKwljcHVfdHlwZSA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhOworCisJaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW0gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKGRldiwgcmVzLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKHJlcyksIERSVl9OQU1FKSkgeworCQlkZXZfZXJyKGRldiwgImVycm9yIHJlcXVlc3RpbmcgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpbmZvLT5pZGVfYWRkciA9IGRldm1faW9yZW1hcChkZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFpbmZvLT5pZGVfYWRkcikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSU8gYmFzZSBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY2Zjb24iKTsKKwlpZiAoSVNfRVJSKGluZm8tPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGFjY2VzcyB0byBjZiBjb250cm9sbGVyIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihpbmZvLT5jbGspOworCQlpbmZvLT5jbGsgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCWNsa19lbmFibGUoaW5mby0+Y2xrKTsKKworCS8qIGluaXQgYXRhIGhvc3QgKi8KKwlob3N0ID0gYXRhX2hvc3RfYWxsb2MoZGV2LCAxKTsKKwlpZiAoIWhvc3QpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaWRlIGhvc3RcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHN0b3BfY2xrOworCX0KKworCWFwID0gaG9zdC0+cG9ydHNbMF07CisJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU87CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CisKKwlpZiAoY3B1X3R5cGUgPT0gVFlQRV9TM0M2NFhYKSB7CisJCWFwLT5vcHMgPSAmcGF0YV9zM2NfcG9ydF9vcHM7CisJCWluZm8tPnNmcl9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyAweDE4MDA7CisJCWluZm8tPmlkZV9hZGRyICs9IDB4MTkwMDsKKwkJaW5mby0+Zmlmb19zdGF0dXNfcmVnID0gMHg5NDsKKwl9IGVsc2UgaWYgKGNwdV90eXBlID09IFRZUEVfUzVQQzEwMCkgeworCQlhcC0+b3BzID0gJnBhdGFfczVwX3BvcnRfb3BzOworCQlpbmZvLT5zZnJfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgMHgxODAwOworCQlpbmZvLT5pZGVfYWRkciArPSAweDE5MDA7CisJCWluZm8tPmZpZm9fc3RhdHVzX3JlZyA9IDB4ODQ7CisJfSBlbHNlIHsKKwkJYXAtPm9wcyA9ICZwYXRhX3M1cF9wb3J0X29wczsKKwkJaW5mby0+Zmlmb19zdGF0dXNfcmVnID0gMHg4NDsKKwl9CisKKwlpbmZvLT5jcHVfdHlwZSA9IGNwdV90eXBlOworCisJaWYgKGluZm8tPmlycSA8PSAwKSB7CisJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19QSU9fUE9MTElORzsKKwkJaW5mby0+aXJxID0gMDsKKwkJYXRhX3BvcnRfZGVzYyhhcCwgIm5vIElSUSwgdXNpbmcgUElPIHBvbGxpbmdcbiIpOworCX0KKworCWFwLT5pb2FkZHIuY21kX2FkZHIgPSAgaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX0NNRDsKKwlhcC0+aW9hZGRyLmRhdGFfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fRFRSOworCWFwLT5pb2FkZHIuZXJyb3JfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fRkVEOworCWFwLT5pb2FkZHIuZmVhdHVyZV9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19GRUQ7CisJYXAtPmlvYWRkci5uc2VjdF9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19TQ1I7CisJYXAtPmlvYWRkci5sYmFsX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0xMUjsKKwlhcC0+aW9hZGRyLmxiYW1fYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fTE1SOworCWFwLT5pb2FkZHIubGJhaF9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19MSFI7CisJYXAtPmlvYWRkci5kZXZpY2VfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fRFZSOworCWFwLT5pb2FkZHIuc3RhdHVzX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0NTRDsKKwlhcC0+aW9hZGRyLmNvbW1hbmRfYWRkciA9IGluZm8tPmlkZV9hZGRyICsgUzNDX0FUQV9QSU9fQ1NEOworCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBpbmZvLT5pZGVfYWRkciArIFMzQ19BVEFfUElPX0RBRDsKKwlhcC0+aW9hZGRyLmN0bF9hZGRyID0gaW5mby0+aWRlX2FkZHIgKyBTM0NfQVRBX1BJT19EQUQ7CisKKwlhdGFfcG9ydF9kZXNjKGFwLCAibW1pbyBjbWQgMHglbGx4ICIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQpOworCisJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaW5mbzsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+c2V0dXBfZ3BpbykKKwkJcGRhdGEtPnNldHVwX2dwaW8oKTsKKworCS8qIFNldCBlbmRpYW5uZXNzIGFuZCBlbmFibGUgdGhlIGludGVyZmFjZSAqLworCXBhdGFfczNjX2h3aW5pdChpbmZvLCBwZGF0YSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKKworCXJldHVybiBhdGFfaG9zdF9hY3RpdmF0ZShob3N0LCBpbmZvLT5pcnEsCisJCQlpbmZvLT5pcnEgPyBwYXRhX3MzY19pcnEgOiBOVUxMLAorCQkJMCwgJnBhdGFfczNjX3NodCk7CisKK3N0b3BfY2xrOgorCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CisJY2xrX3B1dChpbmZvLT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHBhdGFfczNjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzM2NfaWRlX2luZm8gKmluZm8gPSBob3N0LT5wcml2YXRlX2RhdGE7CisKKwlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKwljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCWNsa19wdXQoaW5mby0+Y2xrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBhdGFfczNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBhdGFfaG9zdF9zdXNwZW5kKGhvc3QsIFBNU0dfU1VTUEVORCk7Cit9CisKK3N0YXRpYyBpbnQgcGF0YV9zM2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHMzY19pZGVfcGxhdGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHMzY19pZGVfaW5mbyAqaW5mbyA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKworCXBhdGFfczNjX2h3aW5pdChpbmZvLCBwZGF0YSk7CisJYXRhX2hvc3RfcmVzdW1lKGhvc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwYXRhX3MzY19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBwYXRhX3MzY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGF0YV9zM2NfcmVzdW1lLAorfTsKKyNlbmRpZgorCisvKiBkcml2ZXIgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgcGF0YV9zM2NfZHJpdmVyX2lkc1tdID0geworCXsKKwkJLm5hbWUJCT0gInMzYzY0eHgtcGF0YSIsCisJCS5kcml2ZXJfZGF0YQk9IFRZUEVfUzNDNjRYWCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzNXBjMTAwLXBhdGEiLAorCQkuZHJpdmVyX2RhdGEJPSBUWVBFX1M1UEMxMDAsCisJfSwgeworCQkubmFtZQkJPSAiczVwdjIxMC1wYXRhIiwKKwkJLmRyaXZlcl9kYXRhCT0gVFlQRV9TNVBWMjEwLAorCX0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBwYXRhX3MzY19kcml2ZXJfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGF0YV9zM2NfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3AocGF0YV9zM2NfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBwYXRhX3MzY19kcml2ZXJfaWRzLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSVl9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnBhdGFfczNjX3BtX29wcywKKyNlbmRpZgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYXRhX3MzY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcGF0YV9zM2NfZHJpdmVyLCBwYXRhX3MzY19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYXRhX3MzY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhdGFfczNjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBhdGFfczNjX2luaXQpOworbW9kdWxlX2V4aXQocGF0YV9zM2NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFiaGlsYXNoIEtlc2F2YW4sIDxhLmtlc2F2YW5Ac2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImxvdy1sZXZlbCBkcml2ZXIgZm9yIFNhbXN1bmcgUEFUQSBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkOWRiM2Y4Li5mZTM2OTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTE2OCw4ICsxNjgsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjY19wY2lfdGJsW10gPSB7Ci0Je1BDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU0NDX0FUQSwKLQkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJeyBQQ0lfVkRFVklDRShUT1NISUJBXzIsIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9TQ0NfQVRBKSwgMH0sCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jIGIvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTI0YzFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9kd2NfNDYwZXguYwpAQCAtMCwwICsxLDE3NTYgQEAKKy8qCisgKiBkcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCisgKgorICogU3lub3BzeXMgRGVzaWduV2FyZSBDb3JlcyAoRFdDKSBTQVRBIGhvc3QgZHJpdmVyCisgKgorICogQXV0aG9yOiBNYXJrIE1pZXNmZWxkIDxtbWllc2ZlbGRAYW1jYy5jb20+CisgKgorICogUG9ydGVkIGZyb20gMi42LjE5LjIgdG8gMi42LjI1LzI2IGJ5IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyAqIENvcHlyaWdodCAyMDA4IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcKKyAqCisgKiBCYXNlZCBvbiB2ZXJzaW9ucyBwcm92aWRlZCBieSBBTUNDIGFuZCBTeW5vcHN5cyB3aGljaCBhcmU6CisgKiAgICAgICAgICBDb3B5cmlnaHQgMjAwNiBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uCisgKiAgICAgICAgICBDT1BZUklHSFQgKEMpIDIwMDUgIFNZTk9QU1lTLCBJTkMuICBBTEwgUklHSFRTIFJFU0VSVkVECisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZkZWYgQ09ORklHX1NBVEFfRFdDX0RFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TQVRBX0RXQ19WREVCVUcKKyNkZWZpbmUgVkVSQk9TRV9ERUJVRworI2RlZmluZSBERUJVR19OQ1EKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImxpYmF0YS5oIgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorCisjZGVmaW5lIERSVl9OQU1FICAgICAgICAic2F0YS1kd2MiCisjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiMS4wIgorCisvKiBTQVRBIERNQSBkcml2ZXIgR2xvYmFscyAqLworI2RlZmluZSBETUFfTlVNX0NIQU5TCQkxCisjZGVmaW5lIERNQV9OVU1fQ0hBTl9SRUdTCTgKKworLyogU0FUQSBETUEgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQUhCX0RNQV9CUlNUX0RGTFQJNjQJLyogMTYgZGF0YSBpdGVtcyBidXJzdCBsZW5ndGgqLworCitzdHJ1Y3QgZG1hcmVnIHsKKwl1MzIgbG93OwkJLyogTG93IGJpdHMgMC0zMSAqLworCXUzMiBoaWdoOwkJLyogSGlnaCBiaXRzIDMyLTYzICovCit9OworCisvKiBETUEgUGVyIENoYW5uZWwgcmVnaXN0ZXJzICovCitzdHJ1Y3QgZG1hX2NoYW5fcmVncyB7CisJc3RydWN0IGRtYXJlZyBzYXI7CS8qIFNvdXJjZSBBZGRyZXNzICovCisJc3RydWN0IGRtYXJlZyBkYXI7CS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlzdHJ1Y3QgZG1hcmVnIGxscDsJLyogTGlua2VkIExpc3QgUG9pbnRlciAqLworCXN0cnVjdCBkbWFyZWcgY3RsOwkvKiBDb250cm9sICovCisJc3RydWN0IGRtYXJlZyBzc3RhdDsJLyogU291cmNlIFN0YXR1cyBub3QgaW1wbGVtZW50ZWQgaW4gY29yZSAqLworCXN0cnVjdCBkbWFyZWcgZHN0YXQ7CS8qIERlc3RpbmF0aW9uIFN0YXR1cyBub3QgaW1wbGVtZW50ZWQgaW4gY29yZSovCisJc3RydWN0IGRtYXJlZyBzc3RhdGFyOwkvKiBTb3VyY2UgU3RhdHVzIEFkZHJlc3Mgbm90IGltcGwgaW4gY29yZSAqLworCXN0cnVjdCBkbWFyZWcgZHN0YXRhcjsJLyogRGVzdGluYXRpb24gU3RhdHVzIEFkZHJlc3Mgbm90IGltcGxlbWVudGUgKi8KKwlzdHJ1Y3QgZG1hcmVnIGNmZzsJLyogQ29uZmlnICovCisJc3RydWN0IGRtYXJlZyBzZ3I7CS8qIFNvdXJjZSBHYXRoZXIgKi8KKwlzdHJ1Y3QgZG1hcmVnIGRzcjsJLyogRGVzdGluYXRpb24gU2NhdHRlciAqLworfTsKKworLyogR2VuZXJpYyBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCitzdHJ1Y3QgZG1hX2ludGVycnVwdF9yZWdzIHsKKwlzdHJ1Y3QgZG1hcmVnIHRmcjsJLyogVHJhbnNmZXIgSW50ZXJydXB0ICovCisJc3RydWN0IGRtYXJlZyBibG9jazsJLyogQmxvY2sgSW50ZXJydXB0ICovCisJc3RydWN0IGRtYXJlZyBzcmN0cmFuOwkvKiBTb3VyY2UgVHJhbnNmZXIgSW50ZXJydXB0ICovCisJc3RydWN0IGRtYXJlZyBkc3R0cmFuOwkvKiBEZXN0IFRyYW5zZmVyIEludGVycnVwdCAqLworCXN0cnVjdCBkbWFyZWcgZXJyb3I7CS8qIEVycm9yICovCit9OworCitzdHJ1Y3QgYWhiX2RtYV9yZWdzIHsKKwlzdHJ1Y3QgZG1hX2NoYW5fcmVncwljaGFuX3JlZ3NbRE1BX05VTV9DSEFOX1JFR1NdOworCXN0cnVjdCBkbWFfaW50ZXJydXB0X3JlZ3MgaW50ZXJydXB0X3JhdzsJLyogUmF3IEludGVycnVwdCAqLworCXN0cnVjdCBkbWFfaW50ZXJydXB0X3JlZ3MgaW50ZXJydXB0X3N0YXR1czsJLyogSW50ZXJydXB0IFN0YXR1cyAqLworCXN0cnVjdCBkbWFfaW50ZXJydXB0X3JlZ3MgaW50ZXJydXB0X21hc2s7CS8qIEludGVycnVwdCBNYXNrICovCisJc3RydWN0IGRtYV9pbnRlcnJ1cHRfcmVncyBpbnRlcnJ1cHRfY2xlYXI7CS8qIEludGVycnVwdCBDbGVhciAqLworCXN0cnVjdCBkbWFyZWcJCXN0YXR1c0ludDsJLyogSW50ZXJydXB0IGNvbWJpbmVkKi8KKwlzdHJ1Y3QgZG1hcmVnCQlycV9zcmNyZWc7CS8qIFNyYyBUcmFucyBSZXEgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlycV9kc3RyZWc7CS8qIERzdCBUcmFucyBSZXEgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlycV9zZ2xfc3JjcmVnOwkvKiBTbmdsIFNyYyBUcmFucyBSZXEqLworCXN0cnVjdCBkbWFyZWcJCXJxX3NnbF9kc3RyZWc7CS8qIFNuZ2wgRHN0IFRyYW5zIFJlcSovCisJc3RydWN0IGRtYXJlZwkJcnFfbHN0X3NyY3JlZzsJLyogTGFzdCBTcmMgVHJhbnMgUmVxKi8KKwlzdHJ1Y3QgZG1hcmVnCQlycV9sc3RfZHN0cmVnOwkvKiBMYXN0IERzdCBUcmFucyBSZXEqLworCXN0cnVjdCBkbWFyZWcJCWRtYV9jZmc7CQkvKiBETUEgQ29uZmlnICovCisJc3RydWN0IGRtYXJlZwkJZG1hX2NoYW5fZW47CQkvKiBETUEgQ2hhbm5lbCBFbmFibGUqLworCXN0cnVjdCBkbWFyZWcJCWRtYV9pZDsJCQkvKiBETUEgSUQgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlkbWFfdGVzdDsJCS8qIERNQSBUZXN0ICovCisJc3RydWN0IGRtYXJlZwkJcmVzMTsJCQkvKiByZXNlcnZlZCAqLworCXN0cnVjdCBkbWFyZWcJCXJlczI7CQkJLyogcmVzZXJ2ZWQgKi8KKwkvKgorCSAqIERNQSBDb21wIFBhcmFtcworCSAqIFBhcmFtIDYgPSBkbWFfcGFyYW1bMF0sIFBhcmFtIDUgPSBkbWFfcGFyYW1bMV0sCisJICogUGFyYW0gNCA9IGRtYV9wYXJhbVsyXSAuLi4KKwkgKi8KKwlzdHJ1Y3QgZG1hcmVnCQlkbWFfcGFyYW1zWzZdOworfTsKKworLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIGxpbmtlZCBsaXN0IGl0ZW0gKi8KK3N0cnVjdCBsbGkgeworCXUzMgkJc2FyOwkJLyogU291cmNlIEFkZHJlc3MgKi8KKwl1MzIJCWRhcjsJCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwl1MzIJCWxscDsJCS8qIExpbmtlZCBMaXN0IFBvaW50ZXIgKi8KKwlzdHJ1Y3QgZG1hcmVnCWN0bDsJCS8qIENvbnRyb2wgKi8KKwlzdHJ1Y3QgZG1hcmVnCWRzdGF0OwkJLyogRGVzdGluYXRpb24gU3RhdHVzICovCit9OworCitlbnVtIHsKKwlTQVRBX0RXQ19ETUFDX0xMSV9TWiA9CShzaXplb2Yoc3RydWN0IGxsaSkpLAorCVNBVEFfRFdDX0RNQUNfTExJX05VTSA9CTI1NiwKKwlTQVRBX0RXQ19ETUFDX0xMSV9UQkxfU1ogPSAoU0FUQV9EV0NfRE1BQ19MTElfU1ogKiBcCisJCQkJCVNBVEFfRFdDX0RNQUNfTExJX05VTSksCisJU0FUQV9EV0NfRE1BQ19UV0lEVEhfQllURVMgPSA0LAorCVNBVEFfRFdDX0RNQUNfQ1RSTF9UU0laRV9NQVggPSAoMHgwMDAwMDgwMCAqIFwKKwkJCQkJCVNBVEFfRFdDX0RNQUNfVFdJRFRIX0JZVEVTKSwKK307CisKKy8qIERNQSBSZWdpc3RlciBPcGVyYXRpb24gQml0cyAqLworZW51bSB7CisJRE1BX0VOCT0JCTB4MDAwMDAwMDEsIC8qIEVuYWJsZSBBSEIgRE1BICovCisJRE1BX0NUTF9MTFBfU1JDRU4gPQkweDEwMDAwMDAwLCAvKiBCbGsgY2hhaW4gZW5hYmxlIFNyYyAqLworCURNQV9DVExfTExQX0RTVEVOID0JMHgwODAwMDAwMCwgLyogQmxrIGNoYWluIGVuYWJsZSBEc3QgKi8KK307CisKKyNkZWZpbmUJRE1BX0NUTF9CTEtfVFMoc2l6ZSkJKChzaXplKSAmIDB4MDAwMDAwRkZGKQkvKiBCbGsgVHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZSBETUFfQ0hBTk5FTChjaCkJCSgweDAwMDAwMDAxIDw8IChjaCkpCS8qIFNlbGVjdCBjaGFubmVsICovCisJLyogRW5hYmxlIGNoYW5uZWwgKi8KKyNkZWZpbmUJRE1BX0VOQUJMRV9DSEFOKGNoKQkoKDB4MDAwMDAwMDEgPDwgKGNoKSkgfAkJCVwKKwkJCQkgKCgweDAwMDAwMDAwMSA8PCAoY2gpKSA8PCA4KSkKKwkvKiBEaXNhYmxlIGNoYW5uZWwgKi8KKyNkZWZpbmUJRE1BX0RJU0FCTEVfQ0hBTihjaCkJKDB4MDAwMDAwMDAgfCAoKDB4MDAwMDAwMDAxIDw8IChjaCkpIDw8IDgpKQorCS8qIFRyYW5zZmVyIFR5cGUgJiBGbG93IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUJRE1BX0NUTF9UVEZDKHR5cGUpCSgoKHR5cGUpICYgMHg3KSA8PCAyMCkKKyNkZWZpbmUJRE1BX0NUTF9TTVMobnVtKQkoKChudW0pICYgMHgzKSA8PCAyNSkgLyogU3JjIE1hc3RlciBTZWxlY3QgKi8KKyNkZWZpbmUJRE1BX0NUTF9ETVMobnVtKQkoKChudW0pICYgMHgzKSA8PCAyMykvKiBEc3QgTWFzdGVyIFNlbGVjdCAqLworCS8qIFNyYyBCdXJzdCBUcmFuc2FjdGlvbiBMZW5ndGggKi8KKyNkZWZpbmUgRE1BX0NUTF9TUkNfTVNJWkUoc2l6ZSkgKCgoc2l6ZSkgJiAweDcpIDw8IDE0KQorCS8qIERzdCBCdXJzdCBUcmFuc2FjdGlvbiBMZW5ndGggKi8KKyNkZWZpbmUJRE1BX0NUTF9EU1RfTVNJWkUoc2l6ZSkgKCgoc2l6ZSkgJiAweDcpIDw8IDExKQorCS8qIFNvdXJjZSBUcmFuc2ZlciBXaWR0aCAqLworI2RlZmluZQlETUFfQ1RMX1NSQ19UUldJRChzaXplKSAoKChzaXplKSAmIDB4NykgPDwgNCkKKwkvKiBEZXN0aW5hdGlvbiBUcmFuc2ZlciBXaWR0aCAqLworI2RlZmluZQlETUFfQ1RMX0RTVF9UUldJRChzaXplKSAoKChzaXplKSAmIDB4NykgPDwgMSkKKworLyogQXNzaWduIEhXIGhhbmRzaGFraW5nIGludGVyZmFjZSAoeCkgdG8gZGVzdGluYXRpb24gLyBzb3VyY2UgcGVyaXBoZXJhbCAqLworI2RlZmluZQlETUFfQ0ZHX0hXX0hTX0RFU1QoaW50X251bSkgKCgoaW50X251bSkgJiAweEYpIDw8IDExKQorI2RlZmluZQlETUFfQ0ZHX0hXX0hTX1NSQyhpbnRfbnVtKSAoKChpbnRfbnVtKSAmIDB4RikgPDwgNykKKyNkZWZpbmUJRE1BX0xMUF9MTVMoYWRkciwgbWFzdGVyKSAoKChhZGRyKSAmIDB4ZmZmZmZmZmMpIHwgKG1hc3RlcikpCisKKy8qCisgKiBUaGlzIGRlZmluZSBpcyB1c2VkIHRvIHNldCBibG9jayBjaGFpbmluZyBkaXNhYmxlZCBpbiB0aGUgY29udHJvbCBsb3cKKyAqIHJlZ2lzdGVyLiAgSXQgaXMgYWxyZWFkeSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBzbyBpdCBjYW4gYmUgJidkIGRpcmN0bHkuCisgKiBJdCBpcyBlc3NlbnRpYWxseTogY3B1X3RvX2xlMzIofihETUFfQ1RMX0xMUF9TUkNFTiB8IERNQV9DVExfTExQX0RTVEVOKSkKKyAqLworZW51bSB7CisJRE1BX0NUTF9MTFBfRElTQUJMRV9MRTMyID0gMHhmZmZmZmZlNywKKwlETUFfQ1RMX1RURkNfUDJNX0RNQUMgPQkweDAwMDAwMDAyLCAvKiBQZXIgdG8gbWVtLCBETUFDIGNudHIgKi8KKwlETUFfQ1RMX1RURkNfTTJQX1BFUiA9CTB4MDAwMDAwMDMsIC8qIE1lbSB0byBwZXIsIHBlcmlwaGVyYWwgY250ciAqLworCURNQV9DVExfU0lOQ19JTkMgPQkweDAwMDAwMDAwLCAvKiBTb3VyY2UgQWRkcmVzcyBJbmNyZW1lbnQgKi8KKwlETUFfQ1RMX1NJTkNfREVDID0JMHgwMDAwMDIwMCwKKwlETUFfQ1RMX1NJTkNfTk9DSEFOR0UgPQkweDAwMDAwNDAwLAorCURNQV9DVExfRElOQ19JTkMgPQkweDAwMDAwMDAwLCAvKiBEZXN0aW5hdGlvbiBBZGRyZXNzIEluY3JlbWVudCAqLworCURNQV9DVExfRElOQ19ERUMgPQkweDAwMDAwMDgwLAorCURNQV9DVExfRElOQ19OT0NIQU5HRSA9CTB4MDAwMDAxMDAsCisJRE1BX0NUTF9JTlRfRU4gPQkweDAwMDAwMDAxLCAvKiBJbnRlcnJ1cHQgRW5hYmxlICovCisKKy8qIENoYW5uZWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBoaWdoIGJpdHMgKi8KKwlETUFfQ0ZHX0ZDTU9EX1JFUSA9CTB4MDAwMDAwMDEsIC8qIEZsb3cgQ29udHJvbCAtIHJlcXVlc3QgYmFzZWQgKi8KKwlETUFfQ0ZHX1BST1RDVEwJPQkoMHgwMDAwMDAwMyA8PCAyKSwvKiBQcm90ZWN0aW9uIENvbnRyb2wgKi8KKworLyogQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGxvdyBiaXRzICovCisJRE1BX0NGR19SRUxEX0RTVCA9CTB4ODAwMDAwMDAsIC8qIFJlbG9hZCBEZXN0IC8gU3JjIEFkZHIgKi8KKwlETUFfQ0ZHX1JFTERfU1JDID0JMHg0MDAwMDAwMCwKKwlETUFfQ0ZHX0hTX1NFTFNSQyA9CTB4MDAwMDA4MDAsIC8qIFNvZnR3YXJlIGhhbmRzaGFrZSBTcmMvIERlc3QgKi8KKwlETUFfQ0ZHX0hTX1NFTERTVCA9CTB4MDAwMDA0MDAsCisJRE1BX0NGR19GSUZPRU1QVFkgPSAgICAgKDB4MDAwMDAwMDEgPDwgOSksIC8qIEZJRk8gRW1wdHkgYml0ICovCisKKy8qIENoYW5uZWwgTGlua2VkIExpc3QgUG9pbnRlciBSZWdpc3RlciAqLworCURNQV9MTFBfQUhCTUFTVEVSMSA9CTAsCS8qIExpc3QgTWFzdGVyIFNlbGVjdCAqLworCURNQV9MTFBfQUhCTUFTVEVSMiA9CTEsCisKKwlTQVRBX0RXQ19NQVhfUE9SVFMgPSAxLAorCisJU0FUQV9EV0NfU0NSX09GRlNFVCA9IDB4MjQsCisJU0FUQV9EV0NfUkVHX09GRlNFVCA9IDB4NjQsCit9OworCisvKiBEV0MgU0FUQSBSZWdpc3RlcnMgKi8KK3N0cnVjdCBzYXRhX2R3Y19yZWdzIHsKKwl1MzIgZnB0YWdyOwkJLyogMXN0IHBhcnR5IERNQSB0YWcgKi8KKwl1MzIgZnBib3I7CQkvKiAxc3QgcGFydHkgRE1BIGJ1ZmZlciBvZmZzZXQgKi8KKwl1MzIgZnB0Y3I7CQkvKiAxc3QgcGFydHkgRE1BIFhmciBjb3VudCAqLworCXUzMiBkbWFjcjsJCS8qIERNQSBDb250cm9sICovCisJdTMyIGRidHNyOwkJLyogRE1BIEJ1cnN0IFRyYW5zYWMgc2l6ZSAqLworCXUzMiBpbnRwcjsJCS8qIEludGVycnVwdCBQZW5kaW5nICovCisJdTMyIGludG1yOwkJLyogSW50ZXJydXB0IE1hc2sgKi8KKwl1MzIgZXJybXI7CQkvKiBFcnJvciBNYXNrICovCisJdTMyIGxsY3I7CQkvKiBMaW5rIExheWVyIENvbnRyb2wgKi8KKwl1MzIgcGh5Y3I7CQkvKiBQSFkgQ29udHJvbCAqLworCXUzMiBwaHlzcjsJCS8qIFBIWSBTdGF0dXMgKi8KKwl1MzIgcnhiaXN0cGQ7CQkvKiBSZWN2ZCBCSVNUIHBhdHRlcm4gZGVmIHJlZ2lzdGVyICovCisJdTMyIHJ4YmlzdHBkMTsJCS8qIFJlY3ZkIEJJU1QgZGF0YSBkd29yZDEgKi8KKwl1MzIgcnhiaXN0cGQyOwkJLyogUmVjdmQgQklTVCBwYXR0ZXJuIGRhdGEgZHdvcmQyICovCisJdTMyIHR4YmlzdHBkOwkJLyogVHJhbnMgQklTVCBwYXR0ZXJuIGRlZiByZWdpc3RlciAqLworCXUzMiB0eGJpc3RwZDE7CQkvKiBUcmFucyBCSVNUIGRhdGEgZHdvcmQxICovCisJdTMyIHR4YmlzdHBkMjsJCS8qIFRyYW5zIEJJU1QgZGF0YSBkd29yZDIgKi8KKwl1MzIgYmlzdGNyOwkJLyogQklTVCBDb250cm9sIFJlZ2lzdGVyICovCisJdTMyIGJpc3RmY3RyOwkJLyogQklTVCBGSVMgQ291bnQgUmVnaXN0ZXIgKi8KKwl1MzIgYmlzdHNyOwkJLyogQklTVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIgYmlzdGRlY3I7CQkvKiBCSVNUIER3b3JkIEVycm9yIGNvdW50IHJlZ2lzdGVyICovCisJdTMyIHJlc1sxNV07CQkvKiBSZXNlcnZlZCBsb2NhdGlvbnMgKi8KKwl1MzIgdGVzdHI7CQkvKiBUZXN0IFJlZ2lzdGVyICovCisJdTMyIHZlcnNpb25yOwkJLyogVmVyc2lvbiBSZWdpc3RlciAqLworCXUzMiBpZHI7CQkvKiBJRCBSZWdpc3RlciAqLworCXUzMiB1bmltcGxbMTkyXTsJLyogVW5pbXBsZW1lbnRlZCAqLworCXUzMiBkbWFkclsyNTZdOwkvKiBGSUZPIExvY2F0aW9ucyBpbiBETUEgTW9kZSAqLworfTsKKworZW51bSB7CisJU0NSX1NDT05UUk9MX0RFVF9FTkFCTEUJPQkweDAwMDAwMDAxLAorCVNDUl9TU1RBVFVTX0RFVF9QUkVTRU5UCT0JMHgwMDAwMDAwMSwKKwlTQ1JfU0VSUk9SX0RJQUdfWAk9CTB4MDQwMDAwMDAsCisvKiBEV0MgU0FUQSBSZWdpc3RlciBPcGVyYXRpb25zICovCisJU0FUQV9EV0NfVFhGSUZPX0RFUFRICT0JMHgwMUZGLAorCVNBVEFfRFdDX1JYRklGT19ERVBUSAk9CTB4MDFGRiwKKwlTQVRBX0RXQ19ETUFDUl9UTU9EX1RYQ0hFTiA9CTB4MDAwMDAwMDQsCisJU0FUQV9EV0NfRE1BQ1JfVFhDSEVOCT0gKDB4MDAwMDAwMDEgfCBTQVRBX0RXQ19ETUFDUl9UTU9EX1RYQ0hFTiksCisJU0FUQV9EV0NfRE1BQ1JfUlhDSEVOCT0gKDB4MDAwMDAwMDIgfCBTQVRBX0RXQ19ETUFDUl9UTU9EX1RYQ0hFTiksCisJU0FUQV9EV0NfRE1BQ1JfVFhSWENIX0NMRUFSID0JU0FUQV9EV0NfRE1BQ1JfVE1PRF9UWENIRU4sCisJU0FUQV9EV0NfSU5UUFJfRE1BVAk9CTB4MDAwMDAwMDEsCisJU0FUQV9EV0NfSU5UUFJfTkVXRlAJPQkweDAwMDAwMDAyLAorCVNBVEFfRFdDX0lOVFBSX1BNQUJSVAk9CTB4MDAwMDAwMDQsCisJU0FUQV9EV0NfSU5UUFJfRVJSCT0JMHgwMDAwMDAwOCwKKwlTQVRBX0RXQ19JTlRQUl9ORVdCSVNUCT0JMHgwMDAwMDAxMCwKKwlTQVRBX0RXQ19JTlRQUl9JUEYJPQkweDEwMDAwMDAwLAorCVNBVEFfRFdDX0lOVE1SX0RNQVRNCT0JMHgwMDAwMDAwMSwKKwlTQVRBX0RXQ19JTlRNUl9ORVdGUE0JPQkweDAwMDAwMDAyLAorCVNBVEFfRFdDX0lOVE1SX1BNQUJSVE0JPQkweDAwMDAwMDA0LAorCVNBVEFfRFdDX0lOVE1SX0VSUk0JPQkweDAwMDAwMDA4LAorCVNBVEFfRFdDX0lOVE1SX05FV0JJU1RNCT0JMHgwMDAwMDAxMCwKKwlTQVRBX0RXQ19MTENSX1NDUkFNRU4JPQkweDAwMDAwMDAxLAorCVNBVEFfRFdDX0xMQ1JfREVTQ1JBTUVOCT0JMHgwMDAwMDAwMiwKKwlTQVRBX0RXQ19MTENSX1JQREVOCT0JMHgwMDAwMDAwNCwKKy8qIFRoaXMgaXMgYWxsIGVycm9yIGJpdHMsIHplcm8ncyBhcmUgcmVzZXJ2ZWQgZmllbGRzLiAqLworCVNBVEFfRFdDX1NFUlJPUl9FUlJfQklUUyA9CTB4MEZGRjBGMDMKK307CisKKyNkZWZpbmUgU0FUQV9EV0NfU0NSMF9TUERfR0VUKHYpCSgoKHYpID4+IDQpICYgMHgwMDAwMDAwRikKKyNkZWZpbmUgU0FUQV9EV0NfRE1BQ1JfVFhfQ0xFQVIodikJKCgodikgJiB+U0FUQV9EV0NfRE1BQ1JfVFhDSEVOKSB8XAorCQkJCQkJIFNBVEFfRFdDX0RNQUNSX1RNT0RfVFhDSEVOKQorI2RlZmluZSBTQVRBX0RXQ19ETUFDUl9SWF9DTEVBUih2KQkoKCh2KSAmIH5TQVRBX0RXQ19ETUFDUl9SWENIRU4pIHxcCisJCQkJCQkgU0FUQV9EV0NfRE1BQ1JfVE1PRF9UWENIRU4pCisjZGVmaW5lIFNBVEFfRFdDX0RCVFNSX01XUihzaXplKQkoKChzaXplKS80KSAmIFNBVEFfRFdDX1RYRklGT19ERVBUSCkKKyNkZWZpbmUgU0FUQV9EV0NfREJUU1JfTVJEKHNpemUpCSgoKChzaXplKS80KSAmIFNBVEFfRFdDX1JYRklGT19ERVBUSClcCisJCQkJCQkgPDwgMTYpCitzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwkJLyogZ2VuZXJpYyBkZXZpY2Ugc3RydWN0ICovCisJc3RydWN0IGF0YV9wcm9iZV9lbnQJKnBlOwkJLyogcHRyIHRvIHByb2JlLWVudCAqLworCXN0cnVjdCBhdGFfaG9zdAkJKmhvc3Q7CisJdTgJCQkqcmVnX2Jhc2U7CisJc3RydWN0IHNhdGFfZHdjX3JlZ3MJKnNhdGFfZHdjX3JlZ3M7CS8qIERXIFN5bm9wc3lzIFNBVEEgc3BlY2lmaWMgKi8KKwlpbnQJCQlpcnFfZG1hOworfTsKKworI2RlZmluZSBTQVRBX0RXQ19RQ01EX01BWAkzMgorCitzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgeworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UJKmhzZGV2OworCWludAkJCWNtZF9pc3N1ZWRbU0FUQV9EV0NfUUNNRF9NQVhdOworCXN0cnVjdCBsbGkJCSpsbGl0W1NBVEFfRFdDX1FDTURfTUFYXTsgIC8qIERNQSBMTEkgdGFibGUgKi8KKwlkbWFfYWRkcl90CQlsbGl0X2RtYVtTQVRBX0RXQ19RQ01EX01BWF07CisJdTMyCQkJZG1hX2NoYW5bU0FUQV9EV0NfUUNNRF9NQVhdOworCWludAkJCWRtYV9wZW5kaW5nW1NBVEFfRFdDX1FDTURfTUFYXTsKK307CisKKy8qCisgKiBDb21tb25seSB1c2VkIERXQyBTQVRBIGRyaXZlciBNYWNyb3MKKyAqLworI2RlZmluZSBIU0RFVl9GUk9NX0hPU1QoaG9zdCkgICgoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqKVwKKwkJCQkJKGhvc3QpLT5wcml2YXRlX2RhdGEpCisjZGVmaW5lIEhTREVWX0ZST01fQVAoYXApICAoKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKilcCisJCQkJCShhcCktPmhvc3QtPnByaXZhdGVfZGF0YSkKKyNkZWZpbmUgSFNERVZQX0ZST01fQVAoYXApICAgKChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKilcCisJCQkJCShhcCktPnByaXZhdGVfZGF0YSkKKyNkZWZpbmUgSFNERVZfRlJPTV9RQyhxYykJKChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICopXAorCQkJCQkocWMpLT5hcC0+aG9zdC0+cHJpdmF0ZV9kYXRhKQorI2RlZmluZSBIU0RFVl9GUk9NX0hTREVWUChwKQkoKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKilcCisJCQkJCQkoaHNkZXZwKS0+aHNkZXYpCisKK2VudW0geworCVNBVEFfRFdDX0NNRF9JU1NVRURfTk9UCQk9IDAsCisJU0FUQV9EV0NfQ01EX0lTU1VFRF9QRU5ECT0gMSwKKwlTQVRBX0RXQ19DTURfSVNTVUVEX0VYRUMJPSAyLAorCVNBVEFfRFdDX0NNRF9JU1NVRURfTk9EQVRBCT0gMywKKworCVNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkUJPSAwLAorCVNBVEFfRFdDX0RNQV9QRU5ESU5HX1RYCQk9IDEsCisJU0FUQV9EV0NfRE1BX1BFTkRJTkdfUlgJCT0gMiwKK307CisKK3N0cnVjdCBzYXRhX2R3Y19ob3N0X3ByaXYgeworCXZvaWQJX19pb21lbQkgKnNjcl9hZGRyX3NzdGF0dXM7CisJdTMyCXNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkIDsKKwl1MzIJc2F0YV9kd2Nfc2FjdGl2ZV9xdWV1ZWQgOworCXUzMglkbWFfaW50ZXJydXB0X2NvdW50OworCXN0cnVjdAlhaGJfZG1hX3JlZ3MJKnNhdGFfZG1hX3JlZ3M7CisJc3RydWN0CWRldmljZQkqZHdjX2RldjsKK307CitzdHJ1Y3Qgc2F0YV9kd2NfaG9zdF9wcml2IGhvc3RfcHZ0OworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworc3RhdGljIHZvaWQgc2F0YV9kd2NfYm1kbWFfc3RhcnRfYnlfdGFnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHU4IHRhZyk7CitzdGF0aWMgaW50IHNhdGFfZHdjX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsCisJCQkJdTMyIGNoZWNrX3N0YXR1cyk7CitzdGF0aWMgdm9pZCBzYXRhX2R3Y19kbWFfeGZlcl9jb21wbGV0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MzIgY2hlY2tfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2NsZWFyX2RtYWNyKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwLCB1OCB0YWcpOworc3RhdGljIGludCBkbWFfZHdjX2luaXQoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYsIGludCBpcnEpOworc3RhdGljIHZvaWQgZG1hX2R3Y19leGl0KHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2KTsKK3N0YXRpYyBpbnQgZG1hX2R3Y194ZmVyX3NldHVwKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fZWxlbXMsCisJCQkgICAgICBzdHJ1Y3QgbGxpICpsbGksIGRtYV9hZGRyX3QgZG1hX2xsaSwKKwkJCSAgICAgIHZvaWQgX19pb21lbSAqYWRkciwgaW50IGRpcik7CitzdGF0aWMgdm9pZCBkbWFfZHdjX3hmZXJfc3RhcnQoaW50IGRtYV9jaCk7CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX3RmX2R1bXAoc3RydWN0IGF0YV90YXNrZmlsZSAqdGYpCit7CisJZGV2X3ZkYmcoaG9zdF9wdnQuZHdjX2RldiwgInRhc2tmaWxlIGNtZDogMHglMDJ4IHByb3RvY29sOiAlcyBmbGFnczoiCisJCSIweCVseCBkZXZpY2U6ICV4XG4iLCB0Zi0+Y29tbWFuZCwgYXRhX2dldF9jbWRfZGVzY3JpcHRcCisJCSh0Zi0+cHJvdG9jb2wpLCB0Zi0+ZmxhZ3MsIHRmLT5kZXZpY2UpOworCWRldl92ZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICJmZWF0dXJlOiAweCUwMnggbnNlY3Q6IDB4JXggbGJhbDogMHgleCAiCisJCSJsYmFtOiAweCV4IGxiYWg6IDB4JXhcbiIsIHRmLT5mZWF0dXJlLCB0Zi0+bnNlY3QsIHRmLT5sYmFsLAorCQkgdGYtPmxiYW0sIHRmLT5sYmFoKTsKKwlkZXZfdmRiZyhob3N0X3B2dC5kd2NfZGV2LCAiaG9iX2ZlYXR1cmU6IDB4JTAyeCBob2JfbnNlY3Q6IDB4JXggIgorCQkiaG9iX2xiYWw6IDB4JXggaG9iX2xiYW06IDB4JXggaG9iX2xiYWg6IDB4JXhcbiIsCisJCXRmLT5ob2JfZmVhdHVyZSwgdGYtPmhvYl9uc2VjdCwgdGYtPmhvYl9sYmFsLCB0Zi0+aG9iX2xiYW0sCisJCXRmLT5ob2JfbGJhaCk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogZ2V0X2J1cnN0X2xlbmd0aF9lbmNvZGUKKyAqIGFyZ3VtZW50czogZGF0YWxlbmd0aDogbGVuZ3RoIGluIGJ5dGVzIG9mIGRhdGEKKyAqIHJldHVybnMgdmFsdWUgdG8gYmUgcHJvZ3JhbW1lZCBpbiByZWdpc3RlciBjb3JycmVzcG9uZGluZyB0byBkYXRhIGxlbmd0aAorICogVGhpcyB2YWx1ZSBpcyBlZmZlY3RpdmVseSB0aGUgbG9nKGJhc2UgMikgb2YgdGhlIGxlbmd0aAorICovCitzdGF0aWMgIGludCBnZXRfYnVyc3RfbGVuZ3RoX2VuY29kZShpbnQgZGF0YWxlbmd0aCkKK3sKKwlpbnQgaXRlbXMgPSBkYXRhbGVuZ3RoID4+IDI7CS8qIGRpdiBieSA0IHRvIGdldCBsd29yZCBjb3VudCAqLworCisJaWYgKGl0ZW1zID49IDY0KQorCQlyZXR1cm4gNTsKKworCWlmIChpdGVtcyA+PSAzMikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoaXRlbXMgPj0gMTYpCisJCXJldHVybiAzOworCisJaWYgKGl0ZW1zID49IDgpCisJCXJldHVybiAyOworCisJaWYgKGl0ZW1zID49IDQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyAgdm9pZCBjbGVhcl9jaGFuX2ludGVycnVwdHMoaW50IGMpCit7CisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfY2xlYXIudGZyLmxvdyksCisJCSBETUFfQ0hBTk5FTChjKSk7CisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfY2xlYXIuYmxvY2subG93KSwKKwkJIERNQV9DSEFOTkVMKGMpKTsKKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhci5zcmN0cmFuLmxvdyksCisJCSBETUFfQ0hBTk5FTChjKSk7CisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfY2xlYXIuZHN0dHJhbi5sb3cpLAorCQkgRE1BX0NIQU5ORUwoYykpOworCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+aW50ZXJydXB0X2NsZWFyLmVycm9yLmxvdyksCisJCSBETUFfQ0hBTk5FTChjKSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogZG1hX3JlcXVlc3RfY2hhbm5lbAorICogYXJndW1lbnRzOiBOb25lCisgKiByZXR1cm5zIGNoYW5uZWwgbnVtYmVyIGlmIGF2YWlsYWJsZSBlbHNlIC0xCisgKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgdGhlIG5leHQgYXZhaWxhYmxlIERNQSBjaGFubmVsIGZyb20gdGhlIGxpc3QgdG8gdGhlCisgKiByZXF1ZXN0ZXIKKyAqLworc3RhdGljIGludCBkbWFfcmVxdWVzdF9jaGFubmVsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRE1BX05VTV9DSEFOUzsgaSsrKSB7CisJCWlmICghKGluX2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5kbWFfY2hhbl9lbi5sb3cpKSAmXAorCQkJRE1BX0NIQU5ORUwoaSkpKQorCQkJcmV0dXJuIGk7CisJfQorCWRldl9lcnIoaG9zdF9wdnQuZHdjX2RldiwgIiVzIE5PIGNoYW5uZWwgY2hhbl9lbjogMHglMDh4XG4iLCBfX2Z1bmNfXywKKwkJaW5fbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmRtYV9jaGFuX2VuLmxvdykpKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogZG1hX2R3Y19pbnRlcnJ1cHQKKyAqIGFyZ3VtZW50czogaXJxLCBkZXZfaWQsIHB0X3JlZ3MKKyAqIHJldHVybnMgY2hhbm5lbCBudW1iZXIgaWYgYXZhaWxhYmxlIGVsc2UgLTEKKyAqIEludGVycnVwdCBIYW5kbGVyIGZvciBEVyBBSEIgU0FUQSBETUEKKyAqLworc3RhdGljIGlycXJldHVybl90IGRtYV9kd2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmhzZGV2X2luc3RhbmNlKQoreworCWludCBjaGFuOworCXUzMiB0ZnJfcmVnLCBlcnJfcmVnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPQorCQkoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqKWhzZGV2X2luc3RhbmNlOworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgYXRhX2hvc3QgKiloc2Rldi0+aG9zdDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwOworCXU4IHRhZyA9IDA7CisJdW5zaWduZWQgaW50IHBvcnQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlhcCA9IGhvc3QtPnBvcnRzW3BvcnRdOworCWhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwl0YWcgPSBhcC0+bGluay5hY3RpdmVfdGFnOworCisJdGZyX3JlZyA9IGluX2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfc3RhdHVzLnRmclwKKwkJCS5sb3cpKTsKKwllcnJfcmVnID0gaW5fbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9zdGF0dXMuZXJyb3JcCisJCQkubG93KSk7CisKKwlkZXZfZGJnKGFwLT5kZXYsICJlb3Q9MHglMDh4IGVycj0weCUwOHggcGVuZGluZz0lZCBhY3RpdmUgcG9ydD0lZFxuIiwKKwkJdGZyX3JlZywgZXJyX3JlZywgaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddLCBwb3J0KTsKKworCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBETUFfTlVNX0NIQU5TOyBjaGFuKyspIHsKKwkJLyogQ2hlY2sgZm9yIGVuZC1vZi10cmFuc2ZlciBpbnRlcnJ1cHQuICovCisJCWlmICh0ZnJfcmVnICYgRE1BX0NIQU5ORUwoY2hhbikpIHsKKwkJCS8qCisJCQkgKiBFYWNoIERNQSBjb21tYW5kIHByb2R1Y2VzIDIgaW50ZXJydXB0cy4gIE9ubHkKKwkJCSAqIGNvbXBsZXRlIHRoZSBjb21tYW5kIGFmdGVyIGJvdGggaW50ZXJydXB0cyBoYXZlIGJlZW4KKwkJCSAqIHNlZW4uIChTZWUgc2F0YV9kd2NfaXNyKCkpCisJCQkgKi8KKwkJCWhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQrKzsKKwkJCXNhdGFfZHdjX2NsZWFyX2RtYWNyKGhzZGV2cCwgdGFnKTsKKworCQkJaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PQorCQkJICAgIFNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkUpIHsKKwkJCQlkZXZfZXJyKGFwLT5kZXYsICJETUEgbm90IHBlbmRpbmcgZW90PTB4JTA4eCAiCisJCQkJCSJlcnI9MHglMDh4IHRhZz0weCUwMnggcGVuZGluZz0lZFxuIiwKKwkJCQkJdGZyX3JlZywgZXJyX3JlZywgdGFnLAorCQkJCQloc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10pOworCQkJfQorCisJCQlpZiAoKGhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQgJSAyKSA9PSAwKQorCQkJCXNhdGFfZHdjX2RtYV94ZmVyX2NvbXBsZXRlKGFwLCAxKTsKKworCQkJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLworCQkJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfY2xlYXJcCisJCQkJLnRmci5sb3cpLAorCQkJCSBETUFfQ0hBTk5FTChjaGFuKSk7CisJCX0KKworCQkvKiBDaGVjayBmb3IgZXJyb3IgaW50ZXJydXB0LiAqLworCQlpZiAoZXJyX3JlZyAmIERNQV9DSEFOTkVMKGNoYW4pKSB7CisJCQkvKiBUT0RPIE5lZWQgZXJyb3IgaGFuZGxlciAhICovCisJCQlkZXZfZXJyKGFwLT5kZXYsICJlcnJvciBpbnRlcnJ1cHQgZXJyX3JlZz0weCUwOHhcbiIsCisJCQkJZXJyX3JlZyk7CisKKwkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQuICovCisJCQlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmludGVycnVwdF9jbGVhclwKKwkJCQkuZXJyb3IubG93KSwKKwkJCQkgRE1BX0NIQU5ORUwoY2hhbikpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogZG1hX3JlcXVlc3RfaW50ZXJydXB0cworICogYXJndW1lbnRzOiBoc2RldgorICogcmV0dXJucyBzdGF0dXMKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIElTUiBmb3IgYSBwYXJ0aWN1bGFyIERNQSBjaGFubmVsIGludGVycnVwdAorICovCitzdGF0aWMgaW50IGRtYV9yZXF1ZXN0X2ludGVycnVwdHMoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYsIGludCBpcnEpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGNoYW47CisKKwlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgRE1BX05VTV9DSEFOUzsgY2hhbisrKSB7CisJCS8qIFVubWFzayBlcnJvciBpbnRlcnJ1cHQgKi8KKwkJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzKS0+aW50ZXJydXB0X21hc2suZXJyb3IubG93LAorCQkJIERNQV9FTkFCTEVfQ0hBTihjaGFuKSk7CisKKwkJLyogVW5tYXNrIGVuZC1vZi10cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKwkJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzKS0+aW50ZXJydXB0X21hc2sudGZyLmxvdywKKwkJCSBETUFfRU5BQkxFX0NIQU4oY2hhbikpOworCX0KKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgZG1hX2R3Y19pbnRlcnJ1cHQsIDAsICJTQVRBIERNQSIsIGhzZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBjb3VsZCBub3QgZ2V0IElSUSAlZFxuIiwKKwkJX19mdW5jX18sIGlycSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIE1hcmsgdGhpcyBpbnRlcnJ1cHQgYXMgcmVxdWVzdGVkICovCisJaHNkZXYtPmlycV9kbWEgPSBpcnE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogbWFwX3NnX3RvX2xsaQorICogVGhlIFN5bm9wc2lzIGRyaXZlciBoYXMgYSBjb21tZW50IHByb3Bvc2luZyB0aGF0IGJldHRlciBwZXJmb3JtYW5jZQorICogaXMgcG9zc2libGUgYnkgb25seSBlbmFibGluZyBpbnRlcnJ1cHRzIG9uIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpbmtlZCBsaXN0LgorICogSG93ZXZlciwgaXQgc2VlbXMgdGhhdCBjb3VsZCBiZSBhIHByb2JsZW0gaWYgYW4gZXJyb3IgaGFwcGVuZWQgb24gb25lIG9mIHRoZQorICogZmlyc3QgaXRlbXMuICBUaGUgdHJhbnNmZXIgd291bGQgaGFsdCwgYnV0IG5vIGVycm9yIGludGVycnVwdCB3b3VsZCBvY2N1ci4KKyAqIEN1cnJlbnRseSB0aGlzIGZ1bmN0aW9uIHNldHMgaW50ZXJydXB0cyBlbmFibGVkIGZvciBlYWNoIGxpbmtlZCBsaXN0IGl0ZW06CisgKiBETUFfQ1RMX0lOVF9FTi4KKyAqLworc3RhdGljIGludCBtYXBfc2dfdG9fbGxpKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBudW1fZWxlbXMsCisJCQlzdHJ1Y3QgbGxpICpsbGksIGRtYV9hZGRyX3QgZG1hX2xsaSwKKwkJCXZvaWQgX19pb21lbSAqZG1hZHJfYWRkciwgaW50IGRpcikKK3sKKwlpbnQgaSwgaWR4ID0gMDsKKwlpbnQgZmlzX2xlbiA9IDA7CisJZG1hX2FkZHJfdCBuZXh0X2xscDsKKwlpbnQgYmw7CisKKwlkZXZfZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICIlczogc2c9JXAgbmVsZW09JWQgbGxpPSVwIGRtYV9sbGk9MHglMDh4IgorCQkiIGRtYWRyPTB4JTA4eFxuIiwgX19mdW5jX18sIHNnLCBudW1fZWxlbXMsIGxsaSwgKHUzMilkbWFfbGxpLAorCQkodTMyKWRtYWRyX2FkZHIpOworCisJYmwgPSBnZXRfYnVyc3RfbGVuZ3RoX2VuY29kZShBSEJfRE1BX0JSU1RfREZMVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW1zOyBpKyssIHNnKyspIHsKKwkJdTMyIGFkZHIsIG9mZnNldDsKKwkJdTMyIHNnX2xlbiwgbGVuOworCisJCWFkZHIgPSAodTMyKSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBlbGVtPSVkIHNnX2FkZHI9MHgleCBzZ19sZW4iCisJCQkiPSVkXG4iLCBfX2Z1bmNfXywgaSwgYWRkciwgc2dfbGVuKTsKKworCQl3aGlsZSAoc2dfbGVuKSB7CisJCQlpZiAoaWR4ID49IFNBVEFfRFdDX0RNQUNfTExJX05VTSkgeworCQkJCS8qIFRoZSBMTEkgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaC4gKi8KKwkJCQlkZXZfZXJyKGhvc3RfcHZ0LmR3Y19kZXYsICJMTEkgdGFibGUgb3ZlcnJ1biAiCisJCQkJIihpZHg9JWQpXG4iLCBpZHgpOworCQkJCWJyZWFrOworCQkJfQorCQkJbGVuID0gKHNnX2xlbiA+IFNBVEFfRFdDX0RNQUNfQ1RSTF9UU0laRV9NQVgpID8KKwkJCQlTQVRBX0RXQ19ETUFDX0NUUkxfVFNJWkVfTUFYIDogc2dfbGVuOworCisJCQlvZmZzZXQgPSBhZGRyICYgMHhmZmZmOworCQkJaWYgKChvZmZzZXQgKyBzZ19sZW4pID4gMHgxMDAwMCkKKwkJCQlsZW4gPSAweDEwMDAwIC0gb2Zmc2V0OworCisJCQkvKgorCQkJICogTWFrZSBzdXJlIGEgTExJIGJsb2NrIGlzIG5vdCBjcmVhdGVkIHRoYXQgd2lsbCBzcGFuCisJCQkgKiA4SyBtYXggRklTIGJvdW5kYXJ5LiAgSWYgdGhlIGJsb2NrIHNwYW5zIHN1Y2ggYSBGSVMKKwkJCSAqIGJvdW5kYXJ5LCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IGEgRE1BIGJ1cnN0IHdpbGwKKwkJCSAqIGNyb3NzIHRoYXQgYm91bmRhcnkgLS0gdGhpcyByZXN1bHRzIGluIGFuIGVycm9yIGluCisJCQkgKiB0aGUgaG9zdCBjb250cm9sbGVyLgorCQkJICovCisJCQlpZiAoZmlzX2xlbiArIGxlbiA+IDgxOTIpIHsKKwkJCQlkZXZfZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICJTUExJVFRJTkc6IGZpc19sZW49IgorCQkJCQkiJWQoMHgleCkgbGVuPSVkKDB4JXgpXG4iLCBmaXNfbGVuLAorCQkJCQkgZmlzX2xlbiwgbGVuLCBsZW4pOworCQkJCWxlbiA9IDgxOTIgLSBmaXNfbGVuOworCQkJCWZpc19sZW4gPSAwOworCQkJfSBlbHNlIHsKKwkJCQlmaXNfbGVuICs9IGxlbjsKKwkJCX0KKwkJCWlmIChmaXNfbGVuID09IDgxOTIpCisJCQkJZmlzX2xlbiA9IDA7CisKKwkJCS8qCisJCQkgKiBTZXQgRE1BIGFkZHJlc3NlcyBhbmQgbG93ZXIgaGFsZiBvZiBjb250cm9sIHJlZ2lzdGVyCisJCQkgKiBiYXNlZCBvbiBkaXJlY3Rpb24uCisJCQkgKi8KKwkJCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCQkJbGxpW2lkeF0uZGFyID0gY3B1X3RvX2xlMzIoYWRkcik7CisJCQkJbGxpW2lkeF0uc2FyID0gY3B1X3RvX2xlMzIoKHUzMilkbWFkcl9hZGRyKTsKKworCQkJCWxsaVtpZHhdLmN0bC5sb3cgPSBjcHVfdG9fbGUzMigKKwkJCQkJRE1BX0NUTF9UVEZDKERNQV9DVExfVFRGQ19QMk1fRE1BQykgfAorCQkJCQlETUFfQ1RMX1NNUygwKSB8CisJCQkJCURNQV9DVExfRE1TKDEpIHwKKwkJCQkJRE1BX0NUTF9TUkNfTVNJWkUoYmwpIHwKKwkJCQkJRE1BX0NUTF9EU1RfTVNJWkUoYmwpIHwKKwkJCQkJRE1BX0NUTF9TSU5DX05PQ0hBTkdFIHwKKwkJCQkJRE1BX0NUTF9TUkNfVFJXSUQoMikgfAorCQkJCQlETUFfQ1RMX0RTVF9UUldJRCgyKSB8CisJCQkJCURNQV9DVExfSU5UX0VOIHwKKwkJCQkJRE1BX0NUTF9MTFBfU1JDRU4gfAorCQkJCQlETUFfQ1RMX0xMUF9EU1RFTik7CisJCQl9IGVsc2UgewkvKiBETUFfVE9fREVWSUNFICovCisJCQkJbGxpW2lkeF0uc2FyID0gY3B1X3RvX2xlMzIoYWRkcik7CisJCQkJbGxpW2lkeF0uZGFyID0gY3B1X3RvX2xlMzIoKHUzMilkbWFkcl9hZGRyKTsKKworCQkJCWxsaVtpZHhdLmN0bC5sb3cgPSBjcHVfdG9fbGUzMigKKwkJCQkJRE1BX0NUTF9UVEZDKERNQV9DVExfVFRGQ19NMlBfUEVSKSB8CisJCQkJCURNQV9DVExfU01TKDEpIHwKKwkJCQkJRE1BX0NUTF9ETVMoMCkgfAorCQkJCQlETUFfQ1RMX1NSQ19NU0laRShibCkgfAorCQkJCQlETUFfQ1RMX0RTVF9NU0laRShibCkgfAorCQkJCQlETUFfQ1RMX0RJTkNfTk9DSEFOR0UgfAorCQkJCQlETUFfQ1RMX1NSQ19UUldJRCgyKSB8CisJCQkJCURNQV9DVExfRFNUX1RSV0lEKDIpIHwKKwkJCQkJRE1BX0NUTF9JTlRfRU4gfAorCQkJCQlETUFfQ1RMX0xMUF9TUkNFTiB8CisJCQkJCURNQV9DVExfTExQX0RTVEVOKTsKKwkJCX0KKworCQkJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LCAiJXMgc2V0dGluZyBjdGwuaGlnaCBsZW46ICIKKwkJCQkiMHglMDh4IHZhbDogMHglMDh4XG4iLCBfX2Z1bmNfXywKKwkJCQlsZW4sIERNQV9DVExfQkxLX1RTKGxlbiAvIDQpKTsKKworCQkJLyogUHJvZ3JhbSB0aGUgTExJIENUTCBoaWdoIHJlZ2lzdGVyICovCisJCQlsbGlbaWR4XS5jdGwuaGlnaCA9IGNwdV90b19sZTMyKERNQV9DVExfQkxLX1RTXAorCQkJCQkJKGxlbiAvIDQpKTsKKworCQkJLyogUHJvZ3JhbSB0aGUgbmV4dCBwb2ludGVyLiAgVGhlIG5leHQgcG9pbnRlciBtdXN0IGJlCisJCQkgKiB0aGUgcGh5c2ljYWwgYWRkcmVzcywgbm90IHRoZSB2aXJ0dWFsIGFkZHJlc3MuCisJCQkgKi8KKwkJCW5leHRfbGxwID0gKGRtYV9sbGkgKyAoKGlkeCArIDEpICogc2l6ZW9mKHN0cnVjdCBcCisJCQkJCQkJbGxpKSkpOworCisJCQkvKiBUaGUgbGFzdCAyIGJpdHMgZW5jb2RlIHRoZSBsaXN0IG1hc3RlciBzZWxlY3QuICovCisJCQluZXh0X2xscCA9IERNQV9MTFBfTE1TKG5leHRfbGxwLCBETUFfTExQX0FIQk1BU1RFUjIpOworCisJCQlsbGlbaWR4XS5sbHAgPSBjcHVfdG9fbGUzMihuZXh0X2xscCk7CisJCQlpZHgrKzsKKwkJCXNnX2xlbiAtPSBsZW47CisJCQlhZGRyICs9IGxlbjsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGxhc3QgbmV4dCBwdHIgaGFzIHRvIGJlIHplcm8gYW5kIHRoZSBsYXN0IGNvbnRyb2wgbG93IHJlZ2lzdGVyCisJICogaGFzIHRvIGhhdmUgTExQX1NSQ19FTiBhbmQgTExQX0RTVF9FTiAobGlua2VkIGxpc3QgcG9pbnRlciBzb3VyY2UKKwkgKiBhbmQgZGVzdGluYXRpb24gZW5hYmxlKSBzZXQgYmFjayB0byAwIChkaXNhYmxlZC4pIFRoaXMgaXMgd2hhdCB0ZWxscworCSAqIHRoZSBjb3JlIHRoYXQgdGhpcyBpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaW5rZWQgbGlzdC4KKwkgKi8KKwlpZiAoaWR4KSB7CisJCWxsaVtpZHgtMV0ubGxwID0gMHgwMDAwMDAwMDsKKwkJbGxpW2lkeC0xXS5jdGwubG93ICY9IERNQV9DVExfTExQX0RJU0FCTEVfTEUzMjsKKworCQkvKiBGbHVzaCBjYWNoZSB0byBtZW1vcnkgKi8KKwkJZG1hX2NhY2hlX3N5bmMoTlVMTCwgbGxpLCAoc2l6ZW9mKHN0cnVjdCBsbGkpICogaWR4KSwKKwkJCSAgICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJfQorCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBkbWFfZHdjX3hmZXJfc3RhcnQKKyAqIGFyZ3VtZW50czogQ2hhbm5lbCBudW1iZXIKKyAqIFJldHVybiA6IE5vbmUKKyAqIEVuYWJsZXMgdGhlIERNQSBjaGFubmVsCisgKi8KK3N0YXRpYyB2b2lkIGRtYV9kd2NfeGZlcl9zdGFydChpbnQgZG1hX2NoKQoreworCS8qIEVuYWJsZSB0aGUgRE1BIGNoYW5uZWwgKi8KKwlvdXRfbGUzMigmKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MtPmRtYV9jaGFuX2VuLmxvdyksCisJCSBpbl9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+ZG1hX2NoYW5fZW4ubG93KSkgfAorCQkgRE1BX0VOQUJMRV9DSEFOKGRtYV9jaCkpOworfQorCitzdGF0aWMgaW50IGRtYV9kd2NfeGZlcl9zZXR1cChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbnVtX2VsZW1zLAorCQkJICAgICAgc3RydWN0IGxsaSAqbGxpLCBkbWFfYWRkcl90IGRtYV9sbGksCisJCQkgICAgICB2b2lkIF9faW9tZW0gKmFkZHIsIGludCBkaXIpCit7CisJaW50IGRtYV9jaDsKKwlpbnQgbnVtX2xsaTsKKwkvKiBBY3F1aXJlIERNQSBjaGFubmVsICovCisJZG1hX2NoID0gZG1hX3JlcXVlc3RfY2hhbm5lbCgpOworCWlmIChkbWFfY2ggPT0gLTEpIHsKKwkJZGV2X2Vycihob3N0X3B2dC5kd2NfZGV2LCAiJXM6IGRtYSBjaGFubmVsIHVuYXZhaWxhYmxlXG4iLAorCQkJIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyogQ29udmVydCBTRyBsaXN0IHRvIGxpbmtlZCBsaXN0IG9mIGl0ZW1zIChMTElzKSBmb3IgQUhCIERNQSAqLworCW51bV9sbGkgPSBtYXBfc2dfdG9fbGxpKHNnLCBudW1fZWxlbXMsIGxsaSwgZG1hX2xsaSwgYWRkciwgZGlyKTsKKworCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzIHNnOiAweCVwLCBjb3VudDogJWQgbGxpOiAlcCBkbWFfbGxpOiIKKwkJIiAweCUweGx4IGFkZHI6ICVwIGxsaSBjb3VudDogJWRcbiIsIF9fZnVuY19fLCBzZywgbnVtX2VsZW1zLAorCQkgbGxpLCAodTMyKWRtYV9sbGksIGFkZHIsIG51bV9sbGkpOworCisJY2xlYXJfY2hhbl9pbnRlcnJ1cHRzKGRtYV9jaCk7CisKKwkvKiBQcm9ncmFtIHRoZSBDRkcgcmVnaXN0ZXIuICovCisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5jaGFuX3JlZ3NbZG1hX2NoXS5jZmcuaGlnaCksCisJCSBETUFfQ0ZHX1BST1RDVEwgfCBETUFfQ0ZHX0ZDTU9EX1JFUSk7CisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5jaGFuX3JlZ3NbZG1hX2NoXS5jZmcubG93KSwgMCk7CisKKwkvKiBQcm9ncmFtIHRoZSBhZGRyZXNzIG9mIHRoZSBsaW5rZWQgbGlzdCAqLworCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+Y2hhbl9yZWdzW2RtYV9jaF0ubGxwLmxvdyksCisJCSBETUFfTExQX0xNUyhkbWFfbGxpLCBETUFfTExQX0FIQk1BU1RFUjIpKTsKKworCS8qIFByb2dyYW0gdGhlIENUTCByZWdpc3RlciB3aXRoIHNyYyBlbmFibGUgLyBkc3QgZW5hYmxlICovCisJb3V0X2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5jaGFuX3JlZ3NbZG1hX2NoXS5jdGwubG93KSwKKwkJIERNQV9DVExfTExQX1NSQ0VOIHwgRE1BX0NUTF9MTFBfRFNURU4pOworCXJldHVybiAwOworfQorCisvKgorICogRnVuY3Rpb246IGRtYV9kd2NfZXhpdAorICogYXJndW1lbnRzOiBOb25lCisgKiByZXR1cm5zIHN0YXR1cworICogVGhpcyBmdW5jdGlvbiBleGl0cyB0aGUgU0FUQSBETUEgZHJpdmVyCisgKi8KK3N0YXRpYyB2b2lkIGRtYV9kd2NfZXhpdChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldikKK3sKKwlkZXZfZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKKwlpZiAoaG9zdF9wdnQuc2F0YV9kbWFfcmVncykKKwkJaW91bm1hcChob3N0X3B2dC5zYXRhX2RtYV9yZWdzKTsKKworCWlmIChoc2Rldi0+aXJxX2RtYSkKKwkJZnJlZV9pcnEoaHNkZXYtPmlycV9kbWEsIGhzZGV2KTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBkbWFfZHdjX2luaXQKKyAqIGFyZ3VtZW50czogaHNkZXYKKyAqIHJldHVybnMgc3RhdHVzCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTQVRBIERNQSBkcml2ZXIKKyAqLworc3RhdGljIGludCBkbWFfZHdjX2luaXQoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYsIGludCBpcnEpCit7CisJaW50IGVycjsKKworCWVyciA9IGRtYV9yZXF1ZXN0X2ludGVycnVwdHMoaHNkZXYsIGlycSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGhvc3RfcHZ0LmR3Y19kZXYsICIlczogZG1hX3JlcXVlc3RfaW50ZXJydXB0cyByZXR1cm5zIgorCQkJIiAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCS8qIEVuYWJlIERNQSAqLworCW91dF9sZTMyKCYoaG9zdF9wdnQuc2F0YV9kbWFfcmVncy0+ZG1hX2NmZy5sb3cpLCBETUFfRU4pOworCisJZGV2X25vdGljZShob3N0X3B2dC5kd2NfZGV2LCAiRE1BIGluaXRpYWxpemVkXG4iKTsKKwlkZXZfZGJnKGhvc3RfcHZ0LmR3Y19kZXYsICJTQVRBIERNQSByZWdpc3RlcnM9MHglcFxuIiwgaG9zdF9wdnQuXAorCQlzYXRhX2RtYV9yZWdzKTsKKworCXJldHVybiAwOworCitlcnJvcl9vdXQ6CisJZG1hX2R3Y19leGl0KGhzZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2F0YV9kd2Nfc2NyX3JlYWQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBpbnQgc2NyLCB1MzIgKnZhbCkKK3sKKwlpZiAoc2NyID4gU0NSX05PVElGSUNBVElPTikgeworCQlkZXZfZXJyKGxpbmstPmFwLT5kZXYsICIlczogSW5jb3JyZWN0IFNDUiBvZmZzZXQgMHglMDJ4XG4iLAorCQkJX19mdW5jX18sIHNjcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSp2YWwgPSBpbl9sZTMyKCh2b2lkICopbGluay0+YXAtPmlvYWRkci5zY3JfYWRkciArIChzY3IgKiA0KSk7CisJZGV2X2RiZyhsaW5rLT5hcC0+ZGV2LCAiJXM6IGlkPSVkIHJlZz0lZCB2YWw9dmFsPTB4JTA4eFxuIiwKKwkJX19mdW5jX18sIGxpbmstPmFwLT5wcmludF9pZCwgc2NyLCAqdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhdGFfZHdjX3Njcl93cml0ZShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCBzY3IsIHUzMiB2YWwpCit7CisJZGV2X2RiZyhsaW5rLT5hcC0+ZGV2LCAiJXM6IGlkPSVkIHJlZz0lZCB2YWw9dmFsPTB4JTA4eFxuIiwKKwkJX19mdW5jX18sIGxpbmstPmFwLT5wcmludF9pZCwgc2NyLCB2YWwpOworCWlmIChzY3IgPiBTQ1JfTk9USUZJQ0FUSU9OKSB7CisJCWRldl9lcnIobGluay0+YXAtPmRldiwgIiVzOiBJbmNvcnJlY3QgU0NSIG9mZnNldCAweCUwMnhcbiIsCisJCQkgX19mdW5jX18sIHNjcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvdXRfbGUzMigodm9pZCAqKWxpbmstPmFwLT5pb2FkZHIuc2NyX2FkZHIgKyAoc2NyICogNCksIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjb3JlX3Njcl9yZWFkKHVuc2lnbmVkIGludCBzY3IpCit7CisJcmV0dXJuIGluX2xlMzIoKHZvaWQgX19pb21lbSAqKShob3N0X3B2dC5zY3JfYWRkcl9zc3RhdHVzKSArXAorCQkJKHNjciAqIDQpKTsKK30KKworc3RhdGljIHZvaWQgY29yZV9zY3Jfd3JpdGUodW5zaWduZWQgaW50IHNjciwgdTMyIHZhbCkKK3sKKwlvdXRfbGUzMigodm9pZCBfX2lvbWVtICopKGhvc3RfcHZ0LnNjcl9hZGRyX3NzdGF0dXMpICsgKHNjciAqIDQpLAorCQl2YWwpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9zZXJyb3Iodm9pZCkKK3sKKwl1MzIgdmFsOworCXZhbCA9IGNvcmVfc2NyX3JlYWQoU0NSX0VSUk9SKTsKKwljb3JlX3Njcl93cml0ZShTQ1JfRVJST1IsIHZhbCk7CisKK30KKworc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0X2JpdChzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiwgdTMyIGJpdCkKK3sKKwlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmludHByLAorCQkgaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmludHByKSk7Cit9CisKK3N0YXRpYyB1MzIgcWNtZF90YWdfdG9fbWFzayh1OCB0YWcpCit7CisJcmV0dXJuIDB4MDAwMDAwMDEgPDwgKHRhZyAmIDB4MWYpOworfQorCisvKiBTZWUgYWhjaS5jICovCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19lcnJvcl9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJCQkJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYsIHVpbnQgaW50cHIpCit7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAgPSBIU0RFVlBfRlJPTV9BUChhcCk7CisJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSAwLCBhY3Rpb24gPSAwOworCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWM7CisJdTMyIHNlcnJvcjsKKwl1OCBzdGF0dXMsIHRhZzsKKwl1MzIgZXJyX3JlZzsKKworCWF0YV9laGlfY2xlYXJfZGVzYyhlaGkpOworCisJc2Vycm9yID0gY29yZV9zY3JfcmVhZChTQ1JfRVJST1IpOworCXN0YXR1cyA9IGFwLT5vcHMtPnNmZl9jaGVja19zdGF0dXMoYXApOworCisJZXJyX3JlZyA9IGluX2xlMzIoJihob3N0X3B2dC5zYXRhX2RtYV9yZWdzLT5pbnRlcnJ1cHRfc3RhdHVzLmVycm9yLlwKKwkJCWxvdykpOworCXRhZyA9IGFwLT5saW5rLmFjdGl2ZV90YWc7CisKKwlkZXZfZXJyKGFwLT5kZXYsICIlcyBTQ1JfRVJST1I9MHglMDh4IGludHByPTB4JTA4eCBzdGF0dXM9MHglMDh4ICIKKwkJImRtYV9pbnRwPSVkIHBlbmRpbmc9JWQgaXNzdWVkPSVkIGRtYV9lcnJfc3RhdHVzPTB4JTA4eFxuIiwKKwkJX19mdW5jX18sIHNlcnJvciwgaW50cHIsIHN0YXR1cywgaG9zdF9wdnQuZG1hX2ludGVycnVwdF9jb3VudCwKKwkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddLCBoc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSwgZXJyX3JlZyk7CisKKwkvKiBDbGVhciBlcnJvciByZWdpc3RlciBhbmQgaW50ZXJydXB0IGJpdCAqLworCWNsZWFyX3NlcnJvcigpOworCWNsZWFyX2ludGVycnVwdF9iaXQoaHNkZXYsIFNBVEFfRFdDX0lOVFBSX0VSUik7CisKKwkvKiBUaGlzIGlzIHRoZSBvbmx5IGVycm9yIGhhcHBlbmluZyBub3cuICBUT0RPIGNoZWNrIGZvciBleGFjdCBlcnJvciAqLworCisJZXJyX21hc2sgfD0gQUNfRVJSX0hPU1RfQlVTOworCWFjdGlvbiB8PSBBVEFfRUhfUkVTRVQ7CisKKwkvKiBQYXNzIHRoaXMgb24gdG8gRUggKi8KKwllaGktPnNlcnJvciB8PSBzZXJyb3I7CisJZWhpLT5hY3Rpb24gfD0gYWN0aW9uOworCisJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CisJaWYgKHFjKQorCQlxYy0+ZXJyX21hc2sgfD0gZXJyX21hc2s7CisJZWxzZQorCQllaGktPmVycl9tYXNrIHw9IGVycl9tYXNrOworCisJYXRhX3BvcnRfYWJvcnQoYXApOworfQorCisvKgorICogRnVuY3Rpb24gOiBzYXRhX2R3Y19pc3IKKyAqIGFyZ3VtZW50cyA6IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncworICogUmV0dXJuIHZhbHVlIDogaXJxcmV0dXJuX3QgLSBzdGF0dXMgb2YgSVJRCisgKiBUaGlzIEludGVycnVwdCBoYW5kbGVyIGNhbGxlZCB2aWEgcG9ydCBvcHMgcmVnaXN0ZXJlZCBmdW5jdGlvbi4KKyAqIC5pcnFfaGFuZGxlciA9IHNhdGFfZHdjX2lzcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2F0YV9kd2NfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSAoc3RydWN0IGF0YV9ob3N0ICopZGV2X2luc3RhbmNlOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9IT1NUKGhvc3QpOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHN0YXR1cywgdGFnOworCWludCBoYW5kbGVkLCBudW1fcHJvY2Vzc2VkLCBwb3J0ID0gMDsKKwl1aW50IGludHByLCBzYWN0aXZlLCBzYWN0aXZlMiwgdGFnX21hc2s7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnA7CisJaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCS8qIFJlYWQgdGhlIGludGVycnVwdCByZWdpc3RlciAqLworCWludHByID0gaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmludHByKTsKKworCWFwID0gaG9zdC0+cG9ydHNbcG9ydF07CisJaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCisJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgaW50cHI9MHglMDh4IGFjdGl2ZV90YWc9JWRcbiIsIF9fZnVuY19fLCBpbnRwciwKKwkJYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisKKwkvKiBDaGVjayBmb3IgZXJyb3IgaW50ZXJydXB0ICovCisJaWYgKGludHByICYgU0FUQV9EV0NfSU5UUFJfRVJSKSB7CisJCXNhdGFfZHdjX2Vycm9yX2ludHIoYXAsIGhzZGV2LCBpbnRwcik7CisJCWhhbmRsZWQgPSAxOworCQlnb3RvIERPTkU7CisJfQorCisJLyogQ2hlY2sgZm9yIERNQSBTRVRVUCBGSVMgKEZQIERNQSkgaW50ZXJydXB0ICovCisJaWYgKGludHByICYgU0FUQV9EV0NfSU5UUFJfTkVXRlApIHsKKwkJY2xlYXJfaW50ZXJydXB0X2JpdChoc2RldiwgU0FUQV9EV0NfSU5UUFJfTkVXRlApOworCisJCXRhZyA9ICh1OCkoaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmZwdGFncikpOworCQlkZXZfZGJnKGFwLT5kZXYsICIlczogTkVXRlAgdGFnPSVkXG4iLCBfX2Z1bmNfXywgdGFnKTsKKwkJaWYgKGhzZGV2cC0+Y21kX2lzc3VlZFt0YWddICE9IFNBVEFfRFdDX0NNRF9JU1NVRURfUEVORCkKKwkJCWRldl93YXJuKGFwLT5kZXYsICJDTUQgdGFnPSVkIG5vdCBwZW5kaW5nP1xuIiwgdGFnKTsKKworCQlob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCB8PSBxY21kX3RhZ190b19tYXNrKHRhZyk7CisKKwkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CisJCS8qCisJCSAqIFN0YXJ0IEZQIERNQSBmb3IgTkNRIGNvbW1hbmQuICBBdCB0aGlzIHBvaW50IHRoZSB0YWcgaXMgdGhlCisJCSAqIGFjdGl2ZSB0YWcuICBJdCBpcyB0aGUgdGFnIHRoYXQgbWF0Y2hlcyB0aGUgY29tbWFuZCBhYm91dCB0bworCQkgKiBiZSBjb21wbGV0ZWQuCisJCSAqLworCQlxYy0+YXAtPmxpbmsuYWN0aXZlX3RhZyA9IHRhZzsKKwkJc2F0YV9kd2NfYm1kbWFfc3RhcnRfYnlfdGFnKHFjLCB0YWcpOworCisJCWhhbmRsZWQgPSAxOworCQlnb3RvIERPTkU7CisJfQorCXNhY3RpdmUgPSBjb3JlX3Njcl9yZWFkKFNDUl9BQ1RJVkUpOworCXRhZ19tYXNrID0gKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkIHwgc2FjdGl2ZSkgXiBzYWN0aXZlOworCisJLyogSWYgbm8gc2FjdGl2ZSBpc3N1ZWQgYW5kIHRhZ19tYXNrIGlzIHplcm8gdGhlbiB0aGlzIGlzIG5vdCBOQ1EgKi8KKwlpZiAoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgPT0gMCAmJiB0YWdfbWFzayA9PSAwKSB7CisJCWlmIChhcC0+bGluay5hY3RpdmVfdGFnID09IEFUQV9UQUdfUE9JU09OKQorCQkJdGFnID0gMDsKKwkJZWxzZQorCQkJdGFnID0gYXAtPmxpbmsuYWN0aXZlX3RhZzsKKwkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CisKKwkJLyogREVWIGludGVycnVwdCB3LyBubyBhY3RpdmUgcWM/ICovCisJCWlmICh1bmxpa2VseSghcWMgfHwgKHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19QT0xMSU5HKSkpIHsKKwkJCWRldl9lcnIoYXAtPmRldiwgIiVzIGludGVycnVwdCB3aXRoIG5vIGFjdGl2ZSBxYyAiCisJCQkJInFjPSVwXG4iLCBfX2Z1bmNfXywgcWMpOworCQkJYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJCQloYW5kbGVkID0gMTsKKwkJCWdvdG8gRE9ORTsKKwkJfQorCQlzdGF0dXMgPSBhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKKworCQlxYy0+YXAtPmxpbmsuYWN0aXZlX3RhZyA9IHRhZzsKKwkJaHNkZXZwLT5jbWRfaXNzdWVkW3RhZ10gPSBTQVRBX0RXQ19DTURfSVNTVUVEX05PVDsKKworCQlpZiAoc3RhdHVzICYgQVRBX0VSUikgeworCQkJZGV2X2RiZyhhcC0+ZGV2LCAiaW50ZXJydXB0IEFUQV9FUlIgKDB4JXgpXG4iLCBzdGF0dXMpOworCQkJc2F0YV9kd2NfcWNfY29tcGxldGUoYXAsIHFjLCAxKTsKKwkJCWhhbmRsZWQgPSAxOworCQkJZ290byBET05FOworCQl9CisKKwkJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgbm9uLU5DUSBjbWQgaW50ZXJydXB0LCBwcm90b2NvbDogJXNcbiIsCisJCQlfX2Z1bmNfXywgYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPnRmLnByb3RvY29sKSk7CitEUlZTVElMTEJVU1k6CisJCWlmIChhdGFfaXNfZG1hKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJCS8qCisJCQkgKiBFYWNoIERNQSB0cmFuc2FjdGlvbiBwcm9kdWNlcyAyIGludGVycnVwdHMuIFRoZSBETUFDCisJCQkgKiB0cmFuc2ZlciBjb21wbGV0ZSBpbnRlcnJ1cHQgYW5kIHRoZSBTQVRBIGNvbnRyb2xsZXIKKwkJCSAqIG9wZXJhdGlvbiBkb25lIGludGVycnVwdC4gVGhlIGNvbW1hbmQgc2hvdWxkIGJlCisJCQkgKiBjb21wbGV0ZWQgb25seSBhZnRlciBib3RoIGludGVycnVwdHMgYXJlIHNlZW4uCisJCQkgKi8KKwkJCWhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQrKzsKKwkJCWlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gXAorCQkJCQlTQVRBX0RXQ19ETUFfUEVORElOR19OT05FKSB7CisJCQkJZGV2X2VycihhcC0+ZGV2LCAiJXM6IERNQSBub3QgcGVuZGluZyAiCisJCQkJCSJpbnRwcj0weCUwOHggc3RhdHVzPTB4JTA4eCBwZW5kaW5nIgorCQkJCQkiPSVkXG4iLCBfX2Z1bmNfXywgaW50cHIsIHN0YXR1cywKKwkJCQkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddKTsKKwkJCX0KKworCQkJaWYgKChob3N0X3B2dC5kbWFfaW50ZXJydXB0X2NvdW50ICUgMikgPT0gMCkKKwkJCQlzYXRhX2R3Y19kbWFfeGZlcl9jb21wbGV0ZShhcCwgMSk7CisJCX0gZWxzZSBpZiAoYXRhX2lzX3BpbyhxYy0+dGYucHJvdG9jb2wpKSB7CisJCQlhdGFfc2ZmX2hzbV9tb3ZlKGFwLCBxYywgc3RhdHVzLCAwKTsKKwkJCWhhbmRsZWQgPSAxOworCQkJZ290byBET05FOworCQl9IGVsc2UgeworCQkJaWYgKHVubGlrZWx5KHNhdGFfZHdjX3FjX2NvbXBsZXRlKGFwLCBxYywgMSkpKQorCQkJCWdvdG8gRFJWU1RJTExCVVNZOworCQl9CisKKwkJaGFuZGxlZCA9IDE7CisJCWdvdG8gRE9ORTsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgYSBOQ1EgY29tbWFuZC4gQXQgdGhpcyBwb2ludCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgZm9yIHdoaWNoCisJICogdGFncyB3ZSBoYXZlIGdvdHRlbiBhIGNvbXBsZXRpb24gaW50ZXJydXB0LiAgT25lIGludGVycnVwdCBtYXkgc2VydmUKKwkgKiBhcyBjb21wbGV0aW9uIGZvciBtb3JlIHRoYW4gb25lIG9wZXJhdGlvbiB3aGVuIGNvbW1hbmRzIGFyZSBxdWV1ZWQKKwkgKiAoTkNRKS4gIFdlIG5lZWQgdG8gcHJvY2VzcyBlYWNoIGNvbXBsZXRlZCBjb21tYW5kLgorCSAqLworCisJIC8qIHByb2Nlc3MgY29tcGxldGVkIGNvbW1hbmRzICovCisJc2FjdGl2ZSA9IGNvcmVfc2NyX3JlYWQoU0NSX0FDVElWRSk7CisJdGFnX21hc2sgPSAoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQgfCBzYWN0aXZlKSBeIHNhY3RpdmU7CisKKwlpZiAoc2FjdGl2ZSAhPSAwIHx8IChob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCkgPiAxIHx8IFwKKwkJCQkJCQl0YWdfbWFzayA+IDEpIHsKKwkJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgTkNROnNhY3RpdmU9MHglMDh4ICBzYWN0aXZlX2lzc3VlZD0weCUwOHgiCisJCQkidGFnX21hc2s9MHglMDh4XG4iLCBfX2Z1bmNfXywgc2FjdGl2ZSwKKwkJCWhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkLCB0YWdfbWFzayk7CisJfQorCisJaWYgKCh0YWdfbWFzayB8IChob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX2lzc3VlZCkpICE9IFwKKwkJCQkJKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkKSkgeworCQlkZXZfd2FybihhcC0+ZGV2LCAiQmFkIHRhZyBtYXNrPyAgc2FjdGl2ZT0weCUwOHggIgorCQkJICIoaG9zdF9wdnQuc2F0YV9kd2Nfc2FjdGl2ZV9pc3N1ZWQpPTB4JTA4eCAgdGFnX21hc2siCisJCQkgIj0weCUwOHhcbiIsIHNhY3RpdmUsIGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkLAorCQkJICB0YWdfbWFzayk7CisJfQorCisJLyogcmVhZCBqdXN0IHRvIGNsZWFyIC4uLiBub3QgYmFkIGlmIGN1cnJlbnRseSBzdGlsbCBidXN5ICovCisJc3RhdHVzID0gYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CisJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgQVRBIHN0YXR1cyByZWdpc3Rlcj0weCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKworCXRhZyA9IDA7CisJbnVtX3Byb2Nlc3NlZCA9IDA7CisJd2hpbGUgKHRhZ19tYXNrKSB7CisJCW51bV9wcm9jZXNzZWQrKzsKKwkJd2hpbGUgKCEodGFnX21hc2sgJiAweDAwMDAwMDAxKSkgeworCQkJdGFnKys7CisJCQl0YWdfbWFzayA8PD0gMTsKKwkJfQorCisJCXRhZ19tYXNrICY9ICh+MHgwMDAwMDAwMSk7CisJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCB0YWcpOworCisJCS8qIFRvIGJlIHBpY2tlZCB1cCBieSBjb21wbGV0aW9uIGZ1bmN0aW9ucyAqLworCQlxYy0+YXAtPmxpbmsuYWN0aXZlX3RhZyA9IHRhZzsKKwkJaHNkZXZwLT5jbWRfaXNzdWVkW3RhZ10gPSBTQVRBX0RXQ19DTURfSVNTVUVEX05PVDsKKworCQkvKiBMZXQgbGliYXRhL3Njc2kgbGF5ZXJzIGhhbmRsZSBlcnJvciAqLworCQlpZiAoc3RhdHVzICYgQVRBX0VSUikgeworCQkJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgQVRBX0VSUiAoMHgleClcbiIsIF9fZnVuY19fLAorCQkJCXN0YXR1cyk7CisJCQlzYXRhX2R3Y19xY19jb21wbGV0ZShhcCwgcWMsIDEpOworCQkJaGFuZGxlZCA9IDE7CisJCQlnb3RvIERPTkU7CisJCX0KKworCQkvKiBQcm9jZXNzIGNvbXBsZXRlZCBjb21tYW5kICovCisJCWRldl9kYmcoYXAtPmRldiwgIiVzIE5DUSBjb21tYW5kLCBwcm90b2NvbDogJXNcbiIsIF9fZnVuY19fLAorCQkJYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPnRmLnByb3RvY29sKSk7CisJCWlmIChhdGFfaXNfZG1hKHFjLT50Zi5wcm90b2NvbCkpIHsKKwkJCWhvc3RfcHZ0LmRtYV9pbnRlcnJ1cHRfY291bnQrKzsKKwkJCWlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gXAorCQkJCQlTQVRBX0RXQ19ETUFfUEVORElOR19OT05FKQorCQkJCWRldl93YXJuKGFwLT5kZXYsICIlczogRE1BIG5vdCBwZW5kaW5nP1xuIiwKKwkJCQkJX19mdW5jX18pOworCQkJaWYgKChob3N0X3B2dC5kbWFfaW50ZXJydXB0X2NvdW50ICUgMikgPT0gMCkKKwkJCQlzYXRhX2R3Y19kbWFfeGZlcl9jb21wbGV0ZShhcCwgMSk7CisJCX0gZWxzZSB7CisJCQlpZiAodW5saWtlbHkoc2F0YV9kd2NfcWNfY29tcGxldGUoYXAsIHFjLCAxKSkpCisJCQkJZ290byBTVElMTEJVU1k7CisJCX0KKwkJY29udGludWU7CisKK1NUSUxMQlVTWToKKwkJYXAtPnN0YXRzLmlkbGVfaXJxKys7CisJCWRldl93YXJuKGFwLT5kZXYsICJTVElMTCBCVVNZIElSUSBhdGElZDogaXJxIHRyYXBcbiIsCisJCQlhcC0+cHJpbnRfaWQpOworCX0gLyogd2hpbGUgdGFnX21hc2sgKi8KKworCS8qCisJICogQ2hlY2sgdG8gc2VlIGlmIGFueSBjb21tYW5kcyBjb21wbGV0ZWQgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nIG91cgorCSAqIGluaXRpYWwgc2V0IG9mIGNvbXBsZXRlZCBjb21tYW5kcyAocmVhZCBzdGF0dXMgY2xlYXJzIGludGVycnVwdHMsCisJICogc28gd2UgbWlnaHQgbWlzcyBhIGNvbXBsZXRlZCBjb21tYW5kIGludGVycnVwdCBpZiBvbmUgY2FtZSBpbiB3aGlsZQorCSAqIHdlIHdlcmUgcHJvY2Vzc2luZyAtLXdlIHJlYWQgc3RhdHVzIGFzIHBhcnQgb2YgcHJvY2Vzc2luZyBhIGNvbXBsZXRlZAorCSAqIGNvbW1hbmQpLgorCSAqLworCXNhY3RpdmUyID0gY29yZV9zY3JfcmVhZChTQ1JfQUNUSVZFKTsKKwlpZiAoc2FjdGl2ZTIgIT0gc2FjdGl2ZSkgeworCQlkZXZfZGJnKGFwLT5kZXYsICJNb3JlIGNvbXBsZXRlZCAtIHNhY3RpdmU9MHgleCBzYWN0aXZlMiIKKwkJCSI9MHgleFxuIiwgc2FjdGl2ZSwgc2FjdGl2ZTIpOworCX0KKwloYW5kbGVkID0gMTsKKworRE9ORToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2NsZWFyX2RtYWNyKHN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwLCB1OCB0YWcpCit7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYgPSBIU0RFVl9GUk9NX0hTREVWUChoc2RldnApOworCisJaWYgKGhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9PSBTQVRBX0RXQ19ETUFfUEVORElOR19SWCkgeworCQlvdXRfbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjciksCisJCQkgU0FUQV9EV0NfRE1BQ1JfUlhfQ0xFQVIoCisJCQkJIGluX2xlMzIoJihoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZG1hY3IpKSkpOworCX0gZWxzZSBpZiAoaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID09IFNBVEFfRFdDX0RNQV9QRU5ESU5HX1RYKSB7CisJCW91dF9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSwKKwkJCSBTQVRBX0RXQ19ETUFDUl9UWF9DTEVBUigKKwkJCQkgaW5fbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjcikpKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgaXQgaW5kaWNhdGVzIHRoZSBkcml2ZXIgaXMgb3V0IG9mCisJCSAqIHN5bmMuICBJZiBpdCBkb2VzIGhhcHBlbiwgY2xlYXIgZG1hY3IgYW55d2F5LgorCQkgKi8KKwkJZGV2X2Vycihob3N0X3B2dC5kd2NfZGV2LCAiJXMgRE1BIHByb3RvY29sIFJYIGFuZCIKKwkJCSJUWCBETUEgbm90IHBlbmRpbmcgdGFnPTB4JTAyeCBwZW5kaW5nPSVkIgorCQkJIiBkbWFjcjogMHglMDh4XG4iLCBfX2Z1bmNfXywgdGFnLAorCQkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddLAorCQkJaW5fbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjcikpKTsKKwkJb3V0X2xlMzIoJihoc2Rldi0+c2F0YV9kd2NfcmVncy0+ZG1hY3IpLAorCQkJU0FUQV9EV0NfRE1BQ1JfVFhSWENIX0NMRUFSKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2RtYV94ZmVyX2NvbXBsZXRlKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHUzMiBjaGVja19zdGF0dXMpCit7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiA9IEhTREVWX0ZST01fQVAoYXApOworCXU4IHRhZyA9IDA7CisKKwl0YWcgPSBhcC0+bGluay5hY3RpdmVfdGFnOworCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCB0YWcpOworCWlmICghcWMpIHsKKwkJZGV2X2VycihhcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBxYyIpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgREVCVUdfTkNRCisJaWYgKHRhZyA+IDApIHsKKwkJZGV2X2luZm8oYXAtPmRldiwgIiVzIHRhZz0ldSBjbWQ9MHglMDJ4IGRtYSBkaXI9JXMgcHJvdG89JXMgIgorCQkJICJkbWFjcj0weCUwOHhcbiIsIF9fZnVuY19fLCBxYy0+dGFnLCBxYy0+dGYuY29tbWFuZCwKKwkJCSBhdGFfZ2V0X2NtZF9kZXNjcmlwdChxYy0+ZG1hX2RpciksCisJCQkgYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPnRmLnByb3RvY29sKSwKKwkJCSBpbl9sZTMyKCYoaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyKSkpOworCX0KKyNlbmRpZgorCisJaWYgKGF0YV9pc19kbWEocWMtPnRmLnByb3RvY29sKSkgeworCQlpZiAoaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID09IFNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkUpIHsKKwkJCWRldl9lcnIoYXAtPmRldiwgIiVzIERNQSBwcm90b2NvbCBSWCBhbmQgVFggRE1BIG5vdCAiCisJCQkJInBlbmRpbmcgZG1hY3I6IDB4JTA4eFxuIiwgX19mdW5jX18sCisJCQkJaW5fbGUzMigmKGhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjcikpKTsKKwkJfQorCisJCWhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9IFNBVEFfRFdDX0RNQV9QRU5ESU5HX05PTkU7CisJCXNhdGFfZHdjX3FjX2NvbXBsZXRlKGFwLCBxYywgY2hlY2tfc3RhdHVzKTsKKwkJYXAtPmxpbmsuYWN0aXZlX3RhZyA9IEFUQV9UQUdfUE9JU09OOworCX0gZWxzZSB7CisJCXNhdGFfZHdjX3FjX2NvbXBsZXRlKGFwLCBxYywgY2hlY2tfc3RhdHVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2F0YV9kd2NfcWNfY29tcGxldGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywKKwkJCQl1MzIgY2hlY2tfc3RhdHVzKQoreworCXU4IHN0YXR1cyA9IDA7CisJdTMyIG1hc2sgPSAweDA7CisJdTggdGFnID0gcWMtPnRhZzsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwlob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX3F1ZXVlZCA9IDA7CisJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgY2hlY2tzdGF0dXM/ICV4XG4iLCBfX2Z1bmNfXywgY2hlY2tfc3RhdHVzKTsKKworCWlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfVFgpCisJCWRldl9lcnIoYXAtPmRldiwgIlRYIERNQSBQRU5ESU5HXG4iKTsKKwllbHNlIGlmIChoc2RldnAtPmRtYV9wZW5kaW5nW3RhZ10gPT0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfUlgpCisJCWRldl9lcnIoYXAtPmRldiwgIlJYIERNQSBQRU5ESU5HXG4iKTsKKwlkZXZfZGJnKGFwLT5kZXYsICJRQyBjb21wbGV0ZSBjbWQ9MHglMDJ4IHN0YXR1cz0weCUwMnggYXRhJXU6IgorCQkiIHByb3RvY29sPSVkXG4iLCBxYy0+dGYuY29tbWFuZCwgc3RhdHVzLCBhcC0+cHJpbnRfaWQsCisJCSBxYy0+dGYucHJvdG9jb2wpOworCisJLyogY2xlYXIgYWN0aXZlIGJpdCAqLworCW1hc2sgPSAofihxY21kX3RhZ190b19tYXNrKHRhZykpKTsKKwlob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX3F1ZXVlZCA9IChob3N0X3B2dC5zYXRhX2R3Y19zYWN0aXZlX3F1ZXVlZCkgXAorCQkJCQkJJiBtYXNrOworCWhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkID0gKGhvc3RfcHZ0LnNhdGFfZHdjX3NhY3RpdmVfaXNzdWVkKSBcCisJCQkJCQkmIG1hc2s7CisJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHNhdGFfZHdjX2RldmljZSAqaHNkZXYpCit7CisJLyogRW5hYmxlIHNlbGVjdGl2ZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrcmVnaXN0ZXIqLworCW91dF9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aW50bXIsCisJCSBTQVRBX0RXQ19JTlRNUl9FUlJNIHwKKwkJIFNBVEFfRFdDX0lOVE1SX05FV0ZQTSB8CisJCSBTQVRBX0RXQ19JTlRNUl9QTUFCUlRNIHwKKwkJIFNBVEFfRFdDX0lOVE1SX0RNQVRNKTsKKwkvKgorCSAqIFVubWFzayB0aGUgZXJyb3IgYml0cyB0aGF0IHNob3VsZCB0cmlnZ2VyIGFuIGVycm9yIGludGVycnVwdCBieQorCSAqIHNldHRpbmcgdGhlIGVycm9yIG1hc2sgcmVnaXN0ZXIuCisJICovCisJb3V0X2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5lcnJtciwgU0FUQV9EV0NfU0VSUk9SX0VSUl9CSVRTKTsKKworCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBJTlRNUiA9IDB4JTA4eCwgRVJSTVIgPSAweCUwOHhcbiIsCisJCSBfX2Z1bmNfXywgaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmludG1yKSwKKwkJaW5fbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmVycm1yKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX3NldHVwX3BvcnQoc3RydWN0IGF0YV9pb3BvcnRzICpwb3J0LCB1bnNpZ25lZCBsb25nIGJhc2UpCit7CisJcG9ydC0+Y21kX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDAwOworCXBvcnQtPmRhdGFfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MDA7CisKKwlwb3J0LT5lcnJvcl9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwNDsKKwlwb3J0LT5mZWF0dXJlX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDA0OworCisJcG9ydC0+bnNlY3RfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MDg7CisKKwlwb3J0LT5sYmFsX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDBjOworCXBvcnQtPmxiYW1fYWRkciA9ICh2b2lkICopYmFzZSArIDB4MTA7CisJcG9ydC0+bGJhaF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgxNDsKKworCXBvcnQtPmRldmljZV9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgxODsKKwlwb3J0LT5jb21tYW5kX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDFjOworCXBvcnQtPnN0YXR1c19hZGRyID0gKHZvaWQgKiliYXNlICsgMHgxYzsKKworCXBvcnQtPmFsdHN0YXR1c19hZGRyID0gKHZvaWQgKiliYXNlICsgMHgyMDsKKwlwb3J0LT5jdGxfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MjA7Cit9CisKKy8qCisgKiBGdW5jdGlvbiA6IHNhdGFfZHdjX3BvcnRfc3RhcnQKKyAqIGFyZ3VtZW50cyA6IHN0cnVjdCBhdGFfaW9wb3J0cyAqcG9ydAorICogUmV0dXJuIHZhbHVlIDogcmV0dXJucyAwIGlmIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgc2NhdHRlciBnYXRoZXIgTExJIHRhYmxlIGZvciBBSEIgRE1BCisgKi8KK3N0YXRpYyBpbnQgc2F0YV9kd2NfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2OworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OworCWludCBpOworCisJaHNkZXYgPSBIU0RFVl9GUk9NX0FQKGFwKTsKKworCWRldl9kYmcoYXAtPmRldiwgIiVzOiBwb3J0X25vPSVkXG4iLCBfX2Z1bmNfXywgYXAtPnBvcnRfbm8pOworCisJaHNkZXYtPmhvc3QgPSBhcC0+aG9zdDsKKwlwZGV2ID0gYXAtPmhvc3QtPmRldjsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2VycihhcC0+ZGV2LCAiJXM6IG5vIGFwLT5ob3N0LT5kZXZcbiIsIF9fZnVuY19fKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBDTEVBTlVQOworCX0KKworCS8qIEFsbG9jYXRlIFBvcnQgU3RydWN0ICovCisJaHNkZXZwID0ga3phbGxvYyhzaXplb2YoKmhzZGV2cCksIEdGUF9LRVJORUwpOworCWlmICghaHNkZXZwKSB7CisJCWRldl9lcnIoYXAtPmRldiwgIiVzOiBrbWFsbG9jIGZhaWxlZCBmb3IgaHNkZXZwXG4iLCBfX2Z1bmNfXyk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gQ0xFQU5VUDsKKwl9CisJaHNkZXZwLT5oc2RldiA9IGhzZGV2OworCisJZm9yIChpID0gMDsgaSA8IFNBVEFfRFdDX1FDTURfTUFYOyBpKyspCisJCWhzZGV2cC0+Y21kX2lzc3VlZFtpXSA9IFNBVEFfRFdDX0NNRF9JU1NVRURfTk9UOworCisJYXAtPmJtZG1hX3ByZCA9IDA7CS8qIHNldCB0aGVzZSBzbyBsaWJhdGEgZG9lc24ndCB1c2UgdGhlbSAqLworCWFwLT5ibWRtYV9wcmRfZG1hID0gMDsKKworCS8qCisJICogRE1BIC0gQXNzaWduIHNjYXR0ZXIgZ2F0aGVyIExMSSB0YWJsZS4gV2UgY2FuJ3QgdXNlIHRoZSBsaWJhdGEKKwkgKiB2ZXJzaW9uIHNpbmNlIGl0J3MgUFJEIGlzIElERSBQQ0kgc3BlY2lmaWMuCisJICovCisJZm9yIChpID0gMDsgaSA8IFNBVEFfRFdDX1FDTURfTUFYOyBpKyspIHsKKwkJaHNkZXZwLT5sbGl0W2ldID0gZG1hX2FsbG9jX2NvaGVyZW50KHBkZXYsCisJCQkJCQkgICAgIFNBVEFfRFdDX0RNQUNfTExJX1RCTF9TWiwKKwkJCQkJCSAgICAgJihoc2RldnAtPmxsaXRfZG1hW2ldKSwKKwkJCQkJCSAgICAgR0ZQX0FUT01JQyk7CisJCWlmICghaHNkZXZwLT5sbGl0W2ldKSB7CisJCQlkZXZfZXJyKGFwLT5kZXYsICIlczogZG1hX2FsbG9jX2NvaGVyZW50IGZhaWxlZFxuIiwKKwkJCQkgX19mdW5jX18pOworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gQ0xFQU5VUDsKKwkJfQorCX0KKworCWlmIChhcC0+cG9ydF9ubyA9PSAwKSAgeworCQlkZXZfZGJnKGFwLT5kZXYsICIlczogY2xlYXJpbmcgVFhDSEVOLCBSWENIRU4gaW4gRE1BQ1xuIiwKKwkJCV9fZnVuY19fKTsKKwkJb3V0X2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjciwKKwkJCSBTQVRBX0RXQ19ETUFDUl9UWFJYQ0hfQ0xFQVIpOworCisJCWRldl9kYmcoYXAtPmRldiwgIiVzOiBzZXR0aW5nIGJ1cnN0IHNpemUgaW4gREJUU1JcbiIsCisJCQkgX19mdW5jX18pOworCQlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRidHNyLAorCQkJIChTQVRBX0RXQ19EQlRTUl9NV1IoQUhCX0RNQV9CUlNUX0RGTFQpIHwKKwkJCSAgU0FUQV9EV0NfREJUU1JfTVJEKEFIQl9ETUFfQlJTVF9ERkxUKSkpOworCX0KKworCS8qIENsZWFyIGFueSBlcnJvciBiaXRzIGJlZm9yZSBsaWJhdGEgc3RhcnRzIGlzc3VpbmcgY29tbWFuZHMgKi8KKwljbGVhcl9zZXJyb3IoKTsKKwlhcC0+cHJpdmF0ZV9kYXRhID0gaHNkZXZwOworCitDTEVBTlVQOgorCWlmIChlcnIpIHsKKwkJc2F0YV9kd2NfcG9ydF9zdG9wKGFwKTsKKwkJZGV2X2RiZyhhcC0+ZGV2LCAiJXM6IGZhaWxcbiIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGFwLT5kZXYsICIlczogZG9uZVxuIiwgX19mdW5jX18pOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCWludCBpOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9BUChhcCk7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAgPSBIU0RFVlBfRlJPTV9BUChhcCk7CisKKwlkZXZfZGJnKGFwLT5kZXYsICIlczogYXAtPmlkID0gJWRcbiIsIF9fZnVuY19fLCBhcC0+cHJpbnRfaWQpOworCisJaWYgKGhzZGV2cCAmJiBoc2RldikgeworCQkvKiBkZWFsbG9jYXRlIExMSSB0YWJsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgU0FUQV9EV0NfUUNNRF9NQVg7IGkrKykgeworCQkJZG1hX2ZyZWVfY29oZXJlbnQoYXAtPmhvc3QtPmRldiwKKwkJCQkJICBTQVRBX0RXQ19ETUFDX0xMSV9UQkxfU1osCisJCQkJCSBoc2RldnAtPmxsaXRbaV0sIGhzZGV2cC0+bGxpdF9kbWFbaV0pOworCQl9CisKKwkJa2ZyZWUoaHNkZXZwKTsKKwl9CisJYXAtPnByaXZhdGVfZGF0YSA9IE5VTEw7Cit9CisKKy8qCisgKiBGdW5jdGlvbiA6IHNhdGFfZHdjX2V4ZWNfY29tbWFuZF9ieV90YWcKKyAqIGFyZ3VtZW50cyA6IGF0YV9wb3J0ICphcCwgYXRhX3Rhc2tmaWxlICp0ZiwgdTggdGFnLCB1MzIgY21kX2lzc3VlZAorICogUmV0dXJuIHZhbHVlIDogTm9uZQorICogVGhpcyBmdW5jdGlvbiBrZWVwcyB0cmFjayBvZiBpbmRpdmlkdWFsIGNvbW1hbmQgdGFnIGlkcyBhbmQgY2FsbHMKKyAqIGF0YV9leGVjX2NvbW1hbmQgaW4gbGliYXRhCisgKi8KK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2V4ZWNfY29tbWFuZF9ieV90YWcoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkJIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLAorCQkJCQkgdTggdGFnLCB1MzIgY21kX2lzc3VlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2VfcG9ydCAqaHNkZXZwID0gSFNERVZQX0ZST01fQVAoYXApOworCisJZGV2X2RiZyhhcC0+ZGV2LCAiJXMgY21kKDB4JTAyeCk6ICVzIHRhZz0lZFxuIiwgX19mdW5jX18sIHRmLT5jb21tYW5kLAorCQlhdGFfZ2V0X2NtZF9kZXNjcmlwdCh0ZiksIHRhZyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXAtPmhvc3QtPmxvY2ssIGZsYWdzKTsKKwloc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSA9IGNtZF9pc3N1ZWQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXAtPmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIENsZWFyIFNFcnJvciBiZWZvcmUgZXhlY3V0aW5nIGEgbmV3IGNvbW1hbmQuCisJICogc2F0YV9kd2Nfc2NyX3dyaXRlIGFuZCByZWFkIGNhbiBub3QgYmUgdXNlZCBoZXJlLiBDbGVhcmluZyB0aGUgUE0KKwkgKiBtYW5hZ2VkIFNFcnJvciByZWdpc3RlciBmb3IgdGhlIGRpc2sgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlCisJICogdGFzayBmaWxlIGlzIGxvYWRlZC4KKwkgKi8KKwljbGVhcl9zZXJyb3IoKTsKKwlhdGFfc2ZmX2V4ZWNfY29tbWFuZChhcCwgdGYpOworfQorCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19ibWRtYV9zZXR1cF9ieV90YWcoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYywgdTggdGFnKQoreworCXNhdGFfZHdjX2V4ZWNfY29tbWFuZF9ieV90YWcocWMtPmFwLCAmcWMtPnRmLCB0YWcsCisJCQkJICAgICBTQVRBX0RXQ19DTURfSVNTVUVEX1BFTkQpOworfQorCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19ibWRtYV9zZXR1cChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXU4IHRhZyA9IHFjLT50YWc7CisKKwlpZiAoYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKSB7CisJCWRldl9kYmcocWMtPmFwLT5kZXYsICIlczogYXAtPmxpbmsuc2FjdGl2ZT0weCUwOHggdGFnPSVkXG4iLAorCQkJX19mdW5jX18sIHFjLT5hcC0+bGluay5zYWN0aXZlLCB0YWcpOworCX0gZWxzZSB7CisJCXRhZyA9IDA7CisJfQorCXNhdGFfZHdjX2JtZG1hX3NldHVwX2J5X3RhZyhxYywgdGFnKTsKK30KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfYm1kbWFfc3RhcnRfYnlfdGFnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHU4IHRhZykKK3sKKwlpbnQgc3RhcnRfZG1hOworCXUzMiByZWcsIGRtYV9jaGFuOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9RQyhxYyk7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlX3BvcnQgKmhzZGV2cCA9IEhTREVWUF9GUk9NX0FQKGFwKTsKKwlpbnQgZGlyID0gcWMtPmRtYV9kaXI7CisJZG1hX2NoYW4gPSBoc2RldnAtPmRtYV9jaGFuW3RhZ107CisKKwlpZiAoaHNkZXZwLT5jbWRfaXNzdWVkW3RhZ10gIT0gU0FUQV9EV0NfQ01EX0lTU1VFRF9OT1QpIHsKKwkJc3RhcnRfZG1hID0gMTsKKwkJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQorCQkJaHNkZXZwLT5kbWFfcGVuZGluZ1t0YWddID0gU0FUQV9EV0NfRE1BX1BFTkRJTkdfVFg7CisJCWVsc2UKKwkJCWhzZGV2cC0+ZG1hX3BlbmRpbmdbdGFnXSA9IFNBVEFfRFdDX0RNQV9QRU5ESU5HX1JYOworCX0gZWxzZSB7CisJCWRldl9lcnIoYXAtPmRldiwgIiVzOiBDb21tYW5kIG5vdCBwZW5kaW5nIGNtZF9pc3N1ZWQ9JWQgIgorCQkJIih0YWc9JWQpIERNQSBOT1Qgc3RhcnRlZFxuIiwgX19mdW5jX18sCisJCQloc2RldnAtPmNtZF9pc3N1ZWRbdGFnXSwgdGFnKTsKKwkJc3RhcnRfZG1hID0gMDsKKwl9CisKKwlkZXZfZGJnKGFwLT5kZXYsICIlcyBxYz0lcCB0YWc6ICV4IGNtZDogMHglMDJ4IGRtYV9kaXI6ICVzICIKKwkJInN0YXJ0X2RtYT8gJXhcbiIsIF9fZnVuY19fLCBxYywgdGFnLCBxYy0+dGYuY29tbWFuZCwKKwkJYXRhX2dldF9jbWRfZGVzY3JpcHQocWMtPmRtYV9kaXIpLCBzdGFydF9kbWEpOworCXNhdGFfZHdjX3RmX2R1bXAoJihxYy0+dGYpKTsKKworCWlmIChzdGFydF9kbWEpIHsKKwkJcmVnID0gY29yZV9zY3JfcmVhZChTQ1JfRVJST1IpOworCQlpZiAocmVnICYgU0FUQV9EV0NfU0VSUk9SX0VSUl9CSVRTKSB7CisJCQlkZXZfZXJyKGFwLT5kZXYsICIlczogKioqKioqIFNFcnJvcj0weCUwOHggKioqKioqXG4iLAorCQkJCV9fZnVuY19fLCByZWcpOworCQl9CisKKwkJaWYgKGRpciA9PSBETUFfVE9fREVWSUNFKQorCQkJb3V0X2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5kbWFjciwKKwkJCQlTQVRBX0RXQ19ETUFDUl9UWENIRU4pOworCQllbHNlCisJCQlvdXRfbGUzMigmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWNyLAorCQkJCVNBVEFfRFdDX0RNQUNSX1JYQ0hFTik7CisKKwkJLyogRW5hYmxlIEFIQiBETUEgdHJhbnNmZXIgb24gdGhlIHNwZWNpZmllZCBjaGFubmVsICovCisJCWRtYV9kd2NfeGZlcl9zdGFydChkbWFfY2hhbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzYXRhX2R3Y19ibWRtYV9zdGFydChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCXU4IHRhZyA9IHFjLT50YWc7CisKKwlpZiAoYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKSB7CisJCWRldl9kYmcocWMtPmFwLT5kZXYsICIlczogYXAtPmxpbmsuc2FjdGl2ZT0weCUwOHggdGFnPSVkXG4iLAorCQkJX19mdW5jX18sIHFjLT5hcC0+bGluay5zYWN0aXZlLCB0YWcpOworCX0gZWxzZSB7CisJCXRhZyA9IDA7CisJfQorCWRldl9kYmcocWMtPmFwLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCXNhdGFfZHdjX2JtZG1hX3N0YXJ0X2J5X3RhZyhxYywgdGFnKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uIDogc2F0YV9kd2NfcWNfcHJlcF9ieV90YWcKKyAqIGFyZ3VtZW50cyA6IGF0YV9xdWV1ZWRfY21kICpxYywgdTggdGFnCisgKiBSZXR1cm4gdmFsdWUgOiBOb25lCisgKiBxY19wcmVwIGZvciBhIHBhcnRpY3VsYXIgcXVldWVkIGNvbW1hbmQgYmFzZWQgb24gdGFnCisgKi8KK3N0YXRpYyB2b2lkIHNhdGFfZHdjX3FjX3ByZXBfYnlfdGFnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHU4IHRhZykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gcWMtPnNnOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisJdTMyIGRtYV9jaGFuOworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9BUChhcCk7CisJc3RydWN0IHNhdGFfZHdjX2RldmljZV9wb3J0ICpoc2RldnAgPSBIU0RFVlBfRlJPTV9BUChhcCk7CisJaW50IGVycjsKKworCWRldl9kYmcoYXAtPmRldiwgIiVzOiBwb3J0PSVkIGRtYSBkaXI9JXMgbl9lbGVtPSVkXG4iLAorCQlfX2Z1bmNfXywgYXAtPnBvcnRfbm8sIGF0YV9nZXRfY21kX2Rlc2NyaXB0KHFjLT5kbWFfZGlyKSwKKwkJIHFjLT5uX2VsZW0pOworCisJZG1hX2NoYW4gPSBkbWFfZHdjX3hmZXJfc2V0dXAoc2csIHFjLT5uX2VsZW0sIGhzZGV2cC0+bGxpdFt0YWddLAorCQkJCSAgICAgIGhzZGV2cC0+bGxpdF9kbWFbdGFnXSwKKwkJCQkgICAgICAodm9pZCAqX19pb21lbSkoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT5cCisJCQkJICAgICAgZG1hZHIpLCBxYy0+ZG1hX2Rpcik7CisJaWYgKGRtYV9jaGFuIDwgMCkgeworCQlkZXZfZXJyKGFwLT5kZXYsICIlczogZG1hX2R3Y194ZmVyX3NldHVwIHJldHVybnMgZXJyICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCXJldHVybjsKKwl9CisJaHNkZXZwLT5kbWFfY2hhblt0YWddID0gZG1hX2NoYW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2F0YV9kd2NfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwl1MzIgc2FjdGl2ZTsKKwl1OCB0YWcgPSBxYy0+dGFnOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CisKKyNpZmRlZiBERUJVR19OQ1EKKwlpZiAocWMtPnRhZyA+IDAgfHwgYXAtPmxpbmsuc2FjdGl2ZSA+IDEpCisJCWRldl9pbmZvKGFwLT5kZXYsICIlcyBhcCBpZD0lZCBjbWQoMHglMDJ4KT0lcyBxYyB0YWc9JWQgIgorCQkJICJwcm90PSVzIGFwIGFjdGl2ZV90YWc9MHglMDh4IGFwIHNhY3RpdmU9MHglMDh4XG4iLAorCQkJIF9fZnVuY19fLCBhcC0+cHJpbnRfaWQsIHFjLT50Zi5jb21tYW5kLAorCQkJIGF0YV9nZXRfY21kX2Rlc2NyaXB0KCZxYy0+dGYpLAorCQkJIHFjLT50YWcsIGF0YV9nZXRfY21kX2Rlc2NyaXB0KHFjLT50Zi5wcm90b2NvbCksCisJCQkgYXAtPmxpbmsuYWN0aXZlX3RhZywgYXAtPmxpbmsuc2FjdGl2ZSk7CisjZW5kaWYKKworCWlmICghYXRhX2lzX25jcShxYy0+dGYucHJvdG9jb2wpKQorCQl0YWcgPSAwOworCXNhdGFfZHdjX3FjX3ByZXBfYnlfdGFnKHFjLCB0YWcpOworCisJaWYgKGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkgeworCQlzYWN0aXZlID0gY29yZV9zY3JfcmVhZChTQ1JfQUNUSVZFKTsKKwkJc2FjdGl2ZSB8PSAoMHgwMDAwMDAwMSA8PCB0YWcpOworCQljb3JlX3Njcl93cml0ZShTQ1JfQUNUSVZFLCBzYWN0aXZlKTsKKworCQlkZXZfZGJnKHFjLT5hcC0+ZGV2LCAiJXM6IHRhZz0lZCBhcC0+bGluay5zYWN0aXZlID0gMHglMDh4ICIKKwkJCSJzYWN0aXZlPTB4JTA4eFxuIiwgX19mdW5jX18sIHRhZywgcWMtPmFwLT5saW5rLnNhY3RpdmUsCisJCQlzYWN0aXZlKTsKKworCQlhcC0+b3BzLT5zZmZfdGZfbG9hZChhcCwgJnFjLT50Zik7CisJCXNhdGFfZHdjX2V4ZWNfY29tbWFuZF9ieV90YWcoYXAsICZxYy0+dGYsIHFjLT50YWcsCisJCQkJCSAgICAgU0FUQV9EV0NfQ01EX0lTU1VFRF9QRU5EKTsKKwl9IGVsc2UgeworCQlhdGFfc2ZmX3FjX2lzc3VlKHFjKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbiA6IHNhdGFfZHdjX3FjX3ByZXAKKyAqIGFyZ3VtZW50cyA6IGF0YV9xdWV1ZWRfY21kICpxYworICogUmV0dXJuIHZhbHVlIDogTm9uZQorICogcWNfcHJlcCBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXVlZCBjb21tYW5kCisgKi8KKworc3RhdGljIHZvaWQgc2F0YV9kd2NfcWNfcHJlcChzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQoreworCWlmICgocWMtPmRtYV9kaXIgPT0gRE1BX05PTkUpIHx8IChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfUElPKSkKKwkJcmV0dXJuOworCisjaWZkZWYgREVCVUdfTkNRCisJaWYgKHFjLT50YWcgPiAwKQorCQlkZXZfaW5mbyhxYy0+YXAtPmRldiwgIiVzOiBxYy0+dGFnPSVkIGFwLT5hY3RpdmVfdGFnPTB4JTA4eFxuIiwKKwkJCSBfX2Z1bmNfXywgdGFnLCBxYy0+YXAtPmxpbmsuYWN0aXZlX3RhZyk7CisKKwlyZXR1cm4gOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZHdjX2Vycm9yX2hhbmRsZXIoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlhcC0+bGluay5mbGFncyB8PSBBVEFfTEZMQUdfTk9fSFJTVDsKKwlhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoYXApOworfQorCisvKgorICogc2NzaSBtaWQtbGF5ZXIgYW5kIGxpYmF0YSBpbnRlcmZhY2Ugc3RydWN0dXJlcworICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzYXRhX2R3Y19zaHQgPSB7CisJQVRBX05DUV9TSFQoRFJWX05BTUUpLAorCS8qCisJICogdGVzdC1vbmx5OiBDdXJyZW50bHkgdGhpcyBkcml2ZXIgZG9lc24ndCBoYW5kbGUgTkNRCisJICogY29ycmVjdGx5LiBXZSBlbmFibGUgTkNRIGJ1dCBzZXQgdGhlIHF1ZXVlIGRlcHRoIHRvIGEKKwkgKiBtYXggb2YgMS4gVGhpcyB3aWxsIGdldCBmaXhlZCBpbiBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCSAqLworCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCisJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAkvKiBBVEFfTUFYX1FVRVVFICovCisJLmRtYV9ib3VuZGFyeQkJPSBBVEFfRE1BX0JPVU5EQVJZLAorfTsKKworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHNhdGFfZHdjX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisKKwkuZXJyb3JfaGFuZGxlcgkJPSBzYXRhX2R3Y19lcnJvcl9oYW5kbGVyLAorCisJLnFjX3ByZXAJCT0gc2F0YV9kd2NfcWNfcHJlcCwKKwkucWNfaXNzdWUJCT0gc2F0YV9kd2NfcWNfaXNzdWUsCisKKwkuc2NyX3JlYWQJCT0gc2F0YV9kd2Nfc2NyX3JlYWQsCisJLnNjcl93cml0ZQkJPSBzYXRhX2R3Y19zY3Jfd3JpdGUsCisKKwkucG9ydF9zdGFydAkJPSBzYXRhX2R3Y19wb3J0X3N0YXJ0LAorCS5wb3J0X3N0b3AJCT0gc2F0YV9kd2NfcG9ydF9zdG9wLAorCisJLmJtZG1hX3NldHVwCQk9IHNhdGFfZHdjX2JtZG1hX3NldHVwLAorCS5ibWRtYV9zdGFydAkJPSBzYXRhX2R3Y19ibWRtYV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzYXRhX2R3Y19wb3J0X2luZm9bXSA9IHsKKwl7CisJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKKwkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OQ1EsCisJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKKwkJLnBvcnRfb3BzCT0gJnNhdGFfZHdjX29wcywKKwl9LAorfTsKKworc3RhdGljIGludCBzYXRhX2R3Y19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2OworCXUzMiBpZHIsIHZlcnNpb25yOworCWNoYXIgKnZlciA9IChjaGFyICopJnZlcnNpb25yOworCXU4ICpiYXNlID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaXJxLCByYzsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSBzYXRhX2R3Y19wb3J0X2luZm9bMF07CisJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmcGksIE5VTEwgfTsKKworCS8qIEFsbG9jYXRlIERXQyBTQVRBIGRldmljZSAqLworCWhzZGV2ID0ga21hbGxvYyhzaXplb2YoKmhzZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGhzZGV2ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImttYWxsb2MgZmFpbGVkIGZvciBoc2RldlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwltZW1zZXQoaHNkZXYsIDAsIHNpemVvZigqaHNkZXYpKTsKKworCS8qIElvcmVtYXAgU0FUQSByZWdpc3RlcnMgKi8KKwliYXNlID0gb2ZfaW9tYXAob2ZkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwlpZiAoIWJhc2UpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBTQVRBIHJlZ2lzdGVyIgorCQkJIiBhZGRyZXNzXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCWhzZGV2LT5yZWdfYmFzZSA9IGJhc2U7CisJZGV2X2RiZygmb2ZkZXYtPmRldiwgImlvcmVtYXAgZG9uZSBmb3IgU0FUQSByZWdpc3RlciBhZGRyZXNzXG4iKTsKKworCS8qIFN5bm9wc3lzIERXQyBTQVRBIHNwZWNpZmljIFJlZ2lzdGVycyAqLworCWhzZGV2LT5zYXRhX2R3Y19yZWdzID0gKHZvaWQgKl9faW9tZW0pKGJhc2UgKyBTQVRBX0RXQ19SRUdfT0ZGU0VUKTsKKworCS8qIEFsbG9jYXRlIGFuZCBmaWxsIGhvc3QgKi8KKwlob3N0ID0gYXRhX2hvc3RfYWxsb2NfcGluZm8oJm9mZGV2LT5kZXYsIHBwaSwgU0FUQV9EV0NfTUFYX1BPUlRTKTsKKwlpZiAoIWhvc3QpIHsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImF0YV9ob3N0X2FsbG9jX3BpbmZvIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhzZGV2OworCisJLyogU2V0dXAgcG9ydCAqLworCWhvc3QtPnBvcnRzWzBdLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlOworCWhvc3QtPnBvcnRzWzBdLT5pb2FkZHIuc2NyX2FkZHIgPSBiYXNlICsgU0FUQV9EV0NfU0NSX09GRlNFVDsKKwlob3N0X3B2dC5zY3JfYWRkcl9zc3RhdHVzID0gYmFzZSArIFNBVEFfRFdDX1NDUl9PRkZTRVQ7CisJc2F0YV9kd2Nfc2V0dXBfcG9ydCgmaG9zdC0+cG9ydHNbMF0tPmlvYWRkciwgKHVuc2lnbmVkIGxvbmcpYmFzZSk7CisKKwkvKiBSZWFkIHRoZSBJRCBhbmQgVmVyc2lvbiBSZWdpc3RlcnMgKi8KKwlpZHIgPSBpbl9sZTMyKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+aWRyKTsKKwl2ZXJzaW9uciA9IGluX2xlMzIoJmhzZGV2LT5zYXRhX2R3Y19yZWdzLT52ZXJzaW9ucik7CisJZGV2X25vdGljZSgmb2ZkZXYtPmRldiwgImlkICVkLCBjb250cm9sbGVyIHZlcnNpb24gJWMuJWMlY1xuIiwKKwkJICAgaWRyLCB2ZXJbMF0sIHZlclsxXSwgdmVyWzJdKTsKKworCS8qIEdldCBTQVRBIERNQSBpbnRlcnJ1cHQgbnVtYmVyICovCisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAob2ZkZXYtPmRldi5vZl9ub2RlLCAxKTsKKwlpZiAoaXJxID09IE5PX0lSUSkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAibm8gU0FUQSBETUEgaXJxXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJLyogR2V0IHBoeXNpY2FsIFNBVEEgRE1BIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCWhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MgPSBvZl9pb21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDEpOworCWlmICghKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgQUhCRE1BIHJlZ2lzdGVyIgorCQkJIiBhZGRyZXNzXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcl9vdXQ7CisJfQorCisJLyogU2F2ZSBkZXYgZm9yIGxhdGVyIHVzZSBpbiBkZXZfeHh4KCkgcm91dGluZXMgKi8KKwlob3N0X3B2dC5kd2NfZGV2ID0gJm9mZGV2LT5kZXY7CisKKwkvKiBJbml0aWFsaXplIEFIQiBETUFDICovCisJZG1hX2R3Y19pbml0KGhzZGV2LCBpcnEpOworCisJLyogRW5hYmxlIFNBVEEgSW50ZXJydXB0cyAqLworCXNhdGFfZHdjX2VuYWJsZV9pbnRlcnJ1cHRzKGhzZGV2KTsKKworCS8qIEdldCBTQVRBIGludGVycnVwdCBudW1iZXIgKi8KKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+ZGV2Lm9mX25vZGUsIDApOworCWlmIChpcnEgPT0gTk9fSVJRKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBTQVRBIERNQSBpcnFcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwkvKgorCSAqIE5vdywgcmVnaXN0ZXIgd2l0aCBsaWJBVEEgY29yZSwgdGhpcyB3aWxsIGFsc28gaW5pdGlhdGUgdGhlCisJICogZGV2aWNlIGRpc2NvdmVyeSBwcm9jZXNzLCBpbnZva2luZyBvdXIgcG9ydF9zdGFydCgpIGhhbmRsZXIgJgorCSAqIGVycm9yX2hhbmRsZXIoKSB0byBleGVjdXRlIGEgZHVtbXkgU29mdHJlc2V0IEVIIHNlc3Npb24KKwkgKi8KKwlyYyA9IGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgc2F0YV9kd2NfaXNyLCAwLCAmc2F0YV9kd2Nfc2h0KTsKKworCWlmIChyYyAhPSAwKQorCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiZmFpbGVkIHRvIGFjdGl2YXRlIGhvc3QiKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgaG9zdCk7CisJcmV0dXJuIDA7CisKK2Vycm9yX291dDoKKwkvKiBGcmVlIFNBVEEgRE1BIHJlc291cmNlcyAqLworCWRtYV9kd2NfZXhpdChoc2Rldik7CisKKwlpZiAoYmFzZSkKKwkJaW91bm1hcChiYXNlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhdGFfZHdjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKKworCWF0YV9ob3N0X2RldGFjaChob3N0KTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCS8qIEZyZWUgU0FUQSBETUEgcmVzb3VyY2VzICovCisJZG1hX2R3Y19leGl0KGhzZGV2KTsKKworCWlvdW5tYXAoaHNkZXYtPnJlZ19iYXNlKTsKKwlrZnJlZShoc2Rldik7CisJa2ZyZWUoaG9zdCk7CisJZGV2X2RiZygmb2ZkZXYtPmRldiwgImRvbmVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzYXRhX2R3Y19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYW1jYyxzYXRhLTQ2MGV4IiwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNhdGFfZHdjX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgc2F0YV9kd2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBzYXRhX2R3Y19tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHNhdGFfZHdjX3Byb2JlLAorCS5yZW1vdmUgPSBzYXRhX2R3Y19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzYXRhX2R3Y19pbml0KHZvaWQpCit7CisJcmV0dXJuCW9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2F0YV9kd2NfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNhdGFfZHdjX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2F0YV9kd2NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2F0YV9kd2NfaW5pdCk7Cittb2R1bGVfZXhpdChzYXRhX2R3Y19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBNaWVzZmVsZCA8bW1pZXNmZWxkQGFtY2MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXNpZ25XYXJlIENvcmVzIFNBVEEgY29udHJvbGxlciBsb3cgbGV2ZXIgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA0ZTRkNDJmLi43MzI1Zjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEwOTYsNyArMTA5Niw3IEBACiB7CiAJc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiAqaG9zdF9wcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKmhjcl9iYXNlID0gaG9zdF9wcml2LT5oY3JfYmFzZTsKLQl1MzIgaHN0YXR1cywgcWNfYWN0aXZlID0gMDsKKwl1MzIgaHN0YXR1cywgZG9uZV9tYXNrID0gMDsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCXUzMiBTRXJyb3I7CiAKQEAgLTExMTYsMjggKzExMTYsMjggQEAKIAl9CiAKIAkvKiBSZWFkIGNvbW1hbmQgY29tcGxldGVkIHJlZ2lzdGVyICovCi0JcWNfYWN0aXZlID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQyk7CisJZG9uZV9tYXNrID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQyk7CiAKIAlWUFJJTlRLKCJTdGF0dXMgb2YgYWxsIHF1ZXVlcyA6XG4iKTsKLQlWUFJJTlRLKCJxY19hY3RpdmUvQ0MgPSAweCV4LCBDQSA9IDB4JXgsIENFPTB4JXgsQ1E9MHgleCxhcHFhPTB4JXhcbiIsCi0JCXFjX2FjdGl2ZSwKKwlWUFJJTlRLKCJkb25lX21hc2svQ0MgPSAweCV4LCBDQSA9IDB4JXgsIENFPTB4JXgsQ1E9MHgleCxhcHFhPTB4JXhcbiIsCisJCWRvbmVfbWFzaywKIAkJaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQSksCiAJCWlvcmVhZDMyKGhjcl9iYXNlICsgQ0UpLAogCQlpb3JlYWQzMihoY3JfYmFzZSArIENRKSwKIAkJYXAtPnFjX2FjdGl2ZSk7CiAKLQlpZiAocWNfYWN0aXZlICYgYXAtPnFjX2FjdGl2ZSkgeworCWlmIChkb25lX21hc2sgJiBhcC0+cWNfYWN0aXZlKSB7CiAJCWludCBpOwogCQkvKiBjbGVhciBDQyBiaXQsIHRoaXMgd2lsbCBhbHNvIGNvbXBsZXRlIHRoZSBpbnRlcnJ1cHQgKi8KLQkJaW93cml0ZTMyKHFjX2FjdGl2ZSwgaGNyX2Jhc2UgKyBDQyk7CisJCWlvd3JpdGUzMihkb25lX21hc2ssIGhjcl9iYXNlICsgQ0MpOwogCiAJCURQUklOVEsoIlN0YXR1cyBvZiBhbGwgcXVldWVzIDpcbiIpOwotCQlEUFJJTlRLKCJxY19hY3RpdmUvQ0MgPSAweCV4LCBDQSA9IDB4JXgsIENFPTB4JXhcbiIsCi0JCQlxY19hY3RpdmUsIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0EpLAorCQlEUFJJTlRLKCJkb25lX21hc2svQ0MgPSAweCV4LCBDQSA9IDB4JXgsIENFPTB4JXhcbiIsCisJCQlkb25lX21hc2ssIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0EpLAogCQkJaW9yZWFkMzIoaGNyX2Jhc2UgKyBDRSkpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBTQVRBX0ZTTF9RVUVVRV9ERVBUSDsgaSsrKSB7Ci0JCQlpZiAocWNfYWN0aXZlICYgKDEgPDwgaSkpIHsKKwkJCWlmIChkb25lX21hc2sgJiAoMSA8PCBpKSkgewogCQkJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBpKTsKIAkJCQlpZiAocWMpIHsKIAkJCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKQEAgLTExNjQsNyArMTE2NCw3IEBACiAJCS8qIFNwdXJpb3VzIEludGVycnVwdCEhICovCiAJCURQUklOVEsoInNwdXJpb3VzIGludGVycnVwdCEhLCBDQyA9IDB4JXhcbiIsCiAJCQlpb3JlYWQzMihoY3JfYmFzZSArIENDKSk7Ci0JCWlvd3JpdGUzMihxY19hY3RpdmUsIGhjcl9iYXNlICsgQ0MpOworCQlpb3dyaXRlMzIoZG9uZV9tYXNrLCBoY3JfYmFzZSArIENDKTsKIAkJcmV0dXJuOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCBhNDc2Y2Q5Li45NDYzYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0yNzE2LDM0ICsyNzE2LDM1IEBACiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfcmVzcG9uc2Uoc3RydWN0IGF0YV9wb3J0ICphcCwKIAkJc3RydWN0IG12X2NycGIgKnJlc3BvbnNlLCB1bnNpZ25lZCBpbnQgdGFnLCBpbnQgbmNxX2VuYWJsZWQpCiB7CisJdTggYXRhX3N0YXR1czsKKwl1MTYgZWRtYV9zdGF0dXMgPSBsZTE2X3RvX2NwdShyZXNwb25zZS0+ZmxhZ3MpOwogCXN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CiAKLQlpZiAocWMpIHsKLQkJdTggYXRhX3N0YXR1czsKLQkJdTE2IGVkbWFfc3RhdHVzID0gbGUxNl90b19jcHUocmVzcG9uc2UtPmZsYWdzKTsKLQkJLyoKLQkJICogZWRtYV9zdGF0dXMgZnJvbSBhIHJlc3BvbnNlIHF1ZXVlIGVudHJ5OgotCQkgKiAgIExTQiBpcyBmcm9tIEVETUFfRVJSX0lSUV9DQVVTRSAobm9uLU5DUSBvbmx5KS4KLQkJICogICBNU0IgaXMgc2F2ZWQgQVRBIHN0YXR1cyBmcm9tIGNvbW1hbmQgY29tcGxldGlvbi4KLQkJICovCi0JCWlmICghbmNxX2VuYWJsZWQpIHsKLQkJCXU4IGVycl9jYXVzZSA9IGVkbWFfc3RhdHVzICYgMHhmZiAmIH5FRE1BX0VSUl9ERVY7Ci0JCQlpZiAoZXJyX2NhdXNlKSB7Ci0JCQkJLyoKLQkJCQkgKiBFcnJvciB3aWxsIGJlIHNlZW4vaGFuZGxlZCBieSBtdl9lcnJfaW50cigpLgotCQkJCSAqIFNvIGRvIG5vdGhpbmcgYXQgYWxsIGhlcmUuCi0JCQkJICovCi0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWF0YV9zdGF0dXMgPSBlZG1hX3N0YXR1cyA+PiBDUlBCX0ZMQUdfU1RBVFVTX1NISUZUOwotCQlpZiAoIWFjX2Vycl9tYXNrKGF0YV9zdGF0dXMpKQotCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKLQkJLyogZWxzZTogbGVhdmUgaXQgZm9yIG12X2Vycl9pbnRyKCkgKi8KLQl9IGVsc2UgeworCWlmICh1bmxpa2VseSghcWMpKSB7CiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsICIlczogbm8gcWMgZm9yIHRhZz0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgdGFnKTsKKwkJcmV0dXJuOwogCX0KKworCS8qCisJICogZWRtYV9zdGF0dXMgZnJvbSBhIHJlc3BvbnNlIHF1ZXVlIGVudHJ5OgorCSAqICAgTFNCIGlzIGZyb20gRURNQV9FUlJfSVJRX0NBVVNFIChub24tTkNRIG9ubHkpLgorCSAqICAgTVNCIGlzIHNhdmVkIEFUQSBzdGF0dXMgZnJvbSBjb21tYW5kIGNvbXBsZXRpb24uCisJICovCisJaWYgKCFuY3FfZW5hYmxlZCkgeworCQl1OCBlcnJfY2F1c2UgPSBlZG1hX3N0YXR1cyAmIDB4ZmYgJiB+RURNQV9FUlJfREVWOworCQlpZiAoZXJyX2NhdXNlKSB7CisJCQkvKgorCQkJICogRXJyb3Igd2lsbCBiZSBzZWVuL2hhbmRsZWQgYnkKKwkJCSAqIG12X2Vycl9pbnRyKCkuICBTbyBkbyBub3RoaW5nIGF0IGFsbCBoZXJlLgorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJYXRhX3N0YXR1cyA9IGVkbWFfc3RhdHVzID4+IENSUEJfRkxBR19TVEFUVVNfU0hJRlQ7CisJaWYgKCFhY19lcnJfbWFzayhhdGFfc3RhdHVzKSkKKwkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkvKiBlbHNlOiBsZWF2ZSBpdCBmb3IgbXZfZXJyX2ludHIoKSAqLwogfQogCiBzdGF0aWMgdm9pZCBtdl9wcm9jZXNzX2NycGJfZW50cmllcyhzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCAyMTE2MTEzLi5jYjg5ZWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCQkJICAgICAgTlZfQURNQV9TVEFUX0NQQkVSUiB8CiAJCQkgICAgICBOVl9BRE1BX1NUQVRfQ01EX0NPTVBMRVRFKSkgewogCQkJdTMyIGNoZWNrX2NvbW1hbmRzID0gbm90aWZpZXJfY2xlYXJzW2ldOwotCQkJaW50IHBvcywgZXJyb3IgPSAwOworCQkJaW50IHBvcywgcmM7CiAKIAkJCWlmIChzdGF0dXMgJiBOVl9BRE1BX1NUQVRfQ1BCRVJSKSB7CiAJCQkJLyogY2hlY2sgYWxsIGFjdGl2ZSBjb21tYW5kcyAqLwpAQCAtMTAzMCwxMCArMTAzMCwxMiBAQAogCQkJfQogCiAJCQkvKiBjaGVjayBDUEJzIGZvciBjb21wbGV0ZWQgY29tbWFuZHMgKi8KLQkJCXdoaWxlICgocG9zID0gZmZzKGNoZWNrX2NvbW1hbmRzKSkgJiYgIWVycm9yKSB7CisJCQl3aGlsZSAoKHBvcyA9IGZmcyhjaGVja19jb21tYW5kcykpKSB7CiAJCQkJcG9zLS07Ci0JCQkJZXJyb3IgPSBudl9hZG1hX2NoZWNrX2NwYihhcCwgcG9zLAorCQkJCXJjID0gbnZfYWRtYV9jaGVja19jcGIoYXAsIHBvcywKIAkJCQkJCW5vdGlmaWVyX2Vycm9yICYgKDEgPDwgcG9zKSk7CisJCQkJaWYgKHVubGlrZWx5KHJjKSkKKwkJCQkJY2hlY2tfY29tbWFuZHMgPSAwOwogCQkJCWNoZWNrX2NvbW1hbmRzICY9IH4oMSA8PCBwb3MpOwogCQkJfQogCQl9CkBAIC0yMTI5LDcgKzIxMzEsNiBAQAogCXN0cnVjdCBudl9zd25jcV9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwogCXUzMiBzYWN0aXZlOwotCWludCBucl9kb25lID0gMDsKIAl1MzIgZG9uZV9tYXNrOwogCWludCBpOwogCXU4IGhvc3Rfc3RhdDsKQEAgLTIxNzAsMjIgKzIxNzEsMjEgQEAKIAkJCXBwLT5kaGZpc19iaXRzICY9IH4oMSA8PCBpKTsKIAkJCXBwLT5kbWFmaXNfYml0cyAmPSB+KDEgPDwgaSk7CiAJCQlwcC0+c2RiZmlzX2JpdHMgfD0gKDEgPDwgaSk7Ci0JCQlucl9kb25lKys7CiAJCX0KIAl9CiAKIAlpZiAoIWFwLT5xY19hY3RpdmUpIHsKIAkJRFBSSU5USygib3ZlclxuIik7CiAJCW52X3N3bmNxX3BwX3JlaW5pdChhcCk7Ci0JCXJldHVybiBucl9kb25lOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocHAtPnFjX2FjdGl2ZSAmIHBwLT5kaGZpc19iaXRzKQotCQlyZXR1cm4gbnJfZG9uZTsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoKHBwLT5uY3FfZmxhZ3MgJiBuY3Ffc2F3X2JhY2tvdXQpIHx8CiAJICAgIChwcC0+cWNfYWN0aXZlIF4gcHAtPmRoZmlzX2JpdHMpKQotCQkvKiBpZiB0aGUgY29udHJvbGxlciBjYW5uJ3QgZ2V0IGEgZGV2aWNlIHRvIGhvc3QgcmVnaXN0ZXIgRklTLAorCQkvKiBpZiB0aGUgY29udHJvbGxlciBjYW4ndCBnZXQgYSBkZXZpY2UgdG8gaG9zdCByZWdpc3RlciBGSVMsCiAJCSAqIFRoZSBkcml2ZXIgbmVlZHMgdG8gcmVpc3N1ZSB0aGUgbmV3IGNvbW1hbmQuCiAJCSAqLwogCQlsYWNrX2RoZmlzID0gMTsKQEAgLTIyMDIsNyArMjIwMiw3IEBACiAJaWYgKGxhY2tfZGhmaXMpIHsKIAkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHBwLT5sYXN0X2lzc3VlX3RhZyk7CiAJCW52X3N3bmNxX2lzc3VlX2F0YWNtZChhcCwgcWMpOwotCQlyZXR1cm4gbnJfZG9uZTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHBwLT5kZWZlcl9xdWV1ZS5kZWZlcl9iaXRzKSB7CkBAIC0yMjEyLDcgKzIyMTIsNyBAQAogCQludl9zd25jcV9pc3N1ZV9hdGFjbWQoYXAsIHFjKTsKIAl9CiAKLQlyZXR1cm4gbnJfZG9uZTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgbnZfc3duY3FfdGFnKHN0cnVjdCBhdGFfcG9ydCAqYXApCkBAIC0yMjI0LDcgKzIyMjQsNyBAQAogCXJldHVybiAodGFnICYgMHgxZik7CiB9CiAKLXN0YXRpYyBpbnQgbnZfc3duY3FfZG1hZmlzKHN0cnVjdCBhdGFfcG9ydCAqYXApCitzdGF0aWMgdm9pZCBudl9zd25jcV9kbWFmaXMoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOwogCXVuc2lnbmVkIGludCBydzsKQEAgLTIyMzksNyArMjIzOSw3IEBACiAJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIHRhZyk7CiAKIAlpZiAodW5saWtlbHkoIXFjKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCXJ3ID0gcWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFOwogCkBAIC0yMjU0LDggKzIyNTQsNiBAQAogCQlkbWFjdGwgfD0gQVRBX0RNQV9XUjsKIAogCWlvd3JpdGU4KGRtYWN0bCB8IEFUQV9ETUFfU1RBUlQsIGFwLT5pb2FkZHIuYm1kbWFfYWRkciArIEFUQV9ETUFfQ01EKTsKLQotCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBudl9zd25jcV9ob3N0X2ludGVycnVwdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1MTYgZmlzKQpAQCAtMjI2NSw3ICsyMjYzLDYgQEAKIAlzdHJ1Y3QgYXRhX2VoX2luZm8gKmVoaSA9ICZhcC0+bGluay5laF9pbmZvOwogCXUzMiBzZXJyb3I7CiAJdTggYXRhX3N0YXQ7Ci0JaW50IHJjID0gMDsKIAogCWF0YV9zdGF0ID0gYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCk7CiAJbnZfc3duY3FfaXJxX2NsZWFyKGFwLCBmaXMpOwpAQCAtMjMxMCw4ICsyMzA3LDcgQEAKIAkJCSJkaGZpcyAweCVYIGRtYWZpcyAweCVYIHNhY3RpdmUgMHglWFxuIiwKIAkJCWFwLT5wcmludF9pZCwgcHAtPnFjX2FjdGl2ZSwgcHAtPmRoZmlzX2JpdHMsCiAJCQlwcC0+ZG1hZmlzX2JpdHMsIHJlYWRsKHBwLT5zYWN0aXZlX2Jsb2NrKSk7Ci0JCXJjID0gbnZfc3duY3Ffc2RiZmlzKGFwKTsKLQkJaWYgKHJjIDwgMCkKKwkJaWYgKG52X3N3bmNxX3NkYmZpcyhhcCkgPCAwKQogCQkJZ290byBpcnFfZXJyb3I7CiAJfQogCkBAIC0yMzQ4LDcgKzIzNDQsNyBAQAogCQkgKi8KIAkJcHAtPmRtYWZpc19iaXRzIHw9ICgweDEgPDwgbnZfc3duY3FfdGFnKGFwKSk7CiAJCXBwLT5uY3FfZmxhZ3MgfD0gbmNxX3Nhd19kbWFzOwotCQlyYyA9IG52X3N3bmNxX2RtYWZpcyhhcCk7CisJCW52X3N3bmNxX2RtYWZpcyhhcCk7CiAJfQogCiBpcnFfZXhpdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggNjE3NDk2NS4uZjkxNmRkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTc4MSw3ICs3ODEsOCBAQAogCXNrX2Zvcl9lYWNoKHMsIG5vZGUsIGhlYWQpIHsKIAkJdmNjID0gYXRtX3NrKHMpOwogCQlpZiAodmNjLT5kZXYgPT0gZGV2ICYmIHZjYy0+dmNpID09IHZjaSAmJgotCQkgICAgdmNjLT52cGkgPT0gdnBpICYmIHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyAhPSBBVE1fTk9ORSkKKwkJICAgIHZjYy0+dnBpID09IHZwaSAmJiB2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX05PTkUgJiYKKwkJICAgIHRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKQogCQkJZ290byBvdXQ7CiAJfQogCXZjYyA9IE5VTEw7CkBAIC05MDcsNiArOTA4LDEwIEBACiAJY2xlYXJfYml0KEFUTV9WRl9BRERSLCAmdmNjLT5mbGFncyk7CiAJY2xlYXJfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCisJLyogSG9sZCB1cCB2Y2NfZGVzdHJveV9zb2NrZXQoKSAob3VyIGNhbGxlcikgdW50aWwgc29sb3NfYmgoKSBpbiB0aGUKKwkgICB0YXNrbGV0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIGFueSBpbmNvbWluZyBwYWNrZXRzIChhbmQsIG1vcmUgdG8KKwkgICB0aGUgcG9pbnQsIHVzaW5nIHRoZSB2Y2MgcG9pbnRlcikuICovCisJdGFza2xldF91bmxvY2tfd2FpdCgmY2FyZC0+dGxldCk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggMTJlZWMzZi4uZWIxYjdmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtOTQ1LDggKzk0NSw4IEBACiAJYnVzX3JlbW92ZV9maWxlKGJ1cywgJmJ1c19hdHRyX3VldmVudCk7CiBidXNfdWV2ZW50X2ZhaWw6CiAJa3NldF91bnJlZ2lzdGVyKCZidXMtPnAtPnN1YnN5cyk7Ci0Ja2ZyZWUoYnVzLT5wKTsKIG91dDoKKwlrZnJlZShidXMtPnApOwogCWJ1cy0+cCA9IE5VTEw7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jb3JlLmMgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCmluZGV4IGY4ZTcyNzIuLmQxYjJjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL2NvcmUuYwpAQCAtMTU5OSw3ICsxNTk5LDcgQEAKICAqIG9uIHRoZSBzYW1lIGRldmljZSB0byBlbnN1cmUgdGhhdCBuZXdfbmFtZSBpcyB2YWxpZCBhbmQKICAqIHdvbid0IGNvbmZsaWN0IHdpdGggb3RoZXIgZGV2aWNlcy4KICAqLwotaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSkKK2ludCBkZXZpY2VfcmVuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmV3X25hbWUpCiB7CiAJY2hhciAqb2xkX2NsYXNzX25hbWUgPSBOVUxMOwogCWNoYXIgKm5ld19jbGFzc19uYW1lID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggNTAzYzI2Mi4uZGE1N2VlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTUxLDYgKzUxLDEwIEBACiB7CiAJaW50IHJldDsKIAorCWlmIChkZXYtPmJ1cykKKwkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKKwkJCQkJICAgICBCVVNfTk9USUZZX0JJTkRfRFJJVkVSLCBkZXYpOworCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZHJpdmVyLT5wLT5rb2JqLCAmZGV2LT5rb2JqLAogCQkJICBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOwogCWlmIChyZXQgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RtYS1jb2hlcmVudC5jIGIvZHJpdmVycy9iYXNlL2RtYS1jb2hlcmVudC5jCmluZGV4IGQ0ZDhjZTUuLmYzNjllMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWEtY29oZXJlbnQuYworKysgYi9kcml2ZXJzL2Jhc2UvZG1hLWNvaGVyZW50LmMKQEAgLTgsNyArOCw3IEBACiAKIHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtIHsKIAl2b2lkCQkqdmlydF9iYXNlOwotCXUzMgkJZGV2aWNlX2Jhc2U7CisJZG1hX2FkZHJfdAlkZXZpY2VfYmFzZTsKIAlpbnQJCXNpemU7CiAJaW50CQlmbGFnczsKIAl1bnNpZ25lZCBsb25nCSpiaXRtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCmluZGV4IDNmMDkzYjAuLmM4YTQ0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCkBAIC04NywyOSArODcsMzIgQEAKIAogc3RydWN0IGZpcm13YXJlX3ByaXYgewogCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Ci0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUgYXR0cl9kYXRhOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlpbnQgbnJfcGFnZXM7CiAJaW50IHBhZ2VfYXJyYXlfc2l6ZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OworCXN0cnVjdCBkZXZpY2UgZGV2OwogCWJvb2wgbm93YWl0OwogCWNoYXIgZndfaWRbXTsKIH07CiAKLXN0YXRpYyB2b2lkCi1md19sb2FkX2Fib3J0KHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2KQorc3RhdGljIHN0cnVjdCBmaXJtd2FyZV9wcml2ICp0b19maXJtd2FyZV9wcml2KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGZpcm13YXJlX3ByaXYsIGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2xvYWRfYWJvcnQoc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYpCiB7CiAJc2V0X2JpdChGV19TVEFUVVNfQUJPUlQsICZmd19wcml2LT5zdGF0dXMpOwogCXdtYigpOwogCWNvbXBsZXRlKCZmd19wcml2LT5jb21wbGV0aW9uKTsKIH0KIAotc3RhdGljIHNzaXplX3QKLWZpcm13YXJlX3RpbWVvdXRfc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLAotCQkgICAgICBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAotCQkgICAgICBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV90aW1lb3V0X3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywKKwkJCQkgICAgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxvYWRpbmdfdGltZW91dCk7CiB9CkBAIC0xMjcsMTQgKzEzMCwxNCBAQAogICoKICAqCU5vdGU6IHplcm8gbWVhbnMgJ3dhaXQgZm9yZXZlcicuCiAgKiovCi1zdGF0aWMgc3NpemVfdAotZmlybXdhcmVfdGltZW91dF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAotCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfdGltZW91dF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJCSAgICAgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJbG9hZGluZ190aW1lb3V0ID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpZiAobG9hZGluZ190aW1lb3V0IDwgMCkKIAkJbG9hZGluZ190aW1lb3V0ID0gMDsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMTQ2LDIxICsxNDksMjAgQEAKIAogc3RhdGljIHZvaWQgZndfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSB0b19maXJtd2FyZV9wcml2KGRldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZndfcHJpdi0+bnJfcGFnZXM7IGkrKykKIAkJX19mcmVlX3BhZ2UoZndfcHJpdi0+cGFnZXNbaV0pOwogCWtmcmVlKGZ3X3ByaXYtPnBhZ2VzKTsKIAlrZnJlZShmd19wcml2KTsKLQlrZnJlZShkZXYpOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlybXdhcmVfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSB0b19maXJtd2FyZV9wcml2KGRldik7CiAKIAlpZiAoYWRkX3VldmVudF92YXIoZW52LCAiRklSTVdBUkU9JXMiLCBmd19wcml2LT5md19pZCkpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTgyLDggKzE4NCw5IEBACiBzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9sb2FkaW5nX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCWludCBsb2FkaW5nID0gdGVzdF9iaXQoRldfU1RBVFVTX0xPQURJTkcsICZmd19wcml2LT5zdGF0dXMpOworCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxvYWRpbmcpOwogfQogCkBAIC0yMTksNyArMjIyLDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCWludCBsb2FkaW5nID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKIAlpbnQgaTsKIApAQCAtMjc3LDEzICsyODAsMTIgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGxvYWRpbmcsIDA2NDQsIGZpcm13YXJlX2xvYWRpbmdfc2hvdywgZmlybXdhcmVfbG9hZGluZ19zdG9yZSk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1maXJtd2FyZV9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwKLQkJICAgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQkgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJc3NpemVfdCByZXRfY291bnQ7CiAKQEAgLTMyMiw4ICszMjQsNyBAQAogCXJldHVybiByZXRfY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQKLWZ3X3JlYWxsb2NfYnVmZmVyKHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2LCBpbnQgbWluX3NpemUpCitzdGF0aWMgaW50IGZ3X3JlYWxsb2NfYnVmZmVyKHN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2LCBpbnQgbWluX3NpemUpCiB7CiAJaW50IHBhZ2VzX25lZWRlZCA9IEFMSUdOKG1pbl9zaXplLCBQQUdFX1NJWkUpID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTM3MywxMyArMzc0LDEyIEBACiAgKglEYXRhIHdyaXR0ZW4gdG8gdGhlICdkYXRhJyBhdHRyaWJ1dGUgd2lsbCBiZSBsYXRlciBoYW5kZWQgdG8KICAqCXRoZSBkcml2ZXIgYXMgYSBmaXJtd2FyZSBpbWFnZS4KICAqKi8KLXN0YXRpYyBzc2l6ZV90Ci1maXJtd2FyZV9kYXRhX3dyaXRlKHN0cnVjdCBmaWxlKiBmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmZmVyLAotCQkgICAgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgZmlybXdhcmVfZGF0YV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCSAgIGNoYXIgKmJ1ZmZlciwgbG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqKTsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2ID0gdG9fZmlybXdhcmVfcHJpdihkZXYpOwogCXN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJc3NpemVfdCByZXR2YWw7CiAKQEAgLTQyMCwxMTYgKzQyMCwxMDMgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZmlybXdhcmVfYXR0cl9kYXRhX3RtcGwgPSB7Ci0JLmF0dHIgPSB7Lm5hbWUgPSAiZGF0YSIsIC5tb2RlID0gMDY0NH0sCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZmlybXdhcmVfYXR0cl9kYXRhID0geworCS5hdHRyID0geyAubmFtZSA9ICJkYXRhIiwgLm1vZGUgPSAwNjQ0IH0sCiAJLnNpemUgPSAwLAogCS5yZWFkID0gZmlybXdhcmVfZGF0YV9yZWFkLAogCS53cml0ZSA9IGZpcm13YXJlX2RhdGFfd3JpdGUsCiB9OwogCi1zdGF0aWMgdm9pZAotZmlybXdhcmVfY2xhc3NfdGltZW91dCh1X2xvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGZpcm13YXJlX2NsYXNzX3RpbWVvdXQodV9sb25nIGRhdGEpCiB7CiAJc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYgPSAoc3RydWN0IGZpcm13YXJlX3ByaXYgKikgZGF0YTsKKwogCWZ3X2xvYWRfYWJvcnQoZndfcHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgZndfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKipkZXZfcCwgY29uc3QgY2hhciAqZndfbmFtZSwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqCitmd19jcmVhdGVfaW5zdGFuY2Uoc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgY29uc3QgY2hhciAqZndfbmFtZSwKKwkJICAgc3RydWN0IGRldmljZSAqZGV2aWNlLCBib29sIHVldmVudCwgYm9vbCBub3dhaXQpCiB7Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgZmlybXdhcmVfcHJpdiAqZndfcHJpdiA9Ci0JCWt6YWxsb2Moc2l6ZW9mKCpmd19wcml2KSArIHN0cmxlbihmd19uYW1lKSArIDEgLCBHRlBfS0VSTkVMKTsKLQlzdHJ1Y3QgZGV2aWNlICpmX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpmX2RldiksIEdGUF9LRVJORUwpOworCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OworCXN0cnVjdCBkZXZpY2UgKmZfZGV2OworCWludCBlcnJvcjsKIAotCSpkZXZfcCA9IE5VTEw7Ci0KLQlpZiAoIWZ3X3ByaXYgfHwgIWZfZGV2KSB7CisJZndfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpmd19wcml2KSArIHN0cmxlbihmd19uYW1lKSArIDEgLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZ3X3ByaXYpIHsKIAkJZGV2X2VycihkZXZpY2UsICIlczoga21hbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dmFsID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9rZnJlZTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJZndfcHJpdi0+ZncgPSBmaXJtd2FyZTsKKwlmd19wcml2LT5ub3dhaXQgPSBub3dhaXQ7CiAJc3RyY3B5KGZ3X3ByaXYtPmZ3X2lkLCBmd19uYW1lKTsKIAlpbml0X2NvbXBsZXRpb24oJmZ3X3ByaXYtPmNvbXBsZXRpb24pOwotCWZ3X3ByaXYtPmF0dHJfZGF0YSA9IGZpcm13YXJlX2F0dHJfZGF0YV90bXBsOwotCWZ3X3ByaXYtPnRpbWVvdXQuZnVuY3Rpb24gPSBmaXJtd2FyZV9jbGFzc190aW1lb3V0OwotCWZ3X3ByaXYtPnRpbWVvdXQuZGF0YSA9ICh1X2xvbmcpIGZ3X3ByaXY7Ci0JaW5pdF90aW1lcigmZndfcHJpdi0+dGltZW91dCk7CisJc2V0dXBfdGltZXIoJmZ3X3ByaXYtPnRpbWVvdXQsCisJCSAgICBmaXJtd2FyZV9jbGFzc190aW1lb3V0LCAodV9sb25nKSBmd19wcml2KTsKIAorCWZfZGV2ID0gJmZ3X3ByaXYtPmRldjsKKworCWRldmljZV9pbml0aWFsaXplKGZfZGV2KTsKIAlkZXZfc2V0X25hbWUoZl9kZXYsICIlcyIsIGRldl9uYW1lKGRldmljZSkpOwogCWZfZGV2LT5wYXJlbnQgPSBkZXZpY2U7CiAJZl9kZXYtPmNsYXNzID0gJmZpcm13YXJlX2NsYXNzOwotCWRldl9zZXRfZHJ2ZGF0YShmX2RldiwgZndfcHJpdik7Ci0JZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIDEpOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihmX2Rldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXB1dF9kZXZpY2UoZl9kZXYpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQkqZGV2X3AgPSBmX2RldjsKLQlyZXR1cm4gMDsKIAotZXJyb3Jfa2ZyZWU6Ci0Ja2ZyZWUoZl9kZXYpOwotCWtmcmVlKGZ3X3ByaXYpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBpbnQgZndfc2V0dXBfZGV2aWNlKHN0cnVjdCBmaXJtd2FyZSAqZncsIHN0cnVjdCBkZXZpY2UgKipkZXZfcCwKLQkJCSAgIGNvbnN0IGNoYXIgKmZ3X25hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKLQkJCSAgIGludCB1ZXZlbnQsIGJvb2wgbm93YWl0KQotewotCXN0cnVjdCBkZXZpY2UgKmZfZGV2OwotCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OwotCWludCByZXR2YWw7Ci0KLQkqZGV2X3AgPSBOVUxMOwotCXJldHZhbCA9IGZ3X3JlZ2lzdGVyX2RldmljZSgmZl9kZXYsIGZ3X25hbWUsIGRldmljZSk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZl9kZXYsIHRydWUpOwogCiAJLyogTmVlZCB0byBwaW4gdGhpcyBtb2R1bGUgdW50aWwgY2xhc3MgZGV2aWNlIGlzIGRlc3Ryb3llZCAqLwogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAKLQlmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGZfZGV2KTsKLQotCWZ3X3ByaXYtPm5vd2FpdCA9IG5vd2FpdDsKLQotCWZ3X3ByaXYtPmZ3ID0gZnc7Ci0Jc3lzZnNfYmluX2F0dHJfaW5pdCgmZndfcHJpdi0+YXR0cl9kYXRhKTsKLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmZfZGV2LT5rb2JqLCAmZndfcHJpdi0+YXR0cl9kYXRhKTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoZGV2aWNlLCAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJvcl91bnJlZzsKKwllcnJvciA9IGRldmljZV9hZGQoZl9kZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX3B1dF9kZXY7CiAJfQogCi0JcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKGZfZGV2LCAmZGV2X2F0dHJfbG9hZGluZyk7Ci0JaWYgKHJldHZhbCkgeworCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShmX2RldiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2aWNlLCAiJXM6IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfZGVsX2RldjsKKwl9CisKKwllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZShmX2RldiwgJmRldl9hdHRyX2xvYWRpbmcpOworCWlmIChlcnJvcikgewogCQlkZXZfZXJyKGRldmljZSwgIiVzOiBkZXZpY2VfY3JlYXRlX2ZpbGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyb3JfdW5yZWc7CisJCWdvdG8gZXJyX2RlbF9iaW5fYXR0cjsKIAl9CiAKIAlpZiAodWV2ZW50KQotCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMCk7Ci0JKmRldl9wID0gZl9kZXY7Ci0JZ290byBvdXQ7CisJCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKGZfZGV2LCBmYWxzZSk7CiAKLWVycm9yX3VucmVnOgotCWRldmljZV91bnJlZ2lzdGVyKGZfZGV2KTsKLW91dDoKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiBmd19wcml2OworCitlcnJfZGVsX2Jpbl9hdHRyOgorCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZl9kZXYsICZmaXJtd2FyZV9hdHRyX2RhdGEpOworZXJyX2RlbF9kZXY6CisJZGV2aWNlX2RlbChmX2Rldik7CitlcnJfcHV0X2RldjoKKwlwdXRfZGV2aWNlKGZfZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCi1zdGF0aWMgaW50Ci1fcmVxdWVzdF9maXJtd2FyZShjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmaXJtd2FyZV9wLCBjb25zdCBjaGFyICpuYW1lLAotCQkgc3RydWN0IGRldmljZSAqZGV2aWNlLCBpbnQgdWV2ZW50LCBib29sIG5vd2FpdCkKK3N0YXRpYyB2b2lkIGZ3X2Rlc3Ryb3lfaW5zdGFuY2Uoc3RydWN0IGZpcm13YXJlX3ByaXYgKmZ3X3ByaXYpCiB7Ci0Jc3RydWN0IGRldmljZSAqZl9kZXY7CisJc3RydWN0IGRldmljZSAqZl9kZXYgPSAmZndfcHJpdi0+ZGV2OworCisJZGV2aWNlX3JlbW92ZV9maWxlKGZfZGV2LCAmZGV2X2F0dHJfbG9hZGluZyk7CisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShmX2RldiwgJmZpcm13YXJlX2F0dHJfZGF0YSk7CisJZGV2aWNlX3VucmVnaXN0ZXIoZl9kZXYpOworfQorCitzdGF0aWMgaW50IF9yZXF1ZXN0X2Zpcm13YXJlKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZpcm13YXJlX3AsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCSAgICAgYm9vbCB1ZXZlbnQsIGJvb2wgbm93YWl0KQorewogCXN0cnVjdCBmaXJtd2FyZV9wcml2ICpmd19wcml2OwogCXN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsID0gMDsKIAogCWlmICghZmlybXdhcmVfcCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NTAsNDEgKzUzNyw0MCBAQAogCWlmICh1ZXZlbnQpCiAJCWRldl9kYmcoZGV2aWNlLCAiZmlybXdhcmU6IHJlcXVlc3RpbmcgJXNcbiIsIG5hbWUpOwogCi0JcmV0dmFsID0gZndfc2V0dXBfZGV2aWNlKGZpcm13YXJlLCAmZl9kZXYsIG5hbWUsIGRldmljZSwKLQkJCQkgdWV2ZW50LCBub3dhaXQpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3Jfa2ZyZWVfZnc7Ci0KLQlmd19wcml2ID0gZGV2X2dldF9kcnZkYXRhKGZfZGV2KTsKKwlmd19wcml2ID0gZndfY3JlYXRlX2luc3RhbmNlKGZpcm13YXJlLCBuYW1lLCBkZXZpY2UsIHVldmVudCwgbm93YWl0KTsKKwlpZiAoSVNfRVJSKGZ3X3ByaXYpKSB7CisJCXJldHZhbCA9IFBUUl9FUlIoZndfcHJpdik7CisJCWdvdG8gb3V0OworCX0KIAogCWlmICh1ZXZlbnQpIHsKLQkJaWYgKGxvYWRpbmdfdGltZW91dCA+IDApIHsKLQkJCWZ3X3ByaXYtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBsb2FkaW5nX3RpbWVvdXQgKiBIWjsKLQkJCWFkZF90aW1lcigmZndfcHJpdi0+dGltZW91dCk7Ci0JCX0KKwkJaWYgKGxvYWRpbmdfdGltZW91dCA+IDApCisJCQltb2RfdGltZXIoJmZ3X3ByaXYtPnRpbWVvdXQsCisJCQkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKworCQkJCQkJICAgbG9hZGluZ190aW1lb3V0ICogSFopKTsKIAotCQlrb2JqZWN0X3VldmVudCgmZl9kZXYtPmtvYmosIEtPQkpfQUREKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmZndfcHJpdi0+Y29tcGxldGlvbik7Ci0JCXNldF9iaXQoRldfU1RBVFVTX0RPTkUsICZmd19wcml2LT5zdGF0dXMpOwotCQlkZWxfdGltZXJfc3luYygmZndfcHJpdi0+dGltZW91dCk7Ci0JfSBlbHNlCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZ3X3ByaXYtPmNvbXBsZXRpb24pOworCQlrb2JqZWN0X3VldmVudCgmZndfcHJpdi0+ZGV2LmtvYmosIEtPQkpfQUREKTsKKwl9CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmd19wcml2LT5jb21wbGV0aW9uKTsKKworCXNldF9iaXQoRldfU1RBVFVTX0RPTkUsICZmd19wcml2LT5zdGF0dXMpOworCWRlbF90aW1lcl9zeW5jKCZmd19wcml2LT50aW1lb3V0KTsKIAogCW11dGV4X2xvY2soJmZ3X2xvY2spOwotCWlmICghZndfcHJpdi0+ZnctPnNpemUgfHwgdGVzdF9iaXQoRldfU1RBVFVTX0FCT1JULCAmZndfcHJpdi0+c3RhdHVzKSkgeworCWlmICghZndfcHJpdi0+ZnctPnNpemUgfHwgdGVzdF9iaXQoRldfU1RBVFVTX0FCT1JULCAmZndfcHJpdi0+c3RhdHVzKSkKIAkJcmV0dmFsID0gLUVOT0VOVDsKLQkJcmVsZWFzZV9maXJtd2FyZShmd19wcml2LT5mdyk7Ci0JCSpmaXJtd2FyZV9wID0gTlVMTDsKLQl9CiAJZndfcHJpdi0+ZncgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZndfbG9jayk7Ci0JZGV2aWNlX3VucmVnaXN0ZXIoZl9kZXYpOwotCWdvdG8gb3V0OwogCi1lcnJvcl9rZnJlZV9mdzoKLQlrZnJlZShmaXJtd2FyZSk7Ci0JKmZpcm13YXJlX3AgPSBOVUxMOworCWZ3X2Rlc3Ryb3lfaW5zdGFuY2UoZndfcHJpdik7CisKIG91dDoKKwlpZiAocmV0dmFsKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCQlmaXJtd2FyZV9wID0gTlVMTDsKKwl9CisKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02MzUsMjMgKzYyMSwyNCBAQAogCWludCB1ZXZlbnQ7CiB9OwogCi1zdGF0aWMgaW50Ci1yZXF1ZXN0X2Zpcm13YXJlX3dvcmtfZnVuYyh2b2lkICphcmcpCitzdGF0aWMgaW50IHJlcXVlc3RfZmlybXdhcmVfd29ya19mdW5jKHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgZmlybXdhcmVfd29yayAqZndfd29yayA9IGFyZzsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWludCByZXQ7CisKIAlpZiAoIWFyZykgewogCQlXQVJOX09OKDEpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0ID0gX3JlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd193b3JrLT5uYW1lLCBmd193b3JrLT5kZXZpY2UsCi0JCWZ3X3dvcmstPnVldmVudCwgdHJ1ZSk7CiAKKwlyZXQgPSBfcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X3dvcmstPm5hbWUsIGZ3X3dvcmstPmRldmljZSwKKwkJCQlmd193b3JrLT51ZXZlbnQsIHRydWUpOwogCWZ3X3dvcmstPmNvbnQoZncsIGZ3X3dvcmstPmNvbnRleHQpOwogCiAJbW9kdWxlX3B1dChmd193b3JrLT5tb2R1bGUpOwogCWtmcmVlKGZ3X3dvcmspOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc5LDM0ICs2NjYsMzMgQEAKIAl2b2lkICgqY29udCkoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCXN0cnVjdCBmaXJtd2FyZV93b3JrICpmd193b3JrID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV93b3JrKSwKLQkJCQkJCWdmcCk7CisJc3RydWN0IGZpcm13YXJlX3dvcmsgKmZ3X3dvcms7CiAKKwlmd193b3JrID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV93b3JrKSwgZ2ZwKTsKIAlpZiAoIWZ3X3dvcmspCiAJCXJldHVybiAtRU5PTUVNOworCisJZndfd29yay0+bW9kdWxlID0gbW9kdWxlOworCWZ3X3dvcmstPm5hbWUgPSBuYW1lOworCWZ3X3dvcmstPmRldmljZSA9IGRldmljZTsKKwlmd193b3JrLT5jb250ZXh0ID0gY29udGV4dDsKKwlmd193b3JrLT5jb250ID0gY29udDsKKwlmd193b3JrLT51ZXZlbnQgPSB1ZXZlbnQ7CisKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KG1vZHVsZSkpIHsKIAkJa2ZyZWUoZndfd29yayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCSpmd193b3JrID0gKHN0cnVjdCBmaXJtd2FyZV93b3JrKSB7Ci0JCS5tb2R1bGUgPSBtb2R1bGUsCi0JCS5uYW1lID0gbmFtZSwKLQkJLmRldmljZSA9IGRldmljZSwKLQkJLmNvbnRleHQgPSBjb250ZXh0LAotCQkuY29udCA9IGNvbnQsCi0JCS51ZXZlbnQgPSB1ZXZlbnQsCi0JfTsKLQogCXRhc2sgPSBrdGhyZWFkX3J1bihyZXF1ZXN0X2Zpcm13YXJlX3dvcmtfZnVuYywgZndfd29yaywKIAkJCSAgICAiZmlybXdhcmUvJXMiLCBuYW1lKTsKLQogCWlmIChJU19FUlIodGFzaykpIHsKIAkJZndfd29yay0+Y29udChOVUxMLCBmd193b3JrLT5jb250ZXh0KTsKIAkJbW9kdWxlX3B1dChmd193b3JrLT5tb2R1bGUpOwogCQlrZnJlZShmd193b3JrKTsKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9ub2RlLmMgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCmluZGV4IDJiZGQ4YTkuLjI4NzJlODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9ub2RlLmMKKysrIGIvZHJpdmVycy9iYXNlL25vZGUuYwpAQCAtNjYsOCArNjYsNyBAQAogCXN0cnVjdCBzeXNpbmZvIGk7CiAKIAlzaV9tZW1pbmZvX25vZGUoJmksIG5pZCk7Ci0KLQluID0gc3ByaW50ZihidWYsICJcbiIKKwluID0gc3ByaW50ZihidWYsCiAJCSAgICAgICAiTm9kZSAlZCBNZW1Ub3RhbDogICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgTWVtRnJlZTogICAgICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIE1lbVVzZWQ6ICAgICAgICAlOGx1IGtCXG4iCkBAIC03OCwxMyArNzcsMzMgQEAKIAkJICAgICAgICJOb2RlICVkIEFjdGl2ZShmaWxlKTogICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBJbmFjdGl2ZShmaWxlKTogJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgVW5ldmljdGFibGU6ICAgICU4bHUga0JcbiIKLQkJICAgICAgICJOb2RlICVkIE1sb2NrZWQ6ICAgICAgICAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBNbG9ja2VkOiAgICAgICAgJThsdSBrQlxuIiwKKwkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtKSwKKwkJICAgICAgIG5pZCwgSyhpLmZyZWVyYW0pLAorCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0gLSBpLmZyZWVyYW0pLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKKwkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSArCisJCQkJbm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9BTk9OKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfQU5PTikpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0FDVElWRV9GSUxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfSU5BQ1RJVkVfRklMRSkpLAorCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX1VORVZJQ1RBQkxFKSksCisJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfTUxPQ0spKSk7CisKICNpZmRlZiBDT05GSUdfSElHSE1FTQorCW4gKz0gc3ByaW50ZihidWYgKyBuLAogCQkgICAgICAgIk5vZGUgJWQgSGlnaFRvdGFsOiAgICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIEhpZ2hGcmVlOiAgICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBMb3dUb3RhbDogICAgICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTG93RnJlZTogICAgICAgICU4bHUga0JcbiIKKwkJICAgICAgICJOb2RlICVkIExvd0ZyZWU6ICAgICAgICAlOGx1IGtCXG4iLAorCQkgICAgICAgbmlkLCBLKGkudG90YWxoaWdoKSwKKwkJICAgICAgIG5pZCwgSyhpLmZyZWVoaWdoKSwKKwkJICAgICAgIG5pZCwgSyhpLnRvdGFscmFtIC0gaS50b3RhbGhpZ2gpLAorCQkgICAgICAgbmlkLCBLKGkuZnJlZXJhbSAtIGkuZnJlZWhpZ2gpKTsKICNlbmRpZgorCW4gKz0gc3ByaW50ZihidWYgKyBuLAogCQkgICAgICAgIk5vZGUgJWQgRGlydHk6ICAgICAgICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIFdyaXRlYmFjazogICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBGaWxlUGFnZXM6ICAgICAgJThsdSBrQlxuIgpAQCAtOTksMjUgKzExOCw2IEBACiAJCSAgICAgICAiTm9kZSAlZCBTbGFiOiAgICAgICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgU1JlY2xhaW1hYmxlOiAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIFNVbnJlY2xhaW06ICAgICAlOGx1IGtCXG4iLAotCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0pLAotCQkgICAgICAgbmlkLCBLKGkuZnJlZXJhbSksCi0JCSAgICAgICBuaWQsIEsoaS50b3RhbHJhbSAtIGkuZnJlZXJhbSksCi0JCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0FOT04pICsKLQkJCQlub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9BQ1RJVkVfRklMRSkpLAotCQkgICAgICAgbmlkLCBLKG5vZGVfcGFnZV9zdGF0ZShuaWQsIE5SX0lOQUNUSVZFX0FOT04pICsKLQkJCQlub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9GSUxFKSksCi0JCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0FOT04pKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9BTk9OKSksCi0JCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfQUNUSVZFX0ZJTEUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9JTkFDVElWRV9GSUxFKSksCi0JCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfVU5FVklDVEFCTEUpKSwKLQkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9NTE9DSykpLAotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JCSAgICAgICBuaWQsIEsoaS50b3RhbGhpZ2gpLAotCQkgICAgICAgbmlkLCBLKGkuZnJlZWhpZ2gpLAotCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0gLSBpLnRvdGFsaGlnaCksCi0JCSAgICAgICBuaWQsIEsoaS5mcmVlcmFtIC0gaS5mcmVlaGlnaCksCi0jZW5kaWYKIAkJICAgICAgIG5pZCwgSyhub2RlX3BhZ2Vfc3RhdGUobmlkLCBOUl9GSUxFX0RJUlRZKSksCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfV1JJVEVCQUNLKSksCiAJCSAgICAgICBuaWQsIEsobm9kZV9wYWdlX3N0YXRlKG5pZCwgTlJfRklMRV9QQUdFUykpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBmNjk5ZmFiLi5jNmM5MzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMTkyLDEzICsxOTIsMTMgQEAKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7CisJciA9IGttZW1kdXAocmVzLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG51bSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIpIHsKLQkJbWVtY3B5KHIsIHJlcywgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBudW0pOwogCQlwZGV2LT5yZXNvdXJjZSA9IHI7CiAJCXBkZXYtPm51bV9yZXNvdXJjZXMgPSBudW07CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gciA/IDAgOiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMpOwogCkBAIC0zNDUsMTA4ICszNDUsNTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlIC0gYWRkIGEgcGxhdGZvcm0tbGV2ZWwgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzCisgKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEgLSBhZGQgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2Ugd2l0aAorICogcmVzb3VyY2VzIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCisgKgorICogQHBhcmVudDogcGFyZW50IGRldmljZSBmb3IgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKICAqIEBuYW1lOiBiYXNlIG5hbWUgb2YgdGhlIGRldmljZSB3ZSdyZSBhZGRpbmcKICAqIEBpZDogaW5zdGFuY2UgaWQKICAqIEByZXM6IHNldCBvZiByZXNvdXJjZXMgdGhhdCBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UKICAqIEBudW06IG51bWJlciBvZiByZXNvdXJjZXMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAotICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQotICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQotICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQotICogZHJvcHBlZC4KLSAqCi0gKiBUaGlzIGludGVyZmFjZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIGxlZ2FjeSBkcml2ZXJzIHdoaWNoCi0gKiBwcm9iZSBoYXJkd2FyZSBkaXJlY3RseS4gIEJlY2F1c2Ugc3VjaCBkcml2ZXJzIGNyZWF0ZSBzeXNmcyBkZXZpY2Ugbm9kZXMKLSAqIHRoZW1zZWx2ZXMsIHJhdGhlciB0aGFuIGxldHRpbmcgc3lzdGVtIGluZnJhc3RydWN0dXJlIGhhbmRsZSBzdWNoIGRldmljZQotICogZW51bWVyYXRpb24gdGFza3MsIHRoZXkgZG9uJ3QgZnVsbHkgY29uZm9ybSB0byB0aGUgTGludXggZHJpdmVyIG1vZGVsLgotICogSW4gcGFydGljdWxhciwgd2hlbiBzdWNoIGRyaXZlcnMgYXJlIGJ1aWx0IGFzIG1vZHVsZXMsIHRoZXkgY2FuJ3QgYmUKLSAqICJob3RwbHVnZ2VkIi4KLSAqCi0gKiBSZXR1cm5zICZzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgb24gc3VjY2Vzcywgb3IgRVJSX1BUUigpIG9uIGVycm9yLgotICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCQkJaW50IGlkLAotCQkJCQkJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLAotCQkJCQkJCXVuc2lnbmVkIGludCBudW0pCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlpbnQgcmV0dmFsOwotCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhuYW1lLCBpZCk7Ci0JaWYgKCFwZGV2KSB7Ci0JCXJldHZhbCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKG51bSkgewotCQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG51bSk7Ci0JCWlmIChyZXR2YWwpCi0JCQlnb3RvIGVycm9yOwotCX0KLQotCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiBwZGV2OwotCi1lcnJvcjoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwotCXJldHVybiBFUlJfUFRSKHJldHZhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKTsKLQotLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSAtIGFkZCBhIHBsYXRmb3JtLWxldmVsIGRldmljZSB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEKLSAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCi0gKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCi0gKiBAaWQ6IGluc3RhbmNlIGlkCiAgKiBAZGF0YTogcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgdGhpcyBwbGF0Zm9ybSBkZXZpY2UKICAqIEBzaXplOiBzaXplIG9mIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaW1wbGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgcmVxdWlyZXMgbWluaW1hbAotICogcmVzb3VyY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBDYW5uZWQgcmVsZWFzZSBmdW5jdGlvbiBmcmVlaW5nIG1lbW9yeQotICogYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlIGFsbG93cyBkcml2ZXJzIHVzaW5nIHN1Y2ggZGV2aWNlcyB0byBiZQotICogdW5sb2FkZWQgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIGRldmljZSB0byBiZQotICogZHJvcHBlZC4KLSAqCiAgKiBSZXR1cm5zICZzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvaW50ZXIgb24gc3VjY2Vzcywgb3IgRVJSX1BUUigpIG9uIGVycm9yLgogICovCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSgKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdF9vcl9tb2R1bGUgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKAogCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKKwkJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW0sCiAJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQogeworCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JaW50IHJldHZhbDsKIAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MobmFtZSwgaWQpOwotCWlmICghcGRldikgewotCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KKwlpZiAoIXBkZXYpCisJCWdvdG8gZXJyOwogCiAJcGRldi0+ZGV2LnBhcmVudCA9IHBhcmVudDsKIAotCWlmIChzaXplKSB7Ci0JCXJldHZhbCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplKTsKLQkJaWYgKHJldHZhbCkKLQkJCWdvdG8gZXJyb3I7CisJaWYgKHJlcykgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG51bSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKIAl9CiAKLQlyZXR2YWwgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyb3I7CisJaWYgKGRhdGEpIHsKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAocmV0KSB7CitlcnI6CisJCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQogCiAJcmV0dXJuIHBkZXY7Ci0KLWVycm9yOgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9yZXNuZGF0YSk7CiAKIHN0YXRpYyBpbnQgcGxhdGZvcm1fZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCBjNWYyMmJiLi40ZTJjMzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTc5LDIzICs3OSwyOCBAQAogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAlEQUM5NjBfQ29udHJvbGxlcl9UICpwID0gZGlzay0+cXVldWUtPnF1ZXVlZGF0YTsKIAlpbnQgZHJpdmVfbnIgPSAobG9uZylkaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IC1FTlhJTzsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKHAtPkZpcm13YXJlVHlwZSA9PSBEQUM5NjBfVjFfQ29udHJvbGxlcikgewogCQlpZiAocC0+VjEuTG9naWNhbERyaXZlSW5mb3JtYXRpb25bZHJpdmVfbnJdLgogCQkgICAgTG9naWNhbERyaXZlU3RhdGUgPT0gREFDOTYwX1YxX0xvZ2ljYWxEcml2ZV9PZmZsaW5lKQotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCURBQzk2MF9WMl9Mb2dpY2FsRGV2aWNlSW5mb19UICppID0KIAkJCXAtPlYyLkxvZ2ljYWxEZXZpY2VJbmZvcm1hdGlvbltkcml2ZV9ucl07CiAJCWlmICghaSB8fCBpLT5Mb2dpY2FsRGV2aWNlU3RhdGUgPT0gREFDOTYwX1YyX0xvZ2ljYWxEZXZpY2VfT2ZmbGluZSkKLQkJCXJldHVybiAtRU5YSU87CisJCQlnb3RvIG91dDsKIAl9CiAKIAljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKIAogCWlmICghZ2V0X2NhcGFjaXR5KHAtPmRpc2tzW2RyaXZlX25yXSkpCi0JCXJldHVybiAtRU5YSU87Ci0JcmV0dXJuIDA7CisJCWdvdG8gb3V0OworCXJldCA9IDA7CitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgREFDOTYwX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW1pZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKaW5kZXggODMyNzk4YS4uNzZmMTE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYW1pZmRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9hbWlmZC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CkBAIC0xNDIzLDcgKzE0MjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKK3N0YXRpYyBpbnQgZmRfbG9ja2VkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7CiAJc3RydWN0IGFtaWdhX2Zsb3BweV9zdHJ1Y3QgKnAgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CkBAIC0xNTAwLDYgKzE1MDEsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBmZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gZmRfbG9ja2VkX2lvY3RsKGJkZXYsIG1vZGUsIGNtZCwgcGFyYW0pOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIGZkX3Byb2JlKGludCBkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBjb2RlOwpAQCAtMTU0MiwxMCArMTU1NSwxMyBAQAogCWludCBvbGRfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW9sZF9kZXYgPSBmZF9kZXZpY2VbZHJpdmVdOwogCi0JaWYgKGZkX3JlZltkcml2ZV0gJiYgb2xkX2RldiAhPSBzeXN0ZW0pCisJaWYgKGZkX3JlZltkcml2ZV0gJiYgb2xkX2RldiAhPSBzeXN0ZW0pIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWlmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CiAJCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwpAQCAtMTU1OCw4ICsxNTc0LDEwIEBACiAJCQlmZF9kZXNlbGVjdCAoZHJpdmUpOwogCQkJcmVsX2ZkYygpOwogCi0JCQlpZiAod3Jwcm90KQorCQkJaWYgKHdycHJvdCkgeworCQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCQlyZXR1cm4gLUVST0ZTOworCQkJfQogCQl9CiAJfQogCkBAIC0xNTc2LDYgKzE1OTQsNyBAQAogCXByaW50ayhLRVJOX0lORk8gImZkJWQ6IGFjY2Vzc2luZyAlcy1kaXNrIHdpdGggJXMtbGF5b3V0XG4iLGRyaXZlLAogCSAgICAgICB1bml0W2RyaXZlXS50eXBlLT5uYW1lLCBkYXRhX3R5cGVzW3N5c3RlbV0ubmFtZSk7CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1ODQsNiArMTYwMyw3IEBACiAJc3RydWN0IGFtaWdhX2Zsb3BweV9zdHJ1Y3QgKnAgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IGRyaXZlID0gcCAtIHVuaXQ7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWlmICh1bml0W2RyaXZlXS5kaXJ0eSA9PSAxKSB7CiAJCWRlbF90aW1lciAoZmx1c2hfdHJhY2tfdGltZXIgKyBkcml2ZSk7CiAJCW5vbl9pbnRfZmx1c2hfdHJhY2sgKGRyaXZlKTsKQEAgLTE1OTcsNiArMTYxNyw3IEBACiAvKiB0aGUgbW9kX3VzZSBjb3VudGVyIGlzIGhhbmRsZWQgdGhpcyB3YXkgKi8KIAlmbG9wcHlfb2ZmIChkcml2ZSB8IDB4NDAwMDAwMDApOwogI2VuZGlmCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjM4LDcgKzE2NTksNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBmbG9wcHlfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBmZF9pb2N0bCwKKwkuaW9jdGwJCT0gZmRfaW9jdGwsCiAJLmdldGdlbwkJPSBmZF9nZXRnZW8sCiAJLm1lZGlhX2NoYW5nZWQJPSBhbWlnYV9mbG9wcHlfY2hhbmdlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZWJsay5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKaW5kZXggMDM1Y2VmZS4uYTk0NjkyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgImFvZS5oIgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJ1Zl9wb29sX2NhY2hlOwpAQCAtMTI0LDEzICsxMjUsMTYgQEAKIAlzdHJ1Y3QgYW9lZGV2ICpkID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCXVsb25nIGZsYWdzOwogCisJbG9ja19rZXJuZWwoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZC0+bG9jaywgZmxhZ3MpOwogCWlmIChkLT5mbGFncyAmIERFVkZMX1VQKSB7CiAJCWQtPm5vcGVuKys7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQtPmxvY2ssIGZsYWdzKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gMDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZC0+bG9jaywgZmxhZ3MpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApAQCAtMTczLDcgKzE3Nyw3IEBACiAJCUJVRygpOwogCQliaW9fZW5kaW8oYmlvLCAtRU5YSU8pOwogCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSB7CisJfSBlbHNlIGlmIChiaW8tPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSKSB7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChiaW8tPmJpX2lvX3ZlYyA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2F0YWZsb3AuYyBiL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCmluZGV4IGUzNWNmNTkuLmFjZWI5NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9hdGFmZC5oPgogI2luY2x1ZGUgPGFzbS9hdGFmZHJlZy5oPgpAQCAtMzU5LDcgKzM2MCw3IEBACiBzdGF0aWMgdm9pZCBmaW5pc2hfZmRjX2RvbmUoIGludCBkdW1teSApOwogc3RhdGljIHZvaWQgc2V0dXBfcmVxX3BhcmFtcyggaW50IGRyaXZlICk7CiBzdGF0aWMgdm9pZCByZWRvX2ZkX3JlcXVlc3QoIHZvaWQpOwotc3RhdGljIGludCBmZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludAorc3RhdGljIGludCBmZF9sb2NrZWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQKICAgICAgICAgICAgICAgICAgICAgIGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSk7CiBzdGF0aWMgdm9pZCBmZF9wcm9iZSggaW50IGRyaXZlICk7CiBzdGF0aWMgaW50IGZkX3Rlc3RfZHJpdmVfcHJlc2VudCggaW50IGRyaXZlICk7CkBAIC0xNDgwLDcgKzE0ODEsNyBAQAogCWF0YXJpX2VuYWJsZV9pcnEoIElSUV9NRlBfRkRDICk7CiB9CiAKLXN0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorc3RhdGljIGludCBmZF9sb2NrZWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CkBAIC0xNjY1LDYgKzE2NjYsMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBmZF9sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CiAKIC8qIEluaXRpYWxpemUgdGhlICd1bml0JyB2YXJpYWJsZSBmb3IgZHJpdmUgJ2RyaXZlJyAqLwogCkBAIC0xODM4LDI0ICsxODUwLDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZmxvcHB5X3VubG9ja2VkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGZsb3BweV9vcGVuKGJkZXYsIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgYXRhcmlfZmxvcHB5X3N0cnVjdCAqcCA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlsb2NrX2tlcm5lbCgpOwogCWlmIChwLT5yZWYgPCAwKQogCQlwLT5yZWYgPSAwOwogCWVsc2UgaWYgKCFwLT5yZWYtLSkgewogCQlwcmludGsoS0VSTl9FUlIgImZsb3BweV9yZWxlYXNlIHdpdGggZmRfcmVmID09IDAiKTsKIAkJcC0+cmVmID0gMDsKIAl9CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGZsb3BweV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBmbG9wcHlfb3BlbiwKKwkub3BlbgkJPSBmbG9wcHlfdW5sb2NrZWRfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBmZF9pb2N0bCwKKwkuaW9jdGwJCT0gZmRfaW9jdGwsCiAJLm1lZGlhX2NoYW5nZWQJPSBjaGVja19mbG9wcHlfY2hhbmdlLAogCS5yZXZhbGlkYXRlX2Rpc2s9IGZsb3BweV9yZXZhbGlkYXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYnJkLmMgYi9kcml2ZXJzL2Jsb2NrL2JyZC5jCmluZGV4IGYxYmY3OWQuLjFjN2Y2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYnJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9icmQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPiAvKiBpbnZhbGlkYXRlX2JoX2xydXMoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTM0MCw3ICszNDEsNyBAQAogCQkJCQkJZ2V0X2NhcGFjaXR5KGJkZXYtPmJkX2Rpc2spKQogCQlnb3RvIG91dDsKIAotCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvLT5iaV9ydyAmIFJFUV9ESVNDQVJEKSkgewogCQllcnIgPSAwOwogCQlkaXNjYXJkX2Zyb21fYnJkKGJyZCwgc2VjdG9yLCBiaW8tPmJpX3NpemUpOwogCQlnb3RvIG91dDsKQEAgLTQwMSw2ICs0MDIsNyBAQAogCSAqIHJhbSBkZXZpY2UgQkxLRkxTQlVGIGhhcyBzcGVjaWFsIHNlbWFudGljcywgd2Ugd2FudCB0byBhY3R1YWxseQogCSAqIHJlbGVhc2UgYW5kIGRlc3Ryb3kgdGhlIHJhbWRpc2sgZGF0YS4KIAkgKi8KKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKIAllcnJvciA9IC1FQlVTWTsKIAlpZiAoYmRldi0+YmRfb3BlbmVycyA8PSAxKSB7CkBAIC00MTcsMTMgKzQxOSwxNCBAQAogCQllcnJvciA9IDA7CiAJfQogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBicmRfZm9wcyA9IHsKIAkub3duZXIgPQkJVEhJU19NT0RVTEUsCi0JLmxvY2tlZF9pb2N0bCA9CQlicmRfaW9jdGwsCisJLmlvY3RsID0JCWJyZF9pb2N0bCwKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9YSVAKIAkuZGlyZWN0X2FjY2VzcyA9CWJyZF9kaXJlY3RfYWNjZXNzLAogI2VuZGlmCkBAIC00NzksNyArNDgyLDcgQEAKIAlpZiAoIWJyZC0+YnJkX3F1ZXVlKQogCQlnb3RvIG91dF9mcmVlX2RldjsKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KGJyZC0+YnJkX3F1ZXVlLCBicmRfbWFrZV9yZXF1ZXN0KTsKLQlibGtfcXVldWVfb3JkZXJlZChicmQtPmJyZF9xdWV1ZSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOworCWJsa19xdWV1ZV9vcmRlcmVkKGJyZC0+YnJkX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX1RBRyk7CiAJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKGJyZC0+YnJkX3F1ZXVlLCAxMDI0KTsKIAlibGtfcXVldWVfYm91bmNlX2xpbWl0KGJyZC0+YnJkX3F1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCBlMWU3MTQzLi4zMTA2NGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC01NiwxNiArNTYsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNkZWZpbmUgQ0NJU1NfRFJJVkVSX1ZFUlNJT04obWFqLG1pbixzdWJtaW4pICgobWFqPDwxNil8KG1pbjw8OCl8KHN1Ym1pbikpCi0jZGVmaW5lIERSSVZFUl9OQU1FICJIUCBDSVNTIERyaXZlciAodiAzLjYuMjApIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBDQ0lTU19EUklWRVJfVkVSU0lPTigzLCA2LCAyMCkKKyNkZWZpbmUgRFJJVkVSX05BTUUgIkhQIENJU1MgRHJpdmVyICh2IDMuNi4yNikiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OIENDSVNTX0RSSVZFUl9WRVJTSU9OKDMsIDYsIDI2KQogCiAvKiBFbWJlZGRlZCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBtYWNyb3MgLSBzZWUgbW9kdWxlcy5oICovCiBNT0RVTEVfQVVUSE9SKCJIZXdsZXR0LVBhY2thcmQgQ29tcGFueSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEhQIFNtYXJ0IEFycmF5IENvbnRyb2xsZXJzIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiSFAgU0E1aSBTQTVpKyBTQTUzMiBTQTUzMDAgU0E1MzEyIFNBNjQxIFNBNjQyIFNBNjQwMCIKLQkJCSIgU0E2aSBQNjAwIFA4MDAgUDQwMCBQNDAwaSBFMjAwIEUyMDBpIEU1MDAgUDcwMG0iCi0JCQkiIFNtYXJ0IEFycmF5IEcyIFNlcmllcyBTQVMvU0FUQSBDb250cm9sbGVycyIpOwotTU9EVUxFX1ZFUlNJT04oIjMuNi4yMCIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkhQIFNtYXJ0IEFycmF5IENvbnRyb2xsZXJzIik7CitNT0RVTEVfVkVSU0lPTigiMy42LjI2Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgY2Npc3NfYWxsb3dfaHBzYTsKQEAgLTEwNyw2ICsxMDUsMTEgQEAKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0OX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEF9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjRCfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI1MH0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNTF9LAorCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjUyfSwKKwl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI1M30sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNTR9LAogCXswLH0KIH07CiAKQEAgLTE0Niw2ICsxNDksMTEgQEAKIAl7MHgzMjQ5MTAzQywgIlNtYXJ0IEFycmF5IFA4MTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0QTEwM0MsICJTbWFydCBBcnJheSBQNzEybSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjRCMTAzQywgIlNtYXJ0IEFycmF5IFA3MTFtIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNTAxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI1MTEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjUyMTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyNTMxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCisJezB4MzI1NDEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKIH07CiAKIC8qIEhvdyBsb25nIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIGJvYXJkIHRvIGdvIGludG8gc2ltcGxlIG1vZGUgKi8KQEAgLTE2Nyw5ICsxNzUsMTMgQEAKIHN0YXRpYyBMSVNUX0hFQUQoc2Nhbl9xKTsKIAogc3RhdGljIHZvaWQgZG9fY2Npc3NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOworc3RhdGljIGlycXJldHVybl90IGRvX2NjaXNzX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgY2Npc3Nfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpOworc3RhdGljIGludCBjY2lzc191bmxvY2tlZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CiBzdGF0aWMgaW50IGNjaXNzX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSk7CitzdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgY2Npc3NfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBjY2lzc19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwpAQCAtMTc5LDI1ICsxOTEsMjMgQEAKIHN0YXRpYyBpbnQgZGVyZWdpc3Rlcl9kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4LAogCQkJICAgaW50IGNsZWFyX2FsbCwgaW50IHZpYV9pb2N0bCk7CiAKLXN0YXRpYyB2b2lkIGNjaXNzX3JlYWRfY2FwYWNpdHkoaW50IGN0bHIsIGludCBsb2d2b2wsCitzdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGN0bHJfaW5mb190ICpoLCBpbnQgbG9ndm9sLAogCQkJc2VjdG9yX3QgKnRvdGFsX3NpemUsIHVuc2lnbmVkIGludCAqYmxvY2tfc2l6ZSk7Ci1zdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5XzE2KGludCBjdGxyLCBpbnQgbG9ndm9sLAorc3RhdGljIHZvaWQgY2Npc3NfcmVhZF9jYXBhY2l0eV8xNihjdGxyX2luZm9fdCAqaCwgaW50IGxvZ3ZvbCwKIAkJCXNlY3Rvcl90ICp0b3RhbF9zaXplLCB1bnNpZ25lZCBpbnQgKmJsb2NrX3NpemUpOwotc3RhdGljIHZvaWQgY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShpbnQgY3RsciwgaW50IGxvZ3ZvbCwKK3N0YXRpYyB2b2lkIGNjaXNzX2dlb21ldHJ5X2lucXVpcnkoY3Rscl9pbmZvX3QgKmgsIGludCBsb2d2b2wsCiAJCQlzZWN0b3JfdCB0b3RhbF9zaXplLAogCQkJdW5zaWduZWQgaW50IGJsb2NrX3NpemUsIElucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmYsCiAJCQkJICAgZHJpdmVfaW5mb19zdHJ1Y3QgKmRydik7Ci1zdGF0aWMgdm9pZCBfX2RldmluaXQgY2Npc3NfaW50ZXJydXB0X21vZGUoY3Rscl9pbmZvX3QgKiwgc3RydWN0IHBjaV9kZXYgKiwKLQkJCQkJICAgX191MzIpOworc3RhdGljIHZvaWQgX19kZXZpbml0IGNjaXNzX2ludGVycnVwdF9tb2RlKGN0bHJfaW5mb190ICopOwogc3RhdGljIHZvaWQgc3RhcnRfaW8oY3Rscl9pbmZvX3QgKmgpOwotc3RhdGljIGludCBzZW5kY21kX3dpdGhpcnEoX191OCBjbWQsIGludCBjdGxyLCB2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwKK3N0YXRpYyBpbnQgc2VuZGNtZF93aXRoaXJxKGN0bHJfaW5mb190ICpoLCBfX3U4IGNtZCwgdm9pZCAqYnVmZiwgc2l6ZV90IHNpemUsCiAJCQlfX3U4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwKIAkJCWludCBjbWRfdHlwZSk7CiBzdGF0aWMgaW50IHNlbmRjbWRfd2l0aGlycV9jb3JlKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsCiAJaW50IGF0dGVtcHRfcmV0cnkpOwogc3RhdGljIGludCBwcm9jZXNzX3NlbmRjbWRfZXJyb3IoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYyk7CiAKLXN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKTsKIHN0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBpbnQgc2Nhbl90aHJlYWQodm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKTsKQEAgLTIwNSwxMSArMjE1LDIzIEBACiBzdGF0aWMgdm9pZCBjY2lzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4KTsKIHN0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCk7CitzdGF0aWMgaW5saW5lIHUzMiBuZXh0X2NvbW1hbmQoY3Rscl9pbmZvX3QgKmgpOworc3RhdGljIGludCBfX2RldmluaXQgY2Npc3NfZmluZF9jZmdfYWRkcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdm9pZCBfX2lvbWVtICp2YWRkciwgdTMyICpjZmdfYmFzZV9hZGRyLCB1NjQgKmNmZ19iYXNlX2FkZHJfaW5kZXgsCisJdTY0ICpjZmdfb2Zmc2V0KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNjaXNzX3BjaV9maW5kX21lbW9yeV9CQVIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdW5zaWduZWQgbG9uZyAqbWVtb3J5X2Jhcik7CisKKworLyogcGVyZm9ybWFudCBtb2RlIGhlbHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkICBjYWxjX2J1Y2tldF9tYXAoaW50ICpidWNrZXQsIGludCBudW1fYnVja2V0cywgaW50IG5zZ3MsCisJCQkJaW50ICpidWNrZXRfbWFwKTsKK3N0YXRpYyB2b2lkIGNjaXNzX3B1dF9jb250cm9sbGVyX2ludG9fcGVyZm9ybWFudF9tb2RlKGN0bHJfaW5mb190ICpoKTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgdm9pZCBjY2lzc19wcm9jaW5pdChpbnQgaSk7CitzdGF0aWMgdm9pZCBjY2lzc19wcm9jaW5pdChjdGxyX2luZm9fdCAqaCk7CiAjZWxzZQotc3RhdGljIHZvaWQgY2Npc3NfcHJvY2luaXQoaW50IGkpCitzdGF0aWMgdm9pZCBjY2lzc19wcm9jaW5pdChjdGxyX2luZm9fdCAqaCkKIHsKIH0KICNlbmRpZgkJCQkvKiBDT05GSUdfUFJPQ19GUyAqLwpAQCAtMjIxLDkgKzI0Myw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgY2Npc3NfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IGNjaXNzX29wZW4sCisJLm9wZW4gPSBjY2lzc191bmxvY2tlZF9vcGVuLAogCS5yZWxlYXNlID0gY2Npc3NfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsID0gY2Npc3NfaW9jdGwsCisJLmlvY3RsID0gZG9faW9jdGwsCiAJLmdldGdlbyA9IGNjaXNzX2dldGdlbywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IGNjaXNzX2NvbXBhdF9pb2N0bCwKQEAgLTIzMSw2ICsyNTMsMTYgQEAKIAkucmV2YWxpZGF0ZV9kaXNrID0gY2Npc3NfcmV2YWxpZGF0ZSwKIH07CiAKKy8qIHNldF9wZXJmb3JtYW50X21vZGU6IE1vZGlmeSB0aGUgdGFnIGZvciBjY2lzcyBwZXJmb3JtYW50CisgKiBzZXQgYml0IDAgZm9yIHB1bGwgbW9kZWwsIGJpdHMgMy0xIGZvciBibG9jayBmZXRjaAorICogcmVnaXN0ZXIgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIHNldF9wZXJmb3JtYW50X21vZGUoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYykKK3sKKwlpZiAobGlrZWx5KGgtPnRyYW5zTWV0aG9kID09IENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkKKwkJYy0+YnVzYWRkciB8PSAxIHwgKGgtPmJsb2NrRmV0Y2hUYWJsZVtjLT5IZWFkZXIuU0dMaXN0XSA8PCAxKTsKK30KKwogLyoKICAqIEVucXVldWluZyBhbmQgZGVxdWV1aW5nIGZ1bmN0aW9ucyBmb3IgY21kbGlzdHMuCiAgKi8KQEAgLTI1Nyw2ICsyODksMTggQEAKIAlobGlzdF9kZWxfaW5pdCgmYy0+bGlzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIGVucXVldWVfY21kX2FuZF9zdGFydF9pbyhjdGxyX2luZm9fdCAqaCwKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzZXRfcGVyZm9ybWFudF9tb2RlKGgsIGMpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJYWRkUSgmaC0+cmVxUSwgYyk7CisJaC0+UWRlcHRoKys7CisJc3RhcnRfaW8oaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBjY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3QsCiAJaW50IG5yX2NtZHMpCiB7CkBAIC0zNjYsMzIgKzQxMCwzMSBAQAogCQloLT5wcm9kdWN0X25hbWUsCiAJCSh1bnNpZ25lZCBsb25nKWgtPmJvYXJkX2lkLAogCQloLT5maXJtX3ZlclswXSwgaC0+ZmlybV92ZXJbMV0sIGgtPmZpcm1fdmVyWzJdLAotCQloLT5maXJtX3ZlclszXSwgKHVuc2lnbmVkIGludCloLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0sCisJCWgtPmZpcm1fdmVyWzNdLCAodW5zaWduZWQgaW50KWgtPmludHJbUEVSRl9NT0RFX0lOVF0sCiAJCWgtPm51bV9sdW5zLAogCQloLT5RZGVwdGgsIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nLAogCQloLT5tYXhRc2luY2Vpbml0LCBoLT5tYXhfb3V0c3RhbmRpbmcsIGgtPm1heFNHKTsKIAogI2lmZGVmIENPTkZJR19DSVNTX1NDU0lfVEFQRQotCWNjaXNzX3NlcV90YXBlX3JlcG9ydChzZXEsIGgtPmN0bHIpOworCWNjaXNzX3NlcV90YXBlX3JlcG9ydChzZXEsIGgpOwogI2VuZGlmIC8qIENPTkZJR19DSVNTX1NDU0lfVEFQRSAqLwogfQogCiBzdGF0aWMgdm9pZCAqY2Npc3Nfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBjdGxyID0gaC0+Y3RscjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogcHJldmVudCBkaXNwbGF5aW5nIGJvZ3VzIGluZm8gZHVyaW5nIGNvbmZpZ3VyYXRpb24KIAkgKiBvciBkZWNvbmZpZ3VyYXRpb24gb2YgYSBsb2dpY2FsIHZvbHVtZQogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CiAJfQogCWgtPmJ1c3lfY29uZmlndXJpbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAogCWlmICgqcG9zID09IDApCiAJCWNjaXNzX3NlcV9zaG93X2hlYWRlcihzZXEpOwpAQCAtNDk5LDcgKzU0Miw3IEBACiAJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKIAotCQllcnIgPSBjY2lzc19lbmdhZ2Vfc2NzaShoLT5jdGxyKTsKKwkJZXJyID0gY2Npc3NfZW5nYWdlX3Njc2koaCk7CiAJCWlmIChlcnIgPT0gMCkKIAkJCWVyciA9IGxlbmd0aDsKIAl9IGVsc2UKQEAgLTUyMiw3ICs1NjUsNyBAQAogCS53cml0ZQkgPSBjY2lzc19wcm9jX3dyaXRlLAogfTsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGNjaXNzX3Byb2Npbml0KGludCBpKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGNjaXNzX3Byb2Npbml0KGN0bHJfaW5mb190ICpoKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwogCkBAIC01MzAsOSArNTczLDkgQEAKIAkJcHJvY19jY2lzcyA9IHByb2NfbWtkaXIoImRyaXZlci9jY2lzcyIsIE5VTEwpOwogCWlmICghcHJvY19jY2lzcykKIAkJcmV0dXJuOwotCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEoaGJhW2ldLT5kZXZuYW1lLCBTX0lXVVNSIHwgU19JUlVTUiB8IFNfSVJHUlAgfAorCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEoaC0+ZGV2bmFtZSwgU19JV1VTUiB8IFNfSVJVU1IgfCBTX0lSR1JQIHwKIAkJCQkJU19JUk9USCwgcHJvY19jY2lzcywKLQkJCQkJJmNjaXNzX3Byb2NfZm9wcywgaGJhW2ldKTsKKwkJCQkJJmNjaXNzX3Byb2NfZm9wcywgaCk7CiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX1BST0NfRlMgKi8KIApAQCAtNTY1LDEyICs2MDgsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpCiAJCXJldCA9IC1FQlVTWTsKIAllbHNlCiAJCW1lbWNweShzbiwgZHJ2LT5zZXJpYWxfbm8sIHNpemVvZihzbikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01OTUsMTIgKzYzOCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaC0+YnVzeV9jb25maWd1cmluZykKIAkJcmV0ID0gLUVCVVNZOwogCWVsc2UKIAkJbWVtY3B5KHZlbmRvciwgZHJ2LT52ZW5kb3IsIFZFTkRPUl9MRU4gKyAxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNjE5LDEyICs2NjIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpCiAJCXJldCA9IC1FQlVTWTsKIAllbHNlCiAJCW1lbWNweShtb2RlbCwgZHJ2LT5tb2RlbCwgTU9ERUxfTEVOICsgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTY0MywxMiArNjg2LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKQogCQlyZXQgPSAtRUJVU1k7CiAJZWxzZQogCQltZW1jcHkocmV2LCBkcnYtPnJldiwgUkVWX0xFTiArIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC02NjUsMTcgKzcwOCwxNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBsdW5pZFs4XTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWlmICghZHJ2LT5oZWFkcykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiAJbWVtY3B5KGx1bmlkLCBkcnYtPkx1bklELCBzaXplb2YobHVuaWQpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjAsICIweCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAogCQlsdW5pZFswXSwgbHVuaWRbMV0sIGx1bmlkWzJdLCBsdW5pZFszXSwKIAkJbHVuaWRbNF0sIGx1bmlkWzVdLCBsdW5pZFs2XSwgbHVuaWRbN10pOwpAQCAtNjkwLDEzICs3MzMsMTMgQEAKIAlpbnQgcmFpZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcmFpZCA9IGRydi0+cmFpZF9sZXZlbDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJaWYgKHJhaWQgPCAwIHx8IHJhaWQgPiBSQUlEX1VOS05PV04pCiAJCXJhaWQgPSBSQUlEX1VOS05PV047CiAKQEAgLTcxMywxMyArNzU2LDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY291bnQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaC0+YnVzeV9jb25maWd1cmluZykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAljb3VudCA9IGRydi0+dXNhZ2VfY291bnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzbnByaW50ZihidWYsIDIwLCAiJWRcbiIsIGNvdW50KTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1c2FnZV9jb3VudCwgU19JUlVHTywgY2Npc3Nfc2hvd191c2FnZV9jb3VudCwgTlVMTCk7CkBAIC04NjQsNjAgKzkwNywzMSBAQAogLyoKICAqIEZvciBvcGVyYXRpb25zIHRoYXQgY2Fubm90IHNsZWVwLCBhIGNvbW1hbmQgYmxvY2sgaXMgYWxsb2NhdGVkIGF0IGluaXQsCiAgKiBhbmQgbWFuYWdlZCBieSBjbWRfYWxsb2MoKSBhbmQgY21kX2ZyZWUoKSB1c2luZyBhIHNpbXBsZSBiaXRtYXAgdG8gdHJhY2sKLSAqIHdoaWNoIG9uZXMgYXJlIGZyZWUgb3IgaW4gdXNlLiAgRm9yIG9wZXJhdGlvbnMgdGhhdCBjYW4gd2FpdCBmb3Iga21hbGxvYwotICogdG8gcG9zc2libGUgc2xlZXAsIHRoaXMgcm91dGluZSBjYW4gYmUgY2FsbGVkIHdpdGggZ2V0X2Zyb21fcG9vbCBzZXQgdG8gMC4KLSAqIGNtZF9mcmVlKCkgTVVTVCBiZSBjYWxsZWQgd2l0aCBhIGdvdF9mcm9tX3Bvb2wgc2V0IHRvIDAgaWYgY21kX2FsbG9jIHdhcy4KKyAqIHdoaWNoIG9uZXMgYXJlIGZyZWUgb3IgaW4gdXNlLgogICovCi1zdGF0aWMgQ29tbWFuZExpc3Rfc3RydWN0ICpjbWRfYWxsb2MoY3Rscl9pbmZvX3QgKmgsIGludCBnZXRfZnJvbV9wb29sKQorc3RhdGljIENvbW1hbmRMaXN0X3N0cnVjdCAqY21kX2FsbG9jKGN0bHJfaW5mb190ICpoKQogewogCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKIAlpbnQgaTsKIAl1NjRiaXQgdGVtcDY0OwogCWRtYV9hZGRyX3QgY21kX2RtYV9oYW5kbGUsIGVycl9kbWFfaGFuZGxlOwogCi0JaWYgKCFnZXRfZnJvbV9wb29sKSB7Ci0JCWMgPSAoQ29tbWFuZExpc3Rfc3RydWN0ICopIHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsCi0JCQlzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwgJmNtZF9kbWFfaGFuZGxlKTsKLQkJaWYgKGMgPT0gTlVMTCkKKwlkbyB7CisJCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGgtPmNtZF9wb29sX2JpdHMsIGgtPm5yX2NtZHMpOworCQlpZiAoaSA9PSBoLT5ucl9jbWRzKQogCQkJcmV0dXJuIE5VTEw7Ci0JCW1lbXNldChjLCAwLCBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSk7CisJfSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChpICYgKEJJVFNfUEVSX0xPTkcgLSAxKSwKKwkJICBoLT5jbWRfcG9vbF9iaXRzICsgKGkgLyBCSVRTX1BFUl9MT05HKSkgIT0gMCk7CisJYyA9IGgtPmNtZF9wb29sICsgaTsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCkpOworCWNtZF9kbWFfaGFuZGxlID0gaC0+Y21kX3Bvb2xfZGhhbmRsZSArIGkgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KTsKKwljLT5lcnJfaW5mbyA9IGgtPmVycmluZm9fcG9vbCArIGk7CisJbWVtc2V0KGMtPmVycl9pbmZvLCAwLCBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCkpOworCWVycl9kbWFfaGFuZGxlID0gaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUKKwkgICAgKyBpICogc2l6ZW9mKEVycm9ySW5mb19zdHJ1Y3QpOworCWgtPm5yX2FsbG9jcysrOwogCi0JCWMtPmNtZGluZGV4ID0gLTE7Ci0KLQkJYy0+ZXJyX2luZm8gPSAoRXJyb3JJbmZvX3N0cnVjdCAqKQotCQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKEVycm9ySW5mb19zdHJ1Y3QpLAotCQkJICAgICZlcnJfZG1hX2hhbmRsZSk7Ci0KLQkJaWYgKGMtPmVycl9pbmZvID09IE5VTEwpIHsKLQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJCQlzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwgYywgY21kX2RtYV9oYW5kbGUpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJbWVtc2V0KGMtPmVycl9pbmZvLCAwLCBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCkpOwotCX0gZWxzZSB7CQkvKiBnZXQgaXQgb3V0IG9mIHRoZSBjb250cm9sbGVycyBwb29sICovCi0KLQkJZG8gewotCQkJaSA9IGZpbmRfZmlyc3RfemVyb19iaXQoaC0+Y21kX3Bvb2xfYml0cywgaC0+bnJfY21kcyk7Ci0JCQlpZiAoaSA9PSBoLT5ucl9jbWRzKQotCQkJCXJldHVybiBOVUxMOwotCQl9IHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0Ci0JCQkgKGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAotCQkJICBoLT5jbWRfcG9vbF9iaXRzICsgKGkgLyBCSVRTX1BFUl9MT05HKSkgIT0gMCk7Ci0jaWZkZWYgQ0NJU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNjaXNzOiB1c2luZyBjb21tYW5kIGJ1ZmZlciAlZFxuIiwgaSk7Ci0jZW5kaWYKLQkJYyA9IGgtPmNtZF9wb29sICsgaTsKLQkJbWVtc2V0KGMsIDAsIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpKTsKLQkJY21kX2RtYV9oYW5kbGUgPSBoLT5jbWRfcG9vbF9kaGFuZGxlCi0JCSAgICArIGkgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KTsKLQkJYy0+ZXJyX2luZm8gPSBoLT5lcnJpbmZvX3Bvb2wgKyBpOwotCQltZW1zZXQoYy0+ZXJyX2luZm8sIDAsIHNpemVvZihFcnJvckluZm9fc3RydWN0KSk7Ci0JCWVycl9kbWFfaGFuZGxlID0gaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUKLQkJICAgICsgaSAqIHNpemVvZihFcnJvckluZm9fc3RydWN0KTsKLQkJaC0+bnJfYWxsb2NzKys7Ci0KLQkJYy0+Y21kaW5kZXggPSBpOwotCX0KKwljLT5jbWRpbmRleCA9IGk7CiAKIAlJTklUX0hMSVNUX05PREUoJmMtPmxpc3QpOwogCWMtPmJ1c2FkZHIgPSAoX191MzIpIGNtZF9kbWFfaGFuZGxlOwpAQCAtOTMwLDI3ICs5NDQsNjUgQEAKIAlyZXR1cm4gYzsKIH0KIAotLyoKLSAqIEZyZWVzIGEgY29tbWFuZCBibG9jayB0aGF0IHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIGNtZF9hbGxvYygpLgorLyogYWxsb2NhdGUgYSBjb21tYW5kIHVzaW5nIHBjaV9hbGxvY19jb25zaXN0ZW50LCB1c2VkIGZvciBpb2N0bHMsCisgKiBldGMuLCBub3QgZm9yIHRoZSBtYWluIGkvbyBwYXRoLgogICovCi1zdGF0aWMgdm9pZCBjbWRfZnJlZShjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjLCBpbnQgZ290X2Zyb21fcG9vbCkKK3N0YXRpYyBDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZF9zcGVjaWFsX2FsbG9jKGN0bHJfaW5mb190ICpoKQoreworCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKKwl1NjRiaXQgdGVtcDY0OworCWRtYV9hZGRyX3QgY21kX2RtYV9oYW5kbGUsIGVycl9kbWFfaGFuZGxlOworCisJYyA9IChDb21tYW5kTGlzdF9zdHJ1Y3QgKikgcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCksICZjbWRfZG1hX2hhbmRsZSk7CisJaWYgKGMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJbWVtc2V0KGMsIDAsIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpKTsKKworCWMtPmNtZGluZGV4ID0gLTE7CisKKwljLT5lcnJfaW5mbyA9IChFcnJvckluZm9fc3RydWN0ICopCisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZihFcnJvckluZm9fc3RydWN0KSwKKwkJICAgICZlcnJfZG1hX2hhbmRsZSk7CisKKwlpZiAoYy0+ZXJyX2luZm8gPT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQlzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwgYywgY21kX2RtYV9oYW5kbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtc2V0KGMtPmVycl9pbmZvLCAwLCBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCkpOworCisJSU5JVF9ITElTVF9OT0RFKCZjLT5saXN0KTsKKwljLT5idXNhZGRyID0gKF9fdTMyKSBjbWRfZG1hX2hhbmRsZTsKKwl0ZW1wNjQudmFsID0gKF9fdTY0KSBlcnJfZG1hX2hhbmRsZTsKKwljLT5FcnJEZXNjLkFkZHIubG93ZXIgPSB0ZW1wNjQudmFsMzIubG93ZXI7CisJYy0+RXJyRGVzYy5BZGRyLnVwcGVyID0gdGVtcDY0LnZhbDMyLnVwcGVyOworCWMtPkVyckRlc2MuTGVuID0gc2l6ZW9mKEVycm9ySW5mb19zdHJ1Y3QpOworCisJYy0+Y3RsciA9IGgtPmN0bHI7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9mcmVlKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCiB7CiAJaW50IGk7CisKKwlpID0gYyAtIGgtPmNtZF9wb29sOworCWNsZWFyX2JpdChpICYgKEJJVFNfUEVSX0xPTkcgLSAxKSwKKwkJICBoLT5jbWRfcG9vbF9iaXRzICsgKGkgLyBCSVRTX1BFUl9MT05HKSk7CisJaC0+bnJfZnJlZXMrKzsKK30KKworc3RhdGljIHZvaWQgY21kX3NwZWNpYWxfZnJlZShjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKQorewogCXU2NGJpdCB0ZW1wNjQ7CiAKLQlpZiAoIWdvdF9mcm9tX3Bvb2wpIHsKLQkJdGVtcDY0LnZhbDMyLmxvd2VyID0gYy0+RXJyRGVzYy5BZGRyLmxvd2VyOwotCQl0ZW1wNjQudmFsMzIudXBwZXIgPSBjLT5FcnJEZXNjLkFkZHIudXBwZXI7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKEVycm9ySW5mb19zdHJ1Y3QpLAotCQkJCSAgICBjLT5lcnJfaW5mbywgKGRtYV9hZGRyX3QpIHRlbXA2NC52YWwpOwotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpLAotCQkJCSAgICBjLCAoZG1hX2FkZHJfdCkgYy0+YnVzYWRkcik7Ci0JfSBlbHNlIHsKLQkJaSA9IGMgLSBoLT5jbWRfcG9vbDsKLQkJY2xlYXJfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAotCQkJICBoLT5jbWRfcG9vbF9iaXRzICsgKGkgLyBCSVRTX1BFUl9MT05HKSk7Ci0JCWgtPm5yX2ZyZWVzKys7Ci0JfQorCXRlbXA2NC52YWwzMi5sb3dlciA9IGMtPkVyckRlc2MuQWRkci5sb3dlcjsKKwl0ZW1wNjQudmFsMzIudXBwZXIgPSBjLT5FcnJEZXNjLkFkZHIudXBwZXI7CisJcGNpX2ZyZWVfY29uc2lzdGVudChoLT5wZGV2LCBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCksCisJCQkgICAgYy0+ZXJyX2luZm8sIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpLAorCQkJICAgIGMsIChkbWFfYWRkcl90KSBjLT5idXNhZGRyKTsKIH0KIAogc3RhdGljIGlubGluZSBjdGxyX2luZm9fdCAqZ2V0X2hvc3Qoc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC05NjgsMTMgKzEwMjAsMTAgQEAKICAqLwogc3RhdGljIGludCBjY2lzc19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKLQljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGJkZXYtPmJkX2Rpc2spOworCWN0bHJfaW5mb190ICpoID0gZ2V0X2hvc3QoYmRldi0+YmRfZGlzayk7CiAJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IGdldF9kcnYoYmRldi0+YmRfZGlzayk7CiAKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJjY2lzc19vcGVuICVzXG4iLCBiZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0KKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJjY2lzc19vcGVuICVzXG4iLCBiZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOwogCWlmIChkcnYtPmJ1c3lfY29uZmlndXJpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAJLyoKQEAgLTEwMDAsMjkgKzEwNDksMzkgQEAKIAkJCXJldHVybiAtRVBFUk07CiAJfQogCWRydi0+dXNhZ2VfY291bnQrKzsKLQlob3N0LT51c2FnZV9jb3VudCsrOworCWgtPnVzYWdlX2NvdW50Kys7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2Npc3NfdW5sb2NrZWRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gY2Npc3Nfb3BlbihiZGV2LCBtb2RlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogQ2xvc2UuICBTeW5jIGZpcnN0LgogICovCiBzdGF0aWMgaW50IGNjaXNzX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKLQljdGxyX2luZm9fdCAqaG9zdCA9IGdldF9ob3N0KGRpc2spOwotCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSBnZXRfZHJ2KGRpc2spOworCWN0bHJfaW5mb190ICpoOworCWRyaXZlX2luZm9fc3RydWN0ICpkcnY7CiAKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJjY2lzc19yZWxlYXNlICVzXG4iLCBkaXNrLT5kaXNrX25hbWUpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0KKwlsb2NrX2tlcm5lbCgpOworCWggPSBnZXRfaG9zdChkaXNrKTsKKwlkcnYgPSBnZXRfZHJ2KGRpc2spOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImNjaXNzX3JlbGVhc2UgJXNcbiIsIGRpc2stPmRpc2tfbmFtZSk7CiAJZHJ2LT51c2FnZV9jb3VudC0tOwotCWhvc3QtPnVzYWdlX2NvdW50LS07CisJaC0+dXNhZ2VfY291bnQtLTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0KIHN0YXRpYyBpbnQgZG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkgICAgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTEwMzMsNiArMTA5Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKKwogc3RhdGljIGludCBjY2lzc19pb2N0bDMyX3Bhc3N0aHJ1KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCQkgIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBjY2lzc19pb2N0bDMyX2JpZ19wYXNzdGhydShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCkBAIC0xMTYzLDExICsxMjI0LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX2lvY3RsX3VuaXRfYXR0ZW50aW9uKGN0bHJfaW5mb190ICpob3N0LCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCitzdGF0aWMgdm9pZCBjaGVja19pb2N0bF91bml0X2F0dGVudGlvbihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKQogewogCWlmIChjLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyA9PSBDTURfVEFSR0VUX1NUQVRVUyAmJgogCQkJYy0+ZXJyX2luZm8tPlNjc2lTdGF0dXMgIT0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OKQotCQkodm9pZCljaGVja19mb3JfdW5pdF9hdHRlbnRpb24oaG9zdCwgYyk7CisJCSh2b2lkKWNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihoLCBjKTsKIH0KIC8qCiAgKiBpb2N0bApAQCAtMTE3NiwxNSArMTIzNywxMiBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwotCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoZGlzayk7CisJY3Rscl9pbmZvX3QgKmggPSBnZXRfaG9zdChkaXNrKTsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gZ2V0X2RydihkaXNrKTsKLQlpbnQgY3RsciA9IGhvc3QtPmN0bHI7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJjY2lzc19pb2N0bDogQ2FsbGVkIHdpdGggY21kPSV4ICVseFxuIiwgY21kLCBhcmcpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0KKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJjY2lzc19pb2N0bDogQ2FsbGVkIHdpdGggY21kPSV4ICVseFxuIiwKKwkJY21kLCBhcmcpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDQ0lTU19HRVRQQ0lJTkZPOgogCQl7CkBAIC0xMTkyLDEwICsxMjUwLDEwIEBACiAKIAkJCWlmICghYXJnKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcGNpaW5mby5kb21haW4gPSBwY2lfZG9tYWluX25yKGhvc3QtPnBkZXYtPmJ1cyk7Ci0JCQlwY2lpbmZvLmJ1cyA9IGhvc3QtPnBkZXYtPmJ1cy0+bnVtYmVyOwotCQkJcGNpaW5mby5kZXZfZm4gPSBob3N0LT5wZGV2LT5kZXZmbjsKLQkJCXBjaWluZm8uYm9hcmRfaWQgPSBob3N0LT5ib2FyZF9pZDsKKwkJCXBjaWluZm8uZG9tYWluID0gcGNpX2RvbWFpbl9ucihoLT5wZGV2LT5idXMpOworCQkJcGNpaW5mby5idXMgPSBoLT5wZGV2LT5idXMtPm51bWJlcjsKKwkJCXBjaWluZm8uZGV2X2ZuID0gaC0+cGRldi0+ZGV2Zm47CisJCQlwY2lpbmZvLmJvYXJkX2lkID0gaC0+Ym9hcmRfaWQ7CiAJCQlpZiAoY29weV90b191c2VyCiAJCQkgICAgKGFyZ3AsICZwY2lpbmZvLCBzaXplb2YoY2Npc3NfcGNpX2luZm9fc3RydWN0KSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjA3LDkgKzEyNjUsOSBAQAogCQkJaWYgKCFhcmcpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlpbnRpbmZvLmRlbGF5ID0KLQkJCSAgICByZWFkbCgmaG9zdC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5Db2FsSW50RGVsYXkpOworCQkJICAgIHJlYWRsKCZoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLkNvYWxJbnREZWxheSk7CiAJCQlpbnRpbmZvLmNvdW50ID0KLQkJCSAgICByZWFkbCgmaG9zdC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5Db2FsSW50Q291bnQpOworCQkJICAgIHJlYWRsKCZoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLkNvYWxJbnRDb3VudCk7CiAJCQlpZiAoY29weV90b191c2VyCiAJCQkgICAgKGFyZ3AsICZpbnRpbmZvLCBzaXplb2YoY2Npc3NfY29hbGludF9zdHJ1Y3QpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEyMjksMjYgKzEyODcsMjMgQEAKIAkJCSAgICAoJmludGluZm8sIGFyZ3AsIHNpemVvZihjY2lzc19jb2FsaW50X3N0cnVjdCkpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJaWYgKChpbnRpbmZvLmRlbGF5ID09IDApICYmIChpbnRpbmZvLmNvdW50ID09IDApKQotCQkJewotLy8gICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJjY2lzc19pb2N0bDogZGVsYXkgYW5kIGNvdW50IGNhbm5vdCBiZSAwXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJCQkvKiBVcGRhdGUgdGhlIGZpZWxkLCBhbmQgdGhlbiByaW5nIHRoZSBkb29yYmVsbCAqLwogCQkJd3JpdGVsKGludGluZm8uZGVsYXksCi0JCQkgICAgICAgJihob3N0LT5jZmd0YWJsZS0+SG9zdFdyaXRlLkNvYWxJbnREZWxheSkpOworCQkJICAgICAgICYoaC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5Db2FsSW50RGVsYXkpKTsKIAkJCXdyaXRlbChpbnRpbmZvLmNvdW50LAotCQkJICAgICAgICYoaG9zdC0+Y2ZndGFibGUtPkhvc3RXcml0ZS5Db2FsSW50Q291bnQpKTsKLQkJCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBob3N0LT52YWRkciArIFNBNV9ET09SQkVMTCk7CisJCQkgICAgICAgJihoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLkNvYWxJbnRDb3VudCkpOworCQkJd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9JT0NUTF9DT05GSUdfV0FJVDsgaSsrKSB7Ci0JCQkJaWYgKCEocmVhZGwoaG9zdC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpCisJCQkJaWYgKCEocmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpCiAJCQkJICAgICAgJiBDRkdUQkxfQ2hhbmdlUmVxKSkKIAkJCQkJYnJlYWs7CiAJCQkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLwogCQkJCXVkZWxheSgxMDAwKTsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCQkJaWYgKGkgPj0gTUFYX0lPQ1RMX0NPTkZJR19XQUlUKQogCQkJCXJldHVybiAtRUFHQUlOOwogCQkJcmV0dXJuIDA7CkBAIC0xMjYyLDcgKzEzMTcsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCQkJTm9kZU5hbWVbaV0gPQotCQkJCSAgICByZWFkYigmaG9zdC0+Y2ZndGFibGUtPlNlcnZlck5hbWVbaV0pOworCQkJCSAgICByZWFkYigmaC0+Y2ZndGFibGUtPlNlcnZlck5hbWVbaV0pOwogCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBOb2RlTmFtZSwgc2l6ZW9mKE5vZGVOYW1lX3R5cGUpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCXJldHVybiAwOwpAQCAtMTI4MiwyMyArMTMzNywyMyBAQAogCQkJICAgIChOb2RlTmFtZSwgYXJncCwgc2l6ZW9mKE5vZGVOYW1lX3R5cGUpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAogCQkJLyogVXBkYXRlIHRoZSBmaWVsZCwgYW5kIHRoZW4gcmluZyB0aGUgZG9vcmJlbGwgKi8KIAkJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJCXdyaXRlYihOb2RlTmFtZVtpXSwKLQkJCQkgICAgICAgJmhvc3QtPmNmZ3RhYmxlLT5TZXJ2ZXJOYW1lW2ldKTsKKwkJCQkgICAgICAgJmgtPmNmZ3RhYmxlLT5TZXJ2ZXJOYW1lW2ldKTsKIAotCQkJd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGhvc3QtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwkJCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9DVExfQ09ORklHX1dBSVQ7IGkrKykgewotCQkJCWlmICghKHJlYWRsKGhvc3QtPnZhZGRyICsgU0E1X0RPT1JCRUxMKQorCQkJCWlmICghKHJlYWRsKGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKQogCQkJCSAgICAgICYgQ0ZHVEJMX0NoYW5nZVJlcSkpCiAJCQkJCWJyZWFrOwogCQkJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KIAkJCQl1ZGVsYXkoMTAwMCk7CiAJCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAkJCWlmIChpID49IE1BWF9JT0NUTF9DT05GSUdfV0FJVCkKIAkJCQlyZXR1cm4gLUVBR0FJTjsKIAkJCXJldHVybiAwOwpAQCAtMTMxMCw3ICsxMzY1LDcgQEAKIAogCQkJaWYgKCFhcmcpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQloZWFydGJlYXQgPSByZWFkbCgmaG9zdC0+Y2ZndGFibGUtPkhlYXJ0QmVhdCk7CisJCQloZWFydGJlYXQgPSByZWFkbCgmaC0+Y2ZndGFibGUtPkhlYXJ0QmVhdCk7CiAJCQlpZiAoY29weV90b191c2VyCiAJCQkgICAgKGFyZ3AsICZoZWFydGJlYXQsIHNpemVvZihIZWFydGJlYXRfdHlwZSkpKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMyMiw3ICsxMzc3LDcgQEAKIAogCQkJaWYgKCFhcmcpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlCdXNUeXBlcyA9IHJlYWRsKCZob3N0LT5jZmd0YWJsZS0+QnVzVHlwZXMpOworCQkJQnVzVHlwZXMgPSByZWFkbCgmaC0+Y2ZndGFibGUtPkJ1c1R5cGVzKTsKIAkJCWlmIChjb3B5X3RvX3VzZXIKIAkJCSAgICAoYXJncCwgJkJ1c1R5cGVzLCBzaXplb2YoQnVzVHlwZXNfdHlwZSkpKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMzNCw3ICsxMzg5LDcgQEAKIAogCQkJaWYgKCFhcmcpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoZmlybXdhcmUsIGhvc3QtPmZpcm1fdmVyLCA0KTsKKwkJCW1lbWNweShmaXJtd2FyZSwgaC0+ZmlybV92ZXIsIDQpOwogCiAJCQlpZiAoY29weV90b191c2VyCiAJCQkgICAgKGFyZ3AsIGZpcm13YXJlLCBzaXplb2YoRmlybXdhcmVWZXJfdHlwZSkpKQpAQCAtMTM1Nyw3ICsxNDEyLDcgQEAKIAljYXNlIENDSVNTX0RFUkVHRElTSzoKIAljYXNlIENDSVNTX1JFR05FV0Q6CiAJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKLQkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIDAsIDEpOworCQlyZXR1cm4gcmVidWlsZF9sdW5fdGFibGUoaCwgMCwgMSk7CiAKIAljYXNlIENDSVNTX0dFVExVTklORk86ewogCQkJTG9ndm9sSW5mb19zdHJ1Y3QgbHVuaW5mbzsKQEAgLTEzNzcsNyArMTQzMiw2IEBACiAJCQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CiAJCQljaGFyICpidWZmID0gTlVMTDsKIAkJCXU2NGJpdCB0ZW1wNjQ7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAKIAkJCWlmICghYXJnKQpAQCAtMTQxMyw3ICsxNDY3LDggQEAKIAkJCX0gZWxzZSB7CiAJCQkJbWVtc2V0KGJ1ZmYsIDAsIGlvY29tbWFuZC5idWZfc2l6ZSk7CiAJCQl9Ci0JCQlpZiAoKGMgPSBjbWRfYWxsb2MoaG9zdCwgMCkpID09IE5VTEwpIHsKKwkJCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwkJCWlmICghYykgewogCQkJCWtmcmVlKGJ1ZmYpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQpAQCAtMTQzOSw3ICsxNDk0LDcgQEAKIAogCQkJLyogRmlsbCBpbiB0aGUgc2NhdHRlciBnYXRoZXIgaW5mb3JtYXRpb24gKi8KIAkJCWlmIChpb2NvbW1hbmQuYnVmX3NpemUgPiAwKSB7Ci0JCQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGhvc3QtPnBkZXYsIGJ1ZmYsCisJCQkJdGVtcDY0LnZhbCA9IHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmYsCiAJCQkJCWlvY29tbWFuZC5idWZfc2l6ZSwKIAkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJCQljLT5TR1swXS5BZGRyLmxvd2VyID0gdGVtcDY0LnZhbDMyLmxvd2VyOwpAQCAtMTQ0OSwzMCArMTUwNCwyNCBAQAogCQkJfQogCQkJYy0+d2FpdGluZyA9ICZ3YWl0OwogCi0JCQkvKiBQdXQgdGhlIHJlcXVlc3Qgb24gdGhlIHRhaWwgb2YgdGhlIHJlcXVlc3QgcXVldWUgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQkJCWFkZFEoJmhvc3QtPnJlcVEsIGMpOwotCQkJaG9zdC0+UWRlcHRoKys7Ci0JCQlzdGFydF9pbyhob3N0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCisJCQllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKIAogCQkJLyogdW5sb2NrIHRoZSBidWZmZXJzIGZyb20gRE1BICovCiAJCQl0ZW1wNjQudmFsMzIubG93ZXIgPSBjLT5TR1swXS5BZGRyLmxvd2VyOwogCQkJdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+U0dbMF0uQWRkci51cHBlcjsKLQkJCXBjaV91bm1hcF9zaW5nbGUoaG9zdC0+cGRldiwgKGRtYV9hZGRyX3QpIHRlbXA2NC52YWwsCisJCQlwY2lfdW5tYXBfc2luZ2xlKGgtPnBkZXYsIChkbWFfYWRkcl90KSB0ZW1wNjQudmFsLAogCQkJCQkgaW9jb21tYW5kLmJ1Zl9zaXplLAogCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAotCQkJY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oaG9zdCwgYyk7CisJCQljaGVja19pb2N0bF91bml0X2F0dGVudGlvbihoLCBjKTsKIAogCQkJLyogQ29weSB0aGUgZXJyb3IgaW5mb3JtYXRpb24gb3V0ICovCiAJCQlpb2NvbW1hbmQuZXJyb3JfaW5mbyA9ICooYy0+ZXJyX2luZm8pOwogCQkJaWYgKGNvcHlfdG9fdXNlcgogCQkJICAgIChhcmdwLCAmaW9jb21tYW5kLCBzaXplb2YoSU9DVExfQ29tbWFuZF9zdHJ1Y3QpKSkgewogCQkJCWtmcmVlKGJ1ZmYpOwotCQkJCWNtZF9mcmVlKGhvc3QsIGMsIDApOworCQkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAKQEAgLTE0ODEsMTIgKzE1MzAsMTIgQEAKIAkJCQlpZiAoY29weV90b191c2VyCiAJCQkJICAgIChpb2NvbW1hbmQuYnVmLCBidWZmLCBpb2NvbW1hbmQuYnVmX3NpemUpKSB7CiAJCQkJCWtmcmVlKGJ1ZmYpOwotCQkJCQljbWRfZnJlZShob3N0LCBjLCAwKTsKKwkJCQkJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKIAkJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQkJfQogCQkJfQogCQkJa2ZyZWUoYnVmZik7Ci0JCQljbWRfZnJlZShob3N0LCBjLCAwKTsKKwkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCWNhc2UgQ0NJU1NfQklHX1BBU1NUSFJVOnsKQEAgLTE0OTUsNyArMTU0NCw2IEBACiAJCQl1bnNpZ25lZCBjaGFyICoqYnVmZiA9IE5VTEw7CiAJCQlpbnQgKmJ1ZmZfc2l6ZSA9IE5VTEw7CiAJCQl1NjRiaXQgdGVtcDY0OwotCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJCUJZVEUgc2dfdXNlZCA9IDA7CiAJCQlpbnQgc3RhdHVzID0gMDsKIAkJCWludCBpOwpAQCAtMTU2OSw3ICsxNjE3LDggQEAKIAkJCQlkYXRhX3B0ciArPSBzejsKIAkJCQlzZ191c2VkKys7CiAJCQl9Ci0JCQlpZiAoKGMgPSBjbWRfYWxsb2MoaG9zdCwgMCkpID09IE5VTEwpIHsKKwkJCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwkJCWlmICghYykgewogCQkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQkJZ290byBjbGVhbnVwMTsKIAkJCX0KQEAgLTE1OTAsNyArMTYzOSw3IEBACiAJCQlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgc2dfdXNlZDsgaSsrKSB7CiAJCQkJCXRlbXA2NC52YWwgPQotCQkJCQkgICAgcGNpX21hcF9zaW5nbGUoaG9zdC0+cGRldiwgYnVmZltpXSwKKwkJCQkJICAgIHBjaV9tYXBfc2luZ2xlKGgtPnBkZXYsIGJ1ZmZbaV0sCiAJCQkJCQkgICAgYnVmZl9zaXplW2ldLAogCQkJCQkJICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQkJCWMtPlNHW2ldLkFkZHIubG93ZXIgPQpAQCAtMTYwMiwyNiArMTY1MSwyMSBAQAogCQkJCX0KIAkJCX0KIAkJCWMtPndhaXRpbmcgPSAmd2FpdDsKLQkJCS8qIFB1dCB0aGUgcmVxdWVzdCBvbiB0aGUgdGFpbCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCQkJYWRkUSgmaG9zdC0+cmVxUSwgYyk7Ci0JCQlob3N0LT5RZGVwdGgrKzsKLQkJCXN0YXJ0X2lvKGhvc3QpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7CisJCQllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKIAkJCS8qIHVubG9jayB0aGUgYnVmZmVycyBmcm9tIERNQSAqLwogCQkJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykgewogCQkJCXRlbXA2NC52YWwzMi5sb3dlciA9IGMtPlNHW2ldLkFkZHIubG93ZXI7CiAJCQkJdGVtcDY0LnZhbDMyLnVwcGVyID0gYy0+U0dbaV0uQWRkci51cHBlcjsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKGhvc3QtPnBkZXYsCisJCQkJcGNpX3VubWFwX3NpbmdsZShoLT5wZGV2LAogCQkJCQkoZG1hX2FkZHJfdCkgdGVtcDY0LnZhbCwgYnVmZl9zaXplW2ldLAogCQkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJfQotCQkJY2hlY2tfaW9jdGxfdW5pdF9hdHRlbnRpb24oaG9zdCwgYyk7CisJCQljaGVja19pb2N0bF91bml0X2F0dGVudGlvbihoLCBjKTsKIAkJCS8qIENvcHkgdGhlIGVycm9yIGluZm9ybWF0aW9uIG91dCAqLwogCQkJaW9jLT5lcnJvcl9pbmZvID0gKihjLT5lcnJfaW5mbyk7CiAJCQlpZiAoY29weV90b191c2VyKGFyZ3AsIGlvYywgc2l6ZW9mKCppb2MpKSkgewotCQkJCWNtZF9mcmVlKGhvc3QsIGMsIDApOworCQkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CiAJCQkJc3RhdHVzID0gLUVGQVVMVDsKIAkJCQlnb3RvIGNsZWFudXAxOwogCQkJfQpAQCAtMTYzMSwxNCArMTY3NSwxNCBAQAogCQkJCWZvciAoaSA9IDA7IGkgPCBzZ191c2VkOyBpKyspIHsKIAkJCQkJaWYgKGNvcHlfdG9fdXNlcgogCQkJCQkgICAgKHB0ciwgYnVmZltpXSwgYnVmZl9zaXplW2ldKSkgewotCQkJCQkJY21kX2ZyZWUoaG9zdCwgYywgMCk7CisJCQkJCQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOwogCQkJCQkJc3RhdHVzID0gLUVGQVVMVDsKIAkJCQkJCWdvdG8gY2xlYW51cDE7CiAJCQkJCX0KIAkJCQkJcHRyICs9IGJ1ZmZfc2l6ZVtpXTsKIAkJCQl9CiAJCQl9Ci0JCQljbWRfZnJlZShob3N0LCBjLCAwKTsKKwkJCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CiAJCQlzdGF0dXMgPSAwOwogCQkgICAgICBjbGVhbnVwMToKIAkJCWlmIChidWZmKSB7CkBAIC0xNzI2LDI2ICsxNzcwLDI2IEBACiAKIHN0YXRpYyB2b2lkIGNjaXNzX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQgPSBycS0+Y29tcGxldGlvbl9kYXRhOwotCWN0bHJfaW5mb190ICpoID0gaGJhW2NtZC0+Y3Rscl07Ci0JU0dEZXNjcmlwdG9yX3N0cnVjdCAqY3Vycl9zZyA9IGNtZC0+U0c7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmMgPSBycS0+Y29tcGxldGlvbl9kYXRhOworCWN0bHJfaW5mb190ICpoID0gaGJhW2MtPmN0bHJdOworCVNHRGVzY3JpcHRvcl9zdHJ1Y3QgKmN1cnJfc2cgPSBjLT5TRzsKIAl1NjRiaXQgdGVtcDY0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIGRkaXI7CiAJaW50IHNnX2luZGV4ID0gMDsKIAotCWlmIChjbWQtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPT0gWEZFUl9SRUFEKQorCWlmIChjLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID09IFhGRVJfUkVBRCkKIAkJZGRpciA9IFBDSV9ETUFfRlJPTURFVklDRTsKIAllbHNlCiAJCWRkaXIgPSBQQ0lfRE1BX1RPREVWSUNFOwogCiAJLyogY29tbWFuZCBkaWQgbm90IG5lZWQgdG8gYmUgcmV0cmllZCAqLwogCS8qIHVubWFwIHRoZSBETUEgbWFwcGluZyBmb3IgYWxsIHRoZSBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyAqLwotCWZvciAoaSA9IDA7IGkgPCBjbWQtPkhlYWRlci5TR0xpc3Q7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBjLT5IZWFkZXIuU0dMaXN0OyBpKyspIHsKIAkJaWYgKGN1cnJfc2dbc2dfaW5kZXhdLkV4dCA9PSBDQ0lTU19TR19DSEFJTikgewotCQkJY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soaCwgY21kKTsKKwkJCWNjaXNzX3VubWFwX3NnX2NoYWluX2Jsb2NrKGgsIGMpOwogCQkJLyogUG9pbnQgdG8gdGhlIG5leHQgYmxvY2sgKi8KLQkJCWN1cnJfc2cgPSBoLT5jbWRfc2dfbGlzdFtjbWQtPmNtZGluZGV4XTsKKwkJCWN1cnJfc2cgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07CiAJCQlzZ19pbmRleCA9IDA7CiAJCX0KIAkJdGVtcDY0LnZhbDMyLmxvd2VyID0gY3Vycl9zZ1tzZ19pbmRleF0uQWRkci5sb3dlcjsKQEAgLTE3NTUsMTggKzE3OTksMTYgQEAKIAkJKytzZ19pbmRleDsKIAl9CiAKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50aygiRG9uZSB3aXRoICVwXG4iLCBycSk7Ci0jZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJEb25lIHdpdGggJXBcbiIsIHJxKTsKIAogCS8qIHNldCB0aGUgcmVzaWR1YWwgY291bnQgZm9yIHBjIHJlcXVlc3RzICovCi0JaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKLQkJcnEtPnJlc2lkX2xlbiA9IGNtZC0+ZXJyX2luZm8tPlJlc2lkdWFsQ250OworCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpCisJCXJxLT5yZXNpZF9sZW4gPSBjLT5lcnJfaW5mby0+UmVzaWR1YWxDbnQ7CiAKIAlibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAocnEtPmVycm9ycyA9PSAwKSA/IDAgOiAtRUlPKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JY21kX2ZyZWUoaCwgY21kLCAxKTsKKwljbWRfZnJlZShoLCBjKTsKIAljY2lzc19jaGVja19xdWV1ZXMoaCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMTc4Miw3ICsxODI0LDcgQEAKICAqIHZpYSB0aGUgaW5xdWlyeSBwYWdlIDAuICBNb2RlbCwgdmVuZG9yLCBhbmQgcmV2IGFyZSBzZXQgdG8gZW1wdHkgc3RyaW5ncyBpZgogICogdGhleSBjYW5ub3QgYmUgcmVhZC4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfZ2V0X2RldmljZV9kZXNjcihpbnQgY3RsciwgaW50IGxvZ3ZvbCwKK3N0YXRpYyB2b2lkIGNjaXNzX2dldF9kZXZpY2VfZGVzY3IoY3Rscl9pbmZvX3QgKmgsIGludCBsb2d2b2wsCiAJCQkJICAgY2hhciAqdmVuZG9yLCBjaGFyICptb2RlbCwgY2hhciAqcmV2KQogewogCWludCByYzsKQEAgLTE3OTcsOCArMTgzOSw4IEBACiAJaWYgKCFpbnFfYnVmKQogCQlyZXR1cm47CiAKLQlsb2dfdW5pdF90b19zY3NpM2FkZHIoaGJhW2N0bHJdLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7Ci0JcmMgPSBzZW5kY21kX3dpdGhpcnEoQ0lTU19JTlFVSVJZLCBjdGxyLCBpbnFfYnVmLCBzaXplb2YoKmlucV9idWYpLCAwLAorCWxvZ191bml0X3RvX3Njc2kzYWRkcihoLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7CisJcmMgPSBzZW5kY21kX3dpdGhpcnEoaCwgQ0lTU19JTlFVSVJZLCBpbnFfYnVmLCBzaXplb2YoKmlucV9idWYpLCAwLAogCQkJc2NzaTNhZGRyLCBUWVBFX0NNRCk7CiAJaWYgKHJjID09IElPX09LKSB7CiAJCW1lbWNweSh2ZW5kb3IsICZpbnFfYnVmLT5kYXRhX2J5dGVbOF0sIFZFTkRPUl9MRU4pOwpAQCAtMTgxOCw3ICsxODYwLDcgQEAKICAqIG51bWJlciBjYW5ub3QgYmUgaGFkLCBmb3Igd2hhdGV2ZXIgcmVhc29uLCAxNiBieXRlcyBvZiAweGZmCiAgKiBhcmUgcmV0dXJuZWQgaW5zdGVhZC4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfZ2V0X3NlcmlhbF9ubyhpbnQgY3RsciwgaW50IGxvZ3ZvbCwKK3N0YXRpYyB2b2lkIGNjaXNzX2dldF9zZXJpYWxfbm8oY3Rscl9pbmZvX3QgKmgsIGludCBsb2d2b2wsCiAJCQkJdW5zaWduZWQgY2hhciAqc2VyaWFsX25vLCBpbnQgYnVmbGVuKQogewogI2RlZmluZSBQQUdFXzgzX0lOUV9CWVRFUyA2NApAQCAtMTgzMyw4ICsxODc1LDggQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCW1lbXNldChzZXJpYWxfbm8sIDAsIGJ1Zmxlbik7Ci0JbG9nX3VuaXRfdG9fc2NzaTNhZGRyKGhiYVtjdGxyXSwgc2NzaTNhZGRyLCBsb2d2b2wpOwotCXJjID0gc2VuZGNtZF93aXRoaXJxKENJU1NfSU5RVUlSWSwgY3RsciwgYnVmLAorCWxvZ191bml0X3RvX3Njc2kzYWRkcihoLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7CisJcmMgPSBzZW5kY21kX3dpdGhpcnEoaCwgQ0lTU19JTlFVSVJZLCBidWYsCiAJCVBBR0VfODNfSU5RX0JZVEVTLCAweDgzLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKIAlpZiAocmMgPT0gSU9fT0spCiAJCW1lbWNweShzZXJpYWxfbm8sICZidWZbOF0sIGJ1Zmxlbik7CkBAIC0xOTAwLDEwICsxOTQyLDkgQEAKICAqIGlzIGFsc28gdGhlIGNvbnRyb2xsZXIgbm9kZS4gIEFueSBjaGFuZ2VzIHRvIGRpc2sgMCB3aWxsIHNob3cgdXAgb24KICAqIHRoZSBuZXh0IHJlYm9vdC4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaW50IGN0bHIsIGludCBkcnZfaW5kZXgsIGludCBmaXJzdF90aW1lLAotCWludCB2aWFfaW9jdGwpCitzdGF0aWMgdm9pZCBjY2lzc191cGRhdGVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCwKKwlpbnQgZmlyc3RfdGltZSwgaW50IHZpYV9pb2N0bCkKIHsKLQljdGxyX2luZm9fdCAqaCA9IGhiYVtjdGxyXTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZTsKQEAgLTE5MjAsMTYgKzE5NjEsMTYgQEAKIAogCS8qIHRlc3RpbmcgdG8gc2VlIGlmIDE2LWJ5dGUgQ0RCcyBhcmUgYWxyZWFkeSBiZWluZyB1c2VkICovCiAJaWYgKGgtPmNjaXNzX3JlYWQgPT0gQ0NJU1NfUkVBRF8xNikgewotCQljY2lzc19yZWFkX2NhcGFjaXR5XzE2KGgtPmN0bHIsIGRydl9pbmRleCwKKwkJY2Npc3NfcmVhZF9jYXBhY2l0eV8xNihoLCBkcnZfaW5kZXgsCiAJCQkmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOwogCiAJfSBlbHNlIHsKLQkJY2Npc3NfcmVhZF9jYXBhY2l0eShjdGxyLCBkcnZfaW5kZXgsICZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisJCWNjaXNzX3JlYWRfY2FwYWNpdHkoaCwgZHJ2X2luZGV4LCAmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOwogCQkvKiBpZiByZWFkX2NhcGFjaXR5IHJldHVybnMgYWxsIEYncyB0aGlzIHZvbHVtZSBpcyA+MlRCICovCiAJCS8qIGluIHNpemUgc28gd2Ugc3dpdGNoIHRvIDE2LWJ5dGUgQ0RCJ3MgZm9yIGFsbCAqLwogCQkvKiByZWFkL3dyaXRlIG9wcyAqLwogCQlpZiAodG90YWxfc2l6ZSA9PSAweEZGRkZGRkZGVUxMKSB7Ci0JCQljY2lzc19yZWFkX2NhcGFjaXR5XzE2KGN0bHIsIGRydl9pbmRleCwKKwkJCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoaCwgZHJ2X2luZGV4LAogCQkJJnRvdGFsX3NpemUsICZibG9ja19zaXplKTsKIAkJCWgtPmNjaXNzX3JlYWQgPSBDQ0lTU19SRUFEXzE2OwogCQkJaC0+Y2Npc3Nfd3JpdGUgPSBDQ0lTU19XUklURV8xNjsKQEAgLTE5MzksMTQgKzE5ODAsMTQgQEAKIAkJfQogCX0KIAotCWNjaXNzX2dlb21ldHJ5X2lucXVpcnkoY3RsciwgZHJ2X2luZGV4LCB0b3RhbF9zaXplLCBibG9ja19zaXplLAorCWNjaXNzX2dlb21ldHJ5X2lucXVpcnkoaCwgZHJ2X2luZGV4LCB0b3RhbF9zaXplLCBibG9ja19zaXplLAogCQkJICAgICAgIGlucV9idWZmLCBkcnZpbmZvKTsKIAlkcnZpbmZvLT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKIAlkcnZpbmZvLT5ucl9ibG9ja3MgPSB0b3RhbF9zaXplICsgMTsKIAotCWNjaXNzX2dldF9kZXZpY2VfZGVzY3IoY3RsciwgZHJ2X2luZGV4LCBkcnZpbmZvLT52ZW5kb3IsCisJY2Npc3NfZ2V0X2RldmljZV9kZXNjcihoLCBkcnZfaW5kZXgsIGRydmluZm8tPnZlbmRvciwKIAkJCQlkcnZpbmZvLT5tb2RlbCwgZHJ2aW5mby0+cmV2KTsKLQljY2lzc19nZXRfc2VyaWFsX25vKGN0bHIsIGRydl9pbmRleCwgZHJ2aW5mby0+c2VyaWFsX25vLAorCWNjaXNzX2dldF9zZXJpYWxfbm8oaCwgZHJ2X2luZGV4LCBkcnZpbmZvLT5zZXJpYWxfbm8sCiAJCQlzaXplb2YoZHJ2aW5mby0+c2VyaWFsX25vKSk7CiAJLyogU2F2ZSB0aGUgbHVuaWQgaW4gY2FzZSB3ZSBkZXJlZ2lzdGVyIHRoZSBkaXNrLCBiZWxvdy4gKi8KIAltZW1jcHkoZHJ2aW5mby0+THVuSUQsIGgtPmRydltkcnZfaW5kZXhdLT5MdW5JRCwKQEAgLTE5NzEsMTAgKzIwMTIsMTAgQEAKIAkgKiAodW5sZXNzIGl0J3MgdGhlIGZpcnN0IGRpc2sgKGZvciB0aGUgY29udHJvbGxlciBub2RlKS4KIAkgKi8KIAlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0tPnJhaWRfbGV2ZWwgIT0gLTEgJiYgZHJ2X2luZGV4ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGlzayAlZCBoYXMgY2hhbmdlZC5cbiIsIGRydl9pbmRleCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImRpc2sgJWQgaGFzIGNoYW5nZWQuXG4iLCBkcnZfaW5kZXgpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCQloLT5kcnZbZHJ2X2luZGV4XS0+YnVzeV9jb25maWd1cmluZyA9IDE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAKIAkJLyogZGVyZWdpc3Rlcl9kaXNrIHNldHMgaC0+ZHJ2W2Rydl9pbmRleF0tPnF1ZXVlID0gTlVMTAogCQkgKiB3aGljaCBrZWVwcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZnJvbSBzdGFydGluZwpAQCAtMjAyNCw4ICsyMDY1LDggQEAKIAkJaWYgKGNjaXNzX2FkZF9kaXNrKGgsIGRpc2ssIGRydl9pbmRleCkgIT0gMCkgewogCQkJY2Npc3NfZnJlZV9nZW5kaXNrKGgsIGRydl9pbmRleCk7CiAJCQljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiVkIGNvdWxkIG5vdCB1cGRhdGUgIgotCQkJCSJkaXNrICVkXG4iLCBoLT5jdGxyLCBkcnZfaW5kZXgpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNvdWxkIG5vdCB1cGRhdGUgZGlzayAlZFxuIiwKKwkJCQlkcnZfaW5kZXgpOwogCQkJLS1oLT5udW1fbHVuczsKIAkJfQogCX0KQEAgLTIwMzUsNyArMjA3Niw3IEBACiAJa2ZyZWUoZHJ2aW5mbyk7CiAJcmV0dXJuOwogbWVtX21zZzoKLQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAlnb3RvIGZyZWVyZXQ7CiB9CiAKQEAgLTIxMjcsOSArMjE2OCw5IEBACiAJCWgtPmdlbmRpc2tbZHJ2X2luZGV4XSA9CiAJCQlhbGxvY19kaXNrKDEgPDwgTldEX1NISUZUKTsKIAkJaWYgKCFoLT5nZW5kaXNrW2Rydl9pbmRleF0pIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogY291bGQgbm90ICIKLQkJCQkiYWxsb2NhdGUgYSBuZXcgZGlzayAlZFxuIiwKLQkJCQloLT5jdGxyLCBkcnZfaW5kZXgpOworCQkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAorCQkJCSJjb3VsZCBub3QgYWxsb2NhdGUgYSBuZXcgZGlzayAlZFxuIiwKKwkJCQlkcnZfaW5kZXgpOwogCQkJZ290byBlcnJfZnJlZV9kcml2ZV9pbmZvOwogCQl9CiAJfQpAQCAtMjE4MCw4ICsyMjIxLDcgQEAKIAljY2lzc19mcmVlX2dlbmRpc2soaCwgZHJ2X2luZGV4KTsKIAljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKIGVycm9yOgotCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCi0JCSJhZGQgZGlzayAwLlxuIiwgaC0+Y3Rscik7CisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNvdWxkIG5vdCBhZGQgZGlzayAwLlxuIik7CiAJcmV0dXJuOwogfQogCkBAIC0yMTk2LDcgKzIyMzYsNiBAQAogc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUsCiAJaW50IHZpYV9pb2N0bCkKIHsKLQlpbnQgY3RsciA9IGgtPmN0bHI7CiAJaW50IG51bV9sdW5zOwogCVJlcG9ydEx1bkRhdGFfc3RydWN0ICpsZF9idWZmID0gTlVMTDsKIAlpbnQgcmV0dXJuX2NvZGU7CkBAIC0yMjExLDI3ICsyMjUwLDI3IEBACiAJCXJldHVybiAtRVBFUk07CiAKIAkvKiBTZXQgYnVzeV9jb25maWd1cmluZyBmbGFnIGZvciB0aGlzIG9wZXJhdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWlmIChoLT5idXN5X2NvbmZpZ3VyaW5nKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCWgtPmJ1c3lfY29uZmlndXJpbmcgPSAxOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAogCWxkX2J1ZmYgPSBremFsbG9jKHNpemVvZihSZXBvcnRMdW5EYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwogCWlmIChsZF9idWZmID09IE5VTEwpCiAJCWdvdG8gbWVtX21zZzsKIAotCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENJU1NfUkVQT1JUX0xPRywgY3RsciwgbGRfYnVmZiwKKwlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShoLCBDSVNTX1JFUE9SVF9MT0csIGxkX2J1ZmYsCiAJCQkJICAgICAgc2l6ZW9mKFJlcG9ydEx1bkRhdGFfc3RydWN0KSwKIAkJCQkgICAgICAwLCBDVExSX0xVTklELCBUWVBFX0NNRCk7CiAKIAlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spCiAJCWxpc3RsZW5ndGggPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSBsZF9idWZmLT5MVU5MaXN0TGVuZ3RoKTsKIAllbHNlIHsJLyogcmVhZGluZyBudW1iZXIgb2YgbG9naWNhbCB2b2x1bWVzIGZhaWxlZCAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogcmVwb3J0IGxvZ2ljYWwgdm9sdW1lIgotCQkgICAgICAgIiBjb21tYW5kIGZhaWxlZFxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkicmVwb3J0IGxvZ2ljYWwgdm9sdW1lIGNvbW1hbmQgZmFpbGVkXG4iKTsKIAkJbGlzdGxlbmd0aCA9IDA7CiAJCWdvdG8gZnJlZXJldDsKIAl9CkBAIC0yMjM5LDcgKzIyNzgsNyBAQAogCW51bV9sdW5zID0gbGlzdGxlbmd0aCAvIDg7CS8qIDggYnl0ZXMgcGVyIGVudHJ5ICovCiAJaWYgKG51bV9sdW5zID4gQ0lTU19NQVhfTFVOKSB7CiAJCW51bV9sdW5zID0gQ0lTU19NQVhfTFVOOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogbW9yZSBsdW5zIGNvbmZpZ3VyZWQiCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJtb3JlIGx1bnMgY29uZmlndXJlZCIKIAkJICAgICAgICIgb24gY29udHJvbGxlciB0aGFuIGNhbiBiZSBoYW5kbGVkIGJ5IgogCQkgICAgICAgIiB0aGlzIGRyaXZlci5cbiIpOwogCX0KQEAgLTIyNzAsOSArMjMwOSw5IEBACiAJCX0KIAkJaWYgKCFkcnZfZm91bmQpIHsKIAkJCS8qIERlcmVnaXN0ZXIgaXQgZnJvbSB0aGUgT1MsIGl0J3MgZ29uZS4gKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJCQloLT5kcnZbaV0tPmJ1c3lfY29uZmlndXJpbmcgPSAxOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm5fY29kZSA9IGRlcmVnaXN0ZXJfZGlzayhoLCBpLCAxLCB2aWFfaW9jdGwpOwogCQkJaWYgKGgtPmRydltpXSAhPSBOVUxMKQogCQkJCWgtPmRydltpXS0+YnVzeV9jb25maWd1cmluZyA9IDA7CkBAIC0yMzExLDggKzIzNTAsNyBAQAogCQkJaWYgKGRydl9pbmRleCA9PSAtMSkKIAkJCQlnb3RvIGZyZWVyZXQ7CiAJCX0KLQkJY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oY3RsciwgZHJ2X2luZGV4LCBmaXJzdF90aW1lLAotCQkJdmlhX2lvY3RsKTsKKwkJY2Npc3NfdXBkYXRlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4LCBmaXJzdF90aW1lLCB2aWFfaW9jdGwpOwogCX0JCS8qIGVuZCBmb3IgKi8KIAogZnJlZXJldDoKQEAgLTIzMjQsNyArMjM2Miw3IEBACiAJICovCiAJcmV0dXJuIC0xOwogbWVtX21zZzoKLQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAloLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIAlnb3RvIGZyZWVyZXQ7CiB9CkBAIC0yNDQ0LDExICsyNDgyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmlsbF9jbWQoQ29tbWFuZExpc3Rfc3RydWN0ICpjLCBfX3U4IGNtZCwgaW50IGN0bHIsIHZvaWQgKmJ1ZmYsCitzdGF0aWMgaW50IGZpbGxfY21kKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsIF9fdTggY21kLCB2b2lkICpidWZmLAogCQlzaXplX3Qgc2l6ZSwgX191OCBwYWdlX2NvZGUsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAkJaW50IGNtZF90eXBlKQogewotCWN0bHJfaW5mb190ICpoID0gaGJhW2N0bHJdOwogCXU2NGJpdCBidWZmX2RtYV9oYW5kbGU7CiAJaW50IHN0YXR1cyA9IElPX09LOwogCkBAIC0yNTMyLDggKzI1NjksNyBAQAogCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjY2lzcyVkOiAgVW5rbm93biBDb21tYW5kIDB4JWNcbiIsIGN0bHIsIGNtZCk7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiVW5rbm93biBDb21tYW5kIDB4JWNcbiIsIGNtZCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZF90eXBlID09IFRZUEVfTVNHKSB7CkBAIC0yNTY1LDEzICsyNjAxLDEyIEBACiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjY2lzcyVkOiB1bmtub3duIG1lc3NhZ2UgdHlwZSAlZFxuIiwgY3RsciwgY21kKTsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkJInVua25vd24gbWVzc2FnZSB0eXBlICVkXG4iLCBjbWQpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNjaXNzJWQ6IHVua25vd24gY29tbWFuZCB0eXBlICVkXG4iLCBjdGxyLCBjbWRfdHlwZSk7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ1bmtub3duIGNvbW1hbmQgdHlwZSAlZFxuIiwgY21kX3R5cGUpOwogCQlyZXR1cm4gSU9fRVJST1I7CiAJfQogCS8qIEZpbGwgaW4gdGhlIHNjYXR0ZXIgZ2F0aGVyIGluZm9ybWF0aW9uICovCkBAIC0yNTk5LDE1ICsyNjM0LDE0IEBACiAJCWRlZmF1bHQ6CiAJCQlpZiAoY2hlY2tfZm9yX3VuaXRfYXR0ZW50aW9uKGgsIGMpKQogCQkJCXJldHVybiBJT19ORUVEU19SRVRSWTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNtZCAweCUwMnggIgorCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZCAweCUwMnggIgogCQkJCSJjaGVjayBjb25kaXRpb24sIHNlbnNlIGtleSA9IDB4JTAyeFxuIiwKLQkJCQloLT5jdGxyLCBjLT5SZXF1ZXN0LkNEQlswXSwKLQkJCQljLT5lcnJfaW5mby0+U2Vuc2VJbmZvWzJdKTsKKwkJCQljLT5SZXF1ZXN0LkNEQlswXSwgYy0+ZXJyX2luZm8tPlNlbnNlSW5mb1syXSk7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogY21kIDB4JTAyeCIKLQkJCSJzY3NpIHN0YXR1cyA9IDB4JTAyeFxuIiwgaC0+Y3RsciwKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZCAweCUwMngiCisJCQkic2NzaSBzdGF0dXMgPSAweCUwMnhcbiIsCiAJCQljLT5SZXF1ZXN0LkNEQlswXSwgYy0+ZXJyX2luZm8tPlNjc2lTdGF0dXMpOwogCQlicmVhazsKIAl9CkBAIC0yNjMwLDQzICsyNjY0LDQyIEBACiAJCS8qIGV4cGVjdGVkIGZvciBpbnF1aXJ5IGFuZCByZXBvcnQgbHVuIGNvbW1hbmRzICovCiAJCWJyZWFrOwogCWNhc2UgQ01EX0lOVkFMSUQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgMHglMDJ4IGlzICIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZCAweCUwMnggaXMgIgogCQkgICAgICAgInJlcG9ydGVkIGludmFsaWRcbiIsIGMtPlJlcXVlc3QuQ0RCWzBdKTsKIAkJcmV0dXJuX3N0YXR1cyA9IElPX0VSUk9SOwogCQlicmVhazsKIAljYXNlIENNRF9QUk9UT0NPTF9FUlI6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgMHglMDJ4IGhhcyAiCi0JCSAgICAgICAicHJvdG9jb2wgZXJyb3IgXG4iLCBjLT5SZXF1ZXN0LkNEQlswXSk7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgMHglMDJ4IGhhcyAiCisJCSAgICAgICAicHJvdG9jb2wgZXJyb3JcbiIsIGMtPlJlcXVlc3QuQ0RCWzBdKTsKIAkJcmV0dXJuX3N0YXR1cyA9IElPX0VSUk9SOwogCQlicmVhazsKIAljYXNlIENNRF9IQVJEV0FSRV9FUlI6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgMHglMDJ4IGhhZCAiCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgMHglMDJ4IGhhZCAiCiAJCSAgICAgICAiIGhhcmR3YXJlIGVycm9yXG4iLCBjLT5SZXF1ZXN0LkNEQlswXSk7CiAJCXJldHVybl9zdGF0dXMgPSBJT19FUlJPUjsKIAkJYnJlYWs7CiAJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kIDB4JTAyeCBoYWQgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kIDB4JTAyeCBoYWQgIgogCQkgICAgICAgImNvbm5lY3Rpb24gbG9zdFxuIiwgYy0+UmVxdWVzdC5DREJbMF0pOwogCQlyZXR1cm5fc3RhdHVzID0gSU9fRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0FCT1JURUQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgMHglMDJ4IHdhcyAiCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgMHglMDJ4IHdhcyAiCiAJCSAgICAgICAiYWJvcnRlZFxuIiwgYy0+UmVxdWVzdC5DREJbMF0pOwogCQlyZXR1cm5fc3RhdHVzID0gSU9fRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0FCT1JUX0ZBSUxFRDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAweCUwMnggcmVwb3J0cyAiCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgMHglMDJ4IHJlcG9ydHMgIgogCQkgICAgICAgImFib3J0IGZhaWxlZFxuIiwgYy0+UmVxdWVzdC5DREJbMF0pOwogCQlyZXR1cm5fc3RhdHVzID0gSU9fRVJST1I7CiAJCWJyZWFrOwogCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY2Npc3MlZDogdW5zb2xpY2l0ZWQgYWJvcnQgMHglMDJ4XG4iLCBoLT5jdGxyLAorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5zb2xpY2l0ZWQgYWJvcnQgMHglMDJ4XG4iLAogCQkJYy0+UmVxdWVzdC5DREJbMF0pOwogCQlyZXR1cm5fc3RhdHVzID0gSU9fTkVFRFNfUkVUUlk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgMHglMDJ4IHJldHVybmVkICIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZCAweCUwMnggcmV0dXJuZWQgIgogCQkgICAgICAgInVua25vd24gc3RhdHVzICV4XG4iLCBjLT5SZXF1ZXN0LkNEQlswXSwKIAkJICAgICAgIGMtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzKTsKIAkJcmV0dXJuX3N0YXR1cyA9IElPX0VSUk9SOwpAQCAtMjY3OSwxNyArMjcxMiwxMSBAQAogewogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCXU2NGJpdCBidWZmX2RtYV9oYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dXJuX3N0YXR1cyA9IElPX09LOwogCiByZXNlbmRfY21kMjoKIAljLT53YWl0aW5nID0gJndhaXQ7Ci0JLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSB0YWlsIG9mIHRoZSBxdWV1ZSBhbmQgc2VuZCBpdCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQlhZGRRKCZoLT5yZXFRLCBjKTsKLQloLT5RZGVwdGgrKzsKLQlzdGFydF9pbyhoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKIApAQCAtMjcwMCw3ICsyNzI3LDcgQEAKIAogCWlmIChyZXR1cm5fc3RhdHVzID09IElPX05FRURTX1JFVFJZICYmCiAJCWMtPnJldHJ5X2NvdW50IDwgTUFYX0NNRF9SRVRSSUVTKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHJldHJ5aW5nIDB4JTAyeFxuIiwgaC0+Y3RsciwKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJldHJ5aW5nIDB4JTAyeFxuIiwKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdKTsKIAkJYy0+cmV0cnlfY291bnQrKzsKIAkJLyogZXJhc2UgdGhlIG9sZCBlcnJvciBpbmZvcm1hdGlvbiAqLwpAQCAtMjcxOSwyNyArMjc0NiwyNiBAQAogCXJldHVybiByZXR1cm5fc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHNlbmRjbWRfd2l0aGlycShfX3U4IGNtZCwgaW50IGN0bHIsIHZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLAorc3RhdGljIGludCBzZW5kY21kX3dpdGhpcnEoY3Rscl9pbmZvX3QgKmgsIF9fdTggY21kLCB2b2lkICpidWZmLCBzaXplX3Qgc2l6ZSwKIAkJCSAgIF9fdTggcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLAogCQkJaW50IGNtZF90eXBlKQogewotCWN0bHJfaW5mb190ICpoID0gaGJhW2N0bHJdOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKIAlpbnQgcmV0dXJuX3N0YXR1czsKIAotCWMgPSBjbWRfYWxsb2MoaCwgMCk7CisJYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOwogCWlmICghYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuX3N0YXR1cyA9IGZpbGxfY21kKGMsIGNtZCwgY3RsciwgYnVmZiwgc2l6ZSwgcGFnZV9jb2RlLAorCXJldHVybl9zdGF0dXMgPSBmaWxsX2NtZChoLCBjLCBjbWQsIGJ1ZmYsIHNpemUsIHBhZ2VfY29kZSwKIAkJc2NzaTNhZGRyLCBjbWRfdHlwZSk7CiAJaWYgKHJldHVybl9zdGF0dXMgPT0gSU9fT0spCiAJCXJldHVybl9zdGF0dXMgPSBzZW5kY21kX3dpdGhpcnFfY29yZShoLCBjLCAxKTsKIAotCWNtZF9mcmVlKGgsIGMsIDApOworCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CiAJcmV0dXJuIHJldHVybl9zdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGNjaXNzX2dlb21ldHJ5X2lucXVpcnkoaW50IGN0bHIsIGludCBsb2d2b2wsCitzdGF0aWMgdm9pZCBjY2lzc19nZW9tZXRyeV9pbnF1aXJ5KGN0bHJfaW5mb190ICpoLCBpbnQgbG9ndm9sLAogCQkJCSAgIHNlY3Rvcl90IHRvdGFsX3NpemUsCiAJCQkJICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsCiAJCQkJICAgSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiwKQEAgLTI3NTAsMTMgKzI3NzYsMTMgQEAKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKIAogCW1lbXNldChpbnFfYnVmZiwgMCwgc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCkpOwotCWxvZ191bml0X3RvX3Njc2kzYWRkcihoYmFbY3Rscl0sIHNjc2kzYWRkciwgbG9ndm9sKTsKLQlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShDSVNTX0lOUVVJUlksIGN0bHIsIGlucV9idWZmLAorCWxvZ191bml0X3RvX3Njc2kzYWRkcihoLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7CisJcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoaCwgQ0lTU19JTlFVSVJZLCBpbnFfYnVmZiwKIAkJCXNpemVvZigqaW5xX2J1ZmYpLCAweEMxLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKIAlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKIAkJaWYgKGlucV9idWZmLT5kYXRhX2J5dGVbOF0gPT0gMHhGRikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjY2lzczogcmVhZGluZyBnZW9tZXRyeSBmYWlsZWQsIHZvbHVtZSAiCisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJICAgICAgICJyZWFkaW5nIGdlb21ldHJ5IGZhaWxlZCwgdm9sdW1lICIKIAkJCSAgICAgICAiZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGdlb21ldHJ5XG4iKTsKIAkJCWRydi0+aGVhZHMgPSAyNTU7CiAJCQlkcnYtPnNlY3RvcnMgPSAzMjsJLyogU2VjdG9ycyBwZXIgdHJhY2sgKi8KQEAgLTI3ODAsMTIgKzI4MDYsMTIgQEAKIAkJCWRydi0+Y3lsaW5kZXJzID0gcmVhbF9zaXplOwogCQl9CiAJfSBlbHNlIHsJCS8qIEdldCBnZW9tZXRyeSBmYWlsZWQgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkXG4iKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlYWRpbmcgZ2VvbWV0cnkgZmFpbGVkXG4iKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkCi1jY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBzZWN0b3JfdCAqdG90YWxfc2l6ZSwKK2NjaXNzX3JlYWRfY2FwYWNpdHkoY3Rscl9pbmZvX3QgKmgsIGludCBsb2d2b2wsIHNlY3Rvcl90ICp0b3RhbF9zaXplLAogCQkgICAgdW5zaWduZWQgaW50ICpibG9ja19zaXplKQogewogCVJlYWRDYXBkYXRhX3N0cnVjdCAqYnVmOwpAQCAtMjc5NCwyNSArMjgyMCwyNSBAQAogCiAJYnVmID0ga3phbGxvYyhzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IG91dCBvZiBtZW1vcnlcbiIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlsb2dfdW5pdF90b19zY3NpM2FkZHIoaGJhW2N0bHJdLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7Ci0JcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoQ0NJU1NfUkVBRF9DQVBBQ0lUWSwgY3RsciwgYnVmLAorCWxvZ191bml0X3RvX3Njc2kzYWRkcihoLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7CisJcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoaCwgQ0NJU1NfUkVBRF9DQVBBQ0lUWSwgYnVmLAogCQlzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0KSwgMCwgc2NzaTNhZGRyLCBUWVBFX0NNRCk7CiAJaWYgKHJldHVybl9jb2RlID09IElPX09LKSB7CiAJCSp0b3RhbF9zaXplID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikgYnVmLT50b3RhbF9zaXplKTsKIAkJKmJsb2NrX3NpemUgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSBidWYtPmJsb2NrX3NpemUpOwogCX0gZWxzZSB7CQkvKiByZWFkIGNhcGFjaXR5IGNvbW1hbmQgZmFpbGVkICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiByZWFkIGNhcGFjaXR5IGZhaWxlZFxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZWFkIGNhcGFjaXR5IGZhaWxlZFxuIik7CiAJCSp0b3RhbF9zaXplID0gMDsKIAkJKmJsb2NrX3NpemUgPSBCTE9DS19TSVpFOwogCX0KIAlrZnJlZShidWYpOwogfQogCi1zdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5XzE2KGludCBjdGxyLCBpbnQgbG9ndm9sLAorc3RhdGljIHZvaWQgY2Npc3NfcmVhZF9jYXBhY2l0eV8xNihjdGxyX2luZm9fdCAqaCwgaW50IGxvZ3ZvbCwKIAlzZWN0b3JfdCAqdG90YWxfc2l6ZSwgdW5zaWduZWQgaW50ICpibG9ja19zaXplKQogewogCVJlYWRDYXBkYXRhX3N0cnVjdF8xNiAqYnVmOwpAQCAtMjgyMSwyMyArMjg0NywyMyBAQAogCiAJYnVmID0ga3phbGxvYyhzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0XzE2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IG91dCBvZiBtZW1vcnlcbiIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlsb2dfdW5pdF90b19zY3NpM2FkZHIoaGJhW2N0bHJdLCBzY3NpM2FkZHIsIGxvZ3ZvbCk7Ci0JcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoQ0NJU1NfUkVBRF9DQVBBQ0lUWV8xNiwKLQkJY3RsciwgYnVmLCBzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0XzE2KSwKKwlsb2dfdW5pdF90b19zY3NpM2FkZHIoaCwgc2NzaTNhZGRyLCBsb2d2b2wpOworCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKGgsIENDSVNTX1JFQURfQ0FQQUNJVFlfMTYsCisJCWJ1Ziwgc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdF8xNiksCiAJCQkwLCBzY3NpM2FkZHIsIFRZUEVfQ01EKTsKIAlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKIAkJKnRvdGFsX3NpemUgPSBiZTY0X3RvX2NwdSgqKF9fYmU2NCAqKSBidWYtPnRvdGFsX3NpemUpOwogCQkqYmxvY2tfc2l6ZSA9IGJlMzJfdG9fY3B1KCooX19iZTMyICopIGJ1Zi0+YmxvY2tfc2l6ZSk7CiAJfSBlbHNlIHsJCS8qIHJlYWQgY2FwYWNpdHkgY29tbWFuZCBmYWlsZWQgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlYWQgY2FwYWNpdHkgZmFpbGVkXG4iKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlYWQgY2FwYWNpdHkgZmFpbGVkXG4iKTsKIAkJKnRvdGFsX3NpemUgPSAwOwogCQkqYmxvY2tfc2l6ZSA9IEJMT0NLX1NJWkU7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGJsb2Nrcz0gJWxsdSBibG9ja19zaXplPSAlZFxuIiwKKwlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiICAgICAgYmxvY2tzPSAlbGx1IGJsb2NrX3NpemU9ICVkXG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSp0b3RhbF9zaXplKzEsICpibG9ja19zaXplKTsKIAlrZnJlZShidWYpOwogfQpAQCAtMjg2NSwxNyArMjg5MSwxNyBAQAogCiAJaW5xX2J1ZmYgPSBrbWFsbG9jKHNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5xX2J1ZmYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChoLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTApIHsKLQkJY2Npc3NfcmVhZF9jYXBhY2l0eShoLT5jdGxyLCBsb2d2b2wsCisJCWNjaXNzX3JlYWRfY2FwYWNpdHkoaCwgbG9ndm9sLAogCQkJCQkmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOwogCX0gZWxzZSB7Ci0JCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoaC0+Y3RsciwgbG9ndm9sLAorCQljY2lzc19yZWFkX2NhcGFjaXR5XzE2KGgsIGxvZ3ZvbCwKIAkJCQkJJnRvdGFsX3NpemUsICZibG9ja19zaXplKTsKIAl9Ci0JY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShoLT5jdGxyLCBsb2d2b2wsIHRvdGFsX3NpemUsIGJsb2NrX3NpemUsCisJY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShoLCBsb2d2b2wsIHRvdGFsX3NpemUsIGJsb2NrX3NpemUsCiAJCQkgICAgICAgaW5xX2J1ZmYsIGRydik7CiAKIAlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGRydi0+cXVldWUsIGRydi0+YmxvY2tfc2l6ZSk7CkBAIC0yOTA5LDcgKzI5MzUsNyBAQAogCQljID0gaGxpc3RfZW50cnkoaC0+cmVxUS5maXJzdCwgQ29tbWFuZExpc3Rfc3RydWN0LCBsaXN0KTsKIAkJLyogY2FuJ3QgZG8gYW55dGhpbmcgaWYgZmlmbyBpcyBmdWxsICovCiAJCWlmICgoaC0+YWNjZXNzLmZpZm9fZnVsbChoKSkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBmaWZvIGZ1bGxcbiIpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImZpZm8gZnVsbFxuIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC0yOTI1LDcgKzI5NTEsNyBAQAogCX0KIH0KIAotLyogQXNzdW1lcyB0aGF0IENDSVNTX0xPQ0soaC0+Y3RscikgaXMgaGVsZC4gKi8KKy8qIEFzc3VtZXMgdGhhdCBoLT5sb2NrIGlzIGhlbGQuICovCiAvKiBaZXJvcyBvdXQgdGhlIGVycm9yIHJlY29yZCBhbmQgdGhlbiByZXNlbmRzIHRoZSBjb21tYW5kIGJhY2sgKi8KIC8qIHRvIHRoZSBjb250cm9sbGVyICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZW5kX2NjaXNzX2NtZChjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKQpAQCAtMjk2Niw3ICsyOTkyLDcgQEAKIAlkcml2ZXJfYnl0ZSA9IERSSVZFUl9PSzsKIAltc2dfYnl0ZSA9IGNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXM7IC8qIGNvcnJlY3Q/ICBzZWVtcyB0b28gZGV2aWNlIHNwZWNpZmljICovCiAKLQlpZiAoYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkpCisJaWYgKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQogCQlob3N0X2J5dGUgPSBESURfUEFTU1RIUk9VR0g7CiAJZWxzZQogCQlob3N0X2J5dGUgPSBESURfT0s7CkBAIC0yOTc1LDggKzMwMDEsOCBAQAogCQlob3N0X2J5dGUsIGRyaXZlcl9ieXRlKTsKIAogCWlmIChjbWQtPmVycl9pbmZvLT5TY3NpU3RhdHVzICE9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTikgewotCQlpZiAoIWJsa19wY19yZXF1ZXN0KGNtZC0+cnEpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCAiCisJCWlmIChjbWQtPnJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9CTE9DS19QQykKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgJXAgIgogCQkJICAgICAgICJoYXMgU0NTSSBTdGF0dXMgMHgleFxuIiwKIAkJCSAgICAgICBjbWQsIGNtZC0+ZXJyX2luZm8tPlNjc2lTdGF0dXMpOwogCQlyZXR1cm4gZXJyb3JfdmFsdWU7CkBAIC0yOTg1LDE3ICszMDExLDE5IEBACiAJLyogY2hlY2sgdGhlIHNlbnNlIGtleSAqLwogCXNlbnNlX2tleSA9IDB4ZiAmIGNtZC0+ZXJyX2luZm8tPlNlbnNlSW5mb1syXTsKIAkvKiBubyBzdGF0dXMgb3IgcmVjb3ZlcmVkIGVycm9yICovCi0JaWYgKCgoc2Vuc2Vfa2V5ID09IDB4MCkgfHwgKHNlbnNlX2tleSA9PSAweDEpKSAmJiAhYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkpCisJaWYgKCgoc2Vuc2Vfa2V5ID09IDB4MCkgfHwgKHNlbnNlX2tleSA9PSAweDEpKSAmJgorCSAgICAoY21kLT5ycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfQkxPQ0tfUEMpKQogCQllcnJvcl92YWx1ZSA9IDA7CiAKIAlpZiAoY2hlY2tfZm9yX3VuaXRfYXR0ZW50aW9uKGgsIGNtZCkpIHsKLQkJKnJldHJ5X2NtZCA9ICFibGtfcGNfcmVxdWVzdChjbWQtPnJxKTsKKwkJKnJldHJ5X2NtZCA9ICEoY21kLT5ycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIWJsa19wY19yZXF1ZXN0KGNtZC0+cnEpKSB7IC8qIE5vdCBTR19JTyBvciBzaW1pbGFyPyAqLworCS8qIE5vdCBTR19JTyBvciBzaW1pbGFyPyAqLworCWlmIChjbWQtPnJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlpZiAoZXJyb3JfdmFsdWUgIT0gMCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgaGFzIENIRUNLIENPTkRJVElPTiIKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWQgJXAgaGFzIENIRUNLIENPTkRJVElPTiIKIAkJCSAgICAgICAiIHNlbnNlIGtleSA9IDB4JXhcbiIsIGNtZCwgc2Vuc2Vfa2V5KTsKIAkJcmV0dXJuIGVycm9yX3ZhbHVlOwogCX0KQEAgLTMwMzUsOTAgKzMwNjMsOTcgQEAKIAkJcnEtPmVycm9ycyA9IGV2YWx1YXRlX3RhcmdldF9zdGF0dXMoaCwgY21kLCAmcmV0cnlfY21kKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfREFUQV9VTkRFUlJVTjoKLQkJaWYgKGJsa19mc19yZXF1ZXN0KGNtZC0+cnEpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhcyIKKwkJaWYgKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kICVwIGhhcyIKIAkJCSAgICAgICAiIGNvbXBsZXRlZCB3aXRoIGRhdGEgdW5kZXJydW4gIgogCQkJICAgICAgICJyZXBvcnRlZFxuIiwgY21kKTsKIAkJCWNtZC0+cnEtPnJlc2lkX2xlbiA9IGNtZC0+ZXJyX2luZm8tPlJlc2lkdWFsQ250OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ01EX0RBVEFfT1ZFUlJVTjoKLQkJaWYgKGJsa19mc19yZXF1ZXN0KGNtZC0+cnEpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYXMiCisJCWlmIChjbWQtPnJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjY2lzczogY21kICVwIGhhcyIKIAkJCSAgICAgICAiIGNvbXBsZXRlZCB3aXRoIGRhdGEgb3ZlcnJ1biAiCiAJCQkgICAgICAgInJlcG9ydGVkXG4iLCBjbWQpOwogCQlicmVhazsKIAljYXNlIENNRF9JTlZBTElEOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGlzICIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNjaXNzOiBjbWQgJXAgaXMgIgogCQkgICAgICAgInJlcG9ydGVkIGludmFsaWRcbiIsIGNtZCk7CiAJCXJxLT5lcnJvcnMgPSBtYWtlX3N0YXR1c19ieXRlcyhTQU1fU1RBVF9HT09ELAogCQkJY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cywgRFJJVkVSX09LLAotCQkJYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkgPyBESURfUEFTU1RIUk9VR0ggOiBESURfRVJST1IpOworCQkJKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfUFJPVE9DT0xfRVJSOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIGhhcyAiCi0JCSAgICAgICAicHJvdG9jb2wgZXJyb3IgXG4iLCBjbWQpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY2Npc3M6IGNtZCAlcCBoYXMgIgorCQkgICAgICAgInByb3RvY29sIGVycm9yXG4iLCBjbWQpOwogCQlycS0+ZXJyb3JzID0gbWFrZV9zdGF0dXNfYnl0ZXMoU0FNX1NUQVRfR09PRCwKIAkJCWNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMsIERSSVZFUl9PSywKLQkJCWJsa19wY19yZXF1ZXN0KGNtZC0+cnEpID8gRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKKwkJCShjbWQtPnJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgPworCQkJCURJRF9QQVNTVEhST1VHSCA6IERJRF9FUlJPUik7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0hBUkRXQVJFX0VSUjoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYWQgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY2Npc3M6IGNtZCAlcCBoYWQgIgogCQkgICAgICAgIiBoYXJkd2FyZSBlcnJvclxuIiwgY21kKTsKIAkJcnEtPmVycm9ycyA9IG1ha2Vfc3RhdHVzX2J5dGVzKFNBTV9TVEFUX0dPT0QsCiAJCQljbWQtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzLCBEUklWRVJfT0ssCi0JCQlibGtfcGNfcmVxdWVzdChjbWQtPnJxKSA/IERJRF9QQVNTVEhST1VHSCA6IERJRF9FUlJPUik7CisJCQkoY21kLT5ycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpID8KKwkJCQlESURfUEFTU1RIUk9VR0ggOiBESURfRVJST1IpOwogCQlicmVhazsKIAljYXNlIENNRF9DT05ORUNUSU9OX0xPU1Q6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgaGFkICIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNjaXNzOiBjbWQgJXAgaGFkICIKIAkJICAgICAgICJjb25uZWN0aW9uIGxvc3RcbiIsIGNtZCk7CiAJCXJxLT5lcnJvcnMgPSBtYWtlX3N0YXR1c19ieXRlcyhTQU1fU1RBVF9HT09ELAogCQkJY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cywgRFJJVkVSX09LLAotCQkJYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkgPyBESURfUEFTU1RIUk9VR0ggOiBESURfRVJST1IpOworCQkJKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfQUJPUlRFRDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCB3YXMgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY2Npc3M6IGNtZCAlcCB3YXMgIgogCQkgICAgICAgImFib3J0ZWRcbiIsIGNtZCk7CiAJCXJxLT5lcnJvcnMgPSBtYWtlX3N0YXR1c19ieXRlcyhTQU1fU1RBVF9HT09ELAogCQkJY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cywgRFJJVkVSX09LLAotCQkJYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkgPyBESURfUEFTU1RIUk9VR0ggOiBESURfQUJPUlQpOworCQkJKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJRElEX1BBU1NUSFJPVUdIIDogRElEX0FCT1JUKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfQUJPUlRfRkFJTEVEOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIHJlcG9ydHMgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY2Npc3M6IGNtZCAlcCByZXBvcnRzICIKIAkJICAgICAgICJhYm9ydCBmYWlsZWRcbiIsIGNtZCk7CiAJCXJxLT5lcnJvcnMgPSBtYWtlX3N0YXR1c19ieXRlcyhTQU1fU1RBVF9HT09ELAogCQkJY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cywgRFJJVkVSX09LLAotCQkJYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkgPyBESURfUEFTU1RIUk9VR0ggOiBESURfRVJST1IpOworCQkJKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHVuc29saWNpdGVkICIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNjaXNzJWQ6IHVuc29saWNpdGVkICIKIAkJICAgICAgICJhYm9ydCAlcFxuIiwgaC0+Y3RsciwgY21kKTsKIAkJaWYgKGNtZC0+cmV0cnlfY291bnQgPCBNQVhfQ01EX1JFVFJJRVMpIHsKIAkJCXJldHJ5X2NtZCA9IDE7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNjaXNzJWQ6IHJldHJ5aW5nICVwXG4iLCBoLT5jdGxyLCBjbWQpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJldHJ5aW5nICVwXG4iLCBjbWQpOwogCQkJY21kLT5yZXRyeV9jb3VudCsrOwogCQl9IGVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY2Npc3MlZDogJXAgcmV0cmllZCB0b28gIgotCQkJICAgICAgICJtYW55IHRpbWVzXG4iLCBoLT5jdGxyLCBjbWQpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiJXAgcmV0cmllZCB0b28gbWFueSB0aW1lc1xuIiwgY21kKTsKIAkJcnEtPmVycm9ycyA9IG1ha2Vfc3RhdHVzX2J5dGVzKFNBTV9TVEFUX0dPT0QsCiAJCQljbWQtPmVycl9pbmZvLT5Db21tYW5kU3RhdHVzLCBEUklWRVJfT0ssCi0JCQlibGtfcGNfcmVxdWVzdChjbWQtPnJxKSA/IERJRF9QQVNTVEhST1VHSCA6IERJRF9BQk9SVCk7CisJCQkoY21kLT5ycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpID8KKwkJCQlESURfUEFTU1RIUk9VR0ggOiBESURfQUJPUlQpOwogCQlicmVhazsKIAljYXNlIENNRF9USU1FT1VUOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwIHRpbWVkb3V0XG4iLCBjbWQpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kICVwIHRpbWVkb3V0XG4iLCBjbWQpOwogCQlycS0+ZXJyb3JzID0gbWFrZV9zdGF0dXNfYnl0ZXMoU0FNX1NUQVRfR09PRCwKIAkJCWNtZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMsIERSSVZFUl9PSywKLQkJCWJsa19wY19yZXF1ZXN0KGNtZC0+cnEpID8gRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKKwkJCShjbWQtPnJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgPworCQkJCURJRF9QQVNTVEhST1VHSCA6IERJRF9FUlJPUik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgcmV0dXJuZWQgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kICVwIHJldHVybmVkICIKIAkJICAgICAgICJ1bmtub3duIHN0YXR1cyAleFxuIiwgY21kLAogCQkgICAgICAgY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyk7CiAJCXJxLT5lcnJvcnMgPSBtYWtlX3N0YXR1c19ieXRlcyhTQU1fU1RBVF9HT09ELAogCQkJY21kLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cywgRFJJVkVSX09LLAotCQkJYmxrX3BjX3JlcXVlc3QoY21kLT5ycSkgPyBESURfUEFTU1RIUk9VR0ggOiBESURfRVJST1IpOworCQkJKGNtZC0+cnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJRElEX1BBU1NUSFJPVUdIIDogRElEX0VSUk9SKTsKIAl9CiAKIGFmdGVyX2Vycm9yX3Byb2Nlc3Npbmc6CkBAIC0zMTMyLDYgKzMxNjcsMzQgQEAKIAlibGtfY29tcGxldGVfcmVxdWVzdChjbWQtPnJxKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgY2Npc3NfdGFnX2NvbnRhaW5zX2luZGV4KHUzMiB0YWcpCit7CisjZGVmaW5lIERJUkVDVF9MT09LVVBfQklUIDB4MTAKKwlyZXR1cm4gdGFnICYgRElSRUNUX0xPT0tVUF9CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNjaXNzX3RhZ190b19pbmRleCh1MzIgdGFnKQoreworI2RlZmluZSBESVJFQ1RfTE9PS1VQX1NISUZUIDUKKwlyZXR1cm4gdGFnID4+IERJUkVDVF9MT09LVVBfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNjaXNzX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHModTMyIHRhZykKK3sKKyNkZWZpbmUgQ0NJU1NfRVJST1JfQklUUyAweDAzCisJcmV0dXJuIHRhZyAmIH5DQ0lTU19FUlJPUl9CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2Npc3NfbWFya190YWdfaW5kZXhlZCh1MzIgKnRhZykKK3sKKwkqdGFnIHw9IERJUkVDVF9MT09LVVBfQklUOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2Npc3Nfc2V0X3RhZ19pbmRleCh1MzIgKnRhZywgdTMyIGluZGV4KQoreworCSp0YWcgfD0gKGluZGV4IDw8IERJUkVDVF9MT09LVVBfU0hJRlQpOworfQorCiAvKgogICogR2V0IGEgcmVxdWVzdCBhbmQgc3VibWl0IGl0IHRvIHRoZSBjb250cm9sbGVyLgogICovCkBAIC0zMTYzLDcgKzMyMjYsOCBAQAogCiAJQlVHX09OKGNyZXEtPm5yX3BoeXNfc2VnbWVudHMgPiBoLT5tYXhzZ2VudHJpZXMpOwogCi0JaWYgKChjID0gY21kX2FsbG9jKGgsIDEpKSA9PSBOVUxMKQorCWMgPSBjbWRfYWxsb2MoaCk7CisJaWYgKCFjKQogCQlnb3RvIGZ1bGw7CiAKIAlibGtfc3RhcnRfcmVxdWVzdChjcmVxKTsKQEAgLTMxODAsOCArMzI0NCw4IEBACiAJLyogZ290IGNvbW1hbmQgZnJvbSBwb29sLCBzbyB1c2UgdGhlIGNvbW1hbmQgYmxvY2sgaW5kZXggaW5zdGVhZCAqLwogCS8qIGZvciBkaXJlY3QgbG9va3Vwcy4gKi8KIAkvKiBUaGUgZmlyc3QgMiBiaXRzIGFyZSByZXNlcnZlZCBmb3IgY29udHJvbGxlciBlcnJvciByZXBvcnRpbmcuICovCi0JYy0+SGVhZGVyLlRhZy5sb3dlciA9IChjLT5jbWRpbmRleCA8PCAzKTsKLQljLT5IZWFkZXIuVGFnLmxvd2VyIHw9IDB4MDQ7CS8qIGZsYWcgZm9yIGRpcmVjdCBsb29rdXAuICovCisJY2Npc3Nfc2V0X3RhZ19pbmRleCgmYy0+SGVhZGVyLlRhZy5sb3dlciwgYy0+Y21kaW5kZXgpOworCWNjaXNzX21hcmtfdGFnX2luZGV4ZWQoJmMtPkhlYWRlci5UYWcubG93ZXIpOwogCW1lbWNweSgmYy0+SGVhZGVyLkxVTiwgZHJ2LT5MdW5JRCwgc2l6ZW9mKGRydi0+THVuSUQpKTsKIAljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOwkvKiAxMiBieXRlIGNvbW1hbmRzIG5vdCBpbiBGVyB5ZXQ7ICovCiAJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLyogSXQgaXMgYSBjb21tYW5kLiAqLwpAQCAtMzE5MiwxMSArMzI1Niw4IEBACiAJYy0+UmVxdWVzdC5DREJbMF0gPQogCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBoLT5jY2lzc19yZWFkIDogaC0+Y2Npc3Nfd3JpdGU7CiAJc3RhcnRfYmxrID0gYmxrX3JxX3BvcyhjcmVxKTsKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJjaXNzOiBzZWN0b3IgPSVkIG5yX3NlY3RvcnM9JWRcbiIsCisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAic2VjdG9yID0lZCBucl9zZWN0b3JzPSVkXG4iLAogCSAgICAgICAoaW50KWJsa19ycV9wb3MoY3JlcSksIChpbnQpYmxrX3JxX3NlY3RvcnMoY3JlcSkpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0KIAlzZ19pbml0X3RhYmxlKHRtcF9zZywgaC0+bWF4c2dlbnRyaWVzKTsKIAlzZWcgPSBibGtfcnFfbWFwX3NnKHEsIGNyZXEsIHRtcF9zZyk7CiAKQEAgLTMyMzYsMTcgKzMyOTcsMTggQEAKIAlpZiAoc2VnID4gaC0+bWF4U0cpCiAJCWgtPm1heFNHID0gc2VnOwogCi0jaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3M6IFN1Ym1pdHRpbmcgJWxkIHNlY3RvcnMgaW4gJWQgc2VnbWVudHMgIgorCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIlN1Ym1pdHRpbmcgJXUgc2VjdG9ycyBpbiAlZCBzZWdtZW50cyAiCiAJCQkiY2hhaW5lZFslZF1cbiIsCiAJCQlibGtfcnFfc2VjdG9ycyhjcmVxKSwgc2VnLCBjaGFpbmVkKTsKLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCi0JYy0+SGVhZGVyLlNHTGlzdCA9IGMtPkhlYWRlci5TR1RvdGFsID0gc2VnICsgY2hhaW5lZDsKLQlpZiAoc2VnID4gaC0+bWF4X2NtZF9zZ2VudHJpZXMpCisJYy0+SGVhZGVyLlNHVG90YWwgPSBzZWcgKyBjaGFpbmVkOworCWlmIChzZWcgPD0gaC0+bWF4X2NtZF9zZ2VudHJpZXMpCisJCWMtPkhlYWRlci5TR0xpc3QgPSBjLT5IZWFkZXIuU0dUb3RhbDsKKwllbHNlCiAJCWMtPkhlYWRlci5TR0xpc3QgPSBoLT5tYXhfY21kX3NnZW50cmllczsKKwlzZXRfcGVyZm9ybWFudF9tb2RlKGgsIGMpOwogCi0JaWYgKGxpa2VseShibGtfZnNfcmVxdWVzdChjcmVxKSkpIHsKKwlpZiAobGlrZWx5KGNyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSkgewogCQlpZihoLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTApIHsKIAkJCWMtPlJlcXVlc3QuQ0RCWzFdID0gMDsKIAkJCWMtPlJlcXVlc3QuQ0RCWzJdID0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOyAvKiBNU0IgKi8KQEAgLTMyNzYsMTEgKzMzMzgsMTIgQEAKIAkJCWMtPlJlcXVlc3QuQ0RCWzEzXT0gYmxrX3JxX3NlY3RvcnMoY3JlcSkgJiAweGZmOwogCQkJYy0+UmVxdWVzdC5DREJbMTRdID0gYy0+UmVxdWVzdC5DREJbMTVdID0gMDsKIAkJfQotCX0gZWxzZSBpZiAoYmxrX3BjX3JlcXVlc3QoY3JlcSkpIHsKKwl9IGVsc2UgaWYgKGNyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCWMtPlJlcXVlc3QuQ0RCTGVuID0gY3JlcS0+Y21kX2xlbjsKIAkJbWVtY3B5KGMtPlJlcXVlc3QuQ0RCLCBjcmVxLT5jbWQsIEJMS19NQVhfQ0RCKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBiYWQgcmVxdWVzdCB0eXBlICVkXG4iLCBoLT5jdGxyLCBjcmVxLT5jbWRfdHlwZSk7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJiYWQgcmVxdWVzdCB0eXBlICVkXG4iLAorCQkJY3JlcS0+Y21kX3R5cGUpOwogCQlCVUcoKTsKIAl9CiAKQEAgLTMzMTMsNzIgKzMzNzYsMTMxIEBACiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBpbnRlcnJ1cHRfbm90X2Zvcl91cyhjdGxyX2luZm9fdCAqaCkKIHsKLQlyZXR1cm4gKCgoaC0+YWNjZXNzLmludHJfcGVuZGluZyhoKSA9PSAwKSB8fAotCQkgKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSkpOworCXJldHVybiAoKGgtPmFjY2Vzcy5pbnRyX3BlbmRpbmcoaCkgPT0gMCkgfHwKKwkJKGgtPmludGVycnVwdHNfZW5hYmxlZCA9PSAwKSk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IGJhZF90YWcoY3Rscl9pbmZvX3QgKmgsIHUzMiB0YWdfaW5kZXgsCisJCQl1MzIgcmF3X3RhZykKK3sKKwlpZiAodW5saWtlbHkodGFnX2luZGV4ID49IGgtPm5yX2NtZHMpKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJiYWQgdGFnIDB4JTA4eCBpZ25vcmVkLlxuIiwgcmF3X3RhZyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYywKKwkJCQl1MzIgcmF3X3RhZykKK3sKKwlyZW1vdmVRKGMpOworCWlmIChsaWtlbHkoYy0+Y21kX3R5cGUgPT0gQ01EX1JXUkVRKSkKKwkJY29tcGxldGVfY29tbWFuZChoLCBjLCAwKTsKKwllbHNlIGlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9DVExfUEVORCkKKwkJY29tcGxldGUoYy0+d2FpdGluZyk7CisjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCisJZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpCisJCWNvbXBsZXRlX3Njc2lfY29tbWFuZChjLCAwLCByYXdfdGFnKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHUzMiBuZXh0X2NvbW1hbmQoY3Rscl9pbmZvX3QgKmgpCit7CisJdTMyIGE7CisKKwlpZiAodW5saWtlbHkoaC0+dHJhbnNNZXRob2QgIT0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQpKQorCQlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgpOworCisJaWYgKCgqKGgtPnJlcGx5X3Bvb2xfaGVhZCkgJiAxKSA9PSAoaC0+cmVwbHlfcG9vbF93cmFwYXJvdW5kKSkgeworCQlhID0gKihoLT5yZXBseV9wb29sX2hlYWQpOyAvKiBOZXh0IGNtZCBpbiByaW5nIGJ1ZmZlciAqLworCQkoaC0+cmVwbHlfcG9vbF9oZWFkKSsrOworCQloLT5jb21tYW5kc19vdXRzdGFuZGluZy0tOworCX0gZWxzZSB7CisJCWEgPSBGSUZPX0VNUFRZOworCX0KKwkvKiBDaGVjayBmb3Igd3JhcGFyb3VuZCAqLworCWlmIChoLT5yZXBseV9wb29sX2hlYWQgPT0gKGgtPnJlcGx5X3Bvb2wgKyBoLT5tYXhfY29tbWFuZHMpKSB7CisJCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisJCWgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCBePSAxOworCX0KKwlyZXR1cm4gYTsKK30KKworLyogcHJvY2VzcyBjb21wbGV0aW9uIG9mIGFuIGluZGV4ZWQgKCJkaXJlY3QgbG9va3VwIikgY29tbWFuZCAqLworc3RhdGljIGlubGluZSB1MzIgcHJvY2Vzc19pbmRleGVkX2NtZChjdGxyX2luZm9fdCAqaCwgdTMyIHJhd190YWcpCit7CisJdTMyIHRhZ19pbmRleDsKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CisKKwl0YWdfaW5kZXggPSBjY2lzc190YWdfdG9faW5kZXgocmF3X3RhZyk7CisJaWYgKGJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkKKwkJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKKwljID0gaC0+Y21kX3Bvb2wgKyB0YWdfaW5kZXg7CisJZmluaXNoX2NtZChoLCBjLCByYXdfdGFnKTsKKwlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworfQorCisvKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYSBub24taW5kZXhlZCBjb21tYW5kICovCitzdGF0aWMgaW5saW5lIHUzMiBwcm9jZXNzX25vbmluZGV4ZWRfY21kKGN0bHJfaW5mb190ICpoLCB1MzIgcmF3X3RhZykKK3sKKwl1MzIgdGFnOworCUNvbW1hbmRMaXN0X3N0cnVjdCAqYyA9IE5VTEw7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwlfX3UzMiBidXNhZGRyX21hc2tlZCwgdGFnX21hc2tlZDsKKworCXRhZyA9IGNjaXNzX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHMocmF3X3RhZyk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYywgdG1wLCAmaC0+Y21wUSwgbGlzdCkgeworCQlidXNhZGRyX21hc2tlZCA9IGNjaXNzX3RhZ19kaXNjYXJkX2Vycm9yX2JpdHMoYy0+YnVzYWRkcik7CisJCXRhZ19tYXNrZWQgPSBjY2lzc190YWdfZGlzY2FyZF9lcnJvcl9iaXRzKHRhZyk7CisJCWlmIChidXNhZGRyX21hc2tlZCA9PSB0YWdfbWFza2VkKSB7CisJCQlmaW5pc2hfY21kKGgsIGMsIHJhd190YWcpOworCQkJcmV0dXJuIG5leHRfY29tbWFuZChoKTsKKwkJfQorCX0KKwliYWRfdGFnKGgsIGgtPm5yX2NtZHMgKyAxLCByYXdfdGFnKTsKKwlyZXR1cm4gbmV4dF9jb21tYW5kKGgpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfaW50eChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJY3Rscl9pbmZvX3QgKmggPSBkZXZfaWQ7Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MzIgYSwgYTEsIGEyOworCXUzMiByYXdfdGFnOwogCiAJaWYgKGludGVycnVwdF9ub3RfZm9yX3VzKGgpKQogCQlyZXR1cm4gSVJRX05PTkU7Ci0JLyoKLQkgKiBJZiB0aGVyZSBhcmUgY29tcGxldGVkIGNvbW1hbmRzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLAotCSAqIHdlIGhhZCBiZXR0ZXIgZG8gc29tZXRoaW5nIGFib3V0IGl0LgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCXdoaWxlIChpbnRlcnJ1cHRfcGVuZGluZyhoKSkgewotCQl3aGlsZSAoKGEgPSBnZXRfbmV4dF9jb21wbGV0aW9uKGgpKSAhPSBGSUZPX0VNUFRZKSB7Ci0JCQlhMSA9IGE7Ci0JCQlpZiAoKGEgJiAweDA0KSkgewotCQkJCWEyID0gKGEgPj4gMyk7Ci0JCQkJaWYgKGEyID49IGgtPm5yX2NtZHMpIHsKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCQkgICAgICAgImNjaXNzOiBjb250cm9sbGVyIGNjaXNzJWQgZmFpbGVkLCBzdG9wcGluZy5cbiIsCi0JCQkJCSAgICAgICBoLT5jdGxyKTsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7Ci0JCQkJCWZhaWxfYWxsX2NtZHMoaC0+Y3Rscik7Ci0JCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCQl9Ci0KLQkJCQljID0gaC0+Y21kX3Bvb2wgKyBhMjsKLQkJCQlhID0gYy0+YnVzYWRkcjsKLQotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOwotCi0JCQkJYSAmPSB+MzsKLQkJCQljID0gTlVMTDsKLQkJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShjLCB0bXAsICZoLT5jbXBRLCBsaXN0KSB7Ci0JCQkJCWlmIChjLT5idXNhZGRyID09IGEpCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQkvKgotCQkJICogSWYgd2UndmUgZm91bmQgdGhlIGNvbW1hbmQsIHRha2UgaXQgb2ZmIHRoZQotCQkJICogY29tcGxldGlvbiBRIGFuZCBmcmVlIGl0Ci0JCQkgKi8KLQkJCWlmIChjICYmIGMtPmJ1c2FkZHIgPT0gYSkgewotCQkJCXJlbW92ZVEoYyk7Ci0JCQkJaWYgKGMtPmNtZF90eXBlID09IENNRF9SV1JFUSkgewotCQkJCQljb21wbGV0ZV9jb21tYW5kKGgsIGMsIDApOwotCQkJCX0gZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQ1RMX1BFTkQpIHsKLQkJCQkJY29tcGxldGUoYy0+d2FpdGluZyk7Ci0JCQkJfQotIwkJCQlpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQkJCQllbHNlIGlmIChjLT5jbWRfdHlwZSA9PSBDTURfU0NTSSkKLQkJCQkJY29tcGxldGVfc2NzaV9jb21tYW5kKGMsIDAsIGExKTsKLSMJCQkJZW5kaWYKLQkJCQljb250aW51ZTsKLQkJCX0KKwkJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCk7CisJCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpIHsKKwkJCWlmIChjY2lzc190YWdfY29udGFpbnNfaW5kZXgocmF3X3RhZykpCisJCQkJcmF3X3RhZyA9IHByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CisJCQllbHNlCisJCQkJcmF3X3RhZyA9IHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworLyogQWRkIGEgc2Vjb25kIGludGVycnVwdCBoYW5kbGVyIGZvciBNU0kvTVNJLVggbW9kZS4gSW4gdGhpcyBtb2RlIHdlIG5ldmVyCisgKiBjaGVjayB0aGUgaW50ZXJydXB0IHBlbmRpbmcgcmVnaXN0ZXIgYmVjYXVzZSBpdCBpcyBub3Qgc2V0LgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZG9fY2Npc3NfbXNpeF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwljdGxyX2luZm9fdCAqaCA9IGRldl9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByYXdfdGFnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlyYXdfdGFnID0gZ2V0X25leHRfY29tcGxldGlvbihoKTsKKwl3aGlsZSAocmF3X3RhZyAhPSBGSUZPX0VNUFRZKSB7CisJCWlmIChjY2lzc190YWdfY29udGFpbnNfaW5kZXgocmF3X3RhZykpCisJCQlyYXdfdGFnID0gcHJvY2Vzc19pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJZWxzZQorCQkJcmF3X3RhZyA9IHByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1MTAsMTggKzM2MzIsMTcgQEAKIAogCXN3aXRjaCAoYy0+ZXJyX2luZm8tPlNlbnNlSW5mb1sxMl0pIHsKIAljYXNlIFNUQVRFX0NIQU5HRUQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGEgc3RhdGUgY2hhbmdlICIKLQkJCSJkZXRlY3RlZCwgY29tbWFuZCByZXRyaWVkXG4iLCBoLT5jdGxyKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImEgc3RhdGUgY2hhbmdlICIKKwkJCSJkZXRlY3RlZCwgY29tbWFuZCByZXRyaWVkXG4iKTsKIAkJcmV0dXJuIDE7CiAJYnJlYWs7CiAJY2FzZSBMVU5fRkFJTEVEOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBMVU4gZmFpbHVyZSAiCi0JCQkiZGV0ZWN0ZWQsIGFjdGlvbiByZXF1aXJlZFxuIiwgaC0+Y3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJMVU4gZmFpbHVyZSAiCisJCQkiZGV0ZWN0ZWQsIGFjdGlvbiByZXF1aXJlZFxuIik7CiAJCXJldHVybiAxOwogCWJyZWFrOwogCWNhc2UgUkVQT1JUX0xVTlNfQ0hBTkdFRDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVwb3J0IExVTiBkYXRhICIKLQkJCSJjaGFuZ2VkXG4iLCBoLT5jdGxyKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInJlcG9ydCBMVU4gZGF0YSBjaGFuZ2VkXG4iKTsKIAkvKgogCSAqIEhlcmUsIHdlIGNvdWxkIGNhbGwgYWRkX3RvX3NjYW5fbGlzdCBhbmQgd2FrZSB1cCB0aGUgc2NhbiB0aHJlYWQsCiAJICogZXhjZXB0IHRoYXQgaXQncyBxdWl0ZSBsaWtlbHkgdGhhdCB3ZSB3aWxsIGdldCBtb3JlIHRoYW4gb25lCkBAIC0zNTQxLDE5ICszNjYyLDE4IEBACiAJCXJldHVybiAxOwogCWJyZWFrOwogCWNhc2UgUE9XRVJfT1JfUkVTRVQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGEgcG93ZXIgb24gIgotCQkJIm9yIGRldmljZSByZXNldCBkZXRlY3RlZFxuIiwgaC0+Y3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkiYSBwb3dlciBvbiBvciBkZXZpY2UgcmVzZXQgZGV0ZWN0ZWRcbiIpOwogCQlyZXR1cm4gMTsKIAlicmVhazsKIAljYXNlIFVOSVRfQVRURU5USU9OX0NMRUFSRUQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IHVuaXQgYXR0ZW50aW9uICIKLQkJICAgICJjbGVhcmVkIGJ5IGFub3RoZXIgaW5pdGlhdG9yXG4iLCBoLT5jdGxyKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCSJ1bml0IGF0dGVudGlvbiBjbGVhcmVkIGJ5IGFub3RoZXIgaW5pdGlhdG9yXG4iKTsKIAkJcmV0dXJuIDE7CiAJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogdW5rbm93biAiCi0JCQkidW5pdCBhdHRlbnRpb24gZGV0ZWN0ZWRcbiIsIGgtPmN0bHIpOwotCQkJCXJldHVybiAxOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5rbm93biB1bml0IGF0dGVudGlvbiBkZXRlY3RlZFxuIik7CisJCXJldHVybiAxOwogCX0KIH0KIApAQCAtMzU2MiwzOSArMzY4Miw0MSBAQAogICogICB0aGUgaW8gZnVuY3Rpb25zLgogICogICBUaGlzIGlzIGZvciBkZWJ1ZyBvbmx5LgogICovCi0jaWZkZWYgQ0NJU1NfREVCVUcKLXN0YXRpYyB2b2lkIHByaW50X2NmZ190YWJsZShDZmdUYWJsZV9zdHJ1Y3QgKnRiKQorc3RhdGljIHZvaWQgcHJpbnRfY2ZnX3RhYmxlKGN0bHJfaW5mb190ICpoKQogewogCWludCBpOwogCWNoYXIgdGVtcF9uYW1lWzE3XTsKKwlDZmdUYWJsZV9zdHJ1Y3QgKnRiID0gaC0+Y2ZndGFibGU7CiAKLQlwcmludGsoIkNvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIik7Ci0JcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIik7CisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQl0ZW1wX25hbWVbaV0gPSByZWFkYigmKHRiLT5TaWduYXR1cmVbaV0pKTsKIAl0ZW1wX25hbWVbNF0gPSAnXDAnOwotCXByaW50aygiICAgU2lnbmF0dXJlID0gJXNcbiIsIHRlbXBfbmFtZSk7Ci0JcHJpbnRrKCIgICBTcGVjIE51bWJlciA9ICVkXG4iLCByZWFkbCgmKHRiLT5TcGVjVmFsZW5jZSkpKTsKLQlwcmludGsoIiAgIFRyYW5zcG9ydCBtZXRob2RzIHN1cHBvcnRlZCA9IDB4JXhcbiIsCisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiICAgU2lnbmF0dXJlID0gJXNcbiIsIHRlbXBfbmFtZSk7CisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiICAgU3BlYyBOdW1iZXIgPSAlZFxuIiwKKwkJcmVhZGwoJih0Yi0+U3BlY1ZhbGVuY2UpKSk7CisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiICAgVHJhbnNwb3J0IG1ldGhvZHMgc3VwcG9ydGVkID0gMHgleFxuIiwKIAkgICAgICAgcmVhZGwoJih0Yi0+VHJhbnNwb3J0U3VwcG9ydCkpKTsKLQlwcmludGsoIiAgIFRyYW5zcG9ydCBtZXRob2RzIGFjdGl2ZSA9IDB4JXhcbiIsCisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiICAgVHJhbnNwb3J0IG1ldGhvZHMgYWN0aXZlID0gMHgleFxuIiwKIAkgICAgICAgcmVhZGwoJih0Yi0+VHJhbnNwb3J0QWN0aXZlKSkpOwotCXByaW50aygiICAgUmVxdWVzdGVkIHRyYW5zcG9ydCBNZXRob2QgPSAweCV4XG4iLAorCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiAgIFJlcXVlc3RlZCB0cmFuc3BvcnQgTWV0aG9kID0gMHgleFxuIiwKIAkgICAgICAgcmVhZGwoJih0Yi0+SG9zdFdyaXRlLlRyYW5zcG9ydFJlcXVlc3QpKSk7Ci0JcHJpbnRrKCIgICBDb2FsZXNjZSBJbnRlcnJ1cHQgRGVsYXkgPSAweCV4XG4iLAorCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiAgIENvYWxlc2NlIEludGVycnVwdCBEZWxheSA9IDB4JXhcbiIsCiAJICAgICAgIHJlYWRsKCYodGItPkhvc3RXcml0ZS5Db2FsSW50RGVsYXkpKSk7Ci0JcHJpbnRrKCIgICBDb2FsZXNjZSBJbnRlcnJ1cHQgQ291bnQgPSAweCV4XG4iLAorCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiAgIENvYWxlc2NlIEludGVycnVwdCBDb3VudCA9IDB4JXhcbiIsCiAJICAgICAgIHJlYWRsKCYodGItPkhvc3RXcml0ZS5Db2FsSW50Q291bnQpKSk7Ci0JcHJpbnRrKCIgICBNYXggb3V0c3RhbmRpbmcgY29tbWFuZHMgPSAweCVkXG4iLAorCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiAgIE1heCBvdXRzdGFuZGluZyBjb21tYW5kcyA9IDB4JWRcbiIsCiAJICAgICAgIHJlYWRsKCYodGItPkNtZHNPdXRNYXgpKSk7Ci0JcHJpbnRrKCIgICBCdXMgVHlwZXMgPSAweCV4XG4iLCByZWFkbCgmKHRiLT5CdXNUeXBlcykpKTsKKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICIgICBCdXMgVHlwZXMgPSAweCV4XG4iLAorCQlyZWFkbCgmKHRiLT5CdXNUeXBlcykpKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJdGVtcF9uYW1lW2ldID0gcmVhZGIoJih0Yi0+U2VydmVyTmFtZVtpXSkpOwogCXRlbXBfbmFtZVsxNl0gPSAnXDAnOwotCXByaW50aygiICAgU2VydmVyIE5hbWUgPSAlc1xuIiwgdGVtcF9uYW1lKTsKLQlwcmludGsoIiAgIEhlYXJ0YmVhdCBDb3VudGVyID0gMHgleFxuXG5cbiIsIHJlYWRsKCYodGItPkhlYXJ0QmVhdCkpKTsKKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICIgICBTZXJ2ZXIgTmFtZSA9ICVzXG4iLCB0ZW1wX25hbWUpOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiAgIEhlYXJ0YmVhdCBDb3VudGVyID0gMHgleFxuXG5cbiIsCisJCXJlYWRsKCYodGItPkhlYXJ0QmVhdCkpKTsKIH0KLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCiBzdGF0aWMgaW50IGZpbmRfUENJX0JBUl9pbmRleChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBwY2lfYmFyX2FkZHIpCiB7CkBAIC0zNjE4LDcgKzM3NDAsNyBAQAogCQkJCW9mZnNldCArPSA4OwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoJLyogcmVzZXJ2ZWQgaW4gUENJIDIuMiAqLwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAogCQkJCSAgICAgICAiQmFzZSBhZGRyZXNzIGlzIGludmFsaWRcbiIpOwogCQkJCXJldHVybiAtMTsKIAkJCQlicmVhazsKQEAgLTM2MzAsMTIgKzM3NTIsMTgyIEBACiAJcmV0dXJuIC0xOwogfQogCisvKiBGaWxsIGluIGJ1Y2tldF9tYXBbXSwgZ2l2ZW4gbnNncyAodGhlIG1heCBudW1iZXIgb2YKKyAqIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzIHN1cHBvcnRlZCkgYW5kIGJ1Y2tldFtdLAorICogd2hpY2ggaXMgYW4gYXJyYXkgb2YgOCBpbnRlZ2Vycy4gIFRoZSBidWNrZXRbXSBhcnJheQorICogY29udGFpbnMgOCBkaWZmZXJlbnQgRE1BIHRyYW5zZmVyIHNpemVzIChpbiAxNgorICogYnl0ZSBpbmNyZW1lbnRzKSB3aGljaCB0aGUgY29udHJvbGxlciB1c2VzIHRvIGZldGNoCisgKiBjb21tYW5kcy4gIFRoaXMgZnVuY3Rpb24gZmlsbHMgaW4gYnVja2V0X21hcFtdLCB3aGljaAorICogbWFwcyBhIGdpdmVuIG51bWJlciBvZiBzY2F0dGVyIGdhdGhlciBlbGVtZW50cyB0byBvbmUgb2YKKyAqIHRoZSA4IERNQSB0cmFuc2ZlciBzaXplcy4gIFRoZSBwb2ludCBvZiBpdCBpcyB0byBhbGxvdyB0aGUKKyAqIGNvbnRyb2xsZXIgdG8gb25seSBkbyBhcyBtdWNoIERNQSBhcyBuZWVkZWQgdG8gZmV0Y2ggdGhlCisgKiBjb21tYW5kLCB3aXRoIHRoZSBETUEgdHJhbnNmZXIgc2l6ZSBlbmNvZGVkIGluIHRoZSBsb3dlcgorICogYml0cyBvZiB0aGUgY29tbWFuZCBhZGRyZXNzLgorICovCitzdGF0aWMgdm9pZCAgY2FsY19idWNrZXRfbWFwKGludCBidWNrZXRbXSwgaW50IG51bV9idWNrZXRzLAorCWludCBuc2dzLCBpbnQgKmJ1Y2tldF9tYXApCit7CisJaW50IGksIGosIGIsIHNpemU7CisKKwkvKiBldmVuIGEgY29tbWFuZCB3aXRoIDAgU0dzIHJlcXVpcmVzIDQgYmxvY2tzICovCisjZGVmaW5lIE1JTklNVU1fVFJBTlNGRVJfQkxPQ0tTIDQKKyNkZWZpbmUgTlVNX0JVQ0tFVFMgOAorCS8qIE5vdGUsIGJ1Y2tldF9tYXAgbXVzdCBoYXZlIG5zZ3MrMSBlbnRyaWVzLiAqLworCWZvciAoaSA9IDA7IGkgPD0gbnNnczsgaSsrKSB7CisJCS8qIENvbXB1dGUgc2l6ZSBvZiBhIGNvbW1hbmQgd2l0aCBpIFNHIGVudHJpZXMgKi8KKwkJc2l6ZSA9IGkgKyBNSU5JTVVNX1RSQU5TRkVSX0JMT0NLUzsKKwkJYiA9IG51bV9idWNrZXRzOyAvKiBBc3N1bWUgdGhlIGJpZ2dlc3QgYnVja2V0ICovCisJCS8qIEZpbmQgdGhlIGJ1Y2tldCB0aGF0IGlzIGp1c3QgYmlnIGVub3VnaCAqLworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQlpZiAoYnVja2V0W2pdID49IHNpemUpIHsKKwkJCQliID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBmb3IgYSBjb21tYW5kIHdpdGggaSBTRyBlbnRyaWVzLCB1c2UgYnVja2V0IGIuICovCisJCWJ1Y2tldF9tYXBbaV0gPSBiOworCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGNjaXNzX3dhaXRfZm9yX21vZGVfY2hhbmdlX2FjayhjdGxyX2luZm9fdCAqaCkKK3sKKwlpbnQgaTsKKworCS8qIHVuZGVyIGNlcnRhaW4gdmVyeSByYXJlIGNvbmRpdGlvbnMsIHRoaXMgY2FuIHRha2UgYXdoaWxlLgorCSAqIChlLmcuOiBob3QgcmVwbGFjZSBhIGZhaWxlZCAxNDRHQiBkcml2ZSBpbiBhIFJBSUQgNSBzZXQgcmlnaHQKKwkgKiBhcyB3ZSBlbnRlciB0aGlzIGNvZGUuKSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09ORklHX1dBSVQ7IGkrKykgeworCQlpZiAoIShyZWFkbChoLT52YWRkciArIFNBNV9ET09SQkVMTCkgJiBDRkdUQkxfQ2hhbmdlUmVxKSkKKwkJCWJyZWFrOworCQltc2xlZXAoMTApOworCX0KK30KKworc3RhdGljIF9fZGV2aW5pdCB2b2lkIGNjaXNzX2VudGVyX3BlcmZvcm1hbnRfbW9kZShjdGxyX2luZm9fdCAqaCkKK3sKKwkvKiBUaGlzIGlzIGEgYml0IGNvbXBsaWNhdGVkLiAgVGhlcmUgYXJlIDggcmVnaXN0ZXJzIG9uCisJICogdGhlIGNvbnRyb2xsZXIgd2hpY2ggd2Ugd3JpdGUgdG8gdG8gdGVsbCBpdCA4IGRpZmZlcmVudAorCSAqIHNpemVzIG9mIGNvbW1hbmRzIHdoaWNoIHRoZXJlIG1heSBiZS4gIEl0J3MgYSB3YXkgb2YKKwkgKiByZWR1Y2luZyB0aGUgRE1BIGRvbmUgdG8gZmV0Y2ggZWFjaCBjb21tYW5kLiAgRW5jb2RlZCBpbnRvCisJICogZWFjaCBjb21tYW5kJ3MgdGFnIGFyZSAzIGJpdHMgd2hpY2ggY29tbXVuaWNhdGUgdG8gdGhlIGNvbnRyb2xsZXIKKwkgKiB3aGljaCBvZiB0aGUgZWlnaHQgc2l6ZXMgdGhhdCBjb21tYW5kIGZpdHMgd2l0aGluLiAgVGhlIHNpemUgb2YKKwkgKiBlYWNoIGNvbW1hbmQgZGVwZW5kcyBvbiBob3cgbWFueSBzY2F0dGVyIGdhdGhlciBlbnRyaWVzIHRoZXJlIGFyZS4KKwkgKiBFYWNoIFNHIGVudHJ5IHJlcXVpcmVzIDE2IGJ5dGVzLiAgVGhlIGVpZ2h0IHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZAorCSAqIHdpdGggdGhlIG51bWJlciBvZiAxNi1ieXRlIGJsb2NrcyBhIGNvbW1hbmQgb2YgdGhhdCBzaXplIHJlcXVpcmVzLgorCSAqIFRoZSBzbWFsbGVzdCBjb21tYW5kIHBvc3NpYmxlIHJlcXVpcmVzIDUgc3VjaCAxNiBieXRlIGJsb2Nrcy4KKwkgKiB0aGUgbGFyZ2VzdCBjb21tYW5kIHBvc3NpYmxlIHJlcXVpcmVzIE1BWFNHRU5UUklFUyArIDQgMTYtYnl0ZQorCSAqIGJsb2Nrcy4gIE5vdGUsIHRoaXMgb25seSBleHRlbmRzIHRvIHRoZSBTRyBlbnRyaWVzIGNvbnRhaW5lZAorCSAqIHdpdGhpbiB0aGUgY29tbWFuZCBibG9jaywgYW5kIGRvZXMgbm90IGV4dGVuZCB0byBjaGFpbmVkIGJsb2NrcworCSAqIG9mIFNHIGVsZW1lbnRzLiAgIGJmdFtdIGNvbnRhaW5zIHRoZSBlaWdodCB2YWx1ZXMgd2Ugd3JpdGUgdG8KKwkgKiB0aGUgcmVnaXN0ZXJzLiAgVGhleSBhcmUgbm90IGV2ZW5seSBkaXN0cmlidXRlZCwgYnV0IGhhdmUgbW9yZQorCSAqIHNpemVzIGZvciBzbWFsbCBjb21tYW5kcywgYW5kIGZld2VyIHNpemVzIGZvciBsYXJnZXIgY29tbWFuZHMuCisJICovCisJX191MzIgdHJhbnNfb2Zmc2V0OworCWludCBiZnRbOF0gPSB7IDUsIDYsIDgsIDEwLCAxMiwgMjAsIDI4LCBNQVhTR0VOVFJJRVMgKyA0fTsKKwkJCS8qCisJCQkgKiAgNSA9IDEgcy9nIGVudHJ5IG9yIDRrCisJCQkgKiAgNiA9IDIgcy9nIGVudHJ5IG9yIDhrCisJCQkgKiAgOCA9IDQgcy9nIGVudHJ5IG9yIDE2aworCQkJICogMTAgPSA2IHMvZyBlbnRyeSBvciAyNGsKKwkJCSAqLworCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJfdmFsdWU7CisJQlVJTERfQlVHX09OKDI4ID4gTUFYU0dFTlRSSUVTICsgNCk7CisKKwloLT5yZXBseV9wb29sX3dyYXBhcm91bmQgPSAxOyAvKiBzcGVjOiBpbml0IHRvIDEgKi8KKworCS8qIENvbnRyb2xsZXIgc3BlYzogemVybyBvdXQgdGhpcyBidWZmZXIuICovCisJbWVtc2V0KGgtPnJlcGx5X3Bvb2wsIDAsIGgtPm1heF9jb21tYW5kcyAqIHNpemVvZihfX3U2NCkpOworCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisKKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc01ldGhvZE9mZnNldCkpOworCWNhbGNfYnVja2V0X21hcChiZnQsIEFSUkFZX1NJWkUoYmZ0KSwgaC0+bWF4c2dlbnRyaWVzLAorCQkJCWgtPmJsb2NrRmV0Y2hUYWJsZSk7CisJd3JpdGVsKGJmdFswXSwgJmgtPnRyYW5zdGFibGUtPkJsb2NrRmV0Y2gwKTsKKwl3cml0ZWwoYmZ0WzFdLCAmaC0+dHJhbnN0YWJsZS0+QmxvY2tGZXRjaDEpOworCXdyaXRlbChiZnRbMl0sICZoLT50cmFuc3RhYmxlLT5CbG9ja0ZldGNoMik7CisJd3JpdGVsKGJmdFszXSwgJmgtPnRyYW5zdGFibGUtPkJsb2NrRmV0Y2gzKTsKKwl3cml0ZWwoYmZ0WzRdLCAmaC0+dHJhbnN0YWJsZS0+QmxvY2tGZXRjaDQpOworCXdyaXRlbChiZnRbNV0sICZoLT50cmFuc3RhYmxlLT5CbG9ja0ZldGNoNSk7CisJd3JpdGVsKGJmdFs2XSwgJmgtPnRyYW5zdGFibGUtPkJsb2NrRmV0Y2g2KTsKKwl3cml0ZWwoYmZ0WzddLCAmaC0+dHJhbnN0YWJsZS0+QmxvY2tGZXRjaDcpOworCisJLyogc2l6ZSBvZiBjb250cm9sbGVyIHJpbmcgYnVmZmVyICovCisJd3JpdGVsKGgtPm1heF9jb21tYW5kcywgJmgtPnRyYW5zdGFibGUtPlJlcFFTaXplKTsKKwl3cml0ZWwoMSwgJmgtPnRyYW5zdGFibGUtPlJlcFFDb3VudCk7CisJd3JpdGVsKDAsICZoLT50cmFuc3RhYmxlLT5SZXBRQ3RyQWRkckxvdzMyKTsKKwl3cml0ZWwoMCwgJmgtPnRyYW5zdGFibGUtPlJlcFFDdHJBZGRySGlnaDMyKTsKKwl3cml0ZWwoaC0+cmVwbHlfcG9vbF9kaGFuZGxlLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwTG93MzIpOworCXdyaXRlbCgwLCAmaC0+dHJhbnN0YWJsZS0+UmVwUUFkZHIwSGlnaDMyKTsKKwl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQsCisJCQkmKGgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuVHJhbnNwb3J0UmVxdWVzdCkpOworCisJd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGgtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwljY2lzc193YWl0X2Zvcl9tb2RlX2NoYW5nZV9hY2soaCk7CisJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5UcmFuc3BvcnRBY3RpdmUpKTsKKwlpZiAoIShyZWdpc3Rlcl92YWx1ZSAmIENGR1RCTF9UcmFuc19QZXJmb3JtYW50KSkKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNjaXNzOiB1bmFibGUgdG8gZ2V0IGJvYXJkIGludG8iCisJCQkJCSIgcGVyZm9ybWFudCBtb2RlXG4iKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGNjaXNzX3B1dF9jb250cm9sbGVyX2ludG9fcGVyZm9ybWFudF9tb2RlKGN0bHJfaW5mb190ICpoKQoreworCV9fdTMyIHRyYW5zX3N1cHBvcnQ7CisKKwlkZXZfZGJnKCZoLT5wZGV2LT5kZXYsICJUcnlpbmcgdG8gcHV0IGJvYXJkIGludG8gUGVyZm9ybWFudCBtb2RlXG4iKTsKKwkvKiBBdHRlbXB0IHRvIHB1dCBjb250cm9sbGVyIGludG8gcGVyZm9ybWFudCBtb2RlIGlmIHN1cHBvcnRlZCAqLworCS8qIERvZXMgYm9hcmQgc3VwcG9ydCBwZXJmb3JtYW50IG1vZGU/ICovCisJdHJhbnNfc3VwcG9ydCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPlRyYW5zcG9ydFN1cHBvcnQpKTsKKwlpZiAoISh0cmFuc19zdXBwb3J0ICYgUEVSRk9STUFOVF9NT0RFKSkKKwkJcmV0dXJuOworCisJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiUGxhY2luZyBjb250cm9sbGVyIGludG8gcGVyZm9ybWFudCBtb2RlXG4iKTsKKwkvKiBQZXJmb3JtYW50IG1vZGUgZGVtYW5kcyBjb21tYW5kcyBvbiBhIDMyIGJ5dGUgYm91bmRhcnkKKwkgKiBwY2lfYWxsb2NfY29uc2lzdGVudCBhbGlnbnMgb24gcGFnZSBib3VuZGFyeXMgYWxyZWFkeS4KKwkgKiBKdXN0IG5lZWQgdG8gY2hlY2sgaWYgZGl2aXNpYmxlIGJ5IDMyCisJICovCisJaWYgKChzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIDMyKSAhPSAwKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcyAlZCAlc1xuIiwKKwkJCSJjY2lzcyBpbmZvOiBjb21tYW5kIHNpemVbIiwKKwkJCShpbnQpc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCksCisJCQkiXSBub3QgZGl2aXNpYmxlIGJ5IDMyLCBubyBwZXJmb3JtYW50IG1vZGUuLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBQZXJmb3JtYW50IG1vZGUgcmluZyBidWZmZXIgYW5kIHN1cHBvcnRpbmcgZGF0YSBzdHJ1Y3R1cmVzICovCisJaC0+cmVwbHlfcG9vbCA9IChfX3U2NCAqKXBjaV9hbGxvY19jb25zaXN0ZW50KAorCQloLT5wZGV2LCBoLT5tYXhfY29tbWFuZHMgKiBzaXplb2YoX191NjQpLAorCQkmKGgtPnJlcGx5X3Bvb2xfZGhhbmRsZSkpOworCisJLyogTmVlZCBhIGJsb2NrIGZldGNoIHRhYmxlIGZvciBwZXJmb3JtYW50IG1vZGUgKi8KKwloLT5ibG9ja0ZldGNoVGFibGUgPSBrbWFsbG9jKCgoaC0+bWF4c2dlbnRyaWVzKzEpICoKKwkJc2l6ZW9mKF9fdTMyKSksIEdGUF9LRVJORUwpOworCisJaWYgKChoLT5yZXBseV9wb29sID09IE5VTEwpIHx8IChoLT5ibG9ja0ZldGNoVGFibGUgPT0gTlVMTCkpCisJCWdvdG8gY2xlYW5fdXA7CisKKwljY2lzc19lbnRlcl9wZXJmb3JtYW50X21vZGUoaCk7CisKKwkvKiBDaGFuZ2UgdGhlIGFjY2VzcyBtZXRob2RzIHRvIHRoZSBwZXJmb3JtYW50IGFjY2VzcyBtZXRob2RzICovCisJaC0+YWNjZXNzID0gU0E1X3BlcmZvcm1hbnRfYWNjZXNzOworCWgtPnRyYW5zTWV0aG9kID0gQ0ZHVEJMX1RyYW5zX1BlcmZvcm1hbnQ7CisKKwlyZXR1cm47CitjbGVhbl91cDoKKwlrZnJlZShoLT5ibG9ja0ZldGNoVGFibGUpOworCWlmIChoLT5yZXBseV9wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQkJaC0+bWF4X2NvbW1hbmRzICogc2l6ZW9mKF9fdTY0KSwKKwkJCQloLT5yZXBseV9wb29sLAorCQkJCWgtPnJlcGx5X3Bvb2xfZGhhbmRsZSk7CisJcmV0dXJuOworCit9IC8qIGNjaXNzX3B1dF9jb250cm9sbGVyX2ludG9fcGVyZm9ybWFudF9tb2RlICovCisKIC8qIElmIE1TSS9NU0ktWCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCB3ZSB3aWxsIHRyeSB0byBlbmFibGUgaXQgb24KICAqIGNvbnRyb2xsZXJzIHRoYXQgYXJlIGNhcGFibGUuIElmIG5vdCwgd2UgdXNlIElPLUFQSUMgbW9kZS4KICAqLwogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgY2Npc3NfaW50ZXJydXB0X21vZGUoY3Rscl9pbmZvX3QgKmMsCi0JCQkJCSAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBfX3UzMiBib2FyZF9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjY2lzc19pbnRlcnJ1cHRfbW9kZShjdGxyX2luZm9fdCAqaCkKIHsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWludCBlcnI7CkBAIC0zNjQ0LDI2OCArMzkzNiwyODMgQEAKIAl9OwogCiAJLyogU29tZSBib2FyZHMgYWR2ZXJ0aXNlIE1TSSBidXQgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgaXQgKi8KLQlpZiAoKGJvYXJkX2lkID09IDB4NDA3MDBFMTEpIHx8Ci0JICAgIChib2FyZF9pZCA9PSAweDQwODAwRTExKSB8fAotCSAgICAoYm9hcmRfaWQgPT0gMHg0MDgyMEUxMSkgfHwgKGJvYXJkX2lkID09IDB4NDA4MzBFMTEpKQorCWlmICgoaC0+Ym9hcmRfaWQgPT0gMHg0MDcwMEUxMSkgfHwgKGgtPmJvYXJkX2lkID09IDB4NDA4MDBFMTEpIHx8CisJICAgIChoLT5ib2FyZF9pZCA9PSAweDQwODIwRTExKSB8fCAoaC0+Ym9hcmRfaWQgPT0gMHg0MDgzMEUxMSkpCiAJCWdvdG8gZGVmYXVsdF9pbnRfbW9kZTsKIAotCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKLQkJZXJyID0gcGNpX2VuYWJsZV9tc2l4KHBkZXYsIGNjaXNzX21zaXhfZW50cmllcywgNCk7CisJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkoaC0+cGRldiwgUENJX0NBUF9JRF9NU0lYKSkgeworCQllcnIgPSBwY2lfZW5hYmxlX21zaXgoaC0+cGRldiwgY2Npc3NfbXNpeF9lbnRyaWVzLCA0KTsKIAkJaWYgKCFlcnIpIHsKLQkJCWMtPmludHJbMF0gPSBjY2lzc19tc2l4X2VudHJpZXNbMF0udmVjdG9yOwotCQkJYy0+aW50clsxXSA9IGNjaXNzX21zaXhfZW50cmllc1sxXS52ZWN0b3I7Ci0JCQljLT5pbnRyWzJdID0gY2Npc3NfbXNpeF9lbnRyaWVzWzJdLnZlY3RvcjsKLQkJCWMtPmludHJbM10gPSBjY2lzc19tc2l4X2VudHJpZXNbM10udmVjdG9yOwotCQkJYy0+bXNpeF92ZWN0b3IgPSAxOworCQkJaC0+aW50clswXSA9IGNjaXNzX21zaXhfZW50cmllc1swXS52ZWN0b3I7CisJCQloLT5pbnRyWzFdID0gY2Npc3NfbXNpeF9lbnRyaWVzWzFdLnZlY3RvcjsKKwkJCWgtPmludHJbMl0gPSBjY2lzc19tc2l4X2VudHJpZXNbMl0udmVjdG9yOworCQkJaC0+aW50clszXSA9IGNjaXNzX21zaXhfZW50cmllc1szXS52ZWN0b3I7CisJCQloLT5tc2l4X3ZlY3RvciA9IDE7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKGVyciA+IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBvbmx5ICVkIE1TSS1YIHZlY3RvcnMgIgotCQkJICAgICAgICJhdmFpbGFibGVcbiIsIGVycik7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJvbmx5ICVkIE1TSS1YIHZlY3RvcnMgYXZhaWxhYmxlXG4iLCBlcnIpOwogCQkJZ290byBkZWZhdWx0X2ludF9tb2RlOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IE1TSS1YIGluaXQgZmFpbGVkICVkXG4iLAotCQkJICAgICAgIGVycik7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJNU0ktWCBpbml0IGZhaWxlZCAlZFxuIiwgZXJyKTsKIAkJCWdvdG8gZGVmYXVsdF9pbnRfbW9kZTsKIAkJfQogCX0KLQlpZiAocGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX01TSSkpIHsKLQkJaWYgKCFwY2lfZW5hYmxlX21zaShwZGV2KSkgewotCQkJYy0+bXNpX3ZlY3RvciA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogTVNJIGluaXQgZmFpbGVkXG4iKTsKLQkJfQorCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KGgtPnBkZXYsIFBDSV9DQVBfSURfTVNJKSkgeworCQlpZiAoIXBjaV9lbmFibGVfbXNpKGgtPnBkZXYpKQorCQkJaC0+bXNpX3ZlY3RvciA9IDE7CisJCWVsc2UKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJNU0kgaW5pdCBmYWlsZWRcbiIpOwogCX0KIGRlZmF1bHRfaW50X21vZGU6CiAjZW5kaWYJCQkJLyogQ09ORklHX1BDSV9NU0kgKi8KIAkvKiBpZiB3ZSBnZXQgaGVyZSB3ZSdyZSBnb2luZyB0byB1c2UgdGhlIGRlZmF1bHQgaW50ZXJydXB0IG1vZGUgKi8KLQljLT5pbnRyW1NJTVBMRV9NT0RFX0lOVF0gPSBwZGV2LT5pcnE7CisJaC0+aW50cltQRVJGX01PREVfSU5UXSA9IGgtPnBkZXYtPmlycTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGNjaXNzX3BjaV9pbml0KGN0bHJfaW5mb190ICpjLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNjaXNzX2xvb2t1cF9ib2FyZF9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICpib2FyZF9pZCkKIHsKLQl1c2hvcnQgc3Vic3lzdGVtX3ZlbmRvcl9pZCwgc3Vic3lzdGVtX2RldmljZV9pZCwgY29tbWFuZDsKLQlfX3UzMiBib2FyZF9pZCwgc2NyYXRjaHBhZCA9IDA7Ci0JX191NjQgY2ZnX29mZnNldDsKLQlfX3UzMiBjZmdfYmFzZV9hZGRyOwotCV9fdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7Ci0JaW50IGksIHByb2RfaW5kZXgsIGVycjsKKwlpbnQgaTsKKwl1MzIgc3Vic3lzdGVtX3ZlbmRvcl9pZCwgc3Vic3lzdGVtX2RldmljZV9pZDsKIAogCXN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOwogCXN1YnN5c3RlbV9kZXZpY2VfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCWJvYXJkX2lkID0gKCgoX191MzIpIChzdWJzeXN0ZW1fZGV2aWNlX2lkIDw8IDE2KSAmIDB4ZmZmZjAwMDApIHwKLQkJICAgIHN1YnN5c3RlbV92ZW5kb3JfaWQpOworCSpib2FyZF9pZCA9ICgoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CisJCQlzdWJzeXN0ZW1fdmVuZG9yX2lkOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZHVjdHMpOyBpKyspIHsKIAkJLyogU3RhbmQgYXNpZGUgZm9yIGhwc2EgZHJpdmVyIG9uIHJlcXVlc3QgKi8KIAkJaWYgKGNjaXNzX2FsbG93X2hwc2EgJiYgcHJvZHVjdHNbaV0uYm9hcmRfaWQgPT0gSFBTQV9CT1VOREFSWSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlpZiAoYm9hcmRfaWQgPT0gcHJvZHVjdHNbaV0uYm9hcmRfaWQpCi0JCQlicmVhazsKKwkJaWYgKCpib2FyZF9pZCA9PSBwcm9kdWN0c1tpXS5ib2FyZF9pZCkKKwkJCXJldHVybiBpOwogCX0KLQlwcm9kX2luZGV4ID0gaTsKLQlpZiAocHJvZF9pbmRleCA9PSBBUlJBWV9TSVpFKHByb2R1Y3RzKSkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJInVucmVjb2duaXplZCBib2FyZCBJRDogMHglMDhseCwgaWdub3JpbmcuXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcpIGJvYXJkX2lkKTsKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAidW5yZWNvZ25pemVkIGJvYXJkIElEOiAweCUwOHgsIGlnbm9yaW5nLlxuIiwKKwkJKmJvYXJkX2lkKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBib29sIGNjaXNzX2JvYXJkX2Rpc2FibGVkKGN0bHJfaW5mb190ICpoKQoreworCXUxNiBjb21tYW5kOworCisJKHZvaWQpIHBjaV9yZWFkX2NvbmZpZ193b3JkKGgtPnBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJcmV0dXJuICgoY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPT0gMCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNjaXNzX3BjaV9maW5kX21lbW9yeV9CQVIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdW5zaWduZWQgbG9uZyAqbWVtb3J5X2JhcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCQkvKiBhZGRyZXNzaW5nIG1vZGUgYml0cyBhbHJlYWR5IHJlbW92ZWQgKi8KKwkJCSptZW1vcnlfYmFyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAibWVtb3J5IEJBUiA9ICVseFxuIiwKKwkJCQkqbWVtb3J5X2Jhcik7CisJCQlyZXR1cm4gMDsKKwkJfQorCWRldl93YXJuKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgQkFSIGZvdW5kXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2Npc3Nfd2FpdF9mb3JfYm9hcmRfcmVhZHkoY3Rscl9pbmZvX3QgKmgpCit7CisJaW50IGk7CisJdTMyIHNjcmF0Y2hwYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0NJU1NfQk9BUkRfUkVBRFlfSVRFUkFUSU9OUzsgaSsrKSB7CisJCXNjcmF0Y2hwYWQgPSByZWFkbChoLT52YWRkciArIFNBNV9TQ1JBVENIUEFEX09GRlNFVCk7CisJCWlmIChzY3JhdGNocGFkID09IENDSVNTX0ZJUk1XQVJFX1JFQURZKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcChDQ0lTU19CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTKTsKKwl9CisJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImJvYXJkIG5vdCByZWFkeSwgdGltZWQgb3V0LlxuIik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNjaXNzX2ZpbmRfY2ZnX2FkZHJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiAqY2ZnX2Jhc2VfYWRkciwgdTY0ICpjZmdfYmFzZV9hZGRyX2luZGV4LAorCXU2NCAqY2ZnX29mZnNldCkKK3sKKwkqY2ZnX2Jhc2VfYWRkciA9IHJlYWRsKHZhZGRyICsgU0E1X0NUQ0ZHX09GRlNFVCk7CisJKmNmZ19vZmZzZXQgPSByZWFkbCh2YWRkciArIFNBNV9DVE1FTV9PRkZTRVQpOworCSpjZmdfYmFzZV9hZGRyICY9ICh1MzIpIDB4MDAwMGZmZmY7CisJKmNmZ19iYXNlX2FkZHJfaW5kZXggPSBmaW5kX1BDSV9CQVJfaW5kZXgocGRldiwgKmNmZ19iYXNlX2FkZHIpOworCWlmICgqY2ZnX2Jhc2VfYWRkcl9pbmRleCA9PSAtMSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY2Fubm90IGZpbmQgY2ZnX2Jhc2VfYWRkcl9pbmRleCwgIgorCQkJIipjZmdfYmFzZV9hZGRyID0gMHglMDh4XG4iLCAqY2ZnX2Jhc2VfYWRkcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCS8qIGNoZWNrIHRvIHNlZSBpZiBjb250cm9sbGVyIGhhcyBiZWVuIGRpc2FibGVkICovCi0JLyogQkVGT1JFIHRyeWluZyB0byBlbmFibGUgaXQgKi8KLQkodm9pZClwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOwotCWlmICghKGNvbW1hbmQgJiAweDAyKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY2Npc3M6IGNvbnRyb2xsZXIgYXBwZWFycyB0byBiZSBkaXNhYmxlZFxuIik7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBjY2lzc19maW5kX2NmZ3RhYmxlcyhjdGxyX2luZm9fdCAqaCkKK3sKKwl1NjQgY2ZnX29mZnNldDsKKwl1MzIgY2ZnX2Jhc2VfYWRkcjsKKwl1NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKKwl1MzIgdHJhbnNfb2Zmc2V0OworCWludCByYzsKKworCXJjID0gY2Npc3NfZmluZF9jZmdfYWRkcnMoaC0+cGRldiwgaC0+dmFkZHIsICZjZmdfYmFzZV9hZGRyLAorCQkmY2ZnX2Jhc2VfYWRkcl9pbmRleCwgJmNmZ19vZmZzZXQpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWgtPmNmZ3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQoaC0+cGRldiwKKwkJY2ZnX2Jhc2VfYWRkcl9pbmRleCkgKyBjZmdfb2Zmc2V0LCBzaXplb2YoaC0+Y2ZndGFibGUpKTsKKwlpZiAoIWgtPmNmZ3RhYmxlKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBGaW5kIHBlcmZvcm1hbnQgbW9kZSB0YWJsZS4gKi8KKwl0cmFuc19vZmZzZXQgPSByZWFkbCgmaC0+Y2ZndGFibGUtPlRyYW5zTWV0aG9kT2Zmc2V0KTsKKwloLT50cmFuc3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQoaC0+cGRldiwKKwkJCQljZmdfYmFzZV9hZGRyX2luZGV4KStjZmdfb2Zmc2V0K3RyYW5zX29mZnNldCwKKwkJCQlzaXplb2YoKmgtPnRyYW5zdGFibGUpKTsKKwlpZiAoIWgtPnRyYW5zdGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgY2Npc3NfZ2V0X21heF9wZXJmX21vZGVfY21kcyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCWgtPm1heF9jb21tYW5kcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFBlcmZvcm1hbnRNb2RlQ29tbWFuZHMpKTsKKwlpZiAoaC0+bWF4X2NvbW1hbmRzIDwgMTYpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgcmVwb3J0cyAiCisJCQkibWF4IHN1cHBvcnRlZCBjb21tYW5kcyBvZiAlZCwgYW4gb2J2aW91cyBsaWUuICIKKwkJCSJVc2luZyAxNi4gIEVuc3VyZSB0aGF0IGZpcm13YXJlIGlzIHVwIHRvIGRhdGUuXG4iLAorCQkJaC0+bWF4X2NvbW1hbmRzKTsKKwkJaC0+bWF4X2NvbW1hbmRzID0gMTY7CisJfQorfQorCisvKiBJbnRlcnJvZ2F0ZSB0aGUgaGFyZHdhcmUgZm9yIHNvbWUgbGltaXRzOgorICogbWF4IGNvbW1hbmRzLCBtYXggU0cgZWxlbWVudHMgd2l0aG91dCBjaGFpbmluZywgYW5kIHdpdGggY2hhaW5pbmcsCisgKiBTRyBjaGFpbiBibG9jayBzaXplLCBldGMuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBjY2lzc19maW5kX2JvYXJkX3BhcmFtcyhjdGxyX2luZm9fdCAqaCkKK3sKKwljY2lzc19nZXRfbWF4X3BlcmZfbW9kZV9jbWRzKGgpOworCWgtPm5yX2NtZHMgPSBoLT5tYXhfY29tbWFuZHMgLSA0OyAvKiBBbGxvdyByb29tIGZvciBzb21lIGlvY3RscyAqLworCWgtPm1heHNnZW50cmllcyA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPk1heFNHRWxlbWVudHMpKTsKKwkvKgorCSAqIExpbWl0IGluLWNvbW1hbmQgcy9nIGVsZW1lbnRzIHRvIDMyIHNhdmUgZG1hJ2FibGUgbWVtb3J5LgorCSAqIEhvd3ZldmVyIHNwZWMgc2F5cyBpZiAwLCB1c2UgMzEKKwkgKi8KKwloLT5tYXhfY21kX3NnZW50cmllcyA9IDMxOworCWlmIChoLT5tYXhzZ2VudHJpZXMgPiA1MTIpIHsKKwkJaC0+bWF4X2NtZF9zZ2VudHJpZXMgPSAzMjsKKwkJaC0+Y2hhaW5zaXplID0gaC0+bWF4c2dlbnRyaWVzIC0gaC0+bWF4X2NtZF9zZ2VudHJpZXMgKyAxOworCQloLT5tYXhzZ2VudHJpZXMtLTsgLyogc2F2ZSBvbmUgZm9yIGNoYWluIHBvaW50ZXIgKi8KKwl9IGVsc2UgeworCQloLT5tYXhzZ2VudHJpZXMgPSAzMTsgLyogZGVmYXVsdCB0byB0cmFkaXRpb25hbCB2YWx1ZXMgKi8KKwkJaC0+Y2hhaW5zaXplID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBDSVNTX3NpZ25hdHVyZV9wcmVzZW50KGN0bHJfaW5mb190ICpoKQoreworCWlmICgocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMF0pICE9ICdDJykgfHwKKwkgICAgKHJlYWRiKCZoLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzFdKSAhPSAnSScpIHx8CisJICAgIChyZWFkYigmaC0+Y2ZndGFibGUtPlNpZ25hdHVyZVsyXSkgIT0gJ1MnKSB8fAorCSAgICAocmVhZGIoJmgtPmNmZ3RhYmxlLT5TaWduYXR1cmVbM10pICE9ICdTJykpIHsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm5vdCBhIHZhbGlkIENJU1MgY29uZmlnIHRhYmxlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogTmVlZCB0byBlbmFibGUgcHJlZmV0Y2ggaW4gdGhlIFNDU0kgY29yZSBmb3IgNjQwMCBpbiB4ODYgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjY2lzc19lbmFibGVfc2NzaV9wcmVmZXRjaChjdGxyX2luZm9fdCAqaCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2CisJdTMyIHByZWZldGNoOworCisJcHJlZmV0Y2ggPSByZWFkbCgmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CisJcHJlZmV0Y2ggfD0gMHgxMDA7CisJd3JpdGVsKHByZWZldGNoLCAmKGgtPmNmZ3RhYmxlLT5TQ1NJX1ByZWZldGNoKSk7CisjZW5kaWYKK30KKworLyogRGlzYWJsZSBETUEgcHJlZmV0Y2ggZm9yIHRoZSBQNjAwLiAgT3RoZXJ3aXNlIGFuIEFTSUMgYnVnIG1heSByZXN1bHQKKyAqIGluIGEgcHJlZmV0Y2ggYmV5b25kIHBoeXNpY2FsIG1lbW9yeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNjaXNzX3A2MDBfZG1hX3ByZWZldGNoX3F1aXJrKGN0bHJfaW5mb190ICpoKQoreworCXUzMiBkbWFfcHJlZmV0Y2g7CisJX191MzIgZG1hX3JlZmV0Y2g7CisKKwlpZiAoaC0+Ym9hcmRfaWQgIT0gMHgzMjI1MTAzQykKKwkJcmV0dXJuOworCWRtYV9wcmVmZXRjaCA9IHJlYWRsKGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKKwlkbWFfcHJlZmV0Y2ggfD0gMHg4MDAwOworCXdyaXRlbChkbWFfcHJlZmV0Y2gsIGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoaC0+cGRldiwgUENJX0NPTU1BTkRfUEFSSVRZLCAmZG1hX3JlZmV0Y2gpOworCWRtYV9yZWZldGNoIHw9IDB4MTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGgtPnBkZXYsIFBDSV9DT01NQU5EX1BBUklUWSwgZG1hX3JlZmV0Y2gpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjY2lzc19wY2lfaW5pdChjdGxyX2luZm9fdCAqaCkKK3sKKwlpbnQgcHJvZF9pbmRleCwgZXJyOworCisJcHJvZF9pbmRleCA9IGNjaXNzX2xvb2t1cF9ib2FyZF9pZChoLT5wZGV2LCAmaC0+Ym9hcmRfaWQpOworCWlmIChwcm9kX2luZGV4IDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaC0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbcHJvZF9pbmRleF0ucHJvZHVjdF9uYW1lOworCWgtPmFjY2VzcyA9ICoocHJvZHVjdHNbcHJvZF9pbmRleF0uYWNjZXNzKTsKKworCWlmIChjY2lzc19ib2FyZF9kaXNhYmxlZChoKSkgeworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY29udHJvbGxlciBhcHBlYXJzIHRvIGJlIGRpc2FibGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UoaC0+cGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBVbmFibGUgdG8gRW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiVW5hYmxlIHRvIEVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJjY2lzcyIpOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoaC0+cGRldiwgImNjaXNzIik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsICIKLQkJICAgICAgICJhYm9ydGluZ1xuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0jaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoImNvbW1hbmQgPSAleFxuIiwgY29tbWFuZCk7Ci0JcHJpbnRrKCJpcnEgPSAleFxuIiwgcGRldi0+aXJxKTsKLQlwcmludGsoImJvYXJkX2lkID0gJXhcbiIsIGJvYXJkX2lkKTsKLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImlycSA9ICV4XG4iLCBoLT5wZGV2LT5pcnEpOworCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgImJvYXJkX2lkID0gJXhcbiIsIGgtPmJvYXJkX2lkKTsKIAogLyogSWYgdGhlIGtlcm5lbCBzdXBwb3J0cyBNU0kvTVNJLVggd2Ugd2lsbCB0cnkgdG8gZW5hYmxlIHRoYXQgZnVuY3Rpb25hbGl0eSwKICAqIGVsc2Ugd2UgdXNlIHRoZSBJTy1BUElDIGludGVycnVwdCBhc3NpZ25lZCB0byB1cyBieSBzeXN0ZW0gUk9NLgogICovCi0JY2Npc3NfaW50ZXJydXB0X21vZGUoYywgcGRldiwgYm9hcmRfaWQpOwotCi0JLyogZmluZCB0aGUgbWVtb3J5IEJBUiAqLwotCWZvciAoaSA9IDA7IGkgPCBERVZJQ0VfQ09VTlRfUkVTT1VSQ0U7IGkrKykgewotCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICYgSU9SRVNPVVJDRV9NRU0pCi0JCQlicmVhazsKKwljY2lzc19pbnRlcnJ1cHRfbW9kZShoKTsKKwllcnIgPSBjY2lzc19wY2lfZmluZF9tZW1vcnlfQkFSKGgtPnBkZXYsICZoLT5wYWRkcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOworCWgtPnZhZGRyID0gcmVtYXBfcGNpX21lbShoLT5wYWRkciwgMHgyNTApOworCWlmICghaC0+dmFkZHIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KLQlpZiAoaSA9PSBERVZJQ0VfQ09VTlRfUkVTT1VSQ0UpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IE5vIG1lbW9yeSBCQVIgZm91bmRcbiIpOworCWVyciA9IGNjaXNzX3dhaXRfZm9yX2JvYXJkX3JlYWR5KGgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKKwllcnIgPSBjY2lzc19maW5kX2NmZ3RhYmxlcyhoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJcHJpbnRfY2ZnX3RhYmxlKGgpOworCWNjaXNzX2ZpbmRfYm9hcmRfcGFyYW1zKGgpOworCisJaWYgKCFDSVNTX3NpZ25hdHVyZV9wcmVzZW50KGgpKSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9Ci0KLQljLT5wYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsgLyogYWRkcmVzc2luZyBtb2RlIGJpdHMKLQkJCQkJCSAqIGFscmVhZHkgcmVtb3ZlZAotCQkJCQkJICovCi0KLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50aygiYWRkcmVzcyAwID0gJWx4XG4iLCBjLT5wYWRkcik7Ci0jZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KLQljLT52YWRkciA9IHJlbWFwX3BjaV9tZW0oYy0+cGFkZHIsIDB4MjUwKTsKLQotCS8qIFdhaXQgZm9yIHRoZSBib2FyZCB0byBiZWNvbWUgcmVhZHkuICAoUENJIGhvdHBsdWcgbmVlZHMgdGhpcy4pCi0JICogV2UgcG9sbCBmb3IgdXAgdG8gMTIwIHNlY3MsIG9uY2UgcGVyIDEwMG1zLiAqLwotCWZvciAoaSA9IDA7IGkgPCAxMjAwOyBpKyspIHsKLQkJc2NyYXRjaHBhZCA9IHJlYWRsKGMtPnZhZGRyICsgU0E1X1NDUkFUQ0hQQURfT0ZGU0VUKTsKLQkJaWYgKHNjcmF0Y2hwYWQgPT0gQ0NJU1NfRklSTVdBUkVfUkVBRFkpCi0JCQlicmVhazsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDEwMCkpOwkvKiB3YWl0IDEwMG1zICovCi0JfQotCWlmIChzY3JhdGNocGFkICE9IENDSVNTX0ZJUk1XQVJFX1JFQURZKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBCb2FyZCBub3QgcmVhZHkuICBUaW1lZCBvdXQuXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwotCX0KLQotCS8qIGdldCB0aGUgYWRkcmVzcyBpbmRleCBudW1iZXIgKi8KLQljZmdfYmFzZV9hZGRyID0gcmVhZGwoYy0+dmFkZHIgKyBTQTVfQ1RDRkdfT0ZGU0VUKTsKLQljZmdfYmFzZV9hZGRyICY9IChfX3UzMikgMHgwMDAwZmZmZjsKLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50aygiY2ZnIGJhc2UgYWRkcmVzcyA9ICV4XG4iLCBjZmdfYmFzZV9hZGRyKTsKLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwotCWNmZ19iYXNlX2FkZHJfaW5kZXggPSBmaW5kX1BDSV9CQVJfaW5kZXgocGRldiwgY2ZnX2Jhc2VfYWRkcik7Ci0jaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoImNmZyBiYXNlIGFkZHJlc3MgaW5kZXggPSAlbGx4XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWNmZ19iYXNlX2FkZHJfaW5kZXgpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0JaWYgKGNmZ19iYXNlX2FkZHJfaW5kZXggPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IENhbm5vdCBmaW5kIGNmZ19iYXNlX2FkZHJfaW5kZXhcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JfQotCi0JY2ZnX29mZnNldCA9IHJlYWRsKGMtPnZhZGRyICsgU0E1X0NUTUVNX09GRlNFVCk7Ci0jaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoImNmZyBvZmZzZXQgPSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWNmZ19vZmZzZXQpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0JYy0+Y2ZndGFibGUgPSByZW1hcF9wY2lfbWVtKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LAotCQkJCQkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsKLQkJCQkgICAgY2ZnX29mZnNldCwgc2l6ZW9mKENmZ1RhYmxlX3N0cnVjdCkpOwotCWMtPmJvYXJkX2lkID0gYm9hcmRfaWQ7Ci0KLSNpZmRlZiBDQ0lTU19ERUJVRwotCXByaW50X2NmZ190YWJsZShjLT5jZmd0YWJsZSk7Ci0jZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KLQotCS8qIFNvbWUgY29udHJvbGxlcnMgc3VwcG9ydCBaZXJvIE1lbW9yeSBSYWlkIChaTVIpLgotCSAqIFdoZW4gY29uZmlndXJlZCBpbiBaTVIgbW9kZSB0aGUgbnVtYmVyIG9mIHN1cHBvcnRlZAotCSAqIGNvbW1hbmRzIGRyb3BzIHRvIDY0LiBTbyBpbnN0ZWFkIG9mIGp1c3Qgc2V0dGluZyBhbgotCSAqIGFyYml0cmFyeSB2YWx1ZSB3ZSBtYWtlIHRoZSBkcml2ZXIgYSBsaXR0bGUgc21hcnRlci4KLQkgKiBXZSByZWFkIHRoZSBjb25maWcgdGFibGUgdG8gdGVsbCB1cyBob3cgbWFueSBjb21tYW5kcwotCSAqIGFyZSBzdXBwb3J0ZWQgb24gdGhlIGNvbnRyb2xsZXIgdGhlbiBzdWJ0cmFjdCA0IHRvCi0JICogbGVhdmUgYSBsaXR0bGUgcm9vbSBmb3IgaW9jdGwgY2FsbHMuCi0JICovCi0JYy0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihjLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCWMtPm1heHNnZW50cmllcyA9IHJlYWRsKCYoYy0+Y2ZndGFibGUtPk1heFNHRWxlbWVudHMpKTsKLQotCS8qCi0JICogTGltaXQgbmF0aXZlIGNvbW1hbmQgdG8gMzIgcy9nIGVsZW1lbnRzIHRvIHNhdmUgZG1hJ2FibGUgbWVtb3J5LgotCSAqIEhvd3ZldmVyIHNwZWMgc2F5cyBpZiAwLCB1c2UgMzEKLQkgKi8KLQotCWMtPm1heF9jbWRfc2dlbnRyaWVzID0gMzE7Ci0JaWYgKGMtPm1heHNnZW50cmllcyA+IDUxMikgewotCQljLT5tYXhfY21kX3NnZW50cmllcyA9IDMyOwotCQljLT5jaGFpbnNpemUgPSBjLT5tYXhzZ2VudHJpZXMgLSBjLT5tYXhfY21kX3NnZW50cmllcyArIDE7Ci0JCWMtPm1heHNnZW50cmllcyAtPSAxOyAgIC8qIGFjY291bnQgZm9yIGNoYWluIHBvaW50ZXIgKi8KLQl9IGVsc2UgewotCQljLT5tYXhzZ2VudHJpZXMgPSAzMTsgICAvKiBEZWZhdWx0IHRvIHRyYWRpdGlvbmFsIHZhbHVlICovCi0JCWMtPmNoYWluc2l6ZSA9IDA7ICAgICAgIC8qIHRyYWRpdGlvbmFsICovCi0JfQotCi0JYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbcHJvZF9pbmRleF0ucHJvZHVjdF9uYW1lOwotCWMtPmFjY2VzcyA9ICoocHJvZHVjdHNbcHJvZF9pbmRleF0uYWNjZXNzKTsKLQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQlpZiAoKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzBdKSAhPSAnQycpIHx8Ci0JICAgIChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVsxXSkgIT0gJ0knKSB8fAotCSAgICAocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMl0pICE9ICdTJykgfHwKLQkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzNdKSAhPSAnUycpKSB7Ci0JCXByaW50aygiRG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgQ0lTUyBjb25maWcgdGFibGVcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7Ci0JfQotI2lmZGVmIENPTkZJR19YODYKLQl7Ci0JCS8qIE5lZWQgdG8gZW5hYmxlIHByZWZldGNoIGluIHRoZSBTQ1NJIGNvcmUgZm9yIDY0MDAgaW4geDg2ICovCi0JCV9fdTMyIHByZWZldGNoOwotCQlwcmVmZXRjaCA9IHJlYWRsKCYoYy0+Y2ZndGFibGUtPlNDU0lfUHJlZmV0Y2gpKTsKLQkJcHJlZmV0Y2ggfD0gMHgxMDA7Ci0JCXdyaXRlbChwcmVmZXRjaCwgJihjLT5jZmd0YWJsZS0+U0NTSV9QcmVmZXRjaCkpOwotCX0KLSNlbmRpZgotCi0JLyogRGlzYWJsaW5nIERNQSBwcmVmZXRjaCBhbmQgcmVmZXRjaCBmb3IgdGhlIFA2MDAuCi0JICogQW4gQVNJQyBidWcgbWF5IHJlc3VsdCBpbiBhY2Nlc3NlcyB0byBpbnZhbGlkIG1lbW9yeSBhZGRyZXNzZXMuCi0JICogV2UndmUgZGlzYWJsZWQgcHJlZmV0Y2ggZm9yIHNvbWUgdGltZSBub3cuIFRlc3Rpbmcgd2l0aCBYRU4KLQkgKiBrZXJuZWxzIHJldmVhbGVkIGEgYnVnIGluIHRoZSByZWZldGNoIGlmIGRvbTAgcmVzaWRlcyBvbiBhIFA2MDAuCi0JICovCi0JaWYoYm9hcmRfaWQgPT0gMHgzMjI1MTAzQykgewotCQlfX3UzMiBkbWFfcHJlZmV0Y2g7Ci0JCV9fdTMyIGRtYV9yZWZldGNoOwotCQlkbWFfcHJlZmV0Y2ggPSByZWFkbChjLT52YWRkciArIEkyT19ETUExX0NGRyk7Ci0JCWRtYV9wcmVmZXRjaCB8PSAweDgwMDA7Ci0JCXdyaXRlbChkbWFfcHJlZmV0Y2gsIGMtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9DT01NQU5EX1BBUklUWSwgJmRtYV9yZWZldGNoKTsKLQkJZG1hX3JlZmV0Y2ggfD0gMHgxOwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIFBDSV9DT01NQU5EX1BBUklUWSwgZG1hX3JlZmV0Y2gpOwotCX0KLQotI2lmZGVmIENDSVNTX0RFQlVHCi0JcHJpbnRrKCJUcnlpbmcgdG8gcHV0IGJvYXJkIGludG8gU2ltcGxlIG1vZGVcbiIpOwotI2VuZGlmCQkJCS8qIENDSVNTX0RFQlVHICovCi0JYy0+bWF4X2NvbW1hbmRzID0gcmVhZGwoJihjLT5jZmd0YWJsZS0+Q21kc091dE1heCkpOwotCS8qIFVwZGF0ZSB0aGUgZmllbGQsIGFuZCB0aGVuIHJpbmcgdGhlIGRvb3JiZWxsICovCi0Jd3JpdGVsKENGR1RCTF9UcmFuc19TaW1wbGUsICYoYy0+Y2ZndGFibGUtPkhvc3RXcml0ZS5UcmFuc3BvcnRSZXF1ZXN0KSk7Ci0Jd3JpdGVsKENGR1RCTF9DaGFuZ2VSZXEsIGMtPnZhZGRyICsgU0E1X0RPT1JCRUxMKTsKLQotCS8qIHVuZGVyIGNlcnRhaW4gdmVyeSByYXJlIGNvbmRpdGlvbnMsIHRoaXMgY2FuIHRha2UgYXdoaWxlLgotCSAqIChlLmcuOiBob3QgcmVwbGFjZSBhIGZhaWxlZCAxNDRHQiBkcml2ZSBpbiBhIFJBSUQgNSBzZXQgcmlnaHQKLQkgKiBhcyB3ZSBlbnRlciB0aGlzIGNvZGUuKSAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09ORklHX1dBSVQ7IGkrKykgewotCQlpZiAoIShyZWFkbChjLT52YWRkciArIFNBNV9ET09SQkVMTCkgJiBDRkdUQkxfQ2hhbmdlUmVxKSkKLQkJCWJyZWFrOwotCQkvKiBkZWxheSBhbmQgdHJ5IGFnYWluICovCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxKSk7Ci0JfQotCi0jaWZkZWYgQ0NJU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiSSBjb3VudGVyIGdvdCB0byAlZCAleFxuIiwgaSwKLQkgICAgICAgcmVhZGwoYy0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpKTsKLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwotI2lmZGVmIENDSVNTX0RFQlVHCi0JcHJpbnRfY2ZnX3RhYmxlKGMtPmNmZ3RhYmxlKTsKLSNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwotCi0JaWYgKCEocmVhZGwoJihjLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSkgJiBDRkdUQkxfVHJhbnNfU2ltcGxlKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogdW5hYmxlIHRvIGdldCBib2FyZCBpbnRvIgotCQkgICAgICAgIiBzaW1wbGUgbW9kZVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQl9CisJY2Npc3NfZW5hYmxlX3Njc2lfcHJlZmV0Y2goaCk7CisJY2Npc3NfcDYwMF9kbWFfcHJlZmV0Y2hfcXVpcmsoaCk7CisJY2Npc3NfcHV0X2NvbnRyb2xsZXJfaW50b19wZXJmb3JtYW50X21vZGUoaCk7CiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZV9yZXM6CkBAIC0zOTEzLDQyICs0MjIwLDQ3IEBACiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCiAJICovCi0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlpZiAoaC0+dHJhbnN0YWJsZSkKKwkJaW91bm1hcChoLT50cmFuc3RhYmxlKTsKKwlpZiAoaC0+Y2ZndGFibGUpCisJCWlvdW5tYXAoaC0+Y2ZndGFibGUpOworCWlmIChoLT52YWRkcikKKwkJaW91bm1hcChoLT52YWRkcik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhoLT5wZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBGdW5jdGlvbiB0byBmaW5kIHRoZSBmaXJzdCBmcmVlIHBvaW50ZXIgaW50byBvdXIgaGJhW10gYXJyYXkKICAqIFJldHVybnMgLTEgaWYgbm8gZnJlZSBlbnRyaWVzIGFyZSBsZWZ0LgogICovCi1zdGF0aWMgaW50IGFsbG9jX2NjaXNzX2hiYSh2b2lkKQorc3RhdGljIGludCBhbGxvY19jY2lzc19oYmEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0NUTFI7IGkrKykgewogCQlpZiAoIWhiYVtpXSkgewotCQkJY3Rscl9pbmZvX3QgKnA7CisJCQljdGxyX2luZm9fdCAqaDsKIAotCQkJcCA9IGt6YWxsb2Moc2l6ZW9mKGN0bHJfaW5mb190KSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXApCisJCQloID0ga3phbGxvYyhzaXplb2YoY3Rscl9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghaCkKIAkJCQlnb3RvIEVub21lbTsKLQkJCWhiYVtpXSA9IHA7CisJCQloYmFbaV0gPSBoOwogCQkJcmV0dXJuIGk7CiAJCX0KIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFRoaXMgZHJpdmVyIHN1cHBvcnRzIGEgbWF4aW11bSIKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiVGhpcyBkcml2ZXIgc3VwcG9ydHMgYSBtYXhpbXVtIgogCSAgICAgICAiIG9mICVkIGNvbnRyb2xsZXJzLlxuIiwgTUFYX0NUTFIpOwogCXJldHVybiAtMTsKIEVub21lbToKLQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5LlxuIik7CisJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkuXG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfaGJhKGludCBuKQorc3RhdGljIHZvaWQgZnJlZV9oYmEoY3Rscl9pbmZvX3QgKmgpCiB7Ci0JY3Rscl9pbmZvX3QgKmggPSBoYmFbbl07CiAJaW50IGk7CiAKLQloYmFbbl0gPSBOVUxMOworCWhiYVtoLT5jdGxyXSA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IGgtPmhpZ2hlc3RfbHVuICsgMTsgaSsrKQogCQlpZiAoaC0+Z2VuZGlza1tpXSAhPSBOVUxMKQogCQkJcHV0X2Rpc2soaC0+Z2VuZGlza1tpXSk7CkBAIC00MDI4LDcgKzQzNDAsOCBAQAogCS8qIHdlIGxlYWsgdGhlIERNQSBidWZmZXIgaGVyZSAuLi4gbm8gY2hvaWNlIHNpbmNlIHRoZSBjb250cm9sbGVyIGNvdWxkCiAJICAgc3RpbGwgY29tcGxldGUgdGhlIGNvbW1hbmQuICovCiAJaWYgKGkgPT0gMTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCB0aW1lZCBvdXRcbiIsCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IHRpbWVkIG91dFxuIiwKIAkJCW9wY29kZSwgdHlwZSk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KQEAgLTQwMzYsMTIgKzQzNDksMTIgQEAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGNtZF9zeiwgY21kLCBwYWRkcjY0KTsKIAogCWlmICh0YWcgJiAyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IGNvbnRyb2xsZXIgbWVzc2FnZSAlMDJ4OiUwMnggZmFpbGVkXG4iLAorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IGZhaWxlZFxuIiwKIAkJCW9wY29kZSwgdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImNjaXNzOiBjb250cm9sbGVyIG1lc3NhZ2UgJTAyeDolMDJ4IHN1Y2NlZWRlZFxuIiwKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiY29udHJvbGxlciBtZXNzYWdlICUwMng6JTAyeCBzdWNjZWVkZWRcbiIsCiAJCW9wY29kZSwgdHlwZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC00MDYyLDcgKzQzNzUsNyBAQAogCWlmIChwb3MpIHsKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKIAkJaWYgKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2Npc3M6IHJlc2V0dGluZyBNU0lcbiIpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlc2V0dGluZyBNU0lcbiIpOwogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCBjb250cm9sICYgflBDSV9NU0lfRkxBR1NfRU5BQkxFKTsKIAkJfQogCX0KQEAgLTQwNzEsNyArNDM4NCw3IEBACiAJaWYgKHBvcykgewogCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJmNvbnRyb2wpOwogCQlpZiAoY29udHJvbCAmIFBDSV9NU0lYX0ZMQUdTX0VOQUJMRSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2Npc3M6IHJlc2V0dGluZyBNU0ktWFxuIik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVzZXR0aW5nIE1TSS1YXG4iKTsKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgY29udHJvbCAmIH5QQ0lfTVNJWF9GTEFHU19FTkFCTEUpOwogCQl9CiAJfQpAQCAtNDA3OSw2OCArNDM5MiwxNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBkb2VzIGEgaGFyZCByZXNldCBvZiB0aGUgY29udHJvbGxlciB1c2luZyBQQ0kgcG93ZXIgbWFuYWdlbWVudAotICogc3RhdGVzLiAqLwotc3RhdGljIF9fZGV2aW5pdCBpbnQgY2Npc3NfaGFyZF9yZXNldF9jb250cm9sbGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCBjY2lzc19jb250cm9sbGVyX2hhcmRfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJdm9pZCAqIF9faW9tZW0gdmFkZHIsIGJvb2wgdXNlX2Rvb3JiZWxsKQogewotCXUxNiBwbWNzciwgc2F2ZWRfY29uZmlnX3NwYWNlWzMyXTsKLQlpbnQgaSwgcG9zOworCXUxNiBwbWNzcjsKKwlpbnQgcG9zOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY2Npc3M6IHVzaW5nIFBDSSBQTSB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKwlpZiAodXNlX2Rvb3JiZWxsKSB7CisJCS8qIEZvciBldmVyeXRoaW5nIGFmdGVyIHRoZSBQNjAwLCB0aGUgUENJIHBvd2VyIHN0YXRlIG1ldGhvZAorCQkgKiBvZiByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgZG9lc24ndCB3b3JrLCBzbyB3ZSBoYXZlIHRoaXMKKwkJICogb3RoZXIgd2F5IHVzaW5nIHRoZSBkb29yYmVsbCByZWdpc3Rlci4KKwkJICovCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBkb29yYmVsbCB0byByZXNldCBjb250cm9sbGVyXG4iKTsKKwkJd3JpdGVsKERPT1JCRUxMX0NUTFJfUkVTRVQsIHZhZGRyICsgU0E1X0RPT1JCRUxMKTsKKwkJbXNsZWVwKDEwMDApOworCX0gZWxzZSB7IC8qIFRyeSB0byBkbyBpdCB0aGUgUENJIHBvd2VyIHN0YXRlIHdheSAqLwogCi0JLyogVGhpcyBpcyB2ZXJ5IG5lYXJseSB0aGUgc2FtZSB0aGluZyBhcworCQkvKiBRdW90aW5nIGZyb20gdGhlIE9wZW4gQ0lTUyBTcGVjaWZpY2F0aW9uOiAiVGhlIFBvd2VyCisJCSAqIE1hbmFnZW1lbnQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKENTUikgY29udHJvbHMgdGhlIHBvd2VyCisJCSAqIHN0YXRlIG9mIHRoZSBkZXZpY2UuICBUaGUgbm9ybWFsIG9wZXJhdGluZyBzdGF0ZSBpcyBEMCwKKwkJICogQ1NSPTAwaC4gIFRoZSBzb2Z0d2FyZSBvZmYgc3RhdGUgaXMgRDMsIENTUj0wM2guICBUbyByZXNldAorCQkgKiB0aGUgY29udHJvbGxlciwgcGxhY2UgdGhlIGludGVyZmFjZSBkZXZpY2UgaW4gRDMgdGhlbiB0byBEMCwKKwkJICogdGhpcyBjYXVzZXMgYSBzZWNvbmRhcnkgUENJIHJlc2V0IHdoaWNoIHdpbGwgcmVzZXQgdGhlCisJCSAqIGNvbnRyb2xsZXIuIiAqLwogCi0JICAgcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7Ci0JICAgcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwotCSAgIHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKLQkgICBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKKwkJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKKwkJaWYgKHBvcyA9PSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImNjaXNzX2NvbnRyb2xsZXJfaGFyZF9yZXNldDogIgorCQkJCSJQQ0kgUE0gbm90IHN1cHBvcnRlZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgUENJIFBNIHRvIHJlc2V0IGNvbnRyb2xsZXJcbiIpOworCQkvKiBlbnRlciB0aGUgRDNob3QgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwkJcG1jc3IgJj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7CisJCXBtY3NyIHw9IFBDSV9EM2hvdDsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7CiAKLQkgICBidXQgd2UgY2FuJ3QgdXNlIHRoZXNlIG5pY2UgY2FubmVkIGtlcm5lbCByb3V0aW5lcyBvbgotCSAgIGtleGVjLCBiZWNhdXNlIHRoZXkgYWxzbyBjaGVjayB0aGUgTVNJL01TSS1YIHN0YXRlIGluIFBDSQotCSAgIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGRvIHRoZSB3cm9uZyB0aGluZyB3aGVuIGl0IGlzCi0JICAgc2V0L2NsZWFyZWQuICBBbHNvLCB0aGUgcGNpX3NhdmUvcmVzdG9yZV9zdGF0ZSBmdW5jdGlvbnMKLQkgICB2aW9sYXRlIHRoZSBvcmRlcmluZyByZXF1aXJlbWVudHMgZm9yIHJlc3RvcmluZyB0aGUKLQkgICBjb25maWd1cmF0aW9uIHNwYWNlIGZyb20gdGhlIENDSVNTIGRvY3VtZW50IChzZWUgdGhlCi0JICAgY29tbWVudCBiZWxvdykuICBTbyB3ZSByb2xsIG91ciBvd24gLi4uLiAqLworCQltc2xlZXAoNTAwKTsKKworCQkvKiBlbnRlciB0aGUgRDAgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSAqLworCQlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKKwkJcG1jc3IgfD0gUENJX0QwOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKKworCQltc2xlZXAoNTAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgZG9lcyBhIGhhcmQgcmVzZXQgb2YgdGhlIGNvbnRyb2xsZXIgdXNpbmcgUENJIHBvd2VyIG1hbmFnZW1lbnQKKyAqIHN0YXRlcyBvciB1c2luZyB0aGUgZG9vcmJlbGwgcmVnaXN0ZXIuICovCitzdGF0aWMgX19kZXZpbml0IGludCBjY2lzc19rZHVtcF9oYXJkX3Jlc2V0X2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdTE2IHNhdmVkX2NvbmZpZ19zcGFjZVszMl07CisJdTY0IGNmZ19vZmZzZXQ7CisJdTMyIGNmZ19iYXNlX2FkZHI7CisJdTY0IGNmZ19iYXNlX2FkZHJfaW5kZXg7CisJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIHBhZGRyOworCXUzMiBtaXNjX2Z3X3N1cHBvcnQsIGFjdGl2ZV90cmFuc3BvcnQ7CisJaW50IHJjLCBpOworCUNmZ1RhYmxlX3N0cnVjdCBfX2lvbWVtICpjZmd0YWJsZTsKKwlib29sIHVzZV9kb29yYmVsbDsKKwl1MzIgYm9hcmRfaWQ7CisKKwkvKiBGb3IgY29udHJvbGxlcnMgYXMgb2xkIGEgdGhlIHA2MDAsIHRoaXMgaXMgdmVyeSBuZWFybHkKKwkgKiB0aGUgc2FtZSB0aGluZyBhcworCSAqCisJICogcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJICogcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOworCSAqIHBjaV9zZXRfcG93ZXJfc3RhdGUocGNpX2RldiwgUENJX0QwKTsKKwkgKiBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsKKwkgKgorCSAqIGJ1dCB3ZSBjYW4ndCB1c2UgdGhlc2UgbmljZSBjYW5uZWQga2VybmVsIHJvdXRpbmVzIG9uCisJICoga2V4ZWMsIGJlY2F1c2UgdGhleSBhbHNvIGNoZWNrIHRoZSBNU0kvTVNJLVggc3RhdGUgaW4gUENJCisJICogY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgZG8gdGhlIHdyb25nIHRoaW5nIHdoZW4gaXQgaXMKKwkgKiBzZXQvY2xlYXJlZC4gIEFsc28sIHRoZSBwY2lfc2F2ZS9yZXN0b3JlX3N0YXRlIGZ1bmN0aW9ucworCSAqIHZpb2xhdGUgdGhlIG9yZGVyaW5nIHJlcXVpcmVtZW50cyBmb3IgcmVzdG9yaW5nIHRoZQorCSAqIGNvbmZpZ3VyYXRpb24gc3BhY2UgZnJvbSB0aGUgQ0NJU1MgZG9jdW1lbnQgKHNlZSB0aGUKKwkgKiBjb21tZW50IGJlbG93KS4gIFNvIHdlIHJvbGwgb3VyIG93biAuLi4uCisJICoKKwkgKiBGb3IgY29udHJvbGxlcnMgbmV3ZXIgdGhhbiB0aGUgUDYwMCwgdGhlIHBjaSBwb3dlciBzdGF0ZQorCSAqIG1ldGhvZCBvZiByZXNldHRpbmcgZG9lc24ndCB3b3JrIHNvIHdlIGhhdmUgYW5vdGhlciB3YXkKKwkgKiB1c2luZyB0aGUgZG9vcmJlbGwgcmVnaXN0ZXIuCisJICovCisKKwkvKiBFeGNsdWRlIDY0MHggYm9hcmRzLiAgVGhlc2UgYXJlIHR3byBwY2kgZGV2aWNlcyBpbiBvbmUgc2xvdAorCSAqIHdoaWNoIHNoYXJlIGEgYmF0dGVyeSBiYWNrZWQgY2FjaGUgbW9kdWxlLiAgT25lIGNvbnRyb2xzIHRoZQorCSAqIGNhY2hlLCB0aGUgb3RoZXIgYWNjZXNzZXMgdGhlIGNhY2hlIHRocm91Z2ggdGhlIG9uZSB0aGF0IGNvbnRyb2xzCisJICogaXQuICBJZiB3ZSByZXNldCB0aGUgb25lIGNvbnRyb2xsaW5nIHRoZSBjYWNoZSwgdGhlIG90aGVyIHdpbGwKKwkgKiBsaWtlbHkgbm90IGJlIGhhcHB5LiAgSnVzdCBmb3JiaWQgcmVzZXR0aW5nIHRoaXMgY29uam9pbmVkIG1lc3MuCisJICovCisJY2Npc3NfbG9va3VwX2JvYXJkX2lkKHBkZXYsICZib2FyZF9pZCk7CisJaWYgKGJvYXJkX2lkID09IDB4NDA5QzBFMTEgfHwgYm9hcmRfaWQgPT0gMHg0MDlEMEUxMSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlc2V0IFNtYXJ0IEFycmF5IDY0MHggIgorCQkJCSJkdWUgdG8gc2hhcmVkIGNhY2hlIG1vZHVsZS4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDIqaSwgJnNhdmVkX2NvbmZpZ19zcGFjZVtpXSk7CiAKLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwotCWlmIChwb3MgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzX3Jlc2V0X2NvbnRyb2xsZXI6IFBDSSBQTSBub3Qgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJLyogZmluZCB0aGUgZmlyc3QgbWVtb3J5IEJBUiwgc28gd2UgY2FuIGZpbmQgdGhlIGNmZyB0YWJsZSAqLworCXJjID0gY2Npc3NfcGNpX2ZpbmRfbWVtb3J5X0JBUihwZGV2LCAmcGFkZHIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXZhZGRyID0gcmVtYXBfcGNpX21lbShwYWRkciwgMHgyNTApOworCWlmICghdmFkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZmluZCBjZmd0YWJsZSBpbiBvcmRlciB0byBjaGVjayBpZiByZXNldCB2aWEgZG9vcmJlbGwgaXMgc3VwcG9ydGVkICovCisJcmMgPSBjY2lzc19maW5kX2NmZ19hZGRycyhwZGV2LCB2YWRkciwgJmNmZ19iYXNlX2FkZHIsCisJCQkJCSZjZmdfYmFzZV9hZGRyX2luZGV4LCAmY2ZnX29mZnNldCk7CisJaWYgKHJjKQorCQlnb3RvIHVubWFwX3ZhZGRyOworCWNmZ3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwKKwkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwgc2l6ZW9mKCpjZmd0YWJsZSkpOworCWlmICghY2ZndGFibGUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIHVubWFwX3ZhZGRyOwogCX0KIAotCS8qIFF1b3RpbmcgZnJvbSB0aGUgT3BlbiBDSVNTIFNwZWNpZmljYXRpb246ICJUaGUgUG93ZXIKLQkgKiBNYW5hZ2VtZW50IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyIChDU1IpIGNvbnRyb2xzIHRoZSBwb3dlcgotCSAqIHN0YXRlIG9mIHRoZSBkZXZpY2UuICBUaGUgbm9ybWFsIG9wZXJhdGluZyBzdGF0ZSBpcyBEMCwKLQkgKiBDU1I9MDBoLiAgVGhlIHNvZnR3YXJlIG9mZiBzdGF0ZSBpcyBEMywgQ1NSPTAzaC4gIFRvIHJlc2V0Ci0JICogdGhlIGNvbnRyb2xsZXIsIHBsYWNlIHRoZSBpbnRlcmZhY2UgZGV2aWNlIGluIEQzIHRoZW4gdG8KLQkgKiBEMCwgdGhpcyBjYXVzZXMgYSBzZWNvbmRhcnkgUENJIHJlc2V0IHdoaWNoIHdpbGwgcmVzZXQgdGhlCi0JICogY29udHJvbGxlci4iICovCisJLyogSWYgcmVzZXQgdmlhIGRvb3JiZWxsIHJlZ2lzdGVyIGlzIHN1cHBvcnRlZCwgdXNlIHRoYXQuICovCisJbWlzY19md19zdXBwb3J0ID0gcmVhZGwoJmNmZ3RhYmxlLT5taXNjX2Z3X3N1cHBvcnQpOworCXVzZV9kb29yYmVsbCA9IG1pc2NfZndfc3VwcG9ydCAmIE1JU0NfRldfRE9PUkJFTExfUkVTRVQ7CiAKLQkvKiBlbnRlciB0aGUgRDNob3QgcG93ZXIgbWFuYWdlbWVudCBzdGF0ZSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCAmcG1jc3IpOwotCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwotCXBtY3NyIHw9IFBDSV9EM2hvdDsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsIHBtY3NyKTsKLQotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaID4+IDEpOwotCi0JLyogZW50ZXIgdGhlIEQwIHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KLQlwbWNzciAmPSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKLQlwbWNzciB8PSBQQ0lfRDA7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9QTV9DVFJMLCBwbWNzcik7Ci0KLQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWiA+PiAxKTsKKwlyYyA9IGNjaXNzX2NvbnRyb2xsZXJfaGFyZF9yZXNldChwZGV2LCB2YWRkciwgdXNlX2Rvb3JiZWxsKTsKKwlpZiAocmMpCisJCWdvdG8gdW5tYXBfY2ZndGFibGU7CiAKIAkvKiBSZXN0b3JlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZS4gIFRoZSBPcGVuIENJU1MKIAkgKiBTcGVjaWZpY2F0aW9uIHNheXMsICJSZXN0b3JlIHRoZSBQQ0kgQ29uZmlndXJhdGlvbgogCSAqIFJlZ2lzdGVycywgb2Zmc2V0cyAwMGggdGhyb3VnaCA2MGguIEl0IGlzIGltcG9ydGFudCB0bwogCSAqIHJlc3RvcmUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIsIDE2LWJpdHMgYXQgb2Zmc2V0IDA0aCwKIAkgKiBsYXN0LiBEbyBub3QgcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgcmVnaXN0ZXIsCi0JICogMTYtYml0cyBhdCBvZmZzZXQgMDZoLiIgIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGlzIDIqaS4gKi8KKwkgKiAxNi1iaXRzIGF0IG9mZnNldCAwNmguIiAgTm90ZSB0aGF0IHRoZSBvZmZzZXQgaXMgMippLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CiAJCWlmIChpID09IDIgfHwgaSA9PSAzKQogCQkJY29udGludWU7CkBAIC00MTQ5LDYgKzQ1MzgsNjMgQEAKIAl3bWIoKTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgNCwgc2F2ZWRfY29uZmlnX3NwYWNlWzJdKTsKIAorCS8qIFNvbWUgZGV2aWNlcyAobm90YWJseSB0aGUgSFAgU21hcnQgQXJyYXkgNWkgQ29udHJvbGxlcikKKwkgICBuZWVkIGEgbGl0dGxlIHBhdXNlIGhlcmUgKi8KKwltc2xlZXAoQ0NJU1NfUE9TVF9SRVNFVF9QQVVTRV9NU0VDUyk7CisKKwkvKiBDb250cm9sbGVyIHNob3VsZCBiZSBpbiBzaW1wbGUgbW9kZSBhdCB0aGlzIHBvaW50LiAgSWYgaXQncyBub3QsCisJICogSXQgbWVhbnMgd2UncmUgb24gb25lIG9mIHRob3NlIGNvbnRyb2xsZXJzIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydAorCSAqIHRoZSBkb29yYmVsbCByZXNldCBtZXRob2QgYW5kIG9uIHdoaWNoIHRoZSBQQ0kgcG93ZXIgbWFuYWdlbWVudCByZXNldAorCSAqIG1ldGhvZCBkb2Vzbid0IHdvcmsgKFA4MDAsIGZvciBleGFtcGxlLikKKwkgKiBJbiB0aG9zZSBjYXNlcywgZG9uJ3QgdHJ5IHRvIHByb2NlZWQsIGFzIGl0IGdlbmVyYWxseSBkb2Vzbid0IHdvcmsuCisJICovCisJYWN0aXZlX3RyYW5zcG9ydCA9IHJlYWRsKCZjZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKTsKKwlpZiAoYWN0aXZlX3RyYW5zcG9ydCAmIFBFUkZPUk1BTlRfTU9ERSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHN1Y2Nlc3NmdWxseSByZXNldCBjb250cm9sbGVyLCIKKwkJCSIgSWdub3JpbmcgY29udHJvbGxlci5cbiIpOworCQlyYyA9IC1FTk9ERVY7CisJfQorCit1bm1hcF9jZmd0YWJsZToKKwlpb3VubWFwKGNmZ3RhYmxlKTsKKwordW5tYXBfdmFkZHI6CisJaW91bm1hcCh2YWRkcik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBjY2lzc19pbml0X3Jlc2V0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHJjLCBpOworCisJaWYgKCFyZXNldF9kZXZpY2VzKQorCQlyZXR1cm4gMDsKKworCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyIHdpdGggYSBQQ0kgcG93ZXItY3ljbGUgb3IgdmlhIGRvb3JiZWxsICovCisJcmMgPSBjY2lzc19rZHVtcF9oYXJkX3Jlc2V0X2NvbnRyb2xsZXIocGRldik7CisKKwkvKiAtRU5PVFNVUFAgaGVyZSBtZWFucyB3ZSBjYW5ub3QgcmVzZXQgdGhlIGNvbnRyb2xsZXIKKwkgKiBidXQgaXQncyBhbHJlYWR5IChhbmQgc3RpbGwpIHVwIGFuZCBydW5uaW5nIGluCisJICogInBlcmZvcm1hbnQgbW9kZSIuICBPciwgaXQgbWlnaHQgYmUgNjQweCwgd2hpY2ggY2FuJ3QgcmVzZXQKKwkgKiBkdWUgdG8gY29uY2VybnMgYWJvdXQgc2hhcmVkIGJid2MgYmV0d2VlbiA2NDAyLzY0MDQgcGFpci4KKwkgKi8KKwlpZiAocmMgPT0gLUVOT1RTVVBQKQorCQlyZXR1cm4gMDsgLyoganVzdCB0cnkgdG8gZG8gdGhlIGtkdW1wIGFueWhvdy4gKi8KKwlpZiAocmMpCisJCXJldHVybiAtRU5PREVWOworCWlmIChjY2lzc19yZXNldF9tc2kocGRldikpCisJCXJldHVybiAtRU5PREVWOworCisJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wICovCisJZm9yIChpID0gMDsgaSA8IENDSVNTX1BPU1RfUkVTRVRfTk9PUF9SRVRSSUVTOyBpKyspIHsKKwkJaWYgKGNjaXNzX25vb3AocGRldikgPT0gMCkKKwkJCWJyZWFrOworCQllbHNlCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibm8tb3AgZmFpbGVkJXNcbiIsCisJCQkJKGkgPCBDQ0lTU19QT1NUX1JFU0VUX05PT1BfUkVUUklFUyAtIDEgPworCQkJCQkiOyByZS10cnlpbmciIDogIiIpKTsKKwkJbXNsZWVwKENDSVNTX1BPU1RfUkVTRVRfTk9PUF9JTlRFUlZBTF9NU0VDUyk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC00MTY2LDQ2ICs0NjEyLDMxIEBACiAJaW50IHJjOwogCWludCBkYWMsIHJldHVybl9jb2RlOwogCUlucXVpcnlEYXRhX3N0cnVjdCAqaW5xX2J1ZmY7CisJY3Rscl9pbmZvX3QgKmg7CiAKLQlpZiAocmVzZXRfZGV2aWNlcykgewotCQkvKiBSZXNldCB0aGUgY29udHJvbGxlciB3aXRoIGEgUENJIHBvd2VyLWN5Y2xlICovCi0JCWlmIChjY2lzc19oYXJkX3Jlc2V0X2NvbnRyb2xsZXIocGRldikgfHwgY2Npc3NfcmVzZXRfbXNpKHBkZXYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogTm93IHRyeSB0byBnZXQgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBhIG5vLW9wLiBTb21lCi0JCSAgIGRldmljZXMgKG5vdGFibHkgdGhlIEhQIFNtYXJ0IEFycmF5IDVpIENvbnRyb2xsZXIpIG5lZWQKLQkJICAgdXAgdG8gMzAgc2Vjb25kcyB0byByZXNwb25kLiAqLwotCQlmb3IgKGk9MDsgaTwzMDsgaSsrKSB7Ci0JCQlpZiAoY2Npc3Nfbm9vcChwZGV2KSA9PSAwKQotCQkJCWJyZWFrOwotCi0JCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShIWik7Ci0JCX0KLQkJaWYgKGkgPT0gMzApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IGNvbnRyb2xsZXIgc2VlbXMgZGVhZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JfQotCi0JaSA9IGFsbG9jX2NjaXNzX2hiYSgpOworCXJjID0gY2Npc3NfaW5pdF9yZXNldF9kZXZpY2VzKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWkgPSBhbGxvY19jY2lzc19oYmEocGRldik7CiAJaWYgKGkgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMTsKLQlJTklUX0hMSVNUX0hFQUQoJmhiYVtpXS0+Y21wUSk7Ci0JSU5JVF9ITElTVF9IRUFEKCZoYmFbaV0tPnJlcVEpOwotCW11dGV4X2luaXQoJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKKwloID0gaGJhW2ldOworCWgtPnBkZXYgPSBwZGV2OworCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMTsKKwlJTklUX0hMSVNUX0hFQUQoJmgtPmNtcFEpOworCUlOSVRfSExJU1RfSEVBRCgmaC0+cmVxUSk7CisJbXV0ZXhfaW5pdCgmaC0+YnVzeV9zaHV0dGluZ19kb3duKTsKIAotCWlmIChjY2lzc19wY2lfaW5pdChoYmFbaV0sIHBkZXYpICE9IDApCisJaWYgKGNjaXNzX3BjaV9pbml0KGgpICE9IDApCiAJCWdvdG8gY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOwogCi0Jc3ByaW50ZihoYmFbaV0tPmRldm5hbWUsICJjY2lzcyVkIiwgaSk7Ci0JaGJhW2ldLT5jdGxyID0gaTsKLQloYmFbaV0tPnBkZXYgPSBwZGV2OworCXNwcmludGYoaC0+ZGV2bmFtZSwgImNjaXNzJWQiLCBpKTsKKwloLT5jdGxyID0gaTsKIAotCWluaXRfY29tcGxldGlvbigmaGJhW2ldLT5zY2FuX3dhaXQpOworCWluaXRfY29tcGxldGlvbigmaC0+c2Nhbl93YWl0KTsKIAotCWlmIChjY2lzc19jcmVhdGVfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSkpCisJaWYgKGNjaXNzX2NyZWF0ZV9oYmFfc3lzZnNfZW50cnkoaCkpCiAJCWdvdG8gY2xlYW4wOwogCiAJLyogY29uZmlndXJlIFBDSSBETUEgc3R1ZmYgKi8KQEAgLTQyMTQsNyArNDY0NSw3IEBACiAJZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpCiAJCWRhYyA9IDA7CiAJZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IG5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGVcbiIpOworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJubyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBjbGVhbjE7CiAJfQogCkBAIC00MjI0LDE1MSArNDY1NSwxNjEgQEAKIAkgKiA4IGNvbnRyb2xsZXIgc3VwcG9ydC4KIAkgKi8KIAlpZiAoaSA8IE1BWF9DVExSX09SSUcpCi0JCWhiYVtpXS0+bWFqb3IgPSBDT01QQVFfQ0lTU19NQUpPUiArIGk7Ci0JcmMgPSByZWdpc3Rlcl9ibGtkZXYoaGJhW2ldLT5tYWpvciwgaGJhW2ldLT5kZXZuYW1lKTsKKwkJaC0+bWFqb3IgPSBDT01QQVFfQ0lTU19NQUpPUiArIGk7CisJcmMgPSByZWdpc3Rlcl9ibGtkZXYoaC0+bWFqb3IsIGgtPmRldm5hbWUpOwogCWlmIChyYyA9PSAtRUJVU1kgfHwgcmMgPT0gLUVJTlZBTCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjY2lzczogIFVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyICVkIGZvciAlcyAiCi0JCSAgICAgICAib24gaGJhICVkXG4iLCBoYmFbaV0tPm1ham9yLCBoYmFbaV0tPmRldm5hbWUsIGkpOworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsCisJCSAgICAgICAiVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXIgJWQgZm9yICVzICIKKwkJICAgICAgICJvbiBoYmEgJWRcbiIsIGgtPm1ham9yLCBoLT5kZXZuYW1lLCBpKTsKIAkJZ290byBjbGVhbjE7CiAJfSBlbHNlIHsKIAkJaWYgKGkgPj0gTUFYX0NUTFJfT1JJRykKLQkJCWhiYVtpXS0+bWFqb3IgPSByYzsKKwkJCWgtPm1ham9yID0gcmM7CiAJfQogCiAJLyogbWFrZSBzdXJlIHRoZSBib2FyZCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KLQloYmFbaV0tPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGhiYVtpXSwgQ0NJU1NfSU5UUl9PRkYpOwotCWlmIChyZXF1ZXN0X2lycShoYmFbaV0tPmludHJbU0lNUExFX01PREVfSU5UXSwgZG9fY2Npc3NfaW50ciwKLQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwgaGJhW2ldLT5kZXZuYW1lLCBoYmFbaV0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IFVuYWJsZSB0byBnZXQgaXJxICVkIGZvciAlc1xuIiwKLQkJICAgICAgIGhiYVtpXS0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoYmFbaV0tPmRldm5hbWUpOwotCQlnb3RvIGNsZWFuMjsKKwloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBDQ0lTU19JTlRSX09GRik7CisJaWYgKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sCisJCQkJZG9fY2Npc3NfbXNpeF9pbnRyLAorCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpKSB7CisJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCisJCQkgICAgICAgaC0+aW50cltQRVJGX01PREVfSU5UXSwgaC0+ZGV2bmFtZSk7CisJCQlnb3RvIGNsZWFuMjsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChyZXF1ZXN0X2lycShoLT5pbnRyW1BFUkZfTU9ERV9JTlRdLCBkb19jY2lzc19pbnR4LAorCQkJCUlSUUZfRElTQUJMRUQsIGgtPmRldm5hbWUsIGgpKSB7CisJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCisJCQkgICAgICAgaC0+aW50cltQRVJGX01PREVfSU5UXSwgaC0+ZGV2bmFtZSk7CisJCQlnb3RvIGNsZWFuMjsKKwkJfQogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiA8MHgleD4gYXQgUENJICVzIElSUSAlZCVzIHVzaW5nIERBQ1xuIiwKLQkgICAgICAgaGJhW2ldLT5kZXZuYW1lLCBwZGV2LT5kZXZpY2UsIHBjaV9uYW1lKHBkZXYpLAotCSAgICAgICBoYmFbaV0tPmludHJbU0lNUExFX01PREVfSU5UXSwgZGFjID8gIiIgOiAiIG5vdCIpOworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlczogPDB4JXg+IGF0IFBDSSAlcyBJUlEgJWQlcyB1c2luZyBEQUNcbiIsCisJICAgICAgIGgtPmRldm5hbWUsIHBkZXYtPmRldmljZSwgcGNpX25hbWUocGRldiksCisJICAgICAgIGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGRhYyA/ICIiIDogIiBub3QiKTsKIAotCWhiYVtpXS0+Y21kX3Bvb2xfYml0cyA9Ci0JICAgIGttYWxsb2MoRElWX1JPVU5EX1VQKGhiYVtpXS0+bnJfY21kcywgQklUU19QRVJfTE9ORykKKwloLT5jbWRfcG9vbF9iaXRzID0KKwkgICAga21hbGxvYyhESVZfUk9VTkRfVVAoaC0+bnJfY21kcywgQklUU19QRVJfTE9ORykKIAkJCSogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKLQloYmFbaV0tPmNtZF9wb29sID0gKENvbW1hbmRMaXN0X3N0cnVjdCAqKQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChoYmFbaV0tPnBkZXYsCi0JCSAgICBoYmFbaV0tPm5yX2NtZHMgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwKLQkJICAgICYoaGJhW2ldLT5jbWRfcG9vbF9kaGFuZGxlKSk7Ci0JaGJhW2ldLT5lcnJpbmZvX3Bvb2wgPSAoRXJyb3JJbmZvX3N0cnVjdCAqKQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChoYmFbaV0tPnBkZXYsCi0JCSAgICBoYmFbaV0tPm5yX2NtZHMgKiBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCksCi0JCSAgICAmKGhiYVtpXS0+ZXJyaW5mb19wb29sX2RoYW5kbGUpKTsKLQlpZiAoKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyA9PSBOVUxMKQotCSAgICB8fCAoaGJhW2ldLT5jbWRfcG9vbCA9PSBOVUxMKQotCSAgICB8fCAoaGJhW2ldLT5lcnJpbmZvX3Bvb2wgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeSIpOworCWgtPmNtZF9wb29sID0gKENvbW1hbmRMaXN0X3N0cnVjdCAqKQorCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LAorCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpLAorCQkgICAgJihoLT5jbWRfcG9vbF9kaGFuZGxlKSk7CisJaC0+ZXJyaW5mb19wb29sID0gKEVycm9ySW5mb19zdHJ1Y3QgKikKKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCksCisJCSAgICAmKGgtPmVycmluZm9fcG9vbF9kaGFuZGxlKSk7CisJaWYgKChoLT5jbWRfcG9vbF9iaXRzID09IE5VTEwpCisJICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQorCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkiKTsKIAkJZ290byBjbGVhbjQ7CiAJfQogCiAJLyogTmVlZCBzcGFjZSBmb3IgdGVtcCBzY2F0dGVyIGxpc3QgKi8KLQloYmFbaV0tPnNjYXR0ZXJfbGlzdCA9IGttYWxsb2MoaGJhW2ldLT5tYXhfY29tbWFuZHMgKgorCWgtPnNjYXR0ZXJfbGlzdCA9IGttYWxsb2MoaC0+bWF4X2NvbW1hbmRzICoKIAkJCQkJCXNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiksCiAJCQkJCQlHRlBfS0VSTkVMKTsKLQlmb3IgKGsgPSAwOyBrIDwgaGJhW2ldLT5ucl9jbWRzOyBrKyspIHsKLQkJaGJhW2ldLT5zY2F0dGVyX2xpc3Rba10gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpICoKLQkJCQkJCQloYmFbaV0tPm1heHNnZW50cmllcywKKwlmb3IgKGsgPSAwOyBrIDwgaC0+bnJfY21kczsgaysrKSB7CisJCWgtPnNjYXR0ZXJfbGlzdFtrXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKgorCQkJCQkJCWgtPm1heHNnZW50cmllcywKIAkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJaWYgKGhiYVtpXS0+c2NhdHRlcl9saXN0W2tdID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJCQkicy9nIGxpc3RzXG4iLCBpKTsKKwkJaWYgKGgtPnNjYXR0ZXJfbGlzdFtrXSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsCisJCQkJImNvdWxkIG5vdCBhbGxvY2F0ZSBzL2cgbGlzdHNcbiIpOwogCQkJZ290byBjbGVhbjQ7CiAJCX0KIAl9Ci0JaGJhW2ldLT5jbWRfc2dfbGlzdCA9IGNjaXNzX2FsbG9jYXRlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0sCi0JCWhiYVtpXS0+Y2hhaW5zaXplLCBoYmFbaV0tPm5yX2NtZHMpOwotCWlmICghaGJhW2ldLT5jbWRfc2dfbGlzdCAmJiBoYmFbaV0tPmNoYWluc2l6ZSA+IDApCisJaC0+Y21kX3NnX2xpc3QgPSBjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaCwKKwkJaC0+Y2hhaW5zaXplLCBoLT5ucl9jbWRzKTsKKwlpZiAoIWgtPmNtZF9zZ19saXN0ICYmIGgtPmNoYWluc2l6ZSA+IDApCiAJCWdvdG8gY2xlYW40OwogCi0Jc3Bpbl9sb2NrX2luaXQoJmhiYVtpXS0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcGRldiBkcml2ZXIgcHJpdmF0ZSBkYXRhLgotCSAgIGhhdmUgaXQgcG9pbnQgdG8gaGJhW2ldLiAgKi8KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaGJhW2ldKTsKKwkgICBoYXZlIGl0IHBvaW50IHRvIGguICAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBoKTsKIAkvKiBjb21tYW5kIGFuZCBlcnJvciBpbmZvIHJlY3MgemVyb2VkIG91dCBiZWZvcmUKIAkgICB0aGV5IGFyZSB1c2VkICovCi0JbWVtc2V0KGhiYVtpXS0+Y21kX3Bvb2xfYml0cywgMCwKLQkgICAgICAgRElWX1JPVU5EX1VQKGhiYVtpXS0+bnJfY21kcywgQklUU19QRVJfTE9ORykKKwltZW1zZXQoaC0+Y21kX3Bvb2xfYml0cywgMCwKKwkgICAgICAgRElWX1JPVU5EX1VQKGgtPm5yX2NtZHMsIEJJVFNfUEVSX0xPTkcpCiAJCQkqIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CiAKLQloYmFbaV0tPm51bV9sdW5zID0gMDsKLQloYmFbaV0tPmhpZ2hlc3RfbHVuID0gLTE7CisJaC0+bnVtX2x1bnMgPSAwOworCWgtPmhpZ2hlc3RfbHVuID0gLTE7CiAJZm9yIChqID0gMDsgaiA8IENJU1NfTUFYX0xVTjsgaisrKSB7Ci0JCWhiYVtpXS0+ZHJ2W2pdID0gTlVMTDsKLQkJaGJhW2ldLT5nZW5kaXNrW2pdID0gTlVMTDsKKwkJaC0+ZHJ2W2pdID0gTlVMTDsKKwkJaC0+Z2VuZGlza1tqXSA9IE5VTEw7CiAJfQogCi0JY2Npc3Nfc2NzaV9zZXR1cChpKTsKKwljY2lzc19zY3NpX3NldHVwKGgpOwogCiAJLyogVHVybiB0aGUgaW50ZXJydXB0cyBvbiBzbyB3ZSBjYW4gc2VydmljZSByZXF1ZXN0cyAqLwotCWhiYVtpXS0+YWNjZXNzLnNldF9pbnRyX21hc2soaGJhW2ldLCBDQ0lTU19JTlRSX09OKTsKKwloLT5hY2Nlc3Muc2V0X2ludHJfbWFzayhoLCBDQ0lTU19JTlRSX09OKTsKIAogCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwogCWlucV9idWZmID0ga3phbGxvYyhzaXplb2YoSW5xdWlyeURhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGlucV9idWZmID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGNsZWFuNDsKIAl9CiAKLQlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShDSVNTX0lOUVVJUlksIGksIGlucV9idWZmLAorCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKGgsIENJU1NfSU5RVUlSWSwgaW5xX2J1ZmYsCiAJCXNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpLCAwLCBDVExSX0xVTklELCBUWVBFX0NNRCk7CiAJaWYgKHJldHVybl9jb2RlID09IElPX09LKSB7Ci0JCWhiYVtpXS0+ZmlybV92ZXJbMF0gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzMyXTsKLQkJaGJhW2ldLT5maXJtX3ZlclsxXSA9IGlucV9idWZmLT5kYXRhX2J5dGVbMzNdOwotCQloYmFbaV0tPmZpcm1fdmVyWzJdID0gaW5xX2J1ZmYtPmRhdGFfYnl0ZVszNF07Ci0JCWhiYVtpXS0+ZmlybV92ZXJbM10gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzM1XTsKKwkJaC0+ZmlybV92ZXJbMF0gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzMyXTsKKwkJaC0+ZmlybV92ZXJbMV0gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzMzXTsKKwkJaC0+ZmlybV92ZXJbMl0gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzM0XTsKKwkJaC0+ZmlybV92ZXJbM10gPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzM1XTsKIAl9IGVsc2UgewkgLyogc2VuZCBjb21tYW5kIGZhaWxlZCAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogdW5hYmxlIHRvIGRldGVybWluZSBmaXJtd2FyZSIKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVuYWJsZSB0byBkZXRlcm1pbmUgZmlybXdhcmUiCiAJCQkiIHZlcnNpb24gb2YgY29udHJvbGxlclxuIik7CiAJfQogCWtmcmVlKGlucV9idWZmKTsKIAotCWNjaXNzX3Byb2Npbml0KGkpOworCWNjaXNzX3Byb2Npbml0KGgpOwogCi0JaGJhW2ldLT5jY2lzc19tYXhfc2VjdG9ycyA9IDgxOTI7CisJaC0+Y2Npc3NfbWF4X3NlY3RvcnMgPSA4MTkyOwogCi0JcmVidWlsZF9sdW5fdGFibGUoaGJhW2ldLCAxLCAwKTsKLQloYmFbaV0tPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKKwlyZWJ1aWxkX2x1bl90YWJsZShoLCAxLCAwKTsKKwloLT5idXN5X2luaXRpYWxpemluZyA9IDA7CiAJcmV0dXJuIDE7CiAKIGNsZWFuNDoKLQlrZnJlZShoYmFbaV0tPmNtZF9wb29sX2JpdHMpOworCWtmcmVlKGgtPmNtZF9wb29sX2JpdHMpOwogCS8qIEZyZWUgdXAgc2cgZWxlbWVudHMgKi8KLQlmb3IgKGsgPSAwOyBrIDwgaGJhW2ldLT5ucl9jbWRzOyBrKyspCi0JCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0W2tdKTsKLQlrZnJlZShoYmFbaV0tPnNjYXR0ZXJfbGlzdCk7Ci0JY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3MoaGJhW2ldLT5jbWRfc2dfbGlzdCwgaGJhW2ldLT5ucl9jbWRzKTsKLQlpZiAoaGJhW2ldLT5jbWRfcG9vbCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChoYmFbaV0tPnBkZXYsCi0JCQkJICAgIGhiYVtpXS0+bnJfY21kcyAqIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpLAotCQkJCSAgICBoYmFbaV0tPmNtZF9wb29sLCBoYmFbaV0tPmNtZF9wb29sX2RoYW5kbGUpOwotCWlmIChoYmFbaV0tPmVycmluZm9fcG9vbCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChoYmFbaV0tPnBkZXYsCi0JCQkJICAgIGhiYVtpXS0+bnJfY21kcyAqIHNpemVvZihFcnJvckluZm9fc3RydWN0KSwKLQkJCQkgICAgaGJhW2ldLT5lcnJpbmZvX3Bvb2wsCi0JCQkJICAgIGhiYVtpXS0+ZXJyaW5mb19wb29sX2RoYW5kbGUpOwotCWZyZWVfaXJxKGhiYVtpXS0+aW50cltTSU1QTEVfTU9ERV9JTlRdLCBoYmFbaV0pOworCWZvciAoayA9IDA7IGsgPCBoLT5ucl9jbWRzOyBrKyspCisJCWtmcmVlKGgtPnNjYXR0ZXJfbGlzdFtrXSk7CisJa2ZyZWUoaC0+c2NhdHRlcl9saXN0KTsKKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoLT5jbWRfc2dfbGlzdCwgaC0+bnJfY21kcyk7CisJaWYgKGgtPmNtZF9wb29sKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsCisJCQkJICAgIGgtPm5yX2NtZHMgKiBzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSwKKwkJCQkgICAgaC0+Y21kX3Bvb2wsIGgtPmNtZF9wb29sX2RoYW5kbGUpOworCWlmIChoLT5lcnJpbmZvX3Bvb2wpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKKwkJCQkgICAgaC0+bnJfY21kcyAqIHNpemVvZihFcnJvckluZm9fc3RydWN0KSwKKwkJCQkgICAgaC0+ZXJyaW5mb19wb29sLAorCQkJCSAgICBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CisJZnJlZV9pcnEoaC0+aW50cltQRVJGX01PREVfSU5UXSwgaCk7CiBjbGVhbjI6Ci0JdW5yZWdpc3Rlcl9ibGtkZXYoaGJhW2ldLT5tYWpvciwgaGJhW2ldLT5kZXZuYW1lKTsKKwl1bnJlZ2lzdGVyX2Jsa2RldihoLT5tYWpvciwgaC0+ZGV2bmFtZSk7CiBjbGVhbjE6Ci0JY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoaGJhW2ldKTsKKwljY2lzc19kZXN0cm95X2hiYV9zeXNmc19lbnRyeShoKTsKIGNsZWFuMDoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOgotCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOworCWgtPmJ1c3lfaW5pdGlhbGl6aW5nID0gMDsKIAogCS8qCiAJICogRGVsaWJlcmF0ZWx5IG9taXQgcGNpX2Rpc2FibGVfZGV2aWNlKCk6IGl0IGRvZXMgc29tZXRoaW5nIG5hc3R5IHRvCiAJICogU21hcnQgQXJyYXkgY29udHJvbGxlcnMgdGhhdCBwY2lfZW5hYmxlX2RldmljZSBkb2VzIG5vdCB1bmRvCiAJICovCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWZyZWVfaGJhKGkpOworCWZyZWVfaGJhKGgpOwogCXJldHVybiAtMTsKIH0KIApAQCAtNDM4MSw1NSArNDgyMiw1MSBAQAogCWggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJZmx1c2hfYnVmID0ga3phbGxvYyg0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZsdXNoX2J1ZikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY2Npc3M6JWQgY2FjaGUgbm90IGZsdXNoZWQsIG91dCBvZiBtZW1vcnkuXG4iLAotCQkJaC0+Y3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjYWNoZSBub3QgZmx1c2hlZCwgb3V0IG9mIG1lbW9yeS5cbiIpOwogCQlyZXR1cm47CiAJfQogCS8qIHdyaXRlIGFsbCBkYXRhIGluIHRoZSBiYXR0ZXJ5IGJhY2tlZCBjYWNoZSB0byBkaXNrICovCiAJbWVtc2V0KGZsdXNoX2J1ZiwgMCwgNCk7Ci0JcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoQ0NJU1NfQ0FDSEVfRkxVU0gsIGgtPmN0bHIsIGZsdXNoX2J1ZiwKKwlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShoLCBDQ0lTU19DQUNIRV9GTFVTSCwgZmx1c2hfYnVmLAogCQk0LCAwLCBDVExSX0xVTklELCBUWVBFX0NNRCk7CiAJa2ZyZWUoZmx1c2hfYnVmKTsKIAlpZiAocmV0dXJuX2NvZGUgIT0gSU9fT0spCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IEVycm9yIGZsdXNoaW5nIGNhY2hlXG4iLAotCQkJaC0+Y3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJFcnJvciBmbHVzaGluZyBjYWNoZVxuIik7CiAJaC0+YWNjZXNzLnNldF9pbnRyX21hc2soaCwgQ0NJU1NfSU5UUl9PRkYpOwotCWZyZWVfaXJxKGgtPmludHJbMl0sIGgpOworCWZyZWVfaXJxKGgtPmludHJbUEVSRl9NT0RFX0lOVF0sIGgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2Npc3NfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQljdGxyX2luZm9fdCAqdG1wX3B0cjsKKwljdGxyX2luZm9fdCAqaDsKIAlpbnQgaSwgajsKIAogCWlmIChwY2lfZ2V0X2RydmRhdGEocGRldikgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBVbmFibGUgdG8gcmVtb3ZlIGRldmljZSBcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVtb3ZlIGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQl0bXBfcHRyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWkgPSB0bXBfcHRyLT5jdGxyOworCWggPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaSA9IGgtPmN0bHI7CiAJaWYgKGhiYVtpXSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Npc3M6IGRldmljZSBhcHBlYXJzIHRvICIKLQkJICAgICAgICJhbHJlYWR5IGJlIHJlbW92ZWQgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZGV2aWNlIGFwcGVhcnMgdG8gYWxyZWFkeSBiZSByZW1vdmVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCW11dGV4X2xvY2soJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKKwltdXRleF9sb2NrKCZoLT5idXN5X3NodXR0aW5nX2Rvd24pOwogCi0JcmVtb3ZlX2Zyb21fc2Nhbl9saXN0KGhiYVtpXSk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoaGJhW2ldLT5kZXZuYW1lLCBwcm9jX2NjaXNzKTsKLQl1bnJlZ2lzdGVyX2Jsa2RldihoYmFbaV0tPm1ham9yLCBoYmFbaV0tPmRldm5hbWUpOworCXJlbW92ZV9mcm9tX3NjYW5fbGlzdChoKTsKKwlyZW1vdmVfcHJvY19lbnRyeShoLT5kZXZuYW1lLCBwcm9jX2NjaXNzKTsKKwl1bnJlZ2lzdGVyX2Jsa2RldihoLT5tYWpvciwgaC0+ZGV2bmFtZSk7CiAKIAkvKiByZW1vdmUgaXQgZnJvbSB0aGUgZGlzayBsaXN0ICovCiAJZm9yIChqID0gMDsgaiA8IENJU1NfTUFYX0xVTjsgaisrKSB7Ci0JCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gaGJhW2ldLT5nZW5kaXNrW2pdOworCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGgtPmdlbmRpc2tbal07CiAJCWlmIChkaXNrKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCiAJCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgewotCQkJCWNjaXNzX2Rlc3Ryb3lfbGRfc3lzZnNfZW50cnkoaGJhW2ldLCBqLCAxKTsKKwkJCQljY2lzc19kZXN0cm95X2xkX3N5c2ZzX2VudHJ5KGgsIGosIDEpOwogCQkJCWRlbF9nZW5kaXNrKGRpc2spOwogCQkJfQogCQkJaWYgKHEpCkBAIC00NDM4LDM5ICs0ODc1LDQxIEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0NJU1NfU0NTSV9UQVBFCi0JY2Npc3NfdW5yZWdpc3Rlcl9zY3NpKGkpOwkvKiB1bmhvb2sgZnJvbSBTQ1NJIHN1YnN5c3RlbSAqLworCWNjaXNzX3VucmVnaXN0ZXJfc2NzaShoKTsJLyogdW5ob29rIGZyb20gU0NTSSBzdWJzeXN0ZW0gKi8KICNlbmRpZgogCiAJY2Npc3Nfc2h1dGRvd24ocGRldik7CiAKICNpZmRlZiBDT05GSUdfUENJX01TSQotCWlmIChoYmFbaV0tPm1zaXhfdmVjdG9yKQotCQlwY2lfZGlzYWJsZV9tc2l4KGhiYVtpXS0+cGRldik7Ci0JZWxzZSBpZiAoaGJhW2ldLT5tc2lfdmVjdG9yKQotCQlwY2lfZGlzYWJsZV9tc2koaGJhW2ldLT5wZGV2KTsKKwlpZiAoaC0+bXNpeF92ZWN0b3IpCisJCXBjaV9kaXNhYmxlX21zaXgoaC0+cGRldik7CisJZWxzZSBpZiAoaC0+bXNpX3ZlY3RvcikKKwkJcGNpX2Rpc2FibGVfbXNpKGgtPnBkZXYpOwogI2VuZGlmCQkJCS8qIENPTkZJR19QQ0lfTVNJICovCiAKLQlpb3VubWFwKGhiYVtpXS0+dmFkZHIpOworCWlvdW5tYXAoaC0+dHJhbnN0YWJsZSk7CisJaW91bm1hcChoLT5jZmd0YWJsZSk7CisJaW91bm1hcChoLT52YWRkcik7CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGRldiwgaGJhW2ldLT5ucl9jbWRzICogc2l6ZW9mKENvbW1hbmRMaXN0X3N0cnVjdCksCi0JCQkgICAgaGJhW2ldLT5jbWRfcG9vbCwgaGJhW2ldLT5jbWRfcG9vbF9kaGFuZGxlKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGRldiwgaGJhW2ldLT5ucl9jbWRzICogc2l6ZW9mKEVycm9ySW5mb19zdHJ1Y3QpLAotCQkJICAgIGhiYVtpXS0+ZXJyaW5mb19wb29sLCBoYmFbaV0tPmVycmluZm9fcG9vbF9kaGFuZGxlKTsKLQlrZnJlZShoYmFbaV0tPmNtZF9wb29sX2JpdHMpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwgaC0+bnJfY21kcyAqIHNpemVvZihDb21tYW5kTGlzdF9zdHJ1Y3QpLAorCQkJICAgIGgtPmNtZF9wb29sLCBoLT5jbWRfcG9vbF9kaGFuZGxlKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIGgtPm5yX2NtZHMgKiBzaXplb2YoRXJyb3JJbmZvX3N0cnVjdCksCisJCQkgICAgaC0+ZXJyaW5mb19wb29sLCBoLT5lcnJpbmZvX3Bvb2xfZGhhbmRsZSk7CisJa2ZyZWUoaC0+Y21kX3Bvb2xfYml0cyk7CiAJLyogRnJlZSB1cCBzZyBlbGVtZW50cyAqLwotCWZvciAoaiA9IDA7IGogPCBoYmFbaV0tPm5yX2NtZHM7IGorKykKLQkJa2ZyZWUoaGJhW2ldLT5zY2F0dGVyX2xpc3Rbal0pOwotCWtmcmVlKGhiYVtpXS0+c2NhdHRlcl9saXN0KTsKLQljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoYmFbaV0tPmNtZF9zZ19saXN0LCBoYmFbaV0tPm5yX2NtZHMpOworCWZvciAoaiA9IDA7IGogPCBoLT5ucl9jbWRzOyBqKyspCisJCWtmcmVlKGgtPnNjYXR0ZXJfbGlzdFtqXSk7CisJa2ZyZWUoaC0+c2NhdHRlcl9saXN0KTsKKwljY2lzc19mcmVlX3NnX2NoYWluX2Jsb2NrcyhoLT5jbWRfc2dfbGlzdCwgaC0+bnJfY21kcyk7CiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KIAkgKi8KIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQljY2lzc19kZXN0cm95X2hiYV9zeXNmc19lbnRyeShoYmFbaV0pOwotCW11dGV4X3VubG9jaygmaGJhW2ldLT5idXN5X3NodXR0aW5nX2Rvd24pOwotCWZyZWVfaGJhKGkpOworCWNjaXNzX2Rlc3Ryb3lfaGJhX3N5c2ZzX2VudHJ5KGgpOworCW11dGV4X3VubG9jaygmaC0+YnVzeV9zaHV0dGluZ19kb3duKTsKKwlmcmVlX2hiYShoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNjaXNzX3BjaV9kcml2ZXIgPSB7CkBAIC00NDk1LDcgKzQ5MzQsNiBAQAogCSAqIGFycmF5IG9mIHRoZW0sIHRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgogCSAqLwogCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCk7Ci0KIAlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJcbiIpOwogCiAJZXJyID0gYnVzX3JlZ2lzdGVyKCZjY2lzc19idXNfdHlwZSk7CkBAIC00NTMyLDggKzQ5NzAsOCBAQAogCS8qIGRvdWJsZSBjaGVjayB0aGF0IGFsbCBjb250cm9sbGVyIGVudHJ5cyBoYXZlIGJlZW4gcmVtb3ZlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQ1RMUjsgaSsrKSB7CiAJCWlmIChoYmFbaV0gIT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGhhZCB0byByZW1vdmUiCi0JCQkgICAgICAgIiBjb250cm9sbGVyICVkXG4iLCBpKTsKKwkJCWRldl93YXJuKCZoYmFbaV0tPnBkZXYtPmRldiwKKwkJCQkiaGFkIHRvIHJlbW92ZSBjb250cm9sbGVyXG4iKTsKIAkJCWNjaXNzX3JlbW92ZV9vbmUoaGJhW2ldLT5wZGV2KTsKIAkJfQogCX0KQEAgLTQ1NDIsNDYgKzQ5ODAsNSBAQAogCWJ1c191bnJlZ2lzdGVyKCZjY2lzc19idXNfdHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKQotewotCS8qIElmIHdlIGdldCBoZXJlLCB0aGUgYm9hcmQgaXMgYXBwYXJlbnRseSBkZWFkLiAqLwotCWN0bHJfaW5mb190ICpoID0gaGJhW2N0bHJdOwotCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogY29udHJvbGxlciBub3QgcmVzcG9uZGluZy5cbiIsIGgtPmN0bHIpOwotCWgtPmFsaXZlID0gMDsJCS8qIHRoZSBjb250cm9sbGVyIGFwcGFyZW50bHkgZGllZC4uLiAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGgtPnBkZXYpOwkvKiBNYWtlIHN1cmUgaXQgaXMgcmVhbGx5IGRlYWQuICovCi0KLQkvKiBtb3ZlIGV2ZXJ5dGhpbmcgb2ZmIHRoZSByZXF1ZXN0IHF1ZXVlIG9udG8gdGhlIGNvbXBsZXRlZCBxdWV1ZSAqLwotCXdoaWxlICghaGxpc3RfZW1wdHkoJmgtPnJlcVEpKSB7Ci0JCWMgPSBobGlzdF9lbnRyeShoLT5yZXFRLmZpcnN0LCBDb21tYW5kTGlzdF9zdHJ1Y3QsIGxpc3QpOwotCQlyZW1vdmVRKGMpOwotCQloLT5RZGVwdGgtLTsKLQkJYWRkUSgmaC0+Y21wUSwgYyk7Ci0JfQotCi0JLyogTm93LCBmYWlsIGV2ZXJ5dGhpbmcgb24gdGhlIGNvbXBsZXRlZCBxdWV1ZSB3aXRoIGEgSFcgZXJyb3IgKi8KLQl3aGlsZSAoIWhsaXN0X2VtcHR5KCZoLT5jbXBRKSkgewotCQljID0gaGxpc3RfZW50cnkoaC0+Y21wUS5maXJzdCwgQ29tbWFuZExpc3Rfc3RydWN0LCBsaXN0KTsKLQkJcmVtb3ZlUShjKTsKLQkJaWYgKGMtPmNtZF90eXBlICE9IENNRF9NU0dfU1RBTEUpCi0JCQljLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyA9IENNRF9IQVJEV0FSRV9FUlI7Ci0JCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfUldSRVEpIHsKLQkJCWNvbXBsZXRlX2NvbW1hbmQoaCwgYywgMCk7Ci0JCX0gZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX0lPQ1RMX1BFTkQpCi0JCQljb21wbGV0ZShjLT53YWl0aW5nKTsKLSNpZmRlZiBDT05GSUdfQ0lTU19TQ1NJX1RBUEUKLQkJZWxzZSBpZiAoYy0+Y21kX3R5cGUgPT0gQ01EX1NDU0kpCi0JCQljb21wbGV0ZV9zY3NpX2NvbW1hbmQoYywgMCwgMCk7Ci0jZW5kaWYKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0JcmV0dXJuOwotfQotCiBtb2R1bGVfaW5pdChjY2lzc19pbml0KTsKIG1vZHVsZV9leGl0KGNjaXNzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5oIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCmluZGV4IGM1ZDQxMTEuLmFlMzQwZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAl2b2lkICgqc3VibWl0X2NvbW1hbmQpKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpOwogCXZvaWQgKCpzZXRfaW50cl9tYXNrKShjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgbG9uZyB2YWwpOwogCXVuc2lnbmVkIGxvbmcgKCpmaWZvX2Z1bGwpKGN0bHJfaW5mb190ICpoKTsKLQl1bnNpZ25lZCBsb25nICgqaW50cl9wZW5kaW5nKShjdGxyX2luZm9fdCAqaCk7CisJYm9vbCAoKmludHJfcGVuZGluZykoY3Rscl9pbmZvX3QgKmgpOwogCXVuc2lnbmVkIGxvbmcgKCpjb21tYW5kX2NvbXBsZXRlZCkoY3Rscl9pbmZvX3QgKmgpOwogfTsKIHR5cGVkZWYgc3RydWN0IF9kcml2ZV9pbmZvX3N0cnVjdApAQCAtODUsOCArODUsOCBAQAogCWludAltYXhfY21kX3NnZW50cmllczsKIAlTR0Rlc2NyaXB0b3Jfc3RydWN0ICoqY21kX3NnX2xpc3Q7CiAKLSMJZGVmaW5lIERPT1JCRUxMX0lOVAkwCi0jCWRlZmluZSBQRVJGX01PREVfSU5UCTEKKyMJZGVmaW5lIFBFUkZfTU9ERV9JTlQJMAorIwlkZWZpbmUgRE9PUkJFTExfSU5UCTEKICMJZGVmaW5lIFNJTVBMRV9NT0RFX0lOVAkyCiAjCWRlZmluZSBNRU1RX01PREVfSU5UCTMKIAl1bnNpZ25lZCBpbnQgaW50cls0XTsKQEAgLTEzNywxMCArMTM3LDI3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBzY2FuX2xpc3Q7CiAJc3RydWN0IGNvbXBsZXRpb24gc2Nhbl93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OworCS8qCisJICogUGVyZm9ybWFudCBtb2RlIHRhYmxlcy4KKwkgKi8KKwl1MzIgdHJhbnNfc3VwcG9ydDsKKwl1MzIgdHJhbnNfb2Zmc2V0OworCXN0cnVjdCBUcmFuc1RhYmxlX3N0cnVjdCAqdHJhbnN0YWJsZTsKKwl1bnNpZ25lZCBsb25nIHRyYW5zTWV0aG9kOworCisJLyoKKwkgKiBQZXJmb3JtYW50IG1vZGUgY29tcGxldGlvbiBidWZmZXIKKwkgKi8KKwl1NjQgKnJlcGx5X3Bvb2w7CisJZG1hX2FkZHJfdCByZXBseV9wb29sX2RoYW5kbGU7CisJdTY0ICpyZXBseV9wb29sX2hlYWQ7CisJc2l6ZV90IHJlcGx5X3Bvb2xfc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHJlcGx5X3Bvb2xfd3JhcGFyb3VuZDsKKwl1MzIgKmJsb2NrRmV0Y2hUYWJsZTsKIH07CiAKLS8qICBEZWZpbmluZyB0aGUgZGlmZmVudCBhY2Nlc3NfbWVudGhvZHMgKi8KLS8qCisvKiAgRGVmaW5pbmcgdGhlIGRpZmZlbnQgYWNjZXNzX21ldGhvZHMKKyAqCiAgKiBNZW1vcnkgbWFwcGVkIEZJRk8gaW50ZXJmYWNlIChTTUFSVCA1M3h4IGNhcmRzKQogICovCiAjZGVmaW5lIFNBNV9ET09SQkVMTAkweDIwCkBAIC0xNTksMTkgKzE3Niw0NyBAQAogI2RlZmluZSBTQTVCX0lOVFJfUEVORElORwkweDA0CiAjZGVmaW5lIEZJRk9fRU1QVFkJCTB4ZmZmZmZmZmYJCiAjZGVmaW5lIENDSVNTX0ZJUk1XQVJFX1JFQURZCTB4ZmZmZjAwMDAgLyogdmFsdWUgaW4gc2NyYXRjaHBhZCByZWdpc3RlciAqLworLyogUGVyZi4gbW9kZSBmbGFncyAqLworI2RlZmluZSBTQTVfUEVSRl9JTlRSX1BFTkRJTkcJMHgwNAorI2RlZmluZSBTQTVfUEVSRl9JTlRSX09GRgkweDA1CisjZGVmaW5lIFNBNV9PVVREQl9TVEFUVVNfUEVSRl9CSVQJMHgwMQorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQJMHgwMQorI2RlZmluZSBTQTVfT1VUREJfQ0xFQVIgICAgICAgICAweEEwCisjZGVmaW5lIFNBNV9PVVREQl9DTEVBUl9QRVJGX0JJVCAgICAgICAgMHgwMQorI2RlZmluZSBTQTVfT1VUREJfU1RBVFVTICAgICAgICAweDlDCisKIAogI2RlZmluZSAgQ0lTU19FUlJPUl9CSVQJCTB4MDIKIAogI2RlZmluZSBDQ0lTU19JTlRSX09OIAkxIAogI2RlZmluZSBDQ0lTU19JTlRSX09GRgkwCisKKworLyogQ0NJU1NfQk9BUkRfUkVBRFlfV0FJVF9TRUNTIGlzIGhvdyBsb25nIHRvIHdhaXQgZm9yIGEgYm9hcmQKKyAqIHRvIGJlY29tZSByZWFkeSwgaW4gc2Vjb25kcywgYmVmb3JlIGdpdmluZyB1cCBvbiBpdC4KKyAqIENDSVNTX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MgKiBpcyBob3cgbG9uZyB0byB3YWl0CisgKiBiZXR3ZWVuIHBvbGxpbmcgdGhlIGJvYXJkIHRvIHNlZSBpZiBpdCBpcyByZWFkeSwgaW4KKyAqIG1pbGxpc2Vjb25kcy4gIENDSVNTX0JPQVJEX1JFQURZX0lURVJBVElPTlMgaXMgZGVyaXZlZAorICogdGhlIGFib3ZlLgorICovCisjZGVmaW5lIENDSVNTX0JPQVJEX1JFQURZX1dBSVRfU0VDUyAoMTIwKQorI2RlZmluZSBDQ0lTU19CT0FSRF9SRUFEWV9QT0xMX0lOVEVSVkFMX01TRUNTICgxMDApCisjZGVmaW5lIENDSVNTX0JPQVJEX1JFQURZX0lURVJBVElPTlMgXAorCSgoQ0NJU1NfQk9BUkRfUkVBRFlfV0FJVF9TRUNTICogMTAwMCkgLyBcCisJCUNDSVNTX0JPQVJEX1JFQURZX1BPTExfSU5URVJWQUxfTVNFQ1MpCisjZGVmaW5lIENDSVNTX1BPU1RfUkVTRVRfUEFVU0VfTVNFQ1MgKDMwMDApCisjZGVmaW5lIENDSVNTX1BPU1RfUkVTRVRfTk9PUF9JTlRFUlZBTF9NU0VDUyAoMTAwMCkKKyNkZWZpbmUgQ0NJU1NfUE9TVF9SRVNFVF9OT09QX1JFVFJJRVMgKDEyKQorCiAvKiAKIAlTZW5kIHRoZSBjb21tYW5kIHRvIHRoZSBoYXJkd2FyZSAKICovCiBzdGF0aWMgdm9pZCBTQTVfc3VibWl0X2NvbW1hbmQoIGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpIAogewogI2lmZGVmIENDSVNTX0RFQlVHCi0JIHByaW50aygiU2VuZGluZyAleCAtIGRvd24gdG8gY29udHJvbGxlclxuIiwgYy0+YnVzYWRkciApOwotI2VuZGlmIC8qIENDSVNTX0RFQlVHICovIAorCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IFNlbmRpbmcgJTA4eCAtIGRvd24gdG8gY29udHJvbGxlclxuIiwKKwkJCWgtPmN0bHIsIGMtPmJ1c2FkZHIpOworI2VuZGlmIC8qIENDSVNTX0RFQlVHICovCiAgICAgICAgICB3cml0ZWwoYy0+YnVzYWRkciwgaC0+dmFkZHIgKyBTQTVfUkVRVUVTVF9QT1JUX09GRlNFVCk7CiAJIGgtPmNvbW1hbmRzX291dHN0YW5kaW5nKys7CiAJIGlmICggaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcgPiBoLT5tYXhfb3V0c3RhbmRpbmcpCkBAIC0yMTQsNiArMjU5LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKICAgICAgICAgfQogfQorCisvKiBQZXJmb3JtYW50IG1vZGUgaW50cl9tYXNrICovCitzdGF0aWMgdm9pZCBTQTVfcGVyZm9ybWFudF9pbnRyX21hc2soY3Rscl9pbmZvX3QgKmgsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWlmICh2YWwpIHsgLyogdHVybiBvbiBpbnRlcnJ1cHRzICovCisJCWgtPmludGVycnVwdHNfZW5hYmxlZCA9IDE7CisJCXdyaXRlbCgwLCBoLT52YWRkciArIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUKTsKKwl9IGVsc2UgeworCQloLT5pbnRlcnJ1cHRzX2VuYWJsZWQgPSAwOworCQl3cml0ZWwoU0E1X1BFUkZfSU5UUl9PRkYsCisJCQkJaC0+dmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJfQorfQorCiAvKgogICogIFJldHVybnMgdHJ1ZSBpZiBmaWZvIGlzIGZ1bGwuICAKICAqIApAQCAtMjUwLDEwICszMDksNDQgQEAKIAlyZXR1cm4gKCByZWdpc3Rlcl92YWx1ZSk7IAogCiB9CisKKy8qIFBlcmZvcm1hbnQgbW9kZSBjb21tYW5kIGNvbXBsZXRlZCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkKGN0bHJfaW5mb190ICpoKQoreworCXVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJfdmFsdWUgPSBGSUZPX0VNUFRZOworCisJLyogZmx1c2ggdGhlIGNvbnRyb2xsZXIgd3JpdGUgb2YgdGhlIHJlcGx5IHF1ZXVlIGJ5IHJlYWRpbmcKKwkgKiBvdXRib3VuZCBkb29yYmVsbCBzdGF0dXMgcmVnaXN0ZXIuCisJICovCisJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9PVVREQl9TVEFUVVMpOworCS8qIG1zaSBhdXRvIGNsZWFycyB0aGUgaW50ZXJydXB0IHBlbmRpbmcgYml0LiAqLworCWlmICghKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpKSB7CisJCXdyaXRlbChTQTVfT1VUREJfQ0xFQVJfUEVSRl9CSVQsIGgtPnZhZGRyICsgU0E1X09VVERCX0NMRUFSKTsKKwkJLyogRG8gYSByZWFkIGluIG9yZGVyIHRvIGZsdXNoIHRoZSB3cml0ZSB0byB0aGUgY29udHJvbGxlcgorCQkgKiAoYXMgcGVyIHNwZWMuKQorCQkgKi8KKwkJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9PVVREQl9TVEFUVVMpOworCX0KKworCWlmICgoKihoLT5yZXBseV9wb29sX2hlYWQpICYgMSkgPT0gKGgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCkpIHsKKwkJcmVnaXN0ZXJfdmFsdWUgPSAqKGgtPnJlcGx5X3Bvb2xfaGVhZCk7CisJCShoLT5yZXBseV9wb29sX2hlYWQpKys7CisJCWgtPmNvbW1hbmRzX291dHN0YW5kaW5nLS07CisJfSBlbHNlIHsKKwkJcmVnaXN0ZXJfdmFsdWUgPSBGSUZPX0VNUFRZOworCX0KKwkvKiBDaGVjayBmb3Igd3JhcGFyb3VuZCAqLworCWlmIChoLT5yZXBseV9wb29sX2hlYWQgPT0gKGgtPnJlcGx5X3Bvb2wgKyBoLT5tYXhfY29tbWFuZHMpKSB7CisJCWgtPnJlcGx5X3Bvb2xfaGVhZCA9IGgtPnJlcGx5X3Bvb2w7CisJCWgtPnJlcGx5X3Bvb2xfd3JhcGFyb3VuZCBePSAxOworCX0KKworCXJldHVybiByZWdpc3Rlcl92YWx1ZTsKK30KIC8qCiAgKglSZXR1cm5zIHRydWUgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuLiAKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgU0E1X2ludHJfcGVuZGluZyhjdGxyX2luZm9fdCAqaCkKK3N0YXRpYyBib29sIFNBNV9pbnRyX3BlbmRpbmcoY3Rscl9pbmZvX3QgKmgpCiB7CiAJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSAgPSAKIAkJcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOwpAQCAtMjY4LDcgKzM2MSw3IEBACiAvKgogICogICAgICBSZXR1cm5zIHRydWUgaWYgYW4gaW50ZXJydXB0IGlzIHBlbmRpbmcuLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVCX2ludHJfcGVuZGluZyhjdGxyX2luZm9fdCAqaCkKK3N0YXRpYyBib29sIFNBNUJfaW50cl9wZW5kaW5nKGN0bHJfaW5mb190ICpoKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlICA9CiAgICAgICAgICAgICAgICAgcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOwpAQCAtMjgwLDYgKzM3MywyMCBAQAogICAgICAgICByZXR1cm4gMCA7CiB9CiAKK3N0YXRpYyBib29sIFNBNV9wZXJmb3JtYW50X2ludHJfcGVuZGluZyhjdGxyX2luZm9fdCAqaCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfSU5UUl9TVEFUVVMpOworCisJaWYgKCFyZWdpc3Rlcl92YWx1ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpCisJCXJldHVybiB0cnVlOworCisJLyogUmVhZCBvdXRib3VuZCBkb29yYmVsbCB0byBmbHVzaCAqLworCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdmFsdWUgJiBTQTVfT1VUREJfU1RBVFVTX1BFUkZfQklUOworfQogCiBzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X2FjY2VzcyA9IHsKIAlTQTVfc3VibWl0X2NvbW1hbmQsCkBAIC0yOTcsNiArNDA0LDE0IEBACiAgICAgICAgIFNBNV9jb21wbGV0ZWQsCiB9OwogCitzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X3BlcmZvcm1hbnRfYWNjZXNzID0geworCVNBNV9zdWJtaXRfY29tbWFuZCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX21hc2ssCisJU0E1X2ZpZm9fZnVsbCwKKwlTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcsCisJU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkLAorfTsKKwogc3RydWN0IGJvYXJkX3R5cGUgewogCV9fdTMyCWJvYXJkX2lkOwogCWNoYXIJKnByb2R1Y3RfbmFtZTsKQEAgLTMwNCw2ICs0MTksNCBAQAogCWludCBucl9jbWRzOyAvKiBNYXggY21kcyB0aGlzIGtpbmQgb2YgY3RsciBjYW4gaGFuZGxlLiAqLwogfTsKIAotI2RlZmluZSBDQ0lTU19MT0NLKGkpCSgmaGJhW2ldLT5sb2NrKQotCiAjZW5kaWYgLyogQ0NJU1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKaW5kZXggZTYyNGZmOS4uZWIwNjBmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCkBAIC01Miw4ICs1MiwxMCBAQAogLyogQ29uZmlndXJhdGlvbiBUYWJsZSAqLwogI2RlZmluZSBDRkdUQkxfQ2hhbmdlUmVxICAgICAgICAweDAwMDAwMDAxbAogI2RlZmluZSBDRkdUQkxfQWNjQ21kcyAgICAgICAgICAweDAwMDAwMDAxbAorI2RlZmluZSBET09SQkVMTF9DVExSX1JFU0VUICAgICAweDAwMDAwMDA0bAogCiAjZGVmaW5lIENGR1RCTF9UcmFuc19TaW1wbGUgICAgIDB4MDAwMDAwMDJsCisjZGVmaW5lIENGR1RCTF9UcmFuc19QZXJmb3JtYW50IDB4MDAwMDAwMDRsCiAKICNkZWZpbmUgQ0ZHVEJMX0J1c1R5cGVfVWx0cmEyICAgMHgwMDAwMDAwMWwKICNkZWZpbmUgQ0ZHVEJMX0J1c1R5cGVfVWx0cmEzICAgMHgwMDAwMDAwMmwKQEAgLTE3MywxMiArMTc1LDE1IEBACiAgKiBQQURfNjQgY2FuIGJlIGFkanVzdGVkIGluZGVwZW5kZW50bHkgYXMgbmVlZGVkIGZvciAzMi1iaXQKICAqIGFuZCA2NC1iaXRzIHN5c3RlbXMuCiAgKi8KLSNkZWZpbmUgQ09NTUFORExJU1RfQUxJR05NRU5UICg4KQorI2RlZmluZSBDT01NQU5ETElTVF9BTElHTk1FTlQgKDMyKQogI2RlZmluZSBJU182NF9CSVQgKChzaXplb2YobG9uZykgLSA0KS80KQogI2RlZmluZSBJU18zMl9CSVQgKCFJU182NF9CSVQpCiAjZGVmaW5lIFBBRF8zMiAoMCkKICNkZWZpbmUgUEFEXzY0ICg0KQogI2RlZmluZSBQQURTSVpFIChJU18zMl9CSVQgKiBQQURfMzIgKyBJU182NF9CSVQgKiBQQURfNjQpCisjZGVmaW5lIERJUkVDVF9MT09LVVBfQklUIDB4MTAKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA1CisKIHR5cGVkZWYgc3RydWN0IF9Db21tYW5kTGlzdF9zdHJ1Y3QgewogICBDb21tYW5kTGlzdEhlYWRlcl9zdHJ1Y3QgSGVhZGVyOwogICBSZXF1ZXN0QmxvY2tfc3RydWN0ICAgICAgUmVxdWVzdDsKQEAgLTE5NSw3ICsyMDAsNyBAQAogICBzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKICAgaW50CSByZXRyeV9jb3VudDsKICAgdm9pZCAqIHNjc2lfY21kOwotICBjaGFyICAgcGFkW1BBRFNJWkVdOworICBjaGFyIHBhZFtQQURTSVpFXTsKIH0gQ29tbWFuZExpc3Rfc3RydWN0OwogCiAvKiBDb25maWd1cmF0aW9uIFRhYmxlIFN0cnVjdHVyZSAqLwpAQCAtMjA5LDEyICsyMTQsMTUgQEAKIHR5cGVkZWYgc3RydWN0IF9DZmdUYWJsZV9zdHJ1Y3QgewogICBCWVRFICAgICAgICAgICAgIFNpZ25hdHVyZVs0XTsKICAgRFdPUkQgICAgICAgICAgICBTcGVjVmFsZW5jZTsKKyNkZWZpbmUgU0lNUExFX01PREUJMHgwMgorI2RlZmluZSBQRVJGT1JNQU5UX01PREUJMHgwNAorI2RlZmluZSBNRU1RX01PREUJMHgwOAogICBEV09SRCAgICAgICAgICAgIFRyYW5zcG9ydFN1cHBvcnQ7CiAgIERXT1JEICAgICAgICAgICAgVHJhbnNwb3J0QWN0aXZlOwogICBIb3N0V3JpdGVfc3RydWN0IEhvc3RXcml0ZTsKICAgRFdPUkQgICAgICAgICAgICBDbWRzT3V0TWF4OwogICBEV09SRCAgICAgICAgICAgIEJ1c1R5cGVzOwotICBEV09SRCAgICAgICAgICAgIFJlc2VydmVkOyAKKyAgRFdPUkQgICAgICAgICAgICBUcmFuc01ldGhvZE9mZnNldDsKICAgQllURSAgICAgICAgICAgICBTZXJ2ZXJOYW1lWzE2XTsKICAgRFdPUkQgICAgICAgICAgICBIZWFydEJlYXQ7CiAgIERXT1JEICAgICAgICAgICAgU0NTSV9QcmVmZXRjaDsKQEAgLTIyMiw2ICsyMzAsMjggQEAKICAgRFdPUkQgICAgICAgICAgICBNYXhMb2dpY2FsVW5pdHM7CiAgIERXT1JEICAgICAgICAgICAgTWF4UGh5c2ljYWxEcml2ZXM7CiAgIERXT1JEICAgICAgICAgICAgTWF4UGh5c2ljYWxEcml2ZXNQZXJMb2dpY2FsVW5pdDsKKyAgRFdPUkQgICAgICAgICAgICBNYXhQZXJmb3JtYW50TW9kZUNvbW1hbmRzOworICB1OAkJICAgcmVzZXJ2ZWRbMHg3OCAtIDB4NThdOworICB1MzIJCSAgIG1pc2NfZndfc3VwcG9ydDsgLyogb2Zmc2V0IDB4NzggKi8KKyNkZWZpbmUgTUlTQ19GV19ET09SQkVMTF9SRVNFVCAoMHgwMikKIH0gQ2ZnVGFibGVfc3RydWN0OworCitzdHJ1Y3QgVHJhbnNUYWJsZV9zdHJ1Y3QgeworICB1MzIgQmxvY2tGZXRjaDA7CisgIHUzMiBCbG9ja0ZldGNoMTsKKyAgdTMyIEJsb2NrRmV0Y2gyOworICB1MzIgQmxvY2tGZXRjaDM7CisgIHUzMiBCbG9ja0ZldGNoNDsKKyAgdTMyIEJsb2NrRmV0Y2g1OworICB1MzIgQmxvY2tGZXRjaDY7CisgIHUzMiBCbG9ja0ZldGNoNzsKKyAgdTMyIFJlcFFTaXplOworICB1MzIgUmVwUUNvdW50OworICB1MzIgUmVwUUN0ckFkZHJMb3czMjsKKyAgdTMyIFJlcFFDdHJBZGRySGlnaDMyOworICB1MzIgUmVwUUFkZHIwTG93MzI7CisgIHUzMiBSZXBRQWRkcjBIaWdoMzI7Cit9OworCiAjcHJhZ21hIHBhY2soKQkgCiAjZW5kaWYgLyogQ0NJU1NfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKaW5kZXggNzJkYWU5Mi4uNTc1NDk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19zY3NpLmMKQEAgLTQ0LDEzICs0NCwxNSBAQAogI2RlZmluZSBDQ0lTU19BQk9SVF9NU0cgMHgwMAogI2RlZmluZSBDQ0lTU19SRVNFVF9NU0cgMHgwMQogCi1zdGF0aWMgaW50IGZpbGxfY21kKENvbW1hbmRMaXN0X3N0cnVjdCAqYywgX191OCBjbWQsIGludCBjdGxyLCB2b2lkICpidWZmLAorc3RhdGljIGludCBmaWxsX2NtZChjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjLCBfX3U4IGNtZCwgdm9pZCAqYnVmZiwKIAlzaXplX3Qgc2l6ZSwKIAlfX3U4IHBhZ2VfY29kZSwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCWludCBjbWRfdHlwZSk7CiAKLXN0YXRpYyBDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZF9hbGxvYyhjdGxyX2luZm9fdCAqaCwgaW50IGdldF9mcm9tX3Bvb2wpOwotc3RhdGljIHZvaWQgY21kX2ZyZWUoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYywgaW50IGdvdF9mcm9tX3Bvb2wpOworc3RhdGljIENvbW1hbmRMaXN0X3N0cnVjdCAqY21kX2FsbG9jKGN0bHJfaW5mb190ICpoKTsKK3N0YXRpYyBDb21tYW5kTGlzdF9zdHJ1Y3QgKmNtZF9zcGVjaWFsX2FsbG9jKGN0bHJfaW5mb190ICpoKTsKK3N0YXRpYyB2b2lkIGNtZF9mcmVlKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpOworc3RhdGljIHZvaWQgY21kX3NwZWNpYWxfZnJlZShjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKTsKIAogc3RhdGljIGludCBjY2lzc19zY3NpX3Byb2NfaW5mbygKIAkJc3RydWN0IFNjc2lfSG9zdCAqc2gsCkBAIC05Myw4ICs5NSw4IEBACiAKICNwcmFnbWEgcGFjaygxKQogCi0jZGVmaW5lIFNDU0lfUEFEXzMyIDAKLSNkZWZpbmUgU0NTSV9QQURfNjQgMAorI2RlZmluZSBTQ1NJX1BBRF8zMiA4CisjZGVmaW5lIFNDU0lfUEFEXzY0IDgKIAogc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCB7CiAJQ29tbWFuZExpc3Rfc3RydWN0IGNtZDsKQEAgLTEyNywxNiArMTI5LDE2IEBACiAJc3BpbmxvY2tfdCBsb2NrOyAvLyB0byBwcm90ZWN0IGNjaXNzc2NzaVtjdGxyXTsgCiB9OwogCi0jZGVmaW5lIENQUV9UQVBFX0xPQ0soY3RsciwgZmxhZ3MpIHNwaW5fbG9ja19pcnFzYXZlKCBcCi0JJmhiYVtjdGxyXS0+c2NzaV9jdGxyLT5sb2NrLCBmbGFncyk7Ci0jZGVmaW5lIENQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncykgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSggXAotCSZoYmFbY3Rscl0tPnNjc2lfY3Rsci0+bG9jaywgZmxhZ3MpOworI2RlZmluZSBDUFFfVEFQRV9MT0NLKGgsIGZsYWdzKSBzcGluX2xvY2tfaXJxc2F2ZSggXAorCSZoLT5zY3NpX2N0bHItPmxvY2ssIGZsYWdzKTsKKyNkZWZpbmUgQ1BRX1RBUEVfVU5MT0NLKGgsIGZsYWdzKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCBcCisJJmgtPnNjc2lfY3Rsci0+bG9jaywgZmxhZ3MpOwogCiBzdGF0aWMgQ29tbWFuZExpc3Rfc3RydWN0ICoKIHNjc2lfY21kX2FsbG9jKGN0bHJfaW5mb190ICpoKQogewogCS8qIGFzc3VtZSBvbmx5IG9uZSBwcm9jZXNzIGluIGhlcmUgYXQgYSB0aW1lLCBsb2NraW5nIGRvbmUgYnkgY2FsbGVyLiAqLwotCS8qIHVzZSBDQ0lTU19MT0NLKGN0bHIpICovCisJLyogdXNlIGgtPmxvY2sgKi8KIAkvKiBtaWdodCBiZSBiZXR0ZXIgdG8gcmV3cml0ZSBob3cgd2UgYWxsb2NhdGUgc2NzaSBjb21tYW5kcyBpbiBhIHdheSB0aGF0ICovCiAJLyogbmVlZHMgbm8gbG9ja2luZyBhdCBhbGwuICovCiAKQEAgLTE3NywxMCArMTc5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIAotc2NzaV9jbWRfZnJlZShjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjbWQpCitzY3NpX2NtZF9mcmVlKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCiB7CiAJLyogYXNzdW1lIG9ubHkgb25lIHByb2Nlc3MgaW4gaGVyZSBhdCBhIHRpbWUsIGxvY2tpbmcgZG9uZSBieSBjYWxsZXIuICovCi0JLyogdXNlIENDSVNTX0xPQ0soY3RscikgKi8KKwkvKiB1c2UgaC0+bG9jayAqLwogCS8qIGRyb3AgdGhlIGZyZWUgbWVtb3J5IGNodW5rIG9uIHRvcCBvZiB0aGUgc3RhY2suICovCiAKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqc2E7CkBAIC0xOTAsMjIgKzE5MiwyMyBAQAogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAlzdGstPnRvcCsrOwogCWlmIChzdGstPnRvcCA+PSBDTURfU1RBQ0tfU0laRSkgewotCQlwcmludGsoImNjaXNzOiBzY3NpX2NtZF9mcmVlIGNhbGxlZCB0b28gbWFueSB0aW1lcy5cbiIpOworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsCisJCQkic2NzaV9jbWRfZnJlZSBjYWxsZWQgdG9vIG1hbnkgdGltZXMuXG4iKTsKIAkJQlVHKCk7CiAJfQotCXN0ay0+ZWxlbVtzdGstPnRvcF0gPSAoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCAqKSBjbWQ7CisJc3RrLT5lbGVtW3N0ay0+dG9wXSA9IChzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfZWxlbV90ICopIGM7CiB9CiAKIHN0YXRpYyBpbnQKLXNjc2lfY21kX3N0YWNrX3NldHVwKGludCBjdGxyLCBzdHJ1Y3QgY2Npc3Nfc2NzaV9hZGFwdGVyX2RhdGFfdCAqc2EpCitzY3NpX2NtZF9zdGFja19zZXR1cChjdGxyX2luZm9fdCAqaCwgc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNhKQogewogCWludCBpOwogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CiAJc2l6ZV90IHNpemU7CiAKLQlzYS0+Y21kX3NnX2xpc3QgPSBjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaGJhW2N0bHJdLAotCQloYmFbY3Rscl0tPmNoYWluc2l6ZSwgQ01EX1NUQUNLX1NJWkUpOwotCWlmICghc2EtPmNtZF9zZ19saXN0ICYmIGhiYVtjdGxyXS0+Y2hhaW5zaXplID4gMCkKKwlzYS0+Y21kX3NnX2xpc3QgPSBjY2lzc19hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaCwKKwkJaC0+Y2hhaW5zaXplLCBDTURfU1RBQ0tfU0laRSk7CisJaWYgKCFzYS0+Y21kX3NnX2xpc3QgJiYgaC0+Y2hhaW5zaXplID4gMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCkBAIC0yMTUsNyArMjE4LDcgQEAKIAlCVUlMRF9CVUdfT04oKHNpemVvZigqc3RrLT5wb29sKSAlIENPTU1BTkRMSVNUX0FMSUdOTUVOVCkgIT0gMCk7CiAJLyogcGNpX2FsbG9jX2NvbnNpc3RlbnQgZ3VhcmFudGVlcyAzMi1iaXQgRE1BIGFkZHJlc3Mgd2lsbCBiZSB1c2VkICovCiAJc3RrLT5wb29sID0gKHN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja19lbGVtX3QgKikKLQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoaGJhW2N0bHJdLT5wZGV2LCBzaXplLCAmc3RrLT5jbWRfcG9vbF9oYW5kbGUpOworCQlwY2lfYWxsb2NfY29uc2lzdGVudChoLT5wZGV2LCBzaXplLCAmc3RrLT5jbWRfcG9vbF9oYW5kbGUpOwogCiAJaWYgKHN0ay0+cG9vbCA9PSBOVUxMKSB7CiAJCWNjaXNzX2ZyZWVfc2dfY2hhaW5fYmxvY2tzKHNhLT5jbWRfc2dfbGlzdCwgQ01EX1NUQUNLX1NJWkUpOwpAQCAtMjM0LDIzICsyMzcsMjIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNjc2lfY21kX3N0YWNrX2ZyZWUoaW50IGN0bHIpCitzY3NpX2NtZF9zdGFja19mcmVlKGN0bHJfaW5mb190ICpoKQogewogCXN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICpzYTsKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCXNpemVfdCBzaXplOwogCi0Jc2EgPSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKKwlzYSA9IGgtPnNjc2lfY3RscjsKIAlzdGsgPSAmc2EtPmNtZF9zdGFjazsgCiAJaWYgKHN0ay0+dG9wICE9IENNRF9TVEFDS19TSVpFLTEpIHsKLQkJcHJpbnRrKCAiY2Npc3M6ICVkIHNjc2kgY29tbWFuZHMgYXJlIHN0aWxsIG91dHN0YW5kaW5nLlxuIiwKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCSJidWc6ICVkIHNjc2kgY29tbWFuZHMgYXJlIHN0aWxsIG91dHN0YW5kaW5nLlxuIiwKIAkJCUNNRF9TVEFDS19TSVpFIC0gc3RrLT50b3ApOwotCQkvLyBCVUcoKTsKLQkJcHJpbnRrKCJXRSBIQVZFIEEgQlVHIEhFUkUhISEgc3RrPTB4JXBcbiIsIHN0ayk7CiAJfQogCXNpemUgPSBzaXplb2Yoc3RydWN0IGNjaXNzX3Njc2lfY21kX3N0YWNrX2VsZW1fdCkgKiBDTURfU1RBQ0tfU0laRTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2N0bHJdLT5wZGV2LCBzaXplLCBzdGstPnBvb2wsIHN0ay0+Y21kX3Bvb2xfaGFuZGxlKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemUsIHN0ay0+cG9vbCwgc3RrLT5jbWRfcG9vbF9oYW5kbGUpOwogCXN0ay0+cG9vbCA9IE5VTEw7CiAJY2Npc3NfZnJlZV9zZ19jaGFpbl9ibG9ja3Moc2EtPmNtZF9zZ19saXN0LCBDTURfU1RBQ0tfU0laRSk7CiB9CkBAIC0zNDIsMjAgKzM0NCwyMCBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgCi1maW5kX2J1c190YXJnZXRfbHVuKGludCBjdGxyLCBpbnQgKmJ1cywgaW50ICp0YXJnZXQsIGludCAqbHVuKQorZmluZF9idXNfdGFyZ2V0X2x1bihjdGxyX2luZm9fdCAqaCwgaW50ICpidXMsIGludCAqdGFyZ2V0LCBpbnQgKmx1bikKIHsKIAkvKiBmaW5kcyBhbiB1bnVzZWQgYnVzLCB0YXJnZXQsIGx1biBmb3IgYSBuZXcgZGV2aWNlICovCi0JLyogYXNzdW1lcyBoYmFbY3Rscl0tPnNjc2lfY3Rsci0+bG9jayBpcyBoZWxkICovIAorCS8qIGFzc3VtZXMgaC0+c2NzaV9jdGxyLT5sb2NrIGlzIGhlbGQgKi8KIAlpbnQgaSwgZm91bmQ9MDsKIAl1bnNpZ25lZCBjaGFyIHRhcmdldF90YWtlbltDQ0lTU19NQVhfU0NTSV9ERVZTX1BFUl9IQkFdOwogCiAJbWVtc2V0KCZ0YXJnZXRfdGFrZW5bMF0sIDAsIENDSVNTX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSk7CiAKIAl0YXJnZXRfdGFrZW5bU0VMRl9TQ1NJX0lEXSA9IDE7CQotCWZvciAoaT0wO2k8Y2Npc3NzY3NpW2N0bHJdLm5kZXZpY2VzO2krKykKLQkJdGFyZ2V0X3Rha2VuW2NjaXNzc2NzaVtjdGxyXS5kZXZbaV0udGFyZ2V0XSA9IDE7CisJZm9yIChpID0gMDsgaSA8IGNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlczsgaSsrKQorCQl0YXJnZXRfdGFrZW5bY2Npc3NzY3NpW2gtPmN0bHJdLmRldltpXS50YXJnZXRdID0gMTsKIAkKLQlmb3IgKGk9MDtpPENDSVNTX01BWF9TQ1NJX0RFVlNfUEVSX0hCQTtpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQ0NJU1NfTUFYX1NDU0lfREVWU19QRVJfSEJBOyBpKyspIHsKIAkJaWYgKCF0YXJnZXRfdGFrZW5baV0pIHsKIAkJCSpidXMgPSAwOyAqdGFyZ2V0PWk7ICpsdW4gPSAwOyBmb3VuZD0xOwogCQkJYnJlYWs7CkBAIC0zNjksMTkgKzM3MSwxOSBAQAogfTsKIAogc3RhdGljIGludCAKLWNjaXNzX3Njc2lfYWRkX2VudHJ5KGludCBjdGxyLCBpbnQgaG9zdG5vLCAKK2NjaXNzX3Njc2lfYWRkX2VudHJ5KGN0bHJfaW5mb190ICpoLCBpbnQgaG9zdG5vLAogCQlzdHJ1Y3QgY2Npc3Nfc2NzaV9kZXZfdCAqZGV2aWNlLAogCQlzdHJ1Y3Qgc2NzaTJtYXAgKmFkZGVkLCBpbnQgKm5hZGRlZCkKIHsKLQkvKiBhc3N1bWVzIGhiYVtjdGxyXS0+c2NzaV9jdGxyLT5sb2NrIGlzIGhlbGQgKi8gCi0JaW50IG4gPSBjY2lzc3Njc2lbY3Rscl0ubmRldmljZXM7CisJLyogYXNzdW1lcyBoLT5zY3NpX2N0bHItPmxvY2sgaXMgaGVsZCAqLworCWludCBuID0gY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzOwogCXN0cnVjdCBjY2lzc19zY3NpX2Rldl90ICpzZDsKIAlpbnQgaSwgYnVzLCB0YXJnZXQsIGx1bjsKIAl1bnNpZ25lZCBjaGFyIGFkZHIxWzhdLCBhZGRyMls4XTsKIAogCWlmIChuID49IENDSVNTX01BWF9TQ1NJX0RFVlNfUEVSX0hCQSkgewotCQlwcmludGsoImNjaXNzJWQ6IFRvbyBtYW55IGRldmljZXMsICIKLQkJCSJzb21lIHdpbGwgYmUgaW5hY2Nlc3NpYmxlLlxuIiwgY3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJUb28gbWFueSBkZXZpY2VzLCAiCisJCQkic29tZSB3aWxsIGJlIGluYWNjZXNzaWJsZS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zOTcsNyArMzk5LDcgQEAKIAkJbWVtY3B5KGFkZHIxLCBkZXZpY2UtPnNjc2kzYWRkciwgOCk7CiAJCWFkZHIxWzRdID0gMDsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQkJc2QgPSAmY2Npc3NzY3NpW2N0bHJdLmRldltpXTsKKwkJCXNkID0gJmNjaXNzc2NzaVtoLT5jdGxyXS5kZXZbaV07CiAJCQltZW1jcHkoYWRkcjIsIHNkLT5zY3NpM2FkZHIsIDgpOwogCQkJYWRkcjJbNF0gPSAwOwogCQkJLyogZGlmZmVyIG9ubHkgaW4gYnl0ZSA0PyAqLwpAQCAtNDEwLDkgKzQxMiw5IEBACiAJCX0KIAl9CiAKLQlzZCA9ICZjY2lzc3Njc2lbY3Rscl0uZGV2W25dOworCXNkID0gJmNjaXNzc2NzaVtoLT5jdGxyXS5kZXZbbl07CiAJaWYgKGx1biA9PSAwKSB7Ci0JCWlmIChmaW5kX2J1c190YXJnZXRfbHVuKGN0bHIsCisJCWlmIChmaW5kX2J1c190YXJnZXRfbHVuKGgsCiAJCQkmc2QtPmJ1cywgJnNkLT50YXJnZXQsICZzZC0+bHVuKSAhPSAwKQogCQkJcmV0dXJuIC0xOwogCX0gZWxzZSB7CkBAIC00MzEsMzcgKzQzMywzNyBAQAogCW1lbWNweShzZC0+ZGV2aWNlX2lkLCBkZXZpY2UtPmRldmljZV9pZCwgc2l6ZW9mKHNkLT5kZXZpY2VfaWQpKTsKIAlzZC0+ZGV2dHlwZSA9IGRldmljZS0+ZGV2dHlwZTsKIAotCWNjaXNzc2NzaVtjdGxyXS5uZGV2aWNlcysrOworCWNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlcysrOwogCiAJLyogaW5pdGlhbGx5LCAoYmVmb3JlIHJlZ2lzdGVyaW5nIHdpdGggc2NzaSBsYXllcikgd2UgZG9uJ3QgCiAJICAga25vdyBvdXIgaG9zdG5vIGFuZCB3ZSBkb24ndCB3YW50IHRvIHByaW50IGFueXRoaW5nIGZpcnN0IAogCSAgIHRpbWUgYW55d2F5ICh0aGUgc2NzaSBsYXllcidzIGlucXVpcmllcyB3aWxsIHNob3cgdGhhdCBpbmZvKSAqLwogCWlmIChob3N0bm8gIT0gLTEpCi0JCXByaW50aygiY2Npc3MlZDogJXMgZGV2aWNlIGMlZGIlZHQlZGwlZCBhZGRlZC5cbiIsIAotCQkJY3Rsciwgc2NzaV9kZXZpY2VfdHlwZShzZC0+ZGV2dHlwZSksIGhvc3RubywKKwkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIiVzIGRldmljZSBjJWRiJWR0JWRsJWQgYWRkZWQuXG4iLAorCQkJc2NzaV9kZXZpY2VfdHlwZShzZC0+ZGV2dHlwZSksIGhvc3RubywKIAkJCXNkLT5idXMsIHNkLT50YXJnZXQsIHNkLT5sdW4pOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAotY2Npc3Nfc2NzaV9yZW1vdmVfZW50cnkoaW50IGN0bHIsIGludCBob3N0bm8sIGludCBlbnRyeSwKK2NjaXNzX3Njc2lfcmVtb3ZlX2VudHJ5KGN0bHJfaW5mb190ICpoLCBpbnQgaG9zdG5vLCBpbnQgZW50cnksCiAJc3RydWN0IHNjc2kybWFwICpyZW1vdmVkLCBpbnQgKm5yZW1vdmVkKQogewotCS8qIGFzc3VtZXMgaGJhW2N0bHJdLT5zY3NpX2N0bHItPmxvY2sgaXMgaGVsZCAqLyAKKwkvKiBhc3N1bWVzIGgtPmN0bHJdLT5zY3NpX2N0bHItPmxvY2sgaXMgaGVsZCAqLwogCWludCBpOwogCXN0cnVjdCBjY2lzc19zY3NpX2Rldl90IHNkOwogCiAJaWYgKGVudHJ5IDwgMCB8fCBlbnRyeSA+PSBDQ0lTU19NQVhfU0NTSV9ERVZTX1BFUl9IQkEpIHJldHVybjsKLQlzZCA9IGNjaXNzc2NzaVtjdGxyXS5kZXZbZW50cnldOworCXNkID0gY2Npc3NzY3NpW2gtPmN0bHJdLmRldltlbnRyeV07CiAJcmVtb3ZlZFsqbnJlbW92ZWRdLmJ1cyAgICA9IHNkLmJ1czsKIAlyZW1vdmVkWypucmVtb3ZlZF0udGFyZ2V0ID0gc2QudGFyZ2V0OwogCXJlbW92ZWRbKm5yZW1vdmVkXS5sdW4gICAgPSBzZC5sdW47CiAJKCpucmVtb3ZlZCkrKzsKLQlmb3IgKGk9ZW50cnk7aTxjY2lzc3Njc2lbY3Rscl0ubmRldmljZXMtMTtpKyspCi0JCWNjaXNzc2NzaVtjdGxyXS5kZXZbaV0gPSBjY2lzc3Njc2lbY3Rscl0uZGV2W2krMV07Ci0JY2Npc3NzY3NpW2N0bHJdLm5kZXZpY2VzLS07Ci0JcHJpbnRrKCJjY2lzcyVkOiAlcyBkZXZpY2UgYyVkYiVkdCVkbCVkIHJlbW92ZWQuXG4iLAotCQljdGxyLCBzY3NpX2RldmljZV90eXBlKHNkLmRldnR5cGUpLCBob3N0bm8sCisJZm9yIChpID0gZW50cnk7IGkgPCBjY2lzc3Njc2lbaC0+Y3Rscl0ubmRldmljZXMtMTsgaSsrKQorCQljY2lzc3Njc2lbaC0+Y3Rscl0uZGV2W2ldID0gY2Npc3NzY3NpW2gtPmN0bHJdLmRldltpKzFdOworCWNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlcy0tOworCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBkZXZpY2UgYyVkYiVkdCVkbCVkIHJlbW92ZWQuXG4iLAorCQlzY3NpX2RldmljZV90eXBlKHNkLmRldnR5cGUpLCBob3N0bm8sCiAJCQlzZC5idXMsIHNkLnRhcmdldCwgc2QubHVuKTsKIH0KIApAQCAtNDc2LDI0ICs0NzgsMjQgQEAKIAkoYSlbMV0gPT0gKGIpWzFdICYmIFwKIAkoYSlbMF0gPT0gKGIpWzBdKQogCi1zdGF0aWMgdm9pZCBmaXh1cF9ib3RjaGVkX2FkZChpbnQgY3RsciwgY2hhciAqc2NzaTNhZGRyKQorc3RhdGljIHZvaWQgZml4dXBfYm90Y2hlZF9hZGQoY3Rscl9pbmZvX3QgKmgsIGNoYXIgKnNjc2kzYWRkcikKIHsKIAkvKiBjYWxsZWQgd2hlbiBzY3NpX2FkZF9kZXZpY2UgZmFpbHMgaW4gb3JkZXIgdG8gcmUtYWRqdXN0ICovCiAJLyogY2Npc3NzY3NpW10gdG8gbWF0Y2ggdGhlIG1pZCBsYXllcidzIHZpZXcuICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgajsKLQlDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgY2Npc3NzY3NpW2N0bHJdLm5kZXZpY2VzOyBpKyspIHsKKwlDUFFfVEFQRV9MT0NLKGgsIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzOyBpKyspIHsKIAkJaWYgKG1lbWNtcChzY3NpM2FkZHIsCi0JCQkJY2Npc3NzY3NpW2N0bHJdLmRldltpXS5zY3NpM2FkZHIsIDgpID09IDApIHsKLQkJCWZvciAoaiA9IGk7IGogPCBjY2lzc3Njc2lbY3Rscl0ubmRldmljZXMtMTsgaisrKQotCQkJCWNjaXNzc2NzaVtjdGxyXS5kZXZbal0gPQotCQkJCQljY2lzc3Njc2lbY3Rscl0uZGV2W2orMV07Ci0JCQljY2lzc3Njc2lbY3Rscl0ubmRldmljZXMtLTsKKwkJCQljY2lzc3Njc2lbaC0+Y3Rscl0uZGV2W2ldLnNjc2kzYWRkciwgOCkgPT0gMCkgeworCQkJZm9yIChqID0gaTsgaiA8IGNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlcy0xOyBqKyspCisJCQkJY2Npc3NzY3NpW2gtPmN0bHJdLmRldltqXSA9CisJCQkJCWNjaXNzc2NzaVtoLT5jdGxyXS5kZXZbaisxXTsKKwkJCWNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlcy0tOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JQ1BRX1RBUEVfVU5MT0NLKGN0bHIsIGZsYWdzKTsKKwlDUFFfVEFQRV9VTkxPQ0soaCwgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGRldmljZV9pc190aGVfc2FtZShzdHJ1Y3QgY2Npc3Nfc2NzaV9kZXZfdCAqZGV2MSwKQEAgLTUxMyw3ICs1MTUsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1hZGp1c3RfY2Npc3Nfc2NzaV90YWJsZShpbnQgY3RsciwgaW50IGhvc3RubywKK2FkanVzdF9jY2lzc19zY3NpX3RhYmxlKGN0bHJfaW5mb190ICpoLCBpbnQgaG9zdG5vLAogCXN0cnVjdCBjY2lzc19zY3NpX2Rldl90IHNkW10sIGludCBuc2RzKQogewogCS8qIHNkIGNvbnRhaW5zIHNjc2kzIGFkZHJlc3NlcyBhbmQgZGV2dHlwZXMsIGJ1dApAQCAtNTM0LDE1ICs1MzYsMTUgQEAKIAkJCUdGUF9LRVJORUwpOwogCiAJaWYgKCFhZGRlZCB8fCAhcmVtb3ZlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBPdXQgb2YgbWVtb3J5IGluICIKLQkJCSJhZGp1c3RfY2Npc3Nfc2NzaV90YWJsZVxuIiwgY3Rscik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkiT3V0IG9mIG1lbW9yeSBpbiBhZGp1c3RfY2Npc3Nfc2NzaV90YWJsZVxuIik7CiAJCWdvdG8gZnJlZV9hbmRfb3V0OwogCX0KIAotCUNQUV9UQVBFX0xPQ0soY3RsciwgZmxhZ3MpOworCUNQUV9UQVBFX0xPQ0soaCwgZmxhZ3MpOwogCiAJaWYgKGhvc3RubyAhPSAtMSkgIC8qIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCB0aW1lLi4uICovCi0JCXNoID0gaGJhW2N0bHJdLT5zY3NpX2N0bHItPnNjc2lfaG9zdDsKKwkJc2ggPSBoLT5zY3NpX2N0bHItPnNjc2lfaG9zdDsKIAogCS8qIGZpbmQgYW55IGRldmljZXMgaW4gY2Npc3NzY3NpW10gdGhhdCBhcmUgbm90IGluIAogCSAgIHNkW10gYW5kIHJlbW92ZSB0aGVtIGZyb20gY2Npc3NzY3NpW10gKi8KQEAgLTU1MCw4ICs1NTIsOCBAQAogCWkgPSAwOwogCW5yZW1vdmVkID0gMDsKIAluYWRkZWQgPSAwOwotCXdoaWxlKGk8Y2Npc3NzY3NpW2N0bHJdLm5kZXZpY2VzKSB7Ci0JCWNzZCA9ICZjY2lzc3Njc2lbY3Rscl0uZGV2W2ldOworCXdoaWxlIChpIDwgY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzKSB7CisJCWNzZCA9ICZjY2lzc3Njc2lbaC0+Y3Rscl0uZGV2W2ldOwogCQlmb3VuZD0wOwogCQlmb3IgKGo9MDtqPG5zZHM7aisrKSB7CiAJCQlpZiAoU0NTSTNBRERSX0VRKHNkW2pdLnNjc2kzYWRkciwKQEAgLTU2NiwyMCArNTY4LDE4IEBACiAKIAkJaWYgKGZvdW5kID09IDApIHsgLyogZGV2aWNlIG5vIGxvbmdlciBwcmVzZW50LiAqLyAKIAkJCWNoYW5nZXMrKzsKLQkJCS8qIHByaW50aygiY2Npc3MlZDogJXMgZGV2aWNlIGMlZGIlZHQlZGwlZCByZW1vdmVkLlxuIiwKLQkJCQljdGxyLCBzY3NpX2RldmljZV90eXBlKGNzZC0+ZGV2dHlwZSksIGhvc3RubywKLQkJCQkJY3NkLT5idXMsIGNzZC0+dGFyZ2V0LCBjc2QtPmx1bik7ICovCi0JCQljY2lzc19zY3NpX3JlbW92ZV9lbnRyeShjdGxyLCBob3N0bm8sIGksCisJCQljY2lzc19zY3NpX3JlbW92ZV9lbnRyeShoLCBob3N0bm8sIGksCiAJCQkJcmVtb3ZlZCwgJm5yZW1vdmVkKTsKIAkJCS8qIHJlbW92ZSBeXl4sIGhlbmNlIGkgbm90IGluY3JlbWVudGVkICovCiAJCX0gZWxzZSBpZiAoZm91bmQgPT0gMSkgeyAvKiBkZXZpY2UgaXMgZGlmZmVyZW50IGluIHNvbWUgd2F5ICovCiAJCQljaGFuZ2VzKys7Ci0JCQlwcmludGsoImNjaXNzJWQ6IGRldmljZSBjJWRiJWR0JWRsJWQgaGFzIGNoYW5nZWQuXG4iLAotCQkJCWN0bHIsIGhvc3RubywgY3NkLT5idXMsIGNzZC0+dGFyZ2V0LCBjc2QtPmx1bik7Ci0JCQljY2lzc19zY3NpX3JlbW92ZV9lbnRyeShjdGxyLCBob3N0bm8sIGksCisJCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LAorCQkJCSJkZXZpY2UgYyVkYiVkdCVkbCVkIGhhcyBjaGFuZ2VkLlxuIiwKKwkJCQlob3N0bm8sIGNzZC0+YnVzLCBjc2QtPnRhcmdldCwgY3NkLT5sdW4pOworCQkJY2Npc3Nfc2NzaV9yZW1vdmVfZW50cnkoaCwgaG9zdG5vLCBpLAogCQkJCXJlbW92ZWQsICZucmVtb3ZlZCk7CiAJCQkvKiByZW1vdmUgXl5eLCBoZW5jZSBpIG5vdCBpbmNyZW1lbnRlZCAqLwotCQkJaWYgKGNjaXNzX3Njc2lfYWRkX2VudHJ5KGN0bHIsIGhvc3RubywgJnNkW2pdLAorCQkJaWYgKGNjaXNzX3Njc2lfYWRkX2VudHJ5KGgsIGhvc3RubywgJnNkW2pdLAogCQkJCWFkZGVkLCAmbmFkZGVkKSAhPSAwKQogCQkJCS8qIHdlIGp1c3QgcmVtb3ZlZCBvbmUsIHNvIGFkZCBjYW4ndCBmYWlsLiAqLwogCQkJCQlCVUcoKTsKQEAgLTYwMSw4ICs2MDEsOCBAQAogCiAJZm9yIChpPTA7aTxuc2RzO2krKykgewogCQlmb3VuZD0wOwotCQlmb3IgKGo9MDtqPGNjaXNzc2NzaVtjdGxyXS5uZGV2aWNlcztqKyspIHsKLQkJCWNzZCA9ICZjY2lzc3Njc2lbY3Rscl0uZGV2W2pdOworCQlmb3IgKGogPSAwOyBqIDwgY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzOyBqKyspIHsKKwkJCWNzZCA9ICZjY2lzc3Njc2lbaC0+Y3Rscl0uZGV2W2pdOwogCQkJaWYgKFNDU0kzQUREUl9FUShzZFtpXS5zY3NpM2FkZHIsCiAJCQkJY3NkLT5zY3NpM2FkZHIpKSB7CiAJCQkJaWYgKGRldmljZV9pc190aGVfc2FtZSgmc2RbaV0sIGNzZCkpCkBAIC02MTQsMTggKzYxNCwxOCBAQAogCQl9CiAJCWlmICghZm91bmQpIHsKIAkJCWNoYW5nZXMrKzsKLQkJCWlmIChjY2lzc19zY3NpX2FkZF9lbnRyeShjdGxyLCBob3N0bm8sICZzZFtpXSwKKwkJCWlmIChjY2lzc19zY3NpX2FkZF9lbnRyeShoLCBob3N0bm8sICZzZFtpXSwKIAkJCQlhZGRlZCwgJm5hZGRlZCkgIT0gMCkKIAkJCQlicmVhazsKIAkJfSBlbHNlIGlmIChmb3VuZCA9PSAxKSB7CiAJCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuLi4uICovCiAJCQljaGFuZ2VzKys7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBkZXZpY2UgIgotCQkJCSJ1bmV4cGVjdGVkbHkgY2hhbmdlZFxuIiwgY3Rscik7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJkZXZpY2UgdW5leHBlY3RlZGx5IGNoYW5nZWRcbiIpOwogCQkJLyogYnV0IGlmIGl0IGRvZXMgaGFwcGVuLCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGRldmljZSAqLwogCQl9CiAJfQotCUNQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncyk7CisJQ1BRX1RBUEVfVU5MT0NLKGgsIGZsYWdzKTsKIAogCS8qIERvbid0IG5vdGlmeSBzY3NpIG1pZCBsYXllciBvZiBhbnkgY2hhbmdlcyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCiAJLyogKG9yIGlmIHRoZXJlIGFyZSBubyBjaGFuZ2VzKSBzY3NpX3NjYW5faG9zdCB3aWxsIGRvIGl0IGxhdGVyIHRoZSAqLwpAQCAtNjQ1LDkgKzY0NSw5IEBACiAJCQkvKiBXZSBkb24ndCBleHBlY3QgdG8gZ2V0IGhlcmUuICovCiAJCQkvKiBmdXR1cmUgY21kcyB0byB0aGlzIGRldmljZSB3aWxsIGdldCBzZWxlY3Rpb24gKi8KIAkJCS8qIHRpbWVvdXQgYXMgaWYgdGhlIGRldmljZSB3YXMgZ29uZS4gKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGRpZG4ndCBmaW5kICIKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJkaWRuJ3QgZmluZCAiCiAJCQkJImMlZGIlZHQlZGwlZFxuIGZvciByZW1vdmFsLiIsCi0JCQkJY3RsciwgaG9zdG5vLCByZW1vdmVkW2ldLmJ1cywKKwkJCQlob3N0bm8sIHJlbW92ZWRbaV0uYnVzLAogCQkJCXJlbW92ZWRbaV0udGFyZ2V0LCByZW1vdmVkW2ldLmx1bik7CiAJCX0KIAl9CkBAIC02NTksMTMgKzY1OSwxMiBAQAogCQkJYWRkZWRbaV0udGFyZ2V0LCBhZGRlZFtpXS5sdW4pOwogCQlpZiAocmMgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBzY3NpX2FkZF9kZXZpY2UgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAic2NzaV9hZGRfZGV2aWNlICIKIAkJCSJjJWRiJWR0JWRsJWQgZmFpbGVkLCBkZXZpY2Ugbm90IGFkZGVkLlxuIiwKLQkJCWN0bHIsIGhvc3RubywKLQkJCWFkZGVkW2ldLmJ1cywgYWRkZWRbaV0udGFyZ2V0LCBhZGRlZFtpXS5sdW4pOworCQkJaG9zdG5vLCBhZGRlZFtpXS5idXMsIGFkZGVkW2ldLnRhcmdldCwgYWRkZWRbaV0ubHVuKTsKIAkJLyogbm93IHdlIGhhdmUgdG8gcmVtb3ZlIGl0IGZyb20gY2Npc3NzY3NpLCAqLwogCQkvKiBzaW5jZSBpdCBkaWRuJ3QgZ2V0IGFkZGVkIHRvIHNjc2kgbWlkIGxheWVyICovCi0JCWZpeHVwX2JvdGNoZWRfYWRkKGN0bHIsIGFkZGVkW2ldLnNjc2kzYWRkcik7CisJCWZpeHVwX2JvdGNoZWRfYWRkKGgsIGFkZGVkW2ldLnNjc2kzYWRkcik7CiAJfQogCiBmcmVlX2FuZF9vdXQ6CkBAIC02NzUsMzMgKzY3NCwzMyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb29rdXBfc2NzaTNhZGRyKGludCBjdGxyLCBpbnQgYnVzLCBpbnQgdGFyZ2V0LCBpbnQgbHVuLCBjaGFyICpzY3NpM2FkZHIpCitsb29rdXBfc2NzaTNhZGRyKGN0bHJfaW5mb190ICpoLCBpbnQgYnVzLCBpbnQgdGFyZ2V0LCBpbnQgbHVuLCBjaGFyICpzY3NpM2FkZHIpCiB7CiAJaW50IGk7CiAJc3RydWN0IGNjaXNzX3Njc2lfZGV2X3QgKnNkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKTsKLQlmb3IgKGk9MDtpPGNjaXNzc2NzaVtjdGxyXS5uZGV2aWNlcztpKyspIHsKLQkJc2QgPSAmY2Npc3NzY3NpW2N0bHJdLmRldltpXTsKKwlDUFFfVEFQRV9MT0NLKGgsIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzOyBpKyspIHsKKwkJc2QgPSAmY2Npc3NzY3NpW2gtPmN0bHJdLmRldltpXTsKIAkJaWYgKHNkLT5idXMgPT0gYnVzICYmCiAJCSAgICBzZC0+dGFyZ2V0ID09IHRhcmdldCAmJgogCQkgICAgc2QtPmx1biA9PSBsdW4pIHsKIAkJCW1lbWNweShzY3NpM2FkZHIsICZzZC0+c2NzaTNhZGRyWzBdLCA4KTsKLQkJCUNQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncyk7CisJCQlDUFFfVEFQRV9VTkxPQ0soaCwgZmxhZ3MpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JQ1BRX1RBUEVfVU5MT0NLKGN0bHIsIGZsYWdzKTsKKwlDUFFfVEFQRV9VTkxPQ0soaCwgZmxhZ3MpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIHZvaWQgCi1jY2lzc19zY3NpX3NldHVwKGludCBjbnRsX251bSkKK2NjaXNzX3Njc2lfc2V0dXAoY3Rscl9pbmZvX3QgKmgpCiB7CiAJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKiBzaGJhOwogCi0JY2Npc3NzY3NpW2NudGxfbnVtXS5uZGV2aWNlcyA9IDA7CisJY2Npc3NzY3NpW2gtPmN0bHJdLm5kZXZpY2VzID0gMDsKIAlzaGJhID0gKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopCiAJCWttYWxsb2Moc2l6ZW9mKCpzaGJhKSwgR0ZQX0tFUk5FTCk7CQogCWlmIChzaGJhID09IE5VTEwpCkBAIC03MDksMzUgKzcwOCwzNSBAQAogCXNoYmEtPnNjc2lfaG9zdCA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJnNoYmEtPmxvY2spOwogCXNoYmEtPnJlZ2lzdGVyZWQgPSAwOwotCWlmIChzY3NpX2NtZF9zdGFja19zZXR1cChjbnRsX251bSwgc2hiYSkgIT0gMCkgeworCWlmIChzY3NpX2NtZF9zdGFja19zZXR1cChoLCBzaGJhKSAhPSAwKSB7CiAJCWtmcmVlKHNoYmEpOwogCQlzaGJhID0gTlVMTDsKIAl9Ci0JaGJhW2NudGxfbnVtXS0+c2NzaV9jdGxyID0gc2hiYTsKKwloLT5zY3NpX2N0bHIgPSBzaGJhOwogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3Njc2lfY29tbWFuZCggQ29tbWFuZExpc3Rfc3RydWN0ICpjcCwgaW50IHRpbWVvdXQsIF9fdTMyIHRhZykKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3Njc2lfY29tbWFuZChDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsIGludCB0aW1lb3V0LAorCV9fdTMyIHRhZykKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7Ci0JY3Rscl9pbmZvX3QgKmN0bHI7CisJY3Rscl9pbmZvX3QgKmg7CiAJRXJyb3JJbmZvX3N0cnVjdCAqZWk7CiAKLQllaSA9IGNwLT5lcnJfaW5mbzsKKwllaSA9IGMtPmVycl9pbmZvOwogCiAJLyogRmlyc3QsIHNlZSBpZiBpdCB3YXMgYSBtZXNzYWdlIHJhdGhlciB0aGFuIGEgY29tbWFuZCAqLwotCWlmIChjcC0+UmVxdWVzdC5UeXBlLlR5cGUgPT0gVFlQRV9NU0cpICB7Ci0JCWNwLT5jbWRfdHlwZSA9IENNRF9NU0dfRE9ORTsKKwlpZiAoYy0+UmVxdWVzdC5UeXBlLlR5cGUgPT0gVFlQRV9NU0cpICB7CisJCWMtPmNtZF90eXBlID0gQ01EX01TR19ET05FOwogCQlyZXR1cm47CiAJfQogCi0JY21kID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgY3AtPnNjc2lfY21kOwkKLQljdGxyID0gaGJhW2NwLT5jdGxyXTsKKwljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjLT5zY3NpX2NtZDsKKwloID0gaGJhW2MtPmN0bHJdOwogCiAJc2NzaV9kbWFfdW5tYXAoY21kKTsKLQlpZiAoY3AtPkhlYWRlci5TR1RvdGFsID4gY3Rsci0+bWF4X2NtZF9zZ2VudHJpZXMpCi0JCWNjaXNzX3VubWFwX3NnX2NoYWluX2Jsb2NrKGN0bHIsIGNwKTsKKwlpZiAoYy0+SGVhZGVyLlNHVG90YWwgPiBoLT5tYXhfY21kX3NnZW50cmllcykKKwkJY2Npc3NfdW5tYXBfc2dfY2hhaW5fYmxvY2soaCwgYyk7CiAKIAljbWQtPnJlc3VsdCA9IChESURfT0sgPDwgMTYpOyAJCS8qIGhvc3QgYnl0ZSAqLwogCWNtZC0+cmVzdWx0IHw9IChDT01NQU5EX0NPTVBMRVRFIDw8IDgpOwkvKiBtc2cgYnl0ZSAqLwpAQCAtNzY0LDkgKzc2Myw4IEBACiAgICAgICAgICAgICAgICAgCQl7CiAjaWYgMAogICAgICAgICAgICAgICAgICAgICAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY21kICVwICIKLQkJCQkJImhhcyBTQ1NJIFN0YXR1cyA9ICV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgCQkJY3AsICAKLQkJCQkJCWVpLT5TY3NpU3RhdHVzKTsgCisJCQkJCQkiaGFzIFNDU0kgU3RhdHVzID0gJXhcbiIsCisJCQkJCQljLCBlaS0+U2NzaVN0YXR1cyk7CiAjZW5kaWYKIAkJCQkJY21kLT5yZXN1bHQgfD0gKGVpLT5TY3NpU3RhdHVzIDw8IDEpOwogICAgICAgICAgICAgICAgIAkJfQpAQCAtNzg2LDEzICs3ODQsMTMgQEAKIAkJCWNhc2UgQ01EX0RBVEFfVU5ERVJSVU46IC8qIGxldCBtaWQgbGF5ZXIgaGFuZGxlIGl0LiAqLwogCQkJYnJlYWs7CiAJCQljYXNlIENNRF9EQVRBX09WRVJSVU46Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGhhcyIKKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXAgaGFzIgogCQkJCQkiIGNvbXBsZXRlZCB3aXRoIGRhdGEgb3ZlcnJ1biAiCi0JCQkJCSJyZXBvcnRlZFxuIiwgY3ApOworCQkJCQkicmVwb3J0ZWRcbiIsIGMpOwogCQkJYnJlYWs7CiAJCQljYXNlIENNRF9JTlZBTElEOiB7Ci0JCQkJLyogcHJpbnRfYnl0ZXMoY3AsIHNpemVvZigqY3ApLCAxLCAwKTsKLQkJCQlwcmludF9jbWQoY3ApOyAqLworCQkJCS8qIHByaW50X2J5dGVzKGMsIHNpemVvZigqYyksIDEsIDApOworCQkJCXByaW50X2NtZChjKTsgKi8KICAgICAgLyogV2UgZ2V0IENNRF9JTlZBTElEIGlmIHlvdSBhZGRyZXNzIGEgbm9uLWV4aXN0ZW50IHRhcGUgZHJpdmUgaW5zdGVhZAogCW9mIGEgc2VsZWN0aW9uIHRpbWVvdXQgKG5vIHJlc3BvbnNlKS4gIFlvdSB3aWxsIHNlZSB0aGlzIGlmIHlvdSB5YW5rIAogCW91dCBhIHRhcGUgZHJpdmUsIHRoZW4gdHJ5IHRvIGFjY2VzcyBpdC4gVGhpcyBpcyBraW5kIG9mIGEgc2hhbWUKQEAgLTgwMiw1NCArODAwLDUwIEBACiAJCQkJfQogCQkJYnJlYWs7CiAJCQljYXNlIENNRF9QUk9UT0NPTF9FUlI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjcCAlcCBoYXMgIgotCQkJCQkicHJvdG9jb2wgZXJyb3IgXG4iLCBjcCk7CisJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkJIiVwIGhhcyBwcm90b2NvbCBlcnJvclxuIiwgYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJCWNhc2UgQ01EX0hBUkRXQVJFX0VSUjoKIAkJCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGhhZCAiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaGFyZHdhcmUgZXJyb3JcbiIsIGNwKTsKKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCQkiJXAgaGFkIGhhcmR3YXJlIGVycm9yXG4iLCBjKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCQkJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgogCQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjcCAlcCBoYWQgIgotCQkJCQkiY29ubmVjdGlvbiBsb3N0XG4iLCBjcCk7CisJCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkJIiVwIGhhZCBjb25uZWN0aW9uIGxvc3RcbiIsIGMpOwogCQkJYnJlYWs7CiAJCQljYXNlIENNRF9BQk9SVEVEOgogCQkJCWNtZC0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjcCAlcCB3YXMgIgotCQkJCQkiYWJvcnRlZFxuIiwgY3ApOworCQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcCB3YXMgYWJvcnRlZFxuIiwgYyk7CiAJCQlicmVhazsKIAkJCWNhc2UgQ01EX0FCT1JUX0ZBSUxFRDoKIAkJCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY3AgJXAgcmVwb3J0cyAiCi0JCQkJCSJhYm9ydCBmYWlsZWRcbiIsIGNwKTsKKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCQkiJXAgcmVwb3J0cyBhYm9ydCBmYWlsZWRcbiIsIGMpOwogCQkJYnJlYWs7CiAJCQljYXNlIENNRF9VTlNPTElDSVRFRF9BQk9SVDoKIAkJCQljbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY3AgJXAgYWJvcnRlZCAiCi0JCQkJCSJkbyB0byBhbiB1bnNvbGljaXRlZCBhYm9ydFxuIiwgY3ApOworCQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcCBhYm9ydGVkIGRvIHRvIGFuICIKKwkJCQkJInVuc29saWNpdGVkIGFib3J0XG4iLCBjKTsKIAkJCWJyZWFrOwogCQkJY2FzZSBDTURfVElNRU9VVDoKIAkJCQljbWQtPnJlc3VsdCA9IERJRF9USU1FX09VVCA8PCAxNjsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY3AgJXAgdGltZWRvdXRcbiIsCi0JCQkJCWNwKTsKKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXAgdGltZWRvdXRcbiIsIGMpOwogCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjcCAlcCByZXR1cm5lZCAiCi0JCQkJCSJ1bmtub3duIHN0YXR1cyAleFxuIiwgY3AsIAorCQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkJCSIlcCByZXR1cm5lZCB1bmtub3duIHN0YXR1cyAleFxuIiwgYywKIAkJCQkJCWVpLT5Db21tYW5kU3RhdHVzKTsgCiAJCX0KIAl9Ci0JLy8gcHJpbnRrKCJjOiVwOmMlZGIlZHQlZGwlZCAiLCBjbWQsIGN0bHItPmN0bHIsIGNtZC0+Y2hhbm5lbCwgCi0JLy8JY21kLT50YXJnZXQsIGNtZC0+bHVuKTsKIAljbWQtPnNjc2lfZG9uZShjbWQpOwotCXNjc2lfY21kX2ZyZWUoY3RsciwgY3ApOworCXNjc2lfY21kX2ZyZWUoaCwgYyk7CiB9CiAKIHN0YXRpYyBpbnQKLWNjaXNzX3Njc2lfZGV0ZWN0KGludCBjdGxyKQorY2Npc3Nfc2NzaV9kZXRlY3QoY3Rscl9pbmZvX3QgKmgpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2g7CiAJaW50IGVycm9yOwpAQCAtODYwLDE1ICs4NTQsMTUgQEAKIAlzaC0+aW9fcG9ydCA9IDA7CS8vIGdvb2QgZW5vdWdoPyAgRklYTUUsIAogCXNoLT5uX2lvX3BvcnQgPSAwOwkvLyBJIGRvbid0IHRoaW5rIHdlIHVzZSB0aGVzZSB0d28uLi4KIAlzaC0+dGhpc19pZCA9IFNFTEZfU0NTSV9JRDsgIAotCXNoLT5zZ190YWJsZXNpemUgPSBoYmFbY3Rscl0tPm1heHNnZW50cmllczsKKwlzaC0+c2dfdGFibGVzaXplID0gaC0+bWF4c2dlbnRyaWVzOwogCXNoLT5tYXhfY21kX2xlbiA9IE1BWF9DT01NQU5EX1NJWkU7CiAKIAkoKHN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICopIAotCQloYmFbY3Rscl0tPnNjc2lfY3RsciktPnNjc2lfaG9zdCA9IHNoOwotCXNoLT5ob3N0ZGF0YVswXSA9ICh1bnNpZ25lZCBsb25nKSBoYmFbY3Rscl07Ci0Jc2gtPmlycSA9IGhiYVtjdGxyXS0+aW50cltTSU1QTEVfTU9ERV9JTlRdOworCQloLT5zY3NpX2N0bHIpLT5zY3NpX2hvc3QgPSBzaDsKKwlzaC0+aG9zdGRhdGFbMF0gPSAodW5zaWduZWQgbG9uZykgaDsKKwlzaC0+aXJxID0gaC0+aW50cltTSU1QTEVfTU9ERV9JTlRdOwogCXNoLT51bmlxdWVfaWQgPSBzaC0+aXJxOwotCWVycm9yID0gc2NzaV9hZGRfaG9zdChzaCwgJmhiYVtjdGxyXS0+cGRldi0+ZGV2KTsKKwllcnJvciA9IHNjc2lfYWRkX2hvc3Qoc2gsICZoLT5wZGV2LT5kZXYpOwogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2hvc3RfcHV0OwogCXNjc2lfc2Nhbl9ob3N0KHNoKTsKQEAgLTg4MiwyMCArODc2LDIwIEBACiAKIHN0YXRpYyB2b2lkCiBjY2lzc191bm1hcF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCUNvbW1hbmRMaXN0X3N0cnVjdCAqY3AsCisJCUNvbW1hbmRMaXN0X3N0cnVjdCAqYywKIAkJc2l6ZV90IGJ1ZmxlbiwKIAkJaW50IGRhdGFfZGlyZWN0aW9uKQogewogCXU2NGJpdCBhZGRyNjQ7CiAKLQlhZGRyNjQudmFsMzIubG93ZXIgPSBjcC0+U0dbMF0uQWRkci5sb3dlcjsKLQlhZGRyNjQudmFsMzIudXBwZXIgPSBjcC0+U0dbMF0uQWRkci51cHBlcjsKKwlhZGRyNjQudmFsMzIubG93ZXIgPSBjLT5TR1swXS5BZGRyLmxvd2VyOworCWFkZHI2NC52YWwzMi51cHBlciA9IGMtPlNHWzBdLkFkZHIudXBwZXI7CiAJcGNpX3VubWFwX3NpbmdsZShwZGV2LCAoZG1hX2FkZHJfdCkgYWRkcjY0LnZhbCwgYnVmbGVuLCBkYXRhX2RpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkCiBjY2lzc19tYXBfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNwLAorCQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsCiAJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJc2l6ZV90IGJ1ZmxlbiwKIAkJaW50IGRhdGFfZGlyZWN0aW9uKQpAQCAtOTAzLDE2NCArODk3LDE0OSBAQAogCV9fdTY0IGFkZHI2NDsKIAogCWFkZHI2NCA9IChfX3U2NCkgcGNpX21hcF9zaW5nbGUocGRldiwgYnVmLCBidWZsZW4sIGRhdGFfZGlyZWN0aW9uKTsKLQljcC0+U0dbMF0uQWRkci5sb3dlciA9IAorCWMtPlNHWzBdLkFkZHIubG93ZXIgPQogCSAgKF9fdTMyKSAoYWRkcjY0ICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCWNwLT5TR1swXS5BZGRyLnVwcGVyID0KKwljLT5TR1swXS5BZGRyLnVwcGVyID0KIAkgIChfX3UzMikgKChhZGRyNjQgPj4gMzIpICYgKF9fdTY0KSAweDAwMDAwMDAwRkZGRkZGRkYpOwotCWNwLT5TR1swXS5MZW4gPSBidWZsZW47Ci0JY3AtPkhlYWRlci5TR0xpc3QgPSAoX191OCkgMTsgICAvKiBuby4gU0dzIGNvbnRpZyBpbiB0aGlzIGNtZCAqLwotCWNwLT5IZWFkZXIuU0dUb3RhbCA9IChfX3UxNikgMTsgLyogdG90YWwgc2dzIGluIHRoaXMgY21kIGxpc3QgKi8KKwljLT5TR1swXS5MZW4gPSBidWZsZW47CisJYy0+SGVhZGVyLlNHTGlzdCA9IChfX3U4KSAxOyAgIC8qIG5vLiBTR3MgY29udGlnIGluIHRoaXMgY21kICovCisJYy0+SGVhZGVyLlNHVG90YWwgPSAoX191MTYpIDE7IC8qIHRvdGFsIHNncyBpbiB0aGlzIGNtZCBsaXN0ICovCiB9CiAKIHN0YXRpYyBpbnQKLWNjaXNzX3Njc2lfZG9fc2ltcGxlX2NtZChjdGxyX2luZm9fdCAqYywKLQkJCUNvbW1hbmRMaXN0X3N0cnVjdCAqY3AsCitjY2lzc19zY3NpX2RvX3NpbXBsZV9jbWQoY3Rscl9pbmZvX3QgKmgsCisJCQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmMsCiAJCQl1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsIAogCQkJdW5zaWduZWQgY2hhciAqY2RiLAogCQkJdW5zaWduZWQgY2hhciBjZGJsZW4sCiAJCQl1bnNpZ25lZCBjaGFyICpidWYsIGludCBidWZzaXplLAogCQkJaW50IGRpcmVjdGlvbikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCi0JY3AtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7CQkvLyB0cmVhdCB0aGlzIGxpa2UgYW4gaW9jdGwgCi0JY3AtPnNjc2lfY21kID0gTlVMTDsKLQljcC0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLy8gdW51c2VkIGluIHNpbXBsZSBtb2RlCi0JbWVtY3B5KCZjcC0+SGVhZGVyLkxVTiwgc2NzaTNhZGRyLCBzaXplb2YoY3AtPkhlYWRlci5MVU4pKTsKLQljcC0+SGVhZGVyLlRhZy5sb3dlciA9IGNwLT5idXNhZGRyOyAgLy8gVXNlIGsuIGFkZHJlc3Mgb2YgY21kIGFzIHRhZworCWMtPmNtZF90eXBlID0gQ01EX0lPQ1RMX1BFTkQ7IC8qIHRyZWF0IHRoaXMgbGlrZSBhbiBpb2N0bCAqLworCWMtPnNjc2lfY21kID0gTlVMTDsKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KKwltZW1jcHkoJmMtPkhlYWRlci5MVU4sIHNjc2kzYWRkciwgc2l6ZW9mKGMtPkhlYWRlci5MVU4pKTsKKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8qIFVzZSBrLiBhZGRyZXNzIG9mIGNtZCBhcyB0YWcgKi8KIAkvLyBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uCiAKIAkvKiBwcmludGsoIlVzaW5nIHNjc2kzYWRkciAweCUwMnglMHgyJTB4MiUweDIlMHgyJTB4MiUweDIlMHgyXG4iLCAKIAkJc2NzaTNhZGRyWzBdLCBzY3NpM2FkZHJbMV0sIHNjc2kzYWRkclsyXSwgc2NzaTNhZGRyWzNdLAogCQlzY3NpM2FkZHJbNF0sIHNjc2kzYWRkcls1XSwgc2NzaTNhZGRyWzZdLCBzY3NpM2FkZHJbN10pOyAqLwogCi0JbWVtc2V0KGNwLT5SZXF1ZXN0LkNEQiwgMCwgc2l6ZW9mKGNwLT5SZXF1ZXN0LkNEQikpOwotCW1lbWNweShjcC0+UmVxdWVzdC5DREIsIGNkYiwgY2RibGVuKTsKLQljcC0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKLQljcC0+UmVxdWVzdC5DREJMZW4gPSBjZGJsZW47Ci0JY3AtPlJlcXVlc3QuVHlwZS5UeXBlID0gVFlQRV9DTUQ7Ci0JY3AtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKLQljcC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwltZW1zZXQoYy0+UmVxdWVzdC5DREIsIDAsIHNpemVvZihjLT5SZXF1ZXN0LkNEQikpOworCW1lbWNweShjLT5SZXF1ZXN0LkNEQiwgY2RiLCBjZGJsZW4pOworCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJYy0+UmVxdWVzdC5DREJMZW4gPSBjZGJsZW47CisJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsKKwljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKIAogCS8qIEZpbGwgaW4gdGhlIFNHIGxpc3QgYW5kIGRvIGRtYSBtYXBwaW5nICovCi0JY2Npc3NfbWFwX29uZShjLT5wZGV2LCBjcCwgKHVuc2lnbmVkIGNoYXIgKikgYnVmLAorCWNjaXNzX21hcF9vbmUoaC0+cGRldiwgYywgKHVuc2lnbmVkIGNoYXIgKikgYnVmLAogCQkJYnVmc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsgCiAKLQljcC0+d2FpdGluZyA9ICZ3YWl0OwotCi0JLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSB0YWlsIG9mIHRoZSByZXF1ZXN0IHF1ZXVlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjLT5jdGxyKSwgZmxhZ3MpOwotCWFkZFEoJmMtPnJlcVEsIGNwKTsKLQljLT5RZGVwdGgrKzsKLQlzdGFydF9pbyhjKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soYy0+Y3RsciksIGZsYWdzKTsKLQorCWMtPndhaXRpbmcgPSAmd2FpdDsKKwllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmd2FpdCk7CiAKIAkvKiB1bmRvIHRoZSBkbWEgbWFwcGluZyAqLwotCWNjaXNzX3VubWFwX29uZShjLT5wZGV2LCBjcCwgYnVmc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKwljY2lzc191bm1hcF9vbmUoaC0+cGRldiwgYywgYnVmc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKIAlyZXR1cm4oMCk7CiB9CiAKIHN0YXRpYyB2b2lkIAotY2Npc3Nfc2NzaV9pbnRlcnByZXRfZXJyb3IoQ29tbWFuZExpc3Rfc3RydWN0ICpjcCkKK2NjaXNzX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGN0bHJfaW5mb190ICpoLCBDb21tYW5kTGlzdF9zdHJ1Y3QgKmMpCiB7CiAJRXJyb3JJbmZvX3N0cnVjdCAqZWk7CiAKLQllaSA9IGNwLT5lcnJfaW5mbzsgCisJZWkgPSBjLT5lcnJfaW5mbzsKIAlzd2l0Y2goZWktPkNvbW1hbmRTdGF0dXMpCiAJewogCQljYXNlIENNRF9UQVJHRVRfU1RBVFVTOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNtZCAlcCBoYXMgIgotCQkJCSJjb21wbGV0ZWQgd2l0aCBlcnJvcnNcbiIsIGNwKTsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjbWQgJXAgIgotCQkJCSJoYXMgU0NTSSBTdGF0dXMgPSAleFxuIiwKLQkJCQkJY3AsICAKLQkJCQkJZWktPlNjc2lTdGF0dXMpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiY21kICVwIGhhcyBjb21wbGV0ZWQgd2l0aCBlcnJvcnNcbiIsIGMpOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiY21kICVwIGhhcyBTQ1NJIFN0YXR1cyA9ICV4XG4iLAorCQkJCWMsIGVpLT5TY3NpU3RhdHVzKTsKIAkJCWlmIChlaS0+U2NzaVN0YXR1cyA9PSAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgCi0JCQkJImNjaXNzOlNDU0kgc3RhdHVzIGlzIGFibm9ybWFsbHkgemVyby4gICIKKwkJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJTQ1NJIHN0YXR1cyBpcyBhYm5vcm1hbGx5IHplcm8uICAiCiAJCQkJIihwcm9iYWJseSBpbmRpY2F0ZXMgc2VsZWN0aW9uIHRpbWVvdXQgIgogCQkJCSJyZXBvcnRlZCBpbmNvcnJlY3RseSBkdWUgdG8gYSBrbm93biAiCiAJCQkJImZpcm13YXJlIGJ1ZywgY2lyY2EgSnVseSwgMjAwMS4pXG4iKTsKIAkJYnJlYWs7CiAJCWNhc2UgQ01EX0RBVEFfVU5ERVJSVU46IC8qIGxldCBtaWQgbGF5ZXIgaGFuZGxlIGl0LiAqLwotCQkJcHJpbnRrKCJVTkRFUlJVTlxuIik7CisJCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiVU5ERVJSVU5cbiIpOwogCQlicmVhazsKIAkJY2FzZSBDTURfREFUQV9PVkVSUlVOOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGhhcyIKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcCBoYXMiCiAJCQkJIiBjb21wbGV0ZWQgd2l0aCBkYXRhIG92ZXJydW4gIgotCQkJCSJyZXBvcnRlZFxuIiwgY3ApOworCQkJCSJyZXBvcnRlZFxuIiwgYyk7CiAJCWJyZWFrOwogCQljYXNlIENNRF9JTlZBTElEOiB7CiAJCQkvKiBjb250cm9sbGVyIHVuZm9ydHVuYXRlbHkgcmVwb3J0cyBTQ1NJIHBhc3N0aHJ1J3MgKi8KIAkJCS8qIHRvIG5vbi1leGlzdGVudCB0YXJnZXRzIGFzIGludmFsaWQgY29tbWFuZHMuICovCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY3AgJXAgaXMgIgotCQkJCSJyZXBvcnRlZCBpbnZhbGlkIChwcm9iYWJseSBtZWFucyAiCi0JCQkJInRhcmdldCBkZXZpY2Ugbm8gbG9uZ2VyIHByZXNlbnQpXG4iLCAKLQkJCQljcCk7IAotCQkJLyogcHJpbnRfYnl0ZXMoKHVuc2lnbmVkIGNoYXIgKikgY3AsIHNpemVvZigqY3ApLCAxLCAwKTsKLQkJCXByaW50X2NtZChjcCk7ICAqLworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiJXAgaXMgcmVwb3J0ZWQgaW52YWxpZCAocHJvYmFibHkgbWVhbnMgIgorCQkJCSJ0YXJnZXQgZGV2aWNlIG5vIGxvbmdlciBwcmVzZW50KVxuIiwgYyk7CisJCQkvKiBwcmludF9ieXRlcygodW5zaWduZWQgY2hhciAqKSBjLCBzaXplb2YoKmMpLCAxLCAwKTsKKwkJCXByaW50X2NtZChjKTsgICovCiAJCQl9CiAJCWJyZWFrOwogCQljYXNlIENNRF9QUk9UT0NPTF9FUlI6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogY3AgJXAgaGFzICIKLQkJCQkicHJvdG9jb2wgZXJyb3IgXG4iLCBjcCk7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXAgaGFzIHByb3RvY29sIGVycm9yXG4iLCBjKTsKIAkJYnJlYWs7CiAJCWNhc2UgQ01EX0hBUkRXQVJFX0VSUjoKIAkJCS8qIGNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OyAqLwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGhhZCAiIAotCQkJCSIgaGFyZHdhcmUgZXJyb3JcbiIsIGNwKTsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcCBoYWQgaGFyZHdhcmUgZXJyb3JcbiIsIGMpOwogCQlicmVhazsKIAkJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGhhZCAiCi0JCQkJImNvbm5lY3Rpb24gbG9zdFxuIiwgY3ApOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIiVwIGhhZCBjb25uZWN0aW9uIGxvc3RcbiIsIGMpOwogCQlicmVhazsKIAkJY2FzZSBDTURfQUJPUlRFRDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBjcCAlcCB3YXMgIgotCQkJCSJhYm9ydGVkXG4iLCBjcCk7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXAgd2FzIGFib3J0ZWRcbiIsIGMpOwogCQlicmVhazsKIAkJY2FzZSBDTURfQUJPUlRfRkFJTEVEOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIHJlcG9ydHMgIgotCQkJCSJhYm9ydCBmYWlsZWRcbiIsIGNwKTsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkJIiVwIHJlcG9ydHMgYWJvcnQgZmFpbGVkXG4iLCBjKTsKIAkJYnJlYWs7CiAJCWNhc2UgQ01EX1VOU09MSUNJVEVEX0FCT1JUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIGFib3J0ZWQgIgotCQkJCSJkbyB0byBhbiB1bnNvbGljaXRlZCBhYm9ydFxuIiwgY3ApOworCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKKwkJCQkiJXAgYWJvcnRlZCBkbyB0byBhbiB1bnNvbGljaXRlZCBhYm9ydFxuIiwgYyk7CiAJCWJyZWFrOwogCQljYXNlIENNRF9USU1FT1VUOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIHRpbWVkb3V0XG4iLAotCQkJCWNwKTsKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICIlcCB0aW1lZG91dFxuIiwgYyk7CiAJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IGNwICVwIHJldHVybmVkICIKLQkJCQkidW5rbm93biBzdGF0dXMgJXhcbiIsIGNwLCAKLQkJCQkJZWktPkNvbW1hbmRTdGF0dXMpOyAKKwkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkJIiVwIHJldHVybmVkIHVua25vd24gc3RhdHVzICV4XG4iLAorCQkJCWMsIGVpLT5Db21tYW5kU3RhdHVzKTsKIAl9CiB9CiAKIHN0YXRpYyBpbnQKLWNjaXNzX3Njc2lfZG9faW5xdWlyeShjdGxyX2luZm9fdCAqYywgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCAKK2NjaXNzX3Njc2lfZG9faW5xdWlyeShjdGxyX2luZm9fdCAqaCwgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAogCXVuc2lnbmVkIGNoYXIgcGFnZSwgdW5zaWduZWQgY2hhciAqYnVmLAogCXVuc2lnbmVkIGNoYXIgYnVmc2l6ZSkKIHsKIAlpbnQgcmM7Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjcDsKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CiAJY2hhciBjZGJbNl07CiAJRXJyb3JJbmZvX3N0cnVjdCAqZWk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soYy0+Y3RsciksIGZsYWdzKTsKLQljcCA9IHNjc2lfY21kX2FsbG9jKGMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjLT5jdGxyKSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJYyA9IHNjc2lfY21kX2FsbG9jKGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChjcCA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLworCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCiAJCXByaW50aygiY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWVpID0gY3AtPmVycl9pbmZvOyAKKwllaSA9IGMtPmVycl9pbmZvOwogCiAJY2RiWzBdID0gQ0lTU19JTlFVSVJZOwogCWNkYlsxXSA9IChwYWdlICE9IDApOwpAQCAtMTA2OCwyNCArMTA0NywyNCBAQAogCWNkYlszXSA9IDA7CiAJY2RiWzRdID0gYnVmc2l6ZTsKIAljZGJbNV0gPSAwOwotCXJjID0gY2Npc3Nfc2NzaV9kb19zaW1wbGVfY21kKGMsIGNwLCBzY3NpM2FkZHIsIGNkYiwgCisJcmMgPSBjY2lzc19zY3NpX2RvX3NpbXBsZV9jbWQoaCwgYywgc2NzaTNhZGRyLCBjZGIsCiAJCQkJNiwgYnVmLCBidWZzaXplLCBYRkVSX1JFQUQpOwogCiAJaWYgKHJjICE9IDApIHJldHVybiByYzsgLyogc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KIAogCWlmIChlaS0+Q29tbWFuZFN0YXR1cyAhPSAwICYmIAogCSAgICBlaS0+Q29tbWFuZFN0YXR1cyAhPSBDTURfREFUQV9VTkRFUlJVTikgewotCQljY2lzc19zY3NpX2ludGVycHJldF9lcnJvcihjcCk7CisJCWNjaXNzX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGgsIGMpOwogCQlyYyA9IC0xOwogCX0KLQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGMtPmN0bHIpLCBmbGFncyk7Ci0Jc2NzaV9jbWRfZnJlZShjLCBjcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGMtPmN0bHIpLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwlzY3NpX2NtZF9mcmVlKGgsIGMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CQogfQogCiAvKiBHZXQgdGhlIGRldmljZSBpZCBmcm9tIGlucXVpcnkgcGFnZSAweDgzICovCi1zdGF0aWMgaW50IGNjaXNzX3Njc2lfZ2V0X2RldmljZV9pZChjdGxyX2luZm9fdCAqYywgdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLAorc3RhdGljIGludCBjY2lzc19zY3NpX2dldF9kZXZpY2VfaWQoY3Rscl9pbmZvX3QgKmgsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKIAl1bnNpZ25lZCBjaGFyICpkZXZpY2VfaWQsIGludCBidWZsZW4pCiB7CiAJaW50IHJjOwpAQCAtMTA5Niw3ICsxMDc1LDcgQEAKIAlidWYgPSBremFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC0xOwotCXJjID0gY2Npc3Nfc2NzaV9kb19pbnF1aXJ5KGMsIHNjc2kzYWRkciwgMHg4MywgYnVmLCA2NCk7CisJcmMgPSBjY2lzc19zY3NpX2RvX2lucXVpcnkoaCwgc2NzaTNhZGRyLCAweDgzLCBidWYsIDY0KTsKIAlpZiAocmMgPT0gMCkKIAkJbWVtY3B5KGRldmljZV9pZCwgJmJ1Zls4XSwgYnVmbGVuKTsKIAlrZnJlZShidWYpOwpAQCAtMTEwNCwyMCArMTA4MywyMCBAQAogfQogCiBzdGF0aWMgaW50Ci1jY2lzc19zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoY3Rscl9pbmZvX3QgKmMsIAorY2Npc3Nfc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGN0bHJfaW5mb190ICpoLAogCQlSZXBvcnRMdW5EYXRhX3N0cnVjdCAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKIAlpbnQgcmM7Ci0JQ29tbWFuZExpc3Rfc3RydWN0ICpjcDsKKwlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CiAJdW5zaWduZWQgY2hhciBjZGJbMTJdOwogCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOyAKIAlFcnJvckluZm9fc3RydWN0ICplaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoQ0NJU1NfTE9DSyhjLT5jdGxyKSwgZmxhZ3MpOwotCWNwID0gc2NzaV9jbWRfYWxsb2MoYyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGMtPmN0bHIpLCBmbGFncyk7Ci0JaWYgKGNwID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKKwljID0gc2NzaV9jbWRfYWxsb2MoaCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCiAJCXByaW50aygiY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTExMzYsMjcgKzExMTUsMjcgQEAKIAljZGJbMTBdID0gMDsKIAljZGJbMTFdID0gMDsKIAotCXJjID0gY2Npc3Nfc2NzaV9kb19zaW1wbGVfY21kKGMsIGNwLCBzY3NpM2FkZHIsIAorCXJjID0gY2Npc3Nfc2NzaV9kb19zaW1wbGVfY21kKGgsIGMsIHNjc2kzYWRkciwKIAkJCQljZGIsIDEyLCAKIAkJCQkodW5zaWduZWQgY2hhciAqKSBidWYsIAogCQkJCWJ1ZnNpemUsIFhGRVJfUkVBRCk7CiAKIAlpZiAocmMgIT0gMCkgcmV0dXJuIHJjOyAvKiBzb21ldGhpbmcgd2VudCB3cm9uZyAqLwogCi0JZWkgPSBjcC0+ZXJyX2luZm87IAorCWVpID0gYy0+ZXJyX2luZm87CiAJaWYgKGVpLT5Db21tYW5kU3RhdHVzICE9IDAgJiYgCiAJICAgIGVpLT5Db21tYW5kU3RhdHVzICE9IENNRF9EQVRBX1VOREVSUlVOKSB7Ci0JCWNjaXNzX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGNwKTsKKwkJY2Npc3Nfc2NzaV9pbnRlcnByZXRfZXJyb3IoaCwgYyk7CiAJCXJjID0gLTE7CiAJfQotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soYy0+Y3RsciksIGZsYWdzKTsKLQlzY3NpX2NtZF9mcmVlKGMsIGNwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soYy0+Y3RsciksIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCXNjc2lfY21kX2ZyZWUoaCwgYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsJCiB9CiAKIHN0YXRpYyB2b2lkCi1jY2lzc191cGRhdGVfbm9uX2Rpc2tfZGV2aWNlcyhpbnQgY250bF9udW0sIGludCBob3N0bm8pCitjY2lzc191cGRhdGVfbm9uX2Rpc2tfZGV2aWNlcyhjdGxyX2luZm9fdCAqaCwgaW50IGhvc3RubykKIHsKIAkvKiB0aGUgaWRlYSBoZXJlIGlzIHdlIGNvdWxkIGdldCBub3RpZmllZCBmcm9tIC9wcm9jCiAJICAgdGhhdCBzb21lIGRldmljZXMgaGF2ZSBjaGFuZ2VkLCBzbyB3ZSBkbyBhIHJlcG9ydCAKQEAgLTExODksNyArMTE2OCw2IEBACiAJUmVwb3J0THVuRGF0YV9zdHJ1Y3QgKmxkX2J1ZmY7CiAJdW5zaWduZWQgY2hhciAqaW5xX2J1ZmY7CiAJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07Ci0JY3Rscl9pbmZvX3QgKmM7CiAJX191MzIgbnVtX2x1bnM9MDsKIAl1bnNpZ25lZCBjaGFyICpjaDsKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9kZXZfdCAqY3VycmVudHNkLCAqdGhpc19kZXZpY2U7CkBAIC0xMTk3LDcgKzExNzUsNiBAQAogCWludCByZXBvcnRsdW5zaXplID0gc2l6ZW9mKCpsZF9idWZmKSArIENJU1NfTUFYX1BIWVNfTFVOICogODsKIAlpbnQgaTsKIAotCWMgPSAoY3Rscl9pbmZvX3QgKikgaGJhW2NudGxfbnVtXTsJCiAJbGRfYnVmZiA9IGt6YWxsb2MocmVwb3J0bHVuc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaW5xX2J1ZmYgPSBrbWFsbG9jKE9CRFJfVEFQRV9JTlFfU0laRSwgR0ZQX0tFUk5FTCk7CiAJY3VycmVudHNkID0ga3phbGxvYyhzaXplb2YoKmN1cnJlbnRzZCkgKgpAQCAtMTIwNyw3ICsxMTg0LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCXRoaXNfZGV2aWNlID0gJmN1cnJlbnRzZFtDQ0lTU19NQVhfU0NTSV9ERVZTX1BFUl9IQkFdOwotCWlmIChjY2lzc19zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoYywgbGRfYnVmZiwgcmVwb3J0bHVuc2l6ZSkgPT0gMCkgeworCWlmIChjY2lzc19zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoaCwgbGRfYnVmZiwgcmVwb3J0bHVuc2l6ZSkgPT0gMCkgewogCQljaCA9ICZsZF9idWZmLT5MVU5MaXN0TGVuZ3RoWzBdOwogCQludW1fbHVucyA9ICgoY2hbMF08PDI0KSB8IChjaFsxXTw8MTYpIHwgKGNoWzJdPDw4KSB8IGNoWzNdKSAvIDg7CiAJCWlmIChudW1fbHVucyA+IENJU1NfTUFYX1BIWVNfTFVOKSB7CkBAIC0xMjMxLDcgKzEyMDgsNyBAQAogCQltZW1zZXQoaW5xX2J1ZmYsIDAsIE9CRFJfVEFQRV9JTlFfU0laRSk7CiAJCW1lbWNweSgmc2NzaTNhZGRyWzBdLCAmbGRfYnVmZi0+TFVOW2ldWzBdLCA4KTsKIAotCQlpZiAoY2Npc3Nfc2NzaV9kb19pbnF1aXJ5KGhiYVtjbnRsX251bV0sIHNjc2kzYWRkciwgMCwgaW5xX2J1ZmYsCisJCWlmIChjY2lzc19zY3NpX2RvX2lucXVpcnkoaCwgc2NzaTNhZGRyLCAwLCBpbnFfYnVmZiwKIAkJCSh1bnNpZ25lZCBjaGFyKSBPQkRSX1RBUEVfSU5RX1NJWkUpICE9IDApCiAJCQkvKiBJbnF1aXJ5IGZhaWxlZCAobXNnIHByaW50ZWQgYWxyZWFkeSkgKi8KIAkJCWNvbnRpbnVlOyAvKiBzbyB3ZSB3aWxsIHNraXAgdGhpcyBkZXZpY2UuICovCkBAIC0xMjQ5LDcgKzEyMjYsNyBAQAogCQkJc2l6ZW9mKHRoaXNfZGV2aWNlLT5yZXZpc2lvbikpOwogCQltZW1zZXQodGhpc19kZXZpY2UtPmRldmljZV9pZCwgMCwKIAkJCXNpemVvZih0aGlzX2RldmljZS0+ZGV2aWNlX2lkKSk7Ci0JCWNjaXNzX3Njc2lfZ2V0X2RldmljZV9pZChoYmFbY250bF9udW1dLCBzY3NpM2FkZHIsCisJCWNjaXNzX3Njc2lfZ2V0X2RldmljZV9pZChoLCBzY3NpM2FkZHIsCiAJCQl0aGlzX2RldmljZS0+ZGV2aWNlX2lkLCBzaXplb2YodGhpc19kZXZpY2UtPmRldmljZV9pZCkpOwogCiAJCXN3aXRjaCAodGhpc19kZXZpY2UtPmRldnR5cGUpCkBAIC0xMjc2LDcgKzEyNTMsNyBAQAogCQkgIGNhc2UgMHgwODogLyogbWVkaXVtIGNoYW5nZXIgKi8KIAkJCWlmIChuY3VycmVudCA+PSBDQ0lTU19NQVhfU0NTSV9ERVZTX1BFUl9IQkEpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJjY2lzcyVkOiAlcyBpZ25vcmVkLCAiCi0JCQkJCSJ0b28gbWFueSBkZXZpY2VzLlxuIiwgY250bF9udW0sCisJCQkJCSJ0b28gbWFueSBkZXZpY2VzLlxuIiwgaC0+Y3RsciwKIAkJCQkJc2NzaV9kZXZpY2VfdHlwZSh0aGlzX2RldmljZS0+ZGV2dHlwZSkpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTI4OCw3ICsxMjY1LDcgQEAKIAkJfQogCX0KIAotCWFkanVzdF9jY2lzc19zY3NpX3RhYmxlKGNudGxfbnVtLCBob3N0bm8sIGN1cnJlbnRzZCwgbmN1cnJlbnQpOworCWFkanVzdF9jY2lzc19zY3NpX3RhYmxlKGgsIGhvc3RubywgY3VycmVudHNkLCBuY3VycmVudCk7CiBvdXQ6CiAJa2ZyZWUoaW5xX2J1ZmYpOwogCWtmcmVlKGxkX2J1ZmYpOwpAQCAtMTMwNywxMiArMTI4NCwxMiBAQAogfQogCiBzdGF0aWMgaW50Ci1jY2lzc19zY3NpX3VzZXJfY29tbWFuZChpbnQgY3RsciwgaW50IGhvc3RubywgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQorY2Npc3Nfc2NzaV91c2VyX2NvbW1hbmQoY3Rscl9pbmZvX3QgKmgsIGludCBob3N0bm8sIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKIAlpbnQgYXJnX2xlbjsKIAogCWlmICgoYXJnX2xlbiA9IGlzX2tleXdvcmQoYnVmZmVyLCBsZW5ndGgsICJyZXNjYW4iKSkgIT0gMCkKLQkJY2Npc3NfdXBkYXRlX25vbl9kaXNrX2RldmljZXMoY3RsciwgaG9zdG5vKTsKKwkJY2Npc3NfdXBkYXRlX25vbl9kaXNrX2RldmljZXMoaCwgaG9zdG5vKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBsZW5ndGg7CkBAIC0xMzI5LDIwICsxMzA2LDE2IEBACiB7CiAKIAlpbnQgYnVmbGVuLCBkYXRhbGVuOwotCWN0bHJfaW5mb190ICpjaTsKKwljdGxyX2luZm9fdCAqaDsKIAlpbnQgaTsKLQlpbnQgY250bF9udW07CiAKLQotCWNpID0gKGN0bHJfaW5mb190ICopIHNoLT5ob3N0ZGF0YVswXTsKLQlpZiAoY2kgPT0gTlVMTCkgIC8qIFRoaXMgcmVhbGx5IHNob3VsZG4ndCBldmVyIGhhcHBlbi4gKi8KKwloID0gKGN0bHJfaW5mb190ICopIHNoLT5ob3N0ZGF0YVswXTsKKwlpZiAoaCA9PSBOVUxMKSAgLyogVGhpcyByZWFsbHkgc2hvdWxkbid0IGV2ZXIgaGFwcGVuLiAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNudGxfbnVtID0gY2ktPmN0bHI7CS8qIEdldCBvdXIgaW5kZXggaW50byB0aGUgaGJhW10gYXJyYXkgKi8KLQogCWlmIChmdW5jID09IDApIHsJLyogVXNlciBpcyByZWFkaW5nIGZyb20gL3Byb2Mvc2NzaS9jaXNzKj8vPyogICovCiAJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiY2Npc3MlZDogU0NTSSBob3N0OiAlZFxuIiwKLQkJCQljbnRsX251bSwgc2gtPmhvc3Rfbm8pOworCQkJCWgtPmN0bHIsIHNoLT5ob3N0X25vKTsKIAogCQkvKiB0aGlzIGluZm9ybWF0aW9uIGlzIG5lZWRlZCBieSBhcHBzIHRvIGtub3cgd2hpY2ggY2Npc3MKIAkJICAgZGV2aWNlIGNvcnJlc3BvbmRzIHRvIHdoaWNoIHNjc2kgaG9zdCBudW1iZXIgd2l0aG91dApAQCAtMTM1Miw4ICsxMzI1LDkgQEAKIAkJICAgdGhpcyBpbmZvIGlzIGZvciBhbiBhcHAgdG8gYmUgYWJsZSB0byB1c2UgdG8ga25vdyBob3cgdG8KIAkJICAgZ2V0IHRoZW0gYmFjayBpbiBzeW5jLiAqLwogCi0JCWZvciAoaT0wO2k8Y2Npc3NzY3NpW2NudGxfbnVtXS5uZGV2aWNlcztpKyspIHsKLQkJCXN0cnVjdCBjY2lzc19zY3NpX2Rldl90ICpzZCA9ICZjY2lzc3Njc2lbY250bF9udW1dLmRldltpXTsKKwkJZm9yIChpID0gMDsgaSA8IGNjaXNzc2NzaVtoLT5jdGxyXS5uZGV2aWNlczsgaSsrKSB7CisJCQlzdHJ1Y3QgY2Npc3Nfc2NzaV9kZXZfdCAqc2QgPQorCQkJCSZjY2lzc3Njc2lbaC0+Y3Rscl0uZGV2W2ldOwogCQkJYnVmbGVuICs9IHNwcmludGYoJmJ1ZmZlcltidWZsZW5dLCAiYyVkYiVkdCVkbCVkICUwMmQgIgogCQkJCSIweCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAogCQkJCXNoLT5ob3N0X25vLCBzZC0+YnVzLCBzZC0+dGFyZ2V0LCBzZC0+bHVuLApAQCAtMTM3MSwxNSArMTM0NSwxNSBAQAogCQkJKnN0YXJ0ID0gYnVmZmVyICsgb2Zmc2V0OwogCQlyZXR1cm4oZGF0YWxlbik7CiAJfSBlbHNlIAkvKiBVc2VyIGlzIHdyaXRpbmcgdG8gL3Byb2Mvc2NzaS9jY2lzcyo/Lz8qICAuLi4gKi8KLQkJcmV0dXJuIGNjaXNzX3Njc2lfdXNlcl9jb21tYW5kKGNudGxfbnVtLCBzaC0+aG9zdF9ubywKKwkJcmV0dXJuIGNjaXNzX3Njc2lfdXNlcl9jb21tYW5kKGgsIHNoLT5ob3N0X25vLAogCQkJYnVmZmVyLCBsZW5ndGgpOwkKIH0gCiAKIC8qIGNjaXNzX3NjYXR0ZXJfZ2F0aGVyIHRha2VzIGEgc3RydWN0IHNjc2lfY21uZCwgKGNtZCksIGFuZCBkb2VzIHRoZSBwY2kgCiAgICBkbWEgbWFwcGluZyAgYW5kIGZpbGxzIGluIHRoZSBzY2F0dGVyIGdhdGhlciBlbnRyaWVzIG9mIHRoZSAKLSAgIGNjaXNzIGNvbW1hbmQsIGNwLiAqLworICAgY2Npc3MgY29tbWFuZCwgYy4gKi8KIAotc3RhdGljIHZvaWQgY2Npc3Nfc2NhdHRlcl9nYXRoZXIoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqY3AsCitzdGF0aWMgdm9pZCBjY2lzc19zY2F0dGVyX2dhdGhlcihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjLAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgbGVuOwpAQCAtMTM5Myw3ICsxMzY3LDcgQEAKIAogCWNoYWluZWQgPSAwOwogCXNnX2luZGV4ID0gMDsKLQljdXJyX3NnID0gY3AtPlNHOworCWN1cnJfc2cgPSBjLT5TRzsKIAlyZXF1ZXN0X25zZ3MgPSBzY3NpX2RtYV9tYXAoY21kKTsKIAlpZiAocmVxdWVzdF9uc2dzKSB7CiAJCXNjc2lfZm9yX2VhY2hfc2coY21kLCBzZywgcmVxdWVzdF9uc2dzLCBpKSB7CkBAIC0xNDAxLDcgKzEzNzUsNyBAQAogCQkJCSFjaGFpbmVkICYmIHJlcXVlc3RfbnNncyAtIGkgPiAxKSB7CiAJCQkJY2hhaW5lZCA9IDE7CiAJCQkJc2dfaW5kZXggPSAwOwotCQkJCWN1cnJfc2cgPSBzYS0+Y21kX3NnX2xpc3RbY3AtPmNtZGluZGV4XTsKKwkJCQljdXJyX3NnID0gc2EtPmNtZF9zZ19saXN0W2MtPmNtZGluZGV4XTsKIAkJCX0KIAkJCWFkZHI2NCA9IChfX3U2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwpAQCAtMTQxNCwxOSArMTM4OCwxOSBAQAogCQkJKytzZ19pbmRleDsKIAkJfQogCQlpZiAoY2hhaW5lZCkKLQkJCWNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhoLCBjcCwKLQkJCQlzYS0+Y21kX3NnX2xpc3RbY3AtPmNtZGluZGV4XSwKKwkJCWNjaXNzX21hcF9zZ19jaGFpbl9ibG9jayhoLCBjLAorCQkJCXNhLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF0sCiAJCQkJKHJlcXVlc3RfbnNncyAtIChoLT5tYXhfY21kX3NnZW50cmllcyAtIDEpKSAqCiAJCQkJCXNpemVvZihTR0Rlc2NyaXB0b3Jfc3RydWN0KSk7CiAJfQogCS8qIHRyYWNrIGhvdyBtYW55IFNHIGVudHJpZXMgd2UgYXJlIHVzaW5nICovCiAJaWYgKHJlcXVlc3RfbnNncyA+IGgtPm1heFNHKQogCQloLT5tYXhTRyA9IHJlcXVlc3RfbnNnczsKLQljcC0+SGVhZGVyLlNHVG90YWwgPSAoX191OCkgcmVxdWVzdF9uc2dzICsgY2hhaW5lZDsKKwljLT5IZWFkZXIuU0dUb3RhbCA9IChfX3U4KSByZXF1ZXN0X25zZ3MgKyBjaGFpbmVkOwogCWlmIChyZXF1ZXN0X25zZ3MgPiBoLT5tYXhfY21kX3NnZW50cmllcykKLQkJY3AtPkhlYWRlci5TR0xpc3QgPSBoLT5tYXhfY21kX3NnZW50cmllczsKKwkJYy0+SGVhZGVyLlNHTGlzdCA9IGgtPm1heF9jbWRfc2dlbnRyaWVzOwogCWVsc2UKLQkJY3AtPkhlYWRlci5TR0xpc3QgPSBjcC0+SGVhZGVyLlNHVG90YWw7CisJCWMtPkhlYWRlci5TR0xpc3QgPSBjLT5IZWFkZXIuU0dUb3RhbDsKIAlyZXR1cm47CiB9CiAKQEAgLTE0MzQsMTggKzE0MDgsMTcgQEAKIHN0YXRpYyBpbnQKIGNjaXNzX3Njc2lfcXVldWVfY29tbWFuZCAoc3RydWN0IHNjc2lfY21uZCAqY21kLCB2b2lkICgqIGRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCiB7Ci0JY3Rscl9pbmZvX3QgKmM7Ci0JaW50IGN0bHIsIHJjOworCWN0bHJfaW5mb190ICpoOworCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcls4XTsKLQlDb21tYW5kTGlzdF9zdHJ1Y3QgKmNwOworCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLy8gR2V0IHRoZSBwdHIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlIChoYmFbaV0pIG91dCBvZiBjbWQtPmhvc3QuCiAJLy8gV2UgdmlvbGF0ZSBjbWQtPmhvc3QgcHJpdmFjeSBoZXJlLiAgKElzIHRoZXJlIGFub3RoZXIgd2F5PykKLQljID0gKGN0bHJfaW5mb190ICopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKLQljdGxyID0gYy0+Y3RscjsKKwloID0gKGN0bHJfaW5mb190ICopIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIAotCXJjID0gbG9va3VwX3Njc2kzYWRkcihjdGxyLCBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLCAKKwlyYyA9IGxvb2t1cF9zY3NpM2FkZHIoaCwgY21kLT5kZXZpY2UtPmNoYW5uZWwsIGNtZC0+ZGV2aWNlLT5pZCwKIAkJCWNtZC0+ZGV2aWNlLT5sdW4sIHNjc2kzYWRkcik7CiAJaWYgKHJjICE9IDApIHsKIAkJLyogdGhlIHNjc2kgbmV4dXMgZG9lcyBub3QgbWF0Y2ggYW55IHRoYXQgd2UgcHJlc2VudGVkLi4uICovCkBAIC0xNDU3LDE5ICsxNDMwLDE0IEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIHByaW50aygiY2Npc3NfcXVldWVfY29tbWFuZCwgcD0lcCwgY21kPTB4JTAyeCwgYyVkYiVkdCVkbCVkXG4iLCAKLQkJY21kLCBjbWQtPmNtbmRbMF0sIGN0bHIsIGNtZC0+Y2hhbm5lbCwgY21kLT50YXJnZXQsIGNtZC0+bHVuKTsqLwotCS8vIHByaW50aygicTolcDpjJWRiJWR0JWRsJWQgIiwgY21kLCBjdGxyLCBjbWQtPmNoYW5uZWwsIAotCS8vCWNtZC0+dGFyZ2V0LCBjbWQtPmx1bik7Ci0KIAkvKiBPaywgd2UgaGF2ZSBhIHJlYXNvbmFibGUgc2NzaSBuZXh1cywgc28gc2VuZCB0aGUgY21kIGRvd24sIGFuZAogICAgICAgICAgICBzZWUgd2hhdCB0aGUgZGV2aWNlIHRoaW5rcyBvZiBpdC4gKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQljcCA9IHNjc2lfY21kX2FsbG9jKGMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCWlmIChjcCA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLwotCQlwcmludGsoInNjc2lfY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCWMgPSBzY3NpX2NtZF9hbGxvYyhoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInNjc2lfY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJLyogRklYTUU6IG5leHQgMyBsaW5lcyBhcmUgLT4gQkFEISA8LSAqLwogCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwogCQlkb25lKGNtZCk7CkBAIC0xNDgwLDM1ICsxNDQ4LDQxIEBACiAKIAljbWQtPnNjc2lfZG9uZSA9IGRvbmU7ICAgIC8vIHNhdmUgdGhpcyBmb3IgdXNlIGJ5IGNvbXBsZXRpb24gY29kZSAKIAotCS8vIHNhdmUgY3AgaW4gY2FzZSB3ZSBoYXZlIHRvIGFib3J0IGl0IAotCWNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopIGNwOyAKKwkvKiBzYXZlIGMgaW4gY2FzZSB3ZSBoYXZlIHRvIGFib3J0IGl0ICovCisJY21kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgYzsKIAotCWNwLT5jbWRfdHlwZSA9IENNRF9TQ1NJOwotCWNwLT5zY3NpX2NtZCA9IGNtZDsKLQljcC0+SGVhZGVyLlJlcGx5UXVldWUgPSAwOyAgLy8gdW51c2VkIGluIHNpbXBsZSBtb2RlCi0JbWVtY3B5KCZjcC0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sICZzY3NpM2FkZHJbMF0sIDgpOwotCWNwLT5IZWFkZXIuVGFnLmxvd2VyID0gY3AtPmJ1c2FkZHI7ICAvLyBVc2Ugay4gYWRkcmVzcyBvZiBjbWQgYXMgdGFnCisJYy0+Y21kX3R5cGUgPSBDTURfU0NTSTsKKwljLT5zY3NpX2NtZCA9IGNtZDsKKwljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KKwltZW1jcHkoJmMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzWzBdLCAmc2NzaTNhZGRyWzBdLCA4KTsKKwljLT5IZWFkZXIuVGFnLmxvd2VyID0gYy0+YnVzYWRkcjsgIC8qIFVzZSBrLiBhZGRyZXNzIG9mIGNtZCBhcyB0YWcgKi8KIAkKIAkvLyBGaWxsIGluIHRoZSByZXF1ZXN0IGJsb2NrLi4uCiAKLQljcC0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKLQltZW1zZXQoY3AtPlJlcXVlc3QuQ0RCLCAwLCBzaXplb2YoY3AtPlJlcXVlc3QuQ0RCKSk7Ci0JQlVHX09OKGNtZC0+Y21kX2xlbiA+IHNpemVvZihjcC0+UmVxdWVzdC5DREIpKTsKLQljcC0+UmVxdWVzdC5DREJMZW4gPSBjbWQtPmNtZF9sZW47Ci0JbWVtY3B5KGNwLT5SZXF1ZXN0LkNEQiwgY21kLT5jbW5kLCBjbWQtPmNtZF9sZW4pOwotCWNwLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOwotCWNwLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKKwltZW1zZXQoYy0+UmVxdWVzdC5DREIsIDAsIHNpemVvZihjLT5SZXF1ZXN0LkNEQikpOworCUJVR19PTihjbWQtPmNtZF9sZW4gPiBzaXplb2YoYy0+UmVxdWVzdC5DREIpKTsKKwljLT5SZXF1ZXN0LkNEQkxlbiA9IGNtZC0+Y21kX2xlbjsKKwltZW1jcHkoYy0+UmVxdWVzdC5DREIsIGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKKwljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOworCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAlzd2l0Y2goY21kLT5zY19kYXRhX2RpcmVjdGlvbikKIAl7Ci0JICBjYXNlIERNQV9UT19ERVZJQ0U6IGNwLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsgYnJlYWs7Ci0JICBjYXNlIERNQV9GUk9NX0RFVklDRTogY3AtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX1JFQUQ7IGJyZWFrOwotCSAgY2FzZSBETUFfTk9ORTogY3AtPlJlcXVlc3QuVHlwZS5EaXJlY3Rpb24gPSBYRkVSX05PTkU7IGJyZWFrOworCSAgY2FzZSBETUFfVE9fREVWSUNFOgorCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9XUklURTsKKwkJYnJlYWs7CisJICBjYXNlIERNQV9GUk9NX0RFVklDRToKKwkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUkVBRDsKKwkJYnJlYWs7CisJICBjYXNlIERNQV9OT05FOgorCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9OT05FOworCQlicmVhazsKIAkgIGNhc2UgRE1BX0JJRElSRUNUSU9OQUw6CiAJCS8vIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGJ1Z2d5IGFwcGxpY2F0aW9uIGRvZXMgYSBzY3NpIHBhc3N0aHJ1CiAJCS8vIGFuZCBzZXRzIGJvdGggaW5sZW4gYW5kIG91dGxlbiB0byBub24temVyby4gKCBzZWUKIAkJLy8gLi4vc2NzaS9zY3NpX2lvY3RsLmM6c2NzaV9pb2N0bF9zZW5kX2NvbW1hbmQoKSApCiAKLQkgIAljcC0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUlNWRDsKKwkJYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiA9IFhGRVJfUlNWRDsKIAkJLy8gVGhpcyBpcyB0ZWNobmljYWxseSB3cm9uZywgYW5kIGNjaXNzIGNvbnRyb2xsZXJzIHNob3VsZAogCQkvLyByZWplY3QgaXQgd2l0aCBDTURfSU5WQUxJRCwgd2hpY2ggaXMgdGhlIG1vc3QgY29ycmVjdCAKIAkJLy8gcmVzcG9uc2UsIGJ1dCBub24tZmlicmUgYmFja2VuZHMgYXBwZWFyIHRvIGxldCBpdCAKQEAgLTE1MTksMjcgKzE0OTMsMTggQEAKIAkJYnJlYWs7CiAKIAkgIGRlZmF1bHQ6IAotCQlwcmludGsoImNjaXNzOiB1bmtub3duIGRhdGEgZGlyZWN0aW9uOiAlZFxuIiwgCisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJ1bmtub3duIGRhdGEgZGlyZWN0aW9uOiAlZFxuIiwKIAkJCWNtZC0+c2NfZGF0YV9kaXJlY3Rpb24pOwogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQotCWNjaXNzX3NjYXR0ZXJfZ2F0aGVyKGMsIGNwLCBjbWQpOwotCi0JLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSB0YWlsIG9mIHRoZSByZXF1ZXN0IHF1ZXVlICovCi0KLQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0JYWRkUSgmYy0+cmVxUSwgY3ApOwotCWMtPlFkZXB0aCsrOwotCXN0YXJ0X2lvKGMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCisJY2Npc3Nfc2NhdHRlcl9nYXRoZXIoaCwgYywgY21kKTsKKwllbnF1ZXVlX2NtZF9hbmRfc3RhcnRfaW8oaCwgYyk7CiAJLyogdGhlIGNtZCdsbCBjb21lIGJhY2sgdmlhIGludHIgaGFuZGxlciBpbiBjb21wbGV0ZV9zY3NpX2NvbW1hbmQoKSAgKi8KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgCi1jY2lzc191bnJlZ2lzdGVyX3Njc2koaW50IGN0bHIpCitzdGF0aWMgdm9pZCBjY2lzc191bnJlZ2lzdGVyX3Njc2koY3Rscl9pbmZvX3QgKmgpCiB7CiAJc3RydWN0IGNjaXNzX3Njc2lfYWRhcHRlcl9kYXRhX3QgKnNhOwogCXN0cnVjdCBjY2lzc19zY3NpX2NtZF9zdGFja190ICpzdGs7CkBAIC0xNTQ3LDU5ICsxNTEyLDU4IEBACiAKIAkvKiB3ZSBhcmUgYmVpbmcgZm9yY2libHkgdW5sb2FkZWQsIGFuZCBtYXkgbm90IHJlZnVzZS4gKi8KIAotCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQlzYSA9IGhiYVtjdGxyXS0+c2NzaV9jdGxyOworCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJc2EgPSBoLT5zY3NpX2N0bHI7CiAJc3RrID0gJnNhLT5jbWRfc3RhY2s7IAogCiAJLyogaWYgd2Ugd2VyZW4ndCBldmVyIGFjdHVhbGx5IHJlZ2lzdGVyZWQsIGRvbid0IHVucmVnaXN0ZXIgKi8gCiAJaWYgKHNhLT5yZWdpc3RlcmVkKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXNjc2lfcmVtb3ZlX2hvc3Qoc2EtPnNjc2lfaG9zdCk7CiAJCXNjc2lfaG9zdF9wdXQoc2EtPnNjc2lfaG9zdCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAkvKiBzZXQgc2NzaV9ob3N0IHRvIE5VTEwgc28gb3VyIGRldGVjdCByb3V0aW5lIHdpbGwgCiAJICAgZmluZCB1cyBvbiByZWdpc3RlciAqLwogCXNhLT5zY3NpX2hvc3QgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhjdGxyKSwgZmxhZ3MpOwotCXNjc2lfY21kX3N0YWNrX2ZyZWUoY3Rscik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCXNjc2lfY21kX3N0YWNrX2ZyZWUoaCk7CiAJa2ZyZWUoc2EpOwogfQogCi1zdGF0aWMgaW50IAotY2Npc3NfZW5nYWdlX3Njc2koaW50IGN0bHIpCitzdGF0aWMgaW50IGNjaXNzX2VuZ2FnZV9zY3NpKGN0bHJfaW5mb190ICpoKQogewogCXN0cnVjdCBjY2lzc19zY3NpX2FkYXB0ZXJfZGF0YV90ICpzYTsKIAlzdHJ1Y3QgY2Npc3Nfc2NzaV9jbWRfc3RhY2tfdCAqc3RrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGN0bHIpLCBmbGFncyk7Ci0Jc2EgPSBoYmFbY3Rscl0tPnNjc2lfY3RscjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOworCXNhID0gaC0+c2NzaV9jdGxyOwogCXN0ayA9ICZzYS0+Y21kX3N0YWNrOyAKIAogCWlmIChzYS0+cmVnaXN0ZXJlZCkgewotCQlwcmludGsoImNjaXNzJWQ6IFNDU0kgc3Vic3lzdGVtIGFscmVhZHkgZW5nYWdlZC5cbiIsIGN0bHIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKKwkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIlNDU0kgc3Vic3lzdGVtIGFscmVhZHkgZW5nYWdlZC5cbiIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCXNhLT5yZWdpc3RlcmVkID0gMTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soY3RsciksIGZsYWdzKTsKLQljY2lzc191cGRhdGVfbm9uX2Rpc2tfZGV2aWNlcyhjdGxyLCAtMSk7Ci0JY2Npc3Nfc2NzaV9kZXRlY3QoY3Rscik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworCWNjaXNzX3VwZGF0ZV9ub25fZGlza19kZXZpY2VzKGgsIC0xKTsKKwljY2lzc19zY3NpX2RldGVjdChoKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLWNjaXNzX3NlcV90YXBlX3JlcG9ydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgaW50IGN0bHIpCitjY2lzc19zZXFfdGFwZV9yZXBvcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGN0bHJfaW5mb190ICpoKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlDUFFfVEFQRV9MT0NLKGN0bHIsIGZsYWdzKTsKKwlDUFFfVEFQRV9MT0NLKGgsIGZsYWdzKTsKIAlzZXFfcHJpbnRmKHNlcSwKIAkJIlNlcXVlbnRpYWwgYWNjZXNzIGRldmljZXM6ICVkXG5cbiIsCi0JCQljY2lzc3Njc2lbY3Rscl0ubmRldmljZXMpOwotCUNQUV9UQVBFX1VOTE9DSyhjdGxyLCBmbGFncyk7CisJCQljY2lzc3Njc2lbaC0+Y3Rscl0ubmRldmljZXMpOworCUNQUV9UQVBFX1VOTE9DSyhoLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeShjdGxyX2luZm9fdCAqaCwKQEAgLTE2MTAsMTAgKzE1NzQsMTAgQEAKIAlpbnQgd2FpdHRpbWUgPSBIWjsKIAlDb21tYW5kTGlzdF9zdHJ1Y3QgKmM7CiAKLQljID0gY21kX2FsbG9jKGgsIDEpOworCWMgPSBjbWRfYWxsb2MoaCk7CiAJaWYgKCFjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IG91dCBvZiBtZW1vcnkgaW4gIgotCQkJIndhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkuXG4iLCBoLT5jdGxyKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gIgorCQkJIndhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkuXG4iKTsKIAkJcmV0dXJuIElPX0VSUk9SOwogCX0KIApAQCAtMTYzMSw3ICsxNTk1LDcgQEAKIAkJCXdhaXR0aW1lID0gd2FpdHRpbWUgKiAyOwogCiAJCS8qIFNlbmQgdGhlIFRlc3QgVW5pdCBSZWFkeSAqLwotCQlyYyA9IGZpbGxfY21kKGMsIFRFU1RfVU5JVF9SRUFEWSwgaC0+Y3RsciwgTlVMTCwgMCwgMCwKKwkJcmMgPSBmaWxsX2NtZChoLCBjLCBURVNUX1VOSVRfUkVBRFksIE5VTEwsIDAsIDAsCiAJCQlsdW5hZGRyLCBUWVBFX0NNRCk7CiAJCWlmIChyYyA9PSAwKQogCQkJcmMgPSBzZW5kY21kX3dpdGhpcnFfY29yZShoLCBjLCAwKTsKQEAgLTE2NTcsMTggKzE2MjEsMTggQEAKIAkJCX0KIAkJfQogcmV0cnlfdHVyOgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiBXYWl0aW5nICVkIHNlY3MgIgorCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiV2FpdGluZyAlZCBzZWNzICIKIAkJCSJmb3IgZGV2aWNlIHRvIGJlY29tZSByZWFkeS5cbiIsCi0JCQloLT5jdGxyLCB3YWl0dGltZSAvIEhaKTsKKwkJCXdhaXR0aW1lIC8gSFopOwogCQlyYyA9IDE7IC8qIGRldmljZSBub3QgcmVhZHkuICovCiAJfQogCiAJaWYgKHJjKQotCQlwcmludGsoImNjaXNzJWQ6IGdpdmluZyB1cCBvbiBkZXZpY2UuXG4iLCBoLT5jdGxyKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImdpdmluZyB1cCBvbiBkZXZpY2UuXG4iKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGRldmljZSBpcyByZWFkeS5cbiIsIGgtPmN0bHIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiZGV2aWNlIGlzIHJlYWR5LlxuIik7CiAKLQljbWRfZnJlZShoLCBjLCAxKTsKKwljbWRfZnJlZShoLCBjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE2ODgsMjYgKzE2NTIsMjQgQEAKIAlpbnQgcmM7CiAJQ29tbWFuZExpc3Rfc3RydWN0ICpjbWRfaW5fdHJvdWJsZTsKIAl1bnNpZ25lZCBjaGFyIGx1bmFkZHJbOF07Ci0JY3Rscl9pbmZvX3QgKmM7Ci0JaW50IGN0bHI7CisJY3Rscl9pbmZvX3QgKmg7CiAKIAkvKiBmaW5kIHRoZSBjb250cm9sbGVyIHRvIHdoaWNoIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgd2FzIHNlbnQgKi8KLQljID0gKGN0bHJfaW5mb190ICopIHNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07Ci0JaWYgKGMgPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KKwloID0gKGN0bHJfaW5mb190ICopIHNjc2ljbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CisJaWYgKGggPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KIAkJcmV0dXJuIEZBSUxFRDsKLQljdGxyID0gYy0+Y3RscjsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXNldHRpbmcgdGFwZSBkcml2ZSBvciBtZWRpdW0gY2hhbmdlci5cbiIsIGN0bHIpOworCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJyZXNldHRpbmcgdGFwZSBkcml2ZSBvciBtZWRpdW0gY2hhbmdlci5cbiIpOwogCS8qIGZpbmQgdGhlIGNvbW1hbmQgdGhhdCdzIGdpdmluZyB1cyB0cm91YmxlICovCiAJY21kX2luX3Ryb3VibGUgPSAoQ29tbWFuZExpc3Rfc3RydWN0ICopIHNjc2ljbWQtPmhvc3Rfc2NyaWJibGU7CiAJaWYgKGNtZF9pbl90cm91YmxlID09IE5VTEwpIC8qIHBhcmFub2lhICovCiAJCXJldHVybiBGQUlMRUQ7CiAJbWVtY3B5KGx1bmFkZHIsICZjbWRfaW5fdHJvdWJsZS0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sIDgpOwogCS8qIHNlbmQgYSByZXNldCB0byB0aGUgU0NTSSBMVU4gd2hpY2ggdGhlIGNvbW1hbmQgd2FzIHNlbnQgdG8gKi8KLQlyYyA9IHNlbmRjbWRfd2l0aGlycShDQ0lTU19SRVNFVF9NU0csIGN0bHIsIE5VTEwsIDAsIDAsIGx1bmFkZHIsCisJcmMgPSBzZW5kY21kX3dpdGhpcnEoaCwgQ0NJU1NfUkVTRVRfTVNHLCBOVUxMLCAwLCAwLCBsdW5hZGRyLAogCQlUWVBFX01TRyk7Ci0JaWYgKHJjID09IDAgJiYgd2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeShjLCBsdW5hZGRyKSA9PSAwKQorCWlmIChyYyA9PSAwICYmIHdhaXRfZm9yX2RldmljZV90b19iZWNvbWVfcmVhZHkoaCwgbHVuYWRkcikgPT0gMCkKIAkJcmV0dXJuIFNVQ0NFU1M7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogcmVzZXR0aW5nIGRldmljZSBmYWlsZWQuXG4iLCBjdGxyKTsKKwlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAicmVzZXR0aW5nIGRldmljZSBmYWlsZWQuXG4iKTsKIAlyZXR1cm4gRkFJTEVEOwogfQogCkBAIC0xNzE2LDIyICsxNjc4LDIwIEBACiAJaW50IHJjOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqY21kX3RvX2Fib3J0OwogCXVuc2lnbmVkIGNoYXIgbHVuYWRkcls4XTsKLQljdGxyX2luZm9fdCAqYzsKLQlpbnQgY3RscjsKKwljdGxyX2luZm9fdCAqaDsKIAogCS8qIGZpbmQgdGhlIGNvbnRyb2xsZXIgdG8gd2hpY2ggdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgc2VudCAqLwotCWMgPSAoY3Rscl9pbmZvX3QgKikgc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKLQlpZiAoYyA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLworCWggPSAoY3Rscl9pbmZvX3QgKikgc2NzaWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKKwlpZiAoaCA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOwotCWN0bHIgPSBjLT5jdGxyOwotCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGFib3J0aW5nIHRhcmR5IFNDU0kgY21kXG4iLCBjdGxyKTsKKwlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiYWJvcnRpbmcgdGFyZHkgU0NTSSBjbWRcbiIpOwogCiAJLyogZmluZCB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkICovCiAJY21kX3RvX2Fib3J0ID0gKENvbW1hbmRMaXN0X3N0cnVjdCAqKSBzY3NpY21kLT5ob3N0X3NjcmliYmxlOwogCWlmIChjbWRfdG9fYWJvcnQgPT0gTlVMTCkgLyogcGFyYW5vaWEgKi8KIAkJcmV0dXJuIEZBSUxFRDsKIAltZW1jcHkobHVuYWRkciwgJmNtZF90b19hYm9ydC0+SGVhZGVyLkxVTi5MdW5BZGRyQnl0ZXNbMF0sIDgpOwotCXJjID0gc2VuZGNtZF93aXRoaXJxKENDSVNTX0FCT1JUX01TRywgY3RsciwgJmNtZF90b19hYm9ydC0+SGVhZGVyLlRhZywKKwlyYyA9IHNlbmRjbWRfd2l0aGlycShoLCBDQ0lTU19BQk9SVF9NU0csICZjbWRfdG9fYWJvcnQtPkhlYWRlci5UYWcsCiAJCTAsIDAsIGx1bmFkZHIsIFRZUEVfTVNHKTsKIAlpZiAocmMgPT0gMCkKIAkJcmV0dXJuIFNVQ0NFU1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggYWJiNGVjNi4uZDUzYjAyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CkBAIC0xNTcsNyArMTU4LDcgQEAKIAl1bnNpZ25lZCBpbnQgYmxrY250LAogCXVuc2lnbmVkIGludCBsb2dfdW5pdCApOwogCi1zdGF0aWMgaW50IGlkYV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CitzdGF0aWMgaW50IGlkYV91bmxvY2tlZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSk7CiBzdGF0aWMgaW50IGlkYV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpOwogc3RhdGljIGludCBpZGFfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBzdGF0aWMgaW50IGlkYV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwpAQCAtMTk1LDkgKzE5Niw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRhX2ZvcHMgID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBpZGFfb3BlbiwKKwkub3BlbgkJPSBpZGFfdW5sb2NrZWRfb3BlbiwKIAkucmVsZWFzZQk9IGlkYV9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBpZGFfaW9jdGwsCisJLmlvY3RsCQk9IGlkYV9pb2N0bCwKIAkuZ2V0Z2VvCQk9IGlkYV9nZXRnZW8sCiAJLnJldmFsaWRhdGVfZGlzaz0gaWRhX3JldmFsaWRhdGUsCiB9OwpAQCAtODQwLDEzICs4NDEsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZGFfdW5sb2NrZWRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gaWRhX29wZW4oYmRldiwgbW9kZSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIENsb3NlLiAgU3luYyBmaXJzdC4KICAqLwogc3RhdGljIGludCBpZGFfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCWN0bHJfaW5mb190ICpob3N0ID0gZ2V0X2hvc3QoZGlzayk7CisJY3Rscl9pbmZvX3QgKmhvc3Q7CisKKwlsb2NrX2tlcm5lbCgpOworCWhvc3QgPSBnZXRfaG9zdChkaXNrKTsKIAlob3N0LT51c2FnZV9jb3VudC0tOworCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMTI4LDcgKzExNDUsNyBAQAogICogIGlkYV9pb2N0bCBkb2VzIHNvbWUgbWlzY2VsbGFuZW91cyBzdHVmZiBsaWtlIHJlcG9ydGluZyBkcml2ZSBnZW9tZXRyeSwKICAqICBzZXR0aW5nIHJlYWRhaGVhZCBhbmQgc3VibWl0dGluZyBjb21tYW5kcyBmcm9tIHVzZXJzcGFjZSB0byB0aGUgY29udHJvbGxlci4KICAqLwotc3RhdGljIGludCBpZGFfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgaWRhX2xvY2tlZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWRydl9pbmZvX3QgKmRydiA9IGdldF9kcnYoYmRldi0+YmRfZGlzayk7CiAJY3Rscl9pbmZvX3QgKmhvc3QgPSBnZXRfaG9zdChiZGV2LT5iZF9kaXNrKTsKQEAgLTExNjIsNyArMTE3OSw4IEBACiAJCXJldHVybiBlcnJvcjsKIAljYXNlIElEQUdFVENUTFJTSUc6CiAJCWlmICghYXJnKSByZXR1cm4gLUVJTlZBTDsKLQkJcHV0X3VzZXIoaG9zdC0+Y3Rscl9zaWcsIChpbnQgX191c2VyICopYXJnKTsKKwkJaWYgKHB1dF91c2VyKGhvc3QtPmN0bHJfc2lnLCAoaW50IF9fdXNlciAqKWFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBJREFSRVZBTElEQVRFVk9MUzoKIAkJaWYgKE1JTk9SKGJkZXYtPmJkX2RldikgIT0gMCkKQEAgLTExNzAsNyArMTE4OCw4IEBACiAJCXJldHVybiByZXZhbGlkYXRlX2FsbHZvbChob3N0KTsKIAljYXNlIElEQURSSVZFUlZFUlNJT046CiAJCWlmICghYXJnKSByZXR1cm4gLUVJTlZBTDsKLQkJcHV0X3VzZXIoRFJJVkVSX1ZFUlNJT04sICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CisJCWlmIChwdXRfdXNlcihEUklWRVJfVkVSU0lPTiwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIAljYXNlIElEQUdFVFBDSUlORk86CiAJewpAQCAtMTE5Miw2ICsxMjExLDE5IEBACiAJfQogCQkKIH0KKworc3RhdGljIGludCBpZGFfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGlkYV9sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBwYXJhbSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIGlkYV9jdGxyX2lvY3RsIGlzIGZvciBwYXNzaW5nIGNvbW1hbmRzIHRvIHRoZSBjb250cm9sbGVyIGZyb20gdXNlcnNwYWNlLgogICogVGhlIGNvbW1hbmQgYmxvY2sgKGlvKSBoYXMgYWxyZWFkeSBiZWVuIGNvcGllZCB0byBrZXJuZWwgc3BhY2UgZm9yIHVzLApAQCAtMTIyNSwxNyArMTI1NywxMSBAQAogCS8qIFByZSBzdWJtaXQgcHJvY2Vzc2luZyAqLwogCXN3aXRjaChpby0+Y21kKSB7CiAJY2FzZSBQQVNTVEhSVV9BOgotCQlwID0ga21hbGxvYyhpby0+c2dbMF0uc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcCkgCi0JCXsgCi0JCQllcnJvciA9IC1FTk9NRU07IAotCQkJY21kX2ZyZWUoaCwgYywgMCk7IAotCQkJcmV0dXJuKGVycm9yKTsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIocCwgaW8tPnNnWzBdLmFkZHIsIGlvLT5zZ1swXS5zaXplKSkgewotCQkJa2ZyZWUocCk7Ci0JCQljbWRfZnJlZShoLCBjLCAwKTsgCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJcCA9IG1lbWR1cF91c2VyKGlvLT5zZ1swXS5hZGRyLCBpby0+c2dbMF0uc2l6ZSk7CisJCWlmIChJU19FUlIocCkpIHsKKwkJCWVycm9yID0gUFRSX0VSUihwKTsKKwkJCWNtZF9mcmVlKGgsIGMsIDApOworCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWMtPnJlcS5oZHIuYmxrID0gcGNpX21hcF9zaW5nbGUoaC0+cGNpX2RldiwgJihpby0+YyksIAogCQkJCXNpemVvZihpZGFfaW9jdGxfdCksIApAQCAtMTI2NiwxOCArMTI5MiwxMiBAQAogCWNhc2UgRElBR19QQVNTX1RIUlU6CiAJY2FzZSBDT0xMRUNUX0JVRkZFUjoKIAljYXNlIFdSSVRFX0ZMQVNIX1JPTToKLQkJcCA9IGttYWxsb2MoaW8tPnNnWzBdLnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIXApIAotIAkJeyAKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gLUVOT01FTTsgCi0gICAgICAgICAgICAgICAgICAgICAgICBjbWRfZnJlZShoLCBjLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihlcnJvcik7CisJCXAgPSBtZW1kdXBfdXNlcihpby0+c2dbMF0uYWRkciwgaW8tPnNnWzBdLnNpemUpOworCQlpZiAoSVNfRVJSKHApKSB7CisJCQllcnJvciA9IFBUUl9FUlIocCk7CisJCQljbWRfZnJlZShoLCBjLCAwKTsKKwkJCXJldHVybiBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihwLCBpby0+c2dbMF0uYWRkciwgaW8tPnNnWzBdLnNpemUpKSB7Ci0JCQlrZnJlZShwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9mcmVlKGgsIGMsIDApOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KIAkJYy0+cmVxLnNnWzBdLnNpemUgPSBpby0+c2dbMF0uc2l6ZTsKIAkJYy0+cmVxLnNnWzBdLmFkZHIgPSBwY2lfbWFwX3NpbmdsZShoLT5wY2lfZGV2LCBwLCAKIAkJCWMtPnJlcS5zZ1swXS5zaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2FjdGxvZy5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKaW5kZXggZGYwMTg5OS4uOTQwMDg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfYWN0bG9nLmMKQEAgLTc5LDggKzc5LDggQEAKIAltZF9pby5lcnJvciA9IDA7CiAKIAlpZiAoKHJ3ICYgV1JJVEUpICYmICF0ZXN0X2JpdChNRF9OT19CQVJSSUVSLCAmbWRldi0+ZmxhZ3MpKQotCQlydyB8PSAoMSA8PCBCSU9fUldfQkFSUklFUik7Ci0JcncgfD0gKCgxPDxCSU9fUldfVU5QTFVHKSB8ICgxPDxCSU9fUldfU1lOQ0lPKSk7CisJCXJ3IHw9IFJFUV9IQVJEQkFSUklFUjsKKwlydyB8PSBSRVFfVU5QTFVHIHwgUkVRX1NZTkM7CiAKICByZXRyeToKIAliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sIDEpOwpAQCAtMTAzLDExICsxMDMsMTEgQEAKIAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgYmFycmllciBvcC4KIAkgKiB3b3VsZCByYXRoZXIgY2hlY2sgb24gRU9QTk9UU1VQUCwgYnV0IHRoYXQgaXMgbm90IHJlbGlhYmxlLgogCSAqIGRvbid0IHRyeSBhZ2FpbiBmb3IgQU5ZIHJldHVybiB2YWx1ZSAhPSAwICovCi0JaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmICFvaykpIHsKKwlpZiAodW5saWtlbHkoKGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpICYmICFvaykpIHsKIAkJLyogVHJ5IGFnYWluIHdpdGggbm8gYmFycmllciAqLwogCQlkZXZfd2FybihERVYsICJCYXJyaWVycyBub3Qgc3VwcG9ydGVkIG9uIG1ldGEgZGF0YSBkZXZpY2UgLSBkaXNhYmxpbmdcbiIpOwogCQlzZXRfYml0KE1EX05PX0JBUlJJRVIsICZtZGV2LT5mbGFncyk7Ci0JCXJ3ICY9IH4oMSA8PCBCSU9fUldfQkFSUklFUik7CisJCXJ3ICY9IH5SRVFfSEFSREJBUlJJRVI7CiAJCWJpb19wdXQoYmlvKTsKIAkJZ290byByZXRyeTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCmluZGV4IDQ4NWVkOGMuLjM1MjQ0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX2ludC5oCkBAIC01NTAsMTIgKzU1MCw2IEBACiAJdTMyCW9mZnNldDsJIC8qIHVzZWNzIHRoZSBwcm9iZSBnb3Qgc2VudCBhZnRlciB0aGUgcmVmZXJlbmNlIHRpbWUgcG9pbnQgKi8KIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBkZWxheV9wcm9iZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXVuc2lnbmVkIGludCBzZXFfbnVtOwotCXN0cnVjdCB0aW1ldmFsIHRpbWU7Ci19OwotCiAvKiBEQ0JQOiBEcmJkIENvbXByZXNzZWQgQml0bWFwIFBhY2tldCAuLi4gKi8KIHN0YXRpYyBpbmxpbmUgZW51bSBkcmJkX2JpdG1hcF9jb2RlCiBEQ0JQX2dldF9jb2RlKHN0cnVjdCBwX2NvbXByZXNzZWRfYm0gKnApCkBAIC05NDIsMTEgKzkzNiw5IEBACiAJdW5zaWduZWQgaW50IGtvX2NvdW50OwogCXN0cnVjdCBkcmJkX3dvcmsgIHJlc3luY193b3JrLAogCQkJICB1bnBsdWdfd29yaywKLQkJCSAgbWRfc3luY193b3JrLAotCQkJICBkZWxheV9wcm9iZV93b3JrOworCQkJICBtZF9zeW5jX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3QgcmVzeW5jX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0IG1kX3N5bmNfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgZGVsYXlfcHJvYmVfdGltZXI7CiAKIAkvKiBVc2VkIGFmdGVyIGF0dGFjaCB3aGlsZSBuZWdvdGlhdGluZyBuZXcgZGlzayBzdGF0ZS4gKi8KIAl1bmlvbiBkcmJkX3N0YXRlIG5ld19zdGF0ZV90bXA7CkBAIC0xMDYyLDEyICsxMDU0LDYgQEAKIAl1NjQgZWRfdXVpZDsgLyogVVVJRCBvZiB0aGUgZXhwb3NlZCBkYXRhICovCiAJc3RydWN0IG11dGV4IHN0YXRlX211dGV4OwogCWNoYXIgY29uZ2VzdGlvbl9yZWFzb247ICAvKiBXaHkgd2Ugd2hlcmUgY29uZ2VzdGVkLi4uICovCi0Jc3RydWN0IGxpc3RfaGVhZCBkZWxheV9wcm9iZXM7IC8qIHByb3RlY3RlZCBieSBwZWVyX3NlcV9sb2NrICovCi0JaW50IGRhdGFfZGVsYXk7ICAgLyogRGVsYXkgb2YgcGFja2V0cyBvbiB0aGUgZGF0YS1zb2NrIGJlaGluZCBtZXRhLXNvY2sgKi8KLQl1bnNpZ25lZCBpbnQgZGVsYXlfc2VxOyAvKiBUbyBnZW5lcmF0ZSBzZXF1ZW5jZSBudW1iZXJzIG9mIGRlbGF5IHByb2JlcyAqLwotCXN0cnVjdCB0aW1ldmFsIGRwc190aW1lOyAvKiBkZWxheS1wcm9iZXMtc3RhcnQtdGltZSAqLwotCXVuc2lnbmVkIGludCBkcF92b2x1bWVfbGFzdDsgIC8qIHNlbmRfY250IG9mIGxhc3QgZGVsYXkgcHJvYmUgKi8KLQlpbnQgY19zeW5jX3JhdGU7IC8qIGN1cnJlbnQgcmVzeW5jIHJhdGUgYWZ0ZXIgZGVsYXlfcHJvYmUgbWFnaWMgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRyYmRfY29uZiAqbWlub3JfdG9fbWRldih1bnNpZ25lZCBpbnQgbWlub3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9tYWluLmMKaW5kZXggNzI1OGM5NS4uZmE2NTBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX21haW4uYwpAQCAtMjE4NCw0MyArMjE4NCw2IEBACiAJcmV0dXJuIG9rOwogfQogCi1zdGF0aWMgaW50IGRyYmRfc2VuZF9kZWxheV9wcm9iZShzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBzdHJ1Y3QgZHJiZF9zb2NrZXQgKmRzKQotewotCXN0cnVjdCBwX2RlbGF5X3Byb2JlIGRwOwotCWludCBvZmZzZXQsIG9rID0gMDsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0KLQltdXRleF9sb2NrKCZkcy0+bXV0ZXgpOwotCWlmIChsaWtlbHkoZHMtPnNvY2tldCkpIHsKLQkJZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCQlvZmZzZXQgPSBub3cudHZfdXNlYyAtIG1kZXYtPmRwc190aW1lLnR2X3VzZWMgKwotCQkJIChub3cudHZfc2VjIC0gbWRldi0+ZHBzX3RpbWUudHZfc2VjKSAqIDEwMDAwMDA7Ci0JCWRwLnNlcV9udW0gID0gY3B1X3RvX2JlMzIobWRldi0+ZGVsYXlfc2VxKTsKLQkJZHAub2Zmc2V0ICAgPSBjcHVfdG9fYmUzMihvZmZzZXQpOwotCi0JCW9rID0gX2RyYmRfc2VuZF9jbWQobWRldiwgZHMtPnNvY2tldCwgUF9ERUxBWV9QUk9CRSwKLQkJCQkgICAgKHN0cnVjdCBwX2hlYWRlciAqKSZkcCwgc2l6ZW9mKGRwKSwgMCk7Ci0JfQotCW11dGV4X3VubG9jaygmZHMtPm11dGV4KTsKLQotCXJldHVybiBvazsKLX0KLQotc3RhdGljIGludCBkcmJkX3NlbmRfZGVsYXlfcHJvYmVzKHN0cnVjdCBkcmJkX2NvbmYgKm1kZXYpCi17Ci0JaW50IG9rOwotCi0JbWRldi0+ZGVsYXlfc2VxKys7Ci0JZG9fZ2V0dGltZW9mZGF5KCZtZGV2LT5kcHNfdGltZSk7Ci0Jb2sgPSBkcmJkX3NlbmRfZGVsYXlfcHJvYmUobWRldiwgJm1kZXYtPm1ldGEpOwotCW9rID0gb2sgJiYgZHJiZF9zZW5kX2RlbGF5X3Byb2JlKG1kZXYsICZtZGV2LT5kYXRhKTsKLQotCW1kZXYtPmRwX3ZvbHVtZV9sYXN0ID0gbWRldi0+c2VuZF9jbnQ7Ci0JbW9kX3RpbWVyKCZtZGV2LT5kZWxheV9wcm9iZV90aW1lciwgamlmZmllcyArIG1kZXYtPnN5bmNfY29uZi5kcF9pbnRlcnZhbCAqIEhaIC8gMTApOwotCi0JcmV0dXJuIG9rOwotfQotCiAvKiBjYWxsZWQgb24gc25kdGltZW8KICAqIHJldHVybnMgRkFMU0UgaWYgd2Ugc2hvdWxkIHJldHJ5LAogICogVFJVRSBpZiB3ZSB0aGluayBjb25uZWN0aW9uIGlzIGRlYWQKQEAgLTIzNjksMzEgKzIzMzIsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBjb25zaWRlcl9kZWxheV9wcm9iZXMoc3RydWN0IGRyYmRfY29uZiAqbWRldikKLXsKLQlpZiAobWRldi0+c3RhdGUuY29ubiAhPSBDX1NZTkNfU09VUkNFIHx8IG1kZXYtPmFncmVlZF9wcm9fdmVyc2lvbiA8IDkzKQotCQlyZXR1cm47Ci0KLQlpZiAobWRldi0+ZHBfdm9sdW1lX2xhc3QgKyBtZGV2LT5zeW5jX2NvbmYuZHBfdm9sdW1lICogMiA8IG1kZXYtPnNlbmRfY250KQotCQlkcmJkX3NlbmRfZGVsYXlfcHJvYmVzKG1kZXYpOwotfQotCi1zdGF0aWMgaW50IHdfZGVsYXlfcHJvYmVzKHN0cnVjdCBkcmJkX2NvbmYgKm1kZXYsIHN0cnVjdCBkcmJkX3dvcmsgKncsIGludCBjYW5jZWwpCi17Ci0JaWYgKCFjYW5jZWwgJiYgbWRldi0+c3RhdGUuY29ubiA9PSBDX1NZTkNfU09VUkNFKQotCQlkcmJkX3NlbmRfZGVsYXlfcHJvYmVzKG1kZXYpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGF5X3Byb2JlX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgZHJiZF9jb25mICptZGV2ID0gKHN0cnVjdCBkcmJkX2NvbmYgKikgZGF0YTsKLQotCWlmIChsaXN0X2VtcHR5KCZtZGV2LT5kZWxheV9wcm9iZV93b3JrLmxpc3QpKQotCQlkcmJkX3F1ZXVlX3dvcmsoJm1kZXYtPmRhdGEud29yaywgJm1kZXYtPmRlbGF5X3Byb2JlX3dvcmspOwotfQotCiAvKiBVc2VkIHRvIHNlbmQgd3JpdGUgcmVxdWVzdHMKICAqIFJfUFJJTUFSWSAtPiBQZWVyCShQX0RBVEEpCiAgKi8KQEAgLTI0MjUsMTUgKzIzNjMsMTUgQEAKIAkvKiBOT1RFOiBubyBuZWVkIHRvIGNoZWNrIGlmIGJhcnJpZXJzIHN1cHBvcnRlZCBoZXJlIGFzIHdlIHdvdWxkCiAJICogICAgICAgbm90IHBhc3MgdGhlIHRlc3QgaW4gbWFrZV9yZXF1ZXN0X2NvbW1vbiBpbiB0aGF0IGNhc2UKIAkgKi8KLQlpZiAoYmlvX3J3X2ZsYWdnZWQocmVxLT5tYXN0ZXJfYmlvLCBCSU9fUldfQkFSUklFUikpIHsKKwlpZiAocmVxLT5tYXN0ZXJfYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikgewogCQlkZXZfZXJyKERFViwgIkFTU0VSVCBGQUlMRUQgd291bGQgaGF2ZSBzZXQgRFBfSEFSREJBUlJJRVJcbiIpOwogCQkvKiBkcF9mbGFncyB8PSBEUF9IQVJEQkFSUklFUjsgKi8KIAl9Ci0JaWYgKGJpb19yd19mbGFnZ2VkKHJlcS0+bWFzdGVyX2JpbywgQklPX1JXX1NZTkNJTykpCisJaWYgKHJlcS0+bWFzdGVyX2Jpby0+YmlfcncgJiBSRVFfU1lOQykKIAkJZHBfZmxhZ3MgfD0gRFBfUldfU1lOQzsKIAkvKiBmb3Igbm93IGhhbmRsZSBTWU5DSU8gYW5kIFVOUExVRwogCSAqIGFzIGlmIHRoZXkgc3RpbGwgd2VyZSBvbmUgYW5kIHRoZSBzYW1lIGZsYWcgKi8KLQlpZiAoYmlvX3J3X2ZsYWdnZWQocmVxLT5tYXN0ZXJfYmlvLCBCSU9fUldfVU5QTFVHKSkKKwlpZiAocmVxLT5tYXN0ZXJfYmlvLT5iaV9ydyAmIFJFUV9VTlBMVUcpCiAJCWRwX2ZsYWdzIHw9IERQX1JXX1NZTkM7CiAJaWYgKG1kZXYtPnN0YXRlLmNvbm4gPj0gQ19TWU5DX1NPVVJDRSAmJgogCSAgICBtZGV2LT5zdGF0ZS5jb25uIDw9IENfUEFVU0VEX1NZTkNfVCkKQEAgLTI0NTcsOSArMjM5NSw2IEBACiAKIAlkcmJkX3B1dF9kYXRhX3NvY2sobWRldik7CiAKLQlpZiAob2spCi0JCWNvbnNpZGVyX2RlbGF5X3Byb2JlcyhtZGV2KTsKLQogCXJldHVybiBvazsKIH0KIApAQCAtMjUwNiw5ICsyNDQxLDYgQEAKIAogCWRyYmRfcHV0X2RhdGFfc29jayhtZGV2KTsKIAotCWlmIChvaykKLQkJY29uc2lkZXJfZGVsYXlfcHJvYmVzKG1kZXYpOwotCiAJcmV0dXJuIG9rOwogfQogCkBAIC0yNjA0LDYgKzI1MzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJ2ID0gMDsKIAorCWxvY2tfa2VybmVsKCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1kZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAJLyogdG8gaGF2ZSBhIHN0YWJsZSBtZGV2LT5zdGF0ZS5yb2xlCiAJICogYW5kIG5vIHJhY2Ugd2l0aCB1cGRhdGluZyBvcGVuX2NudCAqLwpAQCAtMjYxOCw2ICsyNTUxLDcgQEAKIAlpZiAoIXJ2KQogCQltZGV2LT5vcGVuX2NudCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kZXYtPnJlcV9sb2NrLCBmbGFncyk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJ2OwogfQpAQCAtMjYyNSw3ICsyNTU5LDkgQEAKIHN0YXRpYyBpbnQgZHJiZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpnZCwgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBkcmJkX2NvbmYgKm1kZXYgPSBnZC0+cHJpdmF0ZV9kYXRhOworCWxvY2tfa2VybmVsKCk7CiAJbWRldi0+b3Blbl9jbnQtLTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NjAsOSArMjU5NiwyMCBAQAogCiBzdGF0aWMgdm9pZCBkcmJkX3NldF9kZWZhdWx0cyhzdHJ1Y3QgZHJiZF9jb25mICptZGV2KQogewotCW1kZXYtPnN5bmNfY29uZi5hZnRlciAgICAgID0gRFJCRF9BRlRFUl9ERUY7Ci0JbWRldi0+c3luY19jb25mLnJhdGUgICAgICAgPSBEUkJEX1JBVEVfREVGOwotCW1kZXYtPnN5bmNfY29uZi5hbF9leHRlbnRzID0gRFJCRF9BTF9FWFRFTlRTX0RFRjsKKwkvKiBUaGlzIHdheSB3ZSBnZXQgYSBjb21waWxlIGVycm9yIHdoZW4gc3luY19jb25mIGdyb3dzLAorCSAgIGFuZCB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBpdCBoZXJlICovCisJbWRldi0+c3luY19jb25mID0gKHN0cnVjdCBzeW5jZXJfY29uZikgeworCQkvKiAucmF0ZSA9ICovCQlEUkJEX1JBVEVfREVGLAorCQkvKiAuYWZ0ZXIgPSAqLwkJRFJCRF9BRlRFUl9ERUYsCisJCS8qIC5hbF9leHRlbnRzID0gKi8JRFJCRF9BTF9FWFRFTlRTX0RFRiwKKwkJLyogLnZlcmlmeV9hbGcgPSAqLwl7fSwgMCwKKwkJLyogLmNwdV9tYXNrID0gKi8Je30sIDAsCisJCS8qIC5jc3Vtc19hbGcgPSAqLwl7fSwgMCwKKwkJLyogLnVzZV9ybGUgPSAqLwkwCisJfTsKKworCS8qIEhhdmUgdG8gdXNlIHRoYXQgd2F5LCBiZWNhdXNlIHRoZSBsYXlvdXQgZGlmZmVycyBiZXR3ZWVuCisJICAgYmlnIGVuZGlhbiBhbmQgbGl0dGxlIGVuZGlhbiAqLwogCW1kZXYtPnN0YXRlID0gKHVuaW9uIGRyYmRfc3RhdGUpIHsKIAkJeyAucm9sZSA9IFJfU0VDT05EQVJZLAogCQkgIC5wZWVyID0gUl9VTktOT1dOLApAQCAtMjcyMSwyNCArMjY2OCwxNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtZGV2LT51bnBsdWdfd29yay5saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmbWRldi0+bWRfc3luY193b3JrLmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZtZGV2LT5ibV9pb193b3JrLncubGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1kZXYtPmRlbGF5X3Byb2Jlcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1kZXYtPmRlbGF5X3Byb2JlX3dvcmsubGlzdCk7CiAKIAltZGV2LT5yZXN5bmNfd29yay5jYiAgPSB3X3Jlc3luY19pbmFjdGl2ZTsKIAltZGV2LT51bnBsdWdfd29yay5jYiAgPSB3X3NlbmRfd3JpdGVfaGludDsKIAltZGV2LT5tZF9zeW5jX3dvcmsuY2IgPSB3X21kX3N5bmM7CiAJbWRldi0+Ym1faW9fd29yay53LmNiID0gd19iaXRtYXBfaW87Ci0JbWRldi0+ZGVsYXlfcHJvYmVfd29yay5jYiA9IHdfZGVsYXlfcHJvYmVzOwogCWluaXRfdGltZXIoJm1kZXYtPnJlc3luY190aW1lcik7CiAJaW5pdF90aW1lcigmbWRldi0+bWRfc3luY190aW1lcik7Ci0JaW5pdF90aW1lcigmbWRldi0+ZGVsYXlfcHJvYmVfdGltZXIpOwogCW1kZXYtPnJlc3luY190aW1lci5mdW5jdGlvbiA9IHJlc3luY190aW1lcl9mbjsKIAltZGV2LT5yZXN5bmNfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBtZGV2OwogCW1kZXYtPm1kX3N5bmNfdGltZXIuZnVuY3Rpb24gPSBtZF9zeW5jX3RpbWVyX2ZuOwogCW1kZXYtPm1kX3N5bmNfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBtZGV2OwotCW1kZXYtPmRlbGF5X3Byb2JlX3RpbWVyLmZ1bmN0aW9uID0gZGVsYXlfcHJvYmVfdGltZXJfZm47Ci0JbWRldi0+ZGVsYXlfcHJvYmVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBtZGV2OwotCiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGV2LT5taXNjX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kZXYtPnN0YXRlX3dhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX25sLmMKaW5kZXggMjE1MWYxOC4uNzMxMzFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfbmwuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9ubC5jCkBAIC0xNTU3LDEwICsxNTU3LDYgQEAKIAkJc2MucmF0ZSAgICAgICA9IERSQkRfUkFURV9ERUY7CiAJCXNjLmFmdGVyICAgICAgPSBEUkJEX0FGVEVSX0RFRjsKIAkJc2MuYWxfZXh0ZW50cyA9IERSQkRfQUxfRVhURU5UU19ERUY7Ci0JCXNjLmRwX3ZvbHVtZSAgPSBEUkJEX0RQX1ZPTFVNRV9ERUY7Ci0JCXNjLmRwX2ludGVydmFsID0gRFJCRF9EUF9JTlRFUlZBTF9ERUY7Ci0JCXNjLnRocm90dGxlX3RoID0gRFJCRF9SU19USFJPVFRMRV9USF9ERUY7Ci0JCXNjLmhvbGRfb2ZmX3RoID0gRFJCRF9SU19IT0xEX09GRl9USF9ERUY7CiAJfSBlbHNlCiAJCW1lbWNweSgmc2MsICZtZGV2LT5zeW5jX2NvbmYsIHNpemVvZihzdHJ1Y3Qgc3luY2VyX2NvbmYpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcHJvYy5jCmluZGV4IGQwZjE3NjcuLmJlMzM3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3Byb2MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9wcm9jLmMKQEAgLTczLDIxICs3MywxNCBAQAogCXNlcV9wcmludGYoc2VxLCAic3luYydlZDolM3UuJXUlJSAiLCByZXMgLyAxMCwgcmVzICUgMTApOwogCS8qIGlmIG1vcmUgdGhhbiAxIEdCIGRpc3BsYXkgaW4gTUIgKi8KIAlpZiAobWRldi0+cnNfdG90YWwgPiAweDEwMDAwMEwpCi0JCXNlcV9wcmludGYoc2VxLCAiKCVsdS8lbHUpTSIsCisJCXNlcV9wcmludGYoc2VxLCAiKCVsdS8lbHUpTVxuXHQiLAogCQkJICAgICh1bnNpZ25lZCBsb25nKSBCaXQyS0IocnNfbGVmdCA+PiAxMCksCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpIEJpdDJLQihtZGV2LT5yc190b3RhbCA+PiAxMCkpOwogCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICIoJWx1LyVsdSlLIiwKKwkJc2VxX3ByaW50ZihzZXEsICIoJWx1LyVsdSlLXG5cdCIsCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcpIEJpdDJLQihyc19sZWZ0KSwKIAkJCSAgICAodW5zaWduZWQgbG9uZykgQml0MktCKG1kZXYtPnJzX3RvdGFsKSk7CiAKLQlpZiAobWRldi0+c3RhdGUuY29ubiA9PSBDX1NZTkNfVEFSR0VUKQotCQlzZXFfcHJpbnRmKHNlcSwgIiBxdWV1ZV9kZWxheTogJWQuJWQgbXNcblx0IiwKLQkJCSAgIG1kZXYtPmRhdGFfZGVsYXkgLyAxMDAwLAotCQkJICAgKG1kZXYtPmRhdGFfZGVsYXkgJSAxMDAwKSAvIDEwMCk7Ci0JZWxzZSBpZiAobWRldi0+c3RhdGUuY29ubiA9PSBDX1NZTkNfU09VUkNFKQotCQlzZXFfcHJpbnRmKHNlcSwgIiBkZWxheV9wcm9iZTogJXVcblx0IiwgbWRldi0+ZGVsYXlfc2VxKTsKLQogCS8qIHNlZSBkcml2ZXJzL21kL21kLmMKIAkgKiBXZSBkbyBub3Qgd2FudCB0byBvdmVyZmxvdywgc28gdGhlIG9yZGVyIG9mIG9wZXJhbmRzIGFuZAogCSAqIHRoZSAqIDEwMCAvIDEwMCB0cmljayBhcmUgaW1wb3J0YW50LiBXZSBkbyBhICsxIHRvIGJlCkBAIC0xMzUsMTQgKzEyOCw2IEBACiAJZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgIiAoJWxkKSIsIGRiZHQpOwogCi0JaWYgKG1kZXYtPnN0YXRlLmNvbm4gPT0gQ19TWU5DX1RBUkdFVCkgewotCQlpZiAobWRldi0+Y19zeW5jX3JhdGUgPiAxMDAwKQotCQkJc2VxX3ByaW50ZihzZXEsICIgd2FudDogJWQsJTAzZCIsCi0JCQkJICAgbWRldi0+Y19zeW5jX3JhdGUgLyAxMDAwLCBtZGV2LT5jX3N5bmNfcmF0ZSAlIDEwMDApOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiB3YW50OiAlZCIsIG1kZXYtPmNfc3luY19yYXRlKTsKLQl9Ci0KIAlzZXFfcHJpbnRmKHNlcSwgIiBLL3NlY1xuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZWNlaXZlci5jCmluZGV4IGVjMTcxMWYuLjA4MTUyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlY2VpdmVyLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVjZWl2ZXIuYwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKIAliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKIAliaW8tPmJpX2JkZXYgPSBtZGV2LT5sZGV2LT5iYWNraW5nX2JkZXY7CiAJLyogd2Ugc3BlY2lhbCBjYXNlIHNvbWUgZmxhZ3MgaW4gdGhlIG11bHRpLWJpbyBjYXNlLCBzZWUgYmVsb3cKLQkgKiAoQklPX1JXX1VOUExVRywgQklPX1JXX0JBUlJJRVIpICovCisJICogKFJFUV9VTlBMVUcsIFJFUV9IQVJEQkFSUklFUikgKi8KIAliaW8tPmJpX3J3ID0gcnc7CiAJYmlvLT5iaV9wcml2YXRlID0gZTsKIAliaW8tPmJpX2VuZF9pbyA9IGRyYmRfZW5kaW9fc2VjOwpAQCAtMTIwOSwxNiArMTIwOSwxNiBAQAogCQliaW9zID0gYmlvcy0+YmlfbmV4dDsKIAkJYmlvLT5iaV9uZXh0ID0gTlVMTDsKIAotCQkvKiBzdHJpcCBvZmYgQklPX1JXX1VOUExVRyB1bmxlc3MgaXQgaXMgdGhlIGxhc3QgYmlvICovCisJCS8qIHN0cmlwIG9mZiBSRVFfVU5QTFVHIHVubGVzcyBpdCBpcyB0aGUgbGFzdCBiaW8gKi8KIAkJaWYgKGJpb3MpCi0JCQliaW8tPmJpX3J3ICY9IH4oMTw8QklPX1JXX1VOUExVRyk7CisJCQliaW8tPmJpX3J3ICY9IH5SRVFfVU5QTFVHOwogCiAJCWRyYmRfZ2VuZXJpY19tYWtlX3JlcXVlc3QobWRldiwgZmF1bHRfdHlwZSwgYmlvKTsKIAotCQkvKiBzdHJpcCBvZmYgQklPX1JXX0JBUlJJRVIsCisJCS8qIHN0cmlwIG9mZiBSRVFfSEFSREJBUlJJRVIsCiAJCSAqIHVubGVzcyBpdCBpcyB0aGUgZmlyc3Qgb3IgbGFzdCBiaW8gKi8KIAkJaWYgKGJpb3MgJiYgYmlvcy0+YmlfbmV4dCkKLQkJCWJpb3MtPmJpX3J3ICY9IH4oMTw8QklPX1JXX0JBUlJJRVIpOworCQkJYmlvcy0+YmlfcncgJj0gflJFUV9IQVJEQkFSUklFUjsKIAl9IHdoaWxlIChiaW9zKTsKIAltYXliZV9raWNrX2xvKG1kZXYpOwogCXJldHVybiAwOwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIH0KIAogLyoqCi0gKiB3X2VfcmVpc3N1ZSgpIC0gV29ya2VyIGNhbGxiYWNrOyBSZXN1Ym1pdCBhIGJpbywgd2l0aG91dCBCSU9fUldfQkFSUklFUiBzZXQKKyAqIHdfZV9yZWlzc3VlKCkgLSBXb3JrZXIgY2FsbGJhY2s7IFJlc3VibWl0IGEgYmlvLCB3aXRob3V0IFJFUV9IQVJEQkFSUklFUiBzZXQKICAqIEBtZGV2OglEUkJEIGRldmljZS4KICAqIEB3OgkJd29yayBvYmplY3QuCiAgKiBAY2FuY2VsOglUaGUgY29ubmVjdGlvbiB3aWxsIGJlIGNsb3NlZCBhbnl3YXlzICh1bnVzZWQgaW4gdGhpcyBjYWxsYmFjaykKQEAgLTEyNDUsNyArMTI0NSw3IEBACiAJICAgKGFuZCBERV9CQVJSSUVSX0lOX05FWFRfRVBPQ0hfSVNTVUVEIGluIHRoZSBwcmV2aW91cyBFcG9jaCkKIAkgICBzbyB0aGF0IHdlIGNhbiBmaW5pc2ggdGhhdCBlcG9jaCBpbiBkcmJkX21heV9maW5pc2hfZXBvY2goKS4KIAkgICBUaGF0IGlzIG5lY2Vzc2FyeSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBsb25nIGNoYWluIG9mIEVwb2NocywgYmVmb3JlCi0JICAgd2UgcmVhbGl6ZSB0aGF0IEJJT19SV19CQVJSSUVSIGlzIGFjdHVhbGx5IG5vdCBzdXBwb3J0ZWQgKi8KKwkgICB3ZSByZWFsaXplIHRoYXQgUkVRX0hBUkRCQVJSSUVSIGlzIGFjdHVhbGx5IG5vdCBzdXBwb3J0ZWQgKi8KIAogCS8qIEFzIGxvbmcgYXMgdGhlIC1FTk9UU1VQUCBvbiB0aGUgYmFycmllciBpcyByZXBvcnRlZCBpbW1lZGlhdGVseQogCSAgIHRoYXQgd2lsbCBuZXZlciB0cmlnZ2VyLiBJZiBpdCBpcyByZXBvcnRlZCBsYXRlLCB3ZSB3aWxsIGp1c3QKQEAgLTE4MjQsMTQgKzE4MjQsMTQgQEAKIAkJZXBvY2ggPSBsaXN0X2VudHJ5KGUtPmVwb2NoLT5saXN0LnByZXYsIHN0cnVjdCBkcmJkX2Vwb2NoLCBsaXN0KTsKIAkJaWYgKGVwb2NoID09IGUtPmVwb2NoKSB7CiAJCQlzZXRfYml0KERFX0NPTlRBSU5TX0FfQkFSUklFUiwgJmUtPmVwb2NoLT5mbGFncyk7Ci0JCQlydyB8PSAoMTw8QklPX1JXX0JBUlJJRVIpOworCQkJcncgfD0gUkVRX0hBUkRCQVJSSUVSOwogCQkJZS0+ZmxhZ3MgfD0gRUVfSVNfQkFSUklFUjsKIAkJfSBlbHNlIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmZXBvY2gtPmVwb2NoX3NpemUpID4gMSB8fAogCQkJICAgICF0ZXN0X2JpdChERV9DT05UQUlOU19BX0JBUlJJRVIsICZlcG9jaC0+ZmxhZ3MpKSB7CiAJCQkJc2V0X2JpdChERV9CQVJSSUVSX0lOX05FWFRfRVBPQ0hfSVNTVUVELCAmZXBvY2gtPmZsYWdzKTsKIAkJCQlzZXRfYml0KERFX0NPTlRBSU5TX0FfQkFSUklFUiwgJmUtPmVwb2NoLT5mbGFncyk7Ci0JCQkJcncgfD0gKDE8PEJJT19SV19CQVJSSUVSKTsKKwkJCQlydyB8PSBSRVFfSEFSREJBUlJJRVI7CiAJCQkJZS0+ZmxhZ3MgfD0gRUVfSVNfQkFSUklFUjsKIAkJCX0KIAkJfQpAQCAtMTg0MSwxMCArMTg0MSwxMCBAQAogCWRwX2ZsYWdzID0gYmUzMl90b19jcHUocC0+ZHBfZmxhZ3MpOwogCWlmIChkcF9mbGFncyAmIERQX0hBUkRCQVJSSUVSKSB7CiAJCWRldl9lcnIoREVWLCAiQVNTRVJUIEZBSUxFRCB3b3VsZCBoYXZlIHN1Ym1pdHRlZCBiYXJyaWVyIHJlcXVlc3RcbiIpOwotCQkvKiBydyB8PSAoMTw8QklPX1JXX0JBUlJJRVIpOyAqLworCQkvKiBydyB8PSBSRVFfSEFSREJBUlJJRVI7ICovCiAJfQogCWlmIChkcF9mbGFncyAmIERQX1JXX1NZTkMpCi0JCXJ3IHw9ICgxPDxCSU9fUldfU1lOQ0lPKSB8ICgxPDxCSU9fUldfVU5QTFVHKTsKKwkJcncgfD0gUkVRX1NZTkMgfCBSRVFfVU5QTFVHOwogCWlmIChkcF9mbGFncyAmIERQX01BWV9TRVRfSU5fU1lOQykKIAkJZS0+ZmxhZ3MgfD0gRUVfTUFZX1NFVF9JTl9TWU5DOwogCkBAIC0zNTU1LDE0ICszNTU1LDE1IEBACiAJcmV0dXJuIG9rOwogfQogCi1zdGF0aWMgaW50IHJlY2VpdmVfc2tpcChzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBzdHJ1Y3QgcF9oZWFkZXIgKmgpCitzdGF0aWMgaW50IHJlY2VpdmVfc2tpcF8oc3RydWN0IGRyYmRfY29uZiAqbWRldiwgc3RydWN0IHBfaGVhZGVyICpoLCBpbnQgc2lsZW50KQogewogCS8qIFRPRE8gemVybyBjb3B5IHNpbmsgOikgKi8KIAlzdGF0aWMgY2hhciBzaW5rWzEyOF07CiAJaW50IHNpemUsIHdhbnQsIHI7CiAKLQlkZXZfd2FybihERVYsICJza2lwcGluZyB1bmtub3duIG9wdGlvbmFsIHBhY2tldCB0eXBlICVkLCBsOiAlZCFcbiIsCi0JICAgICBoLT5jb21tYW5kLCBoLT5sZW5ndGgpOworCWlmICghc2lsZW50KQorCQlkZXZfd2FybihERVYsICJza2lwcGluZyB1bmtub3duIG9wdGlvbmFsIHBhY2tldCB0eXBlICVkLCBsOiAlZCFcbiIsCisJCSAgICAgaC0+Y29tbWFuZCwgaC0+bGVuZ3RoKTsKIAogCXNpemUgPSBoLT5sZW5ndGg7CiAJd2hpbGUgKHNpemUgPiAwKSB7CkBAIC0zNTc0LDYgKzM1NzUsMTYgQEAKIAlyZXR1cm4gc2l6ZSA9PSAwOwogfQogCitzdGF0aWMgaW50IHJlY2VpdmVfc2tpcChzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBzdHJ1Y3QgcF9oZWFkZXIgKmgpCit7CisJcmV0dXJuIHJlY2VpdmVfc2tpcF8obWRldiwgaCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9za2lwX3NpbGVudChzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBzdHJ1Y3QgcF9oZWFkZXIgKmgpCit7CisJcmV0dXJuIHJlY2VpdmVfc2tpcF8obWRldiwgaCwgMSk7Cit9CisKIHN0YXRpYyBpbnQgcmVjZWl2ZV9VbnBsdWdSZW1vdGUoc3RydWN0IGRyYmRfY29uZiAqbWRldiwgc3RydWN0IHBfaGVhZGVyICpoKQogewogCWlmIChtZGV2LT5zdGF0ZS5kaXNrID49IERfSU5DT05TSVNURU5UKQpAQCAtMzU4Niw5MiArMzU5Nyw2IEBACiAJcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIHRpbWV2YWxfc3ViX3VzKHN0cnVjdCB0aW1ldmFsKiB0diwgdW5zaWduZWQgaW50IHVzKQotewotCXR2LT50dl9zZWMgLT0gdXMgLyAxMDAwMDAwOwotCXVzID0gdXMgJSAxMDAwMDAwOwotCWlmICh0di0+dHZfdXNlYyA+IHVzKSB7Ci0JCXR2LT50dl91c2VjICs9IDEwMDAwMDA7Ci0JCXR2LT50dl9zZWMtLTsKLQl9Ci0JdHYtPnR2X3VzZWMgLT0gdXM7Ci19Ci0KLXN0YXRpYyB2b2lkIGdvdF9kZWxheV9wcm9iZShzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBpbnQgZnJvbSwgc3RydWN0IHBfZGVsYXlfcHJvYmUgKnApCi17Ci0Jc3RydWN0IGRlbGF5X3Byb2JlICpkcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsZTsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JaW50IHNlcV9udW07Ci0JaW50IG9mZnNldDsKLQlpbnQgZGF0YV9kZWxheTsKLQotCXNlcV9udW0gPSBiZTMyX3RvX2NwdShwLT5zZXFfbnVtKTsKLQlvZmZzZXQgID0gYmUzMl90b19jcHUocC0+b2Zmc2V0KTsKLQotCXNwaW5fbG9jaygmbWRldi0+cGVlcl9zZXFfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtZGV2LT5kZWxheV9wcm9iZXMpKSB7Ci0JCWlmIChmcm9tID09IFVTRV9EQVRBX1NPQ0tFVCkKLQkJCWxlID0gbWRldi0+ZGVsYXlfcHJvYmVzLm5leHQ7Ci0JCWVsc2UKLQkJCWxlID0gbWRldi0+ZGVsYXlfcHJvYmVzLnByZXY7Ci0KLQkJZHAgPSBsaXN0X2VudHJ5KGxlLCBzdHJ1Y3QgZGVsYXlfcHJvYmUsIGxpc3QpOwotCi0JCWlmIChkcC0+c2VxX251bSA9PSBzZXFfbnVtKSB7Ci0JCQlsaXN0X2RlbChsZSk7Ci0JCQlzcGluX3VubG9jaygmbWRldi0+cGVlcl9zZXFfbG9jayk7Ci0JCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0JCQl0aW1ldmFsX3N1Yl91cygmbm93LCBvZmZzZXQpOwotCQkJZGF0YV9kZWxheSA9Ci0JCQkJbm93LnR2X3VzZWMgLSBkcC0+dGltZS50dl91c2VjICsKLQkJCQkobm93LnR2X3NlYyAtIGRwLT50aW1lLnR2X3NlYykgKiAxMDAwMDAwOwotCi0JCQlpZiAoZGF0YV9kZWxheSA+IDApCi0JCQkJbWRldi0+ZGF0YV9kZWxheSA9IGRhdGFfZGVsYXk7Ci0KLQkJCWtmcmVlKGRwKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCWlmIChkcC0+c2VxX251bSA+IHNlcV9udW0pIHsKLQkJCXNwaW5fdW5sb2NrKCZtZGV2LT5wZWVyX3NlcV9sb2NrKTsKLQkJCWRldl93YXJuKERFViwgIlByZXZpb3VzIGFsbG9jYXRpb24gZmFpbHVyZSBvZiBzdHJ1Y3QgZGVsYXlfcHJvYmU/XG4iKTsKLQkJCXJldHVybjsgLyogRG8gbm90IGFsbG9jYSBhIHN0cnVjdCBkZWxheV9wcm9iZS4uLi4gKi8KLQkJfQotCX0KLQlzcGluX3VubG9jaygmbWRldi0+cGVlcl9zZXFfbG9jayk7Ci0KLQlkcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWxheV9wcm9iZSksIEdGUF9OT0lPKTsKLQlpZiAoIWRwKSB7Ci0JCWRldl93YXJuKERFViwgIkZhaWxlZCB0byBhbGxvY2F0ZSBhIHN0cnVjdCBkZWxheV9wcm9iZSwgZG8gbm90IHdvcnJ5LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcC0+c2VxX251bSA9IHNlcV9udW07Ci0JZG9fZ2V0dGltZW9mZGF5KCZkcC0+dGltZSk7Ci0JdGltZXZhbF9zdWJfdXMoJmRwLT50aW1lLCBvZmZzZXQpOwotCi0Jc3Bpbl9sb2NrKCZtZGV2LT5wZWVyX3NlcV9sb2NrKTsKLQlpZiAoZnJvbSA9PSBVU0VfREFUQV9TT0NLRVQpCi0JCWxpc3RfYWRkKCZkcC0+bGlzdCwgJm1kZXYtPmRlbGF5X3Byb2Jlcyk7Ci0JZWxzZQotCQlsaXN0X2FkZF90YWlsKCZkcC0+bGlzdCwgJm1kZXYtPmRlbGF5X3Byb2Jlcyk7Ci0Jc3Bpbl91bmxvY2soJm1kZXYtPnBlZXJfc2VxX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHJlY2VpdmVfZGVsYXlfcHJvYmUoc3RydWN0IGRyYmRfY29uZiAqbWRldiwgc3RydWN0IHBfaGVhZGVyICpoKQotewotCXN0cnVjdCBwX2RlbGF5X3Byb2JlICpwID0gKHN0cnVjdCBwX2RlbGF5X3Byb2JlICopaDsKLQotCUVSUl9JRihoLT5sZW5ndGggIT0gKHNpemVvZigqcCktc2l6ZW9mKCpoKSkpIHJldHVybiBGQUxTRTsKLQlpZiAoZHJiZF9yZWN2KG1kZXYsIGgtPnBheWxvYWQsIGgtPmxlbmd0aCkgIT0gaC0+bGVuZ3RoKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlnb3RfZGVsYXlfcHJvYmUobWRldiwgVVNFX0RBVEFfU09DS0VULCBwKTsKLQlyZXR1cm4gVFJVRTsKLX0KLQogdHlwZWRlZiBpbnQgKCpkcmJkX2NtZF9oYW5kbGVyX2YpKHN0cnVjdCBkcmJkX2NvbmYgKiwgc3RydWN0IHBfaGVhZGVyICopOwogCiBzdGF0aWMgZHJiZF9jbWRfaGFuZGxlcl9mIGRyYmRfZGVmYXVsdF9oYW5kbGVyW10gPSB7CkBAIC0zNjk1LDcgKzM2MjAsNyBAQAogCVtQX09WX1JFUVVFU1RdICAgICAgPSByZWNlaXZlX0RhdGFSZXF1ZXN0LAogCVtQX09WX1JFUExZXSAgICAgICAgPSByZWNlaXZlX0RhdGFSZXF1ZXN0LAogCVtQX0NTVU1fUlNfUkVRVUVTVF0gICAgPSByZWNlaXZlX0RhdGFSZXF1ZXN0LAotCVtQX0RFTEFZX1BST0JFXSAgICAgPSByZWNlaXZlX2RlbGF5X3Byb2JlLAorCVtQX0RFTEFZX1BST0JFXSAgICAgPSByZWNlaXZlX3NraXBfc2lsZW50LAogCS8qIGFueXRoaW5nIG1pc3NpbmcgZnJvbSB0aGlzIHRhYmxlIGlzIGluCiAJICogdGhlIGFzZW5kZXJfdGJsLCBzZWUgZ2V0X2FzZW5kZXJfY21kICovCiAJW1BfTUFYX0NNRF0JICAgID0gTlVMTCwKQEAgLTQ0NzIsMTEgKzQzOTcsOSBAQAogCXJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgaW50IGdvdF9kZWxheV9wcm9iZV9tKHN0cnVjdCBkcmJkX2NvbmYgKm1kZXYsIHN0cnVjdCBwX2hlYWRlciAqaCkKK3N0YXRpYyBpbnQgZ290X3NvbWV0aGluZ190b19pZ25vcmVfbShzdHJ1Y3QgZHJiZF9jb25mICptZGV2LCBzdHJ1Y3QgcF9oZWFkZXIgKmgpCiB7Ci0Jc3RydWN0IHBfZGVsYXlfcHJvYmUgKnAgPSAoc3RydWN0IHBfZGVsYXlfcHJvYmUgKiloOwotCi0JZ290X2RlbGF5X3Byb2JlKG1kZXYsIFVTRV9NRVRBX1NPQ0tFVCwgcCk7CisJLyogSUdOT1JFICovCiAJcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTQ1MDQsNyArNDQyNyw3IEBACiAJW1BfQkFSUklFUl9BQ0tdCSAgICA9IHsgc2l6ZW9mKHN0cnVjdCBwX2JhcnJpZXJfYWNrKSwgZ290X0JhcnJpZXJBY2sgfSwKIAlbUF9TVEFURV9DSEdfUkVQTFldID0geyBzaXplb2Yoc3RydWN0IHBfcmVxX3N0YXRlX3JlcGx5KSwgZ290X1JxU1JlcGx5IH0sCiAJW1BfUlNfSVNfSU5fU1lOQ10gICA9IHsgc2l6ZW9mKHN0cnVjdCBwX2Jsb2NrX2FjayksIGdvdF9Jc0luU3luYyB9LAotCVtQX0RFTEFZX1BST0JFXSAgICAgPSB7IHNpemVvZihzdHJ1Y3QgcF9kZWxheV9wcm9iZSksIGdvdF9kZWxheV9wcm9iZV9tIH0sCisJW1BfREVMQVlfUFJPQkVdICAgICA9IHsgc2l6ZW9mKHN0cnVjdCBwX2RlbGF5X3Byb2JlKSwgZ290X3NvbWV0aGluZ190b19pZ25vcmVfbSB9LAogCVtQX01BWF9DTURdCSAgICA9IHsgMCwgTlVMTCB9LAogCX07CiAJaWYgKGNtZCA+IFBfTUFYX0NNRCB8fCBhc2VuZGVyX3RibFtjbWRdLnByb2Nlc3MgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5jIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKaW5kZXggNjU0ZjFlZi4uZjc2MWQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKKysrIGIvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfcmVxLmMKQEAgLTk5Nyw3ICs5OTcsNyBAQAogCSAqIGJlY2F1c2Ugb2YgdGhvc2UgWFhYLCB0aGlzIGlzIG5vdCB5ZXQgZW5hYmxlZCwKIAkgKiBpLmUuIGluIGRyYmRfaW5pdF9zZXRfZGVmYXVsdHMgd2Ugc2V0IHRoZSBOT19CQVJSSUVSX1NVUFAgYml0LgogCSAqLwotCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiB0ZXN0X2JpdChOT19CQVJSSUVSX1NVUFAsICZtZGV2LT5mbGFncykpKSB7CisJaWYgKHVubGlrZWx5KGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpICYmIHRlc3RfYml0KE5PX0JBUlJJRVJfU1VQUCwgJm1kZXYtPmZsYWdzKSkgewogCQkvKiBkZXZfd2FybihERVYsICJSZWplY3RpbmcgYmFycmllciByZXF1ZXN0IGFzIHVuZGVybHlpbmcgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnRcbiIpOyAqLwogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfd29ya2VyLmMgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwppbmRleCBiNjIzY2VlLi5jYTRhMTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYworKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF93b3JrZXIuYwpAQCAtNDI0LDE4ICs0MjQsNiBAQAogCQlkcmJkX3F1ZXVlX3dvcmsoJm1kZXYtPmRhdGEud29yaywgJm1kZXYtPnJlc3luY193b3JrKTsKIH0KIAotc3RhdGljIGludCBjYWxjX3Jlc3luY19yYXRlKHN0cnVjdCBkcmJkX2NvbmYgKm1kZXYpCi17Ci0JaW50IGQgPSBtZGV2LT5kYXRhX2RlbGF5IC8gMTAwMDsgLyogdXMgLT4gbXMgKi8KLQlpbnQgdGQgPSBtZGV2LT5zeW5jX2NvbmYudGhyb3R0bGVfdGggKiAxMDA7ICAvKiAwLjFzIC0+IG1zICovCi0JaW50IGhkID0gbWRldi0+c3luY19jb25mLmhvbGRfb2ZmX3RoICogMTAwOyAgLyogMC4xcyAtPiBtcyAqLwotCWludCBjciA9IG1kZXYtPnN5bmNfY29uZi5yYXRlOwotCi0JcmV0dXJuIGQgPD0gdGQgPyBjciA6Ci0JCWQgPj0gaGQgPyAwIDoKLQkJY3IgKyAoY3IgKiAodGQgLSBkKSAvIChoZCAtIHRkKSk7Ci19Ci0KIGludCB3X21ha2VfcmVzeW5jX3JlcXVlc3Qoc3RydWN0IGRyYmRfY29uZiAqbWRldiwKIAkJc3RydWN0IGRyYmRfd29yayAqdywgaW50IGNhbmNlbCkKIHsKQEAgLTQ3Myw4ICs0NjEsNyBAQAogCW1heF9zZWdtZW50X3NpemUgPSBtZGV2LT5hZ3JlZWRfcHJvX3ZlcnNpb24gPCA5NCA/CiAJCXF1ZXVlX21heF9zZWdtZW50X3NpemUobWRldi0+cnFfcXVldWUpIDogRFJCRF9NQVhfU0VHTUVOVF9TSVpFOwogCi0JbWRldi0+Y19zeW5jX3JhdGUgPSBjYWxjX3Jlc3luY19yYXRlKG1kZXYpOwotCW51bWJlciA9IFNMRUVQX1RJTUUgKiBtZGV2LT5jX3N5bmNfcmF0ZSAgLyAoKEJNX0JMT0NLX1NJWkUgLyAxMDI0KSAqIEhaKTsKKwludW1iZXIgPSBTTEVFUF9USU1FICogbWRldi0+c3luY19jb25mLnJhdGUgIC8gKChCTV9CTE9DS19TSVpFIC8gMTAyNCkgKiBIWik7CiAJcGUgPSBhdG9taWNfcmVhZCgmbWRldi0+cnNfcGVuZGluZ19jbnQpOwogCiAJbXV0ZXhfbG9jaygmbWRldi0+ZGF0YS5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCA5MGM0MDM4Li5jZjA0YzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CkBAIC01MTQsOCArNTE1LDYgQEAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChmZGNfd2FpdCk7CiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY29tbWFuZF9kb25lKTsKIAotI2RlZmluZSBOT19TSUdOQUwgKCFpbnRlcnJ1cHRpYmxlIHx8ICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQogLyogRXJyb3JzIGR1cmluZyBmb3JtYXR0aW5nIGFyZSBjb3VudGVkIGhlcmUuICovCiBzdGF0aWMgaW50IGZvcm1hdF9lcnJvcnM7CiAKQEAgLTUzOSw3ICs1MzgsNyBAQAogCiBzdGF0aWMgaW50ICplcnJvcnM7CiB0eXBlZGVmIHZvaWQgKCpkb25lX2YpKGludCk7Ci1zdGF0aWMgc3RydWN0IGNvbnRfdCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRfdCB7CiAJdm9pZCAoKmludGVycnVwdCkodm9pZCk7CiAJCQkJLyogdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGludGVycnVwdCBvZiB0aGUKIAkJCQkgKiBtYWluIGNvbW1hbmQgKi8KQEAgLTU3OCw3ICs1NzcsNyBAQAogI2RlZmluZSBORUVEXzFfUkVDQUwJLTIKICNkZWZpbmUgTkVFRF8yX1JFQ0FMCS0zCiAKLXN0YXRpYyBpbnQgdXNhZ2VfY291bnQ7CitzdGF0aWMgYXRvbWljX3QgdXNhZ2VfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIAogLyogYnVmZmVyIHJlbGF0ZWQgdmFyaWFibGVzICovCiBzdGF0aWMgaW50IGJ1ZmZlcl90cmFjayA9IC0xOwpAQCAtODU4LDM2ICs4NTcsMTUgQEAKIH0KIAogLyogbG9ja3MgdGhlIGRyaXZlciAqLwotc3RhdGljIGludCBfbG9ja19mZGMoaW50IGRyaXZlLCBib29sIGludGVycnVwdGlibGUsIGludCBsaW5lKQorc3RhdGljIGludCBsb2NrX2ZkYyhpbnQgZHJpdmUsIGJvb2wgaW50ZXJydXB0aWJsZSkKIHsKLQlpZiAoIXVzYWdlX2NvdW50KSB7Ci0JCXByX2VycigiVHJ5aW5nIHRvIGxvY2sgZmRjIHdoaWxlIHVzYWdlIGNvdW50PTAgYXQgbGluZSAlZFxuIiwKLQkJICAgICAgIGxpbmUpOworCWlmIChXQVJOKGF0b21pY19yZWFkKCZ1c2FnZV9jb3VudCkgPT0gMCwKKwkJICJUcnlpbmcgdG8gbG9jayBmZGMgd2hpbGUgdXNhZ2UgY291bnQ9MFxuIikpCiAJCXJldHVybiAtMTsKLQl9CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmZmRjX2J1c3kpKSB7Ci0JCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCQlhZGRfd2FpdF9xdWV1ZSgmZmRjX3dhaXQsICZ3YWl0KTsKKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZkY193YWl0LCAhdGVzdF9hbmRfc2V0X2JpdCgwLCAmZmRjX2J1c3kpKSkKKwkJcmV0dXJuIC1FSU5UUjsKIAotCQlmb3IgKDs7KSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmZkY19idXN5KSkKLQkJCQlicmVhazsKLQotCQkJc2NoZWR1bGUoKTsKLQotCQkJaWYgKCFOT19TSUdOQUwpIHsKLQkJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmZmRjX3dhaXQsICZ3YWl0KTsKLQkJCQlyZXR1cm4gLUVJTlRSOwotCQkJfQotCQl9Ci0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJmZkY193YWl0LCAmd2FpdCk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfQogCWNvbW1hbmRfc3RhdHVzID0gRkRfQ09NTUFORF9OT05FOwogCiAJX19yZXNjaGVkdWxlX3RpbWVvdXQoZHJpdmUsICJsb2NrIGZkYyIpOwpAQCAtODk1LDExICs4NzMsOCBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIGxvY2tfZmRjKGRyaXZlLCBpbnRlcnJ1cHRpYmxlKQkJCVwKLQlfbG9ja19mZGMoZHJpdmUsIGludGVycnVwdGlibGUsIF9fTElORV9fKQotCiAvKiB1bmxvY2tzIHRoZSBkcml2ZXIgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfZmRjKHZvaWQpCitzdGF0aWMgdm9pZCB1bmxvY2tfZmRjKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTIyNCw3ICsxMTk5LDcgQEAKIC8qIFNldCBwZXJwZW5kaWN1bGFyIG1vZGUgYXMgcmVxdWlyZWQsIGJhc2VkIG9uIGRhdGEgcmF0ZSwgaWYgc3VwcG9ydGVkLgogICogODIwNzcgTm93IHRlc3RlZC4gMU1icHMgZGF0YSByYXRlIG9ubHkgcG9zc2libGUgd2l0aCA4MjA3Ny0xLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVycGVuZGljdWxhcl9tb2RlKHZvaWQpCitzdGF0aWMgdm9pZCBwZXJwZW5kaWN1bGFyX21vZGUodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHBlcnBfbW9kZTsKIApAQCAtMTk5NSwxNCArMTk3MCwxNCBAQAogCXdha2VfdXAoJmNvbW1hbmRfZG9uZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29udF90IHdha2V1cF9jb250ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb250X3Qgd2FrZXVwX2NvbnQgPSB7CiAJLmludGVycnVwdAk9IGVtcHR5LAogCS5yZWRvCQk9IGRvX3dha2V1cCwKIAkuZXJyb3IJCT0gZW1wdHksCiAJLmRvbmUJCT0gKGRvbmVfZillbXB0eQogfTsKIAotc3RhdGljIHN0cnVjdCBjb250X3QgaW50cl9jb250ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb250X3QgaW50cl9jb250ID0gewogCS5pbnRlcnJ1cHQJPSBlbXB0eSwKIAkucmVkbwkJPSBwcm9jZXNzX2ZkX3JlcXVlc3QsCiAJLmVycm9yCQk9IGVtcHR5LApAQCAtMjAxNSwyNSArMTk5MCwxMCBAQAogCiAJc2NoZWR1bGVfYmgoaGFuZGxlcik7CiAKLQlpZiAoY29tbWFuZF9zdGF0dXMgPCAyICYmIE5PX1NJR05BTCkgewotCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCQlhZGRfd2FpdF9xdWV1ZSgmY29tbWFuZF9kb25lLCAmd2FpdCk7Ci0JCWZvciAoOzspIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKGludGVycnVwdGlibGUgPwotCQkJCQkgIFRBU0tfSU5URVJSVVBUSUJMRSA6Ci0JCQkJCSAgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCi0JCQlpZiAoY29tbWFuZF9zdGF0dXMgPj0gMiB8fCAhTk9fU0lHTkFMKQotCQkJCWJyZWFrOwotCi0JCQlpc19hbGl2ZShfX2Z1bmNfXywgIiIpOwotCQkJc2NoZWR1bGUoKTsKLQkJfQotCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZjb21tYW5kX2RvbmUsICZ3YWl0KTsKLQl9CisJaWYgKGludGVycnVwdGlibGUpCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShjb21tYW5kX2RvbmUsIGNvbW1hbmRfc3RhdHVzID49IDIpOworCWVsc2UKKwkJd2FpdF9ldmVudChjb21tYW5kX2RvbmUsIGNvbW1hbmRfc3RhdHVzID49IDIpOwogCiAJaWYgKGNvbW1hbmRfc3RhdHVzIDwgMikgewogCQljYW5jZWxfYWN0aXZpdHkoKTsKQEAgLTIyMjMsNyArMjE4Myw3IEBACiAJZGVidWd0KF9fZnVuY19fLCAicXVldWUgZm9ybWF0IHJlcXVlc3QiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjb250X3QgZm9ybWF0X2NvbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRfdCBmb3JtYXRfY29udCA9IHsKIAkuaW50ZXJydXB0CT0gZm9ybWF0X2ludGVycnVwdCwKIAkucmVkbwkJPSByZWRvX2Zvcm1hdCwKIAkuZXJyb3IJCT0gYmFkX2ZscF9pbnRyLApAQCAtMjU4MywxMCArMjU0Myw4IEBACiAJaW50IHRyYWNrc2l6ZTsKIAlpbnQgc3NpemU7CiAKLQlpZiAobWF4X2J1ZmZlcl9zZWN0b3JzID09IDApIHsKLQkJcHJfaW5mbygiVkZTOiBCbG9jayBJL08gc2NoZWR1bGVkIG9uIHVub3BlbmVkIGRldmljZVxuIik7CisJaWYgKFdBUk4obWF4X2J1ZmZlcl9zZWN0b3JzID09IDAsICJWRlM6IEJsb2NrIEkvTyBzY2hlZHVsZWQgb24gdW5vcGVuZWQgZGV2aWNlXG4iKSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJc2V0X2ZkYygobG9uZyljdXJyZW50X3JlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtMjkyMSw3ICsyODc5LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29udF90IHJ3X2NvbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRfdCByd19jb250ID0gewogCS5pbnRlcnJ1cHQJPSByd19pbnRlcnJ1cHQsCiAJLnJlZG8JCT0gcmVkb19mZF9yZXF1ZXN0LAogCS5lcnJvcgkJPSBiYWRfZmxwX2ludHIsCkBAIC0yOTM2LDE5ICsyODk0LDE2IEBACiAKIHN0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JaWYgKG1heF9idWZmZXJfc2VjdG9ycyA9PSAwKSB7Ci0JCXByX2luZm8oIlZGUzogJXMgY2FsbGVkIG9uIG5vbi1vcGVuIGRldmljZVxuIiwgX19mdW5jX18pOworCWlmIChXQVJOKG1heF9idWZmZXJfc2VjdG9ycyA9PSAwLAorCQkgIlZGUzogJXMgY2FsbGVkIG9uIG5vbi1vcGVuIGRldmljZVxuIiwgX19mdW5jX18pKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKHVzYWdlX2NvdW50ID09IDApIHsKLQkJcHJfaW5mbygid2FybmluZzogdXNhZ2UgY291bnQ9MCwgY3VycmVudF9yZXE9JXAgZXhpdGluZ1xuIiwKLQkJCWN1cnJlbnRfcmVxKTsKLQkJcHJfaW5mbygic2VjdD0lbGQgdHlwZT0leCBmbGFncz0leFxuIiwKLQkJCShsb25nKWJsa19ycV9wb3MoY3VycmVudF9yZXEpLCBjdXJyZW50X3JlcS0+Y21kX3R5cGUsCi0JCQljdXJyZW50X3JlcS0+Y21kX2ZsYWdzKTsKKwlpZiAoV0FSTihhdG9taWNfcmVhZCgmdXNhZ2VfY291bnQpID09IDAsCisJCSAid2FybmluZzogdXNhZ2UgY291bnQ9MCwgY3VycmVudF9yZXE9JXAgc2VjdD0lbGQgdHlwZT0leCBmbGFncz0leFxuIiwKKwkJIGN1cnJlbnRfcmVxLCAobG9uZylibGtfcnFfcG9zKGN1cnJlbnRfcmVxKSwgY3VycmVudF9yZXEtPmNtZF90eXBlLAorCQkgY3VycmVudF9yZXEtPmNtZF9mbGFncykpCiAJCXJldHVybjsKLQl9CisKIAlpZiAodGVzdF9iaXQoMCwgJmZkY19idXN5KSkgewogCQkvKiBmZGMgYnVzeSwgdGhpcyBuZXcgcmVxdWVzdCB3aWxsIGJlIHRyZWF0ZWQgd2hlbiB0aGUKIAkJICAgY3VycmVudCBvbmUgaXMgZG9uZSAqLwpAQCAtMjk2MCw3ICsyOTE1LDcgQEAKIAlpc19hbGl2ZShfX2Z1bmNfXywgIiIpOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbnRfdCBwb2xsX2NvbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbnRfdCBwb2xsX2NvbnQgPSB7CiAJLmludGVycnVwdAk9IHN1Y2Nlc3NfYW5kX3dha2V1cCwKIAkucmVkbwkJPSBmbG9wcHlfcmVhZHksCiAJLmVycm9yCQk9IGdlbmVyaWNfZmFpbHVyZSwKQEAgLTI5OTEsNyArMjk0Niw3IEBACiAJcHJfaW5mbygid2VpcmQsIHJlc2V0IGludGVycnVwdCBjYWxsZWRcbiIpOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbnRfdCByZXNldF9jb250ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb250X3QgcmVzZXRfY29udCA9IHsKIAkuaW50ZXJydXB0CT0gcmVzZXRfaW50ciwKIAkucmVkbwkJPSBzdWNjZXNzX2FuZF93YWtldXAsCiAJLmVycm9yCQk9IGdlbmVyaWNfZmFpbHVyZSwKQEAgLTMwMzMsNyArMjk4OCw3IEBACiAJcmV0dXJuIGNvcHlfZnJvbV91c2VyKGFkZHJlc3MsIHBhcmFtLCBzaXplKSA/IC1FRkFVTFQgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRyaXZlX25hbWUoaW50IHR5cGUsIGludCBkcml2ZSkKK3N0YXRpYyBjb25zdCBjaGFyICpkcml2ZV9uYW1lKGludCB0eXBlLCBpbnQgZHJpdmUpCiB7CiAJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmZsb3BweTsKIApAQCAtMzA5NiwxNCArMzA1MSwxNCBAQAogCWdlbmVyaWNfZG9uZShmbGFnKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjb250X3QgcmF3X2NtZF9jb250ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb250X3QgcmF3X2NtZF9jb250ID0gewogCS5pbnRlcnJ1cHQJPSBzdWNjZXNzX2FuZF93YWtldXAsCiAJLnJlZG8JCT0gZmxvcHB5X3N0YXJ0LAogCS5lcnJvcgkJPSBnZW5lcmljX2ZhaWx1cmUsCiAJLmRvbmUJCT0gcmF3X2NtZF9kb25lCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCByYXdfY21kX2NvcHlvdXQoaW50IGNtZCwgdm9pZCBfX3VzZXIgKnBhcmFtLAorc3RhdGljIGludCByYXdfY21kX2NvcHlvdXQoaW50IGNtZCwgdm9pZCBfX3VzZXIgKnBhcmFtLAogCQkJCSAgc3RydWN0IGZsb3BweV9yYXdfY21kICpwdHIpCiB7CiAJaW50IHJldDsKQEAgLTMxNDgsNyArMzEwMyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludCByYXdfY21kX2NvcHlpbihpbnQgY21kLCB2b2lkIF9fdXNlciAqcGFyYW0sCitzdGF0aWMgaW50IHJhd19jbWRfY29weWluKGludCBjbWQsIHZvaWQgX191c2VyICpwYXJhbSwKIAkJCQkgc3RydWN0IGZsb3BweV9yYXdfY21kICoqcmNtZCkKIHsKIAlzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKnB0cjsKQEAgLTMyNjYsNyArMzIyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNldF9nZW9tZXRyeSh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqZywKK3N0YXRpYyBpbnQgc2V0X2dlb21ldHJ5KHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBmbG9wcHlfc3RydWN0ICpnLAogCQkJICAgICAgIGludCBkcml2ZSwgaW50IHR5cGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7CiAJaW50IGNudDsKQEAgLTMzMzcsNyArMzI5Miw3IEBACiB9CiAKIC8qIGhhbmRsZSBvYnNvbGV0ZSBpb2N0bCdzICovCi1zdGF0aWMgaW50IGlvY3RsX3RhYmxlW10gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGlvY3RsX3RhYmxlW10gPSB7CiAJRkRDTFJQUk0sCiAJRkRTRVRQUk0sCiAJRkRERUZQUk0sCkBAIC0zMzY1LDcgKzMzMjAsNyBAQAogCUZEVFdBRERMRQogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbm9ybWFsaXplX2lvY3RsKGludCAqY21kLCBpbnQgKnNpemUpCitzdGF0aWMgaW50IG5vcm1hbGl6ZV9pb2N0bCh1bnNpZ25lZCBpbnQgKmNtZCwgaW50ICpzaXplKQogewogCWludCBpOwogCkBAIC0zNDE3LDcgKzMzNzIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGNtZCwKK3N0YXRpYyBpbnQgZmRfbG9ja2VkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyYW0pCiB7CiAJaW50IGRyaXZlID0gKGxvbmcpYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwpAQCAtMzU5Myw2ICszNTQ4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGZkX2xvY2tlZF9pb2N0bChiZGV2LCBtb2RlLCBjbWQsIHBhcmFtKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgY29uZmlnX3R5cGVzKHZvaWQpCiB7CiAJYm9vbCBoYXNfZHJpdmUgPSBmYWxzZTsKQEAgLTM2NDksNiArMzYxNiw3IEBACiB7CiAJaW50IGRyaXZlID0gKGxvbmcpZGlzay0+cHJpdmF0ZV9kYXRhOwogCisJbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZvcGVuX2xvY2spOwogCWlmIChVRFJTLT5mZF9yZWYgPCAwKQogCQlVRFJTLT5mZF9yZWYgPSAwOwpAQCAtMzY1OSw2ICszNjI3LDcgQEAKIAlpZiAoIVVEUlMtPmZkX3JlZikKIAkJb3BlbmVkX2JkZXZbZHJpdmVdID0gTlVMTDsKIAltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjc2LDYgKzM2NDUsNyBAQAogCWludCByZXMgPSAtRUJVU1k7CiAJY2hhciAqdG1wOwogCisJbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZvcGVuX2xvY2spOwogCW9sZF9kZXYgPSBVRFJTLT5mZF9kZXZpY2U7CiAJaWYgKG9wZW5lZF9iZGV2W2RyaXZlXSAmJiBvcGVuZWRfYmRldltkcml2ZV0gIT0gYmRldikKQEAgLTM3NTIsNiArMzcyMiw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIG91dDoKIAlpZiAoVURSUy0+ZmRfcmVmIDwgMCkKQEAgLTM3NjIsNiArMzczMyw3IEBACiAJCW9wZW5lZF9iZGV2W2RyaXZlXSA9IE5VTEw7CiBvdXQyOgogCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMzgyOSw2ICszODAxLDcgQEAKIAliaW8uYmlfc2l6ZSA9IHNpemU7CiAJYmlvLmJpX2JkZXYgPSBiZGV2OwogCWJpby5iaV9zZWN0b3IgPSAwOworCWJpby5iaV9mbGFncyA9IEJJT19RVUlFVDsKIAlpbml0X2NvbXBsZXRpb24oJmNvbXBsZXRlKTsKIAliaW8uYmlfcHJpdmF0ZSA9ICZjb21wbGV0ZTsKIAliaW8uYmlfZW5kX2lvID0gZmxvcHB5X3JiMF9jb21wbGV0ZTsKQEAgLTM4NTcsMTAgKzM4MzAsMTAgQEAKIAlpZiAodGVzdF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChGRF9WRVJJRllfQklULCAmVURSUy0+ZmxhZ3MpIHx8CiAJICAgIHRlc3RfYml0KGRyaXZlLCAmZmFrZV9jaGFuZ2UpIHx8IE5PX0dFT00pIHsKLQkJaWYgKHVzYWdlX2NvdW50ID09IDApIHsKLQkJCXByX2luZm8oIlZGUzogcmV2YWxpZGF0ZSBjYWxsZWQgb24gbm9uLW9wZW4gZGV2aWNlLlxuIik7CisJCWlmIChXQVJOKGF0b21pY19yZWFkKCZ1c2FnZV9jb3VudCkgPT0gMCwKKwkJCSAiVkZTOiByZXZhbGlkYXRlIGNhbGxlZCBvbiBub24tb3BlbiBkZXZpY2UuXG4iKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl9CisKIAkJbG9ja19mZGMoZHJpdmUsIGZhbHNlKTsKIAkJY2YgPSAodGVzdF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKSB8fAogCQkgICAgICB0ZXN0X2JpdChGRF9WRVJJRllfQklULCAmVURSUy0+ZmxhZ3MpKTsKQEAgLTM4OTMsNyArMzg2Niw3IEBACiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJCT0gZmxvcHB5X29wZW4sCiAJLnJlbGVhc2UJCT0gZmxvcHB5X3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAkJPSBmZF9pb2N0bCwKKwkuaW9jdGwJCQk9IGZkX2lvY3RsLAogCS5nZXRnZW8JCQk9IGZkX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAkJPSBjaGVja19mbG9wcHlfY2hhbmdlLAogCS5yZXZhbGlkYXRlX2Rpc2sJPSBmbG9wcHlfcmV2YWxpZGF0ZSwKQEAgLTQxMjYsNyArNDA5OSw3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIFVEUC0+Y21vcyk7CiB9CiAKLURFVklDRV9BVFRSKGNtb3MsIFNfSVJVR08sIGZsb3BweV9jbW9zX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNtb3MsIFNfSVJVR08sIGZsb3BweV9jbW9zX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgdm9pZCBmbG9wcHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDE3NSw2ICs0MTQ4LDkgQEAKIAlpbnQgaSwgdW5pdCwgZHJpdmU7CiAJaW50IGVyciwgZHI7CiAKKwlzZXRfZGVidWd0KCk7CisJaW50ZXJydXB0amlmZmllcyA9IHJlc3VsdGppZmZpZXMgPSBqaWZmaWVzOworCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDKQogCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEZEQzEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTQzNTMsNyArNDMyOSw3IEBACiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmZsb3BweV9kZXZpY2VbZHJpdmVdKTsKIG91dF9mbHVzaF93b3JrOgogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JaWYgKHVzYWdlX2NvdW50KQorCWlmIChhdG9taWNfcmVhZCgmdXNhZ2VfY291bnQpKQogCQlmbG9wcHlfcmVsZWFzZV9pcnFfYW5kX2RtYSgpOwogb3V0X3VucmVnX3JlZ2lvbjoKIAlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKQEAgLTQzNzAsOCArNDM0Niw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhmbG9wcHlfdXNhZ2VfbG9jayk7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9fcmVnaW9uIHsKIAlpbnQgb2Zmc2V0OwogCWludCBzaXplOwpAQCAtNDQxNywxNCArNDM5MSw4IEBACiAKIHN0YXRpYyBpbnQgZmxvcHB5X2dyYWJfaXJxX2FuZF9kbWEodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHVzYWdlX2NvdW50KyspIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmxvcHB5X3VzYWdlX2xvY2ssIGZsYWdzKTsKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnVzYWdlX2NvdW50KSA+IDEpCiAJCXJldHVybiAwOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmbG9wcHlfdXNhZ2VfbG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBXZSBtaWdodCBoYXZlIHNjaGVkdWxlZCBhIGZyZWVfaXJxKCksIHdhaXQgaXQgdG8KQEAgLTQ0MzUsOSArNDQwMyw3IEBACiAJaWYgKGZkX3JlcXVlc3RfaXJxKCkpIHsKIAkJRFBSSU5UKCJVbmFibGUgdG8gZ3JhYiBJUlElZCBmb3IgdGhlIGZsb3BweSBkcml2ZXJcbiIsCiAJCSAgICAgICBGTE9QUFlfSVJRKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7Ci0JCXVzYWdlX2NvdW50LS07Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7CisJCWF0b21pY19kZWMoJnVzYWdlX2NvdW50KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlpZiAoZmRfcmVxdWVzdF9kbWEoKSkgewpAQCAtNDQ0Nyw5ICs0NDEzLDcgQEAKIAkJCXVzZV92aXJ0dWFsX2RtYSA9IGNhbl91c2VfdmlydHVhbF9kbWEgPSAxOwogCQlpZiAoIShjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMSkpIHsKIAkJCWZkX2ZyZWVfaXJxKCk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmxvcHB5X3VzYWdlX2xvY2ssIGZsYWdzKTsKLQkJCXVzYWdlX2NvdW50LS07Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmbG9wcHlfdXNhZ2VfbG9jaywgZmxhZ3MpOworCQkJYXRvbWljX2RlYygmdXNhZ2VfY291bnQpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtNDQ4NCw5ICs0NDQ4LDcgQEAKIAlmZF9mcmVlX2RtYSgpOwogCXdoaWxlICgtLWZkYyA+PSAwKQogCQlmbG9wcHlfcmVsZWFzZV9yZWdpb25zKGZkYyk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7Ci0JdXNhZ2VfY291bnQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmbG9wcHlfdXNhZ2VfbG9jaywgZmxhZ3MpOworCWF0b21pY19kZWMoJnVzYWdlX2NvdW50KTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTQ0OTgsMTQgKzQ0NjAsMTAgQEAKICNlbmRpZgogCWxvbmcgdG1wc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHRtcGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmbG9wcHlfdXNhZ2VfbG9jaywgZmxhZ3MpOwotCWlmICgtLXVzYWdlX2NvdW50KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZsb3BweV91c2FnZV9sb2NrLCBmbGFncyk7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZ1c2FnZV9jb3VudCkpCiAJCXJldHVybjsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmxvcHB5X3VzYWdlX2xvY2ssIGZsYWdzKTsKKwogCWlmIChpcnFkbWFfYWxsb2NhdGVkKSB7CiAJCWZkX2Rpc2FibGVfZG1hKCk7CiAJCWZkX2ZyZWVfZG1hKCk7CkBAIC00NTk4LDcgKzQ1NTYsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZmZF90aW1lcik7CiAJYmxrX2NsZWFudXBfcXVldWUoZmxvcHB5X3F1ZXVlKTsKIAotCWlmICh1c2FnZV9jb3VudCkKKwlpZiAoYXRvbWljX3JlYWQoJnVzYWdlX2NvdW50KSkKIAkJZmxvcHB5X3JlbGVhc2VfaXJxX2FuZF9kbWEoKTsKIAogCS8qIGVqZWN0IGRpc2ssIGlmIGFueSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IDgxYzc4YjMuLjMwZWM2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlyZXFfZGF0YV9kaXIocmVxKSA9PSBSRUFEID8gInJlYWQiIDogIndyaXQiLAogCQljeWwsIGhlYWQsIHNlYywgbnNlY3QsIHJlcS0+YnVmZmVyKTsKICNlbmRpZgotCWlmIChibGtfZnNfcmVxdWVzdChyZXEpKSB7CisJaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKIAkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CiAJCWNhc2UgUkVBRDoKIAkJCWhkX291dChkaXNrLCBuc2VjdCwgc2VjLCBoZWFkLCBjeWwsIEFUQV9DTURfUElPX1JFQUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDYxMjA5MjIuLmYzYzYzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CQkvKiBmb3IgaW52YWxpZGF0ZV9iZGV2KCkgKi8KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC00NzYsNyArNDc3LDcgQEAKIAlwb3MgPSAoKGxvZmZfdCkgYmlvLT5iaV9zZWN0b3IgPDwgOSkgKyBsby0+bG9fb2Zmc2V0OwogCiAJaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKSB7Ci0JCWJvb2wgYmFycmllciA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpOworCQlib29sIGJhcnJpZXIgPSAoYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUik7CiAJCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsKIAogCQlpZiAoYmFycmllcikgewpAQCAtODMxLDcgKzgzMiw3IEBACiAJbG8tPmxvX3F1ZXVlLT51bnBsdWdfZm4gPSBsb29wX3VucGx1ZzsKIAogCWlmICghKGxvX2ZsYWdzICYgTE9fRkxBR1NfUkVBRF9PTkxZKSAmJiBmaWxlLT5mX29wLT5mc3luYykKLQkJYmxrX3F1ZXVlX29yZGVyZWQobG8tPmxvX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKKwkJYmxrX3F1ZXVlX29yZGVyZWQobG8tPmxvX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOKTsKIAogCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgc2l6ZSk7CiAJYmRfc2V0X3NpemUoYmRldiwgc2l6ZSA8PCA5KTsKQEAgLTE0MDgsOSArMTQwOSwxMSBAQAogewogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCWxvLT5sb19yZWZjbnQrKzsKIAltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQyMCw2ICsxNDIzLDcgQEAKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnI7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCiAJaWYgKC0tbG8tPmxvX3JlZmNudCkKQEAgLTE0NDQsNiArMTQ0OCw3IEBACiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIG91dF91bmxvY2tlZDoKKwlsb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL21nX2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCmluZGV4IDI4ZGI5MjUuLmI4MmM1Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svbWdfZGlzay5jCkBAIC02NzAsNyArNjcwLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCi0JCWlmICh1bmxpa2VseSghYmxrX2ZzX3JlcXVlc3QoaG9zdC0+cmVxKSkpIHsKKwkJaWYgKHVubGlrZWx5KGhvc3QtPnJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpKSB7CiAJCQltZ19lbmRfcmVxdWVzdF9jdXIoaG9zdCwgLUVJTyk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNzU2LDcgKzc1Niw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICh1bmxpa2VseSghYmxrX2ZzX3JlcXVlc3QocmVxKSkpIHsKKwkJaWYgKHVubGlrZWx5KHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpKSB7CiAJCQltZ19lbmRfcmVxdWVzdF9jdXIoaG9zdCwgLUVJTyk7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggMTZjM2M4Ni4uMGRhYTQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC00NDgsNyArNDQ5LDcgQEAKIAogc3RhdGljIHZvaWQgbmJkX2hhbmRsZV9yZXEoc3RydWN0IG5iZF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewotCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKKwlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAluYmRfY21kKHJlcSkgPSBOQkRfQ01EX1JFQUQ7CkBAIC03MTYsOSArNzE3LDExIEBACiAJZHByaW50ayhEQkdfSU9DVEwsICIlczogbmJkX2lvY3RsIGNtZD0lcygweCV4KSBhcmc9JWx1XG4iLAogCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgaW9jdGxfY21kX3RvX2FzY2lpKGNtZCksIGNtZCwgYXJnKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCWVycm9yID0gX19uYmRfaW9jdGwoYmRldiwgbG8sIGNtZCwgYXJnKTsKIAltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC03MjYsNyArNzI5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbmJkX2ZvcHMgPQogewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5sb2NrZWRfaW9jdGwgPQluYmRfaW9jdGwsCisJLmlvY3RsID0JbmJkX2lvY3RsLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL29zZGJsay5jCmluZGV4IDZjZDhiNzAuLjIyODRiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9vc2RibGsuYwpAQCAtMzEwLDcgKzMxMCw4IEBACiAJCQlicmVhazsKIAogCQkvKiBmaWx0ZXIgb3V0IGJsb2NrIHJlcXVlc3RzIHdlIGRvbid0IHVuZGVyc3RhbmQgKi8KLQkJaWYgKCFibGtfZnNfcmVxdWVzdChycSkgJiYgIWJsa19iYXJyaWVyX3JxKHJxKSkgeworCQlpZiAocnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTICYmCisJCSAgICAhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfSEFSREJBUlJJRVIpKSB7CiAJCQlibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zMjIsNyArMzIzLDcgQEAKIAkJICogZHJpdmVyLXNwZWNpZmljLCBldGMuCiAJCSAqLwogCi0JCWRvX2ZsdXNoID0gKHJxLT5zcGVjaWFsID09ICh2b2lkICopIDB4ZGVhZGJlZWZVTCk7CisJCWRvX2ZsdXNoID0gcnEtPmNtZF9mbGFncyAmIFJFUV9GTFVTSDsKIAkJZG9fd3JpdGUgPSAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKTsKIAogCQlpZiAoIWRvX2ZsdXNoKSB7IC8qIG9zZF9mbHVzaCBkb2VzIG5vdCB1c2UgYSBiaW8gKi8KQEAgLTM3OSwxNCArMzgwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG9zZGJsa19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JLyogYWRkIGRyaXZlci1zcGVjaWZpYyBtYXJrZXIsIHRvIGluZGljYXRlIHRoYXQgdGhpcyByZXF1ZXN0Ci0JICogaXMgYSBmbHVzaCBjb21tYW5kCi0JICovCi0JcnEtPnNwZWNpYWwgPSAodm9pZCAqKSAweGRlYWRiZWVmVUw7Ci19Ci0KIHN0YXRpYyB2b2lkIG9zZGJsa19mcmVlX2Rpc2soc3RydWN0IG9zZGJsa19kZXZpY2UgKm9zZGV2KQogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gb3NkZXYtPmRpc2s7CkBAIC00NDYsNyArNDM5LDcgQEAKIAlibGtfcXVldWVfc3RhY2tfbGltaXRzKHEsIG9zZF9yZXF1ZXN0X3F1ZXVlKG9zZGV2LT5vc2QpKTsKIAogCWJsa19xdWV1ZV9wcmVwX3JxKHEsIGJsa19xdWV1ZV9zdGFydF90YWcpOwotCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gsIG9zZGJsa19wcmVwYXJlX2ZsdXNoKTsKKwlibGtfcXVldWVfb3JkZXJlZChxLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNIKTsKIAogCWRpc2stPnF1ZXVlID0gcTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCA3MWFjZjRlLi43NmY4NTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMTM4LDYgKzEzOCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIERFRklORV9TUElOTE9DSyhwY2RfbG9jayk7CkBAIC0yMjQsMTMgKzIyNSwyMSBAQAogc3RhdGljIGludCBwY2RfYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHBjZF91bml0ICpjZCA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gY2Ryb21fb3BlbigmY2QtPmluZm8sIGJkZXYsIG1vZGUpOworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGNkcm9tX29wZW4oJmNkLT5pbmZvLCBiZGV2LCBtb2RlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjZF9ibG9ja19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHBjZF91bml0ICpjZCA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlsb2NrX2tlcm5lbCgpOwogCWNkcm9tX3JlbGVhc2UoJmNkLT5pbmZvLCBtb2RlKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOCw3ICsyNDcsMTMgQEAKIAkJCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwY2RfdW5pdCAqY2QgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX2lvY3RsKCZjZC0+aW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGNkcm9tX2lvY3RsKCZjZC0+aW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcGNkX2Jsb2NrX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCkBAIC0yNTEsNyArMjY2LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcGNkX2Jsb2NrX29wZW4sCiAJLnJlbGVhc2UJPSBwY2RfYmxvY2tfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsCT0gcGNkX2Jsb2NrX2lvY3RsLAorCS5pb2N0bAkJPSBwY2RfYmxvY2tfaW9jdGwsCiAJLm1lZGlhX2NoYW5nZWQJPSBwY2RfYmxvY2tfbWVkaWFfY2hhbmdlZCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IGMxZTVjZDAuLjk4NWYwZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKQEAgLTQzOSw3ICs0NDAsNyBAQAogCiBzdGF0aWMgZW51bSBhY3Rpb24gZG9fcGRfaW9fc3RhcnQodm9pZCkKIHsKLQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChwZF9yZXEpKSB7CisJaWYgKHBkX3JlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU1BFQ0lBTCkgewogCQlwaGFzZSA9IHBkX3NwZWNpYWw7CiAJCXJldHVybiBwZF9zcGVjaWFsKCk7CiAJfQpAQCAtNzM1LDEyICs3MzYsMTQgQEAKIHsKIAlzdHJ1Y3QgcGRfdW5pdCAqZGlzayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAorCWxvY2tfa2VybmVsKCk7CiAJZGlzay0+YWNjZXNzKys7CiAKIAlpZiAoZGlzay0+cmVtb3ZhYmxlKSB7CiAJCXBkX3NwZWNpYWxfY29tbWFuZChkaXNrLCBwZF9tZWRpYV9jaGVjayk7CiAJCXBkX3NwZWNpYWxfY29tbWFuZChkaXNrLCBwZF9kb29yX2xvY2spOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2OCw4ICs3NzEsMTAgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDRFJPTUVKRUNUOgorCQlsb2NrX2tlcm5lbCgpOwogCQlpZiAoZGlzay0+YWNjZXNzID09IDEpCiAJCQlwZF9zcGVjaWFsX2NvbW1hbmQoZGlzaywgcGRfZWplY3QpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzgwLDggKzc4NSwxMCBAQAogewogCXN0cnVjdCBwZF91bml0ICpkaXNrID0gcC0+cHJpdmF0ZV9kYXRhOwogCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoIS0tZGlzay0+YWNjZXNzICYmIGRpc2stPnJlbW92YWJsZSkKIAkJcGRfc3BlY2lhbF9jb21tYW5kKGRpc2ssIHBkX2Rvb3JfdW5sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgxMiw3ICs4MTksNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwZF9vcGVuLAogCS5yZWxlYXNlCT0gcGRfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsCT0gcGRfaW9jdGwsCisJLmlvY3RsCQk9IHBkX2lvY3RsLAogCS5nZXRnZW8JCT0gcGRfZ2V0Z2VvLAogCS5tZWRpYV9jaGFuZ2VkCT0gcGRfY2hlY2tfbWVkaWEsCiAJLnJldmFsaWRhdGVfZGlzaz0gcGRfcmV2YWxpZGF0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKaW5kZXggYzA1OWFhYi4uNDQ1N2I0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCkBAIC0xNTIsNiArMTUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBmX3NwaW5fbG9jayk7CkBAIC0yNjYsNyArMjY3LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gcGZfb3BlbiwKIAkucmVsZWFzZQk9IHBmX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAk9IHBmX2lvY3RsLAorCS5pb2N0bAkJPSBwZl9pb2N0bCwKIAkuZ2V0Z2VvCQk9IHBmX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAk9IHBmX2NoZWNrX21lZGlhLAogfTsKQEAgLTI5OSwyMCArMzAwLDI2IEBACiBzdGF0aWMgaW50IHBmX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBwZl91bml0ICpwZiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OwogCisJbG9ja19rZXJuZWwoKTsKIAlwZl9pZGVudGlmeShwZik7CiAKKwlyZXQgPSAtRU5PREVWOwogCWlmIChwZi0+bWVkaWFfc3RhdHVzID09IFBGX05NKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAKKwlyZXQgPSAtRVJPRlM7CiAJaWYgKChwZi0+bWVkaWFfc3RhdHVzID09IFBGX1JPKSAmJiAobW9kZSAmIEZNT0RFX1dSSVRFKSkKLQkJcmV0dXJuIC1FUk9GUzsKKwkJZ290byBvdXQ7CiAKKwlyZXQgPSAwOwogCXBmLT5hY2Nlc3MrKzsKIAlpZiAocGYtPnJlbW92YWJsZSkKIAkJcGZfbG9jayhwZiwgMSk7Ci0KLQlyZXR1cm4gMDsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwZl9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCkBAIC0zNDIsNyArMzQ5LDEwIEBACiAKIAlpZiAocGYtPmFjY2VzcyAhPSAxKQogCQlyZXR1cm4gLUVCVVNZOworCWxvY2tfa2VybmVsKCk7CiAJcGZfZWplY3QocGYpOworCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNTAsMTQgKzM2MCwxOCBAQAogewogCXN0cnVjdCBwZl91bml0ICpwZiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAotCWlmIChwZi0+YWNjZXNzIDw9IDApCisJbG9ja19rZXJuZWwoKTsKKwlpZiAocGYtPmFjY2VzcyA8PSAwKSB7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJcGYtPmFjY2Vzcy0tOwogCiAJaWYgKCFwZi0+YWNjZXNzICYmIHBmLT5yZW1vdmFibGUpCiAJCXBmX2xvY2socGYsIDApOwogCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDhhNTQ5ZGIuLmIxY2JlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTEyMjEsNyArMTIyMiw3IEBACiAJcGt0LT5iaW8tPmJpX2ZsYWdzID0gMSA8PCBCSU9fVVBUT0RBVEU7CiAJcGt0LT5iaW8tPmJpX2lkeCA9IDA7CiAKLQlCVUdfT04ocGt0LT5iaW8tPmJpX3J3ICE9ICgxIDw8IEJJT19SVykpOworCUJVR19PTihwa3QtPmJpby0+YmlfcncgIT0gUkVRX1dSSVRFKTsKIAlCVUdfT04ocGt0LT5iaW8tPmJpX3ZjbnQgIT0gcGt0LT5mcmFtZXMpOwogCUJVR19PTihwa3QtPmJpby0+Ymlfc2l6ZSAhPSBwa3QtPmZyYW1lcyAqIENEX0ZSQU1FU0laRSk7CiAJQlVHX09OKHBrdC0+YmlvLT5iaV9lbmRfaW8gIT0gcGt0X2VuZF9pb19wYWNrZXRfd3JpdGUpOwpAQCAtMjM4Miw2ICsyMzgzLDcgQEAKIAogCVZQUklOVEsoRFJJVkVSX05BTUUiOiBlbnRlcmluZyBvcGVuXG4iKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKIAlwZCA9IHBrdF9maW5kX2Rldl9mcm9tX21pbm9yKE1JTk9SKGJkZXYtPmJkX2RldikpOwogCWlmICghcGQpIHsKQEAgLTI0MDksNiArMjQxMSw3IEBACiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIAogb3V0X2RlYzoKQEAgLTI0MTYsNiArMjQxOSw3IEBACiBvdXQ6CiAJVlBSSU5USyhEUklWRVJfTkFNRSI6IGZhaWxlZCBvcGVuICglZClcbiIsIHJldCk7CiAJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDI0LDYgKzI0MjgsNyBAQAogCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmN0bF9tdXRleCk7CiAJcGQtPnJlZmNudC0tOwogCUJVR19PTihwZC0+cmVmY250IDwgMCk7CkBAIC0yNDMyLDYgKzI0MzcsNyBAQAogCQlwa3RfcmVsZWFzZV9kZXYocGQsIGZsdXNoKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzYyLDEwICsyNzY4LDEyIEBACiBzdGF0aWMgaW50IHBrdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwa3RjZHZkX2RldmljZSAqcGQgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IHJldDsKIAogCVZQUklOVEsoInBrdF9pb2N0bDogY21kICV4LCBkZXYgJWQ6JWRcbiIsIGNtZCwKIAkJTUFKT1IoYmRldi0+YmRfZGV2KSwgTUlOT1IoYmRldi0+YmRfZGV2KSk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDRFJPTUVKRUNUOgogCQkvKgpAQCAtMjc4MywxNCArMjc5MSwxNiBAQAogCWNhc2UgQ0RST01fTEFTVF9XUklUVEVOOgogCWNhc2UgQ0RST01fU0VORF9QQUNLRVQ6CiAJY2FzZSBTQ1NJX0lPQ1RMX1NFTkRfQ09NTUFORDoKLQkJcmV0dXJuIF9fYmxrZGV2X2RyaXZlcl9pb2N0bChwZC0+YmRldiwgbW9kZSwgY21kLCBhcmcpOworCQlyZXQgPSBfX2Jsa2Rldl9kcml2ZXJfaW9jdGwocGQtPmJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlWUFJJTlRLKERSSVZFUl9OQU1FIjogVW5rbm93biBpb2N0bCBmb3IgJXMgKCV4KVxuIiwgcGQtPm5hbWUsIGNtZCk7Ci0JCXJldHVybiAtRU5PVFRZOworCQlyZXQgPSAtRU5PVFRZOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBrdF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMjgxMiw3ICsyODIyLDcgQEAKIAkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJCXBrdF9vcGVuLAogCS5yZWxlYXNlID0JCXBrdF9jbG9zZSwKLQkubG9ja2VkX2lvY3RsID0JCXBrdF9pb2N0bCwKKwkuaW9jdGwgPQkJcGt0X2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkID0JcGt0X21lZGlhX2NoYW5nZWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM2Rpc2suYyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCmluZGV4IDNiNDE5ZTMuLmU5ZGE4NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzZGlzay5jCkBAIC0xOTYsMTMgKzE5NiwxMiBAQAogCWRldl9kYmcoJmRldi0+c2JkLmNvcmUsICIlczoldVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCXdoaWxlICgocmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocSkpKSB7Ci0JCWlmIChibGtfZnNfcmVxdWVzdChyZXEpKSB7Ci0JCQlpZiAocHMzZGlza19zdWJtaXRfcmVxdWVzdF9zZyhkZXYsIHJlcSkpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9MSU5VWF9CTE9DSyAmJgotCQkJICAgcmVxLT5jbWRbMF0gPT0gUkVRX0xCX09QX0ZMVVNIKSB7CisJCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GTFVTSCkgewogCQkJaWYgKHBzM2Rpc2tfc3VibWl0X2ZsdXNoX3JlcXVlc3QoZGV2LCByZXEpKQogCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKKwkJCWlmIChwczNkaXNrX3N1Ym1pdF9yZXF1ZXN0X3NnKGRldiwgcmVxKSkKKwkJCQlicmVhazsKIAkJfSBlbHNlIHsKIAkJCWJsa19kdW1wX3JxX2ZsYWdzKHJlcSwgREVWSUNFX05BTUUgIiBiYWQgcmVxdWVzdCIpOwogCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgLUVJTyk7CkBAIC0yNTcsOCArMjU2LDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAotCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCi0JICAgIHJlcS0+Y21kWzBdID09IFJFUV9MQl9PUF9GTFVTSCkgeworCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GTFVTSCkgewogCQlyZWFkID0gMDsKIAkJb3AgPSAiZmx1c2giOwogCX0gZWxzZSB7CkBAIC0zOTgsMTYgKzM5Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBzM2Rpc2tfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3QgcHMzX3N0b3JhZ2VfZGV2aWNlICpkZXYgPSBxLT5xdWV1ZWRhdGE7Ci0KLQlkZXZfZGJnKCZkZXYtPnNiZC5jb3JlLCAiJXM6JXVcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Ci0KLQlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfTElOVVhfQkxPQ0s7Ci0JcmVxLT5jbWRbMF0gPSBSRVFfTEJfT1BfRkxVU0g7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBzM2Rpc2tfbWFzazsKIAogc3RhdGljIERFRklORV9NVVRFWChwczNkaXNrX21hc2tfbXV0ZXgpOwpAQCAtNDgwLDggKzQ2OCw3IEBACiAJYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQocXVldWUsIGRldi0+YmxrX3NpemUtMSk7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShxdWV1ZSwgZGV2LT5ibGtfc2l6ZSk7CiAKLQlibGtfcXVldWVfb3JkZXJlZChxdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCwKLQkJCSAgcHMzZGlza19wcmVwYXJlX2ZsdXNoKTsKKwlibGtfcXVldWVfb3JkZXJlZChxdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCk7CiAKIAlibGtfcXVldWVfbWF4X3NlZ21lbnRzKHF1ZXVlLCAtMSk7CiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUocXVldWUsIGRldi0+Ym91bmNlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwppbmRleCBlNDYzNjU3Li4yZTQ2ODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNjYxLDExICs2NjIsMjMgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGZsb3BweV91bmxvY2tlZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBmbG9wcHlfb3BlbihiZGV2LCBtb2RlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWlmIChmcy0+cmVmX2NvdW50IDwgMCkKIAkJZnMtPnJlZl9jb3VudCA9IDA7CiAJZWxzZSBpZiAoZnMtPnJlZl9jb3VudCA+IDApCkBAIC02NzMsNiArNjg2LDcgQEAKIAogCWlmIChmcy0+cmVmX2NvdW50ID09IDApCiAJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5MCw3ICs3MDQsOSBAQAogCWNhc2UgRkRFSkVDVDoKIAkJaWYgKGZzLT5yZWZfY291bnQgIT0gMSkKIAkJCXJldHVybiAtRUJVU1k7CisJCWxvY2tfa2VybmVsKCk7CiAJCWVyciA9IGZsb3BweV9lamVjdChmcyk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAogCWNhc2UgRkRHRVRQUk06CkBAIC03NTEsOSArNzY3LDkgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKIAkub3duZXIJCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkgPSBmbG9wcHlfb3BlbiwKKwkub3BlbgkJID0gZmxvcHB5X3VubG9ja2VkX29wZW4sCiAJLnJlbGVhc2UJID0gZmxvcHB5X3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAkgPSBmbG9wcHlfaW9jdGwsCisJLmlvY3RsCQkgPSBmbG9wcHlfaW9jdGwsCiAJLmdldGdlbwkJID0gZmxvcHB5X2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAkgPSBmbG9wcHlfY2hlY2tfY2hhbmdlLAogCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwppbmRleCBlZDZmYjkxLi5jYzZhMzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKKysrIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC04MzksNyArODQwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmbG9wcHlfdHlwZSA9CiAJeyAyODgwLDE4LDIsODAsMCwweDFCLDB4MDAsMHhDRiwweDZDLE5VTEwgfTsJLyogIDcgMS40NE1CIDMuNSIgICAqLwogCi1zdGF0aWMgaW50IGZsb3BweV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCitzdGF0aWMgaW50IGZsb3BweV9sb2NrZWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKIAlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKQEAgLTg2Nyw2ICs4NjgsMTggQEAKIAlyZXR1cm4gLUVOT1RUWTsKIH0KIAorc3RhdGljIGludCBmbG9wcHlfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGZsb3BweV9sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBwYXJhbSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBmbG9wcHlfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CkBAIC05MzYsMTUgKzk0OSwyOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZsb3BweV91bmxvY2tlZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBmbG9wcHlfb3BlbihiZGV2LCBtb2RlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGZsb3BweV9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHN3aW0zIF9faW9tZW0gKnN3ID0gZnMtPnN3aW0zOworCWxvY2tfa2VybmVsKCk7CiAJaWYgKGZzLT5yZWZfY291bnQgPiAwICYmIC0tZnMtPnJlZl9jb3VudCA9PSAwKSB7CiAJCXN3aW0zX2FjdGlvbihmcywgTU9UT1JfT0ZGKTsKIAkJb3V0XzgoJnN3LT5jb250cm9sX2JpYywgMHhmZik7CiAJCXN3aW0zX3NlbGVjdChmcywgUkVMQVgpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk5NSw5ICsxMDIxLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBmbG9wcHlfZm9wcyA9IHsKLQkub3BlbgkJPSBmbG9wcHlfb3BlbiwKKwkub3BlbgkJPSBmbG9wcHlfdW5sb2NrZWRfb3BlbiwKIAkucmVsZWFzZQk9IGZsb3BweV9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBmbG9wcHlfaW9jdGwsCisJLmlvY3RsCQk9IGZsb3BweV9pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAk9IGZsb3BweV9jaGVja19jaGFuZ2UsCiAJLnJldmFsaWRhdGVfZGlzaz0gZmxvcHB5X3JldmFsaWRhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91Yi5jIGIvZHJpdmVycy9ibG9jay91Yi5jCmluZGV4IDA1MzZiNWIuLmM0OGUxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdWIuYworKysgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInViIgpAQCAtNjQ4LDcgKzY0OSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChsdW4tPmNoYW5nZWQgJiYgIWJsa19wY19yZXF1ZXN0KHJxKSkgeworCWlmIChsdW4tPmNoYW5nZWQgJiYgcnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCWJsa19zdGFydF9yZXF1ZXN0KHJxKTsKIAkJdWJfZW5kX3JxKHJxLCBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pOwogCQlyZXR1cm4gMDsKQEAgLTY4NCw3ICs2ODUsNyBAQAogCX0KIAl1cnEtPm5zZyA9IG5fZWxlbTsKIAotCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXViX2NtZF9idWlsZF9wYWNrZXQoc2MsIGx1biwgY21kLCB1cnEpOwogCX0gZWxzZSB7CiAJCXViX2NtZF9idWlsZF9ibG9jayhzYywgbHVuLCBjbWQsIHVycSk7CkBAIC03ODEsNyArNzgyLDcgQEAKIAlycSA9IHVycS0+cnE7CiAKIAlpZiAoY21kLT5lcnJvciA9PSAwKSB7Ci0JCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwkJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQkJaWYgKGNtZC0+YWN0X2xlbiA+PSBycS0+cmVzaWRfbGVuKQogCQkJCXJxLT5yZXNpZF9sZW4gPSAwOwogCQkJZWxzZQpAQCAtNzk1LDcgKzc5Niw3IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJCS8qIFVCX1NFTlNFX1NJWkUgaXMgc21hbGxlciB0aGFuIFNDU0lfU0VOU0VfQlVGRkVSU0laRSAqLwogCQkJbWVtY3B5KHJxLT5zZW5zZSwgc2MtPnRvcF9zZW5zZSwgVUJfU0VOU0VfU0laRSk7CiAJCQlycS0+c2Vuc2VfbGVuID0gVUJfU0VOU0VfU0laRTsKQEAgLTE3MTAsNiArMTcxMSwxOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCB1Yl9iZF91bmxvY2tlZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSB1Yl9iZF9vcGVuKGJkZXYsIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKwogLyoKICAqLwogc3RhdGljIGludCB1Yl9iZF9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCkBAIC0xNzE3LDcgKzE3MzAsMTAgQEAKIAlzdHJ1Y3QgdWJfbHVuICpsdW4gPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHViX2RldiAqc2MgPSBsdW4tPnVkZXY7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXViX3B1dChzYyk7CisJdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MjksOCArMTc0NSwxMyBAQAogewogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKIAl2b2lkIF9fdXNlciAqdXNlcm1lbSA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJaW50IHJldDsKIAotCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLCB1c2VybWVtKTsKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IHNjc2lfY21kX2lvY3RsKGRpc2stPnF1ZXVlLCBkaXNrLCBtb2RlLCBjbWQsIHVzZXJtZW0pOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xNzkyLDkgKzE4MTMsOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHViX2JkX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHViX2JkX29wZW4sCisJLm9wZW4JCT0gdWJfYmRfdW5sb2NrZWRfb3BlbiwKIAkucmVsZWFzZQk9IHViX2JkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAk9IHViX2JkX2lvY3RsLAorCS5pb2N0bAkJPSB1Yl9iZF9pb2N0bCwKIAkubWVkaWFfY2hhbmdlZAk9IHViX2JkX21lZGlhX2NoYW5nZWQsCiAJLnJldmFsaWRhdGVfZGlzayA9IHViX2JkX3JldmFsaWRhdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay91bWVtLmMgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwppbmRleCAyZjk0NzBmLi44YmU1NzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3VtZW0uYworKysgYi9kcml2ZXJzL2Jsb2NrL3VtZW0uYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJCQkJbGUzMl90b19jcHUoZGVzYy0+bG9jYWxfYWRkcik+PjksCiAJCQkJbGUzMl90b19jcHUoZGVzYy0+dHJhbnNmZXJfc2l6ZSkpOwogCQkJZHVtcF9kbWFzdGF0KGNhcmQsIGNvbnRyb2wpOwotCQl9IGVsc2UgaWYgKHRlc3RfYml0KEJJT19SVywgJmJpby0+YmlfcncpICYmCisJCX0gZWxzZSBpZiAoKGJpby0+YmlfcncgJiBSRVFfV1JJVEUpICYmCiAJCQkgICBsZTMyX3RvX2NwdShkZXNjLT5sb2NhbF9hZGRyKSA+PiA5ID09CiAJCQkJY2FyZC0+aW5pdF9zaXplKSB7CiAJCQljYXJkLT5pbml0X3NpemUgKz0gbGUzMl90b19jcHUoZGVzYy0+dHJhbnNmZXJfc2l6ZSkgPj4gOTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKaW5kZXggNzg4ZDkzOC4uZjY1MWU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKKysrIGIvZHJpdmVycy9ibG9jay92aW9kYXNkLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTc1LDYgKzE3NiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpb2Rhc2RfdW5sb2NrZWRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gdmlvZGFzZF9vcGVuKGJkZXYsIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKwogLyoKICAqIEV4dGVybmFsIHJlbGVhc2UgZW50cnkgcG9pbnQuCiAgKi8KQEAgLTE4Myw2ICsxOTYsNyBAQAogCXN0cnVjdCB2aW9kYXNkX2RldmljZSAqZCA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAlIdkxwRXZlbnRfUmMgaHZyYzsKIAorCWxvY2tfa2VybmVsKCk7CiAJLyogU2VuZCB0aGUgZXZlbnQgdG8gT1MvNDAwLiAgV2UgRE9OJ1QgZXhwZWN0IGEgcmVzcG9uc2UgKi8KIAlodnJjID0gSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QodmlvcGF0aF9ob3N0THAsCiAJCQlIdkxwRXZlbnRfVHlwZV9WaXJ0dWFsSW8sCkBAIC0xOTUsNiArMjA5LDkgQEAKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApCiAJCXByX3dhcm5pbmcoIkhWIGNsb3NlIGNhbGwgZmFpbGVkICVkXG4iLCAoaW50KWh2cmMpOworCisJdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxOSw3ICsyMzYsNyBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHZpb2Rhc2RfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHZpb2Rhc2Rfb3BlbiwKKwkub3BlbiA9IHZpb2Rhc2RfdW5sb2NrZWRfb3BlbiwKIAkucmVsZWFzZSA9IHZpb2Rhc2RfcmVsZWFzZSwKIAkuZ2V0Z2VvID0gdmlvZGFzZF9nZXRnZW8sCiB9OwpAQCAtMzYxLDcgKzM3OCw3IEBACiAJCWlmIChyZXEgPT0gTlVMTCkKIAkJCXJldHVybjsKIAkJLyogY2hlY2sgdGhhdCByZXF1ZXN0IGNvbnRhaW5zIGEgdmFsaWQgY29tbWFuZCAqLwotCQlpZiAoIWJsa19mc19yZXF1ZXN0KHJlcSkpIHsKKwkJaWYgKHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpIHsKIAkJCXZpb2Rhc2RfZW5kX3JlcXVlc3QocmVxLCAtRUlPLCBibGtfcnFfc2VjdG9ycyhyZXEpKTsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCmluZGV4IDIzYjdjNDguLjJhYWZhZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fYmxrLmg+CkBAIC02NSwxMyArNjYsMTggQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGJsa19wY19yZXF1ZXN0KHZici0+cmVxKSkgeworCQlzd2l0Y2ggKHZici0+cmVxLT5jbWRfdHlwZSkgeworCQljYXNlIFJFUV9UWVBFX0JMT0NLX1BDOgogCQkJdmJyLT5yZXEtPnJlc2lkX2xlbiA9IHZici0+aW5faGRyLnJlc2lkdWFsOwogCQkJdmJyLT5yZXEtPnNlbnNlX2xlbiA9IHZici0+aW5faGRyLnNlbnNlX2xlbjsKIAkJCXZici0+cmVxLT5lcnJvcnMgPSB2YnItPmluX2hkci5lcnJvcnM7Ci0JCX0KLQkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QodmJyLT5yZXEpKQorCQkJYnJlYWs7CisJCWNhc2UgUkVRX1RZUEVfU1BFQ0lBTDoKIAkJCXZici0+cmVxLT5lcnJvcnMgPSAoZXJyb3IgIT0gMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CiAKIAkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHZici0+cmVxLCBlcnJvcik7CiAJCWxpc3RfZGVsKCZ2YnItPmxpc3QpOwpAQCAtOTQsMzYgKzEwMCwzNSBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAl2YnItPnJlcSA9IHJlcTsKLQlzd2l0Y2ggKHJlcS0+Y21kX3R5cGUpIHsKLQljYXNlIFJFUV9UWVBFX0ZTOgotCQl2YnItPm91dF9oZHIudHlwZSA9IDA7Ci0JCXZici0+b3V0X2hkci5zZWN0b3IgPSBibGtfcnFfcG9zKHZici0+cmVxKTsKLQkJdmJyLT5vdXRfaGRyLmlvcHJpbyA9IHJlcV9nZXRfaW9wcmlvKHZici0+cmVxKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVFfVFlQRV9CTE9DS19QQzoKLQkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfU0NTSV9DTUQ7CisKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkxVU0gpIHsKKwkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfRkxVU0g7CiAJCXZici0+b3V0X2hkci5zZWN0b3IgPSAwOwogCQl2YnItPm91dF9oZHIuaW9wcmlvID0gcmVxX2dldF9pb3ByaW8odmJyLT5yZXEpOwotCQlicmVhazsKLQljYXNlIFJFUV9UWVBFX1NQRUNJQUw6Ci0JCXZici0+b3V0X2hkci50eXBlID0gVklSVElPX0JMS19UX0dFVF9JRDsKLQkJdmJyLT5vdXRfaGRyLnNlY3RvciA9IDA7Ci0JCXZici0+b3V0X2hkci5pb3ByaW8gPSByZXFfZ2V0X2lvcHJpbyh2YnItPnJlcSk7Ci0JCWJyZWFrOwotCWNhc2UgUkVRX1RZUEVfTElOVVhfQkxPQ0s6Ci0JCWlmIChyZXEtPmNtZFswXSA9PSBSRVFfTEJfT1BfRkxVU0gpIHsKLQkJCXZici0+b3V0X2hkci50eXBlID0gVklSVElPX0JMS19UX0ZMVVNIOworCX0gZWxzZSB7CisJCXN3aXRjaCAocmVxLT5jbWRfdHlwZSkgeworCQljYXNlIFJFUV9UWVBFX0ZTOgorCQkJdmJyLT5vdXRfaGRyLnR5cGUgPSAwOworCQkJdmJyLT5vdXRfaGRyLnNlY3RvciA9IGJsa19ycV9wb3ModmJyLT5yZXEpOworCQkJdmJyLT5vdXRfaGRyLmlvcHJpbyA9IHJlcV9nZXRfaW9wcmlvKHZici0+cmVxKTsKKwkJCWJyZWFrOworCQljYXNlIFJFUV9UWVBFX0JMT0NLX1BDOgorCQkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfU0NTSV9DTUQ7CiAJCQl2YnItPm91dF9oZHIuc2VjdG9yID0gMDsKIAkJCXZici0+b3V0X2hkci5pb3ByaW8gPSByZXFfZ2V0X2lvcHJpbyh2YnItPnJlcSk7CiAJCQlicmVhazsKKwkJY2FzZSBSRVFfVFlQRV9TUEVDSUFMOgorCQkJdmJyLT5vdXRfaGRyLnR5cGUgPSBWSVJUSU9fQkxLX1RfR0VUX0lEOworCQkJdmJyLT5vdXRfaGRyLnNlY3RvciA9IDA7CisJCQl2YnItPm91dF9oZHIuaW9wcmlvID0gcmVxX2dldF9pb3ByaW8odmJyLT5yZXEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBXZSBkb24ndCBwdXQgYW55dGhpbmcgZWxzZSBpbiB0aGUgcXVldWUuICovCisJCQlCVUcoKTsKIAkJfQotCQkvKkZBTExUSFJVKi8KLQlkZWZhdWx0OgotCQkvKiBXZSBkb24ndCBwdXQgYW55dGhpbmcgZWxzZSBpbiB0aGUgcXVldWUuICovCi0JCUJVRygpOwogCX0KIAotCWlmIChibGtfYmFycmllcl9ycSh2YnItPnJlcSkpCisJaWYgKHZici0+cmVxLT5jbWRfZmxhZ3MgJiBSRVFfSEFSREJBUlJJRVIpCiAJCXZici0+b3V0X2hkci50eXBlIHw9IFZJUlRJT19CTEtfVF9CQVJSSUVSOwogCiAJc2dfc2V0X2J1ZigmdmJsay0+c2dbb3V0KytdLCAmdmJyLT5vdXRfaGRyLCBzaXplb2YodmJyLT5vdXRfaGRyKSk7CkBAIC0xMzQsMTIgKzEzOSwxMiBAQAogCSAqIGJsb2NrLCBhbmQgYmVmb3JlIHRoZSBub3JtYWwgaW5oZHIgd2UgcHV0IHRoZSBzZW5zZSBkYXRhIGFuZCB0aGUKIAkgKiBpbmhkciB3aXRoIGFkZGl0aW9uYWwgc3RhdHVzIGluZm9ybWF0aW9uIGJlZm9yZSB0aGUgbm9ybWFsIGluaGRyLgogCSAqLwotCWlmIChibGtfcGNfcmVxdWVzdCh2YnItPnJlcSkpCisJaWYgKHZici0+cmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykKIAkJc2dfc2V0X2J1ZigmdmJsay0+c2dbb3V0KytdLCB2YnItPnJlcS0+Y21kLCB2YnItPnJlcS0+Y21kX2xlbik7CiAKIAludW0gPSBibGtfcnFfbWFwX3NnKHEsIHZici0+cmVxLCB2YmxrLT5zZyArIG91dCk7CiAKLQlpZiAoYmxrX3BjX3JlcXVlc3QodmJyLT5yZXEpKSB7CisJaWYgKHZici0+cmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgewogCQlzZ19zZXRfYnVmKCZ2YmxrLT5zZ1tudW0gKyBvdXQgKyBpbisrXSwgdmJyLT5yZXEtPnNlbnNlLCA5Nik7CiAJCXNnX3NldF9idWYoJnZibGstPnNnW251bSArIG91dCArIGluKytdLCAmdmJyLT5pbl9oZHIsCiAJCQkgICBzaXplb2YodmJyLT5pbl9oZHIpKTsKQEAgLTE5MCwxMiArMTk1LDYgQEAKIAkJdmlydHF1ZXVlX2tpY2sodmJsay0+dnEpOwogfQogCi1zdGF0aWMgdm9pZCB2aXJ0YmxrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCi17Ci0JcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOwotCXJlcS0+Y21kWzBdID0gUkVRX0xCX09QX0ZMVVNIOwotfQotCiAvKiByZXR1cm4gaWQgKHMvbikgc3RyaW5nIGZvciAqZGlzayB0byAqaWRfc3RyCiAgKi8KIHN0YXRpYyBpbnQgdmlydGJsa19nZXRfaWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGNoYXIgKmlkX3N0cikKQEAgLTIxOSw3ICsyMTgsNyBAQAogCXJldHVybiBibGtfZXhlY3V0ZV9ycSh2YmxrLT5kaXNrLT5xdWV1ZSwgdmJsay0+ZGlzaywgcmVxLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyBpbnQgdmlydGJsa19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCitzdGF0aWMgaW50IHZpcnRibGtfbG9ja2VkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAkJCSB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CkBAIC0yMzUsNiArMjM0LDE4IEBACiAJCQkgICAgICAodm9pZCBfX3VzZXIgKilkYXRhKTsKIH0KIAorc3RhdGljIGludCB2aXJ0YmxrX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSB2aXJ0YmxrX2xvY2tlZF9pb2N0bChiZGV2LCBtb2RlLCBjbWQsIHBhcmFtKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBXZSBwcm92aWRlIGdldGdlbyBvbmx5IHRvIHBsZWFzZSBzb21lIG9sZCBib290bG9hZGVyL3BhcnRpdGlvbmluZyB0b29scyAqLwogc3RhdGljIGludCB2aXJ0YmxrX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZCwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCiB7CkBAIC0yNjEsNyArMjcyLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB2aXJ0YmxrX2ZvcHMgPSB7Ci0JLmxvY2tlZF9pb2N0bCA9IHZpcnRibGtfaW9jdGwsCisJLmlvY3RsICA9IHZpcnRibGtfaW9jdGwsCiAJLm93bmVyICA9IFRISVNfTU9EVUxFLAogCS5nZXRnZW8gPSB2aXJ0YmxrX2dldGdlbywKIH07CkBAIC0zODMsOCArMzk0LDcgQEAKIAkJICogZmx1c2hpbmcgYSB2b2xhdGlsZSB3cml0ZSBjYWNoZSBvbiB0aGUgaG9zdC4gIFVzZSB0aGF0CiAJCSAqIHRvIGltcGxlbWVudCB3cml0ZSBiYXJyaWVyIHN1cHBvcnQuCiAJCSAqLwotCQlibGtfcXVldWVfb3JkZXJlZChxLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAotCQkJCSAgdmlydGJsa19wcmVwYXJlX2ZsdXNoKTsKKwkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9EUkFJTl9GTFVTSCk7CiAJfSBlbHNlIGlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0JMS19GX0JBUlJJRVIpKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBCQVJSSUVSIGZlYXR1cmUgaXMgc3VwcG9ydGVkIHRoZSBob3N0IGV4cGVjdHMgdXMKQEAgLTM5Myw3ICs0MDMsNyBAQAogCQkgKiBuZXZlciByZS1vcmRlcnMgb3V0c3RhbmRpbmcgSS9PLiAgVGhpcyBmZWF0dXJlIGlzIG5vdAogCQkgKiB1c2VmdWwgZm9yIHJlYWwgbGlmZSBzY2VuYXJpb3VzIGFuZCBkZXByZWNhdGVkLgogCQkgKi8KLQkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9UQUcsIE5VTEwpOworCQlibGtfcXVldWVfb3JkZXJlZChxLCBRVUVVRV9PUkRFUkVEX1RBRyk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogSWYgdGhlIEZMVVNIIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCB3ZSBtdXN0IGFzc3VtZSB0aGF0CkBAIC00MDEsNyArNDExLDcgQEAKIAkJICogY2FjaGluZy4gV2Ugc3RpbGwgbmVlZCB0byBkcmFpbiB0aGUgcXVldWUgdG8gcHJvdmlkZXIKIAkJICogcHJvcGVyIGJhcnJpZXIgc2VtYW50aWNzLgogCQkgKi8KLQkJYmxrX3F1ZXVlX29yZGVyZWQocSwgUVVFVUVfT1JERVJFRF9EUkFJTiwgTlVMTCk7CisJCWJsa19xdWV1ZV9vcmRlcmVkKHEsIFFVRVVFX09SREVSRURfRFJBSU4pOwogCX0KIAogCS8qIElmIGRpc2sgaXMgcmVhZC1vbmx5IGluIHRoZSBob3N0LCB0aGUgZ3Vlc3Qgc2hvdWxkIG9iZXkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGQuYyBiL2RyaXZlcnMvYmxvY2sveGQuYwppbmRleCAxOGE4MGZmLi5kNWEzY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hkLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTMzLDcgKzEzNCw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgeGRfZm9wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKLQkubG9ja2VkX2lvY3RsCT0geGRfaW9jdGwsCisJLmlvY3RsCT0geGRfaW9jdGwsCiAJLmdldGdlbyA9IHhkX2dldGdlbywKIH07CiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoeGRfd2FpdF9pbnQpOwpAQCAtMzIyLDcgKzMyMyw3IEBACiAJCWludCByZXMgPSAtRUlPOwogCQlpbnQgcmV0cnk7CiAKLQkJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKQorCQlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKIAkJCWdvdG8gZG9uZTsKIAkJaWYgKGJsb2NrICsgY291bnQgPiBnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSkKIAkJCWdvdG8gZG9uZTsKQEAgLTM0Nyw3ICszNDgsNyBAQAogfQogCiAvKiB4ZF9pb2N0bDogaGFuZGxlIGRldmljZSBpb2N0bCdzICovCi1zdGF0aWMgaW50IHhkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQorc3RhdGljIGludCB4ZF9sb2NrZWRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAJc3dpdGNoIChjbWQpIHsKIAkJY2FzZSBIRElPX1NFVF9ETUE6CkBAIC0zNzUsNiArMzc2LDE4IEBACiAJfQogfQogCitzdGF0aWMgaW50IHhkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSB4ZF9sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBwYXJhbSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyogeGRfcmVhZHdyaXRlOiBoYW5kbGUgYSByZWFkL3dyaXRlIHJlcXVlc3QgKi8KIHN0YXRpYyBpbnQgeGRfcmVhZHdyaXRlICh1X2NoYXIgb3BlcmF0aW9uLFhEX0lORk8gKnAsY2hhciAqYnVmZmVyLHVfaW50IGJsb2NrLHVfaW50IGNvdW50KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYyBiL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zyb250LmMKaW5kZXggZjYzYWMzZC4uYWMxYjY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgpAQCAtNzksNiArODAsNyBAQAogICovCiBzdHJ1Y3QgYmxrZnJvbnRfaW5mbwogeworCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJkZXY7CiAJc3RydWN0IGdlbmRpc2sgKmdkOwogCWludCB2ZGV2aWNlOwpAQCAtOTUsMTYgKzk3LDE0IEBACiAJdW5zaWduZWQgbG9uZyBzaGFkb3dfZnJlZTsKIAlpbnQgZmVhdHVyZV9iYXJyaWVyOwogCWludCBpc19yZWFkeTsKLQotCS8qKgotCSAqIFRoZSBudW1iZXIgb2YgcGVvcGxlIGhvbGRpbmcgdGhpcyBkZXZpY2Ugb3Blbi4gIFdlIHdvbid0IGFsbG93IGEKLQkgKiBob3QtdW5wbHVnIHVubGVzcyB0aGlzIGlzIDAuCi0JICovCi0JaW50IHVzZXJzOwogfTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhibGtpZl9pb19sb2NrKTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBucl9taW5vcnM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWlub3JzOworc3RhdGljIERFRklORV9TUElOTE9DSyhtaW5vcl9sb2NrKTsKKwogI2RlZmluZSBNQVhJTVVNX09VVFNUQU5ESU5HX0JMT0NLX1JFUVMgXAogCShCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1QgKiBCTEtfUklOR19TSVpFKQogI2RlZmluZSBHUkFOVF9JTlZBTElEX1JFRgkwCkBAIC0xMzksNiArMTM5LDU1IEBACiAJaW5mby0+c2hhZG93X2ZyZWUgPSBpZDsKIH0KIAorc3RhdGljIGludCB4bGJkX3Jlc2VydmVfbWlub3JzKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IG5yKQoreworCXVuc2lnbmVkIGludCBlbmQgPSBtaW5vciArIG5yOworCWludCByYzsKKworCWlmIChlbmQgPiBucl9taW5vcnMpIHsKKwkJdW5zaWduZWQgbG9uZyAqYml0bWFwLCAqb2xkOworCisJCWJpdG1hcCA9IGt6YWxsb2MoQklUU19UT19MT05HUyhlbmQpICogc2l6ZW9mKCpiaXRtYXApLAorCQkJCSBHRlBfS0VSTkVMKTsKKwkJaWYgKGJpdG1hcCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc3Bpbl9sb2NrKCZtaW5vcl9sb2NrKTsKKwkJaWYgKGVuZCA+IG5yX21pbm9ycykgeworCQkJb2xkID0gbWlub3JzOworCQkJbWVtY3B5KGJpdG1hcCwgbWlub3JzLAorCQkJICAgICAgIEJJVFNfVE9fTE9OR1MobnJfbWlub3JzKSAqIHNpemVvZigqYml0bWFwKSk7CisJCQltaW5vcnMgPSBiaXRtYXA7CisJCQlucl9taW5vcnMgPSBCSVRTX1RPX0xPTkdTKGVuZCkgKiBCSVRTX1BFUl9MT05HOworCQl9IGVsc2UKKwkJCW9sZCA9IGJpdG1hcDsKKwkJc3Bpbl91bmxvY2soJm1pbm9yX2xvY2spOworCQlrZnJlZShvbGQpOworCX0KKworCXNwaW5fbG9jaygmbWlub3JfbG9jayk7CisJaWYgKGZpbmRfbmV4dF9iaXQobWlub3JzLCBlbmQsIG1pbm9yKSA+PSBlbmQpIHsKKwkJZm9yICg7IG1pbm9yIDwgZW5kOyArK21pbm9yKQorCQkJX19zZXRfYml0KG1pbm9yLCBtaW5vcnMpOworCQlyYyA9IDA7CisJfSBlbHNlCisJCXJjID0gLUVCVVNZOworCXNwaW5fdW5sb2NrKCZtaW5vcl9sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgeGxiZF9yZWxlYXNlX21pbm9ycyh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBucikKK3sKKwl1bnNpZ25lZCBpbnQgZW5kID0gbWlub3IgKyBucjsKKworCUJVR19PTihlbmQgPiBucl9taW5vcnMpOworCXNwaW5fbG9jaygmbWlub3JfbG9jayk7CisJZm9yICg7IG1pbm9yIDwgZW5kOyArK21pbm9yKQorCQlfX2NsZWFyX2JpdChtaW5vciwgbWlub3JzKTsKKwlzcGluX3VubG9jaygmbWlub3JfbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIGJsa2lmX3Jlc3RhcnRfcXVldWVfY2FsbGJhY2sodm9pZCAqYXJnKQogewogCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gKHN0cnVjdCBibGtmcm9udF9pbmZvICopYXJnOwpAQCAtMjM5LDcgKzI4OCw3IEBACiAKIAlyaW5nX3JlcS0+b3BlcmF0aW9uID0gcnFfZGF0YV9kaXIocmVxKSA/CiAJCUJMS0lGX09QX1dSSVRFIDogQkxLSUZfT1BfUkVBRDsKLQlpZiAoYmxrX2JhcnJpZXJfcnEocmVxKSkKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfSEFSREJBUlJJRVIpCiAJCXJpbmdfcmVxLT5vcGVyYXRpb24gPSBCTEtJRl9PUF9XUklURV9CQVJSSUVSOwogCiAJcmluZ19yZXEtPm5yX3NlZ21lbnRzID0gYmxrX3JxX21hcF9zZyhyZXEtPnEsIHJlcSwgaW5mby0+c2cpOwpAQCAtMzEwLDcgKzM1OSw3IEBACiAKIAkJYmxrX3N0YXJ0X3JlcXVlc3QocmVxKTsKIAotCQlpZiAoIWJsa19mc19yZXF1ZXN0KHJlcSkpIHsKKwkJaWYgKHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpIHsKIAkJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChyZXEsIC1FSU8pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTM3MiwxNyArNDIxLDIyIEBACiBzdGF0aWMgaW50IHhsdmJkX2JhcnJpZXIoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pCiB7CiAJaW50IGVycjsKKwljb25zdCBjaGFyICpiYXJyaWVyOwogCi0JZXJyID0gYmxrX3F1ZXVlX29yZGVyZWQoaW5mby0+cnEsCi0JCQkJaW5mby0+ZmVhdHVyZV9iYXJyaWVyID8gUVVFVUVfT1JERVJFRF9EUkFJTiA6IFFVRVVFX09SREVSRURfTk9ORSwKLQkJCQlOVUxMKTsKKwlzd2l0Y2ggKGluZm8tPmZlYXR1cmVfYmFycmllcikgeworCWNhc2UgUVVFVUVfT1JERVJFRF9EUkFJTjoJYmFycmllciA9ICJlbmFibGVkIChkcmFpbikiOyBicmVhazsKKwljYXNlIFFVRVVFX09SREVSRURfVEFHOgkJYmFycmllciA9ICJlbmFibGVkICh0YWcpIjsgYnJlYWs7CisJY2FzZSBRVUVVRV9PUkRFUkVEX05PTkU6CWJhcnJpZXIgPSAiZGlzYWJsZWQiOyBicmVhazsKKwlkZWZhdWx0OgkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IGJsa19xdWV1ZV9vcmRlcmVkKGluZm8tPnJxLCBpbmZvLT5mZWF0dXJlX2JhcnJpZXIpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCXByaW50ayhLRVJOX0lORk8gImJsa2Zyb250OiAlczogYmFycmllcnMgJXNcbiIsCi0JICAgICAgIGluZm8tPmdkLT5kaXNrX25hbWUsCi0JICAgICAgIGluZm8tPmZlYXR1cmVfYmFycmllciA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCSAgICAgICBpbmZvLT5nZC0+ZGlza19uYW1lLCBiYXJyaWVyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDE4LDkgKzQ3MiwxNCBAQAogCWlmICgobWlub3IgJSBucl9wYXJ0cykgPT0gMCkKIAkJbnJfbWlub3JzID0gbnJfcGFydHM7CiAKKwllcnIgPSB4bGJkX3Jlc2VydmVfbWlub3JzKG1pbm9yLCBucl9taW5vcnMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWVyciA9IC1FTk9ERVY7CisKIAlnZCA9IGFsbG9jX2Rpc2sobnJfbWlub3JzKTsKIAlpZiAoZ2QgPT0gTlVMTCkKLQkJZ290byBvdXQ7CisJCWdvdG8gcmVsZWFzZTsKIAogCW9mZnNldCA9IG1pbm9yIC8gbnJfcGFydHM7CiAKQEAgLTQ1MSwxNCArNTEwLDEzIEBACiAKIAlpZiAoeGx2YmRfaW5pdF9ibGtfcXVldWUoZ2QsIHNlY3Rvcl9zaXplKSkgewogCQlkZWxfZ2VuZGlzayhnZCk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIHJlbGVhc2U7CiAJfQogCiAJaW5mby0+cnEgPSBnZC0+cXVldWU7CiAJaW5mby0+Z2QgPSBnZDsKIAotCWlmIChpbmZvLT5mZWF0dXJlX2JhcnJpZXIpCi0JCXhsdmJkX2JhcnJpZXIoaW5mbyk7CisJeGx2YmRfYmFycmllcihpbmZvKTsKIAogCWlmICh2ZGlza19pbmZvICYgVkRJU0tfUkVBRE9OTFkpCiAJCXNldF9kaXNrX3JvKGdkLCAxKTsKQEAgLTQ3MSwxMCArNTI5LDQ1IEBACiAKIAlyZXR1cm4gMDsKIAorIHJlbGVhc2U6CisJeGxiZF9yZWxlYXNlX21pbm9ycyhtaW5vciwgbnJfbWlub3JzKTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgeGx2YmRfcmVsZWFzZV9nZW5kaXNrKHN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBtaW5vciwgbnJfbWlub3JzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoaW5mby0+cnEgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2lmX2lvX2xvY2ssIGZsYWdzKTsKKworCS8qIE5vIG1vcmUgYmxraWZfcmVxdWVzdCgpLiAqLworCWJsa19zdG9wX3F1ZXVlKGluZm8tPnJxKTsKKworCS8qIE5vIG1vcmUgZ250dGFiIGNhbGxiYWNrIHdvcmsuICovCisJZ250dGFiX2NhbmNlbF9mcmVlX2NhbGxiYWNrKCZpbmZvLT5jYWxsYmFjayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxraWZfaW9fbG9jaywgZmxhZ3MpOworCisJLyogRmx1c2ggZ250dGFiIGNhbGxiYWNrIHdvcmsuIE11c3QgYmUgZG9uZSB3aXRoIG5vIGxvY2tzIGhlbGQuICovCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWRlbF9nZW5kaXNrKGluZm8tPmdkKTsKKworCW1pbm9yID0gaW5mby0+Z2QtPmZpcnN0X21pbm9yOworCW5yX21pbm9ycyA9IGluZm8tPmdkLT5taW5vcnM7CisJeGxiZF9yZWxlYXNlX21pbm9ycyhtaW5vciwgbnJfbWlub3JzKTsKKworCWJsa19jbGVhbnVwX3F1ZXVlKGluZm8tPnJxKTsKKwlpbmZvLT5ycSA9IE5VTEw7CisKKwlwdXRfZGlzayhpbmZvLT5nZCk7CisJaW5mby0+Z2QgPSBOVUxMOworfQorCiBzdGF0aWMgdm9pZCBraWNrX3BlbmRpbmdfcmVxdWVzdF9xdWV1ZXMoc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pCiB7CiAJaWYgKCFSSU5HX0ZVTEwoJmluZm8tPnJpbmcpKSB7CkBAIC01NjksNyArNjYyLDcgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJibGtmcm9udDogJXM6IHdyaXRlIGJhcnJpZXIgb3AgZmFpbGVkXG4iLAogCQkJCSAgICAgICBpbmZvLT5nZC0+ZGlza19uYW1lKTsKIAkJCQllcnJvciA9IC1FT1BOT1RTVVBQOwotCQkJCWluZm8tPmZlYXR1cmVfYmFycmllciA9IDA7CisJCQkJaW5mby0+ZmVhdHVyZV9iYXJyaWVyID0gUVVFVUVfT1JERVJFRF9OT05FOwogCQkJCXhsdmJkX2JhcnJpZXIoaW5mbyk7CiAJCQl9CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTY1Miw3ICs3NDUsNyBAQAogCiAKIC8qIENvbW1vbiBjb2RlIHVzZWQgd2hlbiBmaXJzdCBzZXR0aW5nIHVwLCBhbmQgd2hlbiByZXN1bWluZy4gKi8KLXN0YXRpYyBpbnQgdGFsa190b19iYWNrZW5kKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHRhbGtfdG9fYmxrYmFjayhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8pCiB7CiAJY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CkBAIC03MTIsNyArODA1LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KIC8qKgogICogRW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNyZWF0ZWQuICBBbGxvY2F0ZSB0aGUgYmFzaWMKICAqIHN0cnVjdHVyZXMgYW5kIHRoZSByaW5nIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBiYWNrZW5kLCBhbmQKQEAgLTc3Myw2ICs4NjUsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltdXRleF9pbml0KCZpbmZvLT5tdXRleCk7CiAJaW5mby0+eGJkZXYgPSBkZXY7CiAJaW5mby0+dmRldmljZSA9IHZkZXZpY2U7CiAJaW5mby0+Y29ubmVjdGVkID0gQkxLSUZfU1RBVEVfRElTQ09OTkVDVEVEOwpAQCAtNzg2LDcgKzg3OSw3IEBACiAJaW5mby0+aGFuZGxlID0gc2ltcGxlX3N0cnRvdWwoc3RycmNocihkZXYtPm5vZGVuYW1lLCAnLycpKzEsIE5VTEwsIDApOwogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOwogCi0JZXJyID0gdGFsa190b19iYWNrZW5kKGRldiwgaW5mbyk7CisJZXJyID0gdGFsa190b19ibGtiYWNrKGRldiwgaW5mbyk7CiAJaWYgKGVycikgewogCQlrZnJlZShpbmZvKTsKIAkJZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CkBAIC04ODEsMTMgKzk3NCw1MCBAQAogCiAJYmxraWZfZnJlZShpbmZvLCBpbmZvLT5jb25uZWN0ZWQgPT0gQkxLSUZfU1RBVEVfQ09OTkVDVEVEKTsKIAotCWVyciA9IHRhbGtfdG9fYmFja2VuZChkZXYsIGluZm8pOworCWVyciA9IHRhbGtfdG9fYmxrYmFjayhkZXYsIGluZm8pOwogCWlmIChpbmZvLT5jb25uZWN0ZWQgPT0gQkxLSUZfU1RBVEVfU1VTUEVOREVEICYmICFlcnIpCiAJCWVyciA9IGJsa2lmX3JlY292ZXIoaW5mbyk7CiAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZAorYmxrZnJvbnRfY2xvc2luZyhzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJkZXYgPSBpbmZvLT54YmRldjsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gTlVMTDsKKworCW11dGV4X2xvY2soJmluZm8tPm11dGV4KTsKKworCWlmICh4YmRldi0+c3RhdGUgPT0gWGVuYnVzU3RhdGVDbG9zaW5nKSB7CisJCW11dGV4X3VubG9jaygmaW5mby0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGluZm8tPmdkKQorCQliZGV2ID0gYmRnZXRfZGlzayhpbmZvLT5nZCwgMCk7CisKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworCWlmICghYmRldikgeworCQl4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKHhiZGV2KTsKKwkJcmV0dXJuOworCX0KKworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKworCWlmIChiZGV2LT5iZF9vcGVuZXJzKSB7CisJCXhlbmJ1c19kZXZfZXJyb3IoeGJkZXYsIC1FQlVTWSwKKwkJCQkgIkRldmljZSBpbiB1c2U7IHJlZnVzaW5nIHRvIGNsb3NlIik7CisJCXhlbmJ1c19zd2l0Y2hfc3RhdGUoeGJkZXYsIFhlbmJ1c1N0YXRlQ2xvc2luZyk7CisJfSBlbHNlIHsKKwkJeGx2YmRfcmVsZWFzZV9nZW5kaXNrKGluZm8pOworCQl4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKHhiZGV2KTsKKwl9CisKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwliZHB1dChiZGV2KTsKK30KIAogLyoKICAqIEludm9rZWQgd2hlbiB0aGUgYmFja2VuZCBpcyBmaW5hbGx5ICdyZWFkeScgKGFuZCBoYXMgdG9sZCBwcm9kdWNlZApAQCAtODk5LDExICsxMDI5LDMxIEBACiAJdW5zaWduZWQgbG9uZyBzZWN0b3Jfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgYmluZm87CiAJaW50IGVycjsKKwlpbnQgYmFycmllcjsKIAotCWlmICgoaW5mby0+Y29ubmVjdGVkID09IEJMS0lGX1NUQVRFX0NPTk5FQ1RFRCkgfHwKLQkgICAgKGluZm8tPmNvbm5lY3RlZCA9PSBCTEtJRl9TVEFURV9TVVNQRU5ERUQpICkKKwlzd2l0Y2ggKGluZm8tPmNvbm5lY3RlZCkgeworCWNhc2UgQkxLSUZfU1RBVEVfQ09OTkVDVEVEOgorCQkvKgorCQkgKiBQb3RlbnRpYWxseSwgdGhlIGJhY2stZW5kIG1heSBiZSBzaWduYWxsaW5nCisJCSAqIGEgY2FwYWNpdHkgY2hhbmdlOyB1cGRhdGUgdGhlIGNhcGFjaXR5LgorCQkgKi8KKwkJZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5vdGhlcmVuZCwKKwkJCQkgICAic2VjdG9ycyIsICIlTHUiLCAmc2VjdG9ycyk7CisJCWlmIChYRU5CVVNfRVhJU1RfRVJSKGVycikpCisJCQlyZXR1cm47CisJCXByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgY2FwYWNpdHkgdG8gJUx1XG4iLAorCQkgICAgICAgc2VjdG9ycyk7CisJCXNldF9jYXBhY2l0eShpbmZvLT5nZCwgc2VjdG9ycyk7CisJCXJldmFsaWRhdGVfZGlzayhpbmZvLT5nZCk7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBCTEtJRl9TVEFURV9TVVNQRU5ERUQ6CiAJCXJldHVybjsKIAorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCWRldl9kYmcoJmluZm8tPnhiZGV2LT5kZXYsICIlczolcy5cbiIsCiAJCV9fZnVuY19fLCBpbmZvLT54YmRldi0+b3RoZXJlbmQpOwogCkBAIC05MjAsMTAgKzEwNzAsMjYgQEAKIAl9CiAKIAllcnIgPSB4ZW5idXNfZ2F0aGVyKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5vdGhlcmVuZCwKLQkJCSAgICAiZmVhdHVyZS1iYXJyaWVyIiwgIiVsdSIsICZpbmZvLT5mZWF0dXJlX2JhcnJpZXIsCisJCQkgICAgImZlYXR1cmUtYmFycmllciIsICIlbHUiLCAmYmFycmllciwKIAkJCSAgICBOVUxMKTsKKworCS8qCisJICogSWYgdGhlcmUncyBubyAiZmVhdHVyZS1iYXJyaWVyIiBkZWZpbmVkLCB0aGVuIGl0IG1lYW5zCisJICogd2UncmUgZGVhbGluZyB3aXRoIGEgdmVyeSBvbGQgYmFja2VuZCB3aGljaCB3cml0ZXMKKwkgKiBzeW5jaHJvbm91c2x5OyBkcmFpbmluZyB3aWxsIGRvIHdoYXQgbmVlZHMgdG8gZ2V0IGRvbmUuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgYmFycmllcnMsIHRoZW4gd2UgY2FuIGRvIGZ1bGwgcXVldWVkIHdyaXRlcworCSAqIHdpdGggdGFnZ2VkIGJhcnJpZXJzLgorCSAqCisJICogSWYgYmFycmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlcmUncyBubyBtdWNoIHdlIGNhbgorCSAqIGRvLCBzbyBqdXN0IHNldCBvcmRlcmluZyB0byBOT05FLgorCSAqLwogCWlmIChlcnIpCi0JCWluZm8tPmZlYXR1cmVfYmFycmllciA9IDA7CisJCWluZm8tPmZlYXR1cmVfYmFycmllciA9IFFVRVVFX09SREVSRURfRFJBSU47CisJZWxzZSBpZiAoYmFycmllcikKKwkJaW5mby0+ZmVhdHVyZV9iYXJyaWVyID0gUVVFVUVfT1JERVJFRF9UQUc7CisJZWxzZQorCQlpbmZvLT5mZWF0dXJlX2JhcnJpZXIgPSBRVUVVRV9PUkRFUkVEX05PTkU7CiAKIAllcnIgPSB4bHZiZF9hbGxvY19nZW5kaXNrKHNlY3RvcnMsIGluZm8sIGJpbmZvLCBzZWN0b3Jfc2l6ZSk7CiAJaWYgKGVycikgewpAQCAtOTQ2LDUyICsxMTEyLDE0IEBACiB9CiAKIC8qKgotICogSGFuZGxlIHRoZSBjaGFuZ2Ugb2Ygc3RhdGUgb2YgdGhlIGJhY2tlbmQgdG8gQ2xvc2luZy4gIFdlIG11c3QgZGVsZXRlIG91cgotICogZGV2aWNlLWxheWVyIHN0cnVjdHVyZXMgbm93LCB0byBlbnN1cmUgdGhhdCB3cml0ZXMgYXJlIGZsdXNoZWQgdGhyb3VnaCB0bwotICogdGhlIGJhY2tlbmQuICBPbmNlIGlzIHRoaXMgZG9uZSwgd2UgY2FuIHN3aXRjaCB0byBDbG9zZWQgaW4KLSAqIGFja25vd2xlZGdlbWVudC4KLSAqLwotc3RhdGljIHZvaWQgYmxrZnJvbnRfY2xvc2luZyhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRldl9kYmcoJmRldi0+ZGV2LCAiYmxrZnJvbnRfY2xvc2luZzogJXMgcmVtb3ZlZFxuIiwgZGV2LT5ub2RlbmFtZSk7Ci0KLQlpZiAoaW5mby0+cnEgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYmxraWZfaW9fbG9jaywgZmxhZ3MpOwotCi0JLyogTm8gbW9yZSBibGtpZl9yZXF1ZXN0KCkuICovCi0JYmxrX3N0b3BfcXVldWUoaW5mby0+cnEpOwotCi0JLyogTm8gbW9yZSBnbnR0YWIgY2FsbGJhY2sgd29yay4gKi8KLQlnbnR0YWJfY2FuY2VsX2ZyZWVfY2FsbGJhY2soJmluZm8tPmNhbGxiYWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZibGtpZl9pb19sb2NrLCBmbGFncyk7Ci0KLQkvKiBGbHVzaCBnbnR0YWIgY2FsbGJhY2sgd29yay4gTXVzdCBiZSBkb25lIHdpdGggbm8gbG9ja3MgaGVsZC4gKi8KLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCi0JYmxrX2NsZWFudXBfcXVldWUoaW5mby0+cnEpOwotCWluZm8tPnJxID0gTlVMTDsKLQotCWRlbF9nZW5kaXNrKGluZm8tPmdkKTsKLQotIG91dDoKLQl4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKGRldik7Ci19Ci0KLS8qKgogICogQ2FsbGJhY2sgcmVjZWl2ZWQgd2hlbiB0aGUgYmFja2VuZCdzIHN0YXRlIGNoYW5nZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGJhY2tlbmRfY2hhbmdlZChzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAorc3RhdGljIHZvaWQgYmxrYmFja19jaGFuZ2VkKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsCiAJCQkgICAgZW51bSB4ZW5idXNfc3RhdGUgYmFja2VuZF9zdGF0ZSkKIHsKIAlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkOwogCi0JZGV2X2RiZygmZGV2LT5kZXYsICJibGtmcm9udDpiYWNrZW5kX2NoYW5nZWQuXG4iKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgImJsa2Zyb250OmJsa2JhY2tfY2hhbmdlZCB0byBzdGF0ZSAlZC5cbiIsIGJhY2tlbmRfc3RhdGUpOwogCiAJc3dpdGNoIChiYWNrZW5kX3N0YXRlKSB7CiAJY2FzZSBYZW5idXNTdGF0ZUluaXRpYWxpc2luZzoKQEAgLTEwMDYsMzUgKzExMzQsNTYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFhlbmJ1c1N0YXRlQ2xvc2luZzoKLQkJaWYgKGluZm8tPmdkID09IE5VTEwpIHsKLQkJCXhlbmJ1c19mcm9udGVuZF9jbG9zZWQoZGV2KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJkID0gYmRnZXRfZGlzayhpbmZvLT5nZCwgMCk7Ci0JCWlmIChiZCA9PSBOVUxMKQotCQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIC1FTk9ERVYsICJiZGdldCBmYWlsZWQiKTsKLQotCQltdXRleF9sb2NrKCZiZC0+YmRfbXV0ZXgpOwotCQlpZiAoaW5mby0+dXNlcnMgPiAwKQotCQkJeGVuYnVzX2Rldl9lcnJvcihkZXYsIC1FQlVTWSwKLQkJCQkJICJEZXZpY2UgaW4gdXNlOyByZWZ1c2luZyB0byBjbG9zZSIpOwotCQllbHNlCi0JCQlibGtmcm9udF9jbG9zaW5nKGRldik7Ci0JCW11dGV4X3VubG9jaygmYmQtPmJkX211dGV4KTsKLQkJYmRwdXQoYmQpOworCQlibGtmcm9udF9jbG9zaW5nKGluZm8pOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYmxrZnJvbnRfcmVtb3ZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJsa2Zyb250X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGJkZXYpCiB7Ci0Jc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmeGJkZXYtPmRldik7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IE5VTEw7CisJc3RydWN0IGdlbmRpc2sgKmRpc2s7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgImJsa2Zyb250X3JlbW92ZTogJXMgcmVtb3ZlZFxuIiwgZGV2LT5ub2RlbmFtZSk7CisJZGV2X2RiZygmeGJkZXYtPmRldiwgIiVzIHJlbW92ZWQiLCB4YmRldi0+bm9kZW5hbWUpOwogCiAJYmxraWZfZnJlZShpbmZvLCAwKTsKIAotCWtmcmVlKGluZm8pOworCW11dGV4X2xvY2soJmluZm8tPm11dGV4KTsKKworCWRpc2sgPSBpbmZvLT5nZDsKKwlpZiAoZGlzaykKKwkJYmRldiA9IGJkZ2V0X2Rpc2soZGlzaywgMCk7CisKKwlpbmZvLT54YmRldiA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5tdXRleCk7CisKKwlpZiAoIWJkZXYpIHsKKwkJa2ZyZWUoaW5mbyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVGhlIHhiZGV2IHdhcyByZW1vdmVkIGJlZm9yZSB3ZSByZWFjaGVkIHRoZSBDbG9zZWQKKwkgKiBzdGF0ZS4gU2VlIGlmIGl0J3Mgc2FmZSB0byByZW1vdmUgdGhlIGRpc2suIElmIHRoZSBiZGV2CisJICogaXNuJ3QgY2xvc2VkIHlldCwgd2UgbGV0IHJlbGVhc2UgdGFrZSBjYXJlIG9mIGl0LgorCSAqLworCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWluZm8gPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwlkZXZfd2FybihkaXNrX3RvX2RldihkaXNrKSwKKwkJICIlcyB3YXMgaG90LXVucGx1Z2dlZCwgJWQgc3RhbGUgaGFuZGxlc1xuIiwKKwkJIHhiZGV2LT5ub2RlbmFtZSwgYmRldi0+YmRfb3BlbmVycyk7CisKKwlpZiAoaW5mbyAmJiAhYmRldi0+YmRfb3BlbmVycykgeworCQl4bHZiZF9yZWxlYXNlX2dlbmRpc2soaW5mbyk7CisJCWRpc2stPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJCWtmcmVlKGluZm8pOworCX0KKworCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCWJkcHV0KGJkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDQzLDMwICsxMTkyLDc4IEBACiB7CiAJc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKIAotCXJldHVybiBpbmZvLT5pc19yZWFkeTsKKwlyZXR1cm4gaW5mby0+aXNfcmVhZHkgJiYgaW5mby0+eGJkZXY7CiB9CiAKIHN0YXRpYyBpbnQgYmxraWZfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaW5mby0+dXNlcnMrKzsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7CisJc3RydWN0IGJsa2Zyb250X2luZm8gKmluZm87CisJaW50IGVyciA9IDA7CisKKwlsb2NrX2tlcm5lbCgpOworCisJaW5mbyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlpZiAoIWluZm8pIHsKKwkJLyogeGJkZXYgZ29uZSAqLworCQllcnIgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gb3V0OworCX0KKworCW11dGV4X2xvY2soJmluZm8tPm11dGV4KTsKKworCWlmICghaW5mby0+Z2QpCisJCS8qIHhiZGV2IGlzIGNsb3NlZCAqLworCQllcnIgPSAtRVJFU1RBUlRTWVM7CisKKwltdXRleF91bmxvY2soJmluZm8tPm11dGV4KTsKKworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGJsa2lmX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQlpbmZvLT51c2Vycy0tOwotCWlmIChpbmZvLT51c2VycyA9PSAwKSB7Ci0JCS8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBiZWVuIGluc3RydWN0ZWQgdG8gY2xvc2UuICBXZSB3aWxsCi0JCSAgIGhhdmUgaWdub3JlZCB0aGlzIHJlcXVlc3QgaW5pdGlhbGx5LCBhcyB0aGUgZGV2aWNlIHdhcwotCQkgICBzdGlsbCBtb3VudGVkLiAqLwotCQlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2ID0gaW5mby0+eGJkZXY7Ci0JCWVudW0geGVuYnVzX3N0YXRlIHN0YXRlID0geGVuYnVzX3JlYWRfZHJpdmVyX3N0YXRlKGRldi0+b3RoZXJlbmQpOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhiZGV2OwogCi0JCWlmIChzdGF0ZSA9PSBYZW5idXNTdGF0ZUNsb3NpbmcgJiYgaW5mby0+aXNfcmVhZHkpCi0JCQlibGtmcm9udF9jbG9zaW5nKGRldik7CisJbG9ja19rZXJuZWwoKTsKKworCWJkZXYgPSBiZGdldF9kaXNrKGRpc2ssIDApOworCWJkcHV0KGJkZXYpOworCisJaWYgKGJkZXYtPmJkX29wZW5lcnMpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBDaGVjayBpZiB3ZSBoYXZlIGJlZW4gaW5zdHJ1Y3RlZCB0byBjbG9zZS4gV2Ugd2lsbCBoYXZlCisJICogZGVmZXJyZWQgdGhpcyByZXF1ZXN0LCBiZWNhdXNlIHRoZSBiZGV2IHdhcyBzdGlsbCBvcGVuLgorCSAqLworCisJbXV0ZXhfbG9jaygmaW5mby0+bXV0ZXgpOworCXhiZGV2ID0gaW5mby0+eGJkZXY7CisKKwlpZiAoeGJkZXYgJiYgeGJkZXYtPnN0YXRlID09IFhlbmJ1c1N0YXRlQ2xvc2luZykgeworCQkvKiBwZW5kaW5nIHN3aXRjaCB0byBzdGF0ZSBjbG9zZWQgKi8KKwkJZGV2X2luZm8oZGlza190b19kZXYoYmRldi0+YmRfZGlzayksICJyZWxlYXNpbmcgZGlza1xuIik7CisJCXhsdmJkX3JlbGVhc2VfZ2VuZGlzayhpbmZvKTsKKwkJeGVuYnVzX2Zyb250ZW5kX2Nsb3NlZChpbmZvLT54YmRldik7CisgCX0KKworCW11dGV4X3VubG9jaygmaW5mby0+bXV0ZXgpOworCisJaWYgKCF4YmRldikgeworCQkvKiBzdWRkZW4gZGV2aWNlIHJlbW92YWwgKi8KKwkJZGV2X2luZm8oZGlza190b19kZXYoYmRldi0+YmRfZGlzayksICJyZWxlYXNpbmcgZGlza1xuIik7CisJCXhsdmJkX3JlbGVhc2VfZ2VuZGlzayhpbmZvKTsKKwkJZGlzay0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJa2ZyZWUoaW5mbyk7CiAJfQorCitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDc2LDcgKzEyNzMsNyBAQAogCS5vcGVuID0gYmxraWZfb3BlbiwKIAkucmVsZWFzZSA9IGJsa2lmX3JlbGVhc2UsCiAJLmdldGdlbyA9IGJsa2lmX2dldGdlbywKLQkubG9ja2VkX2lvY3RsID0gYmxraWZfaW9jdGwsCisJLmlvY3RsID0gYmxraWZfaW9jdGwsCiB9OwogCiAKQEAgLTEwOTIsNyArMTI4OSw3IEBACiAJLnByb2JlID0gYmxrZnJvbnRfcHJvYmUsCiAJLnJlbW92ZSA9IGJsa2Zyb250X3JlbW92ZSwKIAkucmVzdW1lID0gYmxrZnJvbnRfcmVzdW1lLAotCS5vdGhlcmVuZF9jaGFuZ2VkID0gYmFja2VuZF9jaGFuZ2VkLAorCS5vdGhlcmVuZF9jaGFuZ2VkID0gYmxrYmFja19jaGFuZ2VkLAogCS5pc19yZWFkeSA9IGJsa2Zyb250X2lzX3JlYWR5LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwppbmRleCBkN2NiNjlkLi4yOTgyYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtODksNiArODksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTQ2NSw3ICs0NjYsNyBAQAogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CiAKIAl3aGlsZSAoKHJlcSA9IGJsa19wZWVrX3JlcXVlc3QocSkpICE9IE5VTEwpIHsKLQkJaWYgKGJsa19mc19yZXF1ZXN0KHJlcSkpCisJCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQogCQkJYnJlYWs7CiAJCWJsa19zdGFydF9yZXF1ZXN0KHJlcSk7CiAJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChyZXEsIC1FSU8pOwpAQCAtOTAxLDExICs5MDIsMTQgQEAKIAogCWRldl9kYmcoYWNlLT5kZXYsICJhY2Vfb3BlbigpIHVzZXJzPSVpXG4iLCBhY2UtPnVzZXJzICsgMSk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZhY2UtPmxvY2ssIGZsYWdzKTsKIAlhY2UtPnVzZXJzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNlLT5sb2NrLCBmbGFncyk7CiAKIAljaGVja19kaXNrX2NoYW5nZShiZGV2KTsKKwl1bmxvY2tfa2VybmVsKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE3LDYgKzkyMSw3IEBACiAKIAlkZXZfZGJnKGFjZS0+ZGV2LCAiYWNlX3JlbGVhc2UoKSB1c2Vycz0laVxuIiwgYWNlLT51c2VycyAtIDEpOwogCisJbG9ja19rZXJuZWwoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWNlLT5sb2NrLCBmbGFncyk7CiAJYWNlLT51c2Vycy0tOwogCWlmIChhY2UtPnVzZXJzID09IDApIHsKQEAgLTkyNCw2ICs5MjksNyBAQAogCQlhY2Vfb3V0KGFjZSwgQUNFX0NUUkwsIHZhbCAmIH5BQ0VfQ1RSTF9MT0NLUkVRKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNlLT5sb2NrLCBmbGFncyk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3oycmFtLmMgYi9kcml2ZXJzL2Jsb2NrL3oycmFtLmMKaW5kZXggOTExNDY1NC4uZDc1YjJiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay96MnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svejJyYW0uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xNTMsNiArMTU0LDcgQEAKIAogICAgIGRldmljZSA9IE1JTk9SKGJkZXYtPmJkX2Rldik7CiAKKyAgICBsb2NrX2tlcm5lbCgpOwogICAgIGlmICggY3VycmVudF9kZXZpY2UgIT0gLTEgJiYgY3VycmVudF9kZXZpY2UgIT0gZGV2aWNlICkKICAgICB7CiAJcmMgPSAtRUJVU1k7CkBAIC0yOTQsMjAgKzI5NiwyNSBAQAogCXNldF9jYXBhY2l0eSh6MnJhbV9nZW5kaXNrLCB6MnJhbV9zaXplID4+IDkpOwogICAgIH0KIAorICAgIHVubG9ja19rZXJuZWwoKTsKICAgICByZXR1cm4gMDsKIAogZXJyX291dF9rZnJlZToKICAgICBrZnJlZSh6MnJhbV9tYXApOwogZXJyX291dDoKKyAgICB1bmxvY2tfa2VybmVsKCk7CiAgICAgcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50CiB6Ml9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7Ci0gICAgaWYgKCBjdXJyZW50X2RldmljZSA9PSAtMSApCi0JcmV0dXJuIDA7ICAgICAKLQorICAgIGxvY2tfa2VybmVsKCk7CisgICAgaWYgKCBjdXJyZW50X2RldmljZSA9PSAtMSApIHsKKyAgICAJdW5sb2NrX2tlcm5lbCgpOworICAgIAlyZXR1cm4gMDsKKyAgICB9CisgICAgdW5sb2NrX2tlcm5lbCgpOwogICAgIC8qCiAgICAgICogRklYTUU6IHVubWFwIG1lbW9yeQogICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKaW5kZXggNmQzNGY0MC4uZDUyZTkwYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTE2MCw3ICsxNTksNyBAQAogc3RhdGljIHZvaWQgYmx1ZWNhcmRfYWN0aXZpdHlfbGVkX3RpbWVvdXQodV9sb25nIGFyZykKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopYXJnOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMTc3LDcgKzE3Niw3IEBACiAKIHN0YXRpYyB2b2lkIGJsdWVjYXJkX2VuYWJsZV9hY3Rpdml0eV9sZWQoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJaWYgKCF0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJcmV0dXJuOwpAQCAtMjMzLDcgKzIzMiw3IEBACiAJfQogCiAJZG8gewotCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBvZmZzZXQ7CiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29tbWFuZDsKIAkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWFkeV9iaXQ7CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICh0ZXN0X2JpdChYTUlUX1NFTkRJTkdfUkVBRFksICYoaW5mby0+dHhfc3RhdGUpKSkKIAkJYmx1ZWNhcmRfZW5hYmxlX2FjdGl2aXR5X2xlZChpbmZvKTsKQEAgLTUwOSw3ICs1MDgsNyBAQAogCWlmICghdGVzdF9iaXQoQ0FSRF9SRUFEWSwgJihpbmZvLT5od19zdGF0ZSkpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlzcGluX2xvY2soJihpbmZvLT5sb2NrKSk7CiAKQEAgLTYyMyw3ICs2MjIsNyBAQAogc3RhdGljIGludCBibHVlY2FyZF9oY2lfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICh0ZXN0X2JpdChDQVJEX0hBU19QQ0NBUkRfSUQsICYoaW5mby0+aHdfc3RhdGUpKSkKIAkJYmx1ZWNhcmRfaGNpX3NldF9iYXVkX3JhdGUoaGRldiwgREVGQVVMVF9CQVVEX1JBVEUpOwpAQCAtNjQzLDcgKzY0Miw3IEBACiBzdGF0aWMgaW50IGJsdWVjYXJkX2hjaV9jbG9zZShzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlibHVlY2FyZF9pbmZvX3QgKmluZm8gPSAoYmx1ZWNhcmRfaW5mb190ICopKGhkZXYtPmRyaXZlcl9kYXRhKTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmKGhkZXYtPmZsYWdzKSkpCiAJCXJldHVybiAwOwpAQCAtNzEwLDcgKzcwOSw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfb3BlbihibHVlY2FyZF9pbmZvX3QgKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAJdW5zaWduZWQgY2hhciBpZDsKIApAQCAtODI5LDcgKzgyOCw3IEBACiAKIHN0YXRpYyBpbnQgYmx1ZWNhcmRfY2xvc2UoYmx1ZWNhcmRfaW5mb190ICppbmZvKQogewotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaW5mby0+aGRldjsKIAogCWlmICghaGRldikKQEAgLTg2Niw5ICs4NjUsNiBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKLQogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtODkxLDEyICs4ODcsMTQgQEAKIAlpbnQgaSwgbjsKIAogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDIwOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDY0OwotCWxpbmstPmlvLklPQWRkckxpbmVzID0gNjsKKworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNjQ7CisJbGluay0+aW9fbGluZXMgPSA2OwogCiAJZm9yIChuID0gMDsgbiA8IDB4NDAwOyBuICs9IDB4NDApIHsKLQkJbGluay0+aW8uQmFzZVBvcnQxID0gbiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gbiBeIDB4MzAwOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggMjFlMDVmZC4uN2FiOGYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTE4OSw3ICsxODgsNyBAQAogCQlyZXR1cm47CiAKIAlkbyB7Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAkJcmVnaXN0ZXIgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJcmVnaXN0ZXIgaW50IGxlbjsKIApAQCAtMjI3LDcgKzIyNiw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlhdmFpbCA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwNik7CiAJLy9wcmludGsoImJ0M2NfY3M6IHJlY2VpdmluZyAlZCBieXRlc1xuIiwgYXZhaWwpOwpAQCAtMzQ4LDcgKzM0Nyw3IEBACiAJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJc3Bpbl9sb2NrKCYoaW5mby0+bG9jaykpOwogCkBAIC00ODEsNyArNDgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaW9iYXNlLCBzaXplLCBhZGRyLCBmY3MsIHRtcDsKIAlpbnQgaSwgZXJyID0gMDsKIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCS8qIFJlc2V0ICovCiAJYnQzY19pb193cml0ZShpb2Jhc2UsIDB4ODA0MCwgMHgwNDA0KTsKQEAgLTY1OCw4ICs2NTcsOCBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC02ODQsMTQgKzY4MywxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgdHJ5ID0gKHVuc2lnbmVkIGxvbmcpIHByaXZfZGF0YTsKIAorCXBfZGV2LT5pb19saW5lcyA9ICh0cnkgPT0gMCkgPyAxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCiAJaWYgKGNmLT52cHAxLnByZXNlbnQgJiAoMSA8PCBDSVNUUExfUE9XRVJfVk5PTSkpCiAJCXBfZGV2LT5jb25mLlZwcCA9IGNmLT52cHAxLnBhcmFtW0NJU1RQTF9QT1dFUl9WTk9NXSAvIDEwMDAwOwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gOCkgJiYKIAkgICAgKGNmLT5pby53aW5bMF0uYmFzZSAhPSAwKSkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAodHJ5ID09IDApID8gMTYgOgotCQkJY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTcwOCw5ICs3MDcsOSBAQAogCiAJaWYgKChjZi0+aW8ubndpbiA+IDApICYmICgoY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0spIDw9IDMpKSB7CiAJCWZvciAoaiA9IDA7IGogPCA1OyBqKyspIHsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBiYXNlW2pdOwotCQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKLQkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGJhc2Vbal07CisJCQlwX2Rldi0+aW9fbGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCmluZGV4IDRlZDcyODguLjFjNGY1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dWFydF9jcy5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0xNDMsNyArMTQyLDcgQEAKIAl9CiAKIAlkbyB7Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAkJcmVnaXN0ZXIgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJcmVnaXN0ZXIgaW50IGxlbjsKIApAQCAtMTg0LDcgKzE4Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlkbyB7CiAJCWluZm8tPmhkZXYtPnN0YXQuYnl0ZV9yeCsrOwpAQCAtMjk4LDcgKzI5Nyw3IEBACiAJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJc3Bpbl9sb2NrKCYoaW5mby0+bG9jaykpOwogCkBAIC0zNTUsNyArMzU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCYoaW5mby0+bG9jayksIGZsYWdzKTsKIApAQCAtNDc5LDcgKzQ3OCw3IEBACiBzdGF0aWMgaW50IGJ0dWFydF9vcGVuKGJ0dWFydF9pbmZvX3QgKmluZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKIAogCXNwaW5fbG9ja19pbml0KCYoaW5mby0+bG9jaykpOwpAQCAtNTQ5LDcgKzU0OCw3IEBACiBzdGF0aWMgaW50IGJ0dWFydF9jbG9zZShidHVhcnRfaW5mb190ICppbmZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBpbmZvLT5oZGV2OwogCiAJaWYgKCFoZGV2KQpAQCAtNTg3LDggKzU4Niw4IEBACiAJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwogCi0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSA4OworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gODsKIAogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKQEAgLTYxMywxNCArNjEyLDE0IEBACiB7CiAJaW50ICp0cnkgPSBwcml2X2RhdGE7CiAKKwlwX2Rldi0+aW9fbGluZXMgPSAodHJ5ID09IDApID8gMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwogCWlmIChjZi0+dnBwMS5wcmVzZW50ICYgKDEgPDwgQ0lTVFBMX1BPV0VSX1ZOT00pKQogCQlwX2Rldi0+Y29uZi5WcHAgPSBjZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKGNmLT5pby53aW5bMF0ubGVuID09IDgpICYmCiAJICAgIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gKCp0cnkgPT0gMCkgPyAxNiA6Ci0JCQljZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5PREVWOwpAQCAtNjM3LDkgKzYzNiw5IEBACiAKIAlpZiAoKGNmLT5pby5ud2luID4gMCkgJiYgKChjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykgPD0gMykpIHsKIAkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGJhc2Vbal07Ci0JCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBiYXNlW2pdID8gMTYgOiAzOwotCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gYmFzZVtqXTsKKwkJCXBfZGV2LT5pb19saW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwppbmRleCBjYmU5ZTQ0Li5kYjdjOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0xNTAsNyArMTQ5LDcgQEAKIAl9CiAKIAlkbyB7Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCQlyZWdpc3RlciB1bnNpZ25lZCBpbnQgaW9iYXNlID0gaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAkJcmVnaXN0ZXIgc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJcmVnaXN0ZXIgaW50IGxlbjsKIApAQCAtMjE1LDcgKzIxNCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlkbyB7CiAJCWluZm8tPmhkZXYtPnN0YXQuYnl0ZV9yeCsrOwpAQCAtMzAyLDcgKzMwMSw3IEBACiAJCS8qIG91ciBpcnEgaGFuZGxlciBpcyBzaGFyZWQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaW9iYXNlID0gaW5mby0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJc3Bpbl9sb2NrKCYoaW5mby0+bG9jaykpOwogCkBAIC00NjIsNyArNDYxLDcgQEAKIHN0YXRpYyBpbnQgZHRsMV9vcGVuKGR0bDFfaW5mb190ICppbmZvKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGluZm8tPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CiAKIAlzcGluX2xvY2tfaW5pdCgmKGluZm8tPmxvY2spKTsKQEAgLTUwOSw3ICs1MDgsOCBAQAogCW91dGIoVUFSVF9MQ1JfV0xFTjgsIGlvYmFzZSArIFVBUlRfTENSKTsJLyogUmVzZXQgRExBQiAqLwogCW91dGIoKFVBUlRfTUNSX0RUUiB8IFVBUlRfTUNSX1JUUyB8IFVBUlRfTUNSX09VVDIpLCBpb2Jhc2UgKyBVQVJUX01DUik7CiAKLQlpbmZvLT5yaV9sYXRjaCA9IGluYihpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxICsgVUFSVF9NU1IpICYgVUFSVF9NU1JfUkk7CisJaW5mby0+cmlfbGF0Y2ggPSBpbmIoaW5mby0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCArIFVBUlRfTVNSKQorCQkJCSYgVUFSVF9NU1JfUkk7CiAKIAkvKiBUdXJuIG9uIGludGVycnVwdHMgKi8KIAlvdXRiKFVBUlRfSUVSX1JMU0kgfCBVQVJUX0lFUl9SREkgfCBVQVJUX0lFUl9USFJJLCBpb2Jhc2UgKyBVQVJUX0lFUik7CkBAIC01MzQsNyArNTM0LDcgQEAKIHN0YXRpYyBpbnQgZHRsMV9jbG9zZShkdGwxX2luZm9fdCAqaW5mbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBpbmZvLT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gaW5mby0+aGRldjsKIAogCWlmICghaGRldikKQEAgLTU3Miw4ICs1NzIsOCBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC01OTcsMTQgKzU5NywxMyBAQAogCQkJICB1bnNpZ25lZCBpbnQgdmNjLAogCQkJICB2b2lkICpwcml2X2RhdGEpCiB7Ci0JaWYgKChjZi0+aW8ubndpbiA9PSAxKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPiA4KSkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2YtPmlvLndpblswXS5sZW47CS8qeW8gKi8KLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAtRU5PREVWOworCWlmICgoY2YtPmlvLm53aW4gIT0gMSkgfHwgKGNmLT5pby53aW5bMF0ubGVuIDw9IDgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZi0+aW8ud2luWzBdLmxlbjsJLyp5byAqLworCXBfZGV2LT5pb19saW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgZHRsMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC02MTMsNyArNjEyLDcgQEAKIAlpbnQgaTsKIAogCS8qIExvb2sgZm9yIGEgZ2VuZXJpYyBmdWxsLXNpemVkIHdpbmRvdyAqLwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkdGwxX2NvbmZjaGVjaywgTlVMTCkgPCAwKQogCQlnb3RvIGZhaWxlZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGUzNzQ5ZDAuLmFmMTNjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTI0Miw2ICsyNDIsOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjZGVmaW5lIFJFVklTSU9OICJSZXZpc2lvbjogMy4yMCIKICNkZWZpbmUgVkVSU0lPTiAiSWQ6IGNkcm9tLmMgMy4yMCAyMDAzLzEyLzE3IgogCkBAIC0zMTQsMTEgKzMxNiwxNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKm1yd19hZGRyZXNzX3NwYWNlW10gPSB7ICJETUEiLCAiR0FBIiB9OwogCiAjaWYgKEVSUkxPR01BU0shPUNEX05PVEhJTkcpCi0jZGVmaW5lIGNkaW5mbyh0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKLSAgICAgICAgaWYgKChFUlJMT0dNQVNLICYgdHlwZSkgfHwgZGVidWc9PTEgKSBcCi0gICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJjZHJvbTogIiBmbXQsICMjIGFyZ3MpCisjZGVmaW5lIGNkaW5mbyh0eXBlLCBmbXQsIGFyZ3MuLi4pCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKChFUlJMT0dNQVNLICYgdHlwZSkgfHwgZGVidWcgPT0gMSkJCVwKKwkJcHJfaW5mbyhmbXQsICMjYXJncyk7CQkJXAorfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIGNkaW5mbyh0eXBlLCBmbXQsIGFyZ3MuLi4pIAorI2RlZmluZSBjZGluZm8odHlwZSwgZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmICgwICYmIChFUlJMT0dNQVNLICYgdHlwZSkgfHwgZGVidWcgPT0gMSkJXAorCQlwcl9pbmZvKGZtdCwgIyNhcmdzKTsJCQlcCit9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIFRoZXNlIGFyZSB1c2VkIHRvIHNpbXBsaWZ5IGdldHRpbmcgZGF0YSBpbiBmcm9tIGFuZCBiYWNrIHRvIHVzZXIgbGFuZCAqLwpAQCAtMzk1LDcgKzQwMyw3IEBACiAJaWYgKGNkby0+b3BlbiA9PSBOVUxMIHx8IGNkby0+cmVsZWFzZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIWJhbm5lcl9wcmludGVkKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlVuaWZvcm0gQ0QtUk9NIGRyaXZlciAiIFJFVklTSU9OICJcbiIpOworCQlwcl9pbmZvKCJVbmlmb3JtIENELVJPTSBkcml2ZXIgIiBSRVZJU0lPTiAiXG4iKTsKIAkJYmFubmVyX3ByaW50ZWQgPSAxOwogCQljZHJvbV9zeXNjdGxfcmVnaXN0ZXIoKTsKIAl9CkBAIC01NDYsNyArNTU0LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMl07CiAJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gImNkcm9tOiAlc3N0YXJ0aW5nIGZvcm1hdFxuIiwgY29udCA/ICJSZSIgOiAiIik7CisJcHJfaW5mbygiJXNzdGFydGluZyBmb3JtYXRcbiIsIGNvbnQgPyAiUmUiIDogIiIpOwogCiAJLyoKIAkgKiBGbXREYXRhIGJpdCBzZXQgKGJpdCA0KSwgZm9ybWF0IHR5cGUgaXMgMQpAQCAtNTc2LDcgKzU4NCw3IEBACiAKIAlyZXQgPSBjZGktPm9wcy0+Z2VuZXJpY19wYWNrZXQoY2RpLCAmY2djKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPICJjZHJvbTogYmdmb3JtYXQgZmFpbGVkXG4iKTsKKwkJcHJfaW5mbygiYmdmb3JtYXQgZmFpbGVkXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MjIsOCArNjMwLDcgQEAKIAogCXJldCA9IDA7CiAJaWYgKGRpLm1yd19zdGF0dXMgPT0gQ0RNX01SV19CR0ZPUk1BVF9BQ1RJVkUpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY2Ryb206IGlzc3VpbmcgTVJXIGJhY2sgZ3JvdW5kICIKLQkJCQkiZm9ybWF0IHN1c3BlbmRcbiIpOworCQlwcl9pbmZvKCJpc3N1aW5nIE1SVyBiYWNrZ3JvdW5kIGZvcm1hdCBzdXNwZW5kXG4iKTsKIAkJcmV0ID0gY2Ryb21fbXJ3X2JnZm9ybWF0X3N1c3AoY2RpLCAwKTsKIAl9CiAKQEAgLTY1OCw3ICs2NjUsOCBAQAogCWlmICgocmV0ID0gY2Ryb21fbW9kZV9zZWxlY3QoY2RpLCAmY2djKSkpCiAJCXJldHVybiByZXQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjZHJvbTogJXM6IG1ydyBhZGRyZXNzIHNwYWNlICVzIHNlbGVjdGVkXG4iLCBjZGktPm5hbWUsIG1yd19hZGRyZXNzX3NwYWNlW3NwYWNlXSk7CisJcHJfaW5mbygiJXM6IG1ydyBhZGRyZXNzIHNwYWNlICVzIHNlbGVjdGVkXG4iLAorCQljZGktPm5hbWUsIG1yd19hZGRyZXNzX3NwYWNlW3NwYWNlXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2Miw3ICs3NzAsNyBAQAogCSAqIGFsd2F5cyByZXNldCB0byBETUEgbGJhIHNwYWNlIG9uIG9wZW4KIAkgKi8KIAlpZiAoY2Ryb21fbXJ3X3NldF9sYmFfc3BhY2UoY2RpLCBNUldfTEJBX0RNQSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjZHJvbTogZmFpbGVkIHNldHRpbmcgbGJhIGFkZHJlc3Mgc3BhY2VcbiIpOworCQlwcl9lcnIoImZhaWxlZCBzZXR0aW5nIGxiYSBhZGRyZXNzIHNwYWNlXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC03ODEsOCArNzg5LDcgQEAKIAkgKiAzCS0JTVJXIGZvcm1hdHRpbmcgY29tcGxldGUKIAkgKi8KIAlyZXQgPSAwOwotCXByaW50ayhLRVJOX0lORk8gImNkcm9tIG9wZW46IG1yd19zdGF0dXMgJyVzJ1xuIiwKLQkJCW1yd19mb3JtYXRfc3RhdHVzW2RpLm1yd19zdGF0dXNdKTsKKwlwcl9pbmZvKCJvcGVuOiBtcndfc3RhdHVzICclcydcbiIsIG1yd19mb3JtYXRfc3RhdHVzW2RpLm1yd19zdGF0dXNdKTsKIAlpZiAoIWRpLm1yd19zdGF0dXMpCiAJCXJldCA9IDE7CiAJZWxzZSBpZiAoZGkubXJ3X3N0YXR1cyA9PSBDRE1fTVJXX0JHRk9STUFUX0lOQUNUSVZFICYmCkBAIC05MzIsOCArOTM5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImNkcm9tOiAlczogZGlydHkgRFZEK1JXIG1lZGlhLCBcImZpbmFsaXppbmdcIlxuIiwKLQkgICAgICAgY2RpLT5uYW1lKTsKKwlwcl9pbmZvKCIlczogZGlydHkgRFZEK1JXIG1lZGlhLCBcImZpbmFsaXppbmdcIlxuIiwgY2RpLT5uYW1lKTsKIAogCWluaXRfY2Ryb21fY29tbWFuZCgmY2djLCBOVUxMLCAwLCBDR0NfREFUQV9OT05FKTsKIAljZ2MuY21kWzBdID0gR1BDTURfRkxVU0hfQ0FDSEU7CkBAIC0yMTc2LDcgKzIxODIsNyBAQAogCSAqIGZyYW1lIGRtYSwgc28gZHJvcCB0byBzaW5nbGUgZnJhbWUgZG1hIGlmIHdlIG5lZWQgdG8KIAkgKi8KIAlpZiAoY2RpLT5jZGRhX21ldGhvZCA9PSBDRERBX0JQQ19GVUxMICYmIG5mcmFtZXMgPiAxKSB7Ci0JCXByaW50aygiY2Ryb206IGRyb3BwaW5nIHRvIHNpbmdsZSBmcmFtZSBkbWFcbiIpOworCQlwcl9pbmZvKCJkcm9wcGluZyB0byBzaW5nbGUgZnJhbWUgZG1hXG4iKTsKIAkJY2RpLT5jZGRhX21ldGhvZCA9IENEREFfQlBDX1NJTkdMRTsKIAkJZ290byByZXRyeTsKIAl9CkBAIC0yMTg5LDcgKzIxOTUsNyBAQAogCWlmIChjZGktPmxhc3Rfc2Vuc2UgIT0gMHgwNCAmJiBjZGktPmxhc3Rfc2Vuc2UgIT0gMHgwYikKIAkJcmV0dXJuIHJldDsKIAotCXByaW50aygiY2Ryb206IGRyb3BwaW5nIHRvIG9sZCBzdHlsZSBjZGRhIChzZW5zZT0leClcbiIsIGNkaS0+bGFzdF9zZW5zZSk7CisJcHJfaW5mbygiZHJvcHBpbmcgdG8gb2xkIHN0eWxlIGNkZGEgKHNlbnNlPSV4KVxuIiwgY2RpLT5sYXN0X3NlbnNlKTsKIAljZGktPmNkZGFfbWV0aG9kID0gQ0REQV9PTEQ7CiAJcmV0dXJuIGNkcm9tX3JlYWRfY2RkYV9vbGQoY2RpLCB1YnVmLCBsYmEsIG5mcmFtZXMpOwkKIH0KQEAgLTM0MDEsNyArMzQwNyw3IEBACiAJCQkJCSJcdCVkIiwgQ0RST01fQ0FOKHZhbCkgIT0gMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0lORk8gImNkcm9tOiBpbnZhbGlkIG9wdGlvbiVkXG4iLCBvcHRpb24pOworCQkJcHJfaW5mbygiaW52YWxpZCBvcHRpb24lZFxuIiwgb3B0aW9uKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmICghcmV0KQpAQCAtMzQ5MSw3ICszNDk3LDcgQEAKIAltdXRleF91bmxvY2soJmNkcm9tX211dGV4KTsKIAlyZXR1cm4gcHJvY19kb3N0cmluZyhjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogZG9uZToKLQlwcmludGsoS0VSTl9JTkZPICJjZHJvbTogaW5mbyBidWZmZXIgdG9vIHNtYWxsXG4iKTsKKwlwcl9pbmZvKCJpbmZvIGJ1ZmZlciB0b28gc21hbGxcbiIpOwogCWdvdG8gZG9pdDsKIH0KIApAQCAtMzY2NSw3ICszNjcxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGNkcm9tX2V4aXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJVbmlmb3JtIENELVJPTSBkcml2ZXIgdW5sb2FkZWRcbiIpOworCXByX2luZm8oIlVuaWZvcm0gQ0QtUk9NIGRyaXZlciB1bmxvYWRlZFxuIik7CiAJY2Ryb21fc3lzY3RsX3VucmVnaXN0ZXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCmluZGV4IDAzYzcxZjcuLjI2MTEwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKQEAgLTE5LDYgKzE5LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0zMiw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0zMzksOCArMzQyLDcgQEAKIAkJdG9jdXNlID0gMDsKIAkJZXJyID0gZ2Ryb21fcmVhZHRvY19jbWQoZ2QudG9jLCAwKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiR0RST006IENvdWxkIG5vdCBnZXQgQ0QgIgotCQkJCSJ0YWJsZSBvZiBjb250ZW50c1xuIik7CisJCQlwcl9pbmZvKCJDb3VsZCBub3QgZ2V0IENEIHRhYmxlIG9mIGNvbnRlbnRzXG4iKTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KIAl9CkBAIC0zNTcsOCArMzU5LDcgQEAKIAl9IHdoaWxlICh0cmFjayA+PSBmZW50cnkpOwogCiAJaWYgKCh0cmFjayA+IDEwMCkgfHwgKHRyYWNrIDwgZ2V0X2VudHJ5X3RyYWNrKGdkLnRvYy0+Zmlyc3QpKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJHRFJPTTogTm8gZGF0YSBvbiB0aGUgbGFzdCAiCi0JCQkic2Vzc2lvbiBvZiB0aGUgQ0RcbiIpOworCQlwcl9pbmZvKCJObyBkYXRhIG9uIHRoZSBsYXN0IHNlc3Npb24gb2YgdGhlIENEXG4iKTsKIAkJZ2Ryb21fZ2V0c2Vuc2UoTlVMTCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpAQCAtNDUxLDE0ICs0NTIsMTQgQEAKIAkJZ290byBjbGVhbnVwX3NlbnNlOwogCWluc3coR0RST01fREFUQV9SRUcsICZzZW5zZSwgc2Vuc2VfY29tbWFuZC0+YnVmbGVuLzIpOwogCWlmIChzZW5zZVsxXSAmIDQwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkdEUk9NOiBEcml2ZSBub3QgcmVhZHkgLSBjb21tYW5kIGFib3J0ZWRcbiIpOworCQlwcl9pbmZvKCJEcml2ZSBub3QgcmVhZHkgLSBjb21tYW5kIGFib3J0ZWRcbiIpOwogCQlnb3RvIGNsZWFudXBfc2Vuc2U7CiAJfQogCXNlbnNlX2tleSA9IHNlbnNlWzFdICYgMHgwRjsKIAlpZiAoc2Vuc2Vfa2V5IDwgQVJSQVlfU0laRShzZW5zZV90ZXh0cykpCi0JCXByaW50ayhLRVJOX0lORk8gIkdEUk9NOiAlc1xuIiwgc2Vuc2VfdGV4dHNbc2Vuc2Vfa2V5XS50ZXh0KTsKKwkJcHJfaW5mbygiJXNcbiIsIHNlbnNlX3RleHRzW3NlbnNlX2tleV0udGV4dCk7CiAJZWxzZQotCQlwcmludGsoS0VSTl9FUlIgIkdEUk9NOiBVbmtub3duIHNlbnNlIGtleTogJWRcbiIsIHNlbnNlX2tleSk7CisJCXByX2VycigiVW5rbm93biBzZW5zZSBrZXk6ICVkXG4iLCBzZW5zZV9rZXkpOwogCWlmIChidWZzdHJpbmcpIC8qIHJldHVybiBhZGRpb25hbCBzZW5zZSBkYXRhICovCiAJCW1lbWNweShidWZzdHJpbmcsICZzZW5zZVs0XSwgMik7CiAJaWYgKHNlbnNlX2tleSA8IDIpCkBAIC00OTIsMTIgKzQ5MywxOCBAQAogCiBzdGF0aWMgaW50IGdkcm9tX2Jkb3BzX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXJldHVybiBjZHJvbV9vcGVuKGdkLmNkX2luZm8sIGJkZXYsIG1vZGUpOworCWludCByZXQ7CisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBjZHJvbV9vcGVuKGdkLmNkX2luZm8sIGJkZXYsIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGdkcm9tX2Jkb3BzX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKKwlsb2NrX2tlcm5lbCgpOwogCWNkcm9tX3JlbGVhc2UoZ2QuY2RfaW5mbywgbW9kZSk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC01MDksNyArNTE2LDEzIEBACiBzdGF0aWMgaW50IGdkcm9tX2Jkb3BzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKIAl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiBjZHJvbV9pb2N0bChnZC5jZF9pbmZvLCBiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gY2Ryb21faW9jdGwoZ2QuY2RfaW5mbywgYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZ2Ryb21fYmRvcHMgPSB7CkBAIC01MTcsNyArNTMwLDcgQEAKIAkub3BlbgkJCT0gZ2Ryb21fYmRvcHNfb3BlbiwKIAkucmVsZWFzZQkJPSBnZHJvbV9iZG9wc19yZWxlYXNlLAogCS5tZWRpYV9jaGFuZ2VkCQk9IGdkcm9tX2Jkb3BzX21lZGlhY2hhbmdlZCwKLQkubG9ja2VkX2lvY3RsCQk9IGdkcm9tX2Jkb3BzX2lvY3RsLAorCS5pb2N0bAkJCT0gZ2Ryb21fYmRvcHNfaW9jdGwsCiB9OwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ2Ryb21fY29tbWFuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtNjQzLDE0ICs2NTYsMTMgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcmVxOwogCiAJd2hpbGUgKChyZXEgPSBibGtfZmV0Y2hfcmVxdWVzdChycSkpICE9IE5VTEwpIHsKLQkJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiR0RST006IE5vbi1mcyByZXF1ZXN0IGlnbm9yZWRcbiIpOworCQlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImdkcm9tOiBOb24tZnMgcmVxdWVzdCBpZ25vcmVkXG4iKTsKIAkJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChyZXEsIC1FSU8pOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgIT0gUkVBRCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJHRFJPTTogUmVhZCBvbmx5IGRldmljZSAtIik7Ci0JCQlwcmludGsoIiB3cml0ZSByZXF1ZXN0IGlnbm9yZWRcbiIpOworCQkJcHJfbm90aWNlKCJSZWFkIG9ubHkgZGV2aWNlIC0gd3JpdGUgcmVxdWVzdCBpZ25vcmVkXG4iKTsKIAkJCV9fYmxrX2VuZF9yZXF1ZXN0X2FsbChyZXEsIC1FSU8pOwogCQkJY29udGludWU7CiAJCX0KQEAgLTY4NSw3ICs2OTcsNyBAQAogCWZpcm13X3ZlciA9IGtzdHJuZHVwKGlkLT5maXJtdmVyLCAxNiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd192ZXIpCiAJCWdvdG8gZnJlZV9tYW51Zl9uYW1lOwotCXByaW50ayhLRVJOX0lORk8gIkdEUk9NOiAlcyBmcm9tICVzIHdpdGggZmlybXdhcmUgJXNcbiIsCisJcHJfaW5mbygiJXMgZnJvbSAlcyB3aXRoIGZpcm13YXJlICVzXG4iLAogCQltb2RlbF9uYW1lLCBtYW51Zl9uYW1lLCBmaXJtd192ZXIpOwogCWVyciA9IDA7CiAJa2ZyZWUoZmlybXdfdmVyKTsKQEAgLTc1Nyw3ICs3NjksNyBAQAogCWludCBlcnI7CiAJLyogU3RhcnQgdGhlIGRldmljZSAqLwogCWlmIChnZHJvbV9leGVjdXRlX2RpYWdub3N0aWMoKSAhPSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkdEUk9NOiBBVEEgUHJvYmUgZm9yIEdEUk9NIGZhaWxlZC5cbiIpOworCQlwcl93YXJuaW5nKCJBVEEgUHJvYmUgZm9yIEdEUk9NIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAkvKiBQcmludCBvdXQgZmlybXdhcmUgSUQgKi8KQEAgLTc2Nyw3ICs3NzksNyBAQAogCWdkcm9tX21ham9yID0gcmVnaXN0ZXJfYmxrZGV2KDAsIEdEUk9NX0RFVl9OQU1FKTsKIAlpZiAoZ2Ryb21fbWFqb3IgPD0gMCkKIAkJcmV0dXJuIGdkcm9tX21ham9yOwotCXByaW50ayhLRVJOX0lORk8gIkdEUk9NOiBSZWdpc3RlcmVkIHdpdGggbWFqb3IgbnVtYmVyICVkXG4iLAorCXByX2luZm8oIlJlZ2lzdGVyZWQgd2l0aCBtYWpvciBudW1iZXIgJWRcbiIsCiAJCWdkcm9tX21ham9yKTsKIAkvKiBTcGVjaWZ5IGJhc2ljIHByb3BlcnRpZXMgb2YgZHJpdmUgKi8KIAlnZC5jZF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNkcm9tX2RldmljZV9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC04MTgsNyArODMwLDcgQEAKIAl1bnJlZ2lzdGVyX2Jsa2RldihnZHJvbV9tYWpvciwgR0RST01fREVWX05BTUUpOwogCWdkcm9tX21ham9yID0gMDsKIHByb2JlX2ZhaWxfbm9fbWVtOgotCXByaW50ayhLRVJOX1dBUk5JTkcgIkdEUk9NOiBQcm9iZSBmYWlsZWQgLSBlcnJvciBpcyAweCVYXG4iLCBlcnIpOworCXByX3dhcm5pbmcoIlByb2JlIGZhaWxlZCAtIGVycm9yIGlzIDB4JVhcbiIsIGVycik7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS92aW9jZC5jIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCmluZGV4IDQ1MWNkNzAuLjU2YmY5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYworKysgYi9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKQEAgLTMxLDYgKzMxLDggQEAKICAqIHRoZSBPUy80MDAgcGFydGl0aW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KQEAgLTQwLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCkBAIC01Myw5ICs1Niw2IEBACiAKICNkZWZpbmUgVklPQ0RfVkVSUyAiMS4wNiIKIAotI2RlZmluZSBWSU9DRF9LRVJOX1dBUk5JTkcJCUtFUk5fV0FSTklORyAidmlvY2Q6ICIKLSNkZWZpbmUgVklPQ0RfS0VSTl9JTkZPCQkJS0VSTl9JTkZPICJ2aW9jZDogIgotCiAvKgogICogU2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBwYXJhbWV0ZXIuLi4uc2lnaAogICovCkBAIC0xNTQsMTMgKzE1NCwyMSBAQAogc3RhdGljIGludCB2aW9jZF9ibGtfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IGRpc2tfaW5mbyAqZGkgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIGNkcm9tX29wZW4oJmRpLT52aW9jZF9pbmZvLCBiZGV2LCBtb2RlKTsKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBjZHJvbV9vcGVuKCZkaS0+dmlvY2RfaW5mbywgYmRldiwgbW9kZSk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2aW9jZF9ibGtfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBkaXNrX2luZm8gKmRpID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCWxvY2tfa2VybmVsKCk7CiAJY2Ryb21fcmVsZWFzZSgmZGktPnZpb2NkX2luZm8sIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY4LDcgKzE3NiwxMyBAQAogCQl1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBkaXNrX2luZm8gKmRpID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiBjZHJvbV9pb2N0bCgmZGktPnZpb2NkX2luZm8sIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBjZHJvbV9pb2N0bCgmZGktPnZpb2NkX2luZm8sIGJkZXYsIG1vZGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHZpb2NkX2Jsa19tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQpAQCAtMTgxLDcgKzE5NSw3IEBACiAJLm93bmVyID0JCVRISVNfTU9EVUxFLAogCS5vcGVuID0JCQl2aW9jZF9ibGtfb3BlbiwKIAkucmVsZWFzZSA9CQl2aW9jZF9ibGtfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsID0JCXZpb2NkX2Jsa19pb2N0bCwKKwkuaW9jdGwgPQkJdmlvY2RfYmxrX2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkID0JdmlvY2RfYmxrX21lZGlhX2NoYW5nZWQsCiB9OwogCkBAIC0yMDIsOSArMjE2LDggQEAKIAkJCSh1NjQpJndlLCBWSU9WRVJTSU9OIDw8IDE2LCAoKHU2NClkZXZpY2Vfbm8gPDwgNDgpLAogCQkJMCwgMCwgMCk7CiAJaWYgKGh2cmMgIT0gMCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJImJhZCByYyBvbiBIdkNhbGxFdmVudF9zaWduYWxMcEV2ZW50RmFzdCAlZFxuIiwKLQkJCQkoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb24gSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QgJWRcbiIsCisJCQkgICAoaW50KWh2cmMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTIxMyw4ICsyMjYsOCBAQAogCWlmICh3ZS5yYykgewogCQljb25zdCBzdHJ1Y3QgdmlvX2Vycm9yX2VudHJ5ICplcnIgPQogCQkJdmlvX2xvb2t1cF9yYyh2aW9jZF9lcnJfdGFibGUsIHdlLnN1Yl9yZXN1bHQpOwotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJiYWQgcmMgJWQ6MHglMDRYIG9uIG9wZW46ICVzXG4iLAotCQkJCXdlLnJjLCB3ZS5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CisJCXByX3dhcm5pbmcoImJhZCByYyAlZDoweCUwNFggb24gb3BlbjogJXNcbiIsCisJCQkgICB3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQlyZXR1cm4gLWVyci0+ZXJybm87CiAJfQogCkBAIC0yMzQsOSArMjQ3LDggQEAKIAkJCXZpb3BhdGhfdGFyZ2V0aW5zdCh2aW9wYXRoX2hvc3RMcCksIDAsCiAJCQlWSU9WRVJTSU9OIDw8IDE2LCAoKHU2NClkZXZpY2Vfbm8gPDwgNDgpLCAwLCAwLCAwKTsKIAlpZiAoaHZyYyAhPSAwKQotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJImJhZCByYyBvbiBIdkNhbGxFdmVudF9zaWduYWxMcEV2ZW50RmFzdCAlZFxuIiwKLQkJCQkoaW50KWh2cmMpOworCQlwcl93YXJuaW5nKCJiYWQgcmMgb24gSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QgJWRcbiIsCisJCQkgICAoaW50KWh2cmMpOwogfQogCiAvKiBTZW5kIGEgcmVhZCBvciB3cml0ZSByZXF1ZXN0IHRvIE9TLzQwMCAqLwpAQCAtMjYyLDEzICsyNzQsMTIgQEAKIAogCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKICAgICAgICAgaWYgKGJsa19ycV9tYXBfc2cocmVxLT5xLCByZXEsICZzZykgPT0gMCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJImVycm9yIHNldHRpbmcgdXAgc2NhdHRlci9nYXRoZXIgbGlzdFxuIik7CisJCXByX3dhcm5pbmcoImVycm9yIHNldHRpbmcgdXAgc2NhdHRlci9nYXRoZXIgbGlzdFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoZG1hX21hcF9zZyhkaXNraW5mby0+ZGV2LCAmc2csIDEsIGRpcmVjdGlvbikgPT0gMCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJlcnJvciBhbGxvY2F0aW5nIHNnIHRjZVxuIik7CisJCXByX3dhcm5pbmcoImVycm9yIGFsbG9jYXRpbmcgc2cgdGNlXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAlkbWFhZGRyID0gc2dfZG1hX2FkZHJlc3MoJnNnKTsKQEAgLTI4NCw3ICsyOTUsNyBAQAogCQkJKCh1NjQpREVWSUNFX05SKGRpc2tpbmZvKSA8PCA0OCkgfCBkbWFhZGRyLAogCQkJKHU2NClibGtfcnFfcG9zKHJlcSkgKiA1MTIsIGxlbiwgMCk7CiAJaWYgKGh2cmMgIT0gSHZMcEV2ZW50X1JjX0dvb2QpIHsKLQkJcHJpbnRrKFZJT0NEX0tFUk5fV0FSTklORyAiaHYgZXJyb3Igb24gb3AgJWRcbiIsIChpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImh2IGVycm9yIG9uIG9wICVkXG4iLCAoaW50KWh2cmMpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yOTgsMTEgKzMwOSwxMCBAQAogCXN0cnVjdCByZXF1ZXN0ICpyZXE7CiAKIAl3aGlsZSAoKHJ3cmVxID09IDApICYmICgocmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocSkpICE9IE5VTEwpKSB7Ci0JCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKKwkJaWYgKHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRUlPKTsKIAkJZWxzZSBpZiAoc2VuZF9yZXF1ZXN0KHJlcSkgPCAwKSB7Ci0JCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJCSJ1bmFibGUgdG8gc2VuZCBtZXNzYWdlIHRvIE9TLzQwMCEiKTsKKwkJCXByX3dhcm5pbmcoInVuYWJsZSB0byBzZW5kIG1lc3NhZ2UgdG8gT1MvNDAwIVxuIik7CiAJCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRUlPKTsKIAkJfSBlbHNlCiAJCQlyd3JlcSsrOwpAQCAtMzI3LDggKzMzNyw4IEBACiAJCQkodTY0KSZ3ZSwgVklPVkVSU0lPTiA8PCAxNiwgKCh1NjQpZGV2aWNlX25vIDw8IDQ4KSwKIAkJCTAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0NEX0tFUk5fV0FSTklORyAiYmFkIHJjIG9uIEh2Q2FsbEV2ZW50X3NpZ25hbExwRXZlbnRGYXN0ICVkXG4iLAotCQkJCShpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBvbiBIdkNhbGxFdmVudF9zaWduYWxMcEV2ZW50RmFzdCAlZFxuIiwKKwkJCSAgIChpbnQpaHZyYyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzM4LDkgKzM0OCw4IEBACiAJaWYgKHdlLnJjKSB7CiAJCWNvbnN0IHN0cnVjdCB2aW9fZXJyb3JfZW50cnkgKmVyciA9CiAJCQl2aW9fbG9va3VwX3JjKHZpb2NkX2Vycl90YWJsZSwgd2Uuc3ViX3Jlc3VsdCk7Ci0JCXByaW50ayhWSU9DRF9LRVJOX1dBUk5JTkcKLQkJCQkiYmFkIHJjICVkOjB4JTA0WCBvbiBjaGVja19jaGFuZ2U6ICVzOyBBc3N1bWluZyBubyBjaGFuZ2VcbiIsCi0JCQkJd2UucmMsIHdlLnN1Yl9yZXN1bHQsIGVyci0+bXNnKTsKKwkJcHJfd2FybmluZygiYmFkIHJjICVkOjB4JTA0WCBvbiBjaGVja19jaGFuZ2U6ICVzOyBBc3N1bWluZyBubyBjaGFuZ2VcbiIsCisJCQkgICB3ZS5yYywgd2Uuc3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM2Nyw4ICszNzYsOCBAQAogCQkJKHU2NCkmd2UsIFZJT1ZFUlNJT04gPDwgMTYsCiAJCQkoZGV2aWNlX25vIDw8IDQ4KSB8IChmbGFncyA8PCAzMiksIDAsIDAsIDApOwogCWlmIChodnJjICE9IDApIHsKLQkJcHJpbnRrKFZJT0NEX0tFUk5fV0FSTklORyAiYmFkIHJjIG9uIEh2Q2FsbEV2ZW50X3NpZ25hbExwRXZlbnRGYXN0ICVkXG4iLAotCQkJCShpbnQpaHZyYyk7CisJCXByX3dhcm5pbmcoImJhZCByYyBvbiBIdkNhbGxFdmVudF9zaWduYWxMcEV2ZW50RmFzdCAlZFxuIiwKKwkJCSAgIChpbnQpaHZyYyk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNDU1LDggKzQ2NCw3IEBACiAJCXJldHVybjsKIAkvKiBGaXJzdCwgd2Ugc2hvdWxkIE5FVkVSIGdldCBhbiBpbnQgaGVyZS4uLm9ubHkgYWNrcyAqLwogCWlmIChodmxwZXZlbnRfaXNfaW50KGV2ZW50KSkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJIllpa2VzISBnb3QgYW4gaW50IGluIHZpb2NkIGV2ZW50IGhhbmRsZXIhXG4iKTsKKwkJcHJfd2FybmluZygiWWlrZXMhIGdvdCBhbiBpbnQgaW4gdmlvY2QgZXZlbnQgaGFuZGxlciFcbiIpOwogCQlpZiAoaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgewogCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKIAkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOwpAQCAtNTEwLDEwICs1MTgsOSBAQAogCQkJY29uc3Qgc3RydWN0IHZpb19lcnJvcl9lbnRyeSAqZXJyID0KIAkJCQl2aW9fbG9va3VwX3JjKHZpb2NkX2Vycl90YWJsZSwKIAkJCQkJCWJldmVudC0+c3ViX3Jlc3VsdCk7Ci0JCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJyZXF1ZXN0ICVwIGZhaWxlZCAiCi0JCQkJCSJ3aXRoIHJjICVkOjB4JTA0WDogJXNcbiIsCi0JCQkJCXJlcSwgZXZlbnQtPnhSYywKLQkJCQkJYmV2ZW50LT5zdWJfcmVzdWx0LCBlcnItPm1zZyk7CisJCQlwcl93YXJuaW5nKCJyZXF1ZXN0ICVwIGZhaWxlZCB3aXRoIHJjICVkOjB4JTA0WDogJXNcbiIsCisJCQkJICAgcmVxLCBldmVudC0+eFJjLAorCQkJCSAgIGJldmVudC0+c3ViX3Jlc3VsdCwgZXJyLT5tc2cpOwogCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgLUVJTyk7CiAJCX0gZWxzZQogCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgMCk7CkBAIC01MjQsOSArNTMxLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HCi0JCQkJIm1lc3NhZ2Ugd2l0aCBpbnZhbGlkIHN1YnR5cGUgJTB4MDRYIVxuIiwKLQkJCQlldmVudC0+eFN1YnR5cGUgJiBWSU9NSU5PUl9TVUJUWVBFX01BU0spOworCQlwcl93YXJuaW5nKCJtZXNzYWdlIHdpdGggaW52YWxpZCBzdWJ0eXBlICUweDA0WCFcbiIsCisJCQkgICBldmVudC0+eFN1YnR5cGUgJiBWSU9NSU5PUl9TVUJUWVBFX01BU0spOwogCQlpZiAoaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgewogCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKIAkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOwpAQCAtNTkzLDIzICs1OTksMTkgQEAKIAlzcHJpbnRmKGMtPm5hbWUsIFZJT0NEX0RFVklDRSAiJWMiLCAnYScgKyBkZXZpY2Vubyk7CiAKIAlpZiAocmVnaXN0ZXJfY2Ryb20oYykgIT0gMCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJDYW5ub3QgcmVnaXN0ZXIgdmlvY2QgQ0QtUk9NICVzIVxuIiwKLQkJCQljLT5uYW1lKTsKKwkJcHJfd2FybmluZygiQ2Fubm90IHJlZ2lzdGVyIHZpb2NkIENELVJPTSAlcyFcbiIsIGMtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9Ci0JcHJpbnRrKFZJT0NEX0tFUk5fSU5GTyAiY2QgJXMgaXMgaVNlcmllcyByZXNvdXJjZSAlMTAuMTBzICIKLQkJCSJ0eXBlICU0LjRzLCBtb2RlbCAlMy4zc1xuIiwKLQkJCWMtPm5hbWUsIGQtPnJzcmNuYW1lLCBkLT50eXBlLCBkLT5tb2RlbCk7CisJcHJfaW5mbygiY2QgJXMgaXMgaVNlcmllcyByZXNvdXJjZSAlMTAuMTBzIHR5cGUgJTQuNHMsIG1vZGVsICUzLjNzXG4iLAorCQljLT5uYW1lLCBkLT5yc3JjbmFtZSwgZC0+dHlwZSwgZC0+bW9kZWwpOwogCXEgPSBibGtfaW5pdF9xdWV1ZShkb192aW9jZF9yZXF1ZXN0LCAmdmlvY2RfcmVxbG9jayk7CiAJaWYgKHEgPT0gTlVMTCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJDYW5ub3QgYWxsb2NhdGUgcXVldWUgZm9yICVzIVxuIiwKLQkJCQljLT5uYW1lKTsKKwkJcHJfd2FybmluZygiQ2Fubm90IGFsbG9jYXRlIHF1ZXVlIGZvciAlcyFcbiIsIGMtPm5hbWUpOwogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2Nkcm9tOwogCX0KIAlnZW5kaXNrID0gYWxsb2NfZGlzaygxKTsKIAlpZiAoZ2VuZGlzayA9PSBOVUxMKSB7Ci0JCXByaW50ayhWSU9DRF9LRVJOX1dBUk5JTkcgIkNhbm5vdCBjcmVhdGUgZ2VuZGlzayBmb3IgJXMhXG4iLAotCQkJCWMtPm5hbWUpOworCQlwcl93YXJuaW5nKCJDYW5ub3QgY3JlYXRlIGdlbmRpc2sgZm9yICVzIVxuIiwgYy0+bmFtZSk7CiAJCWdvdG8gb3V0X2NsZWFudXBfcXVldWU7CiAJfQogCWdlbmRpc2stPm1ham9yID0gVklPQ0RfTUFKT1I7CkBAIC02ODIsMjEgKzY4NCwxOSBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcHJpbnRrKFZJT0NEX0tFUk5fSU5GTyAidmVycyAiIFZJT0NEX1ZFUlMgIiwgaG9zdGluZyBwYXJ0aXRpb24gJWRcbiIsCi0JCQl2aW9wYXRoX2hvc3RMcCk7CisJcHJfaW5mbygidmVycyAiIFZJT0NEX1ZFUlMgIiwgaG9zdGluZyBwYXJ0aXRpb24gJWRcbiIsIHZpb3BhdGhfaG9zdExwKTsKIAogCWlmIChyZWdpc3Rlcl9ibGtkZXYoVklPQ0RfTUFKT1IsIFZJT0NEX0RFVklDRSkgIT0gMCkgewotCQlwcmludGsoVklPQ0RfS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciAlc1xuIiwKLQkJCQlWSU9DRF9NQUpPUiwgVklPQ0RfREVWSUNFKTsKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIGdldCBtYWpvciAlZCBmb3IgJXNcbiIsCisJCQkgICBWSU9DRF9NQUpPUiwgVklPQ0RfREVWSUNFKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0ID0gdmlvcGF0aF9vcGVuKHZpb3BhdGhfaG9zdExwLCB2aW9tYWpvcnN1YnR5cGVfY2RpbywKIAkJCU1BWF9DRF9SRVEgKyAyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhWSU9DRF9LRVJOX1dBUk5JTkcKLQkJCQkiZXJyb3Igb3BlbmluZyBwYXRoIHRvIGhvc3QgcGFydGl0aW9uICVkXG4iLAotCQkJCXZpb3BhdGhfaG9zdExwKTsKKwkJcHJfd2FybmluZygiZXJyb3Igb3BlbmluZyBwYXRoIHRvIGhvc3QgcGFydGl0aW9uICVkXG4iLAorCQkJICAgdmlvcGF0aF9ob3N0THApOwogCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA3Y2ZjYzYyLi4zZDQ0ZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAKIAogY29uZmlnIFBDODczNnhfR1BJTwogCXRyaXN0YXRlICJOYXRTZW1pIFBDODczNnggR1BJTyBTdXBwb3J0IgotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBYODZfMzIKIAlkZWZhdWx0IFNDeDIwMF9HUElPCSMgbW9zdGx5IE4KIAlzZWxlY3QgTlNDX0dQSU8JCSMgbmVlZGVkIGZvciBzdXBwb3J0IHJvdXRpbmVzCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDg4ZDZlYWMuLmRjOTY0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiAKIG9iai15CSArPSBtZW0ubyByYW5kb20ubyB0dHlfaW8ubyBuX3R0eS5vIHR0eV9pb2N0bC5vIHR0eV9sZGlzYy5vIHR0eV9idWZmZXIubyB0dHlfcG9ydC5vCiAKK29iai15CQkJCSs9IHR0eV9tdXRleC5vCiBvYmotJChDT05GSUdfTEVHQUNZX1BUWVMpCSs9IHB0eS5vCiBvYmotJChDT05GSUdfVU5JWDk4X1BUWVMpCSs9IHB0eS5vCiBvYmoteQkJCQkrPSBtaXNjLm8KQEAgLTQ3LDYgKzQ4LDcgQEAKIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjX3Zpby5vIGh2c2kubwogb2JqLSQoQ09ORklHX0hWQ19JU0VSSUVTKQkrPSBodmNfaXNlcmllcy5vCiBvYmotJChDT05GSUdfSFZDX1JUQVMpCQkrPSBodmNfcnRhcy5vCitvYmotJChDT05GSUdfSFZDX1RJTEUpCQkrPSBodmNfdGlsZS5vCiBvYmotJChDT05GSUdfSFZDX0JFQVQpCQkrPSBodmNfYmVhdC5vCiBvYmotJChDT05GSUdfSFZDX0RSSVZFUikJKz0gaHZjX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX0hWQ19JUlEpCQkrPSBodmNfaXJxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwppbmRleCA0ZjhkNjBjLi5hMTFjOGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKKysrIGIvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCWlmICghcmV0aW5mbykKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKLQlsb2NrX2tlcm5lbCgpOworCXR0eV9sb2NrKCk7CiAJdG1wLnR5cGUgPSBzdGF0ZS0+dHlwZTsKIAl0bXAubGluZSA9IHN0YXRlLT5saW5lOwogCXRtcC5wb3J0ID0gc3RhdGUtPnBvcnQ7CkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCXRtcC5jbG9zZV9kZWxheSA9IHN0YXRlLT5jbG9zZV9kZWxheTsKIAl0bXAuY2xvc2luZ193YWl0ID0gc3RhdGUtPmNsb3Npbmdfd2FpdDsKIAl0bXAuY3VzdG9tX2Rpdmlzb3IgPSBzdGF0ZS0+Y3VzdG9tX2Rpdmlzb3I7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAlpZiAoY29weV90b191c2VyKHJldGluZm8sJnRtcCxzaXplb2YoKnJldGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC0xMTAwLDE0ICsxMTAwLDE0IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLG5ld19pbmZvLHNpemVvZihuZXdfc2VyaWFsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCXN0YXRlID0gaW5mby0+c3RhdGU7CiAJb2xkX3N0YXRlID0gKnN0YXRlOwogICAKIAljaGFuZ2VfaXJxID0gbmV3X3NlcmlhbC5pcnEgIT0gc3RhdGUtPmlycTsKIAljaGFuZ2VfcG9ydCA9IChuZXdfc2VyaWFsLnBvcnQgIT0gc3RhdGUtPnBvcnQpOwogCWlmKGNoYW5nZV9pcnEgfHwgY2hhbmdlX3BvcnQgfHwgKG5ld19zZXJpYWwueG1pdF9maWZvX3NpemUgIT0gc3RhdGUtPnhtaXRfZmlmb19zaXplKSkgewotCSAgdW5sb2NrX2tlcm5lbCgpOworCSAgdHR5X3VubG9jaygpOwogCSAgcmV0dXJuIC1FSU5WQUw7CiAJfQogICAKQEAgLTExMjcsNyArMTEyNyw3IEBACiAJfQogCiAJaWYgKG5ld19zZXJpYWwuYmF1ZF9iYXNlIDwgOTYwMCkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCXR0eV91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTYzLDcgKzExNjMsNyBAQAogCQl9CiAJfSBlbHNlCiAJCXJldHZhbCA9IHN0YXJ0dXAoaW5mbyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNTI4LDYgKzE1MjgsNyBAQAogewogCXN0cnVjdCBhc3luY19zdHJ1Y3QgKiBpbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcywgY2hhcl90aW1lOworCWludCB0dHlfd2FzX2xvY2tlZCA9IHR0eV9sb2NrZWQoKTsKIAlpbnQgbHNyOwogCiAJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJyc193YWl0X3VudGlsX3NlbnQiKSkKQEAgLTE1MzgsNyArMTUzOSwxMiBAQAogCiAJb3JpZ19qaWZmaWVzID0gamlmZmllczsKIAotCWxvY2tfa2VybmVsKCk7CisJLyoKKwkgKiB0dHlfd2FpdF91bnRpbF9zZW50IGlzIGNhbGxlZCBmcm9tIGxvdHMgb2YgcGxhY2VzLAorCSAqIHdpdGggb3Igd2l0aG91dCB0aGUgQlRNLgorCSAqLworCWlmICghdHR5X3dhc19sb2NrZWQpCisJCXR0eV9sb2NrKCk7CiAJLyoKIAkgKiBTZXQgdGhlIGNoZWNrIGludGVydmFsIHRvIGJlIDEvNSBvZiB0aGUgZXN0aW1hdGVkIHRpbWUgdG8KIAkgKiBzZW5kIGEgc2luZ2xlIGNoYXJhY3RlciwgYW5kIG1ha2UgaXQgYXQgbGVhc3QgMS4gIFRoZSBjaGVjawpAQCAtMTU3OSw3ICsxNTg1LDggQEAKIAkJCWJyZWFrOwogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCWlmICghdHR5X3dhc19sb2NrZWQpCisJCXR0eV91bmxvY2soKTsKICNpZmRlZiBTRVJJQUxfREVCVUdfUlNfV0FJVF9VTlRJTF9TRU5UCiAJcHJpbnRrKCJsc3IgPSAlZCAoamlmZj0lbHUpLi4uZG9uZVxuIiwgbHNyLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMTcwMyw3ICsxNzEwLDkgQEAKIAkJcHJpbnRrKCJibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eXMlZCwgY291bnQgPSAlZFxuIiwKIAkJICAgICAgIGluZm8tPmxpbmUsIHN0YXRlLT5jb3VudCk7CiAjZW5kaWYKKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2JyaXFfcGFuZWwuYyBiL2RyaXZlcnMvY2hhci9icmlxX3BhbmVsLmMKaW5kZXggNTU1Y2Q5My4uZDVmYTExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2JyaXFfcGFuZWwuYworKysgYi9kcml2ZXJzL2NoYXIvYnJpcV9wYW5lbC5jCkBAIC02NywxNSArNjcsMTUgQEAKIAogc3RhdGljIGludCBicmlxX3BhbmVsX29wZW4oc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmaWxlcCkKIHsKLQlsb2NrX2tlcm5lbCgpOworCXR0eV9sb2NrKCk7CiAJLyogZW5mb3JjZSBzaW5nbGUgYWNjZXNzLCB2ZmRfaXNfb3BlbiBpcyBwcm90ZWN0ZWQgYnkgQktMICovCiAJaWYgKHZmZF9pc19vcGVuKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X3VubG9jaygpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl2ZmRfaXNfb3BlbiA9IDE7CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IDk4MjRiNDE2Li4yN2FhZDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtNjUsNyArNjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CkBAIC0xNjA4LDcgKzE2MDcsNyBAQAogCSAqIElmIHRoZSBwb3J0IGlzIHRoZSBtaWRkbGUgb2YgY2xvc2luZywgYmFpbCBvdXQgbm93CiAJICovCiAJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSkgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5mby0+cG9ydC5jbG9zZV93YWl0LAorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KGluZm8tPnBvcnQuY2xvc2Vfd2FpdCwKIAkJCQkhKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSk7CiAJCXJldHVybiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpID8gLUVBR0FJTjogLUVSRVNUQVJUU1lTOwogCX0KQEAgLTE2NTUsNyArMTY1NCw2IEBACiAJCXJldHVybjsJCS8qIEp1c3QgaW4gY2FzZS4uLi4gKi8KIAogCW9yaWdfamlmZmllcyA9IGppZmZpZXM7Ci0JbG9ja19rZXJuZWwoKTsKIAkvKgogCSAqIFNldCB0aGUgY2hlY2sgaW50ZXJ2YWwgdG8gYmUgMS81IG9mIHRoZSBlc3RpbWF0ZWQgdGltZSB0bwogCSAqIHNlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBhbmQgbWFrZSBpdCBhdCBsZWFzdCAxLiAgVGhlIGNoZWNrCkBAIC0xNzAyLDcgKzE3MDAsNiBAQAogCX0KIAkvKiBSdW4gb25lIG1vcmUgY2hhciBjeWNsZSAqLwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGppZmZpZXNfdG9fbXNlY3MoY2hhcl90aW1lICogNSkpOwotCXVubG9ja19rZXJuZWwoKTsKICNpZmRlZiBDWV9ERUJVR19XQUlUX1VOVElMX1NFTlQKIAlwcmludGsoS0VSTl9ERUJVRyAiQ2xlYW4gKGppZmY9JWx1KS4uLmRvbmVcbiIsIGppZmZpZXMpOwogI2VuZGlmCkBAIC0xOTU5LDcgKzE5NTYsNiBAQAogCQlpbnQgY2hhcl9jb3VudDsKIAkJX191MzIgdHhfcHV0LCB0eF9nZXQsIHR4X2J1ZnNpemU7CiAKLQkJbG9ja19rZXJuZWwoKTsKIAkJdHhfZ2V0ID0gcmVhZGwoJmJ1Zl9jdHJsLT50eF9nZXQpOwogCQl0eF9wdXQgPSByZWFkbCgmYnVmX2N0cmwtPnR4X3B1dCk7CiAJCXR4X2J1ZnNpemUgPSByZWFkbCgmYnVmX2N0cmwtPnR4X2J1ZnNpemUpOwpAQCAtMTk3MSw3ICsxOTY3LDYgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9jaGFyc19pbl9idWZmZXIgdHR5QyVkICVkXG4iLAogCQkJaW5mby0+bGluZSwgaW5mby0+eG1pdF9jbnQgKyBjaGFyX2NvdW50KTsKICNlbmRpZgotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiBpbmZvLT54bWl0X2NudCArIGNoYXJfY291bnQ7CiAJfQogI2VuZGlmCQkJCS8qIFpfRVhUX0NIQVJTX0lOX0JVRkZFUiAqLwpAQCAtMjM1OSwxNyArMjM1NCwyMiBAQAogCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld19pbmZvKQogewogCXN0cnVjdCBzZXJpYWxfc3RydWN0IG5ld19zZXJpYWw7CisJaW50IHJldDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3X3NlcmlhbCwgbmV3X2luZm8sIHNpemVvZihuZXdfc2VyaWFsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CiAJCWlmIChuZXdfc2VyaWFsLmNsb3NlX2RlbGF5ICE9IGluZm8tPnBvcnQuY2xvc2VfZGVsYXkgfHwKIAkJCQluZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBpbmZvLT5iYXVkIHx8CiAJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19GTEFHUyAmCiAJCQkJCX5BU1lOQ19VU1JfTUFTSykgIT0KIAkJCQkoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0ZMQUdTICYgfkFTWU5DX1VTUl9NQVNLKSkKKwkJeworCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAkJCXJldHVybiAtRVBFUk07CisJCX0KIAkJaW5mby0+cG9ydC5mbGFncyA9IChpbmZvLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CiAJCQkJKG5ld19zZXJpYWwuZmxhZ3MgJiBBU1lOQ19VU1JfTUFTSyk7CiAJCWluZm8tPmJhdWQgPSBuZXdfc2VyaWFsLmJhdWRfYmFzZTsKQEAgLTIzOTIsMTAgKzIzOTIsMTIgQEAKIGNoZWNrX2FuZF9leGl0OgogCWlmIChpbmZvLT5wb3J0LmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpIHsKIAkJY3lfc2V0X2xpbmVfY2hhcihpbmZvLCB0dHkpOwotCQlyZXR1cm4gMDsKKwkJcmV0ID0gMDsKIAl9IGVsc2UgewotCQlyZXR1cm4gY3lfc3RhcnR1cChpbmZvLCB0dHkpOworCQlyZXQgPSBjeV9zdGFydHVwKGluZm8sIHR0eSk7CiAJfQorCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0JCQkJLyogc2V0X3NlcmlhbF9pbmZvICovCiAKIC8qCkBAIC0yNDM4LDcgKzI0NDAsNiBAQAogCiAJY2FyZCA9IGluZm8tPmNhcmQ7CiAKLQlsb2NrX2tlcm5lbCgpOwogCWlmICghY3lfaXNfWihjYXJkKSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgY2hhbm5lbCA9IGluZm8tPmxpbmUgLSBjYXJkLT5maXJzdF9saW5lOwpAQCAtMjQ3OCw3ICsyNDc5LDYgQEAKIAkJCSgobHN0YXR1cyAmIENfUlNfQ1RTKSA/IFRJT0NNX0NUUyA6IDApOwogCX0KIGVuZDoKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0JCQkJLyogY3lfdGlvbWdldCAqLwogCkBAIC0yNjk2LDcgKzI2OTYsNiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJjeWM6Y3lfaW9jdGwgdHR5QyVkLCBjbWQgPSAleCBhcmcgPSAlbHhcbiIsCiAJCWluZm8tPmxpbmUsIGNtZCwgYXJnKTsKICNlbmRpZgotCWxvY2tfa2VybmVsKCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQ1lHRVRNT046CkBAIC0yODE3LDcgKzI4MTYsNiBAQAogCWRlZmF1bHQ6CiAJCXJldF92YWwgPSAtRU5PSU9DVExDTUQ7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAogI2lmZGVmIENZX0RFQlVHX09USEVSCiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9pb2N0bCBkb25lXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lcGNhLmMgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCmluZGV4IDZmNWZmZTEuLmQ5ZGY0NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9lcGNhLmMKKysrIGIvZHJpdmVycy9jaGFyL2VwY2EuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC0yMTA1LDcgKzIxMDUsNiBAQAogCQlicmVhazsKIAljYXNlIERJR0lfU0VUQVc6CiAJY2FzZSBESUdJX1NFVEFGOgotCQlsb2NrX2tlcm5lbCgpOwogCQlpZiAoY21kID09IERJR0lfU0VUQVcpIHsKIAkJCS8qIFNldHVwIGFuIGV2ZW50IHRvIGluZGljYXRlIHdoZW4gdGhlIHRyYW5zbWl0CiAJCQkgICBidWZmZXIgZW1wdGllcyAqLwpAQCAtMjExOCw3ICsyMTE3LDYgQEAKIAkJCWlmICh0dHktPmxkaXNjLT5vcHMtPmZsdXNoX2J1ZmZlcikKIAkJCQl0dHktPmxkaXNjLT5vcHMtPmZsdXNoX2J1ZmZlcih0dHkpOwogCQl9Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJLyogRmFsbCBUaHJ1ICovCiAJY2FzZSBESUdJX1NFVEE6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY2gtPmRpZ2lleHQsIGFyZ3AsIHNpemVvZihkaWdpX3QpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfdGlsZS5jIGIvZHJpdmVycy9jaGFyL2h2Y190aWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlZmI1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9odmNfdGlsZS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBUaWxlcmEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiAgIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogICBtb3JlIGRldGFpbHMuCisgKgorICogVGlsZXJhIFRJTEUgUHJvY2Vzc29yIGh5cGVydmlzb3IgY29uc29sZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8aHYvaHlwZXJ2aXNvci5oPgorCisjaW5jbHVkZSAiaHZjX2NvbnNvbGUuaCIKKworc3RhdGljIGludCBodmNfdGlsZV9wdXRfY2hhcnModWludDMyX3QgdnQsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCXJldHVybiBodl9jb25zb2xlX3dyaXRlKChIVl9WaXJ0QWRkcilidWYsIGNvdW50KTsKK30KKworc3RhdGljIGludCBodmNfdGlsZV9nZXRfY2hhcnModWludDMyX3QgdnQsIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQoreworCWludCBpLCBjOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJYyA9IGh2X2NvbnNvbGVfcmVhZF9pZl9yZWFkeSgpOworCQlpZiAoYyA8IDApCisJCQlicmVhazsKKwkJYnVmW2ldID0gYzsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBodl9vcHMgaHZjX3RpbGVfZ2V0X3B1dF9vcHMgPSB7CisJLmdldF9jaGFycyA9IGh2Y190aWxlX2dldF9jaGFycywKKwkucHV0X2NoYXJzID0gaHZjX3RpbGVfcHV0X2NoYXJzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHZjX3RpbGVfY29uc29sZV9pbml0KHZvaWQpCit7CisJZXh0ZXJuIHZvaWQgZGlzYWJsZV9lYXJseV9wcmludGsodm9pZCk7CisJaHZjX2luc3RhbnRpYXRlKDAsIDAsICZodmNfdGlsZV9nZXRfcHV0X29wcyk7CisJYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJodmMiLCAwLCBOVUxMKTsKKwlkaXNhYmxlX2Vhcmx5X3ByaW50aygpOworCXJldHVybiAwOworfQorY29uc29sZV9pbml0Y2FsbChodmNfdGlsZV9jb25zb2xlX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBodmNfdGlsZV9pbml0KHZvaWQpCit7CisJaHZjX2FsbG9jKDAsIDAsICZodmNfdGlsZV9nZXRfcHV0X29wcywgMTI4KTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChodmNfdGlsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggOTExZTFkYS4uMDdmM2VhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKQEAgLTE0ODYsNyArMTQ4Niw5IEBACiAKIAlpZiAoIHR0eV9odW5nX3VwX3AocEZpbGUpIHx8ICggcENoLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcgKSkgewogCQlpZiAoIHBDaC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HICkgeworCQkJdHR5X3VubG9jaygpOwogCQkJc2NoZWR1bGUoKTsKKwkJCXR0eV9sb2NrKCk7CiAJCX0KIAkJaWYgKCB0dHlfaHVuZ191cF9wKHBGaWxlKSApIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKCBUQVNLX1JVTk5JTkcgKTsKQEAgLTE1NDgsNyArMTU1MCw5IEBACiAJCQlyYyA9ICgoIHBDaC0+ZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZICkgPyAtRUFHQUlOIDogLUVSRVNUQVJUU1lTKTsKIAkJCWJyZWFrOwogCQl9CisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoIFRBU0tfUlVOTklORyApOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZwQ2gtPm9wZW5fd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwppbmRleCBiNTMyZDYxLi4zODIyYjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYwpAQCAtMTgwNCw5ICsxODA0LDEyIEBACiAJCQkJaW5mby0+aXJxX3NldHVwID0gc3RkX2lycV9zZXR1cDsKIAkJCWluZm8tPnNsYXZlX2FkZHIgPSBpcG1iOwogCi0JCQlpZiAoIWFkZF9zbWkoaW5mbykpCisJCQlpZiAoIWFkZF9zbWkoaW5mbykpIHsKIAkJCQlpZiAodHJ5X3NtaV9pbml0KGluZm8pKQogCQkJCQljbGVhbnVwX29uZV9zaShpbmZvKTsKKwkJCX0gZWxzZSB7CisJCQkJa2ZyZWUoaW5mbyk7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiByZW1vdmUgKi8KIAkJCXN0cnVjdCBzbWlfaW5mbyAqZSwgKnRtcF9lOwpAQCAtMTg5MCw5ICsxODkzLDEyIEBACiAJCQlpbmZvLT5pcnFfc2V0dXAgPSBzdGRfaXJxX3NldHVwOwogCQlpbmZvLT5zbGF2ZV9hZGRyID0gc2xhdmVfYWRkcnNbaV07CiAKLQkJaWYgKCFhZGRfc21pKGluZm8pKQorCQlpZiAoIWFkZF9zbWkoaW5mbykpIHsKIAkJCWlmICh0cnlfc21pX2luaXQoaW5mbykpCiAJCQkJY2xlYW51cF9vbmVfc2koaW5mbyk7CisJCX0gZWxzZSB7CisJCQlrZnJlZShpbmZvKTsKKwkJfQogCX0KIH0KIApAQCAtMTk2NSw4ICsxOTcxLDggQEAKIAogLyoKICAqIERlZmluZWQgYXQKLSAqIGh0dHA6Ly9oMjEwMDcud3d3Mi5ocC5jb20vZHNwcC9maWxlcy91bnByb3RlY3RlZC9kZXZyZXNvdXJjZS8KLSAqIERvY3MvVGVjaFBhcGVycy9JQTY0L2hwc3BtaS5wZGYKKyAqIGh0dHA6Ly9oMjEwMDcud3d3Mi5ocC5jb20vcG9ydGFsL2Rvd25sb2FkL2ZpbGVzCisgKiAvdW5wcm90L2hwc3BtaS5wZGYKICAqLwogc3RydWN0IFNQTUlUYWJsZSB7CiAJczgJU2lnbmF0dXJlWzRdOwpAQCAtMjAxMywxOCArMjAxOSwxMiBAQAogc3RhdGljIF9fZGV2aW5pdCBpbnQgdHJ5X2luaXRfc3BtaShzdHJ1Y3QgU1BNSVRhYmxlICpzcG1pKQogewogCXN0cnVjdCBzbWlfaW5mbyAgKmluZm87Ci0JdTggCQkgYWRkcl9zcGFjZTsKIAogCWlmIChzcG1pLT5JUE1JbGVnYWN5ICE9IDEpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkJhZCBTUE1JIGxlZ2FjeSAlZFxuIiwgc3BtaS0+SVBNSWxlZ2FjeSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmIChzcG1pLT5hZGRyLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpCi0JCWFkZHJfc3BhY2UgPSBJUE1JX01FTV9BRERSX1NQQUNFOwotCWVsc2UKLQkJYWRkcl9zcGFjZSA9IElQTUlfSU9fQUREUl9TUEFDRTsKLQogCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghaW5mbykgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3QgYWxsb2NhdGUgU0kgZGF0YSAoMylcbiIpOwpAQCAtMjA4OCw3ICsyMDg4LDEzIEBACiAJfQogCWluZm8tPmlvLmFkZHJfZGF0YSA9IHNwbWktPmFkZHIuYWRkcmVzczsKIAotCWFkZF9zbWkoaW5mbyk7CisJcHJfaW5mbygiaXBtaV9zaTogU1BNSTogJXMgJSNseCByZWdzaXplICVkIHNwYWNpbmcgJWQgaXJxICVkXG4iLAorCQkgKGluZm8tPmlvLmFkZHJfdHlwZSA9PSBJUE1JX0lPX0FERFJfU1BBQ0UpID8gImlvIiA6ICJtZW0iLAorCQkgaW5mby0+aW8uYWRkcl9kYXRhLCBpbmZvLT5pby5yZWdzaXplLCBpbmZvLT5pby5yZWdzcGFjaW5nLAorCQkgaW5mby0+aXJxKTsKKworCWlmIChhZGRfc21pKGluZm8pKQorCQlrZnJlZShpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE3Niw2ICsyMTgyLDE0IEBACiAJaW5mby0+aW8uYWRkcl9kYXRhID0gcmVzLT5zdGFydDsKIAogCWluZm8tPmlvLnJlZ3NwYWNpbmcgPSBERUZBVUxUX1JFR1NQQUNJTkc7CisJcmVzID0gcG5wX2dldF9yZXNvdXJjZShkZXYsCisJCQkgICAgICAgKGluZm8tPmlvLmFkZHJfdHlwZSA9PSBJUE1JX0lPX0FERFJfU1BBQ0UpID8KKwkJCQkJSU9SRVNPVVJDRV9JTyA6IElPUkVTT1VSQ0VfTUVNLAorCQkJICAgICAgIDEpOworCWlmIChyZXMpIHsKKwkJaWYgKHJlcy0+c3RhcnQgPiBpbmZvLT5pby5hZGRyX2RhdGEpCisJCQlpbmZvLT5pby5yZWdzcGFjaW5nID0gcmVzLT5zdGFydCAtIGluZm8tPmlvLmFkZHJfZGF0YTsKKwl9CiAJaW5mby0+aW8ucmVnc2l6ZSA9IERFRkFVTFRfUkVHU1BBQ0lORzsKIAlpbmZvLT5pby5yZWdzaGlmdCA9IDA7CiAKQEAgLTIxOTYsNyArMjIxMCwxMCBAQAogCQkgcmVzLCBpbmZvLT5pby5yZWdzaXplLCBpbmZvLT5pby5yZWdzcGFjaW5nLAogCQkgaW5mby0+aXJxKTsKIAotCXJldHVybiBhZGRfc21pKGluZm8pOworCWlmIChhZGRfc21pKGluZm8pKQorCQlnb3RvIGVycl9mcmVlOworCisJcmV0dXJuIDA7CiAKIGVycl9mcmVlOgogCWtmcmVlKGluZm8pOwpAQCAtMjM1NCw3ICsyMzcxLDEzIEBACiAJaWYgKGluZm8tPmlycSkKIAkJaW5mby0+aXJxX3NldHVwID0gc3RkX2lycV9zZXR1cDsKIAotCWFkZF9zbWkoaW5mbyk7CisJcHJfaW5mbygiaXBtaV9zaTogU01CSU9TOiAlcyAlI2x4IHJlZ3NpemUgJWQgc3BhY2luZyAlZCBpcnEgJWRcbiIsCisJCSAoaW5mby0+aW8uYWRkcl90eXBlID09IElQTUlfSU9fQUREUl9TUEFDRSkgPyAiaW8iIDogIm1lbSIsCisJCSBpbmZvLT5pby5hZGRyX2RhdGEsIGluZm8tPmlvLnJlZ3NpemUsIGluZm8tPmlvLnJlZ3NwYWNpbmcsCisJCSBpbmZvLT5pcnEpOworCisJaWYgKGFkZF9zbWkoaW5mbykpCisJCWtmcmVlKGluZm8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZG1pX2ZpbmRfYm1jKHZvaWQpCkBAIC0yNDYwLDcgKzI0ODMsMTAgQEAKIAkJJnBkZXYtPnJlc291cmNlWzBdLCBpbmZvLT5pby5yZWdzaXplLCBpbmZvLT5pby5yZWdzcGFjaW5nLAogCQlpbmZvLT5pcnEpOwogCi0JcmV0dXJuIGFkZF9zbWkoaW5mbyk7CisJaWYgKGFkZF9zbWkoaW5mbykpCisJCWtmcmVlKGluZm8pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcG1pX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0yNTczLDcgKzI1OTksMTIgQEAKIAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOwogCi0JcmV0dXJuIGFkZF9zbWkoaW5mbyk7CisJaWYgKGFkZF9zbWkoaW5mbykpIHsKKwkJa2ZyZWUoaW5mbyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGlwbWlfb2ZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTMwMDYsNiArMzAzNyw4IEBACiAJCQkJaW5mby0+aW8uYWRkcl9kYXRhKTsKIAkJCX0gZWxzZQogCQkJCWNsZWFudXBfb25lX3NpKGluZm8pOworCQl9IGVsc2UgeworCQkJa2ZyZWUoaW5mbyk7CiAJCX0KIAl9CiB9CkBAIC0zMDMzLDcgKzMwNjYsNyBAQAogCQkJc2lfdG9fc3RyW25ld19zbWktPnNpX3R5cGVdKTsKIAltdXRleF9sb2NrKCZzbWlfaW5mb3NfbG9jayk7CiAJaWYgKCFpc19uZXdfaW50ZXJmYWNlKG5ld19zbWkpKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgUEZYICJkdXBsaWNhdGUgaW50ZXJmYWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIGR1cGxpY2F0ZSBpbnRlcmZhY2VcbiIpOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBvdXRfZXJyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pc2ljb20uYyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwppbmRleCA5ODMxMGUxLi5jMjdlOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCkBAIC0xMjQsNyArMTI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC04NzIsNyArODcxLDYgQEAKIHN0YXRpYyBpbnQgaXNpY29tX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IGlzaV9wb3J0ICpwb3J0OwotCXN0cnVjdCBpc2lfYm9hcmQgKmNhcmQ7CiAJc3RydWN0IHR0eV9wb3J0ICp0cG9ydDsKIAogCXRwb3J0ID0gaXNpY29tX2ZpbmRfcG9ydCh0dHkpOwpAQCAtMTExOCw4ICsxMTE2LDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJm5ld2luZm8sIGluZm8sIHNpemVvZihuZXdpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbG9ja19rZXJuZWwoKTsKLQorCW11dGV4X2xvY2soJnBvcnQtPnBvcnQubXV0ZXgpOwogCXJlY29uZmlnX3BvcnQgPSAoKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KIAkJKG5ld2luZm8uZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpOwogCkBAIC0xMTI4LDcgKzExMjUsNyBAQAogCQkJCShuZXdpbmZvLmNsb3Npbmdfd2FpdCAhPSBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCkgfHwKIAkJCQkoKG5ld2luZm8uZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spICE9CiAJCQkJKHBvcnQtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KIAkJcG9ydC0+cG9ydC5mbGFncyA9ICgocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgfApAQCAtMTE0NSw3ICsxMTQyLDcgQEAKIAkJaXNpY29tX2NvbmZpZ19wb3J0KHR0eSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmNhcmQtPmNhcmRfbG9jaywgZmxhZ3MpOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE1NCw3ICsxMTUxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBvdXRfaW5mbzsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJbWVtc2V0KCZvdXRfaW5mbywgMCwgc2l6ZW9mKG91dF9pbmZvKSk7CiAvKglvdXRfaW5mby50eXBlID0gPyAqLwogCW91dF9pbmZvLmxpbmUgPSBwb3J0IC0gaXNpX3BvcnRzOwpAQCAtMTE2NCw3ICsxMTYxLDcgQEAKIC8qCW91dF9pbmZvLmJhdWRfYmFzZSA9ID8gKi8KIAlvdXRfaW5mby5jbG9zZV9kZWxheSA9IHBvcnQtPnBvcnQuY2xvc2VfZGVsYXk7CiAJb3V0X2luZm8uY2xvc2luZ193YWl0ID0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQ7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJaWYgKGNvcHlfdG9fdXNlcihpbmZvLCAmb3V0X2luZm8sIHNpemVvZihvdXRfaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYyBiL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYwppbmRleCA0ZTM5NWM5Li5iZTI4MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCkBAIC0yMDMsOSArMjAzLDkgQEAKICAqCXRoZSBib2FyZCBoYXMgYmVlbiBkZXRlY3RlZCwgYW5kIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgcnVubmluZyBhIHNsYXZlCiAgKglvciBub3QuCiAgKi8KLSNkZWZpbmUJQlNUX0ZPVU5ECTB4MQotI2RlZmluZQlCU1RfU1RBUlRFRAkweDIKLSNkZWZpbmUJQlNUX1BST0JFRAkweDQKKyNkZWZpbmUJQlNUX0ZPVU5ECTAKKyNkZWZpbmUJQlNUX1NUQVJURUQJMQorI2RlZmluZQlCU1RfUFJPQkVECTIKIAogLyoKICAqCURlZmluZSB0aGUgc2V0IG9mIHBvcnQgc3RhdGUgZmxhZ3MuIFRoZXNlIGFyZSBtYXJrZWQgZm9yIGludGVybmFsCkBAIC04MTYsNyArODE2LDcgQEAKIAlicmRwID0gc3RsaV9icmRzW2JyZG5yXTsKIAlpZiAoYnJkcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpID09IDApCisJaWYgKCF0ZXN0X2JpdChCU1RfU1RBUlRFRCwgJmJyZHAtPnN0YXRlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcG9ydG5yID0gTUlOT1IyUE9SVChtaW5vcmRldik7CiAJaWYgKHBvcnRuciA+IGJyZHAtPm5ycG9ydHMpCkBAIC05NTQsNyArOTU0LDcgQEAKICAqCW9yZGVyIG9mIG9wZW5zIGFuZCBjbG9zZXMgbWF5IG5vdCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHNoYXJlZAogICoJbWVtb3J5LCBzbyB3ZSBtdXN0IHdhaXQgdW50aWwgaXQgaXMgY29tcGxldGUuCiAgKi8KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocG9ydHAtPnJhd193YWl0LAorCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90dHkocG9ydHAtPnJhd193YWl0LAogCQkJIXRlc3RfYml0KFNUX0NMT1NJTkcsICZwb3J0cC0+c3RhdGUpKTsKIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTk4OSw3ICs5ODksNyBAQAogCXNldF9iaXQoU1RfT1BFTklORywgJnBvcnRwLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnJkX2xvY2ssIGZsYWdzKTsKIAotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3R0eShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfT1BFTklORywgJnBvcnRwLT5zdGF0ZSkpOwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmMgPSAtRVJFU1RBUlRTWVM7CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogICoJb2NjdXJzIG9uIHRoaXMgcG9ydC4KICAqLwogCWlmICh3YWl0KSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90dHkocG9ydHAtPnJhd193YWl0LAogCQkJCSF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTEwNTIsNyArMTA1Miw3IEBACiAgKgl0byBjb21lIGJhY2suCiAgKi8KIAlyYyA9IDA7Ci0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBvcnRwLT5yYXdfd2FpdCwKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KHBvcnRwLT5yYXdfd2FpdCwKIAkJCSF0ZXN0X2JpdChTVF9DTE9TSU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyYyA9IC1FUkVTVEFSVFNZUzsKQEAgLTEwNzMsNiArMTA3MywxMCBAQAogCiBzdGF0aWMgaW50IHN0bGlfY21kd2FpdChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCwgc3RydWN0IHN0bGlwb3J0ICpwb3J0cCwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKmFyZywgaW50IHNpemUsIGludCBjb3B5YmFjaykKIHsKKwkvKgorCSAqIG5vIG5lZWQgZm9yIHdhaXRfZXZlbnRfdHR5IGJlY2F1c2UgY2xlYXJpbmcgU1RfQ01ESU5HIGNhbm5vdCBibG9jaworCSAqIG9uIEJUTQorCSAqLwogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwb3J0cC0+cmF3X3dhaXQsCiAJCQkhdGVzdF9iaXQoU1RfQ01ESU5HLCAmcG9ydHAtPnN0YXRlKSk7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtMTg0Niw3ICsxODUwLDcgQEAKIAlyYyA9IHN0bGlfcG9ydGNtZHN0YXRzKE5VTEwsIHBvcnRwKTsKIAogCXVhcnQgPSAiVU5LTk9XTiI7Ci0JaWYgKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpIHsKKwlpZiAodGVzdF9iaXQoQlNUX1NUQVJURUQsICZicmRwLT5zdGF0ZSkpIHsKIAkJc3dpdGNoIChzdGxpX2NvbXN0YXRzLmh3aWQpIHsKIAkJY2FzZSAwOgl1YXJ0ID0gIjI2ODEiOyBicmVhazsKIAkJY2FzZSAxOgl1YXJ0ID0gIlNDMjYxOTgiOyBicmVhazsKQEAgLTE4NTUsNyArMTg1OSw3IEBACiAJfQogCXNlcV9wcmludGYobSwgIiVkOiB1YXJ0OiVzICIsIHBvcnRuciwgdWFydCk7CiAKLQlpZiAoKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpICYmIChyYyA+PSAwKSkgeworCWlmICh0ZXN0X2JpdChCU1RfU1RBUlRFRCwgJmJyZHAtPnN0YXRlKSAmJiByYyA+PSAwKSB7CiAJCWNoYXIgc2VwOwogCiAJCXNlcV9wcmludGYobSwgInR4OiVkIHJ4OiVkIiwgKGludCkgc3RsaV9jb21zdGF0cy50eHRvdGFsLApAQCAtMjM1NSw3ICsyMzU5LDcgQEAKIAkJYnJkcCA9IHN0bGlfYnJkc1ticmRucl07CiAJCWlmIChicmRwID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaWYgKChicmRwLT5zdGF0ZSAmIEJTVF9TVEFSVEVEKSA9PSAwKQorCQlpZiAoIXRlc3RfYml0KEJTVF9TVEFSVEVELCAmYnJkcC0+c3RhdGUpKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrKCZicmRfbG9jayk7CkBAIC0zMTQwLDcgKzMxNDQsNyBAQAogCX0KIAogCi0JYnJkcC0+c3RhdGUgfD0gQlNUX0ZPVU5EOworCXNldF9iaXQoQlNUX0ZPVU5ELCAmYnJkcC0+c3RhdGUpOwogCXJldHVybiAwOwogZXJyX3VubWFwOgogCWlvdW5tYXAoYnJkcC0+bWVtYmFzZSk7CkBAIC0zMjk3LDcgKzMzMDEsNyBAQAogCWJyZHAtPnBhbmVsc1swXSA9IGJyZHAtPm5ycG9ydHM7CiAKIAotCWJyZHAtPnN0YXRlIHw9IEJTVF9GT1VORDsKKwlzZXRfYml0KEJTVF9GT1VORCwgJmJyZHAtPnN0YXRlKTsKIAlyZXR1cm4gMDsKIGVycl91bm1hcDoKIAlpb3VubWFwKGJyZHAtPm1lbWJhc2UpOwpAQCAtMzQwNyw3ICszNDExLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicmRfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHJjID09IDApCi0JCWJyZHAtPnN0YXRlIHw9IEJTVF9TVEFSVEVEOworCQlzZXRfYml0KEJTVF9TVEFSVEVELCAmYnJkcC0+c3RhdGUpOwogCiAJaWYgKCEgc3RsaV90aW1lcm9uKSB7CiAJCXN0bGlfdGltZXJvbisrOwpAQCAtMzcxMCw3ICszNzE0LDcgQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9udWxsOwogCi0JYnJkcC0+c3RhdGUgfD0gQlNUX1BST0JFRDsKKwlzZXRfYml0KEJTVF9QUk9CRUQsICZicmRwLT5zdGF0ZSk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGJyZHApOwogCiAJRUJSREVOQUJMRShicmRwKTsKQEAgLTM4NDEsNyArMzg0NSw3IEBACiAJCQlicmRwID0gc3RsaV9icmRzW2ldOwogCQkJaWYgKGJyZHAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKLQkJCWlmIChicmRwLT5zdGF0ZSAmIEJTVF9GT1VORCkgeworCQkJaWYgKHRlc3RfYml0KEJTVF9GT1VORCwgJmJyZHAtPnN0YXRlKSkgewogCQkJCUVCUkRFTkFCTEUoYnJkcCk7CiAJCQkJYnJkcC0+ZW5hYmxlID0gTlVMTDsKIAkJCQlicmRwLT5kaXNhYmxlID0gTlVMTDsKQEAgLTQwMTEsNiArNDAxNSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJbWVtc2V0KCZzdGxpX2JyZHN0YXRzLCAwLCBzaXplb2YoY29tYnJkX3QpKTsKKwogCXN0bGlfYnJkc3RhdHMuYnJkID0gYnJkcC0+YnJkbnI7CiAJc3RsaV9icmRzdGF0cy50eXBlID0gYnJkcC0+YnJkdHlwZTsKIAlzdGxpX2JyZHN0YXRzLmh3aWQgPSAwOwpAQCAtNDA3NiwxMCArNDA4MSwxMyBAQAogCWlmIChicmRwID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGJyZHAtPnN0YXRlICYgQlNUX1NUQVJURUQpIHsKKwltdXRleF9sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CisJaWYgKHRlc3RfYml0KEJTVF9TVEFSVEVELCAmYnJkcC0+c3RhdGUpKSB7CiAJCWlmICgocmMgPSBzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfR0VUU1RBVFMsCi0JCSAgICAmc3RsaV9jZGtzdGF0cywgc2l6ZW9mKGFzeXN0YXRzX3QpLCAxKSkgPCAwKQorCQkgICAgJnN0bGlfY2Rrc3RhdHMsIHNpemVvZihhc3lzdGF0c190KSwgMSkpIDwgMCkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CiAJCQlyZXR1cm4gcmM7CisJCX0KIAl9IGVsc2UgewogCQltZW1zZXQoJnN0bGlfY2Rrc3RhdHMsIDAsIHNpemVvZihhc3lzdGF0c190KSk7CiAJfQpAQCAtNDEyNCw2ICs0MTMyLDcgQEAKIAlzdGxpX2NvbXN0YXRzLm1vZGVtID0gc3RsaV9jZGtzdGF0cy5kY2RjbnQ7CiAJc3RsaV9jb21zdGF0cy5od2lkID0gc3RsaV9jZGtzdGF0cy5od2lkOwogCXN0bGlfY29tc3RhdHMuc2lnbmFscyA9IHN0bGlfbWt0aW9jbShzdGxpX2Nka3N0YXRzLnNpZ25hbHMpOworCW11dGV4X3VubG9jaygmcG9ydHAtPnBvcnQubXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTg2LDE1ICs0MTk1LDIwIEBACiAJaWYgKCFicmRwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChicmRwLT5zdGF0ZSAmIEJTVF9TVEFSVEVEKSB7Ci0JCWlmICgocmMgPSBzdGxpX2NtZHdhaXQoYnJkcCwgcG9ydHAsIEFfQ0xFQVJTVEFUUywgTlVMTCwgMCwgMCkpIDwgMCkKKwltdXRleF9sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CisKKwlpZiAodGVzdF9iaXQoQlNUX1NUQVJURUQsICZicmRwLT5zdGF0ZSkpIHsKKwkJaWYgKChyYyA9IHN0bGlfY21kd2FpdChicmRwLCBwb3J0cCwgQV9DTEVBUlNUQVRTLCBOVUxMLCAwLCAwKSkgPCAwKSB7CisJCQltdXRleF91bmxvY2soJnBvcnRwLT5wb3J0Lm11dGV4KTsKIAkJCXJldHVybiByYzsKKwkJfQogCX0KIAogCW1lbXNldCgmc3RsaV9jb21zdGF0cywgMCwgc2l6ZW9mKGNvbXN0YXRzX3QpKTsKIAlzdGxpX2NvbXN0YXRzLmJyZCA9IHBvcnRwLT5icmRucjsKIAlzdGxpX2NvbXN0YXRzLnBhbmVsID0gcG9ydHAtPnBhbmVsbnI7CiAJc3RsaV9jb21zdGF0cy5wb3J0ID0gcG9ydHAtPnBvcnRucjsKKwltdXRleF91bmxvY2soJnBvcnRwLT5wb3J0Lm11dGV4KTsKIAogCWlmIChjb3B5X3RvX3VzZXIoY3AsICZzdGxpX2NvbXN0YXRzLCBzaXplb2YoY29tc3RhdHNfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQyNjYsOCArNDI4MCw2IEBACiAJZG9uZSA9IDA7CiAJcmMgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDT01fR0VUUE9SVFNUQVRTOgogCQlyYyA9IHN0bGlfZ2V0cG9ydHN0YXRzKE5VTEwsIE5VTEwsIGFyZ3ApOwpAQCAtNDI5MCw4ICs0MzAyLDYgQEAKIAkJZG9uZSsrOwogCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCiAJaWYgKGRvbmUpCiAJCXJldHVybiByYzsKIApAQCAtNDMwOCw4ICs0MzE4LDYgQEAKIAlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUTF9CSU5UUjoKIAkJRUJSRElOVFIoYnJkcCk7CkBAIC00MzE4LDEwICs0MzI2LDEwIEBACiAJCXJjID0gc3RsaV9zdGFydGJyZChicmRwKTsKIAkJYnJlYWs7CiAJY2FzZSBTVExfQlNUT1A6Ci0JCWJyZHAtPnN0YXRlICY9IH5CU1RfU1RBUlRFRDsKKwkJY2xlYXJfYml0KEJTVF9TVEFSVEVELCAmYnJkcC0+c3RhdGUpOwogCQlicmVhazsKIAljYXNlIFNUTF9CUkVTRVQ6Ci0JCWJyZHAtPnN0YXRlICY9IH5CU1RfU1RBUlRFRDsKKwkJY2xlYXJfYml0KEJTVF9TVEFSVEVELCAmYnJkcC0+c3RhdGUpOwogCQlFQlJEUkVTRVQoYnJkcCk7CiAJCWlmIChzdGxpX3NoYXJlZCA9PSAwKSB7CiAJCQlpZiAoYnJkcC0+cmVlbmFibGUgIT0gTlVMTCkKQEAgLTQzMzIsNyArNDM0MCw2IEBACiAJCXJjID0gLUVOT0lPQ1RMQ01EOwogCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByYzsKIH0KIApAQCAtNDM3OCw3ICs0Mzg1LDggQEAKIAl1bnNpZ25lZCBpbnQgajsKIAogCWZvciAoaiA9IDA7IChqIDwgc3RsaV9ucmJyZHMpOyBqKyspIHsKLQkJaWYgKChicmRwID0gc3RsaV9icmRzW2pdKSA9PSBOVUxMIHx8IChicmRwLT5zdGF0ZSAmIEJTVF9QUk9CRUQpKQorCQlpZiAoKGJyZHAgPSBzdGxpX2JyZHNbal0pID09IE5VTEwgfHwKKwkJCQl0ZXN0X2JpdChCU1RfUFJPQkVELCAmYnJkcC0+c3RhdGUpKQogCQkJY29udGludWU7CiAKIAkJc3RsaV9jbGVhbnVwX3BvcnRzKGJyZHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2tleWJvYXJkLmMgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwppbmRleCAyNWJlMjEwLi5hN2NhNzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHB1dF9xdWV1ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBjaCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdmMtPnZjX3R0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdmMtPnBvcnQudHR5OwogCiAJaWYgKHR0eSkgewogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCAwKTsKQEAgLTMwOSw3ICszMDksNyBAQAogCiBzdGF0aWMgdm9pZCBwdXRzX3F1ZXVlKHN0cnVjdCB2Y19kYXRhICp2YywgY2hhciAqY3ApCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT52Y190dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT5wb3J0LnR0eTsKIAogCWlmICghdHR5KQogCQlyZXR1cm47CkBAIC00ODUsNyArNDg1LDcgQEAKIAogc3RhdGljIHZvaWQgZm5faG9sZChzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT52Y190dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT5wb3J0LnR0eTsKIAogCWlmIChyZXAgfHwgIXR0eSkKIAkJcmV0dXJuOwpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIHN0YXRpYyB2b2lkIGZuX3NlbmRfaW50cihzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT52Y190dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHZjLT5wb3J0LnR0eTsKIAogCWlmICghdHR5KQogCQlyZXR1cm47CkBAIC0xMTYyLDcgKzExNjIsNyBAQAogCXN0cnVjdCBrZXlib2FyZF9ub3RpZmllcl9wYXJhbSBwYXJhbSA9IHsgLnZjID0gdmMsIC52YWx1ZSA9IGtleWNvZGUsIC5kb3duID0gZG93biB9OwogCWludCByYzsKIAotCXR0eSA9IHZjLT52Y190dHk7CisJdHR5ID0gdmMtPnBvcnQudHR5OwogCiAJaWYgKHR0eSAmJiAoIXR0eS0+ZHJpdmVyX2RhdGEpKSB7CiAJCS8qIE5vIGRyaXZlciBkYXRhPyBTdHJhbmdlLiBPa2F5IHdlIGZpeCBpdCB0aGVuLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21lbS5jIGIvZHJpdmVycy9jaGFyL21lbS5jCmluZGV4IGY1NGRhYjguLmEzOThlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tZW0uYworKysgYi9kcml2ZXJzL2NoYXIvbWVtLmMKQEAgLTkxNiw3ICs5MTYsNyBAQAogCQkJICAgICAgTlVMTCwgZGV2bGlzdFttaW5vcl0ubmFtZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHR0eV9pbml0KCk7CiB9CiAKIGZzX2luaXRjYWxsKGNocl9kZXZfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWlzYy5jIGIvZHJpdmVycy9jaGFyL21pc2MuYwppbmRleCBjZDY1MGNhLi5hYmRhZmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci9taXNjLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogewogCWludCBpID0gRFlOQU1JQ19NSU5PUlMgLSBtaXNjLT5taW5vciAtIDE7CiAKLQlpZiAobGlzdF9lbXB0eSgmbWlzYy0+bGlzdCkpCisJaWYgKFdBUk5fT04obGlzdF9lbXB0eSgmbWlzYy0+bGlzdCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJm1pc2NfbXR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9teHNlci5jIGIvZHJpdmVycy9jaGFyL214c2VyLmMKaW5kZXggZDI2OTJkNC4uM2ZjODlkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL214c2VyLmMKKysrIGIvZHJpdmVycy9jaGFyL214c2VyLmMKQEAgLTIxOTMsNyArMjE5Myw3IEBACiAJcG9ydC0+bW9uX2RhdGEudXBfdHhjbnQgKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAlwb3J0LT5pY291bnQudHggKz0gKGNudCAtIHBvcnQtPnhtaXRfY250KTsKIAotCWlmIChwb3J0LT54bWl0X2NudCA8IFdBS0VVUF9DSEFSUyAmJiB0dHkpCisJaWYgKHBvcnQtPnhtaXRfY250IDwgV0FLRVVQX0NIQVJTKQogCQl0dHlfd2FrZXVwKHR0eSk7CiAKIAlpZiAocG9ydC0+eG1pdF9jbnQgPD0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fZ3NtLmMgYi9kcml2ZXJzL2NoYXIvbl9nc20uYwppbmRleCBlNDA4OWM0Li4wNGVmM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl9nc20uYworKysgYi9kcml2ZXJzL2NoYXIvbl9nc20uYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC05MjAsNyArOTE5LDcgQEAKIAkJZWxzZQogCQkJbGVuID0gZ3NtX2RsY2lfZGF0YV9vdXRwdXRfZnJhbWVkKGdzbSwgZGxjaSk7CiAJCWlmIChsZW4gPCAwKQotCQkJcmV0dXJuOworCQkJYnJlYWs7CiAJCS8qIERMQ0kgZW1wdHkgLSB0cnkgdGhlIG5leHQgKi8KIAkJaWYgKGxlbiA9PSAwKQogCQkJaSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25faGRsYy5jIGIvZHJpdmVycy9jaGFyL25faGRsYy5jCmluZGV4IGM2ODExOGUuLjQ3ZDMyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX2hkbGMuYworKysgYi9kcml2ZXJzL2NoYXIvbl9oZGxjLmMKQEAgLTU5OCwxOCArNTk4LDE4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAogCWZvciAoOzspIHsKIAkJaWYgKHRlc3RfYml0KFRUWV9PVEhFUl9DTE9TRUQsICZ0dHktPmZsYWdzKSkgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJdHR5X3VubG9jaygpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQluX2hkbGMgPSB0dHkybl9oZGxjICh0dHkpOwogCQlpZiAoIW5faGRsYyB8fCBuX2hkbGMtPm1hZ2ljICE9IEhETENfTUFHSUMgfHwKIAkJCSB0dHkgIT0gbl9oZGxjLT50dHkpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXR0eV91bmxvY2soKTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTYxOSwxMyArNjE5LDEzIEBACiAJCQkKIAkJLyogbm8gZGF0YSAqLwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXR0eV91bmxvY2soKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCQkKIAkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbiAoJnR0eS0+cmVhZF93YWl0KTsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQlyZXR1cm4gLUVJTlRSOwogCQl9CiAJfQpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCWtmcmVlKHJidWYpOwogCWVsc2UJCiAJCW5faGRsY19idWZfcHV0KCZuX2hkbGMtPnJ4X2ZyZWVfYnVmX2xpc3QscmJ1Zik7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogCQogfQkvKiBlbmQgb2Ygbl9oZGxjX3R0eV9yZWFkKCkgKi8KQEAgLTY5MSw3ICs2OTEsNyBAQAogCQljb3VudCA9IG1heGZyYW1lOwogCX0KIAkKLQlsb2NrX2tlcm5lbCgpOworCXR0eV9sb2NrKCk7CiAKIAlhZGRfd2FpdF9xdWV1ZSgmdHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTczMSw3ICs3MzEsNyBAQAogCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT50eF9idWZfbGlzdCx0YnVmKTsKIAkJbl9oZGxjX3NlbmRfZnJhbWVzKG5faGRsYyx0dHkpOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiBlcnJvcjsKIAkKIH0JLyogZW5kIG9mIG5faGRsY190dHlfd3JpdGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fcjM5NjQuYyBiL2RyaXZlcnMvY2hhci9uX3IzOTY0LmMKaW5kZXggYzFkOGI1NC4uYTk4MjkwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL25fcjM5NjQuYworKysgYi9kcml2ZXJzL2NoYXIvbl9yMzk2NC5jCkBAIC0xMDY3LDcgKzEwNjcsNyBAQAogCiAJVFJBQ0VfTCgicmVhZCgpIik7CiAKLQlsb2NrX2tlcm5lbCgpOworCXR0eV9sb2NrKCk7CiAKIAlwQ2xpZW50ID0gZmluZENsaWVudChwSW5mbywgdGFza19waWQoY3VycmVudCkpOwogCWlmIChwQ2xpZW50KSB7CkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCQkJLyogYmxvY2sgdW50aWwgdGhlcmUgaXMgYSBtZXNzYWdlOiAqLwotCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHBJbmZvLT5yZWFkX3dhaXQsCisJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KHBJbmZvLT5yZWFkX3dhaXQsCiAJCQkJCShwTXNnID0gcmVtb3ZlX21zZyhwSW5mbywgcENsaWVudCkpKTsKIAkJfQogCkBAIC0xMTA5LDcgKzExMDksNyBAQAogCX0KIAlyZXQgPSAtRVBFUk07CiB1bmxvY2s6Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTU4LDcgKzExNTgsNyBAQAogCXBIZWFkZXItPmxvY2tzID0gMDsKIAlwSGVhZGVyLT5vd25lciA9IE5VTEw7CiAKLQlsb2NrX2tlcm5lbCgpOworCXR0eV9sb2NrKCk7CiAKIAlwQ2xpZW50ID0gZmluZENsaWVudChwSW5mbywgdGFza19waWQoY3VycmVudCkpOwogCWlmIChwQ2xpZW50KSB7CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogCWFkZF90eF9xdWV1ZShwSW5mbywgcEhlYWRlcik7CiAJdHJpZ2dlcl90cmFuc21pdChwSW5mbyk7CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbl90dHkuYyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCmluZGV4IGJkYWU4MzIuLjQyOGY0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9uX3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9uX3R0eS5jCkBAIC0xMTAyLDYgKzExMDIsMTEgQEAKIAlpZiAoSV9JVUNMQyh0dHkpICYmIExfSUVYVEVOKHR0eSkpCiAJCWMgPSB0b2xvd2VyKGMpOwogCisJaWYgKExfRVhUUFJPQyh0dHkpKSB7CisJCXB1dF90dHlfcXVldWUoYywgdHR5KTsKKwkJcmV0dXJuOworCX0KKwogCWlmICh0dHktPnN0b3BwZWQgJiYgIXR0eS0+Zmxvd19zdG9wcGVkICYmIElfSVhPTih0dHkpICYmCiAJICAgIElfSVhBTlkodHR5KSAmJiBjICE9IFNUQVJUX0NIQVIodHR5KSAmJiBjICE9IFNUT1BfQ0hBUih0dHkpICYmCiAJICAgIGMgIT0gSU5UUl9DSEFSKHR0eSkgJiYgYyAhPSBRVUlUX0NIQVIodHR5KSAmJiBjICE9IFNVU1BfQ0hBUih0dHkpKSB7CkBAIC0xNDA5LDcgKzE0MTQsOCBAQAogCiAJbl90dHlfc2V0X3Jvb20odHR5KTsKIAotCWlmICghdHR5LT5pY2Fub24gJiYgKHR0eS0+cmVhZF9jbnQgPj0gdHR5LT5taW5pbXVtX3RvX3dha2UpKSB7CisJaWYgKCghdHR5LT5pY2Fub24gJiYgKHR0eS0+cmVhZF9jbnQgPj0gdHR5LT5taW5pbXVtX3RvX3dha2UpKSB8fAorCQlMX0VYVFBST0ModHR5KSkgewogCQlraWxsX2Zhc3luYygmdHR5LT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnR0eS0+cmVhZF93YWl0KSkKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5yZWFkX3dhaXQpOwpAQCAtMTU4NSw3ICsxNTkxLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGlucHV0X2F2YWlsYWJsZV9wKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBhbXQpCiB7CiAJdHR5X2ZsdXNoX3RvX2xkaXNjKHR0eSk7Ci0JaWYgKHR0eS0+aWNhbm9uKSB7CisJaWYgKHR0eS0+aWNhbm9uICYmICFMX0VYVFBST0ModHR5KSkgewogCQlpZiAodHR5LT5jYW5vbl9kYXRhKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlIGlmICh0dHktPnJlYWRfY250ID49IChhbXQgPyBhbXQgOiAxKSkKQEAgLTE2MzIsNiArMTYzOCwxMSBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJdHR5LT5yZWFkX3RhaWwgPSAodHR5LT5yZWFkX3RhaWwgKyBuKSAmIChOX1RUWV9CVUZfU0laRS0xKTsKIAkJdHR5LT5yZWFkX2NudCAtPSBuOworCQkvKiBUdXJuIHNpbmdsZSBFT0YgaW50byB6ZXJvLWxlbmd0aCByZWFkICovCisJCWlmIChMX0VYVFBST0ModHR5KSAmJiB0dHktPmljYW5vbiAmJiBuID09IDEpIHsKKwkJCWlmICghdHR5LT5yZWFkX2NudCAmJiAoKmIpW24tMV0gPT0gRU9GX0NIQVIodHR5KSkKKwkJCQluLS07CisJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5yZWFkX2xvY2ssIGZsYWdzKTsKIAkJKmIgKz0gbjsKIAkJKm5yIC09IG47CkBAIC0xODEyLDcgKzE4MjMsNyBAQAogCQkJbnItLTsKIAkJfQogCi0JCWlmICh0dHktPmljYW5vbikgeworCQlpZiAodHR5LT5pY2Fub24gJiYgIUxfRVhUUFJPQyh0dHkpKSB7CiAJCQkvKiBOLkIuIGF2b2lkIG92ZXJydW4gaWYgbnIgPT0gMCAqLwogCQkJd2hpbGUgKG5yICYmIHR0eS0+cmVhZF9jbnQpIHsKIAkJCQlpbnQgZW9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25vem9taS5jIGIvZHJpdmVycy9jaGFyL25vem9taS5jCmluZGV4IGE2NjM4MDAuLjgxNzE2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYworKysgYi9kcml2ZXJzL2NoYXIvbm96b21pLmMKQEAgLTE2MTEsNiArMTYxMSw4IEBACiAJcmV0ID0gdHR5X2luaXRfdGVybWlvcyh0dHkpOwogCWlmIChyZXQgPT0gMCkgewogCQl0dHlfZHJpdmVyX2tyZWZfZ2V0KGRyaXZlcik7CisJCXR0eS0+Y291bnQrKzsKKwkJdHR5LT5kcml2ZXJfZGF0YSA9IHBvcnQ7CiAJCWRyaXZlci0+dHR5c1t0dHktPmluZGV4XSA9IHR0eTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE2MzksNyArMTY0MSw3IEBACiAKIHN0YXRpYyBpbnQgbnR0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewotCXN0cnVjdCBwb3J0ICpwb3J0ID0gZ2V0X3BvcnRfYnlfdHR5KHR0eSk7CisJc3RydWN0IHBvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXJldHVybiB0dHlfcG9ydF9vcGVuKCZwb3J0LT5wb3J0LCB0dHksIGZpbHApOwogfQogCkBAIC0xNzQxLDggKzE3NDMsNyBAQAogCWlmIChkYykgewogCQltdXRleF9sb2NrKCZwb3J0LT50dHlfc2VtKTsKIAkJaWYgKHBvcnQtPnBvcnQuY291bnQpCi0JCQlyb29tID0gcG9ydC0+Zmlmb191bC5zaXplIC0KLQkJCQkJa2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKKwkJCXJvb20gPSBrZmlmb19hdmFpbCgmcG9ydC0+Zmlmb191bCk7CiAJCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CiAJfQogCXJldHVybiByb29tOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKaW5kZXggZTc5NTZhYy4uZWM3M2Q5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtNDIyLDcgKzQyMSw3IEBACiBzdGF0aWMgdm9pZCBzZXRfY2FyZHBhcmFtZXRlcihzdHJ1Y3QgY200MDAwX2RldiAqZGV2KQogewogCWludCBpOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAl1X2ludDhfdCBzdG9wYml0cyA9IDB4MDI7IC8qIElTTyBkZWZhdWx0ICovCiAKIAlERUJVR1AoMywgZGV2LCAiLT4gc2V0X2NhcmRwYXJhbWV0ZXJcbiIpOwpAQCAtNDU1LDcgKzQ1NCw3IEBACiAJdW5zaWduZWQgc2hvcnQgbnVtX2J5dGVzX3JlYWQ7CiAJdW5zaWduZWQgY2hhciBwdHNfcmVwbHlbNF07CiAJc3NpemVfdCByYzsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlyYyA9IDA7CiAKQEAgLTY2NCw3ICs2NjMsNyBAQAogc3RhdGljIHZvaWQgbW9uaXRvcl9jYXJkKHVuc2lnbmVkIGxvbmcgcCkKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gKHN0cnVjdCBjbTQwMDBfZGV2ICopIHA7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXVuc2lnbmVkIHNob3J0IHM7CiAJc3RydWN0IHB0c3JlcSBwdHNyZXE7CiAJaW50IGksIGF0cmM7CkBAIC05MjUsNyArOTI0LDcgQEAKIAkJCWxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgY200MDAwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzc2l6ZV90IHJjOwogCWludCBpLCBqLCBrOwogCkBAIC0xMDQ4LDcgKzEwNDcsNyBAQAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBjbTQwMDBfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXVuc2lnbmVkIHNob3J0IHM7CiAJdW5zaWduZWQgY2hhciB0bXA7CiAJdW5zaWduZWQgY2hhciBpbmZvbGVuOwpAQCAtMTQwMSw3ICsxNDAwLDcgQEAKIHN0YXRpYyBsb25nIGNtbV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNtNDAwMF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCXVuc2lnbmVkIGludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHNpemU7CkBAIC0xNzUyLDE3ICsxNzUxLDEyIEBACiAJaWYgKCFjZmctPmlvLm53aW4pCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyogR2V0IHRoZSBJT2FkZHIgKi8KLQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOwotCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGNmZy0+aW8uZmxhZ3MpOworCXBfZGV2LT5pb19saW5lcyA9IGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKIAotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIGludCBjbTQwMDBfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaywgaW50IGRldm5vKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDQwX2NzLmMKaW5kZXggYzA3NzVjOC4uODE1Y2RlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwNDBfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDA0MF9jcy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xMTAsNyArMTA5LDcgQEAKIHN0YXRpYyB2b2lkIGNtNDA0MF9kb19wb2xsKHVuc2lnbmVkIGxvbmcgZHVtbXkpCiB7CiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldiA9IChzdHJ1Y3QgcmVhZGVyX2RldiAqKSBkdW1teTsKLQl1bnNpZ25lZCBpbnQgb2JzID0geGluYihkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDEKKwl1bnNpZ25lZCBpbnQgb2JzID0geGluYihkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQKIAkJCQkrIFJFR19PRkZTRVRfQlVGRkVSX1NUQVRVUyk7CiAKIAlpZiAoKG9icyAmIEJTUl9CVUxLX0lOX0ZVTEwpKSB7CkBAIC0xNDEsNyArMTQwLDcgQEAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfYnVsa19vdXRfcmVhZHkoc3RydWN0IHJlYWRlcl9kZXYgKmRldikKIHsKIAlpbnQgaSwgcmM7Ci0JaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJZm9yIChpID0gMDsgaSA8IFBPTExfTE9PUF9DT1VOVDsgaSsrKSB7CiAJCWlmICgoeGluYihpb2Jhc2UgKyBSRUdfT0ZGU0VUX0JVRkZFUl9TVEFUVVMpCkBAIC0xNzEsNyArMTcwLDcgQEAKIC8qIFdyaXRlIHRvIFN5bmMgQ29udHJvbCBSZWdpc3RlciAqLwogc3RhdGljIGludCB3cml0ZV9zeW5jX3JlZyh1bnNpZ25lZCBjaGFyIHZhbCwgc3RydWN0IHJlYWRlcl9kZXYgKmRldikKIHsKLQlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+aW8uQmFzZVBvcnQxOworCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJaW50IHJjOwogCiAJcmMgPSB3YWl0X2Zvcl9idWxrX291dF9yZWFkeShkZXYpOwpAQCAtMTg5LDcgKzE4OCw3IEBACiBzdGF0aWMgaW50IHdhaXRfZm9yX2J1bGtfaW5fcmVhZHkoc3RydWN0IHJlYWRlcl9kZXYgKmRldikKIHsKIAlpbnQgaSwgcmM7Ci0JaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAJZm9yIChpID0gMDsgaSA8IFBPTExfTE9PUF9DT1VOVDsgaSsrKSB7CiAJCWlmICgoeGluYihpb2Jhc2UgKyBSRUdfT0ZGU0VUX0JVRkZFUl9TVEFUVVMpCkBAIC0yMTksNyArMjE4LDcgQEAKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByZWFkZXJfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPmlvLkJhc2VQb3J0MTsKKwlpbnQgaW9iYXNlID0gZGV2LT5wX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCXNpemVfdCBieXRlc190b19yZWFkOwogCXVuc2lnbmVkIGxvbmcgaTsKIAlzaXplX3QgbWluX2J5dGVzX3RvX3JlYWQ7CkBAIC0zMjEsNyArMzIwLDcgQEAKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgcmVhZGVyX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWludCBpb2Jhc2UgPSBkZXYtPnBfZGV2LT5pby5CYXNlUG9ydDE7CisJaW50IGlvYmFzZSA9IGRldi0+cF9kZXYtPnJlc291cmNlWzBdLT5zdGFydDsKIAlzc2l6ZV90IHJjOwogCWludCBpOwogCXVuc2lnbmVkIGludCBieXRlc190b193cml0ZTsKQEAgLTUyOCwxNiArNTI3LDEyIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogR2V0IHRoZSBJT2FkZHIgKi8KLQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOwotCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWlmICghKGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQlpZiAoIShjZmctPmlvLmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGNmZy0+aW8uZmxhZ3MpOworCXBfZGV2LT5pb19saW5lcyA9IGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlyYyA9IHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIAotCXJjID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOwogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmcF9kZXYtPmRldiwKIAkJICAgInBjbWNpYV9yZXF1ZXN0X2lvIHJldHVybmVkIDB4JXhcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CkBAIC01NDksMTAgKzU0NCw2IEBACiAJc3RydWN0IHJlYWRlcl9kZXYgKmRldjsKIAlpbnQgZmFpbF9yYzsKIAotCWxpbmstPmlvLkJhc2VQb3J0MiA9IDA7Ci0JbGluay0+aW8uTnVtUG9ydHMyID0gMDsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IDA7Ci0KIAlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIGNtNDA0MF9jb25maWdfY2hlY2ssIE5VTEwpKQogCQlnb3RvIGNzX3JlbGVhc2U7CiAKQEAgLTU2OCw4ICs1NTksOCBAQAogCiAJZGV2ID0gbGluay0+cHJpdjsKIAotCURFQlVHUCgyLCBkZXYsICJkZXZpY2UgIiBERVZJQ0VfTkFNRSAiJWQgYXQgMHglLjR4LTB4JS40eFxuIiwgZGV2bm8sCi0JICAgICAgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxKTsKKwlERUJVR1AoMiwgZGV2LCAiZGV2aWNlICIgREVWSUNFX05BTUUgIiVkIGF0ICVwUlxuIiwgZGV2bm8sCisJICAgICAgbGluay0+cmVzb3VyY2VbMF0pOwogCURFQlVHUCgyLCBkZXYsICI8LSByZWFkZXJfY29uZmlnIChzdWNjKVxuIik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCmluZGV4IDYzYzMyZTMuLjY3YmRiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwpAQCAtODQsMjMgKzg0LDIyIEBACiB7CiAJc3RydWN0IGlwd19kZXYgKmlwdyA9IHByaXZfZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3Jlc291cmNlOwotCW1lbXJlcV90IG1lbXJlcV9hdHRyX21lbW9yeTsKLQltZW1yZXFfdCBtZW1yZXFfY29tbW9uX21lbW9yeTsKIAlpbnQgcmV0OwogCi0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAxNjsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOwogCiAJLyogMHg0MCBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgbGV2ZWwgbW9kZSBpbnRlcnJ1cHRzLiAqLwogCS8qIDB4MDQgZW5hYmxlcyBJUkVRIHBpbi4gKi8KIAlwX2Rldi0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXggfCAweDQ0OwotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlwX2Rldi0+aW9fbGluZXMgPSAxNjsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPmlvLkJhc2VQb3J0MSwgcF9kZXYtPmlvLk51bVBvcnRzMSwKKwlpb19yZXNvdXJjZSA9IHJlcXVlc3RfcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pLAogCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOwogCiAJaWYgKGNmZy0+bWVtLm53aW4gPT0gMCkKQEAgLTEyMCwxMSArMTE5LDggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZXhpdDE7CiAKLQltZW1yZXFfY29tbW9uX21lbW9yeS5DYXJkT2Zmc2V0ID0gY2ZnLT5tZW0ud2luWzBdLmNhcmRfYWRkcjsKLQltZW1yZXFfY29tbW9uX21lbW9yeS5QYWdlID0gMDsKLQogCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnksCi0JCQkJJm1lbXJlcV9jb21tb25fbWVtb3J5KTsKKwkJCQljZmctPm1lbS53aW5bMF0uY2FyZF9hZGRyKTsKIAogCWlmIChyZXQgIT0gMCkKIAkJZ290byBleGl0MjsKQEAgLTE0OSwxMiArMTQ1LDcgQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZXhpdDI7CiAKLQltZW1yZXFfYXR0cl9tZW1vcnkuQ2FyZE9mZnNldCA9IDA7Ci0JbWVtcmVxX2F0dHJfbWVtb3J5LlBhZ2UgPSAwOwotCi0JcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnksCi0JCQkJJm1lbXJlcV9hdHRyX21lbW9yeSk7Ci0KKwlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBpcHctPmhhbmRsZV9hdHRyX21lbW9yeSwgMCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGV4aXQzOwogCkBAIC0xNjYsMTUgKzE1NywxMiBAQAogCXJldHVybiAwOwogCiBleGl0MzoKLQlwY21jaWFfcmVsZWFzZV93aW5kb3cocF9kZXYsIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5KTsKIGV4aXQyOgogCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LkJhc2UsCiAJCQkJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuU2l6ZSk7CiAJCWlvdW5tYXAoaXB3LT5jb21tb25fbWVtb3J5KTsKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCBpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKLQl9IGVsc2UKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCBpcHctPmhhbmRsZV9jb21tb25fbWVtb3J5KTsKKwl9CiBleGl0MToKIAlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOwpAQCAtMTk3LDcgKzE4NSw3IEBACiAKIAlJTklUX1dPUksoJmlwdy0+d29ya19yZWJvb3QsIHNpZ25hbGxlZF9yZWJvb3Rfd29yayk7CiAKLQlpcHdpcmVsZXNzX2luaXRfaGFyZHdhcmVfdjEoaXB3LT5oYXJkd2FyZSwgbGluay0+aW8uQmFzZVBvcnQxLAorCWlwd2lyZWxlc3NfaW5pdF9oYXJkd2FyZV92MShpcHctPmhhcmR3YXJlLCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCiAJCQkJICAgIGlwdy0+YXR0cl9tZW1vcnksIGlwdy0+Y29tbW9uX21lbW9yeSwKIAkJCQkgICAgaXB3LT5pc192Ml9jYXJkLCBzaWduYWxsZWRfcmVib290X2NhbGxiYWNrLAogCQkJCSAgICBpcHcpOwpAQCAtMjA5LDEwICsxOTcsNyBAQAogCXByaW50ayhLRVJOX0lORk8gSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSAiOiBDYXJkIHR5cGUgJXNcbiIsCiAJCQlpcHctPmlzX3YyX2NhcmQgPyAiVjIvVjMiIDogIlYxIik7CiAJcHJpbnRrKEtFUk5fSU5GTyBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FCi0JCQkiOiBJL08gcG9ydHMgMHglMDR4LTB4JTA0eCwgaXJxICVkXG4iLAotCQkJKHVuc2lnbmVkIGludCkgbGluay0+aW8uQmFzZVBvcnQxLAotCQkJKHVuc2lnbmVkIGludCkgKGxpbmstPmlvLkJhc2VQb3J0MSArCi0JCQkJbGluay0+aW8uTnVtUG9ydHMxIC0gMSksCisJCSI6IEkvTyBwb3J0cyAlcFIsIGlycSAlZFxuIiwgbGluay0+cmVzb3VyY2VbMF0sCiAJCQkodW5zaWduZWQgaW50KSBsaW5rLT5pcnEpOwogCWlmIChpcHctPmF0dHJfbWVtb3J5ICYmIGlwdy0+Y29tbW9uX21lbW9yeSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FCkBAIC0yNTAsMTMgKzIzNSwxMiBAQAogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LkJhc2UsCiAJCQkJaXB3LT5yZXF1ZXN0X2F0dHJfbWVtb3J5LlNpemUpOwogCQlpb3VubWFwKGlwdy0+YXR0cl9tZW1vcnkpOwotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgaXB3LT5oYW5kbGVfYXR0cl9tZW1vcnkpOworCiAJfQogCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGlwdy0+cmVxdWVzdF9jb21tb25fbWVtb3J5LkJhc2UsCiAJCQkJaXB3LT5yZXF1ZXN0X2NvbW1vbl9tZW1vcnkuU2l6ZSk7CiAJCWlvdW5tYXAoaXB3LT5jb21tb25fbWVtb3J5KTsKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGlwdy0+aGFuZGxlX2NvbW1vbl9tZW1vcnkpOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAJcmV0dXJuIC0xOwpAQCAtMjc0LDExICsyNTgsNiBAQAogCQkJCWlwdy0+cmVxdWVzdF9hdHRyX21lbW9yeS5TaXplKTsKIAkJaW91bm1hcChpcHctPmF0dHJfbWVtb3J5KTsKIAl9Ci0JaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KGlwdy0+bGluaywgaXB3LT5oYW5kbGVfY29tbW9uX21lbW9yeSk7Ci0JaWYgKGlwdy0+YXR0cl9tZW1vcnkpCi0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhpcHctPmxpbmssIGlwdy0+aGFuZGxlX2F0dHJfbWVtb3J5KTsKLQogCXBjbWNpYV9kaXNhYmxlX2RldmljZShpcHctPmxpbmspOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5oIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uaAppbmRleCA5NmQwZWYzLi5jMjA3YmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5oCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbmV0d29yay5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL25ldHdvcmsuYwppbmRleCA2NTkyMDE2Li45ZmU1MzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbmV0d29yay5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9uZXR3b3JrLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGlwd2lyZWxlc3NfcHBwX2NoYW5uZWxfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgaXB3aXJlbGVzc19wcHBfY2hhbm5lbF9vcHMgPSB7CiAJLnN0YXJ0X3htaXQgPSBpcHdpcmVsZXNzX3BwcF9zdGFydF94bWl0LAogCS5pb2N0bCAgICAgID0gaXB3aXJlbGVzc19wcHBfaW9jdGwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmggYi9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvdHR5LmgKaW5kZXggNGRhNmMyMC4uM2UxNjNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL3R0eS5oCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy90dHkuaApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwppbmRleCAzMDg5MDNlLi45ZWNkNmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCkBAIC03MCw3ICs3MCw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaGRsYy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTU3MiwxOCArNTcxLDE1IEBACiAJCQkgIHVuc2lnbmVkIGludCB2Y2MsCiAJCQkgIHZvaWQgKnByaXZfZGF0YSkKIHsKLQlpZiAoY2ZnLT5pby5ud2luID4gMCkgewotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKLQkJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKLQl9Ci0JcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFjZmctPmlvLm53aW4pCisJCXJldHVybiAtRU5PREVWOworCisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoY2ZnLT5pby5mbGFncyk7CisJcF9kZXYtPmlvX2xpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIGludCBtZ3NscGNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNjEwLDE2ICs2MDYsMTUgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIGluZm8tPmlvX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaW5mby0+aW9fYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICAgICBpbmZvLT5pcnFfbGV2ZWwgPSBsaW5rLT5pcnE7CiAKICAgICBkZXZfaW5mbygmbGluay0+ZGV2LCAiaW5kZXggMHglMDJ4OiIsCiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogICAgIGlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJICAgIHByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEpOwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JICAgIHByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwkgICAgcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKICAgICBwcmludGsoIlxuIik7CiAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wdHkuYyBiL2RyaXZlcnMvY2hhci9wdHkuYwppbmRleCBkODNhNDMxMy4uYWQ0NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtNjIsNyArNjIsOSBAQAogCQlpZiAodHR5LT5kcml2ZXIgPT0gcHRtX2RyaXZlcikKIAkJCWRldnB0c19wdHlfa2lsbCh0dHktPmxpbmspOwogI2VuZGlmCisJCXR0eV91bmxvY2soKTsKIAkJdHR5X3ZoYW5ndXAodHR5LT5saW5rKTsKKwkJdHR5X2xvY2soKTsKIAl9CiB9CiAKQEAgLTE3MSw2ICsxNzMsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogU2VuZCBhIHNpZ25hbCB0byB0aGUgc2xhdmUgKi8KK3N0YXRpYyBpbnQgcHR5X3NpZ25hbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc2lnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBpZCAqcGdycDsKKworCWlmICh0dHktPmxpbmspIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+bGluay0+Y3RybF9sb2NrLCBmbGFncyk7CisJCXBncnAgPSBnZXRfcGlkKHR0eS0+bGluay0+cGdycCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+bGluay0+Y3RybF9sb2NrLCBmbGFncyk7CisKKwkJa2lsbF9wZ3JwKHBncnAsIHNpZywgMSk7CisJCXB1dF9waWQocGdycCk7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwdHlfZmx1c2hfYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnRvID0gdHR5LT5saW5rOwpAQCAtMzIxLDYgKzM0MCw4IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NTUFRMQ0s6IC8qIFNldCBQVCBMb2NrIChkaXNhbGxvdyBzbGF2ZSBvcGVuKSAqLwogCQlyZXR1cm4gcHR5X3NldF9sb2NrKHR0eSwgKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIFRJT0NTSUc6ICAgIC8qIFNlbmQgc2lnbmFsIHRvIG90aGVyIHNpZGUgb2YgcHR5ICovCisJCXJldHVybiBwdHlfc2lnbmFsKHR0eSwgKGludCkgYXJnKTsKIAl9CiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KQEAgLTQ3Niw2ICs0OTcsOCBAQAogCQlyZXR1cm4gcHR5X3NldF9sb2NrKHR0eSwgKGludCBfX3VzZXIgKilhcmcpOwogCWNhc2UgVElPQ0dQVE46IC8qIEdldCBQVCBOdW1iZXIgKi8KIAkJcmV0dXJuIHB1dF91c2VyKHR0eS0+aW5kZXgsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKKwljYXNlIFRJT0NTSUc6ICAgIC8qIFNlbmQgc2lnbmFsIHRvIG90aGVyIHNpZGUgb2YgcHR5ICovCisJCXJldHVybiBwdHlfc2lnbmFsKHR0eSwgKGludCkgYXJnKTsKIAl9CiAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwpAQCAtNjI2LDcgKzY0OSw3IEBACiAgKgkJYWxsb2NhdGVkX3B0eXNfbG9jayBoYW5kbGVzIHRoZSBsaXN0IG9mIGZyZWUgcHR5IG51bWJlcnMKICAqLwogCi1zdGF0aWMgaW50IF9fcHRteF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBwdG14X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmV0dmFsOwpAQCAtNjM1LDExICs2NTgsMTQgQEAKIAlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKIAogCS8qIGZpbmQgYSBkZXZpY2UgdGhhdCBpcyBub3QgaW4gdXNlLiAqLworCXR0eV9sb2NrKCk7CiAJaW5kZXggPSBkZXZwdHNfbmV3X2luZGV4KGlub2RlKTsKKwl0dHlfdW5sb2NrKCk7CiAJaWYgKGluZGV4IDwgMCkKIAkJcmV0dXJuIGluZGV4OwogCiAJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwl0dHlfbG9jaygpOwogCXR0eSA9IHR0eV9pbml0X2RldihwdG1fZHJpdmVyLCBpbmRleCwgMSk7CiAJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCkBAIC02NTcsMjYgKzY4MywyMSBAQAogCQlnb3RvIG91dDE7CiAKIAlyZXR2YWwgPSBwdG1fZHJpdmVyLT5vcHMtPm9wZW4odHR5LCBmaWxwKTsKLQlpZiAoIXJldHZhbCkKLQkJcmV0dXJuIDA7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQyOwogb3V0MToKKwl0dHlfdW5sb2NrKCk7CisJcmV0dXJuIHJldHZhbDsKK291dDI6CisJdHR5X3VubG9jaygpOwogCXR0eV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKIAlyZXR1cm4gcmV0dmFsOwogb3V0OgogCWRldnB0c19raWxsX2luZGV4KGlub2RlLCBpbmRleCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgcHRteF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCWludCByZXQ7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IF9fcHRteF9vcGVuKGlub2RlLCBmaWxwKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHRteF9mb3BzOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdW5peDk4X3B0eV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jIGIvZHJpdmVycy9jaGFyL3Jpc2NvbTguYwppbmRleCBiMDIzMzJhLi5hZjRkZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIApAQCAtMTE4NCw2ICsxMTgzLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgbmV3aW5mbywgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCW11dGV4X2xvY2soJnBvcnQtPnBvcnQubXV0ZXgpOwogCWNoYW5nZV9zcGVlZCA9ICgocG9ydC0+cG9ydC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSAhPQogCQkJKHRtcC5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSk7CiAKQEAgLTExOTEsOCArMTE5MSwxMCBAQAogCQlpZiAoKHRtcC5jbG9zZV9kZWxheSAhPSBwb3J0LT5wb3J0LmNsb3NlX2RlbGF5KSB8fAogCQkgICAgKHRtcC5jbG9zaW5nX3dhaXQgIT0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQpIHx8CiAJCSAgICAoKHRtcC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KLQkJICAgICAocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKQorCQkgICAgIChwb3J0LT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpIHsKKwkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJCQlyZXR1cm4gLUVQRVJNOworCQl9CiAJCXBvcnQtPnBvcnQuZmxhZ3MgPSAoKHBvcnQtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKIAkJCSAgICAgICAodG1wLmZsYWdzICYgQVNZTkNfVVNSX01BU0spKTsKIAl9IGVsc2UgIHsKQEAgLTEyMDgsNiArMTIxMCw3IEBACiAJCXJjX2NoYW5nZV9zcGVlZCh0dHksIGJwLCBwb3J0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmlzY29tX2xvY2ssIGZsYWdzKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyMCwxMiArMTIyMywxNSBAQAogCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CiAJdG1wLnR5cGUgPSBQT1JUX0NJUlJVUzsKIAl0bXAubGluZSA9IHBvcnQgLSByY19wb3J0OworCisJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJdG1wLnBvcnQgPSBicC0+YmFzZTsKIAl0bXAuaXJxICA9IGJwLT5pcnE7CiAJdG1wLmZsYWdzID0gcG9ydC0+cG9ydC5mbGFnczsKIAl0bXAuYmF1ZF9iYXNlID0gKFJDX09TQ0ZSRVEgKyBDRDE4MF9UUEMvMikgLyBDRDE4MF9UUEM7CiAJdG1wLmNsb3NlX2RlbGF5ID0gcG9ydC0+cG9ydC5jbG9zZV9kZWxheSAqIEhaLzEwMDsKIAl0bXAuY2xvc2luZ193YWl0ID0gcG9ydC0+cG9ydC5jbG9zaW5nX3dhaXQgKiBIWi8xMDA7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAl0bXAueG1pdF9maWZvX3NpemUgPSBDRDE4MF9ORklGTzsKIAlyZXR1cm4gY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZih0bXApKSA/IC1FRkFVTFQgOiAwOwogfQpAQCAtMTI0MiwxNCArMTI0OCwxMCBAQAogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFRJT0NHU0VSSUFMOgotCQlsb2NrX2tlcm5lbCgpOwogCQlyZXR2YWwgPSByY19nZXRfc2VyaWFsX2luZm8ocG9ydCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAJY2FzZSBUSU9DU1NFUklBTDoKLQkJbG9ja19rZXJuZWwoKTsKIAkJcmV0dmFsID0gcmNfc2V0X3NlcmlhbF9pbmZvKHR0eSwgcG9ydCwgYXJncCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JvY2tldC5jIGIvZHJpdmVycy9jaGFyL3JvY2tldC5jCmluZGV4IDBlMjlhMjMuLjc5YzNiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYworKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKQEAgLTczLDcgKzczLDYgQEAKICNpbmNsdWRlIDxsaW51eC90dHlfZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CkBAIC0xMDE3LDYgKzEwMTYsNyBAQAogCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydChwb3J0LCB0dHksIGZpbHApID09IDApCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAljcCA9ICZpbmZvLT5jaGFubmVsOwogCS8qCiAJICogQmVmb3JlIHdlIGRyb3AgRFRSLCBtYWtlIHN1cmUgdGhlIFVBUlQgdHJhbnNtaXR0ZXIKQEAgLTEwNjAsOSArMTA2MCwxMyBAQAogCQkJaW5mby0+eG1pdF9idWYgPSBOVUxMOwogCQl9CiAJfQorCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOwogCWluZm8tPnBvcnQuZmxhZ3MgJj0gfihBU1lOQ19JTklUSUFMSVpFRCB8IEFTWU5DX0NMT1NJTkcgfCBBU1lOQ19OT1JNQUxfQUNUSVZFKTsKIAl0dHktPmNsb3NpbmcgPSAwOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiAJdHR5X3BvcnRfdHR5X3NldChwb3J0LCBOVUxMKTsKKwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+Y2xvc2Vfd2FpdCk7CiAJY29tcGxldGVfYWxsKCZpbmZvLT5jbG9zZV93YWl0KTsKIAlhdG9taWNfZGVjKCZycF9udW1fcG9ydHNfb3Blbik7CkBAIC0xMjEwLDExICsxMjE0LDEzIEBACiAJaWYgKCFyZXRpbmZvKQogCQlyZXR1cm4gLUVGQVVMVDsKIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mICh0bXApKTsKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAl0bXAubGluZSA9IGluZm8tPmxpbmU7CiAJdG1wLmZsYWdzID0gaW5mby0+ZmxhZ3M7CiAJdG1wLmNsb3NlX2RlbGF5ID0gaW5mby0+cG9ydC5jbG9zZV9kZWxheTsKIAl0bXAuY2xvc2luZ193YWl0ID0gaW5mby0+cG9ydC5jbG9zaW5nX3dhaXQ7CiAJdG1wLnBvcnQgPSByY2t0cHRfaW9fYWRkclsoaW5mby0+bGluZSA+PiA1KSAmIDNdOworCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAKIAlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZiAoKnJldGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjI5LDEwICsxMjM1LDEzIEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfc2VyaWFsLCBuZXdfaW5mbywgc2l6ZW9mIChuZXdfc2VyaWFsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCXsKLQkJaWYgKChuZXdfc2VyaWFsLmZsYWdzICYgflJPQ0tFVF9VU1JfTUFTSykgIT0gKGluZm8tPmZsYWdzICYgflJPQ0tFVF9VU1JfTUFTSykpCisJCWlmICgobmV3X3NlcmlhbC5mbGFncyAmIH5ST0NLRVRfVVNSX01BU0spICE9IChpbmZvLT5mbGFncyAmIH5ST0NLRVRfVVNSX01BU0spKSB7CisJCQltdXRleF91bmxvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQogCQlpbmZvLT5mbGFncyA9ICgoaW5mby0+ZmxhZ3MgJiB+Uk9DS0VUX1VTUl9NQVNLKSB8IChuZXdfc2VyaWFsLmZsYWdzICYgUk9DS0VUX1VTUl9NQVNLKSk7CiAJCWNvbmZpZ3VyZV9yX3BvcnQodHR5LCBpbmZvLCBOVUxMKTsKIAkJcmV0dXJuIDA7CkBAIC0xMjUwLDYgKzEyNTksNyBAQAogCQl0dHktPmFsdF9zcGVlZCA9IDIzMDQwMDsKIAlpZiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX1NQRF9NQVNLKSA9PSBST0NLRVRfU1BEX1dBUlApCiAJCXR0eS0+YWx0X3NwZWVkID0gNDYwODAwOworCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAKIAljb25maWd1cmVfcl9wb3J0KHR0eSwgaW5mbywgTlVMTCk7CiAJcmV0dXJuIDA7CkBAIC0xMzI1LDggKzEzMzUsNiBAQAogCWlmIChjbWQgIT0gUkNLUF9HRVRfUE9SVFMgJiYgcm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF9pb2N0bCIpKQogCQlyZXR1cm4gLUVOWElPOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBSQ0tQX0dFVF9TVFJVQ1Q6CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgaW5mbywgc2l6ZW9mIChzdHJ1Y3Qgcl9wb3J0KSkpCkBAIC0xMzUwLDcgKzEzNTgsNiBAQAogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9JT0NUTENNRDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NzEsNyArMTQ3OCw2IEBACiAJICAgICAgIGppZmZpZXMpOwogCXByaW50ayhLRVJOX0lORk8gImNwcz0lZC4uLlxuIiwgaW5mby0+Y3BzKTsKICNlbmRpZgotCWxvY2tfa2VybmVsKCk7CiAJd2hpbGUgKDEpIHsKIAkJdHhjbnQgPSBzR2V0VHhDbnQoY3ApOwogCQlpZiAoIXR4Y250KSB7CkBAIC0xNDk5LDcgKzE1MDUsNiBAQAogCQkJYnJlYWs7CiAJfQogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAjaWZkZWYgUk9DS0VUX0RFQlVHX1dBSVRfVU5USUxfU0VOVAogCXByaW50ayhLRVJOX0lORk8gInR4Y250ID0gJWQgKGppZmY9JWx1KS4uLmRvbmVcbiIsIHR4Y250LCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMTUxMiw2ICsxNTE3LDcgQEAKIHsKIAlDSEFOTkVMX3QgKmNwOwogCXN0cnVjdCByX3BvcnQgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAocm9ja2V0X3BhcmFub2lhX2NoZWNrKGluZm8sICJycF9oYW5ndXAiKSkKIAkJcmV0dXJuOwpAQCAtMTUyMCwxMSArMTUyNiwxNSBAQAogCXByaW50ayhLRVJOX0lORk8gInJwX2hhbmd1cCBvZiB0dHlSJWQuLi5cbiIsIGluZm8tPmxpbmUpOwogI2VuZGlmCiAJcnBfZmx1c2hfYnVmZmVyKHR0eSk7Ci0JaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKQorCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+cG9ydC5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKKwl9CiAJaWYgKGluZm8tPnBvcnQuY291bnQpCiAJCWF0b21pY19kZWMoJnJwX251bV9wb3J0c19vcGVuKTsKIAljbGVhcl9iaXQoKGluZm8tPmFpb3AgKiA4KSArIGluZm8tPmNoYW4sICh2b2lkICopICZ4bWl0X2ZsYWdzW2luZm8tPmJvYXJkXSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAl0dHlfcG9ydF9oYW5ndXAoJmluZm8tPnBvcnQpOwogCkBAIC0xNTM1LDcgKzE1NDUsNyBAQAogCXNEaXNDVFNGbG93Q3RsKGNwKTsKIAlzRGlzVHhTb2Z0Rmxvd0N0bChjcCk7CiAJc0NsclR4WE9GRihjcCk7Ci0JaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfSU5JVElBTElaRUQ7CisJY2xlYXJfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJmluZm8tPnBvcnQuZmxhZ3MpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc2VsZWN0aW9uLmMgYi9kcml2ZXJzL2NoYXIvc2VsZWN0aW9uLmMKaW5kZXggZjk3YjllOC4uZWJhZTM0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCisrKyBiL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlbGVjdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Rpb2NsLmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKIC8qIERvbid0IHRha2UgdGhpcyBmcm9tIDxjdHlwZS5oPjogMDExLTAxNSBvbiB0aGUgc2NyZWVuIGFyZW4ndCBzcGFjZXMgKi8KICNkZWZpbmUgaXNzcGFjZShjKQkoKGMpID09ICcgJykKQEAgLTMxMiwxMiArMzEzLDIwIEBACiAJc3RydWN0ICB0dHlfbGRpc2MgKmxkOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCisJLyogYWx3YXlzIGNhbGxlZCB3aXRoIEJUTSBmcm9tIHZ0X2lvY3RsICovCisJV0FSTl9PTighdHR5X2xvY2tlZCgpKTsKKwogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAlwb2tlX2JsYW5rZWRfY29uc29sZSgpOwogCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAotCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7Ci0JCisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYgKCFsZCkgeworCQl0dHlfdW5sb2NrKCk7CisJCWxkID0gdHR5X2xkaXNjX3JlZl93YWl0KHR0eSk7CisJCXR0eV9sb2NrKCk7CisJfQorCiAJYWRkX3dhaXRfcXVldWUoJnZjLT5wYXN0ZV93YWl0LCAmd2FpdCk7CiAJd2hpbGUgKHNlbF9idWZmZXIgJiYgc2VsX2J1ZmZlcl9sdGggPiBwYXN0ZWQpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCBlY2JlNDc5Li5mNjQ2NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC0xNTA1LDcgKzE1MDUsNyBAQAogCXByaW50aygiY3lfaW9jdGwgJXMsIGNtZCA9ICV4IGFyZyA9ICVseFxuIiwgdHR5LT5uYW1lLCBjbWQsIGFyZyk7CS8qICovCiAjZW5kaWYKIAotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDWUdFVE1PTjoKQEAgLTE1NjEsNyArMTU2MSw3IEBACiAJZGVmYXVsdDoKIAkJcmV0X3ZhbCA9IC1FTk9JT0NUTENNRDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAogI2lmZGVmIFNFUklBTF9ERUJVR19PVEhFUgogCXByaW50aygiY3lfaW9jdGwgZG9uZVxuIik7CkBAIC0xNzg2LDcgKzE3ODYsOSBAQAogCQkgICAgICAgdHR5LT5uYW1lLCBpbmZvLT5jb3VudCk7CiAJCS8qKi8KICNlbmRpZgotCQkgICAgc2NoZWR1bGUoKTsKKwkJdHR5X3VubG9jaygpOworCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCmluZGV4IDJjMjRmY2QuLjlmODQ5NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTEzNjUsNyArMTM2NSw5IEBACiAJCQlyZXR2YWwgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQorCQl0dHlfdW5sb2NrKCk7CiAJCXNjaGVkdWxlKCk7CisJCXR0eV9sb2NrKCk7CiAJfQogCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKQEAgLTE4NjMsOCArMTg2NSw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCWxvY2tfa2VybmVsKCk7Ci0KKwltdXRleF9sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAljaGFuZ2Vfc3BlZWQgPSAoKHBvcnQtPnBvcnQuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgIT0KIAkJCSh0bXAuZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykpOwogCWNoYW5nZV9zcGVlZCB8PSAodG1wLmN1c3RvbV9kaXZpc29yICE9IHBvcnQtPmN1c3RvbV9kaXZpc29yKTsKQEAgLTE4NzUsNyArMTg3Niw3IEBACiAJCSAgICAoKHRtcC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykgIT0KIAkJICAgICAocG9ydC0+cG9ydC5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKSB7CiAJCQlmdW5jX2V4aXQoKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAJCXBvcnQtPnBvcnQuZmxhZ3MgPSAoKHBvcnQtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spIHwKQEAgLTE4OTIsNyArMTg5Myw3IEBACiAJCXN4X2NoYW5nZV9zcGVlZChicCwgcG9ydCk7CiAKIAlmdW5jX2V4aXQoKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5wb3J0Lm11dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkwNiw3ICsxOTA3LDcgQEAKIAlmdW5jX2VudGVyKCk7CiAKIAltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcG9ydC0+cG9ydC5tdXRleCk7CiAJdG1wLnR5cGUgPSBQT1JUX0NJUlJVUzsKIAl0bXAubGluZSA9IHBvcnQgLSBzeF9wb3J0OwogCXRtcC5wb3J0ID0gYnAtPmJhc2U7CkBAIC0xOTE3LDcgKzE5MTgsNyBAQAogCXRtcC5jbG9zaW5nX3dhaXQgPSBwb3J0LT5wb3J0LmNsb3Npbmdfd2FpdCAqIEhaLzEwMDsKIAl0bXAuY3VzdG9tX2Rpdmlzb3IgPSAgcG9ydC0+Y3VzdG9tX2Rpdmlzb3I7CiAJdG1wLnhtaXRfZmlmb19zaXplID0gQ0QxODZ4X05GSUZPOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnBvcnQtPnBvcnQubXV0ZXgpOwogCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKHRtcCkpKSB7CiAJCWZ1bmNfZXhpdCgpOwogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKaW5kZXggNjA0OWZkNy4uZjIxNjdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMKQEAgLTgwNyw3ICs4MDcsNiBAQAogCQl0aW1lb3V0ID0gSFo7CiAJdGVuZCA9IGppZmZpZXMgKyB0aW1lb3V0OwogCi0JbG9ja19rZXJuZWwoKTsKIAl3aGlsZSAoc3RsX2RhdGFzdGF0ZShwb3J0cCkpIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJYnJlYWs7CkBAIC04MTUsNyArODE0LDYgQEAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGVuZCkpCiAJCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDI5LDYgKzEwMjcsOCBAQAogCXByX2RlYnVnKCJzdGxfZ2V0c2VyaWFsKHBvcnRwPSVwLHNwPSVwKVxuIiwgcG9ydHAsIHNwKTsKIAogCW1lbXNldCgmc2lvLCAwLCBzaXplb2Yoc3RydWN0IHNlcmlhbF9zdHJ1Y3QpKTsKKworCW11dGV4X2xvY2soJnBvcnRwLT5wb3J0Lm11dGV4KTsKIAlzaW8ubGluZSA9IHBvcnRwLT5wb3J0bnI7CiAJc2lvLnBvcnQgPSBwb3J0cC0+aW9hZGRyOwogCXNpby5mbGFncyA9IHBvcnRwLT5wb3J0LmZsYWdzOwpAQCAtMTA0OCw2ICsxMDQ4LDcgQEAKIAlicmRwID0gc3RsX2JyZHNbcG9ydHAtPmJyZG5yXTsKIAlpZiAoYnJkcCAhPSBOVUxMKQogCQlzaW8uaXJxID0gYnJkcC0+aXJxOworCW11dGV4X3VubG9jaygmcG9ydHAtPnBvcnQubXV0ZXgpOwogCiAJcmV0dXJuIGNvcHlfdG9fdXNlcihzcCwgJnNpbywgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkgPyAtRUZBVUxUIDogMDsKIH0KQEAgLTEwNjksMTIgKzEwNzAsMTUgQEAKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmc2lvLCBzcCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCiAJCXJldHVybiAtRUZBVUxUOworCW11dGV4X2xvY2soJnBvcnRwLT5wb3J0Lm11dGV4KTsKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKIAkJaWYgKChzaW8uYmF1ZF9iYXNlICE9IHBvcnRwLT5iYXVkX2Jhc2UpIHx8CiAJCSAgICAoc2lvLmNsb3NlX2RlbGF5ICE9IHBvcnRwLT5jbG9zZV9kZWxheSkgfHwKIAkJICAgICgoc2lvLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQotCQkgICAgKHBvcnRwLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSkpCisJCSAgICAocG9ydHAtPnBvcnQuZmxhZ3MgJiB+QVNZTkNfVVNSX01BU0spKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CiAJCQlyZXR1cm4gLUVQRVJNOworCQl9CiAJfSAKIAogCXBvcnRwLT5wb3J0LmZsYWdzID0gKHBvcnRwLT5wb3J0LmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CkBAIC0xMDgzLDYgKzEwODcsNyBAQAogCXBvcnRwLT5jbG9zZV9kZWxheSA9IHNpby5jbG9zZV9kZWxheTsKIAlwb3J0cC0+Y2xvc2luZ193YWl0ID0gc2lvLmNsb3Npbmdfd2FpdDsKIAlwb3J0cC0+Y3VzdG9tX2Rpdmlzb3IgPSBzaW8uY3VzdG9tX2Rpdmlzb3I7CisJbXV0ZXhfdW5sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CiAJc3RsX3NldHBvcnQocG9ydHAsIHR0eS0+dGVybWlvcyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ3LDggKzExNTIsNiBAQAogCiAJcmMgPSAwOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUSU9DR1NFUklBTDoKIAkJcmMgPSBzdGxfZ2V0c2VyaWFsKHBvcnRwLCBhcmdwKTsKQEAgLTExNzMsNyArMTE3Niw2IEBACiAJCXJjID0gLUVOT0lPQ1RMQ01EOwogCQlicmVhazsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjMyNyw2ICsyMzI5LDcgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAorCW11dGV4X2xvY2soJnBvcnRwLT5wb3J0Lm11dGV4KTsKIAlwb3J0cC0+c3RhdHMuc3RhdGUgPSBwb3J0cC0+aXN0YXRlOwogCXBvcnRwLT5zdGF0cy5mbGFncyA9IHBvcnRwLT5wb3J0LmZsYWdzOwogCXBvcnRwLT5zdGF0cy5od2lkID0gcG9ydHAtPmh3aWQ7CkBAIC0yMzU4LDYgKzIzNjEsNyBAQAogCQkoU1RMX1RYQlVGU0laRSAtICh0YWlsIC0gaGVhZCkpOwogCiAJcG9ydHAtPnN0YXRzLnNpZ25hbHMgPSAodW5zaWduZWQgbG9uZykgc3RsX2dldHNpZ25hbHMocG9ydHApOworCW11dGV4X3VubG9jaygmcG9ydHAtPnBvcnQubXV0ZXgpOwogCiAJcmV0dXJuIGNvcHlfdG9fdXNlcihjcCwgJnBvcnRwLT5zdGF0cywKIAkJCSAgICBzaXplb2YoY29tc3RhdHNfdCkpID8gLUVGQVVMVCA6IDA7CkBAIC0yMzgyLDEwICsyMzg2LDEyIEBACiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwltdXRleF9sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CiAJbWVtc2V0KCZwb3J0cC0+c3RhdHMsIDAsIHNpemVvZihjb21zdGF0c190KSk7CiAJcG9ydHAtPnN0YXRzLmJyZCA9IHBvcnRwLT5icmRucjsKIAlwb3J0cC0+c3RhdHMucGFuZWwgPSBwb3J0cC0+cGFuZWxucjsKIAlwb3J0cC0+c3RhdHMucG9ydCA9IHBvcnRwLT5wb3J0bnI7CisJbXV0ZXhfdW5sb2NrKCZwb3J0cC0+cG9ydC5tdXRleCk7CiAJcmV0dXJuIGNvcHlfdG9fdXNlcihjcCwgJnBvcnRwLT5zdGF0cywKIAkJCSAgICBzaXplb2YoY29tc3RhdHNfdCkpID8gLUVGQVVMVCA6IDA7CiB9CkBAIC0yNDUxLDcgKzI0NTcsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlyYyA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDT01fR0VUUE9SVFNUQVRTOgogCQlyYyA9IHN0bF9nZXRwb3J0c3RhdHMoTlVMTCwgTlVMTCwgYXJncCk7CkBAIC0yNDcyLDcgKzI0NzcsNiBAQAogCQlyYyA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeC5jIGIvZHJpdmVycy9jaGFyL3N4LmMKaW5kZXggYTgxZWM0Zi4uNWIyNGRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N4LmMKKysrIGIvZHJpdmVycy9jaGFyL3N4LmMKQEAgLTE2OTksNyArMTY5OSw3IEBACiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCiAJc3hfZHByaW50ayhTWF9ERUJVR19GSVJNV0FSRSwgIklPQ1RMICV4OiAlbHhcbiIsIGNtZCwgYXJnKTsKIApAQCAtMTg0OCw3ICsxODQ4LDcgQEAKIAkJYnJlYWs7CiAJfQogb3V0OgotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJZnVuY19leGl0KCk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAlpbnQgcnY7CiAKIAlmdW5jX2VudGVyKCk7Ci0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCiAJaWYgKGZsYWcpCiAJCXJ2ID0gc3hfc2VuZF9jb21tYW5kKHBvcnQsIEhTX1NUQVJULCAtMSwgSFNfSURMRV9CUkVBSyk7CkBAIC0xODY4LDcgKzE4NjgsNyBAQAogCWlmIChydiAhPSAxKQogCQlwcmludGsoS0VSTl9FUlIgInN4OiBjb3VsZG4ndCBzZW5kIGJyZWFrICgleCkuXG4iLAogCQkJcmVhZF9zeF9ieXRlKHBvcnQtPmJvYXJkLCBDSEFOX09GRlNFVChwb3J0LCBoaV9oc3RhdCkpKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCWZ1bmNfZXhpdCgpOwogCXJldHVybiAwOwogfQpAQCAtMTkwOSw3ICsxOTA5LDcgQEAKIAkvKiBmdW5jX2VudGVyMigpOyAqLwogCiAJcmMgPSAwOwotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVElPQ0dTRVJJQUw6CiAJCXJjID0gZ3NfZ2V0c2VyaWFsKCZwb3J0LT5ncywgYXJncCk7CkBAIC0xOTIxLDcgKzE5MjEsNyBAQAogCQlyYyA9IC1FTk9JT0NUTENNRDsKIAkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAKIAkvKiBmdW5jX2V4aXQoKTsgKi8KIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCmluZGV4IDA2NThmYzUuLmEyYTU4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGluay5jCkBAIC04MSw3ICs4MSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMjQzNiw3ICsyNDM1LDkgQEAKIAlpZiAoIXVzZXJfaWNvdW50KSB7CiAJCW1lbXNldCgmaW5mby0+aWNvdW50LCAwLCBzaXplb2YoaW5mby0+aWNvdW50KSk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCUNPUFlfVE9fVVNFUihlcnIsIHVzZXJfaWNvdW50LCAmaW5mby0+aWNvdW50LCBzaXplb2Yoc3RydWN0IG1nc2xfaWNvdW50KSk7CisJCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0yNDYxLDcgKzI0NjIsOSBAQAogCQlwcmludGsoIiVzKCVkKTptZ3NsX2dldF9wYXJhbXMoJXMpXG4iLAogCQkJIF9fRklMRV9fLF9fTElORV9fLCBpbmZvLT5kZXZpY2VfbmFtZSk7CiAJCQkKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAlDT1BZX1RPX1VTRVIoZXJyLHVzZXJfcGFyYW1zLCAmaW5mby0+cGFyYW1zLCBzaXplb2YoTUdTTF9QQVJBTVMpKTsKKwltdXRleF91bmxvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCWlmIChlcnIpIHsKIAkJaWYgKCBkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPICkKIAkJCXByaW50ayggIiVzKCVkKTptZ3NsX2dldF9wYXJhbXMoJXMpIHVzZXIgYnVmZmVyIGNvcHkgZmFpbGVkXG4iLApAQCAtMjUwMSwxMSArMjUwNCwxMyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAJCisJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmlycV9zcGlubG9jayxmbGFncyk7CiAJbWVtY3B5KCZpbmZvLT5wYXJhbXMsJnRtcF9wYXJhbXMsc2l6ZW9mKE1HU0xfUEFSQU1TKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+aXJxX3NwaW5sb2NrLGZsYWdzKTsKIAkKICAJbWdzbF9jaGFuZ2VfcGFyYW1zKGluZm8pOworCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCiAJcmV0dXJuIDA7CiAJCkBAIC0yOTM1LDcgKzI5NDAsNiBAQAogCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IG1nc2xfc3RydWN0ICogaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldDsKIAkKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6bWdzbF9pb2N0bCAlcyBjbWQ9JTA4WFxuIiwgX19GSUxFX18sX19MSU5FX18sCkBAIC0yOTUwLDEwICsyOTU0LDcgQEAKIAkJICAgIHJldHVybiAtRUlPOwogCX0KIAotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gbWdzbF9pb2N0bF9jb21tb24oaW5mbywgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBtZ3NsX2lvY3RsX2NvbW1vbihpbmZvLCBjbWQsIGFyZyk7CiB9CiAKIHN0YXRpYyBpbnQgbWdzbF9pb2N0bF9jb21tb24oc3RydWN0IG1nc2xfc3RydWN0ICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTMxMDksMTIgKzMxMTAsMTQgQEAKIAogCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmaW5mby0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKQkJCSAKIAkJZ290byBjbGVhbnVwOwotCQkJCisKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKICAJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKICAJCW1nc2xfd2FpdF91bnRpbF9zZW50KHR0eSwgaW5mby0+dGltZW91dCk7CiAJbWdzbF9mbHVzaF9idWZmZXIodHR5KTsKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAlzaHV0ZG93bihpbmZvKTsKKwltdXRleF91bmxvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCiAJdHR5X3BvcnRfY2xvc2VfZW5kKCZpbmZvLT5wb3J0LCB0dHkpOwkKIAlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CkBAIC0zMTYyLDcgKzMxNjUsNiBAQAogCSAqIE5vdGU6IHVzZSB0aWdodCB0aW1pbmdzIGhlcmUgdG8gc2F0aXNmeSB0aGUgTklTVC1QQ1RTLgogCSAqLyAKIAotCWxvY2tfa2VybmVsKCk7CiAJaWYgKCBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICkgewogCSAgICAgICAJY2hhcl90aW1lID0gaW5mby0+dGltZW91dC8oMzIgKiA1KTsKIAkJaWYgKCFjaGFyX3RpbWUpCkBAIC0zMTkyLDcgKzMxOTQsNiBAQAogCQkJCWJyZWFrOwogCQl9CiAJfQotCXVubG9ja19rZXJuZWwoKTsKICAgICAgIAogZXhpdDoKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKQEAgLTMzNDgsNyArMzM0OSw5IEBACiAJCQlwcmludGsoIiVzKCVkKTpibG9ja190aWxfcmVhZHkgYmxvY2tpbmcgb24gJXMgY291bnQ9JWRcbiIsCiAJCQkJIF9fRklMRV9fLF9fTElORV9fLCB0dHktPmRyaXZlci0+bmFtZSwgcG9ydC0+Y291bnQgKTsKIAkJCQkgCisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggMzM0Y2Y1Yy4uZmVmODBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTQwLDggKzQwLDggQEAKICNkZWZpbmUgREJHQkgoZm10KSBpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfQkgpIHByaW50ayBmbXQKICNkZWZpbmUgREJHSVNSKGZtdCkgaWYgKGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lTUikgcHJpbnRrIGZtdAogI2RlZmluZSBEQkdEQVRBKGluZm8sIGJ1Ziwgc2l6ZSwgbGFiZWwpIGlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9EQVRBKSB0cmFjZV9ibG9jaygoaW5mbyksIChidWYpLCAoc2l6ZSksIChsYWJlbCkpCi0vLyNkZWZpbmUgREJHVEJVRihpbmZvKSBkdW1wX3RidWZzKGluZm8pCi0vLyNkZWZpbmUgREJHUkJVRihpbmZvKSBkdW1wX3JidWZzKGluZm8pCisvKiNkZWZpbmUgREJHVEJVRihpbmZvKSBkdW1wX3RidWZzKGluZm8pKi8KKy8qI2RlZmluZSBEQkdSQlVGKGluZm8pIGR1bXBfcmJ1ZnMoaW5mbykqLwogCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYyLDcgKzYyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTY3NiwxMiArNjc1LDE0IEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAlpbmZvLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSA/IDEgOiAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPm5ldGxvY2ssIGZsYWdzKTsKIAlpZiAoaW5mby0+bmV0Y291bnQpIHsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5uZXRsb2NrLCBmbGFncyk7CisJCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJaW5mby0+cG9ydC5jb3VudCsrOwpAQCAtNjkzLDcgKzY5NCw3IEBACiAJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byBjbGVhbnVwOwogCX0KLQorCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJcmV0dmFsID0gYmxvY2tfdGlsX3JlYWR5KHR0eSwgZmlscCwgaW5mbyk7CiAJaWYgKHJldHZhbCkgewogCQlEQkdJTkZPKCgiJXMgYmxvY2tfdGlsX3JlYWR5IHJjPSVkXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSwgcmV0dmFsKSk7CkBAIC03MjUsMTIgKzcyNiwxNCBAQAogCWlmICh0dHlfcG9ydF9jbG9zZV9zdGFydCgmaW5mby0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKQogCQlnb3RvIGNsZWFudXA7CiAKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKICAJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKICAJCXdhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPnRpbWVvdXQpOwogCWZsdXNoX2J1ZmZlcih0dHkpOwogCXR0eV9sZGlzY19mbHVzaCh0dHkpOwogCiAJc2h1dGRvd24oaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAogCXR0eV9wb3J0X2Nsb3NlX2VuZCgmaW5mby0+cG9ydCwgdHR5KTsKIAlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CkBAIC03NDEsMTcgKzc0NCwyMyBAQAogc3RhdGljIHZvaWQgaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChzYW5pdHlfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAiaGFuZ3VwIikpCiAJCXJldHVybjsKIAlEQkdJTkZPKCgiJXMgaGFuZ3VwXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwogCiAJZmx1c2hfYnVmZmVyKHR0eSk7CisKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAlzaHV0ZG93bihpbmZvKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5wb3J0LmxvY2ssIGZsYWdzKTsKIAlpbmZvLT5wb3J0LmNvdW50ID0gMDsKIAlpbmZvLT5wb3J0LmZsYWdzICY9IH5BU1lOQ19OT1JNQUxfQUNUSVZFOwogCWluZm8tPnBvcnQudHR5ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5wb3J0Lm9wZW5fd2FpdCk7CiB9CkBAIC05MDEsOCArOTEwLDYgQEAKIAkgKiBOb3RlOiB1c2UgdGlnaHQgdGltaW5ncyBoZXJlIHRvIHNhdGlzZnkgdGhlIE5JU1QtUENUUy4KIAkgKi8KIAotCWxvY2tfa2VybmVsKCk7Ci0KIAlpZiAoaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSkgewogCSAgICAgICAJY2hhcl90aW1lID0gaW5mby0+dGltZW91dC8oMzIgKiA1KTsKIAkJaWYgKCFjaGFyX3RpbWUpCkBAIC05MjAsOCArOTI3LDYgQEAKIAkJaWYgKHRpbWVvdXQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBvcmlnX2ppZmZpZXMgKyB0aW1lb3V0KSkKIAkJCWJyZWFrOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0KIGV4aXQ6CiAJREJHSU5GTygoIiVzIHdhaXRfdW50aWxfc2VudCBleGl0XG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwogfQpAQCAtMTA0MSw4ICsxMDQ2LDM3IEBACiAJCSAgICByZXR1cm4gLUVJTzsKIAl9CiAKLQlsb2NrX2tlcm5lbCgpOwotCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1HU0xfSU9DV0FJVEVWRU5UOgorCQlyZXR1cm4gd2FpdF9tZ3NsX2V2ZW50KGluZm8sIGFyZ3ApOworCWNhc2UgVElPQ01JV0FJVDoKKwkJcmV0dXJuIG1vZGVtX2lucHV0X3dhaXQoaW5mbywoaW50KWFyZyk7CisJY2FzZSBUSU9DR0lDT1VOVDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOworCQljbm93ID0gaW5mby0+aWNvdW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKKwkJcF9jdXNlciA9IGFyZ3A7CisJCWlmIChwdXRfdXNlcihjbm93LmN0cywgJnBfY3VzZXItPmN0cykgfHwKKwkJICAgIHB1dF91c2VyKGNub3cuZHNyLCAmcF9jdXNlci0+ZHNyKSB8fAorCQkgICAgcHV0X3VzZXIoY25vdy5ybmcsICZwX2N1c2VyLT5ybmcpIHx8CisJCSAgICBwdXRfdXNlcihjbm93LmRjZCwgJnBfY3VzZXItPmRjZCkgfHwKKwkJICAgIHB1dF91c2VyKGNub3cucngsICZwX2N1c2VyLT5yeCkgfHwKKwkJICAgIHB1dF91c2VyKGNub3cudHgsICZwX2N1c2VyLT50eCkgfHwKKwkJICAgIHB1dF91c2VyKGNub3cuZnJhbWUsICZwX2N1c2VyLT5mcmFtZSkgfHwKKwkJICAgIHB1dF91c2VyKGNub3cub3ZlcnJ1biwgJnBfY3VzZXItPm92ZXJydW4pIHx8CisJCSAgICBwdXRfdXNlcihjbm93LnBhcml0eSwgJnBfY3VzZXItPnBhcml0eSkgfHwKKwkJICAgIHB1dF91c2VyKGNub3cuYnJrLCAmcF9jdXNlci0+YnJrKSB8fAorCQkgICAgcHV0X3VzZXIoY25vdy5idWZfb3ZlcnJ1biwgJnBfY3VzZXItPmJ1Zl9vdmVycnVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwljYXNlIE1HU0xfSU9DU0dQSU86CisJCXJldHVybiBzZXRfZ3BpbyhpbmZvLCBhcmdwKTsKKwljYXNlIE1HU0xfSU9DR0dQSU86CisJCXJldHVybiBnZXRfZ3BpbyhpbmZvLCBhcmdwKTsKKwljYXNlIE1HU0xfSU9DV0FJVEdQSU86CisJCXJldHVybiB3YWl0X2dwaW8oaW5mbywgYXJncCk7CisJfQorCW11dGV4X2xvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBNR1NMX0lPQ0dQQVJBTVM6CiAJCXJldCA9IGdldF9wYXJhbXMoaW5mbywgYXJncCk7CkBAIC0xMDY4LDUwICsxMTAyLDE2IEBACiAJY2FzZSBNR1NMX0lPQ0dTVEFUUzoKIAkJcmV0ID0gZ2V0X3N0YXRzKGluZm8sIGFyZ3ApOwogCQlicmVhazsKLQljYXNlIE1HU0xfSU9DV0FJVEVWRU5UOgotCQlyZXQgPSB3YWl0X21nc2xfZXZlbnQoaW5mbywgYXJncCk7Ci0JCWJyZWFrOwotCWNhc2UgVElPQ01JV0FJVDoKLQkJcmV0ID0gbW9kZW1faW5wdXRfd2FpdChpbmZvLChpbnQpYXJnKTsKLQkJYnJlYWs7CiAJY2FzZSBNR1NMX0lPQ0dJRjoKIAkJcmV0ID0gZ2V0X2ludGVyZmFjZShpbmZvLCBhcmdwKTsKIAkJYnJlYWs7CiAJY2FzZSBNR1NMX0lPQ1NJRjoKIAkJcmV0ID0gc2V0X2ludGVyZmFjZShpbmZvLChpbnQpYXJnKTsKIAkJYnJlYWs7Ci0JY2FzZSBNR1NMX0lPQ1NHUElPOgotCQlyZXQgPSBzZXRfZ3BpbyhpbmZvLCBhcmdwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNR1NMX0lPQ0dHUElPOgotCQlyZXQgPSBnZXRfZ3BpbyhpbmZvLCBhcmdwKTsKLQkJYnJlYWs7Ci0JY2FzZSBNR1NMX0lPQ1dBSVRHUElPOgotCQlyZXQgPSB3YWl0X2dwaW8oaW5mbywgYXJncCk7Ci0JCWJyZWFrOwotCWNhc2UgVElPQ0dJQ09VTlQ6Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKLQkJY25vdyA9IGluZm8tPmljb3VudDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7Ci0JCXBfY3VzZXIgPSBhcmdwOwotCQlpZiAocHV0X3VzZXIoY25vdy5jdHMsICZwX2N1c2VyLT5jdHMpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93LmRzciwgJnBfY3VzZXItPmRzcikgfHwKLQkJICAgIHB1dF91c2VyKGNub3cucm5nLCAmcF9jdXNlci0+cm5nKSB8fAotCQkgICAgcHV0X3VzZXIoY25vdy5kY2QsICZwX2N1c2VyLT5kY2QpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93LnJ4LCAmcF9jdXNlci0+cngpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93LnR4LCAmcF9jdXNlci0+dHgpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93LmZyYW1lLCAmcF9jdXNlci0+ZnJhbWUpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93Lm92ZXJydW4sICZwX2N1c2VyLT5vdmVycnVuKSB8fAotCQkgICAgcHV0X3VzZXIoY25vdy5wYXJpdHksICZwX2N1c2VyLT5wYXJpdHkpIHx8Ci0JCSAgICBwdXRfdXNlcihjbm93LmJyaywgJnBfY3VzZXItPmJyaykgfHwKLQkJICAgIHB1dF91c2VyKGNub3cuYnVmX292ZXJydW4sICZwX2N1c2VyLT5idWZfb3ZlcnJ1bikpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlyZXQgPSAwOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PSU9DVExDTUQ7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyNDQsNyArMzI0NCw5IEBACiAJCX0KIAogCQlEQkdJTkZPKCgiJXMgYmxvY2tfdGlsX3JlYWR5IHdhaXRcbiIsIHR0eS0+ZHJpdmVyLT5uYW1lKSk7CisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggMmIxOGFkYy4uZTU2Y2FmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC04MTMsMTMgKzgxMiwxNSBAQAogCiAJaWYgKHR0eV9wb3J0X2Nsb3NlX3N0YXJ0KCZpbmZvLT5wb3J0LCB0dHksIGZpbHApID09IDApCiAJCWdvdG8gY2xlYW51cDsKLQkJCisKKwltdXRleF9sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKICAJaWYgKGluZm8tPnBvcnQuZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKICAJCXdhaXRfdW50aWxfc2VudCh0dHksIGluZm8tPnRpbWVvdXQpOwogCiAJZmx1c2hfYnVmZmVyKHR0eSk7CiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJc2h1dGRvd24oaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAogCXR0eV9wb3J0X2Nsb3NlX2VuZCgmaW5mby0+cG9ydCwgdHR5KTsKIAlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CkBAIC04MzUsNiArODM2LDcgQEAKIHN0YXRpYyB2b2lkIGhhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCVNMTVBfSU5GTyAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChkZWJ1Z19sZXZlbCA+PSBERUJVR19MRVZFTF9JTkZPKQogCQlwcmludGsoIiVzKCVkKTolcyBoYW5ndXAoKVxuIiwKQEAgLTg0MywxMiArODQ1LDE2IEBACiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJoYW5ndXAiKSkKIAkJcmV0dXJuOwogCisJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJZmx1c2hfYnVmZmVyKHR0eSk7CiAJc2h1dGRvd24oaW5mbyk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+cG9ydC5sb2NrLCBmbGFncyk7CiAJaW5mby0+cG9ydC5jb3VudCA9IDA7CiAJaW5mby0+cG9ydC5mbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKIAlpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+cG9ydC5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+cG9ydC5vcGVuX3dhaXQpOwogfQpAQCAtMTA2Miw5ICsxMDY4LDcgQEAKIAlpZiAoc2FuaXR5X2NoZWNrKGluZm8sIHR0eS0+bmFtZSwgIndhaXRfdW50aWxfc2VudCIpKQogCQlyZXR1cm47CiAKLQlsb2NrX2tlcm5lbCgpOwotCi0JaWYgKCEoaW5mby0+cG9ydC5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkKKwlpZiAoIXRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJmluZm8tPnBvcnQuZmxhZ3MpKQogCQlnb3RvIGV4aXQ7CiAKIAlvcmlnX2ppZmZpZXMgPSBqaWZmaWVzOwpAQCAtMTA5NCw4ICsxMDk4LDEwIEBACiAJCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQkvL1RPRE86IGRldGVybWluZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgc2ltaWxhciB0byBVU0MxNkMzMgotCQkvLyAJVFhTVEFUVVNfQUxMX1NFTlQgc3RhdHVzCisJCS8qCisJCSAqIFRPRE86IGRldGVybWluZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgc2ltaWxhciB0byBVU0MxNkMzMgorCQkgKiAJIFRYU1RBVFVTX0FMTF9TRU5UIHN0YXR1cworCQkgKi8KIAkJd2hpbGUgKCBpbmZvLT50eF9hY3RpdmUgJiYgaW5mby0+dHhfZW5hYmxlZCkgewogCQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2VjcyhjaGFyX3RpbWUpKTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKQEAgLTExMDYsNyArMTExMiw2IEBACiAJfQogCiBleGl0OgotCXVubG9ja19rZXJuZWwoKTsKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6JXMgd2FpdF91bnRpbF9zZW50KCkgZXhpdFxuIiwKIAkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgaW5mby0+ZGV2aWNlX25hbWUgKTsKQEAgLTExMjIsNyArMTEyNyw2IEBACiAJaWYgKHNhbml0eV9jaGVjayhpbmZvLCB0dHktPm5hbWUsICJ3cml0ZV9yb29tIikpCiAJCXJldHVybiAwOwogCi0JbG9ja19rZXJuZWwoKTsKIAlpZiAoaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX0hETEMpIHsKIAkJcmV0ID0gKGluZm8tPnR4X2FjdGl2ZSkgPyAwIDogSERMQ19NQVhfRlJBTUVfU0laRTsKIAl9IGVsc2UgewpAQCAtMTEzMCw3ICsxMTM0LDYgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlyZXQgPSAwOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CiAKIAlpZiAoZGVidWdfbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykKIAkJcHJpbnRrKCIlcyglZCk6JXMgd3JpdGVfcm9vbSgpPSVkXG4iLApAQCAtMTI1MSw3ICsxMjU0LDcgQEAKICAqCiAgKiBSZXR1cm4gVmFsdWU6CTAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBkb19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlTTE1QX0lORk8gKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOwpAQCAtMTM0MSwxNiArMTM0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0OwotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZG9faW9jdGwodHR5LCBmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiAvcHJvYyBmcyByb3V0aW5lcy4uLi4KICAqLwpAQCAtMjg4Myw3ICsyODc2LDkgQEAKIAlpZiAoIXVzZXJfaWNvdW50KSB7CiAJCW1lbXNldCgmaW5mby0+aWNvdW50LCAwLCBzaXplb2YoaW5mby0+aWNvdW50KSk7CiAJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCUNPUFlfVE9fVVNFUihlcnIsIHVzZXJfaWNvdW50LCAmaW5mby0+aWNvdW50LCBzaXplb2Yoc3RydWN0IG1nc2xfaWNvdW50KSk7CisJCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0yODk4LDcgKzI4OTMsOSBAQAogCQlwcmludGsoIiVzKCVkKTolcyBnZXRfcGFyYW1zKClcbiIsCiAJCQkgX19GSUxFX18sX19MSU5FX18sIGluZm8tPmRldmljZV9uYW1lKTsKIAorCW11dGV4X2xvY2soJmluZm8tPnBvcnQubXV0ZXgpOwogCUNPUFlfVE9fVVNFUihlcnIsdXNlcl9wYXJhbXMsICZpbmZvLT5wYXJhbXMsIHNpemVvZihNR1NMX1BBUkFNUykpOworCW11dGV4X3VubG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJaWYgKGVycikgewogCQlpZiAoIGRlYnVnX2xldmVsID49IERFQlVHX0xFVkVMX0lORk8gKQogCQkJcHJpbnRrKCAiJXMoJWQpOiVzIGdldF9wYXJhbXMoKSB1c2VyIGJ1ZmZlciBjb3B5IGZhaWxlZFxuIiwKQEAgLTI5MjYsMTEgKzI5MjMsMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCisJbXV0ZXhfbG9jaygmaW5mby0+cG9ydC5tdXRleCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCW1lbWNweSgmaW5mby0+cGFyYW1zLCZ0bXBfcGFyYW1zLHNpemVvZihNR1NMX1BBUkFNUykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCiAgCWNoYW5nZV9wYXJhbXMoaW5mbyk7CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT5wb3J0Lm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM2Niw3ICszMzY1LDkgQEAKIAkJCXByaW50aygiJXMoJWQpOiVzIGJsb2NrX3RpbF9yZWFkeSgpIGNvdW50PSVkXG4iLAogCQkJCSBfX0ZJTEVfXyxfX0xJTkVfXywgdHR5LT5kcml2ZXItPm5hbWUsIHBvcnQtPmNvdW50ICk7CiAKKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggZDcxZjBmYy4uMDM1MGM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTQ5LDYgKzE0OSw3IEBACiAjZWxzZQogI2RlZmluZSB0dHlfY29tcGF0X2lvY3RsIE5VTEwKICNlbmRpZgorc3RhdGljIGludCBfX3R0eV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKTsKIHN0YXRpYyBpbnQgdHR5X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgb24pOwogc3RhdGljIHZvaWQgcmVsZWFzZV90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGlkeCk7CiBzdGF0aWMgdm9pZCBfX3Byb2Nfc2V0X3R0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CkBAIC00NzAsNyArNDcxLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV93YWtldXApOwogCiAvKioKLSAqCWRvX3R0eV9oYW5ndXAJCS0JYWN0dWFsIGhhbmRsZXIgZm9yIGhhbmd1cCBldmVudHMKKyAqCV9fdHR5X2hhbmd1cAkJLQlhY3R1YWwgaGFuZGxlciBmb3IgaGFuZ3VwIGV2ZW50cwogICoJQHdvcms6IHR0eSBkZXZpY2UKICAqCiAgKglUaGlzIGNhbiBiZSBjYWxsZWQgYnkgdGhlICJldmVudGQiIGtlcm5lbCB0aHJlYWQuICBUaGF0IGlzIHByb2Nlc3MKQEAgLTQ4Myw3ICs0ODQsNyBAQAogICoJcmVtYWlucyBpbnRhY3QuCiAgKgogICoJTG9ja2luZzoKLSAqCQlCS0wKKyAqCQlCVE0KICAqCQkgIHJlZGlyZWN0IGxvY2sgZm9yIHVuZG9pbmcgcmVkaXJlY3Rpb24KICAqCQkgIGZpbGUgbGlzdCBsb2NrIGZvciBtYW5pcHVsYXRpbmcgbGlzdCBvZiB0dHlzCiAgKgkJICB0dHlfbGRpc2NfbG9jayBmcm9tIGNhbGxlZCBmdW5jdGlvbnMKQEAgLTQ5MSwxMCArNDkyLDggQEAKICAqCQkgIHRhc2tsaXN0X2xvY2sgdG8gd2FsayB0YXNrIGxpc3QgZm9yIGhhbmd1cCBldmVudAogICoJCSAgICAtPnNpZ2xvY2sgdG8gcHJvdGVjdCAtPnNpZ25hbC8tPnNpZ2hhbmQKICAqLwotc3RhdGljIHZvaWQgZG9fdHR5X2hhbmd1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIF9fdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGhhbmd1cF93b3JrKTsKIAlzdHJ1Y3QgZmlsZSAqY29uc19maWxwID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZSAqZmlscCwgKmYgPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTUxMyw5ICs1MTIsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnJlZGlyZWN0X2xvY2spOwogCi0JLyogaW51c2VfZmlscHMgaXMgcHJvdGVjdGVkIGJ5IHRoZSBzaW5nbGUga2VybmVsIGxvY2sgKi8KLQlsb2NrX2tlcm5lbCgpOwotCWNoZWNrX3R0eV9jb3VudCh0dHksICJkb190dHlfaGFuZ3VwIik7CisJdHR5X2xvY2soKTsKKworCS8qIGludXNlX2ZpbHBzIGlzIHByb3RlY3RlZCBieSB0aGUgc2luZ2xlIHR0eSBsb2NrLAorCSAgIHRoaXMgcmVhbGx5IG5lZWRzIHRvIGNoYW5nZSBpZiB3ZSB3YW50IHRvIGZsdXNoIHRoZQorCSAgIHdvcmtxdWV1ZSB3aXRoIHRoZSBsb2NrIGhlbGQgKi8KKwljaGVja190dHlfY291bnQodHR5LCAidHR5X2hhbmd1cCIpOwogCiAJZmlsZV9saXN0X2xvY2soKTsKIAkvKiBUaGlzIGJyZWFrcyBmb3IgZmlsZSBoYW5kbGVzIGJlaW5nIHNlbnQgb3ZlciBBRl9VTklYIHNvY2tldHMgPyAqLwpAQCAtNTI1LDcgKzUyNyw3IEBACiAJCWlmIChmaWxwLT5mX29wLT53cml0ZSAhPSB0dHlfd3JpdGUpCiAJCQljb250aW51ZTsKIAkJY2xvc2Vjb3VudCsrOwotCQl0dHlfZmFzeW5jKC0xLCBmaWxwLCAwKTsJLyogY2FuJ3QgYmxvY2sgKi8KKwkJX190dHlfZmFzeW5jKC0xLCBmaWxwLCAwKTsJLyogY2FuJ3QgYmxvY2sgKi8KIAkJZmlscC0+Zl9vcCA9ICZodW5nX3VwX3R0eV9mb3BzOwogCX0KIAlmaWxlX2xpc3RfdW5sb2NrKCk7CkBAIC01OTQsMTEgKzU5NiwyMSBAQAogCSAqLwogCXNldF9iaXQoVFRZX0hVUFBFRCwgJnR0eS0+ZmxhZ3MpOwogCXR0eV9sZGlzY19lbmFibGUodHR5KTsKLQl1bmxvY2tfa2VybmVsKCk7CisKKwl0dHlfdW5sb2NrKCk7CisKIAlpZiAoZikKIAkJZnB1dChmKTsKIH0KIAorc3RhdGljIHZvaWQgZG9fdHR5X2hhbmd1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgaGFuZ3VwX3dvcmspOworCisJX190dHlfaGFuZ3VwKHR0eSk7Cit9CisKIC8qKgogICoJdHR5X2hhbmd1cAkJLQl0cmlnZ2VyIGEgaGFuZ3VwIGV2ZW50CiAgKglAdHR5OiB0dHkgdG8gaGFuZ3VwCkBAIC02MzQsMTEgKzY0NiwxMiBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzIHZoYW5ndXAuLi5cbiIsIHR0eV9uYW1lKHR0eSwgYnVmKSk7CiAjZW5kaWYKLQlkb190dHlfaGFuZ3VwKCZ0dHktPmhhbmd1cF93b3JrKTsKKwlfX3R0eV9oYW5ndXAodHR5KTsKIH0KIAogRVhQT1JUX1NZTUJPTCh0dHlfdmhhbmd1cCk7CiAKKwogLyoqCiAgKgl0dHlfdmhhbmd1cF9zZWxmCS0JcHJvY2VzcyB2aGFuZ3VwIGZvciBvd24gY3R0eQogICoKQEAgLTY5Niw3ICs3MDksOCBAQAogICoJZXhpdGluZzsgaXQgaXMgMCBpZiBjYWxsZWQgYnkgdGhlIGlvY3RsIFRJT0NOT1RUWS4KICAqCiAgKglMb2NraW5nOgotICoJCUJLTCBpcyB0YWtlbiBmb3IgaHlzdGVyaWNhbCByYWlzaW5zCisgKgkJQlRNIGlzIHRha2VuIGZvciBoeXN0ZXJpY2FsIHJhaXNpbnMsIGFuZCBoZWxkIHdoZW4KKyAqCQkgIGNhbGxlZCBmcm9tIG5vX3R0eSgpLgogICoJCSAgdHR5X211dGV4IGlzIHRha2VuIHRvIHByb3RlY3QgdHR5CiAgKgkJICAtPnNpZ2xvY2sgaXMgdGFrZW4gdG8gcHJvdGVjdCAtPnNpZ25hbC8tPnNpZ2hhbmQKICAqCQkgIHRhc2tsaXN0X2xvY2sgaXMgdGFrZW4gdG8gd2FsayBwcm9jZXNzIGxpc3QgZm9yIHNlc3Npb25zCkBAIC03MTQsMTAgKzcyOCwxMCBAQAogCXR0eSA9IGdldF9jdXJyZW50X3R0eSgpOwogCWlmICh0dHkpIHsKIAkJdHR5X3BncnAgPSBnZXRfcGlkKHR0eS0+cGdycCk7Ci0JCWxvY2tfa2VybmVsKCk7Ci0JCWlmIChvbl9leGl0ICYmIHR0eS0+ZHJpdmVyLT50eXBlICE9IFRUWV9EUklWRVJfVFlQRV9QVFkpCi0JCQl0dHlfdmhhbmd1cCh0dHkpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCWlmIChvbl9leGl0KSB7CisJCQlpZiAodHR5LT5kcml2ZXItPnR5cGUgIT0gVFRZX0RSSVZFUl9UWVBFX1BUWSkKKwkJCQl0dHlfdmhhbmd1cCh0dHkpOworCQl9CiAJCXR0eV9rcmVmX3B1dCh0dHkpOwogCX0gZWxzZSBpZiAob25fZXhpdCkgewogCQlzdHJ1Y3QgcGlkICpvbGRfcGdycDsKQEAgLTc3NCw5ICs3ODgsOSBAQAogdm9pZCBub190dHkodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCWRpc2Fzc29jaWF0ZV9jdHR5KDApOwotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJcHJvY19jbGVhcl90dHkodHNrKTsKIH0KIApAQCAtODc5LDcgKzg5Myw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAotCXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwl0dHkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBpbm9kZSwgInR0eV9yZWFkIikpCiAJCXJldHVybiAtRUlPOwpAQCAtMTAxMywxOSArMTAyNywxOSBAQAogICogV2UgZG9uJ3QgcHV0IGl0IGludG8gdGhlIHN5c2xvZyBxdWV1ZSByaWdodCBub3cgbWF5YmUgaW4gdGhlIGZ1dHVyZSBpZgogICogcmVhbGx5IG5lZWRlZC4KICAqCi0gKiBXZSBtdXN0IHN0aWxsIGhvbGQgdGhlIEJLTCBhbmQgdGVzdCB0aGUgQ0xPU0lORyBmbGFnIGZvciB0aGUgbW9tZW50LgorICogV2UgbXVzdCBzdGlsbCBob2xkIHRoZSBCVE0gYW5kIHRlc3QgdGhlIENMT1NJTkcgZmxhZyBmb3IgdGhlIG1vbWVudC4KICAqLwogCiB2b2lkIHR0eV93cml0ZV9tZXNzYWdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKm1zZykKIHsKIAlpZiAodHR5KSB7CiAJCW11dGV4X2xvY2soJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spOwotCQlsb2NrX2tlcm5lbCgpOworCQl0dHlfbG9jaygpOwogCQlpZiAodHR5LT5vcHMtPndyaXRlICYmICF0ZXN0X2JpdChUVFlfQ0xPU0lORywgJnR0eS0+ZmxhZ3MpKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQl0dHktPm9wcy0+d3JpdGUodHR5LCBtc2csIHN0cmxlbihtc2cpKTsKIAkJfSBlbHNlCi0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCXR0eV93cml0ZV91bmxvY2sodHR5KTsKIAl9CiAJcmV0dXJuOwpAQCAtMTA1Niw3ICsxMDcwLDcgQEAKIAlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAotCXR0eSA9IChzdHJ1Y3QgdHR5X3N0cnVjdCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwl0dHkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKHR0eV9wYXJhbm9pYV9jaGVjayh0dHksIGlub2RlLCAidHR5X3dyaXRlIikpCiAJCXJldHVybiAtRUlPOwogCWlmICghdHR5IHx8ICF0dHktPm9wcy0+d3JpdGUgfHwKQEAgLTEyMDgsMTggKzEyMjIsMTQgQEAKIAlpbnQgcmV0OwogCiAJaWYgKGRyaXZlci0+b3BzLT5pbnN0YWxsKSB7Ci0JCWxvY2tfa2VybmVsKCk7CiAJCXJldCA9IGRyaXZlci0+b3BzLT5pbnN0YWxsKGRyaXZlciwgdHR5KTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWlmICh0dHlfaW5pdF90ZXJtaW9zKHR0eSkgPT0gMCkgewotCQlsb2NrX2tlcm5lbCgpOwogCQl0dHlfZHJpdmVyX2tyZWZfZ2V0KGRyaXZlcik7CiAJCXR0eS0+Y291bnQrKzsKIAkJZHJpdmVyLT50dHlzW2lkeF0gPSB0dHk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRU5PTUVNOwpAQCAtMTMxMiwxNCArMTMyMiwxMSBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IHJldHZhbDsKIAotCWxvY2tfa2VybmVsKCk7CiAJLyogQ2hlY2sgaWYgcHR5IG1hc3RlciBpcyBiZWluZyBvcGVuZWQgbXVsdGlwbGUgdGltZXMgKi8KIAlpZiAoZHJpdmVyLT5zdWJ0eXBlID09IFBUWV9UWVBFX01BU1RFUiAmJgogCQkoZHJpdmVyLT5mbGFncyAmIFRUWV9EUklWRVJfREVWUFRTX01FTSkgJiYgIWZpcnN0X29rKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAogCS8qCiAJICogRmlyc3QgdGltZSBvcGVuIGlzIGNvbXBsZXgsIGVzcGVjaWFsbHkgZm9yIFBUWSBkZXZpY2VzLgpAQCAtMTM2Myw5ICsxMzcwLDcgQEAKIAlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9JTkZPICJ0dHlfaW5pdF9kZXY6IGxkaXNjIG9wZW4gZmFpbGVkLCAiCiAJCQkJICJjbGVhcmluZyBzbG90ICVkXG4iLCBpZHgpOwotCWxvY2tfa2VybmVsKCk7CiAJcmVsZWFzZV90dHkodHR5LCBpZHgpOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQogCkBAIC0xNTA4LDE0ICsxNTEzLDE0IEBACiAJaW50CWlkeDsKIAljaGFyCWJ1Zls2NF07CiAKLQl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CisJdHR5ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBpbm9kZSwgInR0eV9yZWxlYXNlX2RldiIpKQogCQlyZXR1cm4gMDsKIAotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAljaGVja190dHlfY291bnQodHR5LCAidHR5X3JlbGVhc2VfZGV2Iik7CiAKLQl0dHlfZmFzeW5jKC0xLCBmaWxwLCAwKTsKKwlfX3R0eV9mYXN5bmMoLTEsIGZpbHAsIDApOwogCiAJaWR4ID0gdHR5LT5pbmRleDsKIAlwdHlfbWFzdGVyID0gKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKQEAgLTE1MjcsMTggKzE1MzIsMTggQEAKIAlpZiAoaWR4IDwgMCB8fCBpZHggPj0gdHR5LT5kcml2ZXItPm51bSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBiYWQgaWR4IHdoZW4gdHJ5aW5nIHRvICIKIAkJCQkgICJmcmVlICglcylcbiIsIHR0eS0+bmFtZSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFkZXZwdHMpIHsKIAkJaWYgKHR0eSAhPSB0dHktPmRyaXZlci0+dHR5c1tpZHhdKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBkcml2ZXIudGFibGVbJWRdIG5vdCB0dHkgIgogCQkJICAgICAgICJmb3IgKCVzKVxuIiwgaWR4LCB0dHktPm5hbWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKHR0eS0+dGVybWlvcyAhPSB0dHktPmRyaXZlci0+dGVybWlvc1tpZHhdKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBkcml2ZXIudGVybWlvc1slZF0gbm90IHRlcm1pb3MgIgogCQkJICAgICAgICJmb3IgKCVzKVxuIiwKIAkJCSAgICAgICBpZHgsIHR0eS0+bmFtZSk7CkBAIC0xNTU2LDIxICsxNTYxLDIxIEBACiAJaWYgKHR0eS0+ZHJpdmVyLT5vdGhlciAmJgogCSAgICAgISh0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pKSB7CiAJCWlmIChvX3R0eSAhPSB0dHktPmRyaXZlci0+b3RoZXItPnR0eXNbaWR4XSkgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJdHR5X3VubG9jaygpOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgInR0eV9yZWxlYXNlX2Rldjogb3RoZXItPnRhYmxlWyVkXSAiCiAJCQkJCSAgIm5vdCBvX3R0eSBmb3IgKCVzKVxuIiwKIAkJCSAgICAgICBpZHgsIHR0eS0+bmFtZSk7CiAJCQlyZXR1cm4gMCA7CiAJCX0KIAkJaWYgKG9fdHR5LT50ZXJtaW9zICE9IHR0eS0+ZHJpdmVyLT5vdGhlci0+dGVybWlvc1tpZHhdKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAidHR5X3JlbGVhc2VfZGV2OiBvdGhlci0+dGVybWlvc1slZF0gIgogCQkJCQkgICJub3Qgb190ZXJtaW9zIGZvciAoJXMpXG4iLAogCQkJICAgICAgIGlkeCwgdHR5LT5uYW1lKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChvX3R0eS0+bGluayAhPSB0dHkpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXR0eV91bmxvY2soKTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJ0dHlfcmVsZWFzZV9kZXY6IGJhZCBwdHkgcG9pbnRlcnNcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE1NzksNyArMTU4NCw3IEBACiAJaWYgKHR0eS0+b3BzLT5jbG9zZSkKIAkJdHR5LT5vcHMtPmNsb3NlKHR0eSwgZmlscCk7CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCS8qCiAJICogU2FuaXR5IGNoZWNrOiBpZiB0dHktPmNvdW50IGlzIGdvaW5nIHRvIHplcm8sIHRoZXJlIHNob3VsZG4ndCBiZQogCSAqIGFueSB3YWl0ZXJzIG9uIHR0eS0+cmVhZF93YWl0IG9yIHR0eS0+d3JpdGVfd2FpdC4gIFdlIHRlc3QgdGhlCkBAIC0xNjAyLDcgKzE2MDcsNyBAQAogCQkgICBvcGVucyBvbiAvZGV2L3R0eSAqLwogCiAJCW11dGV4X2xvY2soJnR0eV9tdXRleCk7Ci0JCWxvY2tfa2VybmVsKCk7CisJCXR0eV9sb2NrKCk7CiAJCXR0eV9jbG9zaW5nID0gdHR5LT5jb3VudCA8PSAxOwogCQlvX3R0eV9jbG9zaW5nID0gb190dHkgJiYKIAkJCShvX3R0eS0+Y291bnQgPD0gKHB0eV9tYXN0ZXIgPyAxIDogMCkpOwpAQCAtMTYzMyw3ICsxNjM4LDcgQEAKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dHlfcmVsZWFzZV9kZXY6ICVzOiByZWFkL3dyaXRlIHdhaXQgcXVldWUgIgogCQkJCSAgICAiYWN0aXZlIVxuIiwgdHR5X25hbWUodHR5LCBidWYpKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQl0dHlfdW5sb2NrKCk7CiAJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJc2NoZWR1bGUoKTsKIAl9CkBAIC0xNjk4LDcgKzE3MDMsNyBAQAogCiAJLyogY2hlY2sgd2hldGhlciBib3RoIHNpZGVzIGFyZSBjbG9zaW5nIC4uLiAqLwogCWlmICghdHR5X2Nsb3NpbmcgfHwgKG9fdHR5ICYmICFvX3R0eV9jbG9zaW5nKSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCXR0eV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzE4LDcgKzE3MjMsNyBAQAogCS8qIE1ha2UgdGhpcyBwdHkgbnVtYmVyIGF2YWlsYWJsZSBmb3IgcmVhbGxvY2F0aW9uICovCiAJaWYgKGRldnB0cykKIAkJZGV2cHRzX2tpbGxfaW5kZXgoaW5vZGUsIGlkeCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXR0eV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc2MCwxMiArMTc2NSwxMiBAQAogCXJldHZhbCA9IDA7CiAKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAogCWlmIChkZXZpY2UgPT0gTUtERVYoVFRZQVVYX01BSk9SLCAwKSkgewogCQl0dHkgPSBnZXRfY3VycmVudF90dHkoKTsKIAkJaWYgKCF0dHkpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXR0eV91bmxvY2soKTsKIAkJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJCXJldHVybiAtRU5YSU87CiAJCX0KQEAgLTE3OTcsMTQgKzE4MDIsMTQgQEAKIAkJCQlnb3RvIGdvdF9kcml2ZXI7CiAJCQl9CiAJCX0KLQkJdW5sb2NrX2tlcm5lbCgpOworCQl0dHlfdW5sb2NrKCk7CiAJCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZHJpdmVyID0gZ2V0X3R0eV9kcml2ZXIoZGV2aWNlLCAmaW5kZXgpOwogCWlmICghZHJpdmVyKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X3VubG9jaygpOwogCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE4MTQsNyArMTgxOSw3IEBACiAJCXR0eSA9IHR0eV9kcml2ZXJfbG9va3VwX3R0eShkcml2ZXIsIGlub2RlLCBpbmRleCk7CiAKIAkJaWYgKElTX0VSUih0dHkpKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQl0dHlfdW5sb2NrKCk7CiAJCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCQlyZXR1cm4gUFRSX0VSUih0dHkpOwogCQl9CkBAIC0xODMwLDcgKzE4MzUsNyBAQAogCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAl0dHlfZHJpdmVyX2tyZWZfcHV0KGRyaXZlcik7CiAJaWYgKElTX0VSUih0dHkpKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X3VubG9jaygpOwogCQlyZXR1cm4gUFRSX0VSUih0dHkpOwogCX0KIApAQCAtMTg2MCwyOSArMTg2NSwyOSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiZXJyb3IgJWQgaW4gb3BlbmluZyAlcy4uLiIsIHJldHZhbCwKIAkJICAgICAgIHR0eS0+bmFtZSk7CiAjZW5kaWYKKwkJdHR5X3VubG9jaygpOyAvKiBuZWVkIHRvIGNhbGwgdHR5X3JlbGVhc2Ugd2l0aG91dCBCVE0gKi8KIAkJdHR5X3JlbGVhc2UoaW5vZGUsIGZpbHApOwotCQlpZiAocmV0dmFsICE9IC1FUkVTVEFSVFNZUykgewotCQkJdW5sb2NrX2tlcm5lbCgpOworCQlpZiAocmV0dmFsICE9IC1FUkVTVEFSVFNZUykKIAkJCXJldHVybiByZXR2YWw7Ci0JCX0KLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIHJldHZhbDsKLQkJfQorCiAJCXNjaGVkdWxlKCk7CiAJCS8qCiAJCSAqIE5lZWQgdG8gcmVzZXQgZl9vcCBpbiBjYXNlIGEgaGFuZ3VwIGhhcHBlbmVkLgogCQkgKi8KKwkJdHR5X2xvY2soKTsKIAkJaWYgKGZpbHAtPmZfb3AgPT0gJmh1bmdfdXBfdHR5X2ZvcHMpCiAJCQlmaWxwLT5mX29wID0gJnR0eV9mb3BzOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCXR0eV91bmxvY2soKTsKIAkJZ290byByZXRyeV9vcGVuOwogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCiAKIAltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwotCWxvY2tfa2VybmVsKCk7CisJdHR5X2xvY2soKTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAoIW5vY3R0eSAmJgogCSAgICBjdXJyZW50LT5zaWduYWwtPmxlYWRlciAmJgpAQCAtMTg5MCw3ICsxODk1LDcgQEAKIAkgICAgdHR5LT5zZXNzaW9uID09IE5VTEwpCiAJCV9fcHJvY19zZXRfdHR5KGN1cnJlbnQsIHR0eSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MTUsNyArMTkyMCw3IEBACiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CiAJaW50IHJldCA9IDA7CiAKLQl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CisJdHR5ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLCAidHR5X3BvbGwiKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE5MjYsMTQgKzE5MzEsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHR0eV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQorc3RhdGljIGludCBfX3R0eV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsID0gMDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JdHR5ID0gKHN0cnVjdCB0dHlfc3RydWN0ICopZmlscC0+cHJpdmF0ZV9kYXRhOworCXR0eSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgInR0eV9mYXN5bmMiKSkKIAkJZ290byBvdXQ7CiAKQEAgLTE5NjYsNyArMTk3MCwxNSBAQAogCX0KIAlyZXR2YWwgPSAwOwogb3V0OgotCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHR0eV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQoreworCWludCByZXR2YWw7CisJdHR5X2xvY2soKTsKKwlyZXR2YWwgPSBfX3R0eV9mYXN5bmMoZmQsIGZpbHAsIG9uKTsKKwl0dHlfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjQ4NSw3ICsyNDk3LDcgQEAKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAKLQl0dHkgPSAoc3RydWN0IHR0eV9zdHJ1Y3QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJdHR5ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICh0dHlfcGFyYW5vaWFfY2hlY2sodHR5LCBpbm9kZSwgInR0eV9pb2N0bCIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzEyOCw3ICszMTQwLDcgQEAKICAqIE9rLCBub3cgd2UgY2FuIGluaXRpYWxpemUgdGhlIHJlc3Qgb2YgdGhlIHR0eSBkZXZpY2VzIGFuZCBjYW4gY291bnQKICAqIG9uIG1lbW9yeSBhbGxvY2F0aW9ucywgaW50ZXJydXB0cyBldGMuLgogICovCi1zdGF0aWMgaW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKQoraW50IF9faW5pdCB0dHlfaW5pdCh2b2lkKQogewogCWNkZXZfaW5pdCgmdHR5X2NkZXYsICZ0dHlfZm9wcyk7CiAJaWYgKGNkZXZfYWRkKCZ0dHlfY2RldiwgTUtERVYoVFRZQVVYX01BSk9SLCAwKSwgMSkgfHwKQEAgLTMxNDksNCArMzE2MSw0IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KLW1vZHVsZV9pbml0KHR0eV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCmluZGV4IDZiZDVmODguLjBjMTg4OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKQEAgLTUxNywxOSArNTE3LDI1IEBACiAKIAkvKiBTZWUgaWYgcGFja2V0IG1vZGUgY2hhbmdlIG9mIHN0YXRlLiAqLwogCWlmICh0dHktPmxpbmsgJiYgdHR5LT5saW5rLT5wYWNrZXQpIHsKKwkJaW50IGV4dHByb2MgPSAob2xkX3Rlcm1pb3MuY19sZmxhZyAmIEVYVFBST0MpIHwKKwkJCQkodHR5LT50ZXJtaW9zLT5jX2xmbGFnICYgRVhUUFJPQyk7CiAJCWludCBvbGRfZmxvdyA9ICgob2xkX3Rlcm1pb3MuY19pZmxhZyAmIElYT04pICYmCiAJCQkJKG9sZF90ZXJtaW9zLmNfY2NbVlNUT1BdID09ICdcMDIzJykgJiYKIAkJCQkob2xkX3Rlcm1pb3MuY19jY1tWU1RBUlRdID09ICdcMDIxJykpOwogCQlpbnQgbmV3X2Zsb3cgPSAoSV9JWE9OKHR0eSkgJiYKIAkJCQlTVE9QX0NIQVIodHR5KSA9PSAnXDAyMycgJiYKIAkJCQlTVEFSVF9DSEFSKHR0eSkgPT0gJ1wwMjEnKTsKLQkJaWYgKG9sZF9mbG93ICE9IG5ld19mbG93KSB7CisJCWlmICgob2xkX2Zsb3cgIT0gbmV3X2Zsb3cpIHx8IGV4dHByb2MpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmN0cmxfbG9jaywgZmxhZ3MpOwotCQkJdHR5LT5jdHJsX3N0YXR1cyAmPSB+KFRJT0NQS1RfRE9TVE9QIHwgVElPQ1BLVF9OT1NUT1ApOwotCQkJaWYgKG5ld19mbG93KQotCQkJCXR0eS0+Y3RybF9zdGF0dXMgfD0gVElPQ1BLVF9ET1NUT1A7Ci0JCQllbHNlCi0JCQkJdHR5LT5jdHJsX3N0YXR1cyB8PSBUSU9DUEtUX05PU1RPUDsKKwkJCWlmIChvbGRfZmxvdyAhPSBuZXdfZmxvdykgeworCQkJCXR0eS0+Y3RybF9zdGF0dXMgJj0gfihUSU9DUEtUX0RPU1RPUCB8IFRJT0NQS1RfTk9TVE9QKTsKKwkJCQlpZiAobmV3X2Zsb3cpCisJCQkJCXR0eS0+Y3RybF9zdGF0dXMgfD0gVElPQ1BLVF9ET1NUT1A7CisJCQkJZWxzZQorCQkJCQl0dHktPmN0cmxfc3RhdHVzIHw9IFRJT0NQS1RfTk9TVE9QOworCQkJfQorCQkJaWYgKGV4dHByb2MpCisJCQkJdHR5LT5jdHJsX3N0YXR1cyB8PSBUSU9DUEtUX0lPQ1RMOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5jdHJsX2xvY2ssIGZsYWdzKTsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5saW5rLT5yZWFkX3dhaXQpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKaW5kZXggNTAwZTc0MC4uNDEyZjk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwpAQCAtNDQwLDYgKzQ0MCw4IEBACiAgKgogICoJQSBoZWxwZXIgb3BlbmluZyBtZXRob2QuIEFsc28gYSBjb252ZW5pZW50IGRlYnVnZ2luZyBhbmQgY2hlY2sKICAqCXBvaW50LgorICoKKyAqCUxvY2tpbmc6IGFsd2F5cyBjYWxsZWQgd2l0aCBCVE0gYWxyZWFkeSBoZWxkLgogICovCiAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9sZGlzYyAqbGQpCkBAIC00NDcsMTAgKzQ0OSw5IEBACiAJV0FSTl9PTih0ZXN0X2FuZF9zZXRfYml0KFRUWV9MRElTQ19PUEVOLCAmdHR5LT5mbGFncykpOwogCWlmIChsZC0+b3BzLT5vcGVuKSB7CiAJCWludCByZXQ7Ci0gICAgICAgICAgICAgICAgLyogQktMIGhlcmUgbG9ja3MgdmVydXMgYSBoYW5ndXAgZXZlbnQgKi8KLQkJbG9ja19rZXJuZWwoKTsKKyAgICAgICAgICAgICAgICAvKiBCVE0gaGVyZSBsb2NrcyB2ZXJzdXMgYSBoYW5ndXAgZXZlbnQgKi8KKwkJV0FSTl9PTighdHR5X2xvY2tlZCgpKTsKIAkJcmV0ID0gbGQtPm9wcy0+b3Blbih0dHkpOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiAwOwpAQCAtNTUzLDcgKzU1NCw3IEBACiAJaWYgKElTX0VSUihuZXdfbGRpc2MpKQogCQlyZXR1cm4gUFRSX0VSUihuZXdfbGRpc2MpOwogCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCS8qCiAJICoJV2UgbmVlZCB0byBsb29rIGF0IHRoZSB0dHkgbG9ja2luZyBoZXJlIGZvciBwdHkvdHR5IHBhaXJzCiAJICoJd2hlbiBib3RoIHNpZGVzIHRyeSB0byBjaGFuZ2UgaW4gcGFyYWxsZWwuCkBAIC01NjcsMTIgKzU2OCwxMiBAQAogCSAqLwogCiAJaWYgKHR0eS0+bGRpc2MtPm9wcy0+bnVtID09IGxkaXNjKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJdHR5X3VubG9jaygpOwogCQl0dHlfbGRpc2NfcHV0KG5ld19sZGlzYyk7CiAJCXJldHVybiAwOwogCX0KIAotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJLyoKIAkgKglQcm9ibGVtOiBXaGF0IGRvIHdlIGRvIGlmIHRoaXMgYmxvY2tzID8KIAkgKglXZSBjb3VsZCBkZWFkbG9jayBoZXJlCkBAIC01ODAsNiArNTgxLDcgQEAKIAogCXR0eV93YWl0X3VudGlsX3NlbnQodHR5LCAwKTsKIAorCXR0eV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CiAKIAkvKgpAQCAtNTg5LDEzICs1OTEsMTMgQEAKIAogCXdoaWxlICh0ZXN0X2JpdChUVFlfTERJU0NfQ0hBTkdJTkcsICZ0dHktPmZsYWdzKSkgewogCQltdXRleF91bmxvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOworCQl0dHlfdW5sb2NrKCk7CiAJCXdhaXRfZXZlbnQodHR5X2xkaXNjX3dhaXQsCiAJCQl0ZXN0X2JpdChUVFlfTERJU0NfQ0hBTkdJTkcsICZ0dHktPmZsYWdzKSA9PSAwKTsKKwkJdHR5X2xvY2soKTsKIAkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKLQogCXNldF9iaXQoVFRZX0xESVNDX0NIQU5HSU5HLCAmdHR5LT5mbGFncyk7CiAKIAkvKgpAQCAtNjA3LDcgKzYwOSw3IEBACiAKIAlvX2xkaXNjID0gdHR5LT5sZGlzYzsKIAotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJLyoKIAkgKglNYWtlIHN1cmUgd2UgZG9uJ3QgY2hhbmdlIHdoaWxlIHNvbWVvbmUgaG9sZHMgYQogCSAqCXJlZmVyZW5jZSB0byB0aGUgbGluZSBkaXNjaXBsaW5lLiBUaGUgVFRZX0xESVNDIGJpdApAQCAtNjMyLDE1ICs2MzQsMTUgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKKwl0dHlfbG9jaygpOwogCW11dGV4X2xvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOwotCWxvY2tfa2VybmVsKCk7CiAJaWYgKHRlc3RfYml0KFRUWV9IVVBQRUQsICZ0dHktPmZsYWdzKSkgewogCQkvKiBXZSB3ZXJlIHJhY2VkIGJ5IHRoZSBoYW5ndXAgbWV0aG9kLiBJdCB3aWxsIGhhdmUgc3RvbXBlZAogCQkgICB0aGUgbGRpc2MgZGF0YSBhbmQgY2xvc2VkIHRoZSBsZGlzYyBkb3duICovCiAJCWNsZWFyX2JpdChUVFlfTERJU0NfQ0hBTkdJTkcsICZ0dHktPmZsYWdzKTsKIAkJbXV0ZXhfdW5sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKIAkJdHR5X2xkaXNjX3B1dChuZXdfbGRpc2MpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCXR0eV91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02ODIsNyArNjg0LDcgQEAKIAlpZiAob193b3JrKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm9fdHR5LT5idWYud29yaywgMSk7CiAJbXV0ZXhfdW5sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTc4MCw3ICs3ODIsMjAgQEAKIAkgKiBBdm9pZCByYWNpbmcgc2V0X2xkaXNjIG9yIHR0eV9sZGlzY19yZWxlYXNlCiAJICovCiAJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7Ci0JdHR5X2xkaXNjX2hhbHQodHR5KTsKKworCS8qCisJICogdGhpcyBpcyBsaWtlIHR0eV9sZGlzY19oYWx0LCBidXQgd2UgbmVlZCB0byBnaXZlIHVwCisJICogdGhlIEJUTSBiZWZvcmUgY2FsbGluZyBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMsCisJICogd2hpY2ggbWF5IG5lZWQgdG8gd2FpdCBmb3IgYW5vdGhlciBmdW5jdGlvbiB0YWtpbmcgdGhlIEJUTQorCSAqLworCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKKwl0dHlfdW5sb2NrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0dHktPmJ1Zi53b3JrKTsKKwltdXRleF91bmxvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOworCisJdHR5X2xvY2soKTsKKwltdXRleF9sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKKwogCS8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGNsb3NlZCBsZGlzYyBhbmQgd2Ugd2FudCB0bwogCSAgIHJlb3BlbiBpdC4gV2UgY291bGQgZGVmZXIgdGhpcyB0byB0aGUgbmV4dCBvcGVuIGJ1dAogCSAgIGl0IG1lYW5zIGF1ZGl0aW5nIGEgbG90IG9mIG90aGVyIHBhdGhzIHNvIHRoaXMgaXMKQEAgLTg1MSw4ICs4NjYsMTAgQEAKIAkgKiByYWNlIHdpdGggdGhlIHNldF9sZGlzYyBjb2RlIHBhdGguCiAJICovCiAKKwl0dHlfdW5sb2NrKCk7CiAJdHR5X2xkaXNjX2hhbHQodHR5KTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCXR0eV9sb2NrKCk7CiAKIAltdXRleF9sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9tdXRleC5jIGIvZHJpdmVycy9jaGFyL3R0eV9tdXRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMzY5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvdHR5X211dGV4LmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIGRyaXZlcnMvY2hhci90dHlfbG9jay5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8qCisgKiBUaGUgJ2JpZyB0dHkgbXV0ZXgnCisgKgorICogVGhpcyBtdXRleCBpcyB0YWtlbiBhbmQgcmVsZWFzZWQgYnkgdHR5X2xvY2soKSBhbmQgdHR5X3VubG9jaygpLAorICogcmVwbGFjaW5nIHRoZSBvbGRlciBiaWcga2VybmVsIGxvY2suCisgKiBJdCBjYW4gbm8gbG9uZ2VyIGJlIHRha2VuIHJlY3Vyc2l2ZWx5LCBhbmQgZG9lcyBub3QgZ2V0CisgKiByZWxlYXNlZCBpbXBsaWNpdGx5IHdoaWxlIHNsZWVwaW5nLgorICoKKyAqIERvbid0IHVzZSBpbiBuZXcgY29kZS4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChiaWdfdHR5X211dGV4KTsKK3N0cnVjdCB0YXNrX3N0cnVjdCAqX19iaWdfdHR5X211dGV4X293bmVyOworRVhQT1JUX1NZTUJPTF9HUEwoX19iaWdfdHR5X211dGV4X293bmVyKTsKKworLyoKKyAqIEdldHRpbmcgdGhlIGJpZyB0dHkgbXV0ZXguCisgKi8KK3ZvaWQgX19sb2NrZnVuYyB0dHlfbG9jayh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CisKKwlXQVJOX09OKF9fYmlnX3R0eV9tdXRleF9vd25lciA9PSB0YXNrKTsKKworCW11dGV4X2xvY2soJmJpZ190dHlfbXV0ZXgpOworCV9fYmlnX3R0eV9tdXRleF9vd25lciA9IHRhc2s7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV9sb2NrKTsKKwordm9pZCBfX2xvY2tmdW5jIHR0eV91bmxvY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdXJyZW50OworCisJV0FSTl9PTihfX2JpZ190dHlfbXV0ZXhfb3duZXIgIT0gdGFzayk7CisJX19iaWdfdHR5X211dGV4X293bmVyID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmYmlnX3R0eV9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKHR0eV91bmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9wb3J0LmMgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwppbmRleCBhM2JkMWQwLi4zM2QzN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAKIAkvKiBibG9jayBpZiBwb3J0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNsb3NlZCAqLwogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IHBvcnQtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykgewotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocG9ydC0+Y2xvc2Vfd2FpdCwKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3R0eShwb3J0LT5jbG9zZV93YWl0LAogCQkJCSEocG9ydC0+ZmxhZ3MgJiBBU1lOQ19DTE9TSU5HKSk7CiAJCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTI5NCw3ICsyOTQsOSBAQAogCQkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CiAJCX0KKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAlmaW5pc2hfd2FpdCgmcG9ydC0+b3Blbl93YWl0LCAmd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwppbmRleCBjMTc5MWE2Li5iY2NlNDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCkBAIC00NjMsMTAgKzQ2MywxMCBAQAogCXVuc2lnbmVkIGludCBjdXJyY29ucyA9IGltaW5vcihpbm9kZSkgJiAxMjc7CiAJaW50IHJldCA9IDA7CiAJCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCWlmKGN1cnJjb25zICYmICF2Y19jb25zX2FsbG9jYXRlZChjdXJyY29ucy0xKSkKIAkJcmV0ID0gLUVOWElPOwotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA0YTllYjMwLi5jNzM0ZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtMTA1LDYgKzEwNSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9rZGIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjZGVmaW5lIE1BWF9OUl9DT05fRFJJVkVSIDE2CiAKQEAgLTI4Niw4ICsyODcsMTIgQEAKIAlyZXR1cm4gcDsKIH0KIAorLyogQ2FsbGVkICBmcm9tIHRoZSBrZXlib2FyZCBpcnEgcGF0aC4uICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc2Nyb2xsZGVsdGEoaW50IGxpbmVzKQogeworCS8qIEZJWE1FICovCisJLyogc2Nyb2xsZGVsdGEgbmVlZHMgc29tZSBraW5kIG9mIGNvbnNpc3RlbmN5IGxvY2ssIGJ1dCB0aGUgQktMIHdhcworCSAgIGFuZCBzdGlsbCBpcyBub3QgcHJvdGVjdGluZyB2ZXJzdXMgdGhlIHNjaGVkdWxlZCBiYWNrIGVuZCAqLwogCXNjcm9sbGJhY2tfZGVsdGEgKz0gbGluZXM7CiAJc2NoZWR1bGVfY29uc29sZV9jYWxsYmFjaygpOwogfQpAQCAtNzA0LDcgKzcwOSwxMCBAQAogCQkJdXBkYXRlX2F0dHIodmMpOwogCQkJY2xlYXJfYnVmZmVyX2F0dHJpYnV0ZXModmMpOwogCQl9Ci0JCWlmICh1cGRhdGUgJiYgdmMtPnZjX21vZGUgIT0gS0RfR1JBUEhJQ1MpCisKKwkJLyogRm9yY2libHkgdXBkYXRlIGlmIHdlJ3JlIHBhbmljaW5nICovCisJCWlmICgodXBkYXRlICYmIHZjLT52Y19tb2RlICE9IEtEX0dSQVBISUNTKSB8fAorCQkgICAgdnRfZm9yY2Vfb29wc19vdXRwdXQodmMpKQogCQkJZG9fdXBkYXRlX3JlZ2lvbih2YywgdmMtPnZjX29yaWdpbiwgdmMtPnZjX3NjcmVlbmJ1Zl9zaXplIC8gMik7CiAJfQogCXNldF9jdXJzb3IodmMpOwpAQCAtNzQyLDYgKzc1MCw3IEBACiAJdmMtPnZjX2hpX2ZvbnRfbWFzayA9IDA7CiAJdmMtPnZjX2NvbXBsZW1lbnRfbWFzayA9IDA7CiAJdmMtPnZjX2Nhbl9kb19jb2xvciA9IDA7CisJdmMtPnZjX3BhbmljX2ZvcmNlX3dyaXRlID0gZmFsc2U7CiAJdmMtPnZjX3N3LT5jb25faW5pdCh2YywgaW5pdCk7CiAJaWYgKCF2Yy0+dmNfY29tcGxlbWVudF9tYXNrKQogCQl2Yy0+dmNfY29tcGxlbWVudF9tYXNrID0gdmMtPnZjX2Nhbl9kb19jb2xvciA/IDB4NzcwMCA6IDB4MDgwMDsKQEAgLTc3NCw2ICs3ODMsNyBAQAogCSAgICBpZiAoIXZjKQogCQlyZXR1cm4gLUVOT01FTTsKIAkgICAgdmNfY29uc1tjdXJyY29uc10uZCA9IHZjOworCSAgICB0dHlfcG9ydF9pbml0KCZ2Yy0+cG9ydCk7CiAJICAgIElOSVRfV09SSygmdmNfY29uc1tjdXJyY29uc10uU0FLX3dvcmssIHZjX1NBSyk7CiAJICAgIHZpc3VhbF9pbml0KHZjLCBjdXJyY29ucywgMSk7CiAJICAgIGlmICghKnZjLT52Y191bmlfcGFnZWRpcl9sb2MpCkBAIC04MzcsOSArODQ3LDEwIEBACiAJCQkJdW5zaWduZWQgaW50IGNvbHMsIHVuc2lnbmVkIGludCBsaW5lcykKIHsKIAl1bnNpZ25lZCBsb25nIG9sZF9vcmlnaW4sIG5ld19vcmlnaW4sIG5ld19zY3JfZW5kLCBybHRoLCBycmVtLCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kOwogCXVuc2lnbmVkIGludCBvbGRfY29scywgb2xkX3Jvd3MsIG9sZF9yb3dfc2l6ZSwgb2xkX3NjcmVlbl9zaXplOwogCXVuc2lnbmVkIGludCBuZXdfY29scywgbmV3X3Jvd3MsIG5ld19yb3dfc2l6ZSwgbmV3X3NjcmVlbl9zaXplOwotCXVuc2lnbmVkIGludCBlbmQsIHVzZXI7CisJdW5zaWduZWQgaW50IHVzZXI7CiAJdW5zaWduZWQgc2hvcnQgKm5ld3NjcmVlbjsKIAogCVdBUk5fQ09OU09MRV9VTkxPQ0tFRCgpOwpAQCAtOTYyLDEyICs5NzMsMTIgQEAKICAqCVJlc2l6ZSBhIHZpcnR1YWwgY29uc29sZSBhcyBzZWVuIGZyb20gdGhlIGNvbnNvbGUgZW5kIG9mIHRoaW5ncy4gV2UKICAqCXVzZSB0aGUgY29tbW9uIHZjX2RvX3Jlc2l6ZSBtZXRob2RzIHRvIHVwZGF0ZSB0aGUgc3RydWN0dXJlcy4gVGhlCiAgKgljYWxsZXIgbXVzdCBob2xkIHRoZSBjb25zb2xlIHNlbSB0byBwcm90ZWN0IGNvbnNvbGUgaW50ZXJuYWxzIGFuZAotICoJdmMtPnZjX3R0eQorICoJdmMtPnBvcnQudHR5CiAgKi8KIAogaW50IHZjX3Jlc2l6ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBjb2xzLCB1bnNpZ25lZCBpbnQgcm93cykKIHsKLQlyZXR1cm4gdmNfZG9fcmVzaXplKHZjLT52Y190dHksIHZjLCBjb2xzLCByb3dzKTsKKwlyZXR1cm4gdmNfZG9fcmVzaXplKHZjLT5wb3J0LnR0eSwgdmMsIGNvbHMsIHJvd3MpOwogfQogCiAvKioKQEAgLTE3OTUsOCArMTgwNiw4IEBACiAJCQl2Yy0+dmNfc3RhdGUgPSBFU25vcm1hbDsKIAkJcmV0dXJuOwogCWNhc2UgRVNwYWxldHRlOgotCQlpZiAoIChjPj0nMCcmJmM8PSc5JykgfHwgKGM+PSdBJyYmYzw9J0YnKSB8fCAoYz49J2EnJiZjPD0nZicpICkgewotCQkJdmMtPnZjX3Bhclt2Yy0+dmNfbnBhcisrXSA9IChjID4gJzknID8gKGMgJiAweERGKSAtICdBJyArIDEwIDogYyAtICcwJyk7CisJCWlmIChpc3hkaWdpdChjKSkgeworCQkJdmMtPnZjX3Bhclt2Yy0+dmNfbnBhcisrXSA9IGhleF90b19iaW4oYyk7CiAJCQlpZiAodmMtPnZjX25wYXIgPT0gNykgewogCQkJCWludCBpID0gdmMtPnZjX3BhclswXSAqIDMsIGogPSAxOwogCQkJCXZjLT52Y19wYWxldHRlW2ldID0gMTYgKiB2Yy0+dmNfcGFyW2orK107CkBAIC0yNTA0LDcgKzI1MTUsNyBAQAogCQlnb3RvIHF1aXQ7CiAJfQogCi0JaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQpCisJaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQgJiYgIXZ0X2ZvcmNlX29vcHNfb3V0cHV0KHZjKSkKIAkJZ290byBxdWl0OwogCiAJLyogdW5kcmF3IGN1cnNvciBmaXJzdCAqLwpAQCAtMjYxMCw4ICsyNjIxLDYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0ID0gMDsKIAotCWxvY2tfa2VybmVsKCk7Ci0KIAlzd2l0Y2ggKHR5cGUpCiAJewogCQljYXNlIFRJT0NMX1NFVFNFTDoKQEAgLTI2ODYsNyArMjY5NSw2IEBACiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzk5LDEyICsyODA3LDEyIEBACiAJCQlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB2Y19jb25zW2N1cnJjb25zXS5kOwogCiAJCQkvKiBTdGlsbCBiZWluZyBmcmVlZCAqLwotCQkJaWYgKHZjLT52Y190dHkpIHsKKwkJCWlmICh2Yy0+cG9ydC50dHkpIHsKIAkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkJCX0KIAkJCXR0eS0+ZHJpdmVyX2RhdGEgPSB2YzsKLQkJCXZjLT52Y190dHkgPSB0dHk7CisJCQl2Yy0+cG9ydC50dHkgPSB0dHk7CiAKIAkJCWlmICghdHR5LT53aW5zaXplLndzX3JvdyAmJiAhdHR5LT53aW5zaXplLndzX2NvbCkgewogCQkJCXR0eS0+d2luc2l6ZS53c19yb3cgPSB2Y19jb25zW2N1cnJjb25zXS5kLT52Y19yb3dzOwpAQCAtMjgzMiw3ICsyODQwLDcgQEAKIAlzdHJ1Y3QgdmNfZGF0YSAqdmMgPSB0dHktPmRyaXZlcl9kYXRhOwogCUJVR19PTih2YyA9PSBOVUxMKTsKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JdmMtPnZjX3R0eSA9IE5VTEw7CisJdmMtPnBvcnQudHR5ID0gTlVMTDsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAJdHR5X3NodXRkb3duKHR0eSk7CiB9CkBAIC0yOTE0LDYgKzI5MjIsNyBAQAogCWZvciAoY3VycmNvbnMgPSAwOyBjdXJyY29ucyA8IE1JTl9OUl9DT05TT0xFUzsgY3VycmNvbnMrKykgewogCQl2Y19jb25zW2N1cnJjb25zXS5kID0gdmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmNfZGF0YSksIEdGUF9OT1dBSVQpOwogCQlJTklUX1dPUksoJnZjX2NvbnNbY3VycmNvbnNdLlNBS193b3JrLCB2Y19TQUspOworCQl0dHlfcG9ydF9pbml0KCZ2Yy0+cG9ydCk7CiAJCXZpc3VhbF9pbml0KHZjLCBjdXJyY29ucywgMSk7CiAJCXZjLT52Y19zY3JlZW5idWYgPSBremFsbG9jKHZjLT52Y19zY3JlZW5idWZfc2l6ZSwgR0ZQX05PV0FJVCk7CiAJCXZjX2luaXQodmMsIHZjLT52Y19yb3dzLCB2Yy0+dmNfY29scywKQEAgLTMwNjUsNyArMzA3NCw4IEBACiAKIAkJb2xkX3dhc19jb2xvciA9IHZjLT52Y19jYW5fZG9fY29sb3I7CiAJCXZjLT52Y19zdy0+Y29uX2RlaW5pdCh2Yyk7Ci0JCXZjLT52Y19vcmlnaW4gPSAodW5zaWduZWQgbG9uZyl2Yy0+dmNfc2NyZWVuYnVmOworCQlpZiAoIXZjLT52Y19vcmlnaW4pCisJCQl2Yy0+dmNfb3JpZ2luID0gKHVuc2lnbmVkIGxvbmcpdmMtPnZjX3NjcmVlbmJ1ZjsKIAkJdmlzdWFsX2luaXQodmMsIGksIDApOwogCQlzZXRfb3JpZ2luKHZjKTsKIAkJdXBkYXRlX2F0dHIodmMpOwpAQCAtMzc4MSw3ICszNzkxLDggQEAKIAkJcmV0dXJuOwogCX0KIAl2YyA9IHZjX2NvbnNbZmdfY29uc29sZV0uZDsKLQlpZiAodmMtPnZjX21vZGUgIT0gS0RfVEVYVCkKKwkvKiBUcnkgdG8gdW5ibGFuayBpbiBvb3BzIGNhc2UgdG9vICovCisJaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQgJiYgIXZ0X2ZvcmNlX29vcHNfb3V0cHV0KHZjKSkKIAkJcmV0dXJuOyAvKiBidXQgbGVhdmUgY29uc29sZV9ibGFua2VkICE9IDAgKi8KIAogCWlmIChibGFua2ludGVydmFsKSB7CkBAIC0zNzkwLDcgKzM4MDEsNyBAQAogCX0KIAogCWNvbnNvbGVfYmxhbmtlZCA9IDA7Ci0JaWYgKHZjLT52Y19zdy0+Y29uX2JsYW5rKHZjLCAwLCBsZWF2aW5nX2dmeCkpCisJaWYgKHZjLT52Y19zdy0+Y29uX2JsYW5rKHZjLCAwLCBsZWF2aW5nX2dmeCkgfHwgdnRfZm9yY2Vfb29wc19vdXRwdXQodmMpKQogCQkvKiBMb3ctbGV2ZWwgZHJpdmVyIGNhbm5vdCByZXN0b3JlIC0+IGRvIGl0IG91cnNlbHZlcyAqLwogCQl1cGRhdGVfc2NyZWVuKHZjKTsKIAlpZiAoY29uc29sZV9ibGFua19ob29rKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCBjYjE5ZGJjLi4yYmJlYWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJbGlzdF9hZGQoJnZ3LT5saXN0LCAmdnRfZXZlbnRzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2dF9ldmVudF9sb2NrLCBmbGFncyk7CiAJLyogV2FpdCBmb3IgaXQgdG8gcGFzcyAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh2dF9ldmVudF93YWl0cXVldWUsIHZ3LT5kb25lKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KHZ0X2V2ZW50X3dhaXRxdWV1ZSwgdnctPmRvbmUpOwogCS8qIERlcXVldWUgaXQgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmdnRfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZ2dy0+bGlzdCk7CkBAIC01MDksNyArNTA5LDcgQEAKIAogCWNvbnNvbGUgPSB2Yy0+dmNfbnVtOwogCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCiAJaWYgKCF2Y19jb25zX2FsbG9jYXRlZChjb25zb2xlKSkgeyAJLyogaW1wb3NzaWJsZT8gKi8KIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwpAQCAtMTMzNiw3ICsxMzM2LDcgQEAKIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwogCX0KIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiByZXQ7CiBlcGVybToKIAlyZXQgPSAtRVBFUk07CkBAIC0xMzY5LDcgKzEzNjksNyBAQAogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAl2YyA9IHZjX2Nvbi0+ZDsKIAlpZiAodmMpIHsKLQkJdHR5ID0gdmMtPnZjX3R0eTsKKwkJdHR5ID0gdmMtPnBvcnQudHR5OwogCQkvKgogCQkgKiBTQUsgc2hvdWxkIGFsc28gd29yayBpbiBhbGwgcmF3IG1vZGVzIGFuZCByZXNldAogCQkgKiB0aGVtIHByb3Blcmx5LgpAQCAtMTUwMyw3ICsxNTAzLDcgQEAKIAogCWNvbnNvbGUgPSB2Yy0+dmNfbnVtOwogCi0JbG9ja19rZXJuZWwoKTsKKwl0dHlfbG9jaygpOwogCiAJaWYgKCF2Y19jb25zX2FsbG9jYXRlZChjb25zb2xlKSkgeyAJLyogaW1wb3NzaWJsZT8gKi8KIAkJcmV0ID0gLUVOT0lPQ1RMQ01EOwpAQCAtMTU3MSwxMSArMTU3MSwxMSBAQAogCQlnb3RvIGZhbGxiYWNrOwogCX0KIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7CisJdHR5X3VubG9jaygpOwogCXJldHVybiByZXQ7CiAKIGZhbGxiYWNrOgotCXVubG9ja19rZXJuZWwoKTsKKwl0dHlfdW5sb2NrKCk7CiAJcmV0dXJuIHZ0X2lvY3RsKHR0eSwgZmlsZSwgY21kLCBhcmcpOwogfQogCkBAIC0xNzYxLDEwICsxNzYxLDEzIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJdHR5X2xvY2soKTsKIAlpZiAodnRfd2FpdGFjdGl2ZSh2dCArIDEpKSB7CiAJCXByX2RlYnVnKCJTdXNwZW5kOiBDYW4ndCBzd2l0Y2ggVkNzLiIpOworCQl0dHlfdW5sb2NrKCk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQorCXR0eV91bmxvY2soKTsKIAlyZXR1cm4gcHJldjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hY3BpX3BtLmMgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwppbmRleCA3MmE2MzNhLi5jZmIwZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYwpAQCAtNjgsMTAgKzY4LDcgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSBhY3BpX3BtX3JlYWQsCiAJLm1hc2sJCT0gKGN5Y2xlX3QpQUNQSV9QTV9NQVNLLAotCS5tdWx0CQk9IDAsIC8qdG8gYmUgY2FsY3VsYXRlZCovCi0JLnNoaWZ0CQk9IDIyLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKLQogfTsKIAogCkBAIC0xOTAsOSArMTg3LDYgQEAKIAlpZiAoIXBtdG1yX2lvcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbG9ja3NvdXJjZV9hY3BpX3BtLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KFBNVE1SX1RJQ0tTX1BFUl9TRUMsCi0JCQkJCQljbG9ja3NvdXJjZV9hY3BpX3BtLnNoaWZ0KTsKLQogCS8qICJ2ZXJpZnkiIHRoaXMgdGltaW5nIHNvdXJjZTogKi8KIAlmb3IgKGogPSAwOyBqIDwgQUNQSV9QTV9NT05PVE9OSUNJVFlfQ0hFQ0tTOyBqKyspIHsKIAkJdWRlbGF5KDEwMCAqIGopOwpAQCAtMjIwLDcgKzIxNCw4IEBACiAJaWYgKHZlcmlmeV9wbXRtcl9yYXRlKCkgIT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2FjcGlfcG0pOworCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfYWNwaV9wbSwKKwkJCQkJCVBNVE1SX1RJQ0tTX1BFUl9TRUMpOwogfQogCiAvKiBXZSB1c2UgZnNfaW5pdGNhbGwgYmVjYXVzZSB3ZSB3YW50IHRoZSBQQ0kgZml4dXBzIHRvIGhhdmUgcnVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwppbmRleCBkYmVmZTE1Li5hNTA3MTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKQEAgLTc0LDYgKzc0LDE3IEBACiAJICovCiAJaHJ0aW1lcl9wZWVrX2FoZWFkX3RpbWVycygpOwogI2VuZGlmCisKKwkvKgorCSAqIENhbGwgdGhlIGRldmljZSdzIHByZXBhcmUgZnVuY3Rpb24gYmVmb3JlIGNhbGxpbmcgdGhlCisJICogZ292ZXJub3IncyBzZWxlY3QgZnVuY3Rpb24uICAtPnByZXBhcmUgZ2l2ZXMgdGhlIGRldmljZSdzCisJICogY3B1aWRsZSBkcml2ZXIgYSBjaGFuY2UgdG8gdXBkYXRlIGFueSBkeW5hbWljIGluZm9ybWF0aW9uCisJICogb2YgaXRzIGNwdWlkbGUgc3RhdGVzIGZvciB0aGUgY3VycmVudCBpZGxlIHBlcmlvZCwgZS5nLgorCSAqIHN0YXRlIGF2YWlsYWJpbGl0eSwgbGF0ZW5jaWVzLCByZXNpZGVuY2llcywgZXRjLgorCSAqLworCWlmIChkZXYtPnByZXBhcmUpCisJCWRldi0+cHJlcGFyZShkZXYpOworCiAJLyogYXNrIHRoZSBnb3Zlcm5vciBmb3IgdGhlIG5leHQgc3RhdGUgKi8KIAluZXh0X3N0YXRlID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5zZWxlY3QoZGV2KTsKIAlpZiAobmVlZF9yZXNjaGVkKCkpIHsKQEAgLTI4Miw2ICsyOTMsMjYgQEAKIAogCXBvbGxfaWRsZV9pbml0KGRldik7CiAKKwkvKgorCSAqIGNwdWlkbGUgZHJpdmVyIHNob3VsZCBzZXQgdGhlIGRldi0+cG93ZXJfc3BlY2lmaWVkIGJpdAorCSAqIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgZGV2aWNlIGlmIHRoZSBkcml2ZXIgcHJvdmlkZXMKKwkgKiBwb3dlcl91c2FnZSBudW1iZXJzLgorCSAqCisJICogRm9yIHRob3NlIGRldmljZXMgd2hvc2UgLT5wb3dlcl9zcGVjaWZpZWQgaXMgbm90IHNldCwKKwkgKiB3ZSBmaWxsIGluIHBvd2VyX3VzYWdlIHdpdGggZGVjcmVhc2luZyB2YWx1ZXMgYXMgdGhlCisJICogY3B1aWRsZSBjb2RlIGhhcyBhbiBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgc3RhdGUgQ24KKwkgKiB1c2VzIGxlc3MgcG93ZXIgdGhhbiBDKG4tMSkuCisJICoKKwkgKiBXaXRoIENPTkZJR19BUkNIX0hBU19DUFVfUkVMQVgsIEMwIGlzIGFscmVhZHkgYXNzaWduZWQKKwkgKiBhbiBwb3dlciB2YWx1ZSBvZiAtMS4gIFNvIHdlIHVzZSAtMiwgLTMsIGV0YywgZm9yIG90aGVyCisJICogYy1zdGF0ZXMuCisJICovCisJaWYgKCFkZXYtPnBvd2VyX3NwZWNpZmllZCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gQ1BVSURMRV9EUklWRVJfU1RBVEVfU1RBUlQ7IGkgPCBkZXYtPnN0YXRlX2NvdW50OyBpKyspCisJCQlkZXYtPnN0YXRlc1tpXS5wb3dlcl91c2FnZSA9IC0xIC0gaTsKKwl9CisKIAlwZXJfY3B1KGNwdWlkbGVfZGV2aWNlcywgZGV2LT5jcHUpID0gZGV2OwogCWxpc3RfYWRkKCZkZXYtPmRldmljZV9saXN0LCAmY3B1aWRsZV9kZXRlY3RlZF9kZXZpY2VzKTsKIAlpZiAoKHJldCA9IGNwdWlkbGVfYWRkX3N5c2ZzKHN5c19kZXYpKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwppbmRleCAxYjEyODcwLi5jMjQwOGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYworKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwpAQCAtMjM0LDYgKzIzNCw3IEBACiB7CiAJc3RydWN0IG1lbnVfZGV2aWNlICpkYXRhID0gJl9fZ2V0X2NwdV92YXIobWVudV9kZXZpY2VzKTsKIAlpbnQgbGF0ZW5jeV9yZXEgPSBwbV9xb3NfcmVxdWVzdChQTV9RT1NfQ1BVX0RNQV9MQVRFTkNZKTsKKwl1bnNpZ25lZCBpbnQgcG93ZXJfdXNhZ2UgPSAtMTsKIAlpbnQgaTsKIAlpbnQgbXVsdGlwbGllcjsKIApAQCAtMjc4LDE5ICsyNzksMjcgQEAKIAlpZiAoZGF0YS0+ZXhwZWN0ZWRfdXMgPiA1KQogCQlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IENQVUlETEVfRFJJVkVSX1NUQVRFX1NUQVJUOwogCi0KLQkvKiBmaW5kIHRoZSBkZWVwZXN0IGlkbGUgc3RhdGUgdGhhdCBzYXRpc2ZpZXMgb3VyIGNvbnN0cmFpbnRzICovCisJLyoKKwkgKiBGaW5kIHRoZSBpZGxlIHN0YXRlIHdpdGggdGhlIGxvd2VzdCBwb3dlciB3aGlsZSBzYXRpc2Z5aW5nCisJICogb3VyIGNvbnN0cmFpbnRzLgorCSAqLwogCWZvciAoaSA9IENQVUlETEVfRFJJVkVSX1NUQVRFX1NUQVJUOyBpIDwgZGV2LT5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBjcHVpZGxlX3N0YXRlICpzID0gJmRldi0+c3RhdGVzW2ldOwogCisJCWlmIChzLT5mbGFncyAmIENQVUlETEVfRkxBR19JR05PUkUpCisJCQljb250aW51ZTsKIAkJaWYgKHMtPnRhcmdldF9yZXNpZGVuY3kgPiBkYXRhLT5wcmVkaWN0ZWRfdXMpCi0JCQlicmVhazsKKwkJCWNvbnRpbnVlOwogCQlpZiAocy0+ZXhpdF9sYXRlbmN5ID4gbGF0ZW5jeV9yZXEpCi0JCQlicmVhazsKKwkJCWNvbnRpbnVlOwogCQlpZiAocy0+ZXhpdF9sYXRlbmN5ICogbXVsdGlwbGllciA+IGRhdGEtPnByZWRpY3RlZF91cykKLQkJCWJyZWFrOwotCQlkYXRhLT5leGl0X3VzID0gcy0+ZXhpdF9sYXRlbmN5OwotCQlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IGk7CisJCQljb250aW51ZTsKKworCQlpZiAocy0+cG93ZXJfdXNhZ2UgPCBwb3dlcl91c2FnZSkgeworCQkJcG93ZXJfdXNhZ2UgPSBzLT5wb3dlcl91c2FnZTsKKwkJCWRhdGEtPmxhc3Rfc3RhdGVfaWR4ID0gaTsKKwkJCWRhdGEtPmV4aXRfdXMgPSBzLT5leGl0X2xhdGVuY3k7CisJCX0KIAl9CiAKIAlyZXR1cm4gZGF0YS0+bGFzdF9zdGF0ZV9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKaW5kZXggZjE3ZGRmMy4uMGQ2NjIyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwpAQCAtOTcsOCArOTcsMTMgQEAKIAogc3RydWN0IGJ1ZmZlcl9kZXNjIHsKIAl1MzIgcGh5c19uZXh0OworI2lmZGVmIF9fQVJNRUJfXwogCXUxNiBidWZfbGVuOwogCXUxNiBwa3RfbGVuOworI2Vsc2UKKwl1MTYgcGt0X2xlbjsKKwl1MTYgYnVmX2xlbjsKKyNlbmRpZgogCXUzMiBwaHlzX2FkZHI7CiAJdTMyIF9fcmVzZXJ2ZWRbNF07CiAJc3RydWN0IGJ1ZmZlcl9kZXNjICpuZXh0OwpAQCAtMTA2LDE3ICsxMTEsMzAgQEAKIH07CiAKIHN0cnVjdCBjcnlwdF9jdGwgeworI2lmZGVmIF9fQVJNRUJfXwogCXU4IG1vZGU7CQkvKiBOUEVfT1BfKiAgb3BlcmF0aW9uIG1vZGUgKi8KIAl1OCBpbml0X2xlbjsKIAl1MTYgcmVzZXJ2ZWQ7CisjZWxzZQorCXUxNiByZXNlcnZlZDsKKwl1OCBpbml0X2xlbjsKKwl1OCBtb2RlOwkJLyogTlBFX09QXyogIG9wZXJhdGlvbiBtb2RlICovCisjZW5kaWYKIAl1OCBpdltNQVhfSVZMRU5dOwkvKiBJViBmb3IgQ0JDIG1vZGUgb3IgQ1RSIElWIGZvciBDVFIgbW9kZSAqLwogCXUzMiBpY3ZfcmV2X2FlczsJLyogaWN2IG9yIHJldiBhZXMgKi8KIAl1MzIgc3JjX2J1ZjsKIAl1MzIgZHN0X2J1ZjsKKyNpZmRlZiBfX0FSTUVCX18KIAl1MTYgYXV0aF9vZmZzOwkJLyogQXV0aGVudGljYXRpb24gc3RhcnQgb2Zmc2V0ICovCiAJdTE2IGF1dGhfbGVuOwkJLyogQXV0aGVudGljYXRpb24gZGF0YSBsZW5ndGggKi8KIAl1MTYgY3J5cHRfb2ZmczsJCS8qIENyeXB0aW9uIHN0YXJ0IG9mZnNldCAqLwogCXUxNiBjcnlwdF9sZW47CQkvKiBDcnlwdGlvbiBkYXRhIGxlbmd0aCAqLworI2Vsc2UKKwl1MTYgYXV0aF9sZW47CQkvKiBBdXRoZW50aWNhdGlvbiBkYXRhIGxlbmd0aCAqLworCXUxNiBhdXRoX29mZnM7CQkvKiBBdXRoZW50aWNhdGlvbiBzdGFydCBvZmZzZXQgKi8KKwl1MTYgY3J5cHRfbGVuOwkJLyogQ3J5cHRpb24gZGF0YSBsZW5ndGggKi8KKwl1MTYgY3J5cHRfb2ZmczsJCS8qIENyeXB0aW9uIHN0YXJ0IG9mZnNldCAqLworI2VuZGlmCiAJdTMyIGFhZEFkZHI7CQkvKiBBZGRpdGlvbmFsIEF1dGggRGF0YSBBZGRyIGZvciBDQ00gbW9kZSAqLwogCXUzMiBjcnlwdG9fY3R4OwkJLyogTlBFIENyeXB0byBQYXJhbSBzdHJ1Y3R1cmUgYWRkcmVzcyAqLwogCkBAIC02NTIsNiArNjcwLDkgQEAKIAogCS8qIHdyaXRlIGNmZyB3b3JkIHRvIGNyeXB0aW5mbyAqLwogCWNmZ3dvcmQgPSBhbGdvLT5jZmd3b3JkIHwgKCBhdXRoc2l6ZSA8PCA2KTsgLyogKGF1dGhzaXplLzQpIDw8IDggKi8KKyNpZm5kZWYgX19BUk1FQl9fCisJY2Znd29yZCBePSAweEFBMDAwMDAwOyAvKiBjaGFuZ2UgdGhlICJieXRlIHN3YXAiIGZsYWdzICovCisjZW5kaWYKIAkqKHUzMiopY2luZm8gPSBjcHVfdG9fYmUzMihjZmd3b3JkKTsKIAljaW5mbyArPSBzaXplb2YoY2Znd29yZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IDllMDFlOTYuLjk1MjBjZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtMzMsNiArMzMsMTkgQEAKIAogY29tbWVudCAiRE1BIERldmljZXMiCiAKK2NvbmZpZyBJTlRFTF9NSURfRE1BQworCXRyaXN0YXRlICJJbnRlbCBNSUQgRE1BIHN1cHBvcnQgZm9yIFBlcmlwaGVyYWwgRE1BIGNvbnRyb2xsZXJzIgorCWRlcGVuZHMgb24gUENJICYmIFg4NgorCXNlbGVjdCBETUFfRU5HSU5FCisJZGVmYXVsdCBuCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBJbnRlbChSKSBNSUQgRE1BIGVuZ2luZSBwcmVzZW50CisJICBpbiBJbnRlbCBNSUQgY2hpcHNldHMuCisKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIGNoaXBzZXQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBBU1lOQ19UWF9ESVNBQkxFX0NIQU5ORUxfU1dJVENICiAJYm9vbAogCkBAIC0xMjgsNyArMTQxLDcgQEAKIAogY29uZmlnIFNIX0RNQUUKIAl0cmlzdGF0ZSAiUmVuZXNhcyBTdXBlckggRE1BQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU1VQRVJIICYmIFNIX0RNQQorCWRlcGVuZHMgb24gKFNVUEVSSCAmJiBTSF9ETUEpIHx8IChBUk0gJiYgQVJDSF9TSE1PQklMRSkKIAlkZXBlbmRzIG9uICFTSF9ETUFfQVBJCiAJc2VsZWN0IERNQV9FTkdJTkUKIAloZWxwCkBAIC0xNzUsNiArMTg4LDEzIEBACiAJICBZb3UgbmVlZCB0byBwcm92aWRlIHBsYXRmb3JtIHNwZWNpZmljIHNldHRpbmdzIHZpYQogCSAgcGxhdGZvcm1fZGF0YSBmb3IgYSBkbWEtcGwzMzAgZGV2aWNlLgogCitjb25maWcgUENIX0RNQQorCXRyaXN0YXRlICJUb3BjbGlmZiBQQ0ggRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2CisJc2VsZWN0IERNQV9FTkdJTkUKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFRvcGNsaWZmIFBDSCBETUEgZW5naW5lLgorCiBjb25maWcgRE1BX0VOR0lORQogCWJvb2wKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCAwZmU1ZWJiLi43MmJkNzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIAogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpICs9IGRtYWVuZ2luZS5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gaW92bG9jay5vCitvYmotJChDT05GSUdfSU5URUxfTUlEX0RNQUMpICs9IGludGVsX21pZF9kbWEubwogb2JqLSQoQ09ORklHX0RNQVRFU1QpICs9IGRtYXRlc3Qubwogb2JqLSQoQ09ORklHX0lOVEVMX0lPQVRETUEpICs9IGlvYXQvCiBvYmotJChDT05GSUdfSU5URUxfSU9QX0FETUEpICs9IGlvcC1hZG1hLm8KQEAgLTIzLDMgKzI0LDQgQEAKIG9iai0kKENPTkZJR19USU1CX0RNQSkgKz0gdGltYl9kbWEubwogb2JqLSQoQ09ORklHX1NURV9ETUE0MCkgKz0gc3RlX2RtYTQwLm8gc3RlX2RtYTQwX2xsLm8KIG9iai0kKENPTkZJR19QTDMzMF9ETUEpICs9IHBsMzMwLm8KK29iai0kKENPTkZJR19QQ0hfRE1BKSArPSBwY2hfZG1hLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCmluZGV4IGU4ODA3NjAuLmEwZjNlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvYXRfaGRtYWMuYwpAQCAtNzkwLDEyICs3OTAsMTIgQEAKIAlsaXN0X3NwbGljZV9pbml0KCZhdGNoYW4tPnF1ZXVlLCAmbGlzdCk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmYXRjaGFuLT5hY3RpdmVfbGlzdCwgJmxpc3QpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmF0Y2hhbi0+bG9jayk7Ci0KIAkvKiBGbHVzaCBhbGwgcGVuZGluZyBhbmQgcXVldWVkIGRlc2NyaXB0b3JzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmbGlzdCwgZGVzY19ub2RlKQogCQlhdGNfY2hhaW5fY29tcGxldGUoYXRjaGFuLCBkZXNjKTsKIAorCXNwaW5fdW5sb2NrX2JoKCZhdGNoYW4tPmxvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKaW5kZXggYTcyNGU2Yi4uNTU3ZTIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKKysrIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKQEAgLTcyLDYgKzcyLDkgQEAKIAl1bnNpZ25lZCBsb25nIG5icl9hY3RpdmVfZG9uZTsKIAl1bnNpZ25lZCBsb25nIGJ1c3k7CiAKKwl1MzIgcnVudGltZV9hZGRyOworCXUzMiBydW50aW1lX2N0cmw7CisKIAlzdHJ1Y3QgY29oOTAxMzE4X2Jhc2UgKmJhc2U7CiB9OwogCkBAIC0xOTAsNiArMTkzLDkgQEAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAogY29oY19kZXZfYWRkcihzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMpCiB7CisJLyogUnVudGltZSBzdXBwbGllZCBhZGRyZXNzIHdpbGwgdGFrZSBwcmVjZWRlbmNlICovCisJaWYgKGNvaGMtPnJ1bnRpbWVfYWRkcikKKwkJcmV0dXJuIGNvaGMtPnJ1bnRpbWVfYWRkcjsKIAlyZXR1cm4gY29oYy0+YmFzZS0+cGxhdGZvcm0tPmNoYW5fY29uZltjb2hjLT5pZF0uZGV2X2FkZHI7CiB9CiAKQEAgLTEwNTUsNiArMTA2MSwxNCBAQAogCiAJcGFyYW1zID0gY29oY19jaGFuX3BhcmFtKGNvaGMpOwogCWNvbmZpZyA9IHBhcmFtcy0+Y29uZmlnOworCS8qCisJICogQWRkIHJ1bnRpbWUtc3BlY2lmaWMgY29udHJvbCBvbiB0b3AsIG1ha2UKKwkgKiBzdXJlIHRoZSBiaXRzIHlvdSBzZXQgcGVyIHBlcmlwaGVyYWwgY2hhbm5lbCBhcmUKKwkgKiBjbGVhcmVkIGluIHRoZSBkZWZhdWx0IGNvbmZpZyBmcm9tIHRoZSBwbGF0Zm9ybS4KKwkgKi8KKwljdHJsX2NoYWluZWQgfD0gY29oYy0+cnVudGltZV9jdHJsOworCWN0cmxfbGFzdCB8PSBjb2hjLT5ydW50aW1lX2N0cmw7CisJY3RybCB8PSBjb2hjLT5ydW50aW1lX2N0cmw7CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKIAkJdTMyIHR4X2ZsYWdzID0gQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UgfApAQCAtMTExMyw2ICsxMTI3LDEyIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfbGxpX2ZpbGw7CiAKKwkvKgorCSAqIFNldCB0aGUgZGVmYXVsdCBjdHJsIGZvciB0aGUgY2hhbm5lbCB0byB0aGUgb25lIGZyb20gdGhlIGxsaSwKKwkgKiB0aGluZ3MgbWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gb2RkIGJ1ZmZlciBhbGlnbm1lbnQgZXRjLgorCSAqLworCWNvaDkwMTMxOF9zZXRfY3RybChjb2hjLCBsbGktPmNvbnRyb2wpOworCiAJQ09IX0RCRyhjb2g5MDEzMThfbGlzdF9wcmludChjb2hjLCBsbGkpKTsKIAogCS8qIFBpY2sgYSBkZXNjcmlwdG9yIHRvIGhhbmRsZSB0aGlzIHRyYW5zZmVyICovCkBAIC0xMTc1LDYgKzExOTUsMTQ2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29oYy0+bG9jaywgZmxhZ3MpOwogfQogCisvKgorICogSGVyZSB3ZSB3cmFwIGluIHRoZSBydW50aW1lIGRtYSBjb250cm9sIGludGVyZmFjZQorICovCitzdHJ1Y3QgYnVyc3RfdGFibGUgeworCWludCBidXJzdF84Yml0OworCWludCBidXJzdF8xNmJpdDsKKwlpbnQgYnVyc3RfMzJiaXQ7CisJdTMyIHJlZzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnVyc3RfdGFibGUgYnVyc3Rfc2l6ZXNbXSA9IHsKKwl7CisJCS5idXJzdF84Yml0ID0gNjQsCisJCS5idXJzdF8xNmJpdCA9IDMyLAorCQkuYnVyc3RfMzJiaXQgPSAxNiwKKwkJLnJlZyA9IENPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzY0X0JZVEVTLAorCX0sCisJeworCQkuYnVyc3RfOGJpdCA9IDQ4LAorCQkuYnVyc3RfMTZiaXQgPSAyNCwKKwkJLmJ1cnN0XzMyYml0ID0gMTIsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF80OF9CWVRFUywKKwl9LAorCXsKKwkJLmJ1cnN0XzhiaXQgPSAzMiwKKwkJLmJ1cnN0XzE2Yml0ID0gMTYsCisJCS5idXJzdF8zMmJpdCA9IDgsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8zMl9CWVRFUywKKwl9LAorCXsKKwkJLmJ1cnN0XzhiaXQgPSAxNiwKKwkJLmJ1cnN0XzE2Yml0ID0gOCwKKwkJLmJ1cnN0XzMyYml0ID0gNCwKKwkJLnJlZyA9IENPSDkwMTMxOF9DWF9DVFJMX0JVUlNUX0NPVU5UXzE2X0JZVEVTLAorCX0sCisJeworCQkuYnVyc3RfOGJpdCA9IDgsCisJCS5idXJzdF8xNmJpdCA9IDQsCisJCS5idXJzdF8zMmJpdCA9IDIsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF84X0JZVEVTLAorCX0sCisJeworCQkuYnVyc3RfOGJpdCA9IDQsCisJCS5idXJzdF8xNmJpdCA9IDIsCisJCS5idXJzdF8zMmJpdCA9IDEsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF80X0JZVEVTLAorCX0sCisJeworCQkuYnVyc3RfOGJpdCA9IDIsCisJCS5idXJzdF8xNmJpdCA9IDEsCisJCS5idXJzdF8zMmJpdCA9IDAsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8yX0JZVEVTLAorCX0sCisJeworCQkuYnVyc3RfOGJpdCA9IDEsCisJCS5idXJzdF8xNmJpdCA9IDAsCisJCS5idXJzdF8zMmJpdCA9IDAsCisJCS5yZWcgPSBDT0g5MDEzMThfQ1hfQ1RSTF9CVVJTVF9DT1VOVF8xX0JZVEUsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIGNvaDkwMTMxOF9kbWFfc2V0X3J1bnRpbWVjb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKmNvaGMgPSB0b19jb2g5MDEzMThfY2hhbihjaGFuKTsKKwlkbWFfYWRkcl90IGFkZHI7CisJZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggYWRkcl93aWR0aDsKKwl1MzIgbWF4YnVyc3Q7CisJdTMyIHJ1bnRpbWVfY3RybCA9IDA7CisJaW50IGkgPSAwOworCisJLyogV2Ugb25seSBzdXBwb3J0IG1lbSB0byBwZXIgb3IgcGVyIHRvIG1lbSB0cmFuc2ZlcnMgKi8KKwlpZiAoY29uZmlnLT5kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCWFkZHIgPSBjb25maWctPnNyY19hZGRyOworCQlhZGRyX3dpZHRoID0gY29uZmlnLT5zcmNfYWRkcl93aWR0aDsKKwkJbWF4YnVyc3QgPSBjb25maWctPnNyY19tYXhidXJzdDsKKwl9IGVsc2UgaWYgKGNvbmZpZy0+ZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJYWRkciA9IGNvbmZpZy0+ZHN0X2FkZHI7CisJCWFkZHJfd2lkdGggPSBjb25maWctPmRzdF9hZGRyX3dpZHRoOworCQltYXhidXJzdCA9IGNvbmZpZy0+ZHN0X21heGJ1cnN0OworCX0gZWxzZSB7CisJCWRldl9lcnIoQ09IQ18yX0RFVihjb2hjKSwgImlsbGVnYWwgY2hhbm5lbCBtb2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcoQ09IQ18yX0RFVihjb2hjKSwgImNvbmZpZ3VyZSBjaGFubmVsIGZvciAlZCBieXRlIHRyYW5zZmVyc1xuIiwKKwkJYWRkcl93aWR0aCk7CisJc3dpdGNoIChhZGRyX3dpZHRoKSAgeworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJcnVudGltZV9jdHJsIHw9CisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfOF9CSVRTIHwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV84X0JJVFM7CisKKwkJd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGJ1cnN0X3NpemVzKSkgeworCQkJaWYgKGJ1cnN0X3NpemVzW2ldLmJ1cnN0XzhiaXQgPD0gbWF4YnVyc3QpCisJCQkJYnJlYWs7CisJCQlpKys7CisJCX0KKworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQlydW50aW1lX2N0cmwgfD0KKwkJCUNPSDkwMTMxOF9DWF9DVFJMX1NSQ19CVVNfU0laRV8xNl9CSVRTIHwKKwkJCUNPSDkwMTMxOF9DWF9DVFJMX0RTVF9CVVNfU0laRV8xNl9CSVRTOworCisJCXdoaWxlIChpIDwgQVJSQVlfU0laRShidXJzdF9zaXplcykpIHsKKwkJCWlmIChidXJzdF9zaXplc1tpXS5idXJzdF8xNmJpdCA8PSBtYXhidXJzdCkKKwkJCQlicmVhazsKKwkJCWkrKzsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6CisJCS8qIERpcmVjdGlvbiBkb2Vzbid0IG1hdHRlciBoZXJlLCBpdCdzIDMyLzMyIGJpdHMgKi8KKwkJcnVudGltZV9jdHJsIHw9CisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9TUkNfQlVTX1NJWkVfMzJfQklUUyB8CisJCQlDT0g5MDEzMThfQ1hfQ1RSTF9EU1RfQlVTX1NJWkVfMzJfQklUUzsKKworCQl3aGlsZSAoaSA8IEFSUkFZX1NJWkUoYnVyc3Rfc2l6ZXMpKSB7CisJCQlpZiAoYnVyc3Rfc2l6ZXNbaV0uYnVyc3RfMzJiaXQgPD0gbWF4YnVyc3QpCisJCQkJYnJlYWs7CisJCQlpKys7CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKENPSENfMl9ERVYoY29oYyksCisJCQkiYmFkIHJ1bnRpbWVjb25maWc6IGFsaWVuIGFkZHJlc3Mgd2lkdGhcbiIpOworCQlyZXR1cm47CisJfQorCisJcnVudGltZV9jdHJsIHw9IGJ1cnN0X3NpemVzW2ldLnJlZzsKKwlkZXZfZGJnKENPSENfMl9ERVYoY29oYyksCisJCSJzZWxlY3RlZCBidXJzdCBzaXplICVkIGJ5dGVzIGZvciBhZGRyZXNzIHdpZHRoICVkIGJ5dGVzLCBtYXhidXJzdCAlZFxuIiwKKwkJYnVyc3Rfc2l6ZXNbaV0uYnVyc3RfOGJpdCwgYWRkcl93aWR0aCwgbWF4YnVyc3QpOworCisJY29oYy0+cnVudGltZV9hZGRyID0gYWRkcjsKKwljb2hjLT5ydW50aW1lX2N0cmwgPSBydW50aW1lX2N0cmw7Cit9CisKIHN0YXRpYyBpbnQKIGNvaDkwMTMxOF9jb250cm9sKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZW51bSBkbWFfY3RybF9jbWQgY21kLAogCQkgIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtMTE4NCw2ICsxMzQ0LDE0IEBACiAJc3RydWN0IGNvaDkwMTMxOF9kZXNjICpjb2hkOwogCXZvaWQgX19pb21lbSAqdmlydGJhc2UgPSBjb2hjLT5iYXNlLT52aXJ0YmFzZTsKIAorCWlmIChjbWQgPT0gRE1BX1NMQVZFX0NPTkZJRykgeworCQlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY29uZmlnID0KKwkJCShzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqKSBhcmc7CisKKwkJY29oOTAxMzE4X2RtYV9zZXRfcnVudGltZWNvbmZpZyhjaGFuLCBjb25maWcpOworCQlyZXR1cm4gMDsKKwkgIH0KKwogCWlmIChjbWQgPT0gRE1BX1BBVVNFKSB7CiAJCWNvaDkwMTMxOF9wYXVzZShjaGFuKTsKIAkJcmV0dXJuIDA7CkBAIC0xMjQwLDYgKzE0MDgsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKIHZvaWQgY29oOTAxMzE4X2Jhc2VfaW5pdChzdHJ1Y3QgZG1hX2RldmljZSAqZG1hLCBjb25zdCBpbnQgKnBpY2tfY2hhbnMsCiAJCQkgc3RydWN0IGNvaDkwMTMxOF9iYXNlICpiYXNlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IDY4ZDU4YzQuLjU1ODkzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTU0MCw3ICs1NDAsNyBAQAogCXN0cnVjdCBkbWF0ZXN0X2NoYW4JKmR0YzsKIAlzdHJ1Y3QgZG1hX2RldmljZQkqZG1hX2RldiA9IGNoYW4tPmRldmljZTsKIAl1bnNpZ25lZCBpbnQJCXRocmVhZF9jb3VudCA9IDA7Ci0JdW5zaWduZWQgaW50CQljbnQ7CisJaW50IGNudDsKIAogCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jIGIvZHJpdmVycy9kbWEvaW50ZWxfbWlkX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTkxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hLmMKQEAgLTAsMCArMSwxMTQzIEBACisvKgorICogIGludGVsX21pZF9kbWEuYyAtIEludGVsIExhbmd3ZWxsIERNQSBEcml2ZXJzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0xMCBJbnRlbCBDb3JwCisgKiAgQXV0aG9yOiBWaW5vZCBLb3VsIDx2aW5vZC5rb3VsQGludGVsLmNvbT4KKyAqICBUaGUgZHJpdmVyIGRlc2lnbiBpcyBiYXNlZCBvbiBkd19kbWFjIGRyaXZlcgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlbF9taWRfZG1hLmg+CisKKyNkZWZpbmUgTUFYX0NIQU4JNCAvKm1heCBjaCBhY3Jvc3MgY29udHJvbGxlcnMqLworI2luY2x1ZGUgImludGVsX21pZF9kbWFfcmVncy5oIgorCisjZGVmaW5lIElOVEVMX01JRF9ETUFDMV9JRAkJMHgwODE0CisjZGVmaW5lIElOVEVMX01JRF9ETUFDMl9JRAkJMHgwODEzCisjZGVmaW5lIElOVEVMX01JRF9HUF9ETUFDMl9JRAkJMHgwODI3CisjZGVmaW5lIElOVEVMX01GTERfRE1BQzFfSUQJCTB4MDgzMAorI2RlZmluZSBMTldfUEVSSVBIUkFMX01BU0tfQkFTRQkJMHhGRkFFODAwOAorI2RlZmluZSBMTldfUEVSSVBIUkFMX01BU0tfU0laRQkJMHgxMAorI2RlZmluZSBMTldfUEVSSVBIUkFMX1NUQVRVUwkJMHgwCisjZGVmaW5lIExOV19QRVJJUEhSQUxfTUFTSwkJMHg4CisKK3N0cnVjdCBpbnRlbF9taWRfZG1hX3Byb2JlX2luZm8geworCXU4IG1heF9jaGFuOworCXU4IGNoX2Jhc2U7CisJdTE2IGJsb2NrX3NpemU7CisJdTMyIHBpbXJfbWFzazsKK307CisKKyNkZWZpbmUgSU5GTyhfbWF4X2NoYW4sIF9jaF9iYXNlLCBfYmxvY2tfc2l6ZSwgX3BpbXJfbWFzaykgXAorCSgoa2VybmVsX3Vsb25nX3QpJihzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9wcm9iZV9pbmZvKSB7CVwKKwkJLm1heF9jaGFuID0gKF9tYXhfY2hhbiksCQkJXAorCQkuY2hfYmFzZSA9IChfY2hfYmFzZSksCQkJCVwKKwkJLmJsb2NrX3NpemUgPSAoX2Jsb2NrX3NpemUpLAkJCVwKKwkJLnBpbXJfbWFzayA9IChfcGltcl9tYXNrKSwJCQlcCisJfSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitVdGlsaXR5IEZ1bmN0aW9ucyovCisvKioKKyAqIGdldF9jaF9pbmRleAktCWNvbnZlcnQgc3RhdHVzIHRvIGNoYW5uZWwKKyAqIEBzdGF0dXM6IHN0YXR1cyBtYXNrCisgKiBAYmFzZTogZG1hIGNoIGJhc2UgdmFsdWUKKyAqCisgKiBNb2RpZnkgdGhlIHN0YXR1cyBtYXNrIGFuZCByZXR1cm4gdGhlIGNoYW5uZWwgaW5kZXggbmVlZGluZworICogYXR0ZW50aW9uIChvciAtMSBpZiBuZWl0aGVyKQorICovCitzdGF0aWMgaW50IGdldF9jaF9pbmRleChpbnQgKnN0YXR1cywgdW5zaWduZWQgaW50IGJhc2UpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOOyBpKyspIHsKKwkJaWYgKCpzdGF0dXMgJiAoMSA8PCAoaSArIGJhc2UpKSkgeworCQkJKnN0YXR1cyA9ICpzdGF0dXMgJiB+KDEgPDwgKGkgKyBiYXNlKSk7CisJCQlwcl9kZWJ1ZygiTURNQTogaW5kZXggJWQgTmV3IHN0YXR1cyAleFxuIiwgaSwgKnN0YXR1cyk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogZ2V0X2Jsb2NrX3RzCS0JY2FsY3VsYXRlcyBkbWEgdHJhbnNhY3Rpb24gbGVuZ3RoCisgKiBAbGVuOiBkbWEgdHJhbnNmZXIgbGVuZ3RoCisgKiBAdHhfd2lkdGg6IGRtYSB0cmFuc2ZlciBzcmMgd2lkdGgKKyAqIEBibG9ja19zaXplOiBkbWEgY29udHJvbGxlciBtYXggYmxvY2sgc2l6ZQorICoKKyAqIEJhc2VkIG9uIHNyYyB3aWR0aCBjYWxjdWxhdGUgdGhlIERNQSB0cnNhY3Rpb24gbGVuZ3RoIGluIGRhdGEgaXRlbXMKKyAqIHJldHVybiBkYXRhIGl0ZW1zIG9yIEZGRkYgaWYgZXhjZWVkcyBtYXggbGVuZ3RoIGZvciBibG9jaworICovCitzdGF0aWMgaW50IGdldF9ibG9ja190cyhpbnQgbGVuLCBpbnQgdHhfd2lkdGgsIGludCBibG9ja19zaXplKQoreworCWludCBieXRlX3dpZHRoID0gMCwgYmxvY2tfdHMgPSAwOworCisJc3dpdGNoICh0eF93aWR0aCkgeworCWNhc2UgTE5XX0RNQV9XSURUSF84QklUOgorCQlieXRlX3dpZHRoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBMTldfRE1BX1dJRFRIXzE2QklUOgorCQlieXRlX3dpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBMTldfRE1BX1dJRFRIXzMyQklUOgorCWRlZmF1bHQ6CisJCWJ5dGVfd2lkdGggPSA0OworCQlicmVhazsKKwl9CisKKwlibG9ja190cyA9IGxlbi9ieXRlX3dpZHRoOworCWlmIChibG9ja190cyA+IGJsb2NrX3NpemUpCisJCWJsb2NrX3RzID0gMHhGRkZGOworCXJldHVybiBibG9ja190czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitETUFDMSBpbnRlcnJ1cHQgRnVuY3Rpb25zKi8KKworLyoqCisgKiBkbWFjMV9tYXNrX3BlcmlwaHJhbF9pbnRyIC0JbWFzayB0aGUgcGVyaXBocmFsIGludGVycnVwdAorICogQG1pZGM6IGRtYSBjaGFubmVsIGZvciB3aGljaCBtYXNraW5nIGlzIHJlcXVpcmVkCisgKgorICogTWFza3MgdGhlIERNQSBwZXJpcGhyYWwgaW50ZXJydXB0CisgKiB0aGlzIGlzIHZhbGlkIGZvciBETUFDMSBmYW1pbHkgY29udHJvbGxlcnMgb25seQorICogVGhpcyBjb250cm9sbGVyIHNob3VsZCBoYXZlIHBlcmlwaHJhbCBtYXNrIHJlZ2lzdGVycyBhbHJlYWR5IG1hcHBlZAorICovCitzdGF0aWMgdm9pZCBkbWFjMV9tYXNrX3BlcmlwaHJhbF9pbnRyKHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gKm1pZGMpCit7CisJdTMyIHBpbXI7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKm1pZCA9IHRvX21pZGRtYV9kZXZpY2UobWlkYy0+Y2hhbi5kZXZpY2UpOworCisJaWYgKG1pZC0+cGltcl9tYXNrKSB7CisJCXBpbXIgPSByZWFkbChtaWQtPm1hc2tfcmVnICsgTE5XX1BFUklQSFJBTF9NQVNLKTsKKwkJcGltciB8PSBtaWQtPnBpbXJfbWFzazsKKwkJd3JpdGVsKHBpbXIsIG1pZC0+bWFza19yZWcgKyBMTldfUEVSSVBIUkFMX01BU0spOworCX0KKwlyZXR1cm47Cit9CisKKy8qKgorICogZG1hYzFfdW5tYXNrX3BlcmlwaHJhbF9pbnRyIC0JdW5tYXNrIHRoZSBwZXJpcGhyYWwgaW50ZXJydXB0CisgKiBAbWlkYzogZG1hIGNoYW5uZWwgZm9yIHdoaWNoIG1hc2tpbmcgaXMgcmVxdWlyZWQKKyAqCisgKiBVbk1hc2tzIHRoZSBETUEgcGVyaXBocmFsIGludGVycnVwdCwKKyAqIHRoaXMgaXMgdmFsaWQgZm9yIERNQUMxIGZhbWlseSBjb250cm9sbGVycyBvbmx5CisgKiBUaGlzIGNvbnRyb2xsZXIgc2hvdWxkIGhhdmUgcGVyaXBocmFsIG1hc2sgcmVnaXN0ZXJzIGFscmVhZHkgbWFwcGVkCisgKi8KK3N0YXRpYyB2b2lkIGRtYWMxX3VubWFza19wZXJpcGhyYWxfaW50cihzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9jaGFuICptaWRjKQoreworCXUzMiBwaW1yOworCXN0cnVjdCBtaWRkbWFfZGV2aWNlICptaWQgPSB0b19taWRkbWFfZGV2aWNlKG1pZGMtPmNoYW4uZGV2aWNlKTsKKworCWlmIChtaWQtPnBpbXJfbWFzaykgeworCQlwaW1yID0gcmVhZGwobWlkLT5tYXNrX3JlZyArIExOV19QRVJJUEhSQUxfTUFTSyk7CisJCXBpbXIgJj0gfm1pZC0+cGltcl9tYXNrOworCQl3cml0ZWwocGltciwgbWlkLT5tYXNrX3JlZyArIExOV19QRVJJUEhSQUxfTUFTSyk7CisJfQorCXJldHVybjsKK30KKworLyoqCisgKiBlbmFibGVfZG1hX2ludGVycnVwdCAtCWVuYWJsZSB0aGUgcGVyaXBocmFsIGludGVycnVwdAorICogQG1pZGM6IGRtYSBjaGFubmVsIGZvciB3aGljaCBlbmFibGUgaW50ZXJydXB0IGlzIHJlcXVpcmVkCisgKgorICogRW5hYmxlIHRoZSBETUEgcGVyaXBocmFsIGludGVycnVwdCwKKyAqIHRoaXMgaXMgdmFsaWQgZm9yIERNQUMxIGZhbWlseSBjb250cm9sbGVycyBvbmx5CisgKiBUaGlzIGNvbnRyb2xsZXIgc2hvdWxkIGhhdmUgcGVyaXBocmFsIG1hc2sgcmVnaXN0ZXJzIGFscmVhZHkgbWFwcGVkCisgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9kbWFfaW50ZXJydXB0KHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gKm1pZGMpCit7CisJZG1hYzFfdW5tYXNrX3BlcmlwaHJhbF9pbnRyKG1pZGMpOworCisJLyplbiBjaCBpbnRlcnJ1cHRzKi8KKwlpb3dyaXRlMzIoVU5NQVNLX0lOVFJfUkVHKG1pZGMtPmNoX2lkKSwgbWlkYy0+ZG1hX2Jhc2UgKyBNQVNLX1RGUik7CisJaW93cml0ZTMyKFVOTUFTS19JTlRSX1JFRyhtaWRjLT5jaF9pZCksIG1pZGMtPmRtYV9iYXNlICsgTUFTS19FUlIpOworCXJldHVybjsKK30KKworLyoqCisgKiBkaXNhYmxlX2RtYV9pbnRlcnJ1cHQgLQlkaXNhYmxlIHRoZSBwZXJpcGhyYWwgaW50ZXJydXB0CisgKiBAbWlkYzogZG1hIGNoYW5uZWwgZm9yIHdoaWNoIGRpc2FibGUgaW50ZXJydXB0IGlzIHJlcXVpcmVkCisgKgorICogRGlzYWJsZSB0aGUgRE1BIHBlcmlwaHJhbCBpbnRlcnJ1cHQsCisgKiB0aGlzIGlzIHZhbGlkIGZvciBETUFDMSBmYW1pbHkgY29udHJvbGxlcnMgb25seQorICogVGhpcyBjb250cm9sbGVyIHNob3VsZCBoYXZlIHBlcmlwaHJhbCBtYXNrIHJlZ2lzdGVycyBhbHJlYWR5IG1hcHBlZAorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2RtYV9pbnRlcnJ1cHQoc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkYykKK3sKKwkvKkNoZWNrIExQRSBQSVNSLCBtYWtlIHN1cmUgZndkIGlzIGRpc2FibGVkKi8KKwlkbWFjMV9tYXNrX3BlcmlwaHJhbF9pbnRyKG1pZGMpOworCWlvd3JpdGUzMihNQVNLX0lOVFJfUkVHKG1pZGMtPmNoX2lkKSwgbWlkYy0+ZG1hX2Jhc2UgKyBNQVNLX0JMT0NLKTsKKwlpb3dyaXRlMzIoTUFTS19JTlRSX1JFRyhtaWRjLT5jaF9pZCksIG1pZGMtPmRtYV9iYXNlICsgTUFTS19URlIpOworCWlvd3JpdGUzMihNQVNLX0lOVFJfUkVHKG1pZGMtPmNoX2lkKSwgbWlkYy0+ZG1hX2Jhc2UgKyBNQVNLX0VSUik7CisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0RNQSBjaGFubmVsIGhlbHBlciBGdW5jdGlvbnMqLworLyoqCisgKiBtaWRfZGVzY19nZXQJCS0JZ2V0IGEgZGVzY3JpcHRvcgorICogQG1pZGM6IGRtYSBjaGFubmVsIGZvciB3aGljaCBkZXNjcmlwdG9yIGlzIHJlcXVpcmVkCisgKgorICogT2J0YWluIGEgZGVzY3JpcHRvciBmb3IgdGhlIGNoYW5uZWwuIFJldHVybnMgTlVMTCBpZiBub25lIGFyZSBmcmVlLgorICogT25jZSB0aGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZCBpdCBpcyBwcml2YXRlIHVudGlsIHB1dCBvbiBhbm90aGVyCisgKiBsaXN0IG9yIGZyZWVkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjICptaWRjX2Rlc2NfZ2V0KHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gKm1pZGMpCit7CisJc3RydWN0IGludGVsX21pZF9kbWFfZGVzYyAqZGVzYywgKl9kZXNjOworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2Rlc2MgKnJldCA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJm1pZGMtPmZyZWVfbGlzdCwgZGVzY19ub2RlKSB7CisJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+dHhkKSkgeworCQkJbGlzdF9kZWwoJmRlc2MtPmRlc2Nfbm9kZSk7CisJCQlyZXQgPSBkZXNjOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJm1pZGMtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbWlkX2Rlc2NfcHV0CQktCXB1dCBhIGRlc2NyaXB0b3IKKyAqIEBtaWRjOiBkbWEgY2hhbm5lbCBmb3Igd2hpY2ggZGVzY3JpcHRvciBpcyByZXF1aXJlZAorICogQGRlc2M6IGRlc2NyaXB0b3IgdG8gcHV0CisgKgorICogUmV0dXJuIGEgZGVzY3JpcHRvciBmcm9tIGx3bl9kZXNjX2dldCBiYWNrIHRvIHRoZSBmcmVlIHBvb2wKKyAqLworc3RhdGljIHZvaWQgbWlkY19kZXNjX3B1dChzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9jaGFuICptaWRjLAorCQkJc3RydWN0IGludGVsX21pZF9kbWFfZGVzYyAqZGVzYykKK3sKKwlpZiAoZGVzYykgeworCQlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5kZXNjX25vZGUsICZtaWRjLT5mcmVlX2xpc3QpOworCQlzcGluX3VubG9ja19iaCgmbWlkYy0+bG9jayk7CisJfQorfQorLyoqCisgKiBtaWRjX2Rvc3RhcnQJCS0JCWJlZ2luIGEgRE1BIHRyYW5zYWN0aW9uCisgKiBAbWlkYzogY2hhbm5lbCBmb3Igd2hpY2ggdHhuIGlzIHRvIGJlIHN0YXJ0ZWQKKyAqIEBmaXJzdDogZmlyc3QgZGVzY3JpcHRvciBvZiBzZXJpZXMKKyAqCisgKiBMb2FkIGEgdHJhbnNhY3Rpb24gaW50byB0aGUgZW5naW5lLiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggbWlkYy0+bG9jaworICogaGVsZCBhbmQgYmggZGlzYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIG1pZGNfZG9zdGFydChzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9jaGFuICptaWRjLAorCQkJc3RydWN0IGludGVsX21pZF9kbWFfZGVzYyAqZmlyc3QpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKm1pZCA9IHRvX21pZGRtYV9kZXZpY2UobWlkYy0+Y2hhbi5kZXZpY2UpOworCisJLyogIGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChtaWRjLT5pbl91c2UgJiYgdGVzdF9jaF9lbihtaWRjLT5kbWFfYmFzZSwgbWlkYy0+Y2hfaWQpKSB7CisJCS8qZXJyb3IqLworCQlwcl9lcnIoIkVSUl9NRE1BOiBjaGFubmVsIGlzIGJ1c3kgaW4gc3RhcnRcbiIpOworCQkvKiBUaGUgdGFza2xldCB3aWxsIGhvcGVmdWxseSBhZHZhbmNlIHRoZSBxdWV1ZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJLyp3cml0ZSByZWdpc3RlcnMgYW5kIGVuKi8KKwlpb3dyaXRlMzIoZmlyc3QtPnNhciwgbWlkYy0+Y2hfcmVncyArIFNBUik7CisJaW93cml0ZTMyKGZpcnN0LT5kYXIsIG1pZGMtPmNoX3JlZ3MgKyBEQVIpOworCWlvd3JpdGUzMihmaXJzdC0+Y2ZnX2hpLCBtaWRjLT5jaF9yZWdzICsgQ0ZHX0hJR0gpOworCWlvd3JpdGUzMihmaXJzdC0+Y2ZnX2xvLCBtaWRjLT5jaF9yZWdzICsgQ0ZHX0xPVyk7CisJaW93cml0ZTMyKGZpcnN0LT5jdGxfbG8sIG1pZGMtPmNoX3JlZ3MgKyBDVExfTE9XKTsKKwlpb3dyaXRlMzIoZmlyc3QtPmN0bF9oaSwgbWlkYy0+Y2hfcmVncyArIENUTF9ISUdIKTsKKwlwcl9kZWJ1ZygiTURNQTpUWCBTQVIgJXgsREFSICV4LENGR0wgJXgsQ0ZHSCAleCxDVExIICV4LCBDVExMICV4XG4iLAorCQkoaW50KWZpcnN0LT5zYXIsIChpbnQpZmlyc3QtPmRhciwgZmlyc3QtPmNmZ19oaSwKKwkJZmlyc3QtPmNmZ19sbywgZmlyc3QtPmN0bF9oaSwgZmlyc3QtPmN0bF9sbyk7CisKKwlpb3dyaXRlMzIoRU5BQkxFX0NIQU5ORUwobWlkYy0+Y2hfaWQpLCBtaWQtPmRtYV9iYXNlICsgRE1BX0NIQU5fRU4pOworCWZpcnN0LT5zdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7Cit9CisKKy8qKgorICogbWlkY19kZXNjcmlwdG9yX2NvbXBsZXRlCS0JcHJvY2VzcyBjb21wbGV0ZWQgZGVzY3JpcHRvcgorICogQG1pZGM6IGNoYW5uZWwgb3duaW5nIHRoZSBkZXNjcmlwdG9yCisgKiBAZGVzYzogdGhlIGRlc2NyaXB0b3IgaXRzZWxmCisgKgorICogUHJvY2VzcyBhIGNvbXBsZXRlZCBkZXNjcmlwdG9yIGFuZCBwZXJmb3JtIGFueSBjYWxsYmFja3MgdXBvbgorICogdGhlIGNvbXBsZXRpb24uIFRoZSBjb21wbGV0aW9uIGhhbmRsaW5nIGRyb3BzIHRoZSBsb2NrIGR1cmluZyB0aGUKKyAqIGNhbGxiYWNrcyBidXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZCBtaWRjX2Rlc2NyaXB0b3JfY29tcGxldGUoc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkYywKKwkgICAgICAgc3RydWN0IGludGVsX21pZF9kbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKnR4ZCA9ICZkZXNjLT50eGQ7CisJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrX3R4ZCA9IE5VTEw7CisJdm9pZCAqcGFyYW1fdHhkID0gTlVMTDsKKworCW1pZGMtPmNvbXBsZXRlZCA9IHR4ZC0+Y29va2llOworCWNhbGxiYWNrX3R4ZCA9IHR4ZC0+Y2FsbGJhY2s7CisJcGFyYW1fdHhkID0gdHhkLT5jYWxsYmFja19wYXJhbTsKKworCWxpc3RfbW92ZSgmZGVzYy0+ZGVzY19ub2RlLCAmbWlkYy0+ZnJlZV9saXN0KTsKKworCXNwaW5fdW5sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwlpZiAoY2FsbGJhY2tfdHhkKSB7CisJCXByX2RlYnVnKCJNRE1BOiBUWEQgY2FsbGJhY2sgc2V0IC4uLiBjYWxsaW5nXG4iKTsKKwkJY2FsbGJhY2tfdHhkKHBhcmFtX3R4ZCk7CisJCXNwaW5fbG9ja19iaCgmbWlkYy0+bG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKworfQorLyoqCisgKiBtaWRjX3NjYW5fZGVzY3JpcHRvcnMgLQkJY2hlY2sgdGhlIGRlc2NyaXB0b3JzIGluIGNoYW5uZWwKKyAqCQkJCQltYXJrIGNvbXBsZXRlZCB3aGVuIHR4IGlzIGNvbXBsZXRldGUKKyAqIEBtaWQ6IGRldmljZQorICogQG1pZGM6IGNoYW5uZWwgdG8gc2NhbgorICoKKyAqIFdhbGsgdGhlIGRlc2NyaXB0b3IgY2hhaW4gZm9yIHRoZSBkZXZpY2UgYW5kIHByb2Nlc3MgYW55IGVudHJpZXMKKyAqIHRoYXQgYXJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgdm9pZCBtaWRjX3NjYW5fZGVzY3JpcHRvcnMoc3RydWN0IG1pZGRtYV9kZXZpY2UgKm1pZCwKKwkJCQlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9jaGFuICptaWRjKQoreworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMLCAqX2Rlc2MgPSBOVUxMOworCisJLyp0eCBpcyBjb21wbGV0ZSovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmbWlkYy0+YWN0aXZlX2xpc3QsIGRlc2Nfbm9kZSkgeworCQlpZiAoZGVzYy0+c3RhdHVzID09IERNQV9JTl9QUk9HUkVTUykgIHsKKwkJCWRlc2MtPnN0YXR1cyA9IERNQV9TVUNDRVNTOworCQkJbWlkY19kZXNjcmlwdG9yX2NvbXBsZXRlKG1pZGMsIGRlc2MpOworCQl9CisJfQorCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitETUEgZW5naW5lIGNhbGxiYWNrIEZ1bmN0aW9ucyovCisvKioKKyAqIGludGVsX21pZF9kbWFfdHhfc3VibWl0IC0JY2FsbGJhY2sgdG8gc3VibWl0IERNQSB0cmFuc2FjdGlvbgorICogQHR4OiBkbWEgZW5naW5lIGRlc2NyaXB0b3IKKyAqCisgKiBTdWJtaXQgdGhlIERNQSB0cmFzYWN0aW9uIGZvciB0aGlzIGRlc2NyaXB0b3IsIHN0YXJ0IGlmIGNoIGlkbGUKKyAqLworc3RhdGljIGRtYV9jb29raWVfdCBpbnRlbF9taWRfZG1hX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQoreworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2Rlc2MJKmRlc2MgPSB0b19pbnRlbF9taWRfZG1hX2Rlc2ModHgpOworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4JKm1pZGMgPSB0b19pbnRlbF9taWRfZG1hX2NoYW4odHgtPmNoYW4pOworCWRtYV9jb29raWVfdAkJY29va2llOworCisJc3Bpbl9sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwljb29raWUgPSBtaWRjLT5jaGFuLmNvb2tpZTsKKworCWlmICgrK2Nvb2tpZSA8IDApCisJCWNvb2tpZSA9IDE7CisKKwltaWRjLT5jaGFuLmNvb2tpZSA9IGNvb2tpZTsKKwlkZXNjLT50eGQuY29va2llID0gY29va2llOworCisKKwlpZiAobGlzdF9lbXB0eSgmbWlkYy0+YWN0aXZlX2xpc3QpKSB7CisJCW1pZGNfZG9zdGFydChtaWRjLCBkZXNjKTsKKwkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmbWlkYy0+YWN0aXZlX2xpc3QpOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJmRlc2MtPmRlc2Nfbm9kZSwgJm1pZGMtPnF1ZXVlKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm1pZGMtPmxvY2spOworCisJcmV0dXJuIGNvb2tpZTsKK30KKworLyoqCisgKiBpbnRlbF9taWRfZG1hX2lzc3VlX3BlbmRpbmcgLQljYWxsYmFjayB0byBpc3N1ZSBwZW5kaW5nIHR4bgorICogQGNoYW46IGNoYW4gd2hlcmUgcGVuZGluZyB0cmFzY2F0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQgYW5kIHN1Ym1pdHRlZAorICoKKyAqIENhbGwgZm9yIHNjYW4gdG8gaXNzdWUgcGVuZGluZyBkZXNjcmlwdG9ycworICovCitzdGF0aWMgdm9pZCBpbnRlbF9taWRfZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4JKm1pZGMgPSB0b19pbnRlbF9taWRfZG1hX2NoYW4oY2hhbik7CisKKwlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCWlmICghbGlzdF9lbXB0eSgmbWlkYy0+cXVldWUpKQorCQltaWRjX3NjYW5fZGVzY3JpcHRvcnModG9fbWlkZG1hX2RldmljZShjaGFuLT5kZXZpY2UpLCBtaWRjKTsKKwlzcGluX3VubG9ja19iaCgmbWlkYy0+bG9jayk7Cit9CisKKy8qKgorICogaW50ZWxfbWlkX2RtYV90eF9zdGF0dXMgLQlSZXR1cm4gc3RhdHVzIG9mIHR4bgorICogQGNoYW46IGNoYW4gZm9yIHdoZXJlIHN0YXR1cyBuZWVkcyB0byBiZSBjaGVja2VkCisgKiBAY29va2llOiBjb29raWUgZm9yIHR4bgorICogQHR4c3RhdGU6IERNQSB0eG4gc3RhdGUKKyAqCisgKiBSZXR1cm4gc3RhdHVzIG9mIERNQSB0eG4KKyAqLworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBpbnRlbF9taWRfZG1hX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCQlkbWFfY29va2llX3QgY29va2llLAorCQkJCQkJc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9jaGFuCSptaWRjID0gdG9faW50ZWxfbWlkX2RtYV9jaGFuKGNoYW4pOworCWRtYV9jb29raWVfdAkJbGFzdF91c2VkOworCWRtYV9jb29raWVfdAkJbGFzdF9jb21wbGV0ZTsKKwlpbnQJCQkJcmV0OworCisJbGFzdF9jb21wbGV0ZSA9IG1pZGMtPmNvbXBsZXRlZDsKKwlsYXN0X3VzZWQgPSBjaGFuLT5jb29raWU7CisKKwlyZXQgPSBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworCWlmIChyZXQgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJbWlkY19zY2FuX2Rlc2NyaXB0b3JzKHRvX21pZGRtYV9kZXZpY2UoY2hhbi0+ZGV2aWNlKSwgbWlkYyk7CisKKwkJbGFzdF9jb21wbGV0ZSA9IG1pZGMtPmNvbXBsZXRlZDsKKwkJbGFzdF91c2VkID0gY2hhbi0+Y29va2llOworCisJCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CisJfQorCisJaWYgKHR4c3RhdGUpIHsKKwkJdHhzdGF0ZS0+bGFzdCA9IGxhc3RfY29tcGxldGU7CisJCXR4c3RhdGUtPnVzZWQgPSBsYXN0X3VzZWQ7CisJCXR4c3RhdGUtPnJlc2lkdWUgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGludGVsX21pZF9kbWFfZGV2aWNlX2NvbnRyb2wgLQlETUEgZGV2aWNlIGNvbnRyb2wKKyAqIEBjaGFuOiBjaGFuIGZvciBETUEgY29udHJvbAorICogQGNtZDogY29udHJvbCBjbWQKKyAqIEBhcmc6IGNtZCBhcmcgdmFsdWUKKyAqCisgKiBQZXJmb3JtIERNQSBjb250cm9sIGNvbW1hbmQKKyAqLworc3RhdGljIGludCBpbnRlbF9taWRfZG1hX2RldmljZV9jb250cm9sKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCWVudW0gZG1hX2N0cmxfY21kIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbgkqbWlkYyA9IHRvX2ludGVsX21pZF9kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbWlkZG1hX2RldmljZQkqbWlkID0gdG9fbWlkZG1hX2RldmljZShjaGFuLT5kZXZpY2UpOworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2Rlc2MJKmRlc2MsICpfZGVzYzsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwlpZiAoY21kICE9IERNQV9URVJNSU5BVEVfQUxMKQorCQlyZXR1cm4gLUVOWElPOworCisJc3Bpbl9sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwlpZiAobWlkYy0+aW5fdXNlID09IGZhbHNlKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCWxpc3Rfc3BsaWNlX2luaXQoJm1pZGMtPmZyZWVfbGlzdCwgJmxpc3QpOworCW1pZGMtPmRlc2NzX2FsbG9jYXRlZCA9IDA7CisJbWlkYy0+c2xhdmUgPSBOVUxMOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJZGlzYWJsZV9kbWFfaW50ZXJydXB0KG1pZGMpOworCisJc3Bpbl91bmxvY2tfYmgoJm1pZGMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmxpc3QsIGRlc2Nfbm9kZSkgeworCQlwcl9kZWJ1ZygiTURNQTogZnJlZWluZyBkZXNjcmlwdG9yICVwXG4iLCBkZXNjKTsKKwkJcGNpX3Bvb2xfZnJlZShtaWQtPmRtYV9wb29sLCBkZXNjLCBkZXNjLT50eGQucGh5cyk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGludGVsX21pZF9kbWFfcHJlcF9zbGF2ZV9zZyAtCVByZXAgc2xhdmUgc2cgdHhuCisgKiBAY2hhbjogY2hhbiBmb3IgRE1BIHRyYW5zZmVyCisgKiBAc2dsOiBzY2F0dGVyIGdhdGhlciBsaXN0CisgKiBAc2dfbGVuOiBsZW5ndGggb2Ygc2cgdHhuCisgKiBAZGlyZWN0aW9uOiBETUEgdHJhbnNmZXIgZGlydG4KKyAqIEBmbGFnczogRE1BIGZsYWdzCisgKgorICogRG8gRE1BIHNnIHR4bjogTk9UIHN1cHBvcnRlZCBub3cKKyAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqaW50ZWxfbWlkX2RtYV9wcmVwX3NsYXZlX3NnKAorCQkJc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCXVuc2lnbmVkIGludCBzZ19sZW4sIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJLypub3Qgc3VwcG9ydGVkIG5vdyovCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogaW50ZWxfbWlkX2RtYV9wcmVwX21lbWNweSAtCVByZXAgbWVtY3B5IHR4bgorICogQGNoYW46IGNoYW4gZm9yIERNQSB0cmFuc2ZlcgorICogQGRlc3Q6IGRlc3RuIGFkZHJlc3MKKyAqIEBzcmM6IHNyYyBhZGRyZXNzCisgKiBAbGVuOiBETUEgdHJhbnNmZXIgbGVuCisgKiBAZmxhZ3M6IERNQSBmbGFncworICoKKyAqIFBlcmZvcm0gYSBETUEgbWVtY3B5LiBOb3RlIHdlIHN1cHBvcnQgc2xhdmUgcGVyaXBocmFsIERNQSB0cmFuc2ZlcnMgb25seQorICogVGhlIHBlcmlwaHJhbCB0eG4gZGV0YWlscyBzaG91bGQgYmUgZmlsbGVkIGluIHNsYXZlIHN0cnVjdHVyZSBwcm9wZXJseQorICogUmV0dXJucyB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyB0eG4KKyAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqaW50ZWxfbWlkX2RtYV9wcmVwX21lbWNweSgKKwkJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkZXN0LAorCQkJZG1hX2FkZHJfdCBzcmMsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkYzsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjICpkZXNjID0gTlVMTDsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9zbGF2ZSAqbWlkczsKKwl1bmlvbiBpbnRlbF9taWRfZG1hX2N0bF9sbyBjdGxfbG87CisJdW5pb24gaW50ZWxfbWlkX2RtYV9jdGxfaGkgY3RsX2hpOworCXVuaW9uIGludGVsX21pZF9kbWFfY2ZnX2xvIGNmZ19sbzsKKwl1bmlvbiBpbnRlbF9taWRfZG1hX2NmZ19oaSBjZmdfaGk7CisJZW51bSBpbnRlbF9taWRfZG1hX3dpZHRoIHdpZHRoID0gMDsKKworCXByX2RlYnVnKCJNRE1BOiBQcmVwIGZvciBtZW1jcHlcbiIpOworCVdBUk5fT04oIWNoYW4pOworCWlmICghbGVuKQorCQlyZXR1cm4gTlVMTDsKKworCW1pZHMgPSBjaGFuLT5wcml2YXRlOworCVdBUk5fT04oIW1pZHMpOworCisJbWlkYyA9IHRvX2ludGVsX21pZF9kbWFfY2hhbihjaGFuKTsKKwlXQVJOX09OKCFtaWRjKTsKKworCXByX2RlYnVnKCJNRE1BOmNhbGxlZCBmb3IgRE1BICV4IENIICVkIExlbmd0aCAlenVcbiIsCisJCQkJbWlkYy0+ZG1hLT5wY2lfaWQsIG1pZGMtPmNoX2lkLCBsZW4pOworCXByX2RlYnVnKCJNRE1BOkNmZyBwYXNzZWQgTW9kZSAleCwgRGlybiAleCwgSFMgJXgsIFdpZHRoICV4XG4iLAorCQltaWRzLT5jZmdfbW9kZSwgbWlkcy0+ZGlybiwgbWlkcy0+aHNfbW9kZSwgbWlkcy0+c3JjX3dpZHRoKTsKKworCS8qY2FsY3VsYXRlIENGR19MTyovCisJaWYgKG1pZHMtPmhzX21vZGUgPT0gTE5XX0RNQV9TV19IUykgeworCQljZmdfbG8uY2ZnX2xvID0gMDsKKwkJY2ZnX2xvLmNmZ3guaHNfc2VsX2RzdCA9IDE7CisJCWNmZ19sby5jZmd4LmhzX3NlbF9zcmMgPSAxOworCX0gZWxzZSBpZiAobWlkcy0+aHNfbW9kZSA9PSBMTldfRE1BX0hXX0hTKQorCQljZmdfbG8uY2ZnX2xvID0gMHgwMDAwMDsKKworCS8qY2FsY3VsYXRlIENGR19ISSovCisJaWYgKG1pZHMtPmNmZ19tb2RlID09IExOV19ETUFfTUVNX1RPX01FTSkgeworCQkvKlNXIEhTIG9ubHkqLworCQljZmdfaGkuY2ZnX2hpID0gMDsKKwl9IGVsc2UgeworCQljZmdfaGkuY2ZnX2hpID0gMDsKKwkJaWYgKG1pZGMtPmRtYS0+cGltcl9tYXNrKSB7CisJCQljZmdfaGkuY2ZneC5wcm90Y3RsID0gMHgwOyAvKmRlZmF1bHQgdmFsdWUqLworCQkJY2ZnX2hpLmNmZ3guZmlmb19tb2RlID0gMTsKKwkJCWlmIChtaWRzLT5kaXJuID09IERNQV9UT19ERVZJQ0UpIHsKKwkJCQljZmdfaGkuY2ZneC5zcmNfcGVyID0gMDsKKwkJCQlpZiAobWlkcy0+ZGV2aWNlX2luc3RhbmNlID09IDApCisJCQkJCWNmZ19oaS5jZmd4LmRzdF9wZXIgPSAzOworCQkJCWlmIChtaWRzLT5kZXZpY2VfaW5zdGFuY2UgPT0gMSkKKwkJCQkJY2ZnX2hpLmNmZ3guZHN0X3BlciA9IDE7CisJCQl9IGVsc2UgaWYgKG1pZHMtPmRpcm4gPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCQkJaWYgKG1pZHMtPmRldmljZV9pbnN0YW5jZSA9PSAwKQorCQkJCQljZmdfaGkuY2ZneC5zcmNfcGVyID0gMjsKKwkJCQlpZiAobWlkcy0+ZGV2aWNlX2luc3RhbmNlID09IDEpCisJCQkJCWNmZ19oaS5jZmd4LnNyY19wZXIgPSAwOworCQkJCWNmZ19oaS5jZmd4LmRzdF9wZXIgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJY2ZnX2hpLmNmZ3gucHJvdGN0bCA9IDB4MTsgLypkZWZhdWx0IHZhbHVlKi8KKwkJCWNmZ19oaS5jZmd4LnNyY19wZXIgPSBjZmdfaGkuY2ZneC5kc3RfcGVyID0KKwkJCQkJbWlkYy0+Y2hfaWQgLSBtaWRjLT5kbWEtPmNoYW5fYmFzZTsKKwkJfQorCX0KKworCS8qY2FsY3VsYXRlIENUTF9ISSovCisJY3RsX2hpLmN0bHgucmVzZXIgPSAwOworCXdpZHRoID0gbWlkcy0+c3JjX3dpZHRoOworCisJY3RsX2hpLmN0bHguYmxvY2tfdHMgPSBnZXRfYmxvY2tfdHMobGVuLCB3aWR0aCwgbWlkYy0+ZG1hLT5ibG9ja19zaXplKTsKKwlwcl9kZWJ1ZygiTURNQTpjYWxjIGxlbiAlZCBmb3IgYmxvY2sgc2l6ZSAlZFxuIiwKKwkJCQljdGxfaGkuY3RseC5ibG9ja190cywgbWlkYy0+ZG1hLT5ibG9ja19zaXplKTsKKwkvKmNhbGN1bGF0ZSBDVExfTE8qLworCWN0bF9sby5jdGxfbG8gPSAwOworCWN0bF9sby5jdGx4LmludF9lbiA9IDE7CisJY3RsX2xvLmN0bHguZHN0X3RyX3dpZHRoID0gbWlkcy0+ZHN0X3dpZHRoOworCWN0bF9sby5jdGx4LnNyY190cl93aWR0aCA9IG1pZHMtPnNyY193aWR0aDsKKwljdGxfbG8uY3RseC5kc3RfbXNpemUgPSBtaWRzLT5zcmNfbXNpemU7CisJY3RsX2xvLmN0bHguc3JjX21zaXplID0gbWlkcy0+ZHN0X21zaXplOworCisJaWYgKG1pZHMtPmNmZ19tb2RlID09IExOV19ETUFfTUVNX1RPX01FTSkgeworCQljdGxfbG8uY3RseC50dF9mYyA9IDA7CisJCWN0bF9sby5jdGx4LnNpbmMgPSAwOworCQljdGxfbG8uY3RseC5kaW5jID0gMDsKKwl9IGVsc2UgeworCQlpZiAobWlkcy0+ZGlybiA9PSBETUFfVE9fREVWSUNFKSB7CisJCQljdGxfbG8uY3RseC5zaW5jID0gMDsKKwkJCWN0bF9sby5jdGx4LmRpbmMgPSAyOworCQkJY3RsX2xvLmN0bHgudHRfZmMgPSAxOworCQl9IGVsc2UgaWYgKG1pZHMtPmRpcm4gPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCQljdGxfbG8uY3RseC5zaW5jID0gMjsKKwkJCWN0bF9sby5jdGx4LmRpbmMgPSAwOworCQkJY3RsX2xvLmN0bHgudHRfZmMgPSAyOworCQl9CisJfQorCisJcHJfZGVidWcoIk1ETUE6Q2FsYyBDVEwgTE8gJXgsIENUTCBISSAleCwgQ0ZHIExPICV4LCBDRkcgSEkgJXhcbiIsCisJCWN0bF9sby5jdGxfbG8sIGN0bF9oaS5jdGxfaGksIGNmZ19sby5jZmdfbG8sIGNmZ19oaS5jZmdfaGkpOworCisJZW5hYmxlX2RtYV9pbnRlcnJ1cHQobWlkYyk7CisKKwlkZXNjID0gbWlkY19kZXNjX2dldChtaWRjKTsKKwlpZiAoZGVzYyA9PSBOVUxMKQorCQlnb3RvIGVycl9kZXNjX2dldDsKKwlkZXNjLT5zYXIgPSBzcmM7CisJZGVzYy0+ZGFyID0gZGVzdCA7CisJZGVzYy0+bGVuID0gbGVuOworCWRlc2MtPmNmZ19oaSA9IGNmZ19oaS5jZmdfaGk7CisJZGVzYy0+Y2ZnX2xvID0gY2ZnX2xvLmNmZ19sbzsKKwlkZXNjLT5jdGxfbG8gPSBjdGxfbG8uY3RsX2xvOworCWRlc2MtPmN0bF9oaSA9IGN0bF9oaS5jdGxfaGk7CisJZGVzYy0+d2lkdGggPSB3aWR0aDsKKwlkZXNjLT5kaXJuID0gbWlkcy0+ZGlybjsKKwlyZXR1cm4gJmRlc2MtPnR4ZDsKKworZXJyX2Rlc2NfZ2V0OgorCXByX2VycigiRVJSX01ETUE6IEZhaWxlZCB0byBnZXQgZGVzY1xuIik7CisJbWlkY19kZXNjX3B1dChtaWRjLCBkZXNjKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBpbnRlbF9taWRfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMgLQlGcmVlcyBkbWEgcmVzb3VyY2VzCisgKiBAY2hhbjogY2hhbiByZXF1aXJpbmcgYXR0ZW50aW9uCisgKgorICogRnJlZXMgdGhlIGFsbG9jYXRlZCByZXNvdXJjZXMgb24gdGhpcyBETUEgY2hhbgorICovCitzdGF0aWMgdm9pZCBpbnRlbF9taWRfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4JKm1pZGMgPSB0b19pbnRlbF9taWRfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UJKm1pZCA9IHRvX21pZGRtYV9kZXZpY2UoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjCSpkZXNjLCAqX2Rlc2M7CisKKwlpZiAodHJ1ZSA9PSBtaWRjLT5pbl91c2UpIHsKKwkJLyp0cnlpbmcgdG8gZnJlZSBjaCBpbiB1c2UhISEhISovCisJCXByX2VycigiRVJSX01ETUE6IHRyeWluZyB0byBmcmVlIGNoIGluIHVzZVxuIik7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwltaWRjLT5kZXNjc19hbGxvY2F0ZWQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJm1pZGMtPmFjdGl2ZV9saXN0LCBkZXNjX25vZGUpIHsKKwkJbGlzdF9kZWwoJmRlc2MtPmRlc2Nfbm9kZSk7CisJCXBjaV9wb29sX2ZyZWUobWlkLT5kbWFfcG9vbCwgZGVzYywgZGVzYy0+dHhkLnBoeXMpOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZtaWRjLT5mcmVlX2xpc3QsIGRlc2Nfbm9kZSkgeworCQlsaXN0X2RlbCgmZGVzYy0+ZGVzY19ub2RlKTsKKwkJcGNpX3Bvb2xfZnJlZShtaWQtPmRtYV9wb29sLCBkZXNjLCBkZXNjLT50eGQucGh5cyk7CisJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJm1pZGMtPnF1ZXVlLCBkZXNjX25vZGUpIHsKKwkJbGlzdF9kZWwoJmRlc2MtPmRlc2Nfbm9kZSk7CisJCXBjaV9wb29sX2ZyZWUobWlkLT5kbWFfcG9vbCwgZGVzYywgZGVzYy0+dHhkLnBoeXMpOworCX0KKwlzcGluX3VubG9ja19iaCgmbWlkYy0+bG9jayk7CisJbWlkYy0+aW5fdXNlID0gZmFsc2U7CisJLyogRGlzYWJsZSBDSCBpbnRlcnJ1cHRzICovCisJaW93cml0ZTMyKE1BU0tfSU5UUl9SRUcobWlkYy0+Y2hfaWQpLCBtaWQtPmRtYV9iYXNlICsgTUFTS19CTE9DSyk7CisJaW93cml0ZTMyKE1BU0tfSU5UUl9SRUcobWlkYy0+Y2hfaWQpLCBtaWQtPmRtYV9iYXNlICsgTUFTS19FUlIpOworfQorCisvKioKKyAqIGludGVsX21pZF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMgLQlBbGxvY2F0ZSBkbWEgcmVzb3VyY2VzCisgKiBAY2hhbjogY2hhbiByZXF1aXJpbmcgYXR0ZW50aW9uCisgKgorICogQWxsb2NhdGVzIERNQSByZXNvdXJjZXMgb24gdGhpcyBjaGFuCisgKiBSZXR1cm4gdGhlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZAorICovCitzdGF0aWMgaW50IGludGVsX21pZF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4JKm1pZGMgPSB0b19pbnRlbF9taWRfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UJKm1pZCA9IHRvX21pZGRtYV9kZXZpY2UoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjCSpkZXNjOworCWRtYV9hZGRyX3QJCXBoeXM7CisJaW50CWkgPSAwOworCisKKwkvKiBBU1NFUlQ6ICBjaGFubmVsIGlzIGlkbGUgKi8KKwlpZiAodGVzdF9jaF9lbihtaWQtPmRtYV9iYXNlLCBtaWRjLT5jaF9pZCkpIHsKKwkJLypjaCBpcyBub3QgaWRsZSovCisJCXByX2VycigiRVJSX01ETUE6IGNoIG5vdCBpZGxlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1pZGMtPmNvbXBsZXRlZCA9IGNoYW4tPmNvb2tpZSA9IDE7CisKKwlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCXdoaWxlIChtaWRjLT5kZXNjc19hbGxvY2F0ZWQgPCBERVNDU19QRVJfQ0hBTk5FTCkgeworCQlzcGluX3VubG9ja19iaCgmbWlkYy0+bG9jayk7CisJCWRlc2MgPSBwY2lfcG9vbF9hbGxvYyhtaWQtPmRtYV9wb29sLCBHRlBfS0VSTkVMLCAmcGh5cyk7CisJCWlmICghZGVzYykgeworCQkJcHJfZXJyKCJFUlJfTURNQTogZGVzYyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCQkvKmNoZWNrKi8KKwkJfQorCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjLT50eGQsIGNoYW4pOworCQlkZXNjLT50eGQudHhfc3VibWl0ID0gaW50ZWxfbWlkX2RtYV90eF9zdWJtaXQ7CisJCWRlc2MtPnR4ZC5mbGFncyA9IERNQV9DVFJMX0FDSzsKKwkJZGVzYy0+dHhkLnBoeXMgPSBwaHlzOworCQlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCQlpID0gKyttaWRjLT5kZXNjc19hbGxvY2F0ZWQ7CisJCWxpc3RfYWRkX3RhaWwoJmRlc2MtPmRlc2Nfbm9kZSwgJm1pZGMtPmZyZWVfbGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwltaWRjLT5pbl91c2UgPSBmYWxzZTsKKwlwcl9kZWJ1ZygiTUlEX0RNQTogRGVzYyBhbGxvYyBkb25lIHJldDogJWQgZGVzY1xuIiwgaSk7CisJcmV0dXJuIGk7Cit9CisKKy8qKgorICogbWlkY19oYW5kbGVfZXJyb3IgLQlIYW5kbGUgRE1BIHR4biBlcnJvcgorICogQG1pZDogY29udHJvbGxlciB3aGVyZSBlcnJvciBvY2N1cmVkCisgKiBAbWlkYzogY2hhbiB3aGVyZSBlcnJvciBvY2N1cmVkCisgKgorICogU2NhbiB0aGUgZGVzY3JpcHRvciBmb3IgZXJyb3IKKyAqLworc3RhdGljIHZvaWQgbWlkY19oYW5kbGVfZXJyb3Ioc3RydWN0IG1pZGRtYV9kZXZpY2UgKm1pZCwKKwkJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkYykKK3sKKwltaWRjX3NjYW5fZGVzY3JpcHRvcnMobWlkLCBtaWRjKTsKK30KKworLyoqCisgKiBkbWFfdGFza2xldCAtCURNQSBpbnRlcnJ1cHQgdGFza2xldAorICogQGRhdGE6IHRhc2tsZXQgYXJnICh0aGUgY29udHJvbGxlciBzdHJ1Y3R1cmUpCisgKgorICogU2NhbiB0aGUgY29udHJvbGxlciBmb3IgaW50ZXJydXB0cyBmb3IgY29tcGxldGlvbi9lcnJvcgorICogQ2xlYXIgdGhlIGludGVycnVwdCBhbmQgY2FsbCBmb3IgaGFuZGxpbmcgY29tcGxldGlvbi9lcnJvcgorICovCitzdGF0aWMgdm9pZCBkbWFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKm1pZCA9IE5VTEw7CisJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkYyA9IE5VTEw7CisJdTMyIHN0YXR1czsKKwlpbnQgaTsKKworCW1pZCA9IChzdHJ1Y3QgbWlkZG1hX2RldmljZSAqKWRhdGE7CisJaWYgKG1pZCA9PSBOVUxMKSB7CisJCXByX2VycigiRVJSX01ETUE6IHRhc2tsZXQgTnVsbCBwYXJhbVxuIik7CisJCXJldHVybjsKKwl9CisJcHJfZGVidWcoIk1ETUE6IGluIHRhc2tsZXQgZm9yIGRldmljZSAleFxuIiwgbWlkLT5wY2lfaWQpOworCXN0YXR1cyA9IGlvcmVhZDMyKG1pZC0+ZG1hX2Jhc2UgKyBSQVdfVEZSKTsKKwlwcl9kZWJ1ZygiTURNQTpSQVdfVEZSICV4XG4iLCBzdGF0dXMpOworCXN0YXR1cyAmPSBtaWQtPmludHJfbWFzazsKKwl3aGlsZSAoc3RhdHVzKSB7CisJCS8qdHhuIGludGVycnVwdCovCisJCWkgPSBnZXRfY2hfaW5kZXgoJnN0YXR1cywgbWlkLT5jaGFuX2Jhc2UpOworCQlpZiAoaSA8IDApIHsKKwkJCXByX2VycigiRVJSX01ETUE6SW52YWxpZCBjaCBpbmRleCAleFxuIiwgaSk7CisJCQlyZXR1cm47CisJCX0KKwkJbWlkYyA9ICZtaWQtPmNoW2ldOworCQlpZiAobWlkYyA9PSBOVUxMKSB7CisJCQlwcl9lcnIoIkVSUl9NRE1BOk51bGwgcGFyYW0gbWlkY1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcHJfZGVidWcoIk1ETUE6VHggY29tcGxldGUgaW50ZXJydXB0ICV4LCBDaCBObyAlZCBJbmRleCAlZFxuIiwKKwkJCQlzdGF0dXMsIG1pZGMtPmNoX2lkLCBpKTsKKwkJLypjbGVhcmluZyB0aGlzIGludGVycnVwdHMgZmlyc3QqLworCQlpb3dyaXRlMzIoKDEgPDwgbWlkYy0+Y2hfaWQpLCBtaWQtPmRtYV9iYXNlICsgQ0xFQVJfVEZSKTsKKwkJaW93cml0ZTMyKCgxIDw8IG1pZGMtPmNoX2lkKSwgbWlkLT5kbWFfYmFzZSArIENMRUFSX0JMT0NLKTsKKworCQlzcGluX2xvY2tfYmgoJm1pZGMtPmxvY2spOworCQltaWRjX3NjYW5fZGVzY3JpcHRvcnMobWlkLCBtaWRjKTsKKwkJcHJfZGVidWcoIk1ETUE6U2NhbiBvZiBkZXNjLi4uIGNvbXBsZXRlLCB1bm1hc2tpbmdcbiIpOworCQlpb3dyaXRlMzIoVU5NQVNLX0lOVFJfUkVHKG1pZGMtPmNoX2lkKSwKKwkJCQltaWQtPmRtYV9iYXNlICsgTUFTS19URlIpOworCQlzcGluX3VubG9ja19iaCgmbWlkYy0+bG9jayk7CisJfQorCisJc3RhdHVzID0gaW9yZWFkMzIobWlkLT5kbWFfYmFzZSArIFJBV19FUlIpOworCXN0YXR1cyAmPSBtaWQtPmludHJfbWFzazsKKwl3aGlsZSAoc3RhdHVzKSB7CisJCS8qZXJyIGludGVycnVwdCovCisJCWkgPSBnZXRfY2hfaW5kZXgoJnN0YXR1cywgbWlkLT5jaGFuX2Jhc2UpOworCQlpZiAoaSA8IDApIHsKKwkJCXByX2VycigiRVJSX01ETUE6SW52YWxpZCBjaCBpbmRleCAleFxuIiwgaSk7CisJCQlyZXR1cm47CisJCX0KKwkJbWlkYyA9ICZtaWQtPmNoW2ldOworCQlpZiAobWlkYyA9PSBOVUxMKSB7CisJCQlwcl9lcnIoIkVSUl9NRE1BOk51bGwgcGFyYW0gbWlkY1xuIik7CisJCQlyZXR1cm47CisJCX0KKwkJcHJfZGVidWcoIk1ETUE6VHggY29tcGxldGUgaW50ZXJydXB0ICV4LCBDaCBObyAlZCBJbmRleCAlZFxuIiwKKwkJCQlzdGF0dXMsIG1pZGMtPmNoX2lkLCBpKTsKKworCQlpb3dyaXRlMzIoKDEgPDwgbWlkYy0+Y2hfaWQpLCBtaWQtPmRtYV9iYXNlICsgQ0xFQVJfRVJSKTsKKwkJc3Bpbl9sb2NrX2JoKCZtaWRjLT5sb2NrKTsKKwkJbWlkY19oYW5kbGVfZXJyb3IobWlkLCBtaWRjKTsKKwkJaW93cml0ZTMyKFVOTUFTS19JTlRSX1JFRyhtaWRjLT5jaF9pZCksCisJCQkJbWlkLT5kbWFfYmFzZSArIE1BU0tfRVJSKTsKKwkJc3Bpbl91bmxvY2tfYmgoJm1pZGMtPmxvY2spOworCX0KKwlwcl9kZWJ1ZygiTURNQTpFeGl0aW5nIHRha3NsZXQuLi5cbiIpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZG1hX3Rhc2tsZXQxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlwcl9kZWJ1ZygiTURNQTppbiB0YWtzbGV0MS4uLlxuIik7CisJcmV0dXJuIGRtYV90YXNrbGV0KGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBkbWFfdGFza2xldDIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXByX2RlYnVnKCJNRE1BOmluIHRha3NsZXQyLi4uXG4iKTsKKwlyZXR1cm4gZG1hX3Rhc2tsZXQoZGF0YSk7Cit9CisKKy8qKgorICogaW50ZWxfbWlkX2RtYV9pbnRlcnJ1cHQgLQlETUEgSVNSCisgKiBAaXJxOiBJUlEgd2hlcmUgaW50ZXJydXB0IG9jY3VycmVkCisgKiBAZGF0YTogSVNSIGNsbGJhY2sgZGF0YSAodGhlIGNvbnRyb2xsZXIgc3RydWN0dXJlKQorICoKKyAqIFNlZSBpZiB0aGlzIGlzIG91ciBpbnRlcnJ1cHQgaWYgc28gdGhlbiBzY2hlZHVsZSB0aGUgdGFza2xldAorICogb3RoZXJ3aXNlIGlnbm9yZQorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZWxfbWlkX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWlkZG1hX2RldmljZSAqbWlkID0gZGF0YTsKKwl1MzIgc3RhdHVzOworCWludCBjYWxsX3Rhc2tsZXQgPSAwOworCisJLypETUEgSW50ZXJydXB0Ki8KKwlwcl9kZWJ1ZygiTURNQTpHb3QgYW4gaW50ZXJydXB0IG9uIGlycSAlZFxuIiwgaXJxKTsKKwlpZiAoIW1pZCkgeworCQlwcl9lcnIoIkVSUl9NRE1BOm51bGwgcG9pbnRlciBtaWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGF0dXMgPSBpb3JlYWQzMihtaWQtPmRtYV9iYXNlICsgUkFXX1RGUik7CisJcHJfZGVidWcoIk1ETUE6IFN0YXR1cyAleCwgTWFzayAleFxuIiwgc3RhdHVzLCBtaWQtPmludHJfbWFzayk7CisJc3RhdHVzICY9IG1pZC0+aW50cl9tYXNrOworCWlmIChzdGF0dXMpIHsKKwkJLypuZWVkIHRvIGRpc2FibGUgaW50ciovCisJCWlvd3JpdGUzMigoc3RhdHVzIDw8IDgpLCBtaWQtPmRtYV9iYXNlICsgTUFTS19URlIpOworCQlwcl9kZWJ1ZygiTURNQTogQ2FsbGluZyB0YXNrbGV0ICV4XG4iLCBzdGF0dXMpOworCQljYWxsX3Rhc2tsZXQgPSAxOworCX0KKwlzdGF0dXMgPSBpb3JlYWQzMihtaWQtPmRtYV9iYXNlICsgUkFXX0VSUik7CisJc3RhdHVzICY9IG1pZC0+aW50cl9tYXNrOworCWlmIChzdGF0dXMpIHsKKwkJaW93cml0ZTMyKE1BU0tfSU5UUl9SRUcoc3RhdHVzKSwgbWlkLT5kbWFfYmFzZSArIE1BU0tfRVJSKTsKKwkJY2FsbF90YXNrbGV0ID0gMTsKKwl9CisJaWYgKGNhbGxfdGFza2xldCkKKwkJdGFza2xldF9zY2hlZHVsZSgmbWlkLT50YXNrbGV0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGludGVsX21pZF9kbWFfaW50ZXJydXB0MShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXJldHVybiBpbnRlbF9taWRfZG1hX2ludGVycnVwdChpcnEsIGRhdGEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZWxfbWlkX2RtYV9pbnRlcnJ1cHQyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGludGVsX21pZF9kbWFfaW50ZXJydXB0KGlycSwgZGF0YSk7Cit9CisKKy8qKgorICogbWlkX3NldHVwX2RtYSAtCVNldHVwIHRoZSBETUEgY29udHJvbGxlcgorICogQHBkZXY6IENvbnRyb2xsZXIgUENJIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBJbml0aWxpemUgdGhlIERNQSBjb250cm9sbGVyLCBjaGFubmVscywgcmVnaXN0ZXJzIHdpdGggRE1BIGVuZ2luZSwKKyAqIElTUi4gSW5pdGlsaXplIERNQSBjb250cm9sbGVyIGNoYW5uZWxzLgorICovCitzdGF0aWMgaW50IG1pZF9zZXR1cF9kbWEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKmRtYSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyLCBpOworCXVuc2lnbmVkIGludCBpcnFfbGV2ZWw7CisKKwkvKiBETUEgY29oZXJlbnQgbWVtb3J5IHBvb2wgZm9yIERNQSBkZXNjcmlwdG9yIGFsbG9jYXRpb25zICovCisJZG1hLT5kbWFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgiaW50ZWxfbWlkX2RtYV9kZXNjX3Bvb2wiLCBwZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IGludGVsX21pZF9kbWFfZGVzYyksCisJCQkJCTMyLCAwKTsKKwlpZiAoTlVMTCA9PSBkbWEtPmRtYV9wb29sKSB7CisJCXByX2VycigiRVJSX01ETUE6cGNpX3Bvb2xfY3JlYXRlIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWtmcmVlKGRtYSk7CisJCWdvdG8gZXJyX2RtYV9wb29sOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZkbWEtPmNvbW1vbi5jaGFubmVscyk7CisJZG1hLT5wY2lfaWQgPSBwZGV2LT5kZXZpY2U7CisJaWYgKGRtYS0+cGltcl9tYXNrKSB7CisJCWRtYS0+bWFza19yZWcgPSBpb3JlbWFwKExOV19QRVJJUEhSQUxfTUFTS19CQVNFLAorCQkJCQlMTldfUEVSSVBIUkFMX01BU0tfU0laRSk7CisJCWlmIChkbWEtPm1hc2tfcmVnID09IE5VTEwpIHsKKwkJCXByX2VycigiRVJSX01ETUE6Q2FudCBtYXAgcGVyaXBocmFsIGludHIgc3BhY2UgISFcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UKKwkJZG1hLT5tYXNrX3JlZyA9IE5VTEw7CisKKwlwcl9kZWJ1ZygiTURNQTpBZGRpbmcgJWQgY2hhbm5lbCBmb3IgdGhpcyBjb250cm9sbGVyXG4iLCBkbWEtPm1heF9jaGFuKTsKKwkvKmluaXQgQ0ggc3RydWN0dXJlcyovCisJZG1hLT5pbnRyX21hc2sgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkbWEtPm1heF9jaGFuOyBpKyspIHsKKwkJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiAqbWlkY2ggPSAmZG1hLT5jaFtpXTsKKworCQltaWRjaC0+Y2hhbi5kZXZpY2UgPSAmZG1hLT5jb21tb247CisJCW1pZGNoLT5jaGFuLmNvb2tpZSA9ICAxOworCQltaWRjaC0+Y2hhbi5jaGFuX2lkID0gaTsKKwkJbWlkY2gtPmNoX2lkID0gZG1hLT5jaGFuX2Jhc2UgKyBpOworCQlwcl9kZWJ1ZygiTURNQTpJbml0IENIICVkLCBJRCAlZFxuIiwgaSwgbWlkY2gtPmNoX2lkKTsKKworCQltaWRjaC0+ZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCQltaWRjaC0+Y2hfcmVncyA9IGRtYS0+ZG1hX2Jhc2UgKyBETUFfQ0hfU0laRSAqIG1pZGNoLT5jaF9pZDsKKwkJbWlkY2gtPmRtYSA9IGRtYTsKKwkJZG1hLT5pbnRyX21hc2sgfD0gMSA8PCAoZG1hLT5jaGFuX2Jhc2UgKyBpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJm1pZGNoLT5sb2NrKTsKKworCQlJTklUX0xJU1RfSEVBRCgmbWlkY2gtPmFjdGl2ZV9saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJm1pZGNoLT5xdWV1ZSk7CisJCUlOSVRfTElTVF9IRUFEKCZtaWRjaC0+ZnJlZV9saXN0KTsKKwkJLyptYXNrIGludGVycnVwdHMqLworCQlpb3dyaXRlMzIoTUFTS19JTlRSX1JFRyhtaWRjaC0+Y2hfaWQpLAorCQkJZG1hLT5kbWFfYmFzZSArIE1BU0tfQkxPQ0spOworCQlpb3dyaXRlMzIoTUFTS19JTlRSX1JFRyhtaWRjaC0+Y2hfaWQpLAorCQkJZG1hLT5kbWFfYmFzZSArIE1BU0tfU1JDX1RSQU4pOworCQlpb3dyaXRlMzIoTUFTS19JTlRSX1JFRyhtaWRjaC0+Y2hfaWQpLAorCQkJZG1hLT5kbWFfYmFzZSArIE1BU0tfRFNUX1RSQU4pOworCQlpb3dyaXRlMzIoTUFTS19JTlRSX1JFRyhtaWRjaC0+Y2hfaWQpLAorCQkJZG1hLT5kbWFfYmFzZSArIE1BU0tfRVJSKTsKKwkJaW93cml0ZTMyKE1BU0tfSU5UUl9SRUcobWlkY2gtPmNoX2lkKSwKKwkJCWRtYS0+ZG1hX2Jhc2UgKyBNQVNLX1RGUik7CisKKwkJZGlzYWJsZV9kbWFfaW50ZXJydXB0KG1pZGNoKTsKKwkJbGlzdF9hZGRfdGFpbCgmbWlkY2gtPmNoYW4uZGV2aWNlX25vZGUsICZkbWEtPmNvbW1vbi5jaGFubmVscyk7CisJfQorCXByX2RlYnVnKCJNRE1BOiBDYWxjIE1hc2sgYXMgJXggZm9yIHRoaXMgY29udHJvbGxlclxuIiwgZG1hLT5pbnRyX21hc2spOworCisJLyppbml0IGRtYSBzdHJ1Y3R1cmUqLworCWRtYV9jYXBfemVybyhkbWEtPmNvbW1vbi5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgZG1hLT5jb21tb24uY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgZG1hLT5jb21tb24uY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBkbWEtPmNvbW1vbi5jYXBfbWFzayk7CisJZG1hLT5jb21tb24uZGV2ID0gJnBkZXYtPmRldjsKKwlkbWEtPmNvbW1vbi5jaGFuY250ID0gZG1hLT5tYXhfY2hhbjsKKworCWRtYS0+Y29tbW9uLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9CisJCQkJCWludGVsX21pZF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZG1hLT5jb21tb24uZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPQorCQkJCQlpbnRlbF9taWRfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisKKwlkbWEtPmNvbW1vbi5kZXZpY2VfdHhfc3RhdHVzID0gaW50ZWxfbWlkX2RtYV90eF9zdGF0dXM7CisJZG1hLT5jb21tb24uZGV2aWNlX3ByZXBfZG1hX21lbWNweSA9IGludGVsX21pZF9kbWFfcHJlcF9tZW1jcHk7CisJZG1hLT5jb21tb24uZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBpbnRlbF9taWRfZG1hX2lzc3VlX3BlbmRpbmc7CisJZG1hLT5jb21tb24uZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBpbnRlbF9taWRfZG1hX3ByZXBfc2xhdmVfc2c7CisJZG1hLT5jb21tb24uZGV2aWNlX2NvbnRyb2wgPSBpbnRlbF9taWRfZG1hX2RldmljZV9jb250cm9sOworCisJLyplbmFibGUgZG1hIGNudHJsKi8KKwlpb3dyaXRlMzIoUkVHX0JJVDAsIGRtYS0+ZG1hX2Jhc2UgKyBETUFfQ0ZHKTsKKworCS8qcmVnaXN0ZXIgaXJxICovCisJaWYgKGRtYS0+cGltcl9tYXNrKSB7CisJCWlycV9sZXZlbCA9IElSUUZfU0hBUkVEOworCQlwcl9kZWJ1ZygiTURNQTpSZXF1ZXN0aW5nIGlycSBzaGFyZWQgZm9yIERNQUMxXG4iKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBpbnRlbF9taWRfZG1hX2ludGVycnVwdDEsCisJCQlJUlFGX1NIQVJFRCwgIklOVEVMX01JRF9ETUFDMSIsIGRtYSk7CisJCWlmICgwICE9IGVycikKKwkJCWdvdG8gZXJyX2lycTsKKwl9IGVsc2UgeworCQlkbWEtPmludHJfbWFzayA9IDB4MDM7CisJCWlycV9sZXZlbCA9IDA7CisJCXByX2RlYnVnKCJNRE1BOlJlcXVlc3RpbmcgaXJxIGZvciBETUFDMlxuIik7CisJCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaW50ZWxfbWlkX2RtYV9pbnRlcnJ1cHQyLAorCQkJMCwgIklOVEVMX01JRF9ETUFDMiIsIGRtYSk7CisJCWlmICgwICE9IGVycikKKwkJCWdvdG8gZXJyX2lycTsKKwl9CisJLypyZWdpc3RlciBkZXZpY2Ugdy8gZW5naW5lKi8KKwllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZkbWEtPmNvbW1vbik7CisJaWYgKDAgIT0gZXJyKSB7CisJCXByX2VycigiRVJSX01ETUE6ZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyX2VuZ2luZTsKKwl9CisJaWYgKGRtYS0+cGltcl9tYXNrKSB7CisJCXByX2RlYnVnKCJzZXR0aW5nIHVwIHRhc2tsZXQxIGZvciBETUFDMVxuIik7CisJCXRhc2tsZXRfaW5pdCgmZG1hLT50YXNrbGV0LCBkbWFfdGFza2xldDEsICh1bnNpZ25lZCBsb25nKWRtYSk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoInNldHRpbmcgdXAgdGFza2xldDIgZm9yIERNQUMyXG4iKTsKKwkJdGFza2xldF9pbml0KCZkbWEtPnRhc2tsZXQsIGRtYV90YXNrbGV0MiwgKHVuc2lnbmVkIGxvbmcpZG1hKTsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9lbmdpbmU6CisJZnJlZV9pcnEocGRldi0+aXJxLCBkbWEpOworZXJyX2lycToKKwlwY2lfcG9vbF9kZXN0cm95KGRtYS0+ZG1hX3Bvb2wpOworCWtmcmVlKGRtYSk7CitlcnJfZG1hX3Bvb2w6CisJcHJfZXJyKCJFUlJfTURNQTpzZXR1cF9kbWEgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworCit9CisKKy8qKgorICogbWlkZG1hX3NodXRkb3duIC0JU2h1dGRvd24gdGhlIERNQSBjb250cm9sbGVyCisgKiBAcGRldjogQ29udHJvbGxlciBQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIENhbGxlZCBieSByZW1vdmUKKyAqIFVucmVnaXN0ZXIgRE1hIGNvbnRyb2xsZXIsIGNsZWFyIGFsbCBzdHJ1Y3R1cmVzIGFuZCBmcmVlIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBtaWRkbWFfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKmRldmljZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmZGV2aWNlLT5jb21tb24pOworCXBjaV9wb29sX2Rlc3Ryb3koZGV2aWNlLT5kbWFfcG9vbCk7CisJaWYgKGRldmljZS0+bWFza19yZWcpCisJCWlvdW5tYXAoZGV2aWNlLT5tYXNrX3JlZyk7CisJaWYgKGRldmljZS0+ZG1hX2Jhc2UpCisJCWlvdW5tYXAoZGV2aWNlLT5kbWFfYmFzZSk7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXZpY2UpOworCXJldHVybjsKK30KKworLyoqCisgKiBpbnRlbF9taWRfZG1hX3Byb2JlIC0JUENJIFByb2JlCisgKiBAcGRldjogQ29udHJvbGxlciBQQ0kgZGV2aWNlIHN0cnVjdHVyZQorICogQGlkOiBwY2kgZGV2aWNlIGlkIHN0cnVjdHVyZQorICoKKyAqIEluaXRpbGl6ZSB0aGUgUENJIGRldmljZSwgbWFwIEJBUnMsIHF1ZXJ5IGRyaXZlciBkYXRhLgorICogQ2FsbCBzZXR1cF9kbWEgdG8gY29tcGxldGUgY29udG9sbGVyIGFuZCBjaGFuIGluaXRpbHphdGlvbgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpbnRlbF9taWRfZG1hX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKmRldmljZTsKKwl1MzIgYmFzZV9hZGRyLCBiYXJfc2l6ZTsKKwlzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9wcm9iZV9pbmZvICppbmZvOworCWludCBlcnI7CisKKwlwcl9kZWJ1ZygiTURNQTogcHJvYmUgZm9yICV4XG4iLCBwZGV2LT5kZXZpY2UpOworCWluZm8gPSAodm9pZCAqKWlkLT5kcml2ZXJfZGF0YTsKKwlwcl9kZWJ1ZygiTURNQTogQ0ggJWQsIGJhc2UgJWQsIGJsb2NrIGxlbiAlZCwgUGVyaXBocmFsIG1hc2sgJXhcbiIsCisJCQkJaW5mby0+bWF4X2NoYW4sIGluZm8tPmNoX2Jhc2UsCisJCQkJaW5mby0+YmxvY2tfc2l6ZSwgaW5mby0+cGltcl9tYXNrKTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2VuYWJsZV9kZXZpY2U7CisKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJpbnRlbF9taWRfZG1hYyIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlcXVlc3RfcmVnaW9uczsKKworCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0X2RtYV9tYXNrOworCisJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3NldF9kbWFfbWFzazsKKworCWRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCpkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldmljZSkgeworCQlwcl9lcnIoIkVSUl9NRE1BOmt6YWxsb2MgZmFpbGVkIHByb2JlXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfa3phbGxvYzsKKwl9CisJZGV2aWNlLT5wZGV2ID0gcGNpX2Rldl9nZXQocGRldik7CisKKwliYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJYmFyX3NpemUgID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlkZXZpY2UtPmRtYV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGJhc2VfYWRkciwgRE1BX1JFR19TSVpFKTsKKwlpZiAoIWRldmljZS0+ZG1hX2Jhc2UpIHsKKwkJcHJfZXJyKCJFUlJfTURNQTppb3JlbWFwIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXZpY2UpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCWRldmljZS0+bWF4X2NoYW4gPSBpbmZvLT5tYXhfY2hhbjsKKwlkZXZpY2UtPmNoYW5fYmFzZSA9IGluZm8tPmNoX2Jhc2U7CisJZGV2aWNlLT5ibG9ja19zaXplID0gaW5mby0+YmxvY2tfc2l6ZTsKKwlkZXZpY2UtPnBpbXJfbWFzayA9IGluZm8tPnBpbXJfbWFzazsKKworCWVyciA9IG1pZF9zZXR1cF9kbWEocGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZG1hOworCisJcmV0dXJuIDA7CisKK2Vycl9kbWE6CisJaW91bm1hcChkZXZpY2UtPmRtYV9iYXNlKTsKK2Vycl9pb3JlbWFwOgorCXBjaV9kZXZfcHV0KHBkZXYpOworCWtmcmVlKGRldmljZSk7CitlcnJfa3phbGxvYzoKK2Vycl9zZXRfZG1hX21hc2s6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnJfcmVxdWVzdF9yZWdpb25zOgorZXJyX2VuYWJsZV9kZXZpY2U6CisJcHJfZXJyKCJFUlJfTURNQTpQcm9iZSBmYWlsZWQgJWRcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpbnRlbF9taWRfZG1hX3JlbW92ZSAtCVBDSSByZW1vdmUKKyAqIEBwZGV2OiBDb250cm9sbGVyIFBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogRnJlZSB1cCBhbGwgcmVzb3VyY2VzIGFuZCBkYXRhCisgKiBDYWxsIHNodXRkb3duX2RtYSB0byBjb21wbGV0ZSBjb250b2xsZXIgYW5kIGNoYW4gY2xlYW51cAorICovCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgaW50ZWxfbWlkX2RtYV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1pZGRtYV9kZXZpY2UgKmRldmljZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwltaWRkbWFfc2h1dGRvd24ocGRldik7CisJcGNpX2Rldl9wdXQocGRldik7CisJa2ZyZWUoZGV2aWNlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQQ0kgc3R1ZmYKKyovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW50ZWxfbWlkX2RtYV9pZHNbXSA9IHsKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBJTlRFTF9NSURfRE1BQzFfSUQpLAlJTkZPKDIsIDYsIDQwOTUsIDB4MjAwMDIwKX0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgSU5URUxfTUlEX0RNQUMyX0lEKSwJSU5GTygyLCAwLCAyMDQ3LCAwKX0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgSU5URUxfTUlEX0dQX0RNQUMyX0lEKSwJSU5GTygyLCAwLCAyMDQ3LCAwKX0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgSU5URUxfTUZMRF9ETUFDMV9JRCksCUlORk8oNCwgMCwgNDA5NSwgMHg0MDAwNDApfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaW50ZWxfbWlkX2RtYV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaW50ZWxfbWlkX2RtYV9wY2kgPSB7CisJLm5hbWUJCT0JIkludGVsIE1JRCBETUEiLAorCS5pZF90YWJsZQk9CWludGVsX21pZF9kbWFfaWRzLAorCS5wcm9iZQkJPQlpbnRlbF9taWRfZG1hX3Byb2JlLAorCS5yZW1vdmUJCT0JX19kZXZleGl0X3AoaW50ZWxfbWlkX2RtYV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW50ZWxfbWlkX2RtYV9pbml0KHZvaWQpCit7CisJcHJfZGVidWcoIklORk9fTURNQTogTE5XIERNQSBEcml2ZXIgVmVyc2lvbiAlc1xuIiwKKwkJCUlOVEVMX01JRF9ETUFfRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpbnRlbF9taWRfZG1hX3BjaSk7Cit9Citmc19pbml0Y2FsbChpbnRlbF9taWRfZG1hX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgaW50ZWxfbWlkX2RtYV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpbnRlbF9taWRfZG1hX3BjaSk7Cit9Cittb2R1bGVfZXhpdChpbnRlbF9taWRfZG1hX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJWaW5vZCBLb3VsIDx2aW5vZC5rb3VsQGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW50ZWwgKFIpIE1JRCBETUFDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oSU5URUxfTUlEX0RNQV9EUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaCBiL2RyaXZlcnMvZG1hL2ludGVsX21pZF9kbWFfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MWFhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9pbnRlbF9taWRfZG1hX3JlZ3MuaApAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICBpbnRlbF9taWRfZG1hX3JlZ3MuaCAtIEludGVsIE1JRCBETUEgRHJpdmVycworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMTAgSW50ZWwgQ29ycAorICogIEF1dGhvcjogVmlub2QgS291bCA8dmlub2Qua291bEBpbnRlbC5jb20+CisgKiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICoKKyAqLworI2lmbmRlZiBfX0lOVEVMX01JRF9ETUFDX1JFR1NfSF9fCisjZGVmaW5lIF9fSU5URUxfTUlEX0RNQUNfUkVHU19IX18KKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisKKyNkZWZpbmUgSU5URUxfTUlEX0RNQV9EUklWRVJfVkVSU0lPTiAiMS4wLjUiCisKKyNkZWZpbmUJUkVHX0JJVDAJCTB4MDAwMDAwMDEKKyNkZWZpbmUJUkVHX0JJVDgJCTB4MDAwMDAxMDAKKworI2RlZmluZSBVTk1BU0tfSU5UUl9SRUcoY2hhbl9udW0pIFwKKwkoKFJFR19CSVQwIDw8IGNoYW5fbnVtKSB8IChSRUdfQklUOCA8PCBjaGFuX251bSkpCisjZGVmaW5lIE1BU0tfSU5UUl9SRUcoY2hhbl9udW0pIChSRUdfQklUOCA8PCBjaGFuX251bSkKKworI2RlZmluZSBFTkFCTEVfQ0hBTk5FTChjaGFuX251bSkgXAorCSgoUkVHX0JJVDAgPDwgY2hhbl9udW0pIHwgKFJFR19CSVQ4IDw8IGNoYW5fbnVtKSkKKworI2RlZmluZSBERVNDU19QRVJfQ0hBTk5FTAkxNgorLypETUEgUmVnaXN0ZXJzKi8KKy8qcmVnaXN0ZXJzIGFzc29jaWF0ZWQgd2l0aCBjaGFubmVsIHByb2dyYW1taW5nKi8KKyNkZWZpbmUgRE1BX1JFR19TSVpFCQkweDQwMAorI2RlZmluZSBETUFfQ0hfU0laRQkJMHg1OAorCisvKkNIIFggUkVHID0gKERNQV9DSF9TSVpFKSpDSF9OTyArIFJFRyovCisjZGVmaW5lIFNBUgkJCTB4MDAgLyogU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIqLworI2RlZmluZSBEQVIJCQkweDA4IC8qIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIqLworI2RlZmluZSBDVExfTE9XCQkJMHgxOCAvKiBDb250cm9sIFJlZ2lzdGVyKi8KKyNkZWZpbmUgQ1RMX0hJR0gJCTB4MUMgLyogQ29udHJvbCBSZWdpc3RlciovCisjZGVmaW5lIENGR19MT1cJCQkweDQwIC8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgTG93Ki8KKyNkZWZpbmUgQ0ZHX0hJR0gJCTB4NDQgLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciBoaWdoKi8KKworI2RlZmluZSBTVEFUVVNfVEZSCQkweDJFOAorI2RlZmluZSBTVEFUVVNfQkxPQ0sJCTB4MkYwCisjZGVmaW5lIFNUQVRVU19FUlIJCTB4MzA4CisKKyNkZWZpbmUgUkFXX1RGUgkJCTB4MkMwCisjZGVmaW5lIFJBV19CTE9DSwkJMHgyQzgKKyNkZWZpbmUgUkFXX0VSUgkJCTB4MkUwCisKKyNkZWZpbmUgTUFTS19URlIJCTB4MzEwCisjZGVmaW5lIE1BU0tfQkxPQ0sJCTB4MzE4CisjZGVmaW5lIE1BU0tfU1JDX1RSQU4JCTB4MzIwCisjZGVmaW5lIE1BU0tfRFNUX1RSQU4JCTB4MzI4CisjZGVmaW5lIE1BU0tfRVJSCQkweDMzMAorCisjZGVmaW5lIENMRUFSX1RGUgkJMHgzMzgKKyNkZWZpbmUgQ0xFQVJfQkxPQ0sJCTB4MzQwCisjZGVmaW5lIENMRUFSX1NSQ19UUkFOCQkweDM0OAorI2RlZmluZSBDTEVBUl9EU1RfVFJBTgkJMHgzNTAKKyNkZWZpbmUgQ0xFQVJfRVJSCQkweDM1OAorCisjZGVmaW5lIElOVFJfU1RBVFVTCQkweDM2MAorI2RlZmluZSBETUFfQ0ZHCQkJMHgzOTgKKyNkZWZpbmUgRE1BX0NIQU5fRU4JCTB4M0EwCisKKy8qRE1BIGNoYW5uZWwgY29udHJvbCByZWdpc3RlcnMqLwordW5pb24gaW50ZWxfbWlkX2RtYV9jdGxfbG8geworCXN0cnVjdCB7CisJCXUzMglpbnRfZW46MTsJLyplbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHRzKi8KKwkJCQkJLypzaG91bGQgYmUgMCovCisJCXUzMglkc3RfdHJfd2lkdGg6MzsJLypkZXN0aW5hdGlvbiB0cmFuc2ZlciB3aWR0aCovCisJCQkJCS8qdXN1YWxseSAzMiBiaXRzID0gMDEwKi8KKwkJdTMyCXNyY190cl93aWR0aDozOyAvKnNvdXJjZSB0cmFuc2ZlciB3aWR0aCovCisJCQkJCS8qdXN1YWxseSAzMiBiaXRzID0gMDEwKi8KKwkJdTMyCWRpbmM6MjsJCS8qZGVzdGluYXRpb24gYWRkcmVzcyBpbmMvZGVjKi8KKwkJCQkJLypGb3IgbWVtOklOQz0wMCwgUGVyaXBocmFsIE5vSU5DPTExKi8KKwkJdTMyCXNpbmM6MjsJCS8qc291cmNlIGFkZHJlc3MgaW5jIG9yIGRlYywgYXMgYWJvdmUqLworCQl1MzIJZHN0X21zaXplOjM7CS8qZGVzdGluYXRpb24gYnVyc3QgdHJhbnNhY3Rpb24gbGVuZ3RoKi8KKwkJCQkJLyphbHdheXMgPSAxNiBpZSAwMTEqLworCQl1MzIJc3JjX21zaXplOjM7CS8qc291cmNlIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCovCisJCQkJCS8qYWx3YXlzID0gMTYgaWUgMDExKi8KKwkJdTMyCXJlc2VyMTozOworCQl1MzIJdHRfZmM6MzsJLyp0cmFuc2ZlciB0eXBlIGFuZCBmbG93IGNvbnRyb2xsZXIqLworCQkJCQkvKk0tTSA9IDAwMAorCQkJCQkgIFAtTSA9IDAxMAorCQkJCQkgIE0tUCA9IDAwMSovCisJCXUzMglkbXM6MjsJCS8qZGVzdGluYXRpb24gbWFzdGVyIHNlbGVjdCA9IDAqLworCQl1MzIJc21zOjI7CQkvKnNvdXJjZSBtYXN0ZXIgc2VsZWN0ID0gMCovCisJCXUzMglsbHBfZHN0X2VuOjE7CS8qZW5hYmxlL2Rpc2FibGUgZGVzdGluYXRpb24gTExQID0gMCovCisJCXUzMglsbHBfc3JjX2VuOjE7CS8qZW5hYmxlL2Rpc2FibGUgc291cmNlIExMUCA9IDAqLworCQl1MzIJcmVzZXIyOjM7CisJfSBjdGx4OworCXUzMgljdGxfbG87Cit9OworCit1bmlvbiBpbnRlbF9taWRfZG1hX2N0bF9oaSB7CisJc3RydWN0IHsKKwkJdTMyCWJsb2NrX3RzOjEyOwkvKmJsb2NrIHRyYW5zZmVyIHNpemUqLworCQkJCQkvKmNvbmZpZ3VyZWQgYnkgRE1BQyovCisJCXUzMglyZXNlcjoyMDsKKwl9IGN0bHg7CisJdTMyCWN0bF9oaTsKKworfTsKKworLypETUEgY2hhbm5lbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyovCit1bmlvbiBpbnRlbF9taWRfZG1hX2NmZ19sbyB7CisJc3RydWN0IHsKKwkJdTMyCXJlc2VyMTo1OworCQl1MzIJY2hfcHJpb3I6MzsJLypjaGFubmVsIHByaW9yaXR5ID0gMCovCisJCXUzMgljaF9zdXNwOjE7CS8qY2hhbm5lbCBzdXNwZW5kID0gMCovCisJCXUzMglmaWZvX2VtcHR5OjE7CS8qRklGTyBlbXB0eSBvciBub3QgUiBiaXQgPSAwKi8KKwkJdTMyCWhzX3NlbF9kc3Q6MTsJLypzZWxlY3QgSFcvU1cgZGVzdG4gaGFuZHNoYWtpbmcqLworCQkJCQkvKkhXID0gMCwgU1cgPSAxKi8KKwkJdTMyCWhzX3NlbF9zcmM6MTsJLypzZWxlY3QgSFcvU1cgc3JjIGhhbmRzaGFraW5nKi8KKwkJdTMyCXJlc2VyMjo2OworCQl1MzIJZHN0X2hzX3BvbDoxOwkvKmRlc3QgSFMgaW50ZXJmYWNlIHBvbGFyaXR5Ki8KKwkJdTMyCXNyY19oc19wb2w6MTsJLypzcmMgSFMgaW50ZXJmYWNlIHBvbGFyaXR5Ki8KKwkJdTMyCW1heF9hYnJzdDoxMDsJLyptYXggQU1CQSBidXJzdCBsZW4gPSAwIChubyBzdyBsaW1pdCovCisJCXUzMglyZWxvYWRfc3JjOjE7CS8qYXV0byByZWxvYWQgc3JjIGFkZHIgPTEgaWYgc3JjIGlzIFAqLworCQl1MzIJcmVsb2FkX2RzdDoxOwkvKkFSIGRlc3RuIGFkZHIgPTEgaWYgZHN0biBpcyBQKi8KKwl9IGNmZ3g7CisJdTMyCWNmZ19sbzsKK307CisKK3VuaW9uIGludGVsX21pZF9kbWFfY2ZnX2hpIHsKKwlzdHJ1Y3QgeworCQl1MzIJZmNtb2RlOjE7CS8qZmxvdyBjb250cm9sIG1vZGUgPSAxKi8KKwkJdTMyCWZpZm9fbW9kZToxOwkvKkZJRk8gbW9kZSBzZWxlY3QgPSAxKi8KKwkJdTMyCXByb3RjdGw6MzsJLypwcm90ZWN0aW9uIGNvbnRyb2wgPSAwKi8KKwkJdTMyCXJzdmQ6MjsKKwkJdTMyCXNyY19wZXI6NDsJLypzcmMgaHcgSFMgaW50ZXJmYWNlKi8KKwkJdTMyCWRzdF9wZXI6NDsJLypkc3RuIGh3IEhTIGludGVyZmFjZSovCisJCXUzMglyZXNlcjI6MTc7CisJfSBjZmd4OworCXUzMgljZmdfaGk7Cit9OworCisvKioKKyAqIHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gLSBpbnRlcm5hbCBtaWQgcmVwcmVzZW50YXRpb24gb2YgYSBETUEgY2hhbm5lbAorICogQGNoYW46IGRtYV9jaGFuIHN0cmN0dXJlIHJlcHJlc2V0YXRpb24gZm9yIG1pZCBjaGFuCisgKiBAY2hfcmVnczogTU1JTyByZWdpc3RlciBzcGFjZSBwb2ludGVyIHRvIGNoYW5uZWwgcmVnaXN0ZXIKKyAqIEBkbWFfYmFzZTogTU1JTyByZWdpc3RlciBzcGFjZSBETUEgZW5naW5lIGJhc2UgcG9pbnRlcgorICogQGNoX2lkOiBETUEgY2hhbm5lbCBpZAorICogQGxvY2s6IGNoYW5uZWwgc3BpbmxvY2sKKyAqIEBjb21wbGV0ZWQ6IERNQSBjb29raWUKKyAqIEBhY3RpdmVfbGlzdDogY3VycmVudCBhY3RpdmUgZGVzY3JpcHRvcnMKKyAqIEBxdWV1ZTogY3VycmVudCBxdWV1ZWQgdXAgZGVzY3JpcHRvcnMKKyAqIEBmcmVlX2xpc3Q6IGN1cnJlbnQgZnJlZSBkZXNjcmlwdG9ycworICogQHNsYXZlOiBkbWEgc2xhdmUgc3RydXR1cmUKKyAqIEBkZXNjc19hbGxvY2F0ZWQ6IHRvdGFsIG51bWJlciBvZiBkZWNzaXB0b3JzIGFsbG9jYXRlZAorICogQGRtYTogZG1hIGRldmljZSBzdHJ1dHVyZSBwb2ludGVyCisgKiBAaW5fdXNlOiBib29sIHJlcHJlc2VudGluZyBpZiBjaCBpcyBpbiB1c2Ugb3Igbm90CisgKi8KK3N0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4geworCXN0cnVjdCBkbWFfY2hhbgkJY2hhbjsKKwl2b2lkIF9faW9tZW0JCSpjaF9yZWdzOworCXZvaWQgX19pb21lbQkJKmRtYV9iYXNlOworCWludAkJCWNoX2lkOworCXNwaW5sb2NrX3QJCWxvY2s7CisJZG1hX2Nvb2tpZV90CQljb21wbGV0ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXF1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9saXN0OworCXN0cnVjdCBpbnRlbF9taWRfZG1hX3NsYXZlCSpzbGF2ZTsKKwl1bnNpZ25lZCBpbnQJCWRlc2NzX2FsbG9jYXRlZDsKKwlzdHJ1Y3QgbWlkZG1hX2RldmljZQkqZG1hOworCWJvb2wJCQlpbl91c2U7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4gKnRvX2ludGVsX21pZF9kbWFfY2hhbigKKwkJCQkJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBpbnRlbF9taWRfZG1hX2NoYW4sIGNoYW4pOworfQorCisvKioKKyAqIHN0cnVjdCBtaWRkbWFfZGV2aWNlIC0gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBETUEgZGV2aWNlCisgKiBAcGRldjogUENJIGRldmljZQorICogQGRtYV9iYXNlOiBNTUlPIHJlZ2lzdGVyIHNwYWNlIHBvaW50ZXIgb2YgRE1BCisgKiBAZG1hX3Bvb2w6IGZvciBhbGxvY2F0aW5nIERNQSBkZXNjcmlwdG9ycworICogQGNvbW1vbjogZW1iZWRkZWQgc3RydWN0IGRtYV9kZXZpY2UKKyAqIEB0YXNrbGV0OiBkbWEgdGFza2xldCBmb3IgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzCisgKiBAY2g6IHBlciBjaGFubmVsIGRhdGEKKyAqIEBwY2lfaWQ6IERNQSBkZXZpY2UgUENJIElECisgKiBAaW50cl9tYXNrOiBJbnRlcnJ1cHQgbWFzayB0byBiZSB1c2VkCisgKiBAbWFza19yZWc6IE1NSU8gcmVnaXN0ZXIgZm9yIHBlcmlwaHJhbCBtYXNrCisgKiBAY2hhbl9iYXNlOiBCYXNlIGNoIGluZGV4IChyZWFkIGZyb20gZHJpdmVyIGRhdGEpCisgKiBAbWF4X2NoYW46IG1heCBudW1iZXIgb2YgY2hzIHN1cHBvcnRlZCAoZnJvbSBkcnZfZGF0YSkKKyAqIEBibG9ja19zaXplOiBCbG9jayBzaXplIG9mIERNQSB0cmFuc2ZlciBzdXBwb3J0ZWQgKGZyb20gZHJ2X2RhdGEpCisgKiBAcGltcl9tYXNrOiBNTUlPIHJlZ2lzdGVyIGFkZHIgZm9yIHBlcmlwaHJhbCBpbnRlcnJ1cHQgKGZyb20gZHJ2X2RhdGEpCisgKi8KK3N0cnVjdCBtaWRkbWFfZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJdm9pZCBfX2lvbWVtCQkqZG1hX2Jhc2U7CisJc3RydWN0IHBjaV9wb29sCQkqZG1hX3Bvb2w7CisJc3RydWN0IGRtYV9kZXZpY2UJY29tbW9uOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAgIHRhc2tsZXQ7CisJc3RydWN0IGludGVsX21pZF9kbWFfY2hhbiBjaFtNQVhfQ0hBTl07CisJdW5zaWduZWQgaW50CQlwY2lfaWQ7CisJdW5zaWduZWQgaW50CQlpbnRyX21hc2s7CisJdm9pZCBfX2lvbWVtCQkqbWFza19yZWc7CisJaW50CQkJY2hhbl9iYXNlOworCWludAkJCW1heF9jaGFuOworCWludAkJCWJsb2NrX3NpemU7CisJdW5zaWduZWQgaW50CQlwaW1yX21hc2s7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtaWRkbWFfZGV2aWNlICp0b19taWRkbWFfZGV2aWNlKHN0cnVjdCBkbWFfZGV2aWNlICpjb21tb24pCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb21tb24sIHN0cnVjdCBtaWRkbWFfZGV2aWNlLCBjb21tb24pOworfQorCitzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjIHsKKwl2b2lkIF9faW9tZW0JCQkqYmxvY2s7IC8qY2ggcHRyKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkZXNjX25vZGU7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCXR4ZDsKKwlzaXplX3QJCQkJbGVuOworCWRtYV9hZGRyX3QJCQlzYXI7CisJZG1hX2FkZHJfdAkJCWRhcjsKKwl1MzIJCQkJY2ZnX2hpOworCXUzMgkJCQljZmdfbG87CisJdTMyCQkJCWN0bF9sbzsKKwl1MzIJCQkJY3RsX2hpOworCWRtYV9hZGRyX3QJCQluZXh0OworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uCQlkaXJuOworCWVudW0gZG1hX3N0YXR1cwkJCXN0YXR1czsKKwllbnVtIGludGVsX21pZF9kbWFfd2lkdGgJd2lkdGg7IC8qd2lkdGggb2YgRE1BIHR4biovCisJZW51bSBpbnRlbF9taWRfZG1hX21vZGUJCWNmZ19tb2RlOyAvKm1vZGUgY29uZmlndXJhdGlvbiovCisKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfY2hfZW4odm9pZCBfX2lvbWVtICpkbWEsIHUzMiBjaF9ubykKK3sKKwl1MzIgZW5fcmVnID0gaW9yZWFkMzIoZG1hICsgRE1BX0NIQU5fRU4pOworCXJldHVybiAoZW5fcmVnID4+IGNoX25vKSAmIDB4MTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjICp0b19pbnRlbF9taWRfZG1hX2Rlc2MKKwkJKHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkKQoreworCXJldHVybiBjb250YWluZXJfb2YodHhkLCBzdHJ1Y3QgaW50ZWxfbWlkX2RtYV9kZXNjLCB0eGQpOworfQorI2VuZGlmIC8qX19JTlRFTF9NSURfRE1BQ19SRUdTX0hfXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuaAppbmRleCA2ZDNhNzNiLi41MjE2YzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmgKQEAgLTk3LDYgKzk3LDcgQEAKIAkjZGVmaW5lIElPQVRfUkVTRVRfUEVORElORyAyCiAJI2RlZmluZSBJT0FUX0tPQkpfSU5JVF9GQUlMIDMKIAkjZGVmaW5lIElPQVRfUkVTSEFQRV9QRU5ESU5HIDQKKwkjZGVmaW5lIElPQVRfUlVOIDUKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAkjZGVmaW5lIENPTVBMRVRJT05fVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDEwMCkKIAkjZGVmaW5lIElETEVfVElNRU9VVCBtc2Vjc190b19qaWZmaWVzKDIwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwppbmRleCAzYzhiMzJhLi4yMTZmOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKQEAgLTI4Nyw3ICsyODcsMTAgQEAKIAkJCWNoYW5lcnIgPSByZWFkbChjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwogCQkJZGV2X2Vycih0b19kZXYoY2hhbiksICIlczogQ2hhbm5lbCBoYWx0ZWQgKCV4KVxuIiwKIAkJCQlfX2Z1bmNfXywgY2hhbmVycik7Ci0JCQlCVUdfT04oaXNfaW9hdF9idWcoY2hhbmVycikpOworCQkJaWYgKHRlc3RfYml0KElPQVRfUlVOLCAmY2hhbi0+c3RhdGUpKQorCQkJCUJVR19PTihpc19pb2F0X2J1ZyhjaGFuZXJyKSk7CisJCQllbHNlIC8qIHdlIG5ldmVyIGdvdCBvZmYgdGhlIGdyb3VuZCAqLworCQkJCXJldHVybjsKIAkJfQogCiAJCS8qIGlmIHdlIGhhdmVuJ3QgbWFkZSBwcm9ncmVzcyBhbmQgd2UgaGF2ZSBhbHJlYWR5CkBAIC00OTIsNiArNDk1LDggQEAKIAlyZXR1cm4gcmluZzsKIH0KIAordm9pZCBpb2F0Ml9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqYyk7CisKIC8qIGlvYXQyX2FsbG9jX2NoYW5fcmVzb3VyY2VzIC0gYWxsb2NhdGUvaW5pdGlhbGl6ZSBpb2F0MiBkZXNjcmlwdG9yIHJpbmcKICAqIEBjaGFuOiBjaGFubmVsIHRvIGJlIGluaXRpYWxpemVkCiAgKi8KQEAgLTUwMCw2ICs1MDUsNyBAQAogCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oYyk7CiAJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKIAlzdHJ1Y3QgaW9hdF9yaW5nX2VudCAqKnJpbmc7CisJdTY0IHN0YXR1czsKIAlpbnQgb3JkZXI7CiAKIAkvKiBoYXZlIHdlIGFscmVhZHkgYmVlbiBzZXQgdXA/ICovCkBAIC01NDAsNyArNTQ2LDIwIEBACiAJdGFza2xldF9lbmFibGUoJmNoYW4tPmNsZWFudXBfdGFzayk7CiAJaW9hdDJfc3RhcnRfbnVsbF9kZXNjKGlvYXQpOwogCi0JcmV0dXJuIDEgPDwgaW9hdC0+YWxsb2Nfb3JkZXI7CisJLyogY2hlY2sgdGhhdCB3ZSBnb3Qgb2ZmIHRoZSBncm91bmQgKi8KKwl1ZGVsYXkoNSk7CisJc3RhdHVzID0gaW9hdF9jaGFuc3RzKGNoYW4pOworCWlmIChpc19pb2F0X2FjdGl2ZShzdGF0dXMpIHx8IGlzX2lvYXRfaWRsZShzdGF0dXMpKSB7CisJCXNldF9iaXQoSU9BVF9SVU4sICZjaGFuLT5zdGF0ZSk7CisJCXJldHVybiAxIDw8IGlvYXQtPmFsbG9jX29yZGVyOworCX0gZWxzZSB7CisJCXUzMiBjaGFuZXJyID0gcmVhZGwoY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKKworCQlkZXZfV0FSTih0b19kZXYoY2hhbiksCisJCQkiZmFpbGVkIHRvIHN0YXJ0IGNoYW5uZWwgY2hhbmVycjogJSN4XG4iLCBjaGFuZXJyKTsKKwkJaW9hdDJfZnJlZV9jaGFuX3Jlc291cmNlcyhjKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQogfQogCiBib29sIHJlc2hhcGVfcmluZyhzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQsIGludCBvcmRlcikKQEAgLTc3OCw2ICs3OTcsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZjaGFuLT50aW1lcik7CiAJZGV2aWNlLT5jbGVhbnVwX2ZuKCh1bnNpZ25lZCBsb25nKSBjKTsKIAlkZXZpY2UtPnJlc2V0X2h3KGNoYW4pOworCWNsZWFyX2JpdChJT0FUX1JVTiwgJmNoYW4tPnN0YXRlKTsKIAogCXNwaW5fbG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKIAlzcGluX2xvY2tfYmgoJmlvYXQtPnByZXBfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYwppbmRleCAxY2RkMjJlLi5kMGY0OTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKQEAgLTM2MSw3ICszNjEsMTAgQEAKIAkJCWNoYW5lcnIgPSByZWFkbChjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpOwogCQkJZGV2X2Vycih0b19kZXYoY2hhbiksICIlczogQ2hhbm5lbCBoYWx0ZWQgKCV4KVxuIiwKIAkJCQlfX2Z1bmNfXywgY2hhbmVycik7Ci0JCQlCVUdfT04oaXNfaW9hdF9idWcoY2hhbmVycikpOworCQkJaWYgKHRlc3RfYml0KElPQVRfUlVOLCAmY2hhbi0+c3RhdGUpKQorCQkJCUJVR19PTihpc19pb2F0X2J1ZyhjaGFuZXJyKSk7CisJCQllbHNlIC8qIHdlIG5ldmVyIGdvdCBvZmYgdGhlIGdyb3VuZCAqLworCQkJCXJldHVybjsKIAkJfQogCiAJCS8qIGlmIHdlIGhhdmVuJ3QgbWFkZSBwcm9ncmVzcyBhbmQgd2UgaGF2ZSBhbHJlYWR5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9wY2hfZG1hLmMgYi9kcml2ZXJzL2RtYS9wY2hfZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzMzk0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL3BjaF9kbWEuYwpAQCAtMCwwICsxLDk1NyBAQAorLyoKKyAqIFRvcGNsaWZmIFBDSCBETUEgY29udHJvbGxlciBkcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2hfZG1hLmg+CisKKyNkZWZpbmUgRFJWX05BTUUgInBjaC1kbWEiCisKKyNkZWZpbmUgRE1BX0NUTDBfRElTQUJMRQkJMHgwCisjZGVmaW5lIERNQV9DVEwwX1NHCQkJMHgxCisjZGVmaW5lIERNQV9DVEwwX09ORVNIT1QJCTB4MgorI2RlZmluZSBETUFfQ1RMMF9NT0RFX01BU0tfQklUUwkJMHgzCisjZGVmaW5lIERNQV9DVEwwX0RJUl9TSElGVF9CSVRTCQkyCisjZGVmaW5lIERNQV9DVEwwX0JJVFNfUEVSX0NICQk0CisKKyNkZWZpbmUgRE1BX0NUTDJfU1RBUlRfU0hJRlRfQklUUwk4CisjZGVmaW5lIERNQV9DVEwyX0lSUV9FTkFCTEVfTUFTSwkoKDFVTCA8PCBETUFfQ1RMMl9TVEFSVF9TSElGVF9CSVRTKSAtIDEpCisKKyNkZWZpbmUgRE1BX1NUQVRVU19JRExFCQkJMHgwCisjZGVmaW5lIERNQV9TVEFUVVNfREVTQ19SRUFECQkweDEKKyNkZWZpbmUgRE1BX1NUQVRVU19XQUlUCQkJMHgyCisjZGVmaW5lIERNQV9TVEFUVVNfQUNDRVNTCQkweDMKKyNkZWZpbmUgRE1BX1NUQVRVU19CSVRTX1BFUl9DSAkJMgorI2RlZmluZSBETUFfU1RBVFVTX01BU0tfQklUUwkJMHgzCisjZGVmaW5lIERNQV9TVEFUVVNfU0hJRlRfQklUUwkJMTYKKyNkZWZpbmUgRE1BX1NUQVRVU19JUlEoeCkJCSgweDEgPDwgKHgpKQorI2RlZmluZSBETUFfU1RBVFVTX0VSUih4KQkJKDB4MSA8PCAoKHgpICsgOCkpCisKKyNkZWZpbmUgRE1BX0RFU0NfV0lEVEhfU0hJRlRfQklUUwkxMgorI2RlZmluZSBETUFfREVTQ19XSURUSF8xX0JZVEUJCSgweDMgPDwgRE1BX0RFU0NfV0lEVEhfU0hJRlRfQklUUykKKyNkZWZpbmUgRE1BX0RFU0NfV0lEVEhfMl9CWVRFUwkJKDB4MiA8PCBETUFfREVTQ19XSURUSF9TSElGVF9CSVRTKQorI2RlZmluZSBETUFfREVTQ19XSURUSF80X0JZVEVTCQkoMHgwIDw8IERNQV9ERVNDX1dJRFRIX1NISUZUX0JJVFMpCisjZGVmaW5lIERNQV9ERVNDX01BWF9DT1VOVF8xX0JZVEUJMHgzRkYKKyNkZWZpbmUgRE1BX0RFU0NfTUFYX0NPVU5UXzJfQllURVMJMHgzRkYKKyNkZWZpbmUgRE1BX0RFU0NfTUFYX0NPVU5UXzRfQllURVMJMHg3RkYKKyNkZWZpbmUgRE1BX0RFU0NfRU5EX1dJVEhPVVRfSVJRCTB4MAorI2RlZmluZSBETUFfREVTQ19FTkRfV0lUSF9JUlEJCTB4MQorI2RlZmluZSBETUFfREVTQ19GT0xMT1dfV0lUSE9VVF9JUlEJMHgyCisjZGVmaW5lIERNQV9ERVNDX0ZPTExPV19XSVRIX0lSUQkweDMKKworI2RlZmluZSBNQVhfQ0hBTl9OUgkJCTgKKworc3RhdGljIHVuc2lnbmVkIGludCBpbml0X25yX2Rlc2NfcGVyX2NoYW5uZWwgPSA2NDsKK21vZHVsZV9wYXJhbShpbml0X25yX2Rlc2NfcGVyX2NoYW5uZWwsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbml0X25yX2Rlc2NfcGVyX2NoYW5uZWwsCisJCSAiaW5pdGlhbCBkZXNjcmlwdG9ycyBwZXIgY2hhbm5lbCAoZGVmYXVsdDogNjQpIik7CisKK3N0cnVjdCBwY2hfZG1hX2Rlc2NfcmVncyB7CisJdTMyCWRldl9hZGRyOworCXUzMgltZW1fYWRkcjsKKwl1MzIJc2l6ZTsKKwl1MzIJbmV4dDsKK307CisKK3N0cnVjdCBwY2hfZG1hX3JlZ3MgeworCXUzMglkbWFfY3RsMDsKKwl1MzIJZG1hX2N0bDE7CisJdTMyCWRtYV9jdGwyOworCXUzMglyZXNlcnZlZDE7CisJdTMyCWRtYV9zdHMwOworCXUzMglkbWFfc3RzMTsKKwl1MzIJcmVzZXJ2ZWQyOworCXUzMglyZXNlcnZlZDM7CisJc3RydWN0IHBjaF9kbWFfZGVzY19yZWdzIGRlc2NbMF07Cit9OworCitzdHJ1Y3QgcGNoX2RtYV9kZXNjIHsKKwlzdHJ1Y3QgcGNoX2RtYV9kZXNjX3JlZ3MgcmVnczsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgdHhkOworCXN0cnVjdCBsaXN0X2hlYWQJZGVzY19ub2RlOworCXN0cnVjdCBsaXN0X2hlYWQJdHhfbGlzdDsKK307CisKK3N0cnVjdCBwY2hfZG1hX2NoYW4geworCXN0cnVjdCBkbWFfY2hhbgkJY2hhbjsKKwl2b2lkIF9faW9tZW0gKm1lbWJhc2U7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JZGlyOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YXNrbGV0OworCXVuc2lnbmVkIGxvbmcJCWVycl9zdGF0dXM7CisKKwlzcGlubG9ja190CQlsb2NrOworCisJZG1hX2Nvb2tpZV90CQljb21wbGV0ZWRfY29va2llOworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfbGlzdDsKKwl1bnNpZ25lZCBpbnQJCWRlc2NzX2FsbG9jYXRlZDsKK307CisKKyNkZWZpbmUgUERDX0RFVl9BRERSCTB4MDAKKyNkZWZpbmUgUERDX01FTV9BRERSCTB4MDQKKyNkZWZpbmUgUERDX1NJWkUJMHgwOAorI2RlZmluZSBQRENfTkVYVAkweDBDCisKKyNkZWZpbmUgY2hhbm5lbF9yZWFkbChwZGMsIG5hbWUpIFwKKwlyZWFkbCgocGRjKS0+bWVtYmFzZSArIFBEQ18jI25hbWUpCisjZGVmaW5lIGNoYW5uZWxfd3JpdGVsKHBkYywgbmFtZSwgdmFsKSBcCisJd3JpdGVsKCh2YWwpLCAocGRjKS0+bWVtYmFzZSArIFBEQ18jI25hbWUpCisKK3N0cnVjdCBwY2hfZG1hIHsKKwlzdHJ1Y3QgZG1hX2RldmljZQlkbWE7CisJdm9pZCBfX2lvbWVtICptZW1iYXNlOworCXN0cnVjdCBwY2lfcG9vbAkJKnBvb2w7CisJc3RydWN0IHBjaF9kbWFfcmVncwlyZWdzOworCXN0cnVjdCBwY2hfZG1hX2Rlc2NfcmVncyBjaF9yZWdzW01BWF9DSEFOX05SXTsKKwlzdHJ1Y3QgcGNoX2RtYV9jaGFuCWNoYW5uZWxzWzBdOworfTsKKworI2RlZmluZSBQQ0hfRE1BX0NUTDAJMHgwMAorI2RlZmluZSBQQ0hfRE1BX0NUTDEJMHgwNAorI2RlZmluZSBQQ0hfRE1BX0NUTDIJMHgwOAorI2RlZmluZSBQQ0hfRE1BX1NUUzAJMHgxMAorI2RlZmluZSBQQ0hfRE1BX1NUUzEJMHgxNAorCisjZGVmaW5lIGRtYV9yZWFkbChwZCwgbmFtZSkgXAorCXJlYWRsKChwZCktPm1lbWJhc2UgKyBQQ0hfRE1BXyMjbmFtZSkKKyNkZWZpbmUgZG1hX3dyaXRlbChwZCwgbmFtZSwgdmFsKSBcCisJd3JpdGVsKCh2YWwpLCAocGQpLT5tZW1iYXNlICsgUENIX0RNQV8jI25hbWUpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjaF9kbWFfZGVzYyAqdG9fcGRfZGVzYyhzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHR4ZCwgc3RydWN0IHBjaF9kbWFfZGVzYywgdHhkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNoX2RtYV9jaGFuICp0b19wZF9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBwY2hfZG1hX2NoYW4sIGNoYW4pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2hfZG1hICp0b19wZChzdHJ1Y3QgZG1hX2RldmljZSAqZGRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRkZXYsIHN0cnVjdCBwY2hfZG1hLCBkbWEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKmNoYW4yZGV2KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gJmNoYW4tPmRldi0+ZGV2aWNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKmNoYW4ycGFyZW50KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlyZXR1cm4gY2hhbi0+ZGV2LT5kZXZpY2UucGFyZW50OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2hfZG1hX2Rlc2MgKnBkY19maXJzdF9hY3RpdmUoc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbikKK3sKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmcGRfY2hhbi0+YWN0aXZlX2xpc3QsCisJCQkJc3RydWN0IHBjaF9kbWFfZGVzYywgZGVzY19ub2RlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNoX2RtYV9kZXNjICpwZGNfZmlyc3RfcXVldWVkKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJcmV0dXJuIGxpc3RfZmlyc3RfZW50cnkoJnBkX2NoYW4tPnF1ZXVlLAorCQkJCXN0cnVjdCBwY2hfZG1hX2Rlc2MsIGRlc2Nfbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBkY19lbmFibGVfaXJxKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSB0b19wZChjaGFuLT5kZXZpY2UpOworCXUzMiB2YWw7CisKKwl2YWwgPSBkbWFfcmVhZGwocGQsIENUTDIpOworCisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IDB4MSA8PCBjaGFuLT5jaGFuX2lkOworCWVsc2UKKwkJdmFsICY9IH4oMHgxIDw8IGNoYW4tPmNoYW5faWQpOworCisJZG1hX3dyaXRlbChwZCwgQ1RMMiwgdmFsKTsKKworCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICJwZGNfZW5hYmxlX2lycTogY2hhbiAlZCAtPiAleFxuIiwKKwkJY2hhbi0+Y2hhbl9pZCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcGRjX3NldF9kaXIoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4gPSB0b19wZF9jaGFuKGNoYW4pOworCXN0cnVjdCBwY2hfZG1hICpwZCA9IHRvX3BkKGNoYW4tPmRldmljZSk7CisJdTMyIHZhbDsKKworCXZhbCA9IGRtYV9yZWFkbChwZCwgQ1RMMCk7CisKKwlpZiAocGRfY2hhbi0+ZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXZhbCB8PSAweDEgPDwgKERNQV9DVEwwX0JJVFNfUEVSX0NIICogY2hhbi0+Y2hhbl9pZCArCisJCQkgICAgICAgRE1BX0NUTDBfRElSX1NISUZUX0JJVFMpOworCWVsc2UKKwkJdmFsICY9IH4oMHgxIDw8IChETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoYW4tPmNoYW5faWQgKworCQkJCSBETUFfQ1RMMF9ESVJfU0hJRlRfQklUUykpOworCisJZG1hX3dyaXRlbChwZCwgQ1RMMCwgdmFsKTsKKworCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICJwZGNfc2V0X2RpcjogY2hhbiAlZCAtPiAleFxuIiwKKwkJY2hhbi0+Y2hhbl9pZCwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgcGRjX3NldF9tb2RlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdTMyIG1vZGUpCit7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQoY2hhbi0+ZGV2aWNlKTsKKwl1MzIgdmFsOworCisJdmFsID0gZG1hX3JlYWRsKHBkLCBDVEwwKTsKKworCXZhbCAmPSB+KERNQV9DVEwwX01PREVfTUFTS19CSVRTIDw8CisJCShETUFfQ1RMMF9CSVRTX1BFUl9DSCAqIGNoYW4tPmNoYW5faWQpKTsKKwl2YWwgfD0gbW9kZSA8PCAoRE1BX0NUTDBfQklUU19QRVJfQ0ggKiBjaGFuLT5jaGFuX2lkKTsKKworCWRtYV93cml0ZWwocGQsIENUTDAsIHZhbCk7CisKKwlkZXZfZGJnKGNoYW4yZGV2KGNoYW4pLCAicGRjX3NldF9tb2RlOiBjaGFuICVkIC0+ICV4XG4iLAorCQljaGFuLT5jaGFuX2lkLCB2YWwpOworfQorCitzdGF0aWMgdTMyIHBkY19nZXRfc3RhdHVzKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQocGRfY2hhbi0+Y2hhbi5kZXZpY2UpOworCXUzMiB2YWw7CisKKwl2YWwgPSBkbWFfcmVhZGwocGQsIFNUUzApOworCXJldHVybiBETUFfU1RBVFVTX01BU0tfQklUUyAmICh2YWwgPj4gKERNQV9TVEFUVVNfU0hJRlRfQklUUyArCisJCQlETUFfU1RBVFVTX0JJVFNfUEVSX0NIICogcGRfY2hhbi0+Y2hhbi5jaGFuX2lkKSk7Cit9CisKK3N0YXRpYyBib29sIHBkY19pc19pZGxlKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJaWYgKHBkY19nZXRfc3RhdHVzKHBkX2NoYW4pID09IERNQV9TVEFUVVNfSURMRSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHBkY19kb3N0YXJ0KHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4sIHN0cnVjdCBwY2hfZG1hX2Rlc2MqIGRlc2MpCit7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQocGRfY2hhbi0+Y2hhbi5kZXZpY2UpOworCXUzMiB2YWw7CisKKwlpZiAoIXBkY19pc19pZGxlKHBkX2NoYW4pKSB7CisJCWRldl9lcnIoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLAorCQkJIkJVRzogQXR0ZW1wdCB0byBzdGFydCBub24taWRsZSBjaGFubmVsXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNoYW5uZWxfd3JpdGVsKHBkX2NoYW4sIERFVl9BRERSLCBkZXNjLT5yZWdzLmRldl9hZGRyKTsKKwljaGFubmVsX3dyaXRlbChwZF9jaGFuLCBNRU1fQUREUiwgZGVzYy0+cmVncy5tZW1fYWRkcik7CisJY2hhbm5lbF93cml0ZWwocGRfY2hhbiwgU0laRSwgZGVzYy0+cmVncy5zaXplKTsKKwljaGFubmVsX3dyaXRlbChwZF9jaGFuLCBORVhULCBkZXNjLT5yZWdzLm5leHQpOworCisJZGV2X2RiZyhjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksICJjaGFuICVkIC0+IGRldl9hZGRyOiAleFxuIiwKKwkJcGRfY2hhbi0+Y2hhbi5jaGFuX2lkLCBkZXNjLT5yZWdzLmRldl9hZGRyKTsKKwlkZXZfZGJnKGNoYW4yZGV2KCZwZF9jaGFuLT5jaGFuKSwgImNoYW4gJWQgLT4gbWVtX2FkZHI6ICV4XG4iLAorCQlwZF9jaGFuLT5jaGFuLmNoYW5faWQsIGRlc2MtPnJlZ3MubWVtX2FkZHIpOworCWRldl9kYmcoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLCAiY2hhbiAlZCAtPiBzaXplOiAleFxuIiwKKwkJcGRfY2hhbi0+Y2hhbi5jaGFuX2lkLCBkZXNjLT5yZWdzLnNpemUpOworCWRldl9kYmcoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLCAiY2hhbiAlZCAtPiBuZXh0OiAleFxuIiwKKwkJcGRfY2hhbi0+Y2hhbi5jaGFuX2lkLCBkZXNjLT5yZWdzLm5leHQpOworCisJaWYgKGxpc3RfZW1wdHkoJmRlc2MtPnR4X2xpc3QpKQorCQlwZGNfc2V0X21vZGUoJnBkX2NoYW4tPmNoYW4sIERNQV9DVEwwX09ORVNIT1QpOworCWVsc2UKKwkJcGRjX3NldF9tb2RlKCZwZF9jaGFuLT5jaGFuLCBETUFfQ1RMMF9TRyk7CisKKwl2YWwgPSBkbWFfcmVhZGwocGQsIENUTDIpOworCXZhbCB8PSAxIDw8IChETUFfQ1RMMl9TVEFSVF9TSElGVF9CSVRTICsgcGRfY2hhbi0+Y2hhbi5jaGFuX2lkKTsKKwlkbWFfd3JpdGVsKHBkLCBDVEwyLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBwZGNfY2hhaW5fY29tcGxldGUoc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbiwKKwkJCSAgICAgICBzdHJ1Y3QgcGNoX2RtYV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkID0gJmRlc2MtPnR4ZDsKKwlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2sgPSB0eGQtPmNhbGxiYWNrOworCXZvaWQgKnBhcmFtID0gdHhkLT5jYWxsYmFja19wYXJhbTsKKworCWxpc3Rfc3BsaWNlX2luaXQoJmRlc2MtPnR4X2xpc3QsICZwZF9jaGFuLT5mcmVlX2xpc3QpOworCWxpc3RfbW92ZSgmZGVzYy0+ZGVzY19ub2RlLCAmcGRfY2hhbi0+ZnJlZV9saXN0KTsKKworCWlmIChjYWxsYmFjaykKKwkJY2FsbGJhY2socGFyYW0pOworfQorCitzdGF0aWMgdm9pZCBwZGNfY29tcGxldGVfYWxsKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJc3RydWN0IHBjaF9kbWFfZGVzYyAqZGVzYywgKl9kOworCUxJU1RfSEVBRChsaXN0KTsKKworCUJVR19PTighcGRjX2lzX2lkbGUocGRfY2hhbikpOworCisJaWYgKCFsaXN0X2VtcHR5KCZwZF9jaGFuLT5xdWV1ZSkpCisJCXBkY19kb3N0YXJ0KHBkX2NoYW4sIHBkY19maXJzdF9xdWV1ZWQocGRfY2hhbikpOworCisJbGlzdF9zcGxpY2VfaW5pdCgmcGRfY2hhbi0+YWN0aXZlX2xpc3QsICZsaXN0KTsKKwlsaXN0X3NwbGljZV9pbml0KCZwZF9jaGFuLT5xdWV1ZSwgJnBkX2NoYW4tPmFjdGl2ZV9saXN0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZCwgJmxpc3QsIGRlc2Nfbm9kZSkKKwkJcGRjX2NoYWluX2NvbXBsZXRlKHBkX2NoYW4sIGRlc2MpOworfQorCitzdGF0aWMgdm9pZCBwZGNfaGFuZGxlX2Vycm9yKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJc3RydWN0IHBjaF9kbWFfZGVzYyAqYmFkX2Rlc2M7CisKKwliYWRfZGVzYyA9IHBkY19maXJzdF9hY3RpdmUocGRfY2hhbik7CisJbGlzdF9kZWwoJmJhZF9kZXNjLT5kZXNjX25vZGUpOworCisJbGlzdF9zcGxpY2VfaW5pdCgmcGRfY2hhbi0+cXVldWUsIHBkX2NoYW4tPmFjdGl2ZV9saXN0LnByZXYpOworCisJaWYgKCFsaXN0X2VtcHR5KCZwZF9jaGFuLT5hY3RpdmVfbGlzdCkpCisJCXBkY19kb3N0YXJ0KHBkX2NoYW4sIHBkY19maXJzdF9hY3RpdmUocGRfY2hhbikpOworCisJZGV2X2NyaXQoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLCAiQmFkIGRlc2NyaXB0b3Igc3VibWl0dGVkXG4iKTsKKwlkZXZfY3JpdChjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksICJkZXNjcmlwdG9yIGNvb2tpZTogJWRcbiIsCisJCSBiYWRfZGVzYy0+dHhkLmNvb2tpZSk7CisKKwlwZGNfY2hhaW5fY29tcGxldGUocGRfY2hhbiwgYmFkX2Rlc2MpOworfQorCitzdGF0aWMgdm9pZCBwZGNfYWR2YW5jZV93b3JrKHN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4pCit7CisJaWYgKGxpc3RfZW1wdHkoJnBkX2NoYW4tPmFjdGl2ZV9saXN0KSB8fAorCQlsaXN0X2lzX3Npbmd1bGFyKCZwZF9jaGFuLT5hY3RpdmVfbGlzdCkpIHsKKwkJcGRjX2NvbXBsZXRlX2FsbChwZF9jaGFuKTsKKwl9IGVsc2UgeworCQlwZGNfY2hhaW5fY29tcGxldGUocGRfY2hhbiwgcGRjX2ZpcnN0X2FjdGl2ZShwZF9jaGFuKSk7CisJCXBkY19kb3N0YXJ0KHBkX2NoYW4sIHBkY19maXJzdF9hY3RpdmUocGRfY2hhbikpOworCX0KK30KKworc3RhdGljIGRtYV9jb29raWVfdCBwZGNfYXNzaWduX2Nvb2tpZShzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuLAorCQkJCSAgICAgIHN0cnVjdCBwY2hfZG1hX2Rlc2MgKmRlc2MpCit7CisJZG1hX2Nvb2tpZV90IGNvb2tpZSA9IHBkX2NoYW4tPmNoYW4uY29va2llOworCisJaWYgKCsrY29va2llIDwgMCkKKwkJY29va2llID0gMTsKKworCXBkX2NoYW4tPmNoYW4uY29va2llID0gY29va2llOworCWRlc2MtPnR4ZC5jb29raWUgPSBjb29raWU7CisKKwlyZXR1cm4gY29va2llOworfQorCitzdGF0aWMgZG1hX2Nvb2tpZV90IHBkX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ZCkKK3sKKwlzdHJ1Y3QgcGNoX2RtYV9kZXNjICpkZXNjID0gdG9fcGRfZGVzYyh0eGQpOworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4gPSB0b19wZF9jaGFuKHR4ZC0+Y2hhbik7CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKworCXNwaW5fbG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJY29va2llID0gcGRjX2Fzc2lnbl9jb29raWUocGRfY2hhbiwgZGVzYyk7CisKKwlpZiAobGlzdF9lbXB0eSgmcGRfY2hhbi0+YWN0aXZlX2xpc3QpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmRlc2MtPmRlc2Nfbm9kZSwgJnBkX2NoYW4tPmFjdGl2ZV9saXN0KTsKKwkJcGRjX2Rvc3RhcnQocGRfY2hhbiwgZGVzYyk7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmcGRfY2hhbi0+cXVldWUpOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2hfZG1hX2Rlc2MgKnBkY19hbGxvY19kZXNjKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZ2ZwX3QgZmxhZ3MpCit7CisJc3RydWN0IHBjaF9kbWFfZGVzYyAqZGVzYyA9IE5VTEw7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQoY2hhbi0+ZGV2aWNlKTsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlkZXNjID0gcGNpX3Bvb2xfYWxsb2MocGQtPnBvb2wsIEdGUF9LRVJORUwsICZhZGRyKTsKKwlpZiAoZGVzYykgeworCQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2hfZG1hX2Rlc2MpKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRlc2MtPnR4X2xpc3QpOworCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjLT50eGQsIGNoYW4pOworCQlkZXNjLT50eGQudHhfc3VibWl0ID0gcGRfdHhfc3VibWl0OworCQlkZXNjLT50eGQuZmxhZ3MgPSBETUFfQ1RSTF9BQ0s7CisJCWRlc2MtPnR4ZC5waHlzID0gYWRkcjsKKwl9CisKKwlyZXR1cm4gZGVzYzsKK30KKworc3RhdGljIHN0cnVjdCBwY2hfZG1hX2Rlc2MgKnBkY19kZXNjX2dldChzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuKQoreworCXN0cnVjdCBwY2hfZG1hX2Rlc2MgKmRlc2MsICpfZDsKKwlzdHJ1Y3QgcGNoX2RtYV9kZXNjICpyZXQgPSBOVUxMOworCWludCBpOworCisJc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2QsICZwZF9jaGFuLT5mcmVlX2xpc3QsIGRlc2Nfbm9kZSkgeworCQlpKys7CisJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+dHhkKSkgeworCQkJbGlzdF9kZWwoJmRlc2MtPmRlc2Nfbm9kZSk7CisJCQlyZXQgPSBkZXNjOworCQkJYnJlYWs7CisJCX0KKwkJZGV2X2RiZyhjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksICJkZXNjICVwIG5vdCBBQ0tlZFxuIiwgZGVzYyk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwlkZXZfZGJnKGNoYW4yZGV2KCZwZF9jaGFuLT5jaGFuKSwgInNjYW5uZWQgJWQgZGVzY3JpcHRvcnNcbiIsIGkpOworCisJaWYgKCFyZXQpIHsKKwkJcmV0ID0gcGRjX2FsbG9jX2Rlc2MoJnBkX2NoYW4tPmNoYW4sIEdGUF9OT0lPKTsKKwkJaWYgKHJldCkgeworCQkJc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwkJCXBkX2NoYW4tPmRlc2NzX2FsbG9jYXRlZCsrOworCQkJc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQl9IGVsc2UgeworCQkJZGV2X2VycihjaGFuMmRldigmcGRfY2hhbi0+Y2hhbiksCisJCQkJImZhaWxlZCB0byBhbGxvYyBkZXNjXG4iKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBkY19kZXNjX3B1dChzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuLAorCQkJIHN0cnVjdCBwY2hfZG1hX2Rlc2MgKmRlc2MpCit7CisJaWYgKGRlc2MpIHsKKwkJc3Bpbl9sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmZGVzYy0+dHhfbGlzdCwgJnBkX2NoYW4tPmZyZWVfbGlzdCk7CisJCWxpc3RfYWRkKCZkZXNjLT5kZXNjX25vZGUsICZwZF9jaGFuLT5mcmVlX2xpc3QpOworCQlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJfQorfQorCitzdGF0aWMgaW50IHBkX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuID0gdG9fcGRfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgcGNoX2RtYV9kZXNjICpkZXNjOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisJaW50IGk7CisKKwlpZiAoIXBkY19pc19pZGxlKHBkX2NoYW4pKSB7CisJCWRldl9kYmcoY2hhbjJkZXYoY2hhbiksICJETUEgY2hhbm5lbCBub3QgaWRsZSA/XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCFsaXN0X2VtcHR5KCZwZF9jaGFuLT5mcmVlX2xpc3QpKQorCQlyZXR1cm4gcGRfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkOworCisJZm9yIChpID0gMDsgaSA8IGluaXRfbnJfZGVzY19wZXJfY2hhbm5lbDsgaSsrKSB7CisJCWRlc2MgPSBwZGNfYWxsb2NfZGVzYyhjaGFuLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRlc2MpIHsKKwkJCWRldl93YXJuKGNoYW4yZGV2KGNoYW4pLAorCQkJCSJPbmx5IGFsbG9jYXRlZCAlZCBpbml0aWFsIGRlc2NyaXB0b3JzXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmdG1wX2xpc3QpOworCX0KKworCXNwaW5fbG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJbGlzdF9zcGxpY2UoJnRtcF9saXN0LCAmcGRfY2hhbi0+ZnJlZV9saXN0KTsKKwlwZF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQgPSBpOworCXBkX2NoYW4tPmNvbXBsZXRlZF9jb29raWUgPSBjaGFuLT5jb29raWUgPSAxOworCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKworCXBkY19lbmFibGVfaXJxKGNoYW4sIDEpOworCXBkY19zZXRfZGlyKGNoYW4pOworCisJcmV0dXJuIHBkX2NoYW4tPmRlc2NzX2FsbG9jYXRlZDsKK30KKworc3RhdGljIHZvaWQgcGRfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbiA9IHRvX3BkX2NoYW4oY2hhbik7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gdG9fcGQoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgcGNoX2RtYV9kZXNjICpkZXNjLCAqX2Q7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCUJVR19PTighcGRjX2lzX2lkbGUocGRfY2hhbikpOworCUJVR19PTighbGlzdF9lbXB0eSgmcGRfY2hhbi0+YWN0aXZlX2xpc3QpKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnBkX2NoYW4tPnF1ZXVlKSk7CisKKwlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJnBkX2NoYW4tPmZyZWVfbGlzdCwgJnRtcF9saXN0KTsKKwlwZF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQgPSAwOworCXNwaW5fdW5sb2NrX2JoKCZwZF9jaGFuLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZCwgJnRtcF9saXN0LCBkZXNjX25vZGUpCisJCXBjaV9wb29sX2ZyZWUocGQtPnBvb2wsIGRlc2MsIGRlc2MtPnR4ZC5waHlzKTsKKworCXBkY19lbmFibGVfaXJxKGNoYW4sIDApOworfQorCitzdGF0aWMgZW51bSBkbWFfc3RhdHVzIHBkX3R4X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGRtYV9jb29raWVfdCBjb29raWUsCisJCQkJICAgIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpCit7CisJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbiA9IHRvX3BkX2NoYW4oY2hhbik7CisJZG1hX2Nvb2tpZV90IGxhc3RfdXNlZDsKKwlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJbGFzdF9jb21wbGV0ZWQgPSBwZF9jaGFuLT5jb21wbGV0ZWRfY29va2llOworCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKKwlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisKKwlyZXQgPSBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkKTsKKworCWRtYV9zZXRfdHhfc3RhdGUodHhzdGF0ZSwgbGFzdF9jb21wbGV0ZWQsIGxhc3RfdXNlZCwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwZF9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuID0gdG9fcGRfY2hhbihjaGFuKTsKKworCWlmIChwZGNfaXNfaWRsZShwZF9jaGFuKSkgeworCQlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCQlwZGNfYWR2YW5jZV93b3JrKHBkX2NoYW4pOworCQlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpwZF9wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfbGVuLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4gPSB0b19wZF9jaGFuKGNoYW4pOworCXN0cnVjdCBwY2hfZG1hX3NsYXZlICpwZF9zbGF2ZSA9IGNoYW4tPnByaXZhdGU7CisJc3RydWN0IHBjaF9kbWFfZGVzYyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBwY2hfZG1hX2Rlc2MgKnByZXYgPSBOVUxMOworCXN0cnVjdCBwY2hfZG1hX2Rlc2MgKmRlc2MgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJZG1hX2FkZHJfdCByZWc7CisJaW50IGk7CisKKwlpZiAodW5saWtlbHkoIXNnX2xlbikpIHsKKwkJZGV2X2luZm8oY2hhbjJkZXYoY2hhbiksICJwcmVwX3NsYXZlX3NnOiBsZW5ndGggaXMgemVybyFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkKKwkJcmVnID0gcGRfc2xhdmUtPnJ4X3JlZzsKKwllbHNlIGlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJcmVnID0gcGRfc2xhdmUtPnR4X3JlZzsKKwllbHNlCisJCXJldHVybiBOVUxMOworCisJZm9yX2VhY2hfc2coc2dsLCBzZywgc2dfbGVuLCBpKSB7CisJCWRlc2MgPSBwZGNfZGVzY19nZXQocGRfY2hhbik7CisKKwkJaWYgKCFkZXNjKQorCQkJZ290byBlcnJfZGVzY19nZXQ7CisKKwkJZGVzYy0+cmVncy5kZXZfYWRkciA9IHJlZzsKKwkJZGVzYy0+cmVncy5tZW1fYWRkciA9IHNnX3BoeXMoc2cpOworCQlkZXNjLT5yZWdzLnNpemUgPSBzZ19kbWFfbGVuKHNnKTsKKwkJZGVzYy0+cmVncy5uZXh0ID0gRE1BX0RFU0NfRk9MTE9XX1dJVEhPVVRfSVJROworCisJCXN3aXRjaCAocGRfc2xhdmUtPndpZHRoKSB7CisJCWNhc2UgUENIX0RNQV9XSURUSF8xX0JZVEU6CisJCQlpZiAoZGVzYy0+cmVncy5zaXplID4gRE1BX0RFU0NfTUFYX0NPVU5UXzFfQllURSkKKwkJCQlnb3RvIGVycl9kZXNjX2dldDsKKwkJCWRlc2MtPnJlZ3Muc2l6ZSB8PSBETUFfREVTQ19XSURUSF8xX0JZVEU7CisJCQlicmVhazsKKwkJY2FzZSBQQ0hfRE1BX1dJRFRIXzJfQllURVM6CisJCQlpZiAoZGVzYy0+cmVncy5zaXplID4gRE1BX0RFU0NfTUFYX0NPVU5UXzJfQllURVMpCisJCQkJZ290byBlcnJfZGVzY19nZXQ7CisJCQlkZXNjLT5yZWdzLnNpemUgfD0gRE1BX0RFU0NfV0lEVEhfMl9CWVRFUzsKKwkJCWJyZWFrOworCQljYXNlIFBDSF9ETUFfV0lEVEhfNF9CWVRFUzoKKwkJCWlmIChkZXNjLT5yZWdzLnNpemUgPiBETUFfREVTQ19NQVhfQ09VTlRfNF9CWVRFUykKKwkJCQlnb3RvIGVycl9kZXNjX2dldDsKKwkJCWRlc2MtPnJlZ3Muc2l6ZSB8PSBETUFfREVTQ19XSURUSF80X0JZVEVTOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGVycl9kZXNjX2dldDsKKwkJfQorCisKKwkJaWYgKCFmaXJzdCkgeworCQkJZmlyc3QgPSBkZXNjOworCQl9IGVsc2UgeworCQkJcHJldi0+cmVncy5uZXh0IHw9IGRlc2MtPnR4ZC5waHlzOworCQkJbGlzdF9hZGRfdGFpbCgmZGVzYy0+ZGVzY19ub2RlLCAmZmlyc3QtPnR4X2xpc3QpOworCQl9CisKKwkJcHJldiA9IGRlc2M7CisJfQorCisJaWYgKGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBUKQorCQlkZXNjLT5yZWdzLm5leHQgPSBETUFfREVTQ19FTkRfV0lUSF9JUlE7CisJZWxzZQorCQlkZXNjLT5yZWdzLm5leHQgPSBETUFfREVTQ19FTkRfV0lUSE9VVF9JUlE7CisKKwlmaXJzdC0+dHhkLmNvb2tpZSA9IC1FQlVTWTsKKwlkZXNjLT50eGQuZmxhZ3MgPSBmbGFnczsKKworCXJldHVybiAmZmlyc3QtPnR4ZDsKKworZXJyX2Rlc2NfZ2V0OgorCWRldl9lcnIoY2hhbjJkZXYoY2hhbiksICJmYWlsZWQgdG8gZ2V0IGRlc2Mgb3Igd3JvbmcgcGFyYW1ldGVyc1xuIik7CisJcGRjX2Rlc2NfcHV0KHBkX2NoYW4sIGZpcnN0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwZF9kZXZpY2VfY29udHJvbChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIGVudW0gZG1hX2N0cmxfY21kIGNtZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbiA9IHRvX3BkX2NoYW4oY2hhbik7CisJc3RydWN0IHBjaF9kbWFfZGVzYyAqZGVzYywgKl9kOworCUxJU1RfSEVBRChsaXN0KTsKKworCWlmIChjbWQgIT0gRE1BX1RFUk1JTkFURV9BTEwpCisJCXJldHVybiAtRU5YSU87CisKKwlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCisJcGRjX3NldF9tb2RlKCZwZF9jaGFuLT5jaGFuLCBETUFfQ1RMMF9ESVNBQkxFKTsKKworCWxpc3Rfc3BsaWNlX2luaXQoJnBkX2NoYW4tPmFjdGl2ZV9saXN0LCAmbGlzdCk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcGRfY2hhbi0+cXVldWUsICZsaXN0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZCwgJmxpc3QsIGRlc2Nfbm9kZSkKKwkJcGRjX2NoYWluX2NvbXBsZXRlKHBkX2NoYW4sIGRlc2MpOworCisJc3Bpbl91bmxvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGRjX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW4gPSAoc3RydWN0IHBjaF9kbWFfY2hhbiAqKWRhdGE7CisKKwlpZiAoIXBkY19pc19pZGxlKHBkX2NoYW4pKSB7CisJCWRldl9lcnIoY2hhbjJkZXYoJnBkX2NoYW4tPmNoYW4pLAorCQkJIkJVRzogaGFuZGxlIG5vbi1pZGxlIGNoYW5uZWwgaW4gdGFza2xldFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfYmgoJnBkX2NoYW4tPmxvY2spOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoMCwgJnBkX2NoYW4tPmVycl9zdGF0dXMpKQorCQlwZGNfaGFuZGxlX2Vycm9yKHBkX2NoYW4pOworCWVsc2UKKwkJcGRjX2FkdmFuY2Vfd29yayhwZF9jaGFuKTsKKwlzcGluX3VubG9ja19iaCgmcGRfY2hhbi0+bG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpCit7CisJc3RydWN0IHBjaF9kbWEgKnBkID0gKHN0cnVjdCBwY2hfZG1hICopZGV2aWQ7CisJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbjsKKwl1MzIgc3RzMDsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gSVJRX05PTkU7CisKKwlzdHMwID0gZG1hX3JlYWRsKHBkLCBTVFMwKTsKKworCWRldl9kYmcocGQtPmRtYS5kZXYsICJwZF9pcnEgc3RzMDogJXhcbiIsIHN0czApOworCisJZm9yIChpID0gMDsgaSA8IHBkLT5kbWEuY2hhbmNudDsgaSsrKSB7CisJCXBkX2NoYW4gPSAmcGQtPmNoYW5uZWxzW2ldOworCisJCWlmIChzdHMwICYgRE1BX1NUQVRVU19JUlEoaSkpIHsKKwkJCWlmIChzdHMwICYgRE1BX1NUQVRVU19FUlIoaSkpCisJCQkJc2V0X2JpdCgwLCAmcGRfY2hhbi0+ZXJyX3N0YXR1cyk7CisKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnBkX2NoYW4tPnRhc2tsZXQpOworCQkJcmV0ID0gSVJRX0hBTkRMRUQ7CisJCX0KKworCX0KKworCS8qIGNsZWFyIGludGVycnVwdCBiaXRzIGluIHN0YXR1cyByZWdpc3RlciAqLworCWRtYV93cml0ZWwocGQsIFNUUzAsIHN0czApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNoX2RtYV9zYXZlX3JlZ3Moc3RydWN0IHBjaF9kbWEgKnBkKQoreworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW47CisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCAqX2M7CisJaW50IGkgPSAwOworCisJcGQtPnJlZ3MuZG1hX2N0bDAgPSBkbWFfcmVhZGwocGQsIENUTDApOworCXBkLT5yZWdzLmRtYV9jdGwxID0gZG1hX3JlYWRsKHBkLCBDVEwxKTsKKwlwZC0+cmVncy5kbWFfY3RsMiA9IGRtYV9yZWFkbChwZCwgQ1RMMik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2MsICZwZC0+ZG1hLmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQlwZF9jaGFuID0gdG9fcGRfY2hhbihjaGFuKTsKKworCQlwZC0+Y2hfcmVnc1tpXS5kZXZfYWRkciA9IGNoYW5uZWxfcmVhZGwocGRfY2hhbiwgREVWX0FERFIpOworCQlwZC0+Y2hfcmVnc1tpXS5tZW1fYWRkciA9IGNoYW5uZWxfcmVhZGwocGRfY2hhbiwgTUVNX0FERFIpOworCQlwZC0+Y2hfcmVnc1tpXS5zaXplID0gY2hhbm5lbF9yZWFkbChwZF9jaGFuLCBTSVpFKTsKKwkJcGQtPmNoX3JlZ3NbaV0ubmV4dCA9IGNoYW5uZWxfcmVhZGwocGRfY2hhbiwgTkVYVCk7CisKKwkJaSsrOworCX0KK30KKworc3RhdGljIHZvaWQgcGNoX2RtYV9yZXN0b3JlX3JlZ3Moc3RydWN0IHBjaF9kbWEgKnBkKQoreworCXN0cnVjdCBwY2hfZG1hX2NoYW4gKnBkX2NoYW47CisJc3RydWN0IGRtYV9jaGFuICpjaGFuLCAqX2M7CisJaW50IGkgPSAwOworCisJZG1hX3dyaXRlbChwZCwgQ1RMMCwgcGQtPnJlZ3MuZG1hX2N0bDApOworCWRtYV93cml0ZWwocGQsIENUTDEsIHBkLT5yZWdzLmRtYV9jdGwxKTsKKwlkbWFfd3JpdGVsKHBkLCBDVEwyLCBwZC0+cmVncy5kbWFfY3RsMik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2MsICZwZC0+ZG1hLmNoYW5uZWxzLCBkZXZpY2Vfbm9kZSkgeworCQlwZF9jaGFuID0gdG9fcGRfY2hhbihjaGFuKTsKKworCQljaGFubmVsX3dyaXRlbChwZF9jaGFuLCBERVZfQUREUiwgcGQtPmNoX3JlZ3NbaV0uZGV2X2FkZHIpOworCQljaGFubmVsX3dyaXRlbChwZF9jaGFuLCBNRU1fQUREUiwgcGQtPmNoX3JlZ3NbaV0ubWVtX2FkZHIpOworCQljaGFubmVsX3dyaXRlbChwZF9jaGFuLCBTSVpFLCBwZC0+Y2hfcmVnc1tpXS5zaXplKTsKKwkJY2hhbm5lbF93cml0ZWwocGRfY2hhbiwgTkVYVCwgcGQtPmNoX3JlZ3NbaV0ubmV4dCk7CisKKwkJaSsrOworCX0KK30KKworc3RhdGljIGludCBwY2hfZG1hX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAocGQpCisJCXBjaF9kbWFfc2F2ZV9yZWdzKHBkKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaF9kbWFfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwY2hfZG1hICpwZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGRldmljZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHBkKQorCQlwY2hfZG1hX3Jlc3RvcmVfcmVncyhwZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGNoX2RtYV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHBjaF9kbWEgKnBkOworCXN0cnVjdCBwY2hfZG1hX3JlZ3MgKnJlZ3M7CisJdW5zaWduZWQgaW50IG5yX2NoYW5uZWxzOworCWludCBlcnI7CisJaW50IGk7CisKKwlucl9jaGFubmVscyA9IGlkLT5kcml2ZXJfZGF0YTsKKwlwZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2hfZG1hKSsKKwkJc2l6ZW9mKHN0cnVjdCBwY2hfZG1hX2NoYW4pICogbnJfY2hhbm5lbHMsIEdGUF9LRVJORUwpOworCWlmICghcGQpCisJCXJldHVybiAtRU5PTUVNOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBkKTsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDEpICYgSU9SRVNPVVJDRV9NRU0pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHByb3BlciBiYXNlIGFkZHJlc3NcbiIpOworCQlnb3RvIGVycl9kaXNhYmxlX3BkZXY7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9kaXNhYmxlX3BkZXY7CisJfQorCisJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBzZXQgcHJvcGVyIERNQSBjb25maWdcbiIpOworCQlnb3RvIGVycl9mcmVlX3JlczsKKwl9CisKKwlyZWdzID0gcGQtPm1lbWJhc2UgPSBwY2lfaW9tYXAocGRldiwgMSwgMCk7CisJaWYgKCFwZC0+bWVtYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIE1NSU8gcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZXM7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBkX2lycSwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBwZCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlFcbiIpOworCQlnb3RvIGVycl9pb3VubWFwOworCX0KKworCXBkLT5wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJwY2hfZG1hX2Rlc2NfcG9vbCIsIHBkZXYsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBwY2hfZG1hX2Rlc2MpLCA0LCAwKTsKKwlpZiAoIXBkLT5wb29sKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvYyBETUEgZGVzY3JpcHRvcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlwZC0+ZG1hLmRldiA9ICZwZGV2LT5kZXY7CisJcGQtPmRtYS5jaGFuY250ID0gbnJfY2hhbm5lbHM7CisKKwlJTklUX0xJU1RfSEVBRCgmcGQtPmRtYS5jaGFubmVscyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfY2hhbm5lbHM7IGkrKykgeworCQlzdHJ1Y3QgcGNoX2RtYV9jaGFuICpwZF9jaGFuID0gJnBkLT5jaGFubmVsc1tpXTsKKworCQlwZF9jaGFuLT5jaGFuLmRldmljZSA9ICZwZC0+ZG1hOworCQlwZF9jaGFuLT5jaGFuLmNvb2tpZSA9IDE7CisJCXBkX2NoYW4tPmNoYW4uY2hhbl9pZCA9IGk7CisKKwkJcGRfY2hhbi0+bWVtYmFzZSA9ICZyZWdzLT5kZXNjW2ldOworCisJCXBkX2NoYW4tPmRpciA9IChpICUgMikgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFOworCisJCXNwaW5fbG9ja19pbml0KCZwZF9jaGFuLT5sb2NrKTsKKworCQlJTklUX0xJU1RfSEVBRCgmcGRfY2hhbi0+YWN0aXZlX2xpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcGRfY2hhbi0+cXVldWUpOworCQlJTklUX0xJU1RfSEVBRCgmcGRfY2hhbi0+ZnJlZV9saXN0KTsKKworCQl0YXNrbGV0X2luaXQoJnBkX2NoYW4tPnRhc2tsZXQsIHBkY190YXNrbGV0LAorCQkJICAgICAodW5zaWduZWQgbG9uZylwZF9jaGFuKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGRfY2hhbi0+Y2hhbi5kZXZpY2Vfbm9kZSwgJnBkLT5kbWEuY2hhbm5lbHMpOworCX0KKworCWRtYV9jYXBfemVybyhwZC0+ZG1hLmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfUFJJVkFURSwgcGQtPmRtYS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBwZC0+ZG1hLmNhcF9tYXNrKTsKKworCXBkLT5kbWEuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0gcGRfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJcGQtPmRtYS5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IHBkX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJcGQtPmRtYS5kZXZpY2VfdHhfc3RhdHVzID0gcGRfdHhfc3RhdHVzOworCXBkLT5kbWEuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBwZF9pc3N1ZV9wZW5kaW5nOworCXBkLT5kbWEuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBwZF9wcmVwX3NsYXZlX3NnOworCXBkLT5kbWEuZGV2aWNlX2NvbnRyb2wgPSBwZF9kZXZpY2VfY29udHJvbDsKKworCWVyciA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJnBkLT5kbWEpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERNQSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9mcmVlX3Bvb2w7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX3Bvb2w6CisJcGNpX3Bvb2xfZGVzdHJveShwZC0+cG9vbCk7CitlcnJfZnJlZV9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBwZCk7CitlcnJfaW91bm1hcDoKKwlwY2lfaW91bm1hcChwZGV2LCBwZC0+bWVtYmFzZSk7CitlcnJfZnJlZV9yZXM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9kaXNhYmxlX3BkZXY6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyX2ZyZWVfbWVtOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBwY2hfZG1hX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGNoX2RtYSAqcGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHBjaF9kbWFfY2hhbiAqcGRfY2hhbjsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sICpfYzsKKworCWlmIChwZCkgeworCQlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnBkLT5kbWEpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjaGFuLCBfYywgJnBkLT5kbWEuY2hhbm5lbHMsCisJCQkJCSBkZXZpY2Vfbm9kZSkgeworCQkJcGRfY2hhbiA9IHRvX3BkX2NoYW4oY2hhbik7CisKKwkJCXRhc2tsZXRfZGlzYWJsZSgmcGRfY2hhbi0+dGFza2xldCk7CisJCQl0YXNrbGV0X2tpbGwoJnBkX2NoYW4tPnRhc2tsZXQpOworCQl9CisKKwkJcGNpX3Bvb2xfZGVzdHJveShwZC0+cG9vbCk7CisJCWZyZWVfaXJxKHBkZXYtPmlycSwgcGQpOworCQlwY2lfaW91bm1hcChwZGV2LCBwZC0+bWVtYmFzZSk7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJa2ZyZWUocGQpOworCX0KK30KKworLyogUENJIERldmljZSBJRCBvZiBETUEgZGV2aWNlICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENIX0RNQV84Q0ggICAgICAgIDB4ODgxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSF9ETUFfNENIICAgICAgICAweDg4MTUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaF9kbWFfaWRfdGFibGVbXSA9IHsKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBQQ0lfREVWSUNFX0lEX1BDSF9ETUFfOENIKSwgOCB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIFBDSV9ERVZJQ0VfSURfUENIX0RNQV80Q0gpLCA0IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNoX2RtYV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRFJWX05BTUUsCisJLmlkX3RhYmxlCT0gcGNoX2RtYV9pZF90YWJsZSwKKwkucHJvYmUJCT0gcGNoX2RtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBjaF9kbWFfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IHBjaF9kbWFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjaF9kbWFfcmVzdW1lLAorI2VuZGlmCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY2hfZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNoX2RtYV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGNoX2RtYV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2hfZG1hX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBjaF9kbWFfaW5pdCk7Cittb2R1bGVfZXhpdChwY2hfZG1hX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRvcGNsaWZmIFBDSCBETUEgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIllvbmcgV2FuZyA8eW9uZy55LndhbmdAaW50ZWwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvc2hkbWEuYyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKaW5kZXggYTJhNTE5Zi4uZmI2NGNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc2hkbWEuYworKysgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCkBAIC04MTYsNyArODE2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogc3RhdGljIGlycXJldHVybl90IHNoX2RtYWVfZXJyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IChzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKilkYXRhOwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAKIAkvKiBEZWZhdWx0IHRyYW5zZmVyIHNpemUgb2YgMzIgYnl0ZXMgcmVxdWlyZXMgMzItYnl0ZSBhbGlnbm1lbnQgKi8KIAlzaGRldi0+Y29tbW9uLmNvcHlfYWxpZ24gPSBMT0cyX0RFRkFVTFRfWEZFUl9TSVpFOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogCWNoYW5pcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAxKTsKIAogCWlmICghY2hhbmlycV9yZXMpCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCiAjZWxzZQogCWNoYW5pcnFfcmVzID0gZXJyaXJxX3JlczsKLSNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLworI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0IHx8IENPTkZJR19BUkNIX1NITU9CSUxFICovCiAKIAlpZiAoY2hhbmlycV9yZXMtPnN0YXJ0ID09IGNoYW5pcnFfcmVzLT5lbmQgJiYKIAkgICAgIXBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSkpIHsKQEAgLTExMjksNyArMTEyOSw3IEBACiBjaGFuX3Byb2JlX2VycjoKIAlzaF9kbWFlX2NoYW5fcmVtb3ZlKHNoZGV2KTsKIGVpcnFyZXM6Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogCWZyZWVfaXJxKGVycmlycSwgc2hkZXYpOwogZWlycV9lcnI6CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MC5jIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKaW5kZXggYzQyNjgyOS4uMTdlMjYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKKysrIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwLmMKQEAgLTMwLDE0ICszMCwxNiBAQAogLyogTWF4aW11bSBpdGVyYXRpb25zIHRha2VuIGJlZm9yZSBnaXZpbmcgdXAgc3VzcGVuZGluZyBhIGNoYW5uZWwgKi8KICNkZWZpbmUgRDQwX1NVU1BFTkRfTUFYX0lUIDUwMAogCisvKiBIYXJkd2FyZSByZXF1aXJlbWVudCBvbiBMQ0xBIGFsaWdubWVudCAqLworI2RlZmluZSBMQ0xBX0FMSUdOTUVOVCAweDQwMDAwCisvKiBBdHRlbXB0cyBiZWZvcmUgZ2l2aW5nIHVwIHRvIHRyeWluZyB0byBnZXQgcGFnZXMgdGhhdCBhcmUgYWxpZ25lZCAqLworI2RlZmluZSBNQVhfTENMQV9BTExPQ19BVFRFTVBUUyAyNTYKKworLyogQml0IG1hcmtpbmdzIGZvciBhbGxvY2F0aW9uIG1hcCAqLwogI2RlZmluZSBENDBfQUxMT0NfRlJFRQkJKDEgPDwgMzEpCiAjZGVmaW5lIEQ0MF9BTExPQ19QSFkJCSgxIDw8IDMwKQogI2RlZmluZSBENDBfQUxMT0NfTE9HX0ZSRUUJMAogCi0vKiBUaGUgbnVtYmVyIG9mIGZyZWUgZDQwX2Rlc2MgdG8ga2VlcCBpbiBtZW1vcnkgYmVmb3JlIHN0YXJ0aW5nCi0gKiB0byBrZnJlZSgpIHRoZW0gKi8KLSNkZWZpbmUgRDQwX0RFU0NfQ0FDSEVfU0laRSA1MAotCiAvKiBIYXJkd2FyZSBkZXNpZ25lciBvZiB0aGUgYmxvY2sgKi8KICNkZWZpbmUgRDQwX1BFUklQSElEMl9ERVNJR05FUiAweDgKIApAQCAtNjgsOSArNzAsOSBAQAogICovCiBzdHJ1Y3QgZDQwX2xsaV9wb29sIHsKIAl2b2lkCSpiYXNlOwotCWludAlzaXplOworCWludAkgc2l6ZTsKIAkvKiBTcGFjZSBmb3IgZHN0IGFuZCBzcmMsIHBsdXMgYW4gZXh0cmEgZm9yIHBhZGRpbmcgKi8KLQl1OAlwcmVfYWxsb2NfbGxpWzMgKiBzaXplb2Yoc3RydWN0IGQ0MF9waHlfbGxpKV07CisJdTgJIHByZV9hbGxvY19sbGlbMyAqIHNpemVvZihzdHJ1Y3QgZDQwX3BoeV9sbGkpXTsKIH07CiAKIC8qKgpAQCAtODEsOSArODMsMTAgQEAKICAqIGxsaV9sZW4gZXF1YWxzIG9uZS4KICAqIEBsbGlfbG9nOiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgbG9naWNhbCBjaGFubmVscy4KICAqIEBsbGlfcG9vbDogVGhlIHBvb2wgd2l0aCB0d28gZW50cmllcyBwcmUtYWxsb2NhdGVkLgotICogQGxsaV9sZW46IE51bWJlciBvZiBMTEkncyBpbiBsbGlfcG9vbAotICogQGxsaV90Y291bnQ6IE51bWJlciBvZiBMTElzIHByb2Nlc3NlZCBpbiB0aGUgdHJhbnNmZXIuIFdoZW4gZXF1YWxzIGxsaV9sZW4KLSAqIHRoZW4gdGhpcyB0cmFuc2ZlciBqb2IgaXMgZG9uZS4KKyAqIEBsbGlfbGVuOiBOdW1iZXIgb2YgbGxpcyBvZiBjdXJyZW50IGRlc2NyaXB0b3IuCisgKiBAbGxpX2NvdW50OiBOdW1iZXIgb2YgdHJhbnNmZXJlZCBsbGlzLgorICogQGxsaV90eF9sZW46IE1heCBudW1iZXIgb2YgTExJcyBwZXIgdHJhbnNmZXIsIHRoZXJlIGNhbiBiZQorICogbWFueSB0cmFuc2ZlciBmb3Igb25lIGRlc2NyaXB0b3IuCiAgKiBAdHhkOiBETUEgZW5naW5lIHN0cnVjdC4gVXNlZCBmb3IgYW1vbmcgb3RoZXIgdGhpbmdzIGZvciBjb21tdW5pY2F0aW9uCiAgKiBkdXJpbmcgYSB0cmFuc2Zlci4KICAqIEBub2RlOiBMaXN0IGVudHJ5LgpAQCAtMTAwLDggKzEwMyw5IEBACiAJc3RydWN0IGQ0MF9sb2dfbGxpX2JpZGlyCSBsbGlfbG9nOwogCiAJc3RydWN0IGQ0MF9sbGlfcG9vbAkJIGxsaV9wb29sOwotCXUzMgkJCQkgbGxpX2xlbjsKLQl1MzIJCQkJIGxsaV90Y291bnQ7CisJaW50CQkJCSBsbGlfbGVuOworCWludAkJCQkgbGxpX2NvdW50OworCXUzMgkJCQkgbGxpX3R4X2xlbjsKIAogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkgdHhkOwogCXN0cnVjdCBsaXN0X2hlYWQJCSBub2RlOwpAQCAtMTEzLDE4ICsxMTcsMjAgQEAKIC8qKgogICogc3RydWN0IGQ0MF9sY2xhX3Bvb2wgLSBMQ0xBIHBvb2wgc2V0dGluZ3MgYW5kIGRhdGEuCiAgKgotICogQGJhc2U6IFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgTENMQS4KLSAqIEBwaHk6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiBMQ0xBLgotICogQGJhc2Vfc2l6ZTogc2l6ZSBvZiBsY2xhLgorICogQGJhc2U6IFRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgTENMQS4gMTggYml0IGFsaWduZWQuCisgKiBAYmFzZV91bmFsaWduZWQ6IFRoZSBvcmlnbmFsIGttYWxsb2MgcG9pbnRlciwgaWYga21hbGxvYyBpcyB1c2VkLgorICogVGhpcyBwb2ludGVyIGlzIG9ubHkgdGhlcmUgZm9yIGNsZWFuLXVwIG9uIGVycm9yLgorICogQHBhZ2VzOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCBmb3IgYWxsIHBoeXNpY2FsIGNoYW5uZWxzLgorICogT25seSB1c2VkIGxhdGVyIGZvciBjbGVhbi11cCBvbiBlcnJvcgogICogQGxvY2s6IExvY2sgdG8gcHJvdGVjdCB0aGUgY29udGVudCBpbiB0aGlzIHN0cnVjdC4KLSAqIEBhbGxvY19tYXA6IE1hcHBpbmcgYmV0d2VlbiBwaHlzaWNhbCBjaGFubmVsIGFuZCBMQ0xBIGVudHJpZXMuCisgKiBAYWxsb2NfbWFwOiBCaXRtYXAgbWFwcGluZyBiZXR3ZWVuIHBoeXNpY2FsIGNoYW5uZWwgYW5kIExDTEEgZW50cmllcy4KICAqIEBudW1fYmxvY2tzOiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgb2YgYWxsb2NfbWFwLiBFcXVhbHMgdG8gdGhlCiAgKiBudW1iZXIgb2YgcGh5c2ljYWwgY2hhbm5lbHMuCiAgKi8KIHN0cnVjdCBkNDBfbGNsYV9wb29sIHsKIAl2b2lkCQkqYmFzZTsKLQlkbWFfYWRkcl90CSBwaHk7Ci0JcmVzb3VyY2Vfc2l6ZV90ICBiYXNlX3NpemU7CisJdm9pZAkJKmJhc2VfdW5hbGlnbmVkOworCWludAkJIHBhZ2VzOwogCXNwaW5sb2NrX3QJIGxvY2s7CiAJdTMyCQkqYWxsb2NfbWFwOwogCWludAkJIG51bV9ibG9ja3M7CkBAIC0xNjMsMTUgKzE2OSwxNCBAQAogICogQHBlbmRpbmdfdHg6IFRoZSBudW1iZXIgb2YgcGVuZGluZyB0cmFuc2ZlcnMuIFVzZWQgYmV0d2VlbiBpbnRlcnJ1cHQgaGFuZGxlcgogICogYW5kIHRhc2tsZXQuCiAgKiBAYnVzeTogU2V0IHRvIHRydWUgd2hlbiB0cmFuc2ZlciBpcyBvbmdvaW5nIG9uIHRoaXMgY2hhbm5lbC4KLSAqIEBwaHlfY2hhbjogUG9pbnRlciB0byBwaHlzaWNhbCBjaGFubmVsIHdoaWNoIHRoaXMgaW5zdGFuY2UgcnVucyBvbi4KKyAqIEBwaHlfY2hhbjogUG9pbnRlciB0byBwaHlzaWNhbCBjaGFubmVsIHdoaWNoIHRoaXMgaW5zdGFuY2UgcnVucyBvbi4gSWYgdGhpcworICogcG9pbnQgaXMgTlVMTCwgdGhlbiB0aGUgY2hhbm5lbCBpcyBub3QgYWxsb2NhdGVkLgogICogQGNoYW46IERNQSBlbmdpbmUgaGFuZGxlLgogICogQHRhc2tsZXQ6IFRhc2tsZXQgdGhhdCBnZXRzIHNjaGVkdWxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0IHRvIGNvbXBsZXRlIGEKICAqIHRyYW5zZmVyIGFuZCBjYWxsIGNsaWVudCBjYWxsYmFjay4KICAqIEBjbGllbnQ6IENsaWVudGVkIG93bmVkIGRlc2NyaXB0b3IgbGlzdC4KICAqIEBhY3RpdmU6IEFjdGl2ZSBkZXNjcmlwdG9yLgogICogQHF1ZXVlOiBRdWV1ZWQgam9icy4KLSAqIEBmcmVlOiBMaXN0IG9mIGZyZWUgZGVzY3JpcHRzLCByZWFkeSB0byBiZSByZXVzZWQuCi0gKiBAZnJlZV9sZW46IE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiB0aGUgZnJlZSBsaXN0LgogICogQGRtYV9jZmc6IFRoZSBjbGllbnQgY29uZmlndXJhdGlvbiBvZiB0aGlzIGRtYSBjaGFubmVsLgogICogQGJhc2U6IFBvaW50ZXIgdG8gdGhlIGRldmljZSBpbnN0YW5jZSBzdHJ1Y3QuCiAgKiBAc3JjX2RlZl9jZmc6IERlZmF1bHQgY2ZnIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHNyYy4KQEAgLTE5NSw4ICsyMDAsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCSBjbGllbnQ7CiAJc3RydWN0IGxpc3RfaGVhZAkJIGFjdGl2ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQkgcXVldWU7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJIGZyZWU7Ci0JaW50CQkJCSBmcmVlX2xlbjsKIAlzdHJ1Y3Qgc3RlZG1hNDBfY2hhbl9jZmcJIGRtYV9jZmc7CiAJc3RydWN0IGQ0MF9iYXNlCQkJKmJhc2U7CiAJLyogRGVmYXVsdCByZWdpc3RlciBjb25maWd1cmF0aW9ucyAqLwpAQCAtMjA1LDYgKzIwOCw5IEBACiAJc3RydWN0IGQ0MF9kZWZfbGNzcAkJIGxvZ19kZWY7CiAJc3RydWN0IGQ0MF9sY2xhX2VsZW0JCSBsY2xhOwogCXN0cnVjdCBkNDBfbG9nX2xsaV9mdWxsCQkqbGNwYTsKKwkvKiBSdW50aW1lIHJlY29uZmlndXJhdGlvbiAqLworCWRtYV9hZGRyX3QJCQlydW50aW1lX2FkZHI7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24JCXJ1bnRpbWVfZGlyZWN0aW9uOwogfTsKIAogLyoqCkBAIC0yMTUsNiArMjIxLDcgQEAKICAqIHRoZSBzYW1lIHBoeXNpY2FsIHJlZ2lzdGVyLgogICogQGRldjogVGhlIGRldmljZSBzdHJ1Y3R1cmUuCiAgKiBAdmlydGJhc2U6IFRoZSB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiB0aGUgRE1BJ3MgcmVnaXN0ZXIuCisgKiBAcmV2OiBzaWxpY29uIHJldmlzaW9uIGRldGVjdGVkLgogICogQGNsazogUG9pbnRlciB0byB0aGUgRE1BIGNsb2NrIHN0cnVjdHVyZS4KICAqIEBwaHlfc3RhcnQ6IFBoeXNpY2FsIG1lbW9yeSBzdGFydCBvZiB0aGUgRE1BIHJlZ2lzdGVycy4KICAqIEBwaHlfc2l6ZTogU2l6ZSBvZiB0aGUgRE1BIHJlZ2lzdGVyIG1hcC4KQEAgLTI0MCwxMiArMjQ3LDE0IEBACiAgKiBAbGNwYV9iYXNlOiBUaGUgdmlydHVhbCBtYXBwZWQgYWRkcmVzcyBvZiBMQ1BBLgogICogQHBoeV9sY3BhOiBUaGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgTENQQS4KICAqIEBsY3BhX3NpemU6IFRoZSBzaXplIG9mIHRoZSBMQ1BBIGFyZWEuCisgKiBAZGVzY19zbGFiOiBjYWNoZSBmb3IgZGVzY3JpcHRvcnMuCiAgKi8KIHN0cnVjdCBkNDBfYmFzZSB7CiAJc3BpbmxvY2tfdAkJCSBpbnRlcnJ1cHRfbG9jazsKIAlzcGlubG9ja190CQkJIGV4ZWNtZF9sb2NrOwogCXN0cnVjdCBkZXZpY2UJCQkgKmRldjsKIAl2b2lkIF9faW9tZW0JCQkgKnZpcnRiYXNlOworCXU4CQkJCSAgcmV2OjQ7CiAJc3RydWN0IGNsawkJCSAqY2xrOwogCXBoeXNfYWRkcl90CQkJICBwaHlfc3RhcnQ7CiAJcmVzb3VyY2Vfc2l6ZV90CQkJICBwaHlfc2l6ZTsKQEAgLTI2Niw2ICsyNzUsNyBAQAogCXZvaWQJCQkJICpsY3BhX2Jhc2U7CiAJZG1hX2FkZHJfdAkJCSAgcGh5X2xjcGE7CiAJcmVzb3VyY2Vfc2l6ZV90CQkJICBsY3BhX3NpemU7CisJc3RydWN0IGttZW1fY2FjaGUJCSAqZGVzY19zbGFiOwogfTsKIAogLyoqCkBAIC0zNjUsMTEgKzM3NSw2IEBACiAJcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGljIHZvaWQgZDQwX2Rlc2NfcmVzZXQoc3RydWN0IGQ0MF9kZXNjICpkNDBkKQotewotCWQ0MGQtPmxsaV90Y291bnQgPSAwOwotfQotCiBzdGF0aWMgdm9pZCBkNDBfZGVzY19yZW1vdmUoc3RydWN0IGQ0MF9kZXNjICpkNDBkKQogewogCWxpc3RfZGVsKCZkNDBkLT5ub2RlKTsKQEAgLTM3Nyw3ICszODIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGQ0MF9kZXNjICpkNDBfZGVzY19nZXQoc3RydWN0IGQ0MF9jaGFuICpkNDBjKQogewotCXN0cnVjdCBkNDBfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgZDQwX2Rlc2MgKmQ7CiAJc3RydWN0IGQ0MF9kZXNjICpfZDsKIApAQCAtMzg2LDM2ICszOTAsMjEgQEAKIAkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZC0+dHhkKSkgewogCQkJCWQ0MF9wb29sX2xsaV9mcmVlKGQpOwogCQkJCWQ0MF9kZXNjX3JlbW92ZShkKTsKLQkJCQlkZXNjID0gZDsKLQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKIAkJCX0KLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmZDQwYy0+ZnJlZSkpIHsKLQkJLyogQWxsb2MgbmV3IGRlc2MgYmVjYXVzZSB3ZSdyZSBvdXQgb2YgdXNlZCBvbmVzICovCi0JCWRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZDQwX2Rlc2MpLCBHRlBfTk9XQUlUKTsKLQkJaWYgKGRlc2MgPT0gTlVMTCkKLQkJCWdvdG8gb3V0OwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+bm9kZSk7CiAJfSBlbHNlIHsKLQkJLyogUmV1c2UgYW4gb2xkIGRlc2MuICovCi0JCWRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkNDBjLT5mcmVlLAotCQkJCQlzdHJ1Y3QgZDQwX2Rlc2MsCi0JCQkJCW5vZGUpOwotCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Ci0JCWQ0MGMtPmZyZWVfbGVuLS07CisJCWQgPSBrbWVtX2NhY2hlX2FsbG9jKGQ0MGMtPmJhc2UtPmRlc2Nfc2xhYiwgR0ZQX05PV0FJVCk7CisJCWlmIChkICE9IE5VTEwpIHsKKwkJCW1lbXNldChkLCAwLCBzaXplb2Yoc3RydWN0IGQ0MF9kZXNjKSk7CisJCQlJTklUX0xJU1RfSEVBRCgmZC0+bm9kZSk7CisJCX0KIAl9Ci1vdXQ6Ci0JcmV0dXJuIGRlc2M7CisJcmV0dXJuIGQ7CiB9CiAKIHN0YXRpYyB2b2lkIGQ0MF9kZXNjX2ZyZWUoc3RydWN0IGQ0MF9jaGFuICpkNDBjLCBzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQpCiB7Ci0JaWYgKGQ0MGMtPmZyZWVfbGVuIDwgRDQwX0RFU0NfQ0FDSEVfU0laRSkgewotCQlsaXN0X2FkZF90YWlsKCZkNDBkLT5ub2RlLCAmZDQwYy0+ZnJlZSk7Ci0JCWQ0MGMtPmZyZWVfbGVuKys7Ci0JfSBlbHNlCi0JCWtmcmVlKGQ0MGQpOworCWttZW1fY2FjaGVfZnJlZShkNDBjLT5iYXNlLT5kZXNjX3NsYWIsIGQ0MGQpOwogfQogCiBzdGF0aWMgdm9pZCBkNDBfZGVzY19zdWJtaXQoc3RydWN0IGQ0MF9jaGFuICpkNDBjLCBzdHJ1Y3QgZDQwX2Rlc2MgKmRlc2MpCkBAIC00NTYsMzcgKzQ0NSw0MSBAQAogCiAvKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgbG9naWNhbCBjaGFubmVscyAqLwogCi1zdGF0aWMgaW50IGQ0MF9sY2xhX2lkX2dldChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsCi0JCQkgICBzdHJ1Y3QgZDQwX2xjbGFfcG9vbCAqcG9vbCkKK3N0YXRpYyBpbnQgZDQwX2xjbGFfaWRfZ2V0KHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKIHsKIAlpbnQgc3JjX2lkID0gMDsKIAlpbnQgZHN0X2lkID0gMDsKIAlzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGFfbGlkeF9iYXNlID0KLQkJcG9vbC0+YmFzZSArIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiAxMDI0OworCQlkNDBjLT5iYXNlLT5sY2xhX3Bvb2wuYmFzZSArIGQ0MGMtPnBoeV9jaGFuLT5udW0gKiAxMDI0OwogCWludCBpOwogCWludCBsbGlfcGVyX2xvZyA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoZDQwYy0+bGNsYS5zcmNfaWQgPj0gMCAmJiBkNDBjLT5sY2xhLmRzdF9pZCA+PSAwKQogCQlyZXR1cm4gMDsKIAotCWlmIChwb29sLT5udW1fYmxvY2tzID4gMzIpCisJaWYgKGQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5udW1fYmxvY2tzID4gMzIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrKCZwb29sLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+YmFzZS0+bGNsYV9wb29sLmxvY2ssIGZsYWdzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBwb29sLT5udW1fYmxvY2tzOyBpKyspIHsKLQkJaWYgKCEocG9vbC0+YWxsb2NfbWFwW2Q0MGMtPnBoeV9jaGFuLT5udW1dICYgKDB4MSA8PCBpKSkpIHsKLQkJCXBvb2wtPmFsbG9jX21hcFtkNDBjLT5waHlfY2hhbi0+bnVtXSB8PSAoMHgxIDw8IGkpOworCWZvciAoaSA9IDA7IGkgPCBkNDBjLT5iYXNlLT5sY2xhX3Bvb2wubnVtX2Jsb2NrczsgaSsrKSB7CisJCWlmICghKGQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5hbGxvY19tYXBbZDQwYy0+cGh5X2NoYW4tPm51bV0gJgorCQkgICAgICAoMHgxIDw8IGkpKSkgeworCQkJZDQwYy0+YmFzZS0+bGNsYV9wb29sLmFsbG9jX21hcFtkNDBjLT5waHlfY2hhbi0+bnVtXSB8PQorCQkJCSgweDEgPDwgaSk7CiAJCQlicmVhazsKIAkJfQogCX0KIAlzcmNfaWQgPSBpOwotCWlmIChzcmNfaWQgPj0gcG9vbC0+bnVtX2Jsb2NrcykKKwlpZiAoc3JjX2lkID49IGQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5udW1fYmxvY2tzKQogCQlnb3RvIGVycjsKIAotCWZvciAoOyBpIDwgcG9vbC0+bnVtX2Jsb2NrczsgaSsrKSB7Ci0JCWlmICghKHBvb2wtPmFsbG9jX21hcFtkNDBjLT5waHlfY2hhbi0+bnVtXSAmICgweDEgPDwgaSkpKSB7Ci0JCQlwb29sLT5hbGxvY19tYXBbZDQwYy0+cGh5X2NoYW4tPm51bV0gfD0gKDB4MSA8PCBpKTsKKwlmb3IgKDsgaSA8IGQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5udW1fYmxvY2tzOyBpKyspIHsKKwkJaWYgKCEoZDQwYy0+YmFzZS0+bGNsYV9wb29sLmFsbG9jX21hcFtkNDBjLT5waHlfY2hhbi0+bnVtXSAmCisJCSAgICAgICgweDEgPDwgaSkpKSB7CisJCQlkNDBjLT5iYXNlLT5sY2xhX3Bvb2wuYWxsb2NfbWFwW2Q0MGMtPnBoeV9jaGFuLT5udW1dIHw9CisJCQkJKDB4MSA8PCBpKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNTAwLDI4ICs0OTMsMTMgQEAKIAlkNDBjLT5sY2xhLmRzdCA9IGxjbGFfbGlkeF9iYXNlICsgZHN0X2lkICogbGxpX3Blcl9sb2cgKyAxOwogCWQ0MGMtPmxjbGEuc3JjID0gbGNsYV9saWR4X2Jhc2UgKyBzcmNfaWQgKiBsbGlfcGVyX2xvZyArIDE7CiAKLQotCXNwaW5fdW5sb2NrKCZwb29sLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5iYXNlLT5sY2xhX3Bvb2wubG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogZXJyOgotCXNwaW5fdW5sb2NrKCZwb29sLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5iYXNlLT5sY2xhX3Bvb2wubG9jaywgZmxhZ3MpOwogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCBkNDBfbGNsYV9pZF9wdXQoc3RydWN0IGQ0MF9jaGFuICpkNDBjLAotCQkJICAgIHN0cnVjdCBkNDBfbGNsYV9wb29sICpwb29sLAotCQkJICAgIGludCBpZCkKLXsKLQlpZiAoaWQgPCAwKQotCQlyZXR1cm47Ci0KLQlkNDBjLT5sY2xhLnNyY19pZCA9IC0xOwotCWQ0MGMtPmxjbGEuZHN0X2lkID0gLTE7Ci0KLQlzcGluX2xvY2soJnBvb2wtPmxvY2spOwotCXBvb2wtPmFsbG9jX21hcFtkNDBjLT5waHlfY2hhbi0+bnVtXSAmPSAofigweDEgPDwgaWQpKTsKLQlzcGluX3VubG9jaygmcG9vbC0+bG9jayk7Ci19CiAKIHN0YXRpYyBpbnQgZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywKIAkJCQkgICAgICAgZW51bSBkNDBfY29tbWFuZCBjb21tYW5kKQpAQCAtNTMwLDYgKzUwOCw3IEBACiAJdm9pZCBfX2lvbWVtICphY3RpdmVfcmVnOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHdtYXNrOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmJhc2UtPmV4ZWNtZF9sb2NrLCBmbGFncyk7CiAKQEAgLTU0Nyw3ICs1MjYsOSBAQAogCQkJZ290byBkb25lOwogCX0KIAotCXdyaXRlbChjb21tYW5kIDw8IEQ0MF9DSEFOX1BPUyhkNDBjLT5waHlfY2hhbi0+bnVtKSwgYWN0aXZlX3JlZyk7CisJd21hc2sgPSAweGZmZmZmZmZmICYgfihENDBfQ0hBTl9QT1NfTUFTSyhkNDBjLT5waHlfY2hhbi0+bnVtKSk7CisJd3JpdGVsKHdtYXNrIHwgKGNvbW1hbmQgPDwgRDQwX0NIQU5fUE9TKGQ0MGMtPnBoeV9jaGFuLT5udW0pKSwKKwkgICAgICAgYWN0aXZlX3JlZyk7CiAKIAlpZiAoY29tbWFuZCA9PSBENDBfRE1BX1NVU1BFTkRfUkVRKSB7CiAKQEAgLTU4Niw4ICs1NjcsNyBAQAogc3RhdGljIHZvaWQgZDQwX3Rlcm1fYWxsKHN0cnVjdCBkNDBfY2hhbiAqZDQwYykKIHsKIAlzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MGQ7Ci0Jc3RydWN0IGQ0MF9kZXNjICpkOwotCXN0cnVjdCBkNDBfZGVzYyAqX2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFJlbGVhc2UgYWN0aXZlIGRlc2NyaXB0b3JzICovCiAJd2hpbGUgKChkNDBkID0gZDQwX2ZpcnN0X2FjdGl2ZV9nZXQoZDQwYykpKSB7CkBAIC02MDUsMTkgKzU4NSwxNyBAQAogCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOwogCX0KIAotCS8qIFJlbGVhc2UgY2xpZW50IG93bmVkIGRlc2NyaXB0b3JzICovCi0JaWYgKCFsaXN0X2VtcHR5KCZkNDBjLT5jbGllbnQpKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZCwgX2QsICZkNDBjLT5jbGllbnQsIG5vZGUpIHsKLQkJCWQ0MF9wb29sX2xsaV9mcmVlKGQpOwotCQkJZDQwX2Rlc2NfcmVtb3ZlKGQpOwotCQkJLyogUmV0dXJuIGRlc2MgdG8gZnJlZS1saXN0ICovCi0JCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQ0MGQpOwotCQl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5sb2NrLCBmbGFncyk7CiAKLQlkNDBfbGNsYV9pZF9wdXQoZDQwYywgJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbCwKLQkJCWQ0MGMtPmxjbGEuc3JjX2lkKTsKLQlkNDBfbGNsYV9pZF9wdXQoZDQwYywgJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbCwKLQkJCWQ0MGMtPmxjbGEuZHN0X2lkKTsKKwlkNDBjLT5iYXNlLT5sY2xhX3Bvb2wuYWxsb2NfbWFwW2Q0MGMtPnBoeV9jaGFuLT5udW1dICY9CisJCSh+KDB4MSA8PCBkNDBjLT5sY2xhLmRzdF9pZCkpOworCWQ0MGMtPmJhc2UtPmxjbGFfcG9vbC5hbGxvY19tYXBbZDQwYy0+cGh5X2NoYW4tPm51bV0gJj0KKwkJKH4oMHgxIDw8IGQ0MGMtPmxjbGEuc3JjX2lkKSk7CisKKwlkNDBjLT5sY2xhLnNyY19pZCA9IC0xOworCWQ0MGMtPmxjbGEuZHN0X2lkID0gLTE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5iYXNlLT5sY2xhX3Bvb2wubG9jaywgZmxhZ3MpOwogCiAJZDQwYy0+cGVuZGluZ190eCA9IDA7CiAJZDQwYy0+YnVzeSA9IGZhbHNlOwpAQCAtNjI4LDYgKzYwNiw3IEBACiAJdTMyIHZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogTm90aWNlLCB0aGF0IGRpc2FibGUgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIGNoYW5uZWwgdG8gYmUgc3RvcHBlZCAqLwogCWlmIChkb19lbmFibGUpCiAJCXZhbCA9IEQ0MF9BQ1RJVkFURV9FVkVOVExJTkU7CiAJZWxzZQpAQCAtNzMyLDMxICs3MTEsMzQgQEAKIAogc3RhdGljIHZvaWQgZDQwX2Rlc2NfbG9hZChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMsIHN0cnVjdCBkNDBfZGVzYyAqZDQwZCkKIHsKLQogCWlmIChkNDBkLT5sbGlfcGh5LmRzdCAmJiBkNDBkLT5sbGlfcGh5LnNyYykgewogCQlkNDBfcGh5X2xsaV93cml0ZShkNDBjLT5iYXNlLT52aXJ0YmFzZSwKIAkJCQkgIGQ0MGMtPnBoeV9jaGFuLT5udW0sCiAJCQkJICBkNDBkLT5sbGlfcGh5LmRzdCwKIAkJCQkgIGQ0MGQtPmxsaV9waHkuc3JjKTsKLQkJZDQwZC0+bGxpX3Rjb3VudCA9IGQ0MGQtPmxsaV9sZW47CiAJfSBlbHNlIGlmIChkNDBkLT5sbGlfbG9nLmRzdCAmJiBkNDBkLT5sbGlfbG9nLnNyYykgewotCQl1MzIgbGxpX2xlbjsKIAkJc3RydWN0IGQ0MF9sb2dfbGxpICpzcmMgPSBkNDBkLT5sbGlfbG9nLnNyYzsKIAkJc3RydWN0IGQ0MF9sb2dfbGxpICpkc3QgPSBkNDBkLT5sbGlfbG9nLmRzdDsKKwkJaW50IHM7CiAKLQkJc3JjICs9IGQ0MGQtPmxsaV90Y291bnQ7Ci0JCWRzdCArPSBkNDBkLT5sbGlfdGNvdW50OworCQlzcmMgKz0gZDQwZC0+bGxpX2NvdW50OworCQlkc3QgKz0gZDQwZC0+bGxpX2NvdW50OworCQlzID0gZDQwX2xvZ19sbGlfd3JpdGUoZDQwYy0+bGNwYSwKKwkJCQkgICAgICBkNDBjLT5sY2xhLnNyYywgZDQwYy0+bGNsYS5kc3QsCisJCQkJICAgICAgZHN0LCBzcmMsCisJCQkJICAgICAgZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5sbGlzX3Blcl9sb2cpOwogCi0JCWlmIChkNDBkLT5sbGlfbGVuIDw9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nKQotCQkJbGxpX2xlbiA9IGQ0MGQtPmxsaV9sZW47Ci0JCWVsc2UKLQkJCWxsaV9sZW4gPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZzsKLQkJZDQwZC0+bGxpX3Rjb3VudCArPSBsbGlfbGVuOwotCQlkNDBfbG9nX2xsaV93cml0ZShkNDBjLT5sY3BhLCBkNDBjLT5sY2xhLnNyYywKLQkJCQkgIGQ0MGMtPmxjbGEuZHN0LAotCQkJCSAgZHN0LCBzcmMsCi0JCQkJICBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZyk7CisJCS8qIElmIHMgZXF1YWxzIHRvIHplcm8sIHRoZSBqb2IgaXMgbm90IGxpbmtlZCAqLworCQlpZiAocyA+IDApIHsKKwkJCSh2b2lkKSBkbWFfbWFwX3NpbmdsZShkNDBjLT5iYXNlLT5kZXYsIGQ0MGMtPmxjbGEuc3JjLAorCQkJCQkgICAgICBzICogc2l6ZW9mKHN0cnVjdCBkNDBfbG9nX2xsaSksCisJCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOworCQkJKHZvaWQpIGRtYV9tYXBfc2luZ2xlKGQ0MGMtPmJhc2UtPmRldiwgZDQwYy0+bGNsYS5kc3QsCisJCQkJCSAgICAgIHMgKiBzaXplb2Yoc3RydWN0IGQ0MF9sb2dfbGxpKSwKKwkJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CisJCX0KIAl9CisJZDQwZC0+bGxpX2NvdW50ICs9IGQ0MGQtPmxsaV90eF9sZW47CiB9CiAKIHN0YXRpYyBkbWFfY29va2llX3QgZDQwX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQpAQCAtNzgwLDE4ICs3NjIsMjEgQEAKIAogc3RhdGljIGludCBkNDBfc3RhcnQoc3RydWN0IGQ0MF9jaGFuICpkNDBjKQogewotCWludCBlcnI7CisJaWYgKGQ0MGMtPmJhc2UtPnJldiA9PSAwKSB7CisJCWludCBlcnI7CiAKLQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKLQkJZXJyID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsIEQ0MF9ETUFfU1VTUEVORF9SRVEpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJZDQwX2NvbmZpZ19zZXRfZXZlbnQoZDQwYywgdHJ1ZSk7CisJCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgeworCQkJZXJyID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsCisJCQkJCQkJICBENDBfRE1BX1NVU1BFTkRfUkVRKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQogCX0KIAotCWVyciA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CisJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCQlkNDBfY29uZmlnX3NldF9ldmVudChkNDBjLCB0cnVlKTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZDQwX2Rlc2MgKmQ0MF9xdWV1ZV9zdGFydChzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMpCkBAIC04MzgsNyArODIzLDcgQEAKIAlpZiAoZDQwZCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoZDQwZC0+bGxpX3Rjb3VudCA8IGQ0MGQtPmxsaV9sZW4pIHsKKwlpZiAoZDQwZC0+bGxpX2NvdW50IDwgZDQwZC0+bGxpX2xlbikgewogCiAJCWQ0MF9kZXNjX2xvYWQoZDQwYywgZDQwZCk7CiAJCS8qIFN0YXJ0IGRtYSBqb2IgKi8KQEAgLTg5MSw3ICs4NzYsNiBAQAogCQkvKiBSZXR1cm4gZGVzYyB0byBmcmVlLWxpc3QgKi8KIAkJZDQwX2Rlc2NfZnJlZShkNDBjLCBkNDBkX2Zpbik7CiAJfSBlbHNlIHsKLQkJZDQwX2Rlc2NfcmVzZXQoZDQwZF9maW4pOwogCQlpZiAoIWQ0MGRfZmluLT5pc19pbl9jbGllbnRfbGlzdCkgewogCQkJZDQwX2Rlc2NfcmVtb3ZlKGQ0MGRfZmluKTsKIAkJCWxpc3RfYWRkX3RhaWwoJmQ0MGRfZmluLT5ub2RlLCAmZDQwYy0+Y2xpZW50KTsKQEAgLTk3NSw3ICs5NTksOCBAQAogCQlpZiAoIWlsW3Jvd10uaXNfZXJyb3IpCiAJCQlkbWFfdGNfaGFuZGxlKGQ0MGMpOwogCQllbHNlCi0JCQlkZXZfZXJyKGJhc2UtPmRldiwgIlslc10gSVJRIGNoYW46ICVsZCBvZmZzZXQgJWQgaWR4ICVkXG4iLAorCQkJZGV2X2VycihiYXNlLT5kZXYsCisJCQkJIlslc10gSVJRIGNoYW46ICVsZCBvZmZzZXQgJWQgaWR4ICVkXG4iLAogCQkJCV9fZnVuY19fLCBjaGFuLCBpbFtyb3ddLm9mZnNldCwgaWR4KTsKIAogCQlzcGluX3VubG9jaygmZDQwYy0+bG9jayk7CkBAIC0xMTM0LDcgKzExMTksOCBAQAogCWludCBqOwogCWludCBsb2dfbnVtOwogCWJvb2wgaXNfc3JjOwotCWJvb2wgaXNfbG9nID0gKGQ0MGMtPmRtYV9jZmcuY2hhbm5lbF90eXBlICYgU1RFRE1BNDBfQ0hBTk5FTF9JTl9PUEVSX01PREUpCisJYm9vbCBpc19sb2cgPSAoZDQwYy0+ZG1hX2NmZy5jaGFubmVsX3R5cGUgJgorCQkgICAgICAgU1RFRE1BNDBfQ0hBTk5FTF9JTl9PUEVSX01PREUpCiAJCT09IFNURURNQTQwX0NIQU5ORUxfSU5fTE9HX01PREU7CiAKIApAQCAtMTE2OSw4ICsxMTU1LDEwIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgZDQwYy0+YmFzZS0+bnVtX3BoeV9jaGFuczsgaiArPSA4KSB7CiAJCQkJaW50IHBoeV9udW0gPSBqICArIGV2ZW50X2dyb3VwICogMjsKIAkJCQlmb3IgKGkgPSBwaHlfbnVtOyBpIDwgcGh5X251bSArIDI7IGkrKykgewotCQkJCQlpZiAoZDQwX2FsbG9jX21hc2tfc2V0KCZwaHlzW2ldLCBpc19zcmMsCi0JCQkJCQkJICAgICAgIDAsIGlzX2xvZykpCisJCQkJCWlmIChkNDBfYWxsb2NfbWFza19zZXQoJnBoeXNbaV0sCisJCQkJCQkJICAgICAgIGlzX3NyYywKKwkJCQkJCQkgICAgICAgMCwKKwkJCQkJCQkgICAgICAgaXNfbG9nKSkKIAkJCQkJCWdvdG8gZm91bmRfcGh5OwogCQkJCX0KIAkJCX0KQEAgLTEyMjEsMzAgKzEyMDksNiBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZDQwX2NvbmZpZ19jaGFuKHN0cnVjdCBkNDBfY2hhbiAqZDQwYywKLQkJCSAgIHN0cnVjdCBzdGVkbWE0MF9jaGFuX2NmZyAqaW5mbykKLXsKLQotCS8qIEZpbGwgaW4gYmFzaWMgQ0ZHIHJlZ2lzdGVyIHZhbHVlcyAqLwotCWQ0MF9waHlfY2ZnKCZkNDBjLT5kbWFfY2ZnLCAmZDQwYy0+c3JjX2RlZl9jZmcsCi0JCSAgICAmZDQwYy0+ZHN0X2RlZl9jZmcsIGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKTsKLQotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgewotCQlkNDBfbG9nX2NmZygmZDQwYy0+ZG1hX2NmZywKLQkJCSAgICAmZDQwYy0+bG9nX2RlZi5sY3NwMSwgJmQ0MGMtPmxvZ19kZWYubGNzcDMpOwotCi0JCWlmIChkNDBjLT5kbWFfY2ZnLmRpciA9PSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNKQotCQkJZDQwYy0+bGNwYSA9IGQ0MGMtPmJhc2UtPmxjcGFfYmFzZSArCi0JCQkJZDQwYy0+ZG1hX2NmZy5zcmNfZGV2X3R5cGUgKiAzMjsKLQkJZWxzZQotCQkJZDQwYy0+bGNwYSA9IGQ0MGMtPmJhc2UtPmxjcGFfYmFzZSArCi0JCQkJZDQwYy0+ZG1hX2NmZy5kc3RfZGV2X3R5cGUgKiAzMiArIDE2OwotCX0KLQotCS8qIFdyaXRlIGNoYW5uZWwgY29uZmlndXJhdGlvbiB0byB0aGUgRE1BICovCi0JcmV0dXJuIGQ0MF9jb25maWdfd3JpdGUoZDQwYyk7Ci19Ci0KIHN0YXRpYyBpbnQgZDQwX2NvbmZpZ19tZW1jcHkoc3RydWN0IGQ0MF9jaGFuICpkNDBjKQogewogCWRtYV9jYXBfbWFza190IGNhcCA9IGQ0MGMtPmNoYW4uZGV2aWNlLT5jYXBfbWFzazsKQEAgLTEyNzIsMTMgKzEyMzYsMjUgQEAKIHsKIAogCWludCByZXMgPSAwOwotCXUzMiBldmVudCwgZGlyOworCXUzMiBldmVudDsKIAlzdHJ1Y3QgZDQwX3BoeV9yZXMgKnBoeSA9IGQ0MGMtPnBoeV9jaGFuOwogCWJvb2wgaXNfc3JjOworCXN0cnVjdCBkNDBfZGVzYyAqZDsKKwlzdHJ1Y3QgZDQwX2Rlc2MgKl9kOworCiAKIAkvKiBUZXJtaW5hdGUgYWxsIHF1ZXVlZCBhbmQgYWN0aXZlIHRyYW5zZmVycyAqLwogCWQ0MF90ZXJtX2FsbChkNDBjKTsKIAorCS8qIFJlbGVhc2UgY2xpZW50IG93bmVkIGRlc2NyaXB0b3JzICovCisJaWYgKCFsaXN0X2VtcHR5KCZkNDBjLT5jbGllbnQpKQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZCwgX2QsICZkNDBjLT5jbGllbnQsIG5vZGUpIHsKKwkJCWQ0MF9wb29sX2xsaV9mcmVlKGQpOworCQkJZDQwX2Rlc2NfcmVtb3ZlKGQpOworCQkJLyogUmV0dXJuIGRlc2MgdG8gZnJlZS1saXN0ICovCisJCQlkNDBfZGVzY19mcmVlKGQ0MGMsIGQpOworCQl9CisKIAlpZiAocGh5ID09IE5VTEwpIHsKIAkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwgIlslc10gcGh5ID09IG51bGxcbiIsCiAJCQlfX2Z1bmNfXyk7CkBAIC0xMjkyLDIyICsxMjY4LDEyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCi0JcmVzID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsIEQ0MF9ETUFfU1VTUEVORF9SRVEpOwotCWlmIChyZXMpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwgIlslc10gc3VzcGVuZFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0KIAlpZiAoZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfTUVNX1RPX1BFUklQSCB8fAogCSAgICBkNDBjLT5kbWFfY2ZnLmRpciA9PSBTVEVETUE0MF9NRU1fVE9fTUVNKSB7CiAJCWV2ZW50ID0gRDQwX1RZUEVfVE9fRVZFTlQoZDQwYy0+ZG1hX2NmZy5kc3RfZGV2X3R5cGUpOwotCQlkaXIgPSBENDBfQ0hBTl9SRUdfU0RMTks7CiAJCWlzX3NyYyA9IGZhbHNlOwogCX0gZWxzZSBpZiAoZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfUEVSSVBIX1RPX01FTSkgewogCQlldmVudCA9IEQ0MF9UWVBFX1RPX0VWRU5UKGQ0MGMtPmRtYV9jZmcuc3JjX2Rldl90eXBlKTsKLQkJZGlyID0gRDQwX0NIQU5fUkVHX1NTTE5LOwogCQlpc19zcmMgPSB0cnVlOwogCX0gZWxzZSB7CiAJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCkBAIC0xMzE1LDE2ICsxMjgxLDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgewotCQkvKgotCQkgKiBSZWxlYXNlIGxvZ2ljYWwgY2hhbm5lbCwgZGVhY3RpdmF0ZSB0aGUgZXZlbnQgbGluZSBkdXJpbmcKLQkJICogdGhlIHRpbWUgcGh5c2ljYWwgcmVzIGlzIHN1c3BlbmRlZC4KLQkJICovCi0JCXdyaXRlbCgoRDQwX0RFQUNUSVZBVEVfRVZFTlRMSU5FIDw8IEQ0MF9FVkVOVExJTkVfUE9TKGV2ZW50KSkgJgotCQkgICAgICAgRDQwX0VWRU5UTElORV9NQVNLKGV2ZW50KSwKLQkJICAgICAgIGQ0MGMtPmJhc2UtPnZpcnRiYXNlICsgRDQwX0RSRUdfUENCQVNFICsKLQkJICAgICAgIHBoeS0+bnVtICogRDQwX0RSRUdfUENERUxUQSArIGRpcik7CisJcmVzID0gZDQwX2NoYW5uZWxfZXhlY3V0ZV9jb21tYW5kKGQ0MGMsIEQ0MF9ETUFfU1VTUEVORF9SRVEpOworCWlmIChyZXMpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwgIlslc10gc3VzcGVuZCBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiByZXM7CisJfQogCisJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKSB7CisJCS8qIFJlbGVhc2UgbG9naWNhbCBjaGFubmVsLCBkZWFjdGl2YXRlIHRoZSBldmVudCBsaW5lICovCisKKwkJZDQwX2NvbmZpZ19zZXRfZXZlbnQoZDQwYywgZmFsc2UpOwogCQlkNDBjLT5iYXNlLT5sb29rdXBfbG9nX2NoYW5zW2Q0MGMtPmxvZ19udW1dID0gTlVMTDsKIAogCQkvKgpAQCAtMTM0NSw4ICsxMzEyLDkgQEAKIAkJCX0KIAkJCXJldHVybiAwOwogCQl9Ci0JfSBlbHNlCi0JCWQ0MF9hbGxvY19tYXNrX2ZyZWUocGh5LCBpc19zcmMsIDApOworCX0gZWxzZSB7CisJCSh2b2lkKSBkNDBfYWxsb2NfbWFza19mcmVlKHBoeSwgaXNfc3JjLCAwKTsKKwl9CiAKIAkvKiBSZWxlYXNlIHBoeXNpY2FsIGNoYW5uZWwgKi8KIAlyZXMgPSBkNDBfY2hhbm5lbF9leGVjdXRlX2NvbW1hbmQoZDQwYywgRDQwX0RNQV9TVE9QKTsKQEAgLTEzNjEsOCArMTMyOSw2IEBACiAJZDQwYy0+YmFzZS0+bG9va3VwX3BoeV9jaGFuc1twaHktPm51bV0gPSBOVUxMOwogCiAJcmV0dXJuIDA7Ci0KLQogfQogCiBzdGF0aWMgaW50IGQ0MF9wYXVzZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCkBAIC0xMzcwLDcgKzEzMzYsNiBAQAogCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9CiAJCWNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sIGNoYW4pOwogCWludCByZXM7Ci0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKQEAgLTEzOTcsNyArMTM2Miw2IEBACiAJdm9pZCBfX2lvbWVtICphY3RpdmVfcmVnOwogCXUzMiBzdGF0dXM7CiAJdTMyIGV2ZW50OwotCWludCByZXM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNDE2LDEwICsxMzgwLDYgQEAKIAkJZ290byBfZXhpdDsKIAl9CiAKLQlyZXMgPSBkNDBfY2hhbm5lbF9leGVjdXRlX2NvbW1hbmQoZDQwYywgRDQwX0RNQV9TVVNQRU5EX1JFUSk7Ci0JaWYgKHJlcyAhPSAwKQotCQlnb3RvIF9leGl0OwotCiAJaWYgKGQ0MGMtPmRtYV9jZmcuZGlyID09IFNURURNQTQwX01FTV9UT19QRVJJUEggfHwKIAkgICAgZDQwYy0+ZG1hX2NmZy5kaXIgPT0gU1RFRE1BNDBfTUVNX1RPX01FTSkKIAkJZXZlbnQgPSBENDBfVFlQRV9UT19FVkVOVChkNDBjLT5kbWFfY2ZnLmRzdF9kZXZfdHlwZSk7CkBAIC0xNDM2LDEyICsxMzk2LDYgQEAKIAogCWlmIChzdGF0dXMgIT0gRDQwX0RNQV9SVU4pCiAJCWlzX3BhdXNlZCA9IHRydWU7Ci0KLQkvKiBSZXN1bWUgdGhlIG90aGVyIGxvZ2ljYWwgY2hhbm5lbHMgaWYgYW55ICovCi0JaWYgKGQ0MF9jaGFuX2hhc19ldmVudHMoZDQwYykpCi0JCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLAotCQkJCQkJICBENDBfRE1BX1JVTik7Ci0KIF9leGl0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gaXNfcGF1c2VkOwpAQCAtMTQ2OCwxMyArMTQyMiwxNCBAQAogCXUzMiBudW1fZWx0OwogCiAJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQotCQludW1fZWx0ID0gKHJlYWRsKCZkNDBjLT5sY3BhLT5sY3NwMikgJiAgRDQwX01FTV9MQ1NQMl9FQ05UX01BU0spCisJCW51bV9lbHQgPSAocmVhZGwoJmQ0MGMtPmxjcGEtPmxjc3AyKSAmIEQ0MF9NRU1fTENTUDJfRUNOVF9NQVNLKQogCQkJPj4gRDQwX01FTV9MQ1NQMl9FQ05UX1BPUzsKIAllbHNlCiAJCW51bV9lbHQgPSAocmVhZGwoZDQwYy0+YmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19QQ0JBU0UgKwogCQkJCSBkNDBjLT5waHlfY2hhbi0+bnVtICogRDQwX0RSRUdfUENERUxUQSArCiAJCQkJIEQ0MF9DSEFOX1JFR19TREVMVCkgJgotCQkJICAgRDQwX1NSRUdfRUxFTV9QSFlfRUNOVF9NQVNLKSA+PiBENDBfU1JFR19FTEVNX1BIWV9FQ05UX1BPUzsKKwkJCSAgIEQ0MF9TUkVHX0VMRU1fUEhZX0VDTlRfTUFTSykgPj4KKwkJCUQ0MF9TUkVHX0VMRU1fUEhZX0VDTlRfUE9TOwogCXJldHVybiBudW1fZWx0ICogKDEgPDwgZDQwYy0+ZG1hX2NmZy5kc3RfaW5mby5kYXRhX3dpZHRoKTsKIH0KIApAQCAtMTQ4NywyMCArMTQ0MiwyMSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgewotCQlyZXMgPSBkNDBfY2hhbm5lbF9leGVjdXRlX2NvbW1hbmQoZDQwYywgRDQwX0RNQV9TVVNQRU5EX1JFUSk7Ci0JCWlmIChyZXMpCi0JCQlnb3RvIG91dDsKLQotCQkvKiBJZiBieXRlcyBsZWZ0IHRvIHRyYW5zZmVyIG9yIGxpbmtlZCB0eCByZXN1bWUgam9iICovCi0JCWlmIChkNDBfcmVzaWR1ZShkNDBjKSB8fCBkNDBfdHhfaXNfbGlua2VkKGQ0MGMpKSB7Ci0JCQlkNDBfY29uZmlnX3NldF9ldmVudChkNDBjLCB0cnVlKTsKLQkJCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CisJaWYgKGQ0MGMtPmJhc2UtPnJldiA9PSAwKQorCQlpZiAoZDQwYy0+bG9nX251bSAhPSBENDBfUEhZX0NIQU4pIHsKKwkJCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLAorCQkJCQkJCSAgRDQwX0RNQV9TVVNQRU5EX1JFUSk7CisJCQlnb3RvIG5vX3N1c3BlbmQ7CiAJCX0KLQl9IGVsc2UgaWYgKGQ0MF9yZXNpZHVlKGQ0MGMpIHx8IGQ0MF90eF9pc19saW5rZWQoZDQwYykpCi0JCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CiAKLW91dDoKKwkvKiBJZiBieXRlcyBsZWZ0IHRvIHRyYW5zZmVyIG9yIGxpbmtlZCB0eCByZXN1bWUgam9iICovCisJaWYgKGQ0MF9yZXNpZHVlKGQ0MGMpIHx8IGQ0MF90eF9pc19saW5rZWQoZDQwYykpIHsKKwkJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQorCQkJZDQwX2NvbmZpZ19zZXRfZXZlbnQoZDQwYywgdHJ1ZSk7CisJCXJlcyA9IGQ0MF9jaGFubmVsX2V4ZWN1dGVfY29tbWFuZChkNDBjLCBENDBfRE1BX1JVTik7CisJfQorCitub19zdXNwZW5kOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTUzNCw4ICsxNDkwLDEwIEBACiAJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKSB7CiAJCWQ0MGMtPmxvZ19kZWYubGNzcDEgJj0gfkQ0MF9NRU1fTENTUDFfU0NGR19QU0laRV9NQVNLOwogCQlkNDBjLT5sb2dfZGVmLmxjc3AzICY9IH5ENDBfTUVNX0xDU1AxX1NDRkdfUFNJWkVfTUFTSzsKLQkJZDQwYy0+bG9nX2RlZi5sY3NwMSB8PSBzcmNfcHNpemUgPDwgRDQwX01FTV9MQ1NQMV9TQ0ZHX1BTSVpFX1BPUzsKLQkJZDQwYy0+bG9nX2RlZi5sY3NwMyB8PSBkc3RfcHNpemUgPDwgRDQwX01FTV9MQ1NQMV9TQ0ZHX1BTSVpFX1BPUzsKKwkJZDQwYy0+bG9nX2RlZi5sY3NwMSB8PSBzcmNfcHNpemUgPDwKKwkJCUQ0MF9NRU1fTENTUDFfU0NGR19QU0laRV9QT1M7CisJCWQ0MGMtPmxvZ19kZWYubGNzcDMgfD0gZHN0X3BzaXplIDw8CisJCQlENDBfTUVNX0xDU1AxX1NDRkdfUFNJWkVfUE9TOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE1NjYsMzcgKzE1MjQsNDIgQEAKIAkJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsX2RzdCwKIAkJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsX3NyYywKIAkJCQkJCSAgIHVuc2lnbmVkIGludCBzZ2xfbGVuLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQogewogCWludCByZXM7CiAJc3RydWN0IGQ0MF9kZXNjICpkNDBkOwogCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sCiAJCQkJCSAgICAgY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGc7Ci0JaW50IGxsaV9tYXggPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCSJbJXNdIFVuYWxsb2NhdGVkIGNoYW5uZWwuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiAJZDQwZCA9IGQ0MF9kZXNjX2dldChkNDBjKTsKIAogCWlmIChkNDBkID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCi0JbWVtc2V0KGQ0MGQsIDAsIHNpemVvZihzdHJ1Y3QgZDQwX2Rlc2MpKTsKIAlkNDBkLT5sbGlfbGVuID0gc2dsX2xlbjsKLQotCWQ0MGQtPnR4ZC5mbGFncyA9IGZsYWdzOworCWQ0MGQtPmxsaV90eF9sZW4gPSBkNDBkLT5sbGlfbGVuOworCWQ0MGQtPnR4ZC5mbGFncyA9IGRtYV9mbGFnczsKIAogCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgeworCQlpZiAoZDQwZC0+bGxpX2xlbiA+IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nKQorCQkJZDQwZC0+bGxpX3R4X2xlbiA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nOworCiAJCWlmIChzZ2xfbGVuID4gMSkKIAkJCS8qCiAJCQkgKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBhdmFpbGFibGUgaW4gbGNsYS4gSWYgbm90LAogCQkJICogc3BsaXQgbGlzdCBpbnRvIDEtbGVuZ3RoIGFuZCBydW4gb25seSBpbiBsY3BhCiAJCQkgKiBzcGFjZS4KIAkJCSAqLwotCQkJaWYgKGQ0MF9sY2xhX2lkX2dldChkNDBjLAotCQkJCQkgICAgJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbCkgIT0gMCkKLQkJCQlsbGlfbWF4ID0gMTsKKwkJCWlmIChkNDBfbGNsYV9pZF9nZXQoZDQwYykgIT0gMCkKKwkJCQlkNDBkLT5sbGlfdHhfbGVuID0gMTsKIAogCQlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIHNnbF9sZW4sIHRydWUpIDwgMCkgewogCQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKQEAgLTE2MTAsNyArMTU3Myw4IEBACiAJCQkJCSBkNDBkLT5sbGlfbG9nLnNyYywKIAkJCQkJIGQ0MGMtPmxvZ19kZWYubGNzcDEsCiAJCQkJCSBkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJCSBmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCwgbGxpX21heCwKKwkJCQkJIGRtYV9mbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCwKKwkJCQkJIGQ0MGQtPmxsaV90eF9sZW4sCiAJCQkJCSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZyk7CiAKIAkJKHZvaWQpIGQ0MF9sb2dfc2dfdG9fbGxpKGQ0MGMtPmxjbGEuZHN0X2lkLApAQCAtMTYxOSw3ICsxNTgzLDggQEAKIAkJCQkJIGQ0MGQtPmxsaV9sb2cuZHN0LAogCQkJCQkgZDQwYy0+bG9nX2RlZi5sY3NwMywKIAkJCQkJIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCwKLQkJCQkJIGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBULCBsbGlfbWF4LAorCQkJCQkgZG1hX2ZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBULAorCQkJCQkgZDQwZC0+bGxpX3R4X2xlbiwKIAkJCQkJIGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nKTsKIAogCkBAIC0xNjY0LDExICsxNjI5LDExIEBACiAKIAlkNDBkLT50eGQudHhfc3VibWl0ID0gZDQwX3R4X3N1Ym1pdDsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuICZkNDBkLT50eGQ7CiBlcnI6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHN0ZWRtYTQwX21lbWNweV9zZyk7CkBAIC0xNjk4LDQ2ICsxNjYzLDY2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMgPQogCQljb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGQ0MF9jaGFuLCBjaGFuKTsKLQorCWJvb2wgaXNfZnJlZV9waHk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAogCWQ0MGMtPmNvbXBsZXRlZCA9IGNoYW4tPmNvb2tpZSA9IDE7CiAKIAkvKgogCSAqIElmIG5vIGRtYSBjb25maWd1cmF0aW9uIGlzIHNldCAoY2hhbm5lbF90eXBlID09IDApCi0JICogdXNlIGRlZmF1bHQgY29uZmlndXJhdGlvbgorCSAqIHVzZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKG1lbWNweSkKIAkgKi8KIAlpZiAoZDQwYy0+ZG1hX2NmZy5jaGFubmVsX3R5cGUgPT0gMCkgewogCQllcnIgPSBkNDBfY29uZmlnX21lbWNweShkNDBjKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2FsbG9jOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAorCQkJCSJbJXNdIEZhaWxlZCB0byBjb25maWd1cmUgbWVtY3B5IGNoYW5uZWxcbiIsCisJCQkJX19mdW5jX18pOworCQkJZ290byBmYWlsOworCQl9CiAJfQorCWlzX2ZyZWVfcGh5ID0gKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpOwogCiAJZXJyID0gZDQwX2FsbG9jYXRlX2NoYW5uZWwoZDQwYyk7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAogCQkJIlslc10gRmFpbGVkIHRvIGFsbG9jYXRlIGNoYW5uZWxcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfYWxsb2M7CisJCWdvdG8gZmFpbDsKIAl9CiAKLQllcnIgPSBkNDBfY29uZmlnX2NoYW4oZDQwYywgJmQ0MGMtPmRtYV9jZmcpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKLQkJCSJbJXNdIEZhaWxlZCB0byBjb25maWd1cmUgY2hhbm5lbFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnJfY29uZmlnOworCS8qIEZpbGwgaW4gYmFzaWMgQ0ZHIHJlZ2lzdGVyIHZhbHVlcyAqLworCWQ0MF9waHlfY2ZnKCZkNDBjLT5kbWFfY2ZnLCAmZDQwYy0+c3JjX2RlZl9jZmcsCisJCSAgICAmZDQwYy0+ZHN0X2RlZl9jZmcsIGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKTsKKworCWlmIChkNDBjLT5sb2dfbnVtICE9IEQ0MF9QSFlfQ0hBTikgeworCQlkNDBfbG9nX2NmZygmZDQwYy0+ZG1hX2NmZywKKwkJCSAgICAmZDQwYy0+bG9nX2RlZi5sY3NwMSwgJmQ0MGMtPmxvZ19kZWYubGNzcDMpOworCisJCWlmIChkNDBjLT5kbWFfY2ZnLmRpciA9PSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNKQorCQkJZDQwYy0+bGNwYSA9IGQ0MGMtPmJhc2UtPmxjcGFfYmFzZSArCisJCQkgIGQ0MGMtPmRtYV9jZmcuc3JjX2Rldl90eXBlICogRDQwX0xDUEFfQ0hBTl9TSVpFOworCQllbHNlCisJCQlkNDBjLT5sY3BhID0gZDQwYy0+YmFzZS0+bGNwYV9iYXNlICsKKwkJCSAgZDQwYy0+ZG1hX2NmZy5kc3RfZGV2X3R5cGUgKgorCQkJICBENDBfTENQQV9DSEFOX1NJWkUgKyBENDBfTENQQV9DSEFOX0RTVF9ERUxUQTsKIAl9CiAKKwkvKgorCSAqIE9ubHkgd3JpdGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIHRvIHRoZSBETUEgaWYgdGhlIHBoeXNpY2FsCisJICogcmVzb3VyY2UgaXMgZnJlZS4gSW4gY2FzZSBvZiBtdWx0aXBsZSBsb2dpY2FsIGNoYW5uZWxzCisJICogb24gdGhlIHNhbWUgcGh5c2ljYWwgcmVzb3VyY2UsIG9ubHkgdGhlIGZpcnN0IHdyaXRlIGlzIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoaXNfZnJlZV9waHkpIHsKKwkJZXJyID0gZDQwX2NvbmZpZ193cml0ZShkNDBjKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCQkiWyVzXSBGYWlsZWQgdG8gY29uZmlndXJlIGNoYW5uZWxcbiIsCisJCQkJX19mdW5jX18pOworCQl9CisJfQorZmFpbDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci0KLSBlcnJfY29uZmlnOgotCSh2b2lkKSBkNDBfZnJlZV9kbWEoZDQwYyk7Ci0gZXJyX2FsbG9jOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKLQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAotCQkiWyVzXSBDaGFubmVsIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZDQwX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQpAQCAtMTc0Nyw2ICsxNzMyLDEzIEBACiAJaW50IGVycjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCSJbJXNdIENhbm5vdCBmcmVlIHVuYWxsb2NhdGVkIGNoYW5uZWxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAogCWVyciA9IGQ0MF9mcmVlX2RtYShkNDBjKTsKQEAgLTE3NjEsMTUgKzE3NTMsMjEgQEAKIAkJCQkJCSAgICAgICBkbWFfYWRkcl90IGRzdCwKIAkJCQkJCSAgICAgICBkbWFfYWRkcl90IHNyYywKIAkJCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQorCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQogewogCXN0cnVjdCBkNDBfZGVzYyAqZDQwZDsKIAlzdHJ1Y3QgZDQwX2NoYW4gKmQ0MGMgPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGQ0MF9jaGFuLAogCQkJCQkgICAgIGNoYW4pOwotCXVuc2lnbmVkIGxvbmcgZmxnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+bG9jaywgZmxnKTsKKwlpZiAoZDQwYy0+cGh5X2NoYW4gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkNDBjLT5jaGFuLmRldi0+ZGV2aWNlLAorCQkJIlslc10gQ2hhbm5lbCBpcyBub3QgYWxsb2NhdGVkLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCWQ0MGQgPSBkNDBfZGVzY19nZXQoZDQwYyk7CiAKIAlpZiAoZDQwZCA9PSBOVUxMKSB7CkBAIC0xNzc4LDkgKzE3NzYsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQltZW1zZXQoZDQwZCwgMCwgc2l6ZW9mKHN0cnVjdCBkNDBfZGVzYykpOwotCi0JZDQwZC0+dHhkLmZsYWdzID0gZmxhZ3M7CisJZDQwZC0+dHhkLmZsYWdzID0gZG1hX2ZsYWdzOwogCiAJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZDQwZC0+dHhkLCBjaGFuKTsKIApAQCAtMTc5NCw2ICsxNzkwLDcgQEAKIAkJCWdvdG8gZXJyOwogCQl9CiAJCWQ0MGQtPmxsaV9sZW4gPSAxOworCQlkNDBkLT5sbGlfdHhfbGVuID0gMTsKIAogCQlkNDBfbG9nX2ZpbGxfbGxpKGQ0MGQtPmxsaV9sb2cuc3JjLAogCQkJCSBzcmMsCkBAIC0xODAxLDcgKzE3OTgsNyBAQAogCQkJCSAwLAogCQkJCSBkNDBjLT5sb2dfZGVmLmxjc3AxLAogCQkJCSBkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJIHRydWUsIHRydWUpOworCQkJCSBmYWxzZSwgdHJ1ZSk7CiAKIAkJZDQwX2xvZ19maWxsX2xsaShkNDBkLT5sbGlfbG9nLmRzdCwKIAkJCQkgZHN0LApAQCAtMTg0OCw3ICsxODQ1LDcgQEAKIAkJCQkgICAgICBkNDBkLT5sbGlfcG9vbC5zaXplLCBETUFfVE9fREVWSUNFKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkNDBjLT5sb2NrLCBmbGcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gJmQ0MGQtPnR4ZDsKIAogZXJyX2ZpbGxfbGxpOgpAQCAtMTg1Niw3ICsxODUzLDcgQEAKIAkJIlslc10gRmFpbGVkIGZpbGxpbmcgaW4gUEhZIExMSVxuIiwgX19mdW5jX18pOwogCWQ0MF9wb29sX2xsaV9mcmVlKGQ0MGQpOwogZXJyOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xODY1LDExICsxODYyLDEwIEBACiAJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAogCQkJCSB1bnNpZ25lZCBpbnQgc2dfbGVuLAogCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCi0JCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJIHVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzKQogewogCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSAwOwogCWludCB0b3RhbF9zaXplOwotCWludCBsbGlfbWF4ID0gZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5sbGlzX3Blcl9sb2c7CiAKIAlpZiAoZDQwX3Bvb2xfbGxpX2FsbG9jKGQ0MGQsIHNnX2xlbiwgdHJ1ZSkgPCAwKSB7CiAJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCkBAIC0xODc4LDcgKzE4NzQsMTAgQEAKIAl9CiAKIAlkNDBkLT5sbGlfbGVuID0gc2dfbGVuOwotCWQ0MGQtPmxsaV90Y291bnQgPSAwOworCWlmIChkNDBkLT5sbGlfbGVuIDw9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+bGxpc19wZXJfbG9nKQorCQlkNDBkLT5sbGlfdHhfbGVuID0gZDQwZC0+bGxpX2xlbjsKKwllbHNlCisJCWQ0MGQtPmxsaV90eF9sZW4gPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZzsKIAogCWlmIChzZ19sZW4gPiAxKQogCQkvKgpAQCAtMTg4NiwzNSArMTg4NSwzNCBAQAogCQkgKiBJZiBub3QsIHNwbGl0IGxpc3QgaW50byAxLWxlbmd0aCBhbmQgcnVuIG9ubHkKIAkJICogaW4gbGNwYSBzcGFjZS4KIAkJICovCi0JCWlmIChkNDBfbGNsYV9pZF9nZXQoZDQwYywgJmQ0MGMtPmJhc2UtPmxjbGFfcG9vbCkgIT0gMCkKLQkJCWxsaV9tYXggPSAxOworCQlpZiAoZDQwX2xjbGFfaWRfZ2V0KGQ0MGMpICE9IDApCisJCQlkNDBkLT5sbGlfdHhfbGVuID0gMTsKIAotCWlmIChkaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSB7Ci0JCWRldl9hZGRyID0gZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5kZXZfcnhbZDQwYy0+ZG1hX2NmZy5zcmNfZGV2X3R5cGVdOwotCQl0b3RhbF9zaXplID0gZDQwX2xvZ19zZ190b19kZXYoJmQ0MGMtPmxjbGEsCi0JCQkJCSAgICAgICBzZ2wsIHNnX2xlbiwKLQkJCQkJICAgICAgICZkNDBkLT5sbGlfbG9nLAotCQkJCQkgICAgICAgJmQ0MGMtPmxvZ19kZWYsCi0JCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCi0JCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLmRzdF9pbmZvLmRhdGFfd2lkdGgsCi0JCQkJCSAgICAgICBkaXJlY3Rpb24sCi0JCQkJCSAgICAgICBmbGFncyAmIERNQV9QUkVQX0lOVEVSUlVQVCwKLQkJCQkJICAgICAgIGRldl9hZGRyLCBsbGlfbWF4LAotCQkJCQkgICAgICAgZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5sbGlzX3Blcl9sb2cpOwotCX0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKLQkJZGV2X2FkZHIgPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl90eFtkNDBjLT5kbWFfY2ZnLmRzdF9kZXZfdHlwZV07Ci0JCXRvdGFsX3NpemUgPSBkNDBfbG9nX3NnX3RvX2RldigmZDQwYy0+bGNsYSwKLQkJCQkJICAgICAgIHNnbCwgc2dfbGVuLAotCQkJCQkgICAgICAgJmQ0MGQtPmxsaV9sb2csCi0JCQkJCSAgICAgICAmZDQwYy0+bG9nX2RlZiwKLQkJCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuc3JjX2luZm8uZGF0YV93aWR0aCwKLQkJCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCwKLQkJCQkJICAgICAgIGRpcmVjdGlvbiwKLQkJCQkJICAgICAgIGZsYWdzICYgRE1BX1BSRVBfSU5URVJSVVBULAotCQkJCQkgICAgICAgZGV2X2FkZHIsIGxsaV9tYXgsCi0JCQkJCSAgICAgICBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZyk7Ci0JfSBlbHNlCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCWlmIChkNDBjLT5ydW50aW1lX2FkZHIpCisJCQlkZXZfYWRkciA9IGQ0MGMtPnJ1bnRpbWVfYWRkcjsKKwkJZWxzZQorCQkJZGV2X2FkZHIgPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl9yeFtkNDBjLT5kbWFfY2ZnLnNyY19kZXZfdHlwZV07CisJZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCWlmIChkNDBjLT5ydW50aW1lX2FkZHIpCisJCQlkZXZfYWRkciA9IGQ0MGMtPnJ1bnRpbWVfYWRkcjsKKwkJZWxzZQorCQkJZGV2X2FkZHIgPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl90eFtkNDBjLT5kbWFfY2ZnLmRzdF9kZXZfdHlwZV07CisKKwllbHNlCiAJCXJldHVybiAtRUlOVkFMOworCisJdG90YWxfc2l6ZSA9IGQ0MF9sb2dfc2dfdG9fZGV2KCZkNDBjLT5sY2xhLAorCQkJCSAgICAgICBzZ2wsIHNnX2xlbiwKKwkJCQkgICAgICAgJmQ0MGQtPmxsaV9sb2csCisJCQkJICAgICAgICZkNDBjLT5sb2dfZGVmLAorCQkJCSAgICAgICBkNDBjLT5kbWFfY2ZnLnNyY19pbmZvLmRhdGFfd2lkdGgsCisJCQkJICAgICAgIGQ0MGMtPmRtYV9jZmcuZHN0X2luZm8uZGF0YV93aWR0aCwKKwkJCQkgICAgICAgZGlyZWN0aW9uLAorCQkJCSAgICAgICBkbWFfZmxhZ3MgJiBETUFfUFJFUF9JTlRFUlJVUFQsCisJCQkJICAgICAgIGRldl9hZGRyLCBkNDBkLT5sbGlfdHhfbGVuLAorCQkJCSAgICAgICBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmxsaXNfcGVyX2xvZyk7CisKIAlpZiAodG90YWxfc2l6ZSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTI2LDcgKzE5MjQsNyBAQAogCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKIAkJCQkgdW5zaWduZWQgaW50IHNnbF9sZW4sCiAJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCQkgdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MpCiB7CiAJZG1hX2FkZHJfdCBzcmNfZGV2X2FkZHI7CiAJZG1hX2FkZHJfdCBkc3RfZGV2X2FkZHI7CkBAIC0xOTM5LDEzICsxOTM3LDE5IEBACiAJfQogCiAJZDQwZC0+bGxpX2xlbiA9IHNnbF9sZW47Ci0JZDQwZC0+bGxpX3Rjb3VudCA9IDA7CisJZDQwZC0+bGxpX3R4X2xlbiA9IHNnbF9sZW47CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgewogCQlkc3RfZGV2X2FkZHIgPSAwOwotCQlzcmNfZGV2X2FkZHIgPSBkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl9yeFtkNDBjLT5kbWFfY2ZnLnNyY19kZXZfdHlwZV07CisJCWlmIChkNDBjLT5ydW50aW1lX2FkZHIpCisJCQlzcmNfZGV2X2FkZHIgPSBkNDBjLT5ydW50aW1lX2FkZHI7CisJCWVsc2UKKwkJCXNyY19kZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3J4W2Q0MGMtPmRtYV9jZmcuc3JjX2Rldl90eXBlXTsKIAl9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7Ci0JCWRzdF9kZXZfYWRkciA9IGQ0MGMtPmJhc2UtPnBsYXRfZGF0YS0+ZGV2X3R4W2Q0MGMtPmRtYV9jZmcuZHN0X2Rldl90eXBlXTsKKwkJaWYgKGQ0MGMtPnJ1bnRpbWVfYWRkcikKKwkJCWRzdF9kZXZfYWRkciA9IGQ0MGMtPnJ1bnRpbWVfYWRkcjsKKwkJZWxzZQorCQkJZHN0X2Rldl9hZGRyID0gZDQwYy0+YmFzZS0+cGxhdF9kYXRhLT5kZXZfdHhbZDQwYy0+ZG1hX2NmZy5kc3RfZGV2X3R5cGVdOwogCQlzcmNfZGV2X2FkZHIgPSAwOwogCX0gZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5ODMsMzQgKzE5ODcsMzggQEAKIAkJCQkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCiAJCQkJCQkJIHVuc2lnbmVkIGludCBzZ19sZW4sCiAJCQkJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCQkJCQkgdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MpCiB7CiAJc3RydWN0IGQ0MF9kZXNjICpkNDBkOwogCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sCiAJCQkJCSAgICAgY2hhbik7Ci0JdW5zaWduZWQgbG9uZyBmbGc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCisJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCSJbJXNdIENhbm5vdCBwcmVwYXJlIHVuYWxsb2NhdGVkIGNoYW5uZWxcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCiAJaWYgKGQ0MGMtPmRtYV9jZmcucHJlX3RyYW5zZmVyKQogCQlkNDBjLT5kbWFfY2ZnLnByZV90cmFuc2ZlcihjaGFuLAogCQkJCQkgICBkNDBjLT5kbWFfY2ZnLnByZV90cmFuc2Zlcl9kYXRhLAogCQkJCQkgICBzZ19kbWFfbGVuKHNnbCkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmQ0MGMtPmxvY2ssIGZsYWdzKTsKIAlkNDBkID0gZDQwX2Rlc2NfZ2V0KGQ0MGMpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmQ0MGMtPmxvY2ssIGZsZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGQ0MGQgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQltZW1zZXQoZDQwZCwgMCwgc2l6ZW9mKHN0cnVjdCBkNDBfZGVzYykpOwotCiAJaWYgKGQ0MGMtPmxvZ19udW0gIT0gRDQwX1BIWV9DSEFOKQogCQllcnIgPSBkNDBfcHJlcF9zbGF2ZV9zZ19sb2coZDQwZCwgZDQwYywgc2dsLCBzZ19sZW4sCi0JCQkJCSAgICBkaXJlY3Rpb24sIGZsYWdzKTsKKwkJCQkJICAgIGRpcmVjdGlvbiwgZG1hX2ZsYWdzKTsKIAllbHNlCiAJCWVyciA9IGQ0MF9wcmVwX3NsYXZlX3NnX3BoeShkNDBkLCBkNDBjLCBzZ2wsIHNnX2xlbiwKLQkJCQkJICAgIGRpcmVjdGlvbiwgZmxhZ3MpOworCQkJCQkgICAgZGlyZWN0aW9uLCBkbWFfZmxhZ3MpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKIAkJCSJbJXNdIEZhaWxlZCB0byBwcmVwYXJlICVzIHNsYXZlIHNnIGpvYjogJWRcbiIsCkBAIC0yMDE5LDcgKzIwMjcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlkNDBkLT50eGQuZmxhZ3MgPSBmbGFnczsKKwlkNDBkLT50eGQuZmxhZ3MgPSBkbWFfZmxhZ3M7CiAKIAlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkNDBkLT50eGQsIGNoYW4pOwogCkBAIC0yMDM3LDYgKzIwNDUsMTMgQEAKIAlkbWFfY29va2llX3QgbGFzdF9jb21wbGV0ZTsKIAlpbnQgcmV0OwogCisJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCSJbJXNdIENhbm5vdCByZWFkIHN0YXR1cyBvZiB1bmFsbG9jYXRlZCBjaGFubmVsXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlsYXN0X2NvbXBsZXRlID0gZDQwYy0+Y29tcGxldGVkOwogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIApAQCAtMjA1Niw2ICsyMDcxLDEyIEBACiAJc3RydWN0IGQ0MF9jaGFuICpkNDBjID0gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBkNDBfY2hhbiwgY2hhbik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChkNDBjLT5waHlfY2hhbiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmQ0MGMtPmNoYW4uZGV2LT5kZXZpY2UsCisJCQkiWyVzXSBDaGFubmVsIGlzIG5vdCBhbGxvY2F0ZWQhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogCiAJLyogQnVzeSBtZWFucyB0aGF0IHBlbmRpbmcgam9icyBhcmUgYWxyZWFkeSBiZWluZyBwcm9jZXNzZWQgKi8KQEAgLTIwNjUsMTIgKzIwODYsMTI5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwogfQogCisvKiBSdW50aW1lIHJlY29uZmlndXJhdGlvbiBleHRlbnNpb24gKi8KK3N0YXRpYyB2b2lkIGQ0MF9zZXRfcnVudGltZV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjb25maWcpCit7CisJc3RydWN0IGQ0MF9jaGFuICpkNDBjID0gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBkNDBfY2hhbiwgY2hhbik7CisJc3RydWN0IHN0ZWRtYTQwX2NoYW5fY2ZnICpjZmcgPSAmZDQwYy0+ZG1hX2NmZzsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBjb25maWdfYWRkcl93aWR0aDsKKwlkbWFfYWRkcl90IGNvbmZpZ19hZGRyOworCXUzMiBjb25maWdfbWF4YnVyc3Q7CisJZW51bSBzdGVkbWE0MF9wZXJpcGhfZGF0YV93aWR0aCBhZGRyX3dpZHRoOworCWludCBwc2l6ZTsKKworCWlmIChjb25maWctPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKKwkJZG1hX2FkZHJfdCBkZXZfYWRkcl9yeCA9CisJCQlkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl9yeFtjZmctPnNyY19kZXZfdHlwZV07CisKKwkJY29uZmlnX2FkZHIgPSBjb25maWctPnNyY19hZGRyOworCQlpZiAoZGV2X2FkZHJfcngpCisJCQlkZXZfZGJnKGQ0MGMtPmJhc2UtPmRldiwKKwkJCQkiY2hhbm5lbCBoYXMgYSBwcmUtd2lyZWQgUlggYWRkcmVzcyAlMDh4ICIKKwkJCQkib3ZlcnJpZGluZyB3aXRoICUwOHhcbiIsCisJCQkJZGV2X2FkZHJfcngsIGNvbmZpZ19hZGRyKTsKKwkJaWYgKGNmZy0+ZGlyICE9IFNURURNQTQwX1BFUklQSF9UT19NRU0pCisJCQlkZXZfZGJnKGQ0MGMtPmJhc2UtPmRldiwKKwkJCQkiY2hhbm5lbCB3YXMgbm90IGNvbmZpZ3VyZWQgZm9yIHBlcmlwaGVyYWwgIgorCQkJCSJ0byBtZW1vcnkgdHJhbnNmZXIgKCVkKSBvdmVycmlkaW5nXG4iLAorCQkJCWNmZy0+ZGlyKTsKKwkJY2ZnLT5kaXIgPSBTVEVETUE0MF9QRVJJUEhfVE9fTUVNOworCisJCWNvbmZpZ19hZGRyX3dpZHRoID0gY29uZmlnLT5zcmNfYWRkcl93aWR0aDsKKwkJY29uZmlnX21heGJ1cnN0ID0gY29uZmlnLT5zcmNfbWF4YnVyc3Q7CisKKwl9IGVsc2UgaWYgKGNvbmZpZy0+ZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKKwkJZG1hX2FkZHJfdCBkZXZfYWRkcl90eCA9CisJCQlkNDBjLT5iYXNlLT5wbGF0X2RhdGEtPmRldl90eFtjZmctPmRzdF9kZXZfdHlwZV07CisKKwkJY29uZmlnX2FkZHIgPSBjb25maWctPmRzdF9hZGRyOworCQlpZiAoZGV2X2FkZHJfdHgpCisJCQlkZXZfZGJnKGQ0MGMtPmJhc2UtPmRldiwKKwkJCQkiY2hhbm5lbCBoYXMgYSBwcmUtd2lyZWQgVFggYWRkcmVzcyAlMDh4ICIKKwkJCQkib3ZlcnJpZGluZyB3aXRoICUwOHhcbiIsCisJCQkJZGV2X2FkZHJfdHgsIGNvbmZpZ19hZGRyKTsKKwkJaWYgKGNmZy0+ZGlyICE9IFNURURNQTQwX01FTV9UT19QRVJJUEgpCisJCQlkZXZfZGJnKGQ0MGMtPmJhc2UtPmRldiwKKwkJCQkiY2hhbm5lbCB3YXMgbm90IGNvbmZpZ3VyZWQgZm9yIG1lbW9yeSAiCisJCQkJInRvIHBlcmlwaGVyYWwgdHJhbnNmZXIgKCVkKSBvdmVycmlkaW5nXG4iLAorCQkJCWNmZy0+ZGlyKTsKKwkJY2ZnLT5kaXIgPSBTVEVETUE0MF9NRU1fVE9fUEVSSVBIOworCisJCWNvbmZpZ19hZGRyX3dpZHRoID0gY29uZmlnLT5kc3RfYWRkcl93aWR0aDsKKwkJY29uZmlnX21heGJ1cnN0ID0gY29uZmlnLT5kc3RfbWF4YnVyc3Q7CisKKwl9IGVsc2UgeworCQlkZXZfZXJyKGQ0MGMtPmJhc2UtPmRldiwKKwkJCSJ1bnJlY29nbml6ZWQgY2hhbm5lbCBkaXJlY3Rpb24gJWRcbiIsCisJCQljb25maWctPmRpcmVjdGlvbik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNvbmZpZ19hZGRyX3dpZHRoKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFOgorCQlhZGRyX3dpZHRoID0gU1RFRE1BNDBfQllURV9XSURUSDsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJYWRkcl93aWR0aCA9IFNURURNQTQwX0hBTEZXT1JEX1dJRFRIOworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTOgorCQlhZGRyX3dpZHRoID0gU1RFRE1BNDBfV09SRF9XSURUSDsKKwkJYnJlYWs7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfOF9CWVRFUzoKKwkJYWRkcl93aWR0aCA9IFNURURNQTQwX0RPVUJMRVdPUkRfV0lEVEg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZDQwYy0+YmFzZS0+ZGV2LAorCQkJImlsbGVnYWwgcGVyaXBoZXJhbCBhZGRyZXNzIHdpZHRoICIKKwkJCSJyZXF1ZXN0ZWQgKCVkKVxuIiwKKwkJCWNvbmZpZy0+c3JjX2FkZHJfd2lkdGgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbmZpZ19tYXhidXJzdCA+PSAxNikKKwkJcHNpemUgPSBTVEVETUE0MF9QU0laRV9MT0dfMTY7CisJZWxzZSBpZiAoY29uZmlnX21heGJ1cnN0ID49IDgpCisJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzg7CisJZWxzZSBpZiAoY29uZmlnX21heGJ1cnN0ID49IDQpCisJCXBzaXplID0gU1RFRE1BNDBfUFNJWkVfTE9HXzQ7CisJZWxzZQorCQlwc2l6ZSA9IFNURURNQTQwX1BTSVpFX0xPR18xOworCisJLyogU2V0IHVwIGFsbCB0aGUgZW5kcG9pbnQgY29uZmlncyAqLworCWNmZy0+c3JjX2luZm8uZGF0YV93aWR0aCA9IGFkZHJfd2lkdGg7CisJY2ZnLT5zcmNfaW5mby5wc2l6ZSA9IHBzaXplOworCWNmZy0+c3JjX2luZm8uZW5kaWFuZXNzID0gU1RFRE1BNDBfTElUVExFX0VORElBTjsKKwljZmctPnNyY19pbmZvLmZsb3dfY3RybCA9IFNURURNQTQwX05PX0ZMT1dfQ1RSTDsKKwljZmctPmRzdF9pbmZvLmRhdGFfd2lkdGggPSBhZGRyX3dpZHRoOworCWNmZy0+ZHN0X2luZm8ucHNpemUgPSBwc2l6ZTsKKwljZmctPmRzdF9pbmZvLmVuZGlhbmVzcyA9IFNURURNQTQwX0xJVFRMRV9FTkRJQU47CisJY2ZnLT5kc3RfaW5mby5mbG93X2N0cmwgPSBTVEVETUE0MF9OT19GTE9XX0NUUkw7CisKKwkvKiBUaGVzZSBzZXR0aW5ncyB3aWxsIHRha2UgcHJlY2VkZW5jZSBsYXRlciAqLworCWQ0MGMtPnJ1bnRpbWVfYWRkciA9IGNvbmZpZ19hZGRyOworCWQ0MGMtPnJ1bnRpbWVfZGlyZWN0aW9uID0gY29uZmlnLT5kaXJlY3Rpb247CisJZGV2X2RiZyhkNDBjLT5iYXNlLT5kZXYsCisJCSJjb25maWd1cmVkIGNoYW5uZWwgJXMgZm9yICVzLCBkYXRhIHdpZHRoICVkLCAiCisJCSJtYXhidXJzdCAlZCBieXRlcywgTEUsIG5vIGZsb3cgY29udHJvbFxuIiwKKwkJZG1hX2NoYW5fbmFtZShjaGFuKSwKKwkJKGNvbmZpZy0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgPyAiUlgiIDogIlRYIiwKKwkJY29uZmlnX2FkZHJfd2lkdGgsCisJCWNvbmZpZ19tYXhidXJzdCk7Cit9CisKIHN0YXRpYyBpbnQgZDQwX2NvbnRyb2woc3RydWN0IGRtYV9jaGFuICpjaGFuLCBlbnVtIGRtYV9jdHJsX2NtZCBjbWQsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBkNDBfY2hhbiAqZDQwYyA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgZDQwX2NoYW4sIGNoYW4pOwogCisJaWYgKGQ0MGMtPnBoeV9jaGFuID09IE5VTEwpIHsKKwkJZGV2X2VycigmZDQwYy0+Y2hhbi5kZXYtPmRldmljZSwKKwkJCSJbJXNdIENoYW5uZWwgaXMgbm90IGFsbG9jYXRlZCFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIERNQV9URVJNSU5BVEVfQUxMOgogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZDQwYy0+bG9jaywgZmxhZ3MpOwpAQCAtMjA4MSw2ICsyMjE5LDEyIEBACiAJCXJldHVybiBkNDBfcGF1c2UoY2hhbik7CiAJY2FzZSBETUFfUkVTVU1FOgogCQlyZXR1cm4gZDQwX3Jlc3VtZShjaGFuKTsKKwljYXNlIERNQV9TTEFWRV9DT05GSUc6CisJCWQ0MF9zZXRfcnVudGltZV9jb25maWcoY2hhbiwKKwkJCShzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAqKSBhcmcpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAkvKiBPdGhlciBjb21tYW5kcyBhcmUgdW5pbXBsZW1lbnRlZCAqLwpAQCAtMjExMSwxMyArMjI1NSwxMCBAQAogCiAJCWQ0MGMtPmxvZ19udW0gPSBENDBfUEhZX0NIQU47CiAKLQkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPmZyZWUpOwogCQlJTklUX0xJU1RfSEVBRCgmZDQwYy0+YWN0aXZlKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPnF1ZXVlKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmQ0MGMtPmNsaWVudCk7CiAKLQkJZDQwYy0+ZnJlZV9sZW4gPSAwOwotCiAJCXRhc2tsZXRfaW5pdCgmZDQwYy0+dGFza2xldCwgZG1hX3Rhc2tsZXQsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nKSBkNDBjKTsKIApAQCAtMjI0Myw2ICsyMzg0LDE0IEBACiAJCX0KIAkJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPnBoeV9yZXNbaV0ubG9jayk7CiAJfQorCisJLyogTWFyayBkaXNhYmxlZCBjaGFubmVscyBhcyBvY2N1cGllZCAqLworCWZvciAoaSA9IDA7IGJhc2UtPnBsYXRfZGF0YS0+ZGlzYWJsZWRfY2hhbm5lbHNbaV0gIT0gLTE7IGkrKykgeworCQkJYmFzZS0+cGh5X3Jlc1tpXS5hbGxvY2F0ZWRfc3JjID0gRDQwX0FMTE9DX1BIWTsKKwkJCWJhc2UtPnBoeV9yZXNbaV0uYWxsb2NhdGVkX2RzdCA9IEQ0MF9BTExPQ19QSFk7CisJCQludW1fcGh5X2NoYW5zX2F2YWlsLS07CisJfQorCiAJZGV2X2luZm8oYmFzZS0+ZGV2LCAiJWQgb2YgJWQgcGh5c2ljYWwgRE1BIGNoYW5uZWxzIGF2YWlsYWJsZVxuIiwKIAkJIG51bV9waHlfY2hhbnNfYXZhaWwsIGJhc2UtPm51bV9waHlfY2hhbnMpOwogCkBAIC0yMjkxLDYgKzI0NDAsNyBAQAogCWludCBudW1fbG9nX2NoYW5zID0gMDsKIAlpbnQgbnVtX3BoeV9jaGFuczsKIAlpbnQgaTsKKwl1MzIgdmFsOwogCiAJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIApAQCAtMjMyOSwxMiArMjQ3OSwxMyBAQAogCQl9CiAJfQogCi0JaSA9IHJlYWRsKHZpcnRiYXNlICsgRDQwX0RSRUdfUEVSSVBISUQyKTsKKwkvKiBHZXQgc2lsaWNvbiByZXZpc2lvbiAqLworCXZhbCA9IHJlYWRsKHZpcnRiYXNlICsgRDQwX0RSRUdfUEVSSVBISUQyKTsKIAotCWlmICgoaSAmIDB4ZikgIT0gRDQwX1BFUklQSElEMl9ERVNJR05FUikgeworCWlmICgodmFsICYgMHhmKSAhPSBENDBfUEVSSVBISUQyX0RFU0lHTkVSKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCSJbJXNdIFVua25vd24gZGVzaWduZXIhIEdvdCAleCB3YW50ZWQgJXhcbiIsCi0JCQlfX2Z1bmNfXywgaSAmIDB4ZiwgRDQwX1BFUklQSElEMl9ERVNJR05FUik7CisJCQlfX2Z1bmNfXywgdmFsICYgMHhmLCBENDBfUEVSSVBISUQyX0RFU0lHTkVSKTsKIAkJZ290byBmYWlsdXJlOwogCX0KIApAQCAtMjM0Miw3ICsyNDkzLDcgQEAKIAludW1fcGh5X2NoYW5zID0gNCAqIChyZWFkbCh2aXJ0YmFzZSArIEQ0MF9EUkVHX0lDRkcpICYgMHg3KSArIDQ7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiaGFyZHdhcmUgcmV2aXNpb246ICVkIEAgMHgleFxuIiwKLQkJIChpID4+IDQpICYgMHhmLCByZXMtPnN0YXJ0KTsKKwkJICh2YWwgPj4gNCkgJiAweGYsIHJlcy0+c3RhcnQpOwogCiAJcGxhdF9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKQEAgLTIzNjQsNiArMjUxNSw3IEBACiAJCWdvdG8gZmFpbHVyZTsKIAl9CiAKKwliYXNlLT5yZXYgPSAodmFsID4+IDQpICYgMHhmOwogCWJhc2UtPmNsayA9IGNsazsKIAliYXNlLT5udW1fcGh5X2NoYW5zID0gbnVtX3BoeV9jaGFuczsKIAliYXNlLT5udW1fbG9nX2NoYW5zID0gbnVtX2xvZ19jaGFuczsKQEAgLTI0MDIsNiArMjU1NCwxMiBAQAogCWlmICghYmFzZS0+bGNsYV9wb29sLmFsbG9jX21hcCkKIAkJZ290byBmYWlsdXJlOwogCisJYmFzZS0+ZGVzY19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoRDQwX05BTUUsIHNpemVvZihzdHJ1Y3QgZDQwX2Rlc2MpLAorCQkJCQkgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkgICAgTlVMTCk7CisJaWYgKGJhc2UtPmRlc2Nfc2xhYiA9PSBOVUxMKQorCQlnb3RvIGZhaWx1cmU7CisKIAlyZXR1cm4gYmFzZTsKIAogZmFpbHVyZToKQEAgLTI0OTUsNiArMjY1Myw3OCBAQAogCiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IGQ0MF9sY2xhX2FsbG9jYXRlKHN0cnVjdCBkNDBfYmFzZSAqYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nICpwYWdlX2xpc3Q7CisJaW50IGksIGo7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIFRoaXMgaXMgc29tZXdoYXQgdWdseS4gV2UgbmVlZCA4MTkyIGJ5dGVzIHRoYXQgYXJlIDE4IGJpdCBhbGlnbmVkLAorCSAqIFRvIGZ1bGwgZmlsbCB0aGlzIGhhcmR3YXJlIHJlcXVpcmVtZW50IHdpdGhvdXQgd2FzdGluZyAyNTYga2IKKwkgKiB3ZSBhbGxvY2F0ZSBwYWdlcyB1bnRpbCB3ZSBnZXQgYW4gYWxpZ25lZCBvbmUuCisJICovCisJcGFnZV9saXN0ID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBNQVhfTENMQV9BTExPQ19BVFRFTVBUUywKKwkJCSAgICBHRlBfS0VSTkVMKTsKKworCWlmICghcGFnZV9saXN0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwkvKiBDYWxjdWxhdGluZyBob3cgbWFueSBwYWdlcyB0aGF0IGFyZSByZXF1aXJlZCAqLworCWJhc2UtPmxjbGFfcG9vbC5wYWdlcyA9IFNaXzFLICogYmFzZS0+bnVtX3BoeV9jaGFucyAvIFBBR0VfU0laRTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTENMQV9BTExPQ19BVFRFTVBUUzsgaSsrKSB7CisJCXBhZ2VfbGlzdFtpXSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKKwkJCQkJCWJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisJCWlmICghcGFnZV9saXN0W2ldKSB7CisKKwkJCWRldl9lcnIoYmFzZS0+ZGV2LAorCQkJCSJbJXNdIEZhaWxlZCB0byBhbGxvY2F0ZSAlZCBwYWdlcy5cbiIsCisJCQkJX19mdW5jX18sIGJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJZnJlZV9wYWdlcyhwYWdlX2xpc3Rbal0sIGJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisJCQlnb3RvIGZhaWx1cmU7CisJCX0KKworCQlpZiAoKHZpcnRfdG9fcGh5cygodm9pZCAqKXBhZ2VfbGlzdFtpXSkgJgorCQkgICAgIChMQ0xBX0FMSUdOTUVOVCAtIDEpKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJZnJlZV9wYWdlcyhwYWdlX2xpc3Rbal0sIGJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisKKwlpZiAoaSA8IE1BWF9MQ0xBX0FMTE9DX0FUVEVNUFRTKSB7CisJCWJhc2UtPmxjbGFfcG9vbC5iYXNlID0gKHZvaWQgKilwYWdlX2xpc3RbaV07CisJfSBlbHNlIHsKKwkJLyogQWZ0ZXIgbWFueSBhdHRlbXB0cywgbm8gc3VjY2VlcyB3aXRoIGZpbmRpbmcgdGhlIGNvcnJlY3QKKwkJICogYWxpZ25tZW50IHRyeSB3aXRoIGFsbG9jYXRpbmcgYSBiaWcgYnVmZmVyICovCisJCWRldl93YXJuKGJhc2UtPmRldiwKKwkJCSAiWyVzXSBGYWlsZWQgdG8gZ2V0ICVkIHBhZ2VzIEAgMTggYml0IGFsaWduLlxuIiwKKwkJCSBfX2Z1bmNfXywgYmFzZS0+bGNsYV9wb29sLnBhZ2VzKTsKKwkJYmFzZS0+bGNsYV9wb29sLmJhc2VfdW5hbGlnbmVkID0ga21hbGxvYyhTWl8xSyAqCisJCQkJCQkJIGJhc2UtPm51bV9waHlfY2hhbnMgKworCQkJCQkJCSBMQ0xBX0FMSUdOTUVOVCwKKwkJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghYmFzZS0+bGNsYV9wb29sLmJhc2VfdW5hbGlnbmVkKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsdXJlOworCQl9CisKKwkJYmFzZS0+bGNsYV9wb29sLmJhc2UgPSBQVFJfQUxJR04oYmFzZS0+bGNsYV9wb29sLmJhc2VfdW5hbGlnbmVkLAorCQkJCQkJIExDTEFfQUxJR05NRU5UKTsKKwl9CisKKwl3cml0ZWwodmlydF90b19waHlzKGJhc2UtPmxjbGFfcG9vbC5iYXNlKSwKKwkgICAgICAgYmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19MQ0xBKTsKK2ZhaWx1cmU6CisJa2ZyZWUocGFnZV9saXN0KTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IF9faW5pdCBkNDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwpAQCAtMjU1NCw0NCArMjc4NCwxNCBAQAogCQkJX19mdW5jX18pOwogCQlnb3RvIGZhaWx1cmU7CiAJfQotCS8qIEdldCBJTyBmb3IgbG9naWNhbCBjaGFubmVsIGxpbmsgYWRkcmVzcyAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJsY2xhIik7Ci0JaWYgKCFyZXMpIHsKLQkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIlslc10gTm8gXCJsY2xhXCIgcmVzb3VyY2UgZGVmaW5lZFxuIiwKKworCXJldCA9IGQ0MF9sY2xhX2FsbG9jYXRlKGJhc2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiWyVzXSBGYWlsZWQgdG8gYWxsb2NhdGUgTENMQSBhcmVhXG4iLAogCQkJX19mdW5jX18pOwogCQlnb3RvIGZhaWx1cmU7CiAJfQogCi0JYmFzZS0+bGNsYV9wb29sLmJhc2Vfc2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKLQliYXNlLT5sY2xhX3Bvb2wucGh5ID0gcmVzLT5zdGFydDsKLQotCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAotCQkJICAgICAgIEQ0MF9OQU1FICIgSS9PIGxjbGEiKSA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIlslc10gRmFpbGVkIHRvIHJlcXVlc3QgTENMQSByZWdpb24gMHgleC0weCV4XG4iLAotCQkJX19mdW5jX18sIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKLQkJZ290byBmYWlsdXJlOwotCX0KLQl2YWwgPSByZWFkbChiYXNlLT52aXJ0YmFzZSArIEQ0MF9EUkVHX0xDTEEpOwotCWlmIChyZXMtPnN0YXJ0ICE9IHZhbCAmJiB2YWwgIT0gMCkgewotCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJICJbJXNdIE1pc21hdGNoIExDTEEgZG1hIDB4JXgsIGRlZiAweCV4XG4iLAotCQkJIF9fZnVuY19fLCB2YWwsIHJlcy0+c3RhcnQpOwotCX0gZWxzZQotCQl3cml0ZWwocmVzLT5zdGFydCwgYmFzZS0+dmlydGJhc2UgKyBENDBfRFJFR19MQ0xBKTsKLQotCWJhc2UtPmxjbGFfcG9vbC5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghYmFzZS0+bGNsYV9wb29sLmJhc2UpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIlslc10gRmFpbGVkIHRvIGlvcmVtYXAgTENMQSAweCV4LTB4JXhcbiIsCi0JCQlfX2Z1bmNfXywgcmVzLT5zdGFydCwgcmVzLT5lbmQpOwotCQlnb3RvIGZhaWx1cmU7Ci0JfQotCiAJc3Bpbl9sb2NrX2luaXQoJmJhc2UtPmxjbGFfcG9vbC5sb2NrKTsKIAogCWJhc2UtPmxjbGFfcG9vbC5udW1fYmxvY2tzID0gYmFzZS0+bnVtX3BoeV9jaGFuczsKQEAgLTI2MTYsMTEgKzI4MTYsMTUgQEAKIAogZmFpbHVyZToKIAlpZiAoYmFzZSkgeworCQlpZiAoYmFzZS0+ZGVzY19zbGFiKQorCQkJa21lbV9jYWNoZV9kZXN0cm95KGJhc2UtPmRlc2Nfc2xhYik7CiAJCWlmIChiYXNlLT52aXJ0YmFzZSkKIAkJCWlvdW5tYXAoYmFzZS0+dmlydGJhc2UpOwotCQlpZiAoYmFzZS0+bGNsYV9wb29sLnBoeSkKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihiYXNlLT5sY2xhX3Bvb2wucGh5LAotCQkJCQkgICBiYXNlLT5sY2xhX3Bvb2wuYmFzZV9zaXplKTsKKwkJaWYgKCFiYXNlLT5sY2xhX3Bvb2wuYmFzZV91bmFsaWduZWQgJiYgYmFzZS0+bGNsYV9wb29sLmJhc2UpCisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWJhc2UtPmxjbGFfcG9vbC5iYXNlLAorCQkJCSAgIGJhc2UtPmxjbGFfcG9vbC5wYWdlcyk7CisJCWlmIChiYXNlLT5sY2xhX3Bvb2wuYmFzZV91bmFsaWduZWQpCisJCQlrZnJlZShiYXNlLT5sY2xhX3Bvb2wuYmFzZV91bmFsaWduZWQpOwogCQlpZiAoYmFzZS0+cGh5X2xjcGEpCiAJCQlyZWxlYXNlX21lbV9yZWdpb24oYmFzZS0+cGh5X2xjcGEsCiAJCQkJCSAgIGJhc2UtPmxjcGFfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zdGVfZG1hNDBfbGwuYyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCmluZGV4IDU2MWZkZDguLmQ5MzdmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCisrKyBiL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5jCkBAIC0zMTUsMTEgKzMxNSw4IEBACiAJaW50IHRvdGFsX3NpemUgPSAwOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqY3VycmVudF9zZyA9IHNnOwogCWludCBpOwotCXUzMiBuZXh0X2xsaV9vZmZfZHN0OwotCXUzMiBuZXh0X2xsaV9vZmZfc3JjOwotCi0JbmV4dF9sbGlfb2ZmX3NyYyA9IDA7Ci0JbmV4dF9sbGlfb2ZmX2RzdCA9IDA7CisJdTMyIG5leHRfbGxpX29mZl9kc3QgPSAwOworCXUzMiBuZXh0X2xsaV9vZmZfc3JjID0gMDsKIAogCWZvcl9lYWNoX3NnKHNnLCBjdXJyZW50X3NnLCBzZ19sZW4sIGkpIHsKIAkJdG90YWxfc2l6ZSArPSBzZ19kbWFfbGVuKGN1cnJlbnRfc2cpOwpAQCAtMzUxLDcgKzM0OCw3IEBACiAJCQkJCSBzZ19kbWFfbGVuKGN1cnJlbnRfc2cpLAogCQkJCQkgbmV4dF9sbGlfb2ZmX3NyYywKIAkJCQkJIGxjc3AtPmxjc3AxLCBzcmNfZGF0YV93aWR0aCwKLQkJCQkJIHRlcm1faW50ICYmICFuZXh0X2xsaV9vZmZfc3JjLAorCQkJCQkgZmFsc2UsCiAJCQkJCSB0cnVlKTsKIAkJCWQ0MF9sb2dfZmlsbF9sbGkoJmxsaS0+ZHN0W2ldLAogCQkJCQkgZGV2X2FkZHIsCkBAIC0zNzUsNyArMzcyLDcgQEAKIAkJCQkJIHNnX2RtYV9sZW4oY3VycmVudF9zZyksCiAJCQkJCSBuZXh0X2xsaV9vZmZfc3JjLAogCQkJCQkgbGNzcC0+bGNzcDEsIHNyY19kYXRhX3dpZHRoLAotCQkJCQkgdGVybV9pbnQgJiYgIW5leHRfbGxpX29mZl9zcmMsCisJCQkJCSBmYWxzZSwKIAkJCQkJIGZhbHNlKTsKIAkJfQogCX0KQEAgLTQyMywzMiArNDIwLDM1IEBACiAJcmV0dXJuIHRvdGFsX3NpemU7CiB9CiAKLXZvaWQgZDQwX2xvZ19sbGlfd3JpdGUoc3RydWN0IGQ0MF9sb2dfbGxpX2Z1bGwgKmxjcGEsCitpbnQgZDQwX2xvZ19sbGlfd3JpdGUoc3RydWN0IGQ0MF9sb2dfbGxpX2Z1bGwgKmxjcGEsCiAJCSAgICAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGFfc3JjLAogCQkgICAgICAgc3RydWN0IGQ0MF9sb2dfbGxpICpsY2xhX2RzdCwKIAkJICAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX2RzdCwKIAkJICAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKIAkJICAgICAgIGludCBsbGlzX3Blcl9sb2cpCiB7Ci0JdTMyIHNsb3MgPSAwOwotCXUzMiBkbG9zID0gMDsKKwl1MzIgc2xvczsKKwl1MzIgZGxvczsKIAlpbnQgaTsKIAotCWxjcGEtPmxjc3AwID0gbGxpX3NyYy0+bGNzcDAyOwotCWxjcGEtPmxjc3AxID0gbGxpX3NyYy0+bGNzcDEzOwotCWxjcGEtPmxjc3AyID0gbGxpX2RzdC0+bGNzcDAyOwotCWxjcGEtPmxjc3AzID0gbGxpX2RzdC0+bGNzcDEzOworCXdyaXRlbChsbGlfc3JjLT5sY3NwMDIsICZsY3BhLT5sY3NwMCk7CisJd3JpdGVsKGxsaV9zcmMtPmxjc3AxMywgJmxjcGEtPmxjc3AxKTsKKwl3cml0ZWwobGxpX2RzdC0+bGNzcDAyLCAmbGNwYS0+bGNzcDIpOworCXdyaXRlbChsbGlfZHN0LT5sY3NwMTMsICZsY3BhLT5sY3NwMyk7CiAKIAlzbG9zID0gbGxpX3NyYy0+bGNzcDEzICYgRDQwX01FTV9MQ1NQMV9TTE9TX01BU0s7CiAJZGxvcyA9IGxsaV9kc3QtPmxjc3AxMyAmIEQ0MF9NRU1fTENTUDNfRExPU19NQVNLOwogCiAJZm9yIChpID0gMDsgKGkgPCBsbGlzX3Blcl9sb2cpICYmIHNsb3MgJiYgZGxvczsgaSsrKSB7Ci0JCXdyaXRlbChsbGlfc3JjW2krMV0ubGNzcDAyLCAmbGNsYV9zcmNbaV0ubGNzcDAyKTsKLQkJd3JpdGVsKGxsaV9zcmNbaSsxXS5sY3NwMTMsICZsY2xhX3NyY1tpXS5sY3NwMTMpOwotCQl3cml0ZWwobGxpX2RzdFtpKzFdLmxjc3AwMiwgJmxjbGFfZHN0W2ldLmxjc3AwMik7Ci0JCXdyaXRlbChsbGlfZHN0W2krMV0ubGNzcDEzLCAmbGNsYV9kc3RbaV0ubGNzcDEzKTsKKwkJd3JpdGVsKGxsaV9zcmNbaSArIDFdLmxjc3AwMiwgJmxjbGFfc3JjW2ldLmxjc3AwMik7CisJCXdyaXRlbChsbGlfc3JjW2kgKyAxXS5sY3NwMTMsICZsY2xhX3NyY1tpXS5sY3NwMTMpOworCQl3cml0ZWwobGxpX2RzdFtpICsgMV0ubGNzcDAyLCAmbGNsYV9kc3RbaV0ubGNzcDAyKTsKKwkJd3JpdGVsKGxsaV9kc3RbaSArIDFdLmxjc3AxMywgJmxjbGFfZHN0W2ldLmxjc3AxMyk7CiAKLQkJc2xvcyA9IGxsaV9zcmNbaSsxXS5sY3NwMTMgJiBENDBfTUVNX0xDU1AxX1NMT1NfTUFTSzsKLQkJZGxvcyA9IGxsaV9kc3RbaSsxXS5sY3NwMTMgJiBENDBfTUVNX0xDU1AzX0RMT1NfTUFTSzsKKwkJc2xvcyA9IGxsaV9zcmNbaSArIDFdLmxjc3AxMyAmIEQ0MF9NRU1fTENTUDFfU0xPU19NQVNLOworCQlkbG9zID0gbGxpX2RzdFtpICsgMV0ubGNzcDEzICYgRDQwX01FTV9MQ1NQM19ETE9TX01BU0s7CiAJfQorCisJcmV0dXJuIGk7CisKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3N0ZV9kbWE0MF9sbC5oIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKaW5kZXggMjAyOTI4MC4uOWMwZmEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKKysrIGIvZHJpdmVycy9kbWEvc3RlX2RtYTQwX2xsLmgKQEAgLTEzLDYgKzEzLDkgQEAKICNkZWZpbmUgRDQwX0RSRUdfUENERUxUQQkoOCAqIDQpCiAjZGVmaW5lIEQ0MF9MTElfQUxJR04JCTE2IC8qIExMSSBhbGlnbm1lbnQgbXVzdCBiZSAxNiBieXRlcy4gKi8KIAorI2RlZmluZSBENDBfTENQQV9DSEFOX1NJWkUgMzIKKyNkZWZpbmUgRDQwX0xDUEFfQ0hBTl9EU1RfREVMVEEgMTYKKwogI2RlZmluZSBENDBfVFlQRV9UT19HUk9VUCh0eXBlKSAodHlwZSAvIDE2KQogI2RlZmluZSBENDBfVFlQRV9UT19FVkVOVCh0eXBlKSAodHlwZSAlIDE2KQogCkBAIC0zMzYsMTIgKzMzOSwxMiBAQAogCQkgICAgICBib29sIHRlcm1faW50LCBkbWFfYWRkcl90IGRldl9hZGRyLCBpbnQgbWF4X2xlbiwKIAkJICAgICAgaW50IGxsaXNfcGVyX2xvZyk7CiAKLXZvaWQgZDQwX2xvZ19sbGlfd3JpdGUoc3RydWN0IGQ0MF9sb2dfbGxpX2Z1bGwgKmxjcGEsCi0JCSAgICAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGFfc3JjLAotCQkgICAgICAgc3RydWN0IGQ0MF9sb2dfbGxpICpsY2xhX2RzdCwKLQkJICAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX2RzdCwKLQkJICAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKLQkJICAgICAgIGludCBsbGlzX3Blcl9sb2cpOworaW50IGQ0MF9sb2dfbGxpX3dyaXRlKHN0cnVjdCBkNDBfbG9nX2xsaV9mdWxsICpsY3BhLAorCQkgICAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGFfc3JjLAorCQkgICAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxjbGFfZHN0LAorCQkgICAgICBzdHJ1Y3QgZDQwX2xvZ19sbGkgKmxsaV9kc3QsCisJCSAgICAgIHN0cnVjdCBkNDBfbG9nX2xsaSAqbGxpX3NyYywKKwkJICAgICAgaW50IGxsaXNfcGVyX2xvZyk7CiAKIGludCBkNDBfbG9nX3NnX3RvX2xsaShpbnQgbGNsYV9pZCwKIAkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3RpbWJfZG1hLmMgYi9kcml2ZXJzL2RtYS90aW1iX2RtYS5jCmluZGV4IGExYmY3N2MuLjJlYzFlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3RpbWJfZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvdGltYl9kbWEuYwpAQCAtMjAwLDggKzIwMCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldl9kYmcoY2hhbjJkZXYoJnRkX2NoYW4tPmNoYW4pLCAiZGVzYzogJXAsIGFkZHI6ICVwXG4iLAotCQlkbWFfZGVzYywgKHZvaWQgKilzZ19kbWFfYWRkcmVzcyhzZykpOworCWRldl9kYmcoY2hhbjJkZXYoJnRkX2NoYW4tPmNoYW4pLCAiZGVzYzogJXAsIGFkZHI6IDB4JWxseFxuIiwKKwkJZG1hX2Rlc2MsICh1bnNpZ25lZCBsb25nIGxvbmcpc2dfZG1hX2FkZHJlc3Moc2cpKTsKIAogCWRtYV9kZXNjWzddID0gKHNnX2RtYV9hZGRyZXNzKHNnKSA+PiAyNCkgJiAweGZmOwogCWRtYV9kZXNjWzZdID0gKHNnX2RtYV9hZGRyZXNzKHNnKSA+PiAxNikgJiAweGZmOwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJdGRfZGVzYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1iX2RtYV9kZXNjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0ZF9kZXNjKSB7CiAJCWRldl9lcnIoY2hhbjJkZXYoY2hhbiksICJGYWlsZWQgdG8gYWxsb2MgZGVzY3JpcHRvclxuIik7Ci0JCWdvdG8gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKIAl0ZF9kZXNjLT5kZXNjX2xpc3RfbGVuID0gdGRfY2hhbi0+ZGVzY19lbGVtcyAqIFRJTUJfRE1BX0RFU0NfU0laRTsKQEAgLTQxMCw3ICs0MTAsNyBAQAogZXJyOgogCWtmcmVlKHRkX2Rlc2MtPmRlc2NfbGlzdCk7CiAJa2ZyZWUodGRfZGVzYyk7Ci0KK291dDoKIAlyZXR1cm4gTlVMTDsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKaW5kZXggOTk2YzFiZC4uYTVjZWZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1MDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCkBAIC0xNDgyLDcgKzE0ODIsNyBAQAogCiAJLyogd2FrZSB1cCBkZXZpY2UgKi8KIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyYyA9PSAtRUlPKQorCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCiAJLyogbm93IHByb2JlIGFuZCBlbmFibGUgdGhlIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKaW5kZXggMDEwYzFkNi4uMzhhOWJlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQAogCiAJLyogd2FrZSB1cCBkZXZpY2UgKi8KIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyYyA9PSAtRUlPKQorCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCiAJLyogbm93IHByb2JlIGFuZCBlbmFibGUgdGhlIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IDhlYTA3YjAuLmIxMjNiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTQzLDcgKzQzLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgdTMyIG9yaWdfbDJfZXJyX2Rpc2FibGU7Ci0jaWZkZWYgQ09ORklHX01QQzg1eHgKKyNpZmRlZiBDT05GSUdfRlNMX1NPQ19CT09LRQogc3RhdGljIHUzMiBvcmlnX2hpZDFbMl07CiAjZW5kaWYKIApAQCAtNjQ3LDcgKzY0NywxMCBAQAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NTUtbDItY2FjaGUtY29udHJvbGxlciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU2MC1sMi1jYWNoZS1jb250cm9sbGVyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTY4LWwyLWNhY2hlLWNvbnRyb2xsZXIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NjktbDItY2FjaGUtY29udHJvbGxlciIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1sMi1jYWNoZS1jb250cm9sbGVyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxwMTAyMC1sMi1jYWNoZS1jb250cm9sbGVyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxwMTAyMS1sMi1jYWNoZS1jb250cm9sbGVyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxwMjAyMC1sMi1jYWNoZS1jb250cm9sbGVyIiwgfSwKIAl7fSwKIH07CkBAIC0xMTI1LDcgKzExMjgsMTAgQEAKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTY5LW1lbW9yeS1jb250cm9sbGVyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLW1lbW9yeS1jb250cm9sbGVyIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LW1lbW9yeS1jb250cm9sbGVyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxwMTAyMC1tZW1vcnktY29udHJvbGxlciIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wscDEwMjEtbWVtb3J5LWNvbnRyb2xsZXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHAyMDIwLW1lbW9yeS1jb250cm9sbGVyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxwNDA4MC1tZW1vcnktY29udHJvbGxlciIsIH0sCiAJe30sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXBjODV4eF9tY19lcnJfb2ZfbWF0Y2gpOwpAQCAtMTE0MCw3ICsxMTQ2LDcgQEAKIAl9LAogfTsKIAotI2lmZGVmIENPTkZJR19NUEM4NXh4CisjaWZkZWYgQ09ORklHX0ZTTF9TT0NfQk9PS0UKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM4NXh4X21jX2NsZWFyX3JmeGUodm9pZCAqZGF0YSkKIHsKIAlvcmlnX2hpZDFbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IG1mc3ByKFNQUk5fSElEMSk7CkBAIC0xMTc5LDcgKzExODUsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HIEVEQUNfTU9EX1NUUiAiUENJIGZhaWxzIHRvIHJlZ2lzdGVyXG4iKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01QQzg1eHgKKyNpZmRlZiBDT05GSUdfRlNMX1NPQ19CT09LRQogCS8qCiAJICogbmVlZCB0byBjbGVhciBISUQxW1JGWEVdIHRvIGRpc2FibGUgbWFjaGluZSBjaGVjayBpbnQKIAkgKiBzbyB3ZSBjYW4gY2F0Y2ggaXQKQEAgLTExOTMsNyArMTE5OSw3IEBACiAKIG1vZHVsZV9pbml0KG1wYzg1eHhfbWNfaW5pdCk7CiAKLSNpZmRlZiBDT05GSUdfTVBDODV4eAorI2lmZGVmIENPTkZJR19GU0xfU09DX0JPT0tFCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXBjODV4eF9tY19yZXN0b3JlX2hpZDEodm9pZCAqZGF0YSkKIHsKIAltdHNwcihTUFJOX0hJRDEsIG9yaWdfaGlkMVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKQEAgLTEyMDIsNyArMTIwOCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGM4NXh4X21jX2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTVBDODV4eAorI2lmZGVmIENPTkZJR19GU0xfU09DX0JPT0tFCiAJb25fZWFjaF9jcHUobXBjODV4eF9tY19yZXN0b3JlX2hpZDEsIE5VTEwsIDApOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9LY29uZmlnIGIvZHJpdmVycy9maXJld2lyZS9LY29uZmlnCmluZGV4IGE5MzcxYjMuLmZjZjNlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL0tjb25maWcKQEAgLTY2LDQgKzY2LDI4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgogCitjb25maWcgRklSRVdJUkVfTk9TWQorCXRyaXN0YXRlICJOb3N5IC0gYSBGaXJlV2lyZSB0cmFmZmljIHNuaWZmZXIgZm9yIFBDSUx5bnggY2FyZHMiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBOb3N5IGlzIGFuIElFRUUgMTM5NCBwYWNrZXQgc25pZmZlciB0aGF0IGlzIHVzZWQgZm9yIHByb3RvY29sCisJICBhbmFseXNpcyBhbmQgaW4gZGV2ZWxvcG1lbnQgb2YgSUVFRSAxMzk0IGRyaXZlcnMsIGFwcGxpY2F0aW9ucywKKwkgIG9yIGZpcm13YXJlcy4KKworCSAgVGhpcyBkcml2ZXIgbGV0cyB5b3UgdXNlIGEgVGV4YXMgSW5zdHJ1bWVudHMgUENJTHlueCAxMzk0IHRvIFBDSQorCSAgbGluayBsYXllciBjb250cm9sbGVyIFRTQjEyTFYyMS9BL0IgYXMgYSBsb3ctYnVkZ2V0IGJ1cyBhbmFseXplci4KKwkgIFBDSUx5bnggaXMgYSBub3dhZGF5cyB2ZXJ5IHJhcmUgSUVFRSAxMzk0IGNvbnRyb2xsZXIgd2hpY2ggaXMKKwkgIG5vdCBPSENJIDEzOTQgY29tcGxpYW50LgorCisJICBUaGUgZm9sbG93aW5nIGNhcmRzIGFyZSBrbm93biB0byBiZSBiYXNlZCBvbiBQQ0lMeW54IG9yIFBDSUx5bngtMjoKKwkgIElPSSBJT0ktMTM5NFRUIChQQ0kgY2FyZCksIFVuaWJyYWluIEZpcmVib2FyZCA0MDAgUENJIEx5bngtMgorCSAgKFBDSSBjYXJkKSwgTmV3ZXIgVGVjaG5vbG9neSBGaXJlV2lyZSAyIEdvIChDYXJkQnVzIGNhcmQpLAorCSAgQXBwbGUgUG93ZXIgTWFjIEczIGJsdWUgJiB3aGl0ZSAob25ib2FyZCBjb250cm9sbGVyKS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZTogIFRoZSBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIG5vc3kuICBTb3VyY2UgY29kZSBvZiBhIHVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gbm9zeSwgY2FsbGVkCisJICBub3N5LWR1bXAsIGNhbiBiZSBmb3VuZCBpbiB0b29scy9maXJld2lyZS8gb2YgdGhlIGtlcm5lbCBzb3VyY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL01ha2VmaWxlIGIvZHJpdmVycy9maXJld2lyZS9NYWtlZmlsZQppbmRleCBhOGY5YmI2Li4zYzZhN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDQgQEAKIG9iai0kKENPTkZJR19GSVJFV0lSRV9PSENJKSArPSBmaXJld2lyZS1vaGNpLm8KIG9iai0kKENPTkZJR19GSVJFV0lSRV9TQlAyKSArPSBmaXJld2lyZS1zYnAyLm8KIG9iai0kKENPTkZJR19GSVJFV0lSRV9ORVQpICArPSBmaXJld2lyZS1uZXQubworb2JqLSQoQ09ORklHX0ZJUkVXSVJFX05PU1kpICs9IG5vc3kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jYXJkLmMKaW5kZXggMzcxNzEzZi4uYmUwNDkyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWNhcmQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2FyZC5jCkBAIC0yMDQsMTcgKzIwNCw2MiBAQAogfQogRVhQT1JUX1NZTUJPTChmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKTsKIAorc3RhdGljIGludCByZXNldF9idXMoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGJvb2wgc2hvcnRfcmVzZXQpCit7CisJaW50IHJlZyA9IHNob3J0X3Jlc2V0ID8gNSA6IDE7CisJaW50IGJpdCA9IHNob3J0X3Jlc2V0ID8gUEhZX0JVU19TSE9SVF9SRVNFVCA6IFBIWV9CVVNfUkVTRVQ7CisKKwlyZXR1cm4gY2FyZC0+ZHJpdmVyLT51cGRhdGVfcGh5X3JlZyhjYXJkLCByZWcsIDAsIGJpdCk7Cit9CisKK3ZvaWQgZndfc2NoZWR1bGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBib29sIGRlbGF5ZWQsIGJvb2wgc2hvcnRfcmVzZXQpCit7CisJLyogV2UgZG9uJ3QgdHJ5IGhhcmQgdG8gc29ydCBvdXQgcmVxdWVzdHMgb2YgbG9uZyB2cy4gc2hvcnQgcmVzZXRzLiAqLworCWNhcmQtPmJyX3Nob3J0ID0gc2hvcnRfcmVzZXQ7CisKKwkvKiBVc2UgYW4gYXJiaXRyYXJ5IHNob3J0IGRlbGF5IHRvIGNvbWJpbmUgbXVsdGlwbGUgcmVzZXQgcmVxdWVzdHMuICovCisJZndfY2FyZF9nZXQoY2FyZCk7CisJaWYgKCFzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNhcmQtPmJyX3dvcmssCisJCQkJICAgZGVsYXllZCA/IERJVl9ST1VORF9VUChIWiwgMTAwKSA6IDApKQorCQlmd19jYXJkX3B1dChjYXJkKTsKK30KK0VYUE9SVF9TWU1CT0woZndfc2NoZWR1bGVfYnVzX3Jlc2V0KTsKKworc3RhdGljIHZvaWQgYnJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIGJyX3dvcmsud29yayk7CisKKwkvKiBEZWxheSBmb3IgMnMgYWZ0ZXIgbGFzdCByZXNldCBwZXIgSUVFRSAxMzk0IGNsYXVzZSA4LjIuMS4gKi8KKwlpZiAoY2FyZC0+cmVzZXRfamlmZmllcyAhPSAwICYmCisJICAgIHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhjYXJkLT5yZXNldF9qaWZmaWVzICsgMiAqIEhaKSkgeworCQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+YnJfd29yaywgMiAqIEhaKSkKKwkJCWZ3X2NhcmRfcHV0KGNhcmQpOworCQlyZXR1cm47CisJfQorCisJZndfc2VuZF9waHlfY29uZmlnKGNhcmQsIEZXX1BIWV9DT05GSUdfTk9fTk9ERV9JRCwgY2FyZC0+Z2VuZXJhdGlvbiwKKwkJCSAgIEZXX1BIWV9DT05GSUdfQ1VSUkVOVF9HQVBfQ09VTlQpOworCXJlc2V0X2J1cyhjYXJkLCBjYXJkLT5icl9zaG9ydCk7CisJZndfY2FyZF9wdXQoY2FyZCk7Cit9CisKIHN0YXRpYyB2b2lkIGFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbikKIHsKIAlpbnQgY2hhbm5lbCwgYmFuZHdpZHRoID0gMDsKIAotCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2FyZCwgZ2VuZXJhdGlvbiwgMVVMTCA8PCAzMSwgJmNoYW5uZWwsCi0JCQkgICAgICAgJmJhbmR3aWR0aCwgdHJ1ZSwgY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSk7Ci0JaWYgKGNoYW5uZWwgPT0gMzEpIHsKKwlpZiAoIWNhcmQtPmJyb2FkY2FzdF9jaGFubmVsX2FsbG9jYXRlZCkgeworCQlmd19pc29fcmVzb3VyY2VfbWFuYWdlKGNhcmQsIGdlbmVyYXRpb24sIDFVTEwgPDwgMzEsCisJCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlLAorCQkJCSAgICAgICBjYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhKTsKKwkJaWYgKGNoYW5uZWwgIT0gMzEpIHsKKwkJCWZ3X25vdGlmeSgiZmFpbGVkIHRvIGFsbG9jYXRlIGJyb2FkY2FzdCBjaGFubmVsXG4iKTsKKwkJCXJldHVybjsKKwkJfQogCQljYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQgPSB0cnVlOwotCQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoY2FyZC0+ZGV2aWNlLCAodm9pZCAqKShsb25nKWdlbmVyYXRpb24sCi0JCQkJICAgICAgZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbCk7CiAJfQorCisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKGNhcmQtPmRldmljZSwgKHZvaWQgKikobG9uZylnZW5lcmF0aW9uLAorCQkJICAgICAgZndfZGV2aWNlX3NldF9icm9hZGNhc3RfY2hhbm5lbCk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGdhcF9jb3VudF90YWJsZVtdID0gewpAQCAtMjI0LDI3ICsyNjksMjYgQEAKIHZvaWQgZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKIAlmd19jYXJkX2dldChjYXJkKTsKLQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2FyZC0+d29yaywgZGVsYXkpKQorCWlmICghc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjYXJkLT5ibV93b3JrLCBkZWxheSkpCiAJCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogCi1zdGF0aWMgdm9pZCBmd19jYXJkX2JtX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIHdvcmsud29yayk7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIGJtX3dvcmsud29yayk7CiAJc3RydWN0IGZ3X2RldmljZSAqcm9vdF9kZXZpY2UsICppcm1fZGV2aWNlOwogCXN0cnVjdCBmd19ub2RlICpyb290X25vZGU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgbG9jYWxfaWQ7CisJaW50IHJvb3RfaWQsIG5ld19yb290X2lkLCBpcm1faWQsIGJtX2lkLCBsb2NhbF9pZDsKIAlpbnQgZ2FwX2NvdW50LCBnZW5lcmF0aW9uLCBncmFjZSwgcmNvZGU7CiAJYm9vbCBkb19yZXNldCA9IGZhbHNlOwogCWJvb2wgcm9vdF9kZXZpY2VfaXNfcnVubmluZzsKIAlib29sIHJvb3RfZGV2aWNlX2lzX2NtYzsKIAlib29sIGlybV9pc18xMzk0XzE5OTVfb25seTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+bG9jayk7CiAKIAlpZiAoY2FyZC0+bG9jYWxfbm9kZSA9PSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIAkJZ290byBvdXRfcHV0X2NhcmQ7CiAJfQogCkBAIC0yNjcsNyArMzExLDggQEAKIAogCWdyYWNlID0gdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5yZXNldF9qaWZmaWVzICsgRElWX1JPVU5EX1VQKEhaLCA4KSk7CiAKLQlpZiAoaXNfbmV4dF9nZW5lcmF0aW9uKGdlbmVyYXRpb24sIGNhcmQtPmJtX2dlbmVyYXRpb24pIHx8CisJaWYgKChpc19uZXh0X2dlbmVyYXRpb24oZ2VuZXJhdGlvbiwgY2FyZC0+Ym1fZ2VuZXJhdGlvbikgJiYKKwkgICAgICFjYXJkLT5ibV9hYmRpY2F0ZSkgfHwKIAkgICAgKGNhcmQtPmJtX2dlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbiAmJiBncmFjZSkpIHsKIAkJLyoKIAkJICogVGhpcyBmaXJzdCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hvIGlzIElSTSBhbmQKQEAgLTI5OCwyMSArMzQzLDI2IEBACiAJCWNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGFbMF0gPSBjcHVfdG9fYmUzMigweDNmKTsKIAkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX2lkKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CiAKIAkJcmNvZGUgPSBmd19ydW5fdHJhbnNhY3Rpb24oY2FyZCwgVENPREVfTE9DS19DT01QQVJFX1NXQVAsCiAJCQkJaXJtX2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCiAJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTX01BTkFHRVJfSUQsCi0JCQkJY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSwKLQkJCQlzaXplb2YoY2FyZC0+Ym1fdHJhbnNhY3Rpb25fZGF0YSkpOworCQkJCWNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGEsIDgpOwogCiAJCWlmIChyY29kZSA9PSBSQ09ERV9HRU5FUkFUSU9OKQogCQkJLyogQW5vdGhlciBidXMgcmVzZXQsIEJNIHdvcmsgaGFzIGJlZW4gcmVzY2hlZHVsZWQuICovCiAJCQlnb3RvIG91dDsKIAotCQlpZiAocmNvZGUgPT0gUkNPREVfQ09NUExFVEUgJiYKLQkJICAgIGNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGFbMF0gIT0gY3B1X3RvX2JlMzIoMHgzZikpIHsKKwkJYm1faWQgPSBiZTMyX3RvX2NwdShjYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhWzBdKTsKIAorCQlzcGluX2xvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKwkJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFICYmIGdlbmVyYXRpb24gPT0gY2FyZC0+Z2VuZXJhdGlvbikKKwkJCWNhcmQtPmJtX25vZGVfaWQgPQorCQkJICAgIGJtX2lkID09IDB4M2YgPyBsb2NhbF9pZCA6IDB4ZmZjMCB8IGJtX2lkOworCQlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOworCisJCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSAmJiBibV9pZCAhPSAweDNmKSB7CiAJCQkvKiBTb21lYm9keSBlbHNlIGlzIEJNLiAgT25seSBhY3QgYXMgSVJNLiAqLwogCQkJaWYgKGxvY2FsX2lkID09IGlybV9pZCkKIAkJCQlhbGxvY2F0ZV9icm9hZGNhc3RfY2hhbm5lbChjYXJkLCBnZW5lcmF0aW9uKTsKQEAgLTMyMCw3ICszNzAsMTcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJjb2RlID09IFJDT0RFX1NFTkRfRVJST1IpIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIGJlZW4gdW5hYmxlIHRvIHNlbmQgdGhlIGxvY2sgcmVxdWVzdCBkdWUgdG8KKwkJCSAqIHNvbWUgbG9jYWwgcHJvYmxlbS4gIExldCdzIHRyeSBhZ2FpbiBsYXRlciBhbmQgaG9wZQorCQkJICogdGhhdCB0aGUgcHJvYmxlbSBoYXMgZ29uZSBhd2F5IGJ5IHRoZW4uCisJCQkgKi8KKwkJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgRElWX1JPVU5EX1VQKEhaLCA4KSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOwogCiAJCWlmIChyY29kZSAhPSBSQ09ERV9DT01QTEVURSkgewogCQkJLyoKQEAgLTMzOSw3ICszOTksNyBAQAogCQkgKiBXZSB3ZXJlbid0IEJNIGluIHRoZSBsYXN0IGdlbmVyYXRpb24sIGFuZCB0aGUgbGFzdAogCQkgKiBidXMgcmVzZXQgaXMgbGVzcyB0aGFuIDEyNW1zIGFnby4gIFJlc2NoZWR1bGUgdGhpcyBqb2IuCiAJCSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CiAJCWZ3X3NjaGVkdWxlX2JtX3dvcmsoY2FyZCwgRElWX1JPVU5EX1VQKEhaLCA4KSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM2MiwxNCArNDIyLDEyIEBACiAJCSAqIElmIHdlIGhhdmVuJ3QgcHJvYmVkIHRoaXMgZGV2aWNlIHlldCwgYmFpbCBvdXQgbm93CiAJCSAqIGFuZCBsZXQncyB0cnkgYWdhaW4gb25jZSB0aGF0J3MgZG9uZS4KIAkJICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChyb290X2RldmljZV9pc19jbWMpIHsKIAkJLyoKLQkJICogRklYTUU6IEkgc3VwcG9zZSB3ZSBzaG91bGQgc2V0IHRoZSBjbXN0ciBiaXQgaW4gdGhlCi0JCSAqIFNUQVRFX0NMRUFSIHJlZ2lzdGVyIG9mIHRoaXMgbm9kZSwgYXMgZGVzY3JpYmVkIGluCi0JCSAqIDEzOTQtMTk5NSwgOC40LjIuNi4gIEFsc28sIHNlbmQgb3V0IGEgZm9yY2Ugcm9vdAotCQkgKiBwYWNrZXQgZm9yIHRoaXMgbm9kZS4KKwkJICogV2Ugd2lsbCBzZW5kIG91dCBhIGZvcmNlIHJvb3QgcGFja2V0IGZvciB0aGlzCisJCSAqIG5vZGUgYXMgcGFydCBvZiB0aGUgZ2FwIGNvdW50IG9wdGltaXphdGlvbi4KIAkJICovCiAJCW5ld19yb290X2lkID0gcm9vdF9pZDsKIAl9IGVsc2UgewpAQCAtNDAyLDE5ICs0NjAsMzMgQEAKIAkgICAgKGNhcmQtPmdhcF9jb3VudCAhPSBnYXBfY291bnQgfHwgbmV3X3Jvb3RfaWQgIT0gcm9vdF9pZCkpCiAJCWRvX3Jlc2V0ID0gdHJ1ZTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOwogCiAJaWYgKGRvX3Jlc2V0KSB7CiAJCWZ3X25vdGlmeSgicGh5IGNvbmZpZzogY2FyZCAlZCwgbmV3IHJvb3Q9JXgsIGdhcF9jb3VudD0lZFxuIiwKIAkJCSAgY2FyZC0+aW5kZXgsIG5ld19yb290X2lkLCBnYXBfY291bnQpOwogCQlmd19zZW5kX3BoeV9jb25maWcoY2FyZCwgbmV3X3Jvb3RfaWQsIGdlbmVyYXRpb24sIGdhcF9jb3VudCk7Ci0JCWZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNhcmQsIDEpOworCQlyZXNldF9idXMoY2FyZCwgdHJ1ZSk7CiAJCS8qIFdpbGwgYWxsb2NhdGUgYnJvYWRjYXN0IGNoYW5uZWwgYWZ0ZXIgdGhlIHJlc2V0LiAqLwotCX0gZWxzZSB7Ci0JCWlmIChsb2NhbF9pZCA9PSBpcm1faWQpCi0JCQlhbGxvY2F0ZV9icm9hZGNhc3RfY2hhbm5lbChjYXJkLCBnZW5lcmF0aW9uKTsKKwkJZ290byBvdXQ7CiAJfQogCisJaWYgKHJvb3RfZGV2aWNlX2lzX2NtYykgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY3ljbGUgbWFzdGVyIHNlbmRzIGN5Y2xlIHN0YXJ0IHBhY2tldHMuCisJCSAqLworCQljYXJkLT5ibV90cmFuc2FjdGlvbl9kYXRhWzBdID0gY3B1X3RvX2JlMzIoQ1NSX1NUQVRFX0JJVF9DTVNUUik7CisJCXJjb2RlID0gZndfcnVuX3RyYW5zYWN0aW9uKGNhcmQsIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCwKKwkJCQlyb290X2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCisJCQkJQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfU1RBVEVfU0VULAorCQkJCWNhcmQtPmJtX3RyYW5zYWN0aW9uX2RhdGEsIDQpOworCQlpZiAocmNvZGUgPT0gUkNPREVfR0VORVJBVElPTikKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChsb2NhbF9pZCA9PSBpcm1faWQpCisJCWFsbG9jYXRlX2Jyb2FkY2FzdF9jaGFubmVsKGNhcmQsIGdlbmVyYXRpb24pOworCiAgb3V0OgogCWZ3X25vZGVfcHV0KHJvb3Rfbm9kZSk7CiAgb3V0X3B1dF9jYXJkOgpAQCAtNDMyLDE3ICs1MDQsMjMgQEAKIAljYXJkLT5kZXZpY2UgPSBkZXZpY2U7CiAJY2FyZC0+Y3VycmVudF90bGFiZWwgPSAwOwogCWNhcmQtPnRsYWJlbF9tYXNrID0gMDsKKwljYXJkLT5zcGxpdF90aW1lb3V0X2hpID0gMDsKKwljYXJkLT5zcGxpdF90aW1lb3V0X2xvID0gODAwIDw8IDE5OworCWNhcmQtPnNwbGl0X3RpbWVvdXRfY3ljbGVzID0gODAwOworCWNhcmQtPnNwbGl0X3RpbWVvdXRfamlmZmllcyA9IERJVl9ST1VORF9VUChIWiwgMTApOwogCWNhcmQtPmNvbG9yID0gMDsKIAljYXJkLT5icm9hZGNhc3RfY2hhbm5lbCA9IEJST0FEQ0FTVF9DSEFOTkVMX0lOSVRJQUw7CiAKIAlrcmVmX2luaXQoJmNhcmQtPmtyZWYpOwogCWluaXRfY29tcGxldGlvbigmY2FyZC0+ZG9uZSk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5waHlfcmVjZWl2ZXJfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOwogCiAJY2FyZC0+bG9jYWxfbm9kZSA9IE5VTEw7CiAKLQlJTklUX0RFTEFZRURfV09SSygmY2FyZC0+d29yaywgZndfY2FyZF9ibV93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmY2FyZC0+YnJfd29yaywgYnJfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNhcmQtPmJtX3dvcmssIGJtX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChmd19jYXJkX2luaXRpYWxpemUpOwogCkBAIC00NjgsMjAgKzU0NiwyMiBAQAogfQogRVhQT1JUX1NZTUJPTChmd19jYXJkX2FkZCk7CiAKLQogLyoKICAqIFRoZSBuZXh0IGZldyBmdW5jdGlvbnMgaW1wbGVtZW50IGEgZHVtbXkgZHJpdmVyIHRoYXQgaXMgdXNlZCBvbmNlIGEgY2FyZAogICogZHJpdmVyIHNodXRzIGRvd24gYW4gZndfY2FyZC4gIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gY2xlYW5seSB1bmxvYWQsCiAgKiBhcyBhbGwgSU8gdG8gdGhlIGNhcmQgd2lsbCBiZSBoYW5kbGVkIChhbmQgZmFpbGVkKSBieSB0aGUgZHVtbXkgZHJpdmVyCiAgKiBpbnN0ZWFkIG9mIGNhbGxpbmcgaW50byB0aGUgbW9kdWxlLiAgT25seSBmdW5jdGlvbnMgZm9yIGlzbyBjb250ZXh0CiAgKiBzaHV0ZG93biBzdGlsbCBuZWVkIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBjYXJkIGRyaXZlci4KKyAqCisgKiAucmVhZC93cml0ZV9jc3IoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGFueW1vcmUgYWZ0ZXIgdGhlIGR1bW15IGRyaXZlcgorICogd2FzIGJvdW5kIHNpbmNlIHRoZXkgYXJlIG9ubHkgdXNlZCB3aXRoaW4gcmVxdWVzdCBoYW5kbGVyIGNvbnRleHQuCisgKiAuc2V0X2NvbmZpZ19yb20oKSBpcyBuZXZlciBjYWxsZWQgc2luY2UgdGhlIGNhcmQgaXMgdGFrZW4gb3V0IG9mIGNhcmRfbGlzdAorICogYmVmb3JlIHN3aXRjaGluZyB0byB0aGUgZHVtbXkgZHJpdmVyLgogICovCiAKLXN0YXRpYyBpbnQgZHVtbXlfZW5hYmxlKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkJY29uc3QgX19iZTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIGludCBkdW1teV9yZWFkX3BoeV9yZWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzKQogewotCUJVRygpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBkdW1teV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHJlc3MsCkBAIC00OTAsMjUgKzU3MCwxNCBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3NldF9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkJCWNvbnN0IF9fYmUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKLXsKLQkvKgotCSAqIFdlIHRha2UgdGhlIGNhcmQgb3V0IG9mIGNhcmRfbGlzdCBiZWZvcmUgc2V0dGluZyB0aGUgZHVtbXkKLQkgKiBkcml2ZXIsIHNvIHRoaXMgc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQuCi0JICovCi0JQlVHKCk7Ci0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdm9pZCBkdW1teV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKLQlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgY2FyZCwgLUVOT0RFVik7CisJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsIGNhcmQsIFJDT0RFX0NBTkNFTExFRCk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bW15X3NlbmRfcmVzcG9uc2Uoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKLQlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgY2FyZCwgLUVOT0RFVik7CisJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsIGNhcmQsIFJDT0RFX0NBTkNFTExFRCk7CiB9CiAKIHN0YXRpYyBpbnQgZHVtbXlfY2FuY2VsX3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQpAQCAtNTIyLDE0ICs1OTEsNDAgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAorc3RhdGljIHN0cnVjdCBmd19pc29fY29udGV4dCAqZHVtbXlfYWxsb2NhdGVfaXNvX2NvbnRleHQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJaW50IHR5cGUsIGludCBjaGFubmVsLCBzaXplX3QgaGVhZGVyX3NpemUpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfc3RhcnRfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJICAgczMyIGN5Y2xlLCB1MzIgc3luYywgdTMyIHRhZ3MpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgZHVtbXlfc2V0X2lzb19jaGFubmVscyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwgdTY0ICpjaGFubmVscykKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBkdW1teV9xdWV1ZV9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19pc29fcGFja2V0ICpwLAorCQkJICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQoreworCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIGR1bW15X2RyaXZlcl90ZW1wbGF0ZSA9IHsKLQkuZW5hYmxlICAgICAgICAgID0gZHVtbXlfZW5hYmxlLAotCS51cGRhdGVfcGh5X3JlZyAgPSBkdW1teV91cGRhdGVfcGh5X3JlZywKLQkuc2V0X2NvbmZpZ19yb20gID0gZHVtbXlfc2V0X2NvbmZpZ19yb20sCi0JLnNlbmRfcmVxdWVzdCAgICA9IGR1bW15X3NlbmRfcmVxdWVzdCwKLQkuY2FuY2VsX3BhY2tldCAgID0gZHVtbXlfY2FuY2VsX3BhY2tldCwKLQkuc2VuZF9yZXNwb25zZSAgID0gZHVtbXlfc2VuZF9yZXNwb25zZSwKLQkuZW5hYmxlX3BoeXNfZG1hID0gZHVtbXlfZW5hYmxlX3BoeXNfZG1hLAorCS5yZWFkX3BoeV9yZWcJCT0gZHVtbXlfcmVhZF9waHlfcmVnLAorCS51cGRhdGVfcGh5X3JlZwkJPSBkdW1teV91cGRhdGVfcGh5X3JlZywKKwkuc2VuZF9yZXF1ZXN0CQk9IGR1bW15X3NlbmRfcmVxdWVzdCwKKwkuc2VuZF9yZXNwb25zZQkJPSBkdW1teV9zZW5kX3Jlc3BvbnNlLAorCS5jYW5jZWxfcGFja2V0CQk9IGR1bW15X2NhbmNlbF9wYWNrZXQsCisJLmVuYWJsZV9waHlzX2RtYQk9IGR1bW15X2VuYWJsZV9waHlzX2RtYSwKKwkuYWxsb2NhdGVfaXNvX2NvbnRleHQJPSBkdW1teV9hbGxvY2F0ZV9pc29fY29udGV4dCwKKwkuc3RhcnRfaXNvCQk9IGR1bW15X3N0YXJ0X2lzbywKKwkuc2V0X2lzb19jaGFubmVscwk9IGR1bW15X3NldF9pc29fY2hhbm5lbHMsCisJLnF1ZXVlX2lzbwkJPSBkdW1teV9xdWV1ZV9pc28sCiB9OwogCiB2b2lkIGZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKQEAgLTU0NSw3ICs2NDAsNyBAQAogCiAJY2FyZC0+ZHJpdmVyLT51cGRhdGVfcGh5X3JlZyhjYXJkLCA0LAogCQkJCSAgICAgUEhZX0xJTktfQUNUSVZFIHwgUEhZX0NPTlRFTkRFUiwgMCk7Ci0JZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2FyZCwgMSk7CisJZndfc2NoZWR1bGVfYnVzX3Jlc2V0KGNhcmQsIGZhbHNlLCB0cnVlKTsKIAogCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOwogCWxpc3RfZGVsX2luaXQoJmNhcmQtPmxpbmspOwpAQCAtNTY1LDEyICs2NjAsMyBAQAogCVdBUk5fT04oIWxpc3RfZW1wdHkoJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpKTsKIH0KIEVYUE9SVF9TWU1CT0woZndfY29yZV9yZW1vdmVfY2FyZCk7Ci0KLWludCBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHNob3J0X3Jlc2V0KQotewotCWludCByZWcgPSBzaG9ydF9yZXNldCA/IDUgOiAxOwotCWludCBiaXQgPSBzaG9ydF9yZXNldCA/IFBIWV9CVVNfU0hPUlRfUkVTRVQgOiBQSFlfQlVTX1JFU0VUOwotCi0JcmV0dXJuIGNhcmQtPmRyaXZlci0+dXBkYXRlX3BoeV9yZWcoY2FyZCwgcmVnLCAwLCBiaXQpOwotfQotRVhQT1JUX1NZTUJPTChmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwppbmRleCA1YmYxMDZiLi4xNGJiN2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zMyw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAvKiByZXF1aXJlZCBmb3IgbGludXgvd2FpdC5oICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC00Nyw2ICs0OCwxMyBAQAogCiAjaW5jbHVkZSAiY29yZS5oIgogCisvKgorICogQUJJIHZlcnNpb24gaGlzdG9yeSBpcyBkb2N1bWVudGVkIGluIGxpbnV4L2ZpcmV3aXJlLWNkZXYuaC4KKyAqLworI2RlZmluZSBGV19DREVWX0tFUk5FTF9WRVJTSU9OCQkJNAorI2RlZmluZSBGV19DREVWX1ZFUlNJT05fRVZFTlRfUkVRVUVTVDIJCTQKKyNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OX0FMTE9DQVRFX1JFR0lPTl9FTkQJNAorCiBzdHJ1Y3QgY2xpZW50IHsKIAl1MzIgdmVyc2lvbjsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2U7CkBAIC02Myw2ICs3MSw5IEBACiAJc3RydWN0IGZ3X2lzb19idWZmZXIgYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBoeV9yZWNlaXZlcl9saW5rOworCXU2NCBwaHlfcmVjZWl2ZXJfY2xvc3VyZTsKKwogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKIAlzdHJ1Y3Qga3JlZiBrcmVmOwogfTsKQEAgLTEwNyw2ICsxMTgsNyBAQAogCiBzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSB7CiAJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKIAl2b2lkICpkYXRhOwogCXNpemVfdCBsZW5ndGg7CkBAIC0xNzEsNyArMTgzLDEwIEBACiAKIHN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX2V2ZW50IHsKIAlzdHJ1Y3QgZXZlbnQgZXZlbnQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OworCXVuaW9uIHsKKwkJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OworCQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0MiByZXF1ZXN0MjsKKwl9IHJlcTsKIH07CiAKIHN0cnVjdCBpc29faW50ZXJydXB0X2V2ZW50IHsKQEAgLTE3OSwxMSArMTk0LDI4IEBACiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpbnRlcnJ1cHQ7CiB9OwogCitzdHJ1Y3QgaXNvX2ludGVycnVwdF9tY19ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHRfbWMgaW50ZXJydXB0OworfTsKKwogc3RydWN0IGlzb19yZXNvdXJjZV9ldmVudCB7CiAJc3RydWN0IGV2ZW50IGV2ZW50OwogCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZSBpc29fcmVzb3VyY2U7CiB9OwogCitzdHJ1Y3Qgb3V0Ym91bmRfcGh5X3BhY2tldF9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZndfcGFja2V0IHA7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcGh5X3BhY2tldCBwaHlfcGFja2V0OworfTsKKworc3RydWN0IGluYm91bmRfcGh5X3BhY2tldF9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3BoeV9wYWNrZXQgcGh5X3BhY2tldDsKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKnU2NF90b191cHRyKF9fdTY0IHZhbHVlKQogewogCXJldHVybiAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl2YWx1ZTsKQEAgLTIxOSw2ICsyNTEsNyBAQAogCWlkcl9pbml0KCZjbGllbnQtPnJlc291cmNlX2lkcik7CiAJSU5JVF9MSVNUX0hFQUQoJmNsaWVudC0+ZXZlbnRfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2xpZW50LT53YWl0KTsKKwlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5waHlfcmVjZWl2ZXJfbGluayk7CiAJa3JlZl9pbml0KCZjbGllbnQtPmtyZWYpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OwpAQCAtMzA5LDcgKzM0Miw3IEBACiAJZXZlbnQtPmdlbmVyYXRpb24gICAgPSBjbGllbnQtPmRldmljZS0+Z2VuZXJhdGlvbjsKIAlldmVudC0+bm9kZV9pZCAgICAgICA9IGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkOwogCWV2ZW50LT5sb2NhbF9ub2RlX2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKLQlldmVudC0+Ym1fbm9kZV9pZCAgICA9IDA7IC8qIEZJWE1FOiBXZSBkb24ndCB0cmFjayB0aGUgQk0uICovCisJZXZlbnQtPmJtX25vZGVfaWQgICAgPSBjYXJkLT5ibV9ub2RlX2lkOwogCWV2ZW50LT5pcm1fbm9kZV9pZCAgID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CiAJZXZlbnQtPnJvb3Rfbm9kZV9pZCAgPSBjYXJkLT5yb290X25vZGUtPm5vZGVfaWQ7CiAKQEAgLTM0MCw3ICszNzMsNyBAQAogCiAJZSA9IGt6YWxsb2Moc2l6ZW9mKCplKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGUgPT0gTlVMTCkgewotCQlmd19ub3RpZnkoIk91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGJ1cyByZXNldCBldmVudFxuIik7CisJCWZ3X25vdGlmeSgiT3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgZXZlbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODYsNiArNDE5LDkgQEAKIAlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UJYWxsb2NhdGVfaXNvX3Jlc291cmNlOwogCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldAlzZW5kX3N0cmVhbV9wYWNrZXQ7CiAJc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyMgkJZ2V0X2N5Y2xlX3RpbWVyMjsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3BoeV9wYWNrZXQJCXNlbmRfcGh5X3BhY2tldDsKKwlzdHJ1Y3QgZndfY2Rldl9yZWNlaXZlX3BoeV9wYWNrZXRzCXJlY2VpdmVfcGh5X3BhY2tldHM7CisJc3RydWN0IGZ3X2NkZXZfc2V0X2lzb19jaGFubmVscwkJc2V0X2lzb19jaGFubmVsczsKIH07CiAKIHN0YXRpYyBpbnQgaW9jdGxfZ2V0X2luZm8oc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKQEAgLTM5NSw3ICs0MzEsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCWNsaWVudC0+dmVyc2lvbiA9IGEtPnZlcnNpb247Ci0JYS0+dmVyc2lvbiA9IEZXX0NERVZfVkVSU0lPTjsKKwlhLT52ZXJzaW9uID0gRldfQ0RFVl9LRVJORUxfVkVSU0lPTjsKIAlhLT5jYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmluZGV4OwogCiAJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwpAQCAtNTU0LDYgKzU5MCwxMCBAQAogCSAgICAocmVxdWVzdC0+bGVuZ3RoID4gNDA5NiB8fCByZXF1ZXN0LT5sZW5ndGggPiA1MTIgPDwgc3BlZWQpKQogCQlyZXR1cm4gLUVJTzsKIAorCWlmIChyZXF1ZXN0LT50Y29kZSA9PSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QgJiYKKwkgICAgcmVxdWVzdC0+bGVuZ3RoIDwgNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAllID0ga21hbGxvYyhzaXplb2YoKmUpICsgcmVxdWVzdC0+bGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTYyNiwyOCArNjY2LDM0IEBACiAJaWYgKGlzX2ZjcF9yZXF1ZXN0KHItPnJlcXVlc3QpKQogCQlrZnJlZShyLT5kYXRhKTsKIAllbHNlCi0JCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsCi0JCQkJIFJDT0RFX0NPTkZMSUNUX0VSUk9SKTsKKwkJZndfc2VuZF9yZXNwb25zZShyLT5jYXJkLCByLT5yZXF1ZXN0LCBSQ09ERV9DT05GTElDVF9FUlJPUik7CisKKwlmd19jYXJkX3B1dChyLT5jYXJkKTsKIAlrZnJlZShyKTsKIH0KIAogc3RhdGljIHZvaWQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAogCQkJICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCi0JCQkgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJCSAgIGludCBnZW5lcmF0aW9uLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAogCQkJICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpoYW5kbGVyID0gY2FsbGJhY2tfZGF0YTsKIAlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqcjsKIAlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9ldmVudCAqZTsKKwlzaXplX3QgZXZlbnRfc2l6ZTA7CiAJdm9pZCAqZmNwX2ZyYW1lID0gTlVMTDsKIAlpbnQgcmV0OwogCisJLyogY2FyZCBtYXkgYmUgZGlmZmVyZW50IGZyb20gaGFuZGxlci0+Y2xpZW50LT5kZXZpY2UtPmNhcmQgKi8KKwlmd19jYXJkX2dldChjYXJkKTsKKwogCXIgPSBrbWFsbG9jKHNpemVvZigqciksIEdGUF9BVE9NSUMpOwogCWUgPSBrbWFsbG9jKHNpemVvZigqZSksIEdGUF9BVE9NSUMpOwotCWlmIChyID09IE5VTEwgfHwgZSA9PSBOVUxMKQorCWlmIChyID09IE5VTEwgfHwgZSA9PSBOVUxMKSB7CisJCWZ3X25vdGlmeSgiT3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgZXZlbnRcbiIpOwogCQlnb3RvIGZhaWxlZDsKLQorCX0KKwlyLT5jYXJkICAgID0gY2FyZDsKIAlyLT5yZXF1ZXN0ID0gcmVxdWVzdDsKIAlyLT5kYXRhICAgID0gcGF5bG9hZDsKIAlyLT5sZW5ndGggID0gbGVuZ3RoOwpAQCAtNjY5LDE1ICs3MTUsMzcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsZWQ7CiAKLQllLT5yZXF1ZXN0LnR5cGUgICAgPSBGV19DREVWX0VWRU5UX1JFUVVFU1Q7Ci0JZS0+cmVxdWVzdC50Y29kZSAgID0gdGNvZGU7Ci0JZS0+cmVxdWVzdC5vZmZzZXQgID0gb2Zmc2V0OwotCWUtPnJlcXVlc3QubGVuZ3RoICA9IGxlbmd0aDsKLQllLT5yZXF1ZXN0LmhhbmRsZSAgPSByLT5yZXNvdXJjZS5oYW5kbGU7Ci0JZS0+cmVxdWVzdC5jbG9zdXJlID0gaGFuZGxlci0+Y2xvc3VyZTsKKwlpZiAoaGFuZGxlci0+Y2xpZW50LT52ZXJzaW9uIDwgRldfQ0RFVl9WRVJTSU9OX0VWRU5UX1JFUVVFU1QyKSB7CisJCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QgKnJlcSA9ICZlLT5yZXEucmVxdWVzdDsKKworCQlpZiAodGNvZGUgJiAweDEwKQorCQkJdGNvZGUgPSBUQ09ERV9MT0NLX1JFUVVFU1Q7CisKKwkJcmVxLT50eXBlCT0gRldfQ0RFVl9FVkVOVF9SRVFVRVNUOworCQlyZXEtPnRjb2RlCT0gdGNvZGU7CisJCXJlcS0+b2Zmc2V0CT0gb2Zmc2V0OworCQlyZXEtPmxlbmd0aAk9IGxlbmd0aDsKKwkJcmVxLT5oYW5kbGUJPSByLT5yZXNvdXJjZS5oYW5kbGU7CisJCXJlcS0+Y2xvc3VyZQk9IGhhbmRsZXItPmNsb3N1cmU7CisJCWV2ZW50X3NpemUwCT0gc2l6ZW9mKCpyZXEpOworCX0gZWxzZSB7CisJCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QyICpyZXEgPSAmZS0+cmVxLnJlcXVlc3QyOworCisJCXJlcS0+dHlwZQk9IEZXX0NERVZfRVZFTlRfUkVRVUVTVDI7CisJCXJlcS0+dGNvZGUJPSB0Y29kZTsKKwkJcmVxLT5vZmZzZXQJPSBvZmZzZXQ7CisJCXJlcS0+c291cmNlX25vZGVfaWQgPSBzb3VyY2U7CisJCXJlcS0+ZGVzdGluYXRpb25fbm9kZV9pZCA9IGRlc3RpbmF0aW9uOworCQlyZXEtPmNhcmQJPSBjYXJkLT5pbmRleDsKKwkJcmVxLT5nZW5lcmF0aW9uCT0gZ2VuZXJhdGlvbjsKKwkJcmVxLT5sZW5ndGgJPSBsZW5ndGg7CisJCXJlcS0+aGFuZGxlCT0gci0+cmVzb3VyY2UuaGFuZGxlOworCQlyZXEtPmNsb3N1cmUJPSBoYW5kbGVyLT5jbG9zdXJlOworCQlldmVudF9zaXplMAk9IHNpemVvZigqcmVxKTsKKwl9CiAKIAlxdWV1ZV9ldmVudChoYW5kbGVyLT5jbGllbnQsICZlLT5ldmVudCwKLQkJICAgICZlLT5yZXF1ZXN0LCBzaXplb2YoZS0+cmVxdWVzdCksIHItPmRhdGEsIGxlbmd0aCk7CisJCSAgICAmZS0+cmVxLCBldmVudF9zaXplMCwgci0+ZGF0YSwgbGVuZ3RoKTsKIAlyZXR1cm47CiAKICBmYWlsZWQ6CkBAIC02ODcsNiArNzU1LDggQEAKIAogCWlmICghaXNfZmNwX3JlcXVlc3QocmVxdWVzdCkpCiAJCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQ09ORkxJQ1RfRVJST1IpOworCisJZndfY2FyZF9wdXQoY2FyZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKQEAgLTcxMSw3ICs3ODEsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZWdpb24uc3RhcnQgPSBhLT5vZmZzZXQ7Ci0JcmVnaW9uLmVuZCAgID0gYS0+b2Zmc2V0ICsgYS0+bGVuZ3RoOworCWlmIChjbGllbnQtPnZlcnNpb24gPCBGV19DREVWX1ZFUlNJT05fQUxMT0NBVEVfUkVHSU9OX0VORCkKKwkJcmVnaW9uLmVuZCA9IGEtPm9mZnNldCArIGEtPmxlbmd0aDsKKwllbHNlCisJCXJlZ2lvbi5lbmQgPSBhLT5yZWdpb25fZW5kOworCiAJci0+aGFuZGxlci5sZW5ndGggICAgICAgICAgID0gYS0+bGVuZ3RoOwogCXItPmhhbmRsZXIuYWRkcmVzc19jYWxsYmFjayA9IGhhbmRsZV9yZXF1ZXN0OwogCXItPmhhbmRsZXIuY2FsbGJhY2tfZGF0YSAgICA9IHI7CkBAIC03MjMsNiArNzk3LDcgQEAKIAkJa2ZyZWUocik7CiAJCXJldHVybiByZXQ7CiAJfQorCWEtPm9mZnNldCA9IHItPmhhbmRsZXIub2Zmc2V0OwogCiAJci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyOwogCXJldCA9IGFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmci0+cmVzb3VyY2UsIEdGUF9LRVJORUwpOwpAQCAtNzU3LDE1ICs4MzIsMTkgQEAKIAlpZiAoaXNfZmNwX3JlcXVlc3Qoci0+cmVxdWVzdCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGEtPmxlbmd0aCA8IHItPmxlbmd0aCkKLQkJci0+bGVuZ3RoID0gYS0+bGVuZ3RoOwotCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihhLT5kYXRhKSwgci0+bGVuZ3RoKSkgeworCWlmIChhLT5sZW5ndGggIT0gZndfZ2V0X3Jlc3BvbnNlX2xlbmd0aChyLT5yZXF1ZXN0KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlrZnJlZShyLT5yZXF1ZXN0KTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihhLT5kYXRhKSwgYS0+bGVuZ3RoKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlrZnJlZShyLT5yZXF1ZXN0KTsKIAkJZ290byBvdXQ7CiAJfQotCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHItPnJlcXVlc3QsIGEtPnJjb2RlKTsKKwlmd19zZW5kX3Jlc3BvbnNlKHItPmNhcmQsIHItPnJlcXVlc3QsIGEtPnJjb2RlKTsKICBvdXQ6CisJZndfY2FyZF9wdXQoci0+Y2FyZCk7CiAJa2ZyZWUocik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNzczLDggKzg1Miw5IEBACiAKIHN0YXRpYyBpbnQgaW9jdGxfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0JcmV0dXJuIGZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KGNsaWVudC0+ZGV2aWNlLT5jYXJkLAorCWZ3X3NjaGVkdWxlX2J1c19yZXNldChjbGllbnQtPmRldmljZS0+Y2FyZCwgdHJ1ZSwKIAkJCWFyZy0+aW5pdGlhdGVfYnVzX3Jlc2V0LnR5cGUgPT0gRldfQ0RFVl9TSE9SVF9SRVNFVCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCkBAIC04NDUsMTAgKzkyNSwxMSBAQAogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGRhdGE7CiAJc3RydWN0IGlzb19pbnRlcnJ1cHRfZXZlbnQgKmU7CiAKLQllID0ga3phbGxvYyhzaXplb2YoKmUpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGUgPT0gTlVMTCkKKwllID0ga21hbGxvYyhzaXplb2YoKmUpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7CisJaWYgKGUgPT0gTlVMTCkgeworCQlmd19ub3RpZnkoIk91dCBvZiBtZW1vcnkgd2hlbiBhbGxvY2F0aW5nIGV2ZW50XG4iKTsKIAkJcmV0dXJuOwotCisJfQogCWUtPmludGVycnVwdC50eXBlICAgICAgPSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQ7CiAJZS0+aW50ZXJydXB0LmNsb3N1cmUgICA9IGNsaWVudC0+aXNvX2Nsb3N1cmU7CiAJZS0+aW50ZXJydXB0LmN5Y2xlICAgICA9IGN5Y2xlOwpAQCAtODU4LDI3ICs5MzksNTQgQEAKIAkJICAgIHNpemVvZihlLT5pbnRlcnJ1cHQpICsgaGVhZGVyX2xlbmd0aCwgTlVMTCwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIGlzb19tY19jYWxsYmFjayhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsCisJCQkgICAgZG1hX2FkZHJfdCBjb21wbGV0ZWQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZGF0YTsKKwlzdHJ1Y3QgaXNvX2ludGVycnVwdF9tY19ldmVudCAqZTsKKworCWUgPSBrbWFsbG9jKHNpemVvZigqZSksIEdGUF9BVE9NSUMpOworCWlmIChlID09IE5VTEwpIHsKKwkJZndfbm90aWZ5KCJPdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBldmVudFxuIik7CisJCXJldHVybjsKKwl9CisJZS0+aW50ZXJydXB0LnR5cGUgICAgICA9IEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVF9NVUxUSUNIQU5ORUw7CisJZS0+aW50ZXJydXB0LmNsb3N1cmUgICA9IGNsaWVudC0+aXNvX2Nsb3N1cmU7CisJZS0+aW50ZXJydXB0LmNvbXBsZXRlZCA9IGZ3X2lzb19idWZmZXJfbG9va3VwKCZjbGllbnQtPmJ1ZmZlciwKKwkJCQkJCSAgICAgIGNvbXBsZXRlZCk7CisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsICZlLT5pbnRlcnJ1cHQsCisJCSAgICBzaXplb2YoZS0+aW50ZXJydXB0KSwgTlVMTCwgMCk7Cit9CisKIHN0YXRpYyBpbnQgaW9jdGxfY3JlYXRlX2lzb19jb250ZXh0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7CiAJc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0ICphID0gJmFyZy0+Y3JlYXRlX2lzb19jb250ZXh0OwogCXN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dDsKKwlmd19pc29fY2FsbGJhY2tfdCBjYjsKIAotCS8qIFdlIG9ubHkgc3VwcG9ydCBvbmUgY29udGV4dCBhdCB0aGlzIHRpbWUuICovCi0JaWYgKGNsaWVudC0+aXNvX2NvbnRleHQgIT0gTlVMTCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChhLT5jaGFubmVsID4gNjMpCi0JCXJldHVybiAtRUlOVkFMOworCUJVSUxEX0JVR19PTihGV19DREVWX0lTT19DT05URVhUX1RSQU5TTUlUICE9IEZXX0lTT19DT05URVhUX1RSQU5TTUlUIHx8CisJCSAgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFICAhPSBGV19JU09fQ09OVEVYVF9SRUNFSVZFICB8fAorCQkgICAgIEZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUwgIT0KKwkJCQkJRldfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUwpOwogCiAJc3dpdGNoIChhLT50eXBlKSB7Ci0JY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFOgotCQlpZiAoYS0+aGVhZGVyX3NpemUgPCA0IHx8IChhLT5oZWFkZXJfc2l6ZSAmIDMpKQorCWNhc2UgRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQ6CisJCWlmIChhLT5zcGVlZCA+IFNDT0RFXzMyMDAgfHwgYS0+Y2hhbm5lbCA+IDYzKQogCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY2IgPSBpc29fY2FsbGJhY2s7CiAJCWJyZWFrOwogCi0JY2FzZSBGV19JU09fQ09OVEVYVF9UUkFOU01JVDoKLQkJaWYgKGEtPnNwZWVkID4gU0NPREVfMzIwMCkKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkU6CisJCWlmIChhLT5oZWFkZXJfc2l6ZSA8IDQgfHwgKGEtPmhlYWRlcl9zaXplICYgMykgfHwKKwkJICAgIGEtPmNoYW5uZWwgPiA2MykKIAkJCXJldHVybiAtRUlOVkFMOworCisJCWNiID0gaXNvX2NhbGxiYWNrOworCQlicmVhazsKKworCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUw6CisJCWNiID0gKGZ3X2lzb19jYWxsYmFja190KWlzb19tY19jYWxsYmFjazsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtODg2LDIwICs5OTQsMzcgQEAKIAl9CiAKIAljb250ZXh0ID0gZndfaXNvX2NvbnRleHRfY3JlYXRlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCBhLT50eXBlLAotCQkJCQlhLT5jaGFubmVsLCBhLT5zcGVlZCwgYS0+aGVhZGVyX3NpemUsCi0JCQkJCWlzb19jYWxsYmFjaywgY2xpZW50KTsKKwkJCWEtPmNoYW5uZWwsIGEtPnNwZWVkLCBhLT5oZWFkZXJfc2l6ZSwgY2IsIGNsaWVudCk7CiAJaWYgKElTX0VSUihjb250ZXh0KSkKIAkJcmV0dXJuIFBUUl9FUlIoY29udGV4dCk7CiAKKwkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIGNvbnRleHQgYXQgdGhpcyB0aW1lLiAqLworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQgIT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJCWZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koY29udGV4dCk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCWNsaWVudC0+aXNvX2Nsb3N1cmUgPSBhLT5jbG9zdXJlOwogCWNsaWVudC0+aXNvX2NvbnRleHQgPSBjb250ZXh0OworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKIAotCS8qIFdlIG9ubHkgc3VwcG9ydCBvbmUgY29udGV4dCBhdCB0aGlzIHRpbWUuICovCiAJYS0+aGFuZGxlID0gMDsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGlvY3RsX3NldF9pc29fY2hhbm5lbHMoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKK3sKKwlzdHJ1Y3QgZndfY2Rldl9zZXRfaXNvX2NoYW5uZWxzICphID0gJmFyZy0+c2V0X2lzb19jaGFubmVsczsKKwlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCA9IGNsaWVudC0+aXNvX2NvbnRleHQ7CisKKwlpZiAoY3R4ID09IE5VTEwgfHwgYS0+aGFuZGxlICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGZ3X2lzb19jb250ZXh0X3NldF9jaGFubmVscyhjdHgsICZhLT5jaGFubmVscyk7Cit9CisKIC8qIE1hY3JvcyBmb3IgZGVjb2RpbmcgdGhlIGlzbyBwYWNrZXQgY29udHJvbCBoZWFkZXIuICovCiAjZGVmaW5lIEdFVF9QQVlMT0FEX0xFTkdUSCh2KQkoKHYpICYgMHhmZmZmKQogI2RlZmluZSBHRVRfSU5URVJSVVBUKHYpCSgoKHYpID4+IDE2KSAmIDB4MDEpCkBAIC05MTMsNyArMTAzOCw3IEBACiAJc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvICphID0gJmFyZy0+cXVldWVfaXNvOwogCXN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICpwLCAqZW5kLCAqbmV4dDsKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCA9IGNsaWVudC0+aXNvX2NvbnRleHQ7Ci0JdW5zaWduZWQgbG9uZyBwYXlsb2FkLCBidWZmZXJfZW5kLCBoZWFkZXJfbGVuZ3RoOworCXVuc2lnbmVkIGxvbmcgcGF5bG9hZCwgYnVmZmVyX2VuZCwgdHJhbnNtaXRfaGVhZGVyX2J5dGVzID0gMDsKIAl1MzIgY29udHJvbDsKIAlpbnQgY291bnQ7CiAJc3RydWN0IHsKQEAgLTkzMyw3ICsxMDU4LDYgQEAKIAkgKiB1c2UgdGhlIGluZGlyZWN0IHBheWxvYWQsIHRoZSBpc28gYnVmZmVyIG5lZWQgbm90IGJlIG1hcHBlZAogCSAqIGFuZCB0aGUgYS0+ZGF0YSBwb2ludGVyIGlzIGlnbm9yZWQuCiAJICovCi0KIAlwYXlsb2FkID0gKHVuc2lnbmVkIGxvbmcpYS0+ZGF0YSAtIGNsaWVudC0+dm1fc3RhcnQ7CiAJYnVmZmVyX2VuZCA9IGNsaWVudC0+YnVmZmVyLnBhZ2VfY291bnQgPDwgUEFHRV9TSElGVDsKIAlpZiAoYS0+ZGF0YSA9PSAwIHx8IGNsaWVudC0+YnVmZmVyLnBhZ2VzID09IE5VTEwgfHwKQEAgLTk0Miw4ICsxMDY2LDEwIEBACiAJCWJ1ZmZlcl9lbmQgPSAwOwogCX0KIAotCXAgPSAoc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCBfX3VzZXIgKil1NjRfdG9fdXB0cihhLT5wYWNrZXRzKTsKKwlpZiAoY3R4LT50eXBlID09IEZXX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMICYmIHBheWxvYWQgJiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKIAorCXAgPSAoc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCBfX3VzZXIgKil1NjRfdG9fdXB0cihhLT5wYWNrZXRzKTsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgcCwgYS0+c2l6ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCkBAIC05NTksMzEgKzEwODUsMzIgQEAKIAkJdS5wYWNrZXQuc3kgPSBHRVRfU1koY29udHJvbCk7CiAJCXUucGFja2V0LmhlYWRlcl9sZW5ndGggPSBHRVRfSEVBREVSX0xFTkdUSChjb250cm9sKTsKIAotCQlpZiAoY3R4LT50eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKSB7Ci0JCQlpZiAodS5wYWNrZXQuaGVhZGVyX2xlbmd0aCAlIDQgIT0gMCkKKwkJc3dpdGNoIChjdHgtPnR5cGUpIHsKKwkJY2FzZSBGV19JU09fQ09OVEVYVF9UUkFOU01JVDoKKwkJCWlmICh1LnBhY2tldC5oZWFkZXJfbGVuZ3RoICYgMykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWhlYWRlcl9sZW5ndGggPSB1LnBhY2tldC5oZWFkZXJfbGVuZ3RoOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFdlIHJlcXVpcmUgdGhhdCBoZWFkZXJfbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YKLQkJCSAqIHRoZSBmaXhlZCBoZWFkZXIgc2l6ZSwgY3R4LT5oZWFkZXJfc2l6ZS4KLQkJCSAqLwotCQkJaWYgKGN0eC0+aGVhZGVyX3NpemUgPT0gMCkgewotCQkJCWlmICh1LnBhY2tldC5oZWFkZXJfbGVuZ3RoID4gMCkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9IGVsc2UgaWYgKHUucGFja2V0LmhlYWRlcl9sZW5ndGggPT0gMCB8fAotCQkJCSAgIHUucGFja2V0LmhlYWRlcl9sZW5ndGggJSBjdHgtPmhlYWRlcl9zaXplICE9IDApIHsKKwkJCXRyYW5zbWl0X2hlYWRlcl9ieXRlcyA9IHUucGFja2V0LmhlYWRlcl9sZW5ndGg7CisJCQlicmVhazsKKworCQljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkU6CisJCQlpZiAodS5wYWNrZXQuaGVhZGVyX2xlbmd0aCA9PSAwIHx8CisJCQkgICAgdS5wYWNrZXQuaGVhZGVyX2xlbmd0aCAlIGN0eC0+aGVhZGVyX3NpemUgIT0gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWhlYWRlcl9sZW5ndGggPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTDoKKwkJCWlmICh1LnBhY2tldC5wYXlsb2FkX2xlbmd0aCA9PSAwIHx8CisJCQkgICAgdS5wYWNrZXQucGF5bG9hZF9sZW5ndGggJiAzKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CiAJCX0KIAogCQluZXh0ID0gKHN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICopCi0JCQkmcC0+aGVhZGVyW2hlYWRlcl9sZW5ndGggLyA0XTsKKwkJCSZwLT5oZWFkZXJbdHJhbnNtaXRfaGVhZGVyX2J5dGVzIC8gNF07CiAJCWlmIChuZXh0ID4gZW5kKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChfX2NvcHlfZnJvbV91c2VyCi0JCSAgICAodS5wYWNrZXQuaGVhZGVyLCBwLT5oZWFkZXIsIGhlYWRlcl9sZW5ndGgpKQorCQkgICAgKHUucGFja2V0LmhlYWRlciwgcC0+aGVhZGVyLCB0cmFuc21pdF9oZWFkZXJfYnl0ZXMpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWlmICh1LnBhY2tldC5za2lwICYmIGN0eC0+dHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCAmJgogCQkgICAgdS5wYWNrZXQuaGVhZGVyX2xlbmd0aCArIHUucGFja2V0LnBheWxvYWRfbGVuZ3RoID4gMCkKQEAgLTEwMTEsNiArMTEzOCwxMyBAQAogewogCXN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbyAqYSA9ICZhcmctPnN0YXJ0X2lzbzsKIAorCUJVSUxEX0JVR19PTigKKwkgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUcwICE9IEZXX0lTT19DT05URVhUX01BVENIX1RBRzAgfHwKKwkgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUcxICE9IEZXX0lTT19DT05URVhUX01BVENIX1RBRzEgfHwKKwkgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUcyICE9IEZXX0lTT19DT05URVhUX01BVENIX1RBRzIgfHwKKwkgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9UQUczICE9IEZXX0lTT19DT05URVhUX01BVENIX1RBRzMgfHwKKwkgICAgRldfQ0RFVl9JU09fQ09OVEVYVF9NQVRDSF9BTExfVEFHUyAhPSBGV19JU09fQ09OVEVYVF9NQVRDSF9BTExfVEFHUyk7CisKIAlpZiAoY2xpZW50LT5pc29fY29udGV4dCA9PSBOVUxMIHx8IGEtPmhhbmRsZSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTA0Miw3ICsxMTc2LDcgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQljeWNsZV90aW1lID0gY2FyZC0+ZHJpdmVyLT5nZXRfY3ljbGVfdGltZShjYXJkKTsKKwljeWNsZV90aW1lID0gY2FyZC0+ZHJpdmVyLT5yZWFkX2NzcihjYXJkLCBDU1JfQ1lDTEVfVElNRSk7CiAKIAlzd2l0Y2ggKGEtPmNsa19pZCkgewogCWNhc2UgQ0xPQ0tfUkVBTFRJTUU6ICAgICAgZ2V0bnN0aW1lb2ZkYXkoJnRzKTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzIzLDI4ICsxNDU3LDEzNSBAQAogCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmcmVxdWVzdCwgZGVzdCwgYS0+c3BlZWQpOwogfQogCitzdGF0aWMgdm9pZCBvdXRib3VuZF9waHlfcGFja2V0X2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJCQkJIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBvdXRib3VuZF9waHlfcGFja2V0X2V2ZW50ICplID0KKwkJY29udGFpbmVyX29mKHBhY2tldCwgc3RydWN0IG91dGJvdW5kX3BoeV9wYWNrZXRfZXZlbnQsIHApOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwkvKiBleHBlY3RlZDogKi8KKwljYXNlIEFDS19DT01QTEVURToJZS0+cGh5X3BhY2tldC5yY29kZSA9IFJDT0RFX0NPTVBMRVRFOwlicmVhazsKKwkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuIHdpdGggUEhZIHBhY2tldHM6ICovCisJY2FzZSBBQ0tfUEVORElORzoJZS0+cGh5X3BhY2tldC5yY29kZSA9IFJDT0RFX0NPTVBMRVRFOwlicmVhazsKKwljYXNlIEFDS19CVVNZX1g6CisJY2FzZSBBQ0tfQlVTWV9BOgorCWNhc2UgQUNLX0JVU1lfQjoJZS0+cGh5X3BhY2tldC5yY29kZSA9IFJDT0RFX0JVU1k7CWJyZWFrOworCWNhc2UgQUNLX0RBVEFfRVJST1I6CWUtPnBoeV9wYWNrZXQucmNvZGUgPSBSQ09ERV9EQVRBX0VSUk9SOwlicmVhazsKKwljYXNlIEFDS19UWVBFX0VSUk9SOgllLT5waHlfcGFja2V0LnJjb2RlID0gUkNPREVfVFlQRV9FUlJPUjsJYnJlYWs7CisJLyogc3RhbGUgZ2VuZXJhdGlvbjsgY2FuY2VsbGVkOyBvbiBjZXJ0YWluIGNvbnRyb2xsZXJzOiBubyBhY2sgKi8KKwlkZWZhdWx0OgkJZS0+cGh5X3BhY2tldC5yY29kZSA9IHN0YXR1czsJCWJyZWFrOworCX0KKwllLT5waHlfcGFja2V0LmRhdGFbMF0gPSBwYWNrZXQtPnRpbWVzdGFtcDsKKworCXF1ZXVlX2V2ZW50KGUtPmNsaWVudCwgJmUtPmV2ZW50LCAmZS0+cGh5X3BhY2tldCwKKwkJICAgIHNpemVvZihlLT5waHlfcGFja2V0KSArIGUtPnBoeV9wYWNrZXQubGVuZ3RoLCBOVUxMLCAwKTsKKwljbGllbnRfcHV0KGUtPmNsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9waHlfcGFja2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCit7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9waHlfcGFja2V0ICphID0gJmFyZy0+c2VuZF9waHlfcGFja2V0OworCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CisJc3RydWN0IG91dGJvdW5kX3BoeV9wYWNrZXRfZXZlbnQgKmU7CisKKwkvKiBBY2Nlc3MgcG9saWN5OiBBbGxvdyB0aGlzIGlvY3RsIG9ubHkgb24gbG9jYWwgbm9kZXMnIGRldmljZSBmaWxlcy4gKi8KKwlpZiAoIWNsaWVudC0+ZGV2aWNlLT5pc19sb2NhbCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwllID0ga3phbGxvYyhzaXplb2YoKmUpICsgNCwgR0ZQX0tFUk5FTCk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbGllbnRfZ2V0KGNsaWVudCk7CisJZS0+Y2xpZW50CQk9IGNsaWVudDsKKwllLT5wLnNwZWVkCQk9IFNDT0RFXzEwMDsKKwllLT5wLmdlbmVyYXRpb24JCT0gYS0+Z2VuZXJhdGlvbjsKKwllLT5wLmhlYWRlclswXQkJPSBhLT5kYXRhWzBdOworCWUtPnAuaGVhZGVyWzFdCQk9IGEtPmRhdGFbMV07CisJZS0+cC5oZWFkZXJfbGVuZ3RoCT0gODsKKwllLT5wLmNhbGxiYWNrCQk9IG91dGJvdW5kX3BoeV9wYWNrZXRfY2FsbGJhY2s7CisJZS0+cGh5X3BhY2tldC5jbG9zdXJlCT0gYS0+Y2xvc3VyZTsKKwllLT5waHlfcGFja2V0LnR5cGUJPSBGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfU0VOVDsKKwlpZiAoaXNfcGluZ19wYWNrZXQoYS0+ZGF0YSkpCisJCQllLT5waHlfcGFja2V0Lmxlbmd0aCA9IDQ7CisKKwljYXJkLT5kcml2ZXItPnNlbmRfcmVxdWVzdChjYXJkLCAmZS0+cCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpb2N0bF9yZWNlaXZlX3BoeV9wYWNrZXRzKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCit7CisJc3RydWN0IGZ3X2NkZXZfcmVjZWl2ZV9waHlfcGFja2V0cyAqYSA9ICZhcmctPnJlY2VpdmVfcGh5X3BhY2tldHM7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZDsKKworCS8qIEFjY2VzcyBwb2xpY3k6IEFsbG93IHRoaXMgaW9jdGwgb25seSBvbiBsb2NhbCBub2RlcycgZGV2aWNlIGZpbGVzLiAqLworCWlmICghY2xpZW50LT5kZXZpY2UtPmlzX2xvY2FsKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCisJbGlzdF9tb3ZlX3RhaWwoJmNsaWVudC0+cGh5X3JlY2VpdmVyX2xpbmssICZjYXJkLT5waHlfcmVjZWl2ZXJfbGlzdCk7CisJY2xpZW50LT5waHlfcmVjZWl2ZXJfY2xvc3VyZSA9IGEtPmNsb3N1cmU7CisKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZndfY2Rldl9oYW5kbGVfcGh5X3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IGluYm91bmRfcGh5X3BhY2tldF9ldmVudCAqZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmY2FyZC0+cGh5X3JlY2VpdmVyX2xpc3QsIHBoeV9yZWNlaXZlcl9saW5rKSB7CisJCWUgPSBrbWFsbG9jKHNpemVvZigqZSkgKyA4LCBHRlBfQVRPTUlDKTsKKwkJaWYgKGUgPT0gTlVMTCkgeworCQkJZndfbm90aWZ5KCJPdXQgb2YgbWVtb3J5IHdoZW4gYWxsb2NhdGluZyBldmVudFxuIik7CisJCQlicmVhazsKKwkJfQorCQllLT5waHlfcGFja2V0LmNsb3N1cmUJPSBjbGllbnQtPnBoeV9yZWNlaXZlcl9jbG9zdXJlOworCQllLT5waHlfcGFja2V0LnR5cGUJPSBGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfUkVDRUlWRUQ7CisJCWUtPnBoeV9wYWNrZXQucmNvZGUJPSBSQ09ERV9DT01QTEVURTsKKwkJZS0+cGh5X3BhY2tldC5sZW5ndGgJPSA4OworCQllLT5waHlfcGFja2V0LmRhdGFbMF0JPSBwLT5oZWFkZXJbMV07CisJCWUtPnBoeV9wYWNrZXQuZGF0YVsxXQk9IHAtPmhlYWRlclsyXTsKKwkJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsCisJCQkgICAgJmUtPnBoeV9wYWNrZXQsIHNpemVvZihlLT5waHlfcGFja2V0KSArIDgsIE5VTEwsIDApOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIGludCAoKiBjb25zdCBpb2N0bF9oYW5kbGVyc1tdKShzdHJ1Y3QgY2xpZW50ICosIHVuaW9uIGlvY3RsX2FyZyAqKSA9IHsKLQlpb2N0bF9nZXRfaW5mbywKLQlpb2N0bF9zZW5kX3JlcXVlc3QsCi0JaW9jdGxfYWxsb2NhdGUsCi0JaW9jdGxfZGVhbGxvY2F0ZSwKLQlpb2N0bF9zZW5kX3Jlc3BvbnNlLAotCWlvY3RsX2luaXRpYXRlX2J1c19yZXNldCwKLQlpb2N0bF9hZGRfZGVzY3JpcHRvciwKLQlpb2N0bF9yZW1vdmVfZGVzY3JpcHRvciwKLQlpb2N0bF9jcmVhdGVfaXNvX2NvbnRleHQsCi0JaW9jdGxfcXVldWVfaXNvLAotCWlvY3RsX3N0YXJ0X2lzbywKLQlpb2N0bF9zdG9wX2lzbywKLQlpb2N0bF9nZXRfY3ljbGVfdGltZXIsCi0JaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlLAotCWlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlLAotCWlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlLAotCWlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2UsCi0JaW9jdGxfZ2V0X3NwZWVkLAotCWlvY3RsX3NlbmRfYnJvYWRjYXN0X3JlcXVlc3QsCi0JaW9jdGxfc2VuZF9zdHJlYW1fcGFja2V0LAotCWlvY3RsX2dldF9jeWNsZV90aW1lcjIsCisJWzB4MDBdID0gaW9jdGxfZ2V0X2luZm8sCisJWzB4MDFdID0gaW9jdGxfc2VuZF9yZXF1ZXN0LAorCVsweDAyXSA9IGlvY3RsX2FsbG9jYXRlLAorCVsweDAzXSA9IGlvY3RsX2RlYWxsb2NhdGUsCisJWzB4MDRdID0gaW9jdGxfc2VuZF9yZXNwb25zZSwKKwlbMHgwNV0gPSBpb2N0bF9pbml0aWF0ZV9idXNfcmVzZXQsCisJWzB4MDZdID0gaW9jdGxfYWRkX2Rlc2NyaXB0b3IsCisJWzB4MDddID0gaW9jdGxfcmVtb3ZlX2Rlc2NyaXB0b3IsCisJWzB4MDhdID0gaW9jdGxfY3JlYXRlX2lzb19jb250ZXh0LAorCVsweDA5XSA9IGlvY3RsX3F1ZXVlX2lzbywKKwlbMHgwYV0gPSBpb2N0bF9zdGFydF9pc28sCisJWzB4MGJdID0gaW9jdGxfc3RvcF9pc28sCisJWzB4MGNdID0gaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyLAorCVsweDBkXSA9IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlbMHgwZV0gPSBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZSwKKwlbMHgwZl0gPSBpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZSwKKwlbMHgxMF0gPSBpb2N0bF9kZWFsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlLAorCVsweDExXSA9IGlvY3RsX2dldF9zcGVlZCwKKwlbMHgxMl0gPSBpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0LAorCVsweDEzXSA9IGlvY3RsX3NlbmRfc3RyZWFtX3BhY2tldCwKKwlbMHgxNF0gPSBpb2N0bF9nZXRfY3ljbGVfdGltZXIyLAorCVsweDE1XSA9IGlvY3RsX3NlbmRfcGh5X3BhY2tldCwKKwlbMHgxNl0gPSBpb2N0bF9yZWNlaXZlX3BoeV9wYWNrZXRzLAorCVsweDE3XSA9IGlvY3RsX3NldF9pc29fY2hhbm5lbHMsCiB9OwogCiBzdGF0aWMgaW50IGRpc3BhdGNoX2lvY3RsKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKQEAgLTE0NTIsNiArMTY5MywxMCBAQAogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZXZlbnQgKmV2ZW50LCAqbmV4dF9ldmVudDsKIAorCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+ZGV2aWNlLT5jYXJkLT5sb2NrKTsKKwlsaXN0X2RlbCgmY2xpZW50LT5waHlfcmVjZWl2ZXJfbGluayk7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmRldmljZS0+Y2FyZC0+bG9jayk7CisKIAltdXRleF9sb2NrKCZjbGllbnQtPmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCWxpc3RfZGVsKCZjbGllbnQtPmxpbmspOwogCW11dGV4X3VubG9jaygmY2xpZW50LT5kZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYwppbmRleCA0Yjg1MjNmLi42MTEzYjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCkBAIC0xMDcsMTEgKzEwNywxMSBAQAogfQogCiAvKioKLSAqIGZ3X2Nzcl9zdHJpbmcgLSByZWFkcyBhIHN0cmluZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIFJPTQotICogQGRpcmVjdG9yeTogZS5nLiByb290IGRpcmVjdG9yeSBvciB1bml0IGRpcmVjdG9yeQotICogQGtleTogdGhlIGtleSBvZiB0aGUgcHJlY2VkaW5nIGRpcmVjdG9yeSBlbnRyeQotICogQGJ1Zjogd2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcKLSAqIEBzaXplOiBzaXplIG9mIEBidWYsIGluIGJ5dGVzCisgKiBmd19jc3Jfc3RyaW5nKCkgLSByZWFkcyBhIHN0cmluZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uIFJPTQorICogQGRpcmVjdG9yeToJZS5nLiByb290IGRpcmVjdG9yeSBvciB1bml0IGRpcmVjdG9yeQorICogQGtleToJdGhlIGtleSBvZiB0aGUgcHJlY2VkaW5nIGRpcmVjdG9yeSBlbnRyeQorICogQGJ1ZjoJd2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcKKyAqIEBzaXplOglzaXplIG9mIEBidWYsIGluIGJ5dGVzCiAgKgogICogVGhlIHN0cmluZyBpcyB0YWtlbiBmcm9tIGEgbWluaW1hbCBBU0NJSSB0ZXh0IGRlc2NyaXB0b3IgbGVhZiBhZnRlcgogICogdGhlIGltbWVkaWF0ZSBlbnRyeSB3aXRoIEBrZXkuICBUaGUgc3RyaW5nIGlzIHplcm8tdGVybWluYXRlZC4KQEAgLTExMzYsNiArMTEzNiw3IEBACiAJCWdvdG8gZ2l2ZV91cDsKIAl9CiAKKwlmd19kZXZpY2VfY2Rldl91cGRhdGUoZGV2aWNlKTsKIAljcmVhdGVfdW5pdHMoZGV2aWNlKTsKIAogCS8qIFVzZXJzcGFjZSBtYXkgd2FudCB0byByZS1yZWFkIGF0dHJpYnV0ZXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtaXNvLmMKaW5kZXggOGY1YWViZi4uYzAwM2ZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWlzby5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1pc28uYwpAQCAtMTE4LDYgKzExOCwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChmd19pc29fYnVmZmVyX2Rlc3Ryb3kpOwogCisvKiBDb252ZXJ0IERNQSBhZGRyZXNzIHRvIG9mZnNldCBpbnRvIHZpcnR1YWxseSBjb250aWd1b3VzIGJ1ZmZlci4gKi8KK3NpemVfdCBmd19pc29fYnVmZmVyX2xvb2t1cChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBkbWFfYWRkcl90IGNvbXBsZXRlZCkKK3sKKwlpbnQgaTsKKwlkbWFfYWRkcl90IGFkZHJlc3M7CisJc3NpemVfdCBvZmZzZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyLT5wYWdlX2NvdW50OyBpKyspIHsKKwkJYWRkcmVzcyA9IHBhZ2VfcHJpdmF0ZShidWZmZXItPnBhZ2VzW2ldKTsKKwkJb2Zmc2V0ID0gKHNzaXplX3QpY29tcGxldGVkIC0gKHNzaXplX3QpYWRkcmVzczsKKwkJaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0IDw9IFBBR0VfU0laRSkKKwkJCXJldHVybiAoaSA8PCBQQUdFX1NISUZUKSArIG9mZnNldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGZ3X2lzb19jb250ZXh0ICpmd19pc29fY29udGV4dF9jcmVhdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCWludCB0eXBlLCBpbnQgY2hhbm5lbCwgaW50IHNwZWVkLCBzaXplX3QgaGVhZGVyX3NpemUsCiAJCWZ3X2lzb19jYWxsYmFja190IGNhbGxiYWNrLCB2b2lkICpjYWxsYmFja19kYXRhKQpAQCAtMTM0LDcgKzE1MSw3IEBACiAJY3R4LT5jaGFubmVsID0gY2hhbm5lbDsKIAljdHgtPnNwZWVkID0gc3BlZWQ7CiAJY3R4LT5oZWFkZXJfc2l6ZSA9IGhlYWRlcl9zaXplOwotCWN0eC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwljdHgtPmNhbGxiYWNrLnNjID0gY2FsbGJhY2s7CiAJY3R4LT5jYWxsYmFja19kYXRhID0gY2FsbGJhY2tfZGF0YTsKIAogCXJldHVybiBjdHg7CkBAIC0xNDMsOSArMTYwLDcgQEAKIAogdm9pZCBmd19pc29fY29udGV4dF9kZXN0cm95KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KQogewotCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY3R4LT5jYXJkOwotCi0JY2FyZC0+ZHJpdmVyLT5mcmVlX2lzb19jb250ZXh0KGN0eCk7CisJY3R4LT5jYXJkLT5kcml2ZXItPmZyZWVfaXNvX2NvbnRleHQoY3R4KTsKIH0KIEVYUE9SVF9TWU1CT0woZndfaXNvX2NvbnRleHRfZGVzdHJveSk7CiAKQEAgLTE1NiwxNCArMTcxLDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2lzb19jb250ZXh0X3N0YXJ0KTsKIAoraW50IGZ3X2lzb19jb250ZXh0X3NldF9jaGFubmVscyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwgdTY0ICpjaGFubmVscykKK3sKKwlyZXR1cm4gY3R4LT5jYXJkLT5kcml2ZXItPnNldF9pc29fY2hhbm5lbHMoY3R4LCBjaGFubmVscyk7Cit9CisKIGludCBmd19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKIAkJCSBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAogCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCiAJCQkgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQogewotCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY3R4LT5jYXJkOwotCi0JcmV0dXJuIGNhcmQtPmRyaXZlci0+cXVldWVfaXNvKGN0eCwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOworCXJldHVybiBjdHgtPmNhcmQtPmRyaXZlci0+cXVldWVfaXNvKGN0eCwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOwogfQogRVhQT1JUX1NZTUJPTChmd19pc29fY29udGV4dF9xdWV1ZSk7CiAKQEAgLTI3OSw3ICsyOTcsNyBAQAogfQogCiAvKioKLSAqIGZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UgLSBBbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGEgY2hhbm5lbCBhbmQvb3IgYmFuZHdpZHRoCisgKiBmd19pc29fcmVzb3VyY2VfbWFuYWdlKCkgLSBBbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGEgY2hhbm5lbCBhbmQvb3IgYmFuZHdpZHRoCiAgKgogICogSW4gcGFyYW1ldGVyczogY2FyZCwgZ2VuZXJhdGlvbiwgY2hhbm5lbHNfbWFzaywgYmFuZHdpZHRoLCBhbGxvY2F0ZQogICogT3V0IHBhcmFtZXRlcnM6IGNoYW5uZWwsIGJhbmR3aWR0aApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRvcG9sb2d5LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdG9wb2xvZ3kuYwppbmRleCA5M2VjNjRjLi4wOWJlMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdG9wb2xvZ3kuYwpAQCAtMTc0LDEyICsxNzQsNyBAQAogCXJldHVybiBsaXN0X2VudHJ5KGwsIHN0cnVjdCBmd19ub2RlLCBsaW5rKTsKIH0KIAotLyoqCi0gKiBidWlsZF90cmVlIC0gQnVpbGQgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRvcG9sb2d5Ci0gKiBAc2VsZl9pZHM6IGFycmF5IG9mIHNlbGYgSURzIHRvIGNyZWF0ZSB0aGUgdHJlZSBmcm9tCi0gKiBAc2VsZl9pZF9jb3VudDogdGhlIGxlbmd0aCBvZiB0aGUgc2VsZl9pZHMgYXJyYXkKLSAqIEBsb2NhbF9pZDogdGhlIG5vZGUgSUQgb2YgdGhlIGxvY2FsIG5vZGUKLSAqCisvKgogICogVGhpcyBmdW5jdGlvbiBidWlsZHMgdGhlIHRyZWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRvcG9sb2d5IGdpdmVuCiAgKiBieSB0aGUgc2VsZiBJRHMgZnJvbSB0aGUgbGF0ZXN0IGJ1cyByZXNldC4gIER1cmluZyB0aGUgY29uc3RydWN0aW9uCiAgKiBvZiB0aGUgdHJlZSwgdGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGF0IHRoZSBzZWxmIElEcyBhcmUgdmFsaWQgYW5kCkBAIC00MjAsMTEgKzQxNSwxMCBAQAogCX0KIH0KIAotLyoqCi0gKiB1cGRhdGVfdHJlZSAtIGNvbXBhcmUgdGhlIG9sZCB0b3BvbG9neSB0cmVlIGZvciBjYXJkIHdpdGggdGhlIG5ldwotICogb25lIHNwZWNpZmllZCBieSByb290LiAgUXVldWUgdGhlIG5vZGVzIGFuZCBtYXJrIHRoZW0gYXMgZWl0aGVyCi0gKiBmb3VuZCwgbG9zdCBvciB1cGRhdGVkLiAgVXBkYXRlIHRoZSBub2RlcyBpbiB0aGUgY2FyZCB0b3BvbG9neSB0cmVlCi0gKiBhcyB3ZSBnby4KKy8qCisgKiBDb21wYXJlIHRoZSBvbGQgdG9wb2xvZ3kgdHJlZSBmb3IgY2FyZCB3aXRoIHRoZSBuZXcgb25lIHNwZWNpZmllZCBieSByb290LgorICogUXVldWUgdGhlIG5vZGVzIGFuZCBtYXJrIHRoZW0gYXMgZWl0aGVyIGZvdW5kLCBsb3N0IG9yIHVwZGF0ZWQuCisgKiBVcGRhdGUgdGhlIG5vZGVzIGluIHRoZSBjYXJkIHRvcG9sb2d5IHRyZWUgYXMgd2UgZ28uCiAgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV90cmVlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqcm9vdCkKIHsKQEAgLTUyNCw3ICs1MTgsNyBAQAogfQogCiB2b2lkIGZ3X2NvcmVfaGFuZGxlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uLAotCQkJICAgICAgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqc2VsZl9pZHMpCisJCQkgICAgICBpbnQgc2VsZl9pZF9jb3VudCwgdTMyICpzZWxmX2lkcywgYm9vbCBibV9hYmRpY2F0ZSkKIHsKIAlzdHJ1Y3QgZndfbm9kZSAqbG9jYWxfbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTQzLDcgKzUzNyw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCi0JY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gZmFsc2U7CisJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYWxsb2NhdGVkID0gY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYXV0b19hbGxvY2F0ZWQ7CiAJY2FyZC0+bm9kZV9pZCA9IG5vZGVfaWQ7CiAJLyoKIAkgKiBVcGRhdGUgbm9kZV9pZCBiZWZvcmUgZ2VuZXJhdGlvbiB0byBwcmV2ZW50IGFueWJvZHkgZnJvbSB1c2luZwpAQCAtNTUyLDYgKzU0Niw4IEBACiAJc21wX3dtYigpOwogCWNhcmQtPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOwogCWNhcmQtPnJlc2V0X2ppZmZpZXMgPSBqaWZmaWVzOworCWNhcmQtPmJtX25vZGVfaWQgID0gMHhmZmZmOworCWNhcmQtPmJtX2FiZGljYXRlID0gYm1fYWJkaWNhdGU7CiAJZndfc2NoZWR1bGVfYm1fd29yayhjYXJkLCAwKTsKIAogCWxvY2FsX25vZGUgPSBidWlsZF90cmVlKGNhcmQsIHNlbGZfaWRzLCBzZWxmX2lkX2NvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS10cmFuc2FjdGlvbi5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKaW5kZXggZmRjMzNmZi4uY2E3Y2E1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCVdBUk4oMSwgS0VSTl9FUlIgIndyb25nIHRjb2RlICVkIiwgdGNvZGUpOworCQlXQVJOKDEsICJ3cm9uZyB0Y29kZSAlZCIsIHRjb2RlKTsKIAl9CiAgY29tbW9uOgogCXBhY2tldC0+c3BlZWQgPSBzcGVlZDsKQEAgLTI3Myw0MyArMjczLDUyIEBACiB9CiAKIC8qKgotICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBsb3ctbGV2ZWwgYWNjZXNzIHRvIHRoZSBJRUVFMTM5NCB0cmFuc2FjdGlvbgotICogbG9naWMuICBNb3N0IEMgcHJvZ3JhbXMgd291bGQgdXNlIGVpdGhlciBmd19yZWFkKCksIGZ3X3dyaXRlKCkgb3IKLSAqIGZ3X2xvY2soKSBpbnN0ZWFkIC0gdGhvc2UgZnVuY3Rpb24gYXJlIGNvbnZlbmllbmNlIHdyYXBwZXJzIGZvcgotICogdGhpcyBmdW5jdGlvbi4gIFRoZSBmd19zZW5kX3JlcXVlc3QoKSBmdW5jdGlvbiBpcyBwcmltYXJpbHkKLSAqIHByb3ZpZGVkIGFzIGEgZmxleGlibGUsIG9uZS1zdG9wIGVudHJ5IHBvaW50IGZvciBsYW5ndWFnZXMgYmluZGluZ3MKLSAqIGFuZCBwcm90b2NvbCBiaW5kaW5ncy4KKyAqIGZ3X3NlbmRfcmVxdWVzdCgpIC0gc3VibWl0IGEgcmVxdWVzdCBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbgorICogQGNhcmQ6CQlpbnRlcmZhY2UgdG8gc2VuZCB0aGUgcmVxdWVzdCBhdAorICogQHQ6CQkJdHJhbnNhY3Rpb24gaW5zdGFuY2UgdG8gd2hpY2ggdGhlIHJlcXVlc3QgYmVsb25ncworICogQHRjb2RlOgkJdHJhbnNhY3Rpb24gY29kZQorICogQGRlc3RpbmF0aW9uX2lkOglkZXN0aW5hdGlvbiBub2RlIElELCBjb25zaXN0aW5nIG9mIGJ1c19JRCBhbmQgcGh5X0lECisgKiBAZ2VuZXJhdGlvbjoJCWJ1cyBnZW5lcmF0aW9uIGluIHdoaWNoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGFyZSB2YWxpZAorICogQHNwZWVkOgkJdHJhbnNtaXNzaW9uIHNwZWVkCisgKiBAb2Zmc2V0OgkJNDhiaXQgd2lkZSBvZmZzZXQgaW50byBkZXN0aW5hdGlvbidzIGFkZHJlc3Mgc3BhY2UKKyAqIEBwYXlsb2FkOgkJZGF0YSBwYXlsb2FkIGZvciB0aGUgcmVxdWVzdCBzdWJhY3Rpb24KKyAqIEBsZW5ndGg6CQlsZW5ndGggb2YgdGhlIHBheWxvYWQsIGluIGJ5dGVzCisgKiBAY2FsbGJhY2s6CQlmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkCisgKiBAY2FsbGJhY2tfZGF0YToJZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gY2FsbGJhY2sKICAqCi0gKiBGSVhNRTogRG9jdW1lbnQgdGhpcyBmdW5jdGlvbiBmdXJ0aGVyLCBpbiBwYXJ0aWN1bGFyIHRoZSBwb3NzaWJsZQotICogdmFsdWVzIGZvciByY29kZSBpbiB0aGUgY2FsbGJhY2suICBJbiBzaG9ydCwgd2UgbWFwIEFDS19DT01QTEVURSB0bwotICogUkNPREVfQ09NUExFVEUsIGludGVybmFsIGVycm9ycyBzZXQgZXJybm8gYW5kIHNldCByY29kZSB0bwotICogUkNPREVfU0VORF9FUlJPUiAod2hpY2ggaXMgb3V0IG9mIHJhbmdlIGZvciBzdGFuZGFyZCBpZWVlMTM5NAotICogcmNvZGVzKS4gIEFsbCBvdGhlciByY29kZXMgYXJlIGZvcndhcmRlZCB1bmNoYW5nZWQuICBGb3IgYWxsCi0gKiBlcnJvcnMsIHBheWxvYWQgaXMgTlVMTCwgbGVuZ3RoIGlzIDAuCisgKiBTdWJtaXQgYSByZXF1ZXN0IHBhY2tldCBpbnRvIHRoZSBhc3luY2hyb25vdXMgcmVxdWVzdCB0cmFuc21pc3Npb24gcXVldWUuCisgKiBDYW4gYmUgY2FsbGVkIGZyb20gYXRvbWljIGNvbnRleHQuICBJZiB5b3UgcHJlZmVyIGEgYmxvY2tpbmcgQVBJLCB1c2UKKyAqIGZ3X3J1bl90cmFuc2FjdGlvbigpIGluIGEgY29udGV4dCB0aGF0IGNhbiBzbGVlcC4KICAqCi0gKiBDYW4gbm90IGV4cGVjdCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24KLSAqIHJldHVybnMsIHRob3VnaCB0aGlzIGRvZXMgaGFwcGVuIGluIHNvbWUgY2FzZXMgKEFDS19DT01QTEVURSBhbmQKLSAqIGVycm9ycykuCisgKiBJbiBjYXNlIG9mIGxvY2sgcmVxdWVzdHMsIHNwZWNpZnkgb25lIG9mIHRoZSBmaXJld2lyZS1jb3JlIHNwZWNpZmljICVUQ09ERV8KKyAqIGNvbnN0YW50cyBpbnN0ZWFkIG9mICVUQ09ERV9MT0NLX1JFUVVFU1QgaW4gQHRjb2RlLgogICoKLSAqIFRoZSBwYXlsb2FkIGlzIG9ubHkgdXNlZCBmb3Igd3JpdGUgcmVxdWVzdHMgYW5kIG11c3Qgbm90IGJlIGZyZWVkCi0gKiB1bnRpbCB0aGUgY2FsbGJhY2sgaGFzIGJlZW4gY2FsbGVkLgorICogTWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIGluIEBkZXN0aW5hdGlvbl9pZCBpcyBub3Qgb2xkZXIgdGhhbiB0aGUgb25lIGluCisgKiBAZ2VuZXJhdGlvbi4gIE90aGVyd2lzZSB0aGUgcmVxdWVzdCBpcyBpbiBkYW5nZXIgdG8gYmUgc2VudCB0byBhIHdyb25nIG5vZGUuCiAgKgotICogQHBhcmFtIGNhcmQgdGhlIGNhcmQgZnJvbSB3aGljaCB0byBzZW5kIHRoZSByZXF1ZXN0Ci0gKiBAcGFyYW0gdGNvZGUgdGhlIHRjb2RlIGZvciB0aGlzIHRyYW5zYWN0aW9uLiAgRG8gbm90IHVzZQotICogICBUQ09ERV9MT0NLX1JFUVVFU1QgZGlyZWN0bHksIGluc3RlYWQgdXNlIFRDT0RFX0xPQ0tfTUFTS19TV0FQCi0gKiAgIGV0Yy4gdG8gc3BlY2lmeSB0Y29kZSBhbmQgZXh0X3Rjb2RlLgotICogQHBhcmFtIG5vZGVfaWQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgSUQgKGJ1cyBJRCBhbmQgUEhZIElEIGNvbmNhdGVuYXRlZCkKLSAqIEBwYXJhbSBnZW5lcmF0aW9uIHRoZSBnZW5lcmF0aW9uIGZvciB3aGljaCBub2RlX2lkIGlzIHZhbGlkCi0gKiBAcGFyYW0gc3BlZWQgdGhlIHNwZWVkIHRvIHVzZSBmb3Igc2VuZGluZyB0aGUgcmVxdWVzdAotICogQHBhcmFtIG9mZnNldCB0aGUgNDggYml0IG9mZnNldCBvbiB0aGUgZGVzdGluYXRpb24gbm9kZQotICogQHBhcmFtIHBheWxvYWQgdGhlIGRhdGEgcGF5bG9hZCBmb3IgdGhlIHJlcXVlc3Qgc3ViYWN0aW9uCi0gKiBAcGFyYW0gbGVuZ3RoIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGRhdGEgdG8gcmVhZAotICogQHBhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQKLSAqIEBwYXJhbSBjYWxsYmFja19kYXRhIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGRhdGEsIHdoaWNoIHdpbGwgYmUKLSAqICAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawotICoKLSAqIEluIGNhc2Ugb2YgYXN5bmNocm9ub3VzIHN0cmVhbSBwYWNrZXRzIGkuZS4gVENPREVfU1RSRUFNX0RBVEEsIHRoZSBjYWxsZXIKKyAqIEluIGNhc2Ugb2YgYXN5bmNocm9ub3VzIHN0cmVhbSBwYWNrZXRzIGkuZS4gJVRDT0RFX1NUUkVBTV9EQVRBLCB0aGUgY2FsbGVyCiAgKiBuZWVkcyB0byBzeW50aGVzaXplIEBkZXN0aW5hdGlvbl9pZCB3aXRoIGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQoKS4KKyAqIEl0IHdpbGwgY29udGFpbiB0YWcsIGNoYW5uZWwsIGFuZCBzeSBkYXRhIGluc3RlYWQgb2YgYSBub2RlIElEIHRoZW4uCisgKgorICogVGhlIHBheWxvYWQgYnVmZmVyIGF0IEBkYXRhIGlzIGdvaW5nIHRvIGJlIERNQS1tYXBwZWQgZXhjZXB0IGluIGNhc2Ugb2YKKyAqIHF1YWRsZXQtc2l6ZWQgcGF5bG9hZCBvciBvZiBsb2NhbCAobG9vcGJhY2spIHJlcXVlc3RzLiAgSGVuY2UgbWFrZSBzdXJlIHRoYXQKKyAqIHRoZSBidWZmZXIgY29tcGxpZXMgd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGZvciBETUEtbWFwcGVkIG1lbW9yeS4gIFRoZQorICogQHBheWxvYWQgbXVzdCBub3QgYmUgZnJlZWQgYmVmb3JlIHRoZSBAY2FsbGJhY2sgaXMgY2FsbGVkLgorICoKKyAqIEluIGNhc2Ugb2YgcmVxdWVzdCB0eXBlcyB3aXRob3V0IHBheWxvYWQsIEBkYXRhIGlzIE5VTEwgYW5kIEBsZW5ndGggaXMgMC4KKyAqCisgKiBBZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB1bnN1Y2Nlc3NmdWxseSwgdGhlCisgKiBAY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQuICBBbW9uZyBpdHMgcGFyYW1ldGVycyBpcyB0aGUgcmVzcG9uc2UgY29kZSB3aGljaAorICogaXMgZWl0aGVyIG9uZSBvZiB0aGUgcmNvZGVzIHBlciBJRUVFIDEzOTQgb3IsIGluIGNhc2Ugb2YgaW50ZXJuYWwgZXJyb3JzLAorICogdGhlIGZpcmV3aXJlLWNvcmUgc3BlY2lmaWMgJVJDT0RFX1NFTkRfRVJST1IuICBUaGUgb3RoZXIgZmlyZXdpcmUtY29yZQorICogc3BlY2lmaWMgcmNvZGVzICglUkNPREVfQ0FOQ0VMTEVELCAlUkNPREVfQlVTWSwgJVJDT0RFX0dFTkVSQVRJT04sCisgKiAlUkNPREVfTk9fQUNLKSBkZW5vdGUgdHJhbnNhY3Rpb24gdGltZW91dCwgYnVzeSByZXNwb25kZXIsIHN0YWxlIHJlcXVlc3QKKyAqIGdlbmVyYXRpb24sIG9yIG1pc3NpbmcgQUNLIHJlc3BlY3RpdmVseS4KKyAqCisgKiBOb3RlIHNvbWUgdGltaW5nIGNvcm5lciBjYXNlczogIGZ3X3NlbmRfcmVxdWVzdCgpIG1heSBjb21wbGV0ZSBtdWNoIGVhcmxpZXIKKyAqIHRoYW4gd2hlbiB0aGUgcmVxdWVzdCBwYWNrZXQgYWN0dWFsbHkgaGl0cyB0aGUgd2lyZS4gIE9uIHRoZSBvdGhlciBoYW5kLAorICogdHJhbnNhY3Rpb24gY29tcGxldGlvbiBhbmQgaGVuY2UgZXhlY3V0aW9uIG9mIEBjYWxsYmFjayBtYXkgaGFwcGVuIGV2ZW4KKyAqIGJlZm9yZSBmd19zZW5kX3JlcXVlc3QoKSByZXR1cm5zLgogICovCiB2b2lkIGZ3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LCBpbnQgdGNvZGUsCiAJCSAgICAgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLApAQCAtMzM5LDcgKzM0OCw4IEBACiAJc2V0dXBfdGltZXIoJnQtPnNwbGl0X3RpbWVvdXRfdGltZXIsCiAJCSAgICBzcGxpdF90cmFuc2FjdGlvbl90aW1lb3V0X2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZyl0KTsKIAkvKiBGSVhNRTogc3RhcnQgdGhpcyB0aW1lciBsYXRlciwgcmVsYXRpdmUgdG8gdC0+dGltZXN0YW1wICovCi0JbW9kX3RpbWVyKCZ0LT5zcGxpdF90aW1lb3V0X3RpbWVyLCBqaWZmaWVzICsgRElWX1JPVU5EX1VQKEhaLCAxMCkpOworCW1vZF90aW1lcigmdC0+c3BsaXRfdGltZW91dF90aW1lciwKKwkJICBqaWZmaWVzICsgY2FyZC0+c3BsaXRfdGltZW91dF9qaWZmaWVzKTsKIAl0LT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCXQtPmNhbGxiYWNrX2RhdGEgPSBjYWxsYmFja19kYXRhOwogCkBAIC0zNzQsOSArMzg0LDExIEBACiB9CiAKIC8qKgotICogZndfcnVuX3RyYW5zYWN0aW9uIC0gc2VuZCByZXF1ZXN0IGFuZCBzbGVlcCB1bnRpbCB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQKKyAqIGZ3X3J1bl90cmFuc2FjdGlvbigpIC0gc2VuZCByZXF1ZXN0IGFuZCBzbGVlcCB1bnRpbCB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQKICAqCi0gKiBSZXR1cm5zIHRoZSBSQ09ERS4KKyAqIFJldHVybnMgdGhlIFJDT0RFLiAgU2VlIGZ3X3NlbmRfcmVxdWVzdCgpIGZvciBwYXJhbWV0ZXIgZG9jdW1lbnRhdGlvbi4KKyAqIFVubGlrZSBmd19zZW5kX3JlcXVlc3QoKSwgQGRhdGEgcG9pbnRzIHRvIHRoZSBwYXlsb2FkIG9mIHRoZSByZXF1ZXN0IG9yL2FuZAorICogdG8gdGhlIHBheWxvYWQgb2YgdGhlIHJlc3BvbnNlLgogICovCiBpbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKIAkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCkBAIC00MTcsOSArNDI5LDIxIEBACiAJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBnYXBfY291bnQpCiB7CiAJbG9uZyB0aW1lb3V0ID0gRElWX1JPVU5EX1VQKEhaLCAxMCk7Ci0JdTMyIGRhdGEgPSBQSFlfSURFTlRJRklFUihQSFlfUEFDS0VUX0NPTkZJRykgfAotCQkgICBQSFlfQ09ORklHX1JPT1RfSUQobm9kZV9pZCkgfAotCQkgICBQSFlfQ09ORklHX0dBUF9DT1VOVChnYXBfY291bnQpOworCXUzMiBkYXRhID0gUEhZX0lERU5USUZJRVIoUEhZX1BBQ0tFVF9DT05GSUcpOworCisJaWYgKG5vZGVfaWQgIT0gRldfUEhZX0NPTkZJR19OT19OT0RFX0lEKQorCQlkYXRhIHw9IFBIWV9DT05GSUdfUk9PVF9JRChub2RlX2lkKTsKKworCWlmIChnYXBfY291bnQgPT0gRldfUEhZX0NPTkZJR19DVVJSRU5UX0dBUF9DT1VOVCkgeworCQlnYXBfY291bnQgPSBjYXJkLT5kcml2ZXItPnJlYWRfcGh5X3JlZyhjYXJkLCAxKTsKKwkJaWYgKGdhcF9jb3VudCA8IDApCisJCQlyZXR1cm47CisKKwkJZ2FwX2NvdW50ICY9IDYzOworCQlpZiAoZ2FwX2NvdW50ID09IDYzKQorCQkJcmV0dXJuOworCX0KKwlkYXRhIHw9IFBIWV9DT05GSUdfR0FQX0NPVU5UKGdhcF9jb3VudCk7CiAKIAltdXRleF9sb2NrKCZwaHlfY29uZmlnX211dGV4KTsKIApAQCAtNDk0LDkgKzUxOCw5IEBACiB9CiAKIC8qKgotICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyIC0gcmVnaXN0ZXIgZm9yIGluY29taW5nIHJlcXVlc3RzCi0gKiBAaGFuZGxlcjogY2FsbGJhY2sKLSAqIEByZWdpb246IHJlZ2lvbiBpbiB0aGUgSUVFRSAxMjEyIG5vZGUgc3BhY2UgYWRkcmVzcyByYW5nZQorICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCkgLSByZWdpc3RlciBmb3IgaW5jb21pbmcgcmVxdWVzdHMKKyAqIEBoYW5kbGVyOgljYWxsYmFjaworICogQHJlZ2lvbjoJcmVnaW9uIGluIHRoZSBJRUVFIDEyMTIgbm9kZSBzcGFjZSBhZGRyZXNzIHJhbmdlCiAgKgogICogcmVnaW9uLT5zdGFydCwgLT5lbmQsIGFuZCBoYW5kbGVyLT5sZW5ndGggaGF2ZSB0byBiZSBxdWFkbGV0LWFsaWduZWQuCiAgKgpAQCAtNTE5LDggKzU0Myw4IEBACiAJaW50IHJldCA9IC1FQlVTWTsKIAogCWlmIChyZWdpb24tPnN0YXJ0ICYgMHhmZmZmMDAwMDAwMDAwMDAzVUxMIHx8Ci0JICAgIHJlZ2lvbi0+ZW5kICAgJiAweGZmZmYwMDAwMDAwMDAwMDNVTEwgfHwKIAkgICAgcmVnaW9uLT5zdGFydCA+PSByZWdpb24tPmVuZCB8fAorCSAgICByZWdpb24tPmVuZCAgID4gMHgwMDAxMDAwMDAwMDAwMDAwVUxMIHx8CiAJICAgIGhhbmRsZXItPmxlbmd0aCAmIDMgfHwKIAkgICAgaGFuZGxlci0+bGVuZ3RoID09IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTUxLDcgKzU3NSw3IEBACiBFWFBPUlRfU1lNQk9MKGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcik7CiAKIC8qKgotICogZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyIC0gdW5yZWdpc3RlciBhbiBhZGRyZXNzIGhhbmRsZXIKKyAqIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcigpIC0gdW5yZWdpc3RlciBhbiBhZGRyZXNzIGhhbmRsZXIKICAqLwogdm9pZCBmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGZ3X2FkZHJlc3NfaGFuZGxlciAqaGFuZGxlcikKIHsKQEAgLTU4MCw2ICs2MDQsNDEgQEAKIAlrZnJlZShyZXF1ZXN0KTsKIH0KIAoraW50IGZ3X2dldF9yZXNwb25zZV9sZW5ndGgoc3RydWN0IGZ3X3JlcXVlc3QgKnIpCit7CisJaW50IHRjb2RlLCBleHRfdGNvZGUsIGRhdGFfbGVuZ3RoOworCisJdGNvZGUgPSBIRUFERVJfR0VUX1RDT0RFKHItPnJlcXVlc3RfaGVhZGVyWzBdKTsKKworCXN3aXRjaCAodGNvZGUpIHsKKwljYXNlIFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVDoKKwljYXNlIFRDT0RFX1dSSVRFX0JMT0NLX1JFUVVFU1Q6CisJCXJldHVybiAwOworCisJY2FzZSBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVDoKKwkJcmV0dXJuIDQ7CisKKwljYXNlIFRDT0RFX1JFQURfQkxPQ0tfUkVRVUVTVDoKKwkJZGF0YV9sZW5ndGggPSBIRUFERVJfR0VUX0RBVEFfTEVOR1RIKHItPnJlcXVlc3RfaGVhZGVyWzNdKTsKKwkJcmV0dXJuIGRhdGFfbGVuZ3RoOworCisJY2FzZSBUQ09ERV9MT0NLX1JFUVVFU1Q6CisJCWV4dF90Y29kZSA9IEhFQURFUl9HRVRfRVhURU5ERURfVENPREUoci0+cmVxdWVzdF9oZWFkZXJbM10pOworCQlkYXRhX2xlbmd0aCA9IEhFQURFUl9HRVRfREFUQV9MRU5HVEgoci0+cmVxdWVzdF9oZWFkZXJbM10pOworCQlzd2l0Y2ggKGV4dF90Y29kZSkgeworCQljYXNlIEVYVENPREVfRkVUQ0hfQUREOgorCQljYXNlIEVYVENPREVfTElUVExFX0FERDoKKwkJCXJldHVybiBkYXRhX2xlbmd0aDsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBkYXRhX2xlbmd0aCAvIDI7CisJCX0KKworCWRlZmF1bHQ6CisJCVdBUk4oMSwgIndyb25nIHRjb2RlICVkIiwgdGNvZGUpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKIHZvaWQgZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKIAkJICAgICAgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQogewpAQCAtNjMxLDE4ICs2OTAsMzUgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXQVJOKDEsIEtFUk5fRVJSICJ3cm9uZyB0Y29kZSAlZCIsIHRjb2RlKTsKKwkJV0FSTigxLCAid3JvbmcgdGNvZGUgJWQiLCB0Y29kZSk7CiAJfQogCiAJcmVzcG9uc2UtPnBheWxvYWRfbWFwcGVkID0gZmFsc2U7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2ZpbGxfcmVzcG9uc2UpOwogCi1zdGF0aWMgc3RydWN0IGZ3X3JlcXVlc3QgKmFsbG9jYXRlX3JlcXVlc3Qoc3RydWN0IGZ3X3BhY2tldCAqcCkKK3N0YXRpYyB1MzIgY29tcHV0ZV9zcGxpdF90aW1lb3V0X3RpbWVzdGFtcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQkJICAgdTMyIHJlcXVlc3RfdGltZXN0YW1wKQoreworCXVuc2lnbmVkIGludCBjeWNsZXM7CisJdTMyIHRpbWVzdGFtcDsKKworCWN5Y2xlcyA9IGNhcmQtPnNwbGl0X3RpbWVvdXRfY3ljbGVzOworCWN5Y2xlcyArPSByZXF1ZXN0X3RpbWVzdGFtcCAmIDB4MWZmZjsKKworCXRpbWVzdGFtcCA9IHJlcXVlc3RfdGltZXN0YW1wICYgfjB4MWZmZjsKKwl0aW1lc3RhbXAgKz0gKGN5Y2xlcyAvIDgwMDApIDw8IDEzOworCXRpbWVzdGFtcCB8PSBjeWNsZXMgJSA4MDAwOworCisJcmV0dXJuIHRpbWVzdGFtcDsKK30KKworc3RhdGljIHN0cnVjdCBmd19yZXF1ZXN0ICphbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCQkgICBzdHJ1Y3QgZndfcGFja2V0ICpwKQogewogCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwogCXUzMiAqZGF0YSwgbGVuZ3RoOwotCWludCByZXF1ZXN0X3Rjb2RlLCB0OworCWludCByZXF1ZXN0X3Rjb2RlOwogCiAJcmVxdWVzdF90Y29kZSA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKIAlzd2l0Y2ggKHJlcXVlc3RfdGNvZGUpIHsKQEAgLTY3NywxNCArNzUzLDkgQEAKIAlpZiAocmVxdWVzdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXQgPSAocC0+dGltZXN0YW1wICYgMHgxZmZmKSArIDQwMDA7Ci0JaWYgKHQgPj0gODAwMCkKLQkJdCA9IChwLT50aW1lc3RhbXAgJiB+MHgxZmZmKSArIDB4MjAwMCArIHQgLSA4MDAwOwotCWVsc2UKLQkJdCA9IChwLT50aW1lc3RhbXAgJiB+MHgxZmZmKSArIHQ7Ci0KIAlyZXF1ZXN0LT5yZXNwb25zZS5zcGVlZCA9IHAtPnNwZWVkOwotCXJlcXVlc3QtPnJlc3BvbnNlLnRpbWVzdGFtcCA9IHQ7CisJcmVxdWVzdC0+cmVzcG9uc2UudGltZXN0YW1wID0KKwkJCWNvbXB1dGVfc3BsaXRfdGltZW91dF90aW1lc3RhbXAoY2FyZCwgcC0+dGltZXN0YW1wKTsKIAlyZXF1ZXN0LT5yZXNwb25zZS5nZW5lcmF0aW9uID0gcC0+Z2VuZXJhdGlvbjsKIAlyZXF1ZXN0LT5yZXNwb25zZS5hY2sgPSAwOwogCXJlcXVlc3QtPnJlc3BvbnNlLmNhbGxiYWNrID0gZnJlZV9yZXNwb25zZV9jYWxsYmFjazsKQEAgLTcxMyw3ICs3ODQsOCBAQAogCiAJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQogCQlmd19maWxsX3Jlc3BvbnNlKCZyZXF1ZXN0LT5yZXNwb25zZSwgcmVxdWVzdC0+cmVxdWVzdF9oZWFkZXIsCi0JCQkJIHJjb2RlLCByZXF1ZXN0LT5kYXRhLCByZXF1ZXN0LT5sZW5ndGgpOworCQkJCSByY29kZSwgcmVxdWVzdC0+ZGF0YSwKKwkJCQkgZndfZ2V0X3Jlc3BvbnNlX2xlbmd0aChyZXF1ZXN0KSk7CiAJZWxzZQogCQlmd19maWxsX3Jlc3BvbnNlKCZyZXF1ZXN0LT5yZXNwb25zZSwgcmVxdWVzdC0+cmVxdWVzdF9oZWFkZXIsCiAJCQkJIHJjb2RlLCBOVUxMLCAwKTsKQEAgLTczMSw5ICs4MDMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0Y29kZSwgZGVzdGluYXRpb24sIHNvdXJjZTsKIAotCXRjb2RlICAgICAgID0gSEVBREVSX0dFVF9UQ09ERShwLT5oZWFkZXJbMF0pOwogCWRlc3RpbmF0aW9uID0gSEVBREVSX0dFVF9ERVNUSU5BVElPTihwLT5oZWFkZXJbMF0pOwogCXNvdXJjZSAgICAgID0gSEVBREVSX0dFVF9TT1VSQ0UocC0+aGVhZGVyWzFdKTsKKwl0Y29kZSAgICAgICA9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKKwlpZiAodGNvZGUgPT0gVENPREVfTE9DS19SRVFVRVNUKQorCQl0Y29kZSA9IDB4MTAgKyBIRUFERVJfR0VUX0VYVEVOREVEX1RDT0RFKHAtPmhlYWRlclszXSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRkcmVzc19oYW5kbGVyX2xvY2ssIGZsYWdzKTsKIAloYW5kbGVyID0gbG9va3VwX2VuY2xvc2luZ19hZGRyZXNzX2hhbmRsZXIoJmFkZHJlc3NfaGFuZGxlcl9saXN0LApAQCAtNzUzLDcgKzgyNyw3IEBACiAJZWxzZQogCQloYW5kbGVyLT5hZGRyZXNzX2NhbGxiYWNrKGNhcmQsIHJlcXVlc3QsCiAJCQkJCSAgdGNvZGUsIGRlc3RpbmF0aW9uLCBzb3VyY2UsCi0JCQkJCSAgcC0+Z2VuZXJhdGlvbiwgcC0+c3BlZWQsIG9mZnNldCwKKwkJCQkJICBwLT5nZW5lcmF0aW9uLCBvZmZzZXQsCiAJCQkJCSAgcmVxdWVzdC0+ZGF0YSwgcmVxdWVzdC0+bGVuZ3RoLAogCQkJCQkgIGhhbmRsZXItPmNhbGxiYWNrX2RhdGEpOwogfQpAQCAtNzkxLDggKzg2NSw4IEBACiAJCWlmIChpc19lbmNsb3NpbmdfaGFuZGxlcihoYW5kbGVyLCBvZmZzZXQsIHJlcXVlc3QtPmxlbmd0aCkpCiAJCQloYW5kbGVyLT5hZGRyZXNzX2NhbGxiYWNrKGNhcmQsIE5VTEwsIHRjb2RlLAogCQkJCQkJICBkZXN0aW5hdGlvbiwgc291cmNlLAotCQkJCQkJICBwLT5nZW5lcmF0aW9uLCBwLT5zcGVlZCwKLQkJCQkJCSAgb2Zmc2V0LCByZXF1ZXN0LT5kYXRhLAorCQkJCQkJICBwLT5nZW5lcmF0aW9uLCBvZmZzZXQsCisJCQkJCQkgIHJlcXVlc3QtPmRhdGEsCiAJCQkJCQkgIHJlcXVlc3QtPmxlbmd0aCwKIAkJCQkJCSAgaGFuZGxlci0+Y2FsbGJhY2tfZGF0YSk7CiAJfQpAQCAtODA5LDcgKzg4MywxMiBAQAogCWlmIChwLT5hY2sgIT0gQUNLX1BFTkRJTkcgJiYgcC0+YWNrICE9IEFDS19DT01QTEVURSkKIAkJcmV0dXJuOwogCi0JcmVxdWVzdCA9IGFsbG9jYXRlX3JlcXVlc3QocCk7CisJaWYgKFRDT0RFX0lTX0xJTktfSU5URVJOQUwoSEVBREVSX0dFVF9UQ09ERShwLT5oZWFkZXJbMF0pKSkgeworCQlmd19jZGV2X2hhbmRsZV9waHlfcGFja2V0KGNhcmQsIHApOworCQlyZXR1cm47CisJfQorCisJcmVxdWVzdCA9IGFsbG9jYXRlX3JlcXVlc3QoY2FyZCwgcCk7CiAJaWYgKHJlcXVlc3QgPT0gTlVMTCkgewogCQkvKiBGSVhNRTogc2VuZCBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidXN5IHBhY2tldC4gKi8KIAkJcmV0dXJuOwpAQCAtODMyLDEzICs5MTEsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiAqZGF0YTsKIAlzaXplX3QgZGF0YV9sZW5ndGg7Ci0JaW50IHRjb2RlLCB0bGFiZWwsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHJjb2RlOworCWludCB0Y29kZSwgdGxhYmVsLCBzb3VyY2UsIHJjb2RlOwogCi0JdGNvZGUgICAgICAgPSBIRUFERVJfR0VUX1RDT0RFKHAtPmhlYWRlclswXSk7Ci0JdGxhYmVsICAgICAgPSBIRUFERVJfR0VUX1RMQUJFTChwLT5oZWFkZXJbMF0pOwotCWRlc3RpbmF0aW9uID0gSEVBREVSX0dFVF9ERVNUSU5BVElPTihwLT5oZWFkZXJbMF0pOwotCXNvdXJjZSAgICAgID0gSEVBREVSX0dFVF9TT1VSQ0UocC0+aGVhZGVyWzFdKTsKLQlyY29kZSAgICAgICA9IEhFQURFUl9HRVRfUkNPREUocC0+aGVhZGVyWzFdKTsKKwl0Y29kZQk9IEhFQURFUl9HRVRfVENPREUocC0+aGVhZGVyWzBdKTsKKwl0bGFiZWwJPSBIRUFERVJfR0VUX1RMQUJFTChwLT5oZWFkZXJbMF0pOworCXNvdXJjZQk9IEhFQURFUl9HRVRfU09VUkNFKHAtPmhlYWRlclsxXSk7CisJcmNvZGUJPSBIRUFERVJfR0VUX1JDT0RFKHAtPmhlYWRlclsxXSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QsIGxpbmspIHsKQEAgLTkwMyw4ICs5ODEsOCBAQAogCiBzdGF0aWMgdm9pZCBoYW5kbGVfdG9wb2xvZ3lfbWFwKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKIAkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsIGludCBnZW5lcmF0aW9uLAotCQlpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCXZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCisJCXZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IHN0YXJ0OwogCkBAIC05MzMsMTkgKzEwMTEsOTcgQEAKIAl7IC5zdGFydCA9IENTUl9SRUdJU1RFUl9CQVNFLAogCSAgLmVuZCAgID0gQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSwgfTsKIAorc3RhdGljIHZvaWQgdXBkYXRlX3NwbGl0X3RpbWVvdXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQpCit7CisJdW5zaWduZWQgaW50IGN5Y2xlczsKKworCWN5Y2xlcyA9IGNhcmQtPnNwbGl0X3RpbWVvdXRfaGkgKiA4MDAwICsgKGNhcmQtPnNwbGl0X3RpbWVvdXRfbG8gPj4gMTkpOworCisJY3ljbGVzID0gbWF4KGN5Y2xlcywgODAwdSk7IC8qIG1pbmltdW0gYXMgcGVyIHRoZSBzcGVjICovCisJY3ljbGVzID0gbWluKGN5Y2xlcywgM3UgKiA4MDAwdSk7IC8qIG1heGltdW0gT0hDSSB0aW1lb3V0ICovCisKKwljYXJkLT5zcGxpdF90aW1lb3V0X2N5Y2xlcyA9IGN5Y2xlczsKKwljYXJkLT5zcGxpdF90aW1lb3V0X2ppZmZpZXMgPSBESVZfUk9VTkRfVVAoY3ljbGVzICogSFosIDgwMDApOworfQorCiBzdGF0aWMgdm9pZCBoYW5kbGVfcmVnaXN0ZXJzKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKIAkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsIGludCBnZW5lcmF0aW9uLAotCQlpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCXZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCisJCXZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJaW50IHJlZyA9IG9mZnNldCAmIH5DU1JfUkVHSVNURVJfQkFTRTsKIAlfX2JlMzIgKmRhdGEgPSBwYXlsb2FkOwogCWludCByY29kZSA9IFJDT0RFX0NPTVBMRVRFOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzd2l0Y2ggKHJlZykgeworCWNhc2UgQ1NSX1BSSU9SSVRZX0JVREdFVDoKKwkJaWYgKCFjYXJkLT5wcmlvcml0eV9idWRnZXRfaW1wbGVtZW50ZWQpIHsKKwkJCXJjb2RlID0gUkNPREVfQUREUkVTU19FUlJPUjsKKwkJCWJyZWFrOworCQl9CisJCS8qIGVsc2UgZmFsbCB0aHJvdWdoICovCisKKwljYXNlIENTUl9OT0RFX0lEUzoKKwkJLyoKKwkJICogcGVyIElFRUUgMTM5NC0yMDA4IDguMy4yMi4zLCBub3QgSUVFRSAxMzk0LjEtMjAwNCAzLjIuOAorCQkgKiBhbmQgOS42LCBidXQgaW50ZXJvcGVyYWJsZSB3aXRoIElFRUUgMTM5NC4xLTIwMDQgYnJpZGdlcworCQkgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIENTUl9TVEFURV9DTEVBUjoKKwljYXNlIENTUl9TVEFURV9TRVQ6CiAJY2FzZSBDU1JfQ1lDTEVfVElNRToKLQkJaWYgKFRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkgJiYgbGVuZ3RoID09IDQpCi0JCQkqZGF0YSA9IGNwdV90b19iZTMyKGNhcmQtPmRyaXZlci0+Z2V0X2N5Y2xlX3RpbWUoY2FyZCkpOworCWNhc2UgQ1NSX0JVU19USU1FOgorCWNhc2UgQ1NSX0JVU1lfVElNRU9VVDoKKwkJaWYgKHRjb2RlID09IFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUKQorCQkJKmRhdGEgPSBjcHVfdG9fYmUzMihjYXJkLT5kcml2ZXItPnJlYWRfY3NyKGNhcmQsIHJlZykpOworCQllbHNlIGlmICh0Y29kZSA9PSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QpCisJCQljYXJkLT5kcml2ZXItPndyaXRlX2NzcihjYXJkLCByZWcsIGJlMzJfdG9fY3B1KCpkYXRhKSk7CisJCWVsc2UKKwkJCXJjb2RlID0gUkNPREVfVFlQRV9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIENTUl9SRVNFVF9TVEFSVDoKKwkJaWYgKHRjb2RlID09IFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCkKKwkJCWNhcmQtPmRyaXZlci0+d3JpdGVfY3NyKGNhcmQsIENTUl9TVEFURV9DTEVBUiwKKwkJCQkJCUNTUl9TVEFURV9CSVRfQUJESUNBVEUpOworCQllbHNlCisJCQlyY29kZSA9IFJDT0RFX1RZUEVfRVJST1I7CisJCWJyZWFrOworCisJY2FzZSBDU1JfU1BMSVRfVElNRU9VVF9ISToKKwkJaWYgKHRjb2RlID09IFRDT0RFX1JFQURfUVVBRExFVF9SRVFVRVNUKSB7CisJCQkqZGF0YSA9IGNwdV90b19iZTMyKGNhcmQtPnNwbGl0X3RpbWVvdXRfaGkpOworCQl9IGVsc2UgaWYgKHRjb2RlID09IFRDT0RFX1dSSVRFX1FVQURMRVRfUkVRVUVTVCkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCWNhcmQtPnNwbGl0X3RpbWVvdXRfaGkgPSBiZTMyX3RvX2NwdSgqZGF0YSkgJiA3OworCQkJdXBkYXRlX3NwbGl0X3RpbWVvdXQoY2FyZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCX0gZWxzZSB7CisJCQlyY29kZSA9IFJDT0RFX1RZUEVfRVJST1I7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENTUl9TUExJVF9USU1FT1VUX0xPOgorCQlpZiAodGNvZGUgPT0gVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1QpIHsKKwkJCSpkYXRhID0gY3B1X3RvX2JlMzIoY2FyZC0+c3BsaXRfdGltZW91dF9sbyk7CisJCX0gZWxzZSBpZiAodGNvZGUgPT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkJY2FyZC0+c3BsaXRfdGltZW91dF9sbyA9CisJCQkJCWJlMzJfdG9fY3B1KCpkYXRhKSAmIDB4ZmZmODAwMDA7CisJCQl1cGRhdGVfc3BsaXRfdGltZW91dChjYXJkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXJjb2RlID0gUkNPREVfVFlQRV9FUlJPUjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQ1NSX01BSU5UX1VUSUxJVFk6CisJCWlmICh0Y29kZSA9PSBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCkKKwkJCSpkYXRhID0gY2FyZC0+bWFpbnRfdXRpbGl0eV9yZWdpc3RlcjsKKwkJZWxzZSBpZiAodGNvZGUgPT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUKQorCQkJY2FyZC0+bWFpbnRfdXRpbGl0eV9yZWdpc3RlciA9ICpkYXRhOwogCQllbHNlCiAJCQlyY29kZSA9IFJDT0RFX1RZUEVfRVJST1I7CiAJCWJyZWFrOwpAQCAtOTc1LDEyICsxMTMxLDYgQEAKIAkJQlVHKCk7CiAJCWJyZWFrOwogCi0JY2FzZSBDU1JfQlVTWV9USU1FT1VUOgotCQkvKiBGSVhNRTogSW1wbGVtZW50IHRoaXMuICovCi0KLQljYXNlIENTUl9CVVNfVElNRToKLQkJLyogVXNlbGVzcyB3aXRob3V0IGluaXRpYWxpemF0aW9uIGJ5IHRoZSBidXMgbWFuYWdlci4gKi8KLQogCWRlZmF1bHQ6CiAJCXJjb2RlID0gUkNPREVfQUREUkVTU19FUlJPUjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaCBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCmluZGV4IDBlY2ZjZDkuLmU2MjM5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCkBAIC0zOCw2ICszOCw5IEBACiAjZGVmaW5lIEJST0FEQ0FTVF9DSEFOTkVMX0lOSVRJQUwJKDEgPDwgMzEgfCAzMSkKICNkZWZpbmUgQlJPQURDQVNUX0NIQU5ORUxfVkFMSUQJCSgxIDw8IDMwKQogCisjZGVmaW5lIENTUl9TVEFURV9CSVRfQ01TVFIJKDEgPDwgOCkKKyNkZWZpbmUgQ1NSX1NUQVRFX0JJVF9BQkRJQ0FURQkoMSA8PCAxMCkKKwogc3RydWN0IGZ3X2NhcmRfZHJpdmVyIHsKIAkvKgogCSAqIEVuYWJsZSB0aGUgZ2l2ZW4gY2FyZCB3aXRoIHRoZSBnaXZlbiBpbml0aWFsIGNvbmZpZyByb20uCkBAIC00OCw2ICs1MSw3IEBACiAJaW50ICgqZW5hYmxlKShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJICAgICAgY29uc3QgX19iZTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKTsKIAorCWludCAoKnJlYWRfcGh5X3JlZykoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzKTsKIAlpbnQgKCp1cGRhdGVfcGh5X3JlZykoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyZXNzLAogCQkJICAgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cyk7CiAKQEAgLTc1LDcgKzc5LDggQEAKIAlpbnQgKCplbmFibGVfcGh5c19kbWEpKHN0cnVjdCBmd19jYXJkICpjYXJkLAogCQkJICAgICAgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbik7CiAKLQl1MzIgKCpnZXRfY3ljbGVfdGltZSkoc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworCXUzMiAoKnJlYWRfY3NyKShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGNzcl9vZmZzZXQpOworCXZvaWQgKCp3cml0ZV9jc3IpKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgY3NyX29mZnNldCwgdTMyIHZhbHVlKTsKIAogCXN0cnVjdCBmd19pc29fY29udGV4dCAqCiAJKCphbGxvY2F0ZV9pc29fY29udGV4dCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCkBAIC04NSw2ICs5MCw4IEBACiAJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKIAkJCSBzMzIgY3ljbGUsIHUzMiBzeW5jLCB1MzIgdGFncyk7CiAKKwlpbnQgKCpzZXRfaXNvX2NoYW5uZWxzKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwgdTY0ICpjaGFubmVscyk7CisKIAlpbnQgKCpxdWV1ZV9pc28pKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAogCQkJIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCiAJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKQEAgLTk4LDggKzEwNSw4IEBACiBpbnQgZndfY2FyZF9hZGQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCXUzMiBtYXhfcmVjZWl2ZSwgdTMyIGxpbmtfc3BlZWQsIHU2NCBndWlkKTsKIHZvaWQgZndfY29yZV9yZW1vdmVfY2FyZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7Ci1pbnQgZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCk7CiBpbnQgZndfY29tcHV0ZV9ibG9ja19jcmMoX19iZTMyICpibG9jayk7Cit2b2lkIGZ3X3NjaGVkdWxlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgYm9vbCBkZWxheWVkLCBib29sIHNob3J0X3Jlc2V0KTsKIHZvaWQgZndfc2NoZWR1bGVfYm1fd29yayhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdW5zaWduZWQgbG9uZyBkZWxheSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X2NhcmQgKmZ3X2NhcmRfZ2V0KHN0cnVjdCBmd19jYXJkICpjYXJkKQpAQCAtMTIzLDYgKzEzMCw3IEBACiAKIHZvaWQgZndfZGV2aWNlX2NkZXZfdXBkYXRlKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSk7CiB2b2lkIGZ3X2RldmljZV9jZGV2X3JlbW92ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwordm9pZCBmd19jZGV2X2hhbmRsZV9waHlfcGFja2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKTsKIAogCiAvKiAtZGV2aWNlICovCkBAIC0xOTIsNyArMjAwLDcgQEAKIH0KIAogdm9pZCBmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBub2RlX2lkLAotCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnNlbGZfaWRzKTsKKwlpbnQgZ2VuZXJhdGlvbiwgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqc2VsZl9pZHMsIGJvb2wgYm1fYWJkaWNhdGUpOwogdm9pZCBmd19kZXN0cm95X25vZGVzKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKIAogLyoKQEAgLTIwOSw2ICsyMTcsNyBAQAogCiAjZGVmaW5lIFRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkJKCgodGNvZGUpICYgfjEpID09IDQpCiAjZGVmaW5lIFRDT0RFX0lTX0JMT0NLX1BBQ0tFVCh0Y29kZSkJKCgodGNvZGUpICYgIDEpICE9IDApCisjZGVmaW5lIFRDT0RFX0lTX0xJTktfSU5URVJOQUwodGNvZGUpCSgodGNvZGUpID09IDB4ZSkKICNkZWZpbmUgVENPREVfSVNfUkVRVUVTVCh0Y29kZSkJCSgoKHRjb2RlKSAmICAyKSA9PSAwKQogI2RlZmluZSBUQ09ERV9JU19SRVNQT05TRSh0Y29kZSkJKCgodGNvZGUpICYgIDIpICE9IDApCiAjZGVmaW5lIFRDT0RFX0hBU19SRVFVRVNUX0RBVEEodGNvZGUpCSgoKHRjb2RlKSAmIDEyKSAhPSA0KQpAQCAtMjE4LDkgKzIyNywxOCBAQAogCiB2b2lkIGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnJlcXVlc3QpOwogdm9pZCBmd19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKK2ludCBmd19nZXRfcmVzcG9uc2VfbGVuZ3RoKHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0KTsKIHZvaWQgZndfZmlsbF9yZXNwb25zZShzdHJ1Y3QgZndfcGFja2V0ICpyZXNwb25zZSwgdTMyICpyZXF1ZXN0X2hlYWRlciwKIAkJICAgICAgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKTsKKworI2RlZmluZSBGV19QSFlfQ09ORklHX05PX05PREVfSUQJLTEKKyNkZWZpbmUgRldfUEhZX0NPTkZJR19DVVJSRU5UX0dBUF9DT1VOVAktMQogdm9pZCBmd19zZW5kX3BoeV9jb25maWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sIGludCBnYXBfY291bnQpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGluZ19wYWNrZXQodTMyICpkYXRhKQoreworCXJldHVybiAoZGF0YVswXSAmIDB4YzBmZmZmZmYpID09IDAgJiYgfmRhdGFbMF0gPT0gZGF0YVsxXTsKK30KKwogI2VuZGlmIC8qIF9GSVJFV0lSRV9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCmluZGV4IDcxNDJlZWUuLmRhMTdkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9uZXQuYwpAQCAtODA2LDggKzgwNiw4IEBACiAKIHN0YXRpYyB2b2lkIGZ3bmV0X3JlY2VpdmVfcGFja2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqciwKIAkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsIGludCBnZW5lcmF0aW9uLAotCQlpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsCi0JCXNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCisJCXZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IGZ3bmV0X2RldmljZSAqZGV2ID0gY2FsbGJhY2tfZGF0YTsKIAlpbnQgcmNvZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25vc3ktdXNlci5oIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LXVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhhYTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LXVzZXIuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9fbm9zeV91c2VyX2gKKyNkZWZpbmUgX19ub3N5X3VzZXJfaAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5PU1lfSU9DX0dFVF9TVEFUUyBfSU9SKCcmJywgMCwgc3RydWN0IG5vc3lfc3RhdHMpCisjZGVmaW5lIE5PU1lfSU9DX1NUQVJUICAgICBfSU8oJyYnLCAxKQorI2RlZmluZSBOT1NZX0lPQ19TVE9QICAgICAgX0lPKCcmJywgMikKKyNkZWZpbmUgTk9TWV9JT0NfRklMVEVSICAgIF9JT1coJyYnLCAyLCBfX3UzMikKKworc3RydWN0IG5vc3lfc3RhdHMgeworCV9fdTMyIHRvdGFsX3BhY2tldF9jb3VudDsKKwlfX3UzMiBsb3N0X3BhY2tldF9jb3VudDsKK307CisKKy8qCisgKiBGb3JtYXQgb2YgcGFja2V0cyByZXR1cm5lZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyOgorICoKKyAqCXF1YWRsZXQgd2l0aCB0aW1lc3RhbXAJCShtaWNyb3NlY29uZHMsIENQVSBlbmRpYW4pCisgKglxdWFkbGV0LXBhZGRlZCBwYWNrZXQgZGF0YS4uLgkobGl0dGxlIGVuZGlhbikKKyAqCXF1YWRsZXQgd2l0aCBhY2sJCShsaXR0bGUgZW5kaWFuKQorICovCisKKyNlbmRpZiAvKiBfX25vc3lfdXNlcl9oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL25vc3kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvbm9zeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MjhiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25vc3kuYwpAQCAtMCwwICsxLDcyMSBAQAorLyoKKyAqIG5vc3kgLSBTbm9vcCBtb2RlIGRyaXZlciBmb3IgVEkgUENJTHlueCAxMzk0IGNvbnRyb2xsZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAvKiByZXF1aXJlZCBmb3IgbGludXgvd2FpdC5oICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgIm5vc3kuaCIKKyNpbmNsdWRlICJub3N5LXVzZXIuaCIKKworI2RlZmluZSBUQ09ERV9QSFlfUEFDS0VUCQkweDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfUENJTFlOWAkweDgwMDAKKworc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9IEtCVUlMRF9NT0ROQU1FOworCisvKiB0aGlzIGlzIHRoZSBwaHlzaWNhbCBsYXlvdXQgb2YgYSBQQ0wsIGl0cyBzaXplIGlzIDEyOCBieXRlcyAqLworc3RydWN0IHBjbCB7CisJX19sZTMyIG5leHQ7CisJX19sZTMyIGFzeW5jX2Vycm9yX25leHQ7CisJdTMyIHVzZXJfZGF0YTsKKwlfX2xlMzIgcGNsX3N0YXR1czsKKwlfX2xlMzIgcmVtYWluaW5nX3RyYW5zZmVyX2NvdW50OworCV9fbGUzMiBuZXh0X2RhdGFfYnVmZmVyOworCXN0cnVjdCB7CisJCV9fbGUzMiBjb250cm9sOworCQlfX2xlMzIgcG9pbnRlcjsKKwl9IGJ1ZmZlclsxM107Cit9OworCitzdHJ1Y3QgcGFja2V0IHsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCWNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCBwYWNrZXRfYnVmZmVyIHsKKwljaGFyICpkYXRhOworCXNpemVfdCBjYXBhY2l0eTsKKwlsb25nIHRvdGFsX3BhY2tldF9jb3VudCwgbG9zdF9wYWNrZXRfY291bnQ7CisJYXRvbWljX3Qgc2l6ZTsKKwlzdHJ1Y3QgcGFja2V0ICpoZWFkLCAqdGFpbDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworc3RydWN0IHBjaWx5bnggeworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2aWNlOworCV9faW9tZW0gY2hhciAqcmVnaXN0ZXJzOworCisJc3RydWN0IHBjbCAqcmN2X3N0YXJ0X3BjbCwgKnJjdl9wY2w7CisJX19sZTMyICpyY3ZfYnVmZmVyOworCisJZG1hX2FkZHJfdCByY3Zfc3RhcnRfcGNsX2J1cywgcmN2X3BjbF9idXMsIHJjdl9idWZmZXJfYnVzOworCisJc3BpbmxvY2tfdCBjbGllbnRfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisKKwlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpbHlueCAqCitseW54X2dldChzdHJ1Y3QgcGNpbHlueCAqbHlueCkKK3sKKwlrcmVmX2dldCgmbHlueC0+a3JlZik7CisKKwlyZXR1cm4gbHlueDsKK30KKworc3RhdGljIHZvaWQKK2x5bnhfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlrZnJlZShjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBjaWx5bngsIGtyZWYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitseW54X3B1dChzdHJ1Y3QgcGNpbHlueCAqbHlueCkKK3sKKwlrcmVmX3B1dCgmbHlueC0+a3JlZiwgbHlueF9yZWxlYXNlKTsKK30KKworc3RydWN0IGNsaWVudCB7CisJc3RydWN0IHBjaWx5bnggKmx5bng7CisJdTMyIHRjb2RlX21hc2s7CisJc3RydWN0IHBhY2tldF9idWZmZXIgYnVmZmVyOworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FyZF9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKGNhcmRfbGlzdCk7CisKK3N0YXRpYyBpbnQKK3BhY2tldF9idWZmZXJfaW5pdChzdHJ1Y3QgcGFja2V0X2J1ZmZlciAqYnVmZmVyLCBzaXplX3QgY2FwYWNpdHkpCit7CisJYnVmZmVyLT5kYXRhID0ga21hbGxvYyhjYXBhY2l0eSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmZlci0+ZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlidWZmZXItPmhlYWQgPSAoc3RydWN0IHBhY2tldCAqKSBidWZmZXItPmRhdGE7CisJYnVmZmVyLT50YWlsID0gKHN0cnVjdCBwYWNrZXQgKikgYnVmZmVyLT5kYXRhOworCWJ1ZmZlci0+Y2FwYWNpdHkgPSBjYXBhY2l0eTsKKwlidWZmZXItPmxvc3RfcGFja2V0X2NvdW50ID0gMDsKKwlhdG9taWNfc2V0KCZidWZmZXItPnNpemUsIDApOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJ1ZmZlci0+d2FpdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3BhY2tldF9idWZmZXJfZGVzdHJveShzdHJ1Y3QgcGFja2V0X2J1ZmZlciAqYnVmZmVyKQoreworCWtmcmVlKGJ1ZmZlci0+ZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3BhY2tldF9idWZmZXJfZ2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCB1c2VyX2xlbmd0aCkKK3sKKwlzdHJ1Y3QgcGFja2V0X2J1ZmZlciAqYnVmZmVyID0gJmNsaWVudC0+YnVmZmVyOworCXNpemVfdCBsZW5ndGg7CisJY2hhciAqZW5kOworCisJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShidWZmZXItPndhaXQsCisJCQkJICAgICBhdG9taWNfcmVhZCgmYnVmZmVyLT5zaXplKSA+IDApIHx8CisJCQkJICAgICBsaXN0X2VtcHR5KCZjbGllbnQtPmx5bngtPmxpbmspKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnNpemUpID09IDApCisJCXJldHVybiAtRU5PREVWOworCisJLyogRklYTUU6IENoZWNrIGxlbmd0aCA8PSB1c2VyX2xlbmd0aC4gKi8KKworCWVuZCA9IGJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+Y2FwYWNpdHk7CisJbGVuZ3RoID0gYnVmZmVyLT5oZWFkLT5sZW5ndGg7CisKKwlpZiAoJmJ1ZmZlci0+aGVhZC0+ZGF0YVtsZW5ndGhdIDwgZW5kKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZGF0YSwgYnVmZmVyLT5oZWFkLT5kYXRhLCBsZW5ndGgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWJ1ZmZlci0+aGVhZCA9IChzdHJ1Y3QgcGFja2V0ICopICZidWZmZXItPmhlYWQtPmRhdGFbbGVuZ3RoXTsKKwl9IGVsc2UgeworCQlzaXplX3Qgc3BsaXQgPSBlbmQgLSBidWZmZXItPmhlYWQtPmRhdGE7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCBidWZmZXItPmhlYWQtPmRhdGEsIHNwbGl0KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGRhdGEgKyBzcGxpdCwgYnVmZmVyLT5kYXRhLCBsZW5ndGggLSBzcGxpdCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnVmZmVyLT5oZWFkID0gKHN0cnVjdCBwYWNrZXQgKikgJmJ1ZmZlci0+ZGF0YVtsZW5ndGggLSBzcGxpdF07CisJfQorCisJLyoKKwkgKiBEZWNyZWFzZSBidWZmZXItPnNpemUgYXMgdGhlIGxhc3QgdGhpbmcsIHNpbmNlIHRoaXMgaXMgd2hhdAorCSAqIGtlZXBzIHRoZSBpbnRlcnJ1cHQgZnJvbSBvdmVyd3JpdGluZyB0aGUgcGFja2V0IHdlIGFyZQorCSAqIHJldHJpZXZpbmcgZnJvbSB0aGUgYnVmZmVyLgorCSAqLworCWF0b21pY19zdWIoc2l6ZW9mKHN0cnVjdCBwYWNrZXQpICsgbGVuZ3RoLCAmYnVmZmVyLT5zaXplKTsKKworCXJldHVybiBsZW5ndGg7Cit9CisKK3N0YXRpYyB2b2lkCitwYWNrZXRfYnVmZmVyX3B1dChzdHJ1Y3QgcGFja2V0X2J1ZmZlciAqYnVmZmVyLCB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCWNoYXIgKmVuZDsKKworCWJ1ZmZlci0+dG90YWxfcGFja2V0X2NvdW50Kys7CisKKwlpZiAoYnVmZmVyLT5jYXBhY2l0eSA8CisJICAgIGF0b21pY19yZWFkKCZidWZmZXItPnNpemUpICsgc2l6ZW9mKHN0cnVjdCBwYWNrZXQpICsgbGVuZ3RoKSB7CisJCWJ1ZmZlci0+bG9zdF9wYWNrZXRfY291bnQrKzsKKwkJcmV0dXJuOworCX0KKworCWVuZCA9IGJ1ZmZlci0+ZGF0YSArIGJ1ZmZlci0+Y2FwYWNpdHk7CisJYnVmZmVyLT50YWlsLT5sZW5ndGggPSBsZW5ndGg7CisKKwlpZiAoJmJ1ZmZlci0+dGFpbC0+ZGF0YVtsZW5ndGhdIDwgZW5kKSB7CisJCW1lbWNweShidWZmZXItPnRhaWwtPmRhdGEsIGRhdGEsIGxlbmd0aCk7CisJCWJ1ZmZlci0+dGFpbCA9IChzdHJ1Y3QgcGFja2V0ICopICZidWZmZXItPnRhaWwtPmRhdGFbbGVuZ3RoXTsKKwl9IGVsc2UgeworCQlzaXplX3Qgc3BsaXQgPSBlbmQgLSBidWZmZXItPnRhaWwtPmRhdGE7CisKKwkJbWVtY3B5KGJ1ZmZlci0+dGFpbC0+ZGF0YSwgZGF0YSwgc3BsaXQpOworCQltZW1jcHkoYnVmZmVyLT5kYXRhLCBkYXRhICsgc3BsaXQsIGxlbmd0aCAtIHNwbGl0KTsKKwkJYnVmZmVyLT50YWlsID0gKHN0cnVjdCBwYWNrZXQgKikgJmJ1ZmZlci0+ZGF0YVtsZW5ndGggLSBzcGxpdF07CisJfQorCisJLyogRmluYWxseSwgYWRqdXN0IGJ1ZmZlciBzaXplIGFuZCB3YWtlIHVwIHVzZXJzcGFjZSByZWFkZXIuICovCisKKwlhdG9taWNfYWRkKHNpemVvZihzdHJ1Y3QgcGFja2V0KSArIGxlbmd0aCwgJmJ1ZmZlci0+c2l6ZSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZidWZmZXItPndhaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3JlZ193cml0ZShzdHJ1Y3QgcGNpbHlueCAqbHlueCwgaW50IG9mZnNldCwgdTMyIGRhdGEpCit7CisJd3JpdGVsKGRhdGEsIGx5bngtPnJlZ2lzdGVycyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCityZWdfcmVhZChzdHJ1Y3QgcGNpbHlueCAqbHlueCwgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwobHlueC0+cmVnaXN0ZXJzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCityZWdfc2V0X2JpdHMoc3RydWN0IHBjaWx5bnggKmx5bngsIGludCBvZmZzZXQsIHUzMiBtYXNrKQoreworCXJlZ193cml0ZShseW54LCBvZmZzZXQsIChyZWdfcmVhZChseW54LCBvZmZzZXQpIHwgbWFzaykpOworfQorCisvKgorICogTWF5YmUgdGhlIHBjbCBwcm9ncmFtcyBjb3VsZCBiZSBzZXQgdXAgdG8ganVzdCBhcHBlbmQgZGF0YSBpbnN0ZWFkCisgKiBvZiB1c2luZyBhIHdob2xlIHBhY2tldC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitydW5fcGNsKHN0cnVjdCBwY2lseW54ICpseW54LCBkbWFfYWRkcl90IHBjbF9idXMsCisJCQkgICBpbnQgZG1hY2hhbikKK3sKKwlyZWdfd3JpdGUobHlueCwgRE1BMF9DVVJSRU5UX1BDTCArIGRtYWNoYW4gKiAweDIwLCBwY2xfYnVzKTsKKwlyZWdfd3JpdGUobHlueCwgRE1BMF9DSEFOX0NUUkwgKyBkbWFjaGFuICogMHgyMCwKKwkJICBETUFfQ0hBTl9DVFJMX0VOQUJMRSB8IERNQV9DSEFOX0NUUkxfTElOSyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9waHlfcmVnKHN0cnVjdCBwY2lseW54ICpseW54LCBpbnQgYWRkciwgaW50IHZhbCkKK3sKKwlpZiAoYWRkciA+IDE1KSB7CisJCWRldl9lcnIoJmx5bngtPnBjaV9kZXZpY2UtPmRldiwKKwkJCSJQSFkgcmVnaXN0ZXIgYWRkcmVzcyAlZCBvdXQgb2YgcmFuZ2VcbiIsIGFkZHIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICh2YWwgPiAweGZmKSB7CisJCWRldl9lcnIoJmx5bngtPnBjaV9kZXZpY2UtPmRldiwKKwkJCSJQSFkgcmVnaXN0ZXIgdmFsdWUgJWQgb3V0IG9mIHJhbmdlXG4iLCB2YWwpOworCQlyZXR1cm4gLTE7CisJfQorCXJlZ193cml0ZShseW54LCBMSU5LX1BIWSwgTElOS19QSFlfV1JJVEUgfAorCQkgIExJTktfUEhZX0FERFIoYWRkcikgfCBMSU5LX1BIWV9XREFUQSh2YWwpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citub3N5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHBjaWx5bnggKnRtcCwgKmx5bnggPSBOVUxMOworCisJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjYXJkX2xpc3QsIGxpbmspCisJCWlmICh0bXAtPm1pc2MubWlub3IgPT0gbWlub3IpIHsKKwkJCWx5bnggPSBseW54X2dldCh0bXApOworCQkJYnJlYWs7CisJCX0KKwltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOworCWlmIChseW54ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJY2xpZW50ID0ga21hbGxvYyhzaXplb2YgKmNsaWVudCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNsaWVudCA9PSBOVUxMKQorCQlnb3RvIGZhaWw7CisKKwljbGllbnQtPnRjb2RlX21hc2sgPSB+MDsKKwljbGllbnQtPmx5bnggPSBseW54OworCUlOSVRfTElTVF9IRUFEKCZjbGllbnQtPmxpbmspOworCisJaWYgKHBhY2tldF9idWZmZXJfaW5pdCgmY2xpZW50LT5idWZmZXIsIDEyOCAqIDEwMjQpIDwgMCkKKwkJZ290byBmYWlsOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OworCisJcmV0dXJuIDA7CitmYWlsOgorCWtmcmVlKGNsaWVudCk7CisJbHlueF9wdXQobHlueCk7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludAorbm9zeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGNpbHlueCAqbHlueCA9IGNsaWVudC0+bHlueDsKKworCXNwaW5fbG9ja19pcnEoJmx5bngtPmNsaWVudF9saXN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGluayk7CisJc3Bpbl91bmxvY2tfaXJxKCZseW54LT5jbGllbnRfbGlzdF9sb2NrKTsKKworCXBhY2tldF9idWZmZXJfZGVzdHJveSgmY2xpZW50LT5idWZmZXIpOworCWtmcmVlKGNsaWVudCk7CisJbHlueF9wdXQobHlueCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbm9zeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmNsaWVudC0+YnVmZmVyLndhaXQsIHB0KTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xpZW50LT5idWZmZXIuc2l6ZSkgPiAwKQorCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJaWYgKGxpc3RfZW1wdHkoJmNsaWVudC0+bHlueC0+bGluaykpCisJCXJldCB8PSBQT0xMSFVQOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QKK25vc3lfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gcGFja2V0X2J1ZmZlcl9nZXQoY2xpZW50LCBidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIGxvbmcKK25vc3lfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzcGlubG9ja190ICpjbGllbnRfbGlzdF9sb2NrID0gJmNsaWVudC0+bHlueC0+Y2xpZW50X2xpc3RfbG9jazsKKwlzdHJ1Y3Qgbm9zeV9zdGF0cyBzdGF0czsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBOT1NZX0lPQ19HRVRfU1RBVFM6CisJCXNwaW5fbG9ja19pcnEoY2xpZW50X2xpc3RfbG9jayk7CisJCXN0YXRzLnRvdGFsX3BhY2tldF9jb3VudCA9IGNsaWVudC0+YnVmZmVyLnRvdGFsX3BhY2tldF9jb3VudDsKKwkJc3RhdHMubG9zdF9wYWNrZXRfY291bnQgID0gY2xpZW50LT5idWZmZXIubG9zdF9wYWNrZXRfY291bnQ7CisJCXNwaW5fdW5sb2NrX2lycShjbGllbnRfbGlzdF9sb2NrKTsKKworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSBhcmcsICZzdGF0cywgc2l6ZW9mIHN0YXRzKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCWNhc2UgTk9TWV9JT0NfU1RBUlQ6CisJCXNwaW5fbG9ja19pcnEoY2xpZW50X2xpc3RfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+bGluaywgJmNsaWVudC0+bHlueC0+Y2xpZW50X2xpc3QpOworCQlzcGluX3VubG9ja19pcnEoY2xpZW50X2xpc3RfbG9jayk7CisKKwkJcmV0dXJuIDA7CisKKwljYXNlIE5PU1lfSU9DX1NUT1A6CisJCXNwaW5fbG9ja19pcnEoY2xpZW50X2xpc3RfbG9jayk7CisJCWxpc3RfZGVsX2luaXQoJmNsaWVudC0+bGluayk7CisJCXNwaW5fdW5sb2NrX2lycShjbGllbnRfbGlzdF9sb2NrKTsKKworCQlyZXR1cm4gMDsKKworCWNhc2UgTk9TWV9JT0NfRklMVEVSOgorCQlzcGluX2xvY2tfaXJxKGNsaWVudF9saXN0X2xvY2spOworCQljbGllbnQtPnRjb2RlX21hc2sgPSBhcmc7CisJCXNwaW5fdW5sb2NrX2lycShjbGllbnRfbGlzdF9sb2NrKTsKKworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQkvKiBGbHVzaCBidWZmZXIsIGNvbmZpZ3VyZSBmaWx0ZXIuICovCisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBub3N5X29wcyA9IHsKKwkub3duZXIgPQkJVEhJU19NT0RVTEUsCisJLnJlYWQgPQkJCW5vc3lfcmVhZCwKKwkudW5sb2NrZWRfaW9jdGwgPQlub3N5X2lvY3RsLAorCS5wb2xsID0JCQlub3N5X3BvbGwsCisJLm9wZW4gPQkJCW5vc3lfb3BlbiwKKwkucmVsZWFzZSA9CQlub3N5X3JlbGVhc2UsCit9OworCisjZGVmaW5lIFBIWV9QQUNLRVRfU0laRSAxMiAvKiAxIHBheWxvYWQsIDEgaW52ZXJzZSwgMSBhY2sgPSAzIHF1YWRsZXRzICovCisKK3N0YXRpYyB2b2lkCitwYWNrZXRfaXJxX2hhbmRsZXIoc3RydWN0IHBjaWx5bnggKmx5bngpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCXUzMiB0Y29kZV9tYXNrLCB0Y29kZTsKKwlzaXplX3QgbGVuZ3RoOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJLyogRklYTUU6IEFsc28gcmVwb3J0IHJjdl9zcGVlZC4gKi8KKworCWxlbmd0aCA9IF9fbGUzMl90b19jcHUobHlueC0+cmN2X3BjbC0+cGNsX3N0YXR1cykgJiAweDAwMDAxZmZmOworCXRjb2RlICA9IF9fbGUzMl90b19jcHUobHlueC0+cmN2X2J1ZmZlclsxXSkgPj4gNCAmIDB4ZjsKKworCWRvX2dldHRpbWVvZmRheSgmdHYpOworCWx5bngtPnJjdl9idWZmZXJbMF0gPSAoX19mb3JjZSBfX2xlMzIpdHYudHZfdXNlYzsKKworCWlmIChsZW5ndGggPT0gUEhZX1BBQ0tFVF9TSVpFKQorCQl0Y29kZV9tYXNrID0gMSA8PCBUQ09ERV9QSFlfUEFDS0VUOworCWVsc2UKKwkJdGNvZGVfbWFzayA9IDEgPDwgdGNvZGU7CisKKwlzcGluX2xvY2soJmx5bngtPmNsaWVudF9saXN0X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZseW54LT5jbGllbnRfbGlzdCwgbGluaykKKwkJaWYgKGNsaWVudC0+dGNvZGVfbWFzayAmIHRjb2RlX21hc2spCisJCQlwYWNrZXRfYnVmZmVyX3B1dCgmY2xpZW50LT5idWZmZXIsCisJCQkJCSAgbHlueC0+cmN2X2J1ZmZlciwgbGVuZ3RoICsgNCk7CisKKwlzcGluX3VubG9jaygmbHlueC0+Y2xpZW50X2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitidXNfcmVzZXRfaXJxX2hhbmRsZXIoc3RydWN0IHBjaWx5bnggKmx5bngpCit7CisJc3RydWN0IGNsaWVudCAqY2xpZW50OworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisKKwlzcGluX2xvY2soJmx5bngtPmNsaWVudF9saXN0X2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGllbnQsICZseW54LT5jbGllbnRfbGlzdCwgbGluaykKKwkJcGFja2V0X2J1ZmZlcl9wdXQoJmNsaWVudC0+YnVmZmVyLCAmdHYudHZfdXNlYywgNCk7CisKKwlzcGluX3VubG9jaygmbHlueC0+Y2xpZW50X2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAoraXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2aWNlKQoreworCXN0cnVjdCBwY2lseW54ICpseW54ID0gZGV2aWNlOworCXUzMiBwY2lfaW50X3N0YXR1czsKKworCXBjaV9pbnRfc3RhdHVzID0gcmVnX3JlYWQobHlueCwgUENJX0lOVF9TVEFUVVMpOworCisJaWYgKHBjaV9pbnRfc3RhdHVzID09IH4wKQorCQkvKiBDYXJkIHdhcyBlamVjdGVkLiAqLworCQlyZXR1cm4gSVJRX05PTkU7CisKKwlpZiAoKHBjaV9pbnRfc3RhdHVzICYgUENJX0lOVF9JTlRfUEVORCkgPT0gMCkKKwkJLyogTm90IG91ciBpbnRlcnJ1cHQsIGJhaWwgb3V0IHF1aWNrbHkuICovCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmICgocGNpX2ludF9zdGF0dXMgJiBQQ0lfSU5UX1AxMzk0X0lOVCkgIT0gMCkgeworCQl1MzIgbGlua19pbnRfc3RhdHVzOworCisJCWxpbmtfaW50X3N0YXR1cyA9IHJlZ19yZWFkKGx5bngsIExJTktfSU5UX1NUQVRVUyk7CisJCXJlZ193cml0ZShseW54LCBMSU5LX0lOVF9TVEFUVVMsIGxpbmtfaW50X3N0YXR1cyk7CisKKwkJaWYgKChsaW5rX2ludF9zdGF0dXMgJiBMSU5LX0lOVF9QSFlfQlVTUkVTRVQpID4gMCkKKwkJCWJ1c19yZXNldF9pcnFfaGFuZGxlcihseW54KTsKKwl9CisKKwkvKiBDbGVhciB0aGUgUENJX0lOVF9TVEFUVVMgcmVnaXN0ZXIgb25seSBhZnRlciBjbGVhcmluZyB0aGUKKwkgKiBMSU5LX0lOVF9TVEFUVVMgcmVnaXN0ZXI7IG90aGVyd2lzZSB0aGUgUENJX0lOVF9QMTM5NCB3aWxsCisJICogYmUgc2V0IGFnYWluIGltbWVkaWF0ZWx5LiAqLworCisJcmVnX3dyaXRlKGx5bngsIFBDSV9JTlRfU1RBVFVTLCBwY2lfaW50X3N0YXR1cyk7CisKKwlpZiAoKHBjaV9pbnRfc3RhdHVzICYgUENJX0lOVF9ETUEwX0hMVCkgPiAwKSB7CisJCXBhY2tldF9pcnFfaGFuZGxlcihseW54KTsKKwkJcnVuX3BjbChseW54LCBseW54LT5yY3Zfc3RhcnRfcGNsX2J1cywgMCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2NhcmQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpbHlueCAqbHlueCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKworCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOworCWxpc3RfZGVsX2luaXQoJmx5bngtPmxpbmspOworCW1pc2NfZGVyZWdpc3RlcigmbHlueC0+bWlzYyk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKKworCXJlZ193cml0ZShseW54LCBQQ0lfSU5UX0VOQUJMRSwgMCk7CisJZnJlZV9pcnEobHlueC0+cGNpX2RldmljZS0+aXJxLCBseW54KTsKKworCXNwaW5fbG9ja19pcnEoJmx5bngtPmNsaWVudF9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xpZW50LCAmbHlueC0+Y2xpZW50X2xpc3QsIGxpbmspCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2xpZW50LT5idWZmZXIud2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZseW54LT5jbGllbnRfbGlzdF9sb2NrKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwgc2l6ZW9mKHN0cnVjdCBwY2wpLAorCQkJICAgIGx5bngtPnJjdl9zdGFydF9wY2wsIGx5bngtPnJjdl9zdGFydF9wY2xfYnVzKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGx5bngtPnBjaV9kZXZpY2UsIHNpemVvZihzdHJ1Y3QgcGNsKSwKKwkJCSAgICBseW54LT5yY3ZfcGNsLCBseW54LT5yY3ZfcGNsX2J1cyk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChseW54LT5wY2lfZGV2aWNlLCBQQUdFX1NJWkUsCisJCQkgICAgbHlueC0+cmN2X2J1ZmZlciwgbHlueC0+cmN2X2J1ZmZlcl9idXMpOworCisJaW91bm1hcChseW54LT5yZWdpc3RlcnMpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCWx5bnhfcHV0KGx5bngpOworfQorCisjZGVmaW5lIFJDVl9CVUZGRVJfU0laRSAoMTYgKiAxMDI0KQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorYWRkX2NhcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgcGNpbHlueCAqbHlueDsKKwl1MzIgcCwgZW5kOworCWludCByZXQsIGk7CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYsIDB4ZmZmZmZmZmYpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkgICAgIkRNQSBhZGRyZXNzIGxpbWl0cyBub3Qgc3VwcG9ydGVkIGZvciBQQ0lMeW54IGhhcmR3YXJlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIFBDSUx5bnggaGFyZHdhcmVcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKwlwY2lfc2V0X21hc3RlcihkZXYpOworCisJbHlueCA9IGt6YWxsb2Moc2l6ZW9mICpseW54LCBHRlBfS0VSTkVMKTsKKwlpZiAobHlueCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbnRyb2wgc3RydWN0dXJlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2Rpc2FibGU7CisJfQorCWx5bngtPnBjaV9kZXZpY2UgPSBkZXY7CisJcGNpX3NldF9kcnZkYXRhKGRldiwgbHlueCk7CisKKwlzcGluX2xvY2tfaW5pdCgmbHlueC0+Y2xpZW50X2xpc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmx5bngtPmNsaWVudF9saXN0KTsKKwlrcmVmX2luaXQoJmx5bngtPmtyZWYpOworCisJbHlueC0+cmVnaXN0ZXJzID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApLAorCQkJCQkgIFBDSUxZTlhfTUFYX1JFR0lTVEVSKTsKKworCWx5bngtPnJjdl9zdGFydF9wY2wgPSBwY2lfYWxsb2NfY29uc2lzdGVudChseW54LT5wY2lfZGV2aWNlLAorCQkJCXNpemVvZihzdHJ1Y3QgcGNsKSwgJmx5bngtPnJjdl9zdGFydF9wY2xfYnVzKTsKKwlseW54LT5yY3ZfcGNsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwKKwkJCQlzaXplb2Yoc3RydWN0IHBjbCksICZseW54LT5yY3ZfcGNsX2J1cyk7CisJbHlueC0+cmN2X2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGx5bngtPnBjaV9kZXZpY2UsCisJCQkJUkNWX0JVRkZFUl9TSVpFLCAmbHlueC0+cmN2X2J1ZmZlcl9idXMpOworCWlmIChseW54LT5yY3Zfc3RhcnRfcGNsID09IE5VTEwgfHwKKwkgICAgbHlueC0+cmN2X3BjbCA9PSBOVUxMIHx8CisJICAgIGx5bngtPnJjdl9idWZmZXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSByZWNlaXZlIGJ1ZmZlclxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9kZWFsbG9jYXRlOworCX0KKwlseW54LT5yY3Zfc3RhcnRfcGNsLT5uZXh0CT0gY3B1X3RvX2xlMzIobHlueC0+cmN2X3BjbF9idXMpOworCWx5bngtPnJjdl9wY2wtPm5leHQJCT0gY3B1X3RvX2xlMzIoUENMX05FWFRfSU5WQUxJRCk7CisJbHlueC0+cmN2X3BjbC0+YXN5bmNfZXJyb3JfbmV4dAk9IGNwdV90b19sZTMyKFBDTF9ORVhUX0lOVkFMSUQpOworCisJbHlueC0+cmN2X3BjbC0+YnVmZmVyWzBdLmNvbnRyb2wgPQorCQkJY3B1X3RvX2xlMzIoUENMX0NNRF9SQ1YgfCBQQ0xfQklHRU5ESUFOIHwgMjA0NCk7CisJbHlueC0+cmN2X3BjbC0+YnVmZmVyWzBdLnBvaW50ZXIgPQorCQkJY3B1X3RvX2xlMzIobHlueC0+cmN2X2J1ZmZlcl9idXMgKyA0KTsKKwlwID0gbHlueC0+cmN2X2J1ZmZlcl9idXMgKyAyMDQ4OworCWVuZCA9IGx5bngtPnJjdl9idWZmZXJfYnVzICsgUkNWX0JVRkZFUl9TSVpFOworCWZvciAoaSA9IDE7IHAgPCBlbmQ7IGkrKywgcCArPSAyMDQ4KSB7CisJCWx5bngtPnJjdl9wY2wtPmJ1ZmZlcltpXS5jb250cm9sID0KKwkJCWNwdV90b19sZTMyKFBDTF9DTURfUkNWIHwgUENMX0JJR0VORElBTiB8IDIwNDgpOworCQlseW54LT5yY3ZfcGNsLT5idWZmZXJbaV0ucG9pbnRlciA9IGNwdV90b19sZTMyKHApOworCX0KKwlseW54LT5yY3ZfcGNsLT5idWZmZXJbaSAtIDFdLmNvbnRyb2wgfD0gY3B1X3RvX2xlMzIoUENMX0xBU1RfQlVGRik7CisKKwlyZWdfc2V0X2JpdHMobHlueCwgTUlTQ19DT05UUk9MLCBNSVNDX0NPTlRST0xfU1dSRVNFVCk7CisJLyogRml4IGJ1Z2d5IGNhcmRzIHdpdGggYXV0b2Jvb3QgcGluIG5vdCB0aWVkIGxvdzogKi8KKwlyZWdfd3JpdGUobHlueCwgRE1BMF9DSEFOX0NUUkwsIDApOworCXJlZ193cml0ZShseW54LCBETUFfR0xPQkFMX1JFR0lTVEVSLCAweDAwIDw8IDI0KTsKKworI2lmIDAKKwkvKiBub3csIGxvb2tpbmcgZm9yIFBIWSByZWdpc3RlciBzZXQgKi8KKwlpZiAoKGdldF9waHlfcmVnKGx5bngsIDIpICYgMHhlMCkgPT0gMHhlMCkgeworCQlseW54LT5waHlpYy5yZWdfMTM5NGEgPSAxOworCQlQUklOVChLRVJOX0lORk8sIGx5bngtPmlkLAorCQkgICAgICAiZm91bmQgMTM5NGEgY29uZm9ybSBQSFkgKHVzaW5nIGV4dGVuZGVkIHJlZ2lzdGVyIHNldCkiKTsKKwkJbHlueC0+cGh5aWMudmVuZG9yID0gZ2V0X3BoeV92ZW5kb3JpZChseW54KTsKKwkJbHlueC0+cGh5aWMucHJvZHVjdCA9IGdldF9waHlfcHJvZHVjdGlkKGx5bngpOworCX0gZWxzZSB7CisJCWx5bngtPnBoeWljLnJlZ18xMzk0YSA9IDA7CisJCVBSSU5UKEtFUk5fSU5GTywgbHlueC0+aWQsICJmb3VuZCBvbGQgMTM5NCBQSFkiKTsKKwl9CisjZW5kaWYKKworCS8qIFNldHVwIHRoZSBnZW5lcmFsIHJlY2VpdmUgRklGTyBtYXggc2l6ZS4gKi8KKwlyZWdfd3JpdGUobHlueCwgRklGT19TSVpFUywgMjU1KTsKKworCXJlZ19zZXRfYml0cyhseW54LCBQQ0lfSU5UX0VOQUJMRSwgUENJX0lOVF9ETUFfQUxMKTsKKworCXJlZ193cml0ZShseW54LCBMSU5LX0lOVF9FTkFCTEUsCisJCSAgTElOS19JTlRfUEhZX1RJTUVfT1VUIHwgTElOS19JTlRfUEhZX1JFR19SQ1ZEIHwKKwkJICBMSU5LX0lOVF9QSFlfQlVTUkVTRVQgfCBMSU5LX0lOVF9JVF9TVFVDSyB8CisJCSAgTElOS19JTlRfQVRfU1RVQ0sgfCBMSU5LX0lOVF9TTlRSSiB8CisJCSAgTElOS19JTlRfVENfRVJSIHwgTElOS19JTlRfR1JGX09WRVJfRkxPVyB8CisJCSAgTElOS19JTlRfSVRGX1VOREVSX0ZMT1cgfCBMSU5LX0lOVF9BVEZfVU5ERVJfRkxPVyk7CisKKwkvKiBEaXNhYmxlIHRoZSBMIGZsYWcgaW4gc2VsZiBJRCBwYWNrZXRzLiAqLworCXNldF9waHlfcmVnKGx5bngsIDQsIDApOworCisJLyogUHV0IHRoaXMgYmFieSBpbnRvIHNub29wIG1vZGUgKi8KKwlyZWdfc2V0X2JpdHMobHlueCwgTElOS19DT05UUk9MLCBMSU5LX0NPTlRST0xfU05PT1BfRU5BQkxFKTsKKworCXJ1bl9wY2wobHlueCwgbHlueC0+cmN2X3N0YXJ0X3BjbF9idXMsIDApOworCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBpcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCisJCQlkcml2ZXJfbmFtZSwgbHlueCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHNoYXJlZCBpbnRlcnJ1cHQgJWRcbiIsIGRldi0+aXJxKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBmYWlsX2RlYWxsb2NhdGU7CisJfQorCisJbHlueC0+bWlzYy5wYXJlbnQgPSAmZGV2LT5kZXY7CisJbHlueC0+bWlzYy5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKKwlseW54LT5taXNjLm5hbWUgPSAibm9zeSI7CisJbHlueC0+bWlzYy5mb3BzID0gJm5vc3lfb3BzOworCisJbXV0ZXhfbG9jaygmY2FyZF9tdXRleCk7CisJcmV0ID0gbWlzY19yZWdpc3RlcigmbHlueC0+bWlzYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBtaXNjIGNoYXIgZGV2aWNlXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkX211dGV4KTsKKwkJZ290byBmYWlsX2ZyZWVfaXJxOworCX0KKwlsaXN0X2FkZF90YWlsKCZseW54LT5saW5rLCAmY2FyZF9saXN0KTsKKwltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOworCisJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkgIkluaXRpYWxpemVkIFBDSUx5bnggSUVFRTEzOTQgY2FyZCwgaXJxPSVkXG4iLCBkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKKworZmFpbF9mcmVlX2lycToKKwlyZWdfd3JpdGUobHlueCwgUENJX0lOVF9FTkFCTEUsIDApOworCWZyZWVfaXJxKGx5bngtPnBjaV9kZXZpY2UtPmlycSwgbHlueCk7CisKK2ZhaWxfZGVhbGxvY2F0ZToKKwlpZiAobHlueC0+cmN2X3N0YXJ0X3BjbCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChseW54LT5wY2lfZGV2aWNlLCBzaXplb2Yoc3RydWN0IHBjbCksCisJCQkJbHlueC0+cmN2X3N0YXJ0X3BjbCwgbHlueC0+cmN2X3N0YXJ0X3BjbF9idXMpOworCWlmIChseW54LT5yY3ZfcGNsKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGx5bngtPnBjaV9kZXZpY2UsIHNpemVvZihzdHJ1Y3QgcGNsKSwKKwkJCQlseW54LT5yY3ZfcGNsLCBseW54LT5yY3ZfcGNsX2J1cyk7CisJaWYgKGx5bngtPnJjdl9idWZmZXIpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHlueC0+cGNpX2RldmljZSwgUEFHRV9TSVpFLAorCQkJCWx5bngtPnJjdl9idWZmZXIsIGx5bngtPnJjdl9idWZmZXJfYnVzKTsKKwlpb3VubWFwKGx5bngtPnJlZ2lzdGVycyk7CisJa2ZyZWUobHlueCk7CisKK2ZhaWxfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsKKwkJLnZlbmRvciA9ICAgIFBDSV9WRU5ET1JfSURfVEksCisJCS5kZXZpY2UgPSAgICBQQ0lfREVWSUNFX0lEX1RJX1BDSUxZTlgsCisJCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwl9LAorCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGx5bnhfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9CQlkcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPQlwY2lfdGFibGUsCisJLnByb2JlID0JYWRkX2NhcmQsCisJLnJlbW92ZSA9CXJlbW92ZV9jYXJkLAorfTsKKworTU9EVUxFX0FVVEhPUigiS3Jpc3RpYW4gSG9lZ3NiZXJnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNub29wIG1vZGUgZHJpdmVyIGZvciBUSSBwY2lseW54IDEzOTQgY29udHJvbGxlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfdGFibGUpOworCitzdGF0aWMgaW50IF9faW5pdCBub3N5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbHlueF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5vc3lfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbHlueF9wY2lfZHJpdmVyKTsKKworCXByX2luZm8oIlVubG9hZGVkICVzXG4iLCBkcml2ZXJfbmFtZSk7Cit9CisKK21vZHVsZV9pbml0KG5vc3lfaW5pdCk7Cittb2R1bGVfZXhpdChub3N5X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9ub3N5LmggYi9kcml2ZXJzL2ZpcmV3aXJlL25vc3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhmZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJld2lyZS9ub3N5LmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDaGlwIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBQQ0lMeW54IGNoaXBzZXQuICBCYXNlZCBvbiBwY2lseW54LmgKKyAqIGZyb20gdGhlIExpbnV4IDEzOTQgZHJpdmVycywgYnV0IG1vZGlmaWVkIGEgYml0IHNvIHRoZSBuYW1lcyBoZXJlCisgKiBtYXRjaCB0aGUgc3BlY2lmaWNhdGlvbiBleGFjdGx5IChldmVuIHRob3VnaCB0aGV5IGhhdmUgd2VpcmQgbmFtZXMsCisgKiBsaWtlIHh4eF9PVkVSX0ZMT1csIG9yIGFyYml0cmFyeSBhYmJyZXZpYXRpb25zIGxpa2UgU05UUkogZm9yICJzZW50CisgKiByZWplY3QiIGV0Yy4pCisgKi8KKworI2RlZmluZSBQQ0lMWU5YX01BWF9SRUdJU1RFUiAgICAgMHhmZmYKKyNkZWZpbmUgUENJTFlOWF9NQVhfTUVNT1JZICAgICAgIDB4ZmZmZgorCisjZGVmaW5lIFBDSV9MQVRFTkNZX0NBQ0hFTElORSAgICAgICAgICAgICAweDBjCisKKyNkZWZpbmUgTUlTQ19DT05UUk9MICAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTUlTQ19DT05UUk9MX1NXUkVTRVQgICAgICAgICAgICAgICgxPDwwKQorCisjZGVmaW5lIFNFUklBTF9FRVBST01fQ09OVFJPTCAgICAgICAgICAgICAweDQ0CisKKyNkZWZpbmUgUENJX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgUENJX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4NGMKKy8qIHN0YXR1cyBhbmQgZW5hYmxlIGhhdmUgaWRlbnRpY2FsIGJpdCBudW1iZXJzICovCisjZGVmaW5lIFBDSV9JTlRfSU5UX1BFTkQgICAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIFBDSV9JTlRfRlJDX0lOVCAgICAgICAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIFBDSV9JTlRfU0xWX0FEUl9QRVJSICAgICAgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIFBDSV9JTlRfU0xWX0RBVF9QRVJSICAgICAgICAgICAgICAoMTw8MjcpCisjZGVmaW5lIFBDSV9JTlRfTVNUX0RBVF9QRVJSICAgICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIFBDSV9JTlRfTVNUX0RFVl9UTyAgICAgICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIFBDSV9JTlRfSU5UX1NMVl9UTyAgICAgICAgICAgICAgICAoMTw8MjMpCisjZGVmaW5lIFBDSV9JTlRfQVVYX1RPICAgICAgICAgICAgICAgICAgICAoMTw8MTgpCisjZGVmaW5lIFBDSV9JTlRfQVVYX0lOVCAgICAgICAgICAgICAgICAgICAoMTw8MTcpCisjZGVmaW5lIFBDSV9JTlRfUDEzOTRfSU5UICAgICAgICAgICAgICAgICAoMTw8MTYpCisjZGVmaW5lIFBDSV9JTlRfRE1BNF9QQ0wgICAgICAgICAgICAgICAgICAoMTw8OSkKKyNkZWZpbmUgUENJX0lOVF9ETUE0X0hMVCAgICAgICAgICAgICAgICAgICgxPDw4KQorI2RlZmluZSBQQ0lfSU5UX0RNQTNfUENMICAgICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIFBDSV9JTlRfRE1BM19ITFQgICAgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgUENJX0lOVF9ETUEyX1BDTCAgICAgICAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBQQ0lfSU5UX0RNQTJfSExUICAgICAgICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIFBDSV9JTlRfRE1BMV9QQ0wgICAgICAgICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgUENJX0lOVF9ETUExX0hMVCAgICAgICAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBQQ0lfSU5UX0RNQTBfUENMICAgICAgICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIFBDSV9JTlRfRE1BMF9ITFQgICAgICAgICAgICAgICAgICAoMTw8MCkKKy8qIGFsbCBETUEgaW50ZXJydXB0cyBjb21iaW5lZDogKi8KKyNkZWZpbmUgUENJX0lOVF9ETUFfQUxMICAgICAgICAgICAgICAgICAgIDB4M2ZmCisKKyNkZWZpbmUgUENJX0lOVF9ETUFfSExUKGNoYW4pICAgICAgICAgICAgICgxIDw8IChjaGFuICogMikpCisjZGVmaW5lIFBDSV9JTlRfRE1BX1BDTChjaGFuKSAgICAgICAgICAgICAoMSA8PCAoY2hhbiAqIDIgKyAxKSkKKworI2RlZmluZSBMQlVTX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgMHhiNAorI2RlZmluZSBMQlVTX0FERFJfU0VMX1JBTSAgICAgICAgICAgICAgICAgKDB4MDw8MTYpCisjZGVmaW5lIExCVVNfQUREUl9TRUxfUk9NICAgICAgICAgICAgICAgICAoMHgxPDwxNikKKyNkZWZpbmUgTEJVU19BRERSX1NFTF9BVVggICAgICAgICAgICAgICAgICgweDI8PDE2KQorI2RlZmluZSBMQlVTX0FERFJfU0VMX1pWICAgICAgICAgICAgICAgICAgKDB4Mzw8MTYpCisKKyNkZWZpbmUgR1BJT19DVFJMX0EgICAgICAgICAgICAgICAgICAgICAgIDB4YjgKKyNkZWZpbmUgR1BJT19DVFJMX0IgICAgICAgICAgICAgICAgICAgICAgIDB4YmMKKyNkZWZpbmUgR1BJT19EQVRBX0JBU0UgICAgICAgICAgICAgICAgICAgIDB4YzAKKworI2RlZmluZSBETUFfQlJFRyhiYXNlLCBjaGFuKSAgICAgICAgICAgICAgKGJhc2UgKyBjaGFuICogMHgyMCkKKyNkZWZpbmUgRE1BX1NSRUcoYmFzZSwgY2hhbikgICAgICAgICAgICAgIChiYXNlICsgY2hhbiAqIDB4MTApCisKKyNkZWZpbmUgUENMX05FWFRfSU5WQUxJRCAoMTw8MCkKKworLyogdHJhbnNmZXIgY29tbWFuZHMgKi8KKyNkZWZpbmUgUENMX0NNRF9SQ1YgICAgICAgICAgICAoMHgxPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9SQ1ZfQU5EX1VQREFURSAoMHhhPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9YTVQgICAgICAgICAgICAoMHgyPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9VTkZYTVQgICAgICAgICAoMHhjPDwyNCkKKyNkZWZpbmUgUENMX0NNRF9QQ0lfVE9fTEJVUyAgICAoMHg4PDwyNCkKKyNkZWZpbmUgUENMX0NNRF9MQlVTX1RPX1BDSSAgICAoMHg5PDwyNCkKKworLyogYXV4IGNvbW1hbmRzICovCisjZGVmaW5lIFBDTF9DTURfTk9QICAgICAgICAgICAgKDB4MDw8MjQpCisjZGVmaW5lIFBDTF9DTURfTE9BRCAgICAgICAgICAgKDB4Mzw8MjQpCisjZGVmaW5lIFBDTF9DTURfU1RPUkVRICAgICAgICAgKDB4NDw8MjQpCisjZGVmaW5lIFBDTF9DTURfU1RPUkVEICAgICAgICAgKDB4Yjw8MjQpCisjZGVmaW5lIFBDTF9DTURfU1RPUkUwICAgICAgICAgKDB4NTw8MjQpCisjZGVmaW5lIFBDTF9DTURfU1RPUkUxICAgICAgICAgKDB4Njw8MjQpCisjZGVmaW5lIFBDTF9DTURfQ09NUEFSRSAgICAgICAgKDB4ZTw8MjQpCisjZGVmaW5lIFBDTF9DTURfU1dBUF9DT01QQVJFICAgKDB4Zjw8MjQpCisjZGVmaW5lIFBDTF9DTURfQUREICAgICAgICAgICAgKDB4ZDw8MjQpCisjZGVmaW5lIFBDTF9DTURfQlJBTkNIICAgICAgICAgKDB4Nzw8MjQpCisKKy8qIEJSQU5DSCBjb25kaXRpb24gY29kZXMgKi8KKyNkZWZpbmUgUENMX0NPTkRfRE1BUkRZX1NFVCAgICAoMHgxPDwyMCkKKyNkZWZpbmUgUENMX0NPTkRfRE1BUkRZX0NMRUFSICAoMHgyPDwyMCkKKworI2RlZmluZSBQQ0xfR0VOX0lOVFIgICAgICAgICAgICgxPDwxOSkKKyNkZWZpbmUgUENMX0xBU1RfQlVGRiAgICAgICAgICAoMTw8MTgpCisjZGVmaW5lIFBDTF9MQVNUX0NNRCAgICAgICAgICAgKFBDTF9MQVNUX0JVRkYpCisjZGVmaW5lIFBDTF9XQUlUU1RBVCAgICAgICAgICAgKDE8PDE3KQorI2RlZmluZSBQQ0xfQklHRU5ESUFOICAgICAgICAgICgxPDwxNikKKyNkZWZpbmUgUENMX0lTT01PREUgICAgICAgICAgICAoMTw8MTIpCisKKyNkZWZpbmUgRE1BMF9QUkVWX1BDTCAgICAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIERNQTFfUFJFVl9QQ0wgICAgICAgICAgICAgICAgICAgICAweDEyMAorI2RlZmluZSBETUEyX1BSRVZfUENMICAgICAgICAgICAgICAgICAgICAgMHgxNDAKKyNkZWZpbmUgRE1BM19QUkVWX1BDTCAgICAgICAgICAgICAgICAgICAgIDB4MTYwCisjZGVmaW5lIERNQTRfUFJFVl9QQ0wgICAgICAgICAgICAgICAgICAgICAweDE4MAorI2RlZmluZSBETUFfUFJFVl9QQ0woY2hhbikgICAgICAgICAgICAgICAgKERNQV9CUkVHKERNQTBfUFJFVl9QQ0wsIGNoYW4pKQorCisjZGVmaW5lIERNQTBfQ1VSUkVOVF9QQ0wgICAgICAgICAgICAgICAgICAweDEwNAorI2RlZmluZSBETUExX0NVUlJFTlRfUENMICAgICAgICAgICAgICAgICAgMHgxMjQKKyNkZWZpbmUgRE1BMl9DVVJSRU5UX1BDTCAgICAgICAgICAgICAgICAgIDB4MTQ0CisjZGVmaW5lIERNQTNfQ1VSUkVOVF9QQ0wgICAgICAgICAgICAgICAgICAweDE2NAorI2RlZmluZSBETUE0X0NVUlJFTlRfUENMICAgICAgICAgICAgICAgICAgMHgxODQKKyNkZWZpbmUgRE1BX0NVUlJFTlRfUENMKGNoYW4pICAgICAgICAgICAgIChETUFfQlJFRyhETUEwX0NVUlJFTlRfUENMLCBjaGFuKSkKKworI2RlZmluZSBETUEwX0NIQU5fU1RBVCAgICAgICAgICAgICAgICAgICAgMHgxMGMKKyNkZWZpbmUgRE1BMV9DSEFOX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4MTJjCisjZGVmaW5lIERNQTJfQ0hBTl9TVEFUICAgICAgICAgICAgICAgICAgICAweDE0YworI2RlZmluZSBETUEzX0NIQU5fU1RBVCAgICAgICAgICAgICAgICAgICAgMHgxNmMKKyNkZWZpbmUgRE1BNF9DSEFOX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4MThjCisjZGVmaW5lIERNQV9DSEFOX1NUQVQoY2hhbikgICAgICAgICAgICAgICAoRE1BX0JSRUcoRE1BMF9DSEFOX1NUQVQsIGNoYW4pKQorLyogQ0hBTl9TVEFUVVMgcmVnaXN0ZXJzIHNoYXJlIGJpdHMgKi8KKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9TRUxGSUQgICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9JU09QS1QgICAgICAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9QQ0lFUlIgICAgICAgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9QS1RFUlIgICAgICAgICAgICAgICgxPDwyOCkKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9QS1RDTVBMICAgICAgICAgICAgICgxPDwyNykKKyNkZWZpbmUgRE1BX0NIQU5fU1RBVF9TUEVDSUFMQUNLICAgICAgICAgICgxPDwxNCkKKworI2RlZmluZSBETUEwX0NIQU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgMHgxMTAKKyNkZWZpbmUgRE1BMV9DSEFOX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4MTMwCisjZGVmaW5lIERNQTJfQ0hBTl9DVFJMICAgICAgICAgICAgICAgICAgICAweDE1MAorI2RlZmluZSBETUEzX0NIQU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgMHgxNzAKKyNkZWZpbmUgRE1BNF9DSEFOX0NUUkwgICAgICAgICAgICAgICAgICAgIDB4MTkwCisjZGVmaW5lIERNQV9DSEFOX0NUUkwoY2hhbikgICAgICAgICAgICAgICAoRE1BX0JSRUcoRE1BMF9DSEFOX0NUUkwsIGNoYW4pKQorLyogQ0hBTl9DVFJMIHJlZ2lzdGVycyBzaGFyZSBiaXRzICovCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfRU5BQkxFICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfQlVTWSAgICAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIERNQV9DSEFOX0NUUkxfTElOSyAgICAgICAgICAgICAgICAoMTw8MjkpCisKKyNkZWZpbmUgRE1BMF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE0CisjZGVmaW5lIERNQTFfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAweDEzNAorI2RlZmluZSBETUEyX1JFQURZICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTQKKyNkZWZpbmUgRE1BM19SRUFEWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MTc0CisjZGVmaW5lIERNQTRfUkVBRFkgICAgICAgICAgICAgICAgICAgICAgICAweDE5NAorI2RlZmluZSBETUFfUkVBRFkoY2hhbikgICAgICAgICAgICAgICAgICAgKERNQV9CUkVHKERNQTBfUkVBRFksIGNoYW4pKQorCisjZGVmaW5lIERNQV9HTE9CQUxfUkVHSVNURVIgICAgICAgICAgICAgICAweDkwOAorCisjZGVmaW5lIEZJRk9fU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAweGEwMAorCisjZGVmaW5lIEZJRk9fQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweGExMAorI2RlZmluZSBGSUZPX0NPTlRST0xfR1JGX0ZMVVNIICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIEZJRk9fQ09OVFJPTF9JVEZfRkxVU0ggICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRklGT19DT05UUk9MX0FURl9GTFVTSCAgICAgICAgICAgICgxPDwyKQorCisjZGVmaW5lIEZJRk9fWE1JVF9USFJFU0hPTEQgICAgICAgICAgICAgICAweGExNAorCisjZGVmaW5lIERNQTBfV09SRDBfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIwMAorI2RlZmluZSBETUExX1dPUkQwX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiMTAKKyNkZWZpbmUgRE1BMl9XT1JEMF9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjIwCisjZGVmaW5lIERNQTNfV09SRDBfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIzMAorI2RlZmluZSBETUE0X1dPUkQwX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiNDAKKyNkZWZpbmUgRE1BX1dPUkQwX0NNUF9WQUxVRShjaGFuKQkoRE1BX1NSRUcoRE1BMF9XT1JEMF9DTVBfVkFMVUUsIGNoYW4pKQorCisjZGVmaW5lIERNQTBfV09SRDBfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIwNAorI2RlZmluZSBETUExX1dPUkQwX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiMTQKKyNkZWZpbmUgRE1BMl9XT1JEMF9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjI0CisjZGVmaW5lIERNQTNfV09SRDBfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIzNAorI2RlZmluZSBETUE0X1dPUkQwX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiNDQKKyNkZWZpbmUgRE1BX1dPUkQwX0NNUF9FTkFCTEUoY2hhbikJKERNQV9TUkVHKERNQTBfV09SRDBfQ01QX0VOQUJMRSwgY2hhbikpCisKKyNkZWZpbmUgRE1BMF9XT1JEMV9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjA4CisjZGVmaW5lIERNQTFfV09SRDFfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGIxOAorI2RlZmluZSBETUEyX1dPUkQxX0NNUF9WQUxVRSAgICAgICAgICAgICAgMHhiMjgKKyNkZWZpbmUgRE1BM19XT1JEMV9DTVBfVkFMVUUgICAgICAgICAgICAgIDB4YjM4CisjZGVmaW5lIERNQTRfV09SRDFfQ01QX1ZBTFVFICAgICAgICAgICAgICAweGI0OAorI2RlZmluZSBETUFfV09SRDFfQ01QX1ZBTFVFKGNoYW4pCShETUFfU1JFRyhETUEwX1dPUkQxX0NNUF9WQUxVRSwgY2hhbikpCisKKyNkZWZpbmUgRE1BMF9XT1JEMV9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjBjCisjZGVmaW5lIERNQTFfV09SRDFfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGIxYworI2RlZmluZSBETUEyX1dPUkQxX0NNUF9FTkFCTEUgICAgICAgICAgICAgMHhiMmMKKyNkZWZpbmUgRE1BM19XT1JEMV9DTVBfRU5BQkxFICAgICAgICAgICAgIDB4YjNjCisjZGVmaW5lIERNQTRfV09SRDFfQ01QX0VOQUJMRSAgICAgICAgICAgICAweGI0YworI2RlZmluZSBETUFfV09SRDFfQ01QX0VOQUJMRShjaGFuKQkoRE1BX1NSRUcoRE1BMF9XT1JEMV9DTVBfRU5BQkxFLCBjaGFuKSkKKy8qIHdvcmQgMSBjb21wYXJlIGVuYWJsZSBmbGFncyAqLworI2RlZmluZSBETUFfV09SRDFfQ01QX01BVENIX09USEVSQlVTICAgICAgKDE8PDE1KQorI2RlZmluZSBETUFfV09SRDFfQ01QX01BVENIX0JST0FEQ0FTVCAgICAgKDE8PDE0KQorI2RlZmluZSBETUFfV09SRDFfQ01QX01BVENIX0JVU19CQ0FTVCAgICAgKDE8PDEzKQorI2RlZmluZSBETUFfV09SRDFfQ01QX01BVENIX0xPQ0FMX05PREUgICAgKDE8PDEyKQorI2RlZmluZSBETUFfV09SRDFfQ01QX01BVENIX0VYQUNUICAgICAgICAgKDE8PDExKQorI2RlZmluZSBETUFfV09SRDFfQ01QX0VOQUJMRV9TRUxGX0lEICAgICAgKDE8PDEwKQorI2RlZmluZSBETUFfV09SRDFfQ01QX0VOQUJMRV9NQVNURVIgICAgICAgKDE8PDgpCisKKyNkZWZpbmUgTElOS19JRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZjAwCisjZGVmaW5lIExJTktfSURfQlVTKGlkKSAgICAgICAgICAgICAgICAgICAoaWQ8PDIyKQorI2RlZmluZSBMSU5LX0lEX05PREUoaWQpICAgICAgICAgICAgICAgICAgKGlkPDwxNikKKworI2RlZmluZSBMSU5LX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHhmMDQKKyNkZWZpbmUgTElOS19DT05UUk9MX0JVU1kgICAgICAgICAgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgTElOS19DT05UUk9MX1RYX0lTT19FTiAgICAgICAgICAgICgxPDwyNikKKyNkZWZpbmUgTElOS19DT05UUk9MX1JYX0lTT19FTiAgICAgICAgICAgICgxPDwyNSkKKyNkZWZpbmUgTElOS19DT05UUk9MX1RYX0FTWU5DX0VOICAgICAgICAgICgxPDwyNCkKKyNkZWZpbmUgTElOS19DT05UUk9MX1JYX0FTWU5DX0VOICAgICAgICAgICgxPDwyMykKKyNkZWZpbmUgTElOS19DT05UUk9MX1JFU0VUX1RYICAgICAgICAgICAgICgxPDwyMSkKKyNkZWZpbmUgTElOS19DT05UUk9MX1JFU0VUX1JYICAgICAgICAgICAgICgxPDwyMCkKKyNkZWZpbmUgTElOS19DT05UUk9MX0NZQ01BU1RFUiAgICAgICAgICAgICgxPDwxMSkKKyNkZWZpbmUgTElOS19DT05UUk9MX0NZQ1NPVVJDRSAgICAgICAgICAgICgxPDwxMCkKKyNkZWZpbmUgTElOS19DT05UUk9MX0NZQ1RJTUVSRU4gICAgICAgICAgICgxPDw5KQorI2RlZmluZSBMSU5LX0NPTlRST0xfUkNWX0NNUF9WQUxJRCAgICAgICAgKDE8PDcpCisjZGVmaW5lIExJTktfQ09OVFJPTF9TTk9PUF9FTkFCTEUgICAgICAgICAoMTw8NikKKworI2RlZmluZSBDWUNMRV9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgMHhmMDgKKworI2RlZmluZSBMSU5LX1BIWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMGMKKyNkZWZpbmUgTElOS19QSFlfUkVBRCAgICAgICAgICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgTElOS19QSFlfV1JJVEUgICAgICAgICAgICAgICAgICAgICgxPDwzMCkKKyNkZWZpbmUgTElOS19QSFlfQUREUihhZGRyKSAgICAgICAgICAgICAgIChhZGRyPDwyNCkKKyNkZWZpbmUgTElOS19QSFlfV0RBVEEoZGF0YSkgICAgICAgICAgICAgIChkYXRhPDwxNikKKyNkZWZpbmUgTElOS19QSFlfUkFERFIoYWRkcikgICAgICAgICAgICAgIChhZGRyPDw4KQorCisjZGVmaW5lIExJTktfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweGYxNAorI2RlZmluZSBMSU5LX0lOVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhmMTgKKy8qIHN0YXR1cyBhbmQgZW5hYmxlIGhhdmUgaWRlbnRpY2FsIGJpdCBudW1iZXJzICovCisjZGVmaW5lIExJTktfSU5UX0xJTktfSU5UICAgICAgICAgICAgICAgICAoMTw8MzEpCisjZGVmaW5lIExJTktfSU5UX1BIWV9USU1FX09VVCAgICAgICAgICAgICAoMTw8MzApCisjZGVmaW5lIExJTktfSU5UX1BIWV9SRUdfUkNWRCAgICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIExJTktfSU5UX1BIWV9CVVNSRVNFVCAgICAgICAgICAgICAoMTw8MjgpCisjZGVmaW5lIExJTktfSU5UX1RYX1JEWSAgICAgICAgICAgICAgICAgICAoMTw8MjYpCisjZGVmaW5lIExJTktfSU5UX1JYX0RBVEFfUkRZICAgICAgICAgICAgICAoMTw8MjUpCisjZGVmaW5lIExJTktfSU5UX0lUX1NUVUNLICAgICAgICAgICAgICAgICAoMTw8MjApCisjZGVmaW5lIExJTktfSU5UX0FUX1NUVUNLICAgICAgICAgICAgICAgICAoMTw8MTkpCisjZGVmaW5lIExJTktfSU5UX1NOVFJKICAgICAgICAgICAgICAgICAgICAoMTw8MTcpCisjZGVmaW5lIExJTktfSU5UX0hEUl9FUlIgICAgICAgICAgICAgICAgICAoMTw8MTYpCisjZGVmaW5lIExJTktfSU5UX1RDX0VSUiAgICAgICAgICAgICAgICAgICAoMTw8MTUpCisjZGVmaW5lIExJTktfSU5UX0NZQ19TRUMgICAgICAgICAgICAgICAgICAoMTw8MTEpCisjZGVmaW5lIExJTktfSU5UX0NZQ19TVFJUICAgICAgICAgICAgICAgICAoMTw8MTApCisjZGVmaW5lIExJTktfSU5UX0NZQ19ET05FICAgICAgICAgICAgICAgICAoMTw8OSkKKyNkZWZpbmUgTElOS19JTlRfQ1lDX1BFTkQgICAgICAgICAgICAgICAgICgxPDw4KQorI2RlZmluZSBMSU5LX0lOVF9DWUNfTE9TVCAgICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIExJTktfSU5UX0NZQ19BUkJfRkFJTEVEICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTElOS19JTlRfR1JGX09WRVJfRkxPVyAgICAgICAgICAgICgxPDw1KQorI2RlZmluZSBMSU5LX0lOVF9JVEZfVU5ERVJfRkxPVyAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIExJTktfSU5UX0FURl9VTkRFUl9GTE9XICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTElOS19JTlRfSUFSQl9GQUlMRUQgICAgICAgICAgICAgICgxPDwwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9vaGNpLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwppbmRleCA5ZjYyN2U3Li43ZjAzNTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMTgsNiArMTgsNyBAQAogICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzIsMTEgKzMzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTcwLDYgKzE3MywxMCBAQAogCWludCBnZW5lcmF0aW9uOwogCWludCByZXF1ZXN0X2dlbmVyYXRpb247CS8qIGZvciB0aW1lc3RhbXBpbmcgaW5jb21pbmcgcmVxdWVzdHMgKi8KIAl1bnNpZ25lZCBxdWlya3M7CisJdW5zaWduZWQgaW50IHByaV9yZXFfbWF4OworCXUzMiBidXNfdGltZTsKKwlib29sIGlzX3Jvb3Q7CisJYm9vbCBjc3Jfc3RhdGVfc2V0Y2xlYXJfYWJkaWNhdGU7CiAKIAkvKgogCSAqIFNwaW5sb2NrIGZvciBhY2Nlc3NpbmcgZndfb2hjaSBkYXRhLiAgTmV2ZXIgY2FsbCBvdXQgb2YKQEAgLTE3NywxNiArMTg0LDIwIEBACiAJICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCisJc3RydWN0IG11dGV4IHBoeV9yZWdfbXV0ZXg7CisKIAlzdHJ1Y3QgYXJfY29udGV4dCBhcl9yZXF1ZXN0X2N0eDsKIAlzdHJ1Y3QgYXJfY29udGV4dCBhcl9yZXNwb25zZV9jdHg7CiAJc3RydWN0IGNvbnRleHQgYXRfcmVxdWVzdF9jdHg7CiAJc3RydWN0IGNvbnRleHQgYXRfcmVzcG9uc2VfY3R4OwogCi0JdTMyIGl0X2NvbnRleHRfbWFzazsKKwl1MzIgaXRfY29udGV4dF9tYXNrOyAgICAgLyogdW5vY2N1cGllZCBJVCBjb250ZXh0cyAqLwogCXN0cnVjdCBpc29fY29udGV4dCAqaXRfY29udGV4dF9saXN0OwotCXU2NCBpcl9jb250ZXh0X2NoYW5uZWxzOwotCXUzMiBpcl9jb250ZXh0X21hc2s7CisJdTY0IGlyX2NvbnRleHRfY2hhbm5lbHM7IC8qIHVub2NjdXBpZWQgY2hhbm5lbHMgKi8KKwl1MzIgaXJfY29udGV4dF9tYXNrOyAgICAgLyogdW5vY2N1cGllZCBJUiBjb250ZXh0cyAqLwogCXN0cnVjdCBpc29fY29udGV4dCAqaXJfY29udGV4dF9saXN0OworCXU2NCBtY19jaGFubmVsczsgLyogY2hhbm5lbHMgaW4gdXNlIGJ5IHRoZSBtdWx0aWNoYW5uZWwgSVIgY29udGV4dCAqLworCWJvb2wgbWNfYWxsb2NhdGVkOwogCiAJX19iZTMyICAgICpjb25maWdfcm9tOwogCWRtYV9hZGRyX3QgY29uZmlnX3JvbV9idXM7CkBAIC0yMzEsMTIgKzI0MiwxNCBAQAogCiBzdGF0aWMgY2hhciBvaGNpX2RyaXZlcl9uYW1lW10gPSBLQlVJTERfTU9ETkFNRTsKIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzhYX0ZXCTB4MjM4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjEyTFYyMgkweDgwMDkKIAogI2RlZmluZSBRVUlSS19DWUNMRV9USU1FUgkJMQogI2RlZmluZSBRVUlSS19SRVNFVF9QQUNLRVQJCTIKICNkZWZpbmUgUVVJUktfQkVfSEVBREVSUwkJNAogI2RlZmluZSBRVUlSS19OT18xMzk0QQkJCTgKKyNkZWZpbmUgUVVJUktfTk9fTVNJCQkJMTYKIAogLyogSW4gY2FzZSBvZiBtdWx0aXBsZSBtYXRjaGVzIGluIG9oY2lfcXVpcmtzW10sIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyB1c2VkLiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB7CkBAIC0yNDcsNiArMjYwLDcgQEAKIAkJCQkJCQkgICAgUVVJUktfTk9fMTM5NEF9LAogCXtQQ0lfVkVORE9SX0lEX1RJLAlQQ0lfQU5ZX0lELAlRVUlSS19SRVNFVF9QQUNLRVR9LAogCXtQQ0lfVkVORE9SX0lEX0FMLAlQQ0lfQU5ZX0lELAlRVUlSS19DWUNMRV9USU1FUn0sCisJe1BDSV9WRU5ET1JfSURfSk1JQ1JPTiwJUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9GVywgUVVJUktfTk9fTVNJfSwKIAl7UENJX1ZFTkRPUl9JRF9ORUMsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKIAl7UENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKIAl7UENJX1ZFTkRPUl9JRF9BUFBMRSwJUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9GVywgUVVJUktfQkVfSEVBREVSU30sCkBAIC0yNjAsNiArMjc0LDcgQEAKIAkiLCByZXNldCBwYWNrZXQgZ2VuZXJhdGlvbiA9ICIJX19zdHJpbmdpZnkoUVVJUktfUkVTRVRfUEFDS0VUKQogCSIsIEFSL3NlbGZJRCBlbmRpYW5lc3MgPSAiCV9fc3RyaW5naWZ5KFFVSVJLX0JFX0hFQURFUlMpCiAJIiwgbm8gMTM5NGEgZW5oYW5jZW1lbnRzID0gIglfX3N0cmluZ2lmeShRVUlSS19OT18xMzk0QSkKKwkiLCBkaXNhYmxlIE1TSSA9ICIJCV9fc3RyaW5naWZ5KFFVSVJLX05PX01TSSkKIAkiKSIpOwogCiAjZGVmaW5lIE9IQ0lfUEFSQU1fREVCVUdfQVRfQVIJCTEKQEAgLTI4OCw3ICszMDMsNyBAQAogCSAgICAhKGV2dCAmIE9IQ0kxMzk0X2J1c1Jlc2V0KSkKIAkJcmV0dXJuOwogCi0JZndfbm90aWZ5KCJJUlEgJTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCisJZndfbm90aWZ5KCJJUlEgJTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXNcbiIsIGV2dCwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfc2VsZklEQ29tcGxldGUJPyAiIHNlbGZJRCIJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X1JRUGt0CQk/ICIgQVJfcmVxIgkJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfUlNQa3QJCT8gIiBBUl9yZXNwIgkJOiAiIiwKQEAgLTI5OCw2ICszMTMsNyBAQAogCSAgICBldnQgJiBPSENJMTM5NF9pc29jaFR4CQk/ICIgSVQiCQkJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIJPyAiIHBvc3RlZFdyaXRlRXJyIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9jeWNsZVRvb0xvbmcJCT8gIiBjeWNsZVRvb0xvbmciCTogIiIsCisJICAgIGV2dCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzCT8gIiBjeWNsZTY0U2Vjb25kcyIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQJPyAiIGN5Y2xlSW5jb25zaXN0ZW50Igk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsCT8gIiByZWdBY2Nlc3NGYWlsIgk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9idXNSZXNldAkJPyAiIGJ1c1Jlc2V0IgkJOiAiIiwKQEAgLTMwNSw3ICszMjEsOCBAQAogCQkgICAgT0hDSTEzOTRfUlNQa3QgfCBPSENJMTM5NF9yZXFUeENvbXBsZXRlIHwKIAkJICAgIE9IQ0kxMzk0X3Jlc3BUeENvbXBsZXRlIHwgT0hDSTEzOTRfaXNvY2hSeCB8CiAJCSAgICBPSENJMTM5NF9pc29jaFR4IHwgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIgfAotCQkgICAgT0hDSTEzOTRfY3ljbGVUb29Mb25nIHwgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfAorCQkgICAgT0hDSTEzOTRfY3ljbGVUb29Mb25nIHwgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMgfAorCQkgICAgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfAogCQkgICAgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8IE9IQ0kxMzk0X2J1c1Jlc2V0KQogCQkJCQkJPyAiID8iCQkJOiAiIik7CiB9CkBAIC00NzAsMTIgKzQ4NywxNyBAQAogCWludCBpOwogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X1BoeUNvbnRyb2wsIE9IQ0kxMzk0X1BoeUNvbnRyb2xfUmVhZChhZGRyKSk7Ci0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMyArIDEwMDsgaSsrKSB7CiAJCXZhbCA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1BoeUNvbnRyb2wpOwogCQlpZiAodmFsICYgT0hDSTEzOTRfUGh5Q29udHJvbF9SZWFkRG9uZSkKIAkJCXJldHVybiBPSENJMTM5NF9QaHlDb250cm9sX1JlYWREYXRhKHZhbCk7CiAKLQkJbXNsZWVwKDEpOworCQkvKgorCQkgKiBUcnkgYSBmZXcgdGltZXMgd2l0aG91dCB3YWl0aW5nLiAgU2xlZXBpbmcgaXMgbmVjZXNzYXJ5CisJCSAqIG9ubHkgd2hlbiB0aGUgbGluay9QSFkgaW50ZXJmYWNlIGlzIGJ1c3kuCisJCSAqLworCQlpZiAoaSA+PSAzKQorCQkJbXNsZWVwKDEpOwogCX0KIAlmd19lcnJvcigiZmFpbGVkIHRvIHJlYWQgcGh5IHJlZ1xuIik7CiAKQEAgLTQ4OCwyNSArNTEwLDIzIEBACiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfUGh5Q29udHJvbCwKIAkJICBPSENJMTM5NF9QaHlDb250cm9sX1dyaXRlKGFkZHIsIHZhbCkpOwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAzICsgMTAwOyBpKyspIHsKIAkJdmFsID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfUGh5Q29udHJvbCk7CiAJCWlmICghKHZhbCAmIE9IQ0kxMzk0X1BoeUNvbnRyb2xfV3JpdGVQZW5kaW5nKSkKIAkJCXJldHVybiAwOwogCi0JCW1zbGVlcCgxKTsKKwkJaWYgKGkgPj0gMykKKwkJCW1zbGVlcCgxKTsKIAl9CiAJZndfZXJyb3IoImZhaWxlZCB0byB3cml0ZSBwaHkgcmVnXG4iKTsKIAogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHIsCi0JCQkgICAgICAgaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cykKK3N0YXRpYyBpbnQgdXBkYXRlX3BoeV9yZWcoc3RydWN0IGZ3X29oY2kgKm9oY2ksIGludCBhZGRyLAorCQkJICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQogewotCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVhZF9waHlfcmVnKG9oY2ksIGFkZHIpOworCWludCByZXQgPSByZWFkX3BoeV9yZWcob2hjaSwgYWRkcik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTUyNCwxMyArNTQ0LDM4IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IG9oY2lfdXBkYXRlX3BoeV9yZWcoJm9oY2ktPmNhcmQsIDcsIFBIWV9QQUdFX1NFTEVDVCwgcGFnZSA8PCA1KTsKKwlyZXQgPSB1cGRhdGVfcGh5X3JlZyhvaGNpLCA3LCBQSFlfUEFHRV9TRUxFQ1QsIHBhZ2UgPDwgNSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlyZXR1cm4gcmVhZF9waHlfcmVnKG9oY2ksIGFkZHIpOwogfQogCitzdGF0aWMgaW50IG9oY2lfcmVhZF9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkcikKK3sKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJm9oY2ktPnBoeV9yZWdfbXV0ZXgpOworCXJldCA9IHJlYWRfcGh5X3JlZyhvaGNpLCBhZGRyKTsKKwltdXRleF91bmxvY2soJm9oY2ktPnBoeV9yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvaGNpX3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkciwKKwkJCSAgICAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQoreworCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmb2hjaS0+cGh5X3JlZ19tdXRleCk7CisJcmV0ID0gdXBkYXRlX3BoeV9yZWcob2hjaSwgYWRkciwgY2xlYXJfYml0cywgc2V0X2JpdHMpOworCW11dGV4X3VubG9jaygmb2hjaS0+cGh5X3JlZ19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGFyX2NvbnRleHRfYWRkX3BhZ2Uoc3RydWN0IGFyX2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm9oY2ktPmNhcmQuZGV2aWNlOwpAQCAtNTUzLDYgKzU5OCw3IEBACiAJYWItPmRlc2NyaXB0b3IucmVzX2NvdW50ICAgICAgPSBjcHVfdG9fbGUxNihQQUdFX1NJWkUgLSBvZmZzZXQpOwogCWFiLT5kZXNjcmlwdG9yLmJyYW5jaF9hZGRyZXNzID0gMDsKIAorCXdtYigpOyAvKiBmaW5pc2ggaW5pdCBvZiBuZXcgZGVzY3JpcHRvcnMgYmVmb3JlIGJyYW5jaF9hZGRyZXNzIHVwZGF0ZSAqLwogCWN0eC0+bGFzdF9idWZmZXItPmRlc2NyaXB0b3IuYnJhbmNoX2FkZHJlc3MgPSBjcHVfdG9fbGUzMihhYl9idXMgfCAxKTsKIAljdHgtPmxhc3RfYnVmZmVyLT5uZXh0ID0gYWI7CiAJY3R4LT5sYXN0X2J1ZmZlciA9IGFiOwpAQCAtOTQwLDYgKzk4Niw4IEBACiAJZF9idXMgPSBkZXNjLT5idWZmZXJfYnVzICsgKGQgLSBkZXNjLT5idWZmZXIpICogc2l6ZW9mKCpkKTsKIAogCWRlc2MtPnVzZWQgKz0gKHogKyBleHRyYSkgKiBzaXplb2YoKmQpOworCisJd21iKCk7IC8qIGZpbmlzaCBpbml0IG9mIG5ldyBkZXNjcmlwdG9ycyBiZWZvcmUgYnJhbmNoX2FkZHJlc3MgdXBkYXRlICovCiAJY3R4LT5wcmV2LT5icmFuY2hfYWRkcmVzcyA9IGNwdV90b19sZTMyKGRfYnVzIHwgeik7CiAJY3R4LT5wcmV2ID0gZmluZF9icmFuY2hfZGVzY3JpcHRvcihkLCB6KTsKIApAQCAtMTAyNiw2ICsxMDc0LDkgQEAKIAkJaGVhZGVyWzFdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMF0pOwogCQloZWFkZXJbMl0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclsxXSk7CiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoMTIpOworCisJCWlmIChpc19waW5nX3BhY2tldChwYWNrZXQtPmhlYWRlcikpCisJCQlkWzBdLmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9QSU5HKTsKIAkJYnJlYWs7CiAKIAljYXNlIDQ6CkBAIC0xMzExLDYgKzEzNjIsNzggQEAKIAogfQogCitzdGF0aWMgdTMyIGN5Y2xlX3RpbWVyX3RpY2tzKHUzMiBjeWNsZV90aW1lcikKK3sKKwl1MzIgdGlja3M7CisKKwl0aWNrcyA9IGN5Y2xlX3RpbWVyICYgMHhmZmY7CisJdGlja3MgKz0gMzA3MiAqICgoY3ljbGVfdGltZXIgPj4gMTIpICYgMHgxZmZmKTsKKwl0aWNrcyArPSAoMzA3MiAqIDgwMDApICogKGN5Y2xlX3RpbWVyID4+IDI1KTsKKworCXJldHVybiB0aWNrczsKK30KKworLyoKKyAqIFNvbWUgY29udHJvbGxlcnMgZXhoaWJpdCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGJ1Z3Mgd2hlbiB1cGRhdGluZyB0aGUKKyAqIGlzbyBjeWNsZSB0aW1lciByZWdpc3RlcjoKKyAqICAtIFdoZW4gdGhlIGxvd2VzdCBzaXggYml0cyBhcmUgd3JhcHBpbmcgYXJvdW5kIHRvIHplcm8sIGEgcmVhZCB0aGF0IGhhcHBlbnMKKyAqICAgIGF0IHRoZSBzYW1lIHRpbWUgd2lsbCByZXR1cm4gZ2FyYmFnZSBpbiB0aGUgbG93ZXN0IHRlbiBiaXRzLgorICogIC0gV2hlbiB0aGUgY3ljbGVPZmZzZXQgZmllbGQgd3JhcHMgYXJvdW5kIHRvIHplcm8sIHRoZSBjeWNsZUNvdW50IGZpZWxkIGlzCisgKiAgICBub3QgaW5jcmVtZW50ZWQgZm9yIGFib3V0IDYwIG5zLgorICogIC0gT2NjYXNpb25hbGx5LCB0aGUgZW50aXJlIHJlZ2lzdGVyIHJlYWRzIHplcm8uCisgKgorICogVG8gY2F0Y2ggdGhlc2UsIHdlIHJlYWQgdGhlIHJlZ2lzdGVyIHRocmVlIHRpbWVzIGFuZCBlbnN1cmUgdGhhdCB0aGUKKyAqIGRpZmZlcmVuY2UgYmV0d2VlbiBlYWNoIHR3byBjb25zZWN1dGl2ZSByZWFkcyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lLCBpLmUuCisgKiBsZXNzIHRoYW4gdHdpY2UgdGhlIG90aGVyLiAgRnVydGhlcm1vcmUsIGFueSBuZWdhdGl2ZSBkaWZmZXJlbmNlIGluZGljYXRlcyBhbgorICogZXJyb3IuICAoQSBQQ0kgcmVhZCBzaG91bGQgdGFrZSBhdCBsZWFzdCAyMCB0aWNrcyBvZiB0aGUgMjQuNTc2IE1IeiB0aW1lciB0bworICogZXhlY3V0ZSwgc28gd2UgaGF2ZSBlbm91Z2ggcHJlY2lzaW9uIHRvIGNvbXB1dGUgdGhlIHJhdGlvIG9mIHRoZSBkaWZmZXJlbmNlcy4pCisgKi8KK3N0YXRpYyB1MzIgZ2V0X2N5Y2xlX3RpbWUoc3RydWN0IGZ3X29oY2kgKm9oY2kpCit7CisJdTMyIGMwLCBjMSwgYzI7CisJdTMyIHQwLCB0MSwgdDI7CisJczMyIGRpZmYwMSwgZGlmZjEyOworCWludCBpOworCisJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOworCisJaWYgKG9oY2ktPnF1aXJrcyAmIFFVSVJLX0NZQ0xFX1RJTUVSKSB7CisJCWkgPSAwOworCQljMSA9IGMyOworCQljMiA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lcik7CisJCWRvIHsKKwkJCWMwID0gYzE7CisJCQljMSA9IGMyOworCQkJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOworCQkJdDAgPSBjeWNsZV90aW1lcl90aWNrcyhjMCk7CisJCQl0MSA9IGN5Y2xlX3RpbWVyX3RpY2tzKGMxKTsKKwkJCXQyID0gY3ljbGVfdGltZXJfdGlja3MoYzIpOworCQkJZGlmZjAxID0gdDEgLSB0MDsKKwkJCWRpZmYxMiA9IHQyIC0gdDE7CisJCX0gd2hpbGUgKChkaWZmMDEgPD0gMCB8fCBkaWZmMTIgPD0gMCB8fAorCQkJICBkaWZmMDEgLyBkaWZmMTIgPj0gMiB8fCBkaWZmMTIgLyBkaWZmMDEgPj0gMikKKwkJCSAmJiBpKysgPCAyMCk7CisJfQorCisJcmV0dXJuIGMyOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBoYXMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IGV2ZXJ5IDY0IHNlY29uZHMuICBUaGUgYnVzX3RpbWUKKyAqIGZpZWxkIHN0b3JlcyBub3Qgb25seSB0aGUgdXBwZXIgMjUgYml0cyBvZiB0aGUgQlVTX1RJTUUgcmVnaXN0ZXIgYnV0IGFsc28KKyAqIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgY3ljbGUgdGltZXIgaW4gYml0IDYgc28gdGhhdCB3ZSBjYW4gZGV0ZWN0CisgKiBjaGFuZ2VzIGluIHRoaXMgYml0LgorICovCitzdGF0aWMgdTMyIHVwZGF0ZV9idXNfdGltZShzdHJ1Y3QgZndfb2hjaSAqb2hjaSkKK3sKKwl1MzIgY3ljbGVfdGltZV9zZWNvbmRzID0gZ2V0X2N5Y2xlX3RpbWUob2hjaSkgPj4gMjU7CisKKwlpZiAoKG9oY2ktPmJ1c190aW1lICYgMHg0MCkgIT0gKGN5Y2xlX3RpbWVfc2Vjb25kcyAmIDB4NDApKQorCQlvaGNpLT5idXNfdGltZSArPSAweDQwOworCisJcmV0dXJuIG9oY2ktPmJ1c190aW1lIHwgY3ljbGVfdGltZV9zZWNvbmRzOworfQorCiBzdGF0aWMgdm9pZCBidXNfcmVzZXRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSAoc3RydWN0IGZ3X29oY2kgKilkYXRhOwpAQCAtMTMxOSw2ICsxNDQyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKmZyZWVfcm9tID0gTlVMTDsKIAlkbWFfYWRkcl90IGZyZWVfcm9tX2J1cyA9IDA7CisJYm9vbCBpc19uZXdfcm9vdDsKIAogCXJlZyA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X05vZGVJRCk7CiAJaWYgKCEocmVnICYgT0hDSTEzOTRfTm9kZUlEX2lkVmFsaWQpKSB7CkBAIC0xMzMyLDYgKzE0NTYsMTIgQEAKIAlvaGNpLT5ub2RlX2lkID0gcmVnICYgKE9IQ0kxMzk0X05vZGVJRF9idXNOdW1iZXIgfAogCQkJICAgICAgIE9IQ0kxMzk0X05vZGVJRF9ub2RlTnVtYmVyKTsKIAorCWlzX25ld19yb290ID0gKHJlZyAmIE9IQ0kxMzk0X05vZGVJRF9yb290KSAhPSAwOworCWlmICghKG9oY2ktPmlzX3Jvb3QgJiYgaXNfbmV3X3Jvb3QpKQorCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfTGlua0NvbnRyb2xTZXQsCisJCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlTWFzdGVyKTsKKwlvaGNpLT5pc19yb290ID0gaXNfbmV3X3Jvb3Q7CisKIAlyZWcgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9TZWxmSURDb3VudCk7CiAJaWYgKHJlZyAmIE9IQ0kxMzk0X1NlbGZJRENvdW50X3NlbGZJREVycm9yKSB7CiAJCWZ3X25vdGlmeSgiaW5jb25zaXN0ZW50IHNlbGYgSURzXG4iKTsKQEAgLTE0MzksNyArMTU2OSw5IEBACiAJCSAgICBzZWxmX2lkX2NvdW50LCBvaGNpLT5zZWxmX2lkX2J1ZmZlcik7CiAKIAlmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIG9oY2ktPm5vZGVfaWQsIGdlbmVyYXRpb24sCi0JCQkJIHNlbGZfaWRfY291bnQsIG9oY2ktPnNlbGZfaWRfYnVmZmVyKTsKKwkJCQkgc2VsZl9pZF9jb3VudCwgb2hjaS0+c2VsZl9pZF9idWZmZXIsCisJCQkJIG9oY2ktPmNzcl9zdGF0ZV9zZXRjbGVhcl9hYmRpY2F0ZSk7CisJb2hjaS0+Y3NyX3N0YXRlX3NldGNsZWFyX2FiZGljYXRlID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQpAQCAtMTUxNSw2ICsxNjQ3LDEyIEBACiAJCQlmd19ub3RpZnkoImlzb2Nocm9ub3VzIGN5Y2xlIGluY29uc2lzdGVudFxuIik7CiAJfQogCisJaWYgKGV2ZW50ICYgT0hDSTEzOTRfY3ljbGU2NFNlY29uZHMpIHsKKwkJc3Bpbl9sb2NrKCZvaGNpLT5sb2NrKTsKKwkJdXBkYXRlX2J1c190aW1lKG9oY2kpOworCQlzcGluX3VubG9jaygmb2hjaS0+bG9jayk7CisJfQorCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNTc3LDcgKzE3MTUsNyBAQAogCQljbGVhciA9IFBIWV9FTkFCTEVfQUNDRUwgfCBQSFlfRU5BQkxFX01VTFRJOwogCQlzZXQgPSAwOwogCX0KLQlyZXQgPSBvaGNpX3VwZGF0ZV9waHlfcmVnKCZvaGNpLT5jYXJkLCA1LCBjbGVhciwgc2V0KTsKKwlyZXQgPSB1cGRhdGVfcGh5X3JlZyhvaGNpLCA1LCBjbGVhciwgc2V0KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTU5OSw3ICsxNzM3LDcgQEAKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoY2FyZC0+ZGV2aWNlKTsKLQl1MzIgbHBzOworCXUzMiBscHMsIHNlY29uZHMsIHZlcnNpb24sIGlycXM7CiAJaW50IGksIHJldDsKIAogCWlmIChzb2Z0d2FyZV9yZXNldChvaGNpKSkgewpAQCAtMTYzNSwxNyArMTc3MywzNCBAQAogCQkgIE9IQ0kxMzk0X0hDQ29udHJvbF9ub0J5dGVTd2FwRGF0YSk7CiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfU2VsZklEQnVmZmVyLCBvaGNpLT5zZWxmX2lkX2J1cyk7Ci0JcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0xpbmtDb250cm9sQ2xlYXIsCi0JCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfcmN2UGh5UGt0KTsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfTGlua0NvbnRyb2xTZXQsCiAJCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfcmN2U2VsZklEIHwKKwkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9yY3ZQaHlQa3QgfAogCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlVGltZXJFbmFibGUgfAogCQkgIE9IQ0kxMzk0X0xpbmtDb250cm9sX2N5Y2xlTWFzdGVyKTsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9BVFJldHJpZXMsCiAJCSAgT0hDSTEzOTRfTUFYX0FUX1JFUV9SRVRSSUVTIHwKIAkJICAoT0hDSTEzOTRfTUFYX0FUX1JFU1BfUkVUUklFUyA8PCA0KSB8Ci0JCSAgKE9IQ0kxMzk0X01BWF9QSFlTX1JFU1BfUkVUUklFUyA8PCA4KSk7CisJCSAgKE9IQ0kxMzk0X01BWF9QSFlTX1JFU1BfUkVUUklFUyA8PCA4KSB8CisJCSAgKDIwMCA8PCAxNikpOworCisJc2Vjb25kcyA9IGxvd2VyXzMyX2JpdHMoZ2V0X3NlY29uZHMoKSk7CisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lciwgc2Vjb25kcyA8PCAyNSk7CisJb2hjaS0+YnVzX3RpbWUgPSBzZWNvbmRzICYgfjB4M2Y7CisKKwl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOworCWlmICh2ZXJzaW9uID49IE9IQ0lfVkVSU0lPTl8xXzEpIHsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0luaXRpYWxDaGFubmVsc0F2YWlsYWJsZUhpLAorCQkJICAweGZmZmZmZmZlKTsKKwkJY2FyZC0+YnJvYWRjYXN0X2NoYW5uZWxfYXV0b19hbGxvY2F0ZWQgPSB0cnVlOworCX0KKworCS8qIEdldCBpbXBsZW1lbnRlZCBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmJpdHJhdGlvbiByZXF1ZXN0IGNvdW50ZXIuICovCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ZhaXJuZXNzQ29udHJvbCwgMHgzZik7CisJb2hjaS0+cHJpX3JlcV9tYXggPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9GYWlybmVzc0NvbnRyb2wpICYgMHgzZjsKKwlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfRmFpcm5lc3NDb250cm9sLCAwKTsKKwljYXJkLT5wcmlvcml0eV9idWRnZXRfaW1wbGVtZW50ZWQgPSBvaGNpLT5wcmlfcmVxX21heCAhPSAwOwogCiAJYXJfY29udGV4dF9ydW4oJm9oY2ktPmFyX3JlcXVlc3RfY3R4KTsKIAlhcl9jb250ZXh0X3J1bigmb2hjaS0+YXJfcmVzcG9uc2VfY3R4KTsKQEAgLTE2NTMsMTYgKzE4MDgsNiBAQAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9QaHlVcHBlckJvdW5kLCAweDAwMDEwMDAwKTsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwgfjApOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JbnRNYXNrQ2xlYXIsIH4wKTsKLQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza1NldCwKLQkJICBPSENJMTM5NF9zZWxmSURDb21wbGV0ZSB8Ci0JCSAgT0hDSTEzOTRfUlFQa3QgfCBPSENJMTM5NF9SU1BrdCB8Ci0JCSAgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZSB8IE9IQ0kxMzk0X3Jlc3BUeENvbXBsZXRlIHwKLQkJICBPSENJMTM5NF9pc29jaFJ4IHwgT0hDSTEzOTRfaXNvY2hUeCB8Ci0JCSAgT0hDSTEzOTRfcG9zdGVkV3JpdGVFcnIgfCBPSENJMTM5NF9jeWNsZVRvb0xvbmcgfAotCQkgIE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50IHwgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8Ci0JCSAgT0hDSTEzOTRfbWFzdGVySW50RW5hYmxlKTsKLQlpZiAocGFyYW1fZGVidWcgJiBPSENJX1BBUkFNX0RFQlVHX0JVU1JFU0VUUykKLQkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludE1hc2tTZXQsIE9IQ0kxMzk0X2J1c1Jlc2V0KTsKIAogCXJldCA9IGNvbmZpZ3VyZV8xMzk0YV9lbmhhbmNlbWVudHMob2hjaSk7CiAJaWYgKHJldCA8IDApCkBAIC0xNzE5LDI2ICsxODY0LDM4IEBACiAKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQXNSZXFGaWx0ZXJIaVNldCwgMHg4MDAwMDAwMCk7CiAKKwlpZiAoIShvaGNpLT5xdWlya3MgJiBRVUlSS19OT19NU0kpKQorCQlwY2lfZW5hYmxlX21zaShkZXYpOwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgaXJxX2hhbmRsZXIsCi0JCQlJUlFGX1NIQVJFRCwgb2hjaV9kcml2ZXJfbmFtZSwgb2hjaSkpIHsKLQkJZndfZXJyb3IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzaGFyZWQgaW50ZXJydXB0ICVkLlxuIiwKLQkJCSBkZXYtPmlycSk7CisJCQlwY2lfZGV2X21zaV9lbmFibGVkKGRldikgPyAwIDogSVJRRl9TSEFSRUQsCisJCQlvaGNpX2RyaXZlcl9uYW1lLCBvaGNpKSkgeworCQlmd19lcnJvcigiRmFpbGVkIHRvIGFsbG9jYXRlIGludGVycnVwdCAlZC5cbiIsIGRldi0+aXJxKTsKKwkJcGNpX2Rpc2FibGVfbXNpKGRldik7CiAJCWRtYV9mcmVlX2NvaGVyZW50KG9oY2ktPmNhcmQuZGV2aWNlLCBDT05GSUdfUk9NX1NJWkUsCiAJCQkJICBvaGNpLT5jb25maWdfcm9tLCBvaGNpLT5jb25maWdfcm9tX2J1cyk7CiAJCXJldHVybiAtRUlPOwogCX0KIAorCWlycXMgPQlPSENJMTM5NF9yZXFUeENvbXBsZXRlIHwgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfAorCQlPSENJMTM5NF9SUVBrdCB8IE9IQ0kxMzk0X1JTUGt0IHwKKwkJT0hDSTEzOTRfaXNvY2hUeCB8IE9IQ0kxMzk0X2lzb2NoUnggfAorCQlPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8CisJCU9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlIHwKKwkJT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8CisJCU9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwKKwkJT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfCBPSENJMTM5NF9jeWNsZVRvb0xvbmcgfAorCQlPSENJMTM5NF9tYXN0ZXJJbnRFbmFibGU7CisJaWYgKHBhcmFtX2RlYnVnICYgT0hDSV9QQVJBTV9ERUJVR19CVVNSRVNFVFMpCisJCWlycXMgfD0gT0hDSTEzOTRfYnVzUmVzZXQ7CisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludE1hc2tTZXQsIGlycXMpOworCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0hDQ29udHJvbFNldCwKIAkJICBPSENJMTM5NF9IQ0NvbnRyb2xfbGlua0VuYWJsZSB8CiAJCSAgT0hDSTEzOTRfSENDb250cm9sX0JJQmltYWdlVmFsaWQpOwogCWZsdXNoX3dyaXRlcyhvaGNpKTsKIAotCS8qCi0JICogV2UgYXJlIHJlYWR5IHRvIGdvLCBpbml0aWF0ZSBidXMgcmVzZXQgdG8gZmluaXNoIHRoZQotCSAqIGluaXRpYWxpemF0aW9uLgotCSAqLwotCi0JZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIDEpOworCS8qIFdlIGFyZSByZWFkeSB0byBnbywgcmVzZXQgYnVzIHRvIGZpbmlzaCBpbml0aWFsaXphdGlvbi4gKi8KKwlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIGZhbHNlLCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgxMyw3ICsxOTcwLDcgQEAKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCiAJaWYgKHJldCA9PSAwKQotCQlmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgMSk7CisJCWZ3X3NjaGVkdWxlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgdHJ1ZSwgdHJ1ZSk7CiAJZWxzZQogCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgQ09ORklHX1JPTV9TSVpFLAogCQkJCSAgbmV4dF9jb25maWdfcm9tLCBuZXh0X2NvbmZpZ19yb21fYnVzKTsKQEAgLTE5MDMsNjEgKzIwNjAsMTE3IEBACiAjZW5kaWYgLyogQ09ORklHX0ZJUkVXSVJFX09IQ0lfUkVNT1RFX0RNQSAqLwogfQogCi1zdGF0aWMgdTMyIGN5Y2xlX3RpbWVyX3RpY2tzKHUzMiBjeWNsZV90aW1lcikKLXsKLQl1MzIgdGlja3M7Ci0KLQl0aWNrcyA9IGN5Y2xlX3RpbWVyICYgMHhmZmY7Ci0JdGlja3MgKz0gMzA3MiAqICgoY3ljbGVfdGltZXIgPj4gMTIpICYgMHgxZmZmKTsKLQl0aWNrcyArPSAoMzA3MiAqIDgwMDApICogKGN5Y2xlX3RpbWVyID4+IDI1KTsKLQotCXJldHVybiB0aWNrczsKLX0KLQotLyoKLSAqIFNvbWUgY29udHJvbGxlcnMgZXhoaWJpdCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGJ1Z3Mgd2hlbiB1cGRhdGluZyB0aGUKLSAqIGlzbyBjeWNsZSB0aW1lciByZWdpc3RlcjoKLSAqICAtIFdoZW4gdGhlIGxvd2VzdCBzaXggYml0cyBhcmUgd3JhcHBpbmcgYXJvdW5kIHRvIHplcm8sIGEgcmVhZCB0aGF0IGhhcHBlbnMKLSAqICAgIGF0IHRoZSBzYW1lIHRpbWUgd2lsbCByZXR1cm4gZ2FyYmFnZSBpbiB0aGUgbG93ZXN0IHRlbiBiaXRzLgotICogIC0gV2hlbiB0aGUgY3ljbGVPZmZzZXQgZmllbGQgd3JhcHMgYXJvdW5kIHRvIHplcm8sIHRoZSBjeWNsZUNvdW50IGZpZWxkIGlzCi0gKiAgICBub3QgaW5jcmVtZW50ZWQgZm9yIGFib3V0IDYwIG5zLgotICogIC0gT2NjYXNpb25hbGx5LCB0aGUgZW50aXJlIHJlZ2lzdGVyIHJlYWRzIHplcm8uCi0gKgotICogVG8gY2F0Y2ggdGhlc2UsIHdlIHJlYWQgdGhlIHJlZ2lzdGVyIHRocmVlIHRpbWVzIGFuZCBlbnN1cmUgdGhhdCB0aGUKLSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBlYWNoIHR3byBjb25zZWN1dGl2ZSByZWFkcyBpcyBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lLCBpLmUuCi0gKiBsZXNzIHRoYW4gdHdpY2UgdGhlIG90aGVyLiAgRnVydGhlcm1vcmUsIGFueSBuZWdhdGl2ZSBkaWZmZXJlbmNlIGluZGljYXRlcyBhbgotICogZXJyb3IuICAoQSBQQ0kgcmVhZCBzaG91bGQgdGFrZSBhdCBsZWFzdCAyMCB0aWNrcyBvZiB0aGUgMjQuNTc2IE1IeiB0aW1lciB0bwotICogZXhlY3V0ZSwgc28gd2UgaGF2ZSBlbm91Z2ggcHJlY2lzaW9uIHRvIGNvbXB1dGUgdGhlIHJhdGlvIG9mIHRoZSBkaWZmZXJlbmNlcy4pCi0gKi8KLXN0YXRpYyB1MzIgb2hjaV9nZXRfY3ljbGVfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3N0YXRpYyB1MzIgb2hjaV9yZWFkX2NzcihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGNzcl9vZmZzZXQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwotCXUzMiBjMCwgYzEsIGMyOwotCXUzMiB0MCwgdDEsIHQyOwotCXMzMiBkaWZmMDEsIGRpZmYxMjsKLQlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWx1ZTsKIAotCWMyID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvY2hyb25vdXNDeWNsZVRpbWVyKTsKKwlzd2l0Y2ggKGNzcl9vZmZzZXQpIHsKKwljYXNlIENTUl9TVEFURV9DTEVBUjoKKwljYXNlIENTUl9TVEFURV9TRVQ6CisJCWlmIChvaGNpLT5pc19yb290ICYmCisJCSAgICAocmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfTGlua0NvbnRyb2xTZXQpICYKKwkJICAgICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZU1hc3RlcikpCisJCQl2YWx1ZSA9IENTUl9TVEFURV9CSVRfQ01TVFI7CisJCWVsc2UKKwkJCXZhbHVlID0gMDsKKwkJaWYgKG9oY2ktPmNzcl9zdGF0ZV9zZXRjbGVhcl9hYmRpY2F0ZSkKKwkJCXZhbHVlIHw9IENTUl9TVEFURV9CSVRfQUJESUNBVEU7CiAKLQlpZiAob2hjaS0+cXVpcmtzICYgUVVJUktfQ1lDTEVfVElNRVIpIHsKLQkJaSA9IDA7Ci0JCWMxID0gYzI7Ci0JCWMyID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvY2hyb25vdXNDeWNsZVRpbWVyKTsKLQkJZG8gewotCQkJYzAgPSBjMTsKLQkJCWMxID0gYzI7Ci0JCQljMiA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lcik7Ci0JCQl0MCA9IGN5Y2xlX3RpbWVyX3RpY2tzKGMwKTsKLQkJCXQxID0gY3ljbGVfdGltZXJfdGlja3MoYzEpOwotCQkJdDIgPSBjeWNsZV90aW1lcl90aWNrcyhjMik7Ci0JCQlkaWZmMDEgPSB0MSAtIHQwOwotCQkJZGlmZjEyID0gdDIgLSB0MTsKLQkJfSB3aGlsZSAoKGRpZmYwMSA8PSAwIHx8IGRpZmYxMiA8PSAwIHx8Ci0JCQkgIGRpZmYwMSAvIGRpZmYxMiA+PSAyIHx8IGRpZmYxMiAvIGRpZmYwMSA+PSAyKQotCQkJICYmIGkrKyA8IDIwKTsKKwkJcmV0dXJuIHZhbHVlOworCisJY2FzZSBDU1JfTk9ERV9JRFM6CisJCXJldHVybiByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Ob2RlSUQpIDw8IDE2OworCisJY2FzZSBDU1JfQ1lDTEVfVElNRToKKwkJcmV0dXJuIGdldF9jeWNsZV90aW1lKG9oY2kpOworCisJY2FzZSBDU1JfQlVTX1RJTUU6CisJCS8qCisJCSAqIFdlIG1pZ2h0IGJlIGNhbGxlZCBqdXN0IGFmdGVyIHRoZSBjeWNsZSB0aW1lciBoYXMgd3JhcHBlZAorCQkgKiBhcm91bmQgYnV0IGp1c3QgYmVmb3JlIHRoZSBjeWNsZTY0U2Vjb25kcyBoYW5kbGVyLCBzbyB3ZQorCQkgKiBiZXR0ZXIgY2hlY2sgaGVyZSwgdG9vLCBpZiB0aGUgYnVzIHRpbWUgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKwkJICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJCXZhbHVlID0gdXBkYXRlX2J1c190aW1lKG9oY2kpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiB2YWx1ZTsKKworCWNhc2UgQ1NSX0JVU1lfVElNRU9VVDoKKwkJdmFsdWUgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9BVFJldHJpZXMpOworCQlyZXR1cm4gKHZhbHVlID4+IDQpICYgMHgwZmZmZjAwZjsKKworCWNhc2UgQ1NSX1BSSU9SSVRZX0JVREdFVDoKKwkJcmV0dXJuIChyZWdfcmVhZChvaGNpLCBPSENJMTM5NF9GYWlybmVzc0NvbnRyb2wpICYgMHgzZikgfAorCQkJKG9oY2ktPnByaV9yZXFfbWF4IDw8IDgpOworCisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIDA7CiAJfQorfQogCi0JcmV0dXJuIGMyOworc3RhdGljIHZvaWQgb2hjaV93cml0ZV9jc3Ioc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBjc3Jfb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNzcl9vZmZzZXQpIHsKKwljYXNlIENTUl9TVEFURV9DTEVBUjoKKwkJaWYgKCh2YWx1ZSAmIENTUl9TVEFURV9CSVRfQ01TVFIpICYmIG9oY2ktPmlzX3Jvb3QpIHsKKwkJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9MaW5rQ29udHJvbENsZWFyLAorCQkJCSAgT0hDSTEzOTRfTGlua0NvbnRyb2xfY3ljbGVNYXN0ZXIpOworCQkJZmx1c2hfd3JpdGVzKG9oY2kpOworCQl9CisJCWlmICh2YWx1ZSAmIENTUl9TVEFURV9CSVRfQUJESUNBVEUpCisJCQlvaGNpLT5jc3Jfc3RhdGVfc2V0Y2xlYXJfYWJkaWNhdGUgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIENTUl9TVEFURV9TRVQ6CisJCWlmICgodmFsdWUgJiBDU1JfU1RBVEVfQklUX0NNU1RSKSAmJiBvaGNpLT5pc19yb290KSB7CisJCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfTGlua0NvbnRyb2xTZXQsCisJCQkJICBPSENJMTM5NF9MaW5rQ29udHJvbF9jeWNsZU1hc3Rlcik7CisJCQlmbHVzaF93cml0ZXMob2hjaSk7CisJCX0KKwkJaWYgKHZhbHVlICYgQ1NSX1NUQVRFX0JJVF9BQkRJQ0FURSkKKwkJCW9oY2ktPmNzcl9zdGF0ZV9zZXRjbGVhcl9hYmRpY2F0ZSA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBDU1JfTk9ERV9JRFM6CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Ob2RlSUQsIHZhbHVlID4+IDE2KTsKKwkJZmx1c2hfd3JpdGVzKG9oY2kpOworCQlicmVhazsKKworCWNhc2UgQ1NSX0NZQ0xFX1RJTUU6CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIsIHZhbHVlKTsKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ludEV2ZW50U2V0LAorCQkJICBPSENJMTM5NF9jeWNsZUluY29uc2lzdGVudCk7CisJCWZsdXNoX3dyaXRlcyhvaGNpKTsKKwkJYnJlYWs7CisKKwljYXNlIENTUl9CVVNfVElNRToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKwkJb2hjaS0+YnVzX3RpbWUgPSAob2hjaS0+YnVzX3RpbWUgJiAweDdmKSB8ICh2YWx1ZSAmIH4weDdmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKworCWNhc2UgQ1NSX0JVU1lfVElNRU9VVDoKKwkJdmFsdWUgPSAodmFsdWUgJiAweGYpIHwgKCh2YWx1ZSAmIDB4ZikgPDwgNCkgfAorCQkJKCh2YWx1ZSAmIDB4ZikgPDwgOCkgfCAoKHZhbHVlICYgMHgwZmZmZjAwMCkgPDwgNCk7CisJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9BVFJldHJpZXMsIHZhbHVlKTsKKwkJZmx1c2hfd3JpdGVzKG9oY2kpOworCQlicmVhazsKKworCWNhc2UgQ1NSX1BSSU9SSVRZX0JVREdFVDoKKwkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0ZhaXJuZXNzQ29udHJvbCwgdmFsdWUgJiAweDNmKTsKKwkJZmx1c2hfd3JpdGVzKG9oY2kpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgY29weV9pc29faGVhZGVycyhzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwgdm9pZCAqcCkKQEAgLTE5OTIsMTAgKzIyMDUsOSBAQAogCV9fbGUzMiAqaXJfaGVhZGVyOwogCXZvaWQgKnA7CiAKLQlmb3IgKHBkID0gZDsgcGQgPD0gbGFzdDsgcGQrKykgeworCWZvciAocGQgPSBkOyBwZCA8PSBsYXN0OyBwZCsrKQogCQlpZiAocGQtPnRyYW5zZmVyX3N0YXR1cykKIAkJCWJyZWFrOwotCX0KIAlpZiAocGQgPiBsYXN0KQogCQkvKiBEZXNjcmlwdG9yKHMpIG5vdCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24gKi8KIAkJcmV0dXJuIDA7CkBAIC0yMDA1LDE2ICsyMjE3LDM4IEBACiAKIAlpZiAobGUxNl90b19jcHUobGFzdC0+Y29udHJvbCkgJiBERVNDUklQVE9SX0lSUV9BTFdBWVMpIHsKIAkJaXJfaGVhZGVyID0gKF9fbGUzMiAqKSBwOwotCQljdHgtPmJhc2UuY2FsbGJhY2soJmN0eC0+YmFzZSwKLQkJCQkgICBsZTMyX3RvX2NwdShpcl9oZWFkZXJbMF0pICYgMHhmZmZmLAotCQkJCSAgIGN0eC0+aGVhZGVyX2xlbmd0aCwgY3R4LT5oZWFkZXIsCi0JCQkJICAgY3R4LT5iYXNlLmNhbGxiYWNrX2RhdGEpOworCQljdHgtPmJhc2UuY2FsbGJhY2suc2MoJmN0eC0+YmFzZSwKKwkJCQkgICAgICBsZTMyX3RvX2NwdShpcl9oZWFkZXJbMF0pICYgMHhmZmZmLAorCQkJCSAgICAgIGN0eC0+aGVhZGVyX2xlbmd0aCwgY3R4LT5oZWFkZXIsCisJCQkJICAgICAgY3R4LT5iYXNlLmNhbGxiYWNrX2RhdGEpOwogCQljdHgtPmhlYWRlcl9sZW5ndGggPSAwOwogCX0KIAogCXJldHVybiAxOwogfQogCisvKiBkID09IGxhc3QgYmVjYXVzZSBlYWNoIGRlc2NyaXB0b3IgYmxvY2sgaXMgb25seSBhIHNpbmdsZSBkZXNjcmlwdG9yLiAqLworc3RhdGljIGludCBoYW5kbGVfaXJfYnVmZmVyX2ZpbGwoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCisJCQkJIHN0cnVjdCBkZXNjcmlwdG9yICpkLAorCQkJCSBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKK3sKKwlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9CisJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGNvbnRleHQpOworCisJaWYgKCFsYXN0LT50cmFuc2Zlcl9zdGF0dXMpCisJCS8qIERlc2NyaXB0b3Iocykgbm90IGRvbmUgeWV0LCBzdG9wIGl0ZXJhdGlvbiAqLworCQlyZXR1cm4gMDsKKworCWlmIChsZTE2X3RvX2NwdShsYXN0LT5jb250cm9sKSAmIERFU0NSSVBUT1JfSVJRX0FMV0FZUykKKwkJY3R4LT5iYXNlLmNhbGxiYWNrLm1jKCZjdHgtPmJhc2UsCisJCQkJICAgICAgbGUzMl90b19jcHUobGFzdC0+ZGF0YV9hZGRyZXNzKSArCisJCQkJICAgICAgbGUxNl90b19jcHUobGFzdC0+cmVxX2NvdW50KSAtCisJCQkJICAgICAgbGUxNl90b19jcHUobGFzdC0+cmVzX2NvdW50KSwKKwkJCQkgICAgICBjdHgtPmJhc2UuY2FsbGJhY2tfZGF0YSk7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBoYW5kbGVfaXRfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJICAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLAogCQkJICAgIHN0cnVjdCBkZXNjcmlwdG9yICpsYXN0KQpAQCAtMjA0MCw3MSArMjI3NCwxMTggQEAKIAkJY3R4LT5oZWFkZXJfbGVuZ3RoICs9IDQ7CiAJfQogCWlmIChsZTE2X3RvX2NwdShsYXN0LT5jb250cm9sKSAmIERFU0NSSVBUT1JfSVJRX0FMV0FZUykgewotCQljdHgtPmJhc2UuY2FsbGJhY2soJmN0eC0+YmFzZSwgbGUxNl90b19jcHUobGFzdC0+cmVzX2NvdW50KSwKLQkJCQkgICBjdHgtPmhlYWRlcl9sZW5ndGgsIGN0eC0+aGVhZGVyLAotCQkJCSAgIGN0eC0+YmFzZS5jYWxsYmFja19kYXRhKTsKKwkJY3R4LT5iYXNlLmNhbGxiYWNrLnNjKCZjdHgtPmJhc2UsIGxlMTZfdG9fY3B1KGxhc3QtPnJlc19jb3VudCksCisJCQkJICAgICAgY3R4LT5oZWFkZXJfbGVuZ3RoLCBjdHgtPmhlYWRlciwKKwkJCQkgICAgICBjdHgtPmJhc2UuY2FsbGJhY2tfZGF0YSk7CiAJCWN0eC0+aGVhZGVyX2xlbmd0aCA9IDA7CiAJfQogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBzZXRfbXVsdGljaGFubmVsX21hc2soc3RydWN0IGZ3X29oY2kgKm9oY2ksIHU2NCBjaGFubmVscykKK3sKKwl1MzIgaGkgPSBjaGFubmVscyA+PiAzMiwgbG8gPSBjaGFubmVsczsKKworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tIaUNsZWFyLCB+aGkpOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tMb0NsZWFyLCB+bG8pOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tIaVNldCwgaGkpOworCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9JUk11bHRpQ2hhbk1hc2tMb1NldCwgbG8pOworCW1taW93YigpOworCW9oY2ktPm1jX2NoYW5uZWxzID0gY2hhbm5lbHM7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKm9oY2lfYWxsb2NhdGVfaXNvX2NvbnRleHQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkJaW50IHR5cGUsIGludCBjaGFubmVsLCBzaXplX3QgaGVhZGVyX3NpemUpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwotCXN0cnVjdCBpc29fY29udGV4dCAqY3R4LCAqbGlzdDsKLQlkZXNjcmlwdG9yX2NhbGxiYWNrX3QgY2FsbGJhY2s7Ci0JdTY0ICpjaGFubmVscywgZG9udF9jYXJlID0gfjBVTEw7Ci0JdTMyICptYXNrLCByZWdzOworCXN0cnVjdCBpc29fY29udGV4dCAqdW5pbml0aWFsaXplZF92YXIoY3R4KTsKKwlkZXNjcmlwdG9yX2NhbGxiYWNrX3QgdW5pbml0aWFsaXplZF92YXIoY2FsbGJhY2spOworCXU2NCAqdW5pbml0aWFsaXplZF92YXIoY2hhbm5lbHMpOworCXUzMiAqdW5pbml0aWFsaXplZF92YXIobWFzayksIHVuaW5pdGlhbGl6ZWRfdmFyKHJlZ3MpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGluZGV4LCByZXQgPSAtRU5PTUVNOwotCi0JaWYgKHR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKLQkJY2hhbm5lbHMgPSAmZG9udF9jYXJlOwotCQltYXNrID0gJm9oY2ktPml0X2NvbnRleHRfbWFzazsKLQkJbGlzdCA9IG9oY2ktPml0X2NvbnRleHRfbGlzdDsKLQkJY2FsbGJhY2sgPSBoYW5kbGVfaXRfcGFja2V0OwotCX0gZWxzZSB7Ci0JCWNoYW5uZWxzID0gJm9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHM7Ci0JCW1hc2sgPSAmb2hjaS0+aXJfY29udGV4dF9tYXNrOwotCQlsaXN0ID0gb2hjaS0+aXJfY29udGV4dF9saXN0OwotCQljYWxsYmFjayA9IGhhbmRsZV9pcl9wYWNrZXRfcGVyX2J1ZmZlcjsKLQl9CisJaW50IGluZGV4LCByZXQgPSAtRUJVU1k7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwotCWluZGV4ID0gKmNoYW5uZWxzICYgMVVMTCA8PCBjaGFubmVsID8gZmZzKCptYXNrKSAtIDEgOiAtMTsKLQlpZiAoaW5kZXggPj0gMCkgewotCQkqY2hhbm5lbHMgJj0gfigxVUxMIDw8IGNoYW5uZWwpOwotCQkqbWFzayAmPSB+KDEgPDwgaW5kZXgpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBGV19JU09fQ09OVEVYVF9UUkFOU01JVDoKKwkJbWFzayAgICAgPSAmb2hjaS0+aXRfY29udGV4dF9tYXNrOworCQljYWxsYmFjayA9IGhhbmRsZV9pdF9wYWNrZXQ7CisJCWluZGV4ICAgID0gZmZzKCptYXNrKSAtIDE7CisJCWlmIChpbmRleCA+PSAwKSB7CisJCQkqbWFzayAmPSB+KDEgPDwgaW5kZXgpOworCQkJcmVncyA9IE9IQ0kxMzk0X0lzb1htaXRDb250ZXh0QmFzZShpbmRleCk7CisJCQljdHggID0gJm9oY2ktPml0X2NvbnRleHRfbGlzdFtpbmRleF07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkU6CisJCWNoYW5uZWxzID0gJm9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHM7CisJCW1hc2sgICAgID0gJm9oY2ktPmlyX2NvbnRleHRfbWFzazsKKwkJY2FsbGJhY2sgPSBoYW5kbGVfaXJfcGFja2V0X3Blcl9idWZmZXI7CisJCWluZGV4ICAgID0gKmNoYW5uZWxzICYgMVVMTCA8PCBjaGFubmVsID8gZmZzKCptYXNrKSAtIDEgOiAtMTsKKwkJaWYgKGluZGV4ID49IDApIHsKKwkJCSpjaGFubmVscyAmPSB+KDFVTEwgPDwgY2hhbm5lbCk7CisJCQkqbWFzayAgICAgJj0gfigxIDw8IGluZGV4KTsKKwkJCXJlZ3MgPSBPSENJMTM5NF9Jc29SY3ZDb250ZXh0QmFzZShpbmRleCk7CisJCQljdHggID0gJm9oY2ktPmlyX2NvbnRleHRfbGlzdFtpbmRleF07CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMOgorCQltYXNrICAgICA9ICZvaGNpLT5pcl9jb250ZXh0X21hc2s7CisJCWNhbGxiYWNrID0gaGFuZGxlX2lyX2J1ZmZlcl9maWxsOworCQlpbmRleCAgICA9ICFvaGNpLT5tY19hbGxvY2F0ZWQgPyBmZnMoKm1hc2spIC0gMSA6IC0xOworCQlpZiAoaW5kZXggPj0gMCkgeworCQkJb2hjaS0+bWNfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJCSptYXNrICY9IH4oMSA8PCBpbmRleCk7CisJCQlyZWdzID0gT0hDSTEzOTRfSXNvUmN2Q29udGV4dEJhc2UoaW5kZXgpOworCQkJY3R4ICA9ICZvaGNpLT5pcl9jb250ZXh0X2xpc3RbaW5kZXhdOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaW5kZXggPSAtMTsKKwkJcmV0ID0gLUVOT1NZUzsKIAl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoaW5kZXggPCAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCi0JaWYgKHR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpCi0JCXJlZ3MgPSBPSENJMTM5NF9Jc29YbWl0Q29udGV4dEJhc2UoaW5kZXgpOwotCWVsc2UKLQkJcmVncyA9IE9IQ0kxMzk0X0lzb1JjdkNvbnRleHRCYXNlKGluZGV4KTsKLQotCWN0eCA9ICZsaXN0W2luZGV4XTsKIAltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwogCWN0eC0+aGVhZGVyX2xlbmd0aCA9IDA7CiAJY3R4LT5oZWFkZXIgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKGN0eC0+aGVhZGVyID09IE5VTEwpCisJaWYgKGN0eC0+aGVhZGVyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0KKwl9CiAJcmV0ID0gY29udGV4dF9pbml0KCZjdHgtPmNvbnRleHQsIG9oY2ksIHJlZ3MsIGNhbGxiYWNrKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfd2l0aF9oZWFkZXI7CiAKKwlpZiAodHlwZSA9PSBGV19JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTCkKKwkJc2V0X211bHRpY2hhbm5lbF9tYXNrKG9oY2ksIDApOworCiAJcmV0dXJuICZjdHgtPmJhc2U7CiAKICBvdXRfd2l0aF9oZWFkZXI6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWN0eC0+aGVhZGVyKTsKICBvdXQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRToKKwkJKmNoYW5uZWxzIHw9IDFVTEwgPDwgY2hhbm5lbDsKKwkJYnJlYWs7CisKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMOgorCQlvaGNpLT5tY19hbGxvY2F0ZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQogCSptYXNrIHw9IDEgPDwgaW5kZXg7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwpAQCAtMjExNSwxMCArMjM5NiwxMSBAQAogewogCXN0cnVjdCBpc29fY29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpc29fY29udGV4dCwgYmFzZSk7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBjdHgtPmNvbnRleHQub2hjaTsKLQl1MzIgY29udHJvbCwgbWF0Y2g7CisJdTMyIGNvbnRyb2wgPSBJUl9DT05URVhUX0lTT0NIX0hFQURFUiwgbWF0Y2g7CiAJaW50IGluZGV4OwogCi0JaWYgKGN0eC0+YmFzZS50eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKSB7CisJc3dpdGNoIChjdHgtPmJhc2UudHlwZSkgeworCWNhc2UgRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQ6CiAJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXRfY29udGV4dF9saXN0OwogCQltYXRjaCA9IDA7CiAJCWlmIChjeWNsZSA+PSAwKQpAQCAtMjEyOCw5ICsyNDEwLDEzIEBACiAJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50RXZlbnRDbGVhciwgMSA8PCBpbmRleCk7CiAJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCwgMSA8PCBpbmRleCk7CiAJCWNvbnRleHRfcnVuKCZjdHgtPmNvbnRleHQsIG1hdGNoKTsKLQl9IGVsc2UgeworCQlicmVhazsKKworCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUw6CisJCWNvbnRyb2wgfD0gSVJfQ09OVEVYVF9CVUZGRVJfRklMTHxJUl9DT05URVhUX01VTFRJX0NIQU5ORUxfTU9ERTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFOgogCQlpbmRleCA9IGN0eCAtIG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKLQkJY29udHJvbCA9IElSX0NPTlRFWFRfSVNPQ0hfSEVBREVSOwogCQltYXRjaCA9ICh0YWdzIDw8IDI4KSB8IChzeW5jIDw8IDgpIHwgY3R4LT5iYXNlLmNoYW5uZWw7CiAJCWlmIChjeWNsZSA+PSAwKSB7CiAJCQltYXRjaCB8PSAoY3ljbGUgJiAweDA3ZmZmKSA8PCAxMjsKQEAgLTIxNDEsNiArMjQyNyw3IEBACiAJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCwgMSA8PCBpbmRleCk7CiAJCXJlZ193cml0ZShvaGNpLCBDT05URVhUX01BVENIKGN0eC0+Y29udGV4dC5yZWdzKSwgbWF0Y2gpOwogCQljb250ZXh0X3J1bigmY3R4LT5jb250ZXh0LCBjb250cm9sKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTUyLDEyICsyNDM5LDE3IEBACiAJc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKIAlpbnQgaW5kZXg7CiAKLQlpZiAoY3R4LT5iYXNlLnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKKwlzd2l0Y2ggKGN0eC0+YmFzZS50eXBlKSB7CisJY2FzZSBGV19JU09fQ09OVEVYVF9UUkFOU01JVDoKIAkJaW5kZXggPSBjdHggLSBvaGNpLT5pdF9jb250ZXh0X2xpc3Q7CiAJCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza0NsZWFyLCAxIDw8IGluZGV4KTsKLQl9IGVsc2UgeworCQlicmVhazsKKworCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRToKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMOgogCQlpbmRleCA9IGN0eCAtIG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKIAkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrQ2xlYXIsIDEgPDwgaW5kZXgpOworCQlicmVhazsKIAl9CiAJZmx1c2hfd3JpdGVzKG9oY2kpOwogCWNvbnRleHRfc3RvcCgmY3R4LT5jb250ZXh0KTsKQEAgLTIxNzgsMjQgKzI0NzAsNjUgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoY3R4LT5iYXNlLnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpIHsKKwlzd2l0Y2ggKGJhc2UtPnR5cGUpIHsKKwljYXNlIEZXX0lTT19DT05URVhUX1RSQU5TTUlUOgogCQlpbmRleCA9IGN0eCAtIG9oY2ktPml0X2NvbnRleHRfbGlzdDsKIAkJb2hjaS0+aXRfY29udGV4dF9tYXNrIHw9IDEgPDwgaW5kZXg7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisKKwljYXNlIEZXX0lTT19DT05URVhUX1JFQ0VJVkU6CiAJCWluZGV4ID0gY3R4IC0gb2hjaS0+aXJfY29udGV4dF9saXN0OwogCQlvaGNpLT5pcl9jb250ZXh0X21hc2sgfD0gMSA8PCBpbmRleDsKIAkJb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyB8PSAxVUxMIDw8IGJhc2UtPmNoYW5uZWw7CisJCWJyZWFrOworCisJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTDoKKwkJaW5kZXggPSBjdHggLSBvaGNpLT5pcl9jb250ZXh0X2xpc3Q7CisJCW9oY2ktPmlyX2NvbnRleHRfbWFzayB8PSAxIDw8IGluZGV4OworCQlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzIHw9IG9oY2ktPm1jX2NoYW5uZWxzOworCQlvaGNpLT5tY19jaGFubmVscyA9IDA7CisJCW9oY2ktPm1jX2FsbG9jYXRlZCA9IGZhbHNlOworCQlicmVhazsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCSAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQkJICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitzdGF0aWMgaW50IG9oY2lfc2V0X2lzb19jaGFubmVscyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsIHU2NCAqY2hhbm5lbHMpCiB7Ci0Jc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKKwlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koYmFzZS0+Y2FyZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3dpdGNoIChiYXNlLT50eXBlKSB7CisJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTDoKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJCS8qIERvbid0IGFsbG93IG11bHRpY2hhbm5lbCB0byBncmFiIG90aGVyIGNvbnRleHRzJyBjaGFubmVscy4gKi8KKwkJaWYgKH5vaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzICYgfm9oY2ktPm1jX2NoYW5uZWxzICYgKmNoYW5uZWxzKSB7CisJCQkqY2hhbm5lbHMgPSBvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzOworCQkJcmV0ID0gLUVCVVNZOworCQl9IGVsc2UgeworCQkJc2V0X211bHRpY2hhbm5lbF9tYXNrKG9oY2ksICpjaGFubmVscyk7CisJCQlyZXQgPSAwOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBxdWV1ZV9pc29fdHJhbnNtaXQoc3RydWN0IGlzb19jb250ZXh0ICpjdHgsCisJCQkgICAgICBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJICAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKK3sKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgKmxhc3QsICpwZDsKIAlzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcDsKIAlfX2xlMzIgKmhlYWRlcjsKQEAgLTIyOTEsMTQgKzI2MjQsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX3BhY2tldF9wZXJfYnVmZmVyKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkJCQkJc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkJCQkJc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBxdWV1ZV9pc29fcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGlzb19jb250ZXh0ICpjdHgsCisJCQkJICAgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJICAgICAgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKLQlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXN0cnVjdCBkZXNjcmlwdG9yICpkLCAqcGQ7Ci0Jc3RydWN0IGZ3X2lzb19wYWNrZXQgKnAgPSBwYWNrZXQ7CiAJZG1hX2FkZHJfdCBkX2J1cywgcGFnZV9idXM7CiAJdTMyIHosIGhlYWRlcl96LCByZXN0OwogCWludCBpLCBqLCBsZW5ndGg7CkBAIC0yMzA4LDE0ICsyNjM5LDE0IEBACiAJICogVGhlIE9IQ0kgY29udHJvbGxlciBwdXRzIHRoZSBpc29jaHJvbm91cyBoZWFkZXIgYW5kIHRyYWlsZXIgaW4gdGhlCiAJICogYnVmZmVyLCBzbyB3ZSBuZWVkIGF0IGxlYXN0IDggYnl0ZXMuCiAJICovCi0JcGFja2V0X2NvdW50ID0gcC0+aGVhZGVyX2xlbmd0aCAvIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKKwlwYWNrZXRfY291bnQgPSBwYWNrZXQtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CiAJaGVhZGVyX3NpemUgID0gbWF4KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSwgKHNpemVfdCk4KTsKIAogCS8qIEdldCBoZWFkZXIgc2l6ZSBpbiBudW1iZXIgb2YgZGVzY3JpcHRvcnMuICovCiAJaGVhZGVyX3ogPSBESVZfUk9VTkRfVVAoaGVhZGVyX3NpemUsIHNpemVvZigqZCkpOwogCXBhZ2UgICAgID0gcGF5bG9hZCA+PiBQQUdFX1NISUZUOwogCW9mZnNldCAgID0gcGF5bG9hZCAmIH5QQUdFX01BU0s7Ci0JcGF5bG9hZF9wZXJfYnVmZmVyID0gcC0+cGF5bG9hZF9sZW5ndGggLyBwYWNrZXRfY291bnQ7CisJcGF5bG9hZF9wZXJfYnVmZmVyID0gcGFja2V0LT5wYXlsb2FkX2xlbmd0aCAvIHBhY2tldF9jb3VudDsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrZXRfY291bnQ7IGkrKykgewogCQkvKiBkIHBvaW50cyB0byB0aGUgaGVhZGVyIGRlc2NyaXB0b3IgKi8KQEAgLTIzMjcsNyArMjY1OCw3IEBACiAKIAkJZC0+Y29udHJvbCAgICAgID0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9TVEFUVVMgfAogCQkJCQkgICAgICBERVNDUklQVE9SX0lOUFVUX01PUkUpOwotCQlpZiAocC0+c2tpcCAmJiBpID09IDApCisJCWlmIChwYWNrZXQtPnNraXAgJiYgaSA9PSAwKQogCQkJZC0+Y29udHJvbCB8PSBjcHVfdG9fbGUxNihERVNDUklQVE9SX1dBSVQpOwogCQlkLT5yZXFfY291bnQgICAgPSBjcHVfdG9fbGUxNihoZWFkZXJfc2l6ZSk7CiAJCWQtPnJlc19jb3VudCAgICA9IGQtPnJlcV9jb3VudDsKQEAgLTIzNjAsNyArMjY5MSw3IEBACiAJCXBkLT5jb250cm9sID0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9TVEFUVVMgfAogCQkJCQkgIERFU0NSSVBUT1JfSU5QVVRfTEFTVCB8CiAJCQkJCSAgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKLQkJaWYgKHAtPmludGVycnVwdCAmJiBpID09IHBhY2tldF9jb3VudCAtIDEpCisJCWlmIChwYWNrZXQtPmludGVycnVwdCAmJiBpID09IHBhY2tldF9jb3VudCAtIDEpCiAJCQlwZC0+Y29udHJvbCB8PSBjcHVfdG9fbGUxNihERVNDUklQVE9SX0lSUV9BTFdBWVMpOwogCiAJCWNvbnRleHRfYXBwZW5kKCZjdHgtPmNvbnRleHQsIGQsIHosIGhlYWRlcl96KTsKQEAgLTIzNjksNiArMjcwMCw1OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHF1ZXVlX2lzb19idWZmZXJfZmlsbChzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwKKwkJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQoreworCXN0cnVjdCBkZXNjcmlwdG9yICpkOworCWRtYV9hZGRyX3QgZF9idXMsIHBhZ2VfYnVzOworCWludCBwYWdlLCBvZmZzZXQsIHJlc3QsIHosIGksIGxlbmd0aDsKKworCXBhZ2UgICA9IHBheWxvYWQgPj4gUEFHRV9TSElGVDsKKwlvZmZzZXQgPSBwYXlsb2FkICYgflBBR0VfTUFTSzsKKwlyZXN0ICAgPSBwYWNrZXQtPnBheWxvYWRfbGVuZ3RoOworCisJLyogV2UgbmVlZCBvbmUgZGVzY3JpcHRvciBmb3IgZWFjaCBwYWdlIGluIHRoZSBidWZmZXIuICovCisJeiA9IERJVl9ST1VORF9VUChvZmZzZXQgKyByZXN0LCBQQUdFX1NJWkUpOworCisJaWYgKFdBUk5fT04ob2Zmc2V0ICYgMyB8fCByZXN0ICYgMyB8fCBwYWdlICsgeiA+IGJ1ZmZlci0+cGFnZV9jb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IHo7IGkrKykgeworCQlkID0gY29udGV4dF9nZXRfZGVzY3JpcHRvcnMoJmN0eC0+Y29udGV4dCwgMSwgJmRfYnVzKTsKKwkJaWYgKGQgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWQtPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihERVNDUklQVE9SX0lOUFVUX01PUkUgfAorCQkJCQkgREVTQ1JJUFRPUl9CUkFOQ0hfQUxXQVlTKTsKKwkJaWYgKHBhY2tldC0+c2tpcCAmJiBpID09IDApCisJCQlkLT5jb250cm9sIHw9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfV0FJVCk7CisJCWlmIChwYWNrZXQtPmludGVycnVwdCAmJiBpID09IHogLSAxKQorCQkJZC0+Y29udHJvbCB8PSBjcHVfdG9fbGUxNihERVNDUklQVE9SX0lSUV9BTFdBWVMpOworCisJCWlmIChvZmZzZXQgKyByZXN0IDwgUEFHRV9TSVpFKQorCQkJbGVuZ3RoID0gcmVzdDsKKwkJZWxzZQorCQkJbGVuZ3RoID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQlkLT5yZXFfY291bnQgPSBjcHVfdG9fbGUxNihsZW5ndGgpOworCQlkLT5yZXNfY291bnQgPSBkLT5yZXFfY291bnQ7CisJCWQtPnRyYW5zZmVyX3N0YXR1cyA9IDA7CisKKwkJcGFnZV9idXMgPSBwYWdlX3ByaXZhdGUoYnVmZmVyLT5wYWdlc1twYWdlXSk7CisJCWQtPmRhdGFfYWRkcmVzcyA9IGNwdV90b19sZTMyKHBhZ2VfYnVzICsgb2Zmc2V0KTsKKworCQlyZXN0IC09IGxlbmd0aDsKKwkJb2Zmc2V0ID0gMDsKKwkJcGFnZSsrOworCisJCWNvbnRleHRfYXBwZW5kKCZjdHgtPmNvbnRleHQsIGQsIDEsIDApOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9oY2lfcXVldWVfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKIAkJCSAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKIAkJCSAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKQEAgLTIzNzYsMTQgKzI3NTksMjAgQEAKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT1NZUzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPmNvbnRleHQub2hjaS0+bG9jaywgZmxhZ3MpOwotCWlmIChiYXNlLT50eXBlID09IEZXX0lTT19DT05URVhUX1RSQU5TTUlUKQotCQlyZXQgPSBvaGNpX3F1ZXVlX2lzb190cmFuc21pdChiYXNlLCBwYWNrZXQsIGJ1ZmZlciwgcGF5bG9hZCk7Ci0JZWxzZQotCQlyZXQgPSBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX3BhY2tldF9wZXJfYnVmZmVyKGJhc2UsIHBhY2tldCwKLQkJCQkJCQlidWZmZXIsIHBheWxvYWQpOworCXN3aXRjaCAoYmFzZS0+dHlwZSkgeworCWNhc2UgRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQ6CisJCXJldCA9IHF1ZXVlX2lzb190cmFuc21pdChjdHgsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKKwkJYnJlYWs7CisJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFOgorCQlyZXQgPSBxdWV1ZV9pc29fcGFja2V0X3Blcl9idWZmZXIoY3R4LCBwYWNrZXQsIGJ1ZmZlciwgcGF5bG9hZCk7CisJCWJyZWFrOworCWNhc2UgRldfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUw6CisJCXJldCA9IHF1ZXVlX2lzb19idWZmZXJfZmlsbChjdHgsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKKwkJYnJlYWs7CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+Y29udGV4dC5vaGNpLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjM5MSwxNiArMjc4MCwxOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIG9oY2lfZHJpdmVyID0gewogCS5lbmFibGUJCQk9IG9oY2lfZW5hYmxlLAorCS5yZWFkX3BoeV9yZWcJCT0gb2hjaV9yZWFkX3BoeV9yZWcsCiAJLnVwZGF0ZV9waHlfcmVnCQk9IG9oY2lfdXBkYXRlX3BoeV9yZWcsCiAJLnNldF9jb25maWdfcm9tCQk9IG9oY2lfc2V0X2NvbmZpZ19yb20sCiAJLnNlbmRfcmVxdWVzdAkJPSBvaGNpX3NlbmRfcmVxdWVzdCwKIAkuc2VuZF9yZXNwb25zZQkJPSBvaGNpX3NlbmRfcmVzcG9uc2UsCiAJLmNhbmNlbF9wYWNrZXQJCT0gb2hjaV9jYW5jZWxfcGFja2V0LAogCS5lbmFibGVfcGh5c19kbWEJPSBvaGNpX2VuYWJsZV9waHlzX2RtYSwKLQkuZ2V0X2N5Y2xlX3RpbWUJCT0gb2hjaV9nZXRfY3ljbGVfdGltZSwKKwkucmVhZF9jc3IJCT0gb2hjaV9yZWFkX2NzciwKKwkud3JpdGVfY3NyCQk9IG9oY2lfd3JpdGVfY3NyLAogCiAJLmFsbG9jYXRlX2lzb19jb250ZXh0CT0gb2hjaV9hbGxvY2F0ZV9pc29fY29udGV4dCwKIAkuZnJlZV9pc29fY29udGV4dAk9IG9oY2lfZnJlZV9pc29fY29udGV4dCwKKwkuc2V0X2lzb19jaGFubmVscwk9IG9oY2lfc2V0X2lzb19jaGFubmVscywKIAkucXVldWVfaXNvCQk9IG9oY2lfcXVldWVfaXNvLAogCS5zdGFydF9pc28JCT0gb2hjaV9zdGFydF9pc28sCiAJLnN0b3BfaXNvCQk9IG9oY2lfc3RvcF9pc28sCkBAIC0yNDY1LDYgKzI4NTcsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIG9oY2kpOwogCiAJc3Bpbl9sb2NrX2luaXQoJm9oY2ktPmxvY2spOworCW11dGV4X2luaXQoJm9oY2ktPnBoeV9yZWdfbXV0ZXgpOwogCiAJdGFza2xldF9pbml0KCZvaGNpLT5idXNfcmVzZXRfdGFza2xldCwKIAkJICAgICBidXNfcmVzZXRfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpb2hjaSk7CkBAIC0yNjI1LDYgKzMwMTgsNyBAQAogCWNvbnRleHRfcmVsZWFzZSgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKIAlrZnJlZShvaGNpLT5pdF9jb250ZXh0X2xpc3QpOwogCWtmcmVlKG9oY2ktPmlyX2NvbnRleHRfbGlzdCk7CisJcGNpX2Rpc2FibGVfbXNpKGRldik7CiAJcGNpX2lvdW5tYXAoZGV2LCBvaGNpLT5yZWdpc3RlcnMpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihkZXYsIDApOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwpAQCAtMjY0Miw2ICszMDM2LDcgQEAKIAogCXNvZnR3YXJlX3Jlc2V0KG9oY2kpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBvaGNpKTsKKwlwY2lfZGlzYWJsZV9tc2koZGV2KTsKIAllcnIgPSBwY2lfc2F2ZV9zdGF0ZShkZXYpOwogCWlmIChlcnIpIHsKIAkJZndfZXJyb3IoInBjaV9zYXZlX3N0YXRlIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuaCBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5oCmluZGV4IDNiYzlhNWQuLjBlNmM1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5oCkBAIC02MCw2ICs2MCw3IEBACiAjZGVmaW5lICAgT0hDSTEzOTRfTGlua0NvbnRyb2xfY3ljbGVTb3VyY2UJKDEgPDwgMjIpCiAjZGVmaW5lIE9IQ0kxMzk0X05vZGVJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwRTgKICNkZWZpbmUgICBPSENJMTM5NF9Ob2RlSURfaWRWYWxpZCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lICAgT0hDSTEzOTRfTm9kZUlEX3Jvb3QgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAogI2RlZmluZSAgIE9IQ0kxMzk0X05vZGVJRF9ub2RlTnVtYmVyICAgICAgICAgIDB4MDAwMDAwM2YKICNkZWZpbmUgICBPSENJMTM5NF9Ob2RlSURfYnVzTnVtYmVyICAgICAgICAgICAweDAwMDBmZmMwCiAjZGVmaW5lIE9IQ0kxMzk0X1BoeUNvbnRyb2wgICAgICAgICAgICAgICAgICAgMHgwRUMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggY2EyNjRmMi4uOWY3NjE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTQxMCw4ICs0MTAsNyBAQAogCiBzdGF0aWMgdm9pZCBzYnAyX3N0YXR1c193cml0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCiAJCQkgICAgICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJCSAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQkJICAgICAgaW50IGdlbmVyYXRpb24sIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCiAJCQkgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewogCXN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUgPSBjYWxsYmFja19kYXRhOwpAQCAtNTA4LDggKzUwNyw3IEBACiAKIAlmd19zZW5kX3JlcXVlc3QoZGV2aWNlLT5jYXJkLCAmb3JiLT50LCBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNULAogCQkJbm9kZV9pZCwgZ2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsIG9mZnNldCwKLQkJCSZvcmItPnBvaW50ZXIsIHNpemVvZihvcmItPnBvaW50ZXIpLAotCQkJY29tcGxldGVfdHJhbnNhY3Rpb24sIG9yYik7CisJCQkmb3JiLT5wb2ludGVyLCA4LCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgb3JiKTsKIH0KIAogc3RhdGljIGludCBzYnAyX2NhbmNlbF9vcmJzKHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUpCkBAIC02NTQsNyArNjUyLDcgQEAKIAlmd19ydW5fdHJhbnNhY3Rpb24oZGV2aWNlLT5jYXJkLCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCiAJCQkgICBsdS0+dGd0LT5ub2RlX2lkLCBsdS0+Z2VuZXJhdGlvbiwgZGV2aWNlLT5tYXhfc3BlZWQsCiAJCQkgICBsdS0+Y29tbWFuZF9ibG9ja19hZ2VudF9hZGRyZXNzICsgU0JQMl9BR0VOVF9SRVNFVCwKLQkJCSAgICZkLCBzaXplb2YoZCkpOworCQkJICAgJmQsIDQpOwogfQogCiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0KHN0cnVjdCBmd19jYXJkICpjYXJkLApAQCAtNjc2LDcgKzY3NCw3IEBACiAJZndfc2VuZF9yZXF1ZXN0KGRldmljZS0+Y2FyZCwgdCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAogCQkJbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAogCQkJbHUtPmNvbW1hbmRfYmxvY2tfYWdlbnRfYWRkcmVzcyArIFNCUDJfQUdFTlRfUkVTRVQsCi0JCQkmZCwgc2l6ZW9mKGQpLCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0LCB0KTsKKwkJCSZkLCA0LCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0LCB0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNicDJfYWxsb3dfYmxvY2soc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKQEAgLTg2Niw4ICs4NjQsNyBAQAogCiAJZndfcnVuX3RyYW5zYWN0aW9uKGRldmljZS0+Y2FyZCwgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNULAogCQkJICAgbHUtPnRndC0+bm9kZV9pZCwgbHUtPmdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAotCQkJICAgQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQlVTWV9USU1FT1VULAotCQkJICAgJmQsIHNpemVvZihkKSk7CisJCQkgICBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CVVNZX1RJTUVPVVQsICZkLCA0KTsKIH0KIAogc3RhdGljIHZvaWQgc2JwMl9yZWNvbm5lY3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5jCmluZGV4IGFhOWJjOWUuLjY5YWQ1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuYwpAQCAtNjM0LDkgKzYzNCw2IEBACiAJICogYmVmb3JlIHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyCiAJICovCiAJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmRjZGJhc19yZWJvb3RfbmIpOwotCXNtaV9kYXRhX2J1Zl9mcmVlKCk7Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGNkYmFzX3BkZXYpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkY2RiYXNfZHJpdmVyKTsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBmcmVlIHRoZSBidWZmZXIgaGVyZSBpbnN0ZWFkIG9mIGRjZGJhc19yZW1vdmUKQEAgLTY0NSw2ICs2NDIsOCBAQAogCSAqIHJlbGVhc2VkLgogCSAqLwogCXNtaV9kYXRhX2J1Zl9mcmVlKCk7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGNkYmFzX3BkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkY2RiYXNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZGNkYmFzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9kbWktaWQuYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pLWlkLmMKaW5kZXggYTc3N2EzNS4uOTRhNThhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWktaWQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaS1pZC5jCkBAIC0yMjksMTAgKzIyOSwxMiBAQAogCiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKGRtaV9kZXYpOwogCWlmIChyZXQpCi0JCWdvdG8gZmFpbF9jbGFzc191bnJlZ2lzdGVyOworCQlnb3RvIGZhaWxfZnJlZV9kbWlfZGV2OwogCiAJcmV0dXJuIDA7CiAKK2ZhaWxfZnJlZV9kbWlfZGV2OgorCWtmcmVlKGRtaV9kZXYpOwogZmFpbF9jbGFzc191bnJlZ2lzdGVyOgogCiAJY2xhc3NfdW5yZWdpc3RlcigmZG1pX2NsYXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCBkNDY0NjcyLi5iM2QyMmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCkBAIC0yNzcsNiArMjc3LDI5IEBACiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5saXN0LCAmZG1pX2RldmljZXMpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgZG1pX3NhdmVfZGV2X29uYm9hcmQoaW50IGluc3RhbmNlLCBpbnQgc2VnbWVudCwgaW50IGJ1cywKKwkJCQkJaW50IGRldmZuLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkbWlfZGV2X29uYm9hcmQgKm9uYm9hcmRfZGV2OworCisJb25ib2FyZF9kZXYgPSBkbWlfYWxsb2Moc2l6ZW9mKCpvbmJvYXJkX2RldikgKyBzdHJsZW4obmFtZSkgKyAxKTsKKwlpZiAoIW9uYm9hcmRfZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1pX3NhdmVfZGV2X29uYm9hcmQ6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJcmV0dXJuOworCX0KKwlvbmJvYXJkX2Rldi0+aW5zdGFuY2UgPSBpbnN0YW5jZTsKKwlvbmJvYXJkX2Rldi0+c2VnbWVudCA9IHNlZ21lbnQ7CisJb25ib2FyZF9kZXYtPmJ1cyA9IGJ1czsKKwlvbmJvYXJkX2Rldi0+ZGV2Zm4gPSBkZXZmbjsKKworCXN0cmNweSgoY2hhciAqKSZvbmJvYXJkX2RldlsxXSwgbmFtZSk7CisJb25ib2FyZF9kZXYtPmRldi50eXBlID0gRE1JX0RFVl9UWVBFX0RFVl9PTkJPQVJEOworCW9uYm9hcmRfZGV2LT5kZXYubmFtZSA9IChjaGFyICopJm9uYm9hcmRfZGV2WzFdOworCW9uYm9hcmRfZGV2LT5kZXYuZGV2aWNlX2RhdGEgPSBvbmJvYXJkX2RldjsKKworCWxpc3RfYWRkKCZvbmJvYXJkX2Rldi0+ZGV2Lmxpc3QsICZkbWlfZGV2aWNlcyk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfc2F2ZV9leHRlbmRlZF9kZXZpY2VzKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKIHsKIAljb25zdCB1OCAqZCA9ICh1OCopIGRtICsgNTsKQEAgLTI4NSw2ICszMDgsOCBAQAogCWlmICgoKmQgJiAweDgwKSA9PSAwKQogCQlyZXR1cm47CiAKKwlkbWlfc2F2ZV9kZXZfb25ib2FyZCgqKGQrMSksICoodTE2ICopKGQrMiksICooZCs0KSwgKihkKzUpLAorCQkJICAgICBkbWlfc3RyaW5nX25vc2F2ZShkbSwgKihkLTEpKSk7CiAJZG1pX3NhdmVfb25lX2RldmljZSgqZCAmIDB4N2YsIGRtaV9zdHJpbmdfbm9zYXZlKGRtLCAqKGQgLSAxKSkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZGQuYwppbmRleCAxMTBlMjRlLi5mMjg3ZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWRkLmMKQEAgLTc0NCw3ICs3NDQsNyBAQAogc3RhdGljIGludCBfX2luaXQKIGVkZF9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJaW50IGk7CiAJaW50IHJjPTA7CiAJc3RydWN0IGVkZF9kZXZpY2UgKmVkZXY7CiAKQEAgLTc2MCwyMSArNzYwLDI3IEBACiAJaWYgKCFlZGRfa3NldCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGkgPSAwOyBpIDwgZWRkX251bV9kZXZpY2VzKCkgJiYgIXJjOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZWRkX251bV9kZXZpY2VzKCk7IGkrKykgewogCQllZGV2ID0ga3phbGxvYyhzaXplb2YgKCplZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghZWRldikKLQkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIWVkZXYpIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJcmMgPSBlZGRfZGV2aWNlX3JlZ2lzdGVyKGVkZXYsIGkpOwogCQlpZiAocmMpIHsKIAkJCWtmcmVlKGVkZXYpOwotCQkJYnJlYWs7CisJCQlnb3RvIG91dDsKIAkJfQogCQllZGRfZGV2aWNlc1tpXSA9IGVkZXY7CiAJfQogCi0JaWYgKHJjKQotCQlrc2V0X3VucmVnaXN0ZXIoZWRkX2tzZXQpOworCXJldHVybiAwOworCitvdXQ6CisJd2hpbGUgKC0taSA+PSAwKQorCQllZGRfZGV2aWNlX3VucmVnaXN0ZXIoZWRkX2RldmljZXNbaV0pOworCWtzZXRfdW5yZWdpc3RlcihlZGRfa3NldCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDdmYWNlOTEuLmY2MjM5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC0xOTUsNiArMTk1LDE3IEBACiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhbiBpbi1rZXJuZWwgaW50ZXJmYWNlIHRvIHRob3NlIEdQSU9zIHVzaW5nCiAJICBwbGF0Zm9ybS1uZXV0cmFsIEdQSU8gY2FsbHMuCiAKK2NvbmZpZyBHUElPX1NYMTUwWAorCWJvb2wgIlNlbXRlY2ggU1gxNTB4IEkyQyBHUElPIGV4cGFuZGVyIgorCWRlcGVuZHMgb24gSTJDPXkKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBTZW10ZWNoIFNYMTUwLXNlcmllcyBJMkMKKwkgIEdQSU8gZXhwYW5kZXJzLiBDb21wYXRpYmxlIG1vZGVscyBpbmNsdWRlOgorCisJICA4IGJpdHM6ICBzeDE1MDhxCisJICAxNiBiaXRzOiBzeDE1MDlxCisKIGNvbmZpZyBHUElPX1RDMzU4OTIKIAlib29sICJUQzM1ODkyIEdQSU9zIgogCWRlcGVuZHMgb24gTUZEX1RDMzU4OTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZSBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQppbmRleCBlNTNkY2ZmLi5hNjllMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCkBAIC0zNSwzICszNSw0IEBACiBvYmotJChDT05GSUdfR1BJT19TQ0gpCQkrPSBzY2hfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19SREMzMjFYKQkrPSByZGMzMjF4LWdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fSkFOWl9UVEwpCSs9IGphbnotdHRsLm8KK29iai0kKENPTkZJR19HUElPX1NYMTUwWCkJKz0gc3gxNTB4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDZhNmJkNTYuLjIxZGE5YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNTcsOSArNTcsOSBAQAogI2RlZmluZSBGTEFHX1RSSUdfUklTRQk2CS8qIHRyaWdnZXIgb24gcmlzaW5nIGVkZ2UgKi8KICNkZWZpbmUgRkxBR19BQ1RJVkVfTE9XCTcJLyogc3lzZnMgdmFsdWUgaGFzIGFjdGl2ZSBsb3cgKi8KIAotI2RlZmluZSBQREVTQ19JRF9TSElGVAkxNgkvKiBhZGQgbmV3IGZsYWdzIGJlZm9yZSB0aGlzIG9uZSAqLworI2RlZmluZSBJRF9TSElGVAkxNgkvKiBhZGQgbmV3IGZsYWdzIGJlZm9yZSB0aGlzIG9uZSAqLwogCi0jZGVmaW5lIEdQSU9fRkxBR1NfTUFTSwkJKCgxIDw8IFBERVNDX0lEX1NISUZUKSAtIDEpCisjZGVmaW5lIEdQSU9fRkxBR1NfTUFTSwkJKCgxIDw8IElEX1NISUZUKSAtIDEpCiAjZGVmaW5lIEdQSU9fVFJJR0dFUl9NQVNLCShCSVQoRkxBR19UUklHX0ZBTEwpIHwgQklUKEZMQUdfVFJJR19SSVNFKSkKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwpAQCAtNjksMTIgKzY5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19kZXNjIGdwaW9fZGVzY1tBUkNIX05SX0dQSU9TXTsKIAogI2lmZGVmIENPTkZJR19HUElPX1NZU0ZTCi1zdHJ1Y3QgcG9sbF9kZXNjIHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKLQlzdHJ1Y3Qgc3lzZnNfZGlyZW50CSp2YWx1ZV9zZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWRyIHBkZXNjX2lkcjsKK3N0YXRpYyBERUZJTkVfSURSKGRpcmVudF9pZHIpOwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXNjX3NldF9sYWJlbChzdHJ1Y3QgZ3Bpb19kZXNjICpkLCBjb25zdCBjaGFyICpsYWJlbCkKQEAgLTMyNSwyNCArMzIwLDE2IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBncGlvX3N5c2ZzX2lycShpbnQgaXJxLCB2b2lkICpwcml2KQogewotCXN0cnVjdCB3b3JrX3N0cnVjdAkqd29yayA9IHByaXY7CisJc3RydWN0IHN5c2ZzX2RpcmVudAkqdmFsdWVfc2QgPSBwcml2OwogCi0Jc2NoZWR1bGVfd29yayh3b3JrKTsKKwlzeXNmc19ub3RpZnlfZGlyZW50KHZhbHVlX3NkKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9fbm90aWZ5X3N5c2ZzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcG9sbF9kZXNjCSpwZGVzYzsKLQotCXBkZXNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwb2xsX2Rlc2MsIHdvcmspOwotCXN5c2ZzX25vdGlmeV9kaXJlbnQocGRlc2MtPnZhbHVlX3NkKTsKLX0KLQogc3RhdGljIGludCBncGlvX3NldHVwX2lycShzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGxvbmcgZ3Bpb19mbGFncykKIHsKLQlzdHJ1Y3QgcG9sbF9kZXNjCSpwZGVzYzsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50CSp2YWx1ZV9zZDsKIAl1bnNpZ25lZCBsb25nCQlpcnFfZmxhZ3M7CiAJaW50CQkJcmV0LCBpcnEsIGlkOwogCkBAIC0zNTMsMTggKzM0MCwxNiBAQAogCWlmIChpcnEgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAotCWlkID0gZGVzYy0+ZmxhZ3MgPj4gUERFU0NfSURfU0hJRlQ7Ci0JcGRlc2MgPSBpZHJfZmluZCgmcGRlc2NfaWRyLCBpZCk7Ci0JaWYgKHBkZXNjKSB7Ci0JCWZyZWVfaXJxKGlycSwgJnBkZXNjLT53b3JrKTsKLQkJY2FuY2VsX3dvcmtfc3luYygmcGRlc2MtPndvcmspOwotCX0KKwlpZCA9IGRlc2MtPmZsYWdzID4+IElEX1NISUZUOworCXZhbHVlX3NkID0gaWRyX2ZpbmQoJmRpcmVudF9pZHIsIGlkKTsKKwlpZiAodmFsdWVfc2QpCisJCWZyZWVfaXJxKGlycSwgdmFsdWVfc2QpOwogCiAJZGVzYy0+ZmxhZ3MgJj0gfkdQSU9fVFJJR0dFUl9NQVNLOwogCiAJaWYgKCFncGlvX2ZsYWdzKSB7CiAJCXJldCA9IDA7Ci0JCWdvdG8gZnJlZV9zZDsKKwkJZ290byBmcmVlX2lkOwogCX0KIAogCWlycV9mbGFncyA9IElSUUZfU0hBUkVEOwpAQCAtMzc1LDU1ICszNjAsNDYgQEAKIAkJaXJxX2ZsYWdzIHw9IHRlc3RfYml0KEZMQUdfQUNUSVZFX0xPVywgJmRlc2MtPmZsYWdzKSA/CiAJCQlJUlFGX1RSSUdHRVJfRkFMTElORyA6IElSUUZfVFJJR0dFUl9SSVNJTkc7CiAKLQlpZiAoIXBkZXNjKSB7Ci0JCXBkZXNjID0ga21hbGxvYyhzaXplb2YoKnBkZXNjKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGRlc2MpIHsKLQkJCXJldCA9IC1FTk9NRU07CisJaWYgKCF2YWx1ZV9zZCkgeworCQl2YWx1ZV9zZCA9IHN5c2ZzX2dldF9kaXJlbnQoZGV2LT5rb2JqLnNkLCBOVUxMLCAidmFsdWUiKTsKKwkJaWYgKCF2YWx1ZV9zZCkgeworCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCiAJCWRvIHsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlpZiAoaWRyX3ByZV9nZXQoJnBkZXNjX2lkciwgR0ZQX0tFUk5FTCkpCi0JCQkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJnBkZXNjX2lkciwKLQkJCQkJCXBkZXNjLCAxLCAmaWQpOworCQkJaWYgKGlkcl9wcmVfZ2V0KCZkaXJlbnRfaWRyLCBHRlBfS0VSTkVMKSkKKwkJCQlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGlyZW50X2lkciwgdmFsdWVfc2QsCisJCQkJCQkJMSwgJmlkKTsKIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCiAJCWlmIChyZXQpCi0JCQlnb3RvIGZyZWVfbWVtOworCQkJZ290byBmcmVlX3NkOwogCiAJCWRlc2MtPmZsYWdzICY9IEdQSU9fRkxBR1NfTUFTSzsKLQkJZGVzYy0+ZmxhZ3MgfD0gKHVuc2lnbmVkIGxvbmcpaWQgPDwgUERFU0NfSURfU0hJRlQ7CisJCWRlc2MtPmZsYWdzIHw9ICh1bnNpZ25lZCBsb25nKWlkIDw8IElEX1NISUZUOwogCi0JCWlmIChkZXNjLT5mbGFncyA+PiBQREVTQ19JRF9TSElGVCAhPSBpZCkgeworCQlpZiAoZGVzYy0+ZmxhZ3MgPj4gSURfU0hJRlQgIT0gaWQpIHsKIAkJCXJldCA9IC1FUkFOR0U7CiAJCQlnb3RvIGZyZWVfaWQ7CiAJCX0KLQotCQlwZGVzYy0+dmFsdWVfc2QgPSBzeXNmc19nZXRfZGlyZW50KGRldi0+a29iai5zZCwgTlVMTCwgInZhbHVlIik7Ci0JCWlmICghcGRlc2MtPnZhbHVlX3NkKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBmcmVlX2lkOwotCQl9Ci0JCUlOSVRfV09SSygmcGRlc2MtPndvcmssIGdwaW9fbm90aWZ5X3N5c2ZzKTsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGdwaW9fc3lzZnNfaXJxLCBpcnFfZmxhZ3MsCi0JCQkiZ3Bpb2xpYiIsICZwZGVzYy0+d29yayk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlX3NkOworCXJldCA9IHJlcXVlc3RfYW55X2NvbnRleHRfaXJxKGlycSwgZ3Bpb19zeXNmc19pcnEsIGlycV9mbGFncywKKwkJCQkiZ3Bpb2xpYiIsIHZhbHVlX3NkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmcmVlX2lkOwogCiAJZGVzYy0+ZmxhZ3MgfD0gZ3Bpb19mbGFnczsKIAlyZXR1cm4gMDsKIAotZnJlZV9zZDoKLQlpZiAocGRlc2MpCi0JCXN5c2ZzX3B1dChwZGVzYy0+dmFsdWVfc2QpOwogZnJlZV9pZDoKLQlpZHJfcmVtb3ZlKCZwZGVzY19pZHIsIGlkKTsKKwlpZHJfcmVtb3ZlKCZkaXJlbnRfaWRyLCBpZCk7CiAJZGVzYy0+ZmxhZ3MgJj0gR1BJT19GTEFHU19NQVNLOwotZnJlZV9tZW06Ci0Ja2ZyZWUocGRlc2MpOworZnJlZV9zZDoKKwlpZiAodmFsdWVfc2QpCisJCXN5c2ZzX3B1dCh2YWx1ZV9zZCk7CiBlcnJfb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC05OTQsOCArOTcwLDYgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkCWdwaW87CiAKLQlpZHJfaW5pdCgmcGRlc2NfaWRyKTsKLQogCXN0YXR1cyA9IGNsYXNzX3JlZ2lzdGVyKCZncGlvX2NsYXNzKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTEyNzIsNyArMTI0Niw3IEBACiAJaWYgKGNoaXAgJiYgdGVzdF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykpIHsKIAkJaWYgKGNoaXAtPmZyZWUpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCQkJbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CisJCQltaWdodF9zbGVlcF9pZihjaGlwLT5jYW5fc2xlZXApOwogCQkJY2hpcC0+ZnJlZShjaGlwLCBncGlvIC0gY2hpcC0+YmFzZSk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAJCX0KQEAgLTE0MTAsNyArMTM4NCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKIAotCW1pZ2h0X3NsZWVwX2lmKGV4dHJhX2NoZWNrcyAmJiBjaGlwLT5jYW5fc2xlZXApOworCW1pZ2h0X3NsZWVwX2lmKGNoaXAtPmNhbl9zbGVlcCk7CiAKIAlpZiAoc3RhdHVzKSB7CiAJCXN0YXR1cyA9IGNoaXAtPnJlcXVlc3QoY2hpcCwgZ3Bpbyk7CkBAIC0xNDYzLDcgKzE0MzcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKLQltaWdodF9zbGVlcF9pZihleHRyYV9jaGVja3MgJiYgY2hpcC0+Y2FuX3NsZWVwKTsKKwltaWdodF9zbGVlcF9pZihjaGlwLT5jYW5fc2xlZXApOwogCiAJaWYgKHN0YXR1cykgewogCQlzdGF0dXMgPSBjaGlwLT5yZXF1ZXN0KGNoaXAsIGdwaW8pOwpAQCAtMTUyMSw3ICsxNDk1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCi0JbWlnaHRfc2xlZXBfaWYoZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CisJbWlnaHRfc2xlZXBfaWYoY2hpcC0+Y2FuX3NsZWVwKTsKIAogCXJldHVybiBjaGlwLT5zZXRfZGVib3VuY2UoY2hpcCwgZ3BpbywgZGVib3VuY2UpOwogCkBAIC0xNTcxLDcgKzE1NDUsNyBAQAogCXN0cnVjdCBncGlvX2NoaXAJKmNoaXA7CiAKIAljaGlwID0gZ3Bpb190b19jaGlwKGdwaW8pOwotCVdBUk5fT04oZXh0cmFfY2hlY2tzICYmIGNoaXAtPmNhbl9zbGVlcCk7CisJV0FSTl9PTihjaGlwLT5jYW5fc2xlZXApOwogCXJldHVybiBjaGlwLT5nZXQgPyBjaGlwLT5nZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UpIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZ3Bpb19nZXRfdmFsdWUpOwpAQCAtMTU5MCw3ICsxNTY0LDcgQEAKIAlzdHJ1Y3QgZ3Bpb19jaGlwCSpjaGlwOwogCiAJY2hpcCA9IGdwaW9fdG9fY2hpcChncGlvKTsKLQlXQVJOX09OKGV4dHJhX2NoZWNrcyAmJiBjaGlwLT5jYW5fc2xlZXApOworCVdBUk5fT04oY2hpcC0+Y2FuX3NsZWVwKTsKIAljaGlwLT5zZXQoY2hpcCwgZ3BpbyAtIGNoaXAtPmJhc2UsIHZhbHVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZ3Bpb19zZXRfdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMHguYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzB4LmMKaW5kZXggNzY5NmE1Ni4uOTRjZTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL21heDczMHguYworKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMweC5jCkBAIC01NCw3ICs1NCw3IEBACiB7CiAJc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKIAl1OCAqY29uZmlnOwotCXU4IG9mZnNldF9iaXRzOworCXU4IG9mZnNldF9iaXRzLCBwaW5fY29uZmlnOwogCWludCByZXQ7CiAKIAkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLwpAQCAtNjMsMTIgKzYzLDE1IEBACiAKIAljb25maWcgPSAmdHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXTsKIAorCWlmICh0cy0+aW5wdXRfcHVsbHVwX2FjdGl2ZSAmIEJJVChvZmZzZXQpKQorCQlwaW5fY29uZmlnID0gUElOX0NPTkZJR19JTl9QVUxMVVA7CisJZWxzZQorCQlwaW5fY29uZmlnID0gUElOX0NPTkZJR19JTl9XT19QVUxMVVA7CisKIAltdXRleF9sb2NrKCZ0cy0+bG9jayk7CiAKLQkvKiBTdGFuZGFyZCBHUElPIEFQSSBkb2Vzbid0IHN1cHBvcnQgcHVsbC11cHMsIGhhcyB0byBiZSBleHRlbmRlZC4KLQkgKiBIYXJkLWNvZGluZyBubyBwb2xsdXAgZm9yIG5vdy4gKi8KIAkqY29uZmlnID0gKCpjb25maWcgJiB+KFBJTl9DT05GSUdfTUFTSyA8PCBvZmZzZXRfYml0cykpCi0JCQkgICB8IChQSU5fQ09ORklHX0lOX1dPX1BVTExVUCA8PCBvZmZzZXRfYml0cyk7CisJCQkgICB8IChwaW5fY29uZmlnIDw8IG9mZnNldF9iaXRzKTsKIAogCXJldCA9IHRzLT53cml0ZSh0cy0+ZGV2LCAweDA4ICsgKG9mZnNldCA+PiAyKSwgKmNvbmZpZyk7CiAKQEAgLTE3Nyw2ICsxODAsNyBAQAogCS8qIFBvd2VyIHVwIHRoZSBjaGlwIGFuZCBkaXNhYmxlIElSUSBvdXRwdXQgKi8KIAl0cy0+d3JpdGUoZGV2LCAweDA0LCAweDAxKTsKIAorCXRzLT5pbnB1dF9wdWxsdXBfYWN0aXZlID0gcGRhdGEtPmlucHV0X3B1bGx1cF9hY3RpdmU7CiAJdHMtPmNoaXAubGFiZWwgPSBkZXYtPmRyaXZlci0+bmFtZTsKIAogCXRzLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IG1heDczMDFfZGlyZWN0aW9uX2lucHV0OwpAQCAtMTkxLDEzICsxOTUsMTcgQEAKIAl0cy0+Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKLQkgKiB0cmlzdGF0ZSBhbGwgcGlucyBpbiBoYXJkd2FyZSBhbmQgY2FjaGUgdGhlCisJICogaW5pdGlhbGl6ZSBwdWxsdXBzIGFjY29yZGluZyB0byBwbGF0Zm9ybSBkYXRhIGFuZCBjYWNoZSB0aGUKIAkgKiByZWdpc3RlciB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KIAkgKi8KIAlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7CiAJCWludCBqOwotCQkvKiAweEFBIG1lYW5zIGlucHV0IHdpdGggaW50ZXJuYWwgcHVsbHVwIGRpc2FibGVkICovCi0JCXRzLT53cml0ZShkZXYsIDB4MDggKyBpLCAweEFBKTsKKwkJLyoKKwkJICogaW5pdGlhbGl6ZSBwb3J0X2NvbmZpZyB3aXRoICIweEFBIiwgd2hpY2ggbWVhbnMKKwkJICogaW5wdXQgd2l0aCBpbnRlcm5hbCBwdWxsdXAgZGlzYWJsZWQuIFRoaXMgaXMgbmVlZGVkCisJCSAqIHRvIGF2b2lkIHdyaXRpbmcgemVyb3MgKGluIHRoZSBpbm5lciBmb3IgbG9vcCksCisJCSAqIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LgorCQkgKi8KIAkJdHMtPnBvcnRfY29uZmlnW2ldID0gMHhBQTsKIAkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewogCQkJaW50IG9mZnNldCA9IChpIC0gMSkgKiA0ICsgajsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMgYi9kcml2ZXJzL2dwaW8vcGNmODU3eC5jCmluZGV4IDI5ZjE5Y2UuLjg3OWI0NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2Y4NTd4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjZjg1N3guYwpAQCAtMTkwLDcgKzE5MCw2IEBACiAJcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEpIHsKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQWxsb2NhdGUsIGluaXRpYWxpemUsIGFuZCByZWdpc3RlciB0aGlzIGdwaW9fY2hpcC4gKi8KQEAgLTIwMCw3ICsxOTksNyBAQAogCiAJbXV0ZXhfaW5pdCgmZ3Bpby0+bG9jayk7CiAKLQlncGlvLT5jaGlwLmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCWdwaW8tPmNoaXAuYmFzZSA9IHBkYXRhID8gcGRhdGEtPmdwaW9fYmFzZSA6IC0xOwogCWdwaW8tPmNoaXAuY2FuX3NsZWVwID0gMTsKIAlncGlvLT5jaGlwLmRldiA9ICZjbGllbnQtPmRldjsKIAlncGlvLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC0yNzgsNyArMjc3LDcgQEAKIAkgKiB0byB6ZXJvLCBvdXIgc29mdHdhcmUgY29weSBvZiB0aGUgImxhdGNoIiB0aGVuIG1hdGNoZXMgdGhlIGNoaXAncwogCSAqIGFsbC1vbmVzIHJlc2V0IHN0YXRlLiAgT3RoZXJ3aXNlIGl0IGZsYWdzIHBpbnMgdG8gYmUgZHJpdmVuIGxvdy4KIAkgKi8KLQlncGlvLT5vdXQgPSB+cGRhdGEtPm5fbGF0Y2g7CisJZ3Bpby0+b3V0ID0gcGRhdGEgPyB+cGRhdGEtPm5fbGF0Y2ggOiB+MDsKIAogCXN0YXR1cyA9IGdwaW9jaGlwX2FkZCgmZ3Bpby0+Y2hpcCk7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC0yOTksNyArMjk4LDcgQEAKIAkvKiBMZXQgcGxhdGZvcm0gY29kZSBzZXQgdXAgdGhlIEdQSU9zIGFuZCB0aGVpciB1c2Vycy4KIAkgKiBOb3cgaXMgdGhlIGZpcnN0IHRpbWUgYW55b25lIGNvdWxkIHVzZSB0aGVtLgogCSAqLwotCWlmIChwZGF0YS0+c2V0dXApIHsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnNldHVwKSB7CiAJCXN0YXR1cyA9IHBkYXRhLT5zZXR1cChjbGllbnQsCiAJCQkJZ3Bpby0+Y2hpcC5iYXNlLCBncGlvLT5jaGlwLm5ncGlvLAogCQkJCXBkYXRhLT5jb250ZXh0KTsKQEAgLTMyMiw3ICszMjEsNyBAQAogCXN0cnVjdCBwY2Y4NTd4CQkJKmdwaW8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQJCQkJc3RhdHVzID0gMDsKIAotCWlmIChwZGF0YS0+dGVhcmRvd24pIHsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnRlYXJkb3duKSB7CiAJCXN0YXR1cyA9IHBkYXRhLT50ZWFyZG93bihjbGllbnQsCiAJCQkJZ3Bpby0+Y2hpcC5iYXNlLCBncGlvLT5jaGlwLm5ncGlvLAogCQkJCXBkYXRhLT5jb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9zeDE1MHguYyBiL2RyaXZlcnMvZ3Bpby9zeDE1MHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDJmNDJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL3N4MTUweC5jCkBAIC0wLDAgKzEsNjQ1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9zeDE1MHguaD4KKworc3RydWN0IHN4MTUweF9kZXZpY2VfZGF0YSB7CisJdTggcmVnX3B1bGx1cDsKKwl1OCByZWdfcHVsbGRuOworCXU4IHJlZ19kcmFpbjsKKwl1OCByZWdfcG9sYXJpdHk7CisJdTggcmVnX2RpcjsKKwl1OCByZWdfZGF0YTsKKwl1OCByZWdfaXJxX21hc2s7CisJdTggcmVnX2lycV9zcmM7CisJdTggcmVnX3NlbnNlOworCXU4IHJlZ19jbG9jazsKKwl1OCByZWdfbWlzYzsKKwl1OCByZWdfcmVzZXQ7CisJdTggbmdwaW9zOworfTsKKworc3RydWN0IHN4MTUweF9jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICAgICAgICAgICAgICAgICBncGlvX2NoaXA7CisJc3RydWN0IGkyY19jbGllbnQgICAgICAgICAgICAgICAqY2xpZW50OworCWNvbnN0IHN0cnVjdCBzeDE1MHhfZGV2aWNlX2RhdGEgKmRldl9jZmc7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3N1bW1hcnk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX2Jhc2U7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX3NlbnNlOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgIGlycV9zZXRfdHlwZV9wZW5kaW5nOworCXN0cnVjdCBpcnFfY2hpcCAgICAgICAgICAgICAgICAgIGlycV9jaGlwOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgIGxvY2s7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN4MTUweF9kZXZpY2VfZGF0YSBzeDE1MHhfZGV2aWNlc1tdID0geworCVswXSA9IHsgLyogc3gxNTA4cSAqLworCQkucmVnX3B1bGx1cCAgID0gMHgwMywKKwkJLnJlZ19wdWxsZG4gICA9IDB4MDQsCisJCS5yZWdfZHJhaW4gICAgPSAweDA1LAorCQkucmVnX3BvbGFyaXR5ID0gMHgwNiwKKwkJLnJlZ19kaXIgICAgICA9IDB4MDcsCisJCS5yZWdfZGF0YSAgICAgPSAweDA4LAorCQkucmVnX2lycV9tYXNrID0gMHgwOSwKKwkJLnJlZ19pcnFfc3JjICA9IDB4MGMsCisJCS5yZWdfc2Vuc2UgICAgPSAweDBiLAorCQkucmVnX2Nsb2NrICAgID0gMHgwZiwKKwkJLnJlZ19taXNjICAgICA9IDB4MTAsCisJCS5yZWdfcmVzZXQgICAgPSAweDdkLAorCQkubmdwaW9zICAgICAgID0gOAorCX0sCisJWzFdID0geyAvKiBzeDE1MDlxICovCisJCS5yZWdfcHVsbHVwICAgPSAweDA3LAorCQkucmVnX3B1bGxkbiAgID0gMHgwOSwKKwkJLnJlZ19kcmFpbiAgICA9IDB4MGIsCisJCS5yZWdfcG9sYXJpdHkgPSAweDBkLAorCQkucmVnX2RpciAgICAgID0gMHgwZiwKKwkJLnJlZ19kYXRhICAgICA9IDB4MTEsCisJCS5yZWdfaXJxX21hc2sgPSAweDEzLAorCQkucmVnX2lycV9zcmMgID0gMHgxOSwKKwkJLnJlZ19zZW5zZSAgICA9IDB4MTcsCisJCS5yZWdfY2xvY2sgICAgPSAweDFlLAorCQkucmVnX21pc2MgICAgID0gMHgxZiwKKwkJLnJlZ19yZXNldCAgICA9IDB4N2QsCisJCS5uZ3Bpb3MgICAgICAgPSAxNgorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc3gxNTB4X2lkW10gPSB7CisJeyJzeDE1MDhxIiwgMH0sCisJeyJzeDE1MDlxIiwgMX0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc3gxNTB4X2lkKTsKKworc3RhdGljIHMzMiBzeDE1MHhfaTJjX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQoreworCXMzMiBlcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworCisJaWYgKGVyciA8IDApCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCSJpMmMgd3JpdGUgZmFpbDogY2FuJ3Qgd3JpdGUgJTAyeCB0byAlMDJ4OiAlZFxuIiwKKwkJCXZhbCwgcmVnLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzMzIgc3gxNTB4X2kyY19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggKnZhbCkKK3sKKwlzMzIgZXJyID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKworCWlmIChlcnIgPj0gMCkKKwkJKnZhbCA9IGVycjsKKwllbHNlCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCSJpMmMgcmVhZCBmYWlsOiBjYW4ndCByZWFkIGZyb20gJTAyeDogJWRcbiIsCisJCQlyZWcsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBib29sIG9mZnNldF9pc19vc2NpbyhzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gKGNoaXAtPmRldl9jZmctPm5ncGlvcyA9PSBvZmZzZXQpOworfQorCisvKgorICogVGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgc29sdmUgdGhlIGNvbW1vbiBwcm9ibGVtIG9mIGxvY2F0aW5nIGFuZCBzZXR0aW5nCisgKiBjb25maWd1cmF0aW9uIGJpdHMuICBDb25maWd1cmF0aW9uIGJpdHMgYXJlIGdyb3VwZWQgaW50byByZWdpc3RlcnMKKyAqIHdob3NlIGluZGV4ZXMgaW5jcmVhc2UgZG93bndhcmRzLiAgRm9yIGV4YW1wbGUsIHdpdGggZWlnaHQtYml0IHJlZ2lzdGVycywKKyAqIHNpeHRlZW4gZ3Bpb3Mgd291bGQgaGF2ZSB0aGVpciBjb25maWcgYml0cyBncm91cGVkIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6CisgKiBSRUdJU1RFUiBOLTEgWyBmIGUgZCBjIGIgYSA5IDggXQorICogICAgICAgICAgTiAgIFsgNyA2IDUgNCAzIDIgMSAwIF0KKyAqCisgKiBGb3IgbXVsdGktYml0IGNvbmZpZ3VyYXRpb25zLCB0aGUgcGF0dGVybiBnZXRzIHdpZGVyOgorICogUkVHSVNURVIgTi0zIFsgZiBmIGUgZSBkIGQgYyBjIF0KKyAqICAgICAgICAgIE4tMiBbIGIgYiBhIGEgOSA5IDggOCBdCisgKiAgICAgICAgICBOLTEgWyA3IDcgNiA2IDUgNSA0IDQgXQorICogICAgICAgICAgTiAgIFsgMyAzIDIgMiAxIDEgMCAwIF0KKyAqCisgKiBHaXZlbiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnRpbmcgcmVnaXN0ZXIgJ04nLCB0aGUgaW5kZXggb2YgdGhlIGdwaW8KKyAqIHdob3NlIGNvbmZpZ3VyYXRpb24gd2Ugc2VlayB0byBjaGFuZ2UsIGFuZCB0aGUgd2lkdGggaW4gYml0cyBvZiB0aGF0CisgKiBjb25maWd1cmF0aW9uLCB0aGVzZSBmdW5jdGlvbnMgYWxsb3cgdXMgdG8gbG9jYXRlIHRoZSBjb3JyZWN0CisgKiByZWdpc3RlciBhbmQgbWFzayB0aGUgY29ycmVjdCBiaXRzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3gxNTB4X2ZpbmRfY2ZnKHU4IG9mZnNldCwgdTggd2lkdGgsCisJCQkJdTggKnJlZywgdTggKm1hc2ssIHU4ICpzaGlmdCkKK3sKKwkqcmVnICAgLT0gb2Zmc2V0ICogd2lkdGggLyA4OworCSptYXNrICAgPSAoMSA8PCB3aWR0aCkgLSAxOworCSpzaGlmdCAgPSAob2Zmc2V0ICogd2lkdGgpICUgODsKKwkqbWFzayA8PD0gKnNoaWZ0OworfQorCitzdGF0aWMgczMyIHN4MTUweF93cml0ZV9jZmcoc3RydWN0IHN4MTUweF9jaGlwICpjaGlwLAorCQkJdTggb2Zmc2V0LCB1OCB3aWR0aCwgdTggcmVnLCB1OCB2YWwpCit7CisJdTggIG1hc2s7CisJdTggIGRhdGE7CisJdTggIHNoaWZ0OworCXMzMiBlcnI7CisKKwlzeDE1MHhfZmluZF9jZmcob2Zmc2V0LCB3aWR0aCwgJnJlZywgJm1hc2ssICZzaGlmdCk7CisJZXJyID0gc3gxNTB4X2kyY19yZWFkKGNoaXAtPmNsaWVudCwgcmVnLCAmZGF0YSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlkYXRhICY9IH5tYXNrOworCWRhdGEgfD0gKHZhbCA8PCBzaGlmdCkgJiBtYXNrOworCXJldHVybiBzeDE1MHhfaTJjX3dyaXRlKGNoaXAtPmNsaWVudCwgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIGludCBzeDE1MHhfZ2V0X2lvKHN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXU4ICByZWcgPSBjaGlwLT5kZXZfY2ZnLT5yZWdfZGF0YTsKKwl1OCAgbWFzazsKKwl1OCAgZGF0YTsKKwl1OCAgc2hpZnQ7CisJczMyIGVycjsKKworCXN4MTUweF9maW5kX2NmZyhvZmZzZXQsIDEsICZyZWcsICZtYXNrLCAmc2hpZnQpOworCWVyciA9IHN4MTUweF9pMmNfcmVhZChjaGlwLT5jbGllbnQsIHJlZywgJmRhdGEpOworCWlmIChlcnIgPj0gMCkKKwkJZXJyID0gKGRhdGEgJiBtYXNrKSAhPSAwID8gMSA6IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBzeDE1MHhfc2V0X29zY2lvKHN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCwgaW50IHZhbCkKK3sKKwlzeDE1MHhfaTJjX3dyaXRlKGNoaXAtPmNsaWVudCwKKwkJCWNoaXAtPmRldl9jZmctPnJlZ19jbG9jaywKKwkJCSh2YWwgPyAweDFmIDogMHgxMCkpOworfQorCitzdGF0aWMgdm9pZCBzeDE1MHhfc2V0X2lvKHN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQoreworCXN4MTUweF93cml0ZV9jZmcoY2hpcCwKKwkJCW9mZnNldCwKKwkJCTEsCisJCQljaGlwLT5kZXZfY2ZnLT5yZWdfZGF0YSwKKwkJCSh2YWwgPyAxIDogMCkpOworfQorCitzdGF0aWMgaW50IHN4MTUweF9pb19pbnB1dChzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gc3gxNTB4X3dyaXRlX2NmZyhjaGlwLAorCQkJCW9mZnNldCwKKwkJCQkxLAorCQkJCWNoaXAtPmRldl9jZmctPnJlZ19kaXIsCisJCQkJMSk7Cit9CisKK3N0YXRpYyBpbnQgc3gxNTB4X2lvX291dHB1dChzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc3gxNTB4X3dyaXRlX2NmZyhjaGlwLAorCQkJb2Zmc2V0LAorCQkJMSwKKwkJCWNoaXAtPmRldl9jZmctPnJlZ19kYXRhLAorCQkJKHZhbCA/IDEgOiAwKSk7CisJaWYgKGVyciA+PSAwKQorCQllcnIgPSBzeDE1MHhfd3JpdGVfY2ZnKGNoaXAsCisJCQkJb2Zmc2V0LAorCQkJCTEsCisJCQkJY2hpcC0+ZGV2X2NmZy0+cmVnX2RpciwKKwkJCQkwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN4MTUweF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcDsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsKKworCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBzeDE1MHhfY2hpcCwgZ3Bpb19jaGlwKTsKKworCWlmICghb2Zmc2V0X2lzX29zY2lvKGNoaXAsIG9mZnNldCkpIHsKKwkJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJCXN0YXR1cyA9IHN4MTUweF9nZXRfaW8oY2hpcCwgb2Zmc2V0KTsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBzeDE1MHhfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXA7CisKKwljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGdwaW9fY2hpcCk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwlpZiAob2Zmc2V0X2lzX29zY2lvKGNoaXAsIG9mZnNldCkpCisJCXN4MTUweF9zZXRfb3NjaW8oY2hpcCwgdmFsKTsKKwllbHNlCisJCXN4MTUweF9zZXRfaW8oY2hpcCwgb2Zmc2V0LCB2YWwpOworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3gxNTB4X2dwaW9fZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOworCWludCBzdGF0dXMgPSAtRUlOVkFMOworCisJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHN4MTUweF9jaGlwLCBncGlvX2NoaXApOworCisJaWYgKCFvZmZzZXRfaXNfb3NjaW8oY2hpcCwgb2Zmc2V0KSkgeworCQltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwkJc3RhdHVzID0gc3gxNTB4X2lvX2lucHV0KGNoaXAsIG9mZnNldCk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgc3gxNTB4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LAorCQkJCQlpbnQgdmFsKQoreworCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBzeDE1MHhfY2hpcCwgZ3Bpb19jaGlwKTsKKworCWlmICghb2Zmc2V0X2lzX29zY2lvKGNoaXAsIG9mZnNldCkpIHsKKwkJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJCXN0YXR1cyA9IHN4MTUweF9pb19vdXRwdXQoY2hpcCwgb2Zmc2V0LCB2YWwpOworCQltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHN4MTUweF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcDsKKworCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBzeDE1MHhfY2hpcCwgZ3Bpb19jaGlwKTsKKworCWlmIChvZmZzZXQgPj0gY2hpcC0+ZGV2X2NmZy0+bmdwaW9zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGlwLT5pcnFfYmFzZSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGNoaXAtPmlycV9iYXNlICsgb2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBzeDE1MHhfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gZ2V0X2lycV9jaGlwKGlycSk7CisJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOworCXVuc2lnbmVkIG47CisKKwljaGlwID0gY29udGFpbmVyX29mKGljLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGlycV9jaGlwKTsKKwluID0gaXJxIC0gY2hpcC0+aXJxX2Jhc2U7CisKKwlzeDE1MHhfd3JpdGVfY2ZnKGNoaXAsIG4sIDEsIGNoaXAtPmRldl9jZmctPnJlZ19pcnFfbWFzaywgMSk7CisJc3gxNTB4X3dyaXRlX2NmZyhjaGlwLCBuLCAyLCBjaGlwLT5kZXZfY2ZnLT5yZWdfc2Vuc2UsIDApOworfQorCitzdGF0aWMgdm9pZCBzeDE1MHhfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXA7CisJdW5zaWduZWQgbjsKKworCWNoaXAgPSBjb250YWluZXJfb2YoaWMsIHN0cnVjdCBzeDE1MHhfY2hpcCwgaXJxX2NoaXApOworCW4gPSBpcnEgLSBjaGlwLT5pcnFfYmFzZTsKKworCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMSwgY2hpcC0+ZGV2X2NmZy0+cmVnX2lycV9tYXNrLCAwKTsKKwlzeDE1MHhfd3JpdGVfY2ZnKGNoaXAsIG4sIDIsIGNoaXAtPmRldl9jZmctPnJlZ19zZW5zZSwKKwkJCSBjaGlwLT5pcnFfc2Vuc2UgPj4gKG4gKiAyKSk7Cit9CisKK3N0YXRpYyBpbnQgc3gxNTB4X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXN0cnVjdCBpcnFfY2hpcCAqaWMgPSBnZXRfaXJxX2NoaXAoaXJxKTsKKwlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXA7CisJdW5zaWduZWQgbiwgdmFsID0gMDsKKworCWlmIChmbG93X3R5cGUgJiAoSVJRX1RZUEVfTEVWRUxfSElHSCB8IElSUV9UWVBFX0xFVkVMX0xPVykpCisJCXJldHVybiAtRUlOVkFMOworCisJY2hpcCA9IGNvbnRhaW5lcl9vZihpYywgc3RydWN0IHN4MTUweF9jaGlwLCBpcnFfY2hpcCk7CisJbiA9IGlycSAtIGNoaXAtPmlycV9iYXNlOworCisJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQorCQl2YWwgfD0gMHgxOworCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCXZhbCB8PSAweDI7CisKKwljaGlwLT5pcnFfc2Vuc2UgJj0gfigzVUwgPDwgKG4gKiAyKSk7CisJY2hpcC0+aXJxX3NlbnNlIHw9IHZhbCA8PCAobiAqIDIpOworCWNoaXAtPmlycV9zZXRfdHlwZV9wZW5kaW5nIHw9IEJJVChuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHN4MTUweF9pcnFfdGhyZWFkX2ZuKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAgPSAoc3RydWN0IHN4MTUweF9jaGlwICopZGV2X2lkOworCXVuc2lnbmVkIG5oYW5kbGVkID0gMDsKKwl1bnNpZ25lZCBzdWJfaXJxOworCXVuc2lnbmVkIG47CisJczMyIGVycjsKKwl1OCB2YWw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAoY2hpcC0+ZGV2X2NmZy0+bmdwaW9zIC8gOCkgLSAxOyBpID49IDA7IC0taSkgeworCQllcnIgPSBzeDE1MHhfaTJjX3JlYWQoY2hpcC0+Y2xpZW50LAorCQkJCSAgICAgIGNoaXAtPmRldl9jZmctPnJlZ19pcnFfc3JjIC0gaSwKKwkJCQkgICAgICAmdmFsKTsKKwkJaWYgKGVyciA8IDApCisJCQljb250aW51ZTsKKworCQlzeDE1MHhfaTJjX3dyaXRlKGNoaXAtPmNsaWVudCwKKwkJCQljaGlwLT5kZXZfY2ZnLT5yZWdfaXJxX3NyYyAtIGksCisJCQkJdmFsKTsKKwkJZm9yIChuID0gMDsgbiA8IDg7ICsrbikgeworCQkJaWYgKHZhbCAmICgxIDw8IG4pKSB7CisJCQkJc3ViX2lycSA9IGNoaXAtPmlycV9iYXNlICsgKGkgKiA4KSArIG47CisJCQkJaGFuZGxlX25lc3RlZF9pcnEoc3ViX2lycSk7CisJCQkJKytuaGFuZGxlZDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAobmhhbmRsZWQgPiAwID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkIHN4MTUweF9pcnFfYnVzX2xvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gZ2V0X2lycV9jaGlwKGlycSk7CisJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOworCisJY2hpcCA9IGNvbnRhaW5lcl9vZihpYywgc3RydWN0IHN4MTUweF9jaGlwLCBpcnFfY2hpcCk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3gxNTB4X2lycV9idXNfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmljID0gZ2V0X2lycV9jaGlwKGlycSk7CisJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOworCXVuc2lnbmVkIG47CisKKwljaGlwID0gY29udGFpbmVyX29mKGljLCBzdHJ1Y3Qgc3gxNTB4X2NoaXAsIGlycV9jaGlwKTsKKworCXdoaWxlIChjaGlwLT5pcnFfc2V0X3R5cGVfcGVuZGluZykgeworCQluID0gX19mZnMoY2hpcC0+aXJxX3NldF90eXBlX3BlbmRpbmcpOworCQljaGlwLT5pcnFfc2V0X3R5cGVfcGVuZGluZyAmPSB+QklUKG4pOworCQlpZiAoIShpcnFfdG9fZGVzYyhuICsgY2hpcC0+aXJxX2Jhc2UpLT5zdGF0dXMgJiBJUlFfTUFTS0VEKSkKKwkJCXN4MTUweF93cml0ZV9jZmcoY2hpcCwgbiwgMiwKKwkJCQkJY2hpcC0+ZGV2X2NmZy0+cmVnX3NlbnNlLAorCQkJCQljaGlwLT5pcnFfc2Vuc2UgPj4gKG4gKiAyKSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgc3gxNTB4X2luaXRfY2hpcChzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsCisJCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGEsCisJCQlzdHJ1Y3Qgc3gxNTB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCW11dGV4X2luaXQoJmNoaXAtPmxvY2spOworCisJY2hpcC0+Y2xpZW50ICAgICAgICAgICAgICAgICAgICAgPSBjbGllbnQ7CisJY2hpcC0+ZGV2X2NmZyAgICAgICAgICAgICAgICAgICAgPSAmc3gxNTB4X2RldmljZXNbZHJpdmVyX2RhdGFdOworCWNoaXAtPmdwaW9fY2hpcC5sYWJlbCAgICAgICAgICAgID0gY2xpZW50LT5uYW1lOworCWNoaXAtPmdwaW9fY2hpcC5kaXJlY3Rpb25faW5wdXQgID0gc3gxNTB4X2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWNoaXAtPmdwaW9fY2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gc3gxNTB4X2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwljaGlwLT5ncGlvX2NoaXAuZ2V0ICAgICAgICAgICAgICA9IHN4MTUweF9ncGlvX2dldDsKKwljaGlwLT5ncGlvX2NoaXAuc2V0ICAgICAgICAgICAgICA9IHN4MTUweF9ncGlvX3NldDsKKwljaGlwLT5ncGlvX2NoaXAudG9faXJxICAgICAgICAgICA9IHN4MTUweF9ncGlvX3RvX2lycTsKKwljaGlwLT5ncGlvX2NoaXAuYmFzZSAgICAgICAgICAgICA9IHBkYXRhLT5ncGlvX2Jhc2U7CisJY2hpcC0+Z3Bpb19jaGlwLmNhbl9zbGVlcCAgICAgICAgPSAxOworCWNoaXAtPmdwaW9fY2hpcC5uZ3BpbyAgICAgICAgICAgID0gY2hpcC0+ZGV2X2NmZy0+bmdwaW9zOworCWlmIChwZGF0YS0+b3NjaW9faXNfZ3BvKQorCQkrK2NoaXAtPmdwaW9fY2hpcC5uZ3BpbzsKKworCWNoaXAtPmlycV9jaGlwLm5hbWUgICAgICAgICAgICA9IGNsaWVudC0+bmFtZTsKKwljaGlwLT5pcnFfY2hpcC5tYXNrICAgICAgICAgICAgPSBzeDE1MHhfaXJxX21hc2s7CisJY2hpcC0+aXJxX2NoaXAudW5tYXNrICAgICAgICAgID0gc3gxNTB4X2lycV91bm1hc2s7CisJY2hpcC0+aXJxX2NoaXAuc2V0X3R5cGUgICAgICAgID0gc3gxNTB4X2lycV9zZXRfdHlwZTsKKwljaGlwLT5pcnFfY2hpcC5idXNfbG9jayAgICAgICAgPSBzeDE1MHhfaXJxX2J1c19sb2NrOworCWNoaXAtPmlycV9jaGlwLmJ1c19zeW5jX3VubG9jayA9IHN4MTUweF9pcnFfYnVzX3N5bmNfdW5sb2NrOworCWNoaXAtPmlycV9zdW1tYXJ5ICAgICAgICAgICAgICA9IC0xOworCWNoaXAtPmlycV9iYXNlICAgICAgICAgICAgICAgICA9IC0xOworCWNoaXAtPmlycV9zZW5zZSAgICAgICAgICAgICAgICA9IDA7CisJY2hpcC0+aXJxX3NldF90eXBlX3BlbmRpbmcgICAgID0gMDsKK30KKworc3RhdGljIGludCBzeDE1MHhfaW5pdF9pbyhzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsIHU4IGJhc2UsIHUxNiBjZmcpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbjsKKworCWZvciAobiA9IDA7IGVyciA+PSAwICYmIG4gPCAoY2hpcC0+ZGV2X2NmZy0+bmdwaW9zIC8gOCk7ICsrbikKKwkJZXJyID0gc3gxNTB4X2kyY193cml0ZShjaGlwLT5jbGllbnQsIGJhc2UgLSBuLCBjZmcgPj4gKG4gKiA4KSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzeDE1MHhfaW5pdF9odyhzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXAsCisJCQlzdHJ1Y3Qgc3gxNTB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjaGlwLT5jbGllbnQsCisJCQkJCWNoaXAtPmRldl9jZmctPnJlZ19yZXNldCwKKwkJCQkJMHgzNDEyKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHN4MTUweF9pMmNfd3JpdGUoY2hpcC0+Y2xpZW50LAorCQkJY2hpcC0+ZGV2X2NmZy0+cmVnX21pc2MsCisJCQkweDAxKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHN4MTUweF9pbml0X2lvKGNoaXAsIGNoaXAtPmRldl9jZmctPnJlZ19wdWxsdXAsCisJCQlwZGF0YS0+aW9fcHVsbHVwX2VuYSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzeDE1MHhfaW5pdF9pbyhjaGlwLCBjaGlwLT5kZXZfY2ZnLT5yZWdfcHVsbGRuLAorCQkJcGRhdGEtPmlvX3B1bGxkbl9lbmEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc3gxNTB4X2luaXRfaW8oY2hpcCwgY2hpcC0+ZGV2X2NmZy0+cmVnX2RyYWluLAorCQkJcGRhdGEtPmlvX29wZW5fZHJhaW5fZW5hKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHN4MTUweF9pbml0X2lvKGNoaXAsIGNoaXAtPmRldl9jZmctPnJlZ19wb2xhcml0eSwKKwkJCXBkYXRhLT5pb19wb2xhcml0eSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAocGRhdGEtPm9zY2lvX2lzX2dwbykKKwkJc3gxNTB4X3NldF9vc2NpbyhjaGlwLCAwKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3gxNTB4X2luc3RhbGxfaXJxX2NoaXAoc3RydWN0IHN4MTUweF9jaGlwICpjaGlwLAorCQkJCWludCBpcnFfc3VtbWFyeSwKKwkJCQlpbnQgaXJxX2Jhc2UpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBuOworCXVuc2lnbmVkIGlycTsKKworCWNoaXAtPmlycV9zdW1tYXJ5ID0gaXJxX3N1bW1hcnk7CisJY2hpcC0+aXJxX2Jhc2UgICAgPSBpcnFfYmFzZTsKKworCWZvciAobiA9IDA7IG4gPCBjaGlwLT5kZXZfY2ZnLT5uZ3Bpb3M7ICsrbikgeworCQlpcnEgPSBpcnFfYmFzZSArIG47CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZjaGlwLT5pcnFfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7CisjaWZkZWYgQ09ORklHX0FSTQorCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoaXJxKTsKKyNlbmRpZgorCX0KKworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycV9zdW1tYXJ5LAorCQkJCU5VTEwsCisJCQkJc3gxNTB4X2lycV90aHJlYWRfZm4sCisJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQljaGlwLT5pcnFfY2hpcC5uYW1lLAorCQkJCWNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCWNoaXAtPmlycV9zdW1tYXJ5ID0gLTE7CisJCWNoaXAtPmlycV9iYXNlICAgID0gLTE7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgc3gxNTB4X3JlbW92ZV9pcnFfY2hpcChzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXApCit7CisJdW5zaWduZWQgbjsKKwl1bnNpZ25lZCBpcnE7CisKKwlmcmVlX2lycShjaGlwLT5pcnFfc3VtbWFyeSwgY2hpcCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgY2hpcC0+ZGV2X2NmZy0+bmdwaW9zOyArK24pIHsKKwkJaXJxID0gY2hpcC0+aXJxX2Jhc2UgKyBuOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBOVUxMKTsKKwkJc2V0X2lycV9jaGlwKGlycSwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzeDE1MHhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RhdGljIGNvbnN0IHUzMiBpMmNfZnVuY3MgPSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBOworCXN0cnVjdCBzeDE1MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOworCWludCByYzsKKworCXBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBpMmNfZnVuY3MpKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3gxNTB4X2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRU5PTUVNOworCisJc3gxNTB4X2luaXRfY2hpcChjaGlwLCBjbGllbnQsIGlkLT5kcml2ZXJfZGF0YSwgcGRhdGEpOworCXJjID0gc3gxNTB4X2luaXRfaHcoY2hpcCwgcGRhdGEpOworCWlmIChyYyA8IDApCisJCWdvdG8gcHJvYmVfZmFpbF9wcmVfZ3Bpb2NoaXBfYWRkOworCisJcmMgPSBncGlvY2hpcF9hZGQoJmNoaXAtPmdwaW9fY2hpcCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBwcm9iZV9mYWlsX3ByZV9ncGlvY2hpcF9hZGQ7CisKKwlpZiAocGRhdGEtPmlycV9zdW1tYXJ5ID49IDApIHsKKwkJcmMgPSBzeDE1MHhfaW5zdGFsbF9pcnFfY2hpcChjaGlwLAorCQkJCQlwZGF0YS0+aXJxX3N1bW1hcnksCisJCQkJCXBkYXRhLT5pcnFfYmFzZSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIHByb2JlX2ZhaWxfcG9zdF9ncGlvY2hpcF9hZGQ7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CisKKwlyZXR1cm4gMDsKK3Byb2JlX2ZhaWxfcG9zdF9ncGlvY2hpcF9hZGQ6CisJV0FSTl9PTihncGlvY2hpcF9yZW1vdmUoJmNoaXAtPmdwaW9fY2hpcCkgPCAwKTsKK3Byb2JlX2ZhaWxfcHJlX2dwaW9jaGlwX2FkZDoKKwlrZnJlZShjaGlwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHN4MTUweF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc3gxNTB4X2NoaXAgKmNoaXA7CisJaW50IHJjOworCisJY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXJjID0gZ3Bpb2NoaXBfcmVtb3ZlKCZjaGlwLT5ncGlvX2NoaXApOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChjaGlwLT5pcnFfc3VtbWFyeSA+PSAwKQorCQlzeDE1MHhfcmVtb3ZlX2lycV9jaGlwKGNoaXApOworCisJa2ZyZWUoY2hpcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHN4MTUweF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3gxNTB4IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUKKwl9LAorCS5wcm9iZSAgICA9IHN4MTUweF9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChzeDE1MHhfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBzeDE1MHhfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzeDE1MHhfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmc3gxNTB4X2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwoc3gxNTB4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc3gxNTB4X2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2RlbF9kcml2ZXIoJnN4MTUweF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3gxNTB4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHcmVnb3J5IEJlYW4gPGdiZWFuQGNvZGVhdXJvcmEub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNlbXRlY2ggU1gxNTBYIEkyQyBHUElPIEV4cGFuZGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJpMmM6c3gxNTB4Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKaW5kZXggMTFmZTljOC4uYjllNGRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwpAQCAtODMxLDE3ICs4MzEsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZSk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2xvd193b3JrX29wcyBvdXRwdXRfcG9sbF9vcHM7Ci0KICNkZWZpbmUgRFJNX09VVFBVVF9QT0xMX1BFUklPRCAoMTAqSFopCi1zdGF0aWMgdm9pZCBvdXRwdXRfcG9sbF9leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCitzdGF0aWMgdm9pZCBvdXRwdXRfcG9sbF9leGVjdXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmsgKmRlbGF5ZWRfd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF9zbG93X3dvcmssIHdvcmspOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgZHJtX2RldmljZSwgbW9kZV9jb25maWcub3V0cHV0X3BvbGxfc2xvd193b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheWVkX3dvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBkcm1fZGV2aWNlLCBtb2RlX2NvbmZpZy5vdXRwdXRfcG9sbF93b3JrKTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgb2xkX3N0YXR1cywgc3RhdHVzOwogCWJvb2wgcmVwb2xsID0gZmFsc2UsIGNoYW5nZWQgPSBmYWxzZTsKLQlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CkBAIC04NzYsMTggKzg3MywxNSBAQAogCQkJZGV2LT5tb2RlX2NvbmZpZy5mdW5jcy0+b3V0cHV0X3BvbGxfY2hhbmdlZChkZXYpOwogCX0KIAotCWlmIChyZXBvbGwpIHsKLQkJcmV0ID0gZGVsYXllZF9zbG93X3dvcmtfZW5xdWV1ZShkZWxheWVkX3dvcmssIERSTV9PVVRQVVRfUE9MTF9QRVJJT0QpOwotCQlpZiAocmV0KQotCQkJRFJNX0VSUk9SKCJkZWxheWVkIGVucXVldWUgZmFpbGVkICVkXG4iLCByZXQpOwotCX0KKwlpZiAocmVwb2xsKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX25ydF93cSwgZGVsYXllZF93b3JrLCBEUk1fT1VUUFVUX1BPTExfUEVSSU9EKTsKIH0KIAogdm9pZCBkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAoIWRldi0+bW9kZV9jb25maWcucG9sbF9lbmFibGVkKQogCQlyZXR1cm47Ci0JZGVsYXllZF9zbG93X3dvcmtfY2FuY2VsKCZkZXYtPm1vZGVfY29uZmlnLm91dHB1dF9wb2xsX3Nsb3dfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPm1vZGVfY29uZmlnLm91dHB1dF9wb2xsX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUpOwogCkBAIC04OTUsMjYgKzg4OSwyMCBAQAogewogCWJvb2wgcG9sbCA9IGZhbHNlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0JaW50IHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgewogCQlpZiAoY29ubmVjdG9yLT5wb2xsZWQpCiAJCQlwb2xsID0gdHJ1ZTsKIAl9CiAKLQlpZiAocG9sbCkgewotCQlyZXQgPSBkZWxheWVkX3Nsb3dfd29ya19lbnF1ZXVlKCZkZXYtPm1vZGVfY29uZmlnLm91dHB1dF9wb2xsX3Nsb3dfd29yaywgRFJNX09VVFBVVF9QT0xMX1BFUklPRCk7Ci0JCWlmIChyZXQpCi0JCQlEUk1fRVJST1IoImRlbGF5ZWQgZW5xdWV1ZSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JfQorCWlmIChwb2xsKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX25ydF93cSwgJmRldi0+bW9kZV9jb25maWcub3V0cHV0X3BvbGxfd29yaywgRFJNX09VVFBVVF9QT0xMX1BFUklPRCk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKTsKIAogdm9pZCBkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKLQlzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7Ci0JZGVsYXllZF9zbG93X3dvcmtfaW5pdCgmZGV2LT5tb2RlX2NvbmZpZy5vdXRwdXRfcG9sbF9zbG93X3dvcmssCi0JCQkgICAgICAgJm91dHB1dF9wb2xsX29wcyk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+bW9kZV9jb25maWcub3V0cHV0X3BvbGxfd29yaywgb3V0cHV0X3BvbGxfZXhlY3V0ZSk7CiAJZGV2LT5tb2RlX2NvbmZpZy5wb2xsX2VuYWJsZWQgPSB0cnVlOwogCiAJZHJtX2ttc19oZWxwZXJfcG9sbF9lbmFibGUoZGV2KTsKQEAgLTkyNCw3ICs5MTIsNiBAQAogdm9pZCBkcm1fa21zX2hlbHBlcl9wb2xsX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2Rpc2FibGUoZGV2KTsKLQlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKFRISVNfTU9EVUxFKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKTsKIApAQCAtOTMyLDEyICs5MTksOCBAQAogewogCWlmICghZGV2LT5tb2RlX2NvbmZpZy5wb2xsX2VuYWJsZWQpCiAJCXJldHVybjsKLQlkZWxheWVkX3Nsb3dfd29ya19jYW5jZWwoJmRldi0+bW9kZV9jb25maWcub3V0cHV0X3BvbGxfc2xvd193b3JrKTsKLQkvKiBzY2hlZHVsZSBhIHNsb3cgd29yayBhc2FwICovCi0JZGVsYXllZF9zbG93X3dvcmtfZW5xdWV1ZSgmZGV2LT5tb2RlX2NvbmZpZy5vdXRwdXRfcG9sbF9zbG93X3dvcmssIDApOworCS8qIGtpbGwgdGltZXIgYW5kIHNjaGVkdWxlIGltbWVkaWF0ZSBleGVjdXRpb24sIHRoaXMgZG9lc24ndCBibG9jayAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRldi0+bW9kZV9jb25maWcub3V0cHV0X3BvbGxfd29yayk7CisJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9ucnRfd3EsICZkZXYtPm1vZGVfY29uZmlnLm91dHB1dF9wb2xsX3dvcmssIDApOwogfQogRVhQT1JUX1NZTUJPTChkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQpOwotCi1zdGF0aWMgc3RydWN0IHNsb3dfd29ya19vcHMgb3V0cHV0X3BvbGxfb3BzID0gewotCS5leGVjdXRlID0gb3V0cHV0X3BvbGxfZXhlY3V0ZSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA1NGFjZDhiLi5hNzk1MjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAJc3RyY3B5KGluZm8tPmZpeC5pZCwgImludGVsZHJtZmIiKTsKIAotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CisJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUOwogCWluZm8tPmZib3BzID0gJmludGVsZmJfb3BzOwogCiAJLyogc2V0dXAgYXBlcnR1cmUgYmFzZS9zaXplIGZvciB2ZXNhZmIgdGFrZW92ZXIgKi8KQEAgLTE0OCw4ICsxNDgsNiBAQAogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsgb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAJaW5mby0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKIAotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7Ci0KIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfd2MoZGV2LT5hZ3AtPmJhc2UgKyBvYmpfcHJpdi0+Z3R0X29mZnNldCwKIAkJCQkgICAgICAgc2l6ZSk7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDJmYjI0NDQuLjA5OWY2MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKQEAgLTI1MCw2ICsyNTAsNyBAQAogCQlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfAogCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfAogCQkJICAgICAgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUOworCWluZm8tPmZsYWdzIHw9IEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUOwogCWluZm8tPmZib3BzID0gJm5vdXZlYXVfZmJjb25fb3BzOwogCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlICsgbnZiby0+Ym8ub2Zmc2V0IC0KIAkJCSAgICAgICBkZXZfcHJpdi0+dm1fdnJhbV9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKaW5kZXggZGMxNjM0Yi4uZGJmODY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAogCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoLCBmYi0+ZGVwdGgpOwogCi0JaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0NBTl9GT1JDRV9PVVRQVVQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwogCiAJdG1wID0gcmFkZW9uX2JvX2dwdV9vZmZzZXQocmJvKSAtIHJkZXYtPm1jLnZyYW1fc3RhcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCmluZGV4IDgwN2RjZDEuLjcyNGY0NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsIDApOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9NSURETEUsIDApOwogCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ESVNUQU5DRSwKLQkJCQkJCWlucHV0LT5hYnNtYXhbQUJTX0RJU1RBTkNFXSk7CisJCQkJCWlucHV0X2Fic19nZXRfbWF4KGlucHV0LCBBQlNfRElTVEFOQ0UpKTsKIAkJCX0gZWxzZSB7CiAJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fU1RZTFVTLCAwKTsKQEAgLTM4MywzOCArMzgzLDM3IEBACiAKIAkvKiBCYXNpY3MgKi8KIAlpbnB1dC0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKSB8IEJJVChFVl9SRUwpOwotCWlucHV0LT5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfAotCQlCSVQoQUJTX1BSRVNTVVJFKSB8IEJJVChBQlNfRElTVEFOQ0UpOwotCWlucHV0LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7Ci0Jc2V0X2JpdChCVE5fVE9PTF9QRU4sIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9TVFlMVVMsIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoQlROX1NUWUxVUzIsIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoQlROX0xFRlQsIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoQlROX1JJR0hULCBpbnB1dC0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9NSURETEUsIGlucHV0LT5rZXliaXQpOworCisJX19zZXRfYml0KFJFTF9XSEVFTCwgaW5wdXQtPnJlbGJpdCk7CisKKwlfX3NldF9iaXQoQlROX1RPT0xfUEVOLCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX1NUWUxVUywgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9TVFlMVVMyLCBpbnB1dC0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX0xFRlQsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fUklHSFQsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fTUlERExFLCBpbnB1dC0+a2V5Yml0KTsKIAogCS8qIFBhZCAqLwogCWlucHV0LT5ldmJpdFswXSB8PSBCSVQoRVZfTVNDKTsKLQlpbnB1dC0+bXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKLQlzZXRfYml0KEJUTl8wLCBpbnB1dC0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl8xLCBpbnB1dC0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgaW5wdXQtPmtleWJpdCk7CisKKwlfX3NldF9iaXQoTVNDX1NFUklBTCwgaW5wdXQtPm1zY2JpdCk7CisKKwlfX3NldF9iaXQoQlROXzAsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fMSwgaW5wdXQtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgaW5wdXQtPmtleWJpdCk7CiAKIAkvKiBEaXN0YW5jZSwgcnViYmVyIGFuZCBtb3VzZSAqLwotCWlucHV0LT5hYnNiaXRbMF0gfD0gQklUKEFCU19ESVNUQU5DRSk7Ci0Jc2V0X2JpdChCVE5fVE9PTF9SVUJCRVIsIGlucHV0LT5rZXliaXQpOwotCXNldF9iaXQoQlROX1RPT0xfTU9VU0UsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fVE9PTF9SVUJCRVIsIGlucHV0LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fVE9PTF9NT1VTRSwgaW5wdXQtPmtleWJpdCk7CiAKLQlpbnB1dC0+YWJzbWF4W0FCU19QUkVTU1VSRV0gPSA1MTE7Ci0JaW5wdXQtPmFic21heFtBQlNfRElTVEFOQ0VdID0gMzI7Ci0KLQlpbnB1dC0+YWJzbWF4W0FCU19YXSA9IDE2NzA0OwotCWlucHV0LT5hYnNtYXhbQUJTX1ldID0gMTIwNjQ7Ci0JaW5wdXQtPmFic2Z1enpbQUJTX1hdID0gNDsKLQlpbnB1dC0+YWJzZnV6eltBQlNfWV0gPSA0OworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWCwgMCwgMTY3MDQsIDQsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfWSwgMCwgMTIwNjQsIDQsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfUFJFU1NVUkUsIDAsIDUxMSwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19ESVNUQU5DRSwgMCwgMzIsIDAsIDApOwogCiAJcmV0dXJuIDA7CisKIGVycl9mcmVlOgogCWtmcmVlKHdkYXRhKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGM1N2U1MzAuLmYzYWRmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTMzMiwxMSArMzMyLDExIEBACiAJICB3aWxsIGJlIGNhbGxlZCBmNzE4MDVmLgogCiBjb25maWcgU0VOU09SU19GNzE4ODJGRwotCXRyaXN0YXRlICJGaW50ZWsgRjcxODU4RkcsIEY3MTg2MkZHLCBGNzE4ODJGRywgRjcxODg5RkcgYW5kIEY4MDAwIgorCXRyaXN0YXRlICJGaW50ZWsgRjcxODA4RSwgRjcxODU4RkcsIEY3MTg2MkZHLCBGNzE4ODJGRywgRjcxODg5RkcgYW5kIEY4MDAwIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKLQkgIGZlYXR1cmVzIG9mIHRoZSBGaW50ZWsgRjcxODU4RkcsIEY3MTg2MkZHLzcxODYzRkcsIEY3MTg4MkZHL0Y3MTg4M0ZHLAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcgZmVhdHVyZXMKKwkgIG9mIHRoZSBGaW50ZWsgRjcxODA4RSwgRjcxODU4RkcsIEY3MTg2MkZHLzcxODYzRkcsIEY3MTg4MkZHL0Y3MTg4M0ZHLAogCSAgRjcxODg5RkcgYW5kIEY4MDAwIFN1cGVyLUkvTyBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQpAQCAtNDA1LDcgKzQwNSwxNCBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgdGVtcGVyYXR1cmUKIAkgIHNlbnNvciBpbnNpZGUgeW91ciBDUFUuIE1vc3Qgb2YgdGhlIGZhbWlseSA2IENQVXMKLQkgIGFyZSBzdXBwb3J0ZWQuIENoZWNrIGRvY3VtZW50YXRpb24vZHJpdmVyIGZvciBkZXRhaWxzLgorCSAgYXJlIHN1cHBvcnRlZC4gQ2hlY2sgRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcCBmb3IgZGV0YWlscy4KKworY29uZmlnIFNFTlNPUlNfUEtHVEVNUAorCXRyaXN0YXRlICJJbnRlbCBwcm9jZXNzb3IgcGFja2FnZSB0ZW1wZXJhdHVyZSBzZW5zb3IiCisJZGVwZW5kcyBvbiBYODYgJiYgUENJICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgcGFja2FnZSBsZXZlbCB0ZW1wZXJhdHVyZQorCSAgc2Vuc29yIGluc2lkZSB5b3VyIENQVS4gQ2hlY2sgZG9jdW1lbnRhdGlvbi9kcml2ZXIgZm9yIGRldGFpbHMuCiAKIGNvbmZpZyBTRU5TT1JTX0lCTUFFTQogCXRyaXN0YXRlICJJQk0gQWN0aXZlIEVuZXJneSBNYW5hZ2VyIHRlbXBlcmF0dXJlL3Bvd2VyIHNlbnNvcnMgYW5kIGNvbnRyb2wiCkBAIC00NTYsNiArNDYzLDE3IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGp6NDc0MC1od21vbi4KIAorY29uZmlnIFNFTlNPUlNfSkM0MgorCXRyaXN0YXRlICJKRURFQyBKQzQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMiCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEplZGVjIEpDNDIuNCBjb21wbGlhbnQKKwkgIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFN1cHBvcnQgd2lsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQgdG8sCisJICBBRFQ3NDA4LCBDQVQzNFRTMDIsLCBDQVQ2MDk1LCBNQVg2NjA0LCBNQ1A5ODA1LCBNQ1A5ODI0MiwgTUNQOTgyNDMsCisJICBNQ1A5ODQzLCBTRTk3LCBTRTk4LCBTVFRTNDI0LCBUU0UyMDAyQjMsIGFuZCBUUzMwMDBCMy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgamM0Mi4KKwogY29uZmlnIFNFTlNPUlNfTE02MwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNjMgYW5kIExNNjQiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTc0OSw2ICs3NjcsMjEgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNpczU1OTUuCiAKK2NvbmZpZyBTRU5TT1JTX1NNTTY2NQorCXRyaXN0YXRlICJTdW1taXQgTWljcm9lbGVjdHJvbmljcyBTTU02NjUiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBtb25pdG9yaW5nCisJICBmZWF0dXJlcyBvZiB0aGUgU3VtbWl0IE1pY3JvZWxlY3Ryb25pY3MgU01NNjY1L1NNTTY2NUIgU2l4LUNoYW5uZWwKKwkgIEFjdGl2ZSBEQyBPdXRwdXQgQ29udHJvbGxlciAvIE1vbml0b3IuCisKKwkgIE90aGVyIHN1cHBvcnRlZCBjaGlwcyBhcmUgU01NNDY1LCBTTU02NjVDLCBTTU03NjQsIGFuZCBTTU03NjYuCisJICBTdXBwb3J0IGZvciB0aG9zZSBjaGlwcyBpcyB1bnRlc3RlZC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBzbW02NjUuCisKIGNvbmZpZyBTRU5TT1JTX0RNRTE3MzcKIAl0cmlzdGF0ZSAiU01TQyBETUUxNzM3LCBTQ0gzMTF4IGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGM1MDU3NzQuLjEzZDkxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtMzksNiArMzksNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVNDNzYyMSkJKz0gYXNjNzYyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BVFhQMSkJKz0gYXR4cDEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQ09SRVRFTVApCSs9IGNvcmV0ZW1wLm8KK29iai0kKENPTkZJR19TRU5TT1JTX1BLR1RFTVApCSs9IHBrZ3RlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRE1FMTczNykJKz0gZG1lMTczNy5vCiBvYmotJChDT05GSUdfU0VOU09SU19EUzE2MjEpCSs9IGRzMTYyMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19FTUMxNDAzKQkrPSBlbWMxNDAzLm8KQEAgLTU1LDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTUFFTSkJKz0gaWJtYWVtLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lCTVBFWCkJKz0gaWJtcGV4Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0lUODcpCSs9IGl0ODcubworb2JqLSQoQ09ORklHX1NFTlNPUlNfSkM0MikJKz0gamM0Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19KWjQ3NDApCSs9IGp6NDc0MC1od21vbi5vCiBvYmotJChDT05GSUdfU0VOU09SU19LOFRFTVApCSs9IGs4dGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19LMTBURU1QKQkrPSBrMTB0ZW1wLm8KQEAgLTg3LDYgKzg5LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX1MzQykJKz0gczNjLWh3bW9uLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NIVDE1KQkrPSBzaHQxNS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TSVM1NTk1KQkrPSBzaXM1NTk1Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX1NNTTY2NSkJKz0gc21tNjY1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcpKz0gc21zYzQ3YjM5Ny5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdNMSkJKz0gc21zYzQ3bTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MikrPSBzbXNjNDdtMTkyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCAwNTM0NGFmLi5jMDcwYzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC00ODAsNyArNDgwLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCBjb3JldGVtcF9kZXZpY2VfcmVtb3ZlKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOwpAQCAtNTE1LDcgKzUxNCw2IEBACiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNvcmV0ZW1wX2NwdV9ub3RpZmllciBfX3JlZmRhdGEgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjb3JldGVtcF9jcHVfY2FsbGJhY2ssCiB9OwotI2VuZGlmCQkJCS8qICFDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIGludCBfX2luaXQgY29yZXRlbXBfaW5pdCh2b2lkKQogewpAQCAtNTM3LDEyICs1MzUsOSBAQAogCQkgKiBzZW5zb3JzLiBXZSBjaGVjayB0aGlzIGJpdCBvbmx5LCBhbGwgdGhlIGVhcmx5IENQVXMKIAkJICogd2l0aG91dCB0aGVybWFsIHNlbnNvcnMgd2lsbCBiZSBmaWx0ZXJlZCBvdXQuCiAJCSAqLwotCQlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gNiAmJiAoY3B1aWRfZWF4KDB4MDYpICYgMHgwMSkpIHsKLQkJCWVyciA9IGNvcmV0ZW1wX2RldmljZV9hZGQoaSk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXhpdF9kZXZpY2VzX3VucmVnOwotCi0JCX0gZWxzZSB7CisJCWlmIChjLT5jcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lYXgoMHgwNikgJiAweDAxKSkKKwkJCWNvcmV0ZW1wX2RldmljZV9hZGQoaSk7CisJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZOQU1FICI6IENQVSAobW9kZWw9MHgleCkiCiAJCQkJIiBoYXMgbm8gdGhlcm1hbCBzZW5zb3IuXG4iLCBjLT54ODZfbW9kZWwpOwogCQl9CkBAIC01NTIsMjEgKzU0NywxMyBAQAogCQlnb3RvIGV4aXRfZHJpdmVyX3VucmVnOwogCX0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY29yZXRlbXBfY3B1X25vdGlmaWVyKTsKLSNlbmRpZgogCXJldHVybiAwOwogCi1leGl0X2RldmljZXNfdW5yZWc6Ci0JbXV0ZXhfbG9jaygmcGRldl9saXN0X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnBkZXZfbGlzdCwgbGlzdCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwLT5wZGV2KTsKLQkJbGlzdF9kZWwoJnAtPmxpc3QpOwotCQlrZnJlZShwKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOwogZXhpdF9kcml2ZXJfdW5yZWc6CisjaWZuZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JldGVtcF9kcml2ZXIpOworI2VuZGlmCiBleGl0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Y3MTg4MmZnLmMgYi9kcml2ZXJzL2h3bW9uL2Y3MTg4MmZnLmMKaW5kZXggNTM3ODQxZS4uNjIwNzEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mNzE4ODJmZy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZjcxODgyZmcuYwpAQCAtNDUsNiArNDUsNyBAQAogI2RlZmluZSBTSU9fUkVHX0FERFIJCTB4NjAJLyogTG9naWNhbCBkZXZpY2UgYWRkcmVzcyAoMiBieXRlcykgKi8KIAogI2RlZmluZSBTSU9fRklOVEVLX0lECQkweDE5MzQJLyogTWFudWZhY3R1cmVycyBJRCAqLworI2RlZmluZSBTSU9fRjcxODA4X0lECQkweDA5MDEgIC8qIENoaXBzZXQgSUQgKi8KICNkZWZpbmUgU0lPX0Y3MTg1OF9JRAkJMHgwNTA3ICAvKiBDaGlwc2V0IElEICovCiAjZGVmaW5lIFNJT19GNzE4NjJfSUQJCTB4MDYwMQkvKiBDaGlwc2V0IElEICovCiAjZGVmaW5lIFNJT19GNzE4ODJfSUQJCTB4MDU0MQkvKiBDaGlwc2V0IElEICovCkBAIC05Niw5ICs5NywxMCBAQAogbW9kdWxlX3BhcmFtKGZvcmNlX2lkLCB1c2hvcnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9pZCwgIk92ZXJyaWRlIHRoZSBkZXRlY3RlZCBkZXZpY2UgSUQiKTsKIAotZW51bSBjaGlwcyB7IGY3MTg1OGZnLCBmNzE4NjJmZywgZjcxODgyZmcsIGY3MTg4OWZnLCBmODAwMCB9OworZW51bSBjaGlwcyB7IGY3MTgwOGZnLCBmNzE4NThmZywgZjcxODYyZmcsIGY3MTg4MmZnLCBmNzE4ODlmZywgZjgwMDAgfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmY3MTg4MmZnX25hbWVzW10gPSB7CisJImY3MTgwOGZnIiwKIAkiZjcxODU4ZmciLAogCSJmNzE4NjJmZyIsCiAJImY3MTg4MmZnIiwKQEAgLTMwNiw4ICszMDgsOCBAQAogCVNFTlNPUl9BVFRSXzIodGVtcDNfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMCwgMiksCiB9OwogCi0vKiBUZW1wIGFuZCBpbiBhdHRyIGNvbW1vbiB0byB0aGUgZjcxODYyZmcsIGY3MTg4MmZnIGFuZCBmNzE4ODlmZyAqLwotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIGZ4eHh4X2luX3RlbXBfYXR0cltdID0geworLyogSW4gYXR0ciBjb21tb24gdG8gdGhlIGY3MTg2MmZnLCBmNzE4ODJmZyBhbmQgZjcxODg5ZmcgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBmeHh4eF9pbl9hdHRyW10gPSB7CiAJU0VOU09SX0FUVFJfMihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDAsIDApLAogCVNFTlNPUl9BVFRSXzIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwLCAxKSwKIAlTRU5TT1JfQVRUUl8yKGluMl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgMiksCkBAIC0zMTcsNiArMzE5LDIyIEBACiAJU0VOU09SX0FUVFJfMihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDAsIDYpLAogCVNFTlNPUl9BVFRSXzIoaW43X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwLCA3KSwKIAlTRU5TT1JfQVRUUl8yKGluOF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgOCksCit9OworCisvKiBJbiBhdHRyIGZvciB0aGUgZjcxODA4ZmcgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBmNzE4MDhfaW5fYXR0cltdID0geworCVNFTlNPUl9BVFRSXzIoaW4wX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwLCAwKSwKKwlTRU5TT1JfQVRUUl8yKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgMSksCisJU0VOU09SX0FUVFJfMihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDAsIDIpLAorCVNFTlNPUl9BVFRSXzIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwLCAzKSwKKwlTRU5TT1JfQVRUUl8yKGluNF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgNCksCisJU0VOU09SX0FUVFJfMihpbjVfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDAsIDUpLAorCVNFTlNPUl9BVFRSXzIoaW42X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwLCA3KSwKKwlTRU5TT1JfQVRUUl8yKGluN19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMCwgOCksCit9OworCisvKiBUZW1wIGF0dHIgY29tbW9uIHRvIHRoZSBmNzE4MDhmZywgZjcxODYyZmcsIGY3MTg4MmZnIGFuZCBmNzE4ODlmZyAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIGZ4eHh4X3RlbXBfYXR0cltdID0gewogCVNFTlNPUl9BVFRSXzIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCwgMSksCiAJU0VOU09SX0FUVFJfMih0ZW1wMV9tYXgsIFNfSVJVR098U19JV1VTUiwgc2hvd190ZW1wX21heCwKIAkJc3RvcmVfdGVtcF9tYXgsIDAsIDEpLApAQCAtMzU1LDYgKzM3MywxMCBAQAogCQlzdG9yZV90ZW1wX2JlZXAsIDAsIDYpLAogCVNFTlNPUl9BVFRSXzIodGVtcDJfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDAsIDIpLAogCVNFTlNPUl9BVFRSXzIodGVtcDJfZmF1bHQsIFNfSVJVR08sIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgMCwgMiksCit9OworCisvKiBUZW1wIGFuZCBpbiBhdHRyIGNvbW1vbiB0byB0aGUgZjcxODYyZmcsIGY3MTg4MmZnIGFuZCBmNzE4ODlmZyAqLworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIGY3MTg2Ml90ZW1wX2F0dHJbXSA9IHsKIAlTRU5TT1JfQVRUUl8yKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDAsIDMpLAogCVNFTlNPUl9BVFRSXzIodGVtcDNfbWF4LCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfdGVtcF9tYXgsCiAJCXN0b3JlX3RlbXBfbWF4LCAwLCAzKSwKQEAgLTk4OSw2ICsxMDExLDExIEBACiAJCQkJZGF0YS0+dGVtcF90eXBlWzFdID0gNjsKIAkJCQlicmVhazsKIAkJCX0KKwkJfSBlbHNlIGlmIChkYXRhLT50eXBlID09IGY3MTgwOGZnKSB7CisJCQlyZWcgID0gZjcxODgyZmdfcmVhZDgoZGF0YSwgRjcxODgyRkdfUkVHX1RFTVBfVFlQRSk7CisJCQlkYXRhLT50ZW1wX3R5cGVbMV0gPSAocmVnICYgMHgwMikgPyAyIDogNDsKKwkJCWRhdGEtPnRlbXBfdHlwZVsyXSA9IChyZWcgJiAweDA0KSA/IDIgOiA0OworCiAJCX0gZWxzZSB7CiAJCQlyZWcyID0gZjcxODgyZmdfcmVhZDgoZGF0YSwgRjcxODgyRkdfUkVHX1BFQ0kpOwogCQkJaWYgKChyZWcyICYgMHgwMykgPT0gMHgwMSkKQEAgLTE4NzEsNyArMTg5OCw4IEBACiAKIAl2YWwgLz0gMTAwMDsKIAotCWlmIChkYXRhLT50eXBlID09IGY3MTg4OWZnKQorCWlmIChkYXRhLT50eXBlID09IGY3MTg4OWZnCisJIHx8IGRhdGEtPnR5cGUgPT0gZjcxODA4ZmcpCiAJCXZhbCA9IFNFTlNPUlNfTElNSVQodmFsLCAtMTI4LCAxMjcpOwogCWVsc2UKIAkJdmFsID0gU0VOU09SU19MSU1JVCh2YWwsIDAsIDEyNyk7CkBAIC0xOTc0LDggKzIwMDIsMjggQEAKIAkJCS8qIGZhbGwgdGhyb3VnaCEgKi8KIAkJY2FzZSBmNzE4NjJmZzoKIAkJCWVyciA9IGY3MTg4MmZnX2NyZWF0ZV9zeXNmc19maWxlcyhwZGV2LAotCQkJCQlmeHh4eF9pbl90ZW1wX2F0dHIsCi0JCQkJCUFSUkFZX1NJWkUoZnh4eHhfaW5fdGVtcF9hdHRyKSk7CisJCQkJCWY3MTg2Ml90ZW1wX2F0dHIsCisJCQkJCUFSUkFZX1NJWkUoZjcxODYyX3RlbXBfYXR0cikpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGV4aXRfdW5yZWdpc3Rlcl9zeXNmczsKKwkJCWVyciA9IGY3MTg4MmZnX2NyZWF0ZV9zeXNmc19maWxlcyhwZGV2LAorCQkJCQlmeHh4eF9pbl9hdHRyLAorCQkJCQlBUlJBWV9TSVpFKGZ4eHh4X2luX2F0dHIpKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3VucmVnaXN0ZXJfc3lzZnM7CisJCQllcnIgPSBmNzE4ODJmZ19jcmVhdGVfc3lzZnNfZmlsZXMocGRldiwKKwkJCQkJZnh4eHhfdGVtcF9hdHRyLAorCQkJCQlBUlJBWV9TSVpFKGZ4eHh4X3RlbXBfYXR0cikpOworCQkJYnJlYWs7CisJCWNhc2UgZjcxODA4Zmc6CisJCQllcnIgPSBmNzE4ODJmZ19jcmVhdGVfc3lzZnNfZmlsZXMocGRldiwKKwkJCQkJZjcxODA4X2luX2F0dHIsCisJCQkJCUFSUkFZX1NJWkUoZjcxODA4X2luX2F0dHIpKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3VucmVnaXN0ZXJfc3lzZnM7CisJCQllcnIgPSBmNzE4ODJmZ19jcmVhdGVfc3lzZnNfZmlsZXMocGRldiwKKwkJCQkJZnh4eHhfdGVtcF9hdHRyLAorCQkJCQlBUlJBWV9TSVpFKGZ4eHh4X3RlbXBfYXR0cikpOwogCQkJYnJlYWs7CiAJCWNhc2UgZjgwMDA6CiAJCQllcnIgPSBmNzE4ODJmZ19jcmVhdGVfc3lzZnNfZmlsZXMocGRldiwKQEAgLTIwMDIsNiArMjA1MCw3IEBACiAJCWNhc2UgZjcxODYyZmc6CiAJCQllcnIgPSAoZGF0YS0+cHdtX2VuYWJsZSAmIDB4MTUpICE9IDB4MTU7CiAJCQlicmVhazsKKwkJY2FzZSBmNzE4MDhmZzoKIAkJY2FzZSBmNzE4ODJmZzoKIAkJY2FzZSBmNzE4ODlmZzoKIAkJCWVyciA9IDA7CkBAIC0yMDQ3LDYgKzIwOTYsNyBAQAogCQkJCQlmODAwMF9hdXRvX3B3bV9hdHRyLAogCQkJCQlBUlJBWV9TSVpFKGY4MDAwX2F1dG9fcHdtX2F0dHIpKTsKIAkJCWJyZWFrOworCQljYXNlIGY3MTgwOGZnOgogCQljYXNlIGY3MTg4OWZnOgogCQkJZm9yIChpID0gMDsgaSA8IG5yX2ZhbnM7IGkrKykgewogCQkJCWRhdGEtPnB3bV9hdXRvX3BvaW50X21hcHBpbmdbaV0gPQpAQCAtMjEyNiw4ICsyMTc2LDIyIEBACiAJCQkvKiBmYWxsIHRocm91Z2ghICovCiAJCWNhc2UgZjcxODYyZmc6CiAJCQlmNzE4ODJmZ19yZW1vdmVfc3lzZnNfZmlsZXMocGRldiwKLQkJCQkJZnh4eHhfaW5fdGVtcF9hdHRyLAotCQkJCQlBUlJBWV9TSVpFKGZ4eHh4X2luX3RlbXBfYXR0cikpOworCQkJCQlmNzE4NjJfdGVtcF9hdHRyLAorCQkJCQlBUlJBWV9TSVpFKGY3MTg2Ml90ZW1wX2F0dHIpKTsKKwkJCWY3MTg4MmZnX3JlbW92ZV9zeXNmc19maWxlcyhwZGV2LAorCQkJCQlmeHh4eF9pbl9hdHRyLAorCQkJCQlBUlJBWV9TSVpFKGZ4eHh4X2luX2F0dHIpKTsKKwkJCWY3MTg4MmZnX3JlbW92ZV9zeXNmc19maWxlcyhwZGV2LAorCQkJCQlmeHh4eF90ZW1wX2F0dHIsCisJCQkJCUFSUkFZX1NJWkUoZnh4eHhfdGVtcF9hdHRyKSk7CisJCQlicmVhazsKKwkJY2FzZSBmNzE4MDhmZzoKKwkJCWY3MTg4MmZnX3JlbW92ZV9zeXNmc19maWxlcyhwZGV2LAorCQkJCQlmNzE4MDhfaW5fYXR0ciwKKwkJCQkJQVJSQVlfU0laRShmNzE4MDhfaW5fYXR0cikpOworCQkJZjcxODgyZmdfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBkZXYsCisJCQkJCWZ4eHh4X3RlbXBfYXR0ciwKKwkJCQkJQVJSQVlfU0laRShmeHh4eF90ZW1wX2F0dHIpKTsKIAkJCWJyZWFrOwogCQljYXNlIGY4MDAwOgogCQkJZjcxODgyZmdfcmVtb3ZlX3N5c2ZzX2ZpbGVzKHBkZXYsCkBAIC0yMTk1LDYgKzIyNTksOSBAQAogCiAJZGV2aWQgPSBmb3JjZV9pZCA/IGZvcmNlX2lkIDogc3VwZXJpb19pbncoc2lvYWRkciwgU0lPX1JFR19ERVZJRCk7CiAJc3dpdGNoIChkZXZpZCkgeworCWNhc2UgU0lPX0Y3MTgwOF9JRDoKKwkJc2lvX2RhdGEtPnR5cGUgPSBmNzE4MDhmZzsKKwkJYnJlYWs7CiAJY2FzZSBTSU9fRjcxODU4X0lEOgogCQlzaW9fZGF0YS0+dHlwZSA9IGY3MTg1OGZnOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCBiZTJkMTMxLi5iZmQ0MmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC01MjIsNiArNTIyLDcgQEAKIAlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQycCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MiIpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBUNDMiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgVDQwMCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MXAiLCBIREFQU19CT1RIX0FYRVMpLAogCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjEiLCBIREFQU19CT1RIX0FYRVMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9qYzQyLmMgYi9kcml2ZXJzL2h3bW9uL2pjNDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDBmYzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9qYzQyLmMKQEAgLTAsMCArMSw1OTMgQEAKKy8qCisgKiBqYzQyLmMgLSBkcml2ZXIgZm9yIEplZGVjIEpDNDIuNCBjb21wbGlhbnQgdGVtcGVyYXR1cmUgc2Vuc29ycworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCAgRXJpY3Nzb24gQUIuCisgKgorICogRGVyaXZlZCBmcm9tIGxtNzcuYyBieSBBbmRyYXMgQkFMSSA8ZHJld2llQGZyZWVtYWlsLmh1Pi4KKyAqCisgKiBKQzQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMgYXJlIHR5cGljYWxseSB1c2VkIG9uIG1lbW9yeSBtb2R1bGVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgSTJDX0NMSUVOVF9FTkQgfTsKKworLyogSkM0MiByZWdpc3RlcnMuIEFsbCByZWdpc3RlcnMgYXJlIDE2IGJpdC4gKi8KKyNkZWZpbmUgSkM0Ml9SRUdfQ0FQCQkweDAwCisjZGVmaW5lIEpDNDJfUkVHX0NPTkZJRwkJMHgwMQorI2RlZmluZSBKQzQyX1JFR19URU1QX1VQUEVSCTB4MDIKKyNkZWZpbmUgSkM0Ml9SRUdfVEVNUF9MT1dFUgkweDAzCisjZGVmaW5lIEpDNDJfUkVHX1RFTVBfQ1JJVElDQUwJMHgwNAorI2RlZmluZSBKQzQyX1JFR19URU1QCQkweDA1CisjZGVmaW5lIEpDNDJfUkVHX01BTklECQkweDA2CisjZGVmaW5lIEpDNDJfUkVHX0RFVklDRUlECTB4MDcKKworLyogU3RhdHVzIGJpdHMgaW4gdGVtcGVyYXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSkM0Ml9BTEFSTV9DUklUX0JJVAkxNQorI2RlZmluZSBKQzQyX0FMQVJNX01BWF9CSVQJMTQKKyNkZWZpbmUgSkM0Ml9BTEFSTV9NSU5fQklUCTEzCisKKy8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBKQzQyX0NGR19DUklUX09OTFkJKDEgPDwgMikKKyNkZWZpbmUgSkM0Ml9DRkdfU0hVVERPV04JKDEgPDwgOCkKKyNkZWZpbmUgSkM0Ml9DRkdfSFlTVF9TSElGVAk5CisjZGVmaW5lIEpDNDJfQ0ZHX0hZU1RfTUFTSwkweDAzCisKKy8qIENhcGFiaWxpdGllcyAqLworI2RlZmluZSBKQzQyX0NBUF9SQU5HRQkJKDEgPDwgMikKKworLyogTWFudWZhY3R1cmVyIElEcyAqLworI2RlZmluZSBBRFRfTUFOSUQJCTB4MTFkNCAgLyogQW5hbG9nIERldmljZXMgKi8KKyNkZWZpbmUgTUFYX01BTklECQkweDAwNGQgIC8qIE1heGltICovCisjZGVmaW5lIElEVF9NQU5JRAkJMHgwMGIzICAvKiBJRFQgKi8KKyNkZWZpbmUgTUNQX01BTklECQkweDAwNTQgIC8qIE1pY3JvY2hpcCAqLworI2RlZmluZSBOWFBfTUFOSUQJCTB4MTEzMSAgLyogTlhQIFNlbWljb25kdWN0b3JzICovCisjZGVmaW5lIE9OU19NQU5JRAkJMHgxYjA5ICAvKiBPTiBTZW1pY29uZHVjdG9yICovCisjZGVmaW5lIFNUTV9NQU5JRAkJMHgxMDRhICAvKiBTVCBNaWNyb2VsZWN0cm9uaWNzICovCisKKy8qIFN1cHBvcnRlZCBjaGlwcyAqLworCisvKiBBbmFsb2cgRGV2aWNlcyAqLworI2RlZmluZSBBRFQ3NDA4X0RFVklECQkweDA4MDEKKyNkZWZpbmUgQURUNzQwOF9ERVZJRF9NQVNLCTB4ZmZmZgorCisvKiBJRFQgKi8KKyNkZWZpbmUgVFMzMDAwQjNfREVWSUQJCTB4MjkwMyAgLyogQWxzbyBtYXRjaGVzIFRTRTIwMDJCMyAqLworI2RlZmluZSBUUzMwMDBCM19ERVZJRF9NQVNLCTB4ZmZmZgorCisvKiBNYXhpbSAqLworI2RlZmluZSBNQVg2NjA0X0RFVklECQkweDNlMDAKKyNkZWZpbmUgTUFYNjYwNF9ERVZJRF9NQVNLCTB4ZmZmZgorCisvKiBNaWNyb2NoaXAgKi8KKyNkZWZpbmUgTUNQOTgyNDJfREVWSUQJCTB4MjAwMAorI2RlZmluZSBNQ1A5ODI0Ml9ERVZJRF9NQVNLCTB4ZmZmYworCisjZGVmaW5lIE1DUDk4MjQzX0RFVklECQkweDIxMDAKKyNkZWZpbmUgTUNQOTgyNDNfREVWSURfTUFTSwkweGZmZmMKKworI2RlZmluZSBNQ1A5ODQzX0RFVklECQkweDAwMDAJLyogQWxzbyBtYXRjaGVzIG1jcDk4MDUgKi8KKyNkZWZpbmUgTUNQOTg0M19ERVZJRF9NQVNLCTB4ZmZmZQorCisvKiBOWFAgKi8KKyNkZWZpbmUgU0U5N19ERVZJRAkJMHhhMjAwCisjZGVmaW5lIFNFOTdfREVWSURfTUFTSwkJMHhmZmZjCisKKyNkZWZpbmUgU0U5OF9ERVZJRAkJMHhhMTAwCisjZGVmaW5lIFNFOThfREVWSURfTUFTSwkJMHhmZmZjCisKKy8qIE9OIFNlbWljb25kdWN0b3IgKi8KKyNkZWZpbmUgQ0FUNjA5NV9ERVZJRAkJMHgwODAwCS8qIEFsc28gbWF0Y2hlcyBDQVQzNFRTMDIgKi8KKyNkZWZpbmUgQ0FUNjA5NV9ERVZJRF9NQVNLCTB4ZmZlMAorCisvKiBTVCBNaWNyb2VsZWN0cm9uaWNzICovCisjZGVmaW5lIFNUVFM0MjRfREVWSUQJCTB4MDEwMQorI2RlZmluZSBTVFRTNDI0X0RFVklEX01BU0sJMHhmZmZmCisKKyNkZWZpbmUgU1RUUzQyNEVfREVWSUQJCTB4MDAwMAorI2RlZmluZSBTVFRTNDI0RV9ERVZJRF9NQVNLCTB4ZmZmZQorCitzdGF0aWMgdTE2IGpjNDJfaHlzdGVyZXNpc1tdID0geyAwLCAxNTAwLCAzMDAwLCA2MDAwIH07CisKK3N0cnVjdCBqYzQyX2NoaXBzIHsKKwl1MTYgbWFuaWQ7CisJdTE2IGRldmlkOworCXUxNiBkZXZpZF9tYXNrOworfTsKKworc3RhdGljIHN0cnVjdCBqYzQyX2NoaXBzIGpjNDJfY2hpcHNbXSA9IHsKKwl7IEFEVF9NQU5JRCwgQURUNzQwOF9ERVZJRCwgQURUNzQwOF9ERVZJRF9NQVNLIH0sCisJeyBJRFRfTUFOSUQsIFRTMzAwMEIzX0RFVklELCBUUzMwMDBCM19ERVZJRF9NQVNLIH0sCisJeyBNQVhfTUFOSUQsIE1BWDY2MDRfREVWSUQsIE1BWDY2MDRfREVWSURfTUFTSyB9LAorCXsgTUNQX01BTklELCBNQ1A5ODI0Ml9ERVZJRCwgTUNQOTgyNDJfREVWSURfTUFTSyB9LAorCXsgTUNQX01BTklELCBNQ1A5ODI0M19ERVZJRCwgTUNQOTgyNDNfREVWSURfTUFTSyB9LAorCXsgTUNQX01BTklELCBNQ1A5ODQzX0RFVklELCBNQ1A5ODQzX0RFVklEX01BU0sgfSwKKwl7IE5YUF9NQU5JRCwgU0U5N19ERVZJRCwgU0U5N19ERVZJRF9NQVNLIH0sCisJeyBPTlNfTUFOSUQsIENBVDYwOTVfREVWSUQsIENBVDYwOTVfREVWSURfTUFTSyB9LAorCXsgTlhQX01BTklELCBTRTk4X0RFVklELCBTRTk4X0RFVklEX01BU0sgfSwKKwl7IFNUTV9NQU5JRCwgU1RUUzQyNF9ERVZJRCwgU1RUUzQyNF9ERVZJRF9NQVNLIH0sCisJeyBTVE1fTUFOSUQsIFNUVFM0MjRFX0RFVklELCBTVFRTNDI0RV9ERVZJRF9NQVNLIH0sCit9OworCisvKiBFYWNoIGNsaWVudCBoYXMgdGhpcyBhZGRpdGlvbmFsIGRhdGEgKi8KK3N0cnVjdCBqYzQyX2RhdGEgeworCXN0cnVjdCBkZXZpY2UJKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbXV0ZXgJdXBkYXRlX2xvY2s7CS8qIHByb3RlY3QgcmVnaXN0ZXIgYWNjZXNzICovCisJYm9vbAkJZXh0ZW5kZWQ7CS8qIHRydWUgaWYgZXh0ZW5kZWQgcmFuZ2Ugc3VwcG9ydGVkICovCisJYm9vbAkJdmFsaWQ7CisJdW5zaWduZWQgbG9uZwlsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KKwl1MTYJCW9yaWdfY29uZmlnOwkvKiBvcmlnaW5hbCBjb25maWd1cmF0aW9uICovCisJdTE2CQljb25maWc7CQkvKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KKwl1MTYJCXRlbXBfaW5wdXQ7CS8qIFRlbXBlcmF0dXJlcyAqLworCXUxNgkJdGVtcF9jcml0OworCXUxNgkJdGVtcF9taW47CisJdTE2CQl0ZW1wX21heDsKK307CisKK3N0YXRpYyBpbnQgamM0Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOworc3RhdGljIGludCBqYzQyX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOworc3RhdGljIGludCBqYzQyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgamM0Ml9yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZyk7CitzdGF0aWMgaW50IGpjNDJfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpOworCitzdGF0aWMgc3RydWN0IGpjNDJfZGF0YSAqamM0Ml91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBqYzQyX2lkW10gPSB7CisJeyAiYWR0NzQwOCIsIDAgfSwKKwl7ICJjYXQ5NHRzMDIiLCAwIH0sCisJeyAiY2F0NjA5NSIsIDAgfSwKKwl7ICJqYzQyIiwgMCB9LAorCXsgIm1heDY2MDQiLCAwIH0sCisJeyAibWNwOTgwNSIsIDAgfSwKKwl7ICJtY3A5ODI0MiIsIDAgfSwKKwl7ICJtY3A5ODI0MyIsIDAgfSwKKwl7ICJtY3A5ODQzIiwgMCB9LAorCXsgInNlOTciLCAwIH0sCisJeyAic2U5N2IiLCAwIH0sCisJeyAic2U5OCIsIDAgfSwKKwl7ICJzdHRzNDI0IiwgMCB9LAorCXsgInRzZTIwMDJiMyIsIDAgfSwKKwl7ICJ0czMwMDBiMyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgamM0Ml9pZCk7CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBqYzQyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGF0YS0+Y29uZmlnIHw9IEpDNDJfQ0ZHX1NIVVRET1dOOworCWpjNDJfd3JpdGVfdmFsdWUoY2xpZW50LCBKQzQyX1JFR19DT05GSUcsIGRhdGEtPmNvbmZpZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamM0Ml9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGF0YS0+Y29uZmlnICY9IH5KQzQyX0NGR19TSFVURE9XTjsKKwlqYzQyX3dyaXRlX3ZhbHVlKGNsaWVudCwgSkM0Ml9SRUdfQ09ORklHLCBkYXRhLT5jb25maWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgamM0Ml9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kID0gamM0Ml9zdXNwZW5kLAorCS5yZXN1bWUgPSBqYzQyX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgSkM0Ml9ERVZfUE1fT1BTICgmamM0Ml9kZXZfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgSkM0Ml9ERVZfUE1fT1BTIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGpjNDJfZHJpdmVyID0geworCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiamM0MiIsCisJCS5wbSA9IEpDNDJfREVWX1BNX09QUywKKwl9LAorCS5wcm9iZQkJPSBqYzQyX3Byb2JlLAorCS5yZW1vdmUJCT0gamM0Ml9yZW1vdmUsCisJLmlkX3RhYmxlCT0gamM0Ml9pZCwKKwkuZGV0ZWN0CQk9IGpjNDJfZGV0ZWN0LAorCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAorfTsKKworI2RlZmluZSBKQzQyX1RFTVBfTUlOX0VYVEVOREVECSgtNDAwMDApCisjZGVmaW5lIEpDNDJfVEVNUF9NSU4JCTAKKyNkZWZpbmUgSkM0Ml9URU1QX01BWAkJMTI1MDAwCisKK3N0YXRpYyB1MTYgamM0Ml90ZW1wX3RvX3JlZyhpbnQgdGVtcCwgYm9vbCBleHRlbmRlZCkKK3sKKwlpbnQgbnRlbXAgPSBTRU5TT1JTX0xJTUlUKHRlbXAsCisJCQkJICBleHRlbmRlZCA/IEpDNDJfVEVNUF9NSU5fRVhURU5ERUQgOgorCQkJCSAgSkM0Ml9URU1QX01JTiwgSkM0Ml9URU1QX01BWCk7CisKKwkvKiBjb252ZXJ0IGZyb20gMC4wMDEgdG8gMC4wNjI1IHJlc29sdXRpb24gKi8KKwlyZXR1cm4gKG50ZW1wICogMiAvIDEyNSkgJiAweDFmZmY7Cit9CisKK3N0YXRpYyBpbnQgamM0Ml90ZW1wX2Zyb21fcmVnKHMxNiByZWcpCit7CisJcmVnICY9IDB4MWZmZjsKKworCS8qIHNpZ24gZXh0ZW5kIHJlZ2lzdGVyICovCisJaWYgKHJlZyAmIDB4MTAwMCkKKwkJcmVnIHw9IDB4ZjAwMDsKKworCS8qIGNvbnZlcnQgZnJvbSAwLjA2MjUgdG8gMC4wMDEgcmVzb2x1dGlvbiAqLworCXJldHVybiByZWcgKiAxMjUgLyAyOworfQorCisvKiBzeXNmcyBzdHVmZiAqLworCisvKiByZWFkIHJvdXRpbmVzIGZvciB0ZW1wZXJhdHVyZSBsaW1pdHMgKi8KKyNkZWZpbmUgc2hvdyh2YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQkJXAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAorCQkJICAgIGNoYXIgKmJ1ZikJCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGpjNDJfdXBkYXRlX2RldmljZShkZXYpOwkJXAorCWlmIChJU19FUlIoZGF0YSkpCQkJCQkJXAorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgamM0Ml90ZW1wX2Zyb21fcmVnKGRhdGEtPnZhbHVlKSk7CVwKK30KKworc2hvdyh0ZW1wX2lucHV0KTsKK3Nob3codGVtcF9jcml0KTsKK3Nob3codGVtcF9taW4pOworc2hvdyh0ZW1wX21heCk7CisKKy8qIHJlYWQgcm91dGluZXMgZm9yIGh5c3RlcmVzaXMgdmFsdWVzICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfY3JpdF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBqYzQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdGVtcCwgaHlzdDsKKworCWlmIChJU19FUlIoZGF0YSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEpOworCisJdGVtcCA9IGpjNDJfdGVtcF9mcm9tX3JlZyhkYXRhLT50ZW1wX2NyaXQpOworCWh5c3QgPSBqYzQyX2h5c3RlcmVzaXNbKGRhdGEtPmNvbmZpZyA+PiBKQzQyX0NGR19IWVNUX1NISUZUKQorCQkJICAgICAgICYgSkM0Ml9DRkdfSFlTVF9NQVNLXTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCAtIGh5c3QpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4X2h5c3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gamM0Ml91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IHRlbXAsIGh5c3Q7CisKKwlpZiAoSVNfRVJSKGRhdGEpKQorCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKKworCXRlbXAgPSBqYzQyX3RlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcF9tYXgpOworCWh5c3QgPSBqYzQyX2h5c3RlcmVzaXNbKGRhdGEtPmNvbmZpZyA+PiBKQzQyX0NGR19IWVNUX1NISUZUKQorCQkJICAgICAgICYgSkM0Ml9DRkdfSFlTVF9NQVNLXTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCAtIGh5c3QpOworfQorCisvKiB3cml0ZSByb3V0aW5lcyAqLworI2RlZmluZSBzZXQodmFsdWUsIHJlZykJXAorc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCQlcCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJCVwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwkJCVwKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CQlcCisJaW50IGVyciwgcmV0ID0gY291bnQ7CQkJCQkJXAorCWxvbmcgdmFsOwkJCQkJCQlcCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CQkJCQlcCisJZGF0YS0+dmFsdWUgPSBqYzQyX3RlbXBfdG9fcmVnKHZhbCwgZGF0YS0+ZXh0ZW5kZWQpOwkJXAorCWVyciA9IGpjNDJfd3JpdGVfdmFsdWUoY2xpZW50LCByZWcsIGRhdGEtPnZhbHVlKTsJCVwKKwlpZiAoZXJyIDwgMCkJCQkJCQkJXAorCQlyZXQgPSBlcnI7CQkJCQkJXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCitzZXQodGVtcF9taW4sIEpDNDJfUkVHX1RFTVBfTE9XRVIpOworc2V0KHRlbXBfbWF4LCBKQzQyX1JFR19URU1QX1VQUEVSKTsKK3NldCh0ZW1wX2NyaXQsIEpDNDJfUkVHX1RFTVBfQ1JJVElDQUwpOworCisvKiBKQzQyLjQgY29tcGxpYW50IGNoaXBzIG9ubHkgc3VwcG9ydCBmb3VyIGh5c3RlcmVzaXMgdmFsdWVzLgorICogUGljayBiZXN0IGNob2ljZSBhbmQgZ28gZnJvbSB0aGVyZS4gKi8KK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wX2NyaXRfaHlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWxvbmcgdmFsOworCWludCBkaWZmLCBoeXN0OworCWludCBlcnI7CisJaW50IHJldCA9IGNvdW50OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaWZmID0gamM0Ml90ZW1wX2Zyb21fcmVnKGRhdGEtPnRlbXBfY3JpdCkgLSB2YWw7CisJaHlzdCA9IDA7CisJaWYgKGRpZmYgPiAwKSB7CisJCWlmIChkaWZmIDwgMjI1MCkKKwkJCWh5c3QgPSAxOwkvKiAxLjUgZGVncmVlcyBDICovCisJCWVsc2UgaWYgKGRpZmYgPCA0NTAwKQorCQkJaHlzdCA9IDI7CS8qIDMuMCBkZWdyZWVzIEMgKi8KKwkJZWxzZQorCQkJaHlzdCA9IDM7CS8qIDYuMCBkZWdyZWVzIEMgKi8KKwl9CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+Y29uZmlnID0gKGRhdGEtPmNvbmZpZworCQkJJiB+KEpDNDJfQ0ZHX0hZU1RfTUFTSyA8PCBKQzQyX0NGR19IWVNUX1NISUZUKSkKKwkgIHwgKGh5c3QgPDwgSkM0Ml9DRkdfSFlTVF9TSElGVCk7CisJZXJyID0gamM0Ml93cml0ZV92YWx1ZShjbGllbnQsIEpDNDJfUkVHX0NPTkZJRywgZGF0YS0+Y29uZmlnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0ID0gZXJyOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXUxNiBiaXQgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBqYzQyX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1MTYgdmFsOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwl2YWwgPSBkYXRhLT50ZW1wX2lucHV0OworCWlmIChiaXQgIT0gSkM0Ml9BTEFSTV9DUklUX0JJVCAmJiAoZGF0YS0+Y29uZmlnICYgSkM0Ml9DRkdfQ1JJVF9PTkxZKSkKKwkJdmFsID0gMDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKHZhbCA+PiBiaXQpICYgMSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywKKwkJICAgc2hvd190ZW1wX2lucHV0LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgc2hvd190ZW1wX2NyaXQsIHNldF90ZW1wX2NyaXQpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIHNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbik7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgc2hvd190ZW1wX21heCwgc2V0X3RlbXBfbWF4KTsKKworc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIHNob3dfdGVtcF9jcml0X2h5c3QsIHNldF90ZW1wX2NyaXRfaHlzdCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08sCisJCSAgIHNob3dfdGVtcF9tYXhfaHlzdCwgTlVMTCk7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgSkM0Ml9BTEFSTV9DUklUX0JJVCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKKwkJCSAgSkM0Ml9BTEFSTV9NSU5fQklUKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAorCQkJICBKQzQyX0FMQVJNX01BWF9CSVQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqamM0Ml9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgamM0Ml9ncm91cCA9IHsKKwkuYXR0cnMgPSBqYzQyX2F0dHJpYnV0ZXMsCit9OworCisvKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgamM0Ml9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQsCisJCSAgICAgICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gbmV3X2NsaWVudC0+YWRhcHRlcjsKKwlpbnQgaSwgY29uZmlnLCBjYXAsIG1hbmlkLCBkZXZpZDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJY2FwID0gamM0Ml9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0NBUCk7CisJY29uZmlnID0gamM0Ml9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0NPTkZJRyk7CisJbWFuaWQgPSBqYzQyX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgSkM0Ml9SRUdfTUFOSUQpOworCWRldmlkID0gamM0Ml9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0RFVklDRUlEKTsKKworCWlmIChjYXAgPCAwIHx8IGNvbmZpZyA8IDAgfHwgbWFuaWQgPCAwIHx8IGRldmlkIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKGNhcCAmIDB4ZmYwMCkgfHwgKGNvbmZpZyAmIDB4ZjgwMCkpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamM0Ml9jaGlwcyk7IGkrKykgeworCQlzdHJ1Y3QgamM0Ml9jaGlwcyAqY2hpcCA9ICZqYzQyX2NoaXBzW2ldOworCQlpZiAobWFuaWQgPT0gY2hpcC0+bWFuaWQgJiYKKwkJICAgIChkZXZpZCAmIGNoaXAtPmRldmlkX21hc2spID09IGNoaXAtPmRldmlkKSB7CisJCQlzdHJsY3B5KGluZm8tPnR5cGUsICJqYzQyIiwgSTJDX05BTUVfU0laRSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBqYzQyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpuZXdfY2xpZW50LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YTsKKwlpbnQgY29uZmlnLCBjYXAsIGVycjsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgamM0Ml9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwgZGF0YSk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCisJY2FwID0gamM0Ml9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0NBUCk7CisJaWYgKGNhcCA8IDApIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0X2ZyZWU7CisJfQorCWRhdGEtPmV4dGVuZGVkID0gISEoY2FwICYgSkM0Ml9DQVBfUkFOR0UpOworCisJY29uZmlnID0gamM0Ml9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0NPTkZJRyk7CisJaWYgKGNvbmZpZyA8IDApIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0X2ZyZWU7CisJfQorCWRhdGEtPm9yaWdfY29uZmlnID0gY29uZmlnOworCWlmIChjb25maWcgJiBKQzQyX0NGR19TSFVURE9XTikgeworCQljb25maWcgJj0gfkpDNDJfQ0ZHX1NIVVRET1dOOworCQlqYzQyX3dyaXRlX3ZhbHVlKG5ld19jbGllbnQsIEpDNDJfUkVHX0NPTkZJRywgY29uZmlnKTsKKwl9CisJZGF0YS0+Y29uZmlnID0gY29uZmlnOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmamM0Ml9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWU7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmpjNDJfZ3JvdXApOworZXhpdF9mcmVlOgorCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGpjNDJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmamM0Ml9ncm91cCk7CisJaWYgKGRhdGEtPmNvbmZpZyAhPSBkYXRhLT5vcmlnX2NvbmZpZykKKwkJamM0Ml93cml0ZV92YWx1ZShjbGllbnQsIEpDNDJfUkVHX0NPTkZJRywgZGF0YS0+b3JpZ19jb25maWcpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCisvKiBBbGwgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLiAqLworc3RhdGljIGludCBqYzQyX3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCWludCByZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBzd2FiMTYocmV0KTsKK30KKworc3RhdGljIGludCBqYzQyX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTE2IHZhbHVlKQoreworCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgcmVnLCBzd2FiMTYodmFsdWUpKTsKK30KKworc3RhdGljIHN0cnVjdCBqYzQyX2RhdGEgKmpjNDJfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgamM0Ml9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGpjNDJfZGF0YSAqcmV0ID0gZGF0YTsKKwlpbnQgdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFopIHx8ICFkYXRhLT52YWxpZCkgeworCQl2YWwgPSBqYzQyX3JlYWRfdmFsdWUoY2xpZW50LCBKQzQyX1JFR19URU1QKTsKKwkJaWYgKHZhbCA8IDApIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+dGVtcF9pbnB1dCA9IHZhbDsKKworCQl2YWwgPSBqYzQyX3JlYWRfdmFsdWUoY2xpZW50LCBKQzQyX1JFR19URU1QX0NSSVRJQ0FMKTsKKwkJaWYgKHZhbCA8IDApIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+dGVtcF9jcml0ID0gdmFsOworCisJCXZhbCA9IGpjNDJfcmVhZF92YWx1ZShjbGllbnQsIEpDNDJfUkVHX1RFTVBfTE9XRVIpOworCQlpZiAodmFsIDwgMCkgeworCQkJcmV0ID0gRVJSX1BUUih2YWwpOworCQkJZ290byBhYm9ydDsKKwkJfQorCQlkYXRhLT50ZW1wX21pbiA9IHZhbDsKKworCQl2YWwgPSBqYzQyX3JlYWRfdmFsdWUoY2xpZW50LCBKQzQyX1JFR19URU1QX1VQUEVSKTsKKwkJaWYgKHZhbCA8IDApIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+dGVtcF9tYXggPSB2YWw7CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSB0cnVlOworCX0KK2Fib3J0OgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfamM0Ml9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZqYzQyX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX2pjNDJfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZqYzQyX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJKQzQyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChzZW5zb3JzX2pjNDJfaW5pdCk7Cittb2R1bGVfZXhpdChzZW5zb3JzX2pjNDJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BrZ3RlbXAuYyBiL2RyaXZlcnMvaHdtb24vcGtndGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MTU3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3BrZ3RlbXAuYwpAQCAtMCwwICsxLDQ1NiBAQAorLyoKKyAqIHBrZ3RlbXAuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIHByb2Nlc3NvciBwYWNrYWdlIGhhcmR3YXJlIG1vbml0b3JpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVuZ2h1YSBZdSA8ZmVuZ2h1YS55dUBpbnRlbC5jb20+CisgKgorICogSW5zcGlyZWQgZnJvbSBtYW55IGh3bW9uIGRyaXZlcnMgZXNwZWNpYWxseSBjb3JldGVtcC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBEUlZOQU1FCSJwa2d0ZW1wIgorCitlbnVtIHsgU0hPV19URU1QLCBTSE9XX1RKTUFYLCBTSE9XX1RUQVJHRVQsIFNIT1dfTEFCRUwsIFNIT1dfTkFNRSB9OworCisvKgorICogRnVuY3Rpb25zIGRlY2xhcmF0aW9uCisgKi8KKworc3RhdGljIHN0cnVjdCBwa2d0ZW1wX2RhdGEgKnBrZ3RlbXBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitzdHJ1Y3QgcGtndGVtcF9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGlkOworCXUxNiBwaHlzX3Byb2NfaWQ7CisJY2hhciB2YWxpZDsJCS8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogaW4gamlmZmllcyAqLworCWludCB0ZW1wOworCWludCB0am1heDsKKwlpbnQgdHRhcmdldDsKKwl1OCBhbGFybTsKK307CisKKy8qCisgKiBTeXNmcyBzdHVmZgorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCisJCQkgICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGF0dHItPmluZGV4ID09IFNIT1dfTkFNRSkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7CisJZWxzZQkvKiBzaG93IGxhYmVsICovCisJCXJldCA9IHNwcmludGYoYnVmLCAicGh5c2ljYWwgaWQgJWRcbiIsCisJCQkgICAgICBkYXRhLT5waHlzX3Byb2NfaWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGEgPSBwa2d0ZW1wX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwkvKiByZWFkIHRoZSBPdXQtb2Ytc3BlYyBsb2csIG5ldmVyIGNsZWFyICovCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmFsYXJtKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKKwlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gcGtndGVtcF91cGRhdGVfZGV2aWNlKGRldik7CisJaW50IGVyciA9IDA7CisKKwlpZiAoYXR0ci0+aW5kZXggPT0gU0hPV19URU1QKQorCQllcnIgPSBkYXRhLT52YWxpZCA/IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnRlbXApIDogLUVBR0FJTjsKKwllbHNlIGlmIChhdHRyLT5pbmRleCA9PSBTSE9XX1RKTUFYKQorCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50am1heCk7CisJZWxzZQorCQllcnIgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT50dGFyZ2V0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIFNIT1dfVEVNUCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgU0hPV19USk1BWCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCBTSE9XX1RUQVJHRVQpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9sYWJlbCwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX0xBQkVMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMLCBTSE9XX05BTUUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGtndGVtcF9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9uYW1lLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9sYWJlbC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBrZ3RlbXBfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGtndGVtcF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIHN0cnVjdCBwa2d0ZW1wX2RhdGEgKnBrZ3RlbXBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBrZ3RlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICghZGF0YS0+dmFsaWQgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikpIHsKKwkJdTMyIGVheCwgZWR4OworCisJCWRhdGEtPnZhbGlkID0gMDsKKwkJY3B1ID0gZGF0YS0+aWQ7CisJCWVyciA9IHJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1BBQ0tBR0VfVEhFUk1fU1RBVFVTLAorCQkJCSAgICZlYXgsICZlZHgpOworCQlpZiAoIWVycikgeworCQkJZGF0YS0+YWxhcm0gPSAoZWF4ID4+IDUpICYgMTsKKwkJCWRhdGEtPnRlbXAgPSBkYXRhLT50am1heCAtICgoKGVheCA+PiAxNikKKwkJCQkJCQkmIDB4N2YpICogMTAwMCk7CisJCQlkYXRhLT52YWxpZCA9IDE7CisJCX0gZWxzZQorCQkJZGV2X2RiZyhkZXYsICJUZW1wZXJhdHVyZSBkYXRhIGludmFsaWQgKDB4JXgpXG4iLCBlYXgpOworCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3RqbWF4KGludCBjcHUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZGVmYXVsdF90am1heCA9IDEwMDAwMDsKKwlpbnQgZXJyOworCXUzMiBlYXgsIGVkeDsKKwl1MzIgdmFsOworCisJLyogSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgY29udGFpbnMgdGhlIFRqTWF4IHZhbHVlICovCisJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZlYXgsICZlZHgpOworCWlmICghZXJyKSB7CisJCXZhbCA9IChlYXggPj4gMTYpICYgMHhmZjsKKwkJaWYgKCh2YWwgPiA4MCkgJiYgKHZhbCA8IDEyMCkpIHsKKwkJCWRldl9pbmZvKGRldiwgIlRqTWF4IGlzICVkIEMuXG4iLCB2YWwpOworCQkJcmV0dXJuIHZhbCAqIDEwMDA7CisJCX0KKwl9CisJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlYWQgVGpNYXggZnJvbSBDUFUuXG4iKTsKKwlyZXR1cm4gZGVmYXVsdF90am1heDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcGtndGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwa2d0ZW1wX2RhdGEgKmRhdGE7CisJaW50IGVycjsKKwl1MzIgZWF4LCBlZHg7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwZGV2LT5pZCk7CisjZW5kaWYKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGtndGVtcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YS0+aWQgPSBwZGV2LT5pZDsKKyNpZmRlZiBDT05GSUdfU01QCisJZGF0YS0+cGh5c19wcm9jX2lkID0gYy0+cGh5c19wcm9jX2lkOworI2VuZGlmCisJZGF0YS0+bmFtZSA9ICJwa2d0ZW1wIjsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiB0ZXN0IGlmIHdlIGNhbiBhY2Nlc3MgdGhlIFRIRVJNX1NUQVRVUyBNU1IgKi8KKwllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfUEFDS0FHRV9USEVSTV9TVEFUVVMsCisJCQkJJmVheCwgJmVkeCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiVW5hYmxlIHRvIGFjY2VzcyBUSEVSTV9TVEFUVVMgTVNSLCBnaXZpbmcgdXBcbiIpOworCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwlkYXRhLT50am1heCA9IGdldF90am1heChkYXRhLT5pZCwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGF0YSk7CisKKwllcnIgPSByZG1zcl9zYWZlX29uX2NwdShkYXRhLT5pZCwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULAorCQkJCSZlYXgsICZlZHgpOworCWlmIChlcnIpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWFkIgorCQkJCSIgSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQgTVNSXG4iKTsKKwl9IGVsc2UgeworCQlkYXRhLT50dGFyZ2V0ID0gZGF0YS0+dGptYXggLSAoKChlYXggPj4gOCkgJiAweGZmKSAqIDEwMDApOworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfZnJlZTsKKwl9CisKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmcGtndGVtcF9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2ZyZWU7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZCAoJWQpXG4iLAorCQkJZXJyKTsKKwkJZ290byBleGl0X2NsYXNzOworCX0KKworCXJldHVybiAwOworCitleGl0X2NsYXNzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZwa2d0ZW1wX2dyb3VwKTsKK2V4aXRfZnJlZToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGtndGVtcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGtndGVtcF9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZwa2d0ZW1wX2dyb3VwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGtndGVtcF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gRFJWTkFNRSwKKwl9LAorCS5wcm9iZSA9IHBrZ3RlbXBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHBrZ3RlbXBfcmVtb3ZlKSwKK307CisKK3N0cnVjdCBwZGV2X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBpbnQgY3B1OworI2lmZGVmIENPTkZJR19TTVAKKwl1MTYgcGh5c19wcm9jX2lkOworI2VuZGlmCit9OworCitzdGF0aWMgTElTVF9IRUFEKHBkZXZfbGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBkZXZfbGlzdF9tdXRleCk7CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IHBrZ3RlbXBfZGV2aWNlX2FkZCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBlcnI7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGRldl9lbnRyeSAqcGRldl9lbnRyeTsKKyNpZmRlZiBDT05GSUdfU01QCisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CisjZW5kaWYKKworCW11dGV4X2xvY2soJnBkZXZfbGlzdF9tdXRleCk7CisKKyNpZmRlZiBDT05GSUdfU01QCisJLyogT25seSBrZWVwIHRoZSBmaXJzdCBlbnRyeSBpbiBlYWNoIHBhY2thZ2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkZXZfZW50cnksICZwZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGMtPnBoeXNfcHJvY19pZCA9PSBwZGV2X2VudHJ5LT5waHlzX3Byb2NfaWQpIHsKKwkJCWVyciA9IDA7ICAgICAgICAvKiBOb3QgYW4gZXJyb3IgKi8KKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKyNlbmRpZgorCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBjcHUpOworCWlmICghcGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGRldl9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwZGV2X2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGV2X2VudHJ5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OworCX0KKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiBEZXZpY2UgYWRkaXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIGV4aXRfZGV2aWNlX2ZyZWU7CisJfQorCisjaWZkZWYgQ09ORklHX1NNUAorCXBkZXZfZW50cnktPnBoeXNfcHJvY19pZCA9IGMtPnBoeXNfcHJvY19pZDsKKyNlbmRpZgorCXBkZXZfZW50cnktPnBkZXYgPSBwZGV2OworCXBkZXZfZW50cnktPmNwdSA9IGNwdTsKKwlsaXN0X2FkZF90YWlsKCZwZGV2X2VudHJ5LT5saXN0LCAmcGRldl9saXN0KTsKKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9kZXZpY2VfZnJlZToKKwlrZnJlZShwZGV2X2VudHJ5KTsKK2V4aXRfZGV2aWNlX3B1dDoKKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworZXhpdDoKKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIHZvaWQgcGtndGVtcF9kZXZpY2VfcmVtb3ZlKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCWlmIChwLT5jcHUgIT0gY3B1KQorCQkJY29udGludWU7CisKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocC0+cGRldik7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa2ZyZWUocCk7CisJCWZvcl9lYWNoX2NwdShpLCBjcHVfY29yZV9tYXNrKGNwdSkpIHsKKwkJCWlmIChpICE9IGNwdSkgeworCQkJCWVyciA9IHBrZ3RlbXBfZGV2aWNlX2FkZChpKTsKKwkJCQlpZiAoIWVycikKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmcGRldl9saXN0X211dGV4KTsKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgcGtndGVtcF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZykgaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCQlwa2d0ZW1wX2RldmljZV9hZGQoY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQlwa2d0ZW1wX2RldmljZV9yZW1vdmUoY3B1KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGtndGVtcF9jcHVfbm90aWZpZXIgX19yZWZkYXRhID0geworCS5ub3RpZmllcl9jYWxsID0gcGtndGVtcF9jcHVfY2FsbGJhY2ssCit9OworI2VuZGlmCQkJCS8qICFDT05GSUdfSE9UUExVR19DUFUgKi8KKworc3RhdGljIGludCBfX2luaXQgcGtndGVtcF9pbml0KHZvaWQpCit7CisJaW50IGksIGVyciA9IC1FTk9ERVY7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworCisJLyogcXVpY2sgY2hlY2sgaWYgd2UgcnVuIEludGVsICovCisJaWYgKGNwdV9kYXRhKDApLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJZ290byBleGl0OworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwa2d0ZW1wX2RyaXZlcik7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7CisJCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpKTsKKworCQlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUFRTKSkKKwkJCWNvbnRpbnVlOworCisJCWVyciA9IHBrZ3RlbXBfZGV2aWNlX2FkZChpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9kZXZpY2VzX3VucmVnOworCX0KKwlpZiAobGlzdF9lbXB0eSgmcGRldl9saXN0KSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfZHJpdmVyX3VucmVnOworCX0KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmcGtndGVtcF9jcHVfbm90aWZpZXIpOworI2VuZGlmCisJcmV0dXJuIDA7CisKK2V4aXRfZGV2aWNlc191bnJlZzoKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CitleGl0X2RyaXZlcl91bnJlZzoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGtndGVtcF9kcml2ZXIpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGtndGVtcF9leGl0KHZvaWQpCit7CisJc3RydWN0IHBkZXZfZW50cnkgKnAsICpuOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwa2d0ZW1wX2NwdV9ub3RpZmllcik7CisjZW5kaWYKKwltdXRleF9sb2NrKCZwZGV2X2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmcGRldl9saXN0LCBsaXN0KSB7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHAtPnBkZXYpOworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KKwltdXRleF91bmxvY2soJnBkZXZfbGlzdF9tdXRleCk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBrZ3RlbXBfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiRmVuZ2h1YSBZdSA8ZmVuZ2h1YS55dUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIHByb2Nlc3NvciBwYWNrYWdlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQocGtndGVtcF9pbml0KQorbW9kdWxlX2V4aXQocGtndGVtcF9leGl0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9zbW02NjUuYyBiL2RyaXZlcnMvaHdtb24vc21tNjY1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1ZGY1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vc21tNjY1LmMKQEAgLTAsMCArMSw3NDMgQEAKKy8qCisgKiBEcml2ZXIgZm9yIFNNTTY2NSBQb3dlciBDb250cm9sbGVyIC8gTW9uaXRvcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBFcmljc3NvbiBBQi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGRyaXZlciBzaG91bGQgYWxzbyB3b3JrIGZvciBTTU00NjUsIFNNTTc2NCwgYW5kIFNNTTc2NiwgYnV0IGlzIHVudGVzdGVkCisgKiBmb3IgdGhvc2UgY2hpcHMuIE9ubHkgbW9uaXRvcmluZyBmdW5jdGlvbmFsaXR5IGlzIGltcGxlbWVudGVkLgorICoKKyAqIERhdGFzaGVldHM6CisgKiBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTY2NS9TTU02NjVCXzIwODlfMjAucGRmCisgKiBodHRwOi8vd3d3LnN1bW1pdG1pY3JvLmNvbS9wcm9kX3NlbGVjdC9zdW1tYXJ5L1NNTTc2NkIvU01NNzY2Ql8yMTIyLnBkZgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisvKiBJbnRlcm5hbCByZWZlcmVuY2Ugdm9sdGFnZSAoVlJFRiwgeCAxMDAwICovCisjZGVmaW5lIFNNTTY2NV9WUkVGX0FEQ19YMTAwMAkxMjUwCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IHZyZWYgPSBTTU02NjVfVlJFRl9BRENfWDEwMDA7Cittb2R1bGVfcGFyYW0odnJlZiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModnJlZiwgIlJlZmVyZW5jZSB2b2x0YWdlIGluIG1WIik7CisKK2VudW0gY2hpcHMgeyBzbW00NjUsIHNtbTY2NSwgc21tNjY1Yywgc21tNzY0LCBzbW03NjYgfTsKKworLyoKKyAqIEFEQyBjaGFubmVsIGFkZHJlc3NlcworICovCisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQQkweDAwCisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQgkweDAxCisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQwkweDAyCisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRAkweDAzCisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRQkweDA0CisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRgkweDA1CisjZGVmaW5lCVNNTTY2NV9NSVNDMTZfQURDX0RBVEFfVkRECTB4MDYKKyNkZWZpbmUJU01NNjY1X01JU0MxNl9BRENfREFUQV8xMlYJMHgwNworI2RlZmluZQlTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0lOVF9URU1QCTB4MDgKKyNkZWZpbmUJU01NNjY1X01JU0MxNl9BRENfREFUQV9BSU4xCTB4MDkKKyNkZWZpbmUJU01NNjY1X01JU0MxNl9BRENfREFUQV9BSU4yCTB4MGEKKworLyoKKyAqIENvbW1hbmQgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUJU01NNjY1X01JU0M4X0NNRF9TVFMJCTB4ODAKKyNkZWZpbmUJU01NNjY1X01JU0M4X1NUQVRVUzEJCTB4ODEKKyNkZWZpbmUJU01NNjY1X01JU0M4X1NUQVRVU1MyCQkweDgyCisjZGVmaW5lCVNNTTY2NV9NSVNDOF9JT19QT0xBUklUWQkweDgzCisjZGVmaW5lCVNNTTY2NV9NSVNDOF9QVVBfUE9MQVJJVFkJMHg4NAorI2RlZmluZQlTTU02NjVfTUlTQzhfQURPQ19TVEFUVVMxCTB4ODUKKyNkZWZpbmUJU01NNjY1X01JU0M4X0FET0NfU1RBVFVTMgkweDg2CisjZGVmaW5lCVNNTTY2NV9NSVNDOF9XUklURV9QUk9UCQkweDg3CisjZGVmaW5lCVNNTTY2NV9NSVNDOF9TVFNfVFJBQ0sJCTB4ODgKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGFuZCByZWdpc3RlciBncm91cHMKKyAqLworI2RlZmluZSBTTU02NjVfQURPQ19FTkFCTEUJCTB4MGQKKyNkZWZpbmUgU01NNjY1X0xJTUlUX0JBU0UJCTB4ODAJLyogRmlyc3QgbGltaXQgcmVnaXN0ZXIgKi8KKworLyoKKyAqIExpbWl0IHJlZ2lzdGVyIGJpdCBtYXNrcworICovCisjZGVmaW5lIFNNTTY2NV9UUklHR0VSX1JTVAkJMHg4MDAwCisjZGVmaW5lIFNNTTY2NV9UUklHR0VSX0hFQUxUSFkJCTB4NDAwMAorI2RlZmluZSBTTU02NjVfVFJJR0dFUl9QT1dFUk9GRgkJMHgyMDAwCisjZGVmaW5lIFNNTTY2NV9UUklHR0VSX1NIVVRET1dOCQkweDEwMDAKKyNkZWZpbmUgU01NNjY1X0FEQ19NQVNLCQkJMHgwM2ZmCisKKyNkZWZpbmUgc21tNjY1X2lzX2NyaXRpY2FsKGxpbSkJKChsaW0pICYgKFNNTTY2NV9UUklHR0VSX1JTVCBcCisJCQkJCXwgU01NNjY1X1RSSUdHRVJfUE9XRVJPRkYgXAorCQkJCQl8IFNNTTY2NV9UUklHR0VSX1NIVVRET1dOKSkKKy8qCisgKiBGYXVsdCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKKyAqIFZhbHVlcyBhcmUgbWVyZ2VkIGZyb20gc3RhdHVzIHJlZ2lzdGVycyAxLzIsCisgKiB3aXRoIHN0YXR1cyByZWdpc3RlciAxIHByb3ZpZGluZyB0aGUgdXBwZXIgOCBiaXRzLgorICovCisjZGVmaW5lIFNNTTY2NV9GQVVMVF9BCQkweDAwMDEKKyNkZWZpbmUgU01NNjY1X0ZBVUxUX0IJCTB4MDAwMgorI2RlZmluZSBTTU02NjVfRkFVTFRfQwkJMHgwMDA0CisjZGVmaW5lIFNNTTY2NV9GQVVMVF9ECQkweDAwMDgKKyNkZWZpbmUgU01NNjY1X0ZBVUxUX0UJCTB4MDAxMAorI2RlZmluZSBTTU02NjVfRkFVTFRfRgkJMHgwMDIwCisjZGVmaW5lIFNNTTY2NV9GQVVMVF9WREQJMHgwMDQwCisjZGVmaW5lIFNNTTY2NV9GQVVMVF8xMlYJMHgwMDgwCisjZGVmaW5lIFNNTTY2NV9GQVVMVF9URU1QCTB4MDEwMAorI2RlZmluZSBTTU02NjVfRkFVTFRfQUlOMQkweDAyMDAKKyNkZWZpbmUgU01NNjY1X0ZBVUxUX0FJTjIJMHgwNDAwCisKKy8qCisgKiBJMkMgUmVnaXN0ZXIgYWRkcmVzc2VzCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgbmVlZHMgdG8gYmUgdGhlIGNvbmZpZ3VyZWQgYmFzZSByZWdpc3Rlci4KKyAqIFRoZSBjb21tYW5kL3N0YXR1cyByZWdpc3RlciBhZGRyZXNzIGlzIGRlcml2ZWQgZnJvbSBpdC4KKyAqLworI2RlZmluZSBTTU02NjVfUkVHTUFTSwkJMHg3OAorI2RlZmluZSBTTU02NjVfQ01EUkVHX0JBU0UJMHg0OAorI2RlZmluZSBTTU02NjVfQ09ORlJFR19CQVNFCTB4NTAKKworLyoKKyAqICBFcXVhdGlvbnMgZ2l2ZW4gYnkgY2hpcCBtYW51ZmFjdHVyZXIgdG8gY2FsY3VsYXRlIHZvbHRhZ2UvdGVtcGVyYXR1cmUgdmFsdWVzCisgKiAgdnJlZiA9IFJlZmVyZW5jZSB2b2x0YWdlIG9uIFZSRUZfQURDIHBpbiAobW9kdWxlIHBhcmFtZXRlcikKKyAqICBhZGMgID0gMTBiaXQgQURDIHZhbHVlIHJlYWQgYmFjayBmcm9tIHJlZ2lzdGVycworICovCisKKy8qIFZvbHRhZ2UgQS1GIGFuZCBWREQgKi8KKyNkZWZpbmUgU01NNjY1X1ZNT05fQURDX1RPX1ZPTFRTKGFkYykgICgoYWRjKSAqIHZyZWYgLyAyNTYpCisKKy8qIFZvbHRhZ2UgMTJWSU4gKi8KKyNkZWZpbmUgU01NNjY1XzEyVklOX0FEQ19UT19WT0xUUyhhZGMpICgoYWRjKSAqIHZyZWYgKiAzIC8gMjU2KQorCisvKiBWb2x0YWdlIEFJTjEsIEFJTjIgKi8KKyNkZWZpbmUgU01NNjY1X0FJTl9BRENfVE9fVk9MVFMoYWRjKSAgICgoYWRjKSAqIHZyZWYgLyA1MTIpCisKKy8qIFRlbXAgU2Vuc29yICovCisjZGVmaW5lIFNNTTY2NV9URU1QX0FEQ19UT19DRUxTSVVTKGFkYykgKChhZGMpIDw9IDUxMSkgPwkJICAgXAorCQkJCQkgKChpbnQpKGFkYykgKiAxMDAwIC8gNCkgOgkgICBcCisJCQkJCSAoKChpbnQpKGFkYykgLSAweDQwMCkgKiAxMDAwIC8gNCkKKworI2RlZmluZSBTTU02NjVfTlVNX0FEQwkJMTEKKworLyoKKyAqIENoaXAgZGVwZW5kZW50IEFEQyBjb252ZXJzaW9uIHRpbWUsIGluIHVTCisgKi8KKyNkZWZpbmUgU01NNjY1X0FEQ19XQUlUX1NNTTY2NQk3MAorI2RlZmluZSBTTU02NjVfQURDX1dBSVRfU01NNzY2CTE4NQorCitzdHJ1Y3Qgc21tNjY1X2RhdGEgeworCWVudW0gY2hpcHMgdHlwZTsKKwlpbnQgY29udmVyc2lvbl90aW1lOwkJLyogQURDIGNvbnZlcnNpb24gdGltZSAqLworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJYm9vbCB2YWxpZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsJLyogaW4gamlmZmllcyAqLworCXUxNiBhZGNbU01NNjY1X05VTV9BRENdOwkvKiBhZGMgdmFsdWVzIChyYXcpICovCisJdTE2IGZhdWx0czsJCQkvKiBmYXVsdCBzdGF0dXMgKi8KKwkvKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW4gbVYgKi8KKwlpbnQgY3JpdGljYWxfbWluX2xpbWl0W1NNTTY2NV9OVU1fQURDXTsKKwlpbnQgYWxhcm1fbWluX2xpbWl0W1NNTTY2NV9OVU1fQURDXTsKKwlpbnQgY3JpdGljYWxfbWF4X2xpbWl0W1NNTTY2NV9OVU1fQURDXTsKKwlpbnQgYWxhcm1fbWF4X2xpbWl0W1NNTTY2NV9OVU1fQURDXTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY21kcmVnOworfTsKKworLyoKKyAqIHNtbTY2NV9yZWFkMTYoKQorICoKKyAqIFJlYWQgMTYgYml0IHZhbHVlIGZyb20gPHJlZz4sIDxyZWcrMT4uIFVwcGVyIDggYml0cyBhcmUgaW4gPHJlZz4uCisgKi8KK3N0YXRpYyBpbnQgc21tNjY1X3JlYWQxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVnKQoreworCWludCBydiwgdmFsOworCisJcnYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKwl2YWwgPSBydiA8PCA4OworCXJ2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgMSk7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIHJ2OworCXZhbCB8PSBydjsKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogUmVhZCBhZGMgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgc21tNjY1X3JlYWRfYWRjKHN0cnVjdCBzbW02NjVfZGF0YSAqZGF0YSwgaW50IGFkYykKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGF0YS0+Y21kcmVnOworCWludCBydjsKKwlpbnQgcmFkYzsKKworCS8qCisJICogQWxnb3JpdGhtIGZvciByZWFkaW5nIEFEQywgcGVyIFNNTTY2NSBkYXRhc2hlZXQKKwkgKgorCSAqICB7W1NdW2FkZHJdW1ddW0Fja119IHtbb2Zmc2V0XVtBY2tdfSB7W1NdW2FkZHJdW1JdW05hY2tdfQorCSAqIFt3YWl0IGNvbnZlcnNpb24gdGltZV0KKwkgKiAge1tTXVthZGRyXVtSXVtBY2tdfSB7W2RhdGFoaV1bQWNrXX0ge1tkYXRhbG9dW0Fja11bUF19CisJICoKKwkgKiBUbyBpbXBsZW1lbnQgdGhlIGZpcnN0IHBhcnQgb2YgdGhpcyBleGNoYW5nZSwKKwkgKiBkbyBhIGZ1bGwgcmVhZCB0cmFuc2FjdGlvbiBhbmQgZXhwZWN0IGEgZmFpbHVyZS9OYWNrLgorCSAqIFRoaXMgc2V0cyB1cCB0aGUgYWRkcmVzcyBwb2ludGVyIG9uIHRoZSBTTU02NjUKKwkgKiBhbmQgc3RhcnRzIHRoZSBBREMgY29udmVyc2lvbi4KKwkgKiBUaGVuIGRvIGEgdHdvLWJ5dGUgcmVhZCB0cmFuc2FjdGlvbi4KKwkgKi8KKwlydiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGFkYyA8PCAzKTsKKwlpZiAocnYgIT0gLUVOWElPKSB7CisJCS8qCisJCSAqIFdlIGV4cGVjdCBFTlhJTyB0byByZWZsZWN0IE5BQ0sKKwkJICogKHBlciBEb2N1bWVudGF0aW9uL2kyYy9mYXVsdC1jb2RlcykuCisJCSAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhbiBlcnJvci4KKwkJICovCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LAorCQkJIlVuZXhwZWN0ZWQgcmV0dXJuIGNvZGUgJWQgd2hlbiBzZXR0aW5nIEFEQyBpbmRleCIsIHJ2KTsKKwkJcmV0dXJuIChydiA8IDApID8gcnYgOiAtRUlPOworCX0KKworCXVkZWxheShkYXRhLT5jb252ZXJzaW9uX3RpbWUpOworCisJLyoKKwkgKiBOb3cgcmVhZCB0d28gYnl0ZXMuCisJICoKKwkgKiBOZWl0aGVyIGkyY19zbWJ1c19yZWFkX2J5dGUoKSBub3IKKwkgKiBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKCkgd29ya2VkIGhlcmUsCisJICogc28gdXNlIGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YSgpIGluc3RlYWQuCisJICogV2UgY291bGQgYWxzbyB0cnkgdG8gdXNlIGkyY19tYXN0ZXJfcmVjdigpLAorCSAqIGJ1dCB0aGF0IGlzIG5vdCBhbHdheXMgc3VwcG9ydGVkLgorCSAqLworCXJ2ID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgMCk7CisJaWYgKHJ2IDwgMCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byByZWFkIEFEQyB2YWx1ZTogZXJyb3IgJWQiLCBydik7CisJCXJldHVybiAtMTsKKwl9CisJLyoKKwkgKiBWYWxpZGF0ZS92ZXJpZnkgcmVhZGJhY2sgYWRjIGNoYW5uZWwgKGluIGJpdCAxMS4uMTQpLgorCSAqIEhpZ2ggYnl0ZSBpcyBpbiBsb3dlciA4IGJpdCBvZiBydiwgc28gb25seSBzaGlmdCBieSAzLgorCSAqLworCXJhZGMgPSAocnYgPj4gMykgJiAweDBmOworCWlmIChyYWRjICE9IGFkYykgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVuZXhwZWN0ZWQgUkFEQzogRXhwZWN0ZWQgJWQgZ290ICVkIiwKKwkJCWFkYywgcmFkYyk7CisJCXJldHVybiAtRUlPOworCX0KKwkvKgorCSAqIENoaXAgcmVwbGllcyB3aXRoIEgvTCwgd2hpbGUgU01CdXMgZXhwZWN0cyBML0guCisJICogVGh1cywgYnl0ZSBvcmRlciBpcyByZXZlcnNlZCwgYW5kIHdlIGhhdmUgdG8gc3dhcAorCSAqIHRoZSByZXN1bHQuCisJICovCisJcnYgPSBzd2FiMTYocnYpICYgU01NNjY1X0FEQ19NQVNLOworCisJcmV0dXJuIHJ2OworfQorCitzdGF0aWMgc3RydWN0IHNtbTY2NV9kYXRhICpzbW02NjVfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3Qgc21tNjY1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc21tNjY1X2RhdGEgKnJldCA9IGRhdGE7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikgfHwgIWRhdGEtPnZhbGlkKSB7CisJCWludCBpLCB2YWw7CisKKwkJLyoKKwkJICogcmVhZCBzdGF0dXMgcmVnaXN0ZXJzCisJCSAqLworCQl2YWwgPSBzbW02NjVfcmVhZDE2KGNsaWVudCwgU01NNjY1X01JU0M4X1NUQVRVUzEpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpIHsKKwkJCXJldCA9IEVSUl9QVFIodmFsKTsKKwkJCWdvdG8gYWJvcnQ7CisJCX0KKwkJZGF0YS0+ZmF1bHRzID0gdmFsOworCisJCS8qIFJlYWQgYWRjIHJlZ2lzdGVycyAqLworCQlmb3IgKGkgPSAwOyBpIDwgU01NNjY1X05VTV9BREM7IGkrKykgeworCQkJdmFsID0gc21tNjY1X3JlYWRfYWRjKGRhdGEsIGkpOworCQkJaWYgKHVubGlrZWx5KHZhbCA8IDApKSB7CisJCQkJcmV0ID0gRVJSX1BUUih2YWwpOworCQkJCWdvdG8gYWJvcnQ7CisJCQl9CisJCQlkYXRhLT5hZGNbaV0gPSB2YWw7CisJCX0KKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KK2Fib3J0OgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qIFJldHVybiBjb252ZXJ0ZWQgdmFsdWUgZnJvbSBnaXZlbiBhZGMgKi8KK3N0YXRpYyBpbnQgc21tNjY1X2NvbnZlcnQodTE2IGFkY3ZhbCwgaW50IGluZGV4KQoreworCWludCB2YWwgPSAwOworCisJc3dpdGNoIChpbmRleCkgeworCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV8xMlY6CisJCXZhbCA9IFNNTTY2NV8xMlZJTl9BRENfVE9fVk9MVFMoYWRjdmFsICYgU01NNjY1X0FEQ19NQVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfVkREOgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9BOgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9COgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9DOgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9EOgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9FOgorCWNhc2UgU01NNjY1X01JU0MxNl9BRENfREFUQV9GOgorCQl2YWwgPSBTTU02NjVfVk1PTl9BRENfVE9fVk9MVFMoYWRjdmFsICYgU01NNjY1X0FEQ19NQVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMToKKwljYXNlIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMjoKKwkJdmFsID0gU01NNjY1X0FJTl9BRENfVE9fVk9MVFMoYWRjdmFsICYgU01NNjY1X0FEQ19NQVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfSU5UX1RFTVA6CisJCXZhbCA9IFNNTTY2NV9URU1QX0FEQ19UT19DRUxTSVVTKGFkY3ZhbCAmIFNNTTY2NV9BRENfTUFTSyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBkZXZlbG9wZXIgbWVzc2VkIHVwICovCisJCVdBUk5fT05fT05DRSgxKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBzbW02NjVfZ2V0X21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBzbW02NjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmV0dXJuIGRhdGEtPmFsYXJtX21pbl9saW1pdFtpbmRleF07Cit9CisKK3N0YXRpYyBpbnQgc21tNjY1X2dldF9tYXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3Qgc21tNjY1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXJldHVybiBkYXRhLT5hbGFybV9tYXhfbGltaXRbaW5kZXhdOworfQorCitzdGF0aWMgaW50IHNtbTY2NV9nZXRfbGNyaXQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3Qgc21tNjY1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXJldHVybiBkYXRhLT5jcml0aWNhbF9taW5fbGltaXRbaW5kZXhdOworfQorCitzdGF0aWMgaW50IHNtbTY2NV9nZXRfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBzbW02NjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJcmV0dXJuIGRhdGEtPmNyaXRpY2FsX21heF9saW1pdFtpbmRleF07Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNtbTY2NV9zaG93X2NyaXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IHNtbTY2NV9kYXRhICpkYXRhID0gc21tNjY1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsID0gMDsKKworCWlmIChJU19FUlIoZGF0YSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEpOworCisJaWYgKGRhdGEtPmZhdWx0cyAmICgxIDw8IGF0dHItPmluZGV4KSkKKwkJdmFsID0gMTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzbW02NjVfc2hvd19pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJc3RydWN0IHNtbTY2NV9kYXRhICpkYXRhID0gc21tNjY1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgYWRjID0gYXR0ci0+aW5kZXg7CisJaW50IHZhbDsKKworCWlmIChJU19FUlIoZGF0YSkpCisJCXJldHVybiBQVFJfRVJSKGRhdGEpOworCisJdmFsID0gc21tNjY1X2NvbnZlcnQoZGF0YS0+YWRjW2FkY10sIGFkYyk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbCk7Cit9CisKKyNkZWZpbmUgU01NNjY1X1NIT1cod2hhdCkgXAorICBzdGF0aWMgc3NpemVfdCBzbW02NjVfc2hvd18jI3doYXQoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOyBcCisJY29uc3QgaW50IHZhbCA9IHNtbTY2NV9nZXRfIyN3aGF0KGRldiwgYXR0ci0+aW5kZXgpOyBcCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZhbCk7IFwKK30KKworU01NNjY1X1NIT1cobWluKTsKK1NNTTY2NV9TSE9XKG1heCk7CitTTU02NjVfU0hPVyhsY3JpdCk7CitTTU02NjVfU0hPVyhjcml0KTsKKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJlbG93IGluIGNvbnN0cnVjdGluZyBkZXZpY2UgYXR0cmlidXRlIG9iamVjdHMKKyAqIGZvciB1c2Ugd2l0aCBzeXNmc19jcmVhdGVfZ3JvdXAoKSB0byBtYWtlIGEgc3lzZnMgZGV2aWNlIGZpbGUKKyAqIGZvciBlYWNoIHJlZ2lzdGVyLgorICovCisKKyNkZWZpbmUgU01NNjY1X0FUVFIobmFtZSwgdHlwZSwgY21kX2lkeCkgXAorCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSMjXyMjdHlwZSwgU19JUlVHTywgXAorCQkJCSAgc21tNjY1X3Nob3dfIyN0eXBlLCBOVUxMLCBjbWRfaWR4KQorCisvKiBDb25zdHJ1Y3QgYSBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggcmVnaXN0ZXIgKi8KKworLyogSW5wdXQgdm9sdGFnZXMgKi8KK1NNTTY2NV9BVFRSKGluMSwgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfMTJWKTsKK1NNTTY2NV9BVFRSKGluMiwgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfVkREKTsKK1NNTTY2NV9BVFRSKGluMywgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQSk7CitTTU02NjVfQVRUUihpbjQsIGlucHV0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0IpOworU01NNjY1X0FUVFIoaW41LCBpbnB1dCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9DKTsKK1NNTTY2NV9BVFRSKGluNiwgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRCk7CitTTU02NjVfQVRUUihpbjcsIGlucHV0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0UpOworU01NNjY1X0FUVFIoaW44LCBpbnB1dCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9GKTsKK1NNTTY2NV9BVFRSKGluOSwgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMSk7CitTTU02NjVfQVRUUihpbjEwLCBpbnB1dCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9BSU4yKTsKKworLyogSW5wdXQgdm9sdGFnZXMgbWluICovCitTTU02NjVfQVRUUihpbjEsIG1pbiwgU01NNjY1X01JU0MxNl9BRENfREFUQV8xMlYpOworU01NNjY1X0FUVFIoaW4yLCBtaW4sIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfVkREKTsKK1NNTTY2NV9BVFRSKGluMywgbWluLCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0EpOworU01NNjY1X0FUVFIoaW40LCBtaW4sIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQik7CitTTU02NjVfQVRUUihpbjUsIG1pbiwgU01NNjY1X01JU0MxNl9BRENfREFUQV9DKTsKK1NNTTY2NV9BVFRSKGluNiwgbWluLCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0QpOworU01NNjY1X0FUVFIoaW43LCBtaW4sIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRSk7CitTTU02NjVfQVRUUihpbjgsIG1pbiwgU01NNjY1X01JU0MxNl9BRENfREFUQV9GKTsKK1NNTTY2NV9BVFRSKGluOSwgbWluLCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0FJTjEpOworU01NNjY1X0FUVFIoaW4xMCwgbWluLCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0FJTjIpOworCisvKiBJbnB1dCB2b2x0YWdlcyBtYXggKi8KK1NNTTY2NV9BVFRSKGluMSwgbWF4LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBXzEyVik7CitTTU02NjVfQVRUUihpbjIsIG1heCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9WREQpOworU01NNjY1X0FUVFIoaW4zLCBtYXgsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQSk7CitTTU02NjVfQVRUUihpbjQsIG1heCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9CKTsKK1NNTTY2NV9BVFRSKGluNSwgbWF4LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0MpOworU01NNjY1X0FUVFIoaW42LCBtYXgsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRCk7CitTTU02NjVfQVRUUihpbjcsIG1heCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9FKTsKK1NNTTY2NV9BVFRSKGluOCwgbWF4LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0YpOworU01NNjY1X0FUVFIoaW45LCBtYXgsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMSk7CitTTU02NjVfQVRUUihpbjEwLCBtYXgsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMik7CisKKy8qIElucHV0IHZvbHRhZ2VzIGxjcml0ICovCitTTU02NjVfQVRUUihpbjEsIGxjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBXzEyVik7CitTTU02NjVfQVRUUihpbjIsIGxjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX1ZERCk7CitTTU02NjVfQVRUUihpbjMsIGxjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0EpOworU01NNjY1X0FUVFIoaW40LCBsY3JpdCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9CKTsKK1NNTTY2NV9BVFRSKGluNSwgbGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQyk7CitTTU02NjVfQVRUUihpbjYsIGxjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0QpOworU01NNjY1X0FUVFIoaW43LCBsY3JpdCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9FKTsKK1NNTTY2NV9BVFRSKGluOCwgbGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRik7CitTTU02NjVfQVRUUihpbjksIGxjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0FJTjEpOworU01NNjY1X0FUVFIoaW4xMCwgbGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMik7CisKKy8qIElucHV0IHZvbHRhZ2VzIGNyaXQgKi8KK1NNTTY2NV9BVFRSKGluMSwgY3JpdCwgU01NNjY1X01JU0MxNl9BRENfREFUQV8xMlYpOworU01NNjY1X0FUVFIoaW4yLCBjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX1ZERCk7CitTTU02NjVfQVRUUihpbjMsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQSk7CitTTU02NjVfQVRUUihpbjQsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQik7CitTTU02NjVfQVRUUihpbjUsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQyk7CitTTU02NjVfQVRUUihpbjYsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRCk7CitTTU02NjVfQVRUUihpbjcsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRSk7CitTTU02NjVfQVRUUihpbjgsIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfRik7CitTTU02NjVfQVRUUihpbjksIGNyaXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfQUlOMSk7CitTTU02NjVfQVRUUihpbjEwLCBjcml0LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0FJTjIpOworCisvKiBjcml0aWNhbCBhbGFybXMgKi8KK1NNTTY2NV9BVFRSKGluMSwgY3JpdF9hbGFybSwgU01NNjY1X0ZBVUxUXzEyVik7CitTTU02NjVfQVRUUihpbjIsIGNyaXRfYWxhcm0sIFNNTTY2NV9GQVVMVF9WREQpOworU01NNjY1X0FUVFIoaW4zLCBjcml0X2FsYXJtLCBTTU02NjVfRkFVTFRfQSk7CitTTU02NjVfQVRUUihpbjQsIGNyaXRfYWxhcm0sIFNNTTY2NV9GQVVMVF9CKTsKK1NNTTY2NV9BVFRSKGluNSwgY3JpdF9hbGFybSwgU01NNjY1X0ZBVUxUX0MpOworU01NNjY1X0FUVFIoaW42LCBjcml0X2FsYXJtLCBTTU02NjVfRkFVTFRfRCk7CitTTU02NjVfQVRUUihpbjcsIGNyaXRfYWxhcm0sIFNNTTY2NV9GQVVMVF9FKTsKK1NNTTY2NV9BVFRSKGluOCwgY3JpdF9hbGFybSwgU01NNjY1X0ZBVUxUX0YpOworU01NNjY1X0FUVFIoaW45LCBjcml0X2FsYXJtLCBTTU02NjVfRkFVTFRfQUlOMSk7CitTTU02NjVfQVRUUihpbjEwLCBjcml0X2FsYXJtLCBTTU02NjVfRkFVTFRfQUlOMik7CisKKy8qIFRlbXBlcmF0dXJlICovCitTTU02NjVfQVRUUih0ZW1wMSwgaW5wdXQsIFNNTTY2NV9NSVNDMTZfQURDX0RBVEFfSU5UX1RFTVApOworU01NNjY1X0FUVFIodGVtcDEsIG1pbiwgU01NNjY1X01JU0MxNl9BRENfREFUQV9JTlRfVEVNUCk7CitTTU02NjVfQVRUUih0ZW1wMSwgbWF4LCBTTU02NjVfTUlTQzE2X0FEQ19EQVRBX0lOVF9URU1QKTsKK1NNTTY2NV9BVFRSKHRlbXAxLCBsY3JpdCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9JTlRfVEVNUCk7CitTTU02NjVfQVRUUih0ZW1wMSwgY3JpdCwgU01NNjY1X01JU0MxNl9BRENfREFUQV9JTlRfVEVNUCk7CitTTU02NjVfQVRUUih0ZW1wMSwgY3JpdF9hbGFybSwgU01NNjY1X0ZBVUxUX1RFTVApOworCisvKgorICogRmluYWxseSwgY29uc3RydWN0IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG1lbWJlcnMgb2YgdGhlIGFib3ZlIG9iamVjdHMsCisgKiBhcyByZXF1aXJlZCBmb3Igc3lzZnNfY3JlYXRlX2dyb3VwKCkKKyAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNtbTY2NV9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2xjcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbGNyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X2xjcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfbGNyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19sY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X2xjcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfaW45X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjlfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjlfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjlfbGNyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOV9jcml0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjlfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEwX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTBfbGNyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTBfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbGNyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzbW02NjVfZ3JvdXAgPSB7CisJLmF0dHJzID0gc21tNjY1X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IHNtbTY2NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc21tNjY1X2RhdGEgKmRhdGE7CisJaW50IGksIHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBCisJCQkJICAgICB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFNNTTY2NV9BRE9DX0VOQUJMRSkgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IC1FTk9NRU07CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlnb3RvIG91dF9yZXR1cm47CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlkYXRhLT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCWRhdGEtPmNtZHJlZyA9IGkyY19uZXdfZHVtbXkoYWRhcHRlciwgKGNsaWVudC0+YWRkciAmIH5TTU02NjVfUkVHTUFTSykKKwkJCQkgICAgIHwgU01NNjY1X0NNRFJFR19CQVNFKTsKKwlpZiAoIWRhdGEtPmNtZHJlZykKKwkJZ290byBvdXRfa2ZyZWU7CisKKwlzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKwljYXNlIHNtbTQ2NToKKwljYXNlIHNtbTY2NToKKwkJZGF0YS0+Y29udmVyc2lvbl90aW1lID0gU01NNjY1X0FEQ19XQUlUX1NNTTY2NTsKKwkJYnJlYWs7CisJY2FzZSBzbW02NjVjOgorCWNhc2Ugc21tNzY0OgorCWNhc2Ugc21tNzY2OgorCQlkYXRhLT5jb252ZXJzaW9uX3RpbWUgPSBTTU02NjVfQURDX1dBSVRfU01NNzY2OworCQlicmVhazsKKwl9CisKKwlyZXQgPSAtRU5PREVWOworCWlmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoZGF0YS0+Y21kcmVnLCBTTU02NjVfTUlTQzhfQ01EX1NUUykgPCAwKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCisJLyoKKwkgKiBSZWFkIGxpbWl0cy4KKwkgKgorCSAqIExpbWl0IHJlZ2lzdGVycyBzdGFydCB3aXRoIHJlZ2lzdGVyIFNNTTY2NV9MSU1JVF9CQVNFLgorCSAqIEVhY2ggY2hhbm5lbCB1c2VzIDggcmVnaXN0ZXJzLCBwcm92aWRpbmcgZm91ciBsaW1pdCB2YWx1ZXMKKwkgKiBwZXIgY2hhbm5lbC4gRWFjaCBsaW1pdCB2YWx1ZSByZXF1aXJlcyB0d28gcmVnaXN0ZXJzLCB3aXRoIHRoZQorCSAqIGhpZ2ggYnl0ZSBpbiB0aGUgZmlyc3QgcmVnaXN0ZXIgYW5kIHRoZSBsb3cgYnl0ZSBpbiB0aGUgc2Vjb25kCisJICogcmVnaXN0ZXIuIFRoZSBmaXJzdCB0d28gbGltaXRzIGFyZSB1bmRlciBsaW1pdCB2YWx1ZXMsIGZvbGxvd2VkCisJICogYnkgdHdvIG92ZXIgbGltaXQgdmFsdWVzLgorCSAqCisJICogTGltaXQgcmVnaXN0ZXIgb3JkZXIgbWF0Y2hlcyB0aGUgQURDIHJlZ2lzdGVyIG9yZGVyLCBzbyB3ZSB1c2UKKwkgKiBBREMgcmVnaXN0ZXIgZGVmaW5lcyB0aHJvdWdob3V0IHRoZSBjb2RlIHRvIGluZGV4IGxpbWl0IHJlZ2lzdGVycy4KKwkgKgorCSAqIFdlIHNhdmUgdGhlIGZpcnN0IHJldHJpZXZlZCB2YWx1ZSBib3RoIGFzICJjcml0aWNhbCIgYW5kICJhbGFybSIKKwkgKiB2YWx1ZS4gVGhlIHNlY29uZCB2YWx1ZSBvdmVyd3JpdGVzIGVpdGhlciB0aGUgY3JpdGljYWwgb3IgdGhlCisJICogYWxhcm0gdmFsdWUsIGRlcGVuZGluZyBvbiBpdHMgY29uZmlndXJhdGlvbi4gVGhpcyBlbnN1cmVzIHRoYXQgYm90aAorCSAqIGNyaXRpY2FsIGFuZCBhbGFybSB2YWx1ZXMgYXJlIGluaXRpYWxpemVkLCBldmVuIGlmIGJvdGggcmVnaXN0ZXJzIGFyZQorCSAqIGNvbmZpZ3VyZWQgYXMgY3JpdGljYWwgb3Igbm9uLWNyaXRpY2FsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBTTU02NjVfTlVNX0FEQzsgaSsrKSB7CisJCWludCB2YWw7CisKKwkJdmFsID0gc21tNjY1X3JlYWQxNihjbGllbnQsIFNNTTY2NV9MSU1JVF9CQVNFICsgaSAqIDgpOworCQlpZiAodW5saWtlbHkodmFsIDwgMCkpCisJCQlnb3RvIG91dF91bnJlZ2lzdGVyOworCQlkYXRhLT5jcml0aWNhbF9taW5fbGltaXRbaV0gPSBkYXRhLT5hbGFybV9taW5fbGltaXRbaV0KKwkJICA9IHNtbTY2NV9jb252ZXJ0KHZhbCwgaSk7CisJCXZhbCA9IHNtbTY2NV9yZWFkMTYoY2xpZW50LCBTTU02NjVfTElNSVRfQkFTRSArIGkgKiA4ICsgMik7CisJCWlmICh1bmxpa2VseSh2YWwgPCAwKSkKKwkJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJCWlmIChzbW02NjVfaXNfY3JpdGljYWwodmFsKSkKKwkJCWRhdGEtPmNyaXRpY2FsX21pbl9saW1pdFtpXSA9IHNtbTY2NV9jb252ZXJ0KHZhbCwgaSk7CisJCWVsc2UKKwkJCWRhdGEtPmFsYXJtX21pbl9saW1pdFtpXSA9IHNtbTY2NV9jb252ZXJ0KHZhbCwgaSk7CisJCXZhbCA9IHNtbTY2NV9yZWFkMTYoY2xpZW50LCBTTU02NjVfTElNSVRfQkFTRSArIGkgKiA4ICsgNCk7CisJCWlmICh1bmxpa2VseSh2YWwgPCAwKSkKKwkJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJCWRhdGEtPmNyaXRpY2FsX21heF9saW1pdFtpXSA9IGRhdGEtPmFsYXJtX21heF9saW1pdFtpXQorCQkgID0gc21tNjY1X2NvbnZlcnQodmFsLCBpKTsKKwkJdmFsID0gc21tNjY1X3JlYWQxNihjbGllbnQsIFNNTTY2NV9MSU1JVF9CQVNFICsgaSAqIDggKyA2KTsKKwkJaWYgKHVubGlrZWx5KHZhbCA8IDApKQorCQkJZ290byBvdXRfdW5yZWdpc3RlcjsKKwkJaWYgKHNtbTY2NV9pc19jcml0aWNhbCh2YWwpKQorCQkJZGF0YS0+Y3JpdGljYWxfbWF4X2xpbWl0W2ldID0gc21tNjY1X2NvbnZlcnQodmFsLCBpKTsKKwkJZWxzZQorCQkJZGF0YS0+YWxhcm1fbWF4X2xpbWl0W2ldID0gc21tNjY1X2NvbnZlcnQodmFsLCBpKTsKKwl9CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNtbTY2NV9ncm91cCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5yZWdpc3RlcjsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gb3V0X3JlbW92ZV9ncm91cDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3JlbW92ZV9ncm91cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbW02NjVfZ3JvdXApOworb3V0X3VucmVnaXN0ZXI6CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmNtZHJlZyk7CitvdXRfa2ZyZWU6CisJa2ZyZWUoZGF0YSk7CitvdXRfcmV0dXJuOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc21tNjY1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzbW02NjVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGRhdGEtPmNtZHJlZyk7CisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbW02NjVfZ3JvdXApOworCisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNtbTY2NV9pZFtdID0geworCXsic21tNDY1Iiwgc21tNDY1fSwKKwl7InNtbTY2NSIsIHNtbTY2NX0sCisJeyJzbW02NjVjIiwgc21tNjY1Y30sCisJeyJzbW03NjQiLCBzbW03NjR9LAorCXsic21tNzY2Iiwgc21tNzY2fSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNtbTY2NV9pZCk7CisKKy8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbW02NjVfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gInNtbTY2NSIsCisJCSAgIH0sCisJLnByb2JlID0gc21tNjY1X3Byb2JlLAorCS5yZW1vdmUgPSBzbW02NjVfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNtbTY2NV9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNtbTY2NV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZzbW02NjVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtbTY2NV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnNtbTY2NV9kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNNTTY2NSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoc21tNjY1X2luaXQpOworbW9kdWxlX2V4aXQoc21tNjY1X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRleCBiY2VhZmJmLi4xNWE5NzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtNTIxLDEyICs1MjEsMTkgQEAKIAkgIGlzIG5lY2Vzc2FyeSBmb3Igc3lzdGVtcyB3aGVyZSB0aGUgUFhBIG1heSBiZSBhIHRhcmdldCBvbiB0aGUKIAkgIEkyQyBidXMuCiAKK2NvbmZpZyBIQVZFX1MzQzI0MTBfSTJDCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgd2lsbCBpbmNsdWRlIEkyQyBzdXBwb3J0IGZvciBTYW1zdW5nIFNvQ3MuIElmIHlvdSB3YW50IHRvCisJICBpbmNsdWRlIEkyQyBzdXBwb3J0IGZvciBhbnkgbWFjaGluZSwga2luZGx5IHNlbGVjdCB0aGlzIGluIHRoZQorCSAgcmVzcGVjdGl2ZSBLY29uZmlnIGZpbGUuCisKIGNvbmZpZyBJMkNfUzNDMjQxMAogCXRyaXN0YXRlICJTM0MyNDEwIEkyQyBEcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBIQVZFX1MzQzI0MTBfSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEkyQyBjb250cm9sbGVyIGluIHRoZQotCSAgU2Ftc3VuZyBTM0MyNDEwIGJhc2VkIFN5c3RlbS1vbi1DaGlwIGRldmljZXMuCisJICBTYW1zdW5nIFNvQ3MuCiAKIGNvbmZpZyBJMkNfUzYwMDAKIAl0cmlzdGF0ZSAiUzYwMDAgSTJDIHN1cHBvcnQiCkBAIC01NDksNyArNTU2LDcgQEAKIAogY29uZmlnIEkyQ19TSF9NT0JJTEUKIAl0cmlzdGF0ZSAiU3VwZXJIIE1vYmlsZSBJMkMgQ29udHJvbGxlciIKLQlkZXBlbmRzIG9uIFNVUEVSSAorCWRlcGVuZHMgb24gU1VQRVJIIHx8IEFSQ0hfU0hNT0JJTEUKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKIAkgIGJ1aWx0LWluIEkyQyBpbnRlcmZhY2Ugb24gdGhlIFJlbmVzYXMgU0gtTW9iaWxlIHByb2Nlc3Nvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCmluZGV4IGZmYjQwNWQuLjU5OGM0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYwpAQCAtMTE5LDggKzExOSwxMCBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOwogCiAJc3RydWN0IGNsayAqY2xrOworCXVfaW50OF90IGljaWM7CiAJdV9pbnQ4X3QgaWNjbDsKIAl1X2ludDhfdCBpY2NoOworCXVfaW50OF90IGZsYWdzOwogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CkBAIC0xMjksMTUgKzEzMSwxNyBAQAogCWludCBzcjsKIH07CiAKKyNkZWZpbmUgSUlDX0ZMQUdfSEFTX0lDSUM2NwkoMSA8PCAwKQorCiAjZGVmaW5lIE5PUk1BTF9TUEVFRAkJMTAwMDAwIC8qIEZBU1RfU1BFRUQgNDAwMDAwICovCiAKIC8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgSUNEUihwZCkJCShwZC0+cmVnICsgMHgwMCkKLSNkZWZpbmUgSUNDUihwZCkJCShwZC0+cmVnICsgMHgwNCkKLSNkZWZpbmUgSUNTUihwZCkJCShwZC0+cmVnICsgMHgwOCkKLSNkZWZpbmUgSUNJQyhwZCkJCShwZC0+cmVnICsgMHgwYykKLSNkZWZpbmUgSUNDTChwZCkJCShwZC0+cmVnICsgMHgxMCkKLSNkZWZpbmUgSUNDSChwZCkJCShwZC0+cmVnICsgMHgxNCkKKyNkZWZpbmUgSUNEUgkJCTB4MDAKKyNkZWZpbmUgSUNDUgkJCTB4MDQKKyNkZWZpbmUgSUNTUgkJCTB4MDgKKyNkZWZpbmUgSUNJQwkJCTB4MGMKKyNkZWZpbmUgSUNDTAkJCTB4MTAKKyNkZWZpbmUgSUNDSAkJCTB4MTQKIAogLyogUmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBJQ0NSX0lDRQkJMHg4MApAQCAtMTU1LDExICsxNTksMzIgQEAKICNkZWZpbmUgSUNTUl9XQUlUCQkweDAyCiAjZGVmaW5lIElDU1JfRFRFCQkweDAxCiAKKyNkZWZpbmUgSUNJQ19JQ0NMQjgJCTB4ODAKKyNkZWZpbmUgSUNJQ19JQ0NIQjgJCTB4NDAKICNkZWZpbmUgSUNJQ19BTEUJCTB4MDgKICNkZWZpbmUgSUNJQ19UQUNLRQkJMHgwNAogI2RlZmluZSBJQ0lDX1dBSVRFCQkweDAyCiAjZGVmaW5lIElDSUNfRFRFRQkJMHgwMQogCitzdGF0aWMgdm9pZCBpaWNfd3Ioc3RydWN0IHNoX21vYmlsZV9pMmNfZGF0YSAqcGQsIGludCBvZmZzLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJaWYgKG9mZnMgPT0gSUNJQykKKwkJZGF0YSB8PSBwZC0+aWNpYzsKKworCWlvd3JpdGU4KGRhdGEsIHBkLT5yZWcgKyBvZmZzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaWljX3JkKHN0cnVjdCBzaF9tb2JpbGVfaTJjX2RhdGEgKnBkLCBpbnQgb2ZmcykKK3sKKwlyZXR1cm4gaW9yZWFkOChwZC0+cmVnICsgb2Zmcyk7Cit9CisKK3N0YXRpYyB2b2lkIGlpY19zZXRfY2xyKHN0cnVjdCBzaF9tb2JpbGVfaTJjX2RhdGEgKnBkLCBpbnQgb2ZmcywKKwkJCXVuc2lnbmVkIGNoYXIgc2V0LCB1bnNpZ25lZCBjaGFyIGNscikKK3sKKwlpaWNfd3IocGQsIG9mZnMsIChpaWNfcmQocGQsIG9mZnMpIHwgc2V0KSAmIH5jbHIpOworfQorCiBzdGF0aWMgdm9pZCBhY3RpdmF0ZV9jaChzdHJ1Y3Qgc2hfbW9iaWxlX2kyY19kYXRhICpwZCkKIHsKIAl1bnNpZ25lZCBsb25nIGkyY19jbGs7CkBAIC0xODcsNiArMjEyLDE0IEBACiAJZWxzZQogCQlwZC0+aWNjbCA9ICh1X2ludDhfdCkobnVtL2Rlbm9tKTsKIAorCS8qIG9uZSBtb3JlIGJpdCBvZiBJQ0NMIGluIElDSUMgKi8KKwlpZiAocGQtPmZsYWdzICYgSUlDX0ZMQUdfSEFTX0lDSUM2NykgeworCQlpZiAoKG51bS9kZW5vbSkgPiAweGZmKQorCQkJcGQtPmljaWMgfD0gSUNJQ19JQ0NMQjg7CisJCWVsc2UKKwkJCXBkLT5pY2ljICY9IH5JQ0lDX0lDQ0xCODsKKwl9CisKIAkvKiBDYWxjdWxhdGUgdGhlIHZhbHVlIGZvciBpY2NoLiBGcm9tIHRoZSBkYXRhIHNoZWV0OgogCSAgIGljY2ggPSAocCBjbG9jayAvIHRyYW5zZmVyIHJhdGUpICogKEggLyAoTCArIEgpKSAqLwogCW51bSA9IGkyY19jbGsgKiA0OwpAQCAtMTk2LDI1ICsyMjksMzMgQEAKIAllbHNlCiAJCXBkLT5pY2NoID0gKHVfaW50OF90KShudW0vZGVub20pOwogCisJLyogb25lIG1vcmUgYml0IG9mIElDQ0ggaW4gSUNJQyAqLworCWlmIChwZC0+ZmxhZ3MgJiBJSUNfRkxBR19IQVNfSUNJQzY3KSB7CisJCWlmICgobnVtL2Rlbm9tKSA+IDB4ZmYpCisJCQlwZC0+aWNpYyB8PSBJQ0lDX0lDQ0hCODsKKwkJZWxzZQorCQkJcGQtPmljaWMgJj0gfklDSUNfSUNDSEI4OworCX0KKwogCS8qIEVuYWJsZSBjaGFubmVsIGFuZCBjb25maWd1cmUgcnggYWNrICovCi0JaW93cml0ZTgoaW9yZWFkOChJQ0NSKHBkKSkgfCBJQ0NSX0lDRSwgSUNDUihwZCkpOworCWlpY19zZXRfY2xyKHBkLCBJQ0NSLCBJQ0NSX0lDRSwgMCk7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCi0JaW93cml0ZTgoMCwgSUNJQyhwZCkpOworCWlpY193cihwZCwgSUNJQywgMCk7CiAKIAkvKiBTZXQgdGhlIGNsb2NrICovCi0JaW93cml0ZTgocGQtPmljY2wsIElDQ0wocGQpKTsKLQlpb3dyaXRlOChwZC0+aWNjaCwgSUNDSChwZCkpOworCWlpY193cihwZCwgSUNDTCwgcGQtPmljY2wpOworCWlpY193cihwZCwgSUNDSCwgcGQtPmljY2gpOwogfQogCiBzdGF0aWMgdm9pZCBkZWFjdGl2YXRlX2NoKHN0cnVjdCBzaF9tb2JpbGVfaTJjX2RhdGEgKnBkKQogewogCS8qIENsZWFyL2Rpc2FibGUgaW50ZXJydXB0cyAqLwotCWlvd3JpdGU4KDAsIElDU1IocGQpKTsKLQlpb3dyaXRlOCgwLCBJQ0lDKHBkKSk7CisJaWljX3dyKHBkLCBJQ1NSLCAwKTsKKwlpaWNfd3IocGQsIElDSUMsIDApOwogCiAJLyogRGlzYWJsZSBjaGFubmVsICovCi0JaW93cml0ZTgoaW9yZWFkOChJQ0NSKHBkKSkgJiB+SUNDUl9JQ0UsIElDQ1IocGQpKTsKKwlpaWNfc2V0X2NscihwZCwgSUNDUiwgMCwgSUNDUl9JQ0UpOwogCiAJLyogRGlzYWJsZSBjbG9jayBhbmQgbWFyayBkZXZpY2UgYXMgaWRsZSAqLwogCWNsa19kaXNhYmxlKHBkLT5jbGspOwpAQCAtMjMzLDM1ICsyNzQsMzUgQEAKIAogCXN3aXRjaCAob3ApIHsKIAljYXNlIE9QX1NUQVJUOiAvKiBpc3N1ZSBzdGFydCBhbmQgdHJpZ2dlciBEVEUgaW50ZXJydXB0ICovCi0JCWlvd3JpdGU4KDB4OTQsIElDQ1IocGQpKTsKKwkJaWljX3dyKHBkLCBJQ0NSLCAweDk0KTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UWF9GSVJTVDogLyogZGlzYWJsZSBEVEUgaW50ZXJydXB0IGFuZCB3cml0ZSBkYXRhICovCi0JCWlvd3JpdGU4KElDSUNfV0FJVEUgfCBJQ0lDX0FMRSB8IElDSUNfVEFDS0UsIElDSUMocGQpKTsKLQkJaW93cml0ZTgoZGF0YSwgSUNEUihwZCkpOworCQlpaWNfd3IocGQsIElDSUMsIElDSUNfV0FJVEUgfCBJQ0lDX0FMRSB8IElDSUNfVEFDS0UpOworCQlpaWNfd3IocGQsIElDRFIsIGRhdGEpOwogCQlicmVhazsKIAljYXNlIE9QX1RYOiAvKiB3cml0ZSBkYXRhICovCi0JCWlvd3JpdGU4KGRhdGEsIElDRFIocGQpKTsKKwkJaWljX3dyKHBkLCBJQ0RSLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UWF9TVE9QOiAvKiB3cml0ZSBkYXRhIGFuZCBpc3N1ZSBhIHN0b3AgYWZ0ZXJ3YXJkcyAqLwotCQlpb3dyaXRlOChkYXRhLCBJQ0RSKHBkKSk7Ci0JCWlvd3JpdGU4KDB4OTAsIElDQ1IocGQpKTsKKwkJaWljX3dyKHBkLCBJQ0RSLCBkYXRhKTsKKwkJaWljX3dyKHBkLCBJQ0NSLCAweDkwKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UWF9UT19SWDogLyogc2VsZWN0IHJlYWQgbW9kZSAqLwotCQlpb3dyaXRlOCgweDgxLCBJQ0NSKHBkKSk7CisJCWlpY193cihwZCwgSUNDUiwgMHg4MSk7CiAJCWJyZWFrOwogCWNhc2UgT1BfUlg6IC8qIGp1c3QgcmVhZCBkYXRhICovCi0JCXJldCA9IGlvcmVhZDgoSUNEUihwZCkpOworCQlyZXQgPSBpaWNfcmQocGQsIElDRFIpOwogCQlicmVhazsKIAljYXNlIE9QX1JYX1NUT1A6IC8qIGVuYWJsZSBEVEUgaW50ZXJydXB0LCBpc3N1ZSBzdG9wICovCi0JCWlvd3JpdGU4KElDSUNfRFRFRSB8IElDSUNfV0FJVEUgfCBJQ0lDX0FMRSB8IElDSUNfVEFDS0UsCi0JCQkgSUNJQyhwZCkpOwotCQlpb3dyaXRlOCgweGMwLCBJQ0NSKHBkKSk7CisJCWlpY193cihwZCwgSUNJQywKKwkJICAgICAgIElDSUNfRFRFRSB8IElDSUNfV0FJVEUgfCBJQ0lDX0FMRSB8IElDSUNfVEFDS0UpOworCQlpaWNfd3IocGQsIElDQ1IsIDB4YzApOwogCQlicmVhazsKIAljYXNlIE9QX1JYX1NUT1BfREFUQTogLyogZW5hYmxlIERURSBpbnRlcnJ1cHQsIHJlYWQgZGF0YSwgaXNzdWUgc3RvcCAqLwotCQlpb3dyaXRlOChJQ0lDX0RURUUgfCBJQ0lDX1dBSVRFIHwgSUNJQ19BTEUgfCBJQ0lDX1RBQ0tFLAotCQkJIElDSUMocGQpKTsKLQkJcmV0ID0gaW9yZWFkOChJQ0RSKHBkKSk7Ci0JCWlvd3JpdGU4KDB4YzAsIElDQ1IocGQpKTsKKwkJaWljX3dyKHBkLCBJQ0lDLAorCQkgICAgICAgSUNJQ19EVEVFIHwgSUNJQ19XQUlURSB8IElDSUNfQUxFIHwgSUNJQ19UQUNLRSk7CisJCXJldCA9IGlpY19yZChwZCwgSUNEUik7CisJCWlpY193cihwZCwgSUNDUiwgMHhjMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzY3LDcgKzQwOCw3IEBACiAJdW5zaWduZWQgY2hhciBzcjsKIAlpbnQgd2FrZXVwOwogCi0Jc3IgPSBpb3JlYWQ4KElDU1IocGQpKTsKKwlzciA9IGlpY19yZChwZCwgSUNTUik7CiAJcGQtPnNyIHw9IHNyOyAvKiByZW1lbWJlciBzdGF0ZSAqLwogCiAJZGV2X2RiZyhwZC0+ZGV2LCAiaTJjX2lzciAweCUwMnggMHglMDJ4ICVzICVkICVkIVxuIiwgc3IsIHBkLT5zciwKQEAgLTM3Niw3ICs0MTcsNyBAQAogCiAJaWYgKHNyICYgKElDU1JfQUwgfCBJQ1NSX1RBQ0spKSB7CiAJCS8qIGRvbid0IGludGVycnVwdCB0cmFuc2FjdGlvbiAtIGNvbnRpbnVlIHRvIGlzc3VlIHN0b3AgKi8KLQkJaW93cml0ZTgoc3IgJiB+KElDU1JfQUwgfCBJQ1NSX1RBQ0spLCBJQ1NSKHBkKSk7CisJCWlpY193cihwZCwgSUNTUiwgc3IgJiB+KElDU1JfQUwgfCBJQ1NSX1RBQ0spKTsKIAkJd2FrZXVwID0gMDsKIAl9IGVsc2UgaWYgKHBkLT5tc2ctPmZsYWdzICYgSTJDX01fUkQpCiAJCXdha2V1cCA9IHNoX21vYmlsZV9pMmNfaXNyX3J4KHBkKTsKQEAgLTM4NCw3ICs0MjUsNyBAQAogCQl3YWtldXAgPSBzaF9tb2JpbGVfaTJjX2lzcl90eChwZCk7CiAKIAlpZiAoc3IgJiBJQ1NSX1dBSVQpIC8qIFRPRE86IGFkZCBkZWxheSBoZXJlIHRvIHN1cHBvcnQgc2xvdyBhY2tzICovCi0JCWlvd3JpdGU4KHNyICYgfklDU1JfV0FJVCwgSUNTUihwZCkpOworCQlpaWNfd3IocGQsIElDU1IsIHNyICYgfklDU1JfV0FJVCk7CiAKIAlpZiAod2FrZXVwKSB7CiAJCXBkLT5zciB8PSBTV19ET05FOwpAQCAtNDAyLDIxICs0NDMsMjEgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIGNoYW5uZWwgcmVnaXN0ZXJzICovCi0JaW93cml0ZTgoaW9yZWFkOChJQ0NSKHBkKSkgJiB+SUNDUl9JQ0UsIElDQ1IocGQpKTsKKwlpaWNfc2V0X2NscihwZCwgSUNDUiwgMCwgSUNDUl9JQ0UpOwogCiAJLyogRW5hYmxlIGNoYW5uZWwgYW5kIGNvbmZpZ3VyZSByeCBhY2sgKi8KLQlpb3dyaXRlOChpb3JlYWQ4KElDQ1IocGQpKSB8IElDQ1JfSUNFLCBJQ0NSKHBkKSk7CisJaWljX3NldF9jbHIocGQsIElDQ1IsIElDQ1JfSUNFLCAwKTsKIAogCS8qIFNldCB0aGUgY2xvY2sgKi8KLQlpb3dyaXRlOChwZC0+aWNjbCwgSUNDTChwZCkpOwotCWlvd3JpdGU4KHBkLT5pY2NoLCBJQ0NIKHBkKSk7CisJaWljX3dyKHBkLCBJQ0NMLCBwZC0+aWNjbCk7CisJaWljX3dyKHBkLCBJQ0NILCBwZC0+aWNjaCk7CiAKIAlwZC0+bXNnID0gdXNyX21zZzsKIAlwZC0+cG9zID0gLTE7CiAJcGQtPnNyID0gMDsKIAogCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cyB0byBiZWdpbiB3aXRoICovCi0JaW93cml0ZTgoSUNJQ19XQUlURSB8IElDSUNfQUxFIHwgSUNJQ19UQUNLRSB8IElDSUNfRFRFRSwgSUNJQyhwZCkpOworCWlpY193cihwZCwgSUNJQywgSUNJQ19EVEVFIHwgSUNJQ19XQUlURSB8IElDSUNfQUxFIHwgSUNJQ19UQUNLRSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1MSw3ICs0OTIsNyBAQAogCiAJCXJldHJ5X2NvdW50ID0gMTAwMDsKIGFnYWluOgotCQl2YWwgPSBpb3JlYWQ4KElDU1IocGQpKTsKKwkJdmFsID0gaWljX3JkKHBkLCBJQ1NSKTsKIAogCQlkZXZfZGJnKHBkLT5kZXYsICJ2YWwgMHglMDJ4IHBkLT5zciAweCUwMnhcbiIsIHZhbCwgcGQtPnNyKTsKIApAQCAtNTc2LDYgKzYxNywxMiBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCisJLyogVGhlIElJQyBibG9ja3Mgb24gU0gtTW9iaWxlIEFSTSBwcm9jZXNzb3JzCisJICogY29tZSB3aXRoIHR3byBuZXcgYml0cyBpbiBJQ0lDLgorCSAqLworCWlmIChzaXplID4gMHgxNykKKwkJcGQtPmZsYWdzIHw9IElJQ19GTEFHX0hBU19JQ0lDNjc7CisKIAkvKiBFbmFibGUgUnVudGltZSBQTSBmb3IgdGhpcyBkZXZpY2UuCiAJICoKIAkgKiBBbHNvIHRlbGwgdGhlIFJ1bnRpbWUgUE0gY29yZSB0byBpZ25vcmUgY2hpbGRyZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggZjlkYWZmZC4uZTg4YTJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJQlVHX09OKHNlbnNlX2xlbiA+IHNpemVvZigqc2Vuc2UpKTsKIAotCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgfHwgZHJpdmUtPnNlbnNlX3JxX2FybWVkKQorCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU0VOU0UgfHwgZHJpdmUtPnNlbnNlX3JxX2FybWVkKQogCQlyZXR1cm47CiAKIAltZW1zZXQoc2Vuc2UsIDAsIHNpemVvZigqc2Vuc2UpKTsKQEAgLTMwNywxMyArMzA3LDE2IEBACiAKIGludCBpZGVfY2RfZ2V0X3hmZXJsZW4oc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChibGtfZnNfcmVxdWVzdChycSkpCisJc3dpdGNoIChycS0+Y21kX3R5cGUpIHsKKwljYXNlIFJFUV9UWVBFX0ZTOgogCQlyZXR1cm4gMzI3Njg7Ci0JZWxzZSBpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpIHx8IGJsa19wY19yZXF1ZXN0KHJxKSB8fAotCQkJIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMpCisJY2FzZSBSRVFfVFlQRV9TRU5TRToKKwljYXNlIFJFUV9UWVBFX0JMT0NLX1BDOgorCWNhc2UgUkVRX1RZUEVfQVRBX1BDOgogCQlyZXR1cm4gYmxrX3JxX2J5dGVzKHJxKTsKLQllbHNlCisJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NkX2dldF94ZmVybGVuKTsKIApAQCAtNDc0LDEyICs0NzcsMTIgQEAKIAkJaWYgKHVwdG9kYXRlID09IDApCiAJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKIAotCQlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKKwkJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TUEVDSUFMKSB7CiAJCQlycS0+ZXJyb3JzID0gMDsKIAkJCWVycm9yID0gMDsKIAkJfSBlbHNlIHsKIAotCQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHVwdG9kYXRlIDw9IDApIHsKKwkJCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMgJiYgdXB0b2RhdGUgPD0gMCkgewogCQkJCWlmIChycS0+ZXJyb3JzID09IDApCiAJCQkJCXJxLT5lcnJvcnMgPSAtRUlPOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCA2NDIwN2RmLi4zMWZjNzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNzYsNyArMTc3LDcgQEAKIAkJCWlmICghc2Vuc2UtPnZhbGlkKQogCQkJCWJyZWFrOwogCQkJaWYgKGZhaWxlZF9jb21tYW5kID09IE5VTEwgfHwKLQkJCQkJIWJsa19mc19yZXF1ZXN0KGZhaWxlZF9jb21tYW5kKSkKKwkJCSAgICBmYWlsZWRfY29tbWFuZC0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCQkJYnJlYWs7CiAJCQlzZWN0b3IgPSAoc2Vuc2UtPmluZm9ybWF0aW9uWzBdIDw8IDI0KSB8CiAJCQkJIChzZW5zZS0+aW5mb3JtYXRpb25bMV0gPDwgMTYpIHwKQEAgLTI5Miw3ICsyOTMsNyBAQAogCQkJCSAgInN0YXQgMHgleCIsCiAJCQkJICBycS0+Y21kWzBdLCBycS0+Y21kX3R5cGUsIGVyciwgc3RhdCk7CiAKLQlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7CisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TRU5TRSkgewogCQkvKgogCQkgKiBXZSBnb3QgYW4gZXJyb3IgdHJ5aW5nIHRvIGdldCBzZW5zZSBpbmZvIGZyb20gdGhlIGRyaXZlCiAJCSAqIChwcm9iYWJseSB3aGlsZSB0cnlpbmcgdG8gcmVjb3ZlciBmcm9tIGEgZm9ybWVyIGVycm9yKS4KQEAgLTMwMyw3ICszMDQsNyBAQAogCX0KIAogCS8qIGlmIHdlIGhhdmUgYW4gZXJyb3IsIHBhc3MgQ0hFQ0tfQ09ORElUSU9OIGFzIHRoZSBTQ1NJIHN0YXR1cyBieXRlICovCi0JaWYgKGJsa19wY19yZXF1ZXN0KHJxKSAmJiAhcnEtPmVycm9ycykKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDICYmICFycS0+ZXJyb3JzKQogCQlycS0+ZXJyb3JzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCiAJaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocnEpKQpAQCAtMzExLDEzICszMTIsMTQgQEAKIAogCXN3aXRjaCAoc2Vuc2Vfa2V5KSB7CiAJY2FzZSBOT1RfUkVBRFk6Ci0JCWlmIChibGtfZnNfcmVxdWVzdChycSkgJiYgcnFfZGF0YV9kaXIocnEpID09IFdSSVRFKSB7CisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgJiYgcnFfZGF0YV9kaXIocnEpID09IFdSSVRFKSB7CiAJCQlpZiAoaWRlX2NkX2JyZWF0aGUoZHJpdmUsIHJxKSkKIAkJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKIAkJCWNkcm9tX3Nhd19tZWRpYV9jaGFuZ2UoZHJpdmUpOwogCi0JCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpICYmICFibGtfcnFfcXVpZXQocnEpKQorCQkJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyAmJgorCQkJICAgICEocnEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHRyYXkgb3BlblxuIiwKIAkJCQkJZHJpdmUtPm5hbWUpOwogCQl9CkBAIC0zMjYsNyArMzI4LDcgQEAKIAljYXNlIFVOSVRfQVRURU5USU9OOgogCQljZHJvbV9zYXdfbWVkaWFfY2hhbmdlKGRyaXZlKTsKIAotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDApCisJCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCQlyZXR1cm4gMDsKIAogCQkvKgpAQCAtMzUyLDcgKzM1NCw3IEBACiAJCSAqIE5vIHBvaW50IGluIHJldHJ5aW5nIGFmdGVyIGFuIGlsbGVnYWwgcmVxdWVzdCBvciBkYXRhCiAJCSAqIHByb3RlY3QgZXJyb3IuCiAJCSAqLwotCQlpZiAoIWJsa19ycV9xdWlldChycSkpCisJCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAiY29tbWFuZCBlcnJvciIsIHN0YXQpOwogCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCWJyZWFrOwpAQCAtMzYxLDIwICszNjMsMjAgQEAKIAkJICogTm8gcG9pbnQgaW4gcmUtdHJ5aW5nIGEgemlsbGlvbiB0aW1lcyBvbiBhIGJhZCBzZWN0b3IuCiAJCSAqIElmIHdlIGdvdCBoZXJlIHRoZSBlcnJvciBpcyBub3QgY29ycmVjdGFibGUuCiAJCSAqLwotCQlpZiAoIWJsa19ycV9xdWlldChycSkpCisJCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgIgogCQkJCQkiKGJhZCBzZWN0b3IpIiwgc3RhdCk7CiAJCWRvX2VuZF9yZXF1ZXN0ID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBCTEFOS19DSEVDSzoKIAkJLyogZGlzayBhcHBlYXJzIGJsYW5rPyAqLwotCQlpZiAoIWJsa19ycV9xdWlldChycSkpCisJCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgKGJsYW5rKSIsCiAJCQkJCXN0YXQpOwogCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCkKKwkJaWYgKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKIAkJCWJyZWFrOwogCQlpZiAoZXJyICYgfkFUQV9BQk9SVEVEKSB7CiAJCQkvKiBnbyB0byB0aGUgZGVmYXVsdCBoYW5kbGVyIGZvciBvdGhlciBlcnJvcnMgKi8KQEAgLTM4NSw3ICszODcsNyBAQAogCQkJZG9fZW5kX3JlcXVlc3QgPSAxOwogCX0KIAotCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCkgeworCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpIHsKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJfQpAQCAtNTA2LDE1ICs1MDgsMjIgQEAKIAlyZXR1cm4gKGZsYWdzICYgUkVRX0ZBSUxFRCkgPyAtRUlPIDogMDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2NkX2Vycm9yX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCisvKgorICogcmV0dXJucyB0cnVlIGlmIHJxIGhhcyBiZWVuIGNvbXBsZXRlZAorICovCitzdGF0aWMgYm9vbCBpZGVfY2RfZXJyb3JfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgbnJfYnl0ZXMgPSBjbWQtPm5ieXRlcyAtIGNtZC0+bmxlZnQ7CiAKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJbnJfYnl0ZXMgLT0gY21kLT5sYXN0X3hmZXJfbGVuOwogCi0JaWYgKG5yX2J5dGVzID4gMCkKKwlpZiAobnJfYnl0ZXMgPiAwKSB7CiAJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgbnJfYnl0ZXMpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgY2Ryb21fbmV3cGNfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC01MjUsNyArNTM0LDcgQEAKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7CiAJaW50IGRtYV9lcnJvciA9IDAsIGRtYSwgdGhpc2xlbiwgdXB0b2RhdGUgPSAwOwogCWludCB3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpID8gMSA6IDAsIHJjID0gMDsKLQlpbnQgc2Vuc2UgPSBibGtfc2Vuc2VfcmVxdWVzdChycSk7CisJaW50IHNlbnNlID0gKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TRU5TRSk7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJdTE2IGxlbjsKIAl1OCBpcmVhc29uLCBzdGF0OwpAQCAtNTY4LDcgKzU3Nyw3IEBACiAKIAlpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oZHJpdmUsICZsZW4sICZpcmVhc29uKTsKIAotCXRoaXNsZW4gPSBibGtfZnNfcmVxdWVzdChycSkgPyBsZW4gOiBjbWQtPm5sZWZ0OworCXRoaXNsZW4gPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSA/IGxlbiA6IGNtZC0+bmxlZnQ7CiAJaWYgKHRoaXNsZW4gPiBsZW4pCiAJCXRoaXNsZW4gPSBsZW47CiAKQEAgLTU3Nyw3ICs1ODYsNyBAQAogCiAJLyogSWYgRFJRIGlzIGNsZWFyLCB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLiAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKLQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgeworCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7CiAJCQkvKgogCQkJICogSWYgd2UncmUgbm90IGRvbmUgcmVhZGluZy93cml0aW5nLCBjb21wbGFpbi4KIAkJCSAqIE90aGVyd2lzZSwgY29tcGxldGUgdGhlIGNvbW1hbmQgbm9ybWFsbHkuCkBAIC01OTEsNyArNjAwLDcgQEAKIAkJCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCQkJCXVwdG9kYXRlID0gMDsKIAkJCX0KLQkJfSBlbHNlIGlmICghYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCQlpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChkcml2ZSwgY21kKTsKIAogCQkJdXB0b2RhdGUgPSBjbWQtPm5sZWZ0ID8gMCA6IDE7CkBAIC02NDAsNyArNjQ5LDcgQEAKIAogCS8qIHBhZCwgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKGxlbiA+IDApIHsKLQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwIHx8IHdyaXRlID09IDApCisJCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMgfHwgd3JpdGUgPT0gMCkKIAkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBsZW4pOwogCQllbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb25mdXNlZCwgbWlzc2luZyBkYXRhXG4iLApAQCAtNjQ5LDExICs2NTgsMTEgQEAKIAkJfQogCX0KIAotCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXRpbWVvdXQgPSBycS0+dGltZW91dDsKIAl9IGVsc2UgewogCQl0aW1lb3V0ID0gQVRBUElfV0FJVF9QQzsKLQkJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpCisJCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCQlleHBpcnkgPSBpZGVfY2RfZXhwaXJ5OwogCX0KIApAQCAtNjYyLDcgKzY3MSw3IEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogCiBvdXRfZW5kOgotCWlmIChibGtfcGNfcmVxdWVzdChycSkgJiYgcmMgPT0gMCkgeworCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMgJiYgcmMgPT0gMCkgewogCQlycS0+cmVzaWRfbGVuID0gMDsKIAkJYmxrX2VuZF9yZXF1ZXN0X2FsbChycSwgMCk7CiAJCWh3aWYtPnJxID0gTlVMTDsKQEAgLTY3MCw3ICs2NzksNyBAQAogCQlpZiAoc2Vuc2UgJiYgdXB0b2RhdGUpCiAJCQlpZGVfY2RfY29tcGxldGVfZmFpbGVkX3JxKGRyaXZlLCBycSk7CiAKLQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgeworCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKSB7CiAJCQlpZiAoY21kLT5ubGVmdCA9PSAwKQogCQkJCXVwdG9kYXRlID0gMTsKIAkJfSBlbHNlIHsKQEAgLTY3OSwxMCArNjg4LDExIEBACiAJCX0KIAogCQlpZiAodXB0b2RhdGUgPT0gMCAmJiBycS0+YmlvKQotCQkJaWRlX2NkX2Vycm9yX2NtZChkcml2ZSwgY21kKTsKKwkJCWlmIChpZGVfY2RfZXJyb3JfY21kKGRyaXZlLCBjbWQpKQorCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAogCQkvKiBtYWtlIHN1cmUgaXQncyBmdWxseSBlbmRlZCAqLwotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDApIHsKKwkJaWYgKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykgewogCQkJcnEtPnJlc2lkX2xlbiAtPSBjbWQtPm5ieXRlcyAtIGNtZC0+bmxlZnQ7CiAJCQlpZiAodXB0b2RhdGUgPT0gMCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkpCiAJCQkJcnEtPnJlc2lkX2xlbiArPSBjbWQtPmxhc3RfeGZlcl9sZW47CkBAIC03NDIsNyArNzUyLDcgQEAKIAlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgiLAogCQkJCSAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlKTsKIAotCWlmIChibGtfcGNfcmVxdWVzdChycSkpCisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAJZWxzZQogCQlycS0+Y21kX2ZsYWdzICY9IH5SRVFfRkFJTEVEOwpAQCAtNzgzLDIxICs3OTMsMjYgQEAKIAlpZiAoZHJpdmUtPmRlYnVnX21hc2sgJiBJREVfREJHX1JRKQogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9jZF9kb19yZXF1ZXN0Iik7CiAKLQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJc3dpdGNoIChycS0+Y21kX3R5cGUpIHsKKwljYXNlIFJFUV9UWVBFX0ZTOgogCQlpZiAoY2Ryb21fc3RhcnRfcncoZHJpdmUsIHJxKSA9PSBpZGVfc3RvcHBlZCkKIAkJCWdvdG8gb3V0X2VuZDsKLQl9IGVsc2UgaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSB8fCBibGtfcGNfcmVxdWVzdChycSkgfHwKLQkJICAgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykgeworCQlicmVhazsKKwljYXNlIFJFUV9UWVBFX1NFTlNFOgorCWNhc2UgUkVRX1RZUEVfQkxPQ0tfUEM6CisJY2FzZSBSRVFfVFlQRV9BVEFfUEM6CiAJCWlmICghcnEtPnRpbWVvdXQpCiAJCQlycS0+dGltZW91dCA9IEFUQVBJX1dBSVRfUEM7CiAKIAkJY2Ryb21fZG9fYmxvY2tfcGMoZHJpdmUsIHJxKTsKLQl9IGVsc2UgaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCWJyZWFrOworCWNhc2UgUkVRX1RZUEVfU1BFQ0lBTDoKIAkJLyogcmlnaHQgbm93IHRoaXMgY2FuIG9ubHkgYmUgYSByZXNldC4uLiAqLwogCQl1cHRvZGF0ZSA9IDE7CiAJCWdvdG8gb3V0X2VuZDsKLQl9IGVsc2UKKwlkZWZhdWx0OgogCQlCVUcoKTsKKwl9CiAKIAkvKiBwcmVwYXJlIHNlbnNlIHJlcXVlc3QgZm9yIHRoaXMgY29tbWFuZCAqLwogCWlkZV9wcmVwX3NlbnNlKGRyaXZlLCBycSk7CkBAIC04MDksNyArODI0LDcgQEAKIAogCWNtZC5ycSA9IHJxOwogCi0JaWYgKGJsa19mc19yZXF1ZXN0KHJxKSB8fCBibGtfcnFfYnl0ZXMocnEpKSB7CisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyB8fCBibGtfcnFfYnl0ZXMocnEpKSB7CiAJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBibGtfcnFfYnl0ZXMocnEpKTsKIAkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CiAJfQpAQCAtMTM2NSw5ICsxMzgwLDkgQEAKIAogc3RhdGljIGludCBpZGVfY2Ryb21fcHJlcF9mbihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChibGtfZnNfcmVxdWVzdChycSkpCisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKIAkJcmV0dXJuIGlkZV9jZHJvbV9wcmVwX2ZzKHEsIHJxKTsKLQllbHNlIGlmIChibGtfcGNfcmVxdWVzdChycSkpCisJZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQogCQlyZXR1cm4gaWRlX2Nkcm9tX3ByZXBfcGMocnEpOwogCiAJcmV0dXJuIDA7CkBAIC0xNTg0LDE3ICsxNTk5LDE5IEBACiAKIHN0YXRpYyBpbnQgaWRlY2Rfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBpZGVfY2RfZ2V0KGJkZXYtPmJkX2Rpc2spOwotCWludCByYyA9IC1FTk9NRU07CisJc3RydWN0IGNkcm9tX2luZm8gKmluZm87CisJaW50IHJjID0gLUVOWElPOwogCisJbG9ja19rZXJuZWwoKTsKKwlpbmZvID0gaWRlX2NkX2dldChiZGV2LT5iZF9kaXNrKTsKIAlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5YSU87CisJCWdvdG8gb3V0OwogCiAJcmMgPSBjZHJvbV9vcGVuKCZpbmZvLT5kZXZpbmZvLCBiZGV2LCBtb2RlKTsKLQogCWlmIChyYyA8IDApCiAJCWlkZV9jZF9wdXQoaW5mbyk7Ci0KK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNjAyLDkgKzE2MTksMTEgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9kcnZfZyhkaXNrLCBjZHJvbV9pbmZvKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJY2Ryb21fcmVsZWFzZSgmaW5mby0+ZGV2aW5mbywgbW9kZSk7CiAKIAlpZGVfY2RfcHV0KGluZm8pOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTY0OCw3ICsxNjY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVjZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCitzdGF0aWMgaW50IGlkZWNkX2xvY2tlZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGlkZV9kcnZfZyhiZGV2LT5iZF9kaXNrLCBjZHJvbV9pbmZvKTsKQEAgLTE2NzAsNiArMTY4OSwxOSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgaWRlY2RfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBpZGVjZF9sb2NrZWRfaW9jdGwoYmRldiwgbW9kZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKwogc3RhdGljIGludCBpZGVjZF9tZWRpYV9jaGFuZ2VkKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gaWRlX2Rydl9nKGRpc2ssIGNkcm9tX2luZm8pOwpAQCAtMTY5MCw3ICsxNzIyLDcgQEAKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBpZGVjZF9vcGVuLAogCS5yZWxlYXNlCQk9IGlkZWNkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAkJPSBpZGVjZF9pb2N0bCwKKwkuaW9jdGwJCQk9IGlkZWNkX2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkCQk9IGlkZWNkX21lZGlhX2NoYW5nZWQsCiAJLnJldmFsaWRhdGVfZGlzawk9IGlkZWNkX3JldmFsaWRhdGVfZGlzawogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZF9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKaW5kZXggMDI3MTJiZi4uNzY2YjNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMKQEAgLTQ1NCw3ICs0NTQsNyBAQAogCSAgIHRvdWNoIGl0IGF0IGFsbC4gKi8KIAogCWlmIChjZ2MtPmRhdGFfZGlyZWN0aW9uID09IENHQ19EQVRBX1dSSVRFKQotCQlmbGFncyB8PSBSRVFfUlc7CisJCWZsYWdzIHw9IFJFUV9XUklURTsKIAogCWlmIChjZ2MtPnNlbnNlKQogCQltZW1zZXQoY2djLT5zZW5zZSwgMCwgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3NlbnNlKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCmluZGV4IDBiNzgxNWQuLjJhNGNiOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtOTgsOSArOTcsOCBAQAogICAgIGluZm8tPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gaW5mbzsKIAotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDM7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworICAgIGxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKQEAgLTIyOSwyNCArMjI3LDI3IEBACiAKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcGRldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwogCQlwZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKLQkJcGRldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcGRldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcGRldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKSB7CisJCQlwZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJCXBkZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJfQogCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJcGRldi0+aW8uTnVtUG9ydHMxID0gODsKLQkJCXBkZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IChzdGstPmlzX2ttZSkgPyAyIDogMTsKLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwZGV2LCAmcGRldi0+aW8pICE9IDApCisJCQlwZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gODsKKwkJCXBkZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBkZXYtPnJlc291cmNlWzFdLT5lbmQgPSAoc3RrLT5pc19rbWUpID8gMiA6IDE7CisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldikgIT0gMCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDI7CisJCQlzdGstPmN0bF9iYXNlID0gcGRldi0+cmVzb3VyY2VbMV0tPnN0YXJ0OwogCQl9IGVsc2UgaWYgKChpby0+bndpbiA9PSAxKSAmJiAoaW8tPndpblswXS5sZW4gPj0gMTYpKSB7Ci0JCQlwZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKLQkJCXBkZXYtPmlvLk51bVBvcnRzMiA9IDA7Ci0JCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldiwgJnBkZXYtPmlvKSAhPSAwKQorCQkJcGRldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOworCQkJcGRldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocGRldikgIT0gMCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXN0ay0+Y3RsX2Jhc2UgPSBwZGV2LT5pby5CYXNlUG9ydDEgKyAweDBlOworCQkJc3RrLT5jdGxfYmFzZSA9IHBkZXYtPnJlc291cmNlWzBdLT5zdGFydCArIDB4MGU7CiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCS8qIElmIHdlJ3ZlIGdvdCB0aGlzIGZhciwgd2UncmUgZG9uZSAqLwpAQCAtMjgwLDcgKzI4MSw3IEBACiAJICAgIGlmIChwY21jaWFfbG9vcF9jb25maWcobGluaywgcGNtY2lhX2NoZWNrX29uZV9jb25maWcsIHN0aykpCiAJCSAgICBnb3RvIGZhaWxlZDsgLyogTm8gc3VpdGFibGUgY29uZmlnIGZvdW5kICovCiAgICAgfQotICAgIGlvX2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaW9fYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICAgICBjdGxfYmFzZSA9IHN0ay0+Y3RsX2Jhc2U7CiAKICAgICBpZiAoIWxpbmstPmlycSkKQEAgLTI5Nyw3ICsyOTgsNyBAQAogCW91dGIoMHg4MSwgY3RsX2Jhc2UrMSk7CiAKICAgICAgaG9zdCA9IGlkZWNzX3JlZ2lzdGVyKGlvX2Jhc2UsIGN0bF9iYXNlLCBsaW5rLT5pcnEsIGxpbmspOwotICAgICBpZiAoaG9zdCA9PSBOVUxMICYmIGxpbmstPmlvLk51bVBvcnRzMSA9PSAweDIwKSB7CisgICAgIGlmIChob3N0ID09IE5VTEwgJiYgcmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkgPT0gMHgyMCkgewogCSAgICBvdXRiKDB4MDIsIGN0bF9iYXNlICsgMHgxMCk7CiAJICAgIGhvc3QgPSBpZGVjc19yZWdpc3Rlcihpb19iYXNlICsgMHgxMCwgY3RsX2Jhc2UgKyAweDEwLAogCQkJCSAgbGluay0+aXJxLCBsaW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IDMzZDY1MDMuLjc0MzNlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtMTg0LDcgKzE4NCw3IEBACiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCiAJQlVHX09OKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfQkxPQ0tFRCk7Ci0JQlVHX09OKCFibGtfZnNfcmVxdWVzdChycSkpOworCUJVR19PTihycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpOwogCiAJbGVkdHJpZ19pZGVfYWN0aXZpdHkoKTsKIApAQCAtNDI3LDEwICs0MjcsMTUgQEAKIAkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9IUEE7IC8qIGRpc2FibGUgSFBBIG9uIHJlc3VtZSAqLwogfQogCi1zdGF0aWMgdm9pZCBpZGVkaXNrX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgaWRlZGlza19wcmVwX2ZuKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gcS0+cXVldWVkYXRhOwotCXN0cnVjdCBpZGVfY21kICpjbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CisJc3RydWN0IGlkZV9jbWQgKmNtZDsKKworCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkxVU0gpKQorCQlyZXR1cm4gQkxLUFJFUF9PSzsKKworCWNtZCA9IGttYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKIAogCS8qIEZJWE1FOiBtYXAgc3RydWN0IGlkZV90YXNrZmlsZSBvbiBycS0+Y21kW10gKi8KIAlCVUdfT04oY21kID09IE5VTEwpOwpAQCAtNDQ4LDYgKzQ1Myw4IEBACiAJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFOwogCXJxLT5zcGVjaWFsID0gY21kOwogCWNtZC0+cnEgPSBycTsKKworCXJldHVybiBCTEtQUkVQX09LOwogfQogCiBpZGVfZGV2c2V0X2dldChtdWx0Y291bnQsIG11bHRfY291bnQpOwpAQCAtNTEzLDcgKzUyMCw2IEBACiB7CiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAl1bnNpZ25lZCBvcmRlcmVkID0gUVVFVUVfT1JERVJFRF9OT05FOwotCXByZXBhcmVfZmx1c2hfZm4gKnByZXBfZm4gPSBOVUxMOwogCiAJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfV0NBQ0hFKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBjYXBhY2l0eTsKQEAgLTUzOCwxMiArNTQ0LDEyIEBACiAKIAkJaWYgKGJhcnJpZXIpIHsKIAkJCW9yZGVyZWQgPSBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNIOwotCQkJcHJlcF9mbiA9IGlkZWRpc2tfcHJlcGFyZV9mbHVzaDsKKwkJCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgaWRlZGlza19wcmVwX2ZuKTsKIAkJfQogCX0gZWxzZQogCQlvcmRlcmVkID0gUVVFVUVfT1JERVJFRF9EUkFJTjsKIAotCWJsa19xdWV1ZV9vcmRlcmVkKGRyaXZlLT5xdWV1ZSwgb3JkZXJlZCwgcHJlcF9mbik7CisJYmxrX3F1ZXVlX29yZGVyZWQoZHJpdmUtPnF1ZXVlLCBvcmRlcmVkKTsKIH0KIAogaWRlX2RldnNldF9nZXRfZmxhZyh3Y2FjaGUsIElERV9ERkxBR19XQ0FDSEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrX2lvY3RsLmMKaW5kZXggN2I3ODNkZC4uZWM5NGM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19pb2N0bC5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImlkZS1kaXNrLmgiCiAKQEAgLTE4LDkgKzE5LDEzIEBACiB7CiAJaW50IGVycjsKIAorCWxvY2tfa2VybmVsKCk7CiAJZXJyID0gaWRlX3NldHRpbmdfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnLCBpZGVfZGlza19pb2N0bF9zZXR0aW5ncyk7CiAJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKLQlyZXR1cm4gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnKTsKKwllcnIgPSBnZW5lcmljX2lkZV9pb2N0bChkcml2ZSwgYmRldiwgY21kLCBhcmcpOworb3V0OgorCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwppbmRleCBlOWFiZjJjLi5jMGFhOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZWguYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAogCS8qIHJldHJ5IG9ubHkgIm5vcm1hbCIgSS9POiAqLwotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJaWYgKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykgewogCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewogCQkJc3RydWN0IGlkZV9jbWQgKmNtZCA9IHJxLT5zcGVjaWFsOwogCkBAIC0xNDYsNyArMTQ2LDggQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAKLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpIHsKKwlpZiAocnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwgJiYKKwkgICAgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpIHsKIAkJaWYgKGVyciA8PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKIAkJCXJxLT5lcnJvcnMgPSAtRUlPOwogCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIGVyciA/IGVyciA6IDAsIGJsa19ycV9ieXRlcyhycSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCmluZGV4IDQ3MTNiZGMuLjU0MDZiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKQEAgLTczLDcgKzczLDcgQEAKIAkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKIAlpZiAocGMtPmNbMF0gPT0gR1BDTURfUkVBRF8xMCB8fCBwYy0+Y1swXSA9PSBHUENNRF9XUklURV8xMCB8fAotCSAgICAocnEgJiYgYmxrX3BjX3JlcXVlc3QocnEpKSkKKwkgICAgKHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykpCiAJCXVwdG9kYXRlID0gMTsgLyogRklYTUUgKi8KIAllbHNlIGlmIChwYy0+Y1swXSA9PSBHUENNRF9SRVFVRVNUX1NFTlNFKSB7CiAKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCSAgICAgICAiQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0KIAotCWlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpCiAJCXJxLT5lcnJvcnMgPSB1cHRvZGF0ZSA/IDAgOiBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAKIAlyZXR1cm4gdXB0b2RhdGU7CkBAIC0yMDcsNyArMjA3LDcgQEAKIAltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAogCXBjLT5ycSA9IHJxOwotCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1JXKQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1dSSVRFKQogCQlwYy0+ZmxhZ3MgfD0gUENfRkxBR19XUklUSU5HOwogCiAJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfRE1BX09LOwpAQCAtMjQ3LDE0ICsyNDcsMTYgQEAKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CiAKLQkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU1BFQ0lBTCkgewogCQkJcnEtPmVycm9ycyA9IDA7CiAJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGJsa19ycV9ieXRlcyhycSkpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UKIAkJCWdvdG8gb3V0X2VuZDsKIAl9Ci0JaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgeworCisJc3dpdGNoIChycS0+Y21kX3R5cGUpIHsKKwljYXNlIFJFUV9UWVBFX0ZTOgogCQlpZiAoKChsb25nKWJsa19ycV9wb3MocnEpICUgZmxvcHB5LT5ic19mYWN0b3IpIHx8CiAJCSAgICAoYmxrX3JxX3NlY3RvcnMocnEpICUgZmxvcHB5LT5ic19mYWN0b3IpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5zdXBwb3J0ZWQgci93IHJxIHNpemVcbiIsCkBAIC0yNjMsMTMgKzI2NSwxOCBAQAogCQl9CiAJCXBjID0gJmZsb3BweS0+cXVldWVkX3BjOwogCQlpZGVmbG9wcHlfY3JlYXRlX3J3X2NtZChkcml2ZSwgcGMsIHJxLCAodW5zaWduZWQgbG9uZylibG9jayk7Ci0JfSBlbHNlIGlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSB8fCBibGtfc2Vuc2VfcmVxdWVzdChycSkpIHsKKwkJYnJlYWs7CisJY2FzZSBSRVFfVFlQRV9TUEVDSUFMOgorCWNhc2UgUkVRX1RZUEVfU0VOU0U6CiAJCXBjID0gKHN0cnVjdCBpZGVfYXRhcGlfcGMgKilycS0+c3BlY2lhbDsKLQl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgeworCQlicmVhazsKKwljYXNlIFJFUV9UWVBFX0JMT0NLX1BDOgogCQlwYyA9ICZmbG9wcHktPnF1ZXVlZF9wYzsKIAkJaWRlZmxvcHB5X2Jsb2NrcGNfY21kKGZsb3BweSwgcGMsIHJxKTsKLQl9IGVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJQlVHKCk7CisJfQogCiAJaWRlX3ByZXBfc2Vuc2UoZHJpdmUsIHJxKTsKIApAQCAtMjgwLDcgKzI4Nyw3IEBACiAKIAljbWQucnEgPSBycTsKIAotCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgYmxrX3JxX2J5dGVzKHJxKSkgeworCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgfHwgYmxrX3JxX2J5dGVzKHJxKSkgewogCQlpZGVfaW5pdF9zZ19jbWQoJmNtZCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCWlkZV9tYXBfc2coZHJpdmUsICZjbWQpOwogCX0KQEAgLTI5MCw3ICsyOTcsNyBAQAogCXJldHVybiBpZGVfZmxvcHB5X2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CiBvdXRfZW5kOgogCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwotCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJaWYgKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUyAmJiBycS0+ZXJyb3JzID09IDApCiAJCXJxLT5lcnJvcnMgPSAtRUlPOwogCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgLUVJTywgYmxrX3JxX2J5dGVzKHJxKSk7CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCmluZGV4IDljMjI4ODIuLmZkM2QwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCkBAIC0yNzUsMTIgKzI3NiwxNSBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBlcnI7CiAKLQlpZiAoY21kID09IENEUk9NRUpFQ1QgfHwgY21kID09IENEUk9NX0xPQ0tET09SKQotCQlyZXR1cm4gaWRlX2Zsb3BweV9sb2NrZG9vcihkcml2ZSwgJnBjLCBhcmcsIGNtZCk7CisJbG9ja19rZXJuZWwoKTsKKwlpZiAoY21kID09IENEUk9NRUpFQ1QgfHwgY21kID09IENEUk9NX0xPQ0tET09SKSB7CisJCWVyciA9IGlkZV9mbG9wcHlfbG9ja2Rvb3IoZHJpdmUsICZwYywgYXJnLCBjbWQpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBpZGVfZmxvcHB5X2Zvcm1hdF9pb2N0bChkcml2ZSwgJnBjLCBtb2RlLCBjbWQsIGFyZ3ApOwogCWlmIChlcnIgIT0gLUVOT1RUWSkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXQ7CiAKIAkvKgogCSAqIHNraXAgU0NTSV9JT0NUTF9TRU5EX0NPTU1BTkQgKGRlcHJlY2F0ZWQpCkBAIC0yOTMsNSArMjk3LDcgQEAKIAlpZiAoZXJyID09IC1FTk9UVFkpCiAJCWVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBiZGV2LCBjbWQsIGFyZyk7CiAKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKaW5kZXggNzkzOTk1My4uNzBhZWViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMjM3LDYgKzIzOCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaWRlX2dkX3VubG9ja2VkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGlkZV9nZF9vcGVuKGJkZXYsIG1vZGUpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKwogc3RhdGljIGludCBpZGVfZ2RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmlka3AgPSBpZGVfZHJ2X2coZGlzaywgaWRlX2Rpc2tfb2JqKTsKQEAgLTI0NCw2ICsyNTcsNyBAQAogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCisJbG9ja19rZXJuZWwoKTsKIAlpZiAoaWRrcC0+b3BlbmVycyA9PSAxKQogCQlkcml2ZS0+ZGlza19vcHMtPmZsdXNoKGRyaXZlKTsKIApAQCAtMjU1LDYgKzI2OSw3IEBACiAJaWRrcC0+b3BlbmVycy0tOwogCiAJaWRlX2Rpc2tfcHV0KGlka3ApOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzIxLDkgKzMzNiw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgaWRlX2dkX29wcyA9IHsKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQkJPSBpZGVfZ2Rfb3BlbiwKKwkub3BlbgkJCT0gaWRlX2dkX3VubG9ja2VkX29wZW4sCiAJLnJlbGVhc2UJCT0gaWRlX2dkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAkJPSBpZGVfZ2RfaW9jdGwsCisJLmlvY3RsCQkJPSBpZGVfZ2RfaW9jdGwsCiAJLmdldGdlbwkJCT0gaWRlX2dkX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZAkJPSBpZGVfZ2RfbWVkaWFfY2hhbmdlZCwKIAkudW5sb2NrX25hdGl2ZV9jYXBhY2l0eQk9IGlkZV9nZF91bmxvY2tfbmF0aXZlX2NhcGFjaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCAxNzJhYzkyLi5hMzgxYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAKIHZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JdTggZHJ2X3JlcSA9IGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5ycV9kaXNrOworCXU4IGRydl9yZXEgPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpICYmIHJxLT5ycV9kaXNrOwogCXU4IG1lZGlhID0gZHJpdmUtPm1lZGlhOwogCiAJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAl9IGVsc2UgewogCQlpZiAobWVkaWEgPT0gaWRlX3RhcGUpCiAJCQlycS0+ZXJyb3JzID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwotCQllbHNlIGlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCWVsc2UgaWYgKHJxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUyAmJiBycS0+ZXJyb3JzID09IDApCiAJCQlycS0+ZXJyb3JzID0gLUVJTzsKIAl9CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogewogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAKLQlCVUdfT04oIWJsa19ycV9zdGFydGVkKHJxKSk7CisJQlVHX09OKCEocnEtPmNtZF9mbGFncyAmIFJFUV9TVEFSVEVEKSk7CiAKICNpZmRlZiBERUJVRwogCXByaW50aygiJXM6IHN0YXJ0X3JlcXVlc3Q6IGN1cnJlbnQ9MHglMDhseFxuIiwKQEAgLTM1Myw3ICszNTMsNyBAQAogCQkJICAgIHBtLT5wbV9zdGVwID09IElERV9QTV9DT01QTEVURUQpCiAJCQkJaWRlX2NvbXBsZXRlX3BtX3JxKGRyaXZlLCBycSk7CiAJCQlyZXR1cm4gc3RhcnRzdG9wOwotCQl9IGVsc2UgaWYgKCFycS0+cnFfZGlzayAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkKKwkJfSBlbHNlIGlmICghcnEtPnJxX2Rpc2sgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1NQRUNJQUwpCiAJCQkvKgogCQkJICogVE9ETzogT25jZSBhbGwgVUxEcyBoYXZlIGJlZW4gbW9kaWZpZWQgdG8KIAkJCSAqIGNoZWNrIGZvciBzcGVjaWZpYyBvcCBjb2RlcyByYXRoZXIgdGhhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBtLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwppbmRleCAxYzA4MzExLi45MjQwNjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcG0uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwpAQCAtMTkxLDEwICsxOTEsMTAgQEAKIAogI2lmZGVmIERFQlVHX1BNCiAJcHJpbnRrKCIlczogY29tcGxldGluZyBQTSByZXF1ZXN0LCAlc1xuIiwgZHJpdmUtPm5hbWUsCi0JICAgICAgIGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpID8gInN1c3BlbmQiIDogInJlc3VtZSIpOworCSAgICAgICAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1NVU1BFTkQpID8gInN1c3BlbmQiIDogInJlc3VtZSIpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSkKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1NVU1BFTkQpCiAJCWJsa19zdG9wX3F1ZXVlKHEpOwogCWVsc2UKIAkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0JMT0NLRUQ7CkBAIC0yMTAsMTEgKzIxMCwxMSBAQAogewogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5zcGVjaWFsOwogCi0JaWYgKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpICYmCisJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9TVVNQRU5EICYmCiAJICAgIHBtLT5wbV9zdGVwID09IElERV9QTV9TVEFSVF9TVVNQRU5EKQogCQkvKiBNYXJrIGRyaXZlIGJsb2NrZWQgd2hlbiBzdGFydGluZyB0aGUgc3VzcGVuZCBzZXF1ZW5jZS4gKi8KIAkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfQkxPQ0tFRDsKLQllbHNlIGlmIChibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpICYmCisJZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1JFU1VNRSAmJgogCQkgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX1NUQVJUX1JFU1VNRSkgewogCQkvKgogCQkgKiBUaGUgZmlyc3QgdGhpbmcgd2UgZG8gb24gd2FrZXVwIGlzIHRvIHdhaXQgZm9yIEJTWSBiaXQgdG8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IGIwNzIzMjguLjZkNjIyY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgpAQCAtNTc3LDcgKzU3OCw4IEBACiAJCSAgICAgIHJxLT5jbWRbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpYmxrX3JxX3BvcyhycSksCiAJCSAgICAgIGJsa19ycV9zZWN0b3JzKHJxKSk7CiAKLQlCVUdfT04oIShibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSB8fCBibGtfc2Vuc2VfcmVxdWVzdChycSkpKTsKKwlCVUdfT04oIShycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU1BFQ0lBTCB8fAorCQkgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX1NFTlNFKSk7CiAKIAkvKiBSZXRyeSBhIGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLwogCWlmIChkcml2ZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CkBAIC0xOTA1LDcgKzE5MDcsMTEgQEAKIAogc3RhdGljIGludCBpZGV0YXBlX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfdGFwZV9nZXQoYmRldi0+YmRfZGlzaywgZmFsc2UsIDApOworCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGU7CisKKwlsb2NrX2tlcm5lbCgpOworCXRhcGUgPSBpZGVfdGFwZV9nZXQoYmRldi0+YmRfZGlzaywgZmFsc2UsIDApOworCXVubG9ja19rZXJuZWwoKTsKIAogCWlmICghdGFwZSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE5MTcsNyArMTkyMywxMCBAQAogewogCXN0cnVjdCBpZGVfdGFwZV9vYmogKnRhcGUgPSBpZGVfZHJ2X2coZGlzaywgaWRlX3RhcGVfb2JqKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWRlX3RhcGVfcHV0KHRhcGUpOworCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xOTI2LDkgKzE5MzUsMTQgQEAKIHsKIAlzdHJ1Y3QgaWRlX3RhcGVfb2JqICp0YXBlID0gaWRlX2Rydl9nKGJkZXYtPmJkX2Rpc2ssIGlkZV90YXBlX29iaik7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gdGFwZS0+ZHJpdmU7Ci0JaW50IGVyciA9IGdlbmVyaWNfaWRlX2lvY3RsKGRyaXZlLCBiZGV2LCBjbWQsIGFyZyk7CisJaW50IGVycjsKKworCWxvY2tfa2VybmVsKCk7CisJZXJyID0gZ2VuZXJpY19pZGVfaW9jdGwoZHJpdmUsIGJkZXYsIGNtZCwgYXJnKTsKIAlpZiAoZXJyID09IC1FSU5WQUwpCiAJCWVyciA9IGlkZXRhcGVfYmxrZGV2X2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTkzNiw3ICsxOTUwLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JCT0gaWRldGFwZV9vcGVuLAogCS5yZWxlYXNlCT0gaWRldGFwZV9yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBpZGV0YXBlX2lvY3RsLAorCS5pb2N0bAkJPSBpZGV0YXBlX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBpZGVfdGFwZV9wcm9iZShpZGVfZHJpdmVfdCAqZHJpdmUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDY3ZmI3MzUuLjM0Yjk4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC00ODAsMTMgKzQ4MCw5IEBACiAJdTE2IG5zZWN0CQk9IDA7CiAJY2hhciBfX3VzZXIgKmJ1ZiA9IChjaGFyIF9fdXNlciAqKWFyZzsKIAotCXJlcV90YXNrID0ga3phbGxvYyh0YXNrc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlcV90YXNrID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChjb3B5X2Zyb21fdXNlcihyZXFfdGFzaywgYnVmLCB0YXNrc2l6ZSkpIHsKLQkJa2ZyZWUocmVxX3Rhc2spOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisJcmVxX3Rhc2sgPSBtZW1kdXBfdXNlcihidWYsIHRhc2tzaXplKTsKKwlpZiAoSVNfRVJSKHJlcV90YXNrKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxX3Rhc2spOwogCiAJdGFza291dCA9IHJlcV90YXNrLT5vdXRfc2l6ZTsKIAl0YXNraW4gID0gcmVxX3Rhc2stPmluX3NpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCmluZGV4IDFkODBmMWYuLjcwMDI3NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlwYWlyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CiAJaWYgKHBhaXIpCi0JCXNhZmUgPSBtaW4oc2FmZSwgcGFpci0+cGlvX21vZGUgLSBYRkVSX1BJT18wKTsKKwkJc2FmZSA9IG1pbl90KHU4LCBzYWZlLCBwYWlyLT5waW9fbW9kZSAtIFhGRVJfUElPXzApOwogCXR4NDkzOGlkZV90dW5lX2VidXNjKHBkYXRhLT5lYnVzX2NoLCBwZGF0YS0+Z2J1c19jbG9jaywgc2FmZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKaW5kZXggM2M3MzY3Ny4uYmVkM2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAJcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCWlmIChwYWlyKQotCQlzYWZlID0gbWluKHNhZmUsIHBhaXItPnBpb19tb2RlIC0gWEZFUl9QSU9fMCk7CisJCXNhZmUgPSBtaW5fdCh1OCwgc2FmZSwgcGFpci0+cGlvX21vZGUgLSBYRkVSX1BJT18wKTsKIAkvKgogCSAqIFVwZGF0ZSBDb21tYW5kIFRyYW5zZmVyIE1vZGUgZm9yIG1hc3Rlci9zbGF2ZSBhbmQgRGF0YQogCSAqIFRyYW5zZmVyIE1vZGUgZm9yIHRoaXMgZHJpdmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCmluZGV4IDEwMWY0MDAuLmQyYTA5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCkBAIC03OSw3ICs3OSw3IEBACiAJeyAidnQ4MjYxIiwJUENJX0RFVklDRV9JRF9WSUFfODI2MSwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyMzdzIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN1MsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDY0MTAiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDEwLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAotCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweGZmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ2NDE1IiwJUENJX0RFVklDRV9JRF9WSUFfNjQxNSwgICAgIDB4MDAsIDB4ZmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwppbmRleCBhZGFlZmFiLi5jNWEwMzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2aWRlb19jYXJkKiBmaWxlX3RvX3ZpZGVvX2NhcmQoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgdmlkZW9fY2FyZCopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gZmlsZS0+cHJpdmF0ZV9kYXRhOwogfQogCiAvKioqIEZSQU1FIE1FVEhPRFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjEwLDcgKzYxMCw3IEBACiAJfSBlbHNlIHsKIAogCQl1MzIgdHJhbnNtaXRfc2VjLCB0cmFuc21pdF9jeWM7Ci0JCXUzMiB0c19jeWMsIHRzX29mZjsKKwkJdTMyIHRzX2N5YzsKIAogCQkvKiBETUEgaXMgc3RvcHBlZCwgc28gdGhpcyBpcyB0aGUgdmVyeSBmaXJzdCBmcmFtZSAqLwogCQl2aWRlby0+YWN0aXZlX2ZyYW1lID0gdGhpc19mcmFtZTsKQEAgLTYzNiw3ICs2MzYsNiBAQAogCQl0cmFuc21pdF9zZWMgKz0gdHJhbnNtaXRfY3ljLzgwMDA7CiAJCXRyYW5zbWl0X2N5YyAlPSA4MDAwOwogCi0JCXRzX29mZiA9IGN0X29mZjsKIAkJdHNfY3ljID0gdHJhbnNtaXRfY3ljICsgMzsKIAkJdHNfY3ljICU9IDgwMDA7CiAKQEAgLTE3ODQsNyArMTc4Myw3IEBACiAJc3RydWN0IHZpZGVvX2NhcmQgKnZpZGVvID0gTlVMTDsKIAogCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKLQkJdmlkZW8gPSAoc3RydWN0IHZpZGVvX2NhcmQqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXZpZGVvID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJfSBlbHNlIHsKIAkJLyogbG9vayB1cCB0aGUgY2FyZCBieSBJRCAqLwpAQCAtMjAwNCw3ICsyMDAzLDcgQEAKIAogCQlpbnQgc29mPTA7IC8qIHN0YXJ0LW9mLWZyYW1lIGZsYWcgKi8KIAkJc3RydWN0IGZyYW1lICpmOwotCQl1MTYgcGFja2V0X2xlbmd0aCwgcGFja2V0X3RpbWU7CisJCXUxNiBwYWNrZXRfbGVuZ3RoOwogCQlpbnQgaSwgZGJjPTA7CiAJCXN0cnVjdCBETUFfZGVzY3JpcHRvcl9ibG9jayAqYmxvY2sgPSBOVUxMOwogCQl1MTYgeGZlcnN0YXR1czsKQEAgLTIwMjQsMTEgKzIwMjMsNiBAQAogCQkJCQkJc2l6ZW9mKHN0cnVjdCBwYWNrZXQpKTsKIAogCQkJcGFja2V0X2xlbmd0aCA9IGxlMTZfdG9fY3B1KHAtPmRhdGFfbGVuZ3RoKTsKLQkJCXBhY2tldF90aW1lICAgPSBsZTE2X3RvX2NwdShwLT50aW1lc3RhbXApOwotCi0JCQlpcnFfcHJpbnRrKCJyZWNlaXZlZCBwYWNrZXQgJTAyZCwgdGltZXN0YW1wPSUwNHgsIGxlbmd0aD0lMDR4LCBzb2Y9JTAyeCUwMnhcbiIsIHZpZGVvLT5jdXJyZW50X3BhY2tldCwKLQkJCQkgICBwYWNrZXRfdGltZSwgcGFja2V0X2xlbmd0aCwKLQkJCQkgICBwLT5kYXRhWzBdLCBwLT5kYXRhWzFdKTsKIAogCQkJLyogZ2V0IHRoZSBkZXNjcmlwdG9yIGJhc2VkIG9uIHBhY2tldF9idWZmZXIgY3Vyc29yICovCiAJCQlmID0gdmlkZW8tPmZyYW1lc1t2aWRlby0+Y3VycmVudF9wYWNrZXQgLyBNQVhfUEFDS0VUU107CkBAIC0yMzIwLDcgKzIzMTQsNiBAQAogCiBzdGF0aWMgdm9pZCBkdjEzOTRfaG9zdF9yZXNldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQogewotCXN0cnVjdCB0aV9vaGNpICpvaGNpOwogCXN0cnVjdCB2aWRlb19jYXJkICp2aWRlbyA9IE5VTEwsICp0bXBfdmlkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTIzMjgsOSArMjMyMSw2IEBACiAJaWYgKHN0cmNtcChob3N0LT5kcml2ZXItPm5hbWUsIE9IQ0kxMzk0X0RSSVZFUl9OQU1FKSkKIAkJcmV0dXJuOwogCi0Jb2hjaSA9IChzdHJ1Y3QgdGlfb2hjaSAqKWhvc3QtPmhvc3RkYXRhOwotCi0KIAkvKiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHZpZGVvX2NhcmRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmR2MTM5NF9jYXJkc19sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfdmlkLCAmZHYxMzk0X2NhcmRzLCBsaXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCmluZGV4IGE0ZTlkY2IuLmJjMjg5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCkBAIC0xMjU4LDcgKzEyNTgsNiBAQAogCWNoYXIgKmJ1ZjsKIAlzdHJ1Y3QgZXRoMTM5NF9ob3N0X2luZm8gKmhpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGV0aDEzOTRfcHJpdiAqcHJpdjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXUzMiBzcGVjaWZpZXJfaWQ7CiAJdTE2IHNvdXJjZV9pZDsKQEAgLTEyODgsOCArMTI4Nyw2IEBACiAJCQkgICAgICAgKGJlMzJfdG9fY3B1KGRhdGFbMV0pICYgMHhmZjAwMDAwMCkgPj4gMjQ7CiAJCXNvdXJjZV9pZCA9IGJlMzJfdG9fY3B1KGRhdGFbMF0pID4+IDE2OwogCi0JCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJCWlmIChpbmZvLT5jaGFubmVsICE9IChpc28tPmhvc3QtPmNzci5icm9hZGNhc3RfY2hhbm5lbCAmIDB4M2YpCiAJCSAgICB8fCBzcGVjaWZpZXJfaWQgIT0gRVRIRVIxMzk0X0dBU1BfU1BFQ0lGSUVSX0lEKSB7CiAJCQkvKiBUaGlzIHBhY2tldCBpcyBub3QgZm9yIHVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCmluZGV4IGI1NjNkNWUuLmYzNDAxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jCkBAIC00NDAsNyArNDQwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJhdzEzOTRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXRfaXNfaWdub3JlZCkKIHsKLQlzdHJ1Y3QgZmlsZV9pbmZvICpmaSA9IChzdHJ1Y3QgZmlsZV9pbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnJlcTsKIAlzc2l6ZV90IHJldDsKIApAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIAlzdHJ1Y3QgYXJtX2FkZHIgKmFybV9hZGRyID0gTlVMTDsKIAlzdHJ1Y3QgYXJtX3JlcXVlc3QgKmFybV9yZXEgPSBOVUxMOwogCXN0cnVjdCBhcm1fcmVzcG9uc2UgKmFybV9yZXNwID0gTlVMTDsKLQlpbnQgZm91bmQgPSAwLCBzaXplID0gMCwgcmNvZGUgPSAtMSwgbGVuZ3RoX2NvbmZsaWN0ID0gMDsKKwlpbnQgZm91bmQgPSAwLCBzaXplID0gMCwgcmNvZGUgPSAtMTsKIAlzdHJ1Y3QgYXJtX3JlcXVlc3RfcmVzcG9uc2UgKmFybV9yZXFfcmVzcCA9IE5VTEw7CiAKIAlEQkdNU0coImFybV93cml0ZSBjYWxsZWQgYnkgbm9kZTogJVggIgpAQCAtMTA1NCw3ICsxMDU0LDYgQEAKIAl9CiAJaWYgKGFybV9hZGRyLT5yZWNfbGVuZ3RoIDwgbGVuZ3RoKSB7CiAJCURCR01TRygiYXJtX3dyaXRlIGJsb2NrbGVuZ3RoIHRvbyBiaWcgLT4gcmNvZGVfZGF0YV9lcnJvciIpOwotCQlsZW5ndGhfY29uZmxpY3QgPSAxOwogCQlyY29kZSA9IFJDT0RFX0RBVEFfRVJST1I7CS8qIGhhcmR3YXJlIGVycm9yLCBkYXRhIGlzIHVuYXZhaWxhYmxlICovCiAJfQogCWlmIChyY29kZSA9PSAtMSkgewpAQCAtMjI0NSw3ICsyMjQ0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHJhdzEzOTRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqIG9mZnNldF9pc19pZ25vcmVkKQogewotCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gKHN0cnVjdCBmaWxlX2luZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxOwogCXNzaXplX3QgcmV0dmFsID0gLUVCQURGRDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCA0NTY1Y2I1Li5kNmUyNTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMTM1MCwxMiArMTM1MCwxMSBAQAogCXN0cnVjdCBjc3IxMjEyX2tleXZhbCAqa3Y7CiAJc3RydWN0IGNzcjEyMTJfZGVudHJ5ICpkZW50cnk7CiAJdTY0IG1hbmFnZW1lbnRfYWdlbnRfYWRkcjsKLQl1MzIgdW5pdF9jaGFyYWN0ZXJpc3RpY3MsIGZpcm13YXJlX3JldmlzaW9uLCBtb2RlbDsKKwl1MzIgZmlybXdhcmVfcmV2aXNpb24sIG1vZGVsOwogCXVuc2lnbmVkIHdvcmthcm91bmRzOwogCWludCBpOwogCiAJbWFuYWdlbWVudF9hZ2VudF9hZGRyID0gMDsKLQl1bml0X2NoYXJhY3RlcmlzdGljcyA9IDA7CiAJZmlybXdhcmVfcmV2aXNpb24gPSBTQlAyX1JPTV9WQUxVRV9NSVNTSU5HOwogCW1vZGVsID0gdWQtPmZsYWdzICYgVU5JVF9ESVJFQ1RPUllfTU9ERUxfSUQgPwogCQkJCXVkLT5tb2RlbF9pZCA6IFNCUDJfUk9NX1ZBTFVFX01JU1NJTkc7CkBAIC0xMzcyLDE3ICsxMzcxLDE1IEBACiAJCQkJbHUtPmx1biA9IE9SQl9TRVRfTFVOKGt2LT52YWx1ZS5pbW1lZGlhdGUpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBTQlAyX1VOSVRfQ0hBUkFDVEVSSVNUSUNTX0tFWToKLQkJCS8qIEZJWE1FOiBUaGlzIGlzIGlnbm9yZWQgc28gZmFyLgotCQkJICogU2VlIFNCUC0yIGNsYXVzZSA3LjQuOC4gKi8KLQkJCXVuaXRfY2hhcmFjdGVyaXN0aWNzID0ga3YtPnZhbHVlLmltbWVkaWF0ZTsKLQkJCWJyZWFrOwogCiAJCWNhc2UgU0JQMl9GSVJNV0FSRV9SRVZJU0lPTl9LRVk6CiAJCQlmaXJtd2FyZV9yZXZpc2lvbiA9IGt2LT52YWx1ZS5pbW1lZGlhdGU7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgorCQkJLyogRklYTUU6IENoZWNrIGZvciBTQlAyX1VOSVRfQ0hBUkFDVEVSSVNUSUNTX0tFWQorCQkJICogbWd0X09SQl90aW1lb3V0IGFuZCBPUkJfc2l6ZSwgU0JQLTIgY2xhdXNlIDcuNC44LiAqLworCiAJCQkvKiBGSVhNRTogQ2hlY2sgZm9yIFNCUDJfREVWSUNFX1RZUEVfQU5EX0xVTl9LRVkuCiAJCQkgKiBJdHMgIm9yZGVyZWQiIGJpdCBoYXMgY29uc2VxdWVuY2VzIGZvciBjb21tYW5kIE9SQgogCQkJICogbGlzdCBoYW5kbGluZy4gU2VlIFNCUC0yIGNsYXVzZXMgNC42LCA3LjQuMTEsIDEwLjIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCmluZGV4IGE0MmJkNjguLjVjNzRmNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwpAQCAtNzIwLDcgKzcyMCw3IEBACiBzdGF0aWMgbG9uZyB2aWRlbzEzOTRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGZpbGVfY3R4ICpjdHggPSAoc3RydWN0IGZpbGVfY3R4ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB0aV9vaGNpICpvaGNpID0gY3R4LT5vaGNpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC0xMDQ1LDE0ICsxMDQ1LDkgQEAKIAkJCWlmIChnZXRfdXNlcihxdiwgJnAtPnBhY2tldF9zaXplcykpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCXBzaXplcyA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwc2l6ZXMpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcihwc2l6ZXMsIHF2LCBidWZfc2l6ZSkpIHsKLQkJCQlrZnJlZShwc2l6ZXMpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQorCQkJcHNpemVzID0gbWVtZHVwX3VzZXIocXYsIGJ1Zl9zaXplKTsKKwkJCWlmIChJU19FUlIocHNpemVzKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihwc2l6ZXMpOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmQtPmxvY2ssZmxhZ3MpOwpAQCAtMTE3Nyw3ICsxMTcyLDcgQEAKIAogc3RhdGljIGludCB2aWRlbzEzOTRfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0Jc3RydWN0IGZpbGVfY3R4ICpjdHggPSAoc3RydWN0IGZpbGVfY3R4ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGN0eC0+Y3VycmVudF9jdHggPT0gTlVMTCkgewogCQlQUklOVChLRVJOX0VSUiwgY3R4LT5vaGNpLT5ob3N0LT5pZCwKQEAgLTEyNDQsNyArMTIzOSw3IEBACiAKIHN0YXRpYyBpbnQgdmlkZW8xMzk0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGZpbGVfY3R4ICpjdHggPSAoc3RydWN0IGZpbGVfY3R4ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB0aV9vaGNpICpvaGNpID0gY3R4LT5vaGNpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxoLCAqbmV4dDsKIAl1NjQgbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGFkNjNiNzkuLjY0ZTA5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMjQwOSwxMCArMjQwOSwxMiBAQAogCQltc2dfcmVzcG9uc2UgPSBDTV9NU0dfUkVTUE9OU0VfUkVQOwogCQlicmVhazsKIAljYXNlIElCX0NNX0VTVEFCTElTSEVEOgotCQljbV9zdGF0ZSA9IGNtX2lkLT5zdGF0ZTsKLQkJbGFwX3N0YXRlID0gSUJfQ01fTVJBX0xBUF9TRU5UOwotCQltc2dfcmVzcG9uc2UgPSBDTV9NU0dfUkVTUE9OU0VfT1RIRVI7Ci0JCWJyZWFrOworCQlpZiAoY21faWQtPmxhcF9zdGF0ZSA9PSBJQl9DTV9MQVBfUkNWRCkgeworCQkJY21fc3RhdGUgPSBjbV9pZC0+c3RhdGU7CisJCQlsYXBfc3RhdGUgPSBJQl9DTV9NUkFfTEFQX1NFTlQ7CisJCQltc2dfcmVzcG9uc2UgPSBDTV9NU0dfUkVTUE9OU0VfT1RIRVI7CisJCQlicmVhazsKKwkJfQogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3IxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggNmJhYmI3Mi4uNWZhODU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0xMDg1LDcgKzEwODUsNiBAQAogc3RhdGljIHZvaWQgaWJfdW1hZF9raWxsX3BvcnQoc3RydWN0IGliX3VtYWRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlOwotCWludCBhbHJlYWR5X2RlYWQ7CiAJaW50IGlkOwogCiAJZGV2X3NldF9kcnZkYXRhKHBvcnQtPmRldiwgICAgTlVMTCk7CkBAIC0xMTAzLDcgKzExMDIsNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmaWxlLCAmcG9ydC0+ZmlsZV9saXN0LCBwb3J0X2xpc3QpIHsKIAkJbXV0ZXhfbG9jaygmZmlsZS0+bXV0ZXgpOwotCQlhbHJlYWR5X2RlYWQgPSBmaWxlLT5hZ2VudHNfZGVhZDsKIAkJZmlsZS0+YWdlbnRzX2RlYWQgPSAxOwogCQltdXRleF91bmxvY2soJmZpbGUtPm11dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKaW5kZXggYTdkYTliZS4uZTBmYTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCkBAIC0zMTAsOCArMzEwLDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50CQkJdmFsaWQ7Ci0JZW51bSBpYl9xcF9hdHRyX21hc2sJcmVxX3BhcmFtW0lCX1FQVF9SQVdfRVRZICsgMV07Ci0JZW51bSBpYl9xcF9hdHRyX21hc2sJb3B0X3BhcmFtW0lCX1FQVF9SQVdfRVRZICsgMV07CisJZW51bSBpYl9xcF9hdHRyX21hc2sJcmVxX3BhcmFtW0lCX1FQVF9SQVdfRVRIRVJUWVBFICsgMV07CisJZW51bSBpYl9xcF9hdHRyX21hc2sJb3B0X3BhcmFtW0lCX1FQVF9SQVdfRVRIRVJUWVBFICsgMV07CiB9IHFwX3N0YXRlX3RhYmxlW0lCX1FQU19FUlIgKyAxXVtJQl9RUFNfRVJSICsgMV0gPSB7CiAJW0lCX1FQU19SRVNFVF0gPSB7CiAJCVtJQl9RUFNfUkVTRVRdID0geyAudmFsaWQgPSAxIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCBhYmQ2ODNlLi5kODgwNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCXB1dF9lcCgmZXAtPmNvbSk7CiB9CiAKLWludCBpd2NoX2wydF9zZW5kKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsMnRfZW50cnkgKmwyZSkKK3N0YXRpYyBpbnQgaXdjaF9sMnRfc2VuZChzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbDJ0X2VudHJ5ICpsMmUpCiB7CiAJaW50CWVycm9yID0gMDsKIAlzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKaW5kZXggOWJiYjY1Yi4uYzY0ZDI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAl9CiAJbnVtX3dycyA9IFFfRlJFRUNOVChxaHAtPndxLnNxX3JwdHIsIHFocC0+d3Euc3Ffd3B0ciwKIAkJICBxaHAtPndxLnNxX3NpemVfbG9nMik7Ci0JaWYgKG51bV93cnMgPD0gMCkgeworCWlmIChudW1fd3JzID09IDApIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCBmbGFnKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC01NTQsNyArNTU0LDcgQEAKIAl9CiAJbnVtX3dycyA9IFFfRlJFRUNOVChxaHAtPndxLnNxX3JwdHIsIHFocC0+d3Euc3Ffd3B0ciwKIAkJCSAgICBxaHAtPndxLnNxX3NpemVfbG9nMik7Ci0JaWYgKChudW1fd3JzKSA8PSAwKSB7CisJaWYgKG51bV93cnMgPT0gMCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxaHAtPmxvY2ssIGZsYWcpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCmluZGV4IDhjOWI0ODMuLjMyZDM1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jbS5jCkBAIC02MSw2ICs2MSwxMCBAQAogCU5VTEwsCiB9OwogCitzdGF0aWMgaW50IGRhY2tfbW9kZTsKK21vZHVsZV9wYXJhbShkYWNrX21vZGUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRhY2tfbW9kZSwgIkRlbGF5ZWQgYWNrIG1vZGUgKGRlZmF1bHQ9MCkiKTsKKwogaW50IGM0aXdfbWF4X3JlYWRfZGVwdGggPSA4OwogbW9kdWxlX3BhcmFtKGM0aXdfbWF4X3JlYWRfZGVwdGgsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGM0aXdfbWF4X3JlYWRfZGVwdGgsICJQZXItY29ubmVjdGlvbiBtYXggT1JEL0lSRCAoZGVmYXVsdD04KSIpOwpAQCAtNDY5LDExICs0NzMsMTIgQEAKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfU0VUVVAsIGVwLT50eHFfaWR4KTsKKwlzZXRfd3JfdHhxKHNrYiwgQ1BMX1BSSU9SSVRZX1NFVFVQLCBlcC0+Y3RybHFfaWR4KTsKIAogCWN4Z2I0X2Jlc3RfbXR1KGVwLT5jb20uZGV2LT5yZGV2LmxsZGkubXR1cywgZXAtPm10dSwgJm10dV9pZHgpOwogCXdzY2FsZSA9IGNvbXB1dGVfd3NjYWxlKHJjdl93aW4pOwogCW9wdDAgPSBLRUVQX0FMSVZFKDEpIHwKKwkgICAgICAgREVMQUNLKDEpIHwKIAkgICAgICAgV05EX1NDQUxFKHdzY2FsZSkgfAogCSAgICAgICBNU1NfSURYKG10dV9pZHgpIHwKIAkgICAgICAgTDJUX0lEWChlcC0+bDJ0LT5pZHgpIHwKQEAgLTc4MCwxMSArNzg1LDExIEBACiAJCWV2ZW50LnByaXZhdGVfZGF0YV9sZW4gPSBlcC0+cGxlbjsKIAkJZXZlbnQucHJpdmF0ZV9kYXRhID0gZXAtPm1wYV9wa3QgKyBzaXplb2Yoc3RydWN0IG1wYV9tZXNzYWdlKTsKIAl9Ci0JaWYgKGVwLT5jb20uY21faWQpIHsKLQkJUERCRygiJXMgZXAgJXAgdGlkICV1IHN0YXR1cyAlZFxuIiwgX19mdW5jX18sIGVwLAotCQkgICAgIGVwLT5od3RpZCwgc3RhdHVzKTsKLQkJZXAtPmNvbS5jbV9pZC0+ZXZlbnRfaGFuZGxlcihlcC0+Y29tLmNtX2lkLCAmZXZlbnQpOwotCX0KKworCVBEQkcoIiVzIGVwICVwIHRpZCAldSBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCBlcCwKKwkgICAgIGVwLT5od3RpZCwgc3RhdHVzKTsKKwllcC0+Y29tLmNtX2lkLT5ldmVudF9oYW5kbGVyKGVwLT5jb20uY21faWQsICZldmVudCk7CisKIAlpZiAoc3RhdHVzIDwgMCkgewogCQllcC0+Y29tLmNtX2lkLT5yZW1fcmVmKGVwLT5jb20uY21faWQpOwogCQllcC0+Y29tLmNtX2lkID0gTlVMTDsKQEAgLTg0NSw4ICs4NTAsMTAgQEAKIAlJTklUX1RQX1dSKHJlcSwgZXAtPmh3dGlkKTsKIAlPUENPREVfVElEKHJlcSkgPSBjcHVfdG9fYmUzMihNS19PUENPREVfVElEKENQTF9SWF9EQVRBX0FDSywKIAkJCQkJCSAgICBlcC0+aHd0aWQpKTsKLQlyZXEtPmNyZWRpdF9kYWNrID0gY3B1X3RvX2JlMzIoY3JlZGl0cyk7Ci0Jc2V0X3dyX3R4cShza2IsIENQTF9QUklPUklUWV9BQ0ssIGVwLT50eHFfaWR4KTsKKwlyZXEtPmNyZWRpdF9kYWNrID0gY3B1X3RvX2JlMzIoY3JlZGl0cyB8IFJYX0ZPUkNFX0FDSygxKSB8CisJCQkJICAgICAgIEZfUlhfREFDS19DSEFOR0UgfAorCQkJCSAgICAgICBWX1JYX0RBQ0tfTU9ERShkYWNrX21vZGUpKTsKKwlzZXRfd3JfdHhxKHNrYiwgQ1BMX1BSSU9SSVRZX0FDSywgZXAtPmN0cmxxX2lkeCk7CiAJYzRpd19vZmxkX3NlbmQoJmVwLT5jb20uZGV2LT5yZGV2LCBza2IpOwogCXJldHVybiBjcmVkaXRzOwogfQpAQCAtMTI2NCw2ICsxMjcxLDcgQEAKIAljeGdiNF9iZXN0X210dShlcC0+Y29tLmRldi0+cmRldi5sbGRpLm10dXMsIGVwLT5tdHUsICZtdHVfaWR4KTsKIAl3c2NhbGUgPSBjb21wdXRlX3dzY2FsZShyY3Zfd2luKTsKIAlvcHQwID0gS0VFUF9BTElWRSgxKSB8CisJICAgICAgIERFTEFDSygxKSB8CiAJICAgICAgIFdORF9TQ0FMRSh3c2NhbGUpIHwKIAkgICAgICAgTVNTX0lEWChtdHVfaWR4KSB8CiAJICAgICAgIEwyVF9JRFgoZXAtPmwydC0+aWR4KSB8CkBAIC0xMjg3LDcgKzEyOTUsNyBAQAogCQkJCSAgICAgIGVwLT5od3RpZCkpOwogCXJwbC0+b3B0MCA9IGNwdV90b19iZTY0KG9wdDApOwogCXJwbC0+b3B0MiA9IGNwdV90b19iZTMyKG9wdDIpOwotCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfU0VUVVAsIGVwLT50eHFfaWR4KTsKKwlzZXRfd3JfdHhxKHNrYiwgQ1BMX1BSSU9SSVRZX1NFVFVQLCBlcC0+Y3RybHFfaWR4KTsKIAljNGl3X2wydF9zZW5kKCZlcC0+Y29tLmRldi0+cmRldiwgc2tiLCBlcC0+bDJ0KTsKIAogCXJldHVybjsKQEAgLTEzNDQsNyArMTM1Miw3IEBACiAJdTE2IHJzc19xaWQ7CiAJdTMyIG10dTsKIAlpbnQgc3RlcDsKLQlpbnQgdHhxX2lkeDsKKwlpbnQgdHhxX2lkeCwgY3RybHFfaWR4OwogCiAJcGFyZW50X2VwID0gbG9va3VwX3N0aWQodCwgc3RpZCk7CiAJUERCRygiJXMgcGFyZW50IGVwICVwIHRpZCAldVxuIiwgX19mdW5jX18sIHBhcmVudF9lcCwgaHd0aWQpOwpAQCAtMTM3Niw2ICsxMzg0LDcgQEAKIAkJc21hY19pZHggPSAoY3hnYjRfcG9ydF92aWlkKHBkZXYpICYgMHg3RikgPDwgMTsKIAkJc3RlcCA9IGRldi0+cmRldi5sbGRpLm50eHEgLyBkZXYtPnJkZXYubGxkaS5uY2hhbjsKIAkJdHhxX2lkeCA9IGN4Z2I0X3BvcnRfaWR4KHBkZXYpICogc3RlcDsKKwkJY3RybHFfaWR4ID0gY3hnYjRfcG9ydF9pZHgocGRldik7CiAJCXN0ZXAgPSBkZXYtPnJkZXYubGxkaS5ucnhxIC8gZGV2LT5yZGV2LmxsZGkubmNoYW47CiAJCXJzc19xaWQgPSBkZXYtPnJkZXYubGxkaS5yeHFfaWRzW2N4Z2I0X3BvcnRfaWR4KHBkZXYpICogc3RlcF07CiAJCWRldl9wdXQocGRldik7CkBAIC0xMzg3LDYgKzEzOTYsNyBAQAogCQlzbWFjX2lkeCA9IChjeGdiNF9wb3J0X3ZpaWQoZHN0LT5uZWlnaGJvdXItPmRldikgJiAweDdGKSA8PCAxOwogCQlzdGVwID0gZGV2LT5yZGV2LmxsZGkubnR4cSAvIGRldi0+cmRldi5sbGRpLm5jaGFuOwogCQl0eHFfaWR4ID0gY3hnYjRfcG9ydF9pZHgoZHN0LT5uZWlnaGJvdXItPmRldikgKiBzdGVwOworCQljdHJscV9pZHggPSBjeGdiNF9wb3J0X2lkeChkc3QtPm5laWdoYm91ci0+ZGV2KTsKIAkJc3RlcCA9IGRldi0+cmRldi5sbGRpLm5yeHEgLyBkZXYtPnJkZXYubGxkaS5uY2hhbjsKIAkJcnNzX3FpZCA9IGRldi0+cmRldi5sbGRpLnJ4cV9pZHNbCiAJCQkgIGN4Z2I0X3BvcnRfaWR4KGRzdC0+bmVpZ2hib3VyLT5kZXYpICogc3RlcF07CkBAIC0xNDI2LDYgKzE0MzYsNyBAQAogCWNoaWxkX2VwLT5yc3NfcWlkID0gcnNzX3FpZDsKIAljaGlsZF9lcC0+bXR1ID0gbXR1OwogCWNoaWxkX2VwLT50eHFfaWR4ID0gdHhxX2lkeDsKKwljaGlsZF9lcC0+Y3RybHFfaWR4ID0gY3RybHFfaWR4OwogCiAJUERCRygiJXMgdHhfY2hhbiAldSBzbWFjX2lkeCAldSByc3NfcWlkICV1XG4iLCBfX2Z1bmNfXywKIAkgICAgIHR4X2NoYW4sIHNtYWNfaWR4LCByc3NfcWlkKTsKQEAgLTE0NzMsOCArMTQ4NCw2IEBACiAJaW50IGNsb3NpbmcgPSAwOwogCXN0cnVjdCB0aWRfaW5mbyAqdCA9IGRldi0+cmRldi5sbGRpLnRpZHM7CiAJdW5zaWduZWQgaW50IHRpZCA9IEdFVF9USUQoaGRyKTsKLQlpbnQgc3RhcnRfdGltZXIgPSAwOwotCWludCBzdG9wX3RpbWVyID0gMDsKIAogCWVwID0gbG9va3VwX3RpZCh0LCB0aWQpOwogCVBEQkcoIiVzIGVwICVwIHRpZCAldVxuIiwgX19mdW5jX18sIGVwLCBlcC0+aHd0aWQpOwpAQCAtMTUxMSw3ICsxNTIwLDcgQEAKIAkJd2FrZV91cCgmZXAtPmNvbS53YWl0cSk7CiAJCWJyZWFrOwogCWNhc2UgRlBEVV9NT0RFOgotCQlzdGFydF90aW1lciA9IDE7CisJCXN0YXJ0X2VwX3RpbWVyKGVwKTsKIAkJX19zdGF0ZV9zZXQoJmVwLT5jb20sIENMT1NJTkcpOwogCQljbG9zaW5nID0gMTsKIAkJcGVlcl9jbG9zZV91cGNhbGwoZXApOwpAQCAtMTUyNCw3ICsxNTMzLDcgQEAKIAkJZGlzY29ubmVjdCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTU9SSUJVTkQ6Ci0JCXN0b3BfdGltZXIgPSAxOworCQlzdG9wX2VwX3RpbWVyKGVwKTsKIAkJaWYgKGVwLT5jb20uY21faWQgJiYgZXAtPmNvbS5xcCkgewogCQkJYXR0cnMubmV4dF9zdGF0ZSA9IEM0SVdfUVBfU1RBVEVfSURMRTsKIAkJCWM0aXdfbW9kaWZ5X3FwKGVwLT5jb20ucXAtPnJocCwgZXAtPmNvbS5xcCwKQEAgLTE1NDcsMTAgKzE1NTYsNiBAQAogCQljNGl3X21vZGlmeV9xcChlcC0+Y29tLnFwLT5yaHAsIGVwLT5jb20ucXAsCiAJCQkgICAgICAgQzRJV19RUF9BVFRSX05FWFRfU1RBVEUsICZhdHRycywgMSk7CiAJfQotCWlmIChzdGFydF90aW1lcikKLQkJc3RhcnRfZXBfdGltZXIoZXApOwotCWlmIChzdG9wX3RpbWVyKQotCQlzdG9wX2VwX3RpbWVyKGVwKTsKIAlpZiAoZGlzY29ubmVjdCkKIAkJYzRpd19lcF9kaXNjb25uZWN0KGVwLCAwLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVsZWFzZSkKQEAgLTE1NzksNyArMTU4NCw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdGlkX2luZm8gKnQgPSBkZXYtPnJkZXYubGxkaS50aWRzOwogCXVuc2lnbmVkIGludCB0aWQgPSBHRVRfVElEKHJlcSk7Ci0JaW50IHN0b3BfdGltZXIgPSAwOwogCiAJZXAgPSBsb29rdXBfdGlkKHQsIHRpZCk7CiAJaWYgKGlzX25lZ19hZHZfYWJvcnQocmVxLT5zdGF0dXMpKSB7CkBAIC0xNTk0LDEwICsxNTk4LDEwIEBACiAJY2FzZSBDT05ORUNUSU5HOgogCQlicmVhazsKIAljYXNlIE1QQV9SRVFfV0FJVDoKLQkJc3RvcF90aW1lciA9IDE7CisJCXN0b3BfZXBfdGltZXIoZXApOwogCQlicmVhazsKIAljYXNlIE1QQV9SRVFfU0VOVDoKLQkJc3RvcF90aW1lciA9IDE7CisJCXN0b3BfZXBfdGltZXIoZXApOwogCQljb25uZWN0X3JlcGx5X3VwY2FsbChlcCwgLUVDT05OUkVTRVQpOwogCQlicmVhazsKIAljYXNlIE1QQV9SRVBfU0VOVDoKQEAgLTE2MjEsNyArMTYyNSw3IEBACiAJCWJyZWFrOwogCWNhc2UgTU9SSUJVTkQ6CiAJY2FzZSBDTE9TSU5HOgotCQlzdG9wX3RpbWVyID0gMTsKKwkJc3RvcF9lcF90aW1lcihlcCk7CiAJCS8qRkFMTFRIUk9VR0gqLwogCWNhc2UgRlBEVV9NT0RFOgogCQlpZiAoZXAtPmNvbS5jbV9pZCAmJiBlcC0+Y29tLnFwKSB7CkBAIC0xNjY3LDggKzE2NzEsNiBAQAogCXJwbC0+Y21kID0gQ1BMX0FCT1JUX05PX1JTVDsKIAljNGl3X29mbGRfc2VuZCgmZXAtPmNvbS5kZXYtPnJkZXYsIHJwbF9za2IpOwogb3V0OgotCWlmIChzdG9wX3RpbWVyKQotCQlzdG9wX2VwX3RpbWVyKGVwKTsKIAlpZiAocmVsZWFzZSkKIAkJcmVsZWFzZV9lcF9yZXNvdXJjZXMoZXApOwogCXJldHVybiAwOwpAQCAtMTY4Myw3ICsxNjg1LDYgQEAKIAlpbnQgcmVsZWFzZSA9IDA7CiAJc3RydWN0IHRpZF9pbmZvICp0ID0gZGV2LT5yZGV2LmxsZGkudGlkczsKIAl1bnNpZ25lZCBpbnQgdGlkID0gR0VUX1RJRChycGwpOwotCWludCBzdG9wX3RpbWVyID0gMDsKIAogCWVwID0gbG9va3VwX3RpZCh0LCB0aWQpOwogCkBAIC0xNjk3LDcgKzE2OTgsNyBAQAogCQlfX3N0YXRlX3NldCgmZXAtPmNvbSwgTU9SSUJVTkQpOwogCQlicmVhazsKIAljYXNlIE1PUklCVU5EOgotCQlzdG9wX3RpbWVyID0gMTsKKwkJc3RvcF9lcF90aW1lcihlcCk7CiAJCWlmICgoZXAtPmNvbS5jbV9pZCkgJiYgKGVwLT5jb20ucXApKSB7CiAJCQlhdHRycy5uZXh0X3N0YXRlID0gQzRJV19RUF9TVEFURV9JRExFOwogCQkJYzRpd19tb2RpZnlfcXAoZXAtPmNvbS5xcC0+cmhwLApAQCAtMTcxNyw4ICsxNzE4LDYgQEAKIAkJYnJlYWs7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5jb20ubG9jaywgZmxhZ3MpOwotCWlmIChzdG9wX3RpbWVyKQotCQlzdG9wX2VwX3RpbWVyKGVwKTsKIAlpZiAocmVsZWFzZSkKIAkJcmVsZWFzZV9lcF9yZXNvdXJjZXMoZXApOwogCXJldHVybiAwOwpAQCAtMTk1Nyw2ICsxOTU2LDcgQEAKIAkJZXAtPnR4cV9pZHggPSBjeGdiNF9wb3J0X2lkeChwZGV2KSAqIHN0ZXA7CiAJCXN0ZXAgPSBlcC0+Y29tLmRldi0+cmRldi5sbGRpLm5yeHEgLwogCQkgICAgICAgZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5uY2hhbjsKKwkJZXAtPmN0cmxxX2lkeCA9IGN4Z2I0X3BvcnRfaWR4KHBkZXYpOwogCQllcC0+cnNzX3FpZCA9IGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucnhxX2lkc1sKIAkJCSAgICAgIGN4Z2I0X3BvcnRfaWR4KHBkZXYpICogc3RlcF07CiAJCWRldl9wdXQocGRldik7CkBAIC0xOTcxLDYgKzE5NzEsNyBAQAogCQlzdGVwID0gZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5udHhxIC8KIAkJICAgICAgIGVwLT5jb20uZGV2LT5yZGV2LmxsZGkubmNoYW47CiAJCWVwLT50eHFfaWR4ID0gY3hnYjRfcG9ydF9pZHgoZXAtPmRzdC0+bmVpZ2hib3VyLT5kZXYpICogc3RlcDsKKwkJZXAtPmN0cmxxX2lkeCA9IGN4Z2I0X3BvcnRfaWR4KGVwLT5kc3QtPm5laWdoYm91ci0+ZGV2KTsKIAkJc3RlcCA9IGVwLT5jb20uZGV2LT5yZGV2LmxsZGkubnJ4cSAvCiAJCSAgICAgICBlcC0+Y29tLmRldi0+cmRldi5sbGRpLm5jaGFuOwogCQllcC0+cnNzX3FpZCA9IGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucnhxX2lkc1sKQEAgLTIwNDksOCArMjA1MCwxNSBAQAogCQlnb3RvIGZhaWwzOwogCiAJLyogd2FpdCBmb3IgcGFzc19vcGVuX3JwbCAqLwotCXdhaXRfZXZlbnQoZXAtPmNvbS53YWl0cSwgZXAtPmNvbS5ycGxfZG9uZSk7Ci0JZXJyID0gZXAtPmNvbS5ycGxfZXJyOworCXdhaXRfZXZlbnRfdGltZW91dChlcC0+Y29tLndhaXRxLCBlcC0+Y29tLnJwbF9kb25lLCBDNElXX1dSX1RPKTsKKwlpZiAoZXAtPmNvbS5ycGxfZG9uZSkKKwkJZXJyID0gZXAtPmNvbS5ycGxfZXJyOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgTU9EICJEZXZpY2UgJXMgbm90IHJlc3BvbmRpbmchXG4iLAorCQkgICAgICAgcGNpX25hbWUoZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5wZGV2KSk7CisJCWVwLT5jb20uZGV2LT5yZGV2LmZsYWdzID0gVDRfRkFUQUxfRVJST1I7CisJCWVyciA9IC1FSU87CisJfQogCWlmICghZXJyKSB7CiAJCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gZXA7CiAJCWdvdG8gb3V0OwpAQCAtMjA3OSwxMCArMjA4NywxNyBAQAogCWVyciA9IGxpc3Rlbl9zdG9wKGVwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGRvbmU7Ci0Jd2FpdF9ldmVudChlcC0+Y29tLndhaXRxLCBlcC0+Y29tLnJwbF9kb25lKTsKKwl3YWl0X2V2ZW50X3RpbWVvdXQoZXAtPmNvbS53YWl0cSwgZXAtPmNvbS5ycGxfZG9uZSwgQzRJV19XUl9UTyk7CisJaWYgKGVwLT5jb20ucnBsX2RvbmUpCisJCWVyciA9IGVwLT5jb20ucnBsX2VycjsKKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIE1PRCAiRGV2aWNlICVzIG5vdCByZXNwb25kaW5nIVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucGRldikpOworCQllcC0+Y29tLmRldi0+cmRldi5mbGFncyA9IFQ0X0ZBVEFMX0VSUk9SOworCQllcnIgPSAtRUlPOworCX0KIAljeGdiNF9mcmVlX3N0aWQoZXAtPmNvbS5kZXYtPnJkZXYubGxkaS50aWRzLCBlcC0+c3RpZCwgUEZfSU5FVCk7CiBkb25lOgotCWVyciA9IGVwLT5jb20ucnBsX2VycjsKIAljbV9pZC0+cmVtX3JlZihjbV9pZCk7CiAJYzRpd19wdXRfZXAoJmVwLT5jb20pOwogCXJldHVybiBlcnI7CkBAIC0yMDk1LDggKzIxMTAsNiBAQAogCWludCBjbG9zZSA9IDA7CiAJaW50IGZhdGFsID0gMDsKIAlzdHJ1Y3QgYzRpd19yZGV2ICpyZGV2OwotCWludCBzdGFydF90aW1lciA9IDA7Ci0JaW50IHN0b3BfdGltZXIgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5jb20ubG9jaywgZmxhZ3MpOwogCkBAIC0yMTIwLDcgKzIxMzMsNyBAQAogCQkJZXAtPmNvbS5zdGF0ZSA9IEFCT1JUSU5HOwogCQllbHNlIHsKIAkJCWVwLT5jb20uc3RhdGUgPSBDTE9TSU5HOwotCQkJc3RhcnRfdGltZXIgPSAxOworCQkJc3RhcnRfZXBfdGltZXIoZXApOwogCQl9CiAJCXNldF9iaXQoQ0xPU0VfU0VOVCwgJmVwLT5jb20uZmxhZ3MpOwogCQlicmVhazsKQEAgLTIxMjgsNyArMjE0MSw3IEBACiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChDTE9TRV9TRU5ULCAmZXAtPmNvbS5mbGFncykpIHsKIAkJCWNsb3NlID0gMTsKIAkJCWlmIChhYnJ1cHQpIHsKLQkJCQlzdG9wX3RpbWVyID0gMTsKKwkJCQlzdG9wX2VwX3RpbWVyKGVwKTsKIAkJCQllcC0+Y29tLnN0YXRlID0gQUJPUlRJTkc7CiAJCQl9IGVsc2UKIAkJCQllcC0+Y29tLnN0YXRlID0gTU9SSUJVTkQ7CkBAIC0yMTQ2LDEwICsyMTU5LDYgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+Y29tLmxvY2ssIGZsYWdzKTsKLQlpZiAoc3RhcnRfdGltZXIpCi0JCXN0YXJ0X2VwX3RpbWVyKGVwKTsKLQlpZiAoc3RvcF90aW1lcikKLQkJc3RvcF9lcF90aW1lcihlcCk7CiAJaWYgKGNsb3NlKSB7CiAJCWlmIChhYnJ1cHQpCiAJCQlyZXQgPSBhYm9ydF9jb25uZWN0aW9uKGVwLCBOVUxMLCBnZnApOwpAQCAtMjI0NCw3ICsyMjUzLDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAlzdHJ1Y3QgYzRpd19kZXYgKmRldjsKLQlzdHJ1Y3QgY3BsX2FjdF9lc3RhYmxpc2ggKnJwbCA9IGNwbGhkcihza2IpOworCXN0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCAqcnBsOwogCXVuc2lnbmVkIGludCBvcGNvZGU7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYwppbmRleCBmYWM1YzZlLi5iM2RhZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY3EuYwpAQCAtNDMsNyArNDMsNyBAQAogCWludCByZXQ7CiAKIAl3cl9sZW4gPSBzaXplb2YgKnJlc193ciArIHNpemVvZiAqcmVzOwotCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9OT0ZBSUwpOworCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzZXRfd3JfdHhxKHNrYiwgQ1BMX1BSSU9SSVRZX0NPTlRST0wsIDApOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJLyogYnVpbGQgZndfcmlfcmVzX3dyICovCiAJd3JfbGVuID0gc2l6ZW9mICpyZXNfd3IgKyBzaXplb2YgKnJlczsKIAotCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9OT0ZBSUwpOworCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYwppbmRleCBkODcwZjljLi45YmJmNDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2RldmljZS5jCkBAIC0yNTAsMTIgKzI1MCwxNyBAQAogCXJkZXYtPmNxc2hpZnQgPSBQQUdFX1NISUZUIC0gaWxvZzIocmRldi0+bGxkaS51Y3FfZGVuc2l0eSk7CiAJcmRldi0+Y3FtYXNrID0gcmRldi0+bGxkaS51Y3FfZGVuc2l0eSAtIDE7CiAJUERCRygiJXMgZGV2ICVzIHN0YWcgc3RhcnQgMHglMHggc2l6ZSAweCUweCBudW0gc3RhZ3MgJWQgIgotCSAgICAgInBibCBzdGFydCAweCUweCBzaXplIDB4JTB4IHJxIHN0YXJ0IDB4JTB4IHNpemUgMHglMHhcbiIsCisJICAgICAicGJsIHN0YXJ0IDB4JTB4IHNpemUgMHglMHggcnEgc3RhcnQgMHglMHggc2l6ZSAweCUweCAiCisJICAgICAicXAgcWlkIHN0YXJ0ICV1IHNpemUgJXUgY3EgcWlkIHN0YXJ0ICV1IHNpemUgJXVcbiIsCiAJICAgICBfX2Z1bmNfXywgcGNpX25hbWUocmRldi0+bGxkaS5wZGV2KSwgcmRldi0+bGxkaS52ci0+c3RhZy5zdGFydCwKIAkgICAgIHJkZXYtPmxsZGkudnItPnN0YWcuc2l6ZSwgYzRpd19udW1fc3RhZ3MocmRldiksCiAJICAgICByZGV2LT5sbGRpLnZyLT5wYmwuc3RhcnQsCiAJICAgICByZGV2LT5sbGRpLnZyLT5wYmwuc2l6ZSwgcmRldi0+bGxkaS52ci0+cnEuc3RhcnQsCi0JICAgICByZGV2LT5sbGRpLnZyLT5ycS5zaXplKTsKKwkgICAgIHJkZXYtPmxsZGkudnItPnJxLnNpemUsCisJICAgICByZGV2LT5sbGRpLnZyLT5xcC5zdGFydCwKKwkgICAgIHJkZXYtPmxsZGkudnItPnFwLnNpemUsCisJICAgICByZGV2LT5sbGRpLnZyLT5jcS5zdGFydCwKKwkgICAgIHJkZXYtPmxsZGkudnItPmNxLnNpemUpOwogCVBEQkcoInVkYiBsZW4gMHgleCB1ZGIgYmFzZSAlcCBkYl9yZWcgJXAgZ3RzX3JlZyAlcCBxcHNoaWZ0ICVsdSAiCiAJICAgICAicXBtYXNrIDB4JXggY3FzaGlmdCAlbHUgY3FtYXNrIDB4JXhcbiIsCiAJICAgICAodW5zaWduZWQpcGNpX3Jlc291cmNlX2xlbihyZGV2LT5sbGRpLnBkZXYsIDIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2l3X2N4Z2I0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaAppbmRleCBkMzNlMWE2Li5lZDQ1OWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaApAQCAtNjE5LDYgKzYxOSw3IEBACiAJdTE2IHBsZW47CiAJdTE2IHJzc19xaWQ7CiAJdTE2IHR4cV9pZHg7CisJdTE2IGN0cmxxX2lkeDsKIAl1OCB0b3M7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMKaW5kZXggODJiNTcwMy4uMjY5MzczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYwpAQCAtNTksNyArNTksNyBAQAogCQl3cl9sZW4gPSByb3VuZHVwKHNpemVvZiAqcmVxICsgc2l6ZW9mICpzYyArCiAJCQkJIHJvdW5kdXAoY29weV9sZW4sIFQ0X1VMUFRYX01JTl9JTyksIDE2KTsKIAotCQlza2IgPSBhbGxvY19za2Iod3JfbGVuLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9GQUlMKTsKKwkJc2tiID0gYWxsb2Nfc2tiKHdyX2xlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfQ09OVFJPTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IDg2YjkzZjIuLjkzZjZlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkvKiBidWlsZCBmd19yaV9yZXNfd3IgKi8KIAl3cl9sZW4gPSBzaXplb2YgKnJlc193ciArIDIgKiBzaXplb2YgKnJlczsKIAotCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwgfCBfX0dGUF9OT0ZBSUwpOworCXNrYiA9IGFsbG9jX3NrYih3cl9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyNzsKQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJlcy0+dS5zcXJxLmRjYWVuX3RvX2Vxc2l6ZSA9IGNwdV90b19iZTMyKAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUlOKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKQEAgLTE4NSw3ICsxODUsNyBAQAogCXJlcy0+dS5zcXJxLmRjYWVuX3RvX2Vxc2l6ZSA9IGNwdV90b19iZTMyKAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUlOKDMpIHwKKwkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAogCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKQEAgLTIzNSwxMiArMjM1LDc4IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgYnVpbGRfcmRtYV9zZW5kKHVuaW9uIHQ0X3dyICp3cWUsIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwgdTggKmxlbjE2KQorc3RhdGljIGludCBidWlsZF9pbW1kKHN0cnVjdCB0NF9zcSAqc3EsIHN0cnVjdCBmd19yaV9pbW1kICppbW1kcCwKKwkJICAgICAgc3RydWN0IGliX3NlbmRfd3IgKndyLCBpbnQgbWF4LCB1MzIgKnBsZW5wKQoreworCXU4ICpkc3RwLCAqc3JjcDsKKwl1MzIgcGxlbiA9IDA7CisJaW50IGk7CisJaW50IHJlbSwgbGVuOworCisJZHN0cCA9ICh1OCAqKWltbWRwLT5kYXRhOworCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7CisJCWlmICgocGxlbiArIHdyLT5zZ19saXN0W2ldLmxlbmd0aCkgPiBtYXgpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQlzcmNwID0gKHU4ICopKHVuc2lnbmVkIGxvbmcpd3ItPnNnX2xpc3RbaV0uYWRkcjsKKwkJcGxlbiArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7CisJCXJlbSA9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKKwkJd2hpbGUgKHJlbSkgeworCQkJaWYgKGRzdHAgPT0gKHU4ICopJnNxLT5xdWV1ZVtzcS0+c2l6ZV0pCisJCQkJZHN0cCA9ICh1OCAqKXNxLT5xdWV1ZTsKKwkJCWlmIChyZW0gPD0gKHU4ICopJnNxLT5xdWV1ZVtzcS0+c2l6ZV0gLSBkc3RwKQorCQkJCWxlbiA9IHJlbTsKKwkJCWVsc2UKKwkJCQlsZW4gPSAodTggKikmc3EtPnF1ZXVlW3NxLT5zaXplXSAtIGRzdHA7CisJCQltZW1jcHkoZHN0cCwgc3JjcCwgbGVuKTsKKwkJCWRzdHAgKz0gbGVuOworCQkJc3JjcCArPSBsZW47CisJCQlyZW0gLT0gbGVuOworCQl9CisJfQorCWltbWRwLT5vcCA9IEZXX1JJX0RBVEFfSU1NRDsKKwlpbW1kcC0+cjEgPSAwOworCWltbWRwLT5yMiA9IDA7CisJaW1tZHAtPmltbWRsZW4gPSBjcHVfdG9fYmUzMihwbGVuKTsKKwkqcGxlbnAgPSBwbGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1aWxkX2lzZ2woX19iZTY0ICpxdWV1ZV9zdGFydCwgX19iZTY0ICpxdWV1ZV9lbmQsCisJCSAgICAgIHN0cnVjdCBmd19yaV9pc2dsICppc2dscCwgc3RydWN0IGliX3NnZSAqc2dfbGlzdCwKKwkJICAgICAgaW50IG51bV9zZ2UsIHUzMiAqcGxlbnApCisKIHsKIAlpbnQgaTsKKwl1MzIgcGxlbiA9IDA7CisJX19iZTY0ICpmbGl0cCA9IChfX2JlNjQgKilpc2dscC0+c2dlOworCisJZm9yIChpID0gMDsgaSA8IG51bV9zZ2U7IGkrKykgeworCQlpZiAoKHBsZW4gKyBzZ19saXN0W2ldLmxlbmd0aCkgPCBwbGVuKQorCQkJcmV0dXJuIC1FTVNHU0laRTsKKwkJcGxlbiArPSBzZ19saXN0W2ldLmxlbmd0aDsKKwkJKmZsaXRwID0gY3B1X3RvX2JlNjQoKCh1NjQpc2dfbGlzdFtpXS5sa2V5IDw8IDMyKSB8CisJCQkJICAgICBzZ19saXN0W2ldLmxlbmd0aCk7CisJCWlmICgrK2ZsaXRwID09IHF1ZXVlX2VuZCkKKwkJCWZsaXRwID0gcXVldWVfc3RhcnQ7CisJCSpmbGl0cCA9IGNwdV90b19iZTY0KHNnX2xpc3RbaV0uYWRkcik7CisJCWlmICgrK2ZsaXRwID09IHF1ZXVlX2VuZCkKKwkJCWZsaXRwID0gcXVldWVfc3RhcnQ7CisJfQorCWlzZ2xwLT5vcCA9IEZXX1JJX0RBVEFfSVNHTDsKKwlpc2dscC0+cjEgPSAwOworCWlzZ2xwLT5uc2dlID0gY3B1X3RvX2JlMTYobnVtX3NnZSk7CisJaXNnbHAtPnIyID0gMDsKKwlpZiAocGxlbnApCisJCSpwbGVucCA9IHBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbGRfcmRtYV9zZW5kKHN0cnVjdCB0NF9zcSAqc3EsIHVuaW9uIHQ0X3dyICp3cWUsCisJCQkgICBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsIHU4ICpsZW4xNikKK3sKIAl1MzIgcGxlbjsKIAlpbnQgc2l6ZTsKLQl1OCAqZGF0YXA7CisJaW50IHJldDsKIAogCWlmICh3ci0+bnVtX3NnZSA+IFQ0X01BWF9TRU5EX1NHRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjcsNDMgKzMzMywyMyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXBsZW4gPSAwOwogCWlmICh3ci0+bnVtX3NnZSkgewogCQlpZiAod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX0lOTElORSkgewotCQkJZGF0YXAgPSAodTggKil3cWUtPnNlbmQudS5pbW1kX3NyY1swXS5kYXRhOwotCQkJZm9yIChpID0gMDsgaSA8IHdyLT5udW1fc2dlOyBpKyspIHsKLQkJCQlpZiAoKHBsZW4gKyB3ci0+c2dfbGlzdFtpXS5sZW5ndGgpID4KLQkJCQkgICAgVDRfTUFYX1NFTkRfSU5MSU5FKSB7Ci0JCQkJCXJldHVybiAtRU1TR1NJWkU7Ci0JCQkJfQotCQkJCXBsZW4gKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOwotCQkJCW1lbWNweShkYXRhcCwKLQkJCQkgICAgICh2b2lkICopKHVuc2lnbmVkIGxvbmcpd3ItPnNnX2xpc3RbaV0uYWRkciwKLQkJCQkgICAgIHdyLT5zZ19saXN0W2ldLmxlbmd0aCk7Ci0JCQkJZGF0YXAgKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOwotCQkJfQotCQkJd3FlLT5zZW5kLnUuaW1tZF9zcmNbMF0ub3AgPSBGV19SSV9EQVRBX0lNTUQ7Ci0JCQl3cWUtPnNlbmQudS5pbW1kX3NyY1swXS5yMSA9IDA7Ci0JCQl3cWUtPnNlbmQudS5pbW1kX3NyY1swXS5yMiA9IDA7Ci0JCQl3cWUtPnNlbmQudS5pbW1kX3NyY1swXS5pbW1kbGVuID0gY3B1X3RvX2JlMzIocGxlbik7CisJCQlyZXQgPSBidWlsZF9pbW1kKHNxLCB3cWUtPnNlbmQudS5pbW1kX3NyYywgd3IsCisJCQkJCSBUNF9NQVhfU0VORF9JTkxJTkUsICZwbGVuKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKIAkJCXNpemUgPSBzaXplb2Ygd3FlLT5zZW5kICsgc2l6ZW9mKHN0cnVjdCBmd19yaV9pbW1kKSArCiAJCQkgICAgICAgcGxlbjsKIAkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7Ci0JCQkJaWYgKChwbGVuICsgd3ItPnNnX2xpc3RbaV0ubGVuZ3RoKSA8IHBsZW4pCi0JCQkJCXJldHVybiAtRU1TR1NJWkU7Ci0JCQkJcGxlbiArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7Ci0JCQkJd3FlLT5zZW5kLnUuaXNnbF9zcmNbMF0uc2dlW2ldLnN0YWcgPQotCQkJCQljcHVfdG9fYmUzMih3ci0+c2dfbGlzdFtpXS5sa2V5KTsKLQkJCQl3cWUtPnNlbmQudS5pc2dsX3NyY1swXS5zZ2VbaV0ubGVuID0KLQkJCQkJY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKLQkJCQl3cWUtPnNlbmQudS5pc2dsX3NyY1swXS5zZ2VbaV0udG8gPQotCQkJCQljcHVfdG9fYmU2NCh3ci0+c2dfbGlzdFtpXS5hZGRyKTsKLQkJCX0KLQkJCXdxZS0+c2VuZC51LmlzZ2xfc3JjWzBdLm9wID0gRldfUklfREFUQV9JU0dMOwotCQkJd3FlLT5zZW5kLnUuaXNnbF9zcmNbMF0ucjEgPSAwOwotCQkJd3FlLT5zZW5kLnUuaXNnbF9zcmNbMF0ubnNnZSA9IGNwdV90b19iZTE2KHdyLT5udW1fc2dlKTsKLQkJCXdxZS0+c2VuZC51LmlzZ2xfc3JjWzBdLnIyID0gMDsKKwkJCXJldCA9IGJ1aWxkX2lzZ2woKF9fYmU2NCAqKXNxLT5xdWV1ZSwKKwkJCQkJIChfX2JlNjQgKikmc3EtPnF1ZXVlW3NxLT5zaXplXSwKKwkJCQkJIHdxZS0+c2VuZC51LmlzZ2xfc3JjLAorCQkJCQkgd3ItPnNnX2xpc3QsIHdyLT5udW1fc2dlLCAmcGxlbik7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CiAJCQlzaXplID0gc2l6ZW9mIHdxZS0+c2VuZCArIHNpemVvZihzdHJ1Y3QgZndfcmlfaXNnbCkgKwogCQkJICAgICAgIHdyLT5udW1fc2dlICogc2l6ZW9mKHN0cnVjdCBmd19yaV9zZ2UpOwogCQl9CkBAIC0zMTMsNjIgKzM1OSw0MCBAQAogCQl3cWUtPnNlbmQudS5pbW1kX3NyY1swXS5yMiA9IDA7CiAJCXdxZS0+c2VuZC51LmltbWRfc3JjWzBdLmltbWRsZW4gPSAwOwogCQlzaXplID0gc2l6ZW9mIHdxZS0+c2VuZCArIHNpemVvZihzdHJ1Y3QgZndfcmlfaW1tZCk7CisJCXBsZW4gPSAwOwogCX0KIAkqbGVuMTYgPSBESVZfUk9VTkRfVVAoc2l6ZSwgMTYpOwogCXdxZS0+c2VuZC5wbGVuID0gY3B1X3RvX2JlMzIocGxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnVpbGRfcmRtYV93cml0ZSh1bmlvbiB0NF93ciAqd3FlLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsIHU4ICpsZW4xNikKK3N0YXRpYyBpbnQgYnVpbGRfcmRtYV93cml0ZShzdHJ1Y3QgdDRfc3EgKnNxLCB1bmlvbiB0NF93ciAqd3FlLAorCQkJICAgIHN0cnVjdCBpYl9zZW5kX3dyICp3ciwgdTggKmxlbjE2KQogewotCWludCBpOwogCXUzMiBwbGVuOwogCWludCBzaXplOwotCXU4ICpkYXRhcDsKKwlpbnQgcmV0OwogCi0JaWYgKHdyLT5udW1fc2dlID4gVDRfTUFYX1dSSVRFX1NHRSkKKwlpZiAod3ItPm51bV9zZ2UgPiBUNF9NQVhfU0VORF9TR0UpCiAJCXJldHVybiAtRUlOVkFMOwogCXdxZS0+d3JpdGUucjIgPSAwOwogCXdxZS0+d3JpdGUuc3RhZ19zaW5rID0gY3B1X3RvX2JlMzIod3ItPndyLnJkbWEucmtleSk7CiAJd3FlLT53cml0ZS50b19zaW5rID0gY3B1X3RvX2JlNjQod3ItPndyLnJkbWEucmVtb3RlX2FkZHIpOwotCXBsZW4gPSAwOwogCWlmICh3ci0+bnVtX3NnZSkgewogCQlpZiAod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX0lOTElORSkgewotCQkJZGF0YXAgPSAodTggKil3cWUtPndyaXRlLnUuaW1tZF9zcmNbMF0uZGF0YTsKLQkJCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7Ci0JCQkJaWYgKChwbGVuICsgd3ItPnNnX2xpc3RbaV0ubGVuZ3RoKSA+Ci0JCQkJICAgIFQ0X01BWF9XUklURV9JTkxJTkUpIHsKLQkJCQkJcmV0dXJuIC1FTVNHU0laRTsKLQkJCQl9Ci0JCQkJcGxlbiArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7Ci0JCQkJbWVtY3B5KGRhdGFwLAotCQkJCSAgICAgKHZvaWQgKikodW5zaWduZWQgbG9uZyl3ci0+c2dfbGlzdFtpXS5hZGRyLAotCQkJCSAgICAgd3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKLQkJCQlkYXRhcCArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7Ci0JCQl9Ci0JCQl3cWUtPndyaXRlLnUuaW1tZF9zcmNbMF0ub3AgPSBGV19SSV9EQVRBX0lNTUQ7Ci0JCQl3cWUtPndyaXRlLnUuaW1tZF9zcmNbMF0ucjEgPSAwOwotCQkJd3FlLT53cml0ZS51LmltbWRfc3JjWzBdLnIyID0gMDsKLQkJCXdxZS0+d3JpdGUudS5pbW1kX3NyY1swXS5pbW1kbGVuID0gY3B1X3RvX2JlMzIocGxlbik7CisJCQlyZXQgPSBidWlsZF9pbW1kKHNxLCB3cWUtPndyaXRlLnUuaW1tZF9zcmMsIHdyLAorCQkJCQkgVDRfTUFYX1dSSVRFX0lOTElORSwgJnBsZW4pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQkJc2l6ZSA9IHNpemVvZiB3cWUtPndyaXRlICsgc2l6ZW9mKHN0cnVjdCBmd19yaV9pbW1kKSArCiAJCQkgICAgICAgcGxlbjsKIAkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7Ci0JCQkJaWYgKChwbGVuICsgd3ItPnNnX2xpc3RbaV0ubGVuZ3RoKSA8IHBsZW4pCi0JCQkJCXJldHVybiAtRU1TR1NJWkU7Ci0JCQkJcGxlbiArPSB3ci0+c2dfbGlzdFtpXS5sZW5ndGg7Ci0JCQkJd3FlLT53cml0ZS51LmlzZ2xfc3JjWzBdLnNnZVtpXS5zdGFnID0KLQkJCQkJY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGtleSk7Ci0JCQkJd3FlLT53cml0ZS51LmlzZ2xfc3JjWzBdLnNnZVtpXS5sZW4gPQotCQkJCQljcHVfdG9fYmUzMih3ci0+c2dfbGlzdFtpXS5sZW5ndGgpOwotCQkJCXdxZS0+d3JpdGUudS5pc2dsX3NyY1swXS5zZ2VbaV0udG8gPQotCQkJCQljcHVfdG9fYmU2NCh3ci0+c2dfbGlzdFtpXS5hZGRyKTsKLQkJCX0KLQkJCXdxZS0+d3JpdGUudS5pc2dsX3NyY1swXS5vcCA9IEZXX1JJX0RBVEFfSVNHTDsKLQkJCXdxZS0+d3JpdGUudS5pc2dsX3NyY1swXS5yMSA9IDA7Ci0JCQl3cWUtPndyaXRlLnUuaXNnbF9zcmNbMF0ubnNnZSA9Ci0JCQkJCQkgICAgICAgY3B1X3RvX2JlMTYod3ItPm51bV9zZ2UpOwotCQkJd3FlLT53cml0ZS51LmlzZ2xfc3JjWzBdLnIyID0gMDsKKwkJCXJldCA9IGJ1aWxkX2lzZ2woKF9fYmU2NCAqKXNxLT5xdWV1ZSwKKwkJCQkJIChfX2JlNjQgKikmc3EtPnF1ZXVlW3NxLT5zaXplXSwKKwkJCQkJIHdxZS0+d3JpdGUudS5pc2dsX3NyYywKKwkJCQkJIHdyLT5zZ19saXN0LCB3ci0+bnVtX3NnZSwgJnBsZW4pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQkJc2l6ZSA9IHNpemVvZiB3cWUtPndyaXRlICsgc2l6ZW9mKHN0cnVjdCBmd19yaV9pc2dsKSArCiAJCQkgICAgICAgd3ItPm51bV9zZ2UgKiBzaXplb2Yoc3RydWN0IGZ3X3JpX3NnZSk7CiAJCX0KQEAgLTM3OCw2ICs0MDIsNyBAQAogCQl3cWUtPndyaXRlLnUuaW1tZF9zcmNbMF0ucjIgPSAwOwogCQl3cWUtPndyaXRlLnUuaW1tZF9zcmNbMF0uaW1tZGxlbiA9IDA7CiAJCXNpemUgPSBzaXplb2Ygd3FlLT53cml0ZSArIHNpemVvZihzdHJ1Y3QgZndfcmlfaW1tZCk7CisJCXBsZW4gPSAwOwogCX0KIAkqbGVuMTYgPSBESVZfUk9VTkRfVVAoc2l6ZSwgMTYpOwogCXdxZS0+d3JpdGUucGxlbiA9IGNwdV90b19iZTMyKHBsZW4pOwpAQCAtNDE2LDI5ICs0NDEsMTMgQEAKIHN0YXRpYyBpbnQgYnVpbGRfcmRtYV9yZWN2KHN0cnVjdCBjNGl3X3FwICpxaHAsIHVuaW9uIHQ0X3JlY3Zfd3IgKndxZSwKIAkJCSAgIHN0cnVjdCBpYl9yZWN2X3dyICp3ciwgdTggKmxlbjE2KQogewotCWludCBpOwotCWludCBwbGVuID0gMDsKKwlpbnQgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IHdyLT5udW1fc2dlOyBpKyspIHsKLQkJaWYgKChwbGVuICsgd3ItPnNnX2xpc3RbaV0ubGVuZ3RoKSA8IHBsZW4pCi0JCQlyZXR1cm4gLUVNU0dTSVpFOwotCQlwbGVuICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKLQkJd3FlLT5yZWN2LmlzZ2wuc2dlW2ldLnN0YWcgPQotCQkJY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGtleSk7Ci0JCXdxZS0+cmVjdi5pc2dsLnNnZVtpXS5sZW4gPQotCQkJY3B1X3RvX2JlMzIod3ItPnNnX2xpc3RbaV0ubGVuZ3RoKTsKLQkJd3FlLT5yZWN2LmlzZ2wuc2dlW2ldLnRvID0KLQkJCWNwdV90b19iZTY0KHdyLT5zZ19saXN0W2ldLmFkZHIpOwotCX0KLQlmb3IgKDsgaSA8IFQ0X01BWF9SRUNWX1NHRTsgaSsrKSB7Ci0JCXdxZS0+cmVjdi5pc2dsLnNnZVtpXS5zdGFnID0gMDsKLQkJd3FlLT5yZWN2LmlzZ2wuc2dlW2ldLmxlbiA9IDA7Ci0JCXdxZS0+cmVjdi5pc2dsLnNnZVtpXS50byA9IDA7Ci0JfQotCXdxZS0+cmVjdi5pc2dsLm9wID0gRldfUklfREFUQV9JU0dMOwotCXdxZS0+cmVjdi5pc2dsLnIxID0gMDsKLQl3cWUtPnJlY3YuaXNnbC5uc2dlID0gY3B1X3RvX2JlMTYod3ItPm51bV9zZ2UpOwotCXdxZS0+cmVjdi5pc2dsLnIyID0gMDsKKwlyZXQgPSBidWlsZF9pc2dsKChfX2JlNjQgKilxaHAtPndxLnJxLnF1ZXVlLAorCQkJIChfX2JlNjQgKikmcWhwLT53cS5ycS5xdWV1ZVtxaHAtPndxLnJxLnNpemVdLAorCQkJICZ3cWUtPnJlY3YuaXNnbCwgd3ItPnNnX2xpc3QsIHdyLT5udW1fc2dlLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCSpsZW4xNiA9IERJVl9ST1VORF9VUChzaXplb2Ygd3FlLT5yZWN2ICsKIAkJCSAgICAgIHdyLT5udW1fc2dlICogc2l6ZW9mKHN0cnVjdCBmd19yaV9zZ2UpLCAxNik7CiAJcmV0dXJuIDA7CkBAIC01NDcsNyArNTU2LDkgQEAKIAkJCSpiYWRfd3IgPSB3cjsKIAkJCWJyZWFrOwogCQl9Ci0JCXdxZSA9ICZxaHAtPndxLnNxLnF1ZXVlW3FocC0+d3Euc3EucGlkeF07CisJCXdxZSA9ICh1bmlvbiB0NF93ciAqKSgodTggKilxaHAtPndxLnNxLnF1ZXVlICsKKwkJICAgICAgcWhwLT53cS5zcS53cV9waWR4ICogVDRfRVFfRU5UUllfU0laRSk7CisKIAkJZndfZmxhZ3MgPSAwOwogCQlpZiAod3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkKIAkJCWZ3X2ZsYWdzIHw9IEZXX1JJX1NPTElDSVRFRF9FVkVOVF9GTEFHOwpAQCAtNTY0LDEyICs1NzUsMTIgQEAKIAkJCQlzd3NxZS0+b3Bjb2RlID0gRldfUklfU0VORDsKIAkJCWVsc2UKIAkJCQlzd3NxZS0+b3Bjb2RlID0gRldfUklfU0VORF9XSVRIX0lOVjsKLQkJCWVyciA9IGJ1aWxkX3JkbWFfc2VuZCh3cWUsIHdyLCAmbGVuMTYpOworCQkJZXJyID0gYnVpbGRfcmRtYV9zZW5kKCZxaHAtPndxLnNxLCB3cWUsIHdyLCAmbGVuMTYpOwogCQkJYnJlYWs7CiAJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKIAkJCWZ3X29wY29kZSA9IEZXX1JJX1JETUFfV1JJVEVfV1I7CiAJCQlzd3NxZS0+b3Bjb2RlID0gRldfUklfUkRNQV9XUklURTsKLQkJCWVyciA9IGJ1aWxkX3JkbWFfd3JpdGUod3FlLCB3ciwgJmxlbjE2KTsKKwkJCWVyciA9IGJ1aWxkX3JkbWFfd3JpdGUoJnFocC0+d3Euc3EsIHdxZSwgd3IsICZsZW4xNik7CiAJCQlicmVhazsKIAkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CiAJCWNhc2UgSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOgpAQCAtNjE5LDggKzYzMCw4IEBACiAJCSAgICAgc3dzcWUtPm9wY29kZSwgc3dzcWUtPnJlYWRfbGVuKTsKIAkJd3IgPSB3ci0+bmV4dDsKIAkJbnVtX3dycy0tOwotCQl0NF9zcV9wcm9kdWNlKCZxaHAtPndxKTsKLQkJaWR4Kys7CisJCXQ0X3NxX3Byb2R1Y2UoJnFocC0+d3EsIGxlbjE2KTsKKwkJaWR4ICs9IERJVl9ST1VORF9VUChsZW4xNioxNiwgVDRfRVFfRU5UUllfU0laRSk7CiAJfQogCWlmICh0NF93cV9kYl9lbmFibGVkKCZxaHAtPndxKSkKIAkJdDRfcmluZ19zcV9kYigmcWhwLT53cSwgaWR4KTsKQEAgLTY1Niw3ICs2NjcsOSBAQAogCQkJKmJhZF93ciA9IHdyOwogCQkJYnJlYWs7CiAJCX0KLQkJd3FlID0gJnFocC0+d3EucnEucXVldWVbcWhwLT53cS5ycS5waWR4XTsKKwkJd3FlID0gKHVuaW9uIHQ0X3JlY3Zfd3IgKikoKHU4ICopcWhwLT53cS5ycS5xdWV1ZSArCisJCQkJCSAgIHFocC0+d3EucnEud3FfcGlkeCAqCisJCQkJCSAgIFQ0X0VRX0VOVFJZX1NJWkUpOwogCQlpZiAobnVtX3dycykKIAkJCWVyciA9IGJ1aWxkX3JkbWFfcmVjdihxaHAsIHdxZSwgd3IsICZsZW4xNik7CiAJCWVsc2UKQEAgLTY3NSwxNSArNjg4LDEyIEBACiAJCXdxZS0+cmVjdi5yMlsxXSA9IDA7CiAJCXdxZS0+cmVjdi5yMlsyXSA9IDA7CiAJCXdxZS0+cmVjdi5sZW4xNiA9IGxlbjE2OwotCQlpZiAobGVuMTYgPCA1KQotCQkJd3FlLT5mbGl0c1s4XSA9IDA7Ci0KIAkJUERCRygiJXMgY29va2llIDB4JWxseCBwaWR4ICV1XG4iLCBfX2Z1bmNfXywKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB3ci0+d3JfaWQsIHFocC0+d3EucnEucGlkeCk7Ci0JCXQ0X3JxX3Byb2R1Y2UoJnFocC0+d3EpOworCQl0NF9ycV9wcm9kdWNlKCZxaHAtPndxLCBsZW4xNik7CisJCWlkeCArPSBESVZfUk9VTkRfVVAobGVuMTYqMTYsIFQ0X0VRX0VOVFJZX1NJWkUpOwogCQl3ciA9IHdyLT5uZXh0OwogCQludW1fd3JzLS07Ci0JCWlkeCsrOwogCX0KIAlpZiAodDRfd3FfZGJfZW5hYmxlZCgmcWhwLT53cSkpCiAJCXQ0X3JpbmdfcnFfZGIoJnFocC0+d3EsIGlkeCk7CkBAIC05NTEsNyArOTYxLDggQEAKIAlfX2ZsdXNoX3FwKHFocCwgcmNocCwgc2NocCwgZmxhZyk7CiB9CiAKLXN0YXRpYyBpbnQgcmRtYV9maW5pKHN0cnVjdCBjNGl3X2RldiAqcmhwLCBzdHJ1Y3QgYzRpd19xcCAqcWhwKQorc3RhdGljIGludCByZG1hX2Zpbmkoc3RydWN0IGM0aXdfZGV2ICpyaHAsIHN0cnVjdCBjNGl3X3FwICpxaHAsCisJCSAgICAgc3RydWN0IGM0aXdfZXAgKmVwKQogewogCXN0cnVjdCBmd19yaV93ciAqd3FlOwogCWludCByZXQ7CkBAIC05NTksMTIgKzk3MCwxMiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlQREJHKCIlcyBxaHAgJXAgcWlkIDB4JXggdGlkICV1XG4iLCBfX2Z1bmNfXywgcWhwLCBxaHAtPndxLnNxLnFpZCwKLQkgICAgIHFocC0+ZXAtPmh3dGlkKTsKKwkgICAgIGVwLT5od3RpZCk7CiAKLQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mICp3cWUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT0ZBSUwpOworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YgKndxZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwotCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfREFUQSwgcWhwLT5lcC0+dHhxX2lkeCk7CisJc2V0X3dyX3R4cShza2IsIENQTF9QUklPUklUWV9EQVRBLCBlcC0+dHhxX2lkeCk7CiAKIAl3cWUgPSAoc3RydWN0IGZ3X3JpX3dyICopX19za2JfcHV0KHNrYiwgc2l6ZW9mKCp3cWUpKTsKIAltZW1zZXQod3FlLCAwLCBzaXplb2YgKndxZSk7CkBAIC05NzIsNyArOTgzLDcgQEAKIAkJRldfV1JfT1AoRldfUklfSU5JVF9XUikgfAogCQlGV19XUl9DT01QTCgxKSk7CiAJd3FlLT5mbG93aWRfbGVuMTYgPSBjcHVfdG9fYmUzMigKLQkJRldfV1JfRkxPV0lEKHFocC0+ZXAtPmh3dGlkKSB8CisJCUZXX1dSX0ZMT1dJRChlcC0+aHd0aWQpIHwKIAkJRldfV1JfTEVOMTYoRElWX1JPVU5EX1VQKHNpemVvZiAqd3FlLCAxNikpKTsKIAl3cWUtPmNvb2tpZSA9ICh1NjQpJndyX3dhaXQ7CiAKQEAgLTEwMzUsNyArMTA0Niw3IEBACiAJUERCRygiJXMgcWhwICVwIHFpZCAweCV4IHRpZCAldVxuIiwgX19mdW5jX18sIHFocCwgcWhwLT53cS5zcS5xaWQsCiAJICAgICBxaHAtPmVwLT5od3RpZCk7CiAKLQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mICp3cWUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT0ZBSUwpOworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YgKndxZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCXNldF93cl90eHEoc2tiLCBDUExfUFJJT1JJVFlfREFUQSwgcWhwLT5lcC0+dHhxX2lkeCk7CkBAIC0xMjAyLDE3ICsxMjEzLDE2IEBACiAJCWNhc2UgQzRJV19RUF9TVEFURV9DTE9TSU5HOgogCQkJQlVHX09OKGF0b21pY19yZWFkKCZxaHAtPmVwLT5jb20ua3JlZi5yZWZjb3VudCkgPCAyKTsKIAkJCXFocC0+YXR0ci5zdGF0ZSA9IEM0SVdfUVBfU1RBVEVfQ0xPU0lORzsKKwkJCWVwID0gcWhwLT5lcDsKIAkJCWlmICghaW50ZXJuYWwpIHsKIAkJCQlhYm9ydCA9IDA7CiAJCQkJZGlzY29ubmVjdCA9IDE7Ci0JCQkJZXAgPSBxaHAtPmVwOwogCQkJCWM0aXdfZ2V0X2VwKCZlcC0+Y29tKTsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgZmxhZyk7Ci0JCQlyZXQgPSByZG1hX2ZpbmkocmhwLCBxaHApOworCQkJcmV0ID0gcmRtYV9maW5pKHJocCwgcWhwLCBlcCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcWhwLT5sb2NrLCBmbGFnKTsKIAkJCWlmIChyZXQpIHsKLQkJCQllcCA9IHFocC0+ZXA7CiAJCQkJYzRpd19nZXRfZXAoJmVwLT5jb20pOwogCQkJCWRpc2Nvbm5lY3QgPSBhYm9ydCA9IDE7CiAJCQkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcmVzb3VyY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9yZXNvdXJjZS5jCmluZGV4IGZiMTk1ZDEuLjgzYjIzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9yZXNvdXJjZS5jCkBAIC0xMTAsMTEgKzExMCwxMiBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPnJlc291cmNlLnFpZF9maWZvX2xvY2spOwogCi0JaWYgKGtmaWZvX2FsbG9jKCZyZGV2LT5yZXNvdXJjZS5xaWRfZmlmbywgVDRfTUFYX1FJRFMgKiBzaXplb2YodTMyKSwKLQkJCUdGUF9LRVJORUwpKQorCWlmIChrZmlmb19hbGxvYygmcmRldi0+cmVzb3VyY2UucWlkX2ZpZm8sIHJkZXYtPmxsZGkudnItPnFwLnNpemUgKgorCQkJc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IFQ0X1FJRF9CQVNFOyBpIDwgVDRfUUlEX0JBU0UgKyBUNF9NQVhfUUlEUzsgaSsrKQorCWZvciAoaSA9IHJkZXYtPmxsZGkudnItPnFwLnN0YXJ0OworCSAgICAgaSA8IHJkZXYtPmxsZGkudnItPnFwLnN0YXJ0ICsgcmRldi0+bGxkaS52ci0+cXAuc2l6ZTsgaSsrKQogCQlpZiAoIShpICYgcmRldi0+cXBtYXNrKSkKIAkJCWtmaWZvX2luKCZyZGV2LT5yZXNvdXJjZS5xaWRfZmlmbywKIAkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgJmksIHNpemVvZih1MzIpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKaW5kZXggOWNmOGQ4NS4uMjRmMzY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0LmgKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJ0NF9tc2cuaCIKICNpbmNsdWRlICJ0NGZ3X3JpX2FwaS5oIgogCi0jZGVmaW5lIFQ0X1FJRF9CQVNFIDEwMjQKLSNkZWZpbmUgVDRfTUFYX1FJRFMgMjU2CiAjZGVmaW5lIFQ0X01BWF9OVU1fUVAgKDE8PDE2KQogI2RlZmluZSBUNF9NQVhfTlVNX0NRICgxPDwxNSkKICNkZWZpbmUgVDRfTUFYX05VTV9QRCAoMTw8MTUpCkBAIC02NSwxMCArNjMsMTAgQEAKIAl1OCBkYl9vZmY7CiB9OwogCi0jZGVmaW5lIFQ0X0VRX1NJWkUgNjQKKyNkZWZpbmUgVDRfRVFfRU5UUllfU0laRSA2NAogCiAjZGVmaW5lIFQ0X1NRX05VTV9TTE9UUyA0Ci0jZGVmaW5lIFQ0X1NRX05VTV9CWVRFUyAoVDRfRVFfU0laRSAqIFQ0X1NRX05VTV9TTE9UUykKKyNkZWZpbmUgVDRfU1FfTlVNX0JZVEVTIChUNF9FUV9FTlRSWV9TSVpFICogVDRfU1FfTlVNX1NMT1RTKQogI2RlZmluZSBUNF9NQVhfU0VORF9TR0UgKChUNF9TUV9OVU1fQllURVMgLSBzaXplb2Yoc3RydWN0IGZ3X3JpX3NlbmRfd3IpIC0gXAogCQkJc2l6ZW9mKHN0cnVjdCBmd19yaV9pc2dsKSkgLyBzaXplb2Yoc3RydWN0IGZ3X3JpX3NnZSkpCiAjZGVmaW5lIFQ0X01BWF9TRU5EX0lOTElORSAoKFQ0X1NRX05VTV9CWVRFUyAtIHNpemVvZihzdHJ1Y3QgZndfcmlfc2VuZF93cikgLSBcCkBAIC04NCw3ICs4Miw3IEBACiAjZGVmaW5lIFQ0X01BWF9GUl9ERVBUSCAoVDRfTUFYX0ZSX0lNTUQgLyBzaXplb2YodTY0KSkKIAogI2RlZmluZSBUNF9SUV9OVU1fU0xPVFMgMgotI2RlZmluZSBUNF9SUV9OVU1fQllURVMgKFQ0X0VRX1NJWkUgKiBUNF9SUV9OVU1fU0xPVFMpCisjZGVmaW5lIFQ0X1JRX05VTV9CWVRFUyAoVDRfRVFfRU5UUllfU0laRSAqIFQ0X1JRX05VTV9TTE9UUykKICNkZWZpbmUgVDRfTUFYX1JFQ1ZfU0dFIDQKIAogdW5pb24gdDRfd3IgewpAQCAtOTcsMjAgKzk1LDE4IEBACiAJc3RydWN0IGZ3X3JpX2ZyX25zbXJfd3IgZnI7CiAJc3RydWN0IGZ3X3JpX2ludl9sc3RhZ193ciBpbnY7CiAJc3RydWN0IHQ0X3N0YXR1c19wYWdlIHN0YXR1czsKLQlfX2JlNjQgZmxpdHNbVDRfRVFfU0laRSAvIHNpemVvZihfX2JlNjQpICogVDRfU1FfTlVNX1NMT1RTXTsKKwlfX2JlNjQgZmxpdHNbVDRfRVFfRU5UUllfU0laRSAvIHNpemVvZihfX2JlNjQpICogVDRfU1FfTlVNX1NMT1RTXTsKIH07CiAKIHVuaW9uIHQ0X3JlY3Zfd3IgewogCXN0cnVjdCBmd19yaV9yZWN2X3dyIHJlY3Y7CiAJc3RydWN0IHQ0X3N0YXR1c19wYWdlIHN0YXR1czsKLQlfX2JlNjQgZmxpdHNbVDRfRVFfU0laRSAvIHNpemVvZihfX2JlNjQpICogVDRfUlFfTlVNX1NMT1RTXTsKKwlfX2JlNjQgZmxpdHNbVDRfRVFfRU5UUllfU0laRSAvIHNpemVvZihfX2JlNjQpICogVDRfUlFfTlVNX1NMT1RTXTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3dyX2hkcih1bmlvbiB0NF93ciAqd3FlLCB1MTYgd3JpZCwKIAkJCSAgICAgICBlbnVtIGZ3X3dyX29wY29kZXMgb3Bjb2RlLCB1OCBmbGFncywgdTggbGVuMTYpCiB7Ci0JaW50IHNsb3RzX3VzZWQ7Ci0KIAl3cWUtPnNlbmQub3Bjb2RlID0gKHU4KW9wY29kZTsKIAl3cWUtPnNlbmQuZmxhZ3MgPSBmbGFnczsKIAl3cWUtPnNlbmQud3JpZCA9IHdyaWQ7CkBAIC0xMTgsMTIgKzExNCw2IEBACiAJd3FlLT5zZW5kLnIxWzFdID0gMDsKIAl3cWUtPnNlbmQucjFbMl0gPSAwOwogCXdxZS0+c2VuZC5sZW4xNiA9IGxlbjE2OwotCi0Jc2xvdHNfdXNlZCA9IERJVl9ST1VORF9VUChsZW4xNioxNiwgVDRfRVFfU0laRSk7Ci0Jd2hpbGUgKHNsb3RzX3VzZWQgPCBUNF9TUV9OVU1fU0xPVFMpIHsKLQkJd3FlLT5mbGl0c1tzbG90c191c2VkICogVDRfRVFfU0laRSAvIHNpemVvZihfX2JlNjQpXSA9IDA7Ci0JCXNsb3RzX3VzZWQrKzsKLQl9CiB9CiAKIC8qIENRRS9BRSBzdGF0dXMgY29kZXMgKi8KQEAgLTI4OSw2ICsyNzksNyBAQAogCXUxNiBzaXplOwogCXUxNiBjaWR4OwogCXUxNiBwaWR4OworCXUxNiB3cV9waWR4OwogfTsKIAogc3RydWN0IHQ0X3N3cnFlIHsKQEAgLTMxMCw2ICszMDEsNyBAQAogCXUxNiBzaXplOwogCXUxNiBjaWR4OwogCXUxNiBwaWR4OworCXUxNiB3cV9waWR4OwogfTsKIAogc3RydWN0IHQ0X3dxIHsKQEAgLTM0MCwxMSArMzMyLDE0IEBACiAJcmV0dXJuIHdxLT5ycS5zaXplIC0gMSAtIHdxLT5ycS5pbl91c2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0NF9ycV9wcm9kdWNlKHN0cnVjdCB0NF93cSAqd3EpCitzdGF0aWMgaW5saW5lIHZvaWQgdDRfcnFfcHJvZHVjZShzdHJ1Y3QgdDRfd3EgKndxLCB1OCBsZW4xNikKIHsKIAl3cS0+cnEuaW5fdXNlKys7CiAJaWYgKCsrd3EtPnJxLnBpZHggPT0gd3EtPnJxLnNpemUpCiAJCXdxLT5ycS5waWR4ID0gMDsKKwl3cS0+cnEud3FfcGlkeCArPSBESVZfUk9VTkRfVVAobGVuMTYqMTYsIFQ0X0VRX0VOVFJZX1NJWkUpOworCWlmICh3cS0+cnEud3FfcGlkeCA+PSB3cS0+cnEuc2l6ZSAqIFQ0X1JRX05VTV9TTE9UUykKKwkJd3EtPnJxLndxX3BpZHggJT0gd3EtPnJxLnNpemUgKiBUNF9SUV9OVU1fU0xPVFM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0NF9ycV9jb25zdW1lKHN0cnVjdCB0NF93cSAqd3EpCkBAIC0zNzAsMTEgKzM2NSwxNCBAQAogCXJldHVybiB3cS0+c3Euc2l6ZSAtIDEgLSB3cS0+c3EuaW5fdXNlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdDRfc3FfcHJvZHVjZShzdHJ1Y3QgdDRfd3EgKndxKQorc3RhdGljIGlubGluZSB2b2lkIHQ0X3NxX3Byb2R1Y2Uoc3RydWN0IHQ0X3dxICp3cSwgdTggbGVuMTYpCiB7CiAJd3EtPnNxLmluX3VzZSsrOwogCWlmICgrK3dxLT5zcS5waWR4ID09IHdxLT5zcS5zaXplKQogCQl3cS0+c3EucGlkeCA9IDA7CisJd3EtPnNxLndxX3BpZHggKz0gRElWX1JPVU5EX1VQKGxlbjE2KjE2LCBUNF9FUV9FTlRSWV9TSVpFKTsKKwlpZiAod3EtPnNxLndxX3BpZHggPj0gd3EtPnNxLnNpemUgKiBUNF9TUV9OVU1fU0xPVFMpCisJCXdxLT5zcS53cV9waWR4ICU9IHdxLT5zcS5zaXplICogVDRfU1FfTlVNX1NMT1RTOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdDRfc3FfY29uc3VtZShzdHJ1Y3QgdDRfd3EgKndxKQpAQCAtMzg2LDE0ICszODQsMTIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHQ0X3Jpbmdfc3FfZGIoc3RydWN0IHQ0X3dxICp3cSwgdTE2IGluYykKIHsKLQlpbmMgKj0gVDRfU1FfTlVNX1NMT1RTOwogCXdtYigpOwogCXdyaXRlbChRSUQod3EtPnNxLnFpZCkgfCBQSURYKGluYyksIHdxLT5kYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0NF9yaW5nX3JxX2RiKHN0cnVjdCB0NF93cSAqd3EsIHUxNiBpbmMpCiB7Ci0JaW5jICo9IFQ0X1JRX05VTV9TTE9UUzsKIAl3bWIoKTsKIAl3cml0ZWwoUUlEKHdxLT5ycS5xaWQpIHwgUElEWChpbmMpLCB3cS0+ZGIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0ZndfcmlfYXBpLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDRmd19yaV9hcGkuaAppbmRleCBmYzcwNmJkLi5kYzE5M2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDRmd19yaV9hcGkuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDRmd19yaV9hcGkuaApAQCAtODI2LDQgKzgyNiwxNCBAQAogI2RlZmluZSBTX1VMUFRYX05TR0UgICAgMAogI2RlZmluZSBNX1VMUFRYX05TR0UgICAgMHhGRkZGCiAjZGVmaW5lIFZfVUxQVFhfTlNHRSh4KSAoKHgpIDw8IFNfVUxQVFhfTlNHRSkKKworI2RlZmluZSBTX1JYX0RBQ0tfTU9ERSAgICAyOQorI2RlZmluZSBNX1JYX0RBQ0tfTU9ERSAgICAweDMKKyNkZWZpbmUgVl9SWF9EQUNLX01PREUoeCkgKCh4KSA8PCBTX1JYX0RBQ0tfTU9ERSkKKyNkZWZpbmUgR19SWF9EQUNLX01PREUoeCkgKCgoeCkgPj4gU19SWF9EQUNLX01PREUpICYgTV9SWF9EQUNLX01PREUpCisKKyNkZWZpbmUgU19SWF9EQUNLX0NIQU5HRSAgICAzMQorI2RlZmluZSBWX1JYX0RBQ0tfQ0hBTkdFKHgpICgoeCkgPDwgU19SWF9EQUNLX0NIQU5HRSkKKyNkZWZpbmUgRl9SWF9EQUNLX0NIQU5HRSAgICBWX1JYX0RBQ0tfQ0hBTkdFKDFVKQorCiAjZW5kaWYgLyogX1Q0RldfUklfQVBJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2VxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2VxLmMKaW5kZXggM2I4NzU4OS4uZDliMWJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9lcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfZXEuYwpAQCAtMTIyLDIxICsxMjIsMjEgQEAKIAogCS8qIHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycyBhbmQgaW5pdGlhbGl6ZSB3b3JrIHF1ZXVlcyAqLwogCWlmICh0eXBlID09IEVIQ0FfRVEpIHsKKwkJdGFza2xldF9pbml0KCZlcS0+aW50ZXJydXB0X3Rhc2ssIGVoY2FfdGFza2xldF9lcSwgKGxvbmcpc2hjYSk7CisKIAkJcmV0ID0gaWJtZWJ1c19yZXF1ZXN0X2lycShlcS0+aXN0LCBlaGNhX2ludGVycnVwdF9lcSwKIAkJCQkJICBJUlFGX0RJU0FCTEVELCAiZWhjYV9lcSIsCiAJCQkJCSAgKHZvaWQgKilzaGNhKTsKIAkJaWYgKHJldCA8IDApCiAJCQllaGNhX2VycihpYl9kZXYsICJDYW4ndCBtYXAgaW50ZXJydXB0IGhhbmRsZXIuIik7Ci0KLQkJdGFza2xldF9pbml0KCZlcS0+aW50ZXJydXB0X3Rhc2ssIGVoY2FfdGFza2xldF9lcSwgKGxvbmcpc2hjYSk7CiAJfSBlbHNlIGlmICh0eXBlID09IEVIQ0FfTkVRKSB7CisJCXRhc2tsZXRfaW5pdCgmZXEtPmludGVycnVwdF90YXNrLCBlaGNhX3Rhc2tsZXRfbmVxLCAobG9uZylzaGNhKTsKKwogCQlyZXQgPSBpYm1lYnVzX3JlcXVlc3RfaXJxKGVxLT5pc3QsIGVoY2FfaW50ZXJydXB0X25lcSwKIAkJCQkJICBJUlFGX0RJU0FCTEVELCAiZWhjYV9uZXEiLAogCQkJCQkgICh2b2lkICopc2hjYSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZWhjYV9lcnIoaWJfZGV2LCAiQ2FuJ3QgbWFwIGludGVycnVwdCBoYW5kbGVyLiIpOwotCi0JCXRhc2tsZXRfaW5pdCgmZXEtPmludGVycnVwdF90YXNrLCBlaGNhX3Rhc2tsZXRfbmVxLCAobG9uZylzaGNhKTsKIAl9CiAKIAllcS0+aXNfaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwppbmRleCA2N2M0NTM0Li5jMjQwZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwpAQCAtMzYwLDcgKzM2MCw4IEBACiAJICogYSBmaXJtd2FyZSBwcm9wZXJ0eSwgc28gaXQncyB2YWxpZCBhY3Jvc3MgYWxsIGFkYXB0ZXJzCiAJICovCiAJaWYgKGVoY2FfbG9ja19oY2FsbHMgPT0gLTEpCi0JCWVoY2FfbG9ja19oY2FsbHMgPSAhKHNoY2EtPmhjYV9jYXAgJiBIQ0FfQ0FQX0hfQUxMT0NfUkVTX1NZTkMpOworCQllaGNhX2xvY2tfaGNhbGxzID0gIUVIQ0FfQk1BU0tfR0VUKEhDQV9DQVBfSF9BTExPQ19SRVNfU1lOQywKKwkJCQkJc2hjYS0+aGNhX2NhcCk7CiAKIAkvKiB0cmFuc2xhdGUgc3VwcG9ydGVkIE1SIHBhZ2Ugc2l6ZXM7IGFsd2F5cyBzdXBwb3J0IDRLICovCiAJc2hjYS0+aGNhX2NhcF9tcl9wZ3NpemUgPSBFSENBX1BBR0VTSVpFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwppbmRleCAzMWE2OGI5Li41M2Y0Y2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuYwpAQCAtOTMzLDExICs5MzMsNiBAQAogCS8qIGNoZWNrIGFsbCBGTVIgYmVsb25nIHRvIHNhbWUgU0hDQSwgYW5kIGNoZWNrIGludGVybmFsIGZsYWcgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGliX2ZtciwgZm1yX2xpc3QsIGxpc3QpIHsKIAkJcHJldl9zaGNhID0gc2hjYTsKLQkJaWYgKCFpYl9mbXIpIHsKLQkJCWVoY2FfZ2VuX2VycigiYmFkIGZtcj0lcCBpbiBsaXN0IiwgaWJfZm1yKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIHVubWFwX2Ztcl9leGl0MDsKLQkJfQogCQlzaGNhID0gY29udGFpbmVyX29mKGliX2Ztci0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLAogCQkJCSAgICBpYl9kZXZpY2UpOwogCQllX2ZtciA9IGNvbnRhaW5lcl9vZihpYl9mbXIsIHN0cnVjdCBlaGNhX21yLCBpYi5pYl9mbXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCmluZGV4IDQ3ZDM4OGUuLjMyZmIzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogCQlyZXR1cm4gU1RfVUQ7CiAJY2FzZSBJQl9RUFRfUkFXX0lQVjY6CiAJCXJldHVybiAtRUlOVkFMOwotCWNhc2UgSUJfUVBUX1JBV19FVFk6CisJY2FzZSBJQl9RUFRfUkFXX0VUSEVSVFlQRToKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGVmYXVsdDoKIAkJZWhjYV9nZW5fZXJyKCJJbnZhbGlkIGlicXB0eXBlPSV4IiwgaWJxcHR5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX2lmLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYwppbmRleCA0ZDVkYzMzLi5lNmY5Y2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYwpAQCAtMjY5LDYgKzI2OSw3IEBACiAJCQkgICAgIHN0cnVjdCBlaGNhX2NxICpjcSwKIAkJCSAgICAgc3RydWN0IGVoY2FfYWxsb2NfY3FfcGFybXMgKnBhcmFtKQogeworCWludCByYzsKIAl1NjQgcmV0OwogCXVuc2lnbmVkIGxvbmcgb3V0c1tQTFBBUl9IQ0FMTDlfQlVGU0laRV07CiAKQEAgLTI4Myw4ICsyODQsMTkgQEAKIAlwYXJhbS0+YWN0X25yX29mX2VudHJpZXMgPSAodTMyKW91dHNbM107CiAJcGFyYW0tPmFjdF9wYWdlcyA9ICh1MzIpb3V0c1s0XTsKIAotCWlmIChyZXQgPT0gSF9TVUNDRVNTKQotCQloY3BfZ2FscGFzX2N0b3IoJmNxLT5nYWxwYXMsIDAsIG91dHNbNV0sIG91dHNbNl0pOworCWlmIChyZXQgPT0gSF9TVUNDRVNTKSB7CisJCXJjID0gaGNwX2dhbHBhc19jdG9yKCZjcS0+Z2FscGFzLCAwLCBvdXRzWzVdLCBvdXRzWzZdKTsKKwkJaWYgKHJjKSB7CisJCQllaGNhX2dlbl9lcnIoIkNvdWxkIG5vdCBlc3RhYmxpc2ggSFcgYWNjZXNzLiByYz0lZCBwYWRkcj0lI2x4IiwKKwkJCQkgICAgIHJjLCBvdXRzWzVdKTsKKworCQkJZWhjYV9wbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX1JFU09VUkNFLAorCQkJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgLyogcjQgKi8KKwkJCQkJCWNxLT5pcHpfY3FfaGFuZGxlLmhhbmRsZSwgIC8qIHI1ICovCisJCQkJCQkwLCAwLCAwLCAwLCAwKTsKKwkJCXJldCA9IEhfTk9fTUVNOworCQl9CisJfQogCiAJaWYgKHJldCA9PSBIX05PVF9FTk9VR0hfUkVTT1VSQ0VTKQogCQllaGNhX2dlbl9lcnIoIk5vdCBlbm91Z2ggcmVzb3VyY2VzLiByZXQ9JWxsaSIsIHJldCk7CkBAIC0yOTUsNiArMzA3LDcgQEAKIHU2NCBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfcXAoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKIAkJCSAgICAgc3RydWN0IGVoY2FfYWxsb2NfcXBfcGFybXMgKnBhcm1zLCBpbnQgaXNfdXNlcikKIHsKKwlpbnQgcmM7CiAJdTY0IHJldDsKIAl1NjQgYWxsb2NhdGVfY29udHJvbHMsIG1heF9yMTBfcmVnLCByMTEsIHIxMjsKIAl1bnNpZ25lZCBsb25nIG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOwpAQCAtMzU4LDggKzM3MSwxOSBAQAogCXBhcm1zLT5ycXVldWUucXVldWVfc2l6ZSA9CiAJCSh1MzIpRUhDQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX1JRVUVVRV9TSVpFX1BBR0VTLCBvdXRzWzRdKTsKIAotCWlmIChyZXQgPT0gSF9TVUNDRVNTKQotCQloY3BfZ2FscGFzX2N0b3IoJnBhcm1zLT5nYWxwYXMsIGlzX3VzZXIsIG91dHNbNl0sIG91dHNbNl0pOworCWlmIChyZXQgPT0gSF9TVUNDRVNTKSB7CisJCXJjID0gaGNwX2dhbHBhc19jdG9yKCZwYXJtcy0+Z2FscGFzLCBpc191c2VyLCBvdXRzWzZdLCBvdXRzWzZdKTsKKwkJaWYgKHJjKSB7CisJCQllaGNhX2dlbl9lcnIoIkNvdWxkIG5vdCBlc3RhYmxpc2ggSFcgYWNjZXNzLiByYz0lZCBwYWRkcj0lI2x4IiwKKwkJCQkgICAgIHJjLCBvdXRzWzZdKTsKKworCQkJZWhjYV9wbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX1JFU09VUkNFLAorCQkJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgLyogcjQgKi8KKwkJCQkJCXBhcm1zLT5xcF9oYW5kbGUuaGFuZGxlLCAgLyogcjUgKi8KKwkJCQkJCTAsIDAsIDAsIDAsIDApOworCQkJcmV0ID0gSF9OT19NRU07CisJCX0KKwl9CiAKIAlpZiAocmV0ID09IEhfTk9UX0VOT1VHSF9SRVNPVVJDRVMpCiAJCWVoY2FfZ2VuX2VycigiTm90IGVub3VnaCByZXNvdXJjZXMuIHJldD0lbGxpIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9waHlwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfcGh5cC5jCmluZGV4IGIzZTBlNzIuLjA3NzM3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9waHlwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuYwpAQCAtNDIsMTAgKzQyLDkgQEAKICNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKICNpbmNsdWRlICJoaXB6X2h3LmgiCiAKLWludCBoY2FsbF9tYXBfcGFnZSh1NjQgcGh5c2FkZHIsIHU2NCAqbWFwYWRkcikKK3U2NCBoY2FsbF9tYXBfcGFnZSh1NjQgcGh5c2FkZHIpCiB7Ci0JKm1hcGFkZHIgPSAodTY0KShpb3JlbWFwKHBoeXNhZGRyLCBFSENBX1BBR0VTSVpFKSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuICh1NjQpaW9yZW1hcChwaHlzYWRkciwgRUhDQV9QQUdFU0laRSk7CiB9CiAKIGludCBoY2FsbF91bm1hcF9wYWdlKHU2NCBtYXBhZGRyKQpAQCAtNTgsOSArNTcsOSBAQAogCQkgICAgdTY0IHBhZGRyX2tlcm5lbCwgdTY0IHBhZGRyX3VzZXIpCiB7CiAJaWYgKCFpc191c2VyKSB7Ci0JCWludCByZXQgPSBoY2FsbF9tYXBfcGFnZShwYWRkcl9rZXJuZWwsICZnYWxwYXMtPmtlcm5lbC5md19oYW5kbGUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJZ2FscGFzLT5rZXJuZWwuZndfaGFuZGxlID0gaGNhbGxfbWFwX3BhZ2UocGFkZHJfa2VybmVsKTsKKwkJaWYgKCFnYWxwYXMtPmtlcm5lbC5md19oYW5kbGUpCisJCQlyZXR1cm4gLUVOT01FTTsKIAl9IGVsc2UKIAkJZ2FscGFzLT5rZXJuZWwuZndfaGFuZGxlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9waHlwLmgKaW5kZXggMjA0MjI3ZC4uZDFiMDI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfcGh5cC5oCkBAIC04Myw3ICs4Myw3IEBACiAKIGludCBoY3BfZ2FscGFzX2R0b3Ioc3RydWN0IGhfZ2FscGFzICpnYWxwYXMpOwogCi1pbnQgaGNhbGxfbWFwX3BhZ2UodTY0IHBoeXNhZGRyLCB1NjQgKiBtYXBhZGRyKTsKK3U2NCBoY2FsbF9tYXBfcGFnZSh1NjQgcGh5c2FkZHIpOwogCiBpbnQgaGNhbGxfdW5tYXBfcGFnZSh1NjQgbWFwYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCAyMTMzNzQ2Li43NjVmMGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0zOTAsNiArMzkwLDggQEAKIAlpcGF0aF9lbmFibGVfYXJtbGF1bmNoKGRkKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYW51cF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKKwogc3RhdGljIGludCBfX2RldmluaXQgaXBhdGhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC02MTYsOCArNjE4LDEzIEBACiAJZ290byBiYWlsOwogCiBiYWlsX2lycXNldHVwOgotCWlmIChwZGV2LT5pcnEpCi0JCWZyZWVfaXJxKHBkZXYtPmlycSwgZGQpOworCWNsZWFudXBfZGV2aWNlKGRkKTsKKworCWlmIChkZC0+aXBhdGhfaXJxKQorCQlkZC0+aXBhdGhfZl9mcmVlX2lycShkZCk7CisKKwlpZiAoZGQtPmlwYXRoX2ZfY2xlYW51cCkKKwkJZGQtPmlwYXRoX2ZfY2xlYW51cChkZCk7CiAKIGJhaWxfaW91bm1hcDoKIAlpb3VubWFwKCh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKikgZGQtPmlwYXRoX2tyZWdiYXNlKTsKQEAgLTYzNSw3ICs2NDIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjbGVhbnVwX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJaW50IHBvcnQ7CiAJc3RydWN0IGlwYXRoX3BvcnRkYXRhICoqdG1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCmluZGV4IDM2MDNhZTguLmY0Y2VlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKQEAgLTE4MTcsNyArMTgxNyw3IEBACiAJY2FzZSBJQl9RUFRfUkFXX0lQVjY6CiAJCW9wX21vZCA9IDI7CiAJCWJyZWFrOwotCWNhc2UgSUJfUVBUX1JBV19FVFk6CisJY2FzZSBJQl9RUFRfUkFXX0VUSEVSVFlQRToKIAkJb3BfbW9kID0gMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCmluZGV4IGRlN2I5ZDcuLjBjOWYwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwpAQCAtMTEwLDggKzExMCw4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2lkeF9hZGRyOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmVzX3BjaV90YWJsZVtdID0gewotCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAotCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjBfS1IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCXsgUENJX1ZERVZJQ0UoTkVURUZGRUNULCBQQ0lfREVWSUNFX0lEX05FVEVGRkVDVF9ORTAyMCksIH0sCisJeyBQQ0lfVkRFVklDRShORVRFRkZFQ1QsIFBDSV9ERVZJQ0VfSURfTkVURUZGRUNUX05FMDIwX0tSKSwgfSwKIAl7MH0KIH07CiAKQEAgLTI1OSwxMyArMjU5LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbmVzX3FwICpuZXNxcCA9IGNxcF9yZXF1ZXN0LT5jcXBfY2FsbGJhY2tfcG9pbnRlcjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7Ci0JdTMyIHFwX2lkOwogCiAJYXRvbWljX2luYygmcXBzX2Rlc3Ryb3llZCk7CiAKIAkvKiBGcmVlIHRoZSBjb250cm9sIHN0cnVjdHVyZXMgKi8KIAotCXFwX2lkID0gbmVzcXAtPmh3cXAucXBfaWQ7CiAJaWYgKG5lc3FwLT5wYmxfdmJhc2UpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChuZXNkZXYtPnBjaWRldiwgbmVzcXAtPnFwX21lbV9zaXplLAogCQkJCW5lc3FwLT5od3FwLnEyX3ZiYXNlLCBuZXNxcC0+aHdxcC5xMl9wYmFzZSk7CkBAIC00NDEsNyArNDM5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWMgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqbW1pb19yZWdzID0gTlVMTDsKIAl1OCBod19yZXY7CiAKQEAgLTY2NCwyNSArNjYxLDIxIEBACiAJbmVzX25vdGlmaWVyc19yZWdpc3RlcmVkKys7CiAKIAkvKiBJbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlcyAqLwotCQlpZiAoKG5ldGRldiA9IG5lc19uZXRkZXZfaW5pdChuZXNkZXYsIG1taW9fcmVncykpID09IE5VTEwpIHsKLQkJCWdvdG8gYmFpbDc7Ci0JCX0KKwlpZiAoKG5ldGRldiA9IG5lc19uZXRkZXZfaW5pdChuZXNkZXYsIG1taW9fcmVncykpID09IE5VTEwpCisJCWdvdG8gYmFpbDc7CiAKLQkJLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKi8KLQkJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYsIHJldCA9ICVkXG4iLCByZXQpOwotCQkJbmVzX25ldGRldl9kZXN0cm95KG5ldGRldik7Ci0JCQlnb3RvIGJhaWw3OwotCQl9CisJLyogUmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKi8KKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYsIHJldCA9ICVkXG4iLCByZXQpOworCQluZXNfbmV0ZGV2X2Rlc3Ryb3kobmV0ZGV2KTsKKwkJZ290byBiYWlsNzsKKwl9CiAKLQkJbmVzX3ByaW50X21hY2FkZHIobmV0ZGV2KTsKLQkJLyogY3JlYXRlIGEgQ00gY29yZSBmb3IgdGhpcyBuZXRkZXYgKi8KLQkJbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CisJbmVzX3ByaW50X21hY2FkZHIobmV0ZGV2KTsKIAotCQluZXNkZXYtPm5ldGRldl9jb3VudCsrOwotCQluZXNkZXYtPm5lc2FkYXB0ZXItPm5ldGRldl9jb3VudCsrOwotCisJbmVzZGV2LT5uZXRkZXZfY291bnQrKzsKKwluZXNkZXYtPm5lc2FkYXB0ZXItPm5ldGRldl9jb3VudCsrOwogCiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IE5ldEVmZmVjdCBSTklDIGRyaXZlciBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIiwKIAkJCXBjaV9uYW1lKHBjaWRldikpOwpAQCAtMTEwNCw3ICsxMDk3LDcgQEAKIAkJaSsrOwogCX0KIAotCXJldHVybiAgc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCVYXG4iLCB3cW1fcXVhbnRhKTsKKwlyZXR1cm4gIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglWFxuIiwgd3FtX3F1YW50YV92YWx1ZSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKaW5kZXggY2M3OGZlZTEuLmIzZDE0NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaApAQCAtMjYyLDYgKzI2Miw3IEBACiAJdTE2ICAgICAgICAgICAgICAgICAgICBiYXNlX2Rvb3JiZWxsX2luZGV4OwogCXUxNiAgICAgICAgICAgICAgICAgICAgY3VycmNxX2NvdW50OwogCXUxNiAgICAgICAgICAgICAgICAgICAgZGVlcGNxX2NvdW50OworCXU4ICAgICAgICAgICAgICAgICAgICAgaXdfc3RhdHVzOwogCXU4ICAgICAgICAgICAgICAgICAgICAgbXNpX2VuYWJsZWQ7CiAJdTggICAgICAgICAgICAgICAgICAgICBuZXRkZXZfY291bnQ7CiAJdTggICAgICAgICAgICAgICAgICAgICBuYXBpX2lzcl9yYW47CkBAIC01MjcsNiArNTI4LDcgQEAKIGludCBuZXNfaHdfbW9kaWZ5X3FwKHN0cnVjdCBuZXNfZGV2aWNlICosIHN0cnVjdCBuZXNfcXAgKiwgdTMyLCB1MzIsIHUzMik7CiBpbnQgbmVzX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKiwgc3RydWN0IGliX3FwX2F0dHIgKiwgaW50LCBzdHJ1Y3QgaWJfdWRhdGEgKik7CiBzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzX2luaXRfb2ZhX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgIG5lc19wb3J0X2liZXZlbnQoc3RydWN0IG5lc192bmljICpuZXN2bmljKTsKIHZvaWQgbmVzX2Rlc3Ryb3lfb2ZhX2RldmljZShzdHJ1Y3QgbmVzX2liX2RldmljZSAqKTsKIGludCBuZXNfcmVnaXN0ZXJfb2ZhX2RldmljZShzdHJ1Y3QgbmVzX2liX2RldmljZSAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKaW5kZXggZDg3NmQwNC4uNDQzY2VhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCkBAIC0xNzE5LDggKzE3MTksNiBAQAogewogCWludCBkYXRhc2l6ZSA9IDA7CiAJdTMyIGluY19zZXF1ZW5jZTsKLQl1MzIgcmVtX3NlcV9hY2s7Ci0JdTMyIHJlbV9zZXE7CiAJaW50IHJldCA9IDA7CiAJaW50IG9wdGlvbnNpemU7CiAJb3B0aW9uc2l6ZSA9ICh0Y3BoLT5kb2ZmIDw8IDIpIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwpAQCAtMTczMCw4ICsxNzI4LDYgQEAKIAogCXNrYl9wdWxsKHNrYiwgdGNwaC0+ZG9mZiA8PCAyKTsKIAlpbmNfc2VxdWVuY2UgPSBudG9obCh0Y3BoLT5zZXEpOwotCXJlbV9zZXEgPSBudG9obCh0Y3BoLT5zZXEpOwotCXJlbV9zZXFfYWNrID0gIG50b2hsKHRjcGgtPmFja19zZXEpOwogCWRhdGFzaXplID0gc2tiLT5sZW47CiAJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgewogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOgpAQCAtMjU2NSw3ICsyNTYxLDcgQEAKIAl1MTYgbGFzdF9hZTsKIAl1OCBvcmlnaW5hbF9od190Y3Bfc3RhdGU7CiAJdTggb3JpZ2luYWxfaWJxcF9zdGF0ZTsKLQllbnVtIGl3X2NtX2V2ZW50X3R5cGUgZGlzY29ubl9zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CisJZW51bSBpd19jbV9ldmVudF9zdGF0dXMgZGlzY29ubl9zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CiAJaW50IGlzc3VlX2Rpc2Nvbm4gPSAwOwogCWludCBpc3N1ZV9jbG9zZSA9IDA7CiAJaW50IGlzc3VlX2ZsdXNoID0gMDsKQEAgLTMxMjgsMTcgKzMxMjQsMTUgQEAKIAlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWM7CiAJc3RydWN0IG5lc19jbV9saXN0ZW5lciAqY21fbm9kZTsKIAlzdHJ1Y3QgbmVzX2NtX2luZm8gY21faW5mbzsKLQlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJaW50IGVycjsKIAotCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJjbV9pZCA9ICVwLCBsb2NhbCBwb3J0ID0gMHglMDRYLlxuIiwKIAkJCWNtX2lkLCBudG9ocyhjbV9pZC0+bG9jYWxfYWRkci5zaW5fcG9ydCkpOwogCiAJbmVzdm5pYyA9IHRvX25lc3ZuaWMoY21faWQtPmRldmljZSk7CiAJaWYgKCFuZXN2bmljKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlhZGFwdGVyID0gbmVzdm5pYy0+bmVzZGV2LT5uZXNhZGFwdGVyOworCiAJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJuZXN2bmljPSVwLCBuZXRkZXY9JXAsICVzXG4iLAogCQkJbmVzdm5pYywgbmVzdm5pYy0+bmV0ZGV2LCBuZXN2bmljLT5uZXRkZXYtPm5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA1Nzg3NGExLi5mODIzM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTE5NzAsNyArMTk3MCw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiKAogCQkJCW5lc3ZuaWMtPm5pYy50eF9za2JbbmVzdm5pYy0+bmljLnNxX3RhaWxdKTsKIAotCQluZXN2bmljLT5uaWMuc3FfdGFpbCA9ICgrK25lc3ZuaWMtPm5pYy5zcV90YWlsKQorCQluZXN2bmljLT5uaWMuc3FfdGFpbCA9IChuZXN2bmljLT5uaWMuc3FfdGFpbCArIDEpCiAJCQkJCSYgKG5lc3ZuaWMtPm5pYy5zcV9zaXplIC0gMSk7CiAJfQogCkBAIC0yNzM3LDkgKzI3MzcsOSBAQAogCQkJCW5lc25pYy0+c3FfdGFpbCAmPSBuZXNuaWMtPnNxX3NpemUtMTsKIAkJCQlpZiAoc3FfY3FlcyA+IDEyOCkgewogCQkJCQliYXJyaWVyKCk7Ci0JCQkJLyogcmVzdGFydCB0aGUgcXVldWUgaWYgaXQgaGFkIGJlZW4gc3RvcHBlZCAqLwotCQkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5lc3ZuaWMtPm5ldGRldikpCi0JCQkJCW5ldGlmX3dha2VfcXVldWUobmVzdm5pYy0+bmV0ZGV2KTsKKwkJCQkJLyogcmVzdGFydCB0aGUgcXVldWUgaWYgaXQgaGFkIGJlZW4gc3RvcHBlZCAqLworCQkJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXN2bmljLT5uZXRkZXYpKQorCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXN2bmljLT5uZXRkZXYpOwogCQkJCQlzcV9jcWVzID0gMDsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtMjk5OSwxMSArMjk5OSw4IEBACiAKIHN0YXRpYyB1OCAqbG9jYXRlX21wYSh1OCAqcGt0LCB1MzIgYWVxX2luZm8pCiB7Ci0JdTE2IHBrdF9sZW47Ci0KIAlpZiAoYWVxX2luZm8gJiBORVNfQUVRRV9RMl9EQVRBX0VUSEVSTkVUKSB7CiAJCS8qIHNraXAgb3ZlciBldGhlcm5ldCBoZWFkZXIgKi8KLQkJcGt0X2xlbiA9IGJlMTZfdG9fY3B1KCoodTE2ICopKHBrdCArIEVUSF9ITEVOIC0gMikpOwogCQlwa3QgKz0gRVRIX0hMRU47CiAKIAkJLyogU2tpcCBvdmVyIElQIGFuZCBUQ1AgaGVhZGVycyAqLwpAQCAtMzI4Myw5ICszMjgwLDE1IEBACiAJZWxzZQogCQltb2RfcXBfZmxhZ3MgfD0gTkVTX0NRUF9RUF9URVJNX0RPTlRfU0VORF9URVJNX01TRzsKIAotCW5lc190ZXJtaW5hdGVfc3RhcnRfdGltZXIobmVzcXApOwotCW5lc3FwLT50ZXJtX2ZsYWdzIHw9IE5FU19URVJNX1NFTlQ7Ci0JbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBtb2RfcXBfZmxhZ3MsIHRlcm1sZW4sIDApOworCWlmICghbmVzZGV2LT5pd19zdGF0dXMpICB7CisJCW5lc3FwLT50ZXJtX2ZsYWdzID0gTkVTX1RFUk1fRE9ORTsKKwkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0VSUk9SLCAwLCAwKTsKKwkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCX0gZWxzZSB7CisJCW5lc190ZXJtaW5hdGVfc3RhcnRfdGltZXIobmVzcXApOworCQluZXNxcC0+dGVybV9mbGFncyB8PSBORVNfVEVSTV9TRU5UOworCQluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG1vZF9xcF9mbGFncywgdGVybWxlbiwgMCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBuZXNfdGVybWluYXRlX3NlbmRfZmluKHN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAppbmRleCBiYmJmZTlmLi5hYTkxODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKQEAgLTExMDAsMTEgKzExMDAsMTIgQEAKIAl1MzIgd3FtX3dhdDsKIAl1MzIgY29yZV9jbG9jazsKIAl1MzIgZmlybXdhcmVfdmVyc2lvbjsKKwl1MzIgZWVwcm9tX3ZlcnNpb247CiAKIAl1MzIgbmljX3J4X2V0aF9yb3V0ZV9lcnI7CiAKIAl1MzIgZXRfcnhfY29hbGVzY2VfdXNlY3M7Ci0JdTMyCWV0X3J4X21heF9jb2FsZXNjZWRfZnJhbWVzOworCXUzMiBldF9yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKIAl1MzIgZXRfcnhfY29hbGVzY2VfdXNlY3NfaXJxOwogCXUzMiBldF9yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAJdTMyIGV0X3BrdF9yYXRlX2xvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKaW5kZXggNDJlN2FhZC4uNmRmZGQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMKQEAgLTIzMiw2ICsyMzIsMTMgQEAKIAkJCQlORVNfTUFDX0lOVF9UWF9VTkRFUkZMT1cgfCBORVNfTUFDX0lOVF9UWF9FUlJPUikpOwogCQlmaXJzdF9uZXN2bmljID0gbmVzdm5pYzsKIAl9CisKKwlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOworCQluZXNkZXYtPm5lc2FkYXB0ZXItPnNlbmRfdGVybV9vayA9IDE7CisJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJfQorCiAJaWYgKGZpcnN0X25lc3ZuaWMtPmxpbmt1cCkgewogCQkvKiBFbmFibGUgbmV0d29yayBwYWNrZXRzICovCiAJCW5lc3ZuaWMtPmxpbmt1cCA9IDE7CkBAIC0zMDksOSArMzE2LDkgQEAKIAogCiAJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7Ci0JCW5lc19kZXN0cm95X29mYV9kZXZpY2UobmVzdm5pYy0+bmVzaWJkZXYpOwotCQluZXN2bmljLT5uZXNpYmRldiA9IE5VTEw7Ci0JCW5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkID0gMDsKKwkJbmVzZGV2LT5uZXNhZGFwdGVyLT5zZW5kX3Rlcm1fb2sgPSAwOworCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7CisJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CiAJfQogCW5lc19kZXN0cm95X25pY19xcChuZXN2bmljKTsKIApAQCAtNDYzLDcgKzQ3MCw2IEBACiAJdTE2IG5ob2Zmc2V0OwogCXUxNiB3cWVzX25lZWRlZDsKIAl1MTYgd3Flc19hdmFpbGFibGU7Ci0JdTMyIG9sZF9oZWFkOwogCXUzMiB3cWVfbWlzYzsKIAogCS8qCkBAIC01MDMsNyArNTA5LDYgQEAKIAkJaWYgKHNrYl9pc19nc28oc2tiKSkgewogCQkJbmVzdm5pYy0+c2VnbWVudGVkX3Rzb19yZXF1ZXN0cysrOwogCQkJbmVzdm5pYy0+dHNvX3JlcXVlc3RzKys7Ci0JCQlvbGRfaGVhZCA9IG5lc25pYy0+c3FfaGVhZDsKIAkJCS8qIEJhc2ljYWxseSA0IGZyYWdtZW50cyBhdmFpbGFibGUgcGVyIFdRRSB3aXRoIGV4dGVuZGVkIGZyYWdtZW50cyAqLwogCQkJd3Flc19uZWVkZWQgPSBucl9mcmFncyA+PiAyOwogCQkJd3Flc19uZWVkZWQgKz0gKG5yX2ZyYWdzJjMpPzE6MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCmluZGV4IGE5ZjVkZDIuLmY5YzQxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwpAQCAtMTkwLDYgKzE5MCwxMSBAQAogCQluZXNhZGFwdGVyLT5maXJtd2FyZV92ZXJzaW9uID0gKCgodTMyKSh1OCkoZWVwcm9tX2RhdGE+PjgpKSAgPDwgIDE2KSArCiAJCQkJKHUzMikoKHU4KWVlcHJvbV9kYXRhKTsKIAorCQllZXByb21fZGF0YSA9IG5lc19yZWFkMTZfZWVwcm9tKG5lc2Rldi0+cmVncywgbmV4dF9zZWN0aW9uX2FkZHJlc3MgKyAxMCk7CisJCXByaW50ayhQRlggIkVFUFJPTSB2ZXJzaW9uICV1LiV1XG4iLCAodTgpKGVlcHJvbV9kYXRhPj44KSwgKHU4KWVlcHJvbV9kYXRhKTsKKwkJbmVzYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gPSAoKCh1MzIpKHU4KShlZXByb21fZGF0YT4+OCkpIDw8IDE2KSArCisJCQkJKHUzMikoKHU4KWVlcHJvbV9kYXRhKTsKKwogbm9fZndfcmV2OgogCQkvKiBlZXByb20gaXMgdmFsaWQgKi8KIAkJZWVwcm9tX29mZnNldCA9IG5lc2FkYXB0ZXItPnNvZnR3YXJlX2VlcHJvbV9vZmZzZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwppbmRleCA5YmMyZDc0Li45MDQ2ZTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKQEAgLTUxOCw3ICs1MTgsNyBAQAogCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKCpwcm9wcykpOwogCW1lbWNweSgmcHJvcHMtPnN5c19pbWFnZV9ndWlkLCBuZXN2bmljLT5uZXRkZXYtPmRldl9hZGRyLCA2KTsKIAotCXByb3BzLT5md192ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXItPmZ3X3ZlcjsKKwlwcm9wcy0+ZndfdmVyID0gbmVzZGV2LT5uZXNhZGFwdGVyLT5maXJtd2FyZV92ZXJzaW9uOwogCXByb3BzLT5kZXZpY2VfY2FwX2ZsYWdzID0gbmVzZGV2LT5uZXNhZGFwdGVyLT5kZXZpY2VfY2FwX2ZsYWdzOwogCXByb3BzLT52ZW5kb3JfaWQgPSBuZXNkZXYtPm5lc2FkYXB0ZXItPnZlbmRvcl9pZDsKIAlwcm9wcy0+dmVuZG9yX3BhcnRfaWQgPSBuZXNkZXYtPm5lc2FkYXB0ZXItPnZlbmRvcl9wYXJ0X2lkOwpAQCAtMTk0MSw3ICsxOTQxLDcgQEAKIAl1OCAgdXNlXzI1Nl9wYmxzID0gMDsKIAl1OCAgdXNlXzRrX3BibHMgPSAwOwogCXUxNiB1c2VfdHdvX2xldmVsID0gKHBibF9jb3VudF80ayA+IDEpID8gMSA6IDA7Ci0Jc3RydWN0IG5lc19yb290X3ZwYmwgbmV3X3Jvb3QgPSB7MCwgMCwgMH07CisJc3RydWN0IG5lc19yb290X3ZwYmwgbmV3X3Jvb3QgPSB7IDAsIE5VTEwsIE5VTEwgfTsKIAl1MzIgb3Bjb2RlID0gMDsKIAl1MTYgbWFqb3JfY29kZTsKIApAQCAtMjExMiwxMyArMjExMiwxMiBAQAogCXUzMiBkcml2ZXJfa2V5ID0gMDsKIAl1MzIgcm9vdF9wYmxfaW5kZXggPSAwOwogCXUzMiBjdXJfcGJsX2luZGV4ID0gMDsKLQlpbnQgZXJyID0gMCwgcGJsX2RlcHRoID0gMDsKKwlpbnQgZXJyID0gMDsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgcGJsX2NvdW50ID0gMDsKIAl1OCBzaW5nbGVfcGFnZSA9IDE7CiAJdTggc3RhZ19rZXkgPSAwOwogCi0JcGJsX2RlcHRoID0gMDsKIAlyZWdpb25fbGVuZ3RoID0gMDsKIAl2cGJsLnBibF92YmFzZSA9IE5VTEw7CiAJcm9vdF92cGJsLnBibF92YmFzZSA9IE5VTEw7CkBAIC0yOTMxLDcgKzI5MzAsNiBAQAogCWludCByZXQ7CiAJdTE2IG9yaWdpbmFsX2xhc3RfYWVxOwogCXU4IGlzc3VlX21vZGlmeV9xcCA9IDA7Ci0JdTggaXNzdWVfZGlzY29ubmVjdCA9IDA7CiAJdTggZG9udF93YWl0ID0gMDsKIAogCW5lc19kZWJ1ZyhORVNfREJHX01PRF9RUCwgIlFQJXU6IFFQIFN0YXRlPSV1LCBjdXIgUVAgU3RhdGU9JXUsIgpAQCAtMzA1OCw2ICszMDU2LDcgQEAKIAkJCQkJCW5lc3FwLT5odGVfYWRkZWQgPSAwOwogCQkJCQl9CiAJCQkJaWYgKChuZXNxcC0+aHdfdGNwX3N0YXRlID4gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRCkgJiYKKwkJCQkJCShuZXNkZXYtPml3X3N0YXR1cykgJiYKIAkJCQkJCShuZXNxcC0+aHdfdGNwX3N0YXRlICE9IE5FU19BRVFFX1RDUF9TVEFURV9USU1FX1dBSVQpKSB7CiAJCQkJCW5leHRfaXdhcnBfc3RhdGUgfD0gTkVTX0NRUF9RUF9SRVNFVDsKIAkJCQl9IGVsc2UgewpAQCAtMzA4Miw3ICszMDgxLDYgQEAKIAkJCW5lc3FwLT5pd2FycF9zdGF0ZSA9IG5leHRfaXdhcnBfc3RhdGUgJiBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX01BU0s7CiAJCQluZXNfZGVidWcoTkVTX0RCR19NT0RfUVAsICJDaGFuZ2UgbmVzcXAtPml3YXJwX3N0YXRlPSUwOHhcbiIsCiAJCQkJCW5lc3FwLT5pd2FycF9zdGF0ZSk7Ci0JCQlpc3N1ZV9kaXNjb25uZWN0ID0gMTsKIAkJfSBlbHNlIHsKIAkJCW5lc3FwLT5pd2FycF9zdGF0ZSA9IG5leHRfaXdhcnBfc3RhdGUgJiBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX01BU0s7CiAJCQluZXNfZGVidWcoTkVTX0RCR19NT0RfUVAsICJDaGFuZ2UgbmVzcXAtPml3YXJwX3N0YXRlPSUwOHhcbiIsCkBAIC0zOTM2LDYgKzM5MzQsMTcgQEAKIAlyZXR1cm4gbmVzaWJkZXY7CiB9CiAKK3ZvaWQgIG5lc19wb3J0X2liZXZlbnQoc3RydWN0IG5lc192bmljICpuZXN2bmljKQoreworCXN0cnVjdCBuZXNfaWJfZGV2aWNlICpuZXNpYmRldiA9IG5lc3ZuaWMtPm5lc2liZGV2OworCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CisJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCWV2ZW50LmRldmljZSA9ICZuZXNpYmRldi0+aWJkZXY7CisJZXZlbnQuZWxlbWVudC5wb3J0X251bSA9IG5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCArIDE7CisJZXZlbnQuZXZlbnQgPSBuZXNkZXYtPml3X3N0YXR1cyA/IElCX0VWRU5UX1BPUlRfQUNUSVZFIDogSUJfRVZFTlRfUE9SVF9FUlI7CisJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKK30KKwogCiAvKioKICAqIG5lc19kZXN0cm95X29mYV9kZXZpY2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYi5oCmluZGV4IDM1OTM5ODMuLjYxZGUwNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWIuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0zMjYsNiArMzI3LDkgQEAKIAogI2RlZmluZSBRSUJfREVGQVVMVF9NVFUgNDA5NgogCisvKiBtYXggbnVtYmVyIG9mIElCIHBvcnRzIHN1cHBvcnRlZCBwZXIgSENBICovCisjZGVmaW5lIFFJQl9NQVhfSUJfUE9SVFMgMgorCiAvKgogICogUG9zc2libGUgSUIgY29uZmlnIHBhcmFtZXRlcnMgZm9yIGZfZ2V0L3NldF9pYl90YWJsZSgpCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2NvbW1vbi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfY29tbW9uLmgKaW5kZXggYjM5NTVlZC4uMTQ1ZGE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfY29tbW9uLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfY29tbW9uLmgKQEAgLTI3OSw3ICsyNzksNyBAQAogICogbWF5IG5vdCBiZSBpbXBsZW1lbnRlZDsgdGhlIHVzZXIgY29kZSBtdXN0IGRlYWwgd2l0aCB0aGlzIGlmIGl0CiAgKiBjYXJlcywgb3IgaXQgbXVzdCBhYm9ydCBhZnRlciBpbml0aWFsaXphdGlvbiByZXBvcnRzIHRoZSBkaWZmZXJlbmNlLgogICovCi0jZGVmaW5lIFFJQl9VU0VSX1NXTUlOT1IgMTAKKyNkZWZpbmUgUUlCX1VTRVJfU1dNSU5PUiAxMQogCiAjZGVmaW5lIFFJQl9VU0VSX1NXVkVSU0lPTiAoKFFJQl9VU0VSX1NXTUFKT1IgPDwgMTYpIHwgUUlCX1VTRVJfU1dNSU5PUikKIApAQCAtMzAyLDYgKzMwMiwxOCBAQAogI2RlZmluZSBRSUJfS0VSTl9TV1ZFUlNJT04gKChRSUJfS0VSTl9UWVBFIDw8IDMxKSB8IFFJQl9VU0VSX1NXVkVSU0lPTikKIAogLyoKKyAqIElmIHRoZSB1bml0IGlzIHNwZWNpZmllZCB2aWEgb3BlbiwgSENBIGNob2ljZSBpcyBmaXhlZC4gIElmIHBvcnQgaXMKKyAqIHNwZWNpZmllZCwgaXQncyBhbHNvIGZpeGVkLiAgT3RoZXJ3aXNlIHdlIHRyeSB0byBzcHJlYWQgY29udGV4dHMKKyAqIGFjcm9zcyBwb3J0cyBhbmQgSENBcywgdXNpbmcgZGlmZmVyZW50IGFsZ29yaXRoaW1zLiAgV0lUSElOIGlzCisgKiB0aGUgb2xkIGRlZmF1bHQsIHByaW9yIHRvIHRoaXMgbWVjaGFuaXNtLgorICovCisjZGVmaW5lIFFJQl9QT1JUX0FMR19BQ1JPU1MgMCAvKiByb3VuZCByb2JpbiBjb250ZXh0cyBhY3Jvc3MgSENBcywgdGhlbgorCQkJICAgICAgICogcG9ydHM7IHRoaXMgaXMgdGhlIGRlZmF1bHQgKi8KKyNkZWZpbmUgUUlCX1BPUlRfQUxHX1dJVEhJTiAxIC8qIHVzZSBhbGwgY29udGV4dHMgb24gYW4gSENBIChyb3VuZCByb2JpbgorCQkJICAgICAgICogYWN0aXZlIHBvcnRzIHdpdGhpbiksIHRoZW4gbmV4dCBIQ0EgKi8KKyNkZWZpbmUgUUlCX1BPUlRfQUxHX0NPVU5UIDIgLyogbnVtYmVyIG9mIGFsZ29yaXRobSBjaG9pY2VzICovCisKKy8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gcWliX3VzZXJpbml0KCkgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlCiAgKiB1c2VyIGNvZGUgYnVmZmVycyBhcmUsIHNpemVzLCBldGMuICAgVGhlIG9mZnNldHMgYW5kIHNpemVzIG9mIHRoZQogICogZmllbGRzIG11c3QgcmVtYWluIHVuY2hhbmdlZCwgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5LiAgSXQgY2FuCkBAIC0zMTksNyArMzMxLDcgQEAKIAkvKiBzaXplIG9mIHN0cnVjdCBiYXNlX2luZm8gdG8gd3JpdGUgdG8gKi8KIAlfX3UzMiBzcHVfYmFzZV9pbmZvX3NpemU7CiAKLQlfX3UzMiBfc3B1X3VudXNlZDM7CisJX191MzIgc3B1X3BvcnRfYWxnOyAvKiB3aGljaCBRSUJfUE9SVF9BTEdfKjsgdW51c2VkIHVzZXIgbWlub3IgPCAxMSAqLwogCiAJLyoKIAkgKiBJZiB0d28gb3IgbW9yZSBwcm9jZXNzZXMgd2lzaCB0byBzaGFyZSBhIGNvbnRleHQsIGVhY2ggcHJvY2VzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYwppbmRleCBmMTVjZTA3Li45Y2QxOTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9kcml2ZXIuYwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJCXNtcF9ybWIoKTsgIC8qIHByZXZlbnQgc3BlY3VsYXRpdmUgcmVhZHMgb2YgZG1hJ2VkIGhkcnEgKi8KIAl9CiAKLQlmb3IgKGxhc3QgPSAwLCBpID0gMTsgIWxhc3Q7IGkgKz0gIWxhc3QpIHsKKwlmb3IgKGxhc3QgPSAwLCBpID0gMTsgIWxhc3QgJiYgaSA8PSA2NDsgaSArPSAhbGFzdCkgewogCQloZHIgPSBkZC0+Zl9nZXRfbXNnaGVhZGVyKGRkLCByaGZfYWRkcik7CiAJCWVmbGFncyA9IHFpYl9oZHJnZXRfZXJyX2ZsYWdzKHJoZl9hZGRyKTsKIAkJZXR5cGUgPSBxaWJfaGRyZ2V0X3Jjdl90eXBlKHJoZl9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9maWxlX29wcy5jCmluZGV4IGExNDJhOWUuLjZiMTE2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZmlsZV9vcHMuYwpAQCAtMTI5NCwxMjggKzEyOTQsMTMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdXNhYmxlKHN0cnVjdCBxaWJfcHBvcnRkYXRhICpwcGQsIGludCBhY3RpdmVfb25seSkKK3N0YXRpYyBpbmxpbmUgaW50IHVzYWJsZShzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkKQogewogCXN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQgPSBwcGQtPmRkOwotCXUzMiBsaW5rb2sgPSBhY3RpdmVfb25seSA/IFFJQkxfTElOS0FDVElWRSA6Ci0JCSAoUUlCTF9MSU5LSU5JVCB8IFFJQkxfTElOS0FSTUVEIHwgUUlCTF9MSU5LQUNUSVZFKTsKIAogCXJldHVybiBkZCAmJiAoZGQtPmZsYWdzICYgUUlCX1BSRVNFTlQpICYmIGRkLT5rcmVnYmFzZSAmJiBwcGQtPmxpZCAmJgotCQkocHBkLT5sZmxhZ3MgJiBsaW5rb2spOworCQkocHBkLT5sZmxhZ3MgJiBRSUJMX0xJTktBQ1RJVkUpOworfQorCisvKgorICogU2VsZWN0IGEgY29udGV4dCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLCBlaXRoZXIgdXNpbmcgYSByZXF1ZXN0ZWQgcG9ydAorICogb3IgdGhlIHBvcnQgYmFzZWQgb24gdGhlIGNvbnRleHQgbnVtYmVyLgorICovCitzdGF0aWMgaW50IGNob29zZV9wb3J0X2N0eHQoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLCB1MzIgcG9ydCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcWliX3VzZXJfaW5mbyAqdWluZm8pCit7CisJc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZCA9IE5VTEw7CisJaW50IHJldCwgY3R4dDsKKworCWlmIChwb3J0KSB7CisJCWlmICghdXNhYmxlKGRkLT5wcG9ydCArIHBvcnQgLSAxKSkgeworCQkJcmV0ID0gLUVORVRET1dOOworCQkJZ290byBkb25lOworCQl9IGVsc2UKKwkJCXBwZCA9IGRkLT5wcG9ydCArIHBvcnQgLSAxOworCX0KKwlmb3IgKGN0eHQgPSBkZC0+Zmlyc3RfdXNlcl9jdHh0OyBjdHh0IDwgZGQtPmNmZ2N0eHRzICYmIGRkLT5yY2RbY3R4dF07CisJICAgICBjdHh0KyspCisJCTsKKwlpZiAoY3R4dCA9PSBkZC0+Y2ZnY3R4dHMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGRvbmU7CisJfQorCWlmICghcHBkKSB7CisJCXUzMiBwaWR4ID0gY3R4dCAlIGRkLT5udW1fcHBvcnRzOworCQlpZiAodXNhYmxlKGRkLT5wcG9ydCArIHBpZHgpKQorCQkJcHBkID0gZGQtPnBwb3J0ICsgcGlkeDsKKwkJZWxzZSB7CisJCQlmb3IgKHBpZHggPSAwOyBwaWR4IDwgZGQtPm51bV9wcG9ydHMgJiYgIXBwZDsKKwkJCSAgICAgcGlkeCsrKQorCQkJCWlmICh1c2FibGUoZGQtPnBwb3J0ICsgcGlkeCkpCisJCQkJCXBwZCA9IGRkLT5wcG9ydCArIHBpZHg7CisJCX0KKwl9CisJcmV0ID0gcHBkID8gc2V0dXBfY3R4dChwcGQsIGN0eHQsIGZwLCB1aW5mbykgOiAtRU5FVERPV047Citkb25lOgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZmluZF9mcmVlX2N0eHQoaW50IHVuaXQsIHN0cnVjdCBmaWxlICpmcCwKIAkJCSAgY29uc3Qgc3RydWN0IHFpYl91c2VyX2luZm8gKnVpbmZvKQogewogCXN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQgPSBxaWJfbG9va3VwKHVuaXQpOwotCXN0cnVjdCBxaWJfcHBvcnRkYXRhICpwcGQgPSBOVUxMOwogCWludCByZXQ7Ci0JdTMyIGN0eHQ7CiAKLQlpZiAoIWRkIHx8ICh1aW5mby0+c3B1X3BvcnQgJiYgdWluZm8tPnNwdV9wb3J0ID4gZGQtPm51bV9wcG9ydHMpKSB7CisJaWYgKCFkZCB8fCAodWluZm8tPnNwdV9wb3J0ICYmIHVpbmZvLT5zcHVfcG9ydCA+IGRkLT5udW1fcHBvcnRzKSkKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBiYWlsOwotCX0KKwllbHNlCisJCXJldCA9IGNob29zZV9wb3J0X2N0eHQoZnAsIGRkLCB1aW5mby0+c3B1X3BvcnQsIHVpbmZvKTsKIAotCS8qCi0JICogSWYgdXNlcnMgcmVxdWVzdHMgc3BlY2lmaWMgcG9ydCwgb25seSB0cnkgdGhhdCBvbmUgcG9ydCwgZWxzZQotCSAqIHNlbGVjdCAiYmVzdCIgcG9ydCBiZWxvdywgYmFzZWQgb24gY29udGV4dC4KLQkgKi8KLQlpZiAodWluZm8tPnNwdV9wb3J0KSB7Ci0JCXBwZCA9IGRkLT5wcG9ydCArIHVpbmZvLT5zcHVfcG9ydCAtIDE7Ci0JCWlmICghdXNhYmxlKHBwZCwgMCkpIHsKLQkJCXJldCA9IC1FTkVURE9XTjsKLQkJCWdvdG8gYmFpbDsKLQkJfQotCX0KLQotCWZvciAoY3R4dCA9IGRkLT5maXJzdF91c2VyX2N0eHQ7IGN0eHQgPCBkZC0+Y2ZnY3R4dHM7IGN0eHQrKykgewotCQlpZiAoZGQtPnJjZFtjdHh0XSkKLQkJCWNvbnRpbnVlOwotCQkvKgotCQkgKiBUaGUgc2V0dGluZyBhbmQgY2xlYXJpbmcgb2YgdXNlciBjb250ZXh0IHJjZFt4XSBwcm90ZWN0ZWQKLQkJICogYnkgdGhlIHFpYl9tdXRleAotCQkgKi8KLQkJaWYgKCFwcGQpIHsKLQkJCS8qIGNob29zZSBwb3J0IGJhc2VkIG9uIGN0eHQsIGlmIHVwLCBlbHNlIDFzdCB1cCAqLwotCQkJcHBkID0gZGQtPnBwb3J0ICsgKGN0eHQgJSBkZC0+bnVtX3Bwb3J0cyk7Ci0JCQlpZiAoIXVzYWJsZShwcGQsIDApKSB7Ci0JCQkJaW50IGk7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGRkLT5udW1fcHBvcnRzOyBpKyspIHsKLQkJCQkJcHBkID0gZGQtPnBwb3J0ICsgaTsKLQkJCQkJaWYgKHVzYWJsZShwcGQsIDApKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChpID09IGRkLT5udW1fcHBvcnRzKSB7Ci0JCQkJCXJldCA9IC1FTkVURE9XTjsKLQkJCQkJZ290byBiYWlsOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXQgPSBzZXR1cF9jdHh0KHBwZCwgY3R4dCwgZnAsIHVpbmZvKTsKLQkJZ290byBiYWlsOwotCX0KLQlyZXQgPSAtRUJVU1k7Ci0KLWJhaWw6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBnZXRfYV9jdHh0KHN0cnVjdCBmaWxlICpmcCwgY29uc3Qgc3RydWN0IHFpYl91c2VyX2luZm8gKnVpbmZvKQorc3RhdGljIGludCBnZXRfYV9jdHh0KHN0cnVjdCBmaWxlICpmcCwgY29uc3Qgc3RydWN0IHFpYl91c2VyX2luZm8gKnVpbmZvLAorCQkgICAgICB1bnNpZ25lZCBhbGcpCiB7Ci0Jc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZDsKLQlpbnQgcmV0ID0gMCwgZGV2bWF4OwotCWludCBucHJlc2VudCwgbnVwOwotCWludCBuZGV2OworCXN0cnVjdCBxaWJfZGV2ZGF0YSAqdWRkID0gTlVMTDsKKwlpbnQgcmV0ID0gMCwgZGV2bWF4LCBucHJlc2VudCwgbnVwLCBuZGV2LCBkdXNhYmxlID0gMCwgaTsKIAl1MzIgcG9ydCA9IHVpbmZvLT5zcHVfcG9ydCwgY3R4dDsKIAogCWRldm1heCA9IHFpYl9jb3VudF91bml0cygmbnByZXNlbnQsICZudXApOwotCi0JZm9yIChuZGV2ID0gMDsgbmRldiA8IGRldm1heDsgbmRldisrKSB7Ci0JCXN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQgPSBxaWJfbG9va3VwKG5kZXYpOwotCi0JCS8qIGRldmljZSBwb3J0aW9uIG9mIHVzYWJsZSgpICovCi0JCWlmICghKGRkICYmIChkZC0+ZmxhZ3MgJiBRSUJfUFJFU0VOVCkgJiYgZGQtPmtyZWdiYXNlKSkKLQkJCWNvbnRpbnVlOwotCQlmb3IgKGN0eHQgPSBkZC0+Zmlyc3RfdXNlcl9jdHh0OyBjdHh0IDwgZGQtPmNmZ2N0eHRzOyBjdHh0KyspIHsKLQkJCWlmIChkZC0+cmNkW2N0eHRdKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHBvcnQpIHsKLQkJCQlpZiAocG9ydCA+IGRkLT5udW1fcHBvcnRzKQotCQkJCQljb250aW51ZTsKLQkJCQlwcGQgPSBkZC0+cHBvcnQgKyBwb3J0IC0gMTsKLQkJCQlpZiAoIXVzYWJsZShwcGQsIDApKQotCQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBjaG9vc2UgcG9ydCBiYXNlZCBvbiBjdHh0LCBpZiB1cCwgZWxzZQotCQkJCSAqIGZpcnN0IHBvcnQgdGhhdCdzIHVwIGZvciBtdWx0aS1wb3J0IEhDQQotCQkJCSAqLwotCQkJCXBwZCA9IGRkLT5wcG9ydCArIChjdHh0ICUgZGQtPm51bV9wcG9ydHMpOwotCQkJCWlmICghdXNhYmxlKHBwZCwgMCkpIHsKLQkJCQkJaW50IGo7Ci0KLQkJCQkJcHBkID0gTlVMTDsKLQkJCQkJZm9yIChqID0gMDsgaiA8IGRkLT5udW1fcHBvcnRzICYmCi0JCQkJCQkhcHBkOyBqKyspCi0JCQkJCQlpZiAodXNhYmxlKGRkLT5wcG9ydCArIGosIDApKQotCQkJCQkJCXBwZCA9IGRkLT5wcG9ydCArIGo7Ci0JCQkJCWlmICghcHBkKQotCQkJCQkJY29udGludWU7IC8qIHRvIG5leHQgdW5pdCAqLwotCQkJCX0KLQkJCX0KLQkJCXJldCA9IHNldHVwX2N0eHQocHBkLCBjdHh0LCBmcCwgdWluZm8pOwotCQkJZ290byBkb25lOwotCQl9CisJaWYgKCFucHJlc2VudCkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKG51cCA9PSAwKSB7CisJCXJldCA9IC1FTkVURE9XTjsKKwkJZ290byBkb25lOwogCX0KIAotCWlmIChucHJlc2VudCkgewotCQlpZiAobnVwID09IDApCi0JCQlyZXQgPSAtRU5FVERPV047Ci0JCWVsc2UKLQkJCXJldCA9IC1FQlVTWTsKLQl9IGVsc2UKLQkJcmV0ID0gLUVOWElPOworCWlmIChhbGcgPT0gUUlCX1BPUlRfQUxHX0FDUk9TUykgeworCQl1bnNpZ25lZCBpbnVzZSA9IH4wVTsKKwkJLyogZmluZCBkZXZpY2UgKHdpdGggQUNUSVZFIHBvcnRzKSB3aXRoIGZld2VzdCBjdHh0cyBpbiB1c2UgKi8KKwkJZm9yIChuZGV2ID0gMDsgbmRldiA8IGRldm1heDsgbmRldisrKSB7CisJCQlzdHJ1Y3QgcWliX2RldmRhdGEgKmRkID0gcWliX2xvb2t1cChuZGV2KTsKKwkJCXVuc2lnbmVkIGN1c2VkID0gMCwgY2ZyZWUgPSAwOworCQkJaWYgKCFkZCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwb3J0ICYmIHBvcnQgPD0gZGQtPm51bV9wcG9ydHMgJiYKKwkJCSAgICB1c2FibGUoZGQtPnBwb3J0ICsgcG9ydCAtIDEpKQorCQkJCWR1c2FibGUgPSAxOworCQkJZWxzZQorCQkJCWZvciAoaSA9IDA7IGkgPCBkZC0+bnVtX3Bwb3J0czsgaSsrKQorCQkJCQlpZiAodXNhYmxlKGRkLT5wcG9ydCArIGkpKQorCQkJCQkJZHVzYWJsZSsrOworCQkJaWYgKCFkdXNhYmxlKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChjdHh0ID0gZGQtPmZpcnN0X3VzZXJfY3R4dDsgY3R4dCA8IGRkLT5jZmdjdHh0czsKKwkJCSAgICAgY3R4dCsrKQorCQkJCWlmIChkZC0+cmNkW2N0eHRdKQorCQkJCQljdXNlZCsrOworCQkJCWVsc2UKKwkJCQkJY2ZyZWUrKzsKKwkJCWlmIChjZnJlZSAmJiBjdXNlZCA8IGludXNlKSB7CisJCQkJdWRkID0gZGQ7CisJCQkJaW51c2UgPSBjdXNlZDsKKwkJCX0KKwkJfQorCQlpZiAodWRkKSB7CisJCQlyZXQgPSBjaG9vc2VfcG9ydF9jdHh0KGZwLCB1ZGQsIHBvcnQsIHVpbmZvKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAobmRldiA9IDA7IG5kZXYgPCBkZXZtYXg7IG5kZXYrKykgeworCQkJc3RydWN0IHFpYl9kZXZkYXRhICpkZCA9IHFpYl9sb29rdXAobmRldik7CisJCQlpZiAoZGQpIHsKKwkJCQlyZXQgPSBjaG9vc2VfcG9ydF9jdHh0KGZwLCBkZCwgcG9ydCwgdWluZm8pOworCQkJCWlmICghcmV0KQorCQkJCQlnb3RvIGRvbmU7CisJCQkJaWYgKHJldCA9PSAtRUJVU1kpCisJCQkJCWR1c2FibGUrKzsKKwkJCX0KKwkJfQorCX0KKwlyZXQgPSBkdXNhYmxlID8gLUVCVVNZIDogLUVORVRET1dOOwogCiBkb25lOgogCXJldHVybiByZXQ7CkBAIC0xNDgxLDcgKzE0ODMsNyBAQAogewogCWludCByZXQ7CiAJaW50IGlfbWlub3I7Ci0JdW5zaWduZWQgc3dtYWpvciwgc3dtaW5vcjsKKwl1bnNpZ25lZCBzd21ham9yLCBzd21pbm9yLCBhbGcgPSBRSUJfUE9SVF9BTEdfQUNST1NTOwogCiAJLyogQ2hlY2sgdG8gYmUgc3VyZSB3ZSBoYXZlbid0IGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBmaWxlICovCiAJaWYgKGN0eHRfZnAoZnApKSB7CkBAIC0xNDk4LDYgKzE1MDAsOSBAQAogCiAJc3dtaW5vciA9IHVpbmZvLT5zcHVfdXNlcnZlcnNpb24gJiAweGZmZmY7CiAKKwlpZiAoc3dtaW5vciA+PSAxMSAmJiB1aW5mby0+c3B1X3BvcnRfYWxnIDwgUUlCX1BPUlRfQUxHX0NPVU5UKQorCQlhbGcgPSB1aW5mby0+c3B1X3BvcnRfYWxnOworCiAJbXV0ZXhfbG9jaygmcWliX211dGV4KTsKIAogCWlmIChxaWJfY29tcGF0aWJsZV9zdWJjdHh0cyhzd21ham9yLCBzd21pbm9yKSAmJgpAQCAtMTUxNCw3ICsxNTE5LDcgQEAKIAlpZiAoaV9taW5vcikKIAkJcmV0ID0gZmluZF9mcmVlX2N0eHQoaV9taW5vciAtIDEsIGZwLCB1aW5mbyk7CiAJZWxzZQotCQlyZXQgPSBnZXRfYV9jdHh0KGZwLCB1aW5mbyk7CisJCXJldCA9IGdldF9hX2N0eHQoZnAsIHVpbmZvLCBhbGcpOwogCiBkb25lX2Noa19zZG1hOgogCWlmICghcmV0KSB7CkBAIC0xODYyLDcgKzE4NjcsNyBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKCF1c2FibGUocmNkLT5wcGQsIDEpKSB7CisJaWYgKCF1c2FibGUocmNkLT5wcGQpKSB7CiAJCWludCBpOwogCQkvKgogCQkgKiBpZiBsaW5rIGlzIGRvd24sIG9yIG90aGVyd2lzZSBub3QgdXNhYmxlLCBkZWxheQpAQCAtMTg4MSw3ICsxODg2LDcgQEAKIAkJCQlzZXRfYml0KF9RSUJfRVZFTlRfRElTQVJNX0JVRlNfQklULAogCQkJCQkmcmNkLT51c2VyX2V2ZW50X21hc2tbaV0pOwogCQl9Ci0JCWZvciAoaSA9IDA7ICF1c2FibGUocmNkLT5wcGQsIDEpICYmIGkgPCAzMDA7IGkrKykKKwkJZm9yIChpID0gMDsgIXVzYWJsZShyY2QtPnBwZCkgJiYgaSA8IDMwMDsgaSsrKQogCQkJbXNsZWVwKDEwMCk7CiAJCXJldCA9IC1FTkVURE9XTjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfZnMuYwppbmRleCA4NDQ5NTRiLi45Zjk4OWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9mcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2ZzLmMKQEAgLTEzNSw4ICsxMzUsOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcml2ZXJfb3BzW10gPSB7Ci0JeyAucmVhZCA9IGRyaXZlcl9zdGF0c19yZWFkLCB9LAotCXsgLnJlYWQgPSBkcml2ZXJfbmFtZXNfcmVhZCwgfSwKKwl7IC5yZWFkID0gZHJpdmVyX3N0YXRzX3JlYWQsIC5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLCB9LAorCXsgLnJlYWQgPSBkcml2ZXJfbmFtZXNfcmVhZCwgLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssIH0sCiB9OwogCiAvKiByZWFkIHRoZSBwZXItZGV2aWNlIGNvdW50ZXJzICovCkBAIC0xNjQsOCArMTY0LDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY250cl9vcHNbXSA9IHsKLQl7IC5yZWFkID0gZGV2X2NvdW50ZXJzX3JlYWQsIH0sCi0JeyAucmVhZCA9IGRldl9uYW1lc19yZWFkLCB9LAorCXsgLnJlYWQgPSBkZXZfY291bnRlcnNfcmVhZCwgLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssIH0sCisJeyAucmVhZCA9IGRldl9uYW1lc19yZWFkLCAubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywgfSwKIH07CiAKIC8qCkBAIC0yMTAsOSArMjEwLDkgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9ydGNudHJfb3BzW10gPSB7Ci0JeyAucmVhZCA9IHBvcnRuYW1lc19yZWFkLCB9LAotCXsgLnJlYWQgPSBwb3J0Y250cnNfMV9yZWFkLCB9LAotCXsgLnJlYWQgPSBwb3J0Y250cnNfMl9yZWFkLCB9LAorCXsgLnJlYWQgPSBwb3J0bmFtZXNfcmVhZCwgLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssIH0sCisJeyAucmVhZCA9IHBvcnRjbnRyc18xX3JlYWQsIC5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLCB9LAorCXsgLnJlYWQgPSBwb3J0Y250cnNfMl9yZWFkLCAubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywgfSwKIH07CiAKIC8qCkBAIC0yNjEsOCArMjYxLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcXNmcF9vcHNbXSA9IHsKLQl7IC5yZWFkID0gcXNmcF8xX3JlYWQsIH0sCi0JeyAucmVhZCA9IHFzZnBfMl9yZWFkLCB9LAorCXsgLnJlYWQgPSBxc2ZwXzFfcmVhZCwgLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssIH0sCisJeyAucmVhZCA9IHFzZnBfMl9yZWFkLCAubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywgfSwKIH07CiAKIHN0YXRpYyBzc2l6ZV90IGZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNWVlZGY4My4uNTg0ZDQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtNTg2NCw3ICs1ODY0LDcgQEAKIAkgKiBEb2Vzbid0IGNsZWFyIGFueSBvZiB0aGUgZXJyb3IgYml0cyB0aGF0IG1pZ2h0IGJlIHNldC4KIAkgKi8KIAl2YWwgPSBUSURGTE9XX0VSUkJJVFM7IC8qIHRoZXNlIGFyZSBXMUMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGQtPmN0eHRjbnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZC0+Y2ZnY3R4dHM7IGkrKykgewogCQlpbnQgZmxvdzsKIAkJZm9yIChmbG93ID0gMDsgZmxvdyA8IE5VTV9USURGTE9XU19DVFhUOyBmbG93KyspCiAJCQlxaWJfd3JpdGVfdXJlZyhkZCwgdXJfcmN2Zmxvd3RhYmxlK2Zsb3csIHZhbCwgaSk7CkBAIC03MjcxLDYgKzcyNzEsOCBAQAogCWlic2Rfd3JfYWxsY2hhbnMocHBkLCAyMCwgKDQgPDwgMTMpLCBCTUFTSygxNSwgMTMpKTsgLyogU0RSICovCiAKIAlkYXRhID0gcWliX3JlYWRfa3JlZ19wb3J0KHBwZCwga3JwX3NlcmRlc2N0cmwpOworCS8qIFR1cm4gb2ZmIElCIGxhdGVuY3kgbW9kZSAqLworCWRhdGEgJj0gflNZTV9NQVNLKElCU2VyZGVzQ3RybF8wLCBJQl9MQVRfTU9ERSk7CiAJcWliX3dyaXRlX2tyZWdfcG9ydChwcGQsIGtycF9zZXJkZXNjdHJsLCBkYXRhIHwKIAkJU1lNX01BU0soSUJTZXJkZXNDdHJsXzAsIFJYTE9TRU4pKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaW5pdC5jCmluZGV4IGE4NzNkZDUuLmYxZDE2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2luaXQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pbml0LmMKQEAgLTkzLDcgKzkzLDcgQEAKIHZvaWQgcWliX3NldF9jdHh0Y250KHN0cnVjdCBxaWJfZGV2ZGF0YSAqZGQpCiB7CiAJaWYgKCFxaWJfY2ZnY3R4dHMpCi0JCWRkLT5jZmdjdHh0cyA9IGRkLT5jdHh0Y250OworCQlkZC0+Y2ZnY3R4dHMgPSBkZC0+Zmlyc3RfdXNlcl9jdHh0ICsgbnVtX29ubGluZV9jcHVzKCk7CiAJZWxzZSBpZiAocWliX2NmZ2N0eHRzIDwgZGQtPm51bV9wcG9ydHMpCiAJCWRkLT5jZmdjdHh0cyA9IGRkLT5jdHh0Y250OwogCWVsc2UgaWYgKHFpYl9jZmdjdHh0cyA8PSBkZC0+Y3R4dGNudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9xcC5jCmluZGV4IGUwZjY1ZTMuLjZjMzk4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcXAuYwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAgKgogICogRmx1c2hlcyBib3RoIHNlbmQgYW5kIHJlY2VpdmUgd29yayBxdWV1ZXMuCiAgKiBSZXR1cm5zIHRydWUgaWYgbGFzdCBXUUUgZXZlbnQgc2hvdWxkIGJlIGdlbmVyYXRlZC4KLSAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCisgKiBUaGUgUVAgcl9sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKiBJZiB3ZSBhcmUgYWxyZWFkeSBpbiBlcnJvciBzdGF0ZSwganVzdCByZXR1cm4uCiAgKi8KIGludCBxaWJfZXJyb3JfcXAoc3RydWN0IHFpYl9xcCAqcXAsIGVudW0gaWJfd2Nfc3RhdHVzIGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCmluZGV4IDQwYzBhMzcuLmEwOTMxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYwpAQCAtODY4LDcgKzg2OCw3IEBACiAKIC8qCiAgKiBCYWNrIHVwIHJlcXVlc3RlciB0byByZXNlbmQgdGhlIGxhc3QgdW4tQUNLZWQgcmVxdWVzdC4KLSAqIFRoZSBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCisgKiBUaGUgUVAgcl9sb2NrIGFuZCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHFpYl9yZXN0YXJ0X3JjKHN0cnVjdCBxaWJfcXAgKnFwLCB1MzIgcHNuLCBpbnQgd2FpdCkKIHsKQEAgLTkxMSw3ICs5MTEsOCBAQAogCXN0cnVjdCBxaWJfaWJwb3J0ICppYnA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJnFwLT5zX2xvY2spOwogCWlmIChxcC0+c19mbGFncyAmIFFJQl9TX1RJTUVSKSB7CiAJCWlicCA9IHRvX2lwb3J0KHFwLT5pYnFwLmRldmljZSwgcXAtPnBvcnRfbnVtKTsKIAkJaWJwLT5uX3JjX3RpbWVvdXRzKys7CkBAIC05MjAsNyArOTIxLDggQEAKIAkJcWliX3Jlc3RhcnRfcmMocXAsIHFwLT5zX2xhc3RfcHNuICsgMSwgMSk7CiAJCXFpYl9zY2hlZHVsZV9zZW5kKHFwKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxcC0+c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0xNDE0LDEwICsxNDE2LDYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CiAKLQkvKiBEb3VibGUgY2hlY2sgd2UgY2FuIHByb2Nlc3MgdGhpcyBub3cgdGhhdCB3ZSBob2xkIHRoZSBzX2xvY2suICovCi0JaWYgKCEoaWJfcWliX3N0YXRlX29wc1txcC0+c3RhdGVdICYgUUlCX1BST0NFU1NfUkVDVl9PSykpCi0JCWdvdG8gYWNrX2RvbmU7Ci0KIAkvKiBJZ25vcmUgaW52YWxpZCByZXNwb25zZXMuICovCiAJaWYgKHFpYl9jbXAyNChwc24sIHFwLT5zX25leHRfcHNuKSA+PSAwKQogCQlnb3RvIGFja19kb25lOwpAQCAtMTY2MSw5ICsxNjU5LDYgQEAKIAlpYnAtPm5fcmNfZHVwcmVxKys7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwotCS8qIERvdWJsZSBjaGVjayB3ZSBjYW4gcHJvY2VzcyB0aGlzIG5vdyB0aGF0IHdlIGhvbGQgdGhlIHNfbG9jay4gKi8KLQlpZiAoIShpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKLQkJZ290byB1bmxvY2tfZG9uZTsKIAogCWZvciAoaSA9IHFwLT5yX2hlYWRfYWNrX3F1ZXVlOyA7IGkgPSBwcmV2KSB7CiAJCWlmIChpID09IHFwLT5zX3RhaWxfYWNrX3F1ZXVlKQpAQCAtMTg3OCw5ICsxODczLDYgQEAKIAlwc24gPSBiZTMyX3RvX2NwdShvaGRyLT5idGhbMl0pOwogCW9wY29kZSA+Pj0gMjQ7CiAKLQkvKiBQcmV2ZW50IHNpbXVsdGFuZW91cyBwcm9jZXNzaW5nIGFmdGVyIEFQTSBvbiBkaWZmZXJlbnQgQ1BVcyAqLwotCXNwaW5fbG9jaygmcXAtPnJfbG9jayk7Ci0KIAkvKgogCSAqIFByb2Nlc3MgcmVzcG9uc2VzIChBQ0tzKSBiZWZvcmUgYW55dGhpbmcgZWxzZS4gIE5vdGUgdGhhdCB0aGUKIAkgKiBwYWNrZXQgc2VxdWVuY2UgbnVtYmVyIHdpbGwgYmUgZm9yIHNvbWV0aGluZyBpbiB0aGUgc2VuZCB3b3JrCkBAIC0xODkxLDE0ICsxODgzLDE0IEBACiAJICAgIG9wY29kZSA8PSBPUChBVE9NSUNfQUNLTk9XTEVER0UpKSB7CiAJCXFpYl9yY19yY3ZfcmVzcChpYnAsIG9oZHIsIGRhdGEsIHRsZW4sIHFwLCBvcGNvZGUsIHBzbiwKIAkJCQloZHJzaXplLCBwbXR1LCByY2QpOwotCQlnb3RvIHJ1bmxvY2s7CisJCXJldHVybjsKIAl9CiAKIAkvKiBDb21wdXRlIDI0IGJpdHMgd29ydGggb2YgZGlmZmVyZW5jZS4gKi8KIAlkaWZmID0gcWliX2NtcDI0KHBzbiwgcXAtPnJfcHNuKTsKIAlpZiAodW5saWtlbHkoZGlmZikpIHsKIAkJaWYgKHFpYl9yY19yY3ZfZXJyb3Iob2hkciwgZGF0YSwgcXAsIG9wY29kZSwgcHNuLCBkaWZmLCByY2QpKQotCQkJZ290byBydW5sb2NrOworCQkJcmV0dXJuOwogCQlnb3RvIHNlbmRfYWNrOwogCX0KIApAQCAtMjA5MCw5ICsyMDgyLDYgQEAKIAkJaWYgKG5leHQgPiBRSUJfTUFYX1JETUFfQVRPTUlDKQogCQkJbmV4dCA9IDA7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7Ci0JCS8qIERvdWJsZSBjaGVjayB3ZSBjYW4gcHJvY2VzcyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIHNfbG9jay4gKi8KLQkJaWYgKCEoaWJfcWliX3N0YXRlX29wc1txcC0+c3RhdGVdICYgUUlCX1BST0NFU1NfUkVDVl9PSykpCi0JCQlnb3RvIHNydW5sb2NrOwogCQlpZiAodW5saWtlbHkobmV4dCA9PSBxcC0+c190YWlsX2Fja19xdWV1ZSkpIHsKIAkJCWlmICghcXAtPnNfYWNrX3F1ZXVlW25leHRdLnNlbnQpCiAJCQkJZ290byBuYWNrX2ludl91bmxjazsKQEAgLTIxNDYsNyArMjEzNSw3IEBACiAJCXFwLT5zX2ZsYWdzIHw9IFFJQl9TX1JFU1BfUEVORElORzsKIAkJcWliX3NjaGVkdWxlX3NlbmQocXApOwogCi0JCWdvdG8gc3J1bmxvY2s7CisJCWdvdG8gc3VubG9jazsKIAl9CiAKIAljYXNlIE9QKENPTVBBUkVfU1dBUCk6CkBAIC0yMTY1LDkgKzIxNTQsNiBAQAogCQlpZiAobmV4dCA+IFFJQl9NQVhfUkRNQV9BVE9NSUMpCiAJCQluZXh0ID0gMDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKLQkJLyogRG91YmxlIGNoZWNrIHdlIGNhbiBwcm9jZXNzIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgc19sb2NrLiAqLwotCQlpZiAoIShpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKLQkJCWdvdG8gc3J1bmxvY2s7CiAJCWlmICh1bmxpa2VseShuZXh0ID09IHFwLT5zX3RhaWxfYWNrX3F1ZXVlKSkgewogCQkJaWYgKCFxcC0+c19hY2tfcXVldWVbbmV4dF0uc2VudCkKIAkJCQlnb3RvIG5hY2tfaW52X3VubGNrOwpAQCAtMjIxMyw3ICsyMTk5LDcgQEAKIAkJcXAtPnNfZmxhZ3MgfD0gUUlCX1NfUkVTUF9QRU5ESU5HOwogCQlxaWJfc2NoZWR1bGVfc2VuZChxcCk7CiAKLQkJZ290byBzcnVubG9jazsKKwkJZ290byBzdW5sb2NrOwogCX0KIAogCWRlZmF1bHQ6CkBAIC0yMjI3LDcgKzIyMTMsNyBAQAogCS8qIFNlbmQgYW4gQUNLIGlmIHJlcXVlc3RlZCBvciByZXF1aXJlZC4gKi8KIAlpZiAocHNuICYgKDEgPDwgMzEpKQogCQlnb3RvIHNlbmRfYWNrOwotCWdvdG8gcnVubG9jazsKKwlyZXR1cm47CiAKIHJucl9uYWs6CiAJcXAtPnJfbmFrX3N0YXRlID0gSUJfUk5SX05BSyB8IHFwLT5yX21pbl9ybnJfdGltZXI7CkBAIC0yMjM4LDcgKzIyMjQsNyBAQAogCQlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOwogCQlsaXN0X2FkZF90YWlsKCZxcC0+cnNwd2FpdCwgJnJjZC0+cXBfd2FpdF9saXN0KTsKIAl9Ci0JZ290byBydW5sb2NrOworCXJldHVybjsKIAogbmFja19vcF9lcnI6CiAJcWliX3JjX2Vycm9yKHFwLCBJQl9XQ19MT0NfUVBfT1BfRVJSKTsKQEAgLTIyNTAsNyArMjIzNiw3IEBACiAJCWF0b21pY19pbmMoJnFwLT5yZWZjb3VudCk7CiAJCWxpc3RfYWRkX3RhaWwoJnFwLT5yc3B3YWl0LCAmcmNkLT5xcF93YWl0X2xpc3QpOwogCX0KLQlnb3RvIHJ1bmxvY2s7CisJcmV0dXJuOwogCiBuYWNrX2ludl91bmxjazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+c19sb2NrLCBmbGFncyk7CkBAIC0yMjY0LDcgKzIyNTAsNyBAQAogCQlhdG9taWNfaW5jKCZxcC0+cmVmY291bnQpOwogCQlsaXN0X2FkZF90YWlsKCZxcC0+cnNwd2FpdCwgJnJjZC0+cXBfd2FpdF9saXN0KTsKIAl9Ci0JZ290byBydW5sb2NrOworCXJldHVybjsKIAogbmFja19hY2NfdW5sY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwpAQCAtMjI3NCwxMyArMjI2MCw2IEBACiAJcXAtPnJfYWNrX3BzbiA9IHFwLT5yX3BzbjsKIHNlbmRfYWNrOgogCXFpYl9zZW5kX3JjX2FjayhxcCk7Ci1ydW5sb2NrOgotCXNwaW5fdW5sb2NrKCZxcC0+cl9sb2NrKTsKLQlyZXR1cm47Ci0KLXNydW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKLQlzcGluX3VubG9jaygmcXAtPnJfbG9jayk7CiAJcmV0dXJuOwogCiBzdW5sb2NrOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfc2RtYS5jCmluZGV4IGI4NDU2ODguLmNhZDQ0NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zZG1hLmMKQEAgLTY1Niw2ICs2NTYsNyBAQAogCX0KIAlxcCA9IHR4LT5xcDsKIAlxaWJfcHV0X3R4cmVxKHR4KTsKKwlzcGluX2xvY2soJnFwLT5yX2xvY2spOwogCXNwaW5fbG9jaygmcXAtPnNfbG9jayk7CiAJaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1JDKSB7CiAJCS8qIFhYWCB3aGF0IGFib3V0IGVycm9yIHNlbmRpbmcgUkRNQSByZWFkIHJlc3BvbnNlcz8gKi8KQEAgLTY2NCw2ICs2NjUsNyBAQAogCX0gZWxzZSBpZiAocXAtPnNfd3FlKQogCQlxaWJfc2VuZF9jb21wbGV0ZShxcCwgcXAtPnNfd3FlLCBJQl9XQ19HRU5FUkFMX0VSUik7CiAJc3Bpbl91bmxvY2soJnFwLT5zX2xvY2spOworCXNwaW5fdW5sb2NrKCZxcC0+cl9sb2NrKTsKIAkvKiByZXR1cm4gemVybyB0byBwcm9jZXNzIHRoZSBuZXh0IHNlbmQgd29yayByZXF1ZXN0ICovCiAJZ290byB1bmxvY2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9zeXNmcy5jCmluZGV4IGRhYjRkOWYuLmQ1MGEzM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfc3lzZnMuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKICNkZWZpbmUgUUlCX0RJQUdDX0FUVFIoTikgXAogCXN0YXRpYyBzdHJ1Y3QgcWliX2RpYWdjX2F0dHIgcWliX2RpYWdjX2F0dHJfIyNOID0geyBcCi0JCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KE4pLCAubW9kZSA9IDA0NDQgfSwgXAorCQkuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShOKSwgLm1vZGUgPSAwNjY0IH0sIFwKIAkJLmNvdW50ZXIgPSBvZmZzZXRvZihzdHJ1Y3QgcWliX2licG9ydCwgbl8jI04pIFwKIAl9CiAKQEAgLTQwMyw4ICs0MDMsMjcgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKih1MzIgKikoKGNoYXIgKilxaWJwICsgZGF0dHItPmNvdW50ZXIpKTsKIH0KIAorc3RhdGljIHNzaXplX3QgZGlhZ2NfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBxaWJfZGlhZ2NfYXR0ciAqZGF0dHIgPQorCQljb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHFpYl9kaWFnY19hdHRyLCBhdHRyKTsKKwlzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkID0KKwkJY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBxaWJfcHBvcnRkYXRhLCBkaWFnY19rb2JqKTsKKwlzdHJ1Y3QgcWliX2licG9ydCAqcWlicCA9ICZwcGQtPmlicG9ydF9kYXRhOworCWNoYXIgKmVuZHA7CisJbG9uZyB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgJmVuZHAsIDApOworCisJaWYgKHZhbCA8IDAgfHwgZW5kcCA9PSBidWYpCisJCXJldHVybiAtRUlOVkFMOworCisJKih1MzIgKikoKGNoYXIgKikgcWlicCArIGRhdHRyLT5jb3VudGVyKSA9IHZhbDsKKwlyZXR1cm4gc2l6ZTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcWliX2RpYWdjX29wcyA9IHsKIAkuc2hvdyA9IGRpYWdjX2F0dHJfc2hvdywKKwkuc3RvcmUgPSBkaWFnY19hdHRyX3N0b3JlLAogfTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgcWliX2RpYWdjX2t0eXBlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHguYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3R4LmMKaW5kZXggYWYzMDIzMi4uN2YzNjQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdHguYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl90eC5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIHZvaWQgcWliX2Rpc2FybV9waW9idWZzX3NldChzdHJ1Y3QgcWliX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBsb25nICptYXNrLAogCQkJICAgIHVuc2lnbmVkIGNudCkKIHsKLQlzdHJ1Y3QgcWliX3Bwb3J0ZGF0YSAqcHBkLCAqcHBwZFtkZC0+bnVtX3Bwb3J0c107CisJc3RydWN0IHFpYl9wcG9ydGRhdGEgKnBwZCwgKnBwcGRbUUlCX01BWF9JQl9QT1JUU107CiAJdW5zaWduZWQgaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdWMuYwppbmRleCA2YzdmZTc4Li5iOWM4YjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VjLmMKQEAgLTI3Miw5ICsyNzIsNiBAQAogCW9wY29kZSA+Pj0gMjQ7CiAJbWVtc2V0KCZ3YywgMCwgc2l6ZW9mIHdjKTsKIAotCS8qIFByZXZlbnQgc2ltdWx0YW5lb3VzIHByb2Nlc3NpbmcgYWZ0ZXIgQVBNIG9uIGRpZmZlcmVudCBDUFVzICovCi0Jc3Bpbl9sb2NrKCZxcC0+cl9sb2NrKTsKLQogCS8qIENvbXBhcmUgdGhlIFBTTiB2ZXJzZXMgdGhlIGV4cGVjdGVkIFBTTi4gKi8KIAlpZiAodW5saWtlbHkocWliX2NtcDI0KHBzbiwgcXAtPnJfcHNuKSAhPSAwKSkgewogCQkvKgpAQCAtNTM0LDcgKzUzMSw2IEBACiAJfQogCXFwLT5yX3BzbisrOwogCXFwLT5yX3N0YXRlID0gb3Bjb2RlOwotCXNwaW5fdW5sb2NrKCZxcC0+cl9sb2NrKTsKIAlyZXR1cm47CiAKIHJld2luZDoKQEAgLTU0MiwxMiArNTM4LDEwIEBACiAJcXAtPnJfc2dlLm51bV9zZ2UgPSAwOwogZHJvcDoKIAlpYnAtPm5fcGt0X2Ryb3BzKys7Ci0Jc3Bpbl91bmxvY2soJnFwLT5yX2xvY2spOwogCXJldHVybjsKIAogb3BfZXJyOgogCXFpYl9yY19lcnJvcihxcCwgSUJfV0NfTE9DX1FQX09QX0VSUik7Ci0Jc3Bpbl91bmxvY2soJnFwLT5yX2xvY2spOwogCXJldHVybjsKIAogc3VubG9jazoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl91ZC5jCmluZGV4IGM4MzhjZGEuLmUxYjNkYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdWQuYwpAQCAtNTM1LDEzICs1MzUsNiBAQAogCXdjLmJ5dGVfbGVuID0gdGxlbiArIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKTsKIAogCS8qCi0JICogV2UgbmVlZCB0byBzZXJpYWxpemUgZ2V0dGluZyBhIHJlY2VpdmUgd29yayBxdWV1ZSBlbnRyeSBhbmQKLQkgKiBnZW5lcmF0aW5nIGEgY29tcGxldGlvbiBmb3IgaXQgYWdhaW5zdCBRUHMgc2VuZGluZyB0byB0aGlzIFFQCi0JICogbG9jYWxseS4KLQkgKi8KLQlzcGluX2xvY2soJnFwLT5yX2xvY2spOwotCi0JLyoKIAkgKiBHZXQgdGhlIG5leHQgd29yayByZXF1ZXN0IGVudHJ5IHRvIGZpbmQgd2hlcmUgdG8gcHV0IHRoZSBkYXRhLgogCSAqLwogCWlmIChxcC0+cl9mbGFncyAmIFFJQl9SX1JFVVNFX1NHRSkKQEAgLTU1MiwxOSArNTQ1LDE5IEBACiAJCXJldCA9IHFpYl9nZXRfcndxZShxcCwgMCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlxaWJfcmNfZXJyb3IocXAsIElCX1dDX0xPQ19RUF9PUF9FUlIpOwotCQkJZ290byBiYWlsX3VubG9jazsKKwkJCXJldHVybjsKIAkJfQogCQlpZiAoIXJldCkgewogCQkJaWYgKHFwLT5pYnFwLnFwX251bSA9PSAwKQogCQkJCWlicC0+bl92bDE1X2Ryb3BwZWQrKzsKLQkJCWdvdG8gYmFpbF91bmxvY2s7CisJCQlyZXR1cm47CiAJCX0KIAl9CiAJLyogU2lsZW50bHkgZHJvcCBwYWNrZXRzIHdoaWNoIGFyZSB0b28gYmlnLiAqLwogCWlmICh1bmxpa2VseSh3Yy5ieXRlX2xlbiA+IHFwLT5yX2xlbikpIHsKIAkJcXAtPnJfZmxhZ3MgfD0gUUlCX1JfUkVVU0VfU0dFOwogCQlpYnAtPm5fcGt0X2Ryb3BzKys7Ci0JCWdvdG8gYmFpbF91bmxvY2s7CisJCXJldHVybjsKIAl9CiAJaWYgKGhhc19ncmgpIHsKIAkJcWliX2NvcHlfc2dlKCZxcC0+cl9zZ2UsICZoZHItPnUubC5ncmgsCkBAIC01NzksNyArNTcyLDcgQEAKIAkJCXFwLT5yX3NnZS5zZ2UgPSAqcXAtPnJfc2dlLnNnX2xpc3QrKzsKIAl9CiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUUlCX1JfV1JJRF9WQUxJRCwgJnFwLT5yX2FmbGFncykpCi0JCWdvdG8gYmFpbF91bmxvY2s7CisJCXJldHVybjsKIAl3Yy53cl9pZCA9IHFwLT5yX3dyX2lkOwogCXdjLnN0YXR1cyA9IElCX1dDX1NVQ0NFU1M7CiAJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKQEAgLTYwMSw3ICs1OTQsNSBAQAogCXFpYl9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJICAgICAob2hkci0+YnRoWzBdICYKIAkJCWNwdV90b19iZTMyKElCX0JUSF9TT0xJQ0lURUQpKSAhPSAwKTsKLWJhaWxfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZxcC0+cl9sb2NrKTsKIGJhaWw6OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3ZlcmJzLmMKaW5kZXggY2RhOGY0MS4uOWZhYjQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl92ZXJicy5jCkBAIC01NTAsMTAgKzU1MCwxMiBAQAogewogCXN0cnVjdCBxaWJfaWJwb3J0ICppYnAgPSAmcmNkLT5wcGQtPmlicG9ydF9kYXRhOwogCisJc3Bpbl9sb2NrKCZxcC0+cl9sb2NrKTsKKwogCS8qIENoZWNrIGZvciB2YWxpZCByZWNlaXZlIHN0YXRlLiAqLwogCWlmICghKGliX3FpYl9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIFFJQl9QUk9DRVNTX1JFQ1ZfT0spKSB7CiAJCWlicC0+bl9wa3RfZHJvcHMrKzsKLQkJcmV0dXJuOworCQlnb3RvIHVubG9jazsKIAl9CiAKIAlzd2l0Y2ggKHFwLT5pYnFwLnFwX3R5cGUpIHsKQEAgLTU3Nyw2ICs1NzksOSBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZxcC0+cl9sb2NrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCmluZGV4IDBiOWVmMDcuLjk1YTA4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX2luaXRpYXRvci5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIH0KIAogCi1pbnQgaXNlcl9hbGxvY19yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKQorc3RhdGljIGludCBpc2VyX2FsbG9jX3J4X2Rlc2NyaXB0b3JzKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pCiB7CiAJaW50IGksIGo7CiAJdTY0IGRtYV9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCBlZDNmOWViLi43ZjhmMTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwpAQCAtODExLDYgKzgxMSwzOCBAQAogCXJldHVybiBsZW47CiB9CiAKK3N0YXRpYyBpbnQgc3JwX3Bvc3RfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3JwX2l1ICppdTsKKwlzdHJ1Y3QgaWJfc2dlIGxpc3Q7CisJc3RydWN0IGliX3JlY3Zfd3Igd3IsICpiYWRfd3I7CisJdW5zaWduZWQgaW50IG5leHQ7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCW5leHQJID0gdGFyZ2V0LT5yeF9oZWFkICYgKFNSUF9SUV9TSVpFIC0gMSk7CisJd3Iud3JfaWQgPSBuZXh0OworCWl1CSA9IHRhcmdldC0+cnhfcmluZ1tuZXh0XTsKKworCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKKwlsaXN0Lmxlbmd0aCA9IGl1LT5zaXplOworCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPmxrZXk7CisKKwl3ci5uZXh0ICAgICA9IE5VTEw7CisJd3Iuc2dfbGlzdCAgPSAmbGlzdDsKKwl3ci5udW1fc2dlICA9IDE7CisKKwlyZXQgPSBpYl9wb3N0X3JlY3YodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKKwlpZiAoIXJldCkKKwkJKyt0YXJnZXQtPnJ4X2hlYWQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyB2b2lkIHNycF9wcm9jZXNzX3JzcChzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQsIHN0cnVjdCBzcnBfcnNwICpyc3ApCiB7CiAJc3RydWN0IHNycF9yZXF1ZXN0ICpyZXE7CkBAIC04NjgsNiArOTAwLDcgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNycF9pdSAqaXU7CisJaW50IHJlczsKIAl1OCBvcGNvZGU7CiAKIAlpdSA9IHRhcmdldC0+cnhfcmluZ1t3Yy0+d3JfaWRdOwpAQCAtODc5LDIxICs5MTIsMTAgQEAKIAlvcGNvZGUgPSAqKHU4ICopIGl1LT5idWY7CiAKIAlpZiAoMCkgewotCQlpbnQgaTsKLQogCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAogCQkJICAgICBQRlggInJlY3YgY29tcGxldGlvbiwgb3Bjb2RlIDB4JTAyeFxuIiwgb3Bjb2RlKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgd2MtPmJ5dGVfbGVuOyArK2kpIHsKLQkJCWlmIChpICUgOCA9PSAwKQotCQkJCXByaW50ayhLRVJOX0VSUiAiICBbJTAyeF0gIiwgaSk7Ci0JCQlwcmludGsoIiAlMDJ4IiwgKCh1OCAqKSBpdS0+YnVmKVtpXSk7Ci0JCQlpZiAoKGkgKyAxKSAlIDggPT0gMCkKLQkJCQlwcmludGsoIlxuIik7Ci0JCX0KLQotCQlpZiAod2MtPmJ5dGVfbGVuICUgOCkKLQkJCXByaW50aygiXG4iKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDgsIDEsCisJCQkgICAgICAgaXUtPmJ1Ziwgd2MtPmJ5dGVfbGVuLCB0cnVlKTsKIAl9CiAKIAlzd2l0Y2ggKG9wY29kZSkgewpAQCAtOTE1LDYgKzkzNywxMSBAQAogCiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCiAJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKKworCXJlcyA9IHNycF9wb3N0X3JlY3YodGFyZ2V0KTsKKwlpZiAocmVzICE9IDApCisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgdGFyZ2V0LT5zY3NpX2hvc3QsCisJCQkgICAgIFBGWCAiUmVjdiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXMpOwogfQogCiBzdGF0aWMgdm9pZCBzcnBfcmVjdl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpCkBAIC05NTQsNDUgKzk4MSw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fc3JwX3Bvc3RfcmVjdihzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQpCi17Ci0Jc3RydWN0IHNycF9pdSAqaXU7Ci0Jc3RydWN0IGliX3NnZSBsaXN0OwotCXN0cnVjdCBpYl9yZWN2X3dyIHdyLCAqYmFkX3dyOwotCXVuc2lnbmVkIGludCBuZXh0OwotCWludCByZXQ7Ci0KLQluZXh0IAkgPSB0YXJnZXQtPnJ4X2hlYWQgJiAoU1JQX1JRX1NJWkUgLSAxKTsKLQl3ci53cl9pZCA9IG5leHQ7Ci0JaXUgCSA9IHRhcmdldC0+cnhfcmluZ1tuZXh0XTsKLQotCWxpc3QuYWRkciAgID0gaXUtPmRtYTsKLQlsaXN0Lmxlbmd0aCA9IGl1LT5zaXplOwotCWxpc3QubGtleSAgID0gdGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+bXItPmxrZXk7Ci0KLQl3ci5uZXh0ICAgICA9IE5VTEw7Ci0Jd3Iuc2dfbGlzdCAgPSAmbGlzdDsKLQl3ci5udW1fc2dlICA9IDE7Ci0KLQlyZXQgPSBpYl9wb3N0X3JlY3YodGFyZ2V0LT5xcCwgJndyLCAmYmFkX3dyKTsKLQlpZiAoIXJldCkKLQkJKyt0YXJnZXQtPnJ4X2hlYWQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNycF9wb3N0X3JlY3Yoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX3NycF9wb3N0X3JlY3YodGFyZ2V0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2sgaGVsZCB0byBwcm90ZWN0CiAgKiByZXFfbGltIGFuZCB0eF9oZWFkLiAgTG9jayBjYW5ub3QgYmUgZHJvcHBlZCBiZXR3ZWVuIGNhbGwgaGVyZSBhbmQKQEAgLTExMDIsMTEgKzEwOTAsNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAoX19zcnBfcG9zdF9yZWN2KHRhcmdldCkpIHsKLQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwgUEZYICJSZWN2IGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQogCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgaXUtPmRtYSwgc3JwX21heF9pdV9sZW4sCiAJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CiAKQEAgLTEyNDksNiArMTIzMiw3IEBACiAJaW50IGF0dHJfbWFzayA9IDA7CiAJaW50IGNvbXAgPSAwOwogCWludCBvcGNvZGUgPSAwOworCWludCBpOwogCiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKIAljYXNlIElCX0NNX1JFUV9FUlJPUjoKQEAgLTEyOTgsNyArMTI4MiwxMSBAQAogCQlpZiAodGFyZ2V0LT5zdGF0dXMpCiAJCQlicmVhazsKIAotCQl0YXJnZXQtPnN0YXR1cyA9IHNycF9wb3N0X3JlY3YodGFyZ2V0KTsKKwkJZm9yIChpID0gMDsgaSA8IFNSUF9SUV9TSVpFOyBpKyspIHsKKwkJCXRhcmdldC0+c3RhdHVzID0gc3JwX3Bvc3RfcmVjdih0YXJnZXQpOworCQkJaWYgKHRhcmdldC0+c3RhdHVzKQorCQkJCWJyZWFrOworCQl9CiAJCWlmICh0YXJnZXQtPnN0YXR1cykKIAkJCWJyZWFrOwogCkBAIC0xNTY0LDYgKzE1NTIsMTggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlcEk2XG4iLCB0YXJnZXQtPm9yaWdfZGdpZCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfcmVxX2xpbShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSBob3N0X3RvX3RhcmdldChjbGFzc190b19zaG9zdChkZXYpKTsKKworCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfREVBRCB8fAorCSAgICB0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfUkVNT1ZFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGFyZ2V0LT5yZXFfbGltKTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd196ZXJvX3JlcV9saW0oc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMTU5OCw2ICsxNTk4LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihwa2V5LAkgICAgU19JUlVHTywgc2hvd19wa2V5LAkJICAgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoZGdpZCwJICAgIFNfSVJVR08sIHNob3dfZGdpZCwJCSAgIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKG9yaWdfZGdpZCwJICAgIFNfSVJVR08sIHNob3dfb3JpZ19kZ2lkLAkgICBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXFfbGltLCAgICAgICAgIFNfSVJVR08sIHNob3dfcmVxX2xpbSwgICAgICAgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih6ZXJvX3JlcV9saW0sICAgIFNfSVJVR08sIHNob3dfemVyb19yZXFfbGltLAkgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsb2NhbF9pYl9wb3J0LCAgIFNfSVJVR08sIHNob3dfbG9jYWxfaWJfcG9ydCwgICBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihsb2NhbF9pYl9kZXZpY2UsIFNfSVJVR08sIHNob3dfbG9jYWxfaWJfZGV2aWNlLCBOVUxMKTsKQEAgLTE2MDksNiArMTYxMCw3IEBACiAJJmRldl9hdHRyX3BrZXksCiAJJmRldl9hdHRyX2RnaWQsCiAJJmRldl9hdHRyX29yaWdfZGdpZCwKKwkmZGV2X2F0dHJfcmVxX2xpbSwKIAkmZGV2X2F0dHJfemVyb19yZXFfbGltLAogCSZkZXZfYXR0cl9sb2NhbF9pYl9wb3J0LAogCSZkZXZfYXR0cl9sb2NhbF9pYl9kZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMDU0ZWRmMy4uYzkwOGM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtNDkyLDEzICs0OTIsMTUgQEAKIH0KIAogI2RlZmluZSBPTERfS0VZX01BWAkweDFmZgotc3RhdGljIGludCBoYW5kbGVfZXZpb2NnYml0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKnAsIGludCBjb21wYXRfbW9kZSkKK3N0YXRpYyBpbnQgaGFuZGxlX2V2aW9jZ2JpdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgIHZvaWQgX191c2VyICpwLCBpbnQgY29tcGF0X21vZGUpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcga2V5bWF4X3dhcm5fdGltZTsKIAl1bnNpZ25lZCBsb25nICpiaXRzOwogCWludCBsZW47CiAKLQlzd2l0Y2ggKF9JT0NfTlIoY21kKSAmIEVWX01BWCkgeworCXN3aXRjaCAodHlwZSkgewogCiAJY2FzZSAgICAgIDA6IGJpdHMgPSBkZXYtPmV2Yml0OyAgbGVuID0gRVZfTUFYOyAgYnJlYWs7CiAJY2FzZSBFVl9LRVk6IGJpdHMgPSBkZXYtPmtleWJpdDsgbGVuID0gS0VZX01BWDsgYnJlYWs7CkBAIC01MTcsNyArNTE5LDcgQEAKIAkgKiBFVklPQ0dCSVQoRVZfS0VZLCBLRVlfTUFYKSBhbmQgbm90IHJlYWxpemUgdGhhdCAnbGVuJwogCSAqIHNob3VsZCBiZSBpbiBieXRlcywgbm90IGluIGJpdHMuCiAJICovCi0JaWYgKChfSU9DX05SKGNtZCkgJiBFVl9NQVgpID09IEVWX0tFWSAmJiBfSU9DX1NJWkUoY21kKSA9PSBPTERfS0VZX01BWCkgeworCWlmICh0eXBlID09IEVWX0tFWSAmJiBzaXplID09IE9MRF9LRVlfTUFYKSB7CiAJCWxlbiA9IE9MRF9LRVlfTUFYOwogCQlpZiAocHJpbnRrX3RpbWVkX3JhdGVsaW1pdCgma2V5bWF4X3dhcm5fdGltZSwgMTAgKiAxMDAwKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTUyOCw3ICs1MzAsNyBAQAogCQkJCUJJVFNfVE9fTE9OR1MoT0xEX0tFWV9NQVgpICogc2l6ZW9mKGxvbmcpKTsKIAl9CiAKLQlyZXR1cm4gYml0c190b191c2VyKGJpdHMsIGxlbiwgX0lPQ19TSVpFKGNtZCksIHAsIGNvbXBhdF9tb2RlKTsKKwlyZXR1cm4gYml0c190b191c2VyKGJpdHMsIGxlbiwgc2l6ZSwgcCwgY29tcGF0X21vZGUpOwogfQogI3VuZGVmIE9MRF9LRVlfTUFYCiAKQEAgLTU0Miw4ICs1NDQsMTAgQEAKIAlzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKIAlpbnQgX191c2VyICppcCA9IChpbnQgX191c2VyICopcDsKIAl1bnNpZ25lZCBpbnQgaSwgdCwgdSwgdjsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgZXJyb3I7CiAKKwkvKiBGaXJzdCB3ZSBjaGVjayBmb3IgZml4ZWQtbGVuZ3RoIGNvbW1hbmRzICovCiAJc3dpdGNoIChjbWQpIHsKIAogCWNhc2UgRVZJT0NHVkVSU0lPTjoKQEAgLTYxMCwxMTIgKzYxNCwxMDIgQEAKIAkJCXJldHVybiBldmRldl9ncmFiKGV2ZGV2LCBjbGllbnQpOwogCQllbHNlCiAJCQlyZXR1cm4gZXZkZXZfdW5ncmFiKGV2ZGV2LCBjbGllbnQpOworCX0KIAotCWRlZmF1bHQ6CisJc2l6ZSA9IF9JT0NfU0laRShjbWQpOwogCi0JCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnRScpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBOb3cgY2hlY2sgdmFyaWFibGUtbGVuZ3RoIGNvbW1hbmRzICovCisjZGVmaW5lIEVWSU9DX01BU0tfU0laRShucikJKChucikgJiB+KF9JT0NfU0laRU1BU0sgPDwgX0lPQ19TSVpFU0hJRlQpKQogCi0JCWlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfUkVBRCkgeworCXN3aXRjaCAoRVZJT0NfTUFTS19TSVpFKGNtZCkpIHsKIAotCQkJaWYgKChfSU9DX05SKGNtZCkgJiB+RVZfTUFYKSA9PSBfSU9DX05SKEVWSU9DR0JJVCgwLCAwKSkpCi0JCQkJcmV0dXJuIGhhbmRsZV9ldmlvY2diaXQoZGV2LCBjbWQsIHAsIGNvbXBhdF9tb2RlKTsKKwljYXNlIEVWSU9DR0tFWSgwKToKKwkJcmV0dXJuIGJpdHNfdG9fdXNlcihkZXYtPmtleSwgS0VZX01BWCwgc2l6ZSwgcCwgY29tcGF0X21vZGUpOwogCi0JCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoRVZJT0NHS0VZKDApKSkKLQkJCQlyZXR1cm4gYml0c190b191c2VyKGRldi0+a2V5LCBLRVlfTUFYLCBfSU9DX1NJWkUoY21kKSwKLQkJCQkJCSAgICBwLCBjb21wYXRfbW9kZSk7CisJY2FzZSBFVklPQ0dMRUQoMCk6CisJCXJldHVybiBiaXRzX3RvX3VzZXIoZGV2LT5sZWQsIExFRF9NQVgsIHNpemUsIHAsIGNvbXBhdF9tb2RlKTsKIAotCQkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEVWSU9DR0xFRCgwKSkpCi0JCQkJcmV0dXJuIGJpdHNfdG9fdXNlcihkZXYtPmxlZCwgTEVEX01BWCwgX0lPQ19TSVpFKGNtZCksCi0JCQkJCQkgICAgcCwgY29tcGF0X21vZGUpOworCWNhc2UgRVZJT0NHU05EKDApOgorCQlyZXR1cm4gYml0c190b191c2VyKGRldi0+c25kLCBTTkRfTUFYLCBzaXplLCBwLCBjb21wYXRfbW9kZSk7CiAKLQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihFVklPQ0dTTkQoMCkpKQotCQkJCXJldHVybiBiaXRzX3RvX3VzZXIoZGV2LT5zbmQsIFNORF9NQVgsIF9JT0NfU0laRShjbWQpLAotCQkJCQkJICAgIHAsIGNvbXBhdF9tb2RlKTsKKwljYXNlIEVWSU9DR1NXKDApOgorCQlyZXR1cm4gYml0c190b191c2VyKGRldi0+c3csIFNXX01BWCwgc2l6ZSwgcCwgY29tcGF0X21vZGUpOwogCi0JCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoRVZJT0NHU1coMCkpKQotCQkJCXJldHVybiBiaXRzX3RvX3VzZXIoZGV2LT5zdywgU1dfTUFYLCBfSU9DX1NJWkUoY21kKSwKLQkJCQkJCSAgICBwLCBjb21wYXRfbW9kZSk7CisJY2FzZSBFVklPQ0dOQU1FKDApOgorCQlyZXR1cm4gc3RyX3RvX3VzZXIoZGV2LT5uYW1lLCBzaXplLCBwKTsKIAotCQkJaWYgKF9JT0NfTlIoY21kKSA9PSBfSU9DX05SKEVWSU9DR05BTUUoMCkpKQotCQkJCXJldHVybiBzdHJfdG9fdXNlcihkZXYtPm5hbWUsIF9JT0NfU0laRShjbWQpLCBwKTsKKwljYXNlIEVWSU9DR1BIWVMoMCk6CisJCXJldHVybiBzdHJfdG9fdXNlcihkZXYtPnBoeXMsIHNpemUsIHApOwogCi0JCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoRVZJT0NHUEhZUygwKSkpCi0JCQkJcmV0dXJuIHN0cl90b191c2VyKGRldi0+cGh5cywgX0lPQ19TSVpFKGNtZCksIHApOworCWNhc2UgRVZJT0NHVU5JUSgwKToKKwkJcmV0dXJuIHN0cl90b191c2VyKGRldi0+dW5pcSwgc2l6ZSwgcCk7CiAKLQkJCWlmIChfSU9DX05SKGNtZCkgPT0gX0lPQ19OUihFVklPQ0dVTklRKDApKSkKLQkJCQlyZXR1cm4gc3RyX3RvX3VzZXIoZGV2LT51bmlxLCBfSU9DX1NJWkUoY21kKSwgcCk7CisJY2FzZSBFVklPQ19NQVNLX1NJWkUoRVZJT0NTRkYpOgorCQlpZiAoaW5wdXRfZmZfZWZmZWN0X2Zyb21fdXNlcihwLCBzaXplLCAmZWZmZWN0KSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0JCQlpZiAoKF9JT0NfTlIoY21kKSAmIH5BQlNfTUFYKSA9PSBfSU9DX05SKEVWSU9DR0FCUygwKSkpIHsKKwkJZXJyb3IgPSBpbnB1dF9mZl91cGxvYWQoZGV2LCAmZWZmZWN0LCBmaWxlKTsKIAotCQkJCXQgPSBfSU9DX05SKGNtZCkgJiBBQlNfTUFYOworCQlpZiAocHV0X3VzZXIoZWZmZWN0LmlkLCAmKCgoc3RydWN0IGZmX2VmZmVjdCBfX3VzZXIgKilwKS0+aWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0JCQkJYWJzLnZhbHVlID0gZGV2LT5hYnNbdF07Ci0JCQkJYWJzLm1pbmltdW0gPSBkZXYtPmFic21pblt0XTsKLQkJCQlhYnMubWF4aW11bSA9IGRldi0+YWJzbWF4W3RdOwotCQkJCWFicy5mdXp6ID0gZGV2LT5hYnNmdXp6W3RdOwotCQkJCWFicy5mbGF0ID0gZGV2LT5hYnNmbGF0W3RdOwotCQkJCWFicy5yZXNvbHV0aW9uID0gZGV2LT5hYnNyZXNbdF07CisJCXJldHVybiBlcnJvcjsKKwl9CiAKLQkJCQlpZiAoY29weV90b191c2VyKHAsICZhYnMsIG1pbl90KHNpemVfdCwKLQkJCQkJCQkJX0lPQ19TSVpFKGNtZCksCi0JCQkJCQkJCXNpemVvZihzdHJ1Y3QgaW5wdXRfYWJzaW5mbykpKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJLyogTXVsdGktbnVtYmVyIHZhcmlhYmxlLWxlbmd0aCBoYW5kbGVycyAqLworCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnRScpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCQkJcmV0dXJuIDA7Ci0JCQl9CisJaWYgKF9JT0NfRElSKGNtZCkgPT0gX0lPQ19SRUFEKSB7CiAKLQkJfQorCQlpZiAoKF9JT0NfTlIoY21kKSAmIH5FVl9NQVgpID09IF9JT0NfTlIoRVZJT0NHQklUKDAsIDApKSkKKwkJCXJldHVybiBoYW5kbGVfZXZpb2NnYml0KGRldiwKKwkJCQkJCV9JT0NfTlIoY21kKSAmIEVWX01BWCwgc2l6ZSwKKwkJCQkJCXAsIGNvbXBhdF9tb2RlKTsKIAotCQlpZiAoX0lPQ19ESVIoY21kKSA9PSBfSU9DX1dSSVRFKSB7CisJCWlmICgoX0lPQ19OUihjbWQpICYgfkFCU19NQVgpID09IF9JT0NfTlIoRVZJT0NHQUJTKDApKSkgewogCi0JCQlpZiAoX0lPQ19OUihjbWQpID09IF9JT0NfTlIoRVZJT0NTRkYpKSB7CisJCQl0ID0gX0lPQ19OUihjbWQpICYgQUJTX01BWDsKKwkJCWFicyA9IGRldi0+YWJzaW5mb1t0XTsKIAotCQkJCWlmIChpbnB1dF9mZl9lZmZlY3RfZnJvbV91c2VyKHAsIF9JT0NfU0laRShjbWQpLCAmZWZmZWN0KSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoY29weV90b191c2VyKHAsICZhYnMsIG1pbl90KHNpemVfdCwKKwkJCQkJc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9hYnNpbmZvKSkpKQorCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQkJZXJyb3IgPSBpbnB1dF9mZl91cGxvYWQoZGV2LCAmZWZmZWN0LCBmaWxlKTsKLQotCQkJCWlmIChwdXRfdXNlcihlZmZlY3QuaWQsICYoKChzdHJ1Y3QgZmZfZWZmZWN0IF9fdXNlciAqKXApLT5pZCkpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJCXJldHVybiBlcnJvcjsKLQkJCX0KLQotCQkJaWYgKChfSU9DX05SKGNtZCkgJiB+QUJTX01BWCkgPT0gX0lPQ19OUihFVklPQ1NBQlMoMCkpKSB7Ci0KLQkJCQl0ID0gX0lPQ19OUihjbWQpICYgQUJTX01BWDsKLQotCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmYWJzLCBwLCBtaW5fdChzaXplX3QsCi0JCQkJCQkJCSAgX0lPQ19TSVpFKGNtZCksCi0JCQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpbnB1dF9hYnNpbmZvKSkpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJCS8qIFdlIGNhbid0IGNoYW5nZSBudW1iZXIgb2YgcmVzZXJ2ZWQgTVQgc2xvdHMgKi8KLQkJCQlpZiAodCA9PSBBQlNfTVRfU0xPVCkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCQkvKgotCQkJCSAqIFRha2UgZXZlbnQgbG9jayB0byBlbnN1cmUgdGhhdCB3ZSBhcmUgbm90Ci0JCQkJICogY2hhbmdpbmcgZGV2aWNlIHBhcmFtZXRlcnMgaW4gdGhlIG1pZGRsZQotCQkJCSAqIG9mIGV2ZW50LgotCQkJCSAqLwotCQkJCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7Ci0KLQkJCQlkZXYtPmFic1t0XSA9IGFicy52YWx1ZTsKLQkJCQlkZXYtPmFic21pblt0XSA9IGFicy5taW5pbXVtOwotCQkJCWRldi0+YWJzbWF4W3RdID0gYWJzLm1heGltdW07Ci0JCQkJZGV2LT5hYnNmdXp6W3RdID0gYWJzLmZ1eno7Ci0JCQkJZGV2LT5hYnNmbGF0W3RdID0gYWJzLmZsYXQ7Ci0JCQkJZGV2LT5hYnNyZXNbdF0gPSBfSU9DX1NJWkUoY21kKSA8IHNpemVvZihzdHJ1Y3QgaW5wdXRfYWJzaW5mbykgPwotCQkJCQkJCTAgOiBhYnMucmVzb2x1dGlvbjsKLQotCQkJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKLQotCQkJCXJldHVybiAwOwotCQkJfQorCQkJcmV0dXJuIDA7CiAJCX0KIAl9CisKKwlpZiAoX0lPQ19ESVIoY21kKSA9PSBfSU9DX1JFQUQpIHsKKworCQlpZiAoKF9JT0NfTlIoY21kKSAmIH5BQlNfTUFYKSA9PSBfSU9DX05SKEVWSU9DU0FCUygwKSkpIHsKKworCQkJdCA9IF9JT0NfTlIoY21kKSAmIEFCU19NQVg7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmYWJzLCBwLCBtaW5fdChzaXplX3QsCisJCQkJCXNpemUsIHNpemVvZihzdHJ1Y3QgaW5wdXRfYWJzaW5mbykpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IGlucHV0X2Fic2luZm8pKQorCQkJCWFicy5yZXNvbHV0aW9uID0gMDsKKworCQkJLyogV2UgY2FuJ3QgY2hhbmdlIG51bWJlciBvZiByZXNlcnZlZCBNVCBzbG90cyAqLworCQkJaWYgKHQgPT0gQUJTX01UX1NMT1QpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qCisJCQkgKiBUYWtlIGV2ZW50IGxvY2sgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIG5vdAorCQkJICogY2hhbmdpbmcgZGV2aWNlIHBhcmFtZXRlcnMgaW4gdGhlIG1pZGRsZQorCQkJICogb2YgZXZlbnQuCisJCQkgKi8KKwkJCXNwaW5fbG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7CisJCQlkZXYtPmFic2luZm9bdF0gPSBhYnM7CisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+ZXZlbnRfbG9jayk7CisKKwkJCXJldHVybiAwOworCQl9CisJfQorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBlMTI0M2I0Li5hOWIwMjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlpc19tdF9ldmVudCA9IGNvZGUgPj0gQUJTX01UX0ZJUlNUICYmIGNvZGUgPD0gQUJTX01UX0xBU1Q7CiAKIAlpZiAoIWlzX210X2V2ZW50KSB7Ci0JCXBvbGQgPSAmZGV2LT5hYnNbY29kZV07CisJCXBvbGQgPSAmZGV2LT5hYnNpbmZvW2NvZGVdLnZhbHVlOwogCX0gZWxzZSBpZiAoZGV2LT5tdCkgewogCQlzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqbXRzbG90ID0gJmRldi0+bXRbZGV2LT5zbG90XTsKIAkJcG9sZCA9ICZtdHNsb3QtPmFic1tjb2RlIC0gQUJTX01UX0ZJUlNUXTsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiAJaWYgKHBvbGQpIHsKIAkJKnB2YWwgPSBpbnB1dF9kZWZ1enpfYWJzX2V2ZW50KCpwdmFsLCAqcG9sZCwKLQkJCQkJCWRldi0+YWJzZnV6eltjb2RlXSk7CisJCQkJCQlkZXYtPmFic2luZm9bY29kZV0uZnV6eik7CiAJCWlmICgqcG9sZCA9PSAqcHZhbCkKIAkJCXJldHVybiBJTlBVVF9JR05PUkVfRVZFTlQ7CiAKQEAgLTIwNCw4ICsyMDQsOCBAQAogCX0KIAogCS8qIEZsdXNoIHBlbmRpbmcgInNsb3QiIGV2ZW50ICovCi0JaWYgKGlzX210X2V2ZW50ICYmIGRldi0+c2xvdCAhPSBkZXYtPmFic1tBQlNfTVRfU0xPVF0pIHsKLQkJZGV2LT5hYnNbQUJTX01UX1NMT1RdID0gZGV2LT5zbG90OworCWlmIChpc19tdF9ldmVudCAmJiBkZXYtPnNsb3QgIT0gaW5wdXRfYWJzX2dldF92YWwoZGV2LCBBQlNfTVRfU0xPVCkpIHsKKwkJaW5wdXRfYWJzX3NldF92YWwoZGV2LCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKIAkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1NMT1QsIGRldi0+c2xvdCk7CiAJfQogCkBAIC0zOTEsNiArMzkxLDQzIEBACiBFWFBPUlRfU1lNQk9MKGlucHV0X2luamVjdF9ldmVudCk7CiAKIC8qKgorICogaW5wdXRfYWxsb2NfYWJzaW5mbyAtIGFsbG9jYXRlcyBhcnJheSBvZiBpbnB1dF9hYnNpbmZvIHN0cnVjdHMKKyAqIEBkZXY6IHRoZSBpbnB1dCBkZXZpY2UgZW1pdHRpbmcgYWJzb2x1dGUgZXZlbnRzCisgKgorICogSWYgdGhlIGFic2luZm8gc3RydWN0IHRoZSBjYWxsZXIgYXNrZWQgZm9yIGlzIGFscmVhZHkgYWxsb2NhdGVkLCB0aGlzCisgKiBmdW5jdGlvbnMgd2lsbCBub3QgZG8gYW55dGhpbmcuCisgKi8KK3ZvaWQgaW5wdXRfYWxsb2NfYWJzaW5mbyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJaWYgKCFkZXYtPmFic2luZm8pCisJCWRldi0+YWJzaW5mbyA9IGtjYWxsb2MoQUJTX0NOVCwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9hYnNpbmZvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwlXQVJOKCFkZXYtPmFic2luZm8sICIlcygpOiBrY2FsbG9jKCkgZmFpbGVkP1xuIiwgX19mdW5jX18pOworfQorRVhQT1JUX1NZTUJPTChpbnB1dF9hbGxvY19hYnNpbmZvKTsKKwordm9pZCBpbnB1dF9zZXRfYWJzX3BhcmFtcyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBheGlzLAorCQkJICBpbnQgbWluLCBpbnQgbWF4LCBpbnQgZnV6eiwgaW50IGZsYXQpCit7CisJc3RydWN0IGlucHV0X2Fic2luZm8gKmFic2luZm87CisKKwlpbnB1dF9hbGxvY19hYnNpbmZvKGRldik7CisJaWYgKCFkZXYtPmFic2luZm8pCisJCXJldHVybjsKKworCWFic2luZm8gPSAmZGV2LT5hYnNpbmZvW2F4aXNdOworCWFic2luZm8tPm1pbmltdW0gPSBtaW47CisJYWJzaW5mby0+bWF4aW11bSA9IG1heDsKKwlhYnNpbmZvLT5mdXp6ID0gZnV6ejsKKwlhYnNpbmZvLT5mbGF0ID0gZmxhdDsKKworCWRldi0+YWJzYml0W0JJVF9XT1JEKGF4aXMpXSB8PSBCSVRfTUFTSyhheGlzKTsKK30KK0VYUE9SVF9TWU1CT0woaW5wdXRfc2V0X2Fic19wYXJhbXMpOworCisKKy8qKgogICogaW5wdXRfZ3JhYl9kZXZpY2UgLSBncmFicyBkZXZpY2UgZm9yIGV4Y2x1c2l2ZSB1c2UKICAqIEBoYW5kbGU6IGlucHV0IGhhbmRsZSB0aGF0IHdhbnRzIHRvIG93biB0aGUgZGV2aWNlCiAgKgpAQCAtMTMwOCw2ICsxMzQ1LDcgQEAKIAogCWlucHV0X2ZmX2Rlc3Ryb3koZGV2KTsKIAlpbnB1dF9tdF9kZXN0cm95X3Nsb3RzKGRldik7CisJa2ZyZWUoZGV2LT5hYnNpbmZvKTsKIAlrZnJlZShkZXYpOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA2MzgzNDU4Li5kODViZDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTUzMCw3ICs1MzAsNyBAQAogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGpveWRldi0+aGFuZGxlLmRldjsKIAlzaXplX3QgbGVuOwotCWludCBpLCBqOworCWludCBpOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBQcm9jZXNzIGZpeGVkLXNpemVkIGNvbW1hbmRzLiAqLwpAQCAtNTYyLDEyICs1NjIsMTEgQEAKIAljYXNlIEpTSU9DU0NPUlI6CiAJCWlmIChjb3B5X2Zyb21fdXNlcihqb3lkZXYtPmNvcnIsIGFyZ3AsCiAJCQkgICAgICBzaXplb2Yoam95ZGV2LT5jb3JyWzBdKSAqIGpveWRldi0+bmFicykpCi0JCSAgICByZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAtRUZBVUxUOwogCiAJCWZvciAoaSA9IDA7IGkgPCBqb3lkZXYtPm5hYnM7IGkrKykgewotCQkJaiA9IGpveWRldi0+YWJzcGFtW2ldOwotCQkJam95ZGV2LT5hYnNbaV0gPSBqb3lkZXZfY29ycmVjdChkZXYtPmFic1tqXSwKLQkJCQkJCQkmam95ZGV2LT5jb3JyW2ldKTsKKwkJCWludCB2YWwgPSBpbnB1dF9hYnNfZ2V0X3ZhbChkZXYsIGpveWRldi0+YWJzcGFtW2ldKTsKKwkJCWpveWRldi0+YWJzW2ldID0gam95ZGV2X2NvcnJlY3QodmFsLCAmam95ZGV2LT5jb3JyW2ldKTsKIAkJfQogCQlyZXR1cm4gMDsKIApAQCAtODQ4LDI1ICs4NDcsMjcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBqb3lkZXYtPm5hYnM7IGkrKykgewogCQlqID0gam95ZGV2LT5hYnNwYW1baV07Ci0JCWlmIChkZXYtPmFic21heFtqXSA9PSBkZXYtPmFic21pbltqXSkgeworCQlpZiAoaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBqKSA9PSBpbnB1dF9hYnNfZ2V0X21pbihkZXYsIGopKSB7CiAJCQlqb3lkZXYtPmNvcnJbaV0udHlwZSA9IEpTX0NPUlJfTk9ORTsKLQkJCWpveWRldi0+YWJzW2ldID0gZGV2LT5hYnNbal07CisJCQlqb3lkZXYtPmFic1tpXSA9IGlucHV0X2Fic19nZXRfdmFsKGRldiwgaik7CiAJCQljb250aW51ZTsKIAkJfQogCQlqb3lkZXYtPmNvcnJbaV0udHlwZSA9IEpTX0NPUlJfQlJPS0VOOwotCQlqb3lkZXYtPmNvcnJbaV0ucHJlYyA9IGRldi0+YWJzZnV6eltqXTsKLQkJam95ZGV2LT5jb3JyW2ldLmNvZWZbMF0gPQotCQkJKGRldi0+YWJzbWF4W2pdICsgZGV2LT5hYnNtaW5bal0pIC8gMiAtIGRldi0+YWJzZmxhdFtqXTsKLQkJam95ZGV2LT5jb3JyW2ldLmNvZWZbMV0gPQotCQkJKGRldi0+YWJzbWF4W2pdICsgZGV2LT5hYnNtaW5bal0pIC8gMiArIGRldi0+YWJzZmxhdFtqXTsKKwkJam95ZGV2LT5jb3JyW2ldLnByZWMgPSBpbnB1dF9hYnNfZ2V0X2Z1enooZGV2LCBqKTsKIAotCQl0ID0gKGRldi0+YWJzbWF4W2pdIC0gZGV2LT5hYnNtaW5bal0pIC8gMiAtIDIgKiBkZXYtPmFic2ZsYXRbal07CisJCXQgPSAoaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBqKSArIGlucHV0X2Fic19nZXRfbWluKGRldiwgaikpIC8gMjsKKwkJam95ZGV2LT5jb3JyW2ldLmNvZWZbMF0gPSB0IC0gaW5wdXRfYWJzX2dldF9mbGF0KGRldiwgaik7CisJCWpveWRldi0+Y29ycltpXS5jb2VmWzFdID0gdCArIGlucHV0X2Fic19nZXRfZmxhdChkZXYsIGopOworCisJCXQgPSAoaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBqKSAtIGlucHV0X2Fic19nZXRfbWluKGRldiwgaikpIC8gMgorCQkJLSAyICogaW5wdXRfYWJzX2dldF9mbGF0KGRldiwgaik7CiAJCWlmICh0KSB7CiAJCQlqb3lkZXYtPmNvcnJbaV0uY29lZlsyXSA9ICgxIDw8IDI5KSAvIHQ7CiAJCQlqb3lkZXYtPmNvcnJbaV0uY29lZlszXSA9ICgxIDw8IDI5KSAvIHQ7CiAKLQkJCWpveWRldi0+YWJzW2ldID0gam95ZGV2X2NvcnJlY3QoZGV2LT5hYnNbal0sCi0JCQkJCQkJam95ZGV2LT5jb3JyICsgaSk7CisJCQlqb3lkZXYtPmFic1tpXSA9CisJCQkJam95ZGV2X2NvcnJlY3QoaW5wdXRfYWJzX2dldF92YWwoZGV2LCBqKSwKKwkJCQkJICAgICAgIGpveWRldi0+Y29yciArIGkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYwppbmRleCA2NDg5ZjQwLi5kMjU5YjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKQEAgLTM0Miw3ICszNDIsOCBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJCWlmIChpIDwgMikKLQkJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGF4ZXNbaV0sIDQ4LCBpbnB1dF9kZXYtPmFic1theGVzW2ldXSAqIDIgLSA0OCwgMCwgOCk7CisJCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBheGVzW2ldLAorCQkJCQk0OCwgaW5wdXRfYWJzX2dldF92YWwoaW5wdXRfZGV2LCBheGVzW2ldKSAqIDIgLSA0OCwgMCwgOCk7CiAJCQllbHNlCiAJCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBheGVzW2ldLCAyLCAyNTMsIDAsIDApOwogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfSEFUMFggKyBpLCAtMSwgMSwgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYwppbmRleCA4OWM0YzA4Li5iOTkyZmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhZGktPmF4ZXMxMCArIGFkaS0+YXhlczggKyAoYWRpLT5oYXRzICsgKGFkaS0+cGFkICE9IC0xKSkgKiAyOyBpKyspIHsKIAogCQl0ID0gYWRpLT5hYnNbaV07Ci0JCXggPSBhZGktPmRldi0+YWJzW3RdOworCQl4ID0gaW5wdXRfYWJzX2dldF92YWwoYWRpLT5kZXYsIHQpOwogCiAJCWlmICh0ID09IEFCU19USFJPVFRMRSB8fCB0ID09IEFCU19SVURERVIgfHwgYWRpLT5pZCA9PSBBRElfSURfV0dQRSkKIAkJCXggPSBpIDwgYWRpLT5heGVzMTAgPyA1MTIgOiAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYwppbmRleCAwNTAyMmYwLi5lOTA2OTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKQEAgLTEzOSw4ICsxMzksOCBAQAogCQlhbWlqb3lfZGV2W2ldLT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CiAJCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCWFtaWpveV9kZXZbaV0tPmFic21pbltBQlNfWCArIGpdID0gLTE7Ci0JCQlhbWlqb3lfZGV2W2ldLT5hYnNtYXhbQUJTX1ggKyBqXSA9IDE7CisJCQlYWGlucHV0X3NldF9hYnNfcGFyYW1zKGFtaWpveV9kZXZbaV0sIEFCU19YICsgaiwKKwkJCQkJICAgICAtMSwgMSwgMCwgMCk7CiAJCX0KIAogCQllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoYW1pam95X2RldltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCmluZGV4IDQ1YWM3MGUuLjA1MzZiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2Yyay5jCkBAIC0zMTgsMTEgKzMxOCw4IEBACiAJZm9yIChpID0gMDsgaSA8IGdmMmtfYXhlc1tnZjJrLT5pZF07IGkrKykKIAkJc2V0X2JpdChnZjJrX2Fic1tpXSwgaW5wdXRfZGV2LT5hYnNiaXQpOwogCi0JZm9yIChpID0gMDsgaSA8IGdmMmtfaGF0c1tnZjJrLT5pZF07IGkrKykgewotCQlzZXRfYml0KEFCU19IQVQwWCArIGksIGlucHV0X2Rldi0+YWJzYml0KTsKLQkJaW5wdXRfZGV2LT5hYnNtaW5bQUJTX0hBVDBYICsgaV0gPSAtMTsKLQkJaW5wdXRfZGV2LT5hYnNtYXhbQUJTX0hBVDBYICsgaV0gPSAxOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgZ2Yya19oYXRzW2dmMmstPmlkXTsgaSsrKQorCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19IQVQwWCArIGksIC0xLCAxLCAwLCAwKTsKIAogCWZvciAoaSA9IDA7IGkgPCBnZjJrX2pveXNbZ2Yyay0+aWRdOyBpKyspCiAJCXNldF9iaXQoZ2Yya19idG5fam95W2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CkBAIC0zMzQsMTEgKzMzMSwxNCBAQAogCWdmMmtfcmVhZChnZjJrLCBkYXRhKTsKIAogCWZvciAoaSA9IDA7IGkgPCBnZjJrX2F4ZXNbZ2Yyay0+aWRdOyBpKyspIHsKLQkJaW5wdXRfZGV2LT5hYnNtYXhbZ2Yya19hYnNbaV1dID0gKGkgPCAyKSA/IGlucHV0X2Rldi0+YWJzW2dmMmtfYWJzW2ldXSAqIDIgLSAzMiA6Ci0JCQkgIGlucHV0X2Rldi0+YWJzW2dmMmtfYWJzWzBdXSArIGlucHV0X2Rldi0+YWJzW2dmMmtfYWJzWzFdXSAtIDMyOwotCQlpbnB1dF9kZXYtPmFic21pbltnZjJrX2Fic1tpXV0gPSAzMjsKLQkJaW5wdXRfZGV2LT5hYnNmdXp6W2dmMmtfYWJzW2ldXSA9IDg7Ci0JCWlucHV0X2Rldi0+YWJzZmxhdFtnZjJrX2Fic1tpXV0gPSAoaSA8IDIpID8gMjQgOiAwOworCQlpbnQgbWF4ID0gaSA8IDIgPworCQkJaW5wdXRfYWJzX2dldF92YWwoaW5wdXRfZGV2LCBnZjJrX2Fic1tpXSkgKiAyIDoKKwkJCWlucHV0X2Fic19nZXRfdmFsKGlucHV0X2RldiwgZ2Yya19hYnNbMF0pICsKKwkJCQlpbnB1dF9hYnNfZ2V0X3ZhbChpbnB1dF9kZXYsIGdmMmtfYWJzWzFdKTsKKwkJaW50IGZsYXQgPSBpIDwgMiA/IDI0IDogMDsKKworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIGdmMmtfYWJzW2ldLAorCQkJCSAgICAgMzIsIG1heCAtIDMyLCA4LCBmbGF0KTsKIAl9CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZ2Yyay0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwppbmRleCAyNDc4Mjg5Li4xNmZiMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCkBAIC0yNzAsMTggKzI3MCwxNCBAQAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCWZvciAoaSA9IDA7ICh0ID0gaW50ZXJhY3RfdHlwZVtpbnRlcmFjdC0+dHlwZV0uYWJzW2ldKSA+PSAwOyBpKyspIHsKLQkJc2V0X2JpdCh0LCBpbnB1dF9kZXYtPmFic2JpdCk7Ci0JCWlmIChpIDwgaW50ZXJhY3RfdHlwZVtpbnRlcmFjdC0+dHlwZV0uYjgpIHsKLQkJCWlucHV0X2Rldi0+YWJzbWluW3RdID0gMDsKLQkJCWlucHV0X2Rldi0+YWJzbWF4W3RdID0gMjU1OwotCQl9IGVsc2UgewotCQkJaW5wdXRfZGV2LT5hYnNtaW5bdF0gPSAtMTsKLQkJCWlucHV0X2Rldi0+YWJzbWF4W3RdID0gMTsKLQkJfQorCQlpZiAoaSA8IGludGVyYWN0X3R5cGVbaW50ZXJhY3QtPnR5cGVdLmI4KQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCB0LCAwLCAyNTUsIDAsIDApOworCQllbHNlCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIHQsIC0xLCAxLCAwLCAwKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyAodCA9IGludGVyYWN0X3R5cGVbaW50ZXJhY3QtPnR5cGVdLmJ0bltpXSkgPj0gMDsgaSsrKQotCQlzZXRfYml0KHQsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KHQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAogCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnRlcmFjdC0+ZGV2KTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCBjYTEzYTZiLi5iOGQ4NjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtNzYxLDE3ICs3NjEsMjEgQEAKIAkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJCWZvciAoaiA9IDA7IChiaXRzID0gc3dfYml0W3N3LT50eXBlXVtqXSk7IGorKykgeworCQkJaW50IG1pbiwgbWF4LCBmdXp6LCBmbGF0OworCiAJCQljb2RlID0gc3dfYWJzW3N3LT50eXBlXVtqXTsKLQkJCXNldF9iaXQoY29kZSwgaW5wdXRfZGV2LT5hYnNiaXQpOwotCQkJaW5wdXRfZGV2LT5hYnNtYXhbY29kZV0gPSAoMSA8PCBiaXRzKSAtIDE7Ci0JCQlpbnB1dF9kZXYtPmFic21pbltjb2RlXSA9IChiaXRzID09IDEpID8gLTEgOiAwOwotCQkJaW5wdXRfZGV2LT5hYnNmdXp6W2NvZGVdID0gKChiaXRzID4+IDEpID49IDIpID8gKDEgPDwgKChiaXRzID4+IDEpIC0gMikpIDogMDsKLQkJCWlmIChjb2RlICE9IEFCU19USFJPVFRMRSkKLQkJCQlpbnB1dF9kZXYtPmFic2ZsYXRbY29kZV0gPSAoYml0cyA+PSA1KSA/ICgxIDw8IChiaXRzIC0gNSkpIDogMDsKKwkJCW1pbiA9IGJpdHMgPT0gMSA/IC0xIDogMDsKKwkJCW1heCA9ICgxIDw8IGJpdHMpIC0gMTsKKwkJCWZ1enogPSAoYml0cyA+PiAxKSA+PSAyID8gMSA8PCAoKGJpdHMgPj4gMSkgLSAyKSA6IDA7CisJCQlmbGF0ID0gY29kZSA9PSBBQlNfVEhST1RUTEUgfHwgYml0cyA8IDUgPworCQkJCTAgOiAxIDw8IChiaXRzIC0gNSk7CisKKwkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgY29kZSwKKwkJCQkJICAgICBtaW4sIG1heCwgZnV6eiwgZmxhdCk7CiAJCX0KIAogCQlmb3IgKGogPSAwOyAoY29kZSA9IHN3X2J0bltzdy0+dHlwZV1bal0pOyBqKyspCi0JCQlzZXRfYml0KGNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJCV9fc2V0X2JpdChjb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAkJZGJnKCIlcyVzIFslZC1iaXQgaWQgJWQgZGF0YSAlZF1cbiIsIHN3LT5uYW1lLCBjb21tZW50LCBtLCBsLCBrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay94cGFkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwppbmRleCAyNjlhODQ2Li5mOWZiN2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAJeyAweDBlNmYsIDB4MDAwNSwgIkVjbGlwc2Ugd2lyZWxlc3MgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MGU2ZiwgMHgwMDA2LCAiRWRnZSB3aXJlbGVzcyBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LAogCXsgMHgwZTZmLCAweDAwMDYsICJQZWxpY2FuICdUU1onIFdpcmVkIFhib3ggMzYwIENvbnRyb2xsZXIiLCAwLCBYVFlQRV9YQk9YMzYwIH0sCisJeyAweDBlNmYsIDB4MDIwMSwgIlBlbGljYW4gUEwtMzYwMSAnVFNaJyBXaXJlZCBYYm94IDM2MCBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgwZThmLCAweDAyMDEsICJTbWFydEpveSBGcmFnIFhwYWQvUFMyIGFkYXB0b3IiLCAwLCBYVFlQRV9YQk9YIH0sCiAJeyAweDBmMzAsIDB4MDIwMiwgIkpveXRlY2ggQWR2YW5jZWQgQ29udHJvbGxlciIsIDAsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MGYzMCwgMHg4ODg4LCAiQmlnQmVuIFhCTWluaVBhZCBDb250cm9sbGVyIiwgMCwgWFRZUEVfWEJPWCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTlmZDE0Ny4uNjA2OWFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0zOSw2ICszOSw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IG11dGV4IGRpc2FibGVfbG9jazsKIAl1bnNpZ25lZCBpbnQgbl9idXR0b25zOworCWludCAoKmVuYWJsZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkICgqZGlzYWJsZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAlzdHJ1Y3QgZ3Bpb19idXR0b25fZGF0YSBkYXRhWzBdOwogfTsKIApAQCAtNDIzLDYgKzQyNSwyMSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBncGlvX2tleXNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOworCisJcmV0dXJuIGRkYXRhLT5lbmFibGUgPyBkZGF0YS0+ZW5hYmxlKGlucHV0LT5kZXYucGFyZW50KSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fa2V5c19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKK3sKKwlzdHJ1Y3QgZ3Bpb19rZXlzX2RydmRhdGEgKmRkYXRhID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXQpOworCisJaWYgKGRkYXRhLT5kaXNhYmxlKQorCQlkZGF0YS0+ZGlzYWJsZShpbnB1dC0+ZGV2LnBhcmVudCk7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdwaW9fa2V5c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKQEAgLTQ0NCwxMyArNDYxLDE4IEBACiAKIAlkZGF0YS0+aW5wdXQgPSBpbnB1dDsKIAlkZGF0YS0+bl9idXR0b25zID0gcGRhdGEtPm5idXR0b25zOworCWRkYXRhLT5lbmFibGUgPSBwZGF0YS0+ZW5hYmxlOworCWRkYXRhLT5kaXNhYmxlID0gcGRhdGEtPmRpc2FibGU7CiAJbXV0ZXhfaW5pdCgmZGRhdGEtPmRpc2FibGVfbG9jayk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGF0YSk7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGRkYXRhKTsKIAogCWlucHV0LT5uYW1lID0gcGRldi0+bmFtZTsKIAlpbnB1dC0+cGh5cyA9ICJncGlvLWtleXMvaW5wdXQwIjsKIAlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaW5wdXQtPm9wZW4gPSBncGlvX2tleXNfb3BlbjsKKwlpbnB1dC0+Y2xvc2UgPSBncGlvX2tleXNfY2xvc2U7CiAKIAlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwogCWlucHV0LT5pZC52ZW5kb3IgPSAweDAwMDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCmluZGV4IGM4M2Y0YjIuLmRkZDVhZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCkBAIC0yMzIsMTUgKzIzMiwxNiBAQAogCQlpZiAoYWJzZGV2KSB7CiAJCQl2YWwgPSBsbyArIChoaSA8PCA4KTsKICNpZmRlZiBUQUJMRVRfQVVUT0FESlVTVAotCQkJaWYgKHZhbCA8IGRldi0+YWJzbWluW0FCU19YICsgaV0pCi0JCQkJZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSA9IHZhbDsKLQkJCWlmICh2YWwgPiBkZXYtPmFic21heFtBQlNfWCArIGldKQotCQkJCWRldi0+YWJzbWF4W0FCU19YICsgaV0gPSB2YWw7CisJCQlpZiAodmFsIDwgaW5wdXRfYWJzX21pbihkZXYsIEFCU19YICsgaSkpCisJCQkJaW5wdXRfYWJzX3NldF9taW4oZGV2LCBBQlNfWCArIGksIHZhbCk7CisJCQlpZiAodmFsID4gaW5wdXRfYWJzX21heChkZXYsIEFCU19YICsgaSkpCisJCQkJWFhpbnB1dF9hYnNfc2V0X21heChkZXYsIEFCU19YICsgaSwgdmFsKTsKICNlbmRpZgotCQkJaWYgKGklMykgdmFsID0gZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSAtIHZhbDsKKwkJCWlmIChpICUgMykKKwkJCQl2YWwgPSBpbnB1dF9hYnNfbWF4KGRldiwgQUJTX1ggKyBpKSAtIHZhbDsKIAkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCArIGksIHZhbCk7CiAJCX0gZWxzZSB7Ci0JCQl2YWwgPSAoaW50KSAoKChpbnQ4X3QpbG8pIHwgKChpbnQ4X3QpaGkgPDwgOCkpOworCQkJdmFsID0gKGludCkgKCgoaW50OF90KSBsbykgfCAoKGludDhfdCkgaGkgPDwgOCkpOwogCQkJaWYgKGkgJSAzKQogCQkJCXZhbCAqPSAtMTsKIAkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCArIGksIHZhbCk7CkBAIC0zODcsOSArMzg4LDExIEBACiAKICNpZmRlZiBUQUJMRVRfQVVUT0FESlVTVAogCQlmb3IgKGkgPSAwOyBpIDwgQUJTX01BWDsgaSsrKSB7Ci0JCQlpbnQgZGlmZiA9IGlucHV0X2Rldi0+YWJzbWF4W0FCU19YICsgaV0gLyAxMDsKLQkJCWlucHV0X2Rldi0+YWJzbWluW0FCU19YICsgaV0gKz0gZGlmZjsKLQkJCWlucHV0X2Rldi0+YWJzbWF4W0FCU19YICsgaV0gLT0gZGlmZjsKKwkJCWludCBkaWZmID0gaW5wdXRfYWJzX21heChpbnB1dF9kZXYsIEFCU19YICsgaSkgLyAxMDsKKwkJCWlucHV0X2Fic19zZXRfbWluKGlucHV0X2RldiwgQUJTX1ggKyBpLAorCQkJCWlucHV0X2Fic19taW4oaW5wdXRfZGV2LCBBQlNfWCArIGkpICsgZGlmZikKKwkJCVhYaW5wdXRfYWJzX3NldF9tYXgoaW5wdXRfZGV2LCBBQlNfWCArIGksCisJCQkJaW5wdXRfYWJzX21heChpbnB1dF9kZXYsIEFCU19YICsgaSkgLSBkaWZmKQogCQl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hZHhsMzR4LmMKaW5kZXggZTJjYTAxNy4uZGU1OTAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2FkeGwzNHguYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYWR4bDM0eC5jCkBAIC03MjQsNyArNzI0LDYgQEAKIAlwZGF0YSA9ICZhYy0+cGRhdGE7CiAKIAlhYy0+aW5wdXQgPSBpbnB1dF9kZXY7Ci0JYWMtPmRpc2FibGVkID0gdHJ1ZTsKIAlhYy0+ZGV2ID0gZGV2OwogCWFjLT5pcnEgPSBpcnE7CiAJYWMtPmJvcHMgPSBib3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKaW5kZXggOTk0NmQ3My4uOWRmZDZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCkBAIC0xMTUsNyArMTE1LDggQEAKIAlpbnB1dF9kZXYtPmV2ZW50ID0gaXhwNHh4X3Nwa3JfZXZlbnQ7CiAKIAllcnIgPSByZXF1ZXN0X2lycShJUlFfSVhQNFhYX1RJTUVSMiwgJml4cDR4eF9zcGtyX2ludGVycnVwdCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsICJpeHA0eHgtYmVlcGVyIiwgKHZvaWQgKikgZGV2LT5pZCk7CisJCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX05PX1NVU1BFTkQsICJpeHA0eHgtYmVlcGVyIiwKKwkJCSAgKHZvaWQgKikgZGV2LT5pZCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9kZXZpY2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBiNzFlYjU1Li5iYjUzZmQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwpAQCAtMzA0LDIxICszMDQsMjUgQEAKIAkJaWYgKCF0ZXN0X2JpdChjbnQsIGRldi0+YWJzYml0KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoZGV2LT5hYnNtYXhbY250XSA8PSBkZXYtPmFic21pbltjbnRdKSkgeworCQlpZiAoaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBjbnQpIDw9IGlucHV0X2Fic19nZXRfbWluKGRldiwgY250KSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkiJXM6IGludmFsaWQgYWJzWyUwMnhdIG1pbjolZCBtYXg6JWRcbiIsCiAJCQkJVUlOUFVUX05BTUUsIGNudCwKLQkJCQlkZXYtPmFic21pbltjbnRdLCBkZXYtPmFic21heFtjbnRdKTsKKwkJCQlpbnB1dF9hYnNfZ2V0X21pbihkZXYsIGNudCksCisJCQkJaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBjbnQpKTsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChkZXYtPmFic2ZsYXRbY250XSA+IChkZXYtPmFic21heFtjbnRdIC0gZGV2LT5hYnNtaW5bY250XSkpIHsKKwkJaWYgKGlucHV0X2Fic19nZXRfZmxhdChkZXYsIGNudCkgPgorCQkgICAgaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBjbnQpIC0gaW5wdXRfYWJzX2dldF9taW4oZGV2LCBjbnQpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSIlczogYWJzZmxhdFslMDJ4XSBvdXQgb2YgcmFuZ2U6ICVkICIKKwkJCQkiJXM6IGFic19mbGF0ICMlMDJ4IG91dCBvZiByYW5nZTogJWQgIgogCQkJCSIobWluOiVkL21heDolZClcbiIsCi0JCQkJVUlOUFVUX05BTUUsIGNudCwgZGV2LT5hYnNmbGF0W2NudF0sCi0JCQkJZGV2LT5hYnNtaW5bY250XSwgZGV2LT5hYnNtYXhbY250XSk7CisJCQkJVUlOUFVUX05BTUUsIGNudCwKKwkJCQlpbnB1dF9hYnNfZ2V0X2ZsYXQoZGV2LCBjbnQpLAorCQkJCWlucHV0X2Fic19nZXRfbWluKGRldiwgY250KSwKKwkJCQlpbnB1dF9hYnNfZ2V0X21heChkZXYsIGNudCkpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zNDMsNyArMzQ3LDcgQEAKIAlzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2CSp1c2VyX2RldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSpkZXY7CiAJY2hhcgkJCSpuYW1lOwotCWludAkJCXNpemU7CisJaW50CQkJaSwgc2l6ZTsKIAlpbnQJCQlyZXR2YWw7CiAKIAlpZiAoY291bnQgIT0gc2l6ZW9mKHN0cnVjdCB1aW5wdXRfdXNlcl9kZXYpKQpAQCAtMzg3LDExICszOTEsMTIgQEAKIAlkZXYtPmlkLnByb2R1Y3QJPSB1c2VyX2Rldi0+aWQucHJvZHVjdDsKIAlkZXYtPmlkLnZlcnNpb24JPSB1c2VyX2Rldi0+aWQudmVyc2lvbjsKIAotCXNpemUgPSBzaXplb2YoaW50KSAqIEFCU19DTlQ7Ci0JbWVtY3B5KGRldi0+YWJzbWF4LCB1c2VyX2Rldi0+YWJzbWF4LCBzaXplKTsKLQltZW1jcHkoZGV2LT5hYnNtaW4sIHVzZXJfZGV2LT5hYnNtaW4sIHNpemUpOwotCW1lbWNweShkZXYtPmFic2Z1enosIHVzZXJfZGV2LT5hYnNmdXp6LCBzaXplKTsKLQltZW1jcHkoZGV2LT5hYnNmbGF0LCB1c2VyX2Rldi0+YWJzZmxhdCwgc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IEFCU19DTlQ7IGkrKykgeworCQlpbnB1dF9hYnNfc2V0X21heChkZXYsIGksIHVzZXJfZGV2LT5hYnNtYXhbaV0pOworCQlpbnB1dF9hYnNfc2V0X21pbihkZXYsIGksIHVzZXJfZGV2LT5hYnNtaW5baV0pOworCQlpbnB1dF9hYnNfc2V0X2Z1enooZGV2LCBpLCB1c2VyX2Rldi0+YWJzZnV6eltpXSk7CisJCWlucHV0X2Fic19zZXRfZmxhdChkZXYsIGksIHVzZXJfZGV2LT5hYnNmbGF0W2ldKTsKKwl9CiAKIAkvKiBjaGVjayBpZiBhYnNtaW4vYWJzbWF4L2Fic2Z1enovYWJzZmxhdCBhcmUgZmlsbGVkIGFzCiAJICogdG9sZCBpbiBEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LXByb2dyYW1taW5nLnR4dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hcHBsZXRvdWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYwppbmRleCAwNWVkZDc1Li5hOWNmNzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FwcGxldG91Y2guYwpAQCAtMjA1LDggKzIwNSw4IEBACiAJYm9vbAkJCW92ZXJmbG93X3dhcm5lZDsKIAlpbnQJCQl4X29sZDsJCS8qIGxhc3QgcmVwb3J0ZWQgeC95LCAqLwogCWludAkJCXlfb2xkOwkJLyogdXNlZCBmb3Igc21vb3RoaW5nICovCi0JdTgJCQl4eV9jdXJbQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTXTsKLQl1OAkJCXh5X29sZFtBVFBfWFNFTlNPUlMgKyBBVFBfWVNFTlNPUlNdOworCXNpZ25lZCBjaGFyCQl4eV9jdXJbQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTXTsKKwlzaWduZWQgY2hhcgkJeHlfb2xkW0FUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SU107CiAJaW50CQkJeHlfYWNjW0FUUF9YU0VOU09SUyArIEFUUF9ZU0VOU09SU107CiAJaW50CQkJaWRsZWNvdW50OwkvKiBudW1iZXIgb2YgZW1wdHkgcGFja2V0cyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwpAQCAtNTMxLDcgKzUzMSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRQX1hTRU5TT1JTICsgQVRQX1lTRU5TT1JTOyBpKyspIHsKIAkJLyogYWNjdW11bGF0ZSB0aGUgY2hhbmdlICovCi0JCWludCBjaGFuZ2UgPSBkZXYtPnh5X29sZFtpXSAtIGRldi0+eHlfY3VyW2ldOworCQlzaWduZWQgY2hhciBjaGFuZ2UgPSBkZXYtPnh5X29sZFtpXSAtIGRldi0+eHlfY3VyW2ldOwogCQlkZXYtPnh5X2FjY1tpXSAtPSBjaGFuZ2U7CiAKIAkJLyogcHJldmVudCBkb3duIGRyaWZ0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKaW5kZXggYjE4ODYyYi4uNDgzMTEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYwpAQCAtMTg1LDcgKzE4NSw2IEBACiAJc3RydWN0IGVsYW50ZWNoX2RhdGEgKmV0ZCA9IHBzbW91c2UtPnByaXZhdGU7CiAJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OwogCWludCBmaW5nZXJzOwotCXN0YXRpYyBpbnQgb2xkX2ZpbmdlcnM7CiAKIAlpZiAoZXRkLT5md192ZXJzaW9uIDwgMHgwMjAwMDApIHsKIAkJLyoKQEAgLTIwMywxMCArMjAyLDEzIEBACiAJfQogCiAJaWYgKGV0ZC0+anVtcHlfY3Vyc29yKSB7Ci0JCS8qIERpc2NhcmQgcGFja2V0cyB0aGF0IGFyZSBsaWtlbHkgdG8gaGF2ZSBib2d1cyBjb29yZGluYXRlcyAqLwotCQlpZiAoZmluZ2VycyA+IG9sZF9maW5nZXJzKSB7CisJCWlmIChmaW5nZXJzICE9IDEpIHsKKwkJCWV0ZC0+c2luZ2xlX2Zpbmdlcl9yZXBvcnRzID0gMDsKKwkJfSBlbHNlIGlmIChldGQtPnNpbmdsZV9maW5nZXJfcmVwb3J0cyA8IDIpIHsKKwkJCS8qIERpc2NhcmQgZmlyc3QgMiByZXBvcnRzIG9mIG9uZSBmaW5nZXIsIGJvZ3VzICovCisJCQlldGQtPnNpbmdsZV9maW5nZXJfcmVwb3J0cysrOwogCQkJZWxhbnRlY2hfZGVidWcoImRpc2NhcmRpbmcgcGFja2V0XG4iKTsKLQkJCWdvdG8gZGlzY2FyZF9wYWNrZXRfdjE7CisJCQlyZXR1cm47CiAJCX0KIAl9CiAKQEAgLTIzOCw5ICsyNDAsNiBAQAogCX0KIAogCWlucHV0X3N5bmMoZGV2KTsKLQotIGRpc2NhcmRfcGFja2V0X3YxOgotCW9sZF9maW5nZXJzID0gZmluZ2VyczsKIH0KIAogLyoKQEAgLTI1OCw2ICsyNTcsMTQgQEAKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBmaW5nZXJzICE9IDApOwogCiAJc3dpdGNoIChmaW5nZXJzKSB7CisJY2FzZSAzOgorCQkvKgorCQkgKiBTYW1lIGFzIG9uZSBmaW5nZXIsIGV4Y2VwdCByZXBvcnQgb2YgbW9yZSB0aGFuIDMgZmluZ2VyczoKKwkJICogYnl0ZSAzOiAgbjQgIC4gICB3MSAgdzAgICAuICAgLiAgIC4gICAuCisJCSAqLworCQlpZiAocGFja2V0WzNdICYgMHg4MCkKKwkJCWZpbmdlcnMgPSA0OworCQkvKiBwYXNzIHRocm91Z2guLi4gKi8KIAljYXNlIDE6CiAJCS8qCiAJCSAqIGJ5dGUgMTogIC4gICAuICAgLiAgIC4gICAuICB4MTAgeDkgIHg4CkBAIC0zMTAsNiArMzE3LDcgQEAKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfRklOR0VSLCBmaW5nZXJzID09IDEpOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9ET1VCTEVUQVAsIGZpbmdlcnMgPT0gMik7CiAJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1RSSVBMRVRBUCwgZmluZ2VycyA9PSAzKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPT0xfUVVBRFRBUCwgZmluZ2VycyA9PSA0KTsKIAlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsIHBhY2tldFswXSAmIDB4MDEpOwogCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsIHBhY2tldFswXSAmIDB4MDIpOwogCkBAIC00NjcsNiArNDc1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDI6CisJCV9fc2V0X2JpdChCVE5fVE9PTF9RVUFEVEFQLCBkZXYtPmtleWJpdCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIEVUUF9YTUlOX1YyLCBFVFBfWE1BWF9WMiwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIEVUUF9ZTUlOX1YyLCBFVFBfWU1BWF9WMiwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX0hBVDBYLCBFVFBfMkZUX1hNSU4sIEVUUF8yRlRfWE1BWCwgMCwgMCk7CkBAIC03MzMsMTMgKzc0MiwxMyBAQAogCWV0ZC0+Y2FwYWJpbGl0aWVzID0gcGFyYW1bMF07CiAKIAkvKgotCSAqIFRoaXMgZmlybXdhcmUgc2VlbXMgdG8gc3VmZmVyIGZyb20gbWlzcmVwb3J0aW5nIGNvb3JkaW5hdGVzIHdoZW4KKwkgKiBUaGlzIGZpcm13YXJlIHN1ZmZlcnMgZnJvbSBtaXNyZXBvcnRpbmcgY29vcmRpbmF0ZXMgd2hlbgogCSAqIGEgdG91Y2ggYWN0aW9uIHN0YXJ0cyBjYXVzaW5nIHRoZSBtb3VzZSBjdXJzb3Igb3Igc2Nyb2xsZWQgcGFnZQogCSAqIHRvIGp1bXAuIEVuYWJsZSBhIHdvcmthcm91bmQuCiAJICovCi0JaWYgKGV0ZC0+ZndfdmVyc2lvbiA9PSAweDAyMDAyMikgewotCQlwcl9pbmZvKCJmaXJtd2FyZSB2ZXJzaW9uIDIuMC4zNCBkZXRlY3RlZCwgZW5hYmxpbmcganVtcHkgY3Vyc29yIHdvcmthcm91bmRcbiIpOwotCQlldGQtPmp1bXB5X2N1cnNvciA9IDE7CisJaWYgKGV0ZC0+ZndfdmVyc2lvbiA9PSAweDAyMDAyMiB8fCBldGQtPmZ3X3ZlcnNpb24gPT0gMHgwMjA2MDApIHsKKwkJcHJfaW5mbygiZmlybXdhcmUgdmVyc2lvbiAyLjAuMzQvMi42LjAgZGV0ZWN0ZWQsIGVuYWJsaW5nIGp1bXB5IGN1cnNvciB3b3JrYXJvdW5kXG4iKTsKKwkJZXRkLT5qdW1weV9jdXJzb3IgPSB0cnVlOwogCX0KIAogCWlmIChlbGFudGVjaF9zZXRfYWJzb2x1dGVfbW9kZShwc21vdXNlKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5oCmluZGV4IGFjNTdiZGUuLmFhNGFhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmgKQEAgLTEwMCwxMCArMTAwLDExIEBACiAJdW5zaWduZWQgY2hhciByZWdfMjY7CiAJdW5zaWduZWQgY2hhciBkZWJ1ZzsKIAl1bnNpZ25lZCBjaGFyIGNhcGFiaWxpdGllczsKLQl1bnNpZ25lZCBjaGFyIHBhcml0eWNoZWNrOwotCXVuc2lnbmVkIGNoYXIganVtcHlfY3Vyc29yOworCWJvb2wgcGFyaXR5Y2hlY2s7CisJYm9vbCBqdW1weV9jdXJzb3I7CiAJdW5zaWduZWQgY2hhciBod192ZXJzaW9uOwotCXVuc2lnbmVkIGludCAgZndfdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgZndfdmVyc2lvbjsKKwl1bnNpZ25lZCBpbnQgc2luZ2xlX2Zpbmdlcl9yZXBvcnRzOwogCXVuc2lnbmVkIGNoYXIgcGFyaXR5WzI1Nl07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMKaW5kZXggMzk0MWY5Ny4uN2IwMmI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wYzExMHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcGMxMTBwYWQuYwpAQCAtMTQ1LDggKzE0NSw4IEBACiAJcGMxMTBwYWRfZGV2LT5hYnNiaXRbMF0gPSBCSVRfTUFTSyhBQlNfWCkgfCBCSVRfTUFTSyhBQlNfWSk7CiAJcGMxMTBwYWRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCi0JcGMxMTBwYWRfZGV2LT5hYnNtYXhbQUJTX1hdID0gMHgxZmY7Ci0JcGMxMTBwYWRfZGV2LT5hYnNtYXhbQUJTX1ldID0gMHgwZmY7CisJaW5wdXRfYWJzX3NldF9tYXgocGMxMTBwYWRfZGV2LCBBQlNfWCwgMHgxZmYpOworCWlucHV0X2Fic19zZXRfbWF4KHBjMTEwcGFkX2RldiwgQUJTX1ksIDB4MGZmKTsKIAogCXBjMTEwcGFkX2Rldi0+b3BlbiA9IHBjMTEwcGFkX29wZW47CiAJcGMxMTBwYWRfZGV2LT5jbG9zZSA9IHBjMTEwcGFkX2Nsb3NlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggOGMzMjQ0MC4uOTZiNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC02MzUsOCArNjM1LDggQEAKIAlfX2NsZWFyX2JpdChSRUxfWCwgZGV2LT5yZWxiaXQpOwogCV9fY2xlYXJfYml0KFJFTF9ZLCBkZXYtPnJlbGJpdCk7CiAKLQlkZXYtPmFic3Jlc1tBQlNfWF0gPSBwcml2LT54X3JlczsKLQlkZXYtPmFic3Jlc1tBQlNfWV0gPSBwcml2LT55X3JlczsKKwlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19YLCBwcml2LT54X3Jlcyk7CisJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWSwgcHJpdi0+eV9yZXMpOwogCiAJaWYgKFNZTl9DQVBfQ0xJQ0tQQUQocHJpdi0+ZXh0X2NhcF8wYykpIHsKIAkJLyogQ2xpY2twYWRzIHJlcG9ydCBvbmx5IGxlZnQgYnV0dG9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZDhmNjhmNy4uODNjMjRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaWZkZWYgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYCiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2VuZGlmCkBAIC0xMzQsMTEgKzEzNSwxNCBAQAogCXN3aXRjaCAoY29kZSkgewogCiAJY2FzZSBBQlNfWDoKKwogCQlmeCgwKSA9IHZhbHVlOwogCQlpZiAobW91c2VkZXYtPnRvdWNoICYmIG1vdXNlZGV2LT5wa3RfY291bnQgPj0gMikgewotCQkJc2l6ZSA9IGRldi0+YWJzbWF4W0FCU19YXSAtIGRldi0+YWJzbWluW0FCU19YXTsKKwkJCXNpemUgPSBpbnB1dF9hYnNfZ2V0X21pbihkZXYsIEFCU19YKSAtCisJCQkJCWlucHV0X2Fic19nZXRfbWF4KGRldiwgQUJTX1gpOwogCQkJaWYgKHNpemUgPT0gMCkKIAkJCQlzaXplID0gMjU2ICogMjsKKwogCQkJdG1wID0gKCh2YWx1ZSAtIGZ4KDIpKSAqIDI1NiAqIEZSQUNUSU9OX0RFTk9NKSAvIHNpemU7CiAJCQl0bXAgKz0gbW91c2VkZXYtPmZyYWNfZHg7CiAJCQltb3VzZWRldi0+cGFja2V0LmR4ID0gdG1wIC8gRlJBQ1RJT05fREVOT007CkBAIC0xNTAsMTAgKzE1NCwxMiBAQAogCWNhc2UgQUJTX1k6CiAJCWZ5KDApID0gdmFsdWU7CiAJCWlmIChtb3VzZWRldi0+dG91Y2ggJiYgbW91c2VkZXYtPnBrdF9jb3VudCA+PSAyKSB7Ci0JCQkvKiB1c2UgWCBzaXplIHRvIGtlZXAgdGhlIHNhbWUgc2NhbGUgKi8KLQkJCXNpemUgPSBkZXYtPmFic21heFtBQlNfWF0gLSBkZXYtPmFic21pbltBQlNfWF07CisJCQkvKiB1c2UgWCBzaXplIGZvciBBQlNfWSB0byBrZWVwIHRoZSBzYW1lIHNjYWxlICovCisJCQlzaXplID0gaW5wdXRfYWJzX2dldF9taW4oZGV2LCBBQlNfWCkgLQorCQkJCQlpbnB1dF9hYnNfZ2V0X21heChkZXYsIEFCU19YKTsKIAkJCWlmIChzaXplID09IDApCiAJCQkJc2l6ZSA9IDI1NiAqIDI7CisKIAkJCXRtcCA9IC0oKHZhbHVlIC0gZnkoMikpICogMjU2ICogRlJBQ1RJT05fREVOT00pIC8gc2l6ZTsKIAkJCXRtcCArPSBtb3VzZWRldi0+ZnJhY19keTsKIAkJCW1vdXNlZGV2LT5wYWNrZXQuZHkgPSB0bXAgLyBGUkFDVElPTl9ERU5PTTsKQEAgLTE2NywzMyArMTczLDM1IEBACiBzdGF0aWMgdm9pZCBtb3VzZWRldl9hYnNfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgbW91c2VkZXYgKm1vdXNlZGV2LAogCQkJCXVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7Ci0JaW50IHNpemU7CisJaW50IG1pbiwgbWF4LCBzaXplOwogCiAJc3dpdGNoIChjb2RlKSB7CiAKIAljYXNlIEFCU19YOgotCQlzaXplID0gZGV2LT5hYnNtYXhbQUJTX1hdIC0gZGV2LT5hYnNtaW5bQUJTX1hdOworCQltaW4gPSBpbnB1dF9hYnNfZ2V0X21pbihkZXYsIEFCU19YKTsKKwkJbWF4ID0gaW5wdXRfYWJzX2dldF9tYXgoZGV2LCBBQlNfWCk7CisKKwkJc2l6ZSA9IG1heCAtIG1pbjsKIAkJaWYgKHNpemUgPT0gMCkKIAkJCXNpemUgPSB4cmVzID8gOiAxOwotCQlpZiAodmFsdWUgPiBkZXYtPmFic21heFtBQlNfWF0pCi0JCQl2YWx1ZSA9IGRldi0+YWJzbWF4W0FCU19YXTsKLQkJaWYgKHZhbHVlIDwgZGV2LT5hYnNtaW5bQUJTX1hdKQotCQkJdmFsdWUgPSBkZXYtPmFic21pbltBQlNfWF07Ci0JCW1vdXNlZGV2LT5wYWNrZXQueCA9Ci0JCQkoKHZhbHVlIC0gZGV2LT5hYnNtaW5bQUJTX1hdKSAqIHhyZXMpIC8gc2l6ZTsKKworCQljbGFtcCh2YWx1ZSwgbWluLCBtYXgpOworCisJCW1vdXNlZGV2LT5wYWNrZXQueCA9ICgodmFsdWUgLSBtaW4pICogeHJlcykgLyBzaXplOwogCQltb3VzZWRldi0+cGFja2V0LmFic19ldmVudCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBBQlNfWToKLQkJc2l6ZSA9IGRldi0+YWJzbWF4W0FCU19ZXSAtIGRldi0+YWJzbWluW0FCU19ZXTsKKwkJbWluID0gaW5wdXRfYWJzX2dldF9taW4oZGV2LCBBQlNfWSk7CisJCW1heCA9IGlucHV0X2Fic19nZXRfbWF4KGRldiwgQUJTX1kpOworCisJCXNpemUgPSBtYXggLSBtaW47CiAJCWlmIChzaXplID09IDApCiAJCQlzaXplID0geXJlcyA/IDogMTsKLQkJaWYgKHZhbHVlID4gZGV2LT5hYnNtYXhbQUJTX1ldKQotCQkJdmFsdWUgPSBkZXYtPmFic21heFtBQlNfWV07Ci0JCWlmICh2YWx1ZSA8IGRldi0+YWJzbWluW0FCU19ZXSkKLQkJCXZhbHVlID0gZGV2LT5hYnNtaW5bQUJTX1ldOwotCQltb3VzZWRldi0+cGFja2V0LnkgPSB5cmVzIC0KLQkJCSgodmFsdWUgLSBkZXYtPmFic21pbltBQlNfWV0pICogeXJlcykgLyBzaXplOworCisJCWNsYW1wKHZhbHVlLCBtaW4sIG1heCk7CisKKwkJbW91c2VkZXYtPnBhY2tldC55ID0geXJlcyAtICgodmFsdWUgLSBtaW4pICogeXJlcykgLyBzaXplOwogCQltb3VzZWRldi0+cGFja2V0LmFic19ldmVudCA9IDE7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCAyNThiOThiLi40NmU0YmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC02MSwxMCArNjEsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKG5vbG9vcCwgaTgwNDJfbm9sb29wLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9sb29wLCAiRGlzYWJsZSB0aGUgQVVYIExvb3BiYWNrIGNvbW1hbmQgd2hpbGUgcHJvYmluZyBmb3IgdGhlIEFVWCBwb3J0Iik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfYmxpbmtfZnJlcXVlbmN5ID0gNTAwOwotbW9kdWxlX3BhcmFtX25hbWVkKHBhbmljYmxpbmssIGk4MDQyX2JsaW5rX2ZyZXF1ZW5jeSwgdWludCwgMDYwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBhbmljYmxpbmssICJGcmVxdWVuY3kgd2l0aCB3aGljaCBrZXlib2FyZCBMRURzIHNob3VsZCBibGluayB3aGVuIGtlcm5lbCBwYW5pY3MiKTsKLQogI2lmZGVmIENPTkZJR19YODYKIHN0YXRpYyBib29sIGk4MDQyX2RyaXRlazsKIG1vZHVsZV9wYXJhbV9uYW1lZChkcml0ZWssIGk4MDQyX2RyaXRlaywgYm9vbCwgMCk7CkBAIC0xMDMwLDggKzEwMjYsOCBAQAogCiAKIC8qCi0gKiBpODA0Ml9wYW5pY19ibGluaygpIHdpbGwgZmxhc2ggdGhlIGtleWJvYXJkIExFRHMgYW5kIGlzIGNhbGxlZCB3aGVuCi0gKiBrZXJuZWwgcGFuaWNzLiBGbGFzaGluZyBMRURzIGlzIHVzZWZ1bCBmb3IgdXNlcnMgcnVubmluZyBYIHdobyBtYXkKKyAqIGk4MDQyX3BhbmljX2JsaW5rKCkgd2lsbCB0dXJuIHRoZSBrZXlib2FyZCBMRURzIG9uIG9yIG9mZiBhbmQgaXMgY2FsbGVkCisgKiB3aGVuIGtlcm5lbCBwYW5pY3MuIEZsYXNoaW5nIExFRHMgaXMgdXNlZnVsIGZvciB1c2VycyBydW5uaW5nIFggd2hvIG1heQogICogbm90IHNlZSB0aGUgY29uc29sZSBhbmQgd2lsbCBoZWxwIGRpc3Rpbmd1c2hpbmcgcGFuaWNzIGZyb20gInJlYWwiCiAgKiBsb2NrdXBzLgogICoKQEAgLTEwNDEsMjIgKzEwMzcsMTIgQEAKIAogI2RlZmluZSBERUxBWSBkbyB7IG1kZWxheSgxKTsgaWYgKCsrZGVsYXkgPiAxMCkgcmV0dXJuIGRlbGF5OyB9IHdoaWxlKDApCiAKLXN0YXRpYyBsb25nIGk4MDQyX3BhbmljX2JsaW5rKGxvbmcgY291bnQpCitzdGF0aWMgbG9uZyBpODA0Ml9wYW5pY19ibGluayhpbnQgc3RhdGUpCiB7CiAJbG9uZyBkZWxheSA9IDA7Ci0Jc3RhdGljIGxvbmcgbGFzdF9ibGluazsKLQlzdGF0aWMgY2hhciBsZWQ7CisJY2hhciBsZWQ7CiAKLQkvKgotCSAqIFdlIGV4cGVjdCBmcmVxdWVuY3kgdG8gYmUgYWJvdXQgMS8ycy4gS0RCIHVzZXMgYWJvdXQgMXMuCi0JICogTWFrZSBzdXJlIHRoZXkgYXJlIGRpZmZlcmVudC4KLQkgKi8KLQlpZiAoIWk4MDQyX2JsaW5rX2ZyZXF1ZW5jeSkKLQkJcmV0dXJuIDA7Ci0JaWYgKGNvdW50IC0gbGFzdF9ibGluayA8IGk4MDQyX2JsaW5rX2ZyZXF1ZW5jeSkKLQkJcmV0dXJuIDA7Ci0KLQlsZWQgXj0gMHgwMSB8IDB4MDQ7CisJbGVkID0gKHN0YXRlKSA/IDB4MDEgfCAweDA0IDogMDsKIAl3aGlsZSAoaTgwNDJfcmVhZF9zdGF0dXMoKSAmIEk4MDQyX1NUUl9JQkYpCiAJCURFTEFZOwogCWRiZygiJTAyeCAtPiBpODA0MiAocGFuaWMgYmxpbmspIiwgMHhlZCk7CkBAIC0xMDY5LDcgKzEwNTUsNiBAQAogCWRiZygiJTAyeCAtPiBpODA0MiAocGFuaWMgYmxpbmspIiwgbGVkKTsKIAlpODA0Ml93cml0ZV9kYXRhKGxlZCk7CiAJREVMQVk7Ci0JbGFzdF9ibGluayA9IGNvdW50OwogCXJldHVybiBkZWxheTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwppbmRleCA1MWI4MGIwLi41N2IyNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9haXB0ZWsuYwpAQCAtOTg3LDIwICs5ODcsMTcgQEAKIAkvKiBRdWVyeSBnZXRYZXh0ZW5zaW9uICovCiAJaWYgKChyZXQgPSBhaXB0ZWtfcXVlcnkoYWlwdGVrLCAweDAxLCAweDAwKSkgPCAwKQogCQlyZXR1cm4gcmV0OwotCWFpcHRlay0+aW5wdXRkZXYtPmFic21pbltBQlNfWF0gPSAwOwotCWFpcHRlay0+aW5wdXRkZXYtPmFic21heFtBQlNfWF0gPSByZXQgLSAxOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGFpcHRlay0+aW5wdXRkZXYsIEFCU19YLCAwLCByZXQgLSAxLCAwLCAwKTsKIAogCS8qIFF1ZXJ5IGdldFlleHRlbnNpb24gKi8KIAlpZiAoKHJldCA9IGFpcHRla19xdWVyeShhaXB0ZWssIDB4MDEsIDB4MDEpKSA8IDApCiAJCXJldHVybiByZXQ7Ci0JYWlwdGVrLT5pbnB1dGRldi0+YWJzbWluW0FCU19ZXSA9IDA7Ci0JYWlwdGVrLT5pbnB1dGRldi0+YWJzbWF4W0FCU19ZXSA9IHJldCAtIDE7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoYWlwdGVrLT5pbnB1dGRldiwgQUJTX1ksIDAsIHJldCAtIDEsIDAsIDApOwogCiAJLyogUXVlcnkgZ2V0UHJlc3N1cmVMZXZlbHMgKi8KIAlpZiAoKHJldCA9IGFpcHRla19xdWVyeShhaXB0ZWssIDB4MDgsIDB4MDApKSA8IDApCiAJCXJldHVybiByZXQ7Ci0JYWlwdGVrLT5pbnB1dGRldi0+YWJzbWluW0FCU19QUkVTU1VSRV0gPSAwOwotCWFpcHRlay0+aW5wdXRkZXYtPmFic21heFtBQlNfUFJFU1NVUkVdID0gcmV0IC0gMTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhaXB0ZWstPmlucHV0ZGV2LCBBQlNfUFJFU1NVUkUsIDAsIHJldCAtIDEsIDAsIDApOwogCiAJLyogRGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UgYXJlIGluIGFic29sdXRlIG9yIHJlbGF0aXZlIG1vZGUsIHdlIHdpbGwKIAkgKiBkbyBhIHN3aXRjaFRvVGFibGV0KGFic29sdXRlKSBvciBzd2l0Y2hUb01vdXNlKHJlbGF0aXZlKSBjb21tYW5kLgpAQCAtMTA1NCw4ICsxMDUxLDggQEAKIAlzdHJ1Y3QgYWlwdGVrICphaXB0ZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkeCVkXG4iLAotCQkJYWlwdGVrLT5pbnB1dGRldi0+YWJzbWF4W0FCU19YXSArIDEsCi0JCQlhaXB0ZWstPmlucHV0ZGV2LT5hYnNtYXhbQUJTX1ldICsgMSk7CisJCQlpbnB1dF9hYnNfZ2V0X21heChhaXB0ZWstPmlucHV0ZGV2LCBBQlNfWCkgKyAxLAorCQkJaW5wdXRfYWJzX2dldF9tYXgoYWlwdGVrLT5pbnB1dGRldiwgQUJTX1kpICsgMSk7CiB9CiAKIC8qIFRoZXNlIHN0cnVjdHMgZGVmaW5lIHRoZSBzeXNmcyBmaWxlcywgcGFyYW0gIzEgaXMgdGhlIG5hbWUgb2YgdGhlCkBAIC0xODQzLDcgKzE4NDAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwZWVkcyk7ICsraSkgewogCQlhaXB0ZWstPmN1clNldHRpbmcucHJvZ3JhbW1hYmxlRGVsYXkgPSBzcGVlZHNbaV07CiAJCSh2b2lkKWFpcHRla19wcm9ncmFtX3RhYmxldChhaXB0ZWspOwotCQlpZiAoYWlwdGVrLT5pbnB1dGRldi0+YWJzbWF4W0FCU19YXSA+IDApIHsKKwkJaWYgKGlucHV0X2Fic19nZXRfbWF4KGFpcHRlay0+aW5wdXRkZXYsIEFCU19YKSA+IDApIHsKIAkJCWRldl9pbmZvKCZpbnRmLT5kZXYsCiAJCQkJICJBaXB0ZWsgdXNpbmcgJWQgbXMgcHJvZ3JhbW1pbmcgc3BlZWRcbiIsCiAJCQkJIGFpcHRlay0+Y3VyU2V0dGluZy5wcm9ncmFtbWFibGVEZWxheSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV93YWMuYyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCmluZGV4IGNlMGI0NjAuLjQwZDc3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jCkBAIC02ODcsMTAgKzY4NywxMCBAQAogCSAqIHByb3RvY29sLgogCSAqLwogCWlmICh3YWNvbS0+bGFzdF9maW5nZXIgIT0gZmluZ2VyKSB7Ci0JCWlmICh4ID09IGlucHV0LT5hYnNbQUJTX1hdKQorCQlpZiAoeCA9PSBpbnB1dF9hYnNfZ2V0X3ZhbChpbnB1dCwgQUJTX1gpKQogCQkJeCsrOwogCi0JCWlmICh5ID09IGlucHV0LT5hYnNbQUJTX1ldKQorCQlpZiAoeSA9PSBpbnB1dF9hYnNfZ2V0X3ZhbChpbnB1dCwgQUJTX1kpKQogCQkJeSsrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jeThjdG1nMTEwX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2N5OGN0bWcxMTBfdHMuYwppbmRleCA0ZWI3ZGYwLi41ZWMwOTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2N5OGN0bWcxMTBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2N5OGN0bWcxMTBfdHMuYwpAQCAtNzUsNyArNzUsNyBAQAogCQl1bnNpZ25lZCBjaGFyIGxlbiwgdW5zaWduZWQgY2hhciAqdmFsdWUpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRzYy0+Y2xpZW50OwotCXVuc2lnbmVkIGludCByZXQ7CisJaW50IHJldDsKIAl1bnNpZ25lZCBjaGFyIGkyY19kYXRhWzZdOwogCiAJQlVHX09OKGxlbiA+IDUpOwpAQCAtODYsNyArODYsNyBAQAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGkyY19kYXRhLCBsZW4gKyAxKTsKIAlpZiAocmV0ICE9IDEpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpMmMgd3JpdGUgZGF0YSBjbWQgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIHJldCA/IHJldCA6IC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05Niw3ICs5Niw3IEBACiAJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgbGVuLCB1bnNpZ25lZCBjaGFyIGNtZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdHNjLT5jbGllbnQ7Ci0JdW5zaWduZWQgaW50IHJldDsKKwlpbnQgcmV0OwogCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKIAkJLyogZmlyc3Qgd3JpdGUgc2xhdmUgcG9zaXRpb24gdG8gaTJjIGRldmljZXMgKi8KIAkJeyBjbGllbnQtPmFkZHIsIDAsIDEsICZjbWQgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDBkZWQzNjQuLjcwN2Q5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMTkxNCwxMSArMTkxNCwxMyBAQAogCSAqIFRoZSBuZXh0IGNvbW1hbmQgd2lsbCByZW9wZW4gdGhlIEFUIGNoYW5uZWwgYXV0b21hdGljYWxseS4KIAkgKi8KIAlpZiAoY2ItPmxlbiA9PSAzICYmICFtZW1jbXAoY2ItPmJ1ZiwgIisrKyIsIDMpKSB7Ci0JCWtmcmVlKGNiKTsKIAkJcmMgPSByZXFfc3VibWl0KGNzLT5iY3MsIEhEX0NMT1NFX0FUQ0hBTk5FTCwgMCwgQkFTX1RJTUVPVVQpOwogCQlpZiAoY2ItPndha2VfdGFza2xldCkKIAkJCXRhc2tsZXRfc2NoZWR1bGUoY2ItPndha2VfdGFza2xldCk7Ci0JCXJldHVybiByYyA8IDAgPyByYyA6IGNiLT5sZW47CisJCWlmICghcmMpCisJCQlyYyA9IGNiLT5sZW47CisJCWtmcmVlKGNiKTsKKwkJcmV0dXJuIHJjOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+Y21kbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jCmluZGV4IGU1ZWEzNDQuLmJjYzE3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jYXBpLmMKQEAgLTEwNTIsNiArMTA1Miw3IEBACiAJZG8gewogCQlpZiAoYmNhcC0+YmNuZXh0ID09IGFwKSB7CiAJCQliY2FwLT5iY25leHQgPSBiY2FwLT5iY25leHQtPmJjbmV4dDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+YXBsb2NrLCBmbGFncyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJYmNhcCA9IGJjYXAtPmJjbmV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2F2bV9jcy5jCmluZGV4IGY0MTBkMGUuLjA5YjE3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1fY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtNzYsOSArNzUsOCBAQAogewogCiAgICAgLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIHBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworICAgIHBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAogICAgIC8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpAQCAtMTIwLDEzICsxMTgsOSBAQAogCWlmIChjZi0+aW8ubndpbiA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmLT5pby53aW5bMF0ubGVuOwotCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOwotCXByaW50ayhLRVJOX0lORk8gImF2bV9jczogdGVzdGluZyBpL28gJSN4LSUjeFxuIiwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MStwX2Rldi0+aW8uTnVtUG9ydHMxLTEpOwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGNmLT5pby53aW5bMF0ubGVuOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgYXZtY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtMTkyLDkgKzE4NiwxMCBAQAogCWRlZmF1bHQ6CiAgICAgICAgIGNhc2UgQVZNX0NBUkRUWVBFX0IxOiBhZGRjYXJkID0gYjFwY21jaWFfYWRkY2FyZF9iMTsgYnJlYWs7CiAgICAgfQotICAgIGlmICgoaSA9ICgqYWRkY2FyZCkobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpKSA8IDApIHsKLQkgICAgZGV2X2VycigmbGluay0+ZGV2LCAiYXZtX2NzOiBmYWlsZWQgdG8gYWRkIEFWTS1Db250cm9sbGVyIGF0IGkvbyAlI3gsIGlycSAlZFxuIiwKLQkJICAgIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKyAgICBpZiAoKGkgPSAoKmFkZGNhcmQpKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgbGluay0+aXJxKSkgPCAwKSB7CisJICAgIGRldl9lcnIoJmxpbmstPmRldiwKKwkJICAgICJhdm1fY3M6IGZhaWxlZCB0byBhZGQgQVZNLUNvbnRyb2xsZXIgYXQgaS9vICUjeCwgaXJxICVkXG4iLAorCQkgICAgKHVuc2lnbmVkIGludCkgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogCSAgICBhdm1jc19yZWxlYXNlKGxpbmspOwogCSAgICByZXR1cm4gLUVOT0RFVjsKICAgICB9CkBAIC0yMTIsNyArMjA3LDcgQEAKIAogc3RhdGljIHZvaWQgYXZtY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQliMXBjbWNpYV9kZWxjYXJkKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKwliMXBjbWNpYV9kZWxjYXJkKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgbGluay0+aXJxKTsKIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9IC8qIGF2bWNzX3JlbGVhc2UgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2F2bWExX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwppbmRleCBhODBhNzYxLi45NDI2M2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtYTFfY3MuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTc5LDExICs3OCwxMCBAQAogICAgIGRldl9kYmcoJnBfZGV2LT5kZXYsICJhdm1hMWNzX2F0dGFjaCgpXG4iKTsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIHBfZGV2LT5pby5OdW1Qb3J0czEgPSAxNjsKLSAgICBwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLSAgICBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMTY7Ci0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMTY7CisgICAgcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKQEAgLTEyNywxMyArMTI1LDEwIEBACiAJaWYgKGNmLT5pby5ud2luIDw9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2YtPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiYXZtYTFfY3M6IHRlc3RpbmcgaS9vICUjeC0lI3hcbiIsCi0JICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDEsCi0JICAgICAgIHBfZGV2LT5pby5CYXNlUG9ydDErcF9kZXYtPmlvLk51bVBvcnRzMS0xKTsKLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZi0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSA1OworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIApAQCAtMTgxLDE2ICsxNzYsMTggQEAKICAgICB9CiAKICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImF2bWExX2NzOiBjaGVja2luZyBhdCBpL28gJSN4LCBpcnEgJWRcbiIsCi0JCQkJbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworCQkodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsIGxpbmstPmlycSk7CiAKICAgICBpY2FyZC5wYXJhWzBdID0gbGluay0+aXJxOwotICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICAgICBpY2FyZC5wcm90b2NvbCA9IGlzZG5wcm90OwogICAgIGljYXJkLnR5cCA9IElTRE5fQ1RZUEVfQTFfUENNQ0lBOwogICAgIAogICAgIGkgPSBoaXNheF9pbml0X3BjbWNpYShsaW5rLCAmYnVzeSwgJmljYXJkKTsKICAgICBpZiAoaSA8IDApIHsKLSAgICAJcHJpbnRrKEtFUk5fRVJSICJhdm1hMV9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgQVZNIEExIFBDTUNJQSAlZCBhdCBpL28gJSN4XG4iLCBpLCBsaW5rLT5pby5CYXNlUG9ydDEpOworCXByaW50ayhLRVJOX0VSUiAiYXZtYTFfY3M6IGZhaWxlZCB0byBpbml0aWFsaXplIEFWTSBBMSAiCisJCQkiUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsIGksCisJCQkodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpOwogCWF2bWExY3NfcmVsZWFzZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2FfY3MuYwppbmRleCAyMTg5MjdlLi5iM2MwOGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9jcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX2NzLmMKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTI3LDkgKzEyNiw4IEBACiAgICAgICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKICAgICAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCiAgICAgKi8KLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKQEAgLTE3NCwxNiArMTcyLDE4IEBACiB7CiAJaW50IGo7CiAKKwlwX2Rldi0+aW9fbGluZXMgPSAzOworCiAJaWYgKChjZi0+aW8ubndpbiA+IDApICYmIGNmLT5pby53aW5bMF0uYmFzZSkgewogCQlwcmludGsoS0VSTl9JTkZPICIoZWxzYV9jczogbG9va3MgbGlrZSB0aGUgOTYgbW9kZWwpXG4iKTsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiKGVsc2FfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CiAJCWZvciAoaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGo7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBqOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0yMTUsMjMgKzIxNSwyMSBAQAogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEpOwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0gICAgICAgIHByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMyKQotICAgICAgICBwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0gICAgICAgICAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMV0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycTsKLSAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgaWNhcmQucHJvdG9jb2wgPSBwcm90b2NvbDsKICAgICBpY2FyZC50eXAgPSBJU0ROX0NUWVBFX0VMU0FfUENNQ0lBOwogICAgIAogICAgIGkgPSBoaXNheF9pbml0X3BjbWNpYShsaW5rLCAmKCgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+YnVzeSksICZpY2FyZCk7CiAgICAgaWYgKGkgPCAwKSB7Ci0gICAgCXByaW50ayhLRVJOX0VSUiAiZWxzYV9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgRWxzYSBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKLSAgICAJCWksIGxpbmstPmlvLkJhc2VQb3J0MSk7CisJcHJpbnRrKEtFUk5fRVJSICJlbHNhX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBFbHNhICIKKwkJIlBDTUNJQSAlZCB3aXRoICVwUlxuIiwgaSwgbGluay0+cmVzb3VyY2VbMF0pOwogICAgIAllbHNhX2NzX3JlbGVhc2UobGluayk7CiAgICAgfSBlbHNlCiAgICAgCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+Y2FyZG5yID0gaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXJfY3MuYwppbmRleCAxZjRmZWFhLi5hMDI0MTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyX2NzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlcl9jcy5jCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEzMCw5ICsxMjksOCBAQAogICAgIC8qIGZyb20gb2xkIHNlZGxfY3MgCiAgICAgKi8KICAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcgKi8KLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA4OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAzOworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA4OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0xNzMsOCArMTcxLDYgQEAKIAkJCQkgIHVuc2lnbmVkIGludCB2Y2MsCiAJCQkJICB2b2lkICpwcml2X2RhdGEpCiB7Ci0Jd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7Ci0KIAlpZiAoY2ZnLT5pbmRleCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMjAyLDUyICsxOTgsMjUgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlwX2Rldi0+aW9fbGluZXMgPSAzOworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAgTm93IHNldCB1cCBhIGNvbW1vbiBtZW1vcnkgd2luZG93LCBpZiBuZWVkZWQuICBUaGVyZSBpcyByb29tCi0JICBpbiB0aGUgc3RydWN0IHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlIGZvciBvbmUgbWVtb3J5IHdpbmRvdyBoYW5kbGUsCi0JICBidXQgaWYgdGhlIGJhc2UgYWRkcmVzc2VzIG5lZWQgdG8gYmUgc2F2ZWQsIG9yIGlmIG11bHRpcGxlCi0JICB3aW5kb3dzIGFyZSBuZWVkZWQsIHRoZSBpbmZvIHNob3VsZCBnbyBpbiB0aGUgcHJpdmF0ZSBkYXRhCi0JICBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGV2aWNlLgotCi0JICBOb3RlIHRoYXQgdGhlIG1lbW9yeSB3aW5kb3cgYmFzZSBpcyBhIHBoeXNpY2FsIGFkZHJlc3MsIGFuZAotCSAgbmVlZHMgdG8gYmUgbWFwcGVkIHRvIHZpcnR1YWwgc3BhY2Ugd2l0aCBpb3JlbWFwKCkgYmVmb3JlIGl0Ci0JICBpcyB1c2VkLgotCSovCi0JaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQtPm1lbS5ud2luID4gMCkpIHsKLQkJY2lzdHBsX21lbV90ICptZW0gPSAoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC0+bWVtOwotCQltZW1yZXFfdCBtYXA7Ci0JCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7Ci0JCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCQltYXAuUGFnZSA9IDA7Ci0JCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU1LDE2ICsyMjQsMTEgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2VkbGJhdWVyX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICB3aW5fcmVxX3QgKnJlcTsKICAgICBpbnQgcmV0OwogICAgIElzZG5DYXJkX3QgIGljYXJkOwogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAic2VkbGJhdWVyX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAKLSAgICByZXEgPSBremFsbG9jKHNpemVvZih3aW5fcmVxX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXJlcSkKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0KICAgICAvKgogICAgICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKICAgICAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKQEAgLTI3Nyw3ICsyNDEsNyBAQAogICAgICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycwogICAgICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgogICAgICovCi0gICAgcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIHJlcSk7CisgICAgcmV0ID0gcGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIHNlZGxiYXVlcl9jb25maWdfY2hlY2ssIE5VTEwpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCkBAIC0yOTcsMjcgKzI2MSwyMiBAQAogCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcC8xMCwgbGluay0+Y29uZi5WcHAlMTApOwogICAgIGlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKLSAgICBpZiAobGluay0+d2luKQotCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLT5CYXNlLAotCSAgICAgICByZXEtPkJhc2UrcmVxLT5TaXplLTEpOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMV0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAgICAgcHJpbnRrKCJcbiIpOwogCiAgICAgaWNhcmQucGFyYVswXSA9IGxpbmstPmlycTsKLSAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGljYXJkLnBhcmFbMV0gPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgaWNhcmQucHJvdG9jb2wgPSBwcm90b2NvbDsKICAgICBpY2FyZC50eXAgPSBJU0ROX0NUWVBFX1NFRExCQVVFUl9QQ01DSUE7CiAgICAgCiAgICAgcmV0ID0gaGlzYXhfaW5pdF9wY21jaWEobGluaywgCiAJCQkgICAgJigoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5zdG9wKSwgJmljYXJkKTsKICAgICBpZiAocmV0IDwgMCkgewotCXByaW50ayhLRVJOX0VSUiAic2VkbGJhdWVyX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBTRURMQkFVRVIgUENNQ0lBICVkIGF0IGkvbyAlI3hcbiIsCi0JCXJldCwgbGluay0+aW8uQmFzZVBvcnQxKTsKKwlwcmludGsoS0VSTl9FUlIgInNlZGxiYXVlcl9jczogZmFpbGVkIHRvIGluaXRpYWxpemUgU0VETEJBVUVSIFBDTUNJQSAlZCB3aXRoICVwUlxuIiwKKwkJcmV0LCBsaW5rLT5yZXNvdXJjZVswXSk7CiAgICAgCXNlZGxiYXVlcl9yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzX2NzLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwppbmRleCA1NzcxOTU1Li43Mjk2MTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNfY3MuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xMDcsOSArMTA2LDggQEAKICAgICAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQogICAgICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KICAgICAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDk2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSA5NjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0xNTQsMTYgKzE1MiwxOCBAQAogewogCWludCBqOwogCisJcF9kZXYtPmlvX2xpbmVzID0gNTsKKwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiBjZi0+aW8ud2luWzBdLmJhc2UpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiKHRlbGVzX2NzOiBsb29rcyBsaWtlIHRoZSA5NiBtb2RlbClcbiIpOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2YtPmlvLndpblswXS5iYXNlOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICIodGVsZXNfY3M6IGxvb2tzIGxpa2UgdGhlIDk3IG1vZGVsKVxuIik7CiAJCWZvciAoaiA9IDB4MmYwOyBqID4gMHgxMDA7IGogLT0gMHgxMCkgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGo7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBqOworCQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0xOTUsMjMgKzE5NSwyMSBAQAogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKICAgICBpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCSAgICBwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLSAgICBpZiAobGluay0+aW8uTnVtUG9ydHMxKQotICAgICAgICBwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLSAgICAgICAgICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLSAgICAgICAgcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotICAgICAgICAgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0pCisJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzFdKQorCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogICAgIHByaW50aygiXG4iKTsKIAogICAgIGljYXJkLnBhcmFbMF0gPSBsaW5rLT5pcnE7Ci0gICAgaWNhcmQucGFyYVsxXSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBpY2FyZC5wYXJhWzFdID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGljYXJkLnByb3RvY29sID0gcHJvdG9jb2w7CiAgICAgaWNhcmQudHlwID0gSVNETl9DVFlQRV9URUxFU1BDTUNJQTsKICAgICAKICAgICBpID0gaGlzYXhfaW5pdF9wY21jaWEobGluaywgJigoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmJ1c3kpLCAmaWNhcmQpOwogICAgIGlmIChpIDwgMCkgewogICAgIAlwcmludGsoS0VSTl9FUlIgInRlbGVzX2NzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBUZWxlcyBQQ01DSUEgJWQgYXQgaS9vICUjeFxuIiwKLSAgICAJCWksIGxpbmstPmlvLkJhc2VQb3J0MSk7CisJCQlpLCAodW5zaWduZWQgaW50KSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpOwogICAgIAl0ZWxlc19jc19yZWxlYXNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jIGIvZHJpdmVycy9pc2RuL3NjL2lvY3RsLmMKaW5kZXggNDNjNWRjMzUuLjRjZmRiZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9pb2N0bC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJcHJfZGVidWcoIiVzOiBTQ0lPR0VUU1BJRDogaW9jdGwgcmVjZWl2ZWRcbiIsCiAJCQkJc2NfYWRhcHRlcltjYXJkXS0+ZGV2aWNlbmFtZSk7CiAKLQkJc3BpZCA9IGttYWxsb2MoU0NJT0NfU1BJRFNJWkUsIEdGUF9LRVJORUwpOworCQlzcGlkID0ga3phbGxvYyhTQ0lPQ19TUElEU0laRSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc3BpZCkgewogCQkJa2ZyZWUocmN2bXNnKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCQlrZnJlZShyY3Ztc2cpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQotCQlzdHJjcHkoc3BpZCwgcmN2bXNnLT5tc2dfZGF0YS5ieXRlX2FycmF5KTsKKwkJc3RybGNweShzcGlkLCByY3Ztc2ctPm1zZ19kYXRhLmJ5dGVfYXJyYXksIFNDSU9DX1NQSURTSVpFKTsKIAogCQkvKgogCQkgKiBQYWNrYWdlIHRoZSBzd2l0Y2ggdHlwZSBhbmQgc2VuZCB0byB1c2VyIHNwYWNlCkBAIC0yNjYsMTIgKzI2NiwxMiBAQAogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCi0JCWRuID0ga21hbGxvYyhTQ0lPQ19ETlNJWkUsIEdGUF9LRVJORUwpOworCQlkbiA9IGt6YWxsb2MoU0NJT0NfRE5TSVpFLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkbikgewogCQkJa2ZyZWUocmN2bXNnKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXN0cmNweShkbiwgcmN2bXNnLT5tc2dfZGF0YS5ieXRlX2FycmF5KTsKKwkJc3RybGNweShkbiwgcmN2bXNnLT5tc2dfZGF0YS5ieXRlX2FycmF5LCBTQ0lPQ19ETlNJWkUpOwogCQlrZnJlZShyY3Ztc2cpOwogCiAJCS8qCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkJcHJfZGVidWcoIiVzOiBTQ0lPU1RBVDogaW9jdGwgcmVjZWl2ZWRcbiIsCiAJCQkJc2NfYWRhcHRlcltjYXJkXS0+ZGV2aWNlbmFtZSk7CiAKLQkJYmkgPSBrbWFsbG9jIChzaXplb2YoYm9hcmRJbmZvKSwgR0ZQX0tFUk5FTCk7CisJCWJpID0ga3phbGxvYyhzaXplb2YoYm9hcmRJbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYmkpIHsKIAkJCWtmcmVlKHJjdm1zZyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWJkMjgwMi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMKaW5kZXggNWRjZGY5ZC4uMTlkYzRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtYmQyODAyLmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCXJldHVybiBjb3VudDsJCQkJCQkJXAogfQkJCQkJCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBiZDI4MDJfcmVnIyNyZWdfYWRkciMjX2F0dHIgPSB7CQlcCi0JLmF0dHIgPSB7Lm5hbWUgPSByZWdfbmFtZSwgLm1vZGUgPSAwNjQ0LCAub3duZXIgPSBUSElTX01PRFVMRX0sCVwKKwkuYXR0ciA9IHsubmFtZSA9IHJlZ19uYW1lLCAubW9kZSA9IDA2NDR9LAkJCVwKIAkuc3RvcmUgPSBiZDI4MDJfc3RvcmVfcmVnIyNyZWdfYWRkciwJCQkJXAogfTsKIApAQCAtNDgyLDcgKzQ4Miw2IEBACiAJLmF0dHIgPSB7CiAJCS5uYW1lID0gImFkdmFuY2VkX2NvbmZpZ3VyYXRpb24iLAogCQkubW9kZSA9IDA2NDQsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFCiAJfSwKIAkuc2hvdyA9IGJkMjgwMl9zaG93X2Fkdl9jb25mLAogCS5zdG9yZSA9IGJkMjgwMl9zdG9yZV9hZHZfY29uZiwKQEAgLTUxOSw3ICs1MTgsNiBAQAogCS5hdHRyID0gewkJCQkJCQlcCiAJCS5uYW1lID0gbmFtZV9zdHIsCQkJCQlcCiAJCS5tb2RlID0gMDY0NCwJCQkJCQlcCi0JCS5vd25lciA9IFRISVNfTU9EVUxFCQkJCQlcCiAJfSwJCQkJCQkJCVwKIAkuc2hvdyA9IGJkMjgwMl9zaG93XyMjYXR0cl9uYW1lLAkJCQlcCiAJLnN0b3JlID0gYmQyODAyX3N0b3JlXyMjYXR0cl9uYW1lLAkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggM2Q0ZmMwZi4uMzViYzI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtNDAwLDExICs0MDAsMTIgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCBtYXAgaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCS8qIFdlIHNldCBJUlFGX1RJTUVSIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaW50ZXJydXB0IHRvIGJlIGRpc2FibGVkCi0JICogYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyIHN1c3BlbmQsIHdlIGNvbnRyb2wgb3VyIG93biBkaXNhYmxpbmcKLQkgKiBmb3IgdGhhdCBvbmUKKwkvKiBXZSBzZXQgSVJRRl9OT19TVVNQRU5EIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaW50ZXJydXB0CisJICogdG8gYmUgZGlzYWJsZWQgYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyIHN1c3BlbmQsIHdlCisJICogY29udHJvbCBvdXIgb3duIGRpc2FibGluZyBmb3IgdGhhdCBvbmUKIAkgKi8KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgSVJRRl9USU1FUiwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CisJaWYgKHJlcXVlc3RfaXJxKGlycSwgdmlhX3BtdV9pbnRlcnJ1cHQsIElSUUZfTk9fU1VTUEVORCwKKwkJCSJWSUEtUE1VIiwgKHZvaWQgKikwKSkgewogCQlwcmludGsoS0VSTl9FUlIgInZpYS1wbXU6IGNhbid0IHJlcXVlc3QgaXJxICVkXG4iLCBpcnEpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL0tjb25maWcgYi9kcml2ZXJzL21kL0tjb25maWcKaW5kZXggNGE2ZmVhYy4uYmYxYTk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWQvS2NvbmZpZwpAQCAtMTIxLDcgKzEyMSw3IEBACiBjb25maWcgTURfUkFJRDQ1NgogCXRyaXN0YXRlICJSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlIgogCWRlcGVuZHMgb24gQkxLX0RFVl9NRAotCXNlbGVjdCBNRF9SQUlENl9QUQorCXNlbGVjdCBSQUlENl9QUQogCXNlbGVjdCBBU1lOQ19NRU1DUFkKIAlzZWxlY3QgQVNZTkNfWE9SCiAJc2VsZWN0IEFTWU5DX1BRCkBAIC0xNjUsMjIgKzE2NSw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBNRF9SQUlENl9QUQotCXRyaXN0YXRlCi0KLWNvbmZpZyBBU1lOQ19SQUlENl9URVNUCi0JdHJpc3RhdGUgIlNlbGYgdGVzdCBmb3IgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgcmFpZDYgcmVjb3ZlcnkiCi0JZGVwZW5kcyBvbiBNRF9SQUlENl9QUQotCXNlbGVjdCBBU1lOQ19SQUlENl9SRUNPVgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSBvbmUtc2hvdCBzZWxmIHRlc3QgdGhhdCBwZXJtdXRlcyB0aHJvdWdoIHRoZQotCSAgcmVjb3Zlcnkgb2YgYWxsIHRoZSBwb3NzaWJsZSB0d28gZGlzayBmYWlsdXJlIHNjZW5hcmlvcyBmb3IgYQotCSAgTi1kaXNrIGFycmF5LiAgUmVjb3ZlcnkgaXMgcGVyZm9ybWVkIHdpdGggdGhlIGFzeW5jaHJvbm91cwotCSAgcmFpZDYgcmVjb3Zlcnkgcm91dGluZXMsIGFuZCB3aWxsIG9wdGlvbmFsbHkgdXNlIGFuIG9mZmxvYWQKLQkgIGVuZ2luZSBpZiBvbmUgaXMgYXZhaWxhYmxlLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgTURfTVVMVElQQVRICiAJdHJpc3RhdGUgIk11bHRpcGF0aCBJL08gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEJMS19ERVZfTUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IGUzNTVlN2YuLjVlM2FhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtMTIsMTMgKzEyLDYgQEAKIAkJKz0gZG0tbG9nLXVzZXJzcGFjZS1iYXNlLm8gZG0tbG9nLXVzZXJzcGFjZS10cmFuc2Zlci5vCiBtZC1tb2QteQkrPSBtZC5vIGJpdG1hcC5vCiByYWlkNDU2LXkJKz0gcmFpZDUubwotcmFpZDZfcHEteQkrPSByYWlkNmFsZ29zLm8gcmFpZDZyZWNvdi5vIHJhaWQ2dGFibGVzLm8gXAotCQkgICByYWlkNmludDEubyByYWlkNmludDIubyByYWlkNmludDQubyBcCi0JCSAgIHJhaWQ2aW50OC5vIHJhaWQ2aW50MTYubyByYWlkNmludDMyLm8gXAotCQkgICByYWlkNmFsdGl2ZWMxLm8gcmFpZDZhbHRpdmVjMi5vIHJhaWQ2YWx0aXZlYzQubyBcCi0JCSAgIHJhaWQ2YWx0aXZlYzgubyBcCi0JCSAgIHJhaWQ2bW14Lm8gcmFpZDZzc2UxLm8gcmFpZDZzc2UyLm8KLWhvc3Rwcm9ncy15CSs9IG1rdGFibGVzCiAKICMgTm90ZTogbGluayBvcmRlciBpcyBpbXBvcnRhbnQuICBBbGwgcmFpZCBwZXJzb25hbGl0aWVzCiAjIGFuZCBtdXN0IGNvbWUgYmVmb3JlIG1kLm8sIGFzIHRoZXkgZWFjaCBpbml0aWFsaXNlIApAQCAtMjksNyArMjIsNiBAQAogb2JqLSQoQ09ORklHX01EX1JBSUQwKQkJKz0gcmFpZDAubwogb2JqLSQoQ09ORklHX01EX1JBSUQxKQkJKz0gcmFpZDEubwogb2JqLSQoQ09ORklHX01EX1JBSUQxMCkJCSs9IHJhaWQxMC5vCi1vYmotJChDT05GSUdfTURfUkFJRDZfUFEpCSs9IHJhaWQ2X3BxLm8KIG9iai0kKENPTkZJR19NRF9SQUlENDU2KQkrPSByYWlkNDU2Lm8KIG9iai0kKENPTkZJR19NRF9NVUxUSVBBVEgpCSs9IG11bHRpcGF0aC5vCiBvYmotJChDT05GSUdfTURfRkFVTFRZKQkJKz0gZmF1bHR5Lm8KQEAgLTQ1LDc1ICszNyw2IEBACiBvYmotJChDT05GSUdfRE1fTE9HX1VTRVJTUEFDRSkJKz0gZG0tbG9nLXVzZXJzcGFjZS5vCiBvYmotJChDT05GSUdfRE1fWkVSTykJCSs9IGRtLXplcm8ubwogCi1xdWlldF9jbWRfdW5yb2xsID0gVU5ST0xMICAkQAotICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCi0gICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKLQotaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKLWFsdGl2ZWNfZmxhZ3MgOj0gLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMKLWVuZGlmCi0KIGlmZXEgKCQoQ09ORklHX0RNX1VFVkVOVCkseSkKIGRtLW1vZC1vYmpzCQkJKz0gZG0tdWV2ZW50Lm8KIGVuZGlmCi0KLXRhcmdldHMgKz0gcmFpZDZpbnQxLmMKLSQob2JqKS9yYWlkNmludDEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKLQotdGFyZ2V0cyArPSByYWlkNmludDIuYwotJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQotCi10YXJnZXRzICs9IHJhaWQ2aW50NC5jCi0kKG9iaikvcmFpZDZpbnQ0LmM6ICAgVU5ST0xMIDo9IDQKLSQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCi0KLXRhcmdldHMgKz0gcmFpZDZpbnQ4LmMKLSQob2JqKS9yYWlkNmludDguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKLQotdGFyZ2V0cyArPSByYWlkNmludDE2LmMKLSQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKLSQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCi0KLXRhcmdldHMgKz0gcmFpZDZpbnQzMi5jCi0kKG9iaikvcmFpZDZpbnQzMi5jOiAgVU5ST0xMIDo9IDMyCi0kKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQotCi1DRkxBR1NfcmFpZDZhbHRpdmVjMS5vICs9ICQoYWx0aXZlY19mbGFncykKLXRhcmdldHMgKz0gcmFpZDZhbHRpdmVjMS5jCi0kKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgIFVOUk9MTCA6PSAxCi0kKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCi0KLUNGTEFHU19yYWlkNmFsdGl2ZWMyLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQotdGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMyLmMKLSQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgVU5ST0xMIDo9IDIKLSQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKLQotQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCi10YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYwotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQotCi1DRkxBR1NfcmFpZDZhbHRpdmVjOC5vICs9ICQoYWx0aXZlY19mbGFncykKLXRhcmdldHMgKz0gcmFpZDZhbHRpdmVjOC5jCi0kKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgIFVOUk9MTCA6PSA4Ci0kKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKLQkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCi0KLXF1aWV0X2NtZF9ta3RhYmxlID0gVEFCTEUgICAkQAotICAgICAgY21kX21rdGFibGUgPSAkKG9iaikvbWt0YWJsZXMgPiAkQCB8fCAoIHJtIC1mICRAICYmIGV4aXQgMSApCi0KLXRhcmdldHMgKz0gcmFpZDZ0YWJsZXMuYwotJChvYmopL3JhaWQ2dGFibGVzLmM6ICQob2JqKS9ta3RhYmxlcyBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLG1rdGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCAxNzQyNDM1Li4xYmExZTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqIFN0aWxsIHRvIGRvOgogICoKICAqIGZsdXNoIGFmdGVyIHBlcmNlbnQgc2V0IHJhdGhlciB0aGFuIGp1c3QgdGltZSBiYXNlZC4gKG1heWJlIGJvdGgpLgotICogd2FpdCBpZiBjb3VudCBnZXRzIHRvbyBoaWdoLCB3YWtlIHdoZW4gaXQgZHJvcHMgdG8gaGFsZi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC0zMCw2ICsyOSw3IEBACiAjaW5jbHVkZSAibWQuaCIKICNpbmNsdWRlICJiaXRtYXAuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2RtLWRpcnR5LWxvZy5oPgogLyogZGVidWcgbWFjcm9zICovCiAKICNkZWZpbmUgREVCVUcgMApAQCAtNTEsOSArNTEsNiBAQAogI2RlZmluZSBJTkpFQ1RfRkFUQUxfRkFVTFRfMyAwIC8qIHVuZGVmICovCiAjZW5kaWYKIAotLy8jZGVmaW5lIERQUklOVEsgUFJJTlRLIC8qIHNldCB0aGlzIE5VTEwgdG8gYXZvaWQgdmVyYm9zZSBkZWJ1ZyBvdXRwdXQgKi8KLSNkZWZpbmUgRFBSSU5USyh4Li4uKSBkbyB7IH0gd2hpbGUoMCkKLQogI2lmbmRlZiBQUklOVEsKICMgIGlmIERFQlVHID4gMAogIyAgICBkZWZpbmUgUFJJTlRLKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCkBAIC02MiwxMiArNTksMTEgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBjaGFyICogYm1uYW1lKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3N0YXRpYyBpbmxpbmUgY2hhciAqYm1uYW1lKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKIHsKIAlyZXR1cm4gYml0bWFwLT5tZGRldiA/IG1kbmFtZShiaXRtYXAtPm1kZGV2KSA6ICJtZFgiOwogfQogCi0KIC8qCiAgKiBqdXN0IGEgcGxhY2Vob2xkZXIgLSBjYWxscyBrbWFsbG9jIGZvciBiaXRtYXAgcGFnZXMKICAqLwpAQCAtNzgsNyArNzQsNyBAQAogI2lmZGVmIElOSkVDVF9GQVVMVFNfMQogCXBhZ2UgPSBOVUxMOwogI2Vsc2UKLQlwYWdlID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9OT0lPKTsKKwlwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9OT0lPKTsKICNlbmRpZgogCWlmICghcGFnZSkKIAkJcHJpbnRrKCIlczogYml0bWFwX2FsbG9jX3BhZ2UgRkFJTEVEXG4iLCBibW5hbWUoYml0bWFwKSk7CkBAIC0xMDcsNyArMTAzLDggQEAKICAqIGlmIHdlIGZpbmQgb3VyIHBhZ2UsIHdlIGluY3JlbWVudCB0aGUgcGFnZSdzIHJlZmNvdW50IHNvIHRoYXQgaXQgc3RheXMKICAqIGFsbG9jYXRlZCB3aGlsZSB3ZSdyZSB1c2luZyBpdAogICovCi1zdGF0aWMgaW50IGJpdG1hcF9jaGVja3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLCB1bnNpZ25lZCBsb25nIHBhZ2UsIGludCBjcmVhdGUpCitzdGF0aWMgaW50IGJpdG1hcF9jaGVja3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgcGFnZSwgaW50IGNyZWF0ZSkKIF9fcmVsZWFzZXMoYml0bWFwLT5sb2NrKQogX19hY3F1aXJlcyhiaXRtYXAtPmxvY2spCiB7CkBAIC0xMjEsNyArMTE4LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0KIAlpZiAoYml0bWFwLT5icFtwYWdlXS5oaWphY2tlZCkgLyogaXQncyBoaWphY2tlZCwgZG9uJ3QgdHJ5IHRvIGFsbG9jICovCiAJCXJldHVybiAwOwogCkBAIC0xMzEsNDMgKzEyNywzNCBAQAogCWlmICghY3JlYXRlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKLQogCS8qIHRoaXMgcGFnZSBoYXMgbm90IGJlZW4gYWxsb2NhdGVkIHlldCAqLwogCi0JaWYgKChtYXBwYWdlID0gYml0bWFwX2FsbG9jX3BhZ2UoYml0bWFwKSkgPT0gTlVMTCkgeworCXNwaW5fdW5sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKKwltYXBwYWdlID0gYml0bWFwX2FsbG9jX3BhZ2UoYml0bWFwKTsKKwlzcGluX2xvY2tfaXJxKCZiaXRtYXAtPmxvY2spOworCisJaWYgKG1hcHBhZ2UgPT0gTlVMTCkgewogCQlQUklOVEsoIiVzOiBiaXRtYXAgbWFwIHBhZ2UgYWxsb2NhdGlvbiBmYWlsZWQsIGhpamFja2luZ1xuIiwKIAkJCWJtbmFtZShiaXRtYXApKTsKIAkJLyogZmFpbGVkIC0gc2V0IHRoZSBoaWphY2tlZCBmbGFnIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUKIAkJICogcG9pbnRlciBhcyBhIGNvdW50ZXIgKi8KLQkJc3Bpbl9sb2NrX2lycSgmYml0bWFwLT5sb2NrKTsKIAkJaWYgKCFiaXRtYXAtPmJwW3BhZ2VdLm1hcCkKIAkJCWJpdG1hcC0+YnBbcGFnZV0uaGlqYWNrZWQgPSAxOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBnb3QgYSBwYWdlICovCi0KLQlzcGluX2xvY2tfaXJxKCZiaXRtYXAtPmxvY2spOwotCi0JLyogcmVjaGVjayB0aGUgcGFnZSAqLwotCi0JaWYgKGJpdG1hcC0+YnBbcGFnZV0ubWFwIHx8IGJpdG1hcC0+YnBbcGFnZV0uaGlqYWNrZWQpIHsKKwl9IGVsc2UgaWYgKGJpdG1hcC0+YnBbcGFnZV0ubWFwIHx8CisJCSAgIGJpdG1hcC0+YnBbcGFnZV0uaGlqYWNrZWQpIHsKIAkJLyogc29tZWJvZHkgYmVhdCB1cyB0byBnZXR0aW5nIHRoZSBwYWdlICovCiAJCWJpdG1hcF9mcmVlX3BhZ2UoYml0bWFwLCBtYXBwYWdlKTsKIAkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKworCQkvKiBubyBwYWdlIHdhcyBpbiBwbGFjZSBhbmQgd2UgaGF2ZSBvbmUsIHNvIGluc3RhbGwgaXQgKi8KKworCQliaXRtYXAtPmJwW3BhZ2VdLm1hcCA9IG1hcHBhZ2U7CisJCWJpdG1hcC0+bWlzc2luZ19wYWdlcy0tOwogCX0KLQotCS8qIG5vIHBhZ2Ugd2FzIGluIHBsYWNlIGFuZCB3ZSBoYXZlIG9uZSwgc28gaW5zdGFsbCBpdCAqLwotCi0JbWVtc2V0KG1hcHBhZ2UsIDAsIFBBR0VfU0laRSk7Ci0JYml0bWFwLT5icFtwYWdlXS5tYXAgPSBtYXBwYWdlOwotCWJpdG1hcC0+bWlzc2luZ19wYWdlcy0tOwotb3V0OgogCXJldHVybiAwOwogfQogCi0KIC8qIGlmIHBhZ2UgaXMgY29tcGxldGVseSBlbXB0eSwgcHV0IGl0IGJhY2sgb24gdGhlIGZyZWUgbGlzdCwgb3IgZGVhbGxvYyBpdCAqLwogLyogaWYgcGFnZSB3YXMgaGlqYWNrZWQsIHVubWFyayB0aGUgZmxhZyBzbyBpdCBtaWdodCBnZXQgYWxsb2NlZCBuZXh0IHRpbWUgKi8KIC8qIE5vdGU6IGxvY2sgc2hvdWxkIGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgKi8KQEAgLTE4MywyNiArMTcwLDE1IEBACiAJaWYgKGJpdG1hcC0+YnBbcGFnZV0uaGlqYWNrZWQpIHsgLyogcGFnZSB3YXMgaGlqYWNrZWQsIHVuZG8gdGhpcyBub3cgKi8KIAkJYml0bWFwLT5icFtwYWdlXS5oaWphY2tlZCA9IDA7CiAJCWJpdG1hcC0+YnBbcGFnZV0ubWFwID0gTlVMTDsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCS8qIG5vcm1hbCBjYXNlLCBmcmVlIHRoZSBwYWdlICovCisJCXB0ciA9IGJpdG1hcC0+YnBbcGFnZV0ubWFwOworCQliaXRtYXAtPmJwW3BhZ2VdLm1hcCA9IE5VTEw7CisJCWJpdG1hcC0+bWlzc2luZ19wYWdlcysrOworCQliaXRtYXBfZnJlZV9wYWdlKGJpdG1hcCwgcHRyKTsKIAl9Ci0KLQkvKiBub3JtYWwgY2FzZSwgZnJlZSB0aGUgcGFnZSAqLwotCi0jaWYgMAotLyogYWN0dWFsbHkgLi4uIGxldCdzIG5vdC4gIFdlIHdpbGwgcHJvYmFibHkgbmVlZCB0aGUgcGFnZSBhZ2FpbiBleGFjdGx5IHdoZW4KLSAqIG1lbW9yeSBpcyB0aWdodCBhbmQgd2UgYXJlIGZsdXNpbmcgdG8gZGlzawotICovCi0JcmV0dXJuOwotI2Vsc2UKLQlwdHIgPSBiaXRtYXAtPmJwW3BhZ2VdLm1hcDsKLQliaXRtYXAtPmJwW3BhZ2VdLm1hcCA9IE5VTEw7Ci0JYml0bWFwLT5taXNzaW5nX3BhZ2VzKys7Ci0JYml0bWFwX2ZyZWVfcGFnZShiaXRtYXAsIHB0cik7Ci0JcmV0dXJuOwotI2VuZGlmCiB9CiAKLQogLyoKICAqIGJpdG1hcCBmaWxlIGhhbmRsaW5nIC0gcmVhZCBhbmQgd3JpdGUgdGhlIGJpdG1hcCBmaWxlIGFuZCBpdHMgc3VwZXJibG9jawogICovCkBAIC0yMjAsMTEgKzE5NiwxNCBAQAogCiAJbWRrX3JkZXZfdCAqcmRldjsKIAlzZWN0b3JfdCB0YXJnZXQ7CisJaW50IGRpZF9hbGxvYyA9IDA7CiAKLQlpZiAoIXBhZ2UpCisJaWYgKCFwYWdlKSB7CiAJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlkaWRfYWxsb2MgPSAxOworCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJaWYgKCEgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKQpAQCAtMjQyLDYgKzIyMSw4IEBACiAJCQlyZXR1cm4gcGFnZTsKIAkJfQogCX0KKwlpZiAoZGlkX2FsbG9jKQorCQlwdXRfcGFnZShwYWdlKTsKIAlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAogfQpAQCAtMjg2LDQ5ICsyNjcsNTEgQEAKIAltZGRldl90ICptZGRldiA9IGJpdG1hcC0+bWRkZXY7CiAKIAl3aGlsZSAoKHJkZXYgPSBuZXh0X2FjdGl2ZV9yZGV2KHJkZXYsIG1kZGV2KSkgIT0gTlVMTCkgewotCQkJaW50IHNpemUgPSBQQUdFX1NJWkU7Ci0JCQlsb2ZmX3Qgb2Zmc2V0ID0gbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldDsKLQkJCWlmIChwYWdlLT5pbmRleCA9PSBiaXRtYXAtPmZpbGVfcGFnZXMtMSkKLQkJCQlzaXplID0gcm91bmR1cChiaXRtYXAtPmxhc3RfcGFnZV9zaXplLAotCQkJCQkgICAgICAgYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUocmRldi0+YmRldikpOwotCQkJLyogSnVzdCBtYWtlIHN1cmUgd2UgYXJlbid0IGNvcnJ1cHRpbmcgZGF0YSBvcgotCQkJICogbWV0YWRhdGEKLQkJCSAqLwotCQkJaWYgKG1kZGV2LT5leHRlcm5hbCkgewotCQkJCS8qIEJpdG1hcCBjb3VsZCBiZSBhbnl3aGVyZS4gKi8KLQkJCQlpZiAocmRldi0+c2Jfc3RhcnQgKyBvZmZzZXQgKyAocGFnZS0+aW5kZXggKihQQUdFX1NJWkUvNTEyKSkgPgotCQkJCSAgICByZGV2LT5kYXRhX29mZnNldCAmJgotCQkJCSAgICByZGV2LT5zYl9zdGFydCArIG9mZnNldCA8IAotCQkJCSAgICByZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5kZXZfc2VjdG9ycyArCi0JCQkJICAgIChQQUdFX1NJWkUvNTEyKSkKLQkJCQkJZ290byBiYWRfYWxpZ25tZW50OwotCQkJfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7Ci0JCQkJLyogREFUQSAgQklUTUFQIE1FVEFEQVRBICAqLwotCQkJCWlmIChvZmZzZXQKLQkJCQkgICAgKyAobG9uZykocGFnZS0+aW5kZXggKiAoUEFHRV9TSVpFLzUxMikpCi0JCQkJICAgICsgc2l6ZS81MTIgPiAwKQotCQkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBtZXRhZGF0YSAqLwotCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7Ci0JCQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPmRldl9zZWN0b3JzCi0JCQkJICAgID4gcmRldi0+c2Jfc3RhcnQgKyBvZmZzZXQpCi0JCQkJCS8qIGRhdGEgcnVucyBpbiB0byBiaXRtYXAgKi8KLQkJCQkJZ290byBiYWRfYWxpZ25tZW50OwotCQkJfSBlbHNlIGlmIChyZGV2LT5zYl9zdGFydCA8IHJkZXYtPmRhdGFfb2Zmc2V0KSB7Ci0JCQkJLyogTUVUQURBVEEgQklUTUFQIERBVEEgKi8KLQkJCQlpZiAocmRldi0+c2Jfc3RhcnQKLQkJCQkgICAgKyBvZmZzZXQKLQkJCQkgICAgKyBwYWdlLT5pbmRleCooUEFHRV9TSVpFLzUxMikgKyBzaXplLzUxMgotCQkJCSAgICA+IHJkZXYtPmRhdGFfb2Zmc2V0KQotCQkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBkYXRhICovCi0JCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogREFUQSBNRVRBREFUQSBCSVRNQVAgLSBubyBwcm9ibGVtcyAqLwotCQkJfQotCQkJbWRfc3VwZXJfd3JpdGUobWRkZXYsIHJkZXYsCi0JCQkJICAgICAgIHJkZXYtPnNiX3N0YXJ0ICsgb2Zmc2V0Ci0JCQkJICAgICAgICsgcGFnZS0+aW5kZXggKiAoUEFHRV9TSVpFLzUxMiksCi0JCQkJICAgICAgIHNpemUsCi0JCQkJICAgICAgIHBhZ2UpOworCQlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKwkJbG9mZl90IG9mZnNldCA9IG1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQ7CisJCWlmIChwYWdlLT5pbmRleCA9PSBiaXRtYXAtPmZpbGVfcGFnZXMtMSkKKwkJCXNpemUgPSByb3VuZHVwKGJpdG1hcC0+bGFzdF9wYWdlX3NpemUsCisJCQkJICAgICAgIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHJkZXYtPmJkZXYpKTsKKwkJLyogSnVzdCBtYWtlIHN1cmUgd2UgYXJlbid0IGNvcnJ1cHRpbmcgZGF0YSBvcgorCQkgKiBtZXRhZGF0YQorCQkgKi8KKwkJaWYgKG1kZGV2LT5leHRlcm5hbCkgeworCQkJLyogQml0bWFwIGNvdWxkIGJlIGFueXdoZXJlLiAqLworCQkJaWYgKHJkZXYtPnNiX3N0YXJ0ICsgb2Zmc2V0ICsgKHBhZ2UtPmluZGV4CisJCQkJCQkgICAgICAgKiAoUEFHRV9TSVpFLzUxMikpCisJCQkgICAgPiByZGV2LT5kYXRhX29mZnNldAorCQkJICAgICYmCisJCQkgICAgcmRldi0+c2Jfc3RhcnQgKyBvZmZzZXQKKwkJCSAgICA8IChyZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5kZXZfc2VjdG9ycworCQkJICAgICArIChQQUdFX1NJWkUvNTEyKSkpCisJCQkJZ290byBiYWRfYWxpZ25tZW50OworCQl9IGVsc2UgaWYgKG9mZnNldCA8IDApIHsKKwkJCS8qIERBVEEgIEJJVE1BUCBNRVRBREFUQSAgKi8KKwkJCWlmIChvZmZzZXQKKwkJCSAgICArIChsb25nKShwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSkKKwkJCSAgICArIHNpemUvNTEyID4gMCkKKwkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBtZXRhZGF0YSAqLworCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKKwkJCWlmIChyZGV2LT5kYXRhX29mZnNldCArIG1kZGV2LT5kZXZfc2VjdG9ycworCQkJICAgID4gcmRldi0+c2Jfc3RhcnQgKyBvZmZzZXQpCisJCQkJLyogZGF0YSBydW5zIGluIHRvIGJpdG1hcCAqLworCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKKwkJfSBlbHNlIGlmIChyZGV2LT5zYl9zdGFydCA8IHJkZXYtPmRhdGFfb2Zmc2V0KSB7CisJCQkvKiBNRVRBREFUQSBCSVRNQVAgREFUQSAqLworCQkJaWYgKHJkZXYtPnNiX3N0YXJ0CisJCQkgICAgKyBvZmZzZXQKKwkJCSAgICArIHBhZ2UtPmluZGV4KihQQUdFX1NJWkUvNTEyKSArIHNpemUvNTEyCisJCQkgICAgPiByZGV2LT5kYXRhX29mZnNldCkKKwkJCQkvKiBiaXRtYXAgcnVucyBpbiB0byBkYXRhICovCisJCQkJZ290byBiYWRfYWxpZ25tZW50OworCQl9IGVsc2UgeworCQkJLyogREFUQSBNRVRBREFUQSBCSVRNQVAgLSBubyBwcm9ibGVtcyAqLworCQl9CisJCW1kX3N1cGVyX3dyaXRlKG1kZGV2LCByZGV2LAorCQkJICAgICAgIHJkZXYtPnNiX3N0YXJ0ICsgb2Zmc2V0CisJCQkgICAgICAgKyBwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUvNTEyKSwKKwkJCSAgICAgICBzaXplLAorCQkJICAgICAgIHBhZ2UpOwogCX0KIAogCWlmICh3YWl0KQpAQCAtMzY0LDEwICszNDcsOSBAQAogCQkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CiAJCX0KIAotCQlpZiAod2FpdCkgeworCQlpZiAod2FpdCkKIAkJCXdhaXRfZXZlbnQoYml0bWFwLT53cml0ZV93YWl0LAogCQkJCSAgIGF0b21pY19yZWFkKCZiaXRtYXAtPnBlbmRpbmdfd3JpdGVzKT09MCk7Ci0JCX0KIAl9CiAJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfV1JJVEVfRVJST1IpCiAJCWJpdG1hcF9maWxlX2tpY2soYml0bWFwKTsKQEAgLTQyNCw3ICs0MDYsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc2VjdG9yX3QgYmxvY2s7CiAKLQlQUklOVEsoInJlYWQgYml0bWFwIGZpbGUgKCVkQiBAICVMdSlcbiIsIChpbnQpUEFHRV9TSVpFLAorCVBSSU5USygicmVhZCBiaXRtYXAgZmlsZSAoJWRCIEAgJWxsdSlcbiIsIChpbnQpUEFHRV9TSVpFLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbmRleCA8PCBQQUdFX1NISUZUKTsKIAogCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwpAQCAtNDc4LDcgKzQ2MCw3IEBACiAJfQogb3V0OgogCWlmIChJU19FUlIocGFnZSkpCi0JCXByaW50ayhLRVJOX0FMRVJUICJtZDogYml0bWFwIHJlYWQgZXJyb3I6ICglZEIgQCAlTHUpOiAlbGRcbiIsCisJCXByaW50ayhLRVJOX0FMRVJUICJtZDogYml0bWFwIHJlYWQgZXJyb3I6ICglZEIgQCAlbGx1KTogJWxkXG4iLAogCQkJKGludClQQUdFX1NJWkUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWluZGV4IDw8IFBBR0VfU0hJRlQsCiAJCQlQVFJfRVJSKHBhZ2UpKTsKQEAgLTY2NCwxMSArNjQ2LDE0IEBACiAJc2IgPSBrbWFwX2F0b21pYyhiaXRtYXAtPnNiX3BhZ2UsIEtNX1VTRVIwKTsKIAlvbGQgPSBsZTMyX3RvX2NwdShzYi0+c3RhdGUpICYgYml0czsKIAlzd2l0Y2ggKG9wKSB7Ci0JCWNhc2UgTUFTS19TRVQ6IHNiLT5zdGF0ZSB8PSBjcHVfdG9fbGUzMihiaXRzKTsKLQkJCQlicmVhazsKLQkJY2FzZSBNQVNLX1VOU0VUOiBzYi0+c3RhdGUgJj0gY3B1X3RvX2xlMzIofmJpdHMpOwotCQkJCWJyZWFrOwotCQlkZWZhdWx0OiBCVUcoKTsKKwljYXNlIE1BU0tfU0VUOgorCQlzYi0+c3RhdGUgfD0gY3B1X3RvX2xlMzIoYml0cyk7CisJCWJyZWFrOworCWNhc2UgTUFTS19VTlNFVDoKKwkJc2ItPnN0YXRlICY9IGNwdV90b19sZTMyKH5iaXRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CiAJfQogCWt1bm1hcF9hdG9taWMoc2IsIEtNX1VTRVIwKTsKIAlyZXR1cm4gb2xkOwpAQCAtNzEwLDEyICs2OTUsMTQgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmZpbGVtYXBfZ2V0X3BhZ2Uoc3RydWN0IGJpdG1hcCAqYml0bWFwLAogCQkJCQl1bnNpZ25lZCBsb25nIGNodW5rKQogewotCWlmIChmaWxlX3BhZ2VfaW5kZXgoYml0bWFwLCBjaHVuaykgPj0gYml0bWFwLT5maWxlX3BhZ2VzKSByZXR1cm4gTlVMTDsKKwlpZiAoYml0bWFwLT5maWxlbWFwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmIChmaWxlX3BhZ2VfaW5kZXgoYml0bWFwLCBjaHVuaykgPj0gYml0bWFwLT5maWxlX3BhZ2VzKQorCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gYml0bWFwLT5maWxlbWFwW2ZpbGVfcGFnZV9pbmRleChiaXRtYXAsIGNodW5rKQogCQkJICAgICAgIC0gZmlsZV9wYWdlX2luZGV4KGJpdG1hcCwgMCldOwogfQogCi0KIHN0YXRpYyB2b2lkIGJpdG1hcF9maWxlX3VubWFwKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKIHsKIAlzdHJ1Y3QgcGFnZSAqKm1hcCwgKnNiX3BhZ2U7CkBAIC03NjYsNyArNzUzLDYgQEAKIAl9CiB9CiAKLQogLyoKICAqIGJpdG1hcF9maWxlX2tpY2sgLSBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgbWFuaXB1bGF0aW5nIHRoZSBiaXRtYXAgZmlsZQogICogdGhlbiBpdCBpcyBubyBsb25nZXIgcmVsaWFibGUsIHNvIHdlIHN0b3AgdXNpbmcgaXQgYW5kIHdlIG1hcmsgdGhlIGZpbGUKQEAgLTc4NSw3ICs3NzEsNiBAQAogCQkJCXB0ciA9IGRfcGF0aCgmYml0bWFwLT5maWxlLT5mX3BhdGgsIHBhdGgsCiAJCQkJCSAgICAgUEFHRV9TSVpFKTsKIAotCiAJCQlwcmludGsoS0VSTl9BTEVSVAogCQkJICAgICAgIiVzOiBraWNraW5nIGZhaWxlZCBiaXRtYXAgZmlsZSAlcyBmcm9tIGFycmF5IVxuIiwKIAkJCSAgICAgIGJtbmFtZShiaXRtYXApLCBJU19FUlIocHRyKSA/ICIiIDogcHRyKTsKQEAgLTgwMywyNyArNzg4LDM2IEBACiB9CiAKIGVudW0gYml0bWFwX3BhZ2VfYXR0ciB7Ci0JQklUTUFQX1BBR0VfRElSVFkgPSAwLCAvLyB0aGVyZSBhcmUgc2V0IGJpdHMgdGhhdCBuZWVkIHRvIGJlIHN5bmNlZAotCUJJVE1BUF9QQUdFX0NMRUFOID0gMSwgLy8gdGhlcmUgYXJlIGJpdHMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGNsZWFyZWQKLQlCSVRNQVBfUEFHRV9ORUVEV1JJVEU9MiwgLy8gdGhlcmUgYXJlIGNsZWFyZWQgYml0cyB0aGF0IG5lZWQgdG8gYmUgc3luY2VkCisJQklUTUFQX1BBR0VfRElSVFkgPSAwLCAgICAgLyogdGhlcmUgYXJlIHNldCBiaXRzIHRoYXQgbmVlZCB0byBiZSBzeW5jZWQgKi8KKwlCSVRNQVBfUEFHRV9DTEVBTiA9IDEsICAgICAvKiB0aGVyZSBhcmUgYml0cyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgY2xlYXJlZCAqLworCUJJVE1BUF9QQUdFX05FRURXUklURSA9IDIsIC8qIHRoZXJlIGFyZSBjbGVhcmVkIGJpdHMgdGhhdCBuZWVkIHRvIGJlIHN5bmNlZCAqLwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX2F0dHIoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQllbnVtIGJpdG1hcF9wYWdlX2F0dHIgYXR0cikKIHsKLQlfX3NldF9iaXQoKHBhZ2UtPmluZGV4PDwyKSArIGF0dHIsIGJpdG1hcC0+ZmlsZW1hcF9hdHRyKTsKKwlpZiAocGFnZSkKKwkJX19zZXRfYml0KChwYWdlLT5pbmRleDw8MikgKyBhdHRyLCBiaXRtYXAtPmZpbGVtYXBfYXR0cik7CisJZWxzZQorCQlfX3NldF9iaXQoYXR0ciwgJmJpdG1hcC0+bG9nYXR0cnMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZV9hdHRyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJZW51bSBiaXRtYXBfcGFnZV9hdHRyIGF0dHIpCiB7Ci0JX19jbGVhcl9iaXQoKHBhZ2UtPmluZGV4PDwyKSArIGF0dHIsIGJpdG1hcC0+ZmlsZW1hcF9hdHRyKTsKKwlpZiAocGFnZSkKKwkJX19jbGVhcl9iaXQoKHBhZ2UtPmluZGV4PDwyKSArIGF0dHIsIGJpdG1hcC0+ZmlsZW1hcF9hdHRyKTsKKwllbHNlCisJCV9fY2xlYXJfYml0KGF0dHIsICZiaXRtYXAtPmxvZ2F0dHJzKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRlc3RfcGFnZV9hdHRyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJCSAgIGVudW0gYml0bWFwX3BhZ2VfYXR0ciBhdHRyKQogewotCXJldHVybiB0ZXN0X2JpdCgocGFnZS0+aW5kZXg8PDIpICsgYXR0ciwgYml0bWFwLT5maWxlbWFwX2F0dHIpOworCWlmIChwYWdlKQorCQlyZXR1cm4gdGVzdF9iaXQoKHBhZ2UtPmluZGV4PDwyKSArIGF0dHIsIGJpdG1hcC0+ZmlsZW1hcF9hdHRyKTsKKwllbHNlCisJCXJldHVybiB0ZXN0X2JpdChhdHRyLCAmYml0bWFwLT5sb2dhdHRycyk7CiB9CiAKIC8qCkBAIC04MzYsMzAgKzgzMCwzMiBAQAogc3RhdGljIHZvaWQgYml0bWFwX2ZpbGVfc2V0X2JpdChzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IGJsb2NrKQogewogCXVuc2lnbmVkIGxvbmcgYml0OwotCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAl2b2lkICprYWRkcjsKIAl1bnNpZ25lZCBsb25nIGNodW5rID0gYmxvY2sgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKTsKIAogCWlmICghYml0bWFwLT5maWxlbWFwKSB7Ci0JCXJldHVybjsKKwkJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8ubG9nOworCQlpZiAobG9nKQorCQkJbG9nLT50eXBlLT5tYXJrX3JlZ2lvbihsb2csIGNodW5rKTsKKwl9IGVsc2UgeworCisJCXBhZ2UgPSBmaWxlbWFwX2dldF9wYWdlKGJpdG1hcCwgY2h1bmspOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm47CisJCWJpdCA9IGZpbGVfcGFnZV9vZmZzZXQoYml0bWFwLCBjaHVuayk7CisKKwkJLyogc2V0IHRoZSBiaXQgKi8KKwkJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCWlmIChiaXRtYXAtPmZsYWdzICYgQklUTUFQX0hPU1RFTkRJQU4pCisJCQlzZXRfYml0KGJpdCwga2FkZHIpOworCQllbHNlCisJCQlleHQyX3NldF9iaXQoYml0LCBrYWRkcik7CisJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJUFJJTlRLKCJzZXQgZmlsZSBiaXQgJWx1IHBhZ2UgJWx1XG4iLCBiaXQsIHBhZ2UtPmluZGV4KTsKIAl9Ci0KLQlwYWdlID0gZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIGNodW5rKTsKLQlpZiAoIXBhZ2UpIHJldHVybjsKLQliaXQgPSBmaWxlX3BhZ2Vfb2Zmc2V0KGJpdG1hcCwgY2h1bmspOwotCi0gCS8qIHNldCB0aGUgYml0ICovCi0Ja2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKLQkJc2V0X2JpdChiaXQsIGthZGRyKTsKLQllbHNlCi0JCWV4dDJfc2V0X2JpdChiaXQsIGthZGRyKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Ci0JUFJJTlRLKCJzZXQgZmlsZSBiaXQgJWx1IHBhZ2UgJWx1XG4iLCBiaXQsIHBhZ2UtPmluZGV4KTsKLQogCS8qIHJlY29yZCBwYWdlIG51bWJlciBzbyBpdCBnZXRzIGZsdXNoZWQgdG8gZGlzayB3aGVuIHVucGx1ZyBvY2N1cnMgKi8KIAlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgcGFnZSwgQklUTUFQX1BBR0VfRElSVFkpOwotCiB9CiAKIC8qIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgbWQgZGV2aWNlIGlzIHJlYWR5IHRvIHVucGx1ZyBpdHMgdW5kZXJseWluZwpAQCAtODc0LDYgKzg3MCwxNiBAQAogCiAJaWYgKCFiaXRtYXApCiAJCXJldHVybjsKKwlpZiAoIWJpdG1hcC0+ZmlsZW1hcCkgeworCQkvKiBNdXN0IGJlIHVzaW5nIGEgZGlydHlfbG9nICovCisJCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IGJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmxvZzsKKwkJZGlydHkgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoQklUTUFQX1BBR0VfRElSVFksICZiaXRtYXAtPmxvZ2F0dHJzKTsKKwkJbmVlZF93cml0ZSA9IHRlc3RfYW5kX2NsZWFyX2JpdChCSVRNQVBfUEFHRV9ORUVEV1JJVEUsICZiaXRtYXAtPmxvZ2F0dHJzKTsKKwkJaWYgKGRpcnR5IHx8IG5lZWRfd3JpdGUpCisJCQlpZiAobG9nLT50eXBlLT5mbHVzaChsb2cpKQorCQkJCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX1dSSVRFX0VSUk9SOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBsb29rIGF0IGVhY2ggcGFnZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXQgYml0cyB0aGF0IG5lZWQgdG8gYmUKIAkgKiBmbHVzaGVkIG91dCB0byBkaXNrICovCkBAIC04OTIsNyArODk4LDcgQEAKIAkJCXdhaXQgPSAxOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKIAotCQlpZiAoZGlydHkgfCBuZWVkX3dyaXRlKQorCQlpZiAoZGlydHkgfHwgbmVlZF93cml0ZSkKIAkJCXdyaXRlX3BhZ2UoYml0bWFwLCBwYWdlLCAwKTsKIAl9CiAJaWYgKHdhaXQpIHsgLyogaWYgYW55IHdyaXRlcyB3ZXJlIHBlcmZvcm1lZCwgd2UgbmVlZCB0byB3YWl0IG9uIHRoZW0gKi8KQEAgLTkwMiw5ICs5MDgsMTEgQEAKIAkJZWxzZQogCQkJbWRfc3VwZXJfd2FpdChiaXRtYXAtPm1kZGV2KTsKIAl9CitvdXQ6CiAJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfV1JJVEVfRVJST1IpCiAJCWJpdG1hcF9maWxlX2tpY2soYml0bWFwKTsKIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX3VucGx1Zyk7CiAKIHN0YXRpYyB2b2lkIGJpdG1hcF9zZXRfbWVtb3J5X2JpdHMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCBuZWVkZWQpOwogLyogKiBiaXRtYXBfaW5pdF9mcm9tX2Rpc2sgLS0gY2FsbGVkIGF0IGJpdG1hcF9jcmVhdGUgdGltZSB0byBpbml0aWFsaXplCkBAIC05NDMsMTIgKzk1MSwxMSBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlczogYml0bWFwIGZpbGUgaXMgb3V0IG9mIGRhdGUsIGRvaW5nIGZ1bGwgIgogCQkJInJlY292ZXJ5XG4iLCBibW5hbWUoYml0bWFwKSk7CiAKLQlieXRlcyA9IChjaHVua3MgKyA3KSAvIDg7CisJYnl0ZXMgPSBESVZfUk9VTkRfVVAoYml0bWFwLT5jaHVua3MsIDgpOwogCWlmICghYml0bWFwLT5tZGRldi0+Yml0bWFwX2luZm8uZXh0ZXJuYWwpCiAJCWJ5dGVzICs9IHNpemVvZihiaXRtYXBfc3VwZXJfdCk7CiAKLQkKLQludW1fcGFnZXMgPSAoYnl0ZXMgKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBESVZfUk9VTkRfVVAoYnl0ZXMsIFBBR0VfU0laRSk7CiAKIAlpZiAoZmlsZSAmJiBpX3NpemVfcmVhZChmaWxlLT5mX21hcHBpbmctPmhvc3QpIDwgYnl0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGJpdG1hcCBmaWxlIHRvbyBzaG9ydCAlbHUgPCAlbHVcbiIsCkBAIC05NjYsNyArOTczLDcgQEAKIAogCS8qIFdlIG5lZWQgNCBiaXRzIHBlciBwYWdlLCByb3VuZGVkIHVwIHRvIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICovCiAJYml0bWFwLT5maWxlbWFwX2F0dHIgPSBremFsbG9jKAotCQlyb3VuZHVwKCBESVZfUk9VTkRfVVAobnVtX3BhZ2VzKjQsIDgpLCBzaXplb2YodW5zaWduZWQgbG9uZykpLAorCQlyb3VuZHVwKERJVl9ST1VORF9VUChudW1fcGFnZXMqNCwgOCksIHNpemVvZih1bnNpZ25lZCBsb25nKSksCiAJCUdGUF9LRVJORUwpOwogCWlmICghYml0bWFwLT5maWxlbWFwX2F0dHIpCiAJCWdvdG8gZXJyOwpAQCAtMTAyMSw3ICsxMDI4LDcgQEAKIAkJCWlmIChvdXRvZmRhdGUpIHsKIAkJCQkvKgogCQkJCSAqIGlmIGJpdG1hcCBpcyBvdXQgb2YgZGF0ZSwgZGlydHkgdGhlCi0JCQkgCSAqIHdob2xlIHBhZ2UgYW5kIHdyaXRlIGl0IG91dAorCQkJCSAqIHdob2xlIHBhZ2UgYW5kIHdyaXRlIGl0IG91dAogCQkJCSAqLwogCQkJCXBhZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQkJCW1lbXNldChwYWRkciArIG9mZnNldCwgMHhmZiwKQEAgLTEwNTIsNyArMTA1OSw3IEBACiAJCX0KIAl9CiAKLSAJLyogZXZlcnl0aGluZyB3ZW50IE9LICovCisJLyogZXZlcnl0aGluZyB3ZW50IE9LICovCiAJcmV0ID0gMDsKIAliaXRtYXBfbWFza19zdGF0ZShiaXRtYXAsIEJJVE1BUF9TVEFMRSwgTUFTS19VTlNFVCk7CiAKQEAgLTEwODAsMjEgKzEwODcsMTYgQEAKIAkgKi8KIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgYml0bWFwLT5maWxlX3BhZ2VzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGJpdG1hcC0+ZmlsZV9wYWdlczsgaSsrKQogCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwgYml0bWFwLT5maWxlbWFwW2ldLAogCQkJICAgICAgQklUTUFQX1BBR0VfTkVFRFdSSVRFKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBiaXRtYXBfY291bnRfcGFnZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50IGluYykKIHsKIAlzZWN0b3JfdCBjaHVuayA9IG9mZnNldCA+PiBDSFVOS19CTE9DS19TSElGVChiaXRtYXApOwogCXVuc2lnbmVkIGxvbmcgcGFnZSA9IGNodW5rID4+IFBBR0VfQ09VTlRFUl9TSElGVDsKIAliaXRtYXAtPmJwW3BhZ2VdLmNvdW50ICs9IGluYzsKLS8qCi0JaWYgKHBhZ2UgPT0gMCkgcHJpbnRrKCJjb3VudCBwYWdlIDAsIG9mZnNldCAlbGx1OiAlZCBnaXZlcyAlZFxuIiwKLQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0LCBpbmMsIGJpdG1hcC0+YnBbcGFnZV0uY291bnQpOwotKi8KIAliaXRtYXBfY2hlY2tmcmVlKGJpdG1hcCwgcGFnZSk7CiB9CiBzdGF0aWMgYml0bWFwX2NvdW50ZXJfdCAqYml0bWFwX2dldF9jb3VudGVyKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwKQEAgLTExMTQsNiArMTExNiw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMLCAqbGFzdHBhZ2UgPSBOVUxMOwogCWludCBibG9ja3M7CiAJdm9pZCAqcGFkZHI7CisJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nID0gbWRkZXYtPmJpdG1hcF9pbmZvLmxvZzsKIAogCS8qIFVzZSBhIG11dGV4IHRvIGd1YXJkIGRhZW1vbl93b3JrIGFnYWluc3QKIAkgKiBiaXRtYXBfZGVzdHJveS4KQEAgLTExMzgsMTEgKzExNDEsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJZm9yIChqID0gMDsgaiA8IGJpdG1hcC0+Y2h1bmtzOyBqKyspIHsKIAkJYml0bWFwX2NvdW50ZXJfdCAqYm1jOwotCQlpZiAoIWJpdG1hcC0+ZmlsZW1hcCkKLQkJCS8qIGVycm9yIG9yIHNodXRkb3duICovCi0JCQlicmVhazsKLQotCQlwYWdlID0gZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIGopOworCQlpZiAoIWJpdG1hcC0+ZmlsZW1hcCkgeworCQkJaWYgKCFsb2cpCisJCQkJLyogZXJyb3Igb3Igc2h1dGRvd24gKi8KKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQlwYWdlID0gZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIGopOwogCiAJCWlmIChwYWdlICE9IGxhc3RwYWdlKSB7CiAJCQkvKiBza2lwIHRoaXMgcGFnZSB1bmxlc3MgaXQncyBtYXJrZWQgYXMgbmVlZGluZyBjbGVhbmluZyAqLwpAQCAtMTE5NywxNCArMTIwMSwxMSBAQAogCQkJCQkgKHNlY3Rvcl90KWogPDwgQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSwKIAkJCQkJICZibG9ja3MsIDApOwogCQlpZiAoYm1jKSB7Ci0vKgotICBpZiAoaiA8IDEwMCkgcHJpbnRrKCJiaXRtYXA6IGo9JWx1LCAqYm1jID0gMHgleFxuIiwgaiwgKmJtYyk7Ci0qLwogCQkJaWYgKCpibWMpCiAJCQkJYml0bWFwLT5hbGxjbGVhbiA9IDA7CiAKIAkJCWlmICgqYm1jID09IDIpIHsKLQkJCQkqYm1jPTE7IC8qIG1heWJlIGNsZWFyIHRoZSBiaXQgbmV4dCB0aW1lICovCisJCQkJKmJtYyA9IDE7IC8qIG1heWJlIGNsZWFyIHRoZSBiaXQgbmV4dCB0aW1lICovCiAJCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX0NMRUFOKTsKIAkJCX0gZWxzZSBpZiAoKmJtYyA9PSAxICYmICFiaXRtYXAtPm5lZWRfc3luYykgewogCQkJCS8qIHdlIGNhbiBjbGVhciB0aGUgYml0ICovCkBAIC0xMjE0LDE0ICsxMjE1LDE3IEBACiAJCQkJCQkgIC0xKTsKIAogCQkJCS8qIGNsZWFyIHRoZSBiaXQgKi8KLQkJCQlwYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJCQlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9IT1NURU5ESUFOKQotCQkJCQljbGVhcl9iaXQoZmlsZV9wYWdlX29mZnNldChiaXRtYXAsIGopLAotCQkJCQkJICBwYWRkcik7Ci0JCQkJZWxzZQotCQkJCQlleHQyX2NsZWFyX2JpdChmaWxlX3BhZ2Vfb2Zmc2V0KGJpdG1hcCwgaiksCi0JCQkJCQkgICAgICAgcGFkZHIpOwotCQkJCWt1bm1hcF9hdG9taWMocGFkZHIsIEtNX1VTRVIwKTsKKwkJCQlpZiAocGFnZSkgeworCQkJCQlwYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJCQkJaWYgKGJpdG1hcC0+ZmxhZ3MgJiBCSVRNQVBfSE9TVEVORElBTikKKwkJCQkJCWNsZWFyX2JpdChmaWxlX3BhZ2Vfb2Zmc2V0KGJpdG1hcCwgaiksCisJCQkJCQkJICBwYWRkcik7CisJCQkJCWVsc2UKKwkJCQkJCWV4dDJfY2xlYXJfYml0KGZpbGVfcGFnZV9vZmZzZXQoYml0bWFwLCBqKSwKKwkJCQkJCQkgICAgICAgcGFkZHIpOworCQkJCQlrdW5tYXBfYXRvbWljKHBhZGRyLCBLTV9VU0VSMCk7CisJCQkJfSBlbHNlCisJCQkJCWxvZy0+dHlwZS0+Y2xlYXJfcmVnaW9uKGxvZywgaik7CiAJCQl9CiAJCX0gZWxzZQogCQkJaiB8PSBQQUdFX0NPVU5URVJfTUFTSzsKQEAgLTEyMjksMTIgKzEyMzMsMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIG5vdyBzeW5jIHRoZSBmaW5hbCBwYWdlICovCi0JaWYgKGxhc3RwYWdlICE9IE5VTEwpIHsKKwlpZiAobGFzdHBhZ2UgIT0gTlVMTCB8fCBsb2cgIT0gTlVMTCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJCWlmICh0ZXN0X3BhZ2VfYXR0cihiaXRtYXAsIGxhc3RwYWdlLCBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpKSB7CiAJCQljbGVhcl9wYWdlX2F0dHIoYml0bWFwLCBsYXN0cGFnZSwgQklUTUFQX1BBR0VfTkVFRFdSSVRFKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJpdG1hcC0+bG9jaywgZmxhZ3MpOwotCQkJd3JpdGVfcGFnZShiaXRtYXAsIGxhc3RwYWdlLCAwKTsKKwkJCWlmIChsYXN0cGFnZSkKKwkJCQl3cml0ZV9wYWdlKGJpdG1hcCwgbGFzdHBhZ2UsIDApOworCQkJZWxzZQorCQkJCWlmIChsb2ctPnR5cGUtPmZsdXNoKGxvZykpCisJCQkJCWJpdG1hcC0+ZmxhZ3MgfD0gQklUTUFQX1dSSVRFX0VSUk9SOwogCQl9IGVsc2UgewogCQkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIGxhc3RwYWdlLCBCSVRNQVBfUEFHRV9ORUVEV1JJVEUpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CkBAIC0xMjQzLDcgKzEyNTEsNyBAQAogCiAgZG9uZToKIAlpZiAoYml0bWFwLT5hbGxjbGVhbiA9PSAwKQotCQliaXRtYXAtPm1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPSAKKwkJYml0bWFwLT5tZGRldi0+dGhyZWFkLT50aW1lb3V0ID0KIAkJCWJpdG1hcC0+bWRkZXYtPmJpdG1hcF9pbmZvLmRhZW1vbl9zbGVlcDsKIAltdXRleF91bmxvY2soJm1kZGV2LT5iaXRtYXBfaW5mby5tdXRleCk7CiB9CkBAIC0xMjYyLDM0ICsxMjcwLDM4IEBACiAJdW5zaWduZWQgbG9uZyBwYWdlID0gY2h1bmsgPj4gUEFHRV9DT1VOVEVSX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgcGFnZW9mZiA9IChjaHVuayAmIFBBR0VfQ09VTlRFUl9NQVNLKSA8PCBDT1VOVEVSX0JZVEVfU0hJRlQ7CiAJc2VjdG9yX3QgY3NpemU7CisJaW50IGVycjsKIAotCWlmIChiaXRtYXBfY2hlY2twYWdlKGJpdG1hcCwgcGFnZSwgY3JlYXRlKSA8IDApIHsKKwllcnIgPSBiaXRtYXBfY2hlY2twYWdlKGJpdG1hcCwgcGFnZSwgY3JlYXRlKTsKKworCWlmIChiaXRtYXAtPmJwW3BhZ2VdLmhpamFja2VkIHx8CisJICAgIGJpdG1hcC0+YnBbcGFnZV0ubWFwID09IE5VTEwpCisJCWNzaXplID0gKChzZWN0b3JfdCkxKSA8PCAoQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSArCisJCQkJCSAgUEFHRV9DT1VOVEVSX1NISUZUIC0gMSk7CisJZWxzZQogCQljc2l6ZSA9ICgoc2VjdG9yX3QpMSkgPDwgKENIVU5LX0JMT0NLX1NISUZUKGJpdG1hcCkpOwotCQkqYmxvY2tzID0gY3NpemUgLSAob2Zmc2V0ICYgKGNzaXplLSAxKSk7CisJKmJsb2NrcyA9IGNzaXplIC0gKG9mZnNldCAmIChjc2l6ZSAtIDEpKTsKKworCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gTlVMTDsKLQl9CisKIAkvKiBub3cgbG9ja2VkIC4uLiAqLwogCiAJaWYgKGJpdG1hcC0+YnBbcGFnZV0uaGlqYWNrZWQpIHsgLyogaGlqYWNrZWQgcG9pbnRlciAqLwogCQkvKiBzaG91bGQgd2UgdXNlIHRoZSBmaXJzdCBvciBzZWNvbmQgY291bnRlciBmaWVsZAogCQkgKiBvZiB0aGUgaGlqYWNrZWQgcG9pbnRlcj8gKi8KIAkJaW50IGhpID0gKHBhZ2VvZmYgPiBQQUdFX0NPVU5URVJfTUFTSyk7Ci0JCWNzaXplID0gKChzZWN0b3JfdCkxKSA8PCAoQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSArCi0JCQkJCSAgUEFHRV9DT1VOVEVSX1NISUZUIC0gMSk7Ci0JCSpibG9ja3MgPSBjc2l6ZSAtIChvZmZzZXQgJiAoY3NpemUtIDEpKTsKIAkJcmV0dXJuICAmKChiaXRtYXBfY291bnRlcl90ICopCiAJCQkgICZiaXRtYXAtPmJwW3BhZ2VdLm1hcClbaGldOwotCX0gZWxzZSB7IC8qIHBhZ2UgaXMgYWxsb2NhdGVkICovCi0JCWNzaXplID0gKChzZWN0b3JfdCkxKSA8PCAoQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSk7Ci0JCSpibG9ja3MgPSBjc2l6ZSAtIChvZmZzZXQgJiAoY3NpemUtIDEpKTsKKwl9IGVsc2UgLyogcGFnZSBpcyBhbGxvY2F0ZWQgKi8KIAkJcmV0dXJuIChiaXRtYXBfY291bnRlcl90ICopCiAJCQkmKGJpdG1hcC0+YnBbcGFnZV0ubWFwW3BhZ2VvZmZdKTsKLQl9CiB9CiAKIGludCBiaXRtYXBfc3RhcnR3cml0ZShzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzZWN0b3JzLCBpbnQgYmVoaW5kKQogewotCWlmICghYml0bWFwKSByZXR1cm4gMDsKKwlpZiAoIWJpdG1hcCkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoYmVoaW5kKSB7CiAJCWludCBidzsKQEAgLTEzMjIsMTcgKzEzMzQsMTYgQEAKIAkJCXByZXBhcmVfdG9fd2FpdCgmYml0bWFwLT5vdmVyZmxvd193YWl0LCAmX193YWl0LAogCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7Ci0JCQlibGtfdW5wbHVnKGJpdG1hcC0+bWRkZXYtPnF1ZXVlKTsKKwkJCW1kX3VucGx1ZyhiaXRtYXAtPm1kZGV2KTsKIAkJCXNjaGVkdWxlKCk7CiAJCQlmaW5pc2hfd2FpdCgmYml0bWFwLT5vdmVyZmxvd193YWl0LCAmX193YWl0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc3dpdGNoKCpibWMpIHsKKwkJc3dpdGNoICgqYm1jKSB7CiAJCWNhc2UgMDoKIAkJCWJpdG1hcF9maWxlX3NldF9iaXQoYml0bWFwLCBvZmZzZXQpOwotCQkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLG9mZnNldCwgMSk7Ci0JCQlibGtfcGx1Z19kZXZpY2VfdW5sb2NrZWQoYml0bWFwLT5tZGRldi0+cXVldWUpOworCQkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLCBvZmZzZXQsIDEpOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgMToKIAkJCSpibWMgPSAyOwpAQCAtMTM0NSwxNiArMTM1NiwxOSBAQAogCQlvZmZzZXQgKz0gYmxvY2tzOwogCQlpZiAoc2VjdG9ycyA+IGJsb2NrcykKIAkJCXNlY3RvcnMgLT0gYmxvY2tzOwotCQllbHNlIHNlY3RvcnMgPSAwOworCQllbHNlCisJCQlzZWN0b3JzID0gMDsKIAl9CiAJYml0bWFwLT5hbGxjbGVhbiA9IDA7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGJpdG1hcF9zdGFydHdyaXRlKTsKIAogdm9pZCBiaXRtYXBfZW5kd3JpdGUoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2VjdG9ycywKIAkJICAgICBpbnQgc3VjY2VzcywgaW50IGJlaGluZCkKIHsKLQlpZiAoIWJpdG1hcCkgcmV0dXJuOworCWlmICghYml0bWFwKQorCQlyZXR1cm47CiAJaWYgKGJlaGluZCkgewogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYml0bWFwLT5iZWhpbmRfd3JpdGVzKSkKIAkJCXdha2VfdXAoJmJpdG1hcC0+YmVoaW5kX3dhaXQpOwpAQCAtMTM4MSw3ICsxMzk1LDcgQEAKIAkJICAgIGJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPCBiaXRtYXAtPm1kZGV2LT5ldmVudHMpIHsKIAkJCWJpdG1hcC0+ZXZlbnRzX2NsZWFyZWQgPSBiaXRtYXAtPm1kZGV2LT5ldmVudHM7CiAJCQliaXRtYXAtPm5lZWRfc3luYyA9IDE7Ci0JCQlzeXNmc19ub3RpZnlfZGlyZW50KGJpdG1hcC0+c3lzZnNfY2FuX2NsZWFyKTsKKwkJCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShiaXRtYXAtPnN5c2ZzX2Nhbl9jbGVhcik7CiAJCX0KIAogCQlpZiAoIXN1Y2Nlc3MgJiYgISAoKmJtYyAmIE5FRURFRF9NQVNLKSkKQEAgLTEzOTEsMTggKzE0MDUsMjIgQEAKIAkJCXdha2VfdXAoJmJpdG1hcC0+b3ZlcmZsb3dfd2FpdCk7CiAKIAkJKCpibWMpLS07Ci0JCWlmICgqYm1jIDw9IDIpIHsKKwkJaWYgKCpibWMgPD0gMikKIAkJCXNldF9wYWdlX2F0dHIoYml0bWFwLAotCQkJCSAgICAgIGZpbGVtYXBfZ2V0X3BhZ2UoYml0bWFwLCBvZmZzZXQgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSksCisJCQkJICAgICAgZmlsZW1hcF9nZXRfcGFnZSgKKwkJCQkJICAgICAgYml0bWFwLAorCQkJCQkgICAgICBvZmZzZXQgPj4gQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSksCiAJCQkJICAgICAgQklUTUFQX1BBR0VfQ0xFQU4pOwotCQl9CisKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYml0bWFwLT5sb2NrLCBmbGFncyk7CiAJCW9mZnNldCArPSBibG9ja3M7CiAJCWlmIChzZWN0b3JzID4gYmxvY2tzKQogCQkJc2VjdG9ycyAtPSBibG9ja3M7Ci0JCWVsc2Ugc2VjdG9ycyA9IDA7CisJCWVsc2UKKwkJCXNlY3RvcnMgPSAwOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX2VuZHdyaXRlKTsKIAogc3RhdGljIGludCBfX2JpdG1hcF9zdGFydF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgKmJsb2NrcywKIAkJCSAgICAgICBpbnQgZGVncmFkZWQpCkBAIC0xNDU1LDE0ICsxNDczLDE0IEBACiAJfQogCXJldHVybiBydjsKIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX3N0YXJ0X3N5bmMpOwogCiB2b2lkIGJpdG1hcF9lbmRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsIGludCBhYm9ydGVkKQogewogCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotLyoKLQlpZiAob2Zmc2V0ID09IDApIHByaW50aygiYml0bWFwX2VuZF9zeW5jIDAgKCVkKVxuIiwgYWJvcnRlZCk7Ci0qLwlpZiAoYml0bWFwID09IE5VTEwpIHsKKworCWlmIChiaXRtYXAgPT0gTlVMTCkgewogCQkqYmxvY2tzID0gMTAyNDsKIAkJcmV0dXJuOwogCX0KQEAgLTE0NzEsMjYgKzE0ODksMjMgQEAKIAlpZiAoYm1jID09IE5VTEwpCiAJCWdvdG8gdW5sb2NrOwogCS8qIGxvY2tlZCAqLwotLyoKLQlpZiAob2Zmc2V0ID09IDApIHByaW50aygiYml0bWFwX2VuZCBzeW5jIGZvdW5kIDB4JXgsIGJsb2NrcyAlZFxuIiwgKmJtYywgKmJsb2Nrcyk7Ci0qLwogCWlmIChSRVNZTkMoKmJtYykpIHsKIAkJKmJtYyAmPSB+UkVTWU5DX01BU0s7CiAKIAkJaWYgKCFORUVERUQoKmJtYykgJiYgYWJvcnRlZCkKIAkJCSpibWMgfD0gTkVFREVEX01BU0s7CiAJCWVsc2UgewotCQkJaWYgKCpibWMgPD0gMikgeworCQkJaWYgKCpibWMgPD0gMikKIAkJCQlzZXRfcGFnZV9hdHRyKGJpdG1hcCwKIAkJCQkJICAgICAgZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIG9mZnNldCA+PiBDSFVOS19CTE9DS19TSElGVChiaXRtYXApKSwKIAkJCQkJICAgICAgQklUTUFQX1BBR0VfQ0xFQU4pOwotCQkJfQogCQl9CiAJfQogIHVubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiaXRtYXAtPmxvY2ssIGZsYWdzKTsKIAliaXRtYXAtPmFsbGNsZWFuID0gMDsKIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX2VuZF9zeW5jKTsKIAogdm9pZCBiaXRtYXBfY2xvc2Vfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXApCiB7CkBAIC0xNTA3LDYgKzE1MjIsNyBAQAogCQlzZWN0b3IgKz0gYmxvY2tzOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX2Nsb3NlX3N5bmMpOwogCiB2b2lkIGJpdG1hcF9jb25kX2VuZF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgc2VjdG9yKQogewpAQCAtMTUyNiw3ICsxNTQyLDggQEAKIAkJICAgYXRvbWljX3JlYWQoJmJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkgPT0gMCk7CiAKIAliaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSBiaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luYzsKLQlzZXRfYml0KE1EX0NIQU5HRV9DTEVBTiwgJmJpdG1hcC0+bWRkZXYtPmZsYWdzKTsKKwlpZiAoYml0bWFwLT5tZGRldi0+cGVyc2lzdGVudCkKKwkJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZiaXRtYXAtPm1kZGV2LT5mbGFncyk7CiAJc2VjdG9yICY9IH4oKDFVTEwgPDwgQ0hVTktfQkxPQ0tfU0hJRlQoYml0bWFwKSkgLSAxKTsKIAlzID0gMDsKIAl3aGlsZSAocyA8IHNlY3RvciAmJiBzIDwgYml0bWFwLT5tZGRldi0+cmVzeW5jX21heF9zZWN0b3JzKSB7CkBAIC0xNTM2LDYgKzE1NTMsNyBAQAogCWJpdG1hcC0+bGFzdF9lbmRfc3luYyA9IGppZmZpZXM7CiAJc3lzZnNfbm90aWZ5KCZiaXRtYXAtPm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIH0KK0VYUE9SVF9TWU1CT0woYml0bWFwX2NvbmRfZW5kX3N5bmMpOwogCiBzdGF0aWMgdm9pZCBiaXRtYXBfc2V0X21lbW9yeV9iaXRzKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgbmVlZGVkKQogewpAQCAtMTU1Miw5ICsxNTcwLDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZiaXRtYXAtPmxvY2spOwogCQlyZXR1cm47CiAJfQotCWlmICghICpibWMpIHsKKwlpZiAoISpibWMpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCSpibWMgPSAxIHwgKG5lZWRlZD9ORUVERURfTUFTSzowKTsKKwkJKmJtYyA9IDEgfCAobmVlZGVkID8gTkVFREVEX01BU0sgOiAwKTsKIAkJYml0bWFwX2NvdW50X3BhZ2UoYml0bWFwLCBvZmZzZXQsIDEpOwogCQlwYWdlID0gZmlsZW1hcF9nZXRfcGFnZShiaXRtYXAsIG9mZnNldCA+PiBDSFVOS19CTE9DS19TSElGVChiaXRtYXApKTsKIAkJc2V0X3BhZ2VfYXR0cihiaXRtYXAsIHBhZ2UsIEJJVE1BUF9QQUdFX0NMRUFOKTsKQEAgLTE2NjMsMTUgKzE2ODEsMTcgQEAKIAl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXN0cnVjdCBmaWxlICpmaWxlID0gbWRkZXYtPmJpdG1hcF9pbmZvLmZpbGU7CiAJaW50IGVycjsKLQlzZWN0b3JfdCBzdGFydDsKLQlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpibTsKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpibSA9IE5VTEw7CiAKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKGJpdG1hcF9zdXBlcl90KSAhPSAyNTYpOwogCi0JaWYgKCFmaWxlICYmICFtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KSAvKiBiaXRtYXAgZGlzYWJsZWQsIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoIWZpbGUKKwkgICAgJiYgIW1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQKKwkgICAgJiYgIW1kZGV2LT5iaXRtYXBfaW5mby5sb2cpIC8qIGJpdG1hcCBkaXNhYmxlZCwgbm90aGluZyB0byBkbyAqLwogCQlyZXR1cm4gMDsKIAogCUJVR19PTihmaWxlICYmIG1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQpOworCUJVR19PTihtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ICYmIG1kZGV2LT5iaXRtYXBfaW5mby5sb2cpOwogCiAJYml0bWFwID0ga3phbGxvYyhzaXplb2YoKmJpdG1hcCksIEdGUF9LRVJORUwpOwogCWlmICghYml0bWFwKQpAQCAtMTY4NSw3ICsxNzA1LDggQEAKIAogCWJpdG1hcC0+bWRkZXYgPSBtZGRldjsKIAotCWJtID0gc3lzZnNfZ2V0X2RpcmVudChtZGRldi0+a29iai5zZCwgTlVMTCwgImJpdG1hcCIpOworCWlmIChtZGRldi0+a29iai5zZCkKKwkJYm0gPSBzeXNmc19nZXRfZGlyZW50KG1kZGV2LT5rb2JqLnNkLCBOVUxMLCAiYml0bWFwIik7CiAJaWYgKGJtKSB7CiAJCWJpdG1hcC0+c3lzZnNfY2FuX2NsZWFyID0gc3lzZnNfZ2V0X2RpcmVudChibSwgTlVMTCwgImNhbl9jbGVhciIpOwogCQlzeXNmc19wdXQoYm0pOwpAQCAtMTcxOSw5ICsxNzQwLDkgQEAKIAliaXRtYXAtPmNodW5rc2hpZnQgPSBmZnoofm1kZGV2LT5iaXRtYXBfaW5mby5jaHVua3NpemUpOwogCiAJLyogbm93IHRoYXQgY2h1bmtzaXplIGFuZCBjaHVua3NoaWZ0IGFyZSBzZXQsIHdlIGNhbiB1c2UgdGhlc2UgbWFjcm9zICovCi0gCWNodW5rcyA9IChibG9ja3MgKyBDSFVOS19CTE9DS19SQVRJTyhiaXRtYXApIC0gMSkgPj4KKwljaHVua3MgPSAoYmxvY2tzICsgQ0hVTktfQkxPQ0tfUkFUSU8oYml0bWFwKSAtIDEpID4+CiAJCQlDSFVOS19CTE9DS19TSElGVChiaXRtYXApOwotIAlwYWdlcyA9IChjaHVua3MgKyBQQUdFX0NPVU5URVJfUkFUSU8gLSAxKSAvIFBBR0VfQ09VTlRFUl9SQVRJTzsKKwlwYWdlcyA9IChjaHVua3MgKyBQQUdFX0NPVU5URVJfUkFUSU8gLSAxKSAvIFBBR0VfQ09VTlRFUl9SQVRJTzsKIAogCUJVR19PTighcGFnZXMpOwogCkBAIC0xNzQxLDI3ICsxNzYyLDExIEBACiAJaWYgKCFiaXRtYXAtPmJwKQogCQlnb3RvIGVycm9yOwogCi0JLyogbm93IHRoYXQgd2UgaGF2ZSBzb21lIHBhZ2VzIGF2YWlsYWJsZSwgaW5pdGlhbGl6ZSB0aGUgaW4tbWVtb3J5Ci0JICogYml0bWFwIGZyb20gdGhlIG9uLWRpc2sgYml0bWFwICovCi0Jc3RhcnQgPSAwOwotCWlmIChtZGRldi0+ZGVncmFkZWQgPT0gMAotCSAgICB8fCBiaXRtYXAtPmV2ZW50c19jbGVhcmVkID09IG1kZGV2LT5ldmVudHMpCi0JCS8qIG5vIG5lZWQgdG8ga2VlcCBkaXJ0eSBiaXRzIHRvIG9wdGltaXNlIGEgcmUtYWRkIG9mIGEgbWlzc2luZyBkZXZpY2UgKi8KLQkJc3RhcnQgPSBtZGRldi0+cmVjb3ZlcnlfY3A7Ci0JZXJyID0gYml0bWFwX2luaXRfZnJvbV9kaXNrKGJpdG1hcCwgc3RhcnQpOwotCi0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKLQogCXByaW50ayhLRVJOX0lORk8gImNyZWF0ZWQgYml0bWFwICglbHUgcGFnZXMpIGZvciBkZXZpY2UgJXNcbiIsCiAJCXBhZ2VzLCBibW5hbWUoYml0bWFwKSk7CiAKIAltZGRldi0+Yml0bWFwID0gYml0bWFwOwogCi0JbWRkZXYtPnRocmVhZC0+dGltZW91dCA9IG1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXA7Ci0JbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKLQotCWJpdG1hcF91cGRhdGVfc2IoYml0bWFwKTsKIAogCXJldHVybiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9XUklURV9FUlJPUikgPyAtRUlPIDogMDsKIApAQCAtMTc3MCwxNSArMTc3NSw2OSBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCBiaXRtYXBfbG9hZChtZGRldl90ICptZGRldikKK3sKKwlpbnQgZXJyID0gMDsKKwlzZWN0b3JfdCBzZWN0b3IgPSAwOworCXN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IG1kZGV2LT5iaXRtYXA7CisKKwlpZiAoIWJpdG1hcCkKKwkJZ290byBvdXQ7CisKKwkvKiBDbGVhciBvdXQgb2xkIGJpdG1hcCBpbmZvIGZpcnN0OiAgRWl0aGVyIHRoZXJlIGlzIG5vbmUsIG9yIHdlCisJICogYXJlIHJlc3VtaW5nIGFmdGVyIHNvbWVvbmUgZWxzZSBoYXMgcG9zc2libHkgY2hhbmdlZCB0aGluZ3MsCisJICogc28gd2Ugc2hvdWxkIGZvcmdldCBvbGQgY2FjaGVkIGluZm8uCisJICogQWxsIGNodW5rcyBzaG91bGQgYmUgY2xlYW4sIGJ1dCBzb21lIG1pZ2h0IG5lZWRfc3luYy4KKwkgKi8KKwl3aGlsZSAoc2VjdG9yIDwgbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycykgeworCQlpbnQgYmxvY2tzOworCQliaXRtYXBfc3RhcnRfc3luYyhiaXRtYXAsIHNlY3RvciwgJmJsb2NrcywgMCk7CisJCXNlY3RvciArPSBibG9ja3M7CisJfQorCWJpdG1hcF9jbG9zZV9zeW5jKGJpdG1hcCk7CisKKwlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmxvZykgeworCQl1bnNpZ25lZCBsb25nIGk7CisJCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IG1kZGV2LT5iaXRtYXBfaW5mby5sb2c7CisJCWZvciAoaSA9IDA7IGkgPCBiaXRtYXAtPmNodW5rczsgaSsrKQorCQkJaWYgKCFsb2ctPnR5cGUtPmluX3N5bmMobG9nLCBpLCAxKSkKKwkJCQliaXRtYXBfc2V0X21lbW9yeV9iaXRzKGJpdG1hcCwKKwkJCQkJCSAgICAgICAoc2VjdG9yX3QpaSA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApLAorCQkJCQkJICAgICAgIDEpOworCX0gZWxzZSB7CisJCXNlY3Rvcl90IHN0YXJ0ID0gMDsKKwkJaWYgKG1kZGV2LT5kZWdyYWRlZCA9PSAwCisJCSAgICB8fCBiaXRtYXAtPmV2ZW50c19jbGVhcmVkID09IG1kZGV2LT5ldmVudHMpCisJCQkvKiBubyBuZWVkIHRvIGtlZXAgZGlydHkgYml0cyB0byBvcHRpbWlzZSBhCisJCQkgKiByZS1hZGQgb2YgYSBtaXNzaW5nIGRldmljZSAqLworCQkJc3RhcnQgPSBtZGRldi0+cmVjb3ZlcnlfY3A7CisKKwkJZXJyID0gYml0bWFwX2luaXRfZnJvbV9kaXNrKGJpdG1hcCwgc3RhcnQpOworCX0KKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCW1kZGV2LT50aHJlYWQtPnRpbWVvdXQgPSBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisKKwliaXRtYXBfdXBkYXRlX3NiKGJpdG1hcCk7CisKKwlpZiAoYml0bWFwLT5mbGFncyAmIEJJVE1BUF9XUklURV9FUlJPUikKKwkJZXJyID0gLUVJTzsKK291dDoKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYml0bWFwX2xvYWQpOworCiBzdGF0aWMgc3NpemVfdAogbG9jYXRpb25fc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKIAlzc2l6ZV90IGxlbjsKLQlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpIHsKKwlpZiAobWRkZXYtPmJpdG1hcF9pbmZvLmZpbGUpCiAJCWxlbiA9IHNwcmludGYocGFnZSwgImZpbGUiKTsKLQl9IGVsc2UgaWYgKG1kZGV2LT5iaXRtYXBfaW5mby5vZmZzZXQpIHsKKwllbHNlIGlmIChtZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0KQogCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlK2xsZCIsIChsb25nIGxvbmcpbWRkZXYtPmJpdG1hcF9pbmZvLm9mZnNldCk7Ci0JfSBlbHNlCisJZWxzZQogCQlsZW4gPSBzcHJpbnRmKHBhZ2UsICJub25lIik7CiAJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJcbiIpOwogCXJldHVybiBsZW47CkBAIC0xODY3LDcgKzE5MjYsNyBAQAogCXNzaXplX3QgbGVuOwogCXVuc2lnbmVkIGxvbmcgc2VjcyA9IG1kZGV2LT5iaXRtYXBfaW5mby5kYWVtb25fc2xlZXAgLyBIWjsKIAl1bnNpZ25lZCBsb25nIGppZnMgPSBtZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwICUgSFo7Ci0JCisKIAlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlbHUiLCBzZWNzKTsKIAlpZiAoamlmcykKIAkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIuJTAzdSIsIGppZmZpZXNfdG9fbXNlY3MoamlmcykpOwpAQCAtMjA0OSwxMiArMjEwOCwzIEBACiAJLmF0dHJzID0gbWRfYml0bWFwX2F0dHJzLAogfTsKIAotCi0vKiB0aGUgYml0bWFwIEFQSSAtLSBmb3IgcmFpZCBwZXJzb25hbGl0aWVzICovCi1FWFBPUlRfU1lNQk9MKGJpdG1hcF9zdGFydHdyaXRlKTsKLUVYUE9SVF9TWU1CT0woYml0bWFwX2VuZHdyaXRlKTsKLUVYUE9SVF9TWU1CT0woYml0bWFwX3N0YXJ0X3N5bmMpOwotRVhQT1JUX1NZTUJPTChiaXRtYXBfZW5kX3N5bmMpOwotRVhQT1JUX1NZTUJPTChiaXRtYXBfdW5wbHVnKTsKLUVYUE9SVF9TWU1CT0woYml0bWFwX2Nsb3NlX3N5bmMpOwotRVhQT1JUX1NZTUJPTChiaXRtYXBfY29uZF9lbmRfc3luYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5oIGIvZHJpdmVycy9tZC9iaXRtYXAuaAppbmRleCAzNzk3ZGVhLi5lODcyYTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5oCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmgKQEAgLTIyMiw2ICsyMjIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZpbGVfcGFnZXM7IC8qIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgZmlsZSAqLwogCWludCBsYXN0X3BhZ2Vfc2l6ZTsgLyogYnl0ZXMgaW4gdGhlIGxhc3QgcGFnZSAqLwogCisJdW5zaWduZWQgbG9uZyBsb2dhdHRyczsgLyogdXNlZCB3aGVuIGZpbGVtYXBfYXR0ciBkb2Vzbid0IGV4aXN0CisJCQkJICogYmVjYXVzZSB3ZSBhcmUgd29ya2luZyB3aXRoIGEgZGlydHlfbG9nCisJCQkJICovCisKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW50IGFsbGNsZWFuOwpAQCAtMjQzLDEyICsyNDcsMTQgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBiZWhpbmRfd2FpdDsKIAogCXN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2Nhbl9jbGVhcjsKKwogfTsKIAogLyogdGhlIGJpdG1hcCBBUEkgKi8KIAogLyogdGhlc2UgYXJlIHVzZWQgb25seSBieSBtZC9iaXRtYXAgKi8KIGludCAgYml0bWFwX2NyZWF0ZShtZGRldl90ICptZGRldik7CitpbnQgYml0bWFwX2xvYWQobWRkZXZfdCAqbWRkZXYpOwogdm9pZCBiaXRtYXBfZmx1c2gobWRkZXZfdCAqbWRkZXYpOwogdm9pZCBiaXRtYXBfZGVzdHJveShtZGRldl90ICptZGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0taW8uYyBiL2RyaXZlcnMvbWQvZG0taW8uYwppbmRleCAxMGY0NTdjLi4wNTkwYzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWlvLmMKKysrIGIvZHJpdmVycy9tZC9kbS1pby5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIAlCVUdfT04obnVtX3JlZ2lvbnMgPiBETV9JT19NQVhfUkVHSU9OUyk7CiAKIAlpZiAoc3luYykKLQkJcncgfD0gKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKTsKKwkJcncgfD0gUkVRX1NZTkMgfCBSRVFfVU5QTFVHOwogCiAJLyoKIAkgKiBGb3IgbXVsdGlwbGUgcmVnaW9ucyB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gcmV3aW5kCkBAIC0zNjQsNyArMzY0LDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlZ2lvbnM7IGkrKykgewogCQkqZHAgPSBvbGRfcGFnZXM7Ci0JCWlmICh3aGVyZVtpXS5jb3VudCB8fCAocncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpKQorCQlpZiAod2hlcmVbaV0uY291bnQgfHwgKHJ3ICYgUkVRX0hBUkRCQVJSSUVSKSkKIAkJCWRvX3JlZ2lvbihydywgaSwgd2hlcmUgKyBpLCBkcCwgaW8pOwogCX0KIApAQCAtNDEyLDggKzQxMiw4IEBACiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlpZiAoaW8tPmVvcG5vdHN1cHBfYml0cyAmJiAocncgJiAoMSA8PCBCSU9fUldfQkFSUklFUikpKSB7Ci0JCXJ3ICY9IH4oMSA8PCBCSU9fUldfQkFSUklFUik7CisJaWYgKGlvLT5lb3Bub3RzdXBwX2JpdHMgJiYgKHJ3ICYgUkVRX0hBUkRCQVJSSUVSKSkgeworCQlydyAmPSB+UkVRX0hBUkRCQVJSSUVSOwogCQlnb3RvIHJldHJ5OwogCX0KIApAQCAtNDc5LDggKzQ3OSw4IEBACiAgKiBOZXcgY29sbGFwc2VkIChhKXN5bmNocm9ub3VzIGludGVyZmFjZS4KICAqCiAgKiBJZiB0aGUgSU8gaXMgYXN5bmNocm9ub3VzIChpLmUuIGl0IGhhcyBub3RpZnkuZm4pLCB5b3UgbXVzdCBlaXRoZXIgdW5wbHVnCi0gKiB0aGUgcXVldWUgd2l0aCBibGtfdW5wbHVnKCkgc29tZSB0aW1lIGxhdGVyIG9yIHNldCB0aGUgQklPX1JXX1NZTkMgYml0IGluCi0gKiBpb19yZXEtPmJpX3J3LiBJZiB5b3UgZmFpbCB0byBkbyBvbmUgb2YgdGhlc2UsIHRoZSBJTyB3aWxsIGJlIHN1Ym1pdHRlZCB0bworICogdGhlIHF1ZXVlIHdpdGggYmxrX3VucGx1ZygpIHNvbWUgdGltZSBsYXRlciBvciBzZXQgUkVRX1NZTkMgaW4KK2lvX3JlcS0+YmlfcncuIElmIHlvdSBmYWlsIHRvIGRvIG9uZSBvZiB0aGVzZSwgdGhlIElPIHdpbGwgYmUgc3VibWl0dGVkIHRvCiAgKiB0aGUgZGlzayBhZnRlciBxLT51bnBsdWdfZGVsYXksIHdoaWNoIGRlZmF1bHRzIHRvIDNtcyBpbiBibGstc2V0dGluZ3MuYy4KICAqLwogaW50IGRtX2lvKHN0cnVjdCBkbV9pb19yZXF1ZXN0ICppb19yZXEsIHVuc2lnbmVkIG51bV9yZWdpb25zLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1rY29weWQuYyBiL2RyaXZlcnMvbWQvZG0ta2NvcHlkLmMKaW5kZXggYWRkZjgzNC4uZDg1ODdiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1rY29weWQuYworKysgYi9kcml2ZXJzL21kL2RtLWtjb3B5ZC5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIHsKIAlpbnQgcjsKIAlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7Ci0JCS5iaV9ydyA9IGpvYi0+cncgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpLAorCQkuYmlfcncgPSBqb2ItPnJ3IHwgUkVRX1NZTkMgfCBSRVFfVU5QTFVHLAogCQkubWVtLnR5cGUgPSBETV9JT19QQUdFX0xJU1QsCiAJCS5tZW0ucHRyLnBsID0gam9iLT5wYWdlcywKIAkJLm1lbS5vZmZzZXQgPSBqb2ItPm9mZnNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCBkZGRhNTMxLi43NDEzNjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCkBAIC0xMjExLDcgKzEyMTEsNyBAQAogCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoKGVycm9yID09IC1FV09VTERCTE9DSykgJiYgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpKQorCWlmICgoZXJyb3IgPT0gLUVXT1VMREJMT0NLKSAmJiAoYmlvLT5iaV9ydyAmIFJFUV9SQUhFQUQpKQogCQlnb3RvIG91dDsKIAogCWlmICh1bmxpa2VseShlcnJvcikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCmluZGV4IGU2MTA3MjUuLmQ2ZTI4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJaWYgKCFlcnJvcikKIAkJcmV0dXJuIDA7IC8qIEkvTyBjb21wbGV0ZSAqLwogCi0JaWYgKChlcnJvciA9PSAtRVdPVUxEQkxPQ0spICYmIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0FIRUFEKSkKKwlpZiAoKGVycm9yID09IC1FV09VTERCTE9DSykgJiYgKGJpby0+YmlfcncgJiBSRVFfUkFIRUFEKSkKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKGVycm9yID09IC1FT1BOT1RTVVBQKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IGQyMWUxMjguLmEzZjIxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgpAQCAtMzM4LDYgKzMzOSw3IEBACiB7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kOwogCisJbG9ja19rZXJuZWwoKTsKIAlzcGluX2xvY2soJl9taW5vcl9sb2NrKTsKIAogCW1kID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwpAQCAtMzU1LDYgKzM1Nyw3IEBACiAKIG91dDoKIAlzcGluX3VubG9jaygmX21pbm9yX2xvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBtZCA/IDAgOiAtRU5YSU87CiB9CkBAIC0zNjIsOCArMzY1LDEyIEBACiBzdGF0aWMgaW50IGRtX2Jsa19jbG9zZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCWxvY2tfa2VybmVsKCk7CiAJYXRvbWljX2RlYygmbWQtPm9wZW5fY291bnQpOwogCWRtX3B1dChtZCk7CisJdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxNCw3ICs2MjEsNyBAQAogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPmRlZmVycmVkX2xvY2ssIGZsYWdzKTsKIAkJCWlmIChfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpIHsKLQkJCQlpZiAoIWJpb19yd19mbGFnZ2VkKGlvLT5iaW8sIEJJT19SV19CQVJSSUVSKSkKKwkJCQlpZiAoIShpby0+YmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikpCiAJCQkJCWJpb19saXN0X2FkZF9oZWFkKCZtZC0+ZGVmZXJyZWQsCiAJCQkJCQkJICBpby0+YmlvKTsKIAkJCX0gZWxzZQpAQCAtNjI2LDcgKzYzMyw3IEBACiAJCWlvX2Vycm9yID0gaW8tPmVycm9yOwogCQliaW8gPSBpby0+YmlvOwogCi0JCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkgeworCQlpZiAoYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikgewogCQkJLyoKIAkJCSAqIFRoZXJlIGNhbiBiZSBqdXN0IG9uZSBiYXJyaWVyIHJlcXVlc3Qgc28gd2UgdXNlCiAJCQkgKiBhIHBlci1kZXZpY2UgdmFyaWFibGUgZm9yIGVycm9yIHJlcG9ydGluZy4KQEAgLTc5MiwxMiArNzk5LDEyIEBACiB7CiAJaW50IHJ3ID0gcnFfZGF0YV9kaXIoY2xvbmUpOwogCWludCBydW5fcXVldWUgPSAxOwotCWJvb2wgaXNfYmFycmllciA9IGJsa19iYXJyaWVyX3JxKGNsb25lKTsKKwlib29sIGlzX2JhcnJpZXIgPSBjbG9uZS0+Y21kX2ZsYWdzICYgUkVRX0hBUkRCQVJSSUVSOwogCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbyA9IGNsb25lLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSB0aW8tPm1kOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IHRpby0+b3JpZzsKIAotCWlmIChibGtfcGNfcmVxdWVzdChycSkgJiYgIWlzX2JhcnJpZXIpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDICYmICFpc19iYXJyaWVyKSB7CiAJCXJxLT5lcnJvcnMgPSBjbG9uZS0+ZXJyb3JzOwogCQlycS0+cmVzaWRfbGVuID0gY2xvbmUtPnJlc2lkX2xlbjsKIApAQCAtODQ0LDcgKzg1MSw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBycS0+cTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKHVubGlrZWx5KGJsa19iYXJyaWVyX3JxKGNsb25lKSkpIHsKKwlpZiAodW5saWtlbHkoY2xvbmUtPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikpIHsKIAkJLyoKIAkJICogQmFycmllciBjbG9uZXMgc2hhcmUgYW4gb3JpZ2luYWwgcmVxdWVzdC4KIAkJICogTGVhdmUgaXQgdG8gZG1fZW5kX3JlcXVlc3QoKSwgd2hpY2ggaGFuZGxlcyB0aGlzIHNwZWNpYWwKQEAgLTk0Myw3ICs5NTAsNyBAQAogCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbyA9IGNsb25lLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0aW8tPm9yaWc7CiAKLQlpZiAodW5saWtlbHkoYmxrX2JhcnJpZXJfcnEoY2xvbmUpKSkgeworCWlmICh1bmxpa2VseShjbG9uZS0+Y21kX2ZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKSkgewogCQkvKgogCQkgKiBCYXJyaWVyIGNsb25lcyBzaGFyZSBhbiBvcmlnaW5hbCByZXF1ZXN0LiAgU28gY2FuJ3QgdXNlCiAJCSAqIHNvZnRpcnFfZG9uZSB3aXRoIHRoZSBvcmlnaW5hbC4KQEAgLTk3Miw3ICs5NzksNyBAQAogCXN0cnVjdCBkbV9ycV90YXJnZXRfaW8gKnRpbyA9IGNsb25lLT5lbmRfaW9fZGF0YTsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSB0aW8tPm9yaWc7CiAKLQlpZiAodW5saWtlbHkoYmxrX2JhcnJpZXJfcnEoY2xvbmUpKSkgeworCWlmICh1bmxpa2VseShjbG9uZS0+Y21kX2ZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKSkgewogCQkvKgogCQkgKiBCYXJyaWVyIGNsb25lcyBzaGFyZSBhbiBvcmlnaW5hbCByZXF1ZXN0LgogCQkgKiBMZWF2ZSBpdCB0byBkbV9lbmRfcmVxdWVzdCgpLCB3aGljaCBoYW5kbGVzIHRoaXMgc3BlY2lhbApAQCAtMTEwNiw3ICsxMTEzLDcgQEAKIAogCWNsb25lLT5iaV9zZWN0b3IgPSBzZWN0b3I7CiAJY2xvbmUtPmJpX2JkZXYgPSBiaW8tPmJpX2JkZXY7Ci0JY2xvbmUtPmJpX3J3ID0gYmlvLT5iaV9ydyAmIH4oMSA8PCBCSU9fUldfQkFSUklFUik7CisJY2xvbmUtPmJpX3J3ID0gYmlvLT5iaV9ydyAmIH5SRVFfSEFSREJBUlJJRVI7CiAJY2xvbmUtPmJpX3ZjbnQgPSAxOwogCWNsb25lLT5iaV9zaXplID0gdG9fYnl0ZXMobGVuKTsKIAljbG9uZS0+YmlfaW9fdmVjLT5idl9vZmZzZXQgPSBvZmZzZXQ7CkBAIC0xMTMzLDcgKzExNDAsNyBAQAogCiAJY2xvbmUgPSBiaW9fYWxsb2NfYmlvc2V0KEdGUF9OT0lPLCBiaW8tPmJpX21heF92ZWNzLCBicyk7CiAJX19iaW9fY2xvbmUoY2xvbmUsIGJpbyk7Ci0JY2xvbmUtPmJpX3J3ICY9IH4oMSA8PCBCSU9fUldfQkFSUklFUik7CisJY2xvbmUtPmJpX3J3ICY9IH5SRVFfSEFSREJBUlJJRVI7CiAJY2xvbmUtPmJpX2Rlc3RydWN0b3IgPSBkbV9iaW9fZGVzdHJ1Y3RvcjsKIAljbG9uZS0+Ymlfc2VjdG9yID0gc2VjdG9yOwogCWNsb25lLT5iaV9pZHggPSBpZHg7CkBAIC0xMzAxLDcgKzEzMDgsNyBAQAogCiAJY2kubWFwID0gZG1fZ2V0X2xpdmVfdGFibGUobWQpOwogCWlmICh1bmxpa2VseSghY2kubWFwKSkgewotCQlpZiAoIWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKQorCQlpZiAoIShiaW8tPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSKSkKIAkJCWJpb19pb19lcnJvcihiaW8pOwogCQllbHNlCiAJCQlpZiAoIW1kLT5iYXJyaWVyX2Vycm9yKQpAQCAtMTQxNCw3ICsxNDIxLDcgQEAKIAkgKiB3ZSBoYXZlIHRvIHF1ZXVlIHRoaXMgaW8gZm9yIGxhdGVyLgogCSAqLwogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChETUZfUVVFVUVfSU9fVE9fVEhSRUFELCAmbWQtPmZsYWdzKSkgfHwKLQkgICAgdW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CisJICAgIHVubGlrZWx5KGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpKSB7CiAJCXVwX3JlYWQoJm1kLT5pb19sb2NrKTsKIAogCQlpZiAodW5saWtlbHkodGVzdF9iaXQoRE1GX0JMT0NLX0lPX0ZPUl9TVVNQRU5ELCAmbWQtPmZsYWdzKSkgJiYKQEAgLTE0NTUsMjAgKzE0NjIsOSBAQAogCXJldHVybiBfZG1fcmVxdWVzdChxLCBiaW8pOwogfQogCi0vKgotICogTWFyayB0aGlzIHJlcXVlc3QgYXMgZmx1c2ggcmVxdWVzdCwgc28gdGhhdCBkbV9yZXF1ZXN0X2ZuKCkgY2FuCi0gKiByZWNvZ25pemUuCi0gKi8KLXN0YXRpYyB2b2lkIGRtX3JxX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKLQlycS0+Y21kWzBdID0gUkVRX0xCX09QX0ZMVVNIOwotfQotCiBzdGF0aWMgYm9vbCBkbV9ycV9pc19mbHVzaF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCi0JICAgIHJxLT5jbWRbMF0gPT0gUkVRX0xCX09QX0ZMVVNIKQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX0ZMVVNIKQogCQlyZXR1cm4gdHJ1ZTsKIAllbHNlCiAJCXJldHVybiBmYWxzZTsKQEAgLTE5MTIsOCArMTkwOCw3IEBACiAJYmxrX3F1ZXVlX3NvZnRpcnFfZG9uZShtZC0+cXVldWUsIGRtX3NvZnRpcnFfZG9uZSk7CiAJYmxrX3F1ZXVlX3ByZXBfcnEobWQtPnF1ZXVlLCBkbV9wcmVwX2ZuKTsKIAlibGtfcXVldWVfbGxkX2J1c3kobWQtPnF1ZXVlLCBkbV9sbGRfYnVzeSk7Ci0JYmxrX3F1ZXVlX29yZGVyZWQobWQtPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAotCQkJICBkbV9ycV9wcmVwYXJlX2ZsdXNoKTsKKwlibGtfcXVldWVfb3JkZXJlZChtZC0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0gpOwogCiAJbWQtPmRpc2sgPSBhbGxvY19kaXNrKDEpOwogCWlmICghbWQtPmRpc2spCkBAIC0yMjk2LDcgKzIyOTEsNyBAQAogCQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChjKTsKIAkJZWxzZSB7Ci0JCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYywgQklPX1JXX0JBUlJJRVIpKQorCQkJaWYgKGMtPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSKQogCQkJCXByb2Nlc3NfYmFycmllcihtZCwgYyk7CiAJCQllbHNlCiAJCQkJX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8obWQsIGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggN2UwZTA1Ny4uYmExOTA2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0yOTQsNyArMjk0LDcgQEAKIAlkZXZfaW5mb190ICp0bXBfZGV2OwogCXNlY3Rvcl90IHN0YXJ0X3NlY3RvcjsKIAotCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikpIHsKIAkJbWRfYmFycmllcl9yZXF1ZXN0KG1kZGV2LCBiaW8pOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggY2IyMGQwYi4uMTE1NjdjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPiAvKiBmb3IgaW52YWxpZGF0ZV9iZGV2ICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC0yNjEsNyArMjYyLDcgQEAKICAqIE9uY2UgLT5zdG9wIGlzIGNhbGxlZCBhbmQgY29tcGxldGVzLCB0aGUgbW9kdWxlIHdpbGwgYmUgY29tcGxldGVseQogICogdW51c2VkLgogICovCi1zdGF0aWMgdm9pZCBtZGRldl9zdXNwZW5kKG1kZGV2X3QgKm1kZGV2KQordm9pZCBtZGRldl9zdXNwZW5kKG1kZGV2X3QgKm1kZGV2KQogewogCUJVR19PTihtZGRldi0+c3VzcGVuZGVkKTsKIAltZGRldi0+c3VzcGVuZGVkID0gMTsKQEAgLTI2OSwxMyArMjcwLDE1IEBACiAJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgYXRvbWljX3JlYWQoJm1kZGV2LT5hY3RpdmVfaW8pID09IDApOwogCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAxKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X3N1c3BlbmQpOwogCi1zdGF0aWMgdm9pZCBtZGRldl9yZXN1bWUobWRkZXZfdCAqbWRkZXYpCit2b2lkIG1kZGV2X3Jlc3VtZShtZGRldl90ICptZGRldikKIHsKIAltZGRldi0+c3VzcGVuZGVkID0gMDsKIAl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CiAJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRkZXZfcmVzdW1lKTsKIAogaW50IG1kZGV2X2Nvbmdlc3RlZChtZGRldl90ICptZGRldiwgaW50IGJpdHMpCiB7CkBAIC0zNTMsNyArMzU2LDcgQEAKIAkJLyogYW4gZW1wdHkgYmFycmllciAtIGFsbCBkb25lICovCiAJCWJpb19lbmRpbyhiaW8sIDApOwogCWVsc2UgewotCQliaW8tPmJpX3J3ICY9IH4oMTw8QklPX1JXX0JBUlJJRVIpOworCQliaW8tPmJpX3J3ICY9IH5SRVFfSEFSREJBUlJJRVI7CiAJCWlmIChtZGRldi0+cGVycy0+bWFrZV9yZXF1ZXN0KG1kZGV2LCBiaW8pKQogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJbWRkZXYtPmJhcnJpZXIgPSBQT1NUX1JFUVVFU1RfQkFSUklFUjsKQEAgLTM4NCw2ICszODcsNTEgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWRfYmFycmllcl9yZXF1ZXN0KTsKIAorLyogU3VwcG9ydCBmb3IgcGx1Z2dpbmcuCisgKiBUaGlzIG1pcnJvcnMgdGhlIHBsdWdnaW5nIHN1cHBvcnQgaW4gcmVxdWVzdF9xdWV1ZSwgYnV0IGRvZXMgbm90CisgKiByZXF1aXJlIGhhdmluZyBhIHdob2xlIHF1ZXVlCisgKi8KK3N0YXRpYyB2b2lkIHBsdWdnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbHVnX2hhbmRsZSwgdW5wbHVnX3dvcmspOworCXBsdWctPnVucGx1Z19mbihwbHVnKTsKK30KK3N0YXRpYyB2b2lkIHBsdWdnZXJfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnID0gKHZvaWQgKilkYXRhOworCWtibG9ja2Rfc2NoZWR1bGVfd29yayhOVUxMLCAmcGx1Zy0+dW5wbHVnX3dvcmspOworfQordm9pZCBwbHVnZ2VyX2luaXQoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnLAorCQkgIHZvaWQgKCp1bnBsdWdfZm4pKHN0cnVjdCBwbHVnX2hhbmRsZSAqKSkKK3sKKwlwbHVnLT51bnBsdWdfZmxhZyA9IDA7CisJcGx1Zy0+dW5wbHVnX2ZuID0gdW5wbHVnX2ZuOworCWluaXRfdGltZXIoJnBsdWctPnVucGx1Z190aW1lcik7CisJcGx1Zy0+dW5wbHVnX3RpbWVyLmZ1bmN0aW9uID0gcGx1Z2dlcl90aW1lb3V0OworCXBsdWctPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcGx1ZzsKKwlJTklUX1dPUksoJnBsdWctPnVucGx1Z193b3JrLCBwbHVnZ2VyX3dvcmspOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGx1Z2dlcl9pbml0KTsKKwordm9pZCBwbHVnZ2VyX3NldF9wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUExVR0dFRF9GTEFHLCAmcGx1Zy0+dW5wbHVnX2ZsYWcpKQorCQltb2RfdGltZXIoJnBsdWctPnVucGx1Z190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMykrMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbHVnZ2VyX3NldF9wbHVnKTsKKworaW50IHBsdWdnZXJfcmVtb3ZlX3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUExVR0dFRF9GTEFHLCAmcGx1Zy0+dW5wbHVnX2ZsYWcpKSB7CisJCWRlbF90aW1lcigmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGx1Z2dlcl9yZW1vdmVfcGx1Zyk7CisKKwogc3RhdGljIGlubGluZSBtZGRldl90ICptZGRldl9nZXQobWRkZXZfdCAqbWRkZXYpCiB7CiAJYXRvbWljX2luYygmbWRkZXYtPmFjdGl2ZSk7CkBAIC00MTYsNyArNDY0LDcgQEAKIAlzcGluX3VubG9jaygmYWxsX21kZGV2c19sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgbWRkZXZfaW5pdChtZGRldl90ICptZGRldikKK3ZvaWQgbWRkZXZfaW5pdChtZGRldl90ICptZGRldikKIHsKIAltdXRleF9pbml0KCZtZGRldi0+b3Blbl9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKQEAgLTQzNiw2ICs0ODQsNyBAQAogCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOwogCW1kZGV2LT5sZXZlbCA9IExFVkVMX05PTkU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChtZGRldl9pbml0KTsKIAogc3RhdGljIG1kZGV2X3QgKiBtZGRldl9maW5kKGRldl90IHVuaXQpCiB7CkBAIC01MzIsMjUgKzU4MSwzMSBAQAogCQkgKiBhbiBhY2Nlc3MgdG8gdGhlIGZpbGVzIHdpbGwgdHJ5IHRvIHRha2UgcmVjb25maWdfbXV0ZXgKIAkJICogd2hpbGUgaG9sZGluZyB0aGUgZmlsZSB1bnJlbW92YWJsZSwgd2hpY2ggbGVhZHMgdG8KIAkJICogYSBkZWFkbG9jay4KLQkJICogU28gaG9sZCBvcGVuX211dGV4IGluc3RlYWQgLSB3ZSBhcmUgYWxsb3dlZCB0byB0YWtlCi0JCSAqIGl0IHdoaWxlIGhvbGRpbmcgcmVjb25maWdfbXV0ZXgsIGFuZCBtZF9ydW4gY2FuCi0JCSAqIHVzZSBpdCB0byB3YWl0IGZvciB0aGUgcmVtb3ZlIHRvIGNvbXBsZXRlLgorCQkgKiBTbyBob2xkIHNldCBzeXNmc19hY3RpdmUgd2hpbGUgdGhlIHJlbW92ZSBpbiBoYXBwZWluZywKKwkJICogYW5kIGFueXRoaW5nIGVsc2Ugd2hpY2ggbWlnaHQgc2V0IC0+dG9fcmVtb3ZlIG9yIG15CisJCSAqIG90aGVyd2lzZSBjaGFuZ2UgdGhlIHN5c2ZzIG5hbWVzcGFjZSB3aWxsIGZhaWwgd2l0aAorCQkgKiAtRUJVU1kgaWYgc3lzZnNfYWN0aXZlIGlzIHN0aWxsIHNldC4KKwkJICogV2Ugc2V0IHN5c2ZzX2FjdGl2ZSB1bmRlciByZWNvbmZpZ19tdXRleCBhbmQgZWxzZXdoZXJlCisJCSAqIHRlc3QgaXQgdW5kZXIgdGhlIHNhbWUgbXV0ZXggdG8gZW5zdXJlIGl0cyBjb3JyZWN0IHZhbHVlCisJCSAqIGlzIHNlZW4uCiAJCSAqLwogCQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICp0b19yZW1vdmUgPSBtZGRldi0+dG9fcmVtb3ZlOwogCQltZGRldi0+dG9fcmVtb3ZlID0gTlVMTDsKLQkJbXV0ZXhfbG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOworCQltZGRldi0+c3lzZnNfYWN0aXZlID0gMTsKIAkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwogCi0JCWlmICh0b19yZW1vdmUgIT0gJm1kX3JlZHVuZGFuY3lfZ3JvdXApCi0JCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1kZGV2LT5rb2JqLCB0b19yZW1vdmUpOwotCQlpZiAobWRkZXYtPnBlcnMgPT0gTlVMTCB8fAotCQkgICAgbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7Ci0JCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfcmVkdW5kYW5jeV9ncm91cCk7Ci0JCQlpZiAobWRkZXYtPnN5c2ZzX2FjdGlvbikKLQkJCQlzeXNmc19wdXQobWRkZXYtPnN5c2ZzX2FjdGlvbik7Ci0JCQltZGRldi0+c3lzZnNfYWN0aW9uID0gTlVMTDsKKwkJaWYgKG1kZGV2LT5rb2JqLnNkKSB7CisJCQlpZiAodG9fcmVtb3ZlICE9ICZtZF9yZWR1bmRhbmN5X2dyb3VwKQorCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosIHRvX3JlbW92ZSk7CisJCQlpZiAobWRkZXYtPnBlcnMgPT0gTlVMTCB8fAorCQkJICAgIG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QgPT0gTlVMTCkgeworCQkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmbWRkZXYtPmtvYmosICZtZF9yZWR1bmRhbmN5X2dyb3VwKTsKKwkJCQlpZiAobWRkZXYtPnN5c2ZzX2FjdGlvbikKKwkJCQkJc3lzZnNfcHV0KG1kZGV2LT5zeXNmc19hY3Rpb24pOworCQkJCW1kZGV2LT5zeXNmc19hY3Rpb24gPSBOVUxMOworCQkJfQogCQl9Ci0JCW11dGV4X3VubG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOworCQltZGRldi0+c3lzZnNfYWN0aXZlID0gMDsKIAl9IGVsc2UKIAkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwogCkBAIC02NzUsMTEgKzczMCwxMSBAQAogCSAqIGlmIHplcm8gaXMgcmVhY2hlZC4KIAkgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgY2FsbCBtZF9lcnJvcgogCSAqCi0JICogQXMgd2UgbWlnaHQgbmVlZCB0byByZXN1Ym1pdCB0aGUgcmVxdWVzdCBpZiBCSU9fUldfQkFSUklFUgorCSAqIEFzIHdlIG1pZ2h0IG5lZWQgdG8gcmVzdWJtaXQgdGhlIHJlcXVlc3QgaWYgUkVRX0hBUkRCQVJSSUVSCiAJICogY2F1c2VzIEVOT1RTVVBQLCB3ZSBhbGxvY2F0ZSBhIHNwYXJlIGJpby4uLgogCSAqLwogCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgMSk7Ci0JaW50IHJ3ID0gKDE8PEJJT19SVykgfCAoMTw8QklPX1JXX1NZTkNJTykgfCAoMTw8QklPX1JXX1VOUExVRyk7CisJaW50IHJ3ID0gUkVRX1dSSVRFIHwgUkVRX1NZTkMgfCBSRVFfVU5QTFVHOwogCiAJYmlvLT5iaV9iZGV2ID0gcmRldi0+YmRldjsKIAliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKQEAgLTY5MSw3ICs3NDYsNyBAQAogCWF0b21pY19pbmMoJm1kZGV2LT5wZW5kaW5nX3dyaXRlcyk7CiAJaWYgKCF0ZXN0X2JpdChCYXJyaWVyc05vdHN1cHAsICZyZGV2LT5mbGFncykpIHsKIAkJc3RydWN0IGJpbyAqcmJpbzsKLQkJcncgfD0gKDE8PEJJT19SV19CQVJSSUVSKTsKKwkJcncgfD0gUkVRX0hBUkRCQVJSSUVSOwogCQlyYmlvID0gYmlvX2Nsb25lKGJpbywgR0ZQX05PSU8pOwogCQlyYmlvLT5iaV9wcml2YXRlID0gYmlvOwogCQlyYmlvLT5iaV9lbmRfaW8gPSBzdXBlcl93cml0dGVuX2JhcnJpZXI7CkBAIC03MzYsNyArNzkxLDcgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBldmVudDsKIAlpbnQgcmV0OwogCi0JcncgfD0gKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfVU5QTFVHKTsKKwlydyB8PSBSRVFfU1lOQyB8IFJFUV9VTlBMVUc7CiAKIAliaW8tPmJpX2JkZXYgPSBiZGV2OwogCWJpby0+Ymlfc2VjdG9yID0gc2VjdG9yOwpAQCAtMTgxMSwxMSArMTg2Niw5IEBACiAJCWdvdG8gZmFpbDsKIAogCWtvID0gJnBhcnRfdG9fZGV2KHJkZXYtPmJkZXYtPmJkX3BhcnQpLT5rb2JqOwotCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2xpbmsoJnJkZXYtPmtvYmosIGtvLCAiYmxvY2siKSkpIHsKLQkJa29iamVjdF9kZWwoJnJkZXYtPmtvYmopOwotCQlnb3RvIGZhaWw7Ci0JfQotCXJkZXYtPnN5c2ZzX3N0YXRlID0gc3lzZnNfZ2V0X2RpcmVudChyZGV2LT5rb2JqLnNkLCBOVUxMLCAic3RhdGUiKTsKKwlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJnJkZXYtPmtvYmosIGtvLCAiYmxvY2siKSkKKwkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovOworCXJkZXYtPnN5c2ZzX3N0YXRlID0gc3lzZnNfZ2V0X2RpcmVudF9zYWZlKHJkZXYtPmtvYmouc2QsICJzdGF0ZSIpOwogCiAJbGlzdF9hZGRfcmN1KCZyZGV2LT5zYW1lX3NldCwgJm1kZGV2LT5kaXNrcyk7CiAJYmRfY2xhaW1fYnlfZGlzayhyZGV2LT5iZGV2LCByZGV2LT5iZGV2LT5iZF9ob2xkZXIsIG1kZGV2LT5nZW5kaXNrKTsKQEAgLTIzMzQsOCArMjM4Nyw4IEBACiAJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJZXJyID0gMDsKIAl9Ci0JaWYgKCFlcnIgJiYgcmRldi0+c3lzZnNfc3RhdGUpCi0JCXN5c2ZzX25vdGlmeV9kaXJlbnQocmRldi0+c3lzZnNfc3RhdGUpOworCWlmICghZXJyKQorCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCXJldHVybiBlcnIgPyBlcnIgOiBsZW47CiB9CiBzdGF0aWMgc3RydWN0IHJkZXZfc3lzZnNfZW50cnkgcmRldl9zdGF0ZSA9CkBAIC0yNDMwLDE0ICsyNDgzLDEwIEBACiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAkJCXJldHVybiBlcnI7CiAJCX0gZWxzZQotCQkJc3lzZnNfbm90aWZ5X2RpcmVudChyZGV2LT5zeXNmc19zdGF0ZSk7CisJCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CiAJCWlmIChzeXNmc19jcmVhdGVfbGluaygmcmRldi0+bWRkZXYtPmtvYmosICZyZGV2LT5rb2JqLCBubSkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIm1kOiBjYW5ub3QgcmVnaXN0ZXIgIgotCQkJICAgICAgICIlcyBmb3IgJXNcbiIsCi0JCQkgICAgICAgbm0sIG1kbmFtZShyZGV2LT5tZGRldikpOwotCisJCQkvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi87CiAJCS8qIGRvbid0IHdha2V1cCBhbnlvbmUsIGxlYXZlIHRoYXQgdG8gdXNlcnNwYWNlLiAqLwogCX0gZWxzZSB7CiAJCWlmIChzbG90ID49IHJkZXYtPm1kZGV2LT5yYWlkX2Rpc2tzKQpAQCAtMjQ0Nyw3ICsyNDk2LDcgQEAKIAkJY2xlYXJfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKIAkJY2xlYXJfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwogCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCXN5c2ZzX25vdGlmeV9kaXJlbnQocmRldi0+c3lzZnNfc3RhdGUpOworCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCX0KIAlyZXR1cm4gbGVuOwogfQpAQCAtMjY5NSw2ICsyNzQ0LDI0IEBACiAJLmRlZmF1bHRfYXR0cnMJPSByZGV2X2RlZmF1bHRfYXR0cnMsCiB9OwogCit2b2lkIG1kX3JkZXZfaW5pdChtZGtfcmRldl90ICpyZGV2KQoreworCXJkZXYtPmRlc2NfbnIgPSAtMTsKKwlyZGV2LT5zYXZlZF9yYWlkX2Rpc2sgPSAtMTsKKwlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKKwlyZGV2LT5mbGFncyA9IDA7CisJcmRldi0+ZGF0YV9vZmZzZXQgPSAwOworCXJkZXYtPnNiX2V2ZW50cyA9IDA7CisJcmRldi0+bGFzdF9yZWFkX2Vycm9yLnR2X3NlYyAgPSAwOworCXJkZXYtPmxhc3RfcmVhZF9lcnJvci50dl9uc2VjID0gMDsKKwlhdG9taWNfc2V0KCZyZGV2LT5ucl9wZW5kaW5nLCAwKTsKKwlhdG9taWNfc2V0KCZyZGV2LT5yZWFkX2Vycm9ycywgMCk7CisJYXRvbWljX3NldCgmcmRldi0+Y29ycmVjdGVkX2Vycm9ycywgMCk7CisKKwlJTklUX0xJU1RfSEVBRCgmcmRldi0+c2FtZV9zZXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJkZXYtPmJsb2NrZWRfd2FpdCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtZF9yZGV2X2luaXQpOwogLyoKICAqIEltcG9ydCBhIGRldmljZS4gSWYgJ3N1cGVyX2Zvcm1hdCcgPj0gMCwgdGhlbiBzYW5pdHkgY2hlY2sgdGhlIHN1cGVyYmxvY2sKICAqCkBAIC0yNzE4LDYgKzI3ODUsNyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKKwltZF9yZGV2X2luaXQocmRldik7CiAJaWYgKChlcnIgPSBhbGxvY19kaXNrX3NiKHJkZXYpKSkKIAkJZ290byBhYm9ydF9mcmVlOwogCkBAIC0yNzI3LDE4ICsyNzk1LDYgQEAKIAogCWtvYmplY3RfaW5pdCgmcmRldi0+a29iaiwgJnJkZXZfa3R5cGUpOwogCi0JcmRldi0+ZGVzY19uciA9IC0xOwotCXJkZXYtPnNhdmVkX3JhaWRfZGlzayA9IC0xOwotCXJkZXYtPnJhaWRfZGlzayA9IC0xOwotCXJkZXYtPmZsYWdzID0gMDsKLQlyZGV2LT5kYXRhX29mZnNldCA9IDA7Ci0JcmRldi0+c2JfZXZlbnRzID0gMDsKLQlyZGV2LT5sYXN0X3JlYWRfZXJyb3IudHZfc2VjICA9IDA7Ci0JcmRldi0+bGFzdF9yZWFkX2Vycm9yLnR2X25zZWMgPSAwOwotCWF0b21pY19zZXQoJnJkZXYtPm5yX3BlbmRpbmcsIDApOwotCWF0b21pY19zZXQoJnJkZXYtPnJlYWRfZXJyb3JzLCAwKTsKLQlhdG9taWNfc2V0KCZyZGV2LT5jb3JyZWN0ZWRfZXJyb3JzLCAwKTsKLQogCXNpemUgPSByZGV2LT5iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+IEJMT0NLX1NJWkVfQklUUzsKIAlpZiAoIXNpemUpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKQEAgLTI3NjcsOSArMjgyMyw2IEBACiAJCX0KIAl9CiAKLQlJTklUX0xJU1RfSEVBRCgmcmRldi0+c2FtZV9zZXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJkZXYtPmJsb2NrZWRfd2FpdCk7Ci0KIAlyZXR1cm4gcmRldjsKIAogYWJvcnRfZnJlZToKQEAgLTI5NjAsNyArMzAxMyw5IEBACiAJICogIC0gbmV3IHBlcnNvbmFsaXR5IHdpbGwgYWNjZXNzIG90aGVyIGFycmF5LgogCSAqLwogCi0JaWYgKG1kZGV2LT5zeW5jX3RocmVhZCB8fCBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpCisJaWYgKG1kZGV2LT5zeW5jX3RocmVhZCB8fAorCSAgICBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IgfHwKKwkgICAgbWRkZXYtPnN5c2ZzX2FjdGl2ZSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghbWRkZXYtPnBlcnMtPnF1aWVzY2UpIHsKQEAgLTM0MzcsNyArMzQ5Miw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAllbHNlIHsKLQkJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOworCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAkJcmV0dXJuIGxlbjsKIAl9CiB9CkBAIC0zNzM1LDcgKzM3OTAsNyBAQAogCX0KIAlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKLQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19hY3Rpb24pOworCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfYWN0aW9uKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC00MjgxLDEzICs0MzM2LDE0IEBACiAJCSAgICAgICBkaXNrLT5kaXNrX25hbWUpOwogCQllcnJvciA9IDA7CiAJfQotCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfYml0bWFwX2dyb3VwKSkKKwlpZiAobWRkZXYtPmtvYmouc2QgJiYKKwkgICAgc3lzZnNfY3JlYXRlX2dyb3VwKCZtZGRldi0+a29iaiwgJm1kX2JpdG1hcF9ncm91cCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJwb2ludGxlc3Mgd2FybmluZ1xuIik7CiAgYWJvcnQ6CiAJbXV0ZXhfdW5sb2NrKCZkaXNrc19tdXRleCk7Ci0JaWYgKCFlcnJvcikgeworCWlmICghZXJyb3IgJiYgbWRkZXYtPmtvYmouc2QpIHsKIAkJa29iamVjdF91ZXZlbnQoJm1kZGV2LT5rb2JqLCBLT0JKX0FERCk7Ci0JCW1kZGV2LT5zeXNmc19zdGF0ZSA9IHN5c2ZzX2dldF9kaXJlbnQobWRkZXYtPmtvYmouc2QsIE5VTEwsICJhcnJheV9zdGF0ZSIpOworCQltZGRldi0+c3lzZnNfc3RhdGUgPSBzeXNmc19nZXRfZGlyZW50X3NhZmUobWRkZXYtPmtvYmouc2QsICJhcnJheV9zdGF0ZSIpOwogCX0KIAltZGRldl9wdXQobWRkZXYpOwogCXJldHVybiBlcnJvcjsKQEAgLTQzMjUsMTQgKzQzODEsMTQgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZtZGRldi0+d3JpdGVzX3BlbmRpbmcpKSB7CiAJCW1kZGV2LT5zYWZlbW9kZSA9IDE7CiAJCWlmIChtZGRldi0+ZXh0ZXJuYWwpCi0JCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19zdGF0ZSk7CisJCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAl9CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIH0KIAogc3RhdGljIGludCBzdGFydF9kaXJ0eV9kZWdyYWRlZDsKIAotc3RhdGljIGludCBtZF9ydW4obWRkZXZfdCAqbWRkZXYpCitpbnQgbWRfcnVuKG1kZGV2X3QgKm1kZGV2KQogewogCWludCBlcnI7CiAJbWRrX3JkZXZfdCAqcmRldjsKQEAgLTQzNDQsMTMgKzQ0MDAsOSBAQAogCiAJaWYgKG1kZGV2LT5wZXJzKQogCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogVGhlc2UgdHdvIGNhbGxzIHN5bmNocm9uaXNlIHVzIHdpdGggdGhlCi0JICogc3lzZnNfcmVtb3ZlX2dyb3VwIGNhbGxzIGluIG1kZGV2X3VubG9jaywKLQkgKiBzbyB0aGV5IG11c3QgaGF2ZSBjb21wbGV0ZWQuCi0JICovCi0JbXV0ZXhfbG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOwotCW11dGV4X3VubG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOworCS8qIENhbm5vdCBydW4gdW50aWwgcHJldmlvdXMgc3RvcCBjb21wbGV0ZXMgcHJvcGVybHkgKi8KKwlpZiAobWRkZXYtPnN5c2ZzX2FjdGl2ZSkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCS8qCiAJICogQW5hbHl6ZSBhbGwgUkFJRCBzdXBlcmJsb2NrKHMpCkBAIC00Mzk3LDcgKzQ0NDksNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9Ci0JCXN5c2ZzX25vdGlmeV9kaXJlbnQocmRldi0+c3lzZnNfc3RhdGUpOworCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCX0KIAogCXNwaW5fbG9jaygmcGVyc19sb2NrKTsKQEAgLTQ0OTYsMTEgKzQ1NDgsMTIgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKG1kZGV2LT5wZXJzLT5zeW5jX3JlcXVlc3QpIHsKLQkJaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmbWRkZXYtPmtvYmosICZtZF9yZWR1bmRhbmN5X2dyb3VwKSkKKwkJaWYgKG1kZGV2LT5rb2JqLnNkICYmCisJCSAgICBzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmbWRfcmVkdW5kYW5jeV9ncm91cCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIm1kOiBjYW5ub3QgcmVnaXN0ZXIgZXh0cmEgYXR0cmlidXRlcyBmb3IgJXNcbiIsCiAJCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0JCW1kZGV2LT5zeXNmc19hY3Rpb24gPSBzeXNmc19nZXRfZGlyZW50KG1kZGV2LT5rb2JqLnNkLCBOVUxMLCAic3luY19hY3Rpb24iKTsKKwkJbWRkZXYtPnN5c2ZzX2FjdGlvbiA9IHN5c2ZzX2dldF9kaXJlbnRfc2FmZShtZGRldi0+a29iai5zZCwgInN5bmNfYWN0aW9uIik7CiAJfSBlbHNlIGlmIChtZGRldi0+cm8gPT0gMikgLyogYXV0by1yZWFkb25seSBub3QgbWVhbmluZ2Z1bCAqLwogCQltZGRldi0+cm8gPSAwOwogCkBAIC00NTE4LDggKzQ1NzEsNyBAQAogCQkJY2hhciBubVsyMF07CiAJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CiAJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLCAmcmRldi0+a29iaiwgbm0pKQotCQkJCXByaW50aygibWQ6IGNhbm5vdCByZWdpc3RlciAlcyBmb3IgJXNcbiIsCi0JCQkJICAgICAgIG5tLCBtZG5hbWUobWRkZXYpKTsKKwkJCQkvKiBmYWlsdXJlIGhlcmUgaXMgT0sgKi87CiAJCX0KIAkKIAlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC00NTMxLDEyICs0NTgzLDEyIEBACiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+c3luY190aHJlYWQpOyAvKiBwb3NzaWJseSBraWNrIG9mZiBhIHJlc2hhcGUgKi8KIAogCW1kX25ld19ldmVudChtZGRldik7Ci0Jc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOwotCWlmIChtZGRldi0+c3lzZnNfYWN0aW9uKQotCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19hY3Rpb24pOworCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfc3RhdGUpOworCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfYWN0aW9uKTsKIAlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAiZGVncmFkZWQiKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG1kX3J1bik7CiAKIHN0YXRpYyBpbnQgZG9fbWRfcnVuKG1kZGV2X3QgKm1kZGV2KQogewpAQCAtNDU0NSw3ICs0NTk3LDExIEBACiAJZXJyID0gbWRfcnVuKG1kZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQorCWVyciA9IGJpdG1hcF9sb2FkKG1kZGV2KTsKKwlpZiAoZXJyKSB7CisJCWJpdG1hcF9kZXN0cm95KG1kZGV2KTsKKwkJZ290byBvdXQ7CisJfQogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldmFsaWRhdGVfZGlzayhtZGRldi0+Z2VuZGlzayk7CiAJa29iamVjdF91ZXZlbnQoJmRpc2tfdG9fZGV2KG1kZGV2LT5nZW5kaXNrKS0+a29iaiwgS09CSl9DSEFOR0UpOwpAQCAtNDU3Myw3ICs0NjI5LDcgQEAKIAlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7Ci0Jc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOworCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfc3RhdGUpOwogCXJldHVybiAwOwogfQogCkBAIC00NjQ0LDkgKzQ3MDAsMTAgQEAKIAltZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplID0gMDsKIAltZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gMDsKIAltZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCA9IDA7CisJbWRkZXYtPnBsdWcgPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBtZF9zdG9wX3dyaXRlcyhtZGRldl90ICptZGRldikKK3ZvaWQgbWRfc3RvcF93cml0ZXMobWRkZXZfdCAqbWRkZXYpCiB7CiAJaWYgKG1kZGV2LT5zeW5jX3RocmVhZCkgewogCQlzZXRfYml0KE1EX1JFQ09WRVJZX0ZST1pFTiwgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC00NjY2LDExICs0NzIzLDEwIEBACiAJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfc3RvcF93cml0ZXMpOwogCi1zdGF0aWMgdm9pZCBtZF9zdG9wKG1kZGV2X3QgKm1kZGV2KQordm9pZCBtZF9zdG9wKG1kZGV2X3QgKm1kZGV2KQogewotCW1kX3N0b3Bfd3JpdGVzKG1kZGV2KTsKLQogCW1kZGV2LT5wZXJzLT5zdG9wKG1kZGV2KTsKIAlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCAmJiBtZGRldi0+dG9fcmVtb3ZlID09IE5VTEwpCiAJCW1kZGV2LT50b19yZW1vdmUgPSAmbWRfcmVkdW5kYW5jeV9ncm91cDsKQEAgLTQ2NzgsNiArNDczNCw3IEBACiAJbWRkZXYtPnBlcnMgPSBOVUxMOwogCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9GUk9aRU4sICZtZGRldi0+cmVjb3ZlcnkpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfc3RvcCk7CiAKIHN0YXRpYyBpbnQgbWRfc2V0X3JlYWRvbmx5KG1kZGV2X3QgKm1kZGV2LCBpbnQgaXNfb3BlbikKIHsKQEAgLTQ2OTcsNyArNDc1NCw3IEBACiAJCW1kZGV2LT5ybyA9IDE7CiAJCXNldF9kaXNrX3JvKG1kZGV2LT5nZW5kaXNrLCAxKTsKIAkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX0ZST1pFTiwgJm1kZGV2LT5yZWNvdmVyeSk7Ci0JCXN5c2ZzX25vdGlmeV9kaXJlbnQobWRkZXYtPnN5c2ZzX3N0YXRlKTsKKwkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKG1kZGV2LT5zeXNmc19zdGF0ZSk7CiAJCWVyciA9IDA7CQogCX0KIG91dDoKQEAgLTQ3MTEsMjYgKzQ3NjgsMjkgQEAKICAqLwogc3RhdGljIGludCBkb19tZF9zdG9wKG1kZGV2X3QgKiBtZGRldiwgaW50IG1vZGUsIGludCBpc19vcGVuKQogewotCWludCBlcnIgPSAwOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gbWRkZXYtPmdlbmRpc2s7CiAJbWRrX3JkZXZfdCAqcmRldjsKIAogCW11dGV4X2xvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKLQlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5vcGVuZXJzKSA+IGlzX29wZW4pIHsKKwlpZiAoYXRvbWljX3JlYWQoJm1kZGV2LT5vcGVuZXJzKSA+IGlzX29wZW4gfHwKKwkgICAgbWRkZXYtPnN5c2ZzX2FjdGl2ZSkgewogCQlwcmludGsoIm1kOiAlcyBzdGlsbCBpbiB1c2UuXG4iLG1kbmFtZShtZGRldikpOwotCQllcnIgPSAtRUJVU1k7Ci0JfSBlbHNlIGlmIChtZGRldi0+cGVycykgeworCQltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKKwlpZiAobWRkZXYtPnBlcnMpIHsKIAkJaWYgKG1kZGV2LT5ybykKIAkJCXNldF9kaXNrX3JvKGRpc2ssIDApOwogCisJCW1kX3N0b3Bfd3JpdGVzKG1kZGV2KTsKIAkJbWRfc3RvcChtZGRldik7CiAJCW1kZGV2LT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiA9IE5VTEw7CiAJCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gTlVMTDsKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IE5VTEw7CiAKIAkJLyogdGVsbCB1c2Vyc3BhY2UgdG8gaGFuZGxlICdpbmFjdGl2ZScgKi8KLQkJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOworCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQogCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CkBAIC00NzQwLDIxICs0ODAwLDE3IEBACiAJCQl9CiAKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOworCQltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKIAkJcmV2YWxpZGF0ZV9kaXNrKGRpc2spOwogCiAJCWlmIChtZGRldi0+cm8pCiAJCQltZGRldi0+cm8gPSAwOwotCQkKLQkJZXJyID0gMDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZtZGRldi0+b3Blbl9tdXRleCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwl9IGVsc2UKKwkJbXV0ZXhfdW5sb2NrKCZtZGRldi0+b3Blbl9tdXRleCk7CiAJLyoKIAkgKiBGcmVlIHJlc291cmNlcyBpZiBmaW5hbCBzdG9wCiAJICovCiAJaWYgKG1vZGUgPT0gMCkgewotCiAJCXByaW50ayhLRVJOX0lORk8gIm1kOiAlcyBzdG9wcGVkLlxuIiwgbWRuYW1lKG1kZGV2KSk7CiAKIAkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwpAQCAtNDc3MSwxMyArNDgyNywxMSBAQAogCQlrb2JqZWN0X3VldmVudCgmZGlza190b19kZXYobWRkZXYtPmdlbmRpc2spLT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAJCWlmIChtZGRldi0+aG9sZF9hY3RpdmUgPT0gVU5USUxfU1RPUCkKIAkJCW1kZGV2LT5ob2xkX2FjdGl2ZSA9IDA7Ci0KIAl9Ci0JZXJyID0gMDsKIAlibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIoZGlzayk7CiAJbWRfbmV3X2V2ZW50KG1kZGV2KTsKLQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19zdGF0ZSk7Ci0JcmV0dXJuIGVycjsKKwlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKKwlyZXR1cm4gMDsKIH0KIAogI2lmbmRlZiBNT0RVTEUKQEAgLTUxMzgsNyArNTE5Miw3IEBACiAJCWlmIChlcnIpCiAJCQlleHBvcnRfcmRldihyZGV2KTsKIAkJZWxzZQotCQkJc3lzZnNfbm90aWZ5X2RpcmVudChyZGV2LT5zeXNmc19zdGF0ZSk7CisJCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCiAJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAJCWlmIChtZGRldi0+ZGVncmFkZWQpCkBAIC01MzMxLDggKzUzODUsMTEgQEAKIAllcnIgPSAwOwogCWlmIChtZGRldi0+cGVycykgewogCQltZGRldi0+cGVycy0+cXVpZXNjZShtZGRldiwgMSk7Ci0JCWlmIChmZCA+PSAwKQorCQlpZiAoZmQgPj0gMCkgewogCQkJZXJyID0gYml0bWFwX2NyZWF0ZShtZGRldik7CisJCQlpZiAoIWVycikKKwkJCQllcnIgPSBiaXRtYXBfbG9hZChtZGRldik7CisJCX0KIAkJaWYgKGZkIDwgMCB8fCBlcnIpIHsKIAkJCWJpdG1hcF9kZXN0cm95KG1kZGV2KTsKIAkJCWZkID0gLTE7IC8qIG1ha2Ugc3VyZSB0byBwdXQgdGhlIGZpbGUgKi8KQEAgLTU1ODEsNiArNTYzOCw4IEBACiAJCQkJbWRkZXYtPmJpdG1hcF9pbmZvLmRlZmF1bHRfb2Zmc2V0OwogCQkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDEpOwogCQkJcnYgPSBiaXRtYXBfY3JlYXRlKG1kZGV2KTsKKwkJCWlmICghcnYpCisJCQkJcnYgPSBiaXRtYXBfbG9hZChtZGRldik7CiAJCQlpZiAocnYpCiAJCQkJYml0bWFwX2Rlc3Ryb3kobWRkZXYpOwogCQkJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDApOwpAQCAtNTgxMyw3ICs1ODcyLDcgQEAKIAlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gTURfTUFKT1IgJiYgbWRkZXYtPnJvICYmIG1kZGV2LT5wZXJzKSB7CiAJCWlmIChtZGRldi0+cm8gPT0gMikgewogCQkJbWRkZXYtPnJvID0gMDsKLQkJCXN5c2ZzX25vdGlmeV9kaXJlbnQobWRkZXYtPnN5c2ZzX3N0YXRlKTsKKwkJCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfc3RhdGUpOwogCQkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCQkJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAkJfSBlbHNlIHsKQEAgLTU5MDIsNiArNTk2MSw3IEBACiAJbWRkZXZfdCAqbWRkZXYgPSBtZGRldl9maW5kKGJkZXYtPmJkX2Rldik7CiAJaW50IGVycjsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKG1kZGV2LT5nZW5kaXNrICE9IGJkZXYtPmJkX2Rpc2spIHsKIAkJLyogd2UgYXJlIHJhY2luZyB3aXRoIG1kZGV2X3B1dCB3aGljaCBpcyBkaXNjYXJkaW5nIHRoaXMKIAkJICogYmRfZGlzay4KQEAgLTU5MTAsNiArNTk3MCw3IEBACiAJCS8qIFdhaXQgdW50aWwgYmRldi0+YmRfZGlzayBpcyBkZWZpbml0ZWx5IGdvbmUgKi8KIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAkJLyogVGhlbiByZXRyeSB0aGUgb3BlbiBmcm9tIHRoZSB0b3AgKi8KKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KIAlCVUdfT04obWRkZXYgIT0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhKTsKQEAgLTU5MjMsNiArNTk4NCw3IEBACiAKIAljaGVja19kaXNrX3NpemVfY2hhbmdlKG1kZGV2LT5nZW5kaXNrLCBiZGV2KTsKICBvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTU5MzEsOCArNTk5MywxMCBAQAogIAltZGRldl90ICptZGRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKIAogCUJVR19PTighbWRkZXYpOworCWxvY2tfa2VybmVsKCk7CiAJYXRvbWljX2RlYygmbWRkZXYtPm9wZW5lcnMpOwogCW1kZGV2X3B1dChtZGRldik7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MDU5LDEwICs2MTIzLDEyIEBACiAJbWRkZXYtPnBlcnMtPmVycm9yX2hhbmRsZXIobWRkZXYscmRldik7CiAJaWYgKG1kZGV2LT5kZWdyYWRlZCkKIAkJc2V0X2JpdChNRF9SRUNPVkVSWV9SRUNPVkVSLCAmbWRkZXYtPnJlY292ZXJ5KTsKLQlzeXNmc19ub3RpZnlfZGlyZW50KHJkZXYtPnN5c2ZzX3N0YXRlKTsKKwlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUocmRldi0+c3lzZnNfc3RhdGUpOwogCXNldF9iaXQoTURfUkVDT1ZFUllfSU5UUiwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOwogCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJaWYgKG1kZGV2LT5ldmVudF93b3JrLmZ1bmMpCisJCXNjaGVkdWxlX3dvcmsoJm1kZGV2LT5ldmVudF93b3JrKTsKIAltZF9uZXdfZXZlbnRfaW5pbnRyKG1kZGV2KTsKIH0KIApAQCAtNjUyMCw3ICs2NTg2LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CiAJfQogCWlmIChkaWRfY2hhbmdlKQotCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19zdGF0ZSk7CisJCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfc3RhdGUpOwogCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsCiAJCSAgICF0ZXN0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpICYmCiAJCSAgICF0ZXN0X2JpdChNRF9DSEFOR0VfUEVORElORywgJm1kZGV2LT5mbGFncykpOwpAQCAtNjU2Myw3ICs2NjI5LDcgQEAKIAkJCW1kZGV2LT5zYWZlbW9kZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycSgmbWRkZXYtPndyaXRlX2xvY2spOwogCQltZF91cGRhdGVfc2IobWRkZXYsIDApOwotCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19zdGF0ZSk7CisJCXN5c2ZzX25vdGlmeV9kaXJlbnRfc2FmZShtZGRldi0+c3lzZnNfc3RhdGUpOwogCX0gZWxzZQogCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIApAQCAtNjU3NCw2ICs2NjQwLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9hbGxvd193cml0ZSk7CiAKK3ZvaWQgbWRfdW5wbHVnKG1kZGV2X3QgKm1kZGV2KQoreworCWlmIChtZGRldi0+cXVldWUpCisJCWJsa191bnBsdWcobWRkZXYtPnF1ZXVlKTsKKwlpZiAobWRkZXYtPnBsdWcpCisJCW1kZGV2LT5wbHVnLT51bnBsdWdfZm4obWRkZXYtPnBsdWcpOworfQorCiAjZGVmaW5lIFNZTkNfTUFSS1MJMTAKICNkZWZpbmUJU1lOQ19NQVJLX1NURVAJKDMqSFopCiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpCkBAIC02NzUyLDEyICs2ODI2LDEzIEBACiAJCSAgICAgPj0gbWRkZXYtPnJlc3luY19tYXggLSBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkCiAJCQkgICAgKSkgewogCQkJLyogdGltZSB0byB1cGRhdGUgY3Vycl9yZXN5bmNfY29tcGxldGVkICovCi0JCQlibGtfdW5wbHVnKG1kZGV2LT5xdWV1ZSk7CisJCQltZF91bnBsdWcobWRkZXYpOwogCQkJd2FpdF9ldmVudChtZGRldi0+cmVjb3Zlcnlfd2FpdCwKIAkJCQkgICBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkgPT0gMCk7CiAJCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0KIAkJCQltZGRldi0+Y3Vycl9yZXN5bmM7Ci0JCQlzZXRfYml0KE1EX0NIQU5HRV9DTEVBTiwgJm1kZGV2LT5mbGFncyk7CisJCQlpZiAobWRkZXYtPnBlcnNpc3RlbnQpCisJCQkJc2V0X2JpdChNRF9DSEFOR0VfQ0xFQU4sICZtZGRldi0+ZmxhZ3MpOwogCQkJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJCX0KIApAQCAtNjgyOSw3ICs2OTA0LDcgQEAKIAkJICogYWJvdXQgbm90IG92ZXJsb2FkaW5nIHRoZSBJTyBzdWJzeXN0ZW0uICh0aGluZ3MgbGlrZSBhbgogCQkgKiBlMmZzY2sgYmVpbmcgZG9uZSBvbiB0aGUgUkFJRCBhcnJheSBzaG91bGQgZXhlY3V0ZSBmYXN0KQogCQkgKi8KLQkJYmxrX3VucGx1ZyhtZGRldi0+cXVldWUpOworCQltZF91bnBsdWcobWRkZXYpOwogCQljb25kX3Jlc2NoZWQoKTsKIAogCQljdXJyc3BlZWQgPSAoKHVuc2lnbmVkIGxvbmcpKGlvX3NlY3RvcnMtbWRkZXYtPnJlc3luY19tYXJrX2NudCkpLzIKQEAgLTY4NDgsNyArNjkyMyw3IEBACiAJICogdGhpcyBhbHNvIHNpZ25hbHMgJ2ZpbmlzaGVkIHJlc3luY2luZycgdG8gbWRfc3RvcAogCSAqLwogIG91dDoKLQlibGtfdW5wbHVnKG1kZGV2LT5xdWV1ZSk7CisJbWRfdW5wbHVnKG1kZGV2KTsKIAogCXdhaXRfZXZlbnQobWRkZXYtPnJlY292ZXJ5X3dhaXQsICFhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkpOwogCkBAIC02OTUwLDEwICs3MDI1LDcgQEAKIAkJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQkJCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJm1kZGV2LT5rb2JqLAogCQkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCi0JCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCQkgICAgICAgIm1kOiBjYW5ub3QgcmVnaXN0ZXIgIgotCQkJCQkJICAgICAgICIlcyBmb3IgJXNcbiIsCi0JCQkJCQkgICAgICAgbm0sIG1kbmFtZShtZGRldikpOworCQkJCQkJLyogZmFpbHVyZSBoZXJlIGlzIE9LICovOwogCQkJCQlzcGFyZXMrKzsKIAkJCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAkJCQkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CkBAIC03MDQ2LDcgKzcxMTgsNyBAQAogCQkJCW1kZGV2LT5zYWZlbW9kZSA9IDA7CiAJCQlzcGluX3VubG9ja19pcnEoJm1kZGV2LT53cml0ZV9sb2NrKTsKIAkJCWlmIChkaWRfY2hhbmdlKQotCQkJCXN5c2ZzX25vdGlmeV9kaXJlbnQobWRkZXYtPnN5c2ZzX3N0YXRlKTsKKwkJCQlzeXNmc19ub3RpZnlfZGlyZW50X3NhZmUobWRkZXYtPnN5c2ZzX3N0YXRlKTsKIAkJfQogCiAJCWlmIChtZGRldi0+ZmxhZ3MpCkBAIC03MDg1LDcgKzcxNTcsNyBAQAogCQkJbWRkZXYtPnJlY292ZXJ5ID0gMDsKIAkJCS8qIGZsYWcgcmVjb3ZlcnkgbmVlZGVkIGp1c3QgdG8gZG91YmxlIGNoZWNrICovCiAJCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7Ci0JCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19hY3Rpb24pOworCQkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKG1kZGV2LT5zeXNmc19hY3Rpb24pOwogCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CkBAIC03MTQ3LDcgKzcyMTksNyBAQAogCQkJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJCQl9IGVsc2UKIAkJCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT5zeW5jX3RocmVhZCk7Ci0JCQlzeXNmc19ub3RpZnlfZGlyZW50KG1kZGV2LT5zeXNmc19hY3Rpb24pOworCQkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKG1kZGV2LT5zeXNmc19hY3Rpb24pOwogCQkJbWRfbmV3X2V2ZW50KG1kZGV2KTsKIAkJfQogCXVubG9jazoKQEAgLTcxNTYsNyArNzIyOCw3IEBACiAJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE1EX1JFQ09WRVJZX1JFQ09WRVIsCiAJCQkJCSAgICAgICAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJCQlpZiAobWRkZXYtPnN5c2ZzX2FjdGlvbikKLQkJCQkJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfYWN0aW9uKTsKKwkJCQkJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKG1kZGV2LT5zeXNmc19hY3Rpb24pOwogCQl9CiAJCW1kZGV2X3VubG9jayhtZGRldik7CiAJfQpAQCAtNzE2NCw3ICs3MjM2LDcgQEAKIAogdm9pZCBtZF93YWl0X2Zvcl9ibG9ja2VkX3JkZXYobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpCiB7Ci0Jc3lzZnNfbm90aWZ5X2RpcmVudChyZGV2LT5zeXNmc19zdGF0ZSk7CisJc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHJkZXYtPnN5c2ZzX3N0YXRlKTsKIAl3YWl0X2V2ZW50X3RpbWVvdXQocmRldi0+YmxvY2tlZF93YWl0LAogCQkJICAgIXRlc3RfYml0KEJsb2NrZWQsICZyZGV2LT5mbGFncyksCiAJCQkgICBtc2Vjc190b19qaWZmaWVzKDUwMDApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCAxMDU5N2JmLi5hOTUzZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0yOSw2ICsyOSwyNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbWRkZXZfcyBtZGRldl90OwogdHlwZWRlZiBzdHJ1Y3QgbWRrX3JkZXZfcyBtZGtfcmRldl90OwogCisvKiBnZW5lcmljIHBsdWdnaW5nIHN1cHBvcnQgLSBsaWtlIHRoYXQgcHJvdmlkZWQgd2l0aCByZXF1ZXN0X3F1ZXVlLAorICogYnV0IGRvZXMgbm90IHJlcXVpcmUgYSByZXF1ZXN0X3F1ZXVlCisgKi8KK3N0cnVjdCBwbHVnX2hhbmRsZSB7CisJdm9pZAkJCSgqdW5wbHVnX2ZuKShzdHJ1Y3QgcGx1Z19oYW5kbGUgKik7CisJc3RydWN0IHRpbWVyX2xpc3QJdW5wbHVnX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdAl1bnBsdWdfd29yazsKKwl1bnNpZ25lZCBsb25nCQl1bnBsdWdfZmxhZzsKK307CisjZGVmaW5lCVBMVUdHRURfRkxBRyAxCit2b2lkIHBsdWdnZXJfaW5pdChzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcsCisJCSAgdm9pZCAoKnVucGx1Z19mbikoc3RydWN0IHBsdWdfaGFuZGxlICopKTsKK3ZvaWQgcGx1Z2dlcl9zZXRfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpOworaW50IHBsdWdnZXJfcmVtb3ZlX3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbHVnZ2VyX2ZsdXNoKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKK3sKKwlkZWxfdGltZXJfc3luYygmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKKwljYW5jZWxfd29ya19zeW5jKCZwbHVnLT51bnBsdWdfd29yayk7Cit9CisKIC8qCiAgKiBNRCdzICdleHRlbmRlZCcgZGV2aWNlCiAgKi8KQEAgLTY3LDcgKzg3LDcgQEAKICNkZWZpbmUJRmF1bHR5CQkxCQkvKiBkZXZpY2UgaXMga25vd24gdG8gaGF2ZSBhIGZhdWx0ICovCiAjZGVmaW5lCUluX3N5bmMJCTIJCS8qIGRldmljZSBpcyBpbl9zeW5jIHdpdGggcmVzdCBvZiBhcnJheSAqLwogI2RlZmluZQlXcml0ZU1vc3RseQk0CQkvKiBBdm9pZCByZWFkaW5nIGlmIGF0IGFsbCBwb3NzaWJsZSAqLwotI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogUkVRX0hBUkRCQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQgKi8KICNkZWZpbmUJQWxsUmVzZXJ2ZWQJNgkJLyogSWYgd2hvbGUgZGV2aWNlIGlzIHJlc2VydmVkIGZvcgogCQkJCQkgKiBvbmUgYXJyYXkgKi8KICNkZWZpbmUJQXV0b0RldGVjdGVkCTcJCS8qIGFkZGVkIGJ5IGF1dG8tZGV0ZWN0ICovCkBAIC0xMjUsNiArMTQ1LDEwIEBACiAJaW50CQkJCXN1c3BlbmRlZDsKIAlhdG9taWNfdAkJCWFjdGl2ZV9pbzsKIAlpbnQJCQkJcm87CisJaW50CQkJCXN5c2ZzX2FjdGl2ZTsgLyogc2V0IHdoZW4gc3lzZnMgZGVsZXRlcworCQkJCQkJICAgICAgICogYXJlIGhhcHBlbmluZywgc28gcnVuLworCQkJCQkJICAgICAgICogdGFrZW92ZXIvc3RvcCBhcmUgbm90IHNhZmUKKwkJCQkJCSAgICAgICAqLwogCiAJc3RydWN0IGdlbmRpc2sJCQkqZ2VuZGlzazsKIApAQCAtMjU0LDcgKzI3OCw3IEBACiAJCQkJCQkJICogZmFpbHMuICBPbmx5IHN1cHBvcnRlZAogCQkJCQkJCSAqLwogCXN0cnVjdCBiaW8JCQkqYmlvbGlzdDsgCS8qIGJpb3MgdGhhdCBuZWVkIHRvIGJlIHJldHJpZWQKLQkJCQkJCQkgKiBiZWNhdXNlIEJJT19SV19CQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQKKwkJCQkJCQkgKiBiZWNhdXNlIFJFUV9IQVJEQkFSUklFUiBpcyBub3Qgc3VwcG9ydGVkCiAJCQkJCQkJICovCiAKIAlhdG9taWNfdAkJCXJlY292ZXJ5X2FjdGl2ZTsgLyogYmxvY2tzIHNjaGVkdWxlZCwgYnV0IG5vdCB3cml0dGVuICovCkBAIC0yOTcsOSArMzIxLDE0IEBACiAJCQkJCQkJICogaG90LWFkZGluZyBhIGJpdG1hcC4gIEl0IHNob3VsZAogCQkJCQkJCSAqIGV2ZW50dWFsbHkgYmUgc2V0dGFibGUgYnkgc3lzZnMuCiAJCQkJCQkJICovCisJCS8qIFdoZW4gbWQgaXMgc2VydmluZyB1bmRlciBkbSwgaXQgbWlnaHQgdXNlIGEKKwkJICogZGlydHlfbG9nIHRvIHN0b3JlIHRoZSBiaXRzLgorCQkgKi8KKwkJc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nOworCiAJCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJCXVuc2lnbmVkIGxvbmcJCWNodW5rc2l6ZTsKLQkJdW5zaWduZWQgbG9uZwkJZGFlbW9uX3NsZWVwOyAvKiBob3cgbWFueSBzZWNvbmRzIGJldHdlZW4gdXBkYXRlcz8gKi8KKwkJdW5zaWduZWQgbG9uZwkJZGFlbW9uX3NsZWVwOyAvKiBob3cgbWFueSBqaWZmaWVzIGJldHdlZW4gdXBkYXRlcz8gKi8KIAkJdW5zaWduZWQgbG9uZwkJbWF4X3dyaXRlX2JlaGluZDsgLyogd3JpdGUtYmVoaW5kIG1vZGUgKi8KIAkJaW50CQkJZXh0ZXJuYWw7CiAJfSBiaXRtYXBfaW5mbzsKQEAgLTMwOCw2ICszMzcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWFsbF9tZGRldnM7CiAKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqdG9fcmVtb3ZlOworCXN0cnVjdCBwbHVnX2hhbmRsZQkJKnBsdWc7IC8qIGlmIHVzZWQgYnkgcGVyc29uYWxpdHkgKi8KKwogCS8qIEdlbmVyaWMgYmFycmllciBoYW5kbGluZy4KIAkgKiBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgYmFycmllciByZXF1ZXN0LCBhbGwgb3RoZXIKIAkgKiB3cml0ZXMgYXJlIGJsb2NrZWQgd2hpbGUgdGhlIGRldmljZXMgYXJlIGZsdXNoZWQuCkBAIC0zMTgsNiArMzQ5LDcgQEAKIAlzdHJ1Y3QgYmlvICpiYXJyaWVyOwogCWF0b21pY190IGZsdXNoX3BlbmRpbmc7CiAJc3RydWN0IHdvcmtfc3RydWN0IGJhcnJpZXJfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXZlbnRfd29yazsJLyogdXNlZCBieSBkbSB0byByZXBvcnQgZmFpbHVyZSBldmVudCAqLwogfTsKIAogCkBAIC0zODIsNiArNDE0LDE4IEBACiB9OwogZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWRfYml0bWFwX2dyb3VwOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9kaXJlbnRfc2FmZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCwgY2hhciAqbmFtZSkKK3sKKwlpZiAoc2QpCisJCXJldHVybiBzeXNmc19nZXRfZGlyZW50KHNkLCBOVUxMLCBuYW1lKTsKKwlyZXR1cm4gc2Q7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3lzZnNfbm90aWZ5X2RpcmVudF9zYWZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQoreworCWlmIChzZCkKKwkJc3lzZnNfbm90aWZ5X2RpcmVudChzZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgY2hhciAqIG1kbmFtZSAobWRkZXZfdCAqIG1kZGV2KQogewogCXJldHVybiBtZGRldi0+Z2VuZGlzayA/IG1kZGV2LT5nZW5kaXNrLT5kaXNrX25hbWUgOiAibWRYIjsKQEAgLTQ3NCw1ICs1MTgsMTQgQEAKIGV4dGVybiB2b2lkIG1kX2ludGVncml0eV9hZGRfcmRldihtZGtfcmRldl90ICpyZGV2LCBtZGRldl90ICptZGRldik7CiBleHRlcm4gaW50IHN0cmljdF9zdHJ0b3VsX3NjYWxlZChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgbG9uZyAqcmVzLCBpbnQgc2NhbGUpOwogZXh0ZXJuIHZvaWQgcmVzdG9yZV9iaXRtYXBfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlKTsKK2V4dGVybiB2b2lkIG1kX3VucGx1ZyhtZGRldl90ICptZGRldik7CiAKK2V4dGVybiB2b2lkIG1kZGV2X2luaXQobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIGludCBtZF9ydW4obWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfc3RvcChtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9zdG9wX3dyaXRlcyhtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF9yZGV2X2luaXQobWRrX3JkZXZfdCAqcmRldik7CisKK2V4dGVybiB2b2lkIG1kZGV2X3N1c3BlbmQobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRkZXZfcmVzdW1lKG1kZGV2X3QgKm1kZGV2KTsKICNlbmRpZiAvKiBfTURfTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKaW5kZXggNDEwZmI2MC4uMDMwN2QyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tdWx0aXBhdGguYworKysgYi9kcml2ZXJzL21kL211bHRpcGF0aC5jCkBAIC05MSw3ICs5MSw3IEBACiAKIAlpZiAodXB0b2RhdGUpCiAJCW11bHRpcGF0aF9lbmRfYmhfaW8obXBfYmgsIDApOwotCWVsc2UgaWYgKCFiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19BSEVBRCkpIHsKKwllbHNlIGlmICghKGJpby0+YmlfcncgJiBSRVFfUkFIRUFEKSkgewogCQkvKgogCQkgKiBvb3BzLCBJTyBlcnJvcjoKIAkJICovCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlzdHJ1Y3QgbXVsdGlwYXRoX2JoICogbXBfYmg7CiAJc3RydWN0IG11bHRpcGF0aF9pbmZvICptdWx0aXBhdGg7CiAKLQlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CisJaWYgKHVubGlrZWx5KGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpKSB7CiAJCW1kX2JhcnJpZXJfcmVxdWVzdChtZGRldiwgYmlvKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTYzLDcgKzE2Myw3IEBACiAJbXBfYmgtPmJpbyA9ICpiaW87CiAJbXBfYmgtPmJpby5iaV9zZWN0b3IgKz0gbXVsdGlwYXRoLT5yZGV2LT5kYXRhX29mZnNldDsKIAltcF9iaC0+YmlvLmJpX2JkZXYgPSBtdWx0aXBhdGgtPnJkZXYtPmJkZXY7Ci0JbXBfYmgtPmJpby5iaV9ydyB8PSAoMSA8PCBCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JUKTsKKwltcF9iaC0+YmlvLmJpX3J3IHw9IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQ7CiAJbXBfYmgtPmJpby5iaV9lbmRfaW8gPSBtdWx0aXBhdGhfZW5kX3JlcXVlc3Q7CiAJbXBfYmgtPmJpby5iaV9wcml2YXRlID0gbXBfYmg7CiAJZ2VuZXJpY19tYWtlX3JlcXVlc3QoJm1wX2JoLT5iaW8pOwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCQkqYmlvID0gKihtcF9iaC0+bWFzdGVyX2Jpbyk7CiAJCQliaW8tPmJpX3NlY3RvciArPSBjb25mLT5tdWx0aXBhdGhzW21wX2JoLT5wYXRoXS5yZGV2LT5kYXRhX29mZnNldDsKIAkJCWJpby0+YmlfYmRldiA9IGNvbmYtPm11bHRpcGF0aHNbbXBfYmgtPnBhdGhdLnJkZXYtPmJkZXY7Ci0JCQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQpOworCQkJYmlvLT5iaV9ydyB8PSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUOwogCQkJYmlvLT5iaV9lbmRfaW8gPSBtdWx0aXBhdGhfZW5kX3JlcXVlc3Q7CiAJCQliaW8tPmJpX3ByaXZhdGUgPSBtcF9iaDsKIAkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggNTYzYWJlZC4uNmY3YWY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJc3RydWN0IHN0cmlwX3pvbmUgKnpvbmU7CiAJbWRrX3JkZXZfdCAqdG1wX2RldjsKIAotCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikpIHsKIAkJbWRfYmFycmllcl9yZXF1ZXN0KG1kZGV2LCBiaW8pOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggYTk0OGRhOC4uNzNjYzc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNzg3LDcgKzc4Nyw3IEBACiAJc3RydWN0IGJpb19saXN0IGJsOwogCXN0cnVjdCBwYWdlICoqYmVoaW5kX3BhZ2VzID0gTlVMTDsKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKLQljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOworCWNvbnN0IGJvb2wgZG9fc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCWJvb2wgZG9fYmFycmllcnM7CiAJbWRrX3JkZXZfdCAqYmxvY2tlZF9yZGV2OwogCkBAIC04MjIsNyArODIyLDcgQEAKIAkJZmluaXNoX3dhaXQoJmNvbmYtPndhaXRfYmFycmllciwgJncpOwogCX0KIAlpZiAodW5saWtlbHkoIW1kZGV2LT5iYXJyaWVyc193b3JrICYmCi0JCSAgICAgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CisJCSAgICAgKGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpKSkgewogCQlpZiAocncgPT0gV1JJVEUpCiAJCQltZF93cml0ZV9lbmQobWRkZXYpOwogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CkBAIC04NzcsNyArODc3LDcgQEAKIAkJcmVhZF9iaW8tPmJpX3NlY3RvciA9IHIxX2Jpby0+c2VjdG9yICsgbWlycm9yLT5yZGV2LT5kYXRhX29mZnNldDsKIAkJcmVhZF9iaW8tPmJpX2JkZXYgPSBtaXJyb3ItPnJkZXYtPmJkZXY7CiAJCXJlYWRfYmlvLT5iaV9lbmRfaW8gPSByYWlkMV9lbmRfcmVhZF9yZXF1ZXN0OwotCQlyZWFkX2Jpby0+YmlfcncgPSBSRUFEIHwgKGRvX3N5bmMgPDwgQklPX1JXX1NZTkNJTyk7CisJCXJlYWRfYmlvLT5iaV9ydyA9IFJFQUQgfCBkb19zeW5jOwogCQlyZWFkX2Jpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAogCQlnZW5lcmljX21ha2VfcmVxdWVzdChyZWFkX2Jpbyk7CkBAIC05NTksNyArOTU5LDcgQEAKIAlhdG9taWNfc2V0KCZyMV9iaW8tPnJlbWFpbmluZywgMCk7CiAJYXRvbWljX3NldCgmcjFfYmlvLT5iZWhpbmRfcmVtYWluaW5nLCAwKTsKIAotCWRvX2JhcnJpZXJzID0gYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUik7CisJZG9fYmFycmllcnMgPSBiaW8tPmJpX3J3ICYgUkVRX0hBUkRCQVJSSUVSOwogCWlmIChkb19iYXJyaWVycykKIAkJc2V0X2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CiAKQEAgLTk3NSw4ICs5NzUsNyBAQAogCQltYmlvLT5iaV9zZWN0b3IJPSByMV9iaW8tPnNlY3RvciArIGNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCW1iaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7CiAJCW1iaW8tPmJpX2VuZF9pbwk9IHJhaWQxX2VuZF93cml0ZV9yZXF1ZXN0OwotCQltYmlvLT5iaV9ydyA9IFdSSVRFIHwgKGRvX2JhcnJpZXJzIDw8IEJJT19SV19CQVJSSUVSKSB8Ci0JCQkoZG9fc3luYyA8PCBCSU9fUldfU1lOQ0lPKTsKKwkJbWJpby0+YmlfcncgPSBXUklURSB8IGRvX2JhcnJpZXJzIHwgZG9fc3luYzsKIAkJbWJpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAogCQlpZiAoYmVoaW5kX3BhZ2VzKSB7CkBAIC0xNjMzLDcgKzE2MzIsNyBAQAogCQkJc3luY19yZXF1ZXN0X3dyaXRlKG1kZGV2LCByMV9iaW8pOwogCQkJdW5wbHVnID0gMTsKIAkJfSBlbHNlIGlmICh0ZXN0X2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKSkgewotCQkJLyogc29tZSByZXF1ZXN0cyBpbiB0aGUgcjFiaW8gd2VyZSBCSU9fUldfQkFSUklFUgorCQkJLyogc29tZSByZXF1ZXN0cyBpbiB0aGUgcjFiaW8gd2VyZSBSRVFfSEFSREJBUlJJRVIKIAkJCSAqIHJlcXVlc3RzIHdoaWNoIGZhaWxlZCB3aXRoIC1FT1BOT1RTVVBQLiAgSG9odW1tLi4KIAkJCSAqIEJldHRlciByZXN1Ym1pdCB3aXRob3V0IHRoZSBiYXJyaWVyLgogCQkJICogV2Uga25vdyB3aGljaCBkZXZpY2VzIHRvIHJlc3VibWl0IGZvciwgYmVjYXVzZQpAQCAtMTY0MSw3ICsxNjQwLDcgQEAKIAkJCSAqIFdlIGFscmVhZHkgaGF2ZSBhIG5yX3BlbmRpbmcgcmVmZXJlbmNlIG9uIHRoZXNlIHJkZXZzLgogCQkJICovCiAJCQlpbnQgaTsKLQkJCWNvbnN0IGJvb2wgZG9fc3luYyA9IGJpb19yd19mbGFnZ2VkKHIxX2Jpby0+bWFzdGVyX2JpbywgQklPX1JXX1NZTkNJTyk7CisJCQljb25zdCBib29sIGRvX3N5bmMgPSAocjFfYmlvLT5tYXN0ZXJfYmlvLT5iaV9ydyAmIFJFUV9TWU5DKTsKIAkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKTsKIAkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CiAJCQlmb3IgKGk9MDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKQEAgLTE2NjIsOCArMTY2MSw3IEBACiAJCQkJCQljb25mLT5taXJyb3JzW2ldLnJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJCQliaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXY7CiAJCQkJCWJpby0+YmlfZW5kX2lvID0gcmFpZDFfZW5kX3dyaXRlX3JlcXVlc3Q7Ci0JCQkJCWJpby0+YmlfcncgPSBXUklURSB8Ci0JCQkJCQkoZG9fc3luYyA8PCBCSU9fUldfU1lOQ0lPKTsKKwkJCQkJYmlvLT5iaV9ydyA9IFdSSVRFIHwgZG9fc3luYzsKIAkJCQkJYmlvLT5iaV9wcml2YXRlID0gcjFfYmlvOwogCQkJCQlyMV9iaW8tPmJpb3NbaV0gPSBiaW87CiAJCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CkBAIC0xNjk4LDcgKzE2OTYsNyBAQAogCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXIxX2Jpby0+c2VjdG9yKTsKIAkJCQlyYWlkX2VuZF9iaW9faW8ocjFfYmlvKTsKIAkJCX0gZWxzZSB7Ci0JCQkJY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQocjFfYmlvLT5tYXN0ZXJfYmlvLCBCSU9fUldfU1lOQ0lPKTsKKwkJCQljb25zdCBib29sIGRvX3N5bmMgPSByMV9iaW8tPm1hc3Rlcl9iaW8tPmJpX3J3ICYgUkVRX1NZTkM7CiAJCQkJcjFfYmlvLT5iaW9zW3IxX2Jpby0+cmVhZF9kaXNrXSA9CiAJCQkJCW1kZGV2LT5ybyA/IElPX0JMT0NLRUQgOiBOVUxMOwogCQkJCXIxX2Jpby0+cmVhZF9kaXNrID0gZGlzazsKQEAgLTE3MTUsNyArMTcxMyw3IEBACiAJCQkJYmlvLT5iaV9zZWN0b3IgPSByMV9iaW8tPnNlY3RvciArIHJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJCWJpby0+YmlfYmRldiA9IHJkZXYtPmJkZXY7CiAJCQkJYmlvLT5iaV9lbmRfaW8gPSByYWlkMV9lbmRfcmVhZF9yZXF1ZXN0OwotCQkJCWJpby0+YmlfcncgPSBSRUFEIHwgKGRvX3N5bmMgPDwgQklPX1JXX1NZTkNJTyk7CisJCQkJYmlvLT5iaV9ydyA9IFJFQUQgfCBkb19zeW5jOwogCQkJCWJpby0+YmlfcHJpdmF0ZSA9IHIxX2JpbzsKIAkJCQl1bnBsdWcgPSAxOwogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCA0MmU2NGU0Li5hODhhZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTc5OSwxMiArNzk5LDEyIEBACiAJaW50IGk7CiAJaW50IGNodW5rX3NlY3RzID0gY29uZi0+Y2h1bmtfbWFzayArIDE7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7Ci0JY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKTsKKwljb25zdCBib29sIGRvX3N5bmMgPSAoYmlvLT5iaV9ydyAmIFJFUV9TWU5DKTsKIAlzdHJ1Y3QgYmlvX2xpc3QgYmw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXY7CiAKLQlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CisJaWYgKHVubGlrZWx5KGJpby0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpKSB7CiAJCW1kX2JhcnJpZXJfcmVxdWVzdChtZGRldiwgYmlvKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODI1LDExICs4MjUsMjkgQEAKIAkJICovCiAJCWJwID0gYmlvX3NwbGl0KGJpbywKIAkJCSAgICAgICBjaHVua19zZWN0cyAtIChiaW8tPmJpX3NlY3RvciAmIChjaHVua19zZWN0cyAtIDEpKSApOworCisJCS8qIEVhY2ggb2YgdGhlc2UgJ21ha2VfcmVxdWVzdCcgY2FsbHMgd2lsbCBjYWxsICd3YWl0X2JhcnJpZXInLgorCQkgKiBJZiB0aGUgZmlyc3Qgc3VjY2VlZHMgYnV0IHRoZSBzZWNvbmQgYmxvY2tzIGR1ZSB0byB0aGUgcmVzeW5jCisJCSAqIHRocmVhZCByYWlzaW5nIHRoZSBiYXJyaWVyLCB3ZSB3aWxsIGRlYWRsb2NrIGJlY2F1c2UgdGhlCisJCSAqIElPIHRvIHRoZSB1bmRlcmx5aW5nIGRldmljZSB3aWxsIGJlIHF1ZXVlZCBpbiBnZW5lcmljX21ha2VfcmVxdWVzdAorCQkgKiBhbmQgd2lsbCBuZXZlciBjb21wbGV0ZSwgc28gd2lsbCBuZXZlciByZWR1Y2UgbnJfcGVuZGluZy4KKwkJICogU28gaW5jcmVtZW50IG5yX3dhaXRpbmcgaGVyZSBzbyBubyBuZXcgcmFpc2VfYmFycmllcnMgd2lsbAorCQkgKiBzdWNjZWVkLCBhbmQgc28gdGhlIHNlY29uZCB3YWl0X2JhcnJpZXIgY2Fubm90IGJsb2NrLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOworCQljb25mLT5ucl93YWl0aW5nKys7CisJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOworCiAJCWlmIChtYWtlX3JlcXVlc3QobWRkZXYsICZicC0+YmlvMSkpCiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdCgmYnAtPmJpbzEpOwogCQlpZiAobWFrZV9yZXF1ZXN0KG1kZGV2LCAmYnAtPmJpbzIpKQogCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoJmJwLT5iaW8yKTsKIAorCQlzcGluX2xvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CisJCWNvbmYtPm5yX3dhaXRpbmctLTsKKwkJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CisKIAkJYmlvX3BhaXJfcmVsZWFzZShicCk7CiAJCXJldHVybiAwOwogCWJhZF9tYXA6CkBAIC04NzksNyArODk3LDcgQEAKIAkJCW1pcnJvci0+cmRldi0+ZGF0YV9vZmZzZXQ7CiAJCXJlYWRfYmlvLT5iaV9iZGV2ID0gbWlycm9yLT5yZGV2LT5iZGV2OwogCQlyZWFkX2Jpby0+YmlfZW5kX2lvID0gcmFpZDEwX2VuZF9yZWFkX3JlcXVlc3Q7Ci0JCXJlYWRfYmlvLT5iaV9ydyA9IFJFQUQgfCAoZG9fc3luYyA8PCBCSU9fUldfU1lOQ0lPKTsKKwkJcmVhZF9iaW8tPmJpX3J3ID0gUkVBRCB8IGRvX3N5bmM7CiAJCXJlYWRfYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKIAogCQlnZW5lcmljX21ha2VfcmVxdWVzdChyZWFkX2Jpbyk7CkBAIC05NDcsNyArOTY1LDcgQEAKIAkJCWNvbmYtPm1pcnJvcnNbZF0ucmRldi0+ZGF0YV9vZmZzZXQ7CiAJCW1iaW8tPmJpX2JkZXYgPSBjb25mLT5taXJyb3JzW2RdLnJkZXYtPmJkZXY7CiAJCW1iaW8tPmJpX2VuZF9pbwk9IHJhaWQxMF9lbmRfd3JpdGVfcmVxdWVzdDsKLQkJbWJpby0+YmlfcncgPSBXUklURSB8IChkb19zeW5jIDw8IEJJT19SV19TWU5DSU8pOworCQltYmlvLT5iaV9ydyA9IFdSSVRFIHwgZG9fc3luYzsKIAkJbWJpby0+YmlfcHJpdmF0ZSA9IHIxMF9iaW87CiAKIAkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKQEAgLTE3MTYsNyArMTczNCw3IEBACiAJCQkJcmFpZF9lbmRfYmlvX2lvKHIxMF9iaW8pOwogCQkJCWJpb19wdXQoYmlvKTsKIAkJCX0gZWxzZSB7Ci0JCQkJY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQocjEwX2Jpby0+bWFzdGVyX2JpbywgQklPX1JXX1NZTkNJTyk7CisJCQkJY29uc3QgYm9vbCBkb19zeW5jID0gKHIxMF9iaW8tPm1hc3Rlcl9iaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCQkJCWJpb19wdXQoYmlvKTsKIAkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1ttaXJyb3JdLnJkZXY7CiAJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKQEAgLTE3MzAsNyArMTc0OCw3IEBACiAJCQkJYmlvLT5iaV9zZWN0b3IgPSByMTBfYmlvLT5kZXZzW3IxMF9iaW8tPnJlYWRfc2xvdF0uYWRkcgogCQkJCQkrIHJkZXYtPmRhdGFfb2Zmc2V0OwogCQkJCWJpby0+YmlfYmRldiA9IHJkZXYtPmJkZXY7Ci0JCQkJYmlvLT5iaV9ydyA9IFJFQUQgfCAoZG9fc3luYyA8PCBCSU9fUldfU1lOQ0lPKTsKKwkJCQliaW8tPmJpX3J3ID0gUkVBRCB8IGRvX3N5bmM7CiAJCQkJYmlvLT5iaV9wcml2YXRlID0gcjEwX2JpbzsKIAkJCQliaW8tPmJpX2VuZF9pbyA9IHJhaWQxMF9lbmRfcmVhZF9yZXF1ZXN0OwogCQkJCXVucGx1ZyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggOTZjNjkwMi4uODY2ZDRiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMjAxLDExICsyMDEsMTEgQEAKIAkJaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKSB7CiAJCQlpZiAodGVzdF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpKSB7CiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmRlbGF5ZWRfbGlzdCk7Ci0JCQkJYmxrX3BsdWdfZGV2aWNlKGNvbmYtPm1kZGV2LT5xdWV1ZSk7CisJCQkJcGx1Z2dlcl9zZXRfcGx1ZygmY29uZi0+cGx1Zyk7CiAJCQl9IGVsc2UgaWYgKHRlc3RfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpICYmCiAJCQkJICAgc2gtPmJtX3NlcSAtIGNvbmYtPnNlcV93cml0ZSA+IDApIHsKIAkJCQlsaXN0X2FkZF90YWlsKCZzaC0+bHJ1LCAmY29uZi0+Yml0bWFwX2xpc3QpOwotCQkJCWJsa19wbHVnX2RldmljZShjb25mLT5tZGRldi0+cXVldWUpOworCQkJCXBsdWdnZXJfc2V0X3BsdWcoJmNvbmYtPnBsdWcpOwogCQkJfSBlbHNlIHsKIAkJCQljbGVhcl9iaXQoU1RSSVBFX0JJVF9ERUxBWSwgJnNoLT5zdGF0ZSk7CiAJCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmhhbmRsZV9saXN0KTsKQEAgLTQzNCw3ICs0MzQsNiBAQAogfQogCiBzdGF0aWMgdm9pZCB1bnBsdWdfc2xhdmVzKG1kZGV2X3QgKm1kZGV2KTsKLXN0YXRpYyB2b2lkIHJhaWQ1X3VucGx1Z19kZXZpY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCiBzdGF0aWMgc3RydWN0IHN0cmlwZV9oZWFkICoKIGdldF9hY3RpdmVfc3RyaXBlKHJhaWQ1X2NvbmZfdCAqY29uZiwgc2VjdG9yX3Qgc2VjdG9yLApAQCAtNDY0LDcgKzQ2Myw3IEBACiAJCQkJCQkgICAgIDwgKGNvbmYtPm1heF9ucl9zdHJpcGVzICozLzQpCiAJCQkJCQkgICAgIHx8ICFjb25mLT5pbmFjdGl2ZV9ibG9ja2VkKSwKIAkJCQkJCSAgICBjb25mLT5kZXZpY2VfbG9jaywKLQkJCQkJCSAgICByYWlkNV91bnBsdWdfZGV2aWNlKGNvbmYtPm1kZGV2LT5xdWV1ZSkKKwkJCQkJCSAgICBtZF9yYWlkNV91bnBsdWdfZGV2aWNlKGNvbmYpCiAJCQkJCSk7CiAJCQkJY29uZi0+aW5hY3RpdmVfYmxvY2tlZCA9IDA7CiAJCQl9IGVsc2UKQEAgLTEzMzcsMTAgKzEzMzYsMTQgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2M7CiAJaW50IGRldnMgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKLQlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCi0JCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7Ci0Jc3ByaW50Zihjb25mLT5jYWNoZV9uYW1lWzFdLAotCQkicmFpZCVkLSVzLWFsdCIsIGNvbmYtPmxldmVsLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsKKwlpZiAoY29uZi0+bWRkZXYtPmdlbmRpc2spCisJCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwKKwkJCSJyYWlkJWQtJXMiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CisJZWxzZQorCQlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMF0sCisJCQkicmFpZCVkLSVwIiwgY29uZi0+bGV2ZWwsIGNvbmYtPm1kZGV2KTsKKwlzcHJpbnRmKGNvbmYtPmNhY2hlX25hbWVbMV0sICIlcy1hbHQiLCBjb25mLT5jYWNoZV9uYW1lWzBdKTsKKwogCWNvbmYtPmFjdGl2ZV9uYW1lID0gMDsKIAlzYyA9IGttZW1fY2FjaGVfY3JlYXRlKGNvbmYtPmNhY2hlX25hbWVbY29uZi0+YWN0aXZlX25hbWVdLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpKyhkZXZzLTEpKnNpemVvZihzdHJ1Y3QgcjVkZXYpLApAQCAtMzYxNCw3ICszNjE3LDcgQEAKIAkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5ob2xkX2xpc3QpOwogCQl9CiAJfSBlbHNlCi0JCWJsa19wbHVnX2RldmljZShjb25mLT5tZGRldi0+cXVldWUpOworCQlwbHVnZ2VyX3NldF9wbHVnKCZjb25mLT5wbHVnKTsKIH0KIAogc3RhdGljIHZvaWQgYWN0aXZhdGVfYml0X2RlbGF5KHJhaWQ1X2NvbmZfdCAqY29uZikKQEAgLTM2NTUsMzYgKzM2NTgsNDQgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZDVfdW5wbHVnX2RldmljZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3ZvaWQgbWRfcmFpZDVfdW5wbHVnX2RldmljZShyYWlkNV9jb25mX3QgKmNvbmYpCiB7Ci0JbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7Ci0JcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGJsa19yZW1vdmVfcGx1ZyhxKSkgeworCWlmIChwbHVnZ2VyX3JlbW92ZV9wbHVnKCZjb25mLT5wbHVnKSkgewogCQljb25mLT5zZXFfZmx1c2grKzsKIAkJcmFpZDVfYWN0aXZhdGVfZGVsYXllZChjb25mKTsKIAl9Ci0JbWRfd2FrZXVwX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwltZF93YWtldXBfdGhyZWFkKGNvbmYtPm1kZGV2LT50aHJlYWQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAotCXVucGx1Z19zbGF2ZXMobWRkZXYpOworCXVucGx1Z19zbGF2ZXMoY29uZi0+bWRkZXYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfcmFpZDVfdW5wbHVnX2RldmljZSk7CisKK3N0YXRpYyB2b2lkIHJhaWQ1X3VucGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpCit7CisJcmFpZDVfY29uZl90ICpjb25mID0gY29udGFpbmVyX29mKHBsdWcsIHJhaWQ1X2NvbmZfdCwgcGx1Zyk7CisJbWRfcmFpZDVfdW5wbHVnX2RldmljZShjb25mKTsKIH0KIAotc3RhdGljIGludCByYWlkNV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCitzdGF0aWMgdm9pZCByYWlkNV91bnBsdWdfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JbWRkZXZfdCAqbWRkZXYgPSBkYXRhOworCW1kZGV2X3QgKm1kZGV2ID0gcS0+cXVldWVkYXRhOworCW1kX3JhaWQ1X3VucGx1Z19kZXZpY2UobWRkZXYtPnByaXZhdGUpOworfQorCitpbnQgbWRfcmFpZDVfY29uZ2VzdGVkKG1kZGV2X3QgKm1kZGV2LCBpbnQgYml0cykKK3sKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAogCS8qIE5vIGRpZmZlcmVuY2UgYmV0d2VlbiByZWFkcyBhbmQgd3JpdGVzLiAgSnVzdCBjaGVjawogCSAqIGhvdyBidXN5IHRoZSBzdHJpcGVfY2FjaGUgaXMKIAkgKi8KIAotCWlmIChtZGRldl9jb25nZXN0ZWQobWRkZXYsIGJpdHMpKQotCQlyZXR1cm4gMTsKIAlpZiAoY29uZi0+aW5hY3RpdmVfYmxvY2tlZCkKIAkJcmV0dXJuIDE7CiAJaWYgKGNvbmYtPnF1aWVzY2UpCkBAIC0zNjk0LDYgKzM3MDUsMTUgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobWRfcmFpZDVfY29uZ2VzdGVkKTsKKworc3RhdGljIGludCByYWlkNV9jb25nZXN0ZWQodm9pZCAqZGF0YSwgaW50IGJpdHMpCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkYXRhOworCisJcmV0dXJuIG1kZGV2X2Nvbmdlc3RlZChtZGRldiwgYml0cykgfHwKKwkJbWRfcmFpZDVfY29uZ2VzdGVkKG1kZGV2LCBiaXRzKTsKK30KIAogLyogV2Ugd2FudCByZWFkIHJlcXVlc3RzIHRvIGFsaWduIHdpdGggY2h1bmtzIHdoZXJlIHBvc3NpYmxlLAogICogYnV0IHdyaXRlIHJlcXVlc3RzIGRvbid0IG5lZWQgdG8uCkBAIC0zOTU4LDcgKzM5NzgsNyBAQAogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaSk7CiAJaW50IHJlbWFpbmluZzsKIAotCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaSwgQklPX1JXX0JBUlJJRVIpKSkgeworCWlmICh1bmxpa2VseShiaS0+YmlfcncgJiBSRVFfSEFSREJBUlJJRVIpKSB7CiAJCS8qIERyYWluIGFsbCBwZW5kaW5nIHdyaXRlcy4gIFdlIG9ubHkgcmVhbGx5IG5lZWQKIAkJICogdG8gZW5zdXJlIHRoZXkgaGF2ZSBiZWVuIHN1Ym1pdHRlZCwgYnV0IHRoaXMgaXMKIAkJICogZWFzaWVyLgpAQCAtNDA3NSw3ICs0MDk1LDcgQEAKIAkJCQkgKiBhZGQgZmFpbGVkIGR1ZSB0byBvdmVybGFwLiAgRmx1c2ggZXZlcnl0aGluZwogCQkJCSAqIGFuZCB3YWl0IGEgd2hpbGUKIAkJCQkgKi8KLQkJCQlyYWlkNV91bnBsdWdfZGV2aWNlKG1kZGV2LT5xdWV1ZSk7CisJCQkJbWRfcmFpZDVfdW5wbHVnX2RldmljZShjb25mKTsKIAkJCQlyZWxlYXNlX3N0cmlwZShzaCk7CiAJCQkJc2NoZWR1bGUoKTsKIAkJCQlnb3RvIHJldHJ5OwpAQCAtNDU2Niw2ICs0NTg2LDMyIEBACiAJCXJldHVybiAwOwogfQogCitpbnQKK3JhaWQ1X3NldF9jYWNoZV9zaXplKG1kZGV2X3QgKm1kZGV2LCBpbnQgc2l6ZSkKK3sKKwlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKKwlpbnQgZXJyOworCisJaWYgKHNpemUgPD0gMTYgfHwgc2l6ZSA+IDMyNzY4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAoc2l6ZSA8IGNvbmYtPm1heF9ucl9zdHJpcGVzKSB7CisJCWlmIChkcm9wX29uZV9zdHJpcGUoY29uZikpCisJCQljb25mLT5tYXhfbnJfc3RyaXBlcy0tOworCQllbHNlCisJCQlicmVhazsKKwl9CisJZXJyID0gbWRfYWxsb3dfd3JpdGUobWRkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJd2hpbGUgKHNpemUgPiBjb25mLT5tYXhfbnJfc3RyaXBlcykgeworCQlpZiAoZ3Jvd19vbmVfc3RyaXBlKGNvbmYpKQorCQkJY29uZi0+bWF4X25yX3N0cmlwZXMrKzsKKwkJZWxzZSBicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJhaWQ1X3NldF9jYWNoZV9zaXplKTsKKwogc3RhdGljIHNzaXplX3QKIHJhaWQ1X3N0b3JlX3N0cmlwZV9jYWNoZV9zaXplKG1kZGV2X3QgKm1kZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKQogewpAQCAtNDU4MCwyMiArNDYyNiw5IEBACiAKIAlpZiAoc3RyaWN0X3N0cnRvdWwocGFnZSwgMTAsICZuZXcpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAobmV3IDw9IDE2IHx8IG5ldyA+IDMyNzY4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQl3aGlsZSAobmV3IDwgY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKLQkJaWYgKGRyb3Bfb25lX3N0cmlwZShjb25mKSkKLQkJCWNvbmYtPm1heF9ucl9zdHJpcGVzLS07Ci0JCWVsc2UKLQkJCWJyZWFrOwotCX0KLQllcnIgPSBtZF9hbGxvd193cml0ZShtZGRldik7CisJZXJyID0gcmFpZDVfc2V0X2NhY2hlX3NpemUobWRkZXYsIG5ldyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQl3aGlsZSAobmV3ID4gY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKLQkJaWYgKGdyb3dfb25lX3N0cmlwZShjb25mKSkKLQkJCWNvbmYtPm1heF9ucl9zdHJpcGVzKys7Ci0JCWVsc2UgYnJlYWs7Ci0JfQogCXJldHVybiBsZW47CiB9CiAKQEAgLTQ5NTgsNyArNDk5MSw3IEBACiBzdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmY7Ci0JaW50IHdvcmtpbmdfZGlza3MgPSAwLCBjaHVua19zaXplOworCWludCB3b3JraW5nX2Rpc2tzID0gMDsKIAlpbnQgZGlydHlfcGFyaXR5X2Rpc2tzID0gMDsKIAltZGtfcmRldl90ICpyZGV2OwogCXNlY3Rvcl90IHJlc2hhcGVfb2Zmc2V0ID0gMDsKQEAgLTUxNDQsNDMgKzUxNzcsNDggQEAKIAkJCQkJCQkicmVzaGFwZSIpOwogCX0KIAotCS8qIHJlYWQtYWhlYWQgc2l6ZSBtdXN0IGNvdmVyIHR3byB3aG9sZSBzdHJpcGVzLCB3aGljaCBpcwotCSAqIDIgKiAoZGF0YWRpc2tzKSAqIGNodW5rc2l6ZSB3aGVyZSAnbicgaXMgdGhlIG51bWJlciBvZiByYWlkIGRldmljZXMKLQkgKi8KLQl7CisKKwkvKiBPaywgZXZlcnl0aGluZyBpcyBqdXN0IGZpbmUgbm93ICovCisJaWYgKG1kZGV2LT50b19yZW1vdmUgPT0gJnJhaWQ1X2F0dHJzX2dyb3VwKQorCQltZGRldi0+dG9fcmVtb3ZlID0gTlVMTDsKKwllbHNlIGlmIChtZGRldi0+a29iai5zZCAmJgorCSAgICBzeXNmc19jcmVhdGVfZ3JvdXAoJm1kZGV2LT5rb2JqLCAmcmFpZDVfYXR0cnNfZ3JvdXApKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAicmFpZDU6IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgJXNcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpOworCisJcGx1Z2dlcl9pbml0KCZjb25mLT5wbHVnLCByYWlkNV91bnBsdWcpOworCW1kZGV2LT5wbHVnID0gJmNvbmYtPnBsdWc7CisJaWYgKG1kZGV2LT5xdWV1ZSkgeworCQlpbnQgY2h1bmtfc2l6ZTsKKwkJLyogcmVhZC1haGVhZCBzaXplIG11c3QgY292ZXIgdHdvIHdob2xlIHN0cmlwZXMsIHdoaWNoCisJCSAqIGlzIDIgKiAoZGF0YWRpc2tzKSAqIGNodW5rc2l6ZSB3aGVyZSAnbicgaXMgdGhlCisJCSAqIG51bWJlciBvZiByYWlkIGRldmljZXMKKwkJICovCiAJCWludCBkYXRhX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAkJaW50IHN0cmlwZSA9IGRhdGFfZGlza3MgKgogCQkJKChtZGRldi0+Y2h1bmtfc2VjdG9ycyA8PCA5KSAvIFBBR0VfU0laRSk7CiAJCWlmIChtZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPCAyICogc3RyaXBlKQogCQkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLnJhX3BhZ2VzID0gMiAqIHN0cmlwZTsKKworCQlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZGRldi0+cXVldWUsIHJhaWQ1X21lcmdlYWJsZV9idmVjKTsKKworCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKKwkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKKwkJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOworCQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19xdWV1ZTsKKworCQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKKwkJYmxrX3F1ZXVlX2lvX21pbihtZGRldi0+cXVldWUsIGNodW5rX3NpemUpOworCQlibGtfcXVldWVfaW9fb3B0KG1kZGV2LT5xdWV1ZSwgY2h1bmtfc2l6ZSAqCisJCQkJIChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKSk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKKwkJCWRpc2tfc3RhY2tfbGltaXRzKG1kZGV2LT5nZW5kaXNrLCByZGV2LT5iZGV2LAorCQkJCQkgIHJkZXYtPmRhdGFfb2Zmc2V0IDw8IDkpOwogCX0KIAotCS8qIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cgKi8KLQlpZiAobWRkZXYtPnRvX3JlbW92ZSA9PSAmcmFpZDVfYXR0cnNfZ3JvdXApCi0JCW1kZGV2LT50b19yZW1vdmUgPSBOVUxMOwotCWVsc2UgaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmbWRkZXYtPmtvYmosICZyYWlkNV9hdHRyc19ncm91cCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJtZC9yYWlkOiVzOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXMuXG4iLAotCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0KLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7Ci0KLQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IHJhaWQ1X3VucGx1Z19kZXZpY2U7Ci0JbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9kYXRhID0gbWRkZXY7Ci0JbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQ1X2Nvbmdlc3RlZDsKLQotCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkNV9zaXplKG1kZGV2LCAwLCAwKSk7Ci0KLQlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZGRldi0+cXVldWUsIHJhaWQ1X21lcmdlYWJsZV9idmVjKTsKLQljaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NlY3RvcnMgPDwgOTsKLQlibGtfcXVldWVfaW9fbWluKG1kZGV2LT5xdWV1ZSwgY2h1bmtfc2l6ZSk7Ci0JYmxrX3F1ZXVlX2lvX29wdChtZGRldi0+cXVldWUsIGNodW5rX3NpemUgKgotCQkJIChjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQlkaXNrX3N0YWNrX2xpbWl0cyhtZGRldi0+Z2VuZGlzaywgcmRldi0+YmRldiwKLQkJCQkgIHJkZXYtPmRhdGFfb2Zmc2V0IDw8IDkpOwotCiAJcmV0dXJuIDA7CiBhYm9ydDoKIAltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+dGhyZWFkKTsKQEAgLTUyMDAsOCArNTIzOCw5IEBACiAKIAltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZGRldi0+dGhyZWFkID0gTlVMTDsKLQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gTlVMTDsKLQlibGtfc3luY19xdWV1ZShtZGRldi0+cXVldWUpOyAvKiB0aGUgdW5wbHVnIGZuIHJlZmVyZW5jZXMgJ2NvbmYnKi8KKwlpZiAobWRkZXYtPnF1ZXVlKQorCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gTlVMTDsKKwlwbHVnZ2VyX2ZsdXNoKCZjb25mLT5wbHVnKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCiAJZnJlZV9jb25mKGNvbmYpOwogCW1kZGV2LT5wcml2YXRlID0gTlVMTDsKIAltZGRldi0+dG9fcmVtb3ZlID0gJnJhaWQ1X2F0dHJzX2dyb3VwOwpAQCAtNTU0NSwxMCArNTU4NCw3IEBACiAJCQkJc3ByaW50ZihubSwgInJkJWQiLCByZGV2LT5yYWlkX2Rpc2spOwogCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCiAJCQkJCQkgICAgICAmcmRldi0+a29iaiwgbm0pKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSAgICAgICAibWQvcmFpZDolczogZmFpbGVkIHRvIGNyZWF0ZSAiCi0JCQkJCSAgICAgICAiIGxpbmsgJXNcbiIsCi0JCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBubSk7CisJCQkJCS8qIEZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKIAkJCX0gZWxzZQogCQkJCWJyZWFrOwogCQl9CkBAIC01NjAzLDcgKzU2MzksNyBAQAogCQkvKiByZWFkLWFoZWFkIHNpemUgbXVzdCBjb3ZlciB0d28gd2hvbGUgc3RyaXBlcywgd2hpY2ggaXMKIAkJICogMiAqIChkYXRhZGlza3MpICogY2h1bmtzaXplIHdoZXJlICduJyBpcyB0aGUgbnVtYmVyIG9mIHJhaWQgZGV2aWNlcwogCQkgKi8KLQkJeworCQlpZiAoY29uZi0+bWRkZXYtPnF1ZXVlKSB7CiAJCQlpbnQgZGF0YV9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CiAJCQlpbnQgc3RyaXBlID0gZGF0YV9kaXNrcyAqICgoY29uZi0+Y2h1bmtfc2VjdG9ycyA8PCA5KQogCQkJCQkJICAgLyBQQUdFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5oIGIvZHJpdmVycy9tZC9yYWlkNS5oCmluZGV4IDBmODZmNWUuLjM2ZWFlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ1LmgKQEAgLTM4OCw3ICszODgsNyBAQAogCSAqIHR3byBjYWNoZXMuCiAJICovCiAJaW50CQkJYWN0aXZlX25hbWU7Ci0JY2hhcgkJCWNhY2hlX25hbWVbMl1bMjBdOworCWNoYXIJCQljYWNoZV9uYW1lWzJdWzMyXTsKIAlzdHJ1Y3Qga21lbV9jYWNoZQkJKnNsYWJfY2FjaGU7IC8qIGZvciBhbGxvY2F0aW5nIHN0cmlwZXMgKi8KIAogCWludAkJCXNlcV9mbHVzaCwgc2VxX3dyaXRlOwpAQCAtMzk4LDYgKzM5OCw5IEBACiAJCQkJCSAgICAqIChmcmVzaCBkZXZpY2UgYWRkZWQpLgogCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KIAkJCQkJICAgICovCisKKwlzdHJ1Y3QgcGx1Z19oYW5kbGUJcGx1ZzsKKwogCS8qIHBlciBjcHUgdmFyaWFibGVzICovCiAJc3RydWN0IHJhaWQ1X3BlcmNwdSB7CiAJCXN0cnVjdCBwYWdlCSpzcGFyZV9wYWdlOyAvKiBVc2VkIHdoZW4gY2hlY2tpbmcgUC9RIGluIHJhaWQ2ICovCkBAIC00OTcsNCArNTAwLDggQEAKIHsKIAlyZXR1cm4gbGF5b3V0ID49IDggJiYgbGF5b3V0IDw9IDEwOwogfQorCitleHRlcm4gaW50IG1kX3JhaWQ1X2Nvbmdlc3RlZChtZGRldl90ICptZGRldiwgaW50IGJpdHMpOworZXh0ZXJuIHZvaWQgbWRfcmFpZDVfdW5wbHVnX2RldmljZShyYWlkNV9jb25mX3QgKmNvbmYpOworZXh0ZXJuIGludCByYWlkNV9zZXRfY2FjaGVfc2l6ZShtZGRldl90ICptZGRldiwgaW50IHNpemUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL0lSL0tjb25maWcKaW5kZXggOTk5YTgyNS4uMzBlMDQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvS2NvbmZpZwpAQCAtMSw4ICsxLDEwIEBACi1jb25maWcgSVJfQ09SRQotCXRyaXN0YXRlCittZW51Y29uZmlnIElSX0NPUkUKKwl0cmlzdGF0ZSAiSW5mcmFyZWQgcmVtb3RlIGNvbnRyb2xsZXIgYWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBJTlBVVAogCWRlZmF1bHQgSU5QVVQKIAoraWYgSVJfQ09SRQorCiBjb25maWcgVklERU9fSVIKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gSVJfQ09SRQpAQCAtMTYsNyArMTgsNyBAQAogCSAgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBidWlsZCB0aGUgTGludXggSW5mcmFyZWQgUmVtb3RlCiAJICAgQ29udHJvbCAoTElSQykgY29yZSBkZXZpY2UgaW50ZXJmYWNlIGRyaXZlci4gVGhlIExJUkMKIAkgICBpbnRlcmZhY2UgcGFzc2VzIHJhdyBJUiB0byBhbmQgZnJvbSB1c2Vyc3BhY2UsIHdoZXJlIHRoZQotCSAgIExJUkMgZGFlbW9uIGhhbmRsZXMgcHJvdG9jb2wgZGVjb2RpbmcgZm9yIElSIHJlY2VwdGlvbiBhbm4KKwkgICBMSVJDIGRhZW1vbiBoYW5kbGVzIHByb3RvY29sIGRlY29kaW5nIGZvciBJUiByZWNlcHRpb24gYW5kCiAJICAgZW5jb2RpbmcgZm9yIElSIHRyYW5zbWl0dGluZyAoYWthICJibGFzdGluZyIpLgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9LY29uZmlnIgpAQCAtMTAzLDMgKzEwNSwzMSBAQAogCiAJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jZXVzYi4KKworY29uZmlnIElSX0VORQorCXRyaXN0YXRlICJFTkUgZUhvbWUgUmVjZWl2ZXIvVHJhbnNjaWV2ZXIgKHBucCBpZDogRU5FMDEwMC9FTkUwMnh4eCkiCisJZGVwZW5kcyBvbiBQTlAKKwlkZXBlbmRzIG9uIElSX0NPUkUKKwktLS1oZWxwLS0tCisJICAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgaW50ZWdyYXRlZCBpbmZyYXJlZCByZWNlaXZlcgorCSAgIC90cmFuc2NpZXZlciBtYWRlIGJ5IEVORS4KKworCSAgIFlvdSBjYW4gc2VlIGlmIHlvdSBoYXZlIGl0IGJ5IGxvb2tpbmcgYXQgbHNwbnAgb3V0cHV0LgorCSAgIE91dHB1dCBzaG91bGQgaW5jbHVkZSBFTkUwMTAwIEVORTAyMDAgb3Igc29tZXRoaW5nIHNpbWlsaWFyLgorCisJICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVuZV9pci4KKworY29uZmlnIElSX1NUUkVBTVpBUAorCXRyaXN0YXRlICJTdHJlYW16YXAgUEMgUmVtb3RlIElSIFJlY2VpdmVyIgorCWRlcGVuZHMgb24gVVNCX0FSQ0hfSEFTX0hDRAorCWRlcGVuZHMgb24gSVJfQ09SRQorCXNlbGVjdCBVU0IKKwktLS1oZWxwLS0tCisJICAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBTdHJlYW16YXAgUEMgUmVtb3RlCisJICAgSW5mcmFyZWQgUmVjZWl2ZXIuCisKKwkgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3RyZWFtemFwLgorCitlbmRpZiAjSVJfQ09SRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvSVIvTWFrZWZpbGUKaW5kZXggMmFlNGYzYS4uNTM2NzY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL0lSL01ha2VmaWxlCkBAIC0xNiwzICsxNiw1IEBACiAjIHN0YW5kLWFsb25lIElSIHJlY2VpdmVycy90cmFuc21pdHRlcnMKIG9iai0kKENPTkZJR19JUl9JTU9OKSArPSBpbW9uLm8KIG9iai0kKENPTkZJR19JUl9NQ0VVU0IpICs9IG1jZXVzYi5vCitvYmotJChDT05GSUdfSVJfRU5FKSArPSBlbmVfaXIubworb2JqLSQoQ09ORklHX0lSX1NUUkVBTVpBUCkgKz0gc3RyZWFtemFwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmMgYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDc3NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5jCkBAIC0wLDAgKzEsMTAyMyBAQAorLyoKKyAqIGRyaXZlciBmb3IgRU5FIEtCMzkyNiBCL0MvRCBDSVIgKHBucCBpZDogRU5FMFhYWCkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTWF4aW0gTGV2aXRza3kgPG1heGltbGV2aXRza3lAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKyAqIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgorI2luY2x1ZGUgImVuZV9pci5oIgorCisKK3N0YXRpYyBpbnQgc2FtcGxlX3BlcmlvZCA9IC0xOworc3RhdGljIGludCBlbmFibGVfaWRsZSA9IDE7CitzdGF0aWMgaW50IGlucHV0ID0gMTsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHR4c2ltOworCitzdGF0aWMgaW50IGVuZV9pcnFfc3RhdHVzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpOworCisvKiByZWFkIGEgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB1OCBlbmVfaHdfcmVhZF9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZykKK3sKKwl1OCByZXR2YWw7CisJb3V0YihyZWcgPj4gOCwgZGV2LT5od19pbyArIEVORV9BRERSX0hJKTsKKwlvdXRiKHJlZyAmIDB4RkYsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9MTyk7CisJcmV0dmFsID0gaW5iKGRldi0+aHdfaW8gKyBFTkVfSU8pOworCisJZW5lX2RiZ192ZXJib3NlKCJyZWcgJTA0eCA9PSAlMDJ4IiwgcmVnLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qIHdyaXRlIGEgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGVuZV9od193cml0ZV9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZywgdTggdmFsdWUpCit7CisJb3V0YihyZWcgPj4gOCwgZGV2LT5od19pbyArIEVORV9BRERSX0hJKTsKKwlvdXRiKHJlZyAmIDB4RkYsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9MTyk7CisJb3V0Yih2YWx1ZSwgZGV2LT5od19pbyArIEVORV9JTyk7CisKKwllbmVfZGJnX3ZlcmJvc2UoInJlZyAlMDR4IDwtICUwMngiLCByZWcsIHZhbHVlKTsKK30KKworLyogY2hhbmdlIHNwZWNpZmljIGJpdHMgaW4gaGFyZHdhcmUgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkIGVuZV9od193cml0ZV9yZWdfbWFzayhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LAorCQkJCSAgdTE2IHJlZywgdTggdmFsdWUsIHU4IG1hc2spCit7CisJdTggcmVndmFsdWU7CisKKwlvdXRiKHJlZyA+PiA4LCBkZXYtPmh3X2lvICsgRU5FX0FERFJfSEkpOworCW91dGIocmVnICYgMHhGRiwgZGV2LT5od19pbyArIEVORV9BRERSX0xPKTsKKworCXJlZ3ZhbHVlID0gaW5iKGRldi0+aHdfaW8gKyBFTkVfSU8pICYgfm1hc2s7CisJcmVndmFsdWUgfD0gKHZhbHVlICYgbWFzayk7CisJb3V0YihyZWd2YWx1ZSwgZGV2LT5od19pbyArIEVORV9JTyk7CisKKwllbmVfZGJnX3ZlcmJvc2UoInJlZyAlMDR4IDwtICUwMnggKG1hc2s9JTAyeCkiLCByZWcsIHZhbHVlLCBtYXNrKTsKK30KKworLyogZGV0ZWN0IGhhcmR3YXJlIGZlYXR1cmVzICovCitzdGF0aWMgaW50IGVuZV9od19kZXRlY3Qoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCBjaGlwX21ham9yLCBjaGlwX21pbm9yOworCXU4IGh3X3JldmlzaW9uLCBvbGRfdmVyOworCXU4IHRtcDsKKwl1OCBmd19jYXBhYmlsaXRpZXM7CisJaW50IHBsbF9mcmVxOworCisJdG1wID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1VOSyk7CisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9IV19VTkssIHRtcCAmIH5FTkVfSFdfVU5LX0NMUik7CisKKwljaGlwX21ham9yID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1ZFUl9NQUpPUik7CisJY2hpcF9taW5vciA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9IV19WRVJfTUlOT1IpOworCisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9IV19VTkssIHRtcCk7CisJaHdfcmV2aXNpb24gPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfSFdfVkVSU0lPTik7CisJb2xkX3ZlciA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9IV19WRVJfT0xEKTsKKworCXBsbF9mcmVxID0gKGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9QTExGUkgpIDw8IDQpICsKKwkJKGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9QTExGUkwpID4+IDQpOworCisJaWYgKHBsbF9mcmVxICE9IDEwMDApCisJCWRldi0+cnhfcGVyaW9kX2FkanVzdCA9IDQ7CisJZWxzZQorCQlkZXYtPnJ4X3BlcmlvZF9hZGp1c3QgPSAyOworCisKKwllbmVfcHJpbnRrKEtFUk5fTk9USUNFLCAiUExMIGZyZXEgPSAlZFxuIiwgcGxsX2ZyZXEpOworCisJaWYgKGh3X3JldmlzaW9uID09IDB4RkYpIHsKKworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgImRldmljZSBzZWVtcyB0byBiZSBkaXNhYmxlZFxuIik7CisJCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJInNlbmQgYSBtYWlsIHRvIGxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgInBsZWFzZSBhdHRhY2ggb3V0cHV0IG9mIGFjcGlkdW1wXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNoaXBfbWFqb3IgPT0gMHgzMykgeworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgImNoaXBzIDB4MzN4eCBhcmVuJ3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGNoaXBfbWFqb3IgPT0gMHgzOSAmJiBjaGlwX21pbm9yID09IDB4MjYgJiYgaHdfcmV2aXNpb24gPT0gMHhDMCkgeworCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0M7CisJfSBlbHNlIGlmIChvbGRfdmVyID09IDB4MjQgJiYgaHdfcmV2aXNpb24gPT0gMHhDMCkgeworCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0I7CisJCWVuZV9wcmludGsoS0VSTl9OT1RJQ0UsICJLQjM5MjZCIGRldGVjdGVkXG4iKTsKKwl9IGVsc2UgeworCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0Q7CisJCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAorCQkJInVua25vd24gRU5FIGNoaXAgZGV0ZWN0ZWQsIGFzc3VtaW5nIEtCMzkyNkRcbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCSJkcml2ZXIgc3VwcG9ydCBtaWdodCBiZSBub3QgY29tcGxldGUiKTsKKworCX0KKworCWVuZV9wcmludGsoS0VSTl9ERUJVRywKKwkJImNoaXAgaXMgMHglMDJ4JTAyeCAtIGtidmVyID0gMHglMDJ4LCByZXYgPSAweCUwMnhcbiIsCisJCQljaGlwX21ham9yLCBjaGlwX21pbm9yLCBvbGRfdmVyLCBod19yZXZpc2lvbik7CisKKwkvKiBkZXRlY3QgZmVhdHVyZXMgaGFyZHdhcmUgc3VwcG9ydHMgKi8KKwlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKQorCQlyZXR1cm4gMDsKKworCWZ3X2NhcGFiaWxpdGllcyA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9GVzIpOworCWVuZV9kYmcoIkZpcm13YXJlIGNhcGFiaWxpdGllczogJTAyeCIsIGZ3X2NhcGFiaWxpdGllcyk7CisKKwlkZXYtPmh3X2dwaW80MF9sZWFybmluZyA9IGZ3X2NhcGFiaWxpdGllcyAmIEVORV9GVzJfR1A0MF9BU19MRUFSTjsKKwlkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlID0gZndfY2FwYWJpbGl0aWVzICYgRU5FX0ZXMl9MRUFSTklORzsKKworCWRldi0+aHdfZmFuX2FzX25vcm1hbF9pbnB1dCA9IGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgJiYKKwkgICAgKGZ3X2NhcGFiaWxpdGllcyAmIEVORV9GVzJfRkFOX0FTX05STUxfSU4pOworCisJZW5lX3ByaW50ayhLRVJOX05PVElDRSwgImhhcmR3YXJlIGZlYXR1cmVzOlxuIik7CisJZW5lX3ByaW50ayhLRVJOX05PVElDRSwKKwkJImxlYXJuaW5nIGFuZCB0cmFuc21pdCAlcywgZ3BpbzQwX2xlYXJuICVzLCBmYW5faW4gJXNcbiIsCisJICAgICAgIGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgPyAib24iIDogIm9mZiIsCisJICAgICAgIGRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nID8gIm9uIiA6ICJvZmYiLAorCSAgICAgICBkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQgPyAib24iIDogIm9mZiIpOworCisJaWYgKGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpIHsKKwkJZW5lX3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCSJEZXZpY2Ugc3VwcG9ydHMgdHJhbnNtaXR0aW5nLCBidXQgdGhhdCBzdXBwb3J0IGlzXG4iKTsKKwkJZW5lX3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCSJsaWdodGx5IHRlc3RlZC4gUGxlYXNlIHRlc3QgaXQgYW5kIG1haWxcbiIpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJImxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogdGhpcyBlbmFibGVzL2Rpc2FibGVzIElSIGlucHV0IHZpYSBncGlvNDAqLworc3RhdGljIHZvaWQgZW5lX2VuYWJsZV9ncGlvNDBfcmVjZWl2ZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKQoreworCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9DSVJfQ09ORjIsIGVuYWJsZSA/CisJCQkgICAgICAwIDogRU5FX0NJUl9DT05GMl9HUElPNDBESVMsCisJCQkgICAgICBFTkVfQ0lSX0NPTkYyX0dQSU80MERJUyk7Cit9CisKKy8qIHRoaXMgZW5hYmxlcy9kaXNhYmxlcyBJUiB2aWEgc3RhbmRhcmQgaW5wdXQgKi8KK3N0YXRpYyB2b2lkIGVuZV9lbmFibGVfbm9ybWFsX3JlY2VpdmUoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0NJUl9DT05GMSwgZW5hYmxlID8gRU5FX0NJUl9DT05GMV9SWF9PTiA6IDApOworfQorCisvKiB0aGlzIGVuYWJsZXMvZGlzYWJsZXMgSVIgaW5wdXQgdmlhIHVudXNlZCBmYW4gdGFjaHRvbWV0ZXIgaW5wdXQgKi8KK3N0YXRpYyB2b2lkIGVuZV9lbmFibGVfZmFuX3JlY2VpdmUoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwlpZiAoIWVuYWJsZSkKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCAwKTsKKwllbHNlIHsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCBFTkVfRkFOX0FTX0lOMV9FTik7CisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMiwgRU5FX0ZBTl9BU19JTjJfRU4pOworCX0KKwlkZXYtPnJ4X2Zhbl9pbnB1dF9pbnVzZSA9IGVuYWJsZTsKK30KKworCisvKiBTZW5zZSBjdXJyZW50IHJlY2VpdmVkIGNhcnJpZXIgKi8KK3N0YXRpYyBpbnQgZW5lX3J4X3NlbnNlX2NhcnJpZXIoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcGVyaW9kID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX1JYX0NBUlJJRVIpOworCWludCBjYXJyaWVyOworCWVuZV9kYmcoIlJYOiBoYXJkd2FyZSBjYXJyaWVyIHBlcmlvZCA9ICUwMngiLCBwZXJpb2QpOworCisJaWYgKCEocGVyaW9kICYgRU5FX1JYX0NBUlJJRVJfVkFMSUQpKQorCQlyZXR1cm4gMDsKKworCXBlcmlvZCAmPSB+RU5FX1JYX0NBUlJJRVJfVkFMSUQ7CisKKwlpZiAoIXBlcmlvZCkKKwkJcmV0dXJuIDA7CisKKwljYXJyaWVyID0gMjAwMDAwMCAvIHBlcmlvZDsKKwllbmVfZGJnKCJSWDogc2Vuc2VkIGNhcnJpZXIgPSAlZCBIeiIsIGNhcnJpZXIpOworCXJldHVybiBjYXJyaWVyOworfQorCisvKiBkZXRlcm1pbmUgd2hpY2ggaW5wdXQgdG8gdXNlKi8KK3N0YXRpYyB2b2lkIGVuZV9yeF9zZXRfaW5wdXRzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJaW50IGxlYXJuaW5nX21vZGUgPSBkZXYtPmxlYXJuaW5nX2VuYWJsZWQ7CisKKwllbmVfZGJnKCJSWDogc2V0dXAgcmVjZWl2ZXIsIGxlYXJuaW5nIG1vZGUgPSAlZCIsIGxlYXJuaW5nX21vZGUpOworCisJZW5lX2VuYWJsZV9ub3JtYWxfcmVjZWl2ZShkZXYsIDEpOworCisJLyogb2xkIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBsZWFybmluZyBtb2RlIGZvciBzdXJlICovCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPD0gRU5FX0hXX0IpCisJCXJldHVybjsKKworCS8qIHJlY2VpdmVyIG5vdCBsZWFybmluZyBjYXBhYmxlLCBzdGlsbCBzZXQgZ3BpbzQwIGNvcnJlY3RseSAqLworCWlmICghZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSkgeworCQllbmVfZW5hYmxlX2dwaW80MF9yZWNlaXZlKGRldiwgIWRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGVuYWJsZSBsZWFybmluZyBtb2RlICovCisJaWYgKGxlYXJuaW5nX21vZGUpIHsKKwkJZW5lX2VuYWJsZV9ncGlvNDBfcmVjZWl2ZShkZXYsIGRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nKTsKKworCQkvKiBmYW4gaW5wdXQgaXMgbm90IHVzZWQgZm9yIGxlYXJuaW5nICovCisJCWlmIChkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQpCisJCQllbmVfZW5hYmxlX2Zhbl9yZWNlaXZlKGRldiwgMCk7CisKKwkvKiBkaXNhYmxlIGxlYXJuaW5nIG1vZGUgKi8KKwl9IGVsc2UgeworCQlpZiAoZGV2LT5od19mYW5fYXNfbm9ybWFsX2lucHV0KSB7CisJCQllbmVfZW5hYmxlX2Zhbl9yZWNlaXZlKGRldiwgMSk7CisJCQllbmVfZW5hYmxlX25vcm1hbF9yZWNlaXZlKGRldiwgMCk7CisJCX0gZWxzZQorCQkJZW5lX2VuYWJsZV9ncGlvNDBfcmVjZWl2ZShkZXYsCisJCQkJCSFkZXYtPmh3X2dwaW80MF9sZWFybmluZyk7CisJfQorCisJLyogc2V0IGZldyBhZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGlzIG1vZGUgKi8KKwllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfQ0lSX0NPTkYxLCBsZWFybmluZ19tb2RlID8KKwkJCSAgICAgIEVORV9DSVJfQ09ORjFfTEVBUk4xIDogMCwgRU5FX0NJUl9DT05GMV9MRUFSTjEpOworCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0NJUl9DT05GMiwgbGVhcm5pbmdfbW9kZSA/CisJCQkgICAgICBFTkVfQ0lSX0NPTkYyX0xFQVJOMiA6IDAsIEVORV9DSVJfQ09ORjJfTEVBUk4yKTsKKworCWlmIChkZXYtPnJ4X2Zhbl9pbnB1dF9pbnVzZSkgeworCQlkZXYtPnByb3BzLT5yeF9yZXNvbHV0aW9uID0gRU5FX1NBTVBMRV9QRVJJT0RfRkFOICogMTAwMDsKKworCQlkZXYtPnByb3BzLT50aW1lb3V0ID0KKwkJCUVORV9GQU5fVkFMVUVfTUFTSyAqIEVORV9TQU1QTEVfUEVSSU9EX0ZBTiAqIDEwMDA7CisJfSBlbHNlIHsKKwkJZGV2LT5wcm9wcy0+cnhfcmVzb2x1dGlvbiA9IHNhbXBsZV9wZXJpb2QgKiAxMDAwOworCQlkZXYtPnByb3BzLT50aW1lb3V0ID0gRU5FX01BWEdBUCAqIDEwMDA7CisJfQorfQorCisvKiBFbmFibGUgdGhlIGRldmljZSBmb3IgcmVjZWl2ZSAqLworc3RhdGljIHZvaWQgZW5lX3J4X2VuYWJsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQoreworCXU4IHJlZ192YWx1ZTsKKworCWlmIChkZXYtPmh3X3JldmlzaW9uIDwgRU5FX0hXX0MpIHsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUJfSVJRLCBkZXYtPmlycSA8PCAxKTsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUJfSVJRX1VOSzEsIDB4MDEpOworCX0gZWxzZSB7CisJCXJlZ192YWx1ZSA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORUNfSVJRKSAmIDB4RjA7CisJCXJlZ192YWx1ZSB8PSBFTkVDX0lSUV9VTktfRU47CisJCXJlZ192YWx1ZSAmPSB+RU5FQ19JUlFfU1RBVFVTOworCQlyZWdfdmFsdWUgfD0gKGRldi0+aXJxICYgRU5FQ19JUlFfTUFTSyk7CisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVDX0lSUSwgcmVnX3ZhbHVlKTsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9UWF9VTksxLCAweDYzKTsKKwl9CisKKwllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0NJUl9DT05GMiwgMHgwMCk7CisJZW5lX3J4X3NldF9pbnB1dHMoZGV2KTsKKworCS8qIHNldCBzYW1wbGluZyBwZXJpb2QgKi8KKwllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0NJUl9TQU1QTEVfUEVSSU9ELCBzYW1wbGVfcGVyaW9kKTsKKworCS8qIGFjayBhbnkgcGVuZGluZyBpcnFzIC0ganVzdCBpbiBjYXNlICovCisJZW5lX2lycV9zdGF0dXMoZGV2KTsKKworCS8qIGVuYWJsZSBmaXJtd2FyZSBiaXRzICovCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwKKwkJCSAgICAgIEVORV9GVzFfRU5BQkxFIHwgRU5FX0ZXMV9JUlEsCisJCQkgICAgICBFTkVfRlcxX0VOQUJMRSB8IEVORV9GVzFfSVJRKTsKKworCS8qIGVudGVyIGlkbGUgbW9kZSAqLworCWlyX3Jhd19ldmVudF9zZXRfaWRsZShkZXYtPmlkZXYsIDEpOworCWlyX3Jhd19ldmVudF9yZXNldChkZXYtPmlkZXYpOworCit9CisKKy8qIERpc2FibGUgdGhlIGRldmljZSByZWNlaXZlciAqLworc3RhdGljIHZvaWQgZW5lX3J4X2Rpc2FibGUoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwkvKiBkaXNhYmxlIGlucHV0cyAqLworCWVuZV9lbmFibGVfbm9ybWFsX3JlY2VpdmUoZGV2LCAwKTsKKworCWlmIChkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQpCisJCWVuZV9lbmFibGVfZmFuX3JlY2VpdmUoZGV2LCAwKTsKKworCS8qIGRpc2FibGUgaGFyZHdhcmUgSVJRIGFuZCBmaXJtd2FyZSBmbGFnICovCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwgMCwgRU5FX0ZXMV9FTkFCTEUgfCBFTkVfRlcxX0lSUSk7CisKKwlpcl9yYXdfZXZlbnRfc2V0X2lkbGUoZGV2LT5pZGV2LCAxKTsKKwlpcl9yYXdfZXZlbnRfcmVzZXQoZGV2LT5pZGV2KTsKK30KKworCisvKiBwcmVwYXJlIHRyYW5zbWlzc2lvbiAqLworc3RhdGljIHZvaWQgZW5lX3R4X3ByZXBhcmUoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCBjb25mMTsKKworCWNvbmYxID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0NJUl9DT05GMSk7CisJZGV2LT5zYXZlZF9jb25mMSA9IGNvbmYxOworCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPT0gRU5FX0hXX0MpCisJCWNvbmYxICY9IH5FTkVfQ0lSX0NPTkYxX1RYX0NMRUFSOworCisJLyogRW5hYmxlIFRYIGVuZ2luZSAqLworCWNvbmYxIHw9IEVORV9DSVJfQ09ORjFfVFhfT047CisKKwkvKiBTZXQgY2FycmllciAqLworCWlmIChkZXYtPnR4X3BlcmlvZCkgeworCisJCS8qIE5PVEU6IGR1dHkgY3ljbGUgaGFuZGxpbmcgaXMganVzdCBhIGd1ZXNzLCBpdCBtaWdodAorCQkJbm90IGJlIGF2aWFibGUuIERlZmF1bHQgdmFsdWVzIHdlcmUgdGVzdGVkICovCisJCWludCB0eF9wZXJpb2RfaW41MDBucyA9IGRldi0+dHhfcGVyaW9kICogMjsKKworCQlpbnQgdHhfcHVsc2Vfd2lkdGhfaW5fNTAwbnMgPQorCQkJdHhfcGVyaW9kX2luNTAwbnMgLyAoMTAwIC8gZGV2LT50eF9kdXR5X2N5Y2xlKTsKKworCQlpZiAoIXR4X3B1bHNlX3dpZHRoX2luXzUwMG5zKQorCQkJdHhfcHVsc2Vfd2lkdGhfaW5fNTAwbnMgPSAxOworCisJCWVuZV9kYmcoIlRYOiBwdWxzZSBkaXN0YW5jZSA9ICVkICogNTAwIG5zIiwgdHhfcGVyaW9kX2luNTAwbnMpOworCQllbmVfZGJnKCJUWDogcHVsc2Ugd2lkdGggPSAlZCAqIDUwMCBucyIsCisJCQkJCQl0eF9wdWxzZV93aWR0aF9pbl81MDBucyk7CisKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9UWF9QRVJJT0QsIEVORV9UWF9QRVJJT0RfVU5LQklUIHwKKwkJCQkJdHhfcGVyaW9kX2luNTAwbnMpOworCisJCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfVFhfUEVSSU9EX1BVTFNFLAorCQkJCQl0eF9wdWxzZV93aWR0aF9pbl81MDBucyk7CisKKwkJY29uZjEgfD0gRU5FX0NJUl9DT05GMV9UWF9DQVJSOworCX0gZWxzZQorCQljb25mMSAmPSB+RU5FX0NJUl9DT05GMV9UWF9DQVJSOworCisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9DSVJfQ09ORjEsIGNvbmYxKTsKKworfQorCisvKiBlbmQgdHJhbnNtaXNzaW9uICovCitzdGF0aWMgdm9pZCBlbmVfdHhfY29tcGxldGUoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0NJUl9DT05GMSwgZGV2LT5zYXZlZF9jb25mMSk7CisJZGV2LT50eF9idWZmZXIgPSBOVUxMOworfQorCisvKiBzZXQgdHJhbnNtaXQgbWFzayAqLworc3RhdGljIHZvaWQgZW5lX3R4X2h3X3NldF90cmFuc21pdGVyX21hc2soc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCB0eHBvcnQxID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX1RYX1BPUlQxKSAmIH5FTkVfVFhfUE9SVDFfRU47CisJdTggdHhwb3J0MiA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9UWF9QT1JUMikgJiB+RU5FX1RYX1BPUlQyX0VOOworCisJaWYgKGRldi0+dHJhbnNtaXR0ZXJfbWFzayAmIDB4MDEpCisJCXR4cG9ydDEgfD0gRU5FX1RYX1BPUlQxX0VOOworCisJaWYgKGRldi0+dHJhbnNtaXR0ZXJfbWFzayAmIDB4MDIpCisJCXR4cG9ydDIgfD0gRU5FX1RYX1BPUlQyX0VOOworCisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9UWF9QT1JUMSwgdHhwb3J0MSk7CisJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9UWF9QT1JUMiwgdHhwb3J0Mik7Cit9CisKKy8qIFRYIG9uZSBzYW1wbGUgLSBtdXN0IGJlIGNhbGxlZCB3aXRoIGRldi0+aHdfbG9jayovCitzdGF0aWMgdm9pZCBlbmVfdHhfc2FtcGxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYpCit7CisJdTggcmF3X3R4OworCXUzMiBzYW1wbGU7CisKKwlpZiAoIWRldi0+dHhfYnVmZmVyKSB7CisJCWVuZV9kYmcoIlRYOiBhdHRlbXB0IHRvIHRyYW5zbWl0IE5VTEwgYnVmZmVyIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBHcmFiIG5leHQgVFggc2FtcGxlICovCisJaWYgKCFkZXYtPnR4X3NhbXBsZSkgeworYWdhaW46CisJCWlmIChkZXYtPnR4X3BvcyA9PSBkZXYtPnR4X2xlbiArIDEpIHsKKwkJCWlmICghZGV2LT50eF9kb25lKSB7CisJCQkJZW5lX2RiZygiVFg6IG5vIG1vcmUgZGF0YSB0byBzZW5kIik7CisJCQkJZGV2LT50eF9kb25lID0gMTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9IGVsc2UgeworCQkJCWVuZV9kYmcoIlRYOiBsYXN0IHNhbXBsZSBzZW50IGJ5IGhhcmR3YXJlIik7CisJCQkJZW5lX3R4X2NvbXBsZXRlKGRldik7CisJCQkJY29tcGxldGUoJmRldi0+dHhfY29tcGxldGUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCXNhbXBsZSA9IGRldi0+dHhfYnVmZmVyW2Rldi0+dHhfcG9zKytdOworCQlkZXYtPnR4X3NhbXBsZV9wdWxzZSA9ICFkZXYtPnR4X3NhbXBsZV9wdWxzZTsKKworCQllbmVfZGJnKCJUWDogc2FtcGxlICU4ZCAoJXMpIiwgc2FtcGxlLCBkZXYtPnR4X3NhbXBsZV9wdWxzZSA/CisJCQkJCQkJInB1bHNlIiA6ICJzcGFjZSIpOworCisJCWRldi0+dHhfc2FtcGxlID0gRElWX1JPVU5EX0NMT1NFU1Qoc2FtcGxlLCBFTkVfVFhfU01QTF9QRVJJT0QpOworCisJCS8qIGd1YXJkIGFnYWluc3QgdG9vIHNob3J0IHNhbXBsZXMgKi8KKwkJaWYgKCFkZXYtPnR4X3NhbXBsZSkKKwkJCWdvdG8gYWdhaW47CisJfQorCisJcmF3X3R4ID0gbWluKGRldi0+dHhfc2FtcGxlICwgKHVuc2lnbmVkIGludClFTkVfVFhfU01MUF9NQVNLKTsKKwlkZXYtPnR4X3NhbXBsZSAtPSByYXdfdHg7CisKKwlpZiAoZGV2LT50eF9zYW1wbGVfcHVsc2UpCisJCXJhd190eCB8PSBFTkVfVFhfUFVMU0VfTUFTSzsKKworCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfVFhfSU5QVVQxICsgZGV2LT50eF9yZWcsIHJhd190eCk7CisJZGV2LT50eF9yZWcgPSAhZGV2LT50eF9yZWc7CitleGl0OgorCS8qIHNpbXVsYXRlIFRYIGRvbmUgaW50ZXJydXB0ICovCisJaWYgKHR4c2ltKQorCQltb2RfdGltZXIoJmRldi0+dHhfc2ltX3RpbWVyLCBqaWZmaWVzICsgSFogLyA1MDApOworfQorCisvKiB0aW1lciB0byBzaW11bGF0ZSB0eCBkb25lIGludGVycnVwdCAqLworc3RhdGljIHZvaWQgZW5lX3R4X2lycXNpbSh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwllbmVfdHhfc2FtcGxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7Cit9CisKKworLyogcmVhZCBpcnEgc3RhdHVzIGFuZCBhY2sgaXQgKi8KK3N0YXRpYyBpbnQgZW5lX2lycV9zdGF0dXMoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwl1OCBpcnFfc3RhdHVzOworCXU4IGZ3X2ZsYWdzMSwgZndfZmxhZ3MyOworCWludCBjdXJfcnhfcG9pbnRlcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWZ3X2ZsYWdzMiA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9GVzIpOworCWN1cl9yeF9wb2ludGVyID0gISEoZndfZmxhZ3MyICYgRU5FX0ZXMl9CVUZfSElHSCk7CisKKwlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKSB7CisJCWlycV9zdGF0dXMgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVCX0lSUV9TVEFUVVMpOworCisJCWlmICghKGlycV9zdGF0dXMgJiBFTkVCX0lSUV9TVEFUVVNfSVIpKQorCQkJcmV0dXJuIDA7CisKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUJfSVJRX1NUQVRVUywKKwkJCQkgaXJxX3N0YXR1cyAmIH5FTkVCX0lSUV9TVEFUVVNfSVIpOworCQlkZXYtPnJ4X3BvaW50ZXIgPSBjdXJfcnhfcG9pbnRlcjsKKwkJcmV0dXJuIEVORV9JUlFfUlg7CisJfQorCisJaXJxX3N0YXR1cyA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORUNfSVJRKTsKKworCWlmICghKGlycV9zdGF0dXMgJiBFTkVDX0lSUV9TVEFUVVMpKQorCQlyZXR1cm4gMDsKKworCS8qIG9yaWdpbmFsIGRyaXZlciBkb2VzIHRoYXQgdHdpY2UgLSBhIHdvcmthcm91bmQgPyAqLworCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVDX0lSUSwgaXJxX3N0YXR1cyAmIH5FTkVDX0lSUV9TVEFUVVMpOworCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVDX0lSUSwgaXJxX3N0YXR1cyAmIH5FTkVDX0lSUV9TVEFUVVMpOworCisJLyogY2xlYXIgdW5rbm93biBmbGFnIGluIEY4RjkgKi8KKwlpZiAoZndfZmxhZ3MyICYgRU5FX0ZXMl9JUlFfQ0xSKQorCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0ZXMiwgZndfZmxhZ3MyICYgfkVORV9GVzJfSVJRX0NMUik7CisKKwkvKiBjaGVjayBpZiB0aGlzIGlzIGEgVFggaW50ZXJydXB0ICovCisJZndfZmxhZ3MxID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0ZXMSk7CisJaWYgKGZ3X2ZsYWdzMSAmIEVORV9GVzFfVFhJUlEpIHsKKwkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GVzEsIGZ3X2ZsYWdzMSAmIH5FTkVfRlcxX1RYSVJRKTsKKwkJcmV0dmFsIHw9IEVORV9JUlFfVFg7CisJfQorCisJLyogQ2hlY2sgaWYgdGhpcyBpcyBSWCBpbnRlcnJ1cHQgKi8KKwlpZiAoZGV2LT5yeF9wb2ludGVyICE9IGN1cl9yeF9wb2ludGVyKSB7CisJCXJldHZhbCB8PSBFTkVfSVJRX1JYOworCQlkZXYtPnJ4X3BvaW50ZXIgPSBjdXJfcnhfcG9pbnRlcjsKKworCX0gZWxzZSBpZiAoIShyZXR2YWwgJiBFTkVfSVJRX1RYKSkgeworCQllbmVfZGJnKCJSWDogaW50ZXJydXB0IHdpdGhvdXQgY2hhbmdlIGluIFJYIHBvaW50ZXIoJWQpIiwKKwkJCWRldi0+cnhfcG9pbnRlcik7CisJCXJldHZhbCB8PSBFTkVfSVJRX1JYOworCX0KKworCWlmICgocmV0dmFsICYgRU5FX0lSUV9SWCkgJiYgKHJldHZhbCAmIEVORV9JUlFfVFgpKQorCQllbmVfZGJnKCJib3RoIFJYIGFuZCBUWCBpbnRlcnJ1cHQgYXQgc2FtZSB0aW1lIik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBpbnRlcnJ1cHQgaGFuZGxlciAqLworc3RhdGljIGlycXJldHVybl90IGVuZV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwl1MTYgaHdfdmFsdWU7CisJaW50IGksIGh3X3NhbXBsZTsKKwlpbnQgcHVsc2U7CisJaW50IGlycV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2FycmllciA9IDA7CisJaXJxcmV0dXJuX3QgcmV0dmFsID0gSVJRX05PTkU7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJc3RydWN0IGlyX3Jhd19ldmVudCBldjsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCWlycV9zdGF0dXMgPSBlbmVfaXJxX3N0YXR1cyhkZXYpOworCisJaWYgKCFpcnFfc3RhdHVzKQorCQlnb3RvIHVubG9jazsKKworCXJldHZhbCA9IElSUV9IQU5ETEVEOworCisJaWYgKGlycV9zdGF0dXMgJiBFTkVfSVJRX1RYKSB7CisKKwkJaWYgKCFkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7CisJCQllbmVfZGJnKCJUWCBpbnRlcnJ1cHQgb24gdW5zdXBwb3J0ZWQgZGV2aWNlISIpOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJZW5lX3R4X3NhbXBsZShkZXYpOworCX0KKworCWlmICghKGlycV9zdGF0dXMgJiBFTkVfSVJRX1JYKSkKKwkJZ290byB1bmxvY2s7CisKKworCWlmIChkZXYtPmNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQgfHwgZGVidWcpCisJCWNhcnJpZXIgPSBlbmVfcnhfc2Vuc2VfY2FycmllcihkZXYpOworI2lmIDAKKwkvKiBUT0RPICovCisJaWYgKGRldi0+Y2Fycmllcl9kZXRlY3RfZW5hYmxlZCAmJiBjYXJyaWVyKQorCQlpcl9yYXdfZXZlbnRfcmVwb3J0X2ZyZXF1ZW5jeShkZXYtPmlkZXYsIGNhcnJpZXIpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgRU5FX1NBTVBMRVNfU0laRTsgaSsrKSB7CisJCWh3X3ZhbHVlID0gZW5lX2h3X3JlYWRfcmVnKGRldiwKKwkJCQlFTkVfU0FNUExFX0JVRkZFUiArIGRldi0+cnhfcG9pbnRlciAqIDQgKyBpKTsKKworCQlpZiAoZGV2LT5yeF9mYW5faW5wdXRfaW51c2UpIHsKKwkJCS8qIHJlYWQgaGlnaCBwYXJ0IG9mIHRoZSBzYW1wbGUgKi8KKwkJCWh3X3ZhbHVlIHw9IGVuZV9od19yZWFkX3JlZyhkZXYsCisJCQkgICAgRU5FX1NBTVBMRV9CVUZGRVJfRkFOICsKKwkJCQkJZGV2LT5yeF9wb2ludGVyICogNCArIGkpIDw8IDg7CisJCQlwdWxzZSA9IGh3X3ZhbHVlICYgRU5FX0ZBTl9TTVBMX1BVTFNfTVNLOworCisJCQkvKiBjbGVhciBzcGFjZSBiaXQsIGFuZCBvdGhlciB1bnVzZWQgYml0cyAqLworCQkJaHdfdmFsdWUgJj0gRU5FX0ZBTl9WQUxVRV9NQVNLOworCQkJaHdfc2FtcGxlID0gaHdfdmFsdWUgKiBFTkVfU0FNUExFX1BFUklPRF9GQU47CisKKwkJfSBlbHNlIHsKKwkJCXB1bHNlID0gIShod192YWx1ZSAmIEVORV9TQU1QTEVfU1BDX01BU0spOworCQkJaHdfdmFsdWUgJj0gRU5FX1NBTVBMRV9WQUxVRV9NQVNLOworCQkJaHdfc2FtcGxlID0gaHdfdmFsdWUgKiBzYW1wbGVfcGVyaW9kOworCisJCQlpZiAoZGV2LT5yeF9wZXJpb2RfYWRqdXN0KSB7CisJCQkJaHdfc2FtcGxlICo9ICgxMDAgLSBkZXYtPnJ4X3BlcmlvZF9hZGp1c3QpOworCQkJCWh3X3NhbXBsZSAvPSAxMDA7CisJCQl9CisJCX0KKwkJLyogbm8gbW9yZSBkYXRhICovCisJCWlmICghKGh3X3ZhbHVlKSkKKwkJCWJyZWFrOworCisJCWVuZV9kYmcoIlJYOiAlZCAoJXMpIiwgaHdfc2FtcGxlLCBwdWxzZSA/ICJwdWxzZSIgOiAic3BhY2UiKTsKKworCisJCWV2LmR1cmF0aW9uID0gaHdfc2FtcGxlICogMTAwMDsKKwkJZXYucHVsc2UgPSBwdWxzZTsKKwkJaXJfcmF3X2V2ZW50X3N0b3JlX3dpdGhfZmlsdGVyKGRldi0+aWRldiwgJmV2KTsKKwl9CisKKwlpcl9yYXdfZXZlbnRfaGFuZGxlKGRldi0+aWRldik7Cit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogSW5pdGlhbGl6ZSBkZWZhdWx0IHNldHRpbmdzICovCitzdGF0aWMgdm9pZCBlbmVfc2V0dXBfc2V0dGluZ3Moc3RydWN0IGVuZV9kZXZpY2UgKmRldikKK3sKKwlkZXYtPnR4X3BlcmlvZCA9IDMyOworCWRldi0+dHhfZHV0eV9jeWNsZSA9IDI1OyAvKiUqLworCWRldi0+dHJhbnNtaXR0ZXJfbWFzayA9IDM7CisKKwkvKiBGb3JjZSBsZWFybmluZyBtb2RlIGlmIChpbnB1dCA9PSAyKSwgb3RoZXJ3aXNlCisJCWxldCB1c2VyIHNldCBpdCB3aXRoIExJUkNfU0VUX1JFQ19DQVJSSUVSICovCisJZGV2LT5sZWFybmluZ19lbmFibGVkID0KKwkJKGlucHV0ID09IDIgJiYgZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSk7CisKKwlkZXYtPnJ4X3BvaW50ZXIgPSAtMTsKKworfQorCisvKiBvdXRzaWRlIGludGVyZmFjZTogY2FsbGVkIG9uIGZpcnN0IG9wZW4qLworc3RhdGljIGludCBlbmVfb3Blbih2b2lkICpkYXRhKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJZGV2LT5pbl91c2UgPSAxOworCWVuZV9zZXR1cF9zZXR0aW5ncyhkZXYpOworCWVuZV9yeF9lbmFibGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IGNhbGxlZCBvbiBkZXZpY2UgY2xvc2UqLworc3RhdGljIHZvaWQgZW5lX2Nsb3NlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisKKwllbmVfcnhfZGlzYWJsZShkZXYpOworCWRldi0+aW5fdXNlID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IHNldCB0cmFuc21pdHRlciBtYXNrICovCitzdGF0aWMgaW50IGVuZV9zZXRfdHhfbWFzayh2b2lkICpkYXRhLCB1MzIgdHhfbWFzaykKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVuZV9kYmcoIlRYOiBhdHRlbXB0IHRvIHNldCB0cmFuc21pdHRlciBtYXNrICUwMngiLCB0eF9tYXNrKTsKKworCS8qIGludmFsaWQgdHhtYXNrICovCisJaWYgKCF0eF9tYXNrIHx8IHR4X21hc2sgJiB+MHgzKSB7CisJCWVuZV9kYmcoIlRYOiBpbnZhbGlkIG1hc2siKTsKKwkJLyogcmV0dXJuIGNvdW50IG9mIHRyYW5zbWl0dGVycyAqLworCQlyZXR1cm4gMjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJZGV2LT50cmFuc21pdHRlcl9tYXNrID0gdHhfbWFzazsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2UgOiBzZXQgdHggY2FycmllciAqLworc3RhdGljIGludCBlbmVfc2V0X3R4X2NhcnJpZXIodm9pZCAqZGF0YSwgdTMyIGNhcnJpZXIpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcGVyaW9kID0gMTAwMDAwMCAvIGNhcnJpZXI7IC8qICgxIC8gZnJlcSkgKCogIyB1c2VjIGluIDEgc2VjKSAqLworCisJZW5lX2RiZygiVFg6IGF0dGVtcHQgdG8gc2V0IHR4IGNhcnJpZXIgdG8gJWQga0h6IiwgY2Fycmllcik7CisKKwlpZiAocGVyaW9kICYmIChwZXJpb2QgPiBFTkVfVFhfUEVSSU9EX01BWCB8fAorCQkJcGVyaW9kIDwgRU5FX1RYX1BFUklPRF9NSU4pKSB7CisKKwkJZW5lX2RiZygiVFg6IG91dCBvZiByYW5nZSAlZC0lZCBjYXJyaWVyLCAiCisJCQkiZmFsbGluZyBiYWNrIHRvIDMyIGtIeiIsCisJCQkxMDAwIC8gRU5FX1RYX1BFUklPRF9NSU4sCisJCQkxMDAwIC8gRU5FX1RYX1BFUklPRF9NQVgpOworCisJCXBlcmlvZCA9IDMyOyAvKiB0aGlzIGlzIGp1c3QgYSBjb2luY2lkZW5jZSEhISAqLworCX0KKwllbmVfZGJnKCJUWDogc2V0IGNhcnJpZXIgdG8gJWQga0h6IiwgY2Fycmllcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJZGV2LT50eF9wZXJpb2QgPSBwZXJpb2Q7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IGVuYWJsZSBsZWFybmluZyBtb2RlICovCitzdGF0aWMgaW50IGVuZV9zZXRfbGVhcm5pbmdfbW9kZSh2b2lkICpkYXRhLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKGVuYWJsZSA9PSBkZXYtPmxlYXJuaW5nX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCWRldi0+bGVhcm5pbmdfZW5hYmxlZCA9IGVuYWJsZTsKKwllbmVfcnhfc2V0X2lucHV0cyhkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiBvdXRzaWRlIGludGVyZmFjZTogc2V0IHJlYyBjYXJyaWVyICovCitzdGF0aWMgaW50IGVuZV9zZXRfcmVjX2NhcnJpZXIodm9pZCAqZGF0YSwgdTMyIG1pbiwgdTMyIG1heCkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKKwllbmVfc2V0X2xlYXJuaW5nX21vZGUoZGV2LAorCQltYXggPiBFTkVfTk9STUFMX1JYX0hJIHx8IG1pbiA8IEVORV9OT1JNQUxfUlhfTE9XKTsKKwlyZXR1cm4gMDsKK30KKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IGVuYWJsZSBvciBkaXNhYmxlIGlkbGUgbW9kZSAqLworc3RhdGljIHZvaWQgZW5lX3J4X3NldF9pZGxlKHZvaWQgKmRhdGEsIGludCBpZGxlKQoreworCXN0cnVjdCBlbmVfZGV2aWNlICpkZXYgPSAoc3RydWN0IGVuZV9kZXZpY2UgKilkYXRhOworCWVuZV9kYmcoIiVzYWJsaW5nIGlkbGUgbW9kZSIsIGlkbGUgPyAiZW4iIDogImRpcyIpOworCisJZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0NJUl9TQU1QTEVfUEVSSU9ELAorCQkoZW5hYmxlX2lkbGUgJiYgaWRsZSkgPyAwIDogRU5FX0NJUl9TQU1QTEVfT1ZFUkZMT1csCisJCQlFTkVfQ0lSX1NBTVBMRV9PVkVSRkxPVyk7Cit9CisKKworLyogb3V0c2lkZSBpbnRlcmZhY2U6IHRyYW5zbWl0ICovCitzdGF0aWMgaW50IGVuZV90cmFuc21pdCh2b2lkICpkYXRhLCBpbnQgKmJ1ZiwgdTMyIG4pCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldi0+dHhfYnVmZmVyID0gYnVmOworCWRldi0+dHhfbGVuID0gbiAvIHNpemVvZihpbnQpOworCWRldi0+dHhfcG9zID0gMDsKKwlkZXYtPnR4X3JlZyA9IDA7CisJZGV2LT50eF9kb25lID0gMDsKKwlkZXYtPnR4X3NhbXBsZSA9IDA7CisJZGV2LT50eF9zYW1wbGVfcHVsc2UgPSAwOworCisJZW5lX2RiZygiVFg6ICVkIHNhbXBsZXMiLCBkZXYtPnR4X2xlbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisKKwllbmVfdHhfaHdfc2V0X3RyYW5zbWl0ZXJfbWFzayhkZXYpOworCWVuZV90eF9wcmVwYXJlKGRldik7CisKKwkvKiBUcmFuc21pdCBmaXJzdCB0d28gc2FtcGxlcyAqLworCWVuZV90eF9zYW1wbGUoZGV2KTsKKwllbmVfdHhfc2FtcGxlKGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRldi0+dHhfY29tcGxldGUsIDIgKiBIWikgPT0gMCkgeworCQllbmVfZGJnKCJUWDogdGltZW91dCIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisJCWVuZV90eF9jb21wbGV0ZShkZXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmh3X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UKKwkJZW5lX2RiZygiVFg6IGRvbmUiKTsKKwlyZXR1cm4gbjsKK30KKworCisvKiBwcm9iZSBlbnRyeSAqLworc3RhdGljIGludCBlbmVfcHJvYmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCBpcl9kZXZfcHJvcHMgKmlyX3Byb3BzOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2OworCisJLyogYWxsb2NhdGUgbWVtb3J5ICovCisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaXJfcHJvcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJfZGV2X3Byb3BzKSwgR0ZQX0tFUk5FTCk7CisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVuZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaW5wdXRfZGV2IHx8ICFpcl9wcm9wcyB8fCAhZGV2KQorCQlnb3RvIGVycm9yOworCisJLyogdmFsaWRhdGUgcmVzb3VyY2VzICovCisJZXJyb3IgPSAtRU5PREVWOworCisJaWYgKCFwbnBfcG9ydF92YWxpZChwbnBfZGV2LCAwKSB8fAorCSAgICBwbnBfcG9ydF9sZW4ocG5wX2RldiwgMCkgPCBFTkVfTUFYX0lPKQorCQlnb3RvIGVycm9yOworCisJaWYgKCFwbnBfaXJxX3ZhbGlkKHBucF9kZXYsIDApKQorCQlnb3RvIGVycm9yOworCisJZGV2LT5od19pbyA9IHBucF9wb3J0X3N0YXJ0KHBucF9kZXYsIDApOworCWRldi0+aXJxID0gcG5wX2lycShwbnBfZGV2LCAwKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5od19sb2NrKTsKKworCS8qIGNsYWltIHRoZSByZXNvdXJjZXMgKi8KKwllcnJvciA9IC1FQlVTWTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aHdfaW8sIEVORV9NQVhfSU8sIEVORV9EUklWRVJfTkFNRSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVuZV9pc3IsCisJCQlJUlFGX1NIQVJFRCwgRU5FX0RSSVZFUl9OQU1FLCAodm9pZCAqKWRldikpCisJCWdvdG8gZXJyb3I7CisKKwlwbnBfc2V0X2RydmRhdGEocG5wX2RldiwgZGV2KTsKKwlkZXYtPnBucF9kZXYgPSBwbnBfZGV2OworCisJLyogZGV0ZWN0IGhhcmR3YXJlIHZlcnNpb24gYW5kIGZlYXR1cmVzICovCisJZXJyb3IgPSBlbmVfaHdfZGV0ZWN0KGRldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yOworCisJZW5lX3NldHVwX3NldHRpbmdzKGRldik7CisKKwlpZiAoIWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgJiYgdHhzaW0pIHsKKwkJZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSA9IDE7CisJCXNldHVwX3RpbWVyKCZkZXYtPnR4X3NpbV90aW1lciwgZW5lX3R4X2lycXNpbSwKKwkJCQkJCShsb25nIHVuc2lnbmVkIGludClkZXYpOworCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCSJTaW11bGF0aW9uIG9mIFRYIGFjdGl2YXRlZFxuIik7CisJfQorCisJaXJfcHJvcHMtPmRyaXZlcl90eXBlID0gUkNfRFJJVkVSX0lSX1JBVzsKKwlpcl9wcm9wcy0+YWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX0FMTDsKKwlpcl9wcm9wcy0+cHJpdiA9IGRldjsKKwlpcl9wcm9wcy0+b3BlbiA9IGVuZV9vcGVuOworCWlyX3Byb3BzLT5jbG9zZSA9IGVuZV9jbG9zZTsKKwlpcl9wcm9wcy0+bWluX3RpbWVvdXQgPSBFTkVfTUlOR0FQICogMTAwMDsKKwlpcl9wcm9wcy0+bWF4X3RpbWVvdXQgPSBFTkVfTUFYR0FQICogMTAwMDsKKwlpcl9wcm9wcy0+dGltZW91dCA9IEVORV9NQVhHQVAgKiAxMDAwOworCisJaWYgKGRldi0+aHdfcmV2aXNpb24gPT0gRU5FX0hXX0IpCisJCWlyX3Byb3BzLT5zX2lkbGUgPSBlbmVfcnhfc2V0X2lkbGU7CisKKworCWRldi0+cHJvcHMgPSBpcl9wcm9wczsKKwlkZXYtPmlkZXYgPSBpbnB1dF9kZXY7CisKKwkvKiBkb24ndCBhbGxvdyB0b28gc2hvcnQvbG9uZyBzYW1wbGUgcGVyaW9kcyAqLworCWlmIChzYW1wbGVfcGVyaW9kIDwgNSB8fCBzYW1wbGVfcGVyaW9kID4gMHg3RikKKwkJc2FtcGxlX3BlcmlvZCA9IC0xOworCisJLyogY2hvb3NlIGRlZmF1bHQgc2FtcGxlIHBlcmlvZCAqLworCWlmIChzYW1wbGVfcGVyaW9kID09IC0xKSB7CisKKwkJc2FtcGxlX3BlcmlvZCA9IDUwOworCisJCS8qIG9uIHJldkIsIGhhcmR3YXJlIGlkbGUgbW9kZSBlYXRzIGZpcnN0IHNhbXBsZQorCQkgIGlmIHdlIHNldCB0b28gbG93IHNhbXBsZSBwZXJpb2QgKi8KKwkJaWYgKGRldi0+aHdfcmV2aXNpb24gPT0gRU5FX0hXX0IgJiYgZW5hYmxlX2lkbGUpCisJCQlzYW1wbGVfcGVyaW9kID0gNzU7CisJfQorCisJaXJfcHJvcHMtPnJ4X3Jlc29sdXRpb24gPSBzYW1wbGVfcGVyaW9kICogMTAwMDsKKworCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7CisKKwkJaXJfcHJvcHMtPnNfbGVhcm5pbmdfbW9kZSA9IGVuZV9zZXRfbGVhcm5pbmdfbW9kZTsKKworCQlpZiAoaW5wdXQgPT0gMCkKKwkJCWlyX3Byb3BzLT5zX3J4X2NhcnJpZXJfcmFuZ2UgPSBlbmVfc2V0X3JlY19jYXJyaWVyOworCisJCWluaXRfY29tcGxldGlvbigmZGV2LT50eF9jb21wbGV0ZSk7CisJCWlyX3Byb3BzLT50eF9pciA9IGVuZV90cmFuc21pdDsKKwkJaXJfcHJvcHMtPnNfdHhfbWFzayA9IGVuZV9zZXRfdHhfbWFzazsKKwkJaXJfcHJvcHMtPnNfdHhfY2FycmllciA9IGVuZV9zZXRfdHhfY2FycmllcjsKKwkJaXJfcHJvcHMtPnR4X3Jlc29sdXRpb24gPSBFTkVfVFhfU01QTF9QRVJJT0QgKiAxMDAwOworCQkvKiBpcl9wcm9wcy0+c19jYXJyaWVyX3JlcG9ydCA9IGVuZV9zZXRfY2Fycmllcl9yZXBvcnQ7ICovCisJfQorCisKKwlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZwbnBfZGV2LT5kZXYsIDEpOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmcG5wX2Rldi0+ZGV2LCAxKTsKKworCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKQorCQlpbnB1dF9kZXYtPm5hbWUgPSAiRU5FIGVIb21lIEluZnJhcmVkIFJlbW90ZSBUcmFuc2NlaXZlciI7CisJZWxzZQorCQlpbnB1dF9kZXYtPm5hbWUgPSAiRU5FIGVIb21lIEluZnJhcmVkIFJlbW90ZSBSZWNlaXZlciI7CisKKworCWVycm9yID0gLUVOT0RFVjsKKwlpZiAoaXJfaW5wdXRfcmVnaXN0ZXIoaW5wdXRfZGV2LCBSQ19NQVBfUkM2X01DRSwgaXJfcHJvcHMsCisJCQkJCQkJRU5FX0RSSVZFUl9OQU1FKSkKKwkJZ290byBlcnJvcjsKKworCisJZW5lX3ByaW50ayhLRVJOX05PVElDRSwgImRyaXZlciBoYXMgYmVlbiBzdWNjZXNmdWxseSBsb2FkZWRcbiIpOworCXJldHVybiAwOworZXJyb3I6CisJaWYgKGRldi0+aXJxKQorCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5od19pbykKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5od19pbywgRU5FX01BWF9JTyk7CisKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGlyX3Byb3BzKTsKKwlrZnJlZShkZXYpOworCXJldHVybiBlcnJvcjsKK30KKworLyogbWFpbiB1bmxvYWQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGVuZV9yZW1vdmUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aHdfbG9jaywgZmxhZ3MpOworCWVuZV9yeF9kaXNhYmxlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5od19sb2NrLCBmbGFncyk7CisKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmh3X2lvLCBFTkVfTUFYX0lPKTsKKwlpcl9pbnB1dF91bnJlZ2lzdGVyKGRldi0+aWRldik7CisJa2ZyZWUoZGV2LT5wcm9wcyk7CisJa2ZyZWUoZGV2KTsKK30KKworLyogZW5hYmxlIHdha2Ugb24gSVIgKHdha2VzIG9uIHNwZWNpZmljIGJ1dHRvbiBvbiBvcmlnaW5hbCByZW1vdGUpICovCitzdGF0aWMgdm9pZCBlbmVfZW5hYmxlX3dha2Uoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwllbmFibGUgPSBlbmFibGUgJiYgZGV2aWNlX21heV93YWtldXAoJmRldi0+cG5wX2Rldi0+ZGV2KTsKKworCWVuZV9kYmcoIndha2Ugb24gSVIgJXMiLCBlbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9GVzEsIGVuYWJsZSA/CisJCUVORV9GVzFfV0FLRSA6IDAsIEVORV9GVzFfV0FLRSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZW5lX3N1c3BlbmQoc3RydWN0IHBucF9kZXYgKnBucF9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOworCWVuZV9lbmFibGVfd2FrZShkZXYsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuZV9yZXN1bWUoc3RydWN0IHBucF9kZXYgKnBucF9kZXYpCit7CisJc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKKwlpZiAoZGV2LT5pbl91c2UpCisJCWVuZV9yeF9lbmFibGUoZGV2KTsKKworCWVuZV9lbmFibGVfd2FrZShkZXYsIDApOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGVuZV9zaHV0ZG93bihzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKK3sKKwlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOworCWVuZV9lbmFibGVfd2FrZShkZXYsIDEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgZW5lX2lkc1tdID0geworCXsuaWQgPSAiRU5FMDEwMCIsfSwKKwl7LmlkID0gIkVORTAyMDAiLH0sCisJey5pZCA9ICJFTkUwMjAxIix9LAorCXsuaWQgPSAiRU5FMDIwMiIsfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBlbmVfZHJpdmVyID0geworCS5uYW1lID0gRU5FX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IGVuZV9pZHMsCisJLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKKworCS5wcm9iZSA9IGVuZV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZW5lX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBlbmVfc3VzcGVuZCwKKwkucmVzdW1lID0gZW5lX3Jlc3VtZSwKKyNlbmRpZgorCS5zaHV0ZG93biA9IGVuZV9zaHV0ZG93biwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVuZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJmVuZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBlbmVfZXhpdCh2b2lkKQoreworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmZW5lX2RyaXZlcik7Cit9CisKK21vZHVsZV9wYXJhbShzYW1wbGVfcGVyaW9kLCBpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzYW1wbGVfcGVyaW9kLCAiSGFyZHdhcmUgc2FtcGxlIHBlcmlvZCAoNTAgdXMgZGVmYXVsdCkiKTsKKworbW9kdWxlX3BhcmFtKGVuYWJsZV9pZGxlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9pZGxlLAorCSJFbmFibGVzIHR1cm5pbmcgb2ZmIHNpZ25hbCBzYW1wbGluZyBhZnRlciBsb25nIGluYWN0aXZpdHkgdGltZTsgIgorCSJpZiBkaXNhYmxlZCBtaWdodCBoZWxwIGRldGVjdGluZyBpbnB1dCBzaWduYWwgKGRlZmF1bHQ6IGVuYWJsZWQpIgorCSIgKEtCMzkyNkIgb25seSkiKTsKKworbW9kdWxlX3BhcmFtKGlucHV0LCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5wdXQsICJzZWxlY3Qgd2hpY2ggaW5wdXQgdG8gdXNlICIKKwkiMCAtIGF1dG8sIDEgLSBzdGFuZGFyZCwgMiAtIHdpZGViYW5kKEtCMzkyNkMrKSIpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSBkZWJ1ZyAoZGVidWc9MiB2ZXJib3NlIGRlYnVnIG91dHB1dCkiKTsKKworbW9kdWxlX3BhcmFtKHR4c2ltLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModHhzaW0sCisJIlNpbXVsYXRlIFRYIGZlYXR1cmVzIG9uIHVuc3VwcG9ydGVkIGhhcmR3YXJlIChkYW5nZXJvdXMpIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBlbmVfaWRzKTsKK01PRFVMRV9ERVNDUklQVElPTgorCSgiSW5mcmFyZWQgaW5wdXQgZHJpdmVyIGZvciBLQjM5MjZCL0tCMzkyNkMvS0IzOTI2RCAiCisJIihha2EgRU5FMDEwMC9FTkUwMjAwL0VORTAyMDEpIENJUiBwb3J0Iik7CisKK01PRFVMRV9BVVRIT1IoIk1heGltIExldml0c2t5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGVuZV9pbml0KTsKK21vZHVsZV9leGl0KGVuZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvZW5lX2lyLmggYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yzc2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2VuZV9pci5oCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogZHJpdmVyIGZvciBFTkUgS0IzOTI2IEIvQy9EIENJUiAoYWxzbyBrbm93biBhcyBFTkUwWFhYKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBNYXhpbSBMZXZpdHNreSA8bWF4aW1sZXZpdHNreUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICogVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisKKy8qIGhhcmR3YXJlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRU5FX1NUQVRVUwkJMAkvKiBoYXJkd2FyZSBzdGF0dXMgLSB1bnVzZWQgKi8KKyNkZWZpbmUgRU5FX0FERFJfSEkJCTEJLyogaGkgYnl0ZSBvZiByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIEVORV9BRERSX0xPCQkyCS8qIGxvdyBieXRlIG9mIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgRU5FX0lPCQkJMwkvKiByZWFkL3dyaXRlIHdpbmRvdyAqLworI2RlZmluZSBFTkVfTUFYX0lPCQk0CisKKy8qIDggYnl0ZXMgb2Ygc2FtcGxlcywgZGl2aWRlZCBpbiAyIGhhbGZzKi8KKyNkZWZpbmUgRU5FX1NBTVBMRV9CVUZGRVIJMHhGOEYwCS8qIHJlZ3VsYXIgc2FtcGxlIGJ1ZmZlciAqLworI2RlZmluZSBFTkVfU0FNUExFX1NQQ19NQVNLCTB4ODAJLyogc2FtcGxlIGlzIHNwYWNlICovCisjZGVmaW5lIEVORV9TQU1QTEVfVkFMVUVfTUFTSwkweDdGCisjZGVmaW5lIEVORV9TQU1QTEVfT1ZFUkZMT1cJMHg3RgorI2RlZmluZSBFTkVfU0FNUExFU19TSVpFCTQKKworLyogZmFuIGlucHV0IHNhbXBsZSBidWZmZXIgKi8KKyNkZWZpbmUgRU5FX1NBTVBMRV9CVUZGRVJfRkFOCTB4RjhGQgkvKiB0aGlzIGJ1ZmZlciBob2xkcyBoaWdoIGJ5dGUgb2YgKi8KKwkJCQkJLyogZWFjaCBzYW1wbGUgb2Ygbm9ybWFsIGJ1ZmZlciAqLworI2RlZmluZSBFTkVfRkFOX1NNUExfUFVMU19NU0sJMHg4MDAwCS8qIHRoaXMgYml0IG9mIGNvbWJpbmVkIHNhbXBsZSAqLworCQkJCQkvKiBpZiBzZXQsIHNheXMgdGhhdCBzYW1wbGUgaXMgcHVsc2UgKi8KKyNkZWZpbmUgRU5FX0ZBTl9WQUxVRV9NQVNLCTB4MEZGRiAgLyogbWFzayBmb3IgdmFsaWQgYml0cyBvZiB0aGUgdmFsdWUgKi8KKworLyogZmlyc3QgZmlybXdhcmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU5FX0ZXMQkJCTB4RjhGOAorI2RlZmluZQlFTkVfRlcxX0VOQUJMRQkJMHgwMQkvKiBlbmFibGUgZncgcHJvY2Vzc2luZyAqLworI2RlZmluZSBFTkVfRlcxX1RYSVJRCQkweDAyCS8qIFRYIGludGVycnVwdCBwZW5kaW5nICovCisjZGVmaW5lIEVORV9GVzFfV0FLRQkJMHg0MAkvKiBlbmFibGUgd2FrZSBmcm9tIFMzICovCisjZGVmaW5lIEVORV9GVzFfSVJRCQkweDgwCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKworLyogc2Vjb25kIGZpcm13YXJlIHJlZ2lzdGVyICovCisjZGVmaW5lIEVORV9GVzIJCQkweEY4RjkKKyNkZWZpbmUgRU5FX0ZXMl9CVUZfSElHSAkweDAxCS8qIHdoaWNoIGhhbGYgb2YgdGhlIGJ1ZmZlciB0byByZWFkICovCisjZGVmaW5lIEVORV9GVzJfSVJRX0NMUgkJMHgwNAkvKiBjbGVhciB0aGlzIG9uIElSUSAqLworI2RlZmluZSBFTkVfRlcyX0dQNDBfQVNfTEVBUk4JMHgwOAkvKiBub3JtYWwgaW5wdXQgaXMgdXNlZCBhcyAqLworCQkJCQkvKiBsZWFybmluZyBpbnB1dCAqLworI2RlZmluZSBFTkVfRlcyX0ZBTl9BU19OUk1MX0lOCTB4NDAJLyogZmFuIGlzIHVzZWQgYXMgbm9ybWFsIGlucHV0ICovCisjZGVmaW5lIEVORV9GVzJfTEVBUk5JTkcJMHg4MAkvKiBoYXJkd2FyZSBzdXBwb3J0cyBsZWFybmluZyBhbmQgVFggKi8KKworLyogdHJhbnNtaXR0ZXIgcG9ydHMgKi8KKyNkZWZpbmUgRU5FX1RYX1BPUlQyCQkweEZDMDEJLyogdGhpcyBlbmFibGVzIG9uZSBvciBib3RoICovCisjZGVmaW5lIEVORV9UWF9QT1JUMl9FTgkJMHgyMAkvKiBUWCBwb3J0cyAqLworI2RlZmluZSBFTkVfVFhfUE9SVDEJCTB4RkMwOAorI2RlZmluZSBFTkVfVFhfUE9SVDFfRU4JCTB4MDIKKworLyogSVJRIHJlZ2lzdGVycyBibG9jayAoZm9yIHJldmlzaW9uIEIpICovCisjZGVmaW5lIEVORUJfSVJRCQkweEZEMDkJLyogSVJRIG51bWJlciAqLworI2RlZmluZSBFTkVCX0lSUV9VTksxCQkweEZEMTcJLyogdW5rbm93biBzZXR0aW5nID0gMSAqLworI2RlZmluZSBFTkVCX0lSUV9TVEFUVVMJCTB4RkQ4MAkvKiBpcnEgc3RhdHVzICovCisjZGVmaW5lIEVORUJfSVJRX1NUQVRVU19JUgkweDIwCS8qIElSIGlycSAqLworCisvKiBmYW4gYXMgaW5wdXQgc2V0dGluZ3MgLSBvbmx5IGlmIGxlYXJuaW5nIGNhcGFibGUgKi8KKyNkZWZpbmUgRU5FX0ZBTl9BU19JTjEJCTB4RkUzMCAgLyogZmFuIGluaXQgcmVnIDEgKi8KKyNkZWZpbmUgRU5FX0ZBTl9BU19JTjFfRU4JMHhDRAorI2RlZmluZSBFTkVfRkFOX0FTX0lOMgkJMHhGRTMxICAvKiBmYW4gaW5pdCByZWcgMiAqLworI2RlZmluZSBFTkVfRkFOX0FTX0lOMl9FTgkweDAzCisjZGVmaW5lIEVORV9TQU1QTEVfUEVSSU9EX0ZBTiAgIDYxCS8qIGZhbiBpbnB1dCBoYXMgZml4ZWQgc2FtcGxlIHBlcmlvZCAqLworCisvKiBJUlEgcmVnaXN0ZXJzIGJsb2NrIChmb3IgcmV2aXNpb24gQyxEKSAqLworI2RlZmluZSBFTkVDX0lSUQkJMHhGRTlCCS8qIG5ldyBpcnEgc2V0dGluZ3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRU5FQ19JUlFfTUFTSwkJMHgwRgkvKiBpcnEgbnVtYmVyIG1hc2sgKi8KKyNkZWZpbmUgRU5FQ19JUlFfVU5LX0VOCQkweDEwCS8qIGFsd2F5cyBlbmFibGVkICovCisjZGVmaW5lIEVORUNfSVJRX1NUQVRVUwkJMHgyMAkvKiBpcnEgc3RhdHVzIGFuZCBBQ0sgKi8KKworLyogQ0lSIGJsb2NrIHNldHRpbmdzICovCisjZGVmaW5lIEVORV9DSVJfQ09ORjEJCTB4RkVDMAorI2RlZmluZSBFTkVfQ0lSX0NPTkYxX1RYX0NMRUFSCTB4MDEJLyogY2xlYXIgdGhhdCBvbiByZXZDICovCisJCQkJCS8qIHdoaWxlIHRyYW5zbWl0dGluZyAqLworI2RlZmluZSBFTkVfQ0lSX0NPTkYxX1JYX09OCTB4MDcJLyogbm9ybWFsIHJlY2VpdmVyIGVuYWJsZWQgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMV9MRUFSTjEJMHgwOAkvKiBlbmFibGVkIG9uIGxlYXJuaW5nIG1vZGUgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMV9UWF9PTgkweDMwCS8qIGVuYWJsZWQgb24gdHJhbnNtaXQgKi8KKyNkZWZpbmUgRU5FX0NJUl9DT05GMV9UWF9DQVJSCTB4ODAJLyogc2VuZCBUWCBjYXJyaWVyIG9yIG5vdCAqLworCisjZGVmaW5lIEVORV9DSVJfQ09ORjIJCTB4RkVDMQkvKiB1bmtub3duIHNldHRpbmcgPSAwICovCisjZGVmaW5lIEVORV9DSVJfQ09ORjJfTEVBUk4yCTB4MTAJLyogc2V0IG9uIGVuYWJsZSBsZWFybmluZyAqLworI2RlZmluZSBFTkVfQ0lSX0NPTkYyX0dQSU80MERJUwkweDIwCS8qIGRpc2FibGUgaW5wdXQgdmlhIGdwaW80MCAqLworCisjZGVmaW5lIEVORV9DSVJfU0FNUExFX1BFUklPRAkweEZFQzgJLyogc2FtcGxlIHBlcmlvZCBpbiB1cyAqLworI2RlZmluZSBFTkVfQ0lSX1NBTVBMRV9PVkVSRkxPVwkweDgwCS8qIGludGVycnVwdCBvbiBvdmVyZmxvd3MgaWYgc2V0ICovCisKKworLyogVHdvIGJ5dGUgdHggYnVmZmVyICovCisjZGVmaW5lIEVORV9UWF9JTlBVVDEJCTB4RkVDOQorI2RlZmluZSBFTkVfVFhfSU5QVVQyCQkweEZFQ0EKKyNkZWZpbmUgRU5FX1RYX1BVTFNFX01BU0sJMHg4MAkvKiBUcmFuc21pdHRlZCBzYW1wbGUgaXMgcHVsc2UgKi8KKyNkZWZpbmUgRU5FX1RYX1NNTFBfTUFTSwkweDdGCisjZGVmaW5lIEVORV9UWF9TTVBMX1BFUklPRAk1MAkvKiB0cmFuc21pdCBzYW1wbGUgcGVyaW9kIC0gZml4ZWQgKi8KKworCisvKiBVbmtub3duIFRYIHNldHRpbmcgLSBUWCBzYW1wbGUgcGVyaW9kID8/PyAqLworI2RlZmluZSBFTkVfVFhfVU5LMQkJMHhGRUNCCS8qIHNldCB0byAweDYzICovCisKKy8qIEN1cnJlbnQgcmVjZWl2ZWQgY2FycmllciBwZXJpb2QgKi8KKyNkZWZpbmUgRU5FX1JYX0NBUlJJRVIJCTB4RkVDQwkvKiBSWCBwZXJpb2QgKDUwMCBucykgKi8KKyNkZWZpbmUgRU5FX1JYX0NBUlJJRVJfVkFMSUQJMHg4MAkvKiBSZWdpc3RlciBjb250ZW50IHZhbGlkICovCisKKworLyogVFggcGVyaW9kICgxL2NhcnJpZXIpICovCisjZGVmaW5lIEVORV9UWF9QRVJJT0QJCTB4RkVDRQkvKiBUWCBwZXJpb2QgKDUwMCBucykgKi8KKyNkZWZpbmUgRU5FX1RYX1BFUklPRF9VTktCSVQJMHg4MAkvKiBUaGlzIGJpdCBzZXQgb24gdHJhbnNtaXQqLworI2RlZmluZSBFTkVfVFhfUEVSSU9EX1BVTFNFCTB4RkVDRgkvKiBUWCBwdWxzZSBwZXJpb2QgKDUwMCBucykqLworCisvKiBIYXJkd2FyZSB2ZXJzaW9ucyAqLworI2RlZmluZSBFTkVfSFdfVkVSU0lPTgkJMHhGRjAwCS8qIGhhcmR3YXJlIHJldmlzaW9uICovCisjZGVmaW5lIEVORV9QTExGUkgJCTB4RkYxNgorI2RlZmluZSBFTkVfUExMRlJMCQkweEZGMTcKKworI2RlZmluZSBFTkVfSFdfVU5LCQkweEZGMUQKKyNkZWZpbmUgRU5FX0hXX1VOS19DTFIJCTB4MDQKKyNkZWZpbmUgRU5FX0hXX1ZFUl9NQUpPUgkweEZGMUUJLyogY2hpcCB2ZXJzaW9uICovCisjZGVmaW5lIEVORV9IV19WRVJfTUlOT1IJMHhGRjFGCisjZGVmaW5lIEVORV9IV19WRVJfT0xECQkweEZEMDAKKworLyogTm9ybWFsL0xlYXJuaW5nIGNhcnJpZXIgcmFuZ2VzIC0gb25seSB2YWxpZCBpZiB3ZSBoYXZlIGxlYXJuaW5nIGlucHV0Ki8KKy8qIFRPRE86IHRlc3QgKi8KKyNkZWZpbmUgRU5FX05PUk1BTF9SWF9MT1cJMzQKKyNkZWZpbmUgRU5FX05PUk1BTF9SWF9ISQkzOAorCisvKiBUeCBjYXJyaWVyIHJhbmdlICovCisvKiBIYXJkd2FyZSBtaWdodCBiZSBhYmxlIHRvIGRvIG1vcmUsIGJ1dCB0aGlzIHJhbmdlIGlzIGVub3VnaCBmb3IKKyAgIGFsbCBwdXJwb3NlcyAqLworI2RlZmluZSBFTkVfVFhfUEVSSU9EX01BWAkzMgkvKiBjb3JyZXNwb25kcyB0byAyOS40IGtIeiAqLworI2RlZmluZSBFTkVfVFhfUEVSSU9EX01JTgkxNgkvKiBjb3Jyc3BvbmRzIHRvIDYyLjUga0h6ICovCisKKworCisvKiBNaW5pbWFsIGFuZCBtYXhpbWFsIGdhcHMgKi8KKworLyogTm9ybWFsIGNhc2U6CisJTWluaW1hbCBnYXAgaXMgMHg3RiAqIHNhbXBsZSBwZXJpb2QKKwlNYXhpbXVtIGdhcCBkZXBlbmRzIG9uIGhhcmR3YXJlLgorCUZvciBLQjM5MjZCLCBpdCBpcyB1bmxpbWl0ZWQsIGZvciBuZXdlciBtb2RlbHMgaXRzIGFyb3VuZAorCTI1MDAwMCwgYWZ0ZXIgd2hpY2ggSFcgc3RvcHMgc2VuZGluZyBzYW1wbGVzLCBhbmQgdGhhdCBpcworCW5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgKi8KKworLyogRmFuIGNhc2U6CisJQm90aCBtaW5pbWFsIGFuZCBtYXhpbWFsIGdhcHMgYXJlIHNhbWUsIGFuZCBlcXVhbCB0byAweEZGRiAqIDB4NjEKKwlBbmQgdGhlcmUgaXMgbm90aGluZyB0byBjaGFuZ2UgdGhpcyBzZXR0aW5nCisqLworCisjZGVmaW5lIEVORV9NQVhHQVAJCTI1MDAwMAorI2RlZmluZSBFTkVfTUlOR0FQCQkoMTI3ICogc2FtcGxlX3BlcmlvZCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBFTkVfRFJJVkVSX05BTUUJCSJlbmVfaXIiCisKKyNkZWZpbmUgRU5FX0lSUV9SWAkJMQorI2RlZmluZSBFTkVfSVJRX1RYCQkyCisKKyNkZWZpbmUgIEVORV9IV19CCQkxCS8qIDM5MjZCICovCisjZGVmaW5lICBFTkVfSFdfQwkJMgkvKiAzOTI2QyAqLworI2RlZmluZSAgRU5FX0hXX0QJCTMJLyogMzkyNkQgKi8KKworI2RlZmluZSBlbmVfcHJpbnRrKGxldmVsLCB0ZXh0LCAuLi4pIFwKKwlwcmludGsobGV2ZWwgRU5FX0RSSVZFUl9OQU1FICI6ICIgdGV4dCwgIyMgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZW5lX2RiZyh0ZXh0LCAuLi4pIFwKKwlpZiAoZGVidWcpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgXAorCQkJRU5FX0RSSVZFUl9OQU1FICI6ICIgdGV4dCAiXG4iICwgIyMgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgZW5lX2RiZ192ZXJib3NlKHRleHQsIC4uLikgXAorCWlmIChkZWJ1ZyA+IDEpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgXAorCQkJRU5FX0RSSVZFUl9OQU1FICI6ICIgdGV4dCAiXG4iICwgIyMgX19WQV9BUkdTX18pCisKKworc3RydWN0IGVuZV9kZXZpY2UgeworCXN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7CisJaW50IGluX3VzZTsKKworCS8qIGh3IElPIHNldHRpbmdzICovCisJdW5zaWduZWQgbG9uZyBod19pbzsKKwlpbnQgaXJxOworCXNwaW5sb2NrX3QgaHdfbG9jazsKKworCS8qIEhXIGZlYXR1cmVzICovCisJaW50IGh3X3JldmlzaW9uOwkJCS8qIGhhcmR3YXJlIHJldmlzaW9uICovCisJYm9vbCBod19sZWFybmluZ19hbmRfdHhfY2FwYWJsZTsJLyogbGVhcm5pbmcgY2FwYWJsZSAqLworCWJvb2wgaHdfZ3BpbzQwX2xlYXJuaW5nOwkJLyogZ3BpbzQwIGlzIGxlYXJuaW5nICovCisJYm9vbCBod19mYW5fYXNfbm9ybWFsX2lucHV0OwkJLyogZmFuIGlucHV0IGlzIHVzZWQgYXMgKi8KKwkJCQkJCS8qIHJlZ3VsYXIgaW5wdXQgKi8KKwkvKiBIVyBzdGF0ZSovCisJaW50IHJ4X3BvaW50ZXI7CQkJCS8qIGh3IHBvaW50ZXIgdG8gcnggYnVmZmVyICovCisJYm9vbCByeF9mYW5faW5wdXRfaW51c2U7CQkvKiBpcyBmYW4gaW5wdXQgaW4gdXNlIGZvciByeCovCisJaW50IHR4X3JlZzsJCQkJLyogY3VycmVudCByZWcgdXNlZCBmb3IgVFggKi8KKwl1OCAgc2F2ZWRfY29uZjE7CQkJLyogc2F2ZWQgRkVDMCByZWcgKi8KKworCS8qIFRYIHNhbXBsZSBoYW5kbGluZyAqLworCXVuc2lnbmVkIGludCB0eF9zYW1wbGU7CQkJLyogY3VycmVudCBzYW1wbGUgZm9yIFRYICovCisJYm9vbCB0eF9zYW1wbGVfcHVsc2U7CQkJLyogY3VycmVudCBzYW1wbGUgaXMgcHVsc2UgKi8KKworCS8qIFRYIGJ1ZmZlciAqLworCWludCAqdHhfYnVmZmVyOwkJCQkvKiBpbnB1dCBzYW1wbGVzIGJ1ZmZlciovCisJaW50IHR4X3BvczsJCQkJLyogcG9zaXRpb24gaW4gdGhhdCBidWZlciAqLworCWludCB0eF9sZW47CQkJCS8qIGN1cnJlbnQgbGVuIG9mIHR4IGJ1ZmZlciAqLworCWludCB0eF9kb25lOwkJCQkvKiBkb25lIHRyYW5zbWl0dGluZyAqLworCQkJCQkJLyogb25lIG1vcmUgc2FtcGxlIHBlbmRpbmcqLworCXN0cnVjdCBjb21wbGV0aW9uIHR4X2NvbXBsZXRlOwkJLyogVFggY29tcGxldGlvbiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHR4X3NpbV90aW1lcjsKKworCS8qIFRYIHNldHRpbmdzICovCisJaW50IHR4X3BlcmlvZDsKKwlpbnQgdHhfZHV0eV9jeWNsZTsKKwlpbnQgdHJhbnNtaXR0ZXJfbWFzazsKKworCS8qIFJYIHNldHRpbmdzICovCisJYm9vbCBsZWFybmluZ19lbmFibGVkOwkJCS8qIGxlYXJuaW5nIGlucHV0IGVuYWJsZWQgKi8KKwlib29sIGNhcnJpZXJfZGV0ZWN0X2VuYWJsZWQ7CQkvKiBjYXJyaWVyIGRldGVjdCBlbmFibGVkICovCisJaW50IHJ4X3BlcmlvZF9hZGp1c3Q7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL0lSL2ltb24uYwppbmRleCA2NWMxMjVlLi5jMTg1NDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2ltb24uYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2ltb24uYwpAQCAtODcsNyArODcsNiBAQAogc3RydWN0IGltb25fY29udGV4dCB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyOwogCS8qIE5ld2VyIGRldmljZXMgaGF2ZSB0d28gaW50ZXJmYWNlcyAqLwogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXZfaW50ZjA7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldl9pbnRmMTsKQEAgLTE2NTYsNyArMTY1NSw2IEBACiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wczsKLQlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcjsKIAlpbnQgcmV0LCBpOwogCiAJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwpAQCAtMTY3MSwxMiArMTY2OSw2IEBACiAJCWdvdG8gcHJvcHNfYWxsb2NfZmFpbGVkOwogCX0KIAotCWlyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX2lucHV0X2RldiksIEdGUF9LRVJORUwpOwotCWlmICghaXIpIHsKLQkJZGV2X2VycihpY3R4LT5kZXYsICJyZW1vdGUgaXIgaW5wdXQgZGV2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBpcl9kZXZfYWxsb2NfZmFpbGVkOwotCX0KLQogCXNucHJpbnRmKGljdHgtPm5hbWVfaWRldiwgc2l6ZW9mKGljdHgtPm5hbWVfaWRldiksCiAJCSAiaU1PTiBSZW1vdGUgKCUwNHg6JTA0eCkiLCBpY3R4LT52ZW5kb3IsIGljdHgtPnByb2R1Y3QpOwogCWlkZXYtPm5hbWUgPSBpY3R4LT5uYW1lX2lkZXY7CkBAIC0xNzA2LDE0ICsxNjk4LDkgQEAKIAlwcm9wcy0+Y2hhbmdlX3Byb3RvY29sID0gaW1vbl9pcl9jaGFuZ2VfcHJvdG9jb2w7CiAJaWN0eC0+cHJvcHMgPSBwcm9wczsKIAotCWljdHgtPmlyID0gaXI7Ci0JbWVtY3B5KCZpci0+ZGV2LCBpY3R4LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7Ci0KIAl1c2JfdG9faW5wdXRfaWQoaWN0eC0+dXNiZGV2X2ludGYwLCAmaWRldi0+aWQpOwogCWlkZXYtPmRldi5wYXJlbnQgPSBpY3R4LT5kZXY7CiAKLQlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBpcik7Ci0KIAlyZXQgPSBpcl9pbnB1dF9yZWdpc3RlcihpZGV2LCBSQ19NQVBfSU1PTl9QQUQsIHByb3BzLCBNT0RfTkFNRSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihpY3R4LT5kZXYsICJyZW1vdGUgaW5wdXQgZGV2IHJlZ2lzdGVyIGZhaWxlZFxuIik7CkBAIC0xNzIzLDggKzE3MTAsNiBAQAogCXJldHVybiBpZGV2OwogCiBpZGV2X3JlZ2lzdGVyX2ZhaWxlZDoKLQlrZnJlZShpcik7Ci1pcl9kZXZfYWxsb2NfZmFpbGVkOgogCWtmcmVlKHByb3BzKTsKIHByb3BzX2FsbG9jX2ZhaWxlZDoKIAlpbnB1dF9mcmVlX2RldmljZShpZGV2KTsKQEAgLTE5NDQsNyArMTkyOSw2IEBACiAKIHVyYl9zdWJtaXRfZmFpbGVkOgogCWlyX2lucHV0X3VucmVnaXN0ZXIoaWN0eC0+aWRldik7Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWN0eC0+aWRldik7CiBpZGV2X3NldHVwX2ZhaWxlZDoKIGZpbmRfZW5kcG9pbnRfZmFpbGVkOgogCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CkBAIC0yMDE0LDEwICsxOTk4LDggQEAKIAlyZXR1cm4gaWN0eDsKIAogdXJiX3N1Ym1pdF9mYWlsZWQ6Ci0JaWYgKGljdHgtPnRvdWNoKSB7CisJaWYgKGljdHgtPnRvdWNoKQogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpY3R4LT50b3VjaCk7Ci0JCWlucHV0X2ZyZWVfZGV2aWNlKGljdHgtPnRvdWNoKTsKLQl9CiB0b3VjaF9zZXR1cF9mYWlsZWQ6CiBmaW5kX2VuZHBvaW50X2ZhaWxlZDoKIAltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaCBiL2RyaXZlcnMvbWVkaWEvSVIvaXItY29yZS1wcml2LmgKaW5kZXggYmFiZDUyMC4uYTg1YThjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1jb3JlLXByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWNvcmUtcHJpdi5oCkBAIC0zMiw3ICszMiw3IEBACiAKIHN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCB7CiAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsJCS8qIHRvIGtlZXAgdHJhY2sgb2YgcmF3IGNsaWVudHMgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXJ4X3dvcms7CS8qIGZvciB0aGUgcnggZGVjb2Rpbmcgd29ya3F1ZXVlICovCisJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOwogCXN0cnVjdCBrZmlmbwkJCWtmaWZvOwkJLyogZmlmbyBmb3IgdGhlIHB1bHNlL3NwYWNlIGR1cmF0aW9ucyAqLwogCWt0aW1lX3QJCQkJbGFzdF9ldmVudDsJLyogd2hlbiBsYXN0IGV2ZW50IG9jY3VycmVkICovCiAJZW51bSByYXdfZXZlbnRfdHlwZQkJbGFzdF90eXBlOwkvKiBsYXN0IGV2ZW50IHR5cGUgKi8KQEAgLTQxLDEwICs0MSwxMyBAQAogCiAJLyogcmF3IGRlY29kZXIgc3RhdGUgZm9sbG93cyAqLwogCXN0cnVjdCBpcl9yYXdfZXZlbnQgcHJldl9ldjsKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHRoaXNfZXY7CiAJc3RydWN0IG5lY19kZWMgewogCQlpbnQgc3RhdGU7CiAJCXVuc2lnbmVkIGNvdW50OwogCQl1MzIgYml0czsKKwkJYm9vbCBpc19uZWNfeDsKKwkJYm9vbCBuZWN4X3JlcGVhdDsKIAl9IG5lYzsKIAlzdHJ1Y3QgcmM1X2RlYyB7CiAJCWludCBzdGF0ZTsKQEAgLTc2LDcgKzc5LDcgQEAKIAlzdHJ1Y3QgbGlyY19jb2RlYyB7CiAJCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldjsKIAkJc3RydWN0IGxpcmNfZHJpdmVyICpkcnY7Ci0JCWludCBsaXJjZGF0YTsKKwkJaW50IGNhcnJpZXJfbG93OwogCX0gbGlyYzsKIH07CiAKQEAgLTEwNCwxMCArMTA3LDkgQEAKIAkJZXYtPmR1cmF0aW9uIC09IGR1cmF0aW9uOwogfQogCi0jZGVmaW5lIFRPX1VTKGR1cmF0aW9uKQkJCSgoKGR1cmF0aW9uKSArIDUwMCkgLyAxMDAwKQorI2RlZmluZSBUT19VUyhkdXJhdGlvbikJCQlESVZfUk9VTkRfQ0xPU0VTVCgoZHVyYXRpb24pLCAxMDAwKQogI2RlZmluZSBUT19TVFIoaXNfcHVsc2UpCQkoKGlzX3B1bHNlKSA/ICJwdWxzZSIgOiAic3BhY2UiKQogI2RlZmluZSBJU19SRVNFVChldikJCQkoZXYuZHVyYXRpb24gPT0gMCkKLQogLyoKICAqIFJvdXRpbmVzIGZyb20gaXItc3lzZnMuYyAtIE1lYW50IHRvIGJlIGNhbGxlZCBvbmx5IGludGVybmFsbHkgaW5zaWRlCiAgKiBpci1jb3JlCkBAIC0xMjYsNyArMTI4LDggQEAKIHZvaWQgaXJfcmF3X2hhbmRsZXJfdW5yZWdpc3RlcihzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmlyX3Jhd19oYW5kbGVyKTsKIHZvaWQgaXJfcmF3X2luaXQodm9pZCk7CiAKLQoraW50IGlyX3JjbWFwX2luaXQodm9pZCk7Cit2b2lkIGlyX3JjbWFwX2NsZWFudXAodm9pZCk7CiAvKgogICogRGVjb2RlciBpbml0aWFsaXphdGlvbiBjb2RlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1qdmMtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1qdmMtZGVjb2Rlci5jCmluZGV4IDg4OTRkOGIuLjc3YTg5YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItanZjLWRlY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWp2Yy1kZWNvZGVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKIAlTVEFURV9CSVRfU1BBQ0UsCiAJU1RBVEVfVFJBSUxFUl9QVUxTRSwKIAlTVEFURV9UUkFJTEVSX1NQQUNFLAorCVNUQVRFX0NIRUNLX1JFUEVBVCwKIH07CiAKIC8qKgpAQCAtNjAsNiArNjEsNyBAQAogCUlSX2RwcmludGsoMiwgIkpWQyBkZWNvZGUgc3RhcnRlZCBhdCBzdGF0ZSAlZCAoJXV1cyAlcylcbiIsCiAJCSAgIGRhdGEtPnN0YXRlLCBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwogCithZ2FpbjoKIAlzd2l0Y2ggKGRhdGEtPnN0YXRlKSB7CiAKIAljYXNlIFNUQVRFX0lOQUNUSVZFOgpAQCAtMTQ5LDggKzE1MSwxOCBAQAogCQl9CiAKIAkJZGF0YS0+Y291bnQgPSAwOwotCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0JJVF9QVUxTRTsKKwkJZGF0YS0+c3RhdGUgPSBTVEFURV9DSEVDS19SRVBFQVQ7CiAJCXJldHVybiAwOworCisJY2FzZSBTVEFURV9DSEVDS19SRVBFQVQ6CisJCWlmICghZXYucHVsc2UpCisJCQlicmVhazsKKworCQlpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBKVkNfSEVBREVSX1BVTFNFLCBKVkNfVU5JVCAvIDIpKQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9JTkFDVElWRTsKKyAgZWxzZQorCQkJZGF0YS0+c3RhdGUgPSBTVEFURV9CSVRfUFVMU0U7CisJCWdvdG8gYWdhaW47CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWtleXRhYmxlLmMKaW5kZXggMTVhMGYxOS4uN2U4MmE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1rZXl0YWJsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXIta2V5dGFibGUuYwpAQCAtMzM5LDYgKzMzOSw4IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaXItPmtleWxvY2ssIGZsYWdzKTsKIAorCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgaXItPmxhc3Rfc2NhbmNvZGUpOworCiAJaWYgKCFpci0+a2V5cHJlc3NlZCkKIAkJZ290byBvdXQ7CiAKQEAgLTM3MCw2ICszNzIsOCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlyLT5rZXlsb2NrLCBmbGFncyk7CiAKKwlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIHNjYW5jb2RlKTsKKwogCS8qIFJlcGVhdCBldmVudD8gKi8KIAlpZiAoaXItPmtleXByZXNzZWQgJiYKIAkgICAgaXItPmxhc3Rfc2NhbmNvZGUgPT0gc2NhbmNvZGUgJiYKQEAgLTM4Myw5ICszODcsMTEgQEAKIAlpci0+bGFzdF90b2dnbGUgPSB0b2dnbGU7CiAJaXItPmxhc3Rfa2V5Y29kZSA9IGtleWNvZGU7CiAKKwogCWlmIChrZXljb2RlID09IEtFWV9SRVNFUlZFRCkKIAkJZ290byBvdXQ7CiAKKwogCS8qIFJlZ2lzdGVyIGEga2V5cHJlc3MgKi8KIAlpci0+a2V5cHJlc3NlZCA9IHRydWU7CiAJSVJfZHByaW50aygxLCAiJXM6IGtleSBkb3duIGV2ZW50LCBrZXkgMHglMDR4LCBzY2FuY29kZSAweCUwNHhcbiIsCkBAIC00MjgsNyArNDM0LDcgQEAKICAqLwogaW50IF9faXJfaW5wdXRfcmVnaXN0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKnJjX3RhYiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMsCisJCSAgICAgIHN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzLAogCQkgICAgICBjb25zdCBjaGFyICpkcml2ZXJfbmFtZSkKIHsKIAlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7CkBAIC00ODAsNiArNDg2LDggQEAKIAogCXNldF9iaXQoRVZfS0VZLCBpbnB1dF9kZXYtPmV2Yml0KTsKIAlzZXRfYml0KEVWX1JFUCwgaW5wdXRfZGV2LT5ldmJpdCk7CisJc2V0X2JpdChFVl9NU0MsIGlucHV0X2Rldi0+ZXZiaXQpOworCXNldF9iaXQoTVNDX1NDQU4sIGlucHV0X2Rldi0+bXNjYml0KTsKIAogCWlmIChpcl9zZXRrZXl0YWJsZShpbnB1dF9kZXYsICZpcl9kZXYtPnJjX3RhYiwgcmNfdGFiKSkgewogCQlyYyA9IC1FTk9NRU07CkBAIC00OTksNyArNTA3LDggQEAKIAogCUlSX2RwcmludGsoMSwgIlJlZ2lzdGVyZWQgaW5wdXQgZGV2aWNlIG9uICVzIGZvciAlcyByZW1vdGUlcy5cbiIsCiAJCSAgIGRyaXZlcl9uYW1lLCByY190YWItPm5hbWUsCi0JCSAgIGlyX2Rldi0+cHJvcHMtPmRyaXZlcl90eXBlID09IFJDX0RSSVZFUl9JUl9SQVcgPyAiIGluIHJhdyBtb2RlIiA6ICIiKTsKKwkJICAgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+ZHJpdmVyX3R5cGUgPT0gUkNfRFJJVkVSX0lSX1JBVykgPworCQkJIiBpbiByYXcgbW9kZSIgOiAiIik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1saXJjLWNvZGVjLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWxpcmMtY29kZWMuYwppbmRleCAzYmE0ODJkLi43N2I1OTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2lyLWxpcmMtY29kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLWxpcmMtY29kZWMuYwpAQCAtMzIsNiArMzIsNyBAQAogc3RhdGljIGludCBpcl9saXJjX2RlY29kZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCBpcl9yYXdfZXZlbnQgZXYpCiB7CiAJc3RydWN0IGlyX2lucHV0X2RldiAqaXJfZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRfZGV2KTsKKwlpbnQgc2FtcGxlOwogCiAJaWYgKCEoaXJfZGV2LT5yYXctPmVuYWJsZWRfcHJvdG9jb2xzICYgSVJfVFlQRV9MSVJDKSkKIAkJcmV0dXJuIDA7CkBAIC0zOSwxOCArNDAsMjAgQEAKIAlpZiAoIWlyX2Rldi0+cmF3LT5saXJjLmRydiB8fCAhaXJfZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChJU19SRVNFVChldikpCisJCXJldHVybiAwOworCiAJSVJfZHByaW50aygyLCAiTElSQyBkYXRhIHRyYW5zZmVyIHN0YXJ0ZWQgKCV1dXMgJXMpXG4iLAogCQkgICBUT19VUyhldi5kdXJhdGlvbiksIFRPX1NUUihldi5wdWxzZSkpOwogCi0JaXJfZGV2LT5yYXctPmxpcmMubGlyY2RhdGEgKz0gZXYuZHVyYXRpb24gLyAxMDAwOworCXNhbXBsZSA9IGV2LmR1cmF0aW9uIC8gMTAwMDsKIAlpZiAoZXYucHVsc2UpCi0JCWlyX2Rldi0+cmF3LT5saXJjLmxpcmNkYXRhIHw9IFBVTFNFX0JJVDsKKwkJc2FtcGxlIHw9IFBVTFNFX0JJVDsKIAogCWxpcmNfYnVmZmVyX3dyaXRlKGlyX2Rldi0+cmF3LT5saXJjLmRydi0+cmJ1ZiwKLQkJCSAgKHVuc2lnbmVkIGNoYXIgKikgJmlyX2Rldi0+cmF3LT5saXJjLmxpcmNkYXRhKTsKKwkJCSAgKHVuc2lnbmVkIGNoYXIgKikgJnNhbXBsZSk7CiAJd2FrZV91cCgmaXJfZGV2LT5yYXctPmxpcmMuZHJ2LT5yYnVmLT53YWl0X3BvbGwpOwogCi0JaXJfZGV2LT5yYXctPmxpcmMubGlyY2RhdGEgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MiwxMyArOTUsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgbG9uZyBpcl9saXJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBpcl9saXJjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCXVuc2lnbmVkIGxvbmcgX191c2VyIGFyZykKIHsKIAlzdHJ1Y3QgbGlyY19jb2RlYyAqbGlyYzsKIAlzdHJ1Y3QgaXJfaW5wdXRfZGV2ICppcl9kZXY7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqZHJ2X2RhdGE7Ci0JdW5zaWduZWQgbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAwOwogCiAJbGlyYyA9IGxpcmNfZ2V0X3BkYXRhKGZpbGVwKTsKIAlpZiAoIWxpcmMpCkBAIC0xMTAsNDcgKzExNCwxMDYgQEAKIAogCWRydl9kYXRhID0gaXJfZGV2LT5wcm9wcy0+cHJpdjsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBMSVJDX1NFVF9UUkFOU01JVFRFUl9NQVNLOgorCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgewogCQlyZXQgPSBnZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopYXJnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CisJfQogCi0JCWlmIChpcl9kZXYtPnByb3BzICYmIGlyX2Rldi0+cHJvcHMtPnNfdHhfbWFzaykKKwlzd2l0Y2ggKGNtZCkgeworCisJLyogbGVnYWN5IHN1cHBvcnQgKi8KKwljYXNlIExJUkNfR0VUX1NFTkRfTU9ERToKKwkJdmFsID0gTElSQ19DQU5fU0VORF9QVUxTRSAmIExJUkNfQ0FOX1NFTkRfTUFTSzsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1NFTkRfTU9ERToKKwkJaWYgKHZhbCAhPSAoTElSQ19NT0RFX1BVTFNFICYgTElSQ19DQU5fU0VORF9NQVNLKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKworCS8qIFRYIHNldHRpbmdzICovCisJY2FzZSBMSVJDX1NFVF9UUkFOU01JVFRFUl9NQVNLOgorCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9tYXNrKQogCQkJcmV0ID0gaXJfZGV2LT5wcm9wcy0+c190eF9tYXNrKGRydl9kYXRhLCAodTMyKXZhbCk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAogCWNhc2UgTElSQ19TRVRfU0VORF9DQVJSSUVSOgotCQlyZXQgPSBnZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopYXJnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJaWYgKGlyX2Rldi0+cHJvcHMgJiYgaXJfZGV2LT5wcm9wcy0+c190eF9jYXJyaWVyKQorCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9jYXJyaWVyKQogCQkJaXJfZGV2LT5wcm9wcy0+c190eF9jYXJyaWVyKGRydl9kYXRhLCAodTMyKXZhbCk7CiAJCWVsc2UKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAotCWNhc2UgTElSQ19HRVRfU0VORF9NT0RFOgotCQl2YWwgPSBMSVJDX0NBTl9TRU5EX1BVTFNFICYgTElSQ19DQU5fU0VORF9NQVNLOwotCQlyZXQgPSBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopYXJnKTsKKwljYXNlIExJUkNfU0VUX1NFTkRfRFVUWV9DWUNMRToKKwkJaWYgKCFpcl9kZXYtPnByb3BzLT5zX3R4X2R1dHlfY3ljbGUpCisJCQlyZXR1cm4gLUVOT1NZUzsKKworCQlpZiAodmFsIDw9IDAgfHwgdmFsID49IDEwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlyX2Rldi0+cHJvcHMtPnNfdHhfZHV0eV9jeWNsZShpcl9kZXYtPnByb3BzLT5wcml2LCB2YWwpOwogCQlicmVhazsKIAotCWNhc2UgTElSQ19TRVRfU0VORF9NT0RFOgotCQlyZXQgPSBnZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopYXJnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJLyogUlggc2V0dGluZ3MgKi8KKwljYXNlIExJUkNfU0VUX1JFQ19DQVJSSUVSOgorCQlpZiAoaXJfZGV2LT5wcm9wcy0+c19yeF9jYXJyaWVyX3JhbmdlKQorCQkJcmV0ID0gaXJfZGV2LT5wcm9wcy0+c19yeF9jYXJyaWVyX3JhbmdlKAorCQkJCWlyX2Rldi0+cHJvcHMtPnByaXYsCisJCQkJaXJfZGV2LT5yYXctPmxpcmMuY2Fycmllcl9sb3csIHZhbCk7CisJCWVsc2UKKwkJCXJldHVybiAtRU5PU1lTOwogCi0JCWlmICh2YWwgIT0gKExJUkNfTU9ERV9QVUxTRSAmIExJUkNfQ0FOX1NFTkRfTUFTSykpCisJCWlmICghcmV0KQorCQkJaXJfZGV2LT5yYXctPmxpcmMuY2Fycmllcl9sb3cgPSAwOworCQlicmVhazsKKworCWNhc2UgTElSQ19TRVRfUkVDX0NBUlJJRVJfUkFOR0U6CisJCWlmICh2YWwgPj0gMCkKKwkJCWlyX2Rldi0+cmF3LT5saXJjLmNhcnJpZXJfbG93ID0gdmFsOworCQlicmVhazsKKworCisJY2FzZSBMSVJDX0dFVF9SRUNfUkVTT0xVVElPTjoKKwkJdmFsID0gaXJfZGV2LT5wcm9wcy0+cnhfcmVzb2x1dGlvbjsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1dJREVCQU5EX1JFQ0VJVkVSOgorCQlpZiAoaXJfZGV2LT5wcm9wcy0+c19sZWFybmluZ19tb2RlKQorCQkJcmV0dXJuIGlyX2Rldi0+cHJvcHMtPnNfbGVhcm5pbmdfbW9kZSgKKwkJCQlpcl9kZXYtPnByb3BzLT5wcml2LCAhIXZhbCk7CisJCWVsc2UKKwkJCXJldHVybiAtRU5PU1lTOworCisJLyogR2VuZXJpYyB0aW1lb3V0IHN1cHBvcnQgKi8KKwljYXNlIExJUkNfR0VUX01JTl9USU1FT1VUOgorCQlpZiAoIWlyX2Rldi0+cHJvcHMtPm1heF90aW1lb3V0KQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCXZhbCA9IGlyX2Rldi0+cHJvcHMtPm1pbl90aW1lb3V0IC8gMTAwMDsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfR0VUX01BWF9USU1FT1VUOgorCQlpZiAoIWlyX2Rldi0+cHJvcHMtPm1heF90aW1lb3V0KQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCXZhbCA9IGlyX2Rldi0+cHJvcHMtPm1heF90aW1lb3V0IC8gMTAwMDsKKwkJYnJlYWs7CisKKwljYXNlIExJUkNfU0VUX1JFQ19USU1FT1VUOgorCQlpZiAodmFsIDwgaXJfZGV2LT5wcm9wcy0+bWluX3RpbWVvdXQgfHwKKwkJICAgIHZhbCA+IGlyX2Rldi0+cHJvcHMtPm1heF90aW1lb3V0KQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlyX2Rldi0+cHJvcHMtPnRpbWVvdXQgPSB2YWwgKiAxMDAwOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiBsaXJjX2Rldl9mb3BfaW9jdGwoZmlsZXAsIGNtZCwgYXJnKTsKIAl9CiAKKwlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfUkVBRCkKKwkJcmV0ID0gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgbG9uZyAqKWFyZyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTYsMTMgKzI1OSwyOCBAQAogCiAJZmVhdHVyZXMgPSBMSVJDX0NBTl9SRUNfTU9ERTI7CiAJaWYgKGlyX2Rldi0+cHJvcHMtPnR4X2lyKSB7CisKIAkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VORF9QVUxTRTsKIAkJaWYgKGlyX2Rldi0+cHJvcHMtPnNfdHhfbWFzaykKIAkJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9UUkFOU01JVFRFUl9NQVNLOwogCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9jYXJyaWVyKQogCQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1NFTkRfQ0FSUklFUjsKKworCQlpZiAoaXJfZGV2LT5wcm9wcy0+c190eF9kdXR5X2N5Y2xlKQorCQkJZmVhdHVyZXMgfD0gTElSQ19DQU5fU0VUX1JFQ19EVVRZX0NZQ0xFOwogCX0KIAorCWlmIChpcl9kZXYtPnByb3BzLT5zX3J4X2NhcnJpZXJfcmFuZ2UpCisJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9SRUNfQ0FSUklFUiB8CisJCQlMSVJDX0NBTl9TRVRfUkVDX0NBUlJJRVJfUkFOR0U7CisKKwlpZiAoaXJfZGV2LT5wcm9wcy0+c19sZWFybmluZ19tb2RlKQorCQlmZWF0dXJlcyB8PSBMSVJDX0NBTl9VU0VfV0lERUJBTkRfUkVDRUlWRVI7CisKKwlpZiAoaXJfZGV2LT5wcm9wcy0+bWF4X3RpbWVvdXQpCisJCWZlYXR1cmVzIHw9IExJUkNfQ0FOX1NFVF9SRUNfVElNRU9VVDsKKworCiAJc25wcmludGYoZHJ2LT5uYW1lLCBzaXplb2YoZHJ2LT5uYW1lKSwgImlyLWxpcmMtY29kZWMgKCVzKSIsCiAJCSBpcl9kZXYtPmRyaXZlcl9uYW1lKTsKIAlkcnYtPm1pbm9yID0gLTE7CkBAIC0yMjQsOCArMzAyLDYgQEAKIAogCWlyX2Rldi0+cmF3LT5saXJjLmRydiA9IGRydjsKIAlpcl9kZXYtPnJhdy0+bGlyYy5pcl9kZXYgPSBpcl9kZXY7Ci0JaXJfZGV2LT5yYXctPmxpcmMubGlyY2RhdGEgPSBQVUxTRV9NQVNLOwotCiAJcmV0dXJuIDA7CiAKIGxpcmNfcmVnaXN0ZXJfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9pci1uZWMtZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9JUi9pci1uZWMtZGVjb2Rlci5jCmluZGV4IDUyZTBmMzcuLmQ1OTc0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItbmVjLWRlY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL2lyLW5lYy1kZWNvZGVyLmMKQEAgLTIwLDEyICsyMCwxMyBAQAogI2RlZmluZSBORUNfSEVBREVSX1BVTFNFCSgxNiAqIE5FQ19VTklUKQogI2RlZmluZSBORUNYX0hFQURFUl9QVUxTRQkoOCAgKiBORUNfVU5JVCkgLyogTGVzcyBjb21tb24gTkVDIHZhcmlhbnQgKi8KICNkZWZpbmUgTkVDX0hFQURFUl9TUEFDRQkoOCAgKiBORUNfVU5JVCkKLSNkZWZpbmUgTkVDX1JFUEVBVF9TUEFDRQkoOCAgKiBORUNfVU5JVCkKKyNkZWZpbmUgTkVDX1JFUEVBVF9TUEFDRQkoNCAgKiBORUNfVU5JVCkKICNkZWZpbmUgTkVDX0JJVF9QVUxTRQkJKDEgICogTkVDX1VOSVQpCiAjZGVmaW5lIE5FQ19CSVRfMF9TUEFDRQkJKDEgICogTkVDX1VOSVQpCiAjZGVmaW5lIE5FQ19CSVRfMV9TUEFDRQkJKDMgICogTkVDX1VOSVQpCiAjZGVmaW5lCU5FQ19UUkFJTEVSX1BVTFNFCSgxICAqIE5FQ19VTklUKQogI2RlZmluZQlORUNfVFJBSUxFUl9TUEFDRQkoMTAgKiBORUNfVU5JVCkgLyogZXZlbiBsb25nZXIgaW4gcmVhbGl0eSAqLworI2RlZmluZSBORUNYX1JFUEVBVF9CSVRTCTEKIAogZW51bSBuZWNfc3RhdGUgewogCVNUQVRFX0lOQUNUSVZFLApAQCAtNjcsOCArNjgsMTIgQEAKIAkJaWYgKCFldi5wdWxzZSkKIAkJCWJyZWFrOwogCi0JCWlmICghZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNfSEVBREVSX1BVTFNFLCBORUNfVU5JVCAvIDIpICYmCi0JCSAgICAhZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNYX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkKKwkJaWYgKGVxX21hcmdpbihldi5kdXJhdGlvbiwgTkVDX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkgeworCQkJZGF0YS0+aXNfbmVjX3ggPSBmYWxzZTsKKwkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gZmFsc2U7CisJCX0gZWxzZSBpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNYX0hFQURFUl9QVUxTRSwgTkVDX1VOSVQgLyAyKSkKKwkJCWRhdGEtPmlzX25lY194ID0gdHJ1ZTsKKwkJZWxzZQogCQkJYnJlYWs7CiAKIAkJZGF0YS0+Y291bnQgPSAwOwpAQCAtMTA1LDYgKzExMCwxNyBAQAogCQlpZiAoZXYucHVsc2UpCiAJCQlicmVhazsKIAorCQlpZiAoZGF0YS0+bmVjeF9yZXBlYXQgJiYgZGF0YS0+Y291bnQgPT0gTkVDWF9SRVBFQVRfQklUUyAmJgorCQkJZ2VxX21hcmdpbihldi5kdXJhdGlvbiwKKwkJCU5FQ19UUkFJTEVSX1NQQUNFLCBORUNfVU5JVCAvIDIpKSB7CisJCQkJSVJfZHByaW50aygxLCAiUmVwZWF0IGxhc3Qga2V5XG4iKTsKKwkJCQlpcl9yZXBlYXQoaW5wdXRfZGV2KTsKKwkJCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOworCQkJCXJldHVybiAwOworCisJCX0gZWxzZSBpZiAoZGF0YS0+Y291bnQgPiBORUNYX1JFUEVBVF9CSVRTKQorCQkJZGF0YS0+bmVjeF9yZXBlYXQgPSBmYWxzZTsKKwogCQlkYXRhLT5iaXRzIDw8PSAxOwogCQlpZiAoZXFfbWFyZ2luKGV2LmR1cmF0aW9uLCBORUNfQklUXzFfU1BBQ0UsIE5FQ19VTklUIC8gMikpCiAJCQlkYXRhLT5iaXRzIHw9IDE7CkBAIC0xNTksNiArMTc1LDkgQEAKIAkJCUlSX2RwcmludGsoMSwgIk5FQyBzY2FuY29kZSAweCUwNHhcbiIsIHNjYW5jb2RlKTsKIAkJfQogCisJCWlmIChkYXRhLT5pc19uZWNfeCkKKwkJCWRhdGEtPm5lY3hfcmVwZWF0ID0gdHJ1ZTsKKwogCQlpcl9rZXlkb3duKGlucHV0X2Rldiwgc2NhbmNvZGUsIDApOwogCQlkYXRhLT5zdGF0ZSA9IFNUQVRFX0lOQUNUSVZFOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmF3LWV2ZW50LmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXJhdy1ldmVudC5jCmluZGV4IDZmMTkyZWYuLjQzMDk0ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvSVIvaXItcmF3LWV2ZW50LmMKKysrIGIvZHJpdmVycy9tZWRpYS9JUi9pci1yYXctZXZlbnQuYwpAQCAtMTIsOSArMTIsMTAgQEAKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgImlyLWNvcmUtcHJpdi5oIgogCiAvKiBEZWZpbmUgdGhlIG1heCBudW1iZXIgb2YgcHVsc2Uvc3BhY2UgdHJhbnNpdGlvbnMgdG8gYnVmZmVyICovCkBAIC0yNCw3ICsyNSw3IEBACiBzdGF0aWMgTElTVF9IRUFEKGlyX3Jhd19jbGllbnRfbGlzdCk7CiAKIC8qIFVzZWQgdG8gaGFuZGxlIElSIHJhdyBoYW5kbGVyIGV4dGVuc2lvbnMgKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXJfcmF3X2hhbmRsZXJfbG9jayk7CitzdGF0aWMgREVGSU5FX01VVEVYKGlyX3Jhd19oYW5kbGVyX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChpcl9yYXdfaGFuZGxlcl9saXN0KTsKIHN0YXRpYyB1NjQgYXZhaWxhYmxlX3Byb3RvY29sczsKIApAQCAtMzMsMjAgKzM0LDMwIEBACiBzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IHdxX2xvYWQ7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXJfcmF3X2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIGludCBpcl9yYXdfZXZlbnRfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlyX3Jhd19ldmVudCBldjsKIAlzdHJ1Y3QgaXJfcmF3X2hhbmRsZXIgKmhhbmRsZXI7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsICpyYXcgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsLCByeF93b3JrKTsKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdyA9IChzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKilkYXRhOwogCi0Jd2hpbGUgKGtmaWZvX291dCgmcmF3LT5rZmlmbywgJmV2LCBzaXplb2YoZXYpKSA9PSBzaXplb2YoZXYpKSB7Ci0JCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaGFuZGxlciwgJmlyX3Jhd19oYW5kbGVyX2xpc3QsIGxpc3QpCi0JCQloYW5kbGVyLT5kZWNvZGUocmF3LT5pbnB1dF9kZXYsIGV2KTsKLQkJc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwotCQlyYXctPnByZXZfZXYgPSBldjsKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisKKwkJd2hpbGUgKGtmaWZvX291dCgmcmF3LT5rZmlmbywgJmV2LCBzaXplb2YoZXYpKSA9PSBzaXplb2YoZXYpKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQorCQkJCWhhbmRsZXItPmRlY29kZShyYXctPmlucHV0X2RldiwgZXYpOworCQkJcmF3LT5wcmV2X2V2ID0gZXY7CisJCX0KKworCQltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlKCk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNjYsNiArNzcsOSBAQAogCWlmICghaXItPnJhdykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlJUl9kcHJpbnRrKDIsICJzYW1wbGU6ICgwNSVkdXMgJXMpXG4iLAorCQlUT19VUyhldi0+ZHVyYXRpb24pLCBUT19TVFIoZXYtPnB1bHNlKSk7CisKIAlpZiAoa2ZpZm9faW4oJmlyLT5yYXctPmtmaWZvLCBldiwgc2l6ZW9mKCpldikpICE9IHNpemVvZigqZXYpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTI2LDYgKzE0MCw5MCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3N0b3JlX2VkZ2UpOwogCiAvKioKKyAqIGlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcigpIC0gcGFzcyBuZXh0IHB1bHNlL3NwYWNlIHRvIGRlY29kZXJzIHdpdGggc29tZSBwcm9jZXNzaW5nCisgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBldmVudCB0aGF0IGhhcyBvY2N1cnJlZAorICoKKyAqIFRoaXMgcm91dGluZSAod2hpY2ggbWF5IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0KSB3b3JrcworICogaW4gc2ltaWxpYXIgbWFubmVyIHRvIGlyX3Jhd19ldmVudF9zdG9yZV9lZGdlLgorICogVGhpcyByb3V0aW5lIGlzIGludGVuZGVkIGZvciBkZXZpY2VzIHdpdGggbGltaXRlZCBpbnRlcm5hbCBidWZmZXIKKyAqIEl0IGF1dG9tZXJnZXMgc2FtcGxlcyBvZiBzYW1lIHR5cGUsIGFuZCBoYW5kbGVzIHRpbWVvdXRzCisgKi8KK2ludCBpcl9yYXdfZXZlbnRfc3RvcmVfd2l0aF9maWx0ZXIoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJCQkJc3RydWN0IGlyX3Jhd19ldmVudCAqZXYpCit7CisJc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3ID0gaXItPnJhdzsKKworCWlmICghcmF3IHx8ICFpci0+cHJvcHMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWdub3JlIHNwYWNlcyBpbiBpZGxlIG1vZGUgKi8KKwlpZiAoaXItPmlkbGUgJiYgIWV2LT5wdWxzZSkKKwkJcmV0dXJuIDA7CisJZWxzZSBpZiAoaXItPmlkbGUpCisJCWlyX3Jhd19ldmVudF9zZXRfaWRsZShpbnB1dF9kZXYsIDApOworCisJaWYgKCFyYXctPnRoaXNfZXYuZHVyYXRpb24pIHsKKwkJcmF3LT50aGlzX2V2ID0gKmV2OworCX0gZWxzZSBpZiAoZXYtPnB1bHNlID09IHJhdy0+dGhpc19ldi5wdWxzZSkgeworCQlyYXctPnRoaXNfZXYuZHVyYXRpb24gKz0gZXYtPmR1cmF0aW9uOworCX0gZWxzZSB7CisJCWlyX3Jhd19ldmVudF9zdG9yZShpbnB1dF9kZXYsICZyYXctPnRoaXNfZXYpOworCQlyYXctPnRoaXNfZXYgPSAqZXY7CisJfQorCisJLyogRW50ZXIgaWRsZSBtb2RlIGlmIG5lc3Nlc2FyeSAqLworCWlmICghZXYtPnB1bHNlICYmIGlyLT5wcm9wcy0+dGltZW91dCAmJgorCQlyYXctPnRoaXNfZXYuZHVyYXRpb24gPj0gaXItPnByb3BzLT50aW1lb3V0KQorCQlpcl9yYXdfZXZlbnRfc2V0X2lkbGUoaW5wdXRfZGV2LCAxKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcik7CisKK3ZvaWQgaXJfcmF3X2V2ZW50X3NldF9pZGxlKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwgaW50IGlkbGUpCit7CisJc3RydWN0IGlyX2lucHV0X2RldiAqaXIgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dF9kZXYpOworCXN0cnVjdCBpcl9yYXdfZXZlbnRfY3RybCAqcmF3ID0gaXItPnJhdzsKKwlrdGltZV90IG5vdzsKKwl1NjQgZGVsdGE7CisKKwlpZiAoIWlyLT5wcm9wcykKKwkJcmV0dXJuOworCisJaWYgKCFpci0+cmF3KQorCQlnb3RvIG91dDsKKworCWlmIChpZGxlKSB7CisJCUlSX2RwcmludGsoMiwgImVudGVyIGlkbGUgbW9kZVxuIik7CisJCXJhdy0+bGFzdF9ldmVudCA9IGt0aW1lX2dldCgpOworCX0gZWxzZSB7CisJCUlSX2RwcmludGsoMiwgImV4aXQgaWRsZSBtb2RlXG4iKTsKKworCQlub3cgPSBrdGltZV9nZXQoKTsKKwkJZGVsdGEgPSBrdGltZV90b19ucyhrdGltZV9zdWIobm93LCBpci0+cmF3LT5sYXN0X2V2ZW50KSk7CisKKwkJV0FSTl9PTihyYXctPnRoaXNfZXYucHVsc2UpOworCisJCXJhdy0+dGhpc19ldi5kdXJhdGlvbiA9CisJCQltaW4ocmF3LT50aGlzX2V2LmR1cmF0aW9uICsgZGVsdGEsCisJCQkJCQkodTY0KUlSX01BWF9EVVJBVElPTik7CisKKwkJaXJfcmF3X2V2ZW50X3N0b3JlKGlucHV0X2RldiwgJnJhdy0+dGhpc19ldik7CisKKwkJaWYgKHJhdy0+dGhpc19ldi5kdXJhdGlvbiA9PSBJUl9NQVhfRFVSQVRJT04pCisJCQlpcl9yYXdfZXZlbnRfcmVzZXQoaW5wdXRfZGV2KTsKKworCQlyYXctPnRoaXNfZXYuZHVyYXRpb24gPSAwOworCX0KK291dDoKKwlpZiAoaXItPnByb3BzLT5zX2lkbGUpCisJCWlyLT5wcm9wcy0+c19pZGxlKGlyLT5wcm9wcy0+cHJpdiwgaWRsZSk7CisJaXItPmlkbGUgPSBpZGxlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJfcmF3X2V2ZW50X3NldF9pZGxlKTsKKworLyoqCiAgKiBpcl9yYXdfZXZlbnRfaGFuZGxlKCkgLSBzY2hlZHVsZXMgdGhlIGRlY29kaW5nIG9mIHN0b3JlZCBpciBkYXRhCiAgKiBAaW5wdXRfZGV2Ogl0aGUgc3RydWN0IGlucHV0X2RldiBkZXZpY2UgZGVzY3JpcHRvcgogICoKQEAgLTEzOCw3ICsyMzYsNyBAQAogCWlmICghaXItPnJhdykKIAkJcmV0dXJuOwogCi0Jc2NoZWR1bGVfd29yaygmaXItPnJhdy0+cnhfd29yayk7CisJd2FrZV91cF9wcm9jZXNzKGlyLT5yYXctPnRocmVhZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcl9yYXdfZXZlbnRfaGFuZGxlKTsKIApAQCAtMTQ3LDkgKzI0NSw5IEBACiBpcl9yYXdfZ2V0X2FsbG93ZWRfcHJvdG9jb2xzKCkKIHsKIAl1NjQgcHJvdG9jb2xzOwotCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiAJcHJvdG9jb2xzID0gYXZhaWxhYmxlX3Byb3RvY29sczsKLQlzcGluX3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKIAlyZXR1cm4gcHJvdG9jb2xzOwogfQogCkBAIC0xNjcsNyArMjY1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpci0+cmF3LT5pbnB1dF9kZXYgPSBpbnB1dF9kZXY7Ci0JSU5JVF9XT1JLKCZpci0+cmF3LT5yeF93b3JrLCBpcl9yYXdfZXZlbnRfd29yayk7CisKIAlpci0+cmF3LT5lbmFibGVkX3Byb3RvY29scyA9IH4wOwogCXJjID0ga2ZpZm9fYWxsb2MoJmlyLT5yYXctPmtmaWZvLCBzaXplb2YoczY0KSAqIE1BWF9JUl9FVkVOVF9TSVpFLAogCQkJIEdGUF9LRVJORUwpOwpAQCAtMTc3LDEyICsyNzUsMjEgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJaXItPnJhdy0+dGhyZWFkID0ga3RocmVhZF9ydW4oaXJfcmF3X2V2ZW50X3RocmVhZCwgaXItPnJhdywKKwkJCSJyYyV1IiwgICh1bnNpZ25lZCBpbnQpaXItPmRldm5vKTsKKworCWlmIChJU19FUlIoaXItPnJhdy0+dGhyZWFkKSkgeworCQlrZnJlZShpci0+cmF3KTsKKwkJaXItPnJhdyA9IE5VTEw7CisJCXJldHVybiBQVFJfRVJSKGlyLT5yYXctPnRocmVhZCk7CisJfQorCisJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaXItPnJhdy0+bGlzdCwgJmlyX3Jhd19jbGllbnRfbGlzdCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoYW5kbGVyLCAmaXJfcmF3X2hhbmRsZXJfbGlzdCwgbGlzdCkKIAkJaWYgKGhhbmRsZXItPnJhd19yZWdpc3RlcikKIAkJCWhhbmRsZXItPnJhd19yZWdpc3Rlcihpci0+cmF3LT5pbnB1dF9kZXYpOwotCXNwaW5fdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKwltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTUsMTQgKzMwMiwxNCBAQAogCWlmICghaXItPnJhdykKIAkJcmV0dXJuOwogCi0JY2FuY2VsX3dvcmtfc3luYygmaXItPnJhdy0+cnhfd29yayk7CisJa3RocmVhZF9zdG9wKGlyLT5yYXctPnRocmVhZCk7CiAKLQlzcGluX2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogCWxpc3RfZGVsKCZpci0+cmF3LT5saXN0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpcl9yYXdfaGFuZGxlcl9saXN0LCBsaXN0KQogCQlpZiAoaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIpCiAJCQloYW5kbGVyLT5yYXdfdW5yZWdpc3Rlcihpci0+cmF3LT5pbnB1dF9kZXYpOwotCXNwaW5fdW5sb2NrKCZpcl9yYXdfaGFuZGxlcl9sb2NrKTsKKwltdXRleF91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogCiAJa2ZpZm9fZnJlZSgmaXItPnJhdy0+a2ZpZm8pOwogCWtmcmVlKGlyLT5yYXcpOwpAQCAtMjE3LDEzICszMjQsMTMgQEAKIHsKIAlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwgKnJhdzsKIAotCXNwaW5fbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CisJbXV0ZXhfbG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaXJfcmF3X2hhbmRsZXItPmxpc3QsICZpcl9yYXdfaGFuZGxlcl9saXN0KTsKIAlpZiAoaXJfcmF3X2hhbmRsZXItPnJhd19yZWdpc3RlcikKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCiAJCQlpcl9yYXdfaGFuZGxlci0+cmF3X3JlZ2lzdGVyKHJhdy0+aW5wdXRfZGV2KTsKIAlhdmFpbGFibGVfcHJvdG9jb2xzIHw9IGlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7Ci0Jc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCW11dGV4X3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMywxMyArMzQwLDEzIEBACiB7CiAJc3RydWN0IGlyX3Jhd19ldmVudF9jdHJsICpyYXc7CiAKLQlzcGluX2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCW11dGV4X2xvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOwogCWxpc3RfZGVsKCZpcl9yYXdfaGFuZGxlci0+bGlzdCk7CiAJaWYgKGlyX3Jhd19oYW5kbGVyLT5yYXdfdW5yZWdpc3RlcikKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyYXcsICZpcl9yYXdfY2xpZW50X2xpc3QsIGxpc3QpCiAJCQlpcl9yYXdfaGFuZGxlci0+cmF3X3VucmVnaXN0ZXIocmF3LT5pbnB1dF9kZXYpOwogCWF2YWlsYWJsZV9wcm90b2NvbHMgJj0gfmlyX3Jhd19oYW5kbGVyLT5wcm90b2NvbHM7Ci0Jc3Bpbl91bmxvY2soJmlyX3Jhd19oYW5kbGVyX2xvY2spOworCW11dGV4X3VubG9jaygmaXJfcmF3X2hhbmRsZXJfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKGlyX3Jhd19oYW5kbGVyX3VucmVnaXN0ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMgYi9kcml2ZXJzL21lZGlhL0lSL2lyLXN5c2ZzLmMKaW5kZXggNjI3MzA0Ny4uOTZkYWZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9pci1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvaXItc3lzZnMuYwpAQCAtMzI1LDYgKzMyNSw3IEBACiAKIAkvKiBJbml0aWFsaXplL2xvYWQgdGhlIGRlY29kZXJzL2tleW1hcCBjb2RlIHRoYXQgd2lsbCBiZSB1c2VkICovCiAJaXJfcmF3X2luaXQoKTsKKwlpcl9yY21hcF9pbml0KCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMiw2ICszMzMsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGlyX2NvcmVfZXhpdCh2b2lkKQogewogCWNsYXNzX3VucmVnaXN0ZXIoJmlyX2lucHV0X2NsYXNzKTsKKwlpcl9yY21hcF9jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KGlyX2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvTWFrZWZpbGUKaW5kZXggY2JlZTA2Mi4uOTUwZTVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9NYWtlZmlsZQpAQCAtMTksNyArMTksNiBAQAogCQkJcmMtZG0xMTA1LW5lYy5vIFwKIAkJCXJjLWRudHYtbGl2ZS1kdmItdC5vIFwKIAkJCXJjLWRudHYtbGl2ZS1kdmJ0LXByby5vIFwKLQkJCXJjLWVtcHR5Lm8gXAogCQkJcmMtZW0tdGVycmF0ZWMubyBcCiAJCQlyYy1lbmNvcmUtZW5sdHYyLm8gXAogCQkJcmMtZW5jb3JlLWVubHR2Lm8gXApAQCAtNTksNiArNTgsNyBAQAogCQkJcmMtcHVycGxldHYubyBcCiAJCQlyYy1wdjk1MS5vIFwKIAkJCXJjLXJjNS1oYXVwcGF1Z2UtbmV3Lm8gXAorCQkJcmMtcmM1LXN0cmVhbXphcC5vIFwKIAkJCXJjLXJjNS10di5vIFwKIAkJCXJjLXJjNi1tY2UubyBcCiAJCQlyYy1yZWFsLWF1ZGlvLTIyMC0zMi1rZXlzLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLWVtcHR5LmMgYi9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZW1wdHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IzMzhkOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtZW1wdHkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qIGVtcHR5LmggLSBLZXl0YWJsZSBmb3IgZW1wdHkgUmVtb3RlIENvbnRyb2xsZXIKLSAqCi0gKiBrZXltYXAgaW1wb3J0ZWQgZnJvbSBpci1rZXltYXBzLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQHJlZGhhdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bWVkaWEvcmMtbWFwLmg+Ci0KLS8qIGVtcHR5IGtleXRhYmxlLCBjYW4gYmUgdXNlZCBhcyBwbGFjZWhvbGRlciBmb3Igbm90LXlldCBjcmVhdGVkIGtleXRhYmxlcyAqLwotCi1zdGF0aWMgc3RydWN0IGlyX3NjYW5jb2RlIGVtcHR5W10gPSB7Ci0JeyAweDJhLCBLRVlfQ09GRkVFIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJjX2tleW1hcCBlbXB0eV9tYXAgPSB7Ci0JLm1hcCA9IHsKLQkJLnNjYW4gICAgPSBlbXB0eSwKLQkJLnNpemUgICAgPSBBUlJBWV9TSVpFKGVtcHR5KSwKLQkJLmlyX3R5cGUgPSBJUl9UWVBFX1VOS05PV04sCS8qIExlZ2FjeSBJUiB0eXBlICovCi0JCS5uYW1lICAgID0gUkNfTUFQX0VNUFRZLAotCX0KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmNfbWFwX2VtcHR5KHZvaWQpCi17Ci0JcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmZW1wdHlfbWFwKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcmNfbWFwX2VtcHR5KHZvaWQpCi17Ci0JaXJfdW5yZWdpc3Rlcl9tYXAoJmVtcHR5X21hcCk7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmNfbWFwX2VtcHR5KQotbW9kdWxlX2V4aXQoZXhpdF9yY19tYXBfZW1wdHkpCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkByZWRoYXQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJjNS1zdHJlYW16YXAuYyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1yYzUtc3RyZWFtemFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxOWM1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1yYzUtc3RyZWFtemFwLmMKQEAgLTAsMCArMSw4MSBAQAorLyogcmMtcmM1LXN0cmVhbXphcC5jIC0gS2V5dGFibGUgZm9yIFN0cmVhbXphcCBQQyBSZW1vdGUsIGZvciB1c2UKKyAqIHdpdGggdGhlIFN0cmVhbXphcCBQQyBSZW1vdGUgSVIgUmVjZWl2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxtZWRpYS9yYy1tYXAuaD4KKworc3RhdGljIHN0cnVjdCBpcl9zY2FuY29kZSByYzVfc3RyZWFtemFwW10gPSB7CisvKgorICogRklYTUU6IFRoZSBTdHJlYW16YXAgcmVtb3RlIGlzbid0IGFjdHVhbGx5IHRydWUgUkMtNSwgaXQgaGFzIGFuIGV4dHJhCisgKiBiaXQgaW4gaXQsIHdoaWNoIHByZXNlbnRseSB0aHJvd3MgdGhlIGluLWtlcm5lbCBSQy01IGRlY29kZXIgZm9yIGEgbG9vcC4KKyAqIFdlIGVpdGhlciBoYXZlIHRvIGVuaGFuY2UgdGhlIGRlY29kZXIgdG8gc3VwcG9ydCBpdCwgYWRkIGEgbmV3IGRlY29kZXIsCisgKiBvciBqdXN0IHJlbHkgb24gbGlyYyB1c2Vyc3BhY2UgZGVjb2RpbmcuCisgKi8KKwl7IDB4MDAsIEtFWV9OVU1FUklDXzAgfSwKKwl7IDB4MDEsIEtFWV9OVU1FUklDXzEgfSwKKwl7IDB4MDIsIEtFWV9OVU1FUklDXzIgfSwKKwl7IDB4MDMsIEtFWV9OVU1FUklDXzMgfSwKKwl7IDB4MDQsIEtFWV9OVU1FUklDXzQgfSwKKwl7IDB4MDUsIEtFWV9OVU1FUklDXzUgfSwKKwl7IDB4MDYsIEtFWV9OVU1FUklDXzYgfSwKKwl7IDB4MDcsIEtFWV9OVU1FUklDXzcgfSwKKwl7IDB4MDgsIEtFWV9OVU1FUklDXzggfSwKKwl7IDB4MGEsIEtFWV9QT1dFUiB9LAorCXsgMHgwYiwgS0VZX01VVEUgfSwKKwl7IDB4MGMsIEtFWV9DSEFOTkVMVVAgfSwKKwl7IDB4MGQsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHgwZSwgS0VZX0NIQU5ORUxET1dOIH0sCisJeyAweDBmLCBLRVlfVk9MVU1FRE9XTiB9LAorCXsgMHgxMCwgS0VZX1VQIH0sCisJeyAweDExLCBLRVlfTEVGVCB9LAorCXsgMHgxMiwgS0VZX09LIH0sCisJeyAweDEzLCBLRVlfUklHSFQgfSwKKwl7IDB4MTQsIEtFWV9ET1dOIH0sCisJeyAweDE1LCBLRVlfTUVOVSB9LAorCXsgMHgxNiwgS0VZX0VYSVQgfSwKKwl7IDB4MTcsIEtFWV9QTEFZIH0sCisJeyAweDE4LCBLRVlfUEFVU0UgfSwKKwl7IDB4MTksIEtFWV9TVE9QIH0sCisJeyAweDFhLCBLRVlfQkFDSyB9LAorCXsgMHgxYiwgS0VZX0ZPUldBUkQgfSwKKwl7IDB4MWMsIEtFWV9SRUNPUkQgfSwKKwl7IDB4MWQsIEtFWV9SRVdJTkQgfSwKKwl7IDB4MWUsIEtFWV9GQVNURk9SV0FSRCB9LAorCXsgMHgyMCwgS0VZX1JFRCB9LAorCXsgMHgyMSwgS0VZX0dSRUVOIH0sCisJeyAweDIyLCBLRVlfWUVMTE9XIH0sCisJeyAweDIzLCBLRVlfQkxVRSB9LAorCit9OworCitzdGF0aWMgc3RydWN0IHJjX2tleW1hcCByYzVfc3RyZWFtemFwX21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IHJjNV9zdHJlYW16YXAsCisJCS5zaXplICAgID0gQVJSQVlfU0laRShyYzVfc3RyZWFtemFwKSwKKwkJLmlyX3R5cGUgPSBJUl9UWVBFX1JDNSwKKwkJLm5hbWUgICAgPSBSQ19NQVBfUkM1X1NUUkVBTVpBUCwKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3JjX21hcF9yYzVfc3RyZWFtemFwKHZvaWQpCit7CisJcmV0dXJuIGlyX3JlZ2lzdGVyX21hcCgmcmM1X3N0cmVhbXphcF9tYXApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yY19tYXBfcmM1X3N0cmVhbXphcCh2b2lkKQoreworCWlyX3VucmVnaXN0ZXJfbWFwKCZyYzVfc3RyZWFtemFwX21hcCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcmNfbWFwX3JjNV9zdHJlYW16YXApCittb2R1bGVfZXhpdChleGl0X3JjX21hcF9yYzVfc3RyZWFtemFwKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYXJvZCBXaWxzb24gPGphcm9kQHJlZGhhdC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9JUi9rZXltYXBzL3JjLXJjNi1tY2UuYwppbmRleCBjNjcyNmE4Li42NDI2NGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL2tleW1hcHMvcmMtcmM2LW1jZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIva2V5bWFwcy9yYy1yYzYtbWNlLmMKQEAgLTc0LDYgKzc0LDggQEAKIAl7IDB4ODAwZjA0NWEsIEtFWV9TVUJUSVRMRSB9LCAvKiBDYXB0aW9uL1RlbGV0ZXh0ICovCiAJeyAweDgwMGYwNDRkLCBLRVlfVElUTEUgfSwKIAorICAgICAgIHsgMHg4MDBmMDQ0ZSwgS0VZX1BSSU5UIH0sIC8qIFByaW50IC0gSFAgT0VNIHZlcnNpb24gb2YgcmVtb3RlICovCisKIAl7IDB4ODAwZjA0MGMsIEtFWV9QT1dFUiB9LAogCXsgMHg4MDBmMDQwZCwgS0VZX1BST0cxIH0sIC8qIFdpbmRvd3MgTUNFIGJ1dHRvbiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL0lSL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9JUi9tY2V1c2IuYwppbmRleCA3OGJmN2Y3Li5hYzZiYjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0lSL21jZXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvSVIvbWNldXNiLmMKQEAgLTIyOCw3ICsyMjgsNiBAQAogLyogZGF0YSBzdHJ1Y3R1cmUgZm9yIGVhY2ggdXNiIHRyYW5zY2VpdmVyICovCiBzdHJ1Y3QgbWNldXNiX2RldiB7CiAJLyogaXItY29yZSBiaXRzICovCi0Jc3RydWN0IGlyX2lucHV0X2RldiAqaXJkZXY7CiAJc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7CiAJc3RydWN0IGlyX3Jhd19ldmVudCByYXdpcjsKIApAQCAtNDI4LDcgKzQyNyw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB1c2JfYXN5bmNfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIG1jZV9hc3luY19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBtY2V1c2JfZGV2ICppcjsKIAlpbnQgbGVuOwpAQCAtNDc3LDcgKzQ3Niw3IEBACiAJCS8qIG91dGJvdW5kIGRhdGEgKi8KIAkJdXNiX2ZpbGxfaW50X3VyYihhc3luY191cmIsIGlyLT51c2JkZXYsCiAJCQl1c2Jfc25kaW50cGlwZShpci0+dXNiZGV2LCBlcC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQlhc3luY19idWYsIHNpemUsICh1c2JfY29tcGxldGVfdCkgdXNiX2FzeW5jX2NhbGxiYWNrLAorCQkJYXN5bmNfYnVmLCBzaXplLCAodXNiX2NvbXBsZXRlX3QpbWNlX2FzeW5jX2NhbGxiYWNrLAogCQkJaXIsIGVwLT5iSW50ZXJ2YWwpOwogCQltZW1jcHkoYXN5bmNfYnVmLCBkYXRhLCBzaXplKTsKIApAQCAtNzM5LDcgKzczOCw3IEBACiAKIAlpZiAoaXItPnNlbmRfZmxhZ3MgPT0gUkVDVl9GTEFHX0lOX1BST0dSRVNTKSB7CiAJCWlyLT5zZW5kX2ZsYWdzID0gU0VORF9GTEFHX0NPTVBMRVRFOwotCQlkZXZfZGJnKCZpci0+aXJkZXYtPmRldiwgInNldHVwIGFuc3dlciByZWNlaXZlZCAlZCBieXRlc1xuIiwKKwkJZGV2X2RiZyhpci0+ZGV2LCAic2V0dXAgYW5zd2VyIHJlY2VpdmVkICVkIGJ5dGVzXG4iLAogCQkJYnVmX2xlbik7CiAJfQogCkBAIC04NjEsNyArODYwLDYgQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCXN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzOwotCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyZGV2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlyLT5kZXY7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKQEAgLTg3OCwxMiArODc2LDYgQEAKIAkJZ290byBwcm9wc19hbGxvY19mYWlsZWQ7CiAJfQogCi0JaXJkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJfaW5wdXRfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpcmRldikgewotCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpciBpbnB1dCBkZXYgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwotCQlnb3RvIGlyX2Rldl9hbGxvY19mYWlsZWQ7Ci0JfQotCiAJc25wcmludGYoaXItPm5hbWUsIHNpemVvZihpci0+bmFtZSksICJNZWRpYSBDZW50ZXIgRWQuIGVIb21lICIKIAkJICJJbmZyYXJlZCBSZW1vdGUgVHJhbnNjZWl2ZXIgKCUwNHg6JTA0eCkiLAogCQkgbGUxNl90b19jcHUoaXItPnVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCkBAIC05MDIsOSArODk0LDYgQEAKIAlwcm9wcy0+dHhfaXIgPSBtY2V1c2JfdHhfaXI7CiAKIAlpci0+cHJvcHMgPSBwcm9wczsKLQlpci0+aXJkZXYgPSBpcmRldjsKLQotCWlucHV0X3NldF9kcnZkYXRhKGlkZXYsIGlyZGV2KTsKIAogCXJldCA9IGlyX2lucHV0X3JlZ2lzdGVyKGlkZXYsIFJDX01BUF9SQzZfTUNFLCBwcm9wcywgRFJJVkVSX05BTUUpOwogCWlmIChyZXQgPCAwKSB7CkBAIC05MTUsOCArOTA0LDYgQEAKIAlyZXR1cm4gaWRldjsKIAogaXJkZXZfZmFpbGVkOgotCWtmcmVlKGlyZGV2KTsKLWlyX2Rldl9hbGxvY19mYWlsZWQ6CiAJa2ZyZWUocHJvcHMpOwogcHJvcHNfYWxsb2NfZmFpbGVkOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlkZXYpOwpAQCAtOTMyLDcgKzkxOSw2IEBACiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcCA9IE5VTEw7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbiA9IE5VTEw7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9vdXQgPSBOVUxMOwotCXN0cnVjdCB1c2JfaG9zdF9jb25maWcgKmNvbmZpZzsKIAlzdHJ1Y3QgbWNldXNiX2RldiAqaXIgPSBOVUxMOwogCWludCBwaXBlLCBtYXhwLCBpOwogCWNoYXIgYnVmWzYzXSwgbmFtZVsxMjhdID0gIiI7CkBAIC05NDIsNyArOTI4LDYgQEAKIAogCWRldl9kYmcoJmludGYtPmRldiwgIjogJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQljb25maWcgPSBkZXYtPmFjdGNvbmZpZzsKIAlpZGVzYyAgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKIAogCWlzX2dlbjMgPSB1c2JfbWF0Y2hfaWQoaW50ZiwgZ2VuM19saXN0KSA/IDEgOiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9JUi9yYy1tYXAuYyBiL2RyaXZlcnMvbWVkaWEvSVIvcmMtbWFwLmMKaW5kZXggNDZhOGYxNS4uNjg5MTQzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9JUi9yYy1tYXAuYworKysgYi9kcml2ZXJzL21lZGlhL0lSL3JjLW1hcC5jCkBAIC04MiwzICs4MiwyNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXJfdW5yZWdpc3Rlcl9tYXApOwogCisKK3N0YXRpYyBzdHJ1Y3QgaXJfc2NhbmNvZGUgZW1wdHlbXSA9IHsKKwl7IDB4MmEsIEtFWV9DT0ZGRUUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmNfa2V5bWFwIGVtcHR5X21hcCA9IHsKKwkubWFwID0geworCQkuc2NhbiAgICA9IGVtcHR5LAorCQkuc2l6ZSAgICA9IEFSUkFZX1NJWkUoZW1wdHkpLAorCQkuaXJfdHlwZSA9IElSX1RZUEVfVU5LTk9XTiwJLyogTGVnYWN5IElSIHR5cGUgKi8KKwkJLm5hbWUgICAgPSBSQ19NQVBfRU1QVFksCisJfQorfTsKKworaW50IGlyX3JjbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaXJfcmVnaXN0ZXJfbWFwKCZlbXB0eV9tYXApOworfQorCit2b2lkIGlyX3JjbWFwX2NsZWFudXAodm9pZCkKK3sKKwlpcl91bnJlZ2lzdGVyX21hcCgmZW1wdHlfbWFwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvSVIvc3RyZWFtemFwLmMgYi9kcml2ZXJzL21lZGlhL0lSL3N0cmVhbXphcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OGUyOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL0lSL3N0cmVhbXphcC5jCkBAIC0wLDAgKzEsNzQxIEBACisvKgorICogU3RyZWFtemFwIFJlbW90ZSBDb250cm9sIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBDaHJpc3RvcGggQmFydGVsbXVzIDxsaXJjQGJhcnRlbG11cy5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCBKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gdGhlIHdvcmsgb2YgR3JlZyBXaWNraGFtIGFuZCBBZHJpYW4KKyAqIERld2h1cnN0LiBJdCB3YXMgc3Vic3RhbnRpYWxseSByZXdyaXR0ZW4gdG8gc3VwcG9ydCBjb3JyZWN0IHNpZ25hbAorICogZ2FwcyBhbmQgbm93IG1haW50YWlucyBhIGRlbGF5IGJ1ZmZlciwgd2hpY2ggaXMgdXNlZCB0byBwcmVzZW50CisgKiBjb25zaXN0ZW50IHRpbWluZyBiZWhhdmlvdXIgdG8gdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMuIFdpdGhvdXQgdGhlCisgKiBkZWxheSBidWZmZXIgYW4gdWdseSBoYWNrIHdvdWxkIGJlIHJlcXVpcmVkIGluIGxpcmNkLCB3aGljaCBjYW4KKyAqIGNhdXNlIHNsdWdnaXNoIHNpZ25hbCBkZWNvZGluZyBpbiBjZXJ0YWluIHNpdHVhdGlvbnMuCisgKgorICogUG9ydGVkIHRvIGluLWtlcm5lbCBpci1jb3JlIGludGVyZmFjZSBieSBKYXJvZCBXaWxzb24KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgVVNCIHNrZWxldG9uIGRyaXZlciBwYWNrYWdlZCB3aXRoIHRoZQorICoga2VybmVsOyBjb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxtZWRpYS9pci1jb3JlLmg+CisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuNjAiCisjZGVmaW5lIERSSVZFUl9OQU1FCSJzdHJlYW16YXAiCisjZGVmaW5lIERSSVZFUl9ERVNDCSJTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyIgorCisjaWZkZWYgQ09ORklHX1VTQl9ERUJVRworc3RhdGljIGludCBkZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBkZWJ1ZzsKKyNlbmRpZgorCisjZGVmaW5lIFVTQl9TVFJFQU1aQVBfVkVORE9SX0lECQkweDBlOWMKKyNkZWZpbmUgVVNCX1NUUkVBTVpBUF9QUk9EVUNUX0lECTB4MDAwMAorCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RyZWFtemFwX3RhYmxlW10gPSB7CisJLyogU3RyZWFtemFwIFJlbW90ZSBDb250cm9sICovCisJeyBVU0JfREVWSUNFKFVTQl9TVFJFQU1aQVBfVkVORE9SX0lELCBVU0JfU1RSRUFNWkFQX1BST0RVQ1RfSUQpIH0sCisJLyogVGVybWluYXRpbmcgZW50cnkgKi8KKwl7IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdHJlYW16YXBfdGFibGUpOworCisjZGVmaW5lIFNUUkVBTVpBUF9QVUxTRV9NQVNLIDB4ZjAKKyNkZWZpbmUgU1RSRUFNWkFQX1NQQUNFX01BU0sgMHgwZgorI2RlZmluZSBTVFJFQU1aQVBfVElNRU9VVCAgICAweGZmCisjZGVmaW5lIFNUUkVBTVpBUF9SRVNPTFVUSU9OIDI1NgorCisvKiBudW1iZXIgb2Ygc2FtcGxlcyBidWZmZXJlZCAqLworI2RlZmluZSBTWl9CVUZfTEVOIDEyOAorCitlbnVtIFN0cmVhbXphcERlY29kZXJTdGF0ZSB7CisJUHVsc2VTcGFjZSwKKwlGdWxsUHVsc2UsCisJRnVsbFNwYWNlLAorCUlnbm9yZVB1bHNlCit9OworCisvKiBzdHJ1Y3R1cmUgdG8gaG9sZCBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3Qgc3RyZWFtemFwX2lyIHsKKworCS8qIGlyLWNvcmUgKi8KKwlzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wczsKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHJhd2lyOworCisJLyogY29yZSBkZXZpY2UgaW5mbyAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCisJLyogdXNiICovCisJc3RydWN0IHVzYl9kZXZpY2UJKnVzYmRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJc3RydWN0IHVyYgkJKnVyYl9pbjsKKworCS8qIGJ1ZmZlciAmIGRtYSAqLworCXVuc2lnbmVkIGNoYXIJCSpidWZfaW47CisJZG1hX2FkZHJfdAkJZG1hX2luOworCXVuc2lnbmVkIGludAkJYnVmX2luX2xlbjsKKworCS8qIHRpbWVyIHVzZWQgdG8gc3VwcG9ydCBkZWxheSBidWZmZXJpbmcgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAlkZWxheV90aW1lcjsKKwlib29sCQkJdGltZXJfcnVubmluZzsKKwlzcGlubG9ja190CQl0aW1lcl9sb2NrOworCXN0cnVjdCB0aW1lcl9saXN0CWZsdXNoX3RpbWVyOworCWJvb2wJCQlmbHVzaDsKKworCS8qIGRlbGF5IGJ1ZmZlciAqLworCXN0cnVjdCBrZmlmbyBmaWZvOworCWJvb2wgZmlmb19pbml0aWFsaXplZDsKKworCS8qIHRyYWNrIHdoYXQgc3RhdGUgd2UncmUgaW4gKi8KKwllbnVtIFN0cmVhbXphcERlY29kZXJTdGF0ZSBkZWNvZGVyX3N0YXRlOworCS8qIHRyYWNrcyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgcmVjZWl2aW5nIHNvbWUgc2lnbmFsICovCisJYm9vbAkJCWlkbGU7CisJLyogc3VtIG9mIHNpZ25hbCBsZW5ndGhzIHJlY2VpdmVkIHNpbmNlIHNpZ25hbCBzdGFydCAqLworCXVuc2lnbmVkIGxvbmcJCXN1bTsKKwkvKiBzdGFydCB0aW1lIG9mIHNpZ25hbDsgbmVjZXNzYXJ5IGZvciBnYXAgdHJhY2tpbmcgKi8KKwlzdHJ1Y3QgdGltZXZhbAkJc2lnbmFsX2xhc3Q7CisJc3RydWN0IHRpbWV2YWwJCXNpZ25hbF9zdGFydDsKKwkvKiBib29sCQkJdGltZW91dF9lbmFibGVkOyAqLworCisJY2hhcgkJCW5hbWVbMTI4XTsKKwljaGFyCQkJcGh5c1s2NF07Cit9OworCisKKy8qIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKKy8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzdHJlYW16YXBfZHJpdmVyID0geworCS5uYW1lID0JCURSSVZFUl9OQU1FLAorCS5wcm9iZSA9CXN0cmVhbXphcF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXN0cmVhbXphcF9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0Jc3RyZWFtemFwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXN0cmVhbXphcF9yZXN1bWUsCisJLmlkX3RhYmxlID0Jc3RyZWFtemFwX3RhYmxlLAorfTsKKworc3RhdGljIHZvaWQgc3RyZWFtemFwX3N0b3BfdGltZXIoc3RydWN0IHN0cmVhbXphcF9pciAqc3opCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCWlmIChzei0+dGltZXJfcnVubmluZykgeworCQlzei0+dGltZXJfcnVubmluZyA9IGZhbHNlOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCQlkZWxfdGltZXJfc3luYygmc3otPmRlbGF5X3RpbWVyKTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc3RyZWFtemFwX2ZsdXNoX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN0cmVhbXphcF9pciAqc3ogPSAoc3RydWN0IHN0cmVhbXphcF9pciAqKWFyZzsKKworCWRldl9pbmZvKHN6LT5kZXYsICIlczogY2FsbGJhY2sgZmlyaW5nXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBmaW5hbGx5IHN0YXJ0IGFjY2VwdGluZyBkYXRhICovCisJc3otPmZsdXNoID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVhbXphcF9kZWxheV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6ID0gKHN0cnVjdCBzdHJlYW16YXBfaXIgKilhcmc7CisJc3RydWN0IGlyX3Jhd19ldmVudCByYXdpciA9IHsgLnB1bHNlID0gZmFsc2UsIC5kdXJhdGlvbiA9IDAgfTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBsZW4sIHJldDsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWxheTsKKwlib29sIHdha2UgPSBmYWxzZTsKKworCS8qIGRlbGl2ZXIgZGF0YSBldmVyeSAxMCBtcyAqLworCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcygxMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChrZmlmb19sZW4oJnN6LT5maWZvKSA+IDApIHsKKwkJcmV0ID0ga2ZpZm9fb3V0KCZzei0+ZmlmbywgJnJhd2lyLCBzaXplb2YocmF3aXIpKTsKKwkJaWYgKHJldCAhPSBzaXplb2YocmF3aXIpKQorCQkJZGV2X2Vycihzei0+ZGV2LCAiUHJvYmxlbSB3L2tmaWZvX291dC4uLlxuIik7CisJCWlyX3Jhd19ldmVudF9zdG9yZShzei0+aWRldiwgJnJhd2lyKTsKKwkJd2FrZSA9IHRydWU7CisJfQorCisJbGVuID0ga2ZpZm9fbGVuKCZzei0+Zmlmbyk7CisJaWYgKGxlbiA+IDApIHsKKwkJd2hpbGUgKChsZW4gPCBTWl9CVUZfTEVOIC8gMikgJiYKKwkJICAgICAgIChsZW4gPCBTWl9CVUZfTEVOICogc2l6ZW9mKGludCkpKSB7CisJCQlyZXQgPSBrZmlmb19vdXQoJnN6LT5maWZvLCAmcmF3aXIsIHNpemVvZihyYXdpcikpOworCQkJaWYgKHJldCAhPSBzaXplb2YocmF3aXIpKQorCQkJCWRldl9lcnIoc3otPmRldiwgIlByb2JsZW0gdy9rZmlmb19vdXQuLi5cbiIpOworCQkJaXJfcmF3X2V2ZW50X3N0b3JlKHN6LT5pZGV2LCAmcmF3aXIpOworCQkJd2FrZSA9IHRydWU7CisJCQlsZW4gPSBrZmlmb19sZW4oJnN6LT5maWZvKTsKKwkJfQorCQlpZiAoc3otPnRpbWVyX3J1bm5pbmcpCisJCQltb2RfdGltZXIoJnN6LT5kZWxheV90aW1lciwgamlmZmllcyArIGRlbGF5KTsKKworCX0gZWxzZSB7CisJCXN6LT50aW1lcl9ydW5uaW5nID0gZmFsc2U7CisJfQorCisJaWYgKHdha2UpCisJCWlyX3Jhd19ldmVudF9oYW5kbGUoc3otPmlkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3RyZWFtemFwX2ZsdXNoX2RlbGF5X2J1ZmZlcihzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeikKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHJhd2lyID0geyAucHVsc2UgPSBmYWxzZSwgLmR1cmF0aW9uID0gMCB9OworCWJvb2wgd2FrZSA9IGZhbHNlOworCWludCByZXQ7CisKKwl3aGlsZSAoa2ZpZm9fbGVuKCZzei0+ZmlmbykgPiAwKSB7CisJCXJldCA9IGtmaWZvX291dCgmc3otPmZpZm8sICZyYXdpciwgc2l6ZW9mKHJhd2lyKSk7CisJCWlmIChyZXQgIT0gc2l6ZW9mKHJhd2lyKSkKKwkJCWRldl9lcnIoc3otPmRldiwgIlByb2JsZW0gdy9rZmlmb19vdXQuLi5cbiIpOworCQlpcl9yYXdfZXZlbnRfc3RvcmUoc3otPmlkZXYsICZyYXdpcik7CisJCXdha2UgPSB0cnVlOworCX0KKworCWlmICh3YWtlKQorCQlpcl9yYXdfZXZlbnRfaGFuZGxlKHN6LT5pZGV2KTsKK30KKworc3RhdGljIHZvaWQgc3pfcHVzaChzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeikKK3sKKwlzdHJ1Y3QgaXJfcmF3X2V2ZW50IHJhd2lyID0geyAucHVsc2UgPSBmYWxzZSwgLmR1cmF0aW9uID0gMCB9OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOworCWlmIChrZmlmb19sZW4oJnN6LT5maWZvKSA+PSBzaXplb2YoaW50KSAqIFNaX0JVRl9MRU4pIHsKKwkJcmV0ID0ga2ZpZm9fb3V0KCZzei0+ZmlmbywgJnJhd2lyLCBzaXplb2YocmF3aXIpKTsKKwkJaWYgKHJldCAhPSBzaXplb2YocmF3aXIpKQorCQkJZGV2X2Vycihzei0+ZGV2LCAiUHJvYmxlbSB3L2tmaWZvX291dC4uLlxuIik7CisJCWlyX3Jhd19ldmVudF9zdG9yZShzei0+aWRldiwgJnJhd2lyKTsKKwl9CisKKwlrZmlmb19pbigmc3otPmZpZm8sICZzei0+cmF3aXIsIHNpemVvZihyYXdpcikpOworCisJaWYgKCFzei0+dGltZXJfcnVubmluZykgeworCQlzei0+ZGVsYXlfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFogLyAxMCk7CisJCWFkZF90aW1lcigmc3otPmRlbGF5X3RpbWVyKTsKKwkJc3otPnRpbWVyX3J1bm5pbmcgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN6LT50aW1lcl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHN6X3B1c2hfZnVsbF9wdWxzZShzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCWlmIChzei0+aWRsZSkgeworCQlsb25nIGRlbHR2OworCisJCXN6LT5zaWduYWxfbGFzdCA9IHN6LT5zaWduYWxfc3RhcnQ7CisJCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CisKKwkJZGVsdHYgPSBzei0+c2lnbmFsX3N0YXJ0LnR2X3NlYyAtIHN6LT5zaWduYWxfbGFzdC50dl9zZWM7CisJCXN6LT5yYXdpci5wdWxzZSA9IGZhbHNlOworCQlpZiAoZGVsdHYgPiAxNSkgeworCQkJLyogcmVhbGx5IGxvbmcgdGltZSAqLworCQkJc3otPnJhd2lyLmR1cmF0aW9uID0gSVJfTUFYX0RVUkFUSU9OOworCQl9IGVsc2UgeworCQkJc3otPnJhd2lyLmR1cmF0aW9uID0gKGludCkoZGVsdHYgKiAxMDAwMDAwICsKKwkJCQlzei0+c2lnbmFsX3N0YXJ0LnR2X3VzZWMgLQorCQkJCXN6LT5zaWduYWxfbGFzdC50dl91c2VjKTsKKwkJCXN6LT5yYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOworCQkJc3otPnJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJCQlzei0+cmF3aXIuZHVyYXRpb24gJj0gSVJfTUFYX0RVUkFUSU9OOworCQl9CisJCWRldl9kYmcoc3otPmRldiwgImxzICV1XG4iLCBzei0+cmF3aXIuZHVyYXRpb24pOworCQlzel9wdXNoKHN6KTsKKworCQlzei0+aWRsZSA9IDA7CisJCXN6LT5zdW0gPSAwOworCX0KKworCXN6LT5yYXdpci5wdWxzZSA9IHRydWU7CisJc3otPnJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OOworCXN6LT5yYXdpci5kdXJhdGlvbiArPSBTVFJFQU1aQVBfUkVTT0xVVElPTiAvIDI7CisJc3otPnN1bSArPSBzei0+cmF3aXIuZHVyYXRpb247CisJc3otPnJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJc3otPnJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKKwlkZXZfZGJnKHN6LT5kZXYsICJwICV1XG4iLCBzei0+cmF3aXIuZHVyYXRpb24pOworCXN6X3B1c2goc3opOworfQorCitzdGF0aWMgdm9pZCBzel9wdXNoX2hhbGZfcHVsc2Uoc3RydWN0IHN0cmVhbXphcF9pciAqc3osCisJCQkgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZSkKK3sKKwlzel9wdXNoX2Z1bGxfcHVsc2Uoc3osICh2YWx1ZSAmIFNUUkVBTVpBUF9QVUxTRV9NQVNLKSA+PiA0KTsKK30KKworc3RhdGljIHZvaWQgc3pfcHVzaF9mdWxsX3NwYWNlKHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6LAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCit7CisJc3otPnJhd2lyLnB1bHNlID0gZmFsc2U7CisJc3otPnJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OOworCXN6LT5yYXdpci5kdXJhdGlvbiArPSBTVFJFQU1aQVBfUkVTT0xVVElPTiAvIDI7CisJc3otPnN1bSArPSBzei0+cmF3aXIuZHVyYXRpb247CisJc3otPnJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJZGV2X2RiZyhzei0+ZGV2LCAicyAldVxuIiwgc3otPnJhd2lyLmR1cmF0aW9uKTsKKwlzel9wdXNoKHN6KTsKK30KKworc3RhdGljIHZvaWQgc3pfcHVzaF9oYWxmX3NwYWNlKHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisJc3pfcHVzaF9mdWxsX3NwYWNlKHN6LCB2YWx1ZSAmIFNUUkVBTVpBUF9TUEFDRV9NQVNLKTsKK30KKworLyoqCisgKiBzdHJlYW16YXBfY2FsbGJhY2sgLSB1c2IgSVJRIGhhbmRsZXIgY2FsbGJhY2sKKyAqCisgKiBUaGlzIHByb2NlZHVyZSBpcyBpbnZva2VkIG9uIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20KKyAqIHRoZSB1c2IgcmVtb3RlLgorICovCitzdGF0aWMgdm9pZCBzdHJlYW16YXBfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6OworCXVuc2lnbmVkIGludCBpOworCWludCBsZW47CisJI2lmIDAKKwlzdGF0aWMgaW50IHRpbWVvdXQgPSAoKChTVFJFQU1aQVBfVElNRU9VVCAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OKSAmCisJCQkJSVJfTUFYX0RVUkFUSU9OKSB8IDB4MDMwMDAwMDApOworCSNlbmRpZgorCisJaWYgKCF1cmIpCisJCXJldHVybjsKKworCXN6ID0gdXJiLT5jb250ZXh0OworCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qCisJCSAqIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwLgorCQkgKiBzeiBtaWdodCBhbHJlYWR5IGJlIGludmFsaWQgYXQgdGhpcyBwb2ludAorCQkgKi8KKwkJZGV2X2Vycihzei0+ZGV2LCAidXJiIHRlcm1pbmF0ZWQsIHN0YXR1czogJWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWRldl9kYmcoc3otPmRldiwgIiVzOiByZWNlaXZlZCB1cmIsIGxlbiAlZFxuIiwgX19mdW5jX18sIGxlbik7CisJaWYgKCFzei0+Zmx1c2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSsrKSB7CisJCQlkZXZfZGJnKHN6LT5kZXYsICIlZDogJXhcbiIsIGksCisJCQkJKHVuc2lnbmVkIGNoYXIpc3otPmJ1Zl9pbltpXSk7CisJCQlzd2l0Y2ggKHN6LT5kZWNvZGVyX3N0YXRlKSB7CisJCQljYXNlIFB1bHNlU3BhY2U6CisJCQkJaWYgKChzei0+YnVmX2luW2ldICYgU1RSRUFNWkFQX1BVTFNFX01BU0spID09CisJCQkJICAgIFNUUkVBTVpBUF9QVUxTRV9NQVNLKSB7CisJCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gRnVsbFB1bHNlOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgaWYgKChzei0+YnVmX2luW2ldICYgU1RSRUFNWkFQX1NQQUNFX01BU0spCisJCQkJCSAgID09IFNUUkVBTVpBUF9TUEFDRV9NQVNLKSB7CisJCQkJCXN6X3B1c2hfaGFsZl9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gRnVsbFNwYWNlOworCQkJCQljb250aW51ZTsKKwkJCQl9IGVsc2UgeworCQkJCQlzel9wdXNoX2hhbGZfcHVsc2Uoc3osIHN6LT5idWZfaW5baV0pOworCQkJCQlzel9wdXNoX2hhbGZfc3BhY2Uoc3osIHN6LT5idWZfaW5baV0pOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgRnVsbFB1bHNlOgorCQkJCXN6X3B1c2hfZnVsbF9wdWxzZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBJZ25vcmVQdWxzZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRnVsbFNwYWNlOgorCQkJCWlmIChzei0+YnVmX2luW2ldID09IFNUUkVBTVpBUF9USU1FT1VUKSB7CisJCQkJCXN6LT5pZGxlID0gMTsKKwkJCQkJc3RyZWFtemFwX3N0b3BfdGltZXIoc3opOworCQkJCQkjaWYgMAorCQkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkgeworCQkJCQkJc3otPnJhd2lyLnB1bHNlID0gZmFsc2U7CisJCQkJCQlzei0+cmF3aXIuZHVyYXRpb24gPSB0aW1lb3V0OworCQkJCQkJc3otPnJhd2lyLmR1cmF0aW9uICo9IDEwMDA7CisJCQkJCQlzel9wdXNoKHN6KTsKKwkJCQkJfQorCQkJCQkjZW5kaWYKKwkJCQkJc3RyZWFtemFwX2ZsdXNoX2RlbGF5X2J1ZmZlcihzeik7CisJCQkJfSBlbHNlCisJCQkJCXN6X3B1c2hfZnVsbF9zcGFjZShzeiwgc3otPmJ1Zl9pbltpXSk7CisJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOworCQkJCWJyZWFrOworCQkJY2FzZSBJZ25vcmVQdWxzZToKKwkJCQlpZiAoKHN6LT5idWZfaW5baV0mU1RSRUFNWkFQX1NQQUNFX01BU0spID09CisJCQkJICAgIFNUUkVBTVpBUF9TUEFDRV9NQVNLKSB7CisJCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gRnVsbFNwYWNlOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3pfcHVzaF9oYWxmX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKKwkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqc3RyZWFtemFwX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBzdHJlYW16YXBfaXIgKnN6KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CisJc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gc3otPmRldjsKKwlpbnQgcmV0OworCisJaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaWRldikgeworCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpbnB1dCBkZXYgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGlkZXZfYWxsb2NfZmFpbGVkOworCX0KKworCXByb3BzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlyX2Rldl9wcm9wcyksIEdGUF9LRVJORUwpOworCWlmICghcHJvcHMpIHsKKwkJZGV2X2VycihkZXYsICJyZW1vdGUgaXIgZGV2IHByb3BzIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBwcm9wc19hbGxvY19mYWlsZWQ7CisJfQorCisJc25wcmludGYoc3otPm5hbWUsIHNpemVvZihzei0+bmFtZSksICJTdHJlYW16YXAgUEMgUmVtb3RlIEluZnJhcmVkICIKKwkJICJSZWNlaXZlciAoJTA0eDolMDR4KSIsCisJCSBsZTE2X3RvX2NwdShzei0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJIGxlMTZfdG9fY3B1KHN6LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CisKKwlpZGV2LT5uYW1lID0gc3otPm5hbWU7CisJdXNiX21ha2VfcGF0aChzei0+dXNiZGV2LCBzei0+cGh5cywgc2l6ZW9mKHN6LT5waHlzKSk7CisJc3RybGNhdChzei0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2Yoc3otPnBoeXMpKTsKKwlpZGV2LT5waHlzID0gc3otPnBoeXM7CisKKwlwcm9wcy0+cHJpdiA9IHN6OworCXByb3BzLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CisJLyogRklYTUU6IG5vdCBzdXJlIGFib3V0IHN1cHBvcnRlZCBwcm90b2NvbHMsIGNoZWNrIG9uIHRoaXMgKi8KKwlwcm9wcy0+YWxsb3dlZF9wcm90b3MgPSBJUl9UWVBFX1JDNSB8IElSX1RZUEVfUkM2OworCisJc3otPnByb3BzID0gcHJvcHM7CisKKwlyZXQgPSBpcl9pbnB1dF9yZWdpc3RlcihpZGV2LCBSQ19NQVBfUkM1X1NUUkVBTVpBUCwgcHJvcHMsIERSSVZFUl9OQU1FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgInJlbW90ZSBpbnB1dCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBpcmRldl9mYWlsZWQ7CisJfQorCisJcmV0dXJuIGlkZXY7CisKK2lyZGV2X2ZhaWxlZDoKKwlrZnJlZShwcm9wcyk7Citwcm9wc19hbGxvY19mYWlsZWQ6CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CitpZGV2X2FsbG9jX2ZhaWxlZDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzdHJlYW16YXBfZGVsYXlfYnVmX2luaXQoc3RydWN0IHN0cmVhbXphcF9pciAqc3opCit7CisJaW50IHJldDsKKworCXJldCA9IGtmaWZvX2FsbG9jKCZzei0+Zmlmbywgc2l6ZW9mKGludCkgKiBTWl9CVUZfTEVOLAorCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAocmV0ID09IDApCisJCXN6LT5maWZvX2luaXRpYWxpemVkID0gMTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmVhbXphcF9zdGFydF9mbHVzaF90aW1lcihzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeikKK3sKKwlzei0+Zmx1c2hfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwlzei0+Zmx1c2ggPSB0cnVlOworCWFkZF90aW1lcigmc3otPmZsdXNoX3RpbWVyKTsKKworCXN6LT51cmJfaW4tPmRldiA9IHN6LT51c2JkZXY7CisJaWYgKHVzYl9zdWJtaXRfdXJiKHN6LT51cmJfaW4sIEdGUF9BVE9NSUMpKQorCQlkZXZfZXJyKHN6LT5kZXYsICJ1cmIgc3VibWl0IGZhaWxlZFxuIik7Cit9CisKKy8qKgorICoJc3RyZWFtemFwX3Byb2JlCisgKgorICoJQ2FsbGVkIGJ5IHVzYi1jb3JlIHRvIGFzc29jaWF0ZWQgd2l0aCBhIGNhbmRpZGF0ZSBkZXZpY2UKKyAqCU9uIGFueSBmYWlsdXJlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIEVSUk9SCisgKglPbiBzdWNjZXNzIHJldHVybiAwCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHN0cmVhbXphcF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9ob3N0OworCXN0cnVjdCBzdHJlYW16YXBfaXIgKnN6ID0gTlVMTDsKKwljaGFyIGJ1Zls2M10sIG5hbWVbMTI4XSA9ICIiOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCWludCBwaXBlLCBtYXhwOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgZGF0YSAqLworCXN6ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0cmVhbXphcF9pciksIEdGUF9LRVJORUwpOworCWlmICghc3opCisJCXJldHVybiAtRU5PTUVNOworCisJc3otPnVzYmRldiA9IHVzYmRldjsKKwlzei0+aW50ZXJmYWNlID0gaW50ZjsKKworCS8qIENoZWNrIHRvIGVuc3VyZSBlbmRwb2ludCBpbmZvcm1hdGlvbiBtYXRjaGVzIHJlcXVpcmVtZW50cyAqLworCWlmYWNlX2hvc3QgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKworCWlmIChpZmFjZV9ob3N0LT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogVW5leHBlY3RlZCBkZXNjLmJOdW1FbmRwb2ludHMgKCVkKVxuIiwKKwkJCV9fZnVuY19fLCBpZmFjZV9ob3N0LT5kZXNjLmJOdW1FbmRwb2ludHMpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfc3o7CisJfQorCisJc3otPmVuZHBvaW50ID0gJihpZmFjZV9ob3N0LT5lbmRwb2ludFswXS5kZXNjKTsKKwlpZiAoKHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkgICAgIT0gVVNCX0RJUl9JTikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogZW5kcG9pbnQgZG9lc24ndCBtYXRjaCBpbnB1dCBkZXZpY2UgIgorCQkJIjAyJTAyeFxuIiwgX19mdW5jX18sIHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9zejsKKwl9CisKKwlpZiAoKHN6LT5lbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJICAgICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogZW5kcG9pbnQgYXR0cmlidXRlcyBkb24ndCBtYXRjaCB4ZmVyICIKKwkJCSIwMiUwMnhcbiIsIF9fZnVuY19fLCBzei0+ZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9zejsKKwl9CisKKwlwaXBlID0gdXNiX3JjdmludHBpcGUodXNiZGV2LCBzei0+ZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpOworCW1heHAgPSB1c2JfbWF4cGFja2V0KHVzYmRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCisJaWYgKG1heHAgPT0gMCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogZW5kcG9pbnQgTWF4IFBhY2tldCBTaXplIGlzIDAhPyFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9zejsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0aGUgVVNCIGJ1ZmZlciBhbmQgSVJRIFVSQiAqLworCXN6LT5idWZfaW4gPSB1c2JfYWxsb2NfY29oZXJlbnQodXNiZGV2LCBtYXhwLCBHRlBfQVRPTUlDLCAmc3otPmRtYV9pbik7CisJaWYgKCFzei0+YnVmX2luKQorCQlnb3RvIGZyZWVfc3o7CisKKwlzei0+dXJiX2luID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN6LT51cmJfaW4pCisJCWdvdG8gZnJlZV9idWZfaW47CisKKwlzei0+ZGV2ID0gJmludGYtPmRldjsKKwlzei0+YnVmX2luX2xlbiA9IG1heHA7CisKKwlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIKKwkgICAgJiYgdXNiX3N0cmluZyh1c2JkZXYsIHVzYmRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAorCQkJICBidWYsIHNpemVvZihidWYpKSA+IDApCisJCXN0cmxjcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkpOworCisJaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdAorCSAgICAmJiB1c2Jfc3RyaW5nKHVzYmRldiwgdXNiZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LAorCQkJICBidWYsIHNpemVvZihidWYpKSA+IDApCisJCXNucHJpbnRmKG5hbWUgKyBzdHJsZW4obmFtZSksIHNpemVvZihuYW1lKSAtIHN0cmxlbihuYW1lKSwKKwkJCSAiICVzIiwgYnVmKTsKKworCXJldHZhbCA9IHN0cmVhbXphcF9kZWxheV9idWZfaW5pdChzeik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogZGVsYXkgYnVmZmVyIGluaXQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZnJlZV91cmJfaW47CisJfQorCisJc3otPmlkZXYgPSBzdHJlYW16YXBfaW5pdF9pbnB1dF9kZXYoc3opOworCWlmICghc3otPmlkZXYpCisJCWdvdG8gaW5wdXRfZGV2X2ZhaWw7CisKKwlzei0+aWRsZSA9IHRydWU7CisJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOworCSNpZiAwCisJLyogbm90IHlldCBzdXBwb3J0ZWQsIGRlcGVuZHMgb24gcGF0Y2hlcyBmcm9tIG1heGltICovCisJLyogc2VlIGFsc286IExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OIGFuZCBMSVJDX1NFVF9SRUNfVElNRU9VVCAqLworCXN6LT50aW1lb3V0X2VuYWJsZWQgPSBmYWxzZTsKKwlzei0+bWluX3RpbWVvdXQgPSBTVFJFQU1aQVBfVElNRU9VVCAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OICogMTAwMDsKKwlzei0+bWF4X3RpbWVvdXQgPSBTVFJFQU1aQVBfVElNRU9VVCAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OICogMTAwMDsKKwkjZW5kaWYKKworCWluaXRfdGltZXIoJnN6LT5kZWxheV90aW1lcik7CisJc3otPmRlbGF5X3RpbWVyLmZ1bmN0aW9uID0gc3RyZWFtemFwX2RlbGF5X3RpbWVvdXQ7CisJc3otPmRlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzejsKKwlzcGluX2xvY2tfaW5pdCgmc3otPnRpbWVyX2xvY2spOworCisJaW5pdF90aW1lcigmc3otPmZsdXNoX3RpbWVyKTsKKwlzei0+Zmx1c2hfdGltZXIuZnVuY3Rpb24gPSBzdHJlYW16YXBfZmx1c2hfdGltZW91dDsKKwlzei0+Zmx1c2hfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXN6OworCisJZG9fZ2V0dGltZW9mZGF5KCZzei0+c2lnbmFsX3N0YXJ0KTsKKworCS8qIENvbXBsZXRlIGZpbmFsIGluaXRpYWxpc2F0aW9ucyAqLworCXVzYl9maWxsX2ludF91cmIoc3otPnVyYl9pbiwgdXNiZGV2LCBwaXBlLCBzei0+YnVmX2luLAorCQkJIG1heHAsICh1c2JfY29tcGxldGVfdClzdHJlYW16YXBfY2FsbGJhY2ssCisJCQkgc3osIHN6LT5lbmRwb2ludC0+YkludGVydmFsKTsKKwlzei0+dXJiX2luLT50cmFuc2Zlcl9kbWEgPSBzei0+ZG1hX2luOworCXN6LT51cmJfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBzeik7CisKKwlzdHJlYW16YXBfc3RhcnRfZmx1c2hfdGltZXIoc3opOworCisJZGV2X2luZm8oc3otPmRldiwgIlJlZ2lzdGVyZWQgJXMgb24gdXNiJWQ6JWRcbiIsIG5hbWUsCisJCSB1c2JkZXYtPmJ1cy0+YnVzbnVtLCB1c2JkZXYtPmRldm51bSk7CisKKwlyZXR1cm4gMDsKKworaW5wdXRfZGV2X2ZhaWw6CisJa2ZpZm9fZnJlZSgmc3otPmZpZm8pOworZnJlZV91cmJfaW46CisJdXNiX2ZyZWVfdXJiKHN6LT51cmJfaW4pOworZnJlZV9idWZfaW46CisJdXNiX2ZyZWVfY29oZXJlbnQodXNiZGV2LCBtYXhwLCBzei0+YnVmX2luLCBzei0+ZG1hX2luKTsKK2ZyZWVfc3o6CisJa2ZyZWUoc3opOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBzdHJlYW16YXBfZGlzY29ubmVjdAorICoKKyAqIENhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLgorICoKKyAqIFRoaXMgcm91dGluZSBndWFyYW50ZWVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIG5vdCBzdWJtaXQgYW55IG1vcmUgdXJicworICogYnkgY2xlYXJpbmcgZGV2LT51c2JkZXYuICBJdCBpcyBhbHNvIHN1cHBvc2VkIHRvIHRlcm1pbmF0ZSBhbnkgY3VycmVudGx5CisgKiBhY3RpdmUgdXJicy4gIFVuZm9ydHVuYXRlbHksIHVzYl9idWxrX21zZygpLCB1c2VkIGluIHN0cmVhbXphcF9yZWFkKCksCisgKiBkb2VzIG5vdCBwcm92aWRlIGFueSB3YXkgdG8gZG8gdGhpcy4KKyAqLworc3RhdGljIHZvaWQgc3RyZWFtemFwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJaWYgKCFzeikKKwkJcmV0dXJuOworCisJaWYgKHN6LT5mbHVzaCkgeworCQlzei0+Zmx1c2ggPSBmYWxzZTsKKwkJZGVsX3RpbWVyX3N5bmMoJnN6LT5mbHVzaF90aW1lcik7CisJfQorCisJc3RyZWFtemFwX3N0b3BfdGltZXIoc3opOworCisJc3otPnVzYmRldiA9IE5VTEw7CisJaXJfaW5wdXRfdW5yZWdpc3Rlcihzei0+aWRldik7CisJdXNiX2tpbGxfdXJiKHN6LT51cmJfaW4pOworCXVzYl9mcmVlX3VyYihzei0+dXJiX2luKTsKKwl1c2JfZnJlZV9jb2hlcmVudCh1c2JkZXYsIHN6LT5idWZfaW5fbGVuLCBzei0+YnVmX2luLCBzei0+ZG1hX2luKTsKKworCWtmcmVlKHN6KTsKK30KKworc3RhdGljIGludCBzdHJlYW16YXBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHN0cmVhbXphcF9pciAqc3ogPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJaWYgKHN6LT5mbHVzaCkgeworCQlzei0+Zmx1c2ggPSBmYWxzZTsKKwkJZGVsX3RpbWVyX3N5bmMoJnN6LT5mbHVzaF90aW1lcik7CisJfQorCisJc3RyZWFtemFwX3N0b3BfdGltZXIoc3opOworCisJdXNiX2tpbGxfdXJiKHN6LT51cmJfaW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3Qgc3RyZWFtemFwX2lyICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAoc3otPmZpZm9faW5pdGlhbGl6ZWQpCisJCWtmaWZvX3Jlc2V0KCZzei0+Zmlmbyk7CisKKwlzei0+Zmx1c2hfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKKwlzei0+Zmx1c2ggPSB0cnVlOworCWFkZF90aW1lcigmc3otPmZsdXNoX3RpbWVyKTsKKworCWlmICh1c2Jfc3VibWl0X3VyYihzei0+dXJiX2luLCBHRlBfQVRPTUlDKSkgeworCQlkZXZfZXJyKHN6LT5kZXYsICJFcnJvciBzdW1iaXRpbmcgdXJiXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJc3RyZWFtemFwX2luaXQKKyAqLworc3RhdGljIGludCBfX2luaXQgc3RyZWFtemFwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJldCA9IHVzYl9yZWdpc3Rlcigmc3RyZWFtemFwX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiB1c2IgcmVnaXN0ZXIgZmFpbGVkLCAiCisJCSAgICAgICAicmVzdWx0ID0gJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXN0cmVhbXphcF9leGl0CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBzdHJlYW16YXBfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzdHJlYW16YXBfZHJpdmVyKTsKK30KKworCittb2R1bGVfaW5pdChzdHJlYW16YXBfaW5pdCk7Cittb2R1bGVfZXhpdChzdHJlYW16YXBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkphcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwppbmRleCA0MDlhNDI2Li5iM2VkNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwpAQCAtMzQsNyArMzQsNyBAQAogbWVudWNvbmZpZyBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlib29sICJDdXN0b21pemUgYW5hbG9nIGFuZCBoeWJyaWQgdHVuZXIgbW9kdWxlcyB0byBidWlsZCIKIAlkZXBlbmRzIG9uIE1FRElBX1RVTkVSCi0JZGVmYXVsdCBuCisJZGVmYXVsdCB5IGlmIEVNQkVEREVECiAJaGVscAogCSAgVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZGVzZWxlY3QgdHVuZXIgZHJpdmVycyB1bm5lY2Vzc2FyeQogCSAgZm9yIHRoZWlyIGhhcmR3YXJlIGZyb20gdGhlIGJ1aWxkLiBVc2UgdGhpcyBvcHRpb24gd2l0aCBjYXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCmluZGV4IDI0OGEyYTkuLmNhYTRlMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdC5jCkBAIC0xNzYzLDcgKzE3NjMsMTUgQEAKIAkJLmZyZXF1ZW5jeV9taW4gPSAxMzcwMDAwMDAsCiAJCS5mcmVxdWVuY3lfbWF4ID0gODU4MDAwMDAwLAogCQkuZnJlcXVlbmN5X3N0ZXBzaXplID0gMTY2NjY3LAotCQkuY2FwcyA9IEZFX0NBTl9GRUNfQVVUTyB8IEZFX0NBTl9RQU1fQVVUTyB8IEZFX0NBTl9UUkFOU01JU1NJT05fTU9ERV9BVVRPIHwgRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8KKwkJLmNhcHMgPSBGRV9DQU5fRkVDX0FVVE8JCQl8CisJCQlGRV9DQU5fUUFNX0FVVE8JCQl8CisJCQlGRV9DQU5fUUFNXzE2CQkJfAorCQkJRkVfQ0FOX1FBTV8zMgkJCXwKKwkJCUZFX0NBTl9RQU1fNjQJCQl8CisJCQlGRV9DQU5fUUFNXzEyOAkJCXwKKwkJCUZFX0NBTl9RQU1fMjU2CQkJfAorCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8JfAorCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8KIAl9LAogCiAJLnJlbGVhc2UgPSBkc3RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYwppbmRleCA3NWFmZTRmLi43NDI0YjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCkBAIC0xOTQsOCArMTk0LDggQEAKIAogc3RhdGljIHZvaWQgaGFuZGxlX2ZjcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCiAJCSAgICAgICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwgaW50IGdlbmVyYXRpb24sCi0JCSAgICAgICBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCSAgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwKKwkJICAgICAgIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IGZpcmVkdHYgKmYsICpmZHR2ID0gTlVMTDsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDUxZDU3OGEuLmI1ZjZhMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIERWQl9GRV9DVVNUT01JU0UKIAlib29sICJDdXN0b21pc2UgdGhlIGZyb250ZW5kIG1vZHVsZXMgdG8gYnVpbGQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQotCWRlZmF1bHQgTgorCWRlZmF1bHQgeSBpZiBFTUJFRERFRAogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdC9kZXNlbGVjdCBmcm9udGVuZCBkcml2ZXJzIGZvciB0aGVpcgogCSAgaGFyZHdhcmUgZnJvbSB0aGUgYnVpbGQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKaW5kZXggN2YyYzk0YTEuLmQ5MzQ2OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTExMTMsOSArMTExMywxMSBAQAogCSAqLwogCiAJcHJlcGFyZV90b193YWl0KCZjb3JlZGV2LT5idWZmZXJfbW5nX3dhaXRxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCWlmIChsaXN0X2VtcHR5KCZjb3JlZGV2LT5idWZmZXJzKSkKKwlpZiAobGlzdF9lbXB0eSgmY29yZWRldi0+YnVmZmVycykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZWRldi0+YnVmZmVyc2xvY2ssIGZsYWdzKTsKIAkJc2NoZWR1bGUoKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmVkZXYtPmJ1ZmZlcnNsb2NrLCBmbGFncyk7CisJfQogCiAJZmluaXNoX3dhaXQoJmNvcmVkZXYtPmJ1ZmZlcl9tbmdfd2FpdHEsICZ3YWl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDJlMTU5MDMuLmY2ZTRkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTgzLDcgKzgzLDcgQEAKIAogY29uZmlnIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJYm9vbCAiQXV0b3NlbGVjdCBwZXJ0aW5lbnQgZW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcyIKLQlkZWZhdWx0IHkKKwlkZWZhdWx0IHkgaWYgIUVNQkVEREVECiAJLS0taGVscC0tLQogCSAgTW9zdCB2aWRlbyBjYXJkcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIG1vZHVsZXMgdG8gZW5jb2RlIG9yCiAJICBkZWNvZGUgYXVkaW8vdmlkZW8gc3RhbmRhcmRzLiBUaGlzIG9wdGlvbiB3aWxsIGF1dG9zZWxlY3QKQEAgLTc5MiwxMCArNzkyLDExIEBACiAJICBhbmQgY29sb3VyIG1vZGVscy4KIAogY29uZmlnIFNPQ19DQU1FUkFfTVQ5TTExMQotCXRyaXN0YXRlICJtdDltMTExIGFuZCBtdDltMTEyIHN1cHBvcnQiCisJdHJpc3RhdGUgIm10OW0xMTEsIG10OW0xMTIgYW5kIG10OW0xMzEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNPQ19DQU1FUkEgJiYgSTJDCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTVQ5TTExMSBhbmQgTVQ5TTExMiBjYW1lcmFzIGZyb20gTWljcm9uCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMTExLCBNVDlNMTEyIGFuZCBNVDlNMTMxIGNhbWVyYXMgZnJvbQorCSAgTWljcm9uL0FwdGluYQogCiBjb25maWcgU09DX0NBTUVSQV9NVDlUMDMxCiAJdHJpc3RhdGUgIm10OXQwMzEgc3VwcG9ydCIKQEAgLTEwMTYsNCArMTAxNywxMyBAQAogCSAgVGhpcyBpcyBhIHZpcnR1YWwgdGVzdCBkZXZpY2UgZm9yIHRoZSBtZW1vcnktdG8tbWVtb3J5IGRyaXZlcgogCSAgZnJhbWV3b3JrLgogCitjb25maWcgIFZJREVPX1NBTVNVTkdfUzVQX0ZJTUMKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTNVAgRklNQyAodmlkZW8gcG9zdHByb2Nlc3NvcikgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgUExBVF9TNVAKKwlzZWxlY3QgVklERU9CVUZfRE1BX0NPTlRJRworCXNlbGVjdCBWNEwyX01FTTJNRU1fREVWCisJaGVscAorCSAgVGhpcyBpcyBhIHY0bDIgZHJpdmVyIGZvciB0aGUgUzVQIGNhbWVyYSBpbnRlcmZhY2UKKwkgICh2aWRlbyBwb3N0cHJvY2Vzc29yKQorCiBlbmRpZiAjIFY0TF9NRU0yTUVNX0RSSVZFUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDEwNTFlY2M2Li40MGY5OGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTExLDcgKzExLDcgQEAKIG9tYXAyY2FtLW9ianMJOj0Jb21hcDI0eHhjYW0ubyBvbWFwMjR4eGNhbS1kbWEubwogCiB2aWRlb2Rldi1vYmpzCTo9CXY0bDItZGV2Lm8gdjRsMi1pb2N0bC5vIHY0bDItZGV2aWNlLm8gdjRsMi1maC5vIFwKLQkJCXY0bDItZXZlbnQubworCQkJdjRsMi1ldmVudC5vIHY0bDItY3RybHMubwogCiAjIFY0TDIgY29yZSBtb2R1bGVzCiAKQEAgLTE2Myw2ICsxNjMsNyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1BYQTI3eCkJCSs9IHB4YV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX1NIX01PQklMRV9DU0kyKQkrPSBzaF9tb2JpbGVfY3NpMi5vCiBvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSkJKz0gc2hfbW9iaWxlX2NldV9jYW1lcmEubworb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0ZJTUMpIAkrPSBzNXAtZmltYy8KIAogb2JqLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJCSs9IGRhdmluY2kvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYwppbmRleCAzY2MxMzVhLi5jYzllODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCkBAIC0yNiwxMCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiaTJjIGRldmljZSBkcml2ZXIgZm9yIGNzNTNsMzJhIEF1ZGlvIEFEQyIpOwpAQCAtNDMsNiArNDMsMjEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbWVzc2FnZXMsIDA9T2ZmIChkZWZhdWx0KSwgMT1PbiIpOwogCiAKK3N0cnVjdCBjczUzbDMyYV9zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjczUzbDMyYV9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgY3M1M2wzMmFfc3RhdGUsIHNkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IGNzNTNsMzJhX3N0YXRlLCBoZGwpLT5zZDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBjczUzbDMyYV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQpAQCAtNzQsMzEgKzg5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M1M2wzMmFfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGNzNTNsMzJhX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQogewotCWlmIChjdHJsLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7Ci0JCWN0cmwtPnZhbHVlID0gKGNzNTNsMzJhX3JlYWQoc2QsIDB4MDMpICYgMHhjMCkgIT0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19WT0xVTUUpCi0JCXJldHVybiAtRUlOVkFMOwotCWN0cmwtPnZhbHVlID0gKHM4KWNzNTNsMzJhX3JlYWQoc2QsIDB4MDQpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAotc3RhdGljIGludCBjczUzbDMyYV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgewotCQljczUzbDMyYV93cml0ZShzZCwgMHgwMywgY3RybC0+dmFsdWUgPyAweGYwIDogMHgzMCk7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDMsIGN0cmwtPnZhbCA/IDB4ZjAgOiAweDMwKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWNzNTNsMzJhX3dyaXRlKHNkLCAweDA0LCAodTgpY3RybC0+dmFsKTsKKwkJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDUsICh1OCljdHJsLT52YWwpOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGN0cmwtPmlkICE9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGN0cmwtPnZhbHVlID4gMTIgfHwgY3RybC0+dmFsdWUgPCAtOTYpCi0JCXJldHVybiAtRUlOVkFMOwotCWNzNTNsMzJhX3dyaXRlKHNkLCAweDA0LCAodTgpIGN0cmwtPnZhbHVlKTsKLQljczUzbDMyYV93cml0ZShzZCwgMHgwNSwgKHU4KSBjdHJsLT52YWx1ZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgY3M1M2wzMmFfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQpAQCAtMTExLDIzICsxMTUsMzAgQEAKIAogc3RhdGljIGludCBjczUzbDMyYV9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CisJc3RydWN0IGNzNTNsMzJhX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAl1OCB2ID0gY3M1M2wzMmFfcmVhZChzZCwgMHgwMSk7Ci0JdTggbSA9IGNzNTNsMzJhX3JlYWQoc2QsIDB4MDMpOwotCXM4IHZvbCA9IGNzNTNsMzJhX3JlYWQoc2QsIDB4MDQpOwogCi0JdjRsMl9pbmZvKHNkLCAiSW5wdXQ6ICAlZCVzXG4iLCAodiA+PiA0KSAmIDMsCi0JCQkobSAmIDB4QzApID8gIiAobXV0ZWQpIiA6ICIiKTsKLQl2NGwyX2luZm8oc2QsICJWb2x1bWU6ICVkIGRCXG4iLCB2b2wpOworCXY0bDJfaW5mbyhzZCwgIklucHV0OiAgJWRcbiIsICh2ID4+IDQpICYgMyk7CisJdjRsMl9jdHJsX2hhbmRsZXJfbG9nX3N0YXR1cygmc3RhdGUtPmhkbCwgc2QtPm5hbWUpOwogCXJldHVybiAwOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgY3M1M2wzMmFfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IGNzNTNsMzJhX3NfY3RybCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3M1M2wzMmFfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSBjczUzbDMyYV9sb2dfc3RhdHVzLAogCS5nX2NoaXBfaWRlbnQgPSBjczUzbDMyYV9nX2NoaXBfaWRlbnQsCi0JLmdfY3RybCA9IGNzNTNsMzJhX2dfY3RybCwKLQkuc19jdHJsID0gY3M1M2wzMmFfc19jdHJsLAorCS5nX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X2dfZXh0X2N0cmxzLAorCS50cnlfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfdHJ5X2V4dF9jdHJscywKKwkuc19leHRfY3RybHMgPSB2NGwyX3N1YmRldl9zX2V4dF9jdHJscywKKwkuZ19jdHJsID0gdjRsMl9zdWJkZXZfZ19jdHJsLAorCS5zX2N0cmwgPSB2NGwyX3N1YmRldl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHY0bDJfc3ViZGV2X3F1ZXJ5Y3RybCwKKwkucXVlcnltZW51ID0gdjRsMl9zdWJkZXZfcXVlcnltZW51LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgY3M1M2wzMmFfYXVkaW9fb3BzID0gewpAQCAtMTUxLDYgKzE2Miw3IEBACiBzdGF0aWMgaW50IGNzNTNsMzJhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgY3M1M2wzMmFfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJaW50IGk7CiAKQEAgLTE2NCw5ICsxNzYsMTAgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwotCWlmIChzZCA9PSBOVUxMKQorCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNzNTNsMzJhX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnN0YXRlLT5zZDsKIAl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmY3M1M2wzMmFfb3BzKTsKIAogCWZvciAoaSA9IDE7IGkgPD0gNzsgaSsrKSB7CkBAIC0xNzUsMTUgKzE4OCwyOSBAQAogCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJSZWFkIFJlZyAlZCAlMDJ4XG4iLCBpLCB2KTsKIAl9CiAKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZzdGF0ZS0+aGRsLCAyKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJmNzNTNsMzJhX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fVk9MVU1FLCAtOTYsIDEyLCAxLCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJmNzNTNsMzJhX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fTVVURSwgMCwgMSwgMSwgMCk7CisJc2QtPmN0cmxfaGFuZGxlciA9ICZzdGF0ZS0+aGRsOworCWlmIChzdGF0ZS0+aGRsLmVycm9yKSB7CisJCWludCBlcnIgPSBzdGF0ZS0+aGRsLmVycm9yOworCisJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnN0YXRlLT5oZGwpOworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBlcnI7CisJfQorCiAJLyogU2V0IGNzNTNsMzJhIGludGVybmFsIHJlZ2lzdGVyIGZvciBBZGFwdGVjIDIwMTAvMjQxMCBzZXR1cCAqLwogCi0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDEsICh1OCkgMHgyMSk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDIsICh1OCkgMHgyOSk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDMsICh1OCkgMHgzMCk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDQsICh1OCkgMHgwMCk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDUsICh1OCkgMHgwMCk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDYsICh1OCkgMHgwMCk7Ci0JY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDcsICh1OCkgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDEsIDB4MjEpOworCWNzNTNsMzJhX3dyaXRlKHNkLCAweDAyLCAweDI5KTsKKwljczUzbDMyYV93cml0ZShzZCwgMHgwMywgMHgzMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDQsIDB4MDApOworCWNzNTNsMzJhX3dyaXRlKHNkLCAweDA1LCAweDAwKTsKKwljczUzbDMyYV93cml0ZShzZCwgMHgwNiwgMHgwMCk7CisJY3M1M2wzMmFfd3JpdGUoc2QsIDB4MDcsIDB4MDApOwogCiAJLyogRGlzcGxheSByZXN1bHRzLCBzaG91bGQgYmUgMHgyMSwweDI5LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCAqLwogCkBAIC0xOTgsOSArMjI1LDExIEBACiBzdGF0aWMgaW50IGNzNTNsMzJhX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3M1M2wzMmFfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmcmVlKHNkKTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZzdGF0ZS0+aGRsKTsKKwlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKaW5kZXggMmJmNDRlZi4uZTVjM2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMKQEAgLTM4LDYgKzM4LDE0NSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqIENPTU1PTiBDT0RFICoqKioqKioqKioqKioqKioqKioqKi8KKworLyogZGVmaW5pdGlvbnMgZm9yIGF1ZGlvIHByb3BlcnRpZXMgYml0cyAyOS0yOCAqLworI2RlZmluZSBDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9NUEVHCTAKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzCTEKKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTFBDTQkyCisKK3N0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X2dldF9uYW1lKHUzMiBpZCkKK3sKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERToKKwkJcmV0dXJuICJTcGF0aWFsIEZpbHRlciBNb2RlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUjoKKwkJcmV0dXJuICJTcGF0aWFsIEZpbHRlciI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgorCQlyZXR1cm4gIlNwYXRpYWwgTHVtYSBGaWx0ZXIgVHlwZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEU6CisJCXJldHVybiAiU3BhdGlhbCBDaHJvbWEgRmlsdGVyIFR5cGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFOgorCQlyZXR1cm4gIlRlbXBvcmFsIEZpbHRlciBNb2RlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVI6CisJCXJldHVybiAiVGVtcG9yYWwgRmlsdGVyIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEU6CisJCXJldHVybiAiTWVkaWFuIEZpbHRlciBUeXBlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QOgorCQlyZXR1cm4gIk1lZGlhbiBMdW1hIEZpbHRlciBNYXhpbXVtIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfQk9UVE9NOgorCQlyZXR1cm4gIk1lZGlhbiBMdW1hIEZpbHRlciBNaW5pbXVtIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1A6CisJCXJldHVybiAiTWVkaWFuIENocm9tYSBGaWx0ZXIgTWF4aW11bSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NOgorCQlyZXR1cm4gIk1lZGlhbiBDaHJvbWEgRmlsdGVyIE1pbmltdW0iOworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1NUUkVBTV9JTlNFUlRfTkFWX1BBQ0tFVFM6CisJCXJldHVybiAiSW5zZXJ0IE5hdmlnYXRpb24gUGFja2V0cyI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqKmN4MjM0MXhfZ2V0X21lbnUodTMyIGlkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGVfbWVudVtdID0geworCQkiTWFudWFsIiwKKwkJIkF1dG8iLAorCQlOVUxMCisJfTsKKworCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZV9tZW51W10gPSB7CisJCSJPZmYiLAorCQkiMUQgSG9yaXpvbnRhbCIsCisJCSIxRCBWZXJ0aWNhbCIsCisJCSIyRCBIL1YgU2VwYXJhYmxlIiwKKwkJIjJEIFN5bW1ldHJpYyBub24tc2VwYXJhYmxlIiwKKwkJTlVMTAorCX07CisKKwlzdGF0aWMgY29uc3QgY2hhciAqY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZV9tZW51W10gPSB7CisJCSJPZmYiLAorCQkiMUQgSG9yaXpvbnRhbCIsCisJCU5VTEwKKwl9OworCisJc3RhdGljIGNvbnN0IGNoYXIgKmN4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGVfbWVudVtdID0geworCQkiTWFudWFsIiwKKwkJIkF1dG8iLAorCQlOVUxMCisJfTsKKworCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZV9tZW51W10gPSB7CisJCSJPZmYiLAorCQkiSG9yaXpvbnRhbCIsCisJCSJWZXJ0aWNhbCIsCisJCSJIb3Jpem9udGFsL1ZlcnRpY2FsIiwKKwkJIkRpYWdvbmFsIiwKKwkJTlVMTAorCX07CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERToKKwkJcmV0dXJuIGN4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZV9tZW51OworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRToKKwkJcmV0dXJuIGN4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlX21lbnU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEU6CisJCXJldHVybiBjeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlX21lbnU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREU6CisJCXJldHVybiBjeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlX21lbnU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFOgorCQlyZXR1cm4gY3gyMzQxeF92aWRlb19tZWRpYW5fZmlsdGVyX3R5cGVfbWVudTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGN4MjM0MXhfY3RybF9maWxsKHUzMiBpZCwgY29uc3QgY2hhciAqKm5hbWUsIGVudW0gdjRsMl9jdHJsX3R5cGUgKnR5cGUsCisJCSAgICBzMzIgKm1pbiwgczMyICptYXgsIHMzMiAqc3RlcCwgczMyICpkZWYsIHUzMiAqZmxhZ3MpCit7CisJKm5hbWUgPSBjeDIzNDF4X2dldF9uYW1lKGlkKTsKKwkqZmxhZ3MgPSAwOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRToKKwkJKnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOworCQkqbWluID0gMDsKKwkJKnN0ZXAgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9TVFJFQU1fSU5TRVJUX05BVl9QQUNLRVRTOgorCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CisJCSptaW4gPSAwOworCQkqbWF4ID0gKnN0ZXAgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEU6CisJCSpmbGFncyB8PSBWNEwyX0NUUkxfRkxBR19VUERBVEU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUjoKKwljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9CT1RUT006CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfVE9QOgorCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTToKKwkJKmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZOworCQlicmVhazsKKwl9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKiogT0xEIENPREUgKioqKioqKioqKioqKioqKioqKioqLworCiAvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBjb25zdCB1MzIgY3gyMzQxeF9tcGVnX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfTVBFR19DTEFTUywKQEAgLTEzNCw4ICsyNzMsNiBAQAogCS52aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl90b3AgPSAyNTUsCiAJLnZpZGVvX2Nocm9tYV9tZWRpYW5fZmlsdGVyX2JvdHRvbSA9IDAsCiB9OwotCi0KIC8qIE1hcCB0aGUgY29udHJvbCBJRCB0byB0aGUgY29ycmVjdCBmaWVsZCBpbiB0aGUgY3gyMzQxeF9tcGVnX3BhcmFtcwogICAgc3RydWN0LiBSZXR1cm4gLUVJTlZBTCBpZiB0aGUgSUQgaXMgdW5rbm93biwgZWxzZSByZXR1cm4gMC4gKi8KIHN0YXRpYyBpbnQgY3gyMzQxeF9nZXRfY3RybChjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLApAQCAtNDE1LDgzICs1NTIsMzMgQEAKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCi0JcWN0cmwtPmZsYWdzID0gMDsKIAlzd2l0Y2ggKHFjdHJsLT5pZCkgewogCS8qIE1QRUcgY29udHJvbHMgKi8KIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFOgotCQluYW1lID0gIlNwYXRpYWwgRmlsdGVyIE1vZGUiOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUjoKLQkJbmFtZSA9ICJTcGF0aWFsIEZpbHRlciI7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRToKLQkJbmFtZSA9ICJTcGF0aWFsIEx1bWEgRmlsdGVyIFR5cGUiOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRToKLQkJbmFtZSA9ICJTcGF0aWFsIENocm9tYSBGaWx0ZXIgVHlwZSI7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFOgotCQluYW1lID0gIlRlbXBvcmFsIEZpbHRlciBNb2RlIjsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSOgotCQluYW1lID0gIlRlbXBvcmFsIEZpbHRlciI7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRToKLQkJbmFtZSA9ICJNZWRpYW4gRmlsdGVyIFR5cGUiOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QOgotCQluYW1lID0gIk1lZGlhbiBMdW1hIEZpbHRlciBNYXhpbXVtIjsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX0JPVFRPTToKLQkJbmFtZSA9ICJNZWRpYW4gTHVtYSBGaWx0ZXIgTWluaW11bSI7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUDoKLQkJbmFtZSA9ICJNZWRpYW4gQ2hyb21hIEZpbHRlciBNYXhpbXVtIjsKLQkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NOgotCQluYW1lID0gIk1lZGlhbiBDaHJvbWEgRmlsdGVyIE1pbmltdW0iOwotCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9TVFJFQU1fSU5TRVJUX05BVl9QQUNLRVRTOgotCQluYW1lID0gIkluc2VydCBOYXZpZ2F0aW9uIFBhY2tldHMiOwotCQlicmVhazsKKwkJY3gyMzQxeF9jdHJsX2ZpbGwocWN0cmwtPmlkLCAmbmFtZSwgJnFjdHJsLT50eXBlLAorCQkJCSZtaW4sICZtYXgsICZzdGVwLCAmZGVmLCAmcWN0cmwtPmZsYWdzKTsKKwkJcWN0cmwtPm1pbmltdW0gPSBtaW47CisJCXFjdHJsLT5tYXhpbXVtID0gbWF4OworCQlxY3RybC0+c3RlcCA9IHN0ZXA7CisJCXFjdHJsLT5kZWZhdWx0X3ZhbHVlID0gZGVmOworCQlxY3RybC0+cmVzZXJ2ZWRbMF0gPSBxY3RybC0+cmVzZXJ2ZWRbMV0gPSAwOworCQlzdHJsY3B5KHFjdHJsLT5uYW1lLCBuYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpKTsKKwkJcmV0dXJuIDA7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIG1pbiwgbWF4LCBzdGVwLCBkZWYpOwogCX0KLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFOgotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRToKLQkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOwotCQltaW4gPSAwOwotCQlzdGVwID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfU1RSRUFNX0lOU0VSVF9OQVZfUEFDS0VUUzoKLQkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOwotCQltaW4gPSAwOwotCQltYXggPSAxOwotCQlzdGVwID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOwotCQlicmVhazsKLQl9Ci0Jc3dpdGNoIChxY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFOgotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFOgotCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRToKLQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1VQREFURTsKLQkJYnJlYWs7Ci0JfQotCXFjdHJsLT5taW5pbXVtID0gbWluOwotCXFjdHJsLT5tYXhpbXVtID0gbWF4OwotCXFjdHJsLT5zdGVwID0gc3RlcDsKLQlxY3RybC0+ZGVmYXVsdF92YWx1ZSA9IGRlZjsKLQlxY3RybC0+cmVzZXJ2ZWRbMF0gPSBxY3RybC0+cmVzZXJ2ZWRbMV0gPSAwOwotCXNucHJpbnRmKHFjdHJsLT5uYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpLCBuYW1lKTsKLQlyZXR1cm4gMDsKIH0KIAogaW50IGN4MjM0MXhfY3RybF9xdWVyeShjb25zdCBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLApAQCAtNzk3LDQyICs4ODQsNiBAQAogCQlOVUxMCiAJfTsKIAotCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGVfbWVudVtdID0gewotCQkiTWFudWFsIiwKLQkJIkF1dG8iLAotCQlOVUxMCi0JfTsKLQotCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZV9tZW51W10gPSB7Ci0JCSJPZmYiLAotCQkiMUQgSG9yaXpvbnRhbCIsCi0JCSIxRCBWZXJ0aWNhbCIsCi0JCSIyRCBIL1YgU2VwYXJhYmxlIiwKLQkJIjJEIFN5bW1ldHJpYyBub24tc2VwYXJhYmxlIiwKLQkJTlVMTAotCX07Ci0KLQlzdGF0aWMgY29uc3QgY2hhciAqY3gyMzQxeF92aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZV9tZW51W10gPSB7Ci0JCSJPZmYiLAotCQkiMUQgSG9yaXpvbnRhbCIsCi0JCU5VTEwKLQl9OwotCi0Jc3RhdGljIGNvbnN0IGNoYXIgKmN4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGVfbWVudVtdID0gewotCQkiTWFudWFsIiwKLQkJIkF1dG8iLAotCQlOVUxMCi0JfTsKLQotCXN0YXRpYyBjb25zdCBjaGFyICpjeDIzNDF4X3ZpZGVvX21lZGlhbl9maWx0ZXJfdHlwZV9tZW51W10gPSB7Ci0JCSJPZmYiLAotCQkiSG9yaXpvbnRhbCIsCi0JCSJWZXJ0aWNhbCIsCi0JCSJIb3Jpem9udGFsL1ZlcnRpY2FsIiwKLQkJIkRpYWdvbmFsIiwKLQkJTlVMTAotCX07Ci0KIAlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCQlyZXR1cm4gKHAtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19UUykgPwpAQCAtODQ0LDI2ICs4OTUsMTcgQEAKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKIAkJcmV0dXJuIE5VTEw7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERToKLQkJcmV0dXJuIGN4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZV9tZW51OwogCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRToKLQkJcmV0dXJuIGN4MjM0MXhfdmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlX21lbnU7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEU6Ci0JCXJldHVybiBjeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlX21lbnU7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREU6Ci0JCXJldHVybiBjeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlX21lbnU7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFOgotCQlyZXR1cm4gY3gyMzQxeF92aWRlb19tZWRpYW5fZmlsdGVyX3R5cGVfbWVudTsKKwkJcmV0dXJuIGN4MjM0MXhfZ2V0X21lbnUoaWQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGwyX2N0cmxfZ2V0X21lbnUoaWQpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF9jdHJsX2dldF9tZW51KTsKIAotLyogZGVmaW5pdGlvbnMgZm9yIGF1ZGlvIHByb3BlcnRpZXMgYml0cyAyOS0yOCAqLwotI2RlZmluZSBDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9NUEVHCTAKLSNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzCTEKLSNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTFBDTQkyCi0KIHN0YXRpYyB2b2lkIGN4MjM0MXhfY2FsY19hdWRpb19wcm9wZXJ0aWVzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwYXJhbXMpCiB7CiAJcGFyYW1zLT5hdWRpb19wcm9wZXJ0aWVzID0KQEAgLTExOTUsOSArMTIzNyw0OTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyMzQxeF9sb2dfc3RhdHVzKTsKIAotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KIAorCisvKioqKioqKioqKioqKioqKioqKioqKiBORVcgQ09ERSAqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqdG9fY3hoZGwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBjeDIzNDF4X2hhbmRsZXIsIGhkbCk7Cit9CisKK3N0YXRpYyBpbnQgY3gyMzQxeF9oZGxfYXBpKHN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmhkbCwKKwkJICAgICAgIHUzMiBjbWQsIGludCBhcmdzLCAuLi4pCit7CisJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKKwl2YV9saXN0IHZhcmdzOworCWludCBpOworCisJdmFfc3RhcnQodmFyZ3MsIGFyZ3MpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ3M7IGkrKykKKwkJZGF0YVtpXSA9IHZhX2FyZyh2YXJncywgaW50KTsKKwl2YV9lbmQodmFyZ3MpOworCXJldHVybiBoZGwtPmZ1bmMoaGRsLT5wcml2LCBjbWQsIGFyZ3MsIDAsIGRhdGEpOworfQorCisvKiBjdHJsLT5oYW5kbGVyLT5sb2NrIGlzIGhlbGQsIHNvIGl0IGlzIHNhZmUgdG8gYWNjZXNzIGN1ci52YWwgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGN4MjM0MXhfbmVxKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuIGN0cmwgJiYgY3RybC0+dmFsICE9IGN0cmwtPmN1ci52YWw7Cit9CisKK3N0YXRpYyBpbnQgY3gyMzQxeF90cnlfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmhkbCA9IHRvX2N4aGRsKGN0cmwpOworCXMzMiB2YWwgPSBjdHJsLT52YWw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiB7CisJCS8qIHZpZGVvIGdvcCBjbHVzdGVyICovCisJCWludCBiID0gdmFsICsgMTsKKwkJaW50IGdvcCA9IGhkbC0+dmlkZW9fZ29wX3NpemUtPnZhbDsKKworCQlnb3AgPSBiICogKChnb3AgKyBiIC0gMSkgLyBiKTsKKworCQkvKiBNYXggR09QIHNpemUgPSAzNCAqLworCQl3aGlsZSAoZ29wID4gMzQpCisJCQlnb3AgLT0gYjsKKwkJaGRsLT52aWRlb19nb3Bfc2l6ZS0+dmFsID0gZ29wOworCQlicmVhazsKKwl9CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCS8qIHN0cmVhbSB0eXBlIGNsdXN0ZXIgKi8KKwkJaGRsLT52aWRlb19lbmNvZGluZy0+dmFsID0KKwkJICAgIChoZGwtPnN0cmVhbV90eXBlLT52YWwgPT0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1NTIHx8CisJCSAgICAgaGRsLT5zdHJlYW1fdHlwZS0+dmFsID09IFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9WQ0QpID8KKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgOgorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMjsKKwkJaWYgKGhkbC0+dmlkZW9fZW5jb2RpbmctPnZhbCA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xKQorCQkJLyogTVBFRy0xIGltcGxpZXMgQ0JSICovCisJCQloZGwtPnZpZGVvX2JpdHJhdGVfbW9kZS0+dmFsID0KKwkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUjsKKwkJLyogcGVhayBiaXRyYXRlIHNoYWxsIGJlID49IG5vcm1hbCBiaXRyYXRlICovCisJCWlmIChoZGwtPnZpZGVvX2JpdHJhdGVfbW9kZS0+dmFsID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSICYmCisJCSAgICBoZGwtPnZpZGVvX2JpdHJhdGVfcGVhay0+dmFsIDwgaGRsLT52aWRlb19iaXRyYXRlLT52YWwpCisJCQloZGwtPnZpZGVvX2JpdHJhdGVfcGVhay0+dmFsID0gaGRsLT52aWRlb19iaXRyYXRlLT52YWw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDIzNDF4X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0YXRpYyBjb25zdCBpbnQgbXBlZ19zdHJlYW1fdHlwZVtdID0geworCQkwLAkvKiBNUEVHLTIgUFMgKi8KKwkJMSwJLyogTVBFRy0yIFRTICovCisJCTIsCS8qIE1QRUctMSBTUyAqLworCQkxNCwJLyogRFZEICovCisJCTExLAkvKiBWQ0QgKi8KKwkJMTIsCS8qIFNWQ0QgKi8KKwl9OworCXN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmhkbCA9IHRvX2N4aGRsKGN0cmwpOworCXMzMiB2YWwgPSBjdHJsLT52YWw7CisJdTMyIHByb3BzOworCWludCBlcnI7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgorCQlpZiAoaGRsLT5vcHMgJiYgaGRsLT5vcHMtPnNfc3RyZWFtX3ZiaV9mbXQpCisJCQlyZXR1cm4gaGRsLT5vcHMtPnNfc3RyZWFtX3ZiaV9mbXQoaGRsLCB2YWwpOworCQlyZXR1cm4gMDsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCXJldHVybiBjeDIzNDF4X2hkbF9hcGkoaGRsLAorCQkJQ1gyMzQxWF9FTkNfU0VUX0FTUEVDVF9SQVRJTywgMSwgdmFsICsgMSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CisJCXJldHVybiBjeDIzNDF4X2hkbF9hcGkoaGRsLCBDWDIzNDFYX0VOQ19TRVRfR09QX0NMT1NVUkUsIDEsIHZhbCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsIENYMjM0MVhfRU5DX01VVEVfQVVESU8sIDEsIHZhbCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjoKKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsCisJCQlDWDIzNDFYX0VOQ19TRVRfRlJBTUVfRFJPUF9SQVRFLCAxLCB2YWwpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfU1RSRUFNX0lOU0VSVF9OQVZfUEFDS0VUUzoKKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsIENYMjM0MVhfRU5DX01JU0MsIDIsIDcsIHZhbCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJLyogYXVkaW8gcHJvcGVydGllcyBjbHVzdGVyICovCisJCXByb3BzID0gKGhkbC0+YXVkaW9fc2FtcGxpbmdfZnJlcS0+dmFsIDw8IDApIHwKKwkJCShoZGwtPmF1ZGlvX21vZGUtPnZhbCA8PCA4KSB8CisJCQkoaGRsLT5hdWRpb19tb2RlX2V4dGVuc2lvbi0+dmFsIDw8IDEwKSB8CisJCQkoaGRsLT5hdWRpb19jcmMtPnZhbCA8PCAxNCk7CisJCWlmIChoZGwtPmF1ZGlvX2VtcGhhc2lzLT52YWwgPT0gVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNykKKwkJCXByb3BzIHw9IDMgPDwgMTI7CisJCWVsc2UKKwkJCXByb3BzIHw9IGhkbC0+YXVkaW9fZW1waGFzaXMtPnZhbCA8PCAxMjsKKworCQlpZiAoaGRsLT5hdWRpb19lbmNvZGluZy0+dmFsID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpIHsKKwkJCXByb3BzIHw9CisjaWYgMQorCQkJCS8qIE5vdCBzdXJlIGlmIHRoaXMgTVBFRyBMYXllciBJSSBzZXR0aW5nIGlzIHJlcXVpcmVkICovCisJCQkJKCgzIC0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpIDw8IDIpIHwKKyNlbmRpZgorCQkJCShoZGwtPmF1ZGlvX2FjM19iaXRyYXRlLT52YWwgPDwgNCkgfAorCQkJCShDWDIzNDFYX0FVRElPX0VOQ09ESU5HX01FVEhPRF9BQzMgPDwgMjgpOworCQl9IGVsc2UgeworCQkJLyogQXNzdW1pbmcgTVBFRyBMYXllciBJSSAqLworCQkJcHJvcHMgfD0KKwkJCQkoKDMgLSBoZGwtPmF1ZGlvX2VuY29kaW5nLT52YWwpIDw8IDIpIHwKKwkJCQkoKDEgKyBoZGwtPmF1ZGlvX2wyX2JpdHJhdGUtPnZhbCkgPDwgNCk7CisJCX0KKwkJZXJyID0gY3gyMzQxeF9oZGxfYXBpKGhkbCwKKwkJCQlDWDIzNDFYX0VOQ19TRVRfQVVESU9fUFJPUEVSVElFUywgMSwgcHJvcHMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQloZGwtPmF1ZGlvX3Byb3BlcnRpZXMgPSBwcm9wczsKKwkJaWYgKGhkbC0+YXVkaW9fYWMzX2JpdHJhdGUpIHsKKwkJCWludCBpc19hYzMgPSBoZGwtPmF1ZGlvX2VuY29kaW5nLT52YWwgPT0KKwkJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzM7CisKKwkJCXY0bDJfY3RybF9hY3RpdmF0ZShoZGwtPmF1ZGlvX2FjM19iaXRyYXRlLCBpc19hYzMpOworCQkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+YXVkaW9fbDJfYml0cmF0ZSwgIWlzX2FjMyk7CisJCX0KKwkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+YXVkaW9fbW9kZV9leHRlbnNpb24sCisJCQloZGwtPmF1ZGlvX21vZGUtPnZhbCA9PSBWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8pOworCQlpZiAoY3gyMzQxeF9uZXEoaGRsLT5hdWRpb19zYW1wbGluZ19mcmVxKSAmJgorCQkgICAgaGRsLT5vcHMgJiYgaGRsLT5vcHMtPnNfYXVkaW9fc2FtcGxpbmdfZnJlcSkKKwkJCXJldHVybiBoZGwtPm9wcy0+c19hdWRpb19zYW1wbGluZ19mcmVxKGhkbCwgaGRsLT5hdWRpb19zYW1wbGluZ19mcmVxLT52YWwpOworCQlpZiAoY3gyMzQxeF9uZXEoaGRsLT5hdWRpb19tb2RlKSAmJgorCQkgICAgaGRsLT5vcHMgJiYgaGRsLT5vcHMtPnNfYXVkaW9fbW9kZSkKKwkJCXJldHVybiBoZGwtPm9wcy0+c19hdWRpb19tb2RlKGhkbCwgaGRsLT5hdWRpb19tb2RlLT52YWwpOworCQlyZXR1cm4gMDsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoKKwkJLyogdmlkZW8gZ29wIGNsdXN0ZXIgKi8KKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsIENYMjM0MVhfRU5DX1NFVF9HT1BfUFJPUEVSVElFUywgMiwKKwkJCQloZGwtPnZpZGVvX2dvcF9zaXplLT52YWwsCisJCQkJaGRsLT52aWRlb19iX2ZyYW1lcy0+dmFsICsgMSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCS8qIHN0cmVhbSB0eXBlIGNsdXN0ZXIgKi8KKwkJZXJyID0gY3gyMzQxeF9oZGxfYXBpKGhkbCwKKwkJCUNYMjM0MVhfRU5DX1NFVF9TVFJFQU1fVFlQRSwgMSwgbXBlZ19zdHJlYW1fdHlwZVt2YWxdKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gY3gyMzQxeF9oZGxfYXBpKGhkbCwgQ1gyMzQxWF9FTkNfU0VUX0JJVF9SQVRFLCA1LAorCQkJCWhkbC0+dmlkZW9fYml0cmF0ZV9tb2RlLT52YWwsCisJCQkJaGRsLT52aWRlb19iaXRyYXRlLT52YWwsCisJCQkJaGRsLT52aWRlb19iaXRyYXRlX3BlYWstPnZhbCAvIDQwMCwgMCwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXY0bDJfY3RybF9hY3RpdmF0ZShoZGwtPnZpZGVvX2JpdHJhdGVfbW9kZSwKKwkJCWhkbC0+dmlkZW9fZW5jb2RpbmctPnZhbCAhPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xKTsKKwkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+dmlkZW9fYml0cmF0ZV9wZWFrLAorCQkJaGRsLT52aWRlb19iaXRyYXRlX21vZGUtPnZhbCAhPSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUik7CisJCWlmIChjeDIzNDF4X25lcShoZGwtPnZpZGVvX2VuY29kaW5nKSAmJgorCQkgICAgaGRsLT5vcHMgJiYgaGRsLT5vcHMtPnNfdmlkZW9fZW5jb2RpbmcpCisJCQlyZXR1cm4gaGRsLT5vcHMtPnNfdmlkZW9fZW5jb2RpbmcoaGRsLCBoZGwtPnZpZGVvX2VuY29kaW5nLT52YWwpOworCQlyZXR1cm4gMDsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgorCQkvKiB2aWRlbyBtdXRlIGNsdXN0ZXIgKi8KKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsIENYMjM0MVhfRU5DX01VVEVfVklERU8sIDEsCisJCQkJaGRsLT52aWRlb19tdXRlLT52YWwgfAorCQkJCQkoaGRsLT52aWRlb19tdXRlX3l1di0+dmFsIDw8IDgpKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREU6IHsKKwkJaW50IGFjdGl2ZV9maWx0ZXI7CisKKwkJLyogdmlkZW8gZmlsdGVyIG1vZGUgKi8KKwkJZXJyID0gY3gyMzQxeF9oZGxfYXBpKGhkbCwgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfTU9ERSwgMiwKKwkJCQloZGwtPnZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUtPnZhbCB8CisJCQkJCShoZGwtPnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlLT52YWwgPDwgMSksCisJCQkJaGRsLT52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUtPnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWFjdGl2ZV9maWx0ZXIgPSBoZGwtPnZpZGVvX3NwYXRpYWxfZmlsdGVyX21vZGUtPnZhbCAhPQorCQkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTzsKKwkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+dmlkZW9fc3BhdGlhbF9maWx0ZXIsIGFjdGl2ZV9maWx0ZXIpOworCQl2NGwyX2N0cmxfYWN0aXZhdGUoaGRsLT52aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUsIGFjdGl2ZV9maWx0ZXIpOworCQl2NGwyX2N0cmxfYWN0aXZhdGUoaGRsLT52aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZSwgYWN0aXZlX2ZpbHRlcik7CisJCWFjdGl2ZV9maWx0ZXIgPSBoZGwtPnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlLT52YWwgIT0KKwkJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9BVVRPOworCQl2NGwyX2N0cmxfYWN0aXZhdGUoaGRsLT52aWRlb190ZW1wb3JhbF9maWx0ZXIsIGFjdGl2ZV9maWx0ZXIpOworCQlhY3RpdmVfZmlsdGVyID0gaGRsLT52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUtPnZhbCAhPQorCQkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkY7CisJCXY0bDJfY3RybF9hY3RpdmF0ZShoZGwtPnZpZGVvX2x1bWFfbWVkaWFuX2ZpbHRlcl9ib3R0b20sIGFjdGl2ZV9maWx0ZXIpOworCQl2NGwyX2N0cmxfYWN0aXZhdGUoaGRsLT52aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfdG9wLCBhY3RpdmVfZmlsdGVyKTsKKwkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+dmlkZW9fY2hyb21hX21lZGlhbl9maWx0ZXJfYm90dG9tLCBhY3RpdmVfZmlsdGVyKTsKKwkJdjRsMl9jdHJsX2FjdGl2YXRlKGhkbC0+dmlkZW9fY2hyb21hX21lZGlhbl9maWx0ZXJfdG9wLCBhY3RpdmVfZmlsdGVyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFOgorCQkvKiB2aWRlbyBmaWx0ZXIgdHlwZSBjbHVzdGVyICovCisJCXJldHVybiBjeDIzNDF4X2hkbF9hcGkoaGRsLAorCQkJCUNYMjM0MVhfRU5DX1NFVF9TUEFUSUFMX0ZJTFRFUl9UWVBFLCAyLAorCQkJCWhkbC0+dmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlLT52YWwsCisJCQkJaGRsLT52aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZS0+dmFsKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSOgorCQkvKiB2aWRlbyBmaWx0ZXIgY2x1c3RlciAqLworCQlyZXR1cm4gY3gyMzQxeF9oZGxfYXBpKGhkbCwgQ1gyMzQxWF9FTkNfU0VUX0ROUl9GSUxURVJfUFJPUFMsIDIsCisJCQkJaGRsLT52aWRlb19zcGF0aWFsX2ZpbHRlci0+dmFsLAorCQkJCWhkbC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyLT52YWwpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUDoKKwkJLyogdmlkZW8gbWVkaWFuIGNsdXN0ZXIgKi8KKwkJcmV0dXJuIGN4MjM0MXhfaGRsX2FwaShoZGwsIENYMjM0MVhfRU5DX1NFVF9DT1JJTkdfTEVWRUxTLCA0LAorCQkJCWhkbC0+dmlkZW9fbHVtYV9tZWRpYW5fZmlsdGVyX2JvdHRvbS0+dmFsLAorCQkJCWhkbC0+dmlkZW9fbHVtYV9tZWRpYW5fZmlsdGVyX3RvcC0+dmFsLAorCQkJCWhkbC0+dmlkZW9fY2hyb21hX21lZGlhbl9maWx0ZXJfYm90dG9tLT52YWwsCisJCQkJaGRsLT52aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl90b3AtPnZhbCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgY3gyMzQxeF9vcHMgPSB7CisJLnRyeV9jdHJsID0gY3gyMzQxeF90cnlfY3RybCwKKwkuc19jdHJsID0gY3gyMzQxeF9zX2N0cmwsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfY3RybCAqY3gyMzQxeF9jdHJsX25ld19jdXN0b20oc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQl1MzIgaWQsIHMzMiBtaW4sIHMzMiBtYXgsIHMzMiBzdGVwLCBzMzIgZGVmKQoreworCXN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIGNmZzsKKworCWN4MjM0MXhfY3RybF9maWxsKGlkLCAmY2ZnLm5hbWUsICZjZmcudHlwZSwgJm1pbiwgJm1heCwgJnN0ZXAsICZkZWYsICZjZmcuZmxhZ3MpOworCWNmZy5vcHMgPSAmY3gyMzQxeF9vcHM7CisJY2ZnLmlkID0gaWQ7CisJY2ZnLm1pbiA9IG1pbjsKKwljZmcubWF4ID0gbWF4OworCWNmZy5kZWYgPSBkZWY7CisJaWYgKGNmZy50eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpIHsKKwkJY2ZnLnN0ZXAgPSAwOworCQljZmcubWVudV9za2lwX21hc2sgPSBzdGVwOworCQljZmcucW1lbnUgPSBjeDIzNDF4X2dldF9tZW51KGlkKTsKKwl9IGVsc2UgeworCQljZmcuc3RlcCA9IHN0ZXA7CisJCWNmZy5tZW51X3NraXBfbWFzayA9IDA7CisJfQorCXJldHVybiB2NGwyX2N0cmxfbmV3X2N1c3RvbShoZGwsICZjZmcsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfY3RybCAqY3gyMzQxeF9jdHJsX25ld19zdGQoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQl1MzIgaWQsIHMzMiBtaW4sIHMzMiBtYXgsIHMzMiBzdGVwLCBzMzIgZGVmKQoreworCXJldHVybiB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZjeDIzNDF4X29wcywgaWQsIG1pbiwgbWF4LCBzdGVwLCBkZWYpOworfQorCitzdGF0aWMgc3RydWN0IHY0bDJfY3RybCAqY3gyMzQxeF9jdHJsX25ld19tZW51KHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJdTMyIGlkLCBzMzIgbWF4LCBzMzIgbWFzaywgczMyIGRlZikKK3sKKwlyZXR1cm4gdjRsMl9jdHJsX25ld19zdGRfbWVudShoZGwsICZjeDIzNDF4X29wcywgaWQsIG1heCwgbWFzaywgZGVmKTsKK30KKworaW50IGN4MjM0MXhfaGFuZGxlcl9pbml0KHN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmN4aGRsLAorCQkJIHVuc2lnbmVkIG5yX29mX2NvbnRyb2xzX2hpbnQpCit7CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY3hoZGwtPmhkbDsKKwl1MzIgY2FwcyA9IGN4aGRsLT5jYXBhYmlsaXRpZXM7CisJaW50IGhhc19zbGljZWRfdmJpID0gY2FwcyAmIENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJOworCWludCBoYXNfYWMzID0gY2FwcyAmIENYMjM0MVhfQ0FQX0hBU19BQzM7CisJaW50IGhhc190cyA9IGNhcHMgJiBDWDIzNDFYX0NBUF9IQVNfVFM7CisKKwljeGhkbC0+d2lkdGggPSA3MjA7CisJY3hoZGwtPmhlaWdodCA9IDQ4MDsKKworCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoaGRsLCBucl9vZl9jb250cm9sc19oaW50KTsKKworCS8qIEFkZCBjb250cm9scyBpbiBhc2NlbmRpbmcgY29udHJvbCBJRCBvcmRlciBmb3IgZmFzdGVzdAorCSAgIGluc2VydGlvbiB0aW1lLiAqLworCWN4aGRsLT5zdHJlYW1fdHlwZSA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFLAorCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIGhhc190cyA/IDAgOiAyLAorCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKKwljeGhkbC0+c3RyZWFtX3ZiaV9mbXQgPSBjeDIzNDF4X2N0cmxfbmV3X21lbnUoaGRsLAorCQkJVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVCwKKwkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWLCBoYXNfc2xpY2VkX3ZiaSA/IDAgOiAyLAorCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOworCWN4aGRsLT5hdWRpb19zYW1wbGluZ19mcmVxID0gY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSwKKwkJCVY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwLCAwLAorCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDApOworCWN4aGRsLT5hdWRpb19lbmNvZGluZyA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HLAorCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMywgaGFzX2FjMyA/IH4weDEyIDogfjB4MiwKKwkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKTsKKwljeGhkbC0+YXVkaW9fbDJfYml0cmF0ZSA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUsCisJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAweDFmZiwKKwkJCVY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzIyNEspOworCWN4aGRsLT5hdWRpb19tb2RlID0gY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSwKKwkJCVY0TDJfTVBFR19BVURJT19NT0RFX01PTk8sIDAsCisJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8pOworCWN4aGRsLT5hdWRpb19tb2RlX2V4dGVuc2lvbiA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OLAorCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzE2LCAwLAorCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQpOworCWN4aGRsLT5hdWRpb19lbXBoYXNpcyA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTLAorCQkJVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX0NDSVRUX0oxNywgMCwKKwkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FKTsKKwljeGhkbC0+YXVkaW9fY3JjID0gY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDLAorCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiwgMCwKKwkJCVY0TDJfTVBFR19BVURJT19DUkNfTk9ORSk7CisKKwljeDIzNDF4X2N0cmxfbmV3X3N0ZChoZGwsIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSwgMCwgMSwgMSwgMCk7CisJaWYgKGhhc19hYzMpCisJCWN4aGRsLT5hdWRpb19hYzNfYml0cmF0ZSA9IGN4MjM0MXhfY3RybF9uZXdfbWVudShoZGwsCisJCQkJVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SywgMHgwMywKKwkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0Syk7CisJY3hoZGwtPnZpZGVvX2VuY29kaW5nID0gY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkcsCisJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yLCAwLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMik7CisJY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNULAorCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwLCAwLAorCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOworCWN4aGRsLT52aWRlb19iX2ZyYW1lcyA9IGN4MjM0MXhfY3RybF9uZXdfc3RkKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVMsIDAsIDMzLCAxLCAyKTsKKwljeGhkbC0+dmlkZW9fZ29wX3NpemUgPSBjeDIzNDF4X2N0cmxfbmV3X3N0ZChoZGwsCisJCQlWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFLAorCQkJMSwgMzQsIDEsIGN4aGRsLT5pc181MGh6ID8gMTIgOiAxNSk7CisJY3gyMzQxeF9jdHJsX25ld19zdGQoaGRsLCBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFLCAwLCAxLCAxLCAxKTsKKwljeGhkbC0+dmlkZW9fYml0cmF0ZV9tb2RlID0gY3gyMzQxeF9jdHJsX25ld19tZW51KGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFLAorCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIsIDAsCisJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7CisJY3hoZGwtPnZpZGVvX2JpdHJhdGUgPSBjeDIzNDF4X2N0cmxfbmV3X3N0ZChoZGwsCisJCQlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEUsCisJCQkwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CisJY3hoZGwtPnZpZGVvX2JpdHJhdGVfcGVhayA9IGN4MjM0MXhfY3RybF9uZXdfc3RkKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLLAorCQkJMCwgMjcwMDAwMDAsIDEsIDgwMDAwMDApOworCWN4MjM0MXhfY3RybF9uZXdfc3RkKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTiwgMCwgMjU1LCAxLCAwKTsKKwljeGhkbC0+dmlkZW9fbXV0ZSA9IGN4MjM0MXhfY3RybF9uZXdfc3RkKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfVklERU9fTVVURSwgMCwgMSwgMSwgMCk7CisJY3hoZGwtPnZpZGVvX211dGVfeXV2ID0gY3gyMzQxeF9jdHJsX25ld19zdGQoaGRsLAorCQkJVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVViwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKKworCS8qIENYMjM0MTUvNiBzcGVjaWZpYyAqLworCWN4aGRsLT52aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlID0gY3gyMzQxeF9jdHJsX25ld19jdXN0b20oaGRsLAorCQkJVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREUsCisJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFX01BTlVBTCwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTywgMCwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfTUFOVUFMKTsKKwljeGhkbC0+dmlkZW9fc3BhdGlhbF9maWx0ZXIgPSBjeDIzNDF4X2N0cmxfbmV3X2N1c3RvbShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVIsCisJCQkwLCAxNSwgMSwgMCk7CisJY3hoZGwtPnZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZSA9IGN4MjM0MXhfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUsCisJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGLAorCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX1NZTV9OT05fU0VQQVJBQkxFLAorCQkJMCwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IpOworCWN4aGRsLT52aWRlb19jaHJvbWFfc3BhdGlhbF9maWx0ZXJfdHlwZSA9IGN4MjM0MXhfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRSwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiwKKwkJCTAsCisJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IpOworCWN4aGRsLT52aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZSA9IGN4MjM0MXhfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERSwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8sCisJCQkwLAorCQkJVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMKTsKKwljeGhkbC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyID0gY3gyMzQxeF9jdHJsX25ld19jdXN0b20oaGRsLAorCQkJVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiwKKwkJCTAsIDMxLCAxLCA4KTsKKwljeGhkbC0+dmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlID0gY3gyMzQxeF9jdHJsX25ld19jdXN0b20oaGRsLAorCQkJVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRSwKKwkJCVY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9PRkYsCisJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRywKKwkJCTAsCisJCQlWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGKTsKKwljeGhkbC0+dmlkZW9fbHVtYV9tZWRpYW5fZmlsdGVyX2JvdHRvbSA9IGN4MjM0MXhfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfQk9UVE9NLAorCQkJMCwgMjU1LCAxLCAwKTsKKwljeGhkbC0+dmlkZW9fbHVtYV9tZWRpYW5fZmlsdGVyX3RvcCA9IGN4MjM0MXhfY3RybF9uZXdfY3VzdG9tKGhkbCwKKwkJCVY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfVE9QLAorCQkJMCwgMjU1LCAxLCAyNTUpOworCWN4aGRsLT52aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl9ib3R0b20gPSBjeDIzNDF4X2N0cmxfbmV3X2N1c3RvbShoZGwsCisJCQlWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX01FRElBTl9GSUxURVJfQk9UVE9NLAorCQkJMCwgMjU1LCAxLCAwKTsKKwljeGhkbC0+dmlkZW9fY2hyb21hX21lZGlhbl9maWx0ZXJfdG9wID0gY3gyMzQxeF9jdHJsX25ld19jdXN0b20oaGRsLAorCQkJVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX1RPUCwKKwkJCTAsIDI1NSwgMSwgMjU1KTsKKwljeDIzNDF4X2N0cmxfbmV3X2N1c3RvbShoZGwsIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9TVFJFQU1fSU5TRVJUX05BVl9QQUNLRVRTLAorCQkJMCwgMSwgMSwgMCk7CisKKwlpZiAoaGRsLT5lcnJvcikgeworCQlpbnQgZXJyID0gaGRsLT5lcnJvcjsKKworCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhkbCk7CisJCXJldHVybiBlcnI7CisJfQorCisJdjRsMl9jdHJsX2NsdXN0ZXIoOCwgJmN4aGRsLT5hdWRpb19zYW1wbGluZ19mcmVxKTsKKwl2NGwyX2N0cmxfY2x1c3RlcigyLCAmY3hoZGwtPnZpZGVvX2JfZnJhbWVzKTsKKwl2NGwyX2N0cmxfY2x1c3Rlcig1LCAmY3hoZGwtPnN0cmVhbV90eXBlKTsKKwl2NGwyX2N0cmxfY2x1c3RlcigyLCAmY3hoZGwtPnZpZGVvX211dGUpOworCXY0bDJfY3RybF9jbHVzdGVyKDMsICZjeGhkbC0+dmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSk7CisJdjRsMl9jdHJsX2NsdXN0ZXIoMiwgJmN4aGRsLT52aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUpOworCXY0bDJfY3RybF9jbHVzdGVyKDIsICZjeGhkbC0+dmlkZW9fc3BhdGlhbF9maWx0ZXIpOworCXY0bDJfY3RybF9jbHVzdGVyKDQsICZjeGhkbC0+dmlkZW9fbHVtYV9tZWRpYW5fZmlsdGVyX3RvcCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY3gyMzQxeF9oYW5kbGVyX2luaXQpOworCit2b2lkIGN4MjM0MXhfaGFuZGxlcl9zZXRfNTBoeihzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpjeGhkbCwgaW50IGlzXzUwaHopCit7CisJY3hoZGwtPmlzXzUwaHogPSBpc181MGh6OworCWN4aGRsLT52aWRlb19nb3Bfc2l6ZS0+ZGVmYXVsdF92YWx1ZSA9IGN4aGRsLT5pc181MGh6ID8gMTIgOiAxNTsKK30KK0VYUE9SVF9TWU1CT0woY3gyMzQxeF9oYW5kbGVyX3NldF81MGh6KTsKKworaW50IGN4MjM0MXhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpjeGhkbCkKK3sKKwlpbnQgaCA9IGN4aGRsLT5oZWlnaHQ7CisJaW50IHcgPSBjeGhkbC0+d2lkdGg7CisJaW50IGVycjsKKworCWVyciA9IGN4MjM0MXhfaGRsX2FwaShjeGhkbCwgQ1gyMzQxWF9FTkNfU0VUX09VVFBVVF9QT1JULCAyLCBjeGhkbC0+cG9ydCwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBjeDIzNDF4X2hkbF9hcGkoY3hoZGwsIENYMjM0MVhfRU5DX1NFVF9GUkFNRV9SQVRFLCAxLCBjeGhkbC0+aXNfNTBoeik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICh2NGwyX2N0cmxfZ19jdHJsKGN4aGRsLT52aWRlb19lbmNvZGluZykgPT0gVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfMSkgeworCQl3IC89IDI7CisJCWggLz0gMjsKKwl9CisJZXJyID0gY3gyMzQxeF9oZGxfYXBpKGN4aGRsLCBDWDIzNDFYX0VOQ19TRVRfRlJBTUVfU0laRSwgMiwgaCwgdyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJmN4aGRsLT5oZGwpOworfQorRVhQT1JUX1NZTUJPTChjeDIzNDF4X2hhbmRsZXJfc2V0dXApOworCit2b2lkIGN4MjM0MXhfaGFuZGxlcl9zZXRfYnVzeShzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpjeGhkbCwgaW50IGJ1c3kpCit7CisJdjRsMl9jdHJsX2dyYWIoY3hoZGwtPmF1ZGlvX3NhbXBsaW5nX2ZyZXEsIGJ1c3kpOworCXY0bDJfY3RybF9ncmFiKGN4aGRsLT5hdWRpb19lbmNvZGluZywgYnVzeSk7CisJdjRsMl9jdHJsX2dyYWIoY3hoZGwtPmF1ZGlvX2wyX2JpdHJhdGUsIGJ1c3kpOworCXY0bDJfY3RybF9ncmFiKGN4aGRsLT5hdWRpb19hYzNfYml0cmF0ZSwgYnVzeSk7CisJdjRsMl9jdHJsX2dyYWIoY3hoZGwtPnN0cmVhbV92YmlfZm10LCBidXN5KTsKKwl2NGwyX2N0cmxfZ3JhYihjeGhkbC0+c3RyZWFtX3R5cGUsIGJ1c3kpOworCXY0bDJfY3RybF9ncmFiKGN4aGRsLT52aWRlb19iaXRyYXRlX21vZGUsIGJ1c3kpOworCXY0bDJfY3RybF9ncmFiKGN4aGRsLT52aWRlb19iaXRyYXRlLCBidXN5KTsKKwl2NGwyX2N0cmxfZ3JhYihjeGhkbC0+dmlkZW9fYml0cmF0ZV9wZWFrLCBidXN5KTsKK30KK0VYUE9SVF9TWU1CT0woY3gyMzQxeF9oYW5kbGVyX3NldF9idXN5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggYmNkZGE5YS4uNzY4ZjAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTUsNyArNSw3IEBACiAJc2VsZWN0IFZJREVPX0JUQ1gKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlzZWxlY3QgVklERU9fSVIKKwlzZWxlY3QgSVJfQ09SRQogCXNlbGVjdCBWSURFT0JVRl9EVkIKIAlzZWxlY3QgVklERU9CVUZfRE1BX1NHCiAJc2VsZWN0IFZJREVPX0NYMjU4NDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZQppbmRleCA1Nzg3YWUyLi5lMmVlOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L01ha2VmaWxlCkBAIC0xLDcgKzEsOCBAQAogY3gyMzg4NS1vYmpzCTo9IGN4MjM4ODUtY2FyZHMubyBjeDIzODg1LXZpZGVvLm8gY3gyMzg4NS12YmkubyBcCiAJCSAgICBjeDIzODg1LWNvcmUubyBjeDIzODg1LWkyYy5vIGN4MjM4ODUtZHZiLm8gY3gyMzg4NS00MTcubyBcCi0JCSAgICBjeDIzODg1LWlvY3RsLm8gY3gyMzg4NS1pci5vIGN4MjM4ODUtaW5wdXQubyBjeDIzODg4LWlyLm8gXAotCQkgICAgbmV0dXAtaW5pdC5vIGNpbWF4Mi5vIG5ldHVwLWVlcHJvbS5vIGN4MjM4ODUtZjMwMC5vCisJCSAgICBjeDIzODg1LWlvY3RsLm8gY3gyMzg4NS1pci5vIGN4MjM4ODUtYXYubyBjeDIzODg1LWlucHV0Lm8gXAorCQkgICAgY3gyMzg4OC1pci5vIG5ldHVwLWluaXQubyBjaW1heDIubyBuZXR1cC1lZXByb20ubyBcCisJCSAgICBjeDIzODg1LWYzMDAubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzg4NSkgKz0gY3gyMzg4NS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWF2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1hdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNGViZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1hdi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyMzg4NS83LzggUENJZSBicmlkZ2UKKyAqCisgKiAgQVYgZGV2aWNlIHN1cHBvcnQgcm91dGluZXMgLSBub24taW5wdXQsIG5vbi12bDQyX3N1YmRldiByb3V0aW5lcworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgIEFuZHkgV2FsbHMgPGF3YWxsc0BtZC5tZXRyb2Nhc3QubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY3gyMzg4NS5oIgorCit2b2lkIGN4MjM4ODVfYXZfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9CisJCQkgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGN4MjM4ODVfZGV2LCBjeDI1ODQwX3dvcmspOworCWJvb2wgaGFuZGxlZDsKKworCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9jeDI1ODQwLCBjb3JlLCBpbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lLAorCQkJIFBDSV9NU0tfQVZfQ09SRSwgJmhhbmRsZWQpOworCWN4MjM4ODVfaXJxX2VuYWJsZShkZXYsIFBDSV9NU0tfQVZfQ09SRSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1hdi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtYXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjkxNWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtYXYuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogIERyaXZlciBmb3IgdGhlIENvbmV4YW50IENYMjM4ODUvNy84IFBDSWUgYnJpZGdlCisgKgorICogIEFWIGRldmljZSBzdXBwb3J0IHJvdXRpbmVzIC0gbm9uLWlucHV0LCBub24tdmw0Ml9zdWJkZXYgcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBBbmR5IFdhbGxzIDxhd2FsbHNAbWQubWV0cm9jYXN0Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBfQ1gyMzg4NV9BVl9IXworI2RlZmluZSBfQ1gyMzg4NV9BVl9IXwordm9pZCBjeDIzODg1X2F2X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCAyMDE0ZGFlLi5lNzZjZTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTMwLDYgKzMwLDE2IEBACiAjaW5jbHVkZSAibmV0dXAtaW5pdC5oIgogI2luY2x1ZGUgImN4MjM4ODgtaXIuaCIKIAorc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfODg1X2lyOworbW9kdWxlX3BhcmFtKGVuYWJsZV84ODVfaXIsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV84ODVfaXIsCisJCSAiRW5hYmxlIGludGVncmF0ZWQgSVIgY29udHJvbGxlciBmb3Igc3VwcG9ydGVkXG4iCisJCSAiXHRcdCAgICBDWDIzODhbNTddIGJvYXJkcyB0aGF0IGFyZSB3aXJlZCBmb3IgaXQ6XG4iCisJCSAiXHRcdFx0SFZSLTEyNTAgKHJlcG9ydGVkIHNhZmUpXG4iCisJCSAiXHRcdFx0VGVWaWkgUzQ3MCAocmVwb3J0ZWQgdW5zYWZlKVxuIgorCQkgIlx0XHQgICAgVGhpcyBjYW4gY2F1c2UgYW4gaW50ZXJydXB0IHN0b3JtIHdpdGggc29tZSBjYXJkcy5cbiIKKwkJICJcdFx0ICAgIERlZmF1bHQ6IDAgW0Rpc2FibGVkXSIpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGJvYXJkIGNvbmZpZyBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC02MjYsNiArNjM2LDkgQEAKIAljYXNlIDc5MTAxOgogCQkvKiBXaW5UVi1IVlIxMjUwIChQQ0llLCBSZXRhaWwsIElSLCBoYWxmIGhlaWdodCwKIAkJCUFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgNzk1MDE6CisJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE5vIElSLCBoYWxmIGhlaWdodCwKKwkJCUFUU0MgW2F0IGxlYXN0XSBhbmQgQmFzaWMgYW5hbG9nKSAqLwogCWNhc2UgNzk1NjE6CiAJCS8qIFdpblRWLUhWUjEyNTAgKFBDSWUsIE9FTSwgTm8gSVIsIGhhbGYgaGVpZ2h0LAogCQkJQVRTQyBhbmQgQmFzaWMgYW5hbG9nICovCkBAIC05NTksOSArOTcyLDM3IEBACiAKIGludCBjeDIzODg1X2lyX2luaXQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9pb19waW5fY29uZmlnIGlyX3J4dHhfcGluX2NmZ1tdID0geworCQl7CisJCQkuZmxhZ3MJICA9IFY0TDJfU1VCREVWX0lPX1BJTl9JTlBVVCwKKwkJCS5waW4JICA9IENYMjM4ODVfUElOX0lSX1JYX0dQSU8xOSwKKwkJCS5mdW5jdGlvbiA9IENYMjM4ODVfUEFEX0lSX1JYLAorCQkJLnZhbHVlCSAgPSAwLAorCQkJLnN0cmVuZ3RoID0gQ1gyNTg0MF9QSU5fRFJJVkVfTUVESVVNLAorCQl9LCB7CisJCQkuZmxhZ3MJICA9IFY0TDJfU1VCREVWX0lPX1BJTl9PVVRQVVQsCisJCQkucGluCSAgPSBDWDIzODg1X1BJTl9JUl9UWF9HUElPMjAsCisJCQkuZnVuY3Rpb24gPSBDWDIzODg1X1BBRF9JUl9UWCwKKwkJCS52YWx1ZQkgID0gMCwKKwkJCS5zdHJlbmd0aCA9IENYMjU4NDBfUElOX0RSSVZFX01FRElVTSwKKwkJfQorCX07CisJY29uc3Qgc2l6ZV90IGlyX3J4dHhfcGluX2NmZ19jb3VudCA9IEFSUkFZX1NJWkUoaXJfcnh0eF9waW5fY2ZnKTsKKworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfaW9fcGluX2NvbmZpZyBpcl9yeF9waW5fY2ZnW10gPSB7CisJCXsKKwkJCS5mbGFncwkgID0gVjRMMl9TVUJERVZfSU9fUElOX0lOUFVULAorCQkJLnBpbgkgID0gQ1gyMzg4NV9QSU5fSVJfUlhfR1BJTzE5LAorCQkJLmZ1bmN0aW9uID0gQ1gyMzg4NV9QQURfSVJfUlgsCisJCQkudmFsdWUJICA9IDAsCisJCQkuc3RyZW5ndGggPSBDWDI1ODQwX1BJTl9EUklWRV9NRURJVU0sCisJCX0KKwl9OworCWNvbnN0IHNpemVfdCBpcl9yeF9waW5fY2ZnX2NvdW50ID0gQVJSQVlfU0laRShpcl9yeF9waW5fY2ZnKTsKKworCXN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHBhcmFtczsKIAlpbnQgcmV0ID0gMDsKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKLQljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwOgpAQCAtOTc5LDcgKzEwMjAsNDEgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQlkZXYtPnNkX2lyID0gY3gyMzg4NV9maW5kX2h3KGRldiwgQ1gyMzg4NV9IV184ODhfSVIpOwotCQlkZXYtPnBjaV9pcnFtYXNrIHw9IFBDSV9NU0tfSVI7CisJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9jeDI1ODQwLCBjb3JlLCBzX2lvX3Bpbl9jb25maWcsCisJCQkJIGlyX3J4dHhfcGluX2NmZ19jb3VudCwgaXJfcnh0eF9waW5fY2ZnKTsKKwkJLyoKKwkJICogRm9yIHRoZXNlIGJvYXJkcyB3ZSBuZWVkIHRvIGludmVydCB0aGUgVHggb3V0cHV0IHZpYSB0aGUKKwkJICogSVIgY29udHJvbGxlciB0byBoYXZlIHRoZSBMRUQgb2ZmIHdoaWxlIGlkbGUKKwkJICovCisJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHR4X2dfcGFyYW1ldGVycywgJnBhcmFtcyk7CisJCXBhcmFtcy5lbmFibGUgPSBmYWxzZTsKKwkJcGFyYW1zLnNodXRkb3duID0gZmFsc2U7CisJCXBhcmFtcy5pbnZlcnRfbGV2ZWwgPSB0cnVlOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfaXIsIGlyLCB0eF9zX3BhcmFtZXRlcnMsICZwYXJhbXMpOworCQlwYXJhbXMuc2h1dGRvd24gPSB0cnVlOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfaXIsIGlyLCB0eF9zX3BhcmFtZXRlcnMsICZwYXJhbXMpOworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MDoKKwkJaWYgKCFlbmFibGVfODg1X2lyKQorCQkJYnJlYWs7CisJCWRldi0+c2RfaXIgPSBjeDIzODg1X2ZpbmRfaHcoZGV2LCBDWDIzODg1X0hXX0FWX0NPUkUpOworCQlpZiAoZGV2LT5zZF9pciA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2N4MjU4NDAsIGNvcmUsIHNfaW9fcGluX2NvbmZpZywKKwkJCQkgaXJfcnhfcGluX2NmZ19jb3VudCwgaXJfcnhfcGluX2NmZyk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKKwkJaWYgKCFlbmFibGVfODg1X2lyKQorCQkJYnJlYWs7CisJCWRldi0+c2RfaXIgPSBjeDIzODg1X2ZpbmRfaHcoZGV2LCBDWDIzODg1X0hXX0FWX0NPUkUpOworCQlpZiAoZGV2LT5zZF9pciA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2N4MjU4NDAsIGNvcmUsIHNfaW9fcGluX2NvbmZpZywKKwkJCQkgaXJfcnh0eF9waW5fY2ZnX2NvdW50LCBpcl9yeHR4X3Bpbl9jZmcpOwogCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUDoKIAkJcmVxdWVzdF9tb2R1bGUoImlyLWtiZC1pMmMiKTsKQEAgLTk5NCwxMSArMTA2OSwxNiBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6Ci0JCWRldi0+cGNpX2lycW1hc2sgJj0gflBDSV9NU0tfSVI7Ci0JCWN4X2NsZWFyKFBDSV9JTlRfTVNLLCBQQ0lfTVNLX0lSKTsKKwkJY3gyMzg4NV9pcnFfcmVtb3ZlKGRldiwgUENJX01TS19JUik7CiAJCWN4MjM4ODhfaXJfcmVtb3ZlKGRldik7CiAJCWRldi0+c2RfaXIgPSBOVUxMOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CisJCWN4MjM4ODVfaXJxX3JlbW92ZShkZXYsIFBDSV9NU0tfQVZfQ09SRSk7CisJCS8qIHNkX2lyIGlzIGEgZHVwbGljYXRlIHBvaW50ZXIgdG8gdGhlIEFWIENvcmUsIGp1c3QgY2xlYXIgaXQgKi8KKwkJZGV2LT5zZF9pciA9IE5VTEw7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTAwNyw4ICsxMDg3LDEzIEBACiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKLQkJaWYgKGRldi0+c2RfaXIgJiYgKGRldi0+cGNpX2lycW1hc2sgJiBQQ0lfTVNLX0lSKSkKLQkJCWN4X3NldChQQ0lfSU5UX01TSywgUENJX01TS19JUik7CisJCWlmIChkZXYtPnNkX2lyKQorCQkJY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShkZXYsIFBDSV9NU0tfSVIpOworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CisJCWlmIChkZXYtPnNkX2lyKQorCQkJY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShkZXYsIFBDSV9NU0tfQVZfQ09SRSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEwMjgsNiArMTExMywxMyBAQAogCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgorCQlpZiAoZGV2LT5pMmNfYnVzWzBdLmkyY19yYyA9PSAwKSB7CisJCQlpZiAoZWVwcm9tWzB4ODBdICE9IDB4ODQpCisJCQkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGVlcHJvbSsweGMwKTsKKwkJCWVsc2UKKwkJCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZWVwcm9tKzB4ODApOworCQl9CisJCWJyZWFrOwogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBROgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTQwMDoKQEAgLTExMzYsNiArMTIyOCwxMSBAQAogCSAqIGxvYWRlZCwgZW5zdXJlIHRoaXMgaGFwcGVucy4KIAkgKi8KIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CisJCS8qIEN1cnJlbnRseSBvbmx5IGVuYWJsZWQgZm9yIHRoZSBpbnRlZ3JhdGVkIElSIGNvbnRyb2xsZXIgKi8KKwkJaWYgKCFlbmFibGVfODg1X2lyKQorCQkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTgwMGxwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTcwMDoKQEAgLTExNTEsNyArMTI0OCwxMCBAQAogCQlkZXYtPnNkX2N4MjU4NDAgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPnY0bDJfZGV2LAogCQkJCSZkZXYtPmkyY19idXNbMl0uaTJjX2FkYXAsCiAJCQkJImN4MjU4NDAiLCAiY3gyNTg0MCIsIDB4ODggPj4gMSwgTlVMTCk7Ci0JCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9jeDI1ODQwLCBjb3JlLCBsb2FkX2Z3KTsKKwkJaWYgKGRldi0+c2RfY3gyNTg0MCkgeworCQkJZGV2LT5zZF9jeDI1ODQwLT5ncnBfaWQgPSBDWDIzODg1X0hXX0FWX0NPUkU7CisJCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfY3gyNTg0MCwgY29yZSwgbG9hZF9mdyk7CisJCX0KIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKaW5kZXggZmY3NmY2NC4uZjZiNjJlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNpbWF4Mi5oIgogI2luY2x1ZGUgImN4MjM4ODgtaXIuaCIKICNpbmNsdWRlICJjeDIzODg1LWlyLmgiCisjaW5jbHVkZSAiY3gyMzg4NS1hdi5oIgogI2luY2x1ZGUgImN4MjM4ODUtaW5wdXQuaCIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGN4MjM4ODUgYmFzZWQgVFYgY2FyZHMiKTsKQEAgLTI5OSw2ICszMDAsODMgQEAKIAl9LAogfTsKIAordm9pZCBjeDIzODg1X2lycV9hZGQoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGNpX2lycW1hc2tfbG9jaywgZmxhZ3MpOworCisJZGV2LT5wY2lfaXJxbWFzayB8PSBtYXNrOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wY2lfaXJxbWFza19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wY2lfaXJxbWFza19sb2NrLCBmbGFncyk7CisKKwlkZXYtPnBjaV9pcnFtYXNrIHw9IG1hc2s7CisJY3hfc2V0KFBDSV9JTlRfTVNLLCBtYXNrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGNpX2lycW1hc2tfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGN4MjM4ODVfaXJxX2VuYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spCit7CisJdTMyIHY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wY2lfaXJxbWFza19sb2NrLCBmbGFncyk7CisKKwl2ID0gbWFzayAmIGRldi0+cGNpX2lycW1hc2s7CisJaWYgKHYpCisJCWN4X3NldChQQ0lfSU5UX01TSywgdik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBjaV9pcnFtYXNrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4MjM4ODVfaXJxX2VuYWJsZV9hbGwoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCit7CisJY3gyMzg4NV9pcnFfZW5hYmxlKGRldiwgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgY3gyMzg4NV9pcnFfZGlzYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wY2lfaXJxbWFza19sb2NrLCBmbGFncyk7CisKKwljeF9jbGVhcihQQ0lfSU5UX01TSywgbWFzayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBjaV9pcnFtYXNrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4MjM4ODVfaXJxX2Rpc2FibGVfYWxsKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQoreworCWN4MjM4ODVfaXJxX2Rpc2FibGUoZGV2LCAweGZmZmZmZmZmKTsKK30KKwordm9pZCBjeDIzODg1X2lycV9yZW1vdmUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cGNpX2lycW1hc2tfbG9jaywgZmxhZ3MpOworCisJZGV2LT5wY2lfaXJxbWFzayAmPSB+bWFzazsKKwljeF9jbGVhcihQQ0lfSU5UX01TSywgbWFzayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBjaV9pcnFtYXNrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHUzMiBjeDIzODg1X2lycV9nZXRfbWFzayhzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKK3sKKwl1MzIgdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBjaV9pcnFtYXNrX2xvY2ssIGZsYWdzKTsKKworCXYgPSBjeF9yZWFkKFBDSV9JTlRfTVNLKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGNpX2lycW1hc2tfbG9jaywgZmxhZ3MpOworCXJldHVybiB2OworfQorCiBzdGF0aWMgaW50IGN4MjM4ODVfcmlzY19kZWNvZGUodTMyIHJpc2MpCiB7CiAJc3RhdGljIGNoYXIgKmluc3RyWzE2XSA9IHsKQEAgLTU0OCw3ICs2MjYsNyBAQAogCWN4X3dyaXRlKFVBUlRfQ1RMLCAwKTsKIAogCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLwotCWN4X3dyaXRlKFBDSV9JTlRfTVNLLCAwKTsKKwljeDIzODg1X2lycV9kaXNhYmxlX2FsbChkZXYpOwogCWN4X3dyaXRlKFZJRF9BX0lOVF9NU0ssIDApOwogCWN4X3dyaXRlKFZJRF9CX0lOVF9NU0ssIDApOwogCWN4X3dyaXRlKFZJRF9DX0lOVF9NU0ssIDApOwpAQCAtNzc0LDYgKzg1Miw4IEBACiB7CiAJaW50IGk7CiAKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5wY2lfaXJxbWFza19sb2NrKTsKKwogCW11dGV4X2luaXQoJmRldi0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmZGV2LT5ncGlvX2xvY2spOwogCkBAIC04MjAsOSArOTAwLDkgQEAKIAogCWRldi0+cGNpX2J1cyAgPSBkZXYtPnBjaS0+YnVzLT5udW1iZXI7CiAJZGV2LT5wY2lfc2xvdCA9IFBDSV9TTE9UKGRldi0+cGNpLT5kZXZmbik7Ci0JZGV2LT5wY2lfaXJxbWFzayA9IDB4MDAxZjAwOworCWN4MjM4ODVfaXJxX2FkZChkZXYsIDB4MDAxZjAwKTsKIAlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uY2ltYXggPiAwKQotCQlkZXYtPnBjaV9pcnFtYXNrIHw9IDB4MDE4MDAwMDA7IC8qIGZvciBDaU1heGVzICovCisJCWN4MjM4ODVfaXJxX2FkZChkZXYsIDB4MDE4MDAwMDApOyAvKiBmb3IgQ2lNYXhlcyAqLwogCiAJLyogRXh0ZXJuYWwgTWFzdGVyIDEgQnVzICovCiAJZGV2LT5pMmNfYnVzWzBdLm5yID0gMDsKQEAgLTExNTYsNyArMTIzNiw3IEBACiAJZHByaW50aygxLCAiJXMoKSBERVZfQ05UUkwyICAgICAgICAgICAgICAgMHglMDhYXG4iLCBfX2Z1bmNfXywKIAkJY3hfcmVhZChERVZfQ05UUkwyKSk7CiAJZHByaW50aygxLCAiJXMoKSBQQ0lfSU5UX01TSyAgICAgICAgICAgICAgMHglMDhYXG4iLCBfX2Z1bmNfXywKLQkJY3hfcmVhZChQQ0lfSU5UX01TSykpOworCQljeDIzODg1X2lycV9nZXRfbWFzayhkZXYpKTsKIAlkcHJpbnRrKDEsICIlcygpIEFVRF9JTlRfSU5UX01TSyAgICAgICAgICAweCUwOFhcbiIsIF9fZnVuY19fLAogCQljeF9yZWFkKEFVRElPX0lOVF9JTlRfTVNLKSk7CiAJZHByaW50aygxLCAiJXMoKSBBVURfSU5UX0RNQV9DVEwgICAgICAgICAgMHglMDhYXG4iLCBfX2Z1bmNfXywKQEAgLTEyOTIsNyArMTM3Miw4IEBACiAJCWRwcmludGsoMSwgIiVzKCkgZW5hYmxpbmcgVFMgaW50J3MgYW5kIERNQVxuIiwgX19mdW5jX18pOwogCQljeF9zZXQocG9ydC0+cmVnX3RzX2ludF9tc2ssICBwb3J0LT50c19pbnRfbXNrX3ZhbCk7CiAJCWN4X3NldChwb3J0LT5yZWdfZG1hX2N0bCwgcG9ydC0+ZG1hX2N0bF92YWwpOwotCQljeF9zZXQoUENJX0lOVF9NU0ssIGRldi0+cGNpX2lycW1hc2sgfCBwb3J0LT5wY2lfaXJxbWFzayk7CisJCWN4MjM4ODVfaXJxX2FkZChkZXYsIHBvcnQtPnBjaV9pcnFtYXNrKTsKKwkJY3gyMzg4NV9pcnFfZW5hYmxlX2FsbChkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTE2NTAsMTAgKzE3MzEsMTAgQEAKIAl1MzIgdHMxX3N0YXR1cywgdHMxX21hc2s7CiAJdTMyIHRzMl9zdGF0dXMsIHRzMl9tYXNrOwogCWludCB2aWRhX2NvdW50ID0gMCwgdHMxX2NvdW50ID0gMCwgdHMyX2NvdW50ID0gMCwgaGFuZGxlZCA9IDA7Ci0JYm9vbCBpcl9oYW5kbGVkID0gZmFsc2U7CisJYm9vbCBzdWJkZXZfaGFuZGxlZDsKIAogCXBjaV9zdGF0dXMgPSBjeF9yZWFkKFBDSV9JTlRfU1RBVCk7Ci0JcGNpX21hc2sgPSBjeF9yZWFkKFBDSV9JTlRfTVNLKTsKKwlwY2lfbWFzayA9IGN4MjM4ODVfaXJxX2dldF9tYXNrKGRldik7CiAJdmlkYV9zdGF0dXMgPSBjeF9yZWFkKFZJRF9BX0lOVF9TVEFUKTsKIAl2aWRhX21hc2sgPSBjeF9yZWFkKFZJRF9BX0lOVF9NU0spOwogCXRzMV9zdGF0dXMgPSBjeF9yZWFkKFZJRF9CX0lOVF9TVEFUKTsKQEAgLTE2ODEsNyArMTc2Miw3IEBACiAJCQkgIFBDSV9NU0tfVklEX0MgICB8IFBDSV9NU0tfVklEX0IgICB8IFBDSV9NU0tfVklEX0EgICB8CiAJCQkgIFBDSV9NU0tfQVVEX0lOVCB8IFBDSV9NU0tfQVVEX0VYVCB8CiAJCQkgIFBDSV9NU0tfR1BJTzAgICB8IFBDSV9NU0tfR1BJTzEgICB8Ci0JCQkgIFBDSV9NU0tfSVIpKSB7CisJCQkgIFBDSV9NU0tfQVZfQ09SRSB8IFBDSV9NU0tfSVIpKSB7CiAKIAkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1JJU0NfUkQpCiAJCQlkcHJpbnRrKDcsICIgKFBDSV9NU0tfUklTQ19SRCAgIDB4JTA4eClcbiIsCkBAIC0xNzMxLDYgKzE4MTIsMTAgQEAKIAkJCWRwcmludGsoNywgIiAoUENJX01TS19HUElPMSAgICAgMHglMDh4KVxuIiwKIAkJCQlQQ0lfTVNLX0dQSU8xKTsKIAorCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVZfQ09SRSkKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19BVl9DT1JFICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0FWX0NPUkUpOworCiAJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19JUikKIAkJCWRwcmludGsoNywgIiAoUENJX01TS19JUiAgICAgICAgMHglMDh4KVxuIiwKIAkJCQlQQ0lfTVNLX0lSKTsKQEAgLTE3NjUsMTIgKzE4NTAsMjIgQEAKIAkJaGFuZGxlZCArPSBjeDIzODg1X3ZpZGVvX2lycShkZXYsIHZpZGFfc3RhdHVzKTsKIAogCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19JUikgewotCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfaXIsIGlyLCBpbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lLAotCQkJCSBwY2lfc3RhdHVzLCAmaXJfaGFuZGxlZCk7Ci0JCWlmIChpcl9oYW5kbGVkKQorCQlzdWJkZXZfaGFuZGxlZCA9IGZhbHNlOworCQl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfaXIsIGNvcmUsIGludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUsCisJCQkJIHBjaV9zdGF0dXMsICZzdWJkZXZfaGFuZGxlZCk7CisJCWlmIChzdWJkZXZfaGFuZGxlZCkKIAkJCWhhbmRsZWQrKzsKIAl9CiAKKwlpZiAoKHBjaV9zdGF0dXMgJiBwY2lfbWFzaykgJiBQQ0lfTVNLX0FWX0NPUkUpIHsKKwkJY3gyMzg4NV9pcnFfZGlzYWJsZShkZXYsIFBDSV9NU0tfQVZfQ09SRSk7CisJCWlmICghc2NoZWR1bGVfd29yaygmZGV2LT5jeDI1ODQwX3dvcmspKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCB1cCBkZWZlcnJlZCB3b3JrIGZvciIKKwkJCSAgICAgICAiIEFWIENvcmUvSVIgaW50ZXJydXB0LiBJbnRlcnJ1cHQgaXMgZGlzYWJsZWQiCisJCQkgICAgICAgIiBhbmQgd29uJ3QgYmUgcmUtZW5hYmxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJaGFuZGxlZCsrOworCX0KKwogCWlmIChoYW5kbGVkKQogCQljeF93cml0ZShQQ0lfSU5UX1NUQVQsIHBjaV9zdGF0dXMpOwogb3V0OgpAQCAtMTc4OCwxMSArMTg4MywxMSBAQAogCWRldiA9IHRvX2N4MjM4ODUoc2QtPnY0bDJfZGV2KTsKIAogCXN3aXRjaCAobm90aWZpY2F0aW9uKSB7Ci0JY2FzZSBWNEwyX1NVQkRFVl9JUl9SWF9OT1RJRlk6IC8qIENhbGxlZCBpbiBhbiBJUlEgY29udGV4dCAqLworCWNhc2UgVjRMMl9TVUJERVZfSVJfUlhfTk9USUZZOiAvKiBQb3NzaWJseSBjYWxsZWQgaW4gYW4gSVJRIGNvbnRleHQgKi8KIAkJaWYgKHNkID09IGRldi0+c2RfaXIpCiAJCQljeDIzODg1X2lyX3J4X3Y0bDJfZGV2X25vdGlmeShzZCwgKih1MzIgKilhcmcpOwogCQlicmVhazsKLQljYXNlIFY0TDJfU1VCREVWX0lSX1RYX05PVElGWTogLyogQ2FsbGVkIGluIGFuIElSUSBjb250ZXh0ICovCisJY2FzZSBWNEwyX1NVQkRFVl9JUl9UWF9OT1RJRlk6IC8qIFBvc3NpYmx5IGNhbGxlZCBpbiBhbiBJUlEgY29udGV4dCAqLwogCQlpZiAoc2QgPT0gZGV2LT5zZF9pcikKIAkJCWN4MjM4ODVfaXJfdHhfdjRsMl9kZXZfbm90aWZ5KHNkLCAqKHUzMiAqKWFyZyk7CiAJCWJyZWFrOwpAQCAtMTgwMSw2ICsxODk2LDcgQEAKIAogc3RhdGljIHZvaWQgY3gyMzg4NV92NGwyX2Rldl9ub3RpZnlfaW5pdChzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKKwlJTklUX1dPUksoJmRldi0+Y3gyNTg0MF93b3JrLCBjeDIzODg1X2F2X3dvcmtfaGFuZGxlcik7CiAJSU5JVF9XT1JLKCZkZXYtPmlyX3J4X3dvcmssIGN4MjM4ODVfaXJfcnhfd29ya19oYW5kbGVyKTsKIAlJTklUX1dPUksoJmRldi0+aXJfdHhfd29yaywgY3gyMzg4NV9pcl90eF93b3JrX2hhbmRsZXIpOwogCWRldi0+djRsMl9kZXYubm90aWZ5ID0gY3gyMzg4NV92NGwyX2Rldl9ub3RpZnk7CkBAIC0xOTY3LDcgKzIwNjMsNyBAQAogCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6Ci0JCWN4X3NldChQQ0lfSU5UX01TSywgMHgwMTgwMDAwMCk7IC8qIGZvciBOZXRVUCAqLworCQljeDIzODg1X2lycV9hZGRfZW5hYmxlKGRldiwgMHgwMTgwMDAwMCk7IC8qIGZvciBOZXRVUCAqLwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKaW5kZXggZDQ3NDZlMC4uMWEzOTE0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJaWYgKCFpMmNfd2FpdF9kb25lKGkyY19hZGFwKSkKIAkJCXJldHVybiAtRUlPOwogCQlpZiAoIWkyY19zbGF2ZV9kaWRfYWNrKGkyY19hZGFwKSkKLQkJCXJldHVybiAtRUlPOworCQkJcmV0dXJuIC1FTlhJTzsKIAogCQlkcHJpbnRrKDEsICIlcygpIHJldHVybnMgMFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKQEAgLTEyMCwxMSArMTIwLDEyIEBACiAJY3hfd3JpdGUoYnVzLT5yZWdfd2RhdGEsIHdkYXRhKTsKIAljeF93cml0ZShidXMtPnJlZ19jdHJsLCBjdHJsKTsKIAotCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIGVycjsKLQlpZiAocmV0dmFsID09IDApCisJaWYgKCFpMmNfd2FpdF9kb25lKGkyY19hZGFwKSkKIAkJZ290byBlaW87CisJaWYgKCFpMmNfc2xhdmVfZGlkX2FjayhpMmNfYWRhcCkpIHsKKwkJcmV0dmFsID0gLUVOWElPOworCQlnb3RvIGVycjsKKwl9CiAJaWYgKGkyY19kZWJ1ZykgewogCQlwcmludGsoIiA8VyAlMDJ4ICUwMngiLCBtc2ctPmFkZHIgPDwgMSwgbXNnLT5idWZbMF0pOwogCQlpZiAoIShjdHJsICYgSTJDX05PU1RPUCkpCkBAIC0xNDUsMTAgKzE0Niw3IEBACiAJCWN4X3dyaXRlKGJ1cy0+cmVnX3dkYXRhLCB3ZGF0YSk7CiAJCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGN0cmwpOwogCi0JCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpZiAocmV0dmFsID09IDApCisJCWlmICghaTJjX3dhaXRfZG9uZShpMmNfYWRhcCkpCiAJCQlnb3RvIGVpbzsKIAkJaWYgKGkyY19kZWJ1ZykgewogCQkJZHByaW50aygxLCAiICUwMngiLCBtc2ctPmJ1ZltjbnRdKTsKQEAgLTE4NSw3ICsxODMsNyBAQAogCQlpZiAoIWkyY193YWl0X2RvbmUoaTJjX2FkYXApKQogCQkJcmV0dXJuIC1FSU87CiAJCWlmICghaTJjX3NsYXZlX2RpZF9hY2soaTJjX2FkYXApKQotCQkJcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVOWElPOwogCiAKIAkJZHByaW50aygxLCAiJXMoKSByZXR1cm5zIDBcbiIsIF9fZnVuY19fKTsKQEAgLTIwOSwxMSArMjA3LDEyIEBACiAJCWN4X3dyaXRlKGJ1cy0+cmVnX2FkZHIsIG1zZy0+YWRkciA8PCAyNSk7CiAJCWN4X3dyaXRlKGJ1cy0+cmVnX2N0cmwsIGN0cmwpOwogCi0JCXJldHZhbCA9IGkyY193YWl0X2RvbmUoaTJjX2FkYXApOwotCQlpZiAocmV0dmFsIDwgMCkKLQkJCWdvdG8gZXJyOwotCQlpZiAocmV0dmFsID09IDApCisJCWlmICghaTJjX3dhaXRfZG9uZShpMmNfYWRhcCkpCiAJCQlnb3RvIGVpbzsKKwkJaWYgKGNudCA9PSAwICYmICFpMmNfc2xhdmVfZGlkX2FjayhpMmNfYWRhcCkpIHsKKwkJCXJldHZhbCA9IC1FTlhJTzsKKwkJCWdvdG8gZXJyOworCQl9CiAJCW1zZy0+YnVmW2NudF0gPSBjeF9yZWFkKGJ1cy0+cmVnX3JkYXRhKSAmIDB4ZmY7CiAJCWlmIChpMmNfZGVidWcpIHsKIAkJCWRwcmludGsoMSwgIiAlMDJ4IiwgbXNnLT5idWZbY250XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaW5wdXQuYwppbmRleCBkMGIxNjEzLi5iYjYxODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlucHV0LmMKQEAgLTQ0LDQwICs0NCwyNiBAQAogCiAjZGVmaW5lIE1PRFVMRV9OQU1FICJjeDIzODg1IgogCi1zdGF0aWMgdm9pZCBjb252ZXJ0X21lYXN1cmVtZW50KHUzMiB4LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50ICp5KQotewotCWlmICh4ID09IFY0TDJfU1VCREVWX0lSX1BVTFNFX1JYX1NFUV9FTkQpIHsKLQkJeS0+cHVsc2UgPSBmYWxzZTsKLQkJeS0+ZHVyYXRpb24gPSBWNEwyX1NVQkRFVl9JUl9QVUxTRV9NQVhfV0lEVEhfTlM7Ci0JCXJldHVybjsKLQl9Ci0KLQl5LT5wdWxzZSA9ICh4ICYgVjRMMl9TVUJERVZfSVJfUFVMU0VfTEVWRUxfTUFTSykgPyB0cnVlIDogZmFsc2U7Ci0JeS0+ZHVyYXRpb24gPSB4ICYgVjRMMl9TVUJERVZfSVJfUFVMU0VfTUFYX1dJRFRIX05TOwotfQotCiBzdGF0aWMgdm9pZCBjeDIzODg1X2lucHV0X3Byb2Nlc3NfbWVhc3VyZW1lbnRzKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAogCQkJCQkgICAgICAgYm9vbCBvdmVycnVuKQogewogCXN0cnVjdCBjeDIzODg1X2tlcm5lbF9pciAqa2VybmVsX2lyID0gZGV2LT5rZXJuZWxfaXI7Ci0Jc3RydWN0IGlyX3Jhd19ldmVudCBrZXJuZWxfaXJfZXZlbnQ7CiAKLQl1MzIgc2RfaXJfZGF0YVs2NF07CiAJc3NpemVfdCBudW07CiAJaW50IGNvdW50LCBpOwogCWJvb2wgaGFuZGxlID0gZmFsc2U7CisJc3RydWN0IGlyX3Jhd19ldmVudCBpcl9jb3JlX2V2ZW50WzY0XTsKIAogCWRvIHsKIAkJbnVtID0gMDsKLQkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2lyLCBpciwgcnhfcmVhZCwgKHU4ICopIHNkX2lyX2RhdGEsCi0JCQkJIHNpemVvZihzZF9pcl9kYXRhKSwgJm51bSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoZGV2LT5zZF9pciwgaXIsIHJ4X3JlYWQsICh1OCAqKSBpcl9jb3JlX2V2ZW50LAorCQkJCSBzaXplb2YoaXJfY29yZV9ldmVudCksICZudW0pOwogCi0JCWNvdW50ID0gbnVtIC8gc2l6ZW9mKHUzMik7CisJCWNvdW50ID0gbnVtIC8gc2l6ZW9mKHN0cnVjdCBpcl9yYXdfZXZlbnQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCQljb252ZXJ0X21lYXN1cmVtZW50KHNkX2lyX2RhdGFbaV0sICZrZXJuZWxfaXJfZXZlbnQpOwogCQkJaXJfcmF3X2V2ZW50X3N0b3JlKGtlcm5lbF9pci0+aW5wX2RldiwKLQkJCQkJICAgJmtlcm5lbF9pcl9ldmVudCk7CisJCQkJCSAgICZpcl9jb3JlX2V2ZW50W2ldKTsKIAkJCWhhbmRsZSA9IHRydWU7CiAJCX0KIAl9IHdoaWxlIChudW0gIT0gMCk7CkBAIC05OSw4ICs4NSwxMCBAQAogCXN3aXRjaCAoZGV2LT5ib2FyZCkgewogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTg1MDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyOTA6CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgogCQkvKgotCQkgKiBUaGUgb25seSBib2FyZCB3ZSBoYW5kbGUgcmlnaHQgbm93LiAgSG93ZXZlciBvdGhlciBib2FyZHMKKwkJICogVGhlIG9ubHkgYm9hcmRzIHdlIGhhbmRsZSByaWdodCBub3cuICBIb3dldmVyIG90aGVyIGJvYXJkcwogCQkgKiB1c2luZyB0aGUgQ1gyMzg4eCBpbnRlZ3JhdGVkIElSIGNvbnRyb2xsZXIgc2hvdWxkIGJlIHNpbWlsYXIKIAkJICovCiAJCWJyZWFrOwpAQCAtMTQ4LDYgKzEzNiw3IEBACiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxODUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI5MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJCS8qCiAJCSAqIFRoZSBJUiBjb250cm9sbGVyIG9uIHRoaXMgYm9hcmQgb25seSByZXR1cm5zIHB1bHNlIHdpZHRocy4KIAkJICogQW55IG90aGVyIG1vZGUgc2V0dGluZyB3aWxsIGZhaWwgdG8gc2V0IHVwIHRoZSBkZXZpY2UuCkBAIC0xNzAsNyArMTU5LDM4IEBACiAJCSAqIG1hcmsgaXMgcmVjZWl2ZWQgYXMgbG93IGxvZ2ljIGxldmVsOwogCQkgKiBmYWxsaW5nIGVkZ2VzIGFyZSBkZXRlY3RlZCBhcyByaXNpbmcgZWRnZXM7IGV0Yy4KIAkJICovCi0JCXBhcmFtcy5pbnZlcnQgPSB0cnVlOworCQlwYXJhbXMuaW52ZXJ0X2xldmVsID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6CisJCS8qCisJCSAqIFRoZSBJUiBjb250cm9sbGVyIG9uIHRoaXMgYm9hcmQgb25seSByZXR1cm5zIHB1bHNlIHdpZHRocy4KKwkJICogQW55IG90aGVyIG1vZGUgc2V0dGluZyB3aWxsIGZhaWwgdG8gc2V0IHVwIHRoZSBkZXZpY2UuCisJCSAqLworCQlwYXJhbXMubW9kZSA9IFY0TDJfU1VCREVWX0lSX01PREVfUFVMU0VfV0lEVEg7CisJCXBhcmFtcy5lbmFibGUgPSB0cnVlOworCQlwYXJhbXMuaW50ZXJydXB0X2VuYWJsZSA9IHRydWU7CisJCXBhcmFtcy5zaHV0ZG93biA9IGZhbHNlOworCisJCS8qIFNldHVwIGZvciBhIHN0YW5kYXJkIE5FQyBwcm90b2NvbCAqLworCQlwYXJhbXMuY2Fycmllcl9mcmVxID0gMzc5MTc7IC8qIEh6LCA0NTUga0h6LzEyIGZvciBORUMgKi8KKwkJcGFyYW1zLmNhcnJpZXJfcmFuZ2VfbG93ZXIgPSAzMzAwMDsgLyogSHogKi8KKwkJcGFyYW1zLmNhcnJpZXJfcmFuZ2VfdXBwZXIgPSA0MzAwMDsgLyogSHogKi8KKwkJcGFyYW1zLmR1dHlfY3ljbGUgPSAzMzsgLyogcGVyY2VudCwgMzMgcGVyY2VudCBmb3IgTkVDICovCisKKwkJLyoKKwkJICogTkVDIG1heCBwdWxzZSB3aWR0aDogKDY0LzMpLyg0NTUga0h6LzEyKSAqIDE2IG5lY191bml0cworCQkgKiAoNjQvMykvKDQ1NSBrSHovMTIpICogMTYgbmVjX3VuaXRzICogMS4zNzUgPSAxMjM3ODAyMiBucworCQkgKi8KKwkJcGFyYW1zLm1heF9wdWxzZV93aWR0aCA9IDEyMzc4MDIyOyAvKiBucyAqLworCisJCS8qCisJCSAqIE5FQyBub2lzZSBmaWx0ZXIgbWluIHdpZHRoOiAoNjQvMykvKDQ1NSBrSHovMTIpICogMSBuZWNfdW5pdAorCQkgKiAoNjQvMykvKDQ1NSBrSHovMTIpICogMSBuZWNfdW5pdHMgKiAwLjYyNSA9IDM1MTY0OCBucworCQkgKi8KKwkJcGFyYW1zLm5vaXNlX2ZpbHRlcl9taW5fd2lkdGggPSAzNTE2NDg7IC8qIG5zICovCisKKwkJcGFyYW1zLm1vZHVsYXRpb24gPSBmYWxzZTsKKwkJcGFyYW1zLmludmVydF9sZXZlbCA9IHRydWU7CiAJCWJyZWFrOwogCX0KIAl2NGwyX3N1YmRldl9jYWxsKGRldi0+c2RfaXIsIGlyLCByeF9zX3BhcmFtZXRlcnMsICZwYXJhbXMpOwpAQCAtMjQ0LDEyICsyNjQsMjAgQEAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE4NTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjkwOgotCQkvKiBJbnRlZ3JhdGVkIENYMjM4ODggSVIgY29udHJvbGxlciAqLworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTI1MDoKKwkJLyogSW50ZWdyYXRlZCBDWDIzODhbNThdIElSIGNvbnRyb2xsZXIgKi8KIAkJZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOwogCQlhbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfQUxMOwogCQkvKiBUaGUgZ3JleSBIYXVwcGF1Z2UgUkMtNSByZW1vdGUgKi8KIAkJcmNfbWFwID0gUkNfTUFQX1JDNV9IQVVQUEFVR0VfTkVXOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MDoKKwkJLyogSW50ZWdyYXRlZCBDWDIzODg1IElSIGNvbnRyb2xsZXIgKi8KKwkJZHJpdmVyX3R5cGUgPSBSQ19EUklWRVJfSVJfUkFXOworCQlhbGxvd2VkX3Byb3RvcyA9IElSX1RZUEVfQUxMOworCQkvKiBBIGd1ZXNzIGF0IHRoZSByZW1vdGUgKi8KKwkJcmNfbWFwID0gUkNfTUFQX1RFVklJX05FQzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWlyLmMKaW5kZXggNmNlYWJkNC4uNzEyNTI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1pci5jCkBAIC03Miw3ICs3Miw3IEBACiAKIH0KIAotLyogQ2FsbGVkIGluIGFuIElSUSBjb250ZXh0ICovCisvKiBQb3NzaWJseSBjYWxsZWQgaW4gYW4gSVJRIGNvbnRleHQgKi8KIHZvaWQgY3gyMzg4NV9pcl9yeF92NGwyX2Rldl9ub3RpZnkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGV2ZW50cykKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHRvX2N4MjM4ODUoc2QtPnY0bDJfZGV2KTsKQEAgLTg2LDEwICs4NiwxOCBAQAogCQlzZXRfYml0KENYMjM4ODVfSVJfUlhfSFdfRklGT19PVkVSUlVOLCBub3RpZmljYXRpb25zKTsKIAlpZiAoZXZlbnRzICYgVjRMMl9TVUJERVZfSVJfUlhfU1dfRklGT19PVkVSUlVOKQogCQlzZXRfYml0KENYMjM4ODVfSVJfUlhfU1dfRklGT19PVkVSUlVOLCBub3RpZmljYXRpb25zKTsKLQlzY2hlZHVsZV93b3JrKCZkZXYtPmlyX3J4X3dvcmspOworCisJLyoKKwkgKiBGb3IgdGhlIGludGVncmF0ZWQgQVYgY29yZSwgd2UgYXJlIGFscmVhZHkgaW4gYSB3b3JrcXVldWUgY29udGV4dC4KKwkgKiBGb3IgdGhlIENYMjM4ODggaW50ZWdyYXRlZCBJUiwgd2UgYXJlIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorCSAqLworCWlmIChzZCA9PSBkZXYtPnNkX2N4MjU4NDApCisJCWN4MjM4ODVfaXJfcnhfd29ya19oYW5kbGVyKCZkZXYtPmlyX3J4X3dvcmspOworCWVsc2UKKwkJc2NoZWR1bGVfd29yaygmZGV2LT5pcl9yeF93b3JrKTsKIH0KIAotLyogQ2FsbGVkIGluIGFuIElSUSBjb250ZXh0ICovCisvKiBQb3NzaWJseSBjYWxsZWQgaW4gYW4gSVJRIGNvbnRleHQgKi8KIHZvaWQgY3gyMzg4NV9pcl90eF92NGwyX2Rldl9ub3RpZnkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGV2ZW50cykKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHRvX2N4MjM4ODUoc2QtPnY0bDJfZGV2KTsKQEAgLTk3LDUgKzEwNSwxMyBAQAogCiAJaWYgKGV2ZW50cyAmIFY0TDJfU1VCREVWX0lSX1RYX0ZJRk9fU0VSVklDRV9SRVEpCiAJCXNldF9iaXQoQ1gyMzg4NV9JUl9UWF9GSUZPX1NFUlZJQ0VfUkVRLCBub3RpZmljYXRpb25zKTsKLQlzY2hlZHVsZV93b3JrKCZkZXYtPmlyX3R4X3dvcmspOworCisJLyoKKwkgKiBGb3IgdGhlIGludGVncmF0ZWQgQVYgY29yZSwgd2UgYXJlIGFscmVhZHkgaW4gYSB3b3JrcXVldWUgY29udGV4dC4KKwkgKiBGb3IgdGhlIENYMjM4ODggaW50ZWdyYXRlZCBJUiwgd2UgYXJlIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorCSAqLworCWlmIChzZCA9PSBkZXYtPnNkX2N4MjU4NDApCisJCWN4MjM4ODVfaXJfdHhfd29ya19oYW5kbGVyKCZkZXYtPmlyX3R4X3dvcmspOworCWVsc2UKKwkJc2NoZWR1bGVfd29yaygmZGV2LT5pcl90eF93b3JrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXJlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtcmVnLmgKaW5kZXggYzBiYzlhMC4uYTI4NzcyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtcmVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtcmVnLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogI2RlZmluZSBERVZfQ05UUkwyCTB4MDAwNDAwMDAKIAogI2RlZmluZSBQQ0lfTVNLX0lSICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgUENJX01TS19BVl9DT1JFICAgKDEgPDwgMjcpCiAjZGVmaW5lIFBDSV9NU0tfR1BJTzEgICAgICgxIDw8IDI0KQogI2RlZmluZSBQQ0lfTVNLX0dQSU8wICAgICAoMSA8PCAyMykKICNkZWZpbmUgUENJX01TS19BUEJfRE1BICAgKDEgPDwgMTIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCmluZGV4IDcwOGE4YzcuLmMwYjYwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZiaS5jCkBAIC03NCw3ICs3NCw3IEBACiAJcS0+Y291bnQgPSAxOwogCiAJLyogZW5hYmxlIGlycXMgKi8KLQljeF9zZXQoUENJX0lOVF9NU0ssIGN4X3JlYWQoUENJX0lOVF9NU0spIHwgMHgwMSk7CisJY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShkZXYsIDB4MDEpOwogCWN4X3NldChWSURfQV9JTlRfTVNLLCAweDAwMDAyMik7CiAKIAkvKiBzdGFydCBkbWEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCmluZGV4IDRlNDRkY2QuLmRhNjZlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJcS0+Y291bnQgPSAxOwogCiAJLyogZW5hYmxlIGlycSAqLwotCWN4X3NldChQQ0lfSU5UX01TSywgY3hfcmVhZChQQ0lfSU5UX01TSykgfCAweDAxKTsKKwljeDIzODg1X2lycV9hZGRfZW5hYmxlKGRldiwgMHgwMSk7CiAJY3hfc2V0KFZJRF9BX0lOVF9NU0ssIDB4MDAwMDExKTsKIAogCS8qIHN0YXJ0IGRtYSAqLwpAQCAtMTIwNSw2ICsxMjA1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlkaW9jX2xvZ19zdGF0dXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBwcml2OworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKKworCXByaW50ayhLRVJOX0lORk8KKwkJIiVzLzA6ID09PT09PT09PT09PSAgU1RBUlQgTE9HIFNUQVRVUyAgPT09PT09PT09PT09XG4iLAorCSAgICAgICBkZXYtPm5hbWUpOworCWNhbGxfYWxsKGRldiwgY29yZSwgbG9nX3N0YXR1cyk7CisJcHJpbnRrKEtFUk5fSU5GTworCQkiJXMvMDogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCisJICAgICAgIGRldi0+bmFtZSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKQogewpAQCAtMTQxMCw2ICsxNDI1LDcgQEAKIAkudmlkaW9jX2VudW1faW5wdXQgICAgPSB2aWRpb2NfZW51bV9pbnB1dCwKIAkudmlkaW9jX2dfaW5wdXQgICAgICAgPSB2aWRpb2NfZ19pbnB1dCwKIAkudmlkaW9jX3NfaW5wdXQgICAgICAgPSB2aWRpb2Nfc19pbnB1dCwKKwkudmlkaW9jX2xvZ19zdGF0dXMgICAgPSB2aWRpb2NfbG9nX3N0YXR1cywKIAkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgPSB2aWRpb2NfcXVlcnljdHJsLAogCS52aWRpb2NfZ19jdHJsICAgICAgICA9IHZpZGlvY19nX2N0cmwsCiAJLnZpZGlvY19zX2N0cmwgICAgICAgID0gdmlkaW9jX3NfY3RybCwKQEAgLTE0NDksNyArMTQ2NSw3IEBACiB2b2lkIGN4MjM4ODVfdmlkZW9fdW5yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldikKIHsKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JY3hfY2xlYXIoUENJX0lOVF9NU0ssIDEpOworCWN4MjM4ODVfaXJxX3JlbW92ZShkZXYsIDB4MDEpOwogCiAJaWYgKGRldi0+dmlkZW9fZGV2KSB7CiAJCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKGRldi0+dmlkZW9fZGV2KSkKQEAgLTE0ODYsNyArMTUwMiw4IEBACiAJCVZJRF9BX0RNQV9DVEwsIDB4MTEsIDB4MDApOwogCiAJLyogRG9uJ3QgZW5hYmxlIFZCSSB5ZXQgKi8KLQljeF9zZXQoUENJX0lOVF9NU0ssIDEpOworCisJY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShkZXYsIDB4MDEpOwogCiAJaWYgKFRVTkVSX0FCU0VOVCAhPSBkZXYtPnR1bmVyX3R5cGUpIHsKIAkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaAppbmRleCBhMzNmMmI3Li5lZDk0YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKQEAgLTMyNSw2ICszMjUsNyBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmxtbWlvOwogCXU4ICAgICAgICAgICAgICAgICAgICAgICAgIF9faW9tZW0gKmJtbWlvOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9pcnFtYXNrOworCXNwaW5sb2NrX3QJCSAgIHBjaV9pcnFtYXNrX2xvY2s7IC8qIHByb3RlY3RzIG1hc2sgcmVnIHRvbyAqLwogCWludCAgICAgICAgICAgICAgICAgICAgICAgIGh3cmV2aXNpb247CiAKIAkvKiBUaGlzIHZhbHVkIGlzIGJvYXJkIHNwZWNpZmljIGFuZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUKQEAgLTM2NSw2ICszNjYsNyBAQAogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIHJhZGlvX2FkZHI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgaGFzX3JhZGlvOwogCXN0cnVjdCB2NGwyX3N1YmRldiAJICAgKnNkX2N4MjU4NDA7CisJc3RydWN0IHdvcmtfc3RydWN0CSAgIGN4MjU4NDBfd29yazsKIAogCS8qIEluZnJhcmVkICovCiAJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgKnNkX2lyOwpAQCAtNDAzLDcgKzQwNSw4IEBACiAjZGVmaW5lIGNhbGxfYWxsKGRldiwgbywgZiwgYXJncy4uLikgXAogCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCiAKLSNkZWZpbmUgQ1gyMzg4NV9IV184ODhfSVIgKDEgPDwgMCkKKyNkZWZpbmUgQ1gyMzg4NV9IV184ODhfSVIgICgxIDw8IDApCisjZGVmaW5lIENYMjM4ODVfSFdfQVZfQ09SRSAoMSA8PCAxKQogCiAjZGVmaW5lIGNhbGxfaHcoZGV2LCBncnBpZCwgbywgZiwgYXJncy4uLikgXAogCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCBncnBpZCwgbywgZiwgIyNhcmdzKQpAQCAtNDg0LDYgKzQ4NywxMCBAQAogZXh0ZXJuIHZvaWQgY3gyMzg4NV9ncGlvX2VuYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2ssCiAJaW50IGFzb3V0cHV0KTsKIAorZXh0ZXJuIHZvaWQgY3gyMzg4NV9pcnFfYWRkX2VuYWJsZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiwgdTMyIG1hc2spOworZXh0ZXJuIHZvaWQgY3gyMzg4NV9pcnFfZW5hYmxlKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgbWFzayk7CitleHRlcm4gdm9pZCBjeDIzODg1X2lycV9kaXNhYmxlKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgbWFzayk7CitleHRlcm4gdm9pZCBjeDIzODg1X2lycV9yZW1vdmUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIHUzMiBtYXNrKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MjM4ODUtY2FyZHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODgtaXIuYwppbmRleCBmNjNkMzc4Li4yNTAyYTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4OC1pci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg4LWlyLmMKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgogCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogCkBAIC02MCw2ICs2MSw4IEBACiAjZGVmaW5lIENOVFJMX0NQTAkweDAwMDAxMDAwCiAjZGVmaW5lIENOVFJMX0xCTQkweDAwMDAyMDAwCiAjZGVmaW5lIENOVFJMX1IJCTB4MDAwMDQwMDAKKy8qIENYMjM4ODggc3BlY2lmaWMgY29udHJvbCBmbGFnICovCisjZGVmaW5lIENOVFJMX0lWTwkweDAwMDA4MDAwCiAKICNkZWZpbmUgQ1gyMzg4OF9JUl9UWENMS19SRUcJMHgxNzAwMDQKICNkZWZpbmUgVFhDTEtfVENECTB4MDAwMEZGRkYKQEAgLTExMSw4ICsxMTQsMTggQEAKICNkZWZpbmUgQ1gyMzg4OF9WSURDTEtfRlJFUQkxMDgwMDAwMDAgLyogMTA4IE1IeiwgQlQuNjU2ICovCiAjZGVmaW5lIENYMjM4ODhfSVJfUkVGQ0xLX0ZSRVEJKENYMjM4ODhfVklEQ0xLX0ZSRVEgLyAyKQogCi0jZGVmaW5lIENYMjM4ODhfSVJfUlhfS0ZJRk9fU0laRQkoNTEyICogc2l6ZW9mKHUzMikpCi0jZGVmaW5lIENYMjM4ODhfSVJfVFhfS0ZJRk9fU0laRQkoNTEyICogc2l6ZW9mKHUzMikpCisvKgorICogV2UgdXNlIHRoaXMgdW5pb24gaW50ZXJuYWxseSBmb3IgY29udmVuaWVuY2UsIGJ1dCBjYWxsZXJzIHRvIHR4X3dyaXRlCisgKiBhbmQgcnhfcmVhZCB3aWxsIGJlIGV4cGVjdGluZyByZWNvcmRzIG9mIHR5cGUgc3RydWN0IGlyX3Jhd19ldmVudC4KKyAqIEFsd2F5cyBlbnN1cmUgdGhlIHNpemUgb2YgdGhpcyB1bmlvbiBpcyBkaWN0YXRlZCBieSBzdHJ1Y3QgaXJfcmF3X2V2ZW50LgorICovCit1bmlvbiBjeDIzODg4X2lyX2ZpZm9fcmVjIHsKKwl1MzIgaHdfZmlmb19kYXRhOworCXN0cnVjdCBpcl9yYXdfZXZlbnQgaXJfY29yZV9kYXRhOworfTsKKworI2RlZmluZSBDWDIzODg4X0lSX1JYX0tGSUZPX1NJWkUgICAgKDI1NiAqIHNpemVvZih1bmlvbiBjeDIzODg4X2lyX2ZpZm9fcmVjKSkKKyNkZWZpbmUgQ1gyMzg4OF9JUl9UWF9LRklGT19TSVpFICAgICgyNTYgKiBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYykpCiAKIHN0cnVjdCBjeDIzODg4X2lyX3N0YXRlIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CkBAIC00MjMsNiArNDM2LDEzIEBACiAJCQkgICBpbnZlcnQgPyBDTlRSTF9DUEwgOiAwKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNvbnRyb2xfdHhfbGV2ZWxfaW52ZXJ0KHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LAorCQkJCQkgIGJvb2wgaW52ZXJ0KQoreworCWN4MjM4ODhfaXJfYW5kX29yNChkZXYsIENYMjM4ODhfSVJfQ05UUkxfUkVHLCB+Q05UUkxfSVZPLAorCQkJICAgaW52ZXJ0ID8gQ05UUkxfSVZPIDogMCk7Cit9CisKIC8qCiAgKiBJUiBSeCAmIFR4IENsb2NrIFJlZ2lzdGVyIGhlbHBlcnMKICAqLwpAQCAtNDQ5LDggKzQ2OSw4IEBACiB7CiAJdTY0IHB1bHNlX2Nsb2NrczsKIAotCWlmIChucyA+IFY0TDJfU1VCREVWX0lSX1BVTFNFX01BWF9XSURUSF9OUykKLQkJbnMgPSBWNEwyX1NVQkRFVl9JUl9QVUxTRV9NQVhfV0lEVEhfTlM7CisJaWYgKG5zID4gSVJfTUFYX0RVUkFUSU9OKQorCQlucyA9IElSX01BWF9EVVJBVElPTjsKIAlwdWxzZV9jbG9ja3MgPSBuc190b19wdWxzZV9jbG9ja3MobnMpOwogCSpkaXZpZGVyID0gcHVsc2VfY2xvY2tzX3RvX2Nsb2NrX2RpdmlkZXIocHVsc2VfY2xvY2tzKTsKIAljeDIzODg4X2lyX3dyaXRlNChkZXYsIENYMjM4ODhfSVJfVFhDTEtfUkVHLCAqZGl2aWRlcik7CkBAIC00NjIsOCArNDgyLDggQEAKIHsKIAl1NjQgcHVsc2VfY2xvY2tzOwogCi0JaWYgKG5zID4gVjRMMl9TVUJERVZfSVJfUFVMU0VfTUFYX1dJRFRIX05TKQotCQlucyA9IFY0TDJfU1VCREVWX0lSX1BVTFNFX01BWF9XSURUSF9OUzsKKwlpZiAobnMgPiBJUl9NQVhfRFVSQVRJT04pCisJCW5zID0gSVJfTUFYX0RVUkFUSU9OOwogCXB1bHNlX2Nsb2NrcyA9IG5zX3RvX3B1bHNlX2Nsb2Nrcyhucyk7CiAJKmRpdmlkZXIgPSBwdWxzZV9jbG9ja3NfdG9fY2xvY2tfZGl2aWRlcihwdWxzZV9jbG9ja3MpOwogCWN4MjM4ODhfaXJfd3JpdGU0KGRldiwgQ1gyMzg4OF9JUl9SWENMS19SRUcsICpkaXZpZGVyKTsKQEAgLTUyNiw4ICs1NDYsOCBAQAogCXUzMiBpcnFlbiA9IGN4MjM4ODhfaXJfcmVhZDQoZGV2LCBDWDIzODg4X0lSX0lSUUVOX1JFRyk7CiAJdTMyIHN0YXRzID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfU1RBVFNfUkVHKTsKIAotCXUzMiByeF9kYXRhW0ZJRk9fUlhfREVQVEhdOwotCWludCBpLCBqLCBrOworCXVuaW9uIGN4MjM4ODhfaXJfZmlmb19yZWMgcnhfZGF0YVtGSUZPX1JYX0RFUFRIXTsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKIAl1MzIgZXZlbnRzLCB2OwogCWludCB0c3IsIHJzciwgcnRvLCByb3IsIHRzZSwgcnNlLCBydGUsIHJvZSwga3JvcjsKIApAQCAtNTg4LDExICs2MDgsMTIgQEAKIAkJCWZvciAoaiA9IDA7CiAJCQkgICAgICh2ICYgRklGT19SWF9ORFYpICYmIGogPCBGSUZPX1JYX0RFUFRIOyBqKyspIHsKIAkJCQl2ID0gY3gyMzg4OF9pcl9yZWFkNChkZXYsIENYMjM4ODhfSVJfRklGT19SRUcpOwotCQkJCXJ4X2RhdGFbaSsrXSA9IHYgJiB+RklGT19SWF9ORFY7CisJCQkJcnhfZGF0YVtpXS5od19maWZvX2RhdGEgPSB2ICYgfkZJRk9fUlhfTkRWOworCQkJCWkrKzsKIAkJCX0KIAkJCWlmIChpID09IDApCiAJCQkJYnJlYWs7Ci0JCQlqID0gaSAqIHNpemVvZih1MzIpOworCQkJaiA9IGkgKiBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyk7CiAJCQlrID0ga2ZpZm9faW5fbG9ja2VkKCZzdGF0ZS0+cnhfa2ZpZm8sCiAJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKikgcnhfZGF0YSwgaiwKIAkJCQkgICAgICAmc3RhdGUtPnJ4X2tmaWZvX2xvY2spOwpAQCAtNjUxLDEwICs2NzIsMTEgQEAKIAl1MTYgZGl2aWRlciA9ICh1MTYpIGF0b21pY19yZWFkKCZzdGF0ZS0+cnhjbGtfZGl2aWRlcik7CiAKIAl1bnNpZ25lZCBpbnQgaSwgbjsKLQl1MzIgKnA7Ci0JdTMyIHUsIHY7CisJdW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyAqcDsKKwl1bnNpZ25lZCB1LCB2OwogCi0JbiA9IGNvdW50IC8gc2l6ZW9mKHUzMikgKiBzaXplb2YodTMyKTsKKwluID0gY291bnQgLyBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYykKKwkJKiBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyk7CiAJaWYgKG4gPT0gMCkgewogCQkqbnVtID0gMDsKIAkJcmV0dXJuIDA7CkBAIC02NjIsMjYgKzY4NCwyOCBAQAogCiAJbiA9IGtmaWZvX291dF9sb2NrZWQoJnN0YXRlLT5yeF9rZmlmbywgYnVmLCBuLCAmc3RhdGUtPnJ4X2tmaWZvX2xvY2spOwogCi0JbiAvPSBzaXplb2YodTMyKTsKLQkqbnVtID0gbiAqIHNpemVvZih1MzIpOworCW4gLz0gc2l6ZW9mKHVuaW9uIGN4MjM4ODhfaXJfZmlmb19yZWMpOworCSpudW0gPSBuICogc2l6ZW9mKHVuaW9uIGN4MjM4ODhfaXJfZmlmb19yZWMpOwogCi0JZm9yIChwID0gKHUzMiAqKSBidWYsIGkgPSAwOyBpIDwgbjsgcCsrLCBpKyspIHsKLQkJaWYgKCgqcCAmIEZJRk9fUlhUWF9SVE8pID09IEZJRk9fUlhUWF9SVE8pIHsKLQkJCSpwID0gVjRMMl9TVUJERVZfSVJfUFVMU0VfUlhfU0VRX0VORDsKKwlmb3IgKHAgPSAodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyAqKSBidWYsIGkgPSAwOyBpIDwgbjsgcCsrLCBpKyspIHsKKworCQlpZiAoKHAtPmh3X2ZpZm9fZGF0YSAmIEZJRk9fUlhUWF9SVE8pID09IEZJRk9fUlhUWF9SVE8pIHsKKwkJCS8qIEFzc3VtZSBSVE8gd2FzIGJlY2F1c2Ugb2Ygbm8gSVIgbGlnaHQgaW5wdXQgKi8KKwkJCXUgPSAwOwogCQkJdjRsMl9kYmcoMiwgaXJfODg4X2RlYnVnLCBzZCwgInJ4IHJlYWQ6IGVuZCBvZiByeFxuIik7Ci0JCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXUgPSAocC0+aHdfZmlmb19kYXRhICYgRklGT19SWFRYX0xWTCkgPyAxIDogMDsKKwkJCWlmIChpbnZlcnQpCisJCQkJdSA9IHUgPyAwIDogMTsKIAkJfQogCi0JCXUgPSAoKnAgJiBGSUZPX1JYVFhfTFZMKSA/IFY0TDJfU1VCREVWX0lSX1BVTFNFX0xFVkVMX01BU0sgOiAwOwotCQlpZiAoaW52ZXJ0KQotCQkJdSA9IHUgPyAwIDogVjRMMl9TVUJERVZfSVJfUFVMU0VfTEVWRUxfTUFTSzsKKwkJdiA9ICh1bnNpZ25lZCkgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoCisJCQkJICAodTE2KSAocC0+aHdfZmlmb19kYXRhICYgRklGT19SWFRYKSwgZGl2aWRlcik7CisJCWlmICh2ID4gSVJfTUFYX0RVUkFUSU9OKQorCQkJdiA9IElSX01BWF9EVVJBVElPTjsKIAotCQl2ID0gKHUzMikgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoKHUxNikgKCpwICYgRklGT19SWFRYKSwKLQkJCQkJCSAgZGl2aWRlcik7Ci0JCWlmICh2ID49IFY0TDJfU1VCREVWX0lSX1BVTFNFX01BWF9XSURUSF9OUykKLQkJCXYgPSBWNEwyX1NVQkRFVl9JUl9QVUxTRV9NQVhfV0lEVEhfTlMgLSAxOwotCi0JCSpwID0gdSB8IHY7CisJCXAtPmlyX2NvcmVfZGF0YS5wdWxzZSA9IHU7CisJCXAtPmlyX2NvcmVfZGF0YS5kdXJhdGlvbiA9IHY7CiAKIAkJdjRsMl9kYmcoMiwgaXJfODg4X2RlYnVnLCBzZCwgInJ4IHJlYWQ6ICUxMHUgbnMgICVzXG4iLAogCQkJIHYsIHUgPyAibWFyayIgOiAic3BhY2UiKTsKQEAgLTc0MCw3ICs3NjQsOCBAQAogCiAJby0+bW9kZSA9IHAtPm1vZGUgPSBWNEwyX1NVQkRFVl9JUl9NT0RFX1BVTFNFX1dJRFRIOwogCi0Jby0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHAtPmJ5dGVzX3Blcl9kYXRhX2VsZW1lbnQgPSBzaXplb2YodTMyKTsKKwlvLT5ieXRlc19wZXJfZGF0YV9lbGVtZW50ID0gcC0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudAorCQkJCSAgPSBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyk7CiAKIAkvKiBCZWZvcmUgd2UgdHdlYWsgdGhlIGhhcmR3YXJlLCB3ZSBoYXZlIHRvIGRpc2FibGUgdGhlIHJlY2VpdmVyICovCiAJaXJxZW5hYmxlX3J4KGRldiwgMCk7CkBAIC03NjIsMTIgKzc4NywxNSBAQAogCQkJCQkgICAgJnAtPmNhcnJpZXJfcmFuZ2VfdXBwZXIpOwogCQlvLT5jYXJyaWVyX3JhbmdlX2xvd2VyID0gcC0+Y2Fycmllcl9yYW5nZV9sb3dlcjsKIAkJby0+Y2Fycmllcl9yYW5nZV91cHBlciA9IHAtPmNhcnJpZXJfcmFuZ2VfdXBwZXI7CisKKwkJcC0+bWF4X3B1bHNlX3dpZHRoID0KKwkJCSh1MzIpIHB1bHNlX3dpZHRoX2NvdW50X3RvX25zKEZJRk9fUlhUWCwgcnhjbGtfZGl2aWRlcik7CiAJfSBlbHNlIHsKIAkJcC0+bWF4X3B1bHNlX3dpZHRoID0KIAkJCSAgICByeGNsa19yeF9zX21heF9wdWxzZV93aWR0aChkZXYsIHAtPm1heF9wdWxzZV93aWR0aCwKIAkJCQkJCSAgICAgICAmcnhjbGtfZGl2aWRlcik7Ci0JCW8tPm1heF9wdWxzZV93aWR0aCA9IHAtPm1heF9wdWxzZV93aWR0aDsKIAl9CisJby0+bWF4X3B1bHNlX3dpZHRoID0gcC0+bWF4X3B1bHNlX3dpZHRoOwogCWF0b21pY19zZXQoJnN0YXRlLT5yeGNsa19kaXZpZGVyLCByeGNsa19kaXZpZGVyKTsKIAogCXAtPm5vaXNlX2ZpbHRlcl9taW5fd2lkdGggPQpAQCAtNzgyLDggKzgxMCw4IEBACiAKIAljb250cm9sX3J4X3NfZWRnZV9kZXRlY3Rpb24oZGV2LCBDTlRSTF9FREdfQk9USCk7CiAKLQlvLT5pbnZlcnQgPSBwLT5pbnZlcnQ7Ci0JYXRvbWljX3NldCgmc3RhdGUtPnJ4X2ludmVydCwgcC0+aW52ZXJ0KTsKKwlvLT5pbnZlcnRfbGV2ZWwgPSBwLT5pbnZlcnRfbGV2ZWw7CisJYXRvbWljX3NldCgmc3RhdGUtPnJ4X2ludmVydCwgcC0+aW52ZXJ0X2xldmVsKTsKIAogCW8tPmludGVycnVwdF9lbmFibGUgPSBwLT5pbnRlcnJ1cHRfZW5hYmxlOwogCW8tPmVuYWJsZSA9IHAtPmVuYWJsZTsKQEAgLTg2NCw3ICs4OTIsOCBAQAogCiAJby0+bW9kZSA9IHAtPm1vZGUgPSBWNEwyX1NVQkRFVl9JUl9NT0RFX1BVTFNFX1dJRFRIOwogCi0Jby0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHAtPmJ5dGVzX3Blcl9kYXRhX2VsZW1lbnQgPSBzaXplb2YodTMyKTsKKwlvLT5ieXRlc19wZXJfZGF0YV9lbGVtZW50ID0gcC0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudAorCQkJCSAgPSBzaXplb2YodW5pb24gY3gyMzg4OF9pcl9maWZvX3JlYyk7CiAKIAkvKiBCZWZvcmUgd2UgdHdlYWsgdGhlIGhhcmR3YXJlLCB3ZSBoYXZlIHRvIGRpc2FibGUgdGhlIHRyYW5zbWl0dGVyICovCiAJaXJxZW5hYmxlX3R4KGRldiwgMCk7CkBAIC04ODAsMTIgKzkwOSwxNSBAQAogCiAJCXAtPmR1dHlfY3ljbGUgPSBjZHV0eV90eF9zX2R1dHlfY3ljbGUoZGV2LCBwLT5kdXR5X2N5Y2xlKTsKIAkJby0+ZHV0eV9jeWNsZSA9IHAtPmR1dHlfY3ljbGU7CisKKwkJcC0+bWF4X3B1bHNlX3dpZHRoID0KKwkJCSh1MzIpIHB1bHNlX3dpZHRoX2NvdW50X3RvX25zKEZJRk9fUlhUWCwgdHhjbGtfZGl2aWRlcik7CiAJfSBlbHNlIHsKIAkJcC0+bWF4X3B1bHNlX3dpZHRoID0KIAkJCSAgICB0eGNsa190eF9zX21heF9wdWxzZV93aWR0aChkZXYsIHAtPm1heF9wdWxzZV93aWR0aCwKIAkJCQkJCSAgICAgICAmdHhjbGtfZGl2aWRlcik7Ci0JCW8tPm1heF9wdWxzZV93aWR0aCA9IHAtPm1heF9wdWxzZV93aWR0aDsKIAl9CisJby0+bWF4X3B1bHNlX3dpZHRoID0gcC0+bWF4X3B1bHNlX3dpZHRoOwogCWF0b21pY19zZXQoJnN0YXRlLT50eGNsa19kaXZpZGVyLCB0eGNsa19kaXZpZGVyKTsKIAogCXAtPnJlc29sdXRpb24gPSBjbG9ja19kaXZpZGVyX3RvX3Jlc29sdXRpb24odHhjbGtfZGl2aWRlcik7CkBAIC04OTQsOCArOTI2LDExIEBACiAJLyogRklYTUUgLSBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIHJlc29sdXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZSAqLwogCWNvbnRyb2xfdHhfaXJxX3dhdGVybWFyayhkZXYsIFRYX0ZJRk9fSEFMRl9FTVBUWSk7CiAKLQljb250cm9sX3R4X3BvbGFyaXR5X2ludmVydChkZXYsIHAtPmludmVydCk7Ci0Jby0+aW52ZXJ0ID0gcC0+aW52ZXJ0OworCWNvbnRyb2xfdHhfcG9sYXJpdHlfaW52ZXJ0KGRldiwgcC0+aW52ZXJ0X2NhcnJpZXJfc2Vuc2UpOworCW8tPmludmVydF9jYXJyaWVyX3NlbnNlID0gcC0+aW52ZXJ0X2NhcnJpZXJfc2Vuc2U7CisKKwljb250cm9sX3R4X2xldmVsX2ludmVydChkZXYsIHAtPmludmVydF9sZXZlbCk7CisJby0+aW52ZXJ0X2xldmVsID0gcC0+aW52ZXJ0X2xldmVsOwogCiAJby0+aW50ZXJydXB0X2VuYWJsZSA9IHAtPmludGVycnVwdF9lbmFibGU7CiAJby0+ZW5hYmxlID0gcC0+ZW5hYmxlOwpAQCAtOTg4LDEyICsxMDIzLDEwIEBACiAJCQkgICItJTFkLyslMWQsICV1IHRvICV1IEh6XG4iLCBpLCBqLAogCQkJICBjbG9ja19kaXZpZGVyX3RvX2ZyZXEocnhjbGssIDE2ICsgaiksCiAJCQkgIGNsb2NrX2RpdmlkZXJfdG9fZnJlcShyeGNsaywgMTYgLSBpKSk7Ci0JfSBlbHNlIHsKLQkJdjRsMl9pbmZvKHNkLCAiXHRNYXggbWVhc3VyYWJsZSBwdWxzZSB3aWR0aDogICAgICAgICV1IHVzLCAiCi0JCQkgICIlbGx1IG5zXG4iLAotCQkJICBwdWxzZV93aWR0aF9jb3VudF90b191cyhGSUZPX1JYVFgsIHJ4Y2xrKSwKLQkJCSAgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoRklGT19SWFRYLCByeGNsaykpOwogCX0KKwl2NGwyX2luZm8oc2QsICJcdE1heCBtZWFzdXJhYmxlIHB1bHNlIHdpZHRoOiAgICAgICAgJXUgdXMsICVsbHUgbnNcbiIsCisJCSAgcHVsc2Vfd2lkdGhfY291bnRfdG9fdXMoRklGT19SWFRYLCByeGNsayksCisJCSAgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoRklGT19SWFRYLCByeGNsaykpOwogCXY0bDJfaW5mbyhzZCwgIlx0TG93IHBhc3MgZmlsdGVyOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKIAkJICBmaWx0ciA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCWlmIChmaWx0cikKQEAgLTEwMjUsMTkgKzEwNTgsMjAgQEAKIAkJICBjbnRybCAmIENOVFJMX1RGRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCXY0bDJfaW5mbyhzZCwgIlx0RklGTyBpbnRlcnJ1cHQgd2F0ZXJtYXJrOiAgICAgICAgICAlc1xuIiwKIAkJICBjbnRybCAmIENOVFJMX1RJQyA/ICJub3QgZW1wdHkiIDogImhhbGYgZnVsbCBvciBsZXNzIik7Ci0JdjRsMl9pbmZvKHNkLCAiXHRTaWduYWwgcG9sYXJpdHk6ICAgICAgICAgICAgICAgICAgICVzXG4iLAotCQkgIGNudHJsICYgQ05UUkxfQ1BMID8gIjA6bWFyayAxOnNwYWNlIiA6ICIwOnNwYWNlIDE6bWFyayIpOworCXY0bDJfaW5mbyhzZCwgIlx0T3V0cHV0IHBpbiBsZXZlbCBpbnZlcnNpb24gICAgICAgICAlc1xuIiwKKwkJICBjbnRybCAmIENOVFJMX0lWTyA/ICJ5ZXMiIDogIm5vIik7CisJdjRsMl9pbmZvKHNkLCAiXHRDYXJyaWVyIHBvbGFyaXR5OiAgICAgICAgICAgICAgICAgICVzXG4iLAorCQkgIGNudHJsICYgQ05UUkxfQ1BMID8gInNwYWNlOmJ1cnN0IG1hcms6bm9idXJzdCIKKwkJCQkgICAgOiAic3BhY2U6bm9idXJzdCBtYXJrOmJ1cnN0Iik7CiAJaWYgKGNudHJsICYgQ05UUkxfTU9EKSB7CiAJCXY0bDJfaW5mbyhzZCwgIlx0Q2FycmllciAoMTYgY2xvY2tzKTogICAgICAgICAgICAgICAldSBIelxuIiwKIAkJCSAgY2xvY2tfZGl2aWRlcl90b19jYXJyaWVyX2ZyZXEodHhjbGspKTsKIAkJdjRsMl9pbmZvKHNkLCAiXHRDYXJyaWVyIGR1dHkgY3ljbGU6ICAgICAgICAgICAgICAgICUydS8xNlxuIiwKIAkJCSAgY2R1dHkgKyAxKTsKLQl9IGVsc2UgewotCQl2NGwyX2luZm8oc2QsICJcdE1heCBwdWxzZSB3aWR0aDogICAgICAgICAgICAgICAgICAgJXUgdXMsICIKLQkJCSAgIiVsbHUgbnNcbiIsCi0JCQkgIHB1bHNlX3dpZHRoX2NvdW50X3RvX3VzKEZJRk9fUlhUWCwgdHhjbGspLAotCQkJICBwdWxzZV93aWR0aF9jb3VudF90b19ucyhGSUZPX1JYVFgsIHR4Y2xrKSk7CiAJfQorCXY0bDJfaW5mbyhzZCwgIlx0TWF4IHB1bHNlIHdpZHRoOiAgICAgICAgICAgICAgICAgICAldSB1cywgJWxsdSBuc1xuIiwKKwkJICBwdWxzZV93aWR0aF9jb3VudF90b191cyhGSUZPX1JYVFgsIHR4Y2xrKSwKKwkJICBwdWxzZV93aWR0aF9jb3VudF90b19ucyhGSUZPX1JYVFgsIHR4Y2xrKSk7CiAJdjRsMl9pbmZvKHNkLCAiXHRCdXN5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG4iLAogCQkgIHN0YXRzICYgU1RBVFNfVEJZID8gInllcyIgOiAibm8iKTsKIAl2NGwyX2luZm8oc2QsICJcdEZJRk8gc2VydmljZSByZXF1ZXN0ZWQ6ICAgICAgICAgICAgJXNcbiIsCkBAIC0xMTExLDExICsxMTQ1LDEwIEBACiAJLmdfcmVnaXN0ZXIgPSBjeDIzODg4X2lyX2dfcmVnaXN0ZXIsCiAJLnNfcmVnaXN0ZXIgPSBjeDIzODg4X2lyX3NfcmVnaXN0ZXIsCiAjZW5kaWYKKwkuaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSA9IGN4MjM4ODhfaXJfaXJxX2hhbmRsZXIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2lyX29wcyBjeDIzODg4X2lyX2lyX29wcyA9IHsKLQkuaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSA9IGN4MjM4ODhfaXJfaXJxX2hhbmRsZXIsCi0KIAkucnhfcmVhZCA9IGN4MjM4ODhfaXJfcnhfcmVhZCwKIAkucnhfZ19wYXJhbWV0ZXJzID0gY3gyMzg4OF9pcl9yeF9nX3BhcmFtZXRlcnMsCiAJLnJ4X3NfcGFyYW1ldGVycyA9IGN4MjM4ODhfaXJfcnhfc19wYXJhbWV0ZXJzLApAQCAtMTEzMSw3ICsxMTY0LDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyBkZWZhdWx0X3J4X3BhcmFtcyA9IHsKLQkuYnl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHNpemVvZih1MzIpLAorCS5ieXRlc19wZXJfZGF0YV9lbGVtZW50ID0gc2l6ZW9mKHVuaW9uIGN4MjM4ODhfaXJfZmlmb19yZWMpLAogCS5tb2RlID0gVjRMMl9TVUJERVZfSVJfTU9ERV9QVUxTRV9XSURUSCwKIAogCS5lbmFibGUgPSBmYWxzZSwKQEAgLTExNDYsMTEgKzExNzksMTEgQEAKIAkubm9pc2VfZmlsdGVyX21pbl93aWR0aCA9IDMzMzMzMywgLyogbnMgKi8KIAkuY2Fycmllcl9yYW5nZV9sb3dlciA9IDM1MDAwLAogCS5jYXJyaWVyX3JhbmdlX3VwcGVyID0gMzcwMDAsCi0JLmludmVydCA9IGZhbHNlLAorCS5pbnZlcnRfbGV2ZWwgPSBmYWxzZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyBkZWZhdWx0X3R4X3BhcmFtcyA9IHsKLQkuYnl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHNpemVvZih1MzIpLAorCS5ieXRlc19wZXJfZGF0YV9lbGVtZW50ID0gc2l6ZW9mKHVuaW9uIGN4MjM4ODhfaXJfZmlmb19yZWMpLAogCS5tb2RlID0gVjRMMl9TVUJERVZfSVJfTU9ERV9QVUxTRV9XSURUSCwKIAogCS5lbmFibGUgPSBmYWxzZSwKQEAgLTExNjAsNyArMTE5Myw4IEBACiAJLm1vZHVsYXRpb24gPSB0cnVlLAogCS5jYXJyaWVyX2ZyZXEgPSAzNjAwMCwgLyogMzYga0h6IC0gUkMtNSBjYXJyaWVyICovCiAJLmR1dHlfY3ljbGUgPSAyNSwgICAgICAvKiAyNSAlICAgLSBSQy01IGNhcnJpZXIgKi8KLQkuaW52ZXJ0ID0gZmFsc2UsCisJLmludmVydF9sZXZlbCA9IGZhbHNlLAorCS5pbnZlcnRfY2Fycmllcl9zZW5zZSA9IGZhbHNlLAogfTsKIAogaW50IGN4MjM4ODhfaXJfcHJvYmUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvTWFrZWZpbGUKaW5kZXggNmU4NjY1Yi4uMmVlOTZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIGN4MjU4NDAtb2JqcyAgICA6PSBjeDI1ODQwLWNvcmUubyBjeDI1ODQwLWF1ZGlvLm8gY3gyNTg0MC1maXJtd2FyZS5vIFwKLQkJICAgY3gyNTg0MC12YmkubworCQkgICBjeDI1ODQwLXZiaS5vIGN4MjU4NDAtaXIubwogCiBvYmotJChDT05GSUdfVklERU9fQ1gyNTg0MCkgKz0gY3gyNTg0MC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCmluZGV4IDQ1NjA4ZDUuLjZmYWFkMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwpAQCAtNDc0LDMzICs0NzQsMTAgQEAKIAkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDB4MTApOwogfQogCi1zdGF0aWMgaW50IGdldF92b2x1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JaW50IHZvbDsKLQotCWlmIChzdGF0ZS0+dW5tdXRlX3ZvbHVtZSA+PSAwKQotCQlyZXR1cm4gc3RhdGUtPnVubXV0ZV92b2x1bWU7Ci0KLQkvKiBWb2x1bWUgcnVucyArMThkQiB0byAtOTZkQiBpbiAxLzJkQiBzdGVwcwotCSAqIGNoYW5nZSB0byBmaXQgdGhlIG1zcDM0MDAgLTExNGRCIHRvICsxMmRCIHJhbmdlICovCi0KLQkvKiBjaGVjayBQQVRIMV9WT0xVTUUgKi8KLQl2b2wgPSAyMjggLSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDhkNCk7Ci0Jdm9sID0gKHZvbCAvIDIpICsgMjM7Ci0JcmV0dXJuIHZvbCA8PCA5OwotfQotCiBzdGF0aWMgdm9pZCBzZXRfdm9sdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2b2x1bWUpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWludCB2b2w7CiAKLQlpZiAoc3RhdGUtPnVubXV0ZV92b2x1bWUgPj0gMCkgewotCQlzdGF0ZS0+dW5tdXRlX3ZvbHVtZSA9IHZvbHVtZTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIENvbnZlcnQgdGhlIHZvbHVtZSB0byBtc3AzNDAwIHZhbHVlcyAoMC0xMjcpICovCiAJdm9sID0gdm9sdW1lID4+IDk7CiAKQEAgLTUxNyw1MiArNDk0LDYgQEAKIAljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg4ZDQsIDIyOCAtICh2b2wgKiAyKSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2Jhc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQkvKiBiYXNzIGlzIDQ5IHN0ZXBzICsxMmRCIHRvIC0xMmRCICovCi0KLQkvKiBjaGVjayBQQVRIMV9FUV9CQVNTX1ZPTCAqLwotCWludCBiYXNzID0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4ZDkpICYgMHgzZjsKLQliYXNzID0gKCgoNDggLSBiYXNzKSAqIDB4ZmZmZikgKyA0NykgLyA0ODsKLQlyZXR1cm4gYmFzczsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2Jhc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGJhc3MpCi17Ci0JLyogUEFUSDFfRVFfQkFTU19WT0wgKi8KLQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4OGQ5LCB+MHgzZiwgNDggLSAoYmFzcyAqIDQ4IC8gMHhmZmZmKSk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3RyZWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCS8qIHRyZWJsZSBpcyA0OSBzdGVwcyArMTJkQiB0byAtMTJkQiAqLwotCi0JLyogY2hlY2sgUEFUSDFfRVFfVFJFQkxFX1ZPTCAqLwotCWludCB0cmVibGUgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDhkYikgJiAweDNmOwotCXRyZWJsZSA9ICgoKDQ4IC0gdHJlYmxlKSAqIDB4ZmZmZikgKyA0NykgLyA0ODsKLQlyZXR1cm4gdHJlYmxlOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfdHJlYmxlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB0cmVibGUpCi17Ci0JLyogUEFUSDFfRVFfVFJFQkxFX1ZPTCAqLwotCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4ZGIsIH4weDNmLCA0OCAtICh0cmVibGUgKiA0OCAvIDB4ZmZmZikpOwotfQotCi1zdGF0aWMgaW50IGdldF9iYWxhbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JLyogYmFsYW5jZSBpcyA3IGJpdCwgMCB0byAtOTZkQiAqLwotCi0JLyogY2hlY2sgUEFUSDFfQkFMX0xFVkVMICovCi0JaW50IGJhbGFuY2UgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDhkNSkgJiAweDdmOwotCS8qIGNoZWNrIFBBVEgxX0JBTF9MRUZUICovCi0JaWYgKChjeDI1ODQwX3JlYWQoY2xpZW50LCAweDhkNSkgJiAweDgwKSA9PSAwKQotCQliYWxhbmNlID0gMHg4MCAtIGJhbGFuY2U7Ci0JZWxzZQotCQliYWxhbmNlID0gMHg4MCArIGJhbGFuY2U7Ci0JcmV0dXJuIGJhbGFuY2UgPDwgODsKLX0KLQogc3RhdGljIHZvaWQgc2V0X2JhbGFuY2Uoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGJhbGFuY2UpCiB7CiAJaW50IGJhbCA9IGJhbGFuY2UgPj4gODsKQEAgLTU3OSwzMSArNTEwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0KLQlyZXR1cm4gc3RhdGUtPnVubXV0ZV92b2x1bWUgPj0gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0X211dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG11dGUpCi17Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCi0JaWYgKG11dGUgJiYgc3RhdGUtPnVubXV0ZV92b2x1bWUgPT0gLTEpIHsKLQkJaW50IHZvbCA9IGdldF92b2x1bWUoY2xpZW50KTsKLQotCQlzZXRfdm9sdW1lKGNsaWVudCwgMCk7Ci0JCXN0YXRlLT51bm11dGVfdm9sdW1lID0gdm9sOwotCX0KLQllbHNlIGlmICghbXV0ZSAmJiBzdGF0ZS0+dW5tdXRlX3ZvbHVtZSAhPSAtMSkgewotCQlpbnQgdm9sID0gc3RhdGUtPnVubXV0ZV92b2x1bWU7Ci0KLQkJc3RhdGUtPnVubXV0ZV92b2x1bWUgPSAtMTsKLQkJc2V0X3ZvbHVtZShjbGllbnQsIHZvbCk7Ci0JfQotfQotCiBpbnQgY3gyNTg0MF9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwpAQCAtNjI0LDI1ICs1MzAsMzEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1pbnQgY3gyNTg0MF9hdWRpb19nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gdG9fc2QoY3RybCk7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBnZXRfdm9sdW1lKGNsaWVudCk7CisJCWlmIChzdGF0ZS0+bXV0ZS0+dmFsKQorCQkJc2V0X3ZvbHVtZShjbGllbnQsIDApOworCQllbHNlCisJCQlzZXRfdm9sdW1lKGNsaWVudCwgc3RhdGUtPnZvbHVtZS0+dmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGNsaWVudCk7CisJCS8qIFBBVEgxX0VRX0JBU1NfVk9MICovCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4ZDksIH4weDNmLAorCQkJCQk0OCAtIChjdHJsLT52YWwgKiA0OCAvIDB4ZmZmZikpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGNsaWVudCk7CisJCS8qIFBBVEgxX0VRX1RSRUJMRV9WT0wgKi8KKwkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDhkYiwgfjB4M2YsCisJCQkJCTQ4IC0gKGN0cmwtPnZhbCAqIDQ4IC8gMHhmZmZmKSk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjbGllbnQpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY2xpZW50KTsKKwkJc2V0X2JhbGFuY2UoY2xpZW50LCBjdHJsLT52YWwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY1MCwyOCArNTYyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGN4MjU4NDBfYXVkaW9fc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlzZXRfdm9sdW1lKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCXNldF9iYXNzKGNsaWVudCwgY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJc2V0X3RyZWJsZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQlzZXRfYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlzZXRfbXV0ZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQorY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgY3gyNTg0MF9hdWRpb19jdHJsX29wcyA9IHsKKwkuc19jdHJsID0gY3gyNTg0MF9hdWRpb19zX2N0cmwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IGJiNDg3MmIuLjg2Y2E4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKQEAgLTE1LDYgKzE1LDkgQEAKICAqCiAgKiBDWDIzODg1IHN1cHBvcnQgYnkgU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPi4KICAqCisgKiBDWDIzODhbNTc4XSBJUlEgaGFuZGxpbmcsIElPIFBpbiBtdXggY29uZmlndXJhdGlvbiBhbmQgb3RoZXIgc21hbGwgZml4ZXMgYXJlCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW5keSBXYWxscyA8YXdhbGxzQG1kLm1ldHJvY2FzdC5uZXQ+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCkBAIC00OCw2ICs1MSwyOCBAQAogTU9EVUxFX0FVVEhPUigiVWxmIEVrbHVuZCwgQ2hyaXMgS2VubmVkeSwgSGFucyBWZXJrdWlsLCBUeWxlciBUcmFmZm9yZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisjZGVmaW5lIENYMjU4NDBfVklEX0lOVF9TVEFUX1JFRyAweDQxMAorI2RlZmluZSBDWDI1ODQwX1ZJRF9JTlRfU1RBVF9CSVRTIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1gyNTg0MF9WSURfSU5UX01BU0tfQklUUyAweGZmZmYwMDAwCisjZGVmaW5lIENYMjU4NDBfVklEX0lOVF9NQVNLX1NIRlQgMTYKKyNkZWZpbmUgQ1gyNTg0MF9WSURfSU5UX01BU0tfUkVHIDB4NDEyCisKKyNkZWZpbmUgQ1gyMzg4NV9BVURfTUNfSU5UX01BU0tfUkVHIDB4ODBjCisjZGVmaW5lIENYMjM4ODVfQVVEX01DX0lOVF9TVEFUX0JJVFMgMHhmZmZmMDAwMAorI2RlZmluZSBDWDIzODg1X0FVRF9NQ19JTlRfQ1RSTF9CSVRTIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1gyMzg4NV9BVURfTUNfSU5UX1NUQVRfU0hGVCAxNgorCisjZGVmaW5lIENYMjU4NDBfQVVEX0lOVF9DVFJMX1JFRyAweDgxMgorI2RlZmluZSBDWDI1ODQwX0FVRF9JTlRfU1RBVF9SRUcgMHg4MTMKKworI2RlZmluZSBDWDIzODg1X1BJTl9DVFJMX0lSUV9SRUcgMHgxMjMKKyNkZWZpbmUgQ1gyMzg4NV9QSU5fQ1RSTF9JUlFfSVJfU1RBVCAgMHg0MAorI2RlZmluZSBDWDIzODg1X1BJTl9DVFJMX0lSUV9BVURfU1RBVCAweDIwCisjZGVmaW5lIENYMjM4ODVfUElOX0NUUkxfSVJRX1ZJRF9TVEFUIDB4MTAKKworI2RlZmluZSBDWDI1ODQwX0lSX1NUQVRTX1JFRwkweDIxMAorI2RlZmluZSBDWDI1ODQwX0lSX0lSUUVOX1JFRwkweDIxNAorCiBzdGF0aWMgaW50IGN4MjU4NDBfZGVidWc7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZyxjeDI1ODQwX2RlYnVnLCBpbnQsIDA2NDQpOwpAQCAtODAsMzMgKzEwNSw1MyBAQAogCiB1OCBjeDI1ODQwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHUxNiBhZGRyKQogewotCXU4IGJ1ZmZlclsyXTsKLQlidWZmZXJbMF0gPSBhZGRyID4+IDg7Ci0JYnVmZmVyWzFdID0gYWRkciAmIDB4ZmY7CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKwl1OCB0eF9idWZbMl0sIHJ4X2J1ZlsxXTsKIAotCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWZmZXIsIDIpIDwgMikKKwkvKiBXcml0ZSByZWdpc3RlciBhZGRyZXNzICovCisJdHhfYnVmWzBdID0gYWRkciA+PiA4OworCXR4X2J1ZlsxXSA9IGFkZHIgJiAweGZmOworCW1zZ3NbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2dzWzBdLmZsYWdzID0gMDsKKwltc2dzWzBdLmxlbiA9IDI7CisJbXNnc1swXS5idWYgPSAoY2hhciAqKSB0eF9idWY7CisKKwkvKiBSZWFkIGRhdGEgZnJvbSByZWdpc3RlciAqLworCW1zZ3NbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSAxOworCW1zZ3NbMV0uYnVmID0gKGNoYXIgKikgcnhfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpIDwgMikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmZmVyLCAxKSA8IDEpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGJ1ZmZlclswXTsKKwlyZXR1cm4gcnhfYnVmWzBdOwogfQogCiB1MzIgY3gyNTg0MF9yZWFkNChzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTE2IGFkZHIpCiB7Ci0JdTggYnVmZmVyWzRdOwotCWJ1ZmZlclswXSA9IGFkZHIgPj4gODsKLQlidWZmZXJbMV0gPSBhZGRyICYgMHhmZjsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworCXU4IHR4X2J1ZlsyXSwgcnhfYnVmWzRdOwogCi0JaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZmZlciwgMikgPCAyKQorCS8qIFdyaXRlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwl0eF9idWZbMF0gPSBhZGRyID4+IDg7CisJdHhfYnVmWzFdID0gYWRkciAmIDB4ZmY7CisJbXNnc1swXS5hZGRyID0gY2xpZW50LT5hZGRyOworCW1zZ3NbMF0uZmxhZ3MgPSAwOworCW1zZ3NbMF0ubGVuID0gMjsKKwltc2dzWzBdLmJ1ZiA9IChjaGFyICopIHR4X2J1ZjsKKworCS8qIFJlYWQgZGF0YSBmcm9tIHJlZ2lzdGVycyAqLworCW1zZ3NbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKwltc2dzWzFdLmZsYWdzID0gSTJDX01fUkQ7CisJbXNnc1sxXS5sZW4gPSA0OworCW1zZ3NbMV0uYnVmID0gKGNoYXIgKikgcnhfYnVmOworCisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpIDwgMikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmZmVyLCA0KSA8IDQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIChidWZmZXJbM10gPDwgMjQpIHwgKGJ1ZmZlclsyXSA8PCAxNikgfAotCSAgICAoYnVmZmVyWzFdIDw8IDgpIHwgYnVmZmVyWzBdOworCXJldHVybiAocnhfYnVmWzNdIDw8IDI0KSB8IChyeF9idWZbMl0gPDwgMTYpIHwgKHJ4X2J1ZlsxXSA8PCA4KSB8CisJCXJ4X2J1ZlswXTsKIH0KIAogaW50IGN4MjU4NDBfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1bnNpZ25lZCBhbmRfbWFzaywKQEAgLTExNyw2ICsxNjIsMTQgQEAKIAkJCSAgICAgb3JfdmFsdWUpOwogfQogCitpbnQgY3gyNTg0MF9hbmRfb3I0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1MzIgYW5kX21hc2ssCisJCSAgICB1MzIgb3JfdmFsdWUpCit7CisJcmV0dXJuIGN4MjU4NDBfd3JpdGU0KGNsaWVudCwgYWRkciwKKwkJCSAgICAgIChjeDI1ODQwX3JlYWQ0KGNsaWVudCwgYWRkcikgJiBhbmRfbWFzaykgfAorCQkJICAgICAgb3JfdmFsdWUpOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHNldF9pbnB1dChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBlbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0LApAQCAtMTI0LDYgKzE3NywxNTggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGludCBjeDIzODg1X3NfaW9fcGluX2NvbmZpZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzaXplX3QgbiwKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfaW9fcGluX2NvbmZpZyAqcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IGk7CisJdTMyIHBpbl9jdHJsOworCXU4IGdwaW9fb2UsIGdwaW9fZGF0YSwgc3RyZW5ndGg7CisKKwlwaW5fY3RybCA9IGN4MjU4NDBfcmVhZDQoY2xpZW50LCAweDEyMCk7CisJZ3Bpb19vZSA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4MTYwKTsKKwlncGlvX2RhdGEgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDE2NCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN0cmVuZ3RoID0gcFtpXS5zdHJlbmd0aDsKKwkJaWYgKHN0cmVuZ3RoID4gQ1gyNTg0MF9QSU5fRFJJVkVfRkFTVCkKKwkJCXN0cmVuZ3RoID0gQ1gyNTg0MF9QSU5fRFJJVkVfRkFTVDsKKworCQlzd2l0Y2ggKHBbaV0ucGluKSB7CisJCWNhc2UgQ1gyMzg4NV9QSU5fSVJRX05fR1BJTzE2OgorCQkJaWYgKHBbaV0uZnVuY3Rpb24gIT0gQ1gyMzg4NV9QQURfSVJRX04pIHsKKwkJCQkvKiBHUElPMTYgKi8KKwkJCQlwaW5fY3RybCAmPSB+KDB4MSA8PCAyNSk7CisJCQl9IGVsc2UgeworCQkJCS8qIElSUV9OICovCisJCQkJaWYgKHBbaV0uZmxhZ3MgJgorCQkJCQkoVjRMMl9TVUJERVZfSU9fUElOX0RJU0FCTEUgfAorCQkJCQkgVjRMMl9TVUJERVZfSU9fUElOX0lOUFVUKSkgeworCQkJCQlwaW5fY3RybCAmPSB+KDB4MSA8PCAyNSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGluX2N0cmwgfD0gKDB4MSA8PCAyNSk7CisJCQkJfQorCQkJCWlmIChwW2ldLmZsYWdzICYKKwkJCQkJVjRMMl9TVUJERVZfSU9fUElOX0FDVElWRV9MT1cpIHsKKwkJCQkJcGluX2N0cmwgJj0gfigweDEgPDwgMjQpOworCQkJCX0gZWxzZSB7CisJCQkJCXBpbl9jdHJsIHw9ICgweDEgPDwgMjQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENYMjM4ODVfUElOX0lSX1JYX0dQSU8xOToKKwkJCWlmIChwW2ldLmZ1bmN0aW9uICE9IENYMjM4ODVfUEFEX0dQSU8xOSkgeworCQkJCS8qIElSX1JYICovCisJCQkJZ3Bpb19vZSB8PSAoMHgxIDw8IDApOworCQkJCXBpbl9jdHJsICY9IH4oMHgzIDw8IDE4KTsKKwkJCQlwaW5fY3RybCB8PSAoc3RyZW5ndGggPDwgMTgpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHUElPMTkgKi8KKwkJCQlncGlvX29lICY9IH4oMHgxIDw8IDApOworCQkJCWlmIChwW2ldLmZsYWdzICYgVjRMMl9TVUJERVZfSU9fUElOX1NFVF9WQUxVRSkgeworCQkJCQlncGlvX2RhdGEgJj0gfigweDEgPDwgMCk7CisJCQkJCWdwaW9fZGF0YSB8PSAoKHBbaV0udmFsdWUgJiAweDEpIDw8IDApOworCQkJCX0KKwkJCQlwaW5fY3RybCAmPSB+KDB4MyA8PCAxMik7CisJCQkJcGluX2N0cmwgfD0gKHN0cmVuZ3RoIDw8IDEyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENYMjM4ODVfUElOX0lSX1RYX0dQSU8yMDoKKwkJCWlmIChwW2ldLmZ1bmN0aW9uICE9IENYMjM4ODVfUEFEX0dQSU8yMCkgeworCQkJCS8qIElSX1RYICovCisJCQkJZ3Bpb19vZSB8PSAoMHgxIDw8IDEpOworCQkJCWlmIChwW2ldLmZsYWdzICYgVjRMMl9TVUJERVZfSU9fUElOX0RJU0FCTEUpCisJCQkJCXBpbl9jdHJsICY9IH4oMHgxIDw8IDEwKTsKKwkJCQllbHNlCisJCQkJCXBpbl9jdHJsIHw9ICgweDEgPDwgMTApOworCQkJCXBpbl9jdHJsICY9IH4oMHgzIDw8IDE4KTsKKwkJCQlwaW5fY3RybCB8PSAoc3RyZW5ndGggPDwgMTgpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHUElPMjAgKi8KKwkJCQlncGlvX29lICY9IH4oMHgxIDw8IDEpOworCQkJCWlmIChwW2ldLmZsYWdzICYgVjRMMl9TVUJERVZfSU9fUElOX1NFVF9WQUxVRSkgeworCQkJCQlncGlvX2RhdGEgJj0gfigweDEgPDwgMSk7CisJCQkJCWdwaW9fZGF0YSB8PSAoKHBbaV0udmFsdWUgJiAweDEpIDw8IDEpOworCQkJCX0KKwkJCQlwaW5fY3RybCAmPSB+KDB4MyA8PCAxMik7CisJCQkJcGluX2N0cmwgfD0gKHN0cmVuZ3RoIDw8IDEyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENYMjM4ODVfUElOX0kyU19TREFUX0dQSU8yMToKKwkJCWlmIChwW2ldLmZ1bmN0aW9uICE9IENYMjM4ODVfUEFEX0dQSU8yMSkgeworCQkJCS8qIEkyU19TREFUICovCisJCQkJLyogVE9ETzogSW5wdXQgb3IgT3V0cHV0IGNvbmZpZyAqLworCQkJCWdwaW9fb2UgfD0gKDB4MSA8PCAyKTsKKwkJCQlwaW5fY3RybCAmPSB+KDB4MyA8PCAyMik7CisJCQkJcGluX2N0cmwgfD0gKHN0cmVuZ3RoIDw8IDIyKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogR1BJTzIxICovCisJCQkJZ3Bpb19vZSAmPSB+KDB4MSA8PCAyKTsKKwkJCQlpZiAocFtpXS5mbGFncyAmIFY0TDJfU1VCREVWX0lPX1BJTl9TRVRfVkFMVUUpIHsKKwkJCQkJZ3Bpb19kYXRhICY9IH4oMHgxIDw8IDIpOworCQkJCQlncGlvX2RhdGEgfD0gKChwW2ldLnZhbHVlICYgMHgxKSA8PCAyKTsKKwkJCQl9CisJCQkJcGluX2N0cmwgJj0gfigweDMgPDwgMTIpOworCQkJCXBpbl9jdHJsIHw9IChzdHJlbmd0aCA8PCAxMik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDWDIzODg1X1BJTl9JMlNfV0NMS19HUElPMjI6CisJCQlpZiAocFtpXS5mdW5jdGlvbiAhPSBDWDIzODg1X1BBRF9HUElPMjIpIHsKKwkJCQkvKiBJMlNfV0NMSyAqLworCQkJCS8qIFRPRE86IElucHV0IG9yIE91dHB1dCBjb25maWcgKi8KKwkJCQlncGlvX29lIHw9ICgweDEgPDwgMyk7CisJCQkJcGluX2N0cmwgJj0gfigweDMgPDwgMjIpOworCQkJCXBpbl9jdHJsIHw9IChzdHJlbmd0aCA8PCAyMik7CisJCQl9IGVsc2UgeworCQkJCS8qIEdQSU8yMiAqLworCQkJCWdwaW9fb2UgJj0gfigweDEgPDwgMyk7CisJCQkJaWYgKHBbaV0uZmxhZ3MgJiBWNEwyX1NVQkRFVl9JT19QSU5fU0VUX1ZBTFVFKSB7CisJCQkJCWdwaW9fZGF0YSAmPSB+KDB4MSA8PCAzKTsKKwkJCQkJZ3Bpb19kYXRhIHw9ICgocFtpXS52YWx1ZSAmIDB4MSkgPDwgMyk7CisJCQkJfQorCQkJCXBpbl9jdHJsICY9IH4oMHgzIDw8IDEyKTsKKwkJCQlwaW5fY3RybCB8PSAoc3RyZW5ndGggPDwgMTIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1gyMzg4NV9QSU5fSTJTX0JDTEtfR1BJTzIzOgorCQkJaWYgKHBbaV0uZnVuY3Rpb24gIT0gQ1gyMzg4NV9QQURfR1BJTzIzKSB7CisJCQkJLyogSTJTX0JDTEsgKi8KKwkJCQkvKiBUT0RPOiBJbnB1dCBvciBPdXRwdXQgY29uZmlnICovCisJCQkJZ3Bpb19vZSB8PSAoMHgxIDw8IDQpOworCQkJCXBpbl9jdHJsICY9IH4oMHgzIDw8IDIyKTsKKwkJCQlwaW5fY3RybCB8PSAoc3RyZW5ndGggPDwgMjIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHUElPMjMgKi8KKwkJCQlncGlvX29lICY9IH4oMHgxIDw8IDQpOworCQkJCWlmIChwW2ldLmZsYWdzICYgVjRMMl9TVUJERVZfSU9fUElOX1NFVF9WQUxVRSkgeworCQkJCQlncGlvX2RhdGEgJj0gfigweDEgPDwgNCk7CisJCQkJCWdwaW9fZGF0YSB8PSAoKHBbaV0udmFsdWUgJiAweDEpIDw8IDQpOworCQkJCX0KKwkJCQlwaW5fY3RybCAmPSB+KDB4MyA8PCAxMik7CisJCQkJcGluX2N0cmwgfD0gKHN0cmVuZ3RoIDw8IDEyKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4MTY0LCBncGlvX2RhdGEpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDE2MCwgZ3Bpb19vZSk7CisJY3gyNTg0MF93cml0ZTQoY2xpZW50LCAweDEyMCwgcGluX2N0cmwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1vbl9zX2lvX3Bpbl9jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc2l6ZV90IG4sCisJCQkJICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2lvX3Bpbl9jb25maWcgKnBpbmNmZykKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoaXNfY3gyMzg4eChzdGF0ZSkpCisJCXJldHVybiBjeDIzODg1X3NfaW9fcGluX2NvbmZpZyhzZCwgbiwgcGluY2ZnKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIHZvaWQgaW5pdF9kbGwxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJLyogVGhpcyBpcyB0aGUgSGF1cHBhdWdlIHNlcXVlbmNlIHVzZWQgdG8KQEAgLTQyMCw2ICs2MjUsMTMgQEAKIAogCS8qIHN0YXJ0IG1pY3JvY29udHJvbGxlciAqLwogCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAweDEwKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIHZpZGVvIGludGVycnVwdHMgLSB3ZSBkb24ndCB1c2UgdGhlbSAqLworCWN4MjU4NDBfd3JpdGU0KGNsaWVudCwgQ1gyNTg0MF9WSURfSU5UX1NUQVRfUkVHLCAweGZmZmZmZmZmKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIGF1ZGlvIGludGVycnVwdHMgLSB3ZSBkb24ndCB1c2UgdGhlbSAqLworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBDWDI1ODQwX0FVRF9JTlRfQ1RSTF9SRUcsIDB4ZmYpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBDWDI1ODQwX0FVRF9JTlRfU1RBVF9SRUcsIDB4ZmYpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtOTA5LDEwMiArMTEyMSwyOSBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGN4MjU4NDBfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGN4MjU4NDBfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQ6Ci0JCXN0YXRlLT5wdnIxNTBfd29ya2Fyb3VuZCA9IGN0cmwtPnZhbHVlOwotCQlzZXRfaW5wdXQoY2xpZW50LCBzdGF0ZS0+dmlkX2lucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKLQkJYnJlYWs7Ci0KIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCi0JCQkJICAgIGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDE0LCBjdHJsLT52YWx1ZSAtIDEyOCk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQxNCwgY3RybC0+dmFsIC0gMTI4KTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOwotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQotCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MTUsIGN0cmwtPnZhbHVlIDw8IDEpOworCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MTUsIGN0cmwtPnZhbCA8PCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCXY0bF9lcnIoY2xpZW50LCAiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsCi0JCQkJICAgIGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIwLCBjdHJsLT52YWx1ZSA8PCAxKTsKLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIxLCBjdHJsLT52YWx1ZSA8PCAxKTsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIwLCBjdHJsLT52YWwgPDwgMSk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMSwgY3RybC0+dmFsIDw8IDEpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGxfZXJyKGNsaWVudCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDIyLCBjdHJsLT52YWx1ZSk7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQyMiwgY3RybC0+dmFsKTsKIAkJYnJlYWs7CiAKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJaWYgKGlzX2N4MjU4M3goc3RhdGUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBjeDI1ODQwX2F1ZGlvX3NfY3RybChzZCwgY3RybCk7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjeDI1ODQwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQ6Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPnB2cjE1MF93b3JrYXJvdW5kOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWN0cmwtPnZhbHVlID0gKHM4KWN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDE0KSArIDEyODsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJY3RybC0+dmFsdWUgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQxNSkgPj4gMTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQljdHJsLT52YWx1ZSA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDIwKSA+PiAxOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJY3RybC0+dmFsdWUgPSAoczgpY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg0MjIpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJaWYgKGlzX2N4MjU4M3goc3RhdGUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBjeDI1ODQwX2F1ZGlvX2dfY3RybChzZCwgY3RybCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTE2Myw4ICsxMzAyLDYgQEAKIAlkZWZhdWx0OiBwID0gIm5vdCBkZWZpbmVkIjsKIAl9CiAJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgYXVkaW8gc3RhbmRhcmQ6ICAgJXNcbiIsIHApOwotCXY0bF9pbmZvKGNsaWVudCwgIkF1ZGlvIG11dGVkOiAgICAgICAgICAgICAgICVzXG4iLAotCQkgICAgKHN0YXRlLT51bm11dGVfdm9sdW1lID49IDApID8gInllcyIgOiAibm8iKTsKIAl2NGxfaW5mbyhjbGllbnQsICJBdWRpbyBtaWNyb2NvbnRyb2xsZXI6ICAgICAlc1xuIiwKIAkJICAgIChkb3dubG9hZF9jdGwgJiAweDEwKSA/CiAJCQkJKChtdXRlX2N0bCAmIDB4MikgPyAiZGV0ZWN0aW5nIiA6ICJydW5uaW5nIikgOiAic3RvcHBlZCIpOwpAQCAtMTM4MSw0MCArMTUxOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNTg0MF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKLXsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlzd2l0Y2ggKHFjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JaWYgKGlzX2N4MjU4M3goc3RhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCi0JCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCiBzdGF0aWMgaW50IGN4MjU4NDBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQogewogCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTE1NzYsMjQgKzE2NzksMTM0IEBACiAJbG9nX3ZpZGVvX3N0YXR1cyhjbGllbnQpOwogCWlmICghaXNfY3gyNTgzeChzdGF0ZSkpCiAJCWxvZ19hdWRpb19zdGF0dXMoY2xpZW50KTsKKwljeDI1ODQwX2lyX2xvZ19zdGF0dXMoc2QpOworCXY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoJnN0YXRlLT5oZGwsIHNkLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjeDI1ODQwX3NfY29uZmlnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBpcnEsIHZvaWQgKnBsYXRmb3JtX2RhdGEpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWlmIChwbGF0Zm9ybV9kYXRhKSB7CisJCXN0cnVjdCBjeDI1ODQwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGxhdGZvcm1fZGF0YTsKKworCQlzdGF0ZS0+cHZyMTUwX3dvcmthcm91bmQgPSBwZGF0YS0+cHZyMTUwX3dvcmthcm91bmQ7CisJCXNldF9pbnB1dChjbGllbnQsIHN0YXRlLT52aWRfaW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDIzODg1X2lycV9oYW5kbGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBzdGF0dXMsCisJCQkgICAgICAgYm9vbCAqaGFuZGxlZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCBpcnFfc3RhdCwgYXVkX3N0YXQsIGF1ZF9lbiwgaXJfc3RhdCwgaXJfZW47CisJdTMyIHZpZF9zdGF0LCBhdWRfbWNfc3RhdDsKKwlib29sIGJsb2NrX2hhbmRsZWQ7CisJaW50IHJldCA9IDA7CisKKwlpcnFfc3RhdCA9IGN4MjU4NDBfcmVhZChjLCBDWDIzODg1X1BJTl9DVFJMX0lSUV9SRUcpOworCXY0bF9kYmcoMiwgY3gyNTg0MF9kZWJ1ZywgYywgIkFWIENvcmUgSVJRIHN0YXR1cyAoZW50cnkpOiAlcyAlcyAlc1xuIiwKKwkJaXJxX3N0YXQgJiBDWDIzODg1X1BJTl9DVFJMX0lSUV9JUl9TVEFUID8gImlyIiA6ICIgICIsCisJCWlycV9zdGF0ICYgQ1gyMzg4NV9QSU5fQ1RSTF9JUlFfQVVEX1NUQVQgPyAiYXVkIiA6ICIgICAiLAorCQlpcnFfc3RhdCAmIENYMjM4ODVfUElOX0NUUkxfSVJRX1ZJRF9TVEFUID8gInZpZCIgOiAiICAgIik7CisKKwlpZiAoKGlzX2N4MjM4ODUoc3RhdGUpIHx8IGlzX2N4MjM4ODcoc3RhdGUpKSkgeworCQlpcl9zdGF0ID0gY3gyNTg0MF9yZWFkKGMsIENYMjU4NDBfSVJfU1RBVFNfUkVHKTsKKwkJaXJfZW4gPSBjeDI1ODQwX3JlYWQoYywgQ1gyNTg0MF9JUl9JUlFFTl9SRUcpOworCQl2NGxfZGJnKDIsIGN4MjU4NDBfZGVidWcsIGMsCisJCQkiQVYgQ29yZSBpciBJUlEgc3RhdHVzOiAlIzA0eCBkaXNhYmxlczogJSMwNHhcbiIsCisJCQlpcl9zdGF0LCBpcl9lbik7CisJCWlmIChpcnFfc3RhdCAmIENYMjM4ODVfUElOX0NUUkxfSVJRX0lSX1NUQVQpIHsKKwkJCWJsb2NrX2hhbmRsZWQgPSBmYWxzZTsKKwkJCXJldCA9IGN4MjU4NDBfaXJfaXJxX2hhbmRsZXIoc2QsCisJCQkJCQkgICAgIHN0YXR1cywgJmJsb2NrX2hhbmRsZWQpOworCQkJaWYgKGJsb2NrX2hhbmRsZWQpCisJCQkJKmhhbmRsZWQgPSB0cnVlOworCQl9CisJfQorCisJYXVkX3N0YXQgPSBjeDI1ODQwX3JlYWQoYywgQ1gyNTg0MF9BVURfSU5UX1NUQVRfUkVHKTsKKwlhdWRfZW4gPSBjeDI1ODQwX3JlYWQoYywgQ1gyNTg0MF9BVURfSU5UX0NUUkxfUkVHKTsKKwl2NGxfZGJnKDIsIGN4MjU4NDBfZGVidWcsIGMsCisJCSJBViBDb3JlIGF1ZGlvIElSUSBzdGF0dXM6ICUjMDR4IGRpc2FibGVzOiAlIzA0eFxuIiwKKwkJYXVkX3N0YXQsIGF1ZF9lbik7CisJYXVkX21jX3N0YXQgPSBjeDI1ODQwX3JlYWQ0KGMsIENYMjM4ODVfQVVEX01DX0lOVF9NQVNLX1JFRyk7CisJdjRsX2RiZygyLCBjeDI1ODQwX2RlYnVnLCBjLAorCQkiQVYgQ29yZSBhdWRpbyBNQyBJUlEgc3RhdHVzOiAlIzA2eCBlbmFibGVzOiAlIzA2eFxuIiwKKwkJYXVkX21jX3N0YXQgPj4gQ1gyMzg4NV9BVURfTUNfSU5UX1NUQVRfU0hGVCwKKwkJYXVkX21jX3N0YXQgJiBDWDIzODg1X0FVRF9NQ19JTlRfQ1RSTF9CSVRTKTsKKwlpZiAoaXJxX3N0YXQgJiBDWDIzODg1X1BJTl9DVFJMX0lSUV9BVURfU1RBVCkgeworCQlpZiAoYXVkX3N0YXQpIHsKKwkJCWN4MjU4NDBfd3JpdGUoYywgQ1gyNTg0MF9BVURfSU5UX1NUQVRfUkVHLCBhdWRfc3RhdCk7CisJCQkqaGFuZGxlZCA9IHRydWU7CisJCX0KKwl9CisKKwl2aWRfc3RhdCA9IGN4MjU4NDBfcmVhZDQoYywgQ1gyNTg0MF9WSURfSU5UX1NUQVRfUkVHKTsKKwl2NGxfZGJnKDIsIGN4MjU4NDBfZGVidWcsIGMsCisJCSJBViBDb3JlIHZpZGVvIElSUSBzdGF0dXM6ICUjMDZ4IGRpc2FibGVzOiAlIzA2eFxuIiwKKwkJdmlkX3N0YXQgJiBDWDI1ODQwX1ZJRF9JTlRfU1RBVF9CSVRTLAorCQl2aWRfc3RhdCA+PiBDWDI1ODQwX1ZJRF9JTlRfTUFTS19TSEZUKTsKKwlpZiAoaXJxX3N0YXQgJiBDWDIzODg1X1BJTl9DVFJMX0lSUV9WSURfU1RBVCkgeworCQlpZiAodmlkX3N0YXQgJiBDWDI1ODQwX1ZJRF9JTlRfU1RBVF9CSVRTKSB7CisJCQljeDI1ODQwX3dyaXRlNChjLCBDWDI1ODQwX1ZJRF9JTlRfU1RBVF9SRUcsIHZpZF9zdGF0KTsKKwkJCSpoYW5kbGVkID0gdHJ1ZTsKKwkJfQorCX0KKworCWlycV9zdGF0ID0gY3gyNTg0MF9yZWFkKGMsIENYMjM4ODVfUElOX0NUUkxfSVJRX1JFRyk7CisJdjRsX2RiZygyLCBjeDI1ODQwX2RlYnVnLCBjLCAiQVYgQ29yZSBJUlEgc3RhdHVzIChleGl0KTogJXMgJXMgJXNcbiIsCisJCWlycV9zdGF0ICYgQ1gyMzg4NV9QSU5fQ1RSTF9JUlFfSVJfU1RBVCA/ICJpciIgOiAiICAiLAorCQlpcnFfc3RhdCAmIENYMjM4ODVfUElOX0NUUkxfSVJRX0FVRF9TVEFUID8gImF1ZCIgOiAiICAgIiwKKwkJaXJxX3N0YXQgJiBDWDIzODg1X1BJTl9DVFJMX0lSUV9WSURfU1RBVCA/ICJ2aWQiIDogIiAgICIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjeDI1ODQwX2lycV9oYW5kbGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiBzdGF0dXMsCisJCQkgICAgICAgYm9vbCAqaGFuZGxlZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwkqaGFuZGxlZCA9IGZhbHNlOworCisJLyogT25seSBzdXBwb3J0IHRoZSBDWDIzODhbNTc4XSBBViBDb3JlIGZvciBub3cgKi8KKwlpZiAoaXNfY3gyMzg4eChzdGF0ZSkpCisJCXJldHVybiBjeDIzODg1X2lycV9oYW5kbGVyKHNkLCBzdGF0dXMsIGhhbmRsZWQpOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBjeDI1ODQwX2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBjeDI1ODQwX3NfY3RybCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3gyNTg0MF9jb3JlX29wcyA9IHsKIAkubG9nX3N0YXR1cyA9IGN4MjU4NDBfbG9nX3N0YXR1cywKKwkuc19jb25maWcgPSBjeDI1ODQwX3NfY29uZmlnLAogCS5nX2NoaXBfaWRlbnQgPSBjeDI1ODQwX2dfY2hpcF9pZGVudCwKLQkuZ19jdHJsID0gY3gyNTg0MF9nX2N0cmwsCi0JLnNfY3RybCA9IGN4MjU4NDBfc19jdHJsLAotCS5xdWVyeWN0cmwgPSBjeDI1ODQwX3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gdjRsMl9zdWJkZXZfZ19jdHJsLAorCS5zX2N0cmwgPSB2NGwyX3N1YmRldl9zX2N0cmwsCisJLnNfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfc19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzLAorCS5nX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X2dfZXh0X2N0cmxzLAorCS5xdWVyeWN0cmwgPSB2NGwyX3N1YmRldl9xdWVyeWN0cmwsCisJLnF1ZXJ5bWVudSA9IHY0bDJfc3ViZGV2X3F1ZXJ5bWVudSwKIAkuc19zdGQgPSBjeDI1ODQwX3Nfc3RkLAogCS5yZXNldCA9IGN4MjU4NDBfcmVzZXQsCiAJLmxvYWRfZncgPSBjeDI1ODQwX2xvYWRfZncsCisJLnNfaW9fcGluX2NvbmZpZyA9IGNvbW1vbl9zX2lvX3Bpbl9jb25maWcsCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogCS5nX3JlZ2lzdGVyID0gY3gyNTg0MF9nX3JlZ2lzdGVyLAogCS5zX3JlZ2lzdGVyID0gY3gyNTg0MF9zX3JlZ2lzdGVyLAogI2VuZGlmCisJLmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUgPSBjeDI1ODQwX2lycV9oYW5kbGVyLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgY3gyNTg0MF90dW5lcl9vcHMgPSB7CkBAIC0xNjI4LDYgKzE4NDEsNyBAQAogCS5hdWRpbyA9ICZjeDI1ODQwX2F1ZGlvX29wcywKIAkudmlkZW8gPSAmY3gyNTg0MF92aWRlb19vcHMsCiAJLnZiaSA9ICZjeDI1ODQwX3ZiaV9vcHMsCisJLmlyID0gJmN4MjU4NDBfaXJfb3BzLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE2NzUsNiArMTg4OSw3IEBACiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGRlZmF1bHRfdm9sdW1lOwogCXUzMiBpZCA9IFY0TDJfSURFTlRfTk9ORTsKIAl1MTYgZGV2aWNlX2lkOwogCkBAIC0xNzE4LDYgKzE5MzMsNyBAQAogCiAJc2QgPSAmc3RhdGUtPnNkOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZjeDI1ODQwX29wcyk7CisKIAlzd2l0Y2ggKGlkKSB7CiAJY2FzZSBWNEwyX0lERU5UX0NYMjM4ODVfQVY6CiAJCXY0bF9pbmZvKGNsaWVudCwgImN4MjM4ODUgQS9WIGRlY29kZXIgZm91bmQgQCAweCV4ICglcylcbiIsCkBAIC0xNzYyLDIyICsxOTc4LDYyIEBACiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CiAJc3RhdGUtPnB2cjE1MF93b3JrYXJvdW5kID0gMDsKIAlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQlzdGF0ZS0+dW5tdXRlX3ZvbHVtZSA9IC0xOwotCXN0YXRlLT5kZWZhdWx0X3ZvbHVtZSA9IDIyOCAtIGN4MjU4NDBfcmVhZChjbGllbnQsIDB4OGQ0KTsKLQlzdGF0ZS0+ZGVmYXVsdF92b2x1bWUgPSAoKHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSAvIDIpICsgMjMpIDw8IDk7CiAJc3RhdGUtPnZiaV9saW5lX29mZnNldCA9IDg7CiAJc3RhdGUtPmlkID0gaWQ7CiAJc3RhdGUtPnJldiA9IGRldmljZV9pZDsKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZzdGF0ZS0+aGRsLCA5KTsKKwl2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJmN4MjU4NDBfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9CUklHSFRORVNTLCAwLCAyNTUsIDEsIDEyOCk7CisJdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5oZGwsICZjeDI1ODQwX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQ09OVFJBU1QsIDAsIDEyNywgMSwgNjQpOworCXY0bDJfY3RybF9uZXdfc3RkKCZzdGF0ZS0+aGRsLCAmY3gyNTg0MF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX1NBVFVSQVRJT04sIDAsIDEyNywgMSwgNjQpOworCXY0bDJfY3RybF9uZXdfc3RkKCZzdGF0ZS0+aGRsLCAmY3gyNTg0MF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0hVRSwgLTEyOCwgMTI3LCAxLCAwKTsKKwlpZiAoIWlzX2N4MjU4M3goc3RhdGUpKSB7CisJCWRlZmF1bHRfdm9sdW1lID0gMjI4IC0gY3gyNTg0MF9yZWFkKGNsaWVudCwgMHg4ZDQpOworCQlkZWZhdWx0X3ZvbHVtZSA9ICgoZGVmYXVsdF92b2x1bWUgLyAyKSArIDIzKSA8PCA5OwogCisJCXN0YXRlLT52b2x1bWUgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwKKwkJCSZjeDI1ODQwX2F1ZGlvX2N0cmxfb3BzLCBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCQkwLCA2NTMzNSwgNjU1MzUgLyAxMDAsIGRlZmF1bHRfdm9sdW1lKTsKKwkJc3RhdGUtPm11dGUgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwKKwkJCSZjeDI1ODQwX2F1ZGlvX2N0cmxfb3BzLCBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkJMCwgMSwgMSwgMCk7CisJCXY0bDJfY3RybF9uZXdfc3RkKCZzdGF0ZS0+aGRsLCAmY3gyNTg0MF9hdWRpb19jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCisJCQkwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwkJdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5oZGwsICZjeDI1ODQwX2F1ZGlvX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fQkFTUywKKwkJCTAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOworCQl2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJmN4MjU4NDBfYXVkaW9fY3RybF9vcHMsCisJCQlWNEwyX0NJRF9BVURJT19UUkVCTEUsCisJCQkwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwl9CisJc2QtPmN0cmxfaGFuZGxlciA9ICZzdGF0ZS0+aGRsOworCWlmIChzdGF0ZS0+aGRsLmVycm9yKSB7CisJCWludCBlcnIgPSBzdGF0ZS0+aGRsLmVycm9yOworCisJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnN0YXRlLT5oZGwpOworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBlcnI7CisJfQorCXY0bDJfY3RybF9jbHVzdGVyKDIsICZzdGF0ZS0+dm9sdW1lKTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmc3RhdGUtPmhkbCk7CisKKwljeDI1ODQwX2lyX3Byb2JlKHNkKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDI1ODQwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKKwljeDI1ODQwX2lyX3JlbW92ZShzZCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmcmVlKHRvX3N0YXRlKHNkKSk7CisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmc3RhdGUtPmhkbCk7CisJa2ZyZWUoc3RhdGUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKaW5kZXggMDQzOTNiOS4uYmQ0YWRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaApAQCAtMjQsMTkgKzI0LDIwIEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKLS8qIEVOQUJMRV9QVlIxNTBfV09SS0FST1VORCBhY3RpdmF0ZXMgYSB3b3JrYXJvdW5kIGZvciBhIGhhcmR3YXJlIGJ1ZyB0aGF0IGlzCi0gICBwcmVzZW50IGluIEhhdXBwYXVnZSBQVlItMTUwIChhbmQgcG9zc2libHkgUFZSLTUwMCkgY2FyZHMgdGhhdCBoYXZlCi0gICBjZXJ0YWluIE5UU0MgdHVuZXJzICh0dmVlcHJvbSB0dW5lciBtb2RlbCBudW1iZXJzIDg1LCA5OSBhbmQgMTEyKS4gVGhlCi0gICBhdWRpbyBhdXRvZGV0ZWN0IGZhaWxzIG9uIHNvbWUgY2hhbm5lbHMgZm9yIHRoZXNlIG1vZGVscyBhbmQgdGhlIHdvcmthcm91bmQKLSAgIGlzIHRvIHNlbGVjdCB0aGUgYXVkaW8gc3RhbmRhcmQgZXhwbGljaXRseS4gTWFueSB0aGFua3MgdG8gSGF1cHBhdWdlIGZvcgotICAgcHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24uICovCi0jZGVmaW5lIENYMjU4NDBfQ0lEX0VOQUJMRV9QVlIxNTBfV09SS0FST1VORCAoVjRMMl9DSURfUFJJVkFURV9CQVNFKzApCitzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZTsKIAogc3RydWN0IGN4MjU4NDBfc3RhdGUgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjOwogCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOworCXN0cnVjdCB7CisJCS8qIHZvbHVtZSBjbHVzdGVyICovCisJCXN0cnVjdCB2NGwyX2N0cmwgKnZvbHVtZTsKKwkJc3RydWN0IHY0bDJfY3RybCAqbXV0ZTsKKwl9OwogCWludCBwdnIxNTBfd29ya2Fyb3VuZDsKIAlpbnQgcmFkaW87CiAJdjRsMl9zdGRfaWQgc3RkOwpAQCAtNDQsMTQgKzQ1LDEzIEBACiAJZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dDsKIAl1MzIgYXVkY2xrX2ZyZXE7CiAJaW50IGF1ZG1vZGU7Ci0JaW50IHVubXV0ZV92b2x1bWU7IC8qIC0xIGlmIG5vdCBtdXRlZCAqLwotCWludCBkZWZhdWx0X3ZvbHVtZTsKIAlpbnQgdmJpX2xpbmVfb2Zmc2V0OwogCXUzMiBpZDsKIAl1MzIgcmV2OwogCWludCBpc19pbml0aWFsaXplZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBmd193YWl0OyAgICAvKiB3YWtlIHVwIHdoZW4gdGhlIGZ3IGxvYWQgaXMgZmluaXNoZWQgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZndfd29yazsgICAvKiB3b3JrIGVudHJ5IGZvciBmdyBsb2FkICovCisJc3RydWN0IGN4MjU4NDBfaXJfc3RhdGUgKmlyX3N0YXRlOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKQEAgLTU5LDYgKzU5LDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGN4MjU4NDBfc3RhdGUsIHNkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IGN4MjU4NDBfc3RhdGUsIGhkbCktPnNkOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfY3gyNTgzeChzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUpCiB7CiAJcmV0dXJuIHN0YXRlLT5pZCA9PSBWNEwyX0lERU5UX0NYMjU4MzYgfHwKQEAgLTc3LDYgKzgyLDIxIEBACiAJICAgICAgIHN0YXRlLT5pZCA9PSBWNEwyX0lERU5UX0NYMjM4ODhfQVY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jeDIzODg1KHN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSkKK3sKKwlyZXR1cm4gc3RhdGUtPmlkID09IFY0TDJfSURFTlRfQ1gyMzg4NV9BVjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX2N4MjM4ODcoc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBzdGF0ZS0+aWQgPT0gVjRMMl9JREVOVF9DWDIzODg3X0FWOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfY3gyMzg4OChzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIHN0YXRlLT5pZCA9PSBWNEwyX0lERU5UX0NYMjM4ODhfQVY7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDI1ODUwLWNvcmUuYyAJCQkJCQkJICAgKi8KIGludCBjeDI1ODQwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1OCB2YWx1ZSk7CkBAIC04NCw2ICsxMDQsOCBAQAogdTggY3gyNTg0MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyKTsKIHUzMiBjeDI1ODQwX3JlYWQ0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyKTsKIGludCBjeDI1ODQwX2FuZF9vcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgYWRkciwgdW5zaWduZWQgbWFzaywgdTggdmFsdWUpOworaW50IGN4MjU4NDBfYW5kX29yNChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgYWRkciwgdTMyIGFuZF9tYXNrLAorCQkgICAgdTMyIG9yX3ZhbHVlKTsKIHZvaWQgY3gyNTg0MF9zdGRfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC05NCw4ICsxMTYsOCBAQAogLyogY3gyNTg1MC1hdWRpby5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHZvaWQgY3gyNTg0MF9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIGludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7Ci1pbnQgY3gyNTg0MF9hdWRpb19nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7Ci1pbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBjeDI1ODQwX2F1ZGlvX2N0cmxfb3BzOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gyNTg1MC12YmkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNCw0ICsxMjYsMTIgQEAKIGludCBjeDI1ODQwX2dfc2xpY2VkX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10KTsKIGludCBjeDI1ODQwX2RlY29kZV92YmlfbGluZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSk7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBjeDI1ODUwLWlyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9pcl9vcHMgY3gyNTg0MF9pcl9vcHM7CitpbnQgY3gyNTg0MF9pcl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworaW50IGN4MjU4NDBfaXJfaXJxX2hhbmRsZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHN0YXR1cywgYm9vbCAqaGFuZGxlZCk7CitpbnQgY3gyNTg0MF9pcl9wcm9iZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKK2ludCBjeDI1ODQwX2lyX3JlbW92ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1pci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI0YzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtaXIuYwpAQCAtMCwwICsxLDEyNzkgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgQ1gyNTg0eCBBdWRpby9WaWRlbyBkZWNvZGVyIGNoaXAgYW5kIHJlbGF0ZWQgY29yZXMKKyAqCisgKiAgSW50ZWdyYXRlZCBDb25zdW1lciBJbmZyYXJlZCBDb250cm9sbGVyCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCAgQW5keSBXYWxscyA8YXdhbGxzQG1kLm1ldHJvY2FzdC5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KKyNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CisjaW5jbHVkZSA8bWVkaWEvaXItY29yZS5oPgorCisjaW5jbHVkZSAiY3gyNTg0MC1jb3JlLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXJfZGVidWc7Cittb2R1bGVfcGFyYW0oaXJfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlyX2RlYnVnLCAiZW5hYmxlIGludGVncmF0ZWQgSVIgZGVidWcgbWVzc2FnZXMiKTsKKworI2RlZmluZSBDWDI1ODQwX0lSX1JFR19CQVNFIAkweDIwMAorCisjZGVmaW5lIENYMjU4NDBfSVJfQ05UUkxfUkVHCTB4MjAwCisjZGVmaW5lIENOVFJMX1dJTl8zXzMJMHgwMDAwMDAwMAorI2RlZmluZSBDTlRSTF9XSU5fNF8zCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ05UUkxfV0lOXzNfNAkweDAwMDAwMDAyCisjZGVmaW5lIENOVFJMX1dJTl80XzQJMHgwMDAwMDAwMworI2RlZmluZSBDTlRSTF9XSU4JMHgwMDAwMDAwMworI2RlZmluZSBDTlRSTF9FREdfTk9ORQkweDAwMDAwMDAwCisjZGVmaW5lIENOVFJMX0VER19GQUxMCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ05UUkxfRURHX1JJU0UJMHgwMDAwMDAwOAorI2RlZmluZSBDTlRSTF9FREdfQk9USAkweDAwMDAwMDBDCisjZGVmaW5lIENOVFJMX0VERwkweDAwMDAwMDBDCisjZGVmaW5lIENOVFJMX0RNRAkweDAwMDAwMDEwCisjZGVmaW5lIENOVFJMX01PRAkweDAwMDAwMDIwCisjZGVmaW5lIENOVFJMX1JGRQkweDAwMDAwMDQwCisjZGVmaW5lIENOVFJMX1RGRQkweDAwMDAwMDgwCisjZGVmaW5lIENOVFJMX1JYRQkweDAwMDAwMTAwCisjZGVmaW5lIENOVFJMX1RYRQkweDAwMDAwMjAwCisjZGVmaW5lIENOVFJMX1JJQwkweDAwMDAwNDAwCisjZGVmaW5lIENOVFJMX1RJQwkweDAwMDAwODAwCisjZGVmaW5lIENOVFJMX0NQTAkweDAwMDAxMDAwCisjZGVmaW5lIENOVFJMX0xCTQkweDAwMDAyMDAwCisjZGVmaW5lIENOVFJMX1IJCTB4MDAwMDQwMDAKKworI2RlZmluZSBDWDI1ODQwX0lSX1RYQ0xLX1JFRwkweDIwNAorI2RlZmluZSBUWENMS19UQ0QJMHgwMDAwRkZGRgorCisjZGVmaW5lIENYMjU4NDBfSVJfUlhDTEtfUkVHCTB4MjA4CisjZGVmaW5lIFJYQ0xLX1JDRAkweDAwMDBGRkZGCisKKyNkZWZpbmUgQ1gyNTg0MF9JUl9DRFVUWV9SRUcJMHgyMEMKKyNkZWZpbmUgQ0RVVFlfQ0RDCTB4MDAwMDAwMEYKKworI2RlZmluZSBDWDI1ODQwX0lSX1NUQVRTX1JFRwkweDIxMAorI2RlZmluZSBTVEFUU19SVE8JMHgwMDAwMDAwMQorI2RlZmluZSBTVEFUU19ST1IJMHgwMDAwMDAwMgorI2RlZmluZSBTVEFUU19SQlkJMHgwMDAwMDAwNAorI2RlZmluZSBTVEFUU19UQlkJMHgwMDAwMDAwOAorI2RlZmluZSBTVEFUU19SU1IJMHgwMDAwMDAxMAorI2RlZmluZSBTVEFUU19UU1IJMHgwMDAwMDAyMAorCisjZGVmaW5lIENYMjU4NDBfSVJfSVJRRU5fUkVHCTB4MjE0CisjZGVmaW5lIElSUUVOX1JURQkweDAwMDAwMDAxCisjZGVmaW5lIElSUUVOX1JPRQkweDAwMDAwMDAyCisjZGVmaW5lIElSUUVOX1JTRQkweDAwMDAwMDEwCisjZGVmaW5lIElSUUVOX1RTRQkweDAwMDAwMDIwCisjZGVmaW5lIElSUUVOX01TSwkweDAwMDAwMDMzCisKKyNkZWZpbmUgQ1gyNTg0MF9JUl9GSUxUUl9SRUcJMHgyMTgKKyNkZWZpbmUgRklMVFJfTFBGCTB4MDAwMEZGRkYKKworI2RlZmluZSBDWDI1ODQwX0lSX0ZJRk9fUkVHCTB4MjNDCisjZGVmaW5lIEZJRk9fUlhUWAkweDAwMDBGRkZGCisjZGVmaW5lIEZJRk9fUlhUWF9MVkwJMHgwMDAxMDAwMAorI2RlZmluZSBGSUZPX1JYVFhfUlRPCTB4MDAwMUZGRkYKKyNkZWZpbmUgRklGT19SWF9ORFYJMHgwMDAyMDAwMAorI2RlZmluZSBGSUZPX1JYX0RFUFRICTgKKyNkZWZpbmUgRklGT19UWF9ERVBUSAk4CisKKyNkZWZpbmUgQ1gyNTg0MF9WSURDTEtfRlJFUQkxMDgwMDAwMDAgLyogMTA4IE1IeiwgQlQuNjU2ICovCisjZGVmaW5lIENYMjU4NDBfSVJfUkVGQ0xLX0ZSRVEJKENYMjU4NDBfVklEQ0xLX0ZSRVEgLyAyKQorCisvKgorICogV2UgdXNlIHRoaXMgdW5pb24gaW50ZXJuYWxseSBmb3IgY29udmVuaWVuY2UsIGJ1dCBjYWxsZXJzIHRvIHR4X3dyaXRlCisgKiBhbmQgcnhfcmVhZCB3aWxsIGJlIGV4cGVjdGluZyByZWNvcmRzIG9mIHR5cGUgc3RydWN0IGlyX3Jhd19ldmVudC4KKyAqIEFsd2F5cyBlbnN1cmUgdGhlIHNpemUgb2YgdGhpcyB1bmlvbiBpcyBkaWN0YXRlZCBieSBzdHJ1Y3QgaXJfcmF3X2V2ZW50LgorICovCit1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjIHsKKwl1MzIgaHdfZmlmb19kYXRhOworCXN0cnVjdCBpcl9yYXdfZXZlbnQgaXJfY29yZV9kYXRhOworfTsKKworI2RlZmluZSBDWDI1ODQwX0lSX1JYX0tGSUZPX1NJWkUgICAgKDI1NiAqIHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKSkKKyNkZWZpbmUgQ1gyNTg0MF9JUl9UWF9LRklGT19TSVpFICAgICgyNTYgKiBzaXplb2YodW5pb24gY3gyNTg0MF9pcl9maWZvX3JlYykpCisKK3N0cnVjdCBjeDI1ODQwX2lyX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKworCXN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHJ4X3BhcmFtczsKKwlzdHJ1Y3QgbXV0ZXggcnhfcGFyYW1zX2xvY2s7IC8qIHByb3RlY3RzIFJ4IHBhcmFtZXRlciBzZXR0aW5ncyBjYWNoZSAqLworCWF0b21pY190IHJ4Y2xrX2RpdmlkZXI7CisJYXRvbWljX3QgcnhfaW52ZXJ0OworCisJc3RydWN0IGtmaWZvIHJ4X2tmaWZvOworCXNwaW5sb2NrX3Qgcnhfa2ZpZm9fbG9jazsgLyogcHJvdGVjdCBSeCBkYXRhIGtmaWZvICovCisKKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyB0eF9wYXJhbXM7CisJc3RydWN0IG11dGV4IHR4X3BhcmFtc19sb2NrOyAvKiBwcm90ZWN0cyBUeCBwYXJhbWV0ZXIgc2V0dGluZ3MgY2FjaGUgKi8KKwlhdG9taWNfdCB0eGNsa19kaXZpZGVyOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqdG9faXJfc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJcmV0dXJuIHN0YXRlID8gc3RhdGUtPmlyX3N0YXRlIDogTlVMTDsKK30KKworCisvKgorICogUnggYW5kIFR4IENsb2NrIERpdmlkZXIgcmVnaXN0ZXIgY29tcHV0YXRpb25zCisgKgorICogTm90ZSB0aGUgbGFyZ2VzdCBjbG9jayBkaXZpZGVyIHZhbHVlIG9mIDB4ZmZmZiBjb3JyZXNwb25kcyB0bzoKKyAqIAkoMHhmZmZmICsgMSkgKiAxMDAwIC8gMTA4LzIgTUh6ID0gMSwyMTMsNjI5LjYyOS4uLiBucworICogd2hpY2ggZml0cyBpbiAyMSBiaXRzLCBzbyB3ZSdsbCB1c2UgdW5zaWduZWQgaW50IGZvciB0aW1lIGFyZ3VtZW50cy4KKyAqLworc3RhdGljIGlubGluZSB1MTYgY291bnRfdG9fY2xvY2tfZGl2aWRlcih1bnNpZ25lZCBpbnQgZCkKK3sKKwlpZiAoZCA+IFJYQ0xLX1JDRCArIDEpCisJCWQgPSBSWENMS19SQ0Q7CisJZWxzZSBpZiAoZCA8IDIpCisJCWQgPSAxOworCWVsc2UKKwkJZC0tOworCXJldHVybiAodTE2KSBkOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBuc190b19jbG9ja19kaXZpZGVyKHVuc2lnbmVkIGludCBucykKK3sKKwlyZXR1cm4gY291bnRfdG9fY2xvY2tfZGl2aWRlcigKKwkJRElWX1JPVU5EX0NMT1NFU1QoQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDAgKiBucywgMTAwMCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjbG9ja19kaXZpZGVyX3RvX25zKHVuc2lnbmVkIGludCBkaXZpZGVyKQoreworCS8qIFBlcmlvZCBvZiB0aGUgUnggb3IgVHggY2xvY2sgaW4gbnMgKi8KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoKGRpdmlkZXIgKyAxKSAqIDEwMDAsCisJCQkJIENYMjU4NDBfSVJfUkVGQ0xLX0ZSRVEgLyAxMDAwMDAwKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgY2Fycmllcl9mcmVxX3RvX2Nsb2NrX2RpdmlkZXIodW5zaWduZWQgaW50IGZyZXEpCit7CisJcmV0dXJuIGNvdW50X3RvX2Nsb2NrX2RpdmlkZXIoCisJCQkgIERJVl9ST1VORF9DTE9TRVNUKENYMjU4NDBfSVJfUkVGQ0xLX0ZSRVEsIGZyZXEgKiAxNikpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjbG9ja19kaXZpZGVyX3RvX2NhcnJpZXJfZnJlcSh1bnNpZ25lZCBpbnQgZGl2aWRlcikKK3sKKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSwgKGRpdmlkZXIgKyAxKSAqIDE2KTsKK30KKworc3RhdGljIGlubGluZSB1MTYgZnJlcV90b19jbG9ja19kaXZpZGVyKHVuc2lnbmVkIGludCBmcmVxLAorCQkJCQl1bnNpZ25lZCBpbnQgcm9sbG92ZXJzKQoreworCXJldHVybiBjb3VudF90b19jbG9ja19kaXZpZGVyKAorCQkgICBESVZfUk9VTkRfQ0xPU0VTVChDWDI1ODQwX0lSX1JFRkNMS19GUkVRLCBmcmVxICogcm9sbG92ZXJzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNsb2NrX2RpdmlkZXJfdG9fZnJlcSh1bnNpZ25lZCBpbnQgZGl2aWRlciwKKwkJCQkJCSB1bnNpZ25lZCBpbnQgcm9sbG92ZXJzKQoreworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChDWDI1ODQwX0lSX1JFRkNMS19GUkVRLAorCQkJCSAoZGl2aWRlciArIDEpICogcm9sbG92ZXJzKTsKK30KKworLyoKKyAqIExvdyBQYXNzIEZpbHRlciByZWdpc3RlciBjYWxjdWxhdGlvbnMKKyAqCisgKiBOb3RlIHRoZSBsYXJnZXN0IGNvdW50IHZhbHVlIG9mIDB4ZmZmZiBjb3JyZXNwb25kcyB0bzoKKyAqIAkweGZmZmYgKiAxMDAwIC8gMTA4LzIgTUh6ID0gMSwyMTMsNjExLjExLi4uIG5zCisgKiB3aGljaCBmaXRzIGluIDIxIGJpdHMsIHNvIHdlJ2xsIHVzZSB1bnNpZ25lZCBpbnQgZm9yIHRpbWUgYXJndW1lbnRzLgorICovCitzdGF0aWMgaW5saW5lIHUxNiBjb3VudF90b19scGZfY291bnQodW5zaWduZWQgaW50IGQpCit7CisJaWYgKGQgPiBGSUxUUl9MUEYpCisJCWQgPSBGSUxUUl9MUEY7CisJZWxzZSBpZiAoZCA8IDQpCisJCWQgPSAwOworCXJldHVybiAodTE2KSBkOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBuc190b19scGZfY291bnQodW5zaWduZWQgaW50IG5zKQoreworCXJldHVybiBjb3VudF90b19scGZfY291bnQoCisJCURJVl9ST1VORF9DTE9TRVNUKENYMjU4NDBfSVJfUkVGQ0xLX0ZSRVEgLyAxMDAwMDAwICogbnMsIDEwMDApKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBmX2NvdW50X3RvX25zKHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwkvKiBEdXJhdGlvbiBvZiB0aGUgTG93IFBhc3MgRmlsdGVyIHJlamVjdGlvbiB3aW5kb3cgaW4gbnMgKi8KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY291bnQgKiAxMDAwLAorCQkJCSBDWDI1ODQwX0lSX1JFRkNMS19GUkVRIC8gMTAwMDAwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGxwZl9jb3VudF90b191cyh1bnNpZ25lZCBpbnQgY291bnQpCit7CisJLyogRHVyYXRpb24gb2YgdGhlIExvdyBQYXNzIEZpbHRlciByZWplY3Rpb24gd2luZG93IGluIHVzICovCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKGNvdW50LCBDWDI1ODQwX0lSX1JFRkNMS19GUkVRIC8gMTAwMDAwMCk7Cit9CisKKy8qCisgKiBGSUZPIHJlZ2lzdGVyIHB1bHNlIHdpZHRoIGNvdW50IGNvbXB1YXRpb25zCisgKi8KK3N0YXRpYyB1MzIgY2xvY2tfZGl2aWRlcl90b19yZXNvbHV0aW9uKHUxNiBkaXZpZGVyKQoreworCS8qCisJICogUmVzb2x1dGlvbiBpcyB0aGUgZHVyYXRpb24gb2YgMSB0aWNrIG9mIHRoZSByZWFkYWJsZSBwb3J0aW9uIG9mCisJICogb2YgdGhlIHB1bHNlIHdpZHRoIGNvdW50ZXIgYXMgcmVhZCBmcm9tIHRoZSBGSUZPLiAgVGhlIHR3byBsc2IncyBhcmUKKwkgKiBub3QgcmVhZGFibGUsIGhlbmNlIHRoZSA8PCAyLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIG5zLgorCSAqLworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVCgoMSA8PCAyKSAgKiAoKHUzMikgZGl2aWRlciArIDEpICogMTAwMCwKKwkJCQkgQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDApOworfQorCitzdGF0aWMgdTY0IHB1bHNlX3dpZHRoX2NvdW50X3RvX25zKHUxNiBjb3VudCwgdTE2IGRpdmlkZXIpCit7CisJdTY0IG47CisJdTMyIHJlbTsKKworCS8qCisJICogVGhlIDIgbHNiJ3Mgb2YgdGhlIHB1bHNlIHdpZHRoIHRpbWVyIGNvdW50IGFyZSBub3QgcmVhZGFibGUsIGhlbmNlCisJICogdGhlIChjb3VudCA8PCAyKSB8IDB4MworCSAqLworCW4gPSAoKCh1NjQpIGNvdW50IDw8IDIpIHwgMHgzKSAqIChkaXZpZGVyICsgMSkgKiAxMDAwOyAvKiBtaWxsaWN5Y2xlcyAqLworCXJlbSA9IGRvX2RpdihuLCBDWDI1ODQwX0lSX1JFRkNMS19GUkVRIC8gMTAwMDAwMCk7ICAgICAvKiAvIE1IeiA9PiBucyAqLworCWlmIChyZW0gPj0gQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDAgLyAyKQorCQluKys7CisJcmV0dXJuIG47Cit9CisKKyNpZiAwCisvKiBLZWVwIGFzIHdlIHdpbGwgbmVlZCB0aGlzIGZvciBUcmFuc21pdCBmdW5jdGlvbmFsaXR5ICovCitzdGF0aWMgdTE2IG5zX3RvX3B1bHNlX3dpZHRoX2NvdW50KHUzMiBucywgdTE2IGRpdmlkZXIpCit7CisJdTY0IG47CisJdTMyIGQ7CisJdTMyIHJlbTsKKworCS8qCisJICogVGhlIDIgbHNiJ3Mgb2YgdGhlIHB1bHNlIHdpZHRoIHRpbWVyIGNvdW50IGFyZSBub3QgYWNjZXNzYWJsZSwgaGVuY2UKKwkgKiB0aGUgKDEgPDwgMikKKwkgKi8KKwluID0gKCh1NjQpIG5zKSAqIENYMjU4NDBfSVJfUkVGQ0xLX0ZSRVEgLyAxMDAwMDAwOyAvKiBtaWxsaWN5Y2xlcyAqLworCWQgPSAoMSA8PCAyKSAqICgodTMyKSBkaXZpZGVyICsgMSkgKiAxMDAwOyAvKiBtaWxsaWN5Y2xlcy9jb3VudCAqLworCXJlbSA9IGRvX2RpdihuLCBkKTsKKwlpZiAocmVtID49IGQgLyAyKQorCQluKys7CisKKwlpZiAobiA+IEZJRk9fUlhUWCkKKwkJbiA9IEZJRk9fUlhUWDsKKwllbHNlIGlmIChuID09IDApCisJCW4gPSAxOworCXJldHVybiAodTE2KSBuOworfQorCisjZW5kaWYKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHVsc2Vfd2lkdGhfY291bnRfdG9fdXModTE2IGNvdW50LCB1MTYgZGl2aWRlcikKK3sKKwl1NjQgbjsKKwl1MzIgcmVtOworCisJLyoKKwkgKiBUaGUgMiBsc2IncyBvZiB0aGUgcHVsc2Ugd2lkdGggdGltZXIgY291bnQgYXJlIG5vdCByZWFkYWJsZSwgaGVuY2UKKwkgKiB0aGUgKGNvdW50IDw8IDIpIHwgMHgzCisJICovCisJbiA9ICgoKHU2NCkgY291bnQgPDwgMikgfCAweDMpICogKGRpdmlkZXIgKyAxKTsgICAgLyogY3ljbGVzICAgICAgKi8KKwlyZW0gPSBkb19kaXYobiwgQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDApOyAvKiAvIE1IeiA9PiB1cyAqLworCWlmIChyZW0gPj0gQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDAgLyAyKQorCQluKys7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIG47Cit9CisKKy8qCisgKiBQdWxzZSBDbG9ja3MgY29tcHV0YXRpb25zOiBDb21iaW5lZCBQdWxzZSBXaWR0aCBDb3VudCAmIFJ4IENsb2NrIENvdW50cworICoKKyAqIFRoZSB0b3RhbCBwdWxzZSBjbG9jayBjb3VudCBpcyBhbiAxOCBiaXQgcHVsc2Ugd2lkdGggdGltZXIgY291bnQgYXMgdGhlIG1vc3QKKyAqIHNpZ25pZmljYW50IHBhcnQgYW5kICh1cCB0bykgMTYgYml0IGNsb2NrIGRpdmlkZXIgY291bnQgYXMgYSBtb2R1bHVzLgorICogV2hlbiB0aGUgUnggY2xvY2sgZGl2aWRlciB0aWNrcyBkb3duIHRvIDAsIGl0IGluY3JlbWVudHMgdGhlIDE4IGJpdCBwdWxzZQorICogd2lkdGggdGltZXIgY291bnQncyBsZWFzdCBzaWduaWZpY2FudCBiaXQuCisgKi8KK3N0YXRpYyB1NjQgbnNfdG9fcHVsc2VfY2xvY2tzKHUzMiBucykKK3sKKwl1NjQgY2xvY2tzOworCXUzMiByZW07CisJY2xvY2tzID0gQ1gyNTg0MF9JUl9SRUZDTEtfRlJFUSAvIDEwMDAwMDAgKiAodTY0KSBuczsgLyogbWlsbGljeWNsZXMgICovCisJcmVtID0gZG9fZGl2KGNsb2NrcywgMTAwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC8xMDAwID0gY3ljbGVzICovCisJaWYgKHJlbSA+PSAxMDAwIC8gMikKKwkJY2xvY2tzKys7CisJcmV0dXJuIGNsb2NrczsKK30KKworc3RhdGljIHUxNiBwdWxzZV9jbG9ja3NfdG9fY2xvY2tfZGl2aWRlcih1NjQgY291bnQpCit7CisJdTMyIHJlbTsKKworCXJlbSA9IGRvX2Rpdihjb3VudCwgKEZJRk9fUlhUWCA8PCAyKSB8IDB4Myk7CisKKwkvKiBuZXQgcmVzdWx0IG5lZWRzIHRvIGJlIHJvdW5kZWQgZG93biBhbmQgZGVjcmVtZW50ZWQgYnkgMSAqLworCWlmIChjb3VudCA+IFJYQ0xLX1JDRCArIDEpCisJCWNvdW50ID0gUlhDTEtfUkNEOworCWVsc2UgaWYgKGNvdW50IDwgMikKKwkJY291bnQgPSAxOworCWVsc2UKKwkJY291bnQtLTsKKwlyZXR1cm4gKHUxNikgY291bnQ7Cit9CisKKy8qCisgKiBJUiBDb250cm9sIFJlZ2lzdGVyIGhlbHBlcnMKKyAqLworZW51bSB0eF9maWZvX3dhdGVybWFyayB7CisJVFhfRklGT19IQUxGX0VNUFRZID0gMCwKKwlUWF9GSUZPX0VNUFRZICAgICAgPSBDTlRSTF9USUMsCit9OworCitlbnVtIHJ4X2ZpZm9fd2F0ZXJtYXJrIHsKKwlSWF9GSUZPX0hBTEZfRlVMTCA9IDAsCisJUlhfRklGT19OT1RfRU1QVFkgPSBDTlRSTF9SSUMsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29udHJvbF90eF9pcnFfd2F0ZXJtYXJrKHN0cnVjdCBpMmNfY2xpZW50ICpjLAorCQkJCQkgICAgZW51bSB0eF9maWZvX3dhdGVybWFyayBsZXZlbCkKK3sKKwljeDI1ODQwX2FuZF9vcjQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcsIH5DTlRSTF9USUMsIGxldmVsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnRyb2xfcnhfaXJxX3dhdGVybWFyayhzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkJICAgIGVudW0gcnhfZmlmb193YXRlcm1hcmsgbGV2ZWwpCit7CisJY3gyNTg0MF9hbmRfb3I0KGMsIENYMjU4NDBfSVJfQ05UUkxfUkVHLCB+Q05UUkxfUklDLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb250cm9sX3R4X2VuYWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgYm9vbCBlbmFibGUpCit7CisJY3gyNTg0MF9hbmRfb3I0KGMsIENYMjU4NDBfSVJfQ05UUkxfUkVHLCB+KENOVFJMX1RYRSB8IENOVFJMX1RGRSksCisJCQllbmFibGUgPyAoQ05UUkxfVFhFIHwgQ05UUkxfVEZFKSA6IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udHJvbF9yeF9lbmFibGUoc3RydWN0IGkyY19jbGllbnQgKmMsIGJvb2wgZW5hYmxlKQoreworCWN4MjU4NDBfYW5kX29yNChjLCBDWDI1ODQwX0lSX0NOVFJMX1JFRywgfihDTlRSTF9SWEUgfCBDTlRSTF9SRkUpLAorCQkJZW5hYmxlID8gKENOVFJMX1JYRSB8IENOVFJMX1JGRSkgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnRyb2xfdHhfbW9kdWxhdGlvbl9lbmFibGUoc3RydWN0IGkyY19jbGllbnQgKmMsCisJCQkJCQlib29sIGVuYWJsZSkKK3sKKwljeDI1ODQwX2FuZF9vcjQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcsIH5DTlRSTF9NT0QsCisJCQllbmFibGUgPyBDTlRSTF9NT0QgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvbnRyb2xfcnhfZGVtb2R1bGF0aW9uX2VuYWJsZShzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkJCSAgYm9vbCBlbmFibGUpCit7CisJY3gyNTg0MF9hbmRfb3I0KGMsIENYMjU4NDBfSVJfQ05UUkxfUkVHLCB+Q05UUkxfRE1ELAorCQkJZW5hYmxlID8gQ05UUkxfRE1EIDogMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb250cm9sX3J4X3NfZWRnZV9kZXRlY3Rpb24oc3RydWN0IGkyY19jbGllbnQgKmMsCisJCQkJCSAgICAgICB1MzIgZWRnZV90eXBlcykKK3sKKwljeDI1ODQwX2FuZF9vcjQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcsIH5DTlRSTF9FREdfQk9USCwKKwkJCWVkZ2VfdHlwZXMgJiBDTlRSTF9FREdfQk9USCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnRyb2xfcnhfc19jYXJyaWVyX3dpbmRvdyhzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkJdW5zaWduZWQgaW50IGNhcnJpZXIsCisJCQkJCXVuc2lnbmVkIGludCAqY2Fycmllcl9yYW5nZV9sb3csCisJCQkJCXVuc2lnbmVkIGludCAqY2Fycmllcl9yYW5nZV9oaWdoKQoreworCXUzMiB2OworCXVuc2lnbmVkIGludCBjMTYgPSBjYXJyaWVyICogMTY7CisKKwlpZiAoKmNhcnJpZXJfcmFuZ2VfbG93IDwgRElWX1JPVU5EX0NMT1NFU1QoYzE2LCAxNiArIDMpKSB7CisJCXYgPSBDTlRSTF9XSU5fM180OworCQkqY2Fycmllcl9yYW5nZV9sb3cgPSBESVZfUk9VTkRfQ0xPU0VTVChjMTYsIDE2ICsgNCk7CisJfSBlbHNlIHsKKwkJdiA9IENOVFJMX1dJTl8zXzM7CisJCSpjYXJyaWVyX3JhbmdlX2xvdyA9IERJVl9ST1VORF9DTE9TRVNUKGMxNiwgMTYgKyAzKTsKKwl9CisKKwlpZiAoKmNhcnJpZXJfcmFuZ2VfaGlnaCA+IERJVl9ST1VORF9DTE9TRVNUKGMxNiwgMTYgLSAzKSkgeworCQl2IHw9IENOVFJMX1dJTl80XzM7CisJCSpjYXJyaWVyX3JhbmdlX2hpZ2ggPSBESVZfUk9VTkRfQ0xPU0VTVChjMTYsIDE2IC0gNCk7CisJfSBlbHNlIHsKKwkJdiB8PSBDTlRSTF9XSU5fM18zOworCQkqY2Fycmllcl9yYW5nZV9oaWdoID0gRElWX1JPVU5EX0NMT1NFU1QoYzE2LCAxNiAtIDMpOworCX0KKwljeDI1ODQwX2FuZF9vcjQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcsIH5DTlRSTF9XSU4sIHYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29udHJvbF90eF9wb2xhcml0eV9pbnZlcnQoc3RydWN0IGkyY19jbGllbnQgKmMsCisJCQkJCSAgICAgIGJvb2wgaW52ZXJ0KQoreworCWN4MjU4NDBfYW5kX29yNChjLCBDWDI1ODQwX0lSX0NOVFJMX1JFRywgfkNOVFJMX0NQTCwKKwkJCWludmVydCA/IENOVFJMX0NQTCA6IDApOworfQorCisvKgorICogSVIgUnggJiBUeCBDbG9jayBSZWdpc3RlciBoZWxwZXJzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHhjbGtfdHhfc19jYXJyaWVyKHN0cnVjdCBpMmNfY2xpZW50ICpjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZnJlcSwKKwkJCQkgICAgICAgdTE2ICpkaXZpZGVyKQoreworCSpkaXZpZGVyID0gY2Fycmllcl9mcmVxX3RvX2Nsb2NrX2RpdmlkZXIoZnJlcSk7CisJY3gyNTg0MF93cml0ZTQoYywgQ1gyNTg0MF9JUl9UWENMS19SRUcsICpkaXZpZGVyKTsKKwlyZXR1cm4gY2xvY2tfZGl2aWRlcl90b19jYXJyaWVyX2ZyZXEoKmRpdmlkZXIpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJ4Y2xrX3J4X3NfY2FycmllcihzdHJ1Y3QgaTJjX2NsaWVudCAqYywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGZyZXEsCisJCQkJICAgICAgIHUxNiAqZGl2aWRlcikKK3sKKwkqZGl2aWRlciA9IGNhcnJpZXJfZnJlcV90b19jbG9ja19kaXZpZGVyKGZyZXEpOworCWN4MjU4NDBfd3JpdGU0KGMsIENYMjU4NDBfSVJfUlhDTEtfUkVHLCAqZGl2aWRlcik7CisJcmV0dXJuIGNsb2NrX2RpdmlkZXJfdG9fY2Fycmllcl9mcmVxKCpkaXZpZGVyKTsKK30KKworc3RhdGljIHUzMiB0eGNsa190eF9zX21heF9wdWxzZV93aWR0aChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTMyIG5zLAorCQkJCSAgICAgIHUxNiAqZGl2aWRlcikKK3sKKwl1NjQgcHVsc2VfY2xvY2tzOworCisJaWYgKG5zID4gSVJfTUFYX0RVUkFUSU9OKQorCQlucyA9IElSX01BWF9EVVJBVElPTjsKKwlwdWxzZV9jbG9ja3MgPSBuc190b19wdWxzZV9jbG9ja3MobnMpOworCSpkaXZpZGVyID0gcHVsc2VfY2xvY2tzX3RvX2Nsb2NrX2RpdmlkZXIocHVsc2VfY2xvY2tzKTsKKwljeDI1ODQwX3dyaXRlNChjLCBDWDI1ODQwX0lSX1RYQ0xLX1JFRywgKmRpdmlkZXIpOworCXJldHVybiAodTMyKSBwdWxzZV93aWR0aF9jb3VudF90b19ucyhGSUZPX1JYVFgsICpkaXZpZGVyKTsKK30KKworc3RhdGljIHUzMiByeGNsa19yeF9zX21heF9wdWxzZV93aWR0aChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTMyIG5zLAorCQkJCSAgICAgIHUxNiAqZGl2aWRlcikKK3sKKwl1NjQgcHVsc2VfY2xvY2tzOworCisJaWYgKG5zID4gSVJfTUFYX0RVUkFUSU9OKQorCQlucyA9IElSX01BWF9EVVJBVElPTjsKKwlwdWxzZV9jbG9ja3MgPSBuc190b19wdWxzZV9jbG9ja3MobnMpOworCSpkaXZpZGVyID0gcHVsc2VfY2xvY2tzX3RvX2Nsb2NrX2RpdmlkZXIocHVsc2VfY2xvY2tzKTsKKwljeDI1ODQwX3dyaXRlNChjLCBDWDI1ODQwX0lSX1JYQ0xLX1JFRywgKmRpdmlkZXIpOworCXJldHVybiAodTMyKSBwdWxzZV93aWR0aF9jb3VudF90b19ucyhGSUZPX1JYVFgsICpkaXZpZGVyKTsKK30KKworLyoKKyAqIElSIFR4IENhcnJpZXIgRHV0eSBDeWNsZSByZWdpc3RlciBoZWxwZXJzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2R1dHlfdHhfc19kdXR5X2N5Y2xlKHN0cnVjdCBpMmNfY2xpZW50ICpjLAorCQkJCQkgIHVuc2lnbmVkIGludCBkdXR5X2N5Y2xlKQoreworCXUzMiBuOworCW4gPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5X2N5Y2xlICogMTAwLCA2MjUpOyAvKiAxNnRocyBvZiAxMDAlICovCisJaWYgKG4gIT0gMCkKKwkJbi0tOworCWlmIChuID4gMTUpCisJCW4gPSAxNTsKKwljeDI1ODQwX3dyaXRlNChjLCBDWDI1ODQwX0lSX0NEVVRZX1JFRywgbik7CisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKChuICsgMSkgKiAxMDAsIDE2KTsKK30KKworLyoKKyAqIElSIEZpbHRlciBSZWdpc3RlciBoZWxwZXJzCisgKi8KK3N0YXRpYyB1MzIgZmlsdGVyX3J4X3NfbWluX3dpZHRoKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1MzIgbWluX3dpZHRoX25zKQoreworCXUzMiBjb3VudCA9IG5zX3RvX2xwZl9jb3VudChtaW5fd2lkdGhfbnMpOworCWN4MjU4NDBfd3JpdGU0KGMsIENYMjU4NDBfSVJfRklMVFJfUkVHLCBjb3VudCk7CisJcmV0dXJuIGxwZl9jb3VudF90b19ucyhjb3VudCk7Cit9CisKKy8qCisgKiBJUiBJUlEgRW5hYmxlIFJlZ2lzdGVyIGhlbHBlcnMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGlycWVuYWJsZV9yeChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoaXNfY3gyMzg4NShzdGF0ZSkgfHwgaXNfY3gyMzg4NyhzdGF0ZSkpCisJCW1hc2sgXj0gSVJRRU5fTVNLOworCW1hc2sgJj0gKElSUUVOX1JURSB8IElSUUVOX1JPRSB8IElSUUVOX1JTRSk7CisJY3gyNTg0MF9hbmRfb3I0KHN0YXRlLT5jLCBDWDI1ODQwX0lSX0lSUUVOX1JFRywKKwkJCX4oSVJRRU5fUlRFIHwgSVJRRU5fUk9FIHwgSVJRRU5fUlNFKSwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFlbmFibGVfdHgoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIG1hc2spCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGlzX2N4MjM4ODUoc3RhdGUpIHx8IGlzX2N4MjM4ODcoc3RhdGUpKQorCQltYXNrIF49IElSUUVOX01TSzsKKwltYXNrICY9IElSUUVOX1RTRTsKKwljeDI1ODQwX2FuZF9vcjQoc3RhdGUtPmMsIENYMjU4NDBfSVJfSVJRRU5fUkVHLCB+SVJRRU5fVFNFLCBtYXNrKTsKK30KKworLyoKKyAqIFY0TDIgU3ViZGV2aWNlIElSIE9wcworICovCitpbnQgY3gyNTg0MF9pcl9pcnFfaGFuZGxlcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgc3RhdHVzLCBib29sICpoYW5kbGVkKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGUgPSB0b19pcl9zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjIHJ4X2RhdGFbRklGT19SWF9ERVBUSF07CisJdW5zaWduZWQgaW50IGksIGosIGs7CisJdTMyIGV2ZW50cywgdjsKKwlpbnQgdHNyLCByc3IsIHJ0bywgcm9yLCB0c2UsIHJzZSwgcnRlLCByb2UsIGtyb3I7CisJdTMyIGNudHJsLCBpcnFlbiwgc3RhdHM7CisKKwkqaGFuZGxlZCA9IGZhbHNlOworCWlmIChpcl9zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWMgPSBpcl9zdGF0ZS0+YzsKKworCS8qIE9ubHkgc3VwcG9ydCB0aGUgSVIgY29udHJvbGxlciBmb3IgdGhlIENYMjM4OFs1N10gQVYgQ29yZSBmb3Igbm93ICovCisJaWYgKCEoaXNfY3gyMzg4NShzdGF0ZSkgfHwgaXNfY3gyMzg4NyhzdGF0ZSkpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNudHJsID0gY3gyNTg0MF9yZWFkNChjLCBDWDI1ODQwX0lSX0NOVFJMX1JFRyk7CisJaXJxZW4gPSBjeDI1ODQwX3JlYWQ0KGMsIENYMjU4NDBfSVJfSVJRRU5fUkVHKTsKKwlpZiAoaXNfY3gyMzg4NShzdGF0ZSkgfHwgaXNfY3gyMzg4NyhzdGF0ZSkpCisJCWlycWVuIF49IElSUUVOX01TSzsKKwlzdGF0cyA9IGN4MjU4NDBfcmVhZDQoYywgQ1gyNTg0MF9JUl9TVEFUU19SRUcpOworCisJdHNyID0gc3RhdHMgJiBTVEFUU19UU1I7IC8qIFR4IEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisJcnNyID0gc3RhdHMgJiBTVEFUU19SU1I7IC8qIFJ4IEZJRk8gU2VydmljZSBSZXF1ZXN0ICovCisJcnRvID0gc3RhdHMgJiBTVEFUU19SVE87IC8qIFJ4IFB1bHNlIFdpZHRoIFRpbWVyIFRpbWUgT3V0ICovCisJcm9yID0gc3RhdHMgJiBTVEFUU19ST1I7IC8qIFJ4IEZJRk8gT3ZlciBSdW4gKi8KKworCXRzZSA9IGlycWVuICYgSVJRRU5fVFNFOyAvKiBUeCBGSUZPIFNlcnZpY2UgUmVxdWVzdCBJUlEgRW5hYmxlICovCisJcnNlID0gaXJxZW4gJiBJUlFFTl9SU0U7IC8qIFJ4IEZJRk8gU2VydmljZSBSZXVxZXN0IElSUSBFbmFibGUgKi8KKwlydGUgPSBpcnFlbiAmIElSUUVOX1JURTsgLyogUnggUHVsc2UgV2lkdGggVGltZXIgVGltZSBPdXQgSVJRIEVuYWJsZSAqLworCXJvZSA9IGlycWVuICYgSVJRRU5fUk9FOyAvKiBSeCBGSUZPIE92ZXIgUnVuIElSUSBFbmFibGUgKi8KKworCXY0bDJfZGJnKDIsIGlyX2RlYnVnLCBzZCwgIklSIElSUSBTdGF0dXM6ICAlcyAlcyAlcyAlcyAlcyAlc1xuIiwKKwkJIHRzciA/ICJ0c3IiIDogIiAgICIsIHJzciA/ICJyc3IiIDogIiAgICIsCisJCSBydG8gPyAicnRvIiA6ICIgICAiLCByb3IgPyAicm9yIiA6ICIgICAiLAorCQkgc3RhdHMgJiBTVEFUU19UQlkgPyAidGJ5IiA6ICIgICAiLAorCQkgc3RhdHMgJiBTVEFUU19SQlkgPyAicmJ5IiA6ICIgICAiKTsKKworCXY0bDJfZGJnKDIsIGlyX2RlYnVnLCBzZCwgIklSIElSUSBFbmFibGVzOiAlcyAlcyAlcyAlc1xuIiwKKwkJIHRzZSA/ICJ0c2UiIDogIiAgICIsIHJzZSA/ICJyc2UiIDogIiAgICIsCisJCSBydGUgPyAicnRlIiA6ICIgICAiLCByb2UgPyAicm9lIiA6ICIgICAiKTsKKworCS8qCisJICogVHJhbnNtaXR0ZXIgaW50ZXJydXB0IHNlcnZpY2UKKwkgKi8KKwlpZiAodHNlICYmIHRzcikgeworCQkvKgorCQkgKiBUT0RPOgorCQkgKiBDaGVjayB0aGUgd2F0ZXJtYXJrIHRocmVzaG9sZCBzZXR0aW5nCisJCSAqIFB1bGwgRklGT19UWF9ERVBUSCBvciBGSUZPX1RYX0RFUFRILzIgZW50cmllcyBmcm9tIHR4X2tmaWZvCisJCSAqIFB1c2ggdGhlIGRhdGEgdG8gdGhlIGhhcmR3YXJlIEZJRk8uCisJCSAqIElmIHRoZXJlIHdhcyBub3RoaW5nIG1vcmUgdG8gc2VuZCBpbiB0aGUgdHhfa2ZpZm8sIGRpc2FibGUKKwkJICoJdGhlIFRTUiBJUlEgYW5kIG5vdGlmeSB0aGUgdjRsMl9kZXZpY2UuCisJCSAqIElmIHRoZXJlIHdhcyBzb21ldGhpbmcgaW4gdGhlIHR4X2tmaWZvLCBjaGVjayB0aGUgdHhfa2ZpZm8KKwkJICogICAgICBsZXZlbCBhbmQgbm90aWZ5IHRoZSB2NGwyX2RldmljZSwgaWYgaXQgaXMgbG93LgorCQkgKi8KKwkJLyogRm9yIG5vdywgaW5oaWJpdCBUU1IgaW50ZXJydXB0IHVudGlsIFR4IGlzIGltcGxlbWVudGVkICovCisJCWlycWVuYWJsZV90eChzZCwgMCk7CisJCWV2ZW50cyA9IFY0TDJfU1VCREVWX0lSX1RYX0ZJRk9fU0VSVklDRV9SRVE7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgVjRMMl9TVUJERVZfSVJfVFhfTk9USUZZLCAmZXZlbnRzKTsKKwkJKmhhbmRsZWQgPSB0cnVlOworCX0KKworCS8qCisJICogUmVjZWl2ZXIgaW50ZXJydXB0IHNlcnZpY2UKKwkgKi8KKwlrcm9yID0gMDsKKwlpZiAoKHJzZSAmJiByc3IpIHx8IChydGUgJiYgcnRvKSkgeworCQkvKgorCQkgKiBSZWNlaXZlIGRhdGEgb24gUlNSIHRvIGNsZWFyIHRoZSBTVEFUU19SU1IuCisJCSAqIFJlY2VpdmUgZGF0YSBvbiBSVE8sIHNpbmNlIHdlIG1heSBub3QgaGF2ZSB5ZXQgaGl0IHRoZSBSU1IKKwkJICogd2F0ZXJtYXJrIHdoZW4gd2UgcmVjZWl2ZSB0aGUgUlRPLgorCQkgKi8KKwkJZm9yIChpID0gMCwgdiA9IEZJRk9fUlhfTkRWOworCQkgICAgICh2ICYgRklGT19SWF9ORFYpICYmICFrcm9yOyBpID0gMCkgeworCQkJZm9yIChqID0gMDsKKwkJCSAgICAgKHYgJiBGSUZPX1JYX05EVikgJiYgaiA8IEZJRk9fUlhfREVQVEg7IGorKykgeworCQkJCXYgPSBjeDI1ODQwX3JlYWQ0KGMsIENYMjU4NDBfSVJfRklGT19SRUcpOworCQkJCXJ4X2RhdGFbaV0uaHdfZmlmb19kYXRhID0gdiAmIH5GSUZPX1JYX05EVjsKKwkJCQlpKys7CisJCQl9CisJCQlpZiAoaSA9PSAwKQorCQkJCWJyZWFrOworCQkJaiA9IGkgKiBzaXplb2YodW5pb24gY3gyNTg0MF9pcl9maWZvX3JlYyk7CisJCQlrID0ga2ZpZm9faW5fbG9ja2VkKCZpcl9zdGF0ZS0+cnhfa2ZpZm8sCisJCQkJCSAgICAodW5zaWduZWQgY2hhciAqKSByeF9kYXRhLCBqLAorCQkJCQkgICAgJmlyX3N0YXRlLT5yeF9rZmlmb19sb2NrKTsKKwkJCWlmIChrICE9IGopCisJCQkJa3JvcisrOyAvKiByeF9rZmlmbyBvdmVyIHJ1biAqLworCQl9CisJCSpoYW5kbGVkID0gdHJ1ZTsKKwl9CisKKwlldmVudHMgPSAwOworCXYgPSAwOworCWlmIChrcm9yKSB7CisJCWV2ZW50cyB8PSBWNEwyX1NVQkRFVl9JUl9SWF9TV19GSUZPX09WRVJSVU47CisJCXY0bDJfZXJyKHNkLCAiSVIgcmVjZWl2ZXIgc29mdHdhcmUgRklGTyBvdmVycnVuXG4iKTsKKwl9CisJaWYgKHJvZSAmJiByb3IpIHsKKwkJLyoKKwkJICogVGhlIFJYIEZJRk8gRW5hYmxlIChDTlRSTF9SRkUpIG11c3QgYmUgdG9nZ2xlZCB0byBjbGVhcgorCQkgKiB0aGUgUnggRklGTyBPdmVyIFJ1biBzdGF0dXMgKFNUQVRTX1JPUikKKwkJICovCisJCXYgfD0gQ05UUkxfUkZFOworCQlldmVudHMgfD0gVjRMMl9TVUJERVZfSVJfUlhfSFdfRklGT19PVkVSUlVOOworCQl2NGwyX2VycihzZCwgIklSIHJlY2VpdmVyIGhhcmR3YXJlIEZJRk8gb3ZlcnJ1blxuIik7CisJfQorCWlmIChydGUgJiYgcnRvKSB7CisJCS8qCisJCSAqIFRoZSBJUiBSZWNlaXZlciBFbmFibGUgKENOVFJMX1JYRSkgbXVzdCBiZSB0b2dnbGVkIHRvIGNsZWFyCisJCSAqIHRoZSBSeCBQdWxzZSBXaWR0aCBUaW1lciBUaW1lIE91dCAoU1RBVFNfUlRPKQorCQkgKi8KKwkJdiB8PSBDTlRSTF9SWEU7CisJCWV2ZW50cyB8PSBWNEwyX1NVQkRFVl9JUl9SWF9FTkRfT0ZfUlhfREVURUNURUQ7CisJfQorCWlmICh2KSB7CisJCS8qIENsZWFyIFNUQVRTX1JPUiAmIFNUQVRTX1JUTyBhcyBuZWVkZWQgYnkgcmVzZXRpbmcgaGFyZHdhcmUgKi8KKwkJY3gyNTg0MF93cml0ZTQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcsIGNudHJsICYgfnYpOworCQljeDI1ODQwX3dyaXRlNChjLCBDWDI1ODQwX0lSX0NOVFJMX1JFRywgY250cmwpOworCQkqaGFuZGxlZCA9IHRydWU7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZpcl9zdGF0ZS0+cnhfa2ZpZm9fbG9jaywgZmxhZ3MpOworCWlmIChrZmlmb19sZW4oJmlyX3N0YXRlLT5yeF9rZmlmbykgPj0gQ1gyNTg0MF9JUl9SWF9LRklGT19TSVpFIC8gMikKKwkJZXZlbnRzIHw9IFY0TDJfU1VCREVWX0lSX1JYX0ZJRk9fU0VSVklDRV9SRVE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJfc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKworCWlmIChldmVudHMpCisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgVjRMMl9TVUJERVZfSVJfUlhfTk9USUZZLCAmZXZlbnRzKTsKKwlyZXR1cm4gMDsKK30KKworLyogUmVjZWl2ZXIgKi8KK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl9yeF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4ICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgICAgIHNzaXplX3QgKm51bSkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGUgPSB0b19pcl9zdGF0ZShzZCk7CisJYm9vbCBpbnZlcnQ7CisJdTE2IGRpdmlkZXI7CisJdW5zaWduZWQgaW50IGksIG47CisJdW5pb24gY3gyNTg0MF9pcl9maWZvX3JlYyAqcDsKKwl1bnNpZ25lZCB1LCB2OworCisJaWYgKGlyX3N0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJaW52ZXJ0ID0gKGJvb2wpIGF0b21pY19yZWFkKCZpcl9zdGF0ZS0+cnhfaW52ZXJ0KTsKKwlkaXZpZGVyID0gKHUxNikgYXRvbWljX3JlYWQoJmlyX3N0YXRlLT5yeGNsa19kaXZpZGVyKTsKKworCW4gPSBjb3VudCAvIHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKQorCQkqIHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKTsKKwlpZiAobiA9PSAwKSB7CisJCSpudW0gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwluID0ga2ZpZm9fb3V0X2xvY2tlZCgmaXJfc3RhdGUtPnJ4X2tmaWZvLCBidWYsIG4sCisJCQkgICAgICZpcl9zdGF0ZS0+cnhfa2ZpZm9fbG9jayk7CisKKwluIC89IHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKTsKKwkqbnVtID0gbiAqIHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKTsKKworCWZvciAocCA9ICh1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjICopIGJ1ZiwgaSA9IDA7IGkgPCBuOyBwKyssIGkrKykgeworCisJCWlmICgocC0+aHdfZmlmb19kYXRhICYgRklGT19SWFRYX1JUTykgPT0gRklGT19SWFRYX1JUTykgeworCQkJLyogQXNzdW1lIFJUTyB3YXMgYmVjYXVzZSBvZiBubyBJUiBsaWdodCBpbnB1dCAqLworCQkJdSA9IDA7CisJCQl2NGwyX2RiZygyLCBpcl9kZWJ1Zywgc2QsICJyeCByZWFkOiBlbmQgb2YgcnhcbiIpOworCQl9IGVsc2UgeworCQkJdSA9IChwLT5od19maWZvX2RhdGEgJiBGSUZPX1JYVFhfTFZMKSA/IDEgOiAwOworCQkJaWYgKGludmVydCkKKwkJCQl1ID0gdSA/IDAgOiAxOworCQl9CisKKwkJdiA9ICh1bnNpZ25lZCkgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoCisJCQkJICAodTE2KSAocC0+aHdfZmlmb19kYXRhICYgRklGT19SWFRYKSwgZGl2aWRlcik7CisJCWlmICh2ID4gSVJfTUFYX0RVUkFUSU9OKQorCQkJdiA9IElSX01BWF9EVVJBVElPTjsKKworCQlwLT5pcl9jb3JlX2RhdGEucHVsc2UgPSB1OworCQlwLT5pcl9jb3JlX2RhdGEuZHVyYXRpb24gPSB2OworCisJCXY0bDJfZGJnKDIsIGlyX2RlYnVnLCBzZCwgInJ4IHJlYWQ6ICUxMHUgbnMgICVzXG4iLAorCQkJIHYsIHUgPyAibWFyayIgOiAic3BhY2UiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl9yeF9nX3BhcmFtZXRlcnMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGUgPSB0b19pcl9zdGF0ZShzZCk7CisKKwlpZiAoaXJfc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZpcl9zdGF0ZS0+cnhfcGFyYW1zX2xvY2spOworCW1lbWNweShwLCAmaXJfc3RhdGUtPnJ4X3BhcmFtcywKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMpKTsKKwltdXRleF91bmxvY2soJmlyX3N0YXRlLT5yeF9wYXJhbXNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl9yeF9zaHV0ZG93bihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDI1ODQwX2lyX3N0YXRlICppcl9zdGF0ZSA9IHRvX2lyX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKworCWlmIChpcl9zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWMgPSBpcl9zdGF0ZS0+YzsKKwltdXRleF9sb2NrKCZpcl9zdGF0ZS0+cnhfcGFyYW1zX2xvY2spOworCisJLyogRGlzYWJsZSBvciBzbG93IGRvd24gYWxsIElSIFJ4IGNpcmN1aXRzIGFuZCBjb3VudGVycyAqLworCWlycWVuYWJsZV9yeChzZCwgMCk7CisJY29udHJvbF9yeF9lbmFibGUoYywgZmFsc2UpOworCWNvbnRyb2xfcnhfZGVtb2R1bGF0aW9uX2VuYWJsZShjLCBmYWxzZSk7CisJY29udHJvbF9yeF9zX2VkZ2VfZGV0ZWN0aW9uKGMsIENOVFJMX0VER19OT05FKTsKKwlmaWx0ZXJfcnhfc19taW5fd2lkdGgoYywgMCk7CisJY3gyNTg0MF93cml0ZTQoYywgQ1gyNTg0MF9JUl9SWENMS19SRUcsIFJYQ0xLX1JDRCk7CisKKwlpcl9zdGF0ZS0+cnhfcGFyYW1zLnNodXRkb3duID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmaXJfc3RhdGUtPnJ4X3BhcmFtc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDI1ODQwX2lyX3J4X3NfcGFyYW1ldGVycyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzICpwKQoreworCXN0cnVjdCBjeDI1ODQwX2lyX3N0YXRlICppcl9zdGF0ZSA9IHRvX2lyX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyAqbzsKKwl1MTYgcnhjbGtfZGl2aWRlcjsKKworCWlmIChpcl9zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwLT5zaHV0ZG93bikKKwkJcmV0dXJuIGN4MjU4NDBfaXJfcnhfc2h1dGRvd24oc2QpOworCisJaWYgKHAtPm1vZGUgIT0gVjRMMl9TVUJERVZfSVJfTU9ERV9QVUxTRV9XSURUSCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwljID0gaXJfc3RhdGUtPmM7CisJbyA9ICZpcl9zdGF0ZS0+cnhfcGFyYW1zOworCisJbXV0ZXhfbG9jaygmaXJfc3RhdGUtPnJ4X3BhcmFtc19sb2NrKTsKKworCW8tPnNodXRkb3duID0gcC0+c2h1dGRvd247CisKKwlwLT5tb2RlID0gVjRMMl9TVUJERVZfSVJfTU9ERV9QVUxTRV9XSURUSDsKKwlvLT5tb2RlID0gcC0+bW9kZTsKKworCXAtPmJ5dGVzX3Blcl9kYXRhX2VsZW1lbnQgPSBzaXplb2YodW5pb24gY3gyNTg0MF9pcl9maWZvX3JlYyk7CisJby0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHAtPmJ5dGVzX3Blcl9kYXRhX2VsZW1lbnQ7CisKKwkvKiBCZWZvcmUgd2UgdHdlYWsgdGhlIGhhcmR3YXJlLCB3ZSBoYXZlIHRvIGRpc2FibGUgdGhlIHJlY2VpdmVyICovCisJaXJxZW5hYmxlX3J4KHNkLCAwKTsKKwljb250cm9sX3J4X2VuYWJsZShjLCBmYWxzZSk7CisKKwljb250cm9sX3J4X2RlbW9kdWxhdGlvbl9lbmFibGUoYywgcC0+bW9kdWxhdGlvbik7CisJby0+bW9kdWxhdGlvbiA9IHAtPm1vZHVsYXRpb247CisKKwlpZiAocC0+bW9kdWxhdGlvbikgeworCQlwLT5jYXJyaWVyX2ZyZXEgPSByeGNsa19yeF9zX2NhcnJpZXIoYywgcC0+Y2Fycmllcl9mcmVxLAorCQkJCQkJICAgICAmcnhjbGtfZGl2aWRlcik7CisKKwkJby0+Y2Fycmllcl9mcmVxID0gcC0+Y2Fycmllcl9mcmVxOworCisJCXAtPmR1dHlfY3ljbGUgPSA1MDsKKwkJby0+ZHV0eV9jeWNsZSA9IHAtPmR1dHlfY3ljbGU7CisKKwkJY29udHJvbF9yeF9zX2NhcnJpZXJfd2luZG93KGMsIHAtPmNhcnJpZXJfZnJlcSwKKwkJCQkJICAgICZwLT5jYXJyaWVyX3JhbmdlX2xvd2VyLAorCQkJCQkgICAgJnAtPmNhcnJpZXJfcmFuZ2VfdXBwZXIpOworCQlvLT5jYXJyaWVyX3JhbmdlX2xvd2VyID0gcC0+Y2Fycmllcl9yYW5nZV9sb3dlcjsKKwkJby0+Y2Fycmllcl9yYW5nZV91cHBlciA9IHAtPmNhcnJpZXJfcmFuZ2VfdXBwZXI7CisKKwkJcC0+bWF4X3B1bHNlX3dpZHRoID0KKwkJCSh1MzIpIHB1bHNlX3dpZHRoX2NvdW50X3RvX25zKEZJRk9fUlhUWCwgcnhjbGtfZGl2aWRlcik7CisJfSBlbHNlIHsKKwkJcC0+bWF4X3B1bHNlX3dpZHRoID0KKwkJCSAgICByeGNsa19yeF9zX21heF9wdWxzZV93aWR0aChjLCBwLT5tYXhfcHVsc2Vfd2lkdGgsCisJCQkJCQkgICAgICAgJnJ4Y2xrX2RpdmlkZXIpOworCX0KKwlvLT5tYXhfcHVsc2Vfd2lkdGggPSBwLT5tYXhfcHVsc2Vfd2lkdGg7CisJYXRvbWljX3NldCgmaXJfc3RhdGUtPnJ4Y2xrX2RpdmlkZXIsIHJ4Y2xrX2RpdmlkZXIpOworCisJcC0+bm9pc2VfZmlsdGVyX21pbl93aWR0aCA9CisJCQkgICAgZmlsdGVyX3J4X3NfbWluX3dpZHRoKGMsIHAtPm5vaXNlX2ZpbHRlcl9taW5fd2lkdGgpOworCW8tPm5vaXNlX2ZpbHRlcl9taW5fd2lkdGggPSBwLT5ub2lzZV9maWx0ZXJfbWluX3dpZHRoOworCisJcC0+cmVzb2x1dGlvbiA9IGNsb2NrX2RpdmlkZXJfdG9fcmVzb2x1dGlvbihyeGNsa19kaXZpZGVyKTsKKwlvLT5yZXNvbHV0aW9uID0gcC0+cmVzb2x1dGlvbjsKKworCS8qIEZJWE1FIC0gbWFrZSB0aGlzIGRlcGVuZGVudCBvbiByZXNvbHV0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKi8KKwljb250cm9sX3J4X2lycV93YXRlcm1hcmsoYywgUlhfRklGT19IQUxGX0ZVTEwpOworCisJY29udHJvbF9yeF9zX2VkZ2VfZGV0ZWN0aW9uKGMsIENOVFJMX0VER19CT1RIKTsKKworCW8tPmludmVydF9sZXZlbCA9IHAtPmludmVydF9sZXZlbDsKKwlhdG9taWNfc2V0KCZpcl9zdGF0ZS0+cnhfaW52ZXJ0LCBwLT5pbnZlcnRfbGV2ZWwpOworCisJby0+aW50ZXJydXB0X2VuYWJsZSA9IHAtPmludGVycnVwdF9lbmFibGU7CisJby0+ZW5hYmxlID0gcC0+ZW5hYmxlOworCWlmIChwLT5lbmFibGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJfc3RhdGUtPnJ4X2tmaWZvX2xvY2ssIGZsYWdzKTsKKwkJa2ZpZm9fcmVzZXQoJmlyX3N0YXRlLT5yeF9rZmlmbyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyX3N0YXRlLT5yeF9rZmlmb19sb2NrLCBmbGFncyk7CisJCWlmIChwLT5pbnRlcnJ1cHRfZW5hYmxlKQorCQkJaXJxZW5hYmxlX3J4KHNkLCBJUlFFTl9SU0UgfCBJUlFFTl9SVEUgfCBJUlFFTl9ST0UpOworCQljb250cm9sX3J4X2VuYWJsZShjLCBwLT5lbmFibGUpOworCX0KKworCW11dGV4X3VubG9jaygmaXJfc3RhdGUtPnJ4X3BhcmFtc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogVHJhbnNtaXR0ZXIgKi8KK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl90eF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgICAgICAgc3NpemVfdCAqbnVtKQoreworCXN0cnVjdCBjeDI1ODQwX2lyX3N0YXRlICppcl9zdGF0ZSA9IHRvX2lyX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKworCWlmIChpcl9zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWMgPSBpcl9zdGF0ZS0+YzsKKyNpZiAwCisJLyoKKwkgKiBGSVhNRSAtIHRoZSBjb2RlIGJlbG93IGlzIGFuIGluY29tcGxldGUgYW5kIHVudGVzdGVkIHNrZXRjaCBvZiB3aGF0CisJICogbWF5IG5lZWQgdG8gYmUgZG9uZS4gIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRvIGdldCA0IChvciA4KSBwdWxzZXMKKwkgKiBmcm9tIHRoZSB0eF9rZmlmbywgb3IgY29udmVydGVkIGZyb20gbnMgdG8gdGhlIHByb3BlciB1bml0cyBmcm9tIHRoZQorCSAqIGlucHV0LCBhbmQgcHVzaCB0aGVtIG9mZiB0byB0aGUgaGFyZHdhcmUgVHggRklGTyByaWdodCBhd2F5LCBpZiB0aGUKKwkgKiBIVyBUWCBmaWZvIG5lZWRzIHNlcnZpY2UuICBUaGUgcmVzdCBjYW4gYmUgcHVzaGVkIHRvIHRoZSB0eF9rZmlmbyBpbgorCSAqIGEgbGVzcyBjcml0aWNhbCB0aW1lZnJhbWUuICBBbHNvIHdhdGNoIG91dCBmb3Igb3ZlcnJ1bmluZyB0aGUKKwkgKiB0eF9rZmlmbyAtIGRvbid0IGxldCBpdCBoYXBwZW4gYW5kIGxldCB0aGUgY2FsbGVyIGtub3cgbm90IGFsbCBoaXMKKwkgKiBwdWxzZXMgd2VyZSB3cml0dGVuLgorCSAqLworCXUzMiAqbnNfcHVsc2UgPSAodTMyICopIGJ1ZjsKKwl1bnNpZ25lZCBpbnQgbjsKKwl1MzIgZmlmb19wdWxzZVtGSUZPX1RYX0RFUFRIXTsKKwl1MzIgbWFyazsKKworCS8qIENvbXB1dGUgaG93IG11Y2ggd2UgY2FuIGZpdCBpbiB0aGUgdHgga2ZpZm8gKi8KKwluID0gQ1gyNTg0MF9JUl9UWF9LRklGT19TSVpFIC0ga2ZpZm9fbGVuKGlyX3N0YXRlLT50eF9rZmlmbyk7CisJbiA9IG1pbihuLCAodW5zaWduZWQgaW50KSBjb3VudCk7CisJbiAvPSBzaXplb2YodTMyKTsKKworCS8qIEZJWE1FIC0gdHVybiBvbiBUeCBGaWZvIHNlcnZpY2UgaW50ZXJydXB0CisJICogY2hlY2sgaGFyZHdhcmUgZmlmbyBsZXZlbCwgYW5kIG90aGVyIHN0dWZmCisJICovCisJZm9yIChpID0gMDsgaSA8IG47ICkgeworCQlmb3IgKGogPSAwOyBqIDwgRklGT19UWF9ERVBUSCAvIDIgJiYgaSA8IG47IGorKykgeworCQkJbWFyayA9IG5zX3B1bHNlW2ldICYgTEVWRUxfTUFTSzsKKwkJCWZpZm9fcHVsc2Vbal0gPSBuc190b19wdWxzZV93aWR0aF9jb3VudCgKKwkJCQkJIG5zX3B1bHNlW2ldICYKKwkJCQkJICAgICAgIH5MRVZFTF9NQVNLLAorCQkJCQkgaXJfc3RhdGUtPnR4Y2xrX2RpdmlkZXIpOworCQkJaWYgKG1hcmspCisJCQkJZmlmb19wdWxzZVtqXSAmPSBGSUZPX1JYVFhfTFZMOworCQkJaSsrOworCQl9CisJCWtmaWZvX3B1dChpcl9zdGF0ZS0+dHhfa2ZpZm8sICh1OCAqKSBmaWZvX3B1bHNlLAorCQkJCQkJCSAgICAgICBqICogc2l6ZW9mKHUzMikpOworCX0KKwkqbnVtID0gbiAqIHNpemVvZih1MzIpOworI2Vsc2UKKwkvKiBGb3Igbm93IGVuYWJsZSB0aGUgVHggRklGTyBTZXJ2aWNlIGludGVycnVwdCAmIHByZXRlbmQgd2UgZGlkIHdvcmsgKi8KKwlpcnFlbmFibGVfdHgoc2QsIElSUUVOX1RTRSk7CisJKm51bSA9IGNvdW50OworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl90eF9nX3BhcmFtZXRlcnMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGUgPSB0b19pcl9zdGF0ZShzZCk7CisKKwlpZiAoaXJfc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZpcl9zdGF0ZS0+dHhfcGFyYW1zX2xvY2spOworCW1lbWNweShwLCAmaXJfc3RhdGUtPnR4X3BhcmFtcywKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMpKTsKKwltdXRleF91bmxvY2soJmlyX3N0YXRlLT50eF9wYXJhbXNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl90eF9zaHV0ZG93bihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDI1ODQwX2lyX3N0YXRlICppcl9zdGF0ZSA9IHRvX2lyX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKworCWlmIChpcl9zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWMgPSBpcl9zdGF0ZS0+YzsKKwltdXRleF9sb2NrKCZpcl9zdGF0ZS0+dHhfcGFyYW1zX2xvY2spOworCisJLyogRGlzYWJsZSBvciBzbG93IGRvd24gYWxsIElSIFR4IGNpcmN1aXRzIGFuZCBjb3VudGVycyAqLworCWlycWVuYWJsZV90eChzZCwgMCk7CisJY29udHJvbF90eF9lbmFibGUoYywgZmFsc2UpOworCWNvbnRyb2xfdHhfbW9kdWxhdGlvbl9lbmFibGUoYywgZmFsc2UpOworCWN4MjU4NDBfd3JpdGU0KGMsIENYMjU4NDBfSVJfVFhDTEtfUkVHLCBUWENMS19UQ0QpOworCisJaXJfc3RhdGUtPnR4X3BhcmFtcy5zaHV0ZG93biA9IHRydWU7CisKKwltdXRleF91bmxvY2soJmlyX3N0YXRlLT50eF9wYXJhbXNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gyNTg0MF9pcl90eF9zX3BhcmFtZXRlcnMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyAqcCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGUgPSB0b19pcl9zdGF0ZShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmM7CisJc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMgKm87CisJdTE2IHR4Y2xrX2RpdmlkZXI7CisKKwlpZiAoaXJfc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocC0+c2h1dGRvd24pCisJCXJldHVybiBjeDI1ODQwX2lyX3R4X3NodXRkb3duKHNkKTsKKworCWlmIChwLT5tb2RlICE9IFY0TDJfU1VCREVWX0lSX01PREVfUFVMU0VfV0lEVEgpCisJCXJldHVybiAtRU5PU1lTOworCisJYyA9IGlyX3N0YXRlLT5jOworCW8gPSAmaXJfc3RhdGUtPnR4X3BhcmFtczsKKwltdXRleF9sb2NrKCZpcl9zdGF0ZS0+dHhfcGFyYW1zX2xvY2spOworCisJby0+c2h1dGRvd24gPSBwLT5zaHV0ZG93bjsKKworCXAtPm1vZGUgPSBWNEwyX1NVQkRFVl9JUl9NT0RFX1BVTFNFX1dJRFRIOworCW8tPm1vZGUgPSBwLT5tb2RlOworCisJcC0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKTsKKwlvLT5ieXRlc19wZXJfZGF0YV9lbGVtZW50ID0gcC0+Ynl0ZXNfcGVyX2RhdGFfZWxlbWVudDsKKworCS8qIEJlZm9yZSB3ZSB0d2VhayB0aGUgaGFyZHdhcmUsIHdlIGhhdmUgdG8gZGlzYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KKwlpcnFlbmFibGVfdHgoc2QsIDApOworCWNvbnRyb2xfdHhfZW5hYmxlKGMsIGZhbHNlKTsKKworCWNvbnRyb2xfdHhfbW9kdWxhdGlvbl9lbmFibGUoYywgcC0+bW9kdWxhdGlvbik7CisJby0+bW9kdWxhdGlvbiA9IHAtPm1vZHVsYXRpb247CisKKwlpZiAocC0+bW9kdWxhdGlvbikgeworCQlwLT5jYXJyaWVyX2ZyZXEgPSB0eGNsa190eF9zX2NhcnJpZXIoYywgcC0+Y2Fycmllcl9mcmVxLAorCQkJCQkJICAgICAmdHhjbGtfZGl2aWRlcik7CisJCW8tPmNhcnJpZXJfZnJlcSA9IHAtPmNhcnJpZXJfZnJlcTsKKworCQlwLT5kdXR5X2N5Y2xlID0gY2R1dHlfdHhfc19kdXR5X2N5Y2xlKGMsIHAtPmR1dHlfY3ljbGUpOworCQlvLT5kdXR5X2N5Y2xlID0gcC0+ZHV0eV9jeWNsZTsKKworCQlwLT5tYXhfcHVsc2Vfd2lkdGggPQorCQkJKHUzMikgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoRklGT19SWFRYLCB0eGNsa19kaXZpZGVyKTsKKwl9IGVsc2UgeworCQlwLT5tYXhfcHVsc2Vfd2lkdGggPQorCQkJICAgIHR4Y2xrX3R4X3NfbWF4X3B1bHNlX3dpZHRoKGMsIHAtPm1heF9wdWxzZV93aWR0aCwKKwkJCQkJCSAgICAgICAmdHhjbGtfZGl2aWRlcik7CisJfQorCW8tPm1heF9wdWxzZV93aWR0aCA9IHAtPm1heF9wdWxzZV93aWR0aDsKKwlhdG9taWNfc2V0KCZpcl9zdGF0ZS0+dHhjbGtfZGl2aWRlciwgdHhjbGtfZGl2aWRlcik7CisKKwlwLT5yZXNvbHV0aW9uID0gY2xvY2tfZGl2aWRlcl90b19yZXNvbHV0aW9uKHR4Y2xrX2RpdmlkZXIpOworCW8tPnJlc29sdXRpb24gPSBwLT5yZXNvbHV0aW9uOworCisJLyogRklYTUUgLSBtYWtlIHRoaXMgZGVwZW5kZW50IG9uIHJlc29sdXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZSAqLworCWNvbnRyb2xfdHhfaXJxX3dhdGVybWFyayhjLCBUWF9GSUZPX0hBTEZfRU1QVFkpOworCisJY29udHJvbF90eF9wb2xhcml0eV9pbnZlcnQoYywgcC0+aW52ZXJ0X2NhcnJpZXJfc2Vuc2UpOworCW8tPmludmVydF9jYXJyaWVyX3NlbnNlID0gcC0+aW52ZXJ0X2NhcnJpZXJfc2Vuc2U7CisKKwkvKgorCSAqIEZJWE1FOiB3ZSBkb24ndCBoYXZlIGhhcmR3YXJlIGhlbHAgZm9yIElPIHBpbiBsZXZlbCBpbnZlcnNpb24KKwkgKiBoZXJlIGxpa2Ugd2UgaGF2ZSBvbiB0aGUgQ1gyMzg4OC4KKwkgKiBBY3Qgb24gdGhpcyB3aXRoIHNvbWUgbWl4IG9mIGxvZ2ljYWwgaW52ZXJzaW9uIG9mIGRhdGEgbGV2ZWxzLAorCSAqIGNhcnJpZXIgcG9sYXJpdHksIGFuZCBjYXJyaWVyIGR1dHkgY3ljbGUuCisJICovCisJby0+aW52ZXJ0X2xldmVsID0gcC0+aW52ZXJ0X2xldmVsOworCisJby0+aW50ZXJydXB0X2VuYWJsZSA9IHAtPmludGVycnVwdF9lbmFibGU7CisJby0+ZW5hYmxlID0gcC0+ZW5hYmxlOworCWlmIChwLT5lbmFibGUpIHsKKwkJLyogcmVzZXQgdHhfZmlmbyBoZXJlICovCisJCWlmIChwLT5pbnRlcnJ1cHRfZW5hYmxlKQorCQkJaXJxZW5hYmxlX3R4KHNkLCBJUlFFTl9UU0UpOworCQljb250cm9sX3R4X2VuYWJsZShjLCBwLT5lbmFibGUpOworCX0KKworCW11dGV4X3VubG9jaygmaXJfc3RhdGUtPnR4X3BhcmFtc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogVjRMMiBTdWJkZXZpY2UgQ29yZSBPcHMgc3VwcG9ydAorICovCitpbnQgY3gyNTg0MF9pcl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gc3RhdGUtPmM7CisJY2hhciAqczsKKwlpbnQgaSwgajsKKwl1MzIgY250cmwsIHR4Y2xrLCByeGNsaywgY2R1dHksIHN0YXRzLCBpcnFlbiwgZmlsdHI7CisKKwkvKiBUaGUgQ1gyMzg4OCBjaGlwIGRvZXNuJ3QgaGF2ZSBhbiBJUiBjb250cm9sbGVyIG9uIHRoZSBBL1YgY29yZSAqLworCWlmIChpc19jeDIzODg4KHN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwljbnRybCA9IGN4MjU4NDBfcmVhZDQoYywgQ1gyNTg0MF9JUl9DTlRSTF9SRUcpOworCXR4Y2xrID0gY3gyNTg0MF9yZWFkNChjLCBDWDI1ODQwX0lSX1RYQ0xLX1JFRykgJiBUWENMS19UQ0Q7CisJcnhjbGsgPSBjeDI1ODQwX3JlYWQ0KGMsIENYMjU4NDBfSVJfUlhDTEtfUkVHKSAmIFJYQ0xLX1JDRDsKKwljZHV0eSA9IGN4MjU4NDBfcmVhZDQoYywgQ1gyNTg0MF9JUl9DRFVUWV9SRUcpICYgQ0RVVFlfQ0RDOworCXN0YXRzID0gY3gyNTg0MF9yZWFkNChjLCBDWDI1ODQwX0lSX1NUQVRTX1JFRyk7CisJaXJxZW4gPSBjeDI1ODQwX3JlYWQ0KGMsIENYMjU4NDBfSVJfSVJRRU5fUkVHKTsKKwlpZiAoaXNfY3gyMzg4NShzdGF0ZSkgfHwgaXNfY3gyMzg4NyhzdGF0ZSkpCisJCWlycWVuIF49IElSUUVOX01TSzsKKwlmaWx0ciA9IGN4MjU4NDBfcmVhZDQoYywgQ1gyNTg0MF9JUl9GSUxUUl9SRUcpICYgRklMVFJfTFBGOworCisJdjRsMl9pbmZvKHNkLCAiSVIgUmVjZWl2ZXI6XG4iKTsKKwl2NGwyX2luZm8oc2QsICJcdEVuYWJsZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgY250cmwgJiBDTlRSTF9SWEUgPyAieWVzIiA6ICJubyIpOworCXY0bDJfaW5mbyhzZCwgIlx0RGVtb2R1bGF0aW9uIGZyb20gYSBjYXJyaWVyOiAgICAgICAlc1xuIiwKKwkJICBjbnRybCAmIENOVFJMX0RNRCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCXY0bDJfaW5mbyhzZCwgIlx0RklGTzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlc1xuIiwKKwkJICBjbnRybCAmIENOVFJMX1JGRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCXN3aXRjaCAoY250cmwgJiBDTlRSTF9FREcpIHsKKwljYXNlIENOVFJMX0VER19OT05FOgorCQlzID0gImRpc2FibGVkIjsKKwkJYnJlYWs7CisJY2FzZSBDTlRSTF9FREdfRkFMTDoKKwkJcyA9ICJmYWxsaW5nIGVkZ2UiOworCQlicmVhazsKKwljYXNlIENOVFJMX0VER19SSVNFOgorCQlzID0gInJpc2luZyBlZGdlIjsKKwkJYnJlYWs7CisJY2FzZSBDTlRSTF9FREdfQk9USDoKKwkJcyA9ICJyaXNpbmcgJiBmYWxsaW5nIGVkZ2VzIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICI/Pz8gZWRnZSI7CisJCWJyZWFrOworCX0KKwl2NGwyX2luZm8oc2QsICJcdFB1bHNlIHRpbWVycycgc3RhcnQvc3RvcCB0cmlnZ2VyOiAgJXNcbiIsIHMpOworCXY0bDJfaW5mbyhzZCwgIlx0RklGTyBkYXRhIG9uIHB1bHNlIHRpbWVyIG92ZXJmbG93OiAlc1xuIiwKKwkJICBjbnRybCAmIENOVFJMX1IgPyAibm90IGxvYWRlZCIgOiAib3ZlcmZsb3cgbWFya2VyIik7CisJdjRsMl9pbmZvKHNkLCAiXHRGSUZPIGludGVycnVwdCB3YXRlcm1hcms6ICAgICAgICAgICVzXG4iLAorCQkgIGNudHJsICYgQ05UUkxfUklDID8gIm5vdCBlbXB0eSIgOiAiaGFsZiBmdWxsIG9yIGdyZWF0ZXIiKTsKKwl2NGwyX2luZm8oc2QsICJcdExvb3BiYWNrIG1vZGU6ICAgICAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgY250cmwgJiBDTlRSTF9MQk0gPyAibG9vcGJhY2sgYWN0aXZlIiA6ICJub3JtYWwgcmVjZWl2ZSIpOworCWlmIChjbnRybCAmIENOVFJMX0RNRCkgeworCQl2NGwyX2luZm8oc2QsICJcdEV4cGVjdGVkIGNhcnJpZXIgKDE2IGNsb2Nrcyk6ICAgICAgJXUgSHpcbiIsCisJCQkgIGNsb2NrX2RpdmlkZXJfdG9fY2Fycmllcl9mcmVxKHJ4Y2xrKSk7CisJCXN3aXRjaCAoY250cmwgJiBDTlRSTF9XSU4pIHsKKwkJY2FzZSBDTlRSTF9XSU5fM18zOgorCQkJaSA9IDM7CisJCQlqID0gMzsKKwkJCWJyZWFrOworCQljYXNlIENOVFJMX1dJTl80XzM6CisJCQlpID0gNDsKKwkJCWogPSAzOworCQkJYnJlYWs7CisJCWNhc2UgQ05UUkxfV0lOXzNfNDoKKwkJCWkgPSAzOworCQkJaiA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSBDTlRSTF9XSU5fNF80OgorCQkJaSA9IDQ7CisJCQlqID0gNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaSA9IDA7CisJCQlqID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXY0bDJfaW5mbyhzZCwgIlx0TmV4dCBjYXJyaWVyIGVkZ2Ugd2luZG93OiAgICAgICAgICAxNiBjbG9ja3MgIgorCQkJICAiLSUxZC8rJTFkLCAldSB0byAldSBIelxuIiwgaSwgaiwKKwkJCSAgY2xvY2tfZGl2aWRlcl90b19mcmVxKHJ4Y2xrLCAxNiArIGopLAorCQkJICBjbG9ja19kaXZpZGVyX3RvX2ZyZXEocnhjbGssIDE2IC0gaSkpOworCX0KKwl2NGwyX2luZm8oc2QsICJcdE1heCBtZWFzdXJhYmxlIHB1bHNlIHdpZHRoOiAgICAgICAgJXUgdXMsICVsbHUgbnNcbiIsCisJCSAgcHVsc2Vfd2lkdGhfY291bnRfdG9fdXMoRklGT19SWFRYLCByeGNsayksCisJCSAgcHVsc2Vfd2lkdGhfY291bnRfdG9fbnMoRklGT19SWFRYLCByeGNsaykpOworCXY0bDJfaW5mbyhzZCwgIlx0TG93IHBhc3MgZmlsdGVyOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKKwkJICBmaWx0ciA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCWlmIChmaWx0cikKKwkJdjRsMl9pbmZvKHNkLCAiXHRNaW4gYWNjZXB0YWJsZSBwdWxzZSB3aWR0aCAoTFBGKTogICV1IHVzLCAiCisJCQkgICIldSBuc1xuIiwKKwkJCSAgbHBmX2NvdW50X3RvX3VzKGZpbHRyKSwKKwkJCSAgbHBmX2NvdW50X3RvX25zKGZpbHRyKSk7CisJdjRsMl9pbmZvKHNkLCAiXHRQdWxzZSB3aWR0aCB0aW1lciB0aW1lZC1vdXQ6ICAgICAgICVzXG4iLAorCQkgIHN0YXRzICYgU1RBVFNfUlRPID8gInllcyIgOiAibm8iKTsKKwl2NGwyX2luZm8oc2QsICJcdFB1bHNlIHdpZHRoIHRpbWVyIHRpbWUtb3V0IGludHI6ICAgJXNcbiIsCisJCSAgaXJxZW4gJiBJUlFFTl9SVEUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwl2NGwyX2luZm8oc2QsICJcdEZJRk8gb3ZlcnJ1bjogICAgICAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgc3RhdHMgJiBTVEFUU19ST1IgPyAieWVzIiA6ICJubyIpOworCXY0bDJfaW5mbyhzZCwgIlx0RklGTyBvdmVycnVuIGludGVycnVwdDogICAgICAgICAgICAlc1xuIiwKKwkJICBpcnFlbiAmIElSUUVOX1JPRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCXY0bDJfaW5mbyhzZCwgIlx0QnVzeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlc1xuIiwKKwkJICBzdGF0cyAmIFNUQVRTX1JCWSA/ICJ5ZXMiIDogIm5vIik7CisJdjRsMl9pbmZvKHNkLCAiXHRGSUZPIHNlcnZpY2UgcmVxdWVzdGVkOiAgICAgICAgICAgICVzXG4iLAorCQkgIHN0YXRzICYgU1RBVFNfUlNSID8gInllcyIgOiAibm8iKTsKKwl2NGwyX2luZm8oc2QsICJcdEZJRk8gc2VydmljZSByZXF1ZXN0IGludGVycnVwdDogICAgJXNcbiIsCisJCSAgaXJxZW4gJiBJUlFFTl9SU0UgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCXY0bDJfaW5mbyhzZCwgIklSIFRyYW5zbWl0dGVyOlxuIik7CisJdjRsMl9pbmZvKHNkLCAiXHRFbmFibGVkOiAgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG4iLAorCQkgIGNudHJsICYgQ05UUkxfVFhFID8gInllcyIgOiAibm8iKTsKKwl2NGwyX2luZm8oc2QsICJcdE1vZHVsYXRpb24gb250byBhIGNhcnJpZXI6ICAgICAgICAgJXNcbiIsCisJCSAgY250cmwgJiBDTlRSTF9NT0QgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwl2NGwyX2luZm8oc2QsICJcdEZJRk86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgY250cmwgJiBDTlRSTF9URkUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKwl2NGwyX2luZm8oc2QsICJcdEZJRk8gaW50ZXJydXB0IHdhdGVybWFyazogICAgICAgICAgJXNcbiIsCisJCSAgY250cmwgJiBDTlRSTF9USUMgPyAibm90IGVtcHR5IiA6ICJoYWxmIGZ1bGwgb3IgbGVzcyIpOworCXY0bDJfaW5mbyhzZCwgIlx0Q2FycmllciBwb2xhcml0eTogICAgICAgICAgICAgICAgICAlc1xuIiwKKwkJICBjbnRybCAmIENOVFJMX0NQTCA/ICJzcGFjZTpidXJzdCBtYXJrOm5vYnVyc3QiCisJCQkJICAgIDogInNwYWNlOm5vYnVyc3QgbWFyazpidXJzdCIpOworCWlmIChjbnRybCAmIENOVFJMX01PRCkgeworCQl2NGwyX2luZm8oc2QsICJcdENhcnJpZXIgKDE2IGNsb2Nrcyk6ICAgICAgICAgICAgICAgJXUgSHpcbiIsCisJCQkgIGNsb2NrX2RpdmlkZXJfdG9fY2Fycmllcl9mcmVxKHR4Y2xrKSk7CisJCXY0bDJfaW5mbyhzZCwgIlx0Q2FycmllciBkdXR5IGN5Y2xlOiAgICAgICAgICAgICAgICAlMnUvMTZcbiIsCisJCQkgIGNkdXR5ICsgMSk7CisJfQorCXY0bDJfaW5mbyhzZCwgIlx0TWF4IHB1bHNlIHdpZHRoOiAgICAgICAgICAgICAgICAgICAldSB1cywgJWxsdSBuc1xuIiwKKwkJICBwdWxzZV93aWR0aF9jb3VudF90b191cyhGSUZPX1JYVFgsIHR4Y2xrKSwKKwkJICBwdWxzZV93aWR0aF9jb3VudF90b19ucyhGSUZPX1JYVFgsIHR4Y2xrKSk7CisJdjRsMl9pbmZvKHNkLCAiXHRCdXN5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG4iLAorCQkgIHN0YXRzICYgU1RBVFNfVEJZID8gInllcyIgOiAibm8iKTsKKwl2NGwyX2luZm8oc2QsICJcdEZJRk8gc2VydmljZSByZXF1ZXN0ZWQ6ICAgICAgICAgICAgJXNcbiIsCisJCSAgc3RhdHMgJiBTVEFUU19UU1IgPyAieWVzIiA6ICJubyIpOworCXY0bDJfaW5mbyhzZCwgIlx0RklGTyBzZXJ2aWNlIHJlcXVlc3QgaW50ZXJydXB0OiAgICAlc1xuIiwKKwkJICBpcnFlbiAmIElSUUVOX1RTRSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKKworY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2lyX29wcyBjeDI1ODQwX2lyX29wcyA9IHsKKwkucnhfcmVhZCA9IGN4MjU4NDBfaXJfcnhfcmVhZCwKKwkucnhfZ19wYXJhbWV0ZXJzID0gY3gyNTg0MF9pcl9yeF9nX3BhcmFtZXRlcnMsCisJLnJ4X3NfcGFyYW1ldGVycyA9IGN4MjU4NDBfaXJfcnhfc19wYXJhbWV0ZXJzLAorCisJLnR4X3dyaXRlID0gY3gyNTg0MF9pcl90eF93cml0ZSwKKwkudHhfZ19wYXJhbWV0ZXJzID0gY3gyNTg0MF9pcl90eF9nX3BhcmFtZXRlcnMsCisJLnR4X3NfcGFyYW1ldGVycyA9IGN4MjU4NDBfaXJfdHhfc19wYXJhbWV0ZXJzLAorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMgZGVmYXVsdF9yeF9wYXJhbXMgPSB7CisJLmJ5dGVzX3Blcl9kYXRhX2VsZW1lbnQgPSBzaXplb2YodW5pb24gY3gyNTg0MF9pcl9maWZvX3JlYyksCisJLm1vZGUgPSBWNEwyX1NVQkRFVl9JUl9NT0RFX1BVTFNFX1dJRFRILAorCisJLmVuYWJsZSA9IGZhbHNlLAorCS5pbnRlcnJ1cHRfZW5hYmxlID0gZmFsc2UsCisJLnNodXRkb3duID0gdHJ1ZSwKKworCS5tb2R1bGF0aW9uID0gdHJ1ZSwKKwkuY2Fycmllcl9mcmVxID0gMzYwMDAsIC8qIDM2IGtIeiAtIFJDLTUsIGFuZCBSQy02IGNhcnJpZXIgKi8KKworCS8qIFJDLTU6IDY2Niw2NjcgbnMgPSAxLzM2IGtIeiAqIDMyIGN5Y2xlcyAqIDEgbWFyayAqIDAuNzUgKi8KKwkvKiBSQy02OiAzMzMsMzMzIG5zID0gMS8zNiBrSHogKiAxNiBjeWNsZXMgKiAxIG1hcmsgKiAwLjc1ICovCisJLm5vaXNlX2ZpbHRlcl9taW5fd2lkdGggPSAzMzMzMzMsIC8qIG5zICovCisJLmNhcnJpZXJfcmFuZ2VfbG93ZXIgPSAzNTAwMCwKKwkuY2Fycmllcl9yYW5nZV91cHBlciA9IDM3MDAwLAorCS5pbnZlcnRfbGV2ZWwgPSBmYWxzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaXJfcGFyYW1ldGVycyBkZWZhdWx0X3R4X3BhcmFtcyA9IHsKKwkuYnl0ZXNfcGVyX2RhdGFfZWxlbWVudCA9IHNpemVvZih1bmlvbiBjeDI1ODQwX2lyX2ZpZm9fcmVjKSwKKwkubW9kZSA9IFY0TDJfU1VCREVWX0lSX01PREVfUFVMU0VfV0lEVEgsCisKKwkuZW5hYmxlID0gZmFsc2UsCisJLmludGVycnVwdF9lbmFibGUgPSBmYWxzZSwKKwkuc2h1dGRvd24gPSB0cnVlLAorCisJLm1vZHVsYXRpb24gPSB0cnVlLAorCS5jYXJyaWVyX2ZyZXEgPSAzNjAwMCwgLyogMzYga0h6IC0gUkMtNSBjYXJyaWVyICovCisJLmR1dHlfY3ljbGUgPSAyNSwgICAgICAvKiAyNSAlICAgLSBSQy01IGNhcnJpZXIgKi8KKwkuaW52ZXJ0X2xldmVsID0gZmFsc2UsCisJLmludmVydF9jYXJyaWVyX3NlbnNlID0gZmFsc2UsCit9OworCitpbnQgY3gyNTg0MF9pcl9wcm9iZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gyNTg0MF9pcl9zdGF0ZSAqaXJfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2X2lyX3BhcmFtZXRlcnMgZGVmYXVsdF9wYXJhbXM7CisKKwkvKiBPbmx5IGluaXQgdGhlIElSIGNvbnRyb2xsZXIgZm9yIHRoZSBDWDIzODhbNTddIEFWIENvcmUgZm9yIG5vdyAqLworCWlmICghKGlzX2N4MjM4ODUoc3RhdGUpIHx8IGlzX2N4MjM4ODcoc3RhdGUpKSkKKwkJcmV0dXJuIDA7CisKKwlpcl9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI1ODQwX2lyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlyX3N0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmlyX3N0YXRlLT5yeF9rZmlmb19sb2NrKTsKKwlpZiAoa2ZpZm9fYWxsb2MoJmlyX3N0YXRlLT5yeF9rZmlmbywKKwkJCUNYMjU4NDBfSVJfUlhfS0ZJRk9fU0laRSwgR0ZQX0tFUk5FTCkpIHsKKwkJa2ZyZWUoaXJfc3RhdGUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpcl9zdGF0ZS0+YyA9IHN0YXRlLT5jOworCXN0YXRlLT5pcl9zdGF0ZSA9IGlyX3N0YXRlOworCisJLyogRW5zdXJlIG5vIGludGVycnVwdHMgYXJyaXZlIHlldCAqLworCWlmIChpc19jeDIzODg1KHN0YXRlKSB8fCBpc19jeDIzODg3KHN0YXRlKSkKKwkJY3gyNTg0MF93cml0ZTQoaXJfc3RhdGUtPmMsIENYMjU4NDBfSVJfSVJRRU5fUkVHLCBJUlFFTl9NU0spOworCWVsc2UKKwkJY3gyNTg0MF93cml0ZTQoaXJfc3RhdGUtPmMsIENYMjU4NDBfSVJfSVJRRU5fUkVHLCAwKTsKKworCW11dGV4X2luaXQoJmlyX3N0YXRlLT5yeF9wYXJhbXNfbG9jayk7CisJbWVtY3B5KCZkZWZhdWx0X3BhcmFtcywgJmRlZmF1bHRfcnhfcGFyYW1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzKSk7CisJdjRsMl9zdWJkZXZfY2FsbChzZCwgaXIsIHJ4X3NfcGFyYW1ldGVycywgJmRlZmF1bHRfcGFyYW1zKTsKKworCW11dGV4X2luaXQoJmlyX3N0YXRlLT50eF9wYXJhbXNfbG9jayk7CisJbWVtY3B5KCZkZWZhdWx0X3BhcmFtcywgJmRlZmF1bHRfdHhfcGFyYW1zLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzKSk7CisJdjRsMl9zdWJkZXZfY2FsbChzZCwgaXIsIHR4X3NfcGFyYW1ldGVycywgJmRlZmF1bHRfcGFyYW1zKTsKKworCXJldHVybiAwOworfQorCitpbnQgY3gyNTg0MF9pcl9yZW1vdmUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IGN4MjU4NDBfaXJfc3RhdGUgKmlyX3N0YXRlID0gdG9faXJfc3RhdGUoc2QpOworCisJaWYgKGlyX3N0YXRlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJY3gyNTg0MF9pcl9yeF9zaHV0ZG93bihzZCk7CisJY3gyNTg0MF9pcl90eF9zaHV0ZG93bihzZCk7CisKKwlrZmlmb19mcmVlKCZpcl9zdGF0ZS0+cnhfa2ZpZm8pOworCWtmcmVlKGlyX3N0YXRlKTsKKwlzdGF0ZS0+aXJfc3RhdGUgPSBOVUxMOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGQ5NTFiMGYuLmI5ODQ2MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTU1LDcgKzU1LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EgVVNCIENhbWVyYSBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTl9OVU1CRVIJS0VSTkVMX1ZFUlNJT04oMiwgOSwgMCkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fTlVNQkVSCUtFUk5FTF9WRVJTSU9OKDIsIDEwLCAwKQogCiAjaWZkZWYgR1NQQ0FfREVCVUcKIGludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKQEAgLTQ0MCwxMCArNDQwLDE1IEBACiAJCWZyYW1lLT52NGwyX2J1Zi5zZXF1ZW5jZSA9ICsrZ3NwY2FfZGV2LT5zZXF1ZW5jZTsKIAkJZ3NwY2FfZGV2LT5pbWFnZSA9IGZyYW1lLT5kYXRhOwogCQlnc3BjYV9kZXYtPmltYWdlX2xlbiA9IDA7Ci0JfSBlbHNlIGlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gRElTQ0FSRF9QQUNLRVQpIHsKLQkJaWYgKHBhY2tldF90eXBlID09IExBU1RfUEFDS0VUKQotCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gcGFja2V0X3R5cGU7Ci0JCXJldHVybjsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSkgeworCQljYXNlIERJU0NBUkRfUEFDS0VUOgorCQkJaWYgKHBhY2tldF90eXBlID09IExBU1RfUEFDS0VUKQorCQkJCWdzcGNhX2Rldi0+bGFzdF9wYWNrZXRfdHlwZSA9IHBhY2tldF90eXBlOworCQkJcmV0dXJuOworCQljYXNlIExBU1RfUEFDS0VUOgorCQkJcmV0dXJuOworCQl9CiAJfQogCiAJLyogYXBwZW5kIHRoZSBwYWNrZXQgdG8gdGhlIGZyYW1lIGJ1ZmZlciAqLwpAQCAtNDU0LDYgKzQ1OSwxMiBAQAogCQkJCWdzcGNhX2Rldi0+ZnJzeik7CiAJCQlwYWNrZXRfdHlwZSA9IERJU0NBUkRfUEFDS0VUOwogCQl9IGVsc2UgeworLyogISEgaW1hZ2UgaXMgTlVMTCBvbmx5IHdoZW4gbGFzdCBwa3QgaXMgTEFTVCBvciBESVNDQVJECisJCQlpZiAoZ3NwY2FfZGV2LT5pbWFnZSA9PSBOVUxMKSB7CisJCQkJZXJyKCJnc3BjYV9mcmFtZV9hZGQoKSBpbWFnZSA9PSBOVUxMIik7CisJCQkJcmV0dXJuOworCQkJfQorICovCiAJCQltZW1jcHkoZ3NwY2FfZGV2LT5pbWFnZSArIGdzcGNhX2Rldi0+aW1hZ2VfbGVuLAogCQkJCWRhdGEsIGxlbik7CiAJCQlnc3BjYV9kZXYtPmltYWdlX2xlbiArPSBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCBlZTE3YjAzLi4zNzA1NDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTY2LDcgKzY2LDExIEBACiAjZGVmaW5lIEJSSURHRV9TTjlDMTEwIDIKICNkZWZpbmUgQlJJREdFX1NOOUMxMjAgMwogCXU4IHNlbnNvcjsJCQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCi1lbnVtIHsKKwl1OCBpMmNfYWRkcjsKKworCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKK307CitlbnVtIHNlbnNvcnMgewogCVNFTlNPUl9BRENNMTcwMCwKIAlTRU5TT1JfR0MwMzA3LAogCVNFTlNPUl9IVjcxMzFSLApAQCAtODEsMTAgKzg1LDYgQEAKIAlTRU5TT1JfUE8yMDMwTiwKIAlTRU5TT1JfU09JNzY4LAogCVNFTlNPUl9TUDgwNzA4LAotfSBzZW5zb3JzOwotCXU4IGkyY19hZGRyOwotCi0JdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3E5MzB4LmMKaW5kZXggMzdjZWU1ZS4uN2FlNjUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkzMHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTMweC5jCkBAIC0yMyw3ICsyMyw2IEBACiAjZGVmaW5lIE1PRFVMRV9OQU1FICJzcTkzMHgiCiAKICNpbmNsdWRlICJnc3BjYS5oIgotI2luY2x1ZGUgImpwZWcuaCIKIAogTU9EVUxFX0FVVEhPUigiSmVhbi1GcmFuY29pcyBNb2luZSA8aHR0cDovL21vaW5lamYuZnJlZS5mcj5cbiIKIAkJIkdlcmFyZCBLbGF2ZXIgPGdlcmFyZCBhdCBna2FsbCBkb3QgaG9iYnkgZG90IG5sXG4iCkBAIC0zMSw4ICszMCw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkdTUENBL1NROTMweCBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIEJVTEtfVFJBTlNGRVJfTEVOIDUxMjgKLQogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KQEAgLTQwLDI4ICszNywyMCBAQAogCXUxNiBleHBvOwogCXU4IGdhaW47CiAKLQl1OCBxdWFsaXR5OwkJLyogd2ViY2FtIHF1YWxpdHkgMC4uMyAqLwotI2RlZmluZSBRVUFMSVRZX0RFRiAxCi0KLQl1OCBncGlvWzJdOwotCi0JdTggZW9mX2xlbjsKIAl1OCBkb19jdHJsOwotCisJdTggZ3Bpb1syXTsKIAl1OCBzZW5zb3I7Ci1lbnVtIHsKLQlTRU5TT1JfSUNYMDk4QlEsCi0JU0VOU09SX0xaMjRCUCwKLQlTRU5TT1JfTUkwMzYwLAotCVNFTlNPUl9NVDlWMTExLAotCVNFTlNPUl9PVjc2NjAsCi0JU0VOU09SX09WOTYzMCwKLX0gc2Vuc29yczsKIAl1OCB0eXBlOwogI2RlZmluZSBHZW5lcmljIDAKICNkZWZpbmUgQ3JlYXRpdmVfbGl2ZV9tb3Rpb24gMQotCi0JdTgganBlZ19oZHJbSlBFR19IRFJfU1pdOworfTsKK2VudW0gc2Vuc29ycyB7CisJU0VOU09SX0lDWDA5OEJRLAorCVNFTlNPUl9MWjI0QlAsCisJU0VOU09SX01JMDM2MCwKKwlTRU5TT1JfTVQ5VjExMSwJCS8qID0gTUkzNjBTT0MgKi8KKwlTRU5TT1JfT1Y3NjYwLAorCVNFTlNPUl9PVjk2MzAsCiB9OwogCiBzdGF0aWMgaW50IHNkX3NldGV4cG8oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtNzgsNyArNjcsNyBAQAogCQkubWluaW11bSA9IDB4MDAwMSwKIAkJLm1heGltdW0gPSAweDBmZmYsCiAJCS5zdGVwID0gMSwKLSNkZWZpbmUgRVhQT19ERUYgMHgwMjdkCisjZGVmaW5lIEVYUE9fREVGIDB4MDM1NgogCQkuZGVmYXVsdF92YWx1ZSA9IEVYUE9fREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0ZXhwbywKQEAgLTkyLDcgKzgxLDcgQEAKIAkJLm1pbmltdW0gPSAweDAxLAogCQkubWF4aW11bSA9IDB4ZmYsCiAJCS5zdGVwID0gMSwKLSNkZWZpbmUgR0FJTl9ERUYgMHg2MQorI2RlZmluZSBHQUlOX0RFRiAweDhkCiAJCS5kZWZhdWx0X3ZhbHVlID0gR0FJTl9ERUYsCiAJICAgIH0sCiAJICAgIC5zZXQgPSBzZF9zZXRnYWluLApAQCAtMTAxLDMwICs5MCwxOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmdhX21vZGVbXSA9IHsKLQl7MTYwLCAxMjAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCi0JCS5ieXRlc3BlcmxpbmUgPSAxNjAsCi0JCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiA1IC8gOCArIDU5MCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkJLnByaXYgPSAwfSwKLQl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU1JHR0I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiA0IC8gOCArIDU5MCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkJLnByaXYgPSAxfSwKLQl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU1JHR0I4LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCi0JCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAgKiAzIC8gOCArIDU5MCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKLQkJLnByaXYgPSAyfSwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAxfSwKIH07CiAKLS8qIEpQRUcgcXVhbGl0eSBpbmRleGVkIGJ5IHdlYmNhbSBxdWFsaXR5ICovCi0jZGVmaW5lIFFVQUxfMCA5MAotI2RlZmluZSBRVUFMXzEgODUKLSNkZWZpbmUgUVVBTF8yIDc1Ci0jZGVmaW5lIFFVQUxfMyA3MAotc3RhdGljIGNvbnN0IHU4IHF1YWxpdHlfdGJbNF0gPSB7IFFVQUxfMCwgUVVBTF8xLCBRVUFMXzIsIFFVQUxfMyB9OwotCiAvKiBzcTkzMHggcmVnaXN0ZXJzICovCiAjZGVmaW5lIFNROTMwX0NUUkxfVUNCVVNfSU8JMHgwMDAxCiAjZGVmaW5lIFNROTMwX0NUUkxfSTJDX0lPCTB4MDAwMgpAQCAtMzAyLDcgKzI3OSw3IEBACiAJezB4MDEsIDB4MDAwMX0sCQkvKiBzZWxlY3QgSUZQL1NPQyByZWdpc3RlcnMgKi8KIAl7MHgwNiwgMHgzMDBjfSwJCS8qIG9wZXJhdGluZyBtb2RlIGNvbnRyb2wgKi8KIAl7MHgwOCwgMHhjYzAwfSwJCS8qIG91dHB1dCBmb3JtYXQgY29udHJvbCAoUkdCKSAqLwotCXsweDAxLCAweDAwMDR9LAkJLyogc2VsZWN0IGNvcmUgcmVnaXN0ZXJzICovCisJezB4MDEsIDB4MDAwNH0sCQkvKiBzZWxlY3Qgc2Vuc29yIGNvcmUgcmVnaXN0ZXJzICovCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfd3JpdGVfY21kIG10OXYxMTFfaW5pdF8xW10gPSB7CiAJezB4MDMsIDB4MDFlNX0sCQkvKiB3aW5kb3cgaGVpZ2h0ICovCkBAIC0zMzAsNyArMzA3LDggQEAKIAl7MHg2MiwgMHgwNDA1fSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY193cml0ZV9jbWQgbXQ5djExMV9pbml0XzRbXSA9IHsKLQl7MHgwNSwgMHgwMGNlfSwJCS8qIGhvcml6b250YWwgYmxhbmtpbmcgKi8KKy8qCXsweDA1LCAweDAwY2V9LCAqLworCXsweDA1LCAweDAwNWR9LAkJLyogaG9yaXpvbnRhbCBibGFua2luZyAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1Y2J1c193cml0ZV9jbWQgb3Y3NjYwX3N0YXJ0XzBbXSA9IHsKQEAgLTM0Myw3OCArMzIxLDU4IEBACiAJezB4ZjMzNCwgMHgzZX0sIHsweGYzMzUsIDB4Zjh9LCB7MHhmMzNmLCAweDAzfQogfTsKIAorLyogc3RhcnQgcGFyYW1ldGVycyBpbmRleGVkIGJ5IFtzZW5zb3JdW21vZGVdICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNhcF9zIHsKIAl1OAljY19zaXplaWQ7CiAJdTgJY2NfYnl0ZXNbMzJdOwotfSBjYXBjb25maWdbNF1bM10gPSB7Cit9IGNhcGNvbmZpZ1s0XVsyXSA9IHsKIAlbU0VOU09SX0lDWDA5OEJRXSA9IHsKLQkJezAsCQkJCS8qIEpQRUcsIDE2MHgxMjAgKi8KKwkJezIsCQkJCS8qIEJheWVyIDMyMHgyNDAgKi8KKwkJICB7MHgwNSwgMHgxZiwgMHgyMCwgMHgwZSwgMHgwMCwgMHg5ZiwgMHgwMiwgMHhlZSwKKwkJICAgMHgwMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogQmF5ZXIgNjQweDQ4MCAqLwogCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAogCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweDhiLCAweDAwLCAweDhiLCAweDAwLCAweDQxLCAweDAxLCAweDQxLAotCQkgICAweDAxLCAweDQxLCAweDAxLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAotCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLwotCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAotCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAotCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLwotCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGYwLAotCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAogCX0sCiAJW1NFTlNPUl9MWjI0QlBdID0gewotCQl7MCwJCQkJLyogSlBFRywgMTYweDEyMCAqLwotCQkgIHsweDAxLCAweDFmLCAweDIwLCAweDBlLCAweDAwLCAweDlmLCAweDAyLCAweGVlLAotCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweDhiLCAweDAwLCAweDhiLCAweDAwLCAweDQxLCAweDAxLCAweDQxLAotCQkgICAweDAxLCAweDQxLCAweDAxLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAotCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLworCQl7MiwJCQkJLyogQmF5ZXIgMzIweDI0MCAqLworCQkgIHsweDA1LCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGVlLAorCQkgICAweDAxLCAweDAxLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogQmF5ZXIgNjQweDQ4MCAqLwogCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGVlLAogCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAotCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLwotCQkgIHsweDAxLCAweDIyLCAweDIwLCAweDBlLCAweDAwLCAweGEyLCAweDAyLCAweGYwLAotCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAogCX0sCiAJW1NFTlNPUl9NSTAzNjBdID0gewotCQl7MCwJCQkJLyogSlBFRywgMTYweDEyMCAqLwotCQkgIHsweDA1LCAweDNkLCAweDIwLCAweDBiLCAweDAwLCAweGJkLCAweDAyLCAweDBiLAotCQkgICAweDAyLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDlmLCAweDAwLCAweDlmLAotCQkgICAweDAwLCAweDlmLCAweDAxLCAweDA1LCAweGEwLCAweDAwLCAweDgwLCAweDAwfSB9LAotCQl7MiwJCQkJLyogSlBFRywgMzIweDI0MCAqLworCQl7MiwJCQkJLyogQmF5ZXIgMzIweDI0MCAqLworCQkgIHsweDA1LCAweDAyLCAweDIwLCAweDAxLCAweDIwLCAweDgyLCAweDAyLCAweGUxLAorCQkgICAweDAxLCAweDAxLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAorCQl7NCwJCQkJLyogQmF5ZXIgNjQweDQ4MCAqLwogCQkgIHsweDAxLCAweDAyLCAweDIwLCAweDAxLCAweDIwLCAweDgyLCAweDAyLCAweGUxLAotLypmaXhtZQkJCQkgICAgICAgMDMJCSAgICAgICBlMyAqLwogCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDAyLCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDAxLCAweGYwLCAweDAwfSB9LAotCQl7NCwJCQkJLyogSlBFRywgNjQweDQ4MCAqLwotCQkgIHsweDAxLCAweDAyLCAweDIwLCAweDAxLCAweDIwLCAweDgyLCAweDAyLCAweGUzLAotCQkgICAweDAxLCAweDAyLCAweDAwLCAweDA4LCAweDE4LCAweDEyLCAweDc4LCAweGM4LAotCQkgICAweDA3LCAweGUxLCAweDAxLCAweGUxLCAweDAxLCAweDNmLCAweDAxLCAweDNmLAotCQkgICAweDAxLCAweDNmLCAweDAxLCAweDA1LCAweDgwLCAweDAyLCAweGUwLCAweDAxfSB9LAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSB9LAogCX0sCiAJW1NFTlNPUl9NVDlWMTExXSA9IHsKLQkJezAsCQkJCS8qIEpQRUcsIDE2MHgxMjAgKi8KLQkJICB7MHgwNSwgMHgzZCwgMHgyMCwgMHgwYiwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwYiwKLQkJICAgMHgwMiwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKLQkJICAgMHgwMiwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHg5ZiwgMHgwMCwgMHg5ZiwKLQkJICAgMHgwMCwgMHg5ZiwgMHgwMSwgMHgwNSwgMHhhMCwgMHgwMCwgMHg4MCwgMHgwMH0gfSwKLQkJezIsCQkJCS8qIEpQRUcsIDMyMHgyNDAgKi8KLQkJICB7MHgwMSwgMHgwMiwgMHgyMCwgMHgwMywgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMywKKwkJezIsCQkJCS8qIEJheWVyIDMyMHgyNDAgKi8KKwkJICB7MHgwNSwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMSwKKwkJICAgMHgwMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwkJezQsCQkJCS8qIEJheWVyIDY0MHg0ODAgKi8KKwkJICB7MHgwMSwgMHgwMiwgMHgyMCwgMHgwMSwgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMSwKIAkJICAgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKLQkJICAgMHgwMiwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMSwgMHgzZiwKLQkJICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHgwMSwgMHhmMCwgMHgwMH0gfSwKLQkJezQsCQkJCS8qIEpQRUcsIDY0MHg0ODAgKi8KLQkJICB7MHgwMSwgMHgwMiwgMHgyMCwgMHgwMywgMHgyMCwgMHg4MiwgMHgwMiwgMHhlMywKLQkJICAgMHgwMSwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxOCwgMHgxMiwgMHg3OCwgMHhjOCwKLQkJICAgMHgwNywgMHhlMSwgMHgwMSwgMHhlMSwgMHgwMSwgMHgzZiwgMHgwMSwgMHgzZiwKLQkJICAgMHgwMSwgMHgzZiwgMHgwMSwgMHgwNSwgMHg4MCwgMHgwMiwgMHhlMCwgMHgwMX0gfSwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKIAl9LAogfTsKIApAQCAtODY0LDcgKzgyMiw3IEBACiAJCWJ1ZltpKytdID0gMHgzNTsJLyogcmVnID0gZ2xvYmFsIGdhaW4gKi8KIAkJYnVmW2krK10gPSAweDAwOwkvKiB2YWwgSCAqLwogCQlidWZbaSsrXSA9IHNlbnNvci0+aTJjX2R1bTsKLQkJYnVmW2krK10gPSBzZC0+Z2FpbjsJLyogdmFsIEwgKi8KKwkJYnVmW2krK10gPSAweDgwICsgc2QtPmdhaW4gLyAyOyAvKiB2YWwgTCAqLwogCQlidWZbaSsrXSA9IDB4MDA7CiAJCWJ1ZltpKytdID0gMHgwMDsKIAkJYnVmW2krK10gPSAweDAwOwpAQCAtODg5LDEwICs4NDcsNyBAQAogCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAKIAljYW0tPmJ1bGsgPSAxOwotCWNhbS0+YnVsa19zaXplID0gQlVMS19UUkFOU0ZFUl9MRU47Ci0vKgljYW0tPmJ1bGtfbnVyYnMgPSAyOwlmaXhtZTogaWYgbm8gc2V0ZXhwbyBzeW5jICovCiAKLQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXNkLT5nYWluID0gR0FJTl9ERUY7CiAJc2QtPmV4cG8gPSBFWFBPX0RFRjsKIApAQCAtOTQ1LDEzICs5MDAsMTAgQEAKIAlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKSB7CiAKIAkJLyogbm8gc2Vuc29yIHByb2JlIGZvciBpY2FtIHRyYWNlciAqLwotCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdID09IDB4ZjYpIHsJLyogaWYgQ01PUyAqLworCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzVdID09IDB4ZjYpCS8qIGlmIENNT1MgKi8KIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSUNYMDk4QlE7Ci0JCQlnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZSA9ICZ2Z2FfbW9kZVsxXTsKLQkJCWdzcGNhX2Rldi0+Y2FtLm5tb2RlcyA9IDE7CS8qIG9ubHkgMzIweDI0MCAqLwotCQl9IGVsc2UgeworCQllbHNlCiAJCQljbW9zX3Byb2JlKGdzcGNhX2Rldik7Ci0JCX0KIAl9CiAKIAlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciAlcyIsIHNlbnNvcl90YltzZC0+c2Vuc29yXS5uYW1lKTsKQEAgLTk2MCw1MSArOTEyLDI0IEBACiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAotLyogc3BlY2lhbCBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHF1YW50aXphdGlvbiB0YWJsZXMgb2YgdGhlIEpQRUcgaGVhZGVyICovCi1zdGF0aWMgdm9pZCBzZF9qcGVnX3NldF9xdWFsKHU4ICpqcGVnX2hkciwKLQkJCQlpbnQgcXVhbGl0eSkKLXsKLQlpbnQgaSwgc2MxLCBzYzI7Ci0KLQlxdWFsaXR5ID0gcXVhbGl0eV90YltxdWFsaXR5XTsJLyogY29udmVydCB0byBKUEVHIHF1YWxpdHkgKi8KLS8qCi0gKiBhcHByb3hpbWF0aXZlIHF1YWxpdGllcyBmb3IgWSBhbmQgVS9WOgotICoJcXVhbnQgPSAwOjk0JS85MSUgMTo5MSUvODclIDI6ODIlLzczJSAzOjY5JS81NiUKLSAqIHNob3VsZCBoYXZlOgotICoJcXVhbnQgPSAwOjk0JS85MSUgMTo5MSUvODcuNSUgMjo4MS41JS83MiUgMzo2OSUvNTQuNSUKLSAqLwotCXNjMSA9IDIwMCAtIHF1YWxpdHkgKiAyOwotCXF1YWxpdHkgPSBxdWFsaXR5ICogNyAvIDUgLSA0MDsJCS8qIFVWIHF1YWxpdHkgKi8KLQlzYzIgPSAyMDAgLSBxdWFsaXR5ICogMjsKLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQlqcGVnX2hkcltKUEVHX1FUMF9PRkZTRVQgKyBpXSA9Ci0JCQkoanBlZ19oZWFkW0pQRUdfUVQwX09GRlNFVCArIGldICogc2MxICsgNTApIC8gMTAwOwotCQlqcGVnX2hkcltKUEVHX1FUMV9PRkZTRVQgKyBpXSA9Ci0JCQkoanBlZ19oZWFkW0pQRUdfUVQxX09GRlNFVCArIGldICogc2MyICsgNTApIC8gMTAwOwotCX0KLX0KLQogLyogc2VuZCB0aGUgc3RhcnQvc3RvcCBjb21tYW5kcyB0byB0aGUgd2ViY2FtICovCiBzdGF0aWMgdm9pZCBzZW5kX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJY29uc3Qgc3RydWN0IGNhcF9zICpjYXA7Ci0JaW50IG1vZGUsIHF1YWxpdHk7CisJaW50IG1vZGU7CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJY2FwID0gJmNhcGNvbmZpZ1tzZC0+c2Vuc29yXVttb2RlXTsKLQlxdWFsaXR5ID0gc2QtPnF1YWxpdHk7Ci0JcmVnX3diKGdzcGNhX2RldiwgKHF1YWxpdHkgPDwgMTIpCi0JCQkJIHwgMHgwYTAwCS8qIDkwMCBmb3IgQmF5ZXIgKi8KLQkJCQkgfCBTUTkzMF9DVFJMX0NBUF9TVEFSVCwKLQkJCTB4MDUwMAkJCS8qIGEwMCBmb3IgQmF5ZXIgKi8KLQkJCQkgfCBjYXAtPmNjX3NpemVpZCwKKwlyZWdfd2IoZ3NwY2FfZGV2LCAweDA5MDAgfCBTUTkzMF9DVFJMX0NBUF9TVEFSVCwKKwkJCTB4MGEwMCB8IGNhcC0+Y2Nfc2l6ZWlkLAogCQkJY2FwLT5jY19ieXRlcywgMzIpOwotfTsKK30KKwogc3RhdGljIHZvaWQgc2VuZF9zdG9wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlyZWdfdyhnc3BjYV9kZXYsIFNROTMwX0NUUkxfQ0FQX1NUT1AsIDApOwotfTsKK30KIAogLyogZnVuY3Rpb24gY2FsbGVkIGF0IHN0YXJ0IHRpbWUgYmVmb3JlIFVSQiBjcmVhdGlvbiAqLwogc3RhdGljIGludCBzZF9pc29jX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtMTAxMyw2ICs5MzgsNyBAQAogCiAJZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9IDE7CS8qIHRoZXJlIG11c3QgYmUgb25lIFVSQiBvbmx5ICovCiAJc2QtPmRvX2N0cmwgPSAwOworCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSA9IGdzcGNhX2Rldi0+d2lkdGggKiBnc3BjYV9kZXYtPmhlaWdodCArIDg7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMjIsMTEgKzk0OCw2IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBtb2RlOwogCi0JLyogaW5pdGlhbGl6ZSB0aGUgSlBFRyBoZWFkZXIgKi8KLQlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAotCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLwotCXNkX2pwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7Ci0KIAlicmlkZ2VfaW5pdChzZCk7CiAJZ2xvYmFsX2luaXQoc2QsIDApOwogCW1zbGVlcCgxMDApOwpAQCAtMTA3MSw3ICs5OTIsNyBAQAogCQkJCUFSUkFZX1NJWkUobHoyNGJwX3N0YXJ0XzIpLAogCQkJCTYpOwogCQltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7Ci0JCWx6MjRicF9wcGwoc2QsIG1vZGUgPT0gMiA/IDB4MDU2NCA6IDB4MDMxMCk7CisJCWx6MjRicF9wcGwoc2QsIG1vZGUgPT0gMSA/IDB4MDU2NCA6IDB4MDMxMCk7CiAJCW1zbGVlcCgxMCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX01JMDM2MDoKQEAgLTEwOTUsNyArMTAxNiw3IEBACiAJCS8qIDFzdCBzdGFydCAqLwogCQlzZW5kX3N0YXJ0KGdzcGNhX2Rldik7CiAJCW1zbGVlcCg2MCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgU1E5MzBfQ1RSTF9DQVBfU1RPUCwgMHgwMDAwKTsKKwkJc2VuZF9zdG9wKGdzcGNhX2Rldik7CiAKIAkJaTJjX3dyaXRlKHNkLAogCQkJbWkwMzYwX3N0YXJ0XzQsIEFSUkFZX1NJWkUobWkwMzYwX3N0YXJ0XzQpKTsKQEAgLTExMTMsNyArMTAzNCw3IEBACiAJCQkJQVJSQVlfU0laRShtdDl2MTExX2luaXRfMikpOwogCQl1Y2J1c193cml0ZShnc3BjYV9kZXYsIG10OXYxMTFfc3RhcnRfMSwKIAkJCQlBUlJBWV9TSVpFKG10OXYxMTFfc3RhcnRfMSksCi0JCQkJOCk7CisJCQkJNSk7CiAJCWkyY193cml0ZShzZCwgbXQ5djExMV9pbml0XzMsCiAJCQkJQVJSQVlfU0laRShtdDl2MTExX2luaXRfMykpOwogCQlpMmNfd3JpdGUoc2QsIG10OXYxMTFfaW5pdF80LApAQCAtMTEyNSw4ICsxMDQ2LDYgQEAKIG91dDoKIAltc2xlZXAoMTAwMCk7CiAKLQlzZC0+ZW9mX2xlbiA9IDA7CS8qIGluaXQgcGFja2V0IHNjYW4gKi8KLQogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9NVDlWMTExKQogCQlncGlvX3NldChzZCwgU1E5MzBfR1BJT19ERkxfTEVELCBTUTkzMF9HUElPX0RGTF9MRUQpOwogCkBAIC0xMTY2LDk0ICsxMDg1LDE3IEBACiAJbXNsZWVwKDEwMCk7CiB9CiAKLS8qIG1vdmUgYSBwYWNrZXQgYWRkaW5nIDB4MDAgYWZ0ZXIgMHhmZiAqLwotc3RhdGljIHZvaWQgYWRkX3BhY2tldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQl1OCAqZGF0YSwKLQkJCWludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlpID0gMDsKLQlkbyB7Ci0JCWlmIChkYXRhW2ldID09IDB4ZmYpIHsKLQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwKLQkJCQkJZGF0YSwgaSArIDEpOwotCQkJbGVuIC09IGk7Ci0JCQlkYXRhICs9IGk7Ci0JCQkqZGF0YSA9IDB4MDA7Ci0JCQlpID0gMDsKLQkJfQotCX0gd2hpbGUgKCsraSA8IGxlbik7Ci0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4pOwotfQotCi0vKiBlbmQgYSBmcmFtZSBhbmQgc3RhcnQgYSBuZXcgb25lICovCi1zdGF0aWMgdm9pZCBlb2Zfc29mKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RhdGljIGNvbnN0IHU4IGZmZDlbXSA9IHsweGZmLCAweGQ5fTsKLQotCS8qIGlmIGNvbnRyb2wgc2V0LCBzdG9wIGJ1bGsgdHJhbnNmZXIgKi8KLQlpZiAoc2QtPmRvX2N0cmwKLQkgJiYgZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID09IElOVEVSX1BBQ0tFVCkKLQkJZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9IDA7Ci0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCi0JCQlmZmQ5LCAyKTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCi0JCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKLX0KLQogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggKmRhdGEsCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCS8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXU4ICpwOwotCWludCBsOwogCi0JbGVuIC09IDg7CS8qIGlnbm9yZSBsYXN0IDggYnl0ZXMgKDAwIDAwIDU1IGFhIDU1IGFhIDAwIDAwKSAqLwotCi0JLyoKLQkgKiB0aGUgZW5kL3N0YXJ0IG9mIGZyYW1lIGlzIGluZGljYXRlZCBieQotCSAqCTB4MDAgKiAxNiAtICAweGFiICogOAotCSAqIGFsaWduZWQgb24gOCBieXRlcyBib3VuZGFyeQotCSAqLwotCWlmIChzZC0+ZW9mX2xlbiAhPSAwKSB7CQkvKiBpZiAnYWJhYmFiYWInIGluIHByZXZpb3VzIHBrdCAqLwotCQlpZiAoKigodTMyICopIGRhdGEpID09IDB4YWJhYmFiYWIpIHsKLQkJCQkvKmZpeG1lOiBzaG91bGQgcmVtb3ZlIHByZXZpb3VzIDAwMDBhYmFiYWIqLwotCQkJZW9mX3NvZihnc3BjYV9kZXYpOwotCQkJZGF0YSArPSA0OwotCQkJbGVuIC09IDQ7Ci0JCX0KLQkJc2QtPmVvZl9sZW4gPSAwOwotCX0KLQlwID0gZGF0YTsKLQlsID0gbGVuOwotCWZvciAoOzspIHsKLQkJaWYgKCooKHUzMiAqKSBwKSA9PSAweGFiYWJhYmFiKSB7Ci0JCQlpZiAobCA8IDgpIHsJCS8qIChtYXkgYmUgNCBvbmx5KSAqLwotCQkJCXNkLT5lb2ZfbGVuID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgqKCh1MzIgKikgcCArIDEpID09IDB4YWJhYmFiYWIpIHsKLQkJCQlhZGRfcGFja2V0KGdzcGNhX2RldiwgZGF0YSwgcCAtIGRhdGEgLSAxNik7Ci0JCQkJCQkvKiByZW1vdmUgcHJldmlvdXMgemVyb3MgKi8KLQkJCQllb2Zfc29mKGdzcGNhX2Rldik7Ci0JCQkJcCArPSA4OwotCQkJCWwgLT0gODsKLQkJCQlpZiAobCA8PSAwKQotCQkJCQlyZXR1cm47Ci0JCQkJbGVuID0gbDsKLQkJCQlkYXRhID0gcDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlwICs9IDQ7Ci0JCWwgLT0gNDsKLQkJaWYgKGwgPD0gMCkKLQkJCWJyZWFrOwotCX0KLQlhZGRfcGFja2V0KGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwlpZiAoc2QtPmRvX2N0cmwpCisJCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPSAwOworCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgTlVMTCwgMCk7CisJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBkYXRhLCBsZW4gLSA4KTsKKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKQEAgLTEyOTEsNDUgKzExMzMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcXVhbGl0eTsKLQotCWlmIChqY29tcC0+cXVhbGl0eSA+PSAoUVVBTF8wICsgUVVBTF8xKSAvIDIpCi0JCXF1YWxpdHkgPSAwOwotCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID49IChRVUFMXzEgKyBRVUFMXzIpIC8gMikKLQkJcXVhbGl0eSA9IDE7Ci0JZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPj0gKFFVQUxfMiArIFFVQUxfMykgLyAyKQotCQlxdWFsaXR5ID0gMjsKLQllbHNlCi0JCXF1YWxpdHkgPSAzOwotCi0JaWYgKHF1YWxpdHkgIT0gc2QtPnF1YWxpdHkpIHsKLQkJc2QtPnF1YWxpdHkgPSBxdWFsaXR5OwotCQlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKLQkJCXNlbmRfc3RvcChnc3BjYV9kZXYpOwotCQkJc2RfanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKLQkJCW1zbGVlcCg3MCk7Ci0JCQlzZW5kX3N0YXJ0KGdzcGNhX2Rldik7Ci0JCX0KLQl9Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKLX0KLQotc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOwotCWpjb21wLT5xdWFsaXR5ID0gcXVhbGl0eV90YltzZC0+cXVhbGl0eV07Ci0JamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCi0JCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOwotCXJldHVybiAwOwotfQotCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSAgID0gTU9EVUxFX05BTUUsCkBAIC0xMzQyLDggKzExNDUsNiBAQAogCS5zdG9wTiAgPSBzZF9zdG9wTiwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkuZHFfY2FsbGJhY2sgPSBzZF9kcV9jYWxsYmFjaywKLQkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAotCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggMmEwZjEyZC4uM2IzYjk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTU1LDEyICs1NSwxMiBAQAogCXU4IGVmZmVjdDsKIAogCXU4IHNlbnNvcjsKLWVudW0geworfTsKK2VudW0gc2Vuc29ycyB7CiAJU0VOU09SX09NNjgwMiwKIAlTRU5TT1JfT1RIRVIsCiAJU0VOU09SX1RBUzUxMzBBLAogCVNFTlNPUl9MVDE2OEcsCQkvKiBtdXN0IHZlcmlmeSBpZiB0aGlzIGlzIHRoZSBhY3R1YWwgbW9kZWwgKi8KLX0gc2Vuc29yczsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCmluZGV4IDAzMTI2NmEuLmIxNmZkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYwpAQCAtMzksNiArMzksMTAgQEAKIAl1OCB2ZmxpcDsKIAl1OCBsaWdodGZyZXE7CiAJczggc2hhcnBuZXNzOworCXUxNiBleHBvc3VyZTsKKwl1OCBnYWluOworCXU4IGF1dG9nYWluOworCXU4IGJhY2tsaWdodDsKIAogCXU4IGltYWdlX29mZnNldDsKIApAQCAtNzcsNiArODEsMTQgQEAKIHN0YXRpYyBpbnQgc2RfZ2V0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwogc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CitzdGF0aWMgaW50IHNkX3NldGJhY2tsaWdodChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CitzdGF0aWMgaW50IHNkX2dldGJhY2tsaWdodChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgc2RfY3RybHNbXSA9IHsKICNkZWZpbmUgQlJJR0hUTkVTU19JRFggMApAQCAtMTg1LDYgKzE5Nyw2NiBAQAogCSAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCSAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAogCSB9LAorI2RlZmluZSBHQUlOX0lEWCA3CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfR0FJTiwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJHYWluIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDc4LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEdBSU5fREVGIDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQUlOX0RFRiwKKwkgICAgfSwKKwkgICAgLnNldCA9IHNkX3NldGdhaW4sCisJICAgIC5nZXQgPSBzZF9nZXRnYWluLAorCX0sCisjZGVmaW5lIEVYUE9TVVJFX0lEWCA4CisJeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lID0gIkV4cG9zdXJlIiwKKyNkZWZpbmUgRVhQT1NVUkVfREVGIDQ1MAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSA0MDk1LAorCQkJLnN0ZXAgPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgPSBFWFBPU1VSRV9ERUYsCisJCX0sCisJCS5zZXQgPSBzZF9zZXRleHBvc3VyZSwKKwkJLmdldCA9IHNkX2dldGV4cG9zdXJlLAorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA5CisJeworCQl7CisJCQkuaWQgPSBWNEwyX0NJRF9BVVRPR0FJTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gIkF1dG9tYXRpYyBHYWluIGFuZCBFeHBvc3VyZSIsCisJCQkubWluaW11bSA9IDAsCisJCQkubWF4aW11bSA9IDEsCisJCQkuc3RlcCA9IDEsCisjZGVmaW5lIEFVVE9HQUlOX0RFRiAxCisJCQkuZGVmYXVsdF92YWx1ZSA9IEFVVE9HQUlOX0RFRiwKKwkJfSwKKwkJLnNldCA9IHNkX3NldGF1dG9nYWluLAorCQkuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCisJfSwKKyNkZWZpbmUgQkFDS0xJR0hUX0lEWCAxMAorCXsKKwkJeworCQkJLmlkID0gVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiwKKwkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJCS5uYW1lID0gIkJhY2tsaWdodCBDb21wZW5zYXRpb24iLAorCQkJLm1pbmltdW0gPSAwLAorCQkJLm1heGltdW0gPSAxNSwKKwkJCS5zdGVwID0gMSwKKyNkZWZpbmUgQkFDS0xJR0hUX0RFRiAxNQorCQkJLmRlZmF1bHRfdmFsdWUgPSBCQUNLTElHSFRfREVGLAorCQl9LAorCQkuc2V0ID0gc2Rfc2V0YmFja2xpZ2h0LAorCQkuZ2V0ID0gc2RfZ2V0YmFja2xpZ2h0LAorCX0sCiB9OwogCiAvKiB0YWJsZSBvZiB0aGUgZGlzYWJsZWQgY29udHJvbHMgKi8KQEAgLTE5MiwzMyArMjY0LDUxIEBACiAvKiBTRU5TT1JfSFY3MTMxUiAwICovCiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCiAJCXwgKDEgPDwgSEZMSVBfSURYKSB8ICgxIDw8IFZGTElQX0lEWCkgfCAoMSA8PCBMSUdIVEZSRVFfSURYKQotCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpLAorCQl8ICgxIDw8IFNIQVJQTkVTU19JRFgpCisJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQorCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKIC8qIFNFTlNPUl9NSTAzNjAgMSAqLwogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQogCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKLQkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfTUkxMzEwX1NPQyAyICovCiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCi0JCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpCisJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQorCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKIC8qIFNFTlNPUl9NSTEzMjAgMyAqLwogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQotCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfTUkxMzIwX1NPQyA0ICovCiAJKDEgPDwgQlJJR0hUTkVTU19JRFgpIHwgKDEgPDwgQ09OVFJBU1RfSURYKSB8ICgxIDw8IENPTE9SU19JRFgpCi0JCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSB8ICgxIDw8IFNIQVJQTkVTU19JRFgpCisJCXwgKDEgPDwgR0FJTl9JRFgpIHwgKDEgPDwgRVhQT1NVUkVfSURYKQorCQl8ICgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBCQUNLTElHSFRfSURYKSwKIC8qIFNFTlNPUl9PVjc2NjAgNSAqLwogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQotCQl8ICgxIDw8IExJR0hURlJFUV9JRFgpIHwgKDEgPDwgU0hBUlBORVNTX0lEWCksCisJCXwgKDEgPDwgTElHSFRGUkVRX0lEWCkgfCAoMSA8PCBTSEFSUE5FU1NfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfT1Y3NjcwIDYgKi8KIAkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKLQkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfUE8xMjAwIDcgKi8KIAkoMSA8PCBCUklHSFRORVNTX0lEWCkgfCAoMSA8PCBDT05UUkFTVF9JRFgpIHwgKDEgPDwgQ09MT1JTX0lEWCkKLQkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKSwKKwkJfCAoMSA8PCBMSUdIVEZSRVFfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfUE8zMTMwTkMgOCAqLwogCSgxIDw8IEJSSUdIVE5FU1NfSURYKSB8ICgxIDw8IENPTlRSQVNUX0lEWCkgfCAoMSA8PCBDT0xPUlNfSURYKQogCQl8ICgxIDw8IEhGTElQX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpIHwgKDEgPDwgTElHSFRGUkVRX0lEWCkKLQkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKSwKKwkJfCAoMSA8PCBTSEFSUE5FU1NfSURYKQorCQl8ICgxIDw8IEdBSU5fSURYKSB8ICgxIDw8IEVYUE9TVVJFX0lEWCkKKwkJfCAoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgQkFDS0xJR0hUX0lEWCksCiAvKiBTRU5TT1JfUE94eHh4IDkgKi8KIAkoMSA8PCBIRkxJUF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSB8ICgxIDw8IExJR0hURlJFUV9JRFgpLAogfTsKQEAgLTI4MjUsNyArMjkxNSw5IEBACiAJezB4MDAsIDB4MWUsIDB4YzYsIDB4YWF9LAogCXsweDAwLCAweDAwLCAweDQwLCAweGRkfSwKIAl7MHgwMCwgMHgxZCwgMHgwNSwgMHhhYX0sCi0KKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBwb3h4eHhfZ2FtbWFbXVs0XSA9IHsKIAl7MHgwMCwgMHhkNiwgMHgyMiwgMHhhYX0sCS8qIGdhbW1hIDAgKi8KIAl7MHgwMCwgMHg3MywgMHgwMCwgMHhhYX0sCiAJezB4MDAsIDB4NzQsIDB4MGEsIDB4YWF9LApAQCAtMjg2NywxOSArMjk1OSw5IEBACiAJezB4MDAsIDB4N2MsIDB4YmEsIDB4YWF9LAogCXsweDAwLCAweDdkLCAweGQ0LCAweGFhfSwKIAl7MHgwMCwgMHg3ZSwgMHhlYSwgMHhhYX0sCi0KLQl7MHgwMCwgMHhhYSwgMHhmZiwgMHhhYX0sCS8qIGJhY2sgbGlnaHQgY29tcCAqLwotCXsweDAwLCAweGM0LCAweDAzLCAweGFhfSwKLQl7MHgwMCwgMHhjNSwgMHgxOSwgMHhhYX0sCi0JezB4MDAsIDB4YzYsIDB4MDMsIDB4YWF9LAotCXsweDAwLCAweGM3LCAweDkxLCAweGFhfSwKLQl7MHgwMCwgMHhjOCwgMHgwMSwgMHhhYX0sCi0JezB4MDAsIDB4YzksIDB4ZGQsIDB4YWF9LAotCXsweDAwLCAweGNhLCAweDAyLCAweGFhfSwKLQl7MHgwMCwgMHhjYiwgMHgzNywgMHhhYX0sCi0KLS8qIHJlYWQgZDEgKi8KLQl7MHgwMCwgMHhkMSwgMHgzYywgMHhhYX0sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggcG94eHh4X2luaXRfc3RhcnRfM1tdWzRdID0gewogCXsweDAwLCAweGI4LCAweDI4LCAweGFhfSwKIAl7MHgwMCwgMHhiOSwgMHgxZSwgMHhhYX0sCiAJezB4MDAsIDB4YjYsIDB4MTQsIDB4YWF9LApAQCAtMjk1OSw5ICszMDQxLDYgQEAKIAl7MHgwMCwgMHhiMywgMHgwOCwgMHhhYX0sCiAJezB4MDAsIDB4YjQsIDB4MGIsIDB4YWF9LAogCXsweDAwLCAweGI1LCAweDBkLCAweGFhfSwKLQl7MHgwMCwgMHg1OSwgMHg3ZSwgMHhhYX0sCS8qIHNoYXJwbmVzcyAqLwotCXsweDAwLCAweDE2LCAweDAwLCAweGFhfSwJLyogd2hpdGUgYmFsYW5jZSAqLwotCXsweDAwLCAweDE4LCAweDAwLCAweGFhfSwKIAl7fQogfTsKIHN0YXRpYyBjb25zdCB1OCBwb3h4eHhfaW5pdF9lbmRfMltdWzRdID0gewpAQCAtMzMxMiw2ICszMzkxLDMzIEBACiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OworCXNkLT5mbGFncyA9IGlkLT5kcml2ZXJfaW5mbyAmIDB4ZmY7CisKKwlpZiAoaWQtPmlkVmVuZG9yID09IDB4MDQ2ZCAmJgorCSAgICAoaWQtPmlkUHJvZHVjdCA9PSAweDA4OTIgfHwgaWQtPmlkUHJvZHVjdCA9PSAweDA4OTYpKQorCQlzZC0+c2Vuc29yID0gU0VOU09SX1BPeHh4eDsJLyogbm8gcHJvYmUgKi8KKworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CisJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOworCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CisJc2QtPmhmbGlwID0gSEZMSVBfREVGOworCXNkLT52ZmxpcCA9IFZGTElQX0RFRjsKKwlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisJc2QtPmdhaW4gPSBHQUlOX0RFRjsKKwlzZC0+ZXhwb3N1cmUgPSBFWFBPU1VSRV9ERUY7CisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCXNkLT5iYWNrbGlnaHQgPSBCQUNLTElHSFRfREVGOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBzZW5zb3I7CiAJc3RhdGljIHU4IG5wa3RbXSA9IHsJLyogbnVtYmVyIG9mIHBhY2tldHMgcGVyIElTT0MgbWVzc2FnZSAqLwpAQCAtMzMyNywxNCArMzQzMywxMSBAQAogCQkxMjgsCQkvKiBQT3h4eHggOSAqLwogCX07CiAKLQljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0Jc2QtPmJyaWRnZSA9IGlkLT5kcml2ZXJfaW5mbyA+PiA4OwotCXNkLT5mbGFncyA9IGlkLT5kcml2ZXJfaW5mbyAmIDB4ZmY7Ci0JaWYgKGlkLT5pZFZlbmRvciA9PSAweDA0NmQgJiYKLQkgICAgKGlkLT5pZFByb2R1Y3QgPT0gMHgwODkyIHx8IGlkLT5pZFByb2R1Y3QgPT0gMHgwODk2KSkKLQkJc2Vuc29yID0gU0VOU09SX1BPeHh4eDsKLQllbHNlCisJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1BPeHh4eCkKIAkJc2Vuc29yID0gdmMwMzJ4X3Byb2JlX3NlbnNvcihnc3BjYV9kZXYpOworCWVsc2UKKwkJc2Vuc29yID0gc2QtPnNlbnNvcjsKKwogCXN3aXRjaCAoc2Vuc29yKSB7CiAJY2FzZSAtMToKIAkJUERFQlVHKERfUFJPQkUsICJVbmtub3duIHNlbnNvci4uLiIpOwpAQCAtMzM3Myw2ICszNDc2LDcgQEAKIAl9CiAJc2QtPnNlbnNvciA9IHNlbnNvcjsKIAorCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CiAJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjFfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZjMDMyMV9tb2RlKTsKQEAgLTM0MDEsMjggKzM1MDUsMTEgQEAKIAkJfQogCX0KIAljYW0tPm5wa3QgPSBucGt0W3NkLT5zZW5zb3JdOwotCi0Jc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKLQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7Ci0Jc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKLQlzZC0+aGZsaXAgPSBIRkxJUF9ERUY7Ci0Jc2QtPnZmbGlwID0gVkZMSVBfREVGOwotCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKLQogCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSBjdHJsX2Rpc1tzZC0+c2Vuc29yXTsKIAogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2NzApCiAJCXNkLT5mbGFncyB8PSBGTF9IRkxJUCB8IEZMX1ZGTElQOwogCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwotc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHg4YSwgMCwgMyk7CiAJCXJlZ193KGdzcGNhX2RldiwgMHg4NywgMHgwMCwgMHgwZjBmKTsKQEAgLTM0MzMsOCArMzUyMCw4IEBACiAJCQlpZiAoZ3NwY2FfZGV2LT51c2JfYnVmWzBdICE9IDApIHsKIAkJCQlyZWdfdyhnc3BjYV9kZXYsIDB4YTAsIDB4MjYsIDB4YjMwMCk7CiAJCQkJcmVnX3coZ3NwY2FfZGV2LCAweGEwLCAweDA0LCAweGIzMDApOwotCQkJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKIAkJCX0KKwkJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwMCwgMHhiMzAwKTsKIAkJfQogCX0KIAlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwpAQCAtMzU1MSw2ICszNjM4LDgyIEBACiAJCWJyZWFrOwogCX0KIH0KK3N0YXRpYyB2b2lkIHNldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgR0FJTl9JRFgpKQorCQlyZXR1cm47CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxNSwgJnNkLT5nYWluLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1OCBkYXRhOworCisJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBFWFBPU1VSRV9JRFgpKQorCQlyZXR1cm47CisJZGF0YSA9IHNkLT5leHBvc3VyZSA+PiA4OworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWEsICZkYXRhLCAxKTsKKwlkYXRhID0gc2QtPmV4cG9zdXJlOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWIsICZkYXRhLCAxKTsKK30KKworc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzdGF0aWMgY29uc3QgdTggZGF0YVsyXSA9IHsweDI4LCAweDNjfTsKKworCWlmIChnc3BjYV9kZXYtPmN0cmxfZGlzICYgKDEgPDwgQVVUT0dBSU5fSURYKSkKKwkJcmV0dXJuOworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4ZDEsICZkYXRhW3NkLT5hdXRvZ2Fpbl0sIDEpOworfQorCitzdGF0aWMgdm9pZCBzZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisvKmZpeG1lOnRvIGRvICovCisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2dhbW1hKTsKK30KKworc3RhdGljIHZvaWQgc2V0YmFja2xpZ2h0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTE2IHY7CisJdTggZGF0YTsKKworCWRhdGEgPSAoc2QtPmJhY2tsaWdodCA8PCA0KSB8IDB4MGY7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHhhYSwgJmRhdGEsIDEpOworCXYgPSA2MTMgKyAxMiAqIHNkLT5iYWNrbGlnaHQ7CisJZGF0YSA9IHYgPj4gODsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGM0LCAmZGF0YSwgMSk7CisJZGF0YSA9IHY7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHhjNSwgJmRhdGEsIDEpOworCXYgPSAxMDkzIC0gMTIgKiBzZC0+YmFja2xpZ2h0OworCWRhdGEgPSB2ID4+IDg7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHhjNiwgJmRhdGEsIDEpOworCWRhdGEgPSB2OworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4YzcsICZkYXRhLCAxKTsKKwl2ID0gMzQyICsgOSAqIHNkLT5iYWNrbGlnaHQ7CisJZGF0YSA9IHYgPj4gODsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGM4LCAmZGF0YSwgMSk7CisJZGF0YSA9IHY7CisJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHhjOSwgJmRhdGEsIDEpOworCXYgPSA3MDIgLSA5ICogc2QtPmJhY2tsaWdodDsKKwlkYXRhID0gdiA+PiA4OworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4Y2EsICZkYXRhLCAxKTsKKwlkYXRhID0gdjsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweGNiLCAmZGF0YSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHdiKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKy8qZml4bWU6dG8gZG8gLSB2YWxpZCB3aGVuIHJlZyBkMSA9IDB4MWMgLSAocmVnMTYgKyByZWcxNSA9IDB4YTMpKi8KKwlzdGF0aWMgY29uc3QgdTggZGF0YVsyXSA9IHsweDAwLCAweDAwfTsKKworCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTYsICZkYXRhWzBdLCAxKTsKKwlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDE4LCAmZGF0YVsxXSwgMSk7Cit9CiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewpAQCAtMzY2Miw2ICszODI1LDE2IEBACiAJZGVmYXVsdDoKIC8qCWNhc2UgU0VOU09SX1BPeHh4eDogKi8KIAkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgcG94eHh4X2luaXRfY29tbW9uKTsKKwkJc2V0Z2FtbWEoZ3NwY2FfZGV2KTsKKwkJc2V0YmFja2xpZ2h0KGdzcGNhX2Rldik7CisJCXNldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKKwkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKKwkJc2V0Y29sb3JzKGdzcGNhX2Rldik7CisJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOworCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCQlzZXRnYWluKGdzcGNhX2Rldik7CisJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBveHh4eF9pbml0X3N0YXJ0XzMpOwogCQlpZiAobW9kZSkKIAkJCWluaXQgPSBwb3h4eHhfaW5pdFFWR0E7CiAJCWVsc2UKQEAgLTM2OTMsNyArMzg2Niw2IEBACiAJCQlicmVhazsKIAkJfQogCQltc2xlZXAoMTAwKTsKLQkJc2V0c2hhcnBuZXNzKGdzcGNhX2Rldik7CiAJCXNldGh2ZmxpcChnc3BjYV9kZXYpOwogCQlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKIAl9CkBAIC0zNzA0LDE0ICszODc2LDEwIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHhhMCwgMHgwMDAwLCAweGJmZmYpOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QT3h4eHg6Ci0JCXNldGNvbG9ycyhnc3BjYV9kZXYpOwotCQlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7Ci0JCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7Ci0KLQkJLyogbGVkIG9uICovCi0JCW1zbGVlcCg4MCk7Ci0JCXJlZ193KGdzcGNhX2RldiwgMHg4OSwgMHhmZmZmLCAweGZkZmYpOwogCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwb3h4eHhfaW5pdF9lbmRfMik7CisJCXNldHdiKGdzcGNhX2Rldik7CisJCW1zbGVlcCg4MCk7CQkvKiBsZWQgb24gKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDg5LCAweGZmZmYsIDB4ZmRmZik7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwpAQCAtMzkxMSw2ICs0MDc5LDgwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+Z2FpbiA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGdhaW4oZ3NwY2FfZGV2KTsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgaW50IHNkX2dldGdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Z2FpbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9zZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+ZXhwb3N1cmUgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRleHBvc3VyZShnc3BjYV9kZXYpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0ZXhwb3N1cmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+ZXhwb3N1cmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJc2QtPmF1dG9nYWluID0gdmFsOworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+YXV0b2dhaW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0YmFja2xpZ2h0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5iYWNrbGlnaHQgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlzZXRiYWNrbGlnaHQoZ3NwY2FfZGV2KTsKKworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0YmFja2xpZ2h0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJhY2tsaWdodDsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZF9xdWVyeW1lbnUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCmluZGV4IDQ0NzNmMGYuLjA2NjYwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKQEAgLTIxLDcgKzIxLDkgQEAKIAogI2RlZmluZSBNT0RVTEVfTkFNRSAiemMzeHgiCiAKKyNpZmRlZiBDT05GSUdfSU5QVVQKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2VuZGlmCiAjaW5jbHVkZSAiZ3NwY2EuaCIKICNpbmNsdWRlICJqcGVnLmgiCiAKQEAgLTUwLDMzICs1MiwzOCBAQAogI2RlZmluZSBRVUFMSVRZX01BWCA4MAogI2RlZmluZSBRVUFMSVRZX0RFRiA3MAogCisJdTggYnJpZGdlOwogCXU4IHNlbnNvcjsJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KLS8qICEhIHZhbHVlcyB1c2VkIGluIGRpZmZlcmVudCB0YWJsZXMgKi8KLSNkZWZpbmUgU0VOU09SX0FEQ00yNzAwIDAKLSNkZWZpbmUgU0VOU09SX0NTMjEwMiAxCi0jZGVmaW5lIFNFTlNPUl9DUzIxMDJLIDIKLSNkZWZpbmUgU0VOU09SX0dDMDMwNSAzCi0jZGVmaW5lIFNFTlNPUl9IRENTMjAyMGIgNAotI2RlZmluZSBTRU5TT1JfSFY3MTMxQiA1Ci0jZGVmaW5lIFNFTlNPUl9IVjcxMzFDIDYKLSNkZWZpbmUgU0VOU09SX0lDTTEwNUEgNwotI2RlZmluZSBTRU5TT1JfTUM1MDFDQiA4Ci0jZGVmaW5lIFNFTlNPUl9NSTAzNjBTT0MgOQotI2RlZmluZSBTRU5TT1JfT1Y3NjIwIDEwCi0vKiNkZWZpbmUgU0VOU09SX09WNzY0OCAxMCAtIHNhbWUgdmFsdWVzICovCi0jZGVmaW5lIFNFTlNPUl9PVjc2MzBDIDExCi0jZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTIKLSNkZWZpbmUgU0VOU09SX1BBUzIwMkIgMTMKLSNkZWZpbmUgU0VOU09SX1BCMDMzMCAxNAkvKiAoTUkwMzYwKSAqLwotI2RlZmluZSBTRU5TT1JfUE8yMDMwIDE1Ci0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTYKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTcKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxOAotI2RlZmluZSBTRU5TT1JfTUFYIDE5Ci0JdW5zaWduZWQgc2hvcnQgY2hpcF9yZXZpc2lvbjsKKwl1MTYgY2hpcF9yZXZpc2lvbjsKIAogCXU4IGpwZWdfaGRyW0pQRUdfSERSX1NaXTsKIH07CitlbnVtIGJyaWRnZXMgeworCUJSSURHRV9aQzMwMSwKKwlCUklER0VfWkMzMDMsCit9OworZW51bSBzZW5zb3JzIHsKKwlTRU5TT1JfQURDTTI3MDAsCisJU0VOU09SX0NTMjEwMiwKKwlTRU5TT1JfQ1MyMTAySywKKwlTRU5TT1JfR0MwMzA1LAorCVNFTlNPUl9IRENTMjAyMGIsCisJU0VOU09SX0hWNzEzMUIsCisJU0VOU09SX0hWNzEzMVIsCisJU0VOU09SX0lDTTEwNUEsCisJU0VOU09SX01DNTAxQ0IsCisJU0VOU09SX01UOVYxMTFfMSwJLyogKG1pMzYwc29jKSB6YzMwMSAqLworCVNFTlNPUl9NVDlWMTExXzMsCS8qIChtaTM2MHNvYykgemMzMDMgKi8KKwlTRU5TT1JfT1Y3NjIwLAkJLyogT1Y3NjQ4IC0gc2FtZSB2YWx1ZXMgKi8KKwlTRU5TT1JfT1Y3NjMwQywKKwlTRU5TT1JfUEFTMTA2LAorCVNFTlNPUl9QQVMyMDJCLAorCVNFTlNPUl9QQjAzMzAsCisJU0VOU09SX1BPMjAzMCwKKwlTRU5TT1JfVEFTNTEzMEMsCisJU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCwKKwlTRU5TT1JfTUFYCit9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOwpAQCAtMjA3NCw2ICsyMDgxLDcgQEAKIAl7fQogfTsKIAorLyogZnJvbSBsUEVQSTI2NHYuaW5mIChodjcxMzFiISkgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBodjcxMzFyX0luaXRpYWxTY2FsZVtdID0gewogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKQEAgLTIwODEsOCArMjA4OSw4IEBACiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKIAl7MHhhMCwgMHg3NywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAogCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAogCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKIAl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LApAQCAtMjA5NSw2ICsyMTAzLDggQEAKIAl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGRkLCAweDAwLCAweDAyMDB9LAogCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAogCXsweGFhLCAweDAxLCAweDAwMGN9LAogCXsweGFhLCAweDExLCAweDAwMDB9LApAQCAtMjEwMywxMCArMjExMywxMCBAQAogCXsweGFhLCAweDE1LCAweDAwZTh9LAogCXsweGFhLCAweDE2LCAweDAwMDJ9LAogCXsweGFhLCAweDE3LCAweDAwODh9LAotCisJezB4YWEsIDB4MzAsIDB4MDAwYn0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCi0JezB4YTAsIDB4ODksIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAogCXsweGEwLCAweDAwLCAweDAxYWR9LAogCXsweGEwLCAweGMwLCAweDAxOWJ9LApAQCAtMjExNiw5NiArMjEyNiw0NCBAQAogCXsweGEwLCAweDEzLCBaQzNYWF9SMUNCX1NIQVJQTkVTUzA1fSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDAyfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDk1fSwKLQl7MHhhMSwgMHgwMSwgMHgwMDk2fSwKLQotCXsweGExLCAweDAxLCAweDAwMDh9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KLQl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KLQotCXsweGEwLCAweDYwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweGYwLCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGYwLCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTEyX1JHQjIyfSwKLQl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCi0JezB4YWEsIDB4MjUsIDB4MDAwN30sCi0JezB4YWEsIDB4MjYsIDB4MDA1M30sCi0JezB4YWEsIDB4MjcsIDB4MDAwMH0sCi0KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDJmICovCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDliICovCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDgwICovCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHhkNCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4YzAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCi0JezB4YTAsIDB4MTMsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFkfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFlfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDFmfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDIwfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTEsIDB4MDEsIDB4MDE4MH0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXt9CiB9OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxcl9Jbml0aWFsW10gPSB7CiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCi0KLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCS8qIGRpZmYgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwMl9DTE9DS1NFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKIAl7MHhhMCwgMHg3NywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCiAJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCiAJezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCiAJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDFlMCAqLworCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKIAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5Ql9XSU5IRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhlOCwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAorCXsweGEwLCAweGU2LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCiAJezB4YTAsIDB4MDIsIFpDM1hYX1IwOURfV0lOV0lEVEhISUdIfSwKLQl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisJezB4YTAsIDB4ODYsIFpDM1hYX1IwOUVfV0lOV0lEVEhMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKKwl7MHhhMCwgMHgwNywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKKwl7MHhkZCwgMHgwMCwgMHgwMjAwfSwKIAl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKIAl7MHhhYSwgMHgwMSwgMHgwMDBjfSwKIAl7MHhhYSwgMHgxMSwgMHgwMDAwfSwKIAl7MHhhYSwgMHgxMywgMHgwMDAwfSwKIAl7MHhhYSwgMHgxNCwgMHgwMDAxfSwKLQl7MHhhYSwgMHgxNSwgMHgwMGU4fSwKKwl7MHhhYSwgMHgxNSwgMHgwMGU2fSwKIAl7MHhhYSwgMHgxNiwgMHgwMDAyfSwKLQl7MHhhYSwgMHgxNywgMHgwMDg4fSwKLQotCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAkvKiAwMCAqLwotCisJezB4YWEsIDB4MTcsIDB4MDA4Nn0sCisJezB4YWEsIDB4MzAsIDB4MDAwYn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCiAJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCi0JezB4YTAsIDB4ODksIFpDM1hYX1IxOERfWVRBUkdFVH0sCisJezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAogCXsweGEwLCAweDAwLCAweDAxYWR9LAogCXsweGEwLCAweGMwLCAweDAxOWJ9LApAQCAtMjIxNSw1OCArMjE3MywxMTQgQEAKIAl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAogCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCi0JezB4YTEsIDB4MDEsIDB4MDAwMn0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JCQkJCQkvKiByZWFkIHRoZSBpMmMgY2hpcHMgaWRlbnQgKi8KLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDkxfSwKLQl7MHhhMSwgMHgwMSwgMHgwMDk1fSwKLQl7MHhhMSwgMHgwMSwgMHgwMDk2fSwKLQotCXsweGExLCAweDAxLCAweDAwMDh9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KLQl7MHhhMSwgMHgwMSwgMHgwMWM4fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWM5fSwKLQl7MHhhMSwgMHgwMSwgMHgwMWNhfSwKLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KLQotCXsweGEwLCAweDYwLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweGYwLCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGYwLCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhmMCwgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4ZjAsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTEyX1JHQjIyfSwKLQl7MHhhMSwgMHgwMSwgMHgwMTgwfSwKLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxcl81MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCi0JezB4YWEsIDB4MjUsIDB4MDAwN30sCi0JezB4YWEsIDB4MjYsIDB4MDA1M30sCi0JezB4YWEsIDB4MjcsIDB4MDAwMH0sCi0KLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCS8qIDJmICovCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCS8qIDliICovCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCS8qIDgwICovCi0KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4NjgsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4YTAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHhlYSwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHg2NiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfNTBIWlNjYWxlW10gPSB7CisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweGQxLCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDQwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCiAJezB4YTAsIDB4ZDQsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAogCXsweGEwLCAweGMwLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKLQotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCiAJezB4YTAsIDB4MjAsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAogCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCi0JezB4YTEsIDB4MDEsIDB4MDAxZH0sCi0JezB4YTEsIDB4MDEsIDB4MDAxZX0sCi0JezB4YTEsIDB4MDEsIDB4MDAxZn0sCi0JezB4YTEsIDB4MDEsIDB4MDAyMH0sCi0JezB4YTAsIDB4NDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGExLCAweDAxLCAweDAxODB9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHg2NiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfNjBIWltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGEwLCAweDA2LCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHgxYSwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweGMzLCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHg1MCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MTgsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDIwLCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDEwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDY2LCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwMjBfSFNZTkNfM30sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gaHY3MTMxcl82MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhMCwgMHgwYywgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MzUsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDEsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4YTAsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgxMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHg2NiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhMCwgMHgyZiwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4ZjgsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDBjLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxOCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGQwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGh2NzEzMXJfTm9GbGlrZXJTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAorCXsweGEwLCAweDJmLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKKwl7MHhhMCwgMHhmOCwgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5NV9BTlRJRkxJQ0tFUkhJR0h9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTk2X0FOVElGTElDS0VSTUlEfSwKKwl7MHhhMCwgMHhiMCwgWkMzWFhfUjE5N19BTlRJRkxJQ0tFUkxPV30sCisJezB4YTAsIDB4MGMsIFpDM1hYX1IxOENfQUVGUkVFWkV9LAorCXsweGEwLCAweDE4LCBaQzNYWF9SMThGX0FFVU5GUkVFWkV9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUE5X0RJR0lUQUxMSU1JVERJRkZ9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMUFBX0RJR0lUQUxHQUlOU1RFUH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMURfSFNZTkNfMH0sCisJezB4YTAsIDB4ZDAsIFpDM1hYX1IwMUVfSFNZTkNfMX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMUZfSFNZTkNfMn0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IwMjBfSFNZTkNfM30sCiAJe30KIH07CiAKQEAgLTMzNTAsNyArMzM2NCw3IEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LCAvKiAwMSw5NiwwMCxjYyAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwgLyogMDEsOTcsMDEsY2MgKi8KIC8qCXsweGEwLCAweDQ0LCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJICogMDAsMDIsNDQsY2MKLQkJCQkJCSAtIGlmIG1vZGUxICgzMjB4MjQwKSAqLworCQkJCQkJICogaWYgbW9kZTEgKDMyMHgyNDApICovCiAvKiA/PyB3YXMKIAl7MHhhMCwgMHgwMCwgMHgwMDM5fSwgICogMDAsMDAsMDAsZGQgKgogCXsweGExLCAweDAxLCAweDAwMzd9LAkJKi8KQEAgLTM0MzksNyArMzQ1Myw2IEBACiAJezB4YTAsIDB4ZjgsIFpDM1hYX1IxMTBfUkdCMjB9LAogCXsweGEwLCAweGY4LCBaQzNYWF9SMTExX1JHQjIxfSwKIAl7MHhhMCwgMHg1MCwgWkMzWFhfUjExMl9SR0IyMn0sCi0vKiAweDAzLCAqLwogCXsweGExLCAweDAxLCAweDAwMDh9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KQEAgLTM3MTksNyArMzczMiw3IEBACiAJezB4YWEsIDB4MGUsIDB4MDAwMn0sCiAJezB4YWEsIDB4MTQsIDB4MDA4MX0sCiAKLS8qIE90aGVyIHJlZ2lzdG9ycyAqLworLyogT3RoZXIgcmVnaXN0ZXJzICovCiAJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCiAvKiBGcmFtZSByZXRyZWl2aW5nICovCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCkBAIC0zNzMwLDcgKzM3NDMsNyBAQAogLyogU2hhcnBuZXNzICovCiAJezB4YTAsIDB4MDMsIFpDM1hYX1IxQzVfU0hBUlBORVNTTU9ERX0sCiAJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAotLyogT3RoZXIgcmVnaXN0b3JzICovCisvKiBPdGhlciByZWdpc3RlcnMgKi8KIAl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKIC8qIEF1dG8gZXhwb3N1cmUgYW5kIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LApAQCAtMzgzNyw3ICszODUwLDcgQEAKIAl7MHhhYSwgMHgwZSwgMHgwMDAyfSwKIAl7MHhhYSwgMHgxNCwgMHgwMDgxfSwKIAotLyogT3RoZXIgcmVnaXN0b3JzICovCisvKiBPdGhlciByZWdpc3RlcnMgKi8KIAl7MHhhMCwgMHgzNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKIC8qIEZyYW1lIHJldHJlaXZpbmcgKi8KIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKQEAgLTM4NDgsNyArMzg2MSw3IEBACiAvKiBTaGFycG5lc3MgKi8KIAl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKIAl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCi0vKiBPdGhlciByZWdpc3RvcnMgKi8KKy8qIE90aGVyIHJlZ2lzdGVycyAqLwogCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAogLyogQXV0byBleHBvc3VyZSBhbmQgd2hpdGUgYmFsYW5jZSAqLwogCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCkBAIC00MjQxLDggKzQyNTQsOCBAQAogCXt9CiB9OwogCi0vKiBtaTAzNjBzb2MgYW5kIHBiMDMzMCBmcm9tIHZtMzB4LmluZiBmb3IgMGFjODozMDFiIGFuZCAwYWM4OjMwM2IgMDcvMDIvMTMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtaTAzNjBzb2NfSW5pdGlhbFtdID0gewkvKiA2NDB4NDgwICovCisvKiBtdDl2MTExIChtaTAzNjBzb2MpIGFuZCBwYjAzMzAgZnJvbSB2bTMweC5pbmYgMGFjODozMDFiIDA3LzAyLzEzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8xX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC00MjUzLDE0ICs0MjY2LDE0IEBACiAJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAogCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qamZtOiB3YXMgMDMqLwotLyoJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKIAl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKIAl7MHhkZCwgMHgwMCwgMHgwMjAwfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKIAl7MHhhYSwgMHgwMSwgMHgwMDAxfSwKIAl7MHhhYSwgMHgwNiwgMHgwMDAwfSwKIAl7MHhhYSwgMHgwOCwgMHgwNDgzfSwKQEAgLTQyNzAsMTggKzQyODMsMTggQEAKIAl7MHhhYSwgMHgwMywgMHgwMWU1fSwJCQkvKmpmbTogd2FzIDAxZTcqLwogCXsweGFhLCAweDA0LCAweDAyODV9LAkJCS8qamZtOiB3YXMgMDI4NyovCiAJezB4YWEsIDB4MDcsIDB4MzAwMn0sCi0JezB4YWEsIDB4MjAsIDB4NTEwMH0sCQkJLypqZm06IHdhcyAxMTAwKi8KLQl7MHhhYSwgMHgzNSwgMHg1MDdmfSwJCQkvKmpmbTogd2FzIDAwNTAqLworCXsweGFhLCAweDIwLCAweDUxMDB9LAorCXsweGFhLCAweDM1LCAweDUwN2Z9LAogCXsweGFhLCAweDMwLCAweDAwMDV9LAogCXsweGFhLCAweDMxLCAweDAwMDB9LAogCXsweGFhLCAweDU4LCAweDAwNzh9LAogCXsweGFhLCAweDYyLCAweDA0MTF9LAotCXsweGFhLCAweDJiLCAweDAwMjh9LAorCXsweGFhLCAweDJiLCAweDAwN2Z9LAogCXsweGFhLCAweDJjLCAweDAwN2Z9LAkJCS8qamZtOiB3YXMgMDAzMCovCiAJezB4YWEsIDB4MmQsIDB4MDA3Zn0sCQkJLypqZm06IHdhcyAwMDMwKi8KIAl7MHhhYSwgMHgyZSwgMHgwMDdmfSwJCQkvKmpmbTogd2FzIDAwMzAqLwogCXsweGEwLCAweDEwLCBaQzNYWF9SMDg3X0VYUFRJTUVNSUR9LAotCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LCAvKmpmbTogd2FzIDM3Ki8KKwl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwKIAl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKIAl7MHhhMCwgMHgwZCwgWkMzWFhfUjEwMF9PUEVSQVRJT05NT0RFfSwKIAl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LApAQCAtNDI5MSwxMiArNDMwNCwxMiBAQAogCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAogCXsweGEwLCAweDYwLCBaQzNYWF9SMUE4X0RJR0lUQUxHQUlOfSwKLQl7MHhhMCwgMHg2YywgWkMzWFhfUjE4RF9ZVEFSR0VUfSwJLyogamZtOiB3YXMgNzggKi8KKwl7MHhhMCwgMHg2YywgWkMzWFhfUjE4RF9ZVEFSR0VUfSwKIAl7MHhhMCwgMHg2MSwgWkMzWFhfUjExNl9SR0FJTn0sCiAJezB4YTAsIDB4NjUsIFpDM1hYX1IxMThfQkdBSU59LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1pMDM2MHNvY19Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG10OXYxMTFfMV9Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCiAJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCkBAIC00MzA3LDE0ICs0MzIwLDE0IEBACiAJezB4YTAsIDB4ZTAsIFpDM1hYX1IwMDZfRlJBTUVIRUlHSFRMT1d9LAogCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAxX1NZU1RFTU9QRVJBVElOR30sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCS8qamZtOiB3YXMgMDMqLwotLyoJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sICovCisJezB4YTAsIDB4MDcsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwOThfV0lOWVNUQVJUTE9XfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxMUNfRklSU1RYTE9XfSwKIAl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKIAl7MHhkZCwgMHgwMCwgMHgwMjAwfSwKKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKIAl7MHhhYSwgMHgwMSwgMHgwMDAxfSwKIAl7MHhhYSwgMHgwNiwgMHgwMDAwfSwKIAl7MHhhYSwgMHgwOCwgMHgwNDgzfSwKQEAgLTQzMjQsNyArNDMzNyw3IEBACiAJezB4YWEsIDB4MDMsIDB4MDFlN30sCiAJezB4YWEsIDB4MDQsIDB4MDI4N30sCiAJezB4YWEsIDB4MDcsIDB4MzAwMn0sCi0JezB4YWEsIDB4MjAsIDB4NTEwMH0sCQkJLypqZm06IHdhcyAxMTAwKi8KKwl7MHhhYSwgMHgyMCwgMHg1MTAwfSwKIAl7MHhhYSwgMHgzNSwgMHgwMDdmfSwJCQkvKmpmbTogd2FzIDAwNTAqLwogCXsweGFhLCAweDMwLCAweDAwMDV9LAogCXsweGFhLCAweDMxLCAweDAwMDB9LApAQCAtNDMzNSw3ICs0MzQ4LDcgQEAKIAl7MHhhYSwgMHgyZCwgMHgwMDdmfSwJCQkvKmpmbTogd2FzIDMwKi8KIAl7MHhhYSwgMHgyZSwgMHgwMDdmfSwJCQkvKmpmbTogd2FzIDI4Ki8KIAl7MHhhMCwgMHgxMCwgWkMzWFhfUjA4N19FWFBUSU1FTUlEfSwKLQl7MHhhMCwgMHhiNywgWkMzWFhfUjEwMV9TRU5TT1JDT1JSRUNUSU9OfSwJLypqZm06IHdhcyAzNyovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCiAJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCiAJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCiAJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKQEAgLTQzNDUsMTIgKzQzNTgsMTIgQEAKIAl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCiAJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwKIAl7MHhhMCwgMHg2MCwgWkMzWFhfUjFBOF9ESUdJVEFMR0FJTn0sCi0JezB4YTAsIDB4NmMsIFpDM1hYX1IxOERfWVRBUkdFVH0sCS8qamZtOiB3YXMgNzgqLworCXsweGEwLCAweDZjLCBaQzNYWF9SMThEX1lUQVJHRVR9LAogCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKIAl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWkzNjBzb2NfQUU1MEhaW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8xX0FFNTBIWltdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhiYiwgMHgwMCwgMHgwNTYyfSwKQEAgLTQzNzMsNyArNDM4Niw3IEBACiAJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1pMzYwc29jX0FFNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8xX0FFNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGJiLCAweDAwLCAweDA1MDl9LApAQCAtNDM5NSwxMSArNDQwOCwxMSBAQAogCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtaTM2MHNvY19BRTYwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtdDl2MTExXzFfQUU2MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAotCXsweGJiLCAweDAwLCAweDA1M2R9LAotCXsweGJiLCAweDAxLCAweDA5NmV9LAorCXsweGFhLCAweDA1LCAweDAwM2R9LAorCXsweGFhLCAweDA5LCAweDAxNmV9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTkwX0VYUE9TVVJFTElNSVRISUdIfSwKIAl7MHhhMCwgMHgwNywgWkMzWFhfUjE5MV9FWFBPU1VSRUxJTUlUTUlEfSwKIAl7MHhhMCwgMHhkZCwgWkMzWFhfUjE5Ml9FWFBPU1VSRUxJTUlUTE9XfSwKQEAgLTQ0MTgsNyArNDQzMSw3IEBACiAJezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG1pMzYwc29jX0FFNjBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8xX0FFNjBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGJiLCAweDAwLCAweDA1MDl9LApAQCAtNDQ0MCw3ICs0NDUzLDcgQEAKIAl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWkzNjBzb2NfQUVOb0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIG10OXYxMTFfMV9BRU5vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAogCXsweGJiLCAweDAwLCAweDA1MDl9LApAQCAtNDQ2Myw3ICs0NDc2LDcgQEAKIAl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbWkzNjBzb2NfQUVOb0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8xX0FFTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKIAl7MHhiYiwgMHgwMCwgMHgwNTM0fSwKQEAgLTQ0ODYsNiArNDQ5OSwyNTEgQEAKIAl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCiAJe30KIH07CisvKiBmcm9tIHVzYnZtMzAzLmluZiAwYWM4OjMwM2IgMDcvMDMvMjUgKDMgLSB0YXM1MTMwYykgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtdDl2MTExXzNfSW5pdGlhbFtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4ZGQsIDB4MDAsIDB4MDIwMH0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YWEsIDB4MDEsIDB4MDAwMX0sCQkvKiBzZWxlY3QgSUZQL1NPQyByZWdpc3RlcnMgKi8KKwl7MHhhYSwgMHgwNiwgMHgwMDAwfSwJCS8qIG9wZXJhdGluZyBtb2RlIGNvbnRyb2wgKi8KKwl7MHhhYSwgMHgwOCwgMHgwNDgzfSwJCS8qIG91dHB1dCBmb3JtYXQgY29udHJvbCAqLworCQkJCQkvKiBIIHJlZCBmaXJzdCwgViByZWQgb3IgYmx1ZSBmaXJzdCwKKwkJCQkJICogcmF3IEJheWVyLCBhdXRvIGZsaWNrZXIgKi8KKwl7MHhhYSwgMHgwMSwgMHgwMDA0fSwJCS8qIHNlbGVjdCBzZW5zb3IgY29yZSByZWdpc3RlcnMgKi8KKwl7MHhhYSwgMHgwOCwgMHgwMDA2fSwJCS8qIHJvdyBzdGFydCAqLworCXsweGFhLCAweDAyLCAweDAwMTF9LAkJLyogY29sdW1uIHN0YXJ0ICovCisJezB4YWEsIDB4MDMsIDB4MDFlNX0sCQkvKiB3aW5kb3cgaGVpZ2h0IC0gMSAqLworCXsweGFhLCAweDA0LCAweDAyODV9LAkJLyogd2luZG93IHdpZHRoIC0gMSAqLworCXsweGFhLCAweDA3LCAweDMwMDJ9LAkJLyogb3V0cHV0IGNvbnRyb2wgKi8KKwl7MHhhYSwgMHgyMCwgMHgxMTAwfSwJCS8qIHJlYWQgbW9kZTogYml0cyA4ICYgMTIgKD8pICovCisJezB4YWEsIDB4MzUsIDB4MDA3Zn0sCQkvKiBnbG9iYWwgZ2FpbiAqLworCXsweGFhLCAweDMwLCAweDAwMDV9LAorCXsweGFhLCAweDMxLCAweDAwMDB9LAorCXsweGFhLCAweDU4LCAweDAwNzh9LAorCXsweGFhLCAweDYyLCAweDA0MTF9LAorCXsweGFhLCAweDJiLCAweDAwN2Z9LAkJLyogZ3JlZW4xIGdhaW4gKi8KKwl7MHhhYSwgMHgyYywgMHgwMDdmfSwJCS8qIGJsdWUgZ2FpbiAqLworCXsweGFhLCAweDJkLCAweDAwN2Z9LAkJLyogcmVkIGdhaW4gKi8KKwl7MHhhYSwgMHgyZSwgMHgwMDdmfSwJCS8qIGdyZWVuMiBnYWluICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8zX0luaXRpYWxTY2FsZVtdID0geworCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAorCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKKwl7MHhhMCwgMHhkYywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCisJezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCisJezB4ZGQsIDB4MDAsIDB4MDIwMH0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YWEsIDB4MDEsIDB4MDAwMX0sCisJezB4YWEsIDB4MDYsIDB4MDAwMH0sCisJezB4YWEsIDB4MDgsIDB4MDQ4M30sCisJezB4YWEsIDB4MDEsIDB4MDAwNH0sCisJezB4YWEsIDB4MDgsIDB4MDAwNn0sCisJezB4YWEsIDB4MDIsIDB4MDAxMX0sCisJezB4YWEsIDB4MDMsIDB4MDFlN30sCisJezB4YWEsIDB4MDQsIDB4MDI4N30sCisJezB4YWEsIDB4MDcsIDB4MzAwMn0sCisJezB4YWEsIDB4MjAsIDB4MTEwMH0sCisJezB4YWEsIDB4MzUsIDB4MDA3Zn0sCisJezB4YWEsIDB4MzAsIDB4MDAwNX0sCisJezB4YWEsIDB4MzEsIDB4MDAwMH0sCisJezB4YWEsIDB4NTgsIDB4MDA3OH0sCisJezB4YWEsIDB4NjIsIDB4MDQxMX0sCisJezB4YWEsIDB4MmIsIDB4MDA3Zn0sCisJezB4YWEsIDB4MmMsIDB4MDA3Zn0sCisJezB4YWEsIDB4MmQsIDB4MDA3Zn0sCisJezB4YWEsIDB4MmUsIDB4MDA3Zn0sCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCisJezB4YTAsIDB4MzcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCisJezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCisJezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKKwl7MHhhMCwgMHgwMCwgMHgwMWFkfSwKKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCisJezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAorCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCisJezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAorCXsweGEwLCAweDgwLCBaQzNYWF9SMThEX1lUQVJHRVR9LAorCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKKwl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8zX0FFNTBIWltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDA5fSwJCS8qIGhvcml6b250YWwgYmxhbmtpbmcgKi8KKwl7MHhhYSwgMHgwOSwgMHgwMWNlfSwJCS8qIHNodXR0ZXIgd2lkdGggKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4ZDIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4OWEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweGQ3LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtdDl2MTExXzNfQUU1MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MDUsIDB4MDAwOX0sCisJezB4YWEsIDB4MDksIDB4MDFjZX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweGQyLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDlhLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhkNywgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmOSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8zX0FFNjBIWltdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDA5fSwKKwl7MHhhYSwgMHgwOSwgMHgwMDgzfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4OGYsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4ODEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgyNCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweGQ3LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweGY0LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweGY5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBtdDl2MTExXzNfQUU2MEhaU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MDUsIDB4MDAwOX0sCisJezB4YWEsIDB4MDksIDB4MDA4M30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweDhmLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDgxLCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MTQsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MjQsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHhkNywgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHhmNCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHhmOSwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhmZiwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8zX0FFTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCisJezB4YWEsIDB4MDUsIDB4MDAzNH0sCisJezB4YWEsIDB4MDksIDB4MDI2MH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTBfRVhQT1NVUkVMSU1JVEhJR0h9LAorCXsweGEwLCAweDA3LCBaQzNYWF9SMTkxX0VYUE9TVVJFTElNSVRNSUR9LAorCXsweGEwLCAweGYwLCBaQzNYWF9SMTkyX0VYUE9TVVJFTElNSVRMT1d9LAorCXsweGEwLCAweDAwLCBaQzNYWF9SMTk1X0FOVElGTElDS0VSSElHSH0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTZfQU5USUZMSUNLRVJNSUR9LAorCXsweGEwLCAweDA0LCBaQzNYWF9SMTk3X0FOVElGTElDS0VSTE9XfSwKKwl7MHhhMCwgMHgwZSwgWkMzWFhfUjE4Q19BRUZSRUVaRX0sCisJezB4YTAsIDB4MWMsIFpDM1hYX1IxOEZfQUVVTkZSRUVaRX0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTlfRElHSVRBTExJTUlURElGRn0sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxQUFfRElHSVRBTEdBSU5TVEVQfSwKKwl7MHhhMCwgMHgzNCwgWkMzWFhfUjAxRF9IU1lOQ18wfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjAxRV9IU1lOQ18xfSwKKwl7MHhhMCwgMHg5MCwgWkMzWFhfUjAxRl9IU1lOQ18yfSwKKwl7MHhhMCwgMHhlMCwgWkMzWFhfUjAyMF9IU1lOQ18zfSwKKwl7MHhhMCwgMHg2MCwgWkMzWFhfUjExRF9HTE9CQUxHQUlOfSwKKwl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gbXQ5djExMV8zX0FFTm9GbGlrZXJTY2FsZVtdID0geworCXsweGEwLCAweDAwLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwKKwl7MHhhYSwgMHgwNSwgMHgwMDM0fSwKKwl7MHhhYSwgMHgwOSwgMHgwMjYwfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCisJezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCisJezB4YTAsIDB4ZjAsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCisJezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCisJezB4YTAsIDB4MDQsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAorCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKKwl7MHhhMCwgMHgxYywgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAorCXsweGEwLCAweDM0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAorCXsweGEwLCAweDkwLCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAorCXsweGEwLCAweGUwLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAorCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAorCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKKwl7fQorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHBiMDMzMF9Jbml0aWFsW10gPSB7CS8qIDY0MHg0ODAgKi8KIAl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKQEAgLTQ5MjgsNDE5ICs1MTg2LDcgQEAKIAl7fQogfTsKIAotLyogVEVTVCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjS19Jbml0aWFsU2NhbGVbXSA9IHsKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKLQl7MHhhMCwgMHgwMSwgMHgwMDNifSwKLQl7MHhhMCwgMHgwZSwgMHgwMDNhfSwKLQl7MHhhMCwgMHgwMSwgMHgwMDM4fSwKLQl7MHhhMCwgMHgwYiwgMHgwMDM5fSwKLQl7MHhhMCwgMHgwMCwgMHgwMDM4fSwKLQl7MHhhMCwgMHgwYiwgMHgwMDM5fSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCi0JezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCi0JezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAotCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg4MywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweEU3LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4ODcsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MzAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHg1MSwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MzUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4N0YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgzMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDMxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4NzgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHg2MiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDJCLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDdmLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MmMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4N2YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyRCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg3ZiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDJlLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDdmLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCi0JezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKLQl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKLQl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAotCXsweGEwLCAweDZjLCBaQzNYWF9SMThEX1lUQVJHRVR9LAotCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDksIDB4MDFhZH0sCi0JezB4YTAsIDB4MTUsIDB4MDFhZX0sCi0JezB4YTAsIDB4NGMsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmMSwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGZlLCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1MSwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGVjLCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTEsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCi0JezB4YTAsIDB4MzgsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hID4gNSAqLwotCXsweGEwLCAweDUxLCBaQzNYWF9SMTIxX0dBTU1BMDF9LAotCXsweGEwLCAweDZlLCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAotCXsweGEwLCAweDhjLCBaQzNYWF9SMTIzX0dBTU1BMDN9LAotCXsweGEwLCAweGEyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAotCXsweGEwLCAweGI2LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAotCXsweGEwLCAweGM4LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAotCXsweGEwLCAweGQ2LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAotCXsweGEwLCAweGUyLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAotCXsweGEwLCAweGVkLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAotCXsweGEwLCAweGY1LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAotCXsweGEwLCAweGZjLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJEX0dBTU1BMER9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMTMwX0dBTU1BMTB9LAotCXsweGEwLCAweDFiLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAotCXsweGEwLCAweDFkLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAotCXsweGEwLCAweDFhLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAotCXsweGEwLCAweDE1LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAotCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAotCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAotCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNDX0dBTU1BMUN9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNEX0dBTU1BMUR9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmZSwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NTEsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGYxLCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhlYywgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDUxLCBaQzNYWF9SMTEyX1JHQjIyfSwKLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MzQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCi0JezB4YTAsIDB4ZDIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4OWEsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgxYywgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKLQl7MHhhMCwgMHg2NiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAotCXsweGEwLCAweGQ3LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMDFFX0hTWU5DXzF9LAotCXsweGEwLCAweGY5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKLQl7MHhhMCwgMHgxNSwgMHgwMWFlfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXt9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNLX0luaXRpYWxbXSA9IHsKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKLQl7MHhhMCwgMHgwMSwgMHgwMDNifSwKLQl7MHhhMCwgMHgwZSwgMHgwMDNhfSwKLQl7MHhhMCwgMHgwMSwgMHgwMDM4fSwKLQl7MHhhMCwgMHgwYiwgMHgwMDM5fSwKLQl7MHhhMCwgMHgwMCwgMHgwMDM4fSwKLQl7MHhhMCwgMHgwYiwgMHgwMDM5fSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjAwM19GUkFNRVdJRFRISElHSH0sCi0JezB4YTAsIDB4ODAsIFpDM1hYX1IwMDRfRlJBTUVXSURUSExPV30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwKLQl7MHhhMCwgMHhlMCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCi0JezB4YTAsIDB4ZGMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxMUFfRklSU1RZTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAotCXsweGEwLCAweGRjLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg4MywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweGU1LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4ODUsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MzAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHg1MSwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MzUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4N0YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDUwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgzMCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwNSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDMxLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4NzgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHg2MiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxMSwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDJCLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDdmLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MkMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4N0YsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyRCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHg3ZiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDJlLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDdmLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCi0JezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKLQl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKLQl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxQThfRElHSVRBTEdBSU59LAotCXsweGEwLCAweDZjLCBaQzNYWF9SMThEX1lUQVJHRVR9LAotCXsweGEwLCAweDYxLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg2NSwgWkMzWFhfUjExOF9CR0FJTn0sCi0JezB4YTAsIDB4MDksIDB4MDFhZH0sCi0JezB4YTAsIDB4MTUsIDB4MDFhZX0sCi0JezB4YTAsIDB4NGMsIFpDM1hYX1IxMEFfUkdCMDB9LAkvKiBtYXRyaXggKi8KLQl7MHhhMCwgMHhmMSwgWkMzWFhfUjEwQl9SR0IwMX0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxMENfUkdCMDJ9LAotCXsweGEwLCAweGZlLCBaQzNYWF9SMTBEX1JHQjEwfSwKLQl7MHhhMCwgMHg1MSwgWkMzWFhfUjEwRV9SR0IxMX0sCi0JezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEZfUkdCMTJ9LAotCXsweGEwLCAweGVjLCBaQzNYWF9SMTEwX1JHQjIwfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjExMV9SR0IyMX0sCi0JezB4YTAsIDB4NTEsIFpDM1hYX1IxMTJfUkdCMjJ9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IxQzZfU0hBUlBORVNTMDB9LAkvKiBzaGFycG5lc3MrICovCi0JezB4YTAsIDB4MGYsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkvKiBzaGFycG5lc3MtICovCi0JezB4YTAsIDB4MzgsIFpDM1hYX1IxMjBfR0FNTUEwMH0sCS8qIGdhbW1hID4gNSAqLwotCXsweGEwLCAweDUxLCBaQzNYWF9SMTIxX0dBTU1BMDF9LAotCXsweGEwLCAweDZlLCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAotCXsweGEwLCAweDhjLCBaQzNYWF9SMTIzX0dBTU1BMDN9LAotCXsweGEwLCAweGEyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAotCXsweGEwLCAweGI2LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAotCXsweGEwLCAweGM4LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAotCXsweGEwLCAweGQ2LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAotCXsweGEwLCAweGUyLCBaQzNYWF9SMTI4X0dBTU1BMDh9LAotCXsweGEwLCAweGVkLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAotCXsweGEwLCAweGY1LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAotCXsweGEwLCAweGZjLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJDX0dBTU1BMEN9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJEX0dBTU1BMER9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMTMwX0dBTU1BMTB9LAotCXsweGEwLCAweDFiLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAotCXsweGEwLCAweDFkLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAotCXsweGEwLCAweDFhLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAotCXsweGEwLCAweDE1LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAotCXsweGEwLCAweDEyLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAotCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAotCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAotCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNDX0dBTU1BMUN9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNEX0dBTU1BMUR9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAotCXsweGEwLCAweDRjLCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZjEsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmZSwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NTEsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGYxLCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhlYywgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDUxLCBaQzNYWF9SMTEyX1JHQjIyfSwKLQl7MHhhMCwgMHgxMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDYyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDksIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4YWEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCi0JezB4YTAsIDB4OWIsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4NDcsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDBlLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgxYywgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHgxNCwgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKLQl7MHhhMCwgMHg2NiwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAotCXsweGEwLCAweDYyLCBaQzNYWF9SMDFEX0hTWU5DXzB9LAotCXsweGEwLCAweDkwLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAotCXsweGEwLCAweGM4LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHgwOSwgMHgwMWFkfSwKLQl7MHhhMCwgMHgxNSwgMHgwMWFlfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDMwLCAweDAwMDd9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCi0JezB4YTAsIDB4MDAsIDB4MDAwN30sCi0JezB4YTAsIDB4MDMsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwKLQl7fQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlW10gPSB7CS8qIDMyMHgyNDAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY19Jbml0aWFsU2NhbGVbXSA9IHsJLyogMzIweDI0MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDUwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtNTM3Nyw3ICs1MjIzLDcgQEAKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBNl9FWFBPU1VSRUJMQUNLTFZMfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4X0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX0luaXRpYWxbXSA9IHsJLyogNjQweDQ4MCAqLwogCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDQwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LApAQCAtNTQxMyw3ICs1MjU5LDcgQEAKIAl7MHhhMCwgMHgwMiwgWkMzWFhfUjBBNl9FWFBPU1VSRUJMQUNLTFZMfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY3h4XzUwSFpbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY181MEhaW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4YTMsIDB4MDAwMX0sIC8qIDAwLGEzLDAxLGFhICovCiAJezB4YWEsIDB4YTQsIDB4MDA2M30sIC8qIDAwLGE0LDYzLGFhICovCkBAIC01NDM4LDcgKzUyODQsNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfNTBIWlNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfNTBIWlNjYWxlW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4YTMsIDB4MDAwMX0sIC8qIDAwLGEzLDAxLGFhICovCiAJezB4YWEsIDB4YTQsIDB4MDA3N30sIC8qIDAwLGE0LDc3LGFhICovCkBAIC01NDYzLDcgKzUzMDksNyBAQAogCXsweGEwLCAweDUwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAogCXt9CiB9Owotc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjeHhfNjBIWltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjXzYwSFpbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHhhMywgMHgwMDAxfSwgLyogMDAsYTMsMDEsYWEgKi8KIAl7MHhhYSwgMHhhNCwgMHgwMDM2fSwgLyogMDAsYTQsMzYsYWEgKi8KQEAgLTU0ODgsNyArNTMzNCw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF82MEhaU2NhbGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiB0YXM1MTMwY182MEhaU2NhbGVbXSA9IHsKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjAxOV9BVVRPQURKVVNURlBTfSwgLyogMDAsMTksMDAsY2MgKi8KIAl7MHhhYSwgMHhhMywgMHgwMDAxfSwgLyogMDAsYTMsMDEsYWEgKi8KIAl7MHhhYSwgMHhhNCwgMHgwMDc3fSwgLyogMDAsYTQsNzcsYWEgKi8KQEAgLTU1MTMsNyArNTM1OSw3IEBACiAJezB4YTAsIDB4NTAsIFpDM1hYX1IxMURfR0xPQkFMR0FJTn0sCiAJe30KIH07Ci1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF9Ob0ZsaWtlcltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIHRhczUxMzBjX05vRmxpa2VyW10gPSB7CiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sIC8qIDAwLDE5LDAwLGNjICovCiAJezB4YWEsIDB4YTMsIDB4MDAwMX0sIC8qIDAwLGEzLDAxLGFhICovCiAJezB4YWEsIDB4YTQsIDB4MDA0MH0sIC8qIDAwLGE0LDQwLGFhICovCkBAIC01NTM5LDcgKzUzODUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gdGFzNTEzMGNfTm9GbGlrZXJTY2FsZVtdID0gewogCXsweGEwLCAweDAwLCBaQzNYWF9SMDE5X0FVVE9BREpVU1RGUFN9LCAvKiAwMCwxOSwwMCxjYyAqLwogCXsweGFhLCAweGEzLCAweDAwMDF9LCAvKiAwMCxhMywwMSxhYSAqLwogCXsweGFhLCAweGE0LCAweDAwOTB9LCAvKiAwMCxhNCw5MCxhYSAqLwpAQCAtNTg0MCwxMyArNTY4NiwyMiBAQAogc3RhdGljIHU4IHJlZ19yX2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQl1MTYgaW5kZXgpCiB7Ci0JdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKIAkJCTB4YTEsCiAJCQlVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKIAkJCTB4MDEsCQkJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCiAJCQk1MDApOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgInJlZ19yX2kgZXJyICVkIiwgcmV0KTsKKwkJZ3NwY2FfZGV2LT51c2JfZXJyID0gcmV0OworCQlyZXR1cm4gMDsKKwl9CiAJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIApAQCAtNTg2MCwyNCArNTcxNSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKK3N0YXRpYyB2b2lkIHJlZ193X2koc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJdTggdmFsdWUsCiAJCQl1MTYgaW5kZXgpCiB7Ci0JdXNiX2NvbnRyb2xfbXNnKGRldiwKLQkJCXVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCWludCByZXQ7CisKKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCiAJCQkweGEwLAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJdmFsdWUsIGluZGV4LCBOVUxMLCAwLAogCQkJNTAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJyZWdfd19pIGVyciAlZCIsIHJldCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IHJldDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCitzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCiAJCQl1OCB2YWx1ZSwKIAkJCXUxNiBpbmRleCkKIHsKIAlQREVCVUcoRF9VU0JPLCAicmVnIHcgWyUwNHhdID0gJTAyeCIsIGluZGV4LCB2YWx1ZSk7Ci0JcmVnX3dfaShkZXYsIHZhbHVlLCBpbmRleCk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHZhbHVlLCBpbmRleCk7CiB9CiAKIHN0YXRpYyB1MTYgaTJjX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LApAQCAtNTg4Niw4ICs1NzQ5LDEwIEBACiAJdTggcmV0Ynl0ZTsKIAl1MTYgcmV0dmFsOwogCi0JcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDAwOTIpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDIsIDB4MDA5MCk7CQkvKiA8LSByZWFkIGNvbW1hbmQgKi8KKwlpZiAoZ3NwY2FfZGV2LT51c2JfZXJyIDwgMCkKKwkJcmV0dXJuIDA7CisJcmVnX3dfaShnc3BjYV9kZXYsIHJlZywgMHgwMDkyKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgMHgwMiwgMHgwMDkwKTsJCS8qIDwtIHJlYWQgY29tbWFuZCAqLwogCW1zbGVlcCgyMCk7CiAJcmV0Ynl0ZSA9IHJlZ19yX2koZ3NwY2FfZGV2LCAweDAwOTEpOwkJLyogcmVhZCBzdGF0dXMgKi8KIAlpZiAocmV0Ynl0ZSAhPSAweDAwKQpAQCAtNTkwNiwxMCArNTc3MSwxMiBAQAogewogCXU4IHJldGJ5dGU7CiAKLQlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCByZWcsIDB4OTIpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHZhbEwsIDB4OTMpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHZhbEgsIDB4OTQpOwotCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIDB4MDEsIDB4OTApOwkJLyogPC0gd3JpdGUgY29tbWFuZCAqLworCWlmIChnc3BjYV9kZXYtPnVzYl9lcnIgPCAwKQorCQlyZXR1cm4gMDsKKwlyZWdfd19pKGdzcGNhX2RldiwgcmVnLCAweDkyKTsKKwlyZWdfd19pKGdzcGNhX2RldiwgdmFsTCwgMHg5Myk7CisJcmVnX3dfaShnc3BjYV9kZXYsIHZhbEgsIDB4OTQpOworCXJlZ193X2koZ3NwY2FfZGV2LCAweDAxLCAweDkwKTsJCS8qIDwtIHdyaXRlIGNvbW1hbmQgKi8KIAltc2xlZXAoMSk7CiAJcmV0Ynl0ZSA9IHJlZ19yX2koZ3NwY2FfZGV2LCAweDAwOTEpOwkJLyogcmVhZCBzdGF0dXMgKi8KIAlpZiAocmV0Ynl0ZSAhPSAweDAwKQpAQCAtNTkyNSw3ICs1NzkyLDcgQEAKIAl3aGlsZSAoYWN0aW9uLT5yZXEpIHsKIAkJc3dpdGNoIChhY3Rpb24tPnJlcSkgewogCQljYXNlIDB4YTA6CS8qIHdyaXRlIHJlZ2lzdGVyICovCi0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgYWN0aW9uLT52YWwsIGFjdGlvbi0+aWR4KTsKKwkJCXJlZ193KGdzcGNhX2RldiwgYWN0aW9uLT52YWwsIGFjdGlvbi0+aWR4KTsKIAkJCWJyZWFrOwogCQljYXNlIDB4YTE6CS8qIHJlYWQgc3RhdHVzICovCiAJCQlyZWdfcihnc3BjYV9kZXYsIGFjdGlvbi0+aWR4KTsKQEAgLTU5NzQsMzggKzU4NDEsMzcgQEAKIAlzdGF0aWMgY29uc3QgdTggdmYwMjUwX21hdHJpeFs5XSA9CiAJCXsweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdifTsKIAlzdGF0aWMgY29uc3QgdTggKm1hdHJpeF90YltTRU5TT1JfTUFYXSA9IHsKLQkJYWRjbTI3MDBfbWF0cml4LCAvKiBTRU5TT1JfQURDTTI3MDAgMCAqLwotCQlvdjc2MjBfbWF0cml4LAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KLQkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX0dDMDMwNSAzICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX01JMDM2MFNPQyA5ICovCi0JCW92NzYyMF9tYXRyaXgsCS8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9PVjc2MzBDIDExICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfUEFTMTA2IDEyICovCi0JCXBhczIwMmJfbWF0cml4LAkvKiBTRU5TT1JfUEFTMjAyQiAxMyAqLwotCQlnYzAzMDVfbWF0cml4LAkvKiBTRU5TT1JfUEIwMzMwIDE0ICovCi0JCXBvMjAzMF9tYXRyaXgsCS8qIFNFTlNPUl9QTzIwMzAgMTUgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KLQkJdGFzNTEzMGNfbWF0cml4LCAvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQl2ZjAyNTBfbWF0cml4LAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCisJCVtTRU5TT1JfQURDTTI3MDBdID0JYWRjbTI3MDBfbWF0cml4LAorCQlbU0VOU09SX0NTMjEwMl0gPQlvdjc2MjBfbWF0cml4LAorCQlbU0VOU09SX0NTMjEwMktdID0JTlVMTCwKKwkJW1NFTlNPUl9HQzAzMDVdID0JZ2MwMzA1X21hdHJpeCwKKwkJW1NFTlNPUl9IRENTMjAyMGJdID0JTlVMTCwKKwkJW1NFTlNPUl9IVjcxMzFCXSA9CU5VTEwsCisJCVtTRU5TT1JfSFY3MTMxUl0gPQlOVUxMLAorCQlbU0VOU09SX0lDTTEwNUFdID0JcG8yMDMwX21hdHJpeCwKKwkJW1NFTlNPUl9NQzUwMUNCXSA9CU5VTEwsCisJCVtTRU5TT1JfTVQ5VjExMV8xXSA9CWdjMDMwNV9tYXRyaXgsCisJCVtTRU5TT1JfTVQ5VjExMV8zXSA9CWdjMDMwNV9tYXRyaXgsCisJCVtTRU5TT1JfT1Y3NjIwXSA9CW92NzYyMF9tYXRyaXgsCisJCVtTRU5TT1JfT1Y3NjMwQ10gPQlOVUxMLAorCQlbU0VOU09SX1BBUzEwNl0gPQlOVUxMLAorCQlbU0VOU09SX1BBUzIwMkJdID0JcGFzMjAyYl9tYXRyaXgsCisJCVtTRU5TT1JfUEIwMzMwXSA9CWdjMDMwNV9tYXRyaXgsCisJCVtTRU5TT1JfUE8yMDMwXSA9CXBvMjAzMF9tYXRyaXgsCisJCVtTRU5TT1JfVEFTNTEzMENdID0JdGFzNTEzMGNfbWF0cml4LAorCQlbU0VOU09SX1RBUzUxMzBDX1ZGMDI1MF0gPSB2ZjAyNTBfbWF0cml4LAogCX07CiAKIAltYXRyaXggPSBtYXRyaXhfdGJbc2QtPnNlbnNvcl07CiAJaWYgKG1hdHJpeCA9PSBOVUxMKQogCQlyZXR1cm47CQkvKiBtYXRyaXggYWxyZWFkeSBsb2FkZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvdjc2MjBfbWF0cml4KTsgaSsrKQotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgbWF0cml4W2ldLCAweDAxMGEgKyBpKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCBtYXRyaXhbaV0sIDB4MDEwYSArIGkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHNoYXJwbmVzczsKIAlzdGF0aWMgY29uc3QgdTggc2hhcnBuZXNzX3RiW11bMl0gPSB7CiAJCXsweDAyLCAweDAzfSwKQEAgLTYwMTUsMTcgKzU4ODEsMTYgQEAKIAl9OwogCiAJc2hhcnBuZXNzID0gc2QtPnNoYXJwbmVzczsKLQlyZWdfdyhkZXYsIHNoYXJwbmVzc190YltzaGFycG5lc3NdWzBdLCAweDAxYzYpOworCXJlZ193KGdzcGNhX2Rldiwgc2hhcnBuZXNzX3RiW3NoYXJwbmVzc11bMF0sIDB4MDFjNik7CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAxYzgpOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMWM5KTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDFjYSk7Ci0JcmVnX3coZGV2LCBzaGFycG5lc3NfdGJbc2hhcnBuZXNzXVsxXSwgMHgwMWNiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIHNoYXJwbmVzc190YltzaGFycG5lc3NdWzFdLCAweDAxY2IpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAljb25zdCB1OCAqVGdhbW1hOwogCWludCBnLCBpLCBicmlnaHRuZXNzLCBjb250cmFzdCwgYWRqLCBncDEsIGdwMjsKIAl1OCBnclsxNl07CkBAIC02MDYzLDcgKzU5MjgsNyBAQAogCQkJZyA9IDB4ZmY7CiAJCWVsc2UgaWYgKGcgPCAwKQogCQkJZyA9IDA7Ci0JCXJlZ193KGRldiwgZywgMHgwMTIwICsgaSk7CS8qIGdhbW1hICovCisJCXJlZ193KGdzcGNhX2RldiwgZywgMHgwMTIwICsgaSk7CS8qIGdhbW1hICovCiAJCWlmIChjb250cmFzdCA+IDApCiAJCQlhZGotLTsKIAkJZWxzZSBpZiAoY29udHJhc3QgPCAwKQpAQCAtNjA3NywxMyArNTk0MiwxMiBAQAogCX0KIAlnclsxNV0gPSAoMHhmZiAtIGdwMikgLyAyOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlyZWdfdyhkZXYsIGdyW2ldLCAweDAxMzAgKyBpKTsJLyogZ3JhZGllbnQgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCBncltpXSwgMHgwMTMwICsgaSk7CS8qIGdyYWRpZW50ICovCiB9CiAKIHN0YXRpYyB2b2lkIHNldHF1YWxpdHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJdTggZnJ4dDsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgewpAQCAtNjA5Niw5ICs1OTYwLDkgQEAKIAkJcmV0dXJuOwogCX0KIC8qZml4bWU6IGlzIGl0IHJlYWxseSAwMDA4IDAwMDcgMDAxOCBmb3IgYWxsIG90aGVyIHNlbnNvcnM/ICovCi0JcmVnX3coZGV2LCBRVUFOVF9WQUwsIDB4MDAwOCk7CisJcmVnX3coZ3NwY2FfZGV2LCBRVUFOVF9WQUwsIDB4MDAwOCk7CiAJZnJ4dCA9IDB4MzA7Ci0JcmVnX3coZGV2LCBmcnh0LCAweDAwMDcpOworCXJlZ193KGdzcGNhX2RldiwgZnJ4dCwgMHgwMDA3KTsKICNpZiBRVUFOVF9WQUwgPT0gMCB8fCBRVUFOVF9WQUwgPT0gMSB8fCBRVUFOVF9WQUwgPT0gMgogCWZyeHQgPSAweGZmOwogI2VsaWYgUVVBTlRfVkFMID09IDMKQEAgLTYxMDgsNyArNTk3Miw3IEBACiAjZWxzZQogCWZyeHQgPSAweDIwOwogI2VuZGlmCi0JcmVnX3coZGV2LCBmcnh0LCAweDAwMTgpOworCXJlZ193KGdzcGNhX2RldiwgZnJ4dCwgMHgwMDE4KTsKIH0KIAogLyogTWF0Y2hlcyB0aGUgc2Vuc29yJ3MgaW50ZXJuYWwgZnJhbWUgcmF0ZSB0byB0aGUgbGlnaHRpbmcgZnJlcXVlbmN5LgpAQCAtNjExNiw4NyArNTk4MCw4NiBAQAogICoJNTBIeiwgZm9yIEV1cm9wZWFuIGFuZCBBc2lhbiBsaWdodGluZyAoZGVmYXVsdCkKICAqCTYwSHosIGZvciBBbWVyaWNhbiBsaWdodGluZwogICoJMCA9IE5vIEZsaWtlciAoZm9yIG91dGRvb3JlIHVzYWdlKQotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwogICovCi1zdGF0aWMgaW50IHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCitzdGF0aWMgdm9pZCBzZXRsaWdodGZyZXEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaSwgbW9kZTsKIAljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2ZyZXE7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICpmcmVxX3RiW1NFTlNPUl9NQVhdWzZdID0gewotLyogU0VOU09SX0FEQ00yNzAwIDAgKi8KKwlbU0VOU09SX0FEQ00yNzAwXSA9CiAJCXthZGNtMjcwMF9Ob0ZsaWtlciwgYWRjbTI3MDBfTm9GbGlrZXIsCiAJCSBhZGNtMjcwMF81MEhaLCBhZGNtMjcwMF81MEhaLAogCQkgYWRjbTI3MDBfNjBIWiwgYWRjbTI3MDBfNjBIWn0sCi0vKiBTRU5TT1JfQ1MyMTAyIDEgKi8KKwlbU0VOU09SX0NTMjEwMl0gPQogCQl7Y3MyMTAyX05vRmxpa2VyLCBjczIxMDJfTm9GbGlrZXJTY2FsZSwKIAkJIGNzMjEwMl81MEhaLCBjczIxMDJfNTBIWlNjYWxlLAogCQkgY3MyMTAyXzYwSFosIGNzMjEwMl82MEhaU2NhbGV9LAotLyogU0VOU09SX0NTMjEwMksgMiAqLworCVtTRU5TT1JfQ1MyMTAyS10gPQogCQl7Y3MyMTAyX05vRmxpa2VyLCBjczIxMDJfTm9GbGlrZXJTY2FsZSwKIAkJIE5VTEwsIE5VTEwsIC8qIGN1cnJlbnRseSBkaXNhYmxlZCAqLwogCQkgTlVMTCwgTlVMTH0sCi0vKiBTRU5TT1JfR0MwMzA1IDMgKi8KKwlbU0VOU09SX0dDMDMwNV0gPQogCQl7Z2MwMzA1X05vRmxpa2VyLCBnYzAzMDVfTm9GbGlrZXIsCiAJCSBnYzAzMDVfNTBIWiwgZ2MwMzA1XzUwSFosCiAJCSBnYzAzMDVfNjBIWiwgZ2MwMzA1XzYwSFp9LAotLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCisJW1NFTlNPUl9IRENTMjAyMGJdID0KIAkJe2hkY3MyMDIwYl9Ob0ZsaWtlciwgaGRjczIwMjBiX05vRmxpa2VyLAogCQkgaGRjczIwMjBiXzUwSFosIGhkY3MyMDIwYl81MEhaLAogCQkgaGRjczIwMjBiXzYwSFosIGhkY3MyMDIwYl82MEhafSwKLS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KKwlbU0VOU09SX0hWNzEzMUJdID0KIAkJe2h2NzEzMWJfTm9GbGlrZXIsIGh2NzEzMWJfTm9GbGlrZXJTY2FsZSwKIAkJIGh2NzEzMWJfNTBIWiwgaHY3MTMxYl81MEhaU2NhbGUsCiAJCSBodjcxMzFiXzYwSFosIGh2NzEzMWJfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KLQkJe05VTEwsIE5VTEwsCi0JCSBOVUxMLCBOVUxMLAotCQkgTlVMTCwgTlVMTH0sCi0vKiBTRU5TT1JfSUNNMTA1QSA3ICovCisJW1NFTlNPUl9IVjcxMzFSXSA9CisJCXtodjcxMzFyX05vRmxpa2VyLCBodjcxMzFyX05vRmxpa2VyU2NhbGUsCisJCSBodjcxMzFyXzUwSFosIGh2NzEzMXJfNTBIWlNjYWxlLAorCQkgaHY3MTMxcl82MEhaLCBodjcxMzFyXzYwSFpTY2FsZX0sCisJW1NFTlNPUl9JQ00xMDVBXSA9CiAJCXtpY20xMDVhX05vRmxpa2VyLCBpY20xMDVhX05vRmxpa2VyU2NhbGUsCiAJCSBpY20xMDVhXzUwSFosIGljbTEwNWFfNTBIWlNjYWxlLAogCQkgaWNtMTA1YV82MEhaLCBpY20xMDVhXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfTUM1MDFDQiA4ICovCisJW1NFTlNPUl9NQzUwMUNCXSA9CiAJCXttYzUwMWNiX05vRmxpa2VyLCBtYzUwMWNiX05vRmxpa2VyU2NhbGUsCiAJCSBtYzUwMWNiXzUwSFosIG1jNTAxY2JfNTBIWlNjYWxlLAogCQkgbWM1MDFjYl82MEhaLCBtYzUwMWNiXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfTUkwMzYwU09DIDkgKi8KLQkJe21pMzYwc29jX0FFTm9GbGlrZXIsIG1pMzYwc29jX0FFTm9GbGlrZXJTY2FsZSwKLQkJIG1pMzYwc29jX0FFNTBIWiwgbWkzNjBzb2NfQUU1MEhaU2NhbGUsCi0JCSBtaTM2MHNvY19BRTYwSFosIG1pMzYwc29jX0FFNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KKwlbU0VOU09SX01UOVYxMTFfMV0gPQorCQl7bXQ5djExMV8xX0FFTm9GbGlrZXIsIG10OXYxMTFfMV9BRU5vRmxpa2VyU2NhbGUsCisJCSBtdDl2MTExXzFfQUU1MEhaLCBtdDl2MTExXzFfQUU1MEhaU2NhbGUsCisJCSBtdDl2MTExXzFfQUU2MEhaLCBtdDl2MTExXzFfQUU2MEhaU2NhbGV9LAorCVtTRU5TT1JfTVQ5VjExMV8zXSA9CisJCXttdDl2MTExXzNfQUVOb0ZsaWtlciwgbXQ5djExMV8zX0FFTm9GbGlrZXJTY2FsZSwKKwkJIG10OXYxMTFfM19BRTUwSFosIG10OXYxMTFfM19BRTUwSFpTY2FsZSwKKwkJIG10OXYxMTFfM19BRTYwSFosIG10OXYxMTFfM19BRTYwSFpTY2FsZX0sCisJW1NFTlNPUl9PVjc2MjBdID0KIAkJe292NzYyMF9Ob0ZsaWtlciwgb3Y3NjIwX05vRmxpa2VyLAogCQkgb3Y3NjIwXzUwSFosIG92NzYyMF81MEhaLAogCQkgb3Y3NjIwXzYwSFosIG92NzYyMF82MEhafSwKLS8qIFNFTlNPUl9PVjc2MzBDIDExICovCisJW1NFTlNPUl9PVjc2MzBDXSA9CiAJCXtOVUxMLCBOVUxMLAogCQkgTlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEx9LAotLyogU0VOU09SX1BBUzEwNiAxMiAqLworCVtTRU5TT1JfUEFTMTA2XSA9CiAJCXtwYXMxMDZiX05vRmxpa2VyLCBwYXMxMDZiX05vRmxpa2VyLAogCQkgcGFzMTA2Yl81MEhaLCBwYXMxMDZiXzUwSFosCiAJCSBwYXMxMDZiXzYwSFosIHBhczEwNmJfNjBIWn0sCi0vKiBTRU5TT1JfUEFTMjAyQiAxMyAqLworCVtTRU5TT1JfUEFTMjAyQl0gPQogCQl7cGFzMjAyYl9Ob0ZsaWtlciwgcGFzMjAyYl9Ob0ZsaWtlclNjYWxlLAogCQkgcGFzMjAyYl81MEhaLCBwYXMyMDJiXzUwSFpTY2FsZSwKIAkJIHBhczIwMmJfNjBIWiwgcGFzMjAyYl82MEhaU2NhbGV9LAotLyogU0VOU09SX1BCMDMzMCAxNCAqLworCVtTRU5TT1JfUEIwMzMwXSA9CiAJCXtwYjAzMzBfTm9GbGlrZXIsIHBiMDMzMF9Ob0ZsaWtlclNjYWxlLAogCQkgcGIwMzMwXzUwSFosIHBiMDMzMF81MEhaU2NhbGUsCiAJCSBwYjAzMzBfNjBIWiwgcGIwMzMwXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfUE8yMDMwIDE1ICovCisJW1NFTlNPUl9QTzIwMzBdID0KIAkJe3BvMjAzMF9Ob0ZsaWtlciwgcG8yMDMwX05vRmxpa2VyLAogCQkgcG8yMDMwXzUwSFosIHBvMjAzMF81MEhaLAogCQkgcG8yMDMwXzYwSFosIHBvMjAzMF82MEhafSwKLS8qIFNFTlNPUl9UQVM1MTMwQ0sgMTYgKi8KLQkJe3RhczUxMzBjeHhfTm9GbGlrZXIsIHRhczUxMzBjeHhfTm9GbGlrZXJTY2FsZSwKLQkJIHRhczUxMzBjeHhfNTBIWiwgdGFzNTEzMGN4eF81MEhaU2NhbGUsCi0JCSB0YXM1MTMwY3h4XzYwSFosIHRhczUxMzBjeHhfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE3ICovCi0JCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCi0JCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAotCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCisJW1NFTlNPUl9UQVM1MTMwQ10gPQorCQl7dGFzNTEzMGNfTm9GbGlrZXIsIHRhczUxMzBjX05vRmxpa2VyU2NhbGUsCisJCSB0YXM1MTMwY181MEhaLCB0YXM1MTMwY181MEhaU2NhbGUsCisJCSB0YXM1MTMwY182MEhaLCB0YXM1MTMwY182MEhaU2NhbGV9LAorCVtTRU5TT1JfVEFTNTEzMENfVkYwMjUwXSA9CiAJCXt0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXIsIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlLAogCQkgdGFzNTEzMGNfdmYwMjUwXzUwSFosIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNjBIWiwgdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZX0sCkBAIC02MjA3LDI5ICs2MDcwLDI4IEBACiAJaWYgKG1vZGUpCiAJCWkrKzsJCQkvKiAzMjB4MjQwICovCiAJemMzX2ZyZXEgPSBmcmVxX3RiW3NkLT5zZW5zb3JdW2ldOwotCWlmICh6YzNfZnJlcSAhPSBOVUxMKSB7Ci0JCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHpjM19mcmVxKTsKLQkJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JCWNhc2UgU0VOU09SX0dDMDMwNToKLQkJCWlmIChtb2RlCQkJLyogaWYgMzIweDI0MCAqLwotCQkJICAgICYmIHNkLT5saWdodGZyZXEgPT0gMSkJLyogYW5kIDUwSHogKi8KLQkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg4NSwgMHgwMThkKTsKLQkJCQkJCS8qIHdpbjogMHg4MCwgMHgwMThkICovCi0JCQlicmVhazsKLQkJY2FzZSBTRU5TT1JfT1Y3NjIwOgotCQkJaWYgKCFtb2RlKSB7CQkJLyogaWYgNjQweDQ4MCAqLwotCQkJCWlmIChzZC0+bGlnaHRmcmVxICE9IDApCS8qIGFuZCA1MCBvciA2MCBIeiAqLwotCQkJCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHg0MCwgMHgwMDAyKTsKLQkJCQllbHNlCi0JCQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDQ0LCAweDAwMDIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0VOU09SX1BBUzIwMkI6Ci0JCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMCwgMHgwMWE3KTsKLQkJCWJyZWFrOworCWlmICh6YzNfZnJlcSA9PSBOVUxMKQorCQlyZXR1cm47CisJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgemMzX2ZyZXEpOworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0dDMDMwNToKKwkJaWYgKG1vZGUJCQkvKiBpZiAzMjB4MjQwICovCisJCSAgICAmJiBzZC0+bGlnaHRmcmVxID09IDEpCS8qIGFuZCA1MEh6ICovCisJCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODUsIDB4MDE4ZCk7CisJCQkJCS8qIHdpbjogMHg4MCwgMHgwMThkICovCisJCWJyZWFrOworCWNhc2UgU0VOU09SX09WNzYyMDoKKwkJaWYgKCFtb2RlKSB7CQkJLyogaWYgNjQweDQ4MCAqLworCQkJaWYgKHNkLT5saWdodGZyZXEgIT0gMCkJLyogYW5kIDUwIG9yIDYwIEh6ICovCisJCQkJcmVnX3coZ3NwY2FfZGV2LCAweDQwLCAweDAwMDIpOworCQkJZWxzZQorCQkJCXJlZ193KGdzcGNhX2RldiwgMHg0NCwgMHgwMDAyKTsKIAkJfQorCQlicmVhazsKKwljYXNlIFNFTlNPUl9QQVMyMDJCOgorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDFhNyk7CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQpAQCAtNjI0MSw0NSArNjEwMyw0NiBAQAogCQlhdXRvdmFsID0gMHg0MjsKIAllbHNlCiAJCWF1dG92YWwgPSAweDAyOwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCBhdXRvdmFsLCAweDAxODApOworCXJlZ193KGdzcGNhX2RldiwgYXV0b3ZhbCwgMHgwMTgwKTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF91bmtub3duKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzZW5zb3IpCitzdGF0aWMgdm9pZCBzZW5kX3Vua25vd24oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc2Vuc29yKQogewotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJCS8qIGxlZCBvZmYgKi8KKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCk7CQkvKiBsZWQgb2ZmICovCiAJc3dpdGNoIChzZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9QQVMxMDY6Ci0JCXJlZ193KGRldiwgMHgwMywgMHgwMDNhKTsKLQkJcmVnX3coZGV2LCAweDBjLCAweDAwM2IpOwotCQlyZWdfdyhkZXYsIDB4MDgsIDB4MDAzOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNhKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2IpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDAzOCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX0dDMDMwNToKIAljYXNlIFNFTlNPUl9PVjc2MjA6Ci0JY2FzZSBTRU5TT1JfTUkwMzYwU09DOgorCWNhc2UgU0VOU09SX01UOVYxMTFfMToKKwljYXNlIFNFTlNPUl9NVDlWMTExXzM6CiAJY2FzZSBTRU5TT1JfUEIwMzMwOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKLQkJcmVnX3coZGV2LCAweDBkLCAweDAwM2EpOwotCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAzYik7Ci0JCXJlZ193KGRldiwgMHgwMCwgMHgwMDM4KTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBkLCAweDAwM2EpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDAzYik7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDM4KTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKLQkJcmVnX3coZGV2LCAweDAzLCAweDAwM2IpOwotCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYSk7Ci0JCXJlZ193KGRldiwgMHgwYiwgMHgwMDM5KTsKLQkJcmVnX3coZGV2LCAweDBiLCAweDAwMzgpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOCk7CiAJCWJyZWFrOwogCX0KIH0KIAogLyogc3RhcnQgcHJvYmUgMiB3aXJlcyAqLwotc3RhdGljIHZvaWQgc3RhcnRfMndyX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBzZW5zb3IpCitzdGF0aWMgdm9pZCBzdGFydF8yd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc2Vuc29yKQogewotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsKLQlyZWdfdyhkZXYsIHNlbnNvciwgMHgwMDEwKTsKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7Ci0JcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCk7CisJcmVnX3coZ3NwY2FfZGV2LCBzZW5zb3IsIDB4MDAxMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAxMik7CiAvKgltc2xlZXAoMik7ICovCiB9CiAKQEAgLTYyODcsMTQgKzYxNTAsMTQgQEAKIHsKIAl1MTYgY2hlY2t3b3JkOwogCi0Jc3RhcnRfMndyX3Byb2JlKGdzcGNhX2Rldi0+ZGV2LCAweDBmKTsJCS8qIFBBUzEwNiAqLwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA4LCAweDAwOGQpOworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYsIDB4MGYpOwkJLyogUEFTMTA2ICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDAwOGQpOwogCW1zbGVlcCgxNTApOwogCWNoZWNrd29yZCA9ICgoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKSAmIDB4MGYpIDw8IDQpCiAJCQl8ICgoaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKSAmIDB4ZjApID4+IDQpOwogCVBERUJVRyhEX1BST0JFLCAicHJvYmUgc2lmIDB4JTA0eCIsIGNoZWNrd29yZCk7CiAJaWYgKGNoZWNrd29yZCA9PSAweDAwMDcpIHsKLQkJc2VuZF91bmtub3duKGdzcGNhX2Rldi0+ZGV2LCBTRU5TT1JfUEFTMTA2KTsKKwkJc2VuZF91bmtub3duKGdzcGNhX2RldiwgU0VOU09SX1BBUzEwNik7CiAJCXJldHVybiAweDBmOwkJCS8qIFBBUzEwNiAqLwogCX0KIAlyZXR1cm4gLTE7CkBAIC02MzAyLDIzICs2MTY1LDIyIEBACiAKIHN0YXRpYyBpbnQgdmdhXzJ3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGdzcGNhX2Rldi0+ZGV2OwogCXUxNiByZXR3b3JkOwogCi0Jc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwMCk7CQkvKiBIVjcxMzFCICovCisJc3RhcnRfMndyX3Byb2JlKGdzcGNhX2RldiwgMHgwMCk7CS8qIEhWNzEzMUIgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKIAlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwMDsJCQkvKiBIVjcxMzFCICovCiAKLQlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA0KTsJCS8qIENTMjEwMiAqLworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYsIDB4MDQpOwkvKiBDUzIxMDIgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweGFhLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKIAlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwNDsJCQkvKiBDUzIxMDIgKi8KIAotCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MDYpOwkJLyogT21uaVZpc2lvbiAqLwotCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKKwlzdGFydF8yd3JfcHJvYmUoZ3NwY2FfZGV2LCAweDA2KTsJLyogT21uaVZpc2lvbiAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwOCwgMHgwMDhkKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDExLCAweGFhLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDExKTsKIAlpZiAocmV0d29yZCAhPSAwKSB7CkBAIC02MzI3LDE0ICs2MTg5LDE0IEBACiAJCWdvdG8gb3ZfY2hlY2s7CiAJfQogCi0Jc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwOCk7CQkvKiBIRENTMjAyMCAqLworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYsIDB4MDgpOwkvKiBIRENTMjAyMCAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MWMsIDB4MDAsIDB4MDApOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTUsIDB4YWEsIDB4MDApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwogCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDA4OwkJCS8qIEhEQ1MyMDIwICovCiAKLQlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDBhKTsJCS8qIFBCMDMzMCAqLworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYsIDB4MGEpOwkvKiBQQjAzMzAgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDA3LCAweGFhLCAweGFhKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA3KTsKIAlpZiAocmV0d29yZCAhPSAwKQpAQCAtNjM0NiwyMyArNjIwOCwyMyBAQAogCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCA/PyAqLwogCi0Jc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwYyk7CQkvKiBJQ00xMDVBICovCisJc3RhcnRfMndyX3Byb2JlKGdzcGNhX2RldiwgMHgwYyk7CS8qIElDTTEwNUEgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweDExLCAweDAwKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKIAlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwYzsJCQkvKiBJQ00xMDVBICovCiAKLQlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDBlKTsJCS8qIFBBUzIwMkJDQiAqLwotCXJlZ193KGRldiwgMHgwOCwgMHgwMDhkKTsKKwlzdGFydF8yd3JfcHJvYmUoZ3NwY2FfZGV2LCAweDBlKTsJLyogUEFTMjAyQkNCICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDA4LCAweDAwOGQpOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsIDB4YWEsIDB4MDApOwogCW1zbGVlcCg1MCk7CiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CiAJaWYgKHJldHdvcmQgIT0gMCkgewotCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUEFTMjAyQik7CisJCXNlbmRfdW5rbm93bihnc3BjYV9kZXYsIFNFTlNPUl9QQVMyMDJCKTsKIAkJcmV0dXJuIDB4MGU7CQkJLyogUEFTMjAyQkNCICovCiAJfQogCi0Jc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwMik7CQkvKiBUQVM1MTMwQyAqLworCXN0YXJ0XzJ3cl9wcm9iZShnc3BjYV9kZXYsIDB4MDIpOwkvKiBUQVM1MTMwQyAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4YWEsIDB4MDApOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwogCWlmIChyZXR3b3JkICE9IDApCkBAIC02MzcxLDIwICs2MjMzLDIwIEBACiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwkJLyogPz8gKi8KIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CiAKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7Ci0JcmVnX3coZGV2LCAweDAxLCAweDAwMDEpOwotCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsJCS8qIE9tbmlWaXNpb24gKi8KLQlyZWdfdyhkZXYsIDB4YTEsIDB4MDA4Yik7Ci0JcmVnX3coZGV2LCAweDA4LCAweDAwOGQpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2LCAweDAwMTApOwkJLyogT21uaVZpc2lvbiAqLworCXJlZ193KGdzcGNhX2RldiwgMHhhMSwgMHgwMDhiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDA4ZCk7CiAJbXNsZWVwKDUwMCk7Ci0JcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDEyKTsKIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDEyLCAweDgwLCAweDAwKTsJLyogc2Vuc29yIHJlc2V0ICovCiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYSkgPDwgODsKIAlyZXR3b3JkIHw9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwYik7CiAJUERFQlVHKERfUFJPQkUsICJwcm9iZSAyd3Igb3YgdmdhIDB4JTA0eCIsIHJldHdvcmQpOwogCXN3aXRjaCAocmV0d29yZCkgewogCWNhc2UgMHg3NjMxOgkJCQkvKiBPVjc2MzBDICovCi0JCXJlZ193KGRldiwgMHgwNiwgMHgwMDEwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDA2LCAweDAwMTApOwogCQlicmVhazsKIAljYXNlIDB4NzYyMDoJCQkJLyogT1Y3NjIwICovCiAJY2FzZSAweDc2NDg6CQkJCS8qIE9WNzY0OCAqLwpAQCAtNjQwMSwzMiArNjI2MywzMSBAQAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vuc29yX2J5X2NoaXBzZXRfcmV2aXNpb24gY2hpcHNldF9yZXZpc2lvbl9zZW5zb3JbXSA9IHsKIAl7MHhjMDAwLCAweDEyfSwJCS8qIFRBUzUxMzBDICovCi0JezB4YzAwMSwgMHgxM30sCQkvKiBNSTAzNjBTT0MgKi8KKwl7MHhjMDAxLCAweDEzfSwJCS8qIE1UOVYxMTEgKi8KIAl7MHhlMDAxLCAweDEzfSwKIAl7MHg4MDAxLCAweDEzfSwKIAl7MHg4MDAwLCAweDE0fSwJCS8qIENTMjEwMksgKi8KLQl7MHg4NDAwLCAweDE1fSwJCS8qIFRBUzUxMzBLICovCisJezB4ODQwMCwgMHgxNX0sCQkvKiBNVDlWMTExICovCiAJezB4ZTQwMCwgMHgxNX0sCiB9OwogCiBzdGF0aWMgaW50IHZnYV8zd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IGk7CiAJdTggcmV0Ynl0ZTsKIAl1MTYgcmV0d29yZDsKIAogLypmaXhtZTogbGFjayBvZiA4Yj1iMyAoMTEsMTIpLT4gMTAsIDhiPWUwICgxNCwxNSwxNiktPiAxMiBmb3VuZCBpbiBnc3BjYXYxKi8KLQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAxMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAwMTApOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7Ci0JcmVnX3coZGV2LCAweDAwLCAweDAwMTApOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKLQlyZWdfdyhkZXYsIDB4OTEsIDB4MDA4Yik7Ci0JcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZWdfdyhkZXYsIDB4MDUsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMDEwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDkxLCAweDAwOGIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA1LCAweDAwMTIpOwogCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOwogCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDExOwkJCS8qIEhWNzEzMVIgKi8KQEAgLTY0MzcsOTMgKzYyOTgsOTAgQEAKIAlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgxMTsJCQkvKiBIVjcxMzFSICovCiAKLQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAxMCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAwMTApOwogCXJldHdvcmQgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwYikgPDwgODsKIAlyZXR3b3JkIHw9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDBhKTsKIAlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgMSAweCUwNHgiLCByZXR3b3JkKTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7Ci0JLyogdmFsdWUgMHg0MDAxIGlzIG1lYW5pbmdsZXNzICovCi0JaWYgKHJldHdvcmQgIT0gMHg0MDAxKSB7Ci0JCWlmICgocmV0d29yZCAmIDB4ZmYwMCkgPT0gMHg2NDAwKQotCQkJcmV0dXJuIDB4MDI7CQkvKiBUQVM1MTMwQyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGlwc2V0X3JldmlzaW9uX3NlbnNvcik7IGkrKykgewotCQkJaWYgKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLnJldmlzaW9uID09IHJldHdvcmQpIHsKLQkJCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IHJldHdvcmQ7Ci0JCQkJc2VuZF91bmtub3duKGRldiwgU0VOU09SX1BCMDMzMCk7Ci0JCQkJcmV0dXJuIGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldCi0JCQkJCQkJLmludGVybmFsX3NlbnNvcl9pZDsKLQkJCX0KKwlpZiAoKHJldHdvcmQgJiAweGZmMDApID09IDB4NjQwMCkKKwkJcmV0dXJuIDB4MDI7CQkvKiBUQVM1MTMwQyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yKTsgaSsrKSB7CisJCWlmIChjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltpXS5yZXZpc2lvbiA9PSByZXR3b3JkKSB7CisJCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IHJldHdvcmQ7CisJCQlzZW5kX3Vua25vd24oZ3NwY2FfZGV2LCBTRU5TT1JfUEIwMzMwKTsKKwkJCXJldHVybiBjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltpXQorCQkJCQkJLmludGVybmFsX3NlbnNvcl9pZDsKIAkJfQogCX0KIAotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsJLyogY2hlY2sgUEIwMzMwICovCi0JcmVnX3coZGV2LCAweDAxLCAweDAwMDEpOwotCXJlZ193KGRldiwgMHhkZCwgMHgwMDhiKTsKLQlyZWdfdyhkZXYsIDB4MGEsIDB4MDAxMCk7Ci0JcmVnX3coZGV2LCAweDAzLCAweDAwMTIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCk7CS8qIGNoZWNrIFBCMDMzMCAqLworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZGQsIDB4MDA4Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDBhLCAweDAwMTApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAxMik7CiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7CiAJaWYgKHJldHdvcmQgIT0gMCkgewotCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgdHlwZSAwYSA/Iik7CisJCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSB0eXBlIDBhIik7CiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCAqLwogCX0KIAotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7Ci0JcmVnX3coZGV2LCAweDk4LCAweDAwOGIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEwKTsKLQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4OTgsIDB4MDA4Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMTApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDEyKTsKIAltc2xlZXAoMik7Ci0JcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDEyKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKIAlpZiAocmV0d29yZCAhPSAwKSB7CiAJCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSB0eXBlICUwMngiLCByZXR3b3JkKTsKIAkJaWYgKHJldHdvcmQgPT0gMHgwMDExKQkJCS8qIFZGMDI1MCAqLwogCQkJcmV0dXJuIDB4MDI1MDsKIAkJaWYgKHJldHdvcmQgPT0gMHgwMDI5KQkJCS8qIGdjMDMwNSAqLwotCQkJc2VuZF91bmtub3duKGRldiwgU0VOU09SX0dDMDMwNSk7CisJCQlzZW5kX3Vua25vd24oZ3NwY2FfZGV2LCBTRU5TT1JfR0MwMzA1KTsKIAkJcmV0dXJuIHJldHdvcmQ7CiAJfQogCi0JcmVnX3coZGV2LCAweDAxLCAweDAwMDApOwkvKiBjaGVjayBPbW5pVmlzaW9uICovCi0JcmVnX3coZGV2LCAweDAxLCAweDAwMDEpOwotCXJlZ193KGRldiwgMHhhMSwgMHgwMDhiKTsKLQlyZWdfdyhkZXYsIDB4MDgsIDB4MDA4ZCk7Ci0JcmVnX3coZGV2LCAweDA2LCAweDAwMTApOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZWdfdyhkZXYsIDB4MDUsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDApOwkvKiBjaGVjayBPbW5pVmlzaW9uICovCisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEpOworCXJlZ193KGdzcGNhX2RldiwgMHhhMSwgMHgwMDhiKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDgsIDB4MDA4ZCk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA2LCAweDAwMTApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDUsIDB4MDAxMik7CiAJaWYgKGkyY19yZWFkKGdzcGNhX2RldiwgMHgxYykgPT0gMHgwMDdmCS8qIE9WNzYxMCAtIG1hbnVmYWN0dXJlciBJRCAqLwogCSAgICAmJiBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWQpID09IDB4MDBhMikgewotCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfT1Y3NjIwKTsKKwkJc2VuZF91bmtub3duKGdzcGNhX2RldiwgU0VOU09SX09WNzYyMCk7CiAJCXJldHVybiAweDA2OwkJLyogT21uaVZpc2lvbiBjb25maXJtID8gKi8KIAl9CiAKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7Ci0JcmVnX3coZGV2LCAweDAwLCAweDAwMDIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDEwKTsKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMSk7Ci0JcmVnX3coZGV2LCAweGVlLCAweDAwOGIpOwotCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKLQlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7Ci0JcmVnX3coZGV2LCAweDA1LCAweDAwMTIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAwMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMTApOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDAxKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZWUsIDB4MDA4Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAweDAwMTIpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMSwgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDUsIDB4MDAxMik7CiAJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCkgPDwgODsJLyogSUQgMCAqLwogCXJldHdvcmQgfD0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsJCS8qIElEIDEgKi8KIAlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgMiAweCUwNHgiLCByZXR3b3JkKTsKIAlpZiAocmV0d29yZCA9PSAweDIwMzApIHsKIAkJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMik7CS8qIHJldmlzaW9uIG51bWJlciAqLwogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBQTzIwMzAgcmV2IDB4JTAyeCIsIHJldGJ5dGUpOwotCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUE8yMDMwKTsKKwkJc2VuZF91bmtub3duKGdzcGNhX2RldiwgU0VOU09SX1BPMjAzMCk7CiAJCXJldHVybiByZXR3b3JkOwogCX0KIAotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAwKTsKLQlyZWdfdyhkZXYsIDB4MGEsIDB4MDAxMCk7Ci0JcmVnX3coZGV2LCAweGQzLCAweDAwOGIpOwotCXJlZ193KGRldiwgMHgwMSwgMHgwMDAxKTsKLQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAxMik7Ci0JcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwotCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlyZWdfdyhkZXYsIDB4ZDMsIDB4MDA4Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDApOworCXJlZ193KGdzcGNhX2RldiwgMHgwYSwgMHgwMDEwKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4ZDMsIDB4MDA4Yik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxLCAweDAwMDEpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDEyKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAxMik7CisJcmVnX3coZ3NwY2FfZGV2LCAweDA1LCAweDAwMTIpOworCXJlZ193KGdzcGNhX2RldiwgMHhkMywgMHgwMDhiKTsKIAlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKIAlpZiAocmV0d29yZCAhPSAwKSB7CiAJCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSB0eXBlIDBhID8gcmV0OiAlMDR4IiwgcmV0d29yZCk7CkBAIC02NTYwLDU0ICs2NDE4LDc0IEBACiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHgzMDFiKQorCQlzZC0+YnJpZGdlID0gQlJJREdFX1pDMzAxOworCWVsc2UKKwkJc2QtPmJyaWRnZSA9IEJSSURHRV9aQzMwMzsKKworCS8qIGRlZmluZSBzb21lIHNlbnNvcnMgZnJvbSB0aGUgdmVuZG9yL3Byb2R1Y3QgKi8KKwlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOworCisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOworCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCWludCBzZW5zb3I7CiAJc3RhdGljIGNvbnN0IHU4IGdhbW1hW1NFTlNPUl9NQVhdID0gewotCQk0LAkvKiBTRU5TT1JfQURDTTI3MDAgMCAqLwotCQk0LAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KLQkJNSwJLyogU0VOU09SX0NTMjEwMksgMiAqLwotCQk0LAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KLQkJNCwJLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCi0JCTQsCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUMgNiAqLwotCQk0LAkvKiBTRU5TT1JfSUNNMTA1QSA3ICovCi0JCTQsCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJNCwJLyogU0VOU09SX01JMDM2MFNPQyA5ICovCi0JCTMsCS8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KLQkJNCwJLyogU0VOU09SX09WNzYzMEMgMTEgKi8KLQkJNCwJLyogU0VOU09SX1BBUzEwNiAxMiAqLwotCQk0LAkvKiBTRU5TT1JfUEFTMjAyQiAxMyAqLwotCQk0LAkvKiBTRU5TT1JfUEIwMzMwIDE0ICovCi0JCTQsCS8qIFNFTlNPUl9QTzIwMzAgMTUgKi8KLQkJNCwJLyogU0VOU09SX1RBUzUxMzBDSyAxNiAqLwotCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCisJCVtTRU5TT1JfQURDTTI3MDBdID0JNCwKKwkJW1NFTlNPUl9DUzIxMDJdID0JNCwKKwkJW1NFTlNPUl9DUzIxMDJLXSA9CTUsCisJCVtTRU5TT1JfR0MwMzA1XSA9CTQsCisJCVtTRU5TT1JfSERDUzIwMjBiXSA9CTQsCisJCVtTRU5TT1JfSFY3MTMxQl0gPQk0LAorCQlbU0VOU09SX0hWNzEzMVJdID0JNCwKKwkJW1NFTlNPUl9JQ00xMDVBXSA9CTQsCisJCVtTRU5TT1JfTUM1MDFDQl0gPQk0LAorCQlbU0VOU09SX01UOVYxMTFfMV0gPQk0LAorCQlbU0VOU09SX01UOVYxMTFfM10gPQk0LAorCQlbU0VOU09SX09WNzYyMF0gPQkzLAorCQlbU0VOU09SX09WNzYzMENdID0JNCwKKwkJW1NFTlNPUl9QQVMxMDZdID0JNCwKKwkJW1NFTlNPUl9QQVMyMDJCXSA9CTQsCisJCVtTRU5TT1JfUEIwMzMwXSA9CTQsCisJCVtTRU5TT1JfUE8yMDMwXSA9CTQsCisJCVtTRU5TT1JfVEFTNTEzMENdID0JMywKKwkJW1NFTlNPUl9UQVM1MTMwQ19WRjAyNTBdID0gMywKIAl9OwogCXN0YXRpYyBjb25zdCB1OCBtb2RlX3RiW1NFTlNPUl9NQVhdID0gewotCQkyLAkvKiBTRU5TT1JfQURDTTI3MDAgMCAqLwotCQkxLAkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KLQkJMSwJLyogU0VOU09SX0NTMjEwMksgMiAqLwotCQkxLAkvKiBTRU5TT1JfR0MwMzA1IDMgKi8KLQkJMSwJLyogU0VOU09SX0hEQ1MyMDIwYiA0ICovCi0JCTEsCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KLQkJMSwJLyogU0VOU09SX0hWNzEzMUMgNiAqLwotCQkxLAkvKiBTRU5TT1JfSUNNMTA1QSA3ICovCi0JCTIsCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KLQkJMSwJLyogU0VOU09SX01JMDM2MFNPQyA5ICovCi0JCTIsCS8qIFNFTlNPUl9PVjc2MjAgMTAgKi8KLQkJMSwJLyogU0VOU09SX09WNzYzMEMgMTEgKi8KLQkJMCwJLyogU0VOU09SX1BBUzEwNiAxMiAqLwotCQkxLAkvKiBTRU5TT1JfUEFTMjAyQiAxMyAqLwotCQkxLAkvKiBTRU5TT1JfUEIwMzMwIDE0ICovCi0JCTEsCS8qIFNFTlNPUl9QTzIwMzAgMTUgKi8KLQkJMSwJLyogU0VOU09SX1RBUzUxMzBDSyAxNiAqLwotCQkxLAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNyAqLwotCQkxLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE4ICovCisJCVtTRU5TT1JfQURDTTI3MDBdID0JMiwKKwkJW1NFTlNPUl9DUzIxMDJdID0JMSwKKwkJW1NFTlNPUl9DUzIxMDJLXSA9CTEsCisJCVtTRU5TT1JfR0MwMzA1XSA9CTEsCisJCVtTRU5TT1JfSERDUzIwMjBiXSA9CTEsCisJCVtTRU5TT1JfSFY3MTMxQl0gPQkxLAorCQlbU0VOU09SX0hWNzEzMVJdID0JMSwKKwkJW1NFTlNPUl9JQ00xMDVBXSA9CTEsCisJCVtTRU5TT1JfTUM1MDFDQl0gPQkyLAorCQlbU0VOU09SX01UOVYxMTFfMV0gPQkxLAorCQlbU0VOU09SX01UOVYxMTFfM10gPQkxLAorCQlbU0VOU09SX09WNzYyMF0gPQkyLAorCQlbU0VOU09SX09WNzYzMENdID0JMSwKKwkJW1NFTlNPUl9QQVMxMDZdID0JMCwKKwkJW1NFTlNPUl9QQVMyMDJCXSA9CTEsCisJCVtTRU5TT1JfUEIwMzMwXSA9CTEsCisJCVtTRU5TT1JfUE8yMDMwXSA9CTEsCisJCVtTRU5TT1JfVEFTNTEzMENdID0JMSwKKwkJW1NFTlNPUl9UQVM1MTMwQ19WRjAyNTBdID0gMSwKIAl9OwogCi0JLyogZGVmaW5lIHNvbWUgc2Vuc29ycyBmcm9tIHRoZSB2ZW5kb3IvcHJvZHVjdCAqLwotCXNkLT5zaGFycG5lc3MgPSBTSEFSUE5FU1NfREVGOwotCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJc2Vuc29yID0gemN4eF9wcm9iZVNlbnNvcihnc3BjYV9kZXYpOwogCWlmIChzZW5zb3IgPj0gMCkKIAkJUERFQlVHKERfUFJPQkUsICJwcm9iZSBzZW5zb3IgLT4gJTA0eCIsIHNlbnNvcik7CkBAIC02NjI2LDggKzY1MDQsOCBAQAogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlQREVCVUcoRF9QUk9CRSwKLQkJCQkJIlNlbnNvciBVTktOT1dOXzAgZm9yY2UgVGFzNTEzMCIpOwotCQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENYWDsKKwkJCQkJIlVua25vd24gc2Vuc29yIC0gc2V0IHRvIFRBUzUxMzBDIik7CisJCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQzsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDA6CkBAIC02NjQyLDE0ICs2NTIwLDE0IEBACiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogLyoJCQljYXNlIDI6CQkJICogaHY3MTMxciAqLwotCQkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxUihjKSIpOwotCQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfSFY3MTMxQzsKKwkJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEhWNzEzMVIiKTsKKwkJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSAweDAyOgogCQkJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgVEFTNTEzMEMiKTsKLQkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMENYWDsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEM7CiAJCQlicmVhazsKIAkJY2FzZSAweDA0OgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBDUzIxMDIiKTsKQEAgLTY2ODEsMTcgKzY1NTksMjAgQEAKIAkJY2FzZSAweDEwOgogCQljYXNlIDB4MTI6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIFRBUzUxMzBDIik7Ci0JCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDWFg7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX1RBUzUxMzBDOwogCQkJYnJlYWs7CiAJCWNhc2UgMHgxMToKLQkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgSFY3MTMxUihjKSIpOwotCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9IVjcxMzFDOworCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBIVjcxMzFSIik7CisJCQlzZC0+c2Vuc29yID0gU0VOU09SX0hWNzEzMVI7CiAJCQlicmVhazsKIAkJY2FzZSAweDEzOgorCQljYXNlIDB4MTU6CiAJCQlQREVCVUcoRF9QUk9CRSwKLQkJCQkiRmluZCBTZW5zb3IgTUkwMzYwU09DLiBDaGlwIHJldmlzaW9uICV4IiwKKwkJCQkiU2Vuc29yIE1UOVYxMTEuIENoaXAgcmV2aXNpb24gJTA0eCIsCiAJCQkJc2QtPmNoaXBfcmV2aXNpb24pOwotCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9NSTAzNjBTT0M7CisJCQlzZC0+c2Vuc29yID0gc2QtPmJyaWRnZSA9PSBCUklER0VfWkMzMDEKKwkJCQkJPyBTRU5TT1JfTVQ5VjExMV8xCisJCQkJCTogU0VOU09SX01UOVYxMTFfMzsKIAkJCWJyZWFrOwogCQljYXNlIDB4MTQ6CiAJCQlQREVCVUcoRF9QUk9CRSwKQEAgLTY2OTksMTIgKzY1ODAsNiBAQAogCQkJCXNkLT5jaGlwX3JldmlzaW9uKTsKIAkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfQ1MyMTAySzsKIAkJCWJyZWFrOwotCQljYXNlIDB4MTU6Ci0JCQlQREVCVUcoRF9QUk9CRSwKLQkJCQkiRmluZCBTZW5zb3IgVEFTNTEzMENLPy4gQ2hpcCByZXZpc2lvbiAleCIsCi0JCQkJc2QtPmNoaXBfcmV2aXNpb24pOwotCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQ0s7Ci0JCQlicmVhazsKIAkJY2FzZSAweDE2OgogCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBBRENNMjcwMCIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9BRENNMjcwMDsKQEAgLTY3NDEsMTMgKzY2MTYsMTEgQEAKIAl9CiAJaWYgKHNlbnNvciA8IDB4MjApIHsKIAkJaWYgKHNlbnNvciA9PSAtMSB8fCBzZW5zb3IgPT0gMHgxMCB8fCBzZW5zb3IgPT0gMHgxMikKLQkJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDAyLCAweDAwMTApOworCQkJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAwMTApOwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAxMCk7CiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotLypmaXhtZTp0ZXN0Ki8KLQlnc3BjYV9kZXYtPm5iYWx0LS07CiAJc3dpdGNoIChtb2RlX3RiW3NkLT5zZW5zb3JdKSB7CiAJY2FzZSAwOgogCQljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CkBAIC02NzYzLDU4ICs2NjM2LDYyIEBACiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShicm9rZW5fdmdhX21vZGUpOwogCQlicmVhazsKIAl9Ci0Jc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKLQlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmdhbW1hID0gZ2FtbWFbc2QtPnNlbnNvcl07Ci0Jc2QtPmF1dG9nYWluID0gQVVUT0dBSU5fREVGOwotCXNkLT5saWdodGZyZXEgPSBGUkVRX0RFRjsKLQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfSFY3MTMxQjoKLQljYXNlIFNFTlNPUl9IVjcxMzFDOgogCWNhc2UgU0VOU09SX09WNzYzMEM6CiAJCWdzcGNhX2Rldi0+Y3RybF9kaXMgPSAoMSA8PCBMSUdIVEZSRVFfSURYKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwotc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKIAkvKiBzd2l0Y2ggb2ZmIHRoZSBsZWQgKi8KLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwMSwgMHgwMDAwKTsKLQlyZXR1cm4gMDsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIDB4MDAwMCk7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgbW9kZTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKmluaXRfdGJbU0VOU09SX01BWF1bMl0gPSB7Ci0JCXthZGNtMjcwMF9Jbml0aWFsLCBhZGNtMjcwMF9Jbml0aWFsU2NhbGV9LAkvKiAwICovCi0JCXtjczIxMDJfSW5pdGlhbCwgY3MyMTAyX0luaXRpYWxTY2FsZX0sCQkvKiAxICovCi0JCXtjczIxMDJLX0luaXRpYWwsIGNzMjEwMktfSW5pdGlhbFNjYWxlfSwJLyogMiAqLwotCQl7Z2MwMzA1X0luaXRpYWwsIGdjMDMwNV9Jbml0aWFsU2NhbGV9LAkJLyogMyAqLwotCQl7aGRjczIwMjBiX0luaXRpYWwsIGhkY3MyMDIwYl9Jbml0aWFsU2NhbGV9LAkvKiA0ICovCi0JCXtodjcxMzFiX0luaXRpYWwsIGh2NzEzMWJfSW5pdGlhbFNjYWxlfSwJLyogNSAqLwotCQl7aHY3MTMxcl9Jbml0aWFsLCBodjcxMzFyX0luaXRpYWxTY2FsZX0sCS8qIDYgKi8KLQkJe2ljbTEwNWFfSW5pdGlhbCwgaWNtMTA1YV9Jbml0aWFsU2NhbGV9LAkvKiA3ICovCi0JCXttYzUwMWNiX0luaXRpYWwsIG1jNTAxY2JfSW5pdGlhbFNjYWxlfSwJLyogOCAqLwotCQl7bWkwMzYwc29jX0luaXRpYWwsIG1pMDM2MHNvY19Jbml0aWFsU2NhbGV9LAkvKiA5ICovCi0JCXtvdjc2MjBfSW5pdGlhbCwgb3Y3NjIwX0luaXRpYWxTY2FsZX0sCQkvKiAxMCAqLwotCQl7b3Y3NjMwY19Jbml0aWFsLCBvdjc2MzBjX0luaXRpYWxTY2FsZX0sCS8qIDExICovCi0JCXtwYXMxMDZiX0luaXRpYWwsIHBhczEwNmJfSW5pdGlhbFNjYWxlfSwJLyogMTIgKi8KLQkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMyAqLwotCQl7cGIwMzMwX0luaXRpYWwsIHBiMDMzMF9Jbml0aWFsU2NhbGV9LAkJLyogMTQgKi8KLQkJe3BvMjAzMF9Jbml0aWFsLCBwbzIwMzBfSW5pdGlhbFNjYWxlfSwJCS8qIDE1ICovCi0JCXt0YXM1MTMwY0tfSW5pdGlhbCwgdGFzNTEzMGNLX0luaXRpYWxTY2FsZX0sCS8qIDE2ICovCi0JCXt0YXM1MTMwY3h4X0luaXRpYWwsIHRhczUxMzBjeHhfSW5pdGlhbFNjYWxlfSwJLyogMTcgKi8KKwlbU0VOU09SX0FEQ00yNzAwXSA9CisJCQl7YWRjbTI3MDBfSW5pdGlhbCwgYWRjbTI3MDBfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0NTMjEwMl0JPQorCQkJe2NzMjEwMl9Jbml0aWFsLCBjczIxMDJfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0NTMjEwMktdID0KKwkJCXtjczIxMDJLX0luaXRpYWwsIGNzMjEwMktfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0dDMDMwNV0gPQorCQkJe2djMDMwNV9Jbml0aWFsLCBnYzAzMDVfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0hEQ1MyMDIwYl0gPQorCQkJe2hkY3MyMDIwYl9Jbml0aWFsLCBoZGNzMjAyMGJfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0hWNzEzMUJdID0KKwkJCXtodjcxMzFiX0luaXRpYWwsIGh2NzEzMWJfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0hWNzEzMVJdID0KKwkJCXtodjcxMzFyX0luaXRpYWwsIGh2NzEzMXJfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX0lDTTEwNUFdID0KKwkJCXtpY20xMDVhX0luaXRpYWwsIGljbTEwNWFfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX01DNTAxQ0JdID0KKwkJCXttYzUwMWNiX0luaXRpYWwsIG1jNTAxY2JfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX01UOVYxMTFfMV0gPQorCQkJe210OXYxMTFfMV9Jbml0aWFsLCBtdDl2MTExXzFfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX01UOVYxMTFfM10gPQorCQkJe210OXYxMTFfM19Jbml0aWFsLCBtdDl2MTExXzNfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX09WNzYyMF0gPQorCQkJe292NzYyMF9Jbml0aWFsLCBvdjc2MjBfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX09WNzYzMENdID0KKwkJCXtvdjc2MzBjX0luaXRpYWwsIG92NzYzMGNfSW5pdGlhbFNjYWxlfSwKKwlbU0VOU09SX1BBUzEwNl0gPQorCQkJe3BhczEwNmJfSW5pdGlhbCwgcGFzMTA2Yl9Jbml0aWFsU2NhbGV9LAorCVtTRU5TT1JfUEFTMjAyQl0gPQorCQkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAorCVtTRU5TT1JfUEIwMzMwXSA9CisJCQl7cGIwMzMwX0luaXRpYWwsIHBiMDMzMF9Jbml0aWFsU2NhbGV9LAorCVtTRU5TT1JfUE8yMDMwXSA9CisJCQl7cG8yMDMwX0luaXRpYWwsIHBvMjAzMF9Jbml0aWFsU2NhbGV9LAorCVtTRU5TT1JfVEFTNTEzMENdID0KKwkJCXt0YXM1MTMwY19Jbml0aWFsLCB0YXM1MTMwY19Jbml0aWFsU2NhbGV9LAorCVtTRU5TT1JfVEFTNTEzMENfVkYwMjUwXSA9CiAJCXt0YXM1MTMwY192ZjAyNTBfSW5pdGlhbCwgdGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZX0sCi0JCQkJCQkJCS8qIDE4ICovCiAJfTsKIAogCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KQEAgLTY4MjQsNyArNjcwMSw3IEBACiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7Ci0JY2FzZSBTRU5TT1JfSFY3MTMxQzoKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCQl6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BBUzEwNjoKQEAgLTY4MzgsMjIgKzY3MTUsMjIgQEAKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKLQljYXNlIFNFTlNPUl9UQVM1MTMwQ1hYOgorCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCWNhc2UgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MDoKIC8qCQltc2xlZXAoMTAwKTsJCQkgKiA/PyAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7CS8qIC0tPiAweDQwICovCi0JCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwotCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfVEFTNTEzMENYWCkKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDA5LCAweDAxYWQpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MTUsIDB4MDFhZSk7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9UQVM1MTMwQykKIAkJCWJyZWFrOwotCQlyZWdfdyhkZXYsIDB4MGQsIDB4MDAzYSk7Ci0JCXJlZ193KGRldiwgMHgwMiwgMHgwMDNiKTsKLQkJcmVnX3coZGV2LCAweDAwLCAweDAwMzgpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGQsIDB4MDAzYSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgotCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAzYik7Ci0JCXJlZ193KGRldiwgMHgwYywgMHgwMDNhKTsKLQkJcmVnX3coZGV2LCAweDBiLCAweDAwMzkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDMsIDB4MDAzYik7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwYywgMHgwMDNhKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzkpOwogCQlicmVhazsKIAl9CiAKQEAgLTY4NjIsMTUgKzY3MzksMTUgQEAKIAljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKLQkJcmVnX3coZGV2LCAweDAwLCAweDAwMDgpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAwOCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgotCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6CisJY2FzZSBTRU5TT1JfVEFTNTEzMEM6CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSBTRU5TT1JfUE8yMDMwOgotCQlyZWdfdyhkZXYsIDB4MDMsIDB4MDAwOCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDA4KTsKIAkJYnJlYWs7CiAJfQogCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwpAQCAtNjg4MCw3ICs2NzU3LDYgQEAKIAljYXNlIFNFTlNPUl9DUzIxMDJLOgkJLyogZ2FtbWEgc2V0IGluIHh4eF9Jbml0aWFsICovCiAJY2FzZSBTRU5TT1JfSERDUzIwMjBiOgogCWNhc2UgU0VOU09SX09WNzYzMEM6Ci0JY2FzZSBTRU5TT1JfVEFTNTEzMENLOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwpAQCAtNjg5MSw3ICs2NzY3LDcgQEAKIAljYXNlIFNFTlNPUl9PVjc2MjA6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAxODApOwkvKiBmcm9tIHdpbiAqLwotCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDE4MCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHgwMTgwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc2V0cXVhbGl0eShnc3BjYV9kZXYpOwpAQCAtNjkwMSwyOSArNjc3NywyOSBAQAogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfQURDTTI3MDA6Ci0JCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwotCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDE4MCk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAweDAxYWUpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDIsIDB4MDE4MCk7CiAJCQkJCQkvKiBtcy13aW4gKyAqLwotCQlyZWdfdyhkZXYsIDB4NDAsIDB4MDExNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg0MCwgMHgwMTE3KTsKIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgotCWNhc2UgU0VOU09SX1RBUzUxMzBDWFg6Ci0JCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KLQkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOworCWNhc2UgU0VOU09SX1RBUzUxMzBDOgorCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgxNSwgMHgwMWFlKTsKIAkJLyogZmFsbCB0aHJ1ICovCiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAljYXNlIFNFTlNPUl9QTzIwMzA6Ci0vKgkJcmVnX3coZGV2LCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOKTsgICogKGZyb20gd2luIHRyYWNlcykgKi8KKy8qCQlyZWdfdyhnc3BjYV9kZXYsIDB4NDAsIFpDM1hYX1IxMTdfR0dBSU4pOyAgKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwogCQlyZWdfcihnc3BjYV9kZXYsIDB4MDE4MCk7CiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYyMDoKLQkJcmVnX3coZGV2LCAweDA5LCAweDAxYWQpOwotCQlyZWdfdyhkZXYsIDB4MTUsIDB4MDFhZSk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwOSwgMHgwMWFkKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDE1LCAweDAxYWUpOwogCQlpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTMpOwkvKmZpeG1lOiByZXR1cm5zIDB4YTMgKi8KIAkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxMywgMHhhMywgMHgwMCk7CiAJCQkJCSAvKmZpeG1lOiByZXR1cm5lZCB2YWx1ZSB0byBzZW5kPyAqLwotCQlyZWdfdyhkZXYsIDB4NDAsIDB4MDExNyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHg0MCwgMHgwMTE3KTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAxODApOwogCQlicmVhazsKIAl9CkBAIC02OTMyLDExICs2ODA4LDExIEBACiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfUE8yMDMwOgogCQltc2xlZXAoNTApOwotCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCi0JCXJlZ193KGRldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdCAwIGFuZCBvbiBkaXNjb25uZWN0ICovCkBAIC02OTQ2LDcgKzY4MjIsNyBAQAogCiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKLQlzZW5kX3Vua25vd24oZ3NwY2FfZGV2LT5kZXYsIHNkLT5zZW5zb3IpOworCXNlbmRfdW5rbm93bihnc3BjYV9kZXYsIHNkLT5zZW5zb3IpOwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC02OTgxLDcgKzY4NTcsNyBAQAogCXNkLT5icmlnaHRuZXNzID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOwogfQogCiBzdGF0aWMgaW50IHNkX2dldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNjk5OSw3ICs2ODc1LDcgQEAKIAlzZC0+Y29udHJhc3QgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzAxNyw3ICs2ODkzLDcgQEAKIAlzZC0+YXV0b2dhaW4gPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzAzNSw3ICs2OTExLDcgQEAKIAlzZC0+Z2FtbWEgPSB2YWw7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQpAQCAtNzA1Myw3ICs2OTI5LDcgQEAKIAlzZC0+bGlnaHRmcmVxID0gdmFsOwogCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKIAkJc2V0bGlnaHRmcmVxKGdzcGNhX2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKIH0KIAogc3RhdGljIGludCBzZF9nZXRmcmVxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTcwNzEsNyArNjk0Nyw3IEBACiAJc2QtPnNoYXJwbmVzcyA9IHZhbDsKIAlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCiAJCXNldHNoYXJwbmVzcyhnc3BjYV9kZXYpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKQEAgLTcxMTYsNyArNjk5Miw3IEBACiAJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CiAJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQogCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwotCXJldHVybiAwOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9lcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTcyMjAsNyArNzA5Niw2IEBACiAJe1VTQl9ERVZJQ0UoMHgxMGZkLCAweDgwNTApfSwKIAl7fQkJCS8qIGVuZCBvZiBlbnRyeSAqLwogfTsKLSN1bmRlZiBEVk5BTUUKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKaW5kZXggYjU4OGUzMC4uYjMxZWUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCkBAIC0xNywxNjMgKzE3LDE0IEBACiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlICJpdnR2LWRyaXZlci5oIgotI2luY2x1ZGUgIml2dHYtY2FyZHMuaCIKICNpbmNsdWRlICJpdnR2LWlvY3RsLmgiCi0jaW5jbHVkZSAiaXZ0di1yb3V0aW5nLmgiCi0jaW5jbHVkZSAiaXZ0di1pMmMuaCIKLSNpbmNsdWRlICJpdnR2LW1haWxib3guaCIKICNpbmNsdWRlICJpdnR2LWNvbnRyb2xzLmgiCiAKLS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KLXN0YXRpYyBjb25zdCB1MzIgdXNlcl9jdHJsc1tdID0gewotCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCi0JVjRMMl9DSURfQlJJR0hUTkVTUywKLQlWNEwyX0NJRF9DT05UUkFTVCwKLQlWNEwyX0NJRF9TQVRVUkFUSU9OLAotCVY0TDJfQ0lEX0hVRSwKLQlWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKLQlWNEwyX0NJRF9BVURJT19CQVNTLAotCVY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQlWNEwyX0NJRF9BVURJT19NVVRFLAotCVY0TDJfQ0lEX0FVRElPX0xPVURORVNTLAotCTAKLX07Ci0KLXN0YXRpYyBjb25zdCB1MzIgKmN0cmxfY2xhc3Nlc1tdID0gewotCXVzZXJfY3RybHMsCi0JY3gyMzQxeF9tcGVnX2N0cmxzLAotCU5VTEwKLX07Ci0KLQotaW50IGl2dHZfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3N0YXRpYyBpbnQgaXZ0dl9zX3N0cmVhbV92YmlfZm10KHN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmN4aGRsLCB1MzIgZm10KQogewotCXN0cnVjdCBpdnR2ICppdHYgPSAoKHN0cnVjdCBpdnR2X29wZW5faWQgKilmaCktPml0djsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JcWN0cmwtPmlkID0gdjRsMl9jdHJsX25leHQoY3RybF9jbGFzc2VzLCBxY3RybC0+aWQpOwotCWlmIChxY3RybC0+aWQgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCS8qIFN0YW5kYXJkIFY0TDIgY29udHJvbHMgKi8KLQljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMCwgMCwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCWNhc2UgVjRMMl9DSURfSFVFOgotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlpZiAodjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKLQkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlpZiAodjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBjb3JlLCBxdWVyeWN0cmwsIHFjdHJsKSkKLQkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlpZiAoY3gyMzQxeF9jdHJsX3F1ZXJ5KCZpdHYtPnBhcmFtcywgcWN0cmwpKQotCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOwotCQlyZXR1cm4gMDsKLQl9Ci0Jc3RybmNweShxY3RybC0+bmFtZSwgbmFtZSwgc2l6ZW9mKHFjdHJsLT5uYW1lKSAtIDEpOwotCXFjdHJsLT5uYW1lW3NpemVvZihxY3RybC0+bmFtZSkgLSAxXSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBpdnR2X3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqcW1lbnUpCi17Ci0Jc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OwotCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKLQotCXFjdHJsLmlkID0gcW1lbnUtPmlkOwotCWl2dHZfcXVlcnljdHJsKGZpbGUsIGZoLCAmcWN0cmwpOwotCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLAotCQkJY3gyMzQxeF9jdHJsX2dldF9tZW51KCZpdHYtPnBhcmFtcywgcW1lbnUtPmlkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXZ0dl90cnlfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICp2Y3RybCkKLXsKLQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7Ci0JY29uc3QgY2hhciAqKm1lbnVfaXRlbXMgPSBOVUxMOwotCWludCBlcnI7Ci0KLQlxY3RybC5pZCA9IHZjdHJsLT5pZDsKLQllcnIgPSBpdnR2X3F1ZXJ5Y3RybChmaWxlLCBmaCwgJnFjdHJsKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWlmIChxY3RybC50eXBlID09IFY0TDJfQ1RSTF9UWVBFX01FTlUpCi0JCW1lbnVfaXRlbXMgPSB2NGwyX2N0cmxfZ2V0X21lbnUocWN0cmwuaWQpOwotCXJldHVybiB2NGwyX2N0cmxfY2hlY2sodmN0cmwsICZxY3RybCwgbWVudV9pdGVtcyk7Ci19Ci0KLXN0YXRpYyBpbnQgaXZ0dl9zX2N0cmwoc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHY0bDJfY29udHJvbCAqdmN0cmwpCi17Ci0Jc3dpdGNoICh2Y3RybC0+aWQpIHsKLQkJLyogU3RhbmRhcmQgVjRMMiBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgc19jdHJsLCB2Y3RybCk7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBjb3JlLCBzX2N0cmwsIHZjdHJsKTsKLQotCWRlZmF1bHQ6Ci0JCUlWVFZfREVCVUdfSU9DVEwoImludmFsaWQgY29udHJvbCAweCV4XG4iLCB2Y3RybC0+aWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXZ0dl9nX2N0cmwoc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHY0bDJfY29udHJvbCAqdmN0cmwpCi17Ci0Jc3dpdGNoICh2Y3RybC0+aWQpIHsKLQkJLyogU3RhbmRhcmQgVjRMMiBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgZ19jdHJsLCB2Y3RybCk7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBjb3JlLCBnX2N0cmwsIHZjdHJsKTsKLQlkZWZhdWx0OgotCQlJVlRWX0RFQlVHX0lPQ1RMKCJpbnZhbGlkIGNvbnRyb2wgMHgleFxuIiwgdmN0cmwtPmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl2dHZfc2V0dXBfdmJpX2ZtdChzdHJ1Y3QgaXZ0diAqaXR2LCBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCBmbXQpCi17Ci0JaWYgKCEoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmIChhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCkKLQkJcmV0dXJuIC1FQlVTWTsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gY29udGFpbmVyX29mKGN4aGRsLCBzdHJ1Y3QgaXZ0diwgY3hoZGwpOwogCiAJLyogRmlyc3QgdHJ5IHRvIGFsbG9jYXRlIHNsaWNlZCBWQkkgYnVmZmVycyBpZiBuZWVkZWQuICovCiAJaWYgKGZtdCAmJiBpdHYtPnZiaS5zbGljZWRfbXBlZ19kYXRhWzBdID09IE5VTEwpIHsKQEAgLTIwOCwxMDYgKzU5LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpdnR2X2dfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQorc3RhdGljIGludCBpdnR2X3NfdmlkZW9fZW5jb2Rpbmcoc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqY3hoZGwsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGl2dHYgKml0diA9ICgoc3RydWN0IGl2dHZfb3Blbl9pZCAqKWZoKS0+aXR2OwotCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gY29udGFpbmVyX29mKGN4aGRsLCBzdHJ1Y3QgaXZ0diwgY3hoZGwpOworCWludCBpc19tcGVnMSA9IHZhbCA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xOworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgZm10OwogCi0JaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKLQkJaW50IGk7Ci0JCWludCBlcnIgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7Ci0JCQljdHJsLmlkID0gYy0+Y29udHJvbHNbaV0uaWQ7Ci0JCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7Ci0JCQllcnIgPSBpdnR2X2dfY3RybChpdHYsICZjdHJsKTsKLQkJCWMtPmNvbnRyb2xzW2ldLnZhbHVlID0gY3RybC52YWx1ZTsKLQkJCWlmIChlcnIpIHsKLQkJCQljLT5lcnJvcl9pZHggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQlyZXR1cm4gY3gyMzQxeF9leHRfY3RybHMoJml0di0+cGFyYW1zLCAwLCBjLCBWSURJT0NfR19FWFRfQ1RSTFMpOwotCXJldHVybiAtRUlOVkFMOworCS8qIGZpeCB2aWRlb2RlY29kZXIgcmVzb2x1dGlvbiAqLworCWZtdC53aWR0aCA9IGN4aGRsLT53aWR0aCAvIChpc19tcGVnMSA/IDIgOiAxKTsKKwlmbXQuaGVpZ2h0ID0gY3hoZGwtPmhlaWdodDsKKwlmbXQuY29kZSA9IFY0TDJfTUJVU19GTVRfRklYRUQ7CisJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19tYnVzX2ZtdCwgJmZtdCk7CisJcmV0dXJuIDA7CiB9CiAKLWludCBpdnR2X3NfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQorc3RhdGljIGludCBpdnR2X3NfYXVkaW9fc2FtcGxpbmdfZnJlcShzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpjeGhkbCwgdTMyIGlkeCkKIHsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7Ci0Jc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOworCXN0YXRpYyBjb25zdCB1MzIgZnJlcXNbM10gPSB7IDQ0MTAwLCA0ODAwMCwgMzIwMDAgfTsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gY29udGFpbmVyX29mKGN4aGRsLCBzdHJ1Y3QgaXZ0diwgY3hoZGwpOwogCi0JaWYgKGMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX1VTRVIpIHsKLQkJaW50IGk7Ci0JCWludCBlcnIgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjLT5jb3VudDsgaSsrKSB7Ci0JCQljdHJsLmlkID0gYy0+Y29udHJvbHNbaV0uaWQ7Ci0JCQljdHJsLnZhbHVlID0gYy0+Y29udHJvbHNbaV0udmFsdWU7Ci0JCQllcnIgPSBpdnR2X3NfY3RybChpdHYsICZjdHJsKTsKLQkJCWMtPmNvbnRyb2xzW2ldLnZhbHVlID0gY3RybC52YWx1ZTsKLQkJCWlmIChlcnIpIHsKLQkJCQljLT5lcnJvcl9pZHggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7Ci0JCXN0YXRpYyB1MzIgZnJlcXNbM10gPSB7IDQ0MTAwLCA0ODAwMCwgMzIwMDAgfTsKLQkJc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcCA9IGl0di0+cGFyYW1zOwotCQlpbnQgZXJyID0gY3gyMzQxeF9leHRfY3RybHMoJnAsIGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZyksIGMsIFZJRElPQ19TX0VYVF9DVFJMUyk7Ci0JCXVuc2lnbmVkIGlkeDsKLQotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAocC52aWRlb19lbmNvZGluZyAhPSBpdHYtPnBhcmFtcy52aWRlb19lbmNvZGluZykgewotCQkJaW50IGlzX21wZWcxID0gcC52aWRlb19lbmNvZGluZyA9PQotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzE7Ci0JCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IGZtdDsKLQotCQkJLyogZml4IHZpZGVvZGVjb2RlciByZXNvbHV0aW9uICovCi0JCQlmbXQud2lkdGggPSBpdHYtPnBhcmFtcy53aWR0aCAvIChpc19tcGVnMSA/IDIgOiAxKTsKLQkJCWZtdC5oZWlnaHQgPSBpdHYtPnBhcmFtcy5oZWlnaHQ7Ci0JCQlmbXQuY29kZSA9IFY0TDJfTUJVU19GTVRfRklYRUQ7Ci0JCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIHZpZGVvLCBzX21idXNfZm10LCAmZm10KTsKLQkJfQotCQllcnIgPSBjeDIzNDF4X3VwZGF0ZShpdHYsIGl2dHZfYXBpX2Z1bmMsICZpdHYtPnBhcmFtcywgJnApOwotCQlpZiAoIWVyciAmJiBpdHYtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10KQotCQkJZXJyID0gaXZ0dl9zZXR1cF92YmlfZm10KGl0diwgcC5zdHJlYW1fdmJpX2ZtdCk7Ci0JCWl0di0+cGFyYW1zID0gcDsKLQkJaXR2LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzMDA7Ci0JCWlkeCA9IHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDM7Ci0JCS8qIFRoZSBhdWRpbyBjbG9jayBvZiB0aGUgZGlnaXRpemVyIG11c3QgbWF0Y2ggdGhlIGNvZGVjIHNhbXBsZQotCQkgICByYXRlIG90aGVyd2lzZSB5b3UgZ2V0IHNvbWUgdmVyeSBzdHJhbmdlIGVmZmVjdHMuICovCi0JCWlmIChpZHggPCBBUlJBWV9TSVpFKGZyZXFzKSkKLQkJCWl2dHZfY2FsbF9hbGwoaXR2LCBhdWRpbywgc19jbG9ja19mcmVxLCBmcmVxc1tpZHhdKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7CisJLyogVGhlIGF1ZGlvIGNsb2NrIG9mIHRoZSBkaWdpdGl6ZXIgbXVzdCBtYXRjaCB0aGUgY29kZWMgc2FtcGxlCisJICAgcmF0ZSBvdGhlcndpc2UgeW91IGdldCBzb21lIHZlcnkgc3RyYW5nZSBlZmZlY3RzLiAqLworCWlmIChpZHggPCBBUlJBWV9TSVpFKGZyZXFzKSkKKwkJaXZ0dl9jYWxsX2FsbChpdHYsIGF1ZGlvLCBzX2Nsb2NrX2ZyZXEsIGZyZXFzW2lkeF0pOworCXJldHVybiAwOwogfQogCi1pbnQgaXZ0dl90cnlfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKQorc3RhdGljIGludCBpdnR2X3NfYXVkaW9fbW9kZShzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpjeGhkbCwgdTMyIHZhbCkKIHsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gKChzdHJ1Y3QgaXZ0dl9vcGVuX2lkICopZmgpLT5pdHY7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZihjeGhkbCwgc3RydWN0IGl2dHYsIGN4aGRsKTsKIAotCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19VU0VSKSB7Ci0JCWludCBpOwotCQlpbnQgZXJyID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgYy0+Y291bnQ7IGkrKykgewotCQkJZXJyID0gaXZ0dl90cnlfY3RybChmaWxlLCBmaCwgJmMtPmNvbnRyb2xzW2ldKTsKLQkJCWlmIChlcnIpIHsKLQkJCQljLT5lcnJvcl9pZHggPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQotCQlyZXR1cm4gY3gyMzQxeF9leHRfY3RybHMoJml0di0+cGFyYW1zLCBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpLCBjLCBWSURJT0NfVFJZX0VYVF9DVFJMUyk7Ci0JcmV0dXJuIC1FSU5WQUw7CisJaXR2LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSB2YWw7CisJcmV0dXJuIDA7CiB9CisKK3N0cnVjdCBjeDIzNDF4X2hhbmRsZXJfb3BzIGl2dHZfY3hoZGxfb3BzID0geworCS5zX2F1ZGlvX21vZGUgPSBpdnR2X3NfYXVkaW9fbW9kZSwKKwkuc19hdWRpb19zYW1wbGluZ19mcmVxID0gaXZ0dl9zX2F1ZGlvX3NhbXBsaW5nX2ZyZXEsCisJLnNfdmlkZW9fZW5jb2RpbmcgPSBpdnR2X3NfdmlkZW9fZW5jb2RpbmcsCisJLnNfc3RyZWFtX3ZiaV9mbXQgPSBpdnR2X3Nfc3RyZWFtX3ZiaV9mbXQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmgKaW5kZXggMWM3NzIxZS4uZDEyODkzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5oCkBAIC0yMSwxMCArMjEsNiBAQAogI2lmbmRlZiBJVlRWX0NPTlRST0xTX0gKICNkZWZpbmUgSVZUVl9DT05UUk9MU19ICiAKLWludCBpdnR2X3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYSk7Ci1pbnQgaXZ0dl9nX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYSk7Ci1pbnQgaXZ0dl9zX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqYSk7Ci1pbnQgaXZ0dl90cnlfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICphKTsKLWludCBpdnR2X3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSAqYSk7CitleHRlcm4gc3RydWN0IGN4MjM0MXhfaGFuZGxlcl9vcHMgaXZ0dl9jeGhkbF9vcHM7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCA5MGRhYTZlLi5lNDIxZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgIml2dHYtY2FyZHMuaCIKICNpbmNsdWRlICJpdnR2LXZiaS5oIgogI2luY2x1ZGUgIml2dHYtcm91dGluZy5oIgorI2luY2x1ZGUgIml2dHYtY29udHJvbHMuaCIKICNpbmNsdWRlICJpdnR2LWdwaW8uaCIKIAogI2luY2x1ZGUgPG1lZGlhL3R2ZWVwcm9tLmg+CkBAIC03MDUsNiArNzA2LDggQEAKICAqLwogc3RhdGljIGludCBfX2RldmluaXQgaXZ0dl9pbml0X3N0cnVjdDEoc3RydWN0IGl2dHYgKml0dikKIHsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IDk5IH07CisKIAlpdHYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpdHYtPnBkZXYsIDApOwogCWl0di0+ZW5jX21ib3gubWF4X21ib3ggPSAyOyAvKiB0aGUgZW5jb2RlciBoYXMgMyBtYWlsYm94ZXMgKDAtMikgKi8KIAlpdHYtPmRlY19tYm94Lm1heF9tYm94ID0gMTsgLyogdGhlIGRlY29kZXIgaGFzIDIgbWFpbGJveGVzICgwLTEpICovCkBAIC03MTYsMjEgKzcxOSwyNCBAQAogCXNwaW5fbG9ja19pbml0KCZpdHYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZpdHYtPmRtYV9yZWdfbG9jayk7CiAKLQlpdHYtPmlycV93b3JrX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGl0di0+djRsMl9kZXYubmFtZSk7Ci0JaWYgKGl0di0+aXJxX3dvcmtfcXVldWVzID09IE5VTEwpIHsKLQkJSVZUVl9FUlIoIkNvdWxkIG5vdCBjcmVhdGUgaXZ0diB3b3JrcXVldWVcbiIpOworCWluaXRfa3RocmVhZF93b3JrZXIoJml0di0+aXJxX3dvcmtlcik7CisJaXR2LT5pcnFfd29ya2VyX3Rhc2sgPSBrdGhyZWFkX3J1bihrdGhyZWFkX3dvcmtlcl9mbiwgJml0di0+aXJxX3dvcmtlciwKKwkJCQkJICAgaXR2LT52NGwyX2Rldi5uYW1lKTsKKwlpZiAoSVNfRVJSKGl0di0+aXJxX3dvcmtlcl90YXNrKSkgeworCQlJVlRWX0VSUigiQ291bGQgbm90IGNyZWF0ZSBpdnR2IHRhc2tcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQorCS8qIG11c3QgdXNlIHRoZSBGSUZPIHNjaGVkdWxlciBhcyBpdCBpcyByZWFsdGltZSBzZW5zaXRpdmUgKi8KKwlzY2hlZF9zZXRzY2hlZHVsZXIoaXR2LT5pcnFfd29ya2VyX3Rhc2ssIFNDSEVEX0ZJRk8sICZwYXJhbSk7CiAKLQlJTklUX1dPUksoJml0di0+aXJxX3dvcmtfcXVldWUsIGl2dHZfaXJxX3dvcmtfaGFuZGxlcik7CisJaW5pdF9rdGhyZWFkX3dvcmsoJml0di0+aXJxX3dvcmssIGl2dHZfaXJxX3dvcmtfaGFuZGxlcik7CiAKIAkvKiBzdGFydCBjb3VudGluZyBvcGVuX2lkIGF0IDEgKi8KIAlpdHYtPm9wZW5faWQgPSAxOwogCiAJLyogSW5pdGlhbCBzZXR0aW5ncyAqLwotCWN4MjM0MXhfZmlsbF9kZWZhdWx0cygmaXR2LT5wYXJhbXMpOwotCWl0di0+cGFyYW1zLnBvcnQgPSBDWDIzNDFYX1BPUlRfTUVNT1JZOwotCWl0di0+cGFyYW1zLmNhcGFiaWxpdGllcyA9IENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJOworCWl0di0+Y3hoZGwucG9ydCA9IENYMjM0MVhfUE9SVF9NRU1PUlk7CisJaXR2LT5jeGhkbC5jYXBhYmlsaXRpZXMgPSBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpdHYtPmVvc193YWl0cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaXR2LT5ldmVudF93YWl0cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaXR2LT52c3luY193YWl0cSk7CkBAIC0xMDAwLDEzICsxMDA2LDIwIEBACiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwogCX0KKwlyZXR2YWwgPSBjeDIzNDF4X2hhbmRsZXJfaW5pdCgmaXR2LT5jeGhkbCwgNTApOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyOworCWl0di0+djRsMl9kZXYuY3RybF9oYW5kbGVyID0gJml0di0+Y3hoZGwuaGRsOworCWl0di0+Y3hoZGwub3BzID0gJml2dHZfY3hoZGxfb3BzOworCWl0di0+Y3hoZGwucHJpdiA9IGl0djsKKwlpdHYtPmN4aGRsLmZ1bmMgPSBpdnR2X2FwaV9mdW5jOwogCiAJSVZUVl9ERUJVR19JTkZPKCJiYXNlIGFkZHI6IDB4JTA4eFxuIiwgaXR2LT5iYXNlX2FkZHIpOwogCiAJLyogUENJIERldmljZSBTZXR1cCAqLwogCXJldHZhbCA9IGl2dHZfc2V0dXBfcGNpKGl0diwgcGRldiwgcGNpX2lkKTsKIAlpZiAocmV0dmFsID09IC1FSU8pCi0JCWdvdG8gZnJlZV93b3JrcXVldWU7CisJCWdvdG8gZnJlZV93b3JrZXI7CiAJaWYgKHJldHZhbCA9PSAtRU5YSU8pCiAJCWdvdG8gZnJlZV9tZW07CiAKQEAgLTExMjEsNyArMTEzNCw3IEBACiAJaXR2LT55dXZfaW5mby52NGwyX3NyY193ID0gaXR2LT55dXZfaW5mby5vc2RfZnVsbF93OwogCWl0di0+eXV2X2luZm8udjRsMl9zcmNfaCA9IGl0di0+eXV2X2luZm8ub3NkX2Z1bGxfaDsKIAotCWl0di0+cGFyYW1zLnZpZGVvX2dvcF9zaXplID0gaXR2LT5pc182MGh6ID8gMTUgOiAxMjsKKwljeDIzNDF4X2hhbmRsZXJfc2V0XzUwaHooJml0di0+Y3hoZGwsIGl0di0+aXNfNTBoeik7CiAKIAlpdHYtPnN0cmVhbV9idWZfc2l6ZVtJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEddID0gMHgwODAwMDsKIAlpdHYtPnN0cmVhbV9idWZfc2l6ZVtJVlRWX0VOQ19TVFJFQU1fVFlQRV9QQ01dID0gMHgwMTIwMDsKQEAgLTEyMTgsOCArMTIzMSw4IEBACiAJcmVsZWFzZV9tZW1fcmVnaW9uKGl0di0+YmFzZV9hZGRyICsgSVZUVl9SRUdfT0ZGU0VULCBJVlRWX1JFR19TSVpFKTsKIAlpZiAoaXR2LT5oYXNfY3gyMzQxNSkKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGl0di0+YmFzZV9hZGRyICsgSVZUVl9ERUNPREVSX09GRlNFVCwgSVZUVl9ERUNPREVSX1NJWkUpOwotZnJlZV93b3JrcXVldWU6Ci0JZGVzdHJveV93b3JrcXVldWUoaXR2LT5pcnFfd29ya19xdWV1ZXMpOworZnJlZV93b3JrZXI6CisJa3RocmVhZF9zdG9wKGl0di0+aXJxX3dvcmtlcl90YXNrKTsKIGVycjoKIAlpZiAocmV0dmFsID09IDApCiAJCXJldHZhbCA9IC1FTk9ERVY7CkBAIC0xMjYzLDE1ICsxMjc2LDggQEAKIAlJVlRWX0RFQlVHX0lORk8oIkdldHRpbmcgZmlybXdhcmUgdmVyc2lvbi4uXG4iKTsKIAlpdnR2X2Zpcm13YXJlX3ZlcnNpb25zKGl0dik7CiAKLQlpZiAoaXR2LT5jYXJkLT5od19hbGwgJiBJVlRWX0hXX0NYMjU4NDApIHsKLQkJc3RydWN0IHY0bDJfY29udHJvbCBjdHJsOwotCisJaWYgKGl0di0+Y2FyZC0+aHdfYWxsICYgSVZUVl9IV19DWDI1ODQwKQogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfdmlkZW8sIGNvcmUsIGxvYWRfZncpOwotCQkvKiBDWDI1ODQwX0NJRF9FTkFCTEVfUFZSMTUwX1dPUktBUk9VTkQgKi8KLQkJY3RybC5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTsKLQkJY3RybC52YWx1ZSA9IGl0di0+cHZyMTUwX3dvcmthcm91bmQ7Ci0JCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgY29yZSwgc19jdHJsLCAmY3RybCk7Ci0JfQogCiAJdmYudHVuZXIgPSAwOwogCXZmLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKQEAgLTEzMjMsNiArMTMyOSw4IEBACiAJLyogRm9yIGNhcmRzIHdpdGggdmlkZW8gb3V0LCB0aGlzIGNhbGwgbmVlZHMgaW50ZXJydXB0cyBlbmFibGVkICovCiAJaXZ0dl9zX3N0ZChOVUxMLCAmZmgsICZpdHYtPnR1bmVyX3N0ZCk7CiAKKwkvKiBTZXR1cCBpbml0aWFsIGNvbnRyb2xzICovCisJY3gyMzQxeF9oYW5kbGVyX3NldHVwKCZpdHYtPmN4aGRsKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2Myw5ICsxMzcxLDkgQEAKIAlpdnR2X3NldF9pcnFfbWFzayhpdHYsIDB4ZmZmZmZmZmYpOwogCWRlbF90aW1lcl9zeW5jKCZpdHYtPmRtYV90aW1lcik7CiAKLQkvKiBTdG9wIGFsbCBXb3JrIFF1ZXVlcyAqLwotCWZsdXNoX3dvcmtxdWV1ZShpdHYtPmlycV93b3JrX3F1ZXVlcyk7Ci0JZGVzdHJveV93b3JrcXVldWUoaXR2LT5pcnFfd29ya19xdWV1ZXMpOworCS8qIEtpbGwgaXJxIHdvcmtlciAqLworCWZsdXNoX2t0aHJlYWRfd29ya2VyKCZpdHYtPmlycV93b3JrZXIpOworCWt0aHJlYWRfc3RvcChpdHYtPmlycV93b3JrZXJfdGFzayk7CiAKIAlpdnR2X3N0cmVhbXNfY2xlYW51cChpdHYsIDEpOwogCWl2dHZfdWRtYV9mcmVlKGl0dik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCmluZGV4IGJkMDg0ZGYuLjc1ODAzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWRyaXZlci5oCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1maC5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CkBAIC0yNjAsNyArMjYxLDYgQEAKICNkZWZpbmUgSVZUVl9GX0lfREVDX1BBVVNFRAkgICAyMCAJLyogdGhlIGRlY29kZXIgaXMgcGF1c2VkICovCiAjZGVmaW5lIElWVFZfRl9JX0lOSVRFRAkJICAgMjEgCS8qIHNldCBhZnRlciBmaXJzdCBvcGVuICovCiAjZGVmaW5lIElWVFZfRl9JX0ZBSUxFRAkJICAgMjIgCS8qIHNldCBpZiBmaXJzdCBvcGVuIGZhaWxlZCAqLwotI2RlZmluZSBJVlRWX0ZfSV9XT1JLX0lOSVRFRCAgICAgICAyMwkvKiB3b3JrZXIgdGhyZWFkIHdhcyBpbml0aWFsaXplZCAqLwogCiAvKiBFdmVudCBub3RpZmljYXRpb25zICovCiAjZGVmaW5lIElWVFZfRl9JX0VWX0RFQ19TVE9QUEVECSAgIDI4CS8qIGRlY29kZXIgc3RvcHBlZCBldmVudCAqLwpAQCAtNjMyLDYgKzYzMiw4IEBACiAJc3RydWN0IGl2dHZfb3B0aW9ucyBvcHRpb25zOyAJLyogdXNlciBvcHRpb25zICovCiAKIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IGN4MjM0MXhfaGFuZGxlciBjeGhkbDsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsX2dwaW87CiAJc3RydWN0IHY0bDJfc3ViZGV2IHNkX2dwaW87CS8qIEdQSU8gc3ViLWRldmljZSAqLwogCXUxNiBpbnN0YW5jZTsKIApAQCAtNjQ5LDcgKzY1MSw2IEBACiAJdjRsMl9zdGRfaWQgc3RkX291dDsgICAgICAgICAgICAvKiBjdXJyZW50IFRWIG91dHB1dCBzdGFuZGFyZCAqLwogCXU4IGF1ZGlvX3N0ZXJlb19tb2RlOyAgICAgICAgICAgLyogZGVjb2RlciBzZXR0aW5nIGhvdyB0byBoYW5kbGUgc3RlcmVvIE1QRUcgYXVkaW8gKi8KIAl1OCBhdWRpb19iaWxpbmd1YWxfbW9kZTsgICAgICAgIC8qIGRlY29kZXIgc2V0dGluZyBob3cgdG8gaGFuZGxlIGJpbGluZ3VhbCBNUEVHIGF1ZGlvICovCi0Jc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgcGFyYW1zOyAgICAgICAgICAgICAgLyogY3VycmVudCBlbmNvZGVyIHBhcmFtZXRlcnMgKi8KIAogCiAJLyogTG9ja2luZyAqLwpAQCAtNjY2LDggKzY2Nyw5IEBACiAJLyogSW50ZXJydXB0cyAmIERNQSAqLwogCXUzMiBpcnFtYXNrOyAgICAgICAgICAgICAgICAgICAgLyogYWN0aXZlIGludGVycnVwdHMgKi8KIAl1MzIgaXJxX3JyX2lkeDsgICAgICAgICAgICAgICAgIC8qIHJvdW5kLXJvYmluIHN0cmVhbSBpbmRleCAqLwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppcnFfd29ya19xdWV1ZXM7ICAgICAgIC8qIHdvcmtxdWV1ZSBmb3IgUElPL1lVVi9WQkkgYWN0aW9ucyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29ya19xdWV1ZTsgICAgICAgICAgICAgIC8qIHdvcmsgZW50cnkgKi8KKwlzdHJ1Y3Qga3RocmVhZF93b3JrZXIgaXJxX3dvcmtlcjsJCS8qIGt0aHJlYWQgd29ya2VyIGZvciBQSU8vWVVWL1ZCSSBhY3Rpb25zICovCisJc3RydWN0IHRhc2tfc3RydWN0ICppcnFfd29ya2VyX3Rhc2s7CQkvKiB0YXNrIGZvciBpcnFfd29ya2VyICovCisJc3RydWN0IGt0aHJlYWRfd29yayBpcnFfd29yazsJLyoga3RocmVhZCB3b3JrIGVudHJ5ICovCiAJc3BpbmxvY2tfdCBkbWFfcmVnX2xvY2s7ICAgICAgICAvKiBsb2NrIGFjY2VzcyB0byBETUEgZW5naW5lIHJlZ2lzdGVycyAqLwogCWludCBjdXJfZG1hX3N0cmVhbTsJCS8qIGluZGV4IG9mIGN1cnJlbnQgc3RyZWFtIGRvaW5nIERNQSAoLTEgaWYgbm9uZSkgKi8KIAlpbnQgY3VyX3Bpb19zdHJlYW07CQkvKiBpbmRleCBvZiBjdXJyZW50IHN0cmVhbSBkb2luZyBQSU8gKC0xIGlmIG5vbmUpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKaW5kZXggYTZhMmNkYi4uZDcyNzQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYwpAQCAtMTUwLDEyICsxNTAsMTAgQEAKIHN0YXRpYyB2b2lkIGl2dHZfZHVhbHdhdGNoKHN0cnVjdCBpdnR2ICppdHYpCiB7CiAJc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JdTMyIG5ld19iaXRtYXA7CiAJdTMyIG5ld19zdGVyZW9fbW9kZTsKLQljb25zdCB1MzIgc3RlcmVvX21hc2sgPSAweDAzMDA7Ci0JY29uc3QgdTMyIGR1YWwgPSAweDAyMDA7CisJY29uc3QgdTMyIGR1YWwgPSAweDAyOwogCi0JbmV3X3N0ZXJlb19tb2RlID0gaXR2LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIHN0ZXJlb19tYXNrOworCW5ld19zdGVyZW9fbW9kZSA9IHY0bDJfY3RybF9nX2N0cmwoaXR2LT5jeGhkbC5hdWRpb19tb2RlKTsKIAltZW1zZXQoJnZ0LCAwLCBzaXplb2YodnQpKTsKIAlpdnR2X2NhbGxfYWxsKGl0diwgdHVuZXIsIGdfdHVuZXIsICZ2dCk7CiAJaWYgKHZ0LmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyICYmICh2dC5yeHN1YmNoYW5zICYgVjRMMl9UVU5FUl9TVUJfTEFORzIpKQpAQCAtMTY0LDE2ICsxNjIsMTAgQEAKIAlpZiAobmV3X3N0ZXJlb19tb2RlID09IGl0di0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlKQogCQlyZXR1cm47CiAKLQluZXdfYml0bWFwID0gbmV3X3N0ZXJlb19tb2RlIHwgKGl0di0+cGFyYW1zLmF1ZGlvX3Byb3BlcnRpZXMgJiB+c3RlcmVvX21hc2spOwotCi0JSVZUVl9ERUJVR19JTkZPKCJkdWFsd2F0Y2g6IGNoYW5nZSBzdGVyZW8gZmxhZyBmcm9tIDB4JXggdG8gMHgleC4gbmV3IGF1ZGlvX2JpdG1hc2s9MHgldXhcbiIsCi0JCQkgICBpdHYtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSwgbmV3X3N0ZXJlb19tb2RlLCBuZXdfYml0bWFwKTsKLQotCWlmIChpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0VOQ19TRVRfQVVESU9fUFJPUEVSVElFUywgMSwgbmV3X2JpdG1hcCkgPT0gMCkgewotCQlpdHYtPmR1YWx3YXRjaF9zdGVyZW9fbW9kZSA9IG5ld19zdGVyZW9fbW9kZTsKLQkJcmV0dXJuOwotCX0KLQlJVlRWX0RFQlVHX0lORk8oImR1YWx3YXRjaDogY2hhbmdpbmcgc3RlcmVvIGZsYWcgZmFpbGVkXG4iKTsKKwlJVlRWX0RFQlVHX0lORk8oImR1YWx3YXRjaDogY2hhbmdlIHN0ZXJlbyBmbGFnIGZyb20gMHgleCB0byAweCV4LlxuIiwKKwkJCSAgIGl0di0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlLCBuZXdfc3RlcmVvX21vZGUpOworCWlmICh2NGwyX2N0cmxfc19jdHJsKGl0di0+Y3hoZGwuYXVkaW9fbW9kZSwgbmV3X3N0ZXJlb19tb2RlKSkKKwkJSVZUVl9ERUJVR19JTkZPKCJkdWFsd2F0Y2g6IGNoYW5naW5nIHN0ZXJlbyBmbGFnIGZhaWxlZFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGl2dHZfdXBkYXRlX3BnbV9pbmZvKHN0cnVjdCBpdnR2ICppdHYpCkBAIC04OTQsNyArODg2LDggQEAKIAkJaWYgKGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKSB7CiAJCQkvKiBVbmRvIHZpZGVvIG11dGUgKi8KIAkJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX01VVEVfVklERU8sIDEsCi0JCQkJaXR2LT5wYXJhbXMudmlkZW9fbXV0ZSB8IChpdHYtPnBhcmFtcy52aWRlb19tdXRlX3l1diA8PCA4KSk7CisJCQkJdjRsMl9jdHJsX2dfY3RybChpdHYtPmN4aGRsLnZpZGVvX211dGUpIHwKKwkJCQkodjRsMl9jdHJsX2dfY3RybChpdHYtPmN4aGRsLnZpZGVvX211dGVfeXV2KSA8PCA4KSk7CiAJCX0KIAkJLyogRG9uZSEgVW5tdXRlIGFuZCBjb250aW51ZS4gKi8KIAkJaXZ0dl91bm11dGUoaXR2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IGQ4YmYyYjAuLjRkZjAxOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjQ4LDkgKzI0OCw5IEBACiAJdm9sYXRpbGUgdTggX19pb21lbSAqbWVtX29mZnNldDsKIAogCWRhdGFbMF0gPSAwOwotCWRhdGFbMV0gPSBpdHYtPnBhcmFtcy53aWR0aDsJLyogWVVWIHNvdXJjZSB3aWR0aCAqLwotCWRhdGFbMl0gPSBpdHYtPnBhcmFtcy5oZWlnaHQ7Ci0JZGF0YVszXSA9IGl0di0+cGFyYW1zLmF1ZGlvX3Byb3BlcnRpZXM7CS8qIEF1ZGlvIHNldHRpbmdzIHRvIHVzZSwKKwlkYXRhWzFdID0gaXR2LT5jeGhkbC53aWR0aDsJLyogWVVWIHNvdXJjZSB3aWR0aCAqLworCWRhdGFbMl0gPSBpdHYtPmN4aGRsLmhlaWdodDsKKwlkYXRhWzNdID0gaXR2LT5jeGhkbC5hdWRpb19wcm9wZXJ0aWVzOwkvKiBBdWRpbyBzZXR0aW5ncyB0byB1c2UsCiAJCQkJCQkJICAgYml0bWFwLiBzZWUgZG9jcy4gKi8KIAlpZiAoaXZ0dl9hcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfREVDT0RFUl9TT1VSQ0UsIDQsIGRhdGEpKSB7CiAJCUlWVFZfRVJSKCJpdnR2X2luaXRfbXBlZ19kZWNvZGVyIGZhaWxlZCB0byBzZXQgZGVjb2RlciBzb3VyY2VcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCmluZGV4IGFlZGUwNjEuLjhmMGQwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJpdnR2LWdwaW8uaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KIAogLyoKICAqIEdQSU8gYXNzaWdubWVudCBvZiBZdWFuIE1QRzYwMC9NUEcxNjAKQEAgLTE0OSwxNiArMTUwLDEwIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGl2dHYsIHNkX2dwaW8pOwogfQogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIGdwaW9fY3RybF9tdXRlID0gewotCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JLm1pbmltdW0gICAgICAgPSAwLAotCS5tYXhpbXVtICAgICAgID0gMSwKLQkuc3RlcCAgICAgICAgICA9IDEsCi0JLmRlZmF1bHRfdmFsdWUgPSAxLAotCS5mbGFncyAgICAgICAgID0gMCwKLX07CitzdGF0aWMgaW5saW5lIHN0cnVjdCB2NGwyX3N1YmRldiAqdG9fc2Qoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlyZXR1cm4gJmNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgaXZ0diwgaGRsX2dwaW8pLT5zZF9ncGlvOworfQogCiBzdGF0aWMgaW50IHN1YmRldl9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpCiB7CkBAIC0yNjIsNDAgKzI1NywyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHN1YmRldl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgc3ViZGV2X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gc2RfdG9faXZ0dihzZCk7CiAJdTE2IG1hc2ssIGRhdGE7CiAKLQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fTVVURSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbWFzayA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm1hc2s7Ci0JZGF0YSA9IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm11dGU7Ci0JY3RybC0+dmFsdWUgPSAocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpICYgbWFzaykgPT0gZGF0YTsKLQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX211dGUubWFzazsKKwkJZGF0YSA9IGN0cmwtPnZhbCA/IGl0di0+Y2FyZC0+Z3Bpb19hdWRpb19tdXRlLm11dGUgOiAwOworCQlpZiAobWFzaykKKwkJCXdyaXRlX3JlZygocmVhZF9yZWcoSVZUVl9SRUdfR1BJT19PVVQpICYgfm1hc2spIHwKKwkJCQkJKGRhdGEgJiBtYXNrKSwgSVZUVl9SRUdfR1BJT19PVVQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgc3ViZGV2X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBpdnR2ICppdHYgPSBzZF90b19pdnR2KHNkKTsKLQl1MTYgbWFzaywgZGF0YTsKLQotCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltYXNrID0gaXR2LT5jYXJkLT5ncGlvX2F1ZGlvX211dGUubWFzazsKLQlkYXRhID0gY3RybC0+dmFsdWUgPyBpdHYtPmNhcmQtPmdwaW9fYXVkaW9fbXV0ZS5tdXRlIDogMDsKLQlpZiAobWFzaykKLQkJd3JpdGVfcmVnKChyZWFkX3JlZyhJVlRWX1JFR19HUElPX09VVCkgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCBJVlRWX1JFR19HUElPX09VVCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3ViZGV2X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCWlmIChxYy0+aWQgIT0gVjRMMl9DSURfQVVESU9fTVVURSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JKnFjID0gZ3Bpb19jdHJsX211dGU7Ci0JcmV0dXJuIDA7Ci19CiAKIHN0YXRpYyBpbnQgc3ViZGV2X2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKQEAgLTMwNCw2ICsyODMsNyBAQAogCUlWVFZfSU5GTygiR1BJTyBzdGF0dXM6IERJUj0weCUwNHggT1VUPTB4JTA0eCBJTj0weCUwNHhcbiIsCiAJCQlyZWFkX3JlZyhJVlRWX1JFR19HUElPX0RJUiksIHJlYWRfcmVnKElWVFZfUkVHX0dQSU9fT1VUKSwKIAkJCXJlYWRfcmVnKElWVFZfUkVHX0dQSU9fSU4pKTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9sb2dfc3RhdHVzKCZpdHYtPmhkbF9ncGlvLCBzZC0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNywxMSArMzA3LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBncGlvX2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBzdWJkZXZfc19jdHJsLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzdWJkZXZfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSBzdWJkZXZfbG9nX3N0YXR1cywKLQkuZ19jdHJsID0gc3ViZGV2X2dfY3RybCwKLQkuc19jdHJsID0gc3ViZGV2X3NfY3RybCwKLQkucXVlcnljdHJsID0gc3ViZGV2X3F1ZXJ5Y3RybCwKKwkuZ19leHRfY3RybHMgPSB2NGwyX3N1YmRldl9nX2V4dF9jdHJscywKKwkudHJ5X2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3RyeV9leHRfY3RybHMsCisJLnNfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfc19leHRfY3RybHMsCisJLmdfY3RybCA9IHY0bDJfc3ViZGV2X2dfY3RybCwKKwkuc19jdHJsID0gdjRsMl9zdWJkZXZfc19jdHJsLAorCS5xdWVyeWN0cmwgPSB2NGwyX3N1YmRldl9xdWVyeWN0cmwsCisJLnF1ZXJ5bWVudSA9IHY0bDJfc3ViZGV2X3F1ZXJ5bWVudSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHN1YmRldl90dW5lcl9vcHMgPSB7CkBAIC0zNzUsNSArMzYzLDEyIEBACiAJdjRsMl9zdWJkZXZfaW5pdCgmaXR2LT5zZF9ncGlvLCAmc3ViZGV2X29wcyk7CiAJc25wcmludGYoaXR2LT5zZF9ncGlvLm5hbWUsIHNpemVvZihpdHYtPnNkX2dwaW8ubmFtZSksICIlcy1ncGlvIiwgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlpdHYtPnNkX2dwaW8uZ3JwX2lkID0gSVZUVl9IV19HUElPOworCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJml0di0+aGRsX2dwaW8sIDEpOworCXY0bDJfY3RybF9uZXdfc3RkKCZpdHYtPmhkbF9ncGlvLCAmZ3Bpb19jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX01VVEUsIDAsIDEsIDEsIDApOworCWlmIChpdHYtPmhkbF9ncGlvLmVycm9yKQorCQlyZXR1cm4gaXR2LT5oZGxfZ3Bpby5lcnJvcjsKKwlpdHYtPnNkX2dwaW8uY3RybF9oYW5kbGVyID0gJml0di0+aGRsX2dwaW87CisJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoJml0di0+aGRsX2dwaW8pOwogCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJml0di0+djRsMl9kZXYsICZpdHYtPnNkX2dwaW8pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwppbmRleCBhNWI5MmQxLi5kMzkxYmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIml2dHYtY2FyZHMuaCIKICNpbmNsdWRlICJpdnR2LWdwaW8uaCIKICNpbmNsdWRlICJpdnR2LWkyYy5oIgorI2luY2x1ZGUgPG1lZGlhL2N4MjU4NDAuaD4KIAogLyogaTJjIGltcGxlbWVudGF0aW9uIGZvciBjeDIzNDE1LzYgY2hpcCwgaXZ0diBwcm9qZWN0LgogICogQXV0aG9yOiBLZXZpbiBUaGF5ZXIgKG51ZmFuX3dmayBhdCB5YWhvby5jb20pCkBAIC0yOTIsNiArMjkzLDEyIEBACiAJaWYgKGh3ID09IElWVFZfSFdfVVBENjQwMzFBIHx8IGh3ID09IElWVFZfSFdfVVBENjQwOFgpIHsKIAkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAogCQkJCWFkYXAsIG1vZCwgdHlwZSwgMCwgSTJDX0FERFJTKGh3X2FkZHJzW2lkeF0pKTsKKwl9IGVsc2UgaWYgKGh3ID09IElWVFZfSFdfQ1gyNTg0MCkgeworCQlzdHJ1Y3QgY3gyNTg0MF9wbGF0Zm9ybV9kYXRhIHBkYXRhOworCisJCXBkYXRhLnB2cjE1MF93b3JrYXJvdW5kID0gaXR2LT5wdnIxNTBfd29ya2Fyb3VuZDsKKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2X2NmZygmaXR2LT52NGwyX2RldiwKKwkJCQlhZGFwLCBtb2QsIHR5cGUsIDAsICZwZGF0YSwgaHdfYWRkcnNbaWR4XSwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZpdHYtPnY0bDJfZGV2LAogCQkJCWFkYXAsIG1vZCwgdHlwZSwgaHdfYWRkcnNbaWR4XSwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCAxMWFjMmZhLi40ZWVkOTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCWRhdGFbMF0gfD0gKHNwZWVkID4gMTAwMCB8fCBzcGVlZCA8IC0xNTAwKSA/IDB4NDAwMDAwMDAgOiAwOwogCWRhdGFbMV0gPSAoc3BlZWQgPCAwKTsKIAlkYXRhWzJdID0gc3BlZWQgPCAwID8gMyA6IDc7Ci0JZGF0YVszXSA9IGl0di0+cGFyYW1zLnZpZGVvX2JfZnJhbWVzOworCWRhdGFbM10gPSB2NGwyX2N0cmxfZ19jdHJsKGl0di0+Y3hoZGwudmlkZW9fYl9mcmFtZXMpOwogCWRhdGFbNF0gPSAoc3BlZWQgPT0gMTUwMCB8fCBzcGVlZCA9PSA1MDApID8gaXR2LT5zcGVlZF9tdXRlX2F1ZGlvIDogMDsKIAlkYXRhWzVdID0gMDsKIAlkYXRhWzZdID0gMDsKQEAgLTMzOSw4ICszMzksOCBAQAogCXN0cnVjdCBpdnR2ICppdHYgPSBpZC0+aXR2OwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmbXQtPmZtdC5waXg7CiAKLQlwaXhmbXQtPndpZHRoID0gaXR2LT5wYXJhbXMud2lkdGg7Ci0JcGl4Zm10LT5oZWlnaHQgPSBpdHYtPnBhcmFtcy5oZWlnaHQ7CisJcGl4Zm10LT53aWR0aCA9IGl0di0+Y3hoZGwud2lkdGg7CisJcGl4Zm10LT5oZWlnaHQgPSBpdHYtPmN4aGRsLmhlaWdodDsKIAlwaXhmbXQtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwogCXBpeGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CiAJcGl4Zm10LT5wcml2ID0gMDsKQEAgLTU2OCw3ICs1NjgsNiBAQAogewogCXN0cnVjdCBpdnR2X29wZW5faWQgKmlkID0gZmg7CiAJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7Ci0Jc3RydWN0IGN4MjM0MXhfbXBlZ19wYXJhbXMgKnAgPSAmaXR2LT5wYXJhbXM7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKIAlpbnQgcmV0ID0gaXZ0dl90cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CkBAIC01NzcsMTUgKzU3NiwxNSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocC0+d2lkdGggPT0gdyAmJiBwLT5oZWlnaHQgPT0gaCkKKwlpZiAoaXR2LT5jeGhkbC53aWR0aCA9PSB3ICYmIGl0di0+Y3hoZGwuaGVpZ2h0ID09IGgpCiAJCXJldHVybiAwOwogCiAJaWYgKGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcC0+d2lkdGggPSB3OwotCXAtPmhlaWdodCA9IGg7Ci0JaWYgKHAtPnZpZGVvX2VuY29kaW5nID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCisJaXR2LT5jeGhkbC53aWR0aCA9IHc7CisJaXR2LT5jeGhkbC5oZWlnaHQgPSBoOworCWlmICh2NGwyX2N0cmxfZ19jdHJsKGl0di0+Y3hoZGwudmlkZW9fZW5jb2RpbmcpID09IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEpCiAJCWZtdC0+Zm10LnBpeC53aWR0aCAvPSAyOwogCW1idXNfZm10LndpZHRoID0gZm10LT5mbXQucGl4LndpZHRoOwogCW1idXNfZm10LmhlaWdodCA9IGg7CkBAIC0xMTE0LDkgKzExMTMsMTAgQEAKIAogCWl0di0+c3RkID0gKnN0ZDsKIAlpdHYtPmlzXzYwaHogPSAoKnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAxIDogMDsKLQlpdHYtPnBhcmFtcy5pc181MGh6ID0gaXR2LT5pc181MGh6ID0gIWl0di0+aXNfNjBoejsKLQlpdHYtPnBhcmFtcy53aWR0aCA9IDcyMDsKLQlpdHYtPnBhcmFtcy5oZWlnaHQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJaXR2LT5pc181MGh6ID0gIWl0di0+aXNfNjBoejsKKwljeDIzNDF4X2hhbmRsZXJfc2V0XzUwaHooJml0di0+Y3hoZGwsIGl0di0+aXNfNTBoeik7CisJaXR2LT5jeGhkbC53aWR0aCA9IDcyMDsKKwlpdHYtPmN4aGRsLmhlaWdodCA9IGl0di0+aXNfNTBoeiA/IDU3NiA6IDQ4MDsKIAlpdHYtPnZiaS5jb3VudCA9IGl0di0+aXNfNTBoeiA/IDE4IDogMTI7CiAJaXR2LT52Ymkuc3RhcnRbMF0gPSBpdHYtPmlzXzUwaHogPyA2IDogMTA7CiAJaXR2LT52Ymkuc3RhcnRbMV0gPSBpdHYtPmlzXzUwaHogPyAzMTggOiAyNzM7CkBAIC0xMTU3LDcgKzExNTcsNyBAQAogCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOwogCQlpdHYtPm1haW5fcmVjdC5sZWZ0ID0gaXR2LT5tYWluX3JlY3QudG9wID0gMDsKIAkJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7Ci0JCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+cGFyYW1zLmhlaWdodDsKKwkJaXR2LT5tYWluX3JlY3QuaGVpZ2h0ID0gaXR2LT5jeGhkbC5oZWlnaHQ7CiAJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCiAJCQk3MjAsIGl0di0+bWFpbl9yZWN0LmhlaWdodCwgMCwgMCk7CiAJCXlpLT5tYWluX3JlY3QgPSBpdHYtPm1haW5fcmVjdDsKQEAgLTE1NTQsNyArMTU1NCw3IEBACiAJfQogCUlWVFZfSU5GTygiVHVuZXI6ICAlc1xuIiwKIAkJdGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgPyAiUmFkaW8iIDogIlRWIik7Ci0JY3gyMzQxeF9sb2dfc3RhdHVzKCZpdHYtPnBhcmFtcywgaXR2LT52NGwyX2Rldi5uYW1lKTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9sb2dfc3RhdHVzKCZpdHYtPmN4aGRsLmhkbCwgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlJVlRWX0lORk8oIlN0YXR1cyBmbGFnczogICAgMHglMDhseFxuIiwgaXR2LT5pX2ZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVZUVl9NQVhfU1RSRUFNUzsgaSsrKSB7CiAJCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbaV07CkBAIC0xOTQyLDExICsxOTQyLDYgQEAKIAkudmlkaW9jX3NfcmVnaXN0ZXIgCQkgICAgPSBpdnR2X3NfcmVnaXN0ZXIsCiAjZW5kaWYKIAkudmlkaW9jX2RlZmF1bHQgCQkgICAgPSBpdnR2X2RlZmF1bHQsCi0JLnZpZGlvY19xdWVyeWN0cmwgCQkgICAgPSBpdnR2X3F1ZXJ5Y3RybCwKLQkudmlkaW9jX3F1ZXJ5bWVudSAJCSAgICA9IGl2dHZfcXVlcnltZW51LAotCS52aWRpb2NfZ19leHRfY3RybHMgCQkgICAgPSBpdnR2X2dfZXh0X2N0cmxzLAotCS52aWRpb2Nfc19leHRfY3RybHMgCQkgICAgPSBpdnR2X3NfZXh0X2N0cmxzLAotCS52aWRpb2NfdHJ5X2V4dF9jdHJscyAgICAJICAgID0gaXZ0dl90cnlfZXh0X2N0cmxzLAogCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50IAkgICAgPSBpdnR2X3N1YnNjcmliZV9ldmVudCwKIAkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50IAkgICAgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKaW5kZXggZmVhMWVjMy4uOWI0ZmFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaXJxLmMKQEAgLTcxLDE5ICs3MSwxMCBAQAogCXdyaXRlX3JlZyhJVlRWX0lSUV9FTkNfUElPX0NPTVBMRVRFLCAweDQ0KTsKIH0KIAotdm9pZCBpdnR2X2lycV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQordm9pZCBpdnR2X2lycV93b3JrX2hhbmRsZXIoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKIHsKLQlzdHJ1Y3QgaXZ0diAqaXR2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpdnR2LCBpcnFfd29ya19xdWV1ZSk7CisJc3RydWN0IGl2dHYgKml0diA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXZ0diwgaXJxX3dvcmspOwogCi0JREVGSU5FX1dBSVQod2FpdCk7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElWVFZfRl9JX1dPUktfSU5JVEVELCAmaXR2LT5pX2ZsYWdzKSkgewotCQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IDk5IH07Ci0KLQkJLyogVGhpcyB0aHJlYWQgbXVzdCB1c2UgdGhlIEZJRk8gc2NoZWR1bGVyIGFzIGl0Ci0JCSAgIGlzIHJlYWx0aW1lIHNlbnNpdGl2ZS4gKi8KLQkJc2NoZWRfc2V0c2NoZWR1bGVyKGN1cnJlbnQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci0JfQogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSVZUVl9GX0lfV09SS19IQU5ETEVSX1BJTywgJml0di0+aV9mbGFncykpCiAJCWl2dHZfcGlvX3dvcmtfaGFuZGxlcihpdHYpOwogCkBAIC05NzUsNyArOTY2LDcgQEAKIAl9CiAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElWVFZfRl9JX0hBVkVfV09SSywgJml0di0+aV9mbGFncykpIHsKLQkJcXVldWVfd29yayhpdHYtPmlycV93b3JrX3F1ZXVlcywgJml0di0+aXJxX3dvcmtfcXVldWUpOworCQlxdWV1ZV9rdGhyZWFkX3dvcmsoJml0di0+aXJxX3dvcmtlciwgJml0di0+aXJxX3dvcmspOwogCX0KIAogCXNwaW5fdW5sb2NrKCZpdHYtPmRtYV9yZWdfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5oCmluZGV4IGY4NzlhNTguLjFlODQ0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5oCkBAIC00Niw3ICs0Niw3IEBACiAKIGlycXJldHVybl90IGl2dHZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotdm9pZCBpdnR2X2lycV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaXZ0dl9pcnFfd29ya19oYW5kbGVyKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspOwogdm9pZCBpdnR2X2RtYV9zdHJlYW1fZGVjX3ByZXBhcmUoc3RydWN0IGl2dHZfc3RyZWFtICpzLCB1MzIgb2Zmc2V0LCBpbnQgbG9jayk7CiB2b2lkIGl2dHZfdW5maW5pc2hlZF9kbWEodW5zaWduZWQgbG9uZyBhcmcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggNTVkZjQxOS4uNTEyNjA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtMjEwLDYgKzIxMCw3IEBACiAKIAlzLT52ZGV2LT5udW0gPSBudW07CiAJcy0+dmRldi0+djRsMl9kZXYgPSAmaXR2LT52NGwyX2RldjsKKwlzLT52ZGV2LT5jdHJsX2hhbmRsZXIgPSBpdHYtPnY0bDJfZGV2LmN0cmxfaGFuZGxlcjsKIAlzLT52ZGV2LT5mb3BzID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5mb3BzOwogCXMtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAlzLT52ZGV2LT50dm5vcm1zID0gVjRMMl9TVERfQUxMOwpAQCAtNDUxLDcgKzQ1Miw2IEBACiB7CiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gcy0+aXR2OwotCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwogCWludCBjYXB0eXBlID0gMCwgc3VidHlwZSA9IDA7CiAJaW50IGVuYWJsZV9wYXNzdGhyb3VnaCA9IDA7CiAKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCQl9CiAJCWl0di0+bXBnX2RhdGFfcmVjZWl2ZWQgPSBpdHYtPnZiaV9kYXRhX2luc2VydGVkID0gMDsKIAkJaXR2LT5kdWFsd2F0Y2hfamlmZmllcyA9IGppZmZpZXM7Ci0JCWl0di0+ZHVhbHdhdGNoX3N0ZXJlb19tb2RlID0gcC0+YXVkaW9fcHJvcGVydGllcyAmIDB4MDMwMDsKKwkJaXR2LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSB2NGwyX2N0cmxfZ19jdHJsKGl0di0+Y3hoZGwuYXVkaW9fbW9kZSk7CiAJCWl0di0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMDsKIAkJYnJlYWs7CiAKQEAgLTU2MCwxMiArNTYwLDEyIEBACiAJCQkJaXR2LT5wZ21faW5mb19vZmZzZXQsIGl0di0+cGdtX2luZm9fbnVtKTsKIAogCQkvKiBTZXR1cCBBUEkgZm9yIFN0cmVhbSAqLwotCQljeDIzNDF4X3VwZGF0ZShpdHYsIGl2dHZfYXBpX2Z1bmMsIE5VTEwsIHApOworCQljeDIzNDF4X2hhbmRsZXJfc2V0dXAoJml0di0+Y3hoZGwpOwogCiAJCS8qIG11dGUgaWYgY2FwdHVyaW5nIHJhZGlvICovCiAJCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSkKIAkJCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfRU5DX01VVEVfVklERU8sIDEsCi0JCQkJMSB8IChwLT52aWRlb19tdXRlX3l1diA8PCA4KSk7CisJCQkJMSB8ICh2NGwyX2N0cmxfZ19jdHJsKGl0di0+Y3hoZGwudmlkZW9fbXV0ZV95dXYpIDw8IDgpKTsKIAl9CiAKIAkvKiBWc3luYyBTZXR1cCAqLwpAQCAtNTgxLDYgKzU4MSw4IEBACiAKIAkJY2xlYXJfYml0KElWVFZfRl9JX0VPUywgJml0di0+aV9mbGFncyk7CiAKKwkJY3gyMzQxeF9oYW5kbGVyX3NldF9idXN5KCZpdHYtPmN4aGRsLCAxKTsKKwogCQkvKiBJbml0aWFsaXplIERpZ2l0aXplciBmb3IgQ2FwdHVyZSAqLwogCQkvKiBBdm9pZCB0aW5ueSBhdWRpbyBwcm9ibGVtIC0gZW5zdXJlIGF1ZGlvIGNsb2NrcyBhcmUgZ29pbmcgKi8KIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX2F1ZGlvLCBhdWRpbywgc19zdHJlYW0sIDEpOwpAQCAtNjE3LDcgKzYxOSw2IEBACiB7CiAJdTMyIGRhdGFbQ1gyMzQxWF9NQk9YX01BWF9EQVRBXTsKIAlzdHJ1Y3QgaXZ0diAqaXR2ID0gcy0+aXR2OwotCXN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwID0gJml0di0+cGFyYW1zOwogCWludCBkYXRhdHlwZTsKIAl1MTYgd2lkdGg7CiAJdTE2IGhlaWdodDsKQEAgLTYyNyw4ICs2MjgsOCBAQAogCiAJSVZUVl9ERUJVR19JTkZPKCJTZXR0aW5nIHNvbWUgaW5pdGlhbCBkZWNvZGVyIHNldHRpbmdzXG4iKTsKIAotCXdpZHRoID0gcC0+d2lkdGg7Ci0JaGVpZ2h0ID0gcC0+aGVpZ2h0OworCXdpZHRoID0gaXR2LT5jeGhkbC53aWR0aDsKKwloZWlnaHQgPSBpdHYtPmN4aGRsLmhlaWdodDsKIAogCS8qIHNldCBhdWRpbyBtb2RlIHRvIGxlZnQvc3RlcmVvICBmb3IgZHVhbC9zdGVyZW8gbW9kZS4gKi8KIAlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfQVVESU9fTU9ERSwgMiwgaXR2LT5hdWRpb19iaWxpbmd1YWxfbW9kZSwgaXR2LT5hdWRpb19zdGVyZW9fbW9kZSk7CkBAIC02NjgsNyArNjY5LDcgQEAKIAkJYnJlYWs7CiAJfQogCWlmIChpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfREVDT0RFUl9TT1VSQ0UsIDQsIGRhdGF0eXBlLAotCQkJd2lkdGgsIGhlaWdodCwgcC0+YXVkaW9fcHJvcGVydGllcykpIHsKKwkJCXdpZHRoLCBoZWlnaHQsIGl0di0+Y3hoZGwuYXVkaW9fcHJvcGVydGllcykpIHsKIAkJSVZUVl9ERUJVR19XQVJOKCJDb3VsZG4ndCBpbml0aWFsaXplIGRlY29kZXIgc291cmNlXG4iKTsKIAl9CiAKQEAgLTg0Nyw2ICs4NDgsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwljeDIzNDF4X2hhbmRsZXJfc2V0X2J1c3koJml0di0+Y3hoZGwsIDApOworCiAJLyogU2V0IHRoZSBmb2xsb3dpbmcgSW50ZXJydXB0IG1hc2sgYml0cyBmb3IgY2FwdHVyZSAqLwogCWl2dHZfc2V0X2lycV9tYXNrKGl0diwgSVZUVl9JUlFfTUFTS19DQVBUVVJFKTsKIAlkZWxfdGltZXIoJml0di0+ZG1hX3RpbWVyKTsKQEAgLTk2Nyw3ICs5NzAsOCBAQAogCiAJCS8qIFNldHVwIGNhcHR1cmUgaWYgbm90IGFscmVhZHkgZG9uZSAqLwogCQlpZiAoYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA9PSAwKSB7Ci0JCQljeDIzNDF4X3VwZGF0ZShpdHYsIGl2dHZfYXBpX2Z1bmMsIE5VTEwsICZpdHYtPnBhcmFtcyk7CisJCQljeDIzNDF4X2hhbmRsZXJfc2V0dXAoJml0di0+Y3hoZGwpOworCQkJY3gyMzQxeF9oYW5kbGVyX3NldF9idXN5KCZpdHYtPmN4aGRsLCAxKTsKIAkJfQogCiAJCS8qIFN0YXJ0IFBhc3N0aHJvdWdoIE1vZGUgKi8KQEAgLTk4OCw2ICs5OTIsOCBAQAogCWNsZWFyX2JpdChJVlRWX0ZfU19QQVNTVEhST1VHSCwgJmRlY19zdHJlYW0tPnNfZmxhZ3MpOwogCWNsZWFyX2JpdChJVlRWX0ZfU19TVFJFQU1JTkcsICZkZWNfc3RyZWFtLT5zX2ZsYWdzKTsKIAlpdHYtPm91dHB1dF9tb2RlID0gT1VUX05PTkU7CisJaWYgKGF0b21pY19yZWFkKCZpdHYtPmNhcHR1cmluZykgPT0gMCkKKwkJY3gyMzQxeF9oYW5kbGVyX3NldF9idXN5KCZpdHYtPmN4aGRsLCAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCmluZGV4IGU5ZGYzY2IuLjBlNDEyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKQEAgLTI4Myw1MSArMjgzLDYgQEAKIAkJbXNwX3dyaXRlX2RlbShjbGllbnQsIDB4NDAsIHN0YXRlLT5pMnNfbW9kZSk7CiB9CiAKLXZvaWQgbXNwX3NldF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCWludCBiYWwgPSAwLCBiYXNzLCB0cmVibGUsIGxvdWRuZXNzOwotCWludCB2YWwgPSAwOwotCWludCByZWFsbHltdXRlZCA9IHN0YXRlLT5tdXRlZCB8IHN0YXRlLT5zY2FuX2luX3Byb2dyZXNzOwotCi0JaWYgKCFyZWFsbHltdXRlZCkKLQkJdmFsID0gKHN0YXRlLT52b2x1bWUgKiAweDdmIC8gNjU1MzUpIDw8IDg7Ci0KLQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXV0ZT0lcyBzY2FubmluZz0lcyB2b2x1bWU9JWRcbiIsCi0JCXN0YXRlLT5tdXRlZCA/ICJvbiIgOiAib2ZmIiwKLQkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPyAieWVzIiA6ICJubyIsCi0JCXN0YXRlLT52b2x1bWUpOwotCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMCwgdmFsKTsKLQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA3LCByZWFsbHltdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKLQlpZiAoc3RhdGUtPmhhc19zY2FydDJfb3V0X3ZvbHVtZSkKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDA0MCwgcmVhbGx5bXV0ZWQgPyAweDEgOiAodmFsIHwgMHgxKSk7Ci0JaWYgKHN0YXRlLT5oYXNfaGVhZHBob25lcykKLQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNiwgdmFsKTsKLQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJcmV0dXJuOwotCi0JaWYgKHZhbCkKLQkJYmFsID0gKHU4KSgoc3RhdGUtPmJhbGFuY2UgLyAyNTYpIC0gMTI4KTsKLQliYXNzID0gKChzdGF0ZS0+YmFzcyAtIDMyNzY4KSAqIDB4NjAgLyA2NTUzNSkgPDwgODsKLQl0cmVibGUgPSAoKHN0YXRlLT50cmVibGUgLSAzMjc2OCkgKiAweDYwIC8gNjU1MzUpIDw8IDg7Ci0JbG91ZG5lc3MgPSBzdGF0ZS0+bG91ZG5lc3MgPyAoKDUgKiA0KSA8PCA4KSA6IDA7Ci0KLQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAiYmFsYW5jZT0lZCBiYXNzPSVkIHRyZWJsZT0lZCBsb3VkbmVzcz0lZFxuIiwKLQkJc3RhdGUtPmJhbGFuY2UsIHN0YXRlLT5iYXNzLCBzdGF0ZS0+dHJlYmxlLCBzdGF0ZS0+bG91ZG5lc3MpOwotCi0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwMSwgYmFsIDw8IDgpOwotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDIsIGJhc3MpOwotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDMsIHRyZWJsZSk7Ci0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAwNCwgbG91ZG5lc3MpOwotCWlmICghc3RhdGUtPmhhc19oZWFkcGhvbmVzKQotCQlyZXR1cm47Ci0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMCwgYmFsIDw8IDgpOwotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMzEsIGJhc3MpOwotCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMzIsIHRyZWJsZSk7Ci0JbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMywgbG91ZG5lc3MpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHZvaWQgbXNwX3dha2VfdGhyZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC0zNjMsNDEgKzMxOCw2MCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBtc3BfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IG1zcF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IGN0cmxfdG9fc3RhdGUoY3RybCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnN0YXRlLT5zZCk7CisJaW50IHZhbCA9IGN0cmwtPnZhbDsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+dm9sdW1lOwotCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogeworCQkvKiBhdWRpbyB2b2x1bWUgY2x1c3RlciAqLworCQlpbnQgcmVhbGx5bXV0ZWQgPSBzdGF0ZS0+bXV0ZWQtPnZhbCB8IHN0YXRlLT5zY2FuX2luX3Byb2dyZXNzOwogCi0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5tdXRlZDsKLQkJYnJlYWs7CisJCWlmICghcmVhbGx5bXV0ZWQpCisJCQl2YWwgPSAodmFsICogMHg3ZiAvIDY1NTM1KSA8PCA4OwogCi0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5iYWxhbmNlOworCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LCAibXV0ZT0lcyBzY2FubmluZz0lcyB2b2x1bWU9JWRcbiIsCisJCQkJc3RhdGUtPm11dGVkLT52YWwgPyAib24iIDogIm9mZiIsCisJCQkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPyAieWVzIiA6ICJubyIsCisJCQkJc3RhdGUtPnZvbHVtZS0+dmFsKTsKKworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAwLCB2YWwpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA3LCByZWFsbHltdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKKwkJaWYgKHN0YXRlLT5oYXNfc2NhcnQyX291dF92b2x1bWUpCisJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDQwLCByZWFsbHltdXRlZCA/IDB4MSA6ICh2YWwgfCAweDEpKTsKKwkJaWYgKHN0YXRlLT5oYXNfaGVhZHBob25lcykKKwkJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDYsIHZhbCk7CiAJCWJyZWFrOworCX0KIAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJaWYgKCFzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YmFzczsKKwkJdmFsID0gKCh2YWwgLSAzMjc2OCkgKiAweDYwIC8gNjU1MzUpIDw8IDg7CisJCW1zcF93cml0ZV9kc3AoY2xpZW50LCAweDAwMDIsIHZhbCk7CisJCWlmIChzdGF0ZS0+aGFzX2hlYWRwaG9uZXMpCisJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDMxLCB2YWwpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT50cmVibGU7CisJCXZhbCA9ICgodmFsIC0gMzI3NjgpICogMHg2MCAvIDY1NTM1KSA8PCA4OworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAzLCB2YWwpOworCQlpZiAoc3RhdGUtPmhhc19oZWFkcGhvbmVzKQorCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMiwgdmFsKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJCXJldHVybiAtRUlOVkFMOwotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5sb3VkbmVzczsKKwkJdmFsID0gdmFsID8gKCg1ICogNCkgPDwgOCkgOiAwOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDA0LCB2YWwpOworCQlpZiAoc3RhdGUtPmhhc19oZWFkcGhvbmVzKQorCQkJbXNwX3dyaXRlX2RzcChjbGllbnQsIDB4MDAzMywgdmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCXZhbCA9ICh1OCkoKHZhbCAvIDI1NikgLSAxMjgpOworCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDAxLCB2YWwgPDwgOCk7CisJCWlmIChzdGF0ZS0+aGFzX2hlYWRwaG9uZXMpCisJCQltc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgwMDMwLCB2YWwgPDwgOCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTQwNiw1MyArMzgwLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtc3Bfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit2b2lkIG1zcF91cGRhdGVfdm9sdW1lKHN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJc3RhdGUtPnZvbHVtZSA9IGN0cmwtPnZhbHVlOwotCQlpZiAoc3RhdGUtPnZvbHVtZSA9PSAwKQotCQkJc3RhdGUtPmJhbGFuY2UgPSAzMjc2ODsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPj0gMikKLQkJCXJldHVybiAtRVJBTkdFOwotCQlzdGF0ZS0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN0YXRlLT5iYXNzID0gY3RybC0+dmFsdWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN0YXRlLT50cmVibGUgPSBjdHJsLT52YWx1ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJCXJldHVybiAtRUlOVkFMOwotCQlzdGF0ZS0+bG91ZG5lc3MgPSBjdHJsLT52YWx1ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWlmICghc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN0YXRlLT5iYWxhbmNlID0gY3RybC0+dmFsdWU7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKLQlyZXR1cm4gMDsKKwl2NGwyX2N0cmxfc19jdHJsKHN0YXRlLT52b2x1bWUsIHY0bDJfY3RybF9nX2N0cmwoc3RhdGUtPnZvbHVtZSkpOwogfQogCiAvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCkBAIC00NzIsNyArNDAyLDcgQEAKIAkJbXNwMzQwMGNfc2V0X21vZGUoY2xpZW50LCBNU1BfTU9ERV9GTV9SQURJTyk7CiAJCW1zcDM0MDBjX3NldF9jYXJyaWVyKGNsaWVudCwgTVNQX0NBUlJJRVIoMTAuNyksCiAJCQkJTVNQX0NBUlJJRVIoMTAuNykpOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCW1zcF91cGRhdGVfdm9sdW1lKHN0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSBPUE1PREVfQVVUT0RFVEVDVDoKIAljYXNlIE9QTU9ERV9BVVRPU0VMRUNUOgpAQCAtNTkyLDMzICs1MjIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1zcF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKLXsKLQlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQotCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3dpdGNoIChxYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1zcF9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7CiAJc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC02MzMsMTkgKzUzNiwxNCBAQAogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAljb25zdCBjaGFyICpwOworCWNoYXIgcHJlZml4W1Y0TDJfU1VCREVWX05BTUVfU0laRSArIDIwXTsKIAogCWlmIChzdGF0ZS0+b3Btb2RlID09IE9QTU9ERV9BVVRPU0VMRUNUKQogCQltc3BfZGV0ZWN0X3N0ZXJlbyhjbGllbnQpOwogCXY0bF9pbmZvKGNsaWVudCwgIiVzIHJldjEgPSAweCUwNHggcmV2MiA9IDB4JTA0eFxuIiwKIAkJCWNsaWVudC0+bmFtZSwgc3RhdGUtPnJldjEsIHN0YXRlLT5yZXYyKTsKLQl2NGxfaW5mbyhjbGllbnQsICJBdWRpbzogICAgdm9sdW1lICVkJXNcbiIsCi0JCQlzdGF0ZS0+dm9sdW1lLCBzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOwotCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpIHsKLQkJdjRsX2luZm8oY2xpZW50LCAiQXVkaW86ICAgIGJhbGFuY2UgJWQgYmFzcyAlZCB0cmVibGUgJWQgbG91ZG5lc3MgJXNcbiIsCi0JCQkJc3RhdGUtPmJhbGFuY2UsIHN0YXRlLT5iYXNzLAotCQkJCXN0YXRlLT50cmVibGUsCi0JCQkJc3RhdGUtPmxvdWRuZXNzID8gIm9uIiA6ICJvZmYiKTsKLQl9CisJc25wcmludGYocHJlZml4LCBzaXplb2YocHJlZml4KSwgIiVzOiBBdWRpbzogICAgIiwgc2QtPm5hbWUpOworCXY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoJnN0YXRlLT5oZGwsIHByZWZpeCk7CiAJc3dpdGNoIChzdGF0ZS0+bW9kZSkgewogCQljYXNlIE1TUF9NT0RFX0FNX0RFVEVDVDogcCA9ICJBTSAoZm9yIGNhcnJpZXIgZGV0ZWN0KSI7IGJyZWFrOwogCQljYXNlIE1TUF9NT0RFX0ZNX1JBRElPOiBwID0gIkZNIFJhZGlvIjsgYnJlYWs7CkBAIC02OTUsMTIgKzU5MywyMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgbXNwX2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBtc3Bfc19jdHJsLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBtc3BfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSBtc3BfbG9nX3N0YXR1cywKIAkuZ19jaGlwX2lkZW50ID0gbXNwX2dfY2hpcF9pZGVudCwKLQkuZ19jdHJsID0gbXNwX2dfY3RybCwKLQkuc19jdHJsID0gbXNwX3NfY3RybCwKLQkucXVlcnljdHJsID0gbXNwX3F1ZXJ5Y3RybCwKKwkuZ19leHRfY3RybHMgPSB2NGwyX3N1YmRldl9nX2V4dF9jdHJscywKKwkudHJ5X2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3RyeV9leHRfY3RybHMsCisJLnNfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfc19leHRfY3RybHMsCisJLmdfY3RybCA9IHY0bDJfc3ViZGV2X2dfY3RybCwKKwkuc19jdHJsID0gdjRsMl9zdWJkZXZfc19jdHJsLAorCS5xdWVyeWN0cmwgPSB2NGwyX3N1YmRldl9xdWVyeWN0cmwsCisJLnF1ZXJ5bWVudSA9IHY0bDJfc3ViZGV2X3F1ZXJ5bWVudSwKIAkuc19zdGQgPSBtc3Bfc19zdGQsCiB9OwogCkBAIC03MjgsNiArNjM0LDcgQEAKIHsKIAlzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsOwogCWludCAoKnRocmVhZF9mdW5jKSh2b2lkICpkYXRhKSA9IE5VTEw7CiAJaW50IG1zcF9oYXJkOwogCWludCBtc3BfZmFtaWx5OwpAQCAtNzUyLDEzICs2NTksNyBAQAogCiAJc3RhdGUtPnY0bDJfc3RkID0gVjRMMl9TVERfTlRTQzsKIAlzdGF0ZS0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0Jc3RhdGUtPnZvbHVtZSA9IDU4ODgwOwkvKiAwZGIgZ2FpbiAqLwotCXN0YXRlLT5iYWxhbmNlID0gMzI3Njg7CS8qIDBkYiBnYWluICovCi0Jc3RhdGUtPmJhc3MgPSAzMjc2ODsKLQlzdGF0ZS0+dHJlYmxlID0gMzI3Njg7Ci0Jc3RhdGUtPmxvdWRuZXNzID0gMDsKIAlzdGF0ZS0+aW5wdXQgPSAtMTsKLQlzdGF0ZS0+bXV0ZWQgPSAwOwogCXN0YXRlLT5pMnNfbW9kZSA9IDA7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RhdGUtPndxKTsKIAkvKiBUaGVzZSBhcmUgdGhlIHJlc2V0IGlucHV0L291dHB1dCBwb3NpdGlvbnMgKi8KQEAgLTc3Nyw4ICs2NzgsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7Ci0KIAltc3BfZmFtaWx5ID0gKChzdGF0ZS0+cmV2MSA+PiA0KSAmIDB4MGYpICsgMzsKIAltc3BfcHJvZHVjdCA9IChzdGF0ZS0+cmV2MiA+PiA4KSAmIDB4ZmY7CiAJbXNwX3Byb2RfaGkgPSBtc3BfcHJvZHVjdCAvIDEwOwpAQCAtODQ5LDYgKzc0OCwzNCBAQAogCQkJc3RhdGUtPm9wbW9kZSA9IE9QTU9ERV9NQU5VQUw7CiAJfQogCisJaGRsID0gJnN0YXRlLT5oZGw7CisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDYpOworCWlmIChzdGF0ZS0+aGFzX3NvdW5kX3Byb2Nlc3NpbmcpIHsKKwkJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmbXNwX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fQkFTUywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CisJCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJm1zcF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX1RSRUJMRSwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CisJCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJm1zcF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX0xPVURORVNTLCAwLCAxLCAxLCAwKTsKKwl9CisJc3RhdGUtPnZvbHVtZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJm1zcF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmbXNwX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fQkFMQU5DRSwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CisJc3RhdGUtPm11dGVkID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmbXNwX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fTVVURSwgMCwgMSwgMSwgMCk7CisJc2QtPmN0cmxfaGFuZGxlciA9IGhkbDsKKwlpZiAoaGRsLT5lcnJvcikgeworCQlpbnQgZXJyID0gaGRsLT5lcnJvcjsKKworCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhkbCk7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl2NGwyX2N0cmxfY2x1c3RlcigyLCAmc3RhdGUtPnZvbHVtZSk7CisJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoaGRsKTsKKwogCS8qIGhlbGxvIHdvcmxkIDotKSAqLwogCXY0bF9pbmZvKGNsaWVudCwgIk1TUCVkNCUwMmQlYy0lYyVkIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJbXNwX2ZhbWlseSwgbXNwX3Byb2R1Y3QsCkBAIC05MDMsNiArODMwLDcgQEAKIAl9CiAJbXNwX3Jlc2V0KGNsaWVudCk7CiAKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZzdGF0ZS0+aGRsKTsKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmgKaW5kZXggZDZiM2U2ZC4uMzJhNDc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuaApAQCAtNiw2ICs2LDcgQEAKIAogI2luY2x1ZGUgPG1lZGlhL21zcDM0MDAuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBtc3Bfc3RhdGUgewogCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOwogCWludCByZXYxLCByZXYyOwogCWludCBpZGVudDsKIAl1OCBoYXNfbmljYW07CkBAIC04Nyw5ICs4OSwxMiBAQAogCWludCBhdWRtb2RlOwogCWludCByeHN1YmNoYW5zOwogCi0JaW50IHZvbHVtZSwgbXV0ZWQ7Ci0JaW50IGJhbGFuY2UsIGxvdWRuZXNzOwotCWludCBiYXNzLCB0cmVibGU7CisJc3RydWN0IHsKKwkJLyogdm9sdW1lIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybCAqdm9sdW1lOworCQlzdHJ1Y3QgdjRsMl9jdHJsICptdXRlZDsKKwl9OworCiAJaW50IHNjYW5faW5fcHJvZ3Jlc3M7CiAKIAkvKiB0aHJlYWQgKi8KQEAgLTEwNCw2ICsxMDksMTEgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgbXNwX3N0YXRlLCBzZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zcF9zdGF0ZSAqY3RybF90b19zdGF0ZShzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXJldHVybiBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IG1zcF9zdGF0ZSwgaGRsKTsKK30KKwogLyogbXNwMzQwMC1kcml2ZXIuYyAqLwogaW50IG1zcF93cml0ZV9kZW0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIsIGludCB2YWwpOwogaW50IG1zcF93cml0ZV9kc3Aoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGFkZHIsIGludCB2YWwpOwpAQCAtMTExLDcgKzEyMSw3IEBACiBpbnQgbXNwX3JlYWRfZHNwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBhZGRyKTsKIGludCBtc3BfcmVzZXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiB2b2lkIG1zcF9zZXRfc2NhcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGluLCBpbnQgb3V0KTsKLXZvaWQgbXNwX3NldF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3ZvaWQgbXNwX3VwZGF0ZV92b2x1bWUoc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUpOwogaW50IG1zcF9zbGVlcChzdHJ1Y3QgbXNwX3N0YXRlICpzdGF0ZSwgaW50IHRpbWVvdXQpOwogCiAvKiBtc3AzNDAwLWt0aHJlYWRzLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1rdGhyZWFkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKaW5kZXggZDVhNjljNS4uYjM3NmZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMKQEAgLTQ5NiwxMyArNDk2LDEzIEBACiAJCQl2NGxfZGJnKDEsIG1zcF9kZWJ1ZywgY2xpZW50LAogCQkJCSJ0aHJlYWQ6IG5vIGNhcnJpZXIgc2NhblxuIik7CiAJCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDA7Ci0JCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCQltc3BfdXBkYXRlX3ZvbHVtZShzdGF0ZSk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIG11dGUgYXVkaW8gKi8KIAkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAxOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCW1zcF91cGRhdGVfdm9sdW1lKHN0YXRlKTsKIAogCQltc3AzNDAwY19zZXRfbW9kZShjbGllbnQsIE1TUF9NT0RFX0FNX0RFVEVDVCk7CiAJCXZhbDEgPSB2YWwyID0gMDsKQEAgLTYzNCw3ICs2MzQsNyBAQAogCQkvKiB1bm11dGUgKi8KIAkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAwOwogCQltc3AzNDAwY19zZXRfYXVkbW9kZShjbGllbnQpOwotCQltc3Bfc2V0X2F1ZGlvKGNsaWVudCk7CisJCW1zcF91cGRhdGVfdm9sdW1lKHN0YXRlKTsKIAogCQlpZiAobXNwX2RlYnVnKQogCQkJbXNwMzQwMGNfcHJpbnRfbW9kZShjbGllbnQpOwpAQCAtNjc5LDEzICs2NzksMTMgQEAKIAkJCXY0bF9kYmcoMSwgbXNwX2RlYnVnLCBjbGllbnQsCiAJCQkJInRocmVhZDogbm8gY2FycmllciBzY2FuXG4iKTsKIAkJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKLQkJCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKKwkJCW1zcF91cGRhdGVfdm9sdW1lKHN0YXRlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogbXV0ZSBhdWRpbyAqLwogCQlzdGF0ZS0+c2Nhbl9pbl9wcm9ncmVzcyA9IDE7Ci0JCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKKwkJbXNwX3VwZGF0ZV92b2x1bWUoc3RhdGUpOwogCiAJCS8qIHN0YXJ0IGF1dG9kZXRlY3QuIE5vdGU6IGF1dG9kZXRlY3QgaXMgbm90IHN1cHBvcnRlZCBmb3IKIAkJICAgTlRTQy1NIGFuZCByYWRpbywgaGVuY2Ugd2UgZm9yY2UgdGhlIHN0YW5kYXJkIGluIHRob3NlCkBAIC03OTcsNyArNzk3LDcgQEAKIAkJLyogdW5tdXRlICovCiAJCW1zcDM0MDBjX3NldF9hdWRtb2RlKGNsaWVudCk7CiAJCXN0YXRlLT5zY2FuX2luX3Byb2dyZXNzID0gMDsKLQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQltc3BfdXBkYXRlX3ZvbHVtZShzdGF0ZSk7CiAKIAkJLyogbW9uaXRvciB0diBhdWRpbyBtb2RlLCB0aGUgZmlyc3QgdGltZSBkb24ndCB3YWl0CiAJCSAgIHNvIGxvbmcgdG8gZ2V0IGEgcXVpY2sgc3RlcmVvL2JpbGluZ3VhbCByZXN1bHQgKi8KQEAgLTk3NCw3ICs5NzQsNyBAQAogCQkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwKIAkJCQkidGhyZWFkOiBubyBjYXJyaWVyIHNjYW5cbiIpOwogCQkJc3RhdGUtPnNjYW5faW5fcHJvZ3Jlc3MgPSAwOwotCQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOworCQkJbXNwX3VwZGF0ZV92b2x1bWUoc3RhdGUpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTAyMCw3ICsxMDIwLDcgQEAKIAkJfQogCiAJCS8qIHVubXV0ZTogZGlzcGF0Y2ggc291bmQgdG8gc2NhcnQgb3V0cHV0LCBzZXQgc2NhcnQgdm9sdW1lICovCi0JCW1zcF9zZXRfYXVkaW8oY2xpZW50KTsKKwkJbXNwX3VwZGF0ZV92b2x1bWUoc3RhdGUpOwogCiAJCS8qIHJlc3RvcmUgQUNCICovCiAJCWlmIChtc3Bfd3JpdGVfZHNwKGNsaWVudCwgMHgxMywgc3RhdGUtPmFjYikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0xMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCmluZGV4IDMxY2MzZDAuLjc1OGE0ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIERyaXZlciBmb3IgTVQ5TTExMS9NVDlNMTEyIENNT1MgSW1hZ2UgU2Vuc29yIGZyb20gTWljcm9uCisgKiBEcml2ZXIgZm9yIE1UOU0xMTEvTVQ5TTExMi9NVDlNMTMxIENNT1MgSW1hZ2UgU2Vuc29yIGZyb20gTWljcm9uL0FwdGluYQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgUm9iZXJ0IEphcnptaWsgPHJvYmVydC5qYXJ6bWlrQGZyZWUuZnI+CiAgKgpAQCAtMTksMTEgKzE5LDE0IEBACiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAvKgotICogbXQ5bTExMSBhbmQgbXQ5bTExMiBpMmMgYWRkcmVzcyBpcyAweDVkIG9yIDB4NDggKGRlcGVuZGluZyBvbiBTQWRkciBwaW4pCisgKiBNVDlNMTExLCBNVDlNMTEyIGFuZCBNVDlNMTMxOgorICogaTJjIGFkZHJlc3MgaXMgMHg0OCBvciAweDVkIChkZXBlbmRpbmcgb24gU0FERFIgcGluKQogICogVGhlIHBsYXRmb3JtIGhhcyB0byBkZWZpbmUgaTJjX2JvYXJkX2luZm8gYW5kIGNhbGwgaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oKQogICovCiAKLS8qIG10OW0xMTE6IFNlbnNvciByZWdpc3RlciBhZGRyZXNzZXMgKi8KKy8qCisgKiBTZW5zb3IgY29yZSByZWdpc3RlciBhZGRyZXNzZXMgKDB4MDAwLi4weDBmZikKKyAqLwogI2RlZmluZSBNVDlNMTExX0NISVBfVkVSU0lPTgkJMHgwMDAKICNkZWZpbmUgTVQ5TTExMV9ST1dfU1RBUlQJCTB4MDAxCiAjZGVmaW5lIE1UOU0xMTFfQ09MVU1OX1NUQVJUCQkweDAwMgpAQCAtNzIsOCArNzUsOSBAQAogI2RlZmluZSBNVDlNMTExX0NUWFRfQ1RSTF9MRURfRkxBU0hfRU4JKDEgPDwgMikKICNkZWZpbmUgTVQ5TTExMV9DVFhUX0NUUkxfVkJMQU5LX1NFTF9CCSgxIDw8IDEpCiAjZGVmaW5lIE1UOU0xMTFfQ1RYVF9DVFJMX0hCTEFOS19TRUxfQgkoMSA8PCAwKQorCiAvKgotICogbXQ5bTExMTogQ29sb3JwaXBlIHJlZ2lzdGVyIGFkZHJlc3NlcyAoMHgxMDAuLjB4MWZmKQorICogQ29sb3JwaXBlIHJlZ2lzdGVyIGFkZHJlc3NlcyAoMHgxMDAuLjB4MWZmKQogICovCiAjZGVmaW5lIE1UOU0xMTFfT1BFUl9NT0RFX0NUUkwJCTB4MTA2CiAjZGVmaW5lIE1UOU0xMTFfT1VUUFVUX0ZPUk1BVF9DVFJMCTB4MTA4CkBAIC0xMDksOCArMTEzLDkgQEAKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU1dBUF9ZQ2JDcl9DX1kJKDEgPDwgMSkKICNkZWZpbmUgTVQ5TTExMV9PVVRGTVRfU1dBUF9SR0JfRVZFTgkoMSA8PCAxKQogI2RlZmluZSBNVDlNMTExX09VVEZNVF9TV0FQX1lDYkNyX0NiX0NyCSgxIDw8IDApCisKIC8qCi0gKiBtdDltMTExOiBDYW1lcmEgY29udHJvbCByZWdpc3RlciBhZGRyZXNzZXMgKDB4MjAwLi4weDJmZiBub3QgaW1wbGVtZW50ZWQpCisgKiBDYW1lcmEgY29udHJvbCByZWdpc3RlciBhZGRyZXNzZXMgKDB4MjAwLi4weDJmZiBub3QgaW1wbGVtZW50ZWQpCiAgKi8KIAogI2RlZmluZSByZWdfcmVhZChyZWcpIG10OW0xMTFfcmVnX3JlYWQoY2xpZW50LCBNVDlNMTExXyMjcmVnKQpAQCAtMTYwLDcgKzE2NSw4IEBACiAKIHN0cnVjdCBtdDltMTExIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgc3ViZGV2OwotCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlNMTF4KiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCisJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOU0xMTEgb3IgVjRMMl9JREVOVF9NVDlNMTEyIGNvZGUKKwkJCSAqIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KIAllbnVtIG10OW0xMTFfY29udGV4dCBjb250ZXh0OwogCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKIAljb25zdCBzdHJ1Y3QgbXQ5bTExMV9kYXRhZm10ICpmbXQ7CkBAIC05MzQsNyArOTQwLDcgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gbXQ5bTExMV9zZXRfYXV0b2V4cG9zdXJlKGNsaWVudCwgbXQ5bTExMS0+YXV0b2V4cG9zdXJlKTsKIAlpZiAocmV0KQotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm10OW0xMXggaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm10OW0xMTEgaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk2MywyNyArOTY5LDI3IEBACiAJbXQ5bTExMS0+c3dhcF9yZ2JfZXZlbl9vZGQgPSAxOwogCW10OW0xMTEtPnN3YXBfcmdiX3JlZF9ibHVlID0gMTsKIAotCXJldCA9IG10OW0xMTFfaW5pdChjbGllbnQpOwotCWlmIChyZXQpCi0JCWdvdG8gZWkyYzsKLQogCWRhdGEgPSByZWdfcmVhZChDSElQX1ZFUlNJT04pOwogCiAJc3dpdGNoIChkYXRhKSB7Ci0JY2FzZSAweDE0M2E6IC8qIE1UOU0xMTEgKi8KKwljYXNlIDB4MTQzYTogLyogTVQ5TTExMSBvciBNVDlNMTMxICovCiAJCW10OW0xMTEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMTExOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsCisJCQkiRGV0ZWN0ZWQgYSBNVDlNMTExL01UOU0xMzEgY2hpcCBJRCAleFxuIiwgZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgMHgxNDhjOiAvKiBNVDlNMTEyICovCiAJCW10OW0xMTEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMTEyOworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOU0xMTIgY2hpcCBJRCAleFxuIiwgZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9ERVY7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJIk5vIE1UOU0xMXggY2hpcCBkZXRlY3RlZCwgcmVnaXN0ZXIgcmVhZCAleFxuIiwgZGF0YSk7CisJCQkiTm8gTVQ5TTExMS9NVDlNMTEyL01UOU0xMzEgY2hpcCBkZXRlY3RlZCByZWdpc3RlciByZWFkICV4XG4iLAorCQkJZGF0YSk7CiAJCWdvdG8gZWkyYzsKIAl9CiAKLQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBhIE1UOU0xMXggY2hpcCBJRCAleFxuIiwgZGF0YSk7CisJcmV0ID0gbXQ5bTExMV9pbml0KGNsaWVudCk7CiAKIGVpMmM6CiAJcmV0dXJuIHJldDsKQEAgLTEwMzQsMTMgKzEwNDAsMTMgQEAKIAlpbnQgcmV0OwogCiAJaWYgKCFpY2QpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJNVDlNMTF4OiBtaXNzaW5nIHNvYy1jYW1lcmEgZGF0YSFcbiIpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm10OW0xMTE6IHNvYy1jYW1lcmEgZGF0YSBtaXNzaW5nIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWljbCA9IHRvX3NvY19jYW1lcmFfbGluayhpY2QpOwogCWlmICghaWNsKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiTVQ5TTExeCBkcml2ZXIgbmVlZHMgcGxhdGZvcm0gZGF0YVxuIik7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAibXQ5bTExMTogZHJpdmVyIG5lZWRzIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExMTQsNiArMTEyMCw2IEBACiBtb2R1bGVfaW5pdChtdDltMTExX21vZF9pbml0KTsKIG1vZHVsZV9leGl0KG10OW0xMTFfbW9kX2V4aXQpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvbiBNVDlNMTExL01UOU0xMTIgQ2FtZXJhIGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb24vQXB0aW5hIE1UOU0xMTEvTVQ5TTExMi9NVDlNMTMxIENhbWVyYSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJvYmVydCBKYXJ6bWlrIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Ml9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgyX2NhbWVyYS5jCmluZGV4IDAyNmJlZjAuLjY2ZmYxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgyX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgyX2NhbWVyYS5jCkBAIC03ODUsNiArNzg1LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcpCisJCWNzaWNyMSB8PSBDU0lDUjFfUkVER0U7CiAJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpCiAJCWNzaWNyMSB8PSBDU0lDUjFfSU5WX1BDTEs7CiAJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIKQpAQCAtMTIwMSw3ICsxMjAzLDcgQEAKIAlidWYgPSBsaXN0X2VudHJ5KHBjZGV2LT5jYXB0dXJlLm5leHQsCiAJCQlzdHJ1Y3QgbXgyX2J1ZmZlciwgdmIucXVldWUpOwogCi0JYnVmLT5idWZudW0gPSBidWZudW07CisJYnVmLT5idWZudW0gPSAhYnVmbnVtOwogCiAJbGlzdF9tb3ZlX3RhaWwocGNkZXYtPmNhcHR1cmUubmV4dCwgJnBjZGV2LT5hY3RpdmVfYnVmcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCmluZGV4IGU5YjExZTEuLjQyNzllYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYwpAQCAtOTQsOCArOTQsNiBAQAogCQkJCQkgIHUzMiAqbnVtX3B0cikKIHsKIAl1MzIgcmVzdWx0ID0gMDsKLQl1MzIgdmFsOwotCWludCBjaDsKIAlpbnQgcmFkaXggPSAxMDsKIAlpZiAoKGNvdW50ID49IDIpICYmIChidWZbMF0gPT0gJzAnKSAmJgogCSAgICAoKGJ1ZlsxXSA9PSAneCcpIHx8IChidWZbMV0gPT0gJ1gnKSkpIHsKQEAgLTEwNywxNyArMTA1LDkgQEAKIAl9CiAKIAl3aGlsZSAoY291bnQtLSkgewotCQljaCA9ICpidWYrKzsKLQkJaWYgKChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpKSB7Ci0JCQl2YWwgPSBjaCAtICcwJzsKLQkJfSBlbHNlIGlmICgoY2ggPj0gJ2EnKSAmJiAoY2ggPD0gJ2YnKSkgewotCQkJdmFsID0gY2ggLSAnYScgKyAxMDsKLQkJfSBlbHNlIGlmICgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ0YnKSkgewotCQkJdmFsID0gY2ggLSAnQScgKyAxMDsKLQkJfSBlbHNlIHsKKwkJaW50IHZhbCA9IGhleF90b19iaW4oKmJ1ZisrKTsKKwkJaWYgKHZhbCA8IDAgfHwgdmFsID49IHJhZGl4KQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHZhbCA+PSByYWRpeCkgcmV0dXJuIC1FSU5WQUw7CiAJCXJlc3VsdCAqPSByYWRpeDsKIAkJcmVzdWx0ICs9IHZhbDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlkNTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKworb2JqLSQoQ09ORklHX1ZJREVPX1NBTVNVTkdfUzVQX0ZJTUMpIDo9IHM1cC1maW1jLm8KK3M1cC1maW1jLXkgOj0gZmltYy1jb3JlLm8gZmltYy1yZWcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MWM3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKQEAgLTAsMCArMSwxNTg2IEBACisvKgorICogUzVQIGNhbWVyYSBpbnRlcmZhY2UgKHZpZGVvIHBvc3Rwcm9jZXNzb3IpIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogU3lsd2VzdGVyIE5hd3JvY2tpLCA8cy5uYXdyb2NraUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorCisjaW5jbHVkZSAiZmltYy1jb3JlLmgiCisKK3N0YXRpYyBjaGFyICpmaW1jX2Nsb2NrX25hbWVbTlVNX0ZJTUNfQ0xPQ0tTXSA9IHsgInNjbGtfZmltYyIsICJmaW1jIiB9OworCitzdGF0aWMgc3RydWN0IGZpbWNfZm10IGZpbWNfZm9ybWF0c1tdID0geworCXsKKwkJLm5hbWUJPSAiUkdCNTY1IiwKKwkJLmZvdXJjYwk9IFY0TDJfUElYX0ZNVF9SR0I1NjVYLAorCQkuZGVwdGgJPSAxNiwKKwkJLmNvbG9yCT0gUzVQX0ZJTUNfUkdCNTY1LAorCQkuYnVmZl9jbnQgPSAxLAorCQkucGxhbmVzX2NudCA9IDEKKwl9LCB7CisJCS5uYW1lCT0gIkJHUjY2NiIsCisJCS5mb3VyY2MJPSBWNEwyX1BJWF9GTVRfQkdSNjY2LAorCQkuZGVwdGgJPSAzMiwKKwkJLmNvbG9yCT0gUzVQX0ZJTUNfUkdCNjY2LAorCQkuYnVmZl9jbnQgPSAxLAorCQkucGxhbmVzX2NudCA9IDEKKwl9LCB7CisJCS5uYW1lID0gIlhSR0ItOC04LTgtOCwgMjQgYnBwIiwKKwkJLmZvdXJjYwk9IFY0TDJfUElYX0ZNVF9SR0IyNCwKKwkJLmRlcHRoID0gMzIsCisJCS5jb2xvcgk9IFM1UF9GSU1DX1JHQjg4OCwKKwkJLmJ1ZmZfY250ID0gMSwKKwkJLnBsYW5lc19jbnQgPSAxCisJfSwgeworCQkubmFtZQk9ICJZVVYgNDoyOjIgcGFja2VkLCBZQ2JZQ3IiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCS5kZXB0aAk9IDE2LAorCQkuY29sb3IJPSBTNVBfRklNQ19ZQ0JZQ1I0MjIsCisJCS5idWZmX2NudCA9IDEsCisJCS5wbGFuZXNfY250ID0gMQorCQl9LCB7CisJCS5uYW1lCT0gIllVViA0OjI6MiBwYWNrZWQsIENiWUNyWSIsCisJCS5mb3VyY2MJPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmRlcHRoCT0gMTYsCisJCS5jb2xvcgk9IFM1UF9GSU1DX0NCWUNSWTQyMiwKKwkJLmJ1ZmZfY250ID0gMSwKKwkJLnBsYW5lc19jbnQgPSAxCisJfSwgeworCQkubmFtZQk9ICJZVVYgNDoyOjIgcGFja2VkLCBDcllDYlkiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX1ZZVVksCisJCS5kZXB0aAk9IDE2LAorCQkuY29sb3IJPSBTNVBfRklNQ19DUllDQlk0MjIsCisJCS5idWZmX2NudCA9IDEsCisJCS5wbGFuZXNfY250ID0gMQorCX0sIHsKKwkJLm5hbWUJPSAiWVVWIDQ6MjoyIHBhY2tlZCwgWUNyWUNiIiwKKwkJLmZvdXJjYwk9IFY0TDJfUElYX0ZNVF9ZVllVLAorCQkuZGVwdGgJPSAxNiwKKwkJLmNvbG9yCT0gUzVQX0ZJTUNfWUNSWUNCNDIyLAorCQkuYnVmZl9jbnQgPSAxLAorCQkucGxhbmVzX2NudCA9IDEKKwl9LCB7CisJCS5uYW1lCT0gIllVViA0OjI6MiBwbGFuYXIsIFkvQ2IvQ3IiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX1lVVjQyMlAsCisJCS5kZXB0aAk9IDEyLAorCQkuY29sb3IJPSBTNVBfRklNQ19ZQ0JDUjQyMiwKKwkJLmJ1ZmZfY250ID0gMSwKKwkJLnBsYW5lc19jbnQgPSAzCisJfSwgeworCQkubmFtZQk9ICJZVVYgNDoyOjIgcGxhbmFyLCBZL0NiQ3IiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX05WMTYsCisJCS5kZXB0aAk9IDE2LAorCQkuY29sb3IJPSBTNVBfRklNQ19ZQ0JDUjQyMiwKKwkJLmJ1ZmZfY250ID0gMSwKKwkJLnBsYW5lc19jbnQgPSAyCisJfSwgeworCQkubmFtZQk9ICJZVVYgNDoyOjIgcGxhbmFyLCBZL0NyQ2IiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX05WNjEsCisJCS5kZXB0aAk9IDE2LAorCQkuY29sb3IJPSBTNVBfRklNQ19SR0I1NjUsCisJCS5idWZmX2NudCA9IDEsCisJCS5wbGFuZXNfY250ID0gMgorCX0sIHsKKwkJLm5hbWUJPSAiWVVWIDQ6MjowIHBsYW5hciwgWUNiQ3IiLAorCQkuZm91cmNjCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwKKwkJLmRlcHRoCT0gMTIsCisJCS5jb2xvcgk9IFM1UF9GSU1DX1lDQkNSNDIwLAorCQkuYnVmZl9jbnQgPSAxLAorCQkucGxhbmVzX2NudCA9IDMKKwl9LCB7CisJCS5uYW1lCT0gIllVViA0OjI6MCBwbGFuYXIsIFkvQ2JDciIsCisJCS5mb3VyY2MJPSBWNEwyX1BJWF9GTVRfTlYxMiwKKwkJLmRlcHRoCT0gMTIsCisJCS5jb2xvcgk9IFM1UF9GSU1DX1lDQkNSNDIwLAorCQkuYnVmZl9jbnQgPSAxLAorCQkucGxhbmVzX2NudCA9IDIKKwl9CisgfTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBmaW1jX2N0cmxzW10gPSB7CisJeworCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJIb3Jpem9udGFsIGZsaXAiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sCisJeworCQkuaWQJCT0gVjRMMl9DSURfVkZMSVAsCisJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCS5uYW1lCQk9ICJWZXJ0aWNhbCBmbGlwIiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorCXsKKwkJLmlkCQk9IFY0TDJfQ0lEX1JPVEFURSwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUJCT0gIlJvdGF0aW9uIChDQ1cpIiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDI3MCwKKwkJLnN0ZXAJCT0gOTAsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsICpnZXRfY3RybChpbnQgaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaW1jX2N0cmxzKTsgKytpKQorCQlpZiAoaWQgPT0gZmltY19jdHJsc1tpXS5pZCkKKwkJCXJldHVybiAmZmltY19jdHJsc1tpXTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBmaW1jX2NoZWNrX3NjYWxlcl9yYXRpbyhzdHJ1Y3QgdjRsMl9yZWN0ICpyLCBzdHJ1Y3QgZmltY19mcmFtZSAqZikKK3sKKwlpZiAoci0+d2lkdGggPiBmLT53aWR0aCkgeworCQlpZiAoZi0+d2lkdGggPiAoci0+d2lkdGggKiBTQ0FMRVJfTUFYX0hSQVRJTykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoKGYtPndpZHRoICogU0NBTEVSX01BWF9IUkFUSU8pIDwgci0+d2lkdGgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoci0+aGVpZ2h0ID4gZi0+aGVpZ2h0KSB7CisJCWlmIChmLT5oZWlnaHQgPiAoci0+aGVpZ2h0ICogU0NBTEVSX01BWF9WUkFUSU8pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJaWYgKChmLT5oZWlnaHQgKiBTQ0FMRVJfTUFYX1ZSQVRJTykgPCByLT5oZWlnaHQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW1jX2dldF9zY2FsZXJfZmFjdG9yKHUzMiBzcmMsIHUzMiB0YXIsIHUzMiAqcmF0aW8sIHUzMiAqc2hpZnQpCit7CisJaWYgKHNyYyA+PSB0YXIgKiA2NCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKHNyYyA+PSB0YXIgKiAzMikgeworCQkqcmF0aW8gPSAzMjsKKwkJKnNoaWZ0ID0gNTsKKwl9IGVsc2UgaWYgKHNyYyA+PSB0YXIgKiAxNikgeworCQkqcmF0aW8gPSAxNjsKKwkJKnNoaWZ0ID0gNDsKKwl9IGVsc2UgaWYgKHNyYyA+PSB0YXIgKiA4KSB7CisJCSpyYXRpbyA9IDg7CisJCSpzaGlmdCA9IDM7CisJfSBlbHNlIGlmIChzcmMgPj0gdGFyICogNCkgeworCQkqcmF0aW8gPSA0OworCQkqc2hpZnQgPSAyOworCX0gZWxzZSBpZiAoc3JjID49IHRhciAqIDIpIHsKKwkJKnJhdGlvID0gMjsKKwkJKnNoaWZ0ID0gMTsKKwl9IGVsc2UgeworCQkqcmF0aW8gPSAxOworCQkqc2hpZnQgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbWNfc2V0X3NjYWxlcl9pbmZvKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCXN0cnVjdCBmaW1jX3NjYWxlciAqc2MgPSAmY3R4LT5zY2FsZXI7CisJc3RydWN0IGZpbWNfZnJhbWUgKnNfZnJhbWUgPSAmY3R4LT5zX2ZyYW1lOworCXN0cnVjdCBmaW1jX2ZyYW1lICpkX2ZyYW1lID0gJmN0eC0+ZF9mcmFtZTsKKwlpbnQgdHgsIHR5LCBzeCwgc3k7CisJaW50IHJldDsKKworCXR4ID0gZF9mcmFtZS0+d2lkdGg7CisJdHkgPSBkX2ZyYW1lLT5oZWlnaHQ7CisJaWYgKHR4IDw9IDAgfHwgdHkgPD0gMCkgeworCQl2NGwyX2VycigmY3R4LT5maW1jX2Rldi0+bTJtLnY0bDJfZGV2LAorCQkJImludmFsaWQgdGFyZ2V0IHNpemU6ICVkIHggJWQiLCB0eCwgdHkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzeCA9IHNfZnJhbWUtPndpZHRoOworCXN5ID0gc19mcmFtZS0+aGVpZ2h0OworCWlmIChzeCA8PSAwIHx8IHN5IDw9IDApIHsKKwkJZXJyKCJpbnZhbGlkIHNvdXJjZSBzaXplOiAlZCB4ICVkIiwgc3gsIHN5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2MtPnJlYWxfd2lkdGggPSBzeDsKKwlzYy0+cmVhbF9oZWlnaHQgPSBzeTsKKwlkYmcoInN4PSAlZCwgc3k9ICVkLCB0eD0gJWQsIHR5PSAlZCIsIHN4LCBzeSwgdHgsIHR5KTsKKworCXJldCA9IGZpbWNfZ2V0X3NjYWxlcl9mYWN0b3Ioc3gsIHR4LCAmc2MtPnByZV9ocmF0aW8sICZzYy0+aGZhY3Rvcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGZpbWNfZ2V0X3NjYWxlcl9mYWN0b3Ioc3ksIHR5LCAgJnNjLT5wcmVfdnJhdGlvLCAmc2MtPnZmYWN0b3IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzYy0+cHJlX2RzdF93aWR0aCA9IHN4IC8gc2MtPnByZV9ocmF0aW87CisJc2MtPnByZV9kc3RfaGVpZ2h0ID0gc3kgLyBzYy0+cHJlX3ZyYXRpbzsKKworCXNjLT5tYWluX2hyYXRpbyA9IChzeCA8PCA4KSAvICh0eCA8PCBzYy0+aGZhY3Rvcik7CisJc2MtPm1haW5fdnJhdGlvID0gKHN5IDw8IDgpIC8gKHR5IDw8IHNjLT52ZmFjdG9yKTsKKworCXNjLT5zY2FsZXVwX2ggPSAodHggPj0gc3gpID8gMSA6IDA7CisJc2MtPnNjYWxldXBfdiA9ICh0eSA+PSBzeSkgPyAxIDogMDsKKworCS8qIGNoZWNrIHRvIHNlZSBpZiBpbnB1dCBhbmQgb3V0cHV0IHNpemUvZm9ybWF0IGRpZmZlciAqLworCWlmIChzX2ZyYW1lLT5mbXQtPmNvbG9yID09IGRfZnJhbWUtPmZtdC0+Y29sb3IKKwkJJiYgc19mcmFtZS0+d2lkdGggPT0gZF9mcmFtZS0+d2lkdGgKKwkJJiYgc19mcmFtZS0+aGVpZ2h0ID09IGRfZnJhbWUtPmhlaWdodCkKKwkJc2MtPmNvcHlfbW9kZSA9IDE7CisJZWxzZQorCQlzYy0+Y29weV9tb2RlID0gMDsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBmaW1jX2lzcihpbnQgaXJxLCB2b2lkICpwcml2KQoreworCXN0cnVjdCBmaW1jX3ZpZF9idWZmZXIgKnNyY19idWYsICpkc3RfYnVmOworCXN0cnVjdCBmaW1jX2RldiAqZmltYyA9IChzdHJ1Y3QgZmltY19kZXYgKilwcml2OworCXN0cnVjdCBmaW1jX2N0eCAqY3R4OworCisJQlVHX09OKCFmaW1jKTsKKwlmaW1jX2h3X2NsZWFyX2lycShmaW1jKTsKKworCXNwaW5fbG9jaygmZmltYy0+c2xvY2spOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVF9NMk1fUEVORCwgJmZpbWMtPnN0YXRlKSkgeworCQljdHggPSB2NGwyX20ybV9nZXRfY3Vycl9wcml2KGZpbWMtPm0ybS5tMm1fZGV2KTsKKwkJaWYgKCFjdHggfHwgIWN0eC0+bTJtX2N0eCkKKwkJCWdvdG8gaXNyX3VubG9jazsKKwkJc3JjX2J1ZiA9IHY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+bTJtX2N0eCk7CisJCWRzdF9idWYgPSB2NGwyX20ybV9kc3RfYnVmX3JlbW92ZShjdHgtPm0ybV9jdHgpOworCQlpZiAoc3JjX2J1ZiAmJiBkc3RfYnVmKSB7CisJCQlzcGluX2xvY2soJmZpbWMtPmlycWxvY2spOworCQkJc3JjX2J1Zi0+dmIuc3RhdGUgPSBkc3RfYnVmLT52Yi5zdGF0ZSA9ICBWSURFT0JVRl9ET05FOworCQkJd2FrZV91cCgmc3JjX2J1Zi0+dmIuZG9uZSk7CisJCQl3YWtlX3VwKCZkc3RfYnVmLT52Yi5kb25lKTsKKwkJCXNwaW5fdW5sb2NrKCZmaW1jLT5pcnFsb2NrKTsKKwkJCXY0bDJfbTJtX2pvYl9maW5pc2goZmltYy0+bTJtLm0ybV9kZXYsIGN0eC0+bTJtX2N0eCk7CisJCX0KKwl9CisKK2lzcl91bmxvY2s6CisJc3Bpbl91bmxvY2soJmZpbWMtPnNsb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFRoZSBjb2xvciBmb3JtYXQgKHBsYW5lc19jbnQsIGJ1ZmZfY250KSBtdXN0IGJlIGFscmVhZHkgY29uZmlndXJlZC4gKi8KK3N0YXRpYyBpbnQgZmltY19wcmVwYXJlX2FkZHIoc3RydWN0IGZpbWNfY3R4ICpjdHgsCisJCXN0cnVjdCBmaW1jX3ZpZF9idWZmZXIgKmJ1ZiwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGZpbWNfZnJhbWUgKmZyYW1lOworCXN0cnVjdCBmaW1jX2FkZHIgKnBhZGRyOworCXUzMiBwaXhfc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWZyYW1lID0gY3R4X20ybV9nZXRfZnJhbWUoY3R4LCB0eXBlKTsKKwlpZiAoSVNfRVJSKGZyYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnJhbWUpOworCXBhZGRyID0gJmZyYW1lLT5wYWRkcjsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpeF9zaXplID0gZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodDsKKworCWRiZygiYnVmZl9jbnQ9ICVkLCBwbGFuZXNfY250PSAlZCwgZnJhbWUtPnNpemU9ICVkLCBwaXhfc2l6ZT0gJWQiLAorCQlmcmFtZS0+Zm10LT5idWZmX2NudCwgZnJhbWUtPmZtdC0+cGxhbmVzX2NudCwKKwkJZnJhbWUtPnNpemUsIHBpeF9zaXplKTsKKworCWlmIChmcmFtZS0+Zm10LT5idWZmX2NudCA9PSAxKSB7CisJCXBhZGRyLT55ID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZygmYnVmLT52Yik7CisJCXN3aXRjaCAoZnJhbWUtPmZtdC0+cGxhbmVzX2NudCkgeworCQljYXNlIDE6CisJCQlwYWRkci0+Y2IgPSAwOworCQkJcGFkZHItPmNyID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQkvKiBkZWNvbXBvc2UgWSBpbnRvIFkvQ2IgKi8KKwkJCXBhZGRyLT5jYiA9ICh1MzIpKHBhZGRyLT55ICsgcGl4X3NpemUpOworCQkJcGFkZHItPmNyID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYWRkci0+Y2IgPSAodTMyKShwYWRkci0+eSArIHBpeF9zaXplKTsKKwkJCS8qIGRlY29tcG9zZSBZIGludG8gWS9DYi9DciAqLworCQkJaWYgKFM1UF9GSU1DX1lDQkNSNDIwID09IGZyYW1lLT5mbXQtPmNvbG9yKQorCQkJCXBhZGRyLT5jciA9ICh1MzIpKHBhZGRyLT5jYgorCQkJCQkJKyAocGl4X3NpemUgPj4gMikpOworCQkJZWxzZSAvKiA0MjIgKi8KKwkJCQlwYWRkci0+Y3IgPSAodTMyKShwYWRkci0+Y2IKKwkJCQkJCSsgKHBpeF9zaXplID4+IDEpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlkYmcoIlBIWVNfQUREUjogdHlwZT0gJWQsIHk9IDB4JVggIGNiPSAweCVYIGNyPSAweCVYIHJldD0gJWQiLAorCXR5cGUsIHBhZGRyLT55LCBwYWRkci0+Y2IsIHBhZGRyLT5jciwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCBvcmRlciBmb3IgMSBhbmQgMiBwbGFuZSBZQ0JDUiA0OjI6MiBmb3JtYXRzLiAqLworc3RhdGljIHZvaWQgZmltY19zZXRfeXV2X29yZGVyKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCS8qIFRoZSBvbmUgb25seSBtb2RlIHN1cHBvcnRlZCBpbiBTb0MuICovCisJY3R4LT5pbl9vcmRlcl8ycCA9IFM1UF9GSU1DX0xTQl9DUkNCOworCWN0eC0+b3V0X29yZGVyXzJwID0gUzVQX0ZJTUNfTFNCX0NSQ0I7CisKKwkvKiBTZXQgb3JkZXIgZm9yIDEgcGxhbmUgaW5wdXQgZm9ybWF0cy4gKi8KKwlzd2l0Y2ggKGN0eC0+c19mcmFtZS5mbXQtPmNvbG9yKSB7CisJY2FzZSBTNVBfRklNQ19ZQ1JZQ0I0MjI6CisJCWN0eC0+aW5fb3JkZXJfMXAgPSBTNVBfRklNQ19JTl9ZQ1JZQ0I7CisJCWJyZWFrOworCWNhc2UgUzVQX0ZJTUNfQ0JZQ1JZNDIyOgorCQljdHgtPmluX29yZGVyXzFwID0gUzVQX0ZJTUNfSU5fQ0JZQ1JZOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1DX0NSWUNCWTQyMjoKKwkJY3R4LT5pbl9vcmRlcl8xcCA9IFM1UF9GSU1DX0lOX0NSWUNCWTsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNQ19ZQ0JZQ1I0MjI6CisJZGVmYXVsdDoKKwkJY3R4LT5pbl9vcmRlcl8xcCA9IFM1UF9GSU1DX0lOX1lDQllDUjsKKwkJYnJlYWs7CisJfQorCWRiZygiY3R4LT5pbl9vcmRlcl8xcD0gJWQiLCBjdHgtPmluX29yZGVyXzFwKTsKKworCXN3aXRjaCAoY3R4LT5kX2ZyYW1lLmZtdC0+Y29sb3IpIHsKKwljYXNlIFM1UF9GSU1DX1lDUllDQjQyMjoKKwkJY3R4LT5vdXRfb3JkZXJfMXAgPSBTNVBfRklNQ19PVVRfWUNSWUNCOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1DX0NCWUNSWTQyMjoKKwkJY3R4LT5vdXRfb3JkZXJfMXAgPSBTNVBfRklNQ19PVVRfQ0JZQ1JZOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1DX0NSWUNCWTQyMjoKKwkJY3R4LT5vdXRfb3JkZXJfMXAgPSBTNVBfRklNQ19PVVRfQ1JZQ0JZOworCQlicmVhazsKKwljYXNlIFM1UF9GSU1DX1lDQllDUjQyMjoKKwlkZWZhdWx0OgorCQljdHgtPm91dF9vcmRlcl8xcCA9IFM1UF9GSU1DX09VVF9ZQ0JZQ1I7CisJCWJyZWFrOworCX0KKwlkYmcoImN0eC0+b3V0X29yZGVyXzFwPSAlZCIsIGN0eC0+b3V0X29yZGVyXzFwKTsKK30KKworLyoqCisgKiBmaW1jX3ByZXBhcmVfY29uZmlnIC0gY2hlY2sgZGltZW5zaW9ucywgb3BlcmF0aW9uIGFuZCBjb2xvciBtb2RlCisgKgkJCSBhbmQgcHJlLWNhbGN1bGF0ZSBvZmZzZXQgYW5kIHRoZSBzY2FsaW5nIGNvZWZmaWNpZW50cy4KKyAqCisgKiBAY3R4OiBoYXJkd2FyZSBjb250ZXh0IGluZm9ybWF0aW9uCisgKiBAZmxhZ3M6IGZsYWdzIGluZGljYXRpbmcgd2hpY2ggcGFyYW1ldGVycyB0byBjaGVjay91cGRhdGUKKyAqCisgKiBSZXR1cm46IDAgaWYgZGltZW5zaW9ucyBhcmUgdmFsaWQgb3Igbm9uIHplcm8gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGZpbWNfcHJlcGFyZV9jb25maWcoc3RydWN0IGZpbWNfY3R4ICpjdHgsIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgZmltY19mcmFtZSAqc19mcmFtZSwgKmRfZnJhbWU7CisJc3RydWN0IGZpbWNfdmlkX2J1ZmZlciAqYnVmID0gTlVMTDsKKwlzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgKnZhcmlhbnQgPSBjdHgtPmZpbWNfZGV2LT52YXJpYW50OworCWludCByZXQgPSAwOworCisJc19mcmFtZSA9ICZjdHgtPnNfZnJhbWU7CisJZF9mcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisKKwlpZiAoZmxhZ3MgJiBGSU1DX1BBUkFNUykgeworCQlpZiAoKGN0eC0+b3V0X3BhdGggPT0gRklNQ19ETUEpICYmCisJCQkoY3R4LT5yb3RhdGlvbiA9PSA5MCB8fCBjdHgtPnJvdGF0aW9uID09IDI3MCkpIHsKKwkJCXN3YXAoZF9mcmFtZS0+Zl93aWR0aCwgZF9mcmFtZS0+Zl9oZWlnaHQpOworCQkJc3dhcChkX2ZyYW1lLT53aWR0aCwgZF9mcmFtZS0+aGVpZ2h0KTsKKwkJfQorCisJCS8qIFByZXBhcmUgdGhlIG91dHB1dCBvZmZzZXQgcmF0aW9zIGZvciBzY2FsZXIuICovCisJCWRfZnJhbWUtPmRtYV9vZmZzZXQueV9oID0gZF9mcmFtZS0+b2Zmc19oOworCQlpZiAoIXZhcmlhbnQtPnBpeF9ob2ZmKQorCQkJZF9mcmFtZS0+ZG1hX29mZnNldC55X2ggKj0gKGRfZnJhbWUtPmZtdC0+ZGVwdGggPj4gMyk7CisKKwkJZF9mcmFtZS0+ZG1hX29mZnNldC55X3YgPSBkX2ZyYW1lLT5vZmZzX3Y7CisKKwkJZF9mcmFtZS0+ZG1hX29mZnNldC5jYl9oID0gZF9mcmFtZS0+b2Zmc19oOworCQlkX2ZyYW1lLT5kbWFfb2Zmc2V0LmNiX3YgPSBkX2ZyYW1lLT5vZmZzX3Y7CisKKwkJZF9mcmFtZS0+ZG1hX29mZnNldC5jcl9oID0gZF9mcmFtZS0+b2Zmc19oOworCQlkX2ZyYW1lLT5kbWFfb2Zmc2V0LmNyX3YgPSBkX2ZyYW1lLT5vZmZzX3Y7CisKKwkJaWYgKCF2YXJpYW50LT5waXhfaG9mZiAmJiBkX2ZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMykgeworCQkJZF9mcmFtZS0+ZG1hX29mZnNldC5jYl9oID4+PSAxOworCQkJZF9mcmFtZS0+ZG1hX29mZnNldC5jYl92ID4+PSAxOworCQkJZF9mcmFtZS0+ZG1hX29mZnNldC5jcl9oID4+PSAxOworCQkJZF9mcmFtZS0+ZG1hX29mZnNldC5jcl92ID4+PSAxOworCQl9CisKKwkJZGJnKCJvdXQgb2Zmc2V0OiBjb2xvcj0gJWQsIHlfaD0gJWQsIHlfdj0gJWQiLAorCQkJZF9mcmFtZS0+Zm10LT5jb2xvciwKKwkJCWRfZnJhbWUtPmRtYV9vZmZzZXQueV9oLCBkX2ZyYW1lLT5kbWFfb2Zmc2V0Lnlfdik7CisKKwkJLyogUHJlcGFyZSB0aGUgaW5wdXQgb2Zmc2V0IHJhdGlvcyBmb3Igc2NhbGVyLiAqLworCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LnlfaCA9IHNfZnJhbWUtPm9mZnNfaDsKKwkJaWYgKCF2YXJpYW50LT5waXhfaG9mZikKKwkJCXNfZnJhbWUtPmRtYV9vZmZzZXQueV9oICo9IChzX2ZyYW1lLT5mbXQtPmRlcHRoID4+IDMpOworCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LnlfdiA9IHNfZnJhbWUtPm9mZnNfdjsKKworCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNiX2ggPSBzX2ZyYW1lLT5vZmZzX2g7CisJCXNfZnJhbWUtPmRtYV9vZmZzZXQuY2JfdiA9IHNfZnJhbWUtPm9mZnNfdjsKKworCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNyX2ggPSBzX2ZyYW1lLT5vZmZzX2g7CisJCXNfZnJhbWUtPmRtYV9vZmZzZXQuY3JfdiA9IHNfZnJhbWUtPm9mZnNfdjsKKworCQlpZiAoIXZhcmlhbnQtPnBpeF9ob2ZmICYmIHNfZnJhbWUtPmZtdC0+cGxhbmVzX2NudCA9PSAzKSB7CisJCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNiX2ggPj49IDE7CisJCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNiX3YgPj49IDE7CisJCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNyX2ggPj49IDE7CisJCQlzX2ZyYW1lLT5kbWFfb2Zmc2V0LmNyX3YgPj49IDE7CisJCX0KKworCQlkYmcoImluIG9mZnNldDogY29sb3I9ICVkLCB5X2g9ICVkLCB5X3Y9ICVkIiwKKwkJCXNfZnJhbWUtPmZtdC0+Y29sb3IsIHNfZnJhbWUtPmRtYV9vZmZzZXQueV9oLAorCQkJc19mcmFtZS0+ZG1hX29mZnNldC55X3YpOworCisJCWZpbWNfc2V0X3l1dl9vcmRlcihjdHgpOworCisJCS8qIENoZWNrIGFnYWluc3QgdGhlIHNjYWxlciByYXRpby4gKi8KKwkJaWYgKHNfZnJhbWUtPmhlaWdodCA+IChTQ0FMRVJfTUFYX1ZSQVRJTyAqIGRfZnJhbWUtPmhlaWdodCkgfHwKKwkJICAgIHNfZnJhbWUtPndpZHRoID4gKFNDQUxFUl9NQVhfSFJBVElPICogZF9mcmFtZS0+d2lkdGgpKSB7CisJCQllcnIoIm91dCBvZiBzY2FsZXIgcmFuZ2UiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogSW5wdXQgRE1BIG1vZGUgaXMgbm90IGFsbG93ZWQgd2hlbiB0aGUgc2NhbGVyIGlzIGRpc2FibGVkLiAqLworCWN0eC0+c2NhbGVyLmVuYWJsZWQgPSAxOworCisJaWYgKGZsYWdzICYgRklNQ19TUkNfQUREUikgeworCQlidWYgPSB2NGwyX20ybV9uZXh0X3NyY19idWYoY3R4LT5tMm1fY3R4KTsKKwkJcmV0ID0gZmltY19wcmVwYXJlX2FkZHIoY3R4LCBidWYsCisJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmbGFncyAmIEZJTUNfRFNUX0FERFIpIHsKKwkJYnVmID0gdjRsMl9tMm1fbmV4dF9kc3RfYnVmKGN0eC0+bTJtX2N0eCk7CisJCXJldCA9IGZpbWNfcHJlcGFyZV9hZGRyKGN0eCwgYnVmLAorCQkJVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmaW1jX2RtYV9ydW4odm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IHByaXY7CisJc3RydWN0IGZpbWNfZGV2ICpmaW1jOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJldDsKKworCWlmIChXQVJOKCFjdHgsICJudWxsIGhhcmR3YXJlIGNvbnRleHQiKSkKKwkJcmV0dXJuOworCisJZmltYyA9IGN0eC0+ZmltY19kZXY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5zbG9jaywgZmxhZ3MpOworCXNldF9iaXQoU1RfTTJNX1BFTkQsICZmaW1jLT5zdGF0ZSk7CisKKwljdHgtPnN0YXRlIHw9IChGSU1DX1NSQ19BRERSIHwgRklNQ19EU1RfQUREUik7CisJcmV0ID0gZmltY19wcmVwYXJlX2NvbmZpZyhjdHgsIGN0eC0+c3RhdGUpOworCWlmIChyZXQpIHsKKwkJZXJyKCJnZW5lcmFsIGNvbmZpZ3VyYXRpb24gZXJyb3IiKTsKKwkJZ290byBkbWFfdW5sb2NrOworCX0KKworCWlmIChmaW1jLT5tMm0uY3R4ICE9IGN0eCkKKwkJY3R4LT5zdGF0ZSB8PSBGSU1DX1BBUkFNUzsKKworCWZpbWNfaHdfc2V0X2lucHV0X2FkZHIoZmltYywgJmN0eC0+c19mcmFtZS5wYWRkcik7CisKKwlpZiAoY3R4LT5zdGF0ZSAmIEZJTUNfUEFSQU1TKSB7CisJCWZpbWNfaHdfc2V0X2lucHV0X3BhdGgoY3R4KTsKKwkJZmltY19od19zZXRfaW5fZG1hKGN0eCk7CisJCWlmIChmaW1jX3NldF9zY2FsZXJfaW5mbyhjdHgpKSB7CisJCQllcnIoInNjYWxlciBjb25maWd1cmF0aW9uIGVycm9yIik7CisJCQlnb3RvIGRtYV91bmxvY2s7CisJCX0KKwkJZmltY19od19zZXRfcHJlc2NhbGVyKGN0eCk7CisJCWZpbWNfaHdfc2V0X3NjYWxlcihjdHgpOworCQlmaW1jX2h3X3NldF90YXJnZXRfZm9ybWF0KGN0eCk7CisJCWZpbWNfaHdfc2V0X3JvdGF0aW9uKGN0eCk7CisJCWZpbWNfaHdfc2V0X2VmZmVjdChjdHgpOworCX0KKworCWZpbWNfaHdfc2V0X291dHB1dF9wYXRoKGN0eCk7CisJaWYgKGN0eC0+c3RhdGUgJiAoRklNQ19EU1RfQUREUiB8IEZJTUNfUEFSQU1TKSkKKwkJZmltY19od19zZXRfb3V0cHV0X2FkZHIoZmltYywgJmN0eC0+ZF9mcmFtZS5wYWRkcik7CisKKwlpZiAoY3R4LT5zdGF0ZSAmIEZJTUNfUEFSQU1TKQorCQlmaW1jX2h3X3NldF9vdXRfZG1hKGN0eCk7CisKKwlpZiAoY3R4LT5zY2FsZXIuZW5hYmxlZCkKKwkJZmltY19od19zdGFydF9zY2FsZXIoZmltYyk7CisJZmltY19od19lbl9jYXB0dXJlKGN0eCk7CisKKwljdHgtPnN0YXRlID0gMDsKKwlmaW1jX2h3X3N0YXJ0X2luX2RtYShmaW1jKTsKKworCWZpbWMtPm0ybS5jdHggPSBjdHg7CisKK2RtYV91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5zbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBmaW1jX2pvYl9hYm9ydCh2b2lkICpwcml2KQoreworCS8qIE5vdGhpbmcgZG9uZSBpbiBqb2JfYWJvcnQuICovCit9CisKK3N0YXRpYyB2b2lkIGZpbWNfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIGludCBmaW1jX2J1Zl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJCXVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGZpbWNfZnJhbWUgKmZyYW1lOworCisJZnJhbWUgPSBjdHhfbTJtX2dldF9mcmFtZShjdHgsIHZxLT50eXBlKTsKKwlpZiAoSVNfRVJSKGZyYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnJhbWUpOworCisJKnNpemUgPSAoZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodCAqIGZyYW1lLT5mbXQtPmRlcHRoKSA+PiAzOworCWlmICgwID09ICpjb3VudCkKKwkJKmNvdW50ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW1jX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmY3R4LT5maW1jX2Rldi0+bTJtLnY0bDJfZGV2OworCXN0cnVjdCBmaW1jX2ZyYW1lICpmcmFtZTsKKwlpbnQgcmV0OworCisJZnJhbWUgPSBjdHhfbTJtX2dldF9mcmFtZShjdHgsIHZxLT50eXBlKTsKKwlpZiAoSVNfRVJSKGZyYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnJhbWUpOworCisJaWYgKHZiLT5iYWRkcikgeworCQlpZiAodmItPmJzaXplIDwgZnJhbWUtPnNpemUpIHsKKwkJCXY0bDJfZXJyKHY0bDJfZGV2LAorCQkJCSJVc2VyLXByb3ZpZGVkIGJ1ZmZlciB0b28gc21hbGwgKCVkIDwgJWQpXG4iLAorCQkJCSB2Yi0+YnNpemUsIGZyYW1lLT5zaXplKTsKKwkJCVdBUk5fT04oMSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAodmItPnN0YXRlICE9IFZJREVPQlVGX05FRURTX0lOSVQKKwkJICAgJiYgdmItPmJzaXplIDwgZnJhbWUtPnNpemUpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmItPndpZHRoICAgICAgID0gZnJhbWUtPndpZHRoOworCXZiLT5oZWlnaHQgICAgICA9IGZyYW1lLT5oZWlnaHQ7CisJdmItPmJ5dGVzcGVybGluZSA9IChmcmFtZS0+d2lkdGggKiBmcmFtZS0+Zm10LT5kZXB0aCkgPj4gMzsKKwl2Yi0+c2l6ZSAgICAgICAgPSBmcmFtZS0+c2l6ZTsKKwl2Yi0+ZmllbGQgICAgICAgPSBmaWVsZDsKKworCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgeworCQlyZXQgPSB2aWRlb2J1Zl9pb2xvY2sodnEsIHZiLCBOVUxMKTsKKwkJaWYgKHJldCkgeworCQkJdjRsMl9lcnIodjRsMl9kZXYsICJJb2xvY2sgZmFpbGVkXG4iKTsKKwkJCWZpbWNfYnVmX3JlbGVhc2UodnEsIHZiKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmltY19idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gdnEtPnByaXZfZGF0YTsKKwl2NGwyX20ybV9idWZfcXVldWUoY3R4LT5tMm1fY3R4LCB2cSwgdmIpOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBmaW1jX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cAk9IGZpbWNfYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZQk9IGZpbWNfYnVmX3ByZXBhcmUsCisJLmJ1Zl9xdWV1ZQk9IGZpbWNfYnVmX3F1ZXVlLAorCS5idWZfcmVsZWFzZQk9IGZpbWNfYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGZpbWNfbTJtX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaW1jX2RldiAqZmltYyA9IGN0eC0+ZmltY19kZXY7CisKKwlzdHJuY3B5KGNhcC0+ZHJpdmVyLCBmaW1jLT5wZGV2LT5uYW1lLCBzaXplb2YoY2FwLT5kcml2ZXIpIC0gMSk7CisJc3RybmNweShjYXAtPmNhcmQsIGZpbWMtPnBkZXYtPm5hbWUsIHNpemVvZihjYXAtPmNhcmQpIC0gMSk7CisJY2FwLT5idXNfaW5mb1swXSA9IDA7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMSwgMCwgMCk7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVklERU9fT1VUUFVUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fZW51bV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlzdHJ1Y3QgZmltY19mbXQgKmZtdDsKKworCWlmIChmLT5pbmRleCA+PSBBUlJBWV9TSVpFKGZpbWNfZm9ybWF0cykpCisJCXJldHVybiAtRUlOVkFMOworCisJZm10ID0gJmZpbWNfZm9ybWF0c1tmLT5pbmRleF07CisJc3RybmNweShmLT5kZXNjcmlwdGlvbiwgZm10LT5uYW1lLCBzaXplb2YoZi0+ZGVzY3JpcHRpb24pIC0gMSk7CisJZi0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW1jX20ybV9nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKwlzdHJ1Y3QgZmltY19mcmFtZSAqZnJhbWU7CisKKwlmcmFtZSA9IGN0eF9tMm1fZ2V0X2ZyYW1lKGN0eCwgZi0+dHlwZSk7CisJaWYgKElTX0VSUihmcmFtZSkpCisJCXJldHVybiBQVFJfRVJSKGZyYW1lKTsKKworCWYtPmZtdC5waXgud2lkdGgJPSBmcmFtZS0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQJPSBmcmFtZS0+aGVpZ2h0OworCWYtPmZtdC5waXguZmllbGQJPSBWNEwyX0ZJRUxEX05PTkU7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdAk9IGZyYW1lLT5mbXQtPmZvdXJjYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbWNfZm10ICpmaW5kX2Zvcm1hdChzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IGZpbWNfZm10ICpmbXQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaW1jX2Zvcm1hdHMpOyArK2kpIHsKKwkJZm10ID0gJmZpbWNfZm9ybWF0c1tpXTsKKwkJaWYgKGZtdC0+Zm91cmNjID09IGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRShmaW1jX2Zvcm1hdHMpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBmbXQ7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBmaW1jX2ZtdCAqZm10OworCXUzMiBtYXhfd2lkdGgsIG1heF9oZWlnaHQsIG1vZF94LCBtb2RfeTsKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IHByaXY7CisJc3RydWN0IGZpbWNfZGV2ICpmaW1jID0gY3R4LT5maW1jX2RldjsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgKnZhcmlhbnQgPSBmaW1jLT52YXJpYW50OworCisJZm10ID0gZmluZF9mb3JtYXQoZik7CisJaWYgKCFmbXQpIHsKKwkJdjRsMl9lcnIoJmZpbWMtPm0ybS52NGwyX2RldiwKKwkJCSAiRm91cmNjIGZvcm1hdCAoMHglWCkgaW52YWxpZC5cbiIsICBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBpeC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpCisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJZWxzZSBpZiAoVjRMMl9GSUVMRF9OT05FICE9IHBpeC0+ZmllbGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwkJbWF4X3dpZHRoID0gdmFyaWFudC0+c2NhbGVyX2Rpc193OworCQltYXhfaGVpZ2h0ID0gdmFyaWFudC0+c2NhbGVyX2Rpc193OworCQltb2RfeCA9IHZhcmlhbnQtPm1pbl9pbnBfcGl4c2l6ZTsKKwkJbW9kX3kgPSB2YXJpYW50LT5taW5faW5wX3BpeHNpemU7CisJfSBlbHNlIGlmIChmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQltYXhfd2lkdGggPSB2YXJpYW50LT5vdXRfcm90X2Rpc193OworCQltYXhfaGVpZ2h0ID0gdmFyaWFudC0+b3V0X3JvdF9kaXNfdzsKKwkJbW9kX3ggPSB2YXJpYW50LT5taW5fb3V0X3BpeHNpemU7CisJCW1vZF95ID0gdmFyaWFudC0+bWluX291dF9waXhzaXplOworCX0gZWxzZSB7CisJCWVycigiV3Jvbmcgc3RyZWFtIHR5cGUgKCVkKSIsIGYtPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYmcoIm1heF93PSAlZCwgbWF4X2g9ICVkIiwgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0KTsKKworCWlmIChwaXgtPmhlaWdodCA+IG1heF9oZWlnaHQpCisJCXBpeC0+aGVpZ2h0ID0gbWF4X2hlaWdodDsKKwlpZiAocGl4LT53aWR0aCA+IG1heF93aWR0aCkKKwkJcGl4LT53aWR0aCA9IG1heF93aWR0aDsKKworCWlmICh0aWxlZF9mbXQoZm10KSkgeworCQltb2RfeCA9IDY0OyAvKiA2NHgzMiB0aWxlICovCisJCW1vZF95ID0gMzI7CisJfQorCisJZGJnKCJtb2RfeD0gMHglWCwgbW9kX3k9IDB4JVgiLCBtb2RfeCwgbW9kX3kpOworCisJcGl4LT53aWR0aCA9IChwaXgtPndpZHRoID09IDApID8gbW9kX3ggOiBBTElHTihwaXgtPndpZHRoLCBtb2RfeCk7CisJcGl4LT5oZWlnaHQgPSAocGl4LT5oZWlnaHQgPT0gMCkgPyBtb2RfeSA6IEFMSUdOKHBpeC0+aGVpZ2h0LCBtb2RfeSk7CisKKwlpZiAocGl4LT5ieXRlc3BlcmxpbmUgPT0gMCB8fAorCSAgICBwaXgtPmJ5dGVzcGVybGluZSAqIDggLyBmbXQtPmRlcHRoID4gcGl4LT53aWR0aCkKKwkJcGl4LT5ieXRlc3BlcmxpbmUgPSAocGl4LT53aWR0aCAqIGZtdC0+ZGVwdGgpID4+IDM7CisKKwlpZiAocGl4LT5zaXplaW1hZ2UgPT0gMCkKKwkJcGl4LT5zaXplaW1hZ2UgPSBwaXgtPmhlaWdodCAqIHBpeC0+Ynl0ZXNwZXJsaW5lOworCisJZGJnKCJwaXgtPmJ5dGVzcGVybGluZT0gJWQsIGZtdC0+ZGVwdGg9ICVkIiwKKwkgICAgcGl4LT5ieXRlc3BlcmxpbmUsIGZtdC0+ZGVwdGgpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBmaW1jX20ybV9zX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmN0eC0+ZmltY19kZXYtPm0ybS52NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnNyY192cSwgKmRzdF92cTsKKwlzdHJ1Y3QgZmltY19mcmFtZSAqZnJhbWU7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04oIWN0eCk7CisKKwlyZXQgPSBmaW1jX20ybV90cnlfZm10KGZpbGUsIHByaXYsIGYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZjdHgtPmZpbWNfZGV2LT5sb2NrKTsKKworCXNyY192cSA9IHY0bDJfbTJtX2dldF9zcmNfdnEoY3R4LT5tMm1fY3R4KTsKKwlkc3RfdnEgPSB2NGwyX20ybV9nZXRfZHN0X3ZxKGN0eC0+bTJtX2N0eCk7CisKKwltdXRleF9sb2NrKCZzcmNfdnEtPnZiX2xvY2spOworCW11dGV4X2xvY2soJmRzdF92cS0+dmJfbG9jayk7CisKKwlpZiAoZi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgeworCQlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeShzcmNfdnEpKSB7CisJCQl2NGwyX2Vycih2NGwyX2RldiwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gc19mbXRfb3V0OworCQl9CisJCWZyYW1lID0gJmN0eC0+c19mcmFtZTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+c2xvY2ssIGZsYWdzKTsKKwkJY3R4LT5zdGF0ZSB8PSBGSU1DX1NSQ19GTVQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+c2xvY2ssIGZsYWdzKTsKKworCX0gZWxzZSBpZiAoZi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJaWYgKHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koZHN0X3ZxKSkgeworCQkJdjRsMl9lcnIodjRsMl9kZXYsICIlcyBxdWV1ZSBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIHNfZm10X291dDsKKwkJfQorCQlmcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisJCWN0eC0+c3RhdGUgfD0gRklNQ19EU1RfRk1UOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJdjRsMl9lcnIoJmN0eC0+ZmltY19kZXYtPm0ybS52NGwyX2RldiwKKwkJCSAiV3JvbmcgYnVmZmVyL3ZpZGVvIHF1ZXVlIHR5cGUgKCVkKVxuIiwgZi0+dHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBpeCA9ICZmLT5mbXQucGl4OworCWZyYW1lLT5mbXQgPSBmaW5kX2Zvcm1hdChmKTsKKwlpZiAoIWZyYW1lLT5mbXQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBzX2ZtdF9vdXQ7CisJfQorCisJZnJhbWUtPmZfd2lkdGggPSBwaXgtPmJ5dGVzcGVybGluZSAqIDggLyBmcmFtZS0+Zm10LT5kZXB0aDsKKwlmcmFtZS0+Zl9oZWlnaHQgPSBwaXgtPnNpemVpbWFnZS9waXgtPmJ5dGVzcGVybGluZTsKKwlmcmFtZS0+d2lkdGggPSBwaXgtPndpZHRoOworCWZyYW1lLT5oZWlnaHQgPSBwaXgtPmhlaWdodDsKKwlmcmFtZS0+b193aWR0aCA9IHBpeC0+d2lkdGg7CisJZnJhbWUtPm9faGVpZ2h0ID0gcGl4LT5oZWlnaHQ7CisJZnJhbWUtPm9mZnNfaCA9IDA7CisJZnJhbWUtPm9mZnNfdiA9IDA7CisJZnJhbWUtPnNpemUgPSAocGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogZnJhbWUtPmZtdC0+ZGVwdGgpID4+IDM7CisJc3JjX3ZxLT5maWVsZCA9IGRzdF92cS0+ZmllbGQgPSBwaXgtPmZpZWxkOworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisJY3R4LT5zdGF0ZSB8PSBGSU1DX1BBUkFNUzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisKKwlkYmcoImZfd2lkdGg9ICVkLCBmX2hlaWdodD0gJWQiLCBmcmFtZS0+Zl93aWR0aCwgZnJhbWUtPmZfaGVpZ2h0KTsKKworc19mbXRfb3V0OgorCW11dGV4X3VubG9jaygmZHN0X3ZxLT52Yl9sb2NrKTsKKwltdXRleF91bmxvY2soJnNyY192cS0+dmJfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPmZpbWNfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZpbWNfbTJtX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXFidWZzKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKwlyZXR1cm4gdjRsMl9tMm1fcmVxYnVmcyhmaWxlLCBjdHgtPm0ybV9jdHgsIHJlcWJ1ZnMpOworfQorCitzdGF0aWMgaW50IGZpbWNfbTJtX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSBwcml2OworCXJldHVybiB2NGwyX20ybV9xdWVyeWJ1ZihmaWxlLCBjdHgtPm0ybV9jdHgsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSBwcml2OworCisJcmV0dXJuIHY0bDJfbTJtX3FidWYoZmlsZSwgY3R4LT5tMm1fY3R4LCBidWYpOworfQorCitzdGF0aWMgaW50IGZpbWNfbTJtX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSBwcml2OworCXJldHVybiB2NGwyX20ybV9kcWJ1ZihmaWxlLCBjdHgtPm0ybV9jdHgsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IHByaXY7CisJcmV0dXJuIHY0bDJfbTJtX3N0cmVhbW9uKGZpbGUsIGN0eC0+bTJtX2N0eCwgdHlwZSk7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKwlyZXR1cm4gdjRsMl9tMm1fc3RyZWFtb2ZmKGZpbGUsIGN0eC0+bTJtX2N0eCwgdHlwZSk7Cit9CisKK2ludCBmaW1jX20ybV9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmM7CisJYyA9IGdldF9jdHJsKHFjLT5pZCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqcWMgPSAqYzsKKwlyZXR1cm4gMDsKK30KKworaW50IGZpbWNfbTJtX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQljdHJsLT52YWx1ZSA9IChGTElQX1hfQVhJUyAmIGN0eC0+ZmxpcCkgPyAxIDogMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJY3RybC0+dmFsdWUgPSAoRkxJUF9ZX0FYSVMgJiBjdHgtPmZsaXApID8gMSA6IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfUk9UQVRFOgorCQljdHJsLT52YWx1ZSA9IGN0eC0+cm90YXRpb247CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXY0bDJfZXJyKCZjdHgtPmZpbWNfZGV2LT5tMm0udjRsMl9kZXYsICJJbnZhbGlkIGNvbnRyb2xcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGJnKCJjdHJsLT52YWx1ZT0gJWQiLCBjdHJsLT52YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfY3RybF92YWwoc3RydWN0IGZpbWNfY3R4ICpjdHgsCisJCQkgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjOworCWMgPSBnZXRfY3RybChjdHJsLT5pZCk7CisJaWYgKCFjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjdHJsLT52YWx1ZSA8IGMtPm1pbmltdW0gfHwgY3RybC0+dmFsdWUgPiBjLT5tYXhpbXVtCisJCXx8IChjLT5zdGVwICE9IDAgJiYgY3RybC0+dmFsdWUgJSBjLT5zdGVwICE9IDApKSB7CisJCXY0bDJfZXJyKCZjdHgtPmZpbWNfZGV2LT5tMm0udjRsMl9kZXYsCisJCSJJbnZhbGlkIGNvbnRyb2wgdmFsdWVcbiIpOworCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZpbWNfbTJtX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gcHJpdjsKKwlzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgKnZhcmlhbnQgPSBjdHgtPmZpbWNfZGV2LT52YXJpYW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBjaGVja19jdHJsX3ZhbChjdHgsIGN0cmwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwkJaWYgKGN0eC0+cm90YXRpb24gIT0gMCkKKwkJCXJldHVybiAwOworCQlpZiAoY3RybC0+dmFsdWUpCisJCQljdHgtPmZsaXAgfD0gRkxJUF9YX0FYSVM7CisJCWVsc2UKKwkJCWN0eC0+ZmxpcCAmPSB+RkxJUF9YX0FYSVM7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJaWYgKGN0eC0+cm90YXRpb24gIT0gMCkKKwkJCXJldHVybiAwOworCQlpZiAoY3RybC0+dmFsdWUpCisJCQljdHgtPmZsaXAgfD0gRkxJUF9ZX0FYSVM7CisJCWVsc2UKKwkJCWN0eC0+ZmxpcCAmPSB+RkxJUF9ZX0FYSVM7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9ST1RBVEU6CisJCWlmIChjdHJsLT52YWx1ZSA9PSA5MCB8fCBjdHJsLT52YWx1ZSA9PSAyNzApIHsKKwkJCWlmIChjdHgtPm91dF9wYXRoID09IEZJTUNfTENERklGTyAmJgorCQkJICAgICF2YXJpYW50LT5oYXNfaW5wX3JvdCkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIGlmIChjdHgtPmluX3BhdGggPT0gRklNQ19ETUEgJiYKKwkJCQkgICAhdmFyaWFudC0+aGFzX291dF9yb3QpIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCQljdHgtPnJvdGF0aW9uID0gY3RybC0+dmFsdWU7CisJCWlmIChjdHJsLT52YWx1ZSA9PSAxODApCisJCQljdHgtPmZsaXAgPSBGTElQX1hZX0FYSVM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdjRsMl9lcnIoJmN0eC0+ZmltY19kZXYtPm0ybS52NGwyX2RldiwgIkludmFsaWQgY29udHJvbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5zbG9jaywgZmxhZ3MpOworCWN0eC0+c3RhdGUgfD0gRklNQ19QQVJBTVM7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT5zbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgZmltY19tMm1fY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyKQoreworCXN0cnVjdCBmaW1jX2ZyYW1lICpmcmFtZTsKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IGZoOworCisJZnJhbWUgPSBjdHhfbTJtX2dldF9mcmFtZShjdHgsIGNyLT50eXBlKTsKKwlpZiAoSVNfRVJSKGZyYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnJhbWUpOworCisJY3ItPmJvdW5kcy5sZWZ0ID0gMDsKKwljci0+Ym91bmRzLnRvcCA9IDA7CisJY3ItPmJvdW5kcy53aWR0aCA9IGZyYW1lLT5mX3dpZHRoOworCWNyLT5ib3VuZHMuaGVpZ2h0ID0gZnJhbWUtPmZfaGVpZ2h0OworCWNyLT5kZWZyZWN0LmxlZnQgPSBmcmFtZS0+b2Zmc19oOworCWNyLT5kZWZyZWN0LnRvcCA9IGZyYW1lLT5vZmZzX3Y7CisJY3ItPmRlZnJlY3Qud2lkdGggPSBmcmFtZS0+b193aWR0aDsKKwljci0+ZGVmcmVjdC5oZWlnaHQgPSBmcmFtZS0+b19oZWlnaHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3IpCit7CisJc3RydWN0IGZpbWNfZnJhbWUgKmZyYW1lOworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJZnJhbWUgPSBjdHhfbTJtX2dldF9mcmFtZShjdHgsIGNyLT50eXBlKTsKKwlpZiAoSVNfRVJSKGZyYW1lKSkKKwkJcmV0dXJuIFBUUl9FUlIoZnJhbWUpOworCisJY3ItPmMubGVmdCA9IGZyYW1lLT5vZmZzX2g7CisJY3ItPmMudG9wID0gZnJhbWUtPm9mZnNfdjsKKwljci0+Yy53aWR0aCA9IGZyYW1lLT53aWR0aDsKKwljci0+Yy5oZWlnaHQgPSBmcmFtZS0+aGVpZ2h0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3IpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZpbWNfZGV2ICpmaW1jID0gY3R4LT5maW1jX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBmaW1jX2ZyYW1lICpmOworCXUzMiBtaW5fc2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjci0+Yy50b3AgPCAwIHx8IGNyLT5jLmxlZnQgPCAwKSB7CisJCXY0bDJfZXJyKCZmaW1jLT5tMm0udjRsMl9kZXYsCisJCQkiZG9lc24ndCBzdXBwb3J0IG5lZ2F0aXZlIHZhbHVlcyBmb3IgdG9wICYgbGVmdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjci0+Yy53aWR0aCAgPD0gMCB8fCBjci0+Yy5oZWlnaHQgPD0gMCkgeworCQl2NGwyX2VycigmZmltYy0+bTJtLnY0bDJfZGV2LAorCQkJImNyb3Agd2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZiA9IGN0eF9tMm1fZ2V0X2ZyYW1lKGN0eCwgY3ItPnR5cGUpOworCWlmIChJU19FUlIoZikpCisJCXJldHVybiBQVFJfRVJSKGYpOworCisJLyogQWRqdXN0IHRvIHJlcXVpcmVkIHBpeGVsIGJvdW5kYXJ5LiAqLworCW1pbl9zaXplID0gKGNyLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKSA/CisJCWZpbWMtPnZhcmlhbnQtPm1pbl9pbnBfcGl4c2l6ZSA6IGZpbWMtPnZhcmlhbnQtPm1pbl9vdXRfcGl4c2l6ZTsKKworCWNyLT5jLndpZHRoID0gcm91bmRfZG93bihjci0+Yy53aWR0aCwgbWluX3NpemUpOworCWNyLT5jLmhlaWdodCA9IHJvdW5kX2Rvd24oY3ItPmMuaGVpZ2h0LCBtaW5fc2l6ZSk7CisJY3ItPmMubGVmdCA9IHJvdW5kX2Rvd24oY3ItPmMubGVmdCArIDEsIG1pbl9zaXplKTsKKwljci0+Yy50b3AgPSByb3VuZF9kb3duKGNyLT5jLnRvcCArIDEsIG1pbl9zaXplKTsKKworCWlmICgoY3ItPmMubGVmdCArIGNyLT5jLndpZHRoID4gZi0+b193aWR0aCkKKwkJfHwgKGNyLT5jLnRvcCArIGNyLT5jLmhlaWdodCA+IGYtPm9faGVpZ2h0KSkgeworCQl2NGwyX2VycigmZmltYy0+bTJtLnY0bDJfZGV2LCAiRXJyb3IgaW4gU19DUk9QIHBhcmFtc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisJaWYgKChjdHgtPnN0YXRlICYgRklNQ19TUkNfRk1UKSAmJiAoY3R4LT5zdGF0ZSAmIEZJTUNfRFNUX0ZNVCkpIHsKKwkJLyogQ2hlY2sgZm9yIHRoZSBwaXhlbCBzY2FsaW5nIHJhdGlvIHdoZW4gY3JvcHBpbmcgaW5wdXQgaW1nLiAqLworCQlpZiAoY3ItPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpCisJCQlyZXQgPSBmaW1jX2NoZWNrX3NjYWxlcl9yYXRpbygmY3ItPmMsICZjdHgtPmRfZnJhbWUpOworCQllbHNlIGlmIChjci0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCQlyZXQgPSBmaW1jX2NoZWNrX3NjYWxlcl9yYXRpbygmY3ItPmMsICZjdHgtPnNfZnJhbWUpOworCisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+c2xvY2ssIGZsYWdzKTsKKwkJCXY0bDJfZXJyKCZmaW1jLT5tMm0udjRsMl9kZXYsICAiT3V0IG9mIHNjYWxlciByYW5nZSIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJY3R4LT5zdGF0ZSB8PSBGSU1DX1BBUkFNUzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPnNsb2NrLCBmbGFncyk7CisKKwlmLT5vZmZzX2ggPSBjci0+Yy5sZWZ0OworCWYtPm9mZnNfdiA9IGNyLT5jLnRvcDsKKwlmLT53aWR0aCA9IGNyLT5jLndpZHRoOworCWYtPmhlaWdodCA9IGNyLT5jLmhlaWdodDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBmaW1jX20ybV9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAkJPSBmaW1jX20ybV9xdWVyeWNhcCwKKworCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IGZpbWNfbTJtX2VudW1fZm10LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX291dAk9IGZpbWNfbTJtX2VudW1fZm10LAorCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IGZpbWNfbTJtX2dfZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX291dAkJPSBmaW1jX20ybV9nX2ZtdCwKKworCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IGZpbWNfbTJtX3RyeV9mbXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdXQJCT0gZmltY19tMm1fdHJ5X2ZtdCwKKworCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBmaW1jX20ybV9zX2ZtdCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdXQJCT0gZmltY19tMm1fc19mbXQsCisKKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IGZpbWNfbTJtX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZgkJPSBmaW1jX20ybV9xdWVyeWJ1ZiwKKworCS52aWRpb2NfcWJ1ZgkJCT0gZmltY19tMm1fcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQkJPSBmaW1jX20ybV9kcWJ1ZiwKKworCS52aWRpb2Nfc3RyZWFtb24JCT0gZmltY19tMm1fc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYJCT0gZmltY19tMm1fc3RyZWFtb2ZmLAorCisJLnZpZGlvY19xdWVyeWN0cmwJCT0gZmltY19tMm1fcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsCQkJPSBmaW1jX20ybV9nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwJCQk9IGZpbWNfbTJtX3NfY3RybCwKKworCS52aWRpb2NfZ19jcm9wCQkJPSBmaW1jX20ybV9nX2Nyb3AsCisJLnZpZGlvY19zX2Nyb3AJCQk9IGZpbWNfbTJtX3NfY3JvcCwKKwkudmlkaW9jX2Nyb3BjYXAJCQk9IGZpbWNfbTJtX2Nyb3BjYXAKKworfTsKKworc3RhdGljIHZvaWQgcXVldWVfaW5pdCh2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkgICAgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGZpbWNfY3R4ICpjdHggPSBwcml2OworCXN0cnVjdCBmaW1jX2RldiAqZmltYyA9IGN0eC0+ZmltY19kZXY7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQodnEsICZmaW1jX3FvcHMsCisJCWZpbWMtPm0ybS52NGwyX2Rldi5kZXYsCisJCSZmaW1jLT5pcnFsb2NrLCB0eXBlLCBWNEwyX0ZJRUxEX05PTkUsCisJCXNpemVvZihzdHJ1Y3QgZmltY192aWRfYnVmZmVyKSwgcHJpdik7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZmltY19kZXYgKmZpbWMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmZpbWMtPmxvY2spOworCWZpbWMtPm0ybS5yZWZjbnQrKzsKKwlzZXRfYml0KFNUX09VVERNQV9SVU4sICZmaW1jLT5zdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZmaW1jLT5sb2NrKTsKKworCisJY3R4ID0ga3phbGxvYyhzaXplb2YgKmN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY3R4OworCWN0eC0+ZmltY19kZXYgPSBmaW1jOworCS8qIGRlZmF1bHQgZm9ybWF0ICovCisJY3R4LT5zX2ZyYW1lLmZtdCA9ICZmaW1jX2Zvcm1hdHNbMF07CisJY3R4LT5kX2ZyYW1lLmZtdCA9ICZmaW1jX2Zvcm1hdHNbMF07CisJLyogcGVyIHVzZXIgcHJvY2VzcyBkZXZpY2UgY29udGV4dCBpbml0aWFsaXphdGlvbiAqLworCWN0eC0+c3RhdGUgPSAwOworCWN0eC0+ZmxhZ3MgPSAwOworCWN0eC0+ZWZmZWN0LnR5cGUgPSBTNVBfRklNQ19FRkZFQ1RfT1JJR0lOQUw7CisJY3R4LT5pbl9wYXRoID0gRklNQ19ETUE7CisJY3R4LT5vdXRfcGF0aCA9IEZJTUNfRE1BOworCXNwaW5fbG9ja19pbml0KCZjdHgtPnNsb2NrKTsKKworCWN0eC0+bTJtX2N0eCA9IHY0bDJfbTJtX2N0eF9pbml0KGN0eCwgZmltYy0+bTJtLm0ybV9kZXYsIHF1ZXVlX2luaXQpOworCWlmIChJU19FUlIoY3R4LT5tMm1fY3R4KSkgeworCQllcnIgPSBQVFJfRVJSKGN0eC0+bTJtX2N0eCk7CisJCWtmcmVlKGN0eCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmltY19tMm1fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZmltY19kZXYgKmZpbWMgPSBjdHgtPmZpbWNfZGV2OworCisJdjRsMl9tMm1fY3R4X3JlbGVhc2UoY3R4LT5tMm1fY3R4KTsKKwlrZnJlZShjdHgpOworCW11dGV4X2xvY2soJmZpbWMtPmxvY2spOworCWlmICgtLWZpbWMtPm0ybS5yZWZjbnQgPD0gMCkKKwkJY2xlYXJfYml0KFNUX09VVERNQV9SVU4sICZmaW1jLT5zdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZmaW1jLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBmaW1jX20ybV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBmaW1jX2N0eCAqY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXJldHVybiB2NGwyX20ybV9wb2xsKGZpbGUsIGN0eC0+bTJtX2N0eCwgd2FpdCk7Cit9CisKKworc3RhdGljIGludCBmaW1jX20ybV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZmltY19jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlyZXR1cm4gdjRsMl9tMm1fbW1hcChmaWxlLCBjdHgtPm0ybV9jdHgsIHZtYSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZmltY19tMm1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZmltY19tMm1fb3BlbiwKKwkucmVsZWFzZQk9IGZpbWNfbTJtX3JlbGVhc2UsCisJLnBvbGwJCT0gZmltY19tMm1fcG9sbCwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorCS5tbWFwCQk9IGZpbWNfbTJtX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfbTJtX29wcyBtMm1fb3BzID0geworCS5kZXZpY2VfcnVuCT0gZmltY19kbWFfcnVuLAorCS5qb2JfYWJvcnQJPSBmaW1jX2pvYl9hYm9ydCwKK307CisKKworc3RhdGljIGludCBmaW1jX3JlZ2lzdGVyX20ybV9kZXZpY2Uoc3RydWN0IGZpbWNfZGV2ICpmaW1jKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWZpbWMpCisJCXJldHVybiAtRU5PREVWOworCisJcGRldiA9IGZpbWMtPnBkZXY7CisJdjRsMl9kZXYgPSAmZmltYy0+bTJtLnY0bDJfZGV2OworCisJLyogc2V0IG5hbWUgaWYgaXQgaXMgZW1wdHkgKi8KKwlpZiAoIXY0bDJfZGV2LT5uYW1lWzBdKQorCQlzbnByaW50Zih2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSwKKwkJCSAiJXMubTJtIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7OworCisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2ZmQpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfbTJtX3IxOworCX0KKworCXZmZC0+Zm9wcwk9ICZmaW1jX20ybV9mb3BzOworCXZmZC0+aW9jdGxfb3BzCT0gJmZpbWNfbTJtX2lvY3RsX29wczsKKwl2ZmQtPm1pbm9yCT0gLTE7CisJdmZkLT5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisKKwlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXM6bTJtIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCisJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBmaW1jKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmaW1jKTsKKworCWZpbWMtPm0ybS52ZmQgPSB2ZmQ7CisJZmltYy0+bTJtLm0ybV9kZXYgPSB2NGwyX20ybV9pbml0KCZtMm1fb3BzKTsKKwlpZiAoSVNfRVJSKGZpbWMtPm0ybS5tMm1fZGV2KSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHY0bDItbTJtIGRldmljZVxuIik7CisJCXJldCA9IFBUUl9FUlIoZmltYy0+bTJtLm0ybV9kZXYpOworCQlnb3RvIGVycl9tMm1fcjI7CisJfQorCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOworCWlmIChyZXQpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsCisJCQkgIiVzKCk6IGZhaWxlZCB0byByZWdpc3RlciB2aWRlbyBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfbTJtX3IzOworCX0KKwl2NGwyX2luZm8odjRsMl9kZXYsCisJCSAgIkZJTUMgbTJtIGRyaXZlciByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwgdmZkLT5udW0pOworCisJcmV0dXJuIDA7CisKK2Vycl9tMm1fcjM6CisJdjRsMl9tMm1fcmVsZWFzZShmaW1jLT5tMm0ubTJtX2Rldik7CitlcnJfbTJtX3IyOgorCXZpZGVvX2RldmljZV9yZWxlYXNlKGZpbWMtPm0ybS52ZmQpOworZXJyX20ybV9yMToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbWNfdW5yZWdpc3Rlcl9tMm1fZGV2aWNlKHN0cnVjdCBmaW1jX2RldiAqZmltYykKK3sKKwlpZiAoZmltYykgeworCQl2NGwyX20ybV9yZWxlYXNlKGZpbWMtPm0ybS5tMm1fZGV2KTsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZmltYy0+bTJtLnZmZCk7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKGZpbWMtPm0ybS52ZmQpOworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZmaW1jLT5tMm0udjRsMl9kZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgZmltY19jbGtfcmVsZWFzZShzdHJ1Y3QgZmltY19kZXYgKmZpbWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9GSU1DX0NMT0NLUzsgaSsrKSB7CisJCWlmIChmaW1jLT5jbG9ja1tpXSkgeworCQkJY2xrX2Rpc2FibGUoZmltYy0+Y2xvY2tbaV0pOworCQkJY2xrX3B1dChmaW1jLT5jbG9ja1tpXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZmltY19jbGtfZ2V0KHN0cnVjdCBmaW1jX2RldiAqZmltYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZJTUNfQ0xPQ0tTOyBpKyspIHsKKwkJZmltYy0+Y2xvY2tbaV0gPSBjbGtfZ2V0KCZmaW1jLT5wZGV2LT5kZXYsIGZpbWNfY2xvY2tfbmFtZVtpXSk7CisJCWlmIChJU19FUlIoZmltYy0+Y2xvY2tbaV0pKSB7CisJCQlkZXZfZXJyKCZmaW1jLT5wZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBnZXQgZmltYyBjbG9jazogJXNcbiIsCisJCQkJZmltY19jbG9ja19uYW1lW2ldKTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwkJY2xrX2VuYWJsZShmaW1jLT5jbG9ja1tpXSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZmltY19kZXYgKmZpbWM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNhbXN1bmdfZmltY19kcml2ZXJkYXRhICpkcnZfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzKCk6XG4iLCBfX2Z1bmNfXyk7CisKKwlkcnZfZGF0YSA9IChzdHJ1Y3Qgc2Ftc3VuZ19maW1jX2RyaXZlcmRhdGEgKikKKwkJcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAocGRldi0+aWQgPj0gZHJ2X2RhdGEtPmRldnNfY250KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgcGxhdGZvcm0gZGV2aWNlIGlkOiAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZmltYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaW1jX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZmltYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaW1jLT5pZCA9IHBkZXYtPmlkOworCWZpbWMtPnZhcmlhbnQgPSBkcnZfZGF0YS0+dmFyaWFudFtmaW1jLT5pZF07CisJZmltYy0+cGRldiA9IHBkZXY7CisJZmltYy0+c3RhdGUgPSBTVF9JRExFOworCisJc3Bpbl9sb2NrX2luaXQoJmZpbWMtPmlycWxvY2spOworCXNwaW5fbG9ja19pbml0KCZmaW1jLT5zbG9jayk7CisKKwltdXRleF9pbml0KCZmaW1jLT5sb2NrKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgdGhlIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2luZm87CisJfQorCisJZmltYy0+cmVnc19yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghZmltYy0+cmVnc19yZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG9idGFpbiByZWdpc3RlciByZWdpb25cbiIpOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9pbmZvOworCX0KKworCWZpbWMtPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFmaW1jLT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9yZXFfcmVnaW9uOworCX0KKworCXJldCA9IGZpbWNfY2xrX2dldChmaW1jKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdzX3VubWFwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IElSUSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfY2xrOworCX0KKwlmaW1jLT5pcnEgPSByZXMtPnN0YXJ0OworCisJZmltY19od19yZXNldChmaW1jKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGZpbWMtPmlycSwgZmltY19pc3IsIDAsIHBkZXYtPm5hbWUsIGZpbWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluc3RhbGwgaXJxICglZClcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlmaW1jLT53b3JrX3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShkZXZfbmFtZSgmZmltYy0+cGRldi0+ZGV2KSk7CisJaWYgKCFmaW1jLT53b3JrX3F1ZXVlKQorCQlnb3RvIGVycl9pcnE7CisKKwlyZXQgPSBmaW1jX3JlZ2lzdGVyX20ybV9kZXZpY2UoZmltYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfd3E7CisKKwlmaW1jX2h3X2VuX2xhc3RpcnEoZmltYywgdHJ1ZSk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlcygpOiBmaW1jLSVkIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5XG4iLAorCQlfX2Z1bmNfXywgZmltYy0+aWQpOworCisJcmV0dXJuIDA7CisKK2Vycl93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShmaW1jLT53b3JrX3F1ZXVlKTsKK2Vycl9pcnE6CisJZnJlZV9pcnEoZmltYy0+aXJxLCBmaW1jKTsKK2Vycl9jbGs6CisJZmltY19jbGtfcmVsZWFzZShmaW1jKTsKK2Vycl9yZWdzX3VubWFwOgorCWlvdW5tYXAoZmltYy0+cmVncyk7CitlcnJfcmVxX3JlZ2lvbjoKKwlyZWxlYXNlX3Jlc291cmNlKGZpbWMtPnJlZ3NfcmVzKTsKKwlrZnJlZShmaW1jLT5yZWdzX3Jlcyk7CitlcnJfaW5mbzoKKwlrZnJlZShmaW1jKTsKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5zdGFsbFxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZmltY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZmltY19kZXYgKmZpbWMgPQorCQkoc3RydWN0IGZpbWNfZGV2ICopcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2NGwyX2luZm8oJmZpbWMtPm0ybS52NGwyX2RldiwgIlJlbW92aW5nICVzXG4iLCBwZGV2LT5uYW1lKTsKKworCWZyZWVfaXJxKGZpbWMtPmlycSwgZmltYyk7CisKKwlmaW1jX2h3X3Jlc2V0KGZpbWMpOworCisJZmltY191bnJlZ2lzdGVyX20ybV9kZXZpY2UoZmltYyk7CisJZmltY19jbGtfcmVsZWFzZShmaW1jKTsKKwlpb3VubWFwKGZpbWMtPnJlZ3MpOworCXJlbGVhc2VfcmVzb3VyY2UoZmltYy0+cmVnc19yZXMpOworCWtmcmVlKGZpbWMtPnJlZ3NfcmVzKTsKKwlrZnJlZShmaW1jKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMDFfdmFyaWFudF9zNXAgPSB7CisJLmhhc19pbnBfcm90CT0gMSwKKwkuaGFzX291dF9yb3QJPSAxLAorCS5taW5faW5wX3BpeHNpemUgPSAxNiwKKwkubWluX291dF9waXhzaXplID0gMTYsCisKKwkuc2NhbGVyX2VuX3cJPSAzMjY0LAorCS5zY2FsZXJfZGlzX3cJPSA4MTkyLAorCS5pbl9yb3RfZW5faAk9IDE5MjAsCisJLmluX3JvdF9kaXNfdwk9IDgxOTIsCisJLm91dF9yb3RfZW5fdwk9IDE5MjAsCisJLm91dF9yb3RfZGlzX3cJPSA0MjI0LAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMl92YXJpYW50X3M1cCA9IHsKKwkubWluX2lucF9waXhzaXplID0gMTYsCisJLm1pbl9vdXRfcGl4c2l6ZSA9IDE2LAorCisJLnNjYWxlcl9lbl93CT0gNDIyNCwKKwkuc2NhbGVyX2Rpc193CT0gODE5MiwKKwkuaW5fcm90X2VuX2gJPSAxOTIwLAorCS5pbl9yb3RfZGlzX3cJPSA4MTkyLAorCS5vdXRfcm90X2VuX3cJPSAxOTIwLAorCS5vdXRfcm90X2Rpc193CT0gNDIyNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzAxX3ZhcmlhbnRfczVwdjIxMCA9IHsKKwkuaGFzX2lucF9yb3QJPSAxLAorCS5oYXNfb3V0X3JvdAk9IDEsCisJLm1pbl9pbnBfcGl4c2l6ZSA9IDE2LAorCS5taW5fb3V0X3BpeHNpemUgPSAzMiwKKworCS5zY2FsZXJfZW5fdwk9IDQyMjQsCisJLnNjYWxlcl9kaXNfdwk9IDgxOTIsCisJLmluX3JvdF9lbl9oCT0gMTkyMCwKKwkuaW5fcm90X2Rpc193CT0gODE5MiwKKwkub3V0X3JvdF9lbl93CT0gMTkyMCwKKwkub3V0X3JvdF9kaXNfdwk9IDQyMjQsCit9OworCitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMyX3ZhcmlhbnRfczVwdjIxMCA9IHsKKwkubWluX2lucF9waXhzaXplID0gMTYsCisJLm1pbl9vdXRfcGl4c2l6ZSA9IDMyLAorCisJLnNjYWxlcl9lbl93CT0gMTkyMCwKKwkuc2NhbGVyX2Rpc193CT0gODE5MiwKKwkuaW5fcm90X2VuX2gJPSAxMjgwLAorCS5pbl9yb3RfZGlzX3cJPSA4MTkyLAorCS5vdXRfcm90X2VuX3cJPSAxMjgwLAorCS5vdXRfcm90X2Rpc193CT0gMTkyMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX2RyaXZlcmRhdGEgZmltY19kcnZkYXRhX3M1cCA9IHsKKwkudmFyaWFudCA9IHsKKwkJWzBdID0gJmZpbWMwMV92YXJpYW50X3M1cCwKKwkJWzFdID0gJmZpbWMwMV92YXJpYW50X3M1cCwKKwkJWzJdID0gJmZpbWMyX3ZhcmlhbnRfczVwLAorCX0sCisJLmRldnNfY250ID0gMworfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfZHJpdmVyZGF0YSBmaW1jX2RydmRhdGFfczVwdjIxMCA9IHsKKwkudmFyaWFudCA9IHsKKwkJWzBdID0gJmZpbWMwMV92YXJpYW50X3M1cHYyMTAsCisJCVsxXSA9ICZmaW1jMDFfdmFyaWFudF9zNXB2MjEwLAorCQlbMl0gPSAmZmltYzJfdmFyaWFudF9zNXB2MjEwLAorCX0sCisJLmRldnNfY250ID0gMworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgZmltY19kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZQkJPSAiczVwLWZpbWMiLAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmZmltY19kcnZkYXRhX3M1cCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzNXB2MjEwLWZpbWMiLAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmZmltY19kcnZkYXRhX3M1cHYyMTAsCisJfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBmaW1jX2RyaXZlcl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmaW1jX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZmltY19wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoZmltY19yZW1vdmUpLAorCS5pZF90YWJsZQk9IGZpbWNfZHJpdmVyX2lkcywKKwkuZHJpdmVyID0geworCQkubmFtZQk9IE1PRFVMRV9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9Cit9OworCitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPCisJIlM1UEMgQ2FtZXJhIEludGVyZmFjZSBWNEwyIERyaXZlciwgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljc1xuIjsKKworc3RhdGljIGludCBfX2luaXQgZmltY19pbml0KHZvaWQpCit7CisJdTMyIHJldDsKKwlwcmludGsoYmFubmVyKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZmltY19kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGSU1DIHBsYXRmb3JtIGRyaXZlciByZWdpc3RlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZmltY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZpbWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZmltY19pbml0KTsKK21vZHVsZV9leGl0KGZpbWNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlN5bHdlc3RlciBOYXdyb2NraSwgcy5uYXdyb2NraUBzYW1zdW5nLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MvUzVQIEZJTUMgKHZpZGVvIHBvc3Rwcm9jZXNzb3IpIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzZTBjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmgKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFN5bHdlc3RlciBOYXdyb2NraSwgPHMubmF3cm9ja2lAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEZJTUNfQ09SRV9IXworI2RlZmluZSBGSU1DX0NPUkVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtY29yZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1tZW0ybWVtLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSAicmVncy1maW1jLmgiCisKKyNkZWZpbmUgZXJyKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0VSUiAiJXM6JWQ6ICIgZm10ICJcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZGJnKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICIlczolZDogIiBmbXQgIlxuIiwgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpCisjZWxzZQorI2RlZmluZSBkYmcoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgTlVNX0ZJTUNfQ0xPQ0tTCQkyCisjZGVmaW5lIE1PRFVMRV9OQU1FCQkiczVwLWZpbWMiCisjZGVmaW5lIEZJTUNfTUFYX0RFVlMJCTMKKyNkZWZpbmUgRklNQ19NQVhfT1VUX0JVRlMJNAorI2RlZmluZSBTQ0FMRVJfTUFYX0hSQVRJTwk2NAorI2RlZmluZSBTQ0FMRVJfTUFYX1ZSQVRJTwk2NAorCitlbnVtIHsKKwlTVF9JRExFLAorCVNUX09VVERNQV9SVU4sCisJU1RfTTJNX1BFTkQsCit9OworCisjZGVmaW5lIGZpbWNfbTJtX2FjdGl2ZShkZXYpIHRlc3RfYml0KFNUX09VVERNQV9SVU4sICYoZGV2KS0+c3RhdGUpCisjZGVmaW5lIGZpbWNfbTJtX3BlbmRpbmcoZGV2KSB0ZXN0X2JpdChTVF9NMk1fUEVORCwgJihkZXYpLT5zdGF0ZSkKKworZW51bSBmaW1jX2RhdGFwYXRoIHsKKwlGSU1DX0lUVV9DQU1fQSwKKwlGSU1DX0lUVV9DQU1fQiwKKwlGSU1DX01JUElfQ0FNLAorCUZJTUNfRE1BLAorCUZJTUNfTENERklGTywKKwlGSU1DX1dSSVRFQkFDSworfTsKKworZW51bSBmaW1jX2NvbG9yX2ZtdCB7CisJUzVQX0ZJTUNfUkdCNTY1LAorCVM1UF9GSU1DX1JHQjY2NiwKKwlTNVBfRklNQ19SR0I4ODgsCisJUzVQX0ZJTUNfWUNCQ1I0MjAsCisJUzVQX0ZJTUNfWUNCQ1I0MjIsCisJUzVQX0ZJTUNfWUNCWUNSNDIyLAorCVM1UF9GSU1DX1lDUllDQjQyMiwKKwlTNVBfRklNQ19DQllDUlk0MjIsCisJUzVQX0ZJTUNfQ1JZQ0JZNDIyLAorCVM1UF9GSU1DX1JHQjMwX0xPQ0FMLAorCVM1UF9GSU1DX1lDQkNSNDQ0X0xPQ0FMLAorCVM1UF9GSU1DX01BWF9DT0xPUiA9IFM1UF9GSU1DX1lDQkNSNDQ0X0xPQ0FMLAorCVM1UF9GSU1DX0NPTE9SX01BU0sgPSAweDBGLAorfTsKKworLyogWS9DYi9DciBjb21wb25lbnRzIG9yZGVyIGF0IERNQSBvdXRwdXQgZm9yIDEgcGxhbmUgWUNiQ3IgNDoyOjIgZm9ybWF0cy4gKi8KKyNkZWZpbmUJUzVQX0ZJTUNfT1VUX0NSWUNCWQlTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9DUllDQlkKKyNkZWZpbmUJUzVQX0ZJTUNfT1VUX0NCWUNSWQlTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9ZQ1JZQ0IKKyNkZWZpbmUJUzVQX0ZJTUNfT1VUX1lDUllDQglTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9DQllDUlkKKyNkZWZpbmUJUzVQX0ZJTUNfT1VUX1lDQllDUglTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9ZQ0JZQ1IKKworLyogSW5wdXQgWS9DYi9DciBjb21wb25lbnRzIG9yZGVyIGZvciAxIHBsYW5lIFlDYkNyIDQ6MjoyIGNvbG9yIGZvcm1hdHMuICovCisjZGVmaW5lCVM1UF9GSU1DX0lOX0NSWUNCWQlTNVBfTVNDVFJMX09SREVSNDIyX0NSWUNCWQorI2RlZmluZQlTNVBfRklNQ19JTl9DQllDUlkJUzVQX01TQ1RSTF9PUkRFUjQyMl9ZQ1JZQ0IKKyNkZWZpbmUJUzVQX0ZJTUNfSU5fWUNSWUNCCVM1UF9NU0NUUkxfT1JERVI0MjJfQ0JZQ1JZCisjZGVmaW5lCVM1UF9GSU1DX0lOX1lDQllDUglTNVBfTVNDVFJMX09SREVSNDIyX1lDQllDUgorCisvKiBDYi9DciBjaHJvbWluYW5jZSBjb21wb25lbnRzIG9yZGVyIGZvciAyIHBsYW5lIFkvQ2JDciA0OjI6MiBmb3JtYXRzLiAqLworI2RlZmluZQlTNVBfRklNQ19MU0JfQ1JDQglTNVBfQ0lPQ1RSTF9PUkRFUjQyMl8yUF9MU0JfQ1JDQgorCisvKiBUaGUgZW1iZWRkZWQgaW1hZ2UgZWZmZWN0IHNlbGVjdGlvbiAqLworI2RlZmluZQlTNVBfRklNQ19FRkZFQ1RfT1JJR0lOQUwJUzVQX0NJSU1HRUZGX0ZJTl9CWVBBU1MKKyNkZWZpbmUJUzVQX0ZJTUNfRUZGRUNUX0FSQklUUkFSWQlTNVBfQ0lJTUdFRkZfRklOX0FSQklUUkFSWQorI2RlZmluZQlTNVBfRklNQ19FRkZFQ1RfTkVHQVRJVkUJUzVQX0NJSU1HRUZGX0ZJTl9ORUdBVElWRQorI2RlZmluZQlTNVBfRklNQ19FRkZFQ1RfQVJURlJFRVpFCVM1UF9DSUlNR0VGRl9GSU5fQVJURlJFRVpFCisjZGVmaW5lCVM1UF9GSU1DX0VGRkVDVF9FTUJPU1NJTkcJUzVQX0NJSU1HRUZGX0ZJTl9FTUJPU1NJTkcKKyNkZWZpbmUJUzVQX0ZJTUNfRUZGRUNUX1NJS0hPVUVUVEUJUzVQX0NJSU1HRUZGX0ZJTl9TSUxIT1VFVFRFCisKKy8qIFRoZSBoYXJkd2FyZSBjb250ZXh0IHN0YXRlLiAqLworI2RlZmluZQlGSU1DX1BBUkFNUwkJCSgxIDw8IDApCisjZGVmaW5lCUZJTUNfU1JDX0FERFIJCQkoMSA8PCAxKQorI2RlZmluZQlGSU1DX0RTVF9BRERSCQkJKDEgPDwgMikKKyNkZWZpbmUJRklNQ19TUkNfRk1UCQkJKDEgPDwgMykKKyNkZWZpbmUJRklNQ19EU1RfRk1UCQkJKDEgPDwgNCkKKworLyogSW1hZ2UgY29udmVyc2lvbiBmbGFncyAqLworI2RlZmluZQlGSU1DX0lOX0RNQV9BQ0NFU1NfVElMRUQJKDEgPDwgMCkKKyNkZWZpbmUJRklNQ19JTl9ETUFfQUNDRVNTX0xJTkVBUgkoMCA8PCAwKQorI2RlZmluZQlGSU1DX09VVF9ETUFfQUNDRVNTX1RJTEVECSgxIDw8IDEpCisjZGVmaW5lCUZJTUNfT1VUX0RNQV9BQ0NFU1NfTElORUFSCSgwIDw8IDEpCisjZGVmaW5lCUZJTUNfU0NBTl9NT0RFX1BST0dSRVNTSVZFCSgwIDw8IDIpCisjZGVmaW5lCUZJTUNfU0NBTl9NT0RFX0lOVEVSTEFDRUQJKDEgPDwgMikKKy8qIFlDYkNyIGRhdGEgZHluYW1pYyByYW5nZSBmb3IgUkdCLVlVViBjb2xvciBjb252ZXJzaW9uLiBZL0NiL0NyOiAoMCB+IDI1NSkgKi8KKyNkZWZpbmUJRklNQ19DT0xPUl9SQU5HRV9XSURFCQkoMCA8PCAzKQorLyogWSAoMTYgfiAyMzUpLCBDYi9DciAoMTYgfiAyNDApICovCisjZGVmaW5lCUZJTUNfQ09MT1JfUkFOR0VfTkFSUk9XCQkoMSA8PCAzKQorCisjZGVmaW5lCUZMSVBfTk9ORQkJCTAKKyNkZWZpbmUJRkxJUF9YX0FYSVMJCQkxCisjZGVmaW5lCUZMSVBfWV9BWElTCQkJMgorI2RlZmluZQlGTElQX1hZX0FYSVMJCQkoRkxJUF9YX0FYSVMgfCBGTElQX1lfQVhJUykKKworLyoqCisgKiBzdHJ1Y3QgZmltY19mbXQgLSB0aGUgZHJpdmVyJ3MgaW50ZXJuYWwgY29sb3IgZm9ybWF0IGRhdGEKKyAqIEBuYW1lOiBmb3JtYXQgZGVzY3JpcHRpb24KKyAqIEBmb3VyY2M6IHRoZSBmb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQKKyAqIEBjb2xvcjogdGhlIGNvcnJlc3BvbmRpbmcgZmltY19jb2xvcl9mbXQKKyAqIEBkZXB0aDogbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsCisgKiBAYnVmZl9jbnQ6IG51bWJlciBvZiBwaHlzaWNhbGx5IG5vbi1jb250aWd1b3VzIGRhdGEgcGxhbmVzCisgKiBAcGxhbmVzX2NudDogbnVtYmVyIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBkYXRhIHBsYW5lcworICovCitzdHJ1Y3QgZmltY19mbXQgeworCWNoYXIJKm5hbWU7CisJdTMyCWZvdXJjYzsKKwl1MzIJY29sb3I7CisJdTMyCWRlcHRoOworCXUxNglidWZmX2NudDsKKwl1MTYJcGxhbmVzX2NudDsKK307CisKKy8qKgorICogc3RydWN0IGZpbWNfZG1hX29mZnNldCAtIHBpeGVsIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgRE1BCisgKiBAeV9oOgl5IHZhbHVlIGhvcml6b250YWwgb2Zmc2V0CisgKiBAeV92Ogl5IHZhbHVlIHZlcnRpY2FsIG9mZnNldAorICogQGNiX2g6CWNiIHZhbHVlIGhvcml6b250YWwgb2Zmc2V0CisgKiBAY2JfdjoJY2IgdmFsdWUgdmVydGljYWwgb2Zmc2V0CisgKiBAY3JfaDoJY3IgdmFsdWUgaG9yaXpvbnRhbCBvZmZzZXQKKyAqIEBjcl92OgljciB2YWx1ZSB2ZXJ0aWNhbCBvZmZzZXQKKyAqLworc3RydWN0IGZpbWNfZG1hX29mZnNldCB7CisJaW50CXlfaDsKKwlpbnQJeV92OworCWludAljYl9oOworCWludAljYl92OworCWludAljcl9oOworCWludAljcl92OworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmltY19lZmZlY3QgLSB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgIkFyYml0cmFyeSIgaW1hZ2UgZWZmZWN0CisgKiBAdHlwZToJZWZmZWN0IHR5cGUKKyAqIEBwYXRfY2I6CWNyIHZhbHVlIHdoZW4gdHlwZSBpcyAiYXJiaXRyYXJ5IgorICogQHBhdF9jcjoJY3IgdmFsdWUgd2hlbiB0eXBlIGlzICJhcmJpdHJhcnkiCisgKi8KK3N0cnVjdCBmaW1jX2VmZmVjdCB7CisJdTMyCXR5cGU7CisJdTgJcGF0X2NiOworCXU4CXBhdF9jcjsKK307CisKKy8qKgorICogc3RydWN0IGZpbWNfc2NhbGVyIC0gdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgRklNQyBpbmV0cm5hbCBzY2FsZXIKKyAqCisgKiBAZW5hYmxlZDoJCXRoZSBmbGFnIHNldCB3aGVuIHRoZSBzY2FsZXIgaXMgdXNlZAorICogQGhmYWN0b3I6CQlob3Jpem9udGFsIHNoaWZ0IGZhY3RvcgorICogQHZmYWN0b3I6CQl2ZXJ0aWNhbCBzaGlmdCBmYWN0b3IKKyAqIEBwcmVfaHJhdGlvOgkJaG9yaXpvbnRhbCByYXRpbyBvZiB0aGUgcHJlc2NhbGVyCisgKiBAcHJlX3ZyYXRpbzoJCXZlcnRpY2FsIHJhdGlvIG9mIHRoZSBwcmVzY2FsZXIKKyAqIEBwcmVfZHN0X3dpZHRoOgl0aGUgcHJlc2NhbGVyJ3MgZGVzdGluYXRpb24gd2lkdGgKKyAqIEBwcmVfZHN0X2hlaWdodDoJdGhlIHByZXNjYWxlcidzIGRlc3RpbmF0aW9uIGhlaWdodAorICogQHNjYWxldXBfaDoJCWZsYWcgaW5kaWNhdGluZyBzY2FsaW5nIHVwIGhvcml6b250YWxseQorICogQHNjYWxldXBfdjoJCWZsYWcgaW5kaWNhdGluZyBzY2FsaW5nIHVwIHZlcnRpY2FsbHkKKyAqIEBtYWluX2hyYXRpbzoJdGhlIG1haW4gc2NhbGVyJ3MgaG9yaXpvbnRhbCByYXRpbworICogQG1haW5fdnJhdGlvOgl0aGUgbWFpbiBzY2FsZXIncyB2ZXJ0aWNhbCByYXRpbworICogQHJlYWxfd2lkdGg6CQlzb3VyY2Ugd2lkdGggLSBvZmZzZXQKKyAqIEByZWFsX2hlaWdodDoJc291cmNlIGhlaWdodCAtIG9mZnNldAorICogQGNvcHlfbW9kZToJCWZsYWcgc2V0IGlmIG9uZS10by1vbmUgbW9kZSBpcyB1c2VkLCBpLmUuIG5vIHNjYWxpbmcKKyAqCQkJYW5kIGNvbG9yIGZvcm1hdCBjb252ZXJzaW9uCisgKi8KK3N0cnVjdCBmaW1jX3NjYWxlciB7CisJdTMyCWVuYWJsZWQ7CisJdTMyCWhmYWN0b3I7CisJdTMyCXZmYWN0b3I7CisJdTMyCXByZV9ocmF0aW87CisJdTMyCXByZV92cmF0aW87CisJdTMyCXByZV9kc3Rfd2lkdGg7CisJdTMyCXByZV9kc3RfaGVpZ2h0OworCXUzMglzY2FsZXVwX2g7CisJdTMyCXNjYWxldXBfdjsKKwl1MzIJbWFpbl9ocmF0aW87CisJdTMyCW1haW5fdnJhdGlvOworCXUzMglyZWFsX3dpZHRoOworCXUzMglyZWFsX2hlaWdodDsKKwl1MzIJY29weV9tb2RlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmltY19hZGRyIC0gdGhlIEZJTUMgcGh5c2ljYWwgYWRkcmVzcyBzZXQgZm9yIERNQQorICoKKyAqIEB5OgkgbHVtaW5hbmNlIHBsYW5lIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEBjYjoJIENiIHBsYW5lIHBoeXNpY2FsIGFkZHJlc3MKKyAqIEBjcjoJIENyIHBsYW5lIHBoeXNpY2FsIGFkZHJlc3MKKyAqLworc3RydWN0IGZpbWNfYWRkciB7CisJdTMyCXk7CisJdTMyCWNiOworCXUzMgljcjsKK307CisKKy8qKgorICogc3RydWN0IGZpbWNfdmlkX2J1ZmZlciAtIHRoZSBkcml2ZXIncyB2aWRlbyBidWZmZXIKKyAqIEB2YjoJdjRsIHZpZGVvYnVmIGJ1ZmZlcgorICovCitzdHJ1Y3QgZmltY192aWRfYnVmZmVyIHsKKwlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyCXZiOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZmltY19mcmFtZSAtIGlucHV0L291dHB1dCBmcmFtZSBmb3JtYXQgcHJvcGVydGllcworICoKKyAqIEBmX3dpZHRoOglpbWFnZSBmdWxsIHdpZHRoICh2aXJ0dWFsIHNjcmVlbiBzaXplKQorICogQGZfaGVpZ2h0OglpbWFnZSBmdWxsIGhlaWdodCAodmlydHVhbCBzY3JlZW4gc2l6ZSkKKyAqIEBvX3dpZHRoOglvcmlnaW5hbCBpbWFnZSB3aWR0aCBhcyBzZXQgYnkgU19GTVQKKyAqIEBvX2hlaWdodDoJb3JpZ2luYWwgaW1hZ2UgaGVpZ2h0IGFzIHNldCBieSBTX0ZNVAorICogQG9mZnNfaDoJaW1hZ2UgaG9yaXpvbnRhbCBwaXhlbCBvZmZzZXQKKyAqIEBvZmZzX3Y6CWltYWdlIHZlcnRpY2FsIHBpeGVsIG9mZnNldAorICogQHdpZHRoOglpbWFnZSBwaXhlbCB3aWR0aAorICogQGhlaWdodDoJaW1hZ2UgcGl4ZWwgd2VpZ2h0CisgKiBAcGFkZHI6CWltYWdlIGZyYW1lIGJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzZXMKKyAqIEBidWZfY250OgludW1iZXIgb2YgYnVmZmVycyBkZXBlbmRpbmcgb24gYSBjb2xvciBmb3JtYXQKKyAqIEBzaXplOglpbWFnZSBzaXplIGluIGJ5dGVzCisgKiBAY29sb3I6CWNvbG9yIGZvcm1hdAorICogQGRtYV9vZmZzZXQ6CURNQSBvZmZzZXQgaW4gYnl0ZXMKKyAqLworc3RydWN0IGZpbWNfZnJhbWUgeworCXUzMglmX3dpZHRoOworCXUzMglmX2hlaWdodDsKKwl1MzIJb193aWR0aDsKKwl1MzIJb19oZWlnaHQ7CisJdTMyCW9mZnNfaDsKKwl1MzIJb2Zmc192OworCXUzMgl3aWR0aDsKKwl1MzIJaGVpZ2h0OworCXUzMglzaXplOworCXN0cnVjdCBmaW1jX2FkZHIJcGFkZHI7CisJc3RydWN0IGZpbWNfZG1hX29mZnNldAlkbWFfb2Zmc2V0OworCXN0cnVjdCBmaW1jX2ZtdAkJKmZtdDsKK307CisKKy8qKgorICogc3RydWN0IGZpbWNfbTJtX2RldmljZSAtIHY0bDIgbWVtb3J5LXRvLW1lbW9yeSBkZXZpY2UgZGF0YQorICogQHZmZDogdGhlIHZpZGVvIGRldmljZSBub2RlIGZvciB2NGwyIG0ybSBtb2RlCisgKiBAdjRsMl9kZXY6IHY0bDIgZGV2aWNlIGZvciBtMm0gbW9kZQorICogQG0ybV9kZXY6IHY0bDIgbWVtb3J5LXRvLW1lbW9yeSBkZXZpY2UgZGF0YQorICogQGN0eDogaGFyZHdhcmUgY29udGV4dCBkYXRhCisgKiBAcmVmY250OiB0aGUgcmVmZXJlbmNlIGNvdW50ZXIKKyAqLworc3RydWN0IGZpbWNfbTJtX2RldmljZSB7CisJc3RydWN0IHZpZGVvX2RldmljZQkqdmZkOworCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsKKwlzdHJ1Y3QgdjRsMl9tMm1fZGV2CSptMm1fZGV2OworCXN0cnVjdCBmaW1jX2N0eAkJKmN0eDsKKwlpbnQJCQlyZWZjbnQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCAtIGNhbWVyYSBpbnRlcmZhY2UgdmFyaWFudCBpbmZvcm1hdGlvbgorICoKKyAqIEBwaXhfaG9mZjogaW5kaWNhdGUgd2hldGhlciBob3Jpem9udGFsIG9mZnNldCBpcyBpbiBwaXhlbHMgb3IgaW4gYnl0ZXMKKyAqIEBoYXNfaW5wX3JvdDogc2V0IGlmIGhhcyBpbnB1dCByb3RhdG9yCisgKiBAaGFzX291dF9yb3Q6IHNldCBpZiBoYXMgb3V0cHV0IHJvdGF0b3IKKyAqIEBtaW5faW5wX3BpeHNpemU6IG1pbmltdW0gaW5wdXQgcGl4ZWwgc2l6ZQorICogQG1pbl9vdXRfcGl4c2l6ZTogbWluaW11bSBvdXRwdXQgcGl4ZWwgc2l6ZQorICogQHNjYWxlcl9lbl93OiBtYXhpbXVtIGlucHV0IHBpeGVsIHdpZHRoIHdoZW4gdGhlIHNjYWxlciBpcyBlbmFibGVkCisgKiBAc2NhbGVyX2Rpc193OiBtYXhpbXVtIGlucHV0IHBpeGVsIHdpZHRoIHdoZW4gdGhlIHNjYWxlciBpcyBkaXNhYmxlZAorICogQGluX3JvdF9lbl9oOiBtYXhpbXVtIGlucHV0IHdpZHRoIHdoZW4gdGhlIGlucHV0IHJvdGF0b3IgaXMgdXNlZAorICogQGluX3JvdF9kaXNfdzogbWF4aW11bSBpbnB1dCB3aWR0aCB3aGVuIHRoZSBpbnB1dCByb3RhdG9yIGlzIHVzZWQKKyAqIEBvdXRfcm90X2VuX3c6IG1heGltdW0gb3V0cHV0IHdpZHRoIGZvciB0aGUgb3V0cHV0IHJvdGF0b3IgZW5hYmxlZAorICogQG91dF9yb3RfZGlzX3c6IG1heGltdW0gb3V0cHV0IHdpZHRoIGZvciB0aGUgb3V0cHV0IHJvdGF0b3IgZW5hYmxlZAorICovCitzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgeworCXVuc2lnbmVkIGludAlwaXhfaG9mZjoxOworCXVuc2lnbmVkIGludAloYXNfaW5wX3JvdDoxOworCXVuc2lnbmVkIGludAloYXNfb3V0X3JvdDoxOworCisJdTE2CQltaW5faW5wX3BpeHNpemU7CisJdTE2CQltaW5fb3V0X3BpeHNpemU7CisJdTE2CQlzY2FsZXJfZW5fdzsKKwl1MTYJCXNjYWxlcl9kaXNfdzsKKwl1MTYJCWluX3JvdF9lbl9oOworCXUxNgkJaW5fcm90X2Rpc193OworCXUxNgkJb3V0X3JvdF9lbl93OworCXUxNgkJb3V0X3JvdF9kaXNfdzsKK307CisKKy8qKgorICogc3RydWN0IHNhbXN1bmdfZmltY19kcml2ZXJkYXRhIC0gcGVyLWRldmljZSB0eXBlIGRyaXZlciBkYXRhIGZvciBpbml0IHRpbWUuCisgKgorICogQHZhcmlhbnQ6IHRoZSB2YXJpYW50IGluZm9ybWF0aW9uIGZvciB0aGlzIGRyaXZlci4KKyAqIEBkZXZfY250OiBudW1iZXIgb2YgZmltYyBzdWItZGV2aWNlcyBhdmFpbGFibGUgaW4gU29DCisgKi8KK3N0cnVjdCBzYW1zdW5nX2ZpbWNfZHJpdmVyZGF0YSB7CisJc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50ICp2YXJpYW50W0ZJTUNfTUFYX0RFVlNdOworCWludAlkZXZzX2NudDsKK307CisKK3N0cnVjdCBmaW1jX2N0eDsKKworLyoqCisgKiBzdHJ1Y3QgZmltY19zdWJkZXYgLSBhYnN0cmFjdGlvbiBmb3IgYSBGSU1DIGVudGl0eQorICoKKyAqIEBzbG9jazoJdGhlIHNwaW5sb2NrIHByb3RlY3RpbmcgdGhpcyBkYXRhIHN0cnVjdHVyZQorICogQGxvY2s6CXRoZSBtdXRleCBwcm90ZWN0aW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBwZGV2Oglwb2ludGVyIHRvIHRoZSBGSU1DIHBsYXRmb3JtIGRldmljZQorICogQGlkOgkJRklNQyBkZXZpY2UgaW5kZXggKDAuLjIpCisgKiBAY2xvY2tbXToJdGhlIGNsb2NrcyByZXF1aXJlZCBmb3IgRklNQyBvcGVyYXRpb24KKyAqIEByZWdzOgl0aGUgbWFwcGVkIGhhcmR3YXJlIHJlZ2lzdGVycworICogQHJlZ3NfcmVzOgl0aGUgcmVzb3VyY2UgY2xhaW1lZCBmb3IgSU8gcmVnaXN0ZXJzCisgKiBAaXJxOglpbnRlcnJ1cHQgbnVtYmVyIG9mIHRoZSBGSU1DIHN1YmRldmljZQorICogQGlycWxvY2s6CXNwaW5sb2NrIHByb3RlY3RpbmcgdmlkZWJ1ZmZlciBxdWV1ZQorICogQG0ybToJbWVtb3J5LXRvLW1lbW9yeSBWNEwyIGRldmljZSBpbmZvcm1hdGlvbgorICogQHN0YXRlOgl0aGUgRklNQyBkZXZpY2Ugc3RhdGUgZmxhZ3MKKyAqLworc3RydWN0IGZpbWNfZGV2IHsKKwlzcGlubG9ja190CQkJc2xvY2s7CisJc3RydWN0IG11dGV4CQkJbG9jazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQJKnZhcmlhbnQ7CisJaW50CQkJCWlkOworCXN0cnVjdCBjbGsJCQkqY2xvY2tbTlVNX0ZJTUNfQ0xPQ0tTXTsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqcmVnc19yZXM7CisJaW50CQkJCWlycTsKKwlzcGlubG9ja190CQkJaXJxbG9jazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkJKndvcmtfcXVldWU7CisJc3RydWN0IGZpbWNfbTJtX2RldmljZQkJbTJtOworCXVuc2lnbmVkIGxvbmcJCQlzdGF0ZTsKK307CisKKy8qKgorICogZmltY19jdHggLSB0aGUgZGV2aWNlIGNvbnRleHQgZGF0YQorICoKKyAqIEBsb2NrOgkJbXV0ZXggcHJvdGVjdGluZyB0aGlzIGRhdGEgc3RydWN0dXJlCisgKiBAc19mcmFtZToJCXNvdXJjZSBmcmFtZSBwcm9wZXJ0aWVzCisgKiBAZF9mcmFtZToJCWRlc3RpbmF0aW9uIGZyYW1lIHByb3BlcnRpZXMKKyAqIEBvdXRfb3JkZXJfMXA6CW91dHB1dCAxLXBsYW5lIFlDQkNSIG9yZGVyCisgKiBAb3V0X29yZGVyXzJwOglvdXRwdXQgMi1wbGFuZSBZQ0JDUiBvcmRlcgorICogQGluX29yZGVyXzFwCQlpbnB1dCAxLXBsYW5lIFlDQkNSIG9yZGVyCisgKiBAaW5fb3JkZXJfMnA6CWlucHV0IDItcGxhbmUgWUNCQ1Igb3JkZXIKKyAqIEBpbl9wYXRoOgkJaW5wdXQgbW9kZSAoRE1BIG9yIGNhbWVyYSkKKyAqIEBvdXRfcGF0aDoJCW91dHB1dCBtb2RlIChETUEgb3IgRklGTykKKyAqIEBzY2FsZXI6CQlpbWFnZSBzY2FsZXIgcHJvcGVydGllcworICogQGVmZmVjdDoJCWltYWdlIGVmZmVjdAorICogQHJvdGF0aW9uOgkJaW1hZ2UgY2xvY2t3aXNlIHJvdGF0aW9uIGluIGRlZ3JlZXMKKyAqIEBmbGlwOgkJaW1hZ2UgZmxpcCBtb2RlCisgKiBAZmxhZ3M6CQlhbiBhZGRpdGlvbmFsIGZsYWdzIGZvciBpbWFnZSBjb252ZXJzaW9uCisgKiBAc3RhdGU6CQlmbGFncyB0byBrZWVwIHRyYWNrIG9mIHVzZXIgY29uZmlndXJhdGlvbgorICogQGZpbWNfZGV2OgkJdGhlIEZJTUMgZGV2aWNlIHRoaXMgY29udGV4dCBhcHBsaWVzIHRvCisgKiBAbTJtX2N0eDoJCW1lbW9yeS10by1tZW1vcnkgZGV2aWNlIGNvbnRleHQKKyAqLworc3RydWN0IGZpbWNfY3R4IHsKKwlzcGlubG9ja190CQlzbG9jazsKKwlzdHJ1Y3QgZmltY19mcmFtZQlzX2ZyYW1lOworCXN0cnVjdCBmaW1jX2ZyYW1lCWRfZnJhbWU7CisJdTMyCQkJb3V0X29yZGVyXzFwOworCXUzMgkJCW91dF9vcmRlcl8ycDsKKwl1MzIJCQlpbl9vcmRlcl8xcDsKKwl1MzIJCQlpbl9vcmRlcl8ycDsKKwllbnVtIGZpbWNfZGF0YXBhdGgJaW5fcGF0aDsKKwllbnVtIGZpbWNfZGF0YXBhdGgJb3V0X3BhdGg7CisJc3RydWN0IGZpbWNfc2NhbGVyCXNjYWxlcjsKKwlzdHJ1Y3QgZmltY19lZmZlY3QJZWZmZWN0OworCWludAkJCXJvdGF0aW9uOworCXUzMgkJCWZsaXA7CisJdTMyCQkJZmxhZ3M7CisJdTMyCQkJc3RhdGU7CisJc3RydWN0IGZpbWNfZGV2CQkqZmltY19kZXY7CisJc3RydWN0IHY0bDJfbTJtX2N0eAkqbTJtX2N0eDsKK307CisKKworc3RhdGljIGlubGluZSBpbnQgdGlsZWRfZm10KHN0cnVjdCBmaW1jX2ZtdCAqZm10KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmltY19od19jbGVhcl9pcnEoc3RydWN0IGZpbWNfZGV2ICpkZXYpCit7CisJdTMyIGNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSUdDVFJMKTsKKwljZmcgfD0gUzVQX0NJR0NUUkxfSVJRX0NMUjsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lHQ1RSTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW1jX2h3X3N0YXJ0X3NjYWxlcihzdHJ1Y3QgZmltY19kZXYgKmRldikKK3sKKwl1MzIgY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX0NJU0NDVFJMKTsKKwljZmcgfD0gUzVQX0NJU0NDVFJMX1NDQUxFUlNUQVJUOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSVNDQ1RSTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW1jX2h3X3N0b3Bfc2NhbGVyKHN0cnVjdCBmaW1jX2RldiAqZGV2KQoreworCXUzMiBjZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfQ0lTQ0NUUkwpOworCWNmZyAmPSB+UzVQX0NJU0NDVFJMX1NDQUxFUlNUQVJUOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSVNDQ1RSTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW1jX2h3X2Rpc19jYXB0dXJlKHN0cnVjdCBmaW1jX2RldiAqZGV2KQoreworCXUzMiBjZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfQ0lJTUdDUFQpOworCWNmZyAmPSB+KFM1UF9DSUlNR0NQVF9JTUdDUFRFTiB8IFM1UF9DSUlNR0NQVF9JTUdDUFRFTl9TQyk7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJSU1HQ1BUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbWNfaHdfc3RhcnRfaW5fZG1hKHN0cnVjdCBmaW1jX2RldiAqZGV2KQoreworCXUzMiBjZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfTVNDVFJMKTsKKwljZmcgfD0gUzVQX01TQ1RSTF9FTlZJRDsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfTVNDVFJMKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbWNfaHdfc3RvcF9pbl9kbWEoc3RydWN0IGZpbWNfZGV2ICpkZXYpCit7CisJdTMyIGNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9NU0NUUkwpOworCWNmZyAmPSB+UzVQX01TQ1RSTF9FTlZJRDsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfTVNDVFJMKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZmltY19mcmFtZSAqY3R4X20ybV9nZXRfZnJhbWUoc3RydWN0IGZpbWNfY3R4ICpjdHgsCisJCQkJCQkgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgZmltY19mcmFtZSAqZnJhbWU7CisKKwlpZiAoVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgPT0gdHlwZSkgeworCQlmcmFtZSA9ICZjdHgtPnNfZnJhbWU7CisJfSBlbHNlIGlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgPT0gdHlwZSkgeworCQlmcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisJfSBlbHNlIHsKKwkJdjRsMl9lcnIoJmN0eC0+ZmltY19kZXYtPm0ybS52NGwyX2RldiwKKwkJCSJXcm9uZyBidWZmZXIvdmlkZW8gcXVldWUgdHlwZSAoJWQpXG4iLCB0eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcmV0dXJuIGZyYW1lOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBmaW1jLXJlZy5jCQkJCQkJKi8KK3ZvaWQgZmltY19od19yZXNldChzdHJ1Y3QgZmltY19kZXYgKmRldik7Cit2b2lkIGZpbWNfaHdfc2V0X3JvdGF0aW9uKHN0cnVjdCBmaW1jX2N0eCAqY3R4KTsKK3ZvaWQgZmltY19od19zZXRfdGFyZ2V0X2Zvcm1hdChzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X291dF9kbWEoc3RydWN0IGZpbWNfY3R4ICpjdHgpOwordm9pZCBmaW1jX2h3X2VuX2xhc3RpcnEoc3RydWN0IGZpbWNfZGV2ICpkZXYsIGludCBlbmFibGUpOwordm9pZCBmaW1jX2h3X2VuX2lycShzdHJ1Y3QgZmltY19kZXYgKmRldiwgaW50IGVuYWJsZSk7Cit2b2lkIGZpbWNfaHdfc2V0X3ByZXNjYWxlcihzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X3NjYWxlcihzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfZW5fY2FwdHVyZShzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X2VmZmVjdChzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X2luX2RtYShzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X2lucHV0X3BhdGgoc3RydWN0IGZpbWNfY3R4ICpjdHgpOwordm9pZCBmaW1jX2h3X3NldF9vdXRwdXRfcGF0aChzdHJ1Y3QgZmltY19jdHggKmN0eCk7Cit2b2lkIGZpbWNfaHdfc2V0X2lucHV0X2FkZHIoc3RydWN0IGZpbWNfZGV2ICpkZXYsIHN0cnVjdCBmaW1jX2FkZHIgKnBhZGRyKTsKK3ZvaWQgZmltY19od19zZXRfb3V0cHV0X2FkZHIoc3RydWN0IGZpbWNfZGV2ICpkZXYsIHN0cnVjdCBmaW1jX2FkZHIgKnBhZGRyKTsKKworI2VuZGlmIC8qIEZJTUNfQ09SRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLXJlZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLXJlZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NzBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtcmVnLmMKQEAgLTAsMCArMSw1MjcgQEAKKy8qCisgKiBSZWdpc3RlciBpbnRlcmZhY2UgZmlsZSBmb3IgU2Ftc3VuZyBDYW1lcmEgSW50ZXJmYWNlIChGSU1DKSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFN5bHdlc3RlciBOYXdyb2NraSwgcy5uYXdyb2NraUBzYW1zdW5nLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlICJmaW1jLWNvcmUuaCIKKworCit2b2lkIGZpbWNfaHdfcmVzZXQoc3RydWN0IGZpbWNfZGV2ICpkZXYpCit7CisJdTMyIGNmZzsKKworCWNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSVNSQ0ZNVCk7CisJY2ZnIHw9IFM1UF9DSVNSQ0ZNVF9JVFU2MDFfOEJJVDsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lTUkNGTVQpOworCisJLyogU29mdHdhcmUgcmVzZXQuICovCisJY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX0NJR0NUUkwpOworCWNmZyB8PSAoUzVQX0NJR0NUUkxfU1dSU1QgfCBTNVBfQ0lHQ1RSTF9JUlFfTEVWRUwpOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSUdDVFJMKTsKKwltc2xlZXAoMSk7CisKKwljZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfQ0lHQ1RSTCk7CisJY2ZnICY9IH5TNVBfQ0lHQ1RSTF9TV1JTVDsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lHQ1RSTCk7CisKK30KKwordm9pZCBmaW1jX2h3X3NldF9yb3RhdGlvbihzdHJ1Y3QgZmltY19jdHggKmN0eCkKK3sKKwl1MzIgY2ZnLCBmbGlwOworCXN0cnVjdCBmaW1jX2RldiAqZGV2ID0gY3R4LT5maW1jX2RldjsKKworCWNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSVRSR0ZNVCk7CisJY2ZnICY9IH4oUzVQX0NJVFJHRk1UX0lOUk9UOTAgfCBTNVBfQ0lUUkdGTVRfT1VUUk9UOTApOworCisJZmxpcCA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9NU0NUUkwpOworCWZsaXAgJj0gflM1UF9NU0NUUkxfRkxJUF9NQVNLOworCisJLyoKKwkgKiBUaGUgaW5wdXQgYW5kIG91dHB1dCByb3RhdG9yIGNhbm5vdCB3b3JrIHNpbXVsdGFuZW91c2x5LgorCSAqIFVzZSB0aGUgb3V0cHV0IHJvdGF0b3IgaW4gb3V0cHV0IERNQSBtb2RlIG9yIHRoZSBpbnB1dCByb3RhdG9yCisJICogaW4gZGlyZWN0IGZpZm8gb3V0cHV0IG1vZGUuCisJICovCisJaWYgKGN0eC0+cm90YXRpb24gPT0gOTAgfHwgY3R4LT5yb3RhdGlvbiA9PSAyNzApIHsKKwkJaWYgKGN0eC0+b3V0X3BhdGggPT0gRklNQ19MQ0RGSUZPKSB7CisJCQljZmcgfD0gUzVQX0NJVFJHRk1UX0lOUk9UOTA7CisJCQlpZiAoY3R4LT5yb3RhdGlvbiA9PSAyNzApCisJCQkJZmxpcCB8PSBTNVBfTVNDVFJMX0ZMSVBfMTgwOworCQl9IGVsc2UgeworCQkJY2ZnIHw9IFM1UF9DSVRSR0ZNVF9PVVRST1Q5MDsKKwkJCWlmIChjdHgtPnJvdGF0aW9uID09IDI3MCkKKwkJCQljZmcgfD0gUzVQX0NJVFJHRk1UX0ZMSVBfMTgwOworCQl9CisJfSBlbHNlIGlmIChjdHgtPnJvdGF0aW9uID09IDE4MCkgeworCQlpZiAoY3R4LT5vdXRfcGF0aCA9PSBGSU1DX0xDREZJRk8pCisJCQlmbGlwIHw9IFM1UF9NU0NUUkxfRkxJUF8xODA7CisJCWVsc2UKKwkJCWNmZyB8PSBTNVBfQ0lUUkdGTVRfRkxJUF8xODA7CisJfQorCWlmIChjdHgtPnJvdGF0aW9uID09IDE4MCB8fCBjdHgtPnJvdGF0aW9uID09IDI3MCkKKwkJd3JpdGVsKGZsaXAsIGRldi0+cmVncyArIFM1UF9NU0NUUkwpOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSVRSR0ZNVCk7Cit9CisKK3N0YXRpYyB1MzIgZmltY19od19nZXRfaW5fZmxpcCh1MzIgY3R4X2ZsaXApCit7CisJdTMyIGZsaXAgPSBTNVBfTVNDVFJMX0ZMSVBfTk9STUFMOworCisJc3dpdGNoIChjdHhfZmxpcCkgeworCWNhc2UgRkxJUF9YX0FYSVM6CisJCWZsaXAgPSBTNVBfTVNDVFJMX0ZMSVBfWF9NSVJST1I7CisJCWJyZWFrOworCWNhc2UgRkxJUF9ZX0FYSVM6CisJCWZsaXAgPSBTNVBfTVNDVFJMX0ZMSVBfWV9NSVJST1I7CisJCWJyZWFrOworCWNhc2UgRkxJUF9YWV9BWElTOgorCQlmbGlwID0gUzVQX01TQ1RSTF9GTElQXzE4MDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsaXA7Cit9CisKK3N0YXRpYyB1MzIgZmltY19od19nZXRfdGFyZ2V0X2ZsaXAodTMyIGN0eF9mbGlwKQoreworCXUzMiBmbGlwID0gUzVQX0NJVFJHRk1UX0ZMSVBfTk9STUFMOworCisJc3dpdGNoIChjdHhfZmxpcCkgeworCWNhc2UgRkxJUF9YX0FYSVM6CisJCWZsaXAgPSBTNVBfQ0lUUkdGTVRfRkxJUF9YX01JUlJPUjsKKwkJYnJlYWs7CisJY2FzZSBGTElQX1lfQVhJUzoKKwkJZmxpcCA9IFM1UF9DSVRSR0ZNVF9GTElQX1lfTUlSUk9SOworCQlicmVhazsKKwljYXNlIEZMSVBfWFlfQVhJUzoKKwkJZmxpcCA9IFM1UF9DSVRSR0ZNVF9GTElQXzE4MDsKKwkJYnJlYWs7CisJY2FzZSBGTElQX05PTkU6CisJCWJyZWFrOworCisJfQorCXJldHVybiBmbGlwOworfQorCit2b2lkIGZpbWNfaHdfc2V0X3RhcmdldF9mb3JtYXQoc3RydWN0IGZpbWNfY3R4ICpjdHgpCit7CisJdTMyIGNmZzsKKwlzdHJ1Y3QgZmltY19kZXYgKmRldiA9IGN0eC0+ZmltY19kZXY7CisJc3RydWN0IGZpbWNfZnJhbWUgKmZyYW1lID0gJmN0eC0+ZF9mcmFtZTsKKworCWRiZygidz0gJWQsIGg9ICVkIGNvbG9yOiAlZCIsIGZyYW1lLT53aWR0aCwKKwkJZnJhbWUtPmhlaWdodCwgZnJhbWUtPmZtdC0+Y29sb3IpOworCisJY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX0NJVFJHRk1UKTsKKwljZmcgJj0gfihTNVBfQ0lUUkdGTVRfRk1UX01BU0sgfCBTNVBfQ0lUUkdGTVRfSFNJWkVfTUFTSyB8CisJCSAgUzVQX0NJVFJHRk1UX1ZTSVpFX01BU0spOworCisJc3dpdGNoIChmcmFtZS0+Zm10LT5jb2xvcikgeworCWNhc2UgUzVQX0ZJTUNfUkdCNTY1OgorCWNhc2UgUzVQX0ZJTUNfUkdCNjY2OgorCWNhc2UgUzVQX0ZJTUNfUkdCODg4OgorCQljZmcgfD0gUzVQX0NJVFJHRk1UX1JHQjsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNQ19ZQ0JDUjQyMDoKKwkJY2ZnIHw9IFM1UF9DSVRSR0ZNVF9ZQ0JDUjQyMDsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNQ19ZQ0JZQ1I0MjI6CisJY2FzZSBTNVBfRklNQ19ZQ1JZQ0I0MjI6CisJY2FzZSBTNVBfRklNQ19DQllDUlk0MjI6CisJY2FzZSBTNVBfRklNQ19DUllDQlk0MjI6CisJCWlmIChmcmFtZS0+Zm10LT5wbGFuZXNfY250ID09IDEpCisJCQljZmcgfD0gUzVQX0NJVFJHRk1UX1lDQkNSNDIyXzFQOworCQllbHNlCisJCQljZmcgfD0gUzVQX0NJVFJHRk1UX1lDQkNSNDIyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwljZmcgfD0gUzVQX0NJVFJHRk1UX0hTSVpFKGZyYW1lLT53aWR0aCk7CisJY2ZnIHw9IFM1UF9DSVRSR0ZNVF9WU0laRShmcmFtZS0+aGVpZ2h0KTsKKworCWlmIChjdHgtPnJvdGF0aW9uID09IDApIHsKKwkJY2ZnICY9IH5TNVBfQ0lUUkdGTVRfRkxJUF9NQVNLOworCQljZmcgfD0gZmltY19od19nZXRfdGFyZ2V0X2ZsaXAoY3R4LT5mbGlwKTsKKwl9CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJVFJHRk1UKTsKKworCWNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSVRBUkVBKSAmIH5TNVBfQ0lUQVJFQV9NQVNLOworCWNmZyB8PSAoZnJhbWUtPndpZHRoICogZnJhbWUtPmhlaWdodCk7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJVEFSRUEpOworfQorCitzdGF0aWMgdm9pZCBmaW1jX2h3X3NldF9vdXRfZG1hX3NpemUoc3RydWN0IGZpbWNfY3R4ICpjdHgpCit7CisJc3RydWN0IGZpbWNfZGV2ICpkZXYgPSBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX2ZyYW1lICpmcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisJdTMyIGNmZyA9IDA7CisKKwlpZiAoY3R4LT5yb3RhdGlvbiA9PSA5MCB8fCBjdHgtPnJvdGF0aW9uID09IDI3MCkgeworCQljZmcgfD0gUzVQX09SSUdfU0laRV9IT1IoZnJhbWUtPmZfaGVpZ2h0KTsKKwkJY2ZnIHw9IFM1UF9PUklHX1NJWkVfVkVSKGZyYW1lLT5mX3dpZHRoKTsKKwl9IGVsc2UgeworCQljZmcgfD0gUzVQX09SSUdfU0laRV9IT1IoZnJhbWUtPmZfd2lkdGgpOworCQljZmcgfD0gUzVQX09SSUdfU0laRV9WRVIoZnJhbWUtPmZfaGVpZ2h0KTsKKwl9CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX09SR09TSVpFKTsKK30KKwordm9pZCBmaW1jX2h3X3NldF9vdXRfZG1hKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCXUzMiBjZmc7CisJc3RydWN0IGZpbWNfZGV2ICpkZXYgPSBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX2ZyYW1lICpmcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisJc3RydWN0IGZpbWNfZG1hX29mZnNldCAqb2Zmc2V0ID0gJmZyYW1lLT5kbWFfb2Zmc2V0OworCisJLyogU2V0IHRoZSBpbnB1dCBkbWEgb2Zmc2V0cy4gKi8KKwljZmcgPSAwOworCWNmZyB8PSBTNVBfQ0lPX09GRlNfSE9SKG9mZnNldC0+eV9oKTsKKwljZmcgfD0gUzVQX0NJT19PRkZTX1ZFUihvZmZzZXQtPnlfdik7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJT1lPRkYpOworCisJY2ZnID0gMDsKKwljZmcgfD0gUzVQX0NJT19PRkZTX0hPUihvZmZzZXQtPmNiX2gpOworCWNmZyB8PSBTNVBfQ0lPX09GRlNfVkVSKG9mZnNldC0+Y2Jfdik7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJT0NCT0ZGKTsKKworCWNmZyA9IDA7CisJY2ZnIHw9IFM1UF9DSU9fT0ZGU19IT1Iob2Zmc2V0LT5jcl9oKTsKKwljZmcgfD0gUzVQX0NJT19PRkZTX1ZFUihvZmZzZXQtPmNyX3YpOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSU9DUk9GRik7CisKKwlmaW1jX2h3X3NldF9vdXRfZG1hX3NpemUoY3R4KTsKKworCS8qIENvbmZpZ3VyZSBjaHJvbWEgY29tcG9uZW50cyBvcmRlci4gKi8KKwljZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfQ0lPQ1RSTCk7CisKKwljZmcgJj0gfihTNVBfQ0lPQ1RSTF9PUkRFUjJQX01BU0sgfCBTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9NQVNLIHwKKwkJIFM1UF9DSU9DVFJMX1lDQkNSX1BMQU5FX01BU0spOworCisJaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMSkKKwkJY2ZnIHw9IGN0eC0+b3V0X29yZGVyXzFwOworCWVsc2UgaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMikKKwkJY2ZnIHw9IGN0eC0+b3V0X29yZGVyXzJwIHwgUzVQX0NJT0NUUkxfWUNCQ1JfMlBMQU5FOworCWVsc2UgaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMykKKwkJY2ZnIHw9IFM1UF9DSU9DVFJMX1lDQkNSXzNQTEFORTsKKworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSU9DVFJMKTsKK30KKworc3RhdGljIHZvaWQgZmltY19od19lbl9hdXRvbG9hZChzdHJ1Y3QgZmltY19kZXYgKmRldiwgaW50IGVuYWJsZSkKK3sKKwl1MzIgY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX09SR0lTSVpFKTsKKwlpZiAoZW5hYmxlKQorCQljZmcgfD0gUzVQX0NJUkVBTF9JU0laRV9BVVRPTE9BRF9FTjsKKwllbHNlCisJCWNmZyAmPSB+UzVQX0NJUkVBTF9JU0laRV9BVVRPTE9BRF9FTjsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfT1JHSVNJWkUpOworfQorCit2b2lkIGZpbWNfaHdfZW5fbGFzdGlycShzdHJ1Y3QgZmltY19kZXYgKmRldiwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBjZmc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCisJY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX0NJT0NUUkwpOworCWlmIChlbmFibGUpCisJCWNmZyB8PSBTNVBfQ0lPQ1RSTF9MQVNUSVJRX0VOQUJMRTsKKwllbHNlCisJCWNmZyAmPSB+UzVQX0NJT0NUUkxfTEFTVElSUV9FTkFCTEU7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJT0NUUkwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGZpbWNfaHdfc2V0X3ByZXNjYWxlcihzdHJ1Y3QgZmltY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZmltY19kZXYgKmRldiA9ICBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX3NjYWxlciAqc2MgPSAmY3R4LT5zY2FsZXI7CisJdTMyIGNmZyA9IDAsIHNoZmFjdG9yOworCisJc2hmYWN0b3IgPSAxMCAtIChzYy0+aGZhY3RvciArIHNjLT52ZmFjdG9yKTsKKworCWNmZyB8PSBTNVBfQ0lTQ1BSRVJBVElPX1NIRkFDVE9SKHNoZmFjdG9yKTsKKwljZmcgfD0gUzVQX0NJU0NQUkVSQVRJT19IT1Ioc2MtPnByZV9ocmF0aW8pOworCWNmZyB8PSBTNVBfQ0lTQ1BSRVJBVElPX1ZFUihzYy0+cHJlX3ZyYXRpbyk7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJU0NQUkVSQVRJTyk7CisKKwljZmcgPSAwOworCWNmZyB8PSBTNVBfQ0lTQ1BSRURTVF9XSURUSChzYy0+cHJlX2RzdF93aWR0aCk7CisJY2ZnIHw9IFM1UF9DSVNDUFJFRFNUX0hFSUdIVChzYy0+cHJlX2RzdF9oZWlnaHQpOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSVNDUFJFRFNUKTsKK30KKwordm9pZCBmaW1jX2h3X3NldF9zY2FsZXIoc3RydWN0IGZpbWNfY3R4ICpjdHgpCit7CisJc3RydWN0IGZpbWNfZGV2ICpkZXYgPSBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX3NjYWxlciAqc2MgPSAmY3R4LT5zY2FsZXI7CisJc3RydWN0IGZpbWNfZnJhbWUgKnNyY19mcmFtZSA9ICZjdHgtPnNfZnJhbWU7CisJc3RydWN0IGZpbWNfZnJhbWUgKmRzdF9mcmFtZSA9ICZjdHgtPmRfZnJhbWU7CisJdTMyIGNmZyA9IDA7CisKKwlpZiAoIShjdHgtPmZsYWdzICYgRklNQ19DT0xPUl9SQU5HRV9OQVJST1cpKQorCQljZmcgfD0gKFM1UF9DSVNDQ1RSTF9DU0NSMllfV0lERSB8IFM1UF9DSVNDQ1RSTF9DU0NZMlJfV0lERSk7CisKKwlpZiAoIXNjLT5lbmFibGVkKQorCQljZmcgfD0gUzVQX0NJU0NDVFJMX1NDQUxFUkJZUEFTUzsKKworCWlmIChzYy0+c2NhbGV1cF9oKQorCQljZmcgfD0gUzVQX0NJU0NDVFJMX1NDQUxFVVBfSDsKKworCWlmIChzYy0+c2NhbGV1cF92KQorCQljZmcgfD0gUzVQX0NJU0NDVFJMX1NDQUxFVVBfVjsKKworCWlmIChzYy0+Y29weV9tb2RlKQorCQljZmcgfD0gUzVQX0NJU0NDVFJMX09ORTJPTkU7CisKKworCWlmIChjdHgtPmluX3BhdGggPT0gRklNQ19ETUEpIHsKKwkJaWYgKHNyY19mcmFtZS0+Zm10LT5jb2xvciA9PSBTNVBfRklNQ19SR0I1NjUpCisJCQljZmcgfD0gUzVQX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0I1NjU7CisJCWVsc2UgaWYgKHNyY19mcmFtZS0+Zm10LT5jb2xvciA9PSBTNVBfRklNQ19SR0I2NjYpCisJCQljZmcgfD0gUzVQX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0I2NjY7CisJCWVsc2UgaWYgKHNyY19mcmFtZS0+Zm10LT5jb2xvciA9PSBTNVBfRklNQ19SR0I4ODgpCisJCQljZmcgfD0gUzVQX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0I4ODg7CisJfQorCisJaWYgKGN0eC0+b3V0X3BhdGggPT0gRklNQ19ETUEpIHsKKwkJaWYgKGRzdF9mcmFtZS0+Zm10LT5jb2xvciA9PSBTNVBfRklNQ19SR0I1NjUpCisJCQljZmcgfD0gUzVQX0NJU0NDVFJMX09VVFJHQl9GTVRfUkdCNTY1OworCQllbHNlIGlmIChkc3RfZnJhbWUtPmZtdC0+Y29sb3IgPT0gUzVQX0ZJTUNfUkdCNjY2KQorCQkJY2ZnIHw9IFM1UF9DSVNDQ1RSTF9PVVRSR0JfRk1UX1JHQjY2NjsKKwkJZWxzZSBpZiAoZHN0X2ZyYW1lLT5mbXQtPmNvbG9yID09IFM1UF9GSU1DX1JHQjg4OCkKKwkJCWNmZyB8PSBTNVBfQ0lTQ0NUUkxfT1VUUkdCX0ZNVF9SR0I4ODg7CisJfSBlbHNlIHsKKwkJY2ZnIHw9IFM1UF9DSVNDQ1RSTF9PVVRSR0JfRk1UX1JHQjg4ODsKKworCQlpZiAoY3R4LT5mbGFncyAmIEZJTUNfU0NBTl9NT0RFX0lOVEVSTEFDRUQpCisJCQljZmcgfD0gUzVQX0NJU0NDVFJMX0lOVEVSTEFDRTsKKwl9CisKKwlkYmcoIm1haW5faHJhdGlvPSAweCVYICBtYWluX3ZyYXRpbz0gMHglWCIsCisJCXNjLT5tYWluX2hyYXRpbywgc2MtPm1haW5fdnJhdGlvKTsKKworCWNmZyB8PSBTNVBfQ0lTQ0NUUkxfU0NfSE9SUkFUSU8oc2MtPm1haW5faHJhdGlvKTsKKwljZmcgfD0gUzVQX0NJU0NDVFJMX1NDX1ZFUlJBVElPKHNjLT5tYWluX3ZyYXRpbyk7CisKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lTQ0NUUkwpOworfQorCit2b2lkIGZpbWNfaHdfZW5fY2FwdHVyZShzdHJ1Y3QgZmltY19jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZmltY19kZXYgKmRldiA9IGN0eC0+ZmltY19kZXY7CisJdTMyIGNmZzsKKworCWNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSUlNR0NQVCk7CisJLyogT25lIHNob3QgbW9kZSBmb3Igb3V0cHV0IERNQSBvciBmcmVlcnVuIGZvciBGSUZPLiAqLworCWlmIChjdHgtPm91dF9wYXRoID09IEZJTUNfRE1BKQorCQljZmcgfD0gUzVQX0NJSU1HQ1BUX0NQVF9GUkVOX0VOQUJMRTsKKwllbHNlCisJCWNmZyAmPSB+UzVQX0NJSU1HQ1BUX0NQVF9GUkVOX0VOQUJMRTsKKworCWlmIChjdHgtPnNjYWxlci5lbmFibGVkKQorCQljZmcgfD0gUzVQX0NJSU1HQ1BUX0lNR0NQVEVOX1NDOworCisJd3JpdGVsKGNmZyB8IFM1UF9DSUlNR0NQVF9JTUdDUFRFTiwgZGV2LT5yZWdzICsgUzVQX0NJSU1HQ1BUKTsKK30KKwordm9pZCBmaW1jX2h3X3NldF9lZmZlY3Qoc3RydWN0IGZpbWNfY3R4ICpjdHgpCit7CisJc3RydWN0IGZpbWNfZGV2ICpkZXYgPSBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX2VmZmVjdCAqZWZmZWN0ID0gJmN0eC0+ZWZmZWN0OworCXUzMiBjZmcgPSAoUzVQX0NJSU1HRUZGX0lFX0VOQUJMRSB8IFM1UF9DSUlNR0VGRl9JRV9TQ19BRlRFUik7CisKKwljZmcgfD0gZWZmZWN0LT50eXBlOworCisJaWYgKGVmZmVjdC0+dHlwZSA9PSBTNVBfRklNQ19FRkZFQ1RfQVJCSVRSQVJZKSB7CisJCWNmZyB8PSBTNVBfQ0lJTUdFRkZfUEFUX0NCKGVmZmVjdC0+cGF0X2NiKTsKKwkJY2ZnIHw9IFM1UF9DSUlNR0VGRl9QQVRfQ1IoZWZmZWN0LT5wYXRfY3IpOworCX0KKworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSUlNR0VGRik7Cit9CisKK3N0YXRpYyB2b2lkIGZpbWNfaHdfc2V0X2luX2RtYV9zaXplKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCXN0cnVjdCBmaW1jX2RldiAqZGV2ID0gY3R4LT5maW1jX2RldjsKKwlzdHJ1Y3QgZmltY19mcmFtZSAqZnJhbWUgPSAmY3R4LT5zX2ZyYW1lOworCXUzMiBjZmdfbyA9IDA7CisJdTMyIGNmZ19yID0gMDsKKworCWlmIChGSU1DX0xDREZJRk8gPT0gY3R4LT5vdXRfcGF0aCkKKwkJY2ZnX3IgfD0gIFM1UF9DSVJFQUxfSVNJWkVfQVVUT0xPQURfRU47CisKKwljZmdfbyB8PSBTNVBfT1JJR19TSVpFX0hPUihmcmFtZS0+Zl93aWR0aCk7CisJY2ZnX28gfD0gUzVQX09SSUdfU0laRV9WRVIoZnJhbWUtPmZfaGVpZ2h0KTsKKwljZmdfciB8PSBTNVBfQ0lSRUFMX0lTSVpFX1dJRFRIKGZyYW1lLT53aWR0aCk7CisJY2ZnX3IgfD0gUzVQX0NJUkVBTF9JU0laRV9IRUlHSFQoZnJhbWUtPmhlaWdodCk7CisKKwl3cml0ZWwoY2ZnX28sIGRldi0+cmVncyArIFM1UF9PUkdJU0laRSk7CisJd3JpdGVsKGNmZ19yLCBkZXYtPnJlZ3MgKyBTNVBfQ0lSRUFMX0lTSVpFKTsKK30KKwordm9pZCBmaW1jX2h3X3NldF9pbl9kbWEoc3RydWN0IGZpbWNfY3R4ICpjdHgpCit7CisJc3RydWN0IGZpbWNfZGV2ICpkZXYgPSBjdHgtPmZpbWNfZGV2OworCXN0cnVjdCBmaW1jX2ZyYW1lICpmcmFtZSA9ICZjdHgtPnNfZnJhbWU7CisJc3RydWN0IGZpbWNfZG1hX29mZnNldCAqb2Zmc2V0ID0gJmZyYW1lLT5kbWFfb2Zmc2V0OworCXUzMiBjZmcgPSAwOworCisJLyogU2V0IHRoZSBwaXhlbCBvZmZzZXRzLiAqLworCWNmZyB8PSBTNVBfQ0lPX09GRlNfSE9SKG9mZnNldC0+eV9oKTsKKwljZmcgfD0gUzVQX0NJT19PRkZTX1ZFUihvZmZzZXQtPnlfdik7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJSVlPRkYpOworCisJY2ZnID0gMDsKKwljZmcgfD0gUzVQX0NJT19PRkZTX0hPUihvZmZzZXQtPmNiX2gpOworCWNmZyB8PSBTNVBfQ0lPX09GRlNfVkVSKG9mZnNldC0+Y2Jfdik7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJSUNCT0ZGKTsKKworCWNmZyA9IDA7CisJY2ZnIHw9IFM1UF9DSU9fT0ZGU19IT1Iob2Zmc2V0LT5jcl9oKTsKKwljZmcgfD0gUzVQX0NJT19PRkZTX1ZFUihvZmZzZXQtPmNyX3YpOworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9DSUlDUk9GRik7CisKKwkvKiBJbnB1dCBvcmlnaW5hbCBhbmQgcmVhbCBzaXplLiAqLworCWZpbWNfaHdfc2V0X2luX2RtYV9zaXplKGN0eCk7CisKKwkvKiBBdXRvbG9hZCBpcyB1c2VkIGN1cnJlbnRseSBvbmx5IGluIEZJRk8gbW9kZS4gKi8KKwlmaW1jX2h3X2VuX2F1dG9sb2FkKGRldiwgY3R4LT5vdXRfcGF0aCA9PSBGSU1DX0xDREZJRk8pOworCisJLyogU2V0IHRoZSBpbnB1dCBETUEgdG8gcHJvY2VzcyBzaW5nbGUgZnJhbWUgb25seS4gKi8KKwljZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfTVNDVFJMKTsKKwljZmcgJj0gfihTNVBfTVNDVFJMX0ZMSVBfTUFTSworCQl8IFM1UF9NU0NUUkxfSU5GT1JNQVRfTUFTSworCQl8IFM1UF9NU0NUUkxfSU5fQlVSU1RfQ09VTlRfTUFTSworCQl8IFM1UF9NU0NUUkxfSU5QVVRfTUFTSworCQl8IFM1UF9NU0NUUkxfQ19JTlRfSU5fTUFTSworCQl8IFM1UF9NU0NUUkxfMlBfSU5fT1JERVJfTUFTSyk7CisKKwljZmcgfD0gKFM1UF9NU0NUUkxfRlJBTUVfQ09VTlQoMSkgfCBTNVBfTVNDVFJMX0lOUFVUX01FTU9SWSk7CisKKwlzd2l0Y2ggKGZyYW1lLT5mbXQtPmNvbG9yKSB7CisJY2FzZSBTNVBfRklNQ19SR0I1NjU6CisJY2FzZSBTNVBfRklNQ19SR0I2NjY6CisJY2FzZSBTNVBfRklNQ19SR0I4ODg6CisJCWNmZyB8PSBTNVBfTVNDVFJMX0lORk9STUFUX1JHQjsKKwkJYnJlYWs7CisJY2FzZSBTNVBfRklNQ19ZQ0JDUjQyMDoKKwkJY2ZnIHw9IFM1UF9NU0NUUkxfSU5GT1JNQVRfWUNCQ1I0MjA7CisKKwkJaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMikKKwkJCWNmZyB8PSBjdHgtPmluX29yZGVyXzJwIHwgUzVQX01TQ1RSTF9DX0lOVF9JTl8yUExBTkU7CisJCWVsc2UKKwkJCWNmZyB8PSBTNVBfTVNDVFJMX0NfSU5UX0lOXzNQTEFORTsKKworCQlicmVhazsKKwljYXNlIFM1UF9GSU1DX1lDQllDUjQyMjoKKwljYXNlIFM1UF9GSU1DX1lDUllDQjQyMjoKKwljYXNlIFM1UF9GSU1DX0NCWUNSWTQyMjoKKwljYXNlIFM1UF9GSU1DX0NSWUNCWTQyMjoKKwkJaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMSkgeworCQkJY2ZnIHw9IGN0eC0+aW5fb3JkZXJfMXAKKwkJCQl8IFM1UF9NU0NUUkxfSU5GT1JNQVRfWUNCQ1I0MjJfMVA7CisJCX0gZWxzZSB7CisJCQljZmcgfD0gUzVQX01TQ1RSTF9JTkZPUk1BVF9ZQ0JDUjQyMjsKKworCQkJaWYgKGZyYW1lLT5mbXQtPnBsYW5lc19jbnQgPT0gMikKKwkJCQljZmcgfD0gY3R4LT5pbl9vcmRlcl8ycAorCQkJCQl8IFM1UF9NU0NUUkxfQ19JTlRfSU5fMlBMQU5FOworCQkJZWxzZQorCQkJCWNmZyB8PSBTNVBfTVNDVFJMX0NfSU5UX0lOXzNQTEFORTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKgorCSAqIElucHV0IERNQSBmbGlwIG1vZGUgKGFuZCByb3RhdGlvbikuCisJICogRG8gbm90IGFsbG93IHNpbXVsdGFuZW91cyByb3RhdGlvbiBhbmQgZmxpcHBpbmcuCisJICovCisJaWYgKCFjdHgtPnJvdGF0aW9uICYmIGN0eC0+b3V0X3BhdGggPT0gRklNQ19MQ0RGSUZPKQorCQljZmcgfD0gZmltY19od19nZXRfaW5fZmxpcChjdHgtPmZsaXApOworCisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX01TQ1RSTCk7CisKKwkvKiBJbnB1dC9vdXRwdXQgRE1BIGxpbmVhci90aWxlZCBtb2RlLiAqLworCWNmZyA9IHJlYWRsKGRldi0+cmVncyArIFM1UF9DSURNQVBBUkFNKTsKKwljZmcgJj0gflM1UF9DSURNQVBBUkFNX1RJTEVfTUFTSzsKKworCWlmICh0aWxlZF9mbXQoY3R4LT5zX2ZyYW1lLmZtdCkpCisJCWNmZyB8PSBTNVBfQ0lETUFQQVJBTV9SXzY0WDMyOworCisJaWYgKHRpbGVkX2ZtdChjdHgtPmRfZnJhbWUuZm10KSkKKwkJY2ZnIHw9IFM1UF9DSURNQVBBUkFNX1dfNjRYMzI7CisKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lETUFQQVJBTSk7Cit9CisKKwordm9pZCBmaW1jX2h3X3NldF9pbnB1dF9wYXRoKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCXN0cnVjdCBmaW1jX2RldiAqZGV2ID0gY3R4LT5maW1jX2RldjsKKworCXUzMiBjZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfTVNDVFJMKTsKKwljZmcgJj0gflM1UF9NU0NUUkxfSU5QVVRfTUFTSzsKKworCWlmIChjdHgtPmluX3BhdGggPT0gRklNQ19ETUEpCisJCWNmZyB8PSBTNVBfTVNDVFJMX0lOUFVUX01FTU9SWTsKKwllbHNlCisJCWNmZyB8PSBTNVBfTVNDVFJMX0lOUFVUX0VYVENBTTsKKworCXdyaXRlbChjZmcsIGRldi0+cmVncyArIFM1UF9NU0NUUkwpOworfQorCit2b2lkIGZpbWNfaHdfc2V0X291dHB1dF9wYXRoKHN0cnVjdCBmaW1jX2N0eCAqY3R4KQoreworCXN0cnVjdCBmaW1jX2RldiAqZGV2ID0gY3R4LT5maW1jX2RldjsKKworCXUzMiBjZmcgPSByZWFkbChkZXYtPnJlZ3MgKyBTNVBfQ0lTQ0NUUkwpOworCWNmZyAmPSB+UzVQX0NJU0NDVFJMX0xDRFBBVEhFTl9GSUZPOworCWlmIChjdHgtPm91dF9wYXRoID09IEZJTUNfTENERklGTykKKwkJY2ZnIHw9IFM1UF9DSVNDQ1RSTF9MQ0RQQVRIRU5fRklGTzsKKwl3cml0ZWwoY2ZnLCBkZXYtPnJlZ3MgKyBTNVBfQ0lTQ0NUUkwpOworfQorCit2b2lkIGZpbWNfaHdfc2V0X2lucHV0X2FkZHIoc3RydWN0IGZpbWNfZGV2ICpkZXYsIHN0cnVjdCBmaW1jX2FkZHIgKnBhZGRyKQoreworCXUzMiBjZmcgPSAwOworCisJY2ZnID0gcmVhZGwoZGV2LT5yZWdzICsgUzVQX0NJUkVBTF9JU0laRSk7CisJY2ZnIHw9IFM1UF9DSVJFQUxfSVNJWkVfQUREUl9DSF9ESVM7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJUkVBTF9JU0laRSk7CisKKwl3cml0ZWwocGFkZHItPnksIGRldi0+cmVncyArIFM1UF9DSUlZU0EwKTsKKwl3cml0ZWwocGFkZHItPmNiLCBkZXYtPnJlZ3MgKyBTNVBfQ0lJQ0JTQTApOworCXdyaXRlbChwYWRkci0+Y3IsIGRldi0+cmVncyArIFM1UF9DSUlDUlNBMCk7CisKKwljZmcgJj0gflM1UF9DSVJFQUxfSVNJWkVfQUREUl9DSF9ESVM7CisJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgUzVQX0NJUkVBTF9JU0laRSk7Cit9CisKK3ZvaWQgZmltY19od19zZXRfb3V0cHV0X2FkZHIoc3RydWN0IGZpbWNfZGV2ICpkZXYsIHN0cnVjdCBmaW1jX2FkZHIgKnBhZGRyKQoreworCWludCBpOworCS8qIFNldCBhbGwgdGhlIG91dHB1dCByZWdpc3RlciBzZXRzIHRvIHBvaW50IHRvIHNpbmdsZSB2aWRlbyBidWZmZXIuICovCisJZm9yIChpID0gMDsgaSA8IEZJTUNfTUFYX09VVF9CVUZTOyBpKyspIHsKKwkJd3JpdGVsKHBhZGRyLT55LCBkZXYtPnJlZ3MgKyBTNVBfQ0lPWVNBKGkpKTsKKwkJd3JpdGVsKHBhZGRyLT5jYiwgZGV2LT5yZWdzICsgUzVQX0NJT0NCU0EoaSkpOworCQl3cml0ZWwocGFkZHItPmNyLCBkZXYtPnJlZ3MgKyBTNVBfQ0lPQ1JTQShpKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9yZWdzLWZpbWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvcmVncy1maW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjZmU4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvcmVncy1maW1jLmgKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBSZWdpc3RlciBkZWZpbml0aW9uIGZpbGUgZm9yIFNhbXN1bmcgQ2FtZXJhIEludGVyZmFjZSAoRklNQykgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgUkVHU19GSU1DX0hfCisjZGVmaW5lIFJFR1NfRklNQ19IXworCisjZGVmaW5lIFM1UF9DSU9ZU0EoX194KQkJCSgweDE4ICsgKF9feCkgKiA0KQorI2RlZmluZSBTNVBfQ0lPQ0JTQShfX3gpCQkoMHgyOCArIChfX3gpICogNCkKKyNkZWZpbmUgUzVQX0NJT0NSU0EoX194KQkJKDB4MzggKyAoX194KSAqIDQpCisKKy8qIElucHV0IHNvdXJjZSBmb3JtYXQgKi8KKyNkZWZpbmUgUzVQX0NJU1JDRk1UCQkJMHgwMAorI2RlZmluZSBTNVBfQ0lTUkNGTVRfSVRVNjAxXzhCSVQJKDEgPDwgMzEpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9JVFU2MDFfMTZCSVQJKDEgPDwgMjkpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9PUkRFUjQyMl9ZQ0JZQ1IJKDAgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9PUkRFUjQyMl9ZQ1JZQ0IJKDEgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9PUkRFUjQyMl9DQllDUlkJKDIgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9PUkRFUjQyMl9DUllDQlkJKDMgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVNSQ0ZNVF9IU0laRSh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgUzVQX0NJU1JDRk1UX1ZTSVpFKHgpCQkoKHgpIDw8IDApCisKKy8qIFdpbmRvdyBvZmZzZXQgKi8KKyNkZWZpbmUgUzVQX0NJV0RPRlNUCQkJMHgwNAorI2RlZmluZSBTNVBfQ0lXRE9GU1RfV0lOT0ZTRU4JCSgxIDw8IDMxKQorI2RlZmluZSBTNVBfQ0lXRE9GU1RfQ0xST1ZGSVkJCSgxIDw8IDMwKQorI2RlZmluZSBTNVBfQ0lXRE9GU1RfQ0xST1ZSTEIJCSgxIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lXRE9GU1RfV0lOSE9ST0ZTVF9NQVNLCSgweDdmZiA8PCAxNikKKyNkZWZpbmUgUzVQX0NJV0RPRlNUX0NMUk9WRklDQgkJKDEgPDwgMTUpCisjZGVmaW5lIFM1UF9DSVdET0ZTVF9DTFJPVkZJQ1IJCSgxIDw8IDE0KQorI2RlZmluZSBTNVBfQ0lXRE9GU1RfV0lOSE9ST0ZTVCh4KQkoKHgpIDw8IDE2KQorI2RlZmluZSBTNVBfQ0lXRE9GU1RfV0lOVkVST0ZTVCh4KQkoKHgpIDw8IDApCisjZGVmaW5lIFM1UF9DSVdET0ZTVF9XSU5WRVJPRlNUX01BU0sJKDB4ZmZmIDw8IDApCisKKy8qIEdsb2JhbCBjb250cm9sICovCisjZGVmaW5lIFM1UF9DSUdDVFJMCQkJMHgwOAorI2RlZmluZSBTNVBfQ0lHQ1RSTF9TV1JTVAkJKDEgPDwgMzEpCisjZGVmaW5lIFM1UF9DSUdDVFJMX0NBTVJTVF9BCQkoMSA8PCAzMCkKKyNkZWZpbmUgUzVQX0NJR0NUUkxfU0VMQ0FNX0lUVV9BCSgxIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9TRUxDQU1fSVRVX01BU0sJKDEgPDwgMjkpCisjZGVmaW5lIFM1UF9DSUdDVFJMX1RFU1RQQVRfTk9STUFMCSgwIDw8IDI3KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9URVNUUEFUX0NPTE9SX0JBUgkoMSA8PCAyNykKKyNkZWZpbmUgUzVQX0NJR0NUUkxfVEVTVFBBVF9IT1JfSU5DCSgyIDw8IDI3KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9URVNUUEFUX1ZFUl9JTkMJKDMgPDwgMjcpCisjZGVmaW5lIFM1UF9DSUdDVFJMX1RFU1RQQVRfTUFTSwkoMyA8PCAyNykKKyNkZWZpbmUgUzVQX0NJR0NUUkxfVEVTVFBBVF9TSElGVAkoMjcpCisjZGVmaW5lIFM1UF9DSUdDVFJMX0lOVlBPTFBDTEsJCSgxIDw8IDI2KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9JTlZQT0xWU1lOQwkJKDEgPDwgMjUpCisjZGVmaW5lIFM1UF9DSUdDVFJMX0lOVlBPTEhSRUYJCSgxIDw8IDI0KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9JUlFfT1ZGRU4JCSgxIDw8IDIyKQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9IUkVGX01BU0sJCSgxIDw8IDIxKQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9JUlFfTEVWRUwJCSgxIDw8IDIwKQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9JUlFfQ0xSCQkoMSA8PCAxOSkKKyNkZWZpbmUgUzVQX0NJR0NUUkxfSVJRX0VOQUJMRQkJKDEgPDwgMTYpCisjZGVmaW5lIFM1UF9DSUdDVFJMX1NIRFdfRElTQUJMRQkoMSA8PCAxMikKKyNkZWZpbmUgUzVQX0NJR0NUUkxfU0VMQ0FNX01JUElfQQkoMSA8PCA3KQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9DQU1JRl9TRUxXQgkJKDEgPDwgNikKKyNkZWZpbmUgUzVQX0NJR0NUUkxfSU5WUE9MSFNZTkMJCSgxIDw8IDQpCisjZGVmaW5lIFM1UF9DSUdDVFJMX1NFTENBTV9NSVBJCQkoMSA8PCAzKQorI2RlZmluZSBTNVBfQ0lHQ1RSTF9JTlRFUkxBQ0UJCSgxIDw8IDApCisKKy8qIFdpbmRvdyBvZmZzZXQgMiAqLworI2RlZmluZSBTNVBfQ0lXRE9GU1QyCQkJMHgxNAorI2RlZmluZSBTNVBfQ0lXRE9GU1QyX0hPUk9GRl9NQVNLCSgweGZmZiA8PCAxNikKKyNkZWZpbmUgUzVQX0NJV0RPRlNUMl9WRVJPRkZfTUFTSwkoMHhmZmYgPDwgMCkKKyNkZWZpbmUgUzVQX0NJV0RPRlNUMl9IT1JPRkYoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIFM1UF9DSVdET0ZTVDJfVkVST0ZGKHgpCQkoKHgpIDw8IDApCisKKy8qIE91dHB1dCBETUEgWSBwbGFuZSBzdGFydCBhZGRyZXNzICovCisjZGVmaW5lIFM1UF9DSU9ZU0ExCQkJMHgxOAorI2RlZmluZSBTNVBfQ0lPWVNBMgkJCTB4MWMKKyNkZWZpbmUgUzVQX0NJT1lTQTMJCQkweDIwCisjZGVmaW5lIFM1UF9DSU9ZU0E0CQkJMHgyNAorCisvKiBPdXRwdXQgRE1BIENiIHBsYW5lIHN0YXJ0IGFkZHJlc3MgKi8KKyNkZWZpbmUgUzVQX0NJT0NCU0ExCQkJMHgyOAorI2RlZmluZSBTNVBfQ0lPQ0JTQTIJCQkweDJjCisjZGVmaW5lIFM1UF9DSU9DQlNBMwkJCTB4MzAKKyNkZWZpbmUgUzVQX0NJT0NCU0E0CQkJMHgzNAorCisvKiBPdXRwdXQgRE1BIENyIHBsYW5lIHN0YXJ0IGFkZHJlc3MgKi8KKyNkZWZpbmUgUzVQX0NJT0NSU0ExCQkJMHgzOAorI2RlZmluZSBTNVBfQ0lPQ1JTQTIJCQkweDNjCisjZGVmaW5lIFM1UF9DSU9DUlNBMwkJCTB4NDAKKyNkZWZpbmUgUzVQX0NJT0NSU0E0CQkJMHg0NAorCisvKiBUYXJnZXQgaW1hZ2UgZm9ybWF0ICovCisjZGVmaW5lIFM1UF9DSVRSR0ZNVAkJCTB4NDgKKyNkZWZpbmUgUzVQX0NJVFJHRk1UX0lOUk9UOTAJCSgxIDw8IDMxKQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfWUNCQ1I0MjAJCSgwIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfWUNCQ1I0MjIJCSgxIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfWUNCQ1I0MjJfMVAJKDIgPDwgMjkpCisjZGVmaW5lIFM1UF9DSVRSR0ZNVF9SR0IJCSgzIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfRk1UX01BU0sJCSgzIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfSFNJWkVfTUFTSwkJKDB4ZmZmIDw8IDE2KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfRkxJUF9TSElGVAkJKDE0KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfRkxJUF9OT1JNQUwJKDAgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVRSR0ZNVF9GTElQX1hfTUlSUk9SCSgxIDw8IDE0KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfRkxJUF9ZX01JUlJPUgkoMiA8PCAxNCkKKyNkZWZpbmUgUzVQX0NJVFJHRk1UX0ZMSVBfMTgwCQkoMyA8PCAxNCkKKyNkZWZpbmUgUzVQX0NJVFJHRk1UX0ZMSVBfTUFTSwkJKDMgPDwgMTQpCisjZGVmaW5lIFM1UF9DSVRSR0ZNVF9PVVRST1Q5MAkJKDEgPDwgMTMpCisjZGVmaW5lIFM1UF9DSVRSR0ZNVF9WU0laRV9NQVNLCQkoMHhmZmYgPDwgMCkKKyNkZWZpbmUgUzVQX0NJVFJHRk1UX0hTSVpFKHgpCQkoKHgpIDw8IDE2KQorI2RlZmluZSBTNVBfQ0lUUkdGTVRfVlNJWkUoeCkJCSgoeCkgPDwgMCkKKworLyogT3V0cHV0IERNQSBjb250cm9sICovCisjZGVmaW5lIFM1UF9DSU9DVFJMCQkJMHg0YworI2RlZmluZSBTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9NQVNLCSgzIDw8IDApCisjZGVmaW5lIFM1UF9DSU9DVFJMX09SREVSNDIyX0NSWUNCWQkoMCA8PCAwKQorI2RlZmluZSBTNVBfQ0lPQ1RSTF9PUkRFUjQyMl9ZQ1JZQ0IJKDEgPDwgMCkKKyNkZWZpbmUgUzVQX0NJT0NUUkxfT1JERVI0MjJfQ0JZQ1JZCSgyIDw8IDApCisjZGVmaW5lIFM1UF9DSU9DVFJMX09SREVSNDIyX1lDQllDUgkoMyA8PCAwKQorI2RlZmluZSBTNVBfQ0lPQ1RSTF9MQVNUSVJRX0VOQUJMRQkoMSA8PCAyKQorI2RlZmluZSBTNVBfQ0lPQ1RSTF9ZQ0JDUl8zUExBTkUJKDAgPDwgMykKKyNkZWZpbmUgUzVQX0NJT0NUUkxfWUNCQ1JfMlBMQU5FCSgxIDw8IDMpCisjZGVmaW5lIFM1UF9DSU9DVFJMX1lDQkNSX1BMQU5FX01BU0sJKDEgPDwgMykKKyNkZWZpbmUgUzVQX0NJT0NUUkxfT1JERVIyUF9TSElGVAkoMjQpCisjZGVmaW5lIFM1UF9DSU9DVFJMX09SREVSMlBfTUFTSwkoMyA8PCAyNCkKKyNkZWZpbmUgUzVQX0NJT0NUUkxfT1JERVI0MjJfMlBfTFNCX0NSQ0IgKDAgPDwgMjQpCisKKy8qIFByZS1zY2FsZXIgY29udHJvbCAxICovCisjZGVmaW5lIFM1UF9DSVNDUFJFUkFUSU8JCTB4NTAKKyNkZWZpbmUgUzVQX0NJU0NQUkVSQVRJT19TSEZBQ1RPUih4KQkoKHgpIDw8IDI4KQorI2RlZmluZSBTNVBfQ0lTQ1BSRVJBVElPX0hPUih4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgUzVQX0NJU0NQUkVSQVRJT19WRVIoeCkJCSgoeCkgPDwgMCkKKworI2RlZmluZSBTNVBfQ0lTQ1BSRURTVAkJCTB4NTQKKyNkZWZpbmUgUzVQX0NJU0NQUkVEU1RfV0lEVEgoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIFM1UF9DSVNDUFJFRFNUX0hFSUdIVCh4KQkoKHgpIDw8IDApCisKKy8qIE1haW4gc2NhbGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUzVQX0NJU0NDVFJMCQkJMHg1OAorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfU0NBTEVSQllQQVNTCSgxIDw8IDMxKQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfU0NBTEVVUF9ICQkoMSA8PCAzMCkKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX1NDQUxFVVBfVgkJKDEgPDwgMjkpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9DU0NSMllfV0lERQkoMSA8PCAyOCkKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX0NTQ1kyUl9XSURFCSgxIDw8IDI3KQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfTENEUEFUSEVOX0ZJRk8JKDEgPDwgMjYpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9JTlRFUkxBQ0UJCSgxIDw8IDI1KQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfU0NBTEVSU1RBUlQJKDEgPDwgMTUpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9JTlJHQl9GTVRfUkdCNTY1CSgwIDw8IDEzKQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfSU5SR0JfRk1UX1JHQjY2NgkoMSA8PCAxMykKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX0lOUkdCX0ZNVF9SR0I4ODgJKDIgPDwgMTMpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9JTlJHQl9GTVRfTUFTSwkoMyA8PCAxMykKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX09VVFJHQl9GTVRfUkdCNTY1CSgwIDw8IDExKQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfT1VUUkdCX0ZNVF9SR0I2NjYJKDEgPDwgMTEpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9PVVRSR0JfRk1UX1JHQjg4OAkoMiA8PCAxMSkKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX09VVFJHQl9GTVRfTUFTSwkoMyA8PCAxMSkKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX1JHQl9FWFQJCSgxIDw8IDEwKQorI2RlZmluZSBTNVBfQ0lTQ0NUUkxfT05FMk9ORQkJKDEgPDwgOSkKKyNkZWZpbmUgUzVQX0NJU0NDVFJMX1NDX0hPUlJBVElPKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lIFM1UF9DSVNDQ1RSTF9TQ19WRVJSQVRJTyh4KQkoKHgpIDw8IDApCisKKy8qIFRhcmdldCBhcmVhICovCisjZGVmaW5lIFM1UF9DSVRBUkVBCQkJMHg1YworI2RlZmluZSBTNVBfQ0lUQVJFQV9NQVNLCQkweDBmZmZmZmZmCisKKy8qIEdlbmVyYWwgc3RhdHVzICovCisjZGVmaW5lIFM1UF9DSVNUQVRVUwkJCTB4NjQKKyNkZWZpbmUgUzVQX0NJU1RBVFVTX09WRklZCQkoMSA8PCAzMSkKKyNkZWZpbmUgUzVQX0NJU1RBVFVTX09WRklDQgkJKDEgPDwgMzApCisjZGVmaW5lIFM1UF9DSVNUQVRVU19PVkZJQ1IJCSgxIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfVlNZTkMJCSgxIDw8IDI4KQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfV0lOT0ZGX0VOCQkoMSA8PCAyNSkKKyNkZWZpbmUgUzVQX0NJU1RBVFVTX0lNR0NQVF9FTgkJKDEgPDwgMjIpCisjZGVmaW5lIFM1UF9DSVNUQVRVU19JTUdDUFRfU0NFTgkoMSA8PCAyMSkKKyNkZWZpbmUgUzVQX0NJU1RBVFVTX1ZTWU5DX0EJCSgxIDw8IDIwKQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfVlNZTkNfQgkJKDEgPDwgMTkpCisjZGVmaW5lIFM1UF9DSVNUQVRVU19PVlJMQgkJKDEgPDwgMTgpCisjZGVmaW5lIFM1UF9DSVNUQVRVU19GUkFNRV9FTkQJCSgxIDw8IDE3KQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfTEFTVENBUFRfRU5ECSgxIDw8IDE2KQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfVlZBTElEX0EJCSgxIDw8IDE1KQorI2RlZmluZSBTNVBfQ0lTVEFUVVNfVlZBTElEX0IJCSgxIDw8IDE0KQorCisvKiBJbWFnZSBjYXB0dXJlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUzVQX0NJSU1HQ1BUCQkJMHhjMAorI2RlZmluZSBTNVBfQ0lJTUdDUFRfSU1HQ1BURU4JCSgxIDw8IDMxKQorI2RlZmluZSBTNVBfQ0lJTUdDUFRfSU1HQ1BURU5fU0MJKDEgPDwgMzApCisjZGVmaW5lIFM1UF9DSUlNR0NQVF9DUFRfRlJFTl9FTkFCTEUJKDEgPDwgMjUpCisjZGVmaW5lIFM1UF9DSUlNR0NQVF9DUFRfRlJNT0RfQ05UCSgxIDw8IDE4KQorCisvKiBGcmFtZSBjYXB0dXJlIHNlcXVlbmNlICovCisjZGVmaW5lIFM1UF9DSUNQVFNFUQkJCTB4YzQKKworLyogSW1hZ2UgZWZmZWN0ICovCisjZGVmaW5lIFM1UF9DSUlNR0VGRgkJCTB4ZDAKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX0lFX0RJU0FCTEUJCSgwIDw8IDMwKQorI2RlZmluZSBTNVBfQ0lJTUdFRkZfSUVfRU5BQkxFCQkoMSA8PCAzMCkKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX0lFX1NDX0JFRk9SRQkoMCA8PCAyOSkKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX0lFX1NDX0FGVEVSCSgxIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lJTUdFRkZfRklOX0JZUEFTUwkJKDAgPDwgMjYpCisjZGVmaW5lIFM1UF9DSUlNR0VGRl9GSU5fQVJCSVRSQVJZCSgxIDw8IDI2KQorI2RlZmluZSBTNVBfQ0lJTUdFRkZfRklOX05FR0FUSVZFCSgyIDw8IDI2KQorI2RlZmluZSBTNVBfQ0lJTUdFRkZfRklOX0FSVEZSRUVaRQkoMyA8PCAyNikKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX0ZJTl9FTUJPU1NJTkcJKDQgPDwgMjYpCisjZGVmaW5lIFM1UF9DSUlNR0VGRl9GSU5fU0lMSE9VRVRURQkoNSA8PCAyNikKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX0ZJTl9NQVNLCQkoNyA8PCAyNikKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX1BBVF9DQkNSX01BU0sJKCgweGZmIDwgMTMpIHwgKDB4ZmYgPCAwKSkKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX1BBVF9DQih4KQkJKCh4KSA8PCAxMykKKyNkZWZpbmUgUzVQX0NJSU1HRUZGX1BBVF9DUih4KQkJKCh4KSA8PCAwKQorCisvKiBJbnB1dCBETUEgWS9DYi9DciBwbGFuZSBzdGFydCBhZGRyZXNzIDAgKi8KKyNkZWZpbmUgUzVQX0NJSVlTQTAJCQkweGQ0CisjZGVmaW5lIFM1UF9DSUlDQlNBMAkJCTB4ZDgKKyNkZWZpbmUgUzVQX0NJSUNSU0EwCQkJMHhkYworCisvKiBSZWFsIGlucHV0IERNQSBpbWFnZSBzaXplICovCisjZGVmaW5lIFM1UF9DSVJFQUxfSVNJWkUJCTB4ZjgKKyNkZWZpbmUgUzVQX0NJUkVBTF9JU0laRV9BVVRPTE9BRF9FTgkoMSA8PCAzMSkKKyNkZWZpbmUgUzVQX0NJUkVBTF9JU0laRV9BRERSX0NIX0RJUwkoMSA8PCAzMCkKKyNkZWZpbmUgUzVQX0NJUkVBTF9JU0laRV9IRUlHSFQoeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUgUzVQX0NJUkVBTF9JU0laRV9XSURUSCh4KQkoKHgpIDw8IDApCisKKworLyogSW5wdXQgRE1BIGNvbnRyb2wgKi8KKyNkZWZpbmUgUzVQX01TQ1RSTAkJCTB4ZmMKKyNkZWZpbmUgUzVQX01TQ1RSTF9JTl9CVVJTVF9DT1VOVF9NQVNLCSgzIDw8IDI0KQorI2RlZmluZSBTNVBfTVNDVFJMXzJQX0lOX09SREVSX01BU0sJKDMgPDwgMTYpCisjZGVmaW5lIFM1UF9NU0NUUkxfMlBfSU5fT1JERVJfU0hJRlQJMTYKKyNkZWZpbmUgUzVQX01TQ1RSTF9DX0lOVF9JTl8zUExBTkUJKDAgPDwgMTUpCisjZGVmaW5lIFM1UF9NU0NUUkxfQ19JTlRfSU5fMlBMQU5FCSgxIDw8IDE1KQorI2RlZmluZSBTNVBfTVNDVFJMX0NfSU5UX0lOX01BU0sJKDEgPDwgMTUpCisjZGVmaW5lIFM1UF9NU0NUUkxfRkxJUF9TSElGVAkJMTMKKyNkZWZpbmUgUzVQX01TQ1RSTF9GTElQX01BU0sJCSgzIDw8IDEzKQorI2RlZmluZSBTNVBfTVNDVFJMX0ZMSVBfTk9STUFMCQkoMCA8PCAxMykKKyNkZWZpbmUgUzVQX01TQ1RSTF9GTElQX1hfTUlSUk9SCSgxIDw8IDEzKQorI2RlZmluZSBTNVBfTVNDVFJMX0ZMSVBfWV9NSVJST1IJKDIgPDwgMTMpCisjZGVmaW5lIFM1UF9NU0NUUkxfRkxJUF8xODAJCSgzIDw8IDEzKQorI2RlZmluZSBTNVBfTVNDVFJMX09SREVSNDIyX1NISUZUCTQKKyNkZWZpbmUgUzVQX01TQ1RSTF9PUkRFUjQyMl9DUllDQlkJKDAgPDwgNCkKKyNkZWZpbmUgUzVQX01TQ1RSTF9PUkRFUjQyMl9ZQ1JZQ0IJKDEgPDwgNCkKKyNkZWZpbmUgUzVQX01TQ1RSTF9PUkRFUjQyMl9DQllDUlkJKDIgPDwgNCkKKyNkZWZpbmUgUzVQX01TQ1RSTF9PUkRFUjQyMl9ZQ0JZQ1IJKDMgPDwgNCkKKyNkZWZpbmUgUzVQX01TQ1RSTF9PUkRFUjQyMl9NQVNLCSgzIDw8IDQpCisjZGVmaW5lIFM1UF9NU0NUUkxfSU5QVVRfRVhUQ0FNCQkoMCA8PCAzKQorI2RlZmluZSBTNVBfTVNDVFJMX0lOUFVUX01FTU9SWQkJKDEgPDwgMykKKyNkZWZpbmUgUzVQX01TQ1RSTF9JTlBVVF9NQVNLCQkoMSA8PCAzKQorI2RlZmluZSBTNVBfTVNDVFJMX0lORk9STUFUX1lDQkNSNDIwCSgwIDw8IDEpCisjZGVmaW5lIFM1UF9NU0NUUkxfSU5GT1JNQVRfWUNCQ1I0MjIJKDEgPDwgMSkKKyNkZWZpbmUgUzVQX01TQ1RSTF9JTkZPUk1BVF9ZQ0JDUjQyMl8xUAkoMiA8PCAxKQorI2RlZmluZSBTNVBfTVNDVFJMX0lORk9STUFUX1JHQgkJKDMgPDwgMSkKKyNkZWZpbmUgUzVQX01TQ1RSTF9JTkZPUk1BVF9NQVNLCSgzIDw8IDEpCisjZGVmaW5lIFM1UF9NU0NUUkxfRU5WSUQJCSgxIDw8IDApCisjZGVmaW5lIFM1UF9NU0NUUkxfRlJBTUVfQ09VTlQoeCkJKCh4KSA8PCAyNCkKKworLyogSW5wdXQgRE1BIFkvQ2IvQ3IgcGxhbmUgc3RhcnQgYWRkcmVzcyAxICovCisjZGVmaW5lIFM1UF9DSUlZU0ExCQkJMHgxNDQKKyNkZWZpbmUgUzVQX0NJSUNCU0ExCQkJMHgxNDgKKyNkZWZpbmUgUzVQX0NJSUNSU0ExCQkJMHgxNGMKKworLyogT3V0cHV0IERNQSBZL0NiL0NyIG9mZnNldCAqLworI2RlZmluZSBTNVBfQ0lPWU9GRgkJCTB4MTY4CisjZGVmaW5lIFM1UF9DSU9DQk9GRgkJCTB4MTZjCisjZGVmaW5lIFM1UF9DSU9DUk9GRgkJCTB4MTcwCisKKy8qIElucHV0IERNQSBZL0NiL0NyIG9mZnNldCAqLworI2RlZmluZSBTNVBfQ0lJWU9GRgkJCTB4MTc0CisjZGVmaW5lIFM1UF9DSUlDQk9GRgkJCTB4MTc4CisjZGVmaW5lIFM1UF9DSUlDUk9GRgkJCTB4MTdjCisKKyNkZWZpbmUgUzVQX0NJT19PRkZTX1ZFUih4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgUzVQX0NJT19PRkZTX0hPUih4KQkJKCh4KSA8PCAwKQorCisvKiBJbnB1dCBETUEgb3JpZ2luYWwgaW1hZ2Ugc2l6ZSAqLworI2RlZmluZSBTNVBfT1JHSVNJWkUJCQkweDE4MAorCisvKiBPdXRwdXQgRE1BIG9yaWdpbmFsIGltYWdlIHNpemUgKi8KKyNkZWZpbmUgUzVQX09SR09TSVpFCQkJMHgxODQKKworI2RlZmluZSBTNVBfT1JJR19TSVpFX1ZFUih4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgUzVQX09SSUdfU0laRV9IT1IoeCkJCSgoeCkgPDwgMCkKKworLyogUmVhbCBvdXRwdXQgRE1BIGltYWdlIHNpemUgKGV4dGVuc2lvbiByZWdpc3RlcikgKi8KKyNkZWZpbmUgUzVQX0NJRVhURU4JCQkweDE4OAorCisjZGVmaW5lIFM1UF9DSURNQVBBUkFNCQkJMHgxOGMKKyNkZWZpbmUgUzVQX0NJRE1BUEFSQU1fUl9MSU5FQVIJCSgwIDw8IDI5KQorI2RlZmluZSBTNVBfQ0lETUFQQVJBTV9SXzY0WDMyCQkoMyA8PCAyOSkKKyNkZWZpbmUgUzVQX0NJRE1BUEFSQU1fV19MSU5FQVIJCSgwIDw8IDEzKQorI2RlZmluZSBTNVBfQ0lETUFQQVJBTV9XXzY0WDMyCQkoMyA8PCAxMykKKyNkZWZpbmUgUzVQX0NJRE1BUEFSQU1fVElMRV9NQVNLCSgoMyA8PCAyOSkgfCAoMyA8PCAxMykpCisKKy8qIE1JUEkgQ1NJIGltYWdlIGZvcm1hdCAqLworI2RlZmluZSBTNVBfQ1NJSU1HRk1UCQkJMHgxOTQKKworI2VuZGlmIC8qIFJFR1NfRklNQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCA3NmRhNzQzLi5lZTk2M2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KQEAgLTY1LDE2ICs2NiwxOSBAQAogCiBzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7CisKKwlzdHJ1Y3QgeworCQkvKiBjaHJvbWEgZ2FpbiBjb250cm9sIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybCAqYWdjOworCQlzdHJ1Y3QgdjRsMl9jdHJsICpnYWluOworCX07CisKIAl2NGwyX3N0ZF9pZCBzdGQ7CiAJaW50IGlucHV0OwogCWludCBvdXRwdXQ7CiAJaW50IGVuYWJsZTsKIAlpbnQgcmFkaW87Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OwotCWludCBjaHJvbWFfYWdjOwogCWludCB3aWR0aDsKIAlpbnQgaGVpZ2h0OwogCXUzMiBpZGVudDsKQEAgLTkwLDYgKzk0LDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxMXhfc3RhdGUsIHNkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHNhYTcxMXhfc3RhdGUsIGhkbCktPnNkOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW5saW5lIGludCBzYWE3MTF4X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsdWUpCkBAIC03NDEsOTYgKzc1MCw1MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMXhfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxMXhfZ192b2xhdGlsZV9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHRvX3NkKGN0cmwpOwogCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQl1OCB2YWw7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgYnJpZ2h0bmVzcyBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7Ci0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJfQotCi0JCXN0YXRlLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExeF93cml0ZShzZCwgUl8wQV9MVU1BX0JSSUdIVF9DTlRMLCBzdGF0ZS0+YnJpZ2h0KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQotCQlzdGF0ZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExeF93cml0ZShzZCwgUl8wQl9MVU1BX0NPTlRSQVNUX0NOVEwsIHN0YXRlLT5jb250cmFzdCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7Ci0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJfQotCi0JCXN0YXRlLT5zYXQgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExeF93cml0ZShzZCwgUl8wQ19DSFJPTUFfU0FUX0NOVEwsIHN0YXRlLT5zYXQpOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfSFVFOgotCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI4IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0KLQkJc3RhdGUtPmh1ZSA9IGN0cmwtPnZhbHVlOwotCQlzYWE3MTF4X3dyaXRlKHNkLCBSXzBEX0NIUk9NQV9IVUVfQ05UTCwgc3RhdGUtPmh1ZSk7Ci0JCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKLQkJdmFsID0gc2FhNzExeF9yZWFkKHNkLCBSXzBGX0NIUk9NQV9HQUlOX0NOVEwpOwotCQlzdGF0ZS0+Y2hyb21hX2FnYyA9IGN0cmwtPnZhbHVlOwotCQlpZiAoY3RybC0+dmFsdWUpCi0JCQl2YWwgJj0gMHg3ZjsKLQkJZWxzZQotCQkJdmFsIHw9IDB4ODA7Ci0JCXNhYTcxMXhfd3JpdGUoc2QsIFJfMEZfQ0hST01BX0dBSU5fQ05UTCwgdmFsKTsKKwkJLyogY2hyb21hIGdhaW4gY2x1c3RlciAqLworCQlpZiAoc3RhdGUtPmFnYy0+Y3VyLnZhbCkKKwkJCXN0YXRlLT5nYWluLT5jdXIudmFsID0KKwkJCQlzYWE3MTF4X3JlYWQoc2QsIFJfMEZfQ0hST01BX0dBSU5fQ05UTCkgJiAweDdmOwogCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0NIUk9NQV9HQUlOOgotCQkvKiBDaHJvbWEgZ2FpbiBjYW5ub3QgYmUgc2V0IHdoZW4gQUdDIGlzIGVuYWJsZWQgKi8KLQkJaWYgKHN0YXRlLT5jaHJvbWFfYWdjID09IDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc2FhNzExeF93cml0ZShzZCwgUl8wRl9DSFJPTUFfR0FJTl9DTlRMLCBjdHJsLT52YWx1ZSB8IDB4ODApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBzYWE3MTF4X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5icmlnaHQ7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMEFfTFVNQV9CUklHSFRfQ05UTCwgY3RybC0+dmFsKTsKIAkJYnJlYWs7CisKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5jb250cmFzdDsKKwkJc2FhNzExeF93cml0ZShzZCwgUl8wQl9MVU1BX0NPTlRSQVNUX0NOVEwsIGN0cmwtPnZhbCk7CiAJCWJyZWFrOworCiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5zYXQ7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMENfQ0hST01BX1NBVF9DTlRMLCBjdHJsLT52YWwpOwogCQlicmVhazsKKwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5odWU7CisJCXNhYTcxMXhfd3JpdGUoc2QsIFJfMERfQ0hST01BX0hVRV9DTlRMLCBjdHJsLT52YWwpOwogCQlicmVhazsKKwogCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+Y2hyb21hX2FnYzsKKwkJLyogY2hyb21hIGdhaW4gY2x1c3RlciAqLworCQlpZiAoc3RhdGUtPmFnYy0+dmFsKQorCQkJc2FhNzExeF93cml0ZShzZCwgUl8wRl9DSFJPTUFfR0FJTl9DTlRMLCBzdGF0ZS0+Z2Fpbi0+dmFsKTsKKwkJZWxzZQorCQkJc2FhNzExeF93cml0ZShzZCwgUl8wRl9DSFJPTUFfR0FJTl9DTlRMLCBzdGF0ZS0+Z2Fpbi0+dmFsIHwgMHg4MCk7CisJCXY0bDJfY3RybF9hY3RpdmF0ZShzdGF0ZS0+Z2FpbiwgIXN0YXRlLT5hZ2MtPnZhbCk7CiAJCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ0hST01BX0dBSU46Ci0JCWN0cmwtPnZhbHVlID0gc2FhNzExeF9yZWFkKHNkLCBSXzBGX0NIUk9NQV9HQUlOX0NOVEwpICYgMHg3ZjsKLQkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMjIzLDI1ICsxMTg5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTF4X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxMjcsIDEsIDY0KTsKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKLQljYXNlIFY0TDJfQ0lEX0NIUk9NQV9HQUlOOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNDgpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQogc3RhdGljIGludCBzYWE3MTF4X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKIAlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC0xNTE4LDE3ICsxNDY1LDI3IEBACiAJCWJyZWFrOwogCX0KIAl2NGwyX2luZm8oc2QsICJXaWR0aCwgSGVpZ2h0OiAgICVkLCAlZFxuIiwgc3RhdGUtPndpZHRoLCBzdGF0ZS0+aGVpZ2h0KTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9sb2dfc3RhdHVzKCZzdGF0ZS0+aGRsLCBzZC0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBzYWE3MTF4X2N0cmxfb3BzID0geworCS5zX2N0cmwgPSBzYWE3MTF4X3NfY3RybCwKKwkuZ192b2xhdGlsZV9jdHJsID0gc2FhNzExeF9nX3ZvbGF0aWxlX2N0cmwsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxMXhfY29yZV9vcHMgPSB7CiAJLmxvZ19zdGF0dXMgPSBzYWE3MTF4X2xvZ19zdGF0dXMsCiAJLmdfY2hpcF9pZGVudCA9IHNhYTcxMXhfZ19jaGlwX2lkZW50LAotCS5nX2N0cmwgPSBzYWE3MTF4X2dfY3RybCwKLQkuc19jdHJsID0gc2FhNzExeF9zX2N0cmwsCi0JLnF1ZXJ5Y3RybCA9IHNhYTcxMXhfcXVlcnljdHJsLAorCS5nX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X2dfZXh0X2N0cmxzLAorCS50cnlfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfdHJ5X2V4dF9jdHJscywKKwkuc19leHRfY3RybHMgPSB2NGwyX3N1YmRldl9zX2V4dF9jdHJscywKKwkuZ19jdHJsID0gdjRsMl9zdWJkZXZfZ19jdHJsLAorCS5zX2N0cmwgPSB2NGwyX3N1YmRldl9zX2N0cmwsCisJLnF1ZXJ5Y3RybCA9IHY0bDJfc3ViZGV2X3F1ZXJ5Y3RybCwKKwkucXVlcnltZW51ID0gdjRsMl9zdWJkZXZfcXVlcnltZW51LAogCS5zX3N0ZCA9IHNhYTcxMXhfc19zdGQsCiAJLnJlc2V0ID0gc2FhNzExeF9yZXNldCwKIAkuc19ncGlvID0gc2FhNzExeF9zX2dwaW8sCkBAIC0xNTc5LDggKzE1MzYsOSBAQAogewogCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwotCWludAlpOwotCWNoYXIJbmFtZVsxN107CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGw7CisJaW50IGk7CisJY2hhciBuYW1lWzE3XTsKIAljaGFyIGNoaXBfaWQ7CiAJaW50IGF1dG9kZXRlY3QgPSAhaWQgfHwgaWQtPmRyaXZlcl9kYXRhID09IDE7CiAKQEAgLTE2MTksMTUgKzE1NzcsMzggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTF4X29wcyk7CisKKwloZGwgPSAmc3RhdGUtPmhkbDsKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNik7CisJLyogYWRkIGluIGFzY2VuZGluZyBJRCBvcmRlciAqLworCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNhYTcxMXhfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9CUklHSFRORVNTLCAwLCAyNTUsIDEsIDEyOCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzExeF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0NPTlRSQVNULCAwLCAxMjcsIDEsIDY0KTsKKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZzYWE3MTF4X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfU0FUVVJBVElPTiwgMCwgMTI3LCAxLCA2NCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzExeF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0hVRSwgLTEyOCwgMTI3LCAxLCAwKTsKKwlzdGF0ZS0+YWdjID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzExeF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0NIUk9NQV9BR0MsIDAsIDEsIDEsIDEpOworCXN0YXRlLT5nYWluID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzExeF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0NIUk9NQV9HQUlOLCAwLCAxMjcsIDEsIDQwKTsKKwlzdGF0ZS0+Z2Fpbi0+aXNfdm9sYXRpbGUgPSAxOworCXNkLT5jdHJsX2hhbmRsZXIgPSBoZGw7CisJaWYgKGhkbC0+ZXJyb3IpIHsKKwkJaW50IGVyciA9IGhkbC0+ZXJyb3I7CisKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShoZGwpOworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBlcnI7CisJfQorCXN0YXRlLT5hZ2MtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1VQREFURTsKKwl2NGwyX2N0cmxfY2x1c3RlcigyLCAmc3RhdGUtPmFnYyk7CisKIAlzdGF0ZS0+aW5wdXQgPSAtMTsKIAlzdGF0ZS0+b3V0cHV0ID0gU0FBNzExNV9JUE9SVF9PTjsKIAlzdGF0ZS0+ZW5hYmxlID0gMTsKIAlzdGF0ZS0+cmFkaW8gPSAwOwotCXN0YXRlLT5icmlnaHQgPSAxMjg7Ci0Jc3RhdGUtPmNvbnRyYXN0ID0gNjQ7Ci0Jc3RhdGUtPmh1ZSA9IDA7Ci0Jc3RhdGUtPnNhdCA9IDY0OwotCXN0YXRlLT5jaHJvbWFfYWdjID0gMTsKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKIAljYXNlICcxJzoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTExOwpAQCAtMTY3NSw2ICsxNjU2LDcgQEAKIAlpZiAoc3RhdGUtPmlkZW50ID4gVjRMMl9JREVOVF9TQUE3MTExQSkKIAkJc2FhNzExeF93cml0ZXJlZ3Moc2QsIHNhYTcxMTVfaW5pdF9taXNjKTsKIAlzYWE3MTF4X3NldF92NGxzdGQoc2QsIFY0TDJfU1REX05UU0MpOworCXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKGhkbCk7CiAKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM6ICgxRSkgMHglMDJ4LCAoMUYpIDB4JTAyeFxuIiwKIAkJc2FhNzExeF9yZWFkKHNkLCBSXzFFX1NUQVRVU19CWVRFXzFfVkRfREVDKSwKQEAgLTE2ODksNiArMTY3MSw3IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7CiAJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKaW5kZXggNzhkNjk5NS4uNDVmOGJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxN3ggYXVkaW8vdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKQEAgLTU1LDE0ICs1NiwxMSBAQAogCiBzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSB7CiAJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7CiAJdjRsMl9zdGRfaWQgc3RkOwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCByYWRpbzsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiAJaW50IHBsYXliYWNrOwogCWludCBhdWRpbzsKIAlpbnQgdHVuZXJfYXVkaW9fbW9kZTsKQEAgLTgxLDYgKzc5LDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxN3hfc3RhdGUsIHNkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHNhYTcxN3hfc3RhdGUsIGhkbCktPnNkOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBmb3IgYXVkaW8gbW9kZSAqLwpAQCAtNzc0LDI5ICs3NzcsNiBAQAogCXNhYTcxN3hfd3JpdGUoc2QsIDB4NDcwLCByZWdfc2V0X2F1ZGlvX3RlbXBsYXRlW2F1ZGlvX21vZGVdWzFdKTsKIH0KIAotLyogd3JpdGUgcmVncyB0byB2aWRlbyBvdXRwdXQgbGV2ZWwgKGJyaWdodCxjb250cmFzdCxodWUsc2F0KSAqLwotc3RhdGljIHZvaWQgc2V0X3ZpZGVvX291dHB1dF9sZXZlbF9yZWdzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpkZWNvZGVyKQotewotCS8qIGJyaWdodG5lc3MgZmZoIChicmlnaHQpIC0gODBoIChJVFUgbGV2ZWwpIC0gMDBoIChkYXJrKSAqLwotCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBhLCBkZWNvZGVyLT5icmlnaHQpOwotCi0JLyogY29udHJhc3QgN2ZoIChtYXg6IDEuOTg0KSAtIDQ0aCAoSVRVKSAtIDQwaCAoMS4wKSAtCi0JICAgMGggKGx1bWluYW5jZSBvZmYpIDQwOiBpMmMgZHVtcAotCSAgIGMwaCAoLTEuMCBpbnZlcnNlIGNocm9taW5hbmNlKQotCSAgIDgwaCAoLTIuMCBpbnZlcnNlIGNocm9taW5hbmNlKSAqLwotCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBiLCBkZWNvZGVyLT5jb250cmFzdCk7Ci0KLQkvKiBzYXR1cmF0aW9uPyA3ZmgobWF4KS00MGgoSVRVKS0waChjb2xvciBvZmYpCi0JICAgYzBoICgtMS4wIGludmVyc2UgY2hyb21pbmFuY2UpCi0JICAgODBoICgtMi4wIGludmVyc2UgY2hyb21pbmFuY2UpICovCi0Jc2FhNzE3eF93cml0ZShzZCwgMHgxMGMsIGRlY29kZXItPnNhdCk7Ci0KLQkvKiBjb2xvciBodWUgKHBoYXNlKSBjb250cm9sCi0JICAgN2ZoICgrMTc4LjYpIC0gMGggKDAgbm9ybWFsKSAtIDgwaCAoLTE4MC4wKSAqLwotCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBkLCBkZWNvZGVyLT5odWUpOwotfQotCiAvKiB3cml0ZSByZWdzIHRvIHNldCBhdWRpbyB2b2x1bWUsIGJhc3MgYW5kIHRyZWJsZSAqLwogc3RhdGljIGludCBzZXRfYXVkaW9fcmVncyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqZGVjb2RlcikKQEAgLTgyOSw5ICs4MDksOSBAQAogCiAJc2FhNzE3eF93cml0ZShzZCwgMHg0ODAsIHZhbCk7CiAKLQkvKiBiYXNzIGFuZCB0cmVibGU7IGdvIHRvIGFub3RoZXIgZnVuY3Rpb24gKi8KIAkvKiBzZXQgYmFzcyBhbmQgdHJlYmxlICovCi0JdmFsID0gZGVjb2Rlci0+YXVkaW9fbWFpbl9iYXNzIHwgKGRlY29kZXItPmF1ZGlvX21haW5fdHJlYmxlIDw8IDgpOworCXZhbCA9IGRlY29kZXItPmF1ZGlvX21haW5fYmFzcyAmIDB4MWY7CisJdmFsIHw9IChkZWNvZGVyLT5hdWRpb19tYWluX3RyZWJsZSAmIDB4MWYpIDw8IDU7CiAJc2FhNzE3eF93cml0ZShzZCwgMHg0ODgsIHZhbCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04OTMsMjE4ICs4NzMsNTUgQEAKIAlzYWE3MTd4X3dyaXRlKHNkLCAweDcxICsgdGFza19zaGlmdCwgeXNjYWxlID4+IDgpOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxN3hfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IHRvX3NkKGN0cmwpOwogCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsIGN0cmwtPnZhbHVlKTsKLQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0KLQkJc3RhdGUtPmJyaWdodCA9IGN0cmwtPnZhbHVlOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJicmlnaHQ6JWRcbiIsIHN0YXRlLT5icmlnaHQpOwotCQlzYWE3MTd4X3dyaXRlKHNkLCAweDEwYSwgc3RhdGUtPmJyaWdodCk7Ci0JCWJyZWFrOworCQlzYWE3MTd4X3dyaXRlKHNkLCAweDEwYSwgY3RybC0+dmFsKTsKKwkJcmV0dXJuIDA7CiAKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQotCQlzdGF0ZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiY29udHJhc3Q6JWRcbiIsIHN0YXRlLT5jb250cmFzdCk7Ci0JCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBiLCBzdGF0ZS0+Y29udHJhc3QpOwotCQlicmVhazsKKwkJc2FhNzE3eF93cml0ZShzZCwgMHgxMGIsIGN0cmwtPnZhbCk7CisJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQl2NGwyX2VycihzZCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7Ci0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJfQotCi0JCXN0YXRlLT5zYXQgPSBjdHJsLT52YWx1ZTsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2F0OiVkXG4iLCBzdGF0ZS0+c2F0KTsKLQkJc2FhNzE3eF93cml0ZShzZCwgMHgxMGMsIHN0YXRlLT5zYXQpOwotCQlicmVhazsKKwkJc2FhNzE3eF93cml0ZShzZCwgMHgxMGMsIGN0cmwtPnZhbCk7CisJCXJldHVybiAwOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjggfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCX0KLQotCQlzdGF0ZS0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImh1ZTolZFxuIiwgc3RhdGUtPmh1ZSk7Ci0JCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBkLCBzdGF0ZS0+aHVlKTsKLQkJYnJlYWs7CisJCXNhYTcxN3hfd3JpdGUoc2QsIDB4MTBkLCBjdHJsLT52YWwpOworCQlyZXR1cm4gMDsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJc3RhdGUtPmF1ZGlvX21haW5fbXV0ZSA9IGN0cmwtPnZhbHVlOwotCQlzZXRfYXVkaW9fcmVncyhzZCwgc3RhdGUpOworCQlzdGF0ZS0+YXVkaW9fbWFpbl9tdXRlID0gY3RybC0+dmFsOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlzdGF0ZS0+YXVkaW9fbWFpbl92b2x1bWUgPSBjdHJsLT52YWx1ZTsKLQkJc2V0X2F1ZGlvX3JlZ3Moc2QsIHN0YXRlKTsKKwkJc3RhdGUtPmF1ZGlvX21haW5fdm9sdW1lID0gY3RybC0+dmFsOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJc3RhdGUtPmF1ZGlvX21haW5fYmFsYW5jZSA9IGN0cmwtPnZhbHVlOwotCQlzZXRfYXVkaW9fcmVncyhzZCwgc3RhdGUpOworCQlzdGF0ZS0+YXVkaW9fbWFpbl9iYWxhbmNlID0gY3RybC0+dmFsOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlzdGF0ZS0+YXVkaW9fbWFpbl90cmVibGUgPSBjdHJsLT52YWx1ZTsKLQkJc2V0X2F1ZGlvX3JlZ3Moc2QsIHN0YXRlKTsKKwkJc3RhdGUtPmF1ZGlvX21haW5fdHJlYmxlID0gY3RybC0+dmFsOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKLQkJc3RhdGUtPmF1ZGlvX21haW5fYmFzcyA9IGN0cmwtPnZhbHVlOwotCQlzZXRfYXVkaW9fcmVncyhzZCwgc3RhdGUpOworCQlzdGF0ZS0+YXVkaW9fbWFpbl9iYXNzID0gY3RybC0+dmFsOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAl9Ci0KKwlzZXRfYXVkaW9fcmVncyhzZCwgc3RhdGUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IHNhYTcxN3hfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YnJpZ2h0OwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPmNvbnRyYXN0OwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+c2F0OwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfSFVFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5odWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5hdWRpb19tYWluX211dGU7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPmF1ZGlvX21haW5fdm9sdW1lOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YXVkaW9fbWFpbl9iYWxhbmNlOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5hdWRpb19tYWluX3RyZWJsZTsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCWN0cmwtPnZhbHVlID0gc3RhdGUtPmF1ZGlvX21haW5fYmFzczsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBzYWE3MTd4X3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgICAgICAgPSAiQnJpZ2h0bmVzcyIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAyNTUsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxMjgsCi0JCS5mbGFncyAgICAgICAgID0gMCwKLQl9LCB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQ09OVFJBU1QsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgICAgICAgPSAiQ29udHJhc3QiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMjU1LAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gNjQsCi0JCS5mbGFncyAgICAgICAgID0gMCwKLQl9LCB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSAgICAgICAgICA9ICJTYXR1cmF0aW9uIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDI1NSwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDY0LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCi0JfSwgewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0hVRSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSAgICAgICAgICA9ICJIdWUiLAotCQkubWluaW11bSAgICAgICA9IC0xMjgsCi0JCS5tYXhpbXVtICAgICAgID0gMTI3LAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJLmZsYWdzIAkgICAgICAgPSAwLAotCX0sIHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDY1NTM1IC8gMTAwLAotCQkuZGVmYXVsdF92YWx1ZSA9IDU4ODgwLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCi0JfSwgewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgICAgICAgPSAiQmFsYW5jZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSAvIDEwMCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAzMjc2OCwKLQkJLmZsYWdzICAgICAgICAgPSAwLAotCX0sIHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLnN0ZXAgICAgICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS5mbGFncyAgICAgICAgID0gMCwKLQl9LCB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fQkFTUywKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSAgICAgICAgICA9ICJCYXNzIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDY1NTM1IC8gMTAwLAotCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAotCX0sIHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgICAgICAgICAgPSAiVHJlYmxlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDY1NTM1IC8gMTAwLAotCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAotCX0sCi19OwotCiBzdGF0aWMgaW50IHNhYTcxN3hfc192aWRlb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkJICAgdTMyIGlucHV0LCB1MzIgb3V0cHV0LCB1MzIgY29uZmlnKQogewpAQCAtMTE1OCwxOCArOTc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTd4X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2FhNzE3eF9xY3RybCk7IGkrKykKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gc2FhNzE3eF9xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmc2FhNzE3eF9xY3RybFtpXSwgc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgc2FhNzE3eF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewpAQCAtMTM4NiwxNyArMTE5MSwzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTcxN3hfbG9nX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBzYWE3MTd4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCXY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoJnN0YXRlLT5oZGwsIHNkLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHNhYTcxN3hfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IHNhYTcxN3hfc19jdHJsLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTd4X2NvcmVfb3BzID0gewogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkuZ19yZWdpc3RlciA9IHNhYTcxN3hfZ19yZWdpc3RlciwKIAkuc19yZWdpc3RlciA9IHNhYTcxN3hfc19yZWdpc3RlciwKICNlbmRpZgotCS5xdWVyeWN0cmwgPSBzYWE3MTd4X3F1ZXJ5Y3RybCwKLQkuZ19jdHJsID0gc2FhNzE3eF9nX2N0cmwsCi0JLnNfY3RybCA9IHNhYTcxN3hfc19jdHJsLAogCS5zX3N0ZCA9IHNhYTcxN3hfc19zdGQsCisJLmdfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfZ19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzLAorCS5zX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzLAorCS5nX2N0cmwgPSB2NGwyX3N1YmRldl9nX2N0cmwsCisJLnNfY3RybCA9IHY0bDJfc3ViZGV2X3NfY3RybCwKKwkucXVlcnljdHJsID0gdjRsMl9zdWJkZXZfcXVlcnljdHJsLAorCS5xdWVyeW1lbnUgPSB2NGwyX3N1YmRldl9xdWVyeW1lbnUsCisJLmxvZ19zdGF0dXMgPSBzYWE3MTd4X2xvZ19zdGF0dXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE3MTd4X3R1bmVyX29wcyA9IHsKQEAgLTE0MzIsNiArMTI1NCw3IEBACiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRpZCkKIHsKIAlzdHJ1Y3Qgc2FhNzE3eF9zdGF0ZSAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCXU4IGlkID0gMDsKIAljaGFyICpwID0gIiI7CkBAIC0xNDY3LDE2ICsxMjkwLDQxIEBACiAJCXAgPSAic2FhNzE3MSI7CiAJdjRsMl9pbmZvKHNkLCAiJXMgZm91bmQgQCAweCV4ICglcylcbiIsIHAsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKKworCWhkbCA9ICZkZWNvZGVyLT5oZGw7CisJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDkpOworCS8qIGFkZCBpbiBhc2NlbmRpbmcgSUQgb3JkZXIgKi8KKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZzYWE3MTd4X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQlJJR0hUTkVTUywgMCwgMjU1LCAxLCAxMjgpOworCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNhYTcxN3hfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9DT05UUkFTVCwgMCwgMjU1LCAxLCA2OCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzE3eF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX1NBVFVSQVRJT04sIDAsIDI1NSwgMSwgNjQpOworCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNhYTcxN3hfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9IVUUsIC0xMjgsIDEyNywgMSwgMCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzE3eF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA0MjAwMCk7CisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2FhNzE3eF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX0JBTEFOQ0UsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOworCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNhYTcxN3hfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9BVURJT19CQVNTLCAtMTYsIDE1LCAxLCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZzYWE3MTd4X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fVFJFQkxFLCAtMTYsIDE1LCAxLCAwKTsKKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZzYWE3MTd4X2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQVVESU9fTVVURSwgMCwgMSwgMSwgMCk7CisJc2QtPmN0cmxfaGFuZGxlciA9IGhkbDsKKwlpZiAoaGRsLT5lcnJvcikgeworCQlpbnQgZXJyID0gaGRsLT5lcnJvcjsKKworCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhkbCk7CisJCWtmcmVlKGRlY29kZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwogCWRlY29kZXItPnN0ZCA9IFY0TDJfU1REX05UU0M7CiAJZGVjb2Rlci0+aW5wdXQgPSAtMTsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwogCi0JLyogdHVuZSB0aGVzZSBwYXJhbWV0ZXJzICovCi0JZGVjb2Rlci0+YnJpZ2h0ID0gMHg4MDsKLQlkZWNvZGVyLT5jb250cmFzdCA9IDB4NDQ7Ci0JZGVjb2Rlci0+c2F0ID0gMHg0MDsKLQlkZWNvZGVyLT5odWUgPSAweDAwOwotCiAJLyogRklYTUUhISAqLwogCWRlY29kZXItPnBsYXliYWNrID0gMDsJLyogaW5pdGlhbGx5IGNhcHR1cmUgbW9kZSB1c2VkICovCiAJZGVjb2Rlci0+YXVkaW8gPSAxOyAvKiBERUNPREVSX0FVRElPXzQ4X0tIWiAqLwpAQCAtMTQ4NywyMyArMTMzNSwxMyBAQAogCS8qIHNldCB2b2x1bWUsIGJhc3MgYW5kIHRyZWJsZSAqLwogCWRlY29kZXItPmF1ZGlvX21haW5fdm9sX2wgPSA2OwogCWRlY29kZXItPmF1ZGlvX21haW5fdm9sX3IgPSA2OwotCWRlY29kZXItPmF1ZGlvX21haW5fYmFzcyA9IDA7Ci0JZGVjb2Rlci0+YXVkaW9fbWFpbl90cmVibGUgPSAwOwotCWRlY29kZXItPmF1ZGlvX21haW5fbXV0ZSA9IDA7Ci0JZGVjb2Rlci0+YXVkaW9fbWFpbl9iYWxhbmNlID0gMzI3Njg7Ci0JLyogbm9ybWFsaXplICgyNCB0byAtNDAgKG5vdCAtODQpIC0+IDY1NTM1IHRvIDApICovCi0JZGVjb2Rlci0+YXVkaW9fbWFpbl92b2x1bWUgPQotCQkoZGVjb2Rlci0+YXVkaW9fbWFpbl92b2xfciArIDQxKSAqIDY1NTM1IC8gKDI0IC0gKC00MCkpOwogCiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAid3JpdGluZyBpbml0IHZhbHVlc1xuIik7CiAKIAkvKiBGSVhNRSEhICovCiAJc2FhNzE3eF93cml0ZV9yZWdzKHNkLCByZWdfaW5pdF9pbml0aWFsaXplKTsKLQlzZXRfdmlkZW9fb3V0cHV0X2xldmVsX3JlZ3Moc2QsIGRlY29kZXIpOwotCS8qIHNldCBiYXNzLHRyZWJsZSB0byAwZGIgMjAwNDExMDEgSy5PaHRhICovCi0JZGVjb2Rlci0+YXVkaW9fbWFpbl9iYXNzID0gMDsKLQlkZWNvZGVyLT5hdWRpb19tYWluX3RyZWJsZSA9IDA7Ci0Jc2V0X2F1ZGlvX3JlZ3Moc2QsIGRlY29kZXIpOworCisJdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoaGRsKTsKIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dCgyKkhaKTsKQEAgLTE1MTUsNiArMTM1Myw3IEBACiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoc2QtPmN0cmxfaGFuZGxlcik7CiAJa2ZyZWUodG9fc3RhdGUoc2QpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggZjIwMzI5My4uYTQ5OWNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKQEAgLTc3OSw5ICs3NzksMTIgQEAKIAlyZXQgPSBpY2ktPm9wcy0+Z2V0X2Nyb3AoaWNkLCAmY3VycmVudF9jcm9wKTsKIAogCS8qIFByb2hpYml0IHdpbmRvdyBzaXplIGNoYW5nZSB3aXRoIGluaXRpYWxpc2VkIGJ1ZmZlcnMgKi8KLQlpZiAoaWNmLT52Yl92aWRxLmJ1ZnNbMF0gJiYgIXJldCAmJgotCSAgICAoYS0+Yy53aWR0aCAhPSBjdXJyZW50X2Nyb3AuYy53aWR0aCB8fAotCSAgICAgYS0+Yy5oZWlnaHQgIT0gY3VycmVudF9jcm9wLmMuaGVpZ2h0KSkgeworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LAorCQkJIlNfQ1JPUCBkZW5pZWQ6IGdldHRpbmcgY3VycmVudCBjcm9wIGZhaWxlZFxuIik7CisJfSBlbHNlIGlmIChpY2YtPnZiX3ZpZHEuYnVmc1swXSAmJgorCQkgICAoYS0+Yy53aWR0aCAhPSBjdXJyZW50X2Nyb3AuYy53aWR0aCB8fAorCQkgICAgYS0+Yy5oZWlnaHQgIT0gY3VycmVudF9jcm9wLmMuaGVpZ2h0KSkgewogCQlkZXZfZXJyKCZpY2QtPmRldiwKIAkJCSJTX0NST1AgZGVuaWVkOiBxdWV1ZSBpbml0aWFsaXNlZCBhbmQgc2l6ZXMgZGlmZmVyXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA3MDAyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYwppbmRleCA4MDg1YWMzLi40OGY1Yzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDcwMDIuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA0ODBQICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19yZWdfdmFsdWUgdHZwNzAwMl9wYXJtc180ODBQW10gPSB7CiAJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHgzNSwgVFZQNzAwMl9XUklURSB9LAotCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MGEsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweGEwLCBUVlA3MDAyX1dSSVRFIH0sCiAJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHgwMiwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNCwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4OTEsIFRWUDcwMDJfV1JJVEUgfSwKQEAgLTIyMyw3ICsyMjMsNyBAQAogLyogUmVnaXN0ZXIgcGFyYW1ldGVycyBmb3IgMTA4MEk2MCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfMTA4MEk2MFtdID0gewogCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4ODksIFRWUDcwMDJfV1JJVEUgfSwKLQl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDA4LCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHg4MCwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4OTgsIFRWUDcwMDJfV1JJVEUgfSwKIAl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTQsIFRWUDcwMDJfV1JJVEUgfSwKIAl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDA2LCBUVlA3MDAyX1dSSVRFIH0sCkBAIC0yNDUsNyArMjQ1LDcgQEAKIC8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDEwODBQNjAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzEwODBQNjBbXSA9IHsKIAl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9NU0JTLCAweDg5LCBUVlA3MDAyX1dSSVRFIH0sCi0JeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgwOCwgVFZQNzAwMl9XUklURSB9LAorCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4ODAsIFRWUDcwMDJfV1JJVEUgfSwKIAl7IFRWUDcwMDJfSFBMTF9DUlRMLCAweEUwLCBUVlA3MDAyX1dSSVRFIH0sCiAJeyBUVlA3MDAyX0hQTExfUEhBU0VfU0VMLCAweDE0LCBUVlA3MDAyX1dSSVRFIH0sCiAJeyBUVlA3MDAyX0FWSURfU1RBUlRfUElYRUxfTFNCUywgMHgwNiwgVFZQNzAwMl9XUklURSB9LApAQCAtMjg5LDcgKzI4OSw3IEBACiAvKiBSZWdpc3RlciBwYXJhbWV0ZXJzIGZvciA3MjBQNjAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX3JlZ192YWx1ZSB0dnA3MDAyX3Bhcm1zXzcyMFA2MFtdID0gewogCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX01TQlMsIDB4NjcsIFRWUDcwMDJfV1JJVEUgfSwKLQl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweDAyLCBUVlA3MDAyX1dSSVRFIH0sCisJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTFNCUywgMHgyMCwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9IUExMX0NSVEwsIDB4YTAsIFRWUDcwMDJfV1JJVEUgfSwKIAl7IFRWUDcwMDJfSFBMTF9QSEFTRV9TRUwsIDB4MTYsIFRWUDcwMDJfV1JJVEUgfSwKIAl7IFRWUDcwMDJfQVZJRF9TVEFSVF9QSVhFTF9MU0JTLCAweDQ3LCBUVlA3MDAyX1dSSVRFIH0sCkBAIC0zMTEsNyArMzExLDcgQEAKIC8qIFJlZ2lzdGVyIHBhcmFtZXRlcnMgZm9yIDcyMFA1MCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfcmVnX3ZhbHVlIHR2cDcwMDJfcGFybXNfNzIwUDUwW10gPSB7CiAJeyBUVlA3MDAyX0hQTExfRkRCS19ESVZfTVNCUywgMHg3YiwgVFZQNzAwMl9XUklURSB9LAotCXsgVFZQNzAwMl9IUExMX0ZEQktfRElWX0xTQlMsIDB4MGMsIFRWUDcwMDJfV1JJVEUgfSwKKwl7IFRWUDcwMDJfSFBMTF9GREJLX0RJVl9MU0JTLCAweGMwLCBUVlA3MDAyX1dSSVRFIH0sCiAJeyBUVlA3MDAyX0hQTExfQ1JUTCwgMHg5OCwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9IUExMX1BIQVNFX1NFTCwgMHgxNiwgVFZQNzAwMl9XUklURSB9LAogCXsgVFZQNzAwMl9BVklEX1NUQVJUX1BJWEVMX0xTQlMsIDB4NDcsIFRWUDcwMDJfV1JJVEUgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdXNidmlkZW8uYwppbmRleCA1YWMzN2M2Li5mMWZjZjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3VzYnZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby91c2J2aWRlby5jCkBAIC0yODIsMTkgKzI4MiwxNSBAQAogCX07CiAJdW5zaWduZWQgc2hvcnQgZGlnaXQ7CiAJaW50IGl4LCBpeTsKKwlpbnQgdmFsdWU7CiAKIAlpZiAoKHV2ZCA9PSBOVUxMKSB8fCAoZnJhbWUgPT0gTlVMTCkpCiAJCXJldHVybjsKIAotCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKQotCQljaCAtPSAnMCc7Ci0JZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykKLQkJY2ggPSAxMCArIChjaCAtICdBJyk7Ci0JZWxzZSBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykKLQkJY2ggPSAxMCArIChjaCAtICdhJyk7Ci0JZWxzZQorCXZhbHVlID0gaGV4X3RvX2JpbihjaCk7CisJaWYgKHZhbHVlIDwgMCkKIAkJcmV0dXJuOwotCWRpZ2l0ID0gZGlnaXRzW2NoXTsKKwlkaWdpdCA9IGRpZ2l0c1t2YWx1ZV07CiAKIAlmb3IgKGl5PTA7IGl5IDwgNTsgaXkrKykgewogCQlmb3IgKGl4PTA7IGl4IDwgMzsgaXgrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCmluZGV4IDdlYWY5OWIuLjhiZGQ5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTIxNDUsNiArMjE0NSwxNSBAQAogCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCiAJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKIAkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAorCS8qIE1pcmljbGUgMzA3SyAqLworCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCisJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCSAgLmlkVmVuZG9yCQk9IDB4MTdkYywKKwkgIC5pZFByb2R1Y3QJCT0gMHgwMjAyLAorCSAgLmJJbnRlcmZhY2VDbGFzcwk9IFVTQl9DTEFTU19WSURFTywKKwkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAorCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCisJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKIAkvKiBMZW5vdm8gVGhpbmtwYWQgU0w0MDAvU0w1MDAgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19xdWV1ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKaW5kZXggMTMzYzc4ZC4uZTk5MjhhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3F1ZXVlLmMKQEAgLTc4LDEyICs3OCwxNCBAQAogICoKICAqLwogCi12b2lkIHV2Y19xdWV1ZV9pbml0KHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLCBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKK3ZvaWQgdXZjX3F1ZXVlX2luaXQoc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlLAorCQkgICAgaW50IGRyb3BfY29ycnVwdGVkKQogewogCW11dGV4X2luaXQoJnF1ZXVlLT5tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJnF1ZXVlLT5pcnFsb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmcXVldWUtPm1haW5xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5pcnFxdWV1ZSk7CisJcXVldWUtPmZsYWdzID0gZHJvcF9jb3JydXB0ZWQgPyBVVkNfUVVFVUVfRFJPUF9DT1JSVVBURUQgOiAwOwogCXF1ZXVlLT50eXBlID0gdHlwZTsKIH0KIApAQCAtNDM1LDggKzQzNywxMCBAQAogCQl1dmNfcXVldWVfY2FuY2VsKHF1ZXVlLCAwKTsKIAkJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5tYWlucXVldWUpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+Y291bnQ7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5jb3VudDsgKytpKSB7CisJCQlxdWV1ZS0+YnVmZmVyW2ldLmVycm9yID0gMDsKIAkJCXF1ZXVlLT5idWZmZXJbaV0uc3RhdGUgPSBVVkNfQlVGX1NUQVRFX0lETEU7CisJCX0KIAogCQlxdWV1ZS0+ZmxhZ3MgJj0gflVWQ19RVUVVRV9TVFJFQU1JTkc7CiAJfQpAQCAtNDg4LDggKzQ5Miw4IEBACiAJc3RydWN0IHV2Y19idWZmZXIgKm5leHRidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICgocXVldWUtPmZsYWdzICYgVVZDX1FVRVVFX0RST1BfSU5DT01QTEVURSkgJiYKLQkgICAgYnVmLT5idWYubGVuZ3RoICE9IGJ1Zi0+YnVmLmJ5dGVzdXNlZCkgeworCWlmICgocXVldWUtPmZsYWdzICYgVVZDX1FVRVVFX0RST1BfQ09SUlVQVEVEKSAmJiBidWYtPmVycm9yKSB7CisJCWJ1Zi0+ZXJyb3IgPSAwOwogCQlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9RVUVVRUQ7CiAJCWJ1Zi0+YnVmLmJ5dGVzdXNlZCA9IDA7CiAJCXJldHVybiBidWY7CkBAIC00OTcsNiArNTAxLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+aXJxbG9jaywgZmxhZ3MpOwogCWxpc3RfZGVsKCZidWYtPnF1ZXVlKTsKKwlidWYtPmVycm9yID0gMDsKIAlidWYtPnN0YXRlID0gVVZDX0JVRl9TVEFURV9ET05FOwogCWlmICghbGlzdF9lbXB0eSgmcXVldWUtPmlycXF1ZXVlKSkKIAkJbmV4dGJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnF1ZXVlLT5pcnFxdWV1ZSwgc3RydWN0IHV2Y19idWZmZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IDUzZjNlZjQuLmUyN2NmMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC01NTUsNiArNTU1LDkgQEAKIAkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzIDwgMCkgewogCQkJdXZjX3RyYWNlKFVWQ19UUkFDRV9GUkFNRSwgIlVTQiBpc29jaHJvbm91cyBmcmFtZSAiCiAJCQkJImxvc3QgKCVkKS5cbiIsIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKKwkJCS8qIE1hcmsgdGhlIGJ1ZmZlciBhcyBmYXVsdHkuICovCisJCQlpZiAoYnVmICE9IE5VTEwpCisJCQkJYnVmLT5lcnJvciA9IDE7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC01NzksOCArNTgyLDE0IEBACiAJCXV2Y192aWRlb19kZWNvZGVfZW5kKHN0cmVhbSwgYnVmLCBtZW0sCiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwogCi0JCWlmIChidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfUkVBRFkpCisJCWlmIChidWYtPnN0YXRlID09IFVWQ19CVUZfU1RBVEVfUkVBRFkpIHsKKwkJCWlmIChidWYtPmJ1Zi5sZW5ndGggIT0gYnVmLT5idWYuYnl0ZXN1c2VkICYmCisJCQkgICAgIShzdHJlYW0tPmN1cl9mb3JtYXQtPmZsYWdzICYKKwkJCSAgICAgIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKSkKKwkJCQlidWYtPmVycm9yID0gMTsKKwogCQkJYnVmID0gdXZjX3F1ZXVlX25leHRfYnVmZmVyKCZzdHJlYW0tPnF1ZXVlLCBidWYpOworCQl9CiAJfQogfQogCkBAIC0xMTA0LDcgKzExMTMsNyBAQAogCWF0b21pY19zZXQoJnN0cmVhbS0+YWN0aXZlLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHZpZGVvIGJ1ZmZlcnMgcXVldWUuICovCi0JdXZjX3F1ZXVlX2luaXQoJnN0cmVhbS0+cXVldWUsIHN0cmVhbS0+dHlwZSk7CisJdXZjX3F1ZXVlX2luaXQoJnN0cmVhbS0+cXVldWUsIHN0cmVhbS0+dHlwZSwgIXV2Y19ub19kcm9wX3BhcmFtKTsKIAogCS8qIEFsdGVybmF0ZSBzZXR0aW5nIDAgc2hvdWxkIGJlIHRoZSBkZWZhdWx0LCB5ZXQgdGhlIFhCb3ggTGl2ZSBWaXNpb24KIAkgKiBDYW0gKGFuZCBwb3NzaWJseSBvdGhlciBkZXZpY2VzKSBjcmFzaCBvciBvdGhlcndpc2UgbWlzYmVoYXZlIGlmCkBAIC0xMTk3LDEyICsxMjA2LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKChzdHJlYW0tPmN1cl9mb3JtYXQtPmZsYWdzICYgVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQpIHx8Ci0JICAgIHV2Y19ub19kcm9wX3BhcmFtKQotCQlzdHJlYW0tPnF1ZXVlLmZsYWdzICY9IH5VVkNfUVVFVUVfRFJPUF9JTkNPTVBMRVRFOwotCWVsc2UKLQkJc3RyZWFtLT5xdWV1ZS5mbGFncyB8PSBVVkNfUVVFVUVfRFJPUF9JTkNPTVBMRVRFOwotCiAJcmV0ID0gdXZjX3F1ZXVlX2VuYWJsZSgmc3RyZWFtLT5xdWV1ZSwgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaAppbmRleCBhYzI3MjQ1Li5iZGFjZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKQEAgLTM3OSwxMSArMzc5LDEyIEBACiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogCWVudW0gdXZjX2J1ZmZlcl9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgZXJyb3I7CiB9OwogCiAjZGVmaW5lIFVWQ19RVUVVRV9TVFJFQU1JTkcJCSgxIDw8IDApCiAjZGVmaW5lIFVWQ19RVUVVRV9ESVNDT05ORUNURUQJCSgxIDw8IDEpCi0jZGVmaW5lIFVWQ19RVUVVRV9EUk9QX0lOQ09NUExFVEUJKDEgPDwgMikKKyNkZWZpbmUgVVZDX1FVRVVFX0RST1BfQ09SUlVQVEVECSgxIDw8IDIpCiAKIHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgewogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlOwpAQCAtNTYyLDcgKzU2Myw3IEBACiAKIC8qIFZpZGVvIGJ1ZmZlcnMgcXVldWUgbWFuYWdlbWVudC4gKi8KIGV4dGVybiB2b2lkIHV2Y19xdWV1ZV9pbml0KHN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlLAotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSk7CisJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlLCBpbnQgZHJvcF9jb3JydXB0ZWQpOwogZXh0ZXJuIGludCB1dmNfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSwKIAkJdW5zaWduZWQgaW50IG5idWZmZXJzLCB1bnNpZ25lZCBpbnQgYnVmbGVuZ3RoKTsKIGV4dGVybiBpbnQgdXZjX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggNGU1M2IwYi4uM2NlN2M2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogI2RlZmluZSBfX09MRF9WSURJT0NfIC8qIFRvIGFsbG93IGZpeGluZyBvbGQgY2FsbHMqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KQEAgLTE3Miw0ODcgKzE3MywxNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfY2hlY2spOwogCi0vKiBSZXR1cm5zIE5VTEwgb3IgYSBjaGFyYWN0ZXIgcG9pbnRlciBhcnJheSBjb250YWluaW5nIHRoZSBtZW51IGZvcgotICAgdGhlIGdpdmVuIGNvbnRyb2wgSUQuIFRoZSBwb2ludGVyIGFycmF5IGVuZHMgd2l0aCBhIE5VTEwgcG9pbnRlci4KLSAgIEFuIGVtcHR5IHN0cmluZyBzaWduaWZpZXMgYSBtZW51IGVudHJ5IHRoYXQgaXMgaW52YWxpZC4gVGhpcyBhbGxvd3MKLSAgIGRyaXZlcnMgdG8gZGlzYWJsZSBjZXJ0YWluIG9wdGlvbnMgaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4gKi8KLWNvbnN0IGNoYXIgKip2NGwyX2N0cmxfZ2V0X21lbnUodTMyIGlkKQotewotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXFbXSA9IHsKLQkJIjQ0LjEga0h6IiwKLQkJIjQ4IGtIeiIsCi0JCSIzMiBrSHoiLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ1tdID0gewotCQkiTVBFRy0xLzIgTGF5ZXIgSSIsCi0JCSJNUEVHLTEvMiBMYXllciBJSSIsCi0JCSJNUEVHLTEvMiBMYXllciBJSUkiLAotCQkiTVBFRy0yLzQgQUFDIiwKLQkJIkFDLTMiLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMV9iaXRyYXRlW10gPSB7Ci0JCSIzMiBrYnBzIiwKLQkJIjY0IGticHMiLAotCQkiOTYga2JwcyIsCi0JCSIxMjgga2JwcyIsCi0JCSIxNjAga2JwcyIsCi0JCSIxOTIga2JwcyIsCi0JCSIyMjQga2JwcyIsCi0JCSIyNTYga2JwcyIsCi0JCSIyODgga2JwcyIsCi0JCSIzMjAga2JwcyIsCi0JCSIzNTIga2JwcyIsCi0JCSIzODQga2JwcyIsCi0JCSI0MTYga2JwcyIsCi0JCSI0NDgga2JwcyIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2wyX2JpdHJhdGVbXSA9IHsKLQkJIjMyIGticHMiLAotCQkiNDgga2JwcyIsCi0JCSI1NiBrYnBzIiwKLQkJIjY0IGticHMiLAotCQkiODAga2JwcyIsCi0JCSI5NiBrYnBzIiwKLQkJIjExMiBrYnBzIiwKLQkJIjEyOCBrYnBzIiwKLQkJIjE2MCBrYnBzIiwKLQkJIjE5MiBrYnBzIiwKLQkJIjIyNCBrYnBzIiwKLQkJIjI1NiBrYnBzIiwKLQkJIjMyMCBrYnBzIiwKLQkJIjM4NCBrYnBzIiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbDNfYml0cmF0ZVtdID0gewotCQkiMzIga2JwcyIsCi0JCSI0MCBrYnBzIiwKLQkJIjQ4IGticHMiLAotCQkiNTYga2JwcyIsCi0JCSI2NCBrYnBzIiwKLQkJIjgwIGticHMiLAotCQkiOTYga2JwcyIsCi0JCSIxMTIga2JwcyIsCi0JCSIxMjgga2JwcyIsCi0JCSIxNjAga2JwcyIsCi0JCSIxOTIga2JwcyIsCi0JCSIyMjQga2JwcyIsCi0JCSIyNTYga2JwcyIsCi0JCSIzMjAga2JwcyIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2FjM19iaXRyYXRlW10gPSB7Ci0JCSIzMiBrYnBzIiwKLQkJIjQwIGticHMiLAotCQkiNDgga2JwcyIsCi0JCSI1NiBrYnBzIiwKLQkJIjY0IGticHMiLAotCQkiODAga2JwcyIsCi0JCSI5NiBrYnBzIiwKLQkJIjExMiBrYnBzIiwKLQkJIjEyOCBrYnBzIiwKLQkJIjE2MCBrYnBzIiwKLQkJIjE5MiBrYnBzIiwKLQkJIjIyNCBrYnBzIiwKLQkJIjI1NiBrYnBzIiwKLQkJIjMyMCBrYnBzIiwKLQkJIjM4NCBrYnBzIiwKLQkJIjQ0OCBrYnBzIiwKLQkJIjUxMiBrYnBzIiwKLQkJIjU3NiBrYnBzIiwKLQkJIjY0MCBrYnBzIiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbW9kZVtdID0gewotCQkiU3RlcmVvIiwKLQkJIkpvaW50IFN0ZXJlbyIsCi0JCSJEdWFsIiwKLQkJIk1vbm8iLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbltdID0gewotCQkiQm91bmQgNCIsCi0JCSJCb3VuZCA4IiwKLQkJIkJvdW5kIDEyIiwKLQkJIkJvdW5kIDE2IiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fZW1waGFzaXNbXSA9IHsKLQkJIk5vIEVtcGhhc2lzIiwKLQkJIjUwLzE1IHVzIiwKLQkJIkNDSVRUIEoxNyIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2NyY1tdID0gewotCQkiTm8gQ1JDIiwKLQkJIjE2LWJpdCBDUkMiLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ192aWRlb19lbmNvZGluZ1tdID0gewotCQkiTVBFRy0xIiwKLQkJIk1QRUctMiIsCi0JCSJNUEVHLTQgQVZDIiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fYXNwZWN0W10gPSB7Ci0JCSIxeDEiLAotCQkiNHgzIiwKLQkJIjE2eDkiLAotCQkiMi4yMXgxIiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fYml0cmF0ZV9tb2RlW10gPSB7Ci0JCSJWYXJpYWJsZSBCaXRyYXRlIiwKLQkJIkNvbnN0YW50IEJpdHJhdGUiLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19zdHJlYW1fdHlwZVtdID0gewotCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKLQkJIk1QRUctMiBUcmFuc3BvcnQgU3RyZWFtIiwKLQkJIk1QRUctMSBTeXN0ZW0gU3RyZWFtIiwKLQkJIk1QRUctMiBEVkQtY29tcGF0aWJsZSBTdHJlYW0iLAotCQkiTVBFRy0xIFZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCi0JCSJNUEVHLTIgU1ZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3N0cmVhbV92YmlfZm10W10gPSB7Ci0JCSJObyBWQkkiLAotCQkiUHJpdmF0ZSBwYWNrZXQsIElWVFYgZm9ybWF0IiwKLQkJTlVMTAotCX07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeVtdID0gewotCQkiRGlzYWJsZWQiLAotCQkiNTAgSHoiLAotCQkiNjAgSHoiLAotCQlOVUxMCi0JfTsKLQlzdGF0aWMgY29uc3QgY2hhciAqY2FtZXJhX2V4cG9zdXJlX2F1dG9bXSA9IHsKLQkJIkF1dG8gTW9kZSIsCi0JCSJNYW51YWwgTW9kZSIsCi0JCSJTaHV0dGVyIFByaW9yaXR5IE1vZGUiLAotCQkiQXBlcnR1cmUgUHJpb3JpdHkgTW9kZSIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcmZ4W10gPSB7Ci0JCSJOb25lIiwKLQkJIkJsYWNrICYgV2hpdGUiLAotCQkiU2VwaWEiLAotCQkiTmVnYXRpdmUiLAotCQkiRW1ib3NzIiwKLQkJIlNrZXRjaCIsCi0JCSJTa3kgYmx1ZSIsCi0JCSJHcmFzcyBncmVlbiIsCi0JCSJTa2luIHdoaXRlbiIsCi0JCSJWaXZpZCIsCi0JCU5VTEwKLQl9OwotCXN0YXRpYyBjb25zdCBjaGFyICp0dW5lX3ByZWVtcGhhc2lzW10gPSB7Ci0JCSJObyBwcmVlbXBoYXNpcyIsCi0JCSI1MCB1c2Vjb25kcyIsCi0JCSI3NSB1c2Vjb25kcyIsCi0JCU5VTEwsCi0JfTsKLQotCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6Ci0JCQlyZXR1cm4gbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6Ci0JCQlyZXR1cm4gbXBlZ19hdWRpb19lbmNvZGluZzsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEU6Ci0JCQlyZXR1cm4gbXBlZ19hdWRpb19sMV9iaXRyYXRlOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJCXJldHVybiBtcGVnX2F1ZGlvX2wyX2JpdHJhdGU7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgotCQkJcmV0dXJuIG1wZWdfYXVkaW9fbDNfYml0cmF0ZTsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgotCQkJcmV0dXJuIG1wZWdfYXVkaW9fYWMzX2JpdHJhdGU7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgotCQkJcmV0dXJuIG1wZWdfYXVkaW9fbW9kZTsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgotCQkJcmV0dXJuIG1wZWdfYXVkaW9fbW9kZV9leHRlbnNpb247Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKLQkJCXJldHVybiBtcGVnX2F1ZGlvX2VtcGhhc2lzOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgotCQkJcmV0dXJuIG1wZWdfYXVkaW9fY3JjOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6Ci0JCQlyZXR1cm4gbXBlZ192aWRlb19lbmNvZGluZzsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoKLQkJCXJldHVybiBtcGVnX3ZpZGVvX2FzcGVjdDsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKLQkJCXJldHVybiBtcGVnX3ZpZGVvX2JpdHJhdGVfbW9kZTsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgotCQkJcmV0dXJuIG1wZWdfc3RyZWFtX3R5cGU7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKLQkJCXJldHVybiBtcGVnX3N0cmVhbV92YmlfZm10OwotCQljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgotCQkJcmV0dXJuIGNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeTsKLQkJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgotCQkJcmV0dXJuIGNhbWVyYV9leHBvc3VyZV9hdXRvOwotCQljYXNlIFY0TDJfQ0lEX0NPTE9SRlg6Ci0JCQlyZXR1cm4gY29sb3JmeDsKLQkJY2FzZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTOgotCQkJcmV0dXJuIHR1bmVfcHJlZW1waGFzaXM7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gTlVMTDsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nZXRfbWVudSk7Ci0KLS8qIFJldHVybiB0aGUgY29udHJvbCBuYW1lLiAqLwotY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCkKLXsKLQlzd2l0Y2ggKGlkKSB7Ci0JLyogVVNFUiBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfVVNFUl9DTEFTUzogCQlyZXR1cm4gIlVzZXIgQ29udHJvbHMiOwotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCQlyZXR1cm4gIkJyaWdodG5lc3MiOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IAkJcmV0dXJuICJDb250cmFzdCI7Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJCXJldHVybiAiU2F0dXJhdGlvbiI7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6IAkJCXJldHVybiAiSHVlIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCQlyZXR1cm4gIlZvbHVtZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJCXJldHVybiAiQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJCXJldHVybiAiQmFzcyI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAkJcmV0dXJuICJUcmVibGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAkJcmV0dXJuICJMb3VkbmVzcyI7Ci0JY2FzZSBWNEwyX0NJRF9CTEFDS19MRVZFTDoJCXJldHVybiAiQmxhY2sgTGV2ZWwiOwotCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOglyZXR1cm4gIldoaXRlIEJhbGFuY2UsIEF1dG9tYXRpYyI7Ci0JY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOgkJcmV0dXJuICJEbyBXaGl0ZSBCYWxhbmNlIjsKLQljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgkJcmV0dXJuICJSZWQgQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CQlyZXR1cm4gIkJsdWUgQmFsYW5jZSI7Ci0JY2FzZSBWNEwyX0NJRF9HQU1NQToJCQlyZXR1cm4gIkdhbW1hIjsKLQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgkJCXJldHVybiAiRXhwb3N1cmUiOwotCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CQkJcmV0dXJuICJHYWluLCBBdXRvbWF0aWMiOwotCWNhc2UgVjRMMl9DSURfR0FJTjoJCQlyZXR1cm4gIkdhaW4iOwotCWNhc2UgVjRMMl9DSURfSEZMSVA6CQkJcmV0dXJuICJIb3Jpem9udGFsIEZsaXAiOwotCWNhc2UgVjRMMl9DSURfVkZMSVA6CQkJcmV0dXJuICJWZXJ0aWNhbCBGbGlwIjsKLQljYXNlIFY0TDJfQ0lEX0hDRU5URVI6CQkJcmV0dXJuICJIb3Jpem9udGFsIENlbnRlciI7Ci0JY2FzZSBWNEwyX0NJRF9WQ0VOVEVSOgkJCXJldHVybiAiVmVydGljYWwgQ2VudGVyIjsKLQljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOglyZXR1cm4gIlBvd2VyIExpbmUgRnJlcXVlbmN5IjsKLQljYXNlIFY0TDJfQ0lEX0hVRV9BVVRPOgkJCXJldHVybiAiSHVlLCBBdXRvbWF0aWMiOwotCWNhc2UgVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRTogcmV0dXJuICJXaGl0ZSBCYWxhbmNlIFRlbXBlcmF0dXJlIjsKLQljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoJCXJldHVybiAiU2hhcnBuZXNzIjsKLQljYXNlIFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT046CXJldHVybiAiQmFja2xpZ2h0IENvbXBlbnNhdGlvbiI7Ci0JY2FzZSBWNEwyX0NJRF9DSFJPTUFfQUdDOgkJcmV0dXJuICJDaHJvbWEgQUdDIjsKLQljYXNlIFY0TDJfQ0lEX0NIUk9NQV9HQUlOOgkJcmV0dXJuICJDaHJvbWEgR2FpbiI7Ci0JY2FzZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVI6CQlyZXR1cm4gIkNvbG9yIEtpbGxlciI7Ci0JY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgkJCXJldHVybiAiQ29sb3IgRWZmZWN0cyI7Ci0JY2FzZSBWNEwyX0NJRF9BVVRPQlJJR0hUTkVTUzoJCXJldHVybiAiQnJpZ2h0bmVzcywgQXV0b21hdGljIjsKLQljYXNlIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVI6CQlyZXR1cm4gIkJhbmQtU3RvcCBGaWx0ZXIiOwotCWNhc2UgVjRMMl9DSURfUk9UQVRFOgkJCXJldHVybiAiUm90YXRlIjsKLQljYXNlIFY0TDJfQ0lEX0JHX0NPTE9SOgkJCXJldHVybiAiQmFja2dyb3VuZCBDb2xvciI7Ci0KLQkvKiBNUEVHIGNvbnRyb2xzICovCi0JY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOiAJCXJldHVybiAiTVBFRyBFbmNvZGVyIENvbnRyb2xzIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUTogcmV0dXJuICJBdWRpbyBTYW1wbGluZyBGcmVxdWVuY3kiOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzogCXJldHVybiAiQXVkaW8gRW5jb2RpbmciOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOiAJcmV0dXJuICJBdWRpbyBMYXllciBJIEJpdHJhdGUiOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOiAJcmV0dXJuICJBdWRpbyBMYXllciBJSSBCaXRyYXRlIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURTogCXJldHVybiAiQXVkaW8gTGF5ZXIgSUlJIEJpdHJhdGUiOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURTogCXJldHVybiAiQXVkaW8gQUFDIEJpdHJhdGUiOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURTogCXJldHVybiAiQXVkaW8gQUMtMyBCaXRyYXRlIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERTogCQlyZXR1cm4gIkF1ZGlvIFN0ZXJlbyBNb2RlIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT046IHJldHVybiAiQXVkaW8gU3RlcmVvIE1vZGUgRXh0ZW5zaW9uIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6IAlyZXR1cm4gIkF1ZGlvIEVtcGhhc2lzIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOiAJCXJldHVybiAiQXVkaW8gQ1JDIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURTogCQlyZXR1cm4gIkF1ZGlvIE11dGUiOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzogCXJldHVybiAiVmlkZW8gRW5jb2RpbmciOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6IAlyZXR1cm4gIlZpZGVvIEFzcGVjdCI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAJcmV0dXJuICJWaWRlbyBCIEZyYW1lcyI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOiAJcmV0dXJuICJWaWRlbyBHT1AgU2l6ZSI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOiAJcmV0dXJuICJWaWRlbyBHT1AgQ2xvc3VyZSI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOiAJcmV0dXJuICJWaWRlbyBQdWxsZG93biI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERTogCXJldHVybiAiVmlkZW8gQml0cmF0ZSBNb2RlIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURTogCXJldHVybiAiVmlkZW8gQml0cmF0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzogCXJldHVybiAiVmlkZW8gUGVhayBCaXRyYXRlIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjogcmV0dXJuICJWaWRlbyBUZW1wb3JhbCBEZWNpbWF0aW9uIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURTogCQlyZXR1cm4gIlZpZGVvIE11dGUiOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjoJcmV0dXJuICJWaWRlbyBNdXRlIFlVViI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOiAJcmV0dXJuICJTdHJlYW0gVHlwZSI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOiAJcmV0dXJuICJTdHJlYW0gUE1UIFByb2dyYW0gSUQiOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOiAJcmV0dXJuICJTdHJlYW0gQXVkaW8gUHJvZ3JhbSBJRCI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86IAlyZXR1cm4gIlN0cmVhbSBWaWRlbyBQcm9ncmFtIElEIjsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6IAlyZXR1cm4gIlN0cmVhbSBQQ1IgUHJvZ3JhbSBJRCI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU86IHJldHVybiAiU3RyZWFtIFBFUyBBdWRpbyBJRCI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU86IHJldHVybiAiU3RyZWFtIFBFUyBWaWRlbyBJRCI7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOglyZXR1cm4gIlN0cmVhbSBWQkkgRm9ybWF0IjsKLQotCS8qIENBTUVSQSBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgkJcmV0dXJuICJDYW1lcmEgQ29udHJvbHMiOwotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoJCXJldHVybiAiQXV0byBFeHBvc3VyZSI7Ci0JY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURToJcmV0dXJuICJFeHBvc3VyZSBUaW1lLCBBYnNvbHV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOglyZXR1cm4gIkV4cG9zdXJlLCBEeW5hbWljIEZyYW1lcmF0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CQlyZXR1cm4gIlBhbiwgUmVsYXRpdmUiOwotCWNhc2UgVjRMMl9DSURfVElMVF9SRUxBVElWRToJCXJldHVybiAiVGlsdCwgUmVsYXRpdmUiOwotCWNhc2UgVjRMMl9DSURfUEFOX1JFU0VUOgkJcmV0dXJuICJQYW4sIFJlc2V0IjsKLQljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CQlyZXR1cm4gIlRpbHQsIFJlc2V0IjsKLQljYXNlIFY0TDJfQ0lEX1BBTl9BQlNPTFVURToJCXJldHVybiAiUGFuLCBBYnNvbHV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9USUxUX0FCU09MVVRFOgkJcmV0dXJuICJUaWx0LCBBYnNvbHV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURToJCXJldHVybiAiRm9jdXMsIEFic29sdXRlIjsKLQljYXNlIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFOgkJcmV0dXJuICJGb2N1cywgUmVsYXRpdmUiOwotCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoJCXJldHVybiAiRm9jdXMsIEF1dG9tYXRpYyI7Ci0JY2FzZSBWNEwyX0NJRF9JUklTX0FCU09MVVRFOgkJcmV0dXJuICJJcmlzLCBBYnNvbHV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9JUklTX1JFTEFUSVZFOgkJcmV0dXJuICJJcmlzLCBSZWxhdGl2ZSI7Ci0JY2FzZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFOgkJcmV0dXJuICJab29tLCBBYnNvbHV0ZSI7Ci0JY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgkJcmV0dXJuICJab29tLCBSZWxhdGl2ZSI7Ci0JY2FzZSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM6CQlyZXR1cm4gIlpvb20sIENvbnRpbnVvdXMiOwotCWNhc2UgVjRMMl9DSURfUFJJVkFDWToJCQlyZXR1cm4gIlByaXZhY3kiOwotCi0JLyogRk0gUmFkaW8gTW9kdWxhdG9yIGNvbnRyb2wgKi8KLQljYXNlIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTOgkJcmV0dXJuICJGTSBSYWRpbyBNb2R1bGF0b3IgQ29udHJvbHMiOwotCWNhc2UgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTjoJCXJldHVybiAiUkRTIFNpZ25hbCBEZXZpYXRpb24iOwotCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BJOgkJcmV0dXJuICJSRFMgUHJvZ3JhbSBJRCI7Ci0JY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFRZOgkJcmV0dXJuICJSRFMgUHJvZ3JhbSBUeXBlIjsKLQljYXNlIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FOgkJcmV0dXJuICJSRFMgUFMgTmFtZSI7Ci0JY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoJcmV0dXJuICJSRFMgUmFkaW8gVGV4dCI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQ6CXJldHVybiAiQXVkaW8gTGltaXRlciBGZWF0dXJlIEVuYWJsZWQiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUU6IHJldHVybiAiQXVkaW8gTGltaXRlciBSZWxlYXNlIFRpbWUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT046CXJldHVybiAiQXVkaW8gTGltaXRlciBEZXZpYXRpb24iOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRDogcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBGZWF0dXJlIEVuYWJsZWQiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTjoJcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBHYWluIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRDogcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBUaHJlc2hvbGQiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU6IHJldHVybiAiQXVkaW8gQ29tcHJlc3Npb24gQXR0YWNrIFRpbWUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FOiByZXR1cm4gIkF1ZGlvIENvbXByZXNzaW9uIFJlbGVhc2UgVGltZSI7Ci0JY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0VOQUJMRUQ6CXJldHVybiAiUGlsb3QgVG9uZSBGZWF0dXJlIEVuYWJsZWQiOwotCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT046CXJldHVybiAiUGlsb3QgVG9uZSBEZXZpYXRpb24iOwotCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k6CXJldHVybiAiUGlsb3QgVG9uZSBGcmVxdWVuY3kiOwotCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoJcmV0dXJuICJQcmUtZW1waGFzaXMgc2V0dGluZ3MiOwotCWNhc2UgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTDoJCXJldHVybiAiVHVuZSBQb3dlciBMZXZlbCI7Ci0JY2FzZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SOglyZXR1cm4gIlR1bmUgQW50ZW5uYSBDYXBhY2l0b3IiOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfZ2V0X25hbWUpOwotCiAvKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnljdHJsICovCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwgczMyIG1pbiwgczMyIG1heCwgczMyIHN0ZXAsIHMzMiBkZWYpCiB7Ci0JY29uc3QgY2hhciAqbmFtZSA9IHY0bDJfY3RybF9nZXRfbmFtZShxY3RybC0+aWQpOworCWNvbnN0IGNoYXIgKm5hbWU7CiAKLQlxY3RybC0+ZmxhZ3MgPSAwOworCXY0bDJfY3RybF9maWxsKHFjdHJsLT5pZCwgJm5hbWUsICZxY3RybC0+dHlwZSwKKwkJICAgICAgICZtaW4sICZtYXgsICZzdGVwLCAmZGVmLCAmcWN0cmwtPmZsYWdzKTsKKwogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoIChxY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoKLQljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgotCWNhc2UgVjRMMl9DSURfSEZMSVA6Ci0JY2FzZSBWNEwyX0NJRF9WRkxJUDoKLQljYXNlIFY0TDJfQ0lEX0hVRV9BVVRPOgotCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKLQljYXNlIFY0TDJfQ0lEX0NPTE9SX0tJTExFUjoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOgotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWToKLQljYXNlIFY0TDJfQ0lEX0ZPQ1VTX0FVVE86Ci0JY2FzZSBWNEwyX0NJRF9QUklWQUNZOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRDoKLQljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRU5BQkxFRDoKLQkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOwotCQltaW4gPSAwOwotCQltYXggPSBzdGVwID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9QQU5fUkVTRVQ6Ci0JY2FzZSBWNEwyX0NJRF9USUxUX1JFU0VUOgotCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjsKLQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFk7Ci0JCW1pbiA9IG1heCA9IHN0ZXAgPSBkZWYgPSAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOgotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKLQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86Ci0JY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgotCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKLQkJcWN0cmwtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOwotCQlzdGVwID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRToKLQljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgotCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX1NUUklORzsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOgotCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgotCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzoKLQljYXNlIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTOgotCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1M7Ci0JCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7Ci0JCW1pbiA9IG1heCA9IHN0ZXAgPSBkZWYgPSAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0JHX0NPTE9SOgotCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7Ci0JCXN0ZXAgPSAxOwotCQltaW4gPSAwOwotCQkvKiBNYXggaXMgY2FsY3VsYXRlZCBhcyBSR0I4ODggdGhhdCBpcyAyXjI0ICovCi0JCW1heCA9IDB4RkZGRkZGOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7Ci0JCWJyZWFrOwotCX0KLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19VUERBVEU7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCWNhc2UgVjRMMl9DSURfSFVFOgotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6Ci0JY2FzZSBWNEwyX0NJRF9HQU1NQToKLQljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKLQljYXNlIFY0TDJfQ0lEX0NIUk9NQV9HQUlOOgotCWNhc2UgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTjoKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfUkVMRUFTRV9USU1FOgotCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT046Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9HQUlOOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fVEhSRVNIT0xEOgotCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUU6Ci0JY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTjoKLQljYXNlIFY0TDJfQ0lEX1BJTE9UX1RPTkVfRlJFUVVFTkNZOgotCWNhc2UgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTDoKLQljYXNlIFY0TDJfQ0lEX1RVTkVfQU5URU5OQV9DQVBBQ0lUT1I6Ci0JCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19TTElERVI7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfUEFOX1JFTEFUSVZFOgotCWNhc2UgVjRMMl9DSURfVElMVF9SRUxBVElWRToKLQljYXNlIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFOgotCWNhc2UgVjRMMl9DSURfSVJJU19SRUxBVElWRToKLQljYXNlIFY0TDJfQ0lEX1pPT01fUkVMQVRJVkU6Ci0JCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOwotCQlicmVhazsKLQl9CiAJcWN0cmwtPm1pbmltdW0gPSBtaW47CiAJcWN0cmwtPm1heGltdW0gPSBtYXg7CiAJcWN0cmwtPnN0ZXAgPSBzdGVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWN0cmxzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY3RybHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGMxYTUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWN0cmxzLmMKQEAgLTAsMCArMSwxODUxIEBACisvKgorICAgIFY0TDIgY29udHJvbHMgZnJhbWV3b3JrIGltcGxlbWVudGF0aW9uLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDEwICBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKworLyogSW50ZXJuYWwgdGVtcG9yYXJ5IGhlbHBlciBzdHJ1Y3QsIG9uZSBmb3IgZWFjaCB2NGwyX2V4dF9jb250cm9sICovCitzdHJ1Y3QgY3RybF9oZWxwZXIgeworCS8qIFRoZSBjb250cm9sIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHY0bDJfZXh0X2NvbnRyb2wgSUQgZmllbGQuICovCisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwkvKiBVc2VkIGludGVybmFsbHkgdG8gbWFyayB3aGV0aGVyIHRoaXMgY29udHJvbCB3YXMgYWxyZWFkeQorCSAgIHByb2Nlc3NlZC4gKi8KKwlib29sIGhhbmRsZWQ7Cit9OworCisvKiBSZXR1cm5zIE5VTEwgb3IgYSBjaGFyYWN0ZXIgcG9pbnRlciBhcnJheSBjb250YWluaW5nIHRoZSBtZW51IGZvcgorICAgdGhlIGdpdmVuIGNvbnRyb2wgSUQuIFRoZSBwb2ludGVyIGFycmF5IGVuZHMgd2l0aCBhIE5VTEwgcG9pbnRlci4KKyAgIEFuIGVtcHR5IHN0cmluZyBzaWduaWZpZXMgYSBtZW51IGVudHJ5IHRoYXQgaXMgaW52YWxpZC4gVGhpcyBhbGxvd3MKKyAgIGRyaXZlcnMgdG8gZGlzYWJsZSBjZXJ0YWluIG9wdGlvbnMgaWYgaXQgaXMgbm90IHN1cHBvcnRlZC4gKi8KK2NvbnN0IGNoYXIgKip2NGwyX2N0cmxfZ2V0X21lbnUodTMyIGlkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX3NhbXBsaW5nX2ZyZXFbXSA9IHsKKwkJIjQ0LjEga0h6IiwKKwkJIjQ4IGtIeiIsCisJCSIzMiBrSHoiLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19lbmNvZGluZ1tdID0geworCQkiTVBFRy0xLzIgTGF5ZXIgSSIsCisJCSJNUEVHLTEvMiBMYXllciBJSSIsCisJCSJNUEVHLTEvMiBMYXllciBJSUkiLAorCQkiTVBFRy0yLzQgQUFDIiwKKwkJIkFDLTMiLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19sMV9iaXRyYXRlW10gPSB7CisJCSIzMiBrYnBzIiwKKwkJIjY0IGticHMiLAorCQkiOTYga2JwcyIsCisJCSIxMjgga2JwcyIsCisJCSIxNjAga2JwcyIsCisJCSIxOTIga2JwcyIsCisJCSIyMjQga2JwcyIsCisJCSIyNTYga2JwcyIsCisJCSIyODgga2JwcyIsCisJCSIzMjAga2JwcyIsCisJCSIzNTIga2JwcyIsCisJCSIzODQga2JwcyIsCisJCSI0MTYga2JwcyIsCisJCSI0NDgga2JwcyIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2wyX2JpdHJhdGVbXSA9IHsKKwkJIjMyIGticHMiLAorCQkiNDgga2JwcyIsCisJCSI1NiBrYnBzIiwKKwkJIjY0IGticHMiLAorCQkiODAga2JwcyIsCisJCSI5NiBrYnBzIiwKKwkJIjExMiBrYnBzIiwKKwkJIjEyOCBrYnBzIiwKKwkJIjE2MCBrYnBzIiwKKwkJIjE5MiBrYnBzIiwKKwkJIjIyNCBrYnBzIiwKKwkJIjI1NiBrYnBzIiwKKwkJIjMyMCBrYnBzIiwKKwkJIjM4NCBrYnBzIiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbDNfYml0cmF0ZVtdID0geworCQkiMzIga2JwcyIsCisJCSI0MCBrYnBzIiwKKwkJIjQ4IGticHMiLAorCQkiNTYga2JwcyIsCisJCSI2NCBrYnBzIiwKKwkJIjgwIGticHMiLAorCQkiOTYga2JwcyIsCisJCSIxMTIga2JwcyIsCisJCSIxMjgga2JwcyIsCisJCSIxNjAga2JwcyIsCisJCSIxOTIga2JwcyIsCisJCSIyMjQga2JwcyIsCisJCSIyNTYga2JwcyIsCisJCSIzMjAga2JwcyIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2FjM19iaXRyYXRlW10gPSB7CisJCSIzMiBrYnBzIiwKKwkJIjQwIGticHMiLAorCQkiNDgga2JwcyIsCisJCSI1NiBrYnBzIiwKKwkJIjY0IGticHMiLAorCQkiODAga2JwcyIsCisJCSI5NiBrYnBzIiwKKwkJIjExMiBrYnBzIiwKKwkJIjEyOCBrYnBzIiwKKwkJIjE2MCBrYnBzIiwKKwkJIjE5MiBrYnBzIiwKKwkJIjIyNCBrYnBzIiwKKwkJIjI1NiBrYnBzIiwKKwkJIjMyMCBrYnBzIiwKKwkJIjM4NCBrYnBzIiwKKwkJIjQ0OCBrYnBzIiwKKwkJIjUxMiBrYnBzIiwKKwkJIjU3NiBrYnBzIiwKKwkJIjY0MCBrYnBzIiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fbW9kZVtdID0geworCQkiU3RlcmVvIiwKKwkJIkpvaW50IFN0ZXJlbyIsCisJCSJEdWFsIiwKKwkJIk1vbm8iLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbltdID0geworCQkiQm91bmQgNCIsCisJCSJCb3VuZCA4IiwKKwkJIkJvdW5kIDEyIiwKKwkJIkJvdW5kIDE2IiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fZW1waGFzaXNbXSA9IHsKKwkJIk5vIEVtcGhhc2lzIiwKKwkJIjUwLzE1IHVzIiwKKwkJIkNDSVRUIEoxNyIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX2F1ZGlvX2NyY1tdID0geworCQkiTm8gQ1JDIiwKKwkJIjE2LWJpdCBDUkMiLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ192aWRlb19lbmNvZGluZ1tdID0geworCQkiTVBFRy0xIiwKKwkJIk1QRUctMiIsCisJCSJNUEVHLTQgQVZDIiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fYXNwZWN0W10gPSB7CisJCSIxeDEiLAorCQkiNHgzIiwKKwkJIjE2eDkiLAorCQkiMi4yMXgxIiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfdmlkZW9fYml0cmF0ZV9tb2RlW10gPSB7CisJCSJWYXJpYWJsZSBCaXRyYXRlIiwKKwkJIkNvbnN0YW50IEJpdHJhdGUiLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqbXBlZ19zdHJlYW1fdHlwZVtdID0geworCQkiTVBFRy0yIFByb2dyYW0gU3RyZWFtIiwKKwkJIk1QRUctMiBUcmFuc3BvcnQgU3RyZWFtIiwKKwkJIk1QRUctMSBTeXN0ZW0gU3RyZWFtIiwKKwkJIk1QRUctMiBEVkQtY29tcGF0aWJsZSBTdHJlYW0iLAorCQkiTVBFRy0xIFZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCisJCSJNUEVHLTIgU1ZDRC1jb21wYXRpYmxlIFN0cmVhbSIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICptcGVnX3N0cmVhbV92YmlfZm10W10gPSB7CisJCSJObyBWQkkiLAorCQkiUHJpdmF0ZSBwYWNrZXQsIElWVFYgZm9ybWF0IiwKKwkJTlVMTAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNhbWVyYV9wb3dlcl9saW5lX2ZyZXF1ZW5jeVtdID0geworCQkiRGlzYWJsZWQiLAorCQkiNTAgSHoiLAorCQkiNjAgSHoiLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY2FtZXJhX2V4cG9zdXJlX2F1dG9bXSA9IHsKKwkJIkF1dG8gTW9kZSIsCisJCSJNYW51YWwgTW9kZSIsCisJCSJTaHV0dGVyIFByaW9yaXR5IE1vZGUiLAorCQkiQXBlcnR1cmUgUHJpb3JpdHkgTW9kZSIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcmZ4W10gPSB7CisJCSJOb25lIiwKKwkJIkJsYWNrICYgV2hpdGUiLAorCQkiU2VwaWEiLAorCQkiTmVnYXRpdmUiLAorCQkiRW1ib3NzIiwKKwkJIlNrZXRjaCIsCisJCSJTa3kgYmx1ZSIsCisJCSJHcmFzcyBncmVlbiIsCisJCSJTa2luIHdoaXRlbiIsCisJCSJWaXZpZCIsCisJCU5VTEwKKwl9OworCXN0YXRpYyBjb25zdCBjaGFyICp0dW5lX3ByZWVtcGhhc2lzW10gPSB7CisJCSJObyBwcmVlbXBoYXNpcyIsCisJCSI1MCB1c2Vjb25kcyIsCisJCSI3NSB1c2Vjb25kcyIsCisJCU5VTEwsCisJfTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJcmV0dXJuIG1wZWdfYXVkaW9fc2FtcGxpbmdfZnJlcTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCXJldHVybiBtcGVnX2F1ZGlvX2VuY29kaW5nOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgorCQlyZXR1cm4gbXBlZ19hdWRpb19sMV9iaXRyYXRlOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQlyZXR1cm4gbXBlZ19hdWRpb19sMl9iaXRyYXRlOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgorCQlyZXR1cm4gbXBlZ19hdWRpb19sM19iaXRyYXRlOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJcmV0dXJuIG1wZWdfYXVkaW9fYWMzX2JpdHJhdGU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CisJCXJldHVybiBtcGVnX2F1ZGlvX21vZGU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgorCQlyZXR1cm4gbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6CisJCXJldHVybiBtcGVnX2F1ZGlvX2VtcGhhc2lzOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19DUkM6CisJCXJldHVybiBtcGVnX2F1ZGlvX2NyYzsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiBtcGVnX3ZpZGVvX2VuY29kaW5nOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCXJldHVybiBtcGVnX3ZpZGVvX2FzcGVjdDsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlyZXR1cm4gbXBlZ192aWRlb19iaXRyYXRlX21vZGU7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlyZXR1cm4gbXBlZ19zdHJlYW1fdHlwZTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6CisJCXJldHVybiBtcGVnX3N0cmVhbV92YmlfZm10OworCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CisJCXJldHVybiBjYW1lcmFfcG93ZXJfbGluZV9mcmVxdWVuY3k7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPOgorCQlyZXR1cm4gY2FtZXJhX2V4cG9zdXJlX2F1dG87CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgorCQlyZXR1cm4gY29sb3JmeDsKKwljYXNlIFY0TDJfQ0lEX1RVTkVfUFJFRU1QSEFTSVM6CisJCXJldHVybiB0dW5lX3ByZWVtcGhhc2lzOworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2dldF9tZW51KTsKKworLyogUmV0dXJuIHRoZSBjb250cm9sIG5hbWUuICovCitjb25zdCBjaGFyICp2NGwyX2N0cmxfZ2V0X25hbWUodTMyIGlkKQoreworCXN3aXRjaCAoaWQpIHsKKwkvKiBVU0VSIGNvbnRyb2xzICovCisJLyogS2VlcCB0aGUgb3JkZXIgb2YgdGhlICdjYXNlJ3MgdGhlIHNhbWUgYXMgaW4gdmlkZW9kZXYyLmghICovCisJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOgkJcmV0dXJuICJVc2VyIENvbnRyb2xzIjsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CQlyZXR1cm4gIkJyaWdodG5lc3MiOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CQkJcmV0dXJuICJDb250cmFzdCI7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgkJcmV0dXJuICJTYXR1cmF0aW9uIjsKKwljYXNlIFY0TDJfQ0lEX0hVRToJCQlyZXR1cm4gIkh1ZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CQlyZXR1cm4gIlZvbHVtZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgkJcmV0dXJuICJCYWxhbmNlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CQlyZXR1cm4gIkJhc3MiOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgkJcmV0dXJuICJUcmVibGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToJCXJldHVybiAiTXV0ZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoJCXJldHVybiAiTG91ZG5lc3MiOworCWNhc2UgVjRMMl9DSURfQkxBQ0tfTEVWRUw6CQlyZXR1cm4gIkJsYWNrIExldmVsIjsKKwljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToJcmV0dXJuICJXaGl0ZSBCYWxhbmNlLCBBdXRvbWF0aWMiOworCWNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToJCXJldHVybiAiRG8gV2hpdGUgQmFsYW5jZSI7CisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToJCXJldHVybiAiUmVkIEJhbGFuY2UiOworCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgkJcmV0dXJuICJCbHVlIEJhbGFuY2UiOworCWNhc2UgVjRMMl9DSURfR0FNTUE6CQkJcmV0dXJuICJHYW1tYSI7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRToJCQlyZXR1cm4gIkV4cG9zdXJlIjsKKwljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgkJCXJldHVybiAiR2FpbiwgQXV0b21hdGljIjsKKwljYXNlIFY0TDJfQ0lEX0dBSU46CQkJcmV0dXJuICJHYWluIjsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgkJCXJldHVybiAiSG9yaXpvbnRhbCBGbGlwIjsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgkJCXJldHVybiAiVmVydGljYWwgRmxpcCI7CisJY2FzZSBWNEwyX0NJRF9IQ0VOVEVSOgkJCXJldHVybiAiSG9yaXpvbnRhbCBDZW50ZXIiOworCWNhc2UgVjRMMl9DSURfVkNFTlRFUjoJCQlyZXR1cm4gIlZlcnRpY2FsIENlbnRlciI7CisJY2FzZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWToJcmV0dXJuICJQb3dlciBMaW5lIEZyZXF1ZW5jeSI7CisJY2FzZSBWNEwyX0NJRF9IVUVfQVVUTzoJCQlyZXR1cm4gIkh1ZSwgQXV0b21hdGljIjsKKwljYXNlIFY0TDJfQ0lEX1dISVRFX0JBTEFOQ0VfVEVNUEVSQVRVUkU6IHJldHVybiAiV2hpdGUgQmFsYW5jZSBUZW1wZXJhdHVyZSI7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CQlyZXR1cm4gIlNoYXJwbmVzcyI7CisJY2FzZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OOglyZXR1cm4gIkJhY2tsaWdodCBDb21wZW5zYXRpb24iOworCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoJCXJldHVybiAiQ2hyb21hIEFHQyI7CisJY2FzZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVI6CQlyZXR1cm4gIkNvbG9yIEtpbGxlciI7CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgkJCXJldHVybiAiQ29sb3IgRWZmZWN0cyI7CisJY2FzZSBWNEwyX0NJRF9BVVRPQlJJR0hUTkVTUzoJCXJldHVybiAiQnJpZ2h0bmVzcywgQXV0b21hdGljIjsKKwljYXNlIFY0TDJfQ0lEX0JBTkRfU1RPUF9GSUxURVI6CQlyZXR1cm4gIkJhbmQtU3RvcCBGaWx0ZXIiOworCWNhc2UgVjRMMl9DSURfUk9UQVRFOgkJCXJldHVybiAiUm90YXRlIjsKKwljYXNlIFY0TDJfQ0lEX0JHX0NPTE9SOgkJCXJldHVybiAiQmFja2dyb3VuZCBDb2xvciI7CisJY2FzZSBWNEwyX0NJRF9DSFJPTUFfR0FJTjoJCXJldHVybiAiQ2hyb21hIEdhaW4iOworCisJLyogTVBFRyBjb250cm9scyAqLworCS8qIEtlZXAgdGhlIG9yZGVyIG9mIHRoZSAnY2FzZSdzIHRoZSBzYW1lIGFzIGluIHZpZGVvZGV2Mi5oISAqLworCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzoJCXJldHVybiAiTVBFRyBFbmNvZGVyIENvbnRyb2xzIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CQlyZXR1cm4gIlN0cmVhbSBUeXBlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ6CXJldHVybiAiU3RyZWFtIFBNVCBQcm9ncmFtIElEIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzoJcmV0dXJuICJTdHJlYW0gQXVkaW8gUHJvZ3JhbSBJRCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86CXJldHVybiAiU3RyZWFtIFZpZGVvIFByb2dyYW0gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoJcmV0dXJuICJTdHJlYW0gUENSIFByb2dyYW0gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPOiByZXR1cm4gIlN0cmVhbSBQRVMgQXVkaW8gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPOiByZXR1cm4gIlN0cmVhbSBQRVMgVmlkZW8gSUQiOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoJcmV0dXJuICJTdHJlYW0gVkJJIEZvcm1hdCI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6IHJldHVybiAiQXVkaW8gU2FtcGxpbmcgRnJlcXVlbmN5IjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CXJldHVybiAiQXVkaW8gRW5jb2RpbmciOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOglyZXR1cm4gIkF1ZGlvIExheWVyIEkgQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CXJldHVybiAiQXVkaW8gTGF5ZXIgSUkgQml0cmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEU6CXJldHVybiAiQXVkaW8gTGF5ZXIgSUlJIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgkJcmV0dXJuICJBdWRpbyBTdGVyZW8gTW9kZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOiByZXR1cm4gIkF1ZGlvIFN0ZXJlbyBNb2RlIEV4dGVuc2lvbiI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTOglyZXR1cm4gIkF1ZGlvIEVtcGhhc2lzIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgkJcmV0dXJuICJBdWRpbyBDUkMiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgkJcmV0dXJuICJBdWRpbyBNdXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUFDX0JJVFJBVEU6CXJldHVybiAiQXVkaW8gQUFDIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToJcmV0dXJuICJBdWRpbyBBQy0zIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoJcmV0dXJuICJWaWRlbyBFbmNvZGluZyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0FTUEVDVDoJcmV0dXJuICJWaWRlbyBBc3BlY3QiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoJcmV0dXJuICJWaWRlbyBCIEZyYW1lcyI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOglyZXR1cm4gIlZpZGVvIEdPUCBTaXplIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CXJldHVybiAiVmlkZW8gR09QIENsb3N1cmUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjoJcmV0dXJuICJWaWRlbyBQdWxsZG93biI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToJcmV0dXJuICJWaWRlbyBCaXRyYXRlIE1vZGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOglyZXR1cm4gIlZpZGVvIEJpdHJhdGUiOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CXJldHVybiAiVmlkZW8gUGVhayBCaXRyYXRlIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjogcmV0dXJuICJWaWRlbyBUZW1wb3JhbCBEZWNpbWF0aW9uIjsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToJCXJldHVybiAiVmlkZW8gTXV0ZSI7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWOglyZXR1cm4gIlZpZGVvIE11dGUgWVVWIjsKKworCS8qIENBTUVSQSBjb250cm9scyAqLworCS8qIEtlZXAgdGhlIG9yZGVyIG9mIHRoZSAnY2FzZSdzIHRoZSBzYW1lIGFzIGluIHZpZGVvZGV2Mi5oISAqLworCWNhc2UgVjRMMl9DSURfQ0FNRVJBX0NMQVNTOgkJcmV0dXJuICJDYW1lcmEgQ29udHJvbHMiOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoJCXJldHVybiAiQXV0byBFeHBvc3VyZSI7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURToJcmV0dXJuICJFeHBvc3VyZSBUaW1lLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOglyZXR1cm4gIkV4cG9zdXJlLCBEeW5hbWljIEZyYW1lcmF0ZSI7CisJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CQlyZXR1cm4gIlBhbiwgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfVElMVF9SRUxBVElWRToJCXJldHVybiAiVGlsdCwgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfUEFOX1JFU0VUOgkJcmV0dXJuICJQYW4sIFJlc2V0IjsKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CQlyZXR1cm4gIlRpbHQsIFJlc2V0IjsKKwljYXNlIFY0TDJfQ0lEX1BBTl9BQlNPTFVURToJCXJldHVybiAiUGFuLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9USUxUX0FCU09MVVRFOgkJcmV0dXJuICJUaWx0LCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURToJCXJldHVybiAiRm9jdXMsIEFic29sdXRlIjsKKwljYXNlIFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFOgkJcmV0dXJuICJGb2N1cywgUmVsYXRpdmUiOworCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoJCXJldHVybiAiRm9jdXMsIEF1dG9tYXRpYyI7CisJY2FzZSBWNEwyX0NJRF9aT09NX0FCU09MVVRFOgkJcmV0dXJuICJab29tLCBBYnNvbHV0ZSI7CisJY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgkJcmV0dXJuICJab29tLCBSZWxhdGl2ZSI7CisJY2FzZSBWNEwyX0NJRF9aT09NX0NPTlRJTlVPVVM6CQlyZXR1cm4gIlpvb20sIENvbnRpbnVvdXMiOworCWNhc2UgVjRMMl9DSURfUFJJVkFDWToJCQlyZXR1cm4gIlByaXZhY3kiOworCWNhc2UgVjRMMl9DSURfSVJJU19BQlNPTFVURToJCXJldHVybiAiSXJpcywgQWJzb2x1dGUiOworCWNhc2UgVjRMMl9DSURfSVJJU19SRUxBVElWRToJCXJldHVybiAiSXJpcywgUmVsYXRpdmUiOworCisJLyogRk0gUmFkaW8gTW9kdWxhdG9yIGNvbnRyb2wgKi8KKwkvKiBLZWVwIHRoZSBvcmRlciBvZiB0aGUgJ2Nhc2UncyB0aGUgc2FtZSBhcyBpbiB2aWRlb2RldjIuaCEgKi8KKwljYXNlIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTOgkJcmV0dXJuICJGTSBSYWRpbyBNb2R1bGF0b3IgQ29udHJvbHMiOworCWNhc2UgVjRMMl9DSURfUkRTX1RYX0RFVklBVElPTjoJCXJldHVybiAiUkRTIFNpZ25hbCBEZXZpYXRpb24iOworCWNhc2UgVjRMMl9DSURfUkRTX1RYX1BJOgkJcmV0dXJuICJSRFMgUHJvZ3JhbSBJRCI7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUFRZOgkJcmV0dXJuICJSRFMgUHJvZ3JhbSBUeXBlIjsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FOgkJcmV0dXJuICJSRFMgUFMgTmFtZSI7CisJY2FzZSBWNEwyX0NJRF9SRFNfVFhfUkFESU9fVEVYVDoJcmV0dXJuICJSRFMgUmFkaW8gVGV4dCI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQ6CXJldHVybiAiQXVkaW8gTGltaXRlciBGZWF0dXJlIEVuYWJsZWQiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9SRUxFQVNFX1RJTUU6IHJldHVybiAiQXVkaW8gTGltaXRlciBSZWxlYXNlIFRpbWUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTElNSVRFUl9ERVZJQVRJT046CXJldHVybiAiQXVkaW8gTGltaXRlciBEZXZpYXRpb24iOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fRU5BQkxFRDogcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBGZWF0dXJlIEVuYWJsZWQiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTjoJcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBHYWluIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRDogcmV0dXJuICJBdWRpbyBDb21wcmVzc2lvbiBUaHJlc2hvbGQiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fQVRUQUNLX1RJTUU6IHJldHVybiAiQXVkaW8gQ29tcHJlc3Npb24gQXR0YWNrIFRpbWUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FOiByZXR1cm4gIkF1ZGlvIENvbXByZXNzaW9uIFJlbGVhc2UgVGltZSI7CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0VOQUJMRUQ6CXJldHVybiAiUGlsb3QgVG9uZSBGZWF0dXJlIEVuYWJsZWQiOworCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT046CXJldHVybiAiUGlsb3QgVG9uZSBEZXZpYXRpb24iOworCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9GUkVRVUVOQ1k6CXJldHVybiAiUGlsb3QgVG9uZSBGcmVxdWVuY3kiOworCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoJCXJldHVybiAiUHJlLWVtcGhhc2lzIHNldHRpbmdzIjsKKwljYXNlIFY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUw6CQlyZXR1cm4gIlR1bmUgUG93ZXIgTGV2ZWwiOworCWNhc2UgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUjoJcmV0dXJuICJUdW5lIEFudGVubmEgQ2FwYWNpdG9yIjsKKworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2dldF9uYW1lKTsKKwordm9pZCB2NGwyX2N0cmxfZmlsbCh1MzIgaWQsIGNvbnN0IGNoYXIgKipuYW1lLCBlbnVtIHY0bDJfY3RybF90eXBlICp0eXBlLAorCQkgICAgczMyICptaW4sIHMzMiAqbWF4LCBzMzIgKnN0ZXAsIHMzMiAqZGVmLCB1MzIgKmZsYWdzKQoreworCSpuYW1lID0gdjRsMl9jdHJsX2dldF9uYW1lKGlkKTsKKwkqZmxhZ3MgPSAwOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgorCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9IRkxJUDoKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCWNhc2UgVjRMMl9DSURfSFVFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DSFJPTUFfQUdDOgorCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NVVRFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRToKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fUFVMTERPV046CisJY2FzZSBWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZOgorCWNhc2UgVjRMMl9DSURfRk9DVVNfQVVUTzoKKwljYXNlIFY0TDJfQ0lEX1BSSVZBQ1k6CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0VOQUJMRUQ6CisJY2FzZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEOgorCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEOgorCQkqdHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CisJCSptaW4gPSAwOworCQkqbWF4ID0gKnN0ZXAgPSAxOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRVNFVDoKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OOworCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJKm1pbiA9ICptYXggPSAqc3RlcCA9ICpkZWYgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZOgorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgorCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUzoKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOgorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgorCWNhc2UgVjRMMl9DSURfVFVORV9QUkVFTVBIQVNJUzoKKwkJKnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9NRU5VOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9QU19OQU1FOgorCWNhc2UgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQ6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfU1RSSU5HOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6CisJY2FzZSBWNEwyX0NJRF9DQU1FUkFfQ0xBU1M6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOgorCWNhc2UgVjRMMl9DSURfRk1fVFhfQ0xBU1M6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUzsKKwkJLyogWW91IGNhbiBuZWl0aGVyIHJlYWQgbm90IHdyaXRlIHRoZXNlICovCisJCSpmbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFkgfCBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZOworCQkqbWluID0gKm1heCA9ICpzdGVwID0gKmRlZiA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQkdfQ09MT1I6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJKnN0ZXAgPSAxOworCQkqbWluID0gMDsKKwkJLyogTWF4IGlzIGNhbGN1bGF0ZWQgYXMgUkdCODg4IHRoYXQgaXMgMl4yNCAqLworCQkqbWF4ID0gMHhGRkZGRkY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp0eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAoaWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfVVBEQVRFOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQkxVRV9CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfR0FNTUE6CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJY2FzZSBWNEwyX0NJRF9DSFJPTUFfR0FJTjoKKwljYXNlIFY0TDJfQ0lEX1JEU19UWF9ERVZJQVRJT046CisJY2FzZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xJTUlURVJfREVWSUFUSU9OOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fR0FJTjoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRDoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0FUVEFDS19USU1FOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQ09NUFJFU1NJT05fUkVMRUFTRV9USU1FOgorCWNhc2UgVjRMMl9DSURfUElMT1RfVE9ORV9ERVZJQVRJT046CisJY2FzZSBWNEwyX0NJRF9QSUxPVF9UT05FX0ZSRVFVRU5DWToKKwljYXNlIFY0TDJfQ0lEX1RVTkVfUE9XRVJfTEVWRUw6CisJY2FzZSBWNEwyX0NJRF9UVU5FX0FOVEVOTkFfQ0FQQUNJVE9SOgorCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRToKKwljYXNlIFY0TDJfQ0lEX0lSSVNfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgorCQkqZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJYnJlYWs7CisJfQorfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfZmlsbCk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29udHJvbCB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aAorICAgVklESU9DX0cvU19DVFJMLiAqLworc3RhdGljIGJvb2wgdHlwZV9pc19pbnQoY29uc3Qgc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX1NUUklORzoKKwkJLyogTm9wZSwgdGhlc2UgbmVlZCB2NGwyX2V4dF9jb250cm9sICovCisJCXJldHVybiBmYWxzZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gdHJ1ZTsKKwl9Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbjogY29weSB0aGUgY3VycmVudCBjb250cm9sIHZhbHVlIGJhY2sgdG8gdGhlIGNhbGxlciAqLworc3RhdGljIGludCBjdXJfdG9fdXNlcihzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqYywKKwkJICAgICAgIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJdTMyIGxlbjsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfU1RSSU5HOgorCQlsZW4gPSBzdHJsZW4oY3RybC0+Y3VyLnN0cmluZyk7CisJCWlmIChjLT5zaXplIDwgbGVuICsgMSkgeworCQkJYy0+c2l6ZSA9IGxlbiArIDE7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCQlyZXR1cm4gY29weV90b191c2VyKGMtPnN0cmluZywgY3RybC0+Y3VyLnN0cmluZywKKwkJCQkJCWxlbiArIDEpID8gLUVGQVVMVCA6IDA7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQ6CisJCWMtPnZhbHVlNjQgPSBjdHJsLT5jdXIudmFsNjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWMtPnZhbHVlID0gY3RybC0+Y3VyLnZhbDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb246IGNvcHkgdGhlIGNhbGxlci1wcm92aWRlciB2YWx1ZSBhcyB0aGUgbmV3IGNvbnRyb2wgdmFsdWUgKi8KK3N0YXRpYyBpbnQgdXNlcl90b19uZXcoc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmMsCisJCSAgICAgICBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCWludCByZXQ7CisJdTMyIHNpemU7CisKKwljdHJsLT5oYXNfbmV3ID0gMTsKKwlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJY3RybC0+dmFsNjQgPSBjLT52YWx1ZTY0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX1NUUklORzoKKwkJc2l6ZSA9IGMtPnNpemU7CisJCWlmIChzaXplID09IDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKHNpemUgPiBjdHJsLT5tYXhpbXVtICsgMSkKKwkJCXNpemUgPSBjdHJsLT5tYXhpbXVtICsgMTsKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoY3RybC0+c3RyaW5nLCBjLT5zdHJpbmcsIHNpemUpOworCQlpZiAoIXJldCkgeworCQkJY2hhciBsYXN0ID0gY3RybC0+c3RyaW5nW3NpemUgLSAxXTsKKworCQkJY3RybC0+c3RyaW5nW3NpemUgLSAxXSA9IDA7CisJCQkvKiBJZiB0aGUgc3RyaW5nIHdhcyBsb25nZXIgdGhhbiBjdHJsLT5tYXhpbXVtLAorCQkJICAgdGhlbiByZXR1cm4gYW4gZXJyb3IuICovCisJCQlpZiAoc3RybGVuKGN0cmwtPnN0cmluZykgPT0gY3RybC0+bWF4aW11bSAmJiBsYXN0KQorCQkJCXJldHVybiAtRVJBTkdFOworCQl9CisJCXJldHVybiByZXQgPyAtRUZBVUxUIDogMDsKKwlkZWZhdWx0OgorCQljdHJsLT52YWwgPSBjLT52YWx1ZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb246IGNvcHkgdGhlIG5ldyBjb250cm9sIHZhbHVlIGJhY2sgdG8gdGhlIGNhbGxlciAqLworc3RhdGljIGludCBuZXdfdG9fdXNlcihzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqYywKKwkJICAgICAgIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJdTMyIGxlbjsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfU1RSSU5HOgorCQlsZW4gPSBzdHJsZW4oY3RybC0+c3RyaW5nKTsKKwkJaWYgKGMtPnNpemUgPCBsZW4gKyAxKSB7CisJCQljLT5zaXplID0gY3RybC0+bWF4aW11bSArIDE7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCQlyZXR1cm4gY29weV90b191c2VyKGMtPnN0cmluZywgY3RybC0+c3RyaW5nLAorCQkJCQkJbGVuICsgMSkgPyAtRUZBVUxUIDogMDsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJYy0+dmFsdWU2NCA9IGN0cmwtPnZhbDY0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQljLT52YWx1ZSA9IGN0cmwtPnZhbDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKiBDb3B5IHRoZSBuZXcgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdmFsdWUuICovCitzdGF0aWMgdm9pZCBuZXdfdG9fY3VyKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuOworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfU1RSSU5HOgorCQkvKiBzdHJpbmdzIGFyZSBhbHdheXMgMC10ZXJtaW5hdGVkICovCisJCXN0cmNweShjdHJsLT5jdXIuc3RyaW5nLCBjdHJsLT5zdHJpbmcpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJY3RybC0+Y3VyLnZhbDY0ID0gY3RybC0+dmFsNjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN0cmwtPmN1ci52YWwgPSBjdHJsLT52YWw7CisJCWJyZWFrOworCX0KK30KKworLyogQ29weSB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgbmV3IHZhbHVlICovCitzdGF0aWMgdm9pZCBjdXJfdG9fbmV3KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuOworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfU1RSSU5HOgorCQkvKiBzdHJpbmdzIGFyZSBhbHdheXMgMC10ZXJtaW5hdGVkICovCisJCXN0cmNweShjdHJsLT5zdHJpbmcsIGN0cmwtPmN1ci5zdHJpbmcpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJY3RybC0+dmFsNjQgPSBjdHJsLT5jdXIudmFsNjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN0cmwtPnZhbCA9IGN0cmwtPmN1ci52YWw7CisJCWJyZWFrOworCX0KK30KKworLyogUmV0dXJuIG5vbi16ZXJvIGlmIG9uZSBvciBtb3JlIG9mIHRoZSBjb250cm9scyBpbiB0aGUgY2x1c3RlciBoYXMgYSBuZXcKKyAgIHZhbHVlIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IHZhbHVlLiAqLworc3RhdGljIGludCBjbHVzdGVyX2NoYW5nZWQoc3RydWN0IHY0bDJfY3RybCAqbWFzdGVyKQoreworCWludCBkaWZmID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7ICFkaWZmICYmIGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBtYXN0ZXItPmNsdXN0ZXJbaV07CisKKwkJaWYgKGN0cmwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKKwkJY2FzZSBWNEwyX0NUUkxfVFlQRV9CVVRUT046CisJCQkvKiBCdXR0b24gY29udHJvbHMgYXJlIGFsd2F5cyAnZGlmZmVyZW50JyAqLworCQkJcmV0dXJuIDE7CisJCWNhc2UgVjRMMl9DVFJMX1RZUEVfU1RSSU5HOgorCQkJLyogc3RyaW5ncyBhcmUgYWx3YXlzIDAtdGVybWluYXRlZCAqLworCQkJZGlmZiA9IHN0cmNtcChjdHJsLT5zdHJpbmcsIGN0cmwtPmN1ci5zdHJpbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0OgorCQkJZGlmZiA9IGN0cmwtPnZhbDY0ICE9IGN0cmwtPmN1ci52YWw2NDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGlmZiA9IGN0cmwtPnZhbCAhPSBjdHJsLT5jdXIudmFsOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGRpZmY7Cit9CisKKy8qIFZhbGlkYXRlIGEgbmV3IGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmV3KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJczMyIHZhbCA9IGN0cmwtPnZhbDsKKwljaGFyICpzID0gY3RybC0+c3RyaW5nOworCXUzMiBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJLyogUm91bmQgdG93YXJkcyB0aGUgY2xvc2VzdCBsZWdhbCB2YWx1ZSAqLworCQl2YWwgKz0gY3RybC0+c3RlcCAvIDI7CisJCWlmICh2YWwgPCBjdHJsLT5taW5pbXVtKQorCQkJdmFsID0gY3RybC0+bWluaW11bTsKKwkJaWYgKHZhbCA+IGN0cmwtPm1heGltdW0pCisJCQl2YWwgPSBjdHJsLT5tYXhpbXVtOworCQlvZmZzZXQgPSB2YWwgLSBjdHJsLT5taW5pbXVtOworCQlvZmZzZXQgPSBjdHJsLT5zdGVwICogKG9mZnNldCAvIGN0cmwtPnN0ZXApOworCQl2YWwgPSBjdHJsLT5taW5pbXVtICsgb2Zmc2V0OworCQljdHJsLT52YWwgPSB2YWw7CisJCXJldHVybiAwOworCisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgorCQljdHJsLT52YWwgPSAhIWN0cmwtPnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJCWlmICh2YWwgPCBjdHJsLT5taW5pbXVtIHx8IHZhbCA+IGN0cmwtPm1heGltdW0pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKGN0cmwtPnFtZW51W3ZhbF1bMF0gPT0gJ1wwJyB8fAorCQkgICAgKGN0cmwtPm1lbnVfc2tpcF9tYXNrICYgKDEgPDwgdmFsKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1M6CisJCWN0cmwtPnZhbDY0ID0gMDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NDoKKwkJcmV0dXJuIDA7CisKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX1NUUklORzoKKwkJbGVuID0gc3RybGVuKHMpOworCQlpZiAobGVuIDwgY3RybC0+bWluaW11bSkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAoKGxlbiAtIGN0cmwtPm1pbmltdW0pICUgY3RybC0+c3RlcCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGlubGluZSB1MzIgbm9kZTJpZChzdHJ1Y3QgbGlzdF9oZWFkICpub2RlKQoreworCXJldHVybiBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCB2NGwyX2N0cmxfcmVmLCBub2RlKS0+Y3RybC0+aWQ7Cit9CisKKy8qIFNldCB0aGUgaGFuZGxlcidzIGVycm9yIGNvZGUgaWYgaXQgd2Fzbid0IHNldCBlYXJsaWVyIGFscmVhZHkgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhhbmRsZXJfc2V0X2VycihzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgaW50IGVycikKK3sKKwlpZiAoaGRsLT5lcnJvciA9PSAwKQorCQloZGwtPmVycm9yID0gZXJyOworCXJldHVybiBlcnI7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGhhbmRsZXIgKi8KK2ludCB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJICAgdW5zaWduZWQgbnJfb2ZfY29udHJvbHNfaGludCkKK3sKKwltdXRleF9pbml0KCZoZGwtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZoZGwtPmN0cmxzKTsKKwlJTklUX0xJU1RfSEVBRCgmaGRsLT5jdHJsX3JlZnMpOworCWhkbC0+bnJfb2ZfYnVja2V0cyA9IDEgKyBucl9vZl9jb250cm9sc19oaW50IC8gODsKKwloZGwtPmJ1Y2tldHMgPSBremFsbG9jKHNpemVvZihoZGwtPmJ1Y2tldHNbMF0pICogaGRsLT5ucl9vZl9idWNrZXRzLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwloZGwtPmVycm9yID0gaGRsLT5idWNrZXRzID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIGhkbC0+ZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9oYW5kbGVyX2luaXQpOworCisvKiBGcmVlIGFsbCBjb250cm9scyBhbmQgY29udHJvbCByZWZzICovCit2b2lkIHY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwpCit7CisJc3RydWN0IHY0bDJfY3RybF9yZWYgKnJlZiwgKm5leHRfcmVmOworCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsICpuZXh0X2N0cmw7CisKKwlpZiAoaGRsID09IE5VTEwgfHwgaGRsLT5idWNrZXRzID09IE5VTEwpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJmhkbC0+bG9jayk7CisJLyogRnJlZSBhbGwgbm9kZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVmLCBuZXh0X3JlZiwgJmhkbC0+Y3RybF9yZWZzLCBub2RlKSB7CisJCWxpc3RfZGVsKCZyZWYtPm5vZGUpOworCQlrZnJlZShyZWYpOworCX0KKwkvKiBGcmVlIGFsbCBjb250cm9scyBvd25lZCBieSB0aGUgaGFuZGxlciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdHJsLCBuZXh0X2N0cmwsICZoZGwtPmN0cmxzLCBub2RlKSB7CisJCWxpc3RfZGVsKCZjdHJsLT5ub2RlKTsKKwkJa2ZyZWUoY3RybCk7CisJfQorCWtmcmVlKGhkbC0+YnVja2V0cyk7CisJaGRsLT5idWNrZXRzID0gTlVMTDsKKwloZGwtPmNhY2hlZCA9IE5VTEw7CisJaGRsLT5lcnJvciA9IDA7CisJbXV0ZXhfdW5sb2NrKCZoZGwtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKTsKKworLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBWNEwyX0NJRF9QUklWQVRFX0JBU0Ugc2hvdWxkIG5vIGxvbmdlcgorICAgYmUgdXNlZCBleGNlcHQgaW4gR19DVFJMLCBTX0NUUkwsIFFVRVJZQ1RSTCBhbmQgUVVFUllNRU5VIHdoZW4gZGVhbGluZworICAgd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBkbyBub3QgdXNlIHRoZSBORVhUX0NUUkwgZmxhZy4KKworICAgV2UganVzdCBmaW5kIHRoZSBuLXRoIHByaXZhdGUgdXNlciBjb250cm9sLiBJdCdzIE8oTiksIGJ1dCB0aGF0IHNob3VsZCBub3QKKyAgIGJlIGFuIGlzc3VlIGluIHRoaXMgcGFydGljdWxhciBjYXNlLiAqLworc3RhdGljIHN0cnVjdCB2NGwyX2N0cmxfcmVmICpmaW5kX3ByaXZhdGVfcmVmKAorCQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgdTMyIGlkKQoreworCXN0cnVjdCB2NGwyX2N0cmxfcmVmICpyZWY7CisKKwlpZCAtPSBWNEwyX0NJRF9QUklWQVRFX0JBU0U7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWYsICZoZGwtPmN0cmxfcmVmcywgbm9kZSkgeworCQkvKiBTZWFyY2ggZm9yIHByaXZhdGUgdXNlciBjb250cm9scyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGgKKwkJICAgVklESU9DX0cvU19DVFJMLiAqLworCQlpZiAoVjRMMl9DVFJMX0lEMkNMQVNTKHJlZi0+Y3RybC0+aWQpID09IFY0TDJfQ1RSTF9DTEFTU19VU0VSICYmCisJCSAgICBWNEwyX0NUUkxfRFJJVkVSX1BSSVYocmVmLT5jdHJsLT5pZCkpIHsKKwkJCWlmICghdHlwZV9pc19pbnQocmVmLT5jdHJsKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpZCA9PSAwKQorCQkJCXJldHVybiByZWY7CisJCQlpZC0tOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBGaW5kIGEgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBJRC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqZmluZF9yZWYoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHUzMiBpZCkKK3sKKwlzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqcmVmOworCWludCBidWNrZXQ7CisKKwlpZCAmPSBWNEwyX0NUUkxfSURfTUFTSzsKKworCS8qIE9sZC1zdHlsZSBwcml2YXRlIGNvbnRyb2xzIG5lZWQgc3BlY2lhbCBoYW5kbGluZyAqLworCWlmIChpZCA+PSBWNEwyX0NJRF9QUklWQVRFX0JBU0UpCisJCXJldHVybiBmaW5kX3ByaXZhdGVfcmVmKGhkbCwgaWQpOworCWJ1Y2tldCA9IGlkICUgaGRsLT5ucl9vZl9idWNrZXRzOworCisJLyogU2ltcGxlIG9wdGltaXphdGlvbjogY2FjaGUgdGhlIGxhc3QgY29udHJvbCBmb3VuZCAqLworCWlmIChoZGwtPmNhY2hlZCAmJiBoZGwtPmNhY2hlZC0+Y3RybC0+aWQgPT0gaWQpCisJCXJldHVybiBoZGwtPmNhY2hlZDsKKworCS8qIE5vdCBpbiBjYWNoZSwgc2VhcmNoIHRoZSBoYXNoICovCisJcmVmID0gaGRsLT5idWNrZXRzID8gaGRsLT5idWNrZXRzW2J1Y2tldF0gOiBOVUxMOworCXdoaWxlIChyZWYgJiYgcmVmLT5jdHJsLT5pZCAhPSBpZCkKKwkJcmVmID0gcmVmLT5uZXh0OworCisJaWYgKHJlZikKKwkJaGRsLT5jYWNoZWQgPSByZWY7IC8qIGNhY2hlIGl0ISAqLworCXJldHVybiByZWY7Cit9CisKKy8qIEZpbmQgYSBjb250cm9sIHdpdGggdGhlIGdpdmVuIElELiBUYWtlIHRoZSBoYW5kbGVyJ3MgbG9jayBmaXJzdC4gKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqZmluZF9yZWZfbG9jaygKKwkJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHUzMiBpZCkKK3sKKwlzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqcmVmID0gTlVMTDsKKworCWlmIChoZGwpIHsKKwkJbXV0ZXhfbG9jaygmaGRsLT5sb2NrKTsKKwkJcmVmID0gZmluZF9yZWYoaGRsLCBpZCk7CisJCW11dGV4X3VubG9jaygmaGRsLT5sb2NrKTsKKwl9CisJcmV0dXJuIHJlZjsKK30KKworLyogRmluZCBhIGNvbnRyb2wgd2l0aCB0aGUgZ2l2ZW4gSUQuICovCitzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfZmluZChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgdTMyIGlkKQoreworCXN0cnVjdCB2NGwyX2N0cmxfcmVmICpyZWYgPSBmaW5kX3JlZl9sb2NrKGhkbCwgaWQpOworCisJcmV0dXJuIHJlZiA/IHJlZi0+Y3RybCA6IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9maW5kKTsKKworLyogQWxsb2NhdGUgYSBuZXcgdjRsMl9jdHJsX3JlZiBhbmQgaG9vayBpdCBpbnRvIHRoZSBoYW5kbGVyLiAqLworc3RhdGljIGludCBoYW5kbGVyX25ld19yZWYoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkgICBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCB2NGwyX2N0cmxfcmVmICpyZWY7CisJc3RydWN0IHY0bDJfY3RybF9yZWYgKm5ld19yZWY7CisJdTMyIGlkID0gY3RybC0+aWQ7CisJdTMyIGNsYXNzX2N0cmwgPSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpIHwgMTsKKwlpbnQgYnVja2V0ID0gaWQgJSBoZGwtPm5yX29mX2J1Y2tldHM7CS8qIHdoaWNoIGJ1Y2tldCB0byB1c2UgKi8KKworCS8qIEF1dG9tYXRpY2FsbHkgYWRkIHRoZSBjb250cm9sIGNsYXNzIGlmIGl0IGlzIG5vdCB5ZXQgcHJlc2VudC4gKi8KKwlpZiAoaWQgIT0gY2xhc3NfY3RybCAmJiBmaW5kX3JlZl9sb2NrKGhkbCwgY2xhc3NfY3RybCkgPT0gTlVMTCkKKwkJaWYgKCF2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIE5VTEwsIGNsYXNzX2N0cmwsIDAsIDAsIDAsIDApKQorCQkJcmV0dXJuIGhkbC0+ZXJyb3I7CisKKwlpZiAoaGRsLT5lcnJvcikKKwkJcmV0dXJuIGhkbC0+ZXJyb3I7CisKKwluZXdfcmVmID0ga3phbGxvYyhzaXplb2YoKm5ld19yZWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19yZWYpCisJCXJldHVybiBoYW5kbGVyX3NldF9lcnIoaGRsLCAtRU5PTUVNKTsKKwluZXdfcmVmLT5jdHJsID0gY3RybDsKKwlpZiAoY3RybC0+aGFuZGxlciA9PSBoZGwpIHsKKwkJLyogQnkgZGVmYXVsdCBlYWNoIGNvbnRyb2wgc3RhcnRzIGluIGEgY2x1c3RlciBvZiBpdHMgb3duLgorCQkgICBuZXdfcmVmLT5jdHJsIGlzIGJhc2ljYWxseSBhIGNsdXN0ZXIgYXJyYXkgd2l0aCBvbmUKKwkJICAgZWxlbWVudCwgc28gdGhhdCdzIHBlcmZlY3QgdG8gdXNlIGFzIHRoZSBjbHVzdGVyIHBvaW50ZXIuCisJCSAgIEJ1dCBvbmx5IGRvIHRoaXMgZm9yIHRoZSBoYW5kbGVyIHRoYXQgb3ducyB0aGUgY29udHJvbC4gKi8KKwkJY3RybC0+Y2x1c3RlciA9ICZuZXdfcmVmLT5jdHJsOworCQljdHJsLT5uY29udHJvbHMgPSAxOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZuZXdfcmVmLT5ub2RlKTsKKworCW11dGV4X2xvY2soJmhkbC0+bG9jayk7CisKKwkvKiBBZGQgaW1tZWRpYXRlbHkgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBpZiB0aGUgbGlzdCBpcyBlbXB0eSwgb3IgaWYKKwkgICB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IGhhcyBhIGxvd2VyIElELgorCSAgIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gZWxlbWVudHMgYXJlIGFkZGVkIGluIGFzY2VuZGluZyBvcmRlciB0aGUKKwkgICBpbnNlcnRpb24gaXMgYW4gTygxKSBvcGVyYXRpb24uICovCisJaWYgKGxpc3RfZW1wdHkoJmhkbC0+Y3RybF9yZWZzKSB8fCBpZCA+IG5vZGUyaWQoaGRsLT5jdHJsX3JlZnMucHJldikpIHsKKwkJbGlzdF9hZGRfdGFpbCgmbmV3X3JlZi0+bm9kZSwgJmhkbC0+Y3RybF9yZWZzKTsKKwkJZ290byBpbnNlcnRfaW5faGFzaDsKKwl9CisKKwkvKiBGaW5kIGluc2VydCBwb3NpdGlvbiBpbiBzb3J0ZWQgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVmLCAmaGRsLT5jdHJsX3JlZnMsIG5vZGUpIHsKKwkJaWYgKHJlZi0+Y3RybC0+aWQgPCBpZCkKKwkJCWNvbnRpbnVlOworCQkvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLworCQlpZiAocmVmLT5jdHJsLT5pZCA9PSBpZCkgeworCQkJa2ZyZWUobmV3X3JlZik7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCQlsaXN0X2FkZCgmbmV3X3JlZi0+bm9kZSwgcmVmLT5ub2RlLnByZXYpOworCQlicmVhazsKKwl9CisKK2luc2VydF9pbl9oYXNoOgorCS8qIEluc2VydCB0aGUgY29udHJvbCBub2RlIGluIHRoZSBoYXNoICovCisJbmV3X3JlZi0+bmV4dCA9IGhkbC0+YnVja2V0c1tidWNrZXRdOworCWhkbC0+YnVja2V0c1tidWNrZXRdID0gbmV3X3JlZjsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmaGRsLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworLyogQWRkIGEgbmV3IGNvbnRyb2wgKi8KK3N0YXRpYyBzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3KHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcywKKwkJCXUzMiBpZCwgY29uc3QgY2hhciAqbmFtZSwgZW51bSB2NGwyX2N0cmxfdHlwZSB0eXBlLAorCQkJczMyIG1pbiwgczMyIG1heCwgdTMyIHN0ZXAsIHMzMiBkZWYsCisJCQl1MzIgZmxhZ3MsIGNvbnN0IGNoYXIgKipxbWVudSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOworCXVuc2lnbmVkIHN6X2V4dHJhID0gMDsKKworCWlmIChoZGwtPmVycm9yKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFNhbml0eSBjaGVja3MgKi8KKwlpZiAoaWQgPT0gMCB8fCBuYW1lID09IE5VTEwgfHwgaWQgPj0gVjRMMl9DSURfUFJJVkFURV9CQVNFIHx8CisJICAgIGRlZiA8IG1pbiB8fCBkZWYgPiBtYXggfHwgbWF4IDwgbWluIHx8CisJICAgICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIgJiYgc3RlcCA9PSAwKSB8fAorCSAgICAodHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VICYmIHFtZW51ID09IE5VTEwpIHx8CisJICAgICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX1NUUklORyAmJiBtYXggPT0gMCkpIHsKKwkJaGFuZGxlcl9zZXRfZXJyKGhkbCwgLUVSQU5HRSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTikKKwkJZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MpCisJCWZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKwllbHNlIGlmICh0eXBlID09IFY0TDJfQ1RSTF9UWVBFX1NUUklORykKKwkJc3pfZXh0cmEgKz0gMiAqIChtYXggKyAxKTsKKworCWN0cmwgPSBremFsbG9jKHNpemVvZigqY3RybCkgKyBzel9leHRyYSwgR0ZQX0tFUk5FTCk7CisJaWYgKGN0cmwgPT0gTlVMTCkgeworCQloYW5kbGVyX3NldF9lcnIoaGRsLCAtRU5PTUVNKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmN0cmwtPm5vZGUpOworCWN0cmwtPmhhbmRsZXIgPSBoZGw7CisJY3RybC0+b3BzID0gb3BzOworCWN0cmwtPmlkID0gaWQ7CisJY3RybC0+bmFtZSA9IG5hbWU7CisJY3RybC0+dHlwZSA9IHR5cGU7CisJY3RybC0+ZmxhZ3MgPSBmbGFnczsKKwljdHJsLT5taW5pbXVtID0gbWluOworCWN0cmwtPm1heGltdW0gPSBtYXg7CisJY3RybC0+c3RlcCA9IHN0ZXA7CisJY3RybC0+cW1lbnUgPSBxbWVudTsKKwljdHJsLT5wcml2ID0gcHJpdjsKKwljdHJsLT5jdXIudmFsID0gY3RybC0+dmFsID0gY3RybC0+ZGVmYXVsdF92YWx1ZSA9IGRlZjsKKworCWlmIChjdHJsLT50eXBlID09IFY0TDJfQ1RSTF9UWVBFX1NUUklORykgeworCQljdHJsLT5jdXIuc3RyaW5nID0gKGNoYXIgKikmY3RybFsxXSArIHN6X2V4dHJhIC0gKG1heCArIDEpOworCQljdHJsLT5zdHJpbmcgPSAoY2hhciAqKSZjdHJsWzFdICsgc3pfZXh0cmEgLSAyICogKG1heCArIDEpOworCQlpZiAoY3RybC0+bWluaW11bSkKKwkJCW1lbXNldChjdHJsLT5jdXIuc3RyaW5nLCAnICcsIGN0cmwtPm1pbmltdW0pOworCX0KKwlpZiAoaGFuZGxlcl9uZXdfcmVmKGhkbCwgY3RybCkpIHsKKwkJa2ZyZWUoY3RybCk7CisJCXJldHVybiBOVUxMOworCX0KKwltdXRleF9sb2NrKCZoZGwtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmN0cmwtPm5vZGUsICZoZGwtPmN0cmxzKTsKKwltdXRleF91bmxvY2soJmhkbC0+bG9jayk7CisJcmV0dXJuIGN0cmw7Cit9CisKK3N0cnVjdCB2NGwyX2N0cmwgKnY0bDJfY3RybF9uZXdfY3VzdG9tKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgKmNmZywgdm9pZCAqcHJpdikKK3sKKwlib29sIGlzX21lbnU7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwljb25zdCBjaGFyICpuYW1lID0gY2ZnLT5uYW1lOworCWNvbnN0IGNoYXIgKipxbWVudSA9IGNmZy0+cW1lbnU7CisJZW51bSB2NGwyX2N0cmxfdHlwZSB0eXBlID0gY2ZnLT50eXBlOworCXUzMiBmbGFncyA9IGNmZy0+ZmxhZ3M7CisJczMyIG1pbiA9IGNmZy0+bWluOworCXMzMiBtYXggPSBjZmctPm1heDsKKwl1MzIgc3RlcCA9IGNmZy0+c3RlcDsKKwlzMzIgZGVmID0gY2ZnLT5kZWY7CisKKwlpZiAobmFtZSA9PSBOVUxMKQorCQl2NGwyX2N0cmxfZmlsbChjZmctPmlkLCAmbmFtZSwgJnR5cGUsICZtaW4sICZtYXgsICZzdGVwLAorCQkJCQkJCQkmZGVmLCAmZmxhZ3MpOworCisJaXNfbWVudSA9IChjZmctPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSk7CisJaWYgKGlzX21lbnUpCisJCVdBUk5fT04oc3RlcCk7CisJZWxzZQorCQlXQVJOX09OKGNmZy0+bWVudV9za2lwX21hc2spOworCWlmIChpc19tZW51ICYmIHFtZW51ID09IE5VTEwpCisJCXFtZW51ID0gdjRsMl9jdHJsX2dldF9tZW51KGNmZy0+aWQpOworCisJY3RybCA9IHY0bDJfY3RybF9uZXcoaGRsLCBjZmctPm9wcywgY2ZnLT5pZCwgbmFtZSwKKwkJCXR5cGUsIG1pbiwgbWF4LAorCQkJaXNfbWVudSA/IGNmZy0+bWVudV9za2lwX21hc2sgOiBzdGVwLAorCQkJZGVmLCBmbGFncywgcW1lbnUsIHByaXYpOworCWlmIChjdHJsKSB7CisJCWN0cmwtPmlzX3ByaXZhdGUgPSBjZmctPmlzX3ByaXZhdGU7CisJCWN0cmwtPmlzX3ZvbGF0aWxlID0gY2ZnLT5pc192b2xhdGlsZTsKKwl9CisJcmV0dXJuIGN0cmw7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9uZXdfY3VzdG9tKTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBzdGFuZGFyZCBub24tbWVudSBjb250cm9scyAqLworc3RydWN0IHY0bDJfY3RybCAqdjRsMl9jdHJsX25ld19zdGQoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzLAorCQkJdTMyIGlkLCBzMzIgbWluLCBzMzIgbWF4LCB1MzIgc3RlcCwgczMyIGRlZikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0gdjRsMl9jdHJsX3R5cGUgdHlwZTsKKwl1MzIgZmxhZ3M7CisKKwl2NGwyX2N0cmxfZmlsbChpZCwgJm5hbWUsICZ0eXBlLCAmbWluLCAmbWF4LCAmc3RlcCwgJmRlZiwgJmZsYWdzKTsKKwlpZiAodHlwZSA9PSBWNEwyX0NUUkxfVFlQRV9NRU5VKSB7CisJCWhhbmRsZXJfc2V0X2VycihoZGwsIC1FSU5WQUwpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHY0bDJfY3RybF9uZXcoaGRsLCBvcHMsIGlkLCBuYW1lLCB0eXBlLAorCQkJCSAgICBtaW4sIG1heCwgc3RlcCwgZGVmLCBmbGFncywgTlVMTCwgTlVMTCk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9uZXdfc3RkKTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBzdGFuZGFyZCBtZW51IGNvbnRyb2xzICovCitzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3X3N0ZF9tZW51KHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcywKKwkJCXUzMiBpZCwgczMyIG1heCwgczMyIG1hc2ssIHMzMiBkZWYpCit7CisJY29uc3QgY2hhciAqKnFtZW51ID0gdjRsMl9jdHJsX2dldF9tZW51KGlkKTsKKwljb25zdCBjaGFyICpuYW1lOworCWVudW0gdjRsMl9jdHJsX3R5cGUgdHlwZTsKKwlzMzIgbWluOworCXMzMiBzdGVwOworCXUzMiBmbGFnczsKKworCXY0bDJfY3RybF9maWxsKGlkLCAmbmFtZSwgJnR5cGUsICZtaW4sICZtYXgsICZzdGVwLCAmZGVmLCAmZmxhZ3MpOworCWlmICh0eXBlICE9IFY0TDJfQ1RSTF9UWVBFX01FTlUpIHsKKwkJaGFuZGxlcl9zZXRfZXJyKGhkbCwgLUVJTlZBTCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gdjRsMl9jdHJsX25ldyhoZGwsIG9wcywgaWQsIG5hbWUsIHR5cGUsCisJCQkJICAgIDAsIG1heCwgbWFzaywgZGVmLCBmbGFncywgcW1lbnUsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfbmV3X3N0ZF9tZW51KTsKKworLyogQWRkIGEgY29udHJvbCBmcm9tIGFub3RoZXIgaGFuZGxlciB0byB0aGlzIGhhbmRsZXIgKi8KK3N0cnVjdCB2NGwyX2N0cmwgKnY0bDJfY3RybF9hZGRfY3RybChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCQkJICBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCWlmIChoZGwgPT0gTlVMTCB8fCBoZGwtPmVycm9yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoY3RybCA9PSBOVUxMKSB7CisJCWhhbmRsZXJfc2V0X2VycihoZGwsIC1FSU5WQUwpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGN0cmwtPmhhbmRsZXIgPT0gaGRsKQorCQlyZXR1cm4gY3RybDsKKwlyZXR1cm4gaGFuZGxlcl9uZXdfcmVmKGhkbCwgY3RybCkgPyBOVUxMIDogY3RybDsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2FkZF9jdHJsKTsKKworLyogQWRkIHRoZSBjb250cm9scyBmcm9tIGFub3RoZXIgaGFuZGxlciB0byBvdXIgb3duLiAqLworaW50IHY0bDJfY3RybF9hZGRfaGFuZGxlcihzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCSAgc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICphZGQpCit7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIERvIG5vdGhpbmcgaWYgZWl0aGVyIGhhbmRsZXIgaXMgTlVMTCBvciBpZiB0aGV5IGFyZSB0aGUgc2FtZSAqLworCWlmICghaGRsIHx8ICFhZGQgfHwgaGRsID09IGFkZCkKKwkJcmV0dXJuIDA7CisJaWYgKGhkbC0+ZXJyb3IpCisJCXJldHVybiBoZGwtPmVycm9yOworCW11dGV4X2xvY2soJmFkZC0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCAmYWRkLT5jdHJscywgbm9kZSkgeworCQkvKiBTa2lwIGhhbmRsZXItcHJpdmF0ZSBjb250cm9scy4gKi8KKwkJaWYgKGN0cmwtPmlzX3ByaXZhdGUpCisJCQljb250aW51ZTsKKwkJcmV0ID0gaGFuZGxlcl9uZXdfcmVmKGhkbCwgY3RybCk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZhZGQtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9hZGRfaGFuZGxlcik7CisKKy8qIENsdXN0ZXIgY29udHJvbHMgKi8KK3ZvaWQgdjRsMl9jdHJsX2NsdXN0ZXIodW5zaWduZWQgbmNvbnRyb2xzLCBzdHJ1Y3QgdjRsMl9jdHJsICoqY29udHJvbHMpCit7CisJaW50IGk7CisKKwkvKiBUaGUgZmlyc3QgY29udHJvbCBpcyB0aGUgbWFzdGVyIGNvbnRyb2wgYW5kIGl0IG11c3Qgbm90IGJlIE5VTEwgKi8KKwlCVUdfT04oY29udHJvbHNbMF0gPT0gTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbnRyb2xzOyBpKyspIHsKKwkJaWYgKGNvbnRyb2xzW2ldKSB7CisJCQljb250cm9sc1tpXS0+Y2x1c3RlciA9IGNvbnRyb2xzOworCQkJY29udHJvbHNbaV0tPm5jb250cm9scyA9IG5jb250cm9sczsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX2NsdXN0ZXIpOworCisvKiBBY3RpdmF0ZS9kZWFjdGl2YXRlIGEgY29udHJvbC4gKi8KK3ZvaWQgdjRsMl9jdHJsX2FjdGl2YXRlKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIGJvb2wgYWN0aXZlKQoreworCWlmIChjdHJsID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghYWN0aXZlKQorCQkvKiBzZXQgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgKi8KKwkJc2V0X2JpdCg0LCAmY3RybC0+ZmxhZ3MpOworCWVsc2UKKwkJLyogY2xlYXIgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgKi8KKwkJY2xlYXJfYml0KDQsICZjdHJsLT5mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9hY3RpdmF0ZSk7CisKKy8qIEdyYWIvdW5ncmFiIGEgY29udHJvbC4KKyAgIFR5cGljYWxseSB1c2VkIHdoZW4gc3RyZWFtaW5nIHN0YXJ0cyBhbmQgeW91IHdhbnQgdG8gZ3JhYiBjb250cm9scywKKyAgIHByZXZlbnRpbmcgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGVtLgorCisgICBKdXN0IGNhbGwgdGhpcyBhbmQgdGhlIGZyYW1ld29yayB3aWxsIGJsb2NrIGFueSBhdHRlbXB0cyB0byBjaGFuZ2UKKyAgIHRoZXNlIGNvbnRyb2xzLiAqLwordm9pZCB2NGwyX2N0cmxfZ3JhYihzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLCBib29sIGdyYWJiZWQpCit7CisJaWYgKGN0cmwgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGdyYWJiZWQpCisJCS8qIHNldCBWNEwyX0NUUkxfRkxBR19HUkFCQkVEICovCisJCXNldF9iaXQoMSwgJmN0cmwtPmZsYWdzKTsKKwllbHNlCisJCS8qIGNsZWFyIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgKi8KKwkJY2xlYXJfYml0KDEsICZjdHJsLT5mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9ncmFiKTsKKworLyogTG9nIHRoZSBjb250cm9sIG5hbWUgYW5kIHZhbHVlICovCitzdGF0aWMgdm9pZCBsb2dfY3RybChjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLAorCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqY29sb24pCit7CisJaW50IGZsX2luYWN0ID0gY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKKwlpbnQgZmxfZ3JhYmJlZCA9IGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfR1JBQkJFRDsKKworCWlmIChjdHJsLT5mbGFncyAmIChWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCB8IFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkpKQorCQlyZXR1cm47CisJaWYgKGN0cmwtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUykKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMlcyVzOiAiLCBwcmVmaXgsIGNvbG9uLCBjdHJsLT5uYW1lKTsKKworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJWQiLCBjdHJsLT5jdXIudmFsKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOgorCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGN0cmwtPmN1ci52YWwgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9NRU5VOgorCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGN0cmwtPnFtZW51W2N0cmwtPmN1ci52YWxdKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQ6CisJCXByaW50ayhLRVJOX0NPTlQgIiVsbGQiLCBjdHJsLT5jdXIudmFsNjQpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX1NUUklORzoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBjdHJsLT5jdXIuc3RyaW5nKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fQ09OVCAidW5rbm93biB0eXBlICVkIiwgY3RybC0+dHlwZSk7CisJCWJyZWFrOworCX0KKwlpZiAoZmxfaW5hY3QgJiYgZmxfZ3JhYmJlZCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIChpbmFjdGl2ZSwgZ3JhYmJlZClcbiIpOworCWVsc2UgaWYgKGZsX2luYWN0KQorCQlwcmludGsoS0VSTl9DT05UICIgKGluYWN0aXZlKVxuIik7CisJZWxzZSBpZiAoZmxfZ3JhYmJlZCkKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIChncmFiYmVkKVxuIik7CisJZWxzZQorCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCisvKiBMb2cgYWxsIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBoYW5kbGVyICovCit2b2lkIHY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwljb25zdCBjaGFyICpjb2xvbiA9ICIiOworCWludCBsZW47CisKKwlpZiAoaGRsID09IE5VTEwpCisJCXJldHVybjsKKwlpZiAocHJlZml4ID09IE5VTEwpCisJCXByZWZpeCA9ICIiOworCWxlbiA9IHN0cmxlbihwcmVmaXgpOworCWlmIChsZW4gJiYgcHJlZml4W2xlbiAtIDFdICE9ICcgJykKKwkJY29sb24gPSAiOiAiOworCW11dGV4X2xvY2soJmhkbC0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCAmaGRsLT5jdHJscywgbm9kZSkKKwkJaWYgKCEoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkpCisJCQlsb2dfY3RybChjdHJsLCBwcmVmaXgsIGNvbG9uKTsKKwltdXRleF91bmxvY2soJmhkbC0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMpOworCisvKiBDYWxsIHNfY3RybCBmb3IgYWxsIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBoYW5kbGVyICovCitpbnQgdjRsMl9jdHJsX2hhbmRsZXJfc2V0dXAoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwpCit7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChoZGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJbXV0ZXhfbG9jaygmaGRsLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZoZGwtPmN0cmxzLCBub2RlKQorCQljdHJsLT5kb25lID0gZmFsc2U7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZoZGwtPmN0cmxzLCBub2RlKSB7CisJCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciA9IGN0cmwtPmNsdXN0ZXJbMF07CisJCWludCBpOworCisJCS8qIFNraXAgaWYgdGhpcyBjb250cm9sIHdhcyBhbHJlYWR5IGhhbmRsZWQgYnkgYSBjbHVzdGVyLiAqLworCQlpZiAoY3RybC0+ZG9uZSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKQorCQkJY3VyX3RvX25ldyhtYXN0ZXItPmNsdXN0ZXJbaV0pOworCisJCS8qIFNraXAgYnV0dG9uIGNvbnRyb2xzIGFuZCByZWFkLW9ubHkgY29udHJvbHMuICovCisJCWlmIChjdHJsLT50eXBlID09IFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiB8fAorCQkgICAgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfUkVBRF9PTkxZKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSBtYXN0ZXItPm9wcy0+c19jdHJsKG1hc3Rlcik7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bmNvbnRyb2xzOyBpKyspCisJCQlpZiAobWFzdGVyLT5jbHVzdGVyW2ldKQorCQkJCW1hc3Rlci0+Y2x1c3RlcltpXS0+ZG9uZSA9IHRydWU7CisJfQorCW11dGV4X3VubG9jaygmaGRsLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCk7CisKKy8qIEltcGxlbWVudCBWSURJT0NfUVVFUllDVFJMICovCitpbnQgdjRsMl9xdWVyeWN0cmwoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJdTMyIGlkID0gcWMtPmlkICYgVjRMMl9DVFJMX0lEX01BU0s7CisJc3RydWN0IHY0bDJfY3RybF9yZWYgKnJlZjsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOworCisJaWYgKGhkbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmhkbC0+bG9jayk7CisKKwkvKiBUcnkgdG8gZmluZCBpdCAqLworCXJlZiA9IGZpbmRfcmVmKGhkbCwgaWQpOworCisJaWYgKChxYy0+aWQgJiBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwpICYmICFsaXN0X2VtcHR5KCZoZGwtPmN0cmxfcmVmcykpIHsKKwkJLyogRmluZCB0aGUgbmV4dCBjb250cm9sIHdpdGggSUQgPiBxYy0+aWQgKi8KKworCQkvKiBEaWQgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgY29udHJvbCBsaXN0PyAqLworCQlpZiAoaWQgPj0gbm9kZTJpZChoZGwtPmN0cmxfcmVmcy5wcmV2KSkgeworCQkJcmVmID0gTlVMTDsgLyogWWVzLCBzbyB0aGVyZSBpcyBubyBuZXh0IGNvbnRyb2wgKi8KKwkJfSBlbHNlIGlmIChyZWYpIHsKKwkJCS8qIFdlIGZvdW5kIGEgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBJRCwgc28ganVzdCBnZXQKKwkJCSAgIHRoZSBuZXh0IG9uZSBpbiB0aGUgbGlzdC4gKi8KKwkJCXJlZiA9IGxpc3RfZW50cnkocmVmLT5ub2RlLm5leHQsIHR5cGVvZigqcmVmKSwgbm9kZSk7CisJCX0gZWxzZSB7CisJCQkvKiBObyBjb250cm9sIHdpdGggdGhlIGdpdmVuIElEIGV4aXN0cywgc28gc3RhcnQKKwkJCSAgIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgbGFyZ2VzdCBJRC4gV2Uga25vdyB0aGVyZQorCQkJICAgaXMgb25lLCBvdGhlcndpc2UgdGhlIGZpcnN0ICdpZicgYWJvdmUgd291bGQgaGF2ZQorCQkJICAgYmVlbiB0cnVlLiAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZWYsICZoZGwtPmN0cmxfcmVmcywgbm9kZSkKKwkJCQlpZiAoaWQgPCByZWYtPmN0cmwtPmlkKQorCQkJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmhkbC0+bG9jayk7CisJaWYgKCFyZWYpCisJCXJldHVybiAtRUlOVkFMOworCisJY3RybCA9IHJlZi0+Y3RybDsKKwltZW1zZXQocWMsIDAsIHNpemVvZigqcWMpKTsKKwlxYy0+aWQgPSBjdHJsLT5pZDsKKwlzdHJsY3B5KHFjLT5uYW1lLCBjdHJsLT5uYW1lLCBzaXplb2YocWMtPm5hbWUpKTsKKwlxYy0+bWluaW11bSA9IGN0cmwtPm1pbmltdW07CisJcWMtPm1heGltdW0gPSBjdHJsLT5tYXhpbXVtOworCXFjLT5kZWZhdWx0X3ZhbHVlID0gY3RybC0+ZGVmYXVsdF92YWx1ZTsKKwlpZiAocWMtPnR5cGUgPT0gVjRMMl9DVFJMX1RZUEVfTUVOVSkKKwkJcWMtPnN0ZXAgPSAxOworCWVsc2UKKwkJcWMtPnN0ZXAgPSBjdHJsLT5zdGVwOworCXFjLT5mbGFncyA9IGN0cmwtPmZsYWdzOworCXFjLT50eXBlID0gY3RybC0+dHlwZTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9xdWVyeWN0cmwpOworCitpbnQgdjRsMl9zdWJkZXZfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJcmV0dXJuIHY0bDJfcXVlcnljdHJsKHNkLT5jdHJsX2hhbmRsZXIsIHFjKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9zdWJkZXZfcXVlcnljdHJsKTsKKworLyogSW1wbGVtZW50IFZJRElPQ19RVUVSWU1FTlUgKi8KK2ludCB2NGwyX3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSkKK3sKKwlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsOworCXUzMiBpID0gcW0tPmluZGV4OworCisJY3RybCA9IHY0bDJfY3RybF9maW5kKGhkbCwgcW0tPmlkKTsKKwlpZiAoIWN0cmwpCisJCXJldHVybiAtRUlOVkFMOworCisJcW0tPnJlc2VydmVkID0gMDsKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKGN0cmwtPnFtZW51ID09IE5VTEwgfHwKKwkgICAgaSA8IGN0cmwtPm1pbmltdW0gfHwgaSA+IGN0cmwtPm1heGltdW0pCisJCXJldHVybiAtRUlOVkFMOworCS8qIFVzZSBtYXNrIHRvIHNlZSBpZiB0aGlzIG1lbnUgaXRlbSBzaG91bGQgYmUgc2tpcHBlZCAqLworCWlmIChjdHJsLT5tZW51X3NraXBfbWFzayAmICgxIDw8IGkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBFbXB0eSBtZW51IGl0ZW1zIHNob3VsZCBhbHNvIGJlIHNraXBwZWQgKi8KKwlpZiAoY3RybC0+cW1lbnVbaV0gPT0gTlVMTCB8fCBjdHJsLT5xbWVudVtpXVswXSA9PSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJsY3B5KHFtLT5uYW1lLCBjdHJsLT5xbWVudVtpXSwgc2l6ZW9mKHFtLT5uYW1lKSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfcXVlcnltZW51KTsKKworaW50IHY0bDJfc3ViZGV2X3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtKQoreworCXJldHVybiB2NGwyX3F1ZXJ5bWVudShzZC0+Y3RybF9oYW5kbGVyLCBxbSk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfc3ViZGV2X3F1ZXJ5bWVudSk7CisKKworCisvKiBTb21lIGdlbmVyYWwgbm90ZXMgb24gdGhlIGF0b21pYyByZXF1aXJlbWVudHMgb2YgVklESU9DX0cvVFJZL1NfRVhUX0NUUkxTOgorCisgICBJdCBpcyBub3QgYSBmdWxseSBhdG9taWMgb3BlcmF0aW9uLCBqdXN0IGJlc3QtZWZmb3J0IG9ubHkuIEFmdGVyIGFsbCwgaWYKKyAgIG11bHRpcGxlIGNvbnRyb2xzIGhhdmUgdG8gYmUgc2V0IHRocm91Z2ggbXVsdGlwbGUgaTJjIHdyaXRlcyAoZm9yIGV4YW1wbGUpCisgICB0aGVuIHNvbWUgaW5pdGlhbCB3cml0ZXMgbWF5IHN1Y2NlZWQgd2hpbGUgb3RoZXJzIGZhaWwuIFRodXMgbGVhdmluZyB0aGUKKyAgIHN5c3RlbSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFRoZSBxdWVzdGlvbiBpcyBob3cgbXVjaCBlZmZvcnQgeW91IGFyZQorICAgd2lsbGluZyB0byBzcGVuZCBvbiB0cnlpbmcgdG8gbWFrZSBzb21ldGhpbmcgYXRvbWljIHRoYXQgcmVhbGx5IGlzbid0LgorCisgICBGcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIGFuIGFwcGxpY2F0aW9uIHRoZSBtYWluIHJlcXVpcmVtZW50IGlzIHRoYXQKKyAgIHdoZW4geW91IGNhbGwgVklESU9DX1NfRVhUX0NUUkxTIGFuZCBzb21lIHZhbHVlcyBhcmUgaW52YWxpZCB0aGVuIGFuCisgICBlcnJvciBzaG91bGQgYmUgcmV0dXJuZWQgd2l0aG91dCBhY3R1YWxseSBhZmZlY3RpbmcgYW55IGNvbnRyb2xzLgorCisgICBJZiBhbGwgdGhlIHZhbHVlcyBhcmUgY29ycmVjdCwgdGhlbiBpdCBpcyBhY2NlcHRhYmxlIHRvIGp1c3QgZ2l2ZSB1cAorICAgaW4gY2FzZSBvZiBsb3ctbGV2ZWwgZXJyb3JzLgorCisgICBJdCBpcyBpbXBvcnRhbnQgdGhvdWdoIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiB0ZWxsIHdoZW4gb25seSBhIHBhcnRpYWwKKyAgIGNvbmZpZ3VyYXRpb24gd2FzIGRvbmUuIFRoZSB3YXkgd2UgZG8gdGhhdCBpcyB0aHJvdWdoIHRoZSBlcnJvcl9pZHggZmllbGQKKyAgIG9mIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sczogaWYgdGhhdCBpcyBlcXVhbCB0byB0aGUgY291bnQgZmllbGQgdGhlbiBubworICAgY29udHJvbHMgd2VyZSBhZmZlY3RlZC4gT3RoZXJ3aXNlIGFsbCBjb250cm9scyBiZWZvcmUgdGhhdCBpbmRleCB3ZXJlCisgICBzdWNjZXNzZnVsIGluIHBlcmZvcm1pbmcgdGhlaXIgJ2dldCcgb3IgJ3NldCcgb3BlcmF0aW9uLCB0aGUgY29udHJvbCBhdAorICAgdGhlIGdpdmVuIGluZGV4IGZhaWxlZCwgYW5kIHlvdSBkb24ndCBrbm93IHdoYXQgaGFwcGVuZWQgd2l0aCB0aGUgY29udHJvbHMKKyAgIGFmdGVyIHRoZSBmYWlsZWQgb25lLiBTaW5jZSBpZiB0aGV5IHdlcmUgcGFydCBvZiBhIGNvbnRyb2wgY2x1c3RlciB0aGV5CisgICBjb3VsZCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCAoaWYgYSBjbHVzdGVyIG1lbWJlciB3YXMgZW5jb3VudGVyZWQKKyAgIGF0IGluZGV4IDwgZXJyb3JfaWR4KSwgdGhleSBjb3VsZCBoYXZlIGZhaWxlZCAoaWYgYSBjbHVzdGVyIG1lbWJlciB3YXMgYXQKKyAgIGVycm9yX2lkeCksIG9yIHRoZXkgbWF5IG5vdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIHlldCAoaWYgdGhlIGZpcnN0IGNsdXN0ZXIKKyAgIG1lbWJlciBhcHBlYXJlZCBhZnRlciBlcnJvcl9pZHgpLgorCisgICBJdCBpcyBhbGwgZmFpcmx5IHRoZW9yZXRpY2FsLCB0aG91Z2guIEluIHByYWN0aWNlIGFsbCB5b3UgY2FuIGRvIGlzIHRvCisgICBiYWlsIG91dC4gSWYgZXJyb3JfaWR4ID09IGNvdW50LCB0aGVuIGl0IGlzIGFuIGFwcGxpY2F0aW9uIGJ1Zy4gSWYKKyAgIGVycm9yX2lkeCA8IGNvdW50IHRoZW4gaXQgaXMgb25seSBhbiBhcHBsaWNhdGlvbiBidWcgaWYgdGhlIGVycm9yIGNvZGUgd2FzCisgICBFQlVTWS4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoYXQgc29tZXRoaW5nIHN0YXJ0ZWQgc3RyZWFtaW5nIGp1c3Qgd2hlbiB5b3UKKyAgIHRyaWVkIHRvIHNldCB0aGUgY29udHJvbHMuIEluIGFsbCBvdGhlciBjYXNlcyBpdCBpcyBhIGRyaXZlci9oYXJkd2FyZQorICAgcHJvYmxlbSBhbmQgYWxsIHlvdSBjYW4gZG8gaXMgdG8gcmV0cnkgb3IgYmFpbCBvdXQuCisKKyAgIE5vdGUgdGhhdCB0aGVzZSBydWxlcyBkbyBub3QgYXBwbHkgdG8gVklESU9DX1RSWV9FWFRfQ1RSTFM6IHNpbmNlIHRoYXQKKyAgIG5ldmVyIG1vZGlmaWVzIGNvbnRyb2xzIHRoZSBlcnJvcl9pZHggaXMganVzdCBzZXQgdG8gd2hhdGV2ZXIgY29udHJvbAorICAgaGFzIGFuIGludmFsaWQgdmFsdWUuCisgKi8KKworLyogUHJlcGFyZSBmb3IgdGhlIGV4dGVuZGVkIGcvcy90cnkgZnVuY3Rpb25zLgorICAgRmluZCB0aGUgY29udHJvbHMgaW4gdGhlIGNvbnRyb2wgYXJyYXkgYW5kIGRvIHNvbWUgYmFzaWMgY2hlY2tzLiAqLworc3RhdGljIGludCBwcmVwYXJlX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKKwkJCSAgICAgc3RydWN0IGN0cmxfaGVscGVyICpoZWxwZXJzLAorCQkJICAgICBib29sIHRyeSkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjcy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqYyA9ICZjcy0+Y29udHJvbHNbaV07CisJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmw7CisJCXUzMiBpZCA9IGMtPmlkICYgVjRMMl9DVFJMX0lEX01BU0s7CisKKwkJaWYgKHRyeSkKKwkJCWNzLT5lcnJvcl9pZHggPSBpOworCisJCWlmIChjcy0+Y3RybF9jbGFzcyAmJiBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICE9IGNzLT5jdHJsX2NsYXNzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJLyogT2xkLXN0eWxlIHByaXZhdGUgY29udHJvbHMgYXJlIG5vdCBhbGxvd2VkIGZvcgorCQkgICBleHRlbmRlZCBjb250cm9scyAqLworCQlpZiAoaWQgPj0gVjRMMl9DSURfUFJJVkFURV9CQVNFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWN0cmwgPSB2NGwyX2N0cmxfZmluZChoZGwsIGlkKTsKKwkJaWYgKGN0cmwgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWhlbHBlcnNbaV0uY3RybCA9IGN0cmw7CisJCWhlbHBlcnNbaV0uaGFuZGxlZCA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCpjbHVzdGVyX2Z1bmMpKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjLAorCQkJICAgIHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOworCisvKiBXYWxrIG92ZXIgYWxsIGNvbnRyb2xzIGluIHY0bDJfZXh0X2NvbnRyb2xzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBjbHVzdGVyCisgICBhbmQgY2FsbCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uICovCitzdGF0aWMgaW50IGNsdXN0ZXJfd2Fsayh1bnNpZ25lZCBmcm9tLAorCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKKwkJCXN0cnVjdCBjdHJsX2hlbHBlciAqaGVscGVycywKKwkJCWNsdXN0ZXJfZnVuYyBmKQoreworCXN0cnVjdCB2NGwyX2N0cmwgKipjbHVzdGVyID0gaGVscGVyc1tmcm9tXS5jdHJsLT5jbHVzdGVyOworCWludCByZXQgPSAwOworCWludCBpOworCisJLyogRmluZCBhbnkgY29udHJvbHMgZnJvbSB0aGUgc2FtZSBjbHVzdGVyIGFuZCBjYWxsIHRoZSBmdW5jdGlvbiAqLworCWZvciAoaSA9IGZyb207ICFyZXQgJiYgaSA8IGNzLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCB2NGwyX2N0cmwgKmN0cmwgPSBoZWxwZXJzW2ldLmN0cmw7CisKKwkJaWYgKCFoZWxwZXJzW2ldLmhhbmRsZWQgJiYgY3RybC0+Y2x1c3RlciA9PSBjbHVzdGVyKQorCQkJcmV0ID0gZigmY3MtPmNvbnRyb2xzW2ldLCBjdHJsKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY2x1c3Rlcl9kb25lKHVuc2lnbmVkIGZyb20sCisJCQkgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcywKKwkJCSBzdHJ1Y3QgY3RybF9oZWxwZXIgKmhlbHBlcnMpCit7CisJc3RydWN0IHY0bDJfY3RybCAqKmNsdXN0ZXIgPSBoZWxwZXJzW2Zyb21dLmN0cmwtPmNsdXN0ZXI7CisJaW50IGk7CisKKwkvKiBGaW5kIGFueSBjb250cm9scyBmcm9tIHRoZSBzYW1lIGNsdXN0ZXIgYW5kIG1hcmsgdGhlbSBhcyBoYW5kbGVkICovCisJZm9yIChpID0gZnJvbTsgaSA8IGNzLT5jb3VudDsgaSsrKQorCQlpZiAoaGVscGVyc1tpXS5jdHJsLT5jbHVzdGVyID09IGNsdXN0ZXIpCisJCQloZWxwZXJzW2ldLmhhbmRsZWQgPSB0cnVlOworfQorCisvKiBIYW5kbGVzIHRoZSBjb3JuZXIgY2FzZSB3aGVyZSBjcy0+Y291bnQgPT0gMC4gSXQgY2hlY2tzIHdoZXRoZXIgdGhlCisgICBzcGVjaWZpZWQgY29udHJvbCBjbGFzcyBleGlzdHMuIElmIHRoYXQgY2xhc3MgSUQgaXMgMCwgdGhlbiBpdCBjaGVja3MKKyAgIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBjb250cm9scyBhdCBhbGwuICovCitzdGF0aWMgaW50IGNsYXNzX2NoZWNrKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCB1MzIgY3RybF9jbGFzcykKK3sKKwlpZiAoY3RybF9jbGFzcyA9PSAwKQorCQlyZXR1cm4gbGlzdF9lbXB0eSgmaGRsLT5jdHJsX3JlZnMpID8gLUVJTlZBTCA6IDA7CisJcmV0dXJuIGZpbmRfcmVmX2xvY2soaGRsLCBjdHJsX2NsYXNzIHwgMSkgPyAwIDogLUVJTlZBTDsKK30KKworCisKKy8qIEdldCBleHRlbmRlZCBjb250cm9scy4gQWxsb2NhdGVzIHRoZSBoZWxwZXJzIGFycmF5IGlmIG5lZWRlZC4gKi8KK2ludCB2NGwyX2dfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKQoreworCXN0cnVjdCBjdHJsX2hlbHBlciBoZWxwZXJbNF07CisJc3RydWN0IGN0cmxfaGVscGVyICpoZWxwZXJzID0gaGVscGVyOworCWludCByZXQ7CisJaW50IGk7CisKKwljcy0+ZXJyb3JfaWR4ID0gY3MtPmNvdW50OworCWNzLT5jdHJsX2NsYXNzID0gVjRMMl9DVFJMX0lEMkNMQVNTKGNzLT5jdHJsX2NsYXNzKTsKKworCWlmIChoZGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3MtPmNvdW50ID09IDApCisJCXJldHVybiBjbGFzc19jaGVjayhoZGwsIGNzLT5jdHJsX2NsYXNzKTsKKworCWlmIChjcy0+Y291bnQgPiBBUlJBWV9TSVpFKGhlbHBlcikpIHsKKwkJaGVscGVycyA9IGttYWxsb2Moc2l6ZW9mKGhlbHBlclswXSkgKiBjcy0+Y291bnQsIEdGUF9LRVJORUwpOworCQlpZiAoaGVscGVycyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gcHJlcGFyZV9leHRfY3RybHMoaGRsLCBjcywgaGVscGVycywgZmFsc2UpOworCisJZm9yIChpID0gMDsgIXJldCAmJiBpIDwgY3MtPmNvdW50OyBpKyspCisJCWlmIChoZWxwZXJzW2ldLmN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWSkKKwkJCXJldCA9IC1FQUNDRVM7CisKKwlmb3IgKGkgPSAwOyAhcmV0ICYmIGkgPCBjcy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsID0gaGVscGVyc1tpXS5jdHJsOworCQlzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXIgPSBjdHJsLT5jbHVzdGVyWzBdOworCisJCWlmIChoZWxwZXJzW2ldLmhhbmRsZWQpCisJCQljb250aW51ZTsKKworCQljcy0+ZXJyb3JfaWR4ID0gaTsKKworCQl2NGwyX2N0cmxfbG9jayhtYXN0ZXIpOworCQkvKiBnX3ZvbGF0aWxlX2N0cmwgd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgY29udHJvbCB2YWx1ZXMgKi8KKwkJaWYgKGN0cmwtPmlzX3ZvbGF0aWxlICYmIG1hc3Rlci0+b3BzLT5nX3ZvbGF0aWxlX2N0cmwpCisJCQlyZXQgPSBtYXN0ZXItPm9wcy0+Z192b2xhdGlsZV9jdHJsKG1hc3Rlcik7CisJCS8qIElmIE9LLCB0aGVuIGNvcHkgdGhlIGN1cnJlbnQgY29udHJvbCB2YWx1ZXMgdG8gdGhlIGNhbGxlciAqLworCQlpZiAoIXJldCkKKwkJCXJldCA9IGNsdXN0ZXJfd2FsayhpLCBjcywgaGVscGVycywgY3VyX3RvX3VzZXIpOworCQl2NGwyX2N0cmxfdW5sb2NrKG1hc3Rlcik7CisJCWNsdXN0ZXJfZG9uZShpLCBjcywgaGVscGVycyk7CisJfQorCisJaWYgKGNzLT5jb3VudCA+IEFSUkFZX1NJWkUoaGVscGVyKSkKKwkJa2ZyZWUoaGVscGVycyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9nX2V4dF9jdHJscyk7CisKK2ludCB2NGwyX3N1YmRldl9nX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKQoreworCXJldHVybiB2NGwyX2dfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGNzKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9zdWJkZXZfZ19leHRfY3RybHMpOworCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGEgc2luZ2xlIGNvbnRyb2wgKi8KK3N0YXRpYyBpbnQgZ2V0X2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCwgczMyICp2YWwpCit7CisJc3RydWN0IHY0bDJfY3RybCAqbWFzdGVyID0gY3RybC0+Y2x1c3RlclswXTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1dSSVRFX09OTFkpCisJCXJldHVybiAtRUFDQ0VTOworCisJdjRsMl9jdHJsX2xvY2sobWFzdGVyKTsKKwkvKiBnX3ZvbGF0aWxlX2N0cmwgd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgY29udHJvbCB2YWx1ZXMgKi8KKwlpZiAoY3RybC0+aXNfdm9sYXRpbGUgJiYgbWFzdGVyLT5vcHMtPmdfdm9sYXRpbGVfY3RybCkKKwkJcmV0ID0gbWFzdGVyLT5vcHMtPmdfdm9sYXRpbGVfY3RybChtYXN0ZXIpOworCSp2YWwgPSBjdHJsLT5jdXIudmFsOworCXY0bDJfY3RybF91bmxvY2sobWFzdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdjRsMl9nX2N0cmwoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCit7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybCA9IHY0bDJfY3RybF9maW5kKGhkbCwgY29udHJvbC0+aWQpOworCisJaWYgKGN0cmwgPT0gTlVMTCB8fCAhdHlwZV9pc19pbnQoY3RybCkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBnZXRfY3RybChjdHJsLCAmY29udHJvbC0+dmFsdWUpOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX2dfY3RybCk7CisKK2ludCB2NGwyX3N1YmRldl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY29udHJvbCkKK3sKKwlyZXR1cm4gdjRsMl9nX2N0cmwoc2QtPmN0cmxfaGFuZGxlciwgY29udHJvbCk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfc3ViZGV2X2dfY3RybCk7CisKK3MzMiB2NGwyX2N0cmxfZ19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJczMyIHZhbCA9IDA7CisKKwkvKiBJdCdzIGEgZHJpdmVyIGJ1ZyBpZiB0aGlzIGhhcHBlbnMuICovCisJV0FSTl9PTighdHlwZV9pc19pbnQoY3RybCkpOworCWdldF9jdHJsKGN0cmwsICZ2YWwpOworCXJldHVybiB2YWw7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfY3RybF9nX2N0cmwpOworCisKKy8qIENvcmUgZnVuY3Rpb24gdGhhdCBjYWxscyB0cnkvc19jdHJsIGFuZCBlbnN1cmVzIHRoYXQgdGhlIG5ldyB2YWx1ZSBpcworICAgY29waWVkIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGEgc2V0LgorICAgTXVzdCBiZSBjYWxsZWQgd2l0aCBjdHJsLT5oYW5kbGVyLT5sb2NrIGhlbGQuICovCitzdGF0aWMgaW50IHRyeV9vcl9zZXRfY29udHJvbF9jbHVzdGVyKHN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciwgYm9vbCBzZXQpCit7CisJYm9vbCB0cnkgPSAhc2V0OworCWludCByZXQgPSAwOworCWludCBpOworCisJLyogR28gdGhyb3VnaCB0aGUgY2x1c3RlciBhbmQgZWl0aGVyIHZhbGlkYXRlIHRoZSBuZXcgdmFsdWUgb3IKKwkgICAoaWYgbm8gbmV3IHZhbHVlIHdhcyBzZXQpLCBjb3B5IHRoZSBjdXJyZW50IHZhbHVlIHRvIHRoZSBuZXcKKwkgICB2YWx1ZSwgZW5zdXJpbmcgYSBjb25zaXN0ZW50IHZpZXcgZm9yIHRoZSBjb250cm9sIG9wcyB3aGVuCisJICAgY2FsbGVkLiAqLworCWZvciAoaSA9IDA7ICFyZXQgJiYgaSA8IG1hc3Rlci0+bmNvbnRyb2xzOyBpKyspIHsKKwkJc3RydWN0IHY0bDJfY3RybCAqY3RybCA9IG1hc3Rlci0+Y2x1c3RlcltpXTsKKworCQlpZiAoY3RybCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGN0cmwtPmhhc19uZXcpIHsKKwkJCS8qIERvdWJsZSBjaGVjayB0aGlzOiBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZQorCQkJICAgbGFzdCBjaGVjayBpbiB0cnlfb3Jfc2V0X2V4dF9jdHJscygpLiAqLworCQkJaWYgKHNldCAmJiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19HUkFCQkVEKSkKKwkJCQlyZXR1cm4gLUVCVVNZOworCisJCQkvKiBWYWxpZGF0ZSBpZiByZXF1aXJlZCAqLworCQkJaWYgKCFzZXQpCisJCQkJcmV0ID0gdmFsaWRhdGVfbmV3KGN0cmwpOworCQkJY29udGludWU7CisJCX0KKwkJLyogTm8gbmV3IHZhbHVlIHdhcyBzZXQsIHNvIGNvcHkgdGhlIGN1cnJlbnQgYW5kIGZvcmNlCisJCSAgIGEgY2FsbCB0byB0cnlfY3RybCBsYXRlciwgc2luY2UgdGhlIHZhbHVlcyBmb3IgdGhlIGNsdXN0ZXIKKwkJICAgbWF5IG5vdyBoYXZlIGNoYW5nZWQgYW5kIHRoZSBlbmQgcmVzdWx0IG1pZ2h0IGJlIGludmFsaWQuICovCisJCXRyeSA9IHRydWU7CisJCWN1cl90b19uZXcoY3RybCk7CisJfQorCisJLyogRm9yIGxhcmdlciBjbHVzdGVycyB5b3UgaGF2ZSB0byBjYWxsIHRyeV9jdHJsIGFnYWluIHRvCisJICAgdmVyaWZ5IHRoYXQgdGhlIGNvbnRyb2xzIGFyZSBzdGlsbCB2YWxpZCBhZnRlciB0aGUKKwkgICAnY3VyX3RvX25ldycgYWJvdmUuICovCisJaWYgKCFyZXQgJiYgbWFzdGVyLT5vcHMtPnRyeV9jdHJsICYmIHRyeSkKKwkJcmV0ID0gbWFzdGVyLT5vcHMtPnRyeV9jdHJsKG1hc3Rlcik7CisKKwkvKiBEb24ndCBzZXQgaWYgdGhlcmUgaXMgbm8gY2hhbmdlICovCisJaWYgKCFyZXQgJiYgc2V0ICYmIGNsdXN0ZXJfY2hhbmdlZChtYXN0ZXIpKSB7CisJCXJldCA9IG1hc3Rlci0+b3BzLT5zX2N0cmwobWFzdGVyKTsKKwkJLyogSWYgT0ssIHRoZW4gbWFrZSB0aGUgbmV3IHZhbHVlcyBwZXJtYW5lbnQuICovCisJCWlmICghcmV0KQorCQkJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bmNvbnRyb2xzOyBpKyspCisJCQkJbmV3X3RvX2N1cihtYXN0ZXItPmNsdXN0ZXJbaV0pOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBUcnkgb3Igc2V0IGNvbnRyb2xzLiAqLworc3RhdGljIGludCB0cnlfb3Jfc2V0X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzLAorCQkJCXN0cnVjdCBjdHJsX2hlbHBlciAqaGVscGVycywKKwkJCQlib29sIHNldCkKK3sKKwl1bnNpZ25lZCBpLCBqOworCWludCByZXQgPSAwOworCisJY3MtPmVycm9yX2lkeCA9IGNzLT5jb3VudDsKKwlmb3IgKGkgPSAwOyBpIDwgY3MtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfY3RybCAqY3RybCA9IGhlbHBlcnNbaV0uY3RybDsKKworCQlpZiAoIXNldCkKKwkJCWNzLT5lcnJvcl9pZHggPSBpOworCisJCWlmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSkKKwkJCXJldHVybiAtRUFDQ0VTOworCQkvKiBUaGlzIHRlc3QgaXMgYWxzbyBkb25lIGluIHRyeV9zZXRfY29udHJvbF9jbHVzdGVyKCkgd2hpY2gKKwkJICAgaXMgY2FsbGVkIGluIGF0b21pYyBjb250ZXh0LCBzbyB0aGF0IGhhcyB0aGUgZmluYWwgc2F5LAorCQkgICBidXQgaXQgbWFrZXMgc2Vuc2UgdG8gZG8gYW4gdXAtZnJvbnQgY2hlY2sgYXMgd2VsbC4gT25jZQorCQkgICBhbiBlcnJvciBvY2N1cnMgaW4gdHJ5X3NldF9jb250cm9sX2NsdXN0ZXIoKSBzb21lIG90aGVyCisJCSAgIGNvbnRyb2xzIG1heSBoYXZlIGJlZW4gc2V0IGFscmVhZHkgYW5kIHdlIHdhbnQgdG8gZG8gYQorCQkgICBiZXN0LWVmZm9ydCB0byBhdm9pZCB0aGF0LiAqLworCQlpZiAoc2V0ICYmIChjdHJsLT5mbGFncyAmIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGkgPSAwOyAhcmV0ICYmIGkgPCBjcy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsID0gaGVscGVyc1tpXS5jdHJsOworCQlzdHJ1Y3QgdjRsMl9jdHJsICptYXN0ZXIgPSBjdHJsLT5jbHVzdGVyWzBdOworCisJCWNzLT5lcnJvcl9pZHggPSBpOworCisJCWlmIChoZWxwZXJzW2ldLmhhbmRsZWQpCisJCQljb250aW51ZTsKKworCQl2NGwyX2N0cmxfbG9jayhjdHJsKTsKKworCQkvKiBSZXNldCB0aGUgJ2hhc19uZXcnIGZsYWdzIG9mIHRoZSBjbHVzdGVyICovCisJCWZvciAoaiA9IDA7IGogPCBtYXN0ZXItPm5jb250cm9sczsgaisrKQorCQkJaWYgKG1hc3Rlci0+Y2x1c3RlcltqXSkKKwkJCQltYXN0ZXItPmNsdXN0ZXJbal0tPmhhc19uZXcgPSAwOworCisJCS8qIENvcHkgdGhlIG5ldyBjYWxsZXItc3VwcGxpZWQgY29udHJvbCB2YWx1ZXMuCisJCSAgIHVzZXJfdG9fbmV3KCkgc2V0cyAnaGFzX25ldycgdG8gMS4gKi8KKwkJcmV0ID0gY2x1c3Rlcl93YWxrKGksIGNzLCBoZWxwZXJzLCB1c2VyX3RvX25ldyk7CisKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSB0cnlfb3Jfc2V0X2NvbnRyb2xfY2x1c3RlcihtYXN0ZXIsIHNldCk7CisKKwkJLyogQ29weSB0aGUgbmV3IHZhbHVlcyBiYWNrIHRvIHVzZXJzcGFjZS4gKi8KKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBjbHVzdGVyX3dhbGsoaSwgY3MsIGhlbHBlcnMsIG5ld190b191c2VyKTsKKworCQl2NGwyX2N0cmxfdW5sb2NrKGN0cmwpOworCQljbHVzdGVyX2RvbmUoaSwgY3MsIGhlbHBlcnMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBUcnkgb3IgdHJ5LWFuZC1zZXQgY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgdHJ5X3NldF9leHRfY3RybHMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkgICAgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3MsCisJCQkgICAgIGJvb2wgc2V0KQoreworCXN0cnVjdCBjdHJsX2hlbHBlciBoZWxwZXJbNF07CisJc3RydWN0IGN0cmxfaGVscGVyICpoZWxwZXJzID0gaGVscGVyOworCWludCByZXQ7CisJaW50IGk7CisKKwljcy0+ZXJyb3JfaWR4ID0gY3MtPmNvdW50OworCWNzLT5jdHJsX2NsYXNzID0gVjRMMl9DVFJMX0lEMkNMQVNTKGNzLT5jdHJsX2NsYXNzKTsKKworCWlmIChoZGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY3MtPmNvdW50ID09IDApCisJCXJldHVybiBjbGFzc19jaGVjayhoZGwsIGNzLT5jdHJsX2NsYXNzKTsKKworCWlmIChjcy0+Y291bnQgPiBBUlJBWV9TSVpFKGhlbHBlcikpIHsKKwkJaGVscGVycyA9IGttYWxsb2Moc2l6ZW9mKGhlbHBlclswXSkgKiBjcy0+Y291bnQsIEdGUF9LRVJORUwpOworCQlpZiAoIWhlbHBlcnMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gcHJlcGFyZV9leHRfY3RybHMoaGRsLCBjcywgaGVscGVycywgIXNldCk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlOworCisJLyogRmlyc3QgJ3RyeScgYWxsIGNvbnRyb2xzIGFuZCBhYm9ydCBvbiBlcnJvciAqLworCXJldCA9IHRyeV9vcl9zZXRfZXh0X2N0cmxzKGhkbCwgY3MsIGhlbHBlcnMsIGZhbHNlKTsKKwkvKiBJZiB0aGlzIGlzIGEgJ3NldCcgb3BlcmF0aW9uIGFuZCB0aGUgaW5pdGlhbCAndHJ5JyBmYWlsZWQsCisJICAgdGhlbiBzZXQgZXJyb3JfaWR4IHRvIGNvdW50IHRvIHRlbGwgdGhlIGFwcGxpY2F0aW9uIHRoYXQgbm8KKwkgICBjb250cm9scyBjaGFuZ2VkIHZhbHVlIHlldC4gKi8KKwlpZiAoc2V0KQorCQljcy0+ZXJyb3JfaWR4ID0gY3MtPmNvdW50OworCWlmICghcmV0ICYmIHNldCkgeworCQkvKiBSZXNldCAnaGFuZGxlZCcgc3RhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IGNzLT5jb3VudDsgaSsrKQorCQkJaGVscGVyc1tpXS5oYW5kbGVkID0gZmFsc2U7CisJCXJldCA9IHRyeV9vcl9zZXRfZXh0X2N0cmxzKGhkbCwgY3MsIGhlbHBlcnMsIHRydWUpOworCX0KKworZnJlZToKKwlpZiAoY3MtPmNvdW50ID4gQVJSQVlfU0laRShoZWxwZXIpKQorCQlrZnJlZShoZWxwZXJzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdjRsMl90cnlfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKQoreworCXJldHVybiB0cnlfc2V0X2V4dF9jdHJscyhoZGwsIGNzLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfdHJ5X2V4dF9jdHJscyk7CisKK2ludCB2NGwyX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKQoreworCXJldHVybiB0cnlfc2V0X2V4dF9jdHJscyhoZGwsIGNzLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9zX2V4dF9jdHJscyk7CisKK2ludCB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3MpCit7CisJcmV0dXJuIHRyeV9zZXRfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGNzLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfc3ViZGV2X3RyeV9leHRfY3RybHMpOworCitpbnQgdjRsMl9zdWJkZXZfc19leHRfY3RybHMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcykKK3sKKwlyZXR1cm4gdHJ5X3NldF9leHRfY3RybHMoc2QtPmN0cmxfaGFuZGxlciwgY3MsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTCh2NGwyX3N1YmRldl9zX2V4dF9jdHJscyk7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgVklESU9DX1NfQ1RSTCBjb21wYXRpYmlsaXR5ICovCitzdGF0aWMgaW50IHNldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHMzMiAqdmFsKQoreworCXN0cnVjdCB2NGwyX2N0cmwgKm1hc3RlciA9IGN0cmwtPmNsdXN0ZXJbMF07CisJaW50IHJldDsKKwlpbnQgaTsKKworCXY0bDJfY3RybF9sb2NrKGN0cmwpOworCisJLyogUmVzZXQgdGhlICdoYXNfbmV3JyBmbGFncyBvZiB0aGUgY2x1c3RlciAqLworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm5jb250cm9sczsgaSsrKQorCQlpZiAobWFzdGVyLT5jbHVzdGVyW2ldKQorCQkJbWFzdGVyLT5jbHVzdGVyW2ldLT5oYXNfbmV3ID0gMDsKKworCWN0cmwtPnZhbCA9ICp2YWw7CisJY3RybC0+aGFzX25ldyA9IDE7CisJcmV0ID0gdHJ5X29yX3NldF9jb250cm9sX2NsdXN0ZXIobWFzdGVyLCBmYWxzZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IHRyeV9vcl9zZXRfY29udHJvbF9jbHVzdGVyKG1hc3RlciwgdHJ1ZSk7CisJKnZhbCA9IGN0cmwtPmN1ci52YWw7CisJdjRsMl9jdHJsX3VubG9jayhjdHJsKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdjRsMl9zX2N0cmwoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCit7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybCA9IHY0bDJfY3RybF9maW5kKGhkbCwgY29udHJvbC0+aWQpOworCisJaWYgKGN0cmwgPT0gTlVMTCB8fCAhdHlwZV9pc19pbnQoY3RybCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNldF9jdHJsKGN0cmwsICZjb250cm9sLT52YWx1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKHY0bDJfc19jdHJsKTsKKworaW50IHY0bDJfc3ViZGV2X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjb250cm9sKQoreworCXJldHVybiB2NGwyX3NfY3RybChzZC0+Y3RybF9oYW5kbGVyLCBjb250cm9sKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9zdWJkZXZfc19jdHJsKTsKKworaW50IHY0bDJfY3RybF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCwgczMyIHZhbCkKK3sKKwkvKiBJdCdzIGEgZHJpdmVyIGJ1ZyBpZiB0aGlzIGhhcHBlbnMuICovCisJV0FSTl9PTighdHlwZV9pc19pbnQoY3RybCkpOworCXJldHVybiBzZXRfY3RybChjdHJsLCAmdmFsKTsKK30KK0VYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3NfY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKaW5kZXggOWU4OWJmNi4uY2I3NzE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTIxNSwyOCArMjE2LDI0IEBACiAJcmV0dXJuIHZkZXYtPmZvcHMtPnBvbGwoZmlscCwgcG9sbCk7CiB9CiAKLXN0YXRpYyBpbnQgdjRsMl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyB2NGwyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwlpbnQgcmV0OwogCi0JaWYgKCF2ZGV2LT5mb3BzLT5pb2N0bCkKLQkJcmV0dXJuIC1FTk9UVFk7CiAJLyogQWxsb3cgaW9jdGwgdG8gY29udGludWUgZXZlbiBpZiB0aGUgZGV2aWNlIHdhcyB1bnJlZ2lzdGVyZWQuCiAJICAgVGhpbmdzIGxpa2UgZGVxdWV1ZWluZyBidWZmZXJzIG1pZ2h0IHN0aWxsIGJlIHVzZWZ1bC4gKi8KLQlyZXR1cm4gdmRldi0+Zm9wcy0+aW9jdGwoZmlscCwgY21kLCBhcmcpOwotfQorCWlmICh2ZGV2LT5mb3BzLT51bmxvY2tlZF9pb2N0bCkgeworCQlyZXQgPSB2ZGV2LT5mb3BzLT51bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7CisJfSBlbHNlIGlmICh2ZGV2LT5mb3BzLT5pb2N0bCkgeworCQkvKiBUT0RPOiBjb252ZXJ0IGFsbCBkcml2ZXJzIHRvIHVubG9ja2VkX2lvY3RsICovCisJCWxvY2tfa2VybmVsKCk7CisJCXJldCA9IHZkZXYtPmZvcHMtPmlvY3RsKGZpbHAsIGNtZCwgYXJnKTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCX0gZWxzZQorCQlyZXQgPSAtRU5PVFRZOwogCi1zdGF0aWMgbG9uZyB2NGwyX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAotCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKLQotCWlmICghdmRldi0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwpCi0JCXJldHVybiAtRU5PVFRZOwotCS8qIEFsbG93IGlvY3RsIHRvIGNvbnRpbnVlIGV2ZW4gaWYgdGhlIGRldmljZSB3YXMgdW5yZWdpc3RlcmVkLgotCSAgIFRoaW5ncyBsaWtlIGRlcXVldWVpbmcgYnVmZmVycyBtaWdodCBzdGlsbCBiZSB1c2VmdWwuICovCi0JcmV0dXJuIHZkZXYtPmZvcHMtPnVubG9ja2VkX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtMzA3LDIyICszMDQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY0bDJfdW5sb2NrZWRfZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucmVhZCA9IHY0bDJfcmVhZCwKLQkud3JpdGUgPSB2NGwyX3dyaXRlLAotCS5vcGVuID0gdjRsMl9vcGVuLAotCS5nZXRfdW5tYXBwZWRfYXJlYSA9IHY0bDJfZ2V0X3VubWFwcGVkX2FyZWEsCi0JLm1tYXAgPSB2NGwyX21tYXAsCi0JLnVubG9ja2VkX2lvY3RsID0gdjRsMl91bmxvY2tlZF9pb2N0bCwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9pb2N0bCA9IHY0bDJfY29tcGF0X2lvY3RsMzIsCi0jZW5kaWYKLQkucmVsZWFzZSA9IHY0bDJfcmVsZWFzZSwKLQkucG9sbCA9IHY0bDJfcG9sbCwKLQkubGxzZWVrID0gbm9fbGxzZWVrLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjRsMl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gdjRsMl9yZWFkLApAQCAtMzMwLDcgKzMxMSw3IEBACiAJLm9wZW4gPSB2NGwyX29wZW4sCiAJLmdldF91bm1hcHBlZF9hcmVhID0gdjRsMl9nZXRfdW5tYXBwZWRfYXJlYSwKIAkubW1hcCA9IHY0bDJfbW1hcCwKLQkuaW9jdGwgPSB2NGwyX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IHY0bDJfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwgPSB2NGwyX2NvbXBhdF9pb2N0bDMyLAogI2VuZGlmCkBAIC00NDcsOCArNDI4LDEyIEBACiAKIAl2ZGV2LT52ZmxfdHlwZSA9IHR5cGU7CiAJdmRldi0+Y2RldiA9IE5VTEw7Ci0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5kZXYpCi0JCXZkZXYtPnBhcmVudCA9IHZkZXYtPnY0bDJfZGV2LT5kZXY7CisJaWYgKHZkZXYtPnY0bDJfZGV2KSB7CisJCWlmICh2ZGV2LT52NGwyX2Rldi0+ZGV2KQorCQkJdmRldi0+cGFyZW50ID0gdmRldi0+djRsMl9kZXYtPmRldjsKKwkJaWYgKHZkZXYtPmN0cmxfaGFuZGxlciA9PSBOVUxMKQorCQkJdmRldi0+Y3RybF9oYW5kbGVyID0gdmRldi0+djRsMl9kZXYtPmN0cmxfaGFuZGxlcjsKKwl9CiAKIAkvKiBQYXJ0IDI6IGZpbmQgYSBmcmVlIG1pbm9yLCBkZXZpY2Ugbm9kZSBudW1iZXIgYW5kIGRldmljZSBpbmRleC4gKi8KICNpZmRlZiBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTCkBAIC01MjEsMTAgKzUwNiw3IEBACiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JaWYgKHZkZXYtPmZvcHMtPnVubG9ja2VkX2lvY3RsKQotCQl2ZGV2LT5jZGV2LT5vcHMgPSAmdjRsMl91bmxvY2tlZF9mb3BzOwotCWVsc2UKLQkJdmRldi0+Y2Rldi0+b3BzID0gJnY0bDJfZm9wczsKKwl2ZGV2LT5jZGV2LT5vcHMgPSAmdjRsMl9mb3BzOwogCXZkZXYtPmNkZXYtPm93bmVyID0gdmRldi0+Zm9wcy0+b3duZXI7CiAJcmV0ID0gY2Rldl9hZGQodmRldi0+Y2RldiwgTUtERVYoVklERU9fTUFKT1IsIHZkZXYtPm1pbm9yKSwgMSk7CiAJaWYgKHJldCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwppbmRleCA1YTdkYzRhLi4wYjA4Zjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KIAogaW50IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKQEAgLTExNSw2ICsxMTYsOCBAQAogaW50IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2LAogCQkJCQkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlpbnQgZXJyOworCiAJLyogQ2hlY2sgZm9yIHZhbGlkIGlucHV0ICovCiAJaWYgKHY0bDJfZGV2ID09IE5VTEwgfHwgc2QgPT0gTlVMTCB8fCAhc2QtPm5hbWVbMF0pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIyLDYgKzEyNSwxMCBAQAogCVdBUk5fT04oc2QtPnY0bDJfZGV2ICE9IE5VTEwpOwogCWlmICghdHJ5X21vZHVsZV9nZXQoc2QtPm93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7CisJLyogVGhpcyBqdXN0IHJldHVybnMgMCBpZiBlaXRoZXIgb2YgdGhlIHR3byBhcmdzIGlzIE5VTEwgKi8KKwllcnIgPSB2NGwyX2N0cmxfYWRkX2hhbmRsZXIodjRsMl9kZXYtPmN0cmxfaGFuZGxlciwgc2QtPmN0cmxfaGFuZGxlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlzZC0+djRsMl9kZXYgPSB2NGwyX2RldjsKIAlzcGluX2xvY2soJnY0bDJfZGV2LT5sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZzZC0+bGlzdCwgJnY0bDJfZGV2LT5zdWJkZXZzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggMGVlY2VhZS4uZGQ5MjgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWZoLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgpAQCAtMTI1OSw5ICsxMjYwLDEyIEBACiAJewogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnAgPSBhcmc7CiAKLQkJaWYgKCFvcHMtPnZpZGlvY19xdWVyeWN0cmwpCisJCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfcXVlcnljdHJsKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAob3BzLT52aWRpb2NfcXVlcnljdHJsKQorCQkJcmV0ID0gb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBwKTsKKwkJZWxzZQogCQkJYnJlYWs7Ci0JCXJldCA9IG9wcy0+dmlkaW9jX3F1ZXJ5Y3RybChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImlkPTB4JXgsIHR5cGU9JWQsIG5hbWU9JXMsIG1pbi9tYXg9JWQvJWQsICIKIAkJCQkJInN0ZXA9JWQsIGRlZmF1bHQ9JWQsIGZsYWdzPTB4JTA4eFxuIiwKQEAgLTEyNzYsNyArMTI4MCw5IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpwID0gYXJnOwogCi0JCWlmIChvcHMtPnZpZGlvY19nX2N0cmwpCisJCWlmICh2ZmQtPmN0cmxfaGFuZGxlcikKKwkJCXJldCA9IHY0bDJfZ19jdHJsKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAob3BzLT52aWRpb2NfZ19jdHJsKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19jdHJsKGZpbGUsIGZoLCBwKTsKIAkJZWxzZSBpZiAob3BzLT52aWRpb2NfZ19leHRfY3RybHMpIHsKIAkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyBjdHJsczsKQEAgLTEzMDYsMTEgKzEzMTIsMTYgQEAKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzIGN0cmxzOwogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCBjdHJsOwogCi0JCWlmICghb3BzLT52aWRpb2Nfc19jdHJsICYmICFvcHMtPnZpZGlvY19zX2V4dF9jdHJscykKKwkJaWYgKCF2ZmQtPmN0cmxfaGFuZGxlciAmJgorCQkJIW9wcy0+dmlkaW9jX3NfY3RybCAmJiAhb3BzLT52aWRpb2Nfc19leHRfY3RybHMpCiAJCQlicmVhazsKIAogCQlkYmdhcmcoY21kLCAiaWQ9MHgleCwgdmFsdWU9JWRcbiIsIHAtPmlkLCBwLT52YWx1ZSk7CiAKKwkJaWYgKHZmZC0+Y3RybF9oYW5kbGVyKSB7CisJCQlyZXQgPSB2NGwyX3NfY3RybCh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CisJCQlicmVhazsKKwkJfQogCQlpZiAob3BzLT52aWRpb2Nfc19jdHJsKSB7CiAJCQlyZXQgPSBvcHMtPnZpZGlvY19zX2N0cmwoZmlsZSwgZmgsIHApOwogCQkJYnJlYWs7CkBAIC0xMzMyLDEwICsxMzQzLDEyIEBACiAJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqcCA9IGFyZzsKIAogCQlwLT5lcnJvcl9pZHggPSBwLT5jb3VudDsKLQkJaWYgKCFvcHMtPnZpZGlvY19nX2V4dF9jdHJscykKLQkJCWJyZWFrOwotCQlpZiAoY2hlY2tfZXh0X2N0cmxzKHAsIDApKQorCQlpZiAodmZkLT5jdHJsX2hhbmRsZXIpCisJCQlyZXQgPSB2NGwyX2dfZXh0X2N0cmxzKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAob3BzLT52aWRpb2NfZ19leHRfY3RybHMgJiYgY2hlY2tfZXh0X2N0cmxzKHAsIDApKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfZ19leHRfY3RybHMoZmlsZSwgZmgsIHApOworCQllbHNlCisJCQlicmVhazsKIAkJdjRsX3ByaW50X2V4dF9jdHJscyhjbWQsIHZmZCwgcCwgIXJldCk7CiAJCWJyZWFrOwogCX0KQEAgLTEzNDQsMTAgKzEzNTcsMTIgQEAKIAkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpwID0gYXJnOwogCiAJCXAtPmVycm9yX2lkeCA9IHAtPmNvdW50OwotCQlpZiAoIW9wcy0+dmlkaW9jX3NfZXh0X2N0cmxzKQorCQlpZiAoIXZmZC0+Y3RybF9oYW5kbGVyICYmICFvcHMtPnZpZGlvY19zX2V4dF9jdHJscykKIAkJCWJyZWFrOwogCQl2NGxfcHJpbnRfZXh0X2N0cmxzKGNtZCwgdmZkLCBwLCAxKTsKLQkJaWYgKGNoZWNrX2V4dF9jdHJscyhwLCAwKSkKKwkJaWYgKHZmZC0+Y3RybF9oYW5kbGVyKQorCQkJcmV0ID0gdjRsMl9zX2V4dF9jdHJscyh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CisJCWVsc2UgaWYgKGNoZWNrX2V4dF9jdHJscyhwLCAwKSkKIAkJCXJldCA9IG9wcy0+dmlkaW9jX3NfZXh0X2N0cmxzKGZpbGUsIGZoLCBwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTM1NiwxMCArMTM3MSwxMiBAQAogCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKnAgPSBhcmc7CiAKIAkJcC0+ZXJyb3JfaWR4ID0gcC0+Y291bnQ7Ci0JCWlmICghb3BzLT52aWRpb2NfdHJ5X2V4dF9jdHJscykKKwkJaWYgKCF2ZmQtPmN0cmxfaGFuZGxlciAmJiAhb3BzLT52aWRpb2NfdHJ5X2V4dF9jdHJscykKIAkJCWJyZWFrOwogCQl2NGxfcHJpbnRfZXh0X2N0cmxzKGNtZCwgdmZkLCBwLCAxKTsKLQkJaWYgKGNoZWNrX2V4dF9jdHJscyhwLCAwKSkKKwkJaWYgKHZmZC0+Y3RybF9oYW5kbGVyKQorCQkJcmV0ID0gdjRsMl90cnlfZXh0X2N0cmxzKHZmZC0+Y3RybF9oYW5kbGVyLCBwKTsKKwkJZWxzZSBpZiAoY2hlY2tfZXh0X2N0cmxzKHAsIDApKQogCQkJcmV0ID0gb3BzLT52aWRpb2NfdHJ5X2V4dF9jdHJscyhmaWxlLCBmaCwgcCk7CiAJCWJyZWFrOwogCX0KQEAgLTEzNjcsOSArMTM4NCwxMiBAQAogCXsKIAkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpwID0gYXJnOwogCi0JCWlmICghb3BzLT52aWRpb2NfcXVlcnltZW51KQorCQlpZiAodmZkLT5jdHJsX2hhbmRsZXIpCisJCQlyZXQgPSB2NGwyX3F1ZXJ5bWVudSh2ZmQtPmN0cmxfaGFuZGxlciwgcCk7CisJCWVsc2UgaWYgKG9wcy0+dmlkaW9jX3F1ZXJ5bWVudSkKKwkJCXJldCA9IG9wcy0+dmlkaW9jX3F1ZXJ5bWVudShmaWxlLCBmaCwgcCk7CisJCWVsc2UKIAkJCWJyZWFrOwotCQlyZXQgPSBvcHMtPnZpZGlvY19xdWVyeW1lbnUoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJpZD0weCV4LCBpbmRleD0lZCwgbmFtZT0lc1xuIiwKIAkJCQlwLT5pZCwgcC0+aW5kZXgsIHAtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKaW5kZXggYTExYjk5Yi4uZDU5NjU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCkBAIC0yNywxMSArMjcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigid204NzM5IGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiVC4gQWRhY2hpLCBIYW5zIFZlcmt1aWwiKTsKQEAgLTU0LDEyICs1NCwxNCBAQAogCiBzdHJ1Y3Qgd204NzM5X3N0YXRlIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsKKwlzdHJ1Y3QgeworCQkvKiBhdWRpbyBjbHVzdGVyICovCisJCXN0cnVjdCB2NGwyX2N0cmwgKnZvbHVtZTsKKwkJc3RydWN0IHY0bDJfY3RybCAqbXV0ZTsKKwkJc3RydWN0IHY0bDJfY3RybCAqYmFsYW5jZTsKKwl9OwogCXUzMiBjbG9ja19mcmVxOwotCXU4IG11dGVkOwotCXUxNiB2b2x1bWU7Ci0JdTE2IGJhbGFuY2U7Ci0JdTggdm9sX2w7IAkJLyogKzEyZEIgdG8gLTM0LjVkQiAxLjVkQiBzdGVwICg1Yml0KSBkZWY6MGRCICovCi0JdTggdm9sX3I7IAkJLyogKzEyZEIgdG8gLTM0LjVkQiAxLjVkQiBzdGVwICg1Yml0KSBkZWY6MGRCICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg3Mzlfc3RhdGUgKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCkBAIC02Nyw2ICs2OSwxMSBAQAogCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB3bTg3Mzlfc3RhdGUsIHNkKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRvX3NkKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHdtODczOV9zdGF0ZSwgaGRsKS0+c2Q7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IHdtODczOV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgcmVnLCB1MTYgdmFsKQpAQCAtODksNTggKzk2LDE3IEBACiAJcmV0dXJuIC0xOwogfQogCi0vKiB3cml0ZSByZWdzIHRvIHNldCBhdWRpbyB2b2x1bWUgZXRjICovCi1zdGF0aWMgdm9pZCB3bTg3Mzlfc2V0X2F1ZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCitzdGF0aWMgaW50IHdtODczOV9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKLQlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQl1MTYgbXV0ZSA9IHN0YXRlLT5tdXRlZCA/IDB4ODAgOiAwOwotCi0JLyogVm9sdW1lIHNldHRpbmc6IGJpdHMgMC00LCAweDFmID0gMTIgZEIsIDB4MDAgPSAtMzQuNSBkQgotCSAqIERlZmF1bHQgc2V0dGluZzogMHgxNyA9IDAgZEIKLQkgKi8KLQl3bTg3Mzlfd3JpdGUoc2QsIFIwLCAoc3RhdGUtPnZvbF9sICYgMHgxZikgfCBtdXRlKTsKLQl3bTg3Mzlfd3JpdGUoc2QsIFIxLCAoc3RhdGUtPnZvbF9yICYgMHgxZikgfCBtdXRlKTsKLX0KLQotc3RhdGljIGludCB3bTg3MzlfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IHdtODczOV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IHN0YXRlLT5tdXRlZDsKLQkJYnJlYWs7Ci0KLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+dm9sdW1lOwotCQlicmVhazsKLQotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YmFsYW5jZTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd204NzM5X3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoteworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAl1bnNpZ25lZCBpbnQgd29ya19sLCB3b3JrX3I7CisJdTggdm9sX2w7CS8qICsxMmRCIHRvIC0zNC41ZEIgMS41ZEIgc3RlcCAoNWJpdCkgZGVmOjBkQiAqLworCXU4IHZvbF9yOwkvKiArMTJkQiB0byAtMzQuNWRCIDEuNWRCIHN0ZXAgKDViaXQpIGRlZjowZEIgKi8KKwl1MTYgbXV0ZTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCXN0YXRlLT5tdXRlZCA9IGN0cmwtPnZhbHVlOwotCQlicmVhazsKLQogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlzdGF0ZS0+dm9sdW1lID0gY3RybC0+dmFsdWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQlzdGF0ZS0+YmFsYW5jZSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xNDgsNTIgKzExNCwyNSBAQAogCX0KIAogCS8qIG5vcm1hbGl6ZSAoIDY1NTM1IHRvIDAgLT4gMzEgdG8gMCAoMTJkQiB0byAtMzQuNWRCKSApICovCi0Jd29ya19sID0gKG1pbig2NTUzNiAtIHN0YXRlLT5iYWxhbmNlLCAzMjc2OCkgKiBzdGF0ZS0+dm9sdW1lKSAvIDMyNzY4OwotCXdvcmtfciA9IChtaW4oc3RhdGUtPmJhbGFuY2UsICh1MTYpMzI3NjgpICogc3RhdGUtPnZvbHVtZSkgLyAzMjc2ODsKKwl3b3JrX2wgPSAobWluKDY1NTM2IC0gc3RhdGUtPmJhbGFuY2UtPnZhbCwgMzI3NjgpICogc3RhdGUtPnZvbHVtZS0+dmFsKSAvIDMyNzY4OworCXdvcmtfciA9IChtaW4oc3RhdGUtPmJhbGFuY2UtPnZhbCwgMzI3NjgpICogc3RhdGUtPnZvbHVtZS0+dmFsKSAvIDMyNzY4OwogCi0Jc3RhdGUtPnZvbF9sID0gKGxvbmcpd29ya19sICogMzEgLyA2NTUzNTsKLQlzdGF0ZS0+dm9sX3IgPSAobG9uZyl3b3JrX3IgKiAzMSAvIDY1NTM1OworCXZvbF9sID0gKGxvbmcpd29ya19sICogMzEgLyA2NTUzNTsKKwl2b2xfciA9IChsb25nKXdvcmtfciAqIDMxIC8gNjU1MzU7CiAKIAkvKiBzZXQgYXVkaW8gdm9sdW1lIGV0Yy4gKi8KLQl3bTg3Mzlfc2V0X2F1ZGlvKHNkKTsKKwltdXRlID0gc3RhdGUtPm11dGUtPnZhbCA/IDB4ODAgOiAwOworCisJLyogVm9sdW1lIHNldHRpbmc6IGJpdHMgMC00LCAweDFmID0gMTIgZEIsIDB4MDAgPSAtMzQuNSBkQgorCSAqIERlZmF1bHQgc2V0dGluZzogMHgxNyA9IDAgZEIKKwkgKi8KKwl3bTg3Mzlfd3JpdGUoc2QsIFIwLCAodm9sX2wgJiAweDFmKSB8IG11dGUpOworCXdtODczOV93cml0ZShzZCwgUjEsICh2b2xfciAmIDB4MWYpIHwgbXV0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHdtODczOV9xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCi0JCS5kZWZhdWx0X3ZhbHVlID0gNTg4ODAsCi0JCS5mbGFncyAgICAgICAgID0gMCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sIHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkuZmxhZ3MgICAgICAgICA9IDAsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LCB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fQkFMQU5DRSwKLQkJLm5hbWUgICAgICAgICAgPSAiQmFsYW5jZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNS8xMDAsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCi0JCS5mbGFncyAgICAgICAgID0gMCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgaW50IHdtODczOV9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGF1ZGlvZnJlcSkKIHsKIAlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTIyMiwxOCArMTYxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTg3MzlfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTg3MzlfcWN0cmwpOyBpKyspCi0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHdtODczOV9xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmd204NzM5X3FjdHJsW2ldLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCXJldHVybiAtRUlOVkFMOwotfQotCiBzdGF0aWMgaW50IHdtODczOV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwpAQCAtMjQ2LDIxICsxNzMsMjYgQEAKIAlzdHJ1Y3Qgd204NzM5X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAogCXY0bDJfaW5mbyhzZCwgIkZyZXF1ZW5jeTogJXUgSHpcbiIsIHN0YXRlLT5jbG9ja19mcmVxKTsKLQl2NGwyX2luZm8oc2QsICJWb2x1bWUgTDogICUwMnglc1xuIiwgc3RhdGUtPnZvbF9sICYgMHgxZiwKLQkJCXN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7Ci0JdjRsMl9pbmZvKHNkLCAiVm9sdW1lIFI6ICAlMDJ4JXNcbiIsIHN0YXRlLT52b2xfciAmIDB4MWYsCi0JCQlzdGF0ZS0+bXV0ZWQgPyAiIChtdXRlZCkiIDogIiIpOworCXY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoJnN0YXRlLT5oZGwsIHNkLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHdtODczOV9jdHJsX29wcyA9IHsKKwkuc19jdHJsID0gd204NzM5X3NfY3RybCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204NzM5X2NvcmVfb3BzID0gewogCS5sb2dfc3RhdHVzID0gd204NzM5X2xvZ19zdGF0dXMsCiAJLmdfY2hpcF9pZGVudCA9IHdtODczOV9nX2NoaXBfaWRlbnQsCi0JLnF1ZXJ5Y3RybCA9IHdtODczOV9xdWVyeWN0cmwsCi0JLmdfY3RybCA9IHdtODczOV9nX2N0cmwsCi0JLnNfY3RybCA9IHdtODczOV9zX2N0cmwsCisJLmdfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfZ19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzLAorCS5zX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzLAorCS5nX2N0cmwgPSB2NGwyX3N1YmRldl9nX2N0cmwsCisJLnNfY3RybCA9IHY0bDJfc3ViZGV2X3NfY3RybCwKKwkucXVlcnljdHJsID0gdjRsMl9zdWJkZXZfcXVlcnljdHJsLAorCS5xdWVyeW1lbnUgPSB2NGwyX3N1YmRldl9xdWVyeW1lbnUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyB3bTg3MzlfYXVkaW9fb3BzID0gewpAQCAtMjg5LDE3ICsyMjEsMjggQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3Mzlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3Mzlfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ3bTg3Mzlfb3BzKTsKLQlzdGF0ZS0+dm9sX2wgPSAweDE3OyAvKiAwZEIgKi8KLQlzdGF0ZS0+dm9sX3IgPSAweDE3OyAvKiAwZEIgKi8KLQlzdGF0ZS0+bXV0ZWQgPSAwOwotCXN0YXRlLT5iYWxhbmNlID0gMzI3Njg7Ci0JLyogbm9ybWFsaXplICgxMmRCKDMxKSB0byAtMzQuNWRCKDApIFswZEIoMjMpXSAtPiA2NTUzNSB0byAwKSAqLwotCXN0YXRlLT52b2x1bWUgPSAoKGxvbmcpc3RhdGUtPnZvbF9sICsgMSkgKiA2NTUzNSAvIDMxOworCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnN0YXRlLT5oZGwsIDIpOworCXN0YXRlLT52b2x1bWUgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJndtODczOV9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1MDczNik7CisJc3RhdGUtPm11dGUgPSB2NGwyX2N0cmxfbmV3X3N0ZCgmc3RhdGUtPmhkbCwgJndtODczOV9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0FVRElPX01VVEUsIDAsIDEsIDEsIDApOworCXN0YXRlLT5iYWxhbmNlID0gdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5oZGwsICZ3bTg3MzlfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9BVURJT19CQUxBTkNFLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKKwlzZC0+Y3RybF9oYW5kbGVyID0gJnN0YXRlLT5oZGw7CisJaWYgKHN0YXRlLT5oZGwuZXJyb3IpIHsKKwkJaW50IGVyciA9IHN0YXRlLT5oZGwuZXJyb3I7CisKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmc3RhdGUtPmhkbCk7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJdjRsMl9jdHJsX2NsdXN0ZXIoMywgJnN0YXRlLT52b2x1bWUpOworCiAJc3RhdGUtPmNsb2NrX2ZyZXEgPSA0ODAwMDsKIAogCS8qIEluaXRpYWxpemUgd204NzM5ICovCkBAIC0zMTgsMTUgKzI2MSwxNyBAQAogCS8qIGFjdGl2YXRlICovCiAJd204NzM5X3dyaXRlKHNkLCBSOSwgMHgwMDEpOwogCS8qIHNldCB2b2x1bWUvbXV0ZSAqLwotCXdtODczOV9zZXRfYXVkaW8oc2QpOworCXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKCZzdGF0ZS0+aGRsKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3bTg3MzlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB3bTg3Mzlfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnN0YXRlLT5oZGwpOwogCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYwppbmRleCA1YzJiYTU5Li4yM2JhZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTg3NzUgZHJpdmVyIik7CkBAIC01Myw4ICs1NCw5IEBACiAKIHN0cnVjdCB3bTg3NzVfc3RhdGUgewogCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOworCXN0cnVjdCB2NGwyX2N0cmwgKm11dGU7CiAJdTggaW5wdXQ7CQkvKiBMYXN0IHNlbGVjdGVkIGlucHV0ICgwLTB4ZikgKi8KLQl1OCBtdXRlZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHdtODc3NV9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKQEAgLTYyLDYgKzY0LDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHdtODc3NV9zdGF0ZSwgc2QpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2NGwyX3N1YmRldiAqdG9fc2Qoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwlyZXR1cm4gJmNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3Qgd204Nzc1X3N0YXRlLCBoZGwpLT5zZDsKK30KKwogc3RhdGljIGludCB3bTg3NzVfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHJlZywgdTE2IHZhbCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CkBAIC05NSw3ICsxMDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJc3RhdGUtPmlucHV0ID0gaW5wdXQ7Ci0JaWYgKHN0YXRlLT5tdXRlZCkKKwlpZiAoIXY0bDJfY3RybF9nX2N0cmwoc3RhdGUtPm11dGUpKQogCQlyZXR1cm4gMDsKIAl3bTg3NzVfd3JpdGUoc2QsIFIyMSwgMHgwYzApOwogCXdtODc3NV93cml0ZShzZCwgUjE0LCAweDFkNCk7CkBAIC0xMDQsMjkgKzExMSwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODc3NV9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgd204Nzc1X3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQogeworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSB0b19zZChjdHJsKTsKIAlzdHJ1Y3Qgd204Nzc1X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAotCWlmIChjdHJsLT5pZCAhPSBWNEwyX0NJRF9BVURJT19NVVRFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQljdHJsLT52YWx1ZSA9IHN0YXRlLT5tdXRlZDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bTg3NzVfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlpZiAoY3RybC0+aWQgIT0gVjRMMl9DSURfQVVESU9fTVVURSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RhdGUtPm11dGVkID0gY3RybC0+dmFsdWU7Ci0Jd204Nzc1X3dyaXRlKHNkLCBSMjEsIDB4MGMwKTsKLQl3bTg3NzVfd3JpdGUoc2QsIFIxNCwgMHgxZDQpOwotCXdtODc3NV93cml0ZShzZCwgUjE1LCAweDFkNCk7Ci0JaWYgKCFzdGF0ZS0+bXV0ZWQpCi0JCXdtODc3NV93cml0ZShzZCwgUjIxLCAweDEwMCArIHN0YXRlLT5pbnB1dCk7Ci0JcmV0dXJuIDA7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJd204Nzc1X3dyaXRlKHNkLCBSMjEsIDB4MGMwKTsKKwkJd204Nzc1X3dyaXRlKHNkLCBSMTQsIDB4MWQ0KTsKKwkJd204Nzc1X3dyaXRlKHNkLCBSMTUsIDB4MWQ0KTsKKwkJaWYgKCFjdHJsLT52YWwpCisJCQl3bTg3NzVfd3JpdGUoc2QsIFIyMSwgMHgxMDAgKyBzdGF0ZS0+aW5wdXQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgd204Nzc1X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKQEAgLTE0MCw4ICsxMzksOCBAQAogewogCXN0cnVjdCB3bTg3NzVfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCi0JdjRsMl9pbmZvKHNkLCAiSW5wdXQ6ICVkJXNcbiIsIHN0YXRlLT5pbnB1dCwKLQkJCXN0YXRlLT5tdXRlZCA/ICIgKG11dGVkKSIgOiAiIik7CisJdjRsMl9pbmZvKHNkLCAiSW5wdXQ6ICVkXG4iLCBzdGF0ZS0+aW5wdXQpOworCXY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoJnN0YXRlLT5oZGwsIHNkLT5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyLDExICsxNjEsMjAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHdtODc3NV9jdHJsX29wcyA9IHsKKwkuc19jdHJsID0gd204Nzc1X3NfY3RybCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204Nzc1X2NvcmVfb3BzID0gewogCS5sb2dfc3RhdHVzID0gd204Nzc1X2xvZ19zdGF0dXMsCiAJLmdfY2hpcF9pZGVudCA9IHdtODc3NV9nX2NoaXBfaWRlbnQsCi0JLmdfY3RybCA9IHdtODc3NV9nX2N0cmwsCi0JLnNfY3RybCA9IHdtODc3NV9zX2N0cmwsCisJLmdfZXh0X2N0cmxzID0gdjRsMl9zdWJkZXZfZ19leHRfY3RybHMsCisJLnRyeV9leHRfY3RybHMgPSB2NGwyX3N1YmRldl90cnlfZXh0X2N0cmxzLAorCS5zX2V4dF9jdHJscyA9IHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzLAorCS5nX2N0cmwgPSB2NGwyX3N1YmRldl9nX2N0cmwsCisJLnNfY3RybCA9IHY0bDJfc3ViZGV2X3NfY3RybCwKKwkucXVlcnljdHJsID0gdjRsMl9zdWJkZXZfcXVlcnljdHJsLAorCS5xdWVyeW1lbnUgPSB2NGwyX3N1YmRldl9xdWVyeW1lbnUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyB3bTg3NzVfdHVuZXJfb3BzID0gewpAQCAtMjA1LDEzICsyMTMsMjQgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHdtODc3NV9zdGF0ZSksIEdGUF9LRVJORUwpOworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODc3NV9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzZCA9ICZzdGF0ZS0+c2Q7CiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJndtODc3NV9vcHMpOwogCXN0YXRlLT5pbnB1dCA9IDI7Ci0Jc3RhdGUtPm11dGVkID0gMDsKKworCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnN0YXRlLT5oZGwsIDEpOworCXN0YXRlLT5tdXRlID0gdjRsMl9jdHJsX25ld19zdGQoJnN0YXRlLT5oZGwsICZ3bTg3NzVfY3RybF9vcHMsCisJCQlWNEwyX0NJRF9BVURJT19NVVRFLCAwLCAxLCAxLCAwKTsKKwlzZC0+Y3RybF9oYW5kbGVyID0gJnN0YXRlLT5oZGw7CisJaWYgKHN0YXRlLT5oZGwuZXJyb3IpIHsKKwkJaW50IGVyciA9IHN0YXRlLT5oZGwuZXJyb3I7CisKKwkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmc3RhdGUtPmhkbCk7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHdtODc3NSAqLwogCkBAIC0yNDgsOSArMjY3LDExIEBACiBzdGF0aWMgaW50IHdtODc3NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHdtODc3NV9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKIAl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7Ci0Ja2ZyZWUodG9fc3RhdGUoc2QpKTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZzdGF0ZS0+aGRsKTsKKwlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tc3Byb19ibG9jay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKaW5kZXggODMyN2UyNC4uZDNmMWEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21zcHJvX2Jsb2NrLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tZW1zdGljay5oPgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtc3Byb19ibG9jayIKQEAgLTE3OSw2ICsxODAsNyBAQAogCXN0cnVjdCBtc3Byb19ibG9ja19kYXRhICptc2IgPSBkaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IHJjID0gLUVOWElPOwogCisJbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZtc3Byb19ibG9ja19kaXNrX2xvY2spOwogCiAJaWYgKG1zYiAmJiBtc2ItPmNhcmQpIHsKQEAgLTE5MCw2ICsxOTIsNyBAQAogCX0KIAogCW11dGV4X3VubG9jaygmbXNwcm9fYmxvY2tfZGlza19sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMjEsNyArMjI0LDExIEBACiAKIHN0YXRpYyBpbnQgbXNwcm9fYmxvY2tfYmRfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXJldHVybiBtc3Byb19ibG9ja19kaXNrX3JlbGVhc2UoZGlzayk7CisJaW50IHJldDsKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IG1zcHJvX2Jsb2NrX2Rpc2tfcmVsZWFzZShkaXNrKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBtc3Byb19ibG9ja19iZF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKQEAgLTgwNSw3ICs4MTIsOCBAQAogCiBzdGF0aWMgaW50IG1zcHJvX2Jsb2NrX3ByZXBhcmVfcmVxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewotCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSAmJiAhYmxrX3BjX3JlcXVlc3QocmVxKSkgeworCWlmIChyZXEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTICYmCisJICAgIHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocmVxLCAiTVNQcm8gdW5zdXBwb3J0ZWQgcmVxdWVzdCIpOwogCQlyZXR1cm4gQkxLUFJFUF9LSUxMOwogCX0KQEAgLTEwNDAsNiArMTA0OCw3IEBACiAJCQlzbnByaW50ZihzX2F0dHItPm5hbWUsIHNpemVvZihzX2F0dHItPm5hbWUpLAogCQkJCSAiYXR0cl94JTAyeCIsIGF0dHItPmVudHJpZXNbY250XS5pZCk7CiAKKwkJc3lzZnNfYXR0cl9pbml0KCZzX2F0dHItPmRldl9hdHRyLmF0dHIpOwogCQlzX2F0dHItPmRldl9hdHRyLmF0dHIubmFtZSA9IHNfYXR0ci0+bmFtZTsKIAkJc19hdHRyLT5kZXZfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVUdPOwogCQlzX2F0dHItPmRldl9hdHRyLnNob3cgPSBtc3Byb19ibG9ja19hdHRyX3Nob3coc19hdHRyLT5pZCk7CkBAIC0xMzMwLDEzICsxMzM5LDE0IEBACiAJc3RydWN0IG1zcHJvX2Jsb2NrX2RhdGEgKm1zYiA9IG1lbXN0aWNrX2dldF9kcnZkYXRhKGNhcmQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZWxfZ2VuZGlzayhtc2ItPmRpc2spOwotCWRldl9kYmcoJmNhcmQtPmRldiwgIm1zcHJvIGJsb2NrIHJlbW92ZVxuIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1zYi0+cV9sb2NrLCBmbGFncyk7CiAJbXNiLT5lamVjdCA9IDE7CiAJYmxrX3N0YXJ0X3F1ZXVlKG1zYi0+cXVldWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zYi0+cV9sb2NrLCBmbGFncyk7CiAKKwlkZWxfZ2VuZGlzayhtc2ItPmRpc2spOworCWRldl9kYmcoJmNhcmQtPmRldiwgIm1zcHJvIGJsb2NrIHJlbW92ZVxuIik7CisKIAlibGtfY2xlYW51cF9xdWV1ZShtc2ItPnF1ZXVlKTsKIAltc2ItPnF1ZXVlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwppbmRleCBiODhhMjQ0Li5jNTQ2NzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yMDAsMTIgKzIwMSw5IEBACiBzdGF0aWMgaW50CW1wdF9ob3N0X3BhZ2VfYWxsb2MoTVBUX0FEQVBURVIgKmlvYywgcElPQ0luaXRfdCBpb2NfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludAlwcm9jbXB0X3N1bW1hcnlfcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJCWludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50CXByb2NtcHRfdmVyc2lvbl9yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQJcHJvY21wdF9pb2NpbmZvX3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQlpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXB0X3N1bW1hcnlfcHJvY19mb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXB0X3ZlcnNpb25fcHJvY19mb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXB0X2lvY2luZm9fcHJvY19mb3BzOwogI2VuZGlmCiBzdGF0aWMgdm9pZAltcHRfZ2V0X2Z3X2V4cF92ZXIoY2hhciAqYnVmLCBNUFRfQURBUFRFUiAqaW9jKTsKIApAQCAtMTcyNSw3ICsxNzIzLDcgQEAKIAl1OAkJIHBjaXhjbWQ7CiAJc3RhdGljIGludAkgbXB0X2lkcyA9IDA7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlbnQsICplbnQ7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZW50OwogI2VuZGlmCiAKIAlpb2MgPSBremFsbG9jKHNpemVvZihNUFRfQURBUFRFUiksIEdGUF9BVE9NSUMpOwpAQCAtMTk4MCwxNiArMTk3OCw4IEBACiAJICovCiAJZGVudCA9IHByb2NfbWtkaXIoaW9jLT5uYW1lLCBtcHRfcHJvY19yb290X2Rpcik7CiAJaWYgKGRlbnQpIHsKLQkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoImluZm8iLCBTX0lGUkVHfFNfSVJVR08sIGRlbnQpOwotCQlpZiAoZW50KSB7Ci0JCQllbnQtPnJlYWRfcHJvYyA9IHByb2NtcHRfaW9jaW5mb19yZWFkOwotCQkJZW50LT5kYXRhID0gaW9jOwotCQl9Ci0JCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJzdW1tYXJ5IiwgU19JRlJFR3xTX0lSVUdPLCBkZW50KTsKLQkJaWYgKGVudCkgewotCQkJZW50LT5yZWFkX3Byb2MgPSBwcm9jbXB0X3N1bW1hcnlfcmVhZDsKLQkJCWVudC0+ZGF0YSA9IGlvYzsKLQkJfQorCQlwcm9jX2NyZWF0ZV9kYXRhKCJpbmZvIiwgU19JUlVHTywgZGVudCwgJm1wdF9pb2NpbmZvX3Byb2NfZm9wcywgaW9jKTsKKwkJcHJvY19jcmVhdGVfZGF0YSgic3VtbWFyeSIsIFNfSVJVR08sIGRlbnQsICZtcHRfc3VtbWFyeV9wcm9jX2ZvcHMsIGlvYyk7CiAJfQogI2VuZGlmCiAKQEAgLTY1NDYsMjAgKzY1MzYsMTIgQEAKIHN0YXRpYyBpbnQKIHByb2NtcHRfY3JlYXRlKHZvaWQpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5CSplbnQ7Ci0KIAltcHRfcHJvY19yb290X2RpciA9IHByb2NfbWtkaXIoTVBUX1BST0NGU19NUFRCQVNFRElSLCBOVUxMKTsKIAlpZiAobXB0X3Byb2Nfcm9vdF9kaXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9URElSOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInN1bW1hcnkiLCBTX0lGUkVHfFNfSVJVR08sIG1wdF9wcm9jX3Jvb3RfZGlyKTsKLQlpZiAoZW50KQotCQllbnQtPnJlYWRfcHJvYyA9IHByb2NtcHRfc3VtbWFyeV9yZWFkOwotCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoInZlcnNpb24iLCBTX0lGUkVHfFNfSVJVR08sIG1wdF9wcm9jX3Jvb3RfZGlyKTsKLQlpZiAoZW50KQotCQllbnQtPnJlYWRfcHJvYyA9IHByb2NtcHRfdmVyc2lvbl9yZWFkOwotCisJcHJvY19jcmVhdGUoInN1bW1hcnkiLCBTX0lSVUdPLCBtcHRfcHJvY19yb290X2RpciwgJm1wdF9zdW1tYXJ5X3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoInZlcnNpb24iLCBTX0lSVUdPLCBtcHRfcHJvY19yb290X2RpciwgJm1wdF92ZXJzaW9uX3Byb2NfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1NzksNzAgKzY1NjEsNDYgQEAKIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwogLyoqCi0gKglwcm9jbXB0X3N1bW1hcnlfcmVhZCAtIEhhbmRsZSByZWFkIHJlcXVlc3Qgb2YgYSBzdW1tYXJ5IGZpbGUKLSAqCUBidWY6IFBvaW50ZXIgdG8gYXJlYSB0byB3cml0ZSBpbmZvcm1hdGlvbgotICoJQHN0YXJ0OiBQb2ludGVyIHRvIHN0YXJ0IHBvaW50ZXIKLSAqCUBvZmZzZXQ6IE9mZnNldCB0byBzdGFydCB3cml0aW5nCi0gKglAcmVxdWVzdDogQW1vdW50IG9mIHJlYWQgZGF0YSByZXF1ZXN0ZWQKLSAqCUBlb2Y6IFBvaW50ZXIgdG8gRU9GIGludGVnZXIKLSAqCUBkYXRhOiBQb2ludGVyCi0gKgogICoJSGFuZGxlcyByZWFkIHJlcXVlc3QgZnJvbSAvcHJvYy9tcHQvc3VtbWFyeSBvciAvcHJvYy9tcHQvaW9jTi9zdW1tYXJ5LgotICoJUmV0dXJucyBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIHByb2Nlc3MgcGVyZm9ybWluZyB0aGUgcmVhZC4KICAqLwotc3RhdGljIGludAotcHJvY21wdF9zdW1tYXJ5X3JlYWQoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgc2VxX21wdF9wcmludF9pb2Nfc3VtbWFyeShNUFRfQURBUFRFUiAqaW9jLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBzaG93bGFuKTsKKworc3RhdGljIGludCBtcHRfc3VtbWFyeV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCU1QVF9BREFQVEVSICppb2M7Ci0JY2hhciAqb3V0ID0gYnVmOwotCWludCBsZW47CisJTVBUX0FEQVBURVIgKmlvYyA9IG0tPnByaXZhdGU7CiAKLQlpZiAoZGF0YSkgewotCQlpbnQgbW9yZSA9IDA7Ci0KLQkJaW9jID0gZGF0YTsKLQkJbXB0X3ByaW50X2lvY19zdW1tYXJ5KGlvYywgb3V0LCAmbW9yZSwgMCwgMSk7Ci0KLQkJb3V0ICs9IG1vcmU7CisJaWYgKGlvYykgeworCQlzZXFfbXB0X3ByaW50X2lvY19zdW1tYXJ5KGlvYywgbSwgMSk7CiAJfSBlbHNlIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpb2MsICZpb2NfbGlzdCwgbGlzdCkgewotCQkJaW50CW1vcmUgPSAwOwotCi0JCQltcHRfcHJpbnRfaW9jX3N1bW1hcnkoaW9jLCBvdXQsICZtb3JlLCAwLCAxKTsKLQotCQkJb3V0ICs9IG1vcmU7Ci0JCQlpZiAoKG91dC1idWYpID49IHJlcXVlc3QpCi0JCQkJYnJlYWs7CisJCQlzZXFfbXB0X3ByaW50X2lvY19zdW1tYXJ5KGlvYywgbSwgMSk7CiAJCX0KIAl9CiAKLQlsZW4gPSBvdXQgLSBidWY7Ci0KLQlNUFRfUFJPQ19SRUFEX1JFVFVSTihidWYsc3RhcnQsb2Zmc2V0LHJlcXVlc3QsZW9mLGxlbik7CisJcmV0dXJuIDA7CiB9CiAKLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qKgotICoJcHJvY21wdF92ZXJzaW9uX3JlYWQgLSBIYW5kbGUgcmVhZCByZXF1ZXN0IGZyb20gL3Byb2MvbXB0L3ZlcnNpb24uCi0gKglAYnVmOiBQb2ludGVyIHRvIGFyZWEgdG8gd3JpdGUgaW5mb3JtYXRpb24KLSAqCUBzdGFydDogUG9pbnRlciB0byBzdGFydCBwb2ludGVyCi0gKglAb2Zmc2V0OiBPZmZzZXQgdG8gc3RhcnQgd3JpdGluZwotICoJQHJlcXVlc3Q6IEFtb3VudCBvZiByZWFkIGRhdGEgcmVxdWVzdGVkCi0gKglAZW9mOiBQb2ludGVyIHRvIEVPRiBpbnRlZ2VyCi0gKglAZGF0YTogUG9pbnRlcgotICoKLSAqCVJldHVybnMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBwcm9jZXNzIHBlcmZvcm1pbmcgdGhlIHJlYWQuCi0gKi8KLXN0YXRpYyBpbnQKLXByb2NtcHRfdmVyc2lvbl9yZWFkKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbXB0X3N1bW1hcnlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtcHRfc3VtbWFyeV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtcHRfc3VtbWFyeV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1wdF9zdW1tYXJ5X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBtcHRfdmVyc2lvbl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXU4CSBjYl9pZHg7CiAJaW50CSBzY3NpLCBmYywgc2FzLCBsYW4sIGN0bCwgdGFyZywgZG1wOwogCWNoYXIJKmRydm5hbWU7Ci0JaW50CSBsZW47CiAKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVzLSVzXG4iLCAibXB0bGludXgiLCBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04pOwotCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgIEZ1c2lvbiBNUFQgYmFzZSBkcml2ZXJcbiIpOworCXNlcV9wcmludGYobSwgIiVzLSVzXG4iLCAibXB0bGludXgiLCBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04pOworCXNlcV9wcmludGYobSwgIiAgRnVzaW9uIE1QVCBiYXNlIGRyaXZlclxuIik7CiAKIAlzY3NpID0gZmMgPSBzYXMgPSBsYW4gPSBjdGwgPSB0YXJnID0gZG1wID0gMDsKIAlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBjYl9pZHg7IGNiX2lkeC0tKSB7CkBAIC02NjcwLDk4ICs2NjI4LDk3IEBACiAJCQl9CiAKIAkJCWlmIChkcnZuYW1lKQotCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgIEZ1c2lvbiBNUFQgJXMgZHJpdmVyXG4iLCBkcnZuYW1lKTsKKwkJCQlzZXFfcHJpbnRmKG0sICIgIEZ1c2lvbiBNUFQgJXMgZHJpdmVyXG4iLCBkcnZuYW1lKTsKIAkJfQogCX0KIAotCU1QVF9QUk9DX1JFQURfUkVUVVJOKGJ1ZixzdGFydCxvZmZzZXQscmVxdWVzdCxlb2YsbGVuKTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwotLyoqCi0gKglwcm9jbXB0X2lvY2luZm9fcmVhZCAtIEhhbmRsZSByZWFkIHJlcXVlc3QgZnJvbSAvcHJvYy9tcHQvaW9jTi9pbmZvLgotICoJQGJ1ZjogUG9pbnRlciB0byBhcmVhIHRvIHdyaXRlIGluZm9ybWF0aW9uCi0gKglAc3RhcnQ6IFBvaW50ZXIgdG8gc3RhcnQgcG9pbnRlcgotICoJQG9mZnNldDogT2Zmc2V0IHRvIHN0YXJ0IHdyaXRpbmcKLSAqCUByZXF1ZXN0OiBBbW91bnQgb2YgcmVhZCBkYXRhIHJlcXVlc3RlZAotICoJQGVvZjogUG9pbnRlciB0byBFT0YgaW50ZWdlcgotICoJQGRhdGE6IFBvaW50ZXIKLSAqCi0gKglSZXR1cm5zIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gdG8gcHJvY2VzcyBwZXJmb3JtaW5nIHRoZSByZWFkLgotICovCi1zdGF0aWMgaW50Ci1wcm9jbXB0X2lvY2luZm9fcmVhZChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG1wdF92ZXJzaW9uX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlNUFRfQURBUFRFUgkqaW9jID0gZGF0YTsKLQlpbnQJCSBsZW47CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1wdF92ZXJzaW9uX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wdF92ZXJzaW9uX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbXB0X3ZlcnNpb25fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IG1wdF9pb2NpbmZvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJTVBUX0FEQVBURVIJKmlvYyA9IG0tPnByaXZhdGU7CiAJY2hhcgkJIGV4cFZlclszMl07CiAJaW50CQkgc3o7CiAJaW50CQkgcDsKIAogCW1wdF9nZXRfZndfZXhwX3ZlcihleHBWZXIsIGlvYyk7CiAKLQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVzOiIsIGlvYy0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJXM6IiwgaW9jLT5uYW1lKTsKIAlpZiAoaW9jLT5mYWN0cy5GbGFncyAmIE1QSV9JT0NGQUNUU19GTEFHU19GV19ET1dOTE9BRF9CT09UKQotCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICAoZi93IGRvd25sb2FkIGJvb3QgZmxhZyBzZXQpIik7CisJCXNlcV9wcmludGYobSwgIiAgKGYvdyBkb3dubG9hZCBib290IGZsYWcgc2V0KSIpOwogLy8JaWYgKGlvYy0+ZmFjdHMuSU9DRXhjZXB0aW9ucyAmIE1QSV9JT0NGQUNUU19FWENFUFRfQ09ORklHX0NIRUNLU1VNX0ZBSUwpCi0vLwkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgQ09ORklHX0NIRUNLU1VNX0ZBSUwhIik7CisvLwkJc2VxX3ByaW50ZihtLCAiICBDT05GSUdfQ0hFQ0tTVU1fRkFJTCEiKTsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJcbiAgUHJvZHVjdElEID0gMHglMDR4ICglcylcbiIsCisJc2VxX3ByaW50ZihtLCAiXG4gIFByb2R1Y3RJRCA9IDB4JTA0eCAoJXMpXG4iLAogCQkJaW9jLT5mYWN0cy5Qcm9kdWN0SUQsCiAJCQlpb2MtPnByb2RfbmFtZSk7Ci0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgRldWZXJzaW9uID0gMHglMDh4JXMiLCBpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkLCBleHBWZXIpOworCXNlcV9wcmludGYobSwgIiAgRldWZXJzaW9uID0gMHglMDh4JXMiLCBpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkLCBleHBWZXIpOwogCWlmIChpb2MtPmZhY3RzLkZXSW1hZ2VTaXplKQotCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiIChmd19zaXplPSVkKSIsIGlvYy0+ZmFjdHMuRldJbWFnZVNpemUpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJcbiAgTXNnVmVyc2lvbiA9IDB4JTA0eFxuIiwgaW9jLT5mYWN0cy5Nc2dWZXJzaW9uKTsKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICBGaXJzdFdob0luaXQgPSAweCUwMnhcbiIsIGlvYy0+Rmlyc3RXaG9Jbml0KTsKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICBFdmVudFN0YXRlID0gMHglMDJ4XG4iLCBpb2MtPmZhY3RzLkV2ZW50U3RhdGUpOworCQlzZXFfcHJpbnRmKG0sICIgKGZ3X3NpemU9JWQpIiwgaW9jLT5mYWN0cy5GV0ltYWdlU2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiXG4gIE1zZ1ZlcnNpb24gPSAweCUwNHhcbiIsIGlvYy0+ZmFjdHMuTXNnVmVyc2lvbik7CisJc2VxX3ByaW50ZihtLCAiICBGaXJzdFdob0luaXQgPSAweCUwMnhcbiIsIGlvYy0+Rmlyc3RXaG9Jbml0KTsKKwlzZXFfcHJpbnRmKG0sICIgIEV2ZW50U3RhdGUgPSAweCUwMnhcbiIsIGlvYy0+ZmFjdHMuRXZlbnRTdGF0ZSk7CiAKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICBDdXJyZW50SG9zdE1mYUhpZ2hBZGRyID0gMHglMDh4XG4iLAorCXNlcV9wcmludGYobSwgIiAgQ3VycmVudEhvc3RNZmFIaWdoQWRkciA9IDB4JTA4eFxuIiwKIAkJCWlvYy0+ZmFjdHMuQ3VycmVudEhvc3RNZmFIaWdoQWRkcik7Ci0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgQ3VycmVudFNlbnNlQnVmZmVySGlnaEFkZHIgPSAweCUwOHhcbiIsCisJc2VxX3ByaW50ZihtLCAiICBDdXJyZW50U2Vuc2VCdWZmZXJIaWdoQWRkciA9IDB4JTA4eFxuIiwKIAkJCWlvYy0+ZmFjdHMuQ3VycmVudFNlbnNlQnVmZmVySGlnaEFkZHIpOwogCi0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgTWF4Q2hhaW5EZXB0aCA9IDB4JTAyeCBmcmFtZXNcbiIsIGlvYy0+ZmFjdHMuTWF4Q2hhaW5EZXB0aCk7Ci0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgTWluQmxvY2tTaXplID0gMHglMDJ4IGJ5dGVzXG4iLCA0KmlvYy0+ZmFjdHMuQmxvY2tTaXplKTsKKwlzZXFfcHJpbnRmKG0sICIgIE1heENoYWluRGVwdGggPSAweCUwMnggZnJhbWVzXG4iLCBpb2MtPmZhY3RzLk1heENoYWluRGVwdGgpOworCXNlcV9wcmludGYobSwgIiAgTWluQmxvY2tTaXplID0gMHglMDJ4IGJ5dGVzXG4iLCA0KmlvYy0+ZmFjdHMuQmxvY2tTaXplKTsKIAotCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgIFJlcXVlc3RGcmFtZXMgQCAweCVwIChEbWEgQCAweCVwKVxuIiwKKwlzZXFfcHJpbnRmKG0sICIgIFJlcXVlc3RGcmFtZXMgQCAweCVwIChEbWEgQCAweCVwKVxuIiwKIAkJCQkJKHZvaWQgKilpb2MtPnJlcV9mcmFtZXMsICh2b2lkICopKHVsb25nKWlvYy0+cmVxX2ZyYW1lc19kbWEpOwogCS8qCiAJICogIFJvdW5kaW5nIFVQIHRvIG5lYXJlc3QgNC1rQiBib3VuZGFyeSBoZXJlLi4uCiAJICovCiAJc3ogPSAoaW9jLT5yZXFfc3ogKiBpb2MtPnJlcV9kZXB0aCkgKyAxMjg7CiAJc3ogPSAoKHN6ICsgMHgxMDAwVUwgLSAxVUwpIC8gMHgxMDAwKSAqIDB4MTAwMDsKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICAgIHtDdXJSZXFTej0lZH0geCB7Q3VyUmVxRGVwdGg9JWR9ID0gJWQgYnl0ZXMgXj0gMHgleFxuIiwKKwlzZXFfcHJpbnRmKG0sICIgICAge0N1clJlcVN6PSVkfSB4IHtDdXJSZXFEZXB0aD0lZH0gPSAlZCBieXRlcyBePSAweCV4XG4iLAogCQkJCQlpb2MtPnJlcV9zeiwgaW9jLT5yZXFfZGVwdGgsIGlvYy0+cmVxX3N6KmlvYy0+cmVxX2RlcHRoLCBzeik7Ci0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgICB7TWF4UmVxU3o9JWR9ICAge01heFJlcURlcHRoPSVkfVxuIiwKKwlzZXFfcHJpbnRmKG0sICIgICAge01heFJlcVN6PSVkfSAgIHtNYXhSZXFEZXB0aD0lZH1cbiIsCiAJCQkJCTQqaW9jLT5mYWN0cy5SZXF1ZXN0RnJhbWVTaXplLAogCQkJCQlpb2MtPmZhY3RzLkdsb2JhbENyZWRpdHMpOwogCi0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgRnJhbWVzICAgQCAweCVwIChEbWEgQCAweCVwKVxuIiwKKwlzZXFfcHJpbnRmKG0sICIgIEZyYW1lcyAgIEAgMHglcCAoRG1hIEAgMHglcClcbiIsCiAJCQkJCSh2b2lkICopaW9jLT5hbGxvYywgKHZvaWQgKikodWxvbmcpaW9jLT5hbGxvY19kbWEpOwogCXN6ID0gKGlvYy0+cmVwbHlfc3ogKiBpb2MtPnJlcGx5X2RlcHRoKSArIDEyODsKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICAgIHtDdXJSZXBTej0lZH0geCB7Q3VyUmVwRGVwdGg9JWR9ID0gJWQgYnl0ZXMgXj0gMHgleFxuIiwKKwlzZXFfcHJpbnRmKG0sICIgICAge0N1clJlcFN6PSVkfSB4IHtDdXJSZXBEZXB0aD0lZH0gPSAlZCBieXRlcyBePSAweCV4XG4iLAogCQkJCQlpb2MtPnJlcGx5X3N6LCBpb2MtPnJlcGx5X2RlcHRoLCBpb2MtPnJlcGx5X3N6KmlvYy0+cmVwbHlfZGVwdGgsIHN6KTsKLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICAgIHtNYXhSZXBTej0lZH0gICB7TWF4UmVwRGVwdGg9JWR9XG4iLAorCXNlcV9wcmludGYobSwgIiAgICB7TWF4UmVwU3o9JWR9ICAge01heFJlcERlcHRoPSVkfVxuIiwKIAkJCQkJaW9jLT5mYWN0cy5DdXJSZXBseUZyYW1lU2l6ZSwKIAkJCQkJaW9jLT5mYWN0cy5SZXBseVF1ZXVlRGVwdGgpOwogCi0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiAgTWF4RGV2aWNlcyA9ICVkXG4iLAorCXNlcV9wcmludGYobSwgIiAgTWF4RGV2aWNlcyA9ICVkXG4iLAogCQkJKGlvYy0+ZmFjdHMuTWF4RGV2aWNlcz09MCkgPyAyNTUgOiBpb2MtPmZhY3RzLk1heERldmljZXMpOwotCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgIE1heEJ1c2VzID0gJWRcbiIsIGlvYy0+ZmFjdHMuTWF4QnVzZXMpOworCXNlcV9wcmludGYobSwgIiAgTWF4QnVzZXMgPSAlZFxuIiwgaW9jLT5mYWN0cy5NYXhCdXNlcyk7CiAKIAkvKiBwZXItcG9ydCBpbmZvICovCiAJZm9yIChwPTA7IHAgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IHArKykgewotCQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiICBQb3J0TnVtYmVyID0gJWQgKG9mICVkKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICBQb3J0TnVtYmVyID0gJWQgKG9mICVkKVxuIiwKIAkJCQlwKzEsCiAJCQkJaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzKTsKIAkJaWYgKGlvYy0+YnVzX3R5cGUgPT0gRkMpIHsKIAkJCWlmIChpb2MtPnBmYWN0c1twXS5Qcm90b2NvbEZsYWdzICYgTVBJX1BPUlRGQUNUU19QUk9UT0NPTF9MQU4pIHsKIAkJCQl1OCAqYSA9ICh1OCopJmlvYy0+bGFuX2NuZmdfcGFnZTEuSGFyZHdhcmVBZGRyZXNzTG93OwotCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgICAgTGFuQWRkciA9ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAorCQkJCXNlcV9wcmludGYobSwgIiAgICBMYW5BZGRyID0gJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCiAJCQkJCQlhWzVdLCBhWzRdLCBhWzNdLCBhWzJdLCBhWzFdLCBhWzBdKTsKIAkJCX0KLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgICAgV1dOID0gJTA4WCUwOFg6JTA4WCUwOFhcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIgICAgV1dOID0gJTA4WCUwOFg6JTA4WCUwOFhcbiIsCiAJCQkJCWlvYy0+ZmNfcG9ydF9wYWdlMFtwXS5XV05OLkhpZ2gsCiAJCQkJCWlvYy0+ZmNfcG9ydF9wYWdlMFtwXS5XV05OLkxvdywKIAkJCQkJaW9jLT5mY19wb3J0X3BhZ2UwW3BdLldXUE4uSGlnaCwKQEAgLTY3NjksOSArNjcyNiwyMSBAQAogCQl9CiAJfQogCi0JTVBUX1BST0NfUkVBRF9SRVRVUk4oYnVmLHN0YXJ0LG9mZnNldCxyZXF1ZXN0LGVvZixsZW4pOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1wdF9pb2NpbmZvX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbXB0X2lvY2luZm9fcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXB0X2lvY2luZm9fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtcHRfaW9jaW5mb19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYJCS8qIENPTkZJR19QUk9DX0ZTIH0gKi8KIAogLyo9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0qLwpAQCAtNjgzNyw2ICs2ODA2LDM5IEBACiAKIAkqc2l6ZSA9IHk7CiB9CisKK3N0YXRpYyB2b2lkIHNlcV9tcHRfcHJpbnRfaW9jX3N1bW1hcnkoTVBUX0FEQVBURVIgKmlvYywgc3RydWN0IHNlcV9maWxlICptLCBpbnQgc2hvd2xhbikKK3sKKwljaGFyIGV4cFZlclszMl07CisKKwltcHRfZ2V0X2Z3X2V4cF92ZXIoZXhwVmVyLCBpb2MpOworCisJLyoKKwkgKiAgU2hvcnRlciBzdW1tYXJ5IG9mIGF0dGFjaGVkIGlvYydzLi4uCisJICovCisJc2VxX3ByaW50ZihtLCAiJXM6ICVzLCAlcyUwOHhoJXMsIFBvcnRzPSVkLCBNYXhRPSVkIiwKKwkJCWlvYy0+bmFtZSwKKwkJCWlvYy0+cHJvZF9uYW1lLAorCQkJTVBUX0ZXX1JFVl9NQUdJQ19JRF9TVFJJTkcsCS8qICJGd1Jldj0iIG9yIHNvbWVzdWNoICovCisJCQlpb2MtPmZhY3RzLkZXVmVyc2lvbi5Xb3JkLAorCQkJZXhwVmVyLAorCQkJaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAorCQkJaW9jLT5yZXFfZGVwdGgpOworCisJaWYgKHNob3dsYW4gJiYgKGlvYy0+cGZhY3RzWzBdLlByb3RvY29sRmxhZ3MgJiBNUElfUE9SVEZBQ1RTX1BST1RPQ09MX0xBTikpIHsKKwkJdTggKmEgPSAodTgqKSZpb2MtPmxhbl9jbmZnX3BhZ2UxLkhhcmR3YXJlQWRkcmVzc0xvdzsKKwkJc2VxX3ByaW50ZihtLCAiLCBMYW5BZGRyPSUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKKwkJCWFbNV0sIGFbNF0sIGFbM10sIGFbMl0sIGFbMV0sIGFbMF0pOworCX0KKworCXNlcV9wcmludGYobSwgIiwgSVJRPSVkIiwgaW9jLT5wY2lfaXJxKTsKKworCWlmICghaW9jLT5hY3RpdmUpCisJCXNlcV9wcmludGYobSwgIiAoZGlzYWJsZWQpIik7CisKKwlzZXFfcHV0YyhtLCAnXG4nKTsKK30KKwogLyoqCiAgKgltcHRfc2V0X3Rhc2ttZ210X2luX3Byb2dyZXNzX2ZsYWcgLSBzZXQgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRhc2sgbWFuYWdlbWVudAogICoJQGlvYzogUG9pbnRlciB0byBNUFRfQURBUFRFUiBzdHJ1Y3R1cmUKQEAgLTY5MjIsNyArNjkyNCw2IEBACiAgKgltcHRfU29mdFJlc2V0SGFuZGxlciAtIElzc3VlcyBhIGxlc3MgZXhwZW5zaXZlIHJlc2V0CiAgKglAaW9jOiBQb2ludGVyIHRvIE1QVF9BREFQVEVSIHN0cnVjdHVyZQogICoJQHNsZWVwRmxhZzogSW5kaWNhdGVzIGlmIHNsZWVwIG9yIHNjaGVkdWxlIG11c3QgYmUgY2FsbGVkLgotCiAgKgogICoJUmV0dXJucyAwIGZvciBTVUNDRVNTIG9yIC0xIGlmIEZBSUxFRC4KICAqCkBAIC03MDY3LDcgKzcwNjgsNiBAQAogICoJbXB0X1NvZnRfSGFyZF9SZXNldEhhbmRsZXIgLSBUcnkgbGVzcyBleHBlbnNpdmUgcmVzZXQKICAqCUBpb2M6IFBvaW50ZXIgdG8gTVBUX0FEQVBURVIgc3RydWN0dXJlCiAgKglAc2xlZXBGbGFnOiBJbmRpY2F0ZXMgaWYgc2xlZXAgb3Igc2NoZWR1bGUgbXVzdCBiZSBjYWxsZWQuCi0KICAqCiAgKglSZXR1cm5zIDAgZm9yIFNVQ0NFU1Mgb3IgLTEgaWYgRkFJTEVELgogICoJVHJ5IGZvciBzb2Z0cmVzZXQgZmlyc3QsIG9ubHkgaWYgaXQgZmFpbHMgZ28gZm9yIGV4cGVuc2l2ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCAyM2VkM2RlLi5mNzFmMjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNDIwLDMxICs0MjAsNiBAQAogI2RlZmluZSBNUFRfVEFSR0VUX0ZMQUdTX0xFRF9PTgkJMHg4MAogCiAvKgotICoJL3Byb2MvbXB0IGludGVyZmFjZQotICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQltb2RlX3QJCSBtb2RlOwotCWludAkJIHBhZDsKLQlyZWFkX3Byb2NfdAkqcmVhZF9wcm9jOwotCXdyaXRlX3Byb2NfdAkqd3JpdGVfcHJvYzsKLX0gbXB0X3Byb2NfZW50cnlfdDsKLQotI2RlZmluZSBNUFRfUFJPQ19SRUFEX1JFVFVSTihidWYsc3RhcnQsb2Zmc2V0LHJlcXVlc3QsZW9mLGxlbikgXAotZG8geyBcCi0JbGVuIC09IG9mZnNldDsJCQlcCi0JaWYgKGxlbiA8IHJlcXVlc3QpIHsJCVwKLQkJKmVvZiA9IDE7CQlcCi0JCWlmIChsZW4gPD0gMCkJCVwKLQkJCXJldHVybiAwOwlcCi0JfSBlbHNlCQkJCVwKLQkJbGVuID0gcmVxdWVzdDsJCVwKLQkqc3RhcnQgPSBidWYgKyBvZmZzZXQ7CQlcCi0JcmV0dXJuIGxlbjsJCQlcCi19IHdoaWxlICgwKQotCi0KLS8qCiAgKglJT0NUTCBzdHJ1Y3R1cmUgYW5kIGFzc29jaWF0ZWQgZGVmaW5lcwogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYwppbmRleCAwNmM2NTVjLi5hMzk3MGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCkBAIC0zODksMTIgKzM4OSwxNiBAQAogCWRldiA9ICZjLT5wZGV2LT5kZXY7CiAKIAlpZiAoaTJvX2RtYV9yZWFsbG9jKGRldiwgJmMtPmRsY3QsCi0JCQkJCWxlMzJfdG9fY3B1KHNiLT5leHBlY3RlZF9sY3Rfc2l6ZSkpKQorCQkJCQlsZTMyX3RvX2NwdShzYi0+ZXhwZWN0ZWRfbGN0X3NpemUpKSkgeworCQltdXRleF91bmxvY2soJmMtPmxjdF9sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJbXNnID0gaTJvX21zZ19nZXRfd2FpdChjLCBJMk9fVElNRU9VVF9NRVNTQUdFX0dFVCk7Ci0JaWYgKElTX0VSUihtc2cpKQorCWlmIChJU19FUlIobXNnKSkgeworCQltdXRleF91bmxvY2soJmMtPmxjdF9sb2NrKTsKIAkJcmV0dXJuIFBUUl9FUlIobXNnKTsKKwl9CiAKIAltc2ctPnUuaGVhZFswXSA9IGNwdV90b19sZTMyKEVJR0hUX1dPUkRfTVNHX1NJWkUgfCBTR0xfT0ZGU0VUXzYpOwogCW1zZy0+dS5oZWFkWzFdID0gY3B1X3RvX2xlMzIoSTJPX0NNRF9MQ1RfTk9USUZZIDw8IDI0IHwgSE9TVF9USUQgPDwgMTIgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggZmM1OTNmYi4uZjBmMWU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAKQEAgLTU3Nyw2ICs1NzgsNyBAQAogCWlmICghZGV2LT5pMm9fZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKGRldi0+cG93ZXIgPiAweDFmKQogCQlpMm9fYmxvY2tfZGV2aWNlX3Bvd2VyKGRldiwgMHgwMik7CiAKQEAgLTU4NSw2ICs1ODcsNyBAQAogCWkyb19ibG9ja19kZXZpY2VfbG9jayhkZXYtPmkyb19kZXYsIC0xKTsKIAogCW9zbV9kZWJ1ZygiUmVhZHkuXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH07CkBAIC02MTUsNiArNjE4LDcgQEAKIAlpZiAoIWRldi0+aTJvX2RldikKIAkJcmV0dXJuIDA7CiAKKwlsb2NrX2tlcm5lbCgpOwogCWkyb19ibG9ja19kZXZpY2VfZmx1c2goZGV2LT5pMm9fZGV2KTsKIAogCWkyb19ibG9ja19kZXZpY2VfdW5sb2NrKGRldi0+aTJvX2RldiwgLTEpOwpAQCAtNjI1LDYgKzYyOSw3IEBACiAJCW9wZXJhdGlvbiA9IDB4MjQ7CiAKIAlpMm9fYmxvY2tfZGV2aWNlX3Bvd2VyKGRldiwgb3BlcmF0aW9uKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1MiwzMCArNjU3LDQwIEBACiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCBpMm9fYmxvY2tfZGV2aWNlICpkZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IHJldCA9IC1FTk9UVFk7CiAKIAkvKiBBbnlvbmUgY2FwYWJsZSBvZiB0aGlzIHN5c2NhbGwgY2FuIGRvICpyZWFsIGJhZCogdGhpbmdzICovCiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKKwlsb2NrX2tlcm5lbCgpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBCTEtJMk9HUlNUUkFUOgotCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT5yY2FjaGUsIChpbnQgX191c2VyICopYXJnKTsKKwkJcmV0ID0gcHV0X3VzZXIoZGV2LT5yY2FjaGUsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJY2FzZSBCTEtJMk9HV1NUUkFUOgotCQlyZXR1cm4gcHV0X3VzZXIoZGV2LT53Y2FjaGUsIChpbnQgX191c2VyICopYXJnKTsKKwkJcmV0ID0gcHV0X3VzZXIoZGV2LT53Y2FjaGUsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJY2FzZSBCTEtJMk9TUlNUUkFUOgorCQlyZXQgPSAtRUlOVkFMOwogCQlpZiAoYXJnIDwgMCB8fCBhcmcgPiBDQUNIRV9TTUFSVEZFVENIKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKIAkJZGV2LT5yY2FjaGUgPSBhcmc7CisJCXJldCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQkxLSTJPU1dTVFJBVDoKKwkJcmV0ID0gLUVJTlZBTDsKIAkJaWYgKGFyZyAhPSAwCiAJCSAgICAmJiAoYXJnIDwgQ0FDSEVfV1JJVEVUSFJPVUdIIHx8IGFyZyA+IENBQ0hFX1NNQVJUQkFDSykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOwogCQlkZXYtPndjYWNoZSA9IGFyZzsKKwkJcmV0ID0gMDsKIAkJYnJlYWs7CiAJfQotCXJldHVybiAtRU5PVFRZOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7CiB9OwogCiAvKioKQEAgLTcxMiw3ICs3MjcsNyBAQAogewogCXN0cnVjdCBpMm9fYmxvY2tfZGV2aWNlICpkZXYgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaTJvX2NvbnRyb2xsZXIgKmM7Ci0JdTMyIHRpZCA9IGRldi0+aTJvX2Rldi0+bGN0X2RhdGEudGlkOworCXUzMiB0aWQ7CiAJc3RydWN0IGkyb19tZXNzYWdlICptc2c7CiAJdTMyICptcHRyOwogCXN0cnVjdCBpMm9fYmxvY2tfcmVxdWVzdCAqaXJlcSA9IHJlcS0+c3BlY2lhbDsKQEAgLTcyOCw2ICs3NDMsNyBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCisJdGlkID0gZGV2LT5pMm9fZGV2LT5sY3RfZGF0YS50aWQ7CiAJYyA9IGRldi0+aTJvX2Rldi0+aW9wOwogCiAJbXNnID0gaTJvX21zZ19nZXQoYyk7CkBAIC04ODMsNyArODk5LDcgQEAKIAkJaWYgKCFyZXEpCiAJCQlicmVhazsKIAotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSkgeworCQlpZiAocmVxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykgewogCQkJc3RydWN0IGkyb19ibG9ja19kZWxheWVkX3JlcXVlc3QgKmRyZXE7CiAJCQlzdHJ1Y3QgaTJvX2Jsb2NrX3JlcXVlc3QgKmlyZXEgPSByZXEtPnNwZWNpYWw7CiAJCQl1bnNpZ25lZCBpbnQgcXVldWVfZGVwdGg7CkBAIC05MzAsNyArOTQ2LDggQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGkyb19ibG9ja19vcGVuLAogCS5yZWxlYXNlID0gaTJvX2Jsb2NrX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bCA9IGkyb19ibG9ja19pb2N0bCwKKwkuaW9jdGwgPSBpMm9fYmxvY2tfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9IGkyb19ibG9ja19pb2N0bCwKIAkuZ2V0Z2VvID0gaTJvX2Jsb2NrX2dldGdlbywKIAkubWVkaWFfY2hhbmdlZCA9IGkyb19ibG9ja19tZWRpYV9jaGFuZ2VkCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fY29uZmlnLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwppbmRleCBjNGIxMTdmLi4wNjhiYTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYwpAQCAtMTExLDExICsxMTEsMTEgQEAKIAogCWxlbiA9IDggKyAoKGhydC0+ZW50cnlfbGVuICogaHJ0LT5udW1fZW50cmllcykgPDwgMik7CiAKLQkvKiBXZSBkaWQgYSBnZXQgdXNlci4uLnNvIGFzc3VtaW5nIG1lbSBpcyBvay4uLmlzIHRoaXMgYmFkPyAqLwotCXB1dF91c2VyKGxlbiwga2NtZC5yZXNsZW4pOwotCWlmIChsZW4gPiByZXNsZW4pCisJaWYgKHB1dF91c2VyKGxlbiwga2NtZC5yZXNsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCWVsc2UgaWYgKGxlbiA+IHJlc2xlbikKIAkJcmV0ID0gLUVOT0JVRlM7Ci0JaWYgKGNvcHlfdG9fdXNlcihrY21kLnJlc2J1ZiwgKHZvaWQgKilocnQsIGxlbikpCisJZWxzZSBpZiAoY29weV90b191c2VyKGtjbWQucmVzYnVmLCAodm9pZCAqKWhydCwgbGVuKSkKIAkJcmV0ID0gLUVGQVVMVDsKIAogCXJldHVybiByZXQ7CkBAIC0xNDcsOCArMTQ3LDkgQEAKIAlsY3QgPSAoaTJvX2xjdCAqKSBjLT5sY3Q7CiAKIAlsZW4gPSAodW5zaWduZWQgaW50KWxjdC0+dGFibGVfc2l6ZSA8PCAyOwotCXB1dF91c2VyKGxlbiwga2NtZC5yZXNsZW4pOwotCWlmIChsZW4gPiByZXNsZW4pCisJaWYgKHB1dF91c2VyKGxlbiwga2NtZC5yZXNsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCWVsc2UgaWYgKGxlbiA+IHJlc2xlbikKIAkJcmV0ID0gLUVOT0JVRlM7CiAJZWxzZSBpZiAoY29weV90b191c2VyKGtjbWQucmVzYnVmLCBsY3QsIGxlbikpCiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0yMDgsOCArMjA5LDkgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JcHV0X3VzZXIobGVuLCBrY21kLnJlc2xlbik7Ci0JaWYgKGxlbiA+IHJlc2xlbikKKwlpZiAocHV0X3VzZXIobGVuLCBrY21kLnJlc2xlbikpCisJCXJldCA9IC1FRkFVTFQ7CisJZWxzZSBpZiAobGVuID4gcmVzbGVuKQogCQlyZXQgPSAtRU5PQlVGUzsKIAllbHNlIGlmIChjb3B5X3RvX3VzZXIoa2NtZC5yZXNidWYsIHJlcywgbGVuKSkKIAkJcmV0ID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Njc2kuYwppbmRleCAzZDQ1ODE3Li5lYTZiMjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19zY3NpLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fc2NzaS5jCkBAIC01MjgsNyArNTI4LDYgQEAKIAkgKiAgICAgIERvIHRoZSBpbmNvbWluZyBwYXBlcndvcmsKIAkgKi8KIAlpMm9fZGV2ID0gU0NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0JYyA9IGkyb19kZXYtPmlvcDsKIAogCVNDcG50LT5zY3NpX2RvbmUgPSBkb25lOwogCkBAIC01MzgsNyArNTM3LDcgQEAKIAkJZG9uZShTQ3BudCk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0KKwljID0gaTJvX2Rldi0+aW9wOwogCXRpZCA9IGkyb19kZXYtPmxjdF9kYXRhLnRpZDsKIAogCW9zbV9kZWJ1ZygicWNtZDogVGlkID0gJTAzeFxuIiwgdGlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKaW5kZXggOWIwODlkZi4uMGI1OTFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9taXNjL0tjb25maWcKQEAgLTcyLDcgKzcyLDcgQEAKIAogY29uZmlnIEFUTUVMX1RDQl9DTEtTUkMKIAlib29sICJUQyBCbG9jayBDbG9ja3NvdXJjZSIKLQlkZXBlbmRzIG9uIEFUTUVMX1RDTElCICYmIEdFTkVSSUNfVElNRQorCWRlcGVuZHMgb24gQVRNRUxfVENMSUIKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTZWxlY3QgdGhpcyB0byBnZXQgYSBoaWdoIHByZWNpc2lvbiBjbG9ja3NvdXJjZSBiYXNlZCBvbiBhCkBAIC0yNDAsNyArMjQwLDcgQEAKIAogY29uZmlnIENTNTUzNV9DTE9DS19FVkVOVF9TUkMKIAl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBoaWdoLXJlcyB0aW1lciAoTUZHUFQpIGV2ZW50cyIKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTICYmIENTNTUzNV9NRkdQVAorCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUyAmJiBDUzU1MzVfTUZHUFQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGNsb2NrIGV2ZW50IHNvdXJjZSBiYXNlZCBvbiB0aGUgTUZHUFQKIAkgIHRpbWVyKHMpIGluIHRoZSBDUzU1MzUgYW5kIENTNTUzNiBjb21wYW5pb24gY2hpcHMuCkBAIC0zMDQsNiArMzA0LDIzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCB0c2wyNTUwLgogCitjb25maWcgU0VOU09SU19CSDE3ODAKKwl0cmlzdGF0ZSAiUk9ITSBCSDE3ODBHTEkgYW1iaWVudCBsaWdodCBzZW5zb3IiCisJZGVwZW5kcyBvbiBJMkMgJiYgU1lTRlMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJPSE0gQkgxNzgwR0xJCisJICBhbWJpZW50IGxpZ2h0IHNlbnNvci4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYmgxNzgwZ2xpLgorCitjb25maWcgSE1DNjM1MgorCXRyaXN0YXRlICJIb25leXdlbGwgSE1DNjM1MiBjb21wYXNzIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEhvbmV5d2VsbCBITUM2MzUyIGNvbXBhc3MsCisJICBwcm92aWRpbmcgY29uZmlndXJhdGlvbiBhbmQgaGVhZGluZyBkYXRhIHZpYSBzeXNmcy4KKwogY29uZmlnIEVQOTNYWF9QV00KIAl0cmlzdGF0ZSAiRVA5M3h4IFBXTSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9FUDkzWFgKQEAgLTM2Myw2ICszODAsMTYgQEAKIAkgIGxpbmUgYW5kIHRoZSBMaW51eCB2ZXJzaW9uIG9uIHRoZSBzZWNvbmQgbGluZSwgYnV0IHRoYXQncwogCSAgc3RpbGwgdXNlZnVsLgogCitjb25maWcgQk1QMDg1CisJdHJpc3RhdGUgIkJNUDA4NSBkaWdpdGFsIHByZXNzdXJlIHNlbnNvciIKKwlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQm9zY2ggU2Vuc29ydGVjCisJICBCTVAwODYgZGlnaXRhbCBwcmVzc3VyZSBzZW5zb3IuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJtcDA4NS4KKwogc291cmNlICJkcml2ZXJzL21pc2MvYzJwb3J0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9taXNjL2NiNzEwL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggNjc1NTJkNi4uMjU1YTgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtOSwxMSArOSwxMyBAQAogb2JqLSQoQ09ORklHX0FUTUVMX1BXTSkJCSs9IGF0bWVsX3B3bS5vCiBvYmotJChDT05GSUdfQVRNRUxfU1NDKQkJKz0gYXRtZWwtc3NjLm8KIG9iai0kKENPTkZJR19BVE1FTF9UQ0xJQikJKz0gYXRtZWxfdGNsaWIubworb2JqLSQoQ09ORklHX0JNUDA4NSkJCSs9IGJtcDA4NS5vCiBvYmotJChDT05GSUdfSUNTOTMyUzQwMSkJKz0gaWNzOTMyczQwMS5vCiBvYmotJChDT05GSUdfTEtEVE0pCQkrPSBsa2R0bS5vCiBvYmotJChDT05GSUdfVElGTV9DT1JFKSAgICAgICAJKz0gdGlmbV9jb3JlLm8KIG9iai0kKENPTkZJR19USUZNXzdYWDEpICAgICAgIAkrPSB0aWZtXzd4eDEubwogb2JqLSQoQ09ORklHX1BIQU5UT00pCQkrPSBwaGFudG9tLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0JIMTc4MCkJKz0gYmgxNzgwZ2xpLm8KIG9iai0kKENPTkZJR19TR0lfSU9DNCkJCSs9IGlvYzQubwogb2JqLSQoQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUykgKz0gZW5jbG9zdXJlLm8KIG9iai0kKENPTkZJR19LR0RCX1RFU1RTKQkrPSBrZ2RidHMubwpAQCAtMjgsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX1RJX0RBQzc1MTIpCSs9IHRpX2RhYzc1MTIubwogb2JqLSQoQ09ORklHX0MyUE9SVCkJCSs9IGMycG9ydC8KIG9iai0kKENPTkZJR19JV01DMzIwMFRPUCkgICAgICArPSBpd21jMzIwMHRvcC8KK29iai0kKENPTkZJR19ITUM2MzUyKQkJKz0gaG1jNjM1Mi5vCiBvYmoteQkJCQkrPSBlZXByb20vCiBvYmoteQkJCQkrPSBjYjcxMC8KIG9iai0kKENPTkZJR19WTVdBUkVfQkFMTE9PTikJKz0gdm13YXJlX2JhbGxvb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JoMTc4MGdsaS5jIGIvZHJpdmVycy9taXNjL2JoMTc4MGdsaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNGM2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvYmgxNzgwZ2xpLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBiaDE3ODBnbGkuYworICogUk9ITSBBbWJpZW50IExpZ2h0IFNlbnNvciBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIEF1dGhvcjogSGVtYW50aCBWIDxoZW1hbnRodkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNkZWZpbmUgQkgxNzgwX1JFR19DT05UUk9MCTB4ODAKKyNkZWZpbmUgQkgxNzgwX1JFR19QQVJUSUQJMHg4QQorI2RlZmluZSBCSDE3ODBfUkVHX01BTkZJRAkweDhCCisjZGVmaW5lIEJIMTc4MF9SRUdfRExPVwkweDhDCisjZGVmaW5lIEJIMTc4MF9SRUdfREhJR0gJMHg4RAorCisjZGVmaW5lIEJIMTc4MF9SRVZNQVNLCQkoMHhmKQorI2RlZmluZSBCSDE3ODBfUE9XTUFTSwkJKDB4MykKKyNkZWZpbmUgQkgxNzgwX1BPRkYJCSgweDApCisjZGVmaW5lIEJIMTc4MF9QT04JCSgweDMpCisKKy8qIHBvd2VyIG9uIHNldHRsaW5nIHRpbWUgaW4gbXMgKi8KKyNkZWZpbmUgQkgxNzgwX1BPTl9ERUxBWQkyCisKK3N0cnVjdCBiaDE3ODBfZGF0YSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlpbnQgcG93ZXJfc3RhdGU7CisJLyogbG9jayBmb3Igc3lzZnMgb3BlcmF0aW9ucyAqLworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RhdGljIGludCBiaDE3ODBfd3JpdGUoc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YSwgdTggcmVnLCB1OCB2YWwsIGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkZGF0YS0+Y2xpZW50LCByZWcsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJmRkYXRhLT5jbGllbnQtPmRldiwKKwkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhIGZhaWxlZCBlcnJvciAlZFwKKwkJCVJlZ2lzdGVyICglcylcbiIsIHJldCwgbXNnKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJoMTc4MF9yZWFkKHN0cnVjdCBiaDE3ODBfZGF0YSAqZGRhdGEsIHU4IHJlZywgY2hhciAqbXNnKQoreworCWludCByZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoZGRhdGEtPmNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmZGRhdGEtPmNsaWVudC0+ZGV2LAorCQkJImkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YSBmYWlsZWQgZXJyb3IgJWRcCisJCQkgUmVnaXN0ZXIgKCVzKVxuIiwgcmV0LCBtc2cpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJoMTc4MF9zaG93X2x1eChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBsc2IsIG1zYjsKKworCWxzYiA9IGJoMTc4MF9yZWFkKGRkYXRhLCBCSDE3ODBfUkVHX0RMT1csICJETE9XIik7CisJaWYgKGxzYiA8IDApCisJCXJldHVybiBsc2I7CisKKwltc2IgPSBiaDE3ODBfcmVhZChkZGF0YSwgQkgxNzgwX1JFR19ESElHSCwgIkRISUdIIik7CisJaWYgKG1zYiA8IDApCisJCXJldHVybiBtc2I7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKG1zYiA8PCA4KSB8IGxzYik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJoMTc4MF9zaG93X3Bvd2VyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBzdGF0ZTsKKworCXN0YXRlID0gYmgxNzgwX3JlYWQoZGRhdGEsIEJIMTc4MF9SRUdfQ09OVFJPTCwgIkNPTlRST0wiKTsKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm4gc3RhdGU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgc3RhdGUgJiBCSDE3ODBfUE9XTUFTSyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJoMTc4MF9zdG9yZV9wb3dlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBlcnJvcjsKKworCWVycm9yID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmICh2YWwgPCBCSDE3ODBfUE9GRiB8fCB2YWwgPiBCSDE3ODBfUE9OKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRkYXRhLT5sb2NrKTsKKworCWVycm9yID0gYmgxNzgwX3dyaXRlKGRkYXRhLCBCSDE3ODBfUkVHX0NPTlRST0wsIHZhbCwgIkNPTlRST0wiKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGRhdGEtPmxvY2spOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJbXNsZWVwKEJIMTc4MF9QT05fREVMQVkpOworCWRkYXRhLT5wb3dlcl9zdGF0ZSA9IHZhbDsKKwltdXRleF91bmxvY2soJmRkYXRhLT5sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGx1eCwgU19JUlVHTywgYmgxNzgwX3Nob3dfbHV4LCBOVUxMKTsKKworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX3N0YXRlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJYmgxNzgwX3Nob3dfcG93ZXJfc3RhdGUsIGJoMTc4MF9zdG9yZV9wb3dlcl9zdGF0ZSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpiaDE3ODBfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9wb3dlcl9zdGF0ZS5hdHRyLAorCSZkZXZfYXR0cl9sdXguYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBiaDE3ODBfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBiaDE3ODBfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJoMTc4MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisJc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YSA9IE5VTEw7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURSkpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnJfb3BfZmFpbGVkOworCX0KKworCWRkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJoMTc4MF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRkYXRhID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3BfZmFpbGVkOworCX0KKworCWRkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGRhdGEpOworCisJcmV0ID0gYmgxNzgwX3JlYWQoZGRhdGEsIEJIMTc4MF9SRUdfUEFSVElELCAiUEFSVCBJRCIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9vcF9mYWlsZWQ7CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJBbWJpZW50IExpZ2h0IFNlbnNvciwgUmV2IDogJWRcbiIsCisJCQkocmV0ICYgQkgxNzgwX1JFVk1BU0spKTsKKworCW11dGV4X2luaXQoJmRkYXRhLT5sb2NrKTsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmJoMTc4MF9hdHRyX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vcF9mYWlsZWQ7CisKKwlyZXR1cm4gMDsKKworZXJyX29wX2ZhaWxlZDoKKwlrZnJlZShkZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYmgxNzgwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBiaDE3ODBfZGF0YSAqZGRhdGE7CisKKwlkZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmJoMTc4MF9hdHRyX2dyb3VwKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBiaDE3ODBfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgYmgxNzgwX2RhdGEgKmRkYXRhOworCWludCBzdGF0ZSwgcmV0OworCisJZGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdGF0ZSA9IGJoMTc4MF9yZWFkKGRkYXRhLCBCSDE3ODBfUkVHX0NPTlRST0wsICJDT05UUk9MIik7CisJaWYgKHN0YXRlIDwgMCkKKwkJcmV0dXJuIHN0YXRlOworCisJZGRhdGEtPnBvd2VyX3N0YXRlID0gc3RhdGUgJiBCSDE3ODBfUE9XTUFTSzsKKworCXJldCA9IGJoMTc4MF93cml0ZShkZGF0YSwgQkgxNzgwX1JFR19DT05UUk9MLCBCSDE3ODBfUE9GRiwKKwkJCQkiQ09OVFJPTCIpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiaDE3ODBfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGJoMTc4MF9kYXRhICpkZGF0YTsKKwlpbnQgc3RhdGUsIHJldDsKKworCWRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RhdGUgPSBkZGF0YS0+cG93ZXJfc3RhdGU7CisKKwlyZXQgPSBiaDE3ODBfd3JpdGUoZGRhdGEsIEJIMTc4MF9SRUdfQ09OVFJPTCwgc3RhdGUsCisJCQkJIkNPTlRST0wiKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBiaDE3ODBfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGJoMTc4MF9yZXN1bWUgTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYmgxNzgwX2lkW10gPSB7CisJeyAiYmgxNzgwIiwgMCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBiaDE3ODBfZHJpdmVyID0geworCS5wcm9iZQkJPSBiaDE3ODBfcHJvYmUsCisJLnJlbW92ZQkJPSBiaDE3ODBfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGJoMTc4MF9pZCwKKwkuc3VzcGVuZAk9IGJoMTc4MF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gYmgxNzgwX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJiaDE3ODAiCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJoMTc4MF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZiaDE3ODBfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJoMTc4MF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmJoMTc4MF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChiaDE3ODBfaW5pdCkKK21vZHVsZV9leGl0KGJoMTc4MF9leGl0KQorCitNT0RVTEVfREVTQ1JJUFRJT04oIkJIMTc4MEdMSSBBbWJpZW50IExpZ2h0IFNlbnNvciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhlbWFudGggViA8aGVtYW50aHZAdGkuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2JtcDA4NS5jIGIvZHJpdmVycy9taXNjL2JtcDA4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZWU0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qICBDb3B5cmlnaHQgKGMpIDIwMTAgIENocmlzdG9waCBNYWlyIDxjaHJpc3RvcGgubWFpckBnbWFpbC5jb20+CisKKyAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgYm1wMDg1IGRpZ2l0YWwgYmFyb21ldHJpYyBwcmVzc3VyZQorICAgIGFuZCB0ZW1wZXJhdHVyZSBzZW5zb3IgZnJvbSBCb3NjaCBTZW5zb3J0ZWMuIFRoZSBkYXRhc2hlZXQKKyAgICBpcyBhdmFsaWFibGUgZnJvbSB0aGVpciB3ZWJzaXRlOgorICAgIGh0dHA6Ly93d3cuYm9zY2gtc2Vuc29ydGVjLmNvbS9jb250ZW50L2xhbmd1YWdlMS9kb3dubG9hZHMvQlNULUJNUDA4NS1EUzAwMC0wNS5wZGYKKworICAgIEEgcHJlc3N1cmUgbWVhc3VyZW1lbnQgaXMgaXNzdWVkIGJ5IHJlYWRpbmcgZnJvbSBwcmVzc3VyZTBfaW5wdXQuCisgICAgVGhlIHJldHVybiB2YWx1ZSByYW5nZXMgZnJvbSAzMDAwMCB0byAxMTAwMDAgcGFzY2FsIHdpdGggYSByZXN1bHV0aW9uCisgICAgb2YgMSBwYXNjYWwgKDAuMDEgbWlsbGliYXIpIHdoaWNoIGVuYWJsZXMgbWVhc3VyZW1lbnRzIGZyb20gOTAwMG0gYWJvdmUKKyAgICB0byA1MDBtIGJlbG93IHNlYSBsZXZlbC4KKworICAgIFRoZSB0ZW1wZXJhdHVyZSBjYW4gYmUgcmVhZCBmcm9tIHRlbXAwX2lucHV0LiBWYWx1ZXMgcmFuZ2UgZnJvbQorICAgIC00MDAgdG8gODUwIHJlcHJlc2VudGluZyB0aGUgYW1iaWVudCB0ZW1wZXJhdHVyZSBpbiBkZWdyZWUgY2Vsc2l1cworICAgIG11bHRpcGxpZWQgYnkgMTAuVGhlIHJlc29sdXRpb24gaXMgMC4xIGNlbHNpdXMuCisKKyAgICBCZWNhdXNlIGFtYmllbnQgcHJlc3N1cmUgaXMgdGVtcGVyYXR1cmUgZGVwZW5kZW50LCBhIHRlbXBlcmF0dXJlCisgICAgbWVhc3VyZW1lbnQgd2lsbCBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGV2ZW4gaWYgdGhlIHVzZXIgaXMgcmVhZGluZworICAgIGZyb20gcHJlc3N1cmUwX2lucHV0LiBUaGlzIGhhcHBlbnMgaWYgdGhlIGxhc3QgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQKKyAgICBoYXMgYmVlbiBleGVjdXRlZCBtb3JlIHRoZW4gb25lIHNlY29uZCBhZ28uCisKKyAgICBUbyBkZWNyZWFzZSBSTVMgbm9pc2UgZnJvbSBwcmVzc3VyZSBtZWFzdXJlbWVudHMsIHRoZSBibXAwODUgY2FuCisgICAgYXV0b25vbW91c2x5IGNhbGN1bGF0ZSB0aGUgYXZlcmFnZSBvZiB1cCB0byBlaWdodCBzYW1wbGVzLiBUaGlzIGlzCisgICAgc2V0IHVwIGJ5IHdyaXRpbmcgdG8gdGhlIG92ZXJzYW1wbGluZyBzeXNmcyBmaWxlLiBBY2NlcHRlZCB2YWx1ZXMKKyAgICBhcmUgMCwgMSwgMiBhbmQgMy4gMl54IHdoZW4geCBpcyB0aGUgdmFsdWUgd3JpdHRlbiB0byB0aGlzIGZpbGUKKyAgICBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBhbWJpZW50IHByZXNzdXJlLgorICAgIFJNUyBub2lzZSBpcyBzcGVjaWZpZWQgd2l0aCBzaXggcGFzY2FsICh3aXRob3V0IGF2ZXJhZ2luZykgYW5kIGRlY3JlYXNlcworICAgIGRvd24gdG8gMyBwYXNjYWwgd2hlbiB1c2luZyBhbiBvdmVyc2FtcGxpbmcgc2V0dGluZyBvZiAzLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKworI2RlZmluZSBCTVAwODVfSTJDX0FERFJFU1MJCTB4NzcKKyNkZWZpbmUgQk1QMDg1X0NISVBfSUQJCQkweDU1CisKKyNkZWZpbmUgQk1QMDg1X0NBTElCUkFUSU9OX0RBVEFfU1RBUlQJMHhBQQorI2RlZmluZSBCTVAwODVfQ0FMSUJSQVRJT05fREFUQV9MRU5HVEgJMTEJLyogMTYgYml0IHZhbHVlcyAqLworI2RlZmluZSBCTVAwODVfQ0hJUF9JRF9SRUcJCTB4RDAKKyNkZWZpbmUgQk1QMDg1X1ZFUlNJT05fUkVHCQkweEQxCisjZGVmaW5lIEJNUDA4NV9DVFJMX1JFRwkJCTB4RjQKKyNkZWZpbmUgQk1QMDg1X1RFTVBfTUVBU1VSRU1FTlQJCTB4MkUKKyNkZWZpbmUgQk1QMDg1X1BSRVNTVVJFX01FQVNVUkVNRU5UCTB4MzQKKyNkZWZpbmUgQk1QMDg1X0NPTlZFUlNJT05fUkVHSVNURVJfTVNCCTB4RjYKKyNkZWZpbmUgQk1QMDg1X0NPTlZFUlNJT05fUkVHSVNURVJfTFNCCTB4RjcKKyNkZWZpbmUgQk1QMDg1X0NPTlZFUlNJT05fUkVHSVNURVJfWExTQgkweEY4CisjZGVmaW5lIEJNUDA4NV9URU1QX0NPTlZFUlNJT05fVElNRQk1CisKKyNkZWZpbmUgQk1QMDg1X0NMSUVOVF9OQU1FCQkiYm1wMDg1IgorCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEJNUDA4NV9JMkNfQUREUkVTUywKKwkJCQkJCQlJMkNfQ0xJRU5UX0VORCB9OworCitzdHJ1Y3QgYm1wMDg1X2NhbGlicmF0aW9uX2RhdGEgeworCXMxNiBBQzEsIEFDMiwgQUMzOworCXUxNiBBQzQsIEFDNSwgQUM2OworCXMxNiBCMSwgQjI7CisJczE2IE1CLCBNQywgTUQ7Cit9OworCisKKy8qIEVhY2ggY2xpZW50IGhhcyB0aGlzIGFkZGl0aW9uYWwgZGF0YSAqLworc3RydWN0IGJtcDA4NV9kYXRhIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBibXAwODVfY2FsaWJyYXRpb25fZGF0YSBjYWxpYnJhdGlvbjsKKwl1MzIgcmF3X3RlbXBlcmF0dXJlOworCXUzMiByYXdfcHJlc3N1cmU7CisJdW5zaWduZWQgY2hhciBvdmVyc2FtcGxpbmdfc2V0dGluZzsKKwl1MzIgbGFzdF90ZW1wX21lYXN1cmVtZW50OworCXMzMiBiNjsgLyogY2FsY3VsYXRlZCB0ZW1wZXJhdHVyZSBjb3JyZWN0aW9uIGNvZWZmaWNpZW50ICovCit9OworCisKK3N0YXRpYyBzMzIgYm1wMDg1X3JlYWRfY2FsaWJyYXRpb25fZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXUxNiB0bXBbQk1QMDg1X0NBTElCUkFUSU9OX0RBVEFfTEVOR1RIXTsKKwlzdHJ1Y3QgYm1wMDg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYm1wMDg1X2NhbGlicmF0aW9uX2RhdGEgKmNhbGkgPSAmKGRhdGEtPmNhbGlicmF0aW9uKTsKKwlzMzIgc3RhdHVzID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LAorCQkJCUJNUDA4NV9DQUxJQlJBVElPTl9EQVRBX1NUQVJULAorCQkJCUJNUDA4NV9DQUxJQlJBVElPTl9EQVRBX0xFTkdUSCpzaXplb2YodTE2KSwKKwkJCQkodTggKil0bXApOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKHN0YXR1cyAhPSBCTVAwODVfQ0FMSUJSQVRJT05fREFUQV9MRU5HVEgqc2l6ZW9mKHUxNikpCisJCXJldHVybiAtRUlPOworCisJY2FsaS0+QUMxID0gIGJlMTZfdG9fY3B1KHRtcFswXSk7CisJY2FsaS0+QUMyID0gIGJlMTZfdG9fY3B1KHRtcFsxXSk7CisJY2FsaS0+QUMzID0gIGJlMTZfdG9fY3B1KHRtcFsyXSk7CisJY2FsaS0+QUM0ID0gIGJlMTZfdG9fY3B1KHRtcFszXSk7CisJY2FsaS0+QUM1ID0gIGJlMTZfdG9fY3B1KHRtcFs0XSk7CisJY2FsaS0+QUM2ID0gYmUxNl90b19jcHUodG1wWzVdKTsKKwljYWxpLT5CMSA9IGJlMTZfdG9fY3B1KHRtcFs2XSk7CisJY2FsaS0+QjIgPSBiZTE2X3RvX2NwdSh0bXBbN10pOworCWNhbGktPk1CID0gYmUxNl90b19jcHUodG1wWzhdKTsKKwljYWxpLT5NQyA9IGJlMTZfdG9fY3B1KHRtcFs5XSk7CisJY2FsaS0+TUQgPSBiZTE2X3RvX2NwdSh0bXBbMTBdKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgczMyIGJtcDA4NV91cGRhdGVfcmF3X3RlbXBlcmF0dXJlKHN0cnVjdCBibXAwODVfZGF0YSAqZGF0YSkKK3sKKwl1MTYgdG1wOworCXMzMiBzdGF0dXM7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKwlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgQk1QMDg1X0NUUkxfUkVHLAorCQkJCQkJQk1QMDg1X1RFTVBfTUVBU1VSRU1FTlQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwKKwkJCSJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50LlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisJbXNsZWVwKEJNUDA4NV9URU1QX0NPTlZFUlNJT05fVElNRSk7CisKKwlzdGF0dXMgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShkYXRhLT5jbGllbnQsCisJCUJNUDA4NV9DT05WRVJTSU9OX1JFR0lTVEVSX01TQiwgc2l6ZW9mKHRtcCksICh1OCAqKSZ0bXApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGV4aXQ7CisJaWYgKHN0YXR1cyAhPSBzaXplb2YodG1wKSkgeworCQlkZXZfZXJyKCZkYXRhLT5jbGllbnQtPmRldiwKKwkJCSJFcnJvciB3aGlsZSByZWFkaW5nIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHJlc3VsdFxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisJZGF0YS0+cmF3X3RlbXBlcmF0dXJlID0gYmUxNl90b19jcHUodG1wKTsKKwlkYXRhLT5sYXN0X3RlbXBfbWVhc3VyZW1lbnQgPSBqaWZmaWVzOworCXN0YXR1cyA9IDA7CS8qIGV2ZXJ5dGhpbmcgb2ssIHJldHVybiAwICovCisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgczMyIGJtcDA4NV91cGRhdGVfcmF3X3ByZXNzdXJlKHN0cnVjdCBibXAwODVfZGF0YSAqZGF0YSkKK3sKKwl1MzIgdG1wID0gMDsKKwlzMzIgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJc3RhdHVzID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEJNUDA4NV9DVFJMX1JFRywKKwkJQk1QMDg1X1BSRVNTVVJFX01FQVNVUkVNRU5UICsgKGRhdGEtPm92ZXJzYW1wbGluZ19zZXR0aW5nPDw2KSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LAorCQkJIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgcHJlc3N1cmUgbWVhc3VyZW1lbnQuXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHdhaXQgZm9yIHRoZSBlbmQgb2YgY29udmVyc2lvbiAqLworCW1zbGVlcCgyKygzIDw8IGRhdGEtPm92ZXJzYW1wbGluZ19zZXR0aW5nKSk7CisKKwkvKiBjb3B5IGRhdGEgaW50byBhIHUzMiAoNCBieXRlcyksIGJ1dCBza2lwIHRoZSBmaXJzdCBieXRlLiAqLworCXN0YXR1cyA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRhdGEtPmNsaWVudCwKKwkJCUJNUDA4NV9DT05WRVJTSU9OX1JFR0lTVEVSX01TQiwgMywgKCh1OCAqKSZ0bXApKzEpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGV4aXQ7CisJaWYgKHN0YXR1cyAhPSAzKSB7CisJCWRldl9lcnIoJmRhdGEtPmNsaWVudC0+ZGV2LAorCQkJIkVycm9yIHdoaWxlIHJlYWRpbmcgcHJlc3N1cmUgbWVhc3VyZW1lbnQgcmVzdWx0c1xuIik7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisJZGF0YS0+cmF3X3ByZXNzdXJlID0gYmUzMl90b19jcHUoKHRtcCkpOworCWRhdGEtPnJhd19wcmVzc3VyZSA+Pj0gKDgtZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcpOworCXN0YXR1cyA9IDA7CS8qIGV2ZXJ5dGhpbmcgb2ssIHJldHVybiAwICovCisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgdGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQgYW5kIHJldHVybnMgdGhlIHZhbHVlCisgKiBpbiB0ZW50aCBvZiBhIGRlZ3JlZSBjZWxzaXVzLgorICovCitzdGF0aWMgczMyIGJtcDA4NV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGJtcDA4NV9kYXRhICpkYXRhLCBpbnQgKnRlbXBlcmF0dXJlKQoreworCXN0cnVjdCBibXAwODVfY2FsaWJyYXRpb25fZGF0YSAqY2FsaSA9ICZkYXRhLT5jYWxpYnJhdGlvbjsKKwlsb25nIHgxLCB4MjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gYm1wMDg1X3VwZGF0ZV9yYXdfdGVtcGVyYXR1cmUoZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGV4aXQ7CisKKwl4MSA9ICgoZGF0YS0+cmF3X3RlbXBlcmF0dXJlIC0gY2FsaS0+QUM2KSAqIGNhbGktPkFDNSkgPj4gMTU7CisJeDIgPSAoY2FsaS0+TUMgPDwgMTEpIC8gKHgxICsgY2FsaS0+TUQpOworCWRhdGEtPmI2ID0geDEgKyB4MiAtIDQwMDA7CisJLyogaWYgTlVMTCBqdXN0IHVwZGF0ZSBiNi4gVXNlZCBmb3IgcHJlc3N1cmUgb25seSBtZWFzdXJlbWVudHMgKi8KKwlpZiAodGVtcGVyYXR1cmUgIT0gTlVMTCkKKwkJKnRlbXBlcmF0dXJlID0gKHgxK3gyKzgpID4+IDQ7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czs7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyB0aGUgcHJlc3N1cmUgbWVhc3VyZW1lbnQgYW5kIHJldHVybnMgdGhlIHZhbHVlCisgKiBpbiBtaWxsaWJhci4gU2luY2UgdGhlIHByZXNzdXJlIGRlcGVuZHMgb24gdGhlIGFtYmllbnQgdGVtcGVyYXR1cmUsCisgKiBhIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IGlzIGV4ZWN1dGVkIGlmIHRoZSBsYXN0IGtub3duIHZhbHVlIGlzIG9sZGVyCisgKiB0aGFuIG9uZSBzZWNvbmQuCisgKi8KK3N0YXRpYyBzMzIgYm1wMDg1X2dldF9wcmVzc3VyZShzdHJ1Y3QgYm1wMDg1X2RhdGEgKmRhdGEsIGludCAqcHJlc3N1cmUpCit7CisJc3RydWN0IGJtcDA4NV9jYWxpYnJhdGlvbl9kYXRhICpjYWxpID0gJmRhdGEtPmNhbGlicmF0aW9uOworCXMzMiB4MSwgeDIsIHgzLCBiMzsKKwl1MzIgYjQsIGI3OworCXMzMiBwOworCWludCBzdGF0dXM7CisKKwkvKiBhbHQgbGVhc3QgZXZlcnkgc2Vjb25kIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgYW1iaWVudCB0ZW1wZXJhdHVyZSAqLworCWlmIChkYXRhLT5sYXN0X3RlbXBfbWVhc3VyZW1lbnQgKyAxKkhaIDwgamlmZmllcykgeworCQlzdGF0dXMgPSBibXAwODVfZ2V0X3RlbXBlcmF0dXJlKGRhdGEsIE5VTEwpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gYm1wMDg1X3VwZGF0ZV9yYXdfcHJlc3N1cmUoZGF0YSk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGV4aXQ7CisKKwl4MSA9IChkYXRhLT5iNiAqIGRhdGEtPmI2KSA+PiAxMjsKKwl4MSAqPSBjYWxpLT5CMjsKKwl4MSA+Pj0gMTE7CisKKwl4MiA9IGNhbGktPkFDMiAqIGRhdGEtPmI2OworCXgyID4+PSAxMTsKKworCXgzID0geDEgKyB4MjsKKworCWIzID0gKCgoKChzMzIpY2FsaS0+QUMxKSAqIDQgKyB4MykgPDwgZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcpICsgMik7CisJYjMgPj49IDI7CisKKwl4MSA9IChjYWxpLT5BQzMgKiBkYXRhLT5iNikgPj4gMTM7CisJeDIgPSAoY2FsaS0+QjEgKiAoKGRhdGEtPmI2ICogZGF0YS0+YjYpID4+IDEyKSkgPj4gMTY7CisJeDMgPSAoeDEgKyB4MiArIDIpID4+IDI7CisJYjQgPSAoY2FsaS0+QUM0ICogKHUzMikoeDMgKyAzMjc2OCkpID4+IDE1OworCisJYjcgPSAoKHUzMilkYXRhLT5yYXdfcHJlc3N1cmUgLSBiMykgKgorCQkJCQkoNTAwMDAgPj4gZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcpOworCXAgPSAoKGI3IDwgMHg4MDAwMDAwMCkgPyAoKGI3IDw8IDEpIC8gYjQpIDogKChiNyAvIGI0KSAqIDIpKTsKKworCXgxID0gcCA+PiA4OworCXgxICo9IHgxOworCXgxID0gKHgxICogMzAzOCkgPj4gMTY7CisJeDIgPSAoLTczNTcgKiBwKSA+PiAxNjsKKwlwICs9ICh4MSArIHgyICsgMzc5MSkgPj4gNDsKKworCSpwcmVzc3VyZSA9IHA7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY2hpcC1pbnRlcm5hbCBvdmVyc2FtcGxpbmcuIFZhbGlkIHZhbHVlcyBhcmUgMC4uMy4KKyAqIFRoZSBjaGlwIHdpbGwgdXNlIDJeb3ZlcnNhbXBsaW5nIHNhbXBsZXMgZm9yIGludGVybmFsIGF2ZXJhZ2luZy4KKyAqIFRoaXMgaW5mbHVlbmNlcyB0aGUgbWVhc3VyZW1lbnQgdGltZSBhbmQgdGhlIGFjY3VyYWN5OyBsYXJnZXIgdmFsdWVzCisgKiBpbmNyZWFzZSBib3RoLiBUaGUgZGF0YXNoZWV0IGdpdmVzIG9uIG92ZXJ2aWV3IG9uIGhvdyBtZWFzdXJlbWVudCB0aW1lLAorICogYWNjdXJhY3kgYW5kIG5vaXNlIGNvcnJlbGF0ZS4KKyAqLworc3RhdGljIHZvaWQgYm1wMDg1X3NldF9vdmVyc2FtcGxpbmcoc3RydWN0IGJtcDA4NV9kYXRhICpkYXRhLAorCQkJCQkJdW5zaWduZWQgY2hhciBvdmVyc2FtcGxpbmcpCit7CisJaWYgKG92ZXJzYW1wbGluZyA+IDMpCisJCW92ZXJzYW1wbGluZyA9IDM7CisJZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcgPSBvdmVyc2FtcGxpbmc7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3ZlcnNhbXBsaW5nLiBSYW5nZTogMC4uMworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBibXAwODVfZ2V0X292ZXJzYW1wbGluZyhzdHJ1Y3QgYm1wMDg1X2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIGRhdGEtPm92ZXJzYW1wbGluZ19zZXR0aW5nOworfQorCisvKiBzeXNmcyBjYWxsYmFja3MgKi8KK3N0YXRpYyBzc2l6ZV90IHNldF9vdmVyc2FtcGxpbmcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGJtcDA4NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgbG9uZyBvdmVyc2FtcGxpbmc7CisJaW50IHN1Y2Nlc3MgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmb3ZlcnNhbXBsaW5nKTsKKwlpZiAoc3VjY2VzcyA9PSAwKSB7CisJCWJtcDA4NV9zZXRfb3ZlcnNhbXBsaW5nKGRhdGEsIG92ZXJzYW1wbGluZyk7CisJCXJldHVybiBjb3VudDsKKwl9CisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfb3ZlcnNhbXBsaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBibXAwODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBibXAwODVfZ2V0X292ZXJzYW1wbGluZyhkYXRhKSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIob3ZlcnNhbXBsaW5nLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCQkJc2hvd19vdmVyc2FtcGxpbmcsIHNldF9vdmVyc2FtcGxpbmcpOworCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJaW50IHRlbXBlcmF0dXJlOworCWludCBzdGF0dXM7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYm1wMDg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN0YXR1cyA9IGJtcDA4NV9nZXRfdGVtcGVyYXR1cmUoZGF0YSwgJnRlbXBlcmF0dXJlKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCXJldHVybiBzdGF0dXM7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcGVyYXR1cmUpOworfQorc3RhdGljIERFVklDRV9BVFRSKHRlbXAwX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXBlcmF0dXJlLCBOVUxMKTsKKworCitzdGF0aWMgc3NpemVfdCBzaG93X3ByZXNzdXJlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgcHJlc3N1cmU7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBibXAwODVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc3RhdHVzID0gYm1wMDg1X2dldF9wcmVzc3VyZShkYXRhLCAmcHJlc3N1cmUpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKwllbHNlCisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwcmVzc3VyZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIocHJlc3N1cmUwX2lucHV0LCBTX0lSVUdPLCBzaG93X3ByZXNzdXJlLCBOVUxMKTsKKworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYm1wMDg1X2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfcHJlc3N1cmUwX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX292ZXJzYW1wbGluZy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJtcDA4NV9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGJtcDA4NV9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBibXAwODVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpZiAoY2xpZW50LT5hZGRyICE9IEJNUDA4NV9JMkNfQUREUkVTUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQk1QMDg1X0NISVBfSURfUkVHKSAhPSBCTVAwODVfQ0hJUF9JRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBibXAwODVfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZlcnNpb247CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgYm1wMDg1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJc3RhdHVzID0gYm1wMDg1X3JlYWRfY2FsaWJyYXRpb25fZGF0YShjbGllbnQpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZ290byBleGl0OworCXZlcnNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBCTVAwODVfVkVSU0lPTl9SRUcpOworCWRhdGEtPmxhc3RfdGVtcF9tZWFzdXJlbWVudCA9IDA7CisJZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcgPSAzOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCWRldl9pbmZvKCZkYXRhLT5jbGllbnQtPmRldiwgIkJNUDA4NSB2ZXIuICVkLiVkIGZvdW5kLlxuIiwKKwkJCSh2ZXJzaW9uICYgMHgwRiksICh2ZXJzaW9uICYgMHhGMCkgPj4gNCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYm1wMDg1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBibXAwODVfZGF0YSAqZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYm1wMDg1X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGRlZmF1bHQgc2V0dGluZ3MgYWZ0ZXIgUE9SICovCisJZGF0YS0+b3ZlcnNhbXBsaW5nX3NldHRpbmcgPSAweDAwOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBCTVAwODUgY2hpcCAqLworCWVyciA9IGJtcDA4NV9pbml0X2NsaWVudChjbGllbnQpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBleGl0X2ZyZWU7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmJtcDA4NV9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCWRldl9pbmZvKCZkYXRhLT5jbGllbnQtPmRldiwgIlN1Y2Nlc2Z1bGx5IGluaXRpYWxpemVkIGJtcDA4NSFcbiIpOworCWdvdG8gZXhpdDsKKworZXhpdF9mcmVlOgorCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJtcDA4NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZibXAwODVfYXR0cl9ncm91cCk7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYm1wMDg1X2lkW10gPSB7CisJeyAiYm1wMDg1IiwgMCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGJtcDA4NV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImJtcDA4NSIKKwl9LAorCS5pZF90YWJsZQk9IGJtcDA4NV9pZCwKKwkucHJvYmUJCT0gYm1wMDg1X3Byb2JlLAorCS5yZW1vdmUJCT0gYm1wMDg1X3JlbW92ZSwKKworCS5kZXRlY3QJCT0gYm1wMDg1X2RldGVjdCwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYworfTsKKworc3RhdGljIGludCBfX2luaXQgYm1wMDg1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmJtcDA4NV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYm1wMDg1X2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmYm1wMDg1X2RyaXZlcik7Cit9CisKKworTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoIE1haXIgPGNocmlzdG9waC5tYWlyQGdtYWlsLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCTVAwODUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGJtcDA4NV9pbml0KTsKK21vZHVsZV9leGl0KGJtcDA4NV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYyBiL2RyaXZlcnMvbWlzYy9jczU1MzUtbWZncHQuYwppbmRleCAyZDQ0YjMzLi42ZjYyMTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3M1NTM1LW1mZ3B0LmMKKysrIGIvZHJpdmVycy9taXNjL2NzNTUzNS1tZmdwdC5jCkBAIC0yMTEsNiArMjExLDE3IEBACiAgKi8KIHZvaWQgY3M1NTM1X21mZ3B0X2ZyZWVfdGltZXIoc3RydWN0IGNzNTUzNV9tZmdwdF90aW1lciAqdGltZXIpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50MTZfdCB2YWw7CisKKwkvKiB0aW1lciBjYW4gYmUgbWFkZSBhdmFpbGFibGUgYWdhaW4gb25seSBpZiBuZXZlciBzZXQgdXAgKi8KKwl2YWwgPSBjczU1MzVfbWZncHRfcmVhZCh0aW1lciwgTUZHUFRfUkVHX1NFVFVQKTsKKwlpZiAoISh2YWwgJiBNRkdQVF9TRVRVUF9TRVRVUCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRpbWVyLT5jaGlwLT5sb2NrLCBmbGFncyk7CisJCV9fc2V0X2JpdCh0aW1lci0+bnIsIHRpbWVyLT5jaGlwLT5hdmFpbCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRpbWVyLT5jaGlwLT5sb2NrLCBmbGFncyk7CisJfQorCiAJa2ZyZWUodGltZXIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3M1NTM1X21mZ3B0X2ZyZWVfdGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2htYzYzNTIuYyBiL2RyaXZlcnMvbWlzYy9obWM2MzUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0YmZjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9obWM2MzUyLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBobWM2MzUyLmMgLSBIb25leXdlbGwgQ29tcGFzcyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycAorICoKKyAqICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXBhc3NfbXV0ZXgpOworCitzdGF0aWMgaW50IGNvbXBhc3NfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggY21kKQoreworCWludCByZXQgPSBpMmNfbWFzdGVyX3NlbmQoYywgJmNtZCwgMSk7CisJaWYgKHJldCA8IDApCisJCWRldl93YXJuKCZjLT5kZXYsICJjb21tYW5kICclYycgZmFpbGVkLlxuIiwgY21kKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvbXBhc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCWNvbnN0IGNoYXIgKm1hcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYyA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsID49IHN0cmxlbihtYXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZjb21wYXNzX211dGV4KTsKKwlyZXQgPSBjb21wYXNzX2NvbW1hbmQoYywgbWFwW3ZhbF0pOworCW11dGV4X3VubG9jaygmY29tcGFzc19tdXRleCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBjb21wYXNzX2NhbGlicmF0aW9uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBjb21wYXNzX3N0b3JlKGRldiwgYnVmLCBjb3VudCwgIkVDIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbXBhc3NfcG93ZXJfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCAgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGNvbXBhc3Nfc3RvcmUoZGV2LCBidWYsIGNvdW50LCAiU1ciKTsKK30KKworc3RhdGljIHNzaXplX3QgY29tcGFzc19oZWFkaW5nX2RhdGFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJdW5zaWduZWQgY2hhciBpMmNfZGF0YVsyXTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY29tcGFzc19tdXRleCk7CisJcmV0ID0gY29tcGFzc19jb21tYW5kKGNsaWVudCwgJ0EnKTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjb21wYXNzX211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbXNsZWVwKDEwKTsgLyogc2VuZGluZyAnQScgY21kIHdlIG5lZWQgdG8gd2FpdCBmb3IgNy0xMCBtaWxsaXNlY3MgKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBpMmNfZGF0YSwgMik7CisJbXV0ZXhfdW5sb2NrKCZjb21wYXNzX211dGV4KTsKKwlpZiAocmV0ICE9IDEpIHsKKwkJZGV2X3dhcm4oZGV2LCAiaTJjIHJlYWQgZGF0YSBjbWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gKGkyY19kYXRhWzBdIDw8IDgpIHwgaTJjX2RhdGFbMV07CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHJldC8xMCwgcmV0JTEwKTsKK30KKworCitzdGF0aWMgREVWSUNFX0FUVFIoaGVhZGluZzBfaW5wdXQsIFNfSVJVR08sIGNvbXBhc3NfaGVhZGluZ19kYXRhX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNhbGlicmF0aW9uLCBTX0lXVVNSLCBOVUxMLCBjb21wYXNzX2NhbGlicmF0aW9uX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9zdGF0ZSwgU19JV1VTUiwgTlVMTCwgY29tcGFzc19wb3dlcl9tb2RlX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm1pZF9hdHRfY29tcGFzc1tdID0geworCSZkZXZfYXR0cl9oZWFkaW5nMF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9jYWxpYnJhdGlvbi5hdHRyLAorCSZkZXZfYXR0cl9wb3dlcl9zdGF0ZS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1fY29tcGFzc19nciA9IHsKKwkubmFtZSA9ICJobWM2MzUyIiwKKwkuYXR0cnMgPSBtaWRfYXR0X2NvbXBhc3MKK307CisKK3N0YXRpYyBpbnQgaG1jNjM1Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJlczsKKworCXJlcyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJm1fY29tcGFzc19ncik7CisJaWYgKHJlcykgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImRldmljZV9jcmVhdGVfZmlsZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICIlcyBITUM2MzUyIGNvbXBhc3MgY2hpcCBmb3VuZFxuIiwKKwkJCQkJCQljbGllbnQtPm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtYzYzNTJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbV9jb21wYXNzX2dyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIGhtYzYzNTJfaWRbXSA9IHsKKwl7ICJobWM2MzUyIiwgMCB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGhtYzYzNTJfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaG1jNjM1Ml9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaG1jNjM1MiIsCisJfSwKKwkucHJvYmUgPSBobWM2MzUyX3Byb2JlLAorCS5yZW1vdmUgPSBobWM2MzUyX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBobWM2MzUyX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2Vuc29yX2htYzYzNTJfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaG1jNjM1Ml9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCAgX19leGl0IHNlbnNvcl9obWM2MzUyX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaG1jNjM1Ml9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZW5zb3JfaG1jNjM1Ml9pbml0KTsKK21vZHVsZV9leGl0KHNlbnNvcl9obWM2MzUyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJLYWxoYW4gVHJpc2FsIDxrYWxoYW4udHJpc2FsQGludGVsLmNvbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJobWM2MzUyIENvbXBhc3MgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uYyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCmluZGV4IDk4YWQwMTIuLjU1N2E4YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocGlsby5jCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5jCkBAIC0yNTYsNyArMjU2LDggQEAKIAogc3RhdGljIGludCBpbG9fY2NiX3NldHVwKHN0cnVjdCBpbG9faHdpbmZvICpodywgc3RydWN0IGNjYl9kYXRhICpkYXRhLCBpbnQgc2xvdCkKIHsKLQljaGFyICpkbWFfdmEsICpkbWFfcGE7CisJY2hhciAqZG1hX3ZhOworCWRtYV9hZGRyX3QgZG1hX3BhOwogCXN0cnVjdCBjY2IgKmRyaXZlcl9jY2IsICppbG9fY2NiOwogCiAJZHJpdmVyX2NjYiA9ICZkYXRhLT5kcml2ZXJfY2NiOwpAQCAtMjcyLDEyICsyNzMsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlkbWFfdmEgPSAoY2hhciAqKWRhdGEtPmRtYV92YTsKLQlkbWFfcGEgPSAoY2hhciAqKWRhdGEtPmRtYV9wYTsKKwlkbWFfcGEgPSBkYXRhLT5kbWFfcGE7CiAKIAltZW1zZXQoZG1hX3ZhLCAwLCBkYXRhLT5kbWFfc2l6ZSk7CiAKIAlkbWFfdmEgPSAoY2hhciAqKXJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZG1hX3ZhLCBJTE9fU1RBUlRfQUxJR04pOwotCWRtYV9wYSA9IChjaGFyICopcm91bmR1cCgodW5zaWduZWQgbG9uZylkbWFfcGEsIElMT19TVEFSVF9BTElHTik7CisJZG1hX3BhID0gcm91bmR1cChkbWFfcGEsIElMT19TVEFSVF9BTElHTik7CiAKIAkvKgogCSAqIENyZWF0ZSB0d28gY2NiJ3MsIG9uZSB3aXRoIHZpcnQgYWRkcnMsIG9uZSB3aXRoIHBoeXMgYWRkcnMuCkBAIC0yODgsMjYgKzI4OSwyNiBAQAogCiAJZmlmb19zZXR1cChkbWFfdmEsIE5SX1FFTlRSWSk7CiAJZHJpdmVyX2NjYi0+Y2NiX3UxLnNlbmRfZmlmb2JhciA9IGRtYV92YSArIEZJRk9IQU5ETEVTSVpFOwotCWlsb19jY2ItPmNjYl91MS5zZW5kX2ZpZm9iYXIgPSBkbWFfcGEgKyBGSUZPSEFORExFU0laRTsKKwlpbG9fY2NiLT5jY2JfdTEuc2VuZF9maWZvYmFyX3BhID0gZG1hX3BhICsgRklGT0hBTkRMRVNJWkU7CiAJZG1hX3ZhICs9IGZpZm9fc3ooTlJfUUVOVFJZKTsKIAlkbWFfcGEgKz0gZmlmb19zeihOUl9RRU5UUlkpOwogCiAJZG1hX3ZhID0gKGNoYXIgKilyb3VuZHVwKCh1bnNpZ25lZCBsb25nKWRtYV92YSwgSUxPX0NBQ0hFX1NaKTsKLQlkbWFfcGEgPSAoY2hhciAqKXJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZG1hX3BhLCBJTE9fQ0FDSEVfU1opOworCWRtYV9wYSA9IHJvdW5kdXAoZG1hX3BhLCBJTE9fQ0FDSEVfU1opOwogCiAJZmlmb19zZXR1cChkbWFfdmEsIE5SX1FFTlRSWSk7CiAJZHJpdmVyX2NjYi0+Y2NiX3UzLnJlY3ZfZmlmb2JhciA9IGRtYV92YSArIEZJRk9IQU5ETEVTSVpFOwotCWlsb19jY2ItPmNjYl91My5yZWN2X2ZpZm9iYXIgPSBkbWFfcGEgKyBGSUZPSEFORExFU0laRTsKKwlpbG9fY2NiLT5jY2JfdTMucmVjdl9maWZvYmFyX3BhID0gZG1hX3BhICsgRklGT0hBTkRMRVNJWkU7CiAJZG1hX3ZhICs9IGZpZm9fc3ooTlJfUUVOVFJZKTsKIAlkbWFfcGEgKz0gZmlmb19zeihOUl9RRU5UUlkpOwogCiAJZHJpdmVyX2NjYi0+Y2NiX3UyLnNlbmRfZGVzYyA9IGRtYV92YTsKLQlpbG9fY2NiLT5jY2JfdTIuc2VuZF9kZXNjID0gZG1hX3BhOworCWlsb19jY2ItPmNjYl91Mi5zZW5kX2Rlc2NfcGEgPSBkbWFfcGE7CiAJZG1hX3BhICs9IGRlc2NfbWVtX3N6KE5SX1FFTlRSWSk7CiAJZG1hX3ZhICs9IGRlc2NfbWVtX3N6KE5SX1FFTlRSWSk7CiAKIAlkcml2ZXJfY2NiLT5jY2JfdTQucmVjdl9kZXNjID0gZG1hX3ZhOwotCWlsb19jY2ItPmNjYl91NC5yZWN2X2Rlc2MgPSBkbWFfcGE7CisJaWxvX2NjYi0+Y2NiX3U0LnJlY3ZfZGVzY19wYSA9IGRtYV9wYTsKIAogCWRyaXZlcl9jY2ItPmNoYW5uZWwgPSBzbG90OwogCWlsb19jY2ItPmNoYW5uZWwgPSBzbG90OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hwaWxvLmggYi9kcml2ZXJzL21pc2MvaHBpbG8uaAppbmRleCAyNDdlYjM4Li41NGU0M2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaHBpbG8uaAorKysgYi9kcml2ZXJzL21pc2MvaHBpbG8uaApAQCAtNzksMjEgKzc5LDIxIEBACiBzdHJ1Y3QgY2NiIHsKIAl1bmlvbiB7CiAJCWNoYXIgKnNlbmRfZmlmb2JhcjsKLQkJdTY0IHBhZGRpbmcxOworCQl1NjQgc2VuZF9maWZvYmFyX3BhOwogCX0gY2NiX3UxOwogCXVuaW9uIHsKIAkJY2hhciAqc2VuZF9kZXNjOwotCQl1NjQgcGFkZGluZzI7CisJCXU2NCBzZW5kX2Rlc2NfcGE7CiAJfSBjY2JfdTI7CiAJdTY0IHNlbmRfY3RybDsKIAogCXVuaW9uIHsKIAkJY2hhciAqcmVjdl9maWZvYmFyOwotCQl1NjQgcGFkZGluZzM7CisJCXU2NCByZWN2X2ZpZm9iYXJfcGE7CiAJfSBjY2JfdTM7CiAJdW5pb24gewogCQljaGFyICpyZWN2X2Rlc2M7Ci0JCXU2NCBwYWRkaW5nNDsKKwkJdTY0IHJlY3ZfZGVzY19wYTsKIAl9IGNjYl91NDsKIAl1NjQgcmVjdl9jdHJsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKaW5kZXggY2I5ZmJjOC4uZDU0NWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ19oZWxwZXJzLmg+CiAKQEAgLTEwNyw2ICsxMDgsNyBAQAogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbW1jX2Jsa19nZXQoYmRldi0+YmRfZGlzayk7CiAJaW50IHJldCA9IC1FTlhJTzsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKG1kKSB7CiAJCWlmIChtZC0+dXNhZ2UgPT0gMikKIAkJCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwpAQCAtMTE3LDYgKzExOSw3IEBACiAJCQlyZXQgPSAtRVJPRlM7CiAJCX0KIAl9CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEyNSw3ICsxMjgsOSBAQAogewogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCisJbG9ja19rZXJuZWwoKTsKIAltbWNfYmxrX3B1dChtZCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDIsNyArMjQ3LDc2IEBACiAJcmV0dXJuIGNtZC5yZXNwWzBdOwogfQogCi1zdGF0aWMgaW50IG1tY19ibGtfaXNzdWVfcnEoc3RydWN0IG1tY19xdWV1ZSAqbXEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCitzdGF0aWMgaW50IG1tY19ibGtfaXNzdWVfZGlzY2FyZF9ycShzdHJ1Y3QgbW1jX3F1ZXVlICptcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1xLT5kYXRhOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1kLT5xdWV1ZS5jYXJkOworCXVuc2lnbmVkIGludCBmcm9tLCBuciwgYXJnOworCWludCBlcnIgPSAwOworCisJbW1jX2NsYWltX2hvc3QoY2FyZC0+aG9zdCk7CisKKwlpZiAoIW1tY19jYW5fZXJhc2UoY2FyZCkpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWZyb20gPSBibGtfcnFfcG9zKHJlcSk7CisJbnIgPSBibGtfcnFfc2VjdG9ycyhyZXEpOworCisJaWYgKG1tY19jYW5fdHJpbShjYXJkKSkKKwkJYXJnID0gTU1DX1RSSU1fQVJHOworCWVsc2UKKwkJYXJnID0gTU1DX0VSQVNFX0FSRzsKKworCWVyciA9IG1tY19lcmFzZShjYXJkLCBmcm9tLCBuciwgYXJnKTsKK291dDoKKwlzcGluX2xvY2tfaXJxKCZtZC0+bG9jayk7CisJX19ibGtfZW5kX3JlcXVlc3QocmVxLCBlcnIsIGJsa19ycV9ieXRlcyhyZXEpKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5sb2NrKTsKKworCW1tY19yZWxlYXNlX2hvc3QoY2FyZC0+aG9zdCk7CisKKwlyZXR1cm4gZXJyID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgbW1jX2Jsa19pc3N1ZV9zZWNkaXNjYXJkX3JxKHN0cnVjdCBtbWNfcXVldWUgKm1xLAorCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbXEtPmRhdGE7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbWQtPnF1ZXVlLmNhcmQ7CisJdW5zaWduZWQgaW50IGZyb20sIG5yLCBhcmc7CisJaW50IGVyciA9IDA7CisKKwltbWNfY2xhaW1faG9zdChjYXJkLT5ob3N0KTsKKworCWlmICghbW1jX2Nhbl9zZWN1cmVfZXJhc2VfdHJpbShjYXJkKSkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJZnJvbSA9IGJsa19ycV9wb3MocmVxKTsKKwluciA9IGJsa19ycV9zZWN0b3JzKHJlcSk7CisKKwlpZiAobW1jX2Nhbl90cmltKGNhcmQpICYmICFtbWNfZXJhc2VfZ3JvdXBfYWxpZ25lZChjYXJkLCBmcm9tLCBucikpCisJCWFyZyA9IE1NQ19TRUNVUkVfVFJJTTFfQVJHOworCWVsc2UKKwkJYXJnID0gTU1DX1NFQ1VSRV9FUkFTRV9BUkc7CisKKwllcnIgPSBtbWNfZXJhc2UoY2FyZCwgZnJvbSwgbnIsIGFyZyk7CisJaWYgKCFlcnIgJiYgYXJnID09IE1NQ19TRUNVUkVfVFJJTTFfQVJHKQorCQllcnIgPSBtbWNfZXJhc2UoY2FyZCwgZnJvbSwgbnIsIE1NQ19TRUNVUkVfVFJJTTJfQVJHKTsKK291dDoKKwlzcGluX2xvY2tfaXJxKCZtZC0+bG9jayk7CisJX19ibGtfZW5kX3JlcXVlc3QocmVxLCBlcnIsIGJsa19ycV9ieXRlcyhyZXEpKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5sb2NrKTsKKworCW1tY19yZWxlYXNlX2hvc3QoY2FyZC0+aG9zdCk7CisKKwlyZXR1cm4gZXJyID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgbW1jX2Jsa19pc3N1ZV9yd19ycShzdHJ1Y3QgbW1jX3F1ZXVlICptcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZCA9IG1xLT5kYXRhOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1kLT5xdWV1ZS5jYXJkOwpAQCAtNDcwLDYgKzU0NCwxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1tY19ibGtfaXNzdWVfcnEoc3RydWN0IG1tY19xdWV1ZSAqbXEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpIHsKKwkJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1NFQ1VSRSkKKwkJCXJldHVybiBtbWNfYmxrX2lzc3VlX3NlY2Rpc2NhcmRfcnEobXEsIHJlcSk7CisJCWVsc2UKKwkJCXJldHVybiBtbWNfYmxrX2lzc3VlX2Rpc2NhcmRfcnEobXEsIHJlcSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIG1tY19ibGtfaXNzdWVfcndfcnEobXEsIHJlcSk7CisJfQorfQogCiBzdGF0aWMgaW5saW5lIGludCBtbWNfYmxrX3JlYWRvbmx5KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYyBiL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYwppbmRleCA0NDVkN2RiLi41ZGQ4NTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CQkvKiBGb3IgbnJfZnJlZV9idWZmZXJfcGFnZXMoKSAqLwogCiAjZGVmaW5lIFJFU1VMVF9PSwkJMAogI2RlZmluZSBSRVNVTFRfRkFJTAkJMQpAQCAtMjUsNiArMjYsNjAgQEAKICNkZWZpbmUgQlVGRkVSX09SREVSCQkyCiAjZGVmaW5lIEJVRkZFUl9TSVpFCQkoUEFHRV9TSVpFIDw8IEJVRkZFUl9PUkRFUikKIAorLyoKKyAqIExpbWl0IHRoZSB0ZXN0IGFyZWEgc2l6ZSB0byB0aGUgbWF4aW11bSBNTUMgSEMgZXJhc2UgZ3JvdXAgc2l6ZS4gIE5vdGUgdGhhdAorICogdGhlIG1heGltdW0gU0QgYWxsb2NhdGlvbiB1bml0IHNpemUgaXMganVzdCA0TWlCLgorICovCisjZGVmaW5lIFRFU1RfQVJFQV9NQVhfU0laRSAoMTI4ICogMTAyNCAqIDEwMjQpCisKKy8qKgorICogc3RydWN0IG1tY190ZXN0X3BhZ2VzIC0gcGFnZXMgYWxsb2NhdGVkIGJ5ICdhbGxvY19wYWdlcygpJy4KKyAqIEBwYWdlOiBmaXJzdCBwYWdlIGluIHRoZSBhbGxvY2F0aW9uCisgKiBAb3JkZXI6IG9yZGVyIG9mIHRoZSBudW1iZXIgb2YgcGFnZXMgYWxsb2NhdGVkCisgKi8KK3N0cnVjdCBtbWNfdGVzdF9wYWdlcyB7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgaW50IG9yZGVyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbW1jX3Rlc3RfbWVtIC0gYWxsb2NhdGVkIG1lbW9yeS4KKyAqIEBhcnI6IGFycmF5IG9mIGFsbG9jYXRpb25zCisgKiBAY250OiBudW1iZXIgb2YgYWxsb2NhdGlvbnMKKyAqLworc3RydWN0IG1tY190ZXN0X21lbSB7CisJc3RydWN0IG1tY190ZXN0X3BhZ2VzICphcnI7CisJdW5zaWduZWQgaW50IGNudDsKK307CisKKy8qKgorICogc3RydWN0IG1tY190ZXN0X2FyZWEgLSBpbmZvcm1hdGlvbiBmb3IgcGVyZm9ybWFuY2UgdGVzdHMuCisgKiBAbWF4X3N6OiB0ZXN0IGFyZWEgc2l6ZSAoaW4gYnl0ZXMpCisgKiBAZGV2X2FkZHI6IGFkZHJlc3Mgb24gY2FyZCBhdCB3aGljaCB0byBkbyBwZXJmb3JtYW5jZSB0ZXN0cworICogQG1heF9zZWdzOiBtYXhpbXVtIHNlZ21lbnRzIGluIHNjYXR0ZXJsaXN0IEBzZworICogQGJsb2NrczogbnVtYmVyIG9mICg1MTIgYnl0ZSkgYmxvY2tzIGN1cnJlbnRseSBtYXBwZWQgYnkgQHNnCisgKiBAc2dfbGVuOiBsZW5ndGggb2YgY3VycmVudGx5IG1hcHBlZCBzY2F0dGVybGlzdCBAc2cKKyAqIEBtZW06IGFsbG9jYXRlZCBtZW1vcnkKKyAqIEBzZzogc2NhdHRlcmxpc3QKKyAqLworc3RydWN0IG1tY190ZXN0X2FyZWEgeworCXVuc2lnbmVkIGxvbmcgbWF4X3N6OworCXVuc2lnbmVkIGludCBkZXZfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWF4X3NlZ3M7CisJdW5zaWduZWQgaW50IGJsb2NrczsKKwl1bnNpZ25lZCBpbnQgc2dfbGVuOworCXN0cnVjdCBtbWNfdGVzdF9tZW0gKm1lbTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAtIHRlc3QgaW5mb3JtYXRpb24uCisgKiBAY2FyZDogY2FyZCB1bmRlciB0ZXN0CisgKiBAc2NyYXRjaDogdHJhbnNmZXIgYnVmZmVyCisgKiBAYnVmZmVyOiB0cmFuc2ZlciBidWZmZXIKKyAqIEBoaWdobWVtOiBidWZmZXIgZm9yIGhpZ2htZW0gdGVzdHMKKyAqIEBhcmVhOiBpbmZvcm1hdGlvbiBmb3IgcGVyZm9ybWFuY2UgdGVzdHMKKyAqLwogc3RydWN0IG1tY190ZXN0X2NhcmQgewogCXN0cnVjdCBtbWNfY2FyZAkqY2FyZDsKIApAQCAtMzMsNiArODgsNyBAQAogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJc3RydWN0IHBhZ2UJKmhpZ2htZW07CiAjZW5kaWYKKwlzdHJ1Y3QgbW1jX3Rlc3RfYXJlYSBhcmVhOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Nyw2ICsxNTMsMTIgQEAKIAltbWNfc2V0X2RhdGFfdGltZW91dChtcnEtPmRhdGEsIHRlc3QtPmNhcmQpOwogfQogCitzdGF0aWMgaW50IG1tY190ZXN0X2J1c3koc3RydWN0IG1tY19jb21tYW5kICpjbWQpCit7CisJcmV0dXJuICEoY21kLT5yZXNwWzBdICYgUjFfUkVBRFlfRk9SX0RBVEEpIHx8CisJCShSMV9DVVJSRU5UX1NUQVRFKGNtZC0+cmVzcFswXSkgPT0gNyk7Cit9CisKIC8qCiAgKiBXYWl0IGZvciB0aGUgY2FyZCB0byBmaW5pc2ggdGhlIGJ1c3kgc3RhdGUKICAqLwpAQCAtMTE3LDEzICsxNzksMTMgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCi0JCWlmICghYnVzeSAmJiAhKGNtZC5yZXNwWzBdICYgUjFfUkVBRFlfRk9SX0RBVEEpKSB7CisJCWlmICghYnVzeSAmJiBtbWNfdGVzdF9idXN5KCZjbWQpKSB7CiAJCQlidXN5ID0gMTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXYXJuaW5nOiBIb3N0IGRpZCBub3QgIgogCQkJCSJ3YWl0IGZvciBidXN5IHN0YXRlIHRvIGVuZC5cbiIsCiAJCQkJbW1jX2hvc3RuYW1lKHRlc3QtPmNhcmQtPmhvc3QpKTsKIAkJfQotCX0gd2hpbGUgKCEoY21kLnJlc3BbMF0gJiBSMV9SRUFEWV9GT1JfREFUQSkpOworCX0gd2hpbGUgKG1tY190ZXN0X2J1c3koJmNtZCkpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3MCw2ICsyMzIsMjQ4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1tY190ZXN0X2ZyZWVfbWVtKHN0cnVjdCBtbWNfdGVzdF9tZW0gKm1lbSkKK3sKKwlpZiAoIW1lbSkKKwkJcmV0dXJuOworCXdoaWxlIChtZW0tPmNudC0tKQorCQlfX2ZyZWVfcGFnZXMobWVtLT5hcnJbbWVtLT5jbnRdLnBhZ2UsCisJCQkgICAgIG1lbS0+YXJyW21lbS0+Y250XS5vcmRlcik7CisJa2ZyZWUobWVtLT5hcnIpOworCWtmcmVlKG1lbSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIGxvdCBvZiBtZW1vcnksIHByZWZlcnJhYmx5IG1heF9zeiBidXQgYXQgbGVhc3QgbWluX3N6LiAgSW4gY2FzZQorICogdGhlcmUgaXNuJ3QgbXVjaCBtZW1vcnkgZG8gbm90IGV4Y2VlZCAxLzE2dGggdG90YWwgbG93bWVtIHBhZ2VzLgorICovCitzdGF0aWMgc3RydWN0IG1tY190ZXN0X21lbSAqbW1jX3Rlc3RfYWxsb2NfbWVtKHVuc2lnbmVkIGxvbmcgbWluX3N6LAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtYXhfc3opCit7CisJdW5zaWduZWQgbG9uZyBtYXhfcGFnZV9jbnQgPSBESVZfUk9VTkRfVVAobWF4X3N6LCBQQUdFX1NJWkUpOworCXVuc2lnbmVkIGxvbmcgbWluX3BhZ2VfY250ID0gRElWX1JPVU5EX1VQKG1pbl9zeiwgUEFHRV9TSVpFKTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VfY250ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gbnJfZnJlZV9idWZmZXJfcGFnZXMoKSA+PiA0OworCXN0cnVjdCBtbWNfdGVzdF9tZW0gKm1lbTsKKworCWlmIChtYXhfcGFnZV9jbnQgPiBsaW1pdCkKKwkJbWF4X3BhZ2VfY250ID0gbGltaXQ7CisJaWYgKG1heF9wYWdlX2NudCA8IG1pbl9wYWdlX2NudCkKKwkJbWF4X3BhZ2VfY250ID0gbWluX3BhZ2VfY250OworCisJbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1tY190ZXN0X21lbSksIEdGUF9LRVJORUwpOworCWlmICghbWVtKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbS0+YXJyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1tY190ZXN0X3BhZ2VzKSAqIG1heF9wYWdlX2NudCwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghbWVtLT5hcnIpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwl3aGlsZSAobWF4X3BhZ2VfY250KSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQl1bnNpZ25lZCBpbnQgb3JkZXI7CisJCWdmcF90IGZsYWdzID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUEgfCBfX0dGUF9OT1dBUk4gfAorCQkJCV9fR0ZQX05PUkVUUlk7CisKKwkJb3JkZXIgPSBnZXRfb3JkZXIobWF4X3BhZ2VfY250IDw8IFBBR0VfU0hJRlQpOworCQl3aGlsZSAoMSkgeworCQkJcGFnZSA9IGFsbG9jX3BhZ2VzKGZsYWdzLCBvcmRlcik7CisJCQlpZiAocGFnZSB8fCAhb3JkZXIpCisJCQkJYnJlYWs7CisJCQlvcmRlciAtPSAxOworCQl9CisJCWlmICghcGFnZSkgeworCQkJaWYgKHBhZ2VfY250IDwgbWluX3BhZ2VfY250KQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQlicmVhazsKKwkJfQorCQltZW0tPmFyclttZW0tPmNudF0ucGFnZSA9IHBhZ2U7CisJCW1lbS0+YXJyW21lbS0+Y250XS5vcmRlciA9IG9yZGVyOworCQltZW0tPmNudCArPSAxOworCQlpZiAobWF4X3BhZ2VfY250IDw9ICgxVUwgPDwgb3JkZXIpKQorCQkJYnJlYWs7CisJCW1heF9wYWdlX2NudCAtPSAxVUwgPDwgb3JkZXI7CisJCXBhZ2VfY250ICs9IDFVTCA8PCBvcmRlcjsKKwl9CisKKwlyZXR1cm4gbWVtOworCitvdXRfZnJlZToKKwltbWNfdGVzdF9mcmVlX21lbShtZW0pOworCXJldHVybiBOVUxMOworfQorCisvKgorICogTWFwIG1lbW9yeSBpbnRvIGEgc2NhdHRlcmxpc3QuICBPcHRpb25hbGx5IGFsbG93IHRoZSBzYW1lIG1lbW9yeSB0byBiZQorICogbWFwcGVkIG1vcmUgdGhhbiBvbmNlLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X21hcF9zZyhzdHJ1Y3QgbW1jX3Rlc3RfbWVtICptZW0sIHVuc2lnbmVkIGxvbmcgc3osCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IHJlcGVhdCwKKwkJCSAgIHVuc2lnbmVkIGludCBtYXhfc2VncywgdW5zaWduZWQgaW50ICpzZ19sZW4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CisKKwlzZ19pbml0X3RhYmxlKHNnbGlzdCwgbWF4X3NlZ3MpOworCisJKnNnX2xlbiA9IDA7CisJZG8geworCQlmb3IgKGkgPSAwOyBpIDwgbWVtLT5jbnQ7IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBsZW4gPSBQQUdFX1NJWkUgPDwgbWVtLT5hcnJbaV0ub3JkZXI7CisKKwkJCWlmIChzeiA8IGxlbikKKwkJCQlsZW4gPSBzejsKKwkJCWlmIChzZykKKwkJCQlzZyA9IHNnX25leHQoc2cpOworCQkJZWxzZQorCQkJCXNnID0gc2dsaXN0OworCQkJaWYgKCFzZykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXNnX3NldF9wYWdlKHNnLCBtZW0tPmFycltpXS5wYWdlLCBsZW4sIDApOworCQkJc3ogLT0gbGVuOworCQkJKnNnX2xlbiArPSAxOworCQkJaWYgKCFzeikKKwkJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHN6ICYmIHJlcGVhdCk7CisKKwlpZiAoc3opCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNnKQorCQlzZ19tYXJrX2VuZChzZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1hcCBtZW1vcnkgaW50byBhIHNjYXR0ZXJsaXN0IHNvIHRoYXQgbm8gcGFnZXMgYXJlIGNvbnRpZ3VvdXMuICBBbGxvdyB0aGUKKyAqIHNhbWUgbWVtb3J5IHRvIGJlIG1hcHBlZCBtb3JlIHRoYW4gb25jZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9tYXBfc2dfbWF4X3NjYXR0ZXIoc3RydWN0IG1tY190ZXN0X21lbSAqbWVtLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN6LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG1heF9zZWdzLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnNnX2xlbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaSA9IG1lbS0+Y250LCBjbnQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdm9pZCAqYmFzZSwgKmFkZHIsICpsYXN0X2FkZHIgPSBOVUxMOworCisJc2dfaW5pdF90YWJsZShzZ2xpc3QsIG1heF9zZWdzKTsKKworCSpzZ19sZW4gPSAwOworCXdoaWxlIChzeiAmJiBpKSB7CisJCWJhc2UgPSBwYWdlX2FkZHJlc3MobWVtLT5hcnJbLS1pXS5wYWdlKTsKKwkJY250ID0gMSA8PCBtZW0tPmFycltpXS5vcmRlcjsKKwkJd2hpbGUgKHN6ICYmIGNudCkgeworCQkJYWRkciA9IGJhc2UgKyBQQUdFX1NJWkUgKiAtLWNudDsKKwkJCWlmIChsYXN0X2FkZHIgJiYgbGFzdF9hZGRyICsgUEFHRV9TSVpFID09IGFkZHIpCisJCQkJY29udGludWU7CisJCQlsYXN0X2FkZHIgPSBhZGRyOworCQkJbGVuID0gUEFHRV9TSVpFOworCQkJaWYgKHN6IDwgbGVuKQorCQkJCWxlbiA9IHN6OworCQkJaWYgKHNnKQorCQkJCXNnID0gc2dfbmV4dChzZyk7CisJCQllbHNlCisJCQkJc2cgPSBzZ2xpc3Q7CisJCQlpZiAoIXNnKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJc2dfc2V0X3BhZ2Uoc2csIHZpcnRfdG9fcGFnZShhZGRyKSwgbGVuLCAwKTsKKwkJCXN6IC09IGxlbjsKKwkJCSpzZ19sZW4gKz0gMTsKKwkJfQorCX0KKworCWlmIChzZykKKwkJc2dfbWFya19lbmQoc2cpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdHJhbnNmZXIgcmF0ZSBpbiBieXRlcyBwZXIgc2Vjb25kLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IG1tY190ZXN0X3JhdGUodWludDY0X3QgYnl0ZXMsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJdWludDY0X3QgbnM7CisKKwlucyA9IHRzLT50dl9zZWM7CisJbnMgKj0gMTAwMDAwMDAwMDsKKwlucyArPSB0cy0+dHZfbnNlYzsKKworCWJ5dGVzICo9IDEwMDAwMDAwMDA7CisKKwl3aGlsZSAobnMgPiBVSU5UX01BWCkgeworCQlieXRlcyA+Pj0gMTsKKwkJbnMgPj49IDE7CisJfQorCisJaWYgKCFucykKKwkJcmV0dXJuIDA7CisKKwlkb19kaXYoYnl0ZXMsICh1aW50MzJfdClucyk7CisKKwlyZXR1cm4gYnl0ZXM7Cit9CisKKy8qCisgKiBQcmludCB0aGUgdHJhbnNmZXIgcmF0ZS4KKyAqLworc3RhdGljIHZvaWQgbW1jX3Rlc3RfcHJpbnRfcmF0ZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgdWludDY0X3QgYnl0ZXMsCisJCQkJc3RydWN0IHRpbWVzcGVjICp0czEsIHN0cnVjdCB0aW1lc3BlYyAqdHMyKQoreworCXVuc2lnbmVkIGludCByYXRlLCBzZWN0b3JzID0gYnl0ZXMgPj4gOTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwl0cyA9IHRpbWVzcGVjX3N1YigqdHMyLCAqdHMxKTsKKworCXJhdGUgPSBtbWNfdGVzdF9yYXRlKGJ5dGVzLCAmdHMpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRyYW5zZmVyIG9mICV1IHNlY3RvcnMgKCV1JXMgS2lCKSB0b29rICVsdS4lMDlsdSAiCisJCQkgInNlY29uZHMgKCV1IGtCL3MsICV1IEtpQi9zKVxuIiwKKwkJCSBtbWNfaG9zdG5hbWUodGVzdC0+Y2FyZC0+aG9zdCksIHNlY3RvcnMsIHNlY3RvcnMgPj4gMSwKKwkJCSAoc2VjdG9ycyA9PSAxID8gIi41IiA6ICIiKSwgKHVuc2lnbmVkIGxvbmcpdHMudHZfc2VjLAorCQkJICh1bnNpZ25lZCBsb25nKXRzLnR2X25zZWMsIHJhdGUgLyAxMDAwLCByYXRlIC8gMTAyNCk7Cit9CisKKy8qCisgKiBQcmludCB0aGUgYXZlcmFnZSB0cmFuc2ZlciByYXRlLgorICovCitzdGF0aWMgdm9pZCBtbWNfdGVzdF9wcmludF9hdmdfcmF0ZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgdWludDY0X3QgYnl0ZXMsCisJCQkJICAgIHVuc2lnbmVkIGludCBjb3VudCwgc3RydWN0IHRpbWVzcGVjICp0czEsCisJCQkJICAgIHN0cnVjdCB0aW1lc3BlYyAqdHMyKQoreworCXVuc2lnbmVkIGludCByYXRlLCBzZWN0b3JzID0gYnl0ZXMgPj4gOTsKKwl1aW50NjRfdCB0b3QgPSBieXRlcyAqIGNvdW50OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKworCXRzID0gdGltZXNwZWNfc3ViKCp0czIsICp0czEpOworCisJcmF0ZSA9IG1tY190ZXN0X3JhdGUodG90LCAmdHMpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRyYW5zZmVyIG9mICV1IHggJXUgc2VjdG9ycyAoJXUgeCAldSVzIEtpQikgdG9vayAiCisJCQkgIiVsdS4lMDlsdSBzZWNvbmRzICgldSBrQi9zLCAldSBLaUIvcylcbiIsCisJCQkgbW1jX2hvc3RuYW1lKHRlc3QtPmNhcmQtPmhvc3QpLCBjb3VudCwgc2VjdG9ycywgY291bnQsCisJCQkgc2VjdG9ycyA+PiAxLCAoc2VjdG9ycyA9PSAxID8gIi41IiA6ICIiKSwKKwkJCSAodW5zaWduZWQgbG9uZyl0cy50dl9zZWMsICh1bnNpZ25lZCBsb25nKXRzLnR2X25zZWMsCisJCQkgcmF0ZSAvIDEwMDAsIHJhdGUgLyAxMDI0KTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgY2FyZCBzaXplIGluIHNlY3RvcnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW1jX3Rlc3RfY2FwYWNpdHkoc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCWlmICghbW1jX2NhcmRfc2QoY2FyZCkgJiYgbW1jX2NhcmRfYmxvY2thZGRyKGNhcmQpKQorCQlyZXR1cm4gY2FyZC0+ZXh0X2NzZC5zZWN0b3JzOworCWVsc2UKKwkJcmV0dXJuIGNhcmQtPmNzZC5jYXBhY2l0eSA8PCAoY2FyZC0+Y3NkLnJlYWRfYmxrYml0cyAtIDkpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBUZXN0IHByZXBhcmF0aW9uIGFuZCBjbGVhbnVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04OTMsOCArMTE5Nyw0MTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2Vsc2UKKworc3RhdGljIGludCBtbWNfdGVzdF9ub19oaWdobWVtKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOiBIaWdobWVtIG5vdCBjb25maWd1cmVkIC0gdGVzdCBza2lwcGVkXG4iLAorCSAgICAgICBtbWNfaG9zdG5hbWUodGVzdC0+Y2FyZC0+aG9zdCkpOworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIAorLyoKKyAqIE1hcCBzeiBieXRlcyBzbyB0aGF0IGl0IGNhbiBiZSB0cmFuc2ZlcnJlZC4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9hcmVhX21hcChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgdW5zaWduZWQgbG9uZyBzeiwKKwkJCSAgICAgaW50IG1heF9zY2F0dGVyKQoreworCXN0cnVjdCBtbWNfdGVzdF9hcmVhICp0ID0gJnRlc3QtPmFyZWE7CisKKwl0LT5ibG9ja3MgPSBzeiA+PiA5OworCisJaWYgKG1heF9zY2F0dGVyKSB7CisJCXJldHVybiBtbWNfdGVzdF9tYXBfc2dfbWF4X3NjYXR0ZXIodC0+bWVtLCBzeiwgdC0+c2csCisJCQkJCQkgICB0LT5tYXhfc2VncywgJnQtPnNnX2xlbik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIG1tY190ZXN0X21hcF9zZyh0LT5tZW0sIHN6LCB0LT5zZywgMSwgdC0+bWF4X3NlZ3MsCisJCQkJICAgICAgICZ0LT5zZ19sZW4pOworCX0KK30KKworLyoKKyAqIFRyYW5zZmVyIGJ5dGVzIG1hcHBlZCBieSBtbWNfdGVzdF9hcmVhX21hcCgpLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2FyZWFfdHJhbnNmZXIoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QsCisJCQkJICB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3QgbW1jX3Rlc3RfYXJlYSAqdCA9ICZ0ZXN0LT5hcmVhOworCisJcmV0dXJuIG1tY190ZXN0X3NpbXBsZV90cmFuc2Zlcih0ZXN0LCB0LT5zZywgdC0+c2dfbGVuLCBkZXZfYWRkciwKKwkJCQkJdC0+YmxvY2tzLCA1MTIsIHdyaXRlKTsKK30KKworLyoKKyAqIE1hcCBhbmQgdHJhbnNmZXIgYnl0ZXMuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYXJlYV9pbyhzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgdW5zaWduZWQgbG9uZyBzeiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGludCB3cml0ZSwgaW50IG1heF9zY2F0dGVyLAorCQkJICAgIGludCB0aW1lZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHMxLCB0czI7CisJaW50IHJldDsKKworCXJldCA9IG1tY190ZXN0X2FyZWFfbWFwKHRlc3QsIHN6LCBtYXhfc2NhdHRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0aW1lZCkKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzMSk7CisKKwlyZXQgPSBtbWNfdGVzdF9hcmVhX3RyYW5zZmVyKHRlc3QsIGRldl9hZGRyLCB3cml0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0aW1lZCkKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzMik7CisKKwlpZiAodGltZWQpCisJCW1tY190ZXN0X3ByaW50X3JhdGUodGVzdCwgc3osICZ0czEsICZ0czIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgdGVzdCBhcmVhIGVudGlyZWx5LgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2FyZWFfZmlsbChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlyZXR1cm4gbW1jX3Rlc3RfYXJlYV9pbyh0ZXN0LCB0ZXN0LT5hcmVhLm1heF9zeiwgdGVzdC0+YXJlYS5kZXZfYWRkciwKKwkJCQkxLCAwLCAwKTsKK30KKworLyoKKyAqIEVyYXNlIHRoZSB0ZXN0IGFyZWEgZW50aXJlbHkuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYXJlYV9lcmFzZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlzdHJ1Y3QgbW1jX3Rlc3RfYXJlYSAqdCA9ICZ0ZXN0LT5hcmVhOworCisJaWYgKCFtbWNfY2FuX2VyYXNlKHRlc3QtPmNhcmQpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBtbWNfZXJhc2UodGVzdC0+Y2FyZCwgdC0+ZGV2X2FkZHIsIHRlc3QtPmFyZWEubWF4X3N6ID4+IDksCisJCQkgTU1DX0VSQVNFX0FSRyk7Cit9CisKKy8qCisgKiBDbGVhbnVwIHN0cnVjdCBtbWNfdGVzdF9hcmVhLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2FyZWFfY2xlYW51cChzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlzdHJ1Y3QgbW1jX3Rlc3RfYXJlYSAqdCA9ICZ0ZXN0LT5hcmVhOworCisJa2ZyZWUodC0+c2cpOworCW1tY190ZXN0X2ZyZWVfbWVtKHQtPm1lbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgYW4gYXJlYSBmb3IgdGVzdGluZyBsYXJnZSB0cmFuc2ZlcnMuICBUaGUgc2l6ZSBvZiB0aGUgYXJlYSBpcyB0aGUKKyAqIHByZWZlcnJlZCBlcmFzZSBzaXplIHdoaWNoIGlzIGEgZ29vZCBzaXplIGZvciBvcHRpbWFsIHRyYW5zZmVyIHNwZWVkLiAgTm90ZQorICogdGhhdCBpcyB0eXBpY2FsbHkgNE1pQiBmb3IgbW9kZXJuIGNhcmRzLiAgVGhlIHRlc3QgYXJlYSBpcyBzZXQgdG8gdGhlIG1pZGRsZQorICogb2YgdGhlIGNhcmQgYmVjYXVzZSBjYXJkcyBtYXkgaGF2ZSBkaWZmZXJlbnQgY2hhcmF0ZXJpc3RpY3MgYXQgdGhlIGZyb250CisgKiAoZm9yIEZBVCBmaWxlIHN5c3RlbSBvcHRpbWl6YXRpb24pLiAgT3B0aW9uYWxseSwgdGhlIGFyZWEgaXMgZXJhc2VkIChpZiB0aGUKKyAqIGNhcmQgc3VwcG9ydHMgaXQpIHdoaWNoIG1heSBpbXByb3ZlIHdyaXRlIHBlcmZvcm1hbmNlLiAgT3B0aW9uYWxseSwgdGhlIGFyZWEKKyAqIGlzIGZpbGxlZCB3aXRoIGRhdGEgZm9yIHN1YnNlcXVlbnQgcmVhZCB0ZXN0cy4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9hcmVhX2luaXQoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QsIGludCBlcmFzZSwgaW50IGZpbGwpCit7CisJc3RydWN0IG1tY190ZXN0X2FyZWEgKnQgPSAmdGVzdC0+YXJlYTsKKwl1bnNpZ25lZCBsb25nIG1pbl9zeiA9IDY0ICogMTAyNDsKKwlpbnQgcmV0OworCisJcmV0ID0gbW1jX3Rlc3Rfc2V0X2Jsa3NpemUodGVzdCwgNTEyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHRlc3QtPmNhcmQtPnByZWZfZXJhc2UgPiBURVNUX0FSRUFfTUFYX1NJWkUgPj4gOSkKKwkJdC0+bWF4X3N6ID0gVEVTVF9BUkVBX01BWF9TSVpFOworCWVsc2UKKwkJdC0+bWF4X3N6ID0gKHVuc2lnbmVkIGxvbmcpdGVzdC0+Y2FyZC0+cHJlZl9lcmFzZSA8PCA5OworCS8qCisJICogVHJ5IHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIHRoZSB3aG9sZSBhcmVhLiAgTGVzcyBpcyBPSworCSAqIGJlY2F1c2UgdGhlIHNhbWUgbWVtb3J5IGNhbiBiZSBtYXBwZWQgaW50byB0aGUgc2NhdHRlcmxpc3QgbW9yZSB0aGFuCisJICogb25jZS4KKwkgKi8KKwl0LT5tZW0gPSBtbWNfdGVzdF9hbGxvY19tZW0obWluX3N6LCB0LT5tYXhfc3opOworCWlmICghdC0+bWVtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXQtPm1heF9zZWdzID0gRElWX1JPVU5EX1VQKHQtPm1heF9zeiwgUEFHRV9TSVpFKTsKKwl0LT5zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiB0LT5tYXhfc2VncywgR0ZQX0tFUk5FTCk7CisJaWYgKCF0LT5zZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXQtPmRldl9hZGRyID0gbW1jX3Rlc3RfY2FwYWNpdHkodGVzdC0+Y2FyZCkgLyAyOworCXQtPmRldl9hZGRyIC09IHQtPmRldl9hZGRyICUgKHQtPm1heF9zeiA+PiA5KTsKKworCWlmIChlcmFzZSkgeworCQlyZXQgPSBtbWNfdGVzdF9hcmVhX2VyYXNlKHRlc3QpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpZiAoZmlsbCkgeworCQlyZXQgPSBtbWNfdGVzdF9hcmVhX2ZpbGwodGVzdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldHVybiAwOworCitvdXRfZnJlZToKKwltbWNfdGVzdF9hcmVhX2NsZWFudXAodGVzdCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFByZXBhcmUgZm9yIGxhcmdlIHRyYW5zZmVycy4gIERvIG5vdCBlcmFzZSB0aGUgdGVzdCBhcmVhLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2FyZWFfcHJlcGFyZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlyZXR1cm4gbW1jX3Rlc3RfYXJlYV9pbml0KHRlc3QsIDAsIDApOworfQorCisvKgorICogUHJlcGFyZSBmb3IgbGFyZ2UgdHJhbnNmZXJzLiAgRG8gZXJhc2UgdGhlIHRlc3QgYXJlYS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9hcmVhX3ByZXBhcmVfZXJhc2Uoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJcmV0dXJuIG1tY190ZXN0X2FyZWFfaW5pdCh0ZXN0LCAxLCAwKTsKK30KKworLyoKKyAqIFByZXBhcmUgZm9yIGxhcmdlIHRyYW5zZmVycy4gIEVyYXNlIGFuZCBmaWxsIHRoZSB0ZXN0IGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYXJlYV9wcmVwYXJlX2ZpbGwoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJcmV0dXJuIG1tY190ZXN0X2FyZWFfaW5pdCh0ZXN0LCAxLCAxKTsKK30KKworLyoKKyAqIFRlc3QgYmVzdC1jYXNlIHBlcmZvcm1hbmNlLiAgQmVzdC1jYXNlIHBlcmZvcm1hbmNlIGlzIGV4cGVjdGVkIGZyb20KKyAqIGEgc2luZ2xlIGxhcmdlIHRyYW5zZmVyLgorICoKKyAqIEFuIGFkZGl0aW9uYWwgb3B0aW9uIChtYXhfc2NhdHRlcikgYWxsb3dzIHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgc2FtZQorICogdHJhbnNmZXIgYnV0IHdpdGggbm8gY29udGlndW91cyBwYWdlcyBpbiB0aGUgc2NhdHRlciBsaXN0LiAgVGhpcyB0ZXN0cworICogdGhlIGVmZmljaWVuY3kgb2YgRE1BIHRvIGhhbmRsZSBzY2F0dGVyZWQgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYmVzdF9wZXJmb3JtYW5jZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCwgaW50IHdyaXRlLAorCQkJCSAgICAgaW50IG1heF9zY2F0dGVyKQoreworCXJldHVybiBtbWNfdGVzdF9hcmVhX2lvKHRlc3QsIHRlc3QtPmFyZWEubWF4X3N6LCB0ZXN0LT5hcmVhLmRldl9hZGRyLAorCQkJCXdyaXRlLCBtYXhfc2NhdHRlciwgMSk7Cit9CisKKy8qCisgKiBCZXN0LWNhc2UgcmVhZCBwZXJmb3JtYW5jZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9iZXN0X3JlYWRfcGVyZm9ybWFuY2Uoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJcmV0dXJuIG1tY190ZXN0X2Jlc3RfcGVyZm9ybWFuY2UodGVzdCwgMCwgMCk7Cit9CisKKy8qCisgKiBCZXN0LWNhc2Ugd3JpdGUgcGVyZm9ybWFuY2UuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfYmVzdF93cml0ZV9wZXJmb3JtYW5jZShzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlyZXR1cm4gbW1jX3Rlc3RfYmVzdF9wZXJmb3JtYW5jZSh0ZXN0LCAxLCAwKTsKK30KKworLyoKKyAqIEJlc3QtY2FzZSByZWFkIHBlcmZvcm1hbmNlIGludG8gc2NhdHRlcmVkIHBhZ2VzLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2Jlc3RfcmVhZF9wZXJmX21heF9zY2F0dGVyKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXJldHVybiBtbWNfdGVzdF9iZXN0X3BlcmZvcm1hbmNlKHRlc3QsIDAsIDEpOworfQorCisvKgorICogQmVzdC1jYXNlIHdyaXRlIHBlcmZvcm1hbmNlIGZyb20gc2NhdHRlcmVkIHBhZ2VzLgorICovCitzdGF0aWMgaW50IG1tY190ZXN0X2Jlc3Rfd3JpdGVfcGVyZl9tYXhfc2NhdHRlcihzdHJ1Y3QgbW1jX3Rlc3RfY2FyZCAqdGVzdCkKK3sKKwlyZXR1cm4gbW1jX3Rlc3RfYmVzdF9wZXJmb3JtYW5jZSh0ZXN0LCAxLCAxKTsKK30KKworLyoKKyAqIFNpbmdsZSByZWFkIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfcHJvZmlsZV9yZWFkX3BlcmYoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl1bnNpZ25lZCBpbnQgZGV2X2FkZHI7CisJaW50IHJldDsKKworCWZvciAoc3ogPSA1MTI7IHN6IDwgdGVzdC0+YXJlYS5tYXhfc3o7IHN6IDw8PSAxKSB7CisJCWRldl9hZGRyID0gdGVzdC0+YXJlYS5kZXZfYWRkciArIChzeiA+PiA5KTsKKwkJcmV0ID0gbW1jX3Rlc3RfYXJlYV9pbyh0ZXN0LCBzeiwgZGV2X2FkZHIsIDAsIDAsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJZGV2X2FkZHIgPSB0ZXN0LT5hcmVhLmRldl9hZGRyOworCXJldHVybiBtbWNfdGVzdF9hcmVhX2lvKHRlc3QsIHN6LCBkZXZfYWRkciwgMCwgMCwgMSk7Cit9CisKKy8qCisgKiBTaW5nbGUgd3JpdGUgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9wcm9maWxlX3dyaXRlX3BlcmYoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl1bnNpZ25lZCBpbnQgZGV2X2FkZHI7CisJaW50IHJldDsKKworCXJldCA9IG1tY190ZXN0X2FyZWFfZXJhc2UodGVzdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmb3IgKHN6ID0gNTEyOyBzeiA8IHRlc3QtPmFyZWEubWF4X3N6OyBzeiA8PD0gMSkgeworCQlkZXZfYWRkciA9IHRlc3QtPmFyZWEuZGV2X2FkZHIgKyAoc3ogPj4gOSk7CisJCXJldCA9IG1tY190ZXN0X2FyZWFfaW8odGVzdCwgc3osIGRldl9hZGRyLCAxLCAwLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldCA9IG1tY190ZXN0X2FyZWFfZXJhc2UodGVzdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkZXZfYWRkciA9IHRlc3QtPmFyZWEuZGV2X2FkZHI7CisJcmV0dXJuIG1tY190ZXN0X2FyZWFfaW8odGVzdCwgc3osIGRldl9hZGRyLCAxLCAwLCAxKTsKK30KKworLyoKKyAqIFNpbmdsZSB0cmltIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfcHJvZmlsZV90cmltX3BlcmYoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl1bnNpZ25lZCBpbnQgZGV2X2FkZHI7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyOworCWludCByZXQ7CisKKwlpZiAoIW1tY19jYW5fdHJpbSh0ZXN0LT5jYXJkKSkKKwkJcmV0dXJuIFJFU1VMVF9VTlNVUF9DQVJEOworCisJaWYgKCFtbWNfY2FuX2VyYXNlKHRlc3QtPmNhcmQpKQorCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CisKKwlmb3IgKHN6ID0gNTEyOyBzeiA8IHRlc3QtPmFyZWEubWF4X3N6OyBzeiA8PD0gMSkgeworCQlkZXZfYWRkciA9IHRlc3QtPmFyZWEuZGV2X2FkZHIgKyAoc3ogPj4gOSk7CisJCWdldG5zdGltZW9mZGF5KCZ0czEpOworCQlyZXQgPSBtbWNfZXJhc2UodGVzdC0+Y2FyZCwgZGV2X2FkZHIsIHN6ID4+IDksIE1NQ19UUklNX0FSRyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwkJbW1jX3Rlc3RfcHJpbnRfcmF0ZSh0ZXN0LCBzeiwgJnRzMSwgJnRzMik7CisJfQorCWRldl9hZGRyID0gdGVzdC0+YXJlYS5kZXZfYWRkcjsKKwlnZXRuc3RpbWVvZmRheSgmdHMxKTsKKwlyZXQgPSBtbWNfZXJhc2UodGVzdC0+Y2FyZCwgZGV2X2FkZHIsIHN6ID4+IDksIE1NQ19UUklNX0FSRyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwltbWNfdGVzdF9wcmludF9yYXRlKHRlc3QsIHN6LCAmdHMxLCAmdHMyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbnNlY3V0aXZlIHJlYWQgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9wcm9maWxlX3NlcV9yZWFkX3BlcmYoc3RydWN0IG1tY190ZXN0X2NhcmQgKnRlc3QpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl1bnNpZ25lZCBpbnQgZGV2X2FkZHIsIGksIGNudDsKKwlzdHJ1Y3QgdGltZXNwZWMgdHMxLCB0czI7CisJaW50IHJldDsKKworCWZvciAoc3ogPSA1MTI7IHN6IDw9IHRlc3QtPmFyZWEubWF4X3N6OyBzeiA8PD0gMSkgeworCQljbnQgPSB0ZXN0LT5hcmVhLm1heF9zeiAvIHN6OworCQlkZXZfYWRkciA9IHRlc3QtPmFyZWEuZGV2X2FkZHI7CisJCWdldG5zdGltZW9mZGF5KCZ0czEpOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJCXJldCA9IG1tY190ZXN0X2FyZWFfaW8odGVzdCwgc3osIGRldl9hZGRyLCAwLCAwLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWRldl9hZGRyICs9IChzeiA+PiA5KTsKKwkJfQorCQlnZXRuc3RpbWVvZmRheSgmdHMyKTsKKwkJbW1jX3Rlc3RfcHJpbnRfYXZnX3JhdGUodGVzdCwgc3osIGNudCwgJnRzMSwgJnRzMik7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ29uc2VjdXRpdmUgd3JpdGUgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZS4KKyAqLworc3RhdGljIGludCBtbWNfdGVzdF9wcm9maWxlX3NlcV93cml0ZV9wZXJmKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXVuc2lnbmVkIGxvbmcgc3o7CisJdW5zaWduZWQgaW50IGRldl9hZGRyLCBpLCBjbnQ7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyOworCWludCByZXQ7CisKKwlmb3IgKHN6ID0gNTEyOyBzeiA8PSB0ZXN0LT5hcmVhLm1heF9zejsgc3ogPDw9IDEpIHsKKwkJcmV0ID0gbW1jX3Rlc3RfYXJlYV9lcmFzZSh0ZXN0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWNudCA9IHRlc3QtPmFyZWEubWF4X3N6IC8gc3o7CisJCWRldl9hZGRyID0gdGVzdC0+YXJlYS5kZXZfYWRkcjsKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzMSk7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJcmV0ID0gbW1jX3Rlc3RfYXJlYV9pbyh0ZXN0LCBzeiwgZGV2X2FkZHIsIDEsIDAsIDApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZGV2X2FkZHIgKz0gKHN6ID4+IDkpOworCQl9CisJCWdldG5zdGltZW9mZGF5KCZ0czIpOworCQltbWNfdGVzdF9wcmludF9hdmdfcmF0ZSh0ZXN0LCBzeiwgY250LCAmdHMxLCAmdHMyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25zZWN1dGl2ZSB0cmltIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3Rlc3RfcHJvZmlsZV9zZXFfdHJpbV9wZXJmKHN0cnVjdCBtbWNfdGVzdF9jYXJkICp0ZXN0KQoreworCXVuc2lnbmVkIGxvbmcgc3o7CisJdW5zaWduZWQgaW50IGRldl9hZGRyLCBpLCBjbnQ7CisJc3RydWN0IHRpbWVzcGVjIHRzMSwgdHMyOworCWludCByZXQ7CisKKwlpZiAoIW1tY19jYW5fdHJpbSh0ZXN0LT5jYXJkKSkKKwkJcmV0dXJuIFJFU1VMVF9VTlNVUF9DQVJEOworCisJaWYgKCFtbWNfY2FuX2VyYXNlKHRlc3QtPmNhcmQpKQorCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CisKKwlmb3IgKHN6ID0gNTEyOyBzeiA8PSB0ZXN0LT5hcmVhLm1heF9zejsgc3ogPDw9IDEpIHsKKwkJcmV0ID0gbW1jX3Rlc3RfYXJlYV9lcmFzZSh0ZXN0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IG1tY190ZXN0X2FyZWFfZmlsbCh0ZXN0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWNudCA9IHRlc3QtPmFyZWEubWF4X3N6IC8gc3o7CisJCWRldl9hZGRyID0gdGVzdC0+YXJlYS5kZXZfYWRkcjsKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzMSk7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJcmV0ID0gbW1jX2VyYXNlKHRlc3QtPmNhcmQsIGRldl9hZGRyLCBzeiA+PiA5LAorCQkJCQlNTUNfVFJJTV9BUkcpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJZGV2X2FkZHIgKz0gKHN6ID4+IDkpOworCQl9CisJCWdldG5zdGltZW9mZGF5KCZ0czIpOworCQltbWNfdGVzdF9wcmludF9hdmdfcmF0ZSh0ZXN0LCBzeiwgY250LCAmdHMxLCAmdHMyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX3Rlc3RfY2FzZSBtbWNfdGVzdF9jYXNlc1tdID0gewogCXsKIAkJLm5hbWUgPSAiQmFzaWMgd3JpdGUgKG5vIGRhdGEgdmVyaWZpY2F0aW9uKSIsCkBAIC0xMDQwLDggKzE3NTUsMTAwIEBACiAJCS5jbGVhbnVwID0gbW1jX3Rlc3RfY2xlYW51cCwKIAl9LAogCisjZWxzZQorCisJeworCQkubmFtZSA9ICJIaWdobWVtIHdyaXRlIiwKKwkJLnJ1biA9IG1tY190ZXN0X25vX2hpZ2htZW0sCisJfSwKKworCXsKKwkJLm5hbWUgPSAiSGlnaG1lbSByZWFkIiwKKwkJLnJ1biA9IG1tY190ZXN0X25vX2hpZ2htZW0sCisJfSwKKworCXsKKwkJLm5hbWUgPSAiTXVsdGktYmxvY2sgaGlnaG1lbSB3cml0ZSIsCisJCS5ydW4gPSBtbWNfdGVzdF9ub19oaWdobWVtLAorCX0sCisKKwl7CisJCS5uYW1lID0gIk11bHRpLWJsb2NrIGhpZ2htZW0gcmVhZCIsCisJCS5ydW4gPSBtbWNfdGVzdF9ub19oaWdobWVtLAorCX0sCisKICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCisJeworCQkubmFtZSA9ICJCZXN0LWNhc2UgcmVhZCBwZXJmb3JtYW5jZSIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfYXJlYV9wcmVwYXJlX2ZpbGwsCisJCS5ydW4gPSBtbWNfdGVzdF9iZXN0X3JlYWRfcGVyZm9ybWFuY2UsCisJCS5jbGVhbnVwID0gbW1jX3Rlc3RfYXJlYV9jbGVhbnVwLAorCX0sCisKKwl7CisJCS5uYW1lID0gIkJlc3QtY2FzZSB3cml0ZSBwZXJmb3JtYW5jZSIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfYXJlYV9wcmVwYXJlX2VyYXNlLAorCQkucnVuID0gbW1jX3Rlc3RfYmVzdF93cml0ZV9wZXJmb3JtYW5jZSwKKwkJLmNsZWFudXAgPSBtbWNfdGVzdF9hcmVhX2NsZWFudXAsCisJfSwKKworCXsKKwkJLm5hbWUgPSAiQmVzdC1jYXNlIHJlYWQgcGVyZm9ybWFuY2UgaW50byBzY2F0dGVyZWQgcGFnZXMiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZV9maWxsLAorCQkucnVuID0gbW1jX3Rlc3RfYmVzdF9yZWFkX3BlcmZfbWF4X3NjYXR0ZXIsCisJCS5jbGVhbnVwID0gbW1jX3Rlc3RfYXJlYV9jbGVhbnVwLAorCX0sCisKKwl7CisJCS5uYW1lID0gIkJlc3QtY2FzZSB3cml0ZSBwZXJmb3JtYW5jZSBmcm9tIHNjYXR0ZXJlZCBwYWdlcyIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfYXJlYV9wcmVwYXJlX2VyYXNlLAorCQkucnVuID0gbW1jX3Rlc3RfYmVzdF93cml0ZV9wZXJmX21heF9zY2F0dGVyLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJTaW5nbGUgcmVhZCBwZXJmb3JtYW5jZSBieSB0cmFuc2ZlciBzaXplIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9hcmVhX3ByZXBhcmVfZmlsbCwKKwkJLnJ1biA9IG1tY190ZXN0X3Byb2ZpbGVfcmVhZF9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJTaW5nbGUgd3JpdGUgcGVyZm9ybWFuY2UgYnkgdHJhbnNmZXIgc2l6ZSIsCisJCS5wcmVwYXJlID0gbW1jX3Rlc3RfYXJlYV9wcmVwYXJlLAorCQkucnVuID0gbW1jX3Rlc3RfcHJvZmlsZV93cml0ZV9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJTaW5nbGUgdHJpbSBwZXJmb3JtYW5jZSBieSB0cmFuc2ZlciBzaXplIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9hcmVhX3ByZXBhcmVfZmlsbCwKKwkJLnJ1biA9IG1tY190ZXN0X3Byb2ZpbGVfdHJpbV9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJDb25zZWN1dGl2ZSByZWFkIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZV9maWxsLAorCQkucnVuID0gbW1jX3Rlc3RfcHJvZmlsZV9zZXFfcmVhZF9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJDb25zZWN1dGl2ZSB3cml0ZSBwZXJmb3JtYW5jZSBieSB0cmFuc2ZlciBzaXplIiwKKwkJLnByZXBhcmUgPSBtbWNfdGVzdF9hcmVhX3ByZXBhcmUsCisJCS5ydW4gPSBtbWNfdGVzdF9wcm9maWxlX3NlcV93cml0ZV9wZXJmLAorCQkuY2xlYW51cCA9IG1tY190ZXN0X2FyZWFfY2xlYW51cCwKKwl9LAorCisJeworCQkubmFtZSA9ICJDb25zZWN1dGl2ZSB0cmltIHBlcmZvcm1hbmNlIGJ5IHRyYW5zZmVyIHNpemUiLAorCQkucHJlcGFyZSA9IG1tY190ZXN0X2FyZWFfcHJlcGFyZSwKKwkJLnJ1biA9IG1tY190ZXN0X3Byb2ZpbGVfc2VxX3RyaW1fcGVyZiwKKwkJLmNsZWFudXAgPSBtbWNfdGVzdF9hcmVhX2NsZWFudXAsCisJfSwKKwogfTsKIAogc3RhdGljIERFRklORV9NVVRFWChtbWNfdGVzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYyBiL2RyaXZlcnMvbW1jL2NhcmQvcXVldWUuYwppbmRleCBkNmRlZDI0Li5lODc2Njc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jYXJkL3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9xdWV1ZS5jCkBAIC0zMCw5ICszMCw5IEBACiBzdGF0aWMgaW50IG1tY19wcmVwX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCiB7CiAJLyoKLQkgKiBXZSBvbmx5IGxpa2Ugbm9ybWFsIGJsb2NrIHJlcXVlc3RzLgorCSAqIFdlIG9ubHkgbGlrZSBub3JtYWwgYmxvY2sgcmVxdWVzdHMgYW5kIGRpc2NhcmRzLgogCSAqLwotCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkgeworCWlmIChyZXEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTICYmICEocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRElTQ0FSRCkpIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocmVxLCAiTU1DIGJhZCByZXF1ZXN0Iik7CiAJCXJldHVybiBCTEtQUkVQX0tJTEw7CiAJfQpAQCAtMTI4LDggKzEyOCwyMyBAQAogCW1xLT5yZXEgPSBOVUxMOwogCiAJYmxrX3F1ZXVlX3ByZXBfcnEobXEtPnF1ZXVlLCBtbWNfcHJlcF9yZXF1ZXN0KTsKLQlibGtfcXVldWVfb3JkZXJlZChtcS0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOworCWJsa19xdWV1ZV9vcmRlcmVkKG1xLT5xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTik7CiAJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19OT05ST1QsIG1xLT5xdWV1ZSk7CisJaWYgKG1tY19jYW5fZXJhc2UoY2FyZCkpIHsKKwkJcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19ESVNDQVJELCBtcS0+cXVldWUpOworCQltcS0+cXVldWUtPmxpbWl0cy5tYXhfZGlzY2FyZF9zZWN0b3JzID0gVUlOVF9NQVg7CisJCWlmIChjYXJkLT5lcmFzZWRfYnl0ZSA9PSAwKQorCQkJbXEtPnF1ZXVlLT5saW1pdHMuZGlzY2FyZF96ZXJvZXNfZGF0YSA9IDE7CisJCWlmICghbW1jX2Nhbl90cmltKGNhcmQpICYmIGlzX3Bvd2VyX29mXzIoY2FyZC0+ZXJhc2Vfc2l6ZSkpIHsKKwkJCW1xLT5xdWV1ZS0+bGltaXRzLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPQorCQkJCQkJCWNhcmQtPmVyYXNlX3NpemUgPDwgOTsKKwkJCW1xLT5xdWV1ZS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50ID0KKwkJCQkJCQljYXJkLT5lcmFzZV9zaXplIDw8IDk7CisJCX0KKwkJaWYgKG1tY19jYW5fc2VjdXJlX2VyYXNlX3RyaW0oY2FyZCkpCisJCQlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX1NFQ0RJU0NBUkQsCisJCQkJCQltcS0+cXVldWUpOworCX0KIAogI2lmZGVmIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFCiAJaWYgKGhvc3QtPm1heF9od19zZWdzID09IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IDQ5ZDlkY2EuLjdjZDk3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtMzcsNiArMzcsOCBAQAogCQlyZXR1cm4gc3ByaW50ZihidWYsICJTRFxuIik7CiAJY2FzZSBNTUNfVFlQRV9TRElPOgogCQlyZXR1cm4gc3ByaW50ZihidWYsICJTRElPXG4iKTsKKwljYXNlIE1NQ19UWVBFX1NEX0NPTUJPOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICJTRGNvbWJvXG4iKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC03NCw2ICs3Niw5IEBACiAJY2FzZSBNTUNfVFlQRV9TRElPOgogCQl0eXBlID0gIlNESU8iOwogCQlicmVhazsKKwljYXNlIE1NQ19UWVBFX1NEX0NPTUJPOgorCQl0eXBlID0gIlNEY29tYm8iOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl0eXBlID0gTlVMTDsKIAl9CkBAIC0yMzksNiArMjQ0LDEwIEBACiAJY2FzZSBNTUNfVFlQRV9TRElPOgogCQl0eXBlID0gIlNESU8iOwogCQlicmVhazsKKwljYXNlIE1NQ19UWVBFX1NEX0NPTUJPOgorCQl0eXBlID0gIlNELWNvbWJvIjsKKwkJaWYgKG1tY19jYXJkX2Jsb2NrYWRkcihjYXJkKSkKKwkJCXR5cGUgPSAiU0RIQy1jb21ibyI7CiAJZGVmYXVsdDoKIAkJdHlwZSA9ICI/IjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IDU2OWU5NGQuLjVkYjQ5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0xMDUwLDYgKzEwNTAsMzUyIEBACiAKIEVYUE9SVF9TWU1CT0wobW1jX2RldGVjdF9jaGFuZ2UpOwogCit2b2lkIG1tY19pbml0X2VyYXNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBpbnQgc3o7CisKKwlpZiAoaXNfcG93ZXJfb2ZfMihjYXJkLT5lcmFzZV9zaXplKSkKKwkJY2FyZC0+ZXJhc2Vfc2hpZnQgPSBmZnMoY2FyZC0+ZXJhc2Vfc2l6ZSkgLSAxOworCWVsc2UKKwkJY2FyZC0+ZXJhc2Vfc2hpZnQgPSAwOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0byBlcmFzZSBhbiBhcmJpdHJhcmlseSBsYXJnZSBhcmVhIG9mIGFuIFNEIG9yIE1NQworCSAqIGNhcmQuICBUaGF0IGlzIG5vdCBkZXNpcmFibGUgYmVjYXVzZSBpdCBjYW4gdGFrZSBhIGxvbmcgdGltZQorCSAqIChtaW51dGVzKSBwb3RlbnRpYWxseSBkZWxheWluZyBtb3JlIGltcG9ydGFudCBJL08sIGFuZCBhbHNvIHRoZQorCSAqIHRpbWVvdXQgY2FsY3VsYXRpb25zIGJlY29tZSBpbmNyZWFzaW5nbHkgaHVnZWx5IG92ZXItZXN0aW1hdGVkLgorCSAqIENvbnNlcXVlbnRseSwgJ3ByZWZfZXJhc2UnIGlzIGRlZmluZWQgYXMgYSBndWlkZSB0byBsaW1pdCBlcmFzZXMKKwkgKiB0byB0aGF0IHNpemUgYW5kIGFsaWdubWVudC4KKwkgKgorCSAqIEZvciBTRCBjYXJkcyB0aGF0IGRlZmluZSBBbGxvY2F0aW9uIFVuaXQgc2l6ZSwgbGltaXQgZXJhc2VzIHRvIG9uZQorCSAqIEFsbG9jYXRpb24gVW5pdCBhdCBhIHRpbWUuICBGb3IgTU1DIGNhcmRzIHRoYXQgZGVmaW5lIEhpZ2ggQ2FwYWNpdHkKKwkgKiBFcmFzZSBTaXplLCB3aGV0aGVyIGl0IGlzIHN3aXRjaGVkIG9uIG9yIG5vdCwgbGltaXQgdG8gdGhhdCBzaXplLgorCSAqIE90aGVyd2lzZSBqdXN0IGhhdmUgYSBzdGFiIGF0IGEgZ29vZCB2YWx1ZS4gIEZvciBtb2Rlcm4gY2FyZHMgaXQKKwkgKiB3aWxsIGVuZCB1cCBiZWluZyA0TWlCLiAgTm90ZSB0aGF0IGlmIHRoZSB2YWx1ZSBpcyB0b28gc21hbGwsIGl0CisJICogY2FuIGVuZCB1cCB0YWtpbmcgbG9uZ2VyIHRvIGVyYXNlLgorCSAqLworCWlmIChtbWNfY2FyZF9zZChjYXJkKSAmJiBjYXJkLT5zc3IuYXUpIHsKKwkJY2FyZC0+cHJlZl9lcmFzZSA9IGNhcmQtPnNzci5hdTsKKwkJY2FyZC0+ZXJhc2Vfc2hpZnQgPSBmZnMoY2FyZC0+c3NyLmF1KSAtIDE7CisJfSBlbHNlIGlmIChjYXJkLT5leHRfY3NkLmhjX2VyYXNlX3NpemUpIHsKKwkJY2FyZC0+cHJlZl9lcmFzZSA9IGNhcmQtPmV4dF9jc2QuaGNfZXJhc2Vfc2l6ZTsKKwl9IGVsc2UgeworCQlzeiA9IChjYXJkLT5jc2QuY2FwYWNpdHkgPDwgKGNhcmQtPmNzZC5yZWFkX2Jsa2JpdHMgLSA5KSkgPj4gMTE7CisJCWlmIChzeiA8IDEyOCkKKwkJCWNhcmQtPnByZWZfZXJhc2UgPSA1MTIgKiAxMDI0IC8gNTEyOworCQllbHNlIGlmIChzeiA8IDUxMikKKwkJCWNhcmQtPnByZWZfZXJhc2UgPSAxMDI0ICogMTAyNCAvIDUxMjsKKwkJZWxzZSBpZiAoc3ogPCAxMDI0KQorCQkJY2FyZC0+cHJlZl9lcmFzZSA9IDIgKiAxMDI0ICogMTAyNCAvIDUxMjsKKwkJZWxzZQorCQkJY2FyZC0+cHJlZl9lcmFzZSA9IDQgKiAxMDI0ICogMTAyNCAvIDUxMjsKKwkJaWYgKGNhcmQtPnByZWZfZXJhc2UgPCBjYXJkLT5lcmFzZV9zaXplKQorCQkJY2FyZC0+cHJlZl9lcmFzZSA9IGNhcmQtPmVyYXNlX3NpemU7CisJCWVsc2UgeworCQkJc3ogPSBjYXJkLT5wcmVmX2VyYXNlICUgY2FyZC0+ZXJhc2Vfc2l6ZTsKKwkJCWlmIChzeikKKwkJCQljYXJkLT5wcmVmX2VyYXNlICs9IGNhcmQtPmVyYXNlX3NpemUgLSBzejsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbW1jX3NldF9tbWNfZXJhc2VfdGltZW91dChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCisJCQkJICAgICAgc3RydWN0IG1tY19jb21tYW5kICpjbWQsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGFyZywgdW5zaWduZWQgaW50IHF0eSkKK3sKKwl1bnNpZ25lZCBpbnQgZXJhc2VfdGltZW91dDsKKworCWlmIChjYXJkLT5leHRfY3NkLmVyYXNlX2dyb3VwX2RlZiAmIDEpIHsKKwkJLyogSGlnaCBDYXBhY2l0eSBFcmFzZSBHcm91cCBTaXplIHVzZXMgSEMgdGltZW91dHMgKi8KKwkJaWYgKGFyZyA9PSBNTUNfVFJJTV9BUkcpCisJCQllcmFzZV90aW1lb3V0ID0gY2FyZC0+ZXh0X2NzZC50cmltX3RpbWVvdXQ7CisJCWVsc2UKKwkJCWVyYXNlX3RpbWVvdXQgPSBjYXJkLT5leHRfY3NkLmhjX2VyYXNlX3RpbWVvdXQ7CisJfSBlbHNlIHsKKwkJLyogQ1NEIEVyYXNlIEdyb3VwIFNpemUgdXNlcyB3cml0ZSB0aW1lb3V0ICovCisJCXVuc2lnbmVkIGludCBtdWx0ID0gKDEwIDw8IGNhcmQtPmNzZC5yMndfZmFjdG9yKTsKKwkJdW5zaWduZWQgaW50IHRpbWVvdXRfY2xrcyA9IGNhcmQtPmNzZC50YWNjX2Nsa3MgKiBtdWx0OworCQl1bnNpZ25lZCBpbnQgdGltZW91dF91czsKKworCQkvKiBBdm9pZCBvdmVyZmxvdzogZS5nLiB0YWNjX25zPTgwMDAwMDAwIG11bHQ9MTI4MCAqLworCQlpZiAoY2FyZC0+Y3NkLnRhY2NfbnMgPCAxMDAwMDAwKQorCQkJdGltZW91dF91cyA9IChjYXJkLT5jc2QudGFjY19ucyAqIG11bHQpIC8gMTAwMDsKKwkJZWxzZQorCQkJdGltZW91dF91cyA9IChjYXJkLT5jc2QudGFjY19ucyAvIDEwMDApICogbXVsdDsKKworCQkvKgorCQkgKiBpb3MuY2xvY2sgaXMgb25seSBhIHRhcmdldC4gIFRoZSByZWFsIGNsb2NrIHJhdGUgbWlnaHQgYmUKKwkJICogbGVzcyBidXQgbm90IHRoYXQgbXVjaCBsZXNzLCBzbyBmdWRnZSBpdCBieSBtdWx0aXBseWluZyBieSAyLgorCQkgKi8KKwkJdGltZW91dF9jbGtzIDw8PSAxOworCQl0aW1lb3V0X3VzICs9ICh0aW1lb3V0X2Nsa3MgKiAxMDAwKSAvCisJCQkgICAgICAoY2FyZC0+aG9zdC0+aW9zLmNsb2NrIC8gMTAwMCk7CisKKwkJZXJhc2VfdGltZW91dCA9IHRpbWVvdXRfdXMgLyAxMDAwOworCisJCS8qCisJCSAqIFRoZW9yZXRpY2FsbHksIHRoZSBjYWxjdWxhdGlvbiBjb3VsZCB1bmRlcmZsb3cgc28gcm91bmQgdXAKKwkJICogdG8gMW1zIGluIHRoYXQgY2FzZS4KKwkJICovCisJCWlmICghZXJhc2VfdGltZW91dCkKKwkJCWVyYXNlX3RpbWVvdXQgPSAxOworCX0KKworCS8qIE11bHRpcGxpZXIgZm9yIHNlY3VyZSBvcGVyYXRpb25zICovCisJaWYgKGFyZyAmIE1NQ19TRUNVUkVfQVJHUykgeworCQlpZiAoYXJnID09IE1NQ19TRUNVUkVfRVJBU0VfQVJHKQorCQkJZXJhc2VfdGltZW91dCAqPSBjYXJkLT5leHRfY3NkLnNlY19lcmFzZV9tdWx0OworCQllbHNlCisJCQllcmFzZV90aW1lb3V0ICo9IGNhcmQtPmV4dF9jc2Quc2VjX3RyaW1fbXVsdDsKKwl9CisKKwllcmFzZV90aW1lb3V0ICo9IHF0eTsKKworCS8qCisJICogRW5zdXJlIGF0IGxlYXN0IGEgMSBzZWNvbmQgdGltZW91dCBmb3IgU1BJIGFzIHBlcgorCSAqICdtbWNfc2V0X2RhdGFfdGltZW91dCgpJworCSAqLworCWlmIChtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkgJiYgZXJhc2VfdGltZW91dCA8IDEwMDApCisJCWVyYXNlX3RpbWVvdXQgPSAxMDAwOworCisJY21kLT5lcmFzZV90aW1lb3V0ID0gZXJhc2VfdGltZW91dDsKK30KKworc3RhdGljIHZvaWQgbW1jX3NldF9zZF9lcmFzZV90aW1lb3V0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKKwkJCQkgICAgIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1bnNpZ25lZCBpbnQgYXJnLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHF0eSkKK3sKKwlpZiAoY2FyZC0+c3NyLmVyYXNlX3RpbWVvdXQpIHsKKwkJLyogRXJhc2UgdGltZW91dCBzcGVjaWZpZWQgaW4gU0QgU3RhdHVzIFJlZ2lzdGVyIChTU1IpICovCisJCWNtZC0+ZXJhc2VfdGltZW91dCA9IGNhcmQtPnNzci5lcmFzZV90aW1lb3V0ICogcXR5ICsKKwkJCQkgICAgIGNhcmQtPnNzci5lcmFzZV9vZmZzZXQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRXJhc2UgdGltZW91dCBub3Qgc3BlY2lmaWVkIGluIFNEIFN0YXR1cyBSZWdpc3RlciAoU1NSKSBzbworCQkgKiB1c2UgMjUwbXMgcGVyIHdyaXRlIGJsb2NrLgorCQkgKi8KKwkJY21kLT5lcmFzZV90aW1lb3V0ID0gMjUwICogcXR5OworCX0KKworCS8qIE11c3Qgbm90IGJlIGxlc3MgdGhhbiAxIHNlY29uZCAqLworCWlmIChjbWQtPmVyYXNlX3RpbWVvdXQgPCAxMDAwKQorCQljbWQtPmVyYXNlX3RpbWVvdXQgPSAxMDAwOworfQorCitzdGF0aWMgdm9pZCBtbWNfc2V0X2VyYXNlX3RpbWVvdXQoc3RydWN0IG1tY19jYXJkICpjYXJkLAorCQkJCSAgc3RydWN0IG1tY19jb21tYW5kICpjbWQsIHVuc2lnbmVkIGludCBhcmcsCisJCQkJICB1bnNpZ25lZCBpbnQgcXR5KQoreworCWlmIChtbWNfY2FyZF9zZChjYXJkKSkKKwkJbW1jX3NldF9zZF9lcmFzZV90aW1lb3V0KGNhcmQsIGNtZCwgYXJnLCBxdHkpOworCWVsc2UKKwkJbW1jX3NldF9tbWNfZXJhc2VfdGltZW91dChjYXJkLCBjbWQsIGFyZywgcXR5KTsKK30KKworc3RhdGljIGludCBtbWNfZG9fZXJhc2Uoc3RydWN0IG1tY19jYXJkICpjYXJkLCB1bnNpZ25lZCBpbnQgZnJvbSwKKwkJCXVuc2lnbmVkIGludCB0bywgdW5zaWduZWQgaW50IGFyZykKK3sKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCXVuc2lnbmVkIGludCBxdHkgPSAwOworCWludCBlcnI7CisKKwkvKgorCSAqIHF0eSBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgZXJhc2UgdGltZW91dCB3aGljaCBkZXBlbmRzIG9uIGhvdyBtYW55CisJICogZXJhc2UgZ3JvdXBzIChvciBhbGxvY2F0aW9uIHVuaXRzIGluIFNEIHRlcm1pbm9sb2d5KSBhcmUgYWZmZWN0ZWQuCisJICogV2UgY291bnQgZXJhc2luZyBwYXJ0IG9mIGFuIGVyYXNlIGdyb3VwIGFzIG9uZSBlcmFzZSBncm91cC4KKwkgKiBGb3IgU0QsIHRoZSBhbGxvY2F0aW9uIHVuaXRzIGFyZSBhbHdheXMgYSBwb3dlciBvZiAyLiAgRm9yIE1NQywgdGhlCisJICogZXJhc2UgZ3JvdXAgc2l6ZSBpcyBhbG1vc3QgY2VydGFpbmx5IGFsc28gcG93ZXIgb2YgMiwgYnV0IGl0IGRvZXMgbm90CisJICogc2VlbSB0byBpbnNpc3Qgb24gdGhhdCBpbiB0aGUgSkVERUMgc3RhbmRhcmQsIHNvIHdlIGZhbGwgYmFjayB0bworCSAqIGRpdmlzaW9uIGluIHRoYXQgY2FzZS4gIFNEIG1heSBub3Qgc3BlY2lmeSBhbiBhbGxvY2F0aW9uIHVuaXQgc2l6ZSwKKwkgKiBpbiB3aGljaCBjYXNlIHRoZSB0aW1lb3V0IGlzIGJhc2VkIG9uIHRoZSBudW1iZXIgb2Ygd3JpdGUgYmxvY2tzLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSB0aW1lb3V0IGZvciBzZWN1cmUgdHJpbSAyIHdpbGwgb25seSBiZSBjb3JyZWN0IGlmIHRoZQorCSAqIG51bWJlciBvZiBlcmFzZSBncm91cHMgc3BlY2lmaWVkIGlzIHRoZSBzYW1lIGFzIHRoZSB0b3RhbCBvZiBhbGwKKwkgKiBwcmVjZWRpbmcgc2VjdXJlIHRyaW0gMSBjb21tYW5kcy4gIFNpbmNlIHRoZSBwb3dlciBtYXkgaGF2ZSBiZWVuCisJICogbG9zdCBzaW5jZSB0aGUgc2VjdXJlIHRyaW0gMSBjb21tYW5kcyBvY2N1cnJlZCwgaXQgaXMgZ2VuZXJhbGx5CisJICogaW1wb3NzaWJsZSB0byBjYWxjdWxhdGUgdGhlIHNlY3VyZSB0cmltIDIgdGltZW91dCBjb3JyZWN0bHkuCisJICovCisJaWYgKGNhcmQtPmVyYXNlX3NoaWZ0KQorCQlxdHkgKz0gKCh0byA+PiBjYXJkLT5lcmFzZV9zaGlmdCkgLQorCQkJKGZyb20gPj4gY2FyZC0+ZXJhc2Vfc2hpZnQpKSArIDE7CisJZWxzZSBpZiAobW1jX2NhcmRfc2QoY2FyZCkpCisJCXF0eSArPSB0byAtIGZyb20gKyAxOworCWVsc2UKKwkJcXR5ICs9ICgodG8gLyBjYXJkLT5lcmFzZV9zaXplKSAtCisJCQkoZnJvbSAvIGNhcmQtPmVyYXNlX3NpemUpKSArIDE7CisKKwlpZiAoIW1tY19jYXJkX2Jsb2NrYWRkcihjYXJkKSkgeworCQlmcm9tIDw8PSA5OworCQl0byA8PD0gOTsKKwl9CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfY29tbWFuZCkpOworCWlmIChtbWNfY2FyZF9zZChjYXJkKSkKKwkJY21kLm9wY29kZSA9IFNEX0VSQVNFX1dSX0JMS19TVEFSVDsKKwllbHNlCisJCWNtZC5vcGNvZGUgPSBNTUNfRVJBU0VfR1JPVVBfU1RBUlQ7CisJY21kLmFyZyA9IGZyb207CisJY21kLmZsYWdzID0gTU1DX1JTUF9TUElfUjEgfCBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BQzsKKwllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGNhcmQtPmhvc3QsICZjbWQsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtbWNfZXJhc2U6IGdyb3VwIHN0YXJ0IGVycm9yICVkLCAiCisJCSAgICAgICAic3RhdHVzICUjeFxuIiwgZXJyLCBjbWQucmVzcFswXSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisJaWYgKG1tY19jYXJkX3NkKGNhcmQpKQorCQljbWQub3Bjb2RlID0gU0RfRVJBU0VfV1JfQkxLX0VORDsKKwllbHNlCisJCWNtZC5vcGNvZGUgPSBNTUNfRVJBU0VfR1JPVVBfRU5EOworCWNtZC5hcmcgPSB0bzsKKwljbWQuZmxhZ3MgPSBNTUNfUlNQX1NQSV9SMSB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOworCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoY2FyZC0+aG9zdCwgJmNtZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIm1tY19lcmFzZTogZ3JvdXAgZW5kIGVycm9yICVkLCBzdGF0dXMgJSN4XG4iLAorCQkgICAgICAgZXJyLCBjbWQucmVzcFswXSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisJY21kLm9wY29kZSA9IE1NQ19FUkFTRTsKKwljbWQuYXJnID0gYXJnOworCWNtZC5mbGFncyA9IE1NQ19SU1BfU1BJX1IxQiB8IE1NQ19SU1BfUjFCIHwgTU1DX0NNRF9BQzsKKwltbWNfc2V0X2VyYXNlX3RpbWVvdXQoY2FyZCwgJmNtZCwgYXJnLCBxdHkpOworCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoY2FyZC0+aG9zdCwgJmNtZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIm1tY19lcmFzZTogZXJhc2UgZXJyb3IgJWQsIHN0YXR1cyAlI3hcbiIsCisJCSAgICAgICBlcnIsIGNtZC5yZXNwWzBdKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1tY19ob3N0X2lzX3NwaShjYXJkLT5ob3N0KSkKKwkJZ290byBvdXQ7CisKKwlkbyB7CisJCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisJCWNtZC5vcGNvZGUgPSBNTUNfU0VORF9TVEFUVVM7CisJCWNtZC5hcmcgPSBjYXJkLT5yY2EgPDwgMTY7CisJCWNtZC5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FDOworCQkvKiBEbyBub3QgcmV0cnkgZWxzZSB3ZSBjYW4ndCBzZWUgZXJyb3JzICovCisJCWVyciA9IG1tY193YWl0X2Zvcl9jbWQoY2FyZC0+aG9zdCwgJmNtZCwgMCk7CisJCWlmIChlcnIgfHwgKGNtZC5yZXNwWzBdICYgMHhGREY5MjAwMCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgJWQgcmVxdWVzdGluZyBzdGF0dXMgJSN4XG4iLAorCQkJCWVyciwgY21kLnJlc3BbMF0pOworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfSB3aGlsZSAoIShjbWQucmVzcFswXSAmIFIxX1JFQURZX0ZPUl9EQVRBKSB8fAorCQkgUjFfQ1VSUkVOVF9TVEFURShjbWQucmVzcFswXSkgPT0gNyk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBtbWNfZXJhc2UgLSBlcmFzZSBzZWN0b3JzLgorICogQGNhcmQ6IGNhcmQgdG8gZXJhc2UKKyAqIEBmcm9tOiBmaXJzdCBzZWN0b3IgdG8gZXJhc2UKKyAqIEBucjogbnVtYmVyIG9mIHNlY3RvcnMgdG8gZXJhc2UKKyAqIEBhcmc6IGVyYXNlIGNvbW1hbmQgYXJndW1lbnQgKFNEIHN1cHBvcnRzIG9ubHkgJU1NQ19FUkFTRV9BUkcpCisgKgorICogQ2FsbGVyIG11c3QgY2xhaW0gaG9zdCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQgbW1jX2VyYXNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBuciwKKwkgICAgICB1bnNpZ25lZCBpbnQgYXJnKQoreworCXVuc2lnbmVkIGludCByZW0sIHRvID0gZnJvbSArIG5yOworCisJaWYgKCEoY2FyZC0+aG9zdC0+Y2FwcyAmIE1NQ19DQVBfRVJBU0UpIHx8CisJICAgICEoY2FyZC0+Y3NkLmNtZGNsYXNzICYgQ0NDX0VSQVNFKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFjYXJkLT5lcmFzZV9zaXplKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAobW1jX2NhcmRfc2QoY2FyZCkgJiYgYXJnICE9IE1NQ19FUkFTRV9BUkcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgoYXJnICYgTU1DX1NFQ1VSRV9BUkdTKSAmJgorCSAgICAhKGNhcmQtPmV4dF9jc2Quc2VjX2ZlYXR1cmVfc3VwcG9ydCAmIEVYVF9DU0RfU0VDX0VSX0VOKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKChhcmcgJiBNTUNfVFJJTV9BUkdTKSAmJgorCSAgICAhKGNhcmQtPmV4dF9jc2Quc2VjX2ZlYXR1cmVfc3VwcG9ydCAmIEVYVF9DU0RfU0VDX0dCX0NMX0VOKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGFyZyA9PSBNTUNfU0VDVVJFX0VSQVNFX0FSRykgeworCQlpZiAoZnJvbSAlIGNhcmQtPmVyYXNlX3NpemUgfHwgbnIgJSBjYXJkLT5lcmFzZV9zaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFyZyA9PSBNTUNfRVJBU0VfQVJHKSB7CisJCXJlbSA9IGZyb20gJSBjYXJkLT5lcmFzZV9zaXplOworCQlpZiAocmVtKSB7CisJCQlyZW0gPSBjYXJkLT5lcmFzZV9zaXplIC0gcmVtOworCQkJZnJvbSArPSByZW07CisJCQlpZiAobnIgPiByZW0pCisJCQkJbnIgLT0gcmVtOworCQkJZWxzZQorCQkJCXJldHVybiAwOworCQl9CisJCXJlbSA9IG5yICUgY2FyZC0+ZXJhc2Vfc2l6ZTsKKwkJaWYgKHJlbSkKKwkJCW5yIC09IHJlbTsKKwl9CisKKwlpZiAobnIgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl0byA9IGZyb20gKyBucjsKKworCWlmICh0byA8PSBmcm9tKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qICdmcm9tJyBhbmQgJ3RvJyBhcmUgaW5jbHVzaXZlICovCisJdG8gLT0gMTsKKworCXJldHVybiBtbWNfZG9fZXJhc2UoY2FyZCwgZnJvbSwgdG8sIGFyZyk7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19lcmFzZSk7CisKK2ludCBtbWNfY2FuX2VyYXNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpZiAoKGNhcmQtPmhvc3QtPmNhcHMgJiBNTUNfQ0FQX0VSQVNFKSAmJgorCSAgICAoY2FyZC0+Y3NkLmNtZGNsYXNzICYgQ0NDX0VSQVNFKSAmJiBjYXJkLT5lcmFzZV9zaXplKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobW1jX2Nhbl9lcmFzZSk7CisKK2ludCBtbWNfY2FuX3RyaW0oc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCWlmIChjYXJkLT5leHRfY3NkLnNlY19mZWF0dXJlX3N1cHBvcnQgJiBFWFRfQ1NEX1NFQ19HQl9DTF9FTikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19jYW5fdHJpbSk7CisKK2ludCBtbWNfY2FuX3NlY3VyZV9lcmFzZV90cmltKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+ZXh0X2NzZC5zZWNfZmVhdHVyZV9zdXBwb3J0ICYgRVhUX0NTRF9TRUNfRVJfRU4pCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChtbWNfY2FuX3NlY3VyZV9lcmFzZV90cmltKTsKKworaW50IG1tY19lcmFzZV9ncm91cF9hbGlnbmVkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IGZyb20sCisJCQkgICAgdW5zaWduZWQgaW50IG5yKQoreworCWlmICghY2FyZC0+ZXJhc2Vfc2l6ZSkKKwkJcmV0dXJuIDA7CisJaWYgKGZyb20gJSBjYXJkLT5lcmFzZV9zaXplIHx8IG5yICUgY2FyZC0+ZXJhc2Vfc2l6ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19lcmFzZV9ncm91cF9hbGlnbmVkKTsKIAogdm9pZCBtbWNfcmVzY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTEwNTcsNiArMTQwMywxNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1tY19ob3N0LCBkZXRlY3Qud29yayk7CiAJdTMyIG9jcjsKIAlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGhvc3QtPnJlc2Nhbl9kaXNhYmxlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwogCiAJbW1jX2J1c19nZXQoaG9zdCk7CiAKQEAgLTEwOTksOCArMTQ1NiwxNSBAQAogCSAqLwogCWVyciA9IG1tY19zZW5kX2lvX29wX2NvbmQoaG9zdCwgMCwgJm9jcik7CiAJaWYgKCFlcnIpIHsKLQkJaWYgKG1tY19hdHRhY2hfc2Rpbyhob3N0LCBvY3IpKQotCQkJbW1jX3Bvd2VyX29mZihob3N0KTsKKwkJaWYgKG1tY19hdHRhY2hfc2Rpbyhob3N0LCBvY3IpKSB7CisJCQltbWNfY2xhaW1faG9zdChob3N0KTsKKwkJCS8qIHRyeSBTRE1FTSAoYnV0IG5vdCBNTUMpIGV2ZW4gaWYgU0RJTyBpcyBicm9rZW4gKi8KKwkJCWlmIChtbWNfc2VuZF9hcHBfb3BfY29uZChob3N0LCAwLCAmb2NyKSkKKwkJCQlnb3RvIG91dF9mYWlsOworCisJCQlpZiAobW1jX2F0dGFjaF9zZChob3N0LCBvY3IpKQorCQkJCW1tY19wb3dlcl9vZmYoaG9zdCk7CisJCX0KIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMTI0LDYgKzE0ODgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKK291dF9mYWlsOgogCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CiAJbW1jX3Bvd2VyX29mZihob3N0KTsKIApAQCAtMTI2NiwxOSArMTYzMSw2IEBACiAJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkKSB7CiAJCWlmIChob3N0LT5idXNfb3BzLT5zdXNwZW5kKQogCQkJZXJyID0gaG9zdC0+YnVzX29wcy0+c3VzcGVuZChob3N0KTsKLQkJaWYgKGVyciA9PSAtRU5PU1lTIHx8ICFob3N0LT5idXNfb3BzLT5yZXN1bWUpIHsKLQkJCS8qCi0JCQkgKiBXZSBzaW1wbHkgInJlbW92ZSIgdGhlIGNhcmQgaW4gdGhpcyBjYXNlLgotCQkJICogSXQgd2lsbCBiZSByZWRldGVjdGVkIG9uIHJlc3VtZS4KLQkJCSAqLwotCQkJaWYgKGhvc3QtPmJ1c19vcHMtPnJlbW92ZSkKLQkJCQlob3N0LT5idXNfb3BzLT5yZW1vdmUoaG9zdCk7Ci0JCQltbWNfY2xhaW1faG9zdChob3N0KTsKLQkJCW1tY19kZXRhY2hfYnVzKGhvc3QpOwotCQkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKLQkJCWhvc3QtPnBtX2ZsYWdzID0gMDsKLQkJCWVyciA9IDA7Ci0JCX0KIAl9CiAJbW1jX2J1c19wdXQoaG9zdCk7CiAKQEAgLTEzMTAsMjggKzE2NjIsNjEgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBlcnJvciAlZCBkdXJpbmcgcmVzdW1lICIKIAkJCQkJICAgICIoY2FyZCB3YXMgcmVtb3ZlZD8pXG4iLAogCQkJCQkgICAgbW1jX2hvc3RuYW1lKGhvc3QpLCBlcnIpOwotCQkJaWYgKGhvc3QtPmJ1c19vcHMtPnJlbW92ZSkKLQkJCQlob3N0LT5idXNfb3BzLT5yZW1vdmUoaG9zdCk7Ci0JCQltbWNfY2xhaW1faG9zdChob3N0KTsKLQkJCW1tY19kZXRhY2hfYnVzKGhvc3QpOwotCQkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKLQkJCS8qIG5vIG5lZWQgdG8gYm90aGVyIHVwcGVyIGxheWVycyAqLwogCQkJZXJyID0gMDsKIAkJfQogCX0KIAltbWNfYnVzX3B1dChob3N0KTsKIAotCS8qCi0JICogV2UgYWRkIGEgc2xpZ2h0IGRlbGF5IGhlcmUgc28gdGhhdCByZXN1bWUgY2FuIHByb2dyZXNzCi0JICogaW4gcGFyYWxsZWwuCi0JICovCi0JbW1jX2RldGVjdF9jaGFuZ2UoaG9zdCwgMSk7Ci0KIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKG1tY19yZXN1bWVfaG9zdCk7CiAKKy8qIERvIHRoZSBjYXJkIHJlbW92YWwgb24gc3VzcGVuZCBpZiBjYXJkIGlzIGFzc3VtZWQgcmVtb3ZlYWJsZQorICogRG8gdGhhdCBpbiBwbSBub3RpZmllciB3aGlsZSB1c2Vyc3BhY2UgaXNuJ3QgeWV0IGZyb3plbiwgc28gd2Ugd2lsbCBiZSBhYmxlCisgICB0byBzeW5jIHRoZSBjYXJkLgorKi8KK2ludCBtbWNfcG1fbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbm90aWZ5X2Jsb2NrLAorCQkJCQl1bnNpZ25lZCBsb25nIG1vZGUsIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjb250YWluZXJfb2YoCisJCW5vdGlmeV9ibG9jaywgc3RydWN0IG1tY19ob3N0LCBwbV9ub3RpZnkpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgUE1fSElCRVJOQVRJT05fUFJFUEFSRToKKwljYXNlIFBNX1NVU1BFTkRfUFJFUEFSRToKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCQlob3N0LT5yZXNjYW5fZGlzYWJsZSA9IDE7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZob3N0LT5kZXRlY3QpOworCisJCWlmICghaG9zdC0+YnVzX29wcyB8fCBob3N0LT5idXNfb3BzLT5zdXNwZW5kKQorCQkJYnJlYWs7CisKKwkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisKKwkJaWYgKGhvc3QtPmJ1c19vcHMtPnJlbW92ZSkKKwkJCWhvc3QtPmJ1c19vcHMtPnJlbW92ZShob3N0KTsKKworCQltbWNfZGV0YWNoX2J1cyhob3N0KTsKKwkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKwkJaG9zdC0+cG1fZmxhZ3MgPSAwOworCQlicmVhazsKKworCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgorCWNhc2UgUE1fUE9TVF9ISUJFUk5BVElPTjoKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCQlob3N0LT5yZXNjYW5fZGlzYWJsZSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKwkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdCwgMCk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBtbWNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmggYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAppbmRleCBhODExYzUyLi45ZDllZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaApAQCAtMjksNiArMjksOCBAQAogdm9pZCBtbWNfYXR0YWNoX2J1cyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqb3BzKTsKIHZvaWQgbW1jX2RldGFjaF9idXMoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIAordm9pZCBtbWNfaW5pdF9lcmFzZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCiB2b2lkIG1tY19zZXRfY2hpcF9zZWxlY3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgbW9kZSk7CiB2b2lkIG1tY19zZXRfY2xvY2soc3RydWN0IG1tY19ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgaHopOwogdm9pZCBtbWNfc2V0X2J1c19tb2RlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IG1vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMgYi9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYwppbmRleCA0NzM1MzkwLi4wZWZlNjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKQEAgLTg1LDYgKzg2LDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZob3N0LT53cSk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmhvc3QtPmRldGVjdCwgbW1jX3Jlc2Nhbik7CiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmaG9zdC0+ZGlzYWJsZSwgbW1jX2hvc3RfZGVlcGVyX2Rpc2FibGUpOworCWhvc3QtPnBtX25vdGlmeS5ub3RpZmllcl9jYWxsID0gbW1jX3BtX25vdGlmeTsKIAogCS8qCiAJICogQnkgZGVmYXVsdCwgaG9zdHMgZG8gbm90IHN1cHBvcnQgU0dJTyBvciBsYXJnZSByZXF1ZXN0cy4KQEAgLTEzMyw2ICsxMzUsNyBAQAogI2VuZGlmCiAKIAltbWNfc3RhcnRfaG9zdChob3N0KTsKKwlyZWdpc3Rlcl9wbV9ub3RpZmllcigmaG9zdC0+cG1fbm90aWZ5KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ5LDYgKzE1Miw3IEBACiAgKi8KIHZvaWQgbW1jX3JlbW92ZV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZob3N0LT5wbV9ub3RpZnkpOwogCW1tY19zdG9wX2hvc3QoaG9zdCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCmluZGV4IDg5ZjdhMjUuLjY5MDlhNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWMuYwpAQCAtMTA4LDIzICsxMDgsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbW1jX3NldF9lcmFzZV9zaXplKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+ZXh0X2NzZC5lcmFzZV9ncm91cF9kZWYgJiAxKQorCQljYXJkLT5lcmFzZV9zaXplID0gY2FyZC0+ZXh0X2NzZC5oY19lcmFzZV9zaXplOworCWVsc2UKKwkJY2FyZC0+ZXJhc2Vfc2l6ZSA9IGNhcmQtPmNzZC5lcmFzZV9zaXplOworCisJbW1jX2luaXRfZXJhc2UoY2FyZCk7Cit9CisKIC8qCiAgKiBHaXZlbiBhIDEyOC1iaXQgcmVzcG9uc2UsIGRlY29kZSB0byBvdXIgY2FyZCBDU0Qgc3RydWN0dXJlLgogICovCiBzdGF0aWMgaW50IG1tY19kZWNvZGVfY3NkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgbW1jX2NzZCAqY3NkID0gJmNhcmQtPmNzZDsKLQl1bnNpZ25lZCBpbnQgZSwgbSwgY3NkX3N0cnVjdDsKKwl1bnNpZ25lZCBpbnQgZSwgbSwgYSwgYjsKIAl1MzIgKnJlc3AgPSBjYXJkLT5yYXdfY3NkOwogCiAJLyoKIAkgKiBXZSBvbmx5IHVuZGVyc3RhbmQgQ1NEIHN0cnVjdHVyZSB2MS4xIGFuZCB2MS4yLgogCSAqIHYxLjIgaGFzIGV4dHJhIGluZm9ybWF0aW9uIGluIGJpdHMgMTUsIDExIGFuZCAxMC4KKwkgKiBXZSBhbHNvIHN1cHBvcnQgZU1NQyB2NC40ICYgdjQuNDEuCiAJICovCi0JY3NkX3N0cnVjdCA9IFVOU1RVRkZfQklUUyhyZXNwLCAxMjYsIDIpOwotCWlmIChjc2Rfc3RydWN0ICE9IDEgJiYgY3NkX3N0cnVjdCAhPSAyKSB7CisJY3NkLT5zdHJ1Y3R1cmUgPSBVTlNUVUZGX0JJVFMocmVzcCwgMTI2LCAyKTsKKwlpZiAoY3NkLT5zdHJ1Y3R1cmUgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgQ1NEIHN0cnVjdHVyZSB2ZXJzaW9uICVkXG4iLAotCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLCBjc2Rfc3RydWN0KTsKKwkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgY3NkLT5zdHJ1Y3R1cmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MSw2ICsxNjIsMTMgQEAKIAljc2QtPndyaXRlX2Jsa2JpdHMgPSBVTlNUVUZGX0JJVFMocmVzcCwgMjIsIDQpOwogCWNzZC0+d3JpdGVfcGFydGlhbCA9IFVOU1RVRkZfQklUUyhyZXNwLCAyMSwgMSk7CiAKKwlpZiAoY3NkLT53cml0ZV9ibGtiaXRzID49IDkpIHsKKwkJYSA9IFVOU1RVRkZfQklUUyhyZXNwLCA0MiwgNSk7CisJCWIgPSBVTlNUVUZGX0JJVFMocmVzcCwgMzcsIDUpOworCQljc2QtPmVyYXNlX3NpemUgPSAoYSArIDEpICogKGIgKyAxKTsKKwkJY3NkLT5lcmFzZV9zaXplIDw8PSBjc2QtPndyaXRlX2Jsa2JpdHMgLSA5OworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yMDcsMTEgKzIyNSwyMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBWZXJzaW9uIGlzIGNvZGVkIGluIHRoZSBDU0RfU1RSVUNUVVJFIGJ5dGUgaW4gdGhlIEVYVF9DU0QgcmVnaXN0ZXIgKi8KKwlpZiAoY2FyZC0+Y3NkLnN0cnVjdHVyZSA9PSAzKSB7CisJCWludCBleHRfY3NkX3N0cnVjdCA9IGV4dF9jc2RbRVhUX0NTRF9TVFJVQ1RVUkVdOworCQlpZiAoZXh0X2NzZF9zdHJ1Y3QgPiAyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgRVhUX0NTRCBzdHJ1Y3R1cmUgIgorCQkJCSJ2ZXJzaW9uICVkXG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksCisJCQkJCWV4dF9jc2Rfc3RydWN0KTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCWNhcmQtPmV4dF9jc2QucmV2ID0gZXh0X2NzZFtFWFRfQ1NEX1JFVl07CiAJaWYgKGNhcmQtPmV4dF9jc2QucmV2ID4gNSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bnJlY29nbmlzZWQgRVhUX0NTRCBzdHJ1Y3R1cmUgIgotCQkJInZlcnNpb24gJWRcbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwKLQkJCWNhcmQtPmV4dF9jc2QucmV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5yZWNvZ25pc2VkIEVYVF9DU0QgcmV2aXNpb24gJWRcbiIsCisJCQltbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIGNhcmQtPmV4dF9jc2QucmV2KTsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjIyLDcgKzI1MSw5IEBACiAJCQlleHRfY3NkW0VYVF9DU0RfU0VDX0NOVCArIDFdIDw8IDggfAogCQkJZXh0X2NzZFtFWFRfQ1NEX1NFQ19DTlQgKyAyXSA8PCAxNiB8CiAJCQlleHRfY3NkW0VYVF9DU0RfU0VDX0NOVCArIDNdIDw8IDI0OwotCQlpZiAoY2FyZC0+ZXh0X2NzZC5zZWN0b3JzKQorCisJCS8qIENhcmRzIHdpdGggZGVuc2l0eSA+IDJHaUIgYXJlIHNlY3RvciBhZGRyZXNzZWQgKi8KKwkJaWYgKGNhcmQtPmV4dF9jc2Quc2VjdG9ycyA+ICgydSAqIDEwMjQgKiAxMDI0ICogMTAyNCkgLyA1MTIpCiAJCQltbWNfY2FyZF9zZXRfYmxvY2thZGRyKGNhcmQpOwogCX0KIApAQCAtMjQ3LDggKzI3OCwzMCBAQAogCQlpZiAoc2Ffc2hpZnQgPiAwICYmIHNhX3NoaWZ0IDw9IDB4MTcpCiAJCQljYXJkLT5leHRfY3NkLnNhX3RpbWVvdXQgPQogCQkJCQkxIDw8IGV4dF9jc2RbRVhUX0NTRF9TX0FfVElNRU9VVF07CisJCWNhcmQtPmV4dF9jc2QuZXJhc2VfZ3JvdXBfZGVmID0KKwkJCWV4dF9jc2RbRVhUX0NTRF9FUkFTRV9HUk9VUF9ERUZdOworCQljYXJkLT5leHRfY3NkLmhjX2VyYXNlX3RpbWVvdXQgPSAzMDAgKgorCQkJZXh0X2NzZFtFWFRfQ1NEX0VSQVNFX1RJTUVPVVRfTVVMVF07CisJCWNhcmQtPmV4dF9jc2QuaGNfZXJhc2Vfc2l6ZSA9CisJCQlleHRfY3NkW0VYVF9DU0RfSENfRVJBU0VfR1JQX1NJWkVdIDw8IDEwOwogCX0KIAorCWlmIChjYXJkLT5leHRfY3NkLnJldiA+PSA0KSB7CisJCWNhcmQtPmV4dF9jc2Quc2VjX3RyaW1fbXVsdCA9CisJCQlleHRfY3NkW0VYVF9DU0RfU0VDX1RSSU1fTVVMVF07CisJCWNhcmQtPmV4dF9jc2Quc2VjX2VyYXNlX211bHQgPQorCQkJZXh0X2NzZFtFWFRfQ1NEX1NFQ19FUkFTRV9NVUxUXTsKKwkJY2FyZC0+ZXh0X2NzZC5zZWNfZmVhdHVyZV9zdXBwb3J0ID0KKwkJCWV4dF9jc2RbRVhUX0NTRF9TRUNfRkVBVFVSRV9TVVBQT1JUXTsKKwkJY2FyZC0+ZXh0X2NzZC50cmltX3RpbWVvdXQgPSAzMDAgKgorCQkJZXh0X2NzZFtFWFRfQ1NEX1RSSU1fTVVMVF07CisJfQorCisJaWYgKGV4dF9jc2RbRVhUX0NTRF9FUkFTRURfTUVNX0NPTlRdKQorCQljYXJkLT5lcmFzZWRfYnl0ZSA9IDB4RkY7CisJZWxzZQorCQljYXJkLT5lcmFzZWRfYnl0ZSA9IDB4MDsKKwogb3V0OgogCWtmcmVlKGV4dF9jc2QpOwogCkBAIC0yNjAsNiArMzEzLDggQEAKIE1NQ19ERVZfQVRUUihjc2QsICIlMDh4JTA4eCUwOHglMDh4XG4iLCBjYXJkLT5yYXdfY3NkWzBdLCBjYXJkLT5yYXdfY3NkWzFdLAogCWNhcmQtPnJhd19jc2RbMl0sIGNhcmQtPnJhd19jc2RbM10pOwogTU1DX0RFVl9BVFRSKGRhdGUsICIlMDJkLyUwNGRcbiIsIGNhcmQtPmNpZC5tb250aCwgY2FyZC0+Y2lkLnllYXIpOworTU1DX0RFVl9BVFRSKGVyYXNlX3NpemUsICIldVxuIiwgY2FyZC0+ZXJhc2Vfc2l6ZSA8PCA5KTsKK01NQ19ERVZfQVRUUihwcmVmZXJyZWRfZXJhc2Vfc2l6ZSwgIiV1XG4iLCBjYXJkLT5wcmVmX2VyYXNlIDw8IDkpOwogTU1DX0RFVl9BVFRSKGZ3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmZ3cmV2KTsKIE1NQ19ERVZfQVRUUihod3JldiwgIjB4JXhcbiIsIGNhcmQtPmNpZC5od3Jldik7CiBNTUNfREVWX0FUVFIobWFuZmlkLCAiMHglMDZ4XG4iLCBjYXJkLT5jaWQubWFuZmlkKTsKQEAgLTI3MSw2ICszMjYsOCBAQAogCSZkZXZfYXR0cl9jaWQuYXR0ciwKIAkmZGV2X2F0dHJfY3NkLmF0dHIsCiAJJmRldl9hdHRyX2RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfZXJhc2Vfc2l6ZS5hdHRyLAorCSZkZXZfYXR0cl9wcmVmZXJyZWRfZXJhc2Vfc2l6ZS5hdHRyLAogCSZkZXZfYXR0cl9md3Jldi5hdHRyLAogCSZkZXZfYXR0cl9od3Jldi5hdHRyLAogCSZkZXZfYXR0cl9tYW5maWQuYXR0ciwKQEAgLTQwNyw2ICs0NjQsOCBAQAogCQllcnIgPSBtbWNfcmVhZF9leHRfY3NkKGNhcmQpOwogCQlpZiAoZXJyKQogCQkJZ290byBmcmVlX2NhcmQ7CisJCS8qIEVyYXNlIHNpemUgZGVwZW5kcyBvbiBDU0QgYW5kIEV4dGVuZGVkIENTRCAqLworCQltbWNfc2V0X2VyYXNlX3NpemUoY2FyZCk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwppbmRleCA1ZWFjMjFkLi4wZjUyNDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZC5jCkBAIC01OSw3ICs1OSw3IEBACiAvKgogICogR2l2ZW4gdGhlIGRlY29kZWQgQ1NEIHN0cnVjdHVyZSwgZGVjb2RlIHRoZSByYXcgQ0lEIHRvIG91ciBDSUQgc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCBtbWNfZGVjb2RlX2NpZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit2b2lkIG1tY19kZWNvZGVfY2lkKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAl1MzIgKnJlc3AgPSBjYXJkLT5yYXdfY2lkOwogCkBAIC0xMTksNiArMTE5LDEzIEBACiAJCWNzZC0+cjJ3X2ZhY3RvciA9IFVOU1RVRkZfQklUUyhyZXNwLCAyNiwgMyk7CiAJCWNzZC0+d3JpdGVfYmxrYml0cyA9IFVOU1RVRkZfQklUUyhyZXNwLCAyMiwgNCk7CiAJCWNzZC0+d3JpdGVfcGFydGlhbCA9IFVOU1RVRkZfQklUUyhyZXNwLCAyMSwgMSk7CisKKwkJaWYgKFVOU1RVRkZfQklUUyhyZXNwLCA0NiwgMSkpIHsKKwkJCWNzZC0+ZXJhc2Vfc2l6ZSA9IDE7CisJCX0gZWxzZSBpZiAoY3NkLT53cml0ZV9ibGtiaXRzID49IDkpIHsKKwkJCWNzZC0+ZXJhc2Vfc2l6ZSA9IFVOU1RVRkZfQklUUyhyZXNwLCAzOSwgNykgKyAxOworCQkJY3NkLT5lcmFzZV9zaXplIDw8PSBjc2QtPndyaXRlX2Jsa2JpdHMgLSA5OworCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJLyoKQEAgLTE0Nyw2ICsxNTQsNyBAQAogCQljc2QtPnIyd19mYWN0b3IgPSA0OyAvKiBVbnVzZWQgKi8KIAkJY3NkLT53cml0ZV9ibGtiaXRzID0gOTsKIAkJY3NkLT53cml0ZV9wYXJ0aWFsID0gMDsKKwkJY3NkLT5lcmFzZV9zaXplID0gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5yZWNvZ25pc2VkIENTRCBzdHJ1Y3R1cmUgdmVyc2lvbiAlZFxuIiwKQEAgLTE1NCw2ICsxNjIsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwljYXJkLT5lcmFzZV9zaXplID0gY3NkLT5lcmFzZV9zaXplOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3OSwxMCArMTg5LDY4IEBACiAJc2NyLT5zZGFfdnNuID0gVU5TVFVGRl9CSVRTKHJlc3AsIDU2LCA0KTsKIAlzY3ItPmJ1c193aWR0aHMgPSBVTlNUVUZGX0JJVFMocmVzcCwgNDgsIDQpOwogCisJaWYgKFVOU1RVRkZfQklUUyhyZXNwLCA1NSwgMSkpCisJCWNhcmQtPmVyYXNlZF9ieXRlID0gMHhGRjsKKwllbHNlCisJCWNhcmQtPmVyYXNlZF9ieXRlID0gMHgwOworCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBGZXRjaCBhbmQgcHJvY2VzcyBTRCBTdGF0dXMgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbW1jX3JlYWRfc3NyKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXUsIGVzLCBldCwgZW87CisJaW50IGVyciwgaTsKKwl1MzIgKnNzcjsKKworCWlmICghKGNhcmQtPmNzZC5jbWRjbGFzcyAmIENDQ19BUFBfU1BFQykpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhcmQgbGFja3MgbWFuZGF0b3J5IFNEIFN0YXR1cyAiCisJCQkiZnVuY3Rpb24uXG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzc3IgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNzcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBtbWNfYXBwX3NkX3N0YXR1cyhjYXJkLCBzc3IpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHByb2JsZW0gcmVhZGluZyBTRCBTdGF0dXMgIgorCQkJInJlZ2lzdGVyLlxuIiwgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKKwkJZXJyID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXNzcltpXSA9IGJlMzJfdG9fY3B1KHNzcltpXSk7CisKKwkvKgorCSAqIFVOU1RVRkZfQklUUyBvbmx5IHdvcmtzIHdpdGggZm91ciB1MzJzIHNvIHdlIGhhdmUgdG8gb2Zmc2V0IHRoZQorCSAqIGJpdGZpZWxkIHBvc2l0aW9ucyBhY2NvcmRpbmdseS4KKwkgKi8KKwlhdSA9IFVOU1RVRkZfQklUUyhzc3IsIDQyOCAtIDM4NCwgNCk7CisJaWYgKGF1ID4gMCB8fCBhdSA8PSA5KSB7CisJCWNhcmQtPnNzci5hdSA9IDEgPDwgKGF1ICsgNCk7CisJCWVzID0gVU5TVFVGRl9CSVRTKHNzciwgNDA4IC0gMzg0LCAxNik7CisJCWV0ID0gVU5TVFVGRl9CSVRTKHNzciwgNDAyIC0gMzg0LCA2KTsKKwkJZW8gPSBVTlNUVUZGX0JJVFMoc3NyLCA0MDAgLSAzODQsIDIpOworCQlpZiAoZXMgJiYgZXQpIHsKKwkJCWNhcmQtPnNzci5lcmFzZV90aW1lb3V0ID0gKGV0ICogMTAwMCkgLyBlczsKKwkJCWNhcmQtPnNzci5lcmFzZV9vZmZzZXQgPSBlbyAqIDEwMDA7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU0QgU3RhdHVzOiBJbnZhbGlkIEFsbG9jYXRpb24gVW5pdCAiCisJCQkic2l6ZS5cbiIsIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJfQorb3V0OgorCWtmcmVlKHNzcik7CisJcmV0dXJuIGVycjsKK30KKworLyoKICAqIEZldGNoZXMgYW5kIGRlY29kZXMgc3dpdGNoIGluZm9ybWF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgbW1jX3JlYWRfc3dpdGNoKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKQEAgLTIzOCw3ICszMDYsNyBAQAogLyoKICAqIFRlc3QgaWYgdGhlIGNhcmQgc3VwcG9ydHMgaGlnaC1zcGVlZCBtb2RlIGFuZCwgaWYgc28sIHN3aXRjaCB0byBpdC4KICAqLwotc3RhdGljIGludCBtbWNfc3dpdGNoX2hzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK2ludCBtbWNfc2Rfc3dpdGNoX2hzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlpbnQgZXJyOwogCXU4ICpzdGF0dXM7CkBAIC0yNzIsOSArMzQwLDkgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFByb2JsZW0gc3dpdGNoaW5nIGNhcmQgIgogCQkJImludG8gaGlnaC1zcGVlZCBtb2RlIVxuIiwKIAkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCWVyciA9IDA7CiAJfSBlbHNlIHsKLQkJbW1jX2NhcmRfc2V0X2hpZ2hzcGVlZChjYXJkKTsKLQkJbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19TRF9IUyk7CisJCWVyciA9IDE7CiAJfQogCiBvdXQ6CkBAIC0yODksNiArMzU3LDggQEAKIAljYXJkLT5yYXdfY3NkWzJdLCBjYXJkLT5yYXdfY3NkWzNdKTsKIE1NQ19ERVZfQVRUUihzY3IsICIlMDh4JTA4eFxuIiwgY2FyZC0+cmF3X3NjclswXSwgY2FyZC0+cmF3X3NjclsxXSk7CiBNTUNfREVWX0FUVFIoZGF0ZSwgIiUwMmQvJTA0ZFxuIiwgY2FyZC0+Y2lkLm1vbnRoLCBjYXJkLT5jaWQueWVhcik7CitNTUNfREVWX0FUVFIoZXJhc2Vfc2l6ZSwgIiV1XG4iLCBjYXJkLT5lcmFzZV9zaXplIDw8IDkpOworTU1DX0RFVl9BVFRSKHByZWZlcnJlZF9lcmFzZV9zaXplLCAiJXVcbiIsIGNhcmQtPnByZWZfZXJhc2UgPDwgOSk7CiBNTUNfREVWX0FUVFIoZndyZXYsICIweCV4XG4iLCBjYXJkLT5jaWQuZndyZXYpOwogTU1DX0RFVl9BVFRSKGh3cmV2LCAiMHgleFxuIiwgY2FyZC0+Y2lkLmh3cmV2KTsKIE1NQ19ERVZfQVRUUihtYW5maWQsICIweCUwNnhcbiIsIGNhcmQtPmNpZC5tYW5maWQpOwpAQCAtMzAyLDYgKzM3Miw4IEBACiAJJmRldl9hdHRyX2NzZC5hdHRyLAogCSZkZXZfYXR0cl9zY3IuYXR0ciwKIAkmZGV2X2F0dHJfZGF0ZS5hdHRyLAorCSZkZXZfYXR0cl9lcmFzZV9zaXplLmF0dHIsCisJJmRldl9hdHRyX3ByZWZlcnJlZF9lcmFzZV9zaXplLmF0dHIsCiAJJmRldl9hdHRyX2Z3cmV2LmF0dHIsCiAJJmRldl9hdHRyX2h3cmV2LmF0dHIsCiAJJmRldl9hdHRyX21hbmZpZC5hdHRyLApAQCAtMzIwLDI2ICszOTIsMTYgQEAKIAlOVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBzZF90eXBlID0geworc3RydWN0IGRldmljZV90eXBlIHNkX3R5cGUgPSB7CiAJLmdyb3VwcyA9IHNkX2F0dHJfZ3JvdXBzLAogfTsKIAogLyoKLSAqIEhhbmRsZSB0aGUgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXNhdGlvbiBvZiBhIGNhcmQuCi0gKgotICogSW4gdGhlIGNhc2Ugb2YgYSByZXN1bWUsICJvbGRjYXJkIiB3aWxsIGNvbnRhaW4gdGhlIGNhcmQKLSAqIHdlJ3JlIHRyeWluZyB0byByZWluaXRpYWxpc2UuCisgKiBGZXRjaCBDSUQgZnJvbSBjYXJkLgogICovCi1zdGF0aWMgaW50IG1tY19zZF9pbml0X2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyLAotCXN0cnVjdCBtbWNfY2FyZCAqb2xkY2FyZCkKK2ludCBtbWNfc2RfZ2V0X2NpZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHUzMiBvY3IsIHUzMiAqY2lkKQogewotCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwotCXUzMiBjaWRbNF07Ci0JdW5zaWduZWQgaW50IG1heF9kdHI7Ci0KLQlCVUdfT04oIWhvc3QpOwotCVdBUk5fT04oIWhvc3QtPmNsYWltZWQpOwogCiAJLyoKIAkgKiBTaW5jZSB3ZSdyZSBjaGFuZ2luZyB0aGUgT0NSIHZhbHVlLCB3ZSBzZWVtIHRvCkBAIC0zNjEsOTIgKzQyMyw2NyBAQAogCiAJZXJyID0gbW1jX3NlbmRfYXBwX29wX2NvbmQoaG9zdCwgb2NyLCBOVUxMKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycjsKKwkJcmV0dXJuIGVycjsKIAotCS8qCi0JICogRmV0Y2ggQ0lEIGZyb20gY2FyZC4KLQkgKi8KIAlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKQogCQllcnIgPSBtbWNfc2VuZF9jaWQoaG9zdCwgY2lkKTsKIAllbHNlCiAJCWVyciA9IG1tY19hbGxfc2VuZF9jaWQoaG9zdCwgY2lkKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBtbWNfc2RfZ2V0X2NzZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpbnQgZXJyOworCisJLyoKKwkgKiBGZXRjaCBDU0QgZnJvbSBjYXJkLgorCSAqLworCWVyciA9IG1tY19zZW5kX2NzZChjYXJkLCBjYXJkLT5yYXdfY3NkKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycjsKKwkJcmV0dXJuIGVycjsKIAotCWlmIChvbGRjYXJkKSB7Ci0JCWlmIChtZW1jbXAoY2lkLCBvbGRjYXJkLT5yYXdfY2lkLCBzaXplb2YoY2lkKSkgIT0gMCkgewotCQkJZXJyID0gLUVOT0VOVDsKLQkJCWdvdG8gZXJyOwotCQl9CisJZXJyID0gbW1jX2RlY29kZV9jc2QoY2FyZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCQljYXJkID0gb2xkY2FyZDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZS4KLQkJICovCi0JCWNhcmQgPSBtbWNfYWxsb2NfY2FyZChob3N0LCAmc2RfdHlwZSk7Ci0JCWlmIChJU19FUlIoY2FyZCkpIHsKLQkJCWVyciA9IFBUUl9FUlIoY2FyZCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCXJldHVybiAwOworfQogCi0JCWNhcmQtPnR5cGUgPSBNTUNfVFlQRV9TRDsKLQkJbWVtY3B5KGNhcmQtPnJhd19jaWQsIGNpZCwgc2l6ZW9mKGNhcmQtPnJhd19jaWQpKTsKLQl9CitpbnQgbW1jX3NkX3NldHVwX2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCisJYm9vbCByZWluaXQpCit7CisJaW50IGVycjsKIAotCS8qCi0JICogRm9yIG5hdGl2ZSBidXNzZXM6ICBnZXQgY2FyZCBSQ0EgYW5kIHF1aXQgb3BlbiBkcmFpbiBtb2RlLgotCSAqLwotCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7Ci0JCWVyciA9IG1tY19zZW5kX3JlbGF0aXZlX2FkZHIoaG9zdCwgJmNhcmQtPnJjYSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZyZWVfY2FyZDsKLQotCQltbWNfc2V0X2J1c19tb2RlKGhvc3QsIE1NQ19CVVNNT0RFX1BVU0hQVUxMKTsKLQl9Ci0KLQlpZiAoIW9sZGNhcmQpIHsKLQkJLyoKLQkJICogRmV0Y2ggQ1NEIGZyb20gY2FyZC4KLQkJICovCi0JCWVyciA9IG1tY19zZW5kX2NzZChjYXJkLCBjYXJkLT5yYXdfY3NkKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZnJlZV9jYXJkOwotCi0JCWVyciA9IG1tY19kZWNvZGVfY3NkKGNhcmQpOwotCQlpZiAoZXJyKQotCQkJZ290byBmcmVlX2NhcmQ7Ci0KLQkJbW1jX2RlY29kZV9jaWQoY2FyZCk7Ci0JfQotCi0JLyoKLQkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCi0JICovCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKLQkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOwotCQlpZiAoZXJyKQotCQkJZ290byBmcmVlX2NhcmQ7Ci0JfQotCi0JaWYgKCFvbGRjYXJkKSB7CisJaWYgKCFyZWluaXQpIHsKIAkJLyoKIAkJICogRmV0Y2ggU0NSIGZyb20gY2FyZC4KIAkJICovCiAJCWVyciA9IG1tY19hcHBfc2VuZF9zY3IoY2FyZCwgY2FyZC0+cmF3X3Njcik7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGZyZWVfY2FyZDsKKwkJCXJldHVybiBlcnI7CiAKIAkJZXJyID0gbW1jX2RlY29kZV9zY3IoY2FyZCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBmcmVlX2NhcmQ7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCS8qCisJCSAqIEZldGNoIGFuZCBwcm9jZXNzIFNEIFN0YXR1cyByZWdpc3Rlci4KKwkJICovCisJCWVyciA9IG1tY19yZWFkX3NzcihjYXJkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJLyogRXJhc2UgaW5pdCBkZXBlbmRzIG9uIENTRCBhbmQgU1NSICovCisJCW1tY19pbml0X2VyYXNlKGNhcmQpOwogCiAJCS8qCiAJCSAqIEZldGNoIHN3aXRjaCBpbmZvcm1hdGlvbiBmcm9tIGNhcmQuCiAJCSAqLwogCQllcnIgPSBtbWNfcmVhZF9zd2l0Y2goY2FyZCk7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGZyZWVfY2FyZDsKKwkJCXJldHVybiBlcnI7CiAJfQogCiAJLyoKQEAgLTQ1OCwyMCArNDk1LDM0IEBACiAJaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkgewogCQllcnIgPSBtbWNfc3BpX3NldF9jcmMoaG9zdCwgdXNlX3NwaV9jcmMpOwogCQlpZiAoZXJyKQotCQkJZ290byBmcmVlX2NhcmQ7CisJCQlyZXR1cm4gZXJyOwogCX0KIAogCS8qCi0JICogQXR0ZW1wdCB0byBjaGFuZ2UgdG8gaGlnaC1zcGVlZCAoaWYgc3VwcG9ydGVkKQorCSAqIENoZWNrIGlmIHJlYWQtb25seSBzd2l0Y2ggaXMgYWN0aXZlLgogCSAqLwotCWVyciA9IG1tY19zd2l0Y2hfaHMoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byBmcmVlX2NhcmQ7CisJaWYgKCFyZWluaXQpIHsKKwkJaW50IHJvID0gLTE7CiAKLQkvKgotCSAqIENvbXB1dGUgYnVzIHNwZWVkLgotCSAqLwotCW1heF9kdHIgPSAodW5zaWduZWQgaW50KS0xOworCQlpZiAoaG9zdC0+b3BzLT5nZXRfcm8pCisJCQlybyA9IGhvc3QtPm9wcy0+Z2V0X3JvKGhvc3QpOworCisJCWlmIChybyA8IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBob3N0IGRvZXMgbm90ICIKKwkJCQkic3VwcG9ydCByZWFkaW5nIHJlYWQtb25seSAiCisJCQkJInN3aXRjaC4gYXNzdW1pbmcgd3JpdGUtZW5hYmxlLlxuIiwKKwkJCQltbWNfaG9zdG5hbWUoaG9zdCkpOworCQl9IGVsc2UgaWYgKHJvID4gMCkgeworCQkJbW1jX2NhcmRfc2V0X3JlYWRvbmx5KGNhcmQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIG1tY19zZF9nZXRfbWF4X2Nsb2NrKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBtYXhfZHRyID0gKHVuc2lnbmVkIGludCktMTsKIAogCWlmIChtbWNfY2FyZF9oaWdoc3BlZWQoY2FyZCkpIHsKIAkJaWYgKG1heF9kdHIgPiBjYXJkLT5zd19jYXBzLmhzX21heF9kdHIpCkBAIC00ODAsNyArNTMxLDk3IEBACiAJCW1heF9kdHIgPSBjYXJkLT5jc2QubWF4X2R0cjsKIAl9CiAKLQltbWNfc2V0X2Nsb2NrKGhvc3QsIG1heF9kdHIpOworCXJldHVybiBtYXhfZHRyOworfQorCit2b2lkIG1tY19zZF9nb19oaWdoc3BlZWQoc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCW1tY19jYXJkX3NldF9oaWdoc3BlZWQoY2FyZCk7CisJbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19TRF9IUyk7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhlIGRldGVjdGlvbiBhbmQgaW5pdGlhbGlzYXRpb24gb2YgYSBjYXJkLgorICoKKyAqIEluIHRoZSBjYXNlIG9mIGEgcmVzdW1lLCAib2xkY2FyZCIgd2lsbCBjb250YWluIHRoZSBjYXJkCisgKiB3ZSdyZSB0cnlpbmcgdG8gcmVpbml0aWFsaXNlLgorICovCitzdGF0aWMgaW50IG1tY19zZF9pbml0X2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyLAorCXN0cnVjdCBtbWNfY2FyZCAqb2xkY2FyZCkKK3sKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKwl1MzIgY2lkWzRdOworCisJQlVHX09OKCFob3N0KTsKKwlXQVJOX09OKCFob3N0LT5jbGFpbWVkKTsKKworCWVyciA9IG1tY19zZF9nZXRfY2lkKGhvc3QsIG9jciwgY2lkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG9sZGNhcmQpIHsKKwkJaWYgKG1lbWNtcChjaWQsIG9sZGNhcmQtPnJhd19jaWQsIHNpemVvZihjaWQpKSAhPSAwKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisKKwkJY2FyZCA9IG9sZGNhcmQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUuCisJCSAqLworCQljYXJkID0gbW1jX2FsbG9jX2NhcmQoaG9zdCwgJnNkX3R5cGUpOworCQlpZiAoSVNfRVJSKGNhcmQpKQorCQkJcmV0dXJuIFBUUl9FUlIoY2FyZCk7CisKKwkJY2FyZC0+dHlwZSA9IE1NQ19UWVBFX1NEOworCQltZW1jcHkoY2FyZC0+cmF3X2NpZCwgY2lkLCBzaXplb2YoY2FyZC0+cmF3X2NpZCkpOworCX0KKworCS8qCisJICogRm9yIG5hdGl2ZSBidXNzZXM6ICBnZXQgY2FyZCBSQ0EgYW5kIHF1aXQgb3BlbiBkcmFpbiBtb2RlLgorCSAqLworCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CisJCWVyciA9IG1tY19zZW5kX3JlbGF0aXZlX2FkZHIoaG9zdCwgJmNhcmQtPnJjYSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW1tY19zZXRfYnVzX21vZGUoaG9zdCwgTU1DX0JVU01PREVfUFVTSFBVTEwpOworCX0KKworCWlmICghb2xkY2FyZCkgeworCQllcnIgPSBtbWNfc2RfZ2V0X2NzZChob3N0LCBjYXJkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbW1jX2RlY29kZV9jaWQoY2FyZCk7CisJfQorCisJLyoKKwkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCisJICovCisJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBtbWNfc2Rfc2V0dXBfY2FyZChob3N0LCBjYXJkLCBvbGRjYXJkICE9IE5VTEwpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9jYXJkOworCisJLyoKKwkgKiBBdHRlbXB0IHRvIGNoYW5nZSB0byBoaWdoLXNwZWVkIChpZiBzdXBwb3J0ZWQpCisJICovCisJZXJyID0gbW1jX3NkX3N3aXRjaF9ocyhjYXJkKTsKKwlpZiAoZXJyID4gMCkKKwkJbW1jX3NkX2dvX2hpZ2hzcGVlZChjYXJkKTsKKwllbHNlIGlmIChlcnIpCisJCWdvdG8gZnJlZV9jYXJkOworCisJLyoKKwkgKiBTZXQgYnVzIHNwZWVkLgorCSAqLworCW1tY19zZXRfY2xvY2soaG9zdCwgbW1jX3NkX2dldF9tYXhfY2xvY2soY2FyZCkpOwogCiAJLyoKIAkgKiBTd2l0Y2ggdG8gd2lkZXIgYnVzIChpZiBzdXBwb3J0ZWQpLgpAQCAtNDk0LDMwICs2MzUsMTIgQEAKIAkJbW1jX3NldF9idXNfd2lkdGgoaG9zdCwgTU1DX0JVU19XSURUSF80KTsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGlmIHJlYWQtb25seSBzd2l0Y2ggaXMgYWN0aXZlLgotCSAqLwotCWlmICghb2xkY2FyZCkgewotCQlpZiAoIWhvc3QtPm9wcy0+Z2V0X3JvIHx8IGhvc3QtPm9wcy0+Z2V0X3JvKGhvc3QpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGhvc3QgZG9lcyBub3QgIgotCQkJCSJzdXBwb3J0IHJlYWRpbmcgcmVhZC1vbmx5ICIKLQkJCQkic3dpdGNoLiBhc3N1bWluZyB3cml0ZS1lbmFibGUuXG4iLAotCQkJCW1tY19ob3N0bmFtZShob3N0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoaG9zdC0+b3BzLT5nZXRfcm8oaG9zdCkgPiAwKQotCQkJCW1tY19jYXJkX3NldF9yZWFkb25seShjYXJkKTsKLQkJfQotCX0KLQotCWlmICghb2xkY2FyZCkKLQkJaG9zdC0+Y2FyZCA9IGNhcmQ7Ci0KKwlob3N0LT5jYXJkID0gY2FyZDsKIAlyZXR1cm4gMDsKIAogZnJlZV9jYXJkOgogCWlmICghb2xkY2FyZCkKIAkJbW1jX3JlbW92ZV9jYXJkKGNhcmQpOwotZXJyOgogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2QuaCBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg4MDBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX01NQ19DT1JFX1NEX0gKKyNkZWZpbmUgX01NQ19DT1JFX1NEX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CisKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX3R5cGUgc2RfdHlwZTsKKworaW50IG1tY19zZF9nZXRfY2lkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jciwgdTMyICpjaWQpOworaW50IG1tY19zZF9nZXRfY3NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKK3ZvaWQgbW1jX2RlY29kZV9jaWQoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKK2ludCBtbWNfc2Rfc2V0dXBfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKKwlib29sIHJlaW5pdCk7Cit1bnNpZ25lZCBtbWNfc2RfZ2V0X21heF9jbG9jayhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworaW50IG1tY19zZF9zd2l0Y2hfaHMoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKK3ZvaWQgbW1jX3NkX2dvX2hpZ2hzcGVlZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rfb3BzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkX29wcy5jCmluZGV4IDYzNzcyZTcuLjc5N2NkYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rfb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZF9vcHMuYwpAQCAtMzQ2LDMgKzM0Niw1MSBAQAogCXJldHVybiAwOwogfQogCitpbnQgbW1jX2FwcF9zZF9zdGF0dXMoc3RydWN0IG1tY19jYXJkICpjYXJkLCB2b2lkICpzc3IpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgbXJxOworCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQ7CisJc3RydWN0IG1tY19kYXRhIGRhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJQlVHX09OKCFjYXJkKTsKKwlCVUdfT04oIWNhcmQtPmhvc3QpOworCUJVR19PTighc3NyKTsKKworCS8qIE5PVEU6IGNhbGxlciBndWFyYW50ZWVzIHNzciBpcyBoZWFwLWFsbG9jYXRlZCAqLworCisJZXJyID0gbW1jX2FwcF9jbWQoY2FyZC0+aG9zdCwgY2FyZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbXNldCgmbXJxLCAwLCBzaXplb2Yoc3RydWN0IG1tY19yZXF1ZXN0KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2RhdGEpKTsKKworCW1ycS5jbWQgPSAmY21kOworCW1ycS5kYXRhID0gJmRhdGE7CisKKwljbWQub3Bjb2RlID0gU0RfQVBQX1NEX1NUQVRVUzsKKwljbWQuYXJnID0gMDsKKwljbWQuZmxhZ3MgPSBNTUNfUlNQX1NQSV9SMiB8IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FEVEM7CisKKwlkYXRhLmJsa3N6ID0gNjQ7CisJZGF0YS5ibG9ja3MgPSAxOworCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOworCWRhdGEuc2cgPSAmc2c7CisJZGF0YS5zZ19sZW4gPSAxOworCisJc2dfaW5pdF9vbmUoJnNnLCBzc3IsIDY0KTsKKworCW1tY19zZXRfZGF0YV90aW1lb3V0KCZkYXRhLCBjYXJkKTsKKworCW1tY193YWl0X2Zvcl9yZXEoY2FyZC0+aG9zdCwgJm1ycSk7CisKKwlpZiAoY21kLmVycm9yKQorCQlyZXR1cm4gY21kLmVycm9yOworCWlmIChkYXRhLmVycm9yKQorCQlyZXR1cm4gZGF0YS5lcnJvcjsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZF9vcHMuaCBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rfb3BzLmgKaW5kZXggOTc0MmQ4YS4uZmZjMjMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZF9vcHMuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkX29wcy5oCkBAIC0xOSw2ICsxOSw3IEBACiBpbnQgbW1jX2FwcF9zZW5kX3NjcihzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHUzMiAqc2NyKTsKIGludCBtbWNfc2Rfc3dpdGNoKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgaW50IG1vZGUsIGludCBncm91cCwKIAl1OCB2YWx1ZSwgdTggKnJlc3ApOworaW50IG1tY19hcHBfc2Rfc3RhdHVzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdm9pZCAqc3NyKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggYjlkZWUyOC4uYmQyNzU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTE4LDYgKzE4LDcgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJidXMuaCIKKyNpbmNsdWRlICJzZC5oIgogI2luY2x1ZGUgInNkaW9fYnVzLmgiCiAjaW5jbHVkZSAibW1jX29wcy5oIgogI2luY2x1ZGUgInNkX29wcy5oIgpAQCAtNjIsMTMgKzYzLDE5IEBACiAKIAlmdW5jLT5udW0gPSBmbjsKIAotCXJldCA9IHNkaW9fcmVhZF9mYnIoZnVuYyk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOworCWlmICghKGNhcmQtPnF1aXJrcyAmIE1NQ19RVUlSS19OT05TVERfU0RJTykpIHsKKwkJcmV0ID0gc2Rpb19yZWFkX2ZicihmdW5jKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKIAotCXJldCA9IHNkaW9fcmVhZF9mdW5jX2NpcyhmdW5jKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7CisJCXJldCA9IHNkaW9fcmVhZF9mdW5jX2NpcyhmdW5jKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UgeworCQlmdW5jLT52ZW5kb3IgPSBmdW5jLT5jYXJkLT5jaXMudmVuZG9yOworCQlmdW5jLT5kZXZpY2UgPSBmdW5jLT5jYXJkLT5jaXMuZGV2aWNlOworCQlmdW5jLT5tYXhfYmxrc2l6ZSA9IGZ1bmMtPmNhcmQtPmNpcy5ibGtzaXplOworCX0KIAogCWNhcmQtPnNkaW9fZnVuY1tmbiAtIDFdID0gZnVuYzsKIApAQCAtMTU5LDkgKzE2Niw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW1tY19zZXRfYnVzX3dpZHRoKGNhcmQtPmhvc3QsIE1NQ19CVVNfV0lEVEhfNCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogLyoKQEAgLTIyMSwxMCArMjI2LDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIGludCBzZGlvX2VuYWJsZV80Yml0X2J1cyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCit7CisJaW50IGVycjsKKworCWlmIChjYXJkLT50eXBlID09IE1NQ19UWVBFX1NESU8pCisJCXJldHVybiBzZGlvX2VuYWJsZV93aWRlKGNhcmQpOworCisJaWYgKChjYXJkLT5ob3N0LT5jYXBzICYgTU1DX0NBUF80X0JJVF9EQVRBKSAmJgorCQkoY2FyZC0+c2NyLmJ1c193aWR0aHMgJiBTRF9TQ1JfQlVTX1dJRFRIXzQpKSB7CisJCWVyciA9IG1tY19hcHBfc2V0X2J1c193aWR0aChjYXJkLCBNTUNfQlVTX1dJRFRIXzQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBzZGlvX2VuYWJsZV93aWRlKGNhcmQpOworCWlmIChlcnIgPD0gMCkKKwkJbW1jX2FwcF9zZXRfYnVzX3dpZHRoKGNhcmQsIE1NQ19CVVNfV0lEVEhfMSk7CisKKwlyZXR1cm4gZXJyOworfQorCisKIC8qCiAgKiBUZXN0IGlmIHRoZSBjYXJkIHN1cHBvcnRzIGhpZ2gtc3BlZWQgbW9kZSBhbmQsIGlmIHNvLCBzd2l0Y2ggdG8gaXQuCiAgKi8KLXN0YXRpYyBpbnQgc2Rpb19lbmFibGVfaHMoc3RydWN0IG1tY19jYXJkICpjYXJkKQorc3RhdGljIGludCBtbWNfc2Rpb19zd2l0Y2hfaHMoc3RydWN0IG1tY19jYXJkICpjYXJkLCBpbnQgZW5hYmxlKQogewogCWludCByZXQ7CiAJdTggc3BlZWQ7CkBAIC0yMzksMTYgKzI2OCw1NiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlzcGVlZCB8PSBTRElPX1NQRUVEX0VIUzsKKwlpZiAoZW5hYmxlKQorCQlzcGVlZCB8PSBTRElPX1NQRUVEX0VIUzsKKwllbHNlCisJCXNwZWVkICY9IH5TRElPX1NQRUVEX0VIUzsKIAogCXJldCA9IG1tY19pb19yd19kaXJlY3QoY2FyZCwgMSwgMCwgU0RJT19DQ0NSX1NQRUVELCBzcGVlZCwgTlVMTCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCW1tY19jYXJkX3NldF9oaWdoc3BlZWQoY2FyZCk7Ci0JbW1jX3NldF90aW1pbmcoY2FyZC0+aG9zdCwgTU1DX1RJTUlOR19TRF9IUyk7CisJcmV0dXJuIDE7Cit9CiAKLQlyZXR1cm4gMDsKKy8qCisgKiBFbmFibGUgU0RJTy9jb21ibyBjYXJkJ3MgaGlnaC1zcGVlZCBtb2RlLiBSZXR1cm4gMC8xIGlmIFtub3Rdc3VwcG9ydGVkLgorICovCitzdGF0aWMgaW50IHNkaW9fZW5hYmxlX2hzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbW1jX3NkaW9fc3dpdGNoX2hzKGNhcmQsIHRydWUpOworCWlmIChyZXQgPD0gMCB8fCBjYXJkLT50eXBlID09IE1NQ19UWVBFX1NESU8pCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtbWNfc2Rfc3dpdGNoX2hzKGNhcmQpOworCWlmIChyZXQgPD0gMCkKKwkJbW1jX3NkaW9fc3dpdGNoX2hzKGNhcmQsIGZhbHNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBtbWNfc2Rpb19nZXRfbWF4X2Nsb2NrKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1bnNpZ25lZCBtYXhfZHRyOworCisJaWYgKG1tY19jYXJkX2hpZ2hzcGVlZChjYXJkKSkgeworCQkvKgorCQkgKiBUaGUgU0RJTyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgbWVudGlvbiBob3cKKwkJICogdGhlIENJUyB0cmFuc2ZlciBzcGVlZCByZWdpc3RlciByZWxhdGVzIHRvCisJCSAqIGhpZ2gtc3BlZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IDUwIE1IeiBpcworCQkgKiBtYW5kYXRvcnkuCisJCSAqLworCQltYXhfZHRyID0gNTAwMDAwMDA7CisJfSBlbHNlIHsKKwkJbWF4X2R0ciA9IGNhcmQtPmNpcy5tYXhfZHRyOworCX0KKworCWlmIChjYXJkLT50eXBlID09IE1NQ19UWVBFX1NEX0NPTUJPKQorCQltYXhfZHRyID0gbWluKG1heF9kdHIsIG1tY19zZF9nZXRfbWF4X2Nsb2NrKGNhcmQpKTsKKworCXJldHVybiBtYXhfZHRyOwogfQogCiAvKgpAQCAtMjkzLDcgKzM2MiwyNCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQljYXJkLT50eXBlID0gTU1DX1RZUEVfU0RJTzsKKwllcnIgPSBtbWNfc2RfZ2V0X2NpZChob3N0LCBob3N0LT5vY3IgJiBvY3IsIGNhcmQtPnJhd19jaWQpOworCisJaWYgKCFlcnIpIHsKKwkJY2FyZC0+dHlwZSA9IE1NQ19UWVBFX1NEX0NPTUJPOworCisJCWlmIChvbGRjYXJkICYmIChvbGRjYXJkLT50eXBlICE9IE1NQ19UWVBFX1NEX0NPTUJPIHx8CisJCSAgICBtZW1jbXAoY2FyZC0+cmF3X2NpZCwgb2xkY2FyZC0+cmF3X2NpZCwgc2l6ZW9mKGNhcmQtPnJhd19jaWQpKSAhPSAwKSkgeworCQkJbW1jX3JlbW92ZV9jYXJkKGNhcmQpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwl9IGVsc2UgeworCQljYXJkLT50eXBlID0gTU1DX1RZUEVfU0RJTzsKKworCQlpZiAob2xkY2FyZCAmJiBvbGRjYXJkLT50eXBlICE9IE1NQ19UWVBFX1NESU8pIHsKKwkJCW1tY19yZW1vdmVfY2FyZChjYXJkKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfQogCiAJLyoKIAkgKiBDYWxsIHRoZSBvcHRpb25hbCBIQydzIGluaXRfY2FyZCBmdW5jdGlvbiB0byBoYW5kbGUgcXVpcmtzLgpAQCAtMzEzLDYgKzM5OSwxNyBAQAogCX0KIAogCS8qCisJICogUmVhZCBDU0QsIGJlZm9yZSBzZWxlY3RpbmcgdGhlIGNhcmQKKwkgKi8KKwlpZiAoIW9sZGNhcmQgJiYgY2FyZC0+dHlwZSA9PSBNTUNfVFlQRV9TRF9DT01CTykgeworCQllcnIgPSBtbWNfc2RfZ2V0X2NzZChob3N0LCBjYXJkKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbW1jX2RlY29kZV9jaWQoY2FyZCk7CisJfQorCisJLyoKIAkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCiAJICovCiAJaWYgKCFwb3dlcmVkX3Jlc3VtZSAmJiAhbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CkBAIC0zMjEsNiArNDE4LDIzIEBACiAJCQlnb3RvIHJlbW92ZTsKIAl9CiAKKwlpZiAoY2FyZC0+cXVpcmtzICYgTU1DX1FVSVJLX05PTlNURF9TRElPKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgbm9uLXN0YW5kYXJkIFNESU8gZGV2aWNlLCBtZWFuaW5nIGl0IGRvZXNuJ3QKKwkJICogaGF2ZSBhbnkgQ0lBIChDb21tb24gSS9PIGFyZWEpIHJlZ2lzdGVycyBwcmVzZW50LgorCQkgKiBJdCdzIGhvc3QncyByZXNwb25zaWJpbGl0eSB0byBmaWxsIGNjY3IgYW5kIGNpcworCQkgKiBzdHJ1Y3R1cmVzIGluIGluaXRfY2FyZCgpLgorCQkgKi8KKwkJbW1jX3NldF9jbG9jayhob3N0LCBjYXJkLT5jaXMubWF4X2R0cik7CisKKwkJaWYgKGNhcmQtPmNjY3IuaGlnaF9zcGVlZCkgeworCQkJbW1jX2NhcmRfc2V0X2hpZ2hzcGVlZChjYXJkKTsKKwkJCW1tY19zZXRfdGltaW5nKGNhcmQtPmhvc3QsIE1NQ19USU1JTkdfU0RfSFMpOworCQl9CisKKwkJZ290byBmaW5pc2g7CisJfQorCiAJLyoKIAkgKiBSZWFkIHRoZSBjb21tb24gcmVnaXN0ZXJzLgogCSAqLwpAQCAtMzM5LDQzICs0NTMsNTcgQEAKIAkJaW50IHNhbWUgPSAoY2FyZC0+Y2lzLnZlbmRvciA9PSBvbGRjYXJkLT5jaXMudmVuZG9yICYmCiAJCQkgICAgY2FyZC0+Y2lzLmRldmljZSA9PSBvbGRjYXJkLT5jaXMuZGV2aWNlKTsKIAkJbW1jX3JlbW92ZV9jYXJkKGNhcmQpOwotCQlpZiAoIXNhbWUpIHsKLQkJCWVyciA9IC1FTk9FTlQ7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoIXNhbWUpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwogCQljYXJkID0gb2xkY2FyZDsKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGNhcmQtPnR5cGUgPT0gTU1DX1RZUEVfU0RfQ09NQk8pIHsKKwkJZXJyID0gbW1jX3NkX3NldHVwX2NhcmQoaG9zdCwgY2FyZCwgb2xkY2FyZCAhPSBOVUxMKTsKKwkJLyogaGFuZGxlIGFzIFNESU8tb25seSBjYXJkIGlmIG1lbW9yeSBpbml0IGZhaWxlZCAqLworCQlpZiAoZXJyKSB7CisJCQltbWNfZ29faWRsZShob3N0KTsKKwkJCWlmIChtbWNfaG9zdF9pc19zcGkoaG9zdCkpCisJCQkJLyogc2hvdWxkIG5vdCBmYWlsLCBhcyBpdCB3b3JrZWQgcHJldmlvdXNseSAqLworCQkJCW1tY19zcGlfc2V0X2NyYyhob3N0LCB1c2Vfc3BpX2NyYyk7CisJCQljYXJkLT50eXBlID0gTU1DX1RZUEVfU0RJTzsKKwkJfSBlbHNlCisJCQljYXJkLT5kZXYudHlwZSA9ICZzZF90eXBlOworCX0KKworCS8qCisJICogSWYgbmVlZGVkLCBkaXNjb25uZWN0IGNhcmQgZGV0ZWN0aW9uIHB1bGwtdXAgcmVzaXN0b3IuCisJICovCisJZXJyID0gc2Rpb19kaXNhYmxlX2NkKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gcmVtb3ZlOworCiAJLyoKIAkgKiBTd2l0Y2ggdG8gaGlnaC1zcGVlZCAoaWYgc3VwcG9ydGVkKS4KIAkgKi8KIAllcnIgPSBzZGlvX2VuYWJsZV9ocyhjYXJkKTsKLQlpZiAoZXJyKQorCWlmIChlcnIgPiAwKQorCQltbWNfc2RfZ29faGlnaHNwZWVkKGNhcmQpOworCWVsc2UgaWYgKGVycikKIAkJZ290byByZW1vdmU7CiAKIAkvKgogCSAqIENoYW5nZSB0byB0aGUgY2FyZCdzIG1heGltdW0gc3BlZWQuCiAJICovCi0JaWYgKG1tY19jYXJkX2hpZ2hzcGVlZChjYXJkKSkgewotCQkvKgotCQkgKiBUaGUgU0RJTyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3QgbWVudGlvbiBob3cKLQkJICogdGhlIENJUyB0cmFuc2ZlciBzcGVlZCByZWdpc3RlciByZWxhdGVzIHRvCi0JCSAqIGhpZ2gtc3BlZWQsIGJ1dCBpdCBzZWVtcyB0aGF0IDUwIE1IeiBpcwotCQkgKiBtYW5kYXRvcnkuCi0JCSAqLwotCQltbWNfc2V0X2Nsb2NrKGhvc3QsIDUwMDAwMDAwKTsKLQl9IGVsc2UgewotCQltbWNfc2V0X2Nsb2NrKGhvc3QsIGNhcmQtPmNpcy5tYXhfZHRyKTsKLQl9CisJbW1jX3NldF9jbG9jayhob3N0LCBtbWNfc2Rpb19nZXRfbWF4X2Nsb2NrKGNhcmQpKTsKIAogCS8qCiAJICogU3dpdGNoIHRvIHdpZGVyIGJ1cyAoaWYgc3VwcG9ydGVkKS4KIAkgKi8KLQllcnIgPSBzZGlvX2VuYWJsZV93aWRlKGNhcmQpOwotCWlmIChlcnIpCisJZXJyID0gc2Rpb19lbmFibGVfNGJpdF9idXMoY2FyZCk7CisJaWYgKGVyciA+IDApCisJCW1tY19zZXRfYnVzX3dpZHRoKGNhcmQtPmhvc3QsIE1NQ19CVVNfV0lEVEhfNCk7CisJZWxzZSBpZiAoZXJyKQogCQlnb3RvIHJlbW92ZTsKIAorZmluaXNoOgogCWlmICghb2xkY2FyZCkKIAkJaG9zdC0+Y2FyZCA9IGNhcmQ7CiAJcmV0dXJuIDA7CkBAIC00ODcsOSArNjE1LDE0IEBACiAJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJZXJyID0gbW1jX3NkaW9faW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCwKIAkJCQkgKGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKTsKLQlpZiAoIWVycikKKwlpZiAoIWVycikgewogCQkvKiBXZSBtYXkgaGF2ZSBzd2l0Y2hlZCB0byAxLWJpdCBtb2RlIGR1cmluZyBzdXNwZW5kLiAqLwotCQllcnIgPSBzZGlvX2VuYWJsZV93aWRlKGhvc3QtPmNhcmQpOworCQllcnIgPSBzZGlvX2VuYWJsZV80Yml0X2J1cyhob3N0LT5jYXJkKTsKKwkJaWYgKGVyciA+IDApIHsKKwkJCW1tY19zZXRfYnVzX3dpZHRoKGhvc3QsIE1NQ19CVVNfV0lEVEhfNCk7CisJCQllcnIgPSAwOworCQl9CisJfQogCWlmICghZXJyICYmIGhvc3QtPnNkaW9faXJxcykKIAkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0KTsKIAltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwpAQCAtNTc0LDEzICs3MDcsNiBAQAogCWNhcmQtPnNkaW9fZnVuY3MgPSAwOwogCiAJLyoKLQkgKiBJZiBuZWVkZWQsIGRpc2Nvbm5lY3QgY2FyZCBkZXRlY3Rpb24gcHVsbC11cCByZXNpc3Rvci4KLQkgKi8KLQllcnIgPSBzZGlvX2Rpc2FibGVfY2QoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byByZW1vdmU7Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgKGJ1dCBkb24ndCBhZGQpIGFsbCBwcmVzZW50IGZ1bmN0aW9ucy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZnVuY3M7IGkrKywgY2FyZC0+c2Rpb19mdW5jcysrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggZDI1ZTIyYy4uYzk5NzQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwpAQCAtMTIxLDYgKzEyMSwxNSBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1NESENJX0NOUzNYWFgKKwlib29sICJTREhDSSBzdXBwb3J0IG9uIHRoZSBDYXZpdW0gTmV0d29ya3MgQ05TM3h4eCBTb0MiCisJZGVwZW5kcyBvbiBBUkNIX0NOUzNYWFgKKwlkZXBlbmRzIG9uIE1NQ19TREhDSV9QTFRGTQorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgU0RIQ0kgc3VwcG9ydCBmb3IgQ05TM3h4eCBTeXN0ZW0tb24tQ2hpcCBkZXZpY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX1NESENJX1MzQwogCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9uIFNhbXN1bmcgUzNDIFNvQyIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSSAmJiAoUExBVF9TM0MyNFhYIHx8IFBMQVRfUzNDNjRYWCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IGY0ZTUzYzkuLmZlMGJhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX01NQ19NWEMpCQkrPSBteGNtbWMubwogb2JqLSQoQ09ORklHX01NQ19TREhDSSkJCSs9IHNkaGNpLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUENJKQkrPSBzZGhjaS1wY2kubwotb2JqLSQoQ09ORklHX01NQ19TREhDSV9QTFRGTSkJKz0gc2RoY2ktcGx0Zm0ubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9TM0MpCSs9IHNkaGNpLXMzYy5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1NQRUFSKQkrPSBzZGhjaS1zcGVhci5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KQEAgLTM4LDYgKzM3LDEwIEBACiBvYmotJChDT05GSUdfTU1DX1NIX01NQ0lGKQkrPSBzaF9tbWNpZi5vCiBvYmotJChDT05GSUdfTU1DX0paNDc0MCkJKz0gano0NzQwX21tYy5vCiAKK29iai0kKENPTkZJR19NTUNfU0RIQ0lfUExURk0pCQkJKz0gc2RoY2ktcGxhdGZvcm0ubworc2RoY2ktcGxhdGZvcm0teQkJCQk6PSBzZGhjaS1wbHRmbS5vCitzZGhjaS1wbGF0Zm9ybS0kKENPTkZJR19NTUNfU0RIQ0lfQ05TM1hYWCkJKz0gc2RoY2ktY25zM3h4eC5vCisKIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfT0YpCSs9IHNkaGNpLW9mLm8KIHNkaGNpLW9mLXkJCQkJOj0gc2RoY2ktb2YtY29yZS5vCiBzZGhjaS1vZi0kKENPTkZJR19NTUNfU0RIQ0lfT0ZfRVNESEMpCSs9IHNkaGNpLW9mLWVzZGhjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwppbmRleCAyNGUwOTQ1Li4zYmQ4ZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCkBAIC0xMDU3LDIyICsxMDU3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19NTUNfTVNNN1gwMEFfUkVTVU1FX0lOX1dRCi1zdGF0aWMgdm9pZAotZG9fcmVzdW1lX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBtc21zZGNjX2hvc3QgKmhvc3QgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG1zbXNkY2NfaG9zdCwgcmVzdW1lX3Rhc2spOwotCXN0cnVjdCBtbWNfaG9zdAkqbW1jID0gaG9zdC0+bW1jOwotCi0JaWYgKG1tYykgewotCQltbWNfcmVzdW1lX2hvc3QobW1jKTsKLQkJaWYgKGhvc3QtPnN0YXRfaXJxKQotCQkJZW5hYmxlX2lycShob3N0LT5zdGF0X2lycSk7Ci0JfQotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQKIG1zbXNkY2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTExNDUsMTUgKzExMjksNiBAQAogCWhvc3QtPmRtYXJlcyA9IGRtYXJlczsKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAKLSNpZmRlZiBDT05GSUdfTU1DX0VNQkVEREVEX1NESU8KLQlpZiAocGxhdC0+ZW1iZWRkZWRfc2RpbykKLQkJbW1jX3NldF9lbWJlZGRlZF9zZGlvX2RhdGEobW1jLAotCQkJCQkgICAmcGxhdC0+ZW1iZWRkZWRfc2Rpby0+Y2lzLAotCQkJCQkgICAmcGxhdC0+ZW1iZWRkZWRfc2Rpby0+Y2NjciwKLQkJCQkJICAgcGxhdC0+ZW1iZWRkZWRfc2Rpby0+ZnVuY3MsCi0JCQkJCSAgIHBsYXQtPmVtYmVkZGVkX3NkaW8tPm51bV9mdW5jcyk7Ci0jZW5kaWYKLQogCS8qCiAJICogU2V0dXAgRE1BCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmggYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmgKaW5kZXggZGEwMDM5Yy4uZDdkZWRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuaApAQCAtMjM1LDEwICsyMzUsNiBAQAogCWludAkJCWNtZHBvbGw7CiAJc3RydWN0IG1zbXNkY2Nfc3RhdHMJc3RhdHM7CiAKLSNpZmRlZiBDT05GSUdfTU1DX01TTTdYMDBBX1JFU1VNRV9JTl9XUQotCXN0cnVjdCB3b3JrX3N0cnVjdAlyZXN1bWVfdGFzazsKLSNlbmRpZgotCiAJLyogQ29tbWFuZCBwYXJhbWV0ZXJzICovCiAJdW5zaWduZWQgaW50CQljbWRfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQJCWNtZF9waW9faXJxbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggYjAzMjgyOC4uNGE4Nzc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtNzgsNiArNzksNyBAQAogI2RlZmluZSBJTlRfRU5fTUFTSwkJMHgzMDdGMDAzMwogI2RlZmluZSBCV1JfRU5BQkxFCQkoMSA8PCA0KQogI2RlZmluZSBCUlJfRU5BQkxFCQkoMSA8PCA1KQorI2RlZmluZSBEVE9fRU5BQkxFCQkoMSA8PCAyMCkKICNkZWZpbmUgSU5JVF9TVFJFQU0JCSgxIDw8IDEpCiAjZGVmaW5lIERQX1NFTEVDVAkJKDEgPDwgMjEpCiAjZGVmaW5lIERESVIJCQkoMSA8PCA0KQpAQCAtNTIzLDcgKzUyNSw4IEBACiAJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTU1DIENsb2NrIGlzIG5vdCBzdG9wZWRcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2VuYWJsZV9pcnEoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfZW5hYmxlX2lycShzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAorCQkJCSAgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCiB7CiAJdW5zaWduZWQgaW50IGlycV9tYXNrOwogCkBAIC01MzIsNiArNTM1LDEwIEBACiAJZWxzZQogCQlpcnFfbWFzayA9IElOVF9FTl9NQVNLOwogCisJLyogRGlzYWJsZSB0aW1lb3V0IGZvciBlcmFzZXMgKi8KKwlpZiAoY21kLT5vcGNvZGUgPT0gTU1DX0VSQVNFKQorCQlpcnFfbWFzayAmPSB+RFRPX0VOQUJMRTsKKwogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgU1RBVF9DTEVBUik7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJU0UsIGlycV9tYXNrKTsKIAlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLCBpcnFfbWFzayk7CkBAIC03ODIsNyArNzg5LDcgQEAKIAkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGNtZC0+b3Bjb2RlLCBjbWQtPmFyZyk7CiAJaG9zdC0+Y21kID0gY21kOwogCi0Jb21hcF9oc21tY19lbmFibGVfaXJxKGhvc3QpOworCW9tYXBfaHNtbWNfZW5hYmxlX2lycShob3N0LCBjbWQpOwogCiAJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7CiAJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKQEAgLTEyNzMsOCArMTI4MCwxMSBAQAogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IGhvc3QtPm1ycS0+ZGF0YTsKIAlpbnQgZG1hX2NoLCByZXFfaW5fcHJvZ3Jlc3M7CiAKLQlpZiAoY2hfc3RhdHVzICYgT01BUDJfRE1BX01JU0FMSUdORURfRVJSX0lSUSkKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNSVNBTElHTkVEX0FEUlNfRVJSXG4iKTsKKwlpZiAoIShjaF9zdGF0dXMgJiBPTUFQX0RNQV9CTE9DS19JUlEpKSB7CisJCWRldl93YXJuKG1tY19kZXYoaG9zdC0+bW1jKSwgInVuZXhwZWN0ZWQgZG1hIHN0YXR1cyAleFxuIiwKKwkJCWNoX3N0YXR1cyk7CisJCXJldHVybjsKKwl9CiAKIAlzcGluX2xvY2soJmhvc3QtPmlycV9sb2NrKTsKIAlpZiAoaG9zdC0+ZG1hX2NoIDwgMCkgewpAQCAtMTU5OCw2ICsxNjA4LDE0IEBACiAJcmV0dXJuIG1tY19zbG90KGhvc3QpLmdldF9ybyhob3N0LT5kZXYsIDApOwogfQogCitzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2luaXRfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKG1tY19zbG90KGhvc3QpLmluaXRfY2FyZCkKKwkJbW1jX3Nsb3QoaG9zdCkuaW5pdF9jYXJkKGNhcmQpOworfQorCiBzdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbmZfYnVzX3Bvd2VyKHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCiB7CiAJdTMyIGhjdGwsIGNhcGEsIHZhbHVlOwpAQCAtMTg2OSw2ICsxODg3LDcgQEAKIAkuc2V0X2lvcyA9IG9tYXBfaHNtbWNfc2V0X2lvcywKIAkuZ2V0X2NkID0gb21hcF9oc21tY19nZXRfY2QsCiAJLmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3JvLAorCS5pbml0X2NhcmQgPSBvbWFwX2hzbW1jX2luaXRfY2FyZCwKIAkvKiBOWUVUIC0tIGVuYWJsZV9zZGlvX2lycSAqLwogfTsKIApAQCAtMTg3OSw2ICsxODk4LDcgQEAKIAkuc2V0X2lvcyA9IG9tYXBfaHNtbWNfc2V0X2lvcywKIAkuZ2V0X2NkID0gb21hcF9oc21tY19nZXRfY2QsCiAJLmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3JvLAorCS5pbml0X2NhcmQgPSBvbWFwX2hzbW1jX2luaXRfY2FyZCwKIAkvKiBOWUVUIC0tIGVuYWJsZV9zZGlvX2lycSAqLwogfTsKIApAQCAtMjA5NCwxMiArMjExNCwyNSBAQAogCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7CiAKIAltbWMtPmNhcHMgfD0gTU1DX0NBUF9NTUNfSElHSFNQRUVEIHwgTU1DX0NBUF9TRF9ISUdIU1BFRUQgfAotCQkgICAgIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZOworCQkgICAgIE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZIHwgTU1DX0NBUF9FUkFTRTsKIAotCWlmIChtbWNfc2xvdChob3N0KS53aXJlcyA+PSA4KQorCXN3aXRjaCAobW1jX3Nsb3QoaG9zdCkud2lyZXMpIHsKKwljYXNlIDg6CiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEE7Ci0JZWxzZSBpZiAobW1jX3Nsb3QoaG9zdCkud2lyZXMgPj0gNCkKKwkJLyogRmFsbCB0aHJvdWdoICovCisJY2FzZSA0OgogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIE5vdGhpbmcgdG8gY3JpYiBoZXJlICovCisJY2FzZSAwOgorCQkvKiBBc3N1bWluZyBub3RoaW5nIHdhcyBnaXZlbiBieSBib2FyZCwgQ29yZSB1c2UncyAxLUJpdCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBDb21wbGV0ZWx5IHVuZXhwZWN0ZWQuLiBDb3JlIGdvZXMgd2l0aCAxLUJpdCBXaWR0aCAqLworCQlkZXZfY3JpdChtbWNfZGV2KGhvc3QtPm1tYyksICJJbnZhbGlkIHdpZHRoICVkXG4gdXNlZCEiCisJCQkidXNpbmcgMSBpbnN0ZWFkXG4iLCBtbWNfc2xvdChob3N0KS53aXJlcyk7CisJfQogCiAJaWYgKG1tY19zbG90KGhvc3QpLm5vbnJlbW92YWJsZSkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTk9OUkVNT1ZBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1jbnMzeHh4LmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWNuczN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzA1MGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1jbnMzeHh4LmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIFNESENJIHN1cHBvcnQgZm9yIENOUzN4eHggU29DCisgKgorICogQ29weXJpZ2h0IDIwMDggQ2F2aXVtIE5ldHdvcmtzCisgKiBDb3B5cmlnaHQgMjAxMCBNb250YVZpc3RhIFNvZnR3YXJlLCBMTEMuCisgKgorICogQXV0aG9yczogU2NvdHQgU2h1CisgKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QG12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NkaGNpLXBsdGZtLmg+CisjaW5jbHVkZSA8bWFjaC9jbnMzeHh4Lmg+CisjaW5jbHVkZSAic2RoY2kuaCIKKyNpbmNsdWRlICJzZGhjaS1wbHRmbS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNkaGNpX2NuczN4eHhfZ2V0X21heF9jbGsoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJcmV0dXJuIDE1MDAwMDAwMDsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfY25zM3h4eF9zZXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtbWNfZGV2KGhvc3QtPm1tYyk7CisJaW50IGRpdiA9IDE7CisJdTE2IGNsazsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisKKwlpZiAoY2xvY2sgPT0gaG9zdC0+Y2xvY2spCisJCXJldHVybjsKKworCXNkaGNpX3dyaXRldyhob3N0LCAwLCBTREhDSV9DTE9DS19DT05UUk9MKTsKKworCWlmIChjbG9jayA9PSAwKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChob3N0LT5tYXhfY2xrIC8gZGl2ID4gY2xvY2spIHsKKwkJLyoKKwkJICogT24gQ05TM3h4eCBkaXZpZGVyIGdyb3dzIGxpbmVhcmx5IHVwIHRvIDQsIGFuZCB0aGVuCisJCSAqIGV4cG9uZW50aWFsbHkgdXAgdG8gMjU2LgorCQkgKi8KKwkJaWYgKGRpdiA8IDQpCisJCQlkaXYgKz0gMTsKKwkJZWxzZSBpZiAoZGl2IDwgMjU2KQorCQkJZGl2ICo9IDI7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWRldl9kYmcoZGV2LCAiZGVzaXJlZCBTRCBjbG9jazogJWQsIGFjdHVhbDogJWRcbiIsCisJCWNsb2NrLCBob3N0LT5tYXhfY2xrIC8gZGl2KTsKKworCS8qIERpdmlkZSBieSAzIGlzIHNwZWNpYWwuICovCisJaWYgKGRpdiAhPSAzKQorCQlkaXYgPj49IDE7CisKKwljbGsgPSBkaXYgPDwgU0RIQ0lfRElWSURFUl9TSElGVDsKKwljbGsgfD0gU0RIQ0lfQ0xPQ0tfSU5UX0VOOworCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOworCisJdGltZW91dCA9IDIwOworCXdoaWxlICghKChjbGsgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DTE9DS19DT05UUk9MKSkKKwkJCSYgU0RIQ0lfQ0xPQ0tfSU5UX1NUQUJMRSkpIHsKKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJZGV2X3dhcm4oZGV2LCAiY2xvY2sgaXMgdW5zdGFibGUiKTsKKwkJCWJyZWFrOworCQl9CisJCXRpbWVvdXQtLTsKKwkJbWRlbGF5KDEpOworCX0KKworCWNsayB8PSBTREhDSV9DTE9DS19DQVJEX0VOOworCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOworb3V0OgorCWhvc3QtPmNsb2NrID0gY2xvY2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX2NuczN4eHhfb3BzID0geworCS5nZXRfbWF4X2Nsb2NrCT0gc2RoY2lfY25zM3h4eF9nZXRfbWF4X2NsaywKKwkuc2V0X2Nsb2NrCT0gc2RoY2lfY25zM3h4eF9zZXRfY2xvY2ssCit9OworCitzdHJ1Y3Qgc2RoY2lfcGx0Zm1fZGF0YSBzZGhjaV9jbnMzeHh4X3BkYXRhID0geworCS5vcHMgPSAmc2RoY2lfY25zM3h4eF9vcHMsCisJLnF1aXJrcyA9IFNESENJX1FVSVJLX0JST0tFTl9ETUEgfAorCQkgIFNESENJX1FVSVJLX0RBVEFfVElNRU9VVF9VU0VTX1NEQ0xLIHwKKwkJICBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUIHwKKwkJICBTREhDSV9RVUlSS19DQVBfQ0xPQ0tfQkFTRV9CUk9LRU4gfAorCQkgIFNESENJX1FVSVJLX0JST0tFTl9USU1FT1VUX1ZBTCB8CisJCSAgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0ssCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1jb3JlLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYwppbmRleCBhNmJkNDQ4Li5jNTFiNzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYwpAQCAtMTU0LDYgKzE1NCwxMCBAQAogCQlob3N0LT5vcHMgPSAmc2RoY2lfb2ZfZGF0YS0+b3BzOwogCX0KIAorCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSxhdXRvLWNtZDEyIiwgTlVMTCkpCisJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19NVUxUSUJMT0NLX1JFQURfQUNNRDEyOworCisKIAlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic2RoY2ksMS1iaXQtb25seSIsIE5VTEwpKQogCQlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfRk9SQ0VfMV9CSVRfREFUQTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggNjU0ODNmZC4uZThhYTk5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCkBAIC04NCw3ICs4NSwzMCBAQAogCWlmIChjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0FNU1VORyB8fAogCSAgICBjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU09OWSkKIAkJY2hpcC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQ7CisJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgcmljb2hfbW1jX3Byb2JlX3Nsb3Qoc3RydWN0IHNkaGNpX3BjaV9zbG90ICpzbG90KQoreworCXNsb3QtPmhvc3QtPmNhcHMgPQorCQkoKDB4MjEgPDwgU0RIQ0lfVElNRU9VVF9DTEtfU0hJRlQpCisJCQkmIFNESENJX1RJTUVPVVRfQ0xLX01BU0spIHwKKworCQkoKDB4MjEgPDwgU0RIQ0lfQ0xPQ0tfQkFTRV9TSElGVCkKKwkJCSYgU0RIQ0lfQ0xPQ0tfQkFTRV9NQVNLKSB8CisKKwkJU0RIQ0lfVElNRU9VVF9DTEtfVU5JVCB8CisJCVNESENJX0NBTl9WRERfMzMwIHwKKwkJU0RIQ0lfQ0FOX0RPX1NETUE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmljb2hfbW1jX3Jlc3VtZShzdHJ1Y3Qgc2RoY2lfcGNpX2NoaXAgKmNoaXApCit7CisJLyogQXBwbHkgYSBkZWxheSB0byBhbGxvdyBjb250cm9sbGVyIHRvIHNldHRsZSAqLworCS8qIE90aGVyd2lzZSBpdCBiZWNvbWVzIGNvbmZ1c2VkIGlmIGNhcmQgc3RhdGUgY2hhbmdlZAorCQlkdXJpbmcgc3VzcGVuZCAqLworCW1zbGVlcCg1MDApOwogCXJldHVybiAwOwogfQogCkBAIC05NSw2ICsxMTksMTUgQEAKIAkJCSAgU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VULAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfcmljb2hfbW1jID0geworCS5wcm9iZV9zbG90CT0gcmljb2hfbW1jX3Byb2JlX3Nsb3QsCisJLnJlc3VtZQkJPSByaWNvaF9tbWNfcmVzdW1lLAorCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAorCQkJICBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQgfAorCQkJICBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VUIHwKKwkJCSAgU0RIQ0lfUVVJUktfTUlTU0lOR19DQVBTCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9lbmVfNzEyID0gewogCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfU0lOR0xFX1BPV0VSX1dSSVRFIHwKIAkJCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0RNQSwKQEAgLTM3NCw2ICs0MDcsMjIgQEAKIAl9LAogCiAJeworCQkudmVuZG9yICAgICAgICAgPSBQQ0lfVkVORE9SX0lEX1JJQ09ILAorCQkuZGV2aWNlICAgICAgICAgPSAweDg0MywKKwkJLnN1YnZlbmRvciAgICAgID0gUENJX0FOWV9JRCwKKwkJLnN1YmRldmljZSAgICAgID0gUENJX0FOWV9JRCwKKwkJLmRyaXZlcl9kYXRhICAgID0gKGtlcm5lbF91bG9uZ190KSZzZGhjaV9yaWNvaF9tbWMsCisJfSwKKworCXsKKwkJLnZlbmRvciAgICAgICAgID0gUENJX1ZFTkRPUl9JRF9SSUNPSCwKKwkJLmRldmljZSAgICAgICAgID0gMHhlODIyLAorCQkuc3VidmVuZG9yICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuc3ViZGV2aWNlICAgICAgPSBQQ0lfQU5ZX0lELAorCQkuZHJpdmVyX2RhdGEgICAgPSAoa2VybmVsX3Vsb25nX3QpJnNkaGNpX3JpY29oX21tYywKKwl9LAorCisJewogCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfRU5FLAogCQkuZGV2aWNlCQk9IFBDSV9ERVZJQ0VfSURfRU5FX0NCNzEyX1NELAogCQkuc3VidmVuZG9yCT0gUENJX0FOWV9JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGx0Zm0uYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGx0Zm0uYwppbmRleCBiNmVlMGQ3Li5lMDQ1ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBsdGZtLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CkBAIC0zMiw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2RoY2ktcGx0Zm0uaD4KIAogI2luY2x1ZGUgInNkaGNpLmgiCisjaW5jbHVkZSAic2RoY2ktcGx0Zm0uaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC01MSwxMCArNTMsMTQgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX3BsdGZtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqcGxhdGlkID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvbWVtOwogCWludCByZXQ7CiAKKwlpZiAoIXBkYXRhICYmIHBsYXRpZCAmJiBwbGF0aWQtPmRyaXZlcl9kYXRhKQorCQlwZGF0YSA9ICh2b2lkICopcGxhdGlkLT5kcml2ZXJfZGF0YTsKKwogCWlvbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIWlvbWVtKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xNTAsNiArMTU2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHNkaGNpX3BsdGZtX2lkc1tdID0geworCXsgInNkaGNpIiwgfSwKKyNpZmRlZiBDT05GSUdfTU1DX1NESENJX0NOUzNYWFgKKwl7ICJzZGhjaS1jbnMzeHh4IiwgKGtlcm5lbF91bG9uZ190KSZzZGhjaV9jbnMzeHh4X3BkYXRhIH0sCisjZW5kaWYKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgc2RoY2lfcGx0Zm1faWRzKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2RoY2lfcGx0Zm1fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gInNkaGNpIiwKQEAgLTE1Nyw2ICsxNzIsNyBAQAogCX0sCiAJLnByb2JlCQk9IHNkaGNpX3BsdGZtX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2RoY2lfcGx0Zm1fcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBzZGhjaV9wbHRmbV9pZHMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCkBAIC0xODEsNCArMTk3LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSBwbGF0Zm9ybSBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1vY2VhbiBMYWJvcmF0b3JpZXMgPGluZm9AbW9jZWFuLWxhYnMuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzZGhjaSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5oIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wbHRmbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGYzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBsdGZtLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwIE1vbnRhVmlzdGEgU29mdHdhcmUsIExMQy4KKyAqCisgKiBBdXRob3I6IEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfRFJJVkVSU19NTUNfU0RIQ0lfUExURk1fSAorI2RlZmluZSBfRFJJVkVSU19NTUNfU0RIQ0lfUExURk1fSAorCisjaW5jbHVkZSA8bGludXgvc2RoY2ktcGx0Zm0uaD4KKworZXh0ZXJuIHN0cnVjdCBzZGhjaV9wbHRmbV9kYXRhIHNkaGNpX2NuczN4eHhfcGRhdGE7CisKKyNlbmRpZiAvKiBfRFJJVkVSU19NTUNfU0RIQ0lfUExURk1fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKaW5kZXggYWQzMGYwNy4uMGE3ZjI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KIApAQCAtNDQsNiArNDUsOCBAQAogCXN0cnVjdCByZXNvdXJjZQkJKmlvYXJlYTsKIAlzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZGF0YTsKIAl1bnNpZ25lZCBpbnQJCWN1cl9jbGs7CisJaW50CQkJZXh0X2NkX2lycTsKKwlpbnQJCQlleHRfY2RfZ3BpbzsKIAogCXN0cnVjdCBjbGsJCSpjbGtfaW87CiAJc3RydWN0IGNsawkJKmNsa19idXNbTUFYX0JVU19DTEtdOwpAQCAtMTEwLDExICsxMTMsNiBAQAogCXJldHVybiBtYXg7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2RoY2lfczNjX2dldF90aW1lb3V0X2NsayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKLXsKLQlyZXR1cm4gc2RoY2lfczNjX2dldF9tYXhfY2xrKGhvc3QpIC8gMTAwMDAwMDsKLX0KLQogLyoqCiAgKiBzZGhjaV9zM2NfY29uc2lkZXJfY2xvY2sgLSBjb25zaWRlciBvbmUgdGhlIGJ1cyBjbG9ja3MgZm9yIGN1cnJlbnQgc2V0dGluZwogICogQG91cmhvc3Q6IE91ciBTREhDSSBpbnN0YW5jZS4KQEAgLTE4OCw3ICsxODYsNiBAQAogCiAJCW91cmhvc3QtPmN1cl9jbGsgPSBiZXN0X3NyYzsKIAkJaG9zdC0+bWF4X2NsayA9IGNsa19nZXRfcmF0ZShjbGspOwotCQlob3N0LT50aW1lb3V0X2NsayA9IHNkaGNpX3MzY19nZXRfdGltZW91dF9jbGsoaG9zdCk7CiAKIAkJY3RybCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFMzQ19TREhDSV9DT05UUk9MMik7CiAJCWN0cmwgJj0gflMzQ19TREhDSV9DVFJMMl9TRUxCQVNFQ0xLX01BU0s7CkBAIC0yMDksMTIgKzIwNiw5MyBAQAogCX0KIH0KIAorLyoqCisgKiBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jayAtIGNhbGxiYWNrIHRvIGdldCBtaW5pbWFsIHN1cHBvcnRlZCBjbG9jayB2YWx1ZQorICogQGhvc3Q6IFRoZSBTREhDSSBob3N0IGJlaW5nIHF1ZXJpZWQKKyAqCisgKiBUbyBpbml0IG1tYyBob3N0IHByb3Blcmx5IGEgbWluaW1hbCBjbG9jayB2YWx1ZSBpcyBuZWVkZWQuIEZvciBoaWdoIHN5c3RlbQorICogYnVzIGNsb2NrJ3MgdmFsdWVzIHRoZSBzdGFuZGFyZCBmb3JtdWxhIGdpdmVzIHZhbHVlcyBvdXQgb2YgYWxsb3dlZCByYW5nZS4KKyAqIFRoZSBjbG9jayBzdGlsbCBjYW4gYmUgc2V0IHRvIGxvd2VyIHZhbHVlcywgaWYgY2xvY2sgc291cmNlIG90aGVyIHRoZW4KKyAqIHN5c3RlbSBidXMgaXMgc2VsZWN0ZWQuCisqLworc3RhdGljIHVuc2lnbmVkIGludCBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2RoY2lfczNjICpvdXJob3N0ID0gdG9fczNjKGhvc3QpOworCXVuc2lnbmVkIGludCBkZWx0YSwgbWluID0gVUlOVF9NQVg7CisJaW50IHNyYzsKKworCWZvciAoc3JjID0gMDsgc3JjIDwgTUFYX0JVU19DTEs7IHNyYysrKSB7CisJCWRlbHRhID0gc2RoY2lfczNjX2NvbnNpZGVyX2Nsb2NrKG91cmhvc3QsIHNyYywgMCk7CisJCWlmIChkZWx0YSA9PSBVSU5UX01BWCkKKwkJCWNvbnRpbnVlOworCQkvKiBkZWx0YSBpcyBhIG5lZ2F0aXZlIHZhbHVlIGluIHRoaXMgY2FzZSAqLworCQlpZiAoLWRlbHRhIDwgbWluKQorCQkJbWluID0gLWRlbHRhOworCX0KKwlyZXR1cm4gbWluOworfQorCiBzdGF0aWMgc3RydWN0IHNkaGNpX29wcyBzZGhjaV9zM2Nfb3BzID0gewogCS5nZXRfbWF4X2Nsb2NrCQk9IHNkaGNpX3MzY19nZXRfbWF4X2NsaywKLQkuZ2V0X3RpbWVvdXRfY2xvY2sJPSBzZGhjaV9zM2NfZ2V0X3RpbWVvdXRfY2xrLAogCS5zZXRfY2xvY2sJCT0gc2RoY2lfczNjX3NldF9jbG9jaywKKwkuZ2V0X21pbl9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21pbl9jbG9jaywKIH07CiAKK3N0YXRpYyB2b2lkIHNkaGNpX3MzY19ub3RpZnlfY2hhbmdlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHN0YXRlKQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaG9zdCkgeworCQltdXRleF9sb2NrKCZob3N0LT5sb2NrKTsKKwkJaWYgKHN0YXRlKSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhcmQgaW5zZXJ0ZWQuXG4iKTsKKwkJCWhvc3QtPmZsYWdzICY9IH5TREhDSV9ERVZJQ0VfREVBRDsKKwkJCWhvc3QtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT047CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKCZkZXYtPmRldiwgImNhcmQgcmVtb3ZlZC5cbiIpOworCQkJaG9zdC0+ZmxhZ3MgfD0gU0RIQ0lfREVWSUNFX0RFQUQ7CisJCQlob3N0LT5xdWlya3MgJj0gflNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTjsKKwkJfQorCQlzZGhjaV9jYXJkX2RldGVjdChob3N0KTsKKwkJbXV0ZXhfdW5sb2NrKCZob3N0LT5sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzZGhjaV9zM2NfZ3Bpb19jYXJkX2RldGVjdF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzZGhjaV9zM2MgKnNjID0gZGV2X2lkOworCWludCBzdGF0dXMgPSBncGlvX2dldF92YWx1ZShzYy0+ZXh0X2NkX2dwaW8pOworCWlmIChzYy0+cGRhdGEtPmV4dF9jZF9ncGlvX2ludmVydCkKKwkJc3RhdHVzID0gIXN0YXR1czsKKwlzZGhjaV9zM2Nfbm90aWZ5X2NoYW5nZShzYy0+cGRldiwgc3RhdHVzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3MzY19zZXR1cF9jYXJkX2RldGVjdF9ncGlvKHN0cnVjdCBzZGhjaV9zM2MgKnNjKQoreworCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gc2MtPnBkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzYy0+cGRldi0+ZGV2OworCisJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+ZXh0X2NkX2dwaW8sICJTREhDSSBFWFQgQ0QiKSA9PSAwKSB7CisJCXNjLT5leHRfY2RfZ3BpbyA9IHBkYXRhLT5leHRfY2RfZ3BpbzsKKwkJc2MtPmV4dF9jZF9pcnEgPSBncGlvX3RvX2lycShwZGF0YS0+ZXh0X2NkX2dwaW8pOworCQlpZiAoc2MtPmV4dF9jZF9pcnEgJiYKKwkJICAgIHJlcXVlc3RfdGhyZWFkZWRfaXJxKHNjLT5leHRfY2RfaXJxLCBOVUxMLAorCQkJCQkgc2RoY2lfczNjX2dwaW9fY2FyZF9kZXRlY3RfdGhyZWFkLAorCQkJCQkgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkgZGV2X25hbWUoZGV2KSwgc2MpID09IDApIHsKKwkJCWludCBzdGF0dXMgPSBncGlvX2dldF92YWx1ZShzYy0+ZXh0X2NkX2dwaW8pOworCQkJaWYgKHBkYXRhLT5leHRfY2RfZ3Bpb19pbnZlcnQpCisJCQkJc3RhdHVzID0gIXN0YXR1czsKKwkJCXNkaGNpX3MzY19ub3RpZnlfY2hhbmdlKHNjLT5wZGV2LCBzdGF0dXMpOworCQl9IGVsc2UgeworCQkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IHJlcXVlc3QgaXJxIGZvciBjYXJkIGRldGVjdFxuIik7CisJCQlzYy0+ZXh0X2NkX2lycSA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXF1ZXN0IGdwaW8gZm9yIGNhcmQgZGV0ZWN0XG4iKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX3MzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0yNTIsNiArMzMwLDcgQEAKIAlzYy0+aG9zdCA9IGhvc3Q7CiAJc2MtPnBkZXYgPSBwZGV2OwogCXNjLT5wZGF0YSA9IHBkYXRhOworCXNjLT5leHRfY2RfZ3BpbyA9IC0xOyAvKiBpbnZhbGlkIGdwaW8gbnVtYmVyICovCiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKIApAQCAtMzE4LDYgKzM5Nyw3IEBACiAKIAkvKiBTZXR1cCBxdWlya3MgZm9yIHRoZSBjb250cm9sbGVyICovCiAJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX05PX0VOREFUVFJfSU5fTk9QREVTQzsKKwlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTk9fSElTUERfQklUOwogCiAjaWZuZGVmIENPTkZJR19NTUNfU0RIQ0lfUzNDX0RNQQogCkBAIC0zMzIsMTUgKzQxMiwzNCBAQAogCSAqIFNESENJIGJsb2NrLCBvciBhIG1pc3NpbmcgY29uZmlndXJhdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNldC4gKi8KIAlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTk9fQlVTWV9JUlE7CiAKKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX05PTkUgfHwKKwkgICAgcGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX1BFUk1BTkVOVCkKKwkJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTjsKKworCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5UKQorCQlob3N0LT5tbWMtPmNhcHMgPSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKKwogCWhvc3QtPnF1aXJrcyB8PSAoU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAogCQkJIFNESENJX1FVSVJLXzMyQklUX0RNQV9TSVpFKTsKIAorCS8qIEhTTU1DIG9uIFNhbXN1bmcgU29DcyB1c2VzIFNEQ0xLIGFzIHRpbWVvdXQgY2xvY2sgKi8KKwlob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfREFUQV9USU1FT1VUX1VTRVNfU0RDTEs7CisKIAlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAic2RoY2lfYWRkX2hvc3QoKSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9hZGRfaG9zdDsKIAl9CiAKKwkvKiBUaGUgZm9sbG93aW5nIHR3byBtZXRob2RzIG9mIGNhcmQgZGV0ZWN0aW9uIG1pZ2h0IGNhbGwKKwkgICBzZGhjaV9zM2Nfbm90aWZ5X2NoYW5nZSgpIGltbWVkaWF0ZWx5LCBzbyB0aGV5IGNhbiBiZSBjYWxsZWQKKwkgICBvbmx5IGFmdGVyIHNkaGNpX2FkZF9ob3N0KCkuIFNldHVwIGVycm9ycyBhcmUgaWdub3JlZC4gKi8KKwlpZiAocGRhdGEtPmNkX3R5cGUgPT0gUzNDX1NESENJX0NEX0VYVEVSTkFMICYmIHBkYXRhLT5leHRfY2RfaW5pdCkKKwkJcGRhdGEtPmV4dF9jZF9pbml0KCZzZGhjaV9zM2Nfbm90aWZ5X2NoYW5nZSk7CisJaWYgKHBkYXRhLT5jZF90eXBlID09IFMzQ19TREhDSV9DRF9HUElPICYmCisJICAgIGdwaW9faXNfdmFsaWQocGRhdGEtPmV4dF9jZF9ncGlvKSkKKwkJc2RoY2lfczNjX3NldHVwX2NhcmRfZGV0ZWN0X2dwaW8oc2MpOworCiAJcmV0dXJuIDA7CiAKICBlcnJfYWRkX2hvc3Q6CkBAIC0zNjUsMTAgKzQ2NCwyMCBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZGhjaV9zM2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9ICBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfczNjICpzYyA9IHNkaGNpX3ByaXYoaG9zdCk7CiAJaW50IHB0cjsKIAorCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfRVhURVJOQUwgJiYgcGRhdGEtPmV4dF9jZF9jbGVhbnVwKQorCQlwZGF0YS0+ZXh0X2NkX2NsZWFudXAoJnNkaGNpX3MzY19ub3RpZnlfY2hhbmdlKTsKKworCWlmIChzYy0+ZXh0X2NkX2lycSkKKwkJZnJlZV9pcnEoc2MtPmV4dF9jZF9pcnEsIHNjKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKHNjLT5leHRfY2RfZ3BpbykpCisJCWdwaW9fZnJlZShzYy0+ZXh0X2NkX2dwaW8pOworCiAJc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMSk7CiAKIAlmb3IgKHB0ciA9IDA7IHB0ciA8IDM7IHB0cisrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggYzZkMWJkOC4uNzg1NTEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAKQEAgLTgxNyw4ICs4MTgsMTIgQEAKIAlXQVJOX09OKCFob3N0LT5kYXRhKTsKIAogCW1vZGUgPSBTREhDSV9UUk5TX0JMS19DTlRfRU47Ci0JaWYgKGRhdGEtPmJsb2NrcyA+IDEpCi0JCW1vZGUgfD0gU0RIQ0lfVFJOU19NVUxUSTsKKwlpZiAoZGF0YS0+YmxvY2tzID4gMSkgeworCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTVVMVElCTE9DS19SRUFEX0FDTUQxMikKKwkJCW1vZGUgfD0gU0RIQ0lfVFJOU19NVUxUSSB8IFNESENJX1RSTlNfQUNNRDEyOworCQllbHNlCisJCQltb2RlIHw9IFNESENJX1RSTlNfTVVMVEk7CisJfQogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpCiAJCW1vZGUgfD0gU0RIQ0lfVFJOU19SRUFEOwogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKQpAQCAtMTEwOCw2ICsxMTEzLDEyIEBACiAjaWZuZGVmIFNESENJX1VTRV9MRURTX0NMQVNTCiAJc2RoY2lfYWN0aXZhdGVfbGVkKGhvc3QpOwogI2VuZGlmCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX01VTFRJQkxPQ0tfUkVBRF9BQ01EMTIpIHsKKwkJaWYgKG1ycS0+c3RvcCkgeworCQkJbXJxLT5kYXRhLT5zdG9wID0gTlVMTDsKKwkJCW1ycS0+c3RvcCA9IE5VTEw7CisJCX0KKwl9CiAKIAlob3N0LT5tcnEgPSBtcnE7CiAKQEAgLTExNTksNiArMTE3MCwxMSBAQAogCiAJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KQorCQljdHJsIHw9IFNESENJX0NUUkxfOEJJVEJVUzsKKwllbHNlCisJCWN0cmwgJj0gflNESENJX0NUUkxfOEJJVEJVUzsKKwogCWlmIChpb3MtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCiAJCWN0cmwgfD0gU0RIQ0lfQ1RSTF80QklUQlVTOwogCWVsc2UKQEAgLTE2MDMsNyArMTYxOSwxMCBAQAogCiAJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAotCXJldHVybiAwOworCWlmIChob3N0LT52bW1jKQorCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShob3N0LT52bW1jKTsKKworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHNkaGNpX3N1c3BlbmRfaG9zdCk7CkBAIC0xNjEyLDYgKzE2MzEsMTMgQEAKIHsKIAlpbnQgcmV0OwogCisJaWYgKGhvc3QtPnZtbWMpIHsKKwkJaW50IHJldCA9IHJlZ3VsYXRvcl9lbmFibGUoaG9zdC0+dm1tYyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCiAJaWYgKGhvc3QtPmZsYWdzICYgKFNESENJX1VTRV9TRE1BIHwgU0RIQ0lfVVNFX0FETUEpKSB7CiAJCWlmIChob3N0LT5vcHMtPmVuYWJsZV9kbWEpCiAJCQlob3N0LT5vcHMtPmVuYWJsZV9kbWEoaG9zdCk7CkBAIC0xNjg3LDcgKzE3MTMsOCBAQAogCQkJaG9zdC0+dmVyc2lvbik7CiAJfQogCi0JY2FwcyA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyk7CisJY2FwcyA9IChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19NSVNTSU5HX0NBUFMpID8gaG9zdC0+Y2FwcyA6CisJCXNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyk7CiAKIAlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfRk9SQ0VfRE1BKQogCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfU0RNQTsKQEAgLTE3ODUsMTMgKzE4MTIsMTIgQEAKIAkgKiBTZXQgaG9zdCBwYXJhbWV0ZXJzLgogCSAqLwogCW1tYy0+b3BzID0gJnNkaGNpX29wczsKLQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgJiYKLQkJCWhvc3QtPm9wcy0+c2V0X2Nsb2NrICYmIGhvc3QtPm9wcy0+Z2V0X21pbl9jbG9jaykKKwlpZiAoaG9zdC0+b3BzLT5nZXRfbWluX2Nsb2NrKQogCQltbWMtPmZfbWluID0gaG9zdC0+b3BzLT5nZXRfbWluX2Nsb2NrKGhvc3QpOwogCWVsc2UKIAkJbW1jLT5mX21pbiA9IGhvc3QtPm1heF9jbGsgLyAyNTY7CiAJbW1jLT5mX21heCA9IGhvc3QtPm1heF9jbGs7Ci0JbW1jLT5jYXBzID0gTU1DX0NBUF9TRElPX0lSUTsKKwltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRElPX0lSUTsKIAogCWlmICghKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0ZPUkNFXzFfQklUX0RBVEEpKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwpAQCAtMTg4NCw2ICsxOTEwLDE0IEBACiAJaWYgKHJldCkKIAkJZ290byB1bnRhc2tsZXQ7CiAKKwlob3N0LT52bW1jID0gcmVndWxhdG9yX2dldChtbWNfZGV2KG1tYyksICJ2bW1jIik7CisJaWYgKElTX0VSUihob3N0LT52bW1jKSkgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogbm8gdm1tYyByZWd1bGF0b3IgZm91bmRcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKKwkJaG9zdC0+dm1tYyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcmVndWxhdG9yX2VuYWJsZShob3N0LT52bW1jKTsKKwl9CisKIAlzZGhjaV9pbml0KGhvc3QsIDApOwogCiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwpAQCAtMTk2OCw2ICsyMDAyLDExIEBACiAJdGFza2xldF9raWxsKCZob3N0LT5jYXJkX3Rhc2tsZXQpOwogCXRhc2tsZXRfa2lsbCgmaG9zdC0+ZmluaXNoX3Rhc2tsZXQpOwogCisJaWYgKGhvc3QtPnZtbWMpIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dm1tYyk7CisJCXJlZ3VsYXRvcl9wdXQoaG9zdC0+dm1tYyk7CisJfQorCiAJa2ZyZWUoaG9zdC0+YWRtYV9kZXNjKTsKIAlrZnJlZShob3N0LT5hbGlnbl9idWZmZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggYzg0NjgxMy4uMDM2Y2ZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtNzIsNiArNzIsNyBAQAogI2RlZmluZSAgIFNESENJX0NUUkxfQURNQTEJMHgwOAogI2RlZmluZSAgIFNESENJX0NUUkxfQURNQTMyCTB4MTAKICNkZWZpbmUgICBTREhDSV9DVFJMX0FETUE2NAkweDE4CisjZGVmaW5lICBTREhDSV9DVFJMXzhCSVRCVVMJMHgyMAogCiAjZGVmaW5lIFNESENJX1BPV0VSX0NPTlRST0wJMHgyOQogI2RlZmluZSAgU0RIQ0lfUE9XRVJfT04JCTB4MDEKQEAgLTI0MCwxMiArMjQxLDE4IEBACiAjZGVmaW5lIFNESENJX1FVSVJLX0NBUF9DTE9DS19CQVNFX0JST0tFTgkJKDE8PDI1KQogLyogQ29udHJvbGxlciBjYW5ub3Qgc3VwcG9ydCBFbmQgQXR0cmlidXRlIGluIE5PUCBBRE1BIGRlc2NyaXB0b3IgKi8KICNkZWZpbmUgU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDCQkoMTw8MjYpCisvKiBDb250cm9sbGVyIGlzIG1pc3NpbmcgZGV2aWNlIGNhcHMuIFVzZSBjYXBzIHByb3ZpZGVkIGJ5IGhvc3QgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfTUlTU0lOR19DQVBTCQkJKDE8PDI3KQorLyogQ29udHJvbGxlciB1c2VzIEF1dG8gQ01EMTIgY29tbWFuZCB0byBzdG9wIHRoZSB0cmFuc2ZlciAqLworI2RlZmluZSBTREhDSV9RVUlSS19NVUxUSUJMT0NLX1JFQURfQUNNRDEyCQkoMTw8MjgpCiAKIAlpbnQJCQlpcnE7CQkvKiBEZXZpY2UgSVJRICovCiAJdm9pZCBfX2lvbWVtICoJCWlvYWRkcjsJCS8qIE1hcHBlZCBhZGRyZXNzICovCiAKIAljb25zdCBzdHJ1Y3Qgc2RoY2lfb3BzCSpvcHM7CQkvKiBMb3cgbGV2ZWwgaHcgaW50ZXJmYWNlICovCiAKKwlzdHJ1Y3QgcmVndWxhdG9yCSp2bW1jOwkJLyogUG93ZXIgcmVndWxhdG9yICovCisKIAkvKiBJbnRlcm5hbCBkYXRhICovCiAJc3RydWN0IG1tY19ob3N0CQkqbW1jOwkJLyogTU1DIHN0cnVjdHVyZSAqLwogCXU2NAkJCWRtYV9tYXNrOwkvKiBjdXN0b20gRE1BIG1hc2sgKi8KQEAgLTI5Miw2ICsyOTksOCBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7CQkvKiBUaW1lciBmb3IgdGltZW91dHMgKi8KIAorCXVuc2lnbmVkIGludAkJY2FwczsJCS8qIEFsdGVybmF0aXZlIGNhcGFiaWxpdGllcyAqLworCiAJdW5zaWduZWQgbG9uZwkJcHJpdmF0ZVswXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogCkBAIC00MDcsNiArNDE2LDcgQEAKIAlyZXR1cm4gKHZvaWQgKilob3N0LT5wcml2YXRlOwogfQogCitleHRlcm4gdm9pZCBzZGhjaV9jYXJkX2RldGVjdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CiBleHRlcm4gaW50IHNkaGNpX2FkZF9ob3N0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKIGV4dGVybiB2b2lkIHNkaGNpX3JlbW92ZV9ob3N0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgZGVhZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZHJpY29oX2NzLmMKaW5kZXggZTc1MDdhZi4uN2FhNjViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZHJpY29oX2NzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZHJpY29oX2NzLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggZjgyMTBiZi4uMWUyY2JmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC0zMTEsMTUgKzMxMSwxNyBAQAogCXNlbGVjdCBNVERfQkxLREVWUwogCXNlbGVjdCBNVERfTkFORF9FQ0MKIAloZWxwCi0JICBUaGlzIGVuYWJsZXMgbmV3IGFuZCB2ZXJ5IEVYUEVSTUVOVEFMIHN1cHBvcnQgZm9yIFNtYXJ0TWVkaWEveEQKKwkgIFRoaXMgZW5hYmxlcyBFWFBFUklNRU5UQUwgUi9XIHN1cHBvcnQgZm9yIFNtYXJ0TWVkaWEveEQKIAkgIEZUTCAoRmxhc2ggdHJhbnNsYXRpb24gbGF5ZXIpLgotCSAgV3JpdGUgc3VwcG9ydCBpc24ndCB5ZXQgd2VsbCB0ZXN0ZWQsIHRoZXJlZm9yZSB0aGlzIGNvZGUgSVMgbGlrZWx5IHRvCi0JICBlYXQgeW91ciBjYXJkLCBzbyBwbGVhc2UgZG9uJ3QgdXNlIGl0IHRvZ2V0aGVyIHdpdGggdmFsdWFibGUgZGF0YS4KLQkgIFVzZSByZWFkb25seSBkcml2ZXIgKENPTkZJR19TU0ZEQykgaW5zdGVhZC4KKwkgIFdyaXRlIHN1cHBvcnQgaXMgb25seSBsaWdodGx5IHRlc3RlZCwgdGhlcmVmb3JlIHRoaXMgZHJpdmVyCisJICBpc24ndCByZWNvbW1lbmRlZCB0byB1c2Ugd2l0aCB2YWx1YWJsZSBkYXRhIChhbnl3YXkgaWYgeW91IGhhdmUKKwkgIHZhbHVhYmxlIGRhdGEsIGRvIGJhY2t1cHMgcmVnYXJkbGVzcyBvZiBzb2Z0d2FyZS9oYXJkd2FyZSB5b3UKKwkgIHVzZSwgYmVjYXVzZSB5b3UgbmV2ZXIga25vdyB3aGF0IHdpbGwgZWF0IHlvdXIgZGF0YS4uLikKKwkgIElmIHlvdSBvbmx5IG5lZWQgUi9PIGFjY2VzcywgeW91IGNhbiB1c2Ugb2xkZXIgUi9PIGRyaXZlcgorCSAgKENPTkZJR19TU0ZEQykKIAogY29uZmlnIE1URF9PT1BTCiAJdHJpc3RhdGUgIkxvZyBwYW5pYy9vb3BzIHRvIGFuIE1URCBidWZmZXIiCi0JZGVwZW5kcyBvbiBNVEQKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgcGFuaWMgYW5kIG9vcHMgbWVzc2FnZXMgdG8gYmUgbG9nZ2VkIHRvIGEgY2lyY3VsYXIKIAkgIGJ1ZmZlciBpbiBhIGZsYXNoIHBhcnRpdGlvbiB3aGVyZSBpdCBjYW4gYmUgcmVhZCBiYWNrIGF0IHNvbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2Fmcy5jIGIvZHJpdmVycy9tdGQvYWZzLmMKaW5kZXggY2VjN2FiOS4uMzAyMzcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvYWZzLmMKKysrIGIvZHJpdmVycy9tdGQvYWZzLmMKQEAgLTIsNyArMiw3IEBACiAKICAgICBkcml2ZXJzL210ZC9hZnMuYzogQVJNIEZsYXNoIExheW91dC9QYXJ0aXRpb25pbmcKIAotICAgIENvcHlyaWdodCAoQykgMjAwMCBBUk0gTGltaXRlZAorICAgIENvcHlyaWdodCDCqSAyMDAwIEFSTSBMaW1pdGVkCiAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwppbmRleCA2MmYzZWE5Li45ZTJiN2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC94aXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAKIC8qICNkZWZpbmUgQ01EU0VUMDAwMV9ESVNBQkxFX0VSQVNFX1NVU1BFTkRfT05fV1JJVEUgKi8KQEAgLTYzLDYgKzYyLDggQEAKIHN0YXRpYyB2b2lkIGNmaV9pbnRlbGV4dF9zeW5jIChzdHJ1Y3QgbXRkX2luZm8gKik7CiBzdGF0aWMgaW50IGNmaV9pbnRlbGV4dF9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pOwogc3RhdGljIGludCBjZmlfaW50ZWxleHRfdW5sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pOworc3RhdGljIGludCBjZmlfaW50ZWxleHRfaXNfbG9ja2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJCSAgdWludDY0X3QgbGVuKTsKICNpZmRlZiBDT05GSUdfTVREX09UUAogc3RhdGljIGludCBjZmlfaW50ZWxleHRfcmVhZF9mYWN0X3Byb3RfcmVnIChzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCB1X2NoYXIgKik7CiBzdGF0aWMgaW50IGNmaV9pbnRlbGV4dF9yZWFkX3VzZXJfcHJvdF9yZWcgKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIHVfY2hhciAqKTsKQEAgLTQ0OCw2ICs0NDksNyBAQAogCW10ZC0+c3luYyAgICA9IGNmaV9pbnRlbGV4dF9zeW5jOwogCW10ZC0+bG9jayAgICA9IGNmaV9pbnRlbGV4dF9sb2NrOwogCW10ZC0+dW5sb2NrICA9IGNmaV9pbnRlbGV4dF91bmxvY2s7CisJbXRkLT5pc19sb2NrZWQgPSBjZmlfaW50ZWxleHRfaXNfbG9ja2VkOwogCW10ZC0+c3VzcGVuZCA9IGNmaV9pbnRlbGV4dF9zdXNwZW5kOwogCW10ZC0+cmVzdW1lICA9IGNmaV9pbnRlbGV4dF9yZXN1bWU7CiAJbXRkLT5mbGFncyAgID0gTVREX0NBUF9OT1JGTEFTSDsKQEAgLTcxNyw3ICs3MTksNyBAQAogCQljaGlwID0gJm5ld2NmaS0+Y2hpcHNbMF07CiAJCWZvciAoaSA9IDA7IGkgPCBjZmktPm51bWNoaXBzOyBpKyspIHsKIAkJCXNoYXJlZFtpXS53cml0aW5nID0gc2hhcmVkW2ldLmVyYXNpbmcgPSBOVUxMOwotCQkJc3Bpbl9sb2NrX2luaXQoJnNoYXJlZFtpXS5sb2NrKTsKKwkJCW11dGV4X2luaXQoJnNoYXJlZFtpXS5sb2NrKTsKIAkJCWZvciAoaiA9IDA7IGogPCBudW1wYXJ0czsgaisrKSB7CiAJCQkJKmNoaXAgPSBjZmktPmNoaXBzW2ldOwogCQkJCWNoaXAtPnN0YXJ0ICs9IGogPDwgcGFydHNoaWZ0OwpAQCAtODg2LDcgKzg4OCw3IEBACiAJCSAqLwogCQlzdHJ1Y3QgZmxjaGlwX3NoYXJlZCAqc2hhcmVkID0gY2hpcC0+cHJpdjsKIAkJc3RydWN0IGZsY2hpcCAqY29udGVuZGVyOwotCQlzcGluX2xvY2soJnNoYXJlZC0+bG9jayk7CisJCW11dGV4X2xvY2soJnNoYXJlZC0+bG9jayk7CiAJCWNvbnRlbmRlciA9IHNoYXJlZC0+d3JpdGluZzsKIAkJaWYgKGNvbnRlbmRlciAmJiBjb250ZW5kZXIgIT0gY2hpcCkgewogCQkJLyoKQEAgLTg5OSw3ICs5MDEsNyBAQAogCQkJICogZ2V0X2NoaXAgcmV0dXJucyBzdWNjZXNzIHdlJ3JlIGNsZWFyIHRvIGdvIGFoZWFkLgogCQkJICovCiAJCQlyZXQgPSBtdXRleF90cnlsb2NrKCZjb250ZW5kZXItPm11dGV4KTsKLQkJCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZzaGFyZWQtPmxvY2spOwogCQkJaWYgKCFyZXQpCiAJCQkJZ290byByZXRyeTsKIAkJCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOwpAQCAtOTE0LDcgKzkxNiw3IEBACiAJCQkJbXV0ZXhfdW5sb2NrKCZjb250ZW5kZXItPm11dGV4KTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQotCQkJc3Bpbl9sb2NrKCZzaGFyZWQtPmxvY2spOworCQkJbXV0ZXhfbG9jaygmc2hhcmVkLT5sb2NrKTsKIAogCQkJLyogV2Ugc2hvdWxkIG5vdCBvd24gY2hpcCBpZiBpdCBpcyBhbHJlYWR5CiAJCQkgKiBpbiBGTF9TWU5DSU5HIHN0YXRlLiBQdXQgY29udGVuZGVyIGFuZCByZXRyeS4gKi8KQEAgLTkzMCw3ICs5MzIsNyBAQAogCQkgKiBvbiB0aGlzIGNoaXAuIFNsZWVwLiAqLwogCQlpZiAobW9kZSA9PSBGTF9FUkFTSU5HICYmIHNoYXJlZC0+ZXJhc2luZwogCQkgICAgJiYgc2hhcmVkLT5lcmFzaW5nLT5vbGRzdGF0ZSA9PSBGTF9FUkFTSU5HKSB7Ci0JCQlzcGluX3VubG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmc2hhcmVkLT5sb2NrKTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CkBAIC05NDQsNyArOTQ2LDcgQEAKIAkJc2hhcmVkLT53cml0aW5nID0gY2hpcDsKIAkJaWYgKG1vZGUgPT0gRkxfRVJBU0lORykKIAkJCXNoYXJlZC0+ZXJhc2luZyA9IGNoaXA7Ci0JCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQltdXRleF91bmxvY2soJnNoYXJlZC0+bG9jayk7CiAJfQogCXJldCA9IGNoaXBfcmVhZHkobWFwLCBjaGlwLCBhZHIsIG1vZGUpOwogCWlmIChyZXQgPT0gLUVBR0FJTikKQEAgLTk1OSw3ICs5NjEsNyBAQAogCiAJaWYgKGNoaXAtPnByaXYpIHsKIAkJc3RydWN0IGZsY2hpcF9zaGFyZWQgKnNoYXJlZCA9IGNoaXAtPnByaXY7Ci0JCXNwaW5fbG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc2hhcmVkLT5sb2NrKTsKIAkJaWYgKHNoYXJlZC0+d3JpdGluZyA9PSBjaGlwICYmIGNoaXAtPm9sZHN0YXRlID09IEZMX1JFQURZKSB7CiAJCQkvKiBXZSBvd24gdGhlIGFiaWxpdHkgdG8gd3JpdGUsIGJ1dCB3ZSdyZSBkb25lICovCiAJCQlzaGFyZWQtPndyaXRpbmcgPSBzaGFyZWQtPmVyYXNpbmc7CkBAIC05NjcsNyArOTY5LDcgQEAKIAkJCQkvKiBnaXZlIGJhY2sgb3duZXJzaGlwIHRvIHdobyB3ZSBsb2FuZWQgaXQgZnJvbSAqLwogCQkJCXN0cnVjdCBmbGNoaXAgKmxvYW5lciA9IHNoYXJlZC0+d3JpdGluZzsKIAkJCQltdXRleF9sb2NrKCZsb2FuZXItPm11dGV4KTsKLQkJCQlzcGluX3VubG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJCQltdXRleF91bmxvY2soJnNoYXJlZC0+bG9jayk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CiAJCQkJcHV0X2NoaXAobWFwLCBsb2FuZXIsIGxvYW5lci0+c3RhcnQpOwogCQkJCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKQEAgLTk4NSwxMSArOTg3LDExIEBACiAJCQkgKiBEb24ndCBsZXQgdGhlIHN3aXRjaCBiZWxvdyBtZXNzIHRoaW5ncyB1cCBzaW5jZQogCQkJICogd2UgZG9uJ3QgaGF2ZSBvd25lcnNoaXAgdG8gcmVzdW1lIGFueXRoaW5nLgogCQkJICovCi0JCQlzcGluX3VubG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmc2hhcmVkLT5sb2NrKTsKIAkJCXdha2VfdXAoJmNoaXAtPndxKTsKIAkJCXJldHVybjsKIAkJfQotCQlzcGluX3VubG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZzaGFyZWQtPmxvY2spOwogCX0KIAogCXN3aXRjaChjaGlwLT5vbGRzdGF0ZSkgewpAQCAtMjEzOSw2ICsyMTQxLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBjZmlfaW50ZWxleHRfaXNfbG9ja2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJCSAgdWludDY0X3QgbGVuKQoreworCXJldHVybiBjZmlfdmFyc2l6ZV9mcm9iKG10ZCwgZG9fZ2V0bG9ja3N0YXR1c19vbmVibG9jaywKKwkJCQlvZnMsIGxlbiwgTlVMTCkgPyAxIDogMDsKK30KKwogI2lmZGVmIENPTkZJR19NVERfT1RQCiAKIHR5cGVkZWYgaW50ICgqb3RwX29wX3QpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwppbmRleCBkODEwNzllLi4zZTZjNDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NmaS5oPgpAQCAtNDE3LDE2ICs0MTYsMjYgQEAKIAkJCSAqLwogCQkJY2ZpX2ZpeHVwX21ham9yX21pbm9yKGNmaSwgZXh0cCk7CiAKKwkJCS8qCisJCQkgKiBWYWxpZCBwcmltYXJ5IGV4dGVuc2lvbiB2ZXJzaW9ucyBhcmU6IDEuMCwgMS4xLCAxLjIsIDEuMywgMS40CisJCQkgKiBzZWU6IGh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL0Rvd25sb2FkYWJsZUFzc2V0cy9jZmlfcjIwLnBkZiwgcGFnZSAxOQorCQkJICogICAgICBodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS9Eb3dubG9hZGFibGVBc3NldHMvY2ZpXzEwMF8yMDAxMTIwMS5wZGYKKwkJCSAqICAgICAgaHR0cDovL3d3dy5zcGFuc2lvbi5jb20vU3VwcG9ydC9EYXRhc2hlZXRzL3MyOXdzLXBfMDBfYTEyX2UucGRmCisJCQkgKi8KIAkJCWlmIChleHRwLT5NYWpvclZlcnNpb24gIT0gJzEnIHx8Ci0JCQkgICAgKGV4dHAtPk1pbm9yVmVyc2lvbiA8ICcwJyB8fCBleHRwLT5NaW5vclZlcnNpb24gPiAnNCcpKSB7CisJCQkgICAgKGV4dHAtPk1ham9yVmVyc2lvbiA9PSAnMScgJiYgKGV4dHAtPk1pbm9yVmVyc2lvbiA8ICcwJyB8fCBleHRwLT5NaW5vclZlcnNpb24gPiAnNCcpKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiICBVbmtub3duIEFtZC9GdWppdHN1IEV4dGVuZGVkIFF1ZXJ5ICIKLQkJCQkgICAgICAgInZlcnNpb24gJWMuJWMuXG4iLCAgZXh0cC0+TWFqb3JWZXJzaW9uLAotCQkJCSAgICAgICBleHRwLT5NaW5vclZlcnNpb24pOworCQkJCSAgICAgICAidmVyc2lvbiAlYy4lYyAoJSMwMngvJSMwMngpLlxuIiwKKwkJCQkgICAgICAgZXh0cC0+TWFqb3JWZXJzaW9uLCBleHRwLT5NaW5vclZlcnNpb24sCisJCQkJICAgICAgIGV4dHAtPk1ham9yVmVyc2lvbiwgZXh0cC0+TWlub3JWZXJzaW9uKTsKIAkJCQlrZnJlZShleHRwKTsKIAkJCQlrZnJlZShtdGQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQogCisJCQlwcmludGsoS0VSTl9JTkZPICIgIEFtZC9GdWppdHN1IEV4dGVuZGVkIFF1ZXJ5IHZlcnNpb24gJWMuJWMuXG4iLAorCQkJICAgICAgIGV4dHAtPk1ham9yVmVyc2lvbiwgZXh0cC0+TWlub3JWZXJzaW9uKTsKKwogCQkJLyogSW5zdGFsbCBvdXIgb3duIHByaXZhdGUgaW5mbyBzdHJ1Y3R1cmUgKi8KIAkJCWNmaS0+Y21kc2V0X3ByaXYgPSBleHRwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMjAuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCmluZGV4IGU1NGU4YzEuLjMxNGFmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jZmkuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiAKIHN0YXRpYyBpbnQgY2ZpX3N0YWFfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCB1X2NoYXIgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCmluZGV4IGIyYWNkMzJmLi44ZjViOTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYwpAQCAtMjM1LDkgKzIzNSw5IEBACiAJY2ZpX3FyeV9tb2RlX29mZihiYXNlLCBtYXAsIGNmaSk7CiAJeGlwX2FsbG93ZWQoYmFzZSwgbWFwKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlZCB4JWQgZGV2aWNlcyBhdCAweCV4IGluICVkLWJpdCBiYW5rXG4iLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlZCB4JWQgZGV2aWNlcyBhdCAweCV4IGluICVkLWJpdCBiYW5rLiBNYW51ZmFjdHVyZXIgSUQgJSMwOHggQ2hpcCBJRCAlIzA4eFxuIiwKIAkgICAgICAgbWFwLT5uYW1lLCBjZmktPmludGVybGVhdmUsIGNmaS0+ZGV2aWNlX3R5cGUqOCwgYmFzZSwKLQkgICAgICAgbWFwLT5iYW5rd2lkdGgqOCk7CisJICAgICAgIG1hcC0+YmFua3dpZHRoKjgsIGNmaS0+bWZyLCBjZmktPmlkKTsKIAogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMKaW5kZXggZDdjMmM2Ny4uZTUwM2IyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX3V0aWwuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiBpbnQgX194aXByYW0gY2ZpX3FyeV9wcmVzZW50KHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBiYXNlLAogCQkJICAgICBzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NoaXByZWcuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NoaXByZWcuYwppbmRleCBjODU3NjA5Li5kYTFmOTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jaGlwcmVnLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2hpcHJlZy5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNoaXBfZHJ2c19sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoY2hpcF9kcnZzX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX2Fic2VudC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX2Fic2VudC5jCmluZGV4IDQ5NGQzMGQuLmYyYjg3MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9hYnNlbnQuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfYWJzZW50LmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKIHN0YXRpYyBpbnQgbWFwX2Fic2VudF9yZWFkIChzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCB1X2NoYXIgKik7CiBzdGF0aWMgaW50IG1hcF9hYnNlbnRfd3JpdGUgKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIGNvbnN0IHVfY2hhciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYwppbmRleCA2YmRjNTBjLi42NzY0MGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiAKIHN0YXRpYyBpbnQgbWFwcmFtX3JlYWQgKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIHVfY2hhciAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYwppbmRleCAwNzYwOTBhLi41OTNmNzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiBzdGF0aWMgaW50IG1hcHJvbV9yZWFkIChzdHJ1Y3QgbXRkX2luZm8gKiwgbG9mZl90LCBzaXplX3QsIHNpemVfdCAqLCB1X2NoYXIgKik7CiBzdGF0aWMgaW50IG1hcHJvbV93cml0ZSAoc3RydWN0IG10ZF9pbmZvICosIGxvZmZfdCwgc2l6ZV90LCBzaXplX3QgKiwgY29uc3QgdV9jaGFyICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYyBiL2RyaXZlcnMvbXRkL2NtZGxpbmVwYXJ0LmMKaW5kZXggMTQ3OWRhNi4uZTc5MGYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY21kbGluZXBhcnQuYworKysgYi9kcml2ZXJzL210ZC9jbWRsaW5lcGFydC5jCkBAIC0xLDcgKzEsMjIgQEAKIC8qCiAgKiBSZWFkIGZsYXNoIHBhcnRpdGlvbiB0YWJsZSBmcm9tIGNvbW1hbmQgbGluZQogICoKLSAqIENvcHlyaWdodCAyMDAyIFNZU0dPIFJlYWwtVGltZSBTb2x1dGlvbnMgR21iSAorICogQ29weXJpZ2h0IMKpIDIwMDIgICAgICBTWVNHTyBSZWFsLVRpbWUgU29sdXRpb25zIEdtYkgKKyAqIENvcHlyaWdodCDCqSAyMDAyLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKgogICogVGhlIGZvcm1hdCBmb3IgdGhlIGNvbW1hbmQgbGluZSBpcyBhcyBmb2xsb3dzOgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY2VjYy5jCmluZGV4IGExOWNkYTUuLmE5OTgzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jZWNjLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2NlY2MuYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPiAvKiBmb3IgbWluKCkgaW4gb2xkZXIga2VybmVscyAqLwogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvZG9jMjAwMC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMKaW5kZXggNmU2MjkyMi4uZDM3NDYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jcHJvYmUuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9kb2MyMDAwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiAvKiBXaGVyZSB0byBsb29rIGZvciB0aGUgZGV2aWNlcz8gKi8KICNpZm5kZWYgQ09ORklHX01URF9ET0NQUk9CRV9BRERSRVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCA4MWU0OWE5Li5mOTA5NDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTE2LDYgKzE2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC02MzksOCArNjQxLDE4IEBACiAJeyAiYXQyNmRmMTYxYSIsIElORk8oMHgxZjQ2MDEsIDAsIDY0ICogMTAyNCwgMzIsIFNFQ1RfNEspIH0sCiAJeyAiYXQyNmRmMzIxIiwgIElORk8oMHgxZjQ3MDEsIDAsIDY0ICogMTAyNCwgNjQsIFNFQ1RfNEspIH0sCiAKKwkvKiBFT04gLS0gZW4yNXB4eCAqLworCXsgImVuMjVwMzIiLCBJTkZPKDB4MWMyMDE2LCAwLCA2NCAqIDEwMjQsICA2NCwgMCkgfSwKKwl7ICJlbjI1cDY0IiwgSU5GTygweDFjMjAxNywgMCwgNjQgKiAxMDI0LCAxMjgsIDApIH0sCisKKwkvKiBJbnRlbC9OdW1vbnl4IC0tIHh4eHMzM2IgKi8KKwl7ICIxNjBzMzNiIiwgIElORk8oMHg4OTg5MTEsIDAsIDY0ICogMTAyNCwgIDMyLCAwKSB9LAorCXsgIjMyMHMzM2IiLCAgSU5GTygweDg5ODkxMiwgMCwgNjQgKiAxMDI0LCAgNjQsIDApIH0sCisJeyAiNjQwczMzYiIsICBJTkZPKDB4ODk4OTEzLCAwLCA2NCAqIDEwMjQsIDEyOCwgMCkgfSwKKwogCS8qIE1hY3Jvbml4ICovCiAJeyAibXgyNWw0MDA1YSIsICBJTkZPKDB4YzIyMDEzLCAwLCA2NCAqIDEwMjQsICAgOCwgU0VDVF80SykgfSwKKwl7ICJteDI1bDgwMDUiLCAgIElORk8oMHhjMjIwMTQsIDAsIDY0ICogMTAyNCwgIDE2LCAwKSB9LAogCXsgIm14MjVsMzIwNWQiLCAgSU5GTygweGMyMjAxNiwgMCwgNjQgKiAxMDI0LCAgNjQsIDApIH0sCiAJeyAibXgyNWw2NDA1ZCIsICBJTkZPKDB4YzIyMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgMCkgfSwKIAl7ICJteDI1bDEyODA1ZCIsIElORk8oMHhjMjIwMTgsIDAsIDY0ICogMTAyNCwgMjU2LCAwKSB9LApAQCAtNjgwLDYgKzY5MiwxNiBAQAogCXsgIm0yNXA2NCIsICBJTkZPKDB4MjAyMDE3LCAgMCwgIDY0ICogMTAyNCwgMTI4LCAwKSB9LAogCXsgIm0yNXAxMjgiLCBJTkZPKDB4MjAyMDE4LCAgMCwgMjU2ICogMTAyNCwgIDY0LCAwKSB9LAogCisJeyAibTI1cDA1LW5vbmplZGVjIiwgIElORk8oMCwgMCwgIDMyICogMTAyNCwgICAyLCAwKSB9LAorCXsgIm0yNXAxMC1ub25qZWRlYyIsICBJTkZPKDAsIDAsICAzMiAqIDEwMjQsICAgNCwgMCkgfSwKKwl7ICJtMjVwMjAtbm9uamVkZWMiLCAgSU5GTygwLCAwLCAgNjQgKiAxMDI0LCAgIDQsIDApIH0sCisJeyAibTI1cDQwLW5vbmplZGVjIiwgIElORk8oMCwgMCwgIDY0ICogMTAyNCwgICA4LCAwKSB9LAorCXsgIm0yNXA4MC1ub25qZWRlYyIsICBJTkZPKDAsIDAsICA2NCAqIDEwMjQsICAxNiwgMCkgfSwKKwl7ICJtMjVwMTYtbm9uamVkZWMiLCAgSU5GTygwLCAwLCAgNjQgKiAxMDI0LCAgMzIsIDApIH0sCisJeyAibTI1cDMyLW5vbmplZGVjIiwgIElORk8oMCwgMCwgIDY0ICogMTAyNCwgIDY0LCAwKSB9LAorCXsgIm0yNXA2NC1ub25qZWRlYyIsICBJTkZPKDAsIDAsICA2NCAqIDEwMjQsIDEyOCwgMCkgfSwKKwl7ICJtMjVwMTI4LW5vbmplZGVjIiwgSU5GTygwLCAwLCAyNTYgKiAxMDI0LCAgNjQsIDApIH0sCisKIAl7ICJtNDVwZTEwIiwgSU5GTygweDIwNDAxMSwgIDAsIDY0ICogMTAyNCwgICAgMiwgMCkgfSwKIAl7ICJtNDVwZTgwIiwgSU5GTygweDIwNDAxNCwgIDAsIDY0ICogMTAyNCwgICAxNiwgMCkgfSwKIAl7ICJtNDVwZTE2IiwgSU5GTygweDIwNDAxNSwgIDAsIDY0ICogMTAyNCwgICAzMiwgMCkgfSwKQEAgLTY5NCw2ICs3MTYsNyBAQAogCXsgIncyNXg4MCIsIElORk8oMHhlZjMwMTQsIDAsIDY0ICogMTAyNCwgIDE2LCBTRUNUXzRLKSB9LAogCXsgIncyNXgxNiIsIElORk8oMHhlZjMwMTUsIDAsIDY0ICogMTAyNCwgIDMyLCBTRUNUXzRLKSB9LAogCXsgIncyNXgzMiIsIElORk8oMHhlZjMwMTYsIDAsIDY0ICogMTAyNCwgIDY0LCBTRUNUXzRLKSB9LAorCXsgIncyNXEzMiIsIElORk8oMHhlZjQwMTYsIDAsIDY0ICogMTAyNCwgIDY0LCBTRUNUXzRLKSB9LAogCXsgIncyNXg2NCIsIElORk8oMHhlZjMwMTcsIDAsIDY0ICogMTAyNCwgMTI4LCBTRUNUXzRLKSB9LAogCiAJLyogQ2F0YWx5c3QgLyBPbiBTZW1pY29uZHVjdG9yIC0tIG5vbi1KRURFQyAqLwpAQCAtNzIzLDcgKzc0Niw3IEBACiAJaWYgKHRtcCA8IDApIHsKIAkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiBlcnJvciAlZCByZWFkaW5nIEpFREVDIElEXG4iLAogCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgdG1wKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKHRtcCk7CiAJfQogCWplZGVjID0gaWRbMF07CiAJamVkZWMgPSBqZWRlYyA8PCA4OwpAQCAtNzMxLDE0ICs3NTQsNiBAQAogCWplZGVjID0gamVkZWMgPDwgODsKIAlqZWRlYyB8PSBpZFsyXTsKIAotCS8qCi0JICogU29tZSBjaGlwcyAobGlrZSBOdW1vbnl4IE0yNVA4MCkgaGF2ZSBKRURFQyBhbmQgbm9uLUpFREVDIHZhcmlhbnRzLAotCSAqIHdoaWNoIGRlcGVuZCBvbiB0ZWNobm9sb2d5IHByb2Nlc3MuIE9mZmljaWFsbHkgUkRJRCBjb21tYW5kIGRvZXNuJ3QKLQkgKiBleGlzdCBmb3Igbm9uLUpFREVDIGNoaXBzLCBidXQgZm9yIGNvbXBhdGliaWxpdHkgdGhleSByZXR1cm4gSUQgMC4KLQkgKi8KLQlpZiAoamVkZWMgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KIAlleHRfamVkZWMgPSBpZFszXSA8PCA4IHwgaWRbNF07CiAKIAlmb3IgKHRtcCA9IDA7IHRtcCA8IEFSUkFZX1NJWkUobTI1cF9pZHMpIC0gMTsgdG1wKyspIHsKQEAgLTc0OSw3ICs3NjQsNyBAQAogCQkJcmV0dXJuICZtMjVwX2lkc1t0bXBdOwogCQl9CiAJfQotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCiAKQEAgLTc5NCw5ICs4MDksOCBAQAogCQljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqamlkOwogCiAJCWppZCA9IGplZGVjX3Byb2JlKHNwaSk7Ci0JCWlmICghamlkKSB7Ci0JCQlkZXZfaW5mbygmc3BpLT5kZXYsICJub24tSkVERUMgdmFyaWFudCBvZiAlc1xuIiwKLQkJCQkgaWQtPm5hbWUpOworCQlpZiAoSVNfRVJSKGppZCkpIHsKKwkJCXJldHVybiBQVFJfRVJSKGppZCk7CiAJCX0gZWxzZSBpZiAoamlkICE9IGlkKSB7CiAJCQkvKgogCQkJICogSkVERUMga25vd3MgYmV0dGVyLCBzbyBvdmVyd3JpdGUgcGxhdGZvcm0gSUQuIFdlCkBAIC04MjYsMTEgKzg0MCwxMiBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGZsYXNoKTsKIAogCS8qCi0JICogQXRtZWwgYW5kIFNTVCBzZXJpYWwgZmxhc2ggdGVuZCB0byBwb3dlcgorCSAqIEF0bWVsLCBTU1QgYW5kIEludGVsL051bW9ueXggc2VyaWFsIGZsYXNoIHRlbmQgdG8gcG93ZXIKIAkgKiB1cCB3aXRoIHRoZSBzb2Z0d2FyZSBwcm90ZWN0aW9uIGJpdHMgc2V0CiAJICovCiAKIAlpZiAoaW5mby0+amVkZWNfaWQgPj4gMTYgPT0gMHgxZiB8fAorCSAgICBpbmZvLT5qZWRlY19pZCA+PiAxNiA9PSAweDg5IHx8CiAJICAgIGluZm8tPmplZGVjX2lkID4+IDE2ID09IDB4YmYpIHsKIAkJd3JpdGVfZW5hYmxlKGZsYXNoKTsKIAkJd3JpdGVfc3IoZmxhc2gsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRfZGF0YWZsYXNoLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwppbmRleCAxOTgxNzQwLi5jNTAxNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZF9kYXRhZmxhc2guYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZGF0YWZsYXNoX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCiB7Ci0Jc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IChzdHJ1Y3QgZGF0YWZsYXNoICopbXRkLT5wcml2OworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSBtdGQtPnByaXY7CiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaSA9IHByaXYtPnNwaTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXggPSB7IC50eF9kbWEgPSAwLCB9OwogCXN0cnVjdCBzcGlfbWVzc2FnZQltc2c7CkBAIC0yMzEsNyArMjMxLDcgQEAKIHN0YXRpYyBpbnQgZGF0YWZsYXNoX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCQkJICAgICAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhbMl0gPSB7IHsgLnR4X2RtYSA9IDAsIH0sIH07CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKIAl1bnNpZ25lZCBpbnQJCWFkZHI7CkBAIC0zMDQsNyArMzA0LDcgQEAKIHN0YXRpYyBpbnQgZGF0YWZsYXNoX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCiAJCQkJc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCiB7Ci0Jc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IChzdHJ1Y3QgZGF0YWZsYXNoICopbXRkLT5wcml2OworCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSBtdGQtPnByaXY7CiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaSA9IHByaXYtPnNwaTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhbMl0gPSB7IHsgLnR4X2RtYSA9IDAsIH0sIH07CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKQEAgLTUxNSw3ICs1MTUsNyBAQAogc3RhdGljIGludCBkYXRhZmxhc2hfcmVhZF9mYWN0X290cChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKIAkJbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gKHN0cnVjdCBkYXRhZmxhc2ggKiltdGQtPnByaXY7CisJc3RydWN0IGRhdGFmbGFzaAkqcHJpdiA9IG10ZC0+cHJpdjsKIAlpbnQJCQlzdGF0dXM7CiAKIAkvKiA2NCBieXRlcywgZnJvbSAwLi42MyAuLi4gc3RhcnQgYXQgNjQgb24tY2hpcCAqLwpAQCAtNTMyLDcgKzUzMiw3IEBACiBzdGF0aWMgaW50IGRhdGFmbGFzaF9yZWFkX3VzZXJfb3RwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogCQlsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogewotCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gbXRkLT5wcml2OwogCWludAkJCXN0YXR1czsKIAogCS8qIDY0IGJ5dGVzLCBmcm9tIDAuLjYzIC4uLiBzdGFydCBhdCAwIG9uLWNoaXAgKi8KQEAgLTU1Myw3ICs1NTMsNyBAQAogCWNvbnN0IHNpemVfdAkJbCA9IDQgKyA2NDsKIAl1aW50OF90CQkJKnNjcmF0Y2g7CiAJc3RydWN0IHNwaV90cmFuc2Zlcgl0OwotCXN0cnVjdCBkYXRhZmxhc2gJKnByaXYgPSAoc3RydWN0IGRhdGFmbGFzaCAqKW10ZC0+cHJpdjsKKwlzdHJ1Y3QgZGF0YWZsYXNoCSpwcml2ID0gbXRkLT5wcml2OwogCWludAkJCXN0YXR1czsKIAogCWlmIChsZW4gPiA2NCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jCmluZGV4IGZjZTVmZjcuLjI2YTZlODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkcmFtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCmluZGV4IGZjOGVhMGEuLmVmMGFiYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwpAQCAtOTgsNyArOTgsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wbWM1NTEuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnBtYzU1MWxpc3Q7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jCmluZGV4IGFiNWQ4Y2QuLjY4NDI0N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCQkJCQkgIHBhcnRzLCBucl9wYXJ0cyk7CiAJCX0KIAotCX0gZWxzZSBpZiAoZGF0YS0+bnJfcGFydHMpIHsKKwl9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS0+bnJfcGFydHMpIHsKIAkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiaWdub3JpbmcgJWQgZGVmYXVsdCBwYXJ0aXRpb25zIG9uICVzXG4iLAogCQkJIGRhdGEtPm5yX3BhcnRzLCBkYXRhLT5uYW1lKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9mdGwuYyBiL2RyaXZlcnMvbXRkL2Z0bC5jCmluZGV4IDYyZGE5ZWIuLjRkNmE2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2Z0bC5jCisrKyBiL2RyaXZlcnMvbXRkL2Z0bC5jCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKICAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcwotICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICAgIGFyZSBDb3B5cmlnaHQgwqkgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQogICAgIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCmluZGV4IDAxNWE3ZmUuLmQ3NTkyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCkBAIC0xLDExICsxLDExIEBACiAvKgogICogaW5mdGxjb3JlLmMgLS0gTGludXggZHJpdmVyIGZvciBJbnZlcnNlIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyIChJTkZUTCkKICAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKiBDb3B5cmlnaHQgwqkgMjAwMiwgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKICAqCiAgKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBuZnRsY29yZS5jIGNvZGUgd2hpY2ggaXM6Ci0gKiAoYykgMTk5OSBNYWNoaW5lIFZpc2lvbiBIb2xkaW5ncywgSW5jLgotICogQXV0aG9yOiBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiBDb3B5cmlnaHQgwqkgMTk5OSBNYWNoaW5lIFZpc2lvbiBIb2xkaW5ncywgSW5jLgorICogQ29weXJpZ2h0IMKpIDE5OTkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jCmluZGV4IDhmOTg4ZDcuLjEwNDA1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsbW91bnQuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bG1vdW50LmMKQEAgLTIsMTEgKzIsMTEgQEAKICAqIGluZnRsbW91bnQuYyAtLSBJTkZUTCBtb3VudCBjb2RlIHdpdGggZXh0ZW5zaXZlIGNoZWNrcy4KICAqCiAgKiBBdXRob3I6IEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCi0gKiAoQykgQ29weXJpZ2h0IDIwMDItMjAwMywgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIENvcHlyaWdodCDCqSAyMDAyLTIwMDMsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCiAgKgogICogQmFzZWQgaGVhdmlseSBvbiB0aGUgbmZ0bG1vdW50LmMgY29kZSB3aGljaCBpczoKICAqIEF1dGhvcjogRmFicmljZSBCZWxsYXJkIChmYWJyaWNlLmJlbGxhcmRAbmV0Z2VtLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMCBOZXRnZW0gUy5BLgorICogQ29weXJpZ2h0IMKpIDIwMDAgTmV0Z2VtIFMuQS4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25mdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvaW5mdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKIC8qCiAgKiBmaW5kX2Jvb3RfcmVjb3JkOiBGaW5kIHRoZSBJTkZUTCBNZWRpYSBIZWFkZXIgYW5kIGl0cyBTcGFyZSBjb3B5IHdoaWNoCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9scGRkci9scGRkcl9jbWRzLmMgYi9kcml2ZXJzL210ZC9scGRkci9scGRkcl9jbWRzLmMKaW5kZXggZmVjZTViZS4uMDRmZGZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbHBkZHIvbHBkZHJfY21kcy5jCisrKyBiL2RyaXZlcnMvbXRkL2xwZGRyL2xwZGRyX2NtZHMuYwpAQCAtOTgsNyArOTgsNyBAQAogCW51bWNoaXBzID0gbHBkZHItPm51bWNoaXBzIC8gbHBkZHItPnFpbmZvLT5IV1BhcnRzTnVtOwogCWZvciAoaSA9IDA7IGkgPCBudW1jaGlwczsgaSsrKSB7CiAJCXNoYXJlZFtpXS53cml0aW5nID0gc2hhcmVkW2ldLmVyYXNpbmcgPSBOVUxMOwotCQlzcGluX2xvY2tfaW5pdCgmc2hhcmVkW2ldLmxvY2spOworCQltdXRleF9pbml0KCZzaGFyZWRbaV0ubG9jayk7CiAJCWZvciAoaiA9IDA7IGogPCBscGRkci0+cWluZm8tPkhXUGFydHNOdW07IGorKykgewogCQkJKmNoaXAgPSBscGRkci0+Y2hpcHNbaV07CiAJCQljaGlwLT5zdGFydCArPSBqIDw8IGxwZGRyLT5jaGlwc2hpZnQ7CkBAIC0yMTcsNyArMjE3LDcgQEAKIAkJICovCiAJCXN0cnVjdCBmbGNoaXBfc2hhcmVkICpzaGFyZWQgPSBjaGlwLT5wcml2OwogCQlzdHJ1Y3QgZmxjaGlwICpjb250ZW5kZXI7Ci0JCXNwaW5fbG9jaygmc2hhcmVkLT5sb2NrKTsKKwkJbXV0ZXhfbG9jaygmc2hhcmVkLT5sb2NrKTsKIAkJY29udGVuZGVyID0gc2hhcmVkLT53cml0aW5nOwogCQlpZiAoY29udGVuZGVyICYmIGNvbnRlbmRlciAhPSBjaGlwKSB7CiAJCQkvKgpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQkgKiBnZXRfY2hpcCByZXR1cm5zIHN1Y2Nlc3Mgd2UncmUgY2xlYXIgdG8gZ28gYWhlYWQuCiAJCQkgKi8KIAkJCXJldCA9IG11dGV4X3RyeWxvY2soJmNvbnRlbmRlci0+bXV0ZXgpOwotCQkJc3Bpbl91bmxvY2soJnNoYXJlZC0+bG9jayk7CisJCQltdXRleF91bmxvY2soJnNoYXJlZC0+bG9jayk7CiAJCQlpZiAoIXJldCkKIAkJCQlnb3RvIHJldHJ5OwogCQkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAkJCQltdXRleF91bmxvY2soJmNvbnRlbmRlci0+bXV0ZXgpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9Ci0JCQlzcGluX2xvY2soJnNoYXJlZC0+bG9jayk7CisJCQltdXRleF9sb2NrKCZzaGFyZWQtPmxvY2spOwogCiAJCQkvKiBXZSBzaG91bGQgbm90IG93biBjaGlwIGlmIGl0IGlzIGFscmVhZHkgaW4gRkxfU1lOQ0lORwogCQkJICogc3RhdGUuIFB1dCBjb250ZW5kZXIgYW5kIHJldHJ5LiAqLwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCSAgIE11c3Qgc2xlZXAgaW4gc3VjaCBhIGNhc2UuICovCiAJCWlmIChtb2RlID09IEZMX0VSQVNJTkcgJiYgc2hhcmVkLT5lcmFzaW5nCiAJCSAgICAmJiBzaGFyZWQtPmVyYXNpbmctPm9sZHN0YXRlID09IEZMX0VSQVNJTkcpIHsKLQkJCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZzaGFyZWQtPmxvY2spOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQkJYWRkX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7CiAJCQltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCQlzaGFyZWQtPndyaXRpbmcgPSBjaGlwOwogCQlpZiAobW9kZSA9PSBGTF9FUkFTSU5HKQogCQkJc2hhcmVkLT5lcmFzaW5nID0gY2hpcDsKLQkJc3Bpbl91bmxvY2soJnNoYXJlZC0+bG9jayk7CisJCW11dGV4X3VubG9jaygmc2hhcmVkLT5sb2NrKTsKIAl9CiAKIAlyZXQgPSBjaGlwX3JlYWR5KG1hcCwgY2hpcCwgbW9kZSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIHsKIAlpZiAoY2hpcC0+cHJpdikgewogCQlzdHJ1Y3QgZmxjaGlwX3NoYXJlZCAqc2hhcmVkID0gY2hpcC0+cHJpdjsKLQkJc3Bpbl9sb2NrKCZzaGFyZWQtPmxvY2spOworCQltdXRleF9sb2NrKCZzaGFyZWQtPmxvY2spOwogCQlpZiAoc2hhcmVkLT53cml0aW5nID09IGNoaXAgJiYgY2hpcC0+b2xkc3RhdGUgPT0gRkxfUkVBRFkpIHsKIAkJCS8qIFdlIG93biB0aGUgYWJpbGl0eSB0byB3cml0ZSwgYnV0IHdlJ3JlIGRvbmUgKi8KIAkJCXNoYXJlZC0+d3JpdGluZyA9IHNoYXJlZC0+ZXJhc2luZzsKQEAgLTM1Niw3ICszNTYsNyBAQAogCQkJCS8qIGdpdmUgYmFjayB0aGUgb3duZXJzaGlwICovCiAJCQkJc3RydWN0IGZsY2hpcCAqbG9hbmVyID0gc2hhcmVkLT53cml0aW5nOwogCQkJCW11dGV4X2xvY2soJmxvYW5lci0+bXV0ZXgpOwotCQkJCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQkJCW11dGV4X3VubG9jaygmc2hhcmVkLT5sb2NrKTsKIAkJCQltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKIAkJCQlwdXRfY2hpcChtYXAsIGxvYW5lcik7CiAJCQkJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwpAQCAtMzc0LDExICszNzQsMTEgQEAKIAkJCSAqIERvbid0IGxldCB0aGUgc3dpdGNoIGJlbG93IG1lc3MgdGhpbmdzIHVwIHNpbmNlCiAJCQkgKiB3ZSBkb24ndCBoYXZlIG93bmVyc2hpcCB0byByZXN1bWUgYW55dGhpbmcuCiAJCQkgKi8KLQkJCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZzaGFyZWQtPmxvY2spOwogCQkJd2FrZV91cCgmY2hpcC0+d3EpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZzaGFyZWQtPmxvY2spOworCQltdXRleF91bmxvY2soJnNoYXJlZC0+bG9jayk7CiAJfQogCiAJc3dpdGNoIChjaGlwLT5vbGRzdGF0ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDY2MjlkMDkuLjcwMWQ5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTMxOSwxNCArMzE5LDYgQEAKIAkgIE1hcHBpbmcgZm9yIHRoZSBGbGFnYSBkaWdpdGFsIG1vZHVsZS4gSWYgeW91IGRvbid0IGhhdmUgb25lLCBpZ25vcmUKIAkgIHRoaXMgc2V0dGluZy4KIAotY29uZmlnIE1URF9SRURXT09ECi0JdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2VzIG1hcHBlZCBvbiBJQk0gUmVkd29vZCIKLQlkZXBlbmRzIG9uIE1URF9DRkkKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIElCTQotCSAgUmVkd29vZCBib2FyZC4gSWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIGJvYXJkcyBhbmQgd291bGQgbGlrZSB0bwotCSAgdXNlIHRoZSBmbGFzaCBjaGlwcyBvbiBpdCwgc2F5ICdZJy4KLQogY29uZmlnIE1URF9TT0xVVElPTkVOR0lORQogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBIaXRhY2hpIFNvbHV0aW9uRW5naW5lIgogCWRlcGVuZHMgb24gU1VQRVJIICYmIFNPTFVUSU9OX0VOR0lORSAmJiBNVERfQ0ZJICYmIE1URF9SRURCT09UX1BBUlRTCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQppbmRleCBiYjAzNWNkLi5mMjE2YmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKQEAgLTQ0LDcgKzQ0LDYgQEAKIG9iai0kKENPTkZJR19NVERfRURCNzMxMikJKz0gZWRiNzMxMi5vCiBvYmotJChDT05GSUdfTVREX0lNUEE3KQkJKz0gaW1wYTcubwogb2JqLSQoQ09ORklHX01URF9GT1JUVU5FVCkJKz0gZm9ydHVuZXQubwotb2JqLSQoQ09ORklHX01URF9SRURXT09EKQkrPSByZWR3b29kLm8KIG9iai0kKENPTkZJR19NVERfVUNMSU5VWCkJKz0gdWNsaW51eC5vCiBvYmotJChDT05GSUdfTVREX05FVHRlbCkJKz0gbmV0dGVsLm8KIG9iai0kKENPTkZJR19NVERfU0NCMl9GTEFTSCkJKz0gc2NiMl9mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwppbmRleCBlMGE1ZTA0Li4xZjlmZGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCQkqZGVzdCsrID0gQllURTEoZGF0YSk7CiAJCXNyYyArPSAyOwogCQlsZW4gLT0gMjsKLSAgICAgICAgfQorCX0KIAogCWlmIChsZW4gPiAwKQogCQkqZGVzdCsrID0gQllURTAoZmxhc2hfcmVhZDE2KHNyYykpOwpAQCAtMTg1LDYgKzE4NSw4IEBACiB7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbzsKKwljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSBOVUxMOworCWludCBucl9wYXJ0cyA9IDA7CiAJaW50IGVyciA9IC0xOwogCiAJaWYgKCFwbGF0KQpAQCAtMjE4LDkgKzIyMCw5IEBACiAJICovCiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IDI7CiAJaW5mby0+bWFwLm5hbWUgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwotCWluZm8tPm1hcC5yZWFkID0gaXhwNHh4X3JlYWQxNiwKLQlpbmZvLT5tYXAud3JpdGUgPSBpeHA0eHhfcHJvYmVfd3JpdGUxNiwKLQlpbmZvLT5tYXAuY29weV9mcm9tID0gaXhwNHh4X2NvcHlfZnJvbSwKKwlpbmZvLT5tYXAucmVhZCA9IGl4cDR4eF9yZWFkMTY7CisJaW5mby0+bWFwLndyaXRlID0gaXhwNHh4X3Byb2JlX3dyaXRlMTY7CisJaW5mby0+bWFwLmNvcHlfZnJvbSA9IGl4cDR4eF9jb3B5X2Zyb207CiAKIAlpbmZvLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24oZGV2LT5yZXNvdXJjZS0+c3RhcnQsCiAJCQlyZXNvdXJjZV9zaXplKGRldi0+cmVzb3VyY2UpLApAQCAtMjQ4LDExICsyNTAsMjggQEAKIAlpbmZvLT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBVc2UgdGhlIGZhc3QgdmVyc2lvbiAqLwotCWluZm8tPm1hcC53cml0ZSA9IGl4cDR4eF93cml0ZTE2LAorCWluZm8tPm1hcC53cml0ZSA9IGl4cDR4eF93cml0ZTE2OwogCi0JZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwcm9iZXMsICZpbmZvLT5wYXJ0aXRpb25zLCBkZXYtPnJlc291cmNlLT5zdGFydCk7Ci0JaWYgKGVyciA+IDApIHsKLQkJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgaW5mby0+cGFydGl0aW9ucywgZXJyKTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcHJvYmVzLCAmaW5mby0+cGFydGl0aW9ucywKKwkJCQkJZGV2LT5yZXNvdXJjZS0+c3RhcnQpOworI2VuZGlmCisJaWYgKG5yX3BhcnRzID4gMCkgeworCQlwYXJ0X3R5cGUgPSAiZHluYW1pYyI7CisJfSBlbHNlIHsKKwkJaW5mby0+cGFydGl0aW9ucyA9IHBsYXQtPnBhcnRzOworCQlucl9wYXJ0cyA9IHBsYXQtPm5yX3BhcnRzOworCQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKKwl9CisJaWYgKG5yX3BhcnRzID09IDApIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJJWFA0eHggZmxhc2g6IG5vIHBhcnRpdGlvbiBpbmZvICIKKwkJCSJhdmFpbGFibGUsIHJlZ2lzdGVyaW5nIHdob2xlIGZsYXNoXG4iKTsKKwkJZXJyID0gYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIklYUDR4eCBmbGFzaDogdXNpbmcgJXMgcGFydGl0aW9uICIKKwkJCSJkZWZpbml0aW9uXG4iLCBwYXJ0X3R5cGUpOworCQllcnIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBpbmZvLT5wYXJ0aXRpb25zLCBucl9wYXJ0cyk7CisKIAkJaWYoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgcGFyc2UgcGFydGl0aW9uc1xuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKaW5kZXggZTY5OWU2YS4uZTljYTViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMTAzLDcgKzEwMiw3IEBACiB7CiAJc3RydWN0IHBjbWNpYW10ZF9kZXYgKmRldiA9IChzdHJ1Y3QgcGNtY2lhbXRkX2RldiAqKW1hcC0+bWFwX3ByaXZfMTsKIAl3aW5kb3dfaGFuZGxlX3Qgd2luID0gKHdpbmRvd19oYW5kbGVfdCltYXAtPm1hcF9wcml2XzI7Ci0JbWVtcmVxX3QgbXJxOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJaW50IHJldDsKIAogCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGRldi0+cF9kZXYpKSB7CkBAIC0xMTEsMTUgKzExMCwxNCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQltcnEuQ2FyZE9mZnNldCA9IHRvICYgfihkZXYtPndpbl9zaXplLTEpOwotCWlmKG1ycS5DYXJkT2Zmc2V0ICE9IGRldi0+b2Zmc2V0KSB7CisJb2Zmc2V0ID0gdG8gJiB+KGRldi0+d2luX3NpemUtMSk7CisJaWYgKG9mZnNldCAhPSBkZXYtPm9mZnNldCkgewogCQlERUJVRygyLCAiUmVtYXBwaW5nIHdpbmRvdyBmcm9tIDB4JTguOHggdG8gMHglOC44eCIsCi0JCSAgICAgIGRldi0+b2Zmc2V0LCBtcnEuQ2FyZE9mZnNldCk7Ci0JCW1ycS5QYWdlID0gMDsKLQkJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShkZXYtPnBfZGV2LCB3aW4sICZtcnEpOworCQkgICAgICBkZXYtPm9mZnNldCwgb2Zmc2V0KTsKKwkJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShkZXYtPnBfZGV2LCB3aW4sIG9mZnNldCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiBOVUxMOwotCQlkZXYtPm9mZnNldCA9IG1ycS5DYXJkT2Zmc2V0OworCQlkZXYtPm9mZnNldCA9IG9mZnNldDsKIAl9CiAJcmV0dXJuIGRldi0+d2luX2Jhc2UgKyAodG8gJiAoZGV2LT53aW5fc2l6ZS0xKSk7CiB9CkBAIC0zNDYsNyArMzQ0LDYgQEAKIAkJCWlvdW5tYXAoZGV2LT53aW5fYmFzZSk7CiAJCQlkZXYtPndpbl9iYXNlID0gTlVMTDsKIAkJfQotCQlwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay0+d2luKTsKIAl9CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCA0MjY0NjFhLi40YzE4Yjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwpAQCAtMTA2LDEyICsxMDYsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgInBoeXNtYXAgcGxhdGZvcm0gZmxhc2ggZGV2aWNlOiAlLjhsbHggYXQgJS44bGx4XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoZGV2LT5yZXNvdXJjZVtpXS5lbmQgLSBkZXYtPnJlc291cmNlW2ldLnN0YXJ0ICsgMSksCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlc291cmNlX3NpemUoJmRldi0+cmVzb3VyY2VbaV0pLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPnJlc291cmNlW2ldLnN0YXJ0KTsKIAogCQlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZkZXYtPmRldiwKIAkJCWRldi0+cmVzb3VyY2VbaV0uc3RhcnQsCi0JCQlkZXYtPnJlc291cmNlW2ldLmVuZCAtIGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyAxLAorCQkJcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXNvdXJjZVtpXSksCiAJCQlkZXZfbmFtZSgmZGV2LT5kZXYpKSkgewogCQkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJCWVyciA9IC1FTk9NRU07CkBAIC0xMjAsNyArMTIwLDcgQEAKIAogCQlpbmZvLT5tYXBbaV0ubmFtZSA9IGRldl9uYW1lKCZkZXYtPmRldik7CiAJCWluZm8tPm1hcFtpXS5waHlzID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydDsKLQkJaW5mby0+bWFwW2ldLnNpemUgPSBkZXYtPnJlc291cmNlW2ldLmVuZCAtIGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyAxOworCQlpbmZvLT5tYXBbaV0uc2l6ZSA9IHJlc291cmNlX3NpemUoJmRldi0+cmVzb3VyY2VbaV0pOwogCQlpbmZvLT5tYXBbaV0uYmFua3dpZHRoID0gcGh5c21hcF9kYXRhLT53aWR0aDsKIAkJaW5mby0+bWFwW2ldLnNldF92cHAgPSBwaHlzbWFwX2RhdGEtPnNldF92cHA7CiAJCWluZm8tPm1hcFtpXS5wZm93X2Jhc2UgPSBwaHlzbWFwX2RhdGEtPnBmb3dfYmFzZTsKQEAgLTEzNiw4ICsxMzYsMTIgQEAKIAkJc2ltcGxlX21hcF9pbml0KCZpbmZvLT5tYXBbaV0pOwogCiAJCXByb2JlX3R5cGUgPSByb21fcHJvYmVfdHlwZXM7Ci0JCWZvciAoOyBpbmZvLT5tdGRbaV0gPT0gTlVMTCAmJiAqcHJvYmVfdHlwZSAhPSBOVUxMOyBwcm9iZV90eXBlKyspCi0JCQlpbmZvLT5tdGRbaV0gPSBkb19tYXBfcHJvYmUoKnByb2JlX3R5cGUsICZpbmZvLT5tYXBbaV0pOworCQlpZiAocGh5c21hcF9kYXRhLT5wcm9iZV90eXBlID09IE5VTEwpIHsKKwkJCWZvciAoOyBpbmZvLT5tdGRbaV0gPT0gTlVMTCAmJiAqcHJvYmVfdHlwZSAhPSBOVUxMOyBwcm9iZV90eXBlKyspCisJCQkJaW5mby0+bXRkW2ldID0gZG9fbWFwX3Byb2JlKCpwcm9iZV90eXBlLCAmaW5mby0+bWFwW2ldKTsKKwkJfSBlbHNlCisJCQlpbmZvLT5tdGRbaV0gPSBkb19tYXBfcHJvYmUocGh5c21hcF9kYXRhLT5wcm9iZV90eXBlLCAmaW5mby0+bWFwW2ldKTsKKwogCQlpZiAoaW5mby0+bXRkW2ldID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAibWFwX3Byb2JlIGZhaWxlZFxuIik7CiAJCQllcnIgPSAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXBfb2YuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCmluZGV4IDhmOWJhYjguLjAwYWY1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkgICAmaW5mby0+cGFydHMsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCW9mX2ZyZWVfcHJvYmVzKHBhcnRfcHJvYmVfdHlwZXMpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCW9mX2ZyZWVfcHJvYmVzKHBhcnRfcHJvYmVfdHlwZXMpOwogCkBAIC0zNjEsMTQgKzM2MSwxNCBAQAogCWlmIChlcnIgPT0gMCkgewogCQllcnIgPSBvZl9tdGRfcGFyc2VfcGFydGl0aW9ucygmZGV2LT5kZXYsIGRwLCAmaW5mby0+cGFydHMpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9vdXQ7CiAJfQogI2VuZGlmCiAKIAlpZiAoZXJyID09IDApIHsKIAkJZXJyID0gcGFyc2Vfb2Jzb2xldGVfcGFydGl0aW9ucyhkZXYsIGluZm8sIGRwKTsKIAkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmIChlcnIgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMgYi9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjOWRiMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMKLSAqCi0gKiBGTEFTSCBtYXAgZm9yIHRoZSBJQk0gUmVkd29vZCA0LzUvNiBib2FyZHMuCi0gKgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqCi0gKiAyMDAxLTIwMDMgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQotICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCi0gKiBvciBpbXBsaWVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jZGVmaW5lIFdJTkRPV19BRERSIDB4ZmZjMDAwMDAKLSNkZWZpbmUgV0lORE9XX1NJWkUgMHgwMDQwMDAwMAotCi0jZGVmaW5lIFJXX1BBUlQwX09GCTAKLSNkZWZpbmUgUldfUEFSVDBfU1oJMHgxMDAwMAotI2RlZmluZSBSV19QQVJUMV9PRglSV19QQVJUMF9TWgotI2RlZmluZSBSV19QQVJUMV9TWgkweDIwMDAwMCAtIDB4MTAwMDAKLSNkZWZpbmUgUldfUEFSVDJfT0YJMHgyMDAwMDAKLSNkZWZpbmUgUldfUEFSVDJfU1oJMHgxMDAwMAotI2RlZmluZSBSV19QQVJUM19PRgkweDIxMDAwMAotI2RlZmluZSBSV19QQVJUM19TWgkweDIwMDAwMCAtICgweDEwMDAwICsgMHgyMDAwMCkKLSNkZWZpbmUgUldfUEFSVDRfT0YJMHgzZTAwMDAKLSNkZWZpbmUgUldfUEFSVDRfU1oJMHgyMDAwMAotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmVkd29vZF9mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZSA9ICJSZWR3b29kIE9wZW5CSU9TIFZpdGFsIFByb2R1Y3QgRGF0YSIsCi0JCS5vZmZzZXQgPSBSV19QQVJUMF9PRiwKLQkJLnNpemUgPSBSV19QQVJUMF9TWiwKLQkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFCS8qIGZvcmNlIHJlYWQtb25seSAqLwotCX0sCi0JewotCQkubmFtZSA9ICJSZWR3b29kIGtlcm5lbCIsCi0JCS5vZmZzZXQgPSBSV19QQVJUMV9PRiwKLQkJLnNpemUgPSBSV19QQVJUMV9TWgotCX0sCi0JewotCQkubmFtZSA9ICJSZWR3b29kIE9wZW5CSU9TIG5vbi12b2xhdGlsZSBzdG9yYWdlIiwKLQkJLm9mZnNldCA9IFJXX1BBUlQyX09GLAotCQkuc2l6ZSA9IFJXX1BBUlQyX1NaLAotCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSwKLQl7Ci0JCS5uYW1lID0gIlJlZHdvb2QgZmlsZXN5c3RlbSIsCi0JCS5vZmZzZXQgPSBSV19QQVJUM19PRiwKLQkJLnNpemUgPSBSV19QQVJUM19TWgotCX0sCi0JewotCQkubmFtZSA9ICJSZWR3b29kIE9wZW5CSU9TIiwKLQkJLm9mZnNldCA9IFJXX1BBUlQ0X09GLAotCQkuc2l6ZSA9IFJXX1BBUlQ0X1NaLAotCQkubWFza19mbGFncyA9IE1URF9XUklURUFCTEUJLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfQotfTsKLQotc3RydWN0IG1hcF9pbmZvIHJlZHdvb2RfZmxhc2hfbWFwID0gewotCS5uYW1lID0gIklCTSBSZWR3b29kIiwKLQkuc2l6ZSA9IFdJTkRPV19TSVpFLAotCS5iYW5rd2lkdGggPSAyLAotCS5waHlzID0gV0lORE9XX0FERFIsCi19OwotCi0KLSNkZWZpbmUgTlVNX1JFRFdPT0RfRkxBU0hfUEFSVElUSU9OUyBBUlJBWV9TSVpFKHJlZHdvb2RfZmxhc2hfcGFydGl0aW9ucykKLQotc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqcmVkd29vZF9tdGQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfcmVkd29vZF9mbGFzaCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgInJlZHdvb2Q6IGZsYXNoIG1hcHBpbmc6ICV4IGF0ICV4XG4iLAotCQkJV0lORE9XX1NJWkUsIFdJTkRPV19BRERSKTsKLQotCXJlZHdvb2RfZmxhc2hfbWFwLnZpcnQgPSBpb3JlbWFwKFdJTkRPV19BRERSLCBXSU5ET1dfU0laRSk7Ci0KLQlpZiAoIXJlZHdvb2RfZmxhc2hfbWFwLnZpcnQpIHsKLQkJcHJpbnRrKCJpbml0X3JlZHdvb2RfZmxhc2g6IGZhaWxlZCB0byBpb3JlbWFwXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXNpbXBsZV9tYXBfaW5pdCgmcmVkd29vZF9mbGFzaF9tYXApOwotCi0JcmVkd29vZF9tdGQgPSBkb19tYXBfcHJvYmUoImNmaV9wcm9iZSIsJnJlZHdvb2RfZmxhc2hfbWFwKTsKLQotCWlmIChyZWR3b29kX210ZCkgewotCQlyZWR3b29kX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKHJlZHdvb2RfbXRkLAotCQkJCXJlZHdvb2RfZmxhc2hfcGFydGl0aW9ucywKLQkJCQlOVU1fUkVEV09PRF9GTEFTSF9QQVJUSVRJT05TKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKCJpbml0X3JlZHdvb2RfZmxhc2g6IGFkZF9tdGRfcGFydGl0aW9ucyBmYWlsZWRcbiIpOwotCQkJaW91bm1hcChyZWR3b29kX2ZsYXNoX21hcC52aXJ0KTsKLQkJfQotCQlyZXR1cm4gZXJyOwotCi0JfQotCi0JaW91bm1hcChyZWR3b29kX2ZsYXNoX21hcC52aXJ0KTsKLQlyZXR1cm4gLUVOWElPOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9yZWR3b29kX2ZsYXNoKHZvaWQpCi17Ci0JaWYgKHJlZHdvb2RfbXRkKSB7Ci0JCWRlbF9tdGRfcGFydGl0aW9ucyhyZWR3b29kX210ZCk7Ci0JCS8qIG1vdmVkIGlvdW5tYXAgYWZ0ZXIgbWFwX2Rlc3Ryb3kgLSBhcm1pbiAqLwotCQltYXBfZGVzdHJveShyZWR3b29kX210ZCk7Ci0JCWlvdW5tYXAoKHZvaWQgKilyZWR3b29kX2ZsYXNoX21hcC52aXJ0KTsKLQl9Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfcmVkd29vZF9mbGFzaCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3JlZHdvb2RfZmxhc2gpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNb250YVZpc3RhIFNvZnR3YXJlIDxzb3VyY2VAbXZpc3RhLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIHRoZSBJQk0gUmVkd29vZCByZWZlcmVuY2UgYm9hcmRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCAwM2UxOWMxLi42MmU2ODcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTEsNyArMSwyMSBAQAogLyoKLSAqIChDKSAyMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqIEludGVyZmFjZSB0byBMaW51eCBibG9jayBsYXllciBmb3IgTVREICd0cmFuc2xhdGlvbiBsYXllcnMnLgogICoKLSAqIEludGVyZmFjZSB0byBMaW51eCAyLjUgYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJy4KKyAqIENvcHlyaWdodCDCqSAyMDAzLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKgogICovCiAKQEAgLTE1LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgpAQCAtNzMsMTQgKzg4LDE0IEBACiAKIAlidWYgPSByZXEtPmJ1ZmZlcjsKIAotCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKKwlpZiAocmVxLT5jbWRfdHlwZSAhPSBSRVFfVFlQRV9GUykKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoYmxrX3JxX3BvcyhyZXEpICsgYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSkgPgogCSAgICBnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoYmxrX2Rpc2NhcmRfcnEocmVxKSkKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRElTQ0FSRCkKIAkJcmV0dXJuIHRyLT5kaXNjYXJkKGRldiwgYmxvY2ssIG5zZWN0KTsKIAogCXN3aXRjaChycV9kYXRhX2RpcihyZXEpKSB7CkBAIC0xNjQsOCArMTc5LDkgQEAKIAlpbnQgcmV0OwogCiAJaWYgKCFkZXYpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7IC8qIEZJWE1FOiBidXN5IGxvb3AhIC1hcm5kKi8KIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAogCWlmICghZGV2LT5tdGQpIHsKQEAgLTE4Miw2ICsxOTgsNyBAQAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlibGt0cmFuc19kZXZfcHV0KGRldik7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5Myw2ICsyMTAsNyBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gcmV0OwogCisJbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCiAJLyogUmVsZWFzZSBvbmUgcmVmZXJlbmNlLCB3ZSBzdXJlIGl0cyBub3QgdGhlIGxhc3Qgb25lIGhlcmUqLwpAQCAtMjA1LDYgKzIyMyw3IEBACiB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWJsa3RyYW5zX2Rldl9wdXQoZGV2KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM3LDYgKzI1Niw3IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiByZXQ7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKIAlpZiAoIWRldi0+bXRkKQpAQCAtMjQ1LDExICsyNjUsMTMgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgQkxLRkxTQlVGOgogCQlyZXQgPSBkZXYtPnRyLT5mbHVzaCA/IGRldi0+dHItPmZsdXNoKGRldikgOiAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PVFRZOwogCX0KIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCWJsa3RyYW5zX2Rldl9wdXQoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjU4LDcgKzI4MCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IGJsa3RyYW5zX29wZW4sCiAJLnJlbGVhc2UJPSBibGt0cmFuc19yZWxlYXNlLAotCS5sb2NrZWRfaW9jdGwJPSBibGt0cmFuc19pb2N0bCwKKwkuaW9jdGwJCT0gYmxrdHJhbnNfaW9jdGwsCiAJLmdldGdlbwkJPSBibGt0cmFuc19nZXRnZW8sCiB9OwogCkBAIC00MDksMTMgKzQzMSwxNCBAQAogCQlCVUcoKTsKIAl9CiAKLQkvKiBTdG9wIG5ldyByZXF1ZXN0cyB0byBhcnJpdmUgKi8KLQlkZWxfZ2VuZGlzayhvbGQtPmRpc2spOwotCiAJaWYgKG9sZC0+ZGlza19hdHRyaWJ1dGVzKQogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRpc2tfdG9fZGV2KG9sZC0+ZGlzayktPmtvYmosCiAJCQkJCQlvbGQtPmRpc2tfYXR0cmlidXRlcyk7CiAKKwkvKiBTdG9wIG5ldyByZXF1ZXN0cyB0byBhcnJpdmUgKi8KKwlkZWxfZ2VuZGlzayhvbGQtPmRpc2spOworCisKIAkvKiBTdG9wIHRoZSB0aHJlYWQgKi8KIAlrdGhyZWFkX3N0b3Aob2xkLT50aHJlYWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9jay5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwppbmRleCBlNmVkYmVjLi4xZTc0YWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKQEAgLTEsOCArMSwyMyBAQAogLyoKICAqIERpcmVjdCBNVEQgYmxvY2sgZGV2aWNlIGFjY2VzcwogICoKLSAqIChDKSAyMDAwLTIwMDMgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KLSAqIChDKSAxOTk5LTIwMDMgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiBDb3B5cmlnaHQgwqkgMjAwMC0yMDAzIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2tfcm8uYwppbmRleCBkMGQzZjc5Li43OTVhOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMKQEAgLTEsNyArMSwyMiBAQAogLyoKLSAqIChDKSAyMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KLSAqCiAgKiBTaW1wbGUgcmVhZC1vbmx5ICh3cml0YWJsZSBvbmx5IGZvciBSQU0pIG10ZGJsb2NrIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCDCqSAyMDAxLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKaW5kZXggOTFjODAxMy4uYTgyNTAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtMSw1ICsxLDE5IEBACiAvKgotICogQ2hhcmFjdGVyLWRldmljZSBhY2Nlc3MgdG8gcmF3IE1URCBkZXZpY2VzLgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqCiAgKi8KIApAQCAtMTgsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTY3NSw2ICs2ODksMjAgQEAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBNRU1JU0xPQ0tFRDoKKwl7CisJCXN0cnVjdCBlcmFzZV9pbmZvX3VzZXIgZWluZm87CisKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZlaW5mbywgYXJncCwgc2l6ZW9mKGVpbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAoIW10ZC0+aXNfbG9ja2VkKQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWVsc2UKKwkJCXJldCA9IG10ZC0+aXNfbG9ja2VkKG10ZCwgZWluZm8uc3RhcnQsIGVpbmZvLmxlbmd0aCk7CisJCWJyZWFrOworCX0KKwogCS8qIExlZ2FjeSBpbnRlcmZhY2UgKi8KIAljYXNlIE1FTUdFVE9PQlNFTDoKIAl7CkBAIC05NTAsOSArOTc4LDM0IEBACiAjaWZkZWYgQ09ORklHX01NVQogCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8gKm1hcCA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgb2ZmOworCXUzMiBsZW47CiAKLQlpZiAobXRkLT50eXBlID09IE1URF9SQU0gfHwgbXRkLT50eXBlID09IE1URF9ST00pCisJaWYgKG10ZC0+dHlwZSA9PSBNVERfUkFNIHx8IG10ZC0+dHlwZSA9PSBNVERfUk9NKSB7CisJCW9mZiA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwkJc3RhcnQgPSBtYXAtPnBoeXM7CisJCWxlbiA9IFBBR0VfQUxJR04oKHN0YXJ0ICYgflBBR0VfTUFTSykgKyBtYXAtPnNpemUpOworCQlzdGFydCAmPSBQQUdFX01BU0s7CisJCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ICsgb2ZmKSA+IGxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW9mZiArPSBzdGFydDsKKwkJdm1hLT52bV9wZ29mZiA9IG9mZiA+PiBQQUdFX1NISUZUOworCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQ7CisKKyNpZmRlZiBwZ3Byb3Rfbm9uY2FjaGVkCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19EU1lOQyB8fCBvZmYgPj0gX19wYShoaWdoX21lbW9yeSkpCisJCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworI2VuZGlmCisJCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBvZmYgPj4gUEFHRV9TSElGVCwKKwkJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJCSAgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwogCQlyZXR1cm4gMDsKKwl9CiAJcmV0dXJuIC1FTk9TWVM7CiAjZWxzZQogCXJldHVybiB2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEID8gMCA6IC1FTk9TWVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCmluZGV4IDdlMDc1NjIuLmJmOGRlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jCkBAIC0xLDExICsxLDI1IEBACiAvKgogICogTVREIGRldmljZSBjb25jYXRlbmF0aW9uIGxheWVyCiAgKgotICogKEMpIDIwMDIgUm9iZXJ0IEthaXNlciA8cmthaXNlckBzeXNnby5kZT4KKyAqIENvcHlyaWdodCDCqSAyMDAyIFJvYmVydCBLYWlzZXIgPHJrYWlzZXJAc3lzZ28uZGU+CisgKiBDb3B5cmlnaHQgwqkgMjAwMi0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBOQU5EIHN1cHBvcnQgYnkgQ2hyaXN0aWFuIEdhbiA8Y2dhbkBpZGVycy5jYT4KICAqCi0gKiBUaGlzIGNvZGUgaXMgR1BMCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01NDAsMTAgKzU1NCwxMiBAQAogCQllbHNlCiAJCQlzaXplID0gbGVuOwogCi0JCWVyciA9IHN1YmRldi0+bG9jayhzdWJkZXYsIG9mcywgc2l6ZSk7Ci0KLQkJaWYgKGVycikKLQkJCWJyZWFrOworCQlpZiAoc3ViZGV2LT5sb2NrKSB7CisJCQllcnIgPSBzdWJkZXYtPmxvY2soc3ViZGV2LCBvZnMsIHNpemUpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAogCQlsZW4gLT0gc2l6ZTsKIAkJaWYgKGxlbiA9PSAwKQpAQCAtNTc4LDEwICs1OTQsMTIgQEAKIAkJZWxzZQogCQkJc2l6ZSA9IGxlbjsKIAotCQllcnIgPSBzdWJkZXYtPnVubG9jayhzdWJkZXYsIG9mcywgc2l6ZSk7Ci0KLQkJaWYgKGVycikKLQkJCWJyZWFrOworCQlpZiAoc3ViZGV2LT51bmxvY2spIHsKKwkJCWVyciA9IHN1YmRldi0+dW5sb2NrKHN1YmRldiwgb2ZzLCBzaXplKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAKIAkJbGVuIC09IHNpemU7CiAJCWlmIChsZW4gPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwppbmRleCBhMWI4YjcwLi41MjdjZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCkBAIC0yLDkgKzIsMjMgQEAKICAqIENvcmUgcmVnaXN0cmF0aW9uIGFuZCBjYWxsYmFjayByb3V0aW5lcyBmb3IgTVRECiAgKiBkcml2ZXJzIGFuZCB1c2Vycy4KICAqCi0gKiBiZGkgYml0cyBhcmU6Ci0gKiBDb3B5cmlnaHQgwqkgMjAwNiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgwqkgMTk5OS0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqIENvcHlyaWdodCDCqSAyMDA2ICAgICAgUmVkIEhhdCBVSyBMaW1pdGVkIAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE3LDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRvb3BzLmMgYi9kcml2ZXJzL210ZC9tdGRvb3BzLmMKaW5kZXggMzI4MzEzYy4uMWVlNzJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkb29wcy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZG9vcHMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBNVEQgT29wcy9QYW5pYyBsb2dnZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgwqkgMjAwNyBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCBiODA0M2E5Li5kYzY1NTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCkBAIC0xLDEyICsxLDI0IEBACiAvKgogICogU2ltcGxlIE1URCBwYXJ0aXRpb25pbmcgbGF5ZXIKICAqCi0gKiAoQykgMjAwMCBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorICogQ29weXJpZ2h0IMKpIDIwMDAgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyAqIENvcHlyaWdodCDCqSAyMDAyIFRob21hcyBHbGVpeG5lciA8Z2xlaXhuZXJAbGludXRyb25peC5kZT4KKyAqIENvcHlyaWdodCDCqSAyMDAwLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKLSAqIFRoaXMgY29kZSBpcyBHUEwKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogCTAyLTIxLTIwMDIJVGhvbWFzIEdsZWl4bmVyIDxnbGVpeG5lckBhdXRyb25peC5kZT4KLSAqCQkJYWRkZWQgc3VwcG9ydCBmb3IgcmVhZF9vb2IsIHdyaXRlX29vYgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE3LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiAvKiBPdXIgcGFydGl0aW9uIGxpbmtlZCBsaXN0ICovCiBzdGF0aWMgTElTVF9IRUFEKG10ZF9wYXJ0aXRpb25zKTsKQEAgLTI2NCw2ICsyNzUsMTQgQEAKIAlyZXR1cm4gcGFydC0+bWFzdGVyLT51bmxvY2socGFydC0+bWFzdGVyLCBvZnMgKyBwYXJ0LT5vZmZzZXQsIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgcGFydF9pc19sb2NrZWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKK3sKKwlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CisJaWYgKChsZW4gKyBvZnMpID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcGFydC0+bWFzdGVyLT5pc19sb2NrZWQocGFydC0+bWFzdGVyLCBvZnMgKyBwYXJ0LT5vZmZzZXQsIGxlbik7Cit9CisKIHN0YXRpYyB2b2lkIHBhcnRfc3luYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CkBAIC00MDIsNiArNDIxLDggQEAKIAkJc2xhdmUtPm10ZC5sb2NrID0gcGFydF9sb2NrOwogCWlmIChtYXN0ZXItPnVubG9jaykKIAkJc2xhdmUtPm10ZC51bmxvY2sgPSBwYXJ0X3VubG9jazsKKwlpZiAobWFzdGVyLT5pc19sb2NrZWQpCisJCXNsYXZlLT5tdGQuaXNfbG9ja2VkID0gcGFydF9pc19sb2NrZWQ7CiAJaWYgKG1hc3Rlci0+YmxvY2tfaXNiYWQpCiAJCXNsYXZlLT5tdGQuYmxvY2tfaXNiYWQgPSBwYXJ0X2Jsb2NrX2lzYmFkOwogCWlmIChtYXN0ZXItPmJsb2NrX21hcmtiYWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRzdXBlci5jIGIvZHJpdmVycy9tdGQvbXRkc3VwZXIuYwppbmRleCBiZDlhNDQzLi4zOGUyYWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRzdXBlci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHN1cGVyLmMKQEAgLTEsNiArMSw4IEBACiAvKiBNVEQtYmFzZWQgc3VwZXJibG9jayBtYW5hZ2VtZW50CiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCiAgKiBXcml0dGVuIGJ5OiAgRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KICAqICAgICAgICAgICAgICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCmluZGV4IDM2MmQxNzcuLjhiNGI2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKQEAgLTM3LDcgKzM3LDYgQEAKIAogY29uZmlnIE1URF9OQU5EX01VU0VVTV9JRFMKIAlib29sICJFbmFibGUgY2hpcCBpZHMgZm9yIG9ic29sZXRlIGFuY2llbnQgTkFORCBkZXZpY2VzIgotCWRlcGVuZHMgb24gTVREX05BTkQKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBFbmFibGUgdGhpcyBvcHRpb24gb25seSB3aGVuIHlvdXIgYm9hcmQgaGFzIGZpcnN0IGdlbmVyYXRpb24KQEAgLTYxLDYgKzYwLDcgQEAKIGNvbmZpZyBNVERfTkFORF9ERU5BTElfU0NSQVRDSF9SRUdfQUREUgogICAgICAgICBoZXggIkRlbmFsaSBOQU5EIHNpemUgc2NyYXRjaCByZWdpc3RlciBhZGRyZXNzIgogICAgICAgICBkZWZhdWx0ICIweEZGMTA4MDE4IgorICAgICAgICBkZXBlbmRzIG9uIE1URF9OQU5EX0RFTkFMSQogICAgICAgICBoZWxwCiAgICAgICAgICAgU29tZSBwbGF0Zm9ybXMgcGxhY2UgdGhlIE5BTkQgY2hpcCBzaXplIGluIGEgc2NyYXRjaCByZWdpc3RlcgogICAgICAgICAgIGJlY2F1c2UgKHNvbWUgdmVyc2lvbnMgb2YpIHRoZSBkcml2ZXIgYXJlbid0IGFibGUgdG8gYXV0b21hdGljYWxseQpAQCAtMTAxLDEzICsxMDEsMTMgQEAKIAogY29uZmlnIE1URF9OQU5EX09NQVAyCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIE9NQVAyIGFuZCBPTUFQMyIKLQlkZXBlbmRzIG9uIEFSTSAmJiBNVERfTkFORCAmJiAoQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzKQorCWRlcGVuZHMgb24gQVJNICYmIChBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMpCiAJaGVscAogICAgICAgICAgIFN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggb24gVGV4YXMgSW5zdHJ1bWVudHMgT01BUDIgYW5kIE9NQVAzIHBsYXRmb3Jtcy4KIAogY29uZmlnIE1URF9OQU5EX09NQVBfUFJFRkVUQ0gKIAlib29sICJHUE1DIHByZWZldGNoIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggZGV2aWNlIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTVREX05BTkRfT01BUDIKKwlkZXBlbmRzIG9uIE1URF9OQU5EX09NQVAyCiAJZGVmYXVsdCB5CiAJaGVscAogCSBUaGUgTkFORCBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGZvciBSZWFkL1dyaXRlIHVzaW5nIEdQTUMgUFJFRkVUQ0ggZW5naW5lCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0JGNVhYCiAJdHJpc3RhdGUgIkJsYWNrZmluIG9uLWNoaXAgTkFORCBGbGFzaCBDb250cm9sbGVyIGRyaXZlciIKLQlkZXBlbmRzIG9uIChCRjU0eCB8fCBCRjUyeCkgJiYgTVREX05BTkQKKwlkZXBlbmRzIG9uIEJGNTR4IHx8IEJGNTJ4CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBCbGFja2ZpbiBvbi1jaGlwIE5BTkQgZmxhc2ggY29udHJvbGxlcgogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0JDTV9VTUkKIAl0cmlzdGF0ZSAiTkFORCBGbGFzaCBzdXBwb3J0IGZvciBCQ00gUmVmZXJlbmNlIEJvYXJkcyIKLQlkZXBlbmRzIG9uIEFSQ0hfQkNNUklORyAmJiBNVERfTkFORAorCWRlcGVuZHMgb24gQVJDSF9CQ01SSU5HCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlIEJDTSBVTUkgYmxvY2suCiAKQEAgLTM5NSw3ICszOTUsNyBAQAogCiBjb25maWcgTVREX05BTkRfUFhBM3h4CiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgZmxhc2ggZGV2aWNlcyBvbiBQWEEzeHgiCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiAoUFhBM3h4IHx8IEFSQ0hfTU1QKQorCWRlcGVuZHMgb24gUFhBM3h4IHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGRldmljZSBmb3VuZCBvbgogCSAgUFhBM3h4IHByb2Nlc3NvcnMKQEAgLTQwOSwxOCArNDA5LDE4IEBACiAKIGNvbmZpZyBNVERfTkFORF9DTV9YMjcwCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gQ00tWDI3MCBtb2R1bGVzIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTUFDSF9BUk1DT1JFCisJZGVwZW5kcyBvbiBNQUNIX0FSTUNPUkUKIAogY29uZmlnIE1URF9OQU5EX1BBU0VNSQogCXRyaXN0YXRlICJOQU5EIHN1cHBvcnQgZm9yIFBBIFNlbWkgUFdSZmljaWVudCIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFBQQ19QQVNFTUkKKwlkZXBlbmRzIG9uIFBQQ19QQVNFTUkKIAloZWxwCiAJICBFbmFibGVzIHN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggaW50ZXJmYWNlIG9uIFBBIFNlbWkgUFdSZmljaWVudAogCSAgYmFzZWQgYm9hcmRzCiAKIGNvbmZpZyBNVERfTkFORF9UTUlPCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRvc2hpYmEgTW9iaWxlIElPIENvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiBNRkRfVE1JTworCWRlcGVuZHMgb24gTUZEX1RNSU8KIAloZWxwCiAJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIGNvbm5lY3RlZCB0byBhIFRvc2hpYmEgTW9iaWxlIElPCiAJICBDb250cm9sbGVyIGluIHNvbWUgUERBcywgaW5jbHVkaW5nIHRoZSBTaGFycCBTTDYwMDB4LgpAQCAtNDM0LDcgKzQzNCw2IEBACiAKIGNvbmZpZyBNVERfTkFORF9QTEFURk9STQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBnZW5lcmljIHBsYXRmb3JtIE5BTkQgZHJpdmVyIgotCWRlcGVuZHMgb24gTVREX05BTkQKIAloZWxwCiAJICBUaGlzIGltcGxlbWVudHMgYSBnZW5lcmljIE5BTkQgZHJpdmVyIGZvciBvbi1TT0MgcGxhdGZvcm0KIAkgIGRldmljZXMuIFlvdSB3aWxsIG5lZWQgdG8gcHJvdmlkZSBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbnMKQEAgLTQ0MiwxNCArNDQxLDE0IEBACiAKIGNvbmZpZyBNVERfQUxBVURBCiAJdHJpc3RhdGUgIk1URCBkcml2ZXIgZm9yIE9seW1wdXMgTUFVU0ItMTAgYW5kIEZ1amlmaWxtIERQQy1SMSIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIFVTQgorCWRlcGVuZHMgb24gVVNCCiAJaGVscAogCSAgVGhlc2UgdHdvIChhbmQgcG9zc2libHkgb3RoZXIpIEFsYXVkYS1iYXNlZCBjYXJkcmVhZGVycyBmb3IKIAkgIFNtYXJ0TWVkaWEgYW5kIHhEIGFsbG93IHJhdyBmbGFzaCBhY2Nlc3MuCiAKIGNvbmZpZyBNVERfTkFORF9PUklPTgogCXRyaXN0YXRlICJOQU5EIEZsYXNoIHN1cHBvcnQgZm9yIE1hcnZlbGwgT3Jpb24gU29DIgotCWRlcGVuZHMgb24gUExBVF9PUklPTiAmJiBNVERfTkFORAorCWRlcGVuZHMgb24gUExBVF9PUklPTgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIE9yaW9uIG1hY2hpbmVzLgogCkBAIC00NTgsNyArNDU3LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0ZTTF9FTEJDCiAJdHJpc3RhdGUgIk5BTkQgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGVMQkMgY29udHJvbGxlcnMiCi0JZGVwZW5kcyBvbiBNVERfTkFORCAmJiBQUENfT0YKKwlkZXBlbmRzIG9uIFBQQ19PRgogCWhlbHAKIAkgIFZhcmlvdXMgRnJlZXNjYWxlIGNoaXBzLCBpbmNsdWRpbmcgdGhlIDgzMTMsIGluY2x1ZGUgYSBOQU5EIEZsYXNoCiAJICBDb250cm9sbGVyIE1vZHVsZSB3aXRoIGJ1aWx0LWluIGhhcmR3YXJlIEVDQyBjYXBhYmlsaXRpZXMuCkBAIC00NjcsNyArNDY2LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX0ZTTF9VUE0KIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBGcmVlc2NhbGUgVVBNIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgKFBQQ184M3h4IHx8IFBQQ184NXh4KQorCWRlcGVuZHMgb24gUFBDXzgzeHggfHwgUFBDXzg1eHgKIAlzZWxlY3QgRlNMX0xCQwogCWhlbHAKIAkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTkFORCBGbGFzaCBjaGlwcyB3aXJlZCBvbnRvIEZyZWVzY2FsZSBQb3dlclBDCkBAIC00ODIsNyArNDgxLDcgQEAKIAogY29uZmlnIE1URF9OQU5EX01YQwogCXRyaXN0YXRlICJNWEMgTkFORCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9NWDIgfHwgQVJDSF9NWDI1IHx8IEFSQ0hfTVgzCisJZGVwZW5kcyBvbiBBUkNIX01YMiB8fCBBUkNIX01YMjUgfHwgQVJDSF9NWDMgfHwgQVJDSF9NWDUxCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgb24gdGhlCiAJICBNWEMgcHJvY2Vzc29ycy4KQEAgLTQ5NSw3ICs0OTQsNyBAQAogCiBjb25maWcgTVREX05BTkRfU0hfRkxDVEwKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBvbiBSZW5lc2FzIFN1cGVySCBGTENUTCIKLQlkZXBlbmRzIG9uIE1URF9OQU5EICYmIChTVVBFUkggfHwgQVJDSF9TSE1PQklMRSkKKwlkZXBlbmRzIG9uIFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFCiAJaGVscAogCSAgU2V2ZXJhbCBSZW5lc2FzIFN1cGVySCBDUFUgaGFzIEZMQ1RMLiBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQKIAkgIGZvciBOQU5EIEZsYXNoIHVzaW5nIEZMQ1RMLgpAQCAtNTE1LDcgKzUxNCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9TT0NSQVRFUwogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOQU5EIG9uIFNvY3JhdGVzIGJvYXJkIgotCWRlcGVuZHMgb24gTVREX05BTkQgJiYgU09DUkFURVMKKwlkZXBlbmRzIG9uIFNPQ1JBVEVTCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIEZsYXNoIGNoaXBzIHdpcmVkIG9udG8gU29jcmF0ZXMgYm9hcmQuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYXRtZWxfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbF9uYW5kLmMKaW5kZXggMDRkMzA4ODdjLi5jY2NlMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsX25hbmQuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisjaWZkZWYgQ09ORklHX01URF9DTURMSU5FX1BBUlRTCiBzdGF0aWMgY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvYmY1eHhfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9iZjV4eF9uYW5kLmMKaW5kZXggMjk3NDk5NS4uYTM4MmUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9iZjV4eF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9iZjV4eF9uYW5kLmMKQEAgLTIwLDkgKzIwLDYgQEAKICAqCQktIERNQSBzdXBwb3J0ZWQgaW4gRUNDX0hXCiAgKgkJLSBZQUZGUyB0ZXN0ZWQgYXMgcm9vdGZzIGluIGJvdGggRUNDX0hXIGFuZCBFQ0NfU1cKICAqCi0gKiBUT0RPOgotICogCUVuYWJsZSBKRkZTMiBvdmVyIE5BTkQgYXMgcm9vdGZzCi0gKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMjA2LDcgKzIwMyw3IEBACiAKIAlpZiAoY3RybCAmIE5BTkRfQ0xFKQogCQliZmluX3dyaXRlX05GQ19DTUQoY21kKTsKLQllbHNlCisJZWxzZSBpZiAoY3RybCAmIE5BTkRfQUxFKQogCQliZmluX3dyaXRlX05GQ19BRERSKGNtZCk7CiAJU1NZTkMoKTsKIH0KQEAgLTIxOCw5ICsyMTUsOSBAQAogICovCiBzdGF0aWMgaW50IGJmNXh4X25hbmRfZGV2cmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0JdW5zaWduZWQgc2hvcnQgdmFsID0gYmZpbl9yZWFkX05GQ19JUlFTVEFUKCk7CisJdW5zaWduZWQgc2hvcnQgdmFsID0gYmZpbl9yZWFkX05GQ19TVEFUKCk7CiAKLQlpZiAoKHZhbCAmIE5CVVNZSVJRKSA9PSBOQlVTWUlSUSkKKwlpZiAoKHZhbCAmIE5CVVNZKSA9PSBOQlVTWSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTMxNywxOCArMzE0LDE2IEBACiBzdGF0aWMgaW50IGJmNXh4X25hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKIAkJCQkJdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKLQlzdHJ1Y3QgYmY1eHhfbmFuZF9pbmZvICppbmZvID0gbXRkX3RvX25hbmRfaW5mbyhtdGQpOwotCXN0cnVjdCBiZjV4eF9uYW5kX3BsYXRmb3JtICpwbGF0ID0gaW5mby0+cGxhdGZvcm07Ci0JdW5zaWduZWQgc2hvcnQgcGFnZV9zaXplID0gKHBsYXQtPnBhZ2Vfc2l6ZSA/IDUxMiA6IDI1Nik7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAlpbnQgcmV0OwogCiAJcmV0ID0gYmY1eHhfbmFuZF9jb3JyZWN0X2RhdGFfMjU2KG10ZCwgZGF0LCByZWFkX2VjYywgY2FsY19lY2MpOwogCi0JLyogSWYgcGFnZSBzaXplIGlzIDUxMiwgY29ycmVjdCBzZWNvbmQgMjU2IGJ5dGVzICovCi0JaWYgKHBhZ2Vfc2l6ZSA9PSA1MTIpIHsKKwkvKiBJZiBlY2Mgc2l6ZSBpcyA1MTIsIGNvcnJlY3Qgc2Vjb25kIDI1NiBieXRlcyAqLworCWlmIChjaGlwLT5lY2Muc2l6ZSA9PSA1MTIpIHsKIAkJZGF0ICs9IDI1NjsKLQkJcmVhZF9lY2MgKz0gODsKLQkJY2FsY19lY2MgKz0gODsKKwkJcmVhZF9lY2MgKz0gMzsKKwkJY2FsY19lY2MgKz0gMzsKIAkJcmV0IHw9IGJmNXh4X25hbmRfY29ycmVjdF9kYXRhXzI1NihtdGQsIGRhdCwgcmVhZF9lY2MsIGNhbGNfZWNjKTsKIAl9CiAKQEAgLTM0NCwxMyArMzM5LDEyIEBACiAJCWNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQogewogCXN0cnVjdCBiZjV4eF9uYW5kX2luZm8gKmluZm8gPSBtdGRfdG9fbmFuZF9pbmZvKG10ZCk7Ci0Jc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0gKnBsYXQgPSBpbmZvLT5wbGF0Zm9ybTsKLQl1MTYgcGFnZV9zaXplID0gKHBsYXQtPnBhZ2Vfc2l6ZSA/IDUxMiA6IDI1Nik7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgZWNjMCwgZWNjMTsKIAl1MzIgY29kZVsyXTsKIAl1OCAqcDsKIAotCS8qIGZpcnN0IDQgYnl0ZXMgRUNDIGNvZGUgZm9yIDI1NiBwYWdlIHNpemUgKi8KKwkvKiBmaXJzdCAzIGJ5dGVzIEVDQyBjb2RlIGZvciAyNTYgcGFnZSBzaXplICovCiAJZWNjMCA9IGJmaW5fcmVhZF9ORkNfRUNDMCgpOwogCWVjYzEgPSBiZmluX3JlYWRfTkZDX0VDQzEoKTsKIApAQCAtMzU4LDEyICszNTIsMTEgQEAKIAogCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAicmV0dXJuaW5nIGVjYyAweCUwOHhcbiIsIGNvZGVbMF0pOwogCi0JLyogZmlyc3QgMyBieXRlcyBpbiBlY2NfY29kZSBmb3IgMjU2IHBhZ2Ugc2l6ZSAqLwogCXAgPSAodTggKikgY29kZTsKIAltZW1jcHkoZWNjX2NvZGUsIHAsIDMpOwogCi0JLyogc2Vjb25kIDQgYnl0ZXMgRUNDIGNvZGUgZm9yIDUxMiBwYWdlIHNpemUgKi8KLQlpZiAocGFnZV9zaXplID09IDUxMikgeworCS8qIHNlY29uZCAzIGJ5dGVzIEVDQyBjb2RlIGZvciA1MTIgZWNjIHNpemUgKi8KKwlpZiAoY2hpcC0+ZWNjLnNpemUgPT0gNTEyKSB7CiAJCWVjYzAgPSBiZmluX3JlYWRfTkZDX0VDQzIoKTsKIAkJZWNjMSA9IGJmaW5fcmVhZF9ORkNfRUNDMygpOwogCQljb2RlWzFdID0gKGVjYzAgJiAweDdmZikgfCAoKGVjYzEgJiAweDdmZikgPDwgMTEpOwpAQCAtNDgzLDggKzQ3Niw3IEBACiAJCQkJdWludDhfdCAqYnVmLCBpbnQgaXNfcmVhZCkKIHsKIAlzdHJ1Y3QgYmY1eHhfbmFuZF9pbmZvICppbmZvID0gbXRkX3RvX25hbmRfaW5mbyhtdGQpOwotCXN0cnVjdCBiZjV4eF9uYW5kX3BsYXRmb3JtICpwbGF0ID0gaW5mby0+cGxhdGZvcm07Ci0JdW5zaWduZWQgc2hvcnQgcGFnZV9zaXplID0gKHBsYXQtPnBhZ2Vfc2l6ZSA/IDUxMiA6IDI1Nik7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAKIAlkZXZfZGJnKGluZm8tPmRldmljZSwgIiBtdGQtPiVwLCBidWYtPiVwLCBpc19yZWFkICVkXG4iLApAQCAtNDk4LDEwICs0OTAsMTAgQEAKIAkgKi8KIAlpZiAoaXNfcmVhZCkKIAkJaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGludClidWYsCi0JCQkJKHVuc2lnbmVkIGludCkoYnVmICsgcGFnZV9zaXplKSk7CisJCQkJKHVuc2lnbmVkIGludCkoYnVmICsgY2hpcC0+ZWNjLnNpemUpKTsKIAllbHNlCiAJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgaW50KWJ1ZiwKLQkJCQkodW5zaWduZWQgaW50KShidWYgKyBwYWdlX3NpemUpKTsKKwkJCQkodW5zaWduZWQgaW50KShidWYgKyBjaGlwLT5lY2Muc2l6ZSkpOwogCiAJLyoKIAkgKiBUaGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUgZWFjaCBwYWdlIGlzCkBAIC01MTAsNiArNTAyLDggQEAKIAkgKi8KIAliZmluX3dyaXRlX05GQ19SU1QoRUNDX1JTVCk7CiAJU1NZTkMoKTsKKwl3aGlsZSAoYmZpbl9yZWFkX05GQ19SU1QoKSAmIEVDQ19SU1QpCisJCWNwdV9yZWxheCgpOwogCiAJZGlzYWJsZV9kbWEoQ0hfTkZDKTsKIAljbGVhcl9kbWFfaXJxc3RhdChDSF9ORkMpOwpAQCAtNTIwLDEzICs1MTQsMTMgQEAKIAogCS8qIFRoZSBETUFzIGhhdmUgZGlmZmVyZW50IHNpemUgb24gQkY1MnggYW5kIEJGNTR4ICovCiAjaWZkZWYgQ09ORklHX0JGNTJ4Ci0Jc2V0X2RtYV94X2NvdW50KENIX05GQywgKHBhZ2Vfc2l6ZSA+PiAxKSk7CisJc2V0X2RtYV94X2NvdW50KENIX05GQywgKGNoaXAtPmVjYy5zaXplID4+IDEpKTsKIAlzZXRfZG1hX3hfbW9kaWZ5KENIX05GQywgMik7CiAJdmFsID0gRElfRU4gfCBXRFNJWkVfMTY7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19CRjU0eAotCXNldF9kbWFfeF9jb3VudChDSF9ORkMsIChwYWdlX3NpemUgPj4gMikpOworCXNldF9kbWFfeF9jb3VudChDSF9ORkMsIChjaGlwLT5lY2Muc2l6ZSA+PiAyKSk7CiAJc2V0X2RtYV94X21vZGlmeShDSF9ORkMsIDQpOwogCXZhbCA9IERJX0VOIHwgV0RTSVpFXzMyOwogI2VuZGlmCkBAIC01NDgsMTIgKzU0MiwxMSBAQAogCQkJCQl1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IGJmNXh4X25hbmRfaW5mbyAqaW5mbyA9IG10ZF90b19uYW5kX2luZm8obXRkKTsKLQlzdHJ1Y3QgYmY1eHhfbmFuZF9wbGF0Zm9ybSAqcGxhdCA9IGluZm8tPnBsYXRmb3JtOwotCXVuc2lnbmVkIHNob3J0IHBhZ2Vfc2l6ZSA9IChwbGF0LT5wYWdlX3NpemUgPyA1MTIgOiAyNTYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKIAlkZXZfZGJnKGluZm8tPmRldmljZSwgIm10ZC0+JXAsIGJ1Zi0+JXAsIGludCAlZFxuIiwgbXRkLCBidWYsIGxlbik7CiAKLQlpZiAobGVuID09IHBhZ2Vfc2l6ZSkKKwlpZiAobGVuID09IGNoaXAtPmVjYy5zaXplKQogCQliZjV4eF9uYW5kX2RtYV9ydyhtdGQsIGJ1ZiwgMSk7CiAJZWxzZQogCQliZjV4eF9uYW5kX3JlYWRfYnVmKG10ZCwgYnVmLCBsZW4pOwpAQCAtNTYzLDE3ICs1NTYsMzIgQEAKIAkJCQljb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IGJmNXh4X25hbmRfaW5mbyAqaW5mbyA9IG10ZF90b19uYW5kX2luZm8obXRkKTsKLQlzdHJ1Y3QgYmY1eHhfbmFuZF9wbGF0Zm9ybSAqcGxhdCA9IGluZm8tPnBsYXRmb3JtOwotCXVuc2lnbmVkIHNob3J0IHBhZ2Vfc2l6ZSA9IChwbGF0LT5wYWdlX3NpemUgPyA1MTIgOiAyNTYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKIAlkZXZfZGJnKGluZm8tPmRldmljZSwgIm10ZC0+JXAsIGJ1Zi0+JXAsIGxlbiAlZFxuIiwgbXRkLCBidWYsIGxlbik7CiAKLQlpZiAobGVuID09IHBhZ2Vfc2l6ZSkKKwlpZiAobGVuID09IGNoaXAtPmVjYy5zaXplKQogCQliZjV4eF9uYW5kX2RtYV9ydyhtdGQsICh1aW50OF90ICopYnVmLCAwKTsKIAllbHNlCiAJCWJmNXh4X25hbmRfd3JpdGVfYnVmKG10ZCwgYnVmLCBsZW4pOwogfQogCitzdGF0aWMgaW50IGJmNXh4X25hbmRfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJdWludDhfdCAqYnVmLCBpbnQgcGFnZSkKK3sKKwliZjV4eF9uYW5kX3JlYWRfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJYmY1eHhfbmFuZF9yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmY1eHhfbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJY29uc3QgdWludDhfdCAqYnVmKQoreworCWJmNXh4X25hbmRfd3JpdGVfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CisJYmY1eHhfbmFuZF93cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOworfQorCiAvKgogICogU3lzdGVtIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICovCkBAIC02MjcsMTUgKzYzNSwxNCBAQAogCiAJLyogc2V0dXAgTkZDX0NUTCByZWdpc3RlciAqLwogCWRldl9pbmZvKGluZm8tPmRldmljZSwKLQkJInBhZ2Vfc2l6ZT0lZCwgZGF0YV93aWR0aD0lZCwgd3JfZGx5PSVkLCByZF9kbHk9JWRcbiIsCi0JCShwbGF0LT5wYWdlX3NpemUgPyA1MTIgOiAyNTYpLAorCQkiZGF0YV93aWR0aD0lZCwgd3JfZGx5PSVkLCByZF9kbHk9JWRcbiIsCiAJCShwbGF0LT5kYXRhX3dpZHRoID8gMTYgOiA4KSwKIAkJcGxhdC0+d3JfZGx5LCBwbGF0LT5yZF9kbHkpOwogCi0JdmFsID0gKHBsYXQtPnBhZ2Vfc2l6ZSA8PCBORkNfUEdfU0laRV9PRkZTRVQpIHwKKwl2YWwgPSAoMSA8PCBORkNfUEdfU0laRV9PRkZTRVQpIHwKIAkJKHBsYXQtPmRhdGFfd2lkdGggPDwgTkZDX05XSURUSF9PRkZTRVQpIHwKIAkJKHBsYXQtPnJkX2RseSA8PCBORkNfUkRETFlfT0ZGU0VUKSB8Ci0JCShwbGF0LT5yZF9kbHkgPDwgTkZDX1dSRExZX09GRlNFVCk7CisJCShwbGF0LT53cl9kbHkgPDwgTkZDX1dSRExZX09GRlNFVCk7CiAJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJORkNfQ1RMIGlzIDB4JTA0eFxuIiwgdmFsKTsKIAogCWJmaW5fd3JpdGVfTkZDX0NUTCh2YWwpOwpAQCAtNjk4LDYgKzcwNSwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJmNXh4X25hbmRfc2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBuYW5kX3NjYW5faWRlbnQobXRkLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGhhcmR3YXJlX2VjYykgeworCQkvKgorCQkgKiBmb3IgbmFuZCB3aXRoIHBhZ2Ugc2l6ZSA+IDUxMkIsIHRoaW5rIGl0IGFzIHNldmVyYWwgc2VjdGlvbnMgd2l0aCA1MTJCCisJCSAqLworCQlpZiAobGlrZWx5KG10ZC0+d3JpdGVzaXplID49IDUxMikpIHsKKwkJCWNoaXAtPmVjYy5zaXplID0gNTEyOworCQkJY2hpcC0+ZWNjLmJ5dGVzID0gNjsKKwkJfSBlbHNlIHsKKwkJCWNoaXAtPmVjYy5zaXplID0gMjU2OworCQkJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKKwkJCWJmaW5fd3JpdGVfTkZDX0NUTChiZmluX3JlYWRfTkZDX0NUTCgpICYgfigxIDw8IE5GQ19QR19TSVpFX09GRlNFVCkpOworCQkJU1NZTkMoKTsKKwkJfQorCX0KKworCXJldHVybgluYW5kX3NjYW5fdGFpbChtdGQpOworfQorCiAvKgogICogYmY1eHhfbmFuZF9wcm9iZQogICoKQEAgLTc4MywyNyArODE3LDIwIEBACiAJCWNoaXAtPmJhZGJsb2NrX3BhdHRlcm4gPSAmYm9vdHJvbV9iYnQ7CiAJCWNoaXAtPmVjYy5sYXlvdXQgPSAmYm9vdHJvbV9lY2NsYXlvdXQ7CiAjZW5kaWYKLQotCQlpZiAocGxhdC0+cGFnZV9zaXplID09IE5GQ19QR19TSVpFXzI1NikgewotCQkJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKLQkJCWNoaXAtPmVjYy5zaXplID0gMjU2OwotCQl9IGVsc2UgaWYgKHBsYXQtPnBhZ2Vfc2l6ZSA9PSBORkNfUEdfU0laRV81MTIpIHsKLQkJCWNoaXAtPmVjYy5ieXRlcyA9IDY7Ci0JCQljaGlwLT5lY2Muc2l6ZSA9IDUxMjsKLQkJfQotCiAJCWNoaXAtPnJlYWRfYnVmICAgICAgPSBiZjV4eF9uYW5kX2RtYV9yZWFkX2J1ZjsKIAkJY2hpcC0+d3JpdGVfYnVmICAgICA9IGJmNXh4X25hbmRfZG1hX3dyaXRlX2J1ZjsKIAkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IGJmNXh4X25hbmRfY2FsY3VsYXRlX2VjYzsKIAkJY2hpcC0+ZWNjLmNvcnJlY3QgICA9IGJmNXh4X25hbmRfY29ycmVjdF9kYXRhOwogCQljaGlwLT5lY2MubW9kZQkgICAgPSBOQU5EX0VDQ19IVzsKIAkJY2hpcC0+ZWNjLmh3Y3RsCSAgICA9IGJmNXh4X25hbmRfZW5hYmxlX2h3ZWNjOworCQljaGlwLT5lY2MucmVhZF9wYWdlX3JhdyA9IGJmNXh4X25hbmRfcmVhZF9wYWdlX3JhdzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2VfcmF3ID0gYmY1eHhfbmFuZF93cml0ZV9wYWdlX3JhdzsKIAl9IGVsc2UgewogCQljaGlwLT5lY2MubW9kZQkgICAgPSBOQU5EX0VDQ19TT0ZUOwogCX0KIAogCS8qIHNjYW4gaGFyZHdhcmUgbmFuZCBjaGlwIGFuZCBzZXR1cCBtdGQgaW5mbyBkYXRhIHN0cnVjdCAqLwotCWlmIChuYW5kX3NjYW4obXRkLCAxKSkgeworCWlmIChiZjV4eF9uYW5kX3NjYW4obXRkKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2Vycl9uYW5kX3NjYW47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvZGF2aW5jaV9uYW5kLmMKaW5kZXggOWM5ZDg5My4uMmFjNzM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2RhdmluY2lfbmFuZC5jCkBAIC0zMTEsNyArMzExLDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBlY2MxMFs4XTsKIAl1bnNpZ25lZCBzaG9ydCAqZWNjMTY7CiAJdTMyIHN5bmRyb21lWzRdOworCXUzMiBlY2Nfc3RhdGU7CiAJdW5zaWduZWQgbnVtX2Vycm9ycywgY29ycmVjdGVkOworCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDApOwogCiAJLyogQWxsIGJ5dGVzIDB4ZmY/ICBJdCdzIGFuIGVyYXNlZCBwYWdlOyBpZ25vcmUgaXRzIEVDQy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewpAQCAtMzYxLDYgKzM2MywyMSBAQAogCSAqLwogCWRhdmluY2lfbmFuZF93cml0ZWwoaW5mbywgTkFOREZDUl9PRkZTRVQsCiAJCQlkYXZpbmNpX25hbmRfcmVhZGwoaW5mbywgTkFOREZDUl9PRkZTRVQpIHwgQklUKDEzKSk7CisKKwkvKgorCSAqIEVDQ19TVEFURSBmaWVsZCByZWFkcyAweDMgKEVycm9yIGNvcnJlY3Rpb24gY29tcGxldGUpIGltbWVkaWF0ZWx5CisJICogYWZ0ZXIgc2V0dGluZyB0aGUgNEJJVEVDQ19BRERfQ0FMQ19TVEFSVCBiaXQuIFNvIGlmIHlvdSBpbW1lZGlhdGVseQorCSAqIGJlZ2luIHRyeWluZyB0byBwb2xsIGZvciB0aGUgc3RhdGUsIHlvdSBtYXkgZmFsbCByaWdodCBvdXQgb2YgeW91cgorCSAqIGxvb3Agd2l0aG91dCBhbnkgb2YgdGhlIGNvcnJlY3Rpb24gY2FsY3VsYXRpb25zIGhhdmluZyB0YWtlbiBwbGFjZS4KKwkgKiBUaGUgcmVjb21tZW5kYXRpb24gZnJvbSB0aGUgaGFyZHdhcmUgdGVhbSBpcyB0byB3YWl0IHRpbGwgRUNDX1NUQVRFCisJICogcmVhZHMgbGVzcyB0aGFuIDQsIHdoaWNoIG1lYW5zIEVDQyBIVyBoYXMgZW50ZXJlZCBjb3JyZWN0aW9uIHN0YXRlLgorCSAqLworCWRvIHsKKwkJZWNjX3N0YXRlID0gKGRhdmluY2lfbmFuZF9yZWFkbChpbmZvLAorCQkJCU5BTkRGU1JfT0ZGU0VUKSA+PiA4KSAmIDB4MGY7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKChlY2Nfc3RhdGUgPCA0KSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lbykpOworCiAJZm9yICg7OykgewogCQl1MzIJZnNyID0gZGF2aW5jaV9uYW5kX3JlYWRsKGluZm8sIE5BTkRGU1JfT0ZGU0VUKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuYyBiL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmMKaW5kZXggM2RmZGE5Yy4uNjE4ZmI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMjksMTUgKzMwLDE1IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLyogV2UgZGVmaW5lIGEgbW9kdWxlIHBhcmFtZXRlciB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBvdmVycmlkZSAKKy8qIFdlIGRlZmluZSBhIG1vZHVsZSBwYXJhbWV0ZXIgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKICAqIHRoZSBoYXJkd2FyZSBhbmQgZGVjaWRlIHdoYXQgdGltaW5nIG1vZGUgc2hvdWxkIGJlIHVzZWQuCiAgKi8KICNkZWZpbmUgTkFORF9ERUZBVUxUX1RJTUlOR1MJLTEKIAogc3RhdGljIGludCBvbmZpX3RpbWluZ19tb2RlID0gTkFORF9ERUZBVUxUX1RJTUlOR1M7CiBtb2R1bGVfcGFyYW0ob25maV90aW1pbmdfbW9kZSwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0Mob25maV90aW1pbmdfbW9kZSwgIk92ZXJyaWRlcyBkZWZhdWx0IE9ORkkgc2V0dGluZy4gLTEgaW5kaWNhdGVzIgotCQkJCQkiIHVzZSBkZWZhdWx0IHRpbWluZ3MiKTsKK01PRFVMRV9QQVJNX0RFU0Mob25maV90aW1pbmdfbW9kZSwgIk92ZXJyaWRlcyBkZWZhdWx0IE9ORkkgc2V0dGluZy4iCisJCQkiIC0xIGluZGljYXRlcyB1c2UgZGVmYXVsdCB0aW1pbmdzIik7CiAKICNkZWZpbmUgREVOQUxJX05BTkRfTkFNRSAgICAiZGVuYWxpLW5hbmQiCiAKQEAgLTU0LDEzICs1NSwxMyBAQAogCQkJSU5UUl9TVEFUVVMwX19SU1RfQ09NUCB8IFwKIAkJCUlOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUCkKIAotLyogaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBpbnRlcm5hbCB2YWx1ZSBmb3IgdGhlIGZsYXNoIGJhbmsgaXMgCisvKiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGludGVybmFsIHZhbHVlIGZvciB0aGUgZmxhc2ggYmFuayBpcwogICAgdmFsaWQgb3Igbm90ICovCi0jZGVmaW5lIENISVBfU0VMRUNUX0lOVkFMSUQgCS0xCisjZGVmaW5lIENISVBfU0VMRUNUX0lOVkFMSUQJLTEKIAogI2RlZmluZSBTVVBQT1JUXzhCSVRFQ0MJCTEKIAotLyogVGhpcyBtYWNybyBkaXZpZGVzIHR3byBpbnRlZ2VycyBhbmQgcm91bmRzIGZyYWN0aW9uYWwgdmFsdWVzIHVwIAorLyogVGhpcyBtYWNybyBkaXZpZGVzIHR3byBpbnRlZ2VycyBhbmQgcm91bmRzIGZyYWN0aW9uYWwgdmFsdWVzIHVwCiAgKiB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHZhbHVlLiAqLwogI2RlZmluZSBDRUlMX0RJVihYLCBZKSAoKChYKSUoWSkpID8gKChYKS8oWSkrMSkgOiAoKFgpLyhZKSkpCiAKQEAgLTgzLDcgKzg0LDcgQEAKICNkZWZpbmUgQUREUl9DWUNMRQkxCiAjZGVmaW5lIFNUQVRVU19DWUNMRQkyCiAKLS8qIHRoaXMgaXMgYSBoZWxwZXIgbWFjcm8gdGhhdCBhbGxvd3MgdXMgdG8gCisvKiB0aGlzIGlzIGEgaGVscGVyIG1hY3JvIHRoYXQgYWxsb3dzIHVzIHRvCiAgKiBmb3JtYXQgdGhlIGJhbmsgaW50byB0aGUgcHJvcGVyIGJpdHMgZm9yIHRoZSBjb250cm9sbGVyICovCiAjZGVmaW5lIEJBTksoeCkgKCh4KSA8PCAyNCkKIApAQCAtOTUsNTkgKzk2LDY0IEBACiB9OwogCiAKLS8qIHRoZXNlIGFyZSBzdGF0aWMgbG9va3VwIHRhYmxlcyB0aGF0IGdpdmUgdXMgZWFzeSBhY2Nlc3MgdG8gCi0gICByZWdpc3RlcnMgaW4gdGhlIE5BTkQgY29udHJvbGxlci4gIAorLyogdGhlc2UgYXJlIHN0YXRpYyBsb29rdXAgdGFibGVzIHRoYXQgZ2l2ZSB1cyBlYXN5IGFjY2VzcyB0bworICAgcmVnaXN0ZXJzIGluIHRoZSBOQU5EIGNvbnRyb2xsZXIuCiAgKi8KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLCAKLQkJCQkJCSAgSU5UUl9TVEFUVVMxLCAKLQkJCQkJICAgICAJICBJTlRSX1NUQVRVUzIsIAorc3RhdGljIGNvbnN0IHVpbnQzMl90IGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCQkJCQkgIElOVFJfU1RBVFVTMSwKKwkJCQkJCSAgSU5UUl9TVEFUVVMyLAogCQkJCQkJICBJTlRSX1NUQVRVUzN9OwogCiBzdGF0aWMgY29uc3QgdWludDMyX3QgZGV2aWNlX3Jlc2V0X2JhbmtzWzRdID0ge0RFVklDRV9SRVNFVF9fQkFOSzAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRV9SRVNFVF9fQkFOSzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRV9SRVNFVF9fQkFOSzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVklDRV9SRVNFVF9fQkFOSzN9OworCQkJCQkJCURFVklDRV9SRVNFVF9fQkFOSzEsCisJCQkJCQkJREVWSUNFX1JFU0VUX19CQU5LMiwKKwkJCQkJCQlERVZJQ0VfUkVTRVRfX0JBTkszfTsKIAogc3RhdGljIGNvbnN0IHVpbnQzMl90IG9wZXJhdGlvbl90aW1lb3V0WzRdID0ge0lOVFJfU1RBVFVTMF9fVElNRV9PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAgIElOVFJfU1RBVFVTMV9fVElNRV9PVVQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfU1RBVFVTMl9fVElNRV9PVVQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfU1RBVFVTM19fVElNRV9PVVR9OworCQkJCQkJCUlOVFJfU1RBVFVTMV9fVElNRV9PVVQsCisJCQkJCQkJSU5UUl9TVEFUVVMyX19USU1FX09VVCwKKwkJCQkJCQlJTlRSX1NUQVRVUzNfX1RJTUVfT1VUfTsKIAogc3RhdGljIGNvbnN0IHVpbnQzMl90IHJlc2V0X2NvbXBsZXRlWzRdID0ge0lOVFJfU1RBVFVTMF9fUlNUX0NPTVAsCi0gICAgICAgICAgICAgICAgCQkgICAgICAgICAgIElOVFJfU1RBVFVTMV9fUlNUX0NPTVAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfU1RBVFVTMl9fUlNUX0NPTVAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfU1RBVFVTM19fUlNUX0NPTVB9OworCQkJCQkJCUlOVFJfU1RBVFVTMV9fUlNUX0NPTVAsCisJCQkJCQkJSU5UUl9TVEFUVVMyX19SU1RfQ09NUCwKKwkJCQkJCQlJTlRSX1NUQVRVUzNfX1JTVF9DT01QfTsKIAogLyogc3BlY2lmaWVzIHRoZSBkZWJ1ZyBsZXZlbCBvZiB0aGUgZHJpdmVyICovCi1zdGF0aWMgaW50IG5hbmRfZGVidWdfbGV2ZWwgPSAwOworc3RhdGljIGludCBuYW5kX2RlYnVnX2xldmVsOwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwogc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0cyhzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKTsKLXN0YXRpYyB1aW50MzJfdCB3YWl0X2Zvcl9pcnEoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDMyX3QgaXJxX21hc2spOwotc3RhdGljIHZvaWQgZGVuYWxpX2lycV9lbmFibGUoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDMyX3QgaW50X21hc2spOworc3RhdGljIHVpbnQzMl90IHdhaXRfZm9yX2lycShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLAorCQkJCQkJCXVpbnQzMl90IGlycV9tYXNrKTsKK3N0YXRpYyB2b2lkIGRlbmFsaV9pcnFfZW5hYmxlKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCisJCQkJCQkJdWludDMyX3QgaW50X21hc2spOwogc3RhdGljIHVpbnQzMl90IHJlYWRfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKTsKIAogI2RlZmluZSBERUJVR19ERU5BTEkgMAogCiAvKiBUaGlzIGlzIGEgd3JhcHBlciBmb3Igd3JpdGluZyB0byB0aGUgZGVuYWxpIHJlZ2lzdGVycy4KICAqIHRoaXMgYWxsb3dzIHVzIHRvIGNyZWF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBzbyB3ZSBjYW4KLSAqIG9ic2VydmUgaG93IHRoZSBkcml2ZXIgaXMgcHJvZ3JhbW1pbmcgdGhlIGRldmljZS4gCisgKiBvYnNlcnZlIGhvdyB0aGUgZHJpdmVyIGlzIHByb2dyYW1taW5nIHRoZSBkZXZpY2UuCiAgKiBpdCB1c2VzIHN0YW5kYXJkIGxpbnV4IGNvbnZlbnRpb24gZm9yICh2YWwsIGFkZHIpICovCiBzdGF0aWMgdm9pZCBkZW5hbGlfd3JpdGUzMih1aW50MzJfdCB2YWx1ZSwgdm9pZCAqYWRkcikKIHsKLQlpb3dyaXRlMzIodmFsdWUsIGFkZHIpOwkKKwlpb3dyaXRlMzIodmFsdWUsIGFkZHIpOwogCiAjaWYgREVCVUdfREVOQUxJCi0JcHJpbnRrKEtFUk5fRVJSICJ3cm90ZTogMHgleCAtPiAweCV4XG4iLCB2YWx1ZSwgKHVpbnQzMl90KSgodWludDMyX3QpYWRkciAmIDB4MWZmZikpOworCXByaW50ayhLRVJOX0lORk8gIndyb3RlOiAweCV4IC0+IDB4JXhcbiIsIHZhbHVlLAorCQkJKHVpbnQzMl90KSgodWludDMyX3QpYWRkciAmIDB4MWZmZikpOwogI2VuZGlmCi19IAorfQogCi0vKiBDZXJ0YWluIG9wZXJhdGlvbnMgZm9yIHRoZSBkZW5hbGkgTkFORCBjb250cm9sbGVyIHVzZSBhbiBpbmRleGVkIG1vZGUgdG8gcmVhZC93cml0ZSAKLSAgIGRhdGEuIFRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGJ5IHdyaXRpbmcgdGhlIGFkZHJlc3MgdmFsdWUgb2YgdGhlIGNvbW1hbmQgdG8gCi0gICB0aGUgZGV2aWNlIG1lbW9yeSBmb2xsb3dlZCBieSB0aGUgZGF0YS4gVGhpcyBmdW5jdGlvbiBhYnN0cmFjdHMgdGhpcyBjb21tb24gCi0gICBvcGVyYXRpb24uIAorLyogQ2VydGFpbiBvcGVyYXRpb25zIGZvciB0aGUgZGVuYWxpIE5BTkQgY29udHJvbGxlciB1c2UKKyAqIGFuIGluZGV4ZWQgbW9kZSB0byByZWFkL3dyaXRlIGRhdGEuIFRoZSBvcGVyYXRpb24gaXMKKyAqIHBlcmZvcm1lZCBieSB3cml0aW5nIHRoZSBhZGRyZXNzIHZhbHVlIG9mIHRoZSBjb21tYW5kCisgKiB0byB0aGUgZGV2aWNlIG1lbW9yeSBmb2xsb3dlZCBieSB0aGUgZGF0YS4gVGhpcyBmdW5jdGlvbgorICogYWJzdHJhY3RzIHRoaXMgY29tbW9uIG9wZXJhdGlvbi4KICovCi1zdGF0aWMgdm9pZCBpbmRleF9hZGRyKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksIHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IGRhdGEpCitzdGF0aWMgdm9pZCBpbmRleF9hZGRyKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCisJCQkJdWludDMyX3QgYWRkcmVzcywgdWludDMyX3QgZGF0YSkKIHsKIAlkZW5hbGlfd3JpdGUzMihhZGRyZXNzLCBkZW5hbGktPmZsYXNoX21lbSk7CiAJZGVuYWxpX3dyaXRlMzIoZGF0YSwgZGVuYWxpLT5mbGFzaF9tZW0gKyAweDEwKTsKQEAgLTE2MSw3ICsxNjcsNyBAQAogCSpwZGF0YSA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfbWVtICsgMHgxMCk7CiB9CiAKLS8qIFdlIG5lZWQgdG8gYnVmZmVyIHNvbWUgZGF0YSBmb3Igc29tZSBvZiB0aGUgTkFORCBjb3JlIHJvdXRpbmVzLiAKKy8qIFdlIG5lZWQgdG8gYnVmZmVyIHNvbWUgZGF0YSBmb3Igc29tZSBvZiB0aGUgTkFORCBjb3JlIHJvdXRpbmVzLgogICogVGhlIG9wZXJhdGlvbnMgbWFuYWdlIGJ1ZmZlcmluZyB0aGF0IGRhdGEuICovCiBzdGF0aWMgdm9pZCByZXNldF9idWYoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSkKIHsKQEAgLTE4Myw3ICsxODksNyBAQAogCXJlc2V0X2J1ZihkZW5hbGkpOwogCiAJLyogaW5pdGlhdGUgYSBkZXZpY2Ugc3RhdHVzIHJlYWQgKi8KLQljbWQgPSBNT0RFXzExIHwgQkFOSyhkZW5hbGktPmZsYXNoX2JhbmspOyAKKwljbWQgPSBNT0RFXzExIHwgQkFOSyhkZW5hbGktPmZsYXNoX2JhbmspOwogCWluZGV4X2FkZHIoZGVuYWxpLCBjbWQgfCBDT01NQU5EX0NZQ0xFLCAweDcwKTsKIAlkZW5hbGlfd3JpdGUzMihjbWQgfCBTVEFUVVNfQ1lDTEUsIGRlbmFsaS0+Zmxhc2hfbWVtKTsKIApAQCAtMTkxLDcgKzE5Nyw4IEBACiAJd3JpdGVfYnl0ZV90b19idWYoZGVuYWxpLCBpb3JlYWQzMihkZW5hbGktPmZsYXNoX21lbSArIDB4MTApKTsKIAogI2lmIERFQlVHX0RFTkFMSQotCXByaW50aygiZGV2aWNlIHJlcG9ydGluZyBzdGF0dXMgdmFsdWUgb2YgMHglMnhcbiIsIGRlbmFsaS0+YnVmLmJ1ZlswXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZGV2aWNlIHJlcG9ydGluZyBzdGF0dXMgdmFsdWUgb2YgMHglMnhcbiIsCisJCQlkZW5hbGktPmJ1Zi5idWZbMF0pOwogI2VuZGlmCiB9CiAKQEAgLTE5OSw3ICsyMDYsNyBAQAogc3RhdGljIHZvaWQgcmVzZXRfYmFuayhzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogewogCXVpbnQzMl90IGlycV9zdGF0dXMgPSAwOwotCXVpbnQzMl90IGlycV9tYXNrID0gcmVzZXRfY29tcGxldGVbZGVuYWxpLT5mbGFzaF9iYW5rXSB8IAorCXVpbnQzMl90IGlycV9tYXNrID0gcmVzZXRfY29tcGxldGVbZGVuYWxpLT5mbGFzaF9iYW5rXSB8CiAJCQkgICAgb3BlcmF0aW9uX3RpbWVvdXRbZGVuYWxpLT5mbGFzaF9iYW5rXTsKIAlpbnQgYmFuayA9IDA7CiAKQEAgLTIwOSwxNSArMjE2LDEzIEBACiAJZGVuYWxpX3dyaXRlMzIoYmFuaywgZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfUkVTRVQpOwogCiAJaXJxX3N0YXR1cyA9IHdhaXRfZm9yX2lycShkZW5hbGksIGlycV9tYXNrKTsKLQkKKwogCWlmIChpcnFfc3RhdHVzICYgb3BlcmF0aW9uX3RpbWVvdXRbZGVuYWxpLT5mbGFzaF9iYW5rXSkKLQl7CiAJCXByaW50ayhLRVJOX0VSUiAicmVzZXQgYmFuayBmYWlsZWQuXG4iKTsKLQl9CiB9CiAKIC8qIFJlc2V0IHRoZSBmbGFzaCBjb250cm9sbGVyICovCi1zdGF0aWMgdWludDE2X3QgTkFORF9GbGFzaF9SZXNldChzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQorc3RhdGljIHVpbnQxNl90IGRlbmFsaV9uYW5kX3Jlc2V0KHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpCiB7CiAJdWludDMyX3QgaTsKIApAQCAtMjI5LDggKzIzNCwxMCBAQAogCQlkZW5hbGktPmZsYXNoX3JlZyArIGludHJfc3RhdHVzX2FkZHJlc3Nlc1tpXSk7CiAKIAlmb3IgKGkgPSAwIDsgaSA8IExMRF9NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotCQlkZW5hbGlfd3JpdGUzMihkZXZpY2VfcmVzZXRfYmFua3NbaV0sIGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1JFU0VUKTsKLQkJd2hpbGUgKCEoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBpbnRyX3N0YXR1c19hZGRyZXNzZXNbaV0pICYKKwkJZGVuYWxpX3dyaXRlMzIoZGV2aWNlX3Jlc2V0X2JhbmtzW2ldLAorCQkJCWRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1JFU0VUKTsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKworCQkJCQkJaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ldKSAmCiAJCQkocmVzZXRfY29tcGxldGVbaV0gfCBvcGVyYXRpb25fdGltZW91dFtpXSkpKQogCQkJOwogCQlpZiAoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBpbnRyX3N0YXR1c19hZGRyZXNzZXNbaV0pICYKQEAgLTI0NiwxMSArMjUzLDEyIEBACiAJcmV0dXJuIFBBU1M7CiB9CiAKLS8qIHRoaXMgcm91dGluZSBjYWxjdWxhdGVzIHRoZSBPTkZJIHRpbWluZyB2YWx1ZXMgZm9yIGEgZ2l2ZW4gbW9kZSBhbmQgcHJvZ3JhbXMKLSAqIHRoZSBjbG9ja2luZyByZWdpc3RlciBhY2NvcmRpbmdseS4gVGhlIG1vZGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZ2V0X29uZmlfbmFuZF9wYXJhCi0gICByb3V0aW5lLgorLyogdGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgdGhlIE9ORkkgdGltaW5nIHZhbHVlcyBmb3IgYSBnaXZlbiBtb2RlIGFuZAorICogcHJvZ3JhbXMgdGhlIGNsb2NraW5nIHJlZ2lzdGVyIGFjY29yZGluZ2x5LiBUaGUgbW9kZSBpcyBkZXRlcm1pbmVkIGJ5CisgKiB0aGUgZ2V0X29uZmlfbmFuZF9wYXJhIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIE5BTkRfT05GaV9UaW1pbmdfTW9kZShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLCB1aW50MTZfdCBtb2RlKQorc3RhdGljIHZvaWQgbmFuZF9vbmZpX3RpbWluZ19zZXQoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwKKwkJCQkJCQkJdWludDE2X3QgbW9kZSkKIHsKIAl1aW50MTZfdCBUcmVhWzZdID0gezQwLCAzMCwgMjUsIDIwLCAyMCwgMTZ9OwogCXVpbnQxNl90IFRycFs2XSA9IHs1MCwgMjUsIDE3LCAxNSwgMTIsIDEwfTsKQEAgLTM0NywxMzYgKzM1NSwyNCBAQAogCWRlbmFsaV93cml0ZTMyKGNzX2NudCwgZGVuYWxpLT5mbGFzaF9yZWcgKyBDU19TRVRVUF9DTlQpOwogfQogCi0vKiBjb25maWd1cmVzIHRoZSBpbml0aWFsIEVDQyBzZXR0aW5ncyBmb3IgdGhlIGNvbnRyb2xsZXIgKi8KLXN0YXRpYyB2b2lkIHNldF9lY2NfY29uZmlnKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpCi17Ci0jaWYgU1VQUE9SVF84QklURUNDCi0JaWYgKChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIERFVklDRV9NQUlOX0FSRUFfU0laRSkgPCA0MDk2KSB8fAotCQkoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKSA8PSAxMjgpKQotCQlkZW5hbGlfd3JpdGUzMig4LCBkZW5hbGktPmZsYXNoX3JlZyArIEVDQ19DT1JSRUNUSU9OKTsKLSNlbmRpZgotCi0JaWYgKChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIEVDQ19DT1JSRUNUSU9OKSAmIEVDQ19DT1JSRUNUSU9OX19WQUxVRSkKLQkJPT0gMSkgewotCQlkZW5hbGktPmRldl9pbmZvLndFQ0NCeXRlc1BlclNlY3RvciA9IDQ7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yICo9IGRlbmFsaS0+ZGV2X2luZm8ud0RldmljZXNDb25uZWN0ZWQ7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud051bVBhZ2VTcGFyZUZsYWcgPQotCQkJZGVuYWxpLT5kZXZfaW5mby53UGFnZVNwYXJlU2l6ZSAtCi0JCQlkZW5hbGktPmRldl9pbmZvLndQYWdlRGF0YVNpemUgLwotCQkJKEVDQ19TRUNUT1JfU0laRSAqIGRlbmFsaS0+ZGV2X2luZm8ud0RldmljZXNDb25uZWN0ZWQpICoKLQkJCWRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yCi0JCQktIGRlbmFsaS0+ZGV2X2luZm8ud1NwYXJlU2tpcEJ5dGVzOwotCX0gZWxzZSB7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yID0KLQkJCShpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIEVDQ19DT1JSRUNUSU9OKSAmCi0JCQlFQ0NfQ09SUkVDVElPTl9fVkFMVUUpICogMTMgLyA4OwotCQlpZiAoKGRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yKSAlIDIgPT0gMCkKLQkJCWRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yICs9IDI7Ci0JCWVsc2UKLQkJCWRlbmFsaS0+ZGV2X2luZm8ud0VDQ0J5dGVzUGVyU2VjdG9yICs9IDE7Ci0KLQkJZGVuYWxpLT5kZXZfaW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgKj0gZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlc0Nvbm5lY3RlZDsKLQkJZGVuYWxpLT5kZXZfaW5mby53TnVtUGFnZVNwYXJlRmxhZyA9IGRlbmFsaS0+ZGV2X2luZm8ud1BhZ2VTcGFyZVNpemUgLQotCQkJZGVuYWxpLT5kZXZfaW5mby53UGFnZURhdGFTaXplIC8KLQkJCShFQ0NfU0VDVE9SX1NJWkUgKiBkZW5hbGktPmRldl9pbmZvLndEZXZpY2VzQ29ubmVjdGVkKSAqCi0JCQlkZW5hbGktPmRldl9pbmZvLndFQ0NCeXRlc1BlclNlY3RvcgotCQkJLSBkZW5hbGktPmRldl9pbmZvLndTcGFyZVNraXBCeXRlczsKLQl9Ci19Ci0KIC8qIHF1ZXJpZXMgdGhlIE5BTkQgZGV2aWNlIHRvIHNlZSB3aGF0IE9ORkkgbW9kZXMgaXQgc3VwcG9ydHMuICovCiBzdGF0aWMgdWludDE2X3QgZ2V0X29uZmlfbmFuZF9wYXJhKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpCiB7CiAJaW50IGk7Ci0JdWludDE2X3QgYmxrc19sdW5fbCwgYmxrc19sdW5faCwgbl9vZl9sdW5zOwotCXVpbnQzMl90IGJsb2NrcGVybHVuLCBpZDsKLQotCWRlbmFsaV93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzAsIGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1JFU0VUKTsKLQotCXdoaWxlICghKChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMCkgJgotCQlJTlRSX1NUQVRVUzBfX1JTVF9DT01QKSB8Ci0JCShpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMCkgJgotCQlJTlRSX1NUQVRVUzBfX1RJTUVfT1VUKSkpCi0JCTsKLQotCWlmIChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMCkgJiBJTlRSX1NUQVRVUzBfX1JTVF9DT01QKSB7Ci0JCWRlbmFsaV93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzEsIGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1JFU0VUKTsKLQkJd2hpbGUgKCEoKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgSU5UUl9TVEFUVVMxKSAmCi0JCQlJTlRSX1NUQVRVUzFfX1JTVF9DT01QKSB8Ci0JCQkoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBJTlRSX1NUQVRVUzEpICYKLQkJCUlOVFJfU1RBVFVTMV9fVElNRV9PVVQpKSkKLQkJCTsKLQotCQlpZiAoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBJTlRSX1NUQVRVUzEpICYKLQkJCUlOVFJfU1RBVFVTMV9fUlNUX0NPTVApIHsKLQkJCWRlbmFsaV93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzIsCi0JCQkJZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfUkVTRVQpOwotCQkJd2hpbGUgKCEoKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgSU5UUl9TVEFUVVMyKSAmCi0JCQkJSU5UUl9TVEFUVVMyX19SU1RfQ09NUCkgfAotCQkJCShpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMikgJgotCQkJCUlOVFJfU1RBVFVTMl9fVElNRV9PVVQpKSkKLQkJCQk7Ci0KLQkJCWlmIChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMikgJgotCQkJCUlOVFJfU1RBVFVTMl9fUlNUX0NPTVApIHsKLQkJCQlkZW5hbGlfd3JpdGUzMihERVZJQ0VfUkVTRVRfX0JBTkszLAotCQkJCQlkZW5hbGktPmZsYXNoX3JlZyArIERFVklDRV9SRVNFVCk7Ci0JCQkJd2hpbGUgKCEoKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgSU5UUl9TVEFUVVMzKSAmCi0JCQkJCUlOVFJfU1RBVFVTM19fUlNUX0NPTVApIHwKLQkJCQkJKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgSU5UUl9TVEFUVVMzKSAmCi0JCQkJCUlOVFJfU1RBVFVTM19fVElNRV9PVVQpKSkKLQkJCQkJOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIkdldHRpbmcgYSB0aW1lIG91dCBmb3IgYmFuayAyIVxuIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkdldHRpbmcgYSB0aW1lIG91dCBmb3IgYmFuayAxIVxuIik7Ci0JCX0KLQl9Ci0KLQlkZW5hbGlfd3JpdGUzMihJTlRSX1NUQVRVUzBfX1RJTUVfT1VULCBkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMCk7Ci0JZGVuYWxpX3dyaXRlMzIoSU5UUl9TVEFUVVMxX19USU1FX09VVCwgZGVuYWxpLT5mbGFzaF9yZWcgKyBJTlRSX1NUQVRVUzEpOwotCWRlbmFsaV93cml0ZTMyKElOVFJfU1RBVFVTMl9fVElNRV9PVVQsIGRlbmFsaS0+Zmxhc2hfcmVnICsgSU5UUl9TVEFUVVMyKTsKLQlkZW5hbGlfd3JpdGUzMihJTlRSX1NUQVRVUzNfX1RJTUVfT1VULCBkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfU1RBVFVTMyk7Ci0KLQlkZW5hbGktPmRldl9pbmZvLndPTkZJRGV2RmVhdHVyZXMgPQotCQlpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE9ORklfREVWSUNFX0ZFQVRVUkVTKTsKLQlkZW5hbGktPmRldl9pbmZvLndPTkZJT3B0Q29tbWFuZHMgPQotCQlpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE9ORklfT1BUSU9OQUxfQ09NTUFORFMpOwotCWRlbmFsaS0+ZGV2X2luZm8ud09ORklUaW1pbmdNb2RlID0KLQkJaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBPTkZJX1RJTUlOR19NT0RFKTsKLQlkZW5hbGktPmRldl9pbmZvLndPTkZJUGdtQ2FjaGVUaW1pbmdNb2RlID0KLQkJaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBPTkZJX1BHTV9DQUNIRV9USU1JTkdfTU9ERSk7Ci0KLQluX29mX2x1bnMgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE9ORklfREVWSUNFX05PX09GX0xVTlMpICYKLQkJT05GSV9ERVZJQ0VfTk9fT0ZfTFVOU19fTk9fT0ZfTFVOUzsKLQlibGtzX2x1bl9sID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9MKTsKLQlibGtzX2x1bl9oID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9VKTsKLQotCWJsb2NrcGVybHVuID0gKGJsa3NfbHVuX2ggPDwgMTYpIHwgYmxrc19sdW5fbDsKLQotCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzID0gbl9vZl9sdW5zICogYmxvY2twZXJsdW47Ci0KKwkvKiB3ZSBuZWVkbid0IHRvIGRvIGEgcmVzZXQgaGVyZSBiZWNhdXNlIGRyaXZlciBoYXMgYWxyZWFkeQorCSAqIHJlc2V0IGFsbCB0aGUgYmFua3MgYmVmb3JlCisJICogKi8KIAlpZiAoIShpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE9ORklfVElNSU5HX01PREUpICYKIAkJT05GSV9USU1JTkdfTU9ERV9fVkFMVUUpKQogCQlyZXR1cm4gRkFJTDsKIAogCWZvciAoaSA9IDU7IGkgPiAwOyBpLS0pIHsKLQkJaWYgKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgT05GSV9USU1JTkdfTU9ERSkgJiAoMHgwMSA8PCBpKSkKKwkJaWYgKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgT05GSV9USU1JTkdfTU9ERSkgJgorCQkJKDB4MDEgPDwgaSkpCiAJCQlicmVhazsKIAl9CiAKLQlOQU5EX09ORmlfVGltaW5nX01vZGUoZGVuYWxpLCBpKTsKLQotCWluZGV4X2FkZHIoZGVuYWxpLCBNT0RFXzExIHwgMCwgMHg5MCk7Ci0JaW5kZXhfYWRkcihkZW5hbGksIE1PREVfMTEgfCAxLCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWluZGV4X2FkZHJfcmVhZF9kYXRhKGRlbmFsaSwgTU9ERV8xMSB8IDIsICZpZCk7Ci0KLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIjNyZCBJRDogMHgleFxuIiwgaWQpOwotCi0JZGVuYWxpLT5kZXZfaW5mby5NTENEZXZpY2UgPSBpZCAmIDB4MEM7CisJbmFuZF9vbmZpX3RpbWluZ19zZXQoZGVuYWxpLCBpKTsKIAogCS8qIEJ5IG5vdywgYWxsIHRoZSBPTkZJIGRldmljZXMgd2Uga25vdyBzdXBwb3J0IHRoZSBwYWdlIGNhY2hlICovCiAJLyogcncgZmVhdHVyZS4gU28gaGVyZSB3ZSBlbmFibGUgdGhlIHBpcGVsaW5lX3J3X2FoZWFkIGZlYXR1cmUgKi8KQEAgLTQ4NiwyNSArMzgyLDEwIEBACiAJcmV0dXJuIFBBU1M7CiB9CiAKLXN0YXRpYyB2b2lkIGdldF9zYW1zdW5nX25hbmRfcGFyYShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQorc3RhdGljIHZvaWQgZ2V0X3NhbXN1bmdfbmFuZF9wYXJhKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCisJCQkJCQkJdWludDhfdCBkZXZpY2VfaWQpCiB7Ci0JdWludDhfdCBub19vZl9wbGFuZXM7Ci0JdWludDMyX3QgYmxrX3NpemU7Ci0JdWludDY0X3QgcGxhbmVfc2l6ZSwgY2FwYWNpdHk7Ci0JdWludDMyX3QgaWRfYnl0ZXNbNV07Ci0JaW50IGk7Ci0KLQlpbmRleF9hZGRyKGRlbmFsaSwgKHVpbnQzMl90KShNT0RFXzExIHwgMCksIDB4OTApOwotCWluZGV4X2FkZHIoZGVuYWxpLCAodWludDMyX3QpKE1PREVfMTEgfCAxKSwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoZGVuYWxpLCAodWludDMyX3QpKE1PREVfMTEgfCAyKSwgJmlkX2J5dGVzW2ldKTsKLQotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAotCQkiSUQgYnl0ZXM6IDB4JXgsIDB4JXgsIDB4JXgsIDB4JXgsIDB4JXhcbiIsCi0JCWlkX2J5dGVzWzBdLCBpZF9ieXRlc1sxXSwgaWRfYnl0ZXNbMl0sCi0JCWlkX2J5dGVzWzNdLCBpZF9ieXRlc1s0XSk7Ci0KLQlpZiAoKGlkX2J5dGVzWzFdICYgMHhmZikgPT0gMHhkMykgeyAvKiBTYW1zdW5nIEs5V0FHMDhVMUEgKi8KKwlpZiAoZGV2aWNlX2lkID09IDB4ZDMpIHsgLyogU2Ftc3VuZyBLOVdBRzA4VTFBICovCiAJCS8qIFNldCB0aW1pbmcgcmVnaXN0ZXIgdmFsdWVzIGFjY29yZGluZyB0byBkYXRhc2hlZXQgKi8KIAkJZGVuYWxpX3dyaXRlMzIoNSwgZGVuYWxpLT5mbGFzaF9yZWcgKyBBQ0NfQ0xLUyk7CiAJCWRlbmFsaV93cml0ZTMyKDIwLCBkZW5hbGktPmZsYXNoX3JlZyArIFJFXzJfV0UpOwpAQCAtNTE0LDE5ICszOTUsMTAgQEAKIAkJZGVuYWxpX3dyaXRlMzIoMiwgZGVuYWxpLT5mbGFzaF9yZWcgKyBSRFdSX0VOX0hJX0NOVCk7CiAJCWRlbmFsaV93cml0ZTMyKDIsIGRlbmFsaS0+Zmxhc2hfcmVnICsgQ1NfU0VUVVBfQ05UKTsKIAl9Ci0KLQlub19vZl9wbGFuZXMgPSAxIDw8ICgoaWRfYnl0ZXNbNF0gJiAweDBjKSA+PiAyKTsKLQlwbGFuZV9zaXplICA9ICh1aW50NjRfdCk2NCA8PCAoKGlkX2J5dGVzWzRdICYgMHg3MCkgPj4gNCk7Ci0JYmxrX3NpemUgPSA2NCA8PCAoKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1BBUkFNXzEpICYgMHgzMCkgPj4gNCk7Ci0JY2FwYWNpdHkgPSAodWludDY0X3QpMTI4ICogcGxhbmVfc2l6ZSAqIG5vX29mX3BsYW5lczsKLQotCWRvX2RpdihjYXBhY2l0eSwgYmxrX3NpemUpOwotCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzID0gY2FwYWNpdHk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldF90b3NoaWJhX25hbmRfcGFyYShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogewotCXZvaWQgX19pb21lbSAqc2NyYXRjaF9yZWc7CiAJdWludDMyX3QgdG1wOwogCiAJLyogV29ya2Fyb3VuZCB0byBmaXggYSBjb250cm9sbGVyIGJ1ZyB3aGljaCByZXBvcnRzIGEgd3JvbmcgKi8KQEAgLTUzNiw4MSArNDA4LDUyIEBACiAJCWRlbmFsaV93cml0ZTMyKDIxNiwgZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKTsKIAkJdG1wID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VTX0NPTk5FQ1RFRCkgKgogCQkJaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKTsKLQkJZGVuYWxpX3dyaXRlMzIodG1wLCBkZW5hbGktPmZsYXNoX3JlZyArIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFKTsKKwkJZGVuYWxpX3dyaXRlMzIodG1wLAorCQkJCWRlbmFsaS0+Zmxhc2hfcmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOwogI2lmIFNVUFBPUlRfMTVCSVRFQ0MKIAkJZGVuYWxpX3dyaXRlMzIoMTUsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0NPUlJFQ1RJT04pOwogI2VsaWYgU1VQUE9SVF84QklURUNDCiAJCWRlbmFsaV93cml0ZTMyKDgsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0NPUlJFQ1RJT04pOwogI2VuZGlmCiAJfQotCi0JLyogQXMgVG9zaGliYSBOQU5EIGNhbiBub3QgcHJvdmlkZSBpdCdzIGJsb2NrIG51bWJlciwgKi8KLQkvKiBzbyBoZXJlIHdlIG5lZWQgdXNlciB0byBwcm92aWRlIHRoZSBjb3JyZWN0IGJsb2NrICovCi0JLyogbnVtYmVyIGluIGEgc2NyYXRjaCByZWdpc3RlciBiZWZvcmUgdGhlIExpbnV4IE5BTkQgKi8KLQkvKiBkcml2ZXIgaXMgbG9hZGVkLiBJZiBubyB2YWxpZCB2YWx1ZSBmb3VuZCBpbiB0aGUgc2NyYXRjaCAqLwotCS8qIHJlZ2lzdGVyLCB0aGVuIHdlIHVzZSBkZWZhdWx0IGJsb2NrIG51bWJlciB2YWx1ZSAqLwotCXNjcmF0Y2hfcmVnID0gaW9yZW1hcF9ub2NhY2hlKFNDUkFUQ0hfUkVHX0FERFIsIFNDUkFUQ0hfUkVHX1NJWkUpOwotCWlmICghc2NyYXRjaF9yZWcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBpb3JlbWFwIGZhaWxlZCBpbiAlcywgTGluZSAlZCIsCi0JCQlfX0ZJTEVfXywgX19MSU5FX18pOwotCQlkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyA9IEdMT0JfSFdDVExfREVGQVVMVF9CTEtTOwotCX0gZWxzZSB7Ci0JCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCi0JCQkiU3BlY3RyYTogaW9yZW1hcCByZWcgYWRkcmVzczogMHglcFxuIiwgc2NyYXRjaF9yZWcpOwotCQlkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyA9IDEgPDwgaW9yZWFkOChzY3JhdGNoX3JlZyk7Ci0JCWlmIChkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyA8IDUxMikKLQkJCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7Ci0JCWlvdW5tYXAoc2NyYXRjaF9yZWcpOwotCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0X2h5bml4X25hbmRfcGFyYShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQorc3RhdGljIHZvaWQgZ2V0X2h5bml4X25hbmRfcGFyYShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLAorCQkJCQkJCXVpbnQ4X3QgZGV2aWNlX2lkKQogewotCXZvaWQgX19pb21lbSAqc2NyYXRjaF9yZWc7CiAJdWludDMyX3QgbWFpbl9zaXplLCBzcGFyZV9zaXplOwogCi0Jc3dpdGNoIChkZW5hbGktPmRldl9pbmZvLndEZXZpY2VJRCkgeworCXN3aXRjaCAoZGV2aWNlX2lkKSB7CiAJY2FzZSAweEQ1OiAvKiBIeW5peCBIMjdVQUc4VDJBLCBIMjdVQkc4VTVBIG9yIEgyN1VDRzhWRkEgKi8KIAljYXNlIDB4RDc6IC8qIEh5bml4IEgyN1VERzhWRU0sIEgyN1VDRzhVRE0gb3IgSDI3VUNHOFY1QSAqLwogCQlkZW5hbGlfd3JpdGUzMigxMjgsIGRlbmFsaS0+Zmxhc2hfcmVnICsgUEFHRVNfUEVSX0JMT0NLKTsKIAkJZGVuYWxpX3dyaXRlMzIoNDA5NiwgZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfTUFJTl9BUkVBX1NJWkUpOwogCQlkZW5hbGlfd3JpdGUzMigyMjQsIGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1NQQVJFX0FSRUFfU0laRSk7Ci0JCW1haW5fc2l6ZSA9IDQwOTYgKiBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIERFVklDRVNfQ09OTkVDVEVEKTsKLQkJc3BhcmVfc2l6ZSA9IDIyNCAqIGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFU19DT05ORUNURUQpOwotCQlkZW5hbGlfd3JpdGUzMihtYWluX3NpemUsIGRlbmFsaS0+Zmxhc2hfcmVnICsgTE9HSUNBTF9QQUdFX0RBVEFfU0laRSk7Ci0JCWRlbmFsaV93cml0ZTMyKHNwYXJlX3NpemUsIGRlbmFsaS0+Zmxhc2hfcmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOworCQltYWluX3NpemUgPSA0MDk2ICoKKwkJCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFU19DT05ORUNURUQpOworCQlzcGFyZV9zaXplID0gMjI0ICoKKwkJCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFU19DT05ORUNURUQpOworCQlkZW5hbGlfd3JpdGUzMihtYWluX3NpemUsCisJCQkJZGVuYWxpLT5mbGFzaF9yZWcgKyBMT0dJQ0FMX1BBR0VfREFUQV9TSVpFKTsKKwkJZGVuYWxpX3dyaXRlMzIoc3BhcmVfc2l6ZSwKKwkJCQlkZW5hbGktPmZsYXNoX3JlZyArIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFKTsKIAkJZGVuYWxpX3dyaXRlMzIoMCwgZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfV0lEVEgpOwogI2lmIFNVUFBPUlRfMTVCSVRFQ0MKIAkJZGVuYWxpX3dyaXRlMzIoMTUsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0NPUlJFQ1RJT04pOwogI2VsaWYgU1VQUE9SVF84QklURUNDCiAJCWRlbmFsaV93cml0ZTMyKDgsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0NPUlJFQ1RJT04pOwogI2VuZGlmCi0JCWRlbmFsaS0+ZGV2X2luZm8uTUxDRGV2aWNlICA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCiAJCQkiU3BlY3RyYTogVW5rbm93biBIeW5peCBOQU5EIChEZXZpY2UgSUQ6IDB4JXgpLiIKIAkJCSJXaWxsIHVzZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgaW5zdGVhZC5cbiIsCi0JCQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VJRCk7Ci0JfQotCi0Jc2NyYXRjaF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoU0NSQVRDSF9SRUdfQUREUiwgU0NSQVRDSF9SRUdfU0laRSk7Ci0JaWYgKCFzY3JhdGNoX3JlZykgewotCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGlvcmVtYXAgZmFpbGVkIGluICVzLCBMaW5lICVkIiwKLQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7Ci0JfSBlbHNlIHsKLQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKLQkJCSJTcGVjdHJhOiBpb3JlbWFwIHJlZyBhZGRyZXNzOiAweCVwXG4iLCBzY3JhdGNoX3JlZyk7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzID0gMSA8PCBpb3JlYWQ4KHNjcmF0Y2hfcmVnKTsKLQkJaWYgKGRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzIDwgNTEyKQotCQkJZGVuYWxpLT5kZXZfaW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUzsKLQkJaW91bm1hcChzY3JhdGNoX3JlZyk7CisJCQlkZXZpY2VfaWQpOwogCX0KIH0KIAogLyogZGV0ZXJtaW5lcyBob3cgbWFueSBOQU5EIGNoaXBzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIGNvbnRyb2xsZXIuIE5vdGUgZm9yCi0gICBJbnRlbCBDRTQxMDAgZGV2aWNlcyB3ZSBkb24ndCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgZGV2aWNlLiAKKyAgIEludGVsIENFNDEwMCBkZXZpY2VzIHdlIGRvbid0IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBkZXZpY2UuCiAgKi8KIHN0YXRpYyB2b2lkIGZpbmRfdmFsaWRfYmFua3Moc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSkKIHsKQEAgLTYyMSw3ICs0NjQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBMTERfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKIAkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCkoTU9ERV8xMSB8IChpIDw8IDI0KSB8IDApLCAweDkwKTsKIAkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCkoTU9ERV8xMSB8IChpIDw8IDI0KSB8IDEpLCAwKTsKLQkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoZGVuYWxpLCAodWludDMyX3QpKE1PREVfMTEgfCAoaSA8PCAyNCkgfCAyKSwgJmlkW2ldKTsKKwkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoZGVuYWxpLAorCQkJCSh1aW50MzJfdCkoTU9ERV8xMSB8IChpIDw8IDI0KSB8IDIpLCAmaWRbaV0pOwogCiAJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAogCQkJIlJldHVybiAxc3QgSUQgZm9yIGJhbmtbJWRdOiAleFxuIiwgaSwgaWRbaV0pOwpAQCAtNjM3LDE0ICs0ODEsMTIgQEAKIAkJfQogCX0KIAotCWlmIChkZW5hbGktPnBsYXRmb3JtID09IElOVEVMX0NFNDEwMCkKLQl7CisJaWYgKGRlbmFsaS0+cGxhdGZvcm0gPT0gSU5URUxfQ0U0MTAwKSB7CiAJCS8qIFBsYXRmb3JtIGxpbWl0YXRpb25zIG9mIHRoZSBDRTQxMDAgZGV2aWNlIGxpbWl0CiAJCSAqIHVzZXJzIHRvIGEgc2luZ2xlIGNoaXAgc29sdXRpb24gZm9yIE5BTkQuCi0gICAgICAgICAgICAgICAgICogTXVsdGljaGlwIHN1cHBvcnQgaXMgbm90IGVuYWJsZWQuIAotCQkgKi8gCi0JCWlmIChkZW5hbGktPnRvdGFsX3VzZWRfYmFua3MgIT0gMSkKLQkJeworCQkgKiBNdWx0aWNoaXAgc3VwcG9ydCBpcyBub3QgZW5hYmxlZC4KKwkJICovCisJCWlmIChkZW5hbGktPnRvdGFsX3VzZWRfYmFua3MgIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJTb3JyeSwgSW50ZWwgQ0U0MTAwIG9ubHkgc3VwcG9ydHMgIgogCQkJCQkiYSBzaW5nbGUgTkFORCBkZXZpY2UuXG4iKTsKIAkJCUJVRygpOwpAQCAtNjU2LDE1MCArNDk4LDYwIEBACiAKIHN0YXRpYyB2b2lkIGRldGVjdF9wYXJ0aXRpb25fZmVhdHVyZShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogeworCS8qIEZvciBNUlNUIHBsYXRmb3JtLCBkZW5hbGktPmZ3YmxrcyByZXByZXNlbnQgdGhlCisJICogbnVtYmVyIG9mIGJsb2NrcyBmaXJtd2FyZSBpcyB0YWtlbiwKKwkgKiBGVyBpcyBpbiBwcm90ZWN0IHBhcnRpdGlvbiBhbmQgTVREIGRyaXZlciBoYXMgbm8KKwkgKiBwZXJtaXNzaW9uIHRvIGFjY2VzcyBpdC4gU28gbGV0IGRyaXZlciBrbm93IGhvdyBtYW55CisJICogYmxvY2tzIGl0IGNhbid0IHRvdWNoLgorCSAqICovCiAJaWYgKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgRkVBVFVSRVMpICYgRkVBVFVSRVNfX1BBUlRJVElPTikgewogCQlpZiAoKGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgUEVSTV9TUkNfSURfMSkgJgogCQkJUEVSTV9TUkNfSURfMV9fU1JDSUQpID09IFNQRUNUUkFfUEFSVElUSU9OX0lEKSB7Ci0JCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9CisJCQlkZW5hbGktPmZ3YmxrcyA9CiAJCQkgICAgKChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE1JTl9NQVhfQkFOS18xKSAmCiAJCQkgICAgICBNSU5fTUFYX0JBTktfMV9fTUlOX1ZBTFVFKSAqCi0JCQkgICAgIGRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzKQorCQkJICAgICBkZW5hbGktPmJsa3NwZXJjaGlwKQogCQkJICAgICsKIAkJCSAgICAoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBNSU5fQkxLX0FERFJfMSkgJgogCQkJICAgIE1JTl9CTEtfQUREUl8xX19WQUxVRSk7Ci0KLQkJCWRlbmFsaS0+ZGV2X2luZm8ud1NwZWN0cmFFbmRCbG9jayA9Ci0JCQkgICAgKCgoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBNSU5fTUFYX0JBTktfMSkgJgotCQkJICAgICAgIE1JTl9NQVhfQkFOS18xX19NQVhfVkFMVUUpID4+IDIpICoKLQkJCSAgICAgZGVuYWxpLT5kZXZfaW5mby53VG90YWxCbG9ja3MpCi0JCQkgICAgKwotCQkJICAgIChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE1BWF9CTEtfQUREUl8xKSAmCi0JCQkgICAgTUFYX0JMS19BRERSXzFfX1ZBTFVFKTsKLQotCQkJZGVuYWxpLT5kZXZfaW5mby53VG90YWxCbG9ja3MgKj0gZGVuYWxpLT50b3RhbF91c2VkX2JhbmtzOwotCi0JCQlpZiAoZGVuYWxpLT5kZXZfaW5mby53U3BlY3RyYUVuZEJsb2NrID49Ci0JCQkgICAgZGVuYWxpLT5kZXZfaW5mby53VG90YWxCbG9ja3MpIHsKLQkJCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhRW5kQmxvY2sgPQotCQkJCSAgICBkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyAtIDE7Ci0JCQl9Ci0KLQkJCWRlbmFsaS0+ZGV2X2luZm8ud0RhdGFCbG9ja051bSA9Ci0JCQkJZGVuYWxpLT5kZXZfaW5mby53U3BlY3RyYUVuZEJsb2NrIC0KLQkJCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhU3RhcnRCbG9jayArIDE7Ci0JCX0gZWxzZSB7Ci0JCQlkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyAqPSBkZW5hbGktPnRvdGFsX3VzZWRfYmFua3M7Ci0JCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9IFNQRUNUUkFfU1RBUlRfQkxPQ0s7Ci0JCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhRW5kQmxvY2sgPQotCQkJCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzIC0gMTsKLQkJCWRlbmFsaS0+ZGV2X2luZm8ud0RhdGFCbG9ja051bSA9Ci0JCQkJZGVuYWxpLT5kZXZfaW5mby53U3BlY3RyYUVuZEJsb2NrIC0KLQkJCQlkZW5hbGktPmRldl9pbmZvLndTcGVjdHJhU3RhcnRCbG9jayArIDE7Ci0JCX0KLQl9IGVsc2UgewotCQlkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyAqPSBkZW5hbGktPnRvdGFsX3VzZWRfYmFua3M7Ci0JCWRlbmFsaS0+ZGV2X2luZm8ud1NwZWN0cmFTdGFydEJsb2NrID0gU1BFQ1RSQV9TVEFSVF9CTE9DSzsKLQkJZGVuYWxpLT5kZXZfaW5mby53U3BlY3RyYUVuZEJsb2NrID0gZGVuYWxpLT5kZXZfaW5mby53VG90YWxCbG9ja3MgLSAxOwotCQlkZW5hbGktPmRldl9pbmZvLndEYXRhQmxvY2tOdW0gPQotCQkJZGVuYWxpLT5kZXZfaW5mby53U3BlY3RyYUVuZEJsb2NrIC0KLQkJCWRlbmFsaS0+ZGV2X2luZm8ud1NwZWN0cmFTdGFydEJsb2NrICsgMTsKLQl9CisJCX0gZWxzZQorCQkJZGVuYWxpLT5md2Jsa3MgPSBTUEVDVFJBX1NUQVJUX0JMT0NLOworCX0gZWxzZQorCQlkZW5hbGktPmZ3YmxrcyA9IFNQRUNUUkFfU1RBUlRfQkxPQ0s7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfZGV2aWNlX2luZm8oc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSkKLXsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgImRlbmFsaS0+ZGV2X2luZm86XG4iKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZU1ha2VyOiAweCV4XG4iLAotCQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VNYWtlcik7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VJRDogMHgleFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlSUQpOwotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlVHlwZTogMHgleFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlVHlwZSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhU3RhcnRCbG9jazogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud1NwZWN0cmFTdGFydEJsb2NrKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmFFbmRCbG9jazogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud1NwZWN0cmFFbmRCbG9jayk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJUb3RhbEJsb2NrczogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud1RvdGFsQmxvY2tzKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBhZ2VzUGVyQmxvY2s6ICVkXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLndQYWdlc1BlckJsb2NrKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBhZ2VTaXplOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53UGFnZVNpemUpOwotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZURhdGFTaXplOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53UGFnZURhdGFTaXplKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBhZ2VTcGFyZVNpemU6ICVkXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLndQYWdlU3BhcmVTaXplKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk51bVBhZ2VTcGFyZUZsYWc6ICVkXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLndOdW1QYWdlU3BhcmVGbGFnKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkVDQ0J5dGVzUGVyU2VjdG9yOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53RUNDQnl0ZXNQZXJTZWN0b3IpOwotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQmxvY2tTaXplOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53QmxvY2tTaXplKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJsb2NrRGF0YVNpemU6ICVkXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLndCbG9ja0RhdGFTaXplKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRhdGFCbG9ja051bTogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud0RhdGFCbG9ja051bSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQbGFuZU51bTogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8uYlBsYW5lTnVtKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZU1haW5BcmVhU2l6ZTogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud0RldmljZU1haW5BcmVhU2l6ZSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VTcGFyZUFyZWFTaXplOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlU3BhcmVBcmVhU2l6ZSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VzQ29ubmVjdGVkOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VXaWR0aDogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud0RldmljZVdpZHRoKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkhXUmV2aXNpb246IDB4JXhcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud0hXUmV2aXNpb24pOwotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiSFdGZWF0dXJlczogMHgleFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53SFdGZWF0dXJlcyk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJPTkZJRGV2RmVhdHVyZXM6IDB4JXhcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud09ORklEZXZGZWF0dXJlcyk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJPTkZJT3B0Q29tbWFuZHM6IDB4JXhcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud09ORklPcHRDb21tYW5kcyk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJPTkZJVGltaW5nTW9kZTogMHgleFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53T05GSVRpbWluZ01vZGUpOwotCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiT05GSVBnbUNhY2hlVGltaW5nTW9kZTogMHgleFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby53T05GSVBnbUNhY2hlVGltaW5nTW9kZSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJNTENEZXZpY2U6ICVzXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLk1MQ0RldmljZSA/ICJZZXMiIDogIk5vIik7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGFyZVNraXBCeXRlczogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ud1NwYXJlU2tpcEJ5dGVzKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJpdHNJblBhZ2VOdW1iZXI6ICVkXG4iLAotCQlkZW5hbGktPmRldl9pbmZvLm5CaXRzSW5QYWdlTnVtYmVyKTsKLQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJpdHNJblBhZ2VEYXRhU2l6ZTogJWRcbiIsCi0JCWRlbmFsaS0+ZGV2X2luZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSk7Ci0JbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCaXRzSW5CbG9ja0RhdGFTaXplOiAlZFxuIiwKLQkJZGVuYWxpLT5kZXZfaW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSk7Ci19Ci0KLXN0YXRpYyB1aW50MTZfdCBOQU5EX1JlYWRfRGV2aWNlX0lEKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpCitzdGF0aWMgdWludDE2X3QgZGVuYWxpX25hbmRfdGltaW5nX3NldChzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogewogCXVpbnQxNl90IHN0YXR1cyA9IFBBU1M7Ci0JdWludDhfdCBub19vZl9wbGFuZXM7CisJdWludDMyX3QgaWRfYnl0ZXNbNV0sIGFkZHI7CisJdWludDhfdCBpLCBtYWZfaWQsIGRldmljZV9pZDsKIAogCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKIAkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwogCi0JZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlTWFrZXIgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIE1BTlVGQUNUVVJFUl9JRCk7Ci0JZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlSUQgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIERFVklDRV9JRCk7Ci0JZGVuYWxpLT5kZXZfaW5mby5iRGV2aWNlUGFyYW0wID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfUEFSQU1fMCk7Ci0JZGVuYWxpLT5kZXZfaW5mby5iRGV2aWNlUGFyYW0xID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfUEFSQU1fMSk7Ci0JZGVuYWxpLT5kZXZfaW5mby5iRGV2aWNlUGFyYW0yID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfUEFSQU1fMik7Ci0KLQlkZW5hbGktPmRldl9pbmZvLk1MQ0RldmljZSA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1BBUkFNXzApICYgMHgwYzsKKwkvKiBVc2UgcmVhZCBpZCBtZXRob2QgdG8gZ2V0IGRldmljZSBJRCBhbmQgb3RoZXIKKwkgKiBwYXJhbXMuIEZvciBzb21lIE5BTkQgY2hpcHMsIGNvbnRyb2xsZXIgY2FuJ3QKKwkgKiByZXBvcnQgdGhlIGNvcnJlY3QgZGV2aWNlIElEIGJ5IHJlYWRpbmcgZnJvbQorCSAqIERFVklDRV9JRCByZWdpc3RlcgorCSAqICovCisJYWRkciA9ICh1aW50MzJfdClNT0RFXzExIHwgQkFOSyhkZW5hbGktPmZsYXNoX2JhbmspOworCWluZGV4X2FkZHIoZGVuYWxpLCAodWludDMyX3QpYWRkciB8IDAsIDB4OTApOworCWluZGV4X2FkZHIoZGVuYWxpLCAodWludDMyX3QpYWRkciB8IDEsIDApOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWluZGV4X2FkZHJfcmVhZF9kYXRhKGRlbmFsaSwgYWRkciB8IDIsICZpZF9ieXRlc1tpXSk7CisJbWFmX2lkID0gaWRfYnl0ZXNbMF07CisJZGV2aWNlX2lkID0gaWRfYnl0ZXNbMV07CiAKIAlpZiAoaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBPTkZJX0RFVklDRV9OT19PRl9MVU5TKSAmCiAJCU9ORklfREVWSUNFX05PX09GX0xVTlNfX09ORklfREVWSUNFKSB7IC8qIE9ORkkgMS4wIE5BTkQgKi8KIAkJaWYgKEZBSUwgPT0gZ2V0X29uZmlfbmFuZF9wYXJhKGRlbmFsaSkpCiAJCQlyZXR1cm4gRkFJTDsKLQl9IGVsc2UgaWYgKGRlbmFsaS0+ZGV2X2luZm8ud0RldmljZU1ha2VyID09IDB4RUMpIHsgLyogU2Ftc3VuZyBOQU5EICovCi0JCWdldF9zYW1zdW5nX25hbmRfcGFyYShkZW5hbGkpOwotCX0gZWxzZSBpZiAoZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlTWFrZXIgPT0gMHg5OCkgeyAvKiBUb3NoaWJhIE5BTkQgKi8KKwl9IGVsc2UgaWYgKG1hZl9pZCA9PSAweEVDKSB7IC8qIFNhbXN1bmcgTkFORCAqLworCQlnZXRfc2Ftc3VuZ19uYW5kX3BhcmEoZGVuYWxpLCBkZXZpY2VfaWQpOworCX0gZWxzZSBpZiAobWFmX2lkID09IDB4OTgpIHsgLyogVG9zaGliYSBOQU5EICovCiAJCWdldF90b3NoaWJhX25hbmRfcGFyYShkZW5hbGkpOwotCX0gZWxzZSBpZiAoZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlTWFrZXIgPT0gMHhBRCkgeyAvKiBIeW5peCBOQU5EICovCi0JCWdldF9oeW5peF9uYW5kX3BhcmEoZGVuYWxpKTsKLQl9IGVsc2UgewotCQlkZW5hbGktPmRldl9pbmZvLndUb3RhbEJsb2NrcyA9IEdMT0JfSFdDVExfREVGQVVMVF9CTEtTOworCX0gZWxzZSBpZiAobWFmX2lkID09IDB4QUQpIHsgLyogSHluaXggTkFORCAqLworCQlnZXRfaHluaXhfbmFuZF9wYXJhKGRlbmFsaSwgZGV2aWNlX2lkKTsKIAl9CiAKIAluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkR1bXAgdGltaW5nIHJlZ2lzdGVyIHZhbHVlczoiCkBAIC04MTQsODggKzU2NiwyMCBAQAogCQkJaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBSRFdSX0VOX0hJX0NOVCksCiAJCQlpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIENTX1NFVFVQX0NOVCkpOwogCi0JZGVuYWxpLT5kZXZfaW5mby53SFdSZXZpc2lvbiA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgUkVWSVNJT04pOwotCWRlbmFsaS0+ZGV2X2luZm8ud0hXRmVhdHVyZXMgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIEZFQVRVUkVTKTsKLQotCWRlbmFsaS0+ZGV2X2luZm8ud0RldmljZU1haW5BcmVhU2l6ZSA9Ci0JCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX01BSU5fQVJFQV9TSVpFKTsKLQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VTcGFyZUFyZWFTaXplID0KLQkJaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKTsKLQotCWRlbmFsaS0+ZGV2X2luZm8ud1BhZ2VEYXRhU2l6ZSA9Ci0JCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgTE9HSUNBTF9QQUdFX0RBVEFfU0laRSk7Ci0KLQkvKiBOb3RlOiBXaGVuIHVzaW5nIHRoZSBNaWNvbiA0SyBOQU5EIGRldmljZSwgdGhlIGNvbnRyb2xsZXIgd2lsbCByZXBvcnQKLQkgKiBQYWdlIFNwYXJlIFNpemUgYXMgMjE2IGJ5dGVzLiBCdXQgTWljcm9uJ3MgU3BlYyBzYXkgaXQncyAyMTggYnl0ZXMuCi0JICogQW5kIGlmIGZvcmNlIHNldCBpdCB0byAyMTggYnl0ZXMsIHRoZSBjb250cm9sbGVyIGNhbiBub3Qgd29yawotCSAqIGNvcnJlY3RseS4gU28ganVzdCBsZXQgaXQgYmUuIEJ1dCBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGJ1ZyBtYXkKLQkgKiBjYXVzZQotCSAqIG90aGVyIHByb2JsZW1zIGluIGZ1dHVyZS4gICAgICAgLSBZdW5wZW5nICAyMDA4LTEwLTEwCi0JICovCi0JZGVuYWxpLT5kZXZfaW5mby53UGFnZVNwYXJlU2l6ZSA9Ci0JCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOwotCi0JZGVuYWxpLT5kZXZfaW5mby53UGFnZXNQZXJCbG9jayA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgUEFHRVNfUEVSX0JMT0NLKTsKLQotCWRlbmFsaS0+ZGV2X2luZm8ud1BhZ2VTaXplID0KLQkgICAgZGVuYWxpLT5kZXZfaW5mby53UGFnZURhdGFTaXplICsgZGVuYWxpLT5kZXZfaW5mby53UGFnZVNwYXJlU2l6ZTsKLQlkZW5hbGktPmRldl9pbmZvLndCbG9ja1NpemUgPQotCSAgICBkZW5hbGktPmRldl9pbmZvLndQYWdlU2l6ZSAqIGRlbmFsaS0+ZGV2X2luZm8ud1BhZ2VzUGVyQmxvY2s7Ci0JZGVuYWxpLT5kZXZfaW5mby53QmxvY2tEYXRhU2l6ZSA9Ci0JICAgIGRlbmFsaS0+ZGV2X2luZm8ud1BhZ2VzUGVyQmxvY2sgKiBkZW5hbGktPmRldl9pbmZvLndQYWdlRGF0YVNpemU7Ci0KLQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VXaWR0aCA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFX1dJRFRIKTsKLQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VUeXBlID0KLQkJKChpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIERFVklDRV9XSURUSCkgPiAwKSA/IDE2IDogOCk7Ci0KLQlkZW5hbGktPmRldl9pbmZvLndEZXZpY2VzQ29ubmVjdGVkID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBERVZJQ0VTX0NPTk5FQ1RFRCk7Ci0KLQlkZW5hbGktPmRldl9pbmZvLndTcGFyZVNraXBCeXRlcyA9Ci0JCWlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgU1BBUkVfQVJFQV9TS0lQX0JZVEVTKSAqCi0JCWRlbmFsaS0+ZGV2X2luZm8ud0RldmljZXNDb25uZWN0ZWQ7Ci0KLQlkZW5hbGktPmRldl9pbmZvLm5CaXRzSW5QYWdlTnVtYmVyID0KLQkJaWxvZzIoZGVuYWxpLT5kZXZfaW5mby53UGFnZXNQZXJCbG9jayk7Ci0JZGVuYWxpLT5kZXZfaW5mby5uQml0c0luUGFnZURhdGFTaXplID0KLQkJaWxvZzIoZGVuYWxpLT5kZXZfaW5mby53UGFnZURhdGFTaXplKTsKLQlkZW5hbGktPmRldl9pbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplID0KLQkJaWxvZzIoZGVuYWxpLT5kZXZfaW5mby53QmxvY2tEYXRhU2l6ZSk7Ci0KLQlzZXRfZWNjX2NvbmZpZyhkZW5hbGkpOwotCi0Jbm9fb2ZfcGxhbmVzID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBOVU1CRVJfT0ZfUExBTkVTKSAmCi0JCU5VTUJFUl9PRl9QTEFORVNfX1ZBTFVFOwotCi0Jc3dpdGNoIChub19vZl9wbGFuZXMpIHsKLQljYXNlIDA6Ci0JY2FzZSAxOgotCWNhc2UgMzoKLQljYXNlIDc6Ci0JCWRlbmFsaS0+ZGV2X2luZm8uYlBsYW5lTnVtID0gbm9fb2ZfcGxhbmVzICsgMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3RhdHVzID0gRkFJTDsKLQkJYnJlYWs7Ci0JfQotCiAJZmluZF92YWxpZF9iYW5rcyhkZW5hbGkpOwogCiAJZGV0ZWN0X3BhcnRpdGlvbl9mZWF0dXJlKGRlbmFsaSk7CiAKLQlkdW1wX2RldmljZV9pbmZvKGRlbmFsaSk7Ci0KIAkvKiBJZiB0aGUgdXNlciBzcGVjaWZpZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdGltaW5ncwotCSAqIHdpdGggYSBzcGVjaWZpYyBPTkZJIG1vZGUsIHdlIGFwcGx5IHRob3NlIGNoYW5nZXMgaGVyZS4gCisJICogd2l0aCBhIHNwZWNpZmljIE9ORkkgbW9kZSwgd2UgYXBwbHkgdGhvc2UgY2hhbmdlcyBoZXJlLgogCSAqLwogCWlmIChvbmZpX3RpbWluZ19tb2RlICE9IE5BTkRfREVGQVVMVF9USU1JTkdTKQotCXsKLQkJTkFORF9PTkZpX1RpbWluZ19Nb2RlKGRlbmFsaSwgb25maV90aW1pbmdfbW9kZSk7Ci0JfQorCQluYW5kX29uZmlfdGltaW5nX3NldChkZW5hbGksIG9uZmlfdGltaW5nX21vZGUpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHZvaWQgTkFORF9MTERfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyhzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLAorc3RhdGljIHZvaWQgZGVuYWxpX3NldF9pbnRyX21vZGVzKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCiAJCQkJCXVpbnQxNl90IElOVF9FTkFCTEUpCiB7CiAJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLApAQCAtOTEyLDcgKzU5Niw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mbGFzaF9iYW5rX3ZhbGlkKGludCBmbGFzaF9iYW5rKQogewotCXJldHVybiAoZmxhc2hfYmFuayA+PSAwICYmIGZsYXNoX2JhbmsgPCA0KTsgCisJcmV0dXJuIChmbGFzaF9iYW5rID49IDAgJiYgZmxhc2hfYmFuayA8IDQpOwogfQogCiBzdGF0aWMgdm9pZCBkZW5hbGlfaXJxX2luaXQoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSkKQEAgLTkyMCw3ICs2MDQsNyBAQAogCXVpbnQzMl90IGludF9tYXNrID0gMDsKIAogCS8qIERpc2FibGUgZ2xvYmFsIGludGVycnVwdHMgKi8KLQlOQU5EX0xMRF9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzKGRlbmFsaSwgZmFsc2UpOworCWRlbmFsaV9zZXRfaW50cl9tb2RlcyhkZW5hbGksIGZhbHNlKTsKIAogCWludF9tYXNrID0gREVOQUxJX0lSUV9BTEw7CiAKQEAgLTkzNSwxMSArNjE5LDEyIEBACiAKIHN0YXRpYyB2b2lkIGRlbmFsaV9pcnFfY2xlYW51cChpbnQgaXJxbnVtLCBzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogewotCU5BTkRfTExEX0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHMoZGVuYWxpLCBmYWxzZSk7CisJZGVuYWxpX3NldF9pbnRyX21vZGVzKGRlbmFsaSwgZmFsc2UpOwogCWZyZWVfaXJxKGlycW51bSwgZGVuYWxpKTsKIH0KIAotc3RhdGljIHZvaWQgZGVuYWxpX2lycV9lbmFibGUoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDMyX3QgaW50X21hc2spCitzdGF0aWMgdm9pZCBkZW5hbGlfaXJxX2VuYWJsZShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLAorCQkJCQkJCXVpbnQzMl90IGludF9tYXNrKQogewogCWRlbmFsaV93cml0ZTMyKGludF9tYXNrLCBkZW5hbGktPmZsYXNoX3JlZyArIElOVFJfRU4wKTsKIAlkZW5hbGlfd3JpdGUzMihpbnRfbWFzaywgZGVuYWxpLT5mbGFzaF9yZWcgKyBJTlRSX0VOMSk7CkBAIC05NDgsMTUgKzYzMywxNiBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIG9ubHkgcmV0dXJucyB3aGVuIGFuIGludGVycnVwdCB0aGF0IHRoaXMgZHJpdmVyIGNhcmVzIGFib3V0Ci0gKiBvY2N1cnMuIFRoaXMgaXMgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBzZXJ2aWNpbmcgaW50ZXJydXB0cyAKKyAqIG9jY3Vycy4gVGhpcyBpcyB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHNlcnZpY2luZyBpbnRlcnJ1cHRzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZGVuYWxpX2lycV9kZXRlY3RlZChzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogewotCXJldHVybiAocmVhZF9pbnRlcnJ1cHRfc3RhdHVzKGRlbmFsaSkgJiBERU5BTElfSVJRX0FMTCk7CisJcmV0dXJuIHJlYWRfaW50ZXJydXB0X3N0YXR1cyhkZW5hbGkpICYgREVOQUxJX0lSUV9BTEw7CiB9CiAKIC8qIEludGVycnVwdHMgYXJlIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGFwcHJvcHJpYXRlIHN0YXR1cyBiaXQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9pbnRlcnJ1cHQoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDMyX3QgaXJxX21hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW50ZXJydXB0KHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCisJCQkJCQkJdWludDMyX3QgaXJxX21hc2spCiB7CiAJdWludDMyX3QgaW50cl9zdGF0dXNfcmVnID0gMDsKIApAQCAtOTk1LDE3ICs2ODEsMTUgQEAKIHsKIAlpbnQgaSA9IDA7CiAKLQlwcmludGsoIklTUiBkZWJ1ZyBsb2cgaW5kZXggPSAlWFxuIiwgZGVuYWxpLT5pZHgpOworCXByaW50ayhLRVJOX0lORk8gIklTUiBkZWJ1ZyBsb2cgaW5kZXggPSAlWFxuIiwgZGVuYWxpLT5pZHgpOwogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCXsKLQkJcHJpbnRrKCIlMDhYOiAlMDhYXG4iLCBpLCBkZW5hbGktPmlycV9kZWJ1Z19hcnJheVtpXSk7Ci0JfQorCQlwcmludGsoS0VSTl9JTkZPICIlMDhYOiAlMDhYXG4iLCBpLCBkZW5hbGktPmlycV9kZWJ1Z19hcnJheVtpXSk7CiB9CiAjZW5kaWYKIAotLyogVGhpcyBpcyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gSXQgaGFuZGxlcyBhbGwgaW50ZXJydXB0cyAKLSAqIHNlbnQgdG8gdGhpcyBkZXZpY2UuIE5vdGUgdGhhdCBvbiBDRTQxMDAsIHRoaXMgaXMgYSBzaGFyZWQgCi0gKiBpbnRlcnJ1cHQuIAorLyogVGhpcyBpcyB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gSXQgaGFuZGxlcyBhbGwgaW50ZXJydXB0cworICogc2VudCB0byB0aGlzIGRldmljZS4gTm90ZSB0aGF0IG9uIENFNDEwMCwgdGhpcyBpcyBhIHNoYXJlZAorICogaW50ZXJydXB0LgogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgZGVuYWxpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0xMDE1LDIwICs2OTksMjAgQEAKIAogCXNwaW5fbG9jaygmZGVuYWxpLT5pcnFfbG9jayk7CiAKLQkvKiBjaGVjayB0byBzZWUgaWYgYSB2YWxpZCBOQU5EIGNoaXAgaGFzIAotICAgICAgICAgKiBiZWVuIHNlbGVjdGVkLiAKKwkvKiBjaGVjayB0byBzZWUgaWYgYSB2YWxpZCBOQU5EIGNoaXAgaGFzCisJICogYmVlbiBzZWxlY3RlZC4KIAkgKi8KLQlpZiAoaXNfZmxhc2hfYmFua192YWxpZChkZW5hbGktPmZsYXNoX2JhbmspKQotCXsKLQkJLyogY2hlY2sgdG8gc2VlIGlmIGNvbnRyb2xsZXIgZ2VuZXJhdGVkIAorCWlmIChpc19mbGFzaF9iYW5rX3ZhbGlkKGRlbmFsaS0+Zmxhc2hfYmFuaykpIHsKKwkJLyogY2hlY2sgdG8gc2VlIGlmIGNvbnRyb2xsZXIgZ2VuZXJhdGVkCiAJCSAqIHRoZSBpbnRlcnJ1cHQsIHNpbmNlIHRoaXMgaXMgYSBzaGFyZWQgaW50ZXJydXB0ICovCi0JCWlmICgoaXJxX3N0YXR1cyA9IGRlbmFsaV9pcnFfZGV0ZWN0ZWQoZGVuYWxpKSkgIT0gMCkKLQkJeworCQlpcnFfc3RhdHVzID0gZGVuYWxpX2lycV9kZXRlY3RlZChkZW5hbGkpOworCQlpZiAoaXJxX3N0YXR1cyAhPSAwKSB7CiAjaWYgREVCVUdfREVOQUxJCi0JCQlkZW5hbGktPmlycV9kZWJ1Z19hcnJheVtkZW5hbGktPmlkeCsrXSA9IDB4MTAwMDAwMDAgfCBpcnFfc3RhdHVzOworCQkJZGVuYWxpLT5pcnFfZGVidWdfYXJyYXlbZGVuYWxpLT5pZHgrK10gPQorCQkJCTB4MTAwMDAwMDAgfCBpcnFfc3RhdHVzOwogCQkJZGVuYWxpLT5pZHggJT0gMzI7CiAKLQkJCXByaW50aygiSVJRIHN0YXR1cyA9IDB4JTA0eFxuIiwgaXJxX3N0YXR1cyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJJUlEgc3RhdHVzID0gMHglMDR4XG4iLCBpcnFfc3RhdHVzKTsKICNlbmRpZgogCQkJLyogaGFuZGxlIGludGVycnVwdCAqLwogCQkJLyogZmlyc3QgYWNrbm93bGVkZ2UgaXQgKi8KQEAgLTEwNTQsNjEgKzczOCw2MiBAQAogCWJvb2wgcmV0cnkgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCi0JZG8KLQl7CisJZG8gewogI2lmIERFQlVHX0RFTkFMSQotCQlwcmludGsoIndhaXRpbmcgZm9yIDB4JXhcbiIsIGlycV9tYXNrKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2FpdGluZyBmb3IgMHgleFxuIiwgaXJxX21hc2spOwogI2VuZGlmCi0JCWNvbXBfcmVzID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkZW5hbGktPmNvbXBsZXRlLCB0aW1lb3V0KTsKKwkJY29tcF9yZXMgPQorCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkZW5hbGktPmNvbXBsZXRlLCB0aW1lb3V0KTsKIAkJc3Bpbl9sb2NrX2lycSgmZGVuYWxpLT5pcnFfbG9jayk7CiAJCWludHJfc3RhdHVzID0gZGVuYWxpLT5pcnFfc3RhdHVzOwogCiAjaWYgREVCVUdfREVOQUxJCi0JCWRlbmFsaS0+aXJxX2RlYnVnX2FycmF5W2RlbmFsaS0+aWR4KytdID0gMHgyMDAwMDAwMCB8IChpcnFfbWFzayA8PCAxNikgfCBpbnRyX3N0YXR1czsKKwkJZGVuYWxpLT5pcnFfZGVidWdfYXJyYXlbZGVuYWxpLT5pZHgrK10gPQorCQkJMHgyMDAwMDAwMCB8IChpcnFfbWFzayA8PCAxNikgfCBpbnRyX3N0YXR1czsKIAkJZGVuYWxpLT5pZHggJT0gMzI7CiAjZW5kaWYKIAotCQlpZiAoaW50cl9zdGF0dXMgJiBpcnFfbWFzaykKLQkJeworCQlpZiAoaW50cl9zdGF0dXMgJiBpcnFfbWFzaykgewogCQkJZGVuYWxpLT5pcnFfc3RhdHVzICY9IH5pcnFfbWFzazsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGVuYWxpLT5pcnFfbG9jayk7CiAjaWYgREVCVUdfREVOQUxJCi0JCQlpZiAocmV0cnkpIHByaW50aygic3RhdHVzIG9uIHJldHJ5ID0gMHgleFxuIiwgaW50cl9zdGF0dXMpOworCQkJaWYgKHJldHJ5KQorCQkJCXByaW50ayhLRVJOX0lORk8gInN0YXR1cyBvbiByZXRyeSA9IDB4JXhcbiIsCisJCQkJCQlpbnRyX3N0YXR1cyk7CiAjZW5kaWYKIAkJCS8qIG91ciBpbnRlcnJ1cHQgd2FzIGRldGVjdGVkICovCiAJCQlicmVhazsKLQkJfQotCQllbHNlIAotCQl7Ci0JCQkvKiB0aGVzZSBhcmUgbm90IHRoZSBpbnRlcnJ1cHRzIHlvdSBhcmUgbG9va2luZyBmb3IgLSAKLQkJICAgICAgICAgICBuZWVkIHRvIHdhaXQgYWdhaW4gKi8KKwkJfSBlbHNlIHsKKwkJCS8qIHRoZXNlIGFyZSBub3QgdGhlIGludGVycnVwdHMgeW91IGFyZSBsb29raW5nIGZvciAtCisJCQkgKiBuZWVkIHRvIHdhaXQgYWdhaW4gKi8KIAkJCXNwaW5fdW5sb2NrX2lycSgmZGVuYWxpLT5pcnFfbG9jayk7CiAjaWYgREVCVUdfREVOQUxJCiAJCQlwcmludF9pcnFfbG9nKGRlbmFsaSk7Ci0JCQlwcmludGsoInJlY2VpdmVkIGlycSBub2JvZHkgY2FyZWQ6IGlycV9zdGF0dXMgPSAweCV4LCIKLQkJCQkiIGlycV9tYXNrID0gMHgleCwgdGltZW91dCA9ICVsZFxuIiwgaW50cl9zdGF0dXMsIGlycV9tYXNrLCBjb21wX3Jlcyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJyZWNlaXZlZCBpcnEgbm9ib2R5IGNhcmVkOiIKKwkJCQkJIiBpcnFfc3RhdHVzID0gMHgleCwgaXJxX21hc2sgPSAweCV4LCIKKwkJCQkJIiB0aW1lb3V0ID0gJWxkXG4iLCBpbnRyX3N0YXR1cywKKwkJCQkJaXJxX21hc2ssIGNvbXBfcmVzKTsKICNlbmRpZgogCQkJcmV0cnkgPSB0cnVlOwogCQl9CiAJfSB3aGlsZSAoY29tcF9yZXMgIT0gMCk7CiAKLQlpZiAoY29tcF9yZXMgPT0gMCkKLQl7CisJaWYgKGNvbXBfcmVzID09IDApIHsKIAkJLyogdGltZW91dCAqLwotCQlwcmludGsoS0VSTl9FUlIgInRpbWVvdXQgb2NjdXJyZWQsIHN0YXR1cyA9IDB4JXgsIG1hc2sgPSAweCV4XG4iLCAKLQkgICAgICAgCQkJaW50cl9zdGF0dXMsIGlycV9tYXNrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0IG9jY3VycmVkLCBzdGF0dXMgPSAweCV4LCBtYXNrID0gMHgleFxuIiwKKwkJCQlpbnRyX3N0YXR1cywgaXJxX21hc2spOwogCiAJCWludHJfc3RhdHVzID0gMDsKIAl9CiAJcmV0dXJuIGludHJfc3RhdHVzOwogfQogCi0vKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBzZXR1cHMgdGhlIHJlZ2lzdGVycyBmb3IgRUNDIGFuZCB3aGV0aGVyIG9yIG5vdCAKKy8qIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHNldHVwcyB0aGUgcmVnaXN0ZXJzIGZvciBFQ0MgYW5kIHdoZXRoZXIgb3Igbm90CiAgICB0aGUgc3BhcmUgYXJlYSB3aWxsIGJlIHRyYW5zZmVyZWQuICovCi1zdGF0aWMgdm9pZCBzZXR1cF9lY2NfZm9yX3hmZXIoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgYm9vbCBlY2NfZW4sIAorc3RhdGljIHZvaWQgc2V0dXBfZWNjX2Zvcl94ZmVyKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksIGJvb2wgZWNjX2VuLAogCQkJCWJvb2wgdHJhbnNmZXJfc3BhcmUpCiB7Ci0JaW50IGVjY19lbl9mbGFnID0gMCwgdHJhbnNmZXJfc3BhcmVfZmxhZyA9IDA7IAorCWludCBlY2NfZW5fZmxhZyA9IDAsIHRyYW5zZmVyX3NwYXJlX2ZsYWcgPSAwOwogCiAJLyogc2V0IEVDQywgdHJhbnNmZXIgc3BhcmUgYml0cyBpZiBuZWVkZWQgKi8KIAllY2NfZW5fZmxhZyA9IGVjY19lbiA/IEVDQ19FTkFCTEVfX0ZMQUcgOiAwOwpAQCAtMTExNiw4NSArODAxLDg1IEBACiAKIAkvKiBFbmFibGUgc3BhcmUgYXJlYS9FQ0MgcGVyIHVzZXIncyByZXF1ZXN0LiAqLwogCWRlbmFsaV93cml0ZTMyKGVjY19lbl9mbGFnLCBkZW5hbGktPmZsYXNoX3JlZyArIEVDQ19FTkFCTEUpOwotCWRlbmFsaV93cml0ZTMyKHRyYW5zZmVyX3NwYXJlX2ZsYWcsIGRlbmFsaS0+Zmxhc2hfcmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKwlkZW5hbGlfd3JpdGUzMih0cmFuc2Zlcl9zcGFyZV9mbGFnLAorCQkJZGVuYWxpLT5mbGFzaF9yZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOwogfQogCi0vKiBzZW5kcyBhIHBpcGVsaW5lIGNvbW1hbmQgb3BlcmF0aW9uIHRvIHRoZSBjb250cm9sbGVyLiBTZWUgdGhlIERlbmFsaSBOQU5EIAotICAgY29udHJvbGxlcidzIHVzZXIgZ3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gKHNlY3Rpb24gNC4yLjMuNikuIAorLyogc2VuZHMgYSBwaXBlbGluZSBjb21tYW5kIG9wZXJhdGlvbiB0byB0aGUgY29udHJvbGxlci4gU2VlIHRoZSBEZW5hbGkgTkFORAorICAgY29udHJvbGxlcidzIHVzZXIgZ3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gKHNlY3Rpb24gNC4yLjMuNikuCiAgKi8KLXN0YXRpYyBpbnQgZGVuYWxpX3NlbmRfcGlwZWxpbmVfY21kKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksIGJvb2wgZWNjX2VuLCAKLQkJCQkJYm9vbCB0cmFuc2Zlcl9zcGFyZSwgaW50IGFjY2Vzc190eXBlLCAKLQkJCQkJaW50IG9wKQorc3RhdGljIGludCBkZW5hbGlfc2VuZF9waXBlbGluZV9jbWQoc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwKKwkJCQkJCQlib29sIGVjY19lbiwKKwkJCQkJCQlib29sIHRyYW5zZmVyX3NwYXJlLAorCQkJCQkJCWludCBhY2Nlc3NfdHlwZSwKKwkJCQkJCQlpbnQgb3ApCiB7CiAJaW50IHN0YXR1cyA9IFBBU1M7Ci0JdWludDMyX3QgYWRkciA9IDB4MCwgY21kID0gMHgwLCBwYWdlX2NvdW50ID0gMSwgaXJxX3N0YXR1cyA9IDAsIAorCXVpbnQzMl90IGFkZHIgPSAweDAsIGNtZCA9IDB4MCwgcGFnZV9jb3VudCA9IDEsIGlycV9zdGF0dXMgPSAwLAogCQkgaXJxX21hc2sgPSAwOwogCi0JaWYgKG9wID09IERFTkFMSV9SRUFEKSBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fTE9BRF9DT01QOwotCWVsc2UgaWYgKG9wID09IERFTkFMSV9XUklURSkgaXJxX21hc2sgPSAwOwotCWVsc2UgQlVHKCk7CisJaWYgKG9wID09IERFTkFMSV9SRUFEKQorCQlpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fTE9BRF9DT01QOworCWVsc2UgaWYgKG9wID09IERFTkFMSV9XUklURSkKKwkJaXJxX21hc2sgPSAwOworCWVsc2UKKwkJQlVHKCk7CiAKIAlzZXR1cF9lY2NfZm9yX3hmZXIoZGVuYWxpLCBlY2NfZW4sIHRyYW5zZmVyX3NwYXJlKTsKIAogI2lmIERFQlVHX0RFTkFMSQogCXNwaW5fbG9ja19pcnEoJmRlbmFsaS0+aXJxX2xvY2spOwotCWRlbmFsaS0+aXJxX2RlYnVnX2FycmF5W2RlbmFsaS0+aWR4KytdID0gMHg0MDAwMDAwMCB8IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0VOQUJMRSkgfCAoYWNjZXNzX3R5cGUgPDwgNCk7CisJZGVuYWxpLT5pcnFfZGVidWdfYXJyYXlbZGVuYWxpLT5pZHgrK10gPQorCQkweDQwMDAwMDAwIHwgaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyBFQ0NfRU5BQkxFKSB8CisJCShhY2Nlc3NfdHlwZSA8PCA0KTsKIAlkZW5hbGktPmlkeCAlPSAzMjsKIAlzcGluX3VubG9ja19pcnEoJmRlbmFsaS0+aXJxX2xvY2spOwogI2VuZGlmCiAKIAogCS8qIGNsZWFyIGludGVycnVwdHMgKi8KLQljbGVhcl9pbnRlcnJ1cHRzKGRlbmFsaSk7CQorCWNsZWFyX2ludGVycnVwdHMoZGVuYWxpKTsKIAogCWFkZHIgPSBCQU5LKGRlbmFsaS0+Zmxhc2hfYmFuaykgfCBkZW5hbGktPnBhZ2U7CiAKLQlpZiAob3AgPT0gREVOQUxJX1dSSVRFICYmIGFjY2Vzc190eXBlICE9IFNQQVJFX0FDQ0VTUykKLQl7Ci0JCWNtZCA9IE1PREVfMDEgfCBhZGRyOyAKKwlpZiAob3AgPT0gREVOQUxJX1dSSVRFICYmIGFjY2Vzc190eXBlICE9IFNQQVJFX0FDQ0VTUykgeworCQljbWQgPSBNT0RFXzAxIHwgYWRkcjsKIAkJZGVuYWxpX3dyaXRlMzIoY21kLCBkZW5hbGktPmZsYXNoX21lbSk7Ci0JfQotCWVsc2UgaWYgKG9wID09IERFTkFMSV9XUklURSAmJiBhY2Nlc3NfdHlwZSA9PSBTUEFSRV9BQ0NFU1MpCi0JeworCX0gZWxzZSBpZiAob3AgPT0gREVOQUxJX1dSSVRFICYmIGFjY2Vzc190eXBlID09IFNQQVJFX0FDQ0VTUykgewogCQkvKiByZWFkIHNwYXJlIGFyZWEgKi8KLQkJY21kID0gTU9ERV8xMCB8IGFkZHI7IAorCQljbWQgPSBNT0RFXzEwIHwgYWRkcjsKIAkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCljbWQsIGFjY2Vzc190eXBlKTsKIAotCQljbWQgPSBNT0RFXzAxIHwgYWRkcjsgCisJCWNtZCA9IE1PREVfMDEgfCBhZGRyOwogCQlkZW5hbGlfd3JpdGUzMihjbWQsIGRlbmFsaS0+Zmxhc2hfbWVtKTsKLQl9Ci0JZWxzZSBpZiAob3AgPT0gREVOQUxJX1JFQUQpCi0JeworCX0gZWxzZSBpZiAob3AgPT0gREVOQUxJX1JFQUQpIHsKIAkJLyogc2V0dXAgcGFnZSByZWFkIHJlcXVlc3QgZm9yIGFjY2VzcyB0eXBlICovCi0JCWNtZCA9IE1PREVfMTAgfCBhZGRyOyAKKwkJY21kID0gTU9ERV8xMCB8IGFkZHI7CiAJCWluZGV4X2FkZHIoZGVuYWxpLCAodWludDMyX3QpY21kLCBhY2Nlc3NfdHlwZSk7CiAKIAkJLyogcGFnZSAzMyBvZiB0aGUgTkFORCBjb250cm9sbGVyIHNwZWMgaW5kaWNhdGVzIHdlIHNob3VsZCBub3QKLQkJICAgdXNlIHRoZSBwaXBlbGluZSBjb21tYW5kcyBpbiBTcGFyZSBhcmVhIG9ubHkgbW9kZS4gU28gd2UgCisJCSAgIHVzZSB0aGUgcGlwZWxpbmUgY29tbWFuZHMgaW4gU3BhcmUgYXJlYSBvbmx5IG1vZGUuIFNvIHdlCiAJCSAgIGRvbid0LgogCQkgKi8KLQkJaWYgKGFjY2Vzc190eXBlID09IFNQQVJFX0FDQ0VTUykKLQkJeworCQlpZiAoYWNjZXNzX3R5cGUgPT0gU1BBUkVfQUNDRVNTKSB7CiAJCQljbWQgPSBNT0RFXzAxIHwgYWRkcjsKIAkJCWRlbmFsaV93cml0ZTMyKGNtZCwgZGVuYWxpLT5mbGFzaF9tZW0pOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCljbWQsIDB4MjAwMCB8IG9wIHwgcGFnZV9jb3VudCk7Ci0JCi0JCQkvKiB3YWl0IGZvciBjb21tYW5kIHRvIGJlIGFjY2VwdGVkICAKLQkJCSAqIGNhbiBhbHdheXMgdXNlIHN0YXR1czAgYml0IGFzIHRoZSBtYXNrIGlzIGlkZW50aWNhbCBmb3IgZWFjaAorCQl9IGVsc2UgeworCQkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCljbWQsCisJCQkJCTB4MjAwMCB8IG9wIHwgcGFnZV9jb3VudCk7CisKKwkJCS8qIHdhaXQgZm9yIGNvbW1hbmQgdG8gYmUgYWNjZXB0ZWQKKwkJCSAqIGNhbiBhbHdheXMgdXNlIHN0YXR1czAgYml0IGFzIHRoZQorCQkJICogbWFzayBpcyBpZGVudGljYWwgZm9yIGVhY2gKIAkJCSAqIGJhbmsuICovCiAJCQlpcnFfc3RhdHVzID0gd2FpdF9mb3JfaXJxKGRlbmFsaSwgaXJxX21hc2spOwogCi0JCQlpZiAoaXJxX3N0YXR1cyA9PSAwKQotCQkJeworCQkJaWYgKGlycV9zdGF0dXMgPT0gMCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiY21kLCBwYWdlLCBhZGRyIG9uIHRpbWVvdXQgIgotCQkJCQkiKDB4JXgsIDB4JXgsIDB4JXgpXG4iLCBjbWQsIGRlbmFsaS0+cGFnZSwgYWRkcik7CisJCQkJCSIoMHgleCwgMHgleCwgMHgleClcbiIsIGNtZCwKKwkJCQkJZGVuYWxpLT5wYWdlLCBhZGRyKTsKIAkJCQlzdGF0dXMgPSBGQUlMOwotCQkJfQotCQkJZWxzZQotCQkJeworCQkJfSBlbHNlIHsKIAkJCQljbWQgPSBNT0RFXzAxIHwgYWRkcjsKIAkJCQlkZW5hbGlfd3JpdGUzMihjbWQsIGRlbmFsaS0+Zmxhc2hfbWVtKTsKIAkJCX0KQEAgLTEyMDQsMzYgKzg4OSwzNSBAQAogfQogCiAvKiBoZWxwZXIgZnVuY3Rpb24gdGhhdCBzaW1wbHkgd3JpdGVzIGEgYnVmZmVyIHRvIHRoZSBmbGFzaCAqLwotc3RhdGljIGludCB3cml0ZV9kYXRhX3RvX2ZsYXNoX21lbShzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLCBjb25zdCB1aW50OF90ICpidWYsIAotCQkJCQlpbnQgbGVuKSAKK3N0YXRpYyBpbnQgd3JpdGVfZGF0YV90b19mbGFzaF9tZW0oc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwKKwkJCQkJCQljb25zdCB1aW50OF90ICpidWYsCisJCQkJCQkJaW50IGxlbikKIHsKIAl1aW50MzJfdCBpID0gMCwgKmJ1ZjMyOwogCi0JLyogdmVyaWZ5IHRoYXQgdGhlIGxlbiBpcyBhIG11bHRpcGxlIG9mIDQuIHNlZSBjb21tZW50IGluIAotCSAqIHJlYWRfZGF0YV9mcm9tX2ZsYXNoX21lbSgpICovCQorCS8qIHZlcmlmeSB0aGF0IHRoZSBsZW4gaXMgYSBtdWx0aXBsZSBvZiA0LiBzZWUgY29tbWVudCBpbgorCSAqIHJlYWRfZGF0YV9mcm9tX2ZsYXNoX21lbSgpICovCiAJQlVHX09OKChsZW4gJSA0KSAhPSAwKTsKIAogCS8qIHdyaXRlIHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBtZW1vcnkgKi8KIAlidWYzMiA9ICh1aW50MzJfdCAqKWJ1ZjsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKQotCXsKIAkJZGVuYWxpX3dyaXRlMzIoKmJ1ZjMyKyssIGRlbmFsaS0+Zmxhc2hfbWVtICsgMHgxMCk7Ci0JfQotCXJldHVybiBpKjQ7IC8qIGludGVudCBpcyB0byByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkICovIAorCXJldHVybiBpKjQ7IC8qIGludGVudCBpcyB0byByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkICovCiB9CiAKIC8qIGhlbHBlciBmdW5jdGlvbiB0aGF0IHNpbXBseSByZWFkcyBhIGJ1ZmZlciBmcm9tIHRoZSBmbGFzaCAqLwotc3RhdGljIGludCByZWFkX2RhdGFfZnJvbV9mbGFzaF9tZW0oc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDhfdCAqYnVmLCAKLQkJCQkJaW50IGxlbikKK3N0YXRpYyBpbnQgcmVhZF9kYXRhX2Zyb21fZmxhc2hfbWVtKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGksCisJCQkJCQkJCXVpbnQ4X3QgKmJ1ZiwKKwkJCQkJCQkJaW50IGxlbikKIHsKIAl1aW50MzJfdCBpID0gMCwgKmJ1ZjMyOwogCiAJLyogd2UgYXNzdW1lIHRoYXQgbGVuIHdpbGwgYmUgYSBtdWx0aXBsZSBvZiA0LCBpZiBub3QKIAkgKiBpdCB3b3VsZCBiZSBuaWNlIHRvIGtub3cgYWJvdXQgaXQgQVNBUCByYXRoZXIgdGhhbgotCSAqIGhhdmUgcmFuZG9tIGZhaWx1cmVzLi4uIAotICAgICAgICAgKgkKLQkgKiBUaGlzIGFzc3VtcHRpb24gaXMgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB0aGlzIAotCSAqIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgdG8gcmVhZCBmbGFzaCBwYWdlcywgCisJICogaGF2ZSByYW5kb20gZmFpbHVyZXMuLi4KKwkgKiBUaGlzIGFzc3VtcHRpb24gaXMgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB0aGlzCisJICogZnVuY3Rpb24gaXMgZGVzaWduZWQgdG8gYmUgdXNlZCB0byByZWFkIGZsYXNoIHBhZ2VzLAogCSAqIHdoaWNoIGFyZSB0eXBpY2FsbHkgbXVsdGlwbGVzIG9mIDQuLi4KIAkgKi8KIApAQCAtMTI0MiwxMCArOTI2LDggQEAKIAkvKiB0cmFuc2ZlciB0aGUgZGF0YSBmcm9tIHRoZSBmbGFzaCAqLwogCWJ1ZjMyID0gKHVpbnQzMl90ICopYnVmOwogCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspCi0JewogCQkqYnVmMzIrKyA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfbWVtICsgMHgxMCk7Ci0JfQotCXJldHVybiBpKjQ7IC8qIGludGVudCBpcyB0byByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkICovIAorCXJldHVybiBpKjQ7IC8qIGludGVudCBpcyB0byByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkICovCiB9CiAKIC8qIHdyaXRlcyBPT0IgZGF0YSB0byB0aGUgZGV2aWNlICovCkBAIC0xMjUzLDM4ICs5MzUsMzUgQEAKIHsKIAlzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpID0gbXRkX3RvX2RlbmFsaShtdGQpOwogCXVpbnQzMl90IGlycV9zdGF0dXMgPSAwOwotCXVpbnQzMl90IGlycV9tYXNrID0gSU5UUl9TVEFUVVMwX19QUk9HUkFNX0NPTVAgfCAKKwl1aW50MzJfdCBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fUFJPR1JBTV9DT01QIHwKIAkJCQkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMOwogCWludCBzdGF0dXMgPSAwOwogCiAJZGVuYWxpLT5wYWdlID0gcGFnZTsKIAotCWlmIChkZW5hbGlfc2VuZF9waXBlbGluZV9jbWQoZGVuYWxpLCBmYWxzZSwgZmFsc2UsIFNQQVJFX0FDQ0VTUywgCi0JCQkJCQkJREVOQUxJX1dSSVRFKSA9PSBQQVNTKSAKLQl7CisJaWYgKGRlbmFsaV9zZW5kX3BpcGVsaW5lX2NtZChkZW5hbGksIGZhbHNlLCBmYWxzZSwgU1BBUkVfQUNDRVNTLAorCQkJCQkJCURFTkFMSV9XUklURSkgPT0gUEFTUykgewogCQl3cml0ZV9kYXRhX3RvX2ZsYXNoX21lbShkZW5hbGksIGJ1ZiwgbXRkLT5vb2JzaXplKTsKIAogI2lmIERFQlVHX0RFTkFMSQogCQlzcGluX2xvY2tfaXJxKCZkZW5hbGktPmlycV9sb2NrKTsKLQkJZGVuYWxpLT5pcnFfZGVidWdfYXJyYXlbZGVuYWxpLT5pZHgrK10gPSAweDgwMDAwMDAwIHwgbXRkLT5vb2JzaXplOworCQlkZW5hbGktPmlycV9kZWJ1Z19hcnJheVtkZW5hbGktPmlkeCsrXSA9CisJCQkweDgwMDAwMDAwIHwgbXRkLT5vb2JzaXplOwogCQlkZW5hbGktPmlkeCAlPSAzMjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZkZW5hbGktPmlycV9sb2NrKTsKICNlbmRpZgogCi0JCisKIAkJLyogd2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiAJCWlycV9zdGF0dXMgPSB3YWl0X2Zvcl9pcnEoZGVuYWxpLCBpcnFfbWFzayk7CiAKLQkJaWYgKGlycV9zdGF0dXMgPT0gMCkKLQkJeworCQlpZiAoaXJxX3N0YXR1cyA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIk9PQiB3cml0ZSBmYWlsZWRcbiIpOwogCQkJc3RhdHVzID0gLUVJTzsKIAkJfQotCX0KLQllbHNlIAotCXsgCQorCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHNlbmQgcGlwZWxpbmUgY29tbWFuZFxuIik7Ci0JCXN0YXR1cyA9IC1FSU87IAorCQlzdGF0dXMgPSAtRUlPOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMTI5Myw2MCArOTcyLDU2IEBACiBzdGF0aWMgdm9pZCByZWFkX29vYl9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBwYWdlKQogewogCXN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkgPSBtdGRfdG9fZGVuYWxpKG10ZCk7Ci0JdWludDMyX3QgaXJxX21hc2sgPSBJTlRSX1NUQVRVUzBfX0xPQURfQ09NUCwgaXJxX3N0YXR1cyA9IDAsIGFkZHIgPSAweDAsIGNtZCA9IDB4MDsKKwl1aW50MzJfdCBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fTE9BRF9DT01QLAorCQkJIGlycV9zdGF0dXMgPSAwLCBhZGRyID0gMHgwLCBjbWQgPSAweDA7CiAKIAlkZW5hbGktPnBhZ2UgPSBwYWdlOwogCiAjaWYgREVCVUdfREVOQUxJCi0JcHJpbnRrKCJyZWFkX29vYiAlZFxuIiwgcGFnZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmVhZF9vb2IgJWRcbiIsIHBhZ2UpOwogI2VuZGlmCi0JaWYgKGRlbmFsaV9zZW5kX3BpcGVsaW5lX2NtZChkZW5hbGksIGZhbHNlLCB0cnVlLCBTUEFSRV9BQ0NFU1MsIAotCQkJCQkJCURFTkFMSV9SRUFEKSA9PSBQQVNTKSAKLQl7Ci0JCXJlYWRfZGF0YV9mcm9tX2ZsYXNoX21lbShkZW5hbGksIGJ1ZiwgbXRkLT5vb2JzaXplKTsJCisJaWYgKGRlbmFsaV9zZW5kX3BpcGVsaW5lX2NtZChkZW5hbGksIGZhbHNlLCB0cnVlLCBTUEFSRV9BQ0NFU1MsCisJCQkJCQkJREVOQUxJX1JFQUQpID09IFBBU1MpIHsKKwkJcmVhZF9kYXRhX2Zyb21fZmxhc2hfbWVtKGRlbmFsaSwgYnVmLCBtdGQtPm9vYnNpemUpOwogCi0JCS8qIHdhaXQgZm9yIGNvbW1hbmQgdG8gYmUgYWNjZXB0ZWQgIAorCQkvKiB3YWl0IGZvciBjb21tYW5kIHRvIGJlIGFjY2VwdGVkCiAJCSAqIGNhbiBhbHdheXMgdXNlIHN0YXR1czAgYml0IGFzIHRoZSBtYXNrIGlzIGlkZW50aWNhbCBmb3IgZWFjaAogCQkgKiBiYW5rLiAqLwogCQlpcnFfc3RhdHVzID0gd2FpdF9mb3JfaXJxKGRlbmFsaSwgaXJxX21hc2spOwogCiAJCWlmIChpcnFfc3RhdHVzID09IDApCi0JCXsKLQkJCXByaW50ayhLRVJOX0VSUiAicGFnZSBvbiBPT0IgdGltZW91dCAlZFxuIiwgZGVuYWxpLT5wYWdlKTsKLQkJfQorCQkJcHJpbnRrKEtFUk5fRVJSICJwYWdlIG9uIE9PQiB0aW1lb3V0ICVkXG4iLAorCQkJCQlkZW5hbGktPnBhZ2UpOwogCiAJCS8qIFdlIHNldCB0aGUgZGV2aWNlIGJhY2sgdG8gTUFJTl9BQ0NFU1MgaGVyZSBhcyBJIG9ic2VydmVkCiAJCSAqIGluc3RhYmlsaXR5IHdpdGggdGhlIGNvbnRyb2xsZXIgaWYgeW91IGRvIGEgYmxvY2sgZXJhc2UKIAkJICogYW5kIHRoZSBsYXN0IHRyYW5zYWN0aW9uIHdhcyBhIFNQQVJFX0FDQ0VTUy4gQmxvY2sgZXJhc2UKIAkJICogaXMgcmVsaWFibGUgKGFjY29yZGluZyB0byB0aGUgTVREIHRlc3QgaW5mcmFzdHJ1Y3R1cmUpCi0JCSAqIGlmIHlvdSBhcmUgaW4gTUFJTl9BQ0NFU1MuIAorCQkgKiBpZiB5b3UgYXJlIGluIE1BSU5fQUNDRVNTLgogCQkgKi8KIAkJYWRkciA9IEJBTksoZGVuYWxpLT5mbGFzaF9iYW5rKSB8IGRlbmFsaS0+cGFnZTsKLQkJY21kID0gTU9ERV8xMCB8IGFkZHI7IAorCQljbWQgPSBNT0RFXzEwIHwgYWRkcjsKIAkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCljbWQsIE1BSU5fQUNDRVNTKTsKIAogI2lmIERFQlVHX0RFTkFMSQogCQlzcGluX2xvY2tfaXJxKCZkZW5hbGktPmlycV9sb2NrKTsKLQkJZGVuYWxpLT5pcnFfZGVidWdfYXJyYXlbZGVuYWxpLT5pZHgrK10gPSAweDYwMDAwMDAwIHwgbXRkLT5vb2JzaXplOworCQlkZW5hbGktPmlycV9kZWJ1Z19hcnJheVtkZW5hbGktPmlkeCsrXSA9CisJCQkweDYwMDAwMDAwIHwgbXRkLT5vb2JzaXplOwogCQlkZW5hbGktPmlkeCAlPSAzMjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZkZW5hbGktPmlycV9sb2NrKTsKICNlbmRpZgogCX0KIH0KIAotLyogdGhpcyBmdW5jdGlvbiBleGFtaW5lcyBidWZmZXJzIHRvIHNlZSBpZiB0aGV5IGNvbnRhaW4gZGF0YSB0aGF0IAorLyogdGhpcyBmdW5jdGlvbiBleGFtaW5lcyBidWZmZXJzIHRvIHNlZSBpZiB0aGV5IGNvbnRhaW4gZGF0YSB0aGF0CiAgKiBpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXIgaXMgcGFydCBvZiBhbiBlcmFzZWQgcmVnaW9uIG9mIGZsYXNoLgogICovCiBib29sIGlzX2VyYXNlZCh1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGkgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQl7CQogCQlpZiAoYnVmW2ldICE9IDB4RkYpCi0JCXsKIAkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KIAlyZXR1cm4gdHJ1ZTsKIH0KICNkZWZpbmUgRUNDX1NFQ1RPUl9TSVpFIDUxMgpAQCAtMTM1OCw2NSArMTAzMyw1OSBAQAogI2RlZmluZSBFQ0NfRVJSX0RFVklDRSh4KQkoKHgpICYgRVJSX0NPUlJFQ1RJT05fSU5GT19fREVWSUNFX05SID4+IDgpCiAjZGVmaW5lIEVDQ19MQVNUX0VSUih4KQkJKCh4KSAmIEVSUl9DT1JSRUNUSU9OX0lORk9fX0xBU1RfRVJSX0lORk8pCiAKLXN0YXRpYyBib29sIGhhbmRsZV9lY2Moc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDhfdCAqYnVmLCAKK3N0YXRpYyBib29sIGhhbmRsZV9lY2Moc3RydWN0IGRlbmFsaV9uYW5kX2luZm8gKmRlbmFsaSwgdWludDhfdCAqYnVmLAogCQkJdWludDhfdCAqb29iYnVmLCB1aW50MzJfdCBpcnFfc3RhdHVzKQogewogCWJvb2wgY2hlY2tfZXJhc2VkX3BhZ2UgPSBmYWxzZTsKIAotCWlmIChpcnFfc3RhdHVzICYgSU5UUl9TVEFUVVMwX19FQ0NfRVJSKQotCXsKKwlpZiAoaXJxX3N0YXR1cyAmIElOVFJfU1RBVFVTMF9fRUNDX0VSUikgewogCQkvKiByZWFkIHRoZSBFQ0MgZXJyb3JzLiB3ZSdsbCBpZ25vcmUgdGhlbSBmb3Igbm93ICovCiAJCXVpbnQzMl90IGVycl9hZGRyZXNzID0gMCwgZXJyX2NvcnJlY3Rpb25faW5mbyA9IDA7CiAJCXVpbnQzMl90IGVycl9ieXRlID0gMCwgZXJyX3NlY3RvciA9IDAsIGVycl9kZXZpY2UgPSAwOwogCQl1aW50MzJfdCBlcnJfY29ycmVjdGlvbl92YWx1ZSA9IDA7CiAKLQkJZG8gCi0JCXsKLQkJCWVycl9hZGRyZXNzID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyAKKwkJZG8geworCQkJZXJyX2FkZHJlc3MgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArCiAJCQkJCQlFQ0NfRVJST1JfQUREUkVTUyk7CiAJCQllcnJfc2VjdG9yID0gRUNDX1NFQ1RPUihlcnJfYWRkcmVzcyk7CiAJCQllcnJfYnl0ZSA9IEVDQ19CWVRFKGVycl9hZGRyZXNzKTsKIAogCi0JCQllcnJfY29ycmVjdGlvbl9pbmZvID0gaW9yZWFkMzIoZGVuYWxpLT5mbGFzaF9yZWcgKyAKKwkJCWVycl9jb3JyZWN0aW9uX2luZm8gPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArCiAJCQkJCQlFUlJfQ09SUkVDVElPTl9JTkZPKTsKLQkJCWVycl9jb3JyZWN0aW9uX3ZhbHVlID0gCisJCQllcnJfY29ycmVjdGlvbl92YWx1ZSA9CiAJCQkJRUNDX0NPUlJFQ1RJT05fVkFMVUUoZXJyX2NvcnJlY3Rpb25faW5mbyk7CiAJCQllcnJfZGV2aWNlID0gRUNDX0VSUl9ERVZJQ0UoZXJyX2NvcnJlY3Rpb25faW5mbyk7CiAKLQkJCWlmIChFQ0NfRVJST1JfQ09SUkVDVEFCTEUoZXJyX2NvcnJlY3Rpb25faW5mbykpCi0JCQl7CisJCQlpZiAoRUNDX0VSUk9SX0NPUlJFQ1RBQkxFKGVycl9jb3JyZWN0aW9uX2luZm8pKSB7CiAJCQkJLyogb2Zmc2V0IGluIG91ciBidWZmZXIgaXMgY29tcHV0ZWQgYXM6Ci0JCQkJICAgc2VjdG9yIG51bWJlciAqIHNlY3RvciBzaXplICsgb2Zmc2V0IGluIAorCQkJCSAgIHNlY3RvciBudW1iZXIgKiBzZWN0b3Igc2l6ZSArIG9mZnNldCBpbgogCQkJCSAgIHNlY3RvcgogCQkJCSAqLwotCQkJCWludCBvZmZzZXQgPSBlcnJfc2VjdG9yICogRUNDX1NFQ1RPUl9TSVpFICsgCisJCQkJaW50IG9mZnNldCA9IGVycl9zZWN0b3IgKiBFQ0NfU0VDVE9SX1NJWkUgKwogCQkJCQkJCQllcnJfYnl0ZTsKLQkJCQlpZiAob2Zmc2V0IDwgZGVuYWxpLT5tdGQud3JpdGVzaXplKQotCQkJCXsKKwkJCQlpZiAob2Zmc2V0IDwgZGVuYWxpLT5tdGQud3JpdGVzaXplKSB7CiAJCQkJCS8qIGNvcnJlY3QgdGhlIEVDQyBlcnJvciAqLwogCQkJCQlidWZbb2Zmc2V0XSBePSBlcnJfY29ycmVjdGlvbl92YWx1ZTsKIAkJCQkJZGVuYWxpLT5tdGQuZWNjX3N0YXRzLmNvcnJlY3RlZCsrOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJeworCQkJCX0gZWxzZSB7CiAJCQkJCS8qIGJ1bW1lciwgY291bGRuJ3QgY29ycmVjdCB0aGUgZXJyb3IgKi8KIAkJCQkJcHJpbnRrKEtFUk5fRVJSICJFQ0Mgb2Zmc2V0IGludmFsaWRcbiIpOwogCQkJCQlkZW5hbGktPm10ZC5lY2Nfc3RhdHMuZmFpbGVkKys7CiAJCQkJfQotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qIGlmIHRoZSBlcnJvciBpcyBub3QgY29ycmVjdGFibGUsIG5lZWQgdG8gCi0JCQkJICogbG9vayBhdCB0aGUgcGFnZSB0byBzZWUgaWYgaXQgaXMgYW4gZXJhc2VkIHBhZ2UuCi0JCQkJICogaWYgc28sIHRoZW4gaXQncyBub3QgYSByZWFsIEVDQyBlcnJvciAqLwkKKwkJCX0gZWxzZSB7CisJCQkJLyogaWYgdGhlIGVycm9yIGlzIG5vdCBjb3JyZWN0YWJsZSwgbmVlZCB0bworCQkJCSAqIGxvb2sgYXQgdGhlIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIGFuIGVyYXNlZAorCQkJCSAqIHBhZ2UuIGlmIHNvLCB0aGVuIGl0J3Mgbm90IGEgcmVhbCBFQ0MgZXJyb3IKKwkJCQkgKiAqLwogCQkJCWNoZWNrX2VyYXNlZF9wYWdlID0gdHJ1ZTsKIAkJCX0KIAotI2lmIERFQlVHX0RFTkFMSSAKLQkJCXByaW50aygiRGV0ZWN0ZWQgRUNDIGVycm9yIGluIHBhZ2UgJWQ6IGVycl9hZGRyID0gMHglMDh4LCIKLQkJCQkiIGluZm8gdG8gZml4IGlzIDB4JTA4eFxuIiwgZGVuYWxpLT5wYWdlLCBlcnJfYWRkcmVzcywgCi0JCQkJZXJyX2NvcnJlY3Rpb25faW5mbyk7CisjaWYgREVCVUdfREVOQUxJCisJCQlwcmludGsoS0VSTl9JTkZPICJEZXRlY3RlZCBFQ0MgZXJyb3IgaW4gcGFnZSAlZDoiCisJCQkJCSIgZXJyX2FkZHIgPSAweCUwOHgsIGluZm8gdG8gZml4IGlzIgorCQkJCQkiIDB4JTA4eFxuIiwgZGVuYWxpLT5wYWdlLCBlcnJfYWRkcmVzcywKKwkJCQkJZXJyX2NvcnJlY3Rpb25faW5mbyk7CiAjZW5kaWYKIAkJfSB3aGlsZSAoIUVDQ19MQVNUX0VSUihlcnJfY29ycmVjdGlvbl9pbmZvKSk7CiAJfQpAQCAtMTQyOCw3ICsxMDk3LDggQEAKIHsKIAl1aW50MzJfdCByZWdfdmFsID0gMHgwOwogCi0JaWYgKGVuKSByZWdfdmFsID0gRE1BX0VOQUJMRV9fRkxBRzsKKwlpZiAoZW4pCisJCXJlZ192YWwgPSBETUFfRU5BQkxFX19GTEFHOwogCiAJZGVuYWxpX3dyaXRlMzIocmVnX3ZhbCwgZGVuYWxpLT5mbGFzaF9yZWcgKyBETUFfRU5BQkxFKTsKIAlpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArIERNQV9FTkFCTEUpOwpAQCAtMTQ1OCw5ICsxMTI4LDkgQEAKIAlpbmRleF9hZGRyKGRlbmFsaSwgbW9kZSB8IDB4MTQwMDAsIDB4MjQwMCk7CiB9CiAKLS8qIHdyaXRlcyBhIHBhZ2UuIHVzZXIgc3BlY2lmaWVzIHR5cGUsIGFuZCB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIAorLyogd3JpdGVzIGEgcGFnZS4gdXNlciBzcGVjaWZpZXMgdHlwZSwgYW5kIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUKICAgIGNvbmZpZ3VyYXRpb24gZGV0YWlscy4gKi8KLXN0YXRpYyB2b2lkIHdyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIAorc3RhdGljIHZvaWQgd3JpdGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgYm9vbCByYXdfeGZlcikKIHsKIAlzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpID0gbXRkX3RvX2RlbmFsaShtdGQpOwpAQCAtMTQ3MCw3ICsxMTQwLDcgQEAKIAlzaXplX3Qgc2l6ZSA9IGRlbmFsaS0+bXRkLndyaXRlc2l6ZSArIGRlbmFsaS0+bXRkLm9vYnNpemU7CiAKIAl1aW50MzJfdCBpcnFfc3RhdHVzID0gMDsKLQl1aW50MzJfdCBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QIHwgCisJdWludDMyX3QgaXJxX21hc2sgPSBJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCB8CiAJCQkJCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTDsKIAogCS8qIGlmIGl0IGlzIGEgcmF3IHhmZXIsIHdlIHdhbnQgdG8gZGlzYWJsZSBlY2MsIGFuZCBzZW5kCkBAIC0xNDgzLDc0ICsxMTUzLDczIEBACiAJLyogY29weSBidWZmZXIgaW50byBETUEgYnVmZmVyICovCiAJbWVtY3B5KGRlbmFsaS0+YnVmLmJ1ZiwgYnVmLCBtdGQtPndyaXRlc2l6ZSk7CiAKLQlpZiAocmF3X3hmZXIpCi0JeworCWlmIChyYXdfeGZlcikgewogCQkvKiB0cmFuc2ZlciB0aGUgZGF0YSB0byB0aGUgc3BhcmUgYXJlYSAqLwotCQltZW1jcHkoZGVuYWxpLT5idWYuYnVmICsgbXRkLT53cml0ZXNpemUsIAotCQkJY2hpcC0+b29iX3BvaSwgCi0JCQltdGQtPm9vYnNpemUpOyAKKwkJbWVtY3B5KGRlbmFsaS0+YnVmLmJ1ZiArIG10ZC0+d3JpdGVzaXplLAorCQkJY2hpcC0+b29iX3BvaSwKKwkJCW10ZC0+b29ic2l6ZSk7CiAJfQogCiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHBjaV9kZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJY2xlYXJfaW50ZXJydXB0cyhkZW5hbGkpOwotCWRlbmFsaV9lbmFibGVfZG1hKGRlbmFsaSwgdHJ1ZSk7CQorCWRlbmFsaV9lbmFibGVfZG1hKGRlbmFsaSwgdHJ1ZSk7CiAKIAlkZW5hbGlfc2V0dXBfZG1hKGRlbmFsaSwgREVOQUxJX1dSSVRFKTsKIAogCS8qIHdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLwogCWlycV9zdGF0dXMgPSB3YWl0X2Zvcl9pcnEoZGVuYWxpLCBpcnFfbWFzayk7CiAKLQlpZiAoaXJxX3N0YXR1cyA9PSAwKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0IG9uIHdyaXRlX3BhZ2UgKHR5cGUgPSAlZClcbiIsIHJhd194ZmVyKTsKLQkJZGVuYWxpLT5zdGF0dXMgPSAKLQkgICAJICAgKGlycV9zdGF0dXMgJiBJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkgPyBOQU5EX1NUQVRVU19GQUlMIDogCi0JCQkJCQkgICAJICAgICBQQVNTOworCWlmIChpcnFfc3RhdHVzID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0IG9uIHdyaXRlX3BhZ2UiCisJCQkJIiAodHlwZSA9ICVkKVxuIiwgcmF3X3hmZXIpOworCQlkZW5hbGktPnN0YXR1cyA9CisJCQkoaXJxX3N0YXR1cyAmIElOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKSA/CisJCQlOQU5EX1NUQVRVU19GQUlMIDogUEFTUzsKIAl9CiAKLQlkZW5hbGlfZW5hYmxlX2RtYShkZW5hbGksIGZhbHNlKTsJCisJZGVuYWxpX2VuYWJsZV9kbWEoZGVuYWxpLCBmYWxzZSk7CiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHBjaV9kZXYsIGFkZHIsIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCiAvKiBOQU5EIGNvcmUgZW50cnkgcG9pbnRzICovCiAKLS8qIHRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgdGhlIE5BTkQgY29yZSBjYWxscyB0byB3cml0ZSBhIHBhZ2UuIFNpbmNlIAotICAgd3JpdGluZyBhIHBhZ2Ugd2l0aCBFQ0Mgb3Igd2l0aG91dCBpcyBzaW1pbGFyLCBhbGwgdGhlIHdvcmsgaXMgZG9uZSAKKy8qIHRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgdGhlIE5BTkQgY29yZSBjYWxscyB0byB3cml0ZSBhIHBhZ2UuIFNpbmNlCisgICB3cml0aW5nIGEgcGFnZSB3aXRoIEVDQyBvciB3aXRob3V0IGlzIHNpbWlsYXIsIGFsbCB0aGUgd29yayBpcyBkb25lCiAgICBieSB3cml0ZV9wYWdlIGFib3ZlLiAgICovCi1zdGF0aWMgdm9pZCBkZW5hbGlfd3JpdGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgCitzdGF0aWMgdm9pZCBkZW5hbGlfd3JpdGVfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCQljb25zdCB1aW50OF90ICpidWYpCiB7CiAJLyogZm9yIHJlZ3VsYXIgcGFnZSB3cml0ZXMsIHdlIGxldCBIVyBoYW5kbGUgYWxsIHRoZSBFQ0MKLSAgICAgICAgICogZGF0YSB3cml0dGVuIHRvIHRoZSBkZXZpY2UuICovCisJICogZGF0YSB3cml0dGVuIHRvIHRoZSBkZXZpY2UuICovCiAJd3JpdGVfcGFnZShtdGQsIGNoaXAsIGJ1ZiwgZmFsc2UpOwogfQogCi0vKiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IHRoZSBOQU5EIGNvcmUgY2FsbHMgdG8gd3JpdGUgYSBwYWdlIHdpdGhvdXQgRUNDLiAKKy8qIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgdGhlIE5BTkQgY29yZSBjYWxscyB0byB3cml0ZSBhIHBhZ2Ugd2l0aG91dCBFQ0MuCiAgICByYXcgYWNjZXNzIGlzIHNpbWlsaWFyIHRvIEVDQyBwYWdlIHdyaXRlcywgc28gYWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gdGhlCi0gICB3cml0ZV9wYWdlKCkgZnVuY3Rpb24gYWJvdmUuIAorICAgd3JpdGVfcGFnZSgpIGZ1bmN0aW9uIGFib3ZlLgogICovCi1zdGF0aWMgdm9pZCBkZW5hbGlfd3JpdGVfcGFnZV9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIAorc3RhdGljIHZvaWQgZGVuYWxpX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJCQljb25zdCB1aW50OF90ICpidWYpCiB7Ci0JLyogZm9yIHJhdyBwYWdlIHdyaXRlcywgd2Ugd2FudCB0byBkaXNhYmxlIEVDQyBhbmQgc2ltcGx5IHdyaXRlIAorCS8qIGZvciByYXcgcGFnZSB3cml0ZXMsIHdlIHdhbnQgdG8gZGlzYWJsZSBFQ0MgYW5kIHNpbXBseSB3cml0ZQogCSAgIHdoYXRldmVyIGRhdGEgaXMgaW4gdGhlIGJ1ZmZlci4gKi8KIAl3cml0ZV9wYWdlKG10ZCwgY2hpcCwgYnVmLCB0cnVlKTsKIH0KIAotc3RhdGljIGludCBkZW5hbGlfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCAKK3N0YXRpYyBpbnQgZGVuYWxpX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCSAgICBpbnQgcGFnZSkKIHsKLQlyZXR1cm4gd3JpdGVfb29iX2RhdGEobXRkLCBjaGlwLT5vb2JfcG9pLCBwYWdlKTsJCisJcmV0dXJuIHdyaXRlX29vYl9kYXRhKG10ZCwgY2hpcC0+b29iX3BvaSwgcGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgZGVuYWxpX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCAKK3N0YXRpYyBpbnQgZGVuYWxpX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJICAgaW50IHBhZ2UsIGludCBzbmRjbWQpCiB7CiAJcmVhZF9vb2JfZGF0YShtdGQsIGNoaXAtPm9vYl9wb2ksIHBhZ2UpOwogCi0JcmV0dXJuIDA7IC8qIG5vdGlmeSBOQU5EIGNvcmUgdG8gc2VuZCBjb21tYW5kIHRvIAotICAgICAgICAgICAgICAgICAgICogTkFORCBkZXZpY2UuICovCisJcmV0dXJuIDA7IC8qIG5vdGlmeSBOQU5EIGNvcmUgdG8gc2VuZCBjb21tYW5kIHRvCisJCQkgICBOQU5EIGRldmljZS4gKi8KIH0KIAogc3RhdGljIGludCBkZW5hbGlfcmVhZF9wYWdlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLApAQCAtMTU2Myw3ICsxMjMyLDcgQEAKIAlzaXplX3Qgc2l6ZSA9IGRlbmFsaS0+bXRkLndyaXRlc2l6ZSArIGRlbmFsaS0+bXRkLm9vYnNpemU7CiAKIAl1aW50MzJfdCBpcnFfc3RhdHVzID0gMDsKLQl1aW50MzJfdCBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgfCAKKwl1aW50MzJfdCBpcnFfbWFzayA9IElOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgfAogCQkJICAgIElOVFJfU1RBVFVTMF9fRUNDX0VSUjsKIAlib29sIGNoZWNrX2VyYXNlZF9wYWdlID0gZmFsc2U7CiAKQEAgLTE1ODEsMjYgKzEyNTAsMjAgQEAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocGNpX2RldiwgYWRkciwgc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCW1lbWNweShidWYsIGRlbmFsaS0+YnVmLmJ1ZiwgbXRkLT53cml0ZXNpemUpOwotCQorCiAJY2hlY2tfZXJhc2VkX3BhZ2UgPSBoYW5kbGVfZWNjKGRlbmFsaSwgYnVmLCBjaGlwLT5vb2JfcG9pLCBpcnFfc3RhdHVzKTsKIAlkZW5hbGlfZW5hYmxlX2RtYShkZW5hbGksIGZhbHNlKTsKIAotCWlmIChjaGVja19lcmFzZWRfcGFnZSkKLQl7CisJaWYgKGNoZWNrX2VyYXNlZF9wYWdlKSB7CiAJCXJlYWRfb29iX2RhdGEoJmRlbmFsaS0+bXRkLCBjaGlwLT5vb2JfcG9pLCBkZW5hbGktPnBhZ2UpOwogCiAJCS8qIGNoZWNrIEVDQyBmYWlsdXJlcyB0aGF0IG1heSBoYXZlIG9jY3VycmVkIG9uIGVyYXNlZCBwYWdlcyAqLwotCQlpZiAoY2hlY2tfZXJhc2VkX3BhZ2UpCi0JCXsKKwkJaWYgKGNoZWNrX2VyYXNlZF9wYWdlKSB7CiAJCQlpZiAoIWlzX2VyYXNlZChidWYsIGRlbmFsaS0+bXRkLndyaXRlc2l6ZSkpCi0JCQl7CiAJCQkJZGVuYWxpLT5tdGQuZWNjX3N0YXRzLmZhaWxlZCsrOwotCQkJfQogCQkJaWYgKCFpc19lcmFzZWQoYnVmLCBkZW5hbGktPm10ZC5vb2JzaXplKSkKLQkJCXsKIAkJCQlkZW5hbGktPm10ZC5lY2Nfc3RhdHMuZmFpbGVkKys7Ci0JCQl9Ci0JCX0JCisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNjE2LDcgKzEyNzksNyBAQAogCiAJdWludDMyX3QgaXJxX3N0YXR1cyA9IDA7CiAJdWludDMyX3QgaXJxX21hc2sgPSBJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUDsKLQkJCQkJCQorCiAJc2V0dXBfZWNjX2Zvcl94ZmVyKGRlbmFsaSwgZmFsc2UsIHRydWUpOwogCWRlbmFsaV9lbmFibGVfZG1hKGRlbmFsaSwgdHJ1ZSk7CiAKQEAgLTE2NDQsMTIgKzEzMDcsMTAgQEAKIAl1aW50OF90IHJlc3VsdCA9IDB4ZmY7CiAKIAlpZiAoZGVuYWxpLT5idWYuaGVhZCA8IGRlbmFsaS0+YnVmLnRhaWwpCi0JewogCQlyZXN1bHQgPSBkZW5hbGktPmJ1Zi5idWZbZGVuYWxpLT5idWYuaGVhZCsrXTsKLQl9CiAKICNpZiBERUJVR19ERU5BTEkKLQlwcmludGsoInJlYWQgYnl0ZSAtPiAweCUwMnhcbiIsIHJlc3VsdCk7CisJcHJpbnRrKEtFUk5fSU5GTyAicmVhZCBieXRlIC0+IDB4JTAyeFxuIiwgcmVzdWx0KTsKICNlbmRpZgogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjU4LDcgKzEzMTksNyBAQAogewogCXN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkgPSBtdGRfdG9fZGVuYWxpKG10ZCk7CiAjaWYgREVCVUdfREVOQUxJCi0JcHJpbnRrKCJkZW5hbGkgc2VsZWN0IGNoaXAgJWRcbiIsIGNoaXApOworCXByaW50ayhLRVJOX0lORk8gImRlbmFsaSBzZWxlY3QgY2hpcCAlZFxuIiwgY2hpcCk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxKCZkZW5hbGktPmlycV9sb2NrKTsKIAlkZW5hbGktPmZsYXNoX2JhbmsgPSBjaGlwOwpAQCAtMTY3Miw3ICsxMzMzLDcgQEAKIAlkZW5hbGktPnN0YXR1cyA9IDA7CiAKICNpZiBERUJVR19ERU5BTEkKLQlwcmludGsoIndhaXRmdW5jICVkXG4iLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0lORk8gIndhaXRmdW5jICVkXG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE2ODQsNzYgKzEzNDUsNzQgQEAKIAl1aW50MzJfdCBjbWQgPSAweDAsIGlycV9zdGF0dXMgPSAwOwogCiAjaWYgREVCVUdfREVOQUxJCi0JcHJpbnRrKCJlcmFzZSBwYWdlOiAlZFxuIiwgcGFnZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZXJhc2UgcGFnZTogJWRcbiIsIHBhZ2UpOwogI2VuZGlmCiAJLyogY2xlYXIgaW50ZXJydXB0cyAqLwotCWNsZWFyX2ludGVycnVwdHMoZGVuYWxpKTsJCisJY2xlYXJfaW50ZXJydXB0cyhkZW5hbGkpOwogCiAJLyogc2V0dXAgcGFnZSByZWFkIHJlcXVlc3QgZm9yIGFjY2VzcyB0eXBlICovCiAJY21kID0gTU9ERV8xMCB8IEJBTksoZGVuYWxpLT5mbGFzaF9iYW5rKSB8IHBhZ2U7CiAJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdCljbWQsIDB4MSk7CiAKIAkvKiB3YWl0IGZvciBlcmFzZSB0byBjb21wbGV0ZSBvciBmYWlsdXJlIHRvIG9jY3VyICovCi0JaXJxX3N0YXR1cyA9IHdhaXRfZm9yX2lycShkZW5hbGksIElOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUCB8IAorCWlycV9zdGF0dXMgPSB3YWl0X2Zvcl9pcnEoZGVuYWxpLCBJTlRSX1NUQVRVUzBfX0VSQVNFX0NPTVAgfAogCQkJCQlJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwpOwogCi0JZGVuYWxpLT5zdGF0dXMgPSAoaXJxX3N0YXR1cyAmIElOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCkgPyBOQU5EX1NUQVRVU19GQUlMIDogCi0JCQkJCQkJCSBQQVNTOworCWRlbmFsaS0+c3RhdHVzID0gKGlycV9zdGF0dXMgJiBJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwpID8KKwkJCQkJCU5BTkRfU1RBVFVTX0ZBSUwgOiBQQVNTOwogfQogCi1zdGF0aWMgdm9pZCBkZW5hbGlfY21kZnVuYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IGNtZCwgaW50IGNvbCwgCitzdGF0aWMgdm9pZCBkZW5hbGlfY21kZnVuYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IGNtZCwgaW50IGNvbCwKIAkJCSAgIGludCBwYWdlKQogewogCXN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkgPSBtdGRfdG9fZGVuYWxpKG10ZCk7CisJdWludDMyX3QgYWRkciwgaWQ7CisJaW50IGk7CiAKICNpZiBERUJVR19ERU5BTEkKLQlwcmludGsoImNtZGZ1bmM6IDB4JXggJWQgJWRcbiIsIGNtZCwgY29sLCBwYWdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjbWRmdW5jOiAweCV4ICVkICVkXG4iLCBjbWQsIGNvbCwgcGFnZSk7CiAjZW5kaWYKLQlzd2l0Y2ggKGNtZCkKLQl7IAotCQljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgotCQkJYnJlYWs7Ci0JCWNhc2UgTkFORF9DTURfU1RBVFVTOgotCQkJcmVhZF9zdGF0dXMoZGVuYWxpKTsKLQkJCWJyZWFrOwotCQljYXNlIE5BTkRfQ01EX1JFQURJRDoKLQkJCXJlc2V0X2J1ZihkZW5hbGkpOwotCQkJaWYgKGRlbmFsaS0+Zmxhc2hfYmFuayA8IGRlbmFsaS0+dG90YWxfdXNlZF9iYW5rcykKLQkJCXsKLQkJCQkvKiB3cml0ZSBtYW51ZmFjdHVyZXIgaW5mb3JtYXRpb24gaW50byBuYW5kIAotCQkJCSAgIGJ1ZmZlciBmb3IgTkFORCBzdWJzeXN0ZW0gdG8gZmV0Y2guCi0gIAkJCSAgICAgICAgICovIAotCSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J5dGVfdG9fYnVmKGRlbmFsaSwgZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlTWFrZXIpOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J5dGVfdG9fYnVmKGRlbmFsaSwgZGVuYWxpLT5kZXZfaW5mby53RGV2aWNlSUQpOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlX2J5dGVfdG9fYnVmKGRlbmFsaSwgZGVuYWxpLT5kZXZfaW5mby5iRGV2aWNlUGFyYW0wKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9ieXRlX3RvX2J1ZihkZW5hbGksIGRlbmFsaS0+ZGV2X2luZm8uYkRldmljZVBhcmFtMSk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfYnl0ZV90b19idWYoZGVuYWxpLCBkZW5hbGktPmRldl9pbmZvLmJEZXZpY2VQYXJhbTIpOwotCQkJfQotCQkJZWxzZSAKLQkJCXsKLQkJCQlpbnQgaTsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSAKLQkJCQkJd3JpdGVfYnl0ZV90b19idWYoZGVuYWxpLCAweGZmKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIE5BTkRfQ01EX1JFQUQwOgotCQljYXNlIE5BTkRfQ01EX1NFUUlOOgotCQkJZGVuYWxpLT5wYWdlID0gcGFnZTsKLQkJCWJyZWFrOwotCQljYXNlIE5BTkRfQ01EX1JFU0VUOgotCQkJcmVzZXRfYmFuayhkZW5hbGkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKLQkJCS8qIFRPRE86IFJlYWQgT09CIGRhdGEgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICI6IHVuc3VwcG9ydGVkIGNvbW1hbmQgcmVjZWl2ZWQgMHgleFxuIiwgY21kKTsKLQkJCWJyZWFrOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9TVEFUVVM6CisJCXJlYWRfc3RhdHVzKGRlbmFsaSk7CisJCWJyZWFrOworCWNhc2UgTkFORF9DTURfUkVBRElEOgorCQlyZXNldF9idWYoZGVuYWxpKTsKKwkJLypzb21ldGltZXMgTWFudWZhY3R1cmVJZCByZWFkIGZyb20gcmVnaXN0ZXIgaXMgbm90IHJpZ2h0CisJCSAqIGUuZy4gc29tZSBvZiBNaWNyb24gTVQyOUYzMkcwOFFBQSBNTEMgTkFORCBjaGlwcworCQkgKiBTbyBoZXJlIHdlIHNlbmQgUkVBRElEIGNtZCB0byBOQU5EIGluc3RlYW5kCisJCSAqICovCisJCWFkZHIgPSAodWludDMyX3QpTU9ERV8xMSB8IEJBTksoZGVuYWxpLT5mbGFzaF9iYW5rKTsKKwkJaW5kZXhfYWRkcihkZW5hbGksICh1aW50MzJfdClhZGRyIHwgMCwgMHg5MCk7CisJCWluZGV4X2FkZHIoZGVuYWxpLCAodWludDMyX3QpYWRkciB8IDEsIDApOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQlpbmRleF9hZGRyX3JlYWRfZGF0YShkZW5hbGksCisJCQkJCQkodWludDMyX3QpYWRkciB8IDIsCisJCQkJCQkmaWQpOworCQkJd3JpdGVfYnl0ZV90b19idWYoZGVuYWxpLCBpZCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NNRF9SRUFEMDoKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCQlkZW5hbGktPnBhZ2UgPSBwYWdlOworCQlicmVhazsKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlyZXNldF9iYW5rKGRlbmFsaSk7CisJCWJyZWFrOworCWNhc2UgTkFORF9DTURfUkVBRE9PQjoKKwkJLyogVE9ETzogUmVhZCBPT0IgZGF0YSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIjogdW5zdXBwb3J0ZWQgY29tbWFuZCIKKwkJCQkiIHJlY2VpdmVkIDB4JXhcbiIsIGNtZCk7CisJCWJyZWFrOwogCX0KIH0KIAogLyogc3R1YnMgZm9yIEVDQyBmdW5jdGlvbnMgbm90IHVzZWQgYnkgdGhlIE5BTkQgY29yZSAqLwotc3RhdGljIGludCBkZW5hbGlfZWNjX2NhbGN1bGF0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqZGF0YSwgCitzdGF0aWMgaW50IGRlbmFsaV9lY2NfY2FsY3VsYXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpkYXRhLAogCQkJCXVpbnQ4X3QgKmVjY19jb2RlKQogewogCXByaW50ayhLRVJOX0VSUiAiZGVuYWxpX2VjY19jYWxjdWxhdGUgY2FsbGVkIHVuZXhwZWN0ZWRseVxuIik7CkBAIC0xNzYxLDcgKzE0MjAsNyBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGRlbmFsaV9lY2NfY29ycmVjdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0YSwgCitzdGF0aWMgaW50IGRlbmFsaV9lY2NfY29ycmVjdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0YSwKIAkJCQl1aW50OF90ICpyZWFkX2VjYywgdWludDhfdCAqY2FsY19lY2MpCiB7CiAJcHJpbnRrKEtFUk5fRVJSICJkZW5hbGlfZWNjX2NvcnJlY3QgY2FsbGVkIHVuZXhwZWN0ZWRseVxuIik7CkBAIC0xNzc5LDEwICsxNDM4LDE4IEBACiAvKiBJbml0aWFsaXphdGlvbiBjb2RlIHRvIGJyaW5nIHRoZSBkZXZpY2UgdXAgdG8gYSBrbm93biBnb29kIHN0YXRlICovCiBzdGF0aWMgdm9pZCBkZW5hbGlfaHdfaW5pdChzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpKQogeworCS8qIHRlbGwgZHJpdmVyIGhvdyBtYW55IGJpdCBjb250cm9sbGVyIHdpbGwgc2tpcCBiZWZvcmUKKwkgKiB3cml0aW5nIEVDQyBjb2RlIGluIE9PQiwgdGhpcyByZWdpc3RlciBtYXkgYmUgYWxyZWFkeQorCSAqIHNldCBieSBmaXJtd2FyZS4gU28gd2UgcmVhZCB0aGlzIHZhbHVlIG91dC4KKwkgKiBpZiB0aGlzIHZhbHVlIGlzIDAsIGp1c3QgbGV0IGl0IGJlLgorCSAqICovCisJZGVuYWxpLT5iYnRza2lwYnl0ZXMgPSBpb3JlYWQzMihkZW5hbGktPmZsYXNoX3JlZyArCisJCQkJCQlTUEFSRV9BUkVBX1NLSVBfQllURVMpOwogCWRlbmFsaV9pcnFfaW5pdChkZW5hbGkpOwotCU5BTkRfRmxhc2hfUmVzZXQoZGVuYWxpKTsKKwlkZW5hbGlfbmFuZF9yZXNldChkZW5hbGkpOwogCWRlbmFsaV93cml0ZTMyKDB4MEYsIGRlbmFsaS0+Zmxhc2hfcmVnICsgUkJfUElOX0VOQUJMRUQpOwotCWRlbmFsaV93cml0ZTMyKENISVBfRU5fRE9OVF9DQVJFX19GTEFHLCBkZW5hbGktPmZsYXNoX3JlZyArIENISVBfRU5BQkxFX0RPTlRfQ0FSRSk7CisJZGVuYWxpX3dyaXRlMzIoQ0hJUF9FTl9ET05UX0NBUkVfX0ZMQUcsCisJCQlkZW5hbGktPmZsYXNoX3JlZyArIENISVBfRU5BQkxFX0RPTlRfQ0FSRSk7CiAKIAlkZW5hbGlfd3JpdGUzMigweDAsIGRlbmFsaS0+Zmxhc2hfcmVnICsgU1BBUkVfQVJFQV9TS0lQX0JZVEVTKTsKIAlkZW5hbGlfd3JpdGUzMigweGZmZmYsIGRlbmFsaS0+Zmxhc2hfcmVnICsgU1BBUkVfQVJFQV9NQVJLRVIpOwpAQCAtMTc5MiwyNSArMTQ1OSwxOCBAQAogCWRlbmFsaV93cml0ZTMyKDEsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0VOQUJMRSk7CiB9CiAKLS8qIEVDQyBsYXlvdXQgZm9yIFNMQyBkZXZpY2VzLiBEZW5hbGkgc3BlYyBpbmRpY2F0ZXMgU0xDIGZpeGVkIGF0IDQgYnl0ZXMgKi8KLSNkZWZpbmUgRUNDX0JZVEVTX1NMQyAgIDQgKiAoMjA0OCAvIEVDQ19TRUNUT1JfU0laRSkKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2Jfc2xjID0gewotCS5lY2NieXRlcyA9IDQsCi0JLmVjY3BvcyA9IHsgMCwgMSwgMiwgMyB9LCAvKiBub3QgdXNlZCAqLwotCS5vb2JmcmVlID0ge3sgCi0JCQkub2Zmc2V0ID0gRUNDX0JZVEVTX1NMQywgCi0JCQkubGVuZ3RoID0gNjQgLSBFQ0NfQllURVNfU0xDICAKLQkJICAgfX0KKy8qIEFsdGhvZ2ggY29udHJvbGxlciBzcGVjIHNhaWQgU0xDIEVDQyBpcyBmb3JjZWIgdG8gYmUgNGJpdCwKKyAqIGJ1dCBkZW5hbGkgY29udHJvbGxlciBpbiBNUlNUIG9ubHkgc3VwcG9ydCAxNWJpdCBhbmQgOGJpdCBFQ0MKKyAqIGNvcnJlY3Rpb24KKyAqICovCisjZGVmaW5lIEVDQ184QklUUwkxNAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kXzhiaXRfb29iID0geworCS5lY2NieXRlcyA9IDE0LAogfTsKIAotI2RlZmluZSBFQ0NfQllURVNfTUxDICAgMTQgKiAoMjA0OCAvIEVDQ19TRUNUT1JfU0laRSkKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2JfbWxjXzE0Yml0ID0gewotCS5lY2NieXRlcyA9IDE0LAotCS5lY2Nwb3MgPSB7IDAsIDEsIDIsIDMsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzIH0sIC8qIG5vdCB1c2VkICovCi0JLm9vYmZyZWUgPSB7eyAKLQkJCS5vZmZzZXQgPSBFQ0NfQllURVNfTUxDLCAKLQkJCS5sZW5ndGggPSA2NCAtIEVDQ19CWVRFU19NTEMgIAotCQkgICB9fQorI2RlZmluZSBFQ0NfMTVCSVRTCTI2CitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfMTViaXRfb29iID0geworCS5lY2NieXRlcyA9IDI2LAogfTsKIAogc3RhdGljIHVpbnQ4X3QgYmJ0X3BhdHRlcm5bXSA9IHsnQicsICdiJywgJ3QnLCAnMCcgfTsKQEAgLTE4NDIsMTIgKzE1MDIsMTIgQEAKIAlkZW5hbGktPmlkeCA9IDA7CiAKIAkvKiBzZXR1cCBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCS8qIHRoZSBjb21wbGV0aW9uIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gbm90aWZ5IAorCS8qIHRoZSBjb21wbGV0aW9uIG9iamVjdCB3aWxsIGJlIHVzZWQgdG8gbm90aWZ5CiAJICogdGhlIGNhbGxlZSB0aGF0IHRoZSBpbnRlcnJ1cHQgaXMgZG9uZSAqLwogCWluaXRfY29tcGxldGlvbigmZGVuYWxpLT5jb21wbGV0ZSk7CiAKIAkvKiB0aGUgc3BpbmxvY2sgd2lsbCBiZSB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBJU1IKLQkgKiB3aXRoIGFueSBlbGVtZW50IHRoYXQgbWlnaHQgYmUgYWNjZXNzIHNoYXJlZCAKKwkgKiB3aXRoIGFueSBlbGVtZW50IHRoYXQgbWlnaHQgYmUgYWNjZXNzIHNoYXJlZAogCSAqIGRhdGEgKGludGVycnVwdCBzdGF0dXMpICovCiAJc3Bpbl9sb2NrX2luaXQoJmRlbmFsaS0+aXJxX2xvY2spOwogCkBAIC0xODgwLDEzICsxNTQwLDEyIEBACiAJfQogCiAJaWYgKGlkLT5kcml2ZXJfZGF0YSA9PSBJTlRFTF9DRTQxMDApIHsKLQkJLyogRHVlIHRvIGEgc2lsaWNvbiBsaW1pdGF0aW9uLCB3ZSBjYW4gb25seSBzdXBwb3J0IAotCQkgKiBPTkZJIHRpbWluZyBtb2RlIDEgYW5kIGJlbG93LiAKLQkJICovIAotCQlpZiAob25maV90aW1pbmdfbW9kZSA8IC0xIHx8IG9uZmlfdGltaW5nX21vZGUgPiAxKQotCQl7Ci0JCQlwcmludGsoIkludGVsIENFNDEwMCBvbmx5IHN1cHBvcnRzIE9ORkkgdGltaW5nIG1vZGUgMSAiCi0JCQkJIm9yIGJlbG93XG4iKTsKKwkJLyogRHVlIHRvIGEgc2lsaWNvbiBsaW1pdGF0aW9uLCB3ZSBjYW4gb25seSBzdXBwb3J0CisJCSAqIE9ORkkgdGltaW5nIG1vZGUgMSBhbmQgYmVsb3cuCisJCSAqLworCQlpZiAob25maV90aW1pbmdfbW9kZSA8IC0xIHx8IG9uZmlfdGltaW5nX21vZGUgPiAxKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkludGVsIENFNDEwMCBvbmx5IHN1cHBvcnRzIgorCQkJCQkiIE9ORkkgdGltaW5nIG1vZGUgMSBvciBiZWxvd1xuIik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBmYWlsZWRfZW5hYmxlOwogCQl9CkBAIC0xOTA1LDcgKzE1NjQsOSBAQAogCQkJbWVtX2Jhc2UgPSBjc3JfYmFzZSArIGNzcl9sZW47CiAJCQltZW1fbGVuID0gY3NyX2xlbjsKIAkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCi0JCQkJICAgICAgICJTcGVjdHJhOiBObyBzZWNvbmQgQkFSIGZvciBQQ0kgZGV2aWNlOyBhc3N1bWluZyAlMDhMeFxuIiwKKwkJCQkgICAgICAgIlNwZWN0cmE6IE5vIHNlY29uZCIKKwkJCQkJICAgIiBCQVIgZm9yIFBDSSBkZXZpY2U7IgorCQkJCQkgICAiIGFzc3VtaW5nICUwOEx4XG4iLAogCQkJCSAgICAgICAodWludDY0X3QpY3NyX2Jhc2UpOwogCQl9CiAJfQpAQCAtMTkxMywxNiArMTU3NCwxNiBAQAogCS8qIElzIDMyLWJpdCBETUEgc3VwcG9ydGVkPyAqLwogCXJldCA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAotCWlmIChyZXQpCi0JeworCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlnb3RvIGZhaWxlZF9lbmFibGU7CiAJfQotCWRlbmFsaS0+YnVmLmRtYV9idWYgPSBwY2lfbWFwX3NpbmdsZShkZXYsIGRlbmFsaS0+YnVmLmJ1ZiwgREVOQUxJX0JVRl9TSVpFLCAKLQkJCQkJIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJZGVuYWxpLT5idWYuZG1hX2J1ZiA9CisJCXBjaV9tYXBfc2luZ2xlKGRldiwgZGVuYWxpLT5idWYuYnVmLAorCQkJCQkJREVOQUxJX0JVRl9TSVpFLAorCQkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAotCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkZW5hbGktPmJ1Zi5kbWFfYnVmKSkKLQl7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihkZXYsIGRlbmFsaS0+YnVmLmRtYV9idWYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogZmFpbGVkIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKIAkJZ290byBmYWlsZWRfZW5hYmxlOwogCX0KQEAgLTE5NzAsMjIgKzE2MzEsMTEgQEAKIAl9CiAKIAkvKiBub3cgdGhhdCBvdXIgSVNSIGlzIHJlZ2lzdGVyZWQsIHdlIGNhbiBlbmFibGUgaW50ZXJydXB0cyAqLwotCU5BTkRfTExEX0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHMoZGVuYWxpLCB0cnVlKTsKKwlkZW5hbGlfc2V0X2ludHJfbW9kZXMoZGVuYWxpLCB0cnVlKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGRlbmFsaSk7CiAKLQlOQU5EX1JlYWRfRGV2aWNlX0lEKGRlbmFsaSk7Ci0KLQkvKiBNVEQgc3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgdmFyeSBieSBrZXJuZWwuIFdlIHZhbGlkYXRlIG91ciAKLSAgICAgICAgICAga2VybmVsIHN1cHBvcnRzIHRoZSBkZXZpY2UgaGVyZS4KLQkgKi8KLQlpZiAoZGVuYWxpLT5kZXZfaW5mby53UGFnZVNpemUgPiBOQU5EX01BWF9QQUdFU0laRSArIE5BTkRfTUFYX09PQlNJWkUpCi0JewotCQlyZXQgPSAtRU5PREVWOwotCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGRldmljZSBzaXplIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyAiCi0JCQkidmVyc2lvbiBvZiBNVEQuIik7Ci0JCWdvdG8gZmFpbGVkX25hbmQ7Ci0JfQorCWRlbmFsaV9uYW5kX3RpbWluZ19zZXQoZGVuYWxpKTsKIAogCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRHVtcCB0aW1pbmcgcmVnaXN0ZXIgdmFsdWVzOiIKIAkJCSJhY2NfY2xrczogJWQsIHJlXzJfd2U6ICVkLCB3ZV8yX3JlOiAlZCwiCkBAIC0yMDA5LDE4ICsxNjU5LDQ2IEBACiAJZGVuYWxpLT5uYW5kLnJlYWRfYnl0ZSA9IGRlbmFsaV9yZWFkX2J5dGU7CiAJZGVuYWxpLT5uYW5kLndhaXRmdW5jID0gZGVuYWxpX3dhaXRmdW5jOwogCi0JLyogc2NhbiBmb3IgTkFORCBkZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSBjb250cm9sbGVyIAorCS8qIHNjYW4gZm9yIE5BTkQgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgY29udHJvbGxlcgogCSAqIHRoaXMgaXMgdGhlIGZpcnN0IHN0YWdlIGluIGEgdHdvIHN0ZXAgcHJvY2VzcyB0byByZWdpc3RlcgotCSAqIHdpdGggdGhlIG5hbmQgc3Vic3lzdGVtICovCQotCWlmIChuYW5kX3NjYW5faWRlbnQoJmRlbmFsaS0+bXRkLCBMTERfTUFYX0ZMQVNIX0JBTktTLCBOVUxMKSkKLQl7CisJICogd2l0aCB0aGUgbmFuZCBzdWJzeXN0ZW0gKi8KKwlpZiAobmFuZF9zY2FuX2lkZW50KCZkZW5hbGktPm10ZCwgTExEX01BWF9GTEFTSF9CQU5LUywgTlVMTCkpIHsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGZhaWxlZF9uYW5kOwogCX0KLQkKLQkvKiBzZWNvbmQgc3RhZ2Ugb2YgdGhlIE5BTkQgc2NhbiAKLQkgKiB0aGlzIHN0YWdlIHJlcXVpcmVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBFQ0MgYW5kIAotICAgICAgICAgKiBiYWQgYmxvY2sgbWFuYWdlbWVudC4gKi8KKworCS8qIE1URCBzdXBwb3J0ZWQgcGFnZSBzaXplcyB2YXJ5IGJ5IGtlcm5lbC4gV2UgdmFsaWRhdGUgb3VyCisJICoga2VybmVsIHN1cHBvcnRzIHRoZSBkZXZpY2UgaGVyZS4KKwkgKi8KKwlpZiAoZGVuYWxpLT5tdGQud3JpdGVzaXplID4gTkFORF9NQVhfUEFHRVNJWkUgKyBOQU5EX01BWF9PT0JTSVpFKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogZGV2aWNlIHNpemUgbm90IHN1cHBvcnRlZCBieSB0aGlzICIKKwkJCSJ2ZXJzaW9uIG9mIE1URC4iKTsKKwkJZ290byBmYWlsZWRfbmFuZDsKKwl9CisKKwkvKiBzdXBwb3J0IGZvciBtdWx0aSBuYW5kCisJICogTVREIGtub3duIG5vdGhpbmcgYWJvdXQgbXVsdGkgbmFuZCwKKwkgKiBzbyB3ZSBzaG91bGQgdGVsbCBpdCB0aGUgcmVhbCBwYWdlc2l6ZQorCSAqIGFuZCBhbnl0aGluZyBuZWNlc3NlcnkKKwkgKi8KKwlkZW5hbGktPmRldm51bSA9IGlvcmVhZDMyKGRlbmFsaS0+Zmxhc2hfcmVnICsgREVWSUNFU19DT05ORUNURUQpOworCWRlbmFsaS0+bmFuZC5jaGlwc2l6ZSA8PD0gKGRlbmFsaS0+ZGV2bnVtIC0gMSk7CisJZGVuYWxpLT5uYW5kLnBhZ2Vfc2hpZnQgKz0gKGRlbmFsaS0+ZGV2bnVtIC0gMSk7CisJZGVuYWxpLT5uYW5kLnBhZ2VtYXNrID0gKGRlbmFsaS0+bmFuZC5jaGlwc2l6ZSA+PgorCQkJCQkJZGVuYWxpLT5uYW5kLnBhZ2Vfc2hpZnQpIC0gMTsKKwlkZW5hbGktPm5hbmQuYmJ0X2VyYXNlX3NoaWZ0ICs9IChkZW5hbGktPmRldm51bSAtIDEpOworCWRlbmFsaS0+bmFuZC5waHlzX2VyYXNlX3NoaWZ0ID0gZGVuYWxpLT5uYW5kLmJidF9lcmFzZV9zaGlmdDsKKwlkZW5hbGktPm5hbmQuY2hpcF9zaGlmdCArPSAoZGVuYWxpLT5kZXZudW0gLSAxKTsKKwlkZW5hbGktPm10ZC53cml0ZXNpemUgPDw9IChkZW5hbGktPmRldm51bSAtIDEpOworCWRlbmFsaS0+bXRkLm9vYnNpemUgPDw9IChkZW5hbGktPmRldm51bSAtIDEpOworCWRlbmFsaS0+bXRkLmVyYXNlc2l6ZSA8PD0gKGRlbmFsaS0+ZGV2bnVtIC0gMSk7CisJZGVuYWxpLT5tdGQuc2l6ZSA9IGRlbmFsaS0+bmFuZC5udW1jaGlwcyAqIGRlbmFsaS0+bmFuZC5jaGlwc2l6ZTsKKwlkZW5hbGktPmJidHNraXBieXRlcyAqPSBkZW5hbGktPmRldm51bTsKKworCS8qIHNlY29uZCBzdGFnZSBvZiB0aGUgTkFORCBzY2FuCisJICogdGhpcyBzdGFnZSByZXF1aXJlcyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgRUNDIGFuZAorCSAqIGJhZCBibG9jayBtYW5hZ2VtZW50LiAqLwogCiAJLyogQmFkIGJsb2NrIG1hbmFnZW1lbnQgKi8KIAlkZW5hbGktPm5hbmQuYmJ0X3RkID0gJmJidF9tYWluX2Rlc2NyOwpAQCAtMjAzMCwyNiArMTcwOCw1NyBAQAogCWRlbmFsaS0+bmFuZC5vcHRpb25zIHw9IE5BTkRfVVNFX0ZMQVNIX0JCVCB8IE5BTkRfU0tJUF9CQlRTQ0FOOwogCWRlbmFsaS0+bmFuZC5lY2MubW9kZSA9IE5BTkRfRUNDX0hXX1NZTkRST01FOwogCi0JaWYgKGRlbmFsaS0+ZGV2X2luZm8uTUxDRGV2aWNlKQotCXsKLQkJZGVuYWxpLT5uYW5kLmVjYy5sYXlvdXQgPSAmbmFuZF9vb2JfbWxjXzE0Yml0OwotCQlkZW5hbGktPm5hbmQuZWNjLmJ5dGVzID0gRUNDX0JZVEVTX01MQzsKLQl9Ci0JZWxzZSAvKiBTTEMgKi8KLQl7Ci0JCWRlbmFsaS0+bmFuZC5lY2MubGF5b3V0ID0gJm5hbmRfb29iX3NsYzsKLQkJZGVuYWxpLT5uYW5kLmVjYy5ieXRlcyA9IEVDQ19CWVRFU19TTEM7CisJLyogRGVuYWxpIENvbnRyb2xsZXIgb25seSBzdXBwb3J0IDE1Yml0IGFuZCA4Yml0IEVDQyBpbiBNUlNULAorCSAqIHNvIGp1c3QgbGV0IGNvbnRyb2xsZXIgZG8gMTViaXQgRUNDIGZvciBNTEMgYW5kIDhiaXQgRUNDIGZvcgorCSAqIFNMQyBpZiBwb3NzaWJsZS4KKwkgKiAqLworCWlmIChkZW5hbGktPm5hbmQuY2VsbGluZm8gJiAweGMgJiYKKwkJCShkZW5hbGktPm10ZC5vb2JzaXplID4gKGRlbmFsaS0+YmJ0c2tpcGJ5dGVzICsKKwkJCUVDQ18xNUJJVFMgKiAoZGVuYWxpLT5tdGQud3JpdGVzaXplIC8KKwkJCUVDQ19TRUNUT1JfU0laRSkpKSkgeworCQkvKiBpZiBNTEMgT09CIHNpemUgaXMgbGFyZ2UgZW5vdWdoLCB1c2UgMTViaXQgRUNDKi8KKwkJZGVuYWxpLT5uYW5kLmVjYy5sYXlvdXQgPSAmbmFuZF8xNWJpdF9vb2I7CisJCWRlbmFsaS0+bmFuZC5lY2MuYnl0ZXMgPSBFQ0NfMTVCSVRTOworCQlkZW5hbGlfd3JpdGUzMigxNSwgZGVuYWxpLT5mbGFzaF9yZWcgKyBFQ0NfQ09SUkVDVElPTik7CisJfSBlbHNlIGlmIChkZW5hbGktPm10ZC5vb2JzaXplIDwgKGRlbmFsaS0+YmJ0c2tpcGJ5dGVzICsKKwkJCUVDQ184QklUUyAqIChkZW5hbGktPm10ZC53cml0ZXNpemUgLworCQkJRUNDX1NFQ1RPUl9TSVpFKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIE5BTkQgY2hpcCBPT0IgaXMgbm90IGxhcmdlIGVub3VnaCB0byIKKwkJCQkiIGNvbnRhaW4gOGJpdCBFQ0MgY29ycmVjdGlvbiBjb2RlcyIpOworCQlnb3RvIGZhaWxlZF9uYW5kOworCX0gZWxzZSB7CisJCWRlbmFsaS0+bmFuZC5lY2MubGF5b3V0ID0gJm5hbmRfOGJpdF9vb2I7CisJCWRlbmFsaS0+bmFuZC5lY2MuYnl0ZXMgPSBFQ0NfOEJJVFM7CisJCWRlbmFsaV93cml0ZTMyKDgsIGRlbmFsaS0+Zmxhc2hfcmVnICsgRUNDX0NPUlJFQ1RJT04pOwogCX0KIAotCS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgYnkgdGhlIE5BTkQgY29yZSBmcmFtZXdvcmssIG90aGVyd2lzZSwgCi0gICAgICAgICAgIHRoZSBOQU5EIGNvcmUgd2lsbCBhc3NlcnQuIEhvd2V2ZXIsIHdlIGRvbid0IG5lZWQgdGhlbSwgc28gd2UnbGwgc3R1YiAKLSAgICAgICAgICAgdGhlbSBvdXQuICovCisJZGVuYWxpLT5uYW5kLmVjYy5ieXRlcyAqPSBkZW5hbGktPmRldm51bTsKKwlkZW5hbGktPm5hbmQuZWNjLmxheW91dC0+ZWNjYnl0ZXMgKj0KKwkJZGVuYWxpLT5tdGQud3JpdGVzaXplIC8gRUNDX1NFQ1RPUl9TSVpFOworCWRlbmFsaS0+bmFuZC5lY2MubGF5b3V0LT5vb2JmcmVlWzBdLm9mZnNldCA9CisJCWRlbmFsaS0+YmJ0c2tpcGJ5dGVzICsgZGVuYWxpLT5uYW5kLmVjYy5sYXlvdXQtPmVjY2J5dGVzOworCWRlbmFsaS0+bmFuZC5lY2MubGF5b3V0LT5vb2JmcmVlWzBdLmxlbmd0aCA9CisJCWRlbmFsaS0+bXRkLm9vYnNpemUgLSBkZW5hbGktPm5hbmQuZWNjLmxheW91dC0+ZWNjYnl0ZXMgLQorCQlkZW5hbGktPmJidHNraXBieXRlczsKKworCS8qIExldCBkcml2ZXIga25vdyB0aGUgdG90YWwgYmxvY2tzIG51bWJlciBhbmQKKwkgKiBob3cgbWFueSBibG9ja3MgY29udGFpbmVkIGJ5IGVhY2ggbmFuZCBjaGlwLgorCSAqIGJsa3NwZXJjaGlwIHdpbGwgaGVscCBkcml2ZXIgdG8ga25vdyBob3cgbWFueQorCSAqIGJsb2NrcyBpcyB0YWtlbiBieSBGVy4KKwkgKiAqLworCWRlbmFsaS0+dG90YWxibGtzID0gZGVuYWxpLT5tdGQuc2l6ZSA+PgorCQkJCWRlbmFsaS0+bmFuZC5waHlzX2VyYXNlX3NoaWZ0OworCWRlbmFsaS0+Ymxrc3BlcmNoaXAgPSBkZW5hbGktPnRvdGFsYmxrcyAvIGRlbmFsaS0+bmFuZC5udW1jaGlwczsKKworCS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVxdWlyZWQgYnkgdGhlIE5BTkQgY29yZSBmcmFtZXdvcmssIG90aGVyd2lzZSwKKwkgKiB0aGUgTkFORCBjb3JlIHdpbGwgYXNzZXJ0LiBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHRoZW0sIHNvIHdlJ2xsIHN0dWIKKwkgKiB0aGVtIG91dC4gKi8KIAlkZW5hbGktPm5hbmQuZWNjLmNhbGN1bGF0ZSA9IGRlbmFsaV9lY2NfY2FsY3VsYXRlOwogCWRlbmFsaS0+bmFuZC5lY2MuY29ycmVjdCA9IGRlbmFsaV9lY2NfY29ycmVjdDsKIAlkZW5hbGktPm5hbmQuZWNjLmh3Y3RsID0gZGVuYWxpX2VjY19od2N0bDsKIAogCS8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHJlYWQgb3BlcmF0aW9ucyAqLwotCWRlbmFsaS0+bmFuZC5lY2Muc2l6ZSA9IGRlbmFsaS0+bXRkLndyaXRlc2l6ZTsKKwlkZW5hbGktPm5hbmQuZWNjLnNpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiBkZW5hbGktPmRldm51bTsKIAlkZW5hbGktPm5hbmQuZWNjLnJlYWRfcGFnZSA9IGRlbmFsaV9yZWFkX3BhZ2U7CiAJZGVuYWxpLT5uYW5kLmVjYy5yZWFkX3BhZ2VfcmF3ID0gZGVuYWxpX3JlYWRfcGFnZV9yYXc7CiAJZGVuYWxpLT5uYW5kLmVjYy53cml0ZV9wYWdlID0gZGVuYWxpX3dyaXRlX3BhZ2U7CkBAIC0yMDU4LDE1ICsxNzY3LDE1IEBACiAJZGVuYWxpLT5uYW5kLmVjYy53cml0ZV9vb2IgPSBkZW5hbGlfd3JpdGVfb29iOwogCWRlbmFsaS0+bmFuZC5lcmFzZV9jbWQgPSBkZW5hbGlfZXJhc2U7CiAKLQlpZiAobmFuZF9zY2FuX3RhaWwoJmRlbmFsaS0+bXRkKSkKLQl7CisJaWYgKG5hbmRfc2Nhbl90YWlsKCZkZW5hbGktPm10ZCkpIHsKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGZhaWxlZF9uYW5kOwogCX0KIAogCXJldCA9IGFkZF9tdGRfZGV2aWNlKCZkZW5hbGktPm10ZCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IEZhaWxlZCB0byByZWdpc3RlciBNVEQgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBGYWlsZWQgdG8gcmVnaXN0ZXIiCisJCQkJIiBNVEQgZGV2aWNlOiAlZFxuIiwgcmV0KTsKIAkJZ290byBmYWlsZWRfbmFuZDsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMDc5LDcgKzE3ODgsNyBAQAogIGZhaWxlZF9yZW1hcF9jc3I6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogIGZhaWxlZF9yZXFfY3NyOgotCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBkZW5hbGktPmJ1Zi5kbWFfYnVmLCBERU5BTElfQlVGX1NJWkUsIAorCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBkZW5hbGktPmJ1Zi5kbWFfYnVmLCBERU5BTElfQlVGX1NJWkUsCiAJCQkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKICBmYWlsZWRfZW5hYmxlOgogCWtmcmVlKGRlbmFsaSk7CkBAIC0yMTAzLDcgKzE4MTIsNyBAQAogCWlvdW5tYXAoZGVuYWxpLT5mbGFzaF9tZW0pOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgZGVuYWxpLT5idWYuZG1hX2J1ZiwgREVOQUxJX0JVRl9TSVpFLCAKKwlwY2lfdW5tYXBfc2luZ2xlKGRldiwgZGVuYWxpLT5idWYuZG1hX2J1ZiwgREVOQUxJX0JVRl9TSVpFLAogCQkJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoZGVuYWxpKTsKQEAgLTIxMjAsNyArMTgyOSw4IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGRlbmFsaV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU3BlY3RyYSBNVEQgZHJpdmVyIGJ1aWx0IG9uICVzIEAgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU3BlY3RyYSBNVEQgZHJpdmVyIGJ1aWx0IG9uICVzIEAgJXNcbiIsCisJCQlfX0RBVEVfXywgX19USU1FX18pOwogCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkZW5hbGlfcGNpX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmggYi9kcml2ZXJzL210ZC9uYW5kL2RlbmFsaS5oCmluZGV4IDQyMmEyOWEuLmI2ODA0NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZGVuYWxpLmgKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kZW5hbGkuaApAQCAtMTcsNyArMTcsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4gCisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KIAogI2RlZmluZSBERVZJQ0VfUkVTRVQJCQkJMHgwCiAjZGVmaW5lICAgICBERVZJQ0VfUkVTRVRfX0JBTkswCQkJCTB4MDAwMQpAQCAtMjksNyArMjksNyBAQAogI2RlZmluZSAgICAgVFJBTlNGRVJfU1BBUkVfUkVHX19GTEFHCQkJMHgwMDAxCiAKICNkZWZpbmUgTE9BRF9XQUlUX0NOVAkJCQkweDIwCi0jZGVmaW5lICAgICBMT0FEX1dBSVRfQ05UX19WQUxVRQkJCQkweGZmZmYKKyNkZWZpbmUgICAgIExPQURfV0FJVF9DTlRfX1ZBTFVFCQkJMHhmZmZmCiAKICNkZWZpbmUgUFJPR1JBTV9XQUlUX0NOVAkJCTB4MzAKICNkZWZpbmUgICAgIFBST0dSQU1fV0FJVF9DTlRfX1ZBTFVFCQkJMHhmZmZmCkBAIC04Myw3ICs4Myw3IEBACiAjZGVmaW5lIFJFXzJfV0UJCQkJCTB4MTIwCiAjZGVmaW5lICAgICBSRV8yX1dFX19WQUxVRQkJCQkweDAwM2YKIAotI2RlZmluZSBBQ0NfQ0xLUyAgICAJCQkJMHgxMzAKKyNkZWZpbmUgQUNDX0NMS1MJCQkJMHgxMzAKICNkZWZpbmUgICAgIEFDQ19DTEtTX19WQUxVRQkJCQkweDAwMGYKIAogI2RlZmluZSBOVU1CRVJfT0ZfUExBTkVTCQkJMHgxNDAKQEAgLTE0MCw3ICsxNDAsNyBAQAogI2RlZmluZSBERVZJQ0VTX0NPTk5FQ1RFRAkJCTB4MjUwCiAjZGVmaW5lICAgICBERVZJQ0VTX0NPTk5FQ1RFRF9fVkFMVUUJCQkweDAwMDcKIAotI2RlZmluZSBESUVfTUFTSwkJCQkJMHgyNjAKKyNkZWZpbmUgRElFX01BU0sJCQkJMHgyNjAKICNkZWZpbmUgICAgIERJRV9NQVNLX19WQUxVRQkJCQkweDAwZmYKIAogI2RlZmluZSBGSVJTVF9CTE9DS19PRl9ORVhUX1BMQU5FCQkweDI3MApAQCAtMTUyLDcgKzE1Miw3IEBACiAjZGVmaW5lIFJFXzJfUkUJCQkJCTB4MjkwCiAjZGVmaW5lICAgICBSRV8yX1JFX19WQUxVRQkJCQkweDAwM2YKIAotI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCQkweDMwMAorI2RlZmluZSBNQU5VRkFDVFVSRVJfSUQJCQkJMHgzMDAKICNkZWZpbmUgICAgIE1BTlVGQUNUVVJFUl9JRF9fVkFMVUUJCQkweDAwZmYKIAogI2RlZmluZSBERVZJQ0VfSUQJCQkJMHgzMTAKQEAgLTE3MywxMyArMTczLDEzIEBACiAjZGVmaW5lIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFCQkJMHgzNjAKICNkZWZpbmUgICAgIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFX19WQUxVRQkJMHhmZmZmCiAKLSNkZWZpbmUgUkVWSVNJT04JCQkJCTB4MzcwCisjZGVmaW5lIFJFVklTSU9OCQkJCTB4MzcwCiAjZGVmaW5lICAgICBSRVZJU0lPTl9fVkFMVUUJCQkJMHhmZmZmCiAKICNkZWZpbmUgT05GSV9ERVZJQ0VfRkVBVFVSRVMJCQkweDM4MAogI2RlZmluZSAgICAgT05GSV9ERVZJQ0VfRkVBVFVSRVNfX1ZBTFVFCQkJMHgwMDNmCiAKLSNkZWZpbmUgT05GSV9PUFRJT05BTF9DT01NQU5EUwkJMHgzOTAKKyNkZWZpbmUgT05GSV9PUFRJT05BTF9DT01NQU5EUwkJCTB4MzkwCiAjZGVmaW5lICAgICBPTkZJX09QVElPTkFMX0NPTU1BTkRTX19WQUxVRQkJMHgwMDNmCiAKICNkZWZpbmUgT05GSV9USU1JTkdfTU9ERQkJCTB4M2EwCkBAIC0yMDEsMTIgKzIwMSwxMiBAQAogI2RlZmluZSBGRUFUVVJFUwkJCQkJMHgzZjAKICNkZWZpbmUgICAgIEZFQVRVUkVTX19OX0JBTktTCQkJCTB4MDAwMwogI2RlZmluZSAgICAgRkVBVFVSRVNfX0VDQ19NQVhfRVJSCQkJMHgwMDNjCi0jZGVmaW5lICAgICBGRUFUVVJFU19fRE1BCQkJCQkweDAwNDAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19ETUEJCQkJMHgwMDQwCiAjZGVmaW5lICAgICBGRUFUVVJFU19fQ01EX0RNQQkJCQkweDAwODAKICNkZWZpbmUgICAgIEZFQVRVUkVTX19QQVJUSVRJT04JCQkJMHgwMTAwCiAjZGVmaW5lICAgICBGRUFUVVJFU19fWERNQV9TSURFQkFORAkJCTB4MDIwMAogI2RlZmluZSAgICAgRkVBVFVSRVNfX0dQUkVHCQkJCTB4MDQwMAotI2RlZmluZSAgICAgRkVBVFVSRVNfX0lOREVYX0FERFIJCQkJMHgwODAwCisjZGVmaW5lICAgICBGRUFUVVJFU19fSU5ERVhfQUREUgkJCTB4MDgwMAogCiAjZGVmaW5lIFRSQU5TRkVSX01PREUJCQkJMHg0MDAKICNkZWZpbmUgICAgIFRSQU5TRkVSX01PREVfX1ZBTFVFCQkJMHgwMDAzCkBAIC0yMzUsMTIgKzIzNSwxMiBAQAogI2RlZmluZSAgICAgSU5UUl9FTjBfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAogI2RlZmluZSAgICAgSU5UUl9FTjBfX1RJTUVfT1VUCQkJCTB4MDAwOAogI2RlZmluZSAgICAgSU5UUl9FTjBfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAotI2RlZmluZSAgICAgSU5UUl9FTjBfX0VSQVNFX0ZBSUwJCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX0VOMF9fRVJBU0VfRkFJTAkJCTB4MDAyMAogI2RlZmluZSAgICAgSU5UUl9FTjBfX0xPQURfQ09NUAkJCQkweDAwNDAKICNkZWZpbmUgICAgIElOVFJfRU4wX19QUk9HUkFNX0NPTVAJCQkweDAwODAKLSNkZWZpbmUgICAgIElOVFJfRU4wX19FUkFTRV9DT01QCQkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0VSQVNFX0NPTVAJCQkweDAxMDAKICNkZWZpbmUgICAgIElOVFJfRU4wX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCi0jZGVmaW5lICAgICBJTlRSX0VOMF9fTE9DS0VEX0JMSwkJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19MT0NLRURfQkxLCQkJMHgwNDAwCiAjZGVmaW5lICAgICBJTlRSX0VOMF9fVU5TVVBfQ01ECQkJCTB4MDgwMAogI2RlZmluZSAgICAgSU5UUl9FTjBfX0lOVF9BQ1QJCQkJMHgxMDAwCiAjZGVmaW5lICAgICBJTlRSX0VOMF9fUlNUX0NPTVAJCQkJMHgyMDAwCkBAIC0yNTMsNyArMjUzLDcgQEAKICNkZWZpbmUgRVJSX1BBR0VfQUREUjAJCQkJMHg0NDAKICNkZWZpbmUgICAgIEVSUl9QQUdFX0FERFIwX19WQUxVRQkJCTB4ZmZmZgogCi0jZGVmaW5lIEVSUl9CTE9DS19BRERSMAkJCTB4NDUwCisjZGVmaW5lIEVSUl9CTE9DS19BRERSMAkJCQkweDQ1MAogI2RlZmluZSAgICAgRVJSX0JMT0NLX0FERFIwX19WQUxVRQkJCTB4ZmZmZgogCiAjZGVmaW5lIElOVFJfU1RBVFVTMQkJCQkweDQ2MApAQCAtMjgwLDEyICsyODAsMTIgQEAKICNkZWZpbmUgICAgIElOVFJfRU4xX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKICNkZWZpbmUgICAgIElOVFJfRU4xX19USU1FX09VVAkJCQkweDAwMDgKICNkZWZpbmUgICAgIElOVFJfRU4xX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKLSNkZWZpbmUgICAgIElOVFJfRU4xX19FUkFTRV9GQUlMCQkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0VSQVNFX0ZBSUwJCQkweDAwMjAKICNkZWZpbmUgICAgIElOVFJfRU4xX19MT0FEX0NPTVAJCQkJMHgwMDQwCiAjZGVmaW5lICAgICBJTlRSX0VOMV9fUFJPR1JBTV9DT01QCQkJMHgwMDgwCi0jZGVmaW5lICAgICBJTlRSX0VOMV9fRVJBU0VfQ09NUAkJCQkweDAxMDAKKyNkZWZpbmUgICAgIElOVFJfRU4xX19FUkFTRV9DT01QCQkJMHgwMTAwCiAjZGVmaW5lICAgICBJTlRSX0VOMV9fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAotI2RlZmluZSAgICAgSU5UUl9FTjFfX0xPQ0tFRF9CTEsJCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fTE9DS0VEX0JMSwkJCTB4MDQwMAogI2RlZmluZSAgICAgSU5UUl9FTjFfX1VOU1VQX0NNRAkJCQkweDA4MDAKICNkZWZpbmUgICAgIElOVFJfRU4xX19JTlRfQUNUCQkJCTB4MTAwMAogI2RlZmluZSAgICAgSU5UUl9FTjFfX1JTVF9DT01QCQkJCTB4MjAwMApAQCAtMjk4LDcgKzI5OCw3IEBACiAjZGVmaW5lIEVSUl9QQUdFX0FERFIxCQkJCTB4NDkwCiAjZGVmaW5lICAgICBFUlJfUEFHRV9BRERSMV9fVkFMVUUJCQkweGZmZmYKIAotI2RlZmluZSBFUlJfQkxPQ0tfQUREUjEJCQkweDRhMAorI2RlZmluZSBFUlJfQkxPQ0tfQUREUjEJCQkJMHg0YTAKICNkZWZpbmUgICAgIEVSUl9CTE9DS19BRERSMV9fVkFMVUUJCQkweGZmZmYKIAogI2RlZmluZSBJTlRSX1NUQVRVUzIJCQkJMHg0YjAKQEAgLTMyNSwxMiArMzI1LDEyIEBACiAjZGVmaW5lICAgICBJTlRSX0VOMl9fRE1BX0NNRF9DT01QCQkJMHgwMDA0CiAjZGVmaW5lICAgICBJTlRSX0VOMl9fVElNRV9PVVQJCQkJMHgwMDA4CiAjZGVmaW5lICAgICBJTlRSX0VOMl9fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCi0jZGVmaW5lICAgICBJTlRSX0VOMl9fRVJBU0VfRkFJTAkJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19FUkFTRV9GQUlMCQkJMHgwMDIwCiAjZGVmaW5lICAgICBJTlRSX0VOMl9fTE9BRF9DT01QCQkJCTB4MDA0MAogI2RlZmluZSAgICAgSU5UUl9FTjJfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAotI2RlZmluZSAgICAgSU5UUl9FTjJfX0VSQVNFX0NPTVAJCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRVJBU0VfQ09NUAkJCTB4MDEwMAogI2RlZmluZSAgICAgSU5UUl9FTjJfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKLSNkZWZpbmUgICAgIElOVFJfRU4yX19MT0NLRURfQkxLCQkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9FTjJfX0xPQ0tFRF9CTEsJCQkweDA0MDAKICNkZWZpbmUgICAgIElOVFJfRU4yX19VTlNVUF9DTUQJCQkJMHgwODAwCiAjZGVmaW5lICAgICBJTlRSX0VOMl9fSU5UX0FDVAkJCQkweDEwMDAKICNkZWZpbmUgICAgIElOVFJfRU4yX19SU1RfQ09NUAkJCQkweDIwMDAKQEAgLTM0Myw3ICszNDMsNyBAQAogI2RlZmluZSBFUlJfUEFHRV9BRERSMgkJCQkweDRlMAogI2RlZmluZSAgICAgRVJSX1BBR0VfQUREUjJfX1ZBTFVFCQkJMHhmZmZmCiAKLSNkZWZpbmUgRVJSX0JMT0NLX0FERFIyCQkJMHg0ZjAKKyNkZWZpbmUgRVJSX0JMT0NLX0FERFIyCQkJCTB4NGYwCiAjZGVmaW5lICAgICBFUlJfQkxPQ0tfQUREUjJfX1ZBTFVFCQkJMHhmZmZmCiAKICNkZWZpbmUgSU5UUl9TVEFUVVMzCQkJCTB4NTAwCkBAIC0zNzAsMTIgKzM3MCwxMiBAQAogI2RlZmluZSAgICAgSU5UUl9FTjNfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAogI2RlZmluZSAgICAgSU5UUl9FTjNfX1RJTUVfT1VUCQkJCTB4MDAwOAogI2RlZmluZSAgICAgSU5UUl9FTjNfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAotI2RlZmluZSAgICAgSU5UUl9FTjNfX0VSQVNFX0ZBSUwJCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX0VOM19fRVJBU0VfRkFJTAkJCTB4MDAyMAogI2RlZmluZSAgICAgSU5UUl9FTjNfX0xPQURfQ09NUAkJCQkweDAwNDAKICNkZWZpbmUgICAgIElOVFJfRU4zX19QUk9HUkFNX0NPTVAJCQkweDAwODAKLSNkZWZpbmUgICAgIElOVFJfRU4zX19FUkFTRV9DT01QCQkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0VSQVNFX0NPTVAJCQkweDAxMDAKICNkZWZpbmUgICAgIElOVFJfRU4zX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCi0jZGVmaW5lICAgICBJTlRSX0VOM19fTE9DS0VEX0JMSwkJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19MT0NLRURfQkxLCQkJMHgwNDAwCiAjZGVmaW5lICAgICBJTlRSX0VOM19fVU5TVVBfQ01ECQkJCTB4MDgwMAogI2RlZmluZSAgICAgSU5UUl9FTjNfX0lOVF9BQ1QJCQkJMHgxMDAwCiAjZGVmaW5lICAgICBJTlRSX0VOM19fUlNUX0NPTVAJCQkJMHgyMDAwCkBAIC0zODgsNyArMzg4LDcgQEAKICNkZWZpbmUgRVJSX1BBR0VfQUREUjMJCQkJMHg1MzAKICNkZWZpbmUgICAgIEVSUl9QQUdFX0FERFIzX19WQUxVRQkJCTB4ZmZmZgogCi0jZGVmaW5lIEVSUl9CTE9DS19BRERSMwkJCTB4NTQwCisjZGVmaW5lIEVSUl9CTE9DS19BRERSMwkJCQkweDU0MAogI2RlZmluZSAgICAgRVJSX0JMT0NLX0FERFIzX19WQUxVRQkJCTB4ZmZmZgogCiAjZGVmaW5lIERBVEFfSU5UUgkJCQkweDU1MApAQCAtNDEyLDkgKzQxMiw5IEBACiAjZGVmaW5lICAgICBHUFJFR18zX19WQUxVRQkJCQkweGZmZmYKIAogI2RlZmluZSBFQ0NfVEhSRVNIT0xECQkJCTB4NjAwCi0jZGVmaW5lICAgICBFQ0NfVEhSRVNIT0xEX19WQUxVRQkJCQkweDAzZmYKKyNkZWZpbmUgICAgIEVDQ19USFJFU0hPTERfX1ZBTFVFCQkJMHgwM2ZmCiAKLSNkZWZpbmUgRUNDX0VSUk9SX0JMT0NLX0FERFJFU1MJCTB4NjEwCisjZGVmaW5lIEVDQ19FUlJPUl9CTE9DS19BRERSRVNTCQkJMHg2MTAKICNkZWZpbmUgICAgIEVDQ19FUlJPUl9CTE9DS19BRERSRVNTX19WQUxVRQkJMHhmZmZmCiAKICNkZWZpbmUgRUNDX0VSUk9SX1BBR0VfQUREUkVTUwkJCTB4NjIwCkBAIC00NjYsNyArNDY2LDcgQEAKICNkZWZpbmUgICAgIENITkxfQUNUSVZFX19DSEFOTkVMMwkJCTB4MDAwOAogCiAjZGVmaW5lIEFDVElWRV9TUkNfSUQJCQkJMHg4MDAKLSNkZWZpbmUgICAgIEFDVElWRV9TUkNfSURfX1ZBTFVFCQkJCTB4MDBmZgorI2RlZmluZSAgICAgQUNUSVZFX1NSQ19JRF9fVkFMVUUJCQkweDAwZmYKIAogI2RlZmluZSBQVE5fSU5UUgkJCQkJMHg4MTAKICNkZWZpbmUgICAgIFBUTl9JTlRSX19DT05GSUdfRVJST1IJCQkweDAwMDEKQEAgLTQ4NSw3ICs0ODUsNyBAQAogI2RlZmluZSAgICAgUFROX0lOVFJfRU5fX1JFR19BQ0NFU1NfRVJST1IJCTB4MDAyMAogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzAJCQkJMHg4MzAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMF9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMF9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTUwMiw3ICs1MDIsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzBfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzEJCQkJMHg4NzAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTUxOSw3ICs1MTksNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzFfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzIJCQkJMHg4YjAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzJfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzJfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzJfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTUzNiw3ICs1MzYsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzJfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzMJCQkJMHg4ZjAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfM19fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfM19fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTU1Myw3ICs1NTMsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzNfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzQJCQkJMHg5MzAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTU3MCw3ICs1NzAsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzRfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzUJCQkJMHg5NzAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzVfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzVfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzVfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTU4Nyw3ICs1ODcsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzVfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzYJCQkJMHg5YjAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNl9fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNl9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTYwNCw3ICs2MDQsNyBAQAogI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzZfX01BWF9WQUxVRQkJCTB4MDAwYwogCiAjZGVmaW5lIFBFUk1fU1JDX0lEXzcJCQkJMHg5ZjAKLSNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fU1JDSUQJCQkweDAwZmYKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKICNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAogI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fUkVBRF9BQ1RJVkUJCQkweDQwMDAKQEAgLTYyMCw0NyArNjIwLDYgQEAKICNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS183X19NSU5fVkFMVUUJCQkweDAwMDMKICNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS183X19NQVhfVkFMVUUJCQkweDAwMGMKIAotLyogZmxhc2guaCAqLwotc3RydWN0IGRldmljZV9pbmZvX3RhZyB7Ci0gICAgICAgIHVpbnQxNl90IHdEZXZpY2VNYWtlcjsKLSAgICAgICAgdWludDE2X3Qgd0RldmljZUlEOwotCXVpbnQ4X3QgIGJEZXZpY2VQYXJhbTA7Ci0JdWludDhfdCAgYkRldmljZVBhcmFtMTsKLQl1aW50OF90ICBiRGV2aWNlUGFyYW0yOwotICAgICAgICB1aW50MzJfdCB3RGV2aWNlVHlwZTsKLSAgICAgICAgdWludDMyX3Qgd1NwZWN0cmFTdGFydEJsb2NrOwotICAgICAgICB1aW50MzJfdCB3U3BlY3RyYUVuZEJsb2NrOwotICAgICAgICB1aW50MzJfdCB3VG90YWxCbG9ja3M7Ci0gICAgICAgIHVpbnQxNl90IHdQYWdlc1BlckJsb2NrOwotICAgICAgICB1aW50MTZfdCB3UGFnZVNpemU7Ci0gICAgICAgIHVpbnQxNl90IHdQYWdlRGF0YVNpemU7Ci0gICAgICAgIHVpbnQxNl90IHdQYWdlU3BhcmVTaXplOwotICAgICAgICB1aW50MTZfdCB3TnVtUGFnZVNwYXJlRmxhZzsKLSAgICAgICAgdWludDE2X3Qgd0VDQ0J5dGVzUGVyU2VjdG9yOwotICAgICAgICB1aW50MzJfdCB3QmxvY2tTaXplOwotICAgICAgICB1aW50MzJfdCB3QmxvY2tEYXRhU2l6ZTsKLSAgICAgICAgdWludDMyX3Qgd0RhdGFCbG9ja051bTsKLSAgICAgICAgdWludDhfdCBiUGxhbmVOdW07Ci0gICAgICAgIHVpbnQxNl90IHdEZXZpY2VNYWluQXJlYVNpemU7Ci0gICAgICAgIHVpbnQxNl90IHdEZXZpY2VTcGFyZUFyZWFTaXplOwotICAgICAgICB1aW50MTZfdCB3RGV2aWNlc0Nvbm5lY3RlZDsKLSAgICAgICAgdWludDE2X3Qgd0RldmljZVdpZHRoOwotICAgICAgICB1aW50MTZfdCB3SFdSZXZpc2lvbjsKLSAgICAgICAgdWludDE2X3Qgd0hXRmVhdHVyZXM7Ci0KLSAgICAgICAgdWludDE2X3Qgd09ORklEZXZGZWF0dXJlczsKLSAgICAgICAgdWludDE2X3Qgd09ORklPcHRDb21tYW5kczsKLSAgICAgICAgdWludDE2X3Qgd09ORklUaW1pbmdNb2RlOwotICAgICAgICB1aW50MTZfdCB3T05GSVBnbUNhY2hlVGltaW5nTW9kZTsKLQotICAgICAgICB1aW50MTZfdCBNTENEZXZpY2U7Ci0gICAgICAgIHVpbnQxNl90IHdTcGFyZVNraXBCeXRlczsKLQotICAgICAgICB1aW50OF90IG5CaXRzSW5QYWdlTnVtYmVyOwotICAgICAgICB1aW50OF90IG5CaXRzSW5QYWdlRGF0YVNpemU7Ci0gICAgICAgIHVpbnQ4X3QgbkJpdHNJbkJsb2NrRGF0YVNpemU7Ci19OwotCiAvKiBmZnNkZWZzLmggKi8KICNkZWZpbmUgQ0xFQVIgMCAgICAgICAgICAgICAgICAgLyp1c2UgdGhpcyB0byBjbGVhciBhIGZpZWxkIGluc3RlYWQgb2YgImZhaWwiKi8KICNkZWZpbmUgU0VUICAgMSAgICAgICAgICAgICAgICAgLyp1c2UgdGhpcyB0byBzZXQgYSBmaWVsZCBpbnN0ZWFkIG9mICJwYXNzIiovCkBAIC02ODQsMTEgKzY0MywxMSBAQAogI2RlZmluZSBOQU5EX0RCR19UUkFDRSAzCiAKICNpZmRlZiBWRVJCT1NFCi0jZGVmaW5lIG5hbmRfZGJnX3ByaW50KGxldmVsLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChsZXZlbCA8PSBuYW5kX2RlYnVnX2xldmVsKSAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9BTEVSVCBhcmdzKTsgICAgICAgIFwKLSAgICAgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbmFuZF9kYmdfcHJpbnQobGV2ZWwsIGFyZ3MuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJCWlmIChsZXZlbCA8PSBuYW5kX2RlYnVnX2xldmVsKQkJXAorCQkJCXByaW50ayhLRVJOX0FMRVJUIGFyZ3MpOwlcCisJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIG5hbmRfZGJnX3ByaW50KGxldmVsLCBhcmdzLi4uKQogI2VuZGlmCkBAIC03NzIsMTAgKzczMSw5IEBACiAjZGVmaW5lIEVDQ19TRUNUT1JfU0laRSAgICAgNTEyCiAjZGVmaW5lIExMRF9NQVhfRkxBU0hfQkFOS1MgICAgIDQKIAotI2RlZmluZSBERU5BTElfQlVGX1NJWkUJCU5BTkRfTUFYX1BBR0VTSVpFICsgTkFORF9NQVhfT09CU0laRQorI2RlZmluZSBERU5BTElfQlVGX1NJWkUJCShOQU5EX01BWF9QQUdFU0laRSArIE5BTkRfTUFYX09PQlNJWkUpCiAKLXN0cnVjdCBuYW5kX2J1Zgoteworc3RydWN0IG5hbmRfYnVmIHsKIAlpbnQgaGVhZDsKIAlpbnQgdGFpbDsKIAl1aW50OF90IGJ1ZltERU5BTElfQlVGX1NJWkVdOwpAQCAtNzg4LDcgKzc0Niw2IEBACiBzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyB7CiAJc3RydWN0IG10ZF9pbmZvIG10ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwIG5hbmQ7Ci0Jc3RydWN0IGRldmljZV9pbmZvX3RhZyBkZXZfaW5mbzsKIAlpbnQgZmxhc2hfYmFuazsgLyogY3VycmVudGx5IHNlbGVjdGVkIGNoaXAgKi8KIAlpbnQgc3RhdHVzOwogCWludCBwbGF0Zm9ybTsKQEAgLTgwNiwxMSArNzYzLDEyIEBACiAJdWludDMyX3QgaXJxX3N0YXR1czsKIAlpbnQgaXJxX2RlYnVnX2FycmF5WzMyXTsKIAlpbnQgaWR4OworCisJdWludDMyX3QgZGV2bnVtOwkvKiByZXByZXNlbnQgaG93IG1hbnkgbmFuZHMgY29ubmVjdGVkICovCisJdWludDMyX3QgZndibGtzOyAvKiByZXByZXNlbnQgaG93IG1hbnkgYmxvY2tzIEZXIHVzZWQgKi8KKwl1aW50MzJfdCB0b3RhbGJsa3M7CisJdWludDMyX3QgYmxrc3BlcmNoaXA7CisJdWludDMyX3QgYmJ0c2tpcGJ5dGVzOwogfTsKIAotc3RhdGljIHVpbnQxNl90ICBOQU5EX0ZsYXNoX1Jlc2V0KHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpOwotc3RhdGljIHVpbnQxNl90ICBOQU5EX1JlYWRfRGV2aWNlX0lEKHN0cnVjdCBkZW5hbGlfbmFuZF9pbmZvICpkZW5hbGkpOwotc3RhdGljIHZvaWQgTkFORF9MTERfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyhzdHJ1Y3QgZGVuYWxpX25hbmRfaW5mbyAqZGVuYWxpLCB1aW50MTZfdCBJTlRfRU5BQkxFKTsKLQogI2VuZGlmIC8qX0xMRF9OQU5EXyovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKaW5kZXggNDcwNjdiYy4uYjdmOGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvZG9jMjAwMC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9pbmZ0bC5oPgogCkBAIC0xNDYsNiArMTQ1LDcgQEAKIAl1aW50OF90IHBhcml0eTsKIAl1aW50MTZfdCBkc1s0XSwgc1s1XSwgdG1wLCBlcnJ2YWxbOF0sIHN5bls0XTsKIAorCW1lbXNldChzeW4sIDAsIHNpemVvZihzeW4pKTsKIAkvKiBDb252ZXJ0IHRoZSBlY2MgYnl0ZXMgaW50byB3b3JkcyAqLwogCWRzWzBdID0gKChlY2NbNF0gJiAweGZmKSA+PiAwKSB8ICgoZWNjWzVdICYgMHgwMykgPDwgOCk7CiAJZHNbMV0gPSAoKGVjY1s1XSAmIDB4ZmMpID4+IDIpIHwgKChlY2NbMl0gJiAweDBmKSA8PCA2KTsKQEAgLTE2OSw5ICsxNjksOSBAQAogCQkJc1tpXSBePSBycy0+YWxwaGFfdG9bcnNfbW9kbm4ocnMsIHRtcCArIChGQ1IgKyBpKSAqIGopXTsKIAl9CiAKLQkvKiBDYWxjIHNbaV0gPSBzW2ldIC8gYWxwaGFeKHYgKyBpKSAqLworCS8qIENhbGMgc3luW2ldID0gc1tpXSAvIGFscGhhXih2ICsgaSkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJPT1RTOyBpKyspIHsKLQkJaWYgKHN5bltpXSkKKwkJaWYgKHNbaV0pCiAJCQlzeW5baV0gPSByc19tb2RubihycywgcnMtPmluZGV4X29mW3NbaV1dICsgKE5OIC0gRkNSIC0gaSkpOwogCX0KIAkvKiBDYWxsIHRoZSBkZWNvZGVyIGxpYnJhcnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwppbmRleCAwZDc2YjE2Li5mY2Y4Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC0zOSw2MCArMzksOTYgQEAKIAogI2RlZmluZSBuZmNfaXNfdjIxKCkJCShjcHVfaXNfbXgyNSgpIHx8IGNwdV9pc19teDM1KCkpCiAjZGVmaW5lIG5mY19pc192MSgpCQkoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpCisjZGVmaW5lIG5mY19pc192M18yKCkJCWNwdV9pc19teDUxKCkKKyNkZWZpbmUgbmZjX2lzX3YzKCkJCW5mY19pc192M18yKCkKIAogLyogQWRkcmVzc2VzIGZvciBORkMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE5GQ19CVUZfU0laRQkJMHhFMDAKLSNkZWZpbmUgTkZDX0JVRl9BRERSCQkweEUwNAotI2RlZmluZSBORkNfRkxBU0hfQUREUgkJMHhFMDYKLSNkZWZpbmUgTkZDX0ZMQVNIX0NNRAkJMHhFMDgKLSNkZWZpbmUgTkZDX0NPTkZJRwkJMHhFMEEKLSNkZWZpbmUgTkZDX0VDQ19TVEFUVVNfUkVTVUxUCTB4RTBDCi0jZGVmaW5lIE5GQ19SU0xUTUFJTl9BUkVBCTB4RTBFCi0jZGVmaW5lIE5GQ19SU0xUU1BBUkVfQVJFQQkweEUxMAotI2RlZmluZSBORkNfV1JQUk9UCQkweEUxMgotI2RlZmluZSBORkNfVjFfVU5MT0NLU1RBUlRfQkxLQUREUgkweGUxNAotI2RlZmluZSBORkNfVjFfVU5MT0NLRU5EX0JMS0FERFIJMHhlMTYKLSNkZWZpbmUgTkZDX1YyMV9VTkxPQ0tTVEFSVF9CTEtBRERSCTB4ZTIwCi0jZGVmaW5lIE5GQ19WMjFfVU5MT0NLRU5EX0JMS0FERFIJMHhlMjIKLSNkZWZpbmUgTkZDX05GX1dSUFJTVAkJMHhFMTgKLSNkZWZpbmUgTkZDX0NPTkZJRzEJCTB4RTFBCi0jZGVmaW5lIE5GQ19DT05GSUcyCQkweEUxQworI2RlZmluZSBORkNfVjFfVjJfQlVGX1NJWkUJCShob3N0LT5yZWdzICsgMHgwMCkKKyNkZWZpbmUgTkZDX1YxX1YyX0JVRl9BRERSCQkoaG9zdC0+cmVncyArIDB4MDQpCisjZGVmaW5lIE5GQ19WMV9WMl9GTEFTSF9BRERSCQkoaG9zdC0+cmVncyArIDB4MDYpCisjZGVmaW5lIE5GQ19WMV9WMl9GTEFTSF9DTUQJCShob3N0LT5yZWdzICsgMHgwOCkKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRwkJKGhvc3QtPnJlZ3MgKyAweDBhKQorI2RlZmluZSBORkNfVjFfVjJfRUNDX1NUQVRVU19SRVNVTFQJKGhvc3QtPnJlZ3MgKyAweDBjKQorI2RlZmluZSBORkNfVjFfVjJfUlNMVE1BSU5fQVJFQQkJKGhvc3QtPnJlZ3MgKyAweDBlKQorI2RlZmluZSBORkNfVjFfVjJfUlNMVFNQQVJFX0FSRUEJKGhvc3QtPnJlZ3MgKyAweDEwKQorI2RlZmluZSBORkNfVjFfVjJfV1JQUk9UCQkoaG9zdC0+cmVncyArIDB4MTIpCisjZGVmaW5lIE5GQ19WMV9VTkxPQ0tTVEFSVF9CTEtBRERSCShob3N0LT5yZWdzICsgMHgxNCkKKyNkZWZpbmUgTkZDX1YxX1VOTE9DS0VORF9CTEtBRERSCShob3N0LT5yZWdzICsgMHgxNikKKyNkZWZpbmUgTkZDX1YyMV9VTkxPQ0tTVEFSVF9CTEtBRERSCShob3N0LT5yZWdzICsgMHgyMCkKKyNkZWZpbmUgTkZDX1YyMV9VTkxPQ0tFTkRfQkxLQUREUgkoaG9zdC0+cmVncyArIDB4MjIpCisjZGVmaW5lIE5GQ19WMV9WMl9ORl9XUlBSU1QJCShob3N0LT5yZWdzICsgMHgxOCkKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRzEJCShob3N0LT5yZWdzICsgMHgxYSkKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRzIJCShob3N0LT5yZWdzICsgMHgxYykKIAotLyogU2V0IElOVCB0byAwLCBGQ01EIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgotICogZm9yIENvbW1hbmQgb3BlcmF0aW9uICovCi0jZGVmaW5lIE5GQ19DTUQgICAgICAgICAgICAweDEKKyNkZWZpbmUgTkZDX1YyX0NPTkZJRzFfRUNDX01PREVfNAkoMSA8PCAwKQorI2RlZmluZSBORkNfVjFfVjJfQ09ORklHMV9TUF9FTgkJKDEgPDwgMikKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRzFfRUNDX0VOCSgxIDw8IDMpCisjZGVmaW5lIE5GQ19WMV9WMl9DT05GSUcxX0lOVF9NU0sJKDEgPDwgNCkKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRzFfQklHCQkoMSA8PCA1KQorI2RlZmluZSBORkNfVjFfVjJfQ09ORklHMV9SU1QJCSgxIDw8IDYpCisjZGVmaW5lIE5GQ19WMV9WMl9DT05GSUcxX0NFCQkoMSA8PCA3KQorI2RlZmluZSBORkNfVjFfVjJfQ09ORklHMV9PTkVfQ1lDTEUJKDEgPDwgOCkKIAotLyogU2V0IElOVCB0byAwLCBGQUREIHRvIDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgotICogZm9yIEFkZHJlc3Mgb3BlcmF0aW9uICovCi0jZGVmaW5lIE5GQ19BRERSICAgICAgICAgICAweDIKKyNkZWZpbmUgTkZDX1YxX1YyX0NPTkZJRzJfSU5UCQkoMSA8PCAxNSkKIAotLyogU2V0IElOVCB0byAwLCBGREkgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyCi0gKiBmb3IgSW5wdXQgb3BlcmF0aW9uICovCi0jZGVmaW5lIE5GQ19JTlBVVCAgICAgICAgICAweDQKKy8qCisgKiBPcGVyYXRpb24gbW9kZXMgZm9yIHRoZSBORkMuIFZhbGlkIGZvciB2MSwgdjIgYW5kIHYzCisgKiB0eXBlIGNvbnRyb2xsZXJzLgorICovCisjZGVmaW5lIE5GQ19DTUQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgTkZDX0FERFIJCQkoMSA8PCAxKQorI2RlZmluZSBORkNfSU5QVVQJCQkoMSA8PCAyKQorI2RlZmluZSBORkNfT1VUUFVUCQkJKDEgPDwgMykKKyNkZWZpbmUgTkZDX0lECQkJCSgxIDw8IDQpCisjZGVmaW5lIE5GQ19TVEFUVVMJCQkoMSA8PCA1KQogCi0vKiBTZXQgSU5UIHRvIDAsIEZETyB0byAwMDEsIHJlc3QgdG8gMCBpbiBORkNfQ09ORklHMiBSZWdpc3RlcgotICogZm9yIERhdGEgT3V0cHV0IG9wZXJhdGlvbiAqLwotI2RlZmluZSBORkNfT1VUUFVUICAgICAgICAgMHg4CisjZGVmaW5lIE5GQ19WM19GTEFTSF9DTUQJCShob3N0LT5yZWdzX2F4aSArIDB4MDApCisjZGVmaW5lIE5GQ19WM19GTEFTSF9BRERSMAkJKGhvc3QtPnJlZ3NfYXhpICsgMHgwNCkKIAotLyogU2V0IElOVCB0byAwLCBGRDAgdG8gMDEwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKLSAqIGZvciBSZWFkIElEIG9wZXJhdGlvbiAqLwotI2RlZmluZSBORkNfSUQgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBORkNfVjNfQ09ORklHMQkJCShob3N0LT5yZWdzX2F4aSArIDB4MzQpCisjZGVmaW5lIE5GQ19WM19DT05GSUcxX1NQX0VOCQkoMSA8PCAwKQorI2RlZmluZSBORkNfVjNfQ09ORklHMV9SQkEoeCkJCSgoKHgpICYgMHg3ICkgPDwgNCkKIAotLyogU2V0IElOVCB0byAwLCBGRE8gdG8gMTAwLCByZXN0IHRvIDAgaW4gTkZDX0NPTkZJRzIgUmVnaXN0ZXIKLSAqIGZvciBSZWFkIFN0YXR1cyBvcGVyYXRpb24gKi8KLSNkZWZpbmUgTkZDX1NUQVRVUyAgICAgICAgIDB4MjAKKyNkZWZpbmUgTkZDX1YzX0VDQ19TVEFUVVNfUkVTVUxUCShob3N0LT5yZWdzX2F4aSArIDB4MzgpCiAKLS8qIFNldCBJTlQgdG8gMSwgcmVzdCB0byAwIGluIE5GQ19DT05GSUcyIFJlZ2lzdGVyIGZvciBSZWFkCi0gKiBTdGF0dXMgb3BlcmF0aW9uICovCi0jZGVmaW5lIE5GQ19JTlQgICAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTkZDX1YzX0xBVU5DSAkJCShob3N0LT5yZWdzX2F4aSArIDB4NDApCiAKLSNkZWZpbmUgTkZDX1NQX0VOICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBORkNfRUNDX0VOICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIE5GQ19JTlRfTVNLICAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgTkZDX0JJRyAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBORkNfUlNUICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIE5GQ19DRSAgICAgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgTkZDX09ORV9DWUNMRSAgICAgICAoMSA8PCA4KQorI2RlZmluZSBORkNfVjNfV1JQUk9UCQkJKGhvc3QtPnJlZ3NfaXAgKyAweDApCisjZGVmaW5lIE5GQ19WM19XUlBST1RfTE9DS19USUdIVAkoMSA8PCAwKQorI2RlZmluZSBORkNfVjNfV1JQUk9UX0xPQ0sJCSgxIDw8IDEpCisjZGVmaW5lIE5GQ19WM19XUlBST1RfVU5MT0NLCQkoMSA8PCAyKQorI2RlZmluZSBORkNfVjNfV1JQUk9UX0JMU19VTkxPQ0sJKDIgPDwgNikKKworI2RlZmluZSBORkNfVjNfV1JQUk9UX1VOTE9DS19CTEtfQUREMCAgIChob3N0LT5yZWdzX2lwICsgMHgwNCkKKworI2RlZmluZSBORkNfVjNfQ09ORklHMgkJCShob3N0LT5yZWdzX2lwICsgMHgyNCkKKyNkZWZpbmUgTkZDX1YzX0NPTkZJRzJfUFNfNTEyCQkJKDAgPDwgMCkKKyNkZWZpbmUgTkZDX1YzX0NPTkZJRzJfUFNfMjA0OAkJCSgxIDw8IDApCisjZGVmaW5lIE5GQ19WM19DT05GSUcyX1BTXzQwOTYJCQkoMiA8PCAwKQorI2RlZmluZSBORkNfVjNfQ09ORklHMl9PTkVfQ1lDTEUJCSgxIDw8IDIpCisjZGVmaW5lIE5GQ19WM19DT05GSUcyX0VDQ19FTgkJCSgxIDw8IDMpCisjZGVmaW5lIE5GQ19WM19DT05GSUcyXzJDTURfUEhBU0VTCQkoMSA8PCA0KQorI2RlZmluZSBORkNfVjNfQ09ORklHMl9OVU1fQUREUl9QSEFTRTAJCSgxIDw8IDUpCisjZGVmaW5lIE5GQ19WM19DT05GSUcyX0VDQ19NT0RFXzgJCSgxIDw8IDYpCisjZGVmaW5lIE5GQ19WM19DT05GSUcyX1BQQih4KQkJCSgoKHgpICYgMHgzKSA8PCA3KQorI2RlZmluZSBORkNfVjNfQ09ORklHMl9OVU1fQUREUl9QSEFTRTEoeCkJKCgoeCkgJiAweDMpIDw8IDEyKQorI2RlZmluZSBORkNfVjNfQ09ORklHMl9JTlRfTVNLCQkJKDEgPDwgMTUpCisjZGVmaW5lIE5GQ19WM19DT05GSUcyX1NUX0NNRCh4KQkJKCgoeCkgJiAweGZmKSA8PCAyNCkKKyNkZWZpbmUgTkZDX1YzX0NPTkZJRzJfU1BBUyh4KQkJCSgoKHgpICYgMHhmZikgPDwgMTYpCisKKyNkZWZpbmUgTkZDX1YzX0NPTkZJRzMJCQkJKGhvc3QtPnJlZ3NfaXAgKyAweDI4KQorI2RlZmluZSBORkNfVjNfQ09ORklHM19BRERfT1AoeCkJCSgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSBORkNfVjNfQ09ORklHM19GVzgJCQkoMSA8PCAzKQorI2RlZmluZSBORkNfVjNfQ09ORklHM19TQkIoeCkJCQkoKCh4KSAmIDB4NykgPDwgOCkKKyNkZWZpbmUgTkZDX1YzX0NPTkZJRzNfTlVNX09GX0RFVklDRVMoeCkJKCgoeCkgJiAweDcpIDw8IDEyKQorI2RlZmluZSBORkNfVjNfQ09ORklHM19SQkJfTU9ERQkJCSgxIDw8IDE1KQorI2RlZmluZSBORkNfVjNfQ09ORklHM19OT19TRE1BCQkJKDEgPDwgMjApCisKKyNkZWZpbmUgTkZDX1YzX0lQQwkJCShob3N0LT5yZWdzX2lwICsgMHgyQykKKyNkZWZpbmUgTkZDX1YzX0lQQ19DUkVRCQkJKDEgPDwgMCkKKyNkZWZpbmUgTkZDX1YzX0lQQ19JTlQJCQkoMSA8PCAzMSkKKworI2RlZmluZSBORkNfVjNfREVMQVlfTElORQkJKGhvc3QtPnJlZ3NfaXAgKyAweDM0KQogCiBzdHJ1Y3QgbXhjX25hbmRfaG9zdCB7CiAJc3RydWN0IG10ZF9pbmZvCQltdGQ7CkBAIC0xMDIsMjAgKzEzOCwzMCBAQAogCiAJdm9pZAkJCSpzcGFyZTA7CiAJdm9pZAkJCSptYWluX2FyZWEwOwotCXZvaWQJCQkqbWFpbl9hcmVhMTsKIAogCXZvaWQgX19pb21lbQkJKmJhc2U7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwl2b2lkIF9faW9tZW0JCSpyZWdzX2F4aTsKKwl2b2lkIF9faW9tZW0JCSpyZWdzX2lwOwogCWludAkJCXN0YXR1c19yZXF1ZXN0OwogCXN0cnVjdCBjbGsJCSpjbGs7CiAJaW50CQkJY2xrX2FjdDsKIAlpbnQJCQlpcnE7CisJaW50CQkJZWNjc2l6ZTsKIAogCXdhaXRfcXVldWVfaGVhZF90CWlycV93YWl0cTsKIAogCXVpbnQ4X3QJCQkqZGF0YV9idWY7CiAJdW5zaWduZWQgaW50CQlidWZfc3RhcnQ7CiAJaW50CQkJc3BhcmVfbGVuOworCisJdm9pZAkJCSgqcHJlc2V0KShzdHJ1Y3QgbXRkX2luZm8gKik7CisJdm9pZAkJCSgqc2VuZF9jbWQpKHN0cnVjdCBteGNfbmFuZF9ob3N0ICosIHVpbnQxNl90LCBpbnQpOworCXZvaWQJCQkoKnNlbmRfYWRkcikoc3RydWN0IG14Y19uYW5kX2hvc3QgKiwgdWludDE2X3QsIGludCk7CisJdm9pZAkJCSgqc2VuZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKiwgdW5zaWduZWQgaW50KTsKKwl2b2lkCQkJKCpzZW5kX3JlYWRfaWQpKHN0cnVjdCBteGNfbmFuZF9ob3N0ICopOworCXVpbnQxNl90CQkoKmdldF9kZXZfc3RhdHVzKShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqKTsKKwlpbnQJCQkoKmNoZWNrX2ludCkoc3RydWN0IG14Y19uYW5kX2hvc3QgKik7CiB9OwogCiAvKiBPT0IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbiAqLwpAQCAtMTc1LDM0ICsyMjEsNTIgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgY2hlY2tfaW50X3YzKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IHJlYWRsKE5GQ19WM19JUEMpOworCWlmICghKHRtcCAmIE5GQ19WM19JUENfSU5UKSkKKwkJcmV0dXJuIDA7CisKKwl0bXAgJj0gfk5GQ19WM19JUENfSU5UOworCXdyaXRlbCh0bXAsIE5GQ19WM19JUEMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaW50X3YxX3YyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IHJlYWR3KE5GQ19WMV9WMl9DT05GSUcyKTsKKwlpZiAoISh0bXAgJiBORkNfVjFfVjJfQ09ORklHMl9JTlQpKQorCQlyZXR1cm4gMDsKKworCXdyaXRldyh0bXAgJiB+TkZDX1YxX1YyX0NPTkZJRzJfSU5ULCBORkNfVjFfVjJfQ09ORklHMik7CisKKwlyZXR1cm4gMTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBwb2xscyB0aGUgTkFOREZDIHRvIHdhaXQgZm9yIHRoZSBiYXNpYyBvcGVyYXRpb24gdG8KICAqIGNvbXBsZXRlIGJ5IGNoZWNraW5nIHRoZSBJTlQgYml0IG9mIGNvbmZpZzIgcmVnaXN0ZXIuCiAgKi8KIHN0YXRpYyB2b2lkIHdhaXRfb3BfZG9uZShzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCwgaW50IHVzZWlycSkKIHsKLQl1aW50MTZfdCB0bXA7CiAJaW50IG1heF9yZXRyaWVzID0gODAwMDsKIAogCWlmICh1c2VpcnEpIHsKLQkJaWYgKChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgPT0gMCkgeworCQlpZiAoIWhvc3QtPmNoZWNrX2ludChob3N0KSkgewogCiAJCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CiAKLQkJCXdhaXRfZXZlbnQoaG9zdC0+aXJxX3dhaXRxLAotCQkJCXJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgJiBORkNfSU5UKTsKLQotCQkJdG1wID0gcmVhZHcoaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKLQkJCXRtcCAgJj0gfk5GQ19JTlQ7Ci0JCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJd2FpdF9ldmVudChob3N0LT5pcnFfd2FpdHEsIGhvc3QtPmNoZWNrX2ludChob3N0KSk7CiAJCX0KIAl9IGVsc2UgewogCQl3aGlsZSAobWF4X3JldHJpZXMtLSA+IDApIHsKLQkJCWlmIChyZWFkdyhob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpICYgTkZDX0lOVCkgewotCQkJCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7Ci0JCQkJdG1wICAmPSB+TkZDX0lOVDsKLQkJCQl3cml0ZXcodG1wLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQkJaWYgKGhvc3QtPmNoZWNrX2ludChob3N0KSkKIAkJCQlicmVhazsKLQkJCX0KKwogCQkJdWRlbGF5KDEpOwogCQl9CiAJCWlmIChtYXhfcmV0cmllcyA8IDApCkBAIC0yMTEsMjEgKzI3NSwzMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2VuZF9jbWRfdjMoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGNtZCwgaW50IHVzZWlycSkKK3sKKwkvKiBmaWxsIGNvbW1hbmQgKi8KKwl3cml0ZWwoY21kLCBORkNfVjNfRkxBU0hfQ01EKTsKKworCS8qIHNlbmQgb3V0IGNvbW1hbmQgKi8KKwl3cml0ZWwoTkZDX0NNRCwgTkZDX1YzX0xBVU5DSCk7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gdG8gY29tcGxldGUgKi8KKwl3YWl0X29wX2RvbmUoaG9zdCwgdXNlaXJxKTsKK30KKwogLyogVGhpcyBmdW5jdGlvbiBpc3N1ZXMgdGhlIHNwZWNpZmllZCBjb21tYW5kIHRvIHRoZSBOQU5EIGRldmljZSBhbmQKICAqIHdhaXRzIGZvciBjb21wbGV0aW9uLiAqLwotc3RhdGljIHZvaWQgc2VuZF9jbWQoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGNtZCwgaW50IHVzZWlycSkKK3N0YXRpYyB2b2lkIHNlbmRfY21kX3YxX3YyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBjbWQsIGludCB1c2VpcnEpCiB7CiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfY21kKGhvc3QsIDB4JXgsICVkKVxuIiwgY21kLCB1c2VpcnEpOwogCi0Jd3JpdGV3KGNtZCwgaG9zdC0+cmVncyArIE5GQ19GTEFTSF9DTUQpOwotCXdyaXRldyhORkNfQ01ELCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCXdyaXRldyhjbWQsIE5GQ19WMV9WMl9GTEFTSF9DTUQpOworCXdyaXRldyhORkNfQ01ELCBORkNfVjFfVjJfQ09ORklHMik7CiAKIAlpZiAoY3B1X2lzX214MjEoKSAmJiAoY21kID09IE5BTkRfQ01EX1JFU0VUKSkgewogCQlpbnQgbWF4X3JldHJpZXMgPSAxMDA7CiAJCS8qIFJlc2V0IGNvbXBsZXRpb24gaXMgaW5kaWNhdGVkIGJ5IE5GQ19DT05GSUcyICovCiAJCS8qIGJlaW5nIHNldCB0byAwICovCiAJCXdoaWxlIChtYXhfcmV0cmllcy0tID4gMCkgewotCQkJaWYgKHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMikgPT0gMCkgeworCQkJaWYgKHJlYWR3KE5GQ19WMV9WMl9DT05GSUcyKSA9PSAwKSB7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQl1ZGVsYXkoMSk7CkBAIC0yMzksMjEgKzMxNSw0OCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2VuZF9hZGRyX3YzKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0LCB1aW50MTZfdCBhZGRyLCBpbnQgaXNsYXN0KQoreworCS8qIGZpbGwgYWRkcmVzcyAqLworCXdyaXRlbChhZGRyLCBORkNfVjNfRkxBU0hfQUREUjApOworCisJLyogc2VuZCBvdXQgYWRkcmVzcyAqLworCXdyaXRlbChORkNfQUREUiwgTkZDX1YzX0xBVU5DSCk7CisKKwl3YWl0X29wX2RvbmUoaG9zdCwgMCk7Cit9CisKIC8qIFRoaXMgZnVuY3Rpb24gc2VuZHMgYW4gYWRkcmVzcyAob3IgcGFydGlhbCBhZGRyZXNzKSB0byB0aGUKICAqIE5BTkQgZGV2aWNlLiBUaGUgYWRkcmVzcyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGZvcgogICogYSBOQU5EIGNvbW1hbmQuICovCi1zdGF0aWMgdm9pZCBzZW5kX2FkZHIoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGFkZHIsIGludCBpc2xhc3QpCitzdGF0aWMgdm9pZCBzZW5kX2FkZHJfdjFfdjIoc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QsIHVpbnQxNl90IGFkZHIsIGludCBpc2xhc3QpCiB7CiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgInNlbmRfYWRkcihob3N0LCAweCV4ICVkKVxuIiwgYWRkciwgaXNsYXN0KTsKIAotCXdyaXRldyhhZGRyLCBob3N0LT5yZWdzICsgTkZDX0ZMQVNIX0FERFIpOwotCXdyaXRldyhORkNfQUREUiwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcyKTsKKwl3cml0ZXcoYWRkciwgTkZDX1YxX1YyX0ZMQVNIX0FERFIpOworCXdyaXRldyhORkNfQUREUiwgTkZDX1YxX1YyX0NPTkZJRzIpOwogCiAJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiAJd2FpdF9vcF9kb25lKGhvc3QsIGlzbGFzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbmRfcGFnZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IG9wcykKK3N0YXRpYyB2b2lkIHNlbmRfcGFnZV92MyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IG9wcykKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG14Y19uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2NoaXAtPnByaXY7CisJdWludDMyX3QgdG1wOworCisJdG1wID0gcmVhZGwoTkZDX1YzX0NPTkZJRzEpOworCXRtcCAmPSB+KDcgPDwgNCk7CisJd3JpdGVsKHRtcCwgTkZDX1YzX0NPTkZJRzEpOworCisJLyogdHJhbnNmZXIgZGF0YSBmcm9tIE5GQyByYW0gdG8gbmFuZCAqLworCXdyaXRlbChvcHMsIE5GQ19WM19MQVVOQ0gpOworCisJd2FpdF9vcF9kb25lKGhvc3QsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9wYWdlX3YxX3YyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgb3BzKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKQEAgLTI2NywyNCArMzcwLDM0IEBACiAJZm9yIChpID0gMDsgaSA8IGJ1ZnM7IGkrKykgewogCiAJCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBwYWdlIHJlYWQvd3JpdGUgKi8KLQkJd3JpdGV3KGksIGhvc3QtPnJlZ3MgKyBORkNfQlVGX0FERFIpOworCQl3cml0ZXcoaSwgTkZDX1YxX1YyX0JVRl9BRERSKTsKIAotCQl3cml0ZXcob3BzLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOworCQl3cml0ZXcob3BzLCBORkNfVjFfVjJfQ09ORklHMik7CiAKIAkJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiAJCXdhaXRfb3BfZG9uZShob3N0LCB0cnVlKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHNlbmRfcmVhZF9pZF92MyhzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCkKK3sKKwkvKiBSZWFkIElEIGludG8gbWFpbiBidWZmZXIgKi8KKwl3cml0ZWwoTkZDX0lELCBORkNfVjNfTEFVTkNIKTsKKworCXdhaXRfb3BfZG9uZShob3N0LCB0cnVlKTsKKworCW1lbWNweShob3N0LT5kYXRhX2J1ZiwgaG9zdC0+bWFpbl9hcmVhMCwgMTYpOworfQorCiAvKiBSZXF1ZXN0IHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlIE5BTkQgZGV2aWNlIElELiAqLwotc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2VuZF9yZWFkX2lkX3YxX3YyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAmaG9zdC0+bmFuZDsKIAogCS8qIE5BTkRGQyBidWZmZXIgMCBpcyB1c2VkIGZvciBkZXZpY2UgSUQgb3V0cHV0ICovCi0Jd3JpdGV3KDB4MCwgaG9zdC0+cmVncyArIE5GQ19CVUZfQUREUik7CisJd3JpdGV3KDB4MCwgTkZDX1YxX1YyX0JVRl9BRERSKTsKIAotCXdyaXRldyhORkNfSUQsIGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMik7CisJd3JpdGV3KE5GQ19JRCwgTkZDX1YxX1YyX0NPTkZJRzIpOwogCiAJLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCiAJd2FpdF9vcF9kb25lKGhvc3QsIHRydWUpOwpAQCAtMzAxLDI5ICs0MTQsMzYgQEAKIAltZW1jcHkoaG9zdC0+ZGF0YV9idWYsIGhvc3QtPm1haW5fYXJlYTAsIDE2KTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgTkFOREZDIHRvIHBlcmZvcm0gYSByZWFkIG9mIHRoZQotICogTkFORCBkZXZpY2Ugc3RhdHVzIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cy4gKi8KLXN0YXRpYyB1aW50MTZfdCBnZXRfZGV2X3N0YXR1cyhzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCkKK3N0YXRpYyB1aW50MTZfdCBnZXRfZGV2X3N0YXR1c192MyhzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCkKIHsKLQl2b2lkIF9faW9tZW0gKm1haW5fYnVmID0gaG9zdC0+bWFpbl9hcmVhMTsKLQl1aW50MzJfdCBzdG9yZTsKLQl1aW50MTZfdCByZXQ7Ci0JLyogSXNzdWUgc3RhdHVzIHJlcXVlc3QgdG8gTkFORCBkZXZpY2UgKi8KLQotCS8qIHN0b3JlIHRoZSBtYWluIGFyZWExIGZpcnN0IHdvcmQsIGxhdGVyIGRvIHJlY292ZXJ5ICovCi0Jc3RvcmUgPSByZWFkbChtYWluX2J1Zik7Ci0JLyogTkFOREZDIGJ1ZmZlciAxIGlzIHVzZWQgZm9yIGRldmljZSBzdGF0dXMgdG8gcHJldmVudAotCSAqIGNvcnJ1cHRpb24gb2YgcmVhZC93cml0ZSBidWZmZXIgb24gc3RhdHVzIHJlcXVlc3RzLiAqLwotCXdyaXRldygxLCBob3N0LT5yZWdzICsgTkZDX0JVRl9BRERSKTsKLQotCXdyaXRldyhORkNfU1RBVFVTLCBob3N0LT5yZWdzICsgTkZDX0NPTkZJRzIpOwotCi0JLyogV2FpdCBmb3Igb3BlcmF0aW9uIHRvIGNvbXBsZXRlICovCisJd3JpdGV3KE5GQ19TVEFUVVMsIE5GQ19WM19MQVVOQ0gpOwogCXdhaXRfb3BfZG9uZShob3N0LCB0cnVlKTsKIAotCS8qIFN0YXR1cyBpcyBwbGFjZWQgaW4gZmlyc3Qgd29yZCBvZiBtYWluIGJ1ZmZlciAqLwotCS8qIGdldCBzdGF0dXMsIHRoZW4gcmVjb3ZlcnkgYXJlYSAxIGRhdGEgKi8KKwlyZXR1cm4gcmVhZGwoTkZDX1YzX0NPTkZJRzEpID4+IDE2OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlcXVlc3RzIHRoZSBOQU5ERkMgdG8gcGVyZm9ybSBhIHJlYWQgb2YgdGhlCisgKiBOQU5EIGRldmljZSBzdGF0dXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc3RhdHVzLiAqLworc3RhdGljIHVpbnQxNl90IGdldF9kZXZfc3RhdHVzX3YxX3YyKHN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqbWFpbl9idWYgPSBob3N0LT5tYWluX2FyZWEwOworCXVpbnQzMl90IHN0b3JlOworCXVpbnQxNl90IHJldDsKKworCXdyaXRldygweDAsIE5GQ19WMV9WMl9CVUZfQUREUik7CisKKwkvKgorCSAqIFRoZSBkZXZpY2Ugc3RhdHVzIGlzIHN0b3JlZCBpbiBtYWluX2FyZWEwLiBUbworCSAqIHByZXZlbnQgY29ycnVwdGlvbiBvZiB0aGUgYnVmZmVyIHNhdmUgdGhlIHZhbHVlCisJICogYW5kIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcy4KKwkgKi8KKwlzdG9yZSA9IHJlYWRsKG1haW5fYnVmKTsKKworCXdyaXRldyhORkNfU1RBVFVTLCBORkNfVjFfVjJfQ09ORklHMik7CisJd2FpdF9vcF9kb25lKGhvc3QsIHRydWUpOworCiAJcmV0ID0gcmVhZHcobWFpbl9idWYpOworCiAJd3JpdGVsKHN0b3JlLCBtYWluX2J1Zik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzQ3LDcgKzQ2Nyw3IEBACiAJICovCiB9CiAKLXN0YXRpYyBpbnQgbXhjX25hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKK3N0YXRpYyBpbnQgbXhjX25hbmRfY29ycmVjdF9kYXRhX3YxKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKIAkJCQkgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kX2NoaXAgPSBtdGQtPnByaXY7CkBAIC0zNTgsNyArNDc4LDcgQEAKIAkgKiBhZGRpdGlvbmFsIGNvcnJlY3Rpb24uICAyLUJpdCBlcnJvcnMgY2Fubm90IGJlIGNvcnJlY3RlZCBieQogCSAqIEhXIEVDQywgc28gd2UgbmVlZCB0byByZXR1cm4gZmFpbHVyZQogCSAqLwotCXVpbnQxNl90IGVjY19zdGF0dXMgPSByZWFkdyhob3N0LT5yZWdzICsgTkZDX0VDQ19TVEFUVVNfUkVTVUxUKTsKKwl1aW50MTZfdCBlY2Nfc3RhdHVzID0gcmVhZHcoTkZDX1YxX1YyX0VDQ19TVEFUVVNfUkVTVUxUKTsKIAogCWlmICgoKGVjY19zdGF0dXMgJiAweDMpID09IDIpIHx8ICgoZWNjX3N0YXR1cyA+PiAyKSA9PSAyKSkgewogCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLApAQCAtMzY5LDYgKzQ4OSw0MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG14Y19uYW5kX2NvcnJlY3RfZGF0YV92Ml92MyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsCisJCQkJIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OworCXUzMiBlY2Nfc3RhdCwgZXJyOworCWludCBub19zdWJwYWdlcyA9IDE7CisJaW50IHJldCA9IDA7CisJdTggZWNjX2JpdF9tYXNrLCBlcnJfbGltaXQ7CisKKwllY2NfYml0X21hc2sgPSAoaG9zdC0+ZWNjc2l6ZSA9PSA0KSA/IDB4NyA6IDB4ZjsKKwllcnJfbGltaXQgPSAoaG9zdC0+ZWNjc2l6ZSA9PSA0KSA/IDB4NCA6IDB4ODsKKworCW5vX3N1YnBhZ2VzID0gbXRkLT53cml0ZXNpemUgPj4gOTsKKworCWlmIChuZmNfaXNfdjIxKCkpCisJCWVjY19zdGF0ID0gcmVhZGwoTkZDX1YxX1YyX0VDQ19TVEFUVVNfUkVTVUxUKTsKKwllbHNlCisJCWVjY19zdGF0ID0gcmVhZGwoTkZDX1YzX0VDQ19TVEFUVVNfUkVTVUxUKTsKKworCWRvIHsKKwkJZXJyID0gZWNjX3N0YXQgJiBlY2NfYml0X21hc2s7CisJCWlmIChlcnIgPiBlcnJfbGltaXQpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuQ29ycmVjdGFibGUgUlMtRUNDIEVycm9yXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCXJldCArPSBlcnI7CisJCX0KKwkJZWNjX3N0YXQgPj49IDQ7CisJfSB3aGlsZSAoLS1ub19zdWJwYWdlcyk7CisKKwltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gcmV0OworCXByX2RlYnVnKCIlZCBTeW1ib2wgQ29ycmVjdGFibGUgUlMtRUNDIEVycm9yXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBteGNfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwKIAkJCQkgIHVfY2hhciAqZWNjX2NvZGUpCiB7CkBAIC0zODMsNyArNTQwLDcgQEAKIAogCS8qIENoZWNrIGZvciBzdGF0dXMgcmVxdWVzdCAqLwogCWlmIChob3N0LT5zdGF0dXNfcmVxdWVzdCkKLQkJcmV0dXJuIGdldF9kZXZfc3RhdHVzKGhvc3QpICYgMHhGRjsKKwkJcmV0dXJuIGhvc3QtPmdldF9kZXZfc3RhdHVzKGhvc3QpICYgMHhGRjsKIAogCXJldCA9ICoodWludDhfdCAqKShob3N0LT5kYXRhX2J1ZiArIGhvc3QtPmJ1Zl9zdGFydCk7CiAJaG9zdC0+YnVmX3N0YXJ0Kys7CkBAIC01MTksNzEgKzY3NiwxNjMgQEAKIAkJICogd2Ugd2lsbCB1c2VkIHRoZSBzYXZlZCBjb2x1bW4gYWRkcmVzcyB0byBpbmRleCBpbnRvCiAJCSAqIHRoZSBmdWxsIHBhZ2UuCiAJCSAqLwotCQlzZW5kX2FkZHIoaG9zdCwgMCwgcGFnZV9hZGRyID09IC0xKTsKKwkJaG9zdC0+c2VuZF9hZGRyKGhvc3QsIDAsIHBhZ2VfYWRkciA9PSAtMSk7CiAJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKIAkJCS8qIGFub3RoZXIgY29sIGFkZHIgY3ljbGUgZm9yIDJrIHBhZ2UgKi8KLQkJCXNlbmRfYWRkcihob3N0LCAwLCBmYWxzZSk7CisJCQlob3N0LT5zZW5kX2FkZHIoaG9zdCwgMCwgZmFsc2UpOwogCX0KIAogCS8qIFdyaXRlIG91dCBwYWdlIGFkZHJlc3MsIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKIAkJLyogcGFkZHJfMCAtIHBfYWRkcl83ICovCi0JCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyICYgMHhmZiksIGZhbHNlKTsKKwkJaG9zdC0+c2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgJiAweGZmKSwgZmFsc2UpOwogCiAJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikgewogCQkJaWYgKG10ZC0+c2l6ZSA+PSAweDEwMDAwMDAwKSB7CiAJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCi0JCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCBmYWxzZSk7Ci0JCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CisJCQkJaG9zdC0+c2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCBmYWxzZSk7CisJCQkJaG9zdC0+c2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gMTYpICYgMHhmZiwgdHJ1ZSk7CiAJCQl9IGVsc2UKIAkJCQkvKiBwYWRkcl84IC0gcGFkZHJfMTUgKi8KLQkJCQlzZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYsIHRydWUpOworCQkJCWhvc3QtPnNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgdHJ1ZSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBoaWdoZXIgZGVuc2l0eSBkZXZpY2VzICovCiAJCQlpZiAobXRkLT5zaXplID49IDB4NDAwMDAwMCkgewogCQkJCS8qIHBhZGRyXzggLSBwYWRkcl8xNSAqLwotCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgZmFsc2UpOwotCQkJCXNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYsIHRydWUpOworCQkJCWhvc3QtPnNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDgpICYgMHhmZiwgZmFsc2UpOworCQkJCWhvc3QtPnNlbmRfYWRkcihob3N0LCAocGFnZV9hZGRyID4+IDE2KSAmIDB4ZmYsIHRydWUpOwogCQkJfSBlbHNlCiAJCQkJLyogcGFkZHJfOCAtIHBhZGRyXzE1ICovCi0JCQkJc2VuZF9hZGRyKGhvc3QsIChwYWdlX2FkZHIgPj4gOCkgJiAweGZmLCB0cnVlKTsKKwkJCQlob3N0LT5zZW5kX2FkZHIoaG9zdCwgKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYsIHRydWUpOwogCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwcmVzZXQoc3RydWN0IG10ZF9pbmZvICptdGQpCisvKgorICogdjIgYW5kIHYzIHR5cGUgY29udHJvbGxlcnMgY2FuIGRvIDRiaXQgb3IgOGJpdCBlY2MgZGVwZW5kaW5nCisgKiBvbiBob3cgbXVjaCBvb2IgdGhlIG5hbmQgY2hpcCBoYXMuIEZvciA4Yml0IGVjYyB3ZSBuZWVkIGF0IGxlYXN0CisgKiAyNiBieXRlcyBvZiBvb2IgZGF0YSBwZXIgNTEyIGJ5dGUgYmxvY2suCisgKi8KK3N0YXRpYyBpbnQgZ2V0X2VjY3NpemUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJaW50IG9vYmJ5dGVzX3Blcl81MTIgPSAwOworCisJb29iYnl0ZXNfcGVyXzUxMiA9IG10ZC0+b29ic2l6ZSAqIDUxMiAvIG10ZC0+d3JpdGVzaXplOworCisJaWYgKG9vYmJ5dGVzX3Blcl81MTIgPCAyNikKKwkJcmV0dXJuIDQ7CisJZWxzZQorCQlyZXR1cm4gODsKK30KKworc3RhdGljIHZvaWQgcHJlc2V0X3YxX3YyKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgbXhjX25hbmRfaG9zdCAqaG9zdCA9IG5hbmRfY2hpcC0+cHJpdjsKIAl1aW50MTZfdCB0bXA7CiAKIAkvKiBlbmFibGUgaW50ZXJydXB0LCBkaXNhYmxlIHNwYXJlIGVuYWJsZSAqLwotCXRtcCA9IHJlYWR3KGhvc3QtPnJlZ3MgKyBORkNfQ09ORklHMSk7Ci0JdG1wICY9IH5ORkNfSU5UX01TSzsKLQl0bXAgJj0gfk5GQ19TUF9FTjsKKwl0bXAgPSByZWFkdyhORkNfVjFfVjJfQ09ORklHMSk7CisJdG1wICY9IH5ORkNfVjFfVjJfQ09ORklHMV9JTlRfTVNLOworCXRtcCAmPSB+TkZDX1YxX1YyX0NPTkZJRzFfU1BfRU47CiAJaWYgKG5hbmRfY2hpcC0+ZWNjLm1vZGUgPT0gTkFORF9FQ0NfSFcpIHsKLQkJdG1wIHw9IE5GQ19FQ0NfRU47CisJCXRtcCB8PSBORkNfVjFfVjJfQ09ORklHMV9FQ0NfRU47CiAJfSBlbHNlIHsKLQkJdG1wICY9IH5ORkNfRUNDX0VOOworCQl0bXAgJj0gfk5GQ19WMV9WMl9DT05GSUcxX0VDQ19FTjsKIAl9Ci0Jd3JpdGV3KHRtcCwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcxKTsKKworCWlmIChuZmNfaXNfdjIxKCkgJiYgbXRkLT53cml0ZXNpemUpIHsKKwkJaG9zdC0+ZWNjc2l6ZSA9IGdldF9lY2NzaXplKG10ZCk7CisJCWlmIChob3N0LT5lY2NzaXplID09IDQpCisJCQl0bXAgfD0gTkZDX1YyX0NPTkZJRzFfRUNDX01PREVfNDsKKwl9IGVsc2UgeworCQlob3N0LT5lY2NzaXplID0gMTsKKwl9CisKKwl3cml0ZXcodG1wLCBORkNfVjFfVjJfQ09ORklHMSk7CiAJLyogcHJlc2V0IG9wZXJhdGlvbiAqLwogCiAJLyogVW5sb2NrIHRoZSBpbnRlcm5hbCBSQU0gQnVmZmVyICovCi0Jd3JpdGV3KDB4MiwgaG9zdC0+cmVncyArIE5GQ19DT05GSUcpOworCXdyaXRldygweDIsIE5GQ19WMV9WMl9DT05GSUcpOwogCiAJLyogQmxvY2tzIHRvIGJlIHVubG9ja2VkICovCiAJaWYgKG5mY19pc192MjEoKSkgewotCQl3cml0ZXcoMHgwLCBob3N0LT5yZWdzICsgTkZDX1YyMV9VTkxPQ0tTVEFSVF9CTEtBRERSKTsKLQkJd3JpdGV3KDB4ZmZmZiwgaG9zdC0+cmVncyArIE5GQ19WMjFfVU5MT0NLRU5EX0JMS0FERFIpOworCQl3cml0ZXcoMHgwLCBORkNfVjIxX1VOTE9DS1NUQVJUX0JMS0FERFIpOworCQl3cml0ZXcoMHhmZmZmLCBORkNfVjIxX1VOTE9DS0VORF9CTEtBRERSKTsKIAl9IGVsc2UgaWYgKG5mY19pc192MSgpKSB7Ci0JCXdyaXRldygweDAsIGhvc3QtPnJlZ3MgKyBORkNfVjFfVU5MT0NLU1RBUlRfQkxLQUREUik7Ci0JCXdyaXRldygweDQwMDAsIGhvc3QtPnJlZ3MgKyBORkNfVjFfVU5MT0NLRU5EX0JMS0FERFIpOworCQl3cml0ZXcoMHgwLCBORkNfVjFfVU5MT0NLU1RBUlRfQkxLQUREUik7CisJCXdyaXRldygweDQwMDAsIE5GQ19WMV9VTkxPQ0tFTkRfQkxLQUREUik7CiAJfSBlbHNlCiAJCUJVRygpOwogCiAJLyogVW5sb2NrIEJsb2NrIENvbW1hbmQgZm9yIGdpdmVuIGFkZHJlc3MgcmFuZ2UgKi8KLQl3cml0ZXcoMHg0LCBob3N0LT5yZWdzICsgTkZDX1dSUFJPVCk7CisJd3JpdGV3KDB4NCwgTkZDX1YxX1YyX1dSUFJPVCk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXNldF92MyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gY2hpcC0+cHJpdjsKKwl1aW50MzJfdCBjb25maWcyLCBjb25maWczOworCWludCBpLCBhZGRyX3BoYXNlczsKKworCXdyaXRlbChORkNfVjNfQ09ORklHMV9SQkEoMCksIE5GQ19WM19DT05GSUcxKTsKKwl3cml0ZWwoTkZDX1YzX0lQQ19DUkVRLCBORkNfVjNfSVBDKTsKKworCS8qIFVubG9jayB0aGUgaW50ZXJuYWwgUkFNIEJ1ZmZlciAqLworCXdyaXRlbChORkNfVjNfV1JQUk9UX0JMU19VTkxPQ0sgfCBORkNfVjNfV1JQUk9UX1VOTE9DSywKKwkJCU5GQ19WM19XUlBST1QpOworCisJLyogQmxvY2tzIHRvIGJlIHVubG9ja2VkICovCisJZm9yIChpID0gMDsgaSA8IE5BTkRfTUFYX0NISVBTOyBpKyspCisJCXdyaXRlbCgweDAgfAkoMHhmZmZmIDw8IDE2KSwKKwkJCQlORkNfVjNfV1JQUk9UX1VOTE9DS19CTEtfQUREMCArIChpIDw8IDIpKTsKKworCXdyaXRlbCgwLCBORkNfVjNfSVBDKTsKKworCWNvbmZpZzIgPSBORkNfVjNfQ09ORklHMl9PTkVfQ1lDTEUgfAorCQlORkNfVjNfQ09ORklHMl8yQ01EX1BIQVNFUyB8CisJCU5GQ19WM19DT05GSUcyX1NQQVMobXRkLT5vb2JzaXplID4+IDEpIHwKKwkJTkZDX1YzX0NPTkZJRzJfU1RfQ01EKDB4NzApIHwKKwkJTkZDX1YzX0NPTkZJRzJfTlVNX0FERFJfUEhBU0UwOworCisJaWYgKGNoaXAtPmVjYy5tb2RlID09IE5BTkRfRUNDX0hXKQorCQljb25maWcyIHw9IE5GQ19WM19DT05GSUcyX0VDQ19FTjsKKworCWFkZHJfcGhhc2VzID0gZmxzKGNoaXAtPnBhZ2VtYXNrKSA+PiAzOworCisJaWYgKG10ZC0+d3JpdGVzaXplID09IDIwNDgpIHsKKwkJY29uZmlnMiB8PSBORkNfVjNfQ09ORklHMl9QU18yMDQ4OworCQljb25maWcyIHw9IE5GQ19WM19DT05GSUcyX05VTV9BRERSX1BIQVNFMShhZGRyX3BoYXNlcyk7CisJfSBlbHNlIGlmIChtdGQtPndyaXRlc2l6ZSA9PSA0MDk2KSB7CisJCWNvbmZpZzIgfD0gTkZDX1YzX0NPTkZJRzJfUFNfNDA5NjsKKwkJY29uZmlnMiB8PSBORkNfVjNfQ09ORklHMl9OVU1fQUREUl9QSEFTRTEoYWRkcl9waGFzZXMpOworCX0gZWxzZSB7CisJCWNvbmZpZzIgfD0gTkZDX1YzX0NPTkZJRzJfUFNfNTEyOworCQljb25maWcyIHw9IE5GQ19WM19DT05GSUcyX05VTV9BRERSX1BIQVNFMShhZGRyX3BoYXNlcyAtIDEpOworCX0KKworCWlmIChtdGQtPndyaXRlc2l6ZSkgeworCQljb25maWcyIHw9IE5GQ19WM19DT05GSUcyX1BQQihmZnMobXRkLT5lcmFzZXNpemUgLyBtdGQtPndyaXRlc2l6ZSkgLSA2KTsKKwkJaG9zdC0+ZWNjc2l6ZSA9IGdldF9lY2NzaXplKG10ZCk7CisJCWlmIChob3N0LT5lY2NzaXplID09IDgpCisJCQljb25maWcyIHw9IE5GQ19WM19DT05GSUcyX0VDQ19NT0RFXzg7CisJfQorCisJd3JpdGVsKGNvbmZpZzIsIE5GQ19WM19DT05GSUcyKTsKKworCWNvbmZpZzMgPSBORkNfVjNfQ09ORklHM19OVU1fT0ZfREVWSUNFUygwKSB8CisJCQlORkNfVjNfQ09ORklHM19OT19TRE1BIHwKKwkJCU5GQ19WM19DT05GSUczX1JCQl9NT0RFIHwKKwkJCU5GQ19WM19DT05GSUczX1NCQig2KSB8IC8qIFJlc2V0IGRlZmF1bHQgKi8KKwkJCU5GQ19WM19DT05GSUczX0FERF9PUCgwKTsKKworCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSkKKwkJY29uZmlnMyB8PSBORkNfVjNfQ09ORklHM19GVzg7CisKKwl3cml0ZWwoY29uZmlnMywgTkZDX1YzX0NPTkZJRzMpOworCisJd3JpdGVsKDAsIE5GQ19WM19ERUxBWV9MSU5FKTsKIH0KIAogLyogVXNlZCBieSB0aGUgdXBwZXIgbGF5ZXIgdG8gd3JpdGUgY29tbWFuZCB0byBOQU5EIEZsYXNoIGZvcgpAQCAtNjA0LDE1ICs4NTMsMTUgQEAKIAkvKiBDb21tYW5kIHByZS1wcm9jZXNzaW5nIHN0ZXAgKi8KIAlzd2l0Y2ggKGNvbW1hbmQpIHsKIAljYXNlIE5BTkRfQ01EX1JFU0VUOgotCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7Ci0JCXByZXNldChtdGQpOworCQlob3N0LT5wcmVzZXQobXRkKTsKKwkJaG9zdC0+c2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgZmFsc2UpOwogCQlicmVhazsKIAogCWNhc2UgTkFORF9DTURfU1RBVFVTOgogCQlob3N0LT5idWZfc3RhcnQgPSAwOwogCQlob3N0LT5zdGF0dXNfcmVxdWVzdCA9IHRydWU7CiAKLQkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgdHJ1ZSk7CisJCWhvc3QtPnNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIHRydWUpOwogCQlteGNfZG9fYWRkcl9jeWNsZShtdGQsIGNvbHVtbiwgcGFnZV9hZGRyKTsKIAkJYnJlYWs7CiAKQEAgLTYyNSwxMyArODc0LDEzIEBACiAKIAkJY29tbWFuZCA9IE5BTkRfQ01EX1JFQUQwOyAvKiBvbmx5IFJFQUQwIGlzIHZhbGlkICovCiAKLQkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgZmFsc2UpOworCQlob3N0LT5zZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7CiAJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwogCiAJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKLQkJCXNlbmRfY21kKGhvc3QsIE5BTkRfQ01EX1JFQURTVEFSVCwgdHJ1ZSk7CisJCQlob3N0LT5zZW5kX2NtZChob3N0LCBOQU5EX0NNRF9SRUFEU1RBUlQsIHRydWUpOwogCi0JCXNlbmRfcGFnZShtdGQsIE5GQ19PVVRQVVQpOworCQlob3N0LT5zZW5kX3BhZ2UobXRkLCBORkNfT1VUUFVUKTsKIAogCQltZW1jcHkoaG9zdC0+ZGF0YV9idWYsIGhvc3QtPm1haW5fYXJlYTAsIG10ZC0+d3JpdGVzaXplKTsKIAkJY29weV9zcGFyZShtdGQsIHRydWUpOwpAQCAtNjQ0LDI4ICs4OTMsMjggQEAKIAogCQlob3N0LT5idWZfc3RhcnQgPSBjb2x1bW47CiAKLQkJc2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgZmFsc2UpOworCQlob3N0LT5zZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7CiAJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwogCQlicmVhazsKIAogCWNhc2UgTkFORF9DTURfUEFHRVBST0c6CiAJCW1lbWNweShob3N0LT5tYWluX2FyZWEwLCBob3N0LT5kYXRhX2J1ZiwgbXRkLT53cml0ZXNpemUpOwogCQljb3B5X3NwYXJlKG10ZCwgZmFsc2UpOwotCQlzZW5kX3BhZ2UobXRkLCBORkNfSU5QVVQpOwotCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB0cnVlKTsKKwkJaG9zdC0+c2VuZF9wYWdlKG10ZCwgTkZDX0lOUFVUKTsKKwkJaG9zdC0+c2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgdHJ1ZSk7CiAJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwogCQlicmVhazsKIAogCWNhc2UgTkFORF9DTURfUkVBRElEOgotCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCB0cnVlKTsKKwkJaG9zdC0+c2VuZF9jbWQoaG9zdCwgY29tbWFuZCwgdHJ1ZSk7CiAJCW14Y19kb19hZGRyX2N5Y2xlKG10ZCwgY29sdW1uLCBwYWdlX2FkZHIpOwotCQlzZW5kX3JlYWRfaWQoaG9zdCk7CisJCWhvc3QtPnNlbmRfcmVhZF9pZChob3N0KTsKIAkJaG9zdC0+YnVmX3N0YXJ0ID0gY29sdW1uOwogCQlicmVhazsKIAogCWNhc2UgTkFORF9DTURfRVJBU0UxOgogCWNhc2UgTkFORF9DTURfRVJBU0UyOgotCQlzZW5kX2NtZChob3N0LCBjb21tYW5kLCBmYWxzZSk7CisJCWhvc3QtPnNlbmRfY21kKGhvc3QsIGNvbW1hbmQsIGZhbHNlKTsKIAkJbXhjX2RvX2FkZHJfY3ljbGUobXRkLCBjb2x1bW4sIHBhZ2VfYWRkcik7CiAKIAkJYnJlYWs7CkBAIC03NjEsMjIgKzEwMTAsNTUgQEAKIAl9CiAKIAlob3N0LT5tYWluX2FyZWEwID0gaG9zdC0+YmFzZTsKLQlob3N0LT5tYWluX2FyZWExID0gaG9zdC0+YmFzZSArIDB4MjAwOworCisJaWYgKG5mY19pc192MSgpIHx8IG5mY19pc192MjEoKSkgeworCQlob3N0LT5wcmVzZXQgPSBwcmVzZXRfdjFfdjI7CisJCWhvc3QtPnNlbmRfY21kID0gc2VuZF9jbWRfdjFfdjI7CisJCWhvc3QtPnNlbmRfYWRkciA9IHNlbmRfYWRkcl92MV92MjsKKwkJaG9zdC0+c2VuZF9wYWdlID0gc2VuZF9wYWdlX3YxX3YyOworCQlob3N0LT5zZW5kX3JlYWRfaWQgPSBzZW5kX3JlYWRfaWRfdjFfdjI7CisJCWhvc3QtPmdldF9kZXZfc3RhdHVzID0gZ2V0X2Rldl9zdGF0dXNfdjFfdjI7CisJCWhvc3QtPmNoZWNrX2ludCA9IGNoZWNrX2ludF92MV92MjsKKwl9CiAKIAlpZiAobmZjX2lzX3YyMSgpKSB7Ci0JCWhvc3QtPnJlZ3MgPSBob3N0LT5iYXNlICsgMHgxMDAwOworCQlob3N0LT5yZWdzID0gaG9zdC0+YmFzZSArIDB4MWUwMDsKIAkJaG9zdC0+c3BhcmUwID0gaG9zdC0+YmFzZSArIDB4MTAwMDsKIAkJaG9zdC0+c3BhcmVfbGVuID0gNjQ7CiAJCW9vYl9zbWFsbHBhZ2UgPSAmbmFuZHYyX2h3X2VjY29vYl9zbWFsbHBhZ2U7CiAJCW9vYl9sYXJnZXBhZ2UgPSAmbmFuZHYyX2h3X2VjY29vYl9sYXJnZXBhZ2U7CiAJCXRoaXMtPmVjYy5ieXRlcyA9IDk7CiAJfSBlbHNlIGlmIChuZmNfaXNfdjEoKSkgewotCQlob3N0LT5yZWdzID0gaG9zdC0+YmFzZTsKKwkJaG9zdC0+cmVncyA9IGhvc3QtPmJhc2UgKyAweGUwMDsKIAkJaG9zdC0+c3BhcmUwID0gaG9zdC0+YmFzZSArIDB4ODAwOwogCQlob3N0LT5zcGFyZV9sZW4gPSAxNjsKIAkJb29iX3NtYWxscGFnZSA9ICZuYW5kdjFfaHdfZWNjb29iX3NtYWxscGFnZTsKIAkJb29iX2xhcmdlcGFnZSA9ICZuYW5kdjFfaHdfZWNjb29iX2xhcmdlcGFnZTsKIAkJdGhpcy0+ZWNjLmJ5dGVzID0gMzsKKwkJaG9zdC0+ZWNjc2l6ZSA9IDE7CisJfSBlbHNlIGlmIChuZmNfaXNfdjNfMigpKSB7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJCWlmICghcmVzKSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBlaXJxOworCQl9CisJCWhvc3QtPnJlZ3NfaXAgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJCWlmICghaG9zdC0+cmVnc19pcCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZWlycTsKKwkJfQorCQlob3N0LT5yZWdzX2F4aSA9IGhvc3QtPmJhc2UgKyAweDFlMDA7CisJCWhvc3QtPnNwYXJlMCA9IGhvc3QtPmJhc2UgKyAweDEwMDA7CisJCWhvc3QtPnNwYXJlX2xlbiA9IDY0OworCQlob3N0LT5wcmVzZXQgPSBwcmVzZXRfdjM7CisJCWhvc3QtPnNlbmRfY21kID0gc2VuZF9jbWRfdjM7CisJCWhvc3QtPnNlbmRfYWRkciA9IHNlbmRfYWRkcl92MzsKKwkJaG9zdC0+c2VuZF9wYWdlID0gc2VuZF9wYWdlX3YzOworCQlob3N0LT5zZW5kX3JlYWRfaWQgPSBzZW5kX3JlYWRfaWRfdjM7CisJCWhvc3QtPmNoZWNrX2ludCA9IGNoZWNrX2ludF92MzsKKwkJaG9zdC0+Z2V0X2Rldl9zdGF0dXMgPSBnZXRfZGV2X3N0YXR1c192MzsKKwkJb29iX3NtYWxscGFnZSA9ICZuYW5kdjJfaHdfZWNjb29iX3NtYWxscGFnZTsKKwkJb29iX2xhcmdlcGFnZSA9ICZuYW5kdjJfaHdfZWNjb29iX2xhcmdlcGFnZTsKIAl9IGVsc2UKIAkJQlVHKCk7CiAKQEAgLTc4Niw3ICsxMDY4LDEwIEBACiAJaWYgKHBkYXRhLT5od19lY2MpIHsKIAkJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IG14Y19uYW5kX2NhbGN1bGF0ZV9lY2M7CiAJCXRoaXMtPmVjYy5od2N0bCA9IG14Y19uYW5kX2VuYWJsZV9od2VjYzsKLQkJdGhpcy0+ZWNjLmNvcnJlY3QgPSBteGNfbmFuZF9jb3JyZWN0X2RhdGE7CisJCWlmIChuZmNfaXNfdjEoKSkKKwkJCXRoaXMtPmVjYy5jb3JyZWN0ID0gbXhjX25hbmRfY29ycmVjdF9kYXRhX3YxOworCQllbHNlCisJCQl0aGlzLT5lY2MuY29ycmVjdCA9IG14Y19uYW5kX2NvcnJlY3RfZGF0YV92Ml92MzsKIAkJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKIAl9IGVsc2UgewogCQl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CkBAIC04MTcsNiArMTEwMiw5IEBACiAJCWdvdG8gZXNjYW47CiAJfQogCisJLyogQ2FsbCBwcmVzZXQgYWdhaW4sIHdpdGggY29ycmVjdCB3cml0ZXNpemUgdGhpcyB0aW1lICovCisJaG9zdC0+cHJlc2V0KG10ZCk7CisKIAlpZiAobXRkLT53cml0ZXNpemUgPT0gMjA0OCkKIAkJdGhpcy0+ZWNjLmxheW91dCA9IG9vYl9sYXJnZXBhZ2U7CiAKQEAgLTg0OCw2ICsxMTM2LDggQEAKIGVzY2FuOgogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiBlaXJxOgorCWlmIChob3N0LT5yZWdzX2lwKQorCQlpb3VubWFwKGhvc3QtPnJlZ3NfaXApOwogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiBlcmVzOgogCWNsa19wdXQoaG9zdC0+Y2xrKTsKQEAgLTg2Nyw1OSArMTE1NywxOSBAQAogCiAJbmFuZF9yZWxlYXNlKCZob3N0LT5tdGQpOwogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJaWYgKGhvc3QtPnJlZ3NfaXApCisJCWlvdW5tYXAoaG9zdC0+cmVnc19pcCk7CiAJaW91bm1hcChob3N0LT5iYXNlKTsKIAlrZnJlZShob3N0KTsKIAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG14Y25kX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwotCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCWludCByZXQgPSAwOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgc3VzcGVuZFxuIik7Ci0KLQlyZXQgPSBtdGQtPnN1c3BlbmQobXRkKTsKLQotCS8qCi0JICogbmFuZF9zdXNwZW5kIGxvY2tzIHRoZSBkZXZpY2UgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MsIHNvCi0JICogdGhlIGNsb2NrIG11c3QgYWxyZWFkeSBiZSBvZmYuCi0JICovCi0JQlVHX09OKCFyZXQgJiYgaG9zdC0+Y2xrX2FjdCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG14Y25kX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwotCXN0cnVjdCBteGNfbmFuZF9ob3N0ICpob3N0ID0gbmFuZF9jaGlwLT5wcml2OwotCWludCByZXQgPSAwOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1YQ19ORCA6IE5BTkQgcmVzdW1lXG4iKTsKLQotCW10ZC0+cmVzdW1lKG10ZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0jZWxzZQotIyBkZWZpbmUgbXhjbmRfc3VzcGVuZCAgIE5VTEwKLSMgZGVmaW5lIG14Y25kX3Jlc3VtZSAgICBOVUxMCi0jZW5kaWYJCQkJLyogQ09ORklHX1BNICovCi0KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14Y25kX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgICB9LAorCX0sCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG14Y25kX3JlbW92ZSksCi0JLnN1c3BlbmQgPSBteGNuZF9zdXNwZW5kLAotCS5yZXN1bWUgPSBteGNuZF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBteGNfbmRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggNGE3Yjg2NC4uYTNjNzQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KQEAgLTM0Nyw3ICszNDYsNyBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2IGJhZDsKIAotCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CQl9MQVNUX1BBR0UpCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOTEFTVFBBR0UpCiAJCW9mcyArPSBtdGQtPmVyYXNlc2l6ZSAtIG10ZC0+d3JpdGVzaXplOwogCiAJcGFnZSA9IChpbnQpKG9mcyA+PiBjaGlwLT5wYWdlX3NoaWZ0KSAmIGNoaXAtPnBhZ2VtYXNrOwpAQCAtMzk3LDkgKzM5Niw5IEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1aW50OF90IGJ1ZlsyXSA9IHsgMCwgMCB9OwotCWludCBibG9jaywgcmV0OworCWludCBibG9jaywgcmV0LCBpID0gMDsKIAotCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF9CQl9MQVNUX1BBR0UpCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOTEFTVFBBR0UpCiAJCW9mcyArPSBtdGQtPmVyYXNlc2l6ZSAtIG10ZC0+d3JpdGVzaXplOwogCiAJLyogR2V0IGJsb2NrIG51bWJlciAqLwpAQCAtNDExLDE3ICs0MTAsMzEgQEAKIAlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfVVNFX0ZMQVNIX0JCVCkKIAkJcmV0ID0gbmFuZF91cGRhdGVfYmJ0KG10ZCwgb2ZzKTsKIAllbHNlIHsKLQkJLyogV2Ugd3JpdGUgdHdvIGJ5dGVzLCBzbyB3ZSBkb250IGhhdmUgdG8gbWVzcyB3aXRoIDE2IGJpdAotCQkgKiBhY2Nlc3MKLQkJICovCiAJCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOwotCQlvZnMgKz0gbXRkLT5vb2JzaXplOwotCQljaGlwLT5vcHMubGVuID0gY2hpcC0+b3BzLm9vYmxlbiA9IDI7Ci0JCWNoaXAtPm9wcy5kYXRidWYgPSBOVUxMOwotCQljaGlwLT5vcHMub29iYnVmID0gYnVmOwotCQljaGlwLT5vcHMub29ib2ZmcyA9IGNoaXAtPmJhZGJsb2NrcG9zICYgfjB4MDE7CiAKLQkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCBvZnMsICZjaGlwLT5vcHMpOworCQkvKiBXcml0ZSB0byBmaXJzdCB0d28gcGFnZXMgYW5kIHRvIGJ5dGUgMSBhbmQgNiBpZiBuZWNlc3NhcnkuCisJCSAqIElmIHdlIHdyaXRlIHRvIG1vcmUgdGhhbiBvbmUgbG9jYXRpb24sIHRoZSBmaXJzdCBlcnJvcgorCQkgKiBlbmNvdW50ZXJlZCBxdWl0cyB0aGUgcHJvY2VkdXJlLiBXZSB3cml0ZSB0d28gYnl0ZXMgcGVyCisJCSAqIGxvY2F0aW9uLCBzbyB3ZSBkb250IGhhdmUgdG8gbWVzcyB3aXRoIDE2IGJpdCBhY2Nlc3MuCisJCSAqLworCQlkbyB7CisJCQljaGlwLT5vcHMubGVuID0gY2hpcC0+b3BzLm9vYmxlbiA9IDI7CisJCQljaGlwLT5vcHMuZGF0YnVmID0gTlVMTDsKKwkJCWNoaXAtPm9wcy5vb2JidWYgPSBidWY7CisJCQljaGlwLT5vcHMub29ib2ZmcyA9IGNoaXAtPmJhZGJsb2NrcG9zICYgfjB4MDE7CisKKwkJCXJldCA9IG5hbmRfZG9fd3JpdGVfb29iKG10ZCwgb2ZzLCAmY2hpcC0+b3BzKTsKKworCQkJaWYgKCFyZXQgJiYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOQllURTFBTkQ2KSkgeworCQkJCWNoaXAtPm9wcy5vb2JvZmZzID0gTkFORF9TTUFMTF9CQURCTE9DS19QT1MKKwkJCQkJJiB+MHgwMTsKKwkJCQlyZXQgPSBuYW5kX2RvX3dyaXRlX29vYihtdGQsIG9mcywgJmNoaXAtPm9wcyk7CisJCQl9CisJCQlpKys7CisJCQlvZnMgKz0gbXRkLT53cml0ZXNpemU7CisJCX0gd2hpbGUgKCFyZXQgJiYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOMk5EUEFHRSkgJiYKKwkJCQlpIDwgMik7CisKIAkJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCX0KIAlpZiAoIXJldCkKQEAgLTg3NiwxNyArODg5LDE3IEBACiB9CiAKIC8qKgotICogX19uYW5kX3VubG9jayAtIFtSRVBMQUNBQkxFXSB1bmxvY2tzIHNwZWNpZmllZCBsb2NrZWQgYmxvY2tlcworICogX19uYW5kX3VubG9jayAtIFtSRVBMQUNFQUJMRV0gdW5sb2NrcyBzcGVjaWZpZWQgbG9ja2VkIGJsb2NrcwogICoKLSAqIEBwYXJhbSBtdGQgLSBtdGQgaW5mbwotICogQHBhcmFtIG9mcyAtIG9mZnNldCB0byBzdGFydCB1bmxvY2sgZnJvbQotICogQHBhcmFtIGxlbiAtIGxlbmd0aCB0byB1bmxvY2sKLSAqIEBpbnZlcnQgLSAgd2hlbiA9IDAsIHVubG9jayB0aGUgcmFuZ2Ugb2YgYmxvY2tzIHdpdGhpbiB0aGUgbG93ZXIgYW5kCisgKiBAbXRkOiBtdGQgaW5mbworICogQG9mczogb2Zmc2V0IHRvIHN0YXJ0IHVubG9jayBmcm9tCisgKiBAbGVuOiBsZW5ndGggdG8gdW5sb2NrCisgKiBAaW52ZXJ0OiAgIHdoZW4gPSAwLCB1bmxvY2sgdGhlIHJhbmdlIG9mIGJsb2NrcyB3aXRoaW4gdGhlIGxvd2VyIGFuZAogICogICAgICAgICAgICAgICAgICAgICAgdXBwZXIgYm91bmRhcnkgYWRkcmVzcwotICogICAgICAgICAgICB3aG5lID0gMSwgdW5sb2NrIHRoZSByYW5nZSBvZiBibG9ja3Mgb3V0c2lkZSB0aGUgYm91bmRhcmllcworICogICAgICAgICAgICB3aGVuID0gMSwgdW5sb2NrIHRoZSByYW5nZSBvZiBibG9ja3Mgb3V0c2lkZSB0aGUgYm91bmRhcmllcwogICogICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZGFyeSBhZGRyZXNzCiAgKgotICogQHJldHVybiAtIHVubG9jayBzdGF0dXMKKyAqIHJldHVybiAtIHVubG9jayBzdGF0dXMKICAqLwogc3RhdGljIGludCBfX25hbmRfdW5sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAogCQkJCQl1aW50NjRfdCBsZW4sIGludCBpbnZlcnQpCkBAIC05MTgsMTMgKzkzMSwxMyBAQAogfQogCiAvKioKLSAqIG5hbmRfdW5sb2NrIC0gW1JFUExBQ0FCTEVdIHVubG9ja3Mgc3BlY2lmaWVkIGxvY2tlZCBibG9ja2VzCisgKiBuYW5kX3VubG9jayAtIFtSRVBMQUNFQUJMRV0gdW5sb2NrcyBzcGVjaWZpZWQgbG9ja2VkIGJsb2NrcwogICoKLSAqIEBwYXJhbSBtdGQgLSBtdGQgaW5mbwotICogQHBhcmFtIG9mcyAtIG9mZnNldCB0byBzdGFydCB1bmxvY2sgZnJvbQotICogQHBhcmFtIGxlbiAtIGxlbmd0aCB0byB1bmxvY2sKKyAqIEBtdGQ6IG10ZCBpbmZvCisgKiBAb2ZzOiBvZmZzZXQgdG8gc3RhcnQgdW5sb2NrIGZyb20KKyAqIEBsZW46IGxlbmd0aCB0byB1bmxvY2sKICAqCi0gKiBAcmV0dXJuIC0gdW5sb2NrIHN0YXR1cworICogcmV0dXJuIC0gdW5sb2NrIHN0YXR1cwogICovCiBpbnQgbmFuZF91bmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKIHsKQEAgLTk2OSwxNiArOTgyLDE2IEBACiB9CiAKIC8qKgotICogbmFuZF9sb2NrIC0gW1JFUExBQ0FCTEVdIGxvY2tzIGFsbCBibG9ja2VzIHByZXNlbnQgaW4gdGhlIGRldmljZQorICogbmFuZF9sb2NrIC0gW1JFUExBQ0VBQkxFXSBsb2NrcyBhbGwgYmxvY2tzIHByZXNlbnQgaW4gdGhlIGRldmljZQogICoKLSAqIEBwYXJhbSBtdGQgLSBtdGQgaW5mbwotICogQHBhcmFtIG9mcyAtIG9mZnNldCB0byBzdGFydCB1bmxvY2sgZnJvbQotICogQHBhcmFtIGxlbiAtIGxlbmd0aCB0byB1bmxvY2sKKyAqIEBtdGQ6IG10ZCBpbmZvCisgKiBAb2ZzOiBvZmZzZXQgdG8gc3RhcnQgdW5sb2NrIGZyb20KKyAqIEBsZW46IGxlbmd0aCB0byB1bmxvY2sKICAqCi0gKiBAcmV0dXJuIC0gbG9jayBzdGF0dXMKKyAqIHJldHVybiAtIGxvY2sgc3RhdHVzCiAgKgotICogVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0IGluIG1hbnkgTkFORCBwYXJ0cy4gJ01pY3JvbicgTkFORCBwYXJ0cwotICogZG8gaGF2ZSB0aGlzIGZlYXR1cmUsIGJ1dCBpdCBhbGxvd3Mgb25seSB0byBsb2NrIGFsbCBibG9ja3Mgbm90IGZvcgorICogVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gbWFueSBOQU5EIHBhcnRzLiAnTWljcm9uJyBOQU5EIHBhcnRzCisgKiBkbyBoYXZlIHRoaXMgZmVhdHVyZSwgYnV0IGl0IGFsbG93cyBvbmx5IHRvIGxvY2sgYWxsIGJsb2Nrcywgbm90IGZvcgogICogc3BlY2lmaWVkIHJhbmdlIGZvciBibG9jay4KICAqCiAgKiBJbXBsZW1lbnRpbmcgJ2xvY2snIGZlYXR1cmUgYnkgbWFraW5nIHVzZSBvZiAndW5sb2NrJywgZm9yIG5vdy4KQEAgLTIwODAsNiArMjA5Myw3IEBACiAgKiBuYW5kX2ZpbGxfb29iIC0gW0ludGVybmFsXSBUcmFuc2ZlciBjbGllbnQgYnVmZmVyIHRvIG9vYgogICogQGNoaXA6CW5hbmQgY2hpcCBzdHJ1Y3R1cmUKICAqIEBvb2I6CW9vYiBkYXRhIGJ1ZmZlcgorICogQGxlbjoJb29iIGRhdGEgd3JpdGUgbGVuZ3RoCiAgKiBAb3BzOglvb2Igb3BzIHN0cnVjdHVyZQogICovCiBzdGF0aWMgdWludDhfdCAqbmFuZF9maWxsX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsIHNpemVfdCBsZW4sCkBAIC0yOTIwLDkgKzI5MzQsMTQgQEAKIAkJY2hpcC0+Y2hpcF9zaGlmdCA9IGZmcygodW5zaWduZWQpKGNoaXAtPmNoaXBzaXplID4+IDMyKSkgKyAzMiAtIDE7CiAKIAkvKiBTZXQgdGhlIGJhZCBibG9jayBwb3NpdGlvbiAqLwotCWNoaXAtPmJhZGJsb2NrcG9zID0gbXRkLT53cml0ZXNpemUgPiA1MTIgPwotCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOwotCWNoaXAtPmJhZGJsb2NrYml0cyA9IDg7CisJaWYgKCEoYnVzdyAmIE5BTkRfQlVTV0lEVEhfMTYpICYmICgqbWFmX2lkID09IE5BTkRfTUZSX1NUTUlDUk8gfHwKKwkJCQkoKm1hZl9pZCA9PSBOQU5EX01GUl9TQU1TVU5HICYmCisJCQkJIG10ZC0+d3JpdGVzaXplID09IDUxMikgfHwKKwkJCQkqbWFmX2lkID09IE5BTkRfTUZSX0FNRCkpCisJCWNoaXAtPmJhZGJsb2NrcG9zID0gTkFORF9TTUFMTF9CQURCTE9DS19QT1M7CisJZWxzZQorCQljaGlwLT5iYWRibG9ja3BvcyA9IE5BTkRfTEFSR0VfQkFEQkxPQ0tfUE9TOworCiAKIAkvKiBHZXQgY2hpcCBvcHRpb25zLCBwcmVzZXJ2ZSBub24gY2hpcCBiYXNlZCBvcHRpb25zICovCiAJY2hpcC0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7CkBAIC0yOTQxLDEyICsyOTYwLDMyIEBACiAKIAkvKgogCSAqIEJhZCBibG9jayBtYXJrZXIgaXMgc3RvcmVkIGluIHRoZSBsYXN0IHBhZ2Ugb2YgZWFjaCBibG9jawotCSAqIG9uIFNhbXN1bmcgYW5kIEh5bml4IE1MQyBkZXZpY2VzCisJICogb24gU2Ftc3VuZyBhbmQgSHluaXggTUxDIGRldmljZXM7IHN0b3JlZCBpbiBmaXJzdCB0d28gcGFnZXMKKwkgKiBvZiBlYWNoIGJsb2NrIG9uIE1pY3JvbiBkZXZpY2VzIHdpdGggMktpQiBwYWdlcyBhbmQgb24KKwkgKiBTTEMgU2Ftc3VuZywgSHluaXgsIGFuZCBBTUQvU3BhbnNpb24uIEFsbCBvdGhlcnMgc2NhbiBvbmx5CisJICogdGhlIGZpcnN0IHBhZ2UuCiAJICovCiAJaWYgKChjaGlwLT5jZWxsaW5mbyAmIE5BTkRfQ0lfQ0VMTFRZUEVfTVNLKSAmJgogCQkJKCptYWZfaWQgPT0gTkFORF9NRlJfU0FNU1VORyB8fAogCQkJICptYWZfaWQgPT0gTkFORF9NRlJfSFlOSVgpKQotCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQkJfTEFTVF9QQUdFOworCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQkJUX1NDQU5MQVNUUEFHRTsKKwllbHNlIGlmICgoIShjaGlwLT5jZWxsaW5mbyAmIE5BTkRfQ0lfQ0VMTFRZUEVfTVNLKSAmJgorCQkJCSgqbWFmX2lkID09IE5BTkRfTUZSX1NBTVNVTkcgfHwKKwkJCQkgKm1hZl9pZCA9PSBOQU5EX01GUl9IWU5JWCB8fAorCQkJCSAqbWFmX2lkID09IE5BTkRfTUZSX0FNRCkpIHx8CisJCQkobXRkLT53cml0ZXNpemUgPT0gMjA0OCAmJgorCQkJICptYWZfaWQgPT0gTkFORF9NRlJfTUlDUk9OKSkKKwkJY2hpcC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9TQ0FOMk5EUEFHRTsKKworCS8qCisJICogTnVtb255eC9TVCAySyBwYWdlcywgeDggYnVzIHVzZSBCT1RIIGJ5dGUgMSBhbmQgNgorCSAqLworCWlmICghKGJ1c3cgJiBOQU5EX0JVU1dJRFRIXzE2KSAmJgorCQkJKm1hZl9pZCA9PSBOQU5EX01GUl9TVE1JQ1JPICYmCisJCQltdGQtPndyaXRlc2l6ZSA9PSAyMDQ4KSB7CisJCWNoaXAtPm9wdGlvbnMgfD0gTkFORF9CQlRfU0NBTkJZVEUxQU5ENjsKKwkJY2hpcC0+YmFkYmxvY2twb3MgPSAwOworCX0KIAogCS8qIENoZWNrIGZvciBBTkQgY2hpcHMgd2l0aCA0IHBhZ2UgcGxhbmVzICovCiAJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EXzRQQUdFX0FSUkFZKQpAQCAtMzMwNiw2ICszMzQ1LDExIEBACiAJa2ZyZWUoY2hpcC0+YmJ0KTsKIAlpZiAoIShjaGlwLT5vcHRpb25zICYgTkFORF9PV05fQlVGRkVSUykpCiAJCWtmcmVlKGNoaXAtPmJ1ZmZlcnMpOworCisJLyogRnJlZSBiYWQgYmxvY2sgZGVzY3JpcHRvciBtZW1vcnkgKi8KKwlpZiAoY2hpcC0+YmFkYmxvY2tfcGF0dGVybiAmJiBjaGlwLT5iYWRibG9ja19wYXR0ZXJuLT5vcHRpb25zCisJCQkmIE5BTkRfQkJUX0RZTkFNSUNTVFJVQ1QpCisJCWtmcmVlKGNoaXAtPmJhZGJsb2NrX3BhdHRlcm4pOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChuYW5kX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCmluZGV4IGFkOTdjMGMuLjVmZWRmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CkBAIC05Myw2ICs5MiwyOCBAQAogCQkJcmV0dXJuIC0xOwogCX0KIAorCS8qIENoZWNrIGJvdGggcG9zaXRpb25zIDEgYW5kIDYgZm9yIHBhdHRlcm4/ICovCisJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkJZVEUxQU5ENikgeworCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FORU1QVFkpIHsKKwkJCXAgKz0gdGQtPmxlbjsKKwkJCWVuZCArPSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzOworCQkJLyogQ2hlY2sgcmVnaW9uIGJldHdlZW4gcG9zaXRpb25zIDEgYW5kIDYgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzIC0gdGQtPmxlbjsKKwkJCQkJaSsrKSB7CisJCQkJaWYgKCpwKysgIT0gMHhmZikKKwkJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJcCArPSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyAtIHRkLT5vZmZzOworCQl9CisJCS8qIENvbXBhcmUgdGhlIHBhdHRlcm4gKi8KKwkJZm9yIChpID0gMDsgaSA8IHRkLT5sZW47IGkrKykgeworCQkJaWYgKHBbaV0gIT0gdGQtPnBhdHRlcm5baV0pCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKSB7CiAJCXAgKz0gdGQtPmxlbjsKIAkJZW5kICs9IHRkLT5sZW47CkBAIC0xMjQsNiArMTQ1LDEzIEBACiAJCWlmIChwW3RkLT5vZmZzICsgaV0gIT0gdGQtPnBhdHRlcm5baV0pCiAJCQlyZXR1cm4gLTE7CiAJfQorCS8qIE5lZWQgdG8gY2hlY2sgbG9jYXRpb24gMSBBTkQgNj8gKi8KKwlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FOQllURTFBTkQ2KSB7CisJCWZvciAoaSA9IDA7IGkgPCB0ZC0+bGVuOyBpKyspIHsKKwkJCWlmIChwW05BTkRfU01BTExfQkFEQkxPQ0tfUE9TICsgaV0gIT0gdGQtPnBhdHRlcm5baV0pCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQogCXJldHVybiAwOwogfQogCkBAIC0zOTcsMTIgKzQyNSwxMCBAQAogCiAJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkFMTFBBR0VTKQogCQlsZW4gPSAxIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKLQllbHNlIHsKLQkJaWYgKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTjJORFBBR0UpCi0JCQlsZW4gPSAyOwotCQllbHNlCi0JCQlsZW4gPSAxOwotCX0KKwllbHNlIGlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU4yTkRQQUdFKQorCQlsZW4gPSAyOworCWVsc2UKKwkJbGVuID0gMTsKIAogCWlmICghKGJkLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkVNUFRZKSkgewogCQkvKiBXZSBuZWVkIG9ubHkgcmVhZCBmZXcgYnl0ZXMgZnJvbSB0aGUgT09CIGFyZWEgKi8KQEAgLTQzMiw3ICs0NTgsNyBAQAogCQlmcm9tID0gKGxvZmZfdClzdGFydGJsb2NrIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKIAl9CiAKLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQkJfTEFTVF9QQUdFKQorCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CQlRfU0NBTkxBU1RQQUdFKQogCQlmcm9tICs9IG10ZC0+ZXJhc2VzaXplIC0gKG10ZC0+d3JpdGVzaXplICogbGVuKTsKIAogCWZvciAoaSA9IHN0YXJ0YmxvY2s7IGkgPCBudW1ibG9ja3M7KSB7CkBAIC0xMDkyLDMwICsxMTE4LDE2IEBACiAgKiB3aGlsZSBzY2FubmluZyBhIGRldmljZSBmb3IgZmFjdG9yeSBtYXJrZWQgZ29vZCAvIGJhZCBibG9ja3MuICovCiBzdGF0aWMgdWludDhfdCBzY2FuX2ZmX3BhdHRlcm5bXSA9IHsgMHhmZiwgMHhmZiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNtYWxscGFnZV9tZW1vcnliYXNlZCA9IHsKLQkub3B0aW9ucyA9IE5BTkRfQkJUX1NDQU4yTkRQQUdFLAotCS5vZmZzID0gNSwKLQkubGVuID0gMSwKLQkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgotfTsKLQotc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBsYXJnZXBhZ2VfbWVtb3J5YmFzZWQgPSB7Ci0JLm9wdGlvbnMgPSAwLAotCS5vZmZzID0gMCwKLQkubGVuID0gMiwKLQkucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybgotfTsKLQogc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzbWFsbHBhZ2VfZmxhc2hiYXNlZCA9IHsKIAkub3B0aW9ucyA9IE5BTkRfQkJUX1NDQU4yTkRQQUdFLAotCS5vZmZzID0gNSwKKwkub2ZmcyA9IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TLAogCS5sZW4gPSAxLAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGxhcmdlcGFnZV9mbGFzaGJhc2VkID0gewogCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCi0JLm9mZnMgPSAwLAorCS5vZmZzID0gTkFORF9MQVJHRV9CQURCTE9DS19QT1MsCiAJLmxlbiA9IDIsCiAJLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KIH07CkBAIC0xMTU0LDYgKzExNjYsNDMgQEAKIAkucGF0dGVybiA9IG1pcnJvcl9wYXR0ZXJuCiB9OwogCisjZGVmaW5lIEJCVF9TQ0FOX09QVElPTlMgKE5BTkRfQkJUX1NDQU5MQVNUUEFHRSB8IE5BTkRfQkJUX1NDQU4yTkRQQUdFIHwgXAorCQlOQU5EX0JCVF9TQ0FOQllURTFBTkQ2KQorLyoqCisgKiBuYW5kX2NyZWF0ZV9kZWZhdWx0X2JidF9kZXNjciAtIFtJbnRlcm5hbF0gQ3JlYXRlcyBhIEJCVCBkZXNjcmlwdG9yIHN0cnVjdHVyZQorICogQHRoaXM6CU5BTkQgY2hpcCB0byBjcmVhdGUgZGVzY3JpcHRvciBmb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuYW5kX2JidF9kZXNjciBmb3IgQkJNIGRldGVjdGlvbgorICogYmFzZWQgb24gdGhlIHByb3BlcnRpZXMgb2YgInRoaXMiLiBUaGUgbmV3IGRlc2NyaXB0b3IgaXMgc3RvcmVkIGluCisgKiB0aGlzLT5iYWRibG9ja19wYXR0ZXJuLiBUaHVzLCB0aGlzLT5iYWRibG9ja19wYXR0ZXJuIHNob3VsZCBiZSBOVUxMIHdoZW4KKyAqIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFRPRE86IEhhbmRsZSBvdGhlciBmbGFncywgcmVwbGFjZSBvdGhlciBzdGF0aWMgc3RydWN0cworICogICAgICAgIChlLmcuIGhhbmRsZSBOQU5EX0JCVF9GTEFTSCBmb3IgZmxhc2gtYmFzZWQgQkJULAorICogICAgICAgICAgICAgcmVwbGFjZSBzbWFsbHBhZ2VfZmxhc2hiYXNlZCkKKyAqCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9jcmVhdGVfZGVmYXVsdF9iYnRfZGVzY3Ioc3RydWN0IG5hbmRfY2hpcCAqdGhpcykKK3sKKwlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkOworCWlmICh0aGlzLT5iYWRibG9ja19wYXR0ZXJuKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJCVCBkZXNjciBhbHJlYWR5IGFsbG9jYXRlZDsgbm90IHJlcGxhY2luZy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJYmQgPSBremFsbG9jKHNpemVvZigqYmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJkKSB7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9jcmVhdGVfZGVmYXVsdF9iYnRfZGVzY3I6IE91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYmQtPm9wdGlvbnMgPSB0aGlzLT5vcHRpb25zICYgQkJUX1NDQU5fT1BUSU9OUzsKKwliZC0+b2ZmcyA9IHRoaXMtPmJhZGJsb2NrcG9zOworCWJkLT5sZW4gPSAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpID8gMiA6IDE7CisJYmQtPnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm47CisJYmQtPm9wdGlvbnMgfD0gTkFORF9CQlRfRFlOQU1JQ1NUUlVDVDsKKwl0aGlzLT5iYWRibG9ja19wYXR0ZXJuID0gYmQ7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogbmFuZF9kZWZhdWx0X2JidCAtIFtOQU5EIEludGVyZmFjZV0gU2VsZWN0IGEgZGVmYXVsdCBiYWQgYmxvY2sgdGFibGUgZm9yIHRoZSBkZXZpY2UKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMTk2LDEwICsxMjQ1LDggQEAKIAl9IGVsc2UgewogCQl0aGlzLT5iYnRfdGQgPSBOVUxMOwogCQl0aGlzLT5iYnRfbWQgPSBOVUxMOwotCQlpZiAoIXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pIHsKLQkJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAobXRkLT53cml0ZXNpemUgPiA1MTIpID8KLQkJCSAgICAmbGFyZ2VwYWdlX21lbW9yeWJhc2VkIDogJnNtYWxscGFnZV9tZW1vcnliYXNlZDsKLQkJfQorCQlpZiAoIXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pCisJCQluYW5kX2NyZWF0ZV9kZWZhdWx0X2JidF9kZXNjcih0aGlzKTsKIAl9CiAJcmV0dXJuIG5hbmRfc2Nhbl9iYnQobXRkLCB0aGlzLT5iYWRibG9ja19wYXR0ZXJuKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYwppbmRleCA4OTkwN2VkOS4uYTA0Yjg5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYwpAQCAtODUsNiArODUsNyBAQAogCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4RDEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OU30sCiAJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4QjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OUzE2fSwKIAl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHhDMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLCAgICAgMHhBRCwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogMiBHaWdhYml0ICovCiAJeyJOQU5EIDI1Nk1pQiAxLDhWIDgtYml0IiwJMHhBQSwgMCwgMjU2LCAwLCBMUF9PUFRJT05TfSwKQEAgLTExMCw2ICsxMTEsOSBAQAogCXsiTkFORCAyR2lCIDEsOFYgMTYtYml0IiwJMHhCNSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OUzE2fSwKIAl7Ik5BTkQgMkdpQiAzLDNWIDE2LWJpdCIsCTB4QzUsIDAsIDIwNDgsIDAsIExQX09QVElPTlMxNn0sCiAKKwkvKiAzMiBHaWdhYml0ICovCisJeyJOQU5EIDRHaUIgMywzViA4LWJpdCIsCTB4RDcsIDAsIDQwOTYsIDAsIExQX09QVElPTlMxNn0sCisKIAkvKgogCSAqIFJlbmVzYXMgQU5EIDEgR2lnYWJpdC4gVGhvc2UgY2hpcHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgaWQgYW5kCiAJICogaGF2ZSBhIHN0cmFuZ2UgcGFnZS9ibG9jayBsYXlvdXQgISAgVGhlIGNob3NlbiBtaW5pbXVtIGVyYXNlc2l6ZSBpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwppbmRleCAyNjEzMzdlLi5jMjU2NDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRzaW0uYwpAQCAtNTUzLDggKzU1Myw4IEBACiAgKi8KIHN0YXRpYyBpbnQgaW5pdF9uYW5kc2ltKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdjsKLQlzdHJ1Y3QgbmFuZHNpbSAgICpucyAgID0gKHN0cnVjdCBuYW5kc2ltICopKGNoaXAtPnByaXYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRzaW0gICAqbnMgICA9IGNoaXAtPnByaXY7CiAJaW50IGksIHJldCA9IDA7CiAJdWludDY0X3QgcmVtYWluczsKIAl1aW50NjRfdCBuZXh0X29mZnNldDsKQEAgLTE4NzcsNyArMTg3Nyw3IEBACiAKIHN0YXRpYyB1X2NoYXIgbnNfbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0gICAgICAgIHN0cnVjdCBuYW5kc2ltICpucyA9IChzdHJ1Y3QgbmFuZHNpbSAqKSgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7CisJc3RydWN0IG5hbmRzaW0gKm5zID0gKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKIAl1X2NoYXIgb3V0YiA9IDB4MDA7CiAKIAkvKiBTYW5pdHkgYW5kIGNvcnJlY3RuZXNzIGNoZWNrcyAqLwpAQCAtMTk1MCw3ICsxOTUwLDcgQEAKIAogc3RhdGljIHZvaWQgbnNfbmFuZF93cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKIHsKLSAgICAgICAgc3RydWN0IG5hbmRzaW0gKm5zID0gKHN0cnVjdCBuYW5kc2ltICopKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKKwlzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwogCiAJLyogU2FuaXR5IGFuZCBjb3JyZWN0bmVzcyBjaGVja3MgKi8KIAlpZiAoIW5zLT5saW5lcy5jZSkgewpAQCAtMjEzMiw3ICsyMTMyLDcgQEAKIAogc3RhdGljIHZvaWQgbnNfbmFuZF93cml0ZV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewotICAgICAgICBzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OworCXN0cnVjdCBuYW5kc2ltICpucyA9ICgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7CiAKIAkvKiBDaGVjayB0aGF0IGNoaXAgaXMgZXhwZWN0aW5nIGRhdGEgaW5wdXQgKi8KIAlpZiAoIShucy0+c3RhdGUgJiBTVEFURV9EQVRBSU5fTUFTSykpIHsKQEAgLTIxNTksNyArMjE1OSw3IEBACiAKIHN0YXRpYyB2b2lkIG5zX25hbmRfcmVhZF9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewotICAgICAgICBzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OworCXN0cnVjdCBuYW5kc2ltICpucyA9ICgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7CiAKIAkvKiBTYW5pdHkgYW5kIGNvcnJlY3RuZXNzIGNoZWNrcyAqLwogCWlmICghbnMtPmxpbmVzLmNlKSB7CkBAIC0yMzUyLDcgKzIzNTIsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgbnNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKChzdHJ1Y3QgbmFuZF9jaGlwICopbnNtdGQtPnByaXYpLT5wcml2KTsKKwlzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoKHN0cnVjdCBuYW5kX2NoaXAgKiluc210ZC0+cHJpdiktPnByaXY7CiAJaW50IGk7CiAKIAlmcmVlX25hbmRzaW0obnMpOyAgICAvKiBGcmVlIG5hbmRzaW0gcHJpdmF0ZSByZXNvdXJjZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYyBiL2RyaXZlcnMvbXRkL25hbmQvb21hcDIuYwppbmRleCBlZTg3MzI1Li4xMzNkNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCkBAIC03LDYgKzcsNyBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCisjZGVmaW5lIENPTkZJR19NVERfTkFORF9PTUFQX0hXRUNDCiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpAQCAtMjMsMjAgKzI0LDggQEAKICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KIAotI2RlZmluZSBHUE1DX0lSUV9TVEFUVVMJCTB4MTgKLSNkZWZpbmUgR1BNQ19FQ0NfQ09ORklHCQkweDFGNAotI2RlZmluZSBHUE1DX0VDQ19DT05UUk9MCTB4MUY4Ci0jZGVmaW5lIEdQTUNfRUNDX1NJWkVfQ09ORklHCTB4MUZDCi0jZGVmaW5lIEdQTUNfRUNDMV9SRVNVTFQJMHgyMDAKLQogI2RlZmluZQlEUklWRVJfTkFNRQkib21hcDItbmFuZCIKIAotI2RlZmluZQlOQU5EX1dQX09GRgkwCi0jZGVmaW5lIE5BTkRfV1BfQklUCTB4MDAwMDAwMTAKLQotI2RlZmluZQlHUE1DX0JVRl9GVUxMCTB4MDAwMDAwMDEKLSNkZWZpbmUJR1BNQ19CVUZfRU1QVFkJMHgwMDAwMDAwMAotCiAjZGVmaW5lIE5BTkRfRWNjX1AxZQkJKDEgPDwgMCkKICNkZWZpbmUgTkFORF9FY2NfUDJlCQkoMSA8PCAxKQogI2RlZmluZSBOQU5EX0VjY19QNGUJCSgxIDw8IDIpCkBAIC0xMzksMzQgKzEyOCwxMSBAQAogCiAJaW50CQkJCWdwbWNfY3M7CiAJdW5zaWduZWQgbG9uZwkJCXBoeXNfYmFzZTsKLQl2b2lkIF9faW9tZW0JCQkqZ3BtY19jc19iYXNlYWRkcjsKLQl2b2lkIF9faW9tZW0JCQkqZ3BtY19iYXNlYWRkcjsKLQl2b2lkIF9faW9tZW0JCQkqbmFuZF9wcmVmX2ZpZm9fYWRkOwogCXN0cnVjdCBjb21wbGV0aW9uCQljb21wOwogCWludAkJCQlkbWFfY2g7CiB9OwogCiAvKioKLSAqIG9tYXBfbmFuZF93cCAtIFRoaXMgZnVuY3Rpb24gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFdyaXRlIFByb3RlY3QgZmVhdHVyZQotICogQG10ZDogTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBtb2RlOiBXUCBPTi9PRkYKLSAqLwotc3RhdGljIHZvaWQgb21hcF9uYW5kX3dwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAotCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOwotCi0JdW5zaWduZWQgbG9uZyBjb25maWcgPSBfX3Jhd19yZWFkbChpbmZvLT5ncG1jX2Jhc2VhZGRyICsgR1BNQ19DT05GSUcpOwotCi0JaWYgKG1vZGUpCi0JCWNvbmZpZyAmPSB+KE5BTkRfV1BfQklUKTsJLyogV1AgaXMgT04gKi8KLQllbHNlCi0JCWNvbmZpZyB8PSAoTkFORF9XUF9CSVQpOwkvKiBXUCBpcyBPRkYgKi8KLQotCV9fcmF3X3dyaXRlbChjb25maWcsIChpbmZvLT5ncG1jX2Jhc2VhZGRyICsgR1BNQ19DT05GSUcpKTsKLX0KLQotLyoqCiAgKiBvbWFwX2h3Y29udHJvbCAtIGhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCiAgKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGNtZDogY29tbWFuZCB0byBkZXZpY2UKQEAgLTE4MSwzMSArMTQ3LDE3IEBACiB7CiAJc3RydWN0IG9tYXBfbmFuZF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKG10ZCwKIAkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOwotCXN3aXRjaCAoY3RybCkgewotCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfQ1RSTF9DTEU6Ci0JCWluZm8tPm5hbmQuSU9fQUREUl9XID0gaW5mby0+Z3BtY19jc19iYXNlYWRkciArCi0JCQkJCQlHUE1DX0NTX05BTkRfQ09NTUFORDsKLQkJaW5mby0+bmFuZC5JT19BRERSX1IgPSBpbmZvLT5ncG1jX2NzX2Jhc2VhZGRyICsKLQkJCQkJCUdQTUNfQ1NfTkFORF9EQVRBOwotCQlicmVhazsKIAotCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfQ1RSTF9BTEU6Ci0JCWluZm8tPm5hbmQuSU9fQUREUl9XID0gaW5mby0+Z3BtY19jc19iYXNlYWRkciArCi0JCQkJCQlHUE1DX0NTX05BTkRfQUREUkVTUzsKLQkJaW5mby0+bmFuZC5JT19BRERSX1IgPSBpbmZvLT5ncG1jX2NzX2Jhc2VhZGRyICsKLQkJCQkJCUdQTUNfQ1NfTkFORF9EQVRBOwotCQlicmVhazsKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpIHsKKwkJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJCWdwbWNfbmFuZF93cml0ZShpbmZvLT5ncG1jX2NzLCBHUE1DX05BTkRfQ09NTUFORCwgY21kKTsKIAotCWNhc2UgTkFORF9DVFJMX0NIQU5HRSB8IE5BTkRfTkNFOgotCQlpbmZvLT5uYW5kLklPX0FERFJfVyA9IGluZm8tPmdwbWNfY3NfYmFzZWFkZHIgKwotCQkJCQkJR1BNQ19DU19OQU5EX0RBVEE7Ci0JCWluZm8tPm5hbmQuSU9fQUREUl9SID0gaW5mby0+Z3BtY19jc19iYXNlYWRkciArCi0JCQkJCQlHUE1DX0NTX05BTkRfREFUQTsKLQkJYnJlYWs7CisJCWVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJCWdwbWNfbmFuZF93cml0ZShpbmZvLT5ncG1jX2NzLCBHUE1DX05BTkRfQUREUkVTUywgY21kKTsKKworCQllbHNlIC8qIE5BTkRfTkNFICovCisJCQlncG1jX25hbmRfd3JpdGUoaW5mby0+Z3BtY19jcywgR1BNQ19OQU5EX0RBVEEsIGNtZCk7CiAJfQotCi0JaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQotCQlfX3Jhd193cml0ZWIoY21kLCBpbmZvLT5uYW5kLklPX0FERFJfVyk7CiB9CiAKIC8qKgpAQCAtMjMyLDExICsxODQsMTQgQEAKIAlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAogCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOwogCXVfY2hhciAqcCA9ICh1X2NoYXIgKilidWY7CisJdTMyCXN0YXR1cyA9IDA7CiAKIAl3aGlsZSAobGVuLS0pIHsKIAkJaW93cml0ZTgoKnArKywgaW5mby0+bmFuZC5JT19BRERSX1cpOwotCQl3aGlsZSAoR1BNQ19CVUZfRU1QVFkgPT0gKHJlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKwotCQkJCQkJR1BNQ19TVEFUVVMpICYgR1BNQ19CVUZfRlVMTCkpOworCQkvKiB3YWl0IHVudGlsIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHdyaXRlICovCisJCWRvIHsKKwkJCXN0YXR1cyA9IGdwbWNfcmVhZF9zdGF0dXMoR1BNQ19TVEFUVVNfQlVGRkVSKTsKKwkJfSB3aGlsZSAoIXN0YXR1cyk7CiAJfQogfQogCkBAIC0yNjQsMTYgKzIxOSwxNiBAQAogCXN0cnVjdCBvbWFwX25hbmRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihtdGQsCiAJCQkJCQlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8sIG10ZCk7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7Ci0KKwl1MzIJc3RhdHVzID0gMDsKIAkvKiBGSVhNRSB0cnkgYnVyc3RzIG9mIHdyaXRlc3coKSBvciBETUEgLi4uICovCiAJbGVuID4+PSAxOwogCiAJd2hpbGUgKGxlbi0tKSB7CiAJCWlvd3JpdGUxNigqcCsrLCBpbmZvLT5uYW5kLklPX0FERFJfVyk7Ci0KLQkJd2hpbGUgKEdQTUNfQlVGX0VNUFRZID09IChyZWFkbChpbmZvLT5ncG1jX2Jhc2VhZGRyICsKLQkJCQkJCUdQTUNfU1RBVFVTKSAmIEdQTUNfQlVGX0ZVTEwpKQotCQkJOworCQkvKiB3YWl0IHVudGlsIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHdyaXRlICovCisJCWRvIHsKKwkJCXN0YXR1cyA9IGdwbWNfcmVhZF9zdGF0dXMoR1BNQ19TVEFUVVNfQlVGRkVSKTsKKwkJfSB3aGlsZSAoIXN0YXR1cyk7CiAJfQogfQogCkBAIC0yODcsNyArMjQyLDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLAogCQkJCQkJc3RydWN0IG9tYXBfbmFuZF9pbmZvLCBtdGQpOwotCXVpbnQzMl90IHBmcHdfc3RhdHVzID0gMCwgcl9jb3VudCA9IDA7CisJdWludDMyX3Qgcl9jb3VudCA9IDA7CiAJaW50IHJldCA9IDA7CiAJdTMyICpwID0gKHUzMiAqKWJ1ZjsKIApAQCAtMzEwLDE2ICsyNjUsMTYgQEAKIAkJZWxzZQogCQkJb21hcF9yZWFkX2J1ZjgobXRkLCBidWYsIGxlbik7CiAJfSBlbHNlIHsKKwkJcCA9ICh1MzIgKikgYnVmOwogCQlkbyB7Ci0JCQlwZnB3X3N0YXR1cyA9IGdwbWNfcHJlZmV0Y2hfc3RhdHVzKCk7Ci0JCQlyX2NvdW50ID0gKChwZnB3X3N0YXR1cyA+PiAyNCkgJiAweDdGKSA+PiAyOwotCQkJaW9yZWFkMzJfcmVwKGluZm8tPm5hbmRfcHJlZl9maWZvX2FkZCwgcCwgcl9jb3VudCk7CisJCQlyX2NvdW50ID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX1BSRUZFVENIX0ZJRk9fQ05UKTsKKwkJCXJfY291bnQgPSByX2NvdW50ID4+IDI7CisJCQlpb3JlYWQzMl9yZXAoaW5mby0+bmFuZC5JT19BRERSX1IsIHAsIHJfY291bnQpOwogCQkJcCArPSByX2NvdW50OwogCQkJbGVuIC09IHJfY291bnQgPDwgMjsKIAkJfSB3aGlsZSAobGVuKTsKLQogCQkvKiBkaXNhYmxlIGFuZCBzdG9wIHRoZSBQRlBXIGVuZ2luZSAqLwotCQlncG1jX3ByZWZldGNoX3Jlc2V0KCk7CisJCWdwbWNfcHJlZmV0Y2hfcmVzZXQoaW5mby0+Z3BtY19jcyk7CiAJfQogfQogCkBAIC0zMzQsMTMgKzI4OSwxMyBAQAogewogCXN0cnVjdCBvbWFwX25hbmRfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihtdGQsCiAJCQkJCQlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8sIG10ZCk7Ci0JdWludDMyX3QgcGZwd19zdGF0dXMgPSAwLCB3X2NvdW50ID0gMDsKKwl1aW50MzJfdCBwcmVmX2NvdW50ID0gMCwgd19jb3VudCA9IDA7CiAJaW50IGkgPSAwLCByZXQgPSAwOwotCXUxNiAqcCA9ICh1MTYgKikgYnVmOworCXUxNiAqcDsKIAogCS8qIHRha2UgY2FyZSBvZiBzdWJwYWdlIHdyaXRlcyAqLwogCWlmIChsZW4gJSAyICE9IDApIHsKLQkJd3JpdGViKCpidWYsIGluZm8tPm5hbmQuSU9fQUREUl9SKTsKKwkJd3JpdGViKCpidWYsIGluZm8tPm5hbmQuSU9fQUREUl9XKTsKIAkJcCA9ICh1MTYgKikoYnVmICsgMSk7CiAJCWxlbi0tOwogCX0KQEAgLTM1NCwxNiArMzA5LDE5IEBACiAJCWVsc2UKIAkJCW9tYXBfd3JpdGVfYnVmOChtdGQsIGJ1ZiwgbGVuKTsKIAl9IGVsc2UgewotCQlwZnB3X3N0YXR1cyA9IGdwbWNfcHJlZmV0Y2hfc3RhdHVzKCk7Ci0JCXdoaWxlIChwZnB3X3N0YXR1cyAmIDB4M0ZGRikgewotCQkJd19jb3VudCA9ICgocGZwd19zdGF0dXMgPj4gMjQpICYgMHg3RikgPj4gMTsKKwkJcCA9ICh1MTYgKikgYnVmOworCQl3aGlsZSAobGVuKSB7CisJCQl3X2NvdW50ID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX1BSRUZFVENIX0ZJRk9fQ05UKTsKKwkJCXdfY291bnQgPSB3X2NvdW50ID4+IDE7CiAJCQlmb3IgKGkgPSAwOyAoaSA8IHdfY291bnQpICYmIGxlbjsgaSsrLCBsZW4gLT0gMikKLQkJCQlpb3dyaXRlMTYoKnArKywgaW5mby0+bmFuZF9wcmVmX2ZpZm9fYWRkKTsKLQkJCXBmcHdfc3RhdHVzID0gZ3BtY19wcmVmZXRjaF9zdGF0dXMoKTsKKwkJCQlpb3dyaXRlMTYoKnArKywgaW5mby0+bmFuZC5JT19BRERSX1cpOwogCQl9Ci0KKwkJLyogd2FpdCBmb3IgZGF0YSB0byBmbHVzaGVkLW91dCBiZWZvcmUgcmVzZXQgdGhlIHByZWZldGNoICovCisJCWRvIHsKKwkJCXByZWZfY291bnQgPSBncG1jX3JlYWRfc3RhdHVzKEdQTUNfUFJFRkVUQ0hfQ09VTlQpOworCQl9IHdoaWxlIChwcmVmX2NvdW50KTsKIAkJLyogZGlzYWJsZSBhbmQgc3RvcCB0aGUgUEZQVyBlbmdpbmUgKi8KLQkJZ3BtY19wcmVmZXRjaF9yZXNldCgpOworCQlncG1jX3ByZWZldGNoX3Jlc2V0KGluZm8tPmdwbWNfY3MpOwogCX0KIH0KIApAQCAtNDUxLDggKzQwOSw5IEBACiAJLyogc2V0dXAgYW5kIHN0YXJ0IERNQSB1c2luZyBkbWFfYWRkciAqLwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmluZm8tPmNvbXApOwogCi0Jd2hpbGUgKDB4M2ZmZiAmIChwcmVmZXRjaF9zdGF0dXMgPSBncG1jX3ByZWZldGNoX3N0YXR1cygpKSkKLQkJOworCWRvIHsKKwkJcHJlZmV0Y2hfc3RhdHVzID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX1BSRUZFVENIX0NPVU5UKTsKKwl9IHdoaWxlIChwcmVmZXRjaF9zdGF0dXMpOwogCS8qIGRpc2FibGUgYW5kIHN0b3AgdGhlIFBGUFcgZW5naW5lICovCiAJZ3BtY19wcmVmZXRjaF9yZXNldCgpOwogCkBAIC01MzAsMjkgKzQ4OSw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTVREX05BTkRfT01BUF9IV0VDQwotLyoqCi0gKiBvbWFwX2h3ZWNjX2luaXQgLSBJbml0aWFsaXplIHRoZSBIVyBFQ0MgZm9yIE5BTkQgZmxhc2ggaW4gR1BNQyBjb250cm9sbGVyCi0gKiBAbXRkOiBNVEQgZGV2aWNlIHN0cnVjdHVyZQotICovCi1zdGF0aWMgdm9pZCBvbWFwX2h3ZWNjX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0Jc3RydWN0IG9tYXBfbmFuZF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG9tYXBfbmFuZF9pbmZvLAotCQkJCQkJCW10ZCk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDB4MDsKLQotCS8qIFJlYWQgZnJvbSBFQ0MgQ29udHJvbCBSZWdpc3RlciAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKyBHUE1DX0VDQ19DT05UUk9MKTsKLQkvKiBDbGVhciBhbGwgRUNDIHwgRW5hYmxlIFJlZzEgKi8KLQl2YWwgPSAoKDB4MDAwMDAwMDE8PDgpIHwgMHgwMDAwMDAwMSk7Ci0JX19yYXdfd3JpdGVsKHZhbCwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX0NPTlRST0wpOwotCi0JLyogUmVhZCBmcm9tIEVDQyBTaXplIENvbmZpZyBSZWdpc3RlciAqLwotCXZhbCA9IF9fcmF3X3JlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKyBHUE1DX0VDQ19TSVpFX0NPTkZJRyk7Ci0JLyogRUNDU0laRTE9NTEyIHwgU2VsZWN0IGVjY1Jlc3VsdHNpemVbMC0zXSAqLwotCXZhbCA9ICgoKChjaGlwLT5lY2Muc2l6ZSA+PiAxKSAtIDEpIDw8IDIyKSB8ICgweDAwMDAwMDBGKSk7Ci0JX19yYXdfd3JpdGVsKHZhbCwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX1NJWkVfQ09ORklHKTsKLX0KIAogLyoqCiAgKiBnZW5fdHJ1ZV9lY2MgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgdHJ1ZSBFQ0MgdmFsdWUKQEAgLTc1NSwxOSArNjkxLDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcF9uYW5kX2luZm8gKmluZm8gPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgb21hcF9uYW5kX2luZm8sCiAJCQkJCQkJbXRkKTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IDB4MDsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCS8qIFN0YXJ0IFJlYWRpbmcgZnJvbSBIVyBFQ0MxX1Jlc3VsdCA9IDB4MjAwICovCi0JcmVnID0gKHVuc2lnbmVkIGxvbmcpKGluZm8tPmdwbWNfYmFzZWFkZHIgKyBHUE1DX0VDQzFfUkVTVUxUKTsKLQl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCSplY2NfY29kZSsrID0gdmFsOyAgICAgICAgICAvKiBQMTI4ZSwgLi4uLCBQMWUgKi8KLQkqZWNjX2NvZGUrKyA9IHZhbCA+PiAxNjsgICAgLyogUDEyOG8sIC4uLiwgUDFvICovCi0JLyogUDIwNDhvLCBQMTAyNG8sIFA1MTJvLCBQMjU2bywgUDIwNDhlLCBQMTAyNGUsIFA1MTJlLCBQMjU2ZSAqLwotCSplY2NfY29kZSsrID0gKCh2YWwgPj4gOCkgJiAweDBmKSB8ICgodmFsID4+IDIwKSAmIDB4ZjApOwotCXJlZyArPSA0OwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGdwbWNfY2FsY3VsYXRlX2VjYyhpbmZvLT5ncG1jX2NzLCBkYXQsIGVjY19jb2RlKTsKIH0KIAogLyoqCkBAIC03ODEsMzIgKzcwNSwxMCBAQAogCQkJCQkJCW10ZCk7CiAJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgZGV2X3dpZHRoID0gKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDEgOiAwOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gX19yYXdfcmVhZGwoaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX0NPTkZJRyk7CiAKLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE5BTkRfRUNDX1JFQUQ6Ci0JCV9fcmF3X3dyaXRlbCgweDEwMSwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX0NPTlRST0wpOwotCQkvKiAoRUNDIDE2IG9yIDggYml0IGNvbCkgfCAoIENTICApICB8IEVDQyBFbmFibGUgKi8KLQkJdmFsID0gKGRldl93aWR0aCA8PCA3KSB8IChpbmZvLT5ncG1jX2NzIDw8IDEpIHwgKDB4MSk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9FQ0NfUkVBRFNZTjoKLQkJIF9fcmF3X3dyaXRlbCgweDEwMCwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX0NPTlRST0wpOwotCQkvKiAoRUNDIDE2IG9yIDggYml0IGNvbCkgfCAoIENTICApICB8IEVDQyBFbmFibGUgKi8KLQkJdmFsID0gKGRldl93aWR0aCA8PCA3KSB8IChpbmZvLT5ncG1jX2NzIDw8IDEpIHwgKDB4MSk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9FQ0NfV1JJVEU6Ci0JCV9fcmF3X3dyaXRlbCgweDEwMSwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfRUNDX0NPTlRST0wpOwotCQkvKiAoRUNDIDE2IG9yIDggYml0IGNvbCkgfCAoIENTICApICB8IEVDQyBFbmFibGUgKi8KLQkJdmFsID0gKGRldl93aWR0aCA8PCA3KSB8IChpbmZvLT5ncG1jX2NzIDw8IDEpIHwgKDB4MSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJFcnJvcjogVW5yZWNvZ25pemVkIE1vZGVbJWRdIVxuIiwKLQkJCQkJbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCV9fcmF3X3dyaXRlbCh2YWwsIGluZm8tPmdwbWNfYmFzZWFkZHIgKyBHUE1DX0VDQ19DT05GSUcpOworCWdwbWNfZW5hYmxlX2h3ZWNjKGluZm8tPmdwbWNfY3MsIG1vZGUsIGRldl93aWR0aCwgaW5mby0+bmFuZC5lY2Muc2l6ZSk7CiB9CisKICNlbmRpZgogCiAvKioKQEAgLTgzNCwxNCArNzM2LDEwIEBACiAJZWxzZQogCQl0aW1lbyArPSAoSFogKiAyMCkgLyAxMDAwOwogCi0JdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgKikgaW5mby0+Z3BtY19jc19iYXNlYWRkciArCi0JCQkJCQlHUE1DX0NTX05BTkRfQ09NTUFORDsKLQl0aGlzLT5JT19BRERSX1IgPSAodm9pZCAqKSBpbmZvLT5ncG1jX2NzX2Jhc2VhZGRyICsgR1BNQ19DU19OQU5EX0RBVEE7Ci0KLQlfX3Jhd193cml0ZWIoTkFORF9DTURfU1RBVFVTICYgMHhGRiwgdGhpcy0+SU9fQUREUl9XKTsKLQorCWdwbWNfbmFuZF93cml0ZShpbmZvLT5ncG1jX2NzLAorCQkJR1BNQ19OQU5EX0NPTU1BTkQsIChOQU5EX0NNRF9TVEFUVVMgJiAweEZGKSk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSkgewotCQlzdGF0dXMgPSBfX3Jhd19yZWFkYih0aGlzLT5JT19BRERSX1IpOworCQlzdGF0dXMgPSBncG1jX25hbmRfcmVhZChpbmZvLT5ncG1jX2NzLCBHUE1DX05BTkRfREFUQSk7CiAJCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19SRUFEWSkKIAkJCWJyZWFrOwogCQljb25kX3Jlc2NoZWQoKTsKQEAgLTg1NSwyMiArNzUzLDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgb21hcF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CiAJc3RydWN0IG9tYXBfbmFuZF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG9tYXBfbmFuZF9pbmZvLAogCQkJCQkJCW10ZCk7Ci0JdW5zaWduZWQgaW50IHZhbCA9IF9fcmF3X3JlYWRsKGluZm8tPmdwbWNfYmFzZWFkZHIgKyBHUE1DX0lSUV9TVEFUVVMpOwogCisJdmFsID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX0dFVF9JUlFfU1RBVFVTKTsKIAlpZiAoKHZhbCAmIDB4MTAwKSA9PSAweDEwMCkgewogCQkvKiBDbGVhciBJUlEgSW50ZXJydXB0ICovCiAJCXZhbCB8PSAweDEwMDsKIAkJdmFsICY9IH4oMHgwKTsKLQkJX19yYXdfd3JpdGVsKHZhbCwgaW5mby0+Z3BtY19iYXNlYWRkciArIEdQTUNfSVJRX1NUQVRVUyk7CisJCWdwbWNfY3NfY29uZmlndXJlKGluZm8tPmdwbWNfY3MsIEdQTUNfU0VUX0lSUV9TVEFUVVMsIHZhbCk7CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgaW50IGNudCA9IDA7CiAJCXdoaWxlIChjbnQrKyA8IDB4MUZGKSB7CiAJCQlpZiAgKCh2YWwgJiAweDEwMCkgPT0gMHgxMDApCiAJCQkJcmV0dXJuIDA7Ci0JCQl2YWwgPSBfX3Jhd19yZWFkbChpbmZvLT5ncG1jX2Jhc2VhZGRyICsKLQkJCQkJCQlHUE1DX0lSUV9TVEFUVVMpOworCQkJdmFsID0gZ3BtY19yZWFkX3N0YXR1cyhHUE1DX0dFVF9JUlFfU1RBVFVTKTsKIAkJfQogCX0KIApAQCAtOTAxLDggKzc5OSw2IEBACiAJaW5mby0+cGRldiA9IHBkZXY7CiAKIAlpbmZvLT5ncG1jX2NzCQk9IHBkYXRhLT5jczsKLQlpbmZvLT5ncG1jX2Jhc2VhZGRyCT0gcGRhdGEtPmdwbWNfYmFzZWFkZHI7Ci0JaW5mby0+Z3BtY19jc19iYXNlYWRkcgk9IHBkYXRhLT5ncG1jX2NzX2Jhc2VhZGRyOwogCWluZm8tPnBoeXNfYmFzZQkJPSBwZGF0YS0+cGh5c19iYXNlOwogCiAJaW5mby0+bXRkLnByaXYJCT0gJmluZm8tPm5hbmQ7CkBAIC05MTMsNyArODA5LDcgQEAKIAlpbmZvLT5uYW5kLm9wdGlvbnMJfD0gTkFORF9TS0lQX0JCVFNDQU47CiAKIAkvKiBOQU5EIHdyaXRlIHByb3RlY3Qgb2ZmICovCi0Jb21hcF9uYW5kX3dwKCZpbmZvLT5tdGQsIE5BTkRfV1BfT0ZGKTsKKwlncG1jX2NzX2NvbmZpZ3VyZShpbmZvLT5ncG1jX2NzLCBHUE1DX0NPTkZJR19XUCwgMCk7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5waHlzX2Jhc2UsIE5BTkRfSU9fU0laRSwKIAkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewpAQCAtOTQ4LDggKzg0NCw2IEBACiAJfQogCiAJaWYgKHVzZV9wcmVmZXRjaCkgewotCQkvKiBjb3B5IHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgbmFuZCBiYXNlIGZvciBmaWZvIGFjY2VzcyAqLwotCQlpbmZvLT5uYW5kX3ByZWZfZmlmb19hZGQgPSBpbmZvLT5uYW5kLklPX0FERFJfUjsKIAogCQlpbmZvLT5uYW5kLnJlYWRfYnVmICAgPSBvbWFwX3JlYWRfYnVmX3ByZWY7CiAJCWluZm8tPm5hbmQud3JpdGVfYnVmICA9IG9tYXBfd3JpdGVfYnVmX3ByZWY7CkBAIC05ODksOCArODgzLDYgQEAKIAlpbmZvLT5uYW5kLmVjYy5jb3JyZWN0CQk9IG9tYXBfY29ycmVjdF9kYXRhOwogCWluZm8tPm5hbmQuZWNjLm1vZGUJCT0gTkFORF9FQ0NfSFc7CiAKLQkvKiBpbml0IEhXIEVDQyAqLwotCW9tYXBfaHdlY2NfaW5pdCgmaW5mby0+bXRkKTsKICNlbHNlCiAJaW5mby0+bmFuZC5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAjZW5kaWYKQEAgLTEwNDAsNyArOTMyLDcgQEAKIAogCS8qIFJlbGVhc2UgTkFORCBkZXZpY2UsIGl0cyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFuZCBwYXJ0aXRpb25zICovCiAJbmFuZF9yZWxlYXNlKCZpbmZvLT5tdGQpOwotCWlvdW5tYXAoaW5mby0+bmFuZF9wcmVmX2ZpZm9fYWRkKTsKKwlpb3VubWFwKGluZm8tPm5hbmQuSU9fQUREUl9SKTsKIAlrZnJlZSgmaW5mby0+bXRkKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcGxhdF9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL3BsYXRfbmFuZC5jCmluZGV4IDhkNDY3MzEuLjkwZTE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcGxhdF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9wbGF0X25hbmQuYwpAQCAtOTEsNyArOTEsNyBAQAogCX0KIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4oJmRhdGEtPm10ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKCZkYXRhLT5tdGQsIHBkYXRhLT5jaGlwLm5yX2NoaXBzKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcjg1Mi5jIGIvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMKaW5kZXggYmNmYzg1MS4uNTE2OWNhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yODUyLmMKQEAgLTY0LDggKzY0LDggQEAKIC8qIHJldHVybnMgcG9pbnRlciB0byBvdXIgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHI4NTJfZGV2aWNlICpyODUyX2dldF9kZXYoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2OwotCXJldHVybiAoc3RydWN0IHI4NTJfZGV2aWNlICopY2hpcC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXJldHVybiBjaGlwLT5wcml2OwogfQogCiAKQEAgLTM4MCw3ICszODAsNyBAQAogICovCiBpbnQgcjg1Ml93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQogewotCXN0cnVjdCByODUyX2RldmljZSAqZGV2ID0gKHN0cnVjdCByODUyX2RldmljZSAqKWNoaXAtPnByaXY7CisJc3RydWN0IHI4NTJfZGV2aWNlICpkZXYgPSBjaGlwLT5wcml2OwogCiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWludCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jIGIvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYwppbmRleCBhMDMzYzRjLi42NzQ0MGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yc2xpYi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdHJldi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwppbmRleCAyMzlhYWRmLi4zM2Q4MzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwpAQCAtNzI3LDE1ICs3MjcsMTIgQEAKIAlpZiAoc2V0ID09IE5VTEwpCiAJCXJldHVybiBhZGRfbXRkX2RldmljZSgmbXRkLT5tdGQpOwogCi0JaWYgKHNldC0+bnJfcGFydGl0aW9ucyA9PSAwKSB7Ci0JCW10ZC0+bXRkLm5hbWUgPSBzZXQtPm5hbWU7Ci0JCW5yX3BhcnQgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmbXRkLT5tdGQsIHBhcnRfcHJvYmVzLAotCQkJCQkJJnBhcnRfaW5mbywgMCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHNldC0+bnJfcGFydGl0aW9ucyA+IDAgJiYgc2V0LT5wYXJ0aXRpb25zICE9IE5VTEwpIHsKLQkJCW5yX3BhcnQgPSBzZXQtPm5yX3BhcnRpdGlvbnM7Ci0JCQlwYXJ0X2luZm8gPSBzZXQtPnBhcnRpdGlvbnM7Ci0JCX0KKwltdGQtPm10ZC5uYW1lID0gc2V0LT5uYW1lOworCW5yX3BhcnQgPSBwYXJzZV9tdGRfcGFydGl0aW9ucygmbXRkLT5tdGQsIHBhcnRfcHJvYmVzLCAmcGFydF9pbmZvLCAwKTsKKworCWlmIChucl9wYXJ0IDw9IDAgJiYgc2V0LT5ucl9wYXJ0aXRpb25zID4gMCkgeworCQlucl9wYXJ0ID0gc2V0LT5ucl9wYXJ0aXRpb25zOworCQlwYXJ0X2luZm8gPSBzZXQtPnBhcnRpdGlvbnM7CiAJfQogCiAJaWYgKG5yX3BhcnQgPiAwICYmIHBhcnRfaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc21fY29tbW9uLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NtX2NvbW1vbi5jCmluZGV4IGFjODBmYjMuLjRhOGYzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc21fY29tbW9uLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zbV9jb21tb24uYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIGludCBzbV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzbWFydG1lZGlhKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCWludCByZXQ7CiAKIAljaGlwLT5vcHRpb25zIHw9IE5BTkRfU0tJUF9CQlRTQ0FOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKaW5kZXggYTQ1NzhiZi4uYjE1NTY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9uZnRsY29yZS5jCkBAIC0xLDExICsxLDIyIEBACi0vKiBMaW51eCBkcml2ZXIgZm9yIE5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgICAgICAqLwotLyogKGMpIDE5OTkgTWFjaGluZSBWaXNpb24gSG9sZGluZ3MsIEluYy4gICAgICAgICAgICAgKi8KLS8qIEF1dGhvcjogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiAgICAgICovCi0KIC8qCi0gIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbAotICBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoZSBhdXRob3IgcGxhY2VzIG5vIGFkZGl0aW9uYWwKLSAgcmVzdHJpY3Rpb25zIG9mIGFueSBraW5kIG9uIGl0LgorICogTGludXggZHJpdmVyIGZvciBOQU5EIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyCisgKgorICogQ29weXJpZ2h0IMKpIDE5OTkgTWFjaGluZSBWaXNpb24gSG9sZGluZ3MsIEluYy4KKyAqIENvcHlyaWdodCDCqSAxOTk5LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCiAjZGVmaW5lIFBSRVJFTEVBU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKaW5kZXggOGIyMmIxOC4uZTNjZDFmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKKysrIGIvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKQEAgLTIsNyArMiw4IEBACiAgKiBORlRMIG1vdW50IGNvZGUgd2l0aCBleHRlbnNpdmUgY2hlY2tzCiAgKgogICogQXV0aG9yOiBGYWJyaWNlIEJlbGxhcmQgKGZhYnJpY2UuYmVsbGFyZEBuZXRnZW0uY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAwIE5ldGdlbSBTLkEuCisgKiBDb3B5cmlnaHQgwqkgMjAwMCBOZXRnZW0gUy5BLgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vZnBhcnQuYyBiL2RyaXZlcnMvbXRkL29mcGFydC5jCmluZGV4IDRmMGQ2MzUuLjhiZjdkYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29mcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL29mcGFydC5jCkBAIC0xLDExICsxLDExIEBACiAvKgogICogRmxhc2ggcGFydGl0aW9ucyBkZXNjcmliZWQgYnkgdGhlIE9GIChvciBmbGF0dGVuZWQpIGRldmljZSB0cmVlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCiAgKiBBdXRob3I6IFZpdGFseSBXb29sIDx2d29vbEBydS5tdmlzdGEuY29tPgogICoKICAqIFJldmlzZWQgdG8gaGFuZGxlIG5ld2VyIHN0eWxlIGZsYXNoIGJpbmRpbmcgYnk6Ci0gKiAgIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbi4KKyAqICAgQ29weXJpZ2h0IMKpIDIwMDcgRGF2aWQgR2lic29uLCBJQk0gQ29ycG9yYXRpb24uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwppbmRleCA5YTQ5ZDY4Li4zZjMyMjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCkBAIC0yNSwxNCArMjUsMTQgQEAKIAogY29uZmlnIE1URF9PTkVOQU5EX09NQVAyCiAJdHJpc3RhdGUgIk9uZU5BTkQgb24gT01BUDIvT01BUDMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1URF9PTkVOQU5EICYmIChBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMpCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBhIE9uZU5BTkQgZmxhc2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhbiBPTUFQMi9PTUFQMyBDUFUKIAkgIHZpYSB0aGUgR1BNQyBtZW1vcnkgY29udHJvbGxlci4KIAogY29uZmlnIE1URF9PTkVOQU5EX1NBTVNVTkcKICAgICAgICAgdHJpc3RhdGUgIk9uZU5BTkQgb24gU2Ftc3VuZyBTT0MgY29udHJvbGxlciBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIE1URF9PTkVOQU5EICYmIChBUkNIX1MzQzY0WFggfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMCkKKyAgICAgICAgZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFggfHwgQVJDSF9TNVBDMTAwIHx8IEFSQ0hfUzVQVjIxMAogICAgICAgICBoZWxwCiAgICAgICAgICAgU3VwcG9ydCBmb3IgYSBPbmVOQU5EIGZsYXNoIGRldmljZSBjb25uZWN0ZWQgdG8gYW4gU2Ftc3VuZyBTT0MKICAgICAgICAgICBTM0M2NFhYL1M1UEMxWFggY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDI2Y2FmMjUuLmEyYmI1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtMzc3LDggKzM3NywxMSBAQAogCiAJZGVmYXVsdDoKIAkJYmxvY2sgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIGFkZHIpOwotCQlwYWdlID0gKGludCkgKGFkZHIgLSBvbmVuYW5kX2FkZHIodGhpcywgYmxvY2spKSA+PiB0aGlzLT5wYWdlX3NoaWZ0OwotCisJCWlmIChGTEVYT05FTkFORCh0aGlzKSkKKwkJCXBhZ2UgPSAoaW50KSAoYWRkciAtIG9uZW5hbmRfYWRkcih0aGlzLCBibG9jaykpPj5cCisJCQkJdGhpcy0+cGFnZV9zaGlmdDsKKwkJZWxzZQorCQkJcGFnZSA9IChpbnQpIChhZGRyID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwogCQlpZiAoT05FTkFORF9JU18yUExBTkUodGhpcykpIHsKIAkJCS8qIE1ha2UgdGhlIGV2ZW4gYmxvY2sgbnVtYmVyICovCiAJCQlibG9jayAmPSB+MTsKQEAgLTM3MzAsMTcgKzM3MzMsMTYgQEAKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3Byb2JlIC0gW09uZU5BTkQgSW50ZXJmYWNlXSBQcm9iZSB0aGUgT25lTkFORCBkZXZpY2UKKyAqIG9uZW5hbmRfY2hpcF9wcm9iZSAtIFtPbmVOQU5EIEludGVyZmFjZV0gVGhlIGdlbmVyaWMgY2hpcCBwcm9iZQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiBPbmVOQU5EIGRldGVjdGlvbiBtZXRob2Q6CiAgKiAgIENvbXBhcmUgdGhlIHZhbHVlcyBmcm9tIGNvbW1hbmQgd2l0aCBvbmVzIGZyb20gcmVnaXN0ZXIKICAqLwotc3RhdGljIGludCBvbmVuYW5kX3Byb2JlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIGludCBvbmVuYW5kX2NoaXBfcHJvYmUoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgYnJhbV9tYWZfaWQsIGJyYW1fZGV2X2lkLCBtYWZfaWQsIGRldl9pZCwgdmVyX2lkOwotCWludCBkZW5zaXR5OworCWludCBicmFtX21hZl9pZCwgYnJhbV9kZXZfaWQsIG1hZl9pZCwgZGV2X2lkOwogCWludCBzeXNjZmc7CiAKIAkvKiBTYXZlIHN5c3RlbSBjb25maWd1cmF0aW9uIDEgKi8KQEAgLTM3NjMsMTIgKzM3NjUsNiBAQAogCS8qIFJlc3RvcmUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gMSAqLwogCXRoaXMtPndyaXRlX3dvcmQoc3lzY2ZnLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpOwogCi0JLyogV29ya2Fyb3VuZCAqLwotCWlmIChzeXNjZmcgJiBPTkVOQU5EX1NZU19DRkcxX1NZTkNfV1JJVEUpIHsKLQkJYnJhbV9tYWZfaWQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX01BTlVGQUNUVVJFUl9JRCk7Ci0JCWJyYW1fZGV2X2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19ERVZJQ0VfSUQpOwotCX0KLQogCS8qIENoZWNrIG1hbnVmYWN0dXJlciBJRCAqLwogCWlmIChvbmVuYW5kX2NoZWNrX21hZihicmFtX21hZl9pZCkpCiAJCXJldHVybiAtRU5YSU87CkBAIC0zNzc2LDEzICszNzcyLDM1IEBACiAJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgZnJvbSBSZWdpc3RlciAqLwogCW1hZl9pZCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfTUFOVUZBQ1RVUkVSX0lEKTsKIAlkZXZfaWQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0RFVklDRV9JRCk7Ci0JdmVyX2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19WRVJTSU9OX0lEKTsKLQl0aGlzLT50ZWNobm9sb2d5ID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19URUNITk9MT0dZKTsKIAogCS8qIENoZWNrIE9uZU5BTkQgZGV2aWNlICovCiAJaWYgKG1hZl9pZCAhPSBicmFtX21hZl9pZCB8fCBkZXZfaWQgIT0gYnJhbV9kZXZfaWQpCiAJCXJldHVybiAtRU5YSU87CiAKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbmVuYW5kX3Byb2JlIC0gW09uZU5BTkQgSW50ZXJmYWNlXSBQcm9iZSB0aGUgT25lTkFORCBkZXZpY2UKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9wcm9iZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBtYWZfaWQsIGRldl9pZCwgdmVyX2lkOworCWludCBkZW5zaXR5OworCWludCByZXQ7CisKKwlyZXQgPSB0aGlzLT5jaGlwX3Byb2JlKG10ZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlYWQgbWFudWZhY3R1cmVyIGFuZCBkZXZpY2UgSURzIGZyb20gUmVnaXN0ZXIgKi8KKwltYWZfaWQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX01BTlVGQUNUVVJFUl9JRCk7CisJZGV2X2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19ERVZJQ0VfSUQpOworCXZlcl9pZCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfVkVSU0lPTl9JRCk7CisJdGhpcy0+dGVjaG5vbG9neSA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfVEVDSE5PTE9HWSk7CisKIAkvKiBGbGFzaCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KIAlvbmVuYW5kX3ByaW50X2RldmljZV9pbmZvKGRldl9pZCwgdmVyX2lkKTsKIAl0aGlzLT5kZXZpY2VfaWQgPSBkZXZfaWQ7CkBAIC0zOTA5LDYgKzM5MjcsOSBAQAogCWlmICghdGhpcy0+dW5sb2NrX2FsbCkKIAkJdGhpcy0+dW5sb2NrX2FsbCA9IG9uZW5hbmRfdW5sb2NrX2FsbDsKIAorCWlmICghdGhpcy0+Y2hpcF9wcm9iZSkKKwkJdGhpcy0+Y2hpcF9wcm9iZSA9IG9uZW5hbmRfY2hpcF9wcm9iZTsKKwogCWlmICghdGhpcy0+cmVhZF9idWZmZXJyYW0pCiAJCXRoaXMtPnJlYWRfYnVmZmVycmFtID0gb25lbmFuZF9yZWFkX2J1ZmZlcnJhbTsKIAlpZiAoIXRoaXMtPndyaXRlX2J1ZmZlcnJhbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwppbmRleCBhOTFmY2FjLi4wMWFiNWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvb25lbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KIAogLyoqCiAgKiBjaGVja19zaG9ydF9wYXR0ZXJuIC0gW0dFTkVSSUNdIGNoZWNrIGlmIGEgcGF0dGVybiBpcyBpbiB0aGUgYnVmZmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL3NhbXN1bmcuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvc2Ftc3VuZy5jCmluZGV4IDI3NTAzMTcuLmNiNDQzYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvc2Ftc3VuZy5jCkBAIC02MzAsNiArNjMwLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgczVwYzExMF9jaGlwX3Byb2JlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCS8qIE5vdyBqdXN0IHJldHVybiAwICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgczNjX29uZW5hbmRfYmJ0X3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBJTlRfQUNUIHwgTE9BRF9DTVA7CkBAIC03NTcsNiArNzYzLDcgQEAKIAkJLyogVXNlIGdlbmVyaWMgb25lbmFuZCBmdW5jdGlvbnMgKi8KIAkJb25lbmFuZC0+Y21kX21hcCA9IHM1cGMxeHhfY21kX21hcDsKIAkJdGhpcy0+cmVhZF9idWZmZXJyYW0gPSBzNXBjMTEwX3JlYWRfYnVmZmVycmFtOworCQl0aGlzLT5jaGlwX3Byb2JlID0gczVwYzExMF9jaGlwX3Byb2JlOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC03ODEsNyArNzg4LDYgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IHNpemUsIGVycjsKLQl1bnNpZ25lZCBsb25nIG9uZW5hbmRfY3RybF9jZmcgPSAwOwogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAkvKiBObyBuZWVkIHRvIGNoZWNrIHBkYXRhLiB0aGUgcGxhdGZvcm0gZGF0YSBpcyBvcHRpb25hbCAqLwpAQCAtOTAwLDE0ICs5MDYsNiBAQAogCQl9CiAKIAkJb25lbmFuZC0+cGh5c19iYXNlID0gb25lbmFuZC0+YmFzZV9yZXMtPnN0YXJ0OwotCi0JCW9uZW5hbmRfY3RybF9jZmcgPSByZWFkbChvbmVuYW5kLT5kbWFfYWRkciArIDB4MTAwKTsKLQkJaWYgKChvbmVuYW5kX2N0cmxfY2ZnICYgT05FTkFORF9TWVNfQ0ZHMV9TWU5DX1dSSVRFKSAmJgotCQkgICAgb25lbmFuZC0+ZG1hX2FkZHIpCi0JCQl3cml0ZWwob25lbmFuZF9jdHJsX2NmZyAmIH5PTkVOQU5EX1NZU19DRkcxX1NZTkNfV1JJVEUsCi0JCQkJCW9uZW5hbmQtPmRtYV9hZGRyICsgMHgxMDApOwotCQllbHNlCi0JCQlvbmVuYW5kX2N0cmxfY2ZnID0gMDsKIAl9CiAKIAlpZiAob25lbmFuZF9zY2FuKG10ZCwgMSkpIHsKQEAgLTkxNSwxMCArOTEzLDcgQEAKIAkJZ290byBzY2FuX2ZhaWxlZDsKIAl9CiAKLQlpZiAob25lbmFuZC0+dHlwZSA9PSBUWVBFX1M1UEMxMTApIHsKLQkJaWYgKG9uZW5hbmRfY3RybF9jZmcgJiYgb25lbmFuZC0+ZG1hX2FkZHIpCi0JCQl3cml0ZWwob25lbmFuZF9jdHJsX2NmZywgb25lbmFuZC0+ZG1hX2FkZHIgKyAweDEwMCk7Ci0JfSBlbHNlIHsKKwlpZiAob25lbmFuZC0+dHlwZSAhPSBUWVBFX1M1UEMxMTApIHsKIAkJLyogUzNDIGRvZXNuJ3QgaGFuZGxlIHN1YnBhZ2Ugd3JpdGUgKi8KIAkJbXRkLT5zdWJwYWdlX3NmdCA9IDA7CiAJCXRoaXMtPnN1YnBhZ2VzaXplID0gbXRkLT53cml0ZXNpemU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9yZWRib290LmMgYi9kcml2ZXJzL210ZC9yZWRib290LmMKaW5kZXggMmQ2MDBhMS4uN2E4N2QwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvcmVkYm9vdC5jCisrKyBiL2RyaXZlcnMvbXRkL3JlZGJvb3QuYwpAQCAtMSw2ICsxLDI0IEBACiAvKgogICogUGFyc2UgUmVkQm9vdC1zdHlsZSBGbGFzaCBJbWFnZSBTeXN0ZW0gKEZJUykgdGFibGVzIGFuZAogICogcHJvZHVjZSBhIExpbnV4IHBhcnRpdGlvbiBhcnJheSB0byBtYXRjaC4KKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwMSAgICAgIFJlZCBIYXQgVUsgTGltaXRlZAorICogQ29weXJpZ2h0IMKpIDIwMDEtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmZkX2Z0bC5jIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCmluZGV4IDYzYjgzYzAuLmNjNGQxODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYworKysgYi9kcml2ZXJzL210ZC9yZmRfZnRsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogcmZkX2Z0bC5jIC0tIHJlc2lkZW50IGZsYXNoIGRpc2sgKGZsYXNoIHRyYW5zbGF0aW9uIGxheWVyKQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAgU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4KKyAqIENvcHlyaWdodCDCqSAyMDA1ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgogICoKICAqIFRoaXMgdHlwZSBvZiBmbGFzaCB0cmFuc2xhdGlvbiBsYXllciAoRlRMKSBpcyB1c2VkIGJ5IHRoZSBFbWJlZGRlZCBCSU9TCiAgKiBieSBHZW5lcmFsIFNvZnR3YXJlLiBJdCBpcyBrbm93biBhcyB0aGUgUmVzaWRlbnQgRmxhc2ggRGlzayAoUkZEKSwgc2VlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3NmZGMuYyBiL2RyaXZlcnMvbXRkL3NzZmRjLmMKaW5kZXggODFjNGVjZC4uNWNkMTg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc3NmZGMuYworKysgYi9kcml2ZXJzL210ZC9zc2ZkYy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIExpbnV4IGRyaXZlciBmb3IgU1NGREMgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgKFJlYWQgb25seSkKLSAqIChjKSAyMDA1IEVwdGFyIHNybAorICogwqkgMjAwNSBFcHRhciBzcmwKICAqIEF1dGhvcjogQ2xhdWRpbyBMYW5jb25lbGxpIDxsYW5jb25lbGxpLmNsYXVkaW9AZXB0YXIuY29tPgogICoKICAqIEJhc2VkIG9uIE5URkwgYW5kIE1UREJMT0NLX1JPIGRyaXZlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9wYWdldGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKaW5kZXggNmJjMWI4Mi4uMDBiOTM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKKysrIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3BhZ2V0ZXN0LmMKQEAgLTMxMCw3ICszMTAsNyBAQAogc3RhdGljIGludCBlcmFzZWNyb3NzdGVzdCh2b2lkKQogewogCXNpemVfdCByZWFkID0gMCwgd3JpdHRlbiA9IDA7Ci0JaW50IGVyciA9IDAsIGksIGVibnVtLCBvayA9IDEsIGVibnVtMjsKKwlpbnQgZXJyID0gMCwgaSwgZWJudW0sIGVibnVtMjsKIAlsb2ZmX3QgYWRkcjA7CiAJY2hhciAqcmVhZGJ1ZiA9IHR3b3BhZ2VzOwogCkBAIC0zNTcsOCArMzU3LDcgQEAKIAlpZiAobWVtY21wKHdyaXRlYnVmLCByZWFkYnVmLCBwZ3NpemUpKSB7CiAJCXByaW50ayhQUklOVF9QUkVGICJ2ZXJpZnkgZmFpbGVkIVxuIik7CiAJCWVycmNudCArPSAxOwotCQlvayA9IDA7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiAtMTsKIAl9CiAKIAlwcmludGsoUFJJTlRfUFJFRiAiZXJhc2luZyBibG9jayAlZFxuIiwgZWJudW0pOwpAQCAtMzk2LDEwICszOTUsMTAgQEAKIAlpZiAobWVtY21wKHdyaXRlYnVmLCByZWFkYnVmLCBwZ3NpemUpKSB7CiAJCXByaW50ayhQUklOVF9QUkVGICJ2ZXJpZnkgZmFpbGVkIVxuIik7CiAJCWVycmNudCArPSAxOwotCQlvayA9IDA7CisJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAob2sgJiYgIWVycikKKwlpZiAoIWVycikKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImVyYXNlY3Jvc3N0ZXN0IG9rXG4iKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNGYxY2M3MS4uNjAyODIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogc3RhdGljIHNwaW5sb2NrX3QgbWRpb19sb2NrOwogc3RhdGljIHN0cnVjdCBldGhfcmVncyBfX2lvbWVtICptZGlvX3JlZ3M7IC8qIG1kaW8gY29tbWFuZCBhbmQgc3RhdHVzIG9ubHkgKi8KLXN0cnVjdCBtaWlfYnVzICptZGlvX2J1czsKK3N0YXRpYyBzdHJ1Y3QgbWlpX2J1cyAqbWRpb19idXM7CiBzdGF0aWMgaW50IHBvcnRzX29wZW47CiBzdGF0aWMgc3RydWN0IHBvcnQgKm5wZV9wb3J0X3RhYltNQVhfTlBFU107CiBzdGF0aWMgc3RydWN0IGRtYV9wb29sICpkbWFfcG9vbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwppbmRleCAwNjZmZDViLi5hZDE5NTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCkBAIC0zMTk4LDE3ICszMTk4LDE3IEBACiAJCX0KIAl9CiAKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpOwogCWlmIChlcnIpIHsKIAkJLyogSnVzdCBpbmZvLCBzb21lIG90aGVyIGRyaXZlciBtYXkgaGF2ZSBjbGFpbWVkIHRoZSBkZXZpY2UuICovCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKLQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOworCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKIAl9CiAKIAlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKQEAgLTMyMTcsMTEgKzMyMTcsMTEgQEAKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIG9idGFpbiA2NC1iaXQgRE1BIGZvciAiCiAJCQkgICAgICAgImNvaGVyZW50IGFsbG9jYXRpb25zXG4iKTsKLQkJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOworCQkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOwogCQl9CiAJfSBlbHNlIGlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgIT0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlnb3RvIG91dF9kaXNhYmxlX2RldmljZTsKKwkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOwogCX0KIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtMzIzNCw3ICszMjM0LDcgQEAKIAlhZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uczsKIAl9CiAKIAlhZGFwdGVyLT5ub2ZhaWxfc2tiID0KQEAgLTMzNzAsMTEgKzMzNzAsMTIgQEAKIG91dF9mcmVlX2FkYXB0ZXI6CiAJa2ZyZWUoYWRhcHRlcik7CiAKLW91dF9kaXNhYmxlX2RldmljZToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBvdXRfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitvdXRfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCBhMTY1NjMyLi43YjZkMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTI0NjIsMTUgKzI0NjIsNiBAQAogCQl2ZXJzaW9uX3ByaW50ZWQgPSAxOwogCX0KIAotCS8qCi0JICogUmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzIGZvciB0aGUgZGV2aWNlLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZW0gc29tZQotCSAqIG90aGVyIGRyaXZlciBtYXkgaGF2ZSBhbHJlYWR5IGNsYWltZWQgdGhlIGRldmljZSAuLi4KLQkgKi8KLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEtCVUlMRF9NT0ROQU1FKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJLyoKIAkgKiBJbml0aWFsaXplIGdlbmVyaWMgUENJIGRldmljZSBzdGF0ZS4KQEAgLTI0NzgsNyArMjQ2OSwxNyBAQAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb25zOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qCisJICogUmVzZXJ2ZSBQQ0kgcmVzb3VyY2VzIGZvciB0aGUgZGV2aWNlLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZW0gc29tZQorCSAqIG90aGVyIGRyaXZlciBtYXkgaGF2ZSBhbHJlYWR5IGNsYWltZWQgdGhlIGRldmljZSAuLi4KKwkgKi8KKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEtCVUlMRF9NT0ROQU1FKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX2Rpc2FibGVfZGV2aWNlOwogCX0KIAogCS8qCkBAIC0yNDkxLDE0ICsyNDkyLDE0IEBACiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBvYnRhaW4gNjQtYml0IERNQSBmb3IiCiAJCQkJIiBjb2hlcmVudCBhbGxvY2F0aW9uc1xuIik7Ci0JCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uczsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMTsKIAl9IGVsc2UgewogCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQlpZiAoZXJyICE9IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7Ci0JCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uczsKIAkJfQogCQlwY2lfdXNpbmdfZGFjID0gMDsKIAl9CkBAIC0yNTE0LDcgKzI1MTUsNyBAQAogCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZigqYWRhcHRlciksIEdGUF9LRVJORUwpOwogCWlmICghYWRhcHRlcikgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kaXNhYmxlX2RldmljZTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb25zOwogCX0KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CiAJYWRhcHRlci0+cGRldiA9IHBkZXY7CkBAIC0yNzUwLDEzICsyNzUxLDEzIEBACiAJa2ZyZWUoYWRhcHRlcik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi1lcnJfZGlzYWJsZV9kZXZpY2U6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9jbGVhcl9tYXN0ZXIocGRldik7Ci0KIGVycl9yZWxlYXNlX3JlZ2lvbnM6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcGNpX2NsZWFyX21hc3RlcihwZGV2KTsKKworZXJyX2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAogZXJyX291dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwppbmRleCBkMDgyNGUzLi43ZmJkMDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYworKysgYi9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYwpAQCAtMjk0NCw4ICsyOTQ0LDggQEAKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQlmcmVlX25ldGRldihuZGV2KTsKIAlpb3VubWFwKHByaXYtPnJlbWFwX2FkZHIpOworCWZyZWVfbmV0ZGV2KG5kZXYpOwogCiAJY2xrX2Rpc2FibGUoZW1hY19jbGspOwogCWNsa19wdXQoZW1hY19jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IGIxOTRiYWQuLjhlMmVhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE3NzksNiArMTc3OSw3IEBACiAJZm9yIChjYiA9IG5pYy0+Y2JfdG9fY2xlYW47CiAJICAgIGNiLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihjYl9jb21wbGV0ZSk7CiAJICAgIGNiID0gbmljLT5jYl90b19jbGVhbiA9IGNiLT5uZXh0KSB7CisJCXJtYigpOyAvKiByZWFkIHNrYiBhZnRlciBzdGF0dXMgKi8KIAkJbmV0aWZfcHJpbnRrKG5pYywgdHhfZG9uZSwgS0VSTl9ERUJVRywgbmljLT5uZXRkZXYsCiAJCQkgICAgICJjYlslZF0tPnN0YXR1cyA9IDB4JTA0WFxuIiwKIAkJCSAgICAgKGludCkoKCh2b2lkKiljYiAtICh2b2lkKiluaWMtPmNicykvc2l6ZW9mKHN0cnVjdCBjYikpLApAQCAtMTkyNyw2ICsxOTI4LDcgQEAKIAogCW5ldGlmX3ByaW50ayhuaWMsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgbmljLT5uZXRkZXYsCiAJCSAgICAgInN0YXR1cz0weCUwNFhcbiIsIHJmZF9zdGF0dXMpOworCXJtYigpOyAvKiByZWFkIHNpemUgYWZ0ZXIgc3RhdHVzIGJpdCAqLwogCiAJLyogSWYgZGF0YSBpc24ndCByZWFkeSwgbm90aGluZyB0byBpbmRpY2F0ZSAqLwogCWlmICh1bmxpa2VseSghKHJmZF9zdGF0dXMgJiBjYl9jb21wbGV0ZSkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggMDI4MzNhZi4uNWNjMzllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMzQ1NCw2ICszNDU0LDcgQEAKIAl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgogCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKIAkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJCXJtYigpOwkvKiByZWFkIGJ1ZmZlcl9pbmZvIGFmdGVyIGVvcF9kZXNjICovCiAJCWZvciAoIDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwpAQCAtMzY0Myw2ICszNjQ0LDcgQEAKIAkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKKwkJcm1iKCk7IC8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAKIAkJc3RhdHVzID0gcnhfZGVzYy0+c3RhdHVzOwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwpAQCAtMzg0OSw2ICszODUxLDcgQEAKIAkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKKwkJcm1iKCk7IC8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAKIAkJc3RhdHVzID0gcnhfZGVzYy0+c3RhdHVzOwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDM2ZDMxYTQuLjJiOGVmNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTc4MSw2ICs3ODEsNyBAQAogCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQogCQkJYnJlYWs7CiAJCSgqd29ya19kb25lKSsrOworCQlybWIoKTsJLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAogCQlzdGF0dXMgPSByeF9kZXNjLT5zdGF0dXM7CiAJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CkBAIC05OTEsNiArOTkyLDcgQEAKIAl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgogCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKIAkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJCXJtYigpOyAvKiByZWFkIGJ1ZmZlcl9pbmZvIGFmdGVyIGVvcF9kZXNjICovCiAJCWZvciAoOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CkBAIC0xMDg3LDYgKzEwODksNyBAQAogCQkJYnJlYWs7CiAJCSgqd29ya19kb25lKSsrOwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOworCQlybWIoKTsJLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAogCQkvKiBpbiB0aGUgcGFja2V0IHNwbGl0IGNhc2UgdGhpcyBpcyBoZWFkZXIgb25seSAqLwogCQlwcmVmZXRjaChza2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOwpAQCAtMTI4Niw2ICsxMjg5LDcgQEAKIAkJaWYgKCp3b3JrX2RvbmUgPj0gd29ya190b19kbykKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKKwkJcm1iKCk7CS8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAKIAkJc3RhdHVzID0gcnhfZGVzYy0+c3RhdHVzOwogCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwpAQCAtNTgyNSwxMSArNTgyOSw4IEBACiAKIAllMTAwMF9wcmludF9kZXZpY2VfaW5mbyhhZGFwdGVyKTsKIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKSB7Ci0JCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JfQotCXBtX3NjaGVkdWxlX3N1c3BlbmQoJnBkZXYtPmRldiwgTVNFQ19QRVJfU0VDKTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTU4NzUsOCArNTg3Niw2IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWJvb2wgZG93biA9IHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7Ci0KIAkvKgogCSAqIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwogCSAqIGV4cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkCkBAIC01OTAxLDExICs1OTAwLDggQEAKIAkJY2xlYXJfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCi0JaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpIHsKLQkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAkvKgogCSAqIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwppbmRleCA3N2E3Zjg3Li45YWFiODUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKQEAgLTEwODcsMTAgKzEwODcsNyBAQAogewogCXN0cnVjdCB2aWNfcHJvdmluZm8gKnZwOwogCXU4IG91aVszXSA9IFZJQ19QUk9WSU5GT19DSVNDT19PVUk7Ci0JdTggKnV1aWQ7CiAJY2hhciB1dWlkX3N0clszOF07Ci0Jc3RhdGljIGNoYXIgKnV1aWRfZm10ID0gIiUwMlglMDJYJTAyWCUwMlgtJTAyWCUwMlgtJTAyWCUwMlgtIgotCQkiJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwWCUwMlgiOwogCWludCBlcnI7CiAKIAllcnIgPSBlbmljX3ZuaWNfZGV2X2RlaW5pdChlbmljKTsKQEAgLTExMjEsMjQgKzExMTgsMTQgQEAKIAkJCUVUSF9BTEVOLCBtYWMpOwogCiAJCWlmIChlbmljLT5wcC5zZXQgJiBFTklDX1NFVF9JTlNUQU5DRSkgewotCQkJdXVpZCA9IGVuaWMtPnBwLmluc3RhbmNlX3V1aWQ7Ci0JCQlzcHJpbnRmKHV1aWRfc3RyLCB1dWlkX2ZtdCwKLQkJCQl1dWlkWzBdLCAgdXVpZFsxXSwgIHV1aWRbMl0sICB1dWlkWzNdLAotCQkJCXV1aWRbNF0sICB1dWlkWzVdLCAgdXVpZFs2XSwgIHV1aWRbN10sCi0JCQkJdXVpZFs4XSwgIHV1aWRbOV0sICB1dWlkWzEwXSwgdXVpZFsxMV0sCi0JCQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0pOworCQkJc3ByaW50Zih1dWlkX3N0ciwgIiVwVUIiLCBlbmljLT5wcC5pbnN0YW5jZV91dWlkKTsKIAkJCXZpY19wcm92aW5mb19hZGRfdGx2KHZwLAogCQkJCVZJQ19MSU5VWF9QUk9WX1RMVl9DTElFTlRfVVVJRF9TVFIsCiAJCQkJc2l6ZW9mKHV1aWRfc3RyKSwgdXVpZF9zdHIpOwogCQl9CiAKIAkJaWYgKGVuaWMtPnBwLnNldCAmIEVOSUNfU0VUX0hPU1QpIHsKLQkJCXV1aWQgPSBlbmljLT5wcC5ob3N0X3V1aWQ7Ci0JCQlzcHJpbnRmKHV1aWRfc3RyLCB1dWlkX2ZtdCwKLQkJCQl1dWlkWzBdLCAgdXVpZFsxXSwgIHV1aWRbMl0sICB1dWlkWzNdLAotCQkJCXV1aWRbNF0sICB1dWlkWzVdLCAgdXVpZFs2XSwgIHV1aWRbN10sCi0JCQkJdXVpZFs4XSwgIHV1aWRbOV0sICB1dWlkWzEwXSwgdXVpZFsxMV0sCi0JCQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0pOworCQkJc3ByaW50Zih1dWlkX3N0ciwgIiVwVUIiLCBlbmljLT5wcC5ob3N0X3V1aWQpOwogCQkJdmljX3Byb3ZpbmZvX2FkZF90bHYodnAsCiAJCQkJVklDX0xJTlVYX1BST1ZfVExWX0hPU1RfVVVJRF9TVFIsCiAJCQkJc2l6ZW9mKHV1aWRfc3RyKSwgdXVpZF9zdHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCBkZjVkY2QyLi45YjRlNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtNTM1Myw2ICs1MzUzLDcgQEAKIAogCXdoaWxlICgoZW9wX2Rlc2MtPndiLnN0YXR1cyAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKIAkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCXJtYigpOwkvKiByZWFkIGJ1ZmZlcl9pbmZvIGFmdGVyIGVvcF9kZXNjIHN0YXR1cyAqLwogCQlmb3IgKGNsZWFuZWQgPSBmYWxzZTsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CiAJCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKQEAgLTU1NTgsNiArNTU1OSw3IEBACiAJCWlmICgqd29ya19kb25lID49IGJ1ZGdldCkKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKKwkJcm1iKCk7IC8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAKIAkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKIAkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggZWM4MDhmYS4uYzUzOWY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTI0OCw2ICsyNDgsNyBAQAogCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQogCQkJYnJlYWs7CiAJCSgqd29ya19kb25lKSsrOworCQlybWIoKTsgLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAogCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIApAQCAtNzgwLDYgKzc4MSw3IEBACiAKIAl3aGlsZSAoKGVvcF9kZXNjLT53Yi5zdGF0dXMgJiBjcHVfdG9fbGUzMihFMTAwMF9UWERfU1RBVF9ERCkpICYmCiAJICAgICAgIChjb3VudCA8IHR4X3JpbmctPmNvdW50KSkgeworCQlybWIoKTsJLyogcmVhZCBidWZmZXJfaW5mbyBhZnRlciBlb3BfZGVzYyBzdGF0dXMgKi8KIAkJZm9yIChjbGVhbmVkID0gZmFsc2U7ICFjbGVhbmVkOyBjb3VudCsrKSB7CiAJCQl0eF9kZXNjID0gSUdCVkZfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NoX2lyZGEuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfaXJkYS5jCmluZGV4IGVkZDU2NjYuLjllM2Y0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2hfaXJkYS5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfaXJkYS5jCkBAIC03NDgsNyArNzQ4LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3Qgc2hfaXJkYV9zZWxmICpzZWxmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWNoYXIgY2xrX25hbWVbOF07CiAJaW50IGlycTsKIAlpbnQgZXJyID0gLUVOT01FTTsKIApAQCAtNzc1LDEwICs3NzQsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX21lbV8yOwogCi0Jc25wcmludGYoY2xrX25hbWUsIHNpemVvZihjbGtfbmFtZSksICJpcmRhJWQiLCBwZGV2LT5pZCk7Ci0Jc2VsZi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBjbGtfbmFtZSk7CisJc2VsZi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHNlbGYtPmNsaykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBjbG9jayBcIiVzXCJcbiIsIGNsa19uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBpcmRhIGNsb2NrXG4iKTsKIAkJZ290byBlcnJfbWVtXzM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBjNmI3NWM4Li40NWZjODliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTE4MTYsNiArMTgxNiw3IEBACiAKIAl3aGlsZSAoZW9wX2Rlc2MtPnN0YXR1cyAmIElYR0JfVFhfREVTQ19TVEFUVVNfREQpIHsKIAorCQlybWIoKTsgLyogcmVhZCBidWZmZXJfaW5mbyBhZnRlciBlb3BfZGVzYyAqLwogCQlmb3IgKGNsZWFuZWQgPSBmYWxzZTsgIWNsZWFuZWQ7ICkgewogCQkJdHhfZGVzYyA9IElYR0JfVFhfREVTQygqdHhfcmluZywgaSk7CiAJCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKQEAgLTE5NzYsNiArMTk3Nyw3IEBACiAJCQlicmVhazsKIAogCQkoKndvcmtfZG9uZSkrKzsKKwkJcm1iKCk7CS8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAJCXN0YXR1cyA9IHJ4X2Rlc2MtPnN0YXR1czsKIAkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggN2Q2YTQxNS4uZTMyYWY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtNzQ4LDYgKzc0OCw3IEBACiAJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgogCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgewogCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJcm1iKCk7IC8qIHJlYWQgYnVmZmVyX2luZm8gYWZ0ZXIgZW9wX2Rlc2MgKi8KIAkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CkBAIC02MTU1LDkgKzYxNTYsMTEgQEAKIAkJCXR4cSAmPSAoYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5pbmRpY2VzIC0gMSk7CiAJCQl0eHEgKz0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5tYXNrOwogCQkJcmV0dXJuIHR4cTsKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CiAJCQl0eHEgPSBhZGFwdGVyLT5mY29lLnVwOwogCQkJcmV0dXJuIHR4cTsKKyNlbmRpZgogCQl9CiAJfQogI2VuZGlmCkBAIC02MjE2LDEwICs2MjE5LDE0IEBACiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgJiYKIAkgICAgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRkNPRSkgfHwKIAkgICAgIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRklQKSkpIHsKLQkJdHhfZmxhZ3MgJj0gfihJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSwotCQkJICAgICAgPDwgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVCk7Ci0JCXR4X2ZsYWdzIHw9ICgoYWRhcHRlci0+ZmNvZS51cCA8PCAxMykKLQkJCSAgICAgIDw8IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQkJdHhfZmxhZ3MgJj0gfihJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSworCQkJCSAgICAgIDw8IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworCQkJdHhfZmxhZ3MgfD0gKChhZGFwdGVyLT5mY29lLnVwIDw8IDEzKQorCQkJCSAgICAgIDw8IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworCQl9CisjZW5kaWYKIAkJLyogZmxhZyBmb3IgRkNvRSBvZmZsb2FkcyAqLwogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkKIAkJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0ZDT0U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCAzZTI5MWNjLi45MThjMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTIzMSw2ICsyMzEsNyBAQAogCXdoaWxlICgoZW9wX2Rlc2MtPndiLnN0YXR1cyAmIGNwdV90b19sZTMyKElYR0JFX1RYRF9TVEFUX0REKSkgJiYKIAkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCkpIHsKIAkJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJCXJtYigpOyAvKiByZWFkIGJ1ZmZlcl9pbmZvIGFmdGVyIGVvcF9kZXNjICovCiAJCWZvciAoIDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQl0eF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOwpAQCAtNTE4LDYgKzUxOSw3IEBACiAJCQlicmVhazsKIAkJKCp3b3JrX2RvbmUpKys7CiAKKwkJcm1iKCk7IC8qIHJlYWQgZGVzY3JpcHRvciBhbmQgcnhfYnVmZmVyX2luZm8gYWZ0ZXIgc3RhdHVzIEREICovCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewogCQkJaGRyX2luZm8gPSBsZTE2X3RvX2NwdShpeGdiZXZmX2dldF9oZHJfaW5mbyhyeF9kZXNjKSk7CiAJCQlsZW4gPSAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0spID4+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNmNlNmNlMS4uZmQ4NmUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMjAwMSwyNyArMjAwMSwyNiBAQAogCWlmICgrK2FkYXB0ZXItPnR4X3RpbWVvX2NudCA+PSBOWF9NQVhfVFhfVElNRU9VVFMpCiAJCWdvdG8gcmVxdWVzdF9yZXNldDsKIAorCXJ0bmxfbG9jaygpOwogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CiAJCS8qIHRyeSB0byBzY3J1YiBpbnRlcnJ1cHQgKi8KIAkJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAotCQlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQogCQluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CiAKIAkJbmV0aWZfd2FrZV9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwogCiAJCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKLQkJaWYgKCFuZXR4ZW5fbmljX3Jlc2V0X2NvbnRleHQoYWRhcHRlcikpIHsKLQkJCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkJcmV0dXJuOworCQlpZiAobmV0eGVuX25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpKSB7CisJCQlydG5sX3VubG9jaygpOworCQkJZ290byByZXF1ZXN0X3Jlc2V0OwogCQl9Ci0KLQkJLyogY29udGV4dCByZXNldCBmYWlsZWQsIGZhbGwgdGhyb3VnaCBmb3IgZncgcmVzZXQgKi8KIAl9CisJYWRhcHRlci0+bmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm47CiAKIHJlcXVlc3RfcmVzZXQ6CiAJYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDEwZWUxMDYuLmM2ODNmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC04Nyw3ICs4Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMjc5LDggKzI3OCw4IEBACiAJbHAtPnBfZGV2ID0gbGluazsKIAogCXNwaW5fbG9ja19pbml0KCZscC0+d2luZG93X2xvY2spOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAzMjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKQEAgLTMzOCwxMCArMzM3LDExIEBACiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICIzYzU3NF9jb25maWcoKVxuIik7CiAKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OworCWxpbmstPmlvX2xpbmVzID0gMTY7CisKIAlmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKLQkJbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaiBeIDB4MzAwOworCQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJCWlmIChpID09IDApCiAJCQlicmVhazsKIAl9CkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAlkZXYtPmlycSA9IGxpbmstPmlycTsKLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmJhc2VfYWRkciA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAogCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IGNlNjNjMzcuLjYxZjljZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTIxNCw4ICsyMTMsOCBAQAogICAgIGxwLT5wX2RldiA9IGxpbms7CiAKICAgICBzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwpAQCAtMjc4LDEyICsyNzcsMTMgQEAKIAkJICAgIjNDb20gY2FyZD8/XG4iKTsKICAgICBtdWx0aSA9IChsaW5rLT5jYXJkX2lkID09IFBST0RJRF8zQ09NXzNDNTYyKTsKIAorICAgIGxpbmstPmlvX2xpbmVzID0gMTY7CisKICAgICAvKiBGb3IgdGhlIDNjNTYyLCB0aGUgYmFzZSBhZGRyZXNzIG11c3QgYmUgeHgwMC14eDdmICovCi0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKICAgICBmb3IgKGkgPSBqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MTApIHsKIAlpZiAobXVsdGkgJiYgKGogJiAweDgwKSkgY29udGludWU7Ci0JbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGogXiAweDMwMDsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQpAQCAtMjk5LDcgKzI5OSw3IEBACiAJICAgIGdvdG8gZmFpbGVkOwogCiAgICAgZGV2LT5pcnEgPSBsaW5rLT5pcnE7Ci0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAgICAgRUwzV0lORE9XKDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IDMzNTI1YmYuLjVmMDVmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0yNjAsMjggKzI1OSwzMCBAQAogc3RhdGljIGludCB0cnlfaW9fcG9ydChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpbnQgaiwgcmV0OwotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpIHsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworICAgIGxpbmstPnJlc291cmNlWzFdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworICAgIGlmIChsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID09IDMyKSB7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCS8qIGZvciBtYXN0ZXIvc2xhdmUgbXVsdGlmdW5jdGlvbiBjYXJkcyAqLwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIgPiAwKQotCSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWlmIChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID4gMCkKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIH0gZWxzZSB7CiAJLyogVGhpcyBzaG91bGQgYmUgdHdvIDE2LXBvcnQgd2luZG93cyAqLwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworCWxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAgICAgfQotICAgIGlmIChsaW5rLT5pby5CYXNlUG9ydDEgPT0gMCkgewotCWxpbmstPmlvLklPQWRkckxpbmVzID0gMTY7CisgICAgaWYgKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9PSAwKSB7CiAJZm9yIChqID0gMDsgaiA8IDB4NDAwOyBqICs9IDB4MjApIHsKLQkgICAgbGluay0+aW8uQmFzZVBvcnQxID0gaiBeIDB4MzAwOwotCSAgICBsaW5rLT5pby5CYXNlUG9ydDIgPSAoaiBeIDB4MzAwKSArIDB4MTA7Ci0JICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGogXiAweDMwMDsKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gKGogXiAweDMwMCkgKyAweDEwOworCSAgICBsaW5rLT5pb19saW5lcyA9IDE2OworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkgICAgaWYgKHJldCA9PSAwKQogCQkgICAgcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIHJldDsKICAgICB9IGVsc2UgewotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKICAgICB9CiB9CiAKQEAgLTMwMiwxNSArMzAzLDE1IEBACiAJICAgbmV0d29yayBmdW5jdGlvbiB3aXRoIHdpbmRvdyAwLCBhbmQgc2VyaWFsIHdpdGggd2luZG93IDEgKi8KIAlpZiAoaW8tPm53aW4gPiAxKSB7CiAJCWkgPSAoaW8tPndpblsxXS5sZW4gPiBpby0+d2luWzBdLmxlbik7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzEtaV0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMS1pXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzEtaV0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzEtaV0ubGVuOwogCX0gZWxzZSB7Ci0JCWkgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaSA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAl9Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luW2ldLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luW2ldLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlpZiAocF9kZXYtPnJlc291cmNlWzBdLT5lbmQgKyBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA+PSAzMikKIAkJcmV0dXJuIHRyeV9pb19wb3J0KHBfZGV2KTsKIAogCXJldHVybiAtRU5PREVWOwpAQCAtMzMzLDcgKzMzNCw3IEBACiAgICAgaWYgKCFsaW5rLT5pcnEpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIAotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgPT0gOCkgeworICAgIGlmIChyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzFdKSA9PSA4KSB7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKICAgICB9CkBAIC0zNDMsNyArMzQ0LDcgQEAKIAkgICAgZ290byBmYWlsZWQ7CiAKICAgICBkZXYtPmlycSA9IGxpbmstPmlycTsKLSAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBkZXYtPmJhc2VfYWRkciA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAogICAgIGlmICghZ2V0X3Byb20obGluaykpIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgImF4bmV0X2NzOiB0aGlzIGlzIG5vdCBhbiBBWDg4MTkwIGNhcmQhXG4iKTsKQEAgLTM3OSw4ICszODAsNyBAQAogICAgIC8qIE1heWJlIFBIWSBpcyBpbiBwb3dlciBkb3duIG1vZGUuIChQUERfU0VUID0gMSkgCiAgICAgICAgQml0IDIgb2YgQ0NTUiBpcyBhY3RpdmUgbG93LiAqLyAKICAgICBpZiAoaSA9PSAzMikgewotCWNvbmZfcmVnX3QgcmVnID0geyAwLCBDU19XUklURSwgQ0lTUkVHX0NDU1IsIDB4MDQgfTsKLSAJcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCXBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ0NTUiwgMHgwNCk7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkgICAgaiA9IG1kaW9fcmVhZChkZXYtPmJhc2VfYWRkciArIEFYTkVUX01JSV9FRVAsIGksIDEpOwogCSAgICBqMiA9IG1kaW9fcmVhZChkZXYtPmJhc2VfYWRkciArIEFYTkVUX01JSV9FRVAsIGksIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2NvbTIwMDIwX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwppbmRleCA1NjQzZjk0Li4zYzQwMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvY29tMjAwMjBfY3MuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2FyY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbTIwMDIwLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC0xNTksOSArMTU4LDggQEAKICAgICAvKiBmaWxsIGluIG91ciBtb2R1bGUgcGFyYW1ldGVycyBhcyBkZWZhdWx0cyAqLwogICAgIGRldi0+ZGV2X2FkZHJbMF0gPSBub2RlOwogCi0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIHBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IDE2OworICAgIHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKICAgICBwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIHBfZGV2LT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMjQ2LDIwICsyNDQsMjQgQEAKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImNvbTIwMDIwX2NvbmZpZ1xuIik7CiAKLSAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJiYXNlcG9ydDEgaXMgJVhoXG4iLCBsaW5rLT5pby5CYXNlUG9ydDEpOworICAgIGRldl9kYmcoJmxpbmstPmRldiwgImJhc2Vwb3J0MSBpcyAlWGhcbiIsCisJICAgICh1bnNpZ25lZCBpbnQpIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCk7CisKICAgICBpID0gLUVOT0RFVjsKLSAgICBpZiAoIWxpbmstPmlvLkJhc2VQb3J0MSkKKyAgICBsaW5rLT5pb19saW5lcyA9IDE2OworCisgICAgaWYgKCFsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpCiAgICAgewogCWZvciAoaW9hZGRyID0gMHgxMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkKIAl7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGlvYWRkcjsKKwkgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCSAgICBpZiAoaSA9PSAwKQogCQlicmVhazsKIAl9CiAgICAgfQogICAgIGVsc2UKLQlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAgICAgCiAgICAgaWYgKGkgIT0gMCkKICAgICB7CkBAIC0yNjcsNyArMjY5LDcgQEAKIAlnb3RvIGZhaWxlZDsKICAgICB9CiAJCi0gICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZ290IGlvYWRkciAlWGhcbiIsIGlvYWRkcik7CiAKICAgICBkZXZfZGJnKCZsaW5rLT5kZXYsICJyZXF1ZXN0IElSUSAlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCmluZGV4IDdjMjdjNTAuLjk4ZmZmYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTI0OSw5ICsyNDgsOCBAQAogICAgIGxwLT5iYXNlID0gTlVMTDsKIAogICAgIC8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDMyOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAzMjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAKICAgICAvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpAQCAtMjg5LDEzICsyODcsMTMgQEAKIAl7IDB4M2Y4LCAweDJmOCwgMHgzZTgsIDB4MmU4LCAweDAgfTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQlsaW5rLT5pby5CYXNlUG9ydDIgPSBzZXJpYWxfYmFzZVtpXTsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCWlmIChsaW5rLT5pby5CYXNlUG9ydDIgPT0gMCkgewotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IHNlcmlhbF9iYXNlW2ldOworCWxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0ID09IDApIHsKKwkgICAgbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJICAgIHByaW50ayhLRVJOX05PVElDRSAiZm12ajE4eF9jczogb3V0IG9mIHJlc291cmNlIGZvciBzZXJpYWxcbiIpOwogCX0KLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCWlmIChyZXQgPT0gMCkKIAkJcmV0dXJuIHJldDsKICAgICB9CkBAIC0zMTEsMTIgKzMwOSwxMiBAQAogCTB4MzgwLDB4M2MwIG9ubHkgZm9yIGlvcG9ydC4KICAgICAqLwogICAgIGZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4M2UwOyBpb2FkZHIgKz0gMHgyMCkgewotCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGlvYWRkcjsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAlpZiAocmV0ID09IDApIHsKIAkgICAgLyogY2FsY3VsYXRlIENvbmZpZ0luZGV4IHZhbHVlICovCiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAKLQkJKChsaW5rLT5pby5CYXNlUG9ydDEgJiAweDBmMCkgPj4gMykgfCAweDIyOworCQkoKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCAmIDB4MGYwKSA+PiAzKSB8IDB4MjI7CiAJICAgIHJldHVybiByZXQ7CiAJfQogICAgIH0KQEAgLTM0Niw2ICszNDQsOCBAQAogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiZm12ajE4eF9jb25maWdcbiIpOwogCisgICAgbGluay0+aW9fbGluZXMgPSA1OworCiAgICAgbGVuID0gcGNtY2lhX2dldF90dXBsZShsaW5rLCBDSVNUUExfRlVOQ0UsICZidWYpOwogICAgIGtmcmVlKGJ1Zik7CiAKQEAgLTM2NCwyMCArMzY0LDIwIEBACiAJCS8qIE11bHRpRnVuY3Rpb24gQ2FyZCAqLwogCQlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSAweDgwMDsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NDc7Ci0JCWxpbmstPmlvLk51bVBvcnRzMiA9IDg7CisJCWxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCSAgICB9CiAJICAgIGJyZWFrOwogCWNhc2UgTUFORklEX05FQzoKIAkgICAgY2FyZHR5cGUgPSBORUM7IC8qIE11bHRpRnVuY3Rpb24gQ2FyZCAqLwogCSAgICBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSAweDgwMDsKIAkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4NDc7Ci0JICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7CisJICAgIGxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCSAgICBicmVhazsKIAljYXNlIE1BTkZJRF9LTUU6CiAJICAgIGNhcmR0eXBlID0gS01FOyAvKiBNdWx0aUZ1bmN0aW9uIENhcmQgKi8KIAkgICAgbGluay0+Y29uZi5Db25maWdCYXNlID0gMHg4MDA7CiAJICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDQ3OwotCSAgICBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OworCSAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID0gODsKIAkgICAgYnJlYWs7CiAJY2FzZSBNQU5GSURfQ09OVEVDOgogCSAgICBjYXJkdHlwZSA9IENPTlRFQzsKQEAgLTQxOCwxNCArNDE4LDE0IEBACiAJfQogICAgIH0KIAotICAgIGlmIChsaW5rLT5pby5OdW1Qb3J0czIgIT0gMCkgeworICAgIGlmIChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kICE9IDApIHsKIAlyZXQgPSBtZmNfdHJ5X2lvX3BvcnQobGluayk7CiAJaWYgKHJldCAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICB9IGVsc2UgaWYgKGNhcmR0eXBlID09IFVOR0VSTUFOTikgewogCXJldCA9IHVuZ2VybWFubl90cnlfaW9fcG9ydChsaW5rKTsKIAlpZiAocmV0ICE9IDApIGdvdG8gZmFpbGVkOwogICAgIH0gZWxzZSB7IAotCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkgICAgaWYgKHJldCkKIAkJICAgIGdvdG8gZmFpbGVkOwogICAgIH0KQEAgLTQzNyw5ICs0MzcsOSBAQAogCSAgICBnb3RvIGZhaWxlZDsKIAogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCi0gICAgaWYgKGxpbmstPmlvLkJhc2VQb3J0MiAhPSAwKSB7CisgICAgaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMV0pICE9IDApIHsKIAlyZXQgPSBmbXZqMTh4X3NldHVwX21mYyhsaW5rKTsKIAlpZiAocmV0ICE9IDApIGdvdG8gZmFpbGVkOwogICAgIH0KQEAgLTU0NSw3ICs1NDUsNiBAQAogc3RhdGljIGludCBmbXZqMTh4X2dldF9od2luZm8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIHVfY2hhciAqbm9kZV9pZCkKIHsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKICAgICB1X2NoYXIgX19pb21lbSAqYmFzZTsKICAgICBpbnQgaSwgajsKIApAQCAtNTU4LDkgKzU1Nyw3IEBACiAJcmV0dXJuIC0xOwogCiAgICAgYmFzZSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKLSAgICBtZW0uUGFnZSA9IDA7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAwOwotICAgIHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgMCk7CiAKICAgICAvKgogICAgICAqICBNQkgxMDMwNCBDSVNUUExfRlVOQ0VfTEFOX05PREVfSUQgZm9ybWF0CkBAIC01OTQsNyArNTkxLDYgQEAKIHN0YXRpYyBpbnQgZm12ajE4eF9zZXR1cF9tZmMoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGk7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgdW5zaWduZWQgaW50IGlvYWRkcjsKQEAgLTYxNCw5ICs2MTAsNyBAQAogCXJldHVybiAtMTsKICAgICB9CiAKLSAgICBtZW0uUGFnZSA9IDA7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAwOwotICAgIGkgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisgICAgaSA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAwKTsKICAgICBpZiAoaSAhPSAwKSB7CiAJaW91bm1hcChscC0+YmFzZSk7CiAJbHAtPmJhc2UgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwppbmRleCA2N2VlOTg1Li5iMGQwNmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvaWJtdHJfY3MuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWJtdHIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTE1Miw5ICsxNTEsOCBAQAogICAgIGxpbmstPnByaXYgPSBpbmZvOwogICAgIGluZm8tPnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gNDsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNDsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0yMTMsMjYgKzIxMSwyNiBAQAogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CiAgICAgc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGksIHJldDsKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlibXRyX2NvbmZpZ1xuIik7CiAKICAgICBsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg2MTsKKyAgICBsaW5rLT5pb19saW5lcyA9IDE2OwogCiAgICAgLyogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgUFJJTUFSWSBvciBBTFRFUk5BVEUuICovCiAKICAgICAvKiBUcnkgUFJJTUFSWSBjYXJkIGF0IDB4QTIwLTB4QTIzICovCi0gICAgbGluay0+aW8uQmFzZVBvcnQxID0gMHhBMjA7Ci0gICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gMHhBMjA7CisgICAgaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICAgIGlmIChpICE9IDApIHsKIAkvKiBDb3VsZG4ndCBnZXQgMHhBMjAtMHhBMjMuICBUcnkgQUxURVJOQVRFIGF0IDB4QTI0LTB4QTI3LiAqLwotCWxpbmstPmlvLkJhc2VQb3J0MSA9IDB4QTI0OwotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gMHhBMjQ7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAgICAgfQotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfZXhjbHVzaXZlX2lycShsaW5rLCBpYm10cl9pbnRlcnJ1cHQpOwogICAgIGlmIChyZXQpCkBAIC0yNTEsOSArMjQ5LDcgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIG1lbS5DYXJkT2Zmc2V0ID0gbW1pb2Jhc2U7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgbW1pb2Jhc2UpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIHRpLT5tbWlvID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtMjY4LDEzICsyNjQsMTEgQEAKICAgICBpZiAocmV0KQogCSAgICBnb3RvIGZhaWxlZDsKIAotICAgIG1lbS5DYXJkT2Zmc2V0ID0gc3JhbWJhc2U7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgaW5mby0+c3JhbV93aW5faGFuZGxlLCAmbWVtKTsKKyAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGluZm8tPnNyYW1fd2luX2hhbmRsZSwgc3JhbWJhc2UpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgdGktPnNyYW1fYmFzZSA9IG1lbS5DYXJkT2Zmc2V0ID4+IDEyOworICAgIHRpLT5zcmFtX2Jhc2UgPSBzcmFtYmFzZSA+PiAxMjsKICAgICB0aS0+c3JhbV92aXJ0ID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogICAgIHRpLT5zcmFtX3BoeXMgPSByZXEuQmFzZTsKIApAQCAtMzI1LDcgKzMxOSw2IEBACiAJaWYgKGxpbmstPndpbikgewogCQlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJaW91bm1hcCh0aS0+bW1pbyk7Ci0JCXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBpbmZvLT5zcmFtX3dpbl9oYW5kbGUpOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggOWI2M2RlYy4uNjhmMmRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpAQCAtNDU5LDkgKzQ1OCw4IEBACiAgICAgbGluay0+cHJpdiA9IGRldjsKICAgICAKICAgICBzcGluX2xvY2tfaW5pdCgmbHAtPmJhbmtfbG9jayk7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMxID0gMzI7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDU7CisgICAgbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDMyOworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDE7CkBAIC02NDUsNyArNjQzLDggQEAKIAogICBkZXZfZGJnKCZsaW5rLT5kZXYsICJubWNsYW5fY29uZmlnXG4iKTsKIAotICByZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworICBsaW5rLT5pb19saW5lcyA9IDU7CisgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICBpZiAocmV0KQogCSAgZ290byBmYWlsZWQ7CiAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2V4Y2x1c2l2ZV9pcnEobGluaywgbWFjZV9pbnRlcnJ1cHQpOwpAQCAtNjU2LDcgKzY1NSw3IEBACiAJICBnb3RvIGZhaWxlZDsKIAogICBkZXYtPmlycSA9IGxpbmstPmlycTsKLSAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCkBAIC03NTgsMjkgKzc1NywyMCBAQAogCiAjaWYgUkVTRVRfWElMSU5YCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gJmxwLT5saW5rOwotICBjb25mX3JlZ190IHJlZzsKLSAgdV9sb25nIE9yaWdDb3JWYWx1ZTsgCisgIHU4IE9yaWdDb3JWYWx1ZTsKIAogICAvKiBTYXZlIG9yaWdpbmFsIENPUiB2YWx1ZSAqLwotICByZWcuRnVuY3Rpb24gPSAwOwotICByZWcuQWN0aW9uID0gQ1NfUkVBRDsKLSAgcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0gIHJlZy5WYWx1ZSA9IDA7Ci0gIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKLSAgT3JpZ0NvclZhbHVlID0gcmVnLlZhbHVlOworICBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLCAmT3JpZ0NvclZhbHVlKTsKIAogICAvKiBSZXNldCBYaWxpbnggKi8KLSAgcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotICByZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLSAgZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHglbFgsIHJlc2V0dGluZy4uLlxuIiwKKyAgZGV2X2RiZygmbGluay0+ZGV2LCAibm1jbGFuX3Jlc2V0OiBPcmlnQ29yVmFsdWU9MHgleCwgcmVzZXR0aW5nLi4uXG4iLAogCU9yaWdDb3JWYWx1ZSk7Ci0gIHJlZy5WYWx1ZSA9IENPUl9TT0ZUX1JFU0VUOwotICBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisgIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLCBDT1JfU09GVF9SRVNFVCk7CiAgIC8qIE5lZWQgdG8gd2FpdCBmb3IgMjAgbXMgZm9yIFBDTUNJQSB0byBmaW5pc2ggcmVzZXQuICovCiAKICAgLyogUmVzdG9yZSBvcmlnaW5hbCBDT1IgY29uZmlndXJhdGlvbiBpbmRleCAqLwotICByZWcuVmFsdWUgPSBDT1JfTEVWRUxfUkVRIHwgKE9yaWdDb3JWYWx1ZSAmIENPUl9DT05GSUdfTUFTSyk7Ci0gIHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKyAgcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DT1IsCisJCQkgIChDT1JfTEVWRUxfUkVRIHwgKE9yaWdDb3JWYWx1ZSAmIENPUl9DT05GSUdfTUFTSykpKTsKICAgLyogWGlsaW54IGlzIG5vdyBjb21wbGV0ZWx5IHJlc2V0IGFsb25nIHdpdGggdGhlIE1BQ0UgY2hpcC4gKi8KICAgbHAtPnR4X2ZyZWVfZnJhbWVzPUFNMjE1MF9NQVhfVFhfRlJBTUVTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IGJmZGVmNzIuLmMzZWRmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC0xMTMsOCArMTEyLDYgQEAKIAogc3RhdGljIHZvaWQgcGNuZXRfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKLXN0YXRpYyBkZXZfaW5mb190IGRldl9pbmZvID0gInBjbmV0X2NzIjsKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHR5cGVkZWYgc3RydWN0IGh3X2luZm9fdCB7CkBAIC0zMDQsNyArMzAxLDYgQEAKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKICAgICB1X2NoYXIgX19pb21lbSAqYmFzZSwgKnZpcnQ7CiAgICAgaW50IGksIGo7CiAKQEAgLTMxNywxMCArMzEzLDggQEAKIAlyZXR1cm4gTlVMTDsKIAogICAgIHZpcnQgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7Ci0gICAgbWVtLlBhZ2UgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBOUl9JTkZPOyBpKyspIHsKLQltZW0uQ2FyZE9mZnNldCA9IGh3X2luZm9baV0ub2Zmc2V0ICYgfihyZXEuU2l6ZS0xKTsKLQlwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSk7CisJcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sIGh3X2luZm9baV0ub2Zmc2V0ICYgfihyZXEuU2l6ZS0xKSk7CiAJYmFzZSA9ICZ2aXJ0W2h3X2luZm9baV0ub2Zmc2V0ICYgKHJlcS5TaXplLTEpXTsKIAlpZiAoKHJlYWRiKGJhc2UrMCkgPT0gaHdfaW5mb1tpXS5hMCkgJiYKIAkgICAgKHJlYWRiKGJhc2UrMikgPT0gaHdfaW5mb1tpXS5hMSkgJiYKQEAgLTQ4MCwyOSArNDc0LDMxIEBACiBzdGF0aWMgaW50IHRyeV9pb19wb3J0KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogICAgIGludCBqLCByZXQ7Ci0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMSA9PSAzMikgewotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMiA+IDApIHsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKyAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0tPmVuZCA9PSAzMikgeworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0tPmVuZCA+IDApIHsKIAkgICAgLyogZm9yIG1hc3Rlci9zbGF2ZSBtdWx0aWZ1bmN0aW9uIGNhcmRzICovCi0JICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJICAgIGxpbmstPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAl9CiAgICAgfSBlbHNlIHsKIAkvKiBUaGlzIHNob3VsZCBiZSB0d28gMTYtcG9ydCB3aW5kb3dzICovCi0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKICAgICB9Ci0gICAgaWYgKGxpbmstPmlvLkJhc2VQb3J0MSA9PSAwKSB7Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKKyAgICBpZiAobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID09IDApIHsKIAlmb3IgKGogPSAwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBqIF4gMHgzMDA7Ci0JICAgIGxpbmstPmlvLkJhc2VQb3J0MiA9IChqIF4gMHgzMDApICsgMHgxMDsKLQkgICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwkgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaiBeIDB4MzAwOworCSAgICBsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgPSAoaiBeIDB4MzAwKSArIDB4MTA7CisJICAgIGxpbmstPmlvX2xpbmVzID0gMTY7CisJICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogCSAgICBpZiAocmV0ID09IDApCiAJCSAgICByZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gcmV0OwogICAgIH0gZWxzZSB7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOwogICAgIH0KIH0KIApAQCAtNTIzLDE4ICs1MTksMTggQEAKIAkgICBuZXR3b3JrIGZ1bmN0aW9uIHdpdGggd2luZG93IDAsIGFuZCBzZXJpYWwgd2l0aCB3aW5kb3cgMSAqLwogCWlmIChpby0+bndpbiA+IDEpIHsKIAkJaSA9IChpby0+d2luWzFdLmxlbiA+IGlvLT53aW5bMF0ubGVuKTsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMS1pXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxLWldLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMS1pXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMS1pXS5sZW47CiAJfSBlbHNlIHsKLQkJaSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCQlpID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCX0KIAogCSpoYXNfc2htZW0gPSAoKGNmZy0+bWVtLm53aW4gPT0gMSkgJiYKIAkJICAgICAgKGNmZy0+bWVtLndpblswXS5sZW4gPj0gMHg0MDAwKSk7Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5baV0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpbltpXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JaWYgKHBfZGV2LT5pby5OdW1Qb3J0czEgKyBwX2Rldi0+aW8uTnVtUG9ydHMyID49IDMyKQorCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luW2ldLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luW2ldLmxlbjsKKwlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwlpZiAocF9kZXYtPnJlc291cmNlWzBdLT5lbmQgKyBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA+PSAzMikKIAkJcmV0dXJuIHRyeV9pb19wb3J0KHBfZGV2KTsKIAogCXJldHVybiAwOwpAQCAtNTU3LDcgKzU1Myw3IEBACiAgICAgaWYgKCFsaW5rLT5pcnEpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgaWYgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSB7CisgICAgaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMV0pID09IDgpIHsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOwogICAgIH0KQEAgLTU2OSw3ICs1NjUsNyBAQAogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIGlmIChpbmZvLT5mbGFncyAmIEhBU19NSVNDX1JFRykgewogCWlmICgoaWZfcG9ydCA9PSAxKSB8fCAoaWZfcG9ydCA9PSAyKSkKIAkgICAgZGV2LT5pZl9wb3J0ID0gaWZfcG9ydDsKQEAgLTk1Niw3ICs5NTIsNyBAQAogICAgIHNldF9taXNjX3JlZyhkZXYpOwogCiAgICAgb3V0Yl9wKDB4RkYsIG5pY19iYXNlICsgRU4wX0lTUik7IC8qIENsZWFyIGJvZ3VzIGludHIuICovCi0gICAgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2lycV93cmFwcGVyLCBJUlFGX1NIQVJFRCwgZGV2X2luZm8sIGRldik7CisgICAgcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2lycV93cmFwcGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogICAgIGlmIChyZXQpCiAJICAgIHJldHVybiByZXQ7CiAKQEAgLTE0NjQsNyArMTQ2MCw2IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgcGNuZXRfZGV2X3QgKmluZm8gPSBQUklWKGRldik7CiAgICAgd2luX3JlcV90IHJlcTsKLSAgICBtZW1yZXFfdCBtZW07CiAgICAgaW50IGksIHdpbmRvd19zaXplLCBvZmZzZXQsIHJldDsKIAogICAgIHdpbmRvd19zaXplID0gKHN0b3BfcGcgLSBzdGFydF9wZykgPDwgODsKQEAgLTE0ODMsMTEgKzE0NzgsOSBAQAogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCi0gICAgbWVtLkNhcmRPZmZzZXQgPSAoc3RhcnRfcGcgPDwgOCkgKyBjbV9vZmZzZXQ7Ci0gICAgb2Zmc2V0ID0gbWVtLkNhcmRPZmZzZXQgJSB3aW5kb3dfc2l6ZTsKLSAgICBtZW0uQ2FyZE9mZnNldCAtPSBvZmZzZXQ7Ci0gICAgbWVtLlBhZ2UgPSAwOwotICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAmbWVtKTsKKyAgICBvZmZzZXQgPSAoc3RhcnRfcGcgPDwgOCkgKyBjbV9vZmZzZXQ7CisgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplOworICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCBvZmZzZXQpOwogICAgIGlmIChyZXQpCiAJICAgIGdvdG8gZmFpbGVkOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDMwN2NkMTcuLjM3NzM2N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMzI1LDkgKzMyNCw4IEBACiAgICAgbGluay0+cHJpdiA9IGRldjsKIAogICAgIHNwaW5fbG9ja19pbml0KCZzbWMtPmxvY2spOwotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSA0OworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCkBAIC00MjgsMTIgKzQyNiwxMyBAQAogCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKIAlpbnQgazsKLQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CiAJZm9yIChrID0gMDsgayA8IDB4NDAwOyBrICs9IDB4MTApIHsKIAkJaWYgKGsgJiAweDgwKQogCQkJY29udGludWU7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBrIF4gMHgzMDA7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gayBeIDB4MzAwOworCQlwX2Rldi0+aW9fbGluZXMgPSAxNjsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC00NDQsMjEgKzQ0MywyMCBAQAogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogICAgIHN0cnVjdCBzbWNfcHJpdmF0ZSAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB3aW5fcmVxX3QgcmVxOwotICAgIG1lbXJlcV90IG1lbTsKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogICAgIGludCBpOwogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDE2OwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMyID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uTnVtUG9ydHMyID0gODsKKyAgICBsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDg7CiAKICAgICAvKiBUaGUgTWVnYWhlcnR6IGNvbWJvIGNhcmRzIGhhdmUgbW9kZW0tbGlrZSBDSVMgZW50cmllcywgc28KICAgICAgICB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgdHJ5IGEgYnVuY2ggb2YgcG9ydCBjb21iaW5hdGlvbnMuICovCiAgICAgaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtaHpfbWZjX2NvbmZpZ19jaGVjaywgTlVMTCkpCiAJICAgIHJldHVybiAtRU5PREVWOwogCi0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKICAgICAvKiBBbGxvY2F0ZSBhIG1lbW9yeSB3aW5kb3csIGZvciBhY2Nlc3NpbmcgdGhlIElTUiAqLwogICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOHxXSU5fTUVNT1JZX1RZUEVfQU18V0lOX0VOQUJMRTsKQEAgLTQ2OSwxMSArNDY3LDggQEAKIAkgICAgcmV0dXJuIC1FTk9ERVY7CiAKICAgICBzbWMtPmJhc2UgPSBpb3JlbWFwKHJlcS5CYXNlLCByZXEuU2l6ZSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSBtZW0uUGFnZSA9IDA7Ci0gICAgaWYgKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkKLQltZW0uQ2FyZE9mZnNldCA9IGxpbmstPmNvbmYuQ29uZmlnQmFzZTsKLSAgICBpID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOwotCisgICAgb2Zmc2V0ID0gKHNtYy0+bWFuZmlkID09IE1BTkZJRF9NT1RPUk9MQSkgPyBsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgOiAwOworICAgIGkgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgb2Zmc2V0KTsKICAgICBpZiAoKGkgPT0gMCkgJiYKIAkoc21jLT5tYW5maWQgPT0gTUFORklEX01FR0FIRVJUWikgJiYKIAkoc21jLT5jYXJkaWQgPT0gUFJPRElEX01FR0FIRVJUWl9FTTMyODgpKQpAQCAtNTQ2LDcgKzU0MSw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1bnNpZ25lZCBpbnQgaW91YXJ0ID0gbGluay0+aW8uQmFzZVBvcnQyOworICAgIHVuc2lnbmVkIGludCBpb3VhcnQgPSBsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAKICAgICAvKiBTZXQgVUFSVCBiYXNlIGFkZHJlc3MgYW5kIGZvcmNlIG1hcCB3aXRoIENPUiBiaXQgMSAqLwogICAgIHdyaXRlYihpb3VhcnQgJiAweGZmLCAgICAgICAgc21jLT5iYXNlICsgTU9UX1VBUlQgKyBDSVNSRUdfSU9CQVNFXzApOwpAQCAtNjAyLDkgKzU5Nyw5IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgdmNjLAogCQkJICAgdm9pZCAqcHJpdl9kYXRhKQogewotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5pb19saW5lcyA9IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgc21jX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTYxMiwxMCArNjA3LDEwIEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAgICAgaW50IGk7CiAKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CiAgICAgaSA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBzbWNfY29uZmlnY2hlY2ssIE5VTEwpOwogICAgIGlmICghaSkKLQkgICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgcmV0dXJuIGk7CiB9CkBAIC02NDcsMjcgKzY0MiwyNyBAQAogCiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CiAgICAgbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgPSA2NDsKLSAgICBsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotICAgIGxpbmstPmlvLk51bVBvcnRzMiA9IDg7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPSAxNjsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gNjQ7CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OworICAgIGxpbmstPnJlc291cmNlWzFdLT5lbmQgPSA4OwogCiAgICAgLyogRW5hYmxlIEhhcmQgRGVjb2RlLCBMQU4sIE1vZGVtICovCiAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9IDB4MjM7CisgICAgbGluay0+aW9fbGluZXMgPSAxNjsKIAogICAgIGZvciAoaSA9IGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JbGluay0+aW8uQmFzZVBvcnQyID0gY29tW2pdOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IGNvbVtqXTsKKwlpID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKGkgPT0gMCkKIAkJYnJlYWs7CiAgICAgfQogICAgIGlmIChpICE9IDApIHsKIAkvKiBGYWxsYmFjazogdHVybiBvZmYgaGFyZCBkZWNvZGUgKi8KIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHgwMzsKLQlsaW5rLT5pby5OdW1Qb3J0czIgPSAwOwotCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWxpbmstPnJlc291cmNlWzFdLT5lbmQgPSAwOworCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKICAgICB9Ci0gICAgZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDEgKyAweDEwOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHgxMDsKICAgICByZXR1cm4gaTsKIH0KIApAQCAtNjg0LDcgKzY3OSw3IEBACiAKIAkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemU7IGkrKykgewotCSAgICBvdXRiKGZ3LT5kYXRhW2ldLCBsaW5rLT5pby5CYXNlUG9ydDEgKyAyKTsKKwkgICAgb3V0Yihmdy0+ZGF0YVtpXSwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMik7CiAJICAgIHVkZWxheSg1MCk7CiAJfQogCXJlbGVhc2VfZmlybXdhcmUoZncpOwpAQCAtNzI2LDEyICs3MjEsMTIgQEAKIAkJcmV0dXJuIHJjOwogICAgIH0gZWxzZSBpZiAobWFuZmlkID09IE1BTkZJRF9PU0lURUNIKSB7CiAJLyogTWFrZSBzdXJlIGJvdGggZnVuY3Rpb25zIGFyZSBwb3dlcmVkIHVwICovCi0Jc2V0X2JpdHMoMHgzMDAsIGxpbmstPmlvLkJhc2VQb3J0MSArIE9TSVRFQ0hfQVVJX1BXUik7CisJc2V0X2JpdHMoMHgzMDAsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIE9TSVRFQ0hfQVVJX1BXUik7CiAJLyogTm93LCB0dXJuIG9uIHRoZSBpbnRlcnJ1cHQgZm9yIGJvdGggY2FyZCBmdW5jdGlvbnMgKi8KLQlzZXRfYml0cygweDMwMCwgbGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9SRVNFVF9JU1IpOworCXNldF9iaXRzKDB4MzAwLCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyBPU0lURUNIX1JFU0VUX0lTUik7CiAJZGV2X2RiZygmbGluay0+ZGV2LCAiQVVJL1BXUjogJTQuNHggUkVTRVQvSVNSOiAlNC40eFxuIiwKLQkgICAgICBpbncobGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9BVUlfUFdSKSwKLQkgICAgICBpbncobGluay0+aW8uQmFzZVBvcnQxICsgT1NJVEVDSF9SRVNFVF9JU1IpKTsKKwkgICAgICBpbncobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgT1NJVEVDSF9BVUlfUFdSKSwKKwkgICAgICBpbncobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgT1NJVEVDSF9SRVNFVF9JU1IpKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC04MDQsNyArNzk5LDcgQEAKICAgICB9CiAKICAgICAvKiBUcnkgc2V0dGluZyBidXMgd2lkdGggKi8KLSAgICB3aWR0aCA9IChsaW5rLT5pby5BdHRyaWJ1dGVzMSA9PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTyk7CisgICAgd2lkdGggPSAobGluay0+cmVzb3VyY2VbMF0tPmZsYWdzID09IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPKTsKICAgICBzID0gaW5iKGlvYWRkciArIENPTkZJRyk7CiAgICAgaWYgKHdpZHRoKQogCXMgfD0gQ0ZHXzE2QklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggYjZjMzY0NDguLjRlYjZmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtODIsNyArODIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTY3OCw5ICs2NzcsOSBAQAogCiAJaWYgKGNmLT5pby5ud2luID4gMCAgJiYgIChjZi0+aW8ud2luWzBdLmJhc2UgJiAweGYpID09IDgpIHsKIAkJZm9yIChpb2FkZHIgPSAweDMwMDsgaW9hZGRyIDwgMHg0MDA7IGlvYWRkciArPSAweDEwKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gY2YtPmlvLndpblswXS5iYXNlOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvYWRkcjsKLQkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKQorCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpb2FkZHI7CisJCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTY5NywxMSArNjk2LDExIEBACiAJaW50ICpwYXNzID0gcHJpdl9kYXRhOwogCiAJaWYgKGNmLT5pby5ud2luID4gMCAmJiAoY2YtPmlvLndpblswXS5iYXNlICYgMHhmKSA9PSA4KSB7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBjZi0+aW8ud2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBwX2Rldi0+aW8uQmFzZVBvcnQyCisJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBjZi0+aW8ud2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0CiAJCQkrICgqcGFzcyA/IChjZi0+aW5kZXggJiAweDIwID8gLTI0OjgpCiAJCQkgICA6IChjZi0+aW5kZXggJiAweDIwID8gICA4Oi0yNCkpOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC04MDgsOCArODA3LDcgQEAKIAlnb3RvIGZhaWx1cmU7CiAgICAgfQogCi0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgPTEwOwotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CiAgICAgaWYgKGxvY2FsLT5tb2RlbSkgewogCWludCBwYXNzOwogCkBAIC04MTcsMTYgKzgxNSwxNiBAQAogCSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAkgICAgbGluay0+Y29uZi5TdGF0dXMgfD0gQ0NTUl9BVURJT19FTkE7CiAJfQotCWxpbmstPmlvLk51bVBvcnRzMiA9IDg7Ci0JbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwlsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kID0gODsKKwlsaW5rLT5yZXNvdXJjZVsxXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CiAJaWYgKGxvY2FsLT5kaW5nbykgewogCSAgICAvKiBUYWtlIHRoZSBNb2RlbSBJTyBwb3J0IGZyb20gdGhlIENJUyBhbmQgc2NhbiBmb3IgYSBmcmVlCiAJICAgICAqIEV0aGVybmV0IHBvcnQgKi8KLQkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTY7IC8qIG5vIE1ha28gc3R1ZmYgYW55bW9yZSAqLworCSAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7IC8qIG5vIE1ha28gc3R1ZmYgYW55bW9yZSAqLwogCSAgICBpZiAoIXBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCB4aXJjMnBzX2NvbmZpZ19tb2RlbSwgTlVMTCkpCiAJCSAgICBnb3RvIHBvcnRfZm91bmQ7CiAJfSBlbHNlIHsKLQkgICAgbGluay0+aW8uTnVtUG9ydHMxID0gMTg7CisJICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxODsKIAkgICAgLyogV2UgZG8gMiBwYXNzZXMgaGVyZTogVGhlIGZpcnN0IG9uZSB1c2VzIHRoZSByZWd1bGFyIG1hcHBpbmcgYW5kCiAJICAgICAqIHRoZSBzZWNvbmQgdHJpZXMgYWdhaW4sIHRoZXJlYnkgY29uc2lkZXJpbmcgdGhhdCB0aGUgMzIgcG9ydHMgYXJlCiAJICAgICAqIG1pcnJvcmVkIGV2ZXJ5IDMyIGJ5dGVzLiBBY3R1YWxseSB3ZSB1c2UgYSBtaXJyb3JlZCBwb3J0IGZvcgpAQCAtODQxLDE0ICs4MzksMTUgQEAKIAl9CiAJcHJpbnRrKEtOT1RfWElSQyAibm8gcG9ydHMgYXZhaWxhYmxlXG4iKTsKICAgICB9IGVsc2UgewotCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPmlvX2xpbmVzID0gMTA7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDE2OwogCWZvciAoaW9hZGRyID0gMHgzMDA7IGlvYWRkciA8IDB4NDAwOyBpb2FkZHIgKz0gMHgxMCkgewotCSAgICBsaW5rLT5pby5CYXNlUG9ydDEgPSBpb2FkZHI7Ci0JICAgIGlmICghKGVycj1wY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKSkKKwkgICAgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW9hZGRyOworCSAgICBpZiAoIShlcnIgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKSkpCiAJCWdvdG8gcG9ydF9mb3VuZDsKIAl9Ci0JbGluay0+aW8uQmFzZVBvcnQxID0gMDsgLyogbGV0IENTIGRlY2lkZSAqLwotCWlmICgoZXJyPXBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpKQorCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IDA7IC8qIGxldCBDUyBkZWNpZGUgKi8KKwlpZiAoKGVyciA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAgICAgfQogICBwb3J0X2ZvdW5kOgpAQCAtODcwLDI0ICs4NjksMjEgQEAKIAlnb3RvIGNvbmZpZ19lcnJvcjsKIAogICAgIGlmIChsb2NhbC0+ZGluZ28pIHsKLQljb25mX3JlZ190IHJlZzsKIAl3aW5fcmVxX3QgcmVxOwotCW1lbXJlcV90IG1lbTsKIAogCS8qIFJlc2V0IHRoZSBtb2RlbSdzIEJBUiB0byB0aGUgY29ycmVjdCB2YWx1ZQogCSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgaW4gdGhlIFJlcXVlc3RDb25maWd1cmF0aW9uIGNhbGwsCiAJICogdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgZXRoZXJuZXQgcG9ydCAoQmFzZVBvcnQxKSBpcyB3cml0dGVuCiAJICogdG8gdGhlIEJBUiByZWdpc3RlcnMgb2YgdGhlIG1vZGVtLgogCSAqLwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0lPQkFTRV8wOwotCXJlZy5WYWx1ZSA9IGxpbmstPmlvLkJhc2VQb3J0MiAmIDB4ZmY7Ci0JaWYgKChlcnIgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZykpKQorCWVyciA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfSU9CQVNFXzAsICh1OCkKKwkJCQlsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgJiAweGZmKTsKKwlpZiAoZXJyKQogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19JT0JBU0VfMTsKLQlyZWcuVmFsdWUgPSAobGluay0+aW8uQmFzZVBvcnQyID4+IDgpICYgMHhmZjsKLQlpZiAoKGVyciA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKSkpCisKKwllcnIgPSBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUobGluaywgQ0lTUkVHX0lPQkFTRV8xLAorCQkJCShsaW5rLT5yZXNvdXJjZVsxXS0+c3RhcnQgPj4gOCkgJiAweGZmKTsKKwlpZiAoZXJyKQogCSAgICBnb3RvIGNvbmZpZ19lcnJvcjsKIAogCS8qIFRoZXJlIGlzIG5vIGNvbmZpZyBlbnRyeSBmb3IgdGhlIEV0aGVybmV0IHBhcnQgd2hpY2gKQEAgLTkwMSwxNiArODk3LDE0IEBACiAJICAgIGdvdG8gY29uZmlnX2Vycm9yOwogCiAJbG9jYWwtPmRpbmdvX2NjciA9IGlvcmVtYXAocmVxLkJhc2UsMHgxMDAwKSArIDB4MDgwMDsKLQltZW0uQ2FyZE9mZnNldCA9IDB4MDsKLQltZW0uUGFnZSA9IDA7Ci0JaWYgKChlcnIgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstPndpbiwgJm1lbSkpKQorCWlmICgoZXJyID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sIDApKSkKIAkgICAgZ290byBjb25maWdfZXJyb3I7CiAKIAkvKiBTZXR1cCB0aGUgQ0NSczsgdGhlcmUgYXJlIG5vIGluZm9zIGluIHRoZSBDSVMgYWJvdXQgdGhlIEV0aGVybmV0CiAJICogcGFydC4KIAkgKi8KIAl3cml0ZWIoMHg0NywgbG9jYWwtPmRpbmdvX2NjciArIENJU1JFR19DT1IpOwotCWlvYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlpb2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJd3JpdGViKGlvYWRkciAmIDB4ZmYJICAsIGxvY2FsLT5kaW5nb19jY3IgKyBDSVNSRUdfSU9CQVNFXzApOwogCXdyaXRlYigoaW9hZGRyID4+IDgpJjB4ZmYgLCBsb2NhbC0+ZGluZ29fY2NyICsgQ0lTUkVHX0lPQkFTRV8xKTsKIApAQCAtOTU3LDcgKzk1MSw3IEBACiAKICAgICAvKiB3ZSBjYW4gbm93IHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV0IHN1YnN5c3RlbSAqLwogICAgIGRldi0+aXJxID0gbGluay0+aXJxOwotICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOworICAgIGRldi0+YmFzZV9hZGRyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCiAgICAgaWYgKGxvY2FsLT5kaW5nbykKIAlkb19yZXNldChkZXYsIDEpOyAvKiBhIGtsdWRnZSB0byBtYWtlIHRoZSBjZW01NiB3b3JrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfYXN5bmMuYyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCmluZGV4IDZjMmU4ZmEuLmFmNTBhNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jCkBAIC0xMDgsOSArMTA4LDkgQEAKIHN0YXRpYyB2b2lkIGFzeW5jX2xjcF9wZWVrKHN0cnVjdCBhc3luY3BwcCAqYXAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCiAJCQkgICBpbnQgbGVuLCBpbnQgaW5ib3VuZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHsKLQlwcHBfYXN5bmNfc2VuZCwKLQlwcHBfYXN5bmNfaW9jdGwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGFzeW5jX29wcyA9IHsKKwkuc3RhcnRfeG1pdCA9IHBwcF9hc3luY19zZW5kLAorCS5pb2N0bCAgICAgID0gcHBwX2FzeW5jX2lvY3RsLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCmluZGV4IDUyOTM4ZGEuLjRjOTVlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYwpAQCAtOTcsOSArOTcsOSBAQAogc3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkgICBjaGFyICpmbGFncywgaW50IGNvdW50KTsKIAotc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7Ci0JcHBwX3N5bmNfc2VuZCwKLQlwcHBfc3luY19pb2N0bAorc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgc3luY19vcHMgPSB7CisJLnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLAorCS5pb2N0bCAgICAgID0gcHBwX3N5bmNfaW9jdGwsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggMzQ0ZWYzMy4uYzA3ZGUzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC05Miw3ICs5Miw3IEBACiBzdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7Ci1zdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOwogCiAvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KIHN0YXRpYyBpbnQgcHBwb2VfbmV0X2lkIF9fcmVhZF9tb3N0bHk7CkBAIC05NjMsNyArOTYzLDcgQEAKIAlyZXR1cm4gX19wcHBvZV94bWl0KHNrLCBza2IpOwogfQogCi1zdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IDM1NTQwNDEuLjA3OGJiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMzIxOSwxMSArMzIxOSw4IEBACiAKIAlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJnBkZXYtPmRldiwgdHAtPmZlYXR1cmVzICYgUlRMX0ZFQVRVUkVfV09MKTsKIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKSB7Ci0JCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmcGRldi0+ZGV2KTsKLQkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCiBvdXQ6CiAJcmV0dXJuIHJjOwpAQCAtMzI0NiwxNyArMzI0MywxMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKLQogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCi0JaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpIHsKLQkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwotCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7Ci0JfQotCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CiAKIAkvKiByZXN0b3JlIG9yaWdpbmFsIE1BQyBhZGRyZXNzICovCiAJcnRsX3Jhcl9zZXQodHAsIGRldi0+cGVybV9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCAzYjAzNzk0Li43ZjYyZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0xNDU3LDcgKzE0NTcsNiBAQAogCQlzcGluX2xvY2tfaXJxKCZkZXYtPnR4cS5sb2NrKTsKIAkJd2hpbGUgKChyZXMgPSB1c2JfZ2V0X2Zyb21fYW5jaG9yKCZkZXYtPmRlZmVycmVkKSkpIHsKIAotCQkJcHJpbnRrKEtFUk5fSU5GTyIlcyBoYXMgZGVsYXllZCBkYXRhXG4iLCBfX2Z1bmNfXyk7CiAJCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKilyZXMtPmNvbnRleHQ7CiAJCQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihyZXMsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHJldHZhbCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggNDJkZmZkMy4uZmQ2OTA5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTI3NjMsMTIgKzI3NjMsMTIgQEAKIAogCXZwdHItPmRldiA9IGRldjsKIAotCWRldi0+aXJxID0gcGRldi0+aXJxOwotCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCisJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CisKIAlyZXQgPSB2ZWxvY2l0eV9nZXRfcGNpX2luZm8odnB0ciwgcGRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJLyogZXJyb3IgbWVzc2FnZSBhbHJlYWR5IHByaW50ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwppbmRleCBiYjZiNjdmLi40NTk4ZTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCkBAIC03MDUsNiArNzA1LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiA9IHZpLT52ZGV2OworCisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIEtCVUlMRF9NT0ROQU1FLCBBUlJBWV9TSVpFKGRydmluZm8tPmRyaXZlcikpOworCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgIk4vQSIsIEFSUkFZX1NJWkUoZHJ2aW5mby0+dmVyc2lvbikpOworCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIEFSUkFZX1NJWkUoZHJ2aW5mby0+ZndfdmVyc2lvbikpOworCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZ2ZGV2LT5kZXYpLAorCQlBUlJBWV9TSVpFKGRydmluZm8tPmJ1c19pbmZvKSk7Cit9CisKIHN0YXRpYyBpbnQgdmlydG5ldF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MTcsNiArODMwLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2aXJ0bmV0X2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IHZpcnRuZXRfZ2V0X2RydmluZm8sCiAJLnNldF90eF9jc3VtID0gdmlydG5ldF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwppbmRleCA4OGUzNjMwLi42YzU3MWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKQEAgLTM5Niw3ICszOTYsNyBAQAogCW1zZy5jbWQgPSBQT1JUX0NPTkZJR19XUklURTsKIAltc2cuaHNzX3BvcnQgPSBwb3J0LT5pZDsKIAltc2cuaW5kZXggPSBIU1NfQ09ORklHX1RYX1BDUjsKLQltc2cuZGF0YTMyID0gUENSX0ZSTV9TWU5DX09VVFBVVF9SSVNJTkcgfCBQQ1JfTVNCX0VORElBTiB8CisJbXNnLmRhdGEzMiA9IFBDUl9GUk1fUFVMU0VfRElTQUJMRUQgfCBQQ1JfTVNCX0VORElBTiB8CiAJCVBDUl9UWF9EQVRBX0VOQUJMRSB8IFBDUl9TT0ZfTk9fRkJJVDsKIAlpZiAocG9ydC0+Y2xvY2tfdHlwZSA9PSBDTE9DS19JTlQpCiAJCW1zZy5kYXRhMzIgfD0gUENSX1NZTkNfQ0xLX0RJUl9PVVRQVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggMzNiZGM2YS4uOWExMjFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTU1LDggKzE1NCw2IEBACiAJCQkJdW5zaWduZWQgaW50IHZjYywKIAkJCQl2b2lkICpwcml2X2RhdGEpCiB7Ci0Jd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7Ci0KIAlpZiAoY2ZnLT5pbmRleCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTc2LDUyICsxNzMsMjUgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAl9CiAKIAkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JLyoKLQkgIE5vdyBzZXQgdXAgYSBjb21tb24gbWVtb3J5IHdpbmRvdywgaWYgbmVlZGVkLiAgVGhlcmUgaXMgcm9vbQotCSAgaW4gdGhlIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSBmb3Igb25lIG1lbW9yeSB3aW5kb3cgaGFuZGxlLAotCSAgYnV0IGlmIHRoZSBiYXNlIGFkZHJlc3NlcyBuZWVkIHRvIGJlIHNhdmVkLCBvciBpZiBtdWx0aXBsZQotCSAgd2luZG93cyBhcmUgbmVlZGVkLCB0aGUgaW5mbyBzaG91bGQgZ28gaW4gdGhlIHByaXZhdGUgZGF0YQotCSAgc3RydWN0dXJlIGZvciB0aGlzIGRldmljZS4KLQotCSAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgd2luZG93IGJhc2UgaXMgYSBwaHlzaWNhbCBhZGRyZXNzLCBhbmQKLQkgIG5lZWRzIHRvIGJlIG1hcHBlZCB0byB2aXJ0dWFsIHNwYWNlIHdpdGggaW9yZW1hcCgpIGJlZm9yZSBpdAotCSAgaXMgdXNlZC4KLQkqLwotCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7Ci0JCWNpc3RwbF9tZW1fdCAqbWVtID0gKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKLQkJbWVtcmVxX3QgbWFwOwotCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNnxXSU5fTUVNT1JZX1RZUEVfQ007Ci0JCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCQltYXAuUGFnZSA9IDA7Ci0JCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KIAkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzAsMTcgKzIwMCwxMiBAQAogc3RhdGljIGludCBhaXJvX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKIAlsb2NhbF9pbmZvX3QgKmRldjsKLQl3aW5fcmVxX3QgKnJlcTsKIAlpbnQgcmV0OwogCiAJZGV2ID0gbGluay0+cHJpdjsKIAogCWRldl9kYmcoJmxpbmstPmRldiwgImFpcm9fY29uZmlnXG4iKTsKIAotCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKHdpbl9yZXFfdCksIEdGUF9LRVJORUwpOwotCWlmICghcmVxKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCS8qCiAJICogSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUKIAkgKiBlbnRyaWVzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQKQEAgLTI1NSw3ICsyMjAsNyBAQAogCSAqIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluCiAJICogaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgogCSAqLwotCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBhaXJvX2NzX2NvbmZpZ19jaGVjaywgcmVxKTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgYWlyb19jc19jb25maWdfY2hlY2ssIE5VTEwpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCkBAIC0yNzIsNyArMjM3LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CiAJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycSwKLQkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZsaW5rLT5kZXYpOworCQkJICAgICAgIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgMSwgJmxpbmstPmRldik7CiAJaWYgKCEoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2KQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMjgyLDIyICsyNDcsMTUgQEAKIAlpZiAobGluay0+Y29uZi5WcHApCiAJCXByaW50aygiLCBWcHAgJWQuJWQiLCBsaW5rLT5jb25mLlZwcC8xMCwgbGluay0+Y29uZi5WcHAlMTApOwogCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwotCWlmIChsaW5rLT53aW4pCi0JCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLT5CYXNlLAotCQkgICAgICAgcmVxLT5CYXNlK3JlcS0+U2l6ZS0xKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJcHJpbnRrKCJcbiIpOwotCWtmcmVlKHJlcSk7CiAJcmV0dXJuIDA7CiAKICBmYWlsZWQ6CiAJYWlyb19yZWxlYXNlKGxpbmspOwotCWtmcmVlKHJlcSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIGFpcm9fY29uZmlnICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfY2FsaWIuYwppbmRleCBkYWJhZmI4Li5mZTc0MThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2NhbGliLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9jYWxpYi5jCkBAIC02Myw2ICs2Myw3IEBACiAJCQkJICAgICAgdTggcnhjaGFpbm1hc2ssCiAJCQkJICAgICAgc3RydWN0IGF0aDlrX2NhbF9saXN0ICpjdXJyQ2FsKQogeworCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSA9IGFoLT5jYWxkYXRhOwogCWJvb2wgaXNjYWxkb25lID0gZmFsc2U7CiAKIAlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcpIHsKQEAgLTgxLDE0ICs4MiwxNCBAQAogCQkJCX0KIAogCQkJCWN1cnJDYWwtPmNhbERhdGEtPmNhbFBvc3RQcm9jKGFoLCBudW1DaGFpbnMpOwotCQkJCWljaGFuLT5DYWxWYWxpZCB8PSBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlOworCQkJCWNhbGRhdGEtPkNhbFZhbGlkIHw9IGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CiAJCQkJY3VyckNhbC0+Y2FsU3RhdGUgPSBDQUxfRE9ORTsKIAkJCQlpc2NhbGRvbmUgPSB0cnVlOwogCQkJfSBlbHNlIHsKIAkJCQlhcjkwMDJfaHdfc2V0dXBfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwogCQkJfQogCQl9Ci0JfSBlbHNlIGlmICghKGljaGFuLT5DYWxWYWxpZCAmIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKSB7CisJfSBlbHNlIGlmICghKGNhbGRhdGEtPkNhbFZhbGlkICYgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpIHsKIAkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwogCX0KIApAQCAtNjg2LDggKzY4NywxMyBAQAogewogCWJvb2wgaXNjYWxkb25lID0gdHJ1ZTsKIAlzdHJ1Y3QgYXRoOWtfY2FsX2xpc3QgKmN1cnJDYWwgPSBhaC0+Y2FsX2xpc3RfY3VycjsKKwlib29sIG5mY2FsLCBuZmNhbF9wZW5kaW5nID0gZmFsc2U7CiAKLQlpZiAoY3VyckNhbCAmJgorCW5mY2FsID0gISEoUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgJiBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOworCWlmIChhaC0+Y2FsZGF0YSkKKwkJbmZjYWxfcGVuZGluZyA9IGFoLT5jYWxkYXRhLT5uZmNhbF9wZW5kaW5nOworCisJaWYgKGN1cnJDYWwgJiYgIW5mY2FsICYmCiAJICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAogCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7CiAJCWlzY2FsZG9uZSA9IGFyOTAwMl9od19wZXJfY2FsaWJyYXRpb24oYWgsIGNoYW4sCkBAIC03MDMsNyArNzA5LDcgQEAKIAl9CiAKIAkvKiBEbyBORiBjYWwgb25seSBhdCBsb25nZXIgaW50ZXJ2YWxzICovCi0JaWYgKGxvbmdjYWwpIHsKKwlpZiAobG9uZ2NhbCB8fCBuZmNhbF9wZW5kaW5nKSB7CiAJCS8qIERvIHBlcmlvZGljIFBBT2Zmc2V0IENhbCAqLwogCQlhcjkwMDJfaHdfcGFfY2FsKGFoLCBmYWxzZSk7CiAJCWFyOTAwMl9od19vbGNfdGVtcF9jb21wZW5zYXRpb24oYWgpOwpAQCAtNzEyLDE2ICs3MTgsMTggQEAKIAkJICogR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBORiBjYWwgYW5kIHVwZGF0ZQogCQkgKiBoaXN0b3J5IGJ1ZmZlci4KIAkJICovCi0JCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKwkJaWYgKGF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKSkgeworCQkJLyoKKwkJCSAqIExvYWQgdGhlIE5GIGZyb20gaGlzdG9yeSBidWZmZXIgb2YgdGhlIGN1cnJlbnQKKwkJCSAqIGNoYW5uZWwuCisJCQkgKiBORiBpcyBzbG93IHRpbWUtdmFyaWFudCwgc28gaXQgaXMgT0sgdG8gdXNlIGEKKwkJCSAqIGhpc3RvcmljYWwgdmFsdWUuCisJCQkgKi8KKwkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOworCQl9CiAKLQkJLyoKLQkJICogTG9hZCB0aGUgTkYgZnJvbSBoaXN0b3J5IGJ1ZmZlciBvZiB0aGUgY3VycmVudCBjaGFubmVsLgotCQkgKiBORiBpcyBzbG93IHRpbWUtdmFyaWFudCwgc28gaXQgaXMgT0sgdG8gdXNlIGEgaGlzdG9yaWNhbAotCQkgKiB2YWx1ZS4KLQkJICovCi0JCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwotCi0JCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKwkJaWYgKGxvbmdjYWwpCisJCQlhdGg5a19od19zdGFydF9uZmNhbChhaCwgZmFsc2UpOwogCX0KIAogCXJldHVybiBpc2NhbGRvbmU7CkBAIC04NjksOCArODc3LDEwIEBACiAJYXI5MDAyX2h3X3BhX2NhbChhaCwgdHJ1ZSk7CiAKIAkvKiBEbyBORiBDYWxpYnJhdGlvbiBhZnRlciBEQyBvZmZzZXQgYW5kIG90aGVyIGNhbGlicmF0aW9ucyAqLwotCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwgQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKKwlhdGg5a19od19zdGFydF9uZmNhbChhaCwgdHJ1ZSk7CisKKwlpZiAoYWgtPmNhbGRhdGEpCisJCWFoLT5jYWxkYXRhLT5uZmNhbF9wZW5kaW5nID0gdHJ1ZTsKIAogCWFoLT5jYWxfbGlzdCA9IGFoLT5jYWxfbGlzdF9sYXN0ID0gYWgtPmNhbF9saXN0X2N1cnIgPSBOVUxMOwogCkBAIC05MDEsNyArOTExLDggQEAKIAkJCWF0aDlrX2h3X3Jlc2V0X2NhbGlicmF0aW9uKGFoLCBhaC0+Y2FsX2xpc3RfY3Vycik7CiAJfQogCi0JY2hhbi0+Q2FsVmFsaWQgPSAwOworCWlmIChhaC0+Y2FsZGF0YSkKKwkJYWgtPmNhbGRhdGEtPkNhbFZhbGlkID0gMDsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCmluZGV4IDVhMDY1MDMuLjQ2NzRlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2NhbGliLmMKQEAgLTY4LDYgKzY4LDcgQEAKIAkJCQkgICAgICB1OCByeGNoYWlubWFzaywKIAkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2FsX2xpc3QgKmN1cnJDYWwpCiB7CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhID0gYWgtPmNhbGRhdGE7CiAJLyogQ2FsIGlzIGFzc3VtZWQgbm90IGRvbmUgdW50aWwgZXhwbGljaXRseSBzZXQgYmVsb3cgKi8KIAlib29sIGlzY2FsZG9uZSA9IGZhbHNlOwogCkBAIC05NSw3ICs5Niw3IEBACiAJCQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsUG9zdFByb2MoYWgsIG51bUNoYWlucyk7CiAKIAkJCQkvKiBDYWxpYnJhdGlvbiBoYXMgZmluaXNoZWQuICovCi0JCQkJaWNoYW4tPkNhbFZhbGlkIHw9IGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CisJCQkJY2FsZGF0YS0+Q2FsVmFsaWQgfD0gY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKIAkJCQljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9ET05FOwogCQkJCWlzY2FsZG9uZSA9IHRydWU7CiAJCQl9IGVsc2UgewpAQCAtMTA2LDcgKzEwNyw3IEBACiAJCQlhcjkwMDNfaHdfc2V0dXBfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwogCQkJfQogCQl9Ci0JfSBlbHNlIGlmICghKGljaGFuLT5DYWxWYWxpZCAmIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKSB7CisJfSBlbHNlIGlmICghKGNhbGRhdGEtPkNhbFZhbGlkICYgY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSkpIHsKIAkJLyogSWYgY3VycmVudCBjYWwgaXMgbWFya2VkIGludmFsaWQgaW4gY2hhbm5lbCwga2ljayBpdCBvZmYgKi8KIAkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwogCX0KQEAgLTE0OSw2ICsxNTAsMTIgQEAKIAkvKiBEbyBORiBjYWwgb25seSBhdCBsb25nZXIgaW50ZXJ2YWxzICovCiAJaWYgKGxvbmdjYWwpIHsKIAkJLyoKKwkJICogR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBwcmV2aW91cyBORiBjYWwgYW5kIHVwZGF0ZQorCQkgKiBoaXN0b3J5IGJ1ZmZlci4KKwkJICovCisJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKworCQkvKgogCQkgKiBMb2FkIHRoZSBORiBmcm9tIGhpc3RvcnkgYnVmZmVyIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwuCiAJCSAqIE5GIGlzIHNsb3cgdGltZS12YXJpYW50LCBzbyBpdCBpcyBPSyB0byB1c2UgYSBoaXN0b3JpY2FsCiAJCSAqIHZhbHVlLgpAQCAtMTU2LDcgKzE2Myw3IEBACiAJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmN1cmNoYW4pOwogCiAJCS8qIHN0YXJ0IE5GIGNhbGlicmF0aW9uLCB3aXRob3V0IHVwZGF0aW5nIEJCIE5GIHJlZ2lzdGVyICovCi0JCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKwkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgsIGZhbHNlKTsKIAl9CiAKIAlyZXR1cm4gaXNjYWxkb25lOwpAQCAtNzYyLDYgKzc2OSw4IEBACiAJLyogUmV2ZXJ0IGNoYWlubWFza3MgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSBORiBjYWwgKi8KIAlhcjkwMDNfaHdfc2V0X2NoYWluX21hc2tzKGFoLCBhaC0+cnhjaGFpbm1hc2ssIGFoLT50eGNoYWlubWFzayk7CiAKKwlhdGg5a19od19zdGFydF9uZmNhbChhaCwgdHJ1ZSk7CisKIAkvKiBJbml0aWFsaXplIGxpc3QgcG9pbnRlcnMgKi8KIAlhaC0+Y2FsX2xpc3QgPSBhaC0+Y2FsX2xpc3RfbGFzdCA9IGFoLT5jYWxfbGlzdF9jdXJyID0gTlVMTDsKIApAQCAtNzg1LDcgKzc5NCw4IEBACiAJaWYgKGFoLT5jYWxfbGlzdF9jdXJyKQogCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWgtPmNhbF9saXN0X2N1cnIpOwogCi0JY2hhbi0+Q2FsVmFsaWQgPSAwOworCWlmIChhaC0+Y2FsZGF0YSkKKwkJYWgtPmNhbGRhdGEtPkNhbFZhbGlkID0gMDsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKaW5kZXggYWNlOGQyNi4uYjg4M2IxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCkBAIC00MSw2ICs0MSwyMCBAQAogI2RlZmluZSBMRTE2KHgpIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoeCkKICNkZWZpbmUgTEUzMih4KSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpCiAKKy8qIExvY2FsIGRlZmluZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBleHRlbnNpb24gYW5kIGNvbnRyb2wgQ1RMJ3MgKi8KKyNkZWZpbmUgRVhUX0FERElUSVZFICgweDgwMDApCisjZGVmaW5lIENUTF8xMUFfRVhUIChDVExfMTFBIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFHX0VYVCAoQ1RMXzExRyB8IEVYVF9BRERJVElWRSkKKyNkZWZpbmUgQ1RMXzExQl9FWFQgKENUTF8xMUIgfCBFWFRfQURESVRJVkUpCisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICA5ICAvKiAxMCpsb2cxMCgzKSoyICovCisjZGVmaW5lIFBXUklOQ1JfM19UT18xX0NIQUlOICAgICAgOSAgICAgICAgICAgICAvKiAxMCpsb2coMykqMiAqLworI2RlZmluZSBQV1JJTkNSXzNfVE9fMl9DSEFJTiAgICAgIDMgICAgICAgICAgICAgLyogZmxvb3IoMTAqbG9nKDMvMikqMikgKi8KKyNkZWZpbmUgUFdSSU5DUl8yX1RPXzFfQ0hBSU4gICAgICA2ICAgICAgICAgICAgIC8qIDEwKmxvZygyKSoyICovCisKKyNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDAgMiAgICAvKiBleGNsdWRpbmcgSFQ0MCwgRVhULU9GRE0gKi8KKyNkZWZpbmUgU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDAgMyAgICAvKiBleGNsdWRpbmcgSFQ0MCwgRVhULU9GRE0sIEVYVC1DQ0sgKi8KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkzMDBfZWVwcm9tIGFyOTMwMF9kZWZhdWx0ID0gewogCS5lZXByb21WZXJzaW9uID0gMiwKIAkudGVtcGxhdGVWZXJzaW9uID0gMiwKQEAgLTYwOSw2ICs2MjMsMTQgQEAKIAkgfQogfTsKIAorc3RhdGljIHUxNiBhdGg5a19od19mYmluMmZyZXEodTggZmJpbiwgYm9vbCBpczJHSHopCit7CisJaWYgKGZiaW4gPT0gQVI5MzAwX0JDSEFOX1VOVVNFRCkKKwkJcmV0dXJuIGZiaW47CisKKwlyZXR1cm4gKHUxNikgKChpczJHSHopID8gKDIzMDAgKyBmYmluKSA6ICg0ODAwICsgNSAqIGZiaW4pKTsKK30KKwogc3RhdGljIGludCBhdGg5a19od19hcjkzMDBfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXJldHVybiAwOwpAQCAtMTQxNyw5ICsxNDM5LDkgQEAKICN1bmRlZiBQT1dfU00KIH0KIAotc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF90YXJnZXRfcG93ZXJfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZnJlcSkKK3N0YXRpYyB2b2lkIGFyOTAwM19od19zZXRfdGFyZ2V0X3Bvd2VyX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGZyZXEsCisJCQkJCSAgICAgIHU4ICp0YXJnZXRQb3dlclZhbFQyKQogewotCXU4IHRhcmdldFBvd2VyVmFsVDJbYXI5MzAwUmF0ZVNpemVdOwogCS8qIFhYWDogaGFyZCBjb2RlIGZvciBub3csIG5lZWQgdG8gZ2V0IGZyb20gZWVwcm9tIHN0cnVjdCAqLwogCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMDsKIAlib29sIGlzMkdIeiA9IGZhbHNlOwpAQCAtMTU1Myw5ICsxNTc1LDYgQEAKIAkJCSAgIlRQQ1slMDJkXSAweCUwOHhcbiIsIGksIHRhcmdldFBvd2VyVmFsVDJbaV0pOwogCQlpKys7CiAJfQotCi0JLyogV3JpdGUgdGFyZ2V0IHBvd2VyIGFycmF5IHRvIHJlZ2lzdGVycyAqLwotCWFyOTAwM19od190eF9wb3dlcl9yZWd3cml0ZShhaCwgdGFyZ2V0UG93ZXJWYWxUMik7CiB9CiAKIHN0YXRpYyBpbnQgYXI5MDAzX2h3X2NhbF9waWVyX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwKQEAgLTE3OTksMTQgKzE4MTgsMzY5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MTYgYXI5MDAzX2h3X2dldF9kaXJlY3RfZWRnZV9wb3dlcihzdHJ1Y3QgYXI5MzAwX2VlcHJvbSAqZWVwLAorCQkJCQkgICBpbnQgaWR4LAorCQkJCQkgICBpbnQgZWRnZSwKKwkJCQkJICAgYm9vbCBpczJHSHopCit7CisJc3RydWN0IGNhbF9jdGxfZGF0YV8yZyAqY3RsXzJnID0gZWVwLT5jdGxQb3dlckRhdGFfMkc7CisJc3RydWN0IGNhbF9jdGxfZGF0YV81ZyAqY3RsXzVnID0gZWVwLT5jdGxQb3dlckRhdGFfNUc7CisKKwlpZiAoaXMyR0h6KQorCQlyZXR1cm4gY3RsXzJnW2lkeF0uY3RsRWRnZXNbZWRnZV0udFBvd2VyOworCWVsc2UKKwkJcmV0dXJuIGN0bF81Z1tpZHhdLmN0bEVkZ2VzW2VkZ2VdLnRQb3dlcjsKK30KKworc3RhdGljIHUxNiBhcjkwMDNfaHdfZ2V0X2luZGlyZWN0X2VkZ2VfcG93ZXIoc3RydWN0IGFyOTMwMF9lZXByb20gKmVlcCwKKwkJCQkJICAgICBpbnQgaWR4LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBlZGdlLAorCQkJCQkgICAgIHUxNiBmcmVxLAorCQkJCQkgICAgIGJvb2wgaXMyR0h6KQoreworCXN0cnVjdCBjYWxfY3RsX2RhdGFfMmcgKmN0bF8yZyA9IGVlcC0+Y3RsUG93ZXJEYXRhXzJHOworCXN0cnVjdCBjYWxfY3RsX2RhdGFfNWcgKmN0bF81ZyA9IGVlcC0+Y3RsUG93ZXJEYXRhXzVHOworCisJdTggKmN0bF9mcmVxYmluID0gaXMyR0h6ID8KKwkJJmVlcC0+Y3RsX2ZyZXFiaW5fMkdbaWR4XVswXSA6CisJCSZlZXAtPmN0bF9mcmVxYmluXzVHW2lkeF1bMF07CisKKwlpZiAoaXMyR0h6KSB7CisJCWlmIChhdGg5a19od19mYmluMmZyZXEoY3RsX2ZyZXFiaW5bZWRnZSAtIDFdLCAxKSA8IGZyZXEgJiYKKwkJICAgIGN0bF8yZ1tpZHhdLmN0bEVkZ2VzW2VkZ2UgLSAxXS5mbGFnKQorCQkJcmV0dXJuIGN0bF8yZ1tpZHhdLmN0bEVkZ2VzW2VkZ2UgLSAxXS50UG93ZXI7CisJfSBlbHNlIHsKKwkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShjdGxfZnJlcWJpbltlZGdlIC0gMV0sIDApIDwgZnJlcSAmJgorCQkgICAgY3RsXzVnW2lkeF0uY3RsRWRnZXNbZWRnZSAtIDFdLmZsYWcpCisJCQlyZXR1cm4gY3RsXzVnW2lkeF0uY3RsRWRnZXNbZWRnZSAtIDFdLnRQb3dlcjsKKwl9CisKKwlyZXR1cm4gQVI5MzAwX01BWF9SQVRFX1BPV0VSOworfQorCisvKgorICogRmluZCB0aGUgbWF4aW11bSBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0IGZvciB0aGUgZ2l2ZW4gY2hhbm5lbCBhbmQgQ1RMIGluZm8KKyAqLworc3RhdGljIHUxNiBhcjkwMDNfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHN0cnVjdCBhcjkzMDBfZWVwcm9tICplZXAsCisJCQkJCXUxNiBmcmVxLCBpbnQgaWR4LCBib29sIGlzMkdIeikKK3sKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjkzMDBfTUFYX1JBVEVfUE9XRVI7CisJdTggKmN0bF9mcmVxYmluID0gaXMyR0h6ID8KKwkJJmVlcC0+Y3RsX2ZyZXFiaW5fMkdbaWR4XVswXSA6CisJCSZlZXAtPmN0bF9mcmVxYmluXzVHW2lkeF1bMF07CisJdTE2IG51bV9lZGdlcyA9IGlzMkdIeiA/CisJCUFSOTMwMF9OVU1fQkFORF9FREdFU18yRyA6IEFSOTMwMF9OVU1fQkFORF9FREdFU181RzsKKwl1bnNpZ25lZCBpbnQgZWRnZTsKKworCS8qIEdldCB0aGUgZWRnZSBwb3dlciAqLworCWZvciAoZWRnZSA9IDA7CisJICAgICAoZWRnZSA8IG51bV9lZGdlcykgJiYgKGN0bF9mcmVxYmluW2VkZ2VdICE9IEFSOTMwMF9CQ0hBTl9VTlVTRUQpOworCSAgICAgZWRnZSsrKSB7CisJCS8qCisJCSAqIElmIHRoZXJlJ3MgYW4gZXhhY3QgY2hhbm5lbCBtYXRjaCBvciBhbiBpbmJhbmQgZmxhZyBzZXQKKwkJICogb24gdGhlIGxvd2VyIGNoYW5uZWwgdXNlIHRoZSBnaXZlbiByZEVkZ2VQb3dlcgorCQkgKi8KKwkJaWYgKGZyZXEgPT0gYXRoOWtfaHdfZmJpbjJmcmVxKGN0bF9mcmVxYmluW2VkZ2VdLCBpczJHSHopKSB7CisJCQl0d2ljZU1heEVkZ2VQb3dlciA9CisJCQkJYXI5MDAzX2h3X2dldF9kaXJlY3RfZWRnZV9wb3dlcihlZXAsIGlkeCwKKwkJCQkJCQkJZWRnZSwgaXMyR0h6KTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChlZGdlID4gMCkgJiYKKwkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKGN0bF9mcmVxYmluW2VkZ2VdLAorCQkJCQkJICAgICAgaXMyR0h6KSkpIHsKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQlhcjkwMDNfaHdfZ2V0X2luZGlyZWN0X2VkZ2VfcG93ZXIoZWVwLCBpZHgsCisJCQkJCQkJCSAgZWRnZSwgZnJlcSwKKwkJCQkJCQkJICBpczJHSHopOworCQkJLyoKKwkJCSAqIExlYXZlIGxvb3AgLSBubyBtb3JlIGFmZmVjdGluZyBlZGdlcyBwb3NzaWJsZSBpbgorCQkJICogdGhpcyBtb25vdG9uaWMgaW5jcmVhc2luZyBsaXN0CisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKK30KKworc3RhdGljIHZvaWQgYXI5MDAzX2h3X3NldF9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCQkgICAgICAgdTggKnBQd3JBcnJheSwgdTE2IGNmZ0N0bCwKKwkJCQkJICAgICAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkgICAgICAgdTE2IHBvd2VyTGltaXQpCit7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJc3RydWN0IGFyOTMwMF9lZXByb20gKnBFZXBEYXRhID0gJmFoLT5lZXByb20uYXI5MzAwX2VlcDsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjkzMDBfTUFYX1JBVEVfUE9XRVI7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPSB7CisJCTAsIDMsIDYsIDksIEFSOTMwMF9NQVhfUkFURV9QT1dFUgorCX07CisJaW50IGk7CisJaW50MTZfdCAgdHdpY2VMYXJnZXN0QW50ZW5uYTsKKwl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOworCXUxNiBjdGxNb2Rlc0ZvcjExYVtdID0geworCQlDVExfMTFBLCBDVExfNUdIVDIwLCBDVExfMTFBX0VYVCwgQ1RMXzVHSFQ0MAorCX07CisJdTE2IGN0bE1vZGVzRm9yMTFnW10gPSB7CisJCUNUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULAorCQlDVExfMTFHX0VYVCwgQ1RMXzJHSFQ0MAorCX07CisJdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCXU4ICpjdGxJbmRleDsKKwl1OCBjdGxOdW07CisJdTE2IHR3aWNlTWluRWRnZVBvd2VyOworCWJvb2wgaXMyZ2h6ID0gSVNfQ0hBTl8yR0haKGNoYW4pOworCisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJLyogQ29tcHV0ZSBUeFBvd2VyIHJlZHVjdGlvbiBkdWUgdG8gQW50ZW5uYSBHYWluICovCisJaWYgKGlzMmdoeikKKwkJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlcjJHLmFudGVubmFHYWluOworCWVsc2UKKwkJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlcjVHLmFudGVubmFHYWluOworCisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbigodHdpY2VBbnRlbm5hUmVkdWN0aW9uKSAtCisJCQkJdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwkvKgorCSAqIHNjYWxlZFBvd2VyIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSB1c2VyIGlucHV0IHBvd2VyIGxldmVsCisJICogYW5kIHRoZSByZWd1bGF0b3J5IGFsbG93ZWQgcG93ZXIgbGV2ZWwKKwkgKi8KKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisKKwlpZiAocmVndWxhdG9yeS0+dHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CisJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQorCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsocmVndWxhdG9yeS0+dHBfc2NhbGUpXSAqIDIpOworCX0KKworCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CisKKwkvKgorCSAqIFJlZHVjZSBzY2FsZWQgUG93ZXIgYnkgbnVtYmVyIG9mIGNoYWlucyBhY3RpdmUgdG8gZ2V0CisJICogdG8gcGVyIGNoYWluIHR4IHBvd2VyIGxldmVsCisJICovCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyhhaC0+dHhjaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWJyZWFrOworCX0KKworCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOworCisJLyoKKwkgKiBHZXQgdGFyZ2V0IHBvd2VycyBmcm9tIEVFUFJPTSAtIG91ciBiYXNlbGluZSBmb3IgVFggUG93ZXIKKwkgKi8KKwlpZiAoaXMyZ2h6KSB7CisJCS8qIFNldHVwIGZvciBDVEwgbW9kZXMgKi8KKwkJLyogQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCAqLworCQludW1DdGxNb2RlcyA9CisJCQlBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtCisJCQkJICAgU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7CisJCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CisJCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCQkvKiBBbGwgMkcgQ1RMJ3MgKi8KKwkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7CisJfSBlbHNlIHsKKwkJLyogU2V0dXAgZm9yIENUTCBtb2RlcyAqLworCQkvKiBDVExfMTFBLCBDVExfNUdIVDIwICovCisJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSkgLQorCQkJCQkgU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDA7CisJCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWE7CisJCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCQkvKiBBbGwgNUcgQ1RMJ3MgKi8KKwkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSk7CisJfQorCisJLyoKKwkgKiBGb3IgTUlNTywgbmVlZCB0byBhcHBseSByZWd1bGF0b3J5IGNhcHMgaW5kaXZpZHVhbGx5IGFjcm9zcworCSAqIGR5bmFtaWNhbGx5IHJ1bm5pbmcgbW9kZXM6IENDSywgT0ZETSwgSFQyMCwgSFQ0MAorCSAqCisJICogVGhlIG91dGVyIGxvb3Agd2Fsa3MgdGhyb3VnaCBlYWNoIHBvc3NpYmxlIGFwcGxpY2FibGUgcnVudGltZSBtb2RlLgorCSAqIFRoZSBpbm5lciBsb29wIHdhbGtzIHRocm91Z2ggZWFjaCBjdGxJbmRleCBlbnRyeSBpbiBFRVBST00uCisJICogVGhlIGN0bCB2YWx1ZSBpcyBlbmNvZGVkIGFzIFs3OjRdID09IHRlc3QgZ3JvdXAsIFszOjBdID09IHRlc3QgbW9kZS4KKwkgKi8KKwlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgeworCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKKwkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKKwkJaWYgKGlzSHQ0MEN0bE1vZGUpCisJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CisJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQorCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKKwkJZWxzZQorCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKKworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCisJCQkgICJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCisJCQkgICJFWFRfQURESVRJVkUgJWRcbiIsCisJCQkgIGN0bE1vZGUsIG51bUN0bE1vZGVzLCBpc0h0NDBDdGxNb2RlLAorCQkJICAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKKworCQkvKiB3YWxrIHRocm91Z2ggZWFjaCBDVEwgaW5kZXggc3RvcmVkIGluIEVFUFJPTSAqLworCQlpZiAoaXMyZ2h6KSB7CisJCQljdGxJbmRleCA9IHBFZXBEYXRhLT5jdGxJbmRleF8yRzsKKwkJCWN0bE51bSA9IEFSOTMwMF9OVU1fQ1RMU18yRzsKKwkJfSBlbHNlIHsKKwkJCWN0bEluZGV4ID0gcEVlcERhdGEtPmN0bEluZGV4XzVHOworCQkJY3RsTnVtID0gQVI5MzAwX05VTV9DVExTXzVHOworCQl9CisKKwkJZm9yIChpID0gMDsgKGkgPCBjdGxOdW0pICYmIGN0bEluZGV4W2ldOyBpKyspIHsKKwkJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUkVHVUxBVE9SWSwKKwkJCQkgICJMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgorCQkJCSAgInBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCAiCisJCQkJICAiY2hhbiAlZG4iLAorCQkJCSAgaSwgY2ZnQ3RsLCBwQ3RsTW9kZVtjdGxNb2RlXSwgY3RsSW5kZXhbaV0sCisJCQkJICBjaGFuLT5jaGFubmVsKTsKKworCQkJCS8qCisJCQkJICogY29tcGFyZSB0ZXN0IGdyb3VwIGZyb20gcmVndWxhdG9yeQorCQkJCSAqIGNoYW5uZWwgbGlzdCB3aXRoIHRlc3QgbW9kZSBmcm9tIHBDdGxNb2RlCisJCQkJICogbGlzdAorCQkJCSAqLworCQkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJCSAgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCQkJY3RsSW5kZXhbaV0pIHx8CisJCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkJICAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQorCQkJCSAgICAgKChjdGxJbmRleFtpXSAmIENUTF9NT0RFX00pIHwKKwkJCQkgICAgICAgU0RfTk9fQ1RMKSkpIHsKKwkJCQkJdHdpY2VNaW5FZGdlUG93ZXIgPQorCQkJCQkgIGFyOTAwM19od19nZXRfbWF4X2VkZ2VfcG93ZXIocEVlcERhdGEsCisJCQkJCQkJCSAgICAgICBmcmVxLCBpLAorCQkJCQkJCQkgICAgICAgaXMyZ2h6KTsKKworCQkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpCisJCQkJCQkvKgorCQkJCQkJICogRmluZCB0aGUgbWluaW11bSBvZiBhbGwgQ1RMCisJCQkJCQkgKiBlZGdlIHBvd2VycyB0aGF0IGFwcGx5IHRvCisJCQkJCQkgKiB0aGlzIGNoYW5uZWwKKwkJCQkJCSAqLworCQkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQorCQkJCQkJCW1pbih0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCQkJZWxzZSB7CisJCQkJCQkJLyogc3BlY2lmaWMgKi8KKwkJCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9CisJCQkJCQkJICB0d2ljZU1pbkVkZ2VQb3dlcjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOworCisJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1JFR1VMQVRPUlksCisJCQkJICAiU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkIDJ4TWF4RWRnZSAlZCAiCisJCQkJICAic1AgJWQgbWluQ3RsUHdyICVkXG4iLAorCQkJCSAgY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAorCQkJCSAgc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKKworCQkJLyogQXBwbHkgY3RsIG1vZGUgdG8gY29ycmVjdCB0YXJnZXQgcG93ZXIgc2V0ICovCisJCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCQljYXNlIENUTF8xMUI6CisJCQkJZm9yIChpID0gQUxMX1RBUkdFVF9MRUdBQ1lfMUxfNUw7CisJCQkJICAgICBpIDw9IEFMTF9UQVJHRVRfTEVHQUNZXzExUzsgaSsrKQorCQkJCQlwUHdyQXJyYXlbaV0gPQorCQkJCQkgICh1OCltaW4oKHUxNilwUHdyQXJyYXlbaV0sCisJCQkJCQkgIG1pbkN0bFBvd2VyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1RMXzExQToKKwkJCWNhc2UgQ1RMXzExRzoKKwkJCQlmb3IgKGkgPSBBTExfVEFSR0VUX0xFR0FDWV82XzI0OworCQkJCSAgICAgaSA8PSBBTExfVEFSR0VUX0xFR0FDWV81NDsgaSsrKQorCQkJCQlwUHdyQXJyYXlbaV0gPQorCQkJCQkgICh1OCltaW4oKHUxNilwUHdyQXJyYXlbaV0sCisJCQkJCQkgIG1pbkN0bFBvd2VyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1RMXzVHSFQyMDoKKwkJCWNhc2UgQ1RMXzJHSFQyMDoKKwkJCQlmb3IgKGkgPSBBTExfVEFSR0VUX0hUMjBfMF84XzE2OworCQkJCSAgICAgaSA8PSBBTExfVEFSR0VUX0hUMjBfMjE7IGkrKykKKwkJCQkJcFB3ckFycmF5W2ldID0KKwkJCQkJICAodTgpbWluKCh1MTYpcFB3ckFycmF5W2ldLAorCQkJCQkJICBtaW5DdGxQb3dlcik7CisJCQkJcFB3ckFycmF5W0FMTF9UQVJHRVRfSFQyMF8yMl0gPQorCQkJCSAgKHU4KW1pbigodTE2KXBQd3JBcnJheVtBTExfVEFSR0VUX0hUMjBfMjJdLAorCQkJCQkgIG1pbkN0bFBvd2VyKTsKKwkJCQlwUHdyQXJyYXlbQUxMX1RBUkdFVF9IVDIwXzIzXSA9CisJCQkJICAodTgpbWluKCh1MTYpcFB3ckFycmF5W0FMTF9UQVJHRVRfSFQyMF8yM10sCisJCQkJCSAgIG1pbkN0bFBvd2VyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1RMXzVHSFQ0MDoKKwkJCWNhc2UgQ1RMXzJHSFQ0MDoKKwkJCQlmb3IgKGkgPSBBTExfVEFSR0VUX0hUNDBfMF84XzE2OworCQkJCSAgICAgaSA8PSBBTExfVEFSR0VUX0hUNDBfMjM7IGkrKykKKwkJCQkJcFB3ckFycmF5W2ldID0KKwkJCQkJICAodTgpbWluKCh1MTYpcFB3ckFycmF5W2ldLAorCQkJCQkJICBtaW5DdGxQb3dlcik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJICAgIGJyZWFrOworCQkJfQorCX0gLyogZW5kIGN0bCBtb2RlIGNoZWNraW5nICovCit9CisKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2FyOTMwMF9zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIHUxNiBjZmdDdGwsCiAJCQkJCXU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKIAkJCQkJdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCiAJCQkJCXU4IHBvd2VyTGltaXQpCiB7Ci0JYWgtPnR4cG93ZXJfbGltaXQgPSBwb3dlckxpbWl0OwotCWFyOTAwM19od19zZXRfdGFyZ2V0X3Bvd2VyX2VlcHJvbShhaCwgY2hhbi0+Y2hhbm5lbCk7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJdTggdGFyZ2V0UG93ZXJWYWxUMlthcjkzMDBSYXRlU2l6ZV07CisJdW5zaWduZWQgaW50IGkgPSAwOworCisJYXI5MDAzX2h3X3NldF90YXJnZXRfcG93ZXJfZWVwcm9tKGFoLCBjaGFuLT5jaGFubmVsLCB0YXJnZXRQb3dlclZhbFQyKTsKKwlhcjkwMDNfaHdfc2V0X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkgICB0YXJnZXRQb3dlclZhbFQyLCBjZmdDdGwsCisJCQkJCSAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJCSAgIHBvd2VyTGltaXQpOworCisJd2hpbGUgKGkgPCBhcjkzMDBSYXRlU2l6ZSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSAgIlRQQ1slMDJkXSAweCUwOHggIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7CisJCWkrKzsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19FRVBST00sCisJCQkgICJUUENbJTAyZF0gMHglMDh4ICIsIGksIHRhcmdldFBvd2VyVmFsVDJbaV0pOworCQlpKys7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRUVQUk9NLAorCQkJICAiVFBDWyUwMmRdIDB4JTA4eCAiLCBpLCB0YXJnZXRQb3dlclZhbFQyW2ldKTsKKwkJaSsrOworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0VFUFJPTSwKKwkJCSAgIlRQQ1slMDJkXSAweCUwOHhcblxuIiwgaSwgdGFyZ2V0UG93ZXJWYWxUMltpXSk7CisJCWkrKzsKKwl9CisKKwkvKiBXcml0ZSB0YXJnZXQgcG93ZXIgYXJyYXkgdG8gcmVnaXN0ZXJzICovCisJYXI5MDAzX2h3X3R4X3Bvd2VyX3JlZ3dyaXRlKGFoLCB0YXJnZXRQb3dlclZhbFQyKTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgVFggcG93ZXIgd2Ugc2VuZCBiYWNrIHRvIGRyaXZlciBjb3JlLAorCSAqIGFuZCBpdCBjYW4gdXNlIHRvIHBhc3MgdG8gdXNlcnNwYWNlIHRvIGRpc3BsYXkgb3VyCisJICogY3VycmVudGx5IGNvbmZpZ3VyZWQgVFggcG93ZXIgc2V0dGluZy4KKwkgKgorCSAqIFNpbmNlIHBvd2VyIGlzIHJhdGUgZGVwZW5kZW50LCB1c2Ugb25lIG9mIHRoZSBpbmRpY2VzCisJICogZnJvbSB0aGUgQVI5MzAwX1JhdGVzIGVudW0gdG8gc2VsZWN0IGFuIGVudHJ5IGZyb20KKwkgKiB0YXJnZXRQb3dlclZhbFQyW10gdG8gcmVwb3J0LiBDdXJyZW50bHkgcmV0dXJucyB0aGUKKwkgKiBwb3dlciBmb3IgSFQ0MCBNQ1MgMCwgSFQyMCBNQ1MgMCwgb3IgT0ZETSA2IE1icHMKKwkgKiBhcyBDQ0sgcG93ZXIgaXMgbGVzcyBpbnRlcmVzdGluZyAoPykuCisJICovCisJaSA9IEFMTF9UQVJHRVRfTEVHQUNZXzZfMjQ7IC8qIGxlZ2FjeSAqLworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCWkgPSBBTExfVEFSR0VUX0hUNDBfMF84XzE2OyAvKiBodDQwICovCisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gQUxMX1RBUkdFVF9IVDIwXzBfOF8xNjsgLyogaHQyMCAqLworCisJYWgtPnR4cG93ZXJfbGltaXQgPSB0YXJnZXRQb3dlclZhbFQyW2ldOworCiAJYXI5MDAzX2h3X2NhbGlicmF0aW9uX2FwcGx5KGFoLCBjaGFuLT5jaGFubmVsKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19wYXByZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19wYXByZC5jCmluZGV4IDQ5ZTBjODYuLjdjMzgyMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGFwcmQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BhcHJkLmMKQEAgLTU3NywxMCArNTc3LDExIEBACiB9CiAKIHZvaWQgYXI5MDAzX3BhcHJkX3BvcHVsYXRlX3NpbmdsZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIGludCBjaGFpbikKKwkJCQkJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhLAorCQkJCQlpbnQgY2hhaW4pCiB7Ci0JdTMyICpwYXByZF90YWJsZV92YWwgPSBjaGFuLT5wYV90YWJsZVtjaGFpbl07Ci0JdTMyIHNtYWxsX3NpZ25hbF9nYWluID0gY2hhbi0+c21hbGxfc2lnbmFsX2dhaW5bY2hhaW5dOworCXUzMiAqcGFwcmRfdGFibGVfdmFsID0gY2FsZGF0YS0+cGFfdGFibGVbY2hhaW5dOworCXUzMiBzbWFsbF9zaWduYWxfZ2FpbiA9IGNhbGRhdGEtPnNtYWxsX3NpZ25hbF9nYWluW2NoYWluXTsKIAl1MzIgdHJhaW5pbmdfcG93ZXI7CiAJdTMyIHJlZyA9IDA7CiAJaW50IGk7CkBAIC02NTQsMTcgKzY1NSwxNyBAQAogfQogRVhQT1JUX1NZTUJPTChhcjkwMDNfcGFwcmRfc2V0dXBfZ2Fpbl90YWJsZSk7CiAKLWludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgIGludCBjaGFpbikKK2ludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhLCBpbnQgY2hhaW4pCiB7Ci0JdTE2ICpzbWFsbF9zaWduYWxfZ2FpbiA9ICZjaGFuLT5zbWFsbF9zaWduYWxfZ2FpbltjaGFpbl07Ci0JdTMyICpwYV90YWJsZSA9IGNoYW4tPnBhX3RhYmxlW2NoYWluXTsKKwl1MTYgKnNtYWxsX3NpZ25hbF9nYWluID0gJmNhbGRhdGEtPnNtYWxsX3NpZ25hbF9nYWluW2NoYWluXTsKKwl1MzIgKnBhX3RhYmxlID0gY2FsZGF0YS0+cGFfdGFibGVbY2hhaW5dOwogCXUzMiAqZGF0YV9MLCAqZGF0YV9VOwogCWludCBpLCBzdGF0dXMgPSAwOwogCXUzMiAqYnVmOwogCXUzMiByZWc7CiAKLQltZW1zZXQoY2hhbi0+cGFfdGFibGVbY2hhaW5dLCAwLCBzaXplb2YoY2hhbi0+cGFfdGFibGVbY2hhaW5dKSk7CisJbWVtc2V0KGNhbGRhdGEtPnBhX3RhYmxlW2NoYWluXSwgMCwgc2l6ZW9mKGNhbGRhdGEtPnBhX3RhYmxlW2NoYWluXSkpOwogCiAJYnVmID0ga21hbGxvYygyICogNDggKiBzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYwppbmRleCBhNzUzYTQzLi5hNDkxODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKQEAgLTU0Miw3ICs1NDIsMTEgQEAKIAkJdTMyIHJlZyA9IElOSV9SQShpbmlBcnIsIGksIDApOwogCQl1MzIgdmFsID0gSU5JX1JBKGluaUFyciwgaSwgY29sdW1uKTsKIAotCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKKwkJaWYgKHJlZyA+PSAweDE2MDAwICYmIHJlZyA8IDB4MTcwMDApCisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcmVnd3JpdGUoYWgsIHJlZywgdmFsKTsKKwkJZWxzZQorCQkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CisKIAkJRE9fREVMQVkocmVnV3JpdGVzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXRoOWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCmluZGV4IDk5OGFlMmMuLjA3ZjI2ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC01MTAsNyArNTEwLDcgQEAKICNkZWZpbmUgU0NfT1BfQkVBQ09OUyAgICAgICAgICAgICAgICBCSVQoMSkKICNkZWZpbmUgU0NfT1BfUlhBR0dSICAgICAgICAgICAgICAgICBCSVQoMikKICNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgICAgICBCSVQoMykKLSNkZWZpbmUgU0NfT1BfRlVMTF9SRVNFVCAgICAgICAgICAgICBCSVQoNCkKKyNkZWZpbmUgU0NfT1BfT0ZGQ0hBTk5FTCAgICAgICAgICAgICBCSVQoNCkKICNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgICAgICBCSVQoNSkKICNkZWZpbmUgU0NfT1BfUFJPVEVDVF9FTkFCTEUgICAgICAgICBCSVQoNikKICNkZWZpbmUgU0NfT1BfUlhGTFVTSCAgICAgICAgICAgICAgICBCSVQoNykKQEAgLTYwOSw2ICs2MDksNyBAQAogc3RydWN0IGF0aF93aXBoeSB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2M7IC8qIHNoYXJlZCBmb3IgYWxsIHZpcnR1YWwgd2lwaHlzICovCiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhIGNhbGRhdGE7CiAJZW51bSBhdGhfd2lwaHlfc3RhdGUgewogCQlBVEhfV0lQSFlfSU5BQ1RJVkUsCiAJCUFUSF9XSVBIWV9BQ1RJVkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCmluZGV4IDEzOTI4OWUuLjQ1MjA4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCkBAIC0yMiwyMyArMjIsNiBAQAogLyogV2UgY2FuIHR1bmUgdGhpcyBhcyB3ZSBnbyBieSBtb25pdG9yaW5nIHJlYWxseSBsb3cgdmFsdWVzICovCiAjZGVmaW5lIEFUSDlLX05GX1RPT19MT1cJLTYwCiAKLS8qIEFSNTQxNiBtYXkgcmV0dXJuIHZlcnkgaGlnaCB2YWx1ZSAobGlrZSAtMzEgZEJtKSwgaW4gdGhvc2UgY2FzZXMgdGhlIG5mCi0gKiBpcyBpbmNvcnJlY3QgYW5kIHdlIHNob3VsZCB1c2UgdGhlIHN0YXRpYyBORiB2YWx1ZS4gTGF0ZXIgd2UgY2FuIHRyeSB0bwotICogZmluZCBvdXQgd2h5IHRoZXkgYXJlIHJlcG9ydGluZyB0aGVzZSB2YWx1ZXMgKi8KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfbmZfaW5fcmFuZ2Uoc3RydWN0IGF0aF9odyAqYWgsIHMxNiBuZikKLXsKLQlpZiAobmYgPiBBVEg5S19ORl9UT09fTE9XKSB7Ci0JCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSAgIm5vaXNlIGZsb29yIHZhbHVlIGRldGVjdGVkICglZCkgaXMgIgotCQkJICAibG93ZXIgdGhhbiB3aGF0IHdlIHRoaW5rIGlzIGEgIgotCQkJICAicmVhc29uYWJsZSB2YWx1ZSAoJWQpXG4iLAotCQkJICBuZiwgQVRIOUtfTkZfVE9PX0xPVyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyBpbnQxNl90IGF0aDlrX2h3X2dldF9uZl9oaXN0X21pZChpbnQxNl90ICpuZkNhbEJ1ZmZlcikKIHsKIAlpbnQxNl90IG5mdmFsOwpAQCAtMTIxLDYgKzEwNCwxOSBAQAogCWFoLT5jYWxfc2FtcGxlcyA9IDA7CiB9CiAKK3N0YXRpYyBzMTYgYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGF0aF9uZl9saW1pdHMgKmxpbWl0OworCisJaWYgKCFjaGFuIHx8IElTX0NIQU5fMkdIWihjaGFuKSkKKwkJbGltaXQgPSAmYWgtPm5mXzJnOworCWVsc2UKKwkJbGltaXQgPSAmYWgtPm5mXzVnOworCisJcmV0dXJuIGxpbWl0LT5ub21pbmFsOworfQorCiAvKiBUaGlzIGlzIGRvbmUgZm9yIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjaGFubmVsICovCiBib29sIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKQogewpAQCAtMTI4LDcgKzEyNCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmNvbW1vbi0+aHctPmNvbmY7CiAJc3RydWN0IGF0aDlrX2NhbF9saXN0ICpjdXJyQ2FsID0gYWgtPmNhbF9saXN0X2N1cnI7CiAKLQlpZiAoIWFoLT5jdXJjaGFuKQorCWlmICghYWgtPmNhbGRhdGEpCiAJCXJldHVybiB0cnVlOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpICYmICFBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKQpAQCAtMTUxLDM3ICsxNDcsNTUgQEAKIAkJICAiUmVzZXR0aW5nIENhbCAlZCBzdGF0ZSBmb3IgY2hhbm5lbCAldVxuIiwKIAkJICBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlLCBjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQlhaC0+Y3VyY2hhbi0+Q2FsVmFsaWQgJj0gfmN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CisJYWgtPmNhbGRhdGEtPkNhbFZhbGlkICY9IH5jdXJyQ2FsLT5jYWxEYXRhLT5jYWxUeXBlOwogCWN1cnJDYWwtPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKTsKIAotdm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgdXBkYXRlKQogeworCWlmIChhaC0+Y2FsZGF0YSkKKwkJYWgtPmNhbGRhdGEtPm5mY2FsX3BlbmRpbmcgPSB0cnVlOworCiAJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKIAkJICAgIEFSX1BIWV9BR0NfQ09OVFJPTF9FTkFCTEVfTkYpOwotCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisKKwlpZiAodXBkYXRlKQorCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAogCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX05PX1VQREFURV9ORik7CisJZWxzZQorCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX05PX1VQREFURV9ORik7CisKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogfQogCiB2b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7CisJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmggPSBOVUxMOwogCXVuc2lnbmVkIGksIGo7CiAJaW50MzJfdCB2YWw7CiAJdTggY2hhaW5tYXNrID0gKGFoLT5yeGNoYWlubWFzayA8PCAzKSB8IGFoLT5yeGNoYWlubWFzazsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzMTYgZGVmYXVsdF9uZiA9IGF0aDlrX2h3X2dldF9kZWZhdWx0X25mKGFoLCBjaGFuKTsKIAotCWggPSBhaC0+bmZDYWxIaXN0OworCWlmIChhaC0+Y2FsZGF0YSkKKwkJaCA9IGFoLT5jYWxkYXRhLT5uZkNhbEhpc3Q7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJaWYgKGNoYWlubWFzayAmICgxIDw8IGkpKSB7CisJCQlzMTYgbmZ2YWw7CisKKwkJCWlmIChoKQorCQkJCW5mdmFsID0gaFtpXS5wcml2TkY7CisJCQllbHNlCisJCQkJbmZ2YWwgPSBkZWZhdWx0X25mOworCiAJCQl2YWwgPSBSRUdfUkVBRChhaCwgYWgtPm5mX3JlZ3NbaV0pOwogCQkJdmFsICY9IDB4RkZGRkZFMDA7Ci0JCQl2YWwgfD0gKCgodTMyKSAoaFtpXS5wcml2TkYpIDw8IDEpICYgMHgxZmYpOworCQkJdmFsIHw9ICgoKHUzMikgbmZ2YWwgPDwgMSkgJiAweDFmZik7CiAJCQlSRUdfV1JJVEUoYWgsIGFoLT5uZl9yZWdzW2ldLCB2YWwpOwogCQl9CiAJfQpAQCAtMjc3LDIyICsyOTEsMjUgQEAKIAl9CiB9CiAKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9odyAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2Jvb2wgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCWludDE2X3QgbmYsIG5mVGhyZXNoOwogCWludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdID0geyAwIH07CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjID0gY2hhbi0+Y2hhbjsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgKmNhbGRhdGEgPSBhaC0+Y2FsZGF0YTsKKworCWlmICghY2FsZGF0YSkKKwkJcmV0dXJuIGZhbHNlOwogCiAJY2hhbi0+Y2hhbm5lbEZsYWdzICY9ICh+Q0hBTk5FTF9DV19JTlQpOwogCWlmIChSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSAmIEFSX1BIWV9BR0NfQ09OVFJPTF9ORikgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSAgIk5GIGRpZCBub3QgY29tcGxldGUgaW4gY2FsaWJyYXRpb24gd2luZG93XG4iKTsKIAkJbmYgPSAwOwotCQljaGFuLT5yYXdOb2lzZUZsb29yID0gbmY7Ci0JCXJldHVybiBjaGFuLT5yYXdOb2lzZUZsb29yOworCQljYWxkYXRhLT5yYXdOb2lzZUZsb29yID0gbmY7CisJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlhdGg5a19od19kb19nZXRuZihhaCwgbmZhcnJheSk7CiAJCWF0aDlrX2h3X25mX3Nhbml0aXplKGFoLCBuZmFycmF5KTsKQEAgLTMwNyw0NyArMzI0LDQwIEBACiAJCX0KIAl9CiAKLQloID0gYWgtPm5mQ2FsSGlzdDsKLQorCWggPSBjYWxkYXRhLT5uZkNhbEhpc3Q7CisJY2FsZGF0YS0+bmZjYWxfcGVuZGluZyA9IGZhbHNlOwogCWF0aDlrX2h3X3VwZGF0ZV9uZmNhbF9oaXN0X2J1ZmZlcihoLCBuZmFycmF5KTsKLQljaGFuLT5yYXdOb2lzZUZsb29yID0gaFswXS5wcml2TkY7Ci0KLQlyZXR1cm4gY2hhbi0+cmF3Tm9pc2VGbG9vcjsKKwljYWxkYXRhLT5yYXdOb2lzZUZsb29yID0gaFswXS5wcml2TkY7CisJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaW5pdF9uZmNhbF9oaXN0X2J1ZmZlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfbmZfbGltaXRzICpsaW1pdDsKKwlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCAqaDsKKwlzMTYgZGVmYXVsdF9uZjsKIAlpbnQgaSwgajsKIAotCWlmICghYWgtPmN1cmNoYW4gfHwgSVNfQ0hBTl8yR0haKGFoLT5jdXJjaGFuKSkKLQkJbGltaXQgPSAmYWgtPm5mXzJnOwotCWVsc2UKLQkJbGltaXQgPSAmYWgtPm5mXzVnOworCWlmICghYWgtPmNhbGRhdGEpCisJCXJldHVybjsKIAorCWggPSBhaC0+Y2FsZGF0YS0+bmZDYWxIaXN0OworCWRlZmF1bHRfbmYgPSBhdGg5a19od19nZXRfZGVmYXVsdF9uZihhaCwgY2hhbik7CiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7Ci0JCWFoLT5uZkNhbEhpc3RbaV0uY3VyckluZGV4ID0gMDsKLQkJYWgtPm5mQ2FsSGlzdFtpXS5wcml2TkYgPSBsaW1pdC0+bm9taW5hbDsKLQkJYWgtPm5mQ2FsSGlzdFtpXS5pbnZhbGlkTkZjb3VudCA9Ci0JCQlBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7CisJCWhbaV0uY3VyckluZGV4ID0gMDsKKwkJaFtpXS5wcml2TkYgPSBkZWZhdWx0X25mOworCQloW2ldLmludmFsaWRORmNvdW50ID0gQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIOwogCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCWFoLT5uZkNhbEhpc3RbaV0ubmZDYWxCdWZmZXJbal0gPSBsaW1pdC0+bm9taW5hbDsKKwkJCWhbaV0ubmZDYWxCdWZmZXJbal0gPSBkZWZhdWx0X25mOwogCQl9CiAJfQogfQogCiBzMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7Ci0JczE2IG5mOworCWlmICghYWgtPmNhbGRhdGEgfHwgIWFoLT5jYWxkYXRhLT5yYXdOb2lzZUZsb29yKQorCQlyZXR1cm4gYXRoOWtfaHdfZ2V0X2RlZmF1bHRfbmYoYWgsIGNoYW4pOwogCi0JaWYgKGNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkKLQkJbmYgPSAtOTY7Ci0JZWxzZQotCQluZiA9IGNoYW4tPnJhd05vaXNlRmxvb3I7Ci0KLQlpZiAoIWF0aDlrX2h3X25mX2luX3JhbmdlKGFoLCBuZikpCi0JCW5mID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7Ci0KLQlyZXR1cm4gbmY7CisJcmV0dXJuIGFoLT5jYWxkYXRhLT5yYXdOb2lzZUZsb29yOwogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od19nZXRjaGFuX25vaXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKaW5kZXggY2Q2MGQwOS4uMGEzMDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKQEAgLTEwOCwxMSArMTA4LDExIEBACiB9OwogCiBib29sIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB1cGRhdGUpOwogdm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9odyAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKIHZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NhbF9saXN0ICpjdXJyQ2FsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaAppbmRleCAzNzU2NDAwLi40M2I5ZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCkBAIC0zNTMsNiArMzUzLDggQEAKIAl1MTYgc2VxX25vOwogCXUzMiBibWlzc19jbnQ7CiAKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgY2FsZGF0YVszOF07CisKIAlzcGlubG9ja190IGJlYWNvbl9sb2NrOwogCiAJYm9vbCB0eF9xdWV1ZXNfc3RvcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRleCBjZjliY2M2Li5lYmVkOWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmY29tbW9uLT5ody0+Y29uZjsKIAlib29sIGZhc3RjYyA9IHRydWU7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gaHctPmNvbmYuY2hhbm5lbDsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgKmNhbGRhdGE7CiAJZW51bSBodGNfcGh5bW9kZSBtb2RlOwogCV9fYmUxNiBodGNfbW9kZTsKIAl1OCBjbWRfcnNwOwpAQCAtMTQ5LDcgKzE1MCw4IEBACiAJCSAgcHJpdi0+YWgtPmN1cmNoYW4tPmNoYW5uZWwsCiAJCSAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGNvbmZfaXNfaHQoY29uZiksIGNvbmZfaXNfaHQ0MChjb25mKSk7CiAKLQlyZXQgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGZhc3RjYyk7CisJY2FsZGF0YSA9ICZwcml2LT5jYWxkYXRhW2NoYW5uZWwtPmh3X3ZhbHVlXTsKKwlyZXQgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGNhbGRhdGEsIGZhc3RjYyk7CiAJaWYgKHJldCkgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1oeikgIgpAQCAtMTAyOCw3ICsxMDMwLDcgQEAKIAkJYWgtPmN1cmNoYW4gPSBhdGg5a19jbW5fZ2V0X2N1cmNoYW5uZWwoaHcsIGFoKTsKIAogCS8qIFJlc2V0IHRoZSBIVyAqLwotCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZCAiCkBAIC0xMDkxLDcgKzEwOTMsNyBAQAogCQlhaC0+Y3VyY2hhbiA9IGF0aDlrX2Ntbl9nZXRfY3VyY2hhbm5lbChodywgYWgpOwogCiAJLyogUmVzZXQgdGhlIEhXICovCi0JcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CisJcmV0ID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBhaC0+Y2FsZGF0YSwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkICIKQEAgLTExNzksNyArMTE4MSw3IEBACiAJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKGFoLCAwLCAwKTsKIAogCWF0aDlrX2h3X2h0Y19yZXNldGluaXQoYWgpOwotCXJldCA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlyZXQgPSBhdGg5a19od19yZXNldChhaCwgaW5pdF9jaGFubmVsLCBhaC0+Y2FsZGF0YSwgZmFsc2UpOwogCWlmIChyZXQpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggOGQyOTFjYy4uMzM4NGNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTYxMCw3ICs2MTAsNiBAQAogCWVsc2UKIAkJYWgtPnR4X3RyaWdfbGV2ZWwgPSAoQVJfRlRSSUdfNTEyQiA+PiBBUl9GVFJJR19TKTsKIAotCWF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoYWgpOwogCWFoLT5iYl93YXRjaGRvZ190aW1lb3V0X21zID0gMjU7CiAKIAljb21tb24tPnN0YXRlID0gQVRIX0hXX0lOSVRJQUxJWkVEOwpAQCAtMTE4Myw5ICsxMTgyLDYgQEAKIAogCWF0aDlrX2h3X3NwdXJfbWl0aWdhdGVfZnJlcShhaCwgY2hhbik7CiAKLQlpZiAoIWNoYW4tPm9uZVRpbWVDYWxzRG9uZSkKLQkJY2hhbi0+b25lVGltZUNhbHNEb25lID0gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCkBAIC0xMjE4LDcgKzEyMTQsNyBAQAogRVhQT1JUX1NZTUJPTChhdGg5a19od19jaGVja19hbGl2ZSk7CiAKIGludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCSAgICBib29sIGJDaGFubmVsQ2hhbmdlKQorCQkgICBzdHJ1Y3QgYXRoOWtfaHdfY2FsX2RhdGEgKmNhbGRhdGEsIGJvb2wgYkNoYW5uZWxDaGFuZ2UpCiB7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJdTMyIHNhdmVMZWRTdGF0ZTsKQEAgLTEyNDMsOSArMTIzOSwxOSBAQAogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoY3VyY2hhbiAmJiAhYWgtPmNoaXBfZnVsbHNsZWVwKQorCWlmIChjdXJjaGFuICYmICFhaC0+Y2hpcF9mdWxsc2xlZXAgJiYgYWgtPmNhbGRhdGEpCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjdXJjaGFuKTsKIAorCWFoLT5jYWxkYXRhID0gY2FsZGF0YTsKKwlpZiAoY2FsZGF0YSAmJgorCSAgICAoY2hhbi0+Y2hhbm5lbCAhPSBjYWxkYXRhLT5jaGFubmVsIHx8CisJICAgICAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgfkNIQU5ORUxfQ1dfSU5UKSAhPQorCSAgICAgKGNhbGRhdGEtPmNoYW5uZWxGbGFncyAmIH5DSEFOTkVMX0NXX0lOVCkpKSB7CisJCS8qIE9wZXJhdGluZyBjaGFubmVsIGNoYW5nZWQsIHJlc2V0IGNoYW5uZWwgY2FsaWJyYXRpb24gZGF0YSAqLworCQltZW1zZXQoY2FsZGF0YSwgMCwgc2l6ZW9mKCpjYWxkYXRhKSk7CisJCWF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoYWgsIGNoYW4pOworCX0KKwogCWlmIChiQ2hhbm5lbENoYW5nZSAmJgogCSAgICAoYWgtPmNoaXBfZnVsbHNsZWVwICE9IHRydWUpICYmCiAJICAgIChhaC0+Y3VyY2hhbiAhPSBOVUxMKSAmJgpAQCAtMTI1Niw3ICsxMjYyLDcgQEAKIAogCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4pKSB7CiAJCQlhdGg5a19od19sb2FkbmYoYWgsIGFoLT5jdXJjaGFuKTsKLQkJCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKwkJCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoLCB0cnVlKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMTQ2MSwxMSArMTQ2Nyw4IEBACiAJaWYgKGFoLT5idGNvZXhfaHcuZW5hYmxlZCkKIAkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShhaCk7CiAKLQlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewotCQlhdGg5a19od19sb2FkbmYoYWgsIGN1cmNoYW4pOwotCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7CisJaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCiAJCWFyOTAwM19od19iYl93YXRjaGRvZ19jb25maWcoYWgpOwotCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCAyZDMwZWZjLi4zOTlmN2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtMzQ2LDE5ICszNDYsMjUgQEAKIAkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAogCSBDSEFOTkVMX0hUNDBNSU5VUykKIAorc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhIHsKKwl1MTYgY2hhbm5lbDsKKwl1MzIgY2hhbm5lbEZsYWdzOworCWludDMyX3QgQ2FsVmFsaWQ7CisJaW50OF90IGlDb2ZmOworCWludDhfdCBxQ29mZjsKKwlpbnQxNl90IHJhd05vaXNlRmxvb3I7CisJYm9vbCBwYXByZF9kb25lOworCWJvb2wgbmZjYWxfcGVuZGluZzsKKwl1MTYgc21hbGxfc2lnbmFsX2dhaW5bQVI5MzAwX01BWF9DSEFJTlNdOworCXUzMiBwYV90YWJsZVtBUjkzMDBfTUFYX0NIQUlOU11bUEFQUkRfVEFCTEVfU1pdOworCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOworfTsKKwogc3RydWN0IGF0aDlrX2NoYW5uZWwgewogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKIAl1MTYgY2hhbm5lbDsKIAl1MzIgY2hhbm5lbEZsYWdzOwogCXUzMiBjaGFubW9kZTsKLQlpbnQzMl90IENhbFZhbGlkOwotCWJvb2wgb25lVGltZUNhbHNEb25lOwotCWludDhfdCBpQ29mZjsKLQlpbnQ4X3QgcUNvZmY7Ci0JaW50MTZfdCByYXdOb2lzZUZsb29yOwotCWJvb2wgcGFwcmRfZG9uZTsKLQl1MTYgc21hbGxfc2lnbmFsX2dhaW5bQVI5MzAwX01BWF9DSEFJTlNdOwotCXUzMiBwYV90YWJsZVtBUjkzMDBfTUFYX0NIQUlOU11bUEFQUkRfVEFCTEVfU1pdOwogfTsKIAogI2RlZmluZSBJU19DSEFOX0coX2MpICgoKChfYyktPmNoYW5uZWxGbGFncyAmIChDSEFOTkVMX0cpKSA9PSBDSEFOTkVMX0cpIHx8IFwKQEAgLTY2OSw3ICs2NzUsNyBAQAogCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBwb3dlcl9tb2RlOwogCi0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhOwogCXN0cnVjdCBhdGg5a19wYWNhbF9pbmZvIHBhY2FsX2luZm87CiAJc3RydWN0IGFyNTQxNlN0YXRzIHN0YXRzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKQEAgLTg2Myw3ICs4NjksNyBAQAogdm9pZCBhdGg5a19od19kZWluaXQoc3RydWN0IGF0aF9odyAqYWgpOwogaW50IGF0aDlrX2h3X2luaXQoc3RydWN0IGF0aF9odyAqYWgpOwogaW50IGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgYm9vbCBiQ2hhbm5lbENoYW5nZSk7CisJCSAgIHN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSwgYm9vbCBiQ2hhbm5lbENoYW5nZSk7CiBpbnQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiB1MzIgYXRoOWtfcmVnZF9nZXRfY3RsKHN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CiAKQEAgLTk1OCw5ICs5NjQsMTAgQEAKIHZvaWQgYXI5MDAzX2h3X2JiX3dhdGNoZG9nX2RiZ19pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXI5MDAzX3BhcHJkX2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCB2YWwpOwogdm9pZCBhcjkwMDNfcGFwcmRfcG9wdWxhdGVfc2luZ2xlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwgaW50IGNoYWluKTsKLWludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgIGludCBjaGFpbik7CisJCQkJCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSwKKwkJCQkJaW50IGNoYWluKTsKK2ludCBhcjkwMDNfcGFwcmRfY3JlYXRlX2N1cnZlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhLCBpbnQgY2hhaW4pOwogaW50IGFyOTAwM19wYXByZF9zZXR1cF9nYWluX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgY2hhaW4pOwogaW50IGFyOTAwM19wYXByZF9pbml0X3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKIGJvb2wgYXI5MDAzX3BhcHJkX2lzX2RvbmUoc3RydWN0IGF0aF9odyAqYWgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggMDQyOWRkYS4uM2NhYTMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0xNTQsNiArMTU0LDI3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3BtX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3N0YXJ0X2FuaShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gY29tbW9uLT5haDsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7CisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9BTklfUlVOKSkKKwkJcmV0dXJuOworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX09GRkNIQU5ORUwpCisJCXJldHVybjsKKworCWNvbW1vbi0+YW5pLmxvbmdjYWxfdGltZXIgPSB0aW1lc3RhbXA7CisJY29tbW9uLT5hbmkuc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CisJY29tbW9uLT5hbmkuY2hlY2thbmlfdGltZXIgPSB0aW1lc3RhbXA7CisKKwltb2RfdGltZXIoJmNvbW1vbi0+YW5pLnRpbWVyLAorCQkgIGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcygodTMyKWFoLT5jb25maWcuYW5pX3BvbGxfaW50ZXJ2YWwpKTsKK30KKwogLyoKICAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwgaXQncyBkb25lCiAgKiBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcKQEAgLTE2MiwxNiArMTgzLDIzIEBACiBpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKIHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmNvbW1vbi0+aHctPmNvbmY7CiAJYm9vbCBmYXN0Y2MgPSB0cnVlLCBzdG9wcGVkOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWw7CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhID0gTlVMTDsKIAlpbnQgcjsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKQogCQlyZXR1cm4gLUVJTzsKIAorCWRlbF90aW1lcl9zeW5jKCZjb21tb24tPmFuaS50aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmc2MtPnBhcHJkX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5od19jaGVja193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT50eF9jb21wbGV0ZV93b3JrKTsKKwogCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKIAkvKgpAQCAtMTkxLDkgKzIxOSwxMiBAQAogCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgogCSAqIGNoYW5naW5nIGNoYW5uZWwuICovCiAKLQlpZiAoIXN0b3BwZWQgfHwgKHNjLT5zY19mbGFncyAmIFNDX09QX0ZVTExfUkVTRVQpKQorCWlmICghc3RvcHBlZCB8fCAhKHNjLT5zY19mbGFncyAmIFNDX09QX09GRkNIQU5ORUwpKQogCQlmYXN0Y2MgPSBmYWxzZTsKIAorCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX09GRkNIQU5ORUwpKQorCQljYWxkYXRhID0gJmFwaHktPmNhbGRhdGE7CisKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywKIAkJICAiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNvbmZfaXNfaHQ0MDogJWRcbiIsCiAJCSAgc2MtPnNjX2FoLT5jdXJjaGFuLT5jaGFubmVsLApAQCAtMjAxLDcgKzIzMiw3IEBACiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwogCi0JciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBoY2hhbiwgZmFzdGNjKTsKKwlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGhjaGFuLCBjYWxkYXRhLCBmYXN0Y2MpOwogCWlmIChyKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgpAQCAtMjEyLDggKzI0Myw2IEBACiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAotCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfRlVMTF9SRVNFVDsKLQogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzdGFydCByZWN2IGxvZ2ljXG4iKTsKQEAgLTIyNSw2ICsyNTQsMTIgQEAKIAlhdGhfdXBkYXRlX3R4cG93KHNjKTsKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKIAorCWlmICghKHNjLT5zY19mbGFncyAmIChTQ19PUF9PRkZDSEFOTkVMIHwgU0NfT1BfU0NBTk5JTkcpKSkgeworCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssIDApOworCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CisJfQorCiAgcHNfcmVzdG9yZToKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gcjsKQEAgLTIzMywxNyArMjY4LDE5IEBACiBzdGF0aWMgdm9pZCBhdGhfcGFwcmRfYWN0aXZhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aDlrX2h3X2NhbF9kYXRhICpjYWxkYXRhID0gYWgtPmNhbGRhdGE7CiAJaW50IGNoYWluOwogCi0JaWYgKCFhaC0+Y3VyY2hhbi0+cGFwcmRfZG9uZSkKKwlpZiAoIWNhbGRhdGEgfHwgIWNhbGRhdGEtPnBhcHJkX2RvbmUpCiAJCXJldHVybjsKIAogCWF0aDlrX3BzX3dha2V1cChzYyk7CisJYXI5MDAzX3BhcHJkX2VuYWJsZShhaCwgZmFsc2UpOwogCWZvciAoY2hhaW4gPSAwOyBjaGFpbiA8IEFSOTMwMF9NQVhfQ0hBSU5TOyBjaGFpbisrKSB7CiAJCWlmICghKGFoLT5jYXBzLnR4X2NoYWlubWFzayAmIEJJVChjaGFpbikpKQogCQkJY29udGludWU7CiAKLQkJYXI5MDAzX3BhcHJkX3BvcHVsYXRlX3NpbmdsZV90YWJsZShhaCwgYWgtPmN1cmNoYW4sIGNoYWluKTsKKwkJYXI5MDAzX3BhcHJkX3BvcHVsYXRlX3NpbmdsZV90YWJsZShhaCwgY2FsZGF0YSwgY2hhaW4pOwogCX0KIAogCWFyOTAwM19wYXByZF9lbmFibGUoYWgsIHRydWUpOwpAQCAtMjYxLDYgKzI5OCw3IEBACiAJaW50IGJhbmQgPSBody0+Y29uZi5jaGFubmVsLT5iYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJnNjLT5zYmFuZHNbYmFuZF07CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOworCXN0cnVjdCBhdGg5a19od19jYWxfZGF0YSAqY2FsZGF0YSA9IGFoLT5jYWxkYXRhOwogCWludCBxbnVtLCBmdHlwZTsKIAlpbnQgY2hhaW5fb2sgPSAwOwogCWludCBjaGFpbjsKQEAgLTI2OCw2ICszMDYsOSBAQAogCWludCB0aW1lX2xlZnQ7CiAJaW50IGk7CiAKKwlpZiAoIWNhbGRhdGEpCisJCXJldHVybjsKKwogCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm47CkBAIC0zMjIsNyArMzYzLDcgQEAKIAkJaWYgKCFhcjkwMDNfcGFwcmRfaXNfZG9uZShhaCkpCiAJCQlicmVhazsKIAotCQlpZiAoYXI5MDAzX3BhcHJkX2NyZWF0ZV9jdXJ2ZShhaCwgYWgtPmN1cmNoYW4sIGNoYWluKSAhPSAwKQorCQlpZiAoYXI5MDAzX3BhcHJkX2NyZWF0ZV9jdXJ2ZShhaCwgY2FsZGF0YSwgY2hhaW4pICE9IDApCiAJCQlicmVhazsKIAogCQljaGFpbl9vayA9IDE7CkBAIC0zMzAsNyArMzcxLDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAogCWlmIChjaGFpbl9vaykgewotCQlhaC0+Y3VyY2hhbi0+cGFwcmRfZG9uZSA9IHRydWU7CisJCWNhbGRhdGEtPnBhcHJkX2RvbmUgPSB0cnVlOwogCQlhdGhfcGFwcmRfYWN0aXZhdGUoc2MpOwogCX0KIApAQCAtNDM5LDMzICs0ODAsMTQgQEAKIAkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilzaG9ydF9jYWxfaW50ZXJ2YWwpOwogCiAJbW9kX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoY2FsX2ludGVydmFsKSk7Ci0JaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9QQVBSRCkgJiYKLQkgICAgIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9TQ0FOTklORykpIHsKLQkJaWYgKCFzYy0+c2NfYWgtPmN1cmNoYW4tPnBhcHJkX2RvbmUpCisJaWYgKChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9QQVBSRCkgJiYgYWgtPmNhbGRhdGEpIHsKKwkJaWYgKCFhaC0+Y2FsZGF0YS0+cGFwcmRfZG9uZSkKIAkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKHNjLT5odywgJnNjLT5wYXByZF93b3JrKTsKIAkJZWxzZQogCQkJYXRoX3BhcHJkX2FjdGl2YXRlKHNjKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9zdGFydF9hbmkoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbikKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IGNvbW1vbi0+YWg7Ci0JdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQU5JX1JVTikpCi0JCXJldHVybjsKLQotCWNvbW1vbi0+YW5pLmxvbmdjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JY29tbW9uLT5hbmkuc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JY29tbW9uLT5hbmkuY2hlY2thbmlfdGltZXIgPSB0aW1lc3RhbXA7Ci0KLQltb2RfdGltZXIoJmNvbW1vbi0+YW5pLnRpbWVyLAotCQkgIGppZmZpZXMgKwotCQkJbXNlY3NfdG9famlmZmllcygodTMyKWFoLT5jb25maWcuYW5pX3BvbGxfaW50ZXJ2YWwpKTsKLX0KLQogLyoKICAqIFVwZGF0ZSB0eC9yeCBjaGFpbm1hc2suIEZvciBsZWdhY3kgYXNzb2NpYXRpb24sCiAgKiBoYXJkIGNvZGUgY2hhaW5tYXNrIHRvIDF4MSwgZm9yIDExbiBhc3NvY2lhdGlvbiwgdXNlCkBAIC00NzcsNyArNDk5LDcgQEAKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAotCWlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpIHx8IGlzX2h0IHx8CisJaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9PRkZDSEFOTkVMKSB8fCBpc19odCB8fAogCSAgICAoYWgtPmJ0Y29leF9ody5zY2hlbWUgIT0gQVRIX0JUQ09FWF9DRkdfTk9ORSkpIHsKIAkJY29tbW9uLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CiAJCWNvbW1vbi0+cnhfY2hhaW5tYXNrID0gYWgtPmNhcHMucnhfY2hhaW5tYXNrOwpAQCAtODE3LDcgKzgzOSw3IEBACiAJCWFoLT5jdXJjaGFuID0gYXRoX2dldF9jdXJjaGFubmVsKHNjLCBzYy0+aHcpOwogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocikgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJICAiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1IeiksICIKQEAgLTg3Nyw3ICs4OTksNyBAQAogCQlhaC0+Y3VyY2hhbiA9IGF0aF9nZXRfY3VyY2hhbm5lbChzYywgaHcpOwogCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAlpZiAocikgewogCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgpAQCAtOTEwLDcgKzkzMiw3IEBACiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCXIgPSBhdGg5a19od19yZXNldChhaCwgc2MtPnNjX2FoLT5jdXJjaGFuLCBmYWxzZSk7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGFoLT5jYWxkYXRhLCBmYWxzZSk7CiAJaWYgKHIpCiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCiAJCQkgICJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IHJlc2V0IHN0YXR1cyAlZFxuIiwgcik7CkBAIC0xMDg1LDcgKzExMDcsNyBAQAogCSAqIGFuZCB0aGVuIHNldHVwIG9mIHRoZSBpbnRlcnJ1cHQgbWFzay4KIAkgKi8KIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCXIgPSBhdGg5a19od19yZXNldChhaCwgaW5pdF9jaGFubmVsLCBmYWxzZSk7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBpbml0X2NoYW5uZWwsIGFoLT5jYWxkYXRhLCBmYWxzZSk7CiAJaWYgKHIpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKIAkJCSAgIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkICIKQEAgLTE1NzksNiArMTYwMSwxMCBAQAogCiAJCWFwaHktPmNoYW5faWR4ID0gcG9zOwogCQlhcGh5LT5jaGFuX2lzX2h0ID0gY29uZl9pc19odChjb25mKTsKKwkJaWYgKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfT0ZGQ0hBTk5FTCkKKwkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9PRkZDSEFOTkVMOworCQllbHNlCisJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX09GRkNIQU5ORUw7CiAKIAkJaWYgKGFwaHktPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOIHx8CiAJCSAgICBhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfQUNUSVZFKQpAQCAtMTk5MCw3ICsyMDE2LDYgQEAKIHsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKQEAgLTIwMDgsMTAgKzIwMzMsNiBAQAogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1NDQU47CiAJYXRoOWtfd2lwaHlfcGF1c2VfYWxsX2ZvcmNlZChzYywgYXBoeSk7CiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOwotCWRlbF90aW1lcl9zeW5jKCZjb21tb24tPmFuaS50aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmc2MtPnBhcHJkX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJnNjLT5od19jaGVja193b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT50eF9jb21wbGV0ZV93b3JrKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKQEAgLTIwMjMsMTUgKzIwNDQsMTAgQEAKIHsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwotCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwotCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKLQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKLQlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBkYTBjZmU5Li5hM2ZjOTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTExNDAsNiArMTE0MCwxMSBAQAogCQlpZiAoZmx1c2gpCiAJCQlnb3RvIHJlcXVldWU7CiAKKwkJcmV0dmFsID0gYXRoOWtfcnhfc2tiX3ByZXByb2Nlc3MoY29tbW9uLCBodywgaGRyLCAmcnMsCisJCQkJCQkgcnhzLCAmZGVjcnlwdF9lcnJvcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIHJlcXVldWU7CisKIAkJcnhzLT5tYWN0aW1lID0gKHRzZiAmIH4weGZmZmZmZmZmVUxMKSB8IHJzLnJzX3RzdGFtcDsKIAkJaWYgKHJzLnJzX3RzdGFtcCA+IHRzZl9sb3dlciAmJgogCQkgICAgdW5saWtlbHkocnMucnNfdHN0YW1wIC0gdHNmX2xvd2VyID4gMHgxMDAwMDAwMCkpCkBAIC0xMTQ5LDExICsxMTU0LDYgQEAKIAkJICAgIHVubGlrZWx5KHRzZl9sb3dlciAtIHJzLnJzX3RzdGFtcCA+IDB4MTAwMDAwMDApKQogCQkJcnhzLT5tYWN0aW1lICs9IDB4MTAwMDAwMDAwVUxMOwogCi0JCXJldHZhbCA9IGF0aDlrX3J4X3NrYl9wcmVwcm9jZXNzKGNvbW1vbiwgaHcsIGhkciwgJnJzLAotCQkJCQkJIHJ4cywgJmRlY3J5cHRfZXJyb3IpOwotCQlpZiAocmV0dmFsKQotCQkJZ290byByZXF1ZXVlOwotCiAJCS8qIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhbiBza2IgdG8gcmVxdWV1ZSBvbmNlIHdlIGFyZSBkb25lCiAJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc2tiICovCiAJCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKGNvbW1vbiwgY29tbW9uLT5yeF9idWZzaXplLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IDUwMWI3MjguLjRkZGExNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtMTIwLDI2ICsxMjAsMTQgQEAKIAlsaXN0X2FkZF90YWlsKCZhYy0+bGlzdCwgJnR4cS0+YXhxX2FjcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF90eF9wYXVzZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQotewotCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKLQotCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JdGlkLT5wYXVzZWQrKzsKLQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CiAKLQlCVUdfT04odGlkLT5wYXVzZWQgPD0gMCk7CisJV0FSTl9PTighdGlkLT5wYXVzZWQpOworCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCXRpZC0+cGF1c2VkLS07Ci0KLQlpZiAodGlkLT5wYXVzZWQgPiAwKQotCQlnb3RvIHVubG9jazsKKwl0aWQtPnBhdXNlZCA9IGZhbHNlOwogCiAJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQlnb3RvIHVubG9jazsKQEAgLTE1NywxNSArMTQ1LDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCUJVR19PTih0aWQtPnBhdXNlZCA8PSAwKTsKKwlXQVJOX09OKCF0aWQtPnBhdXNlZCk7CisKIAlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JdGlkLT5wYXVzZWQtLTsKLQotCWlmICh0aWQtPnBhdXNlZCA+IDApIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlyZXR1cm47Ci0JfQorCXRpZC0+cGF1c2VkID0gZmFsc2U7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKSB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwpAQCAtODExLDcgKzc5NCw3IEBACiAJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKIAl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKIAl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9QUk9HUkVTUzsKLQlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7CisJdHh0aWQtPnBhdXNlZCA9IHRydWU7CiAJKnNzbiA9IHR4dGlkLT5zZXFfc3RhcnQ7CiB9CiAKQEAgLTgzNSwxMCArODE4LDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQogCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl0eHRpZC0+cGF1c2VkID0gdHJ1ZTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7CkBAIC0xMTgxLDcgKzExNjMsNyBAQAogCQkJICAiRmFpbGVkIHRvIHN0b3AgVFggRE1BLiBSZXNldHRpbmcgaGFyZHdhcmUhXG4iKTsKIAogCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgZmFsc2UpOworCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgYWgtPmNhbGRhdGEsIGZhbHNlKTsKIAkJaWYgKHIpCiAJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAogCQkJCSAgIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgcmVzZXQgc3RhdHVzICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKaW5kZXggYzI3NDZmYy4uM2I2MzIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xOTEsMjUgKzE5MCwyMyBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCX0KIAogCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bWVsX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTI1NCw3ICsyNTEsNyBAQAogCiAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0KIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycSwKLQkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCisJCQkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJCWRpZCA/IGRpZC0+ZHJpdmVyX2luZm8gOiBBVE1FTF9GV19UWVBFX05PTkUsCiAJCQkJJmxpbmstPmRldiwKIAkJCQljYXJkX3ByZXNlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGNtY2lhLmMKaW5kZXggMGU5OWI2My4uZGZiYzQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9wY21jaWEuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc2NvZGUuaD4KQEAgLTY1LDcgKzY0LDYgQEAKIHsKIAlzdHJ1Y3Qgc3NiX2J1cyAqc3NiOwogCXdpbl9yZXFfdCB3aW47Ci0JbWVtcmVxX3QgbWVtOwogCWludCBlcnIgPSAtRU5PTUVNOwogCWludCByZXMgPSAwOwogCkBAIC03OCwxMiArNzYsNyBAQAogCWRldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWRldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKLQlkZXYtPmlvLkJhc2VQb3J0MiA9IDA7Ci0JZGV2LT5pby5OdW1Qb3J0czIgPSAwOwotCWRldi0+aW8uQXR0cmlidXRlczIgPSAwOwotCi0Jd2luLkF0dHJpYnV0ZXMgPSBXSU5fQUREUl9TUEFDRV9NRU0gfCBXSU5fTUVNT1JZX1RZUEVfQ00gfAotCQkJIFdJTl9FTkFCTEUgfCBXSU5fREFUQV9XSURUSF8xNiB8CisJd2luLkF0dHJpYnV0ZXMgPSAgV0lOX0VOQUJMRSB8IFdJTl9EQVRBX1dJRFRIXzE2IHwKIAkJCSBXSU5fVVNFX1dBSVQ7CiAJd2luLkJhc2UgPSAwOwogCXdpbi5TaXplID0gU1NCX0NPUkVfU0laRTsKQEAgLTkyLDkgKzg1LDcgQEAKIAlpZiAocmVzICE9IDApCiAJCWdvdG8gZXJyX2tmcmVlX3NzYjsKIAotCW1lbS5DYXJkT2Zmc2V0ID0gMDsKLQltZW0uUGFnZSA9IDA7Ci0JcmVzID0gcGNtY2lhX21hcF9tZW1fcGFnZShkZXYsIGRldi0+d2luLCAmbWVtKTsKKwlyZXMgPSBwY21jaWFfbWFwX21lbV9wYWdlKGRldiwgZGV2LT53aW4sIDApOwogCWlmIChyZXMgIT0gMCkKIAkJZ290byBlcnJfZGlzYWJsZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCmluZGV4IDI5YjMxYTYuLmJhNTRkMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMjMsNyArMjIsNyBAQAogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCiAKIAotc3RhdGljIGRldl9pbmZvX3QgZGV2X2luZm8gPSAiaG9zdGFwX2NzIjsKK3N0YXRpYyBjaGFyICpkZXZfaW5mbyA9ICJob3N0YXBfY3MiOwogCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIEludGVyc2lsIFByaXNtMi1iYXNlZCA4MDIuMTEgd2lyZWxlc3MgTEFOICIKQEAgLTIyNSwyNyArMjI0LDE4IEBACiBzdGF0aWMgdm9pZCBzYW5kaXNrX3NldF9pb2Jhc2UobG9jYWxfaW5mb190ICpsb2NhbCkKIHsKIAlpbnQgcmVzOwotCWNvbmZfcmVnX3QgcmVnOwogCXN0cnVjdCBob3N0YXBfY3NfcHJpdiAqaHdfcHJpdiA9IGxvY2FsLT5od19wcml2OwogCi0JcmVnLkZ1bmN0aW9uID0gMDsKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IDB4MTA7IC8qIDB4M2YwIElPIGJhc2UgMSAqLwotCXJlZy5WYWx1ZSA9IGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4MDBmZjsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCAweDEwLAorCQkJCWh3X3ByaXYtPmxpbmstPnJlc291cmNlWzBdLT5zdGFydCAmIDB4MDBmZik7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJQcmlzbTMgU2FuRGlzayAtIGZhaWxlZCB0byBzZXQgSS9PIGJhc2UgMCAtIgogCQkgICAgICAgIiByZXM9JWRcbiIsIHJlcyk7CiAJfQogCXVkZWxheSgxMCk7CiAKLQlyZWcuRnVuY3Rpb24gPSAwOwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gMHgxMjsgLyogMHgzZjIgSU8gYmFzZSAyICovCi0JcmVnLlZhbHVlID0gKGh3X3ByaXYtPmxpbmstPmlvLkJhc2VQb3J0MSAmIDB4ZmYwMCkgPj4gODsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCAweDEyLAorCQkJCShod19wcml2LT5saW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgPj4gOCkgJiAweDAwZmYpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiUHJpc20zIFNhbkRpc2sgLSBmYWlsZWQgdG8gc2V0IEkvTyBiYXNlIDEgLSIKIAkJICAgICAgICIgcmVzPSVkXG4iLCByZXMpOwpAQCAtMjcxLDEyICsyNjEsMTEgQEAKIHN0YXRpYyBpbnQgc2FuZGlza19lbmFibGVfd2lyZWxlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzLCByZXQgPSAwOwotCWNvbmZfcmVnX3QgcmVnOwogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJbG9jYWxfaW5mb190ICpsb2NhbCA9IGlmYWNlLT5sb2NhbDsKIAlzdHJ1Y3QgaG9zdGFwX2NzX3ByaXYgKmh3X3ByaXYgPSBsb2NhbC0+aHdfcHJpdjsKIAotCWlmIChod19wcml2LT5saW5rLT5pby5OdW1Qb3J0czEgPCAweDQyKSB7CisJaWYgKHJlc291cmNlX3NpemUoaHdfcHJpdi0+bGluay0+cmVzb3VyY2VbMF0pIDwgMHg0MikgewogCQkvKiBOb3QgZW5vdWdoIHBvcnRzIHRvIGJlIFNhbkRpc2sgbXVsdGktZnVuY3Rpb24gY2FyZCAqLwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CkBAIC0yOTgsMTIgKzI4Nyw4IEBACiAJICAgICAgICIgLSB1c2luZyB2ZW5kb3Itc3BlY2lmaWMgaW5pdGlhbGl6YXRpb25cbiIsIGRldi0+bmFtZSk7CiAJaHdfcHJpdi0+c2FuZGlza19jb25uZWN0cGx1cyA9IDE7CiAKLQlyZWcuRnVuY3Rpb24gPSAwOwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZWcuVmFsdWUgPSBDT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLAorCQkJCUNPUl9TT0ZUX1JFU0VUKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTYW5EaXNrIC0gQ09SIHNyZXNldCBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmVzKTsKQEAgLTMxMSwxNiArMjk2LDEzIEBACiAJfQogCW1kZWxheSg1KTsKIAotCXJlZy5GdW5jdGlvbiA9IDA7Ci0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwogCS8qCiAJICogRG8gbm90IGVuYWJsZSBpbnRlcnJ1cHRzIGhlcmUgdG8gYXZvaWQgc29tZSBib2d1cyBldmVudHMuIEludGVycnVwdHMKIAkgKiB3aWxsIGJlIGVuYWJsZWQgZHVyaW5nIHRoZSBmaXJzdCBjb3Jfc3Jlc2V0IGNhbGwuCiAJICovCi0JcmVnLlZhbHVlID0gQ09SX0xFVkVMX1JFUSB8IDB4OCB8IENPUl9BRERSX0RFQ09ERSB8IENPUl9GVU5DX0VOQTsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLAorCQkJCShDT1JfTEVWRUxfUkVRIHwgMHg4IHwgQ09SX0FERFJfREVDT0RFIHwKKwkJCQkJQ09SX0ZVTkNfRU5BKSk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2FuRGlzayAtIENPUiBzcmVzZXQgZmFpbGVkICglZClcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHJlcyk7CkBAIC0zNDMsMzAgKzMyNSwyMyBAQAogc3RhdGljIHZvaWQgcHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0KGxvY2FsX2luZm9fdCAqbG9jYWwpCiB7CiAJaW50IHJlczsKLQljb25mX3JlZ190IHJlZzsKKwl1OCB2YWw7CiAJc3RydWN0IGhvc3RhcF9jc19wcml2ICpod19wcml2ID0gbG9jYWwtPmh3X3ByaXY7CiAKIAlpZiAoIXByaXNtMl9wY2NhcmRfY2FyZF9wcmVzZW50KGxvY2FsKSkKIAkgICAgICAgcmV0dXJuOwogCi0JcmVnLkZ1bmN0aW9uID0gMDsKLQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NPUjsKLQlyZWcuVmFsdWUgPSAwOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJcmVzID0gcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoaHdfcHJpdi0+bGluaywgQ0lTUkVHX0NPUiwgJnZhbCk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQgZmFpbGVkIDEgKCVkKVxuIiwKIAkJICAgICAgIHJlcyk7CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfY29yX3NyZXNldDogb3JpZ2luYWwgQ09SICUwMnhcbiIsCi0JICAgICAgIHJlZy5WYWx1ZSk7CisJCXZhbCk7CiAKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLlZhbHVlIHw9IENPUl9TT0ZUX1JFU0VUOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJdmFsIHw9IENPUl9TT0ZUX1JFU0VUOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLCB2YWwpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9jb3Jfc3Jlc2V0IGZhaWxlZCAyICglZClcbiIsCiAJCSAgICAgICByZXMpOwpAQCAtMzc1LDExICszNTAsMTAgQEAKIAogCW1kZWxheShod19wcml2LT5zYW5kaXNrX2Nvbm5lY3RwbHVzID8gNSA6IDIpOwogCi0JcmVnLlZhbHVlICY9IH5DT1JfU09GVF9SRVNFVDsKKwl2YWwgJj0gfkNPUl9TT0ZUX1JFU0VUOwogCWlmIChod19wcml2LT5zYW5kaXNrX2Nvbm5lY3RwbHVzKQotCQlyZWcuVmFsdWUgfD0gQ09SX0lSRVFfRU5BOwotCXJlcyA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcihod19wcml2LT5saW5rLAotCQkJCQkJICAgJnJlZyk7CisJCXZhbCB8PSBDT1JfSVJFUV9FTkE7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsIHZhbCk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2Nvcl9zcmVzZXQgZmFpbGVkIDMgKCVkKVxuIiwKIAkJICAgICAgIHJlcyk7CkBAIC0zOTYsOCArMzcwLDcgQEAKIHN0YXRpYyB2b2lkIHByaXNtMl9wY2NhcmRfZ2VuZXNpc19yZXNldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBpbnQgaGNyKQogewogCWludCByZXM7Ci0JY29uZl9yZWdfdCByZWc7Ci0JaW50IG9sZF9jb3I7CisJdTggb2xkX2NvcjsKIAlzdHJ1Y3QgaG9zdGFwX2NzX3ByaXYgKmh3X3ByaXYgPSBsb2NhbC0+aHdfcHJpdjsKIAogCWlmICghcHJpc20yX3BjY2FyZF9jYXJkX3ByZXNlbnQobG9jYWwpKQpAQCAtNDA4LDI1ICszODEsMTcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJlZy5GdW5jdGlvbiA9IDA7Ci0JcmVnLkFjdGlvbiA9IENTX1JFQUQ7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0JcmVnLlZhbHVlID0gMDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV9yZWFkX2NvbmZpZ19ieXRlKGh3X3ByaXYtPmxpbmssIENJU1JFR19DT1IsICZvbGRfY29yKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDEgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQ6IG9yaWdpbmFsIENPUiAlMDJ4XG4iLAotCSAgICAgICByZWcuVmFsdWUpOwotCW9sZF9jb3IgPSByZWcuVmFsdWU7CisJCW9sZF9jb3IpOwogCi0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5WYWx1ZSB8PSBDT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLAorCQkJCW9sZF9jb3IgfCBDT1JfU09GVF9SRVNFVCk7CiAJaWYgKHJlcyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJwcmlzbTJfcGNjYXJkX2dlbmVzaXNfc3Jlc2V0IGZhaWxlZCAyICIKIAkJICAgICAgICIoJWQpXG4iLCByZXMpOwpAQCAtNDM2LDExICs0MDEsNyBAQAogCW1kZWxheSgxMCk7CiAKIAkvKiBTZXR1cCBHZW5lc2lzIG1vZGUgKi8KLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLlZhbHVlID0gaGNyOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ0NTUiwgaGNyKTsKIAlpZiAocmVzICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInByaXNtMl9wY2NhcmRfZ2VuZXNpc19zcmVzZXQgZmFpbGVkIDMgIgogCQkgICAgICAgIiglZClcbiIsIHJlcyk7CkBAIC00NDgsMTEgKzQwOSw4IEBACiAJfQogCW1kZWxheSgxMCk7CiAKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0JcmVnLlZhbHVlID0gb2xkX2NvciAmIH5DT1JfU09GVF9SRVNFVDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoaHdfcHJpdi0+bGluaywKLQkJCQkJCSAgICZyZWcpOworCXJlcyA9IHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShod19wcml2LT5saW5rLCBDSVNSRUdfQ09SLAorCQkJCW9sZF9jb3IgJiB+Q09SX1NPRlRfUkVTRVQpOwogCWlmIChyZXMgIT0gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAicHJpc20yX3BjY2FyZF9nZW5lc2lzX3NyZXNldCBmYWlsZWQgNCAiCiAJCSAgICAgICAiKCVkKVxuIiwgcmVzKTsKQEAgLTU2MSwzMCArNTE5LDI0IEBACiAJUERFQlVHKERFQlVHX0VYVFJBLCAiSU8gd2luZG93IHNldHRpbmdzOiBjZmctPmlvLm53aW49JWQgIgogCSAgICAgICAiZGZsdC0+aW8ubndpbj0lZFxuIiwKIAkgICAgICAgY2ZnLT5pby5ud2luLCBkZmx0LT5pby5ud2luKTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlQREVCVUcoREVCVUdfRVhUUkEsICJpby0+ZmxhZ3MgPSAweCUwNFgsICIKLQkJICAgICAgICJpby5iYXNlPTB4JTA0eCwgbGVuPSVkXG4iLCBpby0+ZmxhZ3MsCi0JCSAgICAgICBpby0+d2luWzBdLmJhc2UsIGlvLT53aW5bMF0ubGVuKTsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmCi0JCQlDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCX0KIAogCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50IHByaXNtMl9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC02NDYsNyArNTk4LDcgQEAKIAkJZ290byBmYWlsZWRfdW5sb2NrOwogCiAJZGV2LT5pcnEgPSBsaW5rLT5pcnE7Ci0JZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+aXJxX2luaXRfbG9jaywgZmxhZ3MpOwogCkBAIC02NTgsMTIgKzYxMCwxMCBAQAogCQkgICAgICAgbGluay0+Y29uZi5WcHAgJSAxMCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MitsaW5rLT5pby5OdW1Qb3J0czItMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCWxvY2FsLT5zaHV0ZG93biA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IGMyNGM1ZWYuLjE2YmJmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xOTI0LDYgKzE5MjQsMTAgQEAKIAkJYmdfYmFuZC0+Y2hhbm5lbHMgPQogCQkJa3phbGxvYyhnZW8tPmJnX2NoYW5uZWxzICoKIAkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmdfYmFuZC0+Y2hhbm5lbHMpIHsKKwkJCWlwdzIxMDBfZG93bihwcml2KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAJCS8qIHRyYW5zbGF0ZSBnZW8tPmJnIHRvIGJnX2JhbmQuY2hhbm5lbHMgKi8KIAkJZm9yIChpID0gMDsgaSA8IGdlby0+YmdfY2hhbm5lbHM7IGkrKykgewogCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWRlYnVnZnMuYwppbmRleCBmMDUyYzZkLi5kNzA2YjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1kZWJ1Z2ZzLmMKQEAgLTk4MCw3ICs5ODAsNyBAQAogCQkJIGxlMzJfdG9fY3B1KGJ0LT5sb19wcmlvcml0eV90eF9yZXFfY250KSwKIAkJCSBhY2N1bV9idC0+bG9fcHJpb3JpdHlfdHhfcmVxX2NudCk7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJsb19wcmlvcml0eV9yeF9kZW5pZWRfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSAibG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudDpcdCV1XHRcdFx0JXVcbiIsCiAJCQkgbGUzMl90b19jcHUoYnQtPmxvX3ByaW9yaXR5X3R4X2RlbmllZF9jbnQpLAogCQkJIGFjY3VtX2J0LT5sb19wcmlvcml0eV90eF9kZW5pZWRfY250KTsKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGliLmMKaW5kZXggYTFiNmQyMC4uOWRkOWU2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1saWIuYwpAQCAtMTQyOSw3ICsxNDI5LDcgQEAKIHZvaWQgaXdsX2ZyZWVfdGZkc19pbl9xdWV1ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgaW50IHN0YV9pZCwgaW50IHRpZCwgaW50IGZyZWVkKQogewotCVdBUk5fT04oIXNwaW5faXNfbG9ja2VkKCZwcml2LT5zdGFfbG9jaykpOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPnN0YV9sb2NrKTsKIAogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgPj0gZnJlZWQpCiAJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSAtPSBmcmVlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKaW5kZXggMzVjODZkMi4uMjNlNWM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTMwMCw4ICszMDAsOSBAQAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJaW50IHJldCA9IC1FQUdBSU47CisJdTMyIGxvYWQgPSByc190bF9nZXRfbG9hZChscV9kYXRhLCB0aWQpOwogCi0JaWYgKHJzX3RsX2dldF9sb2FkKGxxX2RhdGEsIHRpZCkgPiBJV0xfQUdHX0xPQURfVEhSRVNIT0xEKSB7CisJaWYgKGxvYWQgPiBJV0xfQUdHX0xPQURfVEhSRVNIT0xEKSB7CiAJCUlXTF9ERUJVR19IVChwcml2LCAiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAogCQkJCXN0YS0+YWRkciwgdGlkKTsKIAkJcmV0ID0gaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQpOwpAQCAtMzExLDEyICszMTIsMTQgQEAKIAkJCSAqIHRoaXMgbWlnaHQgYmUgY2F1c2UgYnkgcmVsb2FkaW5nIGZpcm13YXJlCiAJCQkgKiBzdG9wIHRoZSB0eCBiYSBzZXNzaW9uIGhlcmUKIAkJCSAqLwotCQkJSVdMX0RFQlVHX0hUKHByaXYsICJGYWlsIHN0YXJ0IFR4IGFnZyBvbiB0aWQ6ICVkXG4iLAorCQkJSVdMX0VSUihwcml2LCAiRmFpbCBzdGFydCBUeCBhZ2cgb24gdGlkOiAlZFxuIiwKIAkJCQl0aWQpOwogCQkJaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7CiAJCX0KLQl9IGVsc2UKLQkJSVdMX0VSUihwcml2LCAiRmFpbCBmaW5kaW5nIHZhbGlkIGFnZ3JlZ2F0aW9uIHRpZDogJWRcbiIsIHRpZCk7CisJfSBlbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQWdncmVnYXRpb24gbm90IGVuYWJsZWQgZm9yIHRpZCAlZCAiCisJCQkiYmVjYXVzZSBsb2FkID0gJXVcbiIsIHRpZCwgbG9hZCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMKaW5kZXggNTVhMWIzMS4uZDA0NTAyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXR4LmMKQEAgLTExMTcsNyArMTExNyw3IEBACiAJdTggKmFkZHIgPSBwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEuYWRkcjsKIAlzdHJ1Y3QgaXdsX3RpZF9kYXRhICp0aWRfZGF0YSA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdOwogCi0JV0FSTl9PTighc3Bpbl9pc19sb2NrZWQoJnByaXYtPnN0YV9sb2NrKSk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+c3RhX2xvY2spOwogCiAJc3dpdGNoIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSkgewogCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0RFTEJBOgpAQCAtMTMzMSw3ICsxMzMxLDE0IEBACiAJdGlkID0gYmFfcmVzcC0+dGlkOwogCWFnZyA9ICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZzsKIAlpZiAodW5saWtlbHkoYWdnLT50eHFfaWQgIT0gc2NkX2Zsb3cpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkJBIHNjZF9mbG93ICVkIGRvZXMgbm90IG1hdGNoIHR4cV9pZCAlZFxuIiwKKwkJLyoKKwkJICogRklYTUU6IHRoaXMgaXMgYSB1Q29kZSBidWcgd2hpY2ggbmVlZCB0byBiZSBhZGRyZXNzZWQsCisJCSAqIGxvZyB0aGUgaW5mb3JtYXRpb24gYW5kIHJldHVybiBmb3Igbm93IQorCQkgKiBzaW5jZSBpdCBpcyBwb3NzaWJsZSBoYXBwZW4gdmVyeSBvZnRlbiBhbmQgaW4gb3JkZXIKKwkJICogbm90IHRvIGZpbGwgdGhlIHN5c2xvZywgZG9uJ3QgZW5hYmxlIHRoZSBsb2dnaW5nIGJ5IGRlZmF1bHQKKwkJICovCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LAorCQkJIkJBIHNjZF9mbG93ICVkIGRvZXMgbm90IG1hdGNoIHR4cV9pZCAlZFxuIiwKIAkJCXNjZF9mbG93LCBhZ2ctPnR4cV9pZCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKaW5kZXggODAyNGQ0NC4uOGNjYjZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwpAQCAtMjAwMCw2ICsyMDAwLDcgQEAKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJYm9vbCBzY2FuX2NvbXBsZXRlZCA9IGZhbHNlOwogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKQEAgLTIwMTMsNyArMjAxNCw3IEBACiAJaWYgKHByaXYtPnZpZiA9PSB2aWYpIHsKIAkJcHJpdi0+dmlmID0gTlVMTDsKIAkJaWYgKHByaXYtPnNjYW5fdmlmID09IHZpZikgewotCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCB0cnVlKTsKKwkJCXNjYW5fY29tcGxldGVkID0gdHJ1ZTsKIAkJCXByaXYtPnNjYW5fdmlmID0gTlVMTDsKIAkJCXByaXYtPnNjYW5fcmVxdWVzdCA9IE5VTEw7CiAJCX0KQEAgLTIwMjEsNiArMjAyMiw5IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCisJaWYgKHNjYW5fY29tcGxldGVkKQorCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcsIHRydWUpOworCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCmluZGV4IDVjMmJjZWYuLjBiOTYxYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaApAQCAtNzEsNyArNzEsNyBAQAogI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogc3RhdGljIGlubGluZSB2b2lkIGl3bF9wcmludF9oZXhfZHVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZXZlbCwKLQkJCQkgICAgICB2b2lkICpwLCB1MzIgbGVuKQorCQkJCSAgICAgIGNvbnN0IHZvaWQgKnAsIHUzMiBsZW4pCiB7fQogI2VuZGlmCQkJCS8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCmluZGV4IGFlNzMxOWIuLjRjZjg2NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaApAQCAtMTkzLDcgKzE5Myw3IEBACiAJCV9fZW50cnktPmZyYW1lbGVuID0gYnVmMF9sZW4gKyBidWYxX2xlbjsKIAkJbWVtY3B5KF9fZ2V0X2R5bmFtaWNfYXJyYXkodGZkKSwgdGZkLCB0ZmRsZW4pOwogCQltZW1jcHkoX19nZXRfZHluYW1pY19hcnJheShidWYwKSwgYnVmMCwgYnVmMF9sZW4pOwotCQltZW1jcHkoX19nZXRfZHluYW1pY19hcnJheShidWYxKSwgYnVmMSwgYnVmMF9sZW4pOworCQltZW1jcHkoX19nZXRfZHluYW1pY19hcnJheShidWYxKSwgYnVmMSwgYnVmMV9sZW4pOwogCSksCiAJVFBfcHJpbnRrKCJbJXBdIFRYICUuMnggKCV6dSBieXRlcykiLAogCQkgIF9fZW50cnktPnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggYjBjNmIwNC4uYTRiMzY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAKIHN0YXRpYyBpbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+bXV0ZXgpKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhcnRpbmcgc2Nhbi4uLlxuIik7CiAJc2V0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwppbmRleCA5NTExZjAzLi43ZTA4MjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYwpAQCAtNzczLDcgKzc3Myw3IEBACiAKIGludCBpd2xfcmVzdG9yZV9kZWZhdWx0X3dlcF9rZXlzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnByaXYtPm11dGV4KSk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApOwogfQpAQCAtNzg0LDcgKzc4NCw3IEBACiB7CiAJaW50IHJldDsKIAotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+bXV0ZXgpKTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwcml2LT5tdXRleCk7CiAKIAlJV0xfREVCVUdfV0VQKHByaXYsICJSZW1vdmluZyBkZWZhdWx0IFdFUCBrZXk6IGlkeD0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+a2V5aWR4KTsKQEAgLTgwOCw3ICs4MDgsNyBAQAogewogCWludCByZXQ7CiAKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnByaXYtPm11dGV4KSk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl8xMjggJiYKIAkgICAga2V5Y29uZi0+a2V5bGVuICE9IFdFUF9LRVlfTEVOXzY0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCmluZGV4IDI1ZjkwMjcuLjIzNzJhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCkBAIC02LDYgKzYsOCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMjU3LDYgKzI1OSwyOSBAQAogCXJldHVybiBzaXplb2YocmF0ZV90bHYtPmhlYWRlcikgKyBpOwogfQogCisvKiBBZGQgY29tbW9uIHJhdGVzIGZyb20gYSBUTFYgYW5kIHJldHVybiB0aGUgbmV3IGVuZCBvZiB0aGUgVExWICovCitzdGF0aWMgdTggKgorYWRkX2llX3JhdGVzKHU4ICp0bHYsIGNvbnN0IHU4ICppZSwgaW50ICpucmF0ZXMpCit7CisJaW50IGh3LCBhcCwgYXBfbWF4ID0gaWVbMV07CisJdTggaHdfcmF0ZTsKKworCS8qIEFkdmFuY2UgcGFzdCBJRSBoZWFkZXIgKi8KKwlpZSArPSAyOworCisJbGJzX2RlYl9oZXgoTEJTX0RFQl9BU1NPQywgIkFQIElFIFJhdGVzIiwgKHU4ICopIGllLCBhcF9tYXgpOworCisJZm9yIChodyA9IDA7IGh3IDwgQVJSQVlfU0laRShsYnNfcmF0ZXMpOyBodysrKSB7CisJCWh3X3JhdGUgPSBsYnNfcmF0ZXNbaHddLmJpdHJhdGUgLyA1OworCQlmb3IgKGFwID0gMDsgYXAgPCBhcF9tYXg7IGFwKyspIHsKKwkJCWlmIChod19yYXRlID09IChpZVthcF0gJiAweDdmKSkgeworCQkJCSp0bHYrKyA9IGllW2FwXTsKKwkJCQkqbnJhdGVzID0gKm5yYXRlcyArIDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHRsdjsKK30KIAogLyoKICAqIEFkZHMgYSBUTFYgd2l0aCBhbGwgcmF0ZXMgdGhlIGhhcmR3YXJlICphbmQqIEJTUyBzdXBwb3J0cy4KQEAgLTI2NCw4ICsyODksMTEgQEAKIHN0YXRpYyBpbnQgbGJzX2FkZF9jb21tb25fcmF0ZXNfdGx2KHU4ICp0bHYsIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykKIHsKIAlzdHJ1Y3QgbXJ2bF9pZV9yYXRlc19wYXJhbV9zZXQgKnJhdGVfdGx2ID0gKHZvaWQgKil0bHY7Ci0JY29uc3QgdTggKnJhdGVzX2VpZCA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKGJzcywgV0xBTl9FSURfU1VQUF9SQVRFUyk7Ci0JaW50IG47CisJY29uc3QgdTggKnJhdGVzX2VpZCwgKmV4dF9yYXRlc19laWQ7CisJaW50IG4gPSAwOworCisJcmF0ZXNfZWlkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9TVVBQX1JBVEVTKTsKKwlleHRfcmF0ZXNfZWlkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUyk7CiAKIAkvKgogCSAqIDAxIDAwICAgICAgICAgICAgICAgICAgIFRMVl9UWVBFX1JBVEVTCkBAIC0yNzUsMjYgKzMwMywyMSBAQAogCXJhdGVfdGx2LT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1JBVEVTKTsKIAl0bHYgKz0gc2l6ZW9mKHJhdGVfdGx2LT5oZWFkZXIpOwogCi0JaWYgKCFyYXRlc19laWQpIHsKKwkvKiBBZGQgYmFzaWMgcmF0ZXMgKi8KKwlpZiAocmF0ZXNfZWlkKSB7CisJCXRsdiA9IGFkZF9pZV9yYXRlcyh0bHYsIHJhdGVzX2VpZCwgJm4pOworCisJCS8qIEFkZCBleHRlbmRlZCByYXRlcywgaWYgYW55ICovCisJCWlmIChleHRfcmF0ZXNfZWlkKQorCQkJdGx2ID0gYWRkX2llX3JhdGVzKHRsdiwgZXh0X3JhdGVzX2VpZCwgJm4pOworCX0gZWxzZSB7CisJCWxic19kZWJfYXNzb2MoImFzc29jOiBic3MgaGFkIG5vIGJhc2ljIHJhdGUgSUVcbiIpOwogCQkvKiBGYWxsYmFjazogYWRkIGJhc2ljIDgwMi4xMWIgcmF0ZXMgKi8KIAkJKnRsdisrID0gMHg4MjsKIAkJKnRsdisrID0gMHg4NDsKIAkJKnRsdisrID0gMHg4YjsKIAkJKnRsdisrID0gMHg5NjsKIAkJbiA9IDQ7Ci0JfSBlbHNlIHsKLQkJaW50IGh3LCBhcDsKLQkJdTggYXBfbWF4ID0gcmF0ZXNfZWlkWzFdOwotCQluID0gMDsKLQkJZm9yIChodyA9IDA7IGh3IDwgQVJSQVlfU0laRShsYnNfcmF0ZXMpOyBodysrKSB7Ci0JCQl1OCBod19yYXRlID0gbGJzX3JhdGVzW2h3XS5iaXRyYXRlIC8gNTsKLQkJCWZvciAoYXAgPSAwOyBhcCA8IGFwX21heDsgYXArKykgewotCQkJCWlmIChod19yYXRlID09IChyYXRlc19laWRbYXArMl0gJiAweDdmKSkgewotCQkJCQkqdGx2KysgPSByYXRlc19laWRbYXArMl07Ci0JCQkJCW4rKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KIAl9CiAKIAlyYXRlX3Rsdi0+aGVhZGVyLmxlbiA9IGNwdV90b19sZTE2KG4pOwpAQCAtNDY1LDcgKzQ4OCwxNSBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CiAKIAlic3NzaXplID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZzY2FucmVzcC0+YnNzZGVzY3JpcHRzaXplKTsKLQlucl9zZXRzID0gbGUxNl90b19jcHUocmVzcC0+c2l6ZSk7CisJbnJfc2V0cyA9IGxlMTZfdG9fY3B1KHNjYW5yZXNwLT5ucl9zZXRzKTsKKworCWxic19kZWJfc2Nhbigic2NhbiByZXNwb25zZTogJWQgQlNTcyAoJWQgYnl0ZXMpOyByZXNwIHNpemUgJWQgYnl0ZXNcbiIsCisJCQlucl9zZXRzLCBic3NzaXplLCBsZTE2X3RvX2NwdShyZXNwLT5zaXplKSk7CisKKwlpZiAobnJfc2V0cyA9PSAwKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CiAKIAkvKgogCSAqIFRoZSBnZW5lcmFsIGxheW91dCBvZiB0aGUgc2NhbiByZXNwb25zZSBpcyBkZXNjcmliZWQgaW4gY2hhcHRlcgpAQCAtNjcwLDggKzcwMSwxMyBAQAogCiAJaWYgKHByaXYtPnNjYW5fY2hhbm5lbCA+PSBwcml2LT5zY2FuX3JlcS0+bl9jaGFubmVscykgewogCQkvKiBNYXJrIHNjYW4gZG9uZSAqLwotCQljZmc4MDIxMV9zY2FuX2RvbmUocHJpdi0+c2Nhbl9yZXEsIGZhbHNlKTsKKwkJaWYgKHByaXYtPmludGVybmFsX3NjYW4pCisJCQlrZnJlZShwcml2LT5zY2FuX3JlcSk7CisJCWVsc2UKKwkJCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcSwgZmFsc2UpOworCiAJCXByaXYtPnNjYW5fcmVxID0gTlVMTDsKKwkJcHJpdi0+bGFzdF9zY2FuID0gamlmZmllczsKIAl9CiAKIAkvKiBSZXN0YXJ0IG5ldHdvcmsgKi8KQEAgLTY4MiwxMCArNzE4LDMzIEBACiAKIAlrZnJlZShzY2FuX2NtZCk7CiAKKwkvKiBXYWtlIHVwIGFueXRoaW5nIHdhaXRpbmcgb24gc2NhbiBjb21wbGV0aW9uICovCisJaWYgKHByaXYtPnNjYW5fcmVxID09IE5VTEwpIHsKKwkJbGJzX2RlYl9zY2FuKCJzY2FuOiB3YWtpbmcgdXAgd2FpdGVyc1xuIik7CisJCXdha2VfdXBfYWxsKCZwcml2LT5zY2FuX3EpOworCX0KKwogIG91dF9ub19zY2FuX2NtZDoKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfU0NBTik7CiB9CiAKK3N0YXRpYyB2b2lkIF9pbnRlcm5hbF9zdGFydF9zY2FuKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgYm9vbCBpbnRlcm5hbCwKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9DRkc4MDIxMSk7CisKKwlsYnNfZGViX3NjYW4oInNjYW46IHNzaWRzICVkLCBjaGFubmVscyAlZCwgaWVfbGVuICV6ZFxuIiwKKwkJcmVxdWVzdC0+bl9zc2lkcywgcmVxdWVzdC0+bl9jaGFubmVscywgcmVxdWVzdC0+aWVfbGVuKTsKKworCXByaXYtPnNjYW5fY2hhbm5lbCA9IDA7CisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtfdGhyZWFkLCAmcHJpdi0+c2Nhbl93b3JrLAorCQltc2Vjc190b19qaWZmaWVzKDUwKSk7CisKKwlwcml2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7CisJcHJpdi0+aW50ZXJuYWxfc2NhbiA9IGludGVybmFsOworCisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NGRzgwMjExKTsKK30KIAogc3RhdGljIGludCBsYnNfY2ZnX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzAyLDE4ICs3NjEsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGJzX2RlYl9zY2FuKCJzY2FuOiBzc2lkcyAlZCwgY2hhbm5lbHMgJWQsIGllX2xlbiAlemRcbiIsCi0JCXJlcXVlc3QtPm5fc3NpZHMsIHJlcXVlc3QtPm5fY2hhbm5lbHMsIHJlcXVlc3QtPmllX2xlbik7Ci0KLQlwcml2LT5zY2FuX2NoYW5uZWwgPSAwOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrX3RocmVhZCwgJnByaXYtPnNjYW5fd29yaywKLQkJbXNlY3NfdG9famlmZmllcyg1MCkpOworCV9pbnRlcm5hbF9zdGFydF9zY2FuKHByaXYsIGZhbHNlLCByZXF1ZXN0KTsKIAogCWlmIChwcml2LT5zdXJwcmlzZXJlbW92ZWQpCiAJCXJldCA9IC1FSU87CiAKLQlwcml2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7Ci0KICBvdXQ6CiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ0ZHODAyMTEsICJyZXQgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC0xMDAwLDYgKzEwNTIsNyBAQAogCWludCBzdGF0dXM7CiAJaW50IHJldDsKIAl1OCAqcG9zID0gJihjbWQtPmllYnVmWzBdKTsKKwl1OCAqdG1wOwogCiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX0NGRzgwMjExKTsKIApAQCAtMTA0NCw3ICsxMDk3LDkgQEAKIAlwb3MgKz0gbGJzX2FkZF9jZl9wYXJhbV90bHYocG9zKTsKIAogCS8qIGFkZCByYXRlcyBUTFYgKi8KKwl0bXAgPSBwb3MgKyA0OyAvKiBza2lwIE1hcnZlbGwgSUUgaGVhZGVyICovCiAJcG9zICs9IGxic19hZGRfY29tbW9uX3JhdGVzX3Rsdihwb3MsIGJzcyk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9BU1NPQywgIkNvbW1vbiBSYXRlcyIsIHRtcCwgcG9zIC0gdG1wKTsKIAogCS8qIGFkZCBhdXRoIHR5cGUgVExWICovCiAJaWYgKHByaXYtPmZ3cmVsZWFzZSA+PSAweDA5MDAwMDAwKQpAQCAtMTEyNCw3ICsxMTc5LDYyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKgorX25ld19jb25uZWN0X3NjYW5fcmVxKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQoreworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKmNyZXEgPSBOVUxMOworCWludCBpLCBuX2NoYW5uZWxzID0gMDsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKwl9CisKKwljcmVxID0ga3phbGxvYyhzaXplb2YoKmNyZXEpICsgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSArCisJCSAgICAgICBuX2NoYW5uZWxzICogc2l6ZW9mKHZvaWQgKiksCisJCSAgICAgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWNyZXEpCisJCXJldHVybiBOVUxMOworCisJLyogU1NJRHMgY29tZSBhZnRlciBjaGFubmVscyAqLworCWNyZXEtPnNzaWRzID0gKHZvaWQgKikmY3JlcS0+Y2hhbm5lbHNbbl9jaGFubmVsc107CisJY3JlcS0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJY3JlcS0+bl9zc2lkcyA9IDE7CisKKwkvKiBTY2FuIGFsbCBhdmFpbGFibGUgY2hhbm5lbHMgKi8KKwlpID0gMDsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWludCBqOworCisJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQkvKiBpZ25vcmUgZGlzYWJsZWQgY2hhbm5lbHMgKi8KKwkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdLmZsYWdzICYKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCisJCQljcmVxLT5jaGFubmVsc1tpXSA9ICZ3aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOworCQkJaSsrOworCQl9CisJfQorCWlmIChpKSB7CisJCS8qIFNldCByZWFsIG51bWJlciBvZiBjaGFubmVscyBzcGVjaWZpZWQgaW4gY3JlcS0+Y2hhbm5lbHNbXSAqLworCQljcmVxLT5uX2NoYW5uZWxzID0gaTsKKworCQkvKiBTY2FuIGZvciB0aGUgU1NJRCB3ZSdyZSBnb2luZyB0byBjb25uZWN0IHRvICovCisJCW1lbWNweShjcmVxLT5zc2lkc1swXS5zc2lkLCBzbWUtPnNzaWQsIHNtZS0+c3NpZF9sZW4pOworCQljcmVxLT5zc2lkc1swXS5zc2lkX2xlbiA9IHNtZS0+c3NpZF9sZW47CisJfSBlbHNlIHsKKwkJLyogTm8gY2hhbm5lbHMgZm91bmQuLi4gKi8KKwkJa2ZyZWUoY3JlcSk7CisJCWNyZXEgPSBOVUxMOworCX0KKworCXJldHVybiBjcmVxOworfQogCiBzdGF0aWMgaW50IGxic19jZmdfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpCkBAIC0xMTM2LDM3ICsxMjQ2LDQzIEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOwogCi0JaWYgKHNtZS0+YnNzaWQpIHsKLQkJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgc21lLT5jaGFubmVsLCBzbWUtPmJzc2lkLAotCQkJc21lLT5zc2lkLCBzbWUtPnNzaWRfbGVuLAotCQkJV0xBTl9DQVBBQklMSVRZX0VTUywgV0xBTl9DQVBBQklMSVRZX0VTUyk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogSGVyZSB3ZSBoYXZlIGFuIGltcGVkYW5jZSBtaXNtYXRjaC4gVGhlIGZpcm13YXJlIGNvbW1hbmQKLQkJICogQ01EXzgwMl8xMV9BU1NPQ0lBVEUgYWx3YXlzIG5lZWRzIGEgQlNTSUQsIGl0IGNhbm5vdAotCQkgKiBjb25uZWN0IG90aGVyd2lzZS4gSG93ZXZlciwgZm9yIHRoZSBjb25uZWN0LUFQSSBvZgotCQkgKiBjZmc4MDIxMSB0aGUgYnNzaWQgaXMgcHVyZWx5IG9wdGlvbmFsLiBXZSBkb24ndCBnZXQgb25lLAotCQkgKiBleGNlcHQgdGhlIHVzZXIgc3BlY2lmaWVzIG9uZSBvbiB0aGUgIml3IiBjb21tYW5kIGxpbmUuCi0JCSAqCi0JCSAqIElmIHdlIGRvbid0IGdvdCBvbmUsIHdlIGNvdWxkIGluaXRpYXRlIGEgc2NhbiBhbmQgbG9vawotCQkgKiBmb3IgdGhlIGJlc3QgbWF0Y2hpbmcgY2ZnODAyMTFfYnNzIGVudHJ5LgotCQkgKgotCQkgKiBPciwgYmV0dGVyIHlldCwgbmV0L3dpcmVsZXNzL3NtZS5jIGdldCdzIHJld3JpdHRlbiBpbnRvCi0JCSAqIHNvbWV0aGluZyBtb3JlIGdlbmVyYWxseSB1c2VmdWwuCisJaWYgKCFzbWUtPmJzc2lkKSB7CisJCS8qIFJ1biBhIHNjYW4gaWYgb25lIGlzbid0IGluLXByb2dyZXNzIGFscmVhZHkgYW5kIGlmIHRoZSBsYXN0CisJCSAqIHNjYW4gd2FzIGRvbmUgbW9yZSB0aGFuIDIgc2Vjb25kcyBhZ28uCiAJCSAqLwotCQlsYnNfcHJfZXJyKCJUT0RPOiBubyBCU1Mgc3BlY2lmaWVkXG4iKTsKLQkJcmV0ID0gLUVOT1RTVVBQOwotCQlnb3RvIGRvbmU7CisJCWlmIChwcml2LT5zY2FuX3JlcSA9PSBOVUxMICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHByaXYtPmxhc3Rfc2NhbiArICgyICogSFopKSkgeworCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqY3JlcTsKKworCQkJY3JlcSA9IF9uZXdfY29ubmVjdF9zY2FuX3JlcSh3aXBoeSwgc21lKTsKKwkJCWlmICghY3JlcSkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQlsYnNfZGViX2Fzc29jKCJhc3NvYzogc2Nhbm5pbmcgZm9yIGNvbXBhdGlibGUgQVBcbiIpOworCQkJX2ludGVybmFsX3N0YXJ0X3NjYW4ocHJpdiwgdHJ1ZSwgY3JlcSk7CisJCX0KKworCQkvKiBXYWl0IGZvciBhbnkgaW4tcHJvZ3Jlc3Mgc2NhbiB0byBjb21wbGV0ZSAqLworCQlsYnNfZGViX2Fzc29jKCJhc3NvYzogd2FpdGluZyBmb3Igc2NhbiB0byBjb21wbGV0ZVxuIik7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPnNjYW5fcSwKKwkJCQkJCSAocHJpdi0+c2Nhbl9yZXEgPT0gTlVMTCksCisJCQkJCQkgKDE1ICogSFopKTsKKwkJbGJzX2RlYl9hc3NvYygiYXNzb2M6IHNjYW5uaW5nIGNvbXBldGVkXG4iKTsKIAl9CiAKLQorCS8qIEZpbmQgdGhlIEJTUyB3ZSB3YW50IHVzaW5nIGF2YWlsYWJsZSBzY2FuIHJlc3VsdHMgKi8KKwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdpcGh5LCBzbWUtPmNoYW5uZWwsIHNtZS0+YnNzaWQsCisJCXNtZS0+c3NpZCwgc21lLT5zc2lkX2xlbiwKKwkJV0xBTl9DQVBBQklMSVRZX0VTUywgV0xBTl9DQVBBQklMSVRZX0VTUyk7CiAJaWYgKCFic3MpIHsKLQkJbGJzX3ByX2VycigiYXNzaWNhdGU6IGJzcyAlcE0gbm90IGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJbGJzX3ByX2VycigiYXNzb2M6IGJzcyAlcE0gbm90IGluIHNjYW4gcmVzdWx0c1xuIiwKIAkJCSAgIHNtZS0+YnNzaWQpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGRvbmU7CiAJfQotCWxic19kZWJfYXNzb2MoInRyeWluZyAlcE0iLCBzbWUtPmJzc2lkKTsKKwlsYnNfZGViX2Fzc29jKCJ0cnlpbmcgJXBNXG4iLCBic3MtPmJzc2lkKTsKIAlsYnNfZGViX2Fzc29jKCJjaXBoZXIgMHgleCwga2V5IGluZGV4ICVkLCBrZXkgbGVuICVkXG4iLAogCQkgICAgICBzbWUtPmNyeXB0by5jaXBoZXJfZ3JvdXAsCiAJCSAgICAgIHNtZS0+a2V5X2lkeCwgc21lLT5rZXlfbGVuKTsKQEAgLTEyMjksNyArMTM0NSw3IEBACiAJbGJzX3NldF9yYWRpbyhwcml2LCBwcmVhbWJsZSwgMSk7CiAKIAkvKiBEbyB0aGUgYWN0dWFsIGFzc29jaWF0aW9uICovCi0JbGJzX2Fzc29jaWF0ZShwcml2LCBic3MsIHNtZSk7CisJcmV0ID0gbGJzX2Fzc29jaWF0ZShwcml2LCBic3MsIHNtZSk7CiAKICBkb25lOgogCWlmIChic3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IDNjN2UyNTUuLmYwNjJlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xNjEsNiArMTYxLDExIEBACiAJLyoqIFNjYW5uaW5nICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX3dvcms7CiAJaW50IHNjYW5fY2hhbm5lbDsKKwkvKiBRdWV1ZSBvZiB0aGluZ3Mgd2FpdGluZyBmb3Igc2NhbiBjb21wbGV0aW9uICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2Nhbl9xOworCS8qIFdoZXRoZXIgdGhlIHNjYW4gd2FzIGluaXRpYXRlZCBpbnRlcm5hbGx5IGFuZCBub3QgYnkgY2ZnODAyMTEgKi8KKwlib29sIGludGVybmFsX3NjYW47CisJdW5zaWduZWQgbG9uZyBsYXN0X3NjYW47CiB9OwogCiBleHRlcm4gc3RydWN0IGNtZF9jb25maXJtX3NsZWVwIGNvbmZpcm1fc2xlZXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCAwOGU0ZTM5Li45YzI5ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtODAyLDkgKzgwMSw5IEBACiAJCQkgdW5zaWduZWQgaW50IHZjYywKIAkJCSB2b2lkICpwcml2X2RhdGEpCiB7Ci0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmZy0+aW8ud2luWzBdLmJhc2U7Ci0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IGNmZy0+aW8ud2luWzBdLmxlbjsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOwogCiAJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CkBAIC04MTYsNyArODE1LDcgQEAKIAl9CiAKIAkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIGludCBpZl9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCkBAIC04NTQsNyArODUzLDggQEAKIAkJZ290byBvdXQxOwogCiAJLyogSW5pdGlhbGl6ZSBpbyBhY2Nlc3MgKi8KLQljYXJkLT5pb2Jhc2UgPSBpb3BvcnRfbWFwKHBfZGV2LT5pby5CYXNlUG9ydDEsIHBfZGV2LT5pby5OdW1Qb3J0czEpOworCWNhcmQtPmlvYmFzZSA9IGlvcG9ydF9tYXAocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSkpOwogCWlmICghY2FyZC0+aW9iYXNlKSB7CiAJCWxic19wcl9lcnIoImVycm9yIGluIGlvcG9ydF9tYXBcbiIpOwogCQlyZXQgPSAtRUlPOwpAQCAtODczLDkgKzg3Myw3IEBACiAJfQogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCWxic19kZWJfY3MoImlycSAlZCwgaW8gMHglMDR4LTB4JTA0eFxuIiwKLQkgICAgICAgcF9kZXYtPmlycSwgcF9kZXYtPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgcF9kZXYtPmlvLkJhc2VQb3J0MSArIHBfZGV2LT5pby5OdW1Qb3J0czEgLSAxKTsKKwlsYnNfZGViX2NzKCJpcnEgJWQsIGlvICVwUiIsIHBfZGV2LT5pcnEsIHBfZGV2LT5yZXNvdXJjZVswXSk7CiAKIAkvKgogCSAqIE1vc3Qgb2YgdGhlIGxpYmVydGFzIGNhcmRzIGNhbiBkbyB1bmFsaWduZWQgcmVnaXN0ZXIgYWNjZXNzLCBidXQgc29tZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IDI1ODk2NzEuLjI0OTU4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTcxOSw2ICs3MTksNyBAQAogCXByaXYtPmRlZXBfc2xlZXBfcmVxdWlyZWQgPSAwOwogCXByaXYtPndha2V1cF9kZXZfcmVxdWlyZWQgPSAwOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPmRzX2F3YWtlX3EpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPnNjYW5fcSk7CiAJcHJpdi0+YXV0aHR5cGVfYXV0byA9IDE7CiAJcHJpdi0+aXNfaG9zdF9zbGVlcF9jb25maWd1cmVkID0gMDsKIAlwcml2LT5pc19ob3N0X3NsZWVwX2FjdGl2YXRlZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCmluZGV4IGIxNmQ1ZGIuLmVmNDZhMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTE5MiwyNSArMTkxLDIzIEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAKIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7CiAJfQogCXJldHVybiAwOwpAQCAtMjU4LDcgKzI1NSw4IEBACiAJLyogV2UgaW5pdGlhbGl6ZSB0aGUgaGVybWVzIHN0cnVjdHVyZSBiZWZvcmUgY29tcGxldGluZyBQQ01DSUEKIAkgKiBjb25maWd1cmF0aW9uIGp1c3QgaW4gY2FzZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZ2V0cwogCSAqIGNhbGxlZC4gKi8KLQltZW0gPSBpb3BvcnRfbWFwKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxKTsKKwltZW0gPSBpb3BvcnRfbWFwKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCXJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pKTsKIAlpZiAoIW1lbSkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTI4MCw3ICsyNzgsNyBAQAogCX0KIAogCS8qIFJlZ2lzdGVyIGFuIGludGVyZmFjZSB3aXRoIHRoZSBzdGFjayAqLwotCWlmIChvcmlub2NvX2lmX2FkZChwcml2LCBsaW5rLT5pby5CYXNlUG9ydDEsCisJaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKIAkJCSAgIGxpbmstPmlycSwgTlVMTCkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCmluZGV4IGI1MWE5YWQuLjg3Mzg3N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtODAsMzUgKzc5LDI3IEBACiBzcGVjdHJ1bV9yZXNldChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IGlkbGUpCiB7CiAJaW50IHJldDsKLQljb25mX3JlZ190IHJlZzsKLQl1X2ludCBzYXZlX2NvcjsKKwl1OCBzYXZlX2NvcjsKKwl1OCBjY3NyOwogCiAJLyogRG9pbmcgaXQgaWYgaGFyZHdhcmUgaXMgZ29uZSBpcyBndWFyYW50ZWVkIGNyYXNoICovCiAJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogU2F2ZSBvcmlnaW5hbCBDT1IgdmFsdWUgKi8KLQlyZWcuRnVuY3Rpb24gPSAwOwotCXJlZy5BY3Rpb24gPSBDU19SRUFEOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlyZXQgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCBDSVNSRUdfQ09SLCAmc2F2ZV9jb3IpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwotCXNhdmVfY29yID0gcmVnLlZhbHVlOwogCiAJLyogU29mdC1SZXNldCBjYXJkICovCi0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ09SOwotCXJlZy5WYWx1ZSA9IChzYXZlX2NvciB8IENPUl9TT0ZUX1JFU0VUKTsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJcmV0ID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DT1IsCisJCQkJKHNhdmVfY29yIHwgQ09SX1NPRlRfUkVTRVQpKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAl1ZGVsYXkoMTAwMCk7CiAKIAkvKiBSZWFkIENDU1IgKi8KLQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQlyZWcuT2Zmc2V0ID0gQ0lTUkVHX0NDU1I7Ci0JcmV0ID0gcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyKGxpbmssICZyZWcpOworCXJldCA9IHBjbWNpYV9yZWFkX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DQ1NSLCAmY2Nzcik7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTExNiwxOSArMTA3LDE1IEBACiAJICogU3RhcnQgb3Igc3RvcCB0aGUgZmlybXdhcmUuICBNZW1vcnkgd2lkdGggYml0IHNob3VsZCBiZQogCSAqIHByZXNlcnZlZCBmcm9tIHRoZSB2YWx1ZSB3ZSd2ZSBqdXN0IHJlYWQuCiAJICovCi0JcmVnLkFjdGlvbiA9IENTX1dSSVRFOwotCXJlZy5PZmZzZXQgPSBDSVNSRUdfQ0NTUjsKLQlyZWcuVmFsdWUgPSAoaWRsZSA/IEhDUl9JRExFIDogSENSX1JVTikgfCAocmVnLlZhbHVlICYgSENSX01FTTE2KTsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJY2NzciA9IChpZGxlID8gSENSX0lETEUgOiBIQ1JfUlVOKSB8IChjY3NyICYgSENSX01FTTE2KTsKKwlyZXQgPSBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUobGluaywgQ0lTUkVHX0NDU1IsIGNjc3IpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCXVkZWxheSgxMDAwKTsKIAogCS8qIFJlc3RvcmUgb3JpZ2luYWwgQ09SIGNvbmZpZ3VyYXRpb24gaW5kZXggKi8KLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLk9mZnNldCA9IENJU1JFR19DT1I7Ci0JcmVnLlZhbHVlID0gKHNhdmVfY29yICYgfkNPUl9TT0ZUX1JFU0VUKTsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJcmV0ID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIENJU1JFR19DT1IsCisJCQkJKHNhdmVfY29yICYgfkNPUl9TT0ZUX1JFU0VUKSk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAJdWRlbGF5KDEwMDApOwpAQCAtMjY2LDI1ICsyNTMsMjMgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldikgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMzIsNyArMzE3LDggQEAKIAkvKiBXZSBpbml0aWFsaXplIHRoZSBoZXJtZXMgc3RydWN0dXJlIGJlZm9yZSBjb21wbGV0aW5nIFBDTUNJQQogCSAqIGNvbmZpZ3VyYXRpb24ganVzdCBpbiBjYXNlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBnZXRzCiAJICogY2FsbGVkLiAqLwotCW1lbSA9IGlvcG9ydF9tYXAobGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOworCW1lbSA9IGlvcG9ydF9tYXAobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkpOwogCWlmICghbWVtKQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMzU5LDcgKzM0NSw3IEBACiAJfQogCiAJLyogUmVnaXN0ZXIgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHN0YWNrICovCi0JaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwlpZiAob3Jpbm9jb19pZl9hZGQocHJpdiwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJICAgbGluay0+aXJxLCBOVUxMKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggODIyZjhkYy4uNzFhMTAxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtNDMsNiArNDMsOCBAQAogCXsgUENJX0RFVklDRSgweDEyNjAsIDB4Mzg4NikgfSwKIAkvKiBJbnRlcnNpbCBQUklTTSBYYm93IFdpcmVsZXNzIExBTiBhZGFwdGVyIChTeW1ib2wgQVAtMzAwKSAqLwogCXsgUENJX0RFVklDRSgweDEyNjAsIDB4ZmZmZikgfSwKKwkvKiBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycCBTTUMyODAyVyBXaXJlbGVzcyBQQ0kgKi8KKwl7IFBDSV9ERVZJQ0UoMHgxMGI4LCAweDI4MDIpIH0sCiAJeyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA5YzM4ZmMzLi44ODU2MGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0zMTUsOSArMzE0LDggQEAKIAlsb2NhbC0+ZmluZGVyID0gcF9kZXY7CiAKIAkvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7Ci0JcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gKi8KIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwpAQCAtMzk0LDcgKzM5Miw2IEBACiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAJd2luX3JlcV90IHJlcTsKLQltZW1yZXFfdCBtZW07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTQzMSw5ICs0MjgsNyBAQAogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbGluay0+d2luKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKLQltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKLQltZW0uUGFnZSA9IDA7Ci0JcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLT53aW4sICZtZW0pOworCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0+d2luLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAlsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKQEAgLTQ0Nyw5ICs0NDIsNyBAQAogCXJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCAmcmVxLCAmbG9jYWwtPnJtZW1faGFuZGxlKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKLQltZW0uQ2FyZE9mZnNldCA9IDB4ODAwMDsKLQltZW0uUGFnZSA9IDA7Ci0JcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pOworCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbG9jYWwtPnJtZW1faGFuZGxlLCAweDgwMDApOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCWxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtNDYzLDkgKzQ1Niw3IEBACiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KGxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwotCW1lbS5DYXJkT2Zmc2V0ID0gMHgwMDAwOwotCW1lbS5QYWdlID0gMDsKLQlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxvY2FsLT5hbWVtX2hhbmRsZSwgJm1lbSk7CisJcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsb2NhbC0+YW1lbV9oYW5kbGUsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkOwogCWxvY2FsLT5hbWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwpAQCAtNzkzLDcgKzc4NCw2IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7CiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICJyYXlfcmVsZWFzZVxuIik7CiAKQEAgLTgwMiwxMyArNzkyLDYgQEAKIAlpb3VubWFwKGxvY2FsLT5zcmFtKTsKIAlpb3VubWFwKGxvY2FsLT5ybWVtKTsKIAlpb3VubWFwKGxvY2FsLT5hbWVtKTsKLQkvKiBEbyBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCi0JaSA9IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsb2NhbC0+YW1lbV9oYW5kbGUpOwotCWlmIChpICE9IDApCi0JCWRldl9kYmcoJmxpbmstPmRldiwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLCBpKTsKLQlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxvY2FsLT5ybWVtX2hhbmRsZSk7Ci0JaWYgKGkgIT0gMCkKLQkJZGV2X2RiZygmbGluay0+ZGV2LCAiUmVsZWFzZVdpbmRvdyhsb2NhbC0+cm1lbSkgcmV0ID0gJXhcbiIsIGkpOwogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAogCWRldl9kYmcoJmxpbmstPmRldiwgInJheV9yZWxlYXNlIGVuZGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKaW5kZXggMTliMjYyZS4uNjNjMmNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYwpAQCAtMjQwLDE2ICsyNDAsMTYgQEAKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIHBjaV9uYW1lKHBjaV9kZXYpKTsKLQlpZiAocmV0dmFsKSB7Ci0JCUVSUk9SX1BST0JFKCJQQ0kgcmVxdWVzdCByZWdpb25zIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQogCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJRVJST1JfUFJPQkUoIkVuYWJsZSBkZXZpY2UgZmFpbGVkLlxuIik7Ci0JCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbnM7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2lfZGV2LCBwY2lfbmFtZShwY2lfZGV2KSk7CisJaWYgKHJldHZhbCkgeworCQlFUlJPUl9QUk9CRSgiUENJIHJlcXVlc3QgcmVnaW9ucyBmYWlsZWQuXG4iKTsKKwkJZ290byBleGl0X2Rpc2FibGVfZGV2aWNlOwogCX0KIAogCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwpAQCAtMjYwLDE0ICsyNjAsMTQgQEAKIAlpZiAoZG1hX3NldF9tYXNrKCZwY2lfZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CiAJCUVSUk9SX1BST0JFKCJQQ0kgRE1BIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJcmV0dmFsID0gLUVJTzsKLQkJZ290byBleGl0X2Rpc2FibGVfZGV2aWNlOworCQlnb3RvIGV4aXRfcmVsZWFzZV9yZWdpb25zOwogCX0KIAogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgcnQyeDAwX2RldiksIG9wcy0+aHcpOwogCWlmICghaHcpIHsKIAkJRVJST1JfUFJPQkUoIkZhaWxlZCB0byBhbGxvY2F0ZSBoYXJkd2FyZS5cbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIGV4aXRfZGlzYWJsZV9kZXZpY2U7CisJCWdvdG8gZXhpdF9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIGh3KTsKQEAgLTMwMCwxMyArMzAwLDEyIEBACiBleGl0X2ZyZWVfZGV2aWNlOgogCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKIAotZXhpdF9kaXNhYmxlX2RldmljZToKLQlpZiAocmV0dmFsICE9IC1FQlVTWSkKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwotCiBleGl0X3JlbGVhc2VfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOwogCitleGl0X2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIAogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKaW5kZXggMWQ4MTc4NS4uYjUwYzM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYwpAQCAtNjk1LDYgKzY5NSw4IEBACiAKIAkvKiBncmFiIGEgZnJlc2ggYmVhY29uICovCiAJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LCB2aWYpOworCWlmICghc2tiKQorCQlnb3RvIHJlc2NoZWQ7CiAKIAkvKgogCSAqIHVwZGF0ZSBiZWFjb24gdGltZXN0YW1wIHcvIFRTRiB2YWx1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKaW5kZXggOTZkMjVmYi4uNGNiOTljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCkBAIC0xNjAsOSArMTYwLDggQEAKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdCwgJm0pOwogCiAJc3BpX3N5bmMod2xfdG9fc3BpKHdsKSwgJm0pOwotCWtmcmVlKGNtZCk7Ci0KIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGkgaW5pdCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKKwlrZnJlZShjbWQpOwogfQogCiAjZGVmaW5lIFdMMTI3MV9CVVNZX1dPUkRfVElNRU9VVCAxMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDFfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCmluZGV4IDM3NmM2YjkuLmExY2MyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jCkBAIC00OCw3ICs0OCw2IEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTg5LDEzICs4OCw2IEBACiBzdGF0aWMgaW50IHdsMzUwMV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogc3RhdGljIHZvaWQgd2wzNTAxX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCi0vKgotICogVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwotICogZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KLSAqIGRhdGFiYXNlLgotICovCi1zdGF0aWMgZGV2X2luZm9fdCB3bDM1MDFfZGV2X2luZm8gPSAid2wzNTAxX2NzIjsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CiAJaW50IG1pbiwgbWF4LCBkZWZsdDsKQEAgLTE0MjEsNyArMTQxMyw3IEBACiAKIHN0YXRpYyB2b2lkIHdsMzUwMV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewotCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCB3bDM1MDFfZGV2X2luZm8sIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgIndsMzUwMV9jcyIsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CkBAIC0xODkyLDkgKzE4ODQsOCBAQAogCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpczsKIAogCS8qIFRoZSBpbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIElPIHBvcnQgbWFwcGluZyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEJPSAxNjsKLQlwX2Rldi0+aW8uQXR0cmlidXRlczEJPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMJPSA1OworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kCT0gMTY7CisJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncwk9IElPX0RBVEFfUEFUSF9XSURUSF84OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMJPSBDT05GX0VOQUJMRV9JUlE7CkBAIC0xOTQwLDEzICsxOTMxLDE0IEBACiAJLyogVHJ5IGFsbG9jYXRpbmcgSU8gcG9ydHMuICBUaGlzIHRyaWVzIGEgZmV3IGZpeGVkIGFkZHJlc3Nlcy4gIElmIHlvdQogCSAqIHdhbnQsIHlvdSBjYW4gYWxzbyByZWFkIHRoZSBjYXJkJ3MgY29uZmlnIHRhYmxlIHRvIHBpY2sgYWRkcmVzc2VzIC0tCiAJICogc2VlIHRoZSBzZXJpYWwgZHJpdmVyIGZvciBhbiBleGFtcGxlLiAqLworCWxpbmstPmlvX2xpbmVzID0gNTsKIAogCWZvciAoaiA9IDB4MjgwOyBqIDwgMHg0MDA7IGogKz0gMHgyMCkgewogCQkvKiBUaGUgJ14weDMwMCcgaXMgc28gdGhhdCB3ZSBwcm9iZSAweDMwMC0weDNmZiBmaXJzdCwgdGhlbgogCQkgKiAweDIwMC0weDJmZiwgYW5kIHNvIG9uLCBiZWNhdXNlIHRoaXMgc2VlbXMgc2FmZXIgKi8KLQkJbGluay0+aW8uQmFzZVBvcnQxID0gajsKLQkJbGluay0+aW8uQmFzZVBvcnQyID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMDsKLQkJaSA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCA9IGo7CisJCWxpbmstPnJlc291cmNlWzFdLT5zdGFydCA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4MTA7CisJCWkgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAkJaWYgKGkgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTE5NjgsNyArMTk2MCw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJZGV2LT5pcnEgPSBsaW5rLT5pcnE7Ci0JZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5iYXNlX2FkZHIgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmbGluay0+ZGV2KTsKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJ3bDM1MDFfY3M6IHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwppbmRleCA1ZGY2MGE2Li5kZDg3ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCSAqIGVjaG8gMSA+L2Rldi9vcHJvZmlsZS9lbmFibGUKIAkgKi8KIAotCXJldHVybiAwOworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIAogZmFpbDoKIAlkY29va2llX3VucmVnaXN0ZXIoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKQEAgLTIwNSw0ICsyMDUsNSBAQAogCS5vcGVuCQk9IGV2ZW50X2J1ZmZlcl9vcGVuLAogCS5yZWxlYXNlCT0gZXZlbnRfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQJCT0gZXZlbnRfYnVmZmVyX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2NzLmMKaW5kZXggZmQ4Y2ZlOS4uMjNlNTBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfY3MuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9jcy5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnRfcGMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTEwMiw4ICsxMDEsOCBAQAogICAgIGxpbmstPnByaXYgPSBpbmZvOwogICAgIGluZm8tPnBfZGV2ID0gbGluazsKIAotICAgIGxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKyAgICBsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisgICAgbGluay0+cmVzb3VyY2VbMV0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF84OwogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApAQCAtMTQ0LDE2ICsxNDMsMTYgQEAKIHsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CiAJCWlmIChlcHBfbW9kZSkKIAkJCXBfZGV2LT5jb25mLkNvbmZpZ0luZGV4IHw9IEZPUkNFX0VQUF9NT0RFOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47Ci0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPT0gMikgewotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9Ci0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSAhPSAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3OCwxMiArMTc3LDE0IEBACiAgICAgaWYgKHJldCkKIAkgICAgZ290byBmYWlsZWQ7CiAKLSAgICBwID0gcGFycG9ydF9wY19wcm9iZV9wb3J0KGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQyLAorICAgIHAgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgICAgbGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0LAogCQkJICAgICAgbGluay0+aXJxLCBQQVJQT1JUX0RNQV9OT05FLAogCQkJICAgICAgJmxpbmstPmRldiwgSVJRRl9TSEFSRUQpOwogICAgIGlmIChwID09IE5VTEwpIHsKIAlwcmludGsoS0VSTl9OT1RJQ0UgInBhcnBvcnRfY3M6IHBhcnBvcnRfcGNfcHJvYmVfcG9ydCgpIGF0ICIKLQkgICAgICAgIjB4JTN4LCBpcnEgJXUgZmFpbGVkXG4iLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJICAgICAgICIweCUzeCwgaXJxICV1IGZhaWxlZFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCkgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCSAgICAgICBsaW5rLT5pcnEpOwogCWdvdG8gZmFpbGVkOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKaW5kZXggNDBlMjA4ZC4uZjAxZTI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfc2VyaWFsLmMKQEAgLTM0Miw3ICszNDIsNiBAQAogCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCSJQQ0kgcGFyYWxsZWwgcG9ydCBkZXRlY3RlZDogSS9PIGF0ICUjbHgoJSNseCksIElSUSAlZFxuIiwKIAkJCQlpb19sbywgaW9faGksIGlycSk7Ci0JCQlpcnEgPSBQQVJQT1JUX0lSUV9OT05FOwogCQl9CiAJCXBvcnQgPSBwYXJwb3J0X3BjX3Byb2JlX3BvcnQgKGlvX2xvLCBpb19oaSwgaXJxLAogCQkJICAgICAgUEFSUE9SVF9ETUFfTk9ORSwgJmRldi0+ZGV2LCBJUlFGX1NIQVJFRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCmluZGV4IDBiNTE4NTcuLmRjMWFhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC01NSw2ICs1NSw5IEBACiAjCiBvYmotJChDT05GSUdfQUNQSSkgICAgKz0gcGNpLWFjcGkubwogCisjIFNNQklPUyBwcm92aWRlZCBmaXJtd2FyZSBpbnN0YW5jZSBhbmQgbGFiZWxzCitvYmotJChDT05GSUdfRE1JKSAgICArPSBwY2ktbGFiZWwubworCiAjIENhcmRidXMgJiBDb21wYWN0UENJIHVzZSBzZXR1cC1idXMKIG9iai0kKENPTkZJR19IT1RQTFVHKSArPSBzZXR1cC1idXMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDYyOGVhMjAuLjdmMGFmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC01Niw3ICs1Niw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUENJX0JSSURHRV9SRVNPVVJDRV9OVU07IGkrKykKLQkJYnVzLT5yZXNvdXJjZVtpXSA9IDA7CisJCWJ1cy0+cmVzb3VyY2VbaV0gPSBOVUxMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1c19yZXMsIHRtcCwgJmJ1cy0+cmVzb3VyY2VzLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZidXNfcmVzLT5saXN0KTsKQEAgLTI0MCw2ICsyNDAsOCBAQAogCQlpZiAoZGV2LT5zdWJvcmRpbmF0ZSkgewogCQkJaWYgKCFwY2lfaXNfZW5hYmxlZChkZXYpKSB7CiAJCQkJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIGVuYWJsaW5nIGJyaWRnZSAoJWQpLCBjb250aW51aW5nXG4iLCByZXR2YWwpOwogCQkJCXBjaV9zZXRfbWFzdGVyKGRldik7CiAJCQl9CiAJCQlwY2lfZW5hYmxlX2JyaWRnZXMoZGV2LT5zdWJvcmRpbmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCmluZGV4IDUzMTdlNGQ3Li4xN2QxMGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCiAJLyogQWRkIGV4aXN0aW5nIGRldmljZXMgKi8KLQl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZGV2KSkpCisJZm9yX2VhY2hfcGNpX2RldihwZGV2KQogCQlsZWdhY3lfYWRkX3Nsb3QocGRldik7CiAKIAkvKiBCZSBhbGVydGVkIG9mIGFueSBuZXcgb25lcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwppbmRleCAyZmNlNzI2Li5hNDAzMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCQkJCSAiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKIAkJCQkJIHBjaV9uYW1lKHRlbXApKTsKIAkJCQlwY2lfZGV2X3B1dCh0ZW1wKTsKLQkJCQlyYyA9IEVJTlZBTDsKKwkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKaW5kZXggNWY1ZThkMi4uZDM5ODVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfaHBjLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogI2RlZmluZSBDT05fUEZBVUxUX0lOVFJfTUFTSwkoMSA8PCAyOCkKICNkZWZpbmUgTVJMX0NIQU5HRV9TRVJSX01BU0sJKDEgPDwgMjkpCiAjZGVmaW5lIENPTl9QRkFVTFRfU0VSUl9NQVNLCSgxIDw8IDMwKQotI2RlZmluZSBTTE9UX1JFR19SU1ZEWl9NQVNLCSgxIDw8IDE1KSB8ICg3IDw8IDIxKQorI2RlZmluZSBTTE9UX1JFR19SU1ZEWl9NQVNLCSgoMSA8PCAxNSkgfCAoNyA8PCAyMSkpCiAKIC8qCiAgKiBTSFBDIENvbW1hbmQgQ29kZSBkZWZpbml0bmlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKaW5kZXggOGMzZDMyMS4uYTJjY2ZjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKQEAgLTYwLDEyICs2MCw2IEBACiAJCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgZm4pKTsKIAkJaWYgKCFkZXYpCiAJCQljb250aW51ZTsKLQkJaWYgKChkZXYtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQljdHJsX2VycihjdHJsLCAiQ2Fubm90IGhvdC1hZGQgZGlzcGxheSBkZXZpY2UgJXNcbiIsCi0JCQkJIHBjaV9uYW1lKGRldikpOwotCQkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCWlmICgoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB8fAogCQkJCShkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKSkgewogCQkJLyogRmluZCBhbiB1bnVzZWQgYnVzIG51bWJlciBmb3IgdGhlIG5ldyBicmlkZ2UgKi8KQEAgLTExNCwxNyArMTA4LDExIEBACiAJY3RybF9kYmcoY3RybCwgIiVzOiBkb21haW46YnVzOmRldiA9ICUwNHg6JTAyeDolMDJ4XG4iLAogCQkgX19mdW5jX18sIHBjaV9kb21haW5fbnIocGFyZW50KSwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAotCWZvciAoaj0wOyBqPDggOyBqKyspIHsKLQkJc3RydWN0IHBjaV9kZXYqIHRlbXAgPSBwY2lfZ2V0X3Nsb3QocGFyZW50LAorCWZvciAoaiA9IDA7IGogPCA4IDsgaisrKSB7CisJCXN0cnVjdCBwY2lfZGV2ICp0ZW1wID0gcGNpX2dldF9zbG90KHBhcmVudCwKIAkJCQkocF9zbG90LT5kZXZpY2UgPDwgMykgfCBqKTsKIAkJaWYgKCF0ZW1wKQogCQkJY29udGludWU7Ci0JCWlmICgodGVtcC0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKLQkJCWN0cmxfZXJyKGN0cmwsICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAotCQkJCSBwY2lfbmFtZSh0ZW1wKSk7Ci0JCQlwY2lfZGV2X3B1dCh0ZW1wKTsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCWlmICh0ZW1wLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh0ZW1wLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY3RsKTsKIAkJCWlmIChiY3RsICYgUENJX0JSSURHRV9DVExfVkdBKSB7CkBAIC0xMzIsNyArMTIwLDggQEAKIAkJCQkJICJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAogCQkJCQkgcGNpX25hbWUodGVtcCkpOwogCQkJCXBjaV9kZXZfcHV0KHRlbXApOwotCQkJCWNvbnRpbnVlOworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodGVtcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCBjOTE3MWJlLi5iMGRlNTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTMwMzAsNiArMzAzMCwzNCBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIHF1aXJrX2lvYXRfc25iX2xvY2FsX2lvbW11KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKwl1MzIgdnRiYXI7CisJaW50IHJjOworCisJLyogV2Uga25vdyB0aGF0IHRoaXMgZGV2aWNlIG9uIHRoaXMgY2hpcHNldCBoYXMgaXRzIG93biBJT01NVS4KKwkgKiBJZiB3ZSBmaW5kIGl0IHVuZGVyIGEgZGlmZmVyZW50IElPTU1VLCB0aGVuIHRoZSBCSU9TIGlzIGx5aW5nCisJICogdG8gdXMuIEhvcGUgdGhhdCB0aGUgSU9NTVUgZm9yIHRoaXMgZGV2aWNlIGlzIGFjdHVhbGx5CisJICogZGlzYWJsZWQsIGFuZCBpdCBuZWVkcyBubyB0cmFuc2xhdGlvbi4uLgorCSAqLworCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwZGV2LT5idXMsIFBDSV9ERVZGTigwLCAwKSwgMHhiMCwgJnZ0YmFyKTsKKwlpZiAocmMpIHsKKwkJLyogImNhbid0IiBoYXBwZW4gKi8KKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZhaWxlZCB0byBydW4gdnQtZCBxdWlya1xuIik7CisJCXJldHVybjsKKwl9CisJdnRiYXIgJj0gMHhmZmZmMDAwMDsKKworCS8qIHdlIGtub3cgdGhhdCB0aGUgdGhpcyBpb21tdSBzaG91bGQgYmUgYXQgb2Zmc2V0IDB4YTAwMCBmcm9tIHZ0YmFyICovCisJZHJoZCA9IGRtYXJfZmluZF9tYXRjaGVkX2RyaGRfdW5pdChwZGV2KTsKKwlpZiAoV0FSTl9UQUlOVF9PTkNFKCFkcmhkIHx8IGRyaGQtPnJlZ19iYXNlX2FkZHIgLSB2dGJhciAhPSAweGEwMDAsCisJCQkgICAgVEFJTlRfRklSTVdBUkVfV09SS0FST1VORCwKKwkJCSAgICAiQklPUyBhc3NpZ25lZCBpbmNvcnJlY3QgVlQtZCB1bml0IGZvciBJbnRlbChSKSBRdWlja0RhdGEgVGVjaG5vbG9neSBkZXZpY2VcbiIpKQorCQlwZGV2LT5kZXYuYXJjaGRhdGEuaW9tbXUgPSBEVU1NWV9ERVZJQ0VfRE9NQUlOX0lORk87Cit9CitERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUX1NOQiwgcXVpcmtfaW9hdF9zbmJfbG9jYWxfaW9tbXUpOworCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcyh2b2lkKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKQEAgLTM2OTgsNiArMzcyNiw4IEBACiAKIAlpZiAoY2FwID09IElPTU1VX0NBUF9DQUNIRV9DT0hFUkVOQ1kpCiAJCXJldHVybiBkbWFyX2RvbWFpbi0+aW9tbXVfc25vb3Bpbmc7CisJaWYgKGNhcCA9PSBJT01NVV9DQVBfSU5UUl9SRU1BUCkKKwkJcmV0dXJuIGludHJfcmVtYXBwaW5nX2VuYWJsZWQ7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDEzMTVhYzYuLjE2OTRhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMzExLDggKzMxMSw4IEBACiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAJaXJ0ZSA9ICZpb21tdS0+aXJfdGFibGUtPmJhc2VbaW5kZXhdOwogCi0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopJmlydGUtPmxvdywgaXJ0ZV9tb2RpZmllZC0+bG93KTsKLQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikmaXJ0ZS0+aGlnaCwgaXJ0ZV9tb2RpZmllZC0+aGlnaCk7CisJc2V0XzY0Yml0KCZpcnRlLT5sb3csIGlydGVfbW9kaWZpZWQtPmxvdyk7CisJc2V0XzY0Yml0KCZpcnRlLT5oaWdoLCBpcnRlX21vZGlmaWVkLT5oaWdoKTsKIAlfX2lvbW11X2ZsdXNoX2NhY2hlKGlvbW11LCBpcnRlLCBzaXplb2YoKmlydGUpKTsKIAogCXJjID0gcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgMCk7CkBAIC0zOTMsOCArMzkzLDggQEAKIAllbmQgPSBzdGFydCArICgxIDw8IGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsKIAogCWZvciAoZW50cnkgPSBzdGFydDsgZW50cnkgPCBlbmQ7IGVudHJ5KyspIHsKLQkJc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopJmVudHJ5LT5sb3csIDApOwotCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKikmZW50cnktPmhpZ2gsIDApOworCQlzZXRfNjRiaXQoJmVudHJ5LT5sb3csIDApOworCQlzZXRfNjRiaXQoJmVudHJ5LT5oaWdoLCAwKTsKIAl9CiAKIAlyZXR1cm4gcWlfZmx1c2hfaWVjKGlvbW11LCBpbmRleCwgaXJxX2lvbW11LT5pcnRlX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCA3N2I2OGVhLi42OWI3YmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtMTk2LDYgKzE5Niw5IEBACiB2b2lkIHJlYWRfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKKworCUJVR19PTihlbnRyeS0+ZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCk7CisKIAlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgewogCQl2b2lkIF9faW9tZW0gKmJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKIAkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKQEAgLTIyOSwxMCArMjMyLDMyIEBACiAJcmVhZF9tc2lfbXNnX2Rlc2MoZGVzYywgbXNnKTsKIH0KIAordm9pZCBnZXRfY2FjaGVkX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeSA9IGdldF9pcnFfZGVzY19tc2koZGVzYyk7CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgY2FjaGUgaXMgdmFsaWQsIGFzc3VtaW5nIHRoYXQKKwkgKiB2YWxpZCBtZXNzYWdlcyBhcmUgbm90IGFsbC16ZXJvZXMuICovCisJQlVHX09OKCEoZW50cnktPm1zZy5hZGRyZXNzX2hpIHwgZW50cnktPm1zZy5hZGRyZXNzX2xvIHwKKwkJIGVudHJ5LT5tc2cuZGF0YSkpOworCisJKm1zZyA9IGVudHJ5LT5tc2c7Cit9CisKK3ZvaWQgZ2V0X2NhY2hlZF9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWdldF9jYWNoZWRfbXNpX21zZ19kZXNjKGRlc2MsIG1zZyk7Cit9CisKIHZvaWQgd3JpdGVfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgeworCisJaWYgKGVudHJ5LT5kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKSB7CisJCS8qIERvbid0IHRvdWNoIHRoZSBoYXJkd2FyZSBub3cgKi8KKwl9IGVsc2UgaWYgKGVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXgpIHsKIAkJdm9pZCBfX2lvbWVtICpiYXNlOwogCQliYXNlID0gZW50cnktPm1hc2tfYmFzZSArCiAJCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAqIFBDSV9NU0lYX0VOVFJZX1NJWkU7CkBAIC00MzUsNyArNDYwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm1zaXhfbWFwX3JlZ2lvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBwb3MsCiAJCQkJCQkJdW5zaWduZWQgbnJfZW50cmllcykKIHsKLQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOwogCXUzMiB0YWJsZV9vZmZzZXQ7CiAJdTggYmlyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCAxYWI5OGJiLi4yNGUxOWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTI5NiwxNCArMjk2LDEyIEBACiAJCWlmICghZGV2LT53YWtldXAucnVuX3dha2VfY291bnQrKykgewogCQkJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYsIEFDUElfU1RBVEVfUzApOwogCQkJYWNwaV9lbmFibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCUFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIpOwogCQl9CiAJfSBlbHNlIGlmIChkZXYtPndha2V1cC5ydW5fd2FrZV9jb3VudCA+IDApIHsKIAkJaWYgKCEtLWRldi0+d2FrZXVwLnJ1bl93YWtlX2NvdW50KSB7CiAJCQlhY3BpX2Rpc2FibGVfZ3BlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCSBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCQkgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKKwkJCQkJIGRldi0+d2FrZXVwLmdwZV9udW1iZXIpOwogCQkJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2VfcG93ZXIoZGV2KTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggZjlhMGFlYy4uOGE2Zjc5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMjg5LDggKzI4OSwyNiBAQAogc3RhdGljIGxvbmcgbG9jYWxfcGNpX3Byb2JlKHZvaWQgKl9kZGkpCiB7CiAJc3RydWN0IGRydl9kZXZfYW5kX2lkICpkZGkgPSBfZGRpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkZGktPmRldi0+ZGV2OworCWludCByYzsKIAotCXJldHVybiBkZGktPmRydi0+cHJvYmUoZGRpLT5kZXYsIGRkaS0+aWQpOworCS8qIFVuYm91bmQgUENJIGRldmljZXMgYXJlIGFsd2F5cyBzZXQgdG8gZGlzYWJsZWQgYW5kIHN1c3BlbmRlZC4KKwkgKiBEdXJpbmcgcHJvYmUsIHRoZSBkZXZpY2UgaXMgc2V0IHRvIGVuYWJsZWQgYW5kIGFjdGl2ZSBhbmQgdGhlCisJICogdXNhZ2UgY291bnQgaXMgaW5jcmVtZW50ZWQuICBJZiB0aGUgZHJpdmVyIHN1cHBvcnRzIHJ1bnRpbWUgUE0sCisJICogaXQgc2hvdWxkIGNhbGwgcG1fcnVudGltZV9wdXRfbm9pZGxlKCkgaW4gaXRzIHByb2JlIHJvdXRpbmUgYW5kCisJICogcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoKSBpbiBpdHMgcmVtb3ZlIHJvdXRpbmUuCisJICovCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOworCisJcmMgPSBkZGktPmRydi0+cHJvYmUoZGRpLT5kZXYsIGRkaS0+aWQpOworCWlmIChyYykgeworCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKwkJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCX0KKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2NhbGxfcHJvYmUoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IHBjaV9kZXYgKmRldiwKQEAgLTM2OSwxMSArMzg3LDE5IEBACiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7CiAKIAlpZiAoZHJ2KSB7Ci0JCWlmIChkcnYtPnJlbW92ZSkKKwkJaWYgKGRydi0+cmVtb3ZlKSB7CisJCQlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CiAJCQlkcnYtPnJlbW92ZShwY2lfZGV2KTsKKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCQl9CiAJCXBjaV9kZXYtPmRyaXZlciA9IE5VTEw7CiAJfQogCisJLyogVW5kbyB0aGUgcnVudGltZSBQTSBzZXR0aW5ncyBpbiBsb2NhbF9wY2lfcHJvYmUoKSAqLworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCiAJLyoKIAkgKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIG9uLCBzZXQgdGhlIHBvd2VyIHN0YXRlIGFzICJ1bmtub3duIiwKIAkgKiBzaW5jZSBpdCBtaWdodCBjaGFuZ2UgYnkgdGhlIG5leHQgdGltZSB3ZSBsb2FkIHRoZSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktbGFiZWwuYyBiL2RyaXZlcnMvcGNpL3BjaS1sYWJlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzBhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2ktbGFiZWwuYwpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIFB1cnBvc2U6IEV4cG9ydCB0aGUgZmlybXdhcmUgaW5zdGFuY2UgYW5kIGxhYmVsIGFzc29jaWF0ZWQgd2l0aAorICogYSBwY2kgZGV2aWNlIHRvIHN5c2ZzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRGVsbCBJbmMuCisgKiBieSBOYXJlbmRyYSBLIDxOYXJlbmRyYV9LQGRlbGwuY29tPiwKKyAqIEpvcmRhbiBIYXJncmF2ZSA8Sm9yZGFuX0hhcmdyYXZlQGRlbGwuY29tPgorICoKKyAqIFNNQklPUyBkZWZpbmVzIHR5cGUgNDEgZm9yIG9uYm9hcmQgcGNpIGRldmljZXMuIFRoaXMgY29kZSByZXRyaWV2ZXMKKyAqIHRoZSBpbnN0YW5jZSBudW1iZXIgYW5kIHN0cmluZyBmcm9tIHRoZSB0eXBlIDQxIHJlY29yZCBhbmQgZXhwb3J0cworICogaXQgdG8gc3lzZnMuCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vbGludXguZGVsbC5jb20vd2lraS9pbmRleC5waHAvT3NzL2xpYm5ldGRldm5hbWUgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlICJwY2kuaCIKKworZW51bSBzbWJpb3NfYXR0cl9lbnVtIHsKKwlTTUJJT1NfQVRUUl9OT05FID0gMCwKKwlTTUJJT1NfQVRUUl9MQUJFTF9TSE9XLAorCVNNQklPU19BVFRSX0lOU1RBTkNFX1NIT1csCit9OworCitzdGF0aWMgbW9kZV90CitmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNoYXIgKmJ1ZiwKKwkJCSAgICBlbnVtIHNtYmlvc19hdHRyX2VudW0gYXR0cmlidXRlKQoreworCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkbWk7CisJc3RydWN0IGRtaV9kZXZfb25ib2FyZCAqZG9uYm9hcmQ7CisJaW50IGJ1czsKKwlpbnQgZGV2Zm47CisKKwlidXMgPSBwZGV2LT5idXMtPm51bWJlcjsKKwlkZXZmbiA9IHBkZXYtPmRldmZuOworCisJZG1pID0gTlVMTDsKKwl3aGlsZSAoKGRtaSA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfREVWX09OQk9BUkQsCisJCQkJICAgICAgTlVMTCwgZG1pKSkgIT0gTlVMTCkgeworCQlkb25ib2FyZCA9IGRtaS0+ZGV2aWNlX2RhdGE7CisJCWlmIChkb25ib2FyZCAmJiBkb25ib2FyZC0+YnVzID09IGJ1cyAmJgorCQkJCQlkb25ib2FyZC0+ZGV2Zm4gPT0gZGV2Zm4pIHsKKwkJCWlmIChidWYpIHsKKwkJCQlpZiAoYXR0cmlidXRlID09IFNNQklPU19BVFRSX0lOU1RBTkNFX1NIT1cpCisJCQkJCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkJCQkJICIlZFxuIiwKKwkJCQkJCQkgZG9uYm9hcmQtPmluc3RhbmNlKTsKKwkJCQllbHNlIGlmIChhdHRyaWJ1dGUgPT0gU01CSU9TX0FUVFJfTEFCRUxfU0hPVykKKwkJCQkJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCQkJCQkgIiVzXG4iLAorCQkJCQkJCSBkbWktPm5hbWUpOworCQkJfQorCQkJcmV0dXJuIHN0cmxlbihkbWktPm5hbWUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgbW9kZV90CitzbWJpb3NfaW5zdGFuY2Vfc3RyaW5nX2V4aXN0KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICBpbnQgbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCXJldHVybiBmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcocGRldiwgTlVMTCwgU01CSU9TX0FUVFJfTk9ORSkgPworCQkJCQkgICBTX0lSVUdPIDogMDsKK30KKworc3RhdGljIHNzaXplX3QKK3NtYmlvc2xhYmVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlyZXR1cm4gZmluZF9zbWJpb3NfaW5zdGFuY2Vfc3RyaW5nKHBkZXYsIGJ1ZiwKKwkJCQkJICAgU01CSU9TX0FUVFJfTEFCRUxfU0hPVyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzbWJpb3NpbnN0YW5jZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCXJldHVybiBmaW5kX3NtYmlvc19pbnN0YW5jZV9zdHJpbmcocGRldiwgYnVmLAorCQkJCQkgICBTTUJJT1NfQVRUUl9JTlNUQU5DRV9TSE9XKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHNtYmlvc19hdHRyX2xhYmVsID0geworCS5hdHRyID0gey5uYW1lID0gImxhYmVsIiwgLm1vZGUgPSAwNDQ0fSwKKwkuc2hvdyA9IHNtYmlvc2xhYmVsX3Nob3csCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgc21iaW9zX2F0dHJfaW5zdGFuY2UgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiaW5kZXgiLCAubW9kZSA9IDA0NDR9LAorCS5zaG93ID0gc21iaW9zaW5zdGFuY2Vfc2hvdywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzbWJpb3NfYXR0cmlidXRlc1tdID0geworCSZzbWJpb3NfYXR0cl9sYWJlbC5hdHRyLAorCSZzbWJpb3NfYXR0cl9pbnN0YW5jZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzbWJpb3NfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBzbWJpb3NfYXR0cmlidXRlcywKKwkuaXNfdmlzaWJsZSA9IHNtYmlvc19pbnN0YW5jZV9zdHJpbmdfZXhpc3QsCit9OworCitzdGF0aWMgaW50CitwY2lfY3JlYXRlX3NtYmlvc25hbWVfZmlsZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAoIXN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzbWJpb3NfYXR0cl9ncm91cCkpCisJCXJldHVybiAwOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZAorcGNpX3JlbW92ZV9zbWJpb3NuYW1lX2ZpbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNtYmlvc19hdHRyX2dyb3VwKTsKK30KKwordm9pZCBwY2lfY3JlYXRlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmICghcGNpX2NyZWF0ZV9zbWJpb3NuYW1lX2ZpbGUocGRldikpCisJCTsKK30KKwordm9pZCBwY2lfcmVtb3ZlX2Zpcm13YXJlX2xhYmVsX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXBjaV9yZW1vdmVfc21iaW9zbmFtZV9maWxlKHBkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBjOTk1N2Y2Li5iNWE3ZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtNzM0LDcgKzczNCw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGNvbnRhaW5lcl9vZihrb2JqLAogCQkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IChzdHJ1Y3QgcmVzb3VyY2UgKilhdHRyLT5wcml2YXRlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gYXR0ci0+cHJpdmF0ZTsKIAllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfdHlwZTsKIAlyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIGVuZDsKIAlpbnQgaTsKQEAgLTc3OCw2ICs3NzgsNzAgQEAKIAlyZXR1cm4gcGNpX21tYXBfcmVzb3VyY2Uoa29iaiwgYXR0ciwgdm1hLCAxKTsKIH0KIAorc3RhdGljIHNzaXplX3QKK3BjaV9yZXNvdXJjZV9pbyhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCWxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCwgYm9vbCB3cml0ZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoY29udGFpbmVyX29mKGtvYmosCisJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSwga29iaikpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gYXR0ci0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBvcnQgPSBvZmY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKQorCQlpZiAocmVzID09ICZwZGV2LT5yZXNvdXJjZVtpXSkKKwkJCWJyZWFrOworCWlmIChpID49IFBDSV9ST01fUkVTT1VSQ0UpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCArPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CisKKwlpZiAocG9ydCA+IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgaSkpCisJCXJldHVybiAwOworCisJaWYgKHBvcnQgKyBjb3VudCAtIDEgPiBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIGkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY291bnQpIHsKKwljYXNlIDE6CisJCWlmICh3cml0ZSkKKwkJCW91dGIoKih1OCAqKWJ1ZiwgcG9ydCk7CisJCWVsc2UKKwkJCSoodTggKilidWYgPSBpbmIocG9ydCk7CisJCXJldHVybiAxOworCWNhc2UgMjoKKwkJaWYgKHdyaXRlKQorCQkJb3V0dygqKHUxNiAqKWJ1ZiwgcG9ydCk7CisJCWVsc2UKKwkJCSoodTE2ICopYnVmID0gaW53KHBvcnQpOworCQlyZXR1cm4gMjsKKwljYXNlIDQ6CisJCWlmICh3cml0ZSkKKwkJCW91dGwoKih1MzIgKilidWYsIHBvcnQpOworCQllbHNlCisJCQkqKHUzMiAqKWJ1ZiA9IGlubChwb3J0KTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdAorcGNpX3JlYWRfcmVzb3VyY2VfaW8oc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCSAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwY2lfcmVzb3VyY2VfaW8oZmlscCwga29iaiwgYXR0ciwgYnVmLCBvZmYsIGNvdW50LCBmYWxzZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitwY2lfd3JpdGVfcmVzb3VyY2VfaW8oc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkgICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQkgICAgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBjaV9yZXNvdXJjZV9pbyhmaWxwLCBrb2JqLCBhdHRyLCBidWYsIG9mZiwgY291bnQsIHRydWUpOworfQorCiAvKioKICAqIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMgLSBjbGVhbnVwIHJlc291cmNlIGZpbGVzCiAgKiBAcGRldjogZGV2IHRvIGNsZWFudXAKQEAgLTgyOCw2ICs4OTIsMTAgQEAKIAkJCXNwcmludGYocmVzX2F0dHJfbmFtZSwgInJlc291cmNlJWQiLCBudW0pOwogCQkJcmVzX2F0dHItPm1tYXAgPSBwY2lfbW1hcF9yZXNvdXJjZV91YzsKIAkJfQorCQlpZiAocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIG51bSkgJiBJT1JFU09VUkNFX0lPKSB7CisJCQlyZXNfYXR0ci0+cmVhZCA9IHBjaV9yZWFkX3Jlc291cmNlX2lvOworCQkJcmVzX2F0dHItPndyaXRlID0gcGNpX3dyaXRlX3Jlc291cmNlX2lvOworCQl9CiAJCXJlc19hdHRyLT5hdHRyLm5hbWUgPSByZXNfYXR0cl9uYW1lOwogCQlyZXNfYXR0ci0+YXR0ci5tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CiAJCXJlc19hdHRyLT5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBudW0pOwpAQCAtMTA5Nyw2ICsxMTY1LDggQEAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycl92Z2FfZmlsZTsKIAorCXBjaV9jcmVhdGVfZmlybXdhcmVfbGFiZWxfZmlsZXMocGRldik7CisKIAlyZXR1cm4gMDsKIAogZXJyX3ZnYV9maWxlOgpAQCAtMTE2NCw2ICsxMjM0LDkgQEAKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcGRldi0+cm9tX2F0dHIpOwogCQlrZnJlZShwZGV2LT5yb21fYXR0cik7CiAJfQorCisJcGNpX3JlbW92ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhwZGV2KTsKKwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBwY2lfc3lzZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAxMzBlZDFkLi43ZmEzY2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMjMxMiwyMSArMjMxMiwxNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX21zaV9vZmYpOwogCi0jaWZuZGVmIEhBVkVfQVJDSF9QQ0lfU0VUX0RNQV9NQVhfU0VHTUVOVF9TSVpFCiBpbnQgcGNpX3NldF9kbWFfbWF4X3NlZ19zaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBzaXplKQogewogCXJldHVybiBkbWFfc2V0X21heF9zZWdfc2l6ZSgmZGV2LT5kZXYsIHNpemUpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfc2V0X2RtYV9tYXhfc2VnX3NpemUpOwotI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9BUkNIX1BDSV9TRVRfRE1BX1NFR01FTlRfQk9VTkRBUlkKIGludCBwY2lfc2V0X2RtYV9zZWdfYm91bmRhcnkoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogCXJldHVybiBkbWFfc2V0X3NlZ19ib3VuZGFyeSgmZGV2LT5kZXYsIG1hc2spOwogfQogRVhQT1JUX1NZTUJPTChwY2lfc2V0X2RtYV9zZWdfYm91bmRhcnkpOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGNpZV9mbHIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHByb2JlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBjOGI3ZmQwLi42NzljMzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMTEsNiArMTEsMTUgQEAKIGV4dGVybiBpbnQgcGNpX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7CiBleHRlcm4gaW50IHBjaV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyNpZm5kZWYgQ09ORklHX0RNSQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9jcmVhdGVfZmlybXdhcmVfbGFiZWxfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7IHJldHVybjsgfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfZmlybXdhcmVfbGFiZWxfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7IHJldHVybjsgfQorI2Vsc2UKK2V4dGVybiB2b2lkIHBjaV9jcmVhdGVfZmlybXdhcmVfbGFiZWxfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9maXJtd2FyZV9sYWJlbF9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CisjZW5kaWYKIGV4dGVybiB2b2lkIHBjaV9jbGVhbnVwX3JvbShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNpZmRlZiBIQVZFX1BDSV9NTUFQCiBleHRlcm4gaW50IHBjaV9tbWFwX2ZpdHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCByZXNubywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZwppbmRleCBiOGI0OTRiLi5kZGE3MDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCkBAIC0zMSwxNCArMzEsMjIgQEAKICMgUENJIEV4cHJlc3MgQVNQTQogIwogY29uZmlnIFBDSUVBU1BNCi0JYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBzdXBwb3J0KEV4cGVyaW1lbnRhbCkiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMICYmIFBDSUVQT1JUQlVTCi0JZGVmYXVsdCBuCisJYm9vbCAiUENJIEV4cHJlc3MgQVNQTSBjb250cm9sIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gUENJICYmIFBDSUVQT1JUQlVTCisJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBlbmFibGVzIFBDSSBFeHByZXNzIEFTUE0gKEFjdGl2ZSBTdGF0ZSBQb3dlciBNYW5hZ2VtZW50KSBhbmQKLQkgIENsb2NrIFBvd2VyIE1hbmFnZW1lbnQuIEFTUE0gc3VwcG9ydHMgc3RhdGUgTDAvTDBzL0wxLgorCSAgVGhpcyBlbmFibGVzIE9TIGNvbnRyb2wgb3ZlciBQQ0kgRXhwcmVzcyBBU1BNIChBY3RpdmUgU3RhdGUKKwkgIFBvd2VyIE1hbmFnZW1lbnQpIGFuZCBDbG9jayBQb3dlciBNYW5hZ2VtZW50LiBBU1BNIHN1cHBvcnRzCisJICBzdGF0ZSBMMC9MMHMvTDEuCiAKLQkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgorCSAgQVNQTSBpcyBpbml0aWFsbHkgc2V0IHVwIHRoZSB0aGUgZmlybXdhcmUuIFdpdGggdGhpcyBvcHRpb24gZW5hYmxlZCwKKwkgIExpbnV4IGNhbiBtb2RpZnkgdGhpcyBzdGF0ZSBpbiBvcmRlciB0byBkaXNhYmxlIEFTUE0gb24ga25vd24tYmFkCisJICBoYXJkd2FyZSBvciBjb25maWd1cmF0aW9ucyBhbmQgZW5hYmxlIGl0IHdoZW4ga25vd24tc2FmZS4KKworCSAgQVNQTSBjYW4gYmUgZGlzYWJsZWQgb3IgZW5hYmxlZCBhdCBydW50aW1lIHZpYQorCSAgL3N5cy9tb2R1bGUvcGNpZV9hc3BtL3BhcmFtZXRlcnMvcG9saWN5CisKKwkgIFdoZW4gaW4gZG91YnQsIHNheSBZLgogY29uZmlnIFBDSUVBU1BNX0RFQlVHCiAJYm9vbCAiRGVidWcgUENJIEV4cHJlc3MgQVNQTSIKIAlkZXBlbmRzIG9uIFBDSUVBU1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYwppbmRleCA4YWY0ZjYxLi5mYzBiNWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKQEAgLTcyNywyMCArNzI3LDIxIEBACiBzdGF0aWMgaW50IGdldF9lX3NvdXJjZShzdHJ1Y3QgYWVyX3JwYyAqcnBjLCBzdHJ1Y3QgYWVyX2Vycl9zb3VyY2UgKmVfc3JjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAkvKiBMb2NrIGFjY2VzcyB0byBSb290IGVycm9yIHByb2R1Y2VyL2NvbnN1bWVyIGluZGV4ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7Ci0JaWYgKHJwYy0+cHJvZF9pZHggIT0gcnBjLT5jb25zX2lkeCkgewotCQkqZV9zcmMgPSBycGMtPmVfc291cmNlc1tycGMtPmNvbnNfaWR4XTsKLQkJcnBjLT5jb25zX2lkeCsrOwotCQlpZiAocnBjLT5jb25zX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCi0JCQlycGMtPmNvbnNfaWR4ID0gMDsKLQkJcmV0ID0gMTsKKwlpZiAocnBjLT5wcm9kX2lkeCA9PSBycGMtPmNvbnNfaWR4KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOwogCX0KKworCSplX3NyYyA9IHJwYy0+ZV9zb3VyY2VzW3JwYy0+Y29uc19pZHhdOworCXJwYy0+Y29uc19pZHgrKzsKKwlpZiAocnBjLT5jb25zX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCisJCXJwYy0+Y29uc19pZHggPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAxOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKaW5kZXggYmU1M2Q5OC4uNzEyMjI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMKQEAgLTU4OCwxMSArNTg4LDIzIEBACiAJICogdXBkYXRlIHRocm91Z2ggcGNpZV9hc3BtX2NhcF9pbml0KCkuCiAJICovCiAJcGNpZV9hc3BtX2NhcF9pbml0KGxpbmssIGJsYWNrbGlzdCk7Ci0JcGNpZV9jb25maWdfYXNwbV9wYXRoKGxpbmspOwogCiAJLyogU2V0dXAgaW5pdGlhbCBDbG9jayBQTSBzdGF0ZSAqLwogCXBjaWVfY2xrcG1fY2FwX2luaXQobGluaywgYmxhY2tsaXN0KTsKLQlwY2llX3NldF9jbGtwbShsaW5rLCBwb2xpY3lfdG9fY2xrcG1fc3RhdGUobGluaykpOworCisJLyoKKwkgKiBBdCB0aGlzIHN0YWdlIGRyaXZlcnMgaGF2ZW4ndCBoYWQgYW4gb3Bwb3J0dW5pdHkgdG8gY2hhbmdlIHRoZQorCSAqIGxpbmsgcG9saWN5IHNldHRpbmcuIEVuYWJsaW5nIEFTUE0gb24gYnJva2VuIGhhcmR3YXJlIGNhbiBjcmlwcGxlCisJICogaXQgZXZlbiBiZWZvcmUgdGhlIGRyaXZlciBoYXMgaGFkIGEgY2hhbmNlIHRvIGRpc2FibGUgQVNQTSwgc28KKwkgKiBkZWZhdWx0IHRvIGEgc2FmZSBsZXZlbCByaWdodCBub3cuIElmIHdlJ3JlIGVuYWJsaW5nIEFTUE0gYmV5b25kCisJICogdGhlIEJJT1MncyBleHBlY3RhdGlvbiwgd2UnbGwgZG8gc28gb25jZSBwY2lfZW5hYmxlX2RldmljZSgpIGlzCisJICogY2FsbGVkLgorCSAqLworCWlmIChhc3BtX3BvbGljeSAhPSBQT0xJQ1lfUE9XRVJTQVZFKSB7CisJCXBjaWVfY29uZmlnX2FzcG1fcGF0aChsaW5rKTsKKwkJcGNpZV9zZXRfY2xrcG0obGluaywgcG9saWN5X3RvX2Nsa3BtX3N0YXRlKGxpbmspKTsKKwl9CisKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFzcG1fbG9jayk7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9iZS5jIGIvZHJpdmVycy9wY2kvcHJvYmUuYwppbmRleCBmNGFkYmEyLi4xMjYyNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wcm9iZS5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKQEAgLTE2Myw5ICsxNjMsMTYgQEAKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgcG9zKQogewogCXUzMiBsLCBzeiwgbWFzazsKKwl1MTYgb3JpZ19jbWQ7CiAKIAltYXNrID0gdHlwZSA/IFBDSV9ST01fQUREUkVTU19NQVNLIDogfjA7CiAKKwlpZiAoIWRldi0+bW1pb19hbHdheXNfb24pIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJm9yaWdfY21kKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsCisJCQlvcmlnX2NtZCAmIH4oUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU8pKTsKKwl9CisKIAlyZXMtPm5hbWUgPSBwY2lfbmFtZShkZXYpOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmbCk7CkBAIC0xNzMsNiArMTgwLDkgQEAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MsICZzeik7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcywgbCk7CiAKKwlpZiAoIWRldi0+bW1pb19hbHdheXNfb24pCisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBvcmlnX2NtZCk7CisKIAkvKgogCSAqIEFsbCBiaXRzIHNldCBpbiBzeiBtZWFucyB0aGUgZGV2aWNlIGlzbid0IHdvcmtpbmcgcHJvcGVybHkuCiAJICogSWYgdGhlIEJBUiBpc24ndCBpbXBsZW1lbnRlZCwgYWxsIGJpdHMgbXVzdCBiZSAwLiAgSWYgaXQncyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wcm9jLmMgYi9kcml2ZXJzL3BjaS9wcm9jLmMKaW5kZXggNDQ5ZTg5MC4uMDFmMDMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYy5jCisrKyBiL2RyaXZlcnMvcGNpL3Byb2MuYwpAQCAtNDMxLDggKzQzMSw2IEBACiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCiAJaWYgKChlID0gZGV2LT5wcm9jZW50KSkgewotCQlpZiAoYXRvbWljX3JlYWQoJmUtPmNvdW50KSA+IDEpCi0JCQlyZXR1cm4gLUVCVVNZOwogCQlyZW1vdmVfcHJvY19lbnRyeShlLT5uYW1lLCBkZXYtPmJ1cy0+cHJvY2Rpcik7CiAJCWRldi0+cHJvY2VudCA9IE5VTEw7CiAJfQpAQCAtNDg1LDkgKzQ4Myw5IEBACiAJcHJvY19jcmVhdGUoImRldmljZXMiLCAwLCBwcm9jX2J1c19wY2lfZGlyLAogCQkgICAgJnByb2NfYnVzX3BjaV9kZXZfb3BlcmF0aW9ucyk7CiAJcHJvY19pbml0aWFsaXplZCA9IDE7Ci0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCXBjaV9wcm9jX2F0dGFjaF9kZXZpY2UoZGV2KTsKLQl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcXVpcmtzLmMgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwppbmRleCA0NzczNDVkLi44OWVkMTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9xdWlya3MuYworKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYwpAQCAtOTEsNiArOTEsMTkgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBxdWlya19yZXNvdXJjZV9hbGlnbm1lbnQpOwogCisvKgorICogRGVjb2Rpbmcgc2hvdWxkIGJlIGRpc2FibGVkIGZvciBhIFBDSSBkZXZpY2UgZHVyaW5nIEJBUiBzaXppbmcgdG8gYXZvaWQKKyAqIGNvbmZsaWN0LiBCdXQgZG9pbmcgc28gbWF5IGNhdXNlIHByb2JsZW1zIG9uIGhvc3QgYnJpZGdlIGFuZCBwZXJoYXBzIG90aGVyCisgKiBrZXkgc3lzdGVtIGRldmljZXMuIEZvciBkZXZpY2VzIHRoYXQgbmVlZCB0byBoYXZlIG1taW8gZGVjb2RpbmcgYWx3YXlzLW9uLAorICogd2UgbmVlZCB0byBzZXQgdGhlIGRldi0+bW1pb19hbHdheXNfb24gYml0LgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbW1pb19hbHdheXNfb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9IT1NUKQorCQlkZXYtPm1taW9fYWx3YXlzX29uID0gMTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX21taW9fYWx3YXlzX29uKTsKKwogLyogVGhlIE1lbGxhbm94IFRhdm9yIGRldmljZSBnaXZlcyBmYWxzZSBwb3NpdGl2ZSBwYXJpdHkgZXJyb3JzCiAgKiBNYXJrIHRoaXMgZGV2aWNlIHdpdGggYSBicm9rZW5fcGFyaXR5X3N0YXR1cywgdG8gYWxsb3cKICAqIFBDSSBzY2FubmluZyBjb2RlIHRvICJza2lwIiB0aGlzIG5vdyBibGFja2xpc3RlZCBkZXZpY2UuCkBAIC0xNDU5LDYgKzE0NzIsNyBAQAogCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwOiAvKiBTQVRBIHNpbmdsZSBwb3J0ICovCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyOiAvKiBTQVRBIGR1YWwgcG9ydHMgKi8KKwljYXNlIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjQ6IC8qIFNBVEEgZHVhbCBwb3J0cyAqLwogCQkvKiBUaGUgY29udHJvbGxlciBzaG91bGQgYmUgaW4gc2luZ2xlIGZ1bmN0aW9uIGFoY2kgbW9kZSAqLwogCQljb25mMSB8PSAweDAwMDJBMTAwOyAvKiBTZXQgOCwgMTMsIDE1LCAxNyAqLwogCQlicmVhazsKQEAgLTE0NzAsNiArMTQ4NCw3IEBACiAJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MToKIAljYXNlIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5OgogCQkvKiBFbmFibGUgZHVhbCBmdW5jdGlvbiBtb2RlLCBBSENJIG9uIGZuIDAsIElERSBmbjEgKi8KIAkJLyogU2V0IHRoZSBjbGFzcyBjb2RlcyBjb3JyZWN0bHkgYW5kIHRoZW4gZGlyZWN0IElERSAwICovCiAJCWNvbmYxIHw9IDB4MDBDMkExQjM7IC8qIFNldCAwLCAxLCA0LCA1LCA3LCA4LCAxMywgMTUsIDE3LCAyMiwgMjMgKi8KQEAgLTE0OTYsMTYgKzE1MTEsMjAgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MSwgcXVpcmtfam1pY3Jvbl9hdGEpOwogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjMsIHF1aXJrX2ptaWNyb25fYXRhKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NCwgcXVpcmtfam1pY3Jvbl9hdGEpOwogREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzNjYsIHF1aXJrX2ptaWNyb25fYXRhKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OCwgcXVpcmtfam1pY3Jvbl9hdGEpOworREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYxLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYyLCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYzLCBxdWlya19qbWljcm9uX2F0YSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY0LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY2LCBxdWlya19qbWljcm9uX2F0YSk7CiBERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY4LCBxdWlya19qbWljcm9uX2F0YSk7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY5LCBxdWlya19qbWljcm9uX2F0YSk7CiAKICNlbmRpZgogCkBAIC0yMTE1LDYgKzIxMzQsNyBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBX1ZUMzMzNiwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WVDMzNTEsIHF1aXJrX2Rpc2FibGVfYWxsX21zaSk7CiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfVlQzMzY0LCBxdWlya19kaXNhYmxlX2FsbF9tc2kpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgzODBfMCwgcXVpcmtfZGlzYWJsZV9hbGxfbXNpKTsKIAogLyogRGlzYWJsZSBNU0kgb24gY2hpcHNldHMgdGhhdCBhcmUga25vd24gdG8gbm90IHN1cHBvcnQgaXQgKi8KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMjEyNiwxMiArMjE0NiwyOSBAQAogCX0KIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSwgcXVpcmtfZGlzYWJsZV9tc2kpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIDB4OTYwMiwgcXVpcmtfZGlzYWJsZV9tc2kpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BU1VTVEVLLCAweDk2MDIsIHF1aXJrX2Rpc2FibGVfbXNpKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQUksIDB4OTYwMiwgcXVpcmtfZGlzYWJsZV9tc2kpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9WSUEsIDB4YTIzOCwgcXVpcmtfZGlzYWJsZV9tc2kpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BVEksIDB4NWEzZiwgcXVpcmtfZGlzYWJsZV9tc2kpOwogCisvKgorICogVGhlIEFQQyBicmlkZ2UgZGV2aWNlIGluIEFNRCA3ODAgZmFtaWx5IG5vcnRoYnJpZGdlcyBoYXMgc29tZSByYW5kb20KKyAqIE9FTSBzdWJzeXN0ZW0gSUQgaW4gaXRzIHZlbmRvciBJRCByZWdpc3RlciAoZXJyYXR1bSAxOCksIHNvIGluc3RlYWQKKyAqIHdlIHVzZSB0aGUgcG9zc2libGUgdmVuZG9yL2RldmljZSBJRHMgb2YgdGhlIGhvc3QgYnJpZGdlIGZvciB0aGUKKyAqIGRlY2xhcmVkIHF1aXJrLCBhbmQgc2VhcmNoIGZvciB0aGUgQVBDIGJyaWRnZSBieSBzbG90IG51bWJlci4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FtZF83ODBfYXBjX21zaShzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2UpCit7CisJc3RydWN0IHBjaV9kZXYgKmFwY19icmlkZ2U7CisKKwlhcGNfYnJpZGdlID0gcGNpX2dldF9zbG90KGhvc3RfYnJpZGdlLT5idXMsIFBDSV9ERVZGTigxLCAwKSk7CisJaWYgKGFwY19icmlkZ2UpIHsKKwkJaWYgKGFwY19icmlkZ2UtPmRldmljZSA9PSAweDk2MDIpCisJCQlxdWlya19kaXNhYmxlX21zaShhcGNfYnJpZGdlKTsKKwkJcGNpX2Rldl9wdXQoYXBjX2JyaWRnZSk7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsIDB4OTYwMCwgcXVpcmtfYW1kXzc4MF9hcGNfbXNpKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCAweDk2MDEsIHF1aXJrX2FtZF83ODBfYXBjX21zaSk7CisKIC8qIEdvIHRocm91Z2ggdGhlIGxpc3Qgb2YgSHlwZXJ0cmFuc3BvcnQgY2FwYWJpbGl0aWVzIGFuZAogICogcmV0dXJuIDEgaWYgYSBIVCBNU0kgY2FwYWJpbGl0eSBpcyBmb3VuZCBhbmQgZW5hYmxlZCAqLwogc3RhdGljIGludCBfX2RldmluaXQgbXNpX2h0X2NhcF9lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0yMzkwLDYgKzI0MjcsOSBAQAogCWludCBwb3M7CiAJaW50IGZvdW5kOwogCisJaWYgKCFwY2lfbXNpX2VuYWJsZWQoKSkKKwkJcmV0dXJuOworCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgSFQgTVNJIGNhcCBvciBlbmFibGVkIG9uIHRoaXMgZGV2aWNlICovCiAJZm91bmQgPSBodF9jaGVja19tc2lfbWFwcGluZyhkZXYpOwogCkBAIC0yNzQyLDcgKzI3ODIsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiUENJOiBDTFMgJXUgYnl0ZXNcbiIsCiAJCSAgICAgICBwY2lfY2FjaGVfbGluZV9zaXplIDw8IDIpOwogCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGRldik7CiAJCS8qCiAJCSAqIElmIGFyY2ggaGFzbid0IHNldCBpdCBleHBsaWNpdGx5IHlldCwgdXNlIHRoZSBDTFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggMjBkMDNmNy4uOWQ3NWRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0Jd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpIHsKIAkJaWYgKHBjaV9kb21haW5fbnIoZGV2LT5idXMpID09IGRvbWFpbiAmJgogCQkgICAgKGRldi0+YnVzLT5udW1iZXIgPT0gYnVzICYmIGRldi0+ZGV2Zm4gPT0gZGV2Zm4pKQogCQkJcmV0dXJuIGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggMTliMTExMy4uNjZjYjhmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTg3NCwxOSArODc0LDE2IEBACiBhZ2FpbjoKIAlwY2lfYnVzX3NpemVfYnJpZGdlcyhwYXJlbnQpOwogCV9fcGNpX2JyaWRnZV9hc3NpZ25fcmVzb3VyY2VzKGJyaWRnZSwgJmhlYWQpOwotCXJldHZhbCA9IHBjaV9yZWVuYWJsZV9kZXZpY2UoYnJpZGdlKTsKLQlwY2lfc2V0X21hc3RlcihicmlkZ2UpOwotCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCiAJdHJpZWRfdGltZXMrKzsKIAogCWlmICghaGVhZC5uZXh0KQotCQlyZXR1cm47CisJCWdvdG8gZW5hYmxlX2FsbDsKIAogCWlmICh0cmllZF90aW1lcyA+PSAyKSB7CiAJCS8qIHN0aWxsIGZhaWwsIGRvbid0IG5lZWQgdG8gdHJ5IG1vcmUgKi8KIAkJZnJlZV9mYWlsZWRfbGlzdCgmaGVhZCk7Ci0JCXJldHVybjsKKwkJZ290byBlbmFibGVfYWxsOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICJQQ0k6IE5vLiAlZCB0cnkgdG8gYXNzaWduIHVuYXNzaWduZWQgcmVzXG4iLApAQCAtOTE5LDUgKzkxNiwxMCBAQAogCWZyZWVfZmFpbGVkX2xpc3QoJmhlYWQpOwogCiAJZ290byBhZ2FpbjsKKworZW5hYmxlX2FsbDoKKwlyZXR2YWwgPSBwY2lfcmVlbmFibGVfZGV2aWNlKGJyaWRnZSk7CisJcGNpX3NldF9tYXN0ZXIoYnJpZGdlKTsKKwlwY2lfZW5hYmxlX2JyaWRnZXMocGFyZW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hc3NpZ25fdW5hc3NpZ25lZF9icmlkZ2VfcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWlycS5jIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKaW5kZXggYWE3OTVmZC4uZWVjOTczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtaXJxLmMKQEAgLTU5LDcgKzU5LDYgQEAKIAkgICAgICAgaW50ICgqbWFwX2lycSkoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4KSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KGRldikKIAkJcGRldl9maXh1cF9pcnEoZGV2LCBzd2l6emxlLCBtYXBfaXJxKTsKLQl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBjOTg4NTE0Li5jODBhN2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTIxNSw3ICsyMTUsNyBAQAogCWRlcGVuZHMgb24gKEFSQ0hfTFVCQk9DSyB8fCBNQUNIX01BSU5TVE9ORSB8fCBQWEFfU0hBUlBTTCBcCiAJCSAgICB8fCBNQUNIX0FSTUNPUkUgfHwgQVJDSF9QWEFfUEFMTSB8fCBUUklaRVBTX1BDTUNJQSBcCiAJCSAgICB8fCBBUkNPTV9QQ01DSUEgfHwgQVJDSF9QWEFfRVNFUklFUyB8fCBNQUNIX1NUQVJHQVRFMiBcCi0JCSAgICB8fCBNQUNIX1ZQQUMyNzApCisJCSAgICB8fCBNQUNIX1ZQQUMyNzAgfHwgTUFDSF9CQUxMT09OMykKIAlzZWxlY3QgUENNQ0lBX1NPQ19DT01NT04KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBYQTJ4eCBQQ01DSUEgY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCBkMDA2ZThiZS4uOGQ5Mzg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTcsNyArNyw2IEBACiBvYmotJChDT05GSUdfUENDQVJEKQkJCQkrPSBwY21jaWFfY29yZS5vCiAKIHBjbWNpYS15CQkJCQkrPSBkcy5vIHBjbWNpYV9yZXNvdXJjZS5vIGNpc3RwbC5vIHBjbWNpYV9jaXMubwotcGNtY2lhLSQoQ09ORklHX1BDTUNJQV9JT0NUTCkJCQkrPSBwY21jaWFfaW9jdGwubwogb2JqLSQoQ09ORklHX1BDTUNJQSkJCQkJKz0gcGNtY2lhLm8KIAogcGNtY2lhX3JzcmMteQkJCQkJKz0gcnNyY19tZ3IubwpAQCAtNzAsNiArNjksNyBAQAogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0U3NDApCQkJKz0gcHhhMnh4X2U3NDAubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJCSs9IHB4YTJ4eF9zdGFyZ2F0ZTIubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1ZQQUMyNzApCQkrPSBweGEyeHhfdnBhYzI3MC5vCitweGEyeHgtb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCQkrPSBweGEyeHhfYmFsbG9vbjMubwogCiBvYmotJChDT05GSUdfUENNQ0lBX1BYQTJYWCkJCQkrPSBweGEyeHhfYmFzZS5vICQocHhhMnh4LW9iai15KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCBhMzI0ZDMyLi42NzUzMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogLyogaW5jbHVkZSB0aGUgd29ybGQgKi8KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCA1YTk3OWNiLi44MDdmMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0zMSwxMSArMzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgotI2luY2x1ZGUgPHBjbWNpYS9idXNfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYyBiL2RyaXZlcnMvcGNtY2lhL2Npc3RwbC5jCmluZGV4IDg4NDRiYzNlLi45MTQxNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC01NCw2ICs1Myw5IEBACiAvKiBVcHBlciBsaW1pdCBvbiByZWFzb25hYmxlICMgb2YgdHVwbGVzICovCiAjZGVmaW5lIE1BWF9UVVBMRVMJCTIwMAogCisvKiBCaXRzIGluIElSUUluZm8xIGZpZWxkICovCisjZGVmaW5lIElSUV9JTkZPMl9WQUxJRAkJMHgxMAorCiAvKiAxNi1iaXQgQ0lTPyAqLwogc3RhdGljIGludCBjaXNfd2lkdGg7CiBtb2R1bGVfcGFyYW0oY2lzX3dpZHRoLCBpbnQsIDA0NDQpOwpAQCAtMjEwLDcgKzIxMiw3IEBACiAgKiBQcm9iYWJseSBvbmx5IHVzZWZ1bCBmb3Igd3JpdGluZyBvbmUtYnl0ZSByZWdpc3RlcnMuIE11c3QgYmUgY2FsbGVkCiAgKiB3aXRoIG9wc19tdXRleCBoZWxkLgogICovCi12b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwgdV9pbnQgYWRkciwKK2ludCBwY21jaWFfd3JpdGVfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCiAJCSAgIHVfaW50IGxlbiwgdm9pZCAqcHRyKQogewogCXZvaWQgX19pb21lbSAqc3lzLCAqZW5kOwpAQCAtMjMyLDcgKzIzNCw3IEBACiAJCQkJKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwogCQlpZiAoIXN5cykgewogCQkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOwotCQkJcmV0dXJuOyAvKiBGSVhNRTogRXJyb3IgKi8KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJd3JpdGViKGZsYWdzLCBzeXMrQ0lTUkVHX0lDVFJMMCk7CkBAIC0yNTcsNyArMjU5LDcgQEAKIAkJCXN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7CiAJCQlpZiAoIXN5cykgewogCQkJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKLQkJCQlyZXR1cm47IC8qIEZJWE1FOiBlcnJvciAqLworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCiAJCQllbmQgPSBzeXMgKyBzLT5tYXBfc2l6ZTsKQEAgLTI3MSw2ICsyNzMsNyBAQAogCQkJYWRkciA9IDA7CiAJCX0KIAl9CisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggOTc2ZDgwNy4uMmVjOGFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTI1MiwzOCArMjUxLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2dldF9zb2NrZXRfYnlfbnIpOwogCi0vKgotICogVGhlIGNlbnRyYWwgZXZlbnQgaGFuZGxlci4gIFNlbmRfZXZlbnQoKSBzZW5kcyBhbiBldmVudCB0byB0aGUKLSAqIDE2LWJpdCBzdWJzeXN0ZW0sIHdoaWNoIHRoZW4gY2FsbHMgdGhlIHJlbGV2YW50IGRldmljZSBkcml2ZXJzLgotICogUGFyc2VfZXZlbnRzKCkgaW50ZXJwcmV0cyB0aGUgZXZlbnQgYml0cyBmcm9tCi0gKiBhIGNhcmQgc3RhdHVzIGNoYW5nZSByZXBvcnQuICBEb19zaHV0ZG93bigpIGhhbmRsZXMgdGhlIGhpZ2gKLSAqIHByaW9yaXR5IHN0dWZmIGFzc29jaWF0ZWQgd2l0aCBhIGNhcmQgcmVtb3ZhbC4KLSAqLwotCi0vKiBOT1RFOiBzZW5kX2V2ZW50IG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHNrdC0+c2VtIGhlbGQuICovCi0KLXN0YXRpYyBpbnQgc2VuZF9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KQotewotCWludCByZXQ7Ci0KLQlpZiAoKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpICYmIChldmVudCAhPSBDU19FVkVOVF9DQVJEX1JFTU9WQUwpKQotCQlyZXR1cm4gMDsKLQotCWRldl9kYmcoJnMtPmRldiwgInNlbmRfZXZlbnQoZXZlbnQgJWQsIHByaSAlZCwgY2FsbGJhY2sgMHglcClcbiIsCi0JICAgZXZlbnQsIHByaW9yaXR5LCBzLT5jYWxsYmFjayk7Ci0KLQlpZiAoIXMtPmNhbGxiYWNrKQotCQlyZXR1cm4gMDsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHMtPmNhbGxiYWNrLT5vd25lcikpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gcy0+Y2FsbGJhY2stPmV2ZW50KHMsIGV2ZW50LCBwcmlvcml0eSk7Ci0KLQltb2R1bGVfcHV0KHMtPmNhbGxiYWNrLT5vd25lcik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IHNvY2tldF9yZXNldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewogCWludCBzdGF0dXMsIGk7CkBAIC0zMjYsNyArMjkzLDggQEAKIAogCWRldl9kYmcoJnMtPmRldiwgInNodXRkb3duXG4iKTsKIAotCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7CisJaWYgKHMtPmNhbGxiYWNrKQorCQlzLT5jYWxsYmFjay0+cmVtb3ZlKHMpOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlzLT5zdGF0ZSAmPSBTT0NLRVRfSU5VU0UgfCBTT0NLRVRfUFJFU0VOVDsKQEAgLTQ3Nyw3ICs0NDUsOCBAQAogCQlkZXZfZGJnKCZza3QtPmRldiwgImluc2VydCBkb25lXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKLQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLCBDU19FVkVOVF9QUklfTE9XKTsKKwkJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSAmJiAoc2t0LT5jYWxsYmFjaykpCisJCQlza3QtPmNhbGxiYWNrLT5hZGQoc2t0KTsKIAl9IGVsc2UgewogCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKIAkJc29ja2V0X3NodXRkb3duKHNrdCk7CkBAIC00OTQsNyArNDYzLDYgQEAKIAltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CiAJc2t0LT5zdXNwZW5kZWRfc3RhdGUgPSBza3QtPnN0YXRlOwogCi0Jc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1BNX1NVU1BFTkQsIENTX0VWRU5UX1BSSV9MT1cpOwogCXNrdC0+c29ja2V0ID0gZGVhZF9zb2NrZXQ7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOwogCWlmIChza3QtPm9wcy0+c3VzcGVuZCkKQEAgLTU1NSw4ICs1MjMsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKLQotCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9QTV9SRVNVTUUsIENTX0VWRU5UX1BSSV9MT1cpOworCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfQ0FSREJVUykgJiYgKHNrdC0+Y2FsbGJhY2spKQorCQlza3QtPmNhbGxiYWNrLT5lYXJseV9yZXN1bWUoc2t0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjU0LDE2ICs2MjIsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza3QtPnRocmVhZF9sb2NrLCBmbGFncyk7CiAKIAkJbXV0ZXhfbG9jaygmc2t0LT5za3RfbXV0ZXgpOwotCQlpZiAoZXZlbnRzKSB7Ci0JCQlpZiAoZXZlbnRzICYgU1NfREVURUNUKQotCQkJCXNvY2tldF9kZXRlY3RfY2hhbmdlKHNrdCk7Ci0JCQlpZiAoZXZlbnRzICYgU1NfQkFUREVBRCkKLQkJCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQkFUVEVSWV9ERUFELCBDU19FVkVOVF9QUklfTE9XKTsKLQkJCWlmIChldmVudHMgJiBTU19CQVRXQVJOKQotCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9CQVRURVJZX0xPVywgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCQlpZiAoZXZlbnRzICYgU1NfUkVBRFkpCi0JCQkJc2VuZF9ldmVudChza3QsIENTX0VWRU5UX1JFQURZX0NIQU5HRSwgQ1NfRVZFTlRfUFJJX0xPVyk7Ci0JCX0KKwkJaWYgKGV2ZW50cyAmIFNTX0RFVEVDVCkKKwkJCXNvY2tldF9kZXRlY3RfY2hhbmdlKHNrdCk7CiAKIAkJaWYgKHN5c2ZzX2V2ZW50cykgewogCQkJaWYgKHN5c2ZzX2V2ZW50cyAmIFBDTUNJQV9VRVZFTlRfRUpFQ1QpCkBAIC03ODMsNyArNzQzLDcgQEAKIAkJcy0+Y2FsbGJhY2sgPSBjOwogCiAJCWlmICgocy0+c3RhdGUgJiAoU09DS0VUX1BSRVNFTlR8U09DS0VUX0NBUkRCVVMpKSA9PSBTT0NLRVRfUFJFU0VOVCkKLQkJCXNlbmRfZXZlbnQocywgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04sIENTX0VWRU5UX1BSSV9MT1cpOworCQkJcy0+Y2FsbGJhY2stPmFkZChzKTsKIAl9IGVsc2UKIAkJcy0+Y2FsbGJhY2sgPSBOVUxMOwogIGVycjoKQEAgLTgyMywyMCArNzgzLDEzIEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJldCA9IHNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9SRVNFVF9SRVFVRVNULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlzZW5kX2V2ZW50KHNrdCwgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwsIENTX0VWRU5UX1BSSV9MT1cpOwotCQkJaWYgKHNrdC0+Y2FsbGJhY2spCi0JCQkJc2t0LT5jYWxsYmFjay0+c3VzcGVuZChza3QpOwotCQkJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOwotCQkJcmV0ID0gc29ja2V0X3Jlc2V0KHNrdCk7Ci0JCQltdXRleF91bmxvY2soJnNrdC0+b3BzX211dGV4KTsKLQkJCWlmIChyZXQgPT0gMCkgewotCQkJCXNlbmRfZXZlbnQoc2t0LCBDU19FVkVOVF9DQVJEX1JFU0VULCBDU19FVkVOVF9QUklfTE9XKTsKLQkJCQlpZiAoc2t0LT5jYWxsYmFjaykKLQkJCQkJc2t0LT5jYWxsYmFjay0+cmVzdW1lKHNrdCk7Ci0JCQl9Ci0JCX0KKwkJaWYgKHNrdC0+Y2FsbGJhY2spCisJCQlza3QtPmNhbGxiYWNrLT5zdXNwZW5kKHNrdCk7CisJCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwkJcmV0ID0gc29ja2V0X3Jlc2V0KHNrdCk7CisJCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCQlpZiAoKHJldCA9PSAwKSAmJiAoc2t0LT5jYWxsYmFjaykpCisJCQlza3QtPmNhbGxiYWNrLT5yZXN1bWUoc2t0KTsKIAogCQlyZXQgPSAwOwogCX0gd2hpbGUgKDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaCBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKaW5kZXggNDEyNmE3NS4uZGEwNTVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKLSAqIChDKSAyMDAzIC0gMjAwOAlEb21pbmlrIEJyb2Rvd3NraQorICogKEMpIDIwMDMgLSAyMDEwCURvbWluaWsgQnJvZG93c2tpCiAgKgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBfb25seV8gbmVlZGVkIGJ5IHRoZSBQQ01DSUEgY29yZSBtb2R1bGVzLgpAQCAtMjYsNiArMjYsOSBAQAogLyogRmxhZ3MgaW4gY2xpZW50IHN0YXRlICovCiAjZGVmaW5lIENMSUVOVF9XSU5fUkVRKGkpCSgweDE8PChpKSkKIAorLyogRmxhZyB0byBhY2Nlc3MgYWxsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBCSU5EX0ZOX0FMTAkweGZmCisKIC8qIEVhY2ggY2FyZCBmdW5jdGlvbiBnZXRzIG9uZSBvZiB0aGVzZSBndXlzICovCiB0eXBlZGVmIHN0cnVjdCBjb25maWdfdCB7CiAJc3RydWN0IGtyZWYJcmVmOwpAQCAtMzUsNyArMzgsMTAgQEAKIAl1bnNpZ25lZCBpbnQJQ29uZmlnQmFzZTsKIAl1bnNpZ25lZCBjaGFyCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKIAl1bnNpZ25lZCBpbnQJQ2FyZFZhbHVlczsKLQlpb19yZXFfdAlpbzsKKworCXN0cnVjdCByZXNvdXJjZSBpb1tNQVhfSU9fV0lOXTsgLyogaW8gcG9ydHMgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgbWVtW01BWF9XSU5dOyAgIC8qIG1lbSBhcmVhcyAqLworCiAJc3RydWN0IHsKIAkJdV9pbnQJQXR0cmlidXRlczsKIAl9IGlycTsKQEAgLTU2LDE4ICs2MiwxMSBAQAogCQkJCQkgdW5zaWduZWQgaW50IGF0dHIsCiAJCQkJCSB1bnNpZ25lZCBpbnQgKmJhc2UsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbnVtLAotCQkJCQkgdW5zaWduZWQgaW50IGFsaWduKTsKKwkJCQkJIHVuc2lnbmVkIGludCBhbGlnbiwKKwkJCQkJIHN0cnVjdCByZXNvdXJjZSAqKnBhcmVudCk7CiAJc3RydWN0IHJlc291cmNlKiAoKmZpbmRfbWVtKQkodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIG51bSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWxpZ24sIGludCBsb3csCiAJCQkJCSBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7Ci0JaW50CSgqYWRkX2lvKQkJKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQkgdW5zaWduZWQgaW50IGFjdGlvbiwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9zdGFydCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcl9lbmQpOwotCWludAkoKmFkZF9tZW0pCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCi0JCQkJCSB1bnNpZ25lZCBpbnQgYWN0aW9uLAotCQkJCQkgdW5zaWduZWQgbG9uZyByX3N0YXJ0LAotCQkJCQkgdW5zaWduZWQgbG9uZyByX2VuZCk7CiAJaW50CSgqaW5pdCkJCQkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCXZvaWQJKCpleGl0KQkJCShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB9OwpAQCAtMTE0LDExICsxMTMsMTIgQEAKIAogc3RydWN0IHBjbWNpYV9jYWxsYmFja3sKIAlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKLQlpbnQJCSgqZXZlbnQpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkgIGV2ZW50X3QgZXZlbnQsIGludCBwcmlvcml0eSk7CisJaW50CQkoKmFkZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqcmVtb3ZlKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCXZvaWQJCSgqcmVxdWVyeSkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIAlpbnQJCSgqdmFsaWRhdGUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppKTsKIAlpbnQJCSgqc3VzcGVuZCkgKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKKwlpbnQJCSgqZWFybHlfcmVzdW1lKSAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogCWludAkJKCpyZXN1bWUpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyk7CiB9OwogCkBAIC0xNDYsNiArMTQ2LDggQEAKIC8qIGRzLmMgKi8KIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlOwogCitzdHJ1Y3QgcGNtY2lhX2RldmljZTsKKwogLyogcGNtY2lhX3Jlc291cmNlLmMgKi8KIGV4dGVybiBpbnQgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogZXh0ZXJuIGludCBwY21jaWFfdmFsaWRhdGVfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKQEAgLTE2Myw4ICsxNjUsOCBAQAogCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsCiAJCQl1X2ludCBhZGRyLCB1X2ludCBsZW4sIHZvaWQgKnB0cik7Ci12b2lkIHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKLQkJCSAgdV9pbnQgYWRkciwgdV9pbnQgbGVuLCB2b2lkICpwdHIpOworaW50IHBjbWNpYV93cml0ZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBpbnQgYXR0ciwKKwkJCXVfaW50IGFkZHIsIHVfaW50IGxlbiwgdm9pZCAqcHRyKTsKIHZvaWQgcmVsZWFzZV9jaXNfbWVtKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKTsKIHZvaWQgZGVzdHJveV9jaXNfY2FjaGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwogaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCkBAIC0xODgsMzQgKzE5MCw0IEBACiAKIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKTsKIAotCi0jaWZkZWYgQ09ORklHX1BDTUNJQV9JT0NUTAotLyogZHMuYyAqLwotZXh0ZXJuIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwotZXh0ZXJuIHZvaWQgcGNtY2lhX3B1dF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKLQotc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCQl1bnNpZ25lZCBpbnQgZnVuY3Rpb24pOwotCi0vKiBwY21jaWFfaW9jdGwuYyAqLwotZXh0ZXJuIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKTsKLWV4dGVybiB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCk7Ci1leHRlcm4gaW50IGhhbmRsZV9yZXF1ZXN0KHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBldmVudF90IGV2ZW50KTsKLQotI2Vsc2UgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBjbWNpYV9zZXR1cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdCBwY21jaWFfY2xlYW51cF9pb2N0bCh2b2lkKSB7IHJldHVybjsgfQotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLQlyZXR1cm47Ci19Ci1zdGF0aWMgaW5saW5lIGludCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19QQ01DSUFfSU9DVEwgKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9DU19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCmluZGV4IDBmNGNjM2YuLjI3NTc1ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxMDAwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCBlYWM5NjE0Li41NTU3MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIChDKSAxOTk5CQlEYXZpZCBBLiBIaW5kcwotICogKEMpIDIwMDMgLSAyMDA2CURvbWluaWsgQnJvZG93c2tpCisgKiAoQykgMjAwMyAtIDIwMTAJRG9taW5payBCcm9kb3dza2kKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CkBAIC0yMTMsNyArMjEyLDcgQEAKIAogLyogcGNtY2lhX2RldmljZSBoYW5kbGluZyAqLwogCi1zdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2dldF9kZXYoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQorc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZ2V0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJc3RydWN0IGRldmljZSAqdG1wX2RldjsKIAl0bXBfZGV2ID0gZ2V0X2RldmljZSgmcF9kZXYtPmRldik7CkBAIC0yMjIsNyArMjIxLDcgQEAKIAlyZXR1cm4gdG9fcGNtY2lhX2Rldih0bXBfZGV2KTsKIH0KIAotdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCitzdGF0aWMgdm9pZCBwY21jaWFfcHV0X2RldihzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJaWYgKHBfZGV2KQogCQlwdXRfZGV2aWNlKCZwX2Rldi0+ZGV2KTsKQEAgLTI5NCw3ICsyOTMsNyBAQAogCX0KIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JaWYgKChzLT5wY21jaWFfc3RhdGUuaGFzX3BmYykgJiYKKwlpZiAoKHMtPnBjbWNpYV9wZmMpICYmCiAJICAgIChwX2Rldi0+c29ja2V0LT5kZXZpY2VfY291bnQgPT0gMSkgJiYgKHBfZGV2LT5kZXZpY2Vfbm8gPT0gMCkpCiAJCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfUkVRVUVSWSk7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtMzU5LDcgKzM1OCw3IEBACiAJICogcHNldWRvIG11bHRpLWZ1bmN0aW9uIGNhcmQsIHdlIG5lZWQgdG8gdW5iaW5kCiAJICogYWxsIGRldmljZXMKIAkgKi8KLQlpZiAoKHBfZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKSAmJgorCWlmICgocF9kZXYtPnNvY2tldC0+cGNtY2lhX3BmYykgJiYKIAkgICAgKHBfZGV2LT5zb2NrZXQtPmRldmljZV9jb3VudCA+IDApICYmCiAJICAgIChwX2Rldi0+ZGV2aWNlX25vID09IDApKQogCQlwY21jaWFfY2FyZF9yZW1vdmUocF9kZXYtPnNvY2tldCwgcF9kZXYpOwpAQCAtNDc3LDcgKzQ3Niw4IEBACiB9CiAKIAotc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24pCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYV9kZXZpY2VfYWRkKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uKQogewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgKnRtcF9kZXY7CiAJaW50IGk7CkBAIC01MzEsNyArNTMxLDYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkKIAkJaWYgKHBfZGV2LT5mdW5jID09IHRtcF9kZXYtPmZ1bmMpIHsKIAkJCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSB0bXBfZGV2LT5mdW5jdGlvbl9jb25maWc7Ci0JCQlwX2Rldi0+aW8gPSB0bXBfZGV2LT5pbzsKIAkJCXBfZGV2LT5pcnEgPSB0bXBfZGV2LT5pcnE7CiAJCQlrcmVmX2dldCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKIAkJfQpAQCAtNTQ0LDE1ICs1NDMsMjkgQEAKIAkJCSJJUlEgc2V0dXAgZmFpbGVkIC0tIGRldmljZSBtaWdodCBub3Qgd29ya1xuIik7CiAKIAlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKKwkJY29uZmlnX3QgKmM7CiAJCWRldl9kYmcoJnBfZGV2LT5kZXYsICJjcmVhdGluZyBjb25maWdfdFxuIik7Ci0JCXBfZGV2LT5mdW5jdGlvbl9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpIHsKKwkJYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIWMpIHsKIAkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJCWdvdG8gZXJyX3VucmVnOwogCQl9Ci0JCWtyZWZfaW5pdCgmcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZy0+cmVmKTsKKwkJcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZyA9IGM7CisJCWtyZWZfaW5pdCgmYy0+cmVmKTsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9JT19XSU47IGkrKykgeworCQkJYy0+aW9baV0ubmFtZSA9IHBfZGV2LT5kZXZuYW1lOworCQkJYy0+aW9baV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCQl9CisJCWZvciAoaSA9IDA7IGk8IE1BWF9XSU47IGkrKykgeworCQkJYy0+bWVtW2ldLm5hbWUgPSBwX2Rldi0+ZGV2bmFtZTsKKwkJCWMtPm1lbVtpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCQl9CiAJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspCisJCXBfZGV2LT5yZXNvdXJjZVtpXSA9ICZwX2Rldi0+ZnVuY3Rpb25fY29uZmlnLT5pb1tpXTsKKwlmb3IgKDsgaSA8IChNQVhfSU9fV0lOICsgTUFYX1dJTik7IGkrKykKKwkJcF9kZXYtPnJlc291cmNlW2ldID0gJnBfZGV2LT5mdW5jdGlvbl9jb25maWctPm1lbVtpLU1BWF9JT19XSU5dOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJZGV2X3ByaW50ayhLRVJOX05PVElDRSwgJnBfZGV2LT5kZXYsCkBAIC02ODAsNyArNjkzLDcgQEAKIAkgKiBjYWxsIHBjbWNpYV9kZXZpY2VfYWRkKCkgLS0gd2hpY2ggd2lsbCBmYWlsIGlmIGJvdGgKIAkgKiBkZXZpY2VzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQuICovCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQloYXNfcGZjID0gcy0+cGNtY2lhX3N0YXRlLmhhc19wZmM7CisJaGFzX3BmYyA9IHMtPnBjbWNpYV9wZmM7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCWlmIChoYXNfcGZjKQogCQlwY21jaWFfZGV2aWNlX2FkZChzLCAwKTsKQEAgLTgxMiw3ICs4MjUsNyBAQAogCWlmIChkaWQtPm1hdGNoX2ZsYWdzICYgUENNQ0lBX0RFVl9JRF9NQVRDSF9ERVZJQ0VfTk8pIHsKIAkJZGV2X2RiZygmZGV2LT5kZXYsICJ0aGlzIGlzIGEgcHNldWRvLW11bHRpLWZ1bmN0aW9uIGRldmljZVxuIik7CiAJCW11dGV4X2xvY2soJmRldi0+c29ja2V0LT5vcHNfbXV0ZXgpOwotCQlkZXYtPnNvY2tldC0+cGNtY2lhX3N0YXRlLmhhc19wZmMgPSAxOworCQlkZXYtPnNvY2tldC0+cGNtY2lhX3BmYyA9IDE7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zb2NrZXQtPm9wc19tdXRleCk7CiAJCWlmIChkZXYtPmRldmljZV9ubyAhPSBkaWQtPmRldmljZV9ubykKIAkJCXJldHVybiAwOwpAQCAtODI2LDcgKzgzOSw3IEBACiAKIAkJLyogaWYgdGhpcyBpcyBhIHBzZXVkby1tdWx0aS1mdW5jdGlvbiBkZXZpY2UsCiAJCSAqIHdlIG5lZWQgZXhwbGljaXQgbWF0Y2hlcyAqLwotCQlpZiAoZGV2LT5zb2NrZXQtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjKQorCQlpZiAoZGV2LT5zb2NrZXQtPnBjbWNpYV9wZmMpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKGRldi0+ZGV2aWNlX25vKQogCQkJcmV0dXJuIDA7CkBAIC04ODUsMTQgKzg5OCw2IEBACiAJfQogCW11dGV4X3VubG9jaygmcF9kcnYtPmR5bmlkcy5sb2NrKTsKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKLQkvKiBtYXRjaGluZyBieSBjYXJkbWdyICovCi0JaWYgKHBfZGV2LT5jYXJkbWdyID09IHBfZHJ2KSB7Ci0JCWRldl9kYmcoZGV2LCAiY2FyZG1nciBtYXRjaGVkIHRvICVzXG4iLCBkcnYtPm5hbWUpOwotCQlyZXR1cm4gMTsKLQl9Ci0jZW5kaWYKLQogCXdoaWxlIChkaWQgJiYgZGlkLT5tYXRjaF9mbGFncykgewogCQlkZXZfZGJnKGRldiwgInRyeWluZyB0byBtYXRjaCB0byAlc1xuIiwgZHJ2LT5uYW1lKTsKIAkJaWYgKHBjbWNpYV9kZXZtYXRjaChwX2RldiwgZGlkKSkgewpAQCAtMTAwNiw2ICsxMDExLDE4IEBACiBwY21jaWFfZGV2aWNlX3N0cmluZ2F0dHIocHJvZF9pZDMsIHByb2RfaWRbMl0pOwogcGNtY2lhX2RldmljZV9zdHJpbmdhdHRyKHByb2RfaWQ0LCBwcm9kX2lkWzNdKTsKIAorc3RhdGljIHNzaXplX3QgcGNtY2lhX3Nob3dfcmVzb3VyY2VzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gdG9fcGNtY2lhX2RldihkZXYpOworCWNoYXIgKnN0ciA9IGJ1ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ01DSUFfTlVNX1JFU09VUkNFUzsgaSsrKQorCQlzdHIgKz0gc3ByaW50ZihzdHIsICIlcHJcbiIsIHBfZGV2LT5yZXNvdXJjZVtpXSk7CisKKwlyZXR1cm4gc3RyIC0gYnVmOworfQogCiBzdGF0aWMgc3NpemVfdCBwY21jaWFfc2hvd19wbV9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0xMDc2LDYgKzEwOTMsNyBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjbWNpYV9kZXZfYXR0cnNbXSA9IHsKIAlfX0FUVFIoZnVuY3Rpb24sIDA0NDQsIGZ1bmNfc2hvdywgTlVMTCksCiAJX19BVFRSKHBtX3N0YXRlLCAwNjQ0LCBwY21jaWFfc2hvd19wbV9zdGF0ZSwgcGNtY2lhX3N0b3JlX3BtX3N0YXRlKSwKKwlfX0FUVFIocmVzb3VyY2VzLCAwNDQ0LCBwY21jaWFfc2hvd19yZXNvdXJjZXMsIE5VTEwpLAogCV9fQVRUUl9STyhmdW5jX2lkKSwKIAlfX0FUVFJfUk8obWFuZl9pZCksCiAJX19BVFRSX1JPKGNhcmRfaWQpLApAQCAtMTIxNSw4NiArMTIzMyw1NyBAQAogCXJldHVybiAwOwogfQogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0vKiBOb3JtYWxseSwgdGhlIGV2ZW50IGlzIHBhc3NlZCB0byBpbmRpdmlkdWFsIGRyaXZlcnMgYWZ0ZXIKLSAqIGluZm9ybWluZyB1c2Vyc3BhY2UuIE9ubHkgZm9yIENTX0VWRU5UX0NBUkRfUkVNT1ZBTCB0aGlzCi0gKiBpcyBpbnZlcnNlZCB0byBtYWludGFpbiBoaXN0b3JpYyBjb21wYXRpYmlsaXR5LgotICovCi0KLXN0YXRpYyBpbnQgZHNfZXZlbnQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCwgZXZlbnRfdCBldmVudCwgaW50IHByaW9yaXR5KQorc3RhdGljIGludCBwY21jaWFfYnVzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQogewotCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcGNtY2lhX2dldF9zb2NrZXQoc2t0KTsKKwlhdG9taWNfc2V0KCZza3QtPnByZXNlbnQsIDApOworCXBjbWNpYV9jYXJkX3JlbW92ZShza3QsIE5VTEwpOwogCi0JaWYgKCFzKSB7Ci0JCWRldl9wcmludGsoS0VSTl9FUlIsICZza3QtPmRldiwKLQkJCSAgICJQQ01DSUEgb2J0YWluaW5nIHJlZmVyZW5jZSB0byBzb2NrZXQgIglcCi0JCQkgICAiZmFpbGVkLCBldmVudCAweCV4IGxvc3QhXG4iLCBldmVudCk7Ci0JCXJldHVybiAtRU5PREVWOworCW11dGV4X2xvY2soJnNrdC0+b3BzX211dGV4KTsKKwlkZXN0cm95X2Npc19jYWNoZShza3QpOworCXBjbWNpYV9jbGVhbnVwX2lycShza3QpOworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtY2lhX2J1c19hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwlhdG9taWNfc2V0KCZza3QtPnByZXNlbnQsIDEpOworCisJbXV0ZXhfbG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCXNrdC0+cGNtY2lhX3BmYyA9IDA7CisJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsgLyogdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4uLiAqLworCW11dGV4X3VubG9jaygmc2t0LT5vcHNfbXV0ZXgpOworCisJcGNtY2lhX2NhcmRfYWRkKHNrdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21jaWFfYnVzX2Vhcmx5X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWlmICghdmVyaWZ5X2Npc19jYWNoZShza3QpKSB7CisJCXBjbWNpYV9wdXRfc29ja2V0KHNrdCk7CisJCXJldHVybiAwOwogCX0KIAotCWRldl9kYmcoJnNrdC0+ZGV2LCAiZHNfZXZlbnQoMHglMDZ4LCAlZCwgMHglcClcbiIsCi0JCSAgIGV2ZW50LCBwcmlvcml0eSwgc2t0KTsKKwlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKIAotCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIENTX0VWRU5UX0NBUkRfUkVNT1ZBTDoKLQkJYXRvbWljX3NldCgmc2t0LT5wcmVzZW50LCAwKTsKLQkJcGNtY2lhX2NhcmRfcmVtb3ZlKHNrdCwgTlVMTCk7Ci0JCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKLQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7Ci0JCXBjbWNpYV9jbGVhbnVwX2lycShzKTsKLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlicmVhazsKKwkvKiBmaXJzdCwgcmVtb3ZlIHRoZSBjYXJkICovCisJcGNtY2lhX2J1c19yZW1vdmUoc2t0KTsKIAotCWNhc2UgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT046Ci0JCWF0b21pY19zZXQoJnNrdC0+cHJlc2VudCwgMSk7Ci0JCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JCXMtPnBjbWNpYV9zdGF0ZS5oYXNfcGZjID0gMDsKLQkJZGVzdHJveV9jaXNfY2FjaGUocyk7IC8qIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuLi4gKi8KLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlwY21jaWFfY2FyZF9hZGQoc2t0KTsKLQkJaGFuZGxlX2V2ZW50KHNrdCwgZXZlbnQpOwotCQlicmVhazsKKwltdXRleF9sb2NrKCZza3QtPm9wc19tdXRleCk7CisJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKKwlrZnJlZShza3QtPmZha2VfY2lzKTsKKwlza3QtPmZha2VfY2lzID0gTlVMTDsKKwlza3QtPmZ1bmN0aW9ucyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZza3QtPm9wc19tdXRleCk7CiAKLQljYXNlIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1Q6Ci0JCWJyZWFrOworCS8qIG5vdywgYWRkIHRoZSBuZXcgY2FyZCAqLworCXBjbWNpYV9idXNfYWRkKHNrdCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIENTX0VWRU5UX1BNX1JFU1VNRToKLQkJaWYgKHZlcmlmeV9jaXNfY2FjaGUoc2t0KSAhPSAwKSB7Ci0JCQlkZXZfZGJnKCZza3QtPmRldiwgImNpcyBtaXNtYXRjaCAtIGRpZmZlcmVudCBjYXJkXG4iKTsKLQkJCS8qIGZpcnN0LCByZW1vdmUgdGhlIGNhcmQgKi8KLQkJCWRzX2V2ZW50KHNrdCwgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMLCBDU19FVkVOVF9QUklfSElHSCk7Ci0JCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJZGVzdHJveV9jaXNfY2FjaGUoc2t0KTsKLQkJCWtmcmVlKHNrdC0+ZmFrZV9jaXMpOwotCQkJc2t0LT5mYWtlX2NpcyA9IE5VTEw7Ci0JCQlzLT5mdW5jdGlvbnMgPSAwOwotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJLyogbm93LCBhZGQgdGhlIG5ldyBjYXJkICovCi0JCQlkc19ldmVudChza3QsIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OLAotCQkJCSBDU19FVkVOVF9QUklfTE9XKTsKLQkJfQotCQloYW5kbGVfZXZlbnQoc2t0LCBldmVudCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDU19FVkVOVF9QTV9TVVNQRU5EOgotCWNhc2UgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUw6Ci0JY2FzZSBDU19FVkVOVF9DQVJEX1JFU0VUOgotCWRlZmF1bHQ6Ci0JCWhhbmRsZV9ldmVudChza3QsIGV2ZW50KTsKLQkJYnJlYWs7Ci0gICAgfQotCi0gICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci0KLSAgICByZXR1cm4gMDsKLX0gLyogZHNfZXZlbnQgKi8KIAogLyoKICAqIE5PVEU6IFRoaXMgaXMgcmFjeS4gVGhlcmUncyBubyBndWFyYW50ZWUgdGhlIGNhcmQgd2lsbCBzdGlsbCBiZQpAQCAtMTMyMywxMCArMTMxMiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9jYWxsYmFjayBwY21jaWFfYnVzX2NhbGxiYWNrID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5ldmVudCA9IGRzX2V2ZW50LAorCS5hZGQgPSBwY21jaWFfYnVzX2FkZCwKKwkucmVtb3ZlID0gcGNtY2lhX2J1c19yZW1vdmUsCiAJLnJlcXVlcnkgPSBwY21jaWFfcmVxdWVyeSwKIAkudmFsaWRhdGUgPSBwY2NhcmRfdmFsaWRhdGVfY2lzLAogCS5zdXNwZW5kID0gcGNtY2lhX2J1c19zdXNwZW5kLAorCS5lYXJseV9yZXN1bWUgPSBwY21jaWFfYnVzX2Vhcmx5X3Jlc3VtZSwKIAkucmVzdW1lID0gcGNtY2lhX2J1c19yZXN1bWUsCiB9OwogCkBAIC0xMzUwLDExICsxMzQxLDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmc29ja2V0LT5xdWV1ZSk7Ci0jZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmc29ja2V0LT5kZXZpY2VzX2xpc3QpOwotCW1lbXNldCgmc29ja2V0LT5wY21jaWFfc3RhdGUsIDAsIHNpemVvZih1OCkpOworCXNvY2tldC0+cGNtY2lhX3BmYyA9IDA7CiAJc29ja2V0LT5kZXZpY2VfY291bnQgPSAwOwogCWF0b21pY19zZXQoJnNvY2tldC0+cHJlc2VudCwgMCk7CiAKQEAgLTE0MjksOCArMTQxNyw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcGNtY2lhX3NldHVwX2lvY3RsKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIGZzX2luaXRjYWxsKGluaXRfcGNtY2lhX2J1cyk7IC8qIG9uZSBsZXZlbCBhZnRlciBzdWJzeXNfaW5pdGNhbGwgc28gdGhhdApAQCAtMTQzOSw4ICsxNDI1LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcGNtY2lhX2J1cyh2b2lkKQogewotCXBjbWNpYV9jbGVhbnVwX2lvY3RsKCk7Ci0KIAljbGFzc19pbnRlcmZhY2VfdW5yZWdpc3RlcigmcGNtY2lhX2J1c19pbnRlcmZhY2UpOwogCiAJYnVzX3VucmVnaXN0ZXIoJnBjbWNpYV9idXNfdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCmluZGV4IDMwMDNiYjMuLjA1ZDA4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA5ZTJhMTU2Li42MTc0NmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtNTAsNyArNTAsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCA3ZTE2ZWQ4Li4yNGRlNDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggNmM1YzNmOS4uOGU0NzIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCA4NGE3MGE1Li5mMGVjYWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2ZzX3BkLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2Npcy5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2Npcy5jCmluZGV4IDRhNjVlYWYuLjBhYzU0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9jaXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfY2lzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDA3YTJhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NyArMCwwIEBACi0vKgotICogcGNtY2lhX2lvY3RsLmMgLS0gaW9jdGwgaW50ZXJmYWNlIGZvciBjYXJkbWdyIGFuZCBjYXJkY3RsCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKLSAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCi0gKiBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAoQykgMTk5OQkJRGF2aWQgQS4gSGluZHMKLSAqIChDKSAyMDAzIC0gMjAwNAlEb21pbmlrIEJyb2Rvd3NraQotICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgd2lsbCBnbyBhd2F5IHNvb24uCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgotI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KLSNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2RzLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL3NzLmg+Ci0KLSNpbmNsdWRlICJjc19pbnRlcm5hbC5oIgotCi1zdGF0aWMgaW50IG1ham9yX2RldiA9IC0xOwotCi0KLS8qIERldmljZSB1c2VyIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIE1BWF9FVkVOVFMJMzIKLSNkZWZpbmUgVVNFUl9NQUdJQwkweDdlYTQKLSNkZWZpbmUgQ0hFQ0tfVVNFUih1KSBcCi0gICAgKCgodSkgPT0gTlVMTCkgfHwgKCh1KS0+dXNlcl9tYWdpYyAhPSBVU0VSX01BR0lDKSkKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9pbmZvX3QgewotCXVfaW50CQkJdXNlcl9tYWdpYzsKLQlpbnQJCQlldmVudF9oZWFkLCBldmVudF90YWlsOwotCWV2ZW50X3QJCQlldmVudFtNQVhfRVZFTlRTXTsKLQlzdHJ1Y3QgdXNlcl9pbmZvX3QJKm5leHQ7Ci0Jc3RydWN0IHBjbWNpYV9zb2NrZXQJKnNvY2tldDsKLX0gdXNlcl9pbmZvX3Q7Ci0KLQotc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpnZXRfcGNtY2lhX2RldmljZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKLQkJCQkJCXVuc2lnbmVkIGludCBmdW5jdGlvbikKLXsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBfZGV2LCAmcy0+ZGV2aWNlc19saXN0LCBzb2NrZXRfZGV2aWNlX2xpc3QpIHsKLQkJaWYgKHBfZGV2LT5mdW5jID09IGZ1bmN0aW9uKSB7Ci0JCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlyZXR1cm4gcGNtY2lhX2dldF9kZXYocF9kZXYpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogYmFja3dhcmRzLWNvbXBhdGlibGUgYWNjZXNzaW5nIG9mIGRyaXZlciAtLS0gYnkgbmFtZSEgKi8KLQotc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyICpnZXRfcGNtY2lhX2RyaXZlcihkZXZfaW5mb190ICpkZXZfaW5mbykKLXsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2OwotCXN0cnVjdCBwY21jaWFfZHJpdmVyICpwX2RydjsKLQotCWRydiA9IGRyaXZlcl9maW5kKChjaGFyICopIGRldl9pbmZvLCAmcGNtY2lhX2J1c190eXBlKTsKLQlpZiAoIWRydikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwX2RydiA9IGNvbnRhaW5lcl9vZihkcnYsIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpOwotCi0JcmV0dXJuIHBfZHJ2OwotfQotCi0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19wY2NhcmQ7Ci0KLXN0YXRpYyBpbnQgcHJvY19yZWFkX2RyaXZlcnNfY2FsbGJhY2soc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgdm9pZCAqX20pCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gX207Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2ID0gY29udGFpbmVyX29mKGRyaXZlciwKLQkJCQkJCSAgIHN0cnVjdCBwY21jaWFfZHJpdmVyLCBkcnYpOwotCi0Jc2VxX3ByaW50ZihtLCAiJS0yNC4yNHMgMSAlZFxuIiwgcF9kcnYtPmRydi5uYW1lLAotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECi0JCSAgICAgIChwX2Rydi0+b3duZXIpID8gbW9kdWxlX3JlZmNvdW50KHBfZHJ2LT5vd25lcikgOiAxCi0jZWxzZQotCQkgICAgICAxCi0jZW5kaWYKLQkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjY2FyZF9kcml2ZXJzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JcmV0dXJuIGJ1c19mb3JfZWFjaF9kcnYoJnBjbWNpYV9idXNfdHlwZSwgTlVMTCwKLQkJCQltLCBwcm9jX3JlYWRfZHJpdmVyc19jYWxsYmFjayk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNjYXJkX2RyaXZlcnNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwY2NhcmRfZHJpdmVyc19wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwY2NhcmRfZHJpdmVyc19wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHBjY2FyZF9kcml2ZXJzX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLSNlbmRpZgotCi0KLSNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCi0KLXN0YXRpYyBpbnQgYWRqdXN0X2lycShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgYWRqdXN0X3QgKmFkaikKLXsKLQlpbnQgaXJxOwotCXUzMiBtYXNrOwotCi0JaXJxID0gYWRqLT5yZXNvdXJjZS5pcnEuSVJROwotCWlmICgoaXJxIDwgMCkgfHwgKGlycSA+IDE1KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWRqLT5BY3Rpb24gIT0gUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UpCi0JCXJldHVybiAwOwotCi0JbWFzayA9IDEgPDwgaXJxOwotCi0JaWYgKCEocy0+aXJxX21hc2sgJiBtYXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQlzLT5pcnFfbWFzayAmPSB+bWFzazsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RfaXJxKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBhZGp1c3RfdCAqYWRqKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYKLQotc3RhdGljIGludCBwY21jaWFfYWRqdXN0X3Jlc291cmNlX2luZm8oYWRqdXN0X3QgKmFkaikKLXsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLQlpbnQgcmV0ID0gLUVOT1NZUzsKLQotCWRvd25fcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZwY21jaWFfc29ja2V0X2xpc3QsIHNvY2tldF9saXN0KSB7Ci0KLQkJaWYgKGFkai0+UmVzb3VyY2UgPT0gUkVTX0lSUSkKLQkJCXJldCA9IGFkanVzdF9pcnEocywgYWRqKTsKLQotCQllbHNlIGlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9pbykgewotCQkJdW5zaWduZWQgbG9uZyBiZWdpbiwgZW5kOwotCi0JCQkvKiB5b3UgY2FuJ3QgdXNlIHRoZSBvbGQgaW50ZXJmYWNlIGlmIHRoZSBuZXcKLQkJCSAqIG9uZSB3YXMgdXNlZCBiZWZvcmUgKi8KLQkJCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlpZiAoKHMtPnJlc291cmNlX3NldHVwX25ldykgJiYKLQkJCSAgICAhKHMtPnJlc291cmNlX3NldHVwX29sZCkpIHsKLQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKCEocy0+cmVzb3VyY2Vfc2V0dXBfb2xkKSkKLQkJCQlzLT5yZXNvdXJjZV9zZXR1cF9vbGQgPSAxOwotCi0JCQlzd2l0Y2ggKGFkai0+UmVzb3VyY2UpIHsKLQkJCWNhc2UgUkVTX01FTU9SWV9SQU5HRToKLQkJCQliZWdpbiA9IGFkai0+cmVzb3VyY2UubWVtb3J5LkJhc2U7Ci0JCQkJZW5kID0gYWRqLT5yZXNvdXJjZS5tZW1vcnkuQmFzZSArIGFkai0+cmVzb3VyY2UubWVtb3J5LlNpemUgLSAxOwotCQkJCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9tZW0pCi0JCQkJCXJldCA9IHMtPnJlc291cmNlX29wcy0+YWRkX21lbShzLCBhZGotPkFjdGlvbiwgYmVnaW4sIGVuZCk7Ci0JCQljYXNlIFJFU19JT19SQU5HRToKLQkJCQliZWdpbiA9IGFkai0+cmVzb3VyY2UuaW8uQmFzZVBvcnQ7Ci0JCQkJZW5kID0gYWRqLT5yZXNvdXJjZS5pby5CYXNlUG9ydCArIGFkai0+cmVzb3VyY2UuaW8uTnVtUG9ydHMgLSAxOwotCQkJCWlmIChzLT5yZXNvdXJjZV9vcHMtPmFkZF9pbykKLQkJCQkJcmV0ID0gcy0+cmVzb3VyY2Vfb3BzLT5hZGRfaW8ocywgYWRqLT5BY3Rpb24sIGJlZ2luLCBlbmQpOwotCQkJfQotCQkJaWYgKCFyZXQpIHsKLQkJCQkvKiBhcyB0aGVyZSdzIG5vIHdheSB3ZSBrbm93IHRoaXMgaXMgdGhlCi0JCQkJICogbGFzdCBjYWxsIHRvIGFkanVzdF9yZXNvdXJjZV9pbmZvLCB3ZQotCQkJCSAqIGFsd2F5cyBuZWVkIHRvIGFzc3VtZSB0aGlzIGlzIHRoZSBsYXRlc3QKLQkJCQkgKiBvbmUuLi4gKi8KLQkJCQlzLT5yZXNvdXJjZV9zZXR1cF9kb25lID0gMTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQkJfQotCX0KLQl1cF9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKiogcGNtY2lhX2dldF93aW5kb3cKLSAqLwotc3RhdGljIGludCBwY21jaWFfZ2V0X3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgd2luZG93X2hhbmRsZV90ICp3aF9vdXQsCi0JCQl3aW5kb3dfaGFuZGxlX3Qgd2gsIHdpbl9yZXFfdCAqcmVxKQotewotCXBjY2FyZF9tZW1fbWFwICp3aW47Ci0Jd2luZG93X2hhbmRsZV90IHc7Ci0KLQl3aC0tOwotCWlmICghcyB8fCAhKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAod2ggPj0gTUFYX1dJTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yICh3ID0gd2g7IHcgPCBNQVhfV0lOOyB3KyspCi0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKQotCQkJYnJlYWs7Ci0JaWYgKHcgPT0gTUFYX1dJTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2luID0gJnMtPndpblt3XTsKLQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7Ci0JcmVxLT5TaXplID0gd2luLT5yZXMtPmVuZCAtIHdpbi0+cmVzLT5zdGFydCArIDE7Ci0JcmVxLT5BY2Nlc3NTcGVlZCA9IHdpbi0+c3BlZWQ7Ci0JcmVxLT5BdHRyaWJ1dGVzID0gMDsKLQlpZiAod2luLT5mbGFncyAmIE1BUF9BVFRSSUIpCi0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fTUVNT1JZX1RZUEVfQU07Ci0JaWYgKHdpbi0+ZmxhZ3MgJiBNQVBfQUNUSVZFKQotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQlpZiAod2luLT5mbGFncyAmIE1BUF8xNkJJVCkKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9EQVRBX1dJRFRIXzE2OwotCWlmICh3aW4tPmZsYWdzICYgTUFQX1VTRV9XQUlUKQotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX1VTRV9XQUlUOwotCi0JKndoX291dCA9IHcgKyAxOwotCXJldHVybiAwOwotfSAvKiBwY21jaWFfZ2V0X3dpbmRvdyAqLwotCi0KLS8qKiBwY21jaWFfZ2V0X21lbV9wYWdlCi0gKgotICogQ2hhbmdlIHRoZSBjYXJkIGFkZHJlc3Mgb2YgYW4gYWxyZWFkeSBvcGVuIG1lbW9yeSB3aW5kb3cuCi0gKi8KLXN0YXRpYyBpbnQgcGNtY2lhX2dldF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0LCB3aW5kb3dfaGFuZGxlX3Qgd2gsCi0JCQltZW1yZXFfdCAqcmVxKQotewotCXdoLS07Ci0JaWYgKHdoID49IE1BWF9XSU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVxLT5QYWdlID0gMDsKLQlyZXEtPkNhcmRPZmZzZXQgPSBza3QtPndpblt3aF0uY2FyZF9zdGFydDsKLQlyZXR1cm4gMDsKLX0gLyogcGNtY2lhX2dldF9tZW1fcGFnZSAqLwotCi0KLS8qKiBwY2NhcmRfZ2V0X3N0YXR1cwotICoKLSAqIEdldCB0aGUgY3VycmVudCBzb2NrZXQgc3RhdGUgYml0cy4gIFdlIGRvbid0IHN1cHBvcnQgdGhlIGxhdGNoZWQKLSAqIFNvY2tldFN0YXRlIHlldDogSSBoYXZlbid0IHNlZW4gYW55IHBvaW50IGZvciBpdC4KLSAqLwotCi1zdGF0aWMgaW50IHBjY2FyZF9nZXRfc3RhdHVzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCi0JCQkgICAgIGNzX3N0YXR1c190ICpzdGF0dXMpCi17Ci0JY29uZmlnX3QgKmM7Ci0JaW50IHZhbDsKLQotCXMtPm9wcy0+Z2V0X3N0YXR1cyhzLCAmdmFsKTsKLQlzdGF0dXMtPkNhcmRTdGF0ZSA9IHN0YXR1cy0+U29ja2V0U3RhdGUgPSAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19ERVRFQ1QpID8gQ1NfRVZFTlRfQ0FSRF9ERVRFQ1QgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19DQVJEQlVTKSA/IENTX0VWRU5UX0NCX0RFVEVDVCA6IDA7Ci0Jc3RhdHVzLT5DYXJkU3RhdGUgfD0gKHZhbCAmIFNTXzNWQ0FSRCkgPyBDU19FVkVOVF8zVkNBUkQgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9ICh2YWwgJiBTU19YVkNBUkQpID8gQ1NfRVZFTlRfWFZDQVJEIDogMDsKLQlpZiAocy0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkKLQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUE1fU1VTUEVORDsKLQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljID0gKHBfZGV2KSA/IHBfZGV2LT5mdW5jdGlvbl9jb25maWcgOiBOVUxMOwotCi0JaWYgKChjICE9IE5VTEwpICYmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpICYmCi0JICAgIChjLT5JbnRUeXBlICYgKElOVF9NRU1PUllfQU5EX0lPIHwgSU5UX1pPT01FRF9WSURFTykpKSB7Ci0JCXVfY2hhciByZWc7Ci0JCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9QSU5fUkVQTEFDRSkgewotCQkJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQkJCXBjbWNpYV9yZWFkX2Npc19tZW0ocywgMSwgKGMtPkNvbmZpZ0Jhc2UrQ0lTUkVHX1BSUik+PjEsIDEsICZyZWcpOwotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0KLQkJCQkocmVnICYgUFJSX1dQX1NUQVRVUykgPyBDU19FVkVOVF9XUklURV9QUk9URUNUIDogMDsKLQkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCQkJKHJlZyAmIFBSUl9SRUFEWV9TVEFUVVMpID8gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFIDogMDsKLQkJCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCQkJKHJlZyAmIFBSUl9CVkQyX1NUQVRVUykgPyBDU19FVkVOVF9CQVRURVJZX0xPVyA6IDA7Ci0JCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkJCShyZWcgJiBQUlJfQlZEMV9TVEFUVVMpID8gQ1NfRVZFTlRfQkFUVEVSWV9ERUFEIDogMDsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vIFBSUj8gIFRoZW4gYXNzdW1lIHdlJ3JlIGFsd2F5cyByZWFkeSAqLwotCQkJc3RhdHVzLT5DYXJkU3RhdGUgfD0gQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFOwotCQl9Ci0JCWlmIChjLT5DYXJkVmFsdWVzICYgUFJFU0VOVF9FWFRfU1RBVFVTKSB7Ci0JCQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJcGNtY2lhX3JlYWRfY2lzX21lbShzLCAxLCAoYy0+Q29uZmlnQmFzZStDSVNSRUdfRVNSKT4+MSwgMSwgJnJlZyk7Ci0JCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkJCShyZWcgJiBFU1JfUkVRX0FUVE4pID8gQ1NfRVZFTlRfUkVRVUVTVF9BVFRFTlRJT04gOiAwOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQlzdGF0dXMtPkNhcmRTdGF0ZSB8PQotCQkodmFsICYgU1NfV1JQUk9UKSA/IENTX0VWRU5UX1dSSVRFX1BST1RFQ1QgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCSh2YWwgJiBTU19CQVRERUFEKSA/IENTX0VWRU5UX0JBVFRFUllfREVBRCA6IDA7Ci0Jc3RhdHVzLT5DYXJkU3RhdGUgfD0KLQkJKHZhbCAmIFNTX0JBVFdBUk4pID8gQ1NfRVZFTlRfQkFUVEVSWV9MT1cgOiAwOwotCXN0YXR1cy0+Q2FyZFN0YXRlIHw9Ci0JCSh2YWwgJiBTU19SRUFEWSkgPyBDU19FVkVOVF9SRUFEWV9DSEFOR0UgOiAwOwotCXJldHVybiAwOwotfSAvKiBwY2NhcmRfZ2V0X3N0YXR1cyAqLwotCi1zdGF0aWMgaW50IHBjY2FyZF9nZXRfY29uZmlndXJhdGlvbl9pbmZvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAotCQkJCSAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCSAgY29uZmlnX2luZm9fdCAqY29uZmlnKQotewotCWNvbmZpZ190ICpjOwotCi0JaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSB7Ci0JCW1lbXNldChjb25maWcsIDAsIHNpemVvZihjb25maWdfaW5mb190KSk7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJY29uZmlnLT5PcHRpb24gPSBzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JCWlmIChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTX0NPTkZJRykgewotCQkJY29uZmlnLT5BdHRyaWJ1dGVzID0gQ09ORl9WQUxJRF9DTElFTlQ7Ci0JCQljb25maWctPkludFR5cGUgPSBJTlRfQ0FSREJVUzsKLQkJCWNvbmZpZy0+QXNzaWduZWRJUlEgPSBzLT5wY21jaWFfaXJxOwotCQkJaWYgKGNvbmZpZy0+QXNzaWduZWRJUlEpCi0JCQkJY29uZmlnLT5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKLQkJCWlmIChzLT5pb1swXS5yZXMpIHsKLQkJCQljb25maWctPkJhc2VQb3J0MSA9IHMtPmlvWzBdLnJlcy0+c3RhcnQ7Ci0JCQkJY29uZmlnLT5OdW1Qb3J0czEgPSBzLT5pb1swXS5yZXMtPmVuZCAtCi0JCQkJCWNvbmZpZy0+QmFzZVBvcnQxICsgMTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKLQotCWlmIChwX2RldikgewotCQljID0gcF9kZXYtPmZ1bmN0aW9uX2NvbmZpZzsKLQkJY29uZmlnLT5GdW5jdGlvbiA9IHBfZGV2LT5mdW5jOwotCX0gZWxzZSB7Ci0JCWMgPSBOVUxMOwotCQljb25maWctPkZ1bmN0aW9uID0gMDsKLQl9Ci0KLQlpZiAoKGMgPT0gTlVMTCkgfHwgIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWNvbmZpZy0+QXR0cmlidXRlcyA9IDA7Ci0JCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQkJY29uZmlnLT5WcHAxID0gY29uZmlnLT5WcHAyID0gcy0+c29ja2V0LlZwcDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JY29uZmlnLT5BdHRyaWJ1dGVzID0gYy0+QXR0cmlidXRlcyB8IENPTkZfVkFMSURfQ0xJRU5UOwotCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKLQljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOwotCWNvbmZpZy0+SW50VHlwZSA9IGMtPkludFR5cGU7Ci0JY29uZmlnLT5Db25maWdCYXNlID0gYy0+Q29uZmlnQmFzZTsKLQljb25maWctPlN0YXR1cyA9IGMtPlN0YXR1czsKLQljb25maWctPlBpbiA9IGMtPlBpbjsKLQljb25maWctPkNvcHkgPSBjLT5Db3B5OwotCWNvbmZpZy0+T3B0aW9uID0gYy0+T3B0aW9uOwotCWNvbmZpZy0+RXh0U3RhdHVzID0gYy0+RXh0U3RhdHVzOwotCWNvbmZpZy0+UHJlc2VudCA9IGNvbmZpZy0+Q2FyZFZhbHVlcyA9IGMtPkNhcmRWYWx1ZXM7Ci0JY29uZmlnLT5JUlFBdHRyaWJ1dGVzID0gYy0+aXJxLkF0dHJpYnV0ZXM7Ci0JY29uZmlnLT5Bc3NpZ25lZElSUSA9IHMtPnBjbWNpYV9pcnE7Ci0JY29uZmlnLT5CYXNlUG9ydDEgPSBjLT5pby5CYXNlUG9ydDE7Ci0JY29uZmlnLT5OdW1Qb3J0czEgPSBjLT5pby5OdW1Qb3J0czE7Ci0JY29uZmlnLT5BdHRyaWJ1dGVzMSA9IGMtPmlvLkF0dHJpYnV0ZXMxOwotCWNvbmZpZy0+QmFzZVBvcnQyID0gYy0+aW8uQmFzZVBvcnQyOwotCWNvbmZpZy0+TnVtUG9ydHMyID0gYy0+aW8uTnVtUG9ydHMyOwotCWNvbmZpZy0+QXR0cmlidXRlczIgPSBjLT5pby5BdHRyaWJ1dGVzMjsKLQljb25maWctPklPQWRkckxpbmVzID0gYy0+aW8uSU9BZGRyTGluZXM7Ci0KLQlyZXR1cm4gMDsKLX0gLyogcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8gKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZXNlIG1hbmFnZSBhIHJpbmcgYnVmZmVyIG9mIGV2ZW50cyBwZW5kaW5nIGZvciBvbmUgdXNlciBwcm9jZXNzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLXN0YXRpYyBpbnQgcXVldWVfZW1wdHkodXNlcl9pbmZvX3QgKnVzZXIpCi17Ci0gICAgcmV0dXJuICh1c2VyLT5ldmVudF9oZWFkID09IHVzZXItPmV2ZW50X3RhaWwpOwotfQotCi1zdGF0aWMgZXZlbnRfdCBnZXRfcXVldWVkX2V2ZW50KHVzZXJfaW5mb190ICp1c2VyKQotewotICAgIHVzZXItPmV2ZW50X3RhaWwgPSAodXNlci0+ZXZlbnRfdGFpbCsxKSAlIE1BWF9FVkVOVFM7Ci0gICAgcmV0dXJuIHVzZXItPmV2ZW50W3VzZXItPmV2ZW50X3RhaWxdOwotfQotCi1zdGF0aWMgdm9pZCBxdWV1ZV9ldmVudCh1c2VyX2luZm9fdCAqdXNlciwgZXZlbnRfdCBldmVudCkKLXsKLSAgICB1c2VyLT5ldmVudF9oZWFkID0gKHVzZXItPmV2ZW50X2hlYWQrMSkgJSBNQVhfRVZFTlRTOwotICAgIGlmICh1c2VyLT5ldmVudF9oZWFkID09IHVzZXItPmV2ZW50X3RhaWwpCi0JdXNlci0+ZXZlbnRfdGFpbCA9ICh1c2VyLT5ldmVudF90YWlsKzEpICUgTUFYX0VWRU5UUzsKLSAgICB1c2VyLT5ldmVudFt1c2VyLT5ldmVudF9oZWFkXSA9IGV2ZW50OwotfQotCi12b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgZXZlbnRfdCBldmVudCkKLXsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLSAgICBmb3IgKHVzZXIgPSBzLT51c2VyOyB1c2VyOyB1c2VyID0gdXNlci0+bmV4dCkKLQlxdWV1ZV9ldmVudCh1c2VyLCBldmVudCk7Ci0gICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzLT5xdWV1ZSk7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBiaW5kX3JlcXVlc3QoKSBhbmQgYmluZF9kZXZpY2UoKSBhcmUgbWVyZ2VkIGJ5IG5vdy4gUmVnaXN0ZXJfY2xpZW50KCkKLSAgICBpcyBjYWxsZWQgcmlnaHQgYXQgdGhlIGVuZCBvZiBiaW5kX3JlcXVlc3QoKSwgZHVyaW5nIHRoZSBkcml2ZXIncwotICAgIC0+YXR0YWNoKCkgY2FsbC4gSW5kaXZpZHVhbCBkZXNjcmlwdGlvbnM6Ci0KLSAgICBiaW5kX3JlcXVlc3QoKSBjb25uZWN0cyBhIHNvY2tldCB0byBhIHBhcnRpY3VsYXIgY2xpZW50IGRyaXZlci4KLSAgICBJdCBsb29rcyB1cCB0aGUgc3BlY2lmaWVkIGRldmljZSBJRCBpbiB0aGUgbGlzdCBvZiByZWdpc3RlcmVkCi0gICAgZHJpdmVycywgYmluZHMgaXQgdG8gdGhlIHNvY2tldCwgYW5kIHRyaWVzIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZQotICAgIG9mIHRoZSBkZXZpY2UuICB1bmJpbmRfcmVxdWVzdCgpIGRlbGV0ZXMgYSBkcml2ZXIgaW5zdGFuY2UuCi0KLSAgICBCaW5kX2RldmljZSgpIGFzc29jaWF0ZXMgYSBkZXZpY2UgZHJpdmVyIHdpdGggYSBwYXJ0aWN1bGFyIHNvY2tldC4KLSAgICBJdCBpcyBub3JtYWxseSBjYWxsZWQgYnkgRHJpdmVyIFNlcnZpY2VzIGFmdGVyIGl0IGhhcyBpZGVudGlmaWVkCi0gICAgYSBuZXdseSBpbnNlcnRlZCBjYXJkLiAgQW4gaW5zdGFuY2Ugb2YgdGhhdCBkcml2ZXIgd2lsbCB0aGVuIGJlCi0gICAgZWxpZ2libGUgdG8gcmVnaXN0ZXIgYXMgYSBjbGllbnQgb2YgdGhpcyBzb2NrZXQuCi0KLSAgICBSZWdpc3Rlcl9jbGllbnQoKSB1c2VzIHRoZSBkZXZfaW5mb190IGhhbmRsZSB0byBtYXRjaCB0aGUKLSAgICBjYWxsZXIgd2l0aCBhIHNvY2tldC4gIFRoZSBkcml2ZXIgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiBib3VuZAotICAgIHRvIGEgc29ja2V0IHdpdGggYmluZF9kZXZpY2UoKSAtLSBpbiBmYWN0LCBiaW5kX2RldmljZSgpCi0gICAgYWxsb2NhdGVzIHRoZSBjbGllbnQgc3RydWN0dXJlIHRoYXQgd2lsbCBiZSB1c2VkLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIGludCBiaW5kX3JlcXVlc3Qoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGJpbmRfaW5mb190ICpiaW5kX2luZm8pCi17Ci0Jc3RydWN0IHBjbWNpYV9kcml2ZXIgKnBfZHJ2OwotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKLQlpbnQgcmV0ID0gMDsKLQotCXMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoImJpbmRfcmVxdWVzdCglZCwgJyVzJylcbiIsIHMtPnNvY2ssCi0JICAgICAgIChjaGFyICopYmluZF9pbmZvLT5kZXZfaW5mbyk7Ci0KLQlwX2RydiA9IGdldF9wY21jaWFfZHJpdmVyKCZiaW5kX2luZm8tPmRldl9pbmZvKTsKLQlpZiAoIXBfZHJ2KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3B1dDsKLQl9Ci0KLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBfZHJ2LT5vd25lcikpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcHV0X2RyaXZlcjsKLQl9Ci0KLQltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocF9kZXYsICZzLT5kZXZpY2VzX2xpc3QsIHNvY2tldF9kZXZpY2VfbGlzdCkgewotCQlpZiAocF9kZXYtPmZ1bmMgPT0gYmluZF9pbmZvLT5mdW5jdGlvbikgewotCQkJaWYgKChwX2Rldi0+ZGV2LmRyaXZlciA9PSAmcF9kcnYtPmRydikpIHsKLQkJCQlpZiAocF9kZXYtPmNhcmRtZ3IpIHsKLQkJCQkJLyogaWYgdGhlcmUncyBhbHJlYWR5IGEgZGV2aWNlCi0JCQkJCSAqIHJlZ2lzdGVyZWQsIGFuZCBpdCB3YXMgcmVnaXN0ZXJlZAotCQkJCQkgKiBieSB1c2Vyc3BhY2UgYmVmb3JlLCB3ZSBuZWVkIHRvCi0JCQkJCSAqIHJldHVybiB0aGUgImluc3RhbmNlIi4gKi8KLQkJCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQkJCQliaW5kX2luZm8tPmluc3RhbmNlID0gcF9kZXY7Ci0JCQkJCXJldCA9IC1FQlVTWTsKLQkJCQkJZ290byBlcnJfcHV0X21vZHVsZTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiB0aGUgY29ycmVjdCBkcml2ZXIgbWFuYWdlZCB0byBiaW5kCi0JCQkJCSAqIGl0c2VsZiBtYWdpY2FsbHkgdG8gdGhlIGNvcnJlY3QKLQkJCQkJICogZGV2aWNlLiAqLwotCQkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCQkJCXBfZGV2LT5jYXJkbWdyID0gcF9kcnY7Ci0JCQkJCXJldCA9IDA7Ci0JCQkJCWdvdG8gZXJyX3B1dF9tb2R1bGU7Ci0JCQkJfQotCQkJfSBlbHNlIGlmICghcF9kZXYtPmRldi5kcml2ZXIpIHsKLQkJCQkvKiB0aGVyZSdzIGFscmVhZHkgYSBkZXZpY2UgYXZhaWxhYmxlIHdoZXJlCi0JCQkJICogbm8gZGV2aWNlIGhhcyBiZWVuIGJvdW5kIHRvIHlldC4gU28gd2UgZG9uJ3QKLQkJCQkgKiBuZWVkIHRvIHJlZ2lzdGVyIGEgZGV2aWNlISAqLwotCQkJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQkJCQlnb3RvIHJlc2NhbjsKLQkJCX0KLQkJfQotCX0KLQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0KLQlwX2RldiA9IHBjbWNpYV9kZXZpY2VfYWRkKHMsIGJpbmRfaW5mby0+ZnVuY3Rpb24pOwotCWlmICghcF9kZXYpIHsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJfcHV0X21vZHVsZTsKLQl9Ci0KLXJlc2NhbjoKLQlwX2Rldi0+Y2FyZG1nciA9IHBfZHJ2OwotCi0JLyogaWYgYSBkcml2ZXIgaXMgYWxyZWFkeSBydW5uaW5nLCB3ZSBjYW4gYWJvcnQgKi8KLQlpZiAocF9kZXYtPmRldi5kcml2ZXIpCi0JCWdvdG8gZXJyX3B1dF9tb2R1bGU7Ci0KLQkvKgotCSAqIFByZXZlbnQgdGhpcyByYWNpbmcgd2l0aCBhIGNhcmQgaW5zZXJ0aW9uLgotCSAqLwotCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7Ci0JcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKCZwY21jaWFfYnVzX3R5cGUpOwotCW11dGV4X3VubG9jaygmcy0+c2t0X211dGV4KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9wdXRfbW9kdWxlOwotCi0JLyogY2hlY2sgd2hldGhlciB0aGUgZHJpdmVyIGluZGVlZCBtYXRjaGVkLiBJIGRvbid0IGNhcmUgaWYgdGhpcwotCSAqIGlzIHJhY3kgb3Igbm90LCBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhcHBlbiBvbiBjYXJkbWdyIGFjY2VzcwotCSAqIHBhdGhzLi4uCi0JICovCi0JaWYgKCEocF9kZXYtPmRldi5kcml2ZXIgPT0gJnBfZHJ2LT5kcnYpKQotCQlwX2Rldi0+Y2FyZG1nciA9IE5VTEw7Ci0KLSBlcnJfcHV0X21vZHVsZToKLQltb2R1bGVfcHV0KHBfZHJ2LT5vd25lcik7Ci0gZXJyX3B1dF9kcml2ZXI6Ci0JcHV0X2RyaXZlcigmcF9kcnYtPmRydik7Ci0gZXJyX3B1dDoKLQlwY21jaWFfcHV0X3NvY2tldChzKTsKLQotCXJldHVybiByZXQ7Ci19IC8qIGJpbmRfcmVxdWVzdCAqLwotCi0jaWZkZWYgQ09ORklHX0NBUkRCVVMKLQotc3RhdGljIHN0cnVjdCBwY2lfYnVzICpwY21jaWFfbG9va3VwX2J1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKLXsKLQlpZiAoIXMgfHwgIShzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcy0+Y2JfZGV2LT5zdWJvcmRpbmF0ZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGdldF9kZXZpY2VfaW5mbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgYmluZF9pbmZvX3QgKmJpbmRfaW5mbywgaW50IGZpcnN0KQotewotCXN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldjsKLQlzdHJ1Y3QgcGNtY2lhX2RyaXZlciAqcF9kcnY7Ci0JaW50IHJldCA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfQ0FSREJVUwotCS8qCi0JICogU29tZSB1bmJlbGlldmFibHkgdWdseSBjb2RlIHRvIGFzc29jaWF0ZSB0aGUgUENJIGNhcmRidXMKLQkgKiBkZXZpY2UgYW5kIGl0cyBkcml2ZXIgd2l0aCB0aGUgUENNQ0lBICJiaW5kIiBpbmZvcm1hdGlvbi4KLQkgKi8KLQl7Ci0JCXN0cnVjdCBwY2lfYnVzICpidXM7Ci0KLQkJYnVzID0gcGNtY2lhX2xvb2t1cF9idXMocyk7Ci0JCWlmIChidXMpIHsKLQkJCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQotCQkJbGlzdCA9IGJ1cy0+ZGV2aWNlcy5uZXh0OwotCQkJd2hpbGUgKGxpc3QgIT0gJmJ1cy0+ZGV2aWNlcykgewotCQkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcGNpX2Rldl9iKGxpc3QpOwotCQkJCWxpc3QgPSBsaXN0LT5uZXh0OwotCi0JCQkJaWYgKGZpcnN0KSB7Ci0JCQkJCWRldiA9IHBkZXY7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCS8qIFRyeSB0byBoYW5kbGUgIm5leHQiIGhlcmUgc29tZSB3YXk/ICovCi0JCQl9Ci0JCQlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyKSB7Ci0JCQkJc3RybGNweShiaW5kX2luZm8tPm5hbWUsIGRldi0+ZHJpdmVyLT5uYW1lLCBERVZfTkFNRV9MRU4pOwotCQkJCWJpbmRfaW5mby0+bWFqb3IgPSAwOwotCQkJCWJpbmRfaW5mby0+bWlub3IgPSAwOwotCQkJCWJpbmRfaW5mby0+bmV4dCA9IE5VTEw7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwX2RldiwgJnMtPmRldmljZXNfbGlzdCwgc29ja2V0X2RldmljZV9saXN0KSB7Ci0JCWlmIChwX2Rldi0+ZnVuYyA9PSBiaW5kX2luZm8tPmZ1bmN0aW9uKSB7Ci0JCQlwX2RldiA9IHBjbWNpYV9nZXRfZGV2KHBfZGV2KTsKLQkJCWlmICghcF9kZXYpCi0JCQkJY29udGludWU7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQlyZXR1cm4gLUVOT0RFVjsKLQotIGZvdW5kOgotCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKLQotCXBfZHJ2ID0gdG9fcGNtY2lhX2RydihwX2Rldi0+ZGV2LmRyaXZlcik7Ci0JaWYgKHBfZHJ2ICYmICFwX2Rldi0+X2xvY2tlZCkgewotCQlyZXQgPSAtRUFHQUlOOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JaWYgKCFmaXJzdCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0Jc3RybGNweShiaW5kX2luZm8tPm5hbWUsIGRldl9uYW1lKCZwX2Rldi0+ZGV2KSwgREVWX05BTUVfTEVOKTsKLQliaW5kX2luZm8tPm5leHQgPSBOVUxMOwotCi0gZXJyX3B1dDoKLQlwY21jaWFfcHV0X2RldihwX2Rldik7Ci0JcmV0dXJuIHJldDsKLX0gLyogZ2V0X2RldmljZV9pbmZvICovCi0KLQotc3RhdGljIGludCBkc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotICAgIHNvY2tldF90IGkgPSBpbWlub3IoaW5vZGUpOwotICAgIHN0cnVjdCBwY21jaWFfc29ja2V0ICpzOwotICAgIHVzZXJfaW5mb190ICp1c2VyOwotICAgIHN0YXRpYyBpbnQgd2FybmluZ19wcmludGVkOwotICAgIGludCByZXQgPSAwOwotCi0gICAgcHJfZGVidWcoImRzX29wZW4oc29ja2V0ICVkKVxuIiwgaSk7Ci0KLSAgICBsb2NrX2tlcm5lbCgpOwotICAgIHMgPSBwY21jaWFfZ2V0X3NvY2tldF9ieV9ucihpKTsKLSAgICBpZiAoIXMpIHsKLQkgICAgcmV0ID0gLUVOT0RFVjsKLQkgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHMgPSBwY21jaWFfZ2V0X3NvY2tldChzKTsKLSAgICBpZiAoIXMpIHsKLQkgICAgcmV0ID0gLUVOT0RFVjsKLQkgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkgewotCSAgICBpZiAocy0+cGNtY2lhX3N0YXRlLmJ1c3kpIHsKLQkJICAgIHBjbWNpYV9wdXRfc29ja2V0KHMpOwotCQkgICAgcmV0ID0gLUVCVVNZOwotCQkgICAgZ290byBvdXQ7Ci0JICAgIH0KLQllbHNlCi0JICAgIHMtPnBjbWNpYV9zdGF0ZS5idXN5ID0gMTsKLSAgICB9Ci0KLSAgICB1c2VyID0ga21hbGxvYyhzaXplb2YodXNlcl9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKLSAgICBpZiAoIXVzZXIpIHsKLQkgICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci0JICAgIHJldCA9IC1FTk9NRU07Ci0JICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICB1c2VyLT5ldmVudF90YWlsID0gdXNlci0+ZXZlbnRfaGVhZCA9IDA7Ci0gICAgdXNlci0+bmV4dCA9IHMtPnVzZXI7Ci0gICAgdXNlci0+dXNlcl9tYWdpYyA9IFVTRVJfTUFHSUM7Ci0gICAgdXNlci0+c29ja2V0ID0gczsKLSAgICBzLT51c2VyID0gdXNlcjsKLSAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSB1c2VyOwotCi0gICAgaWYgKCF3YXJuaW5nX3ByaW50ZWQpIHsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBEZXRlY3RlZCBkZXByZWNhdGVkIFBDTUNJQSBpb2N0bCAiCi0JCQkidXNhZ2UgZnJvbSBwcm9jZXNzOiAlcy5cbiIsIGN1cnJlbnQtPmNvbW0pOwotCSAgICBwcmludGsoS0VSTl9JTkZPICJwY21jaWE6IFRoaXMgaW50ZXJmYWNlIHdpbGwgc29vbiBiZSByZW1vdmVkIGZyb20gIgotCQkJInRoZSBrZXJuZWw7IHBsZWFzZSBleHBlY3QgYnJlYWthZ2UgdW5sZXNzIHlvdSB1cGdyYWRlICIKLQkJCSJ0byBuZXcgdG9vbHMuXG4iKTsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicGNtY2lhOiBzZWUgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC8iCi0JCQkidXRpbHMva2VybmVsL3BjbWNpYS9wY21jaWEuaHRtbCBmb3IgZGV0YWlscy5cbiIpOwotCSAgICB3YXJuaW5nX3ByaW50ZWQgPSAxOwotICAgIH0KLQotICAgIGlmIChhdG9taWNfcmVhZCgmcy0+cHJlc2VudCkpCi0JcXVldWVfZXZlbnQodXNlciwgQ1NfRVZFTlRfQ0FSRF9JTlNFUlRJT04pOwotb3V0OgotICAgIHVubG9ja19rZXJuZWwoKTsKLSAgICByZXR1cm4gcmV0OwotfSAvKiBkc19vcGVuICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0gICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0gICAgdXNlcl9pbmZvX3QgKnVzZXIsICoqbGluazsKLQotICAgIHByX2RlYnVnKCJkc19yZWxlYXNlKHNvY2tldCAlZClcbiIsIGltaW5vcihpbm9kZSkpOwotCi0gICAgdXNlciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLSAgICBpZiAoQ0hFQ0tfVVNFUih1c2VyKSkKLQlnb3RvIG91dDsKLQotICAgIHMgPSB1c2VyLT5zb2NrZXQ7Ci0KLSAgICAvKiBVbmxpbmsgdXNlciBkYXRhIHN0cnVjdHVyZSAqLwotICAgIGlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpCi0Jcy0+cGNtY2lhX3N0YXRlLmJ1c3kgPSAwOwotCi0gICAgZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKLSAgICBmb3IgKGxpbmsgPSAmcy0+dXNlcjsgKmxpbms7IGxpbmsgPSAmKCpsaW5rKS0+bmV4dCkKLQlpZiAoKmxpbmsgPT0gdXNlcikKLQkJYnJlYWs7Ci0gICAgaWYgKGxpbmsgPT0gTlVMTCkKLQlnb3RvIG91dDsKLSAgICAqbGluayA9IHVzZXItPm5leHQ7Ci0gICAgdXNlci0+dXNlcl9tYWdpYyA9IDA7Ci0gICAga2ZyZWUodXNlcik7Ci0gICAgcGNtY2lhX3B1dF9zb2NrZXQocyk7Ci1vdXQ6Ci0gICAgcmV0dXJuIDA7Ci19IC8qIGRzX3JlbGVhc2UgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBzc2l6ZV90IGRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLSAgICBpbnQgcmV0OwotCi0gICAgcHJfZGVidWcoImRzX3JlYWQoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKLQotICAgIGlmIChjb3VudCA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICB1c2VyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotICAgIGlmIChDSEVDS19VU0VSKHVzZXIpKQotCXJldHVybiAtRUlPOwotCi0gICAgcyA9IHVzZXItPnNvY2tldDsKLSAgICByZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocy0+cXVldWUsICFxdWV1ZV9lbXB0eSh1c2VyKSk7Ci0gICAgaWYgKHJldCA9PSAwKQotCXJldCA9IHB1dF91c2VyKGdldF9xdWV1ZWRfZXZlbnQodXNlciksIChpbnQgX191c2VyICopYnVmKSA/IC1FRkFVTFQgOiA0OwotCi0gICAgcmV0dXJuIHJldDsKLX0gLyogZHNfcmVhZCAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHNzaXplX3QgZHNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgICBwcl9kZWJ1ZygiZHNfd3JpdGUoc29ja2V0ICVkKVxuIiwgaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKLQotICAgIGlmIChjb3VudCAhPSA0KQotCXJldHVybiAtRUlOVkFMOwotICAgIGlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCi0JcmV0dXJuIC1FQkFERjsKLQotICAgIHJldHVybiAtRUlPOwotfSAvKiBkc193cml0ZSAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogTm8ga2VybmVsIGxvY2sgLSBmaW5lICovCi1zdGF0aWMgdV9pbnQgZHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLSAgICBzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqczsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLQotICAgIHByX2RlYnVnKCJkc19wb2xsKHNvY2tldCAlZClcbiIsIGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKSk7Ci0KLSAgICB1c2VyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotICAgIGlmIChDSEVDS19VU0VSKHVzZXIpKQotCXJldHVybiBQT0xMRVJSOwotICAgIHMgPSB1c2VyLT5zb2NrZXQ7Ci0gICAgLyoKLSAgICAgKiBXZSBkb24ndCBjaGVjayBmb3IgYSBkZWFkIHNvY2tldCBoZXJlIHNpbmNlIHRoYXQKLSAgICAgKiB3aWxsIHNlbmQgY2FyZG1nciBpbnRvIGFuIGVuZGxlc3Mgc3Bpbi4KLSAgICAgKi8KLSAgICBwb2xsX3dhaXQoZmlsZSwgJnMtPnF1ZXVlLCB3YWl0KTsKLSAgICBpZiAoIXF1ZXVlX2VtcHR5KHVzZXIpKQotCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotICAgIHJldHVybiAwOwotfSAvKiBkc19wb2xsICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IGRzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCi17Ci0gICAgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7Ci0gICAgdm9pZCBfX3VzZXIgKnVhcmcgPSAoY2hhciBfX3VzZXIgKilhcmc7Ci0gICAgdV9pbnQgc2l6ZTsKLSAgICBpbnQgcmV0LCBlcnI7Ci0gICAgZHNfaW9jdGxfYXJnX3QgKmJ1ZjsKLSAgICB1c2VyX2luZm9fdCAqdXNlcjsKLQotICAgIHByX2RlYnVnKCJkc19pb2N0bChzb2NrZXQgJWQsICUjeCwgJSNseClcbiIsIGltaW5vcihpbm9kZSksIGNtZCwgYXJnKTsKLQotICAgIHVzZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgaWYgKENIRUNLX1VTRVIodXNlcikpCi0JcmV0dXJuIC1FSU87Ci0KLSAgICBzID0gdXNlci0+c29ja2V0OwotCi0gICAgc2l6ZSA9IChjbWQgJiBJT0NTSVpFX01BU0spID4+IElPQ1NJWkVfU0hJRlQ7Ci0gICAgaWYgKHNpemUgPiBzaXplb2YoZHNfaW9jdGxfYXJnX3QpKQotCXJldHVybiAtRUlOVkFMOwotCi0gICAgLyogUGVybWlzc2lvbiBjaGVjayAqLwotICAgIGlmICghKGNtZCAmIElPQ19PVVQpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCXJldHVybiAtRVBFUk07Ci0KLSAgICBpZiAoY21kICYgSU9DX0lOKSB7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVhcmcsIHNpemUpKSB7Ci0JICAgIHByX2RlYnVnKCJkc19pb2N0bCgpOiB2ZXJpZnlfcmVhZCA9ICVkXG4iLCAtRUZBVUxUKTsKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JfQotICAgIH0KLSAgICBpZiAoY21kICYgSU9DX09VVCkgewotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgdWFyZywgc2l6ZSkpIHsKLQkgICAgcHJfZGVidWcoImRzX2lvY3RsKCk6IHZlcmlmeV93cml0ZSA9ICVkXG4iLCAtRUZBVUxUKTsKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JfQotICAgIH0KLSAgICBidWYgPSBrbWFsbG9jKHNpemVvZihkc19pb2N0bF9hcmdfdCksIEdGUF9LRVJORUwpOwotICAgIGlmICghYnVmKQotCXJldHVybiAtRU5PTUVNOwotCi0gICAgZXJyID0gcmV0ID0gMDsKLQotICAgIGlmIChjbWQgJiBJT0NfSU4pIHsKLQlpZiAoX19jb3B5X2Zyb21fdXNlcigoY2hhciAqKWJ1ZiwgdWFyZywgc2l6ZSkpIHsKLQkgICAgZXJyID0gLUVGQVVMVDsKLQkgICAgZ290byBmcmVlX291dDsKLQl9Ci0gICAgfQotCi0gICAgc3dpdGNoIChjbWQpIHsKLSAgICBjYXNlIERTX0FESlVTVF9SRVNPVVJDRV9JTkZPOgotCXJldCA9IHBjbWNpYV9hZGp1c3RfcmVzb3VyY2VfaW5mbygmYnVmLT5hZGp1c3QpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTzoKLQlpZiAoYnVmLT5jb25maWcuRnVuY3Rpb24gJiYKLQkgICAoYnVmLT5jb25maWcuRnVuY3Rpb24gPj0gcy0+ZnVuY3Rpb25zKSkKLQkgICAgcmV0ID0gLUVJTlZBTDsKLQllbHNlIHsKLQkgICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2ID0gZ2V0X3BjbWNpYV9kZXZpY2UocywgYnVmLT5jb25maWcuRnVuY3Rpb24pOwotCSAgICByZXQgPSBwY2NhcmRfZ2V0X2NvbmZpZ3VyYXRpb25faW5mbyhzLCBwX2RldiwgJmJ1Zi0+Y29uZmlnKTsKLQkgICAgcGNtY2lhX3B1dF9kZXYocF9kZXYpOwotCX0KLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9GSVJTVF9UVVBMRToKLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsICZidWYtPnR1cGxlKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ORVhUX1RVUExFOgotCXJldCA9IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+dHVwbGUpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX1RVUExFX0RBVEE6Ci0JYnVmLT50dXBsZS5UdXBsZURhdGEgPSBidWYtPnR1cGxlX3BhcnNlLmRhdGE7Ci0JYnVmLT50dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmLT50dXBsZV9wYXJzZS5kYXRhKTsKLQlyZXQgPSBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEocywgJmJ1Zi0+dHVwbGUpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfUEFSU0VfVFVQTEU6Ci0JYnVmLT50dXBsZS5UdXBsZURhdGEgPSBidWYtPnR1cGxlX3BhcnNlLmRhdGE7Ci0JcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZidWYtPnR1cGxlLCAmYnVmLT50dXBsZV9wYXJzZS5wYXJzZSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19SRVNFVF9DQVJEOgotCXJldCA9IHBjbWNpYV9yZXNldF9jYXJkKHMpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX1NUQVRVUzoKLQkgICAgaWYgKGJ1Zi0+c3RhdHVzLkZ1bmN0aW9uICYmCi0JCShidWYtPnN0YXR1cy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKQotCQkgICAgcmV0ID0gLUVJTlZBTDsKLQkgICAgZWxzZSB7Ci0JCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPnN0YXR1cy5GdW5jdGlvbik7Ci0JCSAgICByZXQgPSBwY2NhcmRfZ2V0X3N0YXR1cyhzLCBwX2RldiwgJmJ1Zi0+c3RhdHVzKTsKLQkJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQkgICAgfQotCSAgICBicmVhazsKLSAgICBjYXNlIERTX1ZBTElEQVRFX0NJUzoKLQltdXRleF9sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXBjbWNpYV92YWxpZGF0ZV9tZW0ocyk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5za3RfbXV0ZXgpOwotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgotCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfU1VTUEVORCk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19SRVNVTUVfQ0FSRDoKLQlwY21jaWFfcGFyc2VfdWV2ZW50cyhzLCBQQ01DSUFfVUVWRU5UX1JFU1VNRSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19FSkVDVF9DQVJEOgotCXBjbWNpYV9wYXJzZV91ZXZlbnRzKHMsIFBDTUNJQV9VRVZFTlRfRUpFQ1QpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfSU5TRVJUX0NBUkQ6Ci0JcGNtY2lhX3BhcnNlX3VldmVudHMocywgUENNQ0lBX1VFVkVOVF9JTlNFUlQpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVI6Ci0JaWYgKChidWYtPmNvbmZfcmVnLkFjdGlvbiA9PSBDU19XUklURSkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkgICAgZXJyID0gLUVQRVJNOwotCSAgICBnb3RvIGZyZWVfb3V0OwotCX0KLQotCXJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIShidWYtPmNvbmZfcmVnLkZ1bmN0aW9uICYmCi0JICAgICAoYnVmLT5jb25mX3JlZy5GdW5jdGlvbiA+PSBzLT5mdW5jdGlvbnMpKSkgewotCQlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZfcmVnLkZ1bmN0aW9uKTsKLQkJaWYgKHBfZGV2KSB7Ci0JCQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIocF9kZXYsICZidWYtPmNvbmZfcmVnKTsKLQkJCXBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQkJfQotCX0KLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9GSVJTVF9SRUdJT046Ci0gICAgY2FzZSBEU19HRVRfTkVYVF9SRUdJT046Ci0gICAgY2FzZSBEU19CSU5EX01URDoKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIGZyZWVfb3V0OwotCX0gZWxzZSB7Ci0JCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKLQkJCQkiMi42LiBrZXJuZWxzIHVzZSBwY21jaWFtdGQgaW5zdGVhZCBvZiBtZW1vcnlfY3MuYyBhbmQgZG8gbm90IHJlcXVpcmUgc3BlY2lhbFxuIik7Ci0JCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIk1URCBoYW5kbGluZyBhbnkgbW9yZS5cbiIpOwotCX0KLQllcnIgPSAtRUlOVkFMOwotCWdvdG8gZnJlZV9vdXQ7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19HRVRfRklSU1RfV0lORE9XOgotCXJldCA9IHBjbWNpYV9nZXRfd2luZG93KHMsICZidWYtPndpbl9pbmZvLmhhbmRsZSwgMSwKLQkJCSZidWYtPndpbl9pbmZvLndpbmRvdyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBEU19HRVRfTkVYVF9XSU5ET1c6Ci0JcmV0ID0gcGNtY2lhX2dldF93aW5kb3cocywgJmJ1Zi0+d2luX2luZm8uaGFuZGxlLAotCQkJYnVmLT53aW5faW5mby5oYW5kbGUgKyAxLCAmYnVmLT53aW5faW5mby53aW5kb3cpOwotCWJyZWFrOwotICAgIGNhc2UgRFNfR0VUX01FTV9QQUdFOgotCXJldCA9IHBjbWNpYV9nZXRfbWVtX3BhZ2UocywgYnVmLT53aW5faW5mby5oYW5kbGUsCi0JCQkgICAmYnVmLT53aW5faW5mby5tYXApOwotCWJyZWFrOwotICAgIGNhc2UgRFNfUkVQTEFDRV9DSVM6Ci0JcmV0ID0gcGNtY2lhX3JlcGxhY2VfY2lzKHMsIGJ1Zi0+Y2lzZHVtcC5EYXRhLCBidWYtPmNpc2R1bXAuTGVuZ3RoKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0JJTkRfUkVRVUVTVDoKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJZXJyID0gLUVQRVJNOwotCQlnb3RvIGZyZWVfb3V0OwotCX0KLQllcnIgPSBiaW5kX3JlcXVlc3QocywgJmJ1Zi0+YmluZF9pbmZvKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ERVZJQ0VfSU5GTzoKLQllcnIgPSBnZXRfZGV2aWNlX2luZm8ocywgJmJ1Zi0+YmluZF9pbmZvLCAxKTsKLQlicmVhazsKLSAgICBjYXNlIERTX0dFVF9ORVhUX0RFVklDRToKLQllcnIgPSBnZXRfZGV2aWNlX2luZm8ocywgJmJ1Zi0+YmluZF9pbmZvLCAwKTsKLQlicmVhazsKLSAgICBjYXNlIERTX1VOQklORF9SRVFVRVNUOgotCWVyciA9IDA7Ci0JYnJlYWs7Ci0gICAgZGVmYXVsdDoKLQllcnIgPSAtRUlOVkFMOwotICAgIH0KLQotICAgIGlmICgoZXJyID09IDApICYmIChyZXQgIT0gMCkpIHsKLQlwcl9kZWJ1ZygiZHNfaW9jdGw6IHJldCA9ICVkXG4iLCByZXQpOwotCXN3aXRjaCAocmV0KSB7Ci0JY2FzZSAtRU5PREVWOgotCWNhc2UgLUVJTlZBTDoKLQljYXNlIC1FQlVTWToKLQljYXNlIC1FTk9TWVM6Ci0JICAgIGVyciA9IHJldDsKLQkgICAgYnJlYWs7Ci0JY2FzZSAtRU5PTUVNOgotCSAgICBlcnIgPSAtRU5PU1BDOyBicmVhazsKLQljYXNlIC1FTk9TUEM6Ci0JICAgIGVyciA9IC1FTk9EQVRBOyBicmVhazsKLQlkZWZhdWx0OgotCSAgICBlcnIgPSAtRUlPOyBicmVhazsKLQl9Ci0gICAgfQotCi0gICAgaWYgKGNtZCAmIElPQ19PVVQpIHsKLQlpZiAoX19jb3B5X3RvX3VzZXIodWFyZywgKGNoYXIgKilidWYsIHNpemUpKQotCQllcnIgPSAtRUZBVUxUOwotICAgIH0KLQotZnJlZV9vdXQ6Ci0gICAga2ZyZWUoYnVmKTsKLSAgICByZXR1cm4gZXJyOwotfSAvKiBkc19pb2N0bCAqLwotCi1zdGF0aWMgbG9uZyBkc191bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gZHNfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGRzX29wZW4sCi0JLnJlbGVhc2UJPSBkc19yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bAk9IGRzX3VubG9ja2VkX2lvY3RsLAotCS5yZWFkCQk9IGRzX3JlYWQsCi0JLndyaXRlCQk9IGRzX3dyaXRlLAotCS5wb2xsCQk9IGRzX3BvbGwsCi19OwotCi12b2lkIF9faW5pdCBwY21jaWFfc2V0dXBfaW9jdGwodm9pZCkKLXsKLQlpbnQgaTsKLQotCS8qIFNldCB1cCBjaGFyYWN0ZXIgZGV2aWNlIGZvciB1c2VyIG1vZGUgY2xpZW50cyAqLwotCWkgPSByZWdpc3Rlcl9jaHJkZXYoMCwgInBjbWNpYSIsICZkc19mb3BzKTsKLQlpZiAoaSA8IDApCi0JCXByaW50ayhLRVJOX05PVElDRSAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIGRldmljZSAjIGZvciAiCi0JCSAgICAgICAiRHJpdmVyIFNlcnZpY2VzIChlcnJvcj0lZClcbiIsIGkpOwotCWVsc2UKLQkJbWFqb3JfZGV2ID0gaTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcHJvY19wY2NhcmQgPSBwcm9jX21rZGlyKCJidXMvcGNjYXJkIiwgTlVMTCk7Ci0JaWYgKHByb2NfcGNjYXJkKQotCQlwcm9jX2NyZWF0ZSgiZHJpdmVycyIsIDAsIHByb2NfcGNjYXJkLCAmcGNjYXJkX2RyaXZlcnNfcHJvY19mb3BzKTsKLSNlbmRpZgotfQotCi0KLXZvaWQgX19leGl0IHBjbWNpYV9jbGVhbnVwX2lvY3RsKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlpZiAocHJvY19wY2NhcmQpIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlcnMiLCBwcm9jX3BjY2FyZCk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJidXMvcGNjYXJkIiwgTlVMTCk7Ci0JfQotI2VuZGlmCi0JaWYgKG1ham9yX2RldiAhPSAtMSkKLQkJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3JfZGV2LCAicGNtY2lhIik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCmluZGV4IGE0Y2Q5YWQuLjU0YWExYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9yZXNvdXJjZS5jCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC01Nyw0NyArNTYsMjMgQEAKIH0KIAogCi0vKiogYWxsb2NfaW9fc3BhY2UKLSAqCi0gKiBTcGVjaWFsIHN0dWZmIGZvciBtYW5hZ2luZyBJTyB3aW5kb3dzLCBiZWNhdXNlIHRoZXkgYXJlIHNjYXJjZQotICovCi0KLXN0YXRpYyBpbnQgYWxsb2NfaW9fc3BhY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVfaW50IGF0dHIsCi0JCQkgIHVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwgdV9pbnQgbGluZXMpCitzdGF0aWMgdm9pZCByZWxlYXNlX2lvX3NwYWNlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKIHsKLQl1bnNpZ25lZCBpbnQgYWxpZ247Ci0KLQlhbGlnbiA9ICgqYmFzZSkgPyAobGluZXMgPyAxPDxsaW5lcyA6IDApIDogMTsKLQlpZiAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkgewotCQlpZiAoKmJhc2UpIHsKLQkJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0OiBudW0gJSN4IGFsaWduICUjeFxuIiwKLQkJCSAgICAgICBudW0sIGFsaWduKTsKLQkJCWFsaWduID0gMDsKLQkJfSBlbHNlCi0JCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkKLQkJCQlhbGlnbiA8PD0gMTsKLQl9Ci0JaWYgKCpiYXNlICYgfihhbGlnbi0xKSkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJvZGQgSU8gcmVxdWVzdDogYmFzZSAlI3ggYWxpZ24gJSN4XG4iLAotCQkgICAgICAgKmJhc2UsIGFsaWduKTsKLQkJYWxpZ24gPSAwOwotCX0KLQotCXJldHVybiBzLT5yZXNvdXJjZV9vcHMtPmZpbmRfaW8ocywgYXR0ciwgYmFzZSwgbnVtLCBhbGlnbik7Ci19IC8qIGFsbG9jX2lvX3NwYWNlICovCi0KLQotc3RhdGljIHZvaWQgcmVsZWFzZV9pb19zcGFjZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkgICAgIHVuc2lnbmVkIGludCBudW0pCi17CisJcmVzb3VyY2Vfc2l6ZV90IG51bSA9IHJlc291cmNlX3NpemUocmVzKTsKIAlpbnQgaTsKIAorCWRldl9kYmcoJnMtPmRldiwgInJlbGVhc2VfaW9fc3BhY2UgZm9yICVwUlxuIiwgcmVzKTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfSU9fV0lOOyBpKyspIHsKIAkJaWYgKCFzLT5pb1tpXS5yZXMpCiAJCQljb250aW51ZTsKLQkJaWYgKChzLT5pb1tpXS5yZXMtPnN0YXJ0IDw9IGJhc2UpICYmCi0JCSAgICAocy0+aW9baV0ucmVzLT5lbmQgPj0gYmFzZStudW0tMSkpIHsKKwkJaWYgKChzLT5pb1tpXS5yZXMtPnN0YXJ0IDw9IHJlcy0+c3RhcnQpICYmCisJCSAgICAocy0+aW9baV0ucmVzLT5lbmQgPj0gcmVzLT5lbmQpKSB7CiAJCQlzLT5pb1tpXS5JblVzZSAtPSBudW07CisJCQlpZiAocmVzLT5wYXJlbnQpCisJCQkJcmVsZWFzZV9yZXNvdXJjZShyZXMpOworCQkJcmVzLT5zdGFydCA9IHJlcy0+ZW5kID0gMDsKKwkJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCQkJLyogRnJlZSB0aGUgd2luZG93IGlmIG5vIG9uZSBlbHNlIGlzIHVzaW5nIGl0ICovCiAJCQlpZiAocy0+aW9baV0uSW5Vc2UgPT0gMCkgewogCQkJCXJlbGVhc2VfcmVzb3VyY2Uocy0+aW9baV0ucmVzKTsKQEAgLTEwOCwyNiArODMsODAgQEAKIAl9CiB9IC8qIHJlbGVhc2VfaW9fc3BhY2UgKi8KIAotCi0vKiogcGNjYXJkX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyCisvKiogYWxsb2NfaW9fc3BhY2UKICAqCi0gKiBBY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcigpIHJlYWRzIGFuZCB3cml0ZXMgY29uZmlndXJhdGlvbgotICogcmVnaXN0ZXJzIGluIGF0dHJpYnV0ZSBtZW1vcnkuICBNZW1vcnkgd2luZG93IDAgaXMgcmVzZXJ2ZWQgZm9yCi0gKiB0aGlzIGFuZCB0aGUgdHVwbGUgcmVhZGluZyBzZXJ2aWNlcy4KKyAqIFNwZWNpYWwgc3R1ZmYgZm9yIG1hbmFnaW5nIElPIHdpbmRvd3MsIGJlY2F1c2UgdGhleSBhcmUgc2NhcmNlCiAgKi8KK3N0YXRpYyBpbnQgYWxsb2NfaW9fc3BhY2Uoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJdW5zaWduZWQgaW50IGxpbmVzKQoreworCXVuc2lnbmVkIGludCBhbGlnbjsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IHJlcy0+c3RhcnQ7CisJdW5zaWduZWQgaW50IG51bSA9IHJlcy0+ZW5kOworCWludCByZXQ7CiAKLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCQkgY29uZl9yZWdfdCAqcmVnKQorCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9JTzsKKworCWRldl9kYmcoJnMtPmRldiwgImFsbG9jX2lvX3NwYWNlIHJlcXVlc3QgZm9yICVwUiwgJWQgbGluZXNcbiIsCisJCXJlcywgbGluZXMpOworCisJYWxpZ24gPSBiYXNlID8gKGxpbmVzID8gMTw8bGluZXMgOiAwKSA6IDE7CisJaWYgKGFsaWduICYmIChhbGlnbiA8IG51bSkpIHsKKwkJaWYgKGJhc2UpIHsKKwkJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0XG4iKTsKKwkJCWFsaWduID0gMDsKKwkJfSBlbHNlCisJCQl3aGlsZSAoYWxpZ24gJiYgKGFsaWduIDwgbnVtKSkKKwkJCQlhbGlnbiA8PD0gMTsKKwl9CisJaWYgKGJhc2UgJiB+KGFsaWduLTEpKSB7CisJCWRldl9kYmcoJnMtPmRldiwgIm9kZCBJTyByZXF1ZXN0XG4iKTsKKwkJYWxpZ24gPSAwOworCX0KKworCXJldCA9IHMtPnJlc291cmNlX29wcy0+ZmluZF9pbyhzLCByZXMtPmZsYWdzLCAmYmFzZSwgbnVtLCBhbGlnbiwKKwkJCQkmcmVzLT5wYXJlbnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NfaW9fc3BhY2UgcmVxdWVzdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzLT5zdGFydCA9IGJhc2U7CisJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgbnVtIC0gMTsKKworCWlmIChyZXMtPnBhcmVudCkgeworCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKHJlcy0+cGFyZW50LCByZXMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfd2Fybigmcy0+ZGV2LAorCQkJCSJyZXF1ZXN0X3Jlc291cmNlICVwUiBmYWlsZWQ6ICVkXG4iLCByZXMsIHJldCk7CisJCQlyZXMtPnBhcmVudCA9IE5VTEw7CisJCQlyZWxlYXNlX2lvX3NwYWNlKHMsIHJlcyk7CisJCX0KKwl9CisJZGV2X2RiZygmcy0+ZGV2LCAiYWxsb2NfaW9fc3BhY2UgcmVxdWVzdCByZXN1bHQgJWQ6ICVwUlxuIiwgcmV0LCByZXMpOworCXJldHVybiByZXQ7Cit9IC8qIGFsbG9jX2lvX3NwYWNlICovCisKKworLyoqCisgKiBwY21jaWFfYWNjZXNzX2NvbmZpZygpIC0gcmVhZCBvciB3cml0ZSBjYXJkIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKgorICogcGNtY2lhX2FjY2Vzc19jb25maWcoKSByZWFkcyBhbmQgd3JpdGVzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LiAgTWVtb3J5IHdpbmRvdyAwIGlzIHJlc2VydmVkIGZvciB0aGlzIGFuZCB0aGUgdHVwbGUKKyAqIHJlYWRpbmcgc2VydmljZXMuIERyaXZlcnMgbXVzdCB1c2UgcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoKSBvcgorICogcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKCkuCisgKi8KK3N0YXRpYyBpbnQgcGNtY2lhX2FjY2Vzc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAorCQkJCW9mZl90IHdoZXJlLCB1OCAqdmFsLAorCQkJCWludCAoKmFjY2Vzc2YpIChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKKwkJCQkJCWludCBhdHRyLCB1bnNpZ25lZCBpbnQgYWRkciwKKwkJCQkJCXVuc2lnbmVkIGludCBsZW4sIHZvaWQgKnB0cikpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnM7CiAJY29uZmlnX3QgKmM7CiAJaW50IGFkZHI7Ci0JdV9jaGFyIHZhbDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghcF9kZXYgfHwgIXBfZGV2LT5mdW5jdGlvbl9jb25maWcpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJcyA9IHBfZGV2LT5zb2NrZXQ7CiAKIAltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtMTM5LDQ0ICsxNjgsNTcgQEAKIAkJcmV0dXJuIC1FQUNDRVM7CiAJfQogCi0JYWRkciA9IChjLT5Db25maWdCYXNlICsgcmVnLT5PZmZzZXQpID4+IDE7CisJYWRkciA9IChjLT5Db25maWdCYXNlICsgd2hlcmUpID4+IDE7CiAKLQlzd2l0Y2ggKHJlZy0+QWN0aW9uKSB7Ci0JY2FzZSBDU19SRUFEOgotCQlyZXQgPSBwY21jaWFfcmVhZF9jaXNfbWVtKHMsIDEsIGFkZHIsIDEsICZ2YWwpOwotCQlyZWctPlZhbHVlID0gdmFsOwotCQlicmVhazsKLQljYXNlIENTX1dSSVRFOgotCQl2YWwgPSByZWctPlZhbHVlOwotCQlwY21jaWFfd3JpdGVfY2lzX21lbShzLCAxLCBhZGRyLCAxLCAmdmFsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGV2X2RiZygmcy0+ZGV2LCAiSW52YWxpZCBjb25mIHJlZ2lzdGVyIHJlcXVlc3RcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9CisJcmV0ID0gYWNjZXNzZihzLCAxLCBhZGRyLCAxLCB2YWwpOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCiAJcmV0dXJuIHJldDsKLX0gLyogcGNtY2lhX2FjY2Vzc19jb25maWd1cmF0aW9uX3JlZ2lzdGVyICovCi1FWFBPUlRfU1lNQk9MKHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3Rlcik7Cit9IC8qIHBjbWNpYV9hY2Nlc3NfY29uZmlnICovCisKKworLyoqCisgKiBwY21jaWFfcmVhZF9jb25maWdfYnl0ZSgpIC0gcmVhZCBhIGJ5dGUgZnJvbSBhIGNhcmQgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICoKKyAqIHBjbWNpYV9yZWFkX2NvbmZpZ19ieXRlKCkgcmVhZHMgYSBieXRlIGZyb20gYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LgorICovCitpbnQgcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBvZmZfdCB3aGVyZSwgdTggKnZhbCkKK3sKKwlyZXR1cm4gcGNtY2lhX2FjY2Vzc19jb25maWcocF9kZXYsIHdoZXJlLCB2YWwsIHBjbWNpYV9yZWFkX2Npc19tZW0pOworfQorRVhQT1JUX1NZTUJPTChwY21jaWFfcmVhZF9jb25maWdfYnl0ZSk7CisKKworLyoqCisgKiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoKSAtIHdyaXRlIGEgYnl0ZSB0byBhIGNhcmQgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICoKKyAqIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZSgpIHdyaXRlcyBhIGJ5dGUgdG8gYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGluCisgKiBhdHRyaWJ1dGUgbWVtb3J5LgorICovCitpbnQgcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgb2ZmX3Qgd2hlcmUsIHU4IHZhbCkKK3sKKwlyZXR1cm4gcGNtY2lhX2FjY2Vzc19jb25maWcocF9kZXYsIHdoZXJlLCAmdmFsLCBwY21jaWFfd3JpdGVfY2lzX21lbSk7Cit9CitFWFBPUlRfU1lNQk9MKHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZSk7CiAKIAogaW50IHBjbWNpYV9tYXBfbWVtX3BhZ2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCB3aW5kb3dfaGFuZGxlX3Qgd2gsCi0JCQltZW1yZXFfdCAqcmVxKQorCQkJdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSB3aDsKKwl1bnNpZ25lZCBpbnQgdzsKIAlpbnQgcmV0OwogCi0Jd2gtLTsKLQlpZiAod2ggPj0gTUFYX1dJTikKKwl3ID0gKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTICYgV0lOX0ZMQUdTX1JFUSkgPj4gMikgLSAxOworCWlmICh3ID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChyZXEtPlBhZ2UgIT0gMCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJmYWlsdXJlOiByZXF1ZXN0ZWQgcGFnZSBpcyB6ZXJvXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQlzLT53aW5bd2hdLmNhcmRfc3RhcnQgPSByZXEtPkNhcmRPZmZzZXQ7Ci0JcmV0ID0gcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3doXSk7CisJcy0+d2luW3ddLmNhcmRfc3RhcnQgPSBvZmZzZXQ7CisJcmV0ID0gcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+d2luW3ddKTsKIAlpZiAocmV0KQogCQlkZXZfd2Fybigmcy0+ZGV2LCAiZmFpbGVkIHRvIHNldF9tZW1fbWFwXG4iKTsKIAltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CkBAIC0zMTYsMzIgKzM1OCwyNiBAQAogICogZG9uJ3QgYm90aGVyIGNoZWNraW5nIHRoZSBwb3J0IHJhbmdlcyBhZ2FpbnN0IHRoZSBjdXJyZW50IHNvY2tldAogICogdmFsdWVzLgogICovCi1zdGF0aWMgaW50IHBjbWNpYV9yZWxlYXNlX2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgaW9fcmVxX3QgKnJlcSkKK3N0YXRpYyBpbnQgcGNtY2lhX3JlbGVhc2VfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAljb25maWdfdCAqYzsKIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0JYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7Ci0KIAlpZiAoIXBfZGV2LT5faW8pCiAJCWdvdG8gb3V0OwogCisJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CisKKwlyZWxlYXNlX2lvX3NwYWNlKHMsICZjLT5pb1swXSk7CisKKwlpZiAoYy0+aW9bMV0uZW5kKQorCQlyZWxlYXNlX2lvX3NwYWNlKHMsICZjLT5pb1sxXSk7CisKIAlwX2Rldi0+X2lvID0gMDsKLQotCWlmICgoYy0+aW8uQmFzZVBvcnQxICE9IHJlcS0+QmFzZVBvcnQxKSB8fAotCSAgICAoYy0+aW8uTnVtUG9ydHMxICE9IHJlcS0+TnVtUG9ydHMxKSB8fAotCSAgICAoYy0+aW8uQmFzZVBvcnQyICE9IHJlcS0+QmFzZVBvcnQyKSB8fAotCSAgICAoYy0+aW8uTnVtUG9ydHMyICE9IHJlcS0+TnVtUG9ydHMyKSkKLQkJZ290byBvdXQ7Ci0KIAljLT5zdGF0ZSAmPSB+Q09ORklHX0lPX1JFUTsKIAotCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKLQlpZiAocmVxLT5OdW1Qb3J0czIpCi0JCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDIsIHJlcS0+TnVtUG9ydHMyKTsKLQogb3V0OgogCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIApAQCAtMzQ5LDE5ICszODUsMjIgQEAKIH0gLyogcGNtY2lhX3JlbGVhc2VfaW8gKi8KIAogCi1pbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdoKQoraW50IHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY21jaWFfc29ja2V0ICpzID0gcF9kZXYtPnNvY2tldDsKIAlwY2NhcmRfbWVtX21hcCAqd2luOworCXVuc2lnbmVkIGludCB3OwogCi0Jd2gtLTsKLQlpZiAod2ggPj0gTUFYX1dJTikKKwlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAicmVsZWFzaW5nIHdpbmRvdyAlcFJcbiIsIHJlcyk7CisKKwl3ID0gKChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTICYgV0lOX0ZMQUdTX1JFUSkgPj4gMikgLSAxOworCWlmICh3ID49IE1BWF9XSU4pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKLQl3aW4gPSAmcy0+d2luW3doXTsKKwl3aW4gPSAmcy0+d2luW3ddOwogCi0JaWYgKCEocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3aCkpKSB7CisJaWYgKCEocF9kZXYtPl93aW4gJiBDTElFTlRfV0lOX1JFUSh3KSkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAibm90IHJlbGVhc2luZyB1bmtub3duIHdpbmRvd1xuIik7CiAJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNzAsMTUgKzQwOSwxNiBAQAogCS8qIFNodXQgZG93biBtZW1vcnkgd2luZG93ICovCiAJd2luLT5mbGFncyAmPSB+TUFQX0FDVElWRTsKIAlzLT5vcHMtPnNldF9tZW1fbWFwKHMsIHdpbik7Ci0Jcy0+c3RhdGUgJj0gflNPQ0tFVF9XSU5fUkVRKHdoKTsKKwlzLT5zdGF0ZSAmPSB+U09DS0VUX1dJTl9SRVEodyk7CiAKIAkvKiBSZWxlYXNlIHN5c3RlbSBtZW1vcnkgKi8KIAlpZiAod2luLT5yZXMpIHsKKwkJcmVsZWFzZV9yZXNvdXJjZShyZXMpOwogCQlyZWxlYXNlX3Jlc291cmNlKHdpbi0+cmVzKTsKIAkJa2ZyZWUod2luLT5yZXMpOwogCQl3aW4tPnJlcyA9IE5VTEw7CiAJfQotCXBfZGV2LT5fd2luICY9IH5DTElFTlRfV0lOX1JFUSh3aCk7CisJcF9kZXYtPl93aW4gJj0gfkNMSUVOVF9XSU5fUkVRKHcpOwogCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtNDczLDEzICs1MTMsMTMgQEAKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfRVNSKT4+MSwgMSwgJmMtPkV4dFN0YXR1cyk7CiAJfQogCWlmIChyZXEtPlByZXNlbnQgJiBQUkVTRU5UX0lPQkFTRV8wKSB7Ci0JCXVfY2hhciBiID0gYy0+aW8uQmFzZVBvcnQxICYgMHhmZjsKKwkJdTggYiA9IGMtPmlvWzBdLnN0YXJ0ICYgMHhmZjsKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfSU9CQVNFXzApPj4xLCAxLCAmYik7Ci0JCWIgPSAoYy0+aW8uQmFzZVBvcnQxID4+IDgpICYgMHhmZjsKKwkJYiA9IChjLT5pb1swXS5zdGFydCA+PiA4KSAmIDB4ZmY7CiAJCXBjbWNpYV93cml0ZV9jaXNfbWVtKHMsIDEsIChiYXNlICsgQ0lTUkVHX0lPQkFTRV8xKT4+MSwgMSwgJmIpOwogCX0KIAlpZiAocmVxLT5QcmVzZW50ICYgUFJFU0VOVF9JT1NJWkUpIHsKLQkJdV9jaGFyIGIgPSBjLT5pby5OdW1Qb3J0czEgKyBjLT5pby5OdW1Qb3J0czIgLSAxOworCQl1OCBiID0gcmVzb3VyY2Vfc2l6ZSgmYy0+aW9bMF0pICsgcmVzb3VyY2Vfc2l6ZSgmYy0+aW9bMV0pIC0gMTsKIAkJcGNtY2lhX3dyaXRlX2Npc19tZW0ocywgMSwgKGJhc2UgKyBDSVNSRUdfSU9TSVpFKT4+MSwgMSwgJmIpOwogCX0KIApAQCAtNTEzLDI4ICs1NTMsMjkgQEAKIEVYUE9SVF9TWU1CT0wocGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbik7CiAKIAotLyoqIHBjbWNpYV9yZXF1ZXN0X2lvCisvKioKKyAqIHBjbWNpYV9yZXF1ZXN0X2lvKCkgLSBhdHRlbXB0IHRvIHJlc2VydmUgcG9ydCByYW5nZXMgZm9yIFBDTUNJQSBkZXZpY2VzCiAgKgotICogUmVxdWVzdF9pbygpIHJlc2VydmVzIHJhbmdlcyBvZiBwb3J0IGFkZHJlc3NlcyBmb3IgYSBzb2NrZXQuCi0gKiBJIGhhdmUgbm90IGltcGxlbWVudGVkIHJhbmdlIHNoYXJpbmcgb3IgYWxpYXMgYWRkcmVzc2luZy4KKyAqIHBjbWNpYV9yZXF1ZXN0X2lvKCkgYXR0ZXB0cyB0byByZXNlcnZlIHRoZSBJTyBwb3J0IHJhbmdlcyBzcGVjaWZpZWQgaW4KKyAqICZzdHJ1Y3QgcGNtY2lhX2RldmljZSBAcF9kZXYtPnJlc291cmNlWzBdIGFuZCBAcF9kZXYtPnJlc291cmNlWzFdLiBUaGUKKyAqICJzdGFydCIgdmFsdWUgaXMgdGhlIHJlcXVlc3RlZCBzdGFydCBvZiB0aGUgSU8gcG9ydCByZXNvdXJjZTsgImVuZCIKKyAqIHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgcG9ydHMgcmVxdWVzdGVkLiBUaGUgbnVtYmVyIG9mIElPIGxpbmVzIHJlcXVlc3RlZAorICogaXMgc3BlY2lmaWVkIGluICZzdHJ1Y3QgcGNtY2lhX2RldmljZSBAcF9kZXYtPmlvX2xpbmVzLgogICovCi1pbnQgcGNtY2lhX3JlcXVlc3RfaW8oc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBpb19yZXFfdCAqcmVxKQoraW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKIAlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyA9IHBfZGV2LT5zb2NrZXQ7Ci0JY29uZmlnX3QgKmM7CisJY29uZmlnX3QgKmMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXZfZGJnKCZzLT5kZXYsICJwY21jaWFfcmVxdWVzdF9pbzogJXBSICwgJXBSIiwgJmMtPmlvWzBdLCAmYy0+aW9bMV0pOwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKKwkJZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlcXVlc3RfaW86IE5vIGNhcmQgcHJlc2VudFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghcmVxKQotCQlnb3RvIG91dDsKLQotCWMgPSBwX2Rldi0+ZnVuY3Rpb25fY29uZmlnOwogCWlmIChjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiQ29uZmlndXJhdGlvbiBpcyBsb2NrZWRcbiIpOwogCQlnb3RvIG91dDsKQEAgLTU0Myw0MCArNTg0LDI1IEBACiAJCWRldl9kYmcoJnMtPmRldiwgIklPIGFscmVhZHkgY29uZmlndXJlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAocmVxLT5BdHRyaWJ1dGVzMSAmIChJT19TSEFSRUQgfCBJT19GT1JDRV9BTElBU19BQ0NFU1MpKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDFcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKChyZXEtPk51bVBvcnRzMiA+IDApICYmCi0JICAgIChyZXEtPkF0dHJpYnV0ZXMyICYgKElPX1NIQVJFRCB8IElPX0ZPUkNFX0FMSUFTX0FDQ0VTUykpKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImJhZCBhdHRyaWJ1dGUgc2V0dGluZyBmb3IgSU8gcmVnaW9uIDJcbiIpOwotCQlnb3RvIG91dDsKLQl9CiAKLQlkZXZfZGJnKCZzLT5kZXYsICJ0cnlpbmcgdG8gYWxsb2NhdGUgcmVzb3VyY2UgMVxuIik7Ci0JcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMSwgJnJlcS0+QmFzZVBvcnQxLAotCQkJICAgICByZXEtPk51bVBvcnRzMSwgcmVxLT5JT0FkZHJMaW5lcyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDEgZmFpbGVkXG4iKTsKKwlyZXQgPSBhbGxvY19pb19zcGFjZShzLCAmYy0+aW9bMF0sIHBfZGV2LT5pb19saW5lcyk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JfQogCi0JaWYgKHJlcS0+TnVtUG9ydHMyKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgInRyeWluZyB0byBhbGxvY2F0ZSByZXNvdXJjZSAyXG4iKTsKLQkJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgcmVxLT5BdHRyaWJ1dGVzMiwgJnJlcS0+QmFzZVBvcnQyLAotCQkJCSAgICAgcmVxLT5OdW1Qb3J0czIsIHJlcS0+SU9BZGRyTGluZXMpOworCWlmIChjLT5pb1sxXS5lbmQpIHsKKwkJcmV0ID0gYWxsb2NfaW9fc3BhY2UocywgJmMtPmlvWzFdLCBwX2Rldi0+aW9fbGluZXMpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW9uIG9mIHJlc291cmNlIDIgZmFpbGVkXG4iKTsKLQkJCXJlbGVhc2VfaW9fc3BhY2UocywgcmVxLT5CYXNlUG9ydDEsIHJlcS0+TnVtUG9ydHMxKTsKKwkJCXJlbGVhc2VfaW9fc3BhY2UocywgJmMtPmlvWzBdKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JfQorCX0gZWxzZQorCQljLT5pb1sxXS5zdGFydCA9IDA7CiAKLQljLT5pbyA9ICpyZXE7CiAJYy0+c3RhdGUgfD0gQ09ORklHX0lPX1JFUTsKIAlwX2Rldi0+X2lvID0gMTsKLQlkZXZfZGJnKCZzLT5kZXYsICJhbGxvY2F0aW5nIHJlc291cmNlcyBzdWNjZWVkZWQ6ICVkXG4iLCByZXQpOwogCisJZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlcXVlc3RfaW8gc3VjY2VlZGVkOiAlcFIgLCAlcFIiLAorCQkmYy0+aW9bMF0sICZjLT5pb1sxXSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCkBAIC02NTEsNyArNjc3LDcgQEAKICNpZmRlZiBDT05GSUdfUENNQ0lBX1BST0JFCiAKIC8qIG1hc2sgb2YgSVJRcyBhbHJlYWR5IHJlc2VydmVkIGJ5IG90aGVyIGNhcmRzLCB3ZSBzaG91bGQgYXZvaWQgdXNpbmcgdGhlbSAqLwotc3RhdGljIHU4IHBjbWNpYV91c2VkX2lycVtOUl9JUlFTXTsKK3N0YXRpYyB1OCBwY21jaWFfdXNlZF9pcnFbMzJdOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGVzdF9hY3Rpb24oaW50IGNwbCwgdm9pZCAqZGV2X2lkKQogewpAQCAtNjc0LDYgKzcwMCw5IEBACiAJZm9yICh0cnkgPSAwOyB0cnkgPCA2NDsgdHJ5KyspIHsKIAkJaXJxID0gdHJ5ICUgMzI7CiAKKwkJaWYgKGlycSA+IE5SX0lSUVMpCisJCQljb250aW51ZTsKKwogCQkvKiBtYXJrZWQgYXMgYXZhaWxhYmxlIGJ5IGRyaXZlciwgbm90IGJsb2NrZWQgYnkgdXNlcnNwYWNlPyAqLwogCQlpZiAoISgobWFzayA+PiBpcnEpICYgMSkpCiAJCQljb250aW51ZTsKQEAgLTc2NywyMyArNzk2LDE4IEBACiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMgPSBwX2Rldi0+c29ja2V0OwogCXBjY2FyZF9tZW1fbWFwICp3aW47CiAJdV9sb25nIGFsaWduOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCB3OwogCiAJaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkpIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiTm8gY2FyZCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiAoV0lOX1BBR0VEIHwgV0lOX1NIQVJFRCkpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiYmFkIGF0dHJpYnV0ZSBzZXR0aW5nIGZvciBpb21lbSByZWdpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAkvKiBXaW5kb3cgc2l6ZSBkZWZhdWx0cyB0byBzbWFsbGVzdCBhdmFpbGFibGUgKi8KIAlpZiAocmVxLT5TaXplID09IDApCiAJCXJlcS0+U2l6ZSA9IHMtPm1hcF9zaXplOwotCWFsaWduID0gKCgocy0+ZmVhdHVyZXMgJiBTU19DQVBfTUVNX0FMSUdOKSB8fAotCQkgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fU1RSSUNUX0FMSUdOKSkgPwotCQkgcmVxLT5TaXplIDogcy0+bWFwX3NpemUpOworCWFsaWduID0gKHMtPmZlYXR1cmVzICYgU1NfQ0FQX01FTV9BTElHTikgPyByZXEtPlNpemUgOiBzLT5tYXBfc2l6ZTsKIAlpZiAocmVxLT5TaXplICYgKHMtPm1hcF9zaXplLTEpKSB7CiAJCWRldl9kYmcoJnMtPmRldiwgImludmFsaWQgbWFwIHNpemVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc5NywyMCArODIxLDIxIEBACiAJCWFsaWduID0gMDsKIAogCS8qIEFsbG9jYXRlIHN5c3RlbSBtZW1vcnkgd2luZG93ICovCisJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlmb3IgKHcgPSAwOyB3IDwgTUFYX1dJTjsgdysrKQogCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9XSU5fUkVRKHcpKSkKIAkJCWJyZWFrOwogCWlmICh3ID09IE1BWF9XSU4pIHsKIAkJZGV2X2RiZygmcy0+ZGV2LCAiYWxsIHdpbmRvd3MgYXJlIHVzZWQgYWxyZWFkeVxuIik7CisJCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAl3aW4gPSAmcy0+d2luW3ddOwogCiAJaWYgKCEocy0+ZmVhdHVyZXMgJiBTU19DQVBfU1RBVElDX01BUCkpIHsKIAkJd2luLT5yZXMgPSBwY21jaWFfZmluZF9tZW1fcmVnaW9uKHJlcS0+QmFzZSwgcmVxLT5TaXplLCBhbGlnbiwKLQkJCQkJCSAgICAgIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fTUFQX0JFTE9XXzFNQiksIHMpOworCQkJCQkJMCwgcyk7CiAJCWlmICghd2luLT5yZXMpIHsKIAkJCWRldl9kYmcoJnMtPmRldiwgImFsbG9jYXRpbmcgbWVtIHJlZ2lvbiBmYWlsZWRcbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwpAQCAtODIxLDE2ICs4NDYsOCBAQAogCiAJLyogQ29uZmlndXJlIHRoZSBzb2NrZXQgY29udHJvbGxlciAqLwogCXdpbi0+bWFwID0gdysxOwotCXdpbi0+ZmxhZ3MgPSAwOworCXdpbi0+ZmxhZ3MgPSByZXEtPkF0dHJpYnV0ZXM7CiAJd2luLT5zcGVlZCA9IHJlcS0+QWNjZXNzU3BlZWQ7Ci0JaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9NRU1PUllfVFlQRSkKLQkJd2luLT5mbGFncyB8PSBNQVBfQVRUUklCOwotCWlmIChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fRU5BQkxFKQotCQl3aW4tPmZsYWdzIHw9IE1BUF9BQ1RJVkU7Ci0JaWYgKHJlcS0+QXR0cmlidXRlcyAmIFdJTl9EQVRBX1dJRFRIXzE2KQotCQl3aW4tPmZsYWdzIHw9IE1BUF8xNkJJVDsKLQlpZiAocmVxLT5BdHRyaWJ1dGVzICYgV0lOX1VTRV9XQUlUKQotCQl3aW4tPmZsYWdzIHw9IE1BUF9VU0VfV0FJVDsKIAl3aW4tPmNhcmRfc3RhcnQgPSAwOwogCiAJaWYgKHMtPm9wcy0+c2V0X21lbV9tYXAocywgd2luKSAhPSAwKSB7CkBAIC04NDYsOCArODYzLDIxIEBACiAJZWxzZQogCQlyZXEtPkJhc2UgPSB3aW4tPnJlcy0+c3RhcnQ7CiAKKwkvKiBjb252ZXJ0IHRvIG5ldy1zdHlsZSByZXNvdXJjZXMgKi8KKwlyZXMgPSBwX2Rldi0+cmVzb3VyY2VbdyArIE1BWF9JT19XSU5dOworCXJlcy0+c3RhcnQgPSByZXEtPkJhc2U7CisJcmVzLT5lbmQgPSByZXEtPkJhc2UgKyByZXEtPlNpemUgLSAxOworCXJlcy0+ZmxhZ3MgJj0gfklPUkVTT1VSQ0VfQklUUzsKKwlyZXMtPmZsYWdzIHw9IChyZXEtPkF0dHJpYnV0ZXMgJiBXSU5fRkxBR1NfTUFQKSB8ICh3aW4tPm1hcCA8PCAyKTsKKwlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfTUVNOworCXJlcy0+cGFyZW50ID0gd2luLT5yZXM7CisJaWYgKHdpbi0+cmVzKQorCQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKTsKKworCWRldl9kYmcoJnMtPmRldiwgInJlcXVlc3Rfd2luZG93IHJlc3VsdHMgaW4gJXBSXG4iLCByZXMpOworCiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCSp3aCA9IHcgKyAxOworCSp3aCA9IHJlczsKIAogCXJldHVybiAwOwogfSAvKiBwY21jaWFfcmVxdWVzdF93aW5kb3cgKi8KQEAgLTg1NSwxMyArODg1LDE4IEBACiAKIHZvaWQgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKIHsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1dJTjsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcF9kZXYtPnJlc291cmNlW01BWF9JT19XSU4gKyBpXTsKKwkJaWYgKHJlcy0+ZmxhZ3MgJiBXSU5fRkxBR1NfUkVRKQorCQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCByZXMpOworCX0KKwogCXBjbWNpYV9yZWxlYXNlX2NvbmZpZ3VyYXRpb24ocF9kZXYpOwotCXBjbWNpYV9yZWxlYXNlX2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlwY21jaWFfcmVsZWFzZV9pbyhwX2Rldik7CiAJaWYgKHBfZGV2LT5faXJxKSB7CiAJCWZyZWVfaXJxKHBfZGV2LT5pcnEsIHBfZGV2LT5wcml2KTsKIAkJcF9kZXYtPl9pcnEgPSAwOwogCX0KLQlpZiAocF9kZXYtPndpbikKLQkJcGNtY2lhX3JlbGVhc2Vfd2luZG93KHBfZGV2LCBwX2Rldi0+d2luKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX2Rpc2FibGVfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggYjYxYTEzNi4uYjhhODY5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiZGQwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYWxsb29uMy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogbGludXgvZHJpdmVycy9wY21jaWEvcHhhMnh4X2JhbGxvb24zLmMKKyAqCisgKiBCYWxsb29uMyBQQ01DSUEgc3BlY2lmaWMgcm91dGluZXMuCisgKgorICogIEF1dGhvcjoJTmljayBCYW5lCisgKiAgQ3JlYXRlZDoJSnVuZSwgMjAwNgorICogIENvcHlyaWdodDoJVG9ieSBDaHVyY2hpbGwgTHRkCisgKiAgRGVyaXZlZCBmcm9tIHB4YTJ4eF9tYWluc3RvbmUuYywgYnkgTmljbyBQaXRyZQorICoKKyAqIFZhcmlvdXMgbW9kaWZpY2F0aW9uIGJ5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvYmFsbG9vbjMuaD4KKworI2luY2x1ZGUgInNvY19jb21tb24uaCIKKworLyoKKyAqIFRoZXNlIGFyZSBhIGxpc3Qgb2YgaW50ZXJydXB0IHNvdXJjZXMgdGhhdCBwcm92b2tlcyBhIHBvbGxlZAorICogY2hlY2sgb2Ygc3RhdHVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2lycXMgaXJxc1tdID0geworCXsgMCwgQkFMTE9PTjNfUzBfQ0RfSVJRLCAiUENNQ0lBMCBDRCIgfSwKKwl7IDAsIEJBTExPT04zX0JQX05TVFNDSEdfSVJRLCAiUENNQ0lBMCBTVFNDSEciIH0sCit9OworCitzdGF0aWMgaW50IGJhbGxvb24zX3BjbWNpYV9od19pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCXVpbnQxNl90IHZlcjsKKwlpbnQgcmV0OworCXN0YXRpYyB2b2lkIF9faW9tZW0gKmZwZ2FfdmVyOworCisJdmVyID0gX19yYXdfcmVhZHcoQkFMTE9PTjNfRlBHQV9WRVIpOworCWlmICh2ZXIgPiAweDAyMDEpCisJCXByX3dhcm4oIlRoZSBGUEdBIGNvZGUsIHZlcnNpb24gMHglMDR4LCBpcyBuZXdlciB0aGFuIHJlbC0wLjMuICIKKwkJCSJQQ01DSUEvQ0Ygc3VwcG9ydCBtaWdodCBiZSBicm9rZW4gaW4gdGhpcyB2ZXJzaW9uISIsCisJCQl2ZXIpOworCisJc2t0LT5zb2NrZXQucGNpX2lycSA9IEJBTExPT04zX0JQX0NGX05SRFlfSVJROworCXJldHVybiBzb2NfcGNtY2lhX3JlcXVlc3RfaXJxcyhza3QsIGlycXMsIEFSUkFZX1NJWkUoaXJxcykpOworfQorCitzdGF0aWMgdm9pZCBiYWxsb29uM19wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJc29jX3BjbWNpYV9mcmVlX2lycXMoc2t0LCBpcnFzLCBBUlJBWV9TSVpFKGlycXMpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGNtY2lhX3N0YXR1c1syXSA9IHsKKwlCQUxMT09OM19DRl9uU1RTQ0hHX0JWRDEsCisJQkFMTE9PTjNfQ0ZfblNUU0NIR19CVkQxCit9OworCitzdGF0aWMgdm9pZCBiYWxsb29uM19wY21jaWFfc29ja2V0X3N0YXRlKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICBzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKwl1aW50MTZfdCBzdGF0dXM7CisJaW50IGZsaXA7CisKKwkvKiBUaGlzIGFjdHVhbGx5IHJlYWRzIHRoZSBTVEFUVVMgcmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSBfX3Jhd19yZWFkdyhCQUxMT09OM19DRl9TVEFUVVNfUkVHKTsKKwlmbGlwID0gKHN0YXR1cyBeIGJhbGxvb24zX3BjbWNpYV9zdGF0dXNbc2t0LT5ucl0pCisJCSYgQkFMTE9PTjNfQ0ZfblNUU0NIR19CVkQxOworCS8qCisJICogV29ya2Fyb3VuZCBmb3IgU1RTQ0hHIHdoaWNoIGNhbid0IGJlIGRlYXNzZXJ0ZWQ6CisJICogV2UgdGhlcmVmb3JlIGRpc2FibGUvZW5hYmxlIGNvcnJlc3BvbmRpbmcgSVJRcworCSAqIGFzIG5lZWRlZCB0byBhdm9pZCBJUlEgbG9ja3MuCisJICovCisJaWYgKGZsaXApIHsKKwkJYmFsbG9vbjNfcGNtY2lhX3N0YXR1c1tza3QtPm5yXSA9IHN0YXR1czsKKwkJaWYgKHN0YXR1cyAmIEJBTExPT04zX0NGX25TVFNDSEdfQlZEMSkKKwkJCWVuYWJsZV9pcnEoQkFMTE9PTjNfQlBfTlNUU0NIR19JUlEpOworCQllbHNlCisJCQlkaXNhYmxlX2lycShCQUxMT09OM19CUF9OU1RTQ0hHX0lSUSk7CisJfQorCisJc3RhdGUtPmRldGVjdAk9ICFncGlvX2dldF92YWx1ZShCQUxMT09OM19HUElPX1MwX0NEKTsKKwlzdGF0ZS0+cmVhZHkJPSAhIShzdGF0dXMgJiBCQUxMT09OM19DRl9uSVJRKTsKKwlzdGF0ZS0+YnZkMQk9ICEhKHN0YXR1cyAmIEJBTExPT04zX0NGX25TVFNDSEdfQlZEMSk7CisJc3RhdGUtPmJ2ZDIJPSAwOwkvKiBub3QgYXZhaWxhYmxlICovCisJc3RhdGUtPnZzXzN2CT0gMTsJLyogQWx3YXlzIHRydWUgaXRzIGEgQ0YgY2FyZCAqLworCXN0YXRlLT52c19Ydgk9IDA7CS8qIG5vdCBhdmFpbGFibGUgKi8KKwlzdGF0ZS0+d3Jwcm90CT0gMDsJLyogbm90IGF2YWlsYWJsZSAqLworfQorCitzdGF0aWMgaW50IGJhbGxvb24zX3BjbWNpYV9jb25maWd1cmVfc29ja2V0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCSAgICAgICBjb25zdCBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJX19yYXdfd3JpdGV3KChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkgPyBCQUxMT09OM19DRl9SRVNFVCA6IDAsCisJCQlCQUxMT09OM19DRl9DT05UUk9MX1JFRyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHZvaWQgYmFsbG9vbjNfcGNtY2lhX3NvY2tldF9zdXNwZW5kKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworfQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgYmFsbG9vbjNfcGNtY2lhX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5od19pbml0CQk9IGJhbGxvb24zX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBiYWxsb29uM19wY21jaWFfaHdfc2h1dGRvd24sCisJLnNvY2tldF9zdGF0ZQkJPSBiYWxsb29uM19wY21jaWFfc29ja2V0X3N0YXRlLAorCS5jb25maWd1cmVfc29ja2V0CT0gYmFsbG9vbjNfcGNtY2lhX2NvbmZpZ3VyZV9zb2NrZXQsCisJLnNvY2tldF9pbml0CQk9IGJhbGxvb24zX3BjbWNpYV9zb2NrZXRfaW5pdCwKKwkuc29ja2V0X3N1c3BlbmQJCT0gYmFsbG9vbjNfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorCS5maXJzdAkJCT0gMCwKKwkubnIJCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmFsbG9vbjNfcGNtY2lhX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgYmFsbG9vbjNfcGNtY2lhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJYmFsbG9vbjNfcGNtY2lhX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicHhhMnh4LXBjbWNpYSIsIC0xKTsKKwlpZiAoIWJhbGxvb24zX3BjbWNpYV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGJhbGxvb24zX3BjbWNpYV9kZXZpY2UsCisJCQkmYmFsbG9vbjNfcGNtY2lhX29wcywgc2l6ZW9mKGJhbGxvb24zX3BjbWNpYV9vcHMpKTsKKworCWlmICghcmV0KQorCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGJhbGxvb24zX3BjbWNpYV9kZXZpY2UpOworCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChiYWxsb29uM19wY21jaWFfZGV2aWNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiYWxsb29uM19wY21jaWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJhbGxvb24zX3BjbWNpYV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChiYWxsb29uM19wY21jaWFfaW5pdCk7Cittb2R1bGVfZXhpdChiYWxsb29uM19wY21jaWFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk5pY2sgQmFuZSA8bmlja0BjZWNvbXB1dGluZy5jby51az4iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cHhhMnh4LXBjbWNpYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYWxsb29uMyBib2FyZCBDRi9QQ01DSUEgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCBmMzcwNDc2Li5hZTA3YjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19pb2R5bi5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19pb2R5bi5jCmluZGV4IGQwYmYzNTAuLjg1MTBjMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfaW9keW4uYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX2lvZHluLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTg4LDcgKzg3LDcgQEAKIAogc3RhdGljIGludCBpb2R5bl9maW5kX2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYXR0ciwKIAkJCXVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwKLQkJCXVuc2lnbmVkIGludCBhbGlnbikKKwkJCXVuc2lnbmVkIGludCBhbGlnbiwgc3RydWN0IHJlc291cmNlICoqcGFyZW50KQogewogCWludCBpLCByZXQgPSAwOwogCkBAIC0xMjksNiArMTI4LDcgQEAKIAkJCQkoKHJlcy0+ZmxhZ3MgJiB+SU9SRVNPVVJDRV9CSVRTKSB8CiAJCQkJCShhdHRyICYgSU9SRVNPVVJDRV9CSVRTKSk7CiAJCQlzLT5pb1tpXS5JblVzZSA9IG51bTsKKwkJCSpwYXJlbnQgPSByZXM7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xNDAsNiArMTQwLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCSpiYXNlID0gdHJ5OwogCQkJcy0+aW9baV0uSW5Vc2UgKz0gbnVtOworCQkJKnBhcmVudCA9IHJlczsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTE1Miw2ICsxNTMsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJKmJhc2UgPSB0cnk7CiAJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CisJCQkqcGFyZW50ID0gcmVzOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0xNjQsOCArMTY2LDYgQEAKIAkudmFsaWRhdGVfbWVtID0gTlVMTCwKIAkuZmluZF9pbyA9IGlvZHluX2ZpbmRfaW8sCiAJLmZpbmRfbWVtID0gTlVMTCwKLQkuYWRkX2lvID0gTlVMTCwKLQkuYWRkX21lbSA9IE5VTEwsCiAJLmluaXQgPSBzdGF0aWNfaW5pdCwKIAkuZXhpdCA9IE5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggMTQyZWZhYy4uNGU4MDQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CkBAIC00OCwxMSArNDcsMTIgQEAKIAogc3RhdGljIGludCBzdGF0aWNfZmluZF9pbyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGF0dHIsCiAJCQl1bnNpZ25lZCBpbnQgKmJhc2UsIHVuc2lnbmVkIGludCBudW0sCi0JCQl1bnNpZ25lZCBpbnQgYWxpZ24pCisJCQl1bnNpZ25lZCBpbnQgYWxpZ24sIHN0cnVjdCByZXNvdXJjZSAqKnBhcmVudCkKIHsKIAlpZiAoIXMtPmlvX29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJKmJhc2UgPSBzLT5pb19vZmZzZXQgfCAoKmJhc2UgJiAweDBmZmYpOworCSpwYXJlbnQgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Miw4ICs2Miw2IEBACiAJLnZhbGlkYXRlX21lbSA9IE5VTEwsCiAJLmZpbmRfaW8gPSBzdGF0aWNfZmluZF9pbywKIAkuZmluZF9tZW0gPSBOVUxMLAotCS5hZGRfaW8gPSBOVUxMLAotCS5hZGRfbWVtID0gTlVMTCwKIAkuaW5pdCA9IHN0YXRpY19pbml0LAogCS5leGl0ID0gTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCBkY2QxYTRhLi45NmYzNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KQEAgLTY0LDYgKzYzLDkgQEAKICNkZWZpbmUgTUVNX1BST0JFX0xPVwkoMSA8PCAwKQogI2RlZmluZSBNRU1fUFJPQkVfSElHSAkoMSA8PCAxKQogCisvKiBBY3Rpb24gZmllbGQgKi8KKyNkZWZpbmUgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UJCTEKKyNkZWZpbmUgQUREX01BTkFHRURfUkVTT1VSQ0UJCTIKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTcxNiw3ICs3MTgsNyBAQAogCiBzdGF0aWMgaW50IG5vbnN0YXRpY19maW5kX2lvKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgYXR0ciwKIAkJCXVuc2lnbmVkIGludCAqYmFzZSwgdW5zaWduZWQgaW50IG51bSwKLQkJCXVuc2lnbmVkIGludCBhbGlnbikKKwkJCXVuc2lnbmVkIGludCBhbGlnbiwgc3RydWN0IHJlc291cmNlICoqcGFyZW50KQogewogCWludCBpLCByZXQgPSAwOwogCkBAIC03NTgsNiArNzYwLDcgQEAKIAkJCQkoKHJlcy0+ZmxhZ3MgJiB+SU9SRVNPVVJDRV9CSVRTKSB8CiAJCQkJCShhdHRyICYgSU9SRVNPVVJDRV9CSVRTKSk7CiAJCQlzLT5pb1tpXS5JblVzZSA9IG51bTsKKwkJCSpwYXJlbnQgPSByZXM7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC03NzMsNiArNzc2LDcgQEAKIAkJCQkJY29udGludWU7CiAJCQkJKmJhc2UgPSB0cnk7CiAJCQkJcy0+aW9baV0uSW5Vc2UgKz0gbnVtOworCQkJCSpwYXJlbnQgPSByZXM7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KQEAgLTc5MSw2ICs3OTUsNyBAQAogCQkJCQljb250aW51ZTsKIAkJCQkqYmFzZSA9IHRyeTsKIAkJCQlzLT5pb1tpXS5JblVzZSArPSBudW07CisJCQkJKnBhcmVudCA9IHJlczsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMTA1NSw4ICsxMDYwLDYgQEAKIAkudmFsaWRhdGVfbWVtID0gcGNtY2lhX25vbnN0YXRpY192YWxpZGF0ZV9tZW0sCiAJLmZpbmRfaW8gPSBub25zdGF0aWNfZmluZF9pbywKIAkuZmluZF9tZW0gPSBub25zdGF0aWNfZmluZF9tZW1fcmVnaW9uLAotCS5hZGRfaW8gPSBhZGp1c3RfaW8sCi0JLmFkZF9tZW0gPSBhZGp1c3RfbWVtb3J5LAogCS5pbml0ID0gbm9uc3RhdGljX2luaXQsCiAJLmV4aXQgPSBub25zdGF0aWNfcmVsZWFzZV9yZXNvdXJjZV9kYiwKIH07CkBAIC0xMTE1LDggKzExMTgsNiBAQAogCiAJbXV0ZXhfbG9jaygmcy0+b3BzX211dGV4KTsKIAlyZXQgPSBhZGp1c3RfaW8ocywgYWRkLCBzdGFydF9hZGRyLCBlbmRfYWRkcik7Ci0JaWYgKCFyZXQpCi0JCXMtPnJlc291cmNlX3NldHVwX25ldyA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwpAQCAtMTE4Myw4ICsxMTg0LDYgQEAKIAogCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CiAJcmV0ID0gYWRqdXN0X21lbW9yeShzLCBhZGQsIHN0YXJ0X2FkZHIsIGVuZF9hZGRyKTsKLQlpZiAoIXJldCkKLQkJcy0+cmVzb3VyY2Vfc2V0dXBfbmV3ID0gMTsKIAltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBlZGJkOGM0Li5lMDk4NTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCmluZGV4IGU0MDgyNGMuLjNmYmEzYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAorKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKQEAgLTExLDcgKzExLDYgQEAKIAogLyogaW5jbHVkZSB0aGUgd29ybGQgKi8KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwppbmRleCA4MGUzNmJjLi5jYjBkM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS90Y2ljLmMgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKaW5kZXggNTYwMDRhMS4uYmUwZDg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdGNpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3RjaWMuYwpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgogI2luY2x1ZGUgInRjaWMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYyBiL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYwppbmRleCAyMDFjY2ZhLi5mYTg4YzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKKysrIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IGYxZDQxMzcuLjQxNGQ5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvb2xwY19iYXR0ZXJ5LmMKaW5kZXggYmFlZmNmMS4uNWFiOTEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9vbHBjX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL29scGNfYmF0dGVyeS5jCkBAIC0zODQsNyArMzg0LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAiZWVwcm9tIiwKIAkJLm1vZGUgPSBTX0lSVUdPLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5zaXplID0gMCwKIAkucmVhZCA9IG9scGNfYmF0X2VlcHJvbV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCmluZGV4IDRlOGFmY2UuLjUwNzFkODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKQEAgLTI5LDcgKzI5LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmF0X3dvcms7CiBzdGF0aWMgc3RydWN0IG11dGV4IHdvcmtfbG9jazsKIHN0YXRpYyBpbnQgYmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKLXN0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqZ3BkYXRhOwogc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5ICpwcm9wOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3bTk3eHhfcmVhZF9iYXQoc3RydWN0IHBvd2VyX3N1cHBseSAqYmF0X3BzKQpAQCAtMTcyLDEyICsxNzEsNiBAQAogCXN0cnVjdCB3bTk3eHhfcGRhdGEgKndtZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHdtOTd4eF9iYXR0X3BkYXRhICpwZGF0YTsKIAotCWlmIChncGRhdGEpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJEbyBub3QgcGFzcyBwbGF0Zm9ybV9kYXRhIHRocm91Z2ggIgotCQkJIndtOTd4eF9iYXRfc2V0X3BkYXRhIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmICghd21kYXRhKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzA4LDE1ICszMDEsNiBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTk3eHhfYmF0X2RyaXZlcik7CiB9CiAKLS8qIFRoZSBpbnRlcmZhY2UgaXMgZGVwcmVjYXRlZCwgYXMgd2VsbCBhcyBsaW51eC93bTk3eHhfYmF0dC5oICovCi12b2lkIHdtOTd4eF9iYXRfc2V0X3BkYXRhKHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvICpkYXRhKTsKLQotdm9pZCB3bTk3eHhfYmF0X3NldF9wZGF0YShzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqZGF0YSkKLXsKLQlncGRhdGEgPSBkYXRhOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod205N3h4X2JhdF9zZXRfcGRhdGEpOwotCiBtb2R1bGVfaW5pdCh3bTk3eHhfYmF0X2luaXQpOwogbW9kdWxlX2V4aXQod205N3h4X2JhdF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IDIyNDgwODcuLjQyMmE3MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTEwMjUsNyArMTAyNSw2IEBACiAJCWlmIChyZWd1bGF0b3ItPmRldl9hdHRyLmF0dHIubmFtZSA9PSBOVUxMKQogCQkJZ290byBhdHRyX25hbWVfZXJyOwogCi0JCXJlZ3VsYXRvci0+ZGV2X2F0dHIuYXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCQlyZWd1bGF0b3ItPmRldl9hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CiAJCXJlZ3VsYXRvci0+ZGV2X2F0dHIuc2hvdyA9IGRldmljZV9yZXF1ZXN0ZWRfdUFfc2hvdzsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnJlZ3VsYXRvci0+ZGV2X2F0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggNDMwMWE2YzcuLjQ4Y2E3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMTY2LDYgKzE2NiwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBydGMtZHMxNjcyLgogCitjb25maWcgUlRDX0RSVl9EUzMyMzIKKwl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERTMzIzMiIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBJMkMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRGFsbGFzIFNlbWljb25kdWN0b3IKKwkgIERTMzIzMiByZWFsLXRpbWUgY2xvY2sgY2hpcHMuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczMyMzIuCisKIGNvbmZpZyBSVENfRFJWX01BWDY5MDAKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYNjkwMCIKIAloZWxwCkBAIC0yMDMsNiArMjEzLDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1pc2wxMjA4LgogCitjb25maWcgUlRDX0RSVl9JU0wxMjAyMgorCXRyaXN0YXRlICJJbnRlcnNpbCBJU0wxMjAyMiIKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBJbnRlcnNpbCBJU0wxMjAyMiBSVEMgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtaXNsMTIwMjIuCisKIGNvbmZpZyBSVENfRFJWX1gxMjA1CiAJdHJpc3RhdGUgIlhpY29yL0ludGVyc2lsIFgxMjA1IgogCWhlbHAKQEAgLTUzNyw2ICs1NTYsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW1zbTYyNDIuCiAKK2NvbmZpZyBSVENfRFJWX0lNWERJCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBJTVggRHJ5SWNlIFJlYWwgVGltZSBDbG9jayIKKwlkZXBlbmRzIG9uIEFSQ0hfTVgyNQorCWRlcGVuZHMgb24gUlRDX0NMQVNTCisJaGVscAorCSAgIFN1cHBvcnQgZm9yIEZyZWVzY2FsZSBJTVggRHJ5SWNlIFJUQworCisJICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUsIGlmIHNvLCB0aGUgbW9kdWxlCisJICAgd2lsbCBiZSBjYWxsZWQgInJ0Yy1pbXhkaSIuCisKIGNvbmZpZyBSVENfTVhDCiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBNWEMgUmVhbCBUaW1lIENsb2NrIgogCWRlcGVuZHMgb24gQVJDSF9NWEMKQEAgLTY0NSw5ICs2NzQsMTYgQEAKIAkgIERBOHh4L09NQVAtTDEzeCBjaGlwcy4gIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEKIAkgIG1vZHVsZSBjYWxsZWQgcnRjLW9tYXAuCiAKK2NvbmZpZyBIQVZFX1MzQ19SVEMKKwlib29sCisJaGVscAorCSAgVGhpcyB3aWxsIGluY2x1ZGUgUlRDIHN1cHBvcnQgZm9yIFNhbXN1bmcgU29Dcy4gSWYKKwkgIHlvdSB3YW50IHRvIGluY2x1ZGUgUlRDIHN1cHBvcnQgZm9yIGFueSBtYWNoaW5lLCBraW5kbHkKKwkgIHNlbGVjdCB0aGlzIGluIHRoZSByZXNwZWN0aXZlIG1hY2gtWFhYWC9LY29uZmlnIGZpbGUuCisKIGNvbmZpZyBSVENfRFJWX1MzQwogCXRyaXN0YXRlICJTYW1zdW5nIFMzQyBzZXJpZXMgU29DIFJUQyIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1MzQzY0WFggfHwgSEFWRV9TM0NfUlRDCiAJaGVscAogCSAgUlRDIChSZWFsdGltZSBDbG9jaykgZHJpdmVyIGZvciB0aGUgY2xvY2sgaW5idWlsdCBpbnRvIHRoZQogCSAgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBvZiBTb0NzLiBUaGlzIGNhbiBwcm92aWRlIHBlcmlvZGljCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGZlZGY5YmIuLjBmMjA3YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC00MSwxMiArNDEsMTUgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTU1MykJKz0gcnRjLWRzMTU1My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzE2NzIpCSs9IHJ0Yy1kczE2NzIubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNzQyKQkrPSBydGMtZHMxNzQyLm8KK29iai0kKENPTkZJR19SVENfRFJWX0RTMzIzMikJKz0gcnRjLWRzMzIzMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzMyMzQpCSs9IHJ0Yy1kczMyMzQubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfRUZJKQkrPSBydGMtZWZpLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfR0VORVJJQykJKz0gcnRjLWdlbmVyaWMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfSU1YREkpCSs9IHJ0Yy1pbXhkaS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9JU0wxMjA4KQkrPSBydGMtaXNsMTIwOC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9JU0wxMjAyMikJKz0gcnRjLWlzbDEyMDIyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0paNDc0MCkJKz0gcnRjLWp6NDc0MC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDFUODApCSs9IHJ0Yy1tNDF0ODAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQxVDk0KQkrPSBydGMtbTQxdDk0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY21vcy5jCmluZGV4IDExYjhlYTIuLjU4NTYxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jbW9zLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNtb3MuYwpAQCAtOTcwLDcgKzk3MCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAKLSNpZmRlZglDT05GSUdfUE0KIHN0YXRpYyB1MzIgcnRjX2hhbmRsZXIodm9pZCAqY29udGV4dCkKIHsKIAlhY3BpX2NsZWFyX2V2ZW50KEFDUElfRVZFTlRfUlRDKTsKQEAgLTk5OSwxMSArOTk4LDYgQEAKIHsKIAlhY3BpX2Rpc2FibGVfZXZlbnQoQUNQSV9FVkVOVF9SVEMsIDApOwogfQotI2Vsc2UKLSNkZWZpbmUgcnRjX3dha2Vfc2V0dXAoKQlkb3t9d2hpbGUoMCkKLSNkZWZpbmUgcnRjX3dha2Vfb24JCU5VTEwKLSNkZWZpbmUgcnRjX3dha2Vfb2ZmCQlOVUxMCi0jZW5kaWYKIAogLyogRXZlcnkgQUNQSSBwbGF0Zm9ybSBoYXMgYSBtYzE0NjgxOCBjb21wYXRpYmxlICJjbW9zIHJ0YyIuICBIZXJlIHdlIGZpbmQKICAqIGl0cyBkZXZpY2Ugbm9kZSBhbmQgcGFzcyBleHRyYSBjb25maWcgZGF0YS4gIFRoaXMgaGVscHMgaXRzIGRyaXZlciB1c2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFlZDhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogUlRDIGNsaWVudC9kcml2ZXIgZm9yIHRoZSBNYXhpbS9EYWxsYXMgRFMzMjMyIFJlYWwtVGltZSBDbG9jayBvdmVyIEkyQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKy8qCisgKiBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byB1c2UgaTJjIG1zZ3MvaTJjX3RyYW5zZmVyIGRpcmVjdGx5IGJ1dCwgYXMKKyAqIHJlY29tbWVuZWQgaW4gLi4uL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cyBzZWN0aW9uCisgKiAiU2VuZGluZyBhbmQgcmVjZWl2aW5nIiwgdXNpbmcgU01CdXMgbGV2ZWwgY29tbXVuaWNhdGlvbiBpcyBwcmVmZXJyZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBEUzMyMzJfUkVHX1NFQ09ORFMJMHgwMAorI2RlZmluZSBEUzMyMzJfUkVHX01JTlVURVMJMHgwMQorI2RlZmluZSBEUzMyMzJfUkVHX0hPVVJTCTB4MDIKKyNkZWZpbmUgRFMzMjMyX1JFR19BTVBNCQkweDAyCisjZGVmaW5lIERTMzIzMl9SRUdfREFZCQkweDAzCisjZGVmaW5lIERTMzIzMl9SRUdfREFURQkJMHgwNAorI2RlZmluZSBEUzMyMzJfUkVHX01PTlRICTB4MDUKKyNkZWZpbmUgRFMzMjMyX1JFR19DRU5UVVJZCTB4MDUKKyNkZWZpbmUgRFMzMjMyX1JFR19ZRUFSCQkweDA2CisjZGVmaW5lIERTMzIzMl9SRUdfQUxBUk0xICAgICAgICAgMHgwNwkvKiBBbGFybSAxIEJBU0UgKi8KKyNkZWZpbmUgRFMzMjMyX1JFR19BTEFSTTIgICAgICAgICAweDBCCS8qIEFsYXJtIDIgQkFTRSAqLworI2RlZmluZSBEUzMyMzJfUkVHX0NSCQkweDBFCS8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KKyMJZGVmaW5lIERTMzIzMl9SRUdfQ1JfbkVPU0MgICAgICAgIDB4ODAKKyMgICAgICAgZGVmaW5lIERTMzIzMl9SRUdfQ1JfSU5UQ04gICAgICAgIDB4MDQKKyMgICAgICAgZGVmaW5lIERTMzIzMl9SRUdfQ1JfQTJJRSAgICAgICAgMHgwMgorIyAgICAgICBkZWZpbmUgRFMzMjMyX1JFR19DUl9BMUlFICAgICAgICAweDAxCisKKyNkZWZpbmUgRFMzMjMyX1JFR19TUgkweDBGCS8qIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyICovCisjCWRlZmluZSBEUzMyMzJfUkVHX1NSX09TRiAgIDB4ODAKKyMgICAgICAgZGVmaW5lIERTMzIzMl9SRUdfU1JfQlNZICAgMHgwNAorIyAgICAgICBkZWZpbmUgRFMzMjMyX1JFR19TUl9BMkYgICAweDAyCisjICAgICAgIGRlZmluZSBEUzMyMzJfUkVHX1NSX0ExRiAgIDB4MDEKKworc3RydWN0IGRzMzIzMiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJLyogVGhlIG11dGV4IHByb3RlY3RzIGFsYXJtIG9wZXJhdGlvbnMsIGFuZCBwcmV2ZW50cyBhIHJhY2UKKwkgKiBiZXR3ZWVuIHRoZSBlbmFibGVfaXJxKCkgaW4gdGhlIHdvcmtxdWV1ZSBhbmQgdGhlIGZyZWVfaXJxKCkKKwkgKiBpbiB0aGUgcmVtb3ZlIGZ1bmN0aW9uLgorCSAqLworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlpbnQgZXhpdGluZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczMyMzJfZHJpdmVyOworCitzdGF0aWMgaW50IGRzMzIzMl9jaGVja19ydGNfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldCA9IDA7CisJaW50IGNvbnRyb2wsIHN0YXQ7CisKKwlzdGF0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMzMjMyX1JFR19TUik7CisJaWYgKHN0YXQgPCAwKQorCQlyZXR1cm4gc3RhdDsKKworCWlmIChzdGF0ICYgRFMzMjMyX1JFR19TUl9PU0YpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCQkib3NjaWxsYXRvciBkaXNjb250aW51aXR5IGZsYWdnZWQsICIKKwkJCQkidGltZSB1bnJlbGlhYmxlXG4iKTsKKworCXN0YXQgJj0gfihEUzMyMzJfUkVHX1NSX09TRiB8IERTMzIzMl9SRUdfU1JfQTFGIHwgRFMzMjMyX1JFR19TUl9BMkYpOworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMzIzMl9SRUdfU1IsIHN0YXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogSWYgdGhlIGFsYXJtIGlzIHBlbmRpbmcsIGNsZWFyIGl0IGJlZm9yZSByZXF1ZXN0aW5nCisJICogdGhlIGludGVycnVwdCwgc28gYW4gaW50ZXJydXB0IGV2ZW50IGlzbid0IHJlcG9ydGVkCisJICogYmVmb3JlIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQuCisJICovCisKKwljb250cm9sID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMzMjMyX1JFR19DUik7CisJaWYgKGNvbnRyb2wgPCAwKQorCQlyZXR1cm4gY29udHJvbDsKKworCWNvbnRyb2wgJj0gfihEUzMyMzJfUkVHX0NSX0ExSUUgfCBEUzMyMzJfUkVHX0NSX0EySUUpOworCWNvbnRyb2wgfD0gRFMzMjMyX1JFR19DUl9JTlRDTjsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMzMjMyX1JFR19DUiwgY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbnQgZHMzMjMyX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdGltZSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCByZXQ7CisJdTggYnVmWzddOworCXVuc2lnbmVkIGludCB5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZDsKKwl1bnNpZ25lZCBpbnQgd2VlaywgdHdlbHZlX2hyLCBhbV9wbTsKKwl1bnNpZ25lZCBpbnQgY2VudHVyeSwgYWRkX2NlbnR1cnkgPSAwOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBEUzMyMzJfUkVHX1NFQ09ORFMsIDcsIGJ1Zik7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgNykKKwkJcmV0dXJuIC1FSU87CisKKwlzZWNvbmQgPSBidWZbMF07CisJbWludXRlID0gYnVmWzFdOworCWhvdXIgPSBidWZbMl07CisJd2VlayA9IGJ1ZlszXTsKKwlkYXkgPSBidWZbNF07CisJbW9udGggPSBidWZbNV07CisJeWVhciA9IGJ1Zls2XTsKKworCS8qIEV4dHJhY3QgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgQU0vUE0gYW5kIGNlbnR1cnkgKi8KKworCXR3ZWx2ZV9ociA9IGhvdXIgJiAweDQwOworCWFtX3BtID0gaG91ciAmIDB4MjA7CisJY2VudHVyeSA9IG1vbnRoICYgMHg4MDsKKworCS8qIFdyaXRlIHRvIHJ0Y190aW1lIHN0cnVjdHVyZSAqLworCisJdGltZS0+dG1fc2VjID0gYmNkMmJpbihzZWNvbmQpOworCXRpbWUtPnRtX21pbiA9IGJjZDJiaW4obWludXRlKTsKKwlpZiAodHdlbHZlX2hyKSB7CisJCS8qIENvbnZlcnQgdG8gMjQgaHIgKi8KKwkJaWYgKGFtX3BtKQorCQkJdGltZS0+dG1faG91ciA9IGJjZDJiaW4oaG91ciAmIDB4MUYpICsgMTI7CisJCWVsc2UKKwkJCXRpbWUtPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIgJiAweDFGKTsKKwl9IGVsc2UgeworCQl0aW1lLT50bV9ob3VyID0gYmNkMmJpbihob3VyKTsKKwl9CisKKwl0aW1lLT50bV93ZGF5ID0gYmNkMmJpbih3ZWVrKTsKKwl0aW1lLT50bV9tZGF5ID0gYmNkMmJpbihkYXkpOworCXRpbWUtPnRtX21vbiA9IGJjZDJiaW4obW9udGggJiAweDdGKTsKKwlpZiAoY2VudHVyeSkKKwkJYWRkX2NlbnR1cnkgPSAxMDA7CisKKwl0aW1lLT50bV95ZWFyID0gYmNkMmJpbih5ZWFyKSArIGFkZF9jZW50dXJ5OworCisJcmV0dXJuIHJ0Y192YWxpZF90bSh0aW1lKTsKK30KKworc3RhdGljIGludCBkczMyMzJfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1OCBidWZbN107CisKKwkvKiBFeHRyYWN0IHRpbWUgZnJvbSBydGNfdGltZSBhbmQgbG9hZCBpbnRvIGRzMzIzMiovCisKKwlidWZbMF0gPSBiaW4yYmNkKHRpbWUtPnRtX3NlYyk7CisJYnVmWzFdID0gYmluMmJjZCh0aW1lLT50bV9taW4pOworCWJ1ZlsyXSA9IGJpbjJiY2QodGltZS0+dG1faG91cik7CisJYnVmWzNdID0gYmluMmJjZCh0aW1lLT50bV93ZGF5KTsgLyogRGF5IG9mIHRoZSB3ZWVrICovCisJYnVmWzRdID0gYmluMmJjZCh0aW1lLT50bV9tZGF5KTsgLyogRGF0ZSAqLworCWJ1Zls1XSA9IGJpbjJiY2QodGltZS0+dG1fbW9uKTsKKwlpZiAodGltZS0+dG1feWVhciA+PSAxMDApIHsKKwkJYnVmWzVdIHw9IDB4ODA7CisJCWJ1Zls2XSA9IGJpbjJiY2QodGltZS0+dG1feWVhciAtIDEwMCk7CisJfSBlbHNlIHsKKwkJYnVmWzZdID0gYmluMmJjZCh0aW1lLT50bV95ZWFyKTsKKwl9CisKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwKKwkJCQkJICAgICAgRFMzMjMyX1JFR19TRUNPTkRTLCA3LCBidWYpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHMzMjMyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRldl9pZDsKKwlzdHJ1Y3QgZHMzMjMyICpkczMyMzIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXNjaGVkdWxlX3dvcmsoJmRzMzIzMi0+d29yayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBkczMyMzJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRzMzIzMiAqZHMzMjMyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkczMyMzIsIHdvcmspOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkczMyMzItPmNsaWVudDsKKwlpbnQgc3RhdCwgY29udHJvbDsKKworCW11dGV4X2xvY2soJmRzMzIzMi0+bXV0ZXgpOworCisJc3RhdCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMzIzMl9SRUdfU1IpOworCWlmIChzdGF0IDwgMCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoc3RhdCAmIERTMzIzMl9SRUdfU1JfQTFGKSB7CisJCWNvbnRyb2wgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzMyMzJfUkVHX0NSKTsKKwkJaWYgKGNvbnRyb2wgPCAwKQorCQkJZ290byBvdXQ7CisJCS8qIGRpc2FibGUgYWxhcm0xIGludGVycnVwdCAqLworCQljb250cm9sICY9IH4oRFMzMjMyX1JFR19DUl9BMUlFKTsKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMzIzMl9SRUdfQ1IsIGNvbnRyb2wpOworCisJCS8qIGNsZWFyIHRoZSBhbGFybSBwZW5kIGZsYWcgKi8KKwkJc3RhdCAmPSB+RFMzMjMyX1JFR19TUl9BMUY7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzMyMzJfUkVHX1NSLCBzdGF0KTsKKworCQlydGNfdXBkYXRlX2lycShkczMyMzItPnJ0YywgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCX0KKworb3V0OgorCWlmICghZHMzMjMyLT5leGl0aW5nKQorCQllbmFibGVfaXJxKGNsaWVudC0+aXJxKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRzMzIzMi0+bXV0ZXgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMzMjMyX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IGRzMzIzMl9yZWFkX3RpbWUsCisJLnNldF90aW1lID0gZHMzMjMyX3NldF90aW1lLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZHMzMjMyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZHMzMjMyICpkczMyMzI7CisJaW50IHJldDsKKworCWRzMzIzMiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczMyMzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzMzIzMikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkczMyMzItPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkczMyMzIpOworCisJSU5JVF9XT1JLKCZkczMyMzItPndvcmssIGRzMzIzMl93b3JrKTsKKwltdXRleF9pbml0KCZkczMyMzItPm11dGV4KTsKKworCXJldCA9IGRzMzIzMl9jaGVja19ydGNfc3RhdHVzKGNsaWVudCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCWRzMzIzMi0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKKwkJCQkJICAmZHMzMjMyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKGRzMzIzMi0+cnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKGRzMzIzMi0+cnRjKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgdGhlIGNsYXNzIGRldmljZVxuIik7CisJCWdvdG8gb3V0X2lycTsKKwl9CisKKwlpZiAoY2xpZW50LT5pcnEgPj0gMCkgeworCQlyZXQgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgZHMzMjMyX2lycSwgMCwKKwkJCQkgImRzMzIzMiIsIGNsaWVudCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRXG4iKTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2lycToKKwlpZiAoY2xpZW50LT5pcnEgPj0gMCkKKwkJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGNsaWVudCk7CisKK291dF9mcmVlOgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGRzMzIzMik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZHMzMjMyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkczMyMzIgKmRzMzIzMiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKGNsaWVudC0+aXJxID49IDApIHsKKwkJbXV0ZXhfbG9jaygmZHMzMjMyLT5tdXRleCk7CisJCWRzMzIzMi0+ZXhpdGluZyA9IDE7CisJCW11dGV4X3VubG9jaygmZHMzMjMyLT5tdXRleCk7CisKKwkJZnJlZV9pcnEoY2xpZW50LT5pcnEsIGNsaWVudCk7CisJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJfQorCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKGRzMzIzMi0+cnRjKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkczMyMzIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMzMjMyX2lkW10gPSB7CisJeyAiZHMzMjMyIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczMyMzJfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHMzMjMyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtZHMzMjMyIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBkczMyMzJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRzMzIzMl9yZW1vdmUpLAorCS5pZF90YWJsZSA9IGRzMzIzMl9pZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRzMzIzMl9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZkczMyMzJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRzMzIzMl9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmRzMzIzMl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChkczMyMzJfaW5pdCk7Cittb2R1bGVfZXhpdChkczMyMzJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNyaWthbnRoIFNyaW5pdmFzYW4gPHNyaWthbnRoLnNyaW5pdmFzYW5AZnJlZXNjYWxlLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWF4aW0vRGFsbGFzIERTMzIzMiBSVEMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZm0zMTMwLmMKaW5kZXggZTRkZThmMy4uNGNmMmU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWZtMzEzMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1mbTMxMzAuYwpAQCAtNTIsOCArNTIsOCBAQAogCXN0cnVjdCBpMmNfbXNnCQltc2dbNF07CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKIAlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjOworCWludAkJCWFsYXJtX3ZhbGlkOwogCWludAkJCWRhdGFfdmFsaWQ7Ci0JaW50CQkJYWxhcm07CiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGZtMzEzMF9pZFtdID0gewogCXsgImZtMzEzMCIsIDAgfSwKQEAgLTg3LDExICs4Nyw3IEBACiAJCWRldl9kYmcoZGV2LCAiaW52YWxpZCBtb2RlICVkXG4iLCBtb2RlKTsKIAkJYnJlYWs7CiAJfQotCS8qIENoZWNraW5nIGZvciBhbGFybSAqLwotCWlmIChmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmIEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQUYpIHsKLQkJZm0zMTMwLT5hbGFybSA9IDE7Ci0JCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICY9IH5GTTMxMzBfUlRDX0NPTlRST0xfQklUX0FGOwotCX0KKwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZm0zMTMwLT5jbGllbnQsCiAJCSBGTTMxMzBfUlRDX0NPTlRST0wsIGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdKTsKIH0KQEAgLTIwOCw2ICsyMDQsMTcgQEAKIAlzdHJ1Y3QgZm0zMTMwICpmbTMxMzAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgdG1wOwogCXN0cnVjdCBydGNfdGltZSAqdG0gPSAmYWxybS0+dGltZTsKKworCWlmICghZm0zMTMwLT5hbGFybV92YWxpZCkgeworCQkvKgorCQkgKiBXZSBoYXZlIGludmFsaWQgYWxhcm0gaW4gUlRDLCBwcm9iYWJseSBkdWUgdG8gYmF0dGVyeSBmYXVsdHMKKwkJICogb3Igb3RoZXIgcHJvYmxlbXMuIFJldHVybiBFSU8gZm9yIG5vdywgaXQgd2lsbCBhbGxvdyB1cyB0bworCQkgKiBzZXQgYWxhcm0gdmFsdWUgbGF0ZXIgaW5zdGVhZCBvZiBlcnJvciBkdXJpbmcgcHJvYmluZyB3aGljaAorCQkgKiBkaXNhYmxlcyBkZXZpY2UKKwkJICovCisJCXJldHVybiAtRUlPOworCX0KKwogCS8qIHJlYWQgdGhlIFJUQyBhbGFybSByZWdpc3RlcnMgYWxsIGF0IG9uY2UgKi8KIAl0bXAgPSBpMmNfdHJhbnNmZXIodG9faTJjX2FkYXB0ZXIoZm0zMTMwLT5jbGllbnQtPmRldi5wYXJlbnQpLAogCQkJJmZtMzEzMC0+bXNnWzJdLCAyKTsKQEAgLTIyMiwyMCArMjI5LDMxIEBACiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX0RBVEVdLAogCQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdKTsKIAotCiAJdG0tPnRtX3NlYwk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9TRUNPTkRTXSAmIDB4N0YpOwogCXRtLT50bV9taW4JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gJiAweDdGKTsKIAl0bS0+dG1faG91cgk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gJiAweDNGKTsKIAl0bS0+dG1fbWRheQk9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSAmIDB4M0YpOwogCXRtLT50bV9tb24JPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTU9OVEhTXSAmIDB4MUYpOworCiAJaWYgKHRtLT50bV9tb24gPiAwKQogCQl0bS0+dG1fbW9uIC09IDE7IC8qIFJUQyBpcyAxLTEyLCB0bV9tb24gaXMgMC0xMSAqLworCiAJZGV2X2RiZyhkZXYsICIlcyBzZWNzPSVkLCBtaW5zPSVkLCAiCiAJCSJob3Vycz0lZCwgbWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLAogCQkicmVhZCBhbGFybSIsIHRtLT50bV9zZWMsIHRtLT50bV9taW4sCiAJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWRheSwKIAkJdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAorCS8qIGNoZWNrIGlmIGFsYXJtIGVuYWJsZWQgKi8KKwlmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSA9CisJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShmbTMxMzAtPmNsaWVudCwgRk0zMTMwX1JUQ19DT05UUk9MKTsKKworCWlmICgoZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX0FFTikgJiYKKwkJKH5mbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmCisJCQlGTTMxMzBfUlRDX0NPTlRST0xfQklUX0NBTCkpIHsKKwkJYWxybS0+ZW5hYmxlZCA9IDE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1MSwyNSArMjY5LDIwIEBACiAJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWRheSwKIAkJdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKIAotCWlmICh0bS0+dG1fc2VjICE9IC0xKQotCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdID0KLQkJCWJpbjJiY2QodG0tPnRtX3NlYykgfCAweDgwOworCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10gPQorCQkodG0tPnRtX3NlYyAhPSAtMSkgPyBiaW4yYmNkKHRtLT50bV9zZWMpIDogMHg4MDsKIAotCWlmICh0bS0+dG1fbWluICE9IC0xKQotCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01JTlVURVNdID0KLQkJCWJpbjJiY2QodG0tPnRtX21pbikgfCAweDgwOworCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fTUlOVVRFU10gPQorCQkodG0tPnRtX21pbiAhPSAtMSkgPyBiaW4yYmNkKHRtLT50bV9taW4pIDogMHg4MDsKIAotCWlmICh0bS0+dG1faG91ciAhPSAtMSkKLQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9IT1VSU10gPQotCQkJYmluMmJjZCh0bS0+dG1faG91cikgfCAweDgwOworCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fSE9VUlNdID0KKwkJKHRtLT50bV9ob3VyICE9IC0xKSA/IGJpbjJiY2QodG0tPnRtX2hvdXIpIDogMHg4MDsKIAotCWlmICh0bS0+dG1fbWRheSAhPSAtMSkKLQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSA9Ci0JCQliaW4yYmNkKHRtLT50bV9tZGF5KSB8IDB4ODA7CisJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9EQVRFXSA9CisJCSh0bS0+dG1fbWRheSAhPSAtMSkgPyBiaW4yYmNkKHRtLT50bV9tZGF5KSA6IDB4ODA7CiAKLQlpZiAodG0tPnRtX21vbiAhPSAtMSkKLQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9BTEFSTV9NT05USFNdID0KLQkJCWJpbjJiY2QodG0tPnRtX21vbiArIDEpIHwgMHg4MDsKKwlmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX01PTlRIU10gPQorCQkodG0tPnRtX21vbiAhPSAtMSkgPyBiaW4yYmNkKHRtLT50bV9tb24gKyAxKSA6IDB4ODA7CiAKIAlkZXZfZGJnKGRldiwgImFsYXJtIHdyaXRlICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQUxBUk1fU0VDT05EU10sCkBAIC0yODUsMTEgKzI5OCw4IEBACiAJfQogCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdID0KIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGZtMzEzMC0+Y2xpZW50LCBGTTMxMzBfUlRDX0NPTlRST0wpOwotCS8qIENoZWNraW5nIGZvciBhbGFybSAqLwotCWlmIChmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmIEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQUYpIHsKLQkJZm0zMTMwLT5hbGFybSA9IDE7Ci0JCWZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICY9IH5GTTMxMzBfUlRDX0NPTlRST0xfQklUX0FGOwotCX0KKworCS8qIGVuYWJsZSBvciBkaXNhYmxlIGFsYXJtICovCiAJaWYgKGFscm0tPmVuYWJsZWQpIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShmbTMxMzAtPmNsaWVudCwgRk0zMTMwX1JUQ19DT05UUk9MLAogCQkJKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKQEAgLTI5OCwxNiArMzA4LDU1IEBACiAJfSBlbHNlIHsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShmbTMxMzAtPmNsaWVudCwgRk0zMTMwX1JUQ19DT05UUk9MLAogCQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJgotCQkJCX4oRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9BRU4pKTsKKwkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQ0FMKSAmCisJCQkJCX4oRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9BRU4pKTsKIAl9CisKKwkvKiBXZSBhc3N1bWUgaGVyZSB0aGF0IGRhdGEgaXMgdmFsaWQgb25jZSB3cml0dGVuICovCisJaWYgKCFmbTMxMzAtPmFsYXJtX3ZhbGlkKQorCQlmbTMxMzAtPmFsYXJtX3ZhbGlkID0gMTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZtMzEzMF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGZtMzEzMCAqZm0zMTMwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSA9CisJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShmbTMxMzAtPmNsaWVudCwgRk0zMTMwX1JUQ19DT05UUk9MKTsKKworCWRldl9kYmcoZGV2LCAiYWxhcm1faXJxX2VuYWJsZTogZW5hYmxlPSVkLCBGTTMxMzBfUlRDX0NPTlRST0w9JTAyeFxuIiwKKwkJZW5hYmxlZCwgZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0pOworCisJc3dpdGNoIChlbmFibGVkKSB7CisJY2FzZSAwOgkJLyogYWxhcm0gb2ZmICovCisJCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZm0zMTMwLT5jbGllbnQsCisJCQlGTTMxMzBfUlRDX0NPTlRST0wsIGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKKwkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQ0FMKSAmCisJCQkJCX4oRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9BRU4pKTsKKwkJYnJlYWs7CisJY2FzZSAxOgkJLyogYWxhcm0gb24gKi8KKwkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShmbTMxMzAtPmNsaWVudCwKKwkJCUZNMzEzMF9SVENfQ09OVFJPTCwgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYKKwkJCQl+KEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQ0FMKSkgfAorCQkJCQlGTTMxMzBfUlRDX0NPTlRST0xfQklUX0FFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBmbTMxMzBfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZm0zMTMwX2dldF90aW1lLAogCS5zZXRfdGltZQk9IGZtMzEzMF9zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IGZtMzEzMF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBmbTMxMzBfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gZm0zMTMwX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZm0zMTMwX2RyaXZlcjsKQEAgLTM1Niw2ICs0MDUsNyBAQAogCWZtMzEzMC0+bXNnWzNdLmxlbiA9IEZNMzEzMF9BTEFSTV9SRUdTOwogCWZtMzEzMC0+bXNnWzNdLmJ1ZiA9ICZmbTMxMzAtPnJlZ3NbRk0zMTMwX0FMQVJNX1NFQ09ORFNdOwogCisJZm0zMTMwLT5hbGFybV92YWxpZCA9IDA7CiAJZm0zMTMwLT5kYXRhX3ZhbGlkID0gMDsKIAogCXRtcCA9IGkyY190cmFuc2ZlcihhZGFwdGVyLCBmbTMxMzAtPm1zZywgNCk7CkBAIC0zNzAsMTIgKzQyMCw2IEBACiAJZm0zMTMwLT5yZWdzW0ZNMzEzMF9DQUxfQ09OVFJPTF0gPQogCQlpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBGTTMxMzBfQ0FMX0NPTlRST0wpOwogCi0JLyogQ2hlY2tpbmcgZm9yIGFsYXJtICovCi0JaWYgKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0NPTlRST0xdICYgRk0zMTMwX1JUQ19DT05UUk9MX0JJVF9BRikgewotCQlmbTMxMzAtPmFsYXJtID0gMTsKLQkJZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJj0gfkZNMzEzMF9SVENfQ09OVFJPTF9CSVRfQUY7Ci0JfQotCiAJLyogRGlzYWJsaW5nIGNhbGlicmF0aW9uIG1vZGUgKi8KIAlpZiAoZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX0NBTCkgewogCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRk0zMTMwX1JUQ19DT05UUk9MLApAQCAtNDAwLDQ0ICs0NDQsNzkgQEAKIAkJCWZtMzEzMC0+cmVnc1tGTTMxMzBfQ0FMX0NPTlRST0xdICYKIAkJCQl+KEZNMzEzMF9DQUxfQ09OVFJPTF9CSVRfbk9TQ0VOKSk7CiAKLQkvKiBvc2NpbGxhdG9yIGZhdWx0PyAgY2xlYXIgZmxhZywgYW5kIHdhcm4gKi8KLQlpZiAoZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX0xCKQorCS8qIGxvdyBiYXR0ZXJ5PyAgY2xlYXIgZmxhZywgYW5kIHdhcm4gKi8KKwlpZiAoZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfQ09OVFJPTF0gJiBGTTMxMzBfUlRDX0NPTlRST0xfQklUX0xCKSB7CisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBGTTMxMzBfUlRDX0NPTlRST0wsCisJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmCisJCQkJfihGTTMxMzBfUlRDX0NPTlRST0xfQklUX0xCKSk7CiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkxvdyBiYXR0ZXJ5IVxuIik7CisJfQogCi0JLyogb3NjaWxsYXRvciBmYXVsdD8gIGNsZWFyIGZsYWcsIGFuZCB3YXJuICovCisJLyogY2hlY2sgaWYgUG93ZXIgT24gUmVzZXQgYml0IGlzIHNldCAqLwogCWlmIChmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmIEZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUE9SKSB7CiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBGTTMxMzBfUlRDX0NPTlRST0wsCiAJCQlmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19DT05UUk9MXSAmCiAJCQkJfkZNMzEzMF9SVENfQ09OVFJPTF9CSVRfUE9SKTsKLQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJQT1IgYml0IGlzIHNldFxuIik7CiAJfQogCS8qIEFDUyBpcyBjb250cm9sbGVkIGJ5IGFsYXJtICovCiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEZNMzEzMF9BTEFSTV9XUF9DT05UUk9MLCAweDgwKTsKIAotCS8qIFRPRE8gKi8KLQkvKiBUT0RPIG5lZWQgdG8gc2FuaXR5IGNoZWNrIGFsYXJtICovCi0JdG1wID0gZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU107Ci0JdG1wID0gYmNkMmJpbih0bXAgJiAweDdmKTsKLQlpZiAodG1wID4gNjApCi0JCWdvdG8gZXhpdF9iYWQ7CisJLyogYWxhcm0gcmVnaXN0ZXJzIHNhbml0eSBjaGVjayAqLworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfU0VDT05EU10gJiAweDdmKTsKKwlpZiAodG1wID4gNTkpCisJCWdvdG8gYmFkX2FsYXJtOworCiAJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19NSU5VVEVTXSAmIDB4N2YpOwotCWlmICh0bXAgPiA2MCkKLQkJZ290byBleGl0X2JhZDsKKwlpZiAodG1wID4gNTkpCisJCWdvdG8gYmFkX2FsYXJtOworCisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19IT1VSU10gJiAweDNmKTsKKwlpZiAodG1wID4gMjMpCisJCWdvdG8gYmFkX2FsYXJtOwogCiAJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVRFXSAmIDB4M2YpOwogCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAzMSkKLQkJZ290byBleGl0X2JhZDsKKwkJZ290byBiYWRfYWxhcm07CiAKIAl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX01PTlRIU10gJiAweDFmKTsKIAlpZiAodG1wID09IDAgfHwgdG1wID4gMTIpCi0JCWdvdG8gZXhpdF9iYWQ7CisJCWdvdG8gYmFkX2FsYXJtOwogCi0JdG1wID0gZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfSE9VUlNdOworCWZtMzEzMC0+YWxhcm1fdmFsaWQgPSAxOworCitiYWRfYWxhcm06CisKKwkvKiBjbG9jayByZWdpc3RlcnMgc2FuaXR5IGNoZWsgKi8KKwl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX1NFQ09ORFNdICYgMHg3Zik7CisJaWYgKHRtcCA+IDU5KQorCQlnb3RvIGJhZF9jbG9jazsKKworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTUlOVVRFU10gJiAweDdmKTsKKwlpZiAodG1wID4gNTkpCisJCWdvdG8gYmFkX2Nsb2NrOworCisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19IT1VSU10gJiAweDNmKTsKKwlpZiAodG1wID4gMjMpCisJCWdvdG8gYmFkX2Nsb2NrOworCisJdG1wID0gYmNkMmJpbihmbTMxMzAtPnJlZ3NbRk0zMTMwX1JUQ19EQVldICYgMHg3KTsKKwlpZiAodG1wID09IDAgfHwgdG1wID4gNykKKwkJZ290byBiYWRfY2xvY2s7CisKKwl0bXAgPSBiY2QyYmluKGZtMzEzMC0+cmVnc1tGTTMxMzBfUlRDX0RBVEVdICYgMHgzZik7CisJaWYgKHRtcCA9PSAwIHx8IHRtcCA+IDMxKQorCQlnb3RvIGJhZF9jbG9jazsKKworCXRtcCA9IGJjZDJiaW4oZm0zMTMwLT5yZWdzW0ZNMzEzMF9SVENfTU9OVEhTXSAmIDB4MWYpOworCWlmICh0bXAgPT0gMCB8fCB0bXAgPiAxMikKKwkJZ290byBiYWRfY2xvY2s7CiAKIAlmbTMxMzAtPmRhdGFfdmFsaWQgPSAxOwogCi1leGl0X2JhZDoKLQlpZiAoIWZtMzEzMC0+ZGF0YV92YWxpZCkKK2JhZF9jbG9jazoKKworCWlmICghZm0zMTMwLT5kYXRhX3ZhbGlkIHx8ICFmbTMxMzAtPmFsYXJtX3ZhbGlkKQogCQlkZXZfZGJnKCZjbGllbnQtPmRldiwKIAkJCQkiJXM6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIKIAkJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1pbXhkaS5jIGIvZHJpdmVycy9ydGMvcnRjLWlteGRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkM2MwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1pbXhkaS5jCkBAIC0wLDAgKzEsNTE5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAgT3JleCBDb21wdXRlZCBSYWRpb2dyYXBoeQorICovCisKKy8qCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKy8qIGJhc2VkIG9uIHJ0Yy1tYzEzODkyLmMgKi8KKworLyoKKyAqIFRoaXMgZHJpdmVyIHVzZXMgdGhlIDQ3LWJpdCAzMiBrSHogY291bnRlciBpbiB0aGUgRnJlZXNjYWxlIERyeUljZSBibG9jaworICogdG8gaW1wbGVtZW50IGEgTGludXggUlRDLiBUaW1lcyBhbmQgYWxhcm1zIGFyZSB0cnVuY2F0ZWQgdG8gc2Vjb25kcy4KKyAqIFNpbmNlIHRoZSBSVEMgZnJhbWV3b3JrIHBlcmZvcm1zIEFQSSBsb2NraW5nIHZpYSBydGMtPm9wc19sb2NrIHRoZQorICogb25seSBzaW11bHRhbmVvdXMgYWNjZXNzZXMgd2UgbmVlZCB0byBkZWFsIHdpdGggaXMgdXBkYXRpbmcgRHJ5SWNlCisgKiByZWdpc3RlcnMgd2hpbGUgc2VydmljaW5nIGFuIGFsYXJtLgorICoKKyAqIE5vdGUgdGhhdCByZWFkaW5nIHRoZSBEU1IgKERyeUljZSBTdGF0dXMgUmVnaXN0ZXIpIGF1dG9tYXRpY2FsbHkgY2xlYXJzCisgKiB0aGUgV0NGIChXcml0ZSBDb21wbGV0ZSBGbGFnKS4gQWxsIERyeUljZSB3cml0ZXMgYXJlIHN5bmNocm9uaXplZCB0byB0aGUKKyAqIExQIChMb3cgUG93ZXIpIGRvbWFpbiBhbmQgc2V0IHRoZSBXQ0YgdXBvbiBjb21wbGV0aW9uLiBXcml0ZXMgdG8gdGhlCisgKiBESUVSIChEcnlJY2UgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcikgYXJlIHRoZSBvbmx5IGV4Y2VwdGlvbi4gVGhlc2UKKyAqIG9jY3VyIGF0IG5vcm1hbCBidXMgc3BlZWRzIGFuZCBkbyBub3Qgc2V0IFdDRi4gIFBlcmlvZGljIGludGVycnVwdHMgYXJlCisgKiBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisvKiBEcnlJY2UgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBEVENNUiAgICAgMHgwMCAgICAgICAgICAgLyogVGltZSBDb3VudGVyIE1TQiBSZWcgKi8KKyNkZWZpbmUgRFRDTFIgICAgIDB4MDQgICAgICAgICAgIC8qIFRpbWUgQ291bnRlciBMU0IgUmVnICovCisKKyNkZWZpbmUgRENBTVIgICAgIDB4MDggICAgICAgICAgIC8qIENsb2NrIEFsYXJtIE1TQiBSZWcgKi8KKyNkZWZpbmUgRENBTFIgICAgIDB4MGMgICAgICAgICAgIC8qIENsb2NrIEFsYXJtIExTQiBSZWcgKi8KKyNkZWZpbmUgRENBTVJfVU5TRVQgIDB4RkZGRkZGRkYgIC8qIGRvb21zZGF5IC0gMSBzZWMgKi8KKworI2RlZmluZSBEQ1IgICAgICAgMHgxMCAgICAgICAgICAgLyogQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgRENSX1RDRSAgICgxIDw8IDMpICAgICAgIC8qIFRpbWUgQ291bnRlciBFbmFibGUgKi8KKworI2RlZmluZSBEU1IgICAgICAgMHgxNCAgICAgICAgICAgLyogU3RhdHVzIFJlZyAqLworI2RlZmluZSBEU1JfV0JGICAgKDEgPDwgMTApICAgICAgLyogV3JpdGUgQnVzeSBGbGFnICovCisjZGVmaW5lIERTUl9XTkYgICAoMSA8PCA5KSAgICAgICAvKiBXcml0ZSBOZXh0IEZsYWcgKi8KKyNkZWZpbmUgRFNSX1dDRiAgICgxIDw8IDgpICAgICAgIC8qIFdyaXRlIENvbXBsZXRlIEZsYWcgKi8KKyNkZWZpbmUgRFNSX1dFRiAgICgxIDw8IDcpICAgICAgIC8qIFdyaXRlIEVycm9yIEZsYWcgKi8KKyNkZWZpbmUgRFNSX0NBRiAgICgxIDw8IDQpICAgICAgIC8qIENsb2NrIEFsYXJtIEZsYWcgKi8KKyNkZWZpbmUgRFNSX05WRiAgICgxIDw8IDEpICAgICAgIC8qIE5vbi1WYWxpZCBGbGFnICovCisjZGVmaW5lIERTUl9TVkYgICAoMSA8PCAwKSAgICAgICAvKiBTZWN1cml0eSBWaW9sYXRpb24gRmxhZyAqLworCisjZGVmaW5lIERJRVIgICAgICAweDE4ICAgICAgICAgICAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZyAqLworI2RlZmluZSBESUVSX1dOSUUgKDEgPDwgOSkgICAgICAgLyogV3JpdGUgTmV4dCBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERJRVJfV0NJRSAoMSA8PCA4KSAgICAgICAvKiBXcml0ZSBDb21wbGV0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERJRVJfV0VJRSAoMSA8PCA3KSAgICAgICAvKiBXcml0ZSBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIERJRVJfQ0FJRSAoMSA8PCA0KSAgICAgICAvKiBDbG9jayBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCisKKy8qKgorICogc3RydWN0IGlteGRpX2RldiAtIHByaXZhdGUgaW14ZGkgcnRjIGRhdGEKKyAqIEBwZGV2OiBwaW9udGVyIHRvIHBsYXRmb3JtIGRldgorICogQHJ0YzogcG9pbnRlciB0byBydGMgc3RydWN0CisgKiBAaW9hZGRyOiBJTyByZWdpc3RlcnMgcG9pbnRlcgorICogQGlycTogZHJ5aWNlIG5vcm1hbCBpbnRlcnJ1cHQKKyAqIEBjbGs6IGlucHV0IHJlZmVyZW5jZSBjbG9jaworICogQGRzcjogY29weSBvZiB0aGUgRFNSIHJlZ2lzdGVyCisgKiBAaXJxX2xvY2s6IGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKERJRVIpIGxvY2sKKyAqIEB3cml0ZV93YWl0OiByZWdpc3RlcnMgd3JpdGUgY29tcGxldGUgcXVldWUKKyAqIEB3cml0ZV9tdXRleDogc2VyaWFsaXplIHJlZ2lzdGVycyB3cml0ZQorICogQHdvcms6IHNjaGVkdWxlIGFsYXJtIHdvcmsKKyAqLworc3RydWN0IGlteGRpX2RldiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXZvaWQgX19pb21lbSAqaW9hZGRyOworCWludCBpcnE7CisJc3RydWN0IGNsayAqY2xrOworCXUzMiBkc3I7CisJc3BpbmxvY2tfdCBpcnFfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cml0ZV93YWl0OworCXN0cnVjdCBtdXRleCB3cml0ZV9tdXRleDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKK307CisKKy8qCisgKiBlbmFibGUgYSBkcnlpY2UgaW50ZXJydXB0CisgKi8KK3N0YXRpYyB2b2lkIGRpX2ludF9lbmFibGUoc3RydWN0IGlteGRpX2RldiAqaW14ZGksIHUzMiBpbnRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14ZGktPmlycV9sb2NrLCBmbGFncyk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKGlteGRpLT5pb2FkZHIgKyBESUVSKSB8IGludHIsCisJCQlpbXhkaS0+aW9hZGRyICsgRElFUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14ZGktPmlycV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBkaXNhYmxlIGEgZHJ5aWNlIGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBkaV9pbnRfZGlzYWJsZShzdHJ1Y3QgaW14ZGlfZGV2ICppbXhkaSwgdTMyIGludHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXhkaS0+aXJxX2xvY2ssIGZsYWdzKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoaW14ZGktPmlvYWRkciArIERJRVIpICYgfmludHIsCisJCQlpbXhkaS0+aW9hZGRyICsgRElFUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14ZGktPmlycV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGNsZWFyIHRoZSBkcnlpY2Ugd3JpdGUtZXJyb3IgZmxhZy4KKyAqCisgKiBBIGRyeWljZSB3cml0ZSBlcnJvciBpcyBzaW1pbGFyIHRvIGEgYnVzIGZhdWx0IGFuZCBzaG91bGQgbm90IG9jY3VyIGluCisgKiBub3JtYWwgb3BlcmF0aW9uLiAgQ2xlYXJpbmcgdGhlIGZsYWcgcmVxdWlyZXMgYW5vdGhlciB3cml0ZSwgc28gdGhlIHJvb3QKKyAqIGNhdXNlIG9mIHRoZSBwcm9ibGVtIG1heSBuZWVkIHRvIGJlIGZpeGVkIGJlZm9yZSB0aGUgZmxhZyBjYW4gYmUgY2xlYXJlZC4KKyAqLworc3RhdGljIHZvaWQgY2xlYXJfd3JpdGVfZXJyb3Ioc3RydWN0IGlteGRpX2RldiAqaW14ZGkpCit7CisJaW50IGNudDsKKworCWRldl93YXJuKCZpbXhkaS0+cGRldi0+ZGV2LCAiV0FSTklORzogUmVnaXN0ZXIgd3JpdGUgZXJyb3IhXG4iKTsKKworCS8qIGNsZWFyIHRoZSB3cml0ZSBlcnJvciBmbGFnICovCisJX19yYXdfd3JpdGVsKERTUl9XRUYsIGlteGRpLT5pb2FkZHIgKyBEU1IpOworCisJLyogd2FpdCBmb3IgaXQgdG8gdGFrZSBlZmZlY3QgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7CisJCWlmICgoX19yYXdfcmVhZGwoaW14ZGktPmlvYWRkciArIERTUikgJiBEU1JfV0VGKSA9PSAwKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMTApOworCX0KKwlkZXZfZXJyKCZpbXhkaS0+cGRldi0+ZGV2LAorCQkJIkVSUk9SOiBDYW5ub3QgY2xlYXIgd3JpdGUtZXJyb3IgZmxhZyFcbiIpOworfQorCisvKgorICogV3JpdGUgYSBkcnlpY2UgcmVnaXN0ZXIgYW5kIHdhaXQgdW50aWwgaXQgY29tcGxldGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBpbnRlcnJ1cHRzIHRvIGRldGVybWluZSB3aGVuIHRoZQorICogd3JpdGUgaGFzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIGludCBkaV93cml0ZV93YWl0KHN0cnVjdCBpbXhkaV9kZXYgKmlteGRpLCB1MzIgdmFsLCBpbnQgcmVnKQoreworCWludCByZXQ7CisJaW50IHJjID0gMDsKKworCS8qIHNlcmlhbGl6ZSByZWdpc3RlciB3cml0ZXMgKi8KKwltdXRleF9sb2NrKCZpbXhkaS0+d3JpdGVfbXV0ZXgpOworCisJLyogZW5hYmxlIHRoZSB3cml0ZS1jb21wbGV0ZSBpbnRlcnJ1cHQgKi8KKwlkaV9pbnRfZW5hYmxlKGlteGRpLCBESUVSX1dDSUUpOworCisJaW14ZGktPmRzciA9IDA7CisKKwkvKiBkbyB0aGUgcmVnaXN0ZXIgd3JpdGUgKi8KKwlfX3Jhd193cml0ZWwodmFsLCBpbXhkaS0+aW9hZGRyICsgcmVnKTsKKworCS8qIHdhaXQgZm9yIHRoZSB3cml0ZSB0byBmaW5pc2ggKi8KKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpbXhkaS0+d3JpdGVfd2FpdCwKKwkJCWlteGRpLT5kc3IgJiAoRFNSX1dDRiB8IERTUl9XRUYpLCBtc2Vjc190b19qaWZmaWVzKDEpKTsKKwlpZiAocmV0IDwgMCkgeworCQlyYyA9IHJldDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQlkZXZfd2FybigmaW14ZGktPnBkZXYtPmRldiwKKwkJCQkiV3JpdGUtd2FpdCB0aW1lb3V0ICIKKwkJCQkidmFsID0gMHglMDh4IHJlZyA9IDB4JTA4eFxuIiwgdmFsLCByZWcpOworCX0KKworCS8qIGNoZWNrIGZvciB3cml0ZSBlcnJvciAqLworCWlmIChpbXhkaS0+ZHNyICYgRFNSX1dFRikgeworCQljbGVhcl93cml0ZV9lcnJvcihpbXhkaSk7CisJCXJjID0gLUVJTzsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmlteGRpLT53cml0ZV9tdXRleCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiByZWFkIHRoZSBzZWNvbmRzIHBvcnRpb24gb2YgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBkcnlpY2UgdGltZSBjb3VudGVyCisgKi8KK3N0YXRpYyBpbnQgZHJ5aWNlX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBpbXhkaV9kZXYgKmlteGRpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBub3c7CisKKwlub3cgPSBfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRFRDTVIpOworCXJ0Y190aW1lX3RvX3RtKG5vdywgdG0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHNlY29uZHMgcG9ydGlvbiBvZiBkcnlpY2UgdGltZSBjb3VudGVyIGFuZCBjbGVhciB0aGUKKyAqIGZyYWN0aW9uYWwgcGFydC4KKyAqLworc3RhdGljIGludCBkcnlpY2VfcnRjX3NldF9tbXNzKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBzZWNzKQoreworCXN0cnVjdCBpbXhkaV9kZXYgKmlteGRpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJjOworCisJLyogemVybyB0aGUgZnJhY3Rpb25hbCBwYXJ0IGZpcnN0ICovCisJcmMgPSBkaV93cml0ZV93YWl0KGlteGRpLCAwLCBEVENMUik7CisJaWYgKHJjID09IDApCisJCXJjID0gZGlfd3JpdGVfd2FpdChpbXhkaSwgc2VjcywgRFRDTVIpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGRyeWljZV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBpbXhkaV9kZXYgKmlteGRpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoZW5hYmxlZCkKKwkJZGlfaW50X2VuYWJsZShpbXhkaSwgRElFUl9DQUlFKTsKKwllbHNlCisJCWRpX2ludF9kaXNhYmxlKGlteGRpLCBESUVSX0NBSUUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWFkIHRoZSBzZWNvbmRzIHBvcnRpb24gb2YgdGhlIGFsYXJtIHJlZ2lzdGVyLgorICogdGhlIGZyYWN0aW9uYWwgcGFydCBvZiB0aGUgYWxhcm0gcmVnaXN0ZXIgaXMgYWx3YXlzIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgZHJ5aWNlX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBpbXhkaV9kZXYgKmlteGRpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIGRjYW1yOworCisJZGNhbXIgPSBfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRENBTVIpOworCXJ0Y190aW1lX3RvX3RtKGRjYW1yLCAmYWxhcm0tPnRpbWUpOworCisJLyogYWxhcm0gaXMgZW5hYmxlZCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZWQgKi8KKwlhbGFybS0+ZW5hYmxlZCA9IChfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRElFUikgJiBESUVSX0NBSUUpICE9IDA7CisKKwkvKiBkb24ndCBhbGxvdyB0aGUgRFNSIHJlYWQgdG8gbWVzcyB1cCBEU1JfV0NGICovCisJbXV0ZXhfbG9jaygmaW14ZGktPndyaXRlX211dGV4KTsKKworCS8qIGFsYXJtIGlzIHBlbmRpbmcgaWYgdGhlIGFsYXJtIGZsYWcgaXMgc2V0ICovCisJYWxhcm0tPnBlbmRpbmcgPSAoX19yYXdfcmVhZGwoaW14ZGktPmlvYWRkciArIERTUikgJiBEU1JfQ0FGKSAhPSAwOworCisJbXV0ZXhfdW5sb2NrKCZpbXhkaS0+d3JpdGVfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHNlY29uZHMgcG9ydGlvbiBvZiBkcnlpY2UgYWxhcm0gcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBkcnlpY2VfcnRjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKK3sKKwlzdHJ1Y3QgaW14ZGlfZGV2ICppbXhkaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgbm93OworCXVuc2lnbmVkIGxvbmcgYWxhcm1fdGltZTsKKwlpbnQgcmM7CisKKwlyYyA9IHJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJmFsYXJtX3RpbWUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyogZG9uJ3QgYWxsb3cgc2V0dGluZyBhbGFybSBpbiB0aGUgcGFzdCAqLworCW5vdyA9IF9fcmF3X3JlYWRsKGlteGRpLT5pb2FkZHIgKyBEVENNUik7CisJaWYgKGFsYXJtX3RpbWUgPCBub3cpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogd3JpdGUgdGhlIG5ldyBhbGFybSB0aW1lICovCisJcmMgPSBkaV93cml0ZV93YWl0KGlteGRpLCAodTMyKWFsYXJtX3RpbWUsIERDQU1SKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChhbGFybS0+ZW5hYmxlZCkKKwkJZGlfaW50X2VuYWJsZShpbXhkaSwgRElFUl9DQUlFKTsgIC8qIGVuYWJsZSBhbGFybSBpbnRyICovCisJZWxzZQorCQlkaV9pbnRfZGlzYWJsZShpbXhkaSwgRElFUl9DQUlFKTsgLyogZGlzYWJsZSBhbGFybSBpbnRyICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRyeWljZV9ydGNfb3BzID0geworCS5yZWFkX3RpbWUJCT0gZHJ5aWNlX3J0Y19yZWFkX3RpbWUsCisJLnNldF9tbXNzCQk9IGRyeWljZV9ydGNfc2V0X21tc3MsCisJLmFsYXJtX2lycV9lbmFibGUJPSBkcnlpY2VfcnRjX2FsYXJtX2lycV9lbmFibGUsCisJLnJlYWRfYWxhcm0JCT0gZHJ5aWNlX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0JCT0gZHJ5aWNlX3J0Y19zZXRfYWxhcm0sCit9OworCisvKgorICogZHJ5aWNlICJub3JtYWwiIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkcnlpY2Vfbm9ybV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbXhkaV9kZXYgKmlteGRpID0gZGV2X2lkOworCXUzMiBkc3IsIGRpZXI7CisJaXJxcmV0dXJuX3QgcmMgPSBJUlFfTk9ORTsKKworCWRpZXIgPSBfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRElFUik7CisKKwkvKiBoYW5kbGUgd3JpdGUgY29tcGxldGUgYW5kIHdyaXRlIGVycm9yIGNhc2VzICovCisJaWYgKChkaWVyICYgRElFUl9XQ0lFKSkgeworCQkvKklmIHRoZSB3cml0ZSB3YWl0IHF1ZXVlIGlzIGVtcHR5IHRoZW4gdGhlcmUgaXMgbm8gcGVuZGluZworCQkgIG9wZXJhdGlvbnMuIEl0IG1lYW5zIHRoZSBpbnRlcnJ1cHQgaXMgZm9yIERyeUljZSAtU2VjdXJpdHkuCisJCSAgSVJRIG11c3QgYmUgcmV0dXJuZWQgYXMgbm9uZS4qLworCQlpZiAobGlzdF9lbXB0eV9jYXJlZnVsKCZpbXhkaS0+d3JpdGVfd2FpdC50YXNrX2xpc3QpKQorCQkJcmV0dXJuIHJjOworCisJCS8qIERTUl9XQ0YgY2xlYXJzIGl0c2VsZiBvbiBEU1IgcmVhZCAqLworCQlkc3IgPSBfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRFNSKTsKKwkJaWYgKChkc3IgJiAoRFNSX1dDRiB8IERTUl9XRUYpKSkgeworCQkJLyogbWFzayB0aGUgaW50ZXJydXB0ICovCisJCQlkaV9pbnRfZGlzYWJsZShpbXhkaSwgRElFUl9XQ0lFKTsKKworCQkJLyogc2F2ZSB0aGUgZHNyIHZhbHVlIGZvciB0aGUgd2FpdCBxdWV1ZSAqLworCQkJaW14ZGktPmRzciB8PSBkc3I7CisKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW14ZGktPndyaXRlX3dhaXQpOworCQkJcmMgPSBJUlFfSEFORExFRDsKKwkJfQorCX0KKworCS8qIGhhbmRsZSB0aGUgYWxhcm0gY2FzZSAqLworCWlmICgoZGllciAmIERJRVJfQ0FJRSkpIHsKKwkJLyogRFNSX1dDRiBjbGVhcnMgaXRzZWxmIG9uIERTUiByZWFkICovCisJCWRzciA9IF9fcmF3X3JlYWRsKGlteGRpLT5pb2FkZHIgKyBEU1IpOworCQlpZiAoZHNyICYgRFNSX0NBRikgeworCQkJLyogbWFzayB0aGUgaW50ZXJydXB0ICovCisJCQlkaV9pbnRfZGlzYWJsZShpbXhkaSwgRElFUl9DQUlFKTsKKworCQkJLyogZmluaXNoIGFsYXJtIGluIHVzZXIgY29udGV4dCAqLworCQkJc2NoZWR1bGVfd29yaygmaW14ZGktPndvcmspOworCQkJcmMgPSBJUlFfSEFORExFRDsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBwb3N0IHRoZSBhbGFybSBldmVudCBmcm9tIHVzZXIgY29udGV4dCBzbyBpdCBjYW4gc2xlZXAKKyAqIG9uIHRoZSB3cml0ZSBjb21wbGV0aW9uLgorICovCitzdGF0aWMgdm9pZCBkcnlpY2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlteGRpX2RldiAqaW14ZGkgPSBjb250YWluZXJfb2Yod29yaywKKwkJCXN0cnVjdCBpbXhkaV9kZXYsIHdvcmspOworCisJLyogZGlzbWlzcyB0aGUgaW50ZXJydXB0IChpZ25vcmUgZXJyb3IpICovCisJZGlfd3JpdGVfd2FpdChpbXhkaSwgRFNSX0NBRiwgRFNSKTsKKworCS8qIHBhc3MgdGhlIGFsYXJtIGV2ZW50IHRvIHRoZSBydGMgZnJhbWV3b3JrLiAqLworCXJ0Y191cGRhdGVfaXJxKGlteGRpLT5ydGMsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKK30KKworLyoKKyAqIHByb2JlIGZvciBkcnlpY2UgcnRjIGRldmljZQorICovCitzdGF0aWMgaW50IGRyeWljZV9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgaW14ZGlfZGV2ICppbXhkaTsKKwlpbnQgcmM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlteGRpID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaW14ZGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlteGRpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlteGRpLT5wZGV2ID0gcGRldjsKKworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCXBkZXYtPm5hbWUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaW14ZGktPmlvYWRkciA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoaW14ZGktPmlvYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlteGRpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpbXhkaS0+aXJxIDwgMCkKKwkJcmV0dXJuIGlteGRpLT5pcnE7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbXhkaS0+d3JpdGVfd2FpdCk7CisKKwlJTklUX1dPUksoJmlteGRpLT53b3JrLCBkcnlpY2Vfd29yayk7CisKKwltdXRleF9pbml0KCZpbXhkaS0+d3JpdGVfbXV0ZXgpOworCisJaW14ZGktPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihpbXhkaS0+Y2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW14ZGktPmNsayk7CisJY2xrX2VuYWJsZShpbXhkaS0+Y2xrKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBkcnlpY2UgaGFyZHdhcmUKKwkgKi8KKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKwlfX3Jhd193cml0ZWwoMCwgaW14ZGktPmlvYWRkciArIERJRVIpOworCisJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlteGRpLT5pcnEsIGRyeWljZV9ub3JtX2lycSwKKwkJCUlSUUZfU0hBUkVELCBwZGV2LT5uYW1lLCBpbXhkaSk7CisJaWYgKHJjKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJpbnRlcnJ1cHQgbm90IGF2YWlsYWJsZS5cbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBwdXQgZHJ5aWNlIGludG8gdmFsaWQgc3RhdGUgKi8KKwlpZiAoX19yYXdfcmVhZGwoaW14ZGktPmlvYWRkciArIERTUikgJiBEU1JfTlZGKSB7CisJCXJjID0gZGlfd3JpdGVfd2FpdChpbXhkaSwgRFNSX05WRiB8IERTUl9TVkYsIERTUik7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgYWxhcm0gKi8KKwlyYyA9IGRpX3dyaXRlX3dhaXQoaW14ZGksIERDQU1SX1VOU0VULCBEQ0FNUik7CisJaWYgKHJjKQorCQlnb3RvIGVycjsKKwlyYyA9IGRpX3dyaXRlX3dhaXQoaW14ZGksIDAsIERDQUxSKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyOworCisJLyogY2xlYXIgYWxhcm0gZmxhZyAqLworCWlmIChfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRFNSKSAmIERTUl9DQUYpIHsKKwkJcmMgPSBkaV93cml0ZV93YWl0KGlteGRpLCBEU1JfQ0FGLCBEU1IpOworCQlpZiAocmMpCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiB0aGUgdGltZXIgd29uJ3QgY291bnQgaWYgaXQgaGFzIG5ldmVyIGJlZW4gd3JpdHRlbiB0byAqLworCWlmIChfX3Jhd19yZWFkbChpbXhkaS0+aW9hZGRyICsgRFRDTVIpID09IDApIHsKKwkJcmMgPSBkaV93cml0ZV93YWl0KGlteGRpLCAwLCBEVENNUik7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyOworCX0KKworCS8qIHN0YXJ0IGtlZXBpbmcgdGltZSAqLworCWlmICghKF9fcmF3X3JlYWRsKGlteGRpLT5pb2FkZHIgKyBEQ1IpICYgRENSX1RDRSkpIHsKKwkJcmMgPSBkaV93cml0ZV93YWl0KGlteGRpLAorCQkJCV9fcmF3X3JlYWRsKGlteGRpLT5pb2FkZHIgKyBEQ1IpIHwgRENSX1RDRSwKKwkJCQlEQ1IpOworCQlpZiAocmMpCisJCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXhkaSk7CisJaW14ZGktPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwKKwkJCQkgICZkcnlpY2VfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIoaW14ZGktPnJ0YykpIHsKKwkJcmMgPSBQVFJfRVJSKGlteGRpLT5ydGMpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWNsa19kaXNhYmxlKGlteGRpLT5jbGspOworCWNsa19wdXQoaW14ZGktPmNsayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRyeWljZV9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlteGRpX2RldiAqaW14ZGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZsdXNoX3dvcmsoJmlteGRpLT53b3JrKTsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKwlfX3Jhd193cml0ZWwoMCwgaW14ZGktPmlvYWRkciArIERJRVIpOworCisJcnRjX2RldmljZV91bnJlZ2lzdGVyKGlteGRpLT5ydGMpOworCisJY2xrX2Rpc2FibGUoaW14ZGktPmNsayk7CisJY2xrX3B1dChpbXhkaS0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkcnlpY2VfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJpbXhkaV9ydGMiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZHJ5aWNlX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJ5aWNlX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmZHJ5aWNlX3J0Y19kcml2ZXIsIGRyeWljZV9ydGNfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJ5aWNlX3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRyeWljZV9ydGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHJ5aWNlX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KGRyeWljZV9ydGNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIik7CitNT0RVTEVfQVVUSE9SKCJCYXJ1Y2ggU2lhY2ggPGJhcnVjaEB0a29zLmNvLmlsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJTVggRHJ5SWNlIFJlYWx0aW1lIENsb2NrIERyaXZlciAoUlRDKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDIyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwMjIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGJjNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDIyLmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBBbiBJMkMgZHJpdmVyIGZvciB0aGUgSW50ZXJzaWwgSVNMIDEyMDIyCisgKgorICogQXV0aG9yOiBSb21hbiBGaWV0emUgPHJvbWFuLmZpZXR6ZUB0ZWxlbW90aXZlLmRlPgorICoKKyAqIEJhc2VkIG9uIHRoZSBQaGlsaXBzIFBDRjg1NjMgUlRDCisgKiBieSBBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisKKy8qIElTTCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIElTTDEyMDIyX1JFR19TQwkJMHgwMAorI2RlZmluZSBJU0wxMjAyMl9SRUdfTU4JCTB4MDEKKyNkZWZpbmUgSVNMMTIwMjJfUkVHX0hSCQkweDAyCisjZGVmaW5lIElTTDEyMDIyX1JFR19EVAkJMHgwMworI2RlZmluZSBJU0wxMjAyMl9SRUdfTU8JCTB4MDQKKyNkZWZpbmUgSVNMMTIwMjJfUkVHX1lSCQkweDA1CisjZGVmaW5lIElTTDEyMDIyX1JFR19EVwkJMHgwNgorCisjZGVmaW5lIElTTDEyMDIyX1JFR19TUgkJMHgwNworI2RlZmluZSBJU0wxMjAyMl9SRUdfSU5UCTB4MDgKKworLyogSVNMIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgSVNMMTIwMjJfSFJfTUlMCQkoMSA8PCA3KQkvKiBtaWxpdGFyeSBvciAyNCBob3VyIHRpbWUgKi8KKworI2RlZmluZSBJU0wxMjAyMl9TUl9MQkFUODUJKDEgPDwgMikKKyNkZWZpbmUgSVNMMTIwMjJfU1JfTEJBVDc1CSgxIDw8IDEpCisKKyNkZWZpbmUgSVNMMTIwMjJfSU5UX1dSVEMJKDEgPDwgNikKKworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNsMTIwMjJfZHJpdmVyOworCitzdHJ1Y3QgaXNsMTIwMjIgeworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisKKwlib29sIHdyaXRlX2VuYWJsZWQ7CS8qIHRydWUgaWYgd3JpdGUgZW5hYmxlIGlzIHNldCAqLworfTsKKworCitzdGF0aWMgaW50IGlzbDEyMDIyX3JlYWRfcmVncyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1aW50OF90IHJlZywKKwkJCSAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBuKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmxlbgk9IDEsCisJCQkuYnVmCT0gZGF0YQorCQl9LAkJLyogc2V0dXAgcmVhZCBwdHIgKi8KKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5sZW4JPSBuLAorCQkJLmJ1Zgk9IGRhdGEKKwkJfQorCX07CisKKwlpbnQgcmV0OworCisJZGF0YVswXSA9IHJlZzsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlpZiAocmV0ICE9IEFSUkFZX1NJWkUobXNncykpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcmVhZCBlcnJvciwgcmV0PSVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaXNsMTIwMjJfd3JpdGVfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICB1aW50OF90IHJlZywgdWludDhfdCB2YWwpCit7CisJdWludDhfdCBkYXRhWzJdID0geyByZWcsIHZhbCB9OworCWludCBlcnI7CisKKwllcnIgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBzaXplb2YoZGF0YSkpOworCWlmIChlcnIgIT0gc2l6ZW9mKGRhdGEpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIiVzOiBlcnI9JWQgYWRkcj0lMDJ4LCBkYXRhPSUwMnhcbiIsCisJCQlfX2Z1bmNfXywgZXJyLCBkYXRhWzBdLCBkYXRhWzFdKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIEluIHRoZSByb3V0aW5lcyB0aGF0IGRlYWwgZGlyZWN0bHkgd2l0aCB0aGUgaXNsMTIwMjIgaGFyZHdhcmUsIHdlIHVzZQorICogcnRjX3RpbWUgLS0gbW9udGggMC0xMSwgaG91ciAwLTIzLCB5ciA9IGNhbGVuZGFyIHllYXItZXBvY2guCisgKi8KK3N0YXRpYyBpbnQgaXNsMTIwMjJfZ2V0X2RhdGV0aW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJdWludDhfdCBidWZbSVNMMTIwMjJfUkVHX0lOVCArIDFdOworCWludCByZXQ7CisKKwlyZXQgPSBpc2wxMjAyMl9yZWFkX3JlZ3MoY2xpZW50LCBJU0wxMjAyMl9SRUdfU0MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYnVmW0lTTDEyMDIyX1JFR19TUl0gJiAoSVNMMTIwMjJfU1JfTEJBVDg1IHwgSVNMMTIwMjJfU1JfTEJBVDc1KSkgeworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkgInZvbHRhZ2UgZHJvcHBlZCBiZWxvdyAldSUlLCAiCisJCQkgImRhdGUgYW5kIHRpbWUgaXMgbm90IHJlbGlhYmxlLlxuIiwKKwkJCSBidWZbSVNMMTIwMjJfUkVHX1NSXSAmIElTTDEyMDIyX1NSX0xCQVQ4NSA/IDg1IDogNzUpOworCX0KKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LAorCQkiJXM6IHJhdyBkYXRhIGlzIHNlYz0lMDJ4LCBtaW49JTAyeCwgaHI9JTAyeCwgIgorCQkibWRheT0lMDJ4LCBtb249JTAyeCwgeWVhcj0lMDJ4LCB3ZGF5PSUwMngsICIKKwkJInNyPSUwMngsIGludD0lMDJ4IiwKKwkJX19mdW5jX18sCisJCWJ1ZltJU0wxMjAyMl9SRUdfU0NdLAorCQlidWZbSVNMMTIwMjJfUkVHX01OXSwKKwkJYnVmW0lTTDEyMDIyX1JFR19IUl0sCisJCWJ1ZltJU0wxMjAyMl9SRUdfRFRdLAorCQlidWZbSVNMMTIwMjJfUkVHX01PXSwKKwkJYnVmW0lTTDEyMDIyX1JFR19ZUl0sCisJCWJ1ZltJU0wxMjAyMl9SRUdfRFddLAorCQlidWZbSVNMMTIwMjJfUkVHX1NSXSwKKwkJYnVmW0lTTDEyMDIyX1JFR19JTlRdKTsKKworCXRtLT50bV9zZWMgPSBiY2QyYmluKGJ1ZltJU0wxMjAyMl9SRUdfU0NdICYgMHg3Rik7CisJdG0tPnRtX21pbiA9IGJjZDJiaW4oYnVmW0lTTDEyMDIyX1JFR19NTl0gJiAweDdGKTsKKwl0bS0+dG1faG91ciA9IGJjZDJiaW4oYnVmW0lTTDEyMDIyX1JFR19IUl0gJiAweDNGKTsKKwl0bS0+dG1fbWRheSA9IGJjZDJiaW4oYnVmW0lTTDEyMDIyX1JFR19EVF0gJiAweDNGKTsKKwl0bS0+dG1fd2RheSA9IGJ1ZltJU0wxMjAyMl9SRUdfRFddICYgMHgwNzsKKwl0bS0+dG1fbW9uID0gYmNkMmJpbihidWZbSVNMMTIwMjJfUkVHX01PXSAmIDB4MUYpIC0gMTsKKwl0bS0+dG1feWVhciA9IGJjZDJiaW4oYnVmW0lTTDEyMDIyX1JFR19ZUl0pICsgMTAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKKwkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKKwkJX19mdW5jX18sCisJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAorCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKKworCS8qIFRoZSBjbG9jayBjYW4gZ2l2ZSBvdXQgaW52YWxpZCBkYXRldGltZSwgYnV0IHdlIGNhbm5vdCByZXR1cm4KKwkgKiAtRUlOVkFMIG90aGVyd2lzZSBod2Nsb2NrIHdpbGwgcmVmdXNlIHRvIHNldCB0aGUgdGltZSBvbiBib290dXAuICovCisJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKQorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInJldHJpZXZlZCBkYXRlIGFuZCB0aW1lIGlzIGludmFsaWQuXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzbDEyMDIyX3NldF9kYXRldGltZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBpc2wxMjAyMiAqaXNsMTIwMjIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzaXplX3QgaTsKKwlpbnQgcmV0OworCXVpbnQ4X3QgYnVmW0lTTDEyMDIyX1JFR19EVyArIDFdOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlczogc2Vjcz0lZCwgbWlucz0lZCwgaG91cnM9JWQsICIKKwkJIm1kYXk9JWQsIG1vbj0lZCwgeWVhcj0lZCwgd2RheT0lZFxuIiwKKwkJX19mdW5jX18sCisJCXRtLT50bV9zZWMsIHRtLT50bV9taW4sIHRtLT50bV9ob3VyLAorCQl0bS0+dG1fbWRheSwgdG0tPnRtX21vbiwgdG0tPnRtX3llYXIsIHRtLT50bV93ZGF5KTsKKworCWlmICghaXNsMTIwMjItPndyaXRlX2VuYWJsZWQpIHsKKworCQlyZXQgPSBpc2wxMjAyMl9yZWFkX3JlZ3MoY2xpZW50LCBJU0wxMjAyMl9SRUdfSU5ULCBidWYsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBDaGVjayBpZiBXUlRDICh3cml0ZSBydGMgZW5hYmxlKSBpcyBzZXQgZmFjdG9yeSBkZWZhdWx0IGlzCisJCSAqIDAgKG5vdCBzZXQpICovCisJCWlmICghKGJ1ZlswXSAmIElTTDEyMDIyX0lOVF9XUlRDKSkgeworCQkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LAorCQkJCSAiaW5pdCB3cml0ZSBlbmFibGUgYW5kIDI0IGhvdXIgZm9ybWF0XG4iKTsKKworCQkJLyogU2V0IHRoZSB3cml0ZSBlbmFibGUgYml0LiAqLworCQkJcmV0ID0gaXNsMTIwMjJfd3JpdGVfcmVnKGNsaWVudCwKKwkJCQkJCSBJU0wxMjAyMl9SRUdfSU5ULAorCQkJCQkJIGJ1ZlswXSB8IElTTDEyMDIyX0lOVF9XUlRDKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJLyogV3JpdGUgdG8gYW55IFJUQyByZWdpc3RlciB0byBzdGFydCBSVEMsIHdlIHVzZSB0aGUKKwkJCSAqIEhSIHJlZ2lzdGVyLCBzZXR0aW5nIHRoZSBNSUwgYml0IHRvIHVzZSB0aGUgMjQgaG91cgorCQkJICogZm9ybWF0LiAqLworCQkJcmV0ID0gaXNsMTIwMjJfcmVhZF9yZWdzKGNsaWVudCwgSVNMMTIwMjJfUkVHX0hSLAorCQkJCQkJIGJ1ZiwgMSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisKKwkJCXJldCA9IGlzbDEyMDIyX3dyaXRlX3JlZyhjbGllbnQsCisJCQkJCQkgSVNMMTIwMjJfUkVHX0hSLAorCQkJCQkJIGJ1ZlswXSB8IElTTDEyMDIyX0hSX01JTCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlpc2wxMjAyMi0+d3JpdGVfZW5hYmxlZCA9IDE7CisJfQorCisJLyogaG91cnMsIG1pbnV0ZXMgYW5kIHNlY29uZHMgKi8KKwlidWZbSVNMMTIwMjJfUkVHX1NDXSA9IGJpbjJiY2QodG0tPnRtX3NlYyk7CisJYnVmW0lTTDEyMDIyX1JFR19NTl0gPSBiaW4yYmNkKHRtLT50bV9taW4pOworCWJ1ZltJU0wxMjAyMl9SRUdfSFJdID0gYmluMmJjZCh0bS0+dG1faG91cikgfCBJU0wxMjAyMl9IUl9NSUw7CisKKwlidWZbSVNMMTIwMjJfUkVHX0RUXSA9IGJpbjJiY2QodG0tPnRtX21kYXkpOworCisJLyogbW9udGgsIDEgLSAxMiAqLworCWJ1ZltJU0wxMjAyMl9SRUdfTU9dID0gYmluMmJjZCh0bS0+dG1fbW9uICsgMSk7CisKKwkvKiB5ZWFyIGFuZCBjZW50dXJ5ICovCisJYnVmW0lTTDEyMDIyX1JFR19ZUl0gPSBiaW4yYmNkKHRtLT50bV95ZWFyICUgMTAwKTsKKworCWJ1ZltJU0wxMjAyMl9SRUdfRFddID0gdG0tPnRtX3dkYXkgJiAweDA3OworCisJLyogd3JpdGUgcmVnaXN0ZXIncyBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVmKTsgaSsrKSB7CisJCXJldCA9IGlzbDEyMDIyX3dyaXRlX3JlZyhjbGllbnQsIElTTDEyMDIyX1JFR19TQyArIGksCisJCQkJCSBidWZbSVNMMTIwMjJfUkVHX1NDICsgaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FSU87CisJfTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzbDEyMDIyX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXJldHVybiBpc2wxMjAyMl9nZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7Cit9CisKK3N0YXRpYyBpbnQgaXNsMTIwMjJfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwlyZXR1cm4gaXNsMTIwMjJfc2V0X2RhdGV0aW1lKHRvX2kyY19jbGllbnQoZGV2KSwgdG0pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgaXNsMTIwMjJfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lCT0gaXNsMTIwMjJfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBpc2wxMjAyMl9ydGNfc2V0X3RpbWUsCit9OworCitzdGF0aWMgaW50IGlzbDEyMDIyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaXNsMTIwMjIgKmlzbDEyMDIyOworCisJaW50IHJldCA9IDA7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpc2wxMjAyMiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2wxMjAyMiksIEdGUF9LRVJORUwpOworCWlmICghaXNsMTIwMjIpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJjaGlwIGZvdW5kLCBkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgaXNsMTIwMjIpOworCisJaXNsMTIwMjItPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoaXNsMTIwMjJfZHJpdmVyLmRyaXZlci5uYW1lLAorCQkJCQkgICAgJmNsaWVudC0+ZGV2LAorCQkJCQkgICAgJmlzbDEyMDIyX3J0Y19vcHMsCisJCQkJCSAgICBUSElTX01PRFVMRSk7CisKKwlpZiAoSVNfRVJSKGlzbDEyMDIyLT5ydGMpKSB7CisJCXJldCA9IFBUUl9FUlIoaXNsMTIwMjItPnJ0Yyk7CisJCWdvdG8gZXhpdF9rZnJlZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9rZnJlZToKKwlrZnJlZShpc2wxMjAyMik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzbDEyMDIyX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpc2wxMjAyMiAqaXNsMTIwMjIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihpc2wxMjAyMi0+cnRjKTsKKwlrZnJlZShpc2wxMjAyMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGlzbDEyMDIyX2lkW10gPSB7CisJeyAiaXNsMTIwMjIiLCAwIH0sCisJeyAicnRjODU2NCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaXNsMTIwMjJfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNsMTIwMjJfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJydGMtaXNsMTIwMjIiLAorCX0sCisJLnByb2JlCQk9IGlzbDEyMDIyX3Byb2JlLAorCS5yZW1vdmUJCT0gaXNsMTIwMjJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IGlzbDEyMDIyX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXNsMTIwMjJfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaXNsMTIwMjJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlzbDEyMDIyX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaXNsMTIwMjJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaXNsMTIwMjJfaW5pdCk7Cittb2R1bGVfZXhpdChpc2wxMjAyMl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigicm9tYW4uZmlldHplQHRlbGVtb3RpdmUuZGUiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSVNMIDEyMDIyIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA2ZGM0ZTYyLi42NjM3N2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogCS8qIGFzc3VtZSAyMFlZIG5vdCAxOVlZLCBhbmQgaWdub3JlIHRoZSBDZW50dXJ5IEJpdCAqLwogCXRtLT50bV95ZWFyID0gYmNkMmJpbihidWZbTTQxVDgwX1JFR19ZRUFSXSkgKyAxMDA7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7CiB9CiAKIC8qIFNldHMgdGhlIGdpdmVuIGRhdGUgYW5kIHRpbWUgdG8gdGhlIHJlYWwgdGltZSBjbG9jay4gKi8KQEAgLTM2NCw3ICszNjQsNyBAQAogCXQtPnRpbWUudG1faXNkc3QgPSAtMTsKIAl0LT5lbmFibGVkID0gISEocmVnW000MVQ4MF9SRUdfQUxBUk1fTU9OXSAmIE00MVQ4MF9BTE1PTl9BRkUpOwogCXQtPnBlbmRpbmcgPSAhIShyZWdbTTQxVDgwX1JFR19GTEFHU10gJiBNNDFUODBfRkxBR1NfQUYpOwotCXJldHVybiAwOworCXJldHVybiBydGNfdmFsaWRfdG0odCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDF0ODBfcnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYwppbmRleCBiZTgzNTlmLi5hOTlhMGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlkZXZfZGJnKGRldiwgIlJUQyByZWFkIHRpbWUgJTA0ZC0lMDJkLSUwMmQgJTAyZC8lMDJkLyUwMmRcbiIsCiAJCXRtLT50bV95ZWFyICsgMTkwMCwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXksCiAJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKIH0KIAogc3RhdGljIGludCBtNDh0NTlfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKQEAgLTE5Niw3ICsxOTYsNyBAQAogCWRldl9kYmcoZGV2LCAiUlRDIHJlYWQgYWxhcm0gdGltZSAlMDRkLSUwMmQtJTAyZCAlMDJkLyUwMmQvJTAyZFxuIiwKIAkJdG0tPnRtX3llYXIgKyAxOTAwLCB0bS0+dG1fbW9uLCB0bS0+dG1fbWRheSwKIAkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMpOwotCXJldHVybiAwOworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCiAvKgpAQCAtNTA2LDcgKzUwNiw2IEBACiAJCWZyZWVfaXJxKG00OHQ1OS0+aXJxLCAmcGRldi0+ZGV2KTsKIAlpZiAobTQ4dDU5LT5pb2FkZHIpCiAJCWlvdW5tYXAobTQ4dDU5LT5pb2FkZHIpOwotCWlmIChtNDh0NTkpCiAJCWtmcmVlKG00OHQ1OSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYwppbmRleCA3YzA0NWNmLi5mOTgxMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJCWlmIChvcHMtPnJlYWRieXRlKE00OFQ4Nl9SRUdfSE9VUikgJiAweDgwKQogCQkJdG0tPnRtX2hvdXIgKz0gMTI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKIH0KIAogc3RhdGljIGludCBtNDh0ODZfcnRjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMC5jCmluZGV4IGE0ZjY2NjUuLjQ4NjE0MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDY5MDAuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJCSAgICAgIGJjZDJiaW4ocmVnc1tNQVg2OTAwX1JFR19DRU5UVVJZXSkgKiAxMDAgLSAxOTAwOwogCXRtLT50bV93ZGF5ID0gYmNkMmJpbihyZWdzW01BWDY5MDBfUkVHX0RXXSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKIH0KIAogc3RhdGljIGludCBtYXg2OTAwX2kyY19jbGVhcl93cml0ZV9wcm90ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKaW5kZXggMjVlYzkyMS4uMGIwNmMxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1teGMuYwpAQCAtODMsMTIgKzgzLDYgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKLQl1bnNpZ25lZCBpbnQgaXJxZW47Ci0JaW50IGFscm1fc2VjOwotCWludCBhbHJtX21pbjsKLQlpbnQgYWxybV9ob3VyOwotCWludCBhbHJtX21kYXk7Ci0Jc3RydWN0IHRpbWVzcGVjIG14Y19ydGNfZGVsdGE7CiAJc3RydWN0IHJ0Y190aW1lIGdfcnRjX2FsYXJtOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW51YzkwMC5jIGIvZHJpdmVycy9ydGMvcnRjLW51YzkwMC5jCmluZGV4IGEzNTFiZDUuLjYyZGU2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1udWM5MDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbnVjOTAwLmMKQEAgLTg1LDI1ICs4NSwyNCBAQAogCiBzdGF0aWMgaW50ICpjaGVja19ydGNfYWNjZXNzX2VuYWJsZShzdHJ1Y3QgbnVjOTAwX3J0YyAqbnVjOTAwX3J0YykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDB4MTAwMDsKIAlfX3Jhd193cml0ZWwoSU5JUlJFU0VULCBudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19JTklSKTsKIAogCW1kZWxheSgxMCk7CiAKIAlfX3Jhd193cml0ZWwoQUVSUE9XRVJPTiwgbnVjOTAwX3J0Yy0+cnRjX3JlZyArIFJFR19SVENfQUVSKTsKIAotCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJaWYgKF9fcmF3X3JlYWRsKG51YzkwMF9ydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX0FFUikgJiBBRVJSV0VOQikKLQkJCXJldHVybiAwOwotCX0KKwl3aGlsZSAoIShfX3Jhd19yZWFkbChudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19BRVIpICYgQUVSUldFTkIpCisJCQkJCQkJCSYmIHRpbWVvdXQtLSkKKwkJbWRlbGF5KDEpOwogCi0JaWYgKChfX3Jhd19yZWFkbChudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19BRVIpICYgQUVSUldFTkIpID09IDB4MCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJaWYgKCF0aW1lb3V0KQorCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwogCi0JcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbnVjOTAwX3J0Y19iY2QyYmluKHVuc2lnbmVkIGludCB0aW1lcmVnLAorc3RhdGljIGludCBudWM5MDBfcnRjX2JjZDJiaW4odW5zaWduZWQgaW50IHRpbWVyZWcsCiAJCQkJdW5zaWduZWQgaW50IGNhbHJlZywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAl0bS0+dG1fbWRheQk9IGJjZDJiaW4oY2FscmVnID4+IDApOwpAQCAtMTE0LDE1ICsxMTMsMjEgQEAKIAl0bS0+dG1fbWluCT0gYmNkMmJpbih0aW1lcmVnID4+IDgpOwogCXRtLT50bV9ob3VyCT0gYmNkMmJpbih0aW1lcmVnID4+IDE2KTsKIAotCXJ0Y192YWxpZF90bSh0bSk7CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7CiB9CiAKLXN0YXRpYyB2b2lkIG51YzkwMF9ydGNfYmluMmJjZChzdHJ1Y3QgcnRjX3RpbWUgKnNldHRtLAorc3RhdGljIHZvaWQgbnVjOTAwX3J0Y19iaW4yYmNkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpzZXR0bSwKIAkJCQkJCXN0cnVjdCBudWM5MDBfYmNkX3RpbWUgKmdldHRtKQogewogCWdldHRtLT5iY2RfbWRheSA9IGJpbjJiY2Qoc2V0dG0tPnRtX21kYXkpIDw8IDA7CiAJZ2V0dG0tPmJjZF9tb24gID0gYmluMmJjZChzZXR0bS0+dG1fbW9uKSA8PCA4OwotCWdldHRtLT5iY2RfeWVhciA9IGJpbjJiY2Qoc2V0dG0tPnRtX3llYXIgLSAxMDApIDw8IDE2OworCisJaWYgKHNldHRtLT50bV95ZWFyIDwgMTAwKSB7CisJCWRldl93YXJuKGRldiwgIlRoZSB5ZWFyIHdpbGwgYmUgYmV0d2VlbiAxOTcwLTE5OTksIHJpZ2h0P1xuIik7CisJCWdldHRtLT5iY2RfeWVhciA9IGJpbjJiY2Qoc2V0dG0tPnRtX3llYXIpIDw8IDE2OworCX0gZWxzZSB7CisJCWdldHRtLT5iY2RfeWVhciA9IGJpbjJiY2Qoc2V0dG0tPnRtX3llYXIgLSAxMDApIDw8IDE2OworCX0KIAogCWdldHRtLT5iY2Rfc2VjICA9IGJpbjJiY2Qoc2V0dG0tPnRtX3NlYykgPDwgMDsKIAlnZXR0bS0+YmNkX21pbiAgPSBiaW4yYmNkKHNldHRtLT50bV9taW4pIDw8IDg7CkBAIC0xNjUsOSArMTcwLDcgQEAKIAl0aW1ldmFsID0gX19yYXdfcmVhZGwocnRjLT5ydGNfcmVnICsgUkVHX1JUQ19UTFIpOwogCWNscnZhbAk9IF9fcmF3X3JlYWRsKHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfQ0xSKTsKIAotCW51YzkwMF9ydGNfYmNkMmJpbih0aW1ldmFsLCBjbHJ2YWwsIHRtKTsKLQotCXJldHVybiAwOworCXJldHVybiBudWM5MDBfcnRjX2JjZDJiaW4odGltZXZhbCwgY2xydmFsLCB0bSk7CiB9CiAKIHN0YXRpYyBpbnQgbnVjOTAwX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0xNzcsNyArMTgwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgKmVycjsKIAotCW51YzkwMF9ydGNfYmluMmJjZCh0bSwgJmdldHRtKTsKKwludWM5MDBfcnRjX2JpbjJiY2QoZGV2LCB0bSwgJmdldHRtKTsKIAogCWVyciA9IGNoZWNrX3J0Y19hY2Nlc3NfZW5hYmxlKHJ0Yyk7CiAJaWYgKElTX0VSUihlcnIpKQpAQCAtMjAwLDkgKzIwMyw3IEBACiAJdGltZXZhbCA9IF9fcmF3X3JlYWRsKHJ0Yy0+cnRjX3JlZyArIFJFR19SVENfVEFSKTsKIAljYXJ2YWwJPSBfX3Jhd19yZWFkbChydGMtPnJ0Y19yZWcgKyBSRUdfUlRDX0NBUik7CiAKLQludWM5MDBfcnRjX2JjZDJiaW4odGltZXZhbCwgY2FydmFsLCAmYWxybS0+dGltZSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbnVjOTAwX3J0Y19iY2QyYmluKHRpbWV2YWwsIGNhcnZhbCwgJmFscm0tPnRpbWUpOwogfQogCiBzdGF0aWMgaW50IG51YzkwMF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCkBAIC0yMTIsNyArMjEzLDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgKmVycjsKIAotCW51YzkwMF9ydGNfYmluMmJjZCgmYWxybS0+dGltZSwgJnRtKTsKKwludWM5MDBfcnRjX2JpbjJiY2QoZGV2LCAmYWxybS0+dGltZSwgJnRtKTsKIAogCWVyciA9IGNoZWNrX3J0Y19hY2Nlc3NfZW5hYmxlKHJ0Yyk7CiAJaWYgKElTX0VSUihlcnIpKQpAQCAtMjY4LDI5ICsyNjksMzAgQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKLQludWM5MDBfcnRjLT5pcnFfbnVtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAocmVxdWVzdF9pcnEobnVjOTAwX3J0Yy0+aXJxX251bSwgbnVjOTAwX3J0Y19pbnRlcnJ1cHQsCi0JCQkJSVJRRl9ESVNBQkxFRCwgIm51YzkwMHJ0YyIsIG51YzkwMF9ydGMpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5VQzkwMCBSVEMgcmVxdWVzdCBpcnEgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWwzOwotCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBudWM5MDBfcnRjKTsKIAogCW51YzkwMF9ydGMtPnJ0Y2RldiA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwgJnBkZXYtPmRldiwKIAkJCQkJCSZudWM5MDBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIobnVjOTAwX3J0Yy0+cnRjZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJydGMgZGV2aWNlIHJlZ2lzdGVyIGZhaWxkXG4iKTsKIAkJZXJyID0gUFRSX0VSUihudWM5MDBfcnRjLT5ydGNkZXYpOwotCQlnb3RvIGZhaWw0OworCQlnb3RvIGZhaWwzOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG51YzkwMF9ydGMpOwogCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChudWM5MDBfcnRjLT5ydGNfcmVnICsgUkVHX1JUQ19UU1NSKSB8IE1PREUyNCwKIAkJCQkJbnVjOTAwX3J0Yy0+cnRjX3JlZyArIFJFR19SVENfVFNTUik7CiAKKwludWM5MDBfcnRjLT5pcnFfbnVtID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmVxdWVzdF9pcnEobnVjOTAwX3J0Yy0+aXJxX251bSwgbnVjOTAwX3J0Y19pbnRlcnJ1cHQsCisJCQkJSVJRRl9ESVNBQkxFRCwgIm51YzkwMHJ0YyIsIG51YzkwMF9ydGMpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5VQzkwMCBSVEMgcmVxdWVzdCBpcnEgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZhaWw0OworCX0KKwogCXJldHVybiAwOwogCi1mYWlsNDoJZnJlZV9pcnEobnVjOTAwX3J0Yy0+aXJxX251bSwgbnVjOTAwX3J0Yyk7CitmYWlsNDoJcnRjX2RldmljZV91bnJlZ2lzdGVyKG51YzkwMF9ydGMtPnJ0Y2Rldik7CiBmYWlsMzoJaW91bm1hcChudWM5MDBfcnRjLT5ydGNfcmVnKTsKIGZhaWwyOglyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWwxOglrZnJlZShudWM5MDBfcnRjKTsKQEAgLTMwMiw4ICszMDQsOCBAQAogCXN0cnVjdCBudWM5MDBfcnRjICpudWM5MDBfcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQlydGNfZGV2aWNlX3VucmVnaXN0ZXIobnVjOTAwX3J0Yy0+cnRjZGV2KTsKIAlmcmVlX2lycShudWM5MDBfcnRjLT5pcnFfbnVtLCBudWM5MDBfcnRjKTsKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIobnVjOTAwX3J0Yy0+cnRjZGV2KTsKIAlpb3VubWFwKG51YzkwMF9ydGMtPnJ0Y19yZWcpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCmluZGV4IDFhZjQyYjQuLmI0MmMwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwpAQCAtMTcyLDE0ICsxNzIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGNmODU2M19saW1pdAotewotCXVuc2lnbmVkIGNoYXIgcmVnOwotCXVuc2lnbmVkIGNoYXIgbWFzazsKLQl1bnNpZ25lZCBjaGFyIG1pbjsKLQl1bnNpZ25lZCBjaGFyIG1heDsKLX07Ci0KIHN0YXRpYyBpbnQgcGNmODU2M19ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlyZXR1cm4gcGNmODU2M19nZXRfZGF0ZXRpbWUodG9faTJjX2NsaWVudChkZXYpLCB0bSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCmluZGV4IDcxYmJlZmMuLjZjNDE4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKaW5kZXggZTljNmZhMC4uMjllODY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXB4YS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1weGEuYwpAQCAtODcsNyArODcsNiBAQAogCWludAkJCWlycV9BbHJtOwogCXN0cnVjdCBydGNfZGV2aWNlCSpydGM7CiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIFByb3RlY3RzIHRoaXMgc3RydWN0dXJlICovCi0Jc3RydWN0IHJ0Y190aW1lCQlydGNfYWxhcm07CiB9OwogCiBzdGF0aWMgdTMyIHJ5eHJfY2FsYyhzdHJ1Y3QgcnRjX3RpbWUgKnRtKQpAQCAtMjM2LDMyICsyMzUsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGFfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHB4YV9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnEoJnB4YV9ydGMtPmxvY2spOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcnRzcl9jbGVhcl9iaXRzKHB4YV9ydGMsIFJUU1JfUkRBTEUxKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgorCisJaWYgKGVuYWJsZWQpCiAJCXJ0c3Jfc2V0X2JpdHMocHhhX3J0YywgUlRTUl9SREFMRTEpOwotCQlicmVhazsKLQljYXNlIFJUQ19VSUVfT0ZGOgotCQlydHNyX2NsZWFyX2JpdHMocHhhX3J0YywgUlRTUl9IWkUpOwotCQlicmVhazsKLQljYXNlIFJUQ19VSUVfT046Ci0JCXJ0c3Jfc2V0X2JpdHMocHhhX3J0YywgUlRTUl9IWkUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PSU9DVExDTUQ7Ci0JfQorCWVsc2UKKwkJcnRzcl9jbGVhcl9iaXRzKHB4YV9ydGMsIFJUU1JfUkRBTEUxKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcHhhX3J0Yy0+bG9jayk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBweGFfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3Bpbl9sb2NrX2lycSgmcHhhX3J0Yy0+bG9jayk7CisKKwlpZiAoZW5hYmxlZCkKKwkJcnRzcl9zZXRfYml0cyhweGFfcnRjLCBSVFNSX0haRSk7CisJZWxzZQorCQlydHNyX2NsZWFyX2JpdHMocHhhX3J0YywgUlRTUl9IWkUpOworCisJc3Bpbl91bmxvY2tfaXJxKCZweGFfcnRjLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBweGFfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC0zNDAsMTEgKzM0MSwxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHB4YV9ydGNfb3BzID0gewogCS5vcGVuID0gcHhhX3J0Y19vcGVuLAogCS5yZWxlYXNlID0gcHhhX3J0Y19yZWxlYXNlLAotCS5pb2N0bCA9IHB4YV9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZSA9IHB4YV9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZSA9IHB4YV9ydGNfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0gPSBweGFfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IHB4YV9ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gcHhhX2FsYXJtX2lycV9lbmFibGUsCisJLnVwZGF0ZV9pcnFfZW5hYmxlID0gcHhhX3VwZGF0ZV9pcnFfZW5hYmxlLAogCS5wcm9jID0gcHhhX3J0Y19wcm9jLAogCS5pcnFfc2V0X3N0YXRlID0gcHhhX3BlcmlvZGljX2lycV9zZXRfc3RhdGUsCiAJLmlycV9zZXRfZnJlcSA9IHB4YV9wZXJpb2RpY19pcnFfc2V0X2ZyZXEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKaW5kZXggYTk1ZjczMy4uMzZlYjY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwpAQCAtNjMsNiArNjMsOCBAQAogc3RydWN0IHJwNWMwMV9wcml2IHsKIAl1MzIgX19pb21lbSAqcmVnczsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCXNwaW5sb2NrX3QgbG9jazsJLyogYWdhaW5zdCBjb25jdXJyZW50IFJUQy9OVlJBTSBhY2Nlc3MgKi8KKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBudnJhbV9hdHRyOwogfTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnA1YzAxX3JlYWQoc3RydWN0IHJwNWMwMV9wcml2ICpwcml2LApAQCAtOTIsNiArOTQsNyBAQAogewogCXN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcnA1YzAxX2xvY2socHJpdik7CiAKIAl0bS0+dG1fc2VjICA9IHJwNWMwMV9yZWFkKHByaXYsIFJQNUMwMV8xMF9TRUNPTkQpICogMTAgKwpAQCAtMTExLDYgKzExNCw3IEBACiAJCXRtLT50bV95ZWFyICs9IDEwMDsKIAogCXJwNWMwMV91bmxvY2socHJpdik7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQpAQCAtMTE5LDYgKzEyMyw3IEBACiB7CiAJc3RydWN0IHJwNWMwMV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlycDVjMDFfbG9jayhwcml2KTsKIAogCXJwNWMwMV93cml0ZShwcml2LCB0bS0+dG1fc2VjIC8gMTAsIFJQNUMwMV8xMF9TRUNPTkQpOwpAQCAtMTM5LDYgKzE0NCw3IEBACiAJcnA1YzAxX3dyaXRlKHByaXYsIHRtLT50bV95ZWFyICUgMTAsIFJQNUMwMV8xX1lFQVIpOwogCiAJcnA1YzAxX3VubG9jayhwcml2KTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNDcsNiArMTUzLDcyIEBACiAJLnNldF90aW1lCT0gcnA1YzAxX3NldF90aW1lLAogfTsKIAorCisvKgorICogVGhlIE5WUkFNIGlzIG9yZ2FuaXplZCBhcyAyIGJsb2NrcyBvZiAxMyBuaWJibGVzIG9mIDQgYml0cy4KKyAqIFdlIHByb3ZpZGUgYWNjZXNzIHRvIHRoZW0gbGlrZSBBbWlnYU9TIGRvZXM6IHRoZSBoaWdoIG5pYmJsZSBvZiBlYWNoIDgtYml0CisgKiBieXRlIGlzIHN0b3JlZCBpbiBCTE9DSzEwLCB0aGUgbG93IG5pYmJsZSBpbiBCTE9DSzExLgorICovCisKK3N0YXRpYyBzc2l6ZV90IHJwNWMwMV9udnJhbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorCQkJCSBjaGFyICpidWYsIGxvZmZfdCBwb3MsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcnA1YzAxX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGNvdW50OworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlmb3IgKGNvdW50ID0gMDsgc2l6ZSA+IDAgJiYgcG9zIDwgUlA1QzAxX01PREU7IGNvdW50KyssIHNpemUtLSkgeworCQl1OCBkYXRhOworCisJCXJwNWMwMV93cml0ZShwcml2LAorCQkJICAgICBSUDVDMDFfTU9ERV9USU1FUl9FTiB8IFJQNUMwMV9NT0RFX1JBTV9CTE9DSzEwLAorCQkJICAgICBSUDVDMDFfTU9ERSk7CisJCWRhdGEgPSBycDVjMDFfcmVhZChwcml2LCBwb3MpIDw8IDQ7CisJCXJwNWMwMV93cml0ZShwcml2LAorCQkJICAgICBSUDVDMDFfTU9ERV9USU1FUl9FTiB8IFJQNUMwMV9NT0RFX1JBTV9CTE9DSzExLAorCQkJICAgICBSUDVDMDFfTU9ERSk7CisJCWRhdGEgfD0gcnA1YzAxX3JlYWQocHJpdiwgcG9zKyspOworCQlycDVjMDFfd3JpdGUocHJpdiwgUlA1QzAxX01PREVfVElNRVJfRU4gfCBSUDVDMDFfTU9ERV9NT0RFMDEsCisJCQkgICAgIFJQNUMwMV9NT0RFKTsKKwkJKmJ1ZisrID0gZGF0YTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcnA1YzAxX252cmFtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKKwkJCQkgIGNoYXIgKmJ1ZiwgbG9mZl90IHBvcywgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCWZvciAoY291bnQgPSAwOyBzaXplID4gMCAmJiBwb3MgPCBSUDVDMDFfTU9ERTsgY291bnQrKywgc2l6ZS0tKSB7CisJCXU4IGRhdGEgPSAqYnVmKys7CisKKwkJcnA1YzAxX3dyaXRlKHByaXYsCisJCQkgICAgIFJQNUMwMV9NT0RFX1RJTUVSX0VOIHwgUlA1QzAxX01PREVfUkFNX0JMT0NLMTAsCisJCQkgICAgIFJQNUMwMV9NT0RFKTsKKwkJcnA1YzAxX3dyaXRlKHByaXYsIGRhdGEgPj4gNCwgcG9zKTsKKwkJcnA1YzAxX3dyaXRlKHByaXYsCisJCQkgICAgIFJQNUMwMV9NT0RFX1RJTUVSX0VOIHwgUlA1QzAxX01PREVfUkFNX0JMT0NLMTEsCisJCQkgICAgIFJQNUMwMV9NT0RFKTsKKwkJcnA1YzAxX3dyaXRlKHByaXYsIGRhdGEgJiAweGYsIHBvcysrKTsKKwkJcnA1YzAxX3dyaXRlKHByaXYsIFJQNUMwMV9NT0RFX1RJTUVSX0VOIHwgUlA1QzAxX01PREVfTU9ERTAxLAorCQkJICAgICBSUDVDMDFfTU9ERSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHJwNWMwMV9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtMTY4LDYgKzI0MCwxNSBAQAogCQlnb3RvIG91dF9mcmVlX3ByaXY7CiAJfQogCisJc3lzZnNfYmluX2F0dHJfaW5pdCgmcHJpdi0+bnZyYW1fYXR0cik7CisJcHJpdi0+bnZyYW1fYXR0ci5hdHRyLm5hbWUgPSAibnZyYW0iOworCXByaXYtPm52cmFtX2F0dHIuYXR0ci5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1I7CisJcHJpdi0+bnZyYW1fYXR0ci5yZWFkID0gcnA1YzAxX252cmFtX3JlYWQ7CisJcHJpdi0+bnZyYW1fYXR0ci53cml0ZSA9IHJwNWMwMV9udnJhbV93cml0ZTsKKwlwcml2LT5udnJhbV9hdHRyLnNpemUgPSBSUDVDMDFfTU9ERTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1ycDVjMDEiLCAmZGV2LT5kZXYsICZycDVjMDFfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0YykpIHsKQEAgLTE3Nyw4ICsyNTgsMTUgQEAKIAogCXByaXYtPnJ0YyA9IHJ0YzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOworCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosICZwcml2LT5udnJhbV9hdHRyKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisKIAlyZXR1cm4gMDsKIAorb3V0X3VucmVnaXN0ZXI6CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CiBvdXRfdW5tYXA6CiAJaW91bm1hcChwcml2LT5yZWdzKTsKIG91dF9mcmVlX3ByaXY6CkBAIC0xOTAsNiArMjc4LDcgQEAKIHsKIAlzdHJ1Y3QgcnA1YzAxX3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCisJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZkZXYtPmRldi5rb2JqLCAmcHJpdi0+bnZyYW1fYXR0cik7CiAJcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7CiAJaW91bm1hcChwcml2LT5yZWdzKTsKIAlrZnJlZShwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwppbmRleCA3MGI2OGQzLi5hMGQzZWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCkBAIC0xLDUgKzEsOCBAQAogLyogZHJpdmVycy9ydGMvcnRjLXMzYy5jCiAgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CiAgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwpAQCAtMzksNiArNDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlICpzM2NfcnRjX21lbTsKIAorc3RhdGljIHN0cnVjdCBjbGsgKnJ0Y19jbGs7CiBzdGF0aWMgdm9pZCBfX2lvbWVtICpzM2NfcnRjX2Jhc2U7CiBzdGF0aWMgaW50IHMzY19ydGNfYWxhcm1ubyA9IE5PX0lSUTsKIHN0YXRpYyBpbnQgczNjX3J0Y190aWNrbm8gID0gTk9fSVJROwpAQCAtNTMsNiArNTcsMTAgQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcmRldiA9IGlkOwogCiAJcnRjX3VwZGF0ZV9pcnEocmRldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCisJaWYgKHMzY19ydGNfY3B1X3R5cGUgPT0gVFlQRV9TM0M2NFhYKQorCQl3cml0ZWIoUzNDMjQxMF9JTlRQX0FMTSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9JTlRQKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNjEsNiArNjksMTAgQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcmRldiA9IGlkOwogCiAJcnRjX3VwZGF0ZV9pcnEocmRldiwgMSwgUlRDX1BGIHwgUlRDX0lSUUYpOworCisJaWYgKHMzY19ydGNfY3B1X3R5cGUgPT0gVFlQRV9TM0M2NFhYKQorCQl3cml0ZWIoUzNDMjQxMF9JTlRQX1RJQywgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9JTlRQKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtOTQsNyArMTA2LDcgQEAKIAkJaWYgKGVuYWJsZWQpCiAJCQl0bXAgfD0gUzNDNjRYWF9SVENDT05fVElDRU47CiAKLQkJd3JpdGViKHRtcCwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENDT04pOworCQl3cml0ZXcodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0NPTik7CiAJfSBlbHNlIHsKIAkJdG1wID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCk7CiAJCXRtcCAmPSB+UzNDMjQxMF9USUNOVF9FTkFCTEU7CkBAIC0xMjgsNyArMTQwLDcgQEAKIAogCXRtcCB8PSAocnRjX2Rldi0+bWF4X3VzZXJfZnJlcSAvIGZyZXEpLTE7CiAKLQl3cml0ZWIodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1RJQ05UKTsKKwl3cml0ZWwodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1RJQ05UKTsKIAlzcGluX3VubG9ja19pcnEoJnMzY19ydGNfcGllX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC00MzEsNiArNDQzLDEwIEBACiAJczNjX3J0Y19zZXRwaWUoJmRldi0+ZGV2LCAwKTsKIAlzM2NfcnRjX3NldGFpZSgwKTsKIAorCWNsa19kaXNhYmxlKHJ0Y19jbGspOworCWNsa19wdXQocnRjX2Nsayk7CisJcnRjX2NsayA9IE5VTEw7CisKIAlpb3VubWFwKHMzY19ydGNfYmFzZSk7CiAJcmVsZWFzZV9yZXNvdXJjZShzM2NfcnRjX21lbSk7CiAJa2ZyZWUoczNjX3J0Y19tZW0pOwpAQCAtNDQyLDYgKzQ1OCw3IEBACiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgdG1wLCBpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZygiJXM6IHByb2JlPSVwXG4iLCBfX2Z1bmNfXywgcGRldik7CkBAIC00ODgsNiArNTA1LDE2IEBACiAJCWdvdG8gZXJyX25vbWFwOwogCX0KIAorCXJ0Y19jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJydGMiKTsKKwlpZiAoSVNfRVJSKHJ0Y19jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBmaW5kIHJ0YyBjbG9jayBzb3VyY2VcbiIpOworCQlyZXQgPSBQVFJfRVJSKHJ0Y19jbGspOworCQlydGNfY2xrID0gTlVMTDsKKwkJZ290byBlcnJfY2xrOworCX0KKworCWNsa19lbmFibGUocnRjX2Nsayk7CisKIAkvKiBjaGVjayB0byBzZWUgaWYgZXZlcnl0aGluZyBpcyBzZXR1cCBjb3JyZWN0bHkgKi8KIAogCXMzY19ydGNfZW5hYmxlKHBkZXYsIDEpOwpAQCAtNTEwLDYgKzUzNywxNSBAQAogCiAJczNjX3J0Y19jcHVfdHlwZSA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhOwogCisJLyogQ2hlY2sgUlRDIFRpbWUgKi8KKworCWZvciAoaSA9IFMzQzI0MTBfUlRDU0VDOyBpIDw9IFMzQzI0MTBfUlRDWUVBUjsgaSArPSAweDQpIHsKKwkJdG1wID0gcmVhZGIoczNjX3J0Y19iYXNlICsgaSk7CisKKwkJaWYgKCh0bXAgJiAweGYpID4gMHg5IHx8ICgodG1wID4+IDQpICYgMHhmKSA+IDB4OSkKKwkJCXdyaXRlYigwLCBzM2NfcnRjX2Jhc2UgKyBpKTsKKwl9CisKIAlpZiAoczNjX3J0Y19jcHVfdHlwZSA9PSBUWVBFX1MzQzY0WFgpCiAJCXJ0Yy0+bWF4X3VzZXJfZnJlcSA9IDMyNzY4OwogCWVsc2UKQEAgLTUyMyw2ICs1NTksMTAgQEAKIAogIGVycl9ub3J0YzoKIAlzM2NfcnRjX2VuYWJsZShwZGV2LCAwKTsKKwljbGtfZGlzYWJsZShydGNfY2xrKTsKKwljbGtfcHV0KHJ0Y19jbGspOworCisgZXJyX2NsazoKIAlpb3VubWFwKHMzY19ydGNfYmFzZSk7CiAKICBlcnJfbm9tYXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCAzMzk3NWU5Li4xYTg0ZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KQEAgLTIxOTYsNyArMjE5Nyw3IEBACiAJICovCiAJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSk7CiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSAtIDEpOwotCWJsa19xdWV1ZV9vcmRlcmVkKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKKwlibGtfcXVldWVfb3JkZXJlZChibG9jay0+cmVxdWVzdF9xdWV1ZSwgUVVFVUVfT1JERVJFRF9EUkFJTik7CiB9CiAKIC8qCkBAIC0yMjM1LDYgKzIyMzYsNyBAQAogCWlmICghYmxvY2spCiAJCXJldHVybiAtRU5PREVWOwogCisJbG9ja19rZXJuZWwoKTsKIAliYXNlID0gYmxvY2stPmJhc2U7CiAJYXRvbWljX2luYygmYmxvY2stPm9wZW5fY291bnQpOwogCWlmICh0ZXN0X2JpdChEQVNEX0ZMQUdfT0ZGTElORSwgJmJhc2UtPmZsYWdzKSkgewpAQCAtMjI2OSwxMiArMjI3MSwxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KGJhc2UtPmRpc2NpcGxpbmUtPm93bmVyKTsKIHVubG9jazoKIAlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByYzsKIH0KIApAQCAtMjI4Miw4ICsyMjg2LDEwIEBACiB7CiAJc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCisJbG9ja19rZXJuZWwoKTsKIAlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7CiAJbW9kdWxlX3B1dChibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+b3duZXIpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCBiZWQ3YjQ2Li44ZDQxZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtMTA4Myw2ICsxMDgzLDQ5IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihlZXJfZW5hYmxlZCwgMDY0NCwgZGFzZF9lZXJfc2hvdywgZGFzZF9lZXJfc3RvcmUpOwogCisvKgorICogZXhwaXJhdGlvbiB0aW1lIGZvciBkZWZhdWx0IHJlcXVlc3RzCisgKi8KK3N0YXRpYyBzc2l6ZV90CitkYXNkX2V4cGlyZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJaW50IGxlbjsKKworCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CisJaWYgKElTX0VSUihkZXZpY2UpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlsZW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsdVxuIiwgZGV2aWNlLT5kZWZhdWx0X2V4cGlyZXMpOworCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90CitkYXNkX2V4cGlyZXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXYodG9fY2N3ZGV2KGRldikpOworCWlmIChJU19FUlIoZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpICE9IDApIHx8CisJICAgICh2YWwgPiBEQVNEX0VYUElSRVNfTUFYKSB8fCB2YWwgPT0gMCkgeworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHZhbCkKKwkJZGV2aWNlLT5kZWZhdWx0X2V4cGlyZXMgPSB2YWw7CisKKwlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihleHBpcmVzLCAwNjQ0LCBkYXNkX2V4cGlyZXNfc2hvdywgZGFzZF9leHBpcmVzX3N0b3JlKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYXNkX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3JlYWRvbmx5LmF0dHIsCiAJJmRldl9hdHRyX2Rpc2NpcGxpbmUuYXR0ciwKQEAgLTEwOTQsNiArMTEzNyw3IEBACiAJJmRldl9hdHRyX2Vlcl9lbmFibGVkLmF0dHIsCiAJJmRldl9hdHRyX2VycGxvZy5hdHRyLAogCSZkZXZfYXR0cl9mYWlsZmFzdC5hdHRyLAorCSZkZXZfYXR0cl9leHBpcmVzLmF0dHIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCA2ODdmMzIzLi4yYjNiYzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC00Myw3ICs0Myw3IEBACiAJCQkgICBzaXplb2Yoc3RydWN0IGRhc2RfZGlhZ19yZXEpKSAvIFwKIAkJICAgICAgICAgICBzaXplb2Yoc3RydWN0IGRhc2RfZGlhZ19iaW8pKSAvIDIpCiAjZGVmaW5lIERJQUdfTUFYX1JFVFJJRVMJMzIKLSNkZWZpbmUgRElBR19USU1FT1VUCQk1MCAqIEhaCisjZGVmaW5lIERJQUdfVElNRU9VVAkJNTAKIAogc3RhdGljIHN0cnVjdCBkYXNkX2Rpc2NpcGxpbmUgZGFzZF9kaWFnX2Rpc2NpcGxpbmU7CiAKQEAgLTM2MCw2ICszNjAsOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlkZXZpY2UtPmRlZmF1bHRfZXhwaXJlcyA9IERJQUdfVElNRU9VVDsKKwogCS8qIEZpZ3VyZSBvdXQgcG9zaXRpb24gb2YgbGFiZWwgYmxvY2sgKi8KIAlzd2l0Y2ggKHByaXZhdGUtPnJkY19kYXRhLnZkZXZfY2xhc3MpIHsKIAljYXNlIERFVl9DTEFTU19GQkE6CkBAIC01NjMsNyArNTY1LDcgQEAKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwogCWNxci0+YmxvY2sgPSBibG9jazsKLQljcXItPmV4cGlyZXMgPSBESUFHX1RJTUVPVVQ7CisJY3FyLT5leHBpcmVzID0gbWVtZGV2LT5kZWZhdWx0X2V4cGlyZXMgKiBIWjsKIAljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZJTExFRDsKIAlyZXR1cm4gY3FyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGFiODRkYTUuLjY2MzYwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTgyLDYgKzgyLDE0IEBACiAjZGVmaW5lIElOSVRfQ1FSX1VORk9STUFUVEVEIDEKICNkZWZpbmUgSU5JVF9DUVJfRVJST1IgMgogCisvKiBlbWVyZ2VuY3kgcmVxdWVzdCBmb3IgcmVzZXJ2ZS9yZWxlYXNlICovCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZGFzZF9jY3dfcmVxIGNxcjsKKwlzdHJ1Y3QgY2N3MSBjY3c7CisJY2hhciBkYXRhWzMyXTsKK30gKmRhc2RfcmVzZXJ2ZV9yZXE7CitzdGF0aWMgREVGSU5FX01VVEVYKGRhc2RfcmVzZXJ2ZV9tdXRleCk7CisKIAogLyogaW5pdGlhbCBhdHRlbXB0IGF0IGEgcHJvYmUgZnVuY3Rpb24uIHRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgb25jZQogICogdGhlIG90aGVyIGRldGVjdGlvbiBjb2RlIGlzIGdvbmUgKi8KQEAgLTExMDcsOCArMTExNSw5IEBACiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAlzdHJ1Y3QgZGFzZF91aWQgdGVtcF91aWQ7Ci0JaW50IGlzX2tub3duLCByYzsKKwlpbnQgaXNfa25vd24sIHJjLCBpOwogCWludCByZWFkb25seTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOwogCiAJaWYgKCFjY3dfZGV2aWNlX2lzX3BhdGhncm91cChkZXZpY2UtPmNkZXYpKSB7CiAJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwKQEAgLTExNDMsNiArMTE1MiwxOCBAQAogCWlmIChyYykKIAkJZ290byBvdXRfZXJyMTsKIAorCS8qIHNldCBkZWZhdWx0IHRpbWVvdXQgKi8KKwlkZXZpY2UtPmRlZmF1bHRfZXhwaXJlcyA9IERBU0RfRVhQSVJFUzsKKwlpZiAocHJpdmF0ZS0+Z25lcSkgeworCQl2YWx1ZSA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBwcml2YXRlLT5nbmVxLT50aW1lb3V0LnZhbHVlOyBpKyspCisJCQl2YWx1ZSA9IDEwICogdmFsdWU7CisJCXZhbHVlID0gdmFsdWUgKiBwcml2YXRlLT5nbmVxLT50aW1lb3V0Lm51bWJlcjsKKwkJLyogZG8gbm90IGFjY2VwdCB1c2VsZXNzIHZhbHVlcyAqLworCQlpZiAodmFsdWUgIT0gMCAmJiB2YWx1ZSA8PSBEQVNEX0VYUElSRVNfTUFYKQorCQkJZGV2aWNlLT5kZWZhdWx0X2V4cGlyZXMgPSB2YWx1ZTsKKwl9CisKIAkvKiBHZW5lcmF0ZSBkZXZpY2UgdW5pcXVlIGlkICovCiAJcmMgPSBkYXNkX2Vja2RfZ2VuZXJhdGVfdWlkKGRldmljZSk7CiAJaWYgKHJjKQpAQCAtMTk3Myw3ICsxOTk0LDcgQEAKIAljcXItPnN0YXJ0ZGV2ID0gc3RhcnRkZXY7CiAJY3FyLT5tZW1kZXYgPSBzdGFydGRldjsKIAljcXItPmJsb2NrID0gYmxvY2s7Ci0JY3FyLT5leHBpcmVzID0gNSAqIDYwICogSFo7CS8qIDUgbWludXRlcyAqLworCWNxci0+ZXhwaXJlcyA9IHN0YXJ0ZGV2LT5kZWZhdWx0X2V4cGlyZXMgKiBIWjsJLyogZGVmYXVsdCA1IG1pbnV0ZXMgKi8KIAljcXItPmxwbSA9IHByaXZhdGUtPnBhdGhfZGF0YS5wcG07CiAJY3FyLT5yZXRyaWVzID0gMjU2OwogCWNxci0+YnVpbGRjbGsgPSBnZXRfY2xvY2soKTsKQEAgLTIxNTAsNyArMjE3MSw3IEBACiAJY3FyLT5zdGFydGRldiA9IHN0YXJ0ZGV2OwogCWNxci0+bWVtZGV2ID0gc3RhcnRkZXY7CiAJY3FyLT5ibG9jayA9IGJsb2NrOwotCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KKwljcXItPmV4cGlyZXMgPSBzdGFydGRldi0+ZGVmYXVsdF9leHBpcmVzICogSFo7CS8qIGRlZmF1bHQgNSBtaW51dGVzICovCiAJY3FyLT5scG0gPSBwcml2YXRlLT5wYXRoX2RhdGEucHBtOwogCWNxci0+cmV0cmllcyA9IDI1NjsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CkBAIC0yMzk4LDcgKzI0MTksNyBAQAogCWNxci0+c3RhcnRkZXYgPSBzdGFydGRldjsKIAljcXItPm1lbWRldiA9IHN0YXJ0ZGV2OwogCWNxci0+YmxvY2sgPSBibG9jazsKLQljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5leHBpcmVzID0gc3RhcnRkZXYtPmRlZmF1bHRfZXhwaXJlcyAqIEhaOwkvKiBkZWZhdWx0IDUgbWludXRlcyAqLwogCWNxci0+bHBtID0gcHJpdmF0ZS0+cGF0aF9kYXRhLnBwbTsKIAljcXItPnJldHJpZXMgPSAyNTY7CiAJY3FyLT5idWlsZGNsayA9IGdldF9jbG9jaygpOwpAQCAtMjY0NSwxNSArMjY2NiwyMyBAQAogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlpbnQgcmM7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwlpbnQgdXNlZ2xvYmFsOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAorCXVzZWdsb2JhbCA9IDA7CiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9FQ0tEX01BR0lDLCAxLCAzMiwgZGV2aWNlKTsKIAlpZiAoSVNfRVJSKGNxcikpIHsKLQkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLCAiJXMiLAotCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCIpOwotCQlyZXR1cm4gUFRSX0VSUihjcXIpOworCQltdXRleF9sb2NrKCZkYXNkX3Jlc2VydmVfbXV0ZXgpOworCQl1c2VnbG9iYWwgPSAxOworCQljcXIgPSAmZGFzZF9yZXNlcnZlX3JlcS0+Y3FyOworCQltZW1zZXQoY3FyLCAwLCBzaXplb2YoKmNxcikpOworCQltZW1zZXQoJmRhc2RfcmVzZXJ2ZV9yZXEtPmNjdywgMCwKKwkJICAgICAgIHNpemVvZihkYXNkX3Jlc2VydmVfcmVxLT5jY3cpKTsKKwkJY3FyLT5jcGFkZHIgPSAmZGFzZF9yZXNlcnZlX3JlcS0+Y2N3OworCQljcXItPmRhdGEgPSAmZGFzZF9yZXNlcnZlX3JlcS0+ZGF0YTsKKwkJY3FyLT5tYWdpYyA9IERBU0RfRUNLRF9NQUdJQzsKIAl9CiAJY2N3ID0gY3FyLT5jcGFkZHI7CiAJY2N3LT5jbWRfY29kZSA9IERBU0RfRUNLRF9DQ1dfUkVMRUFTRTsKQEAgLTI2NzEsNyArMjcwMCwxMCBAQAogCiAJcmMgPSBkYXNkX3NsZWVwX29uX2ltbWVkaWF0bHkoY3FyKTsKIAotCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+bWVtZGV2KTsKKwlpZiAodXNlZ2xvYmFsKQorCQltdXRleF91bmxvY2soJmRhc2RfcmVzZXJ2ZV9tdXRleCk7CisJZWxzZQorCQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBjcXItPm1lbWRldik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yNjg3LDE1ICsyNzE5LDIzIEBACiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCWludCByYzsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCWludCB1c2VnbG9iYWw7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCisJdXNlZ2xvYmFsID0gMDsKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDEsIDMyLCBkZXZpY2UpOwogCWlmIChJU19FUlIoY3FyKSkgewotCQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbml0aWFsaXphdGlvbiByZXF1ZXN0Iik7Ci0JCXJldHVybiBQVFJfRVJSKGNxcik7CisJCW11dGV4X2xvY2soJmRhc2RfcmVzZXJ2ZV9tdXRleCk7CisJCXVzZWdsb2JhbCA9IDE7CisJCWNxciA9ICZkYXNkX3Jlc2VydmVfcmVxLT5jcXI7CisJCW1lbXNldChjcXIsIDAsIHNpemVvZigqY3FyKSk7CisJCW1lbXNldCgmZGFzZF9yZXNlcnZlX3JlcS0+Y2N3LCAwLAorCQkgICAgICAgc2l6ZW9mKGRhc2RfcmVzZXJ2ZV9yZXEtPmNjdykpOworCQljcXItPmNwYWRkciA9ICZkYXNkX3Jlc2VydmVfcmVxLT5jY3c7CisJCWNxci0+ZGF0YSA9ICZkYXNkX3Jlc2VydmVfcmVxLT5kYXRhOworCQljcXItPm1hZ2ljID0gREFTRF9FQ0tEX01BR0lDOwogCX0KIAljY3cgPSBjcXItPmNwYWRkcjsKIAljY3ctPmNtZF9jb2RlID0gREFTRF9FQ0tEX0NDV19SRVNFUlZFOwpAQCAtMjcxMyw3ICsyNzUzLDEwIEBACiAKIAlyYyA9IGRhc2Rfc2xlZXBfb25faW1tZWRpYXRseShjcXIpOwogCi0JZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOworCWlmICh1c2VnbG9iYWwpCisJCW11dGV4X3VubG9jaygmZGFzZF9yZXNlcnZlX211dGV4KTsKKwllbHNlCisJCWRhc2Rfc2ZyZWVfcmVxdWVzdChjcXIsIGNxci0+bWVtZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI3MjgsMTUgKzI3NzEsMjMgQEAKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJaW50IHJjOwogCXN0cnVjdCBjY3cxICpjY3c7CisJaW50IHVzZWdsb2JhbDsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKKwl1c2VnbG9iYWwgPSAwOwogCWNxciA9IGRhc2Rfc21hbGxvY19yZXF1ZXN0KERBU0RfRUNLRF9NQUdJQywgMSwgMzIsIGRldmljZSk7CiAJaWYgKElTX0VSUihjcXIpKSB7Ci0JCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIGluaXRpYWxpemF0aW9uIHJlcXVlc3QiKTsKLQkJcmV0dXJuIFBUUl9FUlIoY3FyKTsKKwkJbXV0ZXhfbG9jaygmZGFzZF9yZXNlcnZlX211dGV4KTsKKwkJdXNlZ2xvYmFsID0gMTsKKwkJY3FyID0gJmRhc2RfcmVzZXJ2ZV9yZXEtPmNxcjsKKwkJbWVtc2V0KGNxciwgMCwgc2l6ZW9mKCpjcXIpKTsKKwkJbWVtc2V0KCZkYXNkX3Jlc2VydmVfcmVxLT5jY3csIDAsCisJCSAgICAgICBzaXplb2YoZGFzZF9yZXNlcnZlX3JlcS0+Y2N3KSk7CisJCWNxci0+Y3BhZGRyID0gJmRhc2RfcmVzZXJ2ZV9yZXEtPmNjdzsKKwkJY3FyLT5kYXRhID0gJmRhc2RfcmVzZXJ2ZV9yZXEtPmRhdGE7CisJCWNxci0+bWFnaWMgPSBEQVNEX0VDS0RfTUFHSUM7CiAJfQogCWNjdyA9IGNxci0+Y3BhZGRyOwogCWNjdy0+Y21kX2NvZGUgPSBEQVNEX0VDS0RfQ0NXX1NMQ0s7CkBAIC0yNzU0LDcgKzI4MDUsMTAgQEAKIAogCXJjID0gZGFzZF9zbGVlcF9vbl9pbW1lZGlhdGx5KGNxcik7CiAKLQlkYXNkX3NmcmVlX3JlcXVlc3QoY3FyLCBjcXItPm1lbWRldik7CisJaWYgKHVzZWdsb2JhbCkKKwkJbXV0ZXhfdW5sb2NrKCZkYXNkX3Jlc2VydmVfbXV0ZXgpOworCWVsc2UKKwkJZGFzZF9zZnJlZV9yZXF1ZXN0KGNxciwgY3FyLT5tZW1kZXYpOwogCXJldHVybiByYzsKIH0KIApAQCAtMzQ4OCwxMCArMzU0MiwxNSBAQAogCWludCByZXQ7CiAKIAlBU0NFQkMoZGFzZF9lY2tkX2Rpc2NpcGxpbmUuZWJjbmFtZSwgNCk7CisJZGFzZF9yZXNlcnZlX3JlcSA9IGttYWxsb2Moc2l6ZW9mKCpkYXNkX3Jlc2VydmVfcmVxKSwKKwkJCQkgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFkYXNkX3Jlc2VydmVfcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyZXQgPSBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZkYXNkX2Vja2RfZHJpdmVyKTsKIAlpZiAoIXJldCkKIAkJd2FpdF9mb3JfZGV2aWNlX3Byb2JlKCk7Ci0KKwllbHNlCisJCWtmcmVlKGRhc2RfcmVzZXJ2ZV9yZXEpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0OTksNiArMzU1OCw3IEBACiBkYXNkX2Vja2RfY2xlYW51cCh2b2lkKQogewogCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmZGFzZF9lY2tkX2RyaXZlcik7CisJa2ZyZWUoZGFzZF9yZXNlcnZlX3JlcSk7CiB9CiAKIG1vZHVsZV9pbml0KGRhc2RfZWNrZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuaAppbmRleCBkZDYzODVhLi4wZWI0OTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5oCkBAIC0zMjAsNyArMzIwLDEyIEBACiAJCV9fdTggaWRlbnRpZmllcjoyOwogCQlfX3U4IHJlc2VydmVkOjY7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZmxhZ3M7Ci0JX191OCByZXNlcnZlZFs3XTsKKwlfX3U4IHJlc2VydmVkWzVdOworCXN0cnVjdCB7CisJCV9fdTggdmFsdWU6MjsKKwkJX191OCBudW1iZXI6NjsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB0aW1lb3V0OworCV9fdTggcmVzZXJ2ZWQzOwogCV9fdTE2IHN1YnN5c3RlbUlEOwogCV9fdTggcmVzZXJ2ZWQyWzIyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWVyLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwppbmRleCBkZDg4ODAzLi43MTU4Zjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYwpAQCAtNzAxLDcgKzcwMSw3IEBACiB2b2lkIGRhc2RfZWVyX2V4aXQodm9pZCkKIHsKIAlpZiAoZGFzZF9lZXJfZGV2KSB7Ci0JCVdBUk5fT04obWlzY19kZXJlZ2lzdGVyKGRhc2RfZWVyX2RldikgIT0gMCk7CisJCW1pc2NfZGVyZWdpc3RlcihkYXNkX2Vlcl9kZXYpOwogCQlrZnJlZShkYXNkX2Vlcl9kZXYpOwogCQlkYXNkX2Vlcl9kZXYgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKaW5kZXggMzcyODJiOS4uYmVjNTQ4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC0xNjMsNiArMTYzLDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAorCWRldmljZS0+ZGVmYXVsdF9leHBpcmVzID0gREFTRF9FWFBJUkVTOworCiAJcmVhZG9ubHkgPSBkYXNkX2RldmljZV9pc19ybyhkZXZpY2UpOwogCWlmIChyZWFkb25seSkKIAkJc2V0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmZGV2aWNlLT5mbGFncyk7CkBAIC0zNzAsNyArMzcyLDcgQEAKIAljcXItPnN0YXJ0ZGV2ID0gbWVtZGV2OwogCWNxci0+bWVtZGV2ID0gbWVtZGV2OwogCWNxci0+YmxvY2sgPSBibG9jazsKLQljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCisJY3FyLT5leHBpcmVzID0gbWVtZGV2LT5kZWZhdWx0X2V4cGlyZXMgKiBIWjsJLyogZGVmYXVsdCA1IG1pbnV0ZXMgKi8KIAljcXItPnJldHJpZXMgPSAzMjsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7CiAJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9GSUxMRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDQ5YjQzMWQuLjUwMDY3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC0xODYsNyArMTg2LDcgQEAKIAogCS8qIC4uLiBhbmQgaG93ICovCiAJdW5zaWduZWQgbG9uZyBzdGFydHRpbWU7CS8qIGppZmZpZXMgdGltZSBvZiByZXF1ZXN0IHN0YXJ0ICovCi0JaW50IGV4cGlyZXM7CQkJLyogZXhwaXJhdGlvbiBwZXJpb2QgaW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsJCS8qIGV4cGlyYXRpb24gcGVyaW9kIGluIGppZmZpZXMgKi8KIAljaGFyIGxwbTsJCQkvKiBsb2dpY2FsIHBhdGggbWFzayAqLwogCXZvaWQgKmRhdGE7CQkJLyogcG9pbnRlciB0byBkYXRhIGFyZWEgKi8KIApAQCAtMjI0LDYgKzIyNCw5IEBACiAjZGVmaW5lIERBU0RfQ1FSX0NMRUFSRUQJMHg4NAkvKiByZXF1ZXN0IHdhcyBjbGVhcmVkICovCiAjZGVmaW5lIERBU0RfQ1FSX1NVQ0NFU1MJMHg4NQkvKiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsICovCiAKKy8qIGRlZmF1bHQgZXhwaXJhdGlvbiB0aW1lKi8KKyNkZWZpbmUgREFTRF9FWFBJUkVTCSAgMzAwCisjZGVmaW5lIERBU0RfRVhQSVJFU19NQVggIDQwMDAwMDAwCiAKIC8qIHBlciBkYXNkX2Njd19yZXEgZmxhZ3MgKi8KICNkZWZpbmUgREFTRF9DUVJfRkxBR1NfVVNFX0VSUCAgIDAJLyogdXNlIEVSUCBmb3IgdGhpcyByZXF1ZXN0ICovCkBAIC00MDQsNiArNDA3LDkgQEAKIAogCS8qIGhvb2sgZm9yIGFsaWFzIG1hbmFnZW1lbnQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGFsaWFzX2xpc3Q7CisKKwkvKiBkZWZhdWx0IGV4cGlyYXRpb24gdGltZSBpbiBzICovCisJdW5zaWduZWQgbG9uZyBkZWZhdWx0X2V4cGlyZXM7CiB9OwogCiBzdHJ1Y3QgZGFzZF9ibG9jayB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYwppbmRleCA5YjQzYWU5Li4yYmQ3MmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtNzc1LDYgKzc3Niw3IEBACiAJc3RydWN0IGRjc3NibGtfZGV2X2luZm8gKmRldl9pbmZvOwogCWludCByYzsKIAorCWxvY2tfa2VybmVsKCk7CiAJZGV2X2luZm8gPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaWYgKE5VTEwgPT0gZGV2X2luZm8pIHsKIAkJcmMgPSAtRU5PREVWOwpAQCAtNzg0LDYgKzc4Niw3IEBACiAJYmRldi0+YmRfYmxvY2tfc2l6ZSA9IDQwOTY7CiAJcmMgPSAwOwogb3V0OgorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTc5NCw2ICs3OTcsNyBAQAogCXN0cnVjdCBzZWdtZW50X2luZm8gKmVudHJ5OwogCWludCByYzsKIAorCWxvY2tfa2VybmVsKCk7CiAJaWYgKCFkZXZfaW5mbykgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwpAQCAtODExLDYgKzgxNSw3IEBACiAJdXBfd3JpdGUoJmRjc3NibGtfZGV2aWNlc19zZW0pOwogCXJjID0gMDsKIG91dDoKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDJlZDNmODIuLmUwMjFlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC02MjcsNyArNjI3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtb25fZXhpdCh2b2lkKQogewogCXNlZ21lbnRfdW5sb2FkKG1vbl9kY3NzX25hbWUpOwotCVdBUk5fT04obWlzY19kZXJlZ2lzdGVyKCZtb25fZGV2KSAhPSAwKTsKKwltaXNjX2RlcmVnaXN0ZXIoJm1vbl9kZXYpOwogCWRldmljZV91bnJlZ2lzdGVyKG1vbnJlYWRlcl9kZXZpY2UpOwogCWRyaXZlcl91bnJlZ2lzdGVyKCZtb25yZWFkZXJfZHJpdmVyKTsKIAlpdWN2X3VucmVnaXN0ZXIoJm1vbnJlYWRlcl9pdWN2X2hhbmRsZXIsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwppbmRleCA5OGE0OWRmLi41NzJhMWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9tb253cml0ZXIuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtb25fZXhpdCh2b2lkKQogewotCVdBUk5fT04obWlzY19kZXJlZ2lzdGVyKCZtb25fZGV2KSAhPSAwKTsKKwltaXNjX2RlcmVnaXN0ZXIoJm1vbl9kZXYpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1vbndyaXRlcl9wZGV2KTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbW9ud3JpdGVyX3BkcnYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCmluZGV4IDA5N2RhOGMuLmI3ZGUwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM2MSw2ICszNjIsNyBAQAogCXN0cnVjdCB0YXBlX2RldmljZSAqCWRldmljZTsKIAlpbnQJCQlyYzsKIAorCWxvY2tfa2VybmVsKCk7CiAJZGV2aWNlID0gdGFwZV9nZXRfZGV2aWNlKGRpc2stPnByaXZhdGVfZGF0YSk7CiAKIAlpZiAoZGV2aWNlLT5yZXF1aXJlZF90YXBlbWFya3MpIHsKQEAgLTM4NCwxMiArMzg2LDE0IEBACiAJICogICAgICAgaXMgY2FsbGVkLgogCSAqLwogCXRhcGVfc3RhdGVfc2V0KGRldmljZSwgVFNfQkxLVVNFKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKIHJlbGVhc2U6CiAJdGFwZV9yZWxlYXNlKGRldmljZSk7CiAgcHV0X2RldmljZToKIAl0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC00MDMsMTAgKzQwNywxMiBAQAogdGFwZWJsb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKIAlzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSA9IGRpc2stPnByaXZhdGVfZGF0YTsKLQorIAorCWxvY2tfa2VybmVsKCk7CiAJdGFwZV9zdGF0ZV9zZXQoZGV2aWNlLCBUU19JTl9VU0UpOwogCXRhcGVfcmVsZWFzZShkZXZpY2UpOwogCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3cmVxLmMKaW5kZXggN2YyMDZlZC4uZDE1ZjhiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dyZXEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd3JlcS5jCkBAIC0zOCw5ICszOCwxMyBAQAogewogCXN0cnVjdCBjY3dfcmVxdWVzdCAqcmVxID0gJmNkZXYtPnByaXZhdGUtPnJlcTsKIAorCWlmICghcmVxLT5zaW5nbGVwYXRoKSB7CisJCXJlcS0+bWFzayA9IDA7CisJCWdvdG8gb3V0OworCX0KIAlyZXEtPnJldHJpZXMJPSByZXEtPm1heHJldHJpZXM7CiAJcmVxLT5tYXNrCT0gbHBtX2FkanVzdChyZXEtPm1hc2sgPj49IDEsIHJlcS0+bHBtKTsKLQorb3V0OgogCXJldHVybiByZXEtPm1hc2s7CiB9CiAKQEAgLTExMyw4ICsxMTcsMTIgQEAKIHsKIAlzdHJ1Y3QgY2N3X3JlcXVlc3QgKnJlcSA9ICZjZGV2LT5wcml2YXRlLT5yZXE7CiAKLQkvKiBUcnkgYWxsIHBhdGhzIHR3aWNlIHRvIGNvdW50ZXIgbGluayBmbGFwcGluZy4gKi8KLQlyZXEtPm1hc2sJPSAweDgwODA7CisJaWYgKHJlcS0+c2luZ2xlcGF0aCkgeworCQkvKiBUcnkgYWxsIHBhdGhzIHR3aWNlIHRvIGNvdW50ZXIgbGluayBmbGFwcGluZy4gKi8KKwkJcmVxLT5tYXNrID0gMHg4MDgwOworCX0gZWxzZQorCQlyZXEtPm1hc2sgPSByZXEtPmxwbTsKKwogCXJlcS0+cmV0cmllcwk9IHJlcS0+bWF4cmV0cmllczsKIAlyZXEtPm1hc2sJPSBscG1fYWRqdXN0KHJlcS0+bWFzaywgcmVxLT5scG0pOwogCXJlcS0+ZHJjCT0gMDsKQEAgLTE4Miw2ICsxOTAsOCBAQAogCQkvKiBBc2sgdGhlIGRyaXZlciB3aGF0IHRvIGRvICovCiAJCWlmIChjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT51Y19oYW5kbGVyKSB7CiAJCQl0b2RvID0gY2Rldi0+ZHJ2LT51Y19oYW5kbGVyKGNkZXYsIGxjaXJiKTsKKwkJCUNJT19UUkFDRV9FVkVOVCgyLCAidWNfcmVzcG9uc2UiKTsKKwkJCUNJT19IRVhfRVZFTlQoMiwgJnRvZG8sIHNpemVvZih0b2RvKSk7CiAJCQlzd2l0Y2ggKHRvZG8pIHsKIAkJCWNhc2UgVUNfVE9ET19SRVRSWToKIAkJCQlyZXR1cm4gSU9fU1RBVFVTX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwppbmRleCA0MDdkMGU5Li40Y2JiMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNoc2MuaCIKIAogc3RhdGljIHZvaWQgKnNlaV9wYWdlOworc3RhdGljIERFRklORV9TUElOTE9DSyhzaW9zbF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2RhX2xvY2spOwogCiAvKioKQEAgLTQ4LDYgKzQ5LDcgQEAKIAljYXNlIDB4MDAwNzoKIAljYXNlIDB4MDAwODoKIAljYXNlIDB4MDAwYToKKwljYXNlIDB4MDEwNDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJY2FzZSAweDAwMDQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTk3NCwzICs5NzYsNDkgQEAKIAlyZXR1cm4gKHJyLT5yZXNwb25zZS5jb2RlID09IDB4MDAwMSkgPyAwIDogLUVJTzsKIH0KIAorc3RhdGljIHN0cnVjdCB7CisJc3RydWN0IGNoc2NfaGVhZGVyIHJlcXVlc3Q7CisJdTMyIHdvcmQxOworCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNpZDsKKwl1MzIgd29yZDM7CisJc3RydWN0IGNoc2NfaGVhZGVyIHJlc3BvbnNlOworCXUzMiB3b3JkWzExXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNpb3NsX2FyZWEgX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKKworaW50IGNoc2Nfc2lvc2woc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2NvZGU7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNpb3NsX2xvY2ssIGZsYWdzKTsKKwltZW1zZXQoJnNpb3NsX2FyZWEsIDAsIHNpemVvZihzaW9zbF9hcmVhKSk7CisJc2lvc2xfYXJlYS5yZXF1ZXN0Lmxlbmd0aCA9IDB4MDAxMDsKKwlzaW9zbF9hcmVhLnJlcXVlc3QuY29kZSA9IDB4MDA0NjsKKwlzaW9zbF9hcmVhLndvcmQxID0gMHg4MDAwMDAwMDsKKwlzaW9zbF9hcmVhLnNpZCA9IHNjaGlkOworCisJY2NvZGUgPSBjaHNjKCZzaW9zbF9hcmVhKTsKKwlpZiAoY2NvZGUgPiAwKSB7CisJCWlmIChjY29kZSA9PSAzKQorCQkJcmMgPSAtRU5PREVWOworCQllbHNlCisJCQlyYyA9IC1FQlVTWTsKKwkJQ0lPX01TR19FVkVOVCgyLCAiY2hzYzogY2hzYyBmYWlsZWQgZm9yIDAuJXguJTA0eCAoY2NvZGU9JWQpXG4iLAorCQkJICAgICAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vLCBjY29kZSk7CisJCWdvdG8gb3V0OworCX0KKwlyYyA9IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShzaW9zbF9hcmVhLnJlc3BvbnNlLmNvZGUpOworCWlmIChyYykKKwkJQ0lPX01TR19FVkVOVCgyLCAiY2hzYzogc2lvc2wgZmFpbGVkIGZvciAwLiV4LiUwNHggKHJjPSUwNHgpXG4iLAorCQkJICAgICAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vLAorCQkJICAgICAgc2lvc2xfYXJlYS5yZXNwb25zZS5jb2RlKTsKKwllbHNlCisJCUNJT19NU0dfRVZFTlQoNCwgImNoc2M6IHNpb3NsIHN1Y2NlZWRlZCBmb3IgMC4leC4lMDR4XG4iLAorCQkJICAgICAgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaW9zbF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjaHNjX3Npb3NsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5oIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKaW5kZXggMzdhYTYxMS4uNTQ1MzAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjLmgKQEAgLTgwLDQgKzgwLDYgQEAKIAogaW50IGNoc2NfZXJyb3JfZnJvbV9yZXNwb25zZShpbnQgcmVzcG9uc2UpOwogCitpbnQgY2hzY19zaW9zbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNmQyMjlmMy4uNTFiZDM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiaW9hc20uaCIKICNpbmNsdWRlICJpb19zY2guaCIKICNpbmNsdWRlICJibGFja2xpc3QuaCIKKyNpbmNsdWRlICJjaHNjLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCByZWNvdmVyeV90aW1lcjsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVjb3ZlcnlfbG9jayk7CkBAIC00ODYsOSArNDg3LDExIEBACiAJCXNwaW5fbG9ja19pcnEoY2Rldi0+Y2N3bG9jayk7CiAJCWNjd19kZXZpY2Vfc2NoZWRfdG9kbyhjZGV2LCBDREVWX1RPRE9fVU5SRUdfRVZBTCk7CiAJCXNwaW5fdW5sb2NrX2lycShjZGV2LT5jY3dsb2NrKTsKLQl9IGVsc2UgaWYgKGNkZXYtPm9ubGluZSAmJiBjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKKwkJcmV0dXJuIDA7CisJfQorCWlmIChjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKIAkJcmV0dXJuIGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgb25saW5lX3N0b3JlX3JlY29nX2FuZF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCkBAIC01MDUsOCArNTA4LDggQEAKIAkJCXJldHVybiAtRUFHQUlOOwogCX0KIAlpZiAoY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29ubGluZSkKLQkJY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOwotCXJldHVybiAwOworCQlyZXR1cm4gY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9oYW5kbGVfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgZm9yY2UpCkBAIC01OTgsNiArNjAxLDI1IEBACiAJfQogfQogCitzdGF0aWMgc3NpemVfdAoraW5pdGlhdGVfbG9nZ2luZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoZGV2KTsKKwlpbnQgcmM7CisKKwlyYyA9IGNoc2Nfc2lvc2woc2NoLT5zY2hpZCk7CisJaWYgKHJjIDwgMCkgeworCQlwcl93YXJuaW5nKCJMb2dnaW5nIGZvciBzdWJjaGFubmVsIDAuJXguJTA0eCBmYWlsZWQgd2l0aCAiCisJCQkgICAiZXJybm89JWRcbiIsCisJCQkgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJcHJfbm90aWNlKCJMb2dnaW5nIGZvciBzdWJjaGFubmVsIDAuJXguJTA0eCB3YXMgdHJpZ2dlcmVkXG4iLAorCQkgIHNjaC0+c2NoaWQuc3NpZCwgc2NoLT5zY2hpZC5zY2hfbm8pOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIERFVklDRV9BVFRSKGNocGlkcywgMDQ0NCwgY2hwaWRzX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHBpbXBhbXBvbSwgMDQ0NCwgcGltcGFtcG9tX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRldnR5cGUsIDA0NDQsIGRldnR5cGVfc2hvdywgTlVMTCk7CkBAIC02MDUsMTAgKzYyNywxMiBAQAogc3RhdGljIERFVklDRV9BVFRSKG1vZGFsaWFzLCAwNDQ0LCBtb2RhbGlhc19zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihvbmxpbmUsIDA2NDQsIG9ubGluZV9zaG93LCBvbmxpbmVfc3RvcmUpOwogc3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJpbGl0eSwgMDQ0NCwgYXZhaWxhYmxlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGxvZ2dpbmcsIDAyMDAsIE5VTEwsIGluaXRpYXRlX2xvZ2dpbmcpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaW9fc3ViY2hhbm5lbF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9jaHBpZHMuYXR0ciwKIAkmZGV2X2F0dHJfcGltcGFtcG9tLmF0dHIsCisJJmRldl9hdHRyX2xvZ2dpbmcuYXR0ciwKIAlOVUxMLAogfTsKIApAQCAtMjAzNiw2ICsyMDYwLDIxIEBACiAJfQogfQogCisvKioKKyAqIGNjd19kZXZpY2Vfc2lvc2woKSAtIGluaXRpYXRlIGxvZ2dpbmcKKyAqIEBjZGV2OiBjY3cgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGludm9rZSBtb2RlbC1kZXBlbmRlbnQgbG9nZ2luZyB3aXRoaW4gdGhlIGNoYW5uZWwKKyAqIHN1YnN5c3RlbS4KKyAqLworaW50IGNjd19kZXZpY2Vfc2lvc2woc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisKKwlyZXR1cm4gY2hzY19zaW9zbChzY2gtPnNjaGlkKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNjd19kZXZpY2Vfc2lvc2wpOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBFWFBPUlRfU1lNQk9MKGNjd19kZXZpY2Vfc2V0X29ubGluZSk7CiBFWFBPUlRfU1lNQk9MKGNjd19kZXZpY2Vfc2V0X29mZmxpbmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCmluZGV4IDZmYWNiNTQuLjgyYTVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKQEAgLTIwOCw2ICsyMDgsNyBAQAogCXJlcS0+dGltZW91dAk9IFBHSURfVElNRU9VVDsKIAlyZXEtPm1heHJldHJpZXMJPSBQR0lEX1JFVFJJRVM7CiAJcmVxLT5scG0JPSAweDgwOworCXJlcS0+c2luZ2xlcGF0aAk9IDE7CiAJcmVxLT5jYWxsYmFjawk9IHNwaWRfY2FsbGJhY2s7CiAJc3BpZF9kbyhjZGV2KTsKIH0KQEAgLTQyMCw2ICs0MjEsNyBAQAogCXJlcS0+dGltZW91dAk9IFBHSURfVElNRU9VVDsKIAlyZXEtPm1heHJldHJpZXMJPSBQR0lEX1JFVFJJRVM7CiAJcmVxLT5scG0JPSAweDgwOworCXJlcS0+c2luZ2xlcGF0aAk9IDE7CiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLnBncm91cCkgewogCQlDSU9fVFJBQ0VfRVZFTlQoNCwgInNuaWQiKTsKIAkJQ0lPX0hFWF9FVkVOVCg0LCBkZXZpZCwgc2l6ZW9mKCpkZXZpZCkpOwpAQCAtNTA3LDYgKzUwOSw3IEBACiAJcmVxLT50aW1lb3V0CT0gUEdJRF9USU1FT1VUOwogCXJlcS0+bWF4cmV0cmllcwk9IFBHSURfUkVUUklFUzsKIAlyZXEtPmxwbQk9IHNjaC0+c2NoaWIucG1jdy5wYW0gJiBzY2gtPm9wbTsKKwlyZXEtPnNpbmdsZXBhdGgJPSAxOwogCXJlcS0+Y2FsbGJhY2sJPSBkaXNiYW5kX2NhbGxiYWNrOwogCWZuID0gU1BJRF9GVU5DX0RJU0JBTkQ7CiAJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLm1wYXRoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaCBiL2RyaXZlcnMvczM5MC9jaW8vaW9fc2NoLmgKaW5kZXggYjljZTcxMi4uNDY5ZWY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9pb19zY2guaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2lvX3NjaC5oCkBAIC05MiwxMSArOTIsMTIgQEAKICAqIEBmaWx0ZXI6IG9wdGlvbmFsIGNhbGxiYWNrIHRvIGFkanVzdCByZXF1ZXN0IHN0YXR1cyBiYXNlZCBvbiBJUkIgZGF0YQogICogQGNhbGxiYWNrOiBmaW5hbCBjYWxsYmFjawogICogQGRhdGE6IHVzZXItZGVmaW5lZCBwb2ludGVyIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzCisgKiBAc2luZ2xlcGF0aDogaWYgc2V0LCB1c2Ugb25seSBvbmUgcGF0aCBmcm9tIEBscG0gcGVyIHN0YXJ0IEkvTworICogQGNhbmNlbDogbm9uLXplcm8gaWYgcmVxdWVzdCB3YXMgY2FuY2VsbGVkCisgKiBAZG9uZTogbm9uLXplcm8gaWYgcmVxdWVzdCB3YXMgZmluaXNoZWQKICAqIEBtYXNrOiBjdXJyZW50IHBhdGggbWFzawogICogQHJldHJpZXM6IGN1cnJlbnQgbnVtYmVyIG9mIHJldHJpZXMKICAqIEBkcmM6IGRlbGF5ZWQgcmV0dXJuIGNvZGUKLSAqIEBjYW5jZWw6IG5vbi16ZXJvIGlmIHJlcXVlc3Qgd2FzIGNhbmNlbGxlZAotICogQGRvbmU6IG5vbi16ZXJvIGlmIHJlcXVlc3Qgd2FzIGZpbmlzaGVkCiAgKi8KIHN0cnVjdCBjY3dfcmVxdWVzdCB7CiAJc3RydWN0IGNjdzEgKmNwOwpAQCAtMTA4LDEyICsxMDksMTMgQEAKIAkJCQkgZW51bSBpb19zdGF0dXMpOwogCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNjd19kZXZpY2UgKiwgdm9pZCAqLCBpbnQpOwogCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgaW50IHNpbmdsZXBhdGg6MTsKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIHVzZWQgaW50ZXJuYWxseS4gKi8KKwl1bnNpZ25lZCBpbnQgY2FuY2VsOjE7CisJdW5zaWduZWQgaW50IGRvbmU6MTsKIAl1MTYgbWFzazsKIAl1MTYgcmV0cmllczsKIAlpbnQgZHJjOwotCWludCBjYW5jZWw6MTsKLQlpbnQgZG9uZToxOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jCmluZGV4IDEzNzY4ODcuLjRkMmVhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYwpAQCAtMTgwLDYgKzE4MCwxMyBAQAogCQlnb3RvIGZhaWxfcHV0X2RyaXZlcjsKIAl9CiAKKwkvKiBjb252ZXJ0IHNlbmRlciB0byB1cHBlcmNhc2UgY2hhcmFjdGVycyAqLworCWlmIChzZW5kZXIpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihzZW5kZXIpOworCQl3aGlsZSAobGVuLS0pCisJCQlzZW5kZXJbbGVuXSA9IHRvdXBwZXIoc2VuZGVyW2xlbl0pOworCX0KKwogCS8qIHJlZ2lzdGVyIHdpdGggdGhlIHNtc2dpdWN2IGRldmljZSBkcml2ZXIgKi8KIAlyYyA9IHNtc2dfcmVnaXN0ZXJfY2FsbGJhY2soU01TR19QUkVGSVgsIHNtc2dfYXBwX2NhbGxiYWNrKTsKIAlpZiAocmMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYyBiL2RyaXZlcnMvc2NzaS81M2M3MDAuYwppbmRleCA4MGRjM2FjLi44OWZjMWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKKysrIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCkBAIC0zMDksOSArMzA5LDYgQEAKIAlob3N0ZGF0YS0+bXNnaW4gPSBtZW1vcnkgKyBNU0dJTl9PRkZTRVQ7CiAJaG9zdGRhdGEtPm1zZ291dCA9IG1lbW9yeSArIE1TR09VVF9PRkZTRVQ7CiAJaG9zdGRhdGEtPnN0YXR1cyA9IG1lbW9yeSArIFNUQVRVU19PRkZTRVQ7Ci0JLyogYWxsIG9mIHRoZXNlIG9mZnNldHMgYXJlIEwxX0NBQ0hFX0JZVEVTIHNlcGFyYXRlZC4gIEl0IGlzIGZhdGFsCi0JICogaWYgdGhpcyBpc24ndCBzdWZmaWNpZW50IHNlcGFyYXRpb24gdG8gYXZvaWQgZG1hIGZsdXNoaW5nIGlzc3VlcyAqLwotCUJVR19PTighZG1hX2lzX2NvbnNpc3RlbnQoaG9zdGRhdGEtPmRldiwgcFNjcmlwdCkgJiYgTDFfQ0FDSEVfQllURVMgPCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpKTsKIAlob3N0ZGF0YS0+c2xvdHMgPSAoc3RydWN0IE5DUl83MDBfY29tbWFuZF9zbG90ICopKG1lbW9yeSArIFNMT1RTX09GRlNFVCk7CiAJaG9zdGRhdGEtPmRldiA9IGRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCAxNTgyODRmLi42NDY2MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtMTg1Myw3ICsxODUzLDcgQEAKIAogY29uZmlnIFNDU0lfUE1DUkFJRAogCXRyaXN0YXRlICJQTUMgU0lFUlJBIExpbnV4IE1heFJBSUQgYWRhcHRlciBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBTQ1NJICYmIE5FVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBQTUMgU0lFUlJBIE1heFJBSUQgYWRhcHRlcnMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCmluZGV4IGY5MmRhOWYuLjVkMmYxNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwpAQCAtMTg1Nyw3ICsxODU3LDkgQEAKICNlbmRpZgogCS8qIEtMTCBNYXkgbmVlZCBlb3AgYW5kIHBhcml0eSBpbiA1M2M0MDAgKi8KIAlpZiAoaG9zdGRhdGEtPmZsYWdzICYgRkxBR19OQ1I1M0M0MDApCi0JCU5DUjUzODBfd3JpdGUoTU9ERV9SRUcsIE1SX0JBU0UgfCBNUl9ETUFfTU9ERSB8IE1SX0VOQUJMRV9QQVJfQ0hFQ0sgfCBNUl9FTkFCTEVfUEFSX0lOVFIgfCBNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9ETUFfTU9ERSB8IE1SX01PTklUT1JfQlNZKTsKKwkJTkNSNTM4MF93cml0ZShNT0RFX1JFRywgTVJfQkFTRSB8IE1SX0RNQV9NT0RFIHwKKwkJCQlNUl9FTkFCTEVfUEFSX0NIRUNLIHwgTVJfRU5BQkxFX1BBUl9JTlRSIHwKKwkJCQlNUl9FTkFCTEVfRU9QX0lOVFIgfCBNUl9NT05JVE9SX0JTWSk7CiAJZWxzZQogCQlOQ1I1MzgwX3dyaXRlKE1PREVfUkVHLCBNUl9CQVNFIHwgTVJfRE1BX01PREUpOwogI2VuZGlmCQkJCS8qIGRlZiBSRUFMX0RNQSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL3J4LmMKaW5kZXggMDQwNTdhYi4uODRkNzdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvcnguYworKysgYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9yeC5jCkBAIC0zNTIsOSArMzUyLDggQEAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgUE9TVFNUQVRVUyksCiAJCSAgcG9zdCwgcGFkZHIpOwogCQlpZiAobGlrZWx5KChidWZmZXJbMF0gPT0gJzAnKSAmJiAoKGJ1ZmZlclsxXSA9PSAneCcpIHx8IChidWZmZXJbMV0gPT0gJ1gnKSkpKSB7Ci0JCQlyZXQgPSAoYnVmZmVyWzJdIDw9ICc5JykgPyAoYnVmZmVyWzJdIC0gJzAnKSA6IChidWZmZXJbMl0gLSAnQScgKyAxMCk7Ci0JCQlyZXQgPDw9IDQ7Ci0JCQlyZXQgKz0gKGJ1ZmZlclszXSA8PSAnOScpID8gKGJ1ZmZlclszXSAtICcwJykgOiAoYnVmZmVyWzNdIC0gJ0EnICsgMTApOworCQkJcmV0ID0gKGhleF90b19iaW4oYnVmZmVyWzJdKSA8PCA0KSArCisJCQkJaGV4X3RvX2JpbihidWZmZXJbM10pOwogCQl9CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LT5wZGV2LCA1MTIsIGJ1ZmZlciwgYmFkZHIpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuYyBiL2RyaXZlcnMvc2NzaS9haGExNTQyLmMKaW5kZXggMmE4Y2YxMy4uNGY3ODVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoYTE1NDIuYworKysgYi9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jCkBAIC01MiwyMiArNTIsNiBAQAogI2RlZmluZSBTQ1NJX0JVRl9QQShhZGRyZXNzKQlpc2FfdmlydF90b19idXMoYWRkcmVzcykKICNkZWZpbmUgU0NTSV9TR19QQShzZ2VudCkJKGlzYV9wYWdlX3RvX2J1cyhzZ19wYWdlKChzZ2VudCkpKSArIChzZ2VudCktPm9mZnNldCkKIAotc3RhdGljIHZvaWQgQkFEX1NHX0RNQShTY3NpX0NtbmQgKiBTQ3BudCwKLQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dwLAotCQkgICAgICAgaW50IG5zZWcsCi0JCSAgICAgICBpbnQgYmFkc2VnKQotewotCXByaW50ayhLRVJOX0NSSVQgInNncG50WyVkOiVkXSBwYWdlICVwLzB4JWxseCBsZW5ndGggJXVcbiIsCi0JICAgICAgIGJhZHNlZywgbnNlZywgc2dfdmlydChzZ3ApLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKVNDU0lfU0dfUEEoc2dwKSwKLQkgICAgICAgc2dwLT5sZW5ndGgpOwotCi0JLyoKLQkgKiBOb3Qgc2FmZSB0byBjb250aW51ZS4KLQkgKi8KLQlwYW5pYygiQnVmZmVyIGF0IHBoeXNpY2FsIGFkZHJlc3MgPiAxNk1iIHVzZWQgZm9yIGFoYTE1NDIiKTsKLX0KLQogI2luY2x1ZGU8bGludXgvc3RhdC5oPgogCiAjaWZkZWYgREVCVUcKQEAgLTY5MSw4ICs2NzUsNiBAQAogCQl9CiAJCXNjc2lfZm9yX2VhY2hfc2coU0NwbnQsIHNnLCBzZ19jb3VudCwgaSkgewogCQkJYW55MnNjc2koY3B0cltpXS5kYXRhcHRyLCBTQ1NJX1NHX1BBKHNnKSk7Ci0JCQlpZiAoU0NTSV9TR19QQShzZykgKyBzZy0+bGVuZ3RoIC0gMSA+IElTQV9ETUFfVEhSRVNIT0xEKQotCQkJCUJBRF9TR19ETUEoU0NwbnQsIHNjc2lfc2dsaXN0KFNDcG50KSwgc2dfY291bnQsIGkpOwogCQkJYW55MnNjc2koY3B0cltpXS5kYXRhbGVuLCBzZy0+bGVuZ3RoKTsKIAkJfTsKIAkJYW55MnNjc2koY2NiW21ib10uZGF0YWxlbiwgc2dfY291bnQgKiBzaXplb2Yoc3RydWN0IGNoYWluKSk7CkBAIC0xMTMzLDE2ICsxMTE1LDkgQEAKIAkJCQlyZWxlYXNlX3JlZ2lvbihiYXNlc1tpbmR4XSwgNCk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQkvKiBGb3Igbm93IHdlIGRvIHRoaXMgLSB1bnRpbCBrbWFsbG9jIGlzIG1vcmUgaW50ZWxsaWdlbnQKLQkJCSAgIHdlIGFyZSByZXNpZ25lZCB0byBzdHVwaWQgaGFja3MgbGlrZSB0aGlzICovCi0JCQlpZiAoU0NTSV9CVUZfUEEoc2hwbnQpID49IElTQV9ETUFfVEhSRVNIT0xEKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGFkZHJlc3MgZm9yIHNocG50IHdpdGggMTU0Mi5cbiIpOwotCQkJCWdvdG8gdW5yZWdpc3RlcjsKLQkJCX0KIAkJCWlmICghYWhhMTU0Ml90ZXN0X3BvcnQoYmFzZXNbaW5keF0sIHNocG50KSkKIAkJCQlnb3RvIHVucmVnaXN0ZXI7CiAKLQogCQkJYmFzZV9pbyA9IGJhc2VzW2luZHhdOwogCiAJCQkvKiBTZXQgdGhlIEJ1cyBvbi9vZmYtdGltZXMgYXMgbm90IHRvIHJ1aW4gZmxvcHB5IHBlcmZvcm1hbmNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljOTR4eC9haWM5NHh4X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCmluZGV4IDI0YWMyMzEuLjNiN2U4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM5NHh4L2FpYzk0eHhfaW5pdC5jCkBAIC02ODgsOSArNjg4LDkgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYXNkX3Nhc19waHkgICAqKnNhc19waHlzID0KLQkJa21hbGxvYyhBU0RfTUFYX1BIWVMgKiBzaXplb2Yoc3RydWN0IGFzZF9zYXNfcGh5KSwgR0ZQX0tFUk5FTCk7CisJCWtjYWxsb2MoQVNEX01BWF9QSFlTLCBzaXplb2YoKnNhc19waHlzKSwgR0ZQX0tFUk5FTCk7CiAJc3RydWN0IGFzZF9zYXNfcG9ydCAgKipzYXNfcG9ydHMgPQotCQlrbWFsbG9jKEFTRF9NQVhfUEhZUyAqIHNpemVvZihzdHJ1Y3QgYXNkX3Nhc19wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWtjYWxsb2MoQVNEX01BWF9QSFlTLCBzaXplb2YoKnNhc19wb3J0cyksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFzYXNfcGh5cyB8fCAhc2FzX3BvcnRzKSB7CiAJCWtmcmVlKHNhc19waHlzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwppbmRleCAwN2ZkZmU1Li5hNGUwNGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCkBAIC0xOTIsNyArMTkyLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfcmVhZCIsCiAJCS5tb2RlID0gU19JUlVTUiAsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS5yZWFkID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX3JlYWQsCkBAIC0yMDIsNyArMjAxLDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibXVfd3JpdGUiLAogCQkubW9kZSA9IFNfSVdVU1IsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnNpemUgPSAxMDMyLAogCS53cml0ZSA9IGFyY21zcl9zeXNmc19pb3BfbWVzc2FnZV93cml0ZSwKQEAgLTIxMiw3ICsyMTAsNiBAQAogCS5hdHRyID0gewogCQkubmFtZSA9ICJtdV9jbGVhciIsCiAJCS5tb2RlID0gU19JV1VTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IDEsCiAJLndyaXRlID0gYXJjbXNyX3N5c2ZzX2lvcF9tZXNzYWdlX2NsZWFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYwppbmRleCBmMDkzM2Q4Li43Njg2N2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BvcnQuYwpAQCAtMTMxMCw3ICsxMzEwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEJGSV9GQ1BPUlRfSTJIX0RJU0FCTEVfUlNQOgotCQlpZiAoZmNwb3J0LT5tc2d0YWcgPT0gaTJobXNnLnBlbmFibGVfcnNwLT5tc2d0YWcpCisJCWlmIChmY3BvcnQtPm1zZ3RhZyA9PSBpMmhtc2cucGRpc2FibGVfcnNwLT5tc2d0YWcpCiAJCQliZmFfc21fc2VuZF9ldmVudChmY3BvcnQsIEJGQV9GQ1BPUlRfU01fRldSU1ApOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwppbmRleCA2NzgxMjBiLi42ZWY4N2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYworKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKIAlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOwogCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOwotCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHdxKTsKIAlpbnQgICAgICAgICAgICAgcmMgPSBTVUNDRVNTOwogCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKIAllbnVtIGJmaV90c2tpbV9zdGF0dXMgdGFza19zdGF0dXM7CkBAIC0zNTMsNyArMzUzLDcgQEAKIAlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOwogCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKIAl1MzIgICAgICAgIGksIHJjLCBlcnJfY250ID0gMDsKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh3cSk7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQURfT05TVEFDSyh3cSk7CiAJZW51bSBiZmlfdHNraW1fc3RhdHVzIHRhc2tfc3RhdHVzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oCmluZGV4IDlhZGU2OGEuLjc0ZWE2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mY3AuaAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpZm5kZWYgX19GQ1BQUk9UT19IX18KICNkZWZpbmUgX19GQ1BQUk9UT19IX18KIAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPHByb3RvY29sL3Njc2kuaD4KIAogI3ByYWdtYSBwYWNrKDEpCkBAIC0xMDIsOSArMTAzLDYgQEAKIC8qCiAgKiBUYXNrIG1hbmFnZW1lbnQgZmxhZ3MgZmllbGQgLSBvbmx5IG9uZSBiaXQgc2hhbGwgYmUgc2V0CiAgKi8KLSNpZm5kZWYgQklUCi0jZGVmaW5lIEJJVChfeCkJKDEgPDwgKF94KSkKLSNlbmRpZgogZW51bSBmY3BfdG1fY21uZHsKIAlGQ1BfVE1fQUJPUlRfVEFTS19TRVQJPSBCSVQoMSksCiAJRkNQX1RNX0NMRUFSX1RBU0tfU0VUCT0gQklUKDIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvYm54MmkvS2NvbmZpZwppbmRleCAxZTlmNzE0Li40NWE2MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvS2NvbmZpZwpAQCAtMSwxMCArMSwxMSBAQAogY29uZmlnIFNDU0lfQk5YMl9JU0NTSQogCXRyaXN0YXRlICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgaVNDU0kgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVAorCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFNDU0lfSVNDU0lfQVRUUlMKIAlzZWxlY3QgTkVUREVWSUNFUwogCXNlbGVjdCBORVRERVZfMTAwMAogCXNlbGVjdCBDTklDCi0JZGVwZW5kcyBvbiBQQ0kKIAktLS1oZWxwLS0tCiAJVGhpcyBkcml2ZXIgc3VwcG9ydHMgaVNDU0kgb2ZmbG9hZCBmb3IgdGhlIEJyb2FkY29tIE5ldFh0cmVtZSBJSQogCWRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IDQ3OTlkNDMuLmQ2NTMyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC04NCwxMCArODQsMTYgQEAKIH07CiAvLyBtb2R1bGVfcGFyYW1fc3RyaW5nX2FycmF5KHZlbmRvcl9sYWJlbHMsIE5VTEwsIDA0NDQpOwogCi0jZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pICAgIGlmIChkZWJ1ZykgXAotICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBjaC0+bmFtZSAsICMjIGFyZykKLSNkZWZpbmUgdnByaW50ayhmbXQsIGFyZy4uLikgICAgaWYgKHZlcmJvc2UpIFwKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCBjaC0+bmFtZSAsICMjIGFyZykKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZy4uLikJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChkZWJ1ZykJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBjaC0+bmFtZSwgIyNhcmcpOwkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgVlBSSU5USyhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh2ZXJib3NlKQkJCQkJCQlcCisJCXByaW50ayhsZXZlbCAiJXM6ICIgZm10LCBjaC0+bmFtZSwgIyNhcmcpOwkJXAorfSB3aGlsZSAoMCkKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xODYsNyArMTkyLDcgQEAKICByZXRyeToKIAllcnJubyA9IDA7CiAJaWYgKGRlYnVnKSB7Ci0JCWRwcmludGsoImNvbW1hbmQ6ICIpOworCQlEUFJJTlRLKCJjb21tYW5kOiAiKTsKIAkJX19zY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAl9CiAKQEAgLTE5NCw3ICsyMDAsNyBAQAogCQkJCSAgYnVmbGVuZ3RoLCAmc3NoZHIsIHRpbWVvdXQgKiBIWiwKIAkJCQkgIE1BWF9SRVRSSUVTLCBOVUxMKTsKIAotCWRwcmludGsoInJlc3VsdDogMHgleFxuIixyZXN1bHQpOworCURQUklOVEsoInJlc3VsdDogMHgleFxuIixyZXN1bHQpOwogCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKSB7CiAJCWlmIChkZWJ1ZykKIAkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNoLT5uYW1lLCAmc3NoZHIpOwpAQCAtMjUwLDcgKzI1Niw3IEBACiAJY21kWzldID0gMjU1OwogCWlmICgwID09IChyZXN1bHQgPSBjaF9kb19zY3NpKGNoLCBjbWQsIGJ1ZmZlciwgMjU2LCBETUFfRlJPTV9ERVZJQ0UpKSkgewogCQlpZiAoKChidWZmZXJbMTZdIDw8IDgpIHwgYnVmZmVyWzE3XSkgIT0gZWxlbSkgewotCQkJZHByaW50aygiYXNrZWQgZm9yIGVsZW1lbnQgMHglMDJ4LCBnb3QgMHglMDJ4XG4iLAorCQkJRFBSSU5USygiYXNrZWQgZm9yIGVsZW1lbnQgMHglMDJ4LCBnb3QgMHglMDJ4XG4iLAogCQkJCWVsZW0sKGJ1ZmZlclsxNl0gPDwgOCkgfCBidWZmZXJbMTddKTsKIAkJCWtmcmVlKGJ1ZmZlcik7CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTI1OSwxMCArMjY1LDEwIEBACiAJfSBlbHNlIHsKIAkJaWYgKGNoLT52b2x0YWdzKSB7CiAJCQljaC0+dm9sdGFncyA9IDA7Ci0JCQl2cHJpbnRrKCJkZXZpY2UgaGFzIG5vIHZvbHVtZSB0YWcgc3VwcG9ydFxuIik7CisJCQlWUFJJTlRLKEtFUk5fSU5GTywgImRldmljZSBoYXMgbm8gdm9sdW1lIHRhZyBzdXBwb3J0XG4iKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQkJZHByaW50aygiUkVBRCBFTEVNRU5UIFNUQVRVUyBmb3IgZWxlbWVudCAweCV4IGZhaWxlZFxuIixlbGVtKTsKKwkJRFBSSU5USygiUkVBRCBFTEVNRU5UIFNUQVRVUyBmb3IgZWxlbWVudCAweCV4IGZhaWxlZFxuIixlbGVtKTsKIAl9CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMjc0LDEyICsyODAsMTIgQEAKIAlpbnQgZXJyOwogCXVfY2hhciBjbWRbNl07CiAKLQl2cHJpbnRrKCJJTklUSUFMSVpFIEVMRU1FTlQgU1RBVFVTLCBtYXkgdGFrZSBzb21lIHRpbWUgLi4uXG4iKTsKKwlWUFJJTlRLKEtFUk5fSU5GTywgIklOSVRJQUxJWkUgRUxFTUVOVCBTVEFUVVMsIG1heSB0YWtlIHNvbWUgdGltZSAuLi5cbiIpOwogCW1lbXNldChjbWQsMCxzaXplb2YoY21kKSk7CiAJY21kWzBdID0gSU5JVElBTElaRV9FTEVNRU5UX1NUQVRVUzsKIAljbWRbMV0gPSBjaC0+ZGV2aWNlLT5sdW4gPDwgNTsKIAllcnIgPSBjaF9kb19zY3NpKGNoLCBjbWQsIE5VTEwsIDAsIERNQV9OT05FKTsKLQl2cHJpbnRrKCIuLi4gZmluaXNoZWRcbiIpOworCVZQUklOVEsoS0VSTl9JTkZPLCAiLi4uIGZpbmlzaGVkXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMjIsMjAgKzMyOCwyMCBAQAogCQkJKGJ1ZmZlcltidWZmZXJbM10rMThdIDw8IDgpIHwgYnVmZmVyW2J1ZmZlclszXSsxOV07CiAJCWNoLT5jb3VudHNbQ0hFVF9EVF0gPQogCQkJKGJ1ZmZlcltidWZmZXJbM10rMjBdIDw8IDgpIHwgYnVmZmVyW2J1ZmZlclszXSsyMV07Ci0JCXZwcmludGsoInR5cGUgIzEgKG10KTogMHgleCslZCBbbWVkaXVtIHRyYW5zcG9ydF1cbiIsCisJCVZQUklOVEsoS0VSTl9JTkZPLCAidHlwZSAjMSAobXQpOiAweCV4KyVkIFttZWRpdW0gdHJhbnNwb3J0XVxuIiwKIAkJCWNoLT5maXJzdHNbQ0hFVF9NVF0sCiAJCQljaC0+Y291bnRzW0NIRVRfTVRdKTsKLQkJdnByaW50aygidHlwZSAjMiAoc3QpOiAweCV4KyVkIFtzdG9yYWdlXVxuIiwKKwkJVlBSSU5USyhLRVJOX0lORk8sICJ0eXBlICMyIChzdCk6IDB4JXgrJWQgW3N0b3JhZ2VdXG4iLAogCQkJY2gtPmZpcnN0c1tDSEVUX1NUXSwKIAkJCWNoLT5jb3VudHNbQ0hFVF9TVF0pOwotCQl2cHJpbnRrKCJ0eXBlICMzIChpZSk6IDB4JXgrJWQgW2ltcG9ydC9leHBvcnRdXG4iLAorCQlWUFJJTlRLKEtFUk5fSU5GTywgInR5cGUgIzMgKGllKTogMHgleCslZCBbaW1wb3J0L2V4cG9ydF1cbiIsCiAJCQljaC0+Zmlyc3RzW0NIRVRfSUVdLAogCQkJY2gtPmNvdW50c1tDSEVUX0lFXSk7Ci0JCXZwcmludGsoInR5cGUgIzQgKGR0KTogMHgleCslZCBbZGF0YSB0cmFuc2Zlcl1cbiIsCisJCVZQUklOVEsoS0VSTl9JTkZPLCAidHlwZSAjNCAoZHQpOiAweCV4KyVkIFtkYXRhIHRyYW5zZmVyXVxuIiwKIAkJCWNoLT5maXJzdHNbQ0hFVF9EVF0sCiAJCQljaC0+Y291bnRzW0NIRVRfRFRdKTsKIAl9IGVsc2UgewotCQl2cHJpbnRrKCJyZWFkaW5nIGVsZW1lbnQgYWRkcmVzcyBhc3NpZ21lbnQgcGFnZSBmYWlsZWQhXG4iKTsKKwkJVlBSSU5USyhLRVJOX0lORk8sICJyZWFkaW5nIGVsZW1lbnQgYWRkcmVzcyBhc3NpZ21lbnQgcGFnZSBmYWlsZWQhXG4iKTsKIAl9CiAKIAkvKiB2ZW5kb3Igc3BlY2lmaWMgZWxlbWVudCB0eXBlcyAqLwpAQCAtMzQ2LDEzICszNTIsMTMgQEAKIAkJCWNvbnRpbnVlOwogCQljaC0+Zmlyc3RzW0NIRVRfVjEraV0gPSB2ZW5kb3JfZmlyc3RzW2ldOwogCQljaC0+Y291bnRzW0NIRVRfVjEraV0gPSB2ZW5kb3JfY291bnRzW2ldOwotCQl2cHJpbnRrKCJ0eXBlICMlZCAodiVkKTogMHgleCslZCBbJXMsIHZlbmRvciBzcGVjaWZpY11cbiIsCisJCVZQUklOVEsoS0VSTl9JTkZPLCAidHlwZSAjJWQgKHYlZCk6IDB4JXgrJWQgWyVzLCB2ZW5kb3Igc3BlY2lmaWNdXG4iLAogCQkJaSs1LGkrMSx2ZW5kb3JfZmlyc3RzW2ldLHZlbmRvcl9jb3VudHNbaV0sCiAJCQl2ZW5kb3JfbGFiZWxzW2ldKTsKIAl9CiAKIAkvKiBsb29rIHVwIHRoZSBkZXZpY2VzIG9mIHRoZSBkYXRhIHRyYW5zZmVyIGVsZW1lbnRzICovCi0JY2gtPmR0ID0ga21hbGxvYyhjaC0+Y291bnRzW0NIRVRfRFRdKnNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2UpLAorCWNoLT5kdCA9IGtjYWxsb2MoY2gtPmNvdW50c1tDSEVUX0RUXSwgc2l6ZW9mKCpjaC0+ZHQpLAogCQkJIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjaC0+ZHQpIHsKQEAgLTM2NiwyMSArMzcyLDE5IEBACiAJCWlmIChlbGVtIDwgQ0hfRFRfTUFYICAmJiAgLTEgIT0gZHRfaWRbZWxlbV0pIHsKIAkJCWlkICA9IGR0X2lkW2VsZW1dOwogCQkJbHVuID0gZHRfbHVuW2VsZW1dOwotCQkJdnByaW50aygiZHQgMHgleDogW2luc21vZCBvcHRpb25dICIsCisJCQlWUFJJTlRLKEtFUk5fSU5GTywgImR0IDB4JXg6IFtpbnNtb2Qgb3B0aW9uXSAiLAogCQkJCWVsZW0rY2gtPmZpcnN0c1tDSEVUX0RUXSk7CiAJCX0gZWxzZSBpZiAoMCAhPSBjaF9yZWFkX2VsZW1lbnRfc3RhdHVzCiAJCQkgICAoY2gsZWxlbStjaC0+Zmlyc3RzW0NIRVRfRFRdLGRhdGEpKSB7Ci0JCQl2cHJpbnRrKCJkdCAweCV4OiBSRUFEIEVMRU1FTlQgU1RBVFVTIGZhaWxlZFxuIiwKKwkJCVZQUklOVEsoS0VSTl9JTkZPLCAiZHQgMHgleDogUkVBRCBFTEVNRU5UIFNUQVRVUyBmYWlsZWRcbiIsCiAJCQkJZWxlbStjaC0+Zmlyc3RzW0NIRVRfRFRdKTsKIAkJfSBlbHNlIHsKLQkJCXZwcmludGsoImR0IDB4JXg6ICIsZWxlbStjaC0+Zmlyc3RzW0NIRVRfRFRdKTsKKwkJCVZQUklOVEsoS0VSTl9JTkZPLCAiZHQgMHgleDogIixlbGVtK2NoLT5maXJzdHNbQ0hFVF9EVF0pOwogCQkJaWYgKGRhdGFbNl0gJiAweDgwKSB7Ci0JCQkJaWYgKHZlcmJvc2UpCi0JCQkJCXByaW50aygibm90IHRoaXMgU0NTSSBidXNcbiIpOworCQkJCVZQUklOVEsoS0VSTl9DT05ULCAibm90IHRoaXMgU0NTSSBidXNcbiIpOwogCQkJCWNoLT5kdFtlbGVtXSA9IE5VTEw7CiAJCQl9IGVsc2UgaWYgKDAgPT0gKGRhdGFbNl0gJiAweDMwKSkgewotCQkJCWlmICh2ZXJib3NlKQotCQkJCQlwcmludGsoIklEL0xVTiB1bmtub3duXG4iKTsKKwkJCQlWUFJJTlRLKEtFUk5fQ09OVCwgIklEL0xVTiB1bmtub3duXG4iKTsKIAkJCQljaC0+ZHRbZWxlbV0gPSBOVUxMOwogCQkJfSBlbHNlIHsKIAkJCQlpZCAgPSBjaC0+ZGV2aWNlLT5pZDsKQEAgLTM5MCwyMiArMzk0LDE5IEBACiAJCQl9CiAJCX0KIAkJaWYgKC0xICE9IGlkKSB7Ci0JCQlpZiAodmVyYm9zZSkKLQkJCQlwcmludGsoIklEICVpLCBMVU4gJWksICIsaWQsbHVuKTsKKwkJCVZQUklOVEsoS0VSTl9DT05ULCAiSUQgJWksIExVTiAlaSwgIixpZCxsdW4pOwogCQkJY2gtPmR0W2VsZW1dID0KIAkJCQlzY3NpX2RldmljZV9sb29rdXAoY2gtPmRldmljZS0+aG9zdCwKIAkJCQkJCSAgIGNoLT5kZXZpY2UtPmNoYW5uZWwsCiAJCQkJCQkgICBpZCxsdW4pOwogCQkJaWYgKCFjaC0+ZHRbZWxlbV0pIHsKIAkJCQkvKiBzaG91bGQgbm90IGhhcHBlbiAqLwotCQkJCWlmICh2ZXJib3NlKQotCQkJCQlwcmludGsoIkh1aD8gZGV2aWNlIG5vdCBmb3VuZCFcbiIpOworCQkJCVZQUklOVEsoS0VSTl9DT05ULCAiSHVoPyBkZXZpY2Ugbm90IGZvdW5kIVxuIik7CiAJCQl9IGVsc2UgewotCQkJCWlmICh2ZXJib3NlKQotCQkJCQlwcmludGsoIm5hbWU6ICU4LjhzICUxNi4xNnMgJTQuNHNcbiIsCi0JCQkJCSAgICAgICBjaC0+ZHRbZWxlbV0tPnZlbmRvciwKLQkJCQkJICAgICAgIGNoLT5kdFtlbGVtXS0+bW9kZWwsCi0JCQkJCSAgICAgICBjaC0+ZHRbZWxlbV0tPnJldik7CisJCQkJVlBSSU5USyhLRVJOX0NPTlQsICJuYW1lOiAlOC44cyAlMTYuMTZzICU0LjRzXG4iLAorCQkJCQljaC0+ZHRbZWxlbV0tPnZlbmRvciwKKwkJCQkJY2gtPmR0W2VsZW1dLT5tb2RlbCwKKwkJCQkJY2gtPmR0W2VsZW1dLT5yZXYpOwogCQkJfQogCQl9CiAJfQpAQCAtNDIyLDcgKzQyMyw3IEBACiB7CiAJdV9jaGFyICBjbWRbMTBdOwogCi0JZHByaW50aygicG9zaXRpb246IDB4JXhcbiIsZWxlbSk7CisJRFBSSU5USygicG9zaXRpb246IDB4JXhcbiIsZWxlbSk7CiAJaWYgKDAgPT0gdHJhbnMpCiAJCXRyYW5zID0gY2gtPmZpcnN0c1tDSEVUX01UXTsKIAltZW1zZXQoY21kLDAsc2l6ZW9mKGNtZCkpOwpAQCAtNDQxLDcgKzQ0Miw3IEBACiB7CiAJdV9jaGFyICBjbWRbMTJdOwogCi0JZHByaW50aygibW92ZTogMHgleCA9PiAweCV4XG4iLHNyYyxkZXN0KTsKKwlEUFJJTlRLKCJtb3ZlOiAweCV4ID0+IDB4JXhcbiIsc3JjLGRlc3QpOwogCWlmICgwID09IHRyYW5zKQogCQl0cmFucyA9IGNoLT5maXJzdHNbQ0hFVF9NVF07CiAJbWVtc2V0KGNtZCwwLHNpemVvZihjbWQpKTsKQEAgLTQ2Myw3ICs0NjQsNyBAQAogewogCXVfY2hhciAgY21kWzEyXTsKIAotCWRwcmludGsoImV4Y2hhbmdlOiAweCV4ID0+IDB4JXggPT4gMHgleFxuIiwKKwlEUFJJTlRLKCJleGNoYW5nZTogMHgleCA9PiAweCV4ID0+IDB4JXhcbiIsCiAJCXNyYyxkZXN0MSxkZXN0Mik7CiAJaWYgKDAgPT0gdHJhbnMpCiAJCXRyYW5zID0gY2gtPmZpcnN0c1tDSEVUX01UXTsKQEAgLTUxMSw3ICs1MTIsNyBAQAogCWlmICghYnVmZmVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRwcmludGsoIiVzICVzIHZvbHRhZzogMHgleCA9PiBcIiVzXCJcbiIsCisJRFBSSU5USygiJXMgJXMgdm9sdGFnOiAweCV4ID0+IFwiJXNcIlxuIiwKIAkJY2xlYXIgICAgID8gImNsZWFyIiAgICAgOiAic2V0IiwKIAkJYWx0ZXJuYXRlID8gImFsdGVybmF0ZSIgOiAicHJpbWFyeSIsCiAJCWVsZW0sIHRhZyk7CkBAIC01NTAsNyArNTUxLDcgQEAKIAkJfQogCQlwdXRfdXNlcihkYXRhWzJdLCBkZXN0K2kpOwogCQlpZiAoZGF0YVsyXSAmIENFU1RBVFVTX0VYQ0VQVCkKLQkJCXZwcmludGsoImVsZW1lbnQgMHgleDogYXNjPTB4JXgsIGFzY3E9MHgleFxuIiwKKwkJCVZQUklOVEsoS0VSTl9JTkZPLCAiZWxlbWVudCAweCV4OiBhc2M9MHgleCwgYXNjcT0weCV4XG4iLAogCQkJCWNoLT5maXJzdHNbdHlwZV0raSwKIAkJCQkoaW50KWRhdGFbNF0sKGludClkYXRhWzVdKTsKIAkJcmV0dmFsID0gY2hfcmVhZF9lbGVtZW50X3N0YXR1cwpAQCAtNjYwLDcgKzY2MSw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAoMCAhPSBjaF9jaGVja3JhbmdlKGNoLCBwb3MuY3BfdHlwZSwgcG9zLmNwX3VuaXQpKSB7Ci0JCQlkcHJpbnRrKCJDSElPUE9TSVRJT046IGludmFsaWQgcGFyYW1ldGVyXG4iKTsKKwkJCURQUklOVEsoIkNISU9QT1NJVElPTjogaW52YWxpZCBwYXJhbWV0ZXJcbiIpOwogCQkJcmV0dXJuIC1FQkFEU0xUOwogCQl9CiAJCW11dGV4X2xvY2soJmNoLT5sb2NrKTsKQEAgLTY4MCw3ICs2ODEsNyBAQAogCiAJCWlmICgwICE9IGNoX2NoZWNrcmFuZ2UoY2gsIG12LmNtX2Zyb210eXBlLCBtdi5jbV9mcm9tdW5pdCkgfHwKIAkJICAgIDAgIT0gY2hfY2hlY2tyYW5nZShjaCwgbXYuY21fdG90eXBlLCAgIG12LmNtX3RvdW5pdCAgKSkgewotCQkJZHByaW50aygiQ0hJT01PVkU6IGludmFsaWQgcGFyYW1ldGVyXG4iKTsKKwkJCURQUklOVEsoIkNISU9NT1ZFOiBpbnZhbGlkIHBhcmFtZXRlclxuIik7CiAJCQlyZXR1cm4gLUVCQURTTFQ7CiAJCX0KIApAQCAtNzAzLDcgKzcwNCw3IEBACiAJCWlmICgwICE9IGNoX2NoZWNrcmFuZ2UoY2gsIG12LmNlX3NyY3R5cGUsICBtdi5jZV9zcmN1bml0ICkgfHwKIAkJICAgIDAgIT0gY2hfY2hlY2tyYW5nZShjaCwgbXYuY2VfZmRzdHR5cGUsIG12LmNlX2Zkc3R1bml0KSB8fAogCQkgICAgMCAhPSBjaF9jaGVja3JhbmdlKGNoLCBtdi5jZV9zZHN0dHlwZSwgbXYuY2Vfc2RzdHVuaXQpKSB7Ci0JCQlkcHJpbnRrKCJDSElPRVhDSEFOR0U6IGludmFsaWQgcGFyYW1ldGVyXG4iKTsKKwkJCURQUklOVEsoIkNISU9FWENIQU5HRTogaW52YWxpZCBwYXJhbWV0ZXJcbiIpOwogCQkJcmV0dXJuIC1FQkFEU0xUOwogCQl9CiAKQEAgLTc5Niw3ICs3OTcsNyBAQAogCQkJfQogCQl9IGVsc2UgaWYgKGNoLT52b2x0YWdzKSB7CiAJCQljaC0+dm9sdGFncyA9IDA7Ci0JCQl2cHJpbnRrKCJkZXZpY2UgaGFzIG5vIHZvbHVtZSB0YWcgc3VwcG9ydFxuIik7CisJCQlWUFJJTlRLKEtFUk5fSU5GTywgImRldmljZSBoYXMgbm8gdm9sdW1lIHRhZyBzdXBwb3J0XG4iKTsKIAkJCWdvdG8gdm9sdGFnX3JldHJ5OwogCQl9CiAJCWtmcmVlKGJ1ZmZlcik7CkBAIC04MjQsNyArODI1LDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCWlmICgwICE9IGNoX2NoZWNrcmFuZ2UoY2gsIGNzdi5jc3ZfdHlwZSwgY3N2LmNzdl91bml0KSkgewotCQkJZHByaW50aygiQ0hJT1NWT0xUQUc6IGludmFsaWQgcGFyYW1ldGVyXG4iKTsKKwkJCURQUklOVEsoIkNISU9TVk9MVEFHOiBpbnZhbGlkIHBhcmFtZXRlclxuIik7CiAJCQlyZXR1cm4gLUVCQURTTFQ7CiAJCX0KIAkJZWxlbSA9IGNoLT5maXJzdHNbY3N2LmNzdl90eXBlXSArIGNzdi5jc3ZfdW5pdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwppbmRleCBiZDk3N2JlLi41NGY1MGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKKysrIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCkBAIC0xNTk3LDcgKzE1OTcsNyBAQAogCQl1MzIgdGFnX21hc2sgPSAxOwogCQl1OCB0YWdfbnVtYmVyID0gMDsKIAkJd2hpbGUgKHRhZ19tYXNrICYgZGNiLT50YWdfbWFzawotCQkgICAgICAgJiYgdGFnX251bWJlciA8PSBkY2ItPm1heF9jb21tYW5kKSB7CisJCSAgICAgICAmJiB0YWdfbnVtYmVyIDwgZGNiLT5tYXhfY29tbWFuZCkgewogCQkJdGFnX21hc2sgPSB0YWdfbWFzayA8PCAxOwogCQkJdGFnX251bWJlcisrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmggYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljLmgKaW5kZXggMTkzMzhlMC4uY2JiMjBiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pYy5oCisrKyBiL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWMuaApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPHNjc2kvbGliZmMuaD4KICNpbmNsdWRlIDxzY3NpL2xpYmZjb2UuaD4KICNpbmNsdWRlICJmbmljX2lvLmgiCkBAIC00OSw3ICs1MCw2IEBACiAvKgogICogVGFnIGJpdHMgdXNlZCBmb3Igc3BlY2lhbCByZXF1ZXN0cy4KICAqLwotI2RlZmluZSBCSVQobnIpCQkJKDFVTCA8PCAobnIpKQogI2RlZmluZSBGTklDX1RBR19BQk9SVAkJQklUKDMwKQkJLyogdGFnIGJpdCBpbmRpY2F0aW5nIGFib3J0ICovCiAjZGVmaW5lIEZOSUNfVEFHX0RFVl9SU1QJQklUKDI5KQkJLyogaW5kaWNhdGVzIGRldmljZSByZXNldCAqLwogI2RlZmluZSBGTklDX1RBR19NQVNLCQkoQklUKDI0KSAtIDEpCS8qIG1hc2sgZm9yIGxvb2t1cCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5jCmluZGV4IDc1NTg1YTUuLjQyN2E1NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmMKQEAgLTI4NSw5ICsyODUsMTIgQEAKIGludCBfX2luaXQgZ2VuZXJpY19OQ1I1MzgwX2RldGVjdChzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICogdHBudCkKIHsKIAlzdGF0aWMgaW50IGN1cnJlbnRfb3ZlcnJpZGUgPSAwOwotCWludCBjb3VudCwgaTsKKwlpbnQgY291bnQ7CiAJdW5zaWduZWQgaW50ICpwb3J0czsKKyNpZm5kZWYgU0NTSV9HX05DUjUzODBfTUVNCisJaW50IGk7CiAJdW5zaWduZWQgbG9uZyByZWdpb25fc2l6ZSA9IDE2OworI2VuZGlmCiAJc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG5jcl81M2M0MDBhX3BvcnRzW10gPSB7CiAJCTB4MjgwLCAweDI5MCwgMHgzMDAsIDB4MzEwLCAweDMzMCwgMHgzNDAsIDB4MzQ4LCAweDM1MCwgMAogCX07CkBAIC0yOTYsNyArMjk5LDcgQEAKIAl9OwogCWludCBmbGFncyA9IDA7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7Ci0jaWZkZWYgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTQorI2lmZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAl2b2lkIF9faW9tZW0gKmlvbWVtOwogI2VuZGlmCkBAIC0zMTUsMTcgKzMxOCwxNSBAQAogCQlvdmVycmlkZXNbMF0uYm9hcmQgPSBCT0FSRF9OQ1I1M0M0MDBBOwogCWVsc2UgaWYgKGR0Y18zMTgxZSAhPSBOQ1JfTk9UX1NFVCkKIAkJb3ZlcnJpZGVzWzBdLmJvYXJkID0gQk9BUkRfRFRDMzE4MUU7Ci0KKyNpZm5kZWYgU0NTSV9HX05DUjUzODBfTUVNCiAJaWYgKCFjdXJyZW50X292ZXJyaWRlICYmIGlzYXBucF9wcmVzZW50KCkpIHsKIAkJc3RydWN0IHBucF9kZXYgKmRldiA9IE5VTEw7CiAJCWNvdW50ID0gMDsKIAkJd2hpbGUgKChkZXYgPSBwbnBfZmluZF9kZXYoTlVMTCwgSVNBUE5QX1ZFTkRPUignRCcsICdUJywgJ0MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4NDM2ZSksIGRldikpKSB7CiAJCQlpZiAoY291bnQgPj0gTk9fT1ZFUlJJREVTKQogCQkJCWJyZWFrOwotCQkJaWYgKHBucF9kZXZpY2VfYXR0YWNoKGRldikgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJkdGM0MzZlIHByb2JlOiBhdHRhY2ggZmFpbGVkXG4iKTsKKwkJCWlmIChwbnBfZGV2aWNlX2F0dGFjaChkZXYpIDwgMCkKIAkJCQljb250aW51ZTsKLQkJCX0KIAkJCWlmIChwbnBfYWN0aXZhdGVfZGV2KGRldikgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJkdGM0MzZlIHByb2JlOiBhY3RpdmF0ZSBmYWlsZWRcbiIpOwogCQkJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CkBAIC0zNDksNyArMzUwLDcgQEAKIAkJCWNvdW50Kys7CiAJCX0KIAl9Ci0KKyNlbmRpZgogCXRwbnQtPnByb2NfbmFtZSA9ICJnX05DUjUzODAiOwogCiAJZm9yIChjb3VudCA9IDA7IGN1cnJlbnRfb3ZlcnJpZGUgPCBOT19PVkVSUklERVM7ICsrY3VycmVudF9vdmVycmlkZSkgewpAQCAtMzc0LDcgKzM3NSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0jaWZuZGVmIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0KKyNpZm5kZWYgU0NTSV9HX05DUjUzODBfTUVNCiAJCWlmIChwb3J0cykgewogCQkJLyogd2FrZXVwIHNlcXVlbmNlIGZvciB0aGUgTkNSNTNDNDAwQSBhbmQgRFRDMzE4MUUgKi8KIApAQCAtNDM2LDcgKzQzNyw3IEBACiAjZW5kaWYKIAkJaW5zdGFuY2UgPSBzY3NpX3JlZ2lzdGVyKHRwbnQsIHNpemVvZihzdHJ1Y3QgTkNSNTM4MF9ob3N0ZGF0YSkpOwogCQlpZiAoaW5zdGFuY2UgPT0gTlVMTCkgewotI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCQkJcmVsZWFzZV9yZWdpb24ob3ZlcnJpZGVzW2N1cnJlbnRfb3ZlcnJpZGVdLk5DUjUzODBfbWFwX25hbWUsIHJlZ2lvbl9zaXplKTsKICNlbHNlCiAJCQlpb3VubWFwKGlvbWVtKTsKQEAgLTQ0NiwxMCArNDQ3LDEwIEBACiAJCX0KIAogCQlpbnN0YW5jZS0+TkNSNTM4MF9pbnN0YW5jZV9uYW1lID0gb3ZlcnJpZGVzW2N1cnJlbnRfb3ZlcnJpZGVdLk5DUjUzODBfbWFwX25hbWU7Ci0jaWZuZGVmIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0KKyNpZm5kZWYgU0NTSV9HX05DUjUzODBfTUVNCiAJCWluc3RhbmNlLT5uX2lvX3BvcnQgPSByZWdpb25fc2l6ZTsKICNlbHNlCi0JCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLmlvbWVtID0gaW9tZW07CisJCSgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLT5pb21lbSA9IGlvbWVtOwogI2VuZGlmCiAKIAkJTkNSNTM4MF9pbml0KGluc3RhbmNlLCBmbGFncyk7CkBAIC01MTcsMTAgKzUxOCwxMCBAQAogCQlmcmVlX2lycShpbnN0YW5jZS0+aXJxLCBpbnN0YW5jZSk7CiAJTkNSNTM4MF9leGl0KGluc3RhbmNlKTsKIAotI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCXJlbGVhc2VfcmVnaW9uKGluc3RhbmNlLT5OQ1I1MzgwX2luc3RhbmNlX25hbWUsIGluc3RhbmNlLT5uX2lvX3BvcnQpOwogI2Vsc2UKLQlpb3VubWFwKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLmlvbWVtKTsKKwlpb3VubWFwKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKilpbnN0YW5jZS0+aG9zdGRhdGEpLT5pb21lbSk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGluc3RhbmNlLT5OQ1I1MzgwX2luc3RhbmNlX25hbWUsIE5DUjUzODBfcmVnaW9uX3NpemUpOwogI2VuZGlmCiAKQEAgLTU5MCwxNCArNTkxLDE0IEBACiAJCX0KIAkJd2hpbGUgKE5DUjUzODBfcmVhZChDNDAwX0NPTlRST0xfU1RBVFVTX1JFRykgJiBDU1JfSE9TVF9CVUZfTk9UX1JEWSk7CiAKLSNpZm5kZWYgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTQorI2lmbmRlZiBTQ1NJX0dfTkNSNTM4MF9NRU0KIAkJewogCQkJaW50IGk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCiAJCQkJZHN0W3N0YXJ0ICsgaV0gPSBOQ1I1MzgwX3JlYWQoQzQwMF9IT1NUX0JVRkZFUik7CiAJCX0KICNlbHNlCi0JCS8qIGltcGxpZXMgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTSAqLworCQkvKiBpbXBsaWVzIFNDU0lfR19OQ1I1MzgwX01FTSAqLwogCQltZW1jcHlfZnJvbWlvKGRzdCArIHN0YXJ0LCBpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgMTI4KTsKICNlbmRpZgogCQlzdGFydCArPSAxMjg7CkBAIC02MTAsMTQgKzYxMSwxNCBAQAogCQkJLy8gRklYTUUgLSBubyB0aW1lb3V0CiAJCX0KIAotI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCQl7CiAJCQlpbnQgaTsJCiAJCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCiAJCQkJZHN0W3N0YXJ0ICsgaV0gPSBOQ1I1MzgwX3JlYWQoQzQwMF9IT1NUX0JVRkZFUik7CiAJCX0KICNlbHNlCi0JCS8qIGltcGxpZXMgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTSAqLworCQkvKiBpbXBsaWVzIFNDU0lfR19OQ1I1MzgwX01FTSAqLwogCQltZW1jcHlfZnJvbWlvKGRzdCArIHN0YXJ0LCBpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgMTI4KTsKICNlbmRpZgogCQlzdGFydCArPSAxMjg7CkBAIC02NzYsMTMgKzY3NywxMyBAQAogCQl9CiAJCXdoaWxlIChOQ1I1MzgwX3JlYWQoQzQwMF9DT05UUk9MX1NUQVRVU19SRUcpICYgQ1NSX0hPU1RfQlVGX05PVF9SRFkpCiAJCQk7IC8vIEZJWE1FIC0gdGltZW91dAotI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCQl7CiAJCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCiAJCQkJTkNSNTM4MF93cml0ZShDNDAwX0hPU1RfQlVGRkVSLCBzcmNbc3RhcnQgKyBpXSk7CiAJCX0KICNlbHNlCi0JCS8qIGltcGxpZXMgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTSAqLworCQkvKiBpbXBsaWVzIFNDU0lfR19OQ1I1MzgwX01FTSAqLwogCQltZW1jcHlfdG9pbyhpb21lbSArIE5DUjUzQzQwMF9ob3N0X2J1ZmZlciwgc3JjICsgc3RhcnQsIDEyOCk7CiAjZW5kaWYKIAkJc3RhcnQgKz0gMTI4OwpAQCAtNjkyLDEzICs2OTMsMTMgQEAKIAkJd2hpbGUgKE5DUjUzODBfcmVhZChDNDAwX0NPTlRST0xfU1RBVFVTX1JFRykgJiBDU1JfSE9TVF9CVUZfTk9UX1JEWSkKIAkJCTsgLy8gRklYTUUgLSBubyB0aW1lb3V0CiAKLSNpZm5kZWYgQ09ORklHX1NDU0lfR19OQ1I1MzgwX01FTQorI2lmbmRlZiBTQ1NJX0dfTkNSNTM4MF9NRU0KIAkJewogCQkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQogCQkJCU5DUjUzODBfd3JpdGUoQzQwMF9IT1NUX0JVRkZFUiwgc3JjW3N0YXJ0ICsgaV0pOwogCQl9CiAjZWxzZQotCQkvKiBpbXBsaWVzIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0gKi8KKwkJLyogaW1wbGllcyBTQ1NJX0dfTkNSNTM4MF9NRU0gKi8KIAkJbWVtY3B5X3RvaW8oaW9tZW0gKyBOQ1I1M0M0MDBfaG9zdF9idWZmZXIsIHNyYyArIHN0YXJ0LCAxMjgpOwogI2VuZGlmCiAJCXN0YXJ0ICs9IDEyODsKQEAgLTkzOCw3ICs5MzksNyBAQAogbW9kdWxlX3BhcmFtKGR0Y18zMTgxZSwgaW50LCAwKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogc3RhdGljIHN0cnVjdCBpc2FwbnBfZGV2aWNlX2lkIGlkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJIElTQVBOUF9BTllfSUQsIElTQVBOUF9BTllfSUQsCkBAIC05NDgsNyArOTQ5LDcgQEAKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaXNhcG5wLCBpZF90YWJsZSk7Ci0KKyNlbmRpZgogCiBfX3NldHVwKCJuY3I1MzgwPSIsIGRvX05DUjUzODBfc2V0dXApOwogX19zZXR1cCgibmNyNTNjNDAwPSIsIGRvX05DUjUzQzQwMF9zZXR1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmggYi9kcml2ZXJzL3Njc2kvZ19OQ1I1MzgwLmgKaW5kZXggZGYwYjNmNi4uOTIxNzY0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dfTkNSNTM4MC5oCisrKyBiL2RyaXZlcnMvc2NzaS9nX05DUjUzODAuaApAQCAtNjMsNyArNjMsNyBAQAogI2RlZmluZSBfX1NUUlZBTCh4KSAjeAogI2RlZmluZSBTVFJWQUwoeCkgX19TVFJWQUwoeCkKIAotI2lmbmRlZiBDT05GSUdfU0NTSV9HX05DUjUzODBfTUVNCisjaWZuZGVmIFNDU0lfR19OQ1I1MzgwX01FTQogCiAjZGVmaW5lIE5DUjUzODBfbWFwX2NvbmZpZyBwb3J0CiAjZGVmaW5lIE5DUjUzODBfbWFwX3R5cGUgaW50CkBAIC05MSw3ICs5MSw3IEBACiAgICAgTkNSNTM4MF9tYXBfbmFtZSA9IChOQ1I1MzgwX21hcF90eXBlKSgoaW5zdGFuY2UpLT5OQ1I1MzgwX2luc3RhbmNlX25hbWUpCiAKICNlbHNlIAotLyogdGhlcmVmb3JlIENPTkZJR19TQ1NJX0dfTkNSNTM4MF9NRU0gKi8KKy8qIHRoZXJlZm9yZSBTQ1NJX0dfTkNSNTM4MF9NRU0gKi8KIAogI2RlZmluZSBOQ1I1MzgwX21hcF9jb25maWcgbWVtb3J5CiAjZGVmaW5lIE5DUjUzODBfbWFwX3R5cGUgdW5zaWduZWQgbG9uZwpAQCAtMTE0LDcgKzExNCw3IEBACiAgICAgcmVnaXN0ZXIgdm9pZCBfX2lvbWVtICppb21lbQogCiAjZGVmaW5lIE5DUjUzODBfc2V0dXAoaW5zdGFuY2UpIFwKLSAgICBpb21lbSA9ICgoKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopKGluc3RhbmNlKS0+aG9zdGRhdGEpLmlvbWVtKQorICAgIGlvbWVtID0gKCgoc3RydWN0IE5DUjUzODBfaG9zdGRhdGEgKikoaW5zdGFuY2UpLT5ob3N0ZGF0YSktPmlvbWVtKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggZjY3MmQ2Mi4uYjg2MGQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC00OTE0LDcgKzQ5MTQsNyBAQAogCiAJZXJyb3IgPSBzY3NpX2FkZF9ob3N0KHNocCwgTlVMTCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIG91dF9mcmVlX2NvYWxfc3RhdDsKKwkJZ290byBvdXRfZnJlZV9jY2JfcGh5czsKIAlsaXN0X2FkZF90YWlsKCZoYS0+bGlzdCwgJmdkdGhfaW5zdGFuY2VzKTsKIAlnZHRoX3RpbWVyX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2luaXRpby5jIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCmluZGV4IGE3NzE0MTYuLjEwODc5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYworKysgYi9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKQEAgLTI4MTcsNyArMjgxNyw2IEBACiAJfQogCiAJY21uZC0+cmVzdWx0ID0gY2Jsay0+dGFzdGF0IHwgKGNibGstPmhhc3RhdCA8PCAxNik7Ci0JV0FSTl9PTihjbW5kID09IE5VTEwpOwogCWk5MXVfdW5tYXBfc2NiKGhvc3QtPnBjaV9kZXYsIGNtbmQpOwogCWNtbmQtPnNjc2lfZG9uZShjbW5kKTsJLyogTm90aWZ5IHN5c3RlbSBET05FICAgICAgICAgICAqLwogCWluaXRpb19yZWxlYXNlX3NjYihob3N0LCBjYmxrKTsJLyogUmVsZWFzZSBTQ0IgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwppbmRleCA4Njg4NzRjLi5hZDA1YjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMTc5NSwxMiArMTc5NiwxMSBAQAogCiAJLyogVmFsaWRhdGUgYW5kIHN0b3JlIHRoZSBuZXcgbmFtZSAqLwogCWZvciAoaT0wLCBqPTA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlmICgoKmJ1ZiA+PSAnYScpICYmICgqYnVmIDw9ICdmJykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCgqYnVmKysgLSdhJykgKyAxMCkpOwotCQllbHNlIGlmICgoKmJ1ZiA+PSAnQScpICYmICgqYnVmIDw9ICdGJykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCgqYnVmKysgLSdBJykgKyAxMCkpOwotCQllbHNlIGlmICgoKmJ1ZiA+PSAnMCcpICYmICgqYnVmIDw9ICc5JykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCpidWYrKyAtJzAnKSk7CisJCWludCB2YWx1ZTsKKworCQl2YWx1ZSA9IGhleF90b19iaW4oKmJ1ZisrKTsKKwkJaWYgKHZhbHVlID49IDApCisJCQlqID0gKGogPDwgNCkgfCB2YWx1ZTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpICUgMikgewpAQCAtMTg4OCwxMiArMTg4OCwxMSBAQAogCiAJLyogVmFsaWRhdGUgYW5kIHN0b3JlIHRoZSBuZXcgbmFtZSAqLwogCWZvciAoaT0wLCBqPTA7IGkgPCAxNjsgaSsrKSB7Ci0JCWlmICgoKmJ1ZiA+PSAnYScpICYmICgqYnVmIDw9ICdmJykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCgqYnVmKysgLSdhJykgKyAxMCkpOwotCQllbHNlIGlmICgoKmJ1ZiA+PSAnQScpICYmICgqYnVmIDw9ICdGJykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCgqYnVmKysgLSdBJykgKyAxMCkpOwotCQllbHNlIGlmICgoKmJ1ZiA+PSAnMCcpICYmICgqYnVmIDw9ICc5JykpCi0JCQlqID0gKChqIDw8IDQpIHwgKCpidWYrKyAtJzAnKSk7CisJCWludCB2YWx1ZTsKKworCQl2YWx1ZSA9IGhleF90b19iaW4oKmJ1ZisrKTsKKwkJaWYgKHZhbHVlID49IDApCisJCQlqID0gKGogPDwgNCkgfCB2YWx1ZTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpICUgMikgewpAQCAtMjc3OCw3ICsyNzc3LDYgQEAKIAkuYXR0ciA9IHsKIAkJLm5hbWUgPSAibHBmY19kcnZyX3N0YXRfZGF0YSIsCiAJCS5tb2RlID0gU19JUlVTUiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkuc2l6ZSA9IExQRkNfTUFYX1RBUkdFVCAqIE1BWF9TVEFUX0RBVEFfU0laRV9QRVJfVEFSR0VULAogCS5yZWFkID0gc3lzZnNfZHJ2cl9zdGF0X2RhdGFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc2Qvb3NkX2luaXRpYXRvci5jIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKaW5kZXggZWU0YjY5MS4uZmRhNGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKKysrIGIvZHJpdmVycy9zY3NpL29zZC9vc2RfaW5pdGlhdG9yLmMKQEAgLTcxNiw3ICs3MTYsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihiaW8pOwogCX0KIAotCWJpby0+YmlfcncgJj0gfigxIDw8IEJJT19SVyk7CisJYmlvLT5iaV9ydyAmPSB+UkVRX1dSSVRFOwogCW9yLT5pbi5iaW8gPSBiaW87CiAJb3ItPmluLnRvdGFsX2J5dGVzID0gYmlvLT5iaV9zaXplOwogCXJldHVybiAwOwpAQCAtODE0LDcgKzgxNCw3IEBACiB7CiAJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9XUklURSwgb2JqLCBvZmZzZXQsIGxlbik7CiAJV0FSTl9PTihvci0+b3V0LmJpbyB8fCBvci0+b3V0LnRvdGFsX2J5dGVzKTsKLQlXQVJOX09OKDAgPT0gIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXKSk7CisJV0FSTl9PTigwID09IChiaW8tPmJpX3J3ICYgUkVRX1dSSVRFKSk7CiAJb3ItPm91dC5iaW8gPSBiaW87CiAJb3ItPm91dC50b3RhbF9ieXRlcyA9IGxlbjsKIH0KQEAgLTgyOSw3ICs4MjksNyBAQAogCWlmIChJU19FUlIoYmlvKSkKIAkJcmV0dXJuIFBUUl9FUlIoYmlvKTsKIAotCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsgLyogRklYTUU6IGJpb19zZXRfZGlyKCkgKi8KKwliaW8tPmJpX3J3IHw9IFJFUV9XUklURTsgLyogRklYTUU6IGJpb19zZXRfZGlyKCkgKi8KIAlvc2RfcmVxX3dyaXRlKG9yLCBvYmosIG9mZnNldCwgYmlvLCBsZW4pOwogCXJldHVybiAwOwogfQpAQCAtODY1LDcgKzg2NSw3IEBACiB7CiAJX29zZF9yZXFfZW5jb2RlX2NvbW1vbihvciwgT1NEX0FDVF9SRUFELCBvYmosIG9mZnNldCwgbGVuKTsKIAlXQVJOX09OKG9yLT5pbi5iaW8gfHwgb3ItPmluLnRvdGFsX2J5dGVzKTsKLQlXQVJOX09OKDEgPT0gYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUlcpKTsKKwlXQVJOX09OKDEgPT0gKGJpby0+YmlfcncgJiBSRVFfV1JJVEUpKTsKIAlvci0+aW4uYmlvID0gYmlvOwogCW9yLT5pbi50b3RhbF9ieXRlcyA9IGxlbjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9vc3N0LmMgYi9kcml2ZXJzL3Njc2kvb3NzdC5jCmluZGV4IGQ2NGI3MTcuLjI3OGIzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9vc3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL29zc3QuYwpAQCAtNTg2OCw3ICs1ODY4LDggQEAKIAl9CiAKIAkvKiBmaW5kIGEgZnJlZSBtaW5vciBudW1iZXIgKi8KLQlmb3IgKGk9MDsgb3Nfc2NzaV90YXBlc1tpXSAmJiBpPG9zc3RfbWF4X2RldjsgaSsrKTsKKwlmb3IgKGkgPSAwOyBpIDwgb3NzdF9tYXhfZGV2ICYmIG9zX3Njc2lfdGFwZXNbaV07IGkrKykKKwkJOwogCWlmKGkgPj0gb3NzdF9tYXhfZGV2KSBwYW5pYyAoIlNjc2lfZGV2aWNlcyBjb3JydXB0IChvc3N0KSIpOwogCWRldl9udW0gPSBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9haGExNTJ4X3N0dWIuYwppbmRleCA5ZDcwYWVmLi42MWY0OWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL2FoYTE1Mnhfc3R1Yi5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvYWhhMTUyeF9zdHViLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgImFoYTE1MnguaCIKIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTEwMSw5ICsxMDAsOCBAQAogICAgIGluZm8tPnBfZGV2ID0gbGluazsKICAgICBsaW5rLT5wcml2ID0gaW5mbzsKIAotICAgIGxpbmstPmlvLk51bVBvcnRzMSA9IDB4MjA7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLSAgICBsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOworICAgIGxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAweDIwOworICAgIGxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKICAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAgICAgbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAgICAgbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0xMzEsMTUgKzEyOSwxNiBAQAogCQkJCXVuc2lnbmVkIGludCB2Y2MsCiAJCQkJdm9pZCAqcHJpdl9kYXRhKQogeworCXBfZGV2LT5pb19saW5lcyA9IDEwOwogCS8qIEZvciBOZXcgTWVkaWEgVCZKLCBsb29rIGZvciBhIFNDU0kgd2luZG93ICovCiAJaWYgKGNmZy0+aW8ud2luWzBdLmxlbiA+PSAweDIwKQotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CiAJZWxzZSBpZiAoKGNmZy0+aW8ubndpbiA+IDEpICYmCiAJCSAoY2ZnLT5pby53aW5bMV0ubGVuID49IDB4MjApKQotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMV0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzFdLmJhc2U7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSAmJgotCSAgICAocF9kZXYtPmlvLkJhc2VQb3J0MSA8IDB4ZmZmZikpIHsKLQkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykpCisJICAgIChwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0IDwgMHhmZmZmKSkgeworCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTE2OCw3ICsxNjcsNyBAQAogICAgIC8qIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhaGExNTJ4IGRyaXZlciAqLwogICAgIG1lbXNldCgmcywgMCwgc2l6ZW9mKHMpKTsKICAgICBzLmNvbmYgICAgICAgID0gIlBDTUNJQSBzZXR1cCI7Ci0gICAgcy5pb19wb3J0ICAgICA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyAgICBzLmlvX3BvcnQgICAgID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogICAgIHMuaXJxICAgICAgICAgPSBsaW5rLT5pcnE7CiAgICAgcy5zY3NpaWQgICAgICA9IGhvc3RfaWQ7CiAgICAgcy5yZWNvbm5lY3QgICA9IHJlY29ubmVjdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL2Zkb21haW5fc3R1Yi5jCmluZGV4IDIxYjE0MTEuLjEzZGJlNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvZmRvbWFpbl9zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9mZG9tYWluX3N0dWIuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSAiZmRvbWFpbi5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtODQsOSArODMsOCBAQAogCiAJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDB4MTA7Ci0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAweDEwOworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJbGluay0+Y29uZi5QcmVzZW50ID0gUFJFU0VOVF9PUFRJT047CkBAIC0xMTMsOCArMTExLDkgQEAKIAkJCQl1bnNpZ25lZCBpbnQgdmNjLAogCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKLQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCXBfZGV2LT5pb19saW5lcyA9IDEwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiB9CiAKIApAQCAtMTM4LDEwICsxMzcsMTAgQEAKIAkgICAgZ290byBmYWlsZWQ7CiAKICAgICAvKiBBIGJhZCBoYWNrLi4uICovCi0gICAgcmVsZWFzZV9yZWdpb24obGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pby5OdW1Qb3J0czEpOworICAgIHJlbGVhc2VfcmVnaW9uKGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVswXSkpOwogCiAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGZkb21haW4gZHJpdmVyICovCi0gICAgc3ByaW50ZihzdHIsICIlZCwlZCIsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKyAgICBzcHJpbnRmKHN0ciwgIiVkLCVkIiwgKHVuc2lnbmVkIGludCkgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogICAgIGZkb21haW5fc2V0dXAoc3RyKTsKIAogICAgIGhvc3QgPSBfX2Zkb21haW5fMTZ4MF9kZXRlY3QoJmZkb21haW5fZHJpdmVyX3RlbXBsYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCmluZGV4IDBmMGUxMTIuLmRkOWI0MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9pb2N0bC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTE1NTksOSArMTU1OCw4IEBACiAJbnNwX2RiZyhOU1BfREVCVUdfSU5JVCwgImluZm89MHglcCIsIGluZm8pOwogCiAJLyogVGhlIGlvIHN0cnVjdHVyZSBkZXNjcmliZXMgSU8gcG9ydCBtYXBwaW5nICovCi0JbGluay0+aW8uTnVtUG9ydHMxCSA9IDB4MTA7Ci0JbGluay0+aW8uQXR0cmlidXRlczEJID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JbGluay0+aW8uSU9BZGRyTGluZXMJID0gMTA7CS8qIG5vdCB1c2VkICovCisJbGluay0+cmVzb3VyY2VbMF0tPmVuZAkgPSAweDEwOworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwogCWxpbmstPmNvbmYuQXR0cmlidXRlcwkgPSBDT05GX0VOQUJMRV9JUlE7CkBAIC0xNjQyLDI5ICsxNjQwLDI3IEBACiAJCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9CisJCQkJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQkJfQogCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldikgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAJCX0KIAogCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC0+bWVtLm53aW4gPiAwKSkgewotCQkJbWVtcmVxX3QJbWFwOwogCQkJY2lzdHBsX21lbV90CSptZW0gPQogCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07CiAJCQljZmdfbWVtLT5yZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTTsKQEAgLTE2NzYsOCArMTY3Miw4IEBACiAJCQljZmdfbWVtLT5yZXEuQWNjZXNzU3BlZWQgPSAwOwogCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgJmNmZ19tZW0tPnJlcSwgJnBfZGV2LT53aW4pICE9IDApCiAJCQkJZ290byBuZXh0X2VudHJ5OwotCQkJbWFwLlBhZ2UgPSAwOyBtYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+d2luLCAmbWFwKSAhPSAwKQorCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sCisJCQkJCW1lbS0+d2luWzBdLmNhcmRfYWRkcikgIT0gMCkKIAkJCQlnb3RvIG5leHRfZW50cnk7CiAKIAkJCWNmZ19tZW0tPmRhdGEtPk1taW9BZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpIGlvcmVtYXBfbm9jYWNoZShjZmdfbWVtLT5yZXEuQmFzZSwgY2ZnX21lbS0+cmVxLlNpemUpOwpAQCAtMTcyMCwxNyArMTcxNiwxOSBAQAogCQlnb3RvIGNzX2ZhaWxlZDsKIAogCWlmIChmcmVlX3BvcnRzKSB7Ci0JCWlmIChsaW5rLT5pby5CYXNlUG9ydDEpIHsKLQkJCXJlbGVhc2VfcmVnaW9uKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uTnVtUG9ydHMxKTsKKwkJaWYgKGxpbmstPnJlc291cmNlWzBdKSB7CisJCQlyZWxlYXNlX3JlZ2lvbihsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkJCXJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pKTsKIAkJfQotCQlpZiAobGluay0+aW8uQmFzZVBvcnQyKSB7Ci0JCQlyZWxlYXNlX3JlZ2lvbihsaW5rLT5pby5CYXNlUG9ydDIsIGxpbmstPmlvLk51bVBvcnRzMik7CisJCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkgeworCQkJcmVsZWFzZV9yZWdpb24obGluay0+cmVzb3VyY2VbMV0tPnN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzFdKSk7CiAJCX0KIAl9CiAKIAkvKiBTZXQgcG9ydCBhbmQgSVJRICovCi0JZGF0YS0+QmFzZUFkZHJlc3MgPSBsaW5rLT5pby5CYXNlUG9ydDE7Ci0JZGF0YS0+TnVtQWRkcmVzcyAgPSBsaW5rLT5pby5OdW1Qb3J0czE7CisJZGF0YS0+QmFzZUFkZHJlc3MgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CisJZGF0YS0+TnVtQWRkcmVzcyAgPSByZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKTsKIAlkYXRhLT5JcnFOdW1iZXIgICA9IGxpbmstPmlycTsKIAogCW5zcF9kYmcoTlNQX0RFQlVHX0lOSVQsICJJL09bMHgleCsweCV4XSBJUlEgJWQiLApAQCAtMTc2NSwxMyArMTc2MywxMCBAQAogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKIAkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7CiAJfQotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpIHsKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDErbGluay0+aW8uTnVtUG9ydHMxLTEpOwotCX0KLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOworCWlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwkJcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCWlmIChsaW5rLT53aW4pCiAJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgY2ZnX21lbS0+cmVxLkJhc2UsCiAJCSAgICAgICBjZmdfbWVtLT5yZXEuQmFzZStjZmdfbWVtLT5yZXEuU2l6ZS0xKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvcWxvZ2ljX3N0dWIuYwppbmRleCBmMGZjNmJhLi5lYjc3NWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL3Fsb2dpY19zdHViLmMKKysrIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9xbG9naWNfc3R1Yi5jCkBAIC00OCw3ICs0OCw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlICIuLi9xbG9naWNmYXM0MDguaCIKIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTE1Nyw5ICsxNTYsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlpbmZvLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGluZm87Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gMTY7Ci0JbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IDEwOworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCWxpbmstPmNvbmYuUHJlc2VudCA9IFBSRVNFTlRfT1BUSU9OOwpAQCAtMTg2LDEzICsxODQsMTQgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmNjLAogCQkJICAgICAgIHZvaWQgKnByaXZfZGF0YSkKIHsKLQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gY2ZnLT5pby53aW5bMF0uYmFzZTsKLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pb19saW5lcyA9IDEwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBjZmctPmlvLndpblswXS5iYXNlOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOwogCi0JaWYgKHBfZGV2LT5pby5CYXNlUG9ydDEgPT0gMCkKKwlpZiAocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIGludCBxbG9naWNfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICogbGluaykKQEAgLTIxNiwxOCArMjE1LDE4IEBACiAKIAlpZiAoKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX01BQ05JQ0EpIHx8IChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9QSU9ORUVSKSB8fCAoaW5mby0+bWFuZl9pZCA9PSAweDAwOTgpKSB7CiAJCS8qIHNldCBBVEFjbWQgKi8KLQkJb3V0YigweGI0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOwotCQlvdXRiKDB4MjQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4OSk7Ci0JCW91dGIoMHgwNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHhkKTsKKwkJb3V0YigweGI0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweGQpOworCQlvdXRiKDB4MjQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4OSk7CisJCW91dGIoMHgwNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHhkKTsKIAl9CiAKIAkvKiBUaGUgS1hMLTgxMEFOIGhhcyBhIGJpZ2dlciBJTyBwb3J0IHdpbmRvdyAqLwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEgPT0gMzIpCisJaWYgKHJlc291cmNlX3NpemUobGluay0+cmVzb3VyY2VbMF0pID09IDMyKQogCQlob3N0ID0gcWxvZ2ljX2RldGVjdCgmcWxvZ2ljZmFzX2RyaXZlcl90ZW1wbGF0ZSwgbGluaywKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSArIDE2LCBsaW5rLT5pcnEpOworCQkJbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMTYsIGxpbmstPmlycSk7CiAJZWxzZQogCQlob3N0ID0gcWxvZ2ljX2RldGVjdCgmcWxvZ2ljZmFzX2RyaXZlcl90ZW1wbGF0ZSwgbGluaywKLQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKwkJCWxpbmstPnJlc291cmNlWzBdLT5zdGFydCwgbGluay0+aXJxKTsKIAkKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIFNDU0kgZGV2aWNlcyBmb3VuZFxuIiwgcWxvZ2ljX25hbWUpOwpAQCAtMjY5LDkgKzI2OCw5IEBACiAJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fAogCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKIAkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewotCQlvdXRiKDB4ODAsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKLQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOworCQlvdXRiKDB4ODAsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweGQpOwogCX0KIAkvKiBVZ2dnZ2xsbHl5eXkhISEgKi8KIAlxbG9naWNmYXM0MDhfYnVzX3Jlc2V0KE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvc3ltNTNjNTAwX2NzLmMKaW5kZXggYTUxMTY0MS4uMzIxZTM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9zeW01M2M1MDBfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL3N5bTUzYzUwMF9jcy5jCkBAIC03MSw3ICs3MSw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTY5MSwxMyArNjkwLDE0IEBACiAJCQkJICB1bnNpZ25lZCBpbnQgdmNjLAogCQkJCSAgdm9pZCAqcHJpdl9kYXRhKQogewotCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBjZmctPmlvLndpblswXS5iYXNlOwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47CisJcF9kZXYtPmlvX2xpbmVzID0gMTA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmZy0+aW8ud2luWzBdLmJhc2U7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBjZmctPmlvLndpblswXS5sZW47CiAKLQlpZiAocF9kZXYtPmlvLkJhc2VQb3J0MSA9PSAwKQorCWlmIChwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKTsKKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogfQogCiBzdGF0aWMgaW50CkBAIC03MzQsOSArNzM0LDkgQEAKIAkgICAgKGluZm8tPm1hbmZfaWQgPT0gTUFORklEX1BJT05FRVIpIHx8CiAJICAgIChpbmZvLT5tYW5mX2lkID09IDB4MDA5OCkpIHsKIAkJLyogc2V0IEFUQWNtZCAqLwotCQlvdXRiKDB4YjQsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKLQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOworCQlvdXRiKDB4YjQsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweGQpOwogCX0KIAogCS8qCkBAIC03NDksNyArNzQ5LDcgQEAKIAkqCTB4MTMwLCAweDIzMCwgMHgyODAsIDB4MjkwLAogCSoJMHgzMjAsIDB4MzMwLCAweDM0MCwgMHgzNTAKIAkqLwotCXBvcnRfYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwlwb3J0X2Jhc2UgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAJaXJxX2xldmVsID0gbGluay0+aXJxOwogCiAJREVCKHByaW50aygiU1lNNTNDNTAwOiBwb3J0X2Jhc2U9MHgleCwgaXJxPSVkLCBmYXN0X3Bpbz0lZFxuIiwKQEAgLTgyMiwxNSArODIyLDE1IEBACiAJaWYgKChpbmZvLT5tYW5mX2lkID09IE1BTkZJRF9NQUNOSUNBKSB8fAogCSAgICAoaW5mby0+bWFuZl9pZCA9PSBNQU5GSURfUElPTkVFUikgfHwKIAkgICAgKGluZm8tPm1hbmZfaWQgPT0gMHgwMDk4KSkgewotCQlvdXRiKDB4ODAsIGxpbmstPmlvLkJhc2VQb3J0MSArIDB4ZCk7Ci0JCW91dGIoMHgyNCwgbGluay0+aW8uQmFzZVBvcnQxICsgMHg5KTsKLQkJb3V0YigweDA0LCBsaW5rLT5pby5CYXNlUG9ydDEgKyAweGQpOworCQlvdXRiKDB4ODAsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4ZCk7CisJCW91dGIoMHgyNCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgMHg5KTsKKwkJb3V0YigweDA0LCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweGQpOwogCX0KIAkvKgogCSAqICBJZiB0aGluZ3MgZG9uJ3Qgd29yayBhZnRlciBhICJyZXN1bWUiLAogCSAqICB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBsb29raW5nLgogCSAqLwotCVNZTTUzQzUwMF9pbnRfaG9zdF9yZXNldChsaW5rLT5pby5CYXNlUG9ydDEpOworCVNZTTUzQzUwMF9pbnRfaG9zdF9yZXNldChsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NTksOSArODU5LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJaW5mby0+cF9kZXYgPSBsaW5rOwogCWxpbmstPnByaXYgPSBpbmZvOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JbGluay0+aW8uSU9BZGRyTGluZXMgPSAxMDsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CisJbGluay0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwogCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBmZjIxNzJkLi44YzgwYjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMTE1LDggKzExNSw4IEBACiBtb2R1bGVfcGFyYW0ocWwyeG1heHF1ZXVlcywgaW50LCBTX0lSVUdPfFNfSVJVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhxbDJ4bWF4cXVldWVzLAogCQkiRW5hYmxlcyBNUSBzZXR0aW5ncyAiCi0JCSJEZWZhdWx0IGlzIDEgZm9yIHNpbmdsZSBxdWV1ZS4gU2V0IGl0IHRvIG51bWJlciBcCi0JCQlvZiBxdWV1ZXMgaW4gTVEgbW9kZS4iKTsKKwkJIkRlZmF1bHQgaXMgMSBmb3Igc2luZ2xlIHF1ZXVlLiBTZXQgaXQgdG8gbnVtYmVyICIKKwkJIm9mIHF1ZXVlcyBpbiBNUSBtb2RlLiIpOwogCiBpbnQgcWwyeG11bHRpcXVlX3RhZzsKIG1vZHVsZV9wYXJhbShxbDJ4bXVsdGlxdWVfdGFnLCBpbnQsIFNfSVJVR098U19JUlVTUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCAyYmY5ODQ2Li5iYmJjMTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCQkJCSAgICAiY2hhbmdlZC4gVGhlIExpbnV4IFNDU0kgbGF5ZXIgZG9lcyBub3QgIgogCQkJCSAgICAiYXV0b21hdGljYWxseSBhZGp1c3QgdGhlc2UgcGFyYW1ldGVycy5cbiIpOwogCi0JCWlmIChibGtfYmFycmllcl9ycShzY21kLT5yZXF1ZXN0KSkKKwkJaWYgKHNjbWQtPnJlcXVlc3QtPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKIAkJCS8qCiAJCQkgKiBiYXJyaWVyIHJlcXVlc3RzIHNob3VsZCBhbHdheXMgcmV0cnkgb24gVUEKIAkJCSAqIG90aGVyd2lzZSBibG9jayB3aWxsIGdldCBhIHNwdXJpb3VzIGVycm9yCkBAIC0xMzMxLDE2ICsxMzMxLDE2IEBACiAJY2FzZSBESURfT0s6CiAJCWJyZWFrOwogCWNhc2UgRElEX0JVU19CVVNZOgotCQlyZXR1cm4gYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChzY21kLT5yZXF1ZXN0KTsKKwkJcmV0dXJuIChzY21kLT5yZXF1ZXN0LT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUKTsKIAljYXNlIERJRF9QQVJJVFk6Ci0JCXJldHVybiBibGtfZmFpbGZhc3RfZGV2KHNjbWQtPnJlcXVlc3QpOworCQlyZXR1cm4gKHNjbWQtPnJlcXVlc3QtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9ERVYpOwogCWNhc2UgRElEX0VSUk9SOgogCQlpZiAobXNnX2J5dGUoc2NtZC0+cmVzdWx0KSA9PSBDT01NQU5EX0NPTVBMRVRFICYmCiAJCSAgICBzdGF0dXNfYnl0ZShzY21kLT5yZXN1bHQpID09IFJFU0VSVkFUSU9OX0NPTkZMSUNUKQogCQkJcmV0dXJuIDA7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgRElEX1NPRlRfRVJST1I6Ci0JCXJldHVybiBibGtfZmFpbGZhc3RfZHJpdmVyKHNjbWQtPnJlcXVlc3QpOworCQlyZXR1cm4gKHNjbWQtPnJlcXVlc3QtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9EUklWRVIpOwogCX0KIAogCXN3aXRjaCAoc3RhdHVzX2J5dGUoc2NtZC0+cmVzdWx0KSkgewpAQCAtMTM0OSw3ICsxMzQ5LDkgQEAKIAkJICogYXNzdW1lIGNhbGxlciBoYXMgY2hlY2tlZCBzZW5zZSBhbmQgZGV0ZXJtaW50ZWQKIAkJICogdGhlIGNoZWNrIGNvbmRpdGlvbiB3YXMgcmV0cnlhYmxlLgogCQkgKi8KLQkJcmV0dXJuIGJsa19mYWlsZmFzdF9kZXYoc2NtZC0+cmVxdWVzdCk7CisJCWlmIChzY21kLT5yZXF1ZXN0LT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfREVWIHx8CisJCSAgICBzY21kLT5yZXF1ZXN0LT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykKKwkJCXJldHVybiAxOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCAxNjQ2ZmU3Li45YWRlNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtODUsNyArODUsNyBAQAogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHJlcS0+c3BlY2lhbDsKIAotCXJlcS0+Y21kX2ZsYWdzICY9IH5SRVFfRE9OVFBSRVA7CisJYmxrX3VucHJlcF9yZXF1ZXN0KHJlcSk7CiAJcmVxLT5zcGVjaWFsID0gTlVMTDsKIAogCXNjc2lfcHV0X2NvbW1hbmQoY21kKTsKQEAgLTcyMiw3ICs3MjIsNyBAQAogCQkJc2Vuc2VfZGVmZXJyZWQgPSBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKCZzc2hkcik7CiAJfQogCi0JaWYgKGJsa19wY19yZXF1ZXN0KHJlcSkpIHsgLyogU0dfSU8gaW9jdGwgZnJvbSBibG9jayBsZXZlbCAqLworCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7IC8qIFNHX0lPIGlvY3RsIGZyb20gYmxvY2sgbGV2ZWwgKi8KIAkJcmVxLT5lcnJvcnMgPSByZXN1bHQ7CiAJCWlmIChyZXN1bHQpIHsKIAkJCWlmIChzZW5zZV92YWxpZCAmJiByZXEtPnNlbnNlKSB7CkBAIC03NTcsNyArNzU3LDggQEAKIAkJfQogCX0KIAotCUJVR19PTihibGtfYmlkaV9ycShyZXEpKTsgLyogYmlkaSBub3Qgc3VwcG9ydCBmb3IgIWJsa19wY19yZXF1ZXN0IHlldCAqLworCS8qIG5vIGJpZGkgc3VwcG9ydCBmb3IgIVJFUV9UWVBFX0JMT0NLX1BDIHlldCAqLworCUJVR19PTihibGtfYmlkaV9ycShyZXEpKTsKIAogCS8qCiAJICogTmV4dCBkZWFsIHdpdGggYW55IHNlY3RvcnMgd2hpY2ggd2Ugd2VyZSBhYmxlIHRvIGNvcnJlY3RseQpAQCAtMTAxMCwxMSArMTAxMSw4IEBACiAKIGVycl9leGl0OgogCXNjc2lfcmVsZWFzZV9idWZmZXJzKGNtZCk7Ci0JaWYgKGVycm9yID09IEJMS1BSRVBfS0lMTCkKLQkJc2NzaV9wdXRfY29tbWFuZChjbWQpOwotCWVsc2UgLyogQkxLUFJFUF9ERUZFUiAqLwotCQlzY3NpX3VucHJlcF9yZXF1ZXN0KGNtZC0+cmVxdWVzdCk7Ci0KKwlzY3NpX3B1dF9jb21tYW5kKGNtZCk7CisJY21kLT5yZXF1ZXN0LT5zcGVjaWFsID0gTlVMTDsKIAlyZXR1cm4gZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfaW5pdF9pbyk7CkBAIC0xMzcyLDEyICsxMzcwLDYgQEAKIAogCWJsa19zdGFydF9yZXF1ZXN0KHJlcSk7CiAKLQlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgImltcG9zc2libGUgcmVxdWVzdCBpbiAlcy5cbiIsCi0JCQkJIF9fZnVuY19fKTsKLQkJQlVHKCk7Ci0JfQotCiAJc2RldiA9IGNtZC0+ZGV2aWNlOwogCXN0YXJnZXQgPSBzY3NpX3RhcmdldChzZGV2KTsKIAlzaG9zdCA9IHNkZXYtPmhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmggYi9kcml2ZXJzL3Njc2kvc2NzaV9wcml2LmgKaW5kZXggMDI2Mjk1ZS4uYjQwNTZkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJpdi5oCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3ByaXYuaApAQCAtMTQ4LDggKzE0OCw2IEBACiAvKiBzY3NpX3BtLmMgKi8KICNpZmRlZiBDT05GSUdfUE1fT1BTCiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2NzaV9idXNfcG1fb3BzOwotI2Vsc2UgLyogQ09ORklHX1BNX09QUyAqLwotI2RlZmluZSBzY3NpX2J1c19wbV9vcHMJCSgqTlVMTCkKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiBleHRlcm4gdm9pZCBzY3NpX2F1dG9wbV9nZXRfdGFyZ2V0KHN0cnVjdCBzY3NpX3RhcmdldCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCmluZGV4IDU2MmZiM2IuLmMzZjY3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwpAQCAtMzgxLDcgKzM4MSw5IEBACiAgICAgICAgIC5uYW1lCQk9ICJzY3NpIiwKICAgICAgICAgLm1hdGNoCQk9IHNjc2lfYnVzX21hdGNoLAogCS51ZXZlbnQJCT0gc2NzaV9idXNfdWV2ZW50LAorI2lmZGVmIENPTkZJR19QTV9PUFMKIAkucG0JCT0gJnNjc2lfYnVzX3BtX29wcywKKyNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfYnVzX3R5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IGVkYjZiMzYuLmQ3ZTQ3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnQuaD4KQEAgLTE3MzAsMTIgKzE3MzEsMTEgQEAKIAogCS8qIFZhbGlkYXRlIGFuZCBzdG9yZSB0aGUgbmV3IG5hbWUgKi8KIAlmb3IgKGk9MCwgaj0wOyBpIDwgMTY7IGkrKykgewotCQlpZiAoKCpucyA+PSAnYScpICYmICgqbnMgPD0gJ2YnKSkKLQkJCWogPSAoKGogPDwgNCkgfCAoKCpucysrIC0nYScpICsgMTApKTsKLQkJZWxzZSBpZiAoKCpucyA+PSAnQScpICYmICgqbnMgPD0gJ0YnKSkKLQkJCWogPSAoKGogPDwgNCkgfCAoKCpucysrIC0nQScpICsgMTApKTsKLQkJZWxzZSBpZiAoKCpucyA+PSAnMCcpICYmICgqbnMgPD0gJzknKSkKLQkJCWogPSAoKGogPDwgNCkgfCAoKm5zKysgLScwJykpOworCQlpbnQgdmFsdWU7CisKKwkJdmFsdWUgPSBoZXhfdG9fYmluKCpucysrKTsKKwkJaWYgKHZhbHVlID49IDApCisJCQlqID0gKGogPDwgNCkgfCB2YWx1ZTsKIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChpICUgMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCBjYzhhMWQxLi4yNzE0YmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuYworKysgYi9kcml2ZXJzL3Njc2kvc2QuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nX2hlbHBlcnMuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgpAQCAtMTE4LDggKzExOSw4IEBACiAgKiBvYmplY3QgYWZ0ZXIgbGFzdCBwdXQpICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNkX3JlZl9tdXRleCk7CiAKLXN0cnVjdCBrbWVtX2NhY2hlICpzZF9jZGJfY2FjaGU7Ci1tZW1wb29sX3QgKnNkX2NkYl9wb29sOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzZF9jZGJfY2FjaGU7CitzdGF0aWMgbWVtcG9vbF90ICpzZF9jZGJfcG9vbDsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNkX2NhY2hlX3R5cGVzW10gPSB7CiAJIndyaXRlIHRocm91Z2giLCAibm9uZSIsICJ3cml0ZSBiYWNrIiwKQEAgLTE0Niw3ICsxNDcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkX2NhY2hlX3R5cGVzKTsgaSsrKSB7Ci0JCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oc2RfY2FjaGVfdHlwZXNbaV0pOworCQlsZW4gPSBzdHJsZW4oc2RfY2FjaGVfdHlwZXNbaV0pOwogCQlpZiAoc3RybmNtcChzZF9jYWNoZV90eXBlc1tpXSwgYnVmLCBsZW4pID09IDAgJiYKIAkJICAgIGJ1ZltsZW5dID09ICdcbicpIHsKIAkJCWN0ID0gaTsKQEAgLTQxMSw1NCArNDEyLDg1IEBACiB9CiAKIC8qKgotICogc2RfcHJlcGFyZV9kaXNjYXJkIC0gdW5tYXAgYmxvY2tzIG9uIHRoaW5seSBwcm92aXNpb25lZCBkZXZpY2UKKyAqIHNjc2lfc2V0dXBfZGlzY2FyZF9jbW5kIC0gdW5tYXAgYmxvY2tzIG9uIHRoaW5seSBwcm92aXNpb25lZCBkZXZpY2UKKyAqIEBzZHA6IHNjc2kgZGV2aWNlIHRvIG9wZXJhdGUgb25lCiAgKiBAcnE6IFJlcXVlc3QgdG8gcHJlcGFyZQogICoKICAqIFdpbGwgaXNzdWUgZWl0aGVyIFVOTUFQIG9yIFdSSVRFIFNBTUUoMTYpIGRlcGVuZGluZyBvbiBwcmVmZXJlbmNlCiAgKiBpbmRpY2F0ZWQgYnkgdGFyZ2V0IGRldmljZS4KICAqKi8KLXN0YXRpYyBpbnQgc2RfcHJlcGFyZV9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyBpbnQgc2NzaV9zZXR1cF9kaXNjYXJkX2NtbmQoc3RydWN0IHNjc2lfZGV2aWNlICpzZHAsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrKHJxLT5ycV9kaXNrKTsKIAlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOwogCXNlY3Rvcl90IHNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwotCXVuc2lnbmVkIGludCBudW0gPSBiaW9fc2VjdG9ycyhiaW8pOworCXVuc2lnbmVkIGludCBucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCByZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlpZiAoc2RrcC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZSA9PSA0MDk2KSB7CiAJCXNlY3RvciA+Pj0gMzsKLQkJbnVtID4+PSAzOworCQlucl9zZWN0b3JzID4+PSAzOwogCX0KIAotCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCXJxLT50aW1lb3V0ID0gU0RfVElNRU9VVDsKIAogCW1lbXNldChycS0+Y21kLCAwLCBycS0+Y21kX2xlbik7CiAKLQlpZiAoc2RrcC0+dW5tYXApIHsKLQkJY2hhciAqYnVmID0ga21hcF9hdG9taWMoYmlvX3BhZ2UoYmlvKSwgS01fVVNFUjApOworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBCTEtQUkVQX0RFRkVSOwogCisJaWYgKHNka3AtPnVubWFwKSB7CisJCWNoYXIgKmJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKworCQlycS0+Y21kX2xlbiA9IDEwOwogCQlycS0+Y21kWzBdID0gVU5NQVA7CiAJCXJxLT5jbWRbOF0gPSAyNDsKLQkJcnEtPmNtZF9sZW4gPSAxMDsKLQotCQkvKiBFbnN1cmUgdGhhdCBkYXRhIGxlbmd0aCBtYXRjaGVzIHBheWxvYWQgKi8KLQkJcnEtPl9fZGF0YV9sZW4gPSBiaW8tPmJpX3NpemUgPSBiaW8tPmJpX2lvX3ZlYy0+YnZfbGVuID0gMjQ7CiAKIAkJcHV0X3VuYWxpZ25lZF9iZTE2KDYgKyAxNiwgJmJ1ZlswXSk7CiAJCXB1dF91bmFsaWduZWRfYmUxNigxNiwgJmJ1ZlsyXSk7CiAJCXB1dF91bmFsaWduZWRfYmU2NChzZWN0b3IsICZidWZbOF0pOwotCQlwdXRfdW5hbGlnbmVkX2JlMzIobnVtLCAmYnVmWzE2XSk7CisJCXB1dF91bmFsaWduZWRfYmUzMihucl9zZWN0b3JzLCAmYnVmWzE2XSk7CiAKLQkJa3VubWFwX2F0b21pYyhidWYsIEtNX1VTRVIwKTsKKwkJbGVuID0gMjQ7CiAJfSBlbHNlIHsKKwkJcnEtPmNtZF9sZW4gPSAxNjsKIAkJcnEtPmNtZFswXSA9IFdSSVRFX1NBTUVfMTY7CiAJCXJxLT5jbWRbMV0gPSAweDg7IC8qIFVOTUFQICovCiAJCXB1dF91bmFsaWduZWRfYmU2NChzZWN0b3IsICZycS0+Y21kWzJdKTsKLQkJcHV0X3VuYWxpZ25lZF9iZTMyKG51bSwgJnJxLT5jbWRbMTBdKTsKLQkJcnEtPmNtZF9sZW4gPSAxNjsKKwkJcHV0X3VuYWxpZ25lZF9iZTMyKG5yX3NlY3RvcnMsICZycS0+Y21kWzEwXSk7CisKKwkJbGVuID0gc2RrcC0+ZGV2aWNlLT5zZWN0b3Jfc2l6ZTsKIAl9CiAKLQlyZXR1cm4gQkxLUFJFUF9PSzsKKwlibGtfYWRkX3JlcXVlc3RfcGF5bG9hZChycSwgcGFnZSwgbGVuKTsKKwlyZXQgPSBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHNkcCwgcnEpOworCXJxLT5idWZmZXIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJaWYgKHJldCAhPSBCTEtQUkVQX09LKSB7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQlycS0+YnVmZmVyID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzY3NpX3NldHVwX2ZsdXNoX2NtbmQoc3RydWN0IHNjc2lfZGV2aWNlICpzZHAsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlycS0+dGltZW91dCA9IFNEX1RJTUVPVVQ7CisJcnEtPnJldHJpZXMgPSBTRF9NQVhfUkVUUklFUzsKKwlycS0+Y21kWzBdID0gU1lOQ0hST05JWkVfQ0FDSEU7CisJcnEtPmNtZF9sZW4gPSAxMDsKKworCXJldHVybiBzY3NpX3NldHVwX2Jsa19wY19jbW5kKHNkcCwgcnEpOworfQorCitzdGF0aWMgdm9pZCBzZF91bnByZXBfZm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylycS0+YnVmZmVyKTsKKwkJcnEtPmJ1ZmZlciA9IE5VTEw7CisJfQogfQogCiAvKioKQEAgLTQ4NSwxMCArNTE3LDEzIEBACiAJICogRGlzY2FyZCByZXF1ZXN0IGNvbWUgaW4gYXMgUkVRX1RZUEVfRlMgYnV0IHdlIHR1cm4gdGhlbSBpbnRvCiAJICogYmxvY2sgUEMgcmVxdWVzdHMgdG8gbWFrZSBsaWZlIGVhc2llci4KIAkgKi8KLQlpZiAoYmxrX2Rpc2NhcmRfcnEocnEpKQotCQlyZXQgPSBzZF9wcmVwYXJlX2Rpc2NhcmQocnEpOwotCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgeworCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpIHsKKwkJcmV0ID0gc2NzaV9zZXR1cF9kaXNjYXJkX2NtbmQoc2RwLCBycSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9GTFVTSCkgeworCQlyZXQgPSBzY3NpX3NldHVwX2ZsdXNoX2NtbmQoc2RwLCBycSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXJldCA9IHNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoc2RwLCBycSk7CiAJCWdvdG8gb3V0OwogCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTKSB7CkBAIC02MzYsNyArNjcxLDcgQEAKIAkJU0NwbnQtPmNtbmRbMF0gPSBWQVJJQUJMRV9MRU5HVEhfQ01EOwogCQlTQ3BudC0+Y21uZFs3XSA9IDB4MTg7CiAJCVNDcG50LT5jbW5kWzldID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEKSA/IFJFQURfMzIgOiBXUklURV8zMjsKLQkJU0NwbnQtPmNtbmRbMTBdID0gcHJvdGVjdCB8IChibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDApOworCQlTQ3BudC0+Y21uZFsxMF0gPSBwcm90ZWN0IHwgKChycS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgPyAweDggOiAwKTsKIAogCQkvKiBMQkEgKi8KIAkJU0NwbnQtPmNtbmRbMTJdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDU2KSAmIDB4ZmYgOiAwOwpAQCAtNjYxLDcgKzY5Niw3IEBACiAJCVNDcG50LT5jbW5kWzMxXSA9ICh1bnNpZ25lZCBjaGFyKSB0aGlzX2NvdW50ICYgMHhmZjsKIAl9IGVsc2UgaWYgKGJsb2NrID4gMHhmZmZmZmZmZikgewogCQlTQ3BudC0+Y21uZFswXSArPSBSRUFEXzE2IC0gUkVBRF82OwotCQlTQ3BudC0+Y21uZFsxXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKKwkJU0NwbnQtPmNtbmRbMV0gPSBwcm90ZWN0IHwgKChycS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgPyAweDggOiAwKTsKIAkJU0NwbnQtPmNtbmRbMl0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNTYpICYgMHhmZiA6IDA7CiAJCVNDcG50LT5jbW5kWzNdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQ4KSAmIDB4ZmYgOiAwOwogCQlTQ3BudC0+Y21uZFs0XSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0MCkgJiAweGZmIDogMDsKQEAgLTY4Miw3ICs3MTcsNyBAQAogCQkJdGhpc19jb3VudCA9IDB4ZmZmZjsKIAogCQlTQ3BudC0+Y21uZFswXSArPSBSRUFEXzEwIC0gUkVBRF82OwotCQlTQ3BudC0+Y21uZFsxXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKKwkJU0NwbnQtPmNtbmRbMV0gPSBwcm90ZWN0IHwgKChycS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgPyAweDggOiAwKTsKIAkJU0NwbnQtPmNtbmRbMl0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CiAJCVNDcG50LT5jbW5kWzNdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAxNikgJiAweGZmOwogCQlTQ3BudC0+Y21uZFs0XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gOCkgJiAweGZmOwpAQCAtNjkxLDcgKzcyNiw3IEBACiAJCVNDcG50LT5jbW5kWzddID0gKHVuc2lnbmVkIGNoYXIpICh0aGlzX2NvdW50ID4+IDgpICYgMHhmZjsKIAkJU0NwbnQtPmNtbmRbOF0gPSAodW5zaWduZWQgY2hhcikgdGhpc19jb3VudCAmIDB4ZmY7CiAJfSBlbHNlIHsKLQkJaWYgKHVubGlrZWx5KGJsa19mdWFfcnEocnEpKSkgeworCQlpZiAodW5saWtlbHkocnEtPmNtZF9mbGFncyAmIFJFUV9GVUEpKSB7CiAJCQkvKgogCQkJICogVGhpcyBoYXBwZW5zIG9ubHkgaWYgdGhpcyBkcml2ZSBmYWlsZWQKIAkJCSAqIDEwYnl0ZSBydyBjb21tYW5kIHdpdGggSUxMRUdBTF9SRVFVRVNUCkBAIC03NDUsNiArNzgwLDggQEAKICAqCW9yIGZyb20gd2l0aGluIHRoZSBrZXJuZWwgKGUuZy4gYXMgYSByZXN1bHQgb2YgYSBtb3VudCgxKSApLgogICoJSW4gdGhlIGxhdHRlciBjYXNlIEBpbm9kZSBhbmQgQGZpbHAgY2FycnkgYW4gYWJyaWRnZWQgYW1vdW50CiAgKglvZiBpbmZvcm1hdGlvbiBhcyBub3RlZCBhYm92ZS4KKyAqCisgKglMb2NraW5nOiBjYWxsZWQgd2l0aCBiZGV2LT5iZF9tdXRleCBoZWxkLgogICoqLwogc3RhdGljIGludCBzZF9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKIHsKQEAgLTc5OSw3ICs4MzYsNyBAQAogCWlmICghc2NzaV9kZXZpY2Vfb25saW5lKHNkZXYpKQogCQlnb3RvIGVycm9yX291dDsKIAotCWlmICghc2RrcC0+b3BlbmVycysrICYmIHNkZXYtPnJlbW92YWJsZSkgeworCWlmICgoYXRvbWljX2luY19yZXR1cm4oJnNka3AtPm9wZW5lcnMpID09IDEpICYmIHNkZXYtPnJlbW92YWJsZSkgewogCQlpZiAoc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkZXYpKQogCQkJc2NzaV9zZXRfbWVkaXVtX3JlbW92YWwoc2RldiwgU0NTSV9SRU1PVkFMX1BSRVZFTlQpOwogCX0KQEAgLTgyMyw2ICs4NjAsOCBAQAogICoKICAqCU5vdGU6IG1heSBibG9jayAodW5pbnRlcnJ1cHRpYmxlKSBpZiBlcnJvciByZWNvdmVyeSBpcyB1bmRlcndheQogICoJb24gdGhpcyBkaXNrLgorICoKKyAqCUxvY2tpbmc6IGNhbGxlZCB3aXRoIGJkZXYtPmJkX211dGV4IGhlbGQuCiAgKiovCiBzdGF0aWMgaW50IHNkX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKIHsKQEAgLTgzMSw3ICs4NzAsNyBAQAogCiAJU0NTSV9MT0dfSExRVUVVRSgzLCBzZF9wcmludGsoS0VSTl9JTkZPLCBzZGtwLCAic2RfcmVsZWFzZVxuIikpOwogCi0JaWYgKCEtLXNka3AtPm9wZW5lcnMgJiYgc2Rldi0+cmVtb3ZhYmxlKSB7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZzZGtwLT5vcGVuZXJzKSAmJiBzZGV2LT5yZW1vdmFibGUpIHsKIAkJaWYgKHNjc2lfYmxvY2tfd2hlbl9wcm9jZXNzaW5nX2Vycm9ycyhzZGV2KSkKIAkJCXNjc2lfc2V0X21lZGl1bV9yZW1vdmFsKHNkZXYsIFNDU0lfUkVNT1ZBTF9BTExPVyk7CiAJfQpAQCAtOTA0LDcgKzk0Myw3IEBACiAJZXJyb3IgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZHAsIGNtZCwgcCwKIAkJCQkJKG1vZGUgJiBGTU9ERV9OREVMQVkpICE9IDApOwogCWlmICghc2NzaV9ibG9ja193aGVuX3Byb2Nlc3NpbmdfZXJyb3JzKHNkcCkgfHwgIWVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBTZW5kIFNDU0kgYWRkcmVzc2luZyBpb2N0bHMgZGlyZWN0bHkgdG8gbWlkIGxldmVsLCBzZW5kIG90aGVyCkBAIC05MTQsMTMgKzk1MywxNyBAQAogCXN3aXRjaCAoY21kKSB7CiAJCWNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46CiAJCWNhc2UgU0NTSV9JT0NUTF9HRVRfQlVTX05VTUJFUjoKLQkJCXJldHVybiBzY3NpX2lvY3RsKHNkcCwgY21kLCBwKTsKKwkJCWVycm9yID0gc2NzaV9pb2N0bChzZHAsIGNtZCwgcCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycm9yID0gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwgcCk7CiAJCQlpZiAoZXJyb3IgIT0gLUVOT1RUWSkKLQkJCQlyZXR1cm4gZXJyb3I7CisJCQkJYnJlYWs7CisJCQllcnJvciA9IHNjc2lfaW9jdGwoc2RwLCBjbWQsIHApOworCQkJYnJlYWs7CiAJfQotCXJldHVybiBzY3NpX2lvY3RsKHNkcCwgY21kLCBwKTsKK291dDoKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9tZWRpYV9ub3RfcHJlc2VudChzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwKQpAQCAtMTA0NSwxNSArMTA4OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNkX3ByZXBhcmVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKLQlycS0+dGltZW91dCA9IFNEX1RJTUVPVVQ7Ci0JcnEtPnJldHJpZXMgPSBTRF9NQVhfUkVUUklFUzsKLQlycS0+Y21kWzBdID0gU1lOQ0hST05JWkVfQ0FDSEU7Ci0JcnEtPmNtZF9sZW4gPSAxMDsKLX0KLQogc3RhdGljIHZvaWQgc2RfcmVzY2FuKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwID0gc2NzaV9kaXNrX2dldF9mcm9tX2RldihkZXYpOwpAQCAtMTEwMyw3ICsxMTM3LDcgQEAKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQkJPSBzZF9vcGVuLAogCS5yZWxlYXNlCQk9IHNkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAkJPSBzZF9pb2N0bCwKKwkuaW9jdGwJCQk9IHNkX2lvY3RsLAogCS5nZXRnZW8JCQk9IHNkX2dldGdlbywKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAkJPSBzZF9jb21wYXRfaW9jdGwsCkBAIC0xMTIwLDcgKzExNTQsNyBAQAogCXU2NCBiYWRfbGJhOwogCWludCBpbmZvX3ZhbGlkOwogCi0JaWYgKCFibGtfZnNfcmVxdWVzdChzY21kLT5yZXF1ZXN0KSkKKwlpZiAoc2NtZC0+cmVxdWVzdC0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMpCiAJCXJldHVybiAwOwogCiAJaW5mb192YWxpZCA9IHNjc2lfZ2V0X3NlbnNlX2luZm9fZmxkKHNjbWQtPnNlbnNlX2J1ZmZlciwKQEAgLTExNzEsNiArMTIwNSwxMiBAQAogCWludCBzZW5zZV92YWxpZCA9IDA7CiAJaW50IHNlbnNlX2RlZmVycmVkID0gMDsKIAorCWlmIChTQ3BudC0+cmVxdWVzdC0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpIHsKKwkJaWYgKCFyZXN1bHQpCisJCQlzY3NpX3NldF9yZXNpZChTQ3BudCwgMCk7CisJCXJldHVybiBnb29kX2J5dGVzOworCX0KKwogCWlmIChyZXN1bHQpIHsKIAkJc2Vuc2VfdmFsaWQgPSBzY3NpX2NvbW1hbmRfbm9ybWFsaXplX3NlbnNlKFNDcG50LCAmc3NoZHIpOwogCQlpZiAoc2Vuc2VfdmFsaWQpCkBAIC0xMzgzLDcgKzE0MjMsNyBAQAogLyoKICAqIERldGVybWluZSB3aGV0aGVyIGRpc2sgc3VwcG9ydHMgRGF0YSBJbnRlZ3JpdHkgRmllbGQuCiAgKi8KLXZvaWQgc2RfcmVhZF9wcm90ZWN0aW9uX3R5cGUoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQorc3RhdGljIHZvaWQgc2RfcmVhZF9wcm90ZWN0aW9uX3R5cGUoc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwogCXU4IHR5cGU7CkBAIC0xOTI5LDcgKzE5NjksNyBAQAogICogVGhlIEFUTyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIERJRiBhcHBsaWNhdGlvbiB0YWcgaXMgYXZhaWxhYmxlCiAgKiBmb3IgdXNlIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgogICovCi12b2lkIHNkX3JlYWRfYXBwX3RhZ19vd24oc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgdW5zaWduZWQgY2hhciAqYnVmZmVyKQorc3RhdGljIHZvaWQgc2RfcmVhZF9hcHBfdGFnX293bihzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCiB7CiAJaW50IHJlcywgb2Zmc2V0OwogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gc2RrcC0+ZGV2aWNlOwpAQCAtMjEyMSw3ICsyMTYxLDcgQEAKIAllbHNlCiAJCW9yZGVyZWQgPSBRVUVVRV9PUkRFUkVEX0RSQUlOOwogCi0JYmxrX3F1ZXVlX29yZGVyZWQoc2RrcC0+ZGlzay0+cXVldWUsIG9yZGVyZWQsIHNkX3ByZXBhcmVfZmx1c2gpOworCWJsa19xdWV1ZV9vcmRlcmVkKHNka3AtPmRpc2stPnF1ZXVlLCBvcmRlcmVkKTsKIAogCXNldF9jYXBhY2l0eShkaXNrLCBzZGtwLT5jYXBhY2l0eSk7CiAJa2ZyZWUoYnVmZmVyKTsKQEAgLTIyMzQsNiArMjI3NCw3IEBACiAJc2RfcmV2YWxpZGF0ZV9kaXNrKGdkKTsKIAogCWJsa19xdWV1ZV9wcmVwX3JxKHNkcC0+cmVxdWVzdF9xdWV1ZSwgc2RfcHJlcF9mbik7CisJYmxrX3F1ZXVlX3VucHJlcF9ycShzZHAtPnJlcXVlc3RfcXVldWUsIHNkX3VucHJlcF9mbik7CiAKIAlnZC0+ZHJpdmVyZnNfZGV2ID0gJnNkcC0+c2Rldl9nZW5kZXY7CiAJZ2QtPmZsYWdzID0gR0VOSERfRkxfRVhUX0RFVlQ7CkBAIC0yMjc0LDcgKzIzMTUsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RwID0gdG9fc2NzaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwOwogCXN0cnVjdCBnZW5kaXNrICpnZDsKLQl1MzIgaW5kZXg7CisJaW50IGluZGV4OwogCWludCBlcnJvcjsKIAogCWVycm9yID0gLUVOT0RFVjsKQEAgLTIzMTMsNyArMjM1NCw3IEBACiAJc2RrcC0+ZHJpdmVyID0gJnNkX3RlbXBsYXRlOwogCXNka3AtPmRpc2sgPSBnZDsKIAlzZGtwLT5pbmRleCA9IGluZGV4OwotCXNka3AtPm9wZW5lcnMgPSAwOworCWF0b21pY19zZXQoJnNka3AtPm9wZW5lcnMsIDApOwogCXNka3AtPnByZXZpb3VzX3N0YXRlID0gMTsKIAogCWlmICghc2RwLT5yZXF1ZXN0X3F1ZXVlLT5ycV90aW1lb3V0KSB7CkBAIC0yMzcyLDYgKzI0MTMsNyBAQAogCiAJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwogCWJsa19xdWV1ZV9wcmVwX3JxKHNka3AtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgc2NzaV9wcmVwX2ZuKTsKKwlibGtfcXVldWVfdW5wcmVwX3JxKHNka3AtPmRldmljZS0+cmVxdWVzdF9xdWV1ZSwgTlVMTCk7CiAJZGV2aWNlX2RlbCgmc2RrcC0+ZGV2KTsKIAlkZWxfZ2VuZGlzayhzZGtwLT5kaXNrKTsKIAlzZF9zaHV0ZG93bihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmggYi9kcml2ZXJzL3Njc2kvc2QuaAppbmRleCA0M2QzY2FmLi5mODFhOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2QuaAorKysgYi9kcml2ZXJzL3Njc2kvc2QuaApAQCAtNDcsNyArNDcsNyBAQAogCXN0cnVjdCBzY3NpX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBkZXZpY2UJZGV2OwogCXN0cnVjdCBnZW5kaXNrCSpkaXNrOwotCXVuc2lnbmVkIGludAlvcGVuZXJzOwkvKiBwcm90ZWN0ZWQgYnkgQktMIGZvciBub3csIHl1Y2sgKi8KKwlhdG9taWNfdAlvcGVuZXJzOwogCXNlY3Rvcl90CWNhcGFjaXR5OwkvKiBzaXplIGluIDUxMi1ieXRlIHNlY3RvcnMgKi8KIAl1MzIJCWluZGV4OwogCXVuc2lnbmVkIHNob3J0CWh3X3NlY3Rvcl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCAyOTY4YzZiLi43OGQ2MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTY4NiwxNCArMTY4Niw5IEBACiAJCWludCBsZW4sIHNpemUgPSBzaXplb2Yoc3RydWN0IHNnX2lvdmVjKSAqIGlvdl9jb3VudDsKIAkJc3RydWN0IGlvdmVjICppb3Y7CiAKLQkJaW92ID0ga21hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFpb3YpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoaW92LCBocC0+ZHhmZXJwLCBzaXplKSkgewotCQkJa2ZyZWUoaW92KTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9CisJCWlvdiA9IG1lbWR1cF91c2VyKGhwLT5keGZlcnAsIHNpemUpOworCQlpZiAoSVNfRVJSKGlvdikpCisJCQlyZXR1cm4gUFRSX0VSUihpb3YpOwogCiAJCWxlbiA9IGlvdl9sZW5ndGgoaW92LCBpb3ZfY291bnQpOwogCQlpZiAoaHAtPmR4ZmVyX2xlbiA8IGxlbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCAwYTkwYWJjLi5iYTljM2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTQ2NiwyMiArNDY3LDI3IEBACiAKIHN0YXRpYyBpbnQgc3JfYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCiB7Ci0Jc3RydWN0IHNjc2lfY2QgKmNkID0gc2NzaV9jZF9nZXQoYmRldi0+YmRfZGlzayk7CisJc3RydWN0IHNjc2lfY2QgKmNkOwogCWludCByZXQgPSAtRU5YSU87CiAKKwlsb2NrX2tlcm5lbCgpOworCWNkID0gc2NzaV9jZF9nZXQoYmRldi0+YmRfZGlzayk7CiAJaWYgKGNkKSB7CiAJCXJldCA9IGNkcm9tX29wZW4oJmNkLT5jZGksIGJkZXYsIG1vZGUpOwogCQlpZiAocmV0KQogCQkJc2NzaV9jZF9wdXQoY2QpOwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzcl9ibG9ja19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHNjc2lfY2QgKmNkID0gc2NzaV9jZChkaXNrKTsKKwlsb2NrX2tlcm5lbCgpOwogCWNkcm9tX3JlbGVhc2UoJmNkLT5jZGksIG1vZGUpOwogCXNjc2lfY2RfcHV0KGNkKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Myw2ICs0OTksOCBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByZXQ7CiAKKwlsb2NrX2tlcm5lbCgpOworCiAJLyoKIAkgKiBTZW5kIFNDU0kgYWRkcmVzc2luZyBpb2N0bHMgZGlyZWN0bHkgdG8gbWlkIGxldmVsLCBzZW5kIG90aGVyCiAJICogaW9jdGxzIHRvIGNkcm9tL2Jsb2NrIGxldmVsLgpAQCAtNTAwLDEyICs1MDgsMTMgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0NTSV9JT0NUTF9HRVRfSURMVU46CiAJY2FzZSBTQ1NJX0lPQ1RMX0dFVF9CVVNfTlVNQkVSOgotCQlyZXR1cm4gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOworCQlyZXQgPSBzY3NpX2lvY3RsKHNkZXYsIGNtZCwgYXJncCk7CisJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IGNkcm9tX2lvY3RsKCZjZC0+Y2RpLCBiZGV2LCBtb2RlLCBjbWQsIGFyZyk7CiAJaWYgKHJldCAhPSAtRU5PU1lTKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCS8qCiAJICogRU5PREVWIG1lYW5zIHRoYXQgd2UgZGlkbid0IHJlY29nbmlzZSB0aGUgaW9jdGwsIG9yIHRoYXQgd2UKQEAgLTUxNiw4ICs1MjUsMTIgQEAKIAlyZXQgPSBzY3NpX25vbmJsb2NrYWJsZV9pb2N0bChzZGV2LCBjbWQsIGFyZ3AsCiAJCQkJCShtb2RlICYgRk1PREVfTkRFTEFZKSAhPSAwKTsKIAlpZiAocmV0ICE9IC1FTk9ERVYpCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIHNjc2lfaW9jdGwoc2RldiwgY21kLCBhcmdwKTsKKwkJZ290byBvdXQ7CisJcmV0ID0gc2NzaV9pb2N0bChzZGV2LCBjbWQsIGFyZ3ApOworCitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc3JfYmxvY2tfbWVkaWFfY2hhbmdlZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKQEAgLTUzMSw3ICs1NDQsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBzcl9ibG9ja19vcGVuLAogCS5yZWxlYXNlCT0gc3JfYmxvY2tfcmVsZWFzZSwKLQkubG9ja2VkX2lvY3RsCT0gc3JfYmxvY2tfaW9jdGwsCisJLmlvY3RsCQk9IHNyX2Jsb2NrX2lvY3RsLAogCS5tZWRpYV9jaGFuZ2VkCT0gc3JfYmxvY2tfbWVkaWFfY2hhbmdlZCwKIAkvKiAKIAkgKiBObyBjb21wYXRfaW9jdGwgZm9yIG5vdyBiZWNhdXNlIHNyX2Jsb2NrX2lvY3RsIG5ldmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKaW5kZXggYjU4MzhkNS4uNzEzNjIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYwpAQCAtMjAyMiw3ICsyMDIyLDcgQEAKIAkJaWYoKGNvdW50ID4gU1VOM19ETUFfTUlOU0laRSkgJiYgKHN1bjNfZG1hX3NldHVwX2RvbmUKIAkJCQkJCSAgIT0gY21kKSkKIAkJewotCQkJaWYoYmxrX2ZzX3JlcXVlc3QoY21kLT5yZXF1ZXN0KSkgeworCQkJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpIHsKIAkJCQlzdW4zc2NzaV9kbWFfc2V0dXAoZCwgY291bnQsCiAJCQkJCQkgICBycV9kYXRhX2RpcihjbWQtPnJlcXVlc3QpKTsKIAkJCQlzdW4zX2RtYV9zZXR1cF9kb25lID0gY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCmluZGV4IGU2MDZjZjAuLjYxM2Y1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKQEAgLTUyNCw3ICs1MjQsNyBAQAogCQkJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCQkJCQkgIGludCB3cml0ZV9mbGFnKQogewotCWlmKGJsa19mc19yZXF1ZXN0KGNtZC0+cmVxdWVzdCkpCisJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCiAgCQlyZXR1cm4gd2FudGVkOwogCWVsc2UKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYwppbmRleCBhYWE0ZmQwLi43YzUyNmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogCQkJCQkJICBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsCiAJCQkJCQkgIGludCB3cml0ZV9mbGFnKQogewotCWlmKGJsa19mc19yZXF1ZXN0KGNtZC0+cmVxdWVzdCkpCisJaWYgKGNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCiAgCQlyZXR1cm4gd2FudGVkOwogCWVsc2UKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jIGIvZHJpdmVycy9zZXJpYWwvMjEyODUuYwppbmRleCA4NjgxZjEzLi5kODlhYTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgYmF1ZCwgcXVvdCwgaF9sY3I7CisJdW5zaWduZWQgaW50IGJhdWQsIHF1b3QsIGhfbGNyLCBiOwogCiAJLyoKIAkgKiBXZSBkb24ndCBzdXBwb3J0IG1vZGVtIGNvbnRyb2wgbGluZXMuCkBAIC0yMzQsMTIgKzIzNCw4IEBACiAJICovCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOyAKIAlxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKLQotCWlmIChwb3J0LT5zdGF0ZSAmJiBwb3J0LT5zdGF0ZS0+cG9ydC50dHkpIHsKLQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKLQkJdW5zaWduZWQgaW50IGIgPSBwb3J0LT51YXJ0Y2xrIC8gKDE2ICogcXVvdCk7Ci0JCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYiwgYik7Ci0JfQorCWIgPSBwb3J0LT51YXJ0Y2xrIC8gKDE2ICogcXVvdCk7CisJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZSh0ZXJtaW9zLCBiLCBiKTsKIAogCXN3aXRjaCAodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSB7CiAJY2FzZSBDUzU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCAzMDQ2Mzg2Li43MzU2YTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTc4LDEwICs3OCw2IEBACiAKICNkZWZpbmUgTTY4S19DTE9DSyAoMTY2NjcwMDApIC8qIEZJWE1FOiAxNk1IeiBpcyBsaWtlbHkgd3JvbmcgKi8KIAotI2lmZGVmIENPTkZJR19DT05TT0xFCi1leHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3Qga2V5cHJlc3Nfd2FpdDsgCi0jZW5kaWYKLQogc3RydWN0IHR0eV9kcml2ZXIgKnNlcmlhbF9kcml2ZXI7CiAKIC8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGxlZnQgaW4geG1pdCBidWZmZXIgYmVmb3JlIHdlIGFzayBmb3IgbW9yZSAqLwpAQCAtMTAyLDE5ICs5OCwxMyBAQAogICoJU2V0dXAgZm9yIGNvbnNvbGUuIEFyZ3VtZW50IGNvbWVzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lLgogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NNjhFWjMyOEFEUykgfHwgZGVmaW5lZChDT05GSUdfQUxNQV9BTlMpIHx8IGRlZmluZWQoQ09ORklHX0RSQUdPTklYVlopCi0jZGVmaW5lCUNPTlNPTEVfQkFVRF9SQVRFCTExNTIwMAotI2RlZmluZQlERUZBVUxUX0NCQVVECQlCMTE1MjAwCi0jZWxzZQotCS8qIChlcykgKi8KLQkvKiBub3RlOiB0aGlzIGlzIG1lc3N5LCBidXQgaXQgd29ya3MsIGFnYWluLCBwZXJoYXBzIGRlZmluZWQgc29tZXdoZXJlIGVsc2U/Ki8KLQkjaWZkZWYgQ09ORklHX002OFZaMzI4Ci0JI2RlZmluZSBDT05TT0xFX0JBVURfUkFURQkxOTIwMAotCSNkZWZpbmUgREVGQVVMVF9DQkFVRAkJQjE5MjAwCi0JI2VuZGlmCi0JLyogKC9lcykgKi8KKy8qIG5vdGU6IHRoaXMgaXMgbWVzc3ksIGJ1dCBpdCB3b3JrcywgYWdhaW4sIHBlcmhhcHMgZGVmaW5lZCBzb21ld2hlcmUgZWxzZT8qLworI2lmZGVmIENPTkZJR19NNjhWWjMyOAorI2RlZmluZSBDT05TT0xFX0JBVURfUkFURQkxOTIwMAorI2RlZmluZSBERUZBVUxUX0NCQVVECQlCMTkyMDAKICNlbmRpZgogCisKICNpZm5kZWYgQ09OU09MRV9CQVVEX1JBVEUKICNkZWZpbmUJQ09OU09MRV9CQVVEX1JBVEUJOTYwMAogI2RlZmluZQlERUZBVUxUX0NCQVVECQlCOTYwMApAQCAtMzAwLDEwICsyOTAsNiBAQAogCQkJCXJldHVybjsKICNlbmRpZiAvKiBDT05GSUdfTUFHSUNfU1lTUlEgKi8KIAkJCX0KLQkJCS8qIEl0IGlzIGEgJ2tleWJvYXJkIGludGVycnVwdCcgOy0pICovCi0jaWZkZWYgQ09ORklHX0NPTlNPTEUKLQkJCXdha2VfdXAoJmtleXByZXNzX3dhaXQpOwotI2VuZGlmCQkJCiAJCX0KIAogCQlpZighdHR5KQpAQCAtMTI0Myw3ICsxMjI5LDkgQEAKIAkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJCWJyZWFrOwogCQl9CisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJmluZm8tPm9wZW5fd2FpdCwgJndhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggNzY4NjEyZi4uMGRmZjNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvNjgzNjBzZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC82ODM2MHNlcmlhbC5jCkBAIC0xNzA1LDcgKzE3MDUsNiBAQAogCXByaW50aygiamlmZj0lbHUuLi4iLCBqaWZmaWVzKTsKICNlbmRpZgogCi0JbG9ja19rZXJuZWwoKTsKIAkvKiBXZSBnbyB0aHJvdWdoIHRoZSBsb29wIGF0IGxlYXN0IG9uY2UgYmVjYXVzZSB3ZSBjYW4ndCB0ZWxsCiAJICogZXhhY3RseSB3aGVuIHRoZSBsYXN0IGNoYXJhY3RlciBleGl0cyB0aGUgc2hpZnRlci4gIFRoZXJlIGNhbgogCSAqIGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIHdhaXRpbmcgdG8gYmUgc2VudCBhZnRlciB0aGUgYnVmZmVycwpAQCAtMTczNCw3ICsxNzMzLDYgQEAKIAkJCWJkcC0tOwogCX0gd2hpbGUgKGJkcC0+c3RhdHVzICYgQkRfU0NfUkVBRFkpOwogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCXVubG9ja19rZXJuZWwoKTsKICNpZmRlZiBTRVJJQUxfREVCVUdfUlNfV0FJVF9VTlRJTF9TRU5UCiAJcHJpbnRrKCJsc3IgPSAlZCAoamlmZj0lbHUpLi4uZG9uZVxuIiwgbHNyLCBqaWZmaWVzKTsKICNlbmRpZgpAQCAtMTg2Miw3ICsxODYwLDkgQEAKIAkJcHJpbnRrKCJibG9ja190aWxfcmVhZHkgYmxvY2tpbmc6IHR0eXMlZCwgY291bnQgPSAlZFxuIiwKIAkJICAgICAgIGluZm8tPmxpbmUsIHN0YXRlLT5jb3VudCk7CiAjZW5kaWYKKwkJdHR5X3VubG9jaygpOwogCQlzY2hlZHVsZSgpOworCQl0dHlfbG9jaygpOwogCX0KIAljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggMDllZjU3MC4uMjQxMTBmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCS5maWZvX3NpemUJPSAxMjgsCiAJCS50eF9sb2Fkc3oJPSAxMjgsCiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMTAsCi0JCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPLAorCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX0VGUiB8IFVBUlRfQ0FQX1NMRUVQLAogCX0sCiAJW1BPUlRfMTY2NTRdID0gewogCQkubmFtZQkJPSAiU1QxNjY1NCIsCkBAIC0zMDAsNiArMzAwLDEzIEBACiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMDAsCiAJCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfQUZFLAogCX0sCisJW1BPUlRfVTZfMTY1NTBBXSA9IHsKKwkJLm5hbWUJCT0gIlU2XzE2NTUwQSIsCisJCS5maWZvX3NpemUJPSA2NCwKKwkJLnR4X2xvYWRzegk9IDY0LAorCQkuZmNyCQk9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfUl9UUklHXzEwLAorCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX0FGRSwKKwl9LAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfQUxDSEVNWSkKQEAgLTEwNzAsNiArMTA3NywxNSBAQAogCQlERUJVR19BVVRPQ09ORigiQ291bGRuJ3QgZm9yY2UgSUVSX1VVRSB0byAwICIpOwogCX0KIAlzZXJpYWxfb3V0cCh1cCwgVUFSVF9JRVIsIGllcnNhdmUpOworCisJLyoKKwkgKiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIDE2NTUwQSBhbmQgVTYgMTY1NTBBIGJ5IGNvdW50aW5nCisJICogaG93IG1hbnkgYnl0ZXMgYXJlIGluIHRoZSBGSUZPLgorCSAqLworCWlmICh1cC0+cG9ydC50eXBlID09IFBPUlRfMTY1NTBBICYmIHNpemVfZmlmbyh1cCkgPT0gNjQpIHsKKwkJdXAtPnBvcnQudHlwZSA9IFBPUlRfVTZfMTY1NTBBOworCQl1cC0+Y2FwYWJpbGl0aWVzIHw9IFVBUlRfQ0FQX0FGRTsKKwl9CiB9CiAKIC8qCkBAIC0yMjI0LDkgKzIyNDAsOSBAQAogCXJldHVybiBxdW90OwogfQogCi1zdGF0aWMgdm9pZAotc2VyaWFsODI1MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCi0JCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKK3ZvaWQKK3NlcmlhbDgyNTBfZG9fc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCiB7CiAJc3RydWN0IHVhcnRfODI1MF9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKilwb3J0OwogCXVuc2lnbmVkIGNoYXIgY3ZhbCwgZmNyID0gMDsKQEAgLTI0MDIsMTYgKzI0MTgsMjIgQEAKIAlpZiAodHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKHRlcm1pb3MpKQogCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOwogfQorRVhQT1JUX1NZTUJPTChzZXJpYWw4MjUwX2RvX3NldF90ZXJtaW9zKTsKIAogc3RhdGljIHZvaWQKLXNlcmlhbDgyNTBfc2V0X2xkaXNjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzZXJpYWw4MjUwX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewotCWludCBsaW5lID0gcG9ydC0+bGluZTsKKwlpZiAocG9ydC0+c2V0X3Rlcm1pb3MpCisJCXBvcnQtPnNldF90ZXJtaW9zKHBvcnQsIHRlcm1pb3MsIG9sZCk7CisJZWxzZQorCQlzZXJpYWw4MjUwX2RvX3NldF90ZXJtaW9zKHBvcnQsIHRlcm1pb3MsIG9sZCk7Cit9CiAKLQlpZiAobGluZSA+PSBwb3J0LT5zdGF0ZS0+cG9ydC50dHktPmRyaXZlci0+bnVtKQotCQlyZXR1cm47Ci0KLQlpZiAocG9ydC0+c3RhdGUtPnBvcnQudHR5LT5sZGlzYy0+b3BzLT5udW0gPT0gTl9QUFMpIHsKK3N0YXRpYyB2b2lkCitzZXJpYWw4MjUwX3NldF9sZGlzYyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgbmV3KQoreworCWlmIChuZXcgPT0gTl9QUFMpIHsKIAkJcG9ydC0+ZmxhZ3MgfD0gVVBGX0hBUkRQUFNfQ0Q7CiAJCXNlcmlhbDgyNTBfZW5hYmxlX21zKHBvcnQpOwogCX0gZWxzZQpAQCAtMjk4Nyw2ICszMDA5LDcgQEAKIAkJcG9ydC50eXBlCQk9IHAtPnR5cGU7CiAJCXBvcnQuc2VyaWFsX2luCQk9IHAtPnNlcmlhbF9pbjsKIAkJcG9ydC5zZXJpYWxfb3V0CQk9IHAtPnNlcmlhbF9vdXQ7CisJCXBvcnQuc2V0X3Rlcm1pb3MJPSBwLT5zZXRfdGVybWlvczsKIAkJcG9ydC5kZXYJCT0gJmRldi0+ZGV2OwogCQlwb3J0LmlycWZsYWdzCQl8PSBpcnFmbGFnOwogCQlyZXQgPSBzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnQoJnBvcnQpOwpAQCAtMzE1MCw2ICszMTczLDkgQEAKIAkJCXVhcnQtPnBvcnQuc2VyaWFsX2luID0gcG9ydC0+c2VyaWFsX2luOwogCQlpZiAocG9ydC0+c2VyaWFsX291dCkKIAkJCXVhcnQtPnBvcnQuc2VyaWFsX291dCA9IHBvcnQtPnNlcmlhbF9vdXQ7CisJCS8qICBQb3NzaWJseSBvdmVycmlkZSBzZXRfdGVybWlvcyBjYWxsICovCisJCWlmIChwb3J0LT5zZXRfdGVybWlvcykKKwkJCXVhcnQtPnBvcnQuc2V0X3Rlcm1pb3MgPSBwb3J0LT5zZXRfdGVybWlvczsKIAogCQlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc2VyaWFsODI1MF9yZWcsICZ1YXJ0LT5wb3J0KTsKIAkJaWYgKHJldCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9lYXJseS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9lYXJseS5jCmluZGV4IGYyNzk3NDUuLmI3NDU3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfZWFybHkuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2Vhcmx5LmMKQEAgLTE5LDkgKzE5LDExIEBACiAgKiBUaGUgdXNlciBjYW4gc3BlY2lmeSB0aGUgZGV2aWNlIGRpcmVjdGx5LCBlLmcuLAogICoJZWFybHljb249dWFydDgyNTAsaW8sMHgzZjgsOTYwMG44CiAgKgllYXJseWNvbj11YXJ0ODI1MCxtbWlvLDB4ZmY1ZTAwMDAsMTE1MjAwbjgKKyAqCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweGZmNWUwMDAwLDExNTIwMG44CiAgKiBvcgogICoJY29uc29sZT11YXJ0ODI1MCxpbywweDNmOCw5NjAwbjgKICAqCWNvbnNvbGU9dWFydDgyNTAsbW1pbywweGZmNWUwMDAwLDExNTIwMG44CisgKgljb25zb2xlPXVhcnQ4MjUwLG1taW8zMiwweGZmNWUwMDAwLDExNTIwMG44CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpAQCAtNDgsMTggKzUwLDMxIEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHNlcmlhbF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgb2Zmc2V0KQogewotCWlmIChwb3J0LT5pb3R5cGUgPT0gVVBJT19NRU0pCisJc3dpdGNoIChwb3J0LT5pb3R5cGUpIHsKKwljYXNlIFVQSU9fTUVNOgogCQlyZXR1cm4gcmVhZGIocG9ydC0+bWVtYmFzZSArIG9mZnNldCk7Ci0JZWxzZQorCWNhc2UgVVBJT19NRU0zMjoKKwkJcmV0dXJuIHJlYWRsKHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0IDw8IDIpKTsKKwljYXNlIFVQSU9fUE9SVDoKIAkJcmV0dXJuIGluYihwb3J0LT5pb2Jhc2UgKyBvZmZzZXQpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNlcmlhbF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQogewotCWlmIChwb3J0LT5pb3R5cGUgPT0gVVBJT19NRU0pCisJc3dpdGNoIChwb3J0LT5pb3R5cGUpIHsKKwljYXNlIFVQSU9fTUVNOgogCQl3cml0ZWIodmFsdWUsIHBvcnQtPm1lbWJhc2UgKyBvZmZzZXQpOwotCWVsc2UKKwkJYnJlYWs7CisJY2FzZSBVUElPX01FTTMyOgorCQl3cml0ZWwodmFsdWUsIHBvcnQtPm1lbWJhc2UgKyAob2Zmc2V0IDw8IDIpKTsKKwkJYnJlYWs7CisJY2FzZSBVUElPX1BPUlQ6CiAJCW91dGIodmFsdWUsIHBvcnQtPmlvYmFzZSArIG9mZnNldCk7CisJCWJyZWFrOworCX0KIH0KIAogI2RlZmluZSBCT1RIX0VNUFRZIChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKQEAgLTEzNywxNSArMTUyLDIxIEBACiAJCQkJCQkJCWNoYXIgKm9wdGlvbnMpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZkZXZpY2UtPnBvcnQ7Ci0JaW50IG1taW8sIGxlbmd0aDsKKwlpbnQgbW1pbywgbW1pbzMyLCBsZW5ndGg7CiAKIAlpZiAoIW9wdGlvbnMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcG9ydC0+dWFydGNsayA9IEJBU0VfQkFVRCAqIDE2OwotCWlmICghc3RybmNtcChvcHRpb25zLCAibW1pbywiLCA1KSkgewotCQlwb3J0LT5pb3R5cGUgPSBVUElPX01FTTsKLQkJcG9ydC0+bWFwYmFzZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMgKyA1LCAmb3B0aW9ucywgMCk7CisKKwltbWlvID0gIXN0cm5jbXAob3B0aW9ucywgIm1taW8sIiwgNSk7CisJbW1pbzMyID0gIXN0cm5jbXAob3B0aW9ucywgIm1taW8zMiwiLCA3KTsKKwlpZiAobW1pbyB8fCBtbWlvMzIpIHsKKwkJcG9ydC0+aW90eXBlID0gKG1taW8gPyBVUElPX01FTSA6IFVQSU9fTUVNMzIpOworCQlwb3J0LT5tYXBiYXNlID0gc2ltcGxlX3N0cnRvdWwob3B0aW9ucyArIChtbWlvID8gNSA6IDcpLAorCQkJCQkgICAgICAgJm9wdGlvbnMsIDApOworCQlpZiAobW1pbzMyKQorCQkJcG9ydC0+cmVnc2hpZnQgPSAyOwogI2lmZGVmIENPTkZJR19GSVhfRUFSTFlDT05fTUVNCiAJCXNldF9maXhtYXBfbm9jYWNoZShGSVhfRUFSTFlDT05fTUVNX0JBU0UsCiAJCQkJCXBvcnQtPm1hcGJhc2UgJiBQQUdFX01BU0spOwpAQCAtMTU3LDExICsxNzgsMTAgQEAKIAkJaWYgKCFwb3J0LT5tZW1iYXNlKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZG4ndCBpb3JlbWFwIDB4JWxseFxuIiwKIAkJCQlfX2Z1bmNfXywKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPm1hcGJhc2UpOworCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPm1hcGJhc2UpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KICNlbmRpZgotCQltbWlvID0gMTsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKG9wdGlvbnMsICJpbywiLCAzKSkgewogCQlwb3J0LT5pb3R5cGUgPSBVUElPX1BPUlQ7CiAJCXBvcnQtPmlvYmFzZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGlvbnMgKyAzLCAmb3B0aW9ucywgMCk7CkBAIC0xODEsMTEgKzIwMSwxOCBAQAogCQkJZGV2aWNlLT5iYXVkKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJFYXJseSBzZXJpYWwgY29uc29sZSBhdCAlcyAweCVsbHggKG9wdGlvbnMgJyVzJylcbiIsCi0JCW1taW8gPyAiTU1JTyIgOiAiSS9PIHBvcnQiLAotCQltbWlvID8gKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+bWFwYmFzZQotCQkgICAgIDogKHVuc2lnbmVkIGxvbmcgbG9uZykgcG9ydC0+aW9iYXNlLAotCQlkZXZpY2UtPm9wdGlvbnMpOworCWlmIChtbWlvIHx8IG1taW8zMikKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkVhcmx5IHNlcmlhbCBjb25zb2xlIGF0IE1NSU8lcyAweCVsbHUgKG9wdGlvbnMgJyVzJylcbiIsCisJCQltbWlvMzIgPyAiMzIiIDogIiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKXBvcnQtPm1hcGJhc2UsCisJCQlkZXZpY2UtPm9wdGlvbnMpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAiRWFybHkgc2VyaWFsIGNvbnNvbGUgYXQgSS9PIHBvcnQgMHglbHUgKG9wdGlvbnMgJyVzJylcbiIsCisJCQlwb3J0LT5pb2Jhc2UsCisJCQlkZXZpY2UtPm9wdGlvbnMpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCmluZGV4IDc0NmE0NDYuLjUzYmU0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwpAQCAtOTk0LDYgKzk5NCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fODAwRQkweEEwMTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMDBFSQkweEEwMTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMDBFSVNJCTB4QTAxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1OAkweDk1MzgKIAogLyogVW5rbm93biB2ZW5kb3JzL2NhcmRzIC0gdGhpcyBzaG91bGQgbm90IGJlIGluIGxpbnV4L3BjaV9pZHMuaCAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1VOS05PV05fMHgxNTg0CTB4MTU4NApAQCAtMTU0Miw2ICsxNTQzLDggQEAKIAlwYm5fYjJfNF85MjE2MDAsCiAJcGJuX2IyXzhfOTIxNjAwLAogCisJcGJuX2IyXzhfMTE1MjAwMCwKKwogCXBibl9iMl9idF8xXzExNTIwMCwKIAlwYm5fYjJfYnRfMl8xMTUyMDAsCiAJcGJuX2IyX2J0XzRfMTE1MjAwLApAQCAtMTk2MCw2ICsxOTYzLDEzIEBACiAJCS51YXJ0X29mZnNldAk9IDgsCiAJfSwKIAorCVtwYm5fYjJfOF8xMTUyMDAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UyLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDExNTIwMDAsCisJCS51YXJ0X29mZnNldAk9IDgsCisJfSwKKwogCVtwYm5fYjJfYnRfMV8xMTUyMDBdID0gewogCQkuZmxhZ3MJCT0gRkxfQkFTRTJ8RkxfQkFTRV9CQVJTLAogCQkubnVtX3BvcnRzCT0gMSwKQEAgLTI4NzUsNiArMjg4NSw5IEBACiAJewlQQ0lfVkVORE9SX0lEX09YU0VNSSwgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NTIsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJCXBibl9iMF9idF8yXzkyMTYwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9PWFNFTUksIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU4LAorCQlQQ0lfQU5ZX0lEICwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IyXzhfMTE1MjAwMCB9LAogCiAJLyoKIAkgKiBPeGZvcmQgU2VtaWNvbmR1Y3RvciBJbmMuIFRvcm5hZG8gUENJIGV4cHJlc3MgZGV2aWNlIHJhbmdlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggZTQzN2NlOC4uMTI5MDBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC01MzYsMTIgKzUzNiwxMyBAQAogCiBjb25maWcgU0VSSUFMX1M1UFYyMTAKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNVBWMjEwIFNlcmlhbCBwb3J0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORyAmJiAoQ1BVX1M1UFYyMTAgfHwgQ1BVX1M1UDY0NDIpCi0Jc2VsZWN0IFNFUklBTF9TQU1TVU5HX1VBUlRTXzQgaWYgQ1BVX1M1UFYyMTAKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIChDUFVfUzVQVjIxMCB8fCBDUFVfUzVQNjQ0MiB8fCBDUFVfUzVQVjMxMCkKKwlzZWxlY3QgU0VSSUFMX1NBTVNVTkdfVUFSVFNfNCBpZiAoQ1BVX1M1UFYyMTAgfHwgQ1BVX1M1UFYzMTApCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgU2Ftc3VuZydzIFM1UCBGYW1pbHkgb2YgU29DJ3MKIAorCiBjb25maWcgU0VSSUFMX01BWDMxMDAKIAl0cmlzdGF0ZSAiTUFYMzEwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1BJCkBAIC01NDksNiArNTUwLDIyIEBACiAJaGVscAogCSAgTUFYMzEwMCBjaGlwIHN1cHBvcnQKIAorY29uZmlnIFNFUklBTF9NQVgzMTA3CisJdHJpc3RhdGUgIk1BWDMxMDcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWhlbHAKKwkgIE1BWDMxMDcgY2hpcCBzdXBwb3J0CisKK2NvbmZpZyBTRVJJQUxfTUFYMzEwN19BQVZBCisJdHJpc3RhdGUgIk1BWDMxMDcgQUFWQSBwbGF0Zm9ybSBzdXBwb3J0IgorCWRlcGVuZHMgb24gWDg2X01SU1QgJiYgU0VSSUFMX01BWDMxMDcgJiYgR1BJT0xJQgorCXNlbGVjdCBTRVJJQUxfQ09SRQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBNQVgzMTA3IGNoaXAgY29uZmlndXJhdGlvbiBmb3VuZCBvbiB0aGUgQUFWQQorCSAgcGxhdGZvcm0uIEluY2x1ZGVzIHRoZSBleHRyYSBpbml0aWFsaXNhdGlvbiBhbmQgR1BJTyBzdXBwb3J0CisJICBuZWRlZCBmb3IgdGhpcyBkZXZpY2UuCisKIGNvbmZpZyBTRVJJQUxfRFoKIAlib29sICJERUNzdGF0aW9uIERaIHNlcmlhbCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBNQUNIX0RFQ1NUQVRJT04gJiYgMzJCSVQKQEAgLTY5MCw2ICs3MDcsMzMgQEAKIAkgIHlvdXIgYm9vdCBsb2FkZXIgKGxpbG8gb3IgbG9hZGxpbikgYWJvdXQgaG93IHRvIHBhc3Mgb3B0aW9ucyB0byB0aGUKIAkgIGtlcm5lbCBhdCBib290IHRpbWUuKQogCitjb25maWcgU0VSSUFMX01SU1RfTUFYMzExMAorCXRyaXN0YXRlICJTUEkgVUFSVCBkcml2ZXIgZm9yIE1heDMxMTAiCisJZGVwZW5kcyBvbiBTUElfRFdfUENJCisJc2VsZWN0IFNFUklBTF9DT1JFCisJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKKwloZWxwCisJICBUaGlzIGlzIHRoZSBVQVJUIHByb3RvY29sIGRyaXZlciBmb3IgdGhlIE1BWDMxMTAgZGV2aWNlIG9uCisJICB0aGUgSW50ZWwgTW9vcmVzdG93biBwbGF0Zm9ybS4gT24gb3RoZXIgc3lzdGVtcyB1c2UgdGhlIG1heDMxMDAKKwkgIGRyaXZlci4KKworY29uZmlnIE1SU1RfTUFYMzExMF9JUlEKKwlib29sZWFuICJFbmFibGUgR1BJTyBJUlEgZm9yIE1heDMxMTAgb3ZlciBNb29yZXN0b3duIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU0VSSUFMX01SU1RfTUFYMzExMCAmJiBHUElPX0xBTkdXRUxMCisJaGVscAorCSAgVGhpcyBoYXMgdG8gYmUgZW5hYmxlZCBhZnRlciBNb29yZXN0b3duIEdQSU8gZHJpdmVyIGlzIGxvYWRlZAorCitjb25maWcgU0VSSUFMX01GRF9IU1UKKwl0cmlzdGF0ZSAiTWVkZmllbGQgSGlnaCBTcGVlZCBVQVJUIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgU0VSSUFMX0NPUkUKKworY29uZmlnIFNFUklBTF9NRkRfSFNVX0NPTlNPTEUKKwlib29sZWFuICJNZWRmaWxlIEhTVSBzZXJpYWwgY29uc29sZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0VSSUFMX01GRF9IU1U9eQorCXNlbGVjdCBTRVJJQUxfQ09SRV9DT05TT0xFCisKIGNvbmZpZyBTRVJJQUxfQkZJTgogCXRyaXN0YXRlICJCbGFja2ZpbiBzZXJpYWwgcG9ydCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQkxBQ0tGSU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKaW5kZXggMjA4YTg1NS4uMWNhNGZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zZXJpYWwvTWFrZWZpbGUKQEAgLTQ2LDYgKzQ2LDggQEAKIG9iai0kKENPTkZJR19TRVJJQUxfUzNDNjQwMCkgKz0gczNjNjQwMC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1M1UFYyMTApICs9IHM1cHYyMTAubwogb2JqLSQoQ09ORklHX1NFUklBTF9NQVgzMTAwKSArPSBtYXgzMTAwLm8KK29iai0kKENPTkZJR19TRVJJQUxfTUFYMzEwNykgKz0gbWF4MzEwNy5vCitvYmotJChDT05GSUdfU0VSSUFMX01BWDMxMDdfQUFWQSkgKz0gbWF4MzEwNy1hYXZhLm8KIG9iai0kKENPTkZJR19TRVJJQUxfSVAyMl9aSUxPRykgKz0gaXAyMnppbG9nLm8KIG9iai0kKENPTkZJR19TRVJJQUxfTVVYKSArPSBtdXgubwogb2JqLSQoQ09ORklHX1NFUklBTF82ODMyOCkgKz0gNjgzMjhzZXJpYWwubwpAQCAtODQsMyArODYsNSBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQpICs9IGFwYnVhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQpICs9IGFsdGVyYV9qdGFndWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUKSArPSBhbHRlcmFfdWFydC5vCitvYmotJChDT05GSUdfU0VSSUFMX01SU1RfTUFYMzExMCkJKz0gbXJzdF9tYXgzMTEwLm8KK29iai0kKENPTkZJR19TRVJJQUxfTUZEX0hTVSkJKz0gbWZkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2FsdGVyYV91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9hbHRlcmFfdWFydC5jCmluZGV4IDBmMTE4OTYuLmY4ZDhhMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FsdGVyYV91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYWx0ZXJhX3VhcnQuYwpAQCAtMzk0LDcgKzM5NCw3IEBACiBzdGF0aWMgdm9pZCBhbHRlcmFfdWFydF9jb25zb2xlX3B1dGMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgY29uc3QgY2hhciBjKQogewogCXdoaWxlICghKHJlYWRsKHBvcnQtPm1lbWJhc2UgKyBBTFRFUkFfVUFSVF9TVEFUVVNfUkVHKSAmCi0JICAgICAgICAgQUxURVJBX1VBUlRfU1RBVFVTX1RSRFlfTVNLKSkKKwkJIEFMVEVSQV9VQVJUX1NUQVRVU19UUkRZX01TSykpCiAJCWNwdV9yZWxheCgpOwogCiAJd3JpdGVsKGMsIHBvcnQtPm1lbWJhc2UgKyBBTFRFUkFfVUFSVF9UWERBVEFfUkVHKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggYTE4MmRlZi4uMzg5MjY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTIxNyw3ICsyMTcsOCBAQAogCWlmIChyczQ4NWNvbmYtPmZsYWdzICYgU0VSX1JTNDg1X0VOQUJMRUQpIHsKIAkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXR0aW5nIFVBUlQgdG8gUlM0ODVcbiIpOwogCQlhdG1lbF9wb3J0LT50eF9kb25lX21hc2sgPSBBVE1FTF9VU19UWEVNUFRZOwotCQlVQVJUX1BVVF9UVEdSKHBvcnQsIHJzNDg1Y29uZi0+ZGVsYXlfcnRzX2JlZm9yZV9zZW5kKTsKKwkJaWYgKHJzNDg1Y29uZi0+ZmxhZ3MgJiBTRVJfUlM0ODVfUlRTX0FGVEVSX1NFTkQpCisJCQlVQVJUX1BVVF9UVEdSKHBvcnQsIHJzNDg1Y29uZi0+ZGVsYXlfcnRzX2FmdGVyX3NlbmQpOwogCQltb2RlIHw9IEFUTUVMX1VTX1VTTU9ERV9SUzQ4NTsKIAl9IGVsc2UgewogCQlkZXZfZGJnKHBvcnQtPmRldiwgIlNldHRpbmcgVUFSVCB0byBSUzIzMlxuIik7CkBAIC0yOTIsNyArMjkzLDkgQEAKIAogCWlmIChhdG1lbF9wb3J0LT5yczQ4NS5mbGFncyAmIFNFUl9SUzQ4NV9FTkFCTEVEKSB7CiAJCWRldl9kYmcocG9ydC0+ZGV2LCAiU2V0dGluZyBVQVJUIHRvIFJTNDg1XG4iKTsKLQkJVUFSVF9QVVRfVFRHUihwb3J0LCBhdG1lbF9wb3J0LT5yczQ4NS5kZWxheV9ydHNfYmVmb3JlX3NlbmQpOworCQlpZiAoYXRtZWxfcG9ydC0+cnM0ODUuZmxhZ3MgJiBTRVJfUlM0ODVfUlRTX0FGVEVSX1NFTkQpCisJCQlVQVJUX1BVVF9UVEdSKHBvcnQsCisJCQkJCWF0bWVsX3BvcnQtPnJzNDg1LmRlbGF5X3J0c19hZnRlcl9zZW5kKTsKIAkJbW9kZSB8PSBBVE1FTF9VU19VU01PREVfUlM0ODU7CiAJfSBlbHNlIHsKIAkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXR0aW5nIFVBUlQgdG8gUlMyMzJcbiIpOwpAQCAtMTIxMSw3ICsxMjE0LDkgQEAKIAogCWlmIChhdG1lbF9wb3J0LT5yczQ4NS5mbGFncyAmIFNFUl9SUzQ4NV9FTkFCTEVEKSB7CiAJCWRldl9kYmcocG9ydC0+ZGV2LCAiU2V0dGluZyBVQVJUIHRvIFJTNDg1XG4iKTsKLQkJVUFSVF9QVVRfVFRHUihwb3J0LCBhdG1lbF9wb3J0LT5yczQ4NS5kZWxheV9ydHNfYmVmb3JlX3NlbmQpOworCQlpZiAoYXRtZWxfcG9ydC0+cnM0ODUuZmxhZ3MgJiBTRVJfUlM0ODVfUlRTX0FGVEVSX1NFTkQpCisJCQlVQVJUX1BVVF9UVEdSKHBvcnQsCisJCQkJCWF0bWVsX3BvcnQtPnJzNDg1LmRlbGF5X3J0c19hZnRlcl9zZW5kKTsKIAkJbW9kZSB8PSBBVE1FTF9VU19VU01PREVfUlM0ODU7CiAJfSBlbHNlIHsKIAkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXR0aW5nIFVBUlQgdG8gUlMyMzJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYyBiL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKaW5kZXggNTExY2JmNi4uYTllZmYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCkBAIC05NTcsMTUgKzk1NywxMiBAQAogICogRW5hYmxlIHRoZSBJckRBIGZ1bmN0aW9uIGlmIHR0eS0+bGRpc2MubnVtIGlzIE5fSVJEQS4KICAqIEluIG90aGVyIGNhc2VzLCBkaXNhYmxlIElyREEgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGJmaW5fc2VyaWFsX3NldF9sZGlzYyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIHZvaWQgYmZpbl9zZXJpYWxfc2V0X2xkaXNjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBsZCkKIHsKIAlpbnQgbGluZSA9IHBvcnQtPmxpbmU7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCi0JaWYgKGxpbmUgPj0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT5kcml2ZXItPm51bSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChwb3J0LT5zdGF0ZS0+cG9ydC50dHktPnRlcm1pb3MtPmNfbGluZSkgeworCXN3aXRjaCAobGQpIHsKIAljYXNlIE5fSVJEQToKIAkJdmFsID0gVUFSVF9HRVRfR0NUTCgmYmZpbl9zZXJpYWxfcG9ydHNbbGluZV0pOwogCQl2YWwgfD0gKElSRU4gfCBSUE9MQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKaW5kZXggMzFmMTcyMy4uYzg1NjkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwpAQCAtMzcyNCw2ICszNzI0LDE3IEBACiAJCXJldHVybiBlMTAwX2VuYWJsZV9yczQ4NSh0dHksICZyczQ4NWRhdGEpOwogCX0KIAorCWNhc2UgVElPQ0dSUzQ4NToKKwl7CisJCXN0cnVjdCBzZXJpYWxfcnM0ODUgKnJzNDg1ZGF0YSA9CisJCQkmKCgoc3RydWN0IGUxMDBfc2VyaWFsICopdHR5LT5kcml2ZXJfZGF0YSktPnJzNDg1KTsKKwkJLyogVGhpcyBpcyB0aGUgaW9jdGwgdG8gZ2V0IFJTNDg1IGRhdGEgZnJvbSB1c2VyLXNwYWNlICovCisJCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBzZXJpYWxfcnM0ODUgKikgYXJnLAorCQkJCQlyczQ4NWRhdGEsCisJCQkJCXNpemVvZihzZXJpYWxfcnM0ODUpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CiAKIAljYXNlIFRJT0NTRVJXUlJTNDg1OgogCXsKQEAgLTM5MjQsNyArMzkzNSw2IEBACiAJICogQ2hlY2sgUl9ETUFfQ0h4X1NUQVRVUyBiaXQgMC02PW51bWJlciBvZiBhdmFpbGFibGUgYnl0ZXMgaW4gRklGTwogCSAqIFJfRE1BX0NIeF9IV1NXIGJpdCAzMS0xNj1uYnIgb2YgYnl0ZXMgbGVmdCBpbiBETUEgYnVmZmVyICgwPTY0aykKIAkgKi8KLQlsb2NrX2tlcm5lbCgpOwogCW9yaWdfamlmZmllcyA9IGppZmZpZXM7CiAJd2hpbGUgKGluZm8tPnhtaXQuaGVhZCAhPSBpbmZvLT54bWl0LnRhaWwgfHwgLyogTW9yZSBpbiBzZW5kIHF1ZXVlICovCiAJICAgICAgICgqaW5mby0+b3N0YXR1c2FkciAmIDB4MDA3ZikgfHwgIC8qIG1vcmUgaW4gRklGTyAqLwpAQCAtMzk0MSw3ICszOTUxLDYgQEAKIAkJCWN1cnJfdGltZV91c2VjIC0gaW5mby0+bGFzdF90eF9hY3RpdmVfdXNlYzsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQl1bmxvY2tfa2VybmVsKCk7CiB9CiAKIC8qCkBAIC0zOTgxLDcgKzM5OTAsNyBAQAogCSAqLwogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8CiAJICAgIChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT5jbG9zZV93YWl0LAorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KGluZm8tPmNsb3NlX3dhaXQsCiAJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpOwogI2lmZGVmIFNFUklBTF9ET19SRVNUQVJUCiAJCWlmIChpbmZvLT5mbGFncyAmIEFTWU5DX0hVUF9OT1RJRlkpCkBAIC00MDU3LDcgKzQwNjYsOSBAQAogCQlwcmludGsoImJsb2NrX3RpbF9yZWFkeSBibG9ja2luZzogdHR5UyVkLCBjb3VudCA9ICVkXG4iLAogCQkgICAgICAgaW5mby0+bGluZSwgaW5mby0+Y291bnQpOwogI2VuZGlmCisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmaW5mby0+b3Blbl93YWl0LCAmd2FpdCk7CkBAIC00MTM5LDcgKzQxNTAsNyBAQAogCSAqLwogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8CiAJICAgIChpbmZvLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT5jbG9zZV93YWl0LAorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KGluZm8tPmNsb3NlX3dhaXQsCiAJCQkhKGluZm8tPmZsYWdzICYgQVNZTkNfQ0xPU0lORykpOwogI2lmZGVmIFNFUklBTF9ET19SRVNUQVJUCiAJCXJldHVybiAoKGluZm8tPmZsYWdzICYgQVNZTkNfSFVQX05PVElGWSkgPwpAQCAtNDUyMiw4ICs0NTMzLDggQEAKIAkJSU5JVF9XT1JLKCZpbmZvLT53b3JrLCBkb19zb2Z0aW50KTsKIAogCQlpZiAoaW5mby0+ZW5hYmxlZCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMlZCBhdCAweCV4IGlzIGEgYnVpbHRpbiBVQVJUIHdpdGggRE1BXG4iLAotCQkJICAgICAgIHNlcmlhbF9kcml2ZXItPm5hbWUsIGluZm8tPmxpbmUsICh1bnNpZ25lZCBpbnQpaW5mby0+aW9wb3J0KTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzJWQgYXQgJXAgaXMgYSBidWlsdGluIFVBUlQgd2l0aCBETUFcbiIsCisJCQkgICAgICAgc2VyaWFsX2RyaXZlci0+bmFtZSwgaW5mby0+bGluZSwgaW5mby0+aW9wb3J0KTsKIAkJfQogCX0KICNpZmRlZiBDT05GSUdfRVRSQVhfRkFTVF9USU1FUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCBlYWNiNTg4Li42NmVjYzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtOTA5LDEzICs5MDksMTEgQEAKIAlyYXRpb25hbF9iZXN0X2FwcHJveGltYXRpb24oMTYgKiBkaXYgKiBiYXVkLCBzcG9ydC0+cG9ydC51YXJ0Y2xrLAogCQkxIDw8IDE2LCAxIDw8IDE2LCAmbnVtLCAmZGVub20pOwogCi0JaWYgKHBvcnQtPnN0YXRlICYmIHBvcnQtPnN0YXRlLT5wb3J0LnR0eSkgewotCQl0ZGl2NjQgPSBzcG9ydC0+cG9ydC51YXJ0Y2xrOwotCQl0ZGl2NjQgKj0gbnVtOwotCQlkb19kaXYodGRpdjY0LCBkZW5vbSAqIDE2ICogZGl2KTsKLQkJdHR5X2VuY29kZV9iYXVkX3JhdGUoc3BvcnQtPnBvcnQuc3RhdGUtPnBvcnQudHR5LAorCXRkaXY2NCA9IHNwb3J0LT5wb3J0LnVhcnRjbGs7CisJdGRpdjY0ICo9IG51bTsKKwlkb19kaXYodGRpdjY0LCBkZW5vbSAqIDE2ICogZGl2KTsKKwl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsCiAJCQkJKHNwZWVkX3QpdGRpdjY0LCAoc3BlZWRfdCl0ZGl2NjQpOwotCX0KIAogCW51bSAtPSAxOwogCWRlbm9tIC09IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYwppbmRleCBmMTY0YmE0Li45M2RlOTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKQEAgLTk1NCwxMiArOTU0LDEzIEBACiAJCSAgc3RydWN0IGt0ZXJtaW9zICpuZXdfdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKIHsKIAlzdHJ1Y3QgaW9jM19wb3J0ICpwb3J0ID0gZ2V0X2lvYzNfcG9ydCh0aGVfcG9ydCk7Ci0JdW5zaWduZWQgaW50IGNmbGFnOworCXVuc2lnbmVkIGludCBjZmxhZywgaWZsYWc7CiAJaW50IGJhdWQ7CiAJaW50IG5ld19wYXJpdHkgPSAwLCBuZXdfcGFyaXR5X2VuYWJsZSA9IDAsIG5ld19zdG9wID0gMCwgbmV3X2RhdGEgPSA4OwogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAogCWNmbGFnID0gbmV3X3Rlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSBuZXdfdGVybWlvcy0+Y19pZmxhZzsKIAogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCWNhc2UgQ1M1OgpAQCAtMTAwMCwxMiArMTAwMSwxMiBAQAogCiAJc3RhdGUtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKKwlpZiAoaWZsYWcgJiBJR05QQVIpCiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfihOX1BBUklUWV9FUlJPUgogCQkJCQkJICB8IE5fRlJBTUlOR19FUlJPUik7Ci0JaWYgKElfSUdOQlJLKHN0YXRlLT5wb3J0LnR0eSkpIHsKKwlpZiAoaWZsYWcgJiBJR05CUkspIHsKIAkJdGhlX3BvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayAmPSB+Tl9CUkVBSzsKLQkJaWYgKElfSUdOUEFSKHN0YXRlLT5wb3J0LnR0eSkpCisJCWlmIChpZmxhZyAmIElHTlBBUikKIAkJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fT1ZFUlJVTl9FUlJPUjsKIAl9CiAJaWYgKCEoY2ZsYWcgJiBDUkVBRCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCmluZGV4IDhhZDI4ZmMuLmZjZmU4MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYwpAQCAtMTY4NSwxMSArMTY4NSwxMiBAQAogewogCXN0cnVjdCBpb2M0X3BvcnQgKnBvcnQgPSBnZXRfaW9jNF9wb3J0KHRoZV9wb3J0LCAwKTsKIAlpbnQgYmF1ZCwgYml0czsKLQl1bnNpZ25lZCBjZmxhZzsKKwl1bnNpZ25lZCBjZmxhZywgaWZsYWc7CiAJaW50IG5ld19wYXJpdHkgPSAwLCBuZXdfcGFyaXR5X2VuYWJsZSA9IDAsIG5ld19zdG9wID0gMCwgbmV3X2RhdGEgPSA4OwogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHRoZV9wb3J0LT5zdGF0ZTsKIAogCWNmbGFnID0gbmV3X3Rlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSBuZXdfdGVybWlvcy0+Y19pZmxhZzsKIAogCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCWNhc2UgQ1M1OgpAQCAtMTc0MSwxMiArMTc0MiwxMiBAQAogCiAJc3RhdGUtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CiAKLQlpZiAoSV9JR05QQVIoc3RhdGUtPnBvcnQudHR5KSkKKwlpZiAoaWZsYWcgJiBJR05QQVIpCiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfihOX1BBUklUWV9FUlJPUgogCQkJCQkJfCBOX0ZSQU1JTkdfRVJST1IpOwotCWlmIChJX0lHTkJSSyhzdGF0ZS0+cG9ydC50dHkpKSB7CisJaWYgKGlmbGFnICYgSUdOQlJLKSB7CiAJCXRoZV9wb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgJj0gfk5fQlJFQUs7Ci0JCWlmIChJX0lHTlBBUihzdGF0ZS0+cG9ydC50dHkpKQorCQlpZiAoaWZsYWcgJiBJR05QQVIpCiAJCQl0aGVfcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrICY9IH5OX09WRVJSVU5fRVJST1I7CiAJfQogCWlmICghKGNmbGFnICYgQ1JFQUQpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9tYXgzMTAwLmMKaW5kZXggMzM1MWMzYi4uYmViMWFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWF4MzEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDAuYwpAQCAtNDMwLDE3ICs0MzAsMTQgQEAKIAlpbnQgYmF1ZCA9IDA7CiAJdW5zaWduZWQgY2ZsYWc7CiAJdTMyIHBhcmFtX25ldywgcGFyYW1fbWFzaywgcGFyaXR5ID0gMDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcy0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAKIAlkZXZfZGJnKCZzLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKCF0dHkpCi0JCXJldHVybjsKIAogCWNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKIAlwYXJhbV9uZXcgPSAwOwogCXBhcmFtX21hc2sgPSAwOwogCi0JYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZSh0ZXJtaW9zKTsKIAlwYXJhbV9uZXcgPSBzLT5jb25mICYgTUFYMzEwMF9CQVVEOwogCXN3aXRjaCAoYmF1ZCkgewogCWNhc2UgMzAwOgpAQCAtNDg1LDcgKzQ4Miw3IEBACiAJZGVmYXVsdDoKIAkJYmF1ZCA9IHMtPmJhdWQ7CiAJfQotCXR0eV9lbmNvZGVfYmF1ZF9yYXRlKHR0eSwgYmF1ZCwgYmF1ZCk7CisJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZSh0ZXJtaW9zLCBiYXVkLCBiYXVkKTsKIAlzLT5iYXVkID0gYmF1ZDsKIAlwYXJhbV9tYXNrIHw9IE1BWDMxMDBfQkFVRDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbWF4MzEwNy1hYXZhLmMgYi9kcml2ZXJzL3NlcmlhbC9tYXgzMTA3LWFhdmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWZlMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvbWF4MzEwNy1hYXZhLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiAgbWF4MzEwNy5jIC0gc3BpIHVhcnQgcHJvdG9jb2wgZHJpdmVyIGZvciBNYXhpbSAzMTA3CisgKiAgQmFzZWQgb24gbWF4MzEwMC5jCisgKglieSBDaHJpc3RpYW4gUGVsbGVncmluIDxjaHJpcGVsbEBldm9sd2FyZS5vcmc+CisgKiAgYW5kCW1heDMxMTAuYworICoJYnkgRmVuZyBUYW5nIDxmZW5nLnRhbmdAaW50ZWwuY29tPgorICoKKyAqICBDb3B5cmlnaHQgKEMpIEFhdmFtb2JpbGUgMjAwOQorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC5oPgorI2luY2x1ZGUgIm1heDMxMDcuaCIKKworLyogR1BJTyBkaXJlY3Rpb24gdG8gaW5wdXQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgbWF4MzEwN19ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBjaGlwKTsKKwl1MTYgYnVmWzFdOwkJLyogQnVmZmVyIGZvciBTUEkgdHJhbnNmZXIgKi8KKworCWlmIChvZmZzZXQgPj0gTUFYMzEwN19HUElPX0NPVU5UKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiSW52YWxpZCBHUElPXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCBjdXJyZW50IEdQSU8gY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCWJ1ZlswXSA9IE1BWDMxMDdfR1BJT0NGR19SRUc7CisJLyogUGVyZm9ybSBTUEkgdHJhbnNmZXIgKi8KKwlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsICh1OCAqKWJ1ZiwgMikpIHsKKwkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJTUEkgdHJhbnNmZXIgR1BJTyByZWFkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlidWZbMF0gJj0gTUFYMzEwN19TUElfUlhfREFUQV9NQVNLOworCisJLyogU2V0IEdQSU8gdG8gaW5wdXQgKi8KKwlidWZbMF0gJj0gfigweDAwMDEgPDwgb2Zmc2V0KTsKKworCS8qIFdyaXRlIG5ldyBHUElPIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUgKi8KKwlidWZbMF0gfD0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19HUElPQ0ZHX1JFRyk7CisJLyogUGVyZm9ybSBTUEkgdHJhbnNmZXIgKi8KKwlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsIE5VTEwsIDIpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIEdQSU8gd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBHUElPIGRpcmVjdGlvbiB0byBvdXRwdXQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgbWF4MzEwN19ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCQlpbnQgdmFsdWUpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBjaGlwKTsKKwl1MTYgYnVmWzJdOwkvKiBCdWZmZXIgZm9yIFNQSSB0cmFuc2ZlcnMgKi8KKworCWlmIChvZmZzZXQgPj0gTUFYMzEwN19HUElPX0NPVU5UKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiSW52YWxpZCBHUElPXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCBjdXJyZW50IEdQSU8gY29uZmlndXJhdGlvbiBhbmQgZGF0YSByZWdpc3RlcnMgKi8KKwlidWZbMF0gPSBNQVgzMTA3X0dQSU9DRkdfUkVHOworCWJ1ZlsxXSA9IE1BWDMxMDdfR1BJT0RBVEFfUkVHOworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIDQpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIGdwaW8gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWJ1ZlswXSAmPSBNQVgzMTA3X1NQSV9SWF9EQVRBX01BU0s7CisJYnVmWzFdICY9IE1BWDMxMDdfU1BJX1JYX0RBVEFfTUFTSzsKKworCS8qIFNldCBHUElPIHRvIG91dHB1dCAqLworCWJ1ZlswXSB8PSAoMHgwMDAxIDw8IG9mZnNldCk7CisJLyogU2V0IHZhbHVlICovCisJaWYgKHZhbHVlKQorCQlidWZbMV0gfD0gKDB4MDAwMSA8PCBvZmZzZXQpOworCWVsc2UKKwkJYnVmWzFdICY9IH4oMHgwMDAxIDw8IG9mZnNldCk7CisKKwkvKiBXcml0ZSBuZXcgR1BJTyBjb25maWd1cmF0aW9uIGFuZCBkYXRhIHJlZ2lzdGVyIHZhbHVlcyAqLworCWJ1ZlswXSB8PSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0dQSU9DRkdfUkVHKTsKKwlidWZbMV0gfD0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19HUElPREFUQV9SRUcpOworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCBOVUxMLCA0KSkgeworCQlkZXZfZXJyKCZzLT5zcGktPmRldiwKKwkJCSJTUEkgdHJhbnNmZXIgZm9yIEdQSU8gY29uZiBkYXRhIHcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKiBHUElPIHZhbHVlIHF1ZXJ5IGZ1bmN0aW9uICovCitzdGF0aWMgaW50IG1heDMxMDdfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDMxMDdfcG9ydCwgY2hpcCk7CisJdTE2IGJ1ZlsxXTsJLyogQnVmZmVyIGZvciBTUEkgdHJhbnNmZXIgKi8KKworCWlmIChvZmZzZXQgPj0gTUFYMzEwN19HUElPX0NPVU5UKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiSW52YWxpZCBHUElPXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVhZCBjdXJyZW50IEdQSU8gZGF0YSByZWdpc3RlciAqLworCWJ1ZlswXSA9IE1BWDMxMDdfR1BJT0RBVEFfUkVHOworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIDIpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIEdQSU8gZGF0YSByIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlidWZbMF0gJj0gTUFYMzEwN19TUElfUlhfREFUQV9NQVNLOworCisJLyogUmV0dXJuIHZhbHVlICovCisJcmV0dXJuIGJ1ZlswXSAmICgweDAwMDEgPDwgb2Zmc2V0KTsKK30KKworLyogR1BJTyB2YWx1ZSBzZXQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIG1heDMxMDdfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBjaGlwKTsKKwl1MTYgYnVmWzJdOwkvKiBCdWZmZXIgZm9yIFNQSSB0cmFuc2ZlcnMgKi8KKworCWlmIChvZmZzZXQgPj0gTUFYMzEwN19HUElPX0NPVU5UKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiSW52YWxpZCBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFJlYWQgY3VycmVudCBHUElPIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzKi8KKwlidWZbMF0gPSBNQVgzMTA3X0dQSU9EQVRBX1JFRzsKKwlidWZbMV0gPSBNQVgzMTA3X0dQSU9DRkdfUkVHOworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIDQpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LAorCQkJIlNQSSB0cmFuc2ZlciBmb3IgR1BJTyBkYXRhIGFuZCBjb25maWcgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCWJ1ZlswXSAmPSBNQVgzMTA3X1NQSV9SWF9EQVRBX01BU0s7CisJYnVmWzFdICY9IE1BWDMxMDdfU1BJX1JYX0RBVEFfTUFTSzsKKworCWlmICghKGJ1ZlsxXSAmICgweDAwMDEgPDwgb2Zmc2V0KSkpIHsKKwkJLyogQ29uZmlndXJlZCBhcyBpbnB1dCwgY2FuJ3Qgc2V0IHZhbHVlICovCisJCWRldl93YXJuKCZzLT5zcGktPmRldiwKKwkJCQkiVHJ5aW5nIHRvIHNldCB2YWx1ZSBmb3IgaW5wdXQgR1BJT1xuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgdmFsdWUgKi8KKwlpZiAodmFsdWUpCisJCWJ1ZlswXSB8PSAoMHgwMDAxIDw8IG9mZnNldCk7CisJZWxzZQorCQlidWZbMF0gJj0gfigweDAwMDEgPDwgb2Zmc2V0KTsKKworCS8qIFdyaXRlIG5ldyBHUElPIGRhdGEgcmVnaXN0ZXIgdmFsdWUgKi8KKwlidWZbMF0gfD0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19HUElPREFUQV9SRUcpOworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCBOVUxMLCAyKSkKKwkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJTUEkgdHJhbnNmZXIgR1BJTyBkYXRhIHcgZmFpbGVkXG4iKTsKK30KKworLyogR1BJTyBjaGlwIGRhdGEgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIG1heDMxMDdfZ3Bpb19jaGlwID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmRpcmVjdGlvbl9pbnB1dAk9IG1heDMxMDdfZ3Bpb19kaXJlY3Rpb25faW4sCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBtYXgzMTA3X2dwaW9fZGlyZWN0aW9uX291dCwKKwkuZ2V0CQkJPSBtYXgzMTA3X2dwaW9fZ2V0LAorCS5zZXQJCQk9IG1heDMxMDdfZ3Bpb19zZXQsCisJLmNhbl9zbGVlcAkJPSAxLAorCS5iYXNlCQkJPSBNQVgzMTA3X0dQSU9fQkFTRSwKKwkubmdwaW8JCQk9IE1BWDMxMDdfR1BJT19DT1VOVCwKK307CisKKy8qKgorICoJbWF4MzEwN19hYXZhX3Jlc2V0CS0JcmVzZXQgb24gQUFWQSBzeXN0ZW1zCisgKglAc3BpOiBUaGUgU1BJIGRldmljZSB3ZSBhcmUgcHJvYmluZworICoKKyAqCVJlc2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHByb2JpbmcuCisgKi8KKworc3RhdGljIGludCBtYXgzMTA3X2FhdmFfcmVzZXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwkvKiBSZXNldCB0aGUgY2hpcCAqLworCWlmIChncGlvX3JlcXVlc3QoTUFYMzEwN19SRVNFVF9HUElPLCAibWF4MzEwNyIpKSB7CisJCXByX2VycigiUmVxdWVzdGluZyBSRVNFVCBHUElPIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE1BWDMxMDdfUkVTRVRfR1BJTywgMCkpIHsKKwkJcHJfZXJyKCJTZXR0aW5nIFJFU0VUIEdQSU8gdG8gMCBmYWlsZWRcbiIpOworCQlncGlvX2ZyZWUoTUFYMzEwN19SRVNFVF9HUElPKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW1zbGVlcChNQVgzMTA3X1JFU0VUX0RFTEFZKTsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE1BWDMxMDdfUkVTRVRfR1BJTywgMSkpIHsKKwkJcHJfZXJyKCJTZXR0aW5nIFJFU0VUIEdQSU8gdG8gMSBmYWlsZWRcbiIpOworCQlncGlvX2ZyZWUoTUFYMzEwN19SRVNFVF9HUElPKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWdwaW9fZnJlZShNQVgzMTA3X1JFU0VUX0dQSU8pOworCW1zbGVlcChNQVgzMTA3X1dBS0VVUF9ERUxBWSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4MzEwN19hYXZhX2NvbmZpZ3VyZShzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzKQoreworCWludCByZXR2YWw7CisKKwkvKiBJbml0aWFsaXplIEdQSU8gY2hpcCBkYXRhICovCisJcy0+Y2hpcCA9IG1heDMxMDdfZ3Bpb19jaGlwOworCXMtPmNoaXAubGFiZWwgPSBzLT5zcGktPm1vZGFsaWFzOworCXMtPmNoaXAuZGV2ID0gJnMtPnNwaS0+ZGV2OworCisJLyogQWRkIEdQSU8gY2hpcCAqLworCXJldHZhbCA9IGdwaW9jaGlwX2FkZCgmcy0+Y2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIkFkZGluZyBHUElPIGNoaXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBUZW1wb3JhcnkgZml4IGZvciBFVjIgYm9vdCBwcm9ibGVtcywgc2V0IG1vZGVtIHJlc2V0IHRvIDAgKi8KKwltYXgzMTA3X2dwaW9fZGlyZWN0aW9uX291dCgmcy0+Y2hpcCwgMywgMCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvKiBUaGlzIHdpbGwgZ2V0IGVuYWJsZWQgb25jZSB3ZSBoYXZlIHRoZSBib2FyZCBzdHVmZiBtZXJnZWQgZm9yIHRoaXMKKyAgIHNwZWNpZmljIGNhc2UgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBiYXVkX3RhYmxlIGJyZzEzX2V4dFtdID0geworCXsgMzAwLCAgICBNQVgzMTA3X0JSRzEzX0IzMDAgfSwKKwl7IDYwMCwgICAgTUFYMzEwN19CUkcxM19CNjAwIH0sCisJeyAxMjAwLCAgIE1BWDMxMDdfQlJHMTNfQjEyMDAgfSwKKwl7IDI0MDAsICAgTUFYMzEwN19CUkcxM19CMjQwMCB9LAorCXsgNDgwMCwgICBNQVgzMTA3X0JSRzEzX0I0ODAwIH0sCisJeyA5NjAwLCAgIE1BWDMxMDdfQlJHMTNfQjk2MDAgfSwKKwl7IDE5MjAwLCAgTUFYMzEwN19CUkcxM19CMTkyMDAgfSwKKwl7IDU3NjAwLCAgTUFYMzEwN19CUkcxM19CNTc2MDAgfSwKKwl7IDExNTIwMCwgTUFYMzEwN19CUkcxM19CMTE1MjAwIH0sCisJeyAyMzA0MDAsIE1BWDMxMDdfQlJHMTNfQjIzMDQwMCB9LAorCXsgNDYwODAwLCBNQVgzMTA3X0JSRzEzX0I0NjA4MDAgfSwKKwl7IDkyMTYwMCwgTUFYMzEwN19CUkcxM19COTIxNjAwIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkIG1heDMxMDdfYWF2YV9pbml0KHN0cnVjdCBtYXgzMTA3X3BvcnQgKnMpCit7CisJLypvdmVycmlkZSBmb3IgQUFWQSBTQyBzcGVjaWZpYyovCisJaWYgKG1yc3RfcGxhdGZvcm1faWQoKSA9PSBNUlNUX1BMQVRGT1JNX0FBVkFfU0MpIHsKKwkJaWYgKGdldF9rb3NraV9idWlsZF9pZCgpIDw9IEtPU0tJX0VWMikKKwkJCWlmIChzLT5leHRfY2xrKSB7CisJCQkJcy0+YnJnX2NmZyA9IE1BWDMxMDdfQlJHMTNfQjk2MDA7CisJCQkJcy0+YmF1ZF90YmwgPSAoc3RydWN0IGJhdWRfdGFibGUgKilicmcxM19leHQ7CisJCQl9CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDMxMDdfYWF2YV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwkvKiBSZW1vdmUgR1BJTyBjaGlwICovCisJaWYgKGdwaW9jaGlwX3JlbW92ZSgmcy0+Y2hpcCkpCisJCWRldl93YXJuKCZzcGktPmRldiwgIlJlbW92aW5nIEdQSU8gY2hpcCBmYWlsZWRcbiIpOworCisJLyogVGhlbiBkbyB0aGUgZGVmYXVsdCByZW1vdmUgKi8KKwlyZXR1cm4gbWF4MzEwN19yZW1vdmUoc3BpKTsKK30KKworLyogUGxhdGZvcm0gZGF0YSAqLworc3RhdGljIHN0cnVjdCBtYXgzMTA3X3BsYXQgYWF2YV9wbGF0X2RhdGEgPSB7CisJLmxvb3BiYWNrICAgICAgICAgICAgICAgPSAwLAorCS5leHRfY2xrICAgICAgICAgICAgICAgID0gMSwKKy8qCS5pbml0CQkJPSBtYXgzMTA3X2FhdmFfaW5pdCwgKi8KKwkuY29uZmlndXJlCQk9IG1heDMxMDdfYWF2YV9jb25maWd1cmUsCisJLmh3X3N1c3BlbmQJCT0gbWF4MzEwN19od19zdXNwLAorCS5wb2xsZWRfbW9kZSAgICAgICAgICAgID0gMCwKKwkucG9sbF90aW1lICAgICAgICAgICAgICA9IDAsCit9OworCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDMxMDdfcHJvYmVfYWF2YShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBtYXgzMTA3X2FhdmFfcmVzZXQoc3BpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbWF4MzEwN19wcm9iZShzcGksICZhYXZhX3BsYXRfZGF0YSk7Cit9CisKKy8qIFNwaSBkcml2ZXIgZGF0YSAqLworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1heDMxMDdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhYXZhLW1heDMxMDciLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtYXgzMTA3X3Byb2JlX2FhdmEsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXgzMTA3X2FhdmFfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IG1heDMxMDdfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG1heDMxMDdfcmVzdW1lLAorfTsKKworLyogRHJpdmVyIGluaXQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgX19pbml0IG1heDMxMDdfaW5pdCh2b2lkKQoreworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYXgzMTA3X2RyaXZlcik7Cit9CisKKy8qIERyaXZlciBleGl0IGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4MzEwN19leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZtYXgzMTA3X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1heDMxMDdfaW5pdCk7Cittb2R1bGVfZXhpdChtYXgzMTA3X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDMxMDcgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBYXZhbW9iaWxlIik7CitNT0RVTEVfQUxJQVMoImFhdmEtbWF4MzEwNy1zcGkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuYyBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzI4M2MxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvbWF4MzEwNy5jCkBAIC0wLDAgKzEsMTE5NyBAQAorLyoKKyAqICBtYXgzMTA3LmMgLSBzcGkgdWFydCBwcm90b2NvbCBkcml2ZXIgZm9yIE1heGltIDMxMDcKKyAqICBCYXNlZCBvbiBtYXgzMTAwLmMKKyAqCWJ5IENocmlzdGlhbiBQZWxsZWdyaW4gPGNocmlwZWxsQGV2b2x3YXJlLm9yZz4KKyAqICBhbmQJbWF4MzExMC5jCisgKglieSBGZW5nIFRhbmcgPGZlbmcudGFuZ0BpbnRlbC5jb20+CisgKgorICogIENvcHlyaWdodCAoQykgQWF2YW1vYmlsZSAyMDA5CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgIm1heDMxMDcuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiYXVkX3RhYmxlIGJyZzI2X2V4dFtdID0geworCXsgMzAwLCAgICBNQVgzMTA3X0JSRzI2X0IzMDAgfSwKKwl7IDYwMCwgICAgTUFYMzEwN19CUkcyNl9CNjAwIH0sCisJeyAxMjAwLCAgIE1BWDMxMDdfQlJHMjZfQjEyMDAgfSwKKwl7IDI0MDAsICAgTUFYMzEwN19CUkcyNl9CMjQwMCB9LAorCXsgNDgwMCwgICBNQVgzMTA3X0JSRzI2X0I0ODAwIH0sCisJeyA5NjAwLCAgIE1BWDMxMDdfQlJHMjZfQjk2MDAgfSwKKwl7IDE5MjAwLCAgTUFYMzEwN19CUkcyNl9CMTkyMDAgfSwKKwl7IDU3NjAwLCAgTUFYMzEwN19CUkcyNl9CNTc2MDAgfSwKKwl7IDExNTIwMCwgTUFYMzEwN19CUkcyNl9CMTE1MjAwIH0sCisJeyAyMzA0MDAsIE1BWDMxMDdfQlJHMjZfQjIzMDQwMCB9LAorCXsgNDYwODAwLCBNQVgzMTA3X0JSRzI2X0I0NjA4MDAgfSwKKwl7IDkyMTYwMCwgTUFYMzEwN19CUkcyNl9COTIxNjAwIH0sCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmF1ZF90YWJsZSBicmcxM19pbnRbXSA9IHsKKwl7IDMwMCwgICAgTUFYMzEwN19CUkcxM19JQjMwMCB9LAorCXsgNjAwLCAgICBNQVgzMTA3X0JSRzEzX0lCNjAwIH0sCisJeyAxMjAwLCAgIE1BWDMxMDdfQlJHMTNfSUIxMjAwIH0sCisJeyAyNDAwLCAgIE1BWDMxMDdfQlJHMTNfSUIyNDAwIH0sCisJeyA0ODAwLCAgIE1BWDMxMDdfQlJHMTNfSUI0ODAwIH0sCisJeyA5NjAwLCAgIE1BWDMxMDdfQlJHMTNfSUI5NjAwIH0sCisJeyAxOTIwMCwgIE1BWDMxMDdfQlJHMTNfSUIxOTIwMCB9LAorCXsgNTc2MDAsICBNQVgzMTA3X0JSRzEzX0lCNTc2MDAgfSwKKwl7IDExNTIwMCwgTUFYMzEwN19CUkcxM19JQjExNTIwMCB9LAorCXsgMjMwNDAwLCBNQVgzMTA3X0JSRzEzX0lCMjMwNDAwIH0sCisJeyA0NjA4MDAsIE1BWDMxMDdfQlJHMTNfSUI0NjA4MDAgfSwKKwl7IDkyMTYwMCwgTUFYMzEwN19CUkcxM19JQjkyMTYwMCB9LAorCXsgMCwgMCB9Cit9OworCitzdGF0aWMgdTMyIGdldF9uZXdfYnJnKGludCBiYXVkLCBzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzKQoreworCWludCBpOworCWNvbnN0IHN0cnVjdCBiYXVkX3RhYmxlICpiYXVkX3RibCA9IHMtPmJhdWRfdGJsOworCisJZm9yIChpID0gMDsgaSA8IDEzOyBpKyspIHsKKwkJaWYgKGJhdWQgPT0gYmF1ZF90YmxbaV0uYmF1ZCkKKwkJCXJldHVybiBiYXVkX3RibFtpXS5uZXdfYnJnOworCX0KKworCXJldHVybiAwOworfQorCisvKiBQZXJmb3JtIFNQSSB0cmFuc2ZlciBmb3Igd3JpdGUvcmVhZCBvZiBkZXZpY2UgcmVnaXN0ZXIocykgKi8KK2ludCBtYXgzMTA3X3J3KHN0cnVjdCBtYXgzMTA3X3BvcnQgKnMsIHU4ICp0eCwgdTggKnJ4LCBpbnQgbGVuKQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSBzcGlfbXNnOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgc3BpX3hmZXI7CisKKwkvKiBJbml0aWFsaXplIFNQSSAsbWVzc2FnZSAqLworCXNwaV9tZXNzYWdlX2luaXQoJnNwaV9tc2cpOworCisJLyogSW5pdGlhbGl6ZSBTUEkgdHJhbnNmZXIgKi8KKwltZW1zZXQoJnNwaV94ZmVyLCAwLCBzaXplb2Ygc3BpX3hmZXIpOworCXNwaV94ZmVyLmxlbiA9IGxlbjsKKwlzcGlfeGZlci50eF9idWYgPSB0eDsKKwlzcGlfeGZlci5yeF9idWYgPSByeDsKKwlzcGlfeGZlci5zcGVlZF9oeiA9IE1BWDMxMDdfU1BJX1NQRUVEOworCisJLyogQWRkIFNQSSB0cmFuc2ZlciB0byBTUEkgbWVzc2FnZSAqLworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZzcGlfeGZlciwgJnNwaV9tc2cpOworCisjaWZkZWYgREJHX1RSQUNFX1NQSV9EQVRBCisJeworCQlpbnQgaTsKKwkJcHJfaW5mbygidHggbGVuICVkOlxuIiwgc3BpX3hmZXIubGVuKTsKKwkJZm9yIChpID0gMCA7IGkgPCBzcGlfeGZlci5sZW4gJiYgaSA8IDMyIDsgaSsrKQorCQkJcHJfaW5mbygiICV4IiwgKCh1OCAqKXNwaV94ZmVyLnR4X2J1ZilbaV0pOworCQlwcl9pbmZvKCJcbiIpOworCX0KKyNlbmRpZgorCisJLyogUGVyZm9ybSBzeW5jaHJvbm91cyBTUEkgdHJhbnNmZXIgKi8KKwlpZiAoc3BpX3N5bmMocy0+c3BpLCAmc3BpX21zZykpIHsKKwkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJzcGlfc3luYyBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisjaWZkZWYgREJHX1RSQUNFX1NQSV9EQVRBCisJaWYgKHNwaV94ZmVyLnJ4X2J1ZikgeworCQlpbnQgaTsKKwkJcHJfaW5mbygicnggbGVuICVkOlxuIiwgc3BpX3hmZXIubGVuKTsKKwkJZm9yIChpID0gMCA7IGkgPCBzcGlfeGZlci5sZW4gJiYgaSA8IDMyIDsgaSsrKQorCQkJcHJfaW5mbygiICV4IiwgKCh1OCAqKXNwaV94ZmVyLnJ4X2J1ZilbaV0pOworCQlwcl9pbmZvKCJcbiIpOworCX0KKyNlbmRpZgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWF4MzEwN19ydyk7CisKKy8qIFB1dHMgcmVjZWl2ZWQgZGF0YSB0byBjaXJjdWxhciBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIHB1dF9kYXRhX3RvX2NpcmNfYnVmKHN0cnVjdCBtYXgzMTA3X3BvcnQgKnMsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJCWludCBsZW4pCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAoIXBvcnQtPnN0YXRlKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCS8qIEluc2VydCByZWNlaXZlZCBkYXRhICovCisJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGxlbik7CisJLyogVXBkYXRlIFJYIGNvdW50ZXIgKi8KKwlwb3J0LT5pY291bnQucnggKz0gbGVuOworfQorCisvKiBIYW5kbGUgZGF0YSByZWNlaXZpbmcgKi8KK3N0YXRpYyB2b2lkIG1heDMxMDdfaGFuZGxlcngoc3RydWN0IG1heDMxMDdfcG9ydCAqcywgdTE2IHJ4bHZsKQoreworCWludCBpOworCWludCBqOworCWludCBsZW47CQkJCS8qIFNQSSB0cmFuc2ZlciBidWZmZXIgbGVuZ3RoICovCisJdTE2ICpidWY7CisJdTggKnZhbGlkX3N0cjsKKworCWlmICghcy0+cnhfZW5hYmxlZCkKKwkJLyogUlggaXMgZGlzYWJsZWQgKi8KKwkJcmV0dXJuOworCisJaWYgKHJ4bHZsID09IDApIHsKKwkJLyogUlggZmlmbyBpcyBlbXB0eSAqLworCQlyZXR1cm47CisJfSBlbHNlIGlmIChyeGx2bCA+PSBNQVgzMTA3X1JYX0ZJRk9fU0laRSkgeworCQlkZXZfd2Fybigmcy0+c3BpLT5kZXYsICJQb3NzaWJsZSBSWCBGSUZPIG92ZXJydW4gJWRcbiIsIHJ4bHZsKTsKKwkJLyogRW5zdXJlIHNhbml0eSBvZiBSWCBsZXZlbCAqLworCQlyeGx2bCA9IE1BWDMxMDdfUlhfRklGT19TSVpFOworCX0KKwlpZiAoKHMtPnJ4YnVmID09IDApIHx8IChzLT5yeHN0ciA9PSAwKSkgeworCQlkZXZfd2Fybigmcy0+c3BpLT5kZXYsICJSeCBidWZmZXIvc3RyIGlzbid0IHJlYWR5XG4iKTsKKwkJcmV0dXJuOworCX0KKwlidWYgPSBzLT5yeGJ1ZjsKKwl2YWxpZF9zdHIgPSBzLT5yeHN0cjsKKwl3aGlsZSAocnhsdmwpIHsKKwkJcHJfZGVidWcoInJ4bHZsICVkXG4iLCByeGx2bCk7CisJCS8qIENsZWFyIGJ1ZmZlciAqLworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YodTE2KSAqIChNQVgzMTA3X1JYX0ZJRk9fU0laRSArIDIpKTsKKwkJbGVuID0gMDsKKwkJaWYgKHMtPmlycWVuX3JlZyAmIE1BWDMxMDdfSVJRX1JYRklGT19CSVQpIHsKKwkJCS8qIEZpcnN0IGRpc2FibGUgUlggRklGTyBpbnRlcnJ1cHQgKi8KKwkJCXByX2RlYnVnKCJEaXNhYmxpbmcgUlggSU5UXG4iKTsKKwkJCWJ1ZlswXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfSVJRRU5fUkVHKTsKKwkJCXMtPmlycWVuX3JlZyAmPSB+TUFYMzEwN19JUlFfUlhGSUZPX0JJVDsKKwkJCWJ1ZlswXSB8PSBzLT5pcnFlbl9yZWc7CisJCQlsZW4rKzsKKwkJfQorCQkvKiBKdXN0IGluY3JlYXNlIHRoZSBsZW5ndGggYnkgYW1vdW50IG9mIHdvcmRzIGluIEZJRk8gc2luY2UKKwkJICogYnVmZmVyIHdhcyB6ZXJvZWQgYW5kIFNQSSB0cmFuc2ZlciBvZiAweDAwMDAgbWVhbnMgcmVhZGluZworCQkgKiBmcm9tIFJYIEZJRk8KKwkJICovCisJCWxlbiArPSByeGx2bDsKKwkJLyogQXBwZW5kIFJYIGxldmVsIHF1ZXJ5ICovCisJCWJ1ZltsZW5dID0gTUFYMzEwN19SWEZJRk9MVkxfUkVHOworCQlsZW4rKzsKKworCQkvKiBQZXJmb3JtIHRoZSBTUEkgdHJhbnNmZXIgKi8KKwkJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIGxlbiAqIDIpKSB7CisJCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIlNQSSB0cmFuc2ZlciBmb3IgUlggaCBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU2tpcCBSWCBGSUZPIGludGVycnVwdCBkaXNhYmxpbmcgd29yZCBpZiBpdCB3YXMgYWRkZWQgKi8KKwkJaiA9ICgobGVuIC0gMSkgLSByeGx2bCk7CisJCS8qIFJlYWQgcmVjZWl2ZWQgd29yZHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJ4bHZsOyBpKyssIGorKykKKwkJCXZhbGlkX3N0cltpXSA9ICh1OClidWZbal07CisJCXB1dF9kYXRhX3RvX2NpcmNfYnVmKHMsIHZhbGlkX3N0ciwgcnhsdmwpOworCQkvKiBHZXQgbmV3IFJYIGxldmVsICovCisJCXJ4bHZsID0gKGJ1ZltsZW4gLSAxXSAmIE1BWDMxMDdfU1BJX1JYX0RBVEFfTUFTSyk7CisJfQorCisJaWYgKHMtPnJ4X2VuYWJsZWQpIHsKKwkJLyogUlggc3RpbGwgZW5hYmxlZCwgcmUtZW5hYmxlIFJYIEZJRk8gaW50ZXJydXB0ICovCisJCXByX2RlYnVnKCJFbmFibGluZyBSWCBJTlRcbiIpOworCQlidWZbMF0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0lSUUVOX1JFRyk7CisJCXMtPmlycWVuX3JlZyB8PSBNQVgzMTA3X0lSUV9SWEZJRk9fQklUOworCQlidWZbMF0gfD0gcy0+aXJxZW5fcmVnOworCQlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsIE5VTEwsIDIpKQorCQkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJSWCBGSUZPIElOVCBlbmFibGluZyBmYWlsZWRcbiIpOworCX0KKworCS8qIFB1c2ggdGhlIHJlY2VpdmVkIGRhdGEgdG8gcmVjZWl2ZXJzICovCisJaWYgKHMtPnBvcnQuc3RhdGUtPnBvcnQudHR5KQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaChzLT5wb3J0LnN0YXRlLT5wb3J0LnR0eSk7Cit9CisKKworLyogSGFuZGxlIGRhdGEgc2VuZGluZyAqLworc3RhdGljIHZvaWQgbWF4MzEwN19oYW5kbGV0eChzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzKQoreworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZzLT5wb3J0LnN0YXRlLT54bWl0OworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxlbjsJCQkJLyogU1BJIHRyYW5zZmVyIGJ1ZmZlciBsZW5ndGggKi8KKwl1MTYgKmJ1ZjsKKworCWlmICghcy0+dHhfZmlmb19lbXB0eSkKKwkJLyogRG9uJ3Qgc2VuZCBtb3JlIGRhdGEgYmVmb3JlIHByZXZpb3VzIGRhdGEgaXMgc2VudCAqLworCQlyZXR1cm47CisKKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCgmcy0+cG9ydCkpCisJCS8qIE5vIGRhdGEgdG8gc2VuZCBvciBUWCBpcyBzdG9wcGVkICovCisJCXJldHVybjsKKworCWlmICghcy0+dHhidWYpIHsKKwkJZGV2X3dhcm4oJnMtPnNwaS0+ZGV2LCAiVHhidWYgaXNuJ3QgcmVhZHlcbiIpOworCQlyZXR1cm47CisJfQorCWJ1ZiA9IHMtPnR4YnVmOworCS8qIEdldCBsZW5ndGggb2YgZGF0YSBwZW5kaW5nIGluIGNpcmN1bGFyIGJ1ZmZlciAqLworCWxlbiA9IHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpOworCWlmIChsZW4pIHsKKwkJLyogTGltaXQgdG8gc2l6ZSBvZiBUWCBGSUZPICovCisJCWlmIChsZW4gPiBNQVgzMTA3X1RYX0ZJRk9fU0laRSkKKwkJCWxlbiA9IE1BWDMxMDdfVFhfRklGT19TSVpFOworCisJCXByX2RlYnVnKCJ0eGxlbiAlZFxuIiwgbGVuKTsKKworCQkvKiBVcGRhdGUgVFggY291bnRlciAqLworCQlzLT5wb3J0Lmljb3VudC50eCArPSBsZW47CisKKwkJLyogVFggRklGTyB3aWxsIG5vIGxvbmdlciBiZSBlbXB0eSAqLworCQlzLT50eF9maWZvX2VtcHR5ID0gMDsKKworCQlpID0gMDsKKwkJaWYgKHMtPmlycWVuX3JlZyAmIE1BWDMxMDdfSVJRX1RYRU1QVFlfQklUKSB7CisJCQkvKiBGaXJzdCBkaXNhYmxlIFRYIGVtcHR5IGludGVycnVwdCAqLworCQkJcHJfZGVidWcoIkRpc2FibGluZyBURSBJTlRcbiIpOworCQkJYnVmW2ldID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19JUlFFTl9SRUcpOworCQkJcy0+aXJxZW5fcmVnICY9IH5NQVgzMTA3X0lSUV9UWEVNUFRZX0JJVDsKKwkJCWJ1ZltpXSB8PSBzLT5pcnFlbl9yZWc7CisJCQlpKys7CisJCQlsZW4rKzsKKwkJfQorCQkvKiBBZGQgZGF0YSB0byBzZW5kICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwkJZm9yICggOyBpIDwgbGVuIDsgaSsrKSB7CisJCQlidWZbaV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X1RIUl9SRUcpOworCQkJYnVmW2ldIHw9ICgodTE2KXhtaXQtPmJ1Zlt4bWl0LT50YWlsXSAmCisJCQkJCQlNQVgzMTA3X1NQSV9UWF9EQVRBX01BU0spOworCQkJeG1pdC0+dGFpbCA9ICh4bWl0LT50YWlsICsgMSkgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwkJaWYgKCEocy0+aXJxZW5fcmVnICYgTUFYMzEwN19JUlFfVFhFTVBUWV9CSVQpKSB7CisJCQkvKiBFbmFibGUgVFggZW1wdHkgaW50ZXJydXB0ICovCisJCQlwcl9kZWJ1ZygiRW5hYmxpbmcgVEUgSU5UXG4iKTsKKwkJCWJ1ZltpXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfSVJRRU5fUkVHKTsKKwkJCXMtPmlycWVuX3JlZyB8PSBNQVgzMTA3X0lSUV9UWEVNUFRZX0JJVDsKKwkJCWJ1ZltpXSB8PSBzLT5pcnFlbl9yZWc7CisJCQlpKys7CisJCQlsZW4rKzsKKwkJfQorCQlpZiAoIXMtPnR4X2VuYWJsZWQpIHsKKwkJCS8qIEVuYWJsZSBUWCAqLworCQkJcHJfZGVidWcoIkVuYWJsZSBUWFxuIik7CisJCQlidWZbaV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X01PREUxX1JFRyk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJCQlzLT5tb2RlMV9yZWcgJj0gfk1BWDMxMDdfTU9ERTFfVFhESVNfQklUOworCQkJYnVmW2ldIHw9IHMtPm1vZGUxX3JlZzsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRhdGFfbG9jaywgZmxhZ3MpOworCQkJcy0+dHhfZW5hYmxlZCA9IDE7CisJCQlpKys7CisJCQlsZW4rKzsKKwkJfQorCisJCS8qIFBlcmZvcm0gdGhlIFNQSSB0cmFuc2ZlciAqLworCQlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsIE5VTEwsIGxlbioyKSkgeworCQkJZGV2X2Vycigmcy0+c3BpLT5kZXYsCisJCQkJIlNQSSB0cmFuc2ZlciBUWCBoYW5kbGluZyBmYWlsZWRcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogSW5kaWNhdGUgd2FrZSB1cCBpZiBjaXJjdWxhciBidWZmZXIgaXMgZ2V0dGluZyBsb3cgb24gZGF0YSAqLworCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKKwkJdWFydF93cml0ZV93YWtldXAoJnMtPnBvcnQpOworCit9CisKKy8qIEhhbmRsZSBpbnRlcnJ1cHRzCisgKiBBbHNvIHJlYWRzIGFuZCByZXR1cm5zIGN1cnJlbnQgUlggRklGTyBsZXZlbAorICovCitzdGF0aWMgdTE2IGhhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IG1heDMxMDdfcG9ydCAqcykKK3sKKwl1MTYgYnVmWzRdOwkvKiBCdWZmZXIgZm9yIFNQSSB0cmFuc2ZlcnMgKi8KKwl1OCBpcnFfc3RhdHVzOworCXUxNiByeF9sZXZlbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogUmVhZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCisJYnVmWzBdID0gTUFYMzEwN19JUlFTVFNfUkVHOworCS8qIFJlYWQgc3RhdHVzIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlidWZbMV0gPSBNQVgzMTA3X1NUU19JUlFTVFNfUkVHOworCS8qIFJlYWQgTFNSIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlidWZbMl0gPSBNQVgzMTA3X0xTUl9JUlFTVFNfUkVHOworCS8qIFF1ZXJ5IFJYIGxldmVsICovCisJYnVmWzNdID0gTUFYMzEwN19SWEZJRk9MVkxfUkVHOworCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIDgpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LAorCQkJIlNQSSB0cmFuc2ZlciBmb3IgSU5UUiBoYW5kbGluZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpcnFfc3RhdHVzID0gKHU4KWJ1ZlswXTsKKwlwcl9kZWJ1ZygiSVJRU1RTICV4XG4iLCBpcnFfc3RhdHVzKTsKKwlyeF9sZXZlbCA9IChidWZbM10gJiBNQVgzMTA3X1NQSV9SWF9EQVRBX01BU0spOworCisJaWYgKGlycV9zdGF0dXMgJiBNQVgzMTA3X0lSUV9MU1JfQklUKSB7CisJCS8qIExTUiBpbnRlcnJ1cHQgKi8KKwkJaWYgKGJ1ZlsyXSAmIE1BWDMxMDdfTFNSX1JYVE9fQklUKQorCQkJLyogUlggdGltZW91dCBpbnRlcnJ1cHQsCisJCQkgKiBoYW5kbGVkIGJ5IG5vcm1hbCBSWCBoYW5kbGluZworCQkJICovCisJCQlwcl9kZWJ1ZygiUlggVE8gSU5UXG4iKTsKKwl9CisKKwlpZiAoaXJxX3N0YXR1cyAmIE1BWDMxMDdfSVJRX1RYRU1QVFlfQklUKSB7CisJCS8qIFR4IGVtcHR5IGludGVycnVwdCwKKwkJICogZGlzYWJsZSBUWCBhbmQgc2V0IHR4X2ZpZm9fZW1wdHkgZmxhZworCQkgKi8KKwkJcHJfZGVidWcoIlRFIElOVCwgZGlzYWJsaW5nIFRYXG4iKTsKKwkJYnVmWzBdID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19NT0RFMV9SRUcpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJCXMtPm1vZGUxX3JlZyB8PSBNQVgzMTA3X01PREUxX1RYRElTX0JJVDsKKwkJYnVmWzBdIHw9IHMtPm1vZGUxX3JlZzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJCWlmIChtYXgzMTA3X3J3KHMsICh1OCAqKWJ1ZiwgTlVMTCwgMikpCisJCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIlNQSSB0cmFuc2ZlciBUWCBkaXMgZmFpbGVkXG4iKTsKKwkJcy0+dHhfZW5hYmxlZCA9IDA7CisJCXMtPnR4X2ZpZm9fZW1wdHkgPSAxOworCX0KKworCWlmIChpcnFfc3RhdHVzICYgTUFYMzEwN19JUlFfUlhGSUZPX0JJVCkKKwkJLyogUlggRklGTyBpbnRlcnJ1cHQsCisJCSAqIGhhbmRsZWQgYnkgbm9ybWFsIFJYIGhhbmRsaW5nCisJCSAqLworCQlwcl9kZWJ1ZygiUkZJRk8gSU5UXG4iKTsKKworCS8qIFJldHVybiBSWCBsZXZlbCAqLworCXJldHVybiByeF9sZXZlbDsKK30KKworLyogVHJpZ2dlciB3b3JrIHRocmVhZCovCitzdGF0aWMgdm9pZCBtYXgzMTA3X2Rvd29yayhzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzKQoreworCWlmICghd29ya19wZW5kaW5nKCZzLT53b3JrKSAmJiAhZnJlZXppbmcoY3VycmVudCkgJiYgIXMtPnN1c3BlbmRlZCkKKwkJcXVldWVfd29yayhzLT53b3JrcXVldWUsICZzLT53b3JrKTsKKwllbHNlCisJCWRldl93YXJuKCZzLT5zcGktPmRldiwgImludGVycnVwIGlzbid0IHNlcnZpY2VkIG5vcm1hbGx5IVxuIik7Cit9CisKKy8qIFdvcmsgdGhyZWFkICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2Yodywgc3RydWN0IG1heDMxMDdfcG9ydCwgd29yayk7CisJdTE2IHJ4bHZsID0gMDsKKwlpbnQgbGVuOwkvKiBTUEkgdHJhbnNmZXIgYnVmZmVyIGxlbmd0aCAqLworCXUxNiBidWZbNV07CS8qIEJ1ZmZlciBmb3IgU1BJIHRyYW5zZmVycyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBTdGFydCBieSByZWFkaW5nIGN1cnJlbnQgUlggRklGTyBsZXZlbCAqLworCWJ1ZlswXSA9IE1BWDMxMDdfUlhGSUZPTFZMX1JFRzsKKwlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsICh1OCAqKWJ1ZiwgMikpIHsKKwkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJTUEkgdHJhbnNmZXIgUlggbGV2IGZhaWxlZFxuIik7CisJCXJ4bHZsID0gMDsKKwl9IGVsc2UgeworCQlyeGx2bCA9IChidWZbMF0gJiBNQVgzMTA3X1NQSV9SWF9EQVRBX01BU0spOworCX0KKworCWRvIHsKKwkJcHJfZGVidWcoInJ4bHZsICVkXG4iLCByeGx2bCk7CisKKwkJLyogSGFuZGxlIFJYICovCisJCW1heDMxMDdfaGFuZGxlcngocywgcnhsdmwpOworCQlyeGx2bCA9IDA7CisKKwkJaWYgKHMtPmhhbmRsZV9pcnEpIHsKKwkJCS8qIEhhbmRsZSBwZW5kaW5nIGludGVycnVwdHMKKwkJCSAqIFdlIGFsc28gZ2V0IG5ldyBSWCBGSUZPIGxldmVsIHNpbmNlIG5ldyBkYXRhIG1heQorCQkJICogaGF2ZSBiZWVuIHJlY2VpdmVkIHdoaWxlIHB1c2hpbmcgcmVjZWl2ZWQgZGF0YSB0bworCQkJICogcmVjZWl2ZXJzCisJCQkgKi8KKwkJCXMtPmhhbmRsZV9pcnEgPSAwOworCQkJcnhsdmwgPSBoYW5kbGVfaW50ZXJydXB0KHMpOworCQl9CisKKwkJLyogSGFuZGxlIFRYICovCisJCW1heDMxMDdfaGFuZGxldHgocyk7CisKKwkJLyogSGFuZGxlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLworCQlsZW4gPSAwOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJCWlmIChzLT5tb2RlMV9jb21taXQpIHsKKwkJCXByX2RlYnVnKCJtb2RlMV9jb21taXRcbiIpOworCQkJYnVmW2xlbl0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X01PREUxX1JFRyk7CisJCQlidWZbbGVuKytdIHw9IHMtPm1vZGUxX3JlZzsKKwkJCXMtPm1vZGUxX2NvbW1pdCA9IDA7CisJCX0KKwkJaWYgKHMtPmxjcl9jb21taXQpIHsKKwkJCXByX2RlYnVnKCJsY3JfY29tbWl0XG4iKTsKKwkJCWJ1ZltsZW5dID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19MQ1JfUkVHKTsKKwkJCWJ1ZltsZW4rK10gfD0gcy0+bGNyX3JlZzsKKwkJCXMtPmxjcl9jb21taXQgPSAwOworCQl9CisJCWlmIChzLT5icmdfY29tbWl0KSB7CisJCQlwcl9kZWJ1ZygiYnJnX2NvbW1pdFxuIik7CisJCQlidWZbbGVuXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfQlJHRElWTVNCX1JFRyk7CisJCQlidWZbbGVuKytdIHw9ICgocy0+YnJnX2NmZyA+PiAxNikgJgorCQkJCQkJTUFYMzEwN19TUElfVFhfREFUQV9NQVNLKTsKKwkJCWJ1ZltsZW5dID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19CUkdESVZMU0JfUkVHKTsKKwkJCWJ1ZltsZW4rK10gfD0gKChzLT5icmdfY2ZnID4+IDgpICYKKwkJCQkJCU1BWDMxMDdfU1BJX1RYX0RBVEFfTUFTSyk7CisJCQlidWZbbGVuXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfQlJHQ0ZHX1JFRyk7CisJCQlidWZbbGVuKytdIHw9ICgocy0+YnJnX2NmZykgJiAweGZmKTsKKwkJCXMtPmJyZ19jb21taXQgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRhdGFfbG9jaywgZmxhZ3MpOworCisJCWlmIChsZW4gPiAwKSB7CisJCQlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsIE5VTEwsIGxlbiAqIDIpKQorCQkJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LAorCQkJCQkiU1BJIHRyYW5zZmVyIGNvbmZpZyBmYWlsZWRcbiIpOworCQl9CisKKwkJLyogUmVsb29wIGlmIGludGVycnVwdCBoYW5kbGluZyBpbmRpY2F0ZWQgZGF0YSBpbiBSWCBGSUZPICovCisJfSB3aGlsZSAocnhsdmwpOworCit9CisKKy8qIFNldCBzbGVlcCBtb2RlICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X3NldF9zbGVlcChzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzLCBpbnQgbW9kZSkKK3sKKwl1MTYgYnVmWzFdOwkvKiBCdWZmZXIgZm9yIFNQSSB0cmFuc2ZlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJcHJfZGVidWcoImVudGVyLCBtb2RlICVkXG4iLCBtb2RlKTsKKworCWJ1ZlswXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfTU9ERTFfUkVHKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBNQVgzMTA3X0RJU0FCTEVfRk9SQ0VEX1NMRUVQOgorCQkJcy0+bW9kZTFfcmVnICY9IH5NQVgzMTA3X01PREUxX0ZPUkNFU0xFRVBfQklUOworCQkJYnJlYWs7CisJY2FzZSBNQVgzMTA3X0VOQUJMRV9GT1JDRURfU0xFRVA6CisJCQlzLT5tb2RlMV9yZWcgfD0gTUFYMzEwN19NT0RFMV9GT1JDRVNMRUVQX0JJVDsKKwkJCWJyZWFrOworCWNhc2UgTUFYMzEwN19ESVNBQkxFX0FVVE9TTEVFUDoKKwkJCXMtPm1vZGUxX3JlZyAmPSB+TUFYMzEwN19NT0RFMV9BVVRPU0xFRVBfQklUOworCQkJYnJlYWs7CisJY2FzZSBNQVgzMTA3X0VOQUJMRV9BVVRPU0xFRVA6CisJCQlzLT5tb2RlMV9yZWcgfD0gTUFYMzEwN19NT0RFMV9BVVRPU0xFRVBfQklUOworCQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJCWRldl93YXJuKCZzLT5zcGktPmRldiwgImludmFsaWQgc2xlZXAgbW9kZVxuIik7CisJCXJldHVybjsKKwl9CisJYnVmWzBdIHw9IHMtPm1vZGUxX3JlZzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5kYXRhX2xvY2ssIGZsYWdzKTsKKworCWlmIChtYXgzMTA3X3J3KHMsICh1OCAqKWJ1ZiwgTlVMTCwgMikpCisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIHNsZWVwIG1vZGUgZmFpbGVkXG4iKTsKKworCWlmIChtb2RlID09IE1BWDMxMDdfRElTQUJMRV9BVVRPU0xFRVAgfHwKKwkJCW1vZGUgPT0gTUFYMzEwN19ESVNBQkxFX0ZPUkNFRF9TTEVFUCkKKwkJbXNsZWVwKE1BWDMxMDdfV0FLRVVQX0RFTEFZKTsKK30KKworLyogUGVyZm9ybSBmdWxsIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X3JlZ2lzdGVyX2luaXQoc3RydWN0IG1heDMxMDdfcG9ydCAqcykKK3sKKwl1MTYgYnVmWzExXTsJLyogQnVmZmVyIGZvciBTUEkgdHJhbnNmZXJzICovCisKKwkvKiAxLiBDb25maWd1cmUgYmF1ZCByYXRlLCA5NjAwIGFzIGRlZmF1bHQgKi8KKwlzLT5iYXVkID0gOTYwMDsKKwkvKiB0aGUgYmVsb3cgaXMgZGVmYXVsdCovCisJaWYgKHMtPmV4dF9jbGspIHsKKwkJcy0+YnJnX2NmZyA9IE1BWDMxMDdfQlJHMjZfQjk2MDA7CisJCXMtPmJhdWRfdGJsID0gKHN0cnVjdCBiYXVkX3RhYmxlICopYnJnMjZfZXh0OworCX0gZWxzZSB7CisJCXMtPmJyZ19jZmcgPSBNQVgzMTA3X0JSRzEzX0lCOTYwMDsKKwkJcy0+YmF1ZF90YmwgPSAoc3RydWN0IGJhdWRfdGFibGUgKilicmcxM19pbnQ7CisJfQorCisJaWYgKHMtPnBkYXRhLT5pbml0KQorCQlzLT5wZGF0YS0+aW5pdChzKTsKKworCWJ1ZlswXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfQlJHRElWTVNCX1JFRykKKwkJfCAoKHMtPmJyZ19jZmcgPj4gMTYpICYgTUFYMzEwN19TUElfVFhfREFUQV9NQVNLKTsKKwlidWZbMV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0JSR0RJVkxTQl9SRUcpCisJCXwgKChzLT5icmdfY2ZnID4+IDgpICYgTUFYMzEwN19TUElfVFhfREFUQV9NQVNLKTsKKwlidWZbMl0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0JSR0NGR19SRUcpCisJCXwgKChzLT5icmdfY2ZnKSAmIDB4ZmYpOworCisJLyogMi4gQ29uZmlndXJlIExDUiByZWdpc3RlciwgOE4xIG1vZGUgYnkgZGVmYXVsdCAqLworCXMtPmxjcl9yZWcgPSBNQVgzMTA3X0xDUl9XT1JEX0xFTl84OworCWJ1ZlszXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfTENSX1JFRykKKwkJfCBzLT5sY3JfcmVnOworCisJLyogMy4gQ29uZmlndXJlIE1PREUgMSByZWdpc3RlciAqLworCXMtPm1vZGUxX3JlZyA9IDA7CisJLyogRW5hYmxlIElSUSBwaW4gKi8KKwlzLT5tb2RlMV9yZWcgfD0gTUFYMzEwN19NT0RFMV9JUlFTRUxfQklUOworCS8qIERpc2FibGUgVFggKi8KKwlzLT5tb2RlMV9yZWcgfD0gTUFYMzEwN19NT0RFMV9UWERJU19CSVQ7CisJcy0+dHhfZW5hYmxlZCA9IDA7CisJLyogUlggaXMgZW5hYmxlZCAqLworCXMtPnJ4X2VuYWJsZWQgPSAxOworCWJ1Zls0XSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfTU9ERTFfUkVHKQorCQl8IHMtPm1vZGUxX3JlZzsKKworCS8qIDQuIENvbmZpZ3VyZSBNT0RFIDIgcmVnaXN0ZXIgKi8KKwlidWZbNV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X01PREUyX1JFRyk7CisJaWYgKHMtPmxvb3BiYWNrKSB7CisJCS8qIEVuYWJsZSBsb29wYmFjayAqLworCQlidWZbNV0gfD0gTUFYMzEwN19NT0RFMl9MT09QQkFDS19CSVQ7CisJfQorCS8qIFJlc2V0IEZJRk9zICovCisJYnVmWzVdIHw9IE1BWDMxMDdfTU9ERTJfRklGT1JTVF9CSVQ7CisJcy0+dHhfZmlmb19lbXB0eSA9IDE7CisKKwkvKiA1LiBDb25maWd1cmUgRklGTyB0cmlnZ2VyIGxldmVsIHJlZ2lzdGVyICovCisJYnVmWzZdID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19GSUZPVFJJR0xWTF9SRUcpOworCS8qIFJYIEZJRk8gdHJpZ2dlciBmb3IgMTYgd29yZHMsIFRYIEZJRk8gdHJpZ2dlciBub3QgdXNlZCAqLworCWJ1Zls2XSB8PSAoTUFYMzEwN19GSUZPVFJJR0xWTF9SWCgxNikgfCBNQVgzMTA3X0ZJRk9UUklHTFZMX1RYKDApKTsKKworCS8qIDYuIENvbmZpZ3VyZSBmbG93IGNvbnRyb2wgbGV2ZWxzICovCisJYnVmWzddID0gKE1BWDMxMDdfV1JJVEVfQklUIHwgTUFYMzEwN19GTE9XTFZMX1JFRyk7CisJLyogRmxvdyBjb250cm9sIGhhbHQgbGV2ZWwgOTYsIHJlc3VtZSBsZXZlbCA0OCAqLworCWJ1Zls3XSB8PSAoTUFYMzEwN19GTE9XTFZMX1JFUyg0OCkgfCBNQVgzMTA3X0ZMT1dMVkxfSEFMVCg5NikpOworCisJLyogNy4gQ29uZmlndXJlIGZsb3cgY29udHJvbCAqLworCWJ1Zls4XSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfRkxPV0NUUkxfUkVHKTsKKwkvKiBFbmFibGUgYXV0byBDVFMgYW5kIGF1dG8gUlRTIGZsb3cgY29udHJvbCAqLworCWJ1Zls4XSB8PSAoTUFYMzEwN19GTE9XQ1RSTF9BVVRPQ1RTX0JJVCB8IE1BWDMxMDdfRkxPV0NUUkxfQVVUT1JUU19CSVQpOworCisJLyogOC4gQ29uZmlndXJlIFJYIHRpbWVvdXQgcmVnaXN0ZXIgKi8KKwlidWZbOV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X1JYVE9fUkVHKTsKKwkvKiBUaW1lb3V0IGFmdGVyIDQ4IGNoYXJhY3RlciBpbnRlcnZhbHMgKi8KKwlidWZbOV0gfD0gMHgwMDMwOworCisJLyogOS4gQ29uZmlndXJlIExTUiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisJYnVmWzEwXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfTFNSX0lSUUVOX1JFRyk7CisJLyogRW5hYmxlIFJYIHRpbWVvdXQgaW50ZXJydXB0ICovCisJYnVmWzEwXSB8PSBNQVgzMTA3X0xTUl9SWFRPX0JJVDsKKworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCBOVUxMLCAyMikpCisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIGZvciBpbml0IGZhaWxlZFxuIik7CisKKwkvKiAxMC4gQ2xlYXIgSVJRIHN0YXR1cyByZWdpc3RlciBieSByZWFkaW5nIGl0ICovCisJYnVmWzBdID0gTUFYMzEwN19JUlFTVFNfUkVHOworCisJLyogMTEuIENvbmZpZ3VyZSBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyICovCisJLyogRW5hYmxlIExTUiBpbnRlcnJ1cHQgKi8KKwlzLT5pcnFlbl9yZWcgPSBNQVgzMTA3X0lSUV9MU1JfQklUOworCS8qIEVuYWJsZSBSWCBGSUZPIGludGVycnVwdCAqLworCXMtPmlycWVuX3JlZyB8PSBNQVgzMTA3X0lSUV9SWEZJRk9fQklUOworCWJ1ZlsxXSA9IChNQVgzMTA3X1dSSVRFX0JJVCB8IE1BWDMxMDdfSVJRRU5fUkVHKQorCQl8IHMtPmlycWVuX3JlZzsKKworCS8qIDEyLiBDbGVhciBGSUZPIHJlc2V0IHRoYXQgd2FzIHNldCBpbiBzdGVwIDYgKi8KKwlidWZbMl0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X01PREUyX1JFRyk7CisJaWYgKHMtPmxvb3BiYWNrKSB7CisJCS8qIEtlZXAgbG9vcGJhY2sgZW5hYmxlZCAqLworCQlidWZbMl0gfD0gTUFYMzEwN19NT0RFMl9MT09QQkFDS19CSVQ7CisJfQorCisJLyogUGVyZm9ybSBTUEkgdHJhbnNmZXIgKi8KKwlpZiAobWF4MzEwN19ydyhzLCAodTggKilidWYsICh1OCAqKWJ1ZiwgNikpCisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIGZvciBpbml0IGZhaWxlZFxuIik7CisKK30KKworLyogSVJRIGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXgzMTA3X2lycShpbnQgaXJxbm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzID0gZGV2X2lkOworCisJaWYgKGlycW5vICE9IHMtPnNwaS0+aXJxKSB7CisJCS8qIFVuZXhwZWN0ZWQgSVJRICovCisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBJbmRpY2F0ZSBpcnEgKi8KKwlzLT5oYW5kbGVfaXJxID0gMTsKKworCS8qIFRyaWdnZXIgd29yayB0aHJlYWQgKi8KKwltYXgzMTA3X2Rvd29yayhzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogSFcgc3VzcGVuc2lvbiBmdW5jdGlvbgorICoKKyAqIEN1cnJlbnRseSBhdXRvc2xlZXAgaXMgdXNlZCB0byBkZWNyZWFzZSBjdXJyZW50IGNvbnN1bXB0aW9uLCBhbHRlcm5hdGl2ZQorICogYXBwcm9hY2ggd291bGQgYmUgdG8gc2V0IHRoZSBjaGlwIHRvIHJlc2V0IG1vZGUgaWYgVUFSVCBpcyBub3QgYmVpbmcKKyAqIHVzZWQgYnV0IHRoYXQgd291bGQgbWVzcyB0aGUgR1BJT3MKKyAqCisgKi8KK3ZvaWQgbWF4MzEwN19od19zdXNwKHN0cnVjdCBtYXgzMTA3X3BvcnQgKnMsIGludCBzdXNwZW5kKQoreworCXByX2RlYnVnKCJlbnRlciwgc3VzcGVuZCAlZFxuIiwgc3VzcGVuZCk7CisKKwlpZiAoc3VzcGVuZCkgeworCQkvKiBTdXNwZW5kIHJlcXVlc3RlZCwKKwkJICogZW5hYmxlIGF1dG9zbGVlcCB0byBkZWNyZWFzZSBjdXJyZW50IGNvbnN1bXB0aW9uCisJCSAqLworCQlzLT5zdXNwZW5kZWQgPSAxOworCQltYXgzMTA3X3NldF9zbGVlcChzLCBNQVgzMTA3X0VOQUJMRV9BVVRPU0xFRVApOworCX0gZWxzZSB7CisJCS8qIFJlc3VtZSByZXF1ZXN0ZWQsCisJCSAqIGRpc2FibGUgYXV0b3NsZWVwCisJCSAqLworCQlzLT5zdXNwZW5kZWQgPSAwOworCQltYXgzMTA3X3NldF9zbGVlcChzLCBNQVgzMTA3X0RJU0FCTEVfQVVUT1NMRUVQKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXgzMTA3X2h3X3N1c3ApOworCisvKiBNb2RlbSBzdGF0dXMgSVJRIGVuYWJsaW5nICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X2VuYWJsZV9tcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIE1vZGVtIHN0YXR1cyBub3Qgc3VwcG9ydGVkICovCit9CisKKy8qIERhdGEgc2VuZCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgbWF4MzEwN19zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisKKwkvKiBUcmlnZ2VyIHdvcmsgdGhyZWFkIGZvciBzZW5kaW5nIGRhdGEgKi8KKwltYXgzMTA3X2Rvd29yayhzKTsKK30KKworLyogRnVuY3Rpb24gZm9yIGNoZWNraW5nIHRoYXQgdGhlcmUgaXMgbm8gcGVuZGluZyB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4MzEwN190eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisKKwlwcl9kZWJ1ZygicmV0dXJuaW5nICVkXG4iLAorCQkgIChzLT50eF9maWZvX2VtcHR5ICYmIHVhcnRfY2lyY19lbXB0eSgmcy0+cG9ydC5zdGF0ZS0+eG1pdCkpKTsKKwlyZXR1cm4gcy0+dHhfZmlmb19lbXB0eSAmJiB1YXJ0X2NpcmNfZW1wdHkoJnMtPnBvcnQuc3RhdGUtPnhtaXQpOworfQorCisvKiBGdW5jdGlvbiBmb3Igc3RvcHBpbmcgUlggKi8KK3N0YXRpYyB2b2lkIG1heDMxMDdfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFNldCBSWCBkaXNhYmxlZCBpbiBNT0RFIDEgcmVnaXN0ZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJcy0+bW9kZTFfcmVnIHw9IE1BWDMxMDdfTU9ERTFfUlhESVNfQklUOworCXMtPm1vZGUxX2NvbW1pdCA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJLyogU2V0IFJYIGRpc2FibGVkICovCisJcy0+cnhfZW5hYmxlZCA9IDA7CisJLyogVHJpZ2dlciB3b3JrIHRocmVhZCBmb3IgZG9pbmcgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGNoYW5nZSAqLworCW1heDMxMDdfZG93b3JrKHMpOworfQorCisvKiBGdW5jdGlvbiBmb3IgcmV0dXJuaW5nIGNvbnRyb2wgcGluIHN0YXRlcyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtYXgzMTA3X2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIERDRCBhbmQgRFNSIGFyZSBub3Qgd2lyZWQgYW5kIENUUy9SVFMgaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5CisJICogc28ganVzdCBpbmRpY2F0ZSBEU1IgYW5kIENBUiBhc3NlcnRlZAorCSAqLworCXJldHVybiBUSU9DTV9EU1IgfCBUSU9DTV9DQVI7Cit9CisKKy8qIEZ1bmN0aW9uIGZvciBzZXR0aW5nIGNvbnRyb2wgcGluIHN0YXRlcyAqLworc3RhdGljIHZvaWQgbWF4MzEwN19zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQoreworCS8qIERDRCBhbmQgRFNSIGFyZSBub3Qgd2lyZWQgYW5kIENUUy9SVFMgaXMgaGFkbmxlZCBhdXRvbWF0aWNhbGx5CisJICogc28gZG8gbm90aGluZworCSAqLworfQorCisvKiBGdW5jdGlvbiBmb3IgY29uZmlndXJpbmcgVUFSVCBwYXJhbWV0ZXJzICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgYmF1ZDsKKwl1MTYgbmV3X2xjciA9IDA7CisJdTMyIG5ld19icmcgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXBvcnQtPnN0YXRlKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCS8qIEdldCBuZXcgTENSIHJlZ2lzdGVyIHZhbHVlcyAqLworCS8qIFdvcmQgc2l6ZSAqLworCWlmICgodGVybWlvcy0+Y19jZmxhZyAmIENTSVpFKSA9PSBDUzcpCisJCW5ld19sY3IgfD0gTUFYMzEwN19MQ1JfV09SRF9MRU5fNzsKKwllbHNlCisJCW5ld19sY3IgfD0gTUFYMzEwN19MQ1JfV09SRF9MRU5fODsKKworCS8qIFBhcml0eSAqLworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKSB7CisJCW5ld19sY3IgfD0gTUFYMzEwN19MQ1JfUEFSSVRZX0JJVDsKKwkJaWYgKCEodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkpCisJCQluZXdfbGNyIHw9IE1BWDMxMDdfTENSX0VWRU5QQVJJVFlfQklUOworCX0KKworCS8qIFN0b3AgYml0cyAqLworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKSB7CisJCS8qIDIgc3RvcCBiaXRzICovCisJCW5ld19sY3IgfD0gTUFYMzEwN19MQ1JfU1RPUExFTl9CSVQ7CisJfQorCisJLyogTWFzayB0ZXJtaW9zIGNhcGFiaWxpdGllcyB3ZSBkb24ndCBzdXBwb3J0ICovCisJdGVybWlvcy0+Y19jZmxhZyAmPSB+Q01TUEFSOworCisJLyogU2V0IHN0YXR1cyBpZ25vcmUgbWFzayAqLworCXMtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcy0+cG9ydC5pZ25vcmVfc3RhdHVzX21hc2sgfD0gTUFYMzEwN19BTExfRVJST1JTOworCisJLyogU2V0IGxvdyBsYXRlbmN5IHRvIGltbWVkaWF0ZWx5IGhhbmRsZSBwdXNoZWQgZGF0YSAqLworCXMtPnBvcnQuc3RhdGUtPnBvcnQudHR5LT5sb3dfbGF0ZW5jeSA9IDE7CisKKwkvKiBHZXQgbmV3IGJhdWQgcmF0ZSBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmRhdGFfbG9jaywgZmxhZ3MpOworCW5ld19icmcgPSBnZXRfbmV3X2JyZyhiYXVkLCBzKTsKKwkvKiBpZiBjYW4ndCBmaW5kIHRoZSBjb3JyZW50IGNvbmZpZywgdXNlIHByZXZpb3VzICovCisJaWYgKCFuZXdfYnJnKSB7CisJCWJhdWQgPSBzLT5iYXVkOworCQluZXdfYnJnID0gcy0+YnJnX2NmZzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZGF0YV9sb2NrLCBmbGFncyk7CisJdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZSh0ZXJtaW9zLCBiYXVkLCBiYXVkKTsKKwlzLT5iYXVkID0gYmF1ZDsKKworCS8qIFVwZGF0ZSB0aW1lb3V0IGFjY29yZGluZyB0byBuZXcgYmF1ZCByYXRlICovCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5kYXRhX2xvY2ssIGZsYWdzKTsKKwlpZiAocy0+bGNyX3JlZyAhPSBuZXdfbGNyKSB7CisJCXMtPmxjcl9yZWcgPSBuZXdfbGNyOworCQlzLT5sY3JfY29tbWl0ID0gMTsKKwl9CisJaWYgKHMtPmJyZ19jZmcgIT0gbmV3X2JyZykgeworCQlzLT5icmdfY2ZnID0gbmV3X2JyZzsKKwkJcy0+YnJnX2NvbW1pdCA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRhdGFfbG9jaywgZmxhZ3MpOworCisJLyogVHJpZ2dlciB3b3JrIHRocmVhZCBmb3IgZG9pbmcgdGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGNoYW5nZSAqLworCW1heDMxMDdfZG93b3JrKHMpOworfQorCisvKiBQb3J0IHNodXRkb3duIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBwb3J0KTsKKworCWlmIChzLT5zdXNwZW5kZWQgJiYgcy0+cGRhdGEtPmh3X3N1c3BlbmQpCisJCXMtPnBkYXRhLT5od19zdXNwZW5kKHMsIDApOworCisJLyogRnJlZSB0aGUgaW50ZXJydXB0ICovCisJZnJlZV9pcnEocy0+c3BpLT5pcnEsIHMpOworCisJaWYgKHMtPndvcmtxdWV1ZSkgeworCQkvKiBGbHVzaCBhbmQgZGVzdHJveSB3b3JrIHF1ZXVlICovCisJCWZsdXNoX3dvcmtxdWV1ZShzLT53b3JrcXVldWUpOworCQlkZXN0cm95X3dvcmtxdWV1ZShzLT53b3JrcXVldWUpOworCQlzLT53b3JrcXVldWUgPSBOVUxMOworCX0KKworCS8qIFN1c3BlbmQgSFcgKi8KKwlpZiAocy0+cGRhdGEtPmh3X3N1c3BlbmQpCisJCXMtPnBkYXRhLT5od19zdXNwZW5kKHMsIDEpOworfQorCisvKiBQb3J0IHN0YXJ0dXAgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgbWF4MzEwN19zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBwb3J0KTsKKworCS8qIEluaXRpYWxpemUgd29yayBxdWV1ZSAqLworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWF4MzEwNyIpOworCWlmICghcy0+d29ya3F1ZXVlKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiV29ya3F1ZXVlIGNyZWF0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCUlOSVRfV09SSygmcy0+d29yaywgbWF4MzEwN193b3JrKTsKKworCS8qIFNldHVwIElSUSAqLworCWlmIChyZXF1ZXN0X2lycShzLT5zcGktPmlycSwgbWF4MzEwN19pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJIm1heDMxMDciLCBzKSkgeworCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIklSUSByZWd1ZXN0IGZhaWxlZFxuIik7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHMtPndvcmtxdWV1ZSk7CisJCXMtPndvcmtxdWV1ZSA9IE5VTEw7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogUmVzdW1lIEhXICovCisJaWYgKHMtPnBkYXRhLT5od19zdXNwZW5kKQorCQlzLT5wZGF0YS0+aHdfc3VzcGVuZChzLCAwKTsKKworCS8qIEluaXQgcmVnaXN0ZXJzICovCisJbWF4MzEwN19yZWdpc3Rlcl9pbml0KHMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFBvcnQgdHlwZSBmdW5jdGlvbiAqLworc3RhdGljIGNvbnN0IGNoYXIgKm1heDMxMDdfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisJcmV0dXJuIHMtPnNwaS0+bW9kYWxpYXM7Cit9CisKKy8qIFBvcnQgcmVsZWFzZSBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgbWF4MzEwN19yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwkvKiBEbyBub3RoaW5nICovCit9CisKKy8qIFBvcnQgcmVxdWVzdCBmdW5jdGlvbiAqLworc3RhdGljIGludCBtYXgzMTA3X3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIERvIG5vdGhpbmcgKi8KKwlyZXR1cm4gMDsKK30KKworLyogUG9ydCBjb25maWcgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIG1heDMxMDdfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1heDMxMDdfcG9ydCwgcG9ydCk7CisJcy0+cG9ydC50eXBlID0gUE9SVF9NQVgzMTA3OworfQorCisvKiBQb3J0IHZlcmlmeSBmdW5jdGlvbiAqLworc3RhdGljIGludCBtYXgzMTA3X3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpZiAoc2VyLT50eXBlID09IFBPUlRfVU5LTk9XTiB8fCBzZXItPnR5cGUgPT0gUE9SVF9NQVgzMTA3KQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtRUlOVkFMOworfQorCisvKiBQb3J0IHN0b3AgVFggZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIG1heDMxMDdfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCS8qIERvIG5vdGhpbmcgKi8KK30KKworLyogUG9ydCBicmVhayBjb250cm9sIGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBtYXgzMTA3X2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBicmVhayBjb250cm9sLCBkbyBub3RoaW5nICovCit9CisKKworLyogUG9ydCBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgbWF4MzEwN19vcHMgPSB7CisJLnR4X2VtcHR5ICAgICAgID0gbWF4MzEwN190eF9lbXB0eSwKKwkuc2V0X21jdHJsICAgICAgPSBtYXgzMTA3X3NldF9tY3RybCwKKwkuZ2V0X21jdHJsICAgICAgPSBtYXgzMTA3X2dldF9tY3RybCwKKwkuc3RvcF90eCAgICAgICAgPSBtYXgzMTA3X3N0b3BfdHgsCisJLnN0YXJ0X3R4ICAgICAgID0gbWF4MzEwN19zdGFydF90eCwKKwkuc3RvcF9yeCAgICAgICAgPSBtYXgzMTA3X3N0b3BfcngsCisJLmVuYWJsZV9tcyAgICAgID0gbWF4MzEwN19lbmFibGVfbXMsCisJLmJyZWFrX2N0bCAgICAgID0gbWF4MzEwN19icmVha19jdGwsCisJLnN0YXJ0dXAgICAgICAgID0gbWF4MzEwN19zdGFydHVwLAorCS5zaHV0ZG93biAgICAgICA9IG1heDMxMDdfc2h1dGRvd24sCisJLnNldF90ZXJtaW9zICAgID0gbWF4MzEwN19zZXRfdGVybWlvcywKKwkudHlwZSAgICAgICAgICAgPSBtYXgzMTA3X3R5cGUsCisJLnJlbGVhc2VfcG9ydCAgID0gbWF4MzEwN19yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydCAgID0gbWF4MzEwN19yZXF1ZXN0X3BvcnQsCisJLmNvbmZpZ19wb3J0ICAgID0gbWF4MzEwN19jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQgICAgPSBtYXgzMTA3X3ZlcmlmeV9wb3J0LAorfTsKKworLyogVUFSVCBkcml2ZXIgZGF0YSAqLworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBtYXgzMTA3X3VhcnRfZHJpdmVyID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZSAgICA9ICJ0dHlNQVgiLAorCS5kZXZfbmFtZSAgICAgICA9ICJ0dHlNQVgiLAorCS5uciAgICAgICAgICAgICA9IDEsCit9OworCitzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkID0gMDsKKworCisKKy8qICdHZW5lcmljJyBwbGF0Zm9ybSBkYXRhICovCitzdGF0aWMgc3RydWN0IG1heDMxMDdfcGxhdCBnZW5lcmljX3BsYXRfZGF0YSA9IHsKKwkubG9vcGJhY2sgICAgICAgICAgICAgICA9IDAsCisJLmV4dF9jbGsgICAgICAgICAgICAgICAgPSAxLAorCS5od19zdXNwZW5kCQk9IG1heDMxMDdfaHdfc3VzcCwKKwkucG9sbGVkX21vZGUgICAgICAgICAgICA9IDAsCisJLnBvbGxfdGltZSAgICAgICAgICAgICAgPSAwLAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKgltYXgzMTA3X3Byb2JlCQktCVNQSSBidXMgcHJvYmUgZW50cnkgcG9pbnQKKyAqCUBzcGk6IHRoZSBzcGkgZGV2aWNlCisgKgorICoJU1BJIHdhbnRzIHVzIHRvIHByb2JlIHRoaXMgZGV2aWNlIGFuZCBpZiBhcHByb3ByaWF0ZSBjbGFpbSBpdC4KKyAqCVBlcmZvcm0gYW55IHBsYXRmb3JtIHNwZWNpZmljIHJlcXVpcmVtZW50cyBhbmQgdGhlbiBpbml0aWFsaXNlCisgKgl0aGUgZGV2aWNlLgorICovCisKK2ludCBtYXgzMTA3X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBtYXgzMTA3X3BsYXQgKnBkYXRhKQoreworCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnM7CisJdTE2IGJ1ZlsyXTsJLyogQnVmZmVyIGZvciBTUEkgdHJhbnNmZXJzICovCisJaW50IHJldHZhbDsKKworCXByX2luZm8oImVudGVyIG1heDMxMDcgcHJvYmVcbiIpOworCisJLyogQWxsb2NhdGUgcG9ydCBzdHJ1Y3R1cmUgKi8KKwlzID0ga3phbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpIHsKKwkJcHJfZXJyKCJBbGxvY2F0aW5nIHBvcnQgc3RydWN0dXJlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXMtPnBkYXRhID0gcGRhdGE7CisKKwkvKiBTUEkgUnggYnVmZmVyCisJICogKzIgZm9yIFJYIEZJRk8gaW50ZXJydXB0CisJICogZGlzYWJsaW5nIGFuZCBSWCBsZXZlbCBxdWVyeQorCSAqLworCXMtPnJ4YnVmID0ga3phbGxvYyhzaXplb2YodTE2KSAqIChNQVgzMTA3X1JYX0ZJRk9fU0laRSsyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzLT5yeGJ1ZikgeworCQlwcl9lcnIoIkFsbG9jYXRpbmcgUlggYnVmZmVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzLT5yeHN0ciA9IGt6YWxsb2Moc2l6ZW9mKHU4KSAqIE1BWDMxMDdfUlhfRklGT19TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMtPnJ4c3RyKSB7CisJCXByX2VycigiQWxsb2NhdGluZyBSWCBidWZmZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCS8qIFNQSSBUeCBidWZmZXIKKwkgKiBTUEkgdHJhbnNmZXIgYnVmZmVyCisJICogKzMgZm9yIFRYIEZJRk8gZW1wdHkKKwkgKiBpbnRlcnJ1cHQgZGlzYWJsaW5nIGFuZAorCSAqIGVuYWJsaW5nIGFuZCBUWCBlbmFibGluZworCSAqLworCXMtPnR4YnVmID0ga3phbGxvYyhzaXplb2YodTE2KSAqIE1BWDMxMDdfVFhfRklGT19TSVpFICsgMywgR0ZQX0tFUk5FTCk7CisJaWYgKCFzLT50eGJ1ZikgeworCQlwcl9lcnIoIkFsbG9jYXRpbmcgVFggYnVmZmVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkvKiBJbml0aWFsaXplIHNoYXJlZCBkYXRhIGxvY2sgKi8KKwlzcGluX2xvY2tfaW5pdCgmcy0+ZGF0YV9sb2NrKTsKKworCS8qIFNQSSBpbnRpYWxpemF0aW9ucyAqLworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHMpOworCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzA7CisJc3BpLT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OworCXMtPmV4dF9jbGsgPSBwZGF0YS0+ZXh0X2NsazsKKwlzLT5sb29wYmFjayA9IHBkYXRhLT5sb29wYmFjazsKKwlzcGlfc2V0dXAoc3BpKTsKKwlzLT5zcGkgPSBzcGk7CisKKwkvKiBDaGVjayBSRVYgSUQgdG8gZW5zdXJlIHdlIGFyZSB0YWxraW5nIHRvIHdoYXQgd2UgZXhwZWN0ICovCisJYnVmWzBdID0gTUFYMzEwN19SRVZJRF9SRUc7CisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCAodTggKilidWYsIDIpKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiU1BJIHRyYW5zZmVyIGZvciBSRVZJRCByZWFkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAoKGJ1ZlswXSAmIE1BWDMxMDdfU1BJX1JYX0RBVEFfTUFTSykgIT0gTUFYMzEwN19SRVZJRDEgJiYKKwkJKGJ1ZlswXSAmIE1BWDMxMDdfU1BJX1JYX0RBVEFfTUFTSykgIT0gTUFYMzEwN19SRVZJRDIpIHsKKwkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJSRVZJRCAleCBkb2VzIG5vdCBtYXRjaFxuIiwKKwkJCQkoYnVmWzBdICYgTUFYMzEwN19TUElfUlhfREFUQV9NQVNLKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlidWZbMF0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0lSUUVOX1JFRyB8IDB4MDAwMCk7CisJYnVmWzBdIHw9IDB4MDAwMDsKKworCS8qIENvbmZpZ3VyZSBjbG9jayBzb3VyY2UgKi8KKwlidWZbMV0gPSAoTUFYMzEwN19XUklURV9CSVQgfCBNQVgzMTA3X0NMS1NSQ19SRUcpOworCWlmIChzLT5leHRfY2xrKSB7CisJCS8qIEV4dGVybmFsIGNsb2NrICovCisJCWJ1ZlsxXSB8PSBNQVgzMTA3X0NMS1NSQ19FWFRDTEtfQklUOworCX0KKworCS8qIFBMTCBieXBhc3MgT04gKi8KKwlidWZbMV0gfD0gTUFYMzEwN19DTEtTUkNfUExMQllQX0JJVDsKKworCS8qIFBlcmZvcm0gU1BJIHRyYW5zZmVyICovCisJaWYgKG1heDMxMDdfcncocywgKHU4ICopYnVmLCBOVUxMLCA0KSkgeworCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIlNQSSB0cmFuc2ZlciBmb3IgaW5pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBSZWdpc3RlciBVQVJUIGRyaXZlciAqLworCWlmICghZHJpdmVyX3JlZ2lzdGVyZWQpIHsKKwkJcmV0dmFsID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJm1heDMxMDdfdWFydF9kcml2ZXIpOworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKCZzLT5zcGktPmRldiwgIlJlZ2lzdGVyaW5nIFVBUlQgZHJpdmVyIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIFVBUlQgcG9ydCBkYXRhICovCisJcy0+cG9ydC5maWZvc2l6ZSA9IDEyODsKKwlzLT5wb3J0Lm9wcyA9ICZtYXgzMTA3X29wczsKKwlzLT5wb3J0LmxpbmUgPSAwOworCXMtPnBvcnQuZGV2ID0gJnNwaS0+ZGV2OworCXMtPnBvcnQudWFydGNsayA9IDk2MDA7CisJcy0+cG9ydC5mbGFncyA9IFVQRl9TS0lQX1RFU1QgfCBVUEZfQk9PVF9BVVRPQ09ORjsKKwlzLT5wb3J0LmlycSA9IHMtPnNwaS0+aXJxOworCXMtPnBvcnQudHlwZSA9IFBPUlRfTUFYMzEwNzsKKworCS8qIEFkZCBVQVJUIHBvcnQgKi8KKwlyZXR2YWwgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbWF4MzEwN191YXJ0X2RyaXZlciwgJnMtPnBvcnQpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJnMtPnNwaS0+ZGV2LCAiQWRkaW5nIFVBUlQgcG9ydCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmIChwZGF0YS0+Y29uZmlndXJlKSB7CisJCXJldHZhbCA9IHBkYXRhLT5jb25maWd1cmUocyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwkvKiBHbyB0byBzdXNwZW5kIG1vZGUgKi8KKwlpZiAocGRhdGEtPmh3X3N1c3BlbmQpCisJCXBkYXRhLT5od19zdXNwZW5kKHMsIDEpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXgzMTA3X3Byb2JlKTsKKworLyogRHJpdmVyIHJlbW92ZSBmdW5jdGlvbiAqLworaW50IG1heDMxMDdfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJcHJfaW5mbygiZW50ZXIgbWF4MzEwNyByZW1vdmVcbiIpOworCisJLyogUmVtb3ZlIHBvcnQgKi8KKwlpZiAodWFydF9yZW1vdmVfb25lX3BvcnQoJm1heDMxMDdfdWFydF9kcml2ZXIsICZzLT5wb3J0KSkKKwkJZGV2X3dhcm4oJnMtPnNwaS0+ZGV2LCAiUmVtb3ZpbmcgVUFSVCBwb3J0IGZhaWxlZFxuIik7CisKKworCS8qIEZyZWUgVHhSeCBidWZmZXIgKi8KKwlrZnJlZShzLT5yeGJ1Zik7CisJa2ZyZWUocy0+cnhzdHIpOworCWtmcmVlKHMtPnR4YnVmKTsKKworCS8qIEZyZWUgcG9ydCBzdHJ1Y3R1cmUgKi8KKwlrZnJlZShzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWF4MzEwN19yZW1vdmUpOworCisvKiBEcml2ZXIgc3VzcGVuZCBmdW5jdGlvbiAqLworaW50IG1heDMxMDdfc3VzcGVuZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisjaWZkZWYgQ09ORklHX1BNCisJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJcHJfZGVidWcoImVudGVyIHN1c3BlbmRcbiIpOworCisJLyogU3VzcGVuZCBVQVJUIHBvcnQgKi8KKwl1YXJ0X3N1c3BlbmRfcG9ydCgmbWF4MzEwN191YXJ0X2RyaXZlciwgJnMtPnBvcnQpOworCisJLyogR28gdG8gc3VzcGVuZCBtb2RlICovCisJaWYgKHMtPnBkYXRhLT5od19zdXNwZW5kKQorCQlzLT5wZGF0YS0+aHdfc3VzcGVuZChzLCAxKTsKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1heDMxMDdfc3VzcGVuZCk7CisKKy8qIERyaXZlciByZXN1bWUgZnVuY3Rpb24gKi8KK2ludCBtYXgzMTA3X3Jlc3VtZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworI2lmZGVmIENPTkZJR19QTQorCXN0cnVjdCBtYXgzMTA3X3BvcnQgKnMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCXByX2RlYnVnKCJlbnRlciByZXN1bWVcbiIpOworCisJLyogUmVzdW1lIGZyb20gc3VzcGVuZCAqLworCWlmIChzLT5wZGF0YS0+aHdfc3VzcGVuZCkKKwkJcy0+cGRhdGEtPmh3X3N1c3BlbmQocywgMCk7CisKKwkvKiBSZXN1bWUgVUFSVCBwb3J0ICovCisJdWFydF9yZXN1bWVfcG9ydCgmbWF4MzEwN191YXJ0X2RyaXZlciwgJnMtPnBvcnQpOworI2VuZGlmCS8qIENPTkZJR19QTSAqLworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobWF4MzEwN19yZXN1bWUpOworCitzdGF0aWMgaW50IG1heDMxMDdfcHJvYmVfZ2VuZXJpYyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiBtYXgzMTA3X3Byb2JlKHNwaSwgJmdlbmVyaWNfcGxhdF9kYXRhKTsKK30KKworLyogU3BpIGRyaXZlciBkYXRhICovCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbWF4MzEwN19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gIm1heDMxMDciLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtYXgzMTA3X3Byb2JlX2dlbmVyaWMsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXgzMTA3X3JlbW92ZSksCisJLnN1c3BlbmQJPSBtYXgzMTA3X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBtYXgzMTA3X3Jlc3VtZSwKK307CisKKy8qIERyaXZlciBpbml0IGZ1bmN0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBtYXgzMTA3X2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCJlbnRlciBtYXgzMTA3IGluaXRcbiIpOworCXJldHVybiBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZtYXgzMTA3X2RyaXZlcik7Cit9CisKKy8qIERyaXZlciBleGl0IGZ1bmN0aW9uICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4MzEwN19leGl0KHZvaWQpCit7CisJcHJfaW5mbygiZW50ZXIgbWF4MzEwNyBleGl0XG4iKTsKKwkvKiBVbnJlZ2lzdGVyIFVBUlQgZHJpdmVyICovCisJaWYgKGRyaXZlcl9yZWdpc3RlcmVkKQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtYXgzMTA3X3VhcnRfZHJpdmVyKTsKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJm1heDMxMDdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWF4MzEwN19pbml0KTsKK21vZHVsZV9leGl0KG1heDMxMDdfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTUFYMzEwNyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFhdmFtb2JpbGUiKTsKK01PRFVMRV9BTElBUygibWF4MzEwNy1zcGkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuaCBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWI2MzIzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL21heDMxMDcuaApAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqIG1heDMxMDcuaCAtIHNwaSB1YXJ0IHByb3RvY29sIGRyaXZlciBoZWFkZXIgZm9yIE1heGltIDMxMDcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEFhdmFtb2JpbGUgMjAwOQorICogQmFzZWQgb24gc2VyaWFsX21heDMxMDAuaCBieSBDaHJpc3RpYW4gUGVsbGVncmluCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9NQVgzMTA3X0gKKyNkZWZpbmUgX01BWDMxMDdfSAorCisvKiBTZXJpYWwgZXJyb3Igc3RhdHVzIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BWDMxMDdfUEFSSVRZX0VSUk9SCTEKKyNkZWZpbmUgTUFYMzEwN19GUkFNRV9FUlJPUgkyCisjZGVmaW5lIE1BWDMxMDdfT1ZFUlJVTl9FUlJPUgk0CisjZGVmaW5lIE1BWDMxMDdfQUxMX0VSUk9SUwkoTUFYMzEwN19QQVJJVFlfRVJST1IgfCBcCisJCQkJIE1BWDMxMDdfRlJBTUVfRVJST1IgfCBcCisJCQkJIE1BWDMxMDdfT1ZFUlJVTl9FUlJPUikKKworLyogR1BJTyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9fQkFTRQk4OAorI2RlZmluZSBNQVgzMTA3X0dQSU9fQ09VTlQJNAorCisKKy8qIEdQSU8gY29ubmVjdGVkIHRvIGNoaXAncyByZXNldCBwaW4gKi8KKyNkZWZpbmUgTUFYMzEwN19SRVNFVF9HUElPCTg3CisKKworLyogQ2hpcCByZXNldCBkZWxheSAqLworI2RlZmluZSBNQVgzMTA3X1JFU0VUX0RFTEFZCTEwCisKKy8qIENoaXAgd2FrZXVwIGRlbGF5ICovCisjZGVmaW5lIE1BWDMxMDdfV0FLRVVQX0RFTEFZCTUwCisKKworLyogU2xlZXAgbW9kZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNQVgzMTA3X0RJU0FCTEVfRk9SQ0VEX1NMRUVQCTAKKyNkZWZpbmUgTUFYMzEwN19FTkFCTEVfRk9SQ0VEX1NMRUVQCTEKKyNkZWZpbmUgTUFYMzEwN19ESVNBQkxFX0FVVE9TTEVFUAkyCisjZGVmaW5lIE1BWDMxMDdfRU5BQkxFX0FVVE9TTEVFUAkzCisKKworLyogRGVmaW5pdGlvbnMgZm9yIHJlZ2lzdGVyIGFjY2VzcyB3aXRoIFNQSSB0cmFuc2ZlcnMKKyAqCisgKiBTUEkgdHJhbnNmZXIgZm9ybWF0OgorICoKKyAqIE1hc3RlciB0byBzbGF2ZSBiaXRzIHh6enp6enp6eXl5eXl5eXkKKyAqIFNsYXZlIHRvIG1hc3RlciBiaXRzIGFhYWFhYWFhYmJiYmJiYmIKKyAqCisgKiB3aGVyZToKKyAqIHggPSAwIGZvciByZWFkcywgMSBmb3Igd3JpdGVzCisgKiB6ID0gcmVnaXN0ZXIgYWRkcmVzcworICogeSA9IG5ldyByZWdpc3RlciB2YWx1ZSBpZiB3cml0ZSwgMCBpZiByZWFkCisgKiBhID0gdW5zcGVjaWZpZWQKKyAqIGIgPSByZWdpc3RlciB2YWx1ZSBpZiByZWFkLCB1bnNwZWNpZmllZCBpZiB3cml0ZQorICovCisKKy8qIFNQSSBzcGVlZCAqLworI2RlZmluZSBNQVgzMTA3X1NQSV9TUEVFRAkoMzEyNTAwMCAqIDIpCisKKy8qIFdyaXRlIGJpdCAqLworI2RlZmluZSBNQVgzMTA3X1dSSVRFX0JJVAkoMSA8PCAxNSkKKworLyogU1BJIFRYIGRhdGEgbWFzayAqLworI2RlZmluZSBNQVgzMTA3X1NQSV9SWF9EQVRBX01BU0sJKDB4MDBmZikKKworLyogU1BJIFJYIGRhdGEgbWFzayAqLworI2RlZmluZSBNQVgzMTA3X1NQSV9UWF9EQVRBX01BU0sJKDB4MDBmZikKKworLyogUmVnaXN0ZXIgYWNjZXNzIG1hc2tzICovCisjZGVmaW5lIE1BWDMxMDdfUkhSX1JFRwkJCSgweDAwMDApIC8qIFJYIEZJRk8gKi8KKyNkZWZpbmUgTUFYMzEwN19USFJfUkVHCQkJKDB4MDAwMCkgLyogVFggRklGTyAqLworI2RlZmluZSBNQVgzMTA3X0lSUUVOX1JFRwkJKDB4MDEwMCkgLyogSVJRIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0lSUVNUU19SRUcJCSgweDAyMDApIC8qIElSUSBzdGF0dXMgKi8KKyNkZWZpbmUgTUFYMzEwN19MU1JfSVJRRU5fUkVHCQkoMHgwMzAwKSAvKiBMU1IgSVJRIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0xTUl9JUlFTVFNfUkVHCQkoMHgwNDAwKSAvKiBMU1IgSVJRIHN0YXR1cyAqLworI2RlZmluZSBNQVgzMTA3X1NQQ0hSX0lSUUVOX1JFRwkJKDB4MDUwMCkgLyogU3BlY2lhbCBjaGFyIElSUSBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19TUENIUl9JUlFTVFNfUkVHCSgweDA2MDApIC8qIFNwZWNpYWwgY2hhciBJUlEgc3RhdHVzICovCisjZGVmaW5lIE1BWDMxMDdfU1RTX0lSUUVOX1JFRwkJKDB4MDcwMCkgLyogU3RhdHVzIElSUSBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19TVFNfSVJRU1RTX1JFRwkJKDB4MDgwMCkgLyogU3RhdHVzIElSUSBzdGF0dXMgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMV9SRUcJCSgweDA5MDApIC8qIE1PREUxICovCisjZGVmaW5lIE1BWDMxMDdfTU9ERTJfUkVHCQkoMHgwYTAwKSAvKiBNT0RFMiAqLworI2RlZmluZSBNQVgzMTA3X0xDUl9SRUcJCQkoMHgwYjAwKSAvKiBMQ1IgKi8KKyNkZWZpbmUgTUFYMzEwN19SWFRPX1JFRwkJKDB4MGMwMCkgLyogUlggdGltZW91dCAqLworI2RlZmluZSBNQVgzMTA3X0hEUElYREVMQVlfUkVHCQkoMHgwZDAwKSAvKiBBdXRvIHRyYW5zY2VpdmVyIGRlbGF5cyAqLworI2RlZmluZSBNQVgzMTA3X0lSREFfUkVHCQkoMHgwZTAwKSAvKiBJUkRBIHNldHRpbmdzICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0xWTF9SRUcJCSgweDBmMDApIC8qIEZsb3cgY29udHJvbCBsZXZlbHMgKi8KKyNkZWZpbmUgTUFYMzEwN19GSUZPVFJJR0xWTF9SRUcJCSgweDEwMDApIC8qIEZJRk8gSVJRIHRyaWdnZXIgbGV2ZWxzICovCisjZGVmaW5lIE1BWDMxMDdfVFhGSUZPTFZMX1JFRwkJKDB4MTEwMCkgLyogVFggRklGTyBsZXZlbCAqLworI2RlZmluZSBNQVgzMTA3X1JYRklGT0xWTF9SRUcJCSgweDEyMDApIC8qIFJYIEZJRk8gbGV2ZWwgKi8KKyNkZWZpbmUgTUFYMzEwN19GTE9XQ1RSTF9SRUcJCSgweDEzMDApIC8qIEZsb3cgY29udHJvbCAqLworI2RlZmluZSBNQVgzMTA3X1hPTjFfUkVHCQkoMHgxNDAwKSAvKiBYT04xIGNoYXJhY3RlciAqLworI2RlZmluZSBNQVgzMTA3X1hPTjJfUkVHCQkoMHgxNTAwKSAvKiBYT04yIGNoYXJhY3RlciAqLworI2RlZmluZSBNQVgzMTA3X1hPRkYxX1JFRwkJKDB4MTYwMCkgLyogWE9GRjEgY2hhcmFjdGVyICovCisjZGVmaW5lIE1BWDMxMDdfWE9GRjJfUkVHCQkoMHgxNzAwKSAvKiBYT0ZGMiBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgTUFYMzEwN19HUElPQ0ZHX1JFRwkJKDB4MTgwMCkgLyogR1BJTyBjb25maWcgKi8KKyNkZWZpbmUgTUFYMzEwN19HUElPREFUQV9SRUcJCSgweDE5MDApIC8qIEdQSU8gZGF0YSAqLworI2RlZmluZSBNQVgzMTA3X1BMTENGR19SRUcJCSgweDFhMDApIC8qIFBMTCBjb25maWcgKi8KKyNkZWZpbmUgTUFYMzEwN19CUkdDRkdfUkVHCQkoMHgxYjAwKSAvKiBCYXVkIHJhdGUgZ2VuZXJhdG9yIGNvbmYgKi8KKyNkZWZpbmUgTUFYMzEwN19CUkdESVZMU0JfUkVHCQkoMHgxYzAwKSAvKiBCYXVkIHJhdGUgZGl2aXNvciBMU0IgKi8KKyNkZWZpbmUgTUFYMzEwN19CUkdESVZNU0JfUkVHCQkoMHgxZDAwKSAvKiBCYXVkIHJhdGUgZGl2aXNvciBNU0IgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfUkVHCQkoMHgxZTAwKSAvKiBDbG9jayBzb3VyY2UgKi8KKyNkZWZpbmUgTUFYMzEwN19SRVZJRF9SRUcJCSgweDFmMDApIC8qIFJldmlzaW9uIGlkZW50aWZpY2F0aW9uICovCisKKy8qIElSUSByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIE1BWDMxMDdfSVJRX0xTUl9CSVQJKDEgPDwgMCkgLyogTFNSIGludGVycnVwdCAqLworI2RlZmluZSBNQVgzMTA3X0lSUV9TUENIUl9CSVQJKDEgPDwgMSkgLyogU3BlY2lhbCBjaGFyIGludGVycnVwdCAqLworI2RlZmluZSBNQVgzMTA3X0lSUV9TVFNfQklUCSgxIDw8IDIpIC8qIFN0YXR1cyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFYMzEwN19JUlFfUlhGSUZPX0JJVAkoMSA8PCAzKSAvKiBSWCBGSUZPIGludGVycnVwdCAqLworI2RlZmluZSBNQVgzMTA3X0lSUV9UWEZJRk9fQklUCSgxIDw8IDQpIC8qIFRYIEZJRk8gaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDMxMDdfSVJRX1RYRU1QVFlfQklUCSgxIDw8IDUpIC8qIFRYIEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDMxMDdfSVJRX1JYRU1QVFlfQklUCSgxIDw8IDYpIC8qIFJYIEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDMxMDdfSVJRX0NUU19CSVQJKDEgPDwgNykgLyogQ1RTIGludGVycnVwdCAqLworCisvKiBMU1IgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X0xTUl9SWFRPX0JJVAkoMSA8PCAwKSAvKiBSWCB0aW1lb3V0ICovCisjZGVmaW5lIE1BWDMxMDdfTFNSX1JYT1ZSX0JJVAkoMSA8PCAxKSAvKiBSWCBvdmVycnVuICovCisjZGVmaW5lIE1BWDMxMDdfTFNSX1JYUEFSX0JJVAkoMSA8PCAyKSAvKiBSWCBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgTUFYMzEwN19MU1JfRlJFUlJfQklUCSgxIDw8IDMpIC8qIEZyYW1lIGVycm9yICovCisjZGVmaW5lIE1BWDMxMDdfTFNSX1JYQlJLX0JJVAkoMSA8PCA0KSAvKiBSWCBicmVhayAqLworI2RlZmluZSBNQVgzMTA3X0xTUl9SWE5PSVNFX0JJVAkoMSA8PCA1KSAvKiBSWCBub2lzZSAqLworI2RlZmluZSBNQVgzMTA3X0xTUl9VTkRFRjZfQklUCSgxIDw8IDYpIC8qIFVuZGVmaW5lZC9ub3QgdXNlZCAqLworI2RlZmluZSBNQVgzMTA3X0xTUl9DVFNfQklUCSgxIDw8IDcpIC8qIENUUyBwaW4gc3RhdGUgKi8KKworLyogU3BlY2lhbCBjaGFyYWN0ZXIgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X1NQQ0hSX1hPTjFfQklUCQkoMSA8PCAwKSAvKiBYT04xIGNoYXJhY3RlciAqLworI2RlZmluZSBNQVgzMTA3X1NQQ0hSX1hPTjJfQklUCQkoMSA8PCAxKSAvKiBYT04yIGNoYXJhY3RlciAqLworI2RlZmluZSBNQVgzMTA3X1NQQ0hSX1hPRkYxX0JJVAkJKDEgPDwgMikgLyogWE9GRjEgY2hhcmFjdGVyICovCisjZGVmaW5lIE1BWDMxMDdfU1BDSFJfWE9GRjJfQklUCQkoMSA8PCAzKSAvKiBYT0ZGMiBjaGFyYWN0ZXIgKi8KKyNkZWZpbmUgTUFYMzEwN19TUENIUl9CUkVBS19CSVQJCSgxIDw8IDQpIC8qIFJYIGJyZWFrICovCisjZGVmaW5lIE1BWDMxMDdfU1BDSFJfTVVMVElEUk9QX0JJVAkoMSA8PCA1KSAvKiA5LWJpdCBtdWx0aWRyb3AgYWRkciBjaGFyICovCisjZGVmaW5lIE1BWDMxMDdfU1BDSFJfVU5ERUY2X0JJVAkoMSA8PCA2KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKyNkZWZpbmUgTUFYMzEwN19TUENIUl9VTkRFRjdfQklUCSgxIDw8IDcpIC8qIFVuZGVmaW5lZC9ub3QgdXNlZCAqLworCisvKiBTdGF0dXMgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X1NUU19HUElPMF9CSVQJCSgxIDw8IDApIC8qIEdQSU8gMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFYMzEwN19TVFNfR1BJTzFfQklUCQkoMSA8PCAxKSAvKiBHUElPIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BWDMxMDdfU1RTX0dQSU8yX0JJVAkJKDEgPDwgMikgLyogR1BJTyAyIGludGVycnVwdCAqLworI2RlZmluZSBNQVgzMTA3X1NUU19HUElPM19CSVQJCSgxIDw8IDMpIC8qIEdQSU8gMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFYMzEwN19TVFNfVU5ERUY0X0JJVAkJKDEgPDwgNCkgLyogVW5kZWZpbmVkL25vdCB1c2VkICovCisjZGVmaW5lIE1BWDMxMDdfU1RTX0NMS1JFQURZX0JJVAkoMSA8PCA1KSAvKiBDbG9jayByZWFkeSAqLworI2RlZmluZSBNQVgzMTA3X1NUU19TTEVFUF9CSVQJCSgxIDw8IDYpIC8qIFNsZWVwIGludGVycnVwdCAqLworI2RlZmluZSBNQVgzMTA3X1NUU19VTkRFRjdfQklUCQkoMSA8PCA3KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKworLyogTU9ERTEgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X01PREUxX1JYRElTX0JJVAkJKDEgPDwgMCkgLyogUlggZGlzYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X01PREUxX1RYRElTX0JJVAkJKDEgPDwgMSkgLyogVFggZGlzYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X01PREUxX1RYSElaX0JJVAkJKDEgPDwgMikgLyogVFggcGluIHRocmVlLXN0YXRlICovCisjZGVmaW5lIE1BWDMxMDdfTU9ERTFfUlRTSElaX0JJVAkoMSA8PCAzKSAvKiBSVFMgcGluIHRocmVlLXN0YXRlICovCisjZGVmaW5lIE1BWDMxMDdfTU9ERTFfVFJOU0NWQ1RSTF9CSVQJKDEgPDwgNCkgLyogVHJhbnNjZWl2ZXIgY3RybCBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMV9GT1JDRVNMRUVQX0JJVAkoMSA8PCA1KSAvKiBGb3JjZSBzbGVlcCBtb2RlICovCisjZGVmaW5lIE1BWDMxMDdfTU9ERTFfQVVUT1NMRUVQX0JJVAkoMSA8PCA2KSAvKiBBdXRvIHNsZWVwIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X01PREUxX0lSUVNFTF9CSVQJKDEgPDwgNykgLyogSVJRIHBpbiBlbmFibGUgKi8KKworLyogTU9ERTIgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X01PREUyX1JTVF9CSVQJCSgxIDw8IDApIC8qIENoaXAgcmVzZXQgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMl9GSUZPUlNUX0JJVAkoMSA8PCAxKSAvKiBGSUZPIHJlc2V0ICovCisjZGVmaW5lIE1BWDMxMDdfTU9ERTJfUlhUUklHSU5WX0JJVAkoMSA8PCAyKSAvKiBSWCBGSUZPIElOVCBpbnZlcnQgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMl9SWEVNUFRJTlZfQklUCSgxIDw8IDMpIC8qIFJYIEZJRk8gZW1wdHkgSU5UIGludmVydCAqLworI2RlZmluZSBNQVgzMTA3X01PREUyX1NQQ0hSX0JJVAkJKDEgPDwgNCkgLyogU3BlY2lhbCBjaHIgZGV0ZWN0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X01PREUyX0xPT1BCQUNLX0JJVAkoMSA8PCA1KSAvKiBJbnRlcm5hbCBsb29wYmFjayBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMl9NVUxUSURST1BfQklUCSgxIDw8IDYpIC8qIDktYml0IG11bHRpZHJvcCBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19NT0RFMl9FQ0hPU1VQUl9CSVQJKDEgPDwgNykgLyogRUNITyBzdXBwcmVzc2lvbiBlbmFibGUgKi8KKworLyogTENSIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgTUFYMzEwN19MQ1JfTEVOR1RIMF9CSVQJCSgxIDw8IDApIC8qIFdvcmQgbGVuZ3RoIGJpdCAwICovCisjZGVmaW5lIE1BWDMxMDdfTENSX0xFTkdUSDFfQklUCQkoMSA8PCAxKSAvKiBXb3JkIGxlbmd0aCBiaXQgMQorCQkJCQkJICAqCisJCQkJCQkgICogV29yZCBsZW5ndGggYml0cyB0YWJsZToKKwkJCQkJCSAgKiAwMCAtPiA1IGJpdCB3b3JkcworCQkJCQkJICAqIDAxIC0+IDYgYml0IHdvcmRzCisJCQkJCQkgICogMTAgLT4gNyBiaXQgd29yZHMKKwkJCQkJCSAgKiAxMSAtPiA4IGJpdCB3b3JkcworCQkJCQkJICAqLworI2RlZmluZSBNQVgzMTA3X0xDUl9TVE9QTEVOX0JJVAkJKDEgPDwgMikgLyogU1RPUCBsZW5ndGggYml0CisJCQkJCQkgICoKKwkJCQkJCSAgKiBTVE9QIGxlbmd0aCBiaXQgdGFibGU6CisJCQkJCQkgICogMCAtPiAxIHN0b3AgYml0CisJCQkJCQkgICogMSAtPiAxLTEuNSBzdG9wIGJpdHMgaWYKKwkJCQkJCSAgKiAgICAgIHdvcmQgbGVuZ3RoIGlzIDUsCisJCQkJCQkgICogICAgICAyIHN0b3AgYml0cyBvdGhlcndpc2UKKwkJCQkJCSAgKi8KKyNkZWZpbmUgTUFYMzEwN19MQ1JfUEFSSVRZX0JJVAkJKDEgPDwgMykgLyogUGFyaXR5IGJpdCBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19MQ1JfRVZFTlBBUklUWV9CSVQJKDEgPDwgNCkgLyogRXZlbiBwYXJpdHkgYml0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0xDUl9GT1JDRVBBUklUWV9CSVQJKDEgPDwgNSkgLyogOS1iaXQgbXVsdGlkcm9wIHBhcml0eSAqLworI2RlZmluZSBNQVgzMTA3X0xDUl9UWEJSRUFLX0JJVAkJKDEgPDwgNikgLyogVFggYnJlYWsgZW5hYmxlICovCisjZGVmaW5lIE1BWDMxMDdfTENSX1JUU19CSVQJCSgxIDw8IDcpIC8qIFJUUyBwaW4gY29udHJvbCAqLworI2RlZmluZSBNQVgzMTA3X0xDUl9XT1JEX0xFTl81CQkoMHgwMDAwKQorI2RlZmluZSBNQVgzMTA3X0xDUl9XT1JEX0xFTl82CQkoMHgwMDAxKQorI2RlZmluZSBNQVgzMTA3X0xDUl9XT1JEX0xFTl83CQkoMHgwMDAyKQorI2RlZmluZSBNQVgzMTA3X0xDUl9XT1JEX0xFTl84CQkoMHgwMDAzKQorCisKKy8qIElSREEgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X0lSREFfSVJEQUVOX0JJVAkJKDEgPDwgMCkgLyogSVJEQSBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0lSREFfU0lSX0JJVAkJKDEgPDwgMSkgLyogU0lSIG1vZGUgZW5hYmxlICovCisjZGVmaW5lIE1BWDMxMDdfSVJEQV9TSE9SVElSX0JJVAkoMSA8PCAyKSAvKiBTaG9ydCBTSVIgbW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19JUkRBX01JUl9CSVQJCSgxIDw8IDMpIC8qIE1JUiBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0lSREFfUlhJTlZfQklUCQkoMSA8PCA0KSAvKiBSWCBsb2dpYyBpbnZlcnNpb24gZW5hYmxlICovCisjZGVmaW5lIE1BWDMxMDdfSVJEQV9UWElOVl9CSVQJCSgxIDw8IDUpIC8qIFRYIGxvZ2ljIGludmVyc2lvbiBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19JUkRBX1VOREVGNl9CSVQJCSgxIDw8IDYpIC8qIFVuZGVmaW5lZC9ub3QgdXNlZCAqLworI2RlZmluZSBNQVgzMTA3X0lSREFfVU5ERUY3X0JJVAkJKDEgPDwgNykgLyogVW5kZWZpbmVkL25vdCB1c2VkICovCisKKy8qIEZsb3cgY29udHJvbCB0cmlnZ2VyIGxldmVsIHJlZ2lzdGVyIG1hc2tzICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0xWTF9IQUxUX01BU0sJKDB4MDAwZikgLyogRmxvdyBjb250cm9sIGhhbHQgbGV2ZWwgKi8KKyNkZWZpbmUgTUFYMzEwN19GTE9XTFZMX1JFU19NQVNLCSgweDAwZjApIC8qIEZsb3cgY29udHJvbCByZXN1bWUgbGV2ZWwgKi8KKyNkZWZpbmUgTUFYMzEwN19GTE9XTFZMX0hBTFQod29yZHMpCSgod29yZHMvOCkgJiAweDAwMGYpCisjZGVmaW5lIE1BWDMxMDdfRkxPV0xWTF9SRVMod29yZHMpCSgoKHdvcmRzLzgpICYgMHgwMDBmKSA8PCA0KQorCisvKiBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIHJlZ2lzdGVyIG1hc2tzICovCisjZGVmaW5lIE1BWDMxMDdfRklGT1RSSUdMVkxfVFhfTUFTSwkoMHgwMDBmKSAvKiBUWCBGSUZPIHRyaWdnZXIgbGV2ZWwgKi8KKyNkZWZpbmUgTUFYMzEwN19GSUZPVFJJR0xWTF9SWF9NQVNLCSgweDAwZjApIC8qIFJYIEZJRk8gdHJpZ2dlciBsZXZlbCAqLworI2RlZmluZSBNQVgzMTA3X0ZJRk9UUklHTFZMX1RYKHdvcmRzKQkoKHdvcmRzLzgpICYgMHgwMDBmKQorI2RlZmluZSBNQVgzMTA3X0ZJRk9UUklHTFZMX1JYKHdvcmRzKQkoKCh3b3Jkcy84KSAmIDB4MDAwZikgPDwgNCkKKworLyogRmxvdyBjb250cm9sIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgTUFYMzEwN19GTE9XQ1RSTF9BVVRPUlRTX0JJVAkoMSA8PCAwKSAvKiBBdXRvIFJUUyBmbG93IGN0cmwgZW5hYmxlICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0NUUkxfQVVUT0NUU19CSVQJKDEgPDwgMSkgLyogQXV0byBDVFMgZmxvdyBjdHJsIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0ZMT1dDVFJMX0dQSUFERFJfQklUCSgxIDw8IDIpIC8qIEVuYWJsZXMgdGhhdCBHUElPIGlucHV0cworCQkJCQkJICAqIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKwkJCQkJCSAgKiBYT0ZGMiBmb3IgZGVmaW5pdGlvbiBvZgorCQkJCQkJICAqIHNwZWNpYWwgY2hhcmFjdGVyICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0NUUkxfU1dGTE9XRU5fQklUCSgxIDw8IDMpIC8qIEF1dG8gU1cgZmxvdyBjdHJsIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0ZMT1dDVFJMX1NXRkxPVzBfQklUCSgxIDw8IDQpIC8qIFNXRkxPVyBiaXQgMCAqLworI2RlZmluZSBNQVgzMTA3X0ZMT1dDVFJMX1NXRkxPVzFfQklUCSgxIDw8IDUpIC8qIFNXRkxPVyBiaXQgMQorCQkJCQkJICAqCisJCQkJCQkgICogU1dGTE9XIGJpdHMgMSAmIDAgdGFibGU6CisJCQkJCQkgICogMDAgLT4gbm8gdHJhbnNtaXR0ZXIgZmxvdworCQkJCQkJICAqICAgICAgIGNvbnRyb2wKKwkJCQkJCSAgKiAwMSAtPiByZWNlaXZlciBjb21wYXJlcworCQkJCQkJICAqICAgICAgIFhPTjIgYW5kIFhPRkYyCisJCQkJCQkgICogICAgICAgYW5kIGNvbnRyb2xzCisJCQkJCQkgICogICAgICAgdHJhbnNtaXR0ZXIKKwkJCQkJCSAgKiAxMCAtPiByZWNlaXZlciBjb21wYXJlcworCQkJCQkJICAqICAgICAgIFhPTjEgYW5kIFhPRkYxCisJCQkJCQkgICogICAgICAgYW5kIGNvbnRyb2xzCisJCQkJCQkgICogICAgICAgdHJhbnNtaXR0ZXIKKwkJCQkJCSAgKiAxMSAtPiByZWNlaXZlciBjb21wYXJlcworCQkJCQkJICAqICAgICAgIFhPTjEsIFhPTjIsIFhPRkYxIGFuZAorCQkJCQkJICAqICAgICAgIFhPRkYyIGFuZCBjb250cm9scworCQkJCQkJICAqICAgICAgIHRyYW5zbWl0dGVyCisJCQkJCQkgICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0NUUkxfU1dGTE9XMl9CSVQJKDEgPDwgNikgLyogU1dGTE9XIGJpdCAyICovCisjZGVmaW5lIE1BWDMxMDdfRkxPV0NUUkxfU1dGTE9XM19CSVQJKDEgPDwgNykgLyogU1dGTE9XIGJpdCAzCisJCQkJCQkgICoKKwkJCQkJCSAgKiBTV0ZMT1cgYml0cyAzICYgMiB0YWJsZToKKwkJCQkJCSAgKiAwMCAtPiBubyByZWNlaXZlZCBmbG93CisJCQkJCQkgICogICAgICAgY29udHJvbAorCQkJCQkJICAqIDAxIC0+IHRyYW5zbWl0dGVyIGdlbmVyYXRlcworCQkJCQkJICAqICAgICAgIFhPTjIgYW5kIFhPRkYyCisJCQkJCQkgICogMTAgLT4gdHJhbnNtaXR0ZXIgZ2VuZXJhdGVzCisJCQkJCQkgICogICAgICAgWE9OMSBhbmQgWE9GRjEKKwkJCQkJCSAgKiAxMSAtPiB0cmFuc21pdHRlciBnZW5lcmF0ZXMKKwkJCQkJCSAgKiAgICAgICBYT04xLCBYT04yLCBYT0ZGMSBhbmQKKwkJCQkJCSAgKiAgICAgICBYT0ZGMgorCQkJCQkJICAqLworCisvKiBHUElPIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AwT1VUX0JJVAkoMSA8PCAwKSAvKiBHUElPIDAgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AxT1VUX0JJVAkoMSA8PCAxKSAvKiBHUElPIDEgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AyT1VUX0JJVAkoMSA8PCAyKSAvKiBHUElPIDIgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AzT1VUX0JJVAkoMSA8PCAzKSAvKiBHUElPIDMgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AwT0RfQklUCSgxIDw8IDQpIC8qIEdQSU8gMCBvcGVuLWRyYWluIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AxT0RfQklUCSgxIDw8IDUpIC8qIEdQSU8gMSBvcGVuLWRyYWluIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AyT0RfQklUCSgxIDw8IDYpIC8qIEdQSU8gMiBvcGVuLWRyYWluIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9DRkdfR1AzT0RfQklUCSgxIDw8IDcpIC8qIEdQSU8gMyBvcGVuLWRyYWluIGVuYWJsZSAqLworCisvKiBHUElPIERBVEEgcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQME9VVF9CSVQJKDEgPDwgMCkgLyogR1BJTyAwIG91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQMU9VVF9CSVQJKDEgPDwgMSkgLyogR1BJTyAxIG91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQMk9VVF9CSVQJKDEgPDwgMikgLyogR1BJTyAyIG91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQM09VVF9CSVQJKDEgPDwgMykgLyogR1BJTyAzIG91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQMElOX0JJVAkoMSA8PCA0KSAvKiBHUElPIDAgaW5wdXQgdmFsdWUgKi8KKyNkZWZpbmUgTUFYMzEwN19HUElPREFUQV9HUDFJTl9CSVQJKDEgPDwgNSkgLyogR1BJTyAxIGlucHV0IHZhbHVlICovCisjZGVmaW5lIE1BWDMxMDdfR1BJT0RBVEFfR1AySU5fQklUCSgxIDw8IDYpIC8qIEdQSU8gMiBpbnB1dCB2YWx1ZSAqLworI2RlZmluZSBNQVgzMTA3X0dQSU9EQVRBX0dQM0lOX0JJVAkoMSA8PCA3KSAvKiBHUElPIDMgaW5wdXQgdmFsdWUgKi8KKworLyogUExMIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgbWFza3MgKi8KKyNkZWZpbmUgTUFYMzEwN19QTExDRkdfUFJFRElWX01BU0sJKDB4MDAzZikgLyogUExMIHByZWRpdmlzaW9uIHZhbHVlICovCisjZGVmaW5lIE1BWDMxMDdfUExMQ0ZHX1BMTEZBQ1RPUl9NQVNLCSgweDAwYzApIC8qIFBMTCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKworLyogQmF1ZCByYXRlIGdlbmVyYXRvciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIG1hc2tzIGFuZCBiaXRzICovCisjZGVmaW5lIE1BWDMxMDdfQlJHQ0ZHX0ZSQUNUX01BU0sJKDB4MDAwZikgLyogRnJhY3Rpb25hbCBwb3J0aW9uIG9mCisJCQkJCQkgICogQmF1ZCByYXRlIGdlbmVyYXRvciBkaXZpc29yCisJCQkJCQkgICovCisjZGVmaW5lIE1BWDMxMDdfQlJHQ0ZHXzJYTU9ERV9CSVQJKDEgPDwgNCkgLyogRG91YmxlIGJhdWQgcmF0ZSAqLworI2RlZmluZSBNQVgzMTA3X0JSR0NGR180WE1PREVfQklUCSgxIDw8IDUpIC8qIFF1YWRydXBsZSBiYXVkIHJhdGUgKi8KKyNkZWZpbmUgTUFYMzEwN19CUkdDRkdfVU5ERUY2X0JJVAkoMSA8PCA2KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKyNkZWZpbmUgTUFYMzEwN19CUkdDRkdfVU5ERUY3X0JJVAkoMSA8PCA3KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKworLyogQ2xvY2sgc291cmNlIHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfSU5UT1NDX0JJVAkoMSA8PCAwKSAvKiBJbnRlcm5hbCBvc2MgZW5hYmxlICovCisjZGVmaW5lIE1BWDMxMDdfQ0xLU1JDX0NSWVNUX0JJVAkoMSA8PCAxKSAvKiBDcnlzdGFsIG9zYyBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfUExMX0JJVAkJKDEgPDwgMikgLyogUExMIGVuYWJsZSAqLworI2RlZmluZSBNQVgzMTA3X0NMS1NSQ19QTExCWVBfQklUCSgxIDw8IDMpIC8qIFBMTCBieXBhc3MgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfRVhUQ0xLX0JJVAkoMSA8PCA0KSAvKiBFeHRlcm5hbCBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfVU5ERUY1X0JJVAkoMSA8PCA1KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfVU5ERUY2X0JJVAkoMSA8PCA2KSAvKiBVbmRlZmluZWQvbm90IHVzZWQgKi8KKyNkZWZpbmUgTUFYMzEwN19DTEtTUkNfQ0xLMlJUU19CSVQJKDEgPDwgNykgLyogQmF1ZCBjbGsgdG8gUlRTIHBpbiAqLworCisKKy8qIEhXIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BWDMxMDdfUlhfRklGT19TSVpFCTEyOAorI2RlZmluZSBNQVgzMTA3X1RYX0ZJRk9fU0laRQkxMjgKKyNkZWZpbmUgTUFYMzEwN19SRVZJRDEJCTB4MDBhMAorI2RlZmluZSBNQVgzMTA3X1JFVklEMgkJMHgwMGExCisKKworLyogQmF1ZCByYXRlIGdlbmVyYXRvciBjb25maWd1cmF0aW9uIHZhbHVlcyBmb3IgZXh0ZXJuYWwgY2xvY2sgMTNNSHogKi8KKyNkZWZpbmUgTUFYMzEwN19CUkcxM19CMzAwCSgweDBBOTQwMCB8IDB4MDUpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjYwMAkoMHgwNTRBMDAgfCAweDAzKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0IxMjAwCSgweDAyQTUwMCB8IDB4MDEpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjI0MDAJKDB4MDE1MjAwIHwgMHgwOSkKKyNkZWZpbmUgTUFYMzEwN19CUkcxM19CNDgwMAkoMHgwMEE5MDAgfCAweDA0KQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0I5NjAwCSgweDAwNTQwMCB8IDB4MEEpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjE5MjAwCSgweDAwMkEwMCB8IDB4MDUpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjM4NDAwCSgweDAwMTUwMCB8IDB4MDMpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjU3NjAwCSgweDAwMEUwMCB8IDB4MDIpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjExNTIwMAkoMHgwMDA3MDAgfCAweDAxKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0IyMzA0MDAJKDB4MDAwMzAwIHwgMHgwOCkKKyNkZWZpbmUgTUFYMzEwN19CUkcxM19CNDYwODAwCSgweDAwMDEwMCB8IDB4MGMpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfQjkyMTYwMAkoMHgwMDAxMDAgfCAweDFjKQorCisvKiBCYXVkIHJhdGUgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciBleHRlcm5hbCBjbG9jayAyNk1IeiAqLworI2RlZmluZSBNQVgzMTA3X0JSRzI2X0IzMDAJKDB4MTUyODAwIHwgMHgwQSkKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CNjAwCSgweDBBOTQwMCB8IDB4MDUpCisjZGVmaW5lIE1BWDMxMDdfQlJHMjZfQjEyMDAJKDB4MDU0QTAwIHwgMHgwMykKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CMjQwMAkoMHgwMkE1MDAgfCAweDAxKQorI2RlZmluZSBNQVgzMTA3X0JSRzI2X0I0ODAwCSgweDAxNTIwMCB8IDB4MDkpCisjZGVmaW5lIE1BWDMxMDdfQlJHMjZfQjk2MDAJKDB4MDBBOTAwIHwgMHgwNCkKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CMTkyMDAJKDB4MDA1NDAwIHwgMHgwQSkKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CMzg0MDAJKDB4MDAyQTAwIHwgMHgwNSkKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CNTc2MDAJKDB4MDAxQzAwIHwgMHgwMykKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9CMTE1MjAwCSgweDAwMEUwMCB8IDB4MDIpCisjZGVmaW5lIE1BWDMxMDdfQlJHMjZfQjIzMDQwMAkoMHgwMDA3MDAgfCAweDAxKQorI2RlZmluZSBNQVgzMTA3X0JSRzI2X0I0NjA4MDAJKDB4MDAwMzAwIHwgMHgwOCkKKyNkZWZpbmUgTUFYMzEwN19CUkcyNl9COTIxNjAwCSgweDAwMDEwMCB8IDB4MEMpCisKKy8qIEJhdWQgcmF0ZSBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIGludGVybmFsIGNsb2NrICovCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfSUIzMDAJKDB4MDA4MDAwIHwgMHgwMCkKKyNkZWZpbmUgTUFYMzEwN19CUkcxM19JQjYwMAkoMHgwMDQwMDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCMTIwMAkoMHgwMDIwMDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCMjQwMAkoMHgwMDEwMDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCNDgwMAkoMHgwMDA4MDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCOTYwMAkoMHgwMDA0MDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCMTkyMDAJKDB4MDAwMjAwIHwgMHgwMCkKKyNkZWZpbmUgTUFYMzEwN19CUkcxM19JQjM4NDAwCSgweDAwMDEwMCB8IDB4MDApCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfSUI1NzYwMAkoMHgwMDAwMDAgfCAweDBCKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCMTE1MjAwCSgweDAwMDAwMCB8IDB4MDUpCisjZGVmaW5lIE1BWDMxMDdfQlJHMTNfSUIyMzA0MDAJKDB4MDAwMDAwIHwgMHgwMykKKyNkZWZpbmUgTUFYMzEwN19CUkcxM19JQjQ2MDgwMAkoMHgwMDAwMDAgfCAweDAwKQorI2RlZmluZSBNQVgzMTA3X0JSRzEzX0lCOTIxNjAwCSgweDAwMDAwMCB8IDB4MDApCisKKworc3RydWN0IGJhdWRfdGFibGUgeworCWludCBiYXVkOworCXUzMiBuZXdfYnJnOworfTsKKworc3RydWN0IG1heDMxMDdfcG9ydCB7CisJLyogVUFSVCBwb3J0IHN0cnVjdHVyZSAqLworCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKKworCS8qIFNQSSBkZXZpY2Ugc3RydWN0dXJlICovCisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCisJLyogR1BJTyBjaGlwIHN0dWN0dXJlICovCisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworI2VuZGlmCisKKwkvKiBXb3JrcXVldWUgdGhhdCBkb2VzIGFsbCB0aGUgbWFnaWMgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJLyogTG9jayBmb3Igc2hhcmVkIGRhdGEgKi8KKwlzcGlubG9ja190IGRhdGFfbG9jazsKKworCS8qIERldmljZSBjb25maWd1cmF0aW9uICovCisJaW50IGV4dF9jbGs7CQkvKiAxIGlmIGV4dGVybmFsIGNsb2NrIHVzZWQgKi8KKwlpbnQgbG9vcGJhY2s7CQkvKiBDdXJyZW50IGxvb3BiYWNrIG1vZGUgc3RhdGUgKi8KKwlpbnQgYmF1ZDsJCQkvKiBDdXJyZW50IGJhdWQgcmF0ZSAqLworCisJLyogU3RhdGUgZmxhZ3MgKi8KKwlpbnQgc3VzcGVuZGVkOwkJLyogSW5kaWNhdGVzIHN1c3BlbmQgbW9kZSAqLworCWludCB0eF9maWZvX2VtcHR5OwkvKiBGbGFnIGZvciBUWCBGSUZPIHN0YXRlICovCisJaW50IHJ4X2VuYWJsZWQ7CQkvKiBGbGFnIGZvciByZWNlaXZlciBzdGF0ZSAqLworCWludCB0eF9lbmFibGVkOwkJLyogRmxhZyBmb3IgdHJhbnNtaXR0ZXIgc3RhdGUgKi8KKworCXUxNiBpcnFlbl9yZWc7CQkvKiBDdXJyZW50IElSUSBlbmFibGUgcmVnaXN0ZXIgdmFsdWUgKi8KKwkvKiBTaGFyZWQgZGF0YSAqLworCXUxNiBtb2RlMV9yZWc7CQkvKiBDdXJyZW50IG1vZGUxIHJlZ2lzdGVyIHZhbHVlKi8KKwlpbnQgbW9kZTFfY29tbWl0OwkvKiBGbGFnIGZvciBzZXR0aW5nIG5ldyBtb2RlMSByZWdpc3RlciB2YWx1ZSAqLworCXUxNiBsY3JfcmVnOwkJLyogQ3VycmVudCBMQ1IgcmVnaXN0ZXIgdmFsdWUgKi8KKwlpbnQgbGNyX2NvbW1pdDsJCS8qIEZsYWcgZm9yIHNldHRpbmcgbmV3IExDUiByZWdpc3RlciB2YWx1ZSAqLworCXUzMiBicmdfY2ZnOwkJLyogQ3VycmVudCBCYXVkIHJhdGUgZ2VuZXJhdG9yIGNvbmZpZyAgKi8KKwlpbnQgYnJnX2NvbW1pdDsJCS8qIEZsYWcgZm9yIHNldHRpbmcgbmV3IGJhdWQgcmF0ZSBnZW5lcmF0b3IKKwkJCQkgKiBjb25maWcKKwkJCQkgKi8KKwlzdHJ1Y3QgYmF1ZF90YWJsZSAqYmF1ZF90Ymw7CisJaW50IGhhbmRsZV9pcnE7CQkvKiBJbmRpY2F0ZXMgdGhhdCBJUlEgc2hvdWxkIGJlIGhhbmRsZWQgKi8KKworCS8qIFJ4IGJ1ZmZlciBhbmQgc3RyKi8KKwl1MTYgKnJ4YnVmOworCXU4ICAqcnhzdHI7CisJLyogVHggYnVmZmVyKi8KKwl1MTYgKnR4YnVmOworCisJc3RydWN0IG1heDMxMDdfcGxhdCAqcGRhdGE7CS8qIFBsYXRmb3JtIGRhdGEgKi8KK307CisKKy8qIFBsYXRmb3JtIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgbWF4MzEwN19wbGF0IHsKKwkvKiBMb29wYmFjayBtb2RlIGVuYWJsZSAqLworCWludCBsb29wYmFjazsKKwkvKiBFeHRlcm5hbCBjbG9jayBlbmFibGUgKi8KKwlpbnQgZXh0X2NsazsKKwkvKiBDYWxsZWQgZHVyaW5nIHRoZSByZWdpc3RlciBpbml0aWFsaXNhdGlvbiAqLworCXZvaWQgKCppbml0KShzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzKTsKKwkvKiBDYWxsZWQgd2hlbiB0aGUgcG9ydCBpcyBmb3VuZCBhbmQgY29uZmlndXJlZCAqLworCWludCAoKmNvbmZpZ3VyZSkoc3RydWN0IG1heDMxMDdfcG9ydCAqcyk7CisJLyogSFcgc3VzcGVuZCBmdW5jdGlvbiAqLworCXZvaWQgKCpod19zdXNwZW5kKSAoc3RydWN0IG1heDMxMDdfcG9ydCAqcywgaW50IHN1c3BlbmQpOworCS8qIFBvbGxpbmcgbW9kZSBlbmFibGUgKi8KKwlpbnQgcG9sbGVkX21vZGU7CisJLyogUG9sbGluZyBwZXJpb2QgaWYgcG9sbGluZyBtb2RlIGVuYWJsZWQgKi8KKwlpbnQgcG9sbF90aW1lOworfTsKKworZXh0ZXJuIGludCBtYXgzMTA3X3J3KHN0cnVjdCBtYXgzMTA3X3BvcnQgKnMsIHU4ICp0eCwgdTggKnJ4LCBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIG1heDMxMDdfaHdfc3VzcChzdHJ1Y3QgbWF4MzEwN19wb3J0ICpzLCBpbnQgc3VzcGVuZCk7CitleHRlcm4gaW50IG1heDMxMDdfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG1heDMxMDdfcGxhdCAqcGRhdGEpOworZXh0ZXJuIGludCBtYXgzMTA3X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKK2V4dGVybiBpbnQgbWF4MzEwN19zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IG1heDMxMDdfcmVzdW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCisjZW5kaWYgLyogX0xJTlVYX1NFUklBTF9NQVgzMTA3X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21jZi5jIGIvZHJpdmVycy9zZXJpYWwvbWNmLmMKaW5kZXggYjVhYWVmOS4uMzM5NGI3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbWNmLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbWNmLmMKQEAgLTcwLDE2ICs3MCwxNCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtY2ZfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG1jZl91YXJ0ICpwcCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWNmX3VhcnQsIHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHNpZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXNpZ3MgPSAocmVhZGIocG9ydC0+bWVtYmFzZSArIE1DRlVBUlRfVUlQUikgJiBNQ0ZVQVJUX1VJUFJfQ1RTKSA/CiAJCTAgOiBUSU9DTV9DVFM7CiAJc2lncyB8PSAocHAtPnNpZ3MgJiBUSU9DTV9SVFMpOwogCXNpZ3MgfD0gKG1jZl9nZXRwcGRjZChwb3J0LT5saW5lKSA/IFRJT0NNX0NEIDogMCk7CiAJc2lncyB8PSAobWNmX2dldHBwZHRyKHBvcnQtPmxpbmUpID8gVElPQ01fRFRSIDogMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIHNpZ3M7CiB9CiAKQEAgLTg4LDE2ICs4NiwxMyBAQAogc3RhdGljIHZvaWQgbWNmX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc2lncykKIHsKIAlzdHJ1Y3QgbWNmX3VhcnQgKnBwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBtY2ZfdWFydCwgcG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJcHAtPnNpZ3MgPSBzaWdzOwogCW1jZl9zZXRwcGR0cihwb3J0LT5saW5lLCAoc2lncyAmIFRJT0NNX0RUUikpOwogCWlmIChzaWdzICYgVElPQ01fUlRTKQogCQl3cml0ZWIoTUNGVUFSVF9VT1BfUlRTLCBwb3J0LT5tZW1iYXNlICsgTUNGVUFSVF9VT1AxKTsKIAllbHNlCiAJCXdyaXRlYihNQ0ZVQVJUX1VPUF9SVFMsIHBvcnQtPm1lbWJhc2UgKyBNQ0ZVQVJUX1VPUDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDUsMTIgKzEwMCw5IEBACiBzdGF0aWMgdm9pZCBtY2Zfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgbWNmX3VhcnQgKnBwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBtY2ZfdWFydCwgcG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJcHAtPmltciB8PSBNQ0ZVQVJUX1VJUl9UWFJFQURZOwogCXdyaXRlYihwcC0+aW1yLCBwb3J0LT5tZW1iYXNlICsgTUNGVUFSVF9VSU1SKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE4LDEyICsxMTAsOSBAQAogc3RhdGljIHZvaWQgbWNmX3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgbWNmX3VhcnQgKnBwID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCBtY2ZfdWFydCwgcG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJcHAtPmltciAmPSB+TUNGVUFSVF9VSVJfVFhSRUFEWTsKIAl3cml0ZWIocHAtPmltciwgcG9ydC0+bWVtYmFzZSArIE1DRlVBUlRfVUlNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzMSwxMiArMTIwLDkgQEAKIHN0YXRpYyB2b2lkIG1jZl9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IG1jZl91YXJ0ICpwcCA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWNmX3VhcnQsIHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCXBwLT5pbXIgJj0gfk1DRlVBUlRfVUlSX1JYUkVBRFk7CiAJd3JpdGViKHBwLT5pbXIsIHBvcnQtPm1lbWJhc2UgKyBNQ0ZVQVJUX1VJTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zNjYsMTMgKzM1MiwyMiBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBkYXRhOwogCXN0cnVjdCBtY2ZfdWFydCAqcHAgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IG1jZl91YXJ0LCBwb3J0KTsKIAl1bnNpZ25lZCBpbnQgaXNyOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCiAJaXNyID0gcmVhZGIocG9ydC0+bWVtYmFzZSArIE1DRlVBUlRfVUlTUikgJiBwcC0+aW1yOwotCWlmIChpc3IgJiBNQ0ZVQVJUX1VJUl9SWFJFQURZKQorCisJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwlpZiAoaXNyICYgTUNGVUFSVF9VSVJfUlhSRUFEWSkgewogCQltY2ZfcnhfY2hhcnMocHApOwotCWlmIChpc3IgJiBNQ0ZVQVJUX1VJUl9UWFJFQURZKQorCQlyZXQgPSBJUlFfSEFORExFRDsKKwl9CisJaWYgKGlzciAmIE1DRlVBUlRfVUlSX1RYUkVBRFkpIHsKIAkJbWNmX3R4X2NoYXJzKHBwKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21mZC5jIGIvZHJpdmVycy9zZXJpYWwvbWZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM5YWY1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL21mZC5jCkBAIC0wLDAgKzEsMTQ5OCBAQAorLyoKKyAqIG1mZC5jOiBkcml2ZXIgZm9yIEhpZ2ggU3BlZWQgVUFSVCBkZXZpY2Ugb2YgSW50ZWwgTWVkZmllbGQgcGxhdGZvcm0KKyAqCisgKiBSZWZlciBweGEuYywgODI1MC5jIGFuZCBzb21lIG90aGVyIGRyaXZlcnMgaW4gZHJpdmVycy9zZXJpYWwvCisgKgorICogKEMpIENvcHlyaWdodCAyMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICovCisKKy8qIE5vdGVzOgorICogMS4gRE1BIGNoYW5uZWwgYWxsb2NhdGlvbjogMC8xIGNoYW5uZWwgYXJlIGFzc2lnbmVkIHRvIHBvcnQgMCwKKyAqICAgIDIvMyBjaGFuIHRvIHBvcnQgMSwgNC81IGNoYW4gdG8gcG9ydCAzLiBFdmVuIG51bWJlciBjaGFucworICogICAgYXJlIHVzZWQgZm9yIFJYLCBvZGQgY2hhbnMgZm9yIFRYCisgKgorICogMi4gSW4gQTAgc3RlcHBpbmcsIFVBUlQgd2lsbCBub3Qgc3VwcG9ydCBUWCBoYWxmIGVtcHR5IGZsYWcKKyAqCisgKiAzLiBUaGUgUkkvRFNSL0RDRC9EVFIgYXJlIG5vdCBwaW5uZWQgb3V0LCBEQ0QgJiBEU1IgYXJlIGFsd2F5cworICogICAgYXNzZXJ0ZWQsIG9ubHkgd2hlbiB0aGUgSFcgaXMgcmVzZXQgdGhlIEREQ0QgYW5kIEREU1Igd2lsbAorICogICAgYmUgdHJpZ2dlcmVkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfbWZkLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2RlZmluZSAgTUZEX0hTVV9BMF9TVEVQUElORwkxCisKKyNkZWZpbmUgSFNVX0RNQV9CVUZfU0laRQkyMDQ4CisKKyNkZWZpbmUgY2hhbl9yZWFkbChjaGFuLCBvZmZzZXQpCXJlYWRsKGNoYW4tPnJlZyArIG9mZnNldCkKKyNkZWZpbmUgY2hhbl93cml0ZWwoY2hhbiwgb2Zmc2V0LCB2YWwpCXdyaXRlbCh2YWwsIGNoYW4tPnJlZyArIG9mZnNldCkKKworI2RlZmluZSBtZmRfcmVhZGwob2JqLCBvZmZzZXQpCQlyZWFkbChvYmotPnJlZyArIG9mZnNldCkKKyNkZWZpbmUgbWZkX3dyaXRlbChvYmosIG9mZnNldCwgdmFsKQl3cml0ZWwodmFsLCBvYmotPnJlZyArIG9mZnNldCkKKworI2RlZmluZSBIU1VfRE1BX1RJTUVPVVRfQ0hFQ0tfRlJFUQkoSFovMTApCisKK3N0cnVjdCBoc3VfZG1hX2J1ZmZlciB7CisJdTgJCSpidWY7CisJZG1hX2FkZHJfdAlkbWFfYWRkcjsKKwl1MzIJCWRtYV9zaXplOworCXUzMgkJb2ZzOworfTsKKworc3RydWN0IGhzdV9kbWFfY2hhbiB7CisJdTMyCWlkOworCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uCWRpcnQ7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQJKnVwb3J0OworCXZvaWQgX19pb21lbQkJKnJlZzsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlyeF90aW1lcjsgLyogb25seSBuZWVkZWQgYnkgUlggY2hhbm5lbCAqLworfTsKKworc3RydWN0IHVhcnRfaHN1X3BvcnQgeworCXN0cnVjdCB1YXJ0X3BvcnQgICAgICAgIHBvcnQ7CisJdW5zaWduZWQgY2hhciAgICAgICAgICAgaWVyOworCXVuc2lnbmVkIGNoYXIgICAgICAgICAgIGxjcjsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICBtY3I7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgbHNyX2JyZWFrX2ZsYWc7CisJY2hhcgkJCW5hbWVbMTJdOworCWludAkJCWluZGV4OworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisKKwlzdHJ1Y3QgaHN1X2RtYV9jaGFuCSp0eGM7CisJc3RydWN0IGhzdV9kbWFfY2hhbgkqcnhjOworCXN0cnVjdCBoc3VfZG1hX2J1ZmZlcgl0eGJ1ZjsKKwlzdHJ1Y3QgaHN1X2RtYV9idWZmZXIJcnhidWY7CisJaW50CQkJdXNlX2RtYTsJLyogZmxhZyBmb3IgRE1BL1BJTyAqLworCWludAkJCXJ1bm5pbmc7CisJaW50CQkJZG1hX3R4X29uOworfTsKKworLyogVG9wIGxldmVsIGRhdGEgc3RydWN0dXJlIG9mIEhTVSAqLworc3RydWN0IGhzdV9wb3J0IHsKKwl2b2lkIF9faW9tZW0JKnJlZzsKKwl1bnNpZ25lZCBsb25nCXBhZGRyOworCXVuc2lnbmVkIGxvbmcJaW9sZW47CisJdTMyCQlpcnE7CisKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydAlwb3J0WzNdOworCXN0cnVjdCBoc3VfZG1hX2NoYW4JY2hhbnNbMTBdOworCisJc3RydWN0IGRlbnRyeSAqZGVidWdmczsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNlcmlhbF9pbihzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAsIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmIChvZmZzZXQgPiBVQVJUX01TUikgeworCQlvZmZzZXQgPDw9IDI7CisJCXZhbCA9IHJlYWRsKHVwLT5wb3J0Lm1lbWJhc2UgKyBvZmZzZXQpOworCX0gZWxzZQorCQl2YWwgPSAodW5zaWduZWQgaW50KXJlYWRiKHVwLT5wb3J0Lm1lbWJhc2UgKyBvZmZzZXQpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF9vdXQoc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaWYgKG9mZnNldCA+IFVBUlRfTVNSKSB7CisJCW9mZnNldCA8PD0gMjsKKwkJd3JpdGVsKHZhbHVlLCB1cC0+cG9ydC5tZW1iYXNlICsgb2Zmc2V0KTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBjaGFyIHZhbCA9IHZhbHVlICYgMHhmZjsKKwkJd3JpdGViKHZhbCwgdXAtPnBvcnQubWVtYmFzZSArIG9mZnNldCk7CisJfQorfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisKKyNkZWZpbmUgSFNVX1JFR1NfQlVGU0laRQkxMDI0CisKK3N0YXRpYyBpbnQgaHN1X3Nob3dfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBvcnRfc2hvd19yZWdzKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKwl1MzIgbGVuID0gMDsKKwlzc2l6ZV90IHJldDsKKworCWJ1ZiA9IGt6YWxsb2MoSFNVX1JFR1NfQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAwOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJNRkQgSFNVIHBvcnRbJWRdIHJlZ3M6XG4iLCB1cC0+aW5kZXgpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiSUVSOiBcdFx0MHglMDh4XG4iLCBzZXJpYWxfaW4odXAsIFVBUlRfSUVSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJJSVI6IFx0XHQweCUwOHhcbiIsIHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkxDUjogXHRcdDB4JTA4eFxuIiwgc2VyaWFsX2luKHVwLCBVQVJUX0xDUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiTUNSOiBcdFx0MHglMDh4XG4iLCBzZXJpYWxfaW4odXAsIFVBUlRfTUNSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJMU1I6IFx0XHQweCUwOHhcbiIsIHNlcmlhbF9pbih1cCwgVUFSVF9MU1IpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIk1TUjogXHRcdDB4JTA4eFxuIiwgc2VyaWFsX2luKHVwLCBVQVJUX01TUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRk9SOiBcdFx0MHglMDh4XG4iLCBzZXJpYWxfaW4odXAsIFVBUlRfRk9SKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJQUzogXHRcdDB4JTA4eFxuIiwgc2VyaWFsX2luKHVwLCBVQVJUX1BTKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJNVUw6IFx0XHQweCUwOHhcbiIsIHNlcmlhbF9pbih1cCwgVUFSVF9NVUwpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkRJVjogXHRcdDB4JTA4eFxuIiwgc2VyaWFsX2luKHVwLCBVQVJUX0RJVikpOworCisJcmV0ID0gIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgZG1hX3Nob3dfcmVncyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBoc3VfZG1hX2NoYW4gKmNoYW4gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCXUzMiBsZW4gPSAwOworCXNzaXplX3QgcmV0OworCisJYnVmID0ga3phbGxvYyhIU1VfUkVHU19CVUZTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIk1GRCBIU1UgRE1BIGNoYW5uZWwgWyVkXSByZWdzOlxuIiwgY2hhbi0+aWQpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiQ1I6IFx0XHQweCUwOHhcbiIsIGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0NSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJEQ1I6IFx0XHQweCUwOHhcbiIsIGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0RDUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiQlNSOiBcdFx0MHglMDh4XG4iLCBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9CU1IpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIk1PVFNSOiBcdFx0MHglMDh4XG4iLCBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9NT1RTUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRDBTQVI6IFx0XHQweCUwOHhcbiIsIGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0QwU0FSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJEMFRTUjogXHRcdDB4JTA4eFxuIiwgY2hhbl9yZWFkbChjaGFuLCBIU1VfQ0hfRDBUU1IpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkQwU0FSOiBcdFx0MHglMDh4XG4iLCBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9EMVNBUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRDBUU1I6IFx0XHQweCUwOHhcbiIsIGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0QxVFNSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJEMFNBUjogXHRcdDB4JTA4eFxuIiwgY2hhbl9yZWFkbChjaGFuLCBIU1VfQ0hfRDJTQVIpKTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBIU1VfUkVHU19CVUZTSVpFIC0gbGVuLAorCQkJIkQwVFNSOiBcdFx0MHglMDh4XG4iLCBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9EMlRTUikpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIEhTVV9SRUdTX0JVRlNJWkUgLSBsZW4sCisJCQkiRDBTQVI6IFx0XHQweCUwOHhcbiIsIGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0QzU0FSKSk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgSFNVX1JFR1NfQlVGU0laRSAtIGxlbiwKKwkJCSJEMFRTUjogXHRcdDB4JTA4eFxuIiwgY2hhbl9yZWFkbChjaGFuLCBIU1VfQ0hfRDNUU1IpKTsKKworCXJldCA9ICBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvcnRfcmVnc19vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGhzdV9zaG93X3JlZ3Nfb3BlbiwKKwkucmVhZAkJPSBwb3J0X3Nob3dfcmVncywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtYV9yZWdzX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaHN1X3Nob3dfcmVnc19vcGVuLAorCS5yZWFkCQk9IGRtYV9zaG93X3JlZ3MsCit9OworCitzdGF0aWMgaW50IGhzdV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGhzdV9wb3J0ICpoc3UpCit7CisJaW50IGk7CisJY2hhciBuYW1lWzMyXTsKKworCWhzdS0+ZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiaHN1IiwgTlVMTCk7CisJaWYgKCFoc3UtPmRlYnVnZnMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJwb3J0XyVkX3JlZ3MiLCBpKTsKKwkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCWhzdS0+ZGVidWdmcywgKHZvaWQgKikoJmhzdS0+cG9ydFtpXSksICZwb3J0X3JlZ3Nfb3BzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImRtYV9jaGFuXyVkX3JlZ3MiLCBpKTsKKwkJZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCWhzdS0+ZGVidWdmcywgKHZvaWQgKikmaHN1LT5jaGFuc1tpXSwgJmRtYV9yZWdzX29wcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhzdV9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaHN1X3BvcnQgKmhzdSkKK3sKKwlpZiAoaHN1LT5kZWJ1Z2ZzKQorCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaHN1LT5kZWJ1Z2ZzKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGhzdV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGhzdV9wb3J0ICpoc3UpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoc3VfZGVidWdmc19yZW1vdmUoc3RydWN0IGhzdV9wb3J0ICpoc3UpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyB2b2lkIHNlcmlhbF9oc3VfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X2hzdV9wb3J0LCBwb3J0KTsKKworCXVwLT5pZXIgfD0gVUFSVF9JRVJfTVNJOworCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKK30KKwordm9pZCBoc3VfZG1hX3R4KHN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCkKK3sKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CisJc3RydWN0IGhzdV9kbWFfYnVmZmVyICpkYnVmID0gJnVwLT50eGJ1ZjsKKwlpbnQgY291bnQ7CisKKwkvKiB0ZXN0X2FuZF9zZXRfYml0IG1heSBiZSBiZXR0ZXIsIGJ1dCBhbnl3YXkgaXQncyBpbiBsb2NrIHByb3RlY3RlZCBtb2RlICovCisJaWYgKHVwLT5kbWFfdHhfb24pCisJCXJldHVybjsKKworCS8qIFVwZGF0ZSB0aGUgY2lyYyBidWYgaW5mbyAqLworCXhtaXQtPnRhaWwgKz0gZGJ1Zi0+b2ZzOworCXhtaXQtPnRhaWwgJj0gVUFSVF9YTUlUX1NJWkUgLSAxOworCisJdXAtPnBvcnQuaWNvdW50LnR4ICs9IGRidWYtPm9mczsKKwlkYnVmLT5vZnMgPSAwOworCisJLyogRGlzYWJsZSB0aGUgY2hhbm5lbCAqLworCWNoYW5fd3JpdGVsKHVwLT50eGMsIEhTVV9DSF9DUiwgMHgwKTsKKworCWlmICghdWFydF9jaXJjX2VtcHR5KHhtaXQpICYmICF1YXJ0X3R4X3N0b3BwZWQoJnVwLT5wb3J0KSkgeworCQlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSh1cC0+cG9ydC5kZXYsCisJCQkJCSAgIGRidWYtPmRtYV9hZGRyLAorCQkJCQkgICBkYnVmLT5kbWFfc2l6ZSwKKwkJCQkJICAgRE1BX1RPX0RFVklDRSk7CisKKwkJY291bnQgPSBDSVJDX0NOVF9UT19FTkQoeG1pdC0+aGVhZCwgeG1pdC0+dGFpbCwgVUFSVF9YTUlUX1NJWkUpOworCQlkYnVmLT5vZnMgPSBjb3VudDsKKworCQkvKiBSZXByb2dyYW0gdGhlIGNoYW5uZWwgKi8KKwkJY2hhbl93cml0ZWwodXAtPnR4YywgSFNVX0NIX0QwU0FSLCBkYnVmLT5kbWFfYWRkciArIHhtaXQtPnRhaWwpOworCQljaGFuX3dyaXRlbCh1cC0+dHhjLCBIU1VfQ0hfRDBUU1IsIGNvdW50KTsKKworCQkvKiBSZWVuYWJsZSB0aGUgY2hhbm5lbCAqLworCQljaGFuX3dyaXRlbCh1cC0+dHhjLCBIU1VfQ0hfRENSLCAweDEKKwkJCQkJCSB8ICgweDEgPDwgOCkKKwkJCQkJCSB8ICgweDEgPDwgMTYpCisJCQkJCQkgfCAoMHgxIDw8IDI0KSk7CisJCXVwLT5kbWFfdHhfb24gPSAxOworCQljaGFuX3dyaXRlbCh1cC0+dHhjLCBIU1VfQ0hfQ1IsIDB4MSk7CisJfQorCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cCgmdXAtPnBvcnQpOworfQorCisvKiBUaGUgYnVmZmVyIGlzIGFscmVhZHkgY2FjaGUgY29oZXJlbnQgKi8KK3ZvaWQgaHN1X2RtYV9zdGFydF9yeF9jaGFuKHN0cnVjdCBoc3VfZG1hX2NoYW4gKnJ4Yywgc3RydWN0IGhzdV9kbWFfYnVmZmVyICpkYnVmKQoreworCWRidWYtPm9mcyA9IDA7CisKKwljaGFuX3dyaXRlbChyeGMsIEhTVV9DSF9CU1IsIDMyKTsKKwljaGFuX3dyaXRlbChyeGMsIEhTVV9DSF9NT1RTUiwgNCk7CisKKwljaGFuX3dyaXRlbChyeGMsIEhTVV9DSF9EMFNBUiwgZGJ1Zi0+ZG1hX2FkZHIpOworCWNoYW5fd3JpdGVsKHJ4YywgSFNVX0NIX0QwVFNSLCBkYnVmLT5kbWFfc2l6ZSk7CisJY2hhbl93cml0ZWwocnhjLCBIU1VfQ0hfRENSLCAweDEgfCAoMHgxIDw8IDgpCisJCQkJCSB8ICgweDEgPDwgMTYpCisJCQkJCSB8ICgweDEgPDwgMjQpCS8qIHRpbWVvdXQgYml0LCBzZWUgSFNVIEVycmF0YSAxICovCisJCQkJCSApOworCWNoYW5fd3JpdGVsKHJ4YywgSFNVX0NIX0NSLCAweDMpOworCisJbW9kX3RpbWVyKCZyeGMtPnJ4X3RpbWVyLCBqaWZmaWVzICsgSFNVX0RNQV9USU1FT1VUX0NIRUNLX0ZSRVEpOworfQorCisvKiBQcm90ZWN0ZWQgYnkgc3Bpbl9sb2NrX2lycXNhdmUocG9ydC0+bG9jaykgKi8KK3N0YXRpYyB2b2lkIHNlcmlhbF9oc3Vfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCisJaWYgKHVwLT51c2VfZG1hKSB7CisJCWhzdV9kbWFfdHgodXApOworCX0gZWxzZSBpZiAoISh1cC0+aWVyICYgVUFSVF9JRVJfVEhSSSkpIHsKKwkJdXAtPmllciB8PSBVQVJUX0lFUl9USFJJOworCQlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgdXAtPmllcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfaHN1X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCXN0cnVjdCBoc3VfZG1hX2NoYW4gKnR4YyA9IHVwLT50eGM7CisKKwlpZiAodXAtPnVzZV9kbWEpCisJCWNoYW5fd3JpdGVsKHR4YywgSFNVX0NIX0NSLCAweDApOworCWVsc2UgaWYgKHVwLT5pZXIgJiBVQVJUX0lFUl9USFJJKSB7CisJCXVwLT5pZXIgJj0gflVBUlRfSUVSX1RIUkk7CisJCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKKwl9Cit9CisKKy8qIFRoaXMgaXMgYWx3YXlzIGNhbGxlZCBpbiBzcGlubG9jayBwcm90ZWN0ZWQgbW9kZSwgc28KKyAqIG1vZGlmeSB0aW1lb3V0IHRpbWVyIGlzIHNhZmUgaGVyZSAqLwordm9pZCBoc3VfZG1hX3J4KHN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCwgdTMyIGludF9zdHMpCit7CisJc3RydWN0IGhzdV9kbWFfYnVmZmVyICpkYnVmID0gJnVwLT5yeGJ1ZjsKKwlzdHJ1Y3QgaHN1X2RtYV9jaGFuICpjaGFuID0gdXAtPnJ4YzsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnVwLT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJaW50IGNvdW50OworCisJaWYgKCF0dHkpCisJCXJldHVybjsKKworCS8qCisJICogRmlyc3QgbmVlZCB0byBrbm93IGhvdyBtYW55IGlzIGFscmVhZHkgdHJhbnNmZXJyZWQsCisJICogdGhlbiBjaGVjayBpZiBpdHMgYSB0aW1lb3V0IERNQSBpcnEsIGFuZCByZXR1cm4KKwkgKiB0aGUgdHJhaWwgYnl0ZXMgb3V0LCBwdXNoIHRoZW0gdXAgYW5kIHJlZW5hYmxlIHRoZQorCSAqIGNoYW5uZWwKKwkgKi8KKworCS8qIFRpbWVvdXQgSVJRLCBuZWVkIHdhaXQgc29tZSB0aW1lLCBzZWUgRXJyYXRhIDIgKi8KKwlpZiAoaW50X3N0cyAmIDB4ZjAwKQorCQl1ZGVsYXkoMik7CisKKwkvKiBTdG9wIHRoZSBjaGFubmVsICovCisJY2hhbl93cml0ZWwoY2hhbiwgSFNVX0NIX0NSLCAweDApOworCisJY291bnQgPSBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9EMFNBUikgLSBkYnVmLT5kbWFfYWRkcjsKKwlpZiAoIWNvdW50KSB7CisJCS8qIFJlc3RhcnQgdGhlIGNoYW5uZWwgYmVmb3JlIHdlIGxlYXZlICovCisJCWNoYW5fd3JpdGVsKGNoYW4sIEhTVV9DSF9DUiwgMHgzKTsKKwkJcmV0dXJuOworCX0KKwlkZWxfdGltZXIoJmNoYW4tPnJ4X3RpbWVyKTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHBvcnQtPmRldiwgZGJ1Zi0+ZG1hX2FkZHIsCisJCQlkYnVmLT5kbWFfc2l6ZSwgRE1BX0ZST01fREVWSUNFKTsKKworCS8qCisJICogSGVhZCB3aWxsIG9ubHkgd3JhcCBhcm91bmQgd2hlbiB3ZSByZWN5Y2xlCisJICogdGhlIERNQSBidWZmZXIsIGFuZCB3aGVuIHRoYXQgaGFwcGVucywgd2UKKwkgKiBleHBsaWNpdGx5IHNldCB0YWlsIHRvIDAuIFNvIGhlYWQgd2lsbAorCSAqIGFsd2F5cyBiZSBncmVhdGVyIHRoYW4gdGFpbC4KKwkgKi8KKwl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGJ1Zi0+YnVmLCBjb3VudCk7CisJcG9ydC0+aWNvdW50LnJ4ICs9IGNvdW50OworCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UodXAtPnBvcnQuZGV2LCBkYnVmLT5kbWFfYWRkciwKKwkJCWRidWYtPmRtYV9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCisJLyogUmVwcm9ncmFtIHRoZSBjaGFubmVsICovCisJY2hhbl93cml0ZWwoY2hhbiwgSFNVX0NIX0QwU0FSLCBkYnVmLT5kbWFfYWRkcik7CisJY2hhbl93cml0ZWwoY2hhbiwgSFNVX0NIX0QwVFNSLCBkYnVmLT5kbWFfc2l6ZSk7CisJY2hhbl93cml0ZWwoY2hhbiwgSFNVX0NIX0RDUiwgMHgxCisJCQkJCSB8ICgweDEgPDwgOCkKKwkJCQkJIHwgKDB4MSA8PCAxNikKKwkJCQkJIHwgKDB4MSA8PCAyNCkJLyogdGltZW91dCBiaXQsIHNlZSBIU1UgRXJyYXRhIDEgKi8KKwkJCQkJICk7CisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCWNoYW5fd3JpdGVsKGNoYW4sIEhTVV9DSF9DUiwgMHgzKTsKKwljaGFuLT5yeF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhTVV9ETUFfVElNRU9VVF9DSEVDS19GUkVROworCWFkZF90aW1lcigmY2hhbi0+cnhfdGltZXIpOworCit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9oc3Vfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF9oc3VfcG9ydCwgcG9ydCk7CisJc3RydWN0IGhzdV9kbWFfY2hhbiAqY2hhbiA9IHVwLT5yeGM7CisKKwlpZiAodXAtPnVzZV9kbWEpCisJCWNoYW5fd3JpdGVsKGNoYW4sIEhTVV9DSF9DUiwgMHgyKTsKKwllbHNlIHsKKwkJdXAtPmllciAmPSB+VUFSVF9JRVJfUkxTSTsKKwkJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayAmPSB+VUFSVF9MU1JfRFI7CisJCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCwgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHVwLT5wb3J0LnN0YXRlLT5wb3J0LnR0eTsKKwl1bnNpZ25lZCBpbnQgY2gsIGZsYWc7CisJdW5zaWduZWQgaW50IG1heF9jb3VudCA9IDI1NjsKKworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlkbyB7CisJCWNoID0gc2VyaWFsX2luKHVwLCBVQVJUX1JYKTsKKwkJZmxhZyA9IFRUWV9OT1JNQUw7CisJCXVwLT5wb3J0Lmljb3VudC5yeCsrOworCisJCWlmICh1bmxpa2VseSgqc3RhdHVzICYgKFVBUlRfTFNSX0JJIHwgVUFSVF9MU1JfUEUgfAorCQkJCSAgICAgICBVQVJUX0xTUl9GRSB8IFVBUlRfTFNSX09FKSkpIHsKKworCQkJZGV2X3dhcm4odXAtPmRldiwgIldlIHJlYWxseSBydXNoIGludG8gRVJSL0JJIGNhc2UiCisJCQkJInN0YXR1cyA9IDB4JTAyeCIsICpzdGF0dXMpOworCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLworCQkJaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9CSSkgeworCQkJCSpzdGF0dXMgJj0gfihVQVJUX0xTUl9GRSB8IFVBUlRfTFNSX1BFKTsKKwkJCQl1cC0+cG9ydC5pY291bnQuYnJrKys7CisJCQkJLyoKKwkJCQkgKiBXZSBkbyB0aGUgU3lzUlEgYW5kIFNBSyBjaGVja2luZworCQkJCSAqIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGJyZWFrCisJCQkJICogbWF5IGdldCBtYXNrZWQgYnkgaWdub3JlX3N0YXR1c19tYXNrCisJCQkJICogb3IgcmVhZF9zdGF0dXNfbWFzay4KKwkJCQkgKi8KKwkJCQlpZiAodWFydF9oYW5kbGVfYnJlYWsoJnVwLT5wb3J0KSkKKwkJCQkJZ290byBpZ25vcmVfY2hhcjsKKwkJCX0gZWxzZSBpZiAoKnN0YXR1cyAmIFVBUlRfTFNSX1BFKQorCQkJCXVwLT5wb3J0Lmljb3VudC5wYXJpdHkrKzsKKwkJCWVsc2UgaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9GRSkKKwkJCQl1cC0+cG9ydC5pY291bnQuZnJhbWUrKzsKKwkJCWlmICgqc3RhdHVzICYgVUFSVF9MU1JfT0UpCisJCQkJdXAtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKKworCQkJLyogTWFzayBvZmYgY29uZGl0aW9ucyB3aGljaCBzaG91bGQgYmUgaWdub3JlZC4gKi8KKwkJCSpzdGF0dXMgJj0gdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzazsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfTUZEX0hTVV9DT05TT0xFCisJCQlpZiAodXAtPnBvcnQuY29ucyAmJgorCQkJCXVwLT5wb3J0LmNvbnMtPmluZGV4ID09IHVwLT5wb3J0LmxpbmUpIHsKKwkJCQkvKiBSZWNvdmVyIHRoZSBicmVhayBmbGFnIGZyb20gY29uc29sZSB4bWl0ICovCisJCQkJKnN0YXR1cyB8PSB1cC0+bHNyX2JyZWFrX2ZsYWc7CisJCQkJdXAtPmxzcl9icmVha19mbGFnID0gMDsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9CSSkgeworCQkJCWZsYWcgPSBUVFlfQlJFQUs7CisJCQl9IGVsc2UgaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9QRSkKKwkJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJCWVsc2UgaWYgKCpzdGF0dXMgJiBVQVJUX0xTUl9GRSkKKwkJCQlmbGFnID0gVFRZX0ZSQU1FOworCQl9CisKKwkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVwLT5wb3J0LCBjaCkpCisJCQlnb3RvIGlnbm9yZV9jaGFyOworCisJCXVhcnRfaW5zZXJ0X2NoYXIoJnVwLT5wb3J0LCAqc3RhdHVzLCBVQVJUX0xTUl9PRSwgY2gsIGZsYWcpOworCWlnbm9yZV9jaGFyOgorCQkqc3RhdHVzID0gc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisJfSB3aGlsZSAoKCpzdGF0dXMgJiBVQVJUX0xTUl9EUikgJiYgbWF4X2NvdW50LS0pOworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCkKK3sKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmdXAtPnBvcnQuc3RhdGUtPnhtaXQ7CisJaW50IGNvdW50OworCisJaWYgKHVwLT5wb3J0LnhfY2hhcikgeworCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCB1cC0+cG9ydC54X2NoYXIpOworCQl1cC0+cG9ydC5pY291bnQudHgrKzsKKwkJdXAtPnBvcnQueF9jaGFyID0gMDsKKwkJcmV0dXJuOworCX0KKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpIHx8IHVhcnRfdHhfc3RvcHBlZCgmdXAtPnBvcnQpKSB7CisJCXNlcmlhbF9oc3Vfc3RvcF90eCgmdXAtPnBvcnQpOworCQlyZXR1cm47CisJfQorCisjaWZuZGVmIE1GRF9IU1VfQTBfU1RFUFBJTkcKKwljb3VudCA9IHVwLT5wb3J0LmZpZm9zaXplIC8gMjsKKyNlbHNlCisJLyoKKwkgKiBBMCBvbmx5IHN1cHBvcnRzIGZ1bGx5IGVtcHR5IElSUSwgYW5kIHRoZSBmaXJzdCBjaGFyIHdyaXR0ZW4KKwkgKiBpbnRvIGl0IHdvbid0IGNsZWFyIHRoZSBFTVBUIGJpdCwgc28gd2UgbWF5IG5lZWQgYmUgY2F1dGlvdXMKKwkgKiBieSB1c2VpbmcgYSBzaG9ydGVyIGJ1ZmZlcgorCSAqLworCWNvdW50ID0gdXAtPnBvcnQuZmlmb3NpemUgLSA0OworI2VuZGlmCisJZG8geworCQlzZXJpYWxfb3V0KHVwLCBVQVJUX1RYLCB4bWl0LT5idWZbeG1pdC0+dGFpbF0pOworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCisJCXVwLT5wb3J0Lmljb3VudC50eCsrOworCQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS1jb3VudCA+IDApOworCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cCgmdXAtPnBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJc2VyaWFsX2hzdV9zdG9wX3R4KCZ1cC0+cG9ydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19tb2RlbV9zdGF0dXMoc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBzZXJpYWxfaW4odXAsIFVBUlRfTVNSKTsKKworCWlmICgoc3RhdHVzICYgVUFSVF9NU1JfQU5ZX0RFTFRBKSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoc3RhdHVzICYgVUFSVF9NU1JfVEVSSSkKKwkJdXAtPnBvcnQuaWNvdW50LnJuZysrOworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9ERFNSKQorCQl1cC0+cG9ydC5pY291bnQuZHNyKys7CisJLyogV2UgbWF5IG9ubHkgZ2V0IEREQ0Qgd2hlbiBIVyBpbml0IGFuZCByZXNldCAqLworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9ERENEKQorCQl1YXJ0X2hhbmRsZV9kY2RfY2hhbmdlKCZ1cC0+cG9ydCwgc3RhdHVzICYgVUFSVF9NU1JfRENEKTsKKwkvKiBXaWxsIHN0YXJ0L3N0b3BfdHggYWNjb3JkaW5nbHkgKi8KKwlpZiAoc3RhdHVzICYgVUFSVF9NU1JfRENUUykKKwkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZSgmdXAtPnBvcnQsIHN0YXR1cyAmIFVBUlRfTVNSX0NUUyk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnVwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21zcl93YWl0KTsKK30KKworLyoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgaW50ZXJydXB0IGZyb20gb25lIHBvcnQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwb3J0X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0gZGV2X2lkOworCXVuc2lnbmVkIGludCBpaXIsIGxzcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHVubGlrZWx5KCF1cC0+cnVubmluZykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJaWYgKHVwLT51c2VfZG1hKSB7CisJCWxzciA9IHNlcmlhbF9pbih1cCwgVUFSVF9MU1IpOworCQlpZiAodW5saWtlbHkobHNyICYgKFVBUlRfTFNSX0JJIHwgVUFSVF9MU1JfUEUgfAorCQkJCSAgICAgICBVQVJUX0xTUl9GRSB8IFVBUlRfTFNSX09FKSkpCisJCQlkZXZfd2Fybih1cC0+ZGV2LAorCQkJCSJHb3QgbHNyIGlycSB3aGlsZSB1c2luZyBETUEsIGxzciA9IDB4JTJ4XG4iLAorCQkJCWxzcik7CisJCWNoZWNrX21vZGVtX3N0YXR1cyh1cCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlpciA9IHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOworCWlmIChpaXIgJiBVQVJUX0lJUl9OT19JTlQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJbHNyID0gc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisJaWYgKGxzciAmIFVBUlRfTFNSX0RSKQorCQlyZWNlaXZlX2NoYXJzKHVwLCAmbHNyKTsKKwljaGVja19tb2RlbV9zdGF0dXModXApOworCisJLyogbHNyIHdpbGwgYmUgcmVuZXdlZCBkdXJpbmcgdGhlIHJlY2VpdmVfY2hhcnMgKi8KKwlpZiAobHNyICYgVUFSVF9MU1JfVEhSRSkKKwkJdHJhbnNtaXRfY2hhcnModXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9jaGFuX2lycShzdHJ1Y3QgaHN1X2RtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9IGNoYW4tPnVwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGludF9zdHM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCisJaWYgKCF1cC0+dXNlX2RtYSB8fCAhdXAtPnJ1bm5pbmcpCisJCWdvdG8gZXhpdDsKKworCS8qCisJICogTm8gbWF0dGVyIHdoYXQgc2l0dWF0aW9uLCBuZWVkIHJlYWQgY2xlYXIgdGhlIElSUSBzdGF0dXMKKwkgKiBUaGVyZSBpcyBhIGJ1Zywgc2VlIEVycmF0YSA1LCBIU0QgMjkwMDkxOAorCSAqLworCWludF9zdHMgPSBjaGFuX3JlYWRsKGNoYW4sIEhTVV9DSF9TUik7CisKKwkvKiBSeCBjaGFubmVsICovCisJaWYgKGNoYW4tPmRpcnQgPT0gRE1BX0ZST01fREVWSUNFKQorCQloc3VfZG1hX3J4KHVwLCBpbnRfc3RzKTsKKworCS8qIFR4IGNoYW5uZWwgKi8KKwlpZiAoY2hhbi0+ZGlydCA9PSBETUFfVE9fREVWSUNFKSB7CisJCWNoYW5fd3JpdGVsKGNoYW4sIEhTVV9DSF9DUiwgMHgwKTsKKwkJdXAtPmRtYV90eF9vbiA9IDA7CisJCWhzdV9kbWFfdHgodXApOworCX0KKworZXhpdDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGhzdV9wb3J0ICpoc3UgPSBkZXZfaWQ7CisJdTMyIGludF9zdHMsIGk7CisKKwlpbnRfc3RzID0gbWZkX3JlYWRsKGhzdSwgSFNVX0dCTF9ETUFJU1IpOworCisJLyogQ3VycmVudGx5IHdlIG9ubHkgaGF2ZSA2IGNoYW5uZWxzIG1heSBiZSB1c2VkICovCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlpZiAoaW50X3N0cyAmIDB4MSkKKwkJCWRtYV9jaGFuX2lycSgmaHN1LT5jaGFuc1tpXSk7CisJCWludF9zdHMgPj49IDE7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF9oc3VfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJcmV0ID0gc2VyaWFsX2luKHVwLCBVQVJUX0xTUikgJiBVQVJUX0xTUl9URU1UID8gVElPQ1NFUl9URU1UIDogMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNlcmlhbF9oc3VfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X2hzdV9wb3J0LCBwb3J0KTsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJc3RhdHVzID0gc2VyaWFsX2luKHVwLCBVQVJUX01TUik7CisKKwlyZXQgPSAwOworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EQ0QpCisJCXJldCB8PSBUSU9DTV9DQVI7CisJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX1JJKQorCQlyZXQgfD0gVElPQ01fUk5HOworCWlmIChzdGF0dXMgJiBVQVJUX01TUl9EU1IpCisJCXJldCB8PSBUSU9DTV9EU1I7CisJaWYgKHN0YXR1cyAmIFVBUlRfTVNSX0NUUykKKwkJcmV0IHw9IFRJT0NNX0NUUzsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfaHN1X3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X2hzdV9wb3J0LCBwb3J0KTsKKwl1bnNpZ25lZCBjaGFyIG1jciA9IDA7CisKKwlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCisJCW1jciB8PSBVQVJUX01DUl9SVFM7CisJaWYgKG1jdHJsICYgVElPQ01fRFRSKQorCQltY3IgfD0gVUFSVF9NQ1JfRFRSOworCWlmIChtY3RybCAmIFRJT0NNX09VVDEpCisJCW1jciB8PSBVQVJUX01DUl9PVVQxOworCWlmIChtY3RybCAmIFRJT0NNX09VVDIpCisJCW1jciB8PSBVQVJUX01DUl9PVVQyOworCWlmIChtY3RybCAmIFRJT0NNX0xPT1ApCisJCW1jciB8PSBVQVJUX01DUl9MT09QOworCisJbWNyIHw9IHVwLT5tY3I7CisKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX01DUiwgbWNyKTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2hzdV9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF9oc3VfcG9ydCwgcG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQl1cC0+bGNyIHw9IFVBUlRfTENSX1NCQzsKKwllbHNlCisJCXVwLT5sY3IgJj0gflVBUlRfTENSX1NCQzsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgdXAtPmxjcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworfQorCisvKgorICogV2hhdCBzcGVjaWFsIHRvIGRvOgorICogMS4gY2hvc2UgdGhlIDY0QiBmaWZvIG1vZGUKKyAqIDIuIG1ha2Ugc3VyZSBub3QgdG8gc2VsZWN0IGhhbGYgZW1wdHkgbW9kZSBmb3IgQTAgc3RlcHBpbmcKKyAqIDMuIHN0YXJ0IGRtYSBvciBwaW8gZGVwZW5kcyBvbiBjb25maWd1cmF0aW9uCisgKiA0LiB3ZSBvbmx5IGFsbG9jYXRlIGRtYSBtZW1vcnkgd2hlbiBuZWVkZWQKKyAqLworc3RhdGljIGludCBzZXJpYWxfaHN1X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIENsZWFyIHRoZSBGSUZPIGJ1ZmZlcnMgYW5kIGRpc2FibGUgdGhlbS4KKwkgKiAodGhleSB3aWxsIGJlIHJlZW5hYmxlZCBpbiBzZXRfdGVybWlvcygpKQorCSAqLworCXNlcmlhbF9vdXQodXAsIFVBUlRfRkNSLCBVQVJUX0ZDUl9FTkFCTEVfRklGTyk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9GQ1IsIFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwKKwkJCVVBUlRfRkNSX0NMRUFSX1JDVlIgfCBVQVJUX0ZDUl9DTEVBUl9YTUlUKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0ZDUiwgMCk7CisKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0IHJlZ2lzdGVycy4gKi8KKwkodm9pZCkgc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisJKHZvaWQpIHNlcmlhbF9pbih1cCwgVUFSVF9SWCk7CisJKHZvaWQpIHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOworCSh2b2lkKSBzZXJpYWxfaW4odXAsIFVBUlRfTVNSKTsKKworCS8qIE5vdywgaW5pdGlhbGl6ZSB0aGUgVUFSVCwgZGVmYXVsdCBpcyA4bjEgKi8KKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgVUFSVF9MQ1JfV0xFTjgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKworCXVwLT5wb3J0Lm1jdHJsIHw9IFRJT0NNX09VVDI7CisJc2VyaWFsX2hzdV9zZXRfbWN0cmwoJnVwLT5wb3J0LCB1cC0+cG9ydC5tY3RybCk7CisKKwkvKgorCSAqIEZpbmFsbHksIGVuYWJsZSBpbnRlcnJ1cHRzLiAgTm90ZTogTW9kZW0gc3RhdHVzIGludGVycnVwdHMKKwkgKiBhcmUgc2V0IHZpYSBzZXRfdGVybWlvcygpLCB3aGljaCB3aWxsIGJlIG9jY3VycmluZyBpbW1pbmVudGx5CisJICogYW55d2F5LCBzbyB3ZSBkb24ndCBlbmFibGUgdGhlbSBoZXJlLgorCSAqLworCWlmICghdXAtPnVzZV9kbWEpCisJCXVwLT5pZXIgPSBVQVJUX0lFUl9STFNJIHwgVUFSVF9JRVJfUkRJIHwgVUFSVF9JRVJfUlRPSUU7CisJZWxzZQorCQl1cC0+aWVyID0gMDsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgdXAtPmllcik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwkvKiBETUEgaW5pdCAqLworCWlmICh1cC0+dXNlX2RtYSkgeworCQlzdHJ1Y3QgaHN1X2RtYV9idWZmZXIgKmRidWY7CisJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKworCQl1cC0+ZG1hX3R4X29uID0gMDsKKworCQkvKiBGaXJzdCBhbGxvY2F0ZSB0aGUgUlggYnVmZmVyICovCisJCWRidWYgPSAmdXAtPnJ4YnVmOworCQlkYnVmLT5idWYgPSBremFsbG9jKEhTVV9ETUFfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIWRidWYtPmJ1ZikgeworCQkJdXAtPnVzZV9kbWEgPSAwOworCQkJZ290byBleGl0OworCQl9CisJCWRidWYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocG9ydC0+ZGV2LAorCQkJCQkJZGJ1Zi0+YnVmLAorCQkJCQkJSFNVX0RNQV9CVUZfU0laRSwKKwkJCQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWRidWYtPmRtYV9zaXplID0gSFNVX0RNQV9CVUZfU0laRTsKKworCQkvKiBTdGFydCB0aGUgUlggY2hhbm5lbCByaWdodCBub3cgKi8KKwkJaHN1X2RtYV9zdGFydF9yeF9jaGFuKHVwLT5yeGMsIGRidWYpOworCisJCS8qIE5leHQgaW5pdCB0aGUgVFggRE1BICovCisJCWRidWYgPSAmdXAtPnR4YnVmOworCQlkYnVmLT5idWYgPSB4bWl0LT5idWY7CisJCWRidWYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocG9ydC0+ZGV2LAorCQkJCQkgICAgICAgZGJ1Zi0+YnVmLAorCQkJCQkgICAgICAgVUFSVF9YTUlUX1NJWkUsCisJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJZGJ1Zi0+ZG1hX3NpemUgPSBVQVJUX1hNSVRfU0laRTsKKworCQkvKiBUaGlzIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhbGwgYXJvdW5kICovCisJCWNoYW5fd3JpdGVsKHVwLT50eGMsIEhTVV9DSF9CU1IsIDMyKTsKKwkJY2hhbl93cml0ZWwodXAtPnR4YywgSFNVX0NIX01PVFNSLCA0KTsKKwkJZGJ1Zi0+b2ZzID0gMDsKKwl9CisKK2V4aXQ6CisJIC8qIEFuZCBjbGVhciB0aGUgaW50ZXJydXB0IHJlZ2lzdGVycyBhZ2FpbiBmb3IgbHVjay4gKi8KKwkodm9pZCkgc2VyaWFsX2luKHVwLCBVQVJUX0xTUik7CisJKHZvaWQpIHNlcmlhbF9pbih1cCwgVUFSVF9SWCk7CisJKHZvaWQpIHNlcmlhbF9pbih1cCwgVUFSVF9JSVIpOworCSh2b2lkKSBzZXJpYWxfaW4odXAsIFVBUlRfTVNSKTsKKworCXVwLT5ydW5uaW5nID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2hzdV9zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF9oc3VfcG9ydCwgcG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRlbF90aW1lcl9zeW5jKCZ1cC0+cnhjLT5yeF90aW1lcik7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgZnJvbSB0aGlzIHBvcnQgKi8KKwl1cC0+aWVyID0gMDsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgMCk7CisJdXAtPnJ1bm5pbmcgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKwl1cC0+cG9ydC5tY3RybCAmPSB+VElPQ01fT1VUMjsKKwlzZXJpYWxfaHN1X3NldF9tY3RybCgmdXAtPnBvcnQsIHVwLT5wb3J0Lm1jdHJsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwkvKiBEaXNhYmxlIGJyZWFrIGNvbmRpdGlvbiBhbmQgRklGT3MgKi8KKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgc2VyaWFsX2luKHVwLCBVQVJUX0xDUikgJiB+VUFSVF9MQ1JfU0JDKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0ZDUiwgVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfAorCQkJCSAgVUFSVF9GQ1JfQ0xFQVJfUkNWUiB8CisJCQkJICBVQVJUX0ZDUl9DTEVBUl9YTUlUKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0ZDUiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJpYWxfaHN1X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywKKwkJICAgICAgIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9CisJCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJdW5zaWduZWQgY2hhciBjdmFsLCBmY3IgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CisJdTMyIG11bCA9IDB4MzYwMDsKKwl1MzIgcHMgPSAweDEwOworCisJc3dpdGNoICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJY3ZhbCA9IFVBUlRfTENSX1dMRU41OworCQlicmVhazsKKwljYXNlIENTNjoKKwkJY3ZhbCA9IFVBUlRfTENSX1dMRU42OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJY3ZhbCA9IFVBUlRfTENSX1dMRU43OworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgQ1M4OgorCQljdmFsID0gVUFSVF9MQ1JfV0xFTjg7CisJCWJyZWFrOworCX0KKworCS8qIENNU1BBUiBpc24ndCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KKwlpZiAodHR5KQorCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKKworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQorCQljdmFsIHw9IFVBUlRfTENSX1NUT1A7CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpCisJCWN2YWwgfD0gVUFSVF9MQ1JfUEFSSVRZOworCWlmICghKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpKQorCQljdmFsIHw9IFVBUlRfTENSX0VQQVI7CisKKwkvKgorCSAqIEZvciB0aG9zZSBiYXNpYyBsb3cgYmF1ZCByYXRlIHdlIGNhbiBnZXQgdGhlIGRpcmVjdAorCSAqIHNjYWxhciBmcm9tIDI3NDY4MDAsIGxpa2UgMTE1MjAwID0gMjc0NjgwMC8yNCwgZm9yIHRob3NlCisJICogaGlnaGVyIGJhdWQgcmF0ZSwgd2UgaGF2ZSB0byBoYW5kbGUgdGhlbSBjYXNlIGJ5IGNhc2UsCisJICogYnV0IERJViByZWcgaXMgbmV2ZXIgdG91Y2hlZCBhcyBpdHMgZGVmYXVsdCB2YWx1ZSAweDNkMDkKKwkgKi8KKwliYXVkID0gdWFydF9nZXRfYmF1ZF9yYXRlKHBvcnQsIHRlcm1pb3MsIG9sZCwgMCwgNDAwMDAwMCk7CisJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CisKKwlzd2l0Y2ggKGJhdWQpIHsKKwljYXNlIDM1MDAwMDA6CisJCW11bCA9IDB4MzM0NTsKKwkJcHMgPSAweEM7CisJCXF1b3QgPSAxOworCQlicmVhazsKKwljYXNlIDI1MDAwMDA6CisJCW11bCA9IDB4MjcxMDsKKwkJcHMgPSAweDEwOworCQlxdW90ID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxODQzMjAwMDoKKwkJbXVsID0gMHgyNDAwOworCQlwcyA9IDB4MTA7CisJCXF1b3QgPSAxOworCQlicmVhazsKKwljYXNlIDE1MDAwMDA6CisJCW11bCA9IDB4MUQ0QzsKKwkJcHMgPSAweGM7CisJCXF1b3QgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCisJaWYgKCh1cC0+cG9ydC51YXJ0Y2xrIC8gcXVvdCkgPCAoMjQwMCAqIDE2KSkKKwkJZmNyID0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9IU1VfNjRfMUI7CisJZWxzZSBpZiAoKHVwLT5wb3J0LnVhcnRjbGsgLyBxdW90KSA8ICgyMzA0MDAgKiAxNikpCisJCWZjciA9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfSFNVXzY0XzE2QjsKKwllbHNlCisJCWZjciA9IFVBUlRfRkNSX0VOQUJMRV9GSUZPIHwgVUFSVF9GQ1JfSFNVXzY0XzMyQjsKKworCWZjciB8PSBVQVJUX0ZDUl9IU1VfNjRCX0ZJRk87CisjaWZkZWYgTUZEX0hTVV9BMF9TVEVQUElORworCS8qIEEwIGRvZXNuJ3Qgc3VwcG9ydCBoYWxmIGVtcHR5IElSUSAqLworCWZjciB8PSBVQVJUX0ZDUl9GVUxMX0VNUFRfVFhJOworI2VuZGlmCisKKwkvKgorCSAqIE9rLCB3ZSdyZSBub3cgY2hhbmdpbmcgdGhlIHBvcnQgc3RhdGUuICBEbyBpdCB3aXRoCisJICogaW50ZXJydXB0cyBkaXNhYmxlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworCisJLyogVXBkYXRlIHRoZSBwZXItcG9ydCB0aW1lb3V0ICovCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKKworCXVwLT5wb3J0LnJlYWRfc3RhdHVzX21hc2sgPSBVQVJUX0xTUl9PRSB8IFVBUlRfTFNSX1RIUkUgfCBVQVJUX0xTUl9EUjsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElOUENLKQorCQl1cC0+cG9ydC5yZWFkX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0ZFIHwgVUFSVF9MU1JfUEU7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiAoQlJLSU5UIHwgUEFSTVJLKSkKKwkJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9CSTsKKworCS8qIENoYXJhY3RlcnMgdG8gaWdub3JlICovCisJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX1BFIHwgVUFSVF9MU1JfRkU7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05CUkspIHsKKwkJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX0JJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJdXAtPnBvcnQuaWdub3JlX3N0YXR1c19tYXNrIHw9IFVBUlRfTFNSX09FOworCX0KKworCS8qIElnbm9yZSBhbGwgY2hhcmFjdGVycyBpZiBDUkVBRCBpcyBub3Qgc2V0ICovCisJaWYgKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JFQUQpID09IDApCisJCXVwLT5wb3J0Lmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX0xTUl9EUjsKKworCS8qCisJICogQ1RTIGZsb3cgY29udHJvbCBmbGFnIGFuZCBtb2RlbSBzdGF0dXMgaW50ZXJydXB0cywgZGlzYWJsZQorCSAqIE1TSSBieSBkZWZhdWx0CisJICovCisJdXAtPmllciAmPSB+VUFSVF9JRVJfTVNJOworCWlmIChVQVJUX0VOQUJMRV9NUygmdXAtPnBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcpKQorCQl1cC0+aWVyIHw9IFVBUlRfSUVSX01TSTsKKworCXNlcmlhbF9vdXQodXAsIFVBUlRfSUVSLCB1cC0+aWVyKTsKKworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykKKwkJdXAtPm1jciB8PSBVQVJUX01DUl9BRkUgfCBVQVJUX01DUl9SVFM7CisJZWxzZQorCQl1cC0+bWNyICY9IH5VQVJUX01DUl9BRkU7CisKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0xDUiwgY3ZhbCB8IFVBUlRfTENSX0RMQUIpOwkvKiBzZXQgRExBQiAqLworCXNlcmlhbF9vdXQodXAsIFVBUlRfRExMLCBxdW90ICYgMHhmZik7CQkvKiBMUyBvZiBkaXZpc29yICovCisJc2VyaWFsX291dCh1cCwgVUFSVF9ETE0sIHF1b3QgPj4gOCk7CQkvKiBNUyBvZiBkaXZpc29yICovCisJc2VyaWFsX291dCh1cCwgVUFSVF9MQ1IsIGN2YWwpOwkJCS8qIHJlc2V0IERMQUIgKi8KKwlzZXJpYWxfb3V0KHVwLCBVQVJUX01VTCwgbXVsKTsJCQkvKiBzZXQgTVVMICovCisJc2VyaWFsX291dCh1cCwgVUFSVF9QUywgcHMpOwkJCS8qIHNldCBQUyAqLworCXVwLT5sY3IgPSBjdmFsOwkJCQkJLyogU2F2ZSBMQ1IgKi8KKwlzZXJpYWxfaHN1X3NldF9tY3RybCgmdXAtPnBvcnQsIHVwLT5wb3J0Lm1jdHJsKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0ZDUiwgZmNyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJpYWxfaHN1X3BtKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBzdGF0ZSwKKwkgICAgICB1bnNpZ25lZCBpbnQgb2xkc3RhdGUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9oc3VfcmVsZWFzZV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2hzdV9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2hzdV9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X2hzdV9wb3J0LCBwb3J0KTsKKwl1cC0+cG9ydC50eXBlID0gUE9SVF9NRkQ7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbF9oc3VfdmVyaWZ5X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwkvKiBXZSBkb24ndCB3YW50IHRoZSBjb3JlIGNvZGUgdG8gbW9kaWZ5IGFueSBwb3J0IHBhcmFtcyAqLworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzZXJpYWxfaHN1X3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfaHN1X3BvcnQsIHBvcnQpOworCXJldHVybiB1cC0+bmFtZTsKK30KKworLyogTWFpbmx5IGZvciB1YXJ0IGNvbnNvbGUgdXNlICovCitzdGF0aWMgc3RydWN0IHVhcnRfaHN1X3BvcnQgKnNlcmlhbF9oc3VfcG9ydHNbM107CitzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNlcmlhbF9oc3VfcmVnOworCisjaWZkZWYgQ09ORklHX1NFUklBTF9NRkRfSFNVX0NPTlNPTEUKKworI2RlZmluZSBCT1RIX0VNUFRZIChVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKKworLyogV2FpdCBmb3IgdHJhbnNtaXR0ZXIgJiBob2xkaW5nIHJlZ2lzdGVyIHRvIGVtcHR5ICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfeG1pdHIoc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwKQoreworCXVuc2lnbmVkIGludCBzdGF0dXMsIHRtb3V0ID0gMTAwMDsKKworCS8qIFdhaXQgdXAgdG8gMW1zIGZvciB0aGUgY2hhcmFjdGVyIHRvIGJlIHNlbnQuICovCisJZG8geworCQlzdGF0dXMgPSBzZXJpYWxfaW4odXAsIFVBUlRfTFNSKTsKKworCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfQkkpCisJCQl1cC0+bHNyX2JyZWFrX2ZsYWcgPSBVQVJUX0xTUl9CSTsKKworCQlpZiAoLS10bW91dCA9PSAwKQorCQkJYnJlYWs7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICghKHN0YXR1cyAmIEJPVEhfRU1QVFkpKTsKKworCS8qIFdhaXQgdXAgdG8gMXMgZm9yIGZsb3cgY29udHJvbCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfQ09OU19GTE9XKSB7CisJCXRtb3V0ID0gMTAwMDAwMDsKKwkJd2hpbGUgKC0tdG1vdXQgJiYKKwkJICAgICAgICgoc2VyaWFsX2luKHVwLCBVQVJUX01TUikgJiBVQVJUX01TUl9DVFMpID09IDApKQorCQkJdWRlbGF5KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgc2VyaWFsX2hzdV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cCA9CisJCWNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF9oc3VfcG9ydCwgcG9ydCk7CisKKwl3YWl0X2Zvcl94bWl0cih1cCk7CisJc2VyaWFsX291dCh1cCwgVUFSVF9UWCwgY2gpOworfQorCisvKgorICogUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNlcmlhbCBwb3J0IHRyeWluZyBub3QgdG8gZGlzdHVyYgorICogYW55IHBvc3NpYmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCisgKgorICoJVGhlIGNvbnNvbGVfbG9jayBtdXN0IGJlIGhlbGQgd2hlbiB3ZSBnZXQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQKK3NlcmlhbF9oc3VfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPSBzZXJpYWxfaHN1X3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaWVyOworCWludCBsb2NrZWQgPSAxOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmICh1cC0+cG9ydC5zeXNycSkKKwkJbG9ja2VkID0gMDsKKwllbHNlIGlmIChvb3BzX2luX3Byb2dyZXNzKSB7CisJCWxvY2tlZCA9IHNwaW5fdHJ5bG9jaygmdXAtPnBvcnQubG9jayk7CisJfSBlbHNlCisJCXNwaW5fbG9jaygmdXAtPnBvcnQubG9jayk7CisKKwkvKiBGaXJzdCBzYXZlIHRoZSBJRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzICovCisJaWVyID0gc2VyaWFsX2luKHVwLCBVQVJUX0lFUik7CisJc2VyaWFsX291dCh1cCwgVUFSVF9JRVIsIDApOworCisJdWFydF9jb25zb2xlX3dyaXRlKCZ1cC0+cG9ydCwgcywgY291bnQsIHNlcmlhbF9oc3VfY29uc29sZV9wdXRjaGFyKTsKKworCS8qCisJICogRmluYWxseSwgd2FpdCBmb3IgdHJhbnNtaXR0ZXIgdG8gYmVjb21lIGVtcHR5CisJICogYW5kIHJlc3RvcmUgdGhlIElFUgorCSAqLworCXdhaXRfZm9yX3htaXRyKHVwKTsKKwlzZXJpYWxfb3V0KHVwLCBVQVJUX0lFUiwgaWVyKTsKKworCWlmIChsb2NrZWQpCisJCXNwaW5fdW5sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzZXJpYWxfaHN1X2NvbnNvbGU7CisKK3N0YXRpYyBpbnQgX19pbml0CitzZXJpYWxfaHN1X2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cDsKKwlpbnQgYmF1ZCA9IDExNTIwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKwlpbnQgcmV0OworCisJaWYgKGNvLT5pbmRleCA9PSAtMSB8fCBjby0+aW5kZXggPj0gc2VyaWFsX2hzdV9yZWcubnIpCisJCWNvLT5pbmRleCA9IDA7CisJdXAgPSBzZXJpYWxfaHN1X3BvcnRzW2NvLT5pbmRleF07CisJaWYgKCF1cCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCisJcmV0ID0gdWFydF9zZXRfb3B0aW9ucygmdXAtPnBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjb25zb2xlIHNlcmlhbF9oc3VfY29uc29sZSA9IHsKKwkubmFtZQkJPSAidHR5TUZEIiwKKwkud3JpdGUJCT0gc2VyaWFsX2hzdV9jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UJCT0gdWFydF9jb25zb2xlX2RldmljZSwKKwkuc2V0dXAJCT0gc2VyaWFsX2hzdV9jb25zb2xlX3NldHVwLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4CQk9IDIsCisJLmRhdGEJCT0gJnNlcmlhbF9oc3VfcmVnLAorfTsKKyNlbmRpZgorCitzdHJ1Y3QgdWFydF9vcHMgc2VyaWFsX2hzdV9wb3BzID0geworCS50eF9lbXB0eQk9IHNlcmlhbF9oc3VfdHhfZW1wdHksCisJLnNldF9tY3RybAk9IHNlcmlhbF9oc3Vfc2V0X21jdHJsLAorCS5nZXRfbWN0cmwJPSBzZXJpYWxfaHN1X2dldF9tY3RybCwKKwkuc3RvcF90eAk9IHNlcmlhbF9oc3Vfc3RvcF90eCwKKwkuc3RhcnRfdHgJPSBzZXJpYWxfaHN1X3N0YXJ0X3R4LAorCS5zdG9wX3J4CT0gc2VyaWFsX2hzdV9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBzZXJpYWxfaHN1X2VuYWJsZV9tcywKKwkuYnJlYWtfY3RsCT0gc2VyaWFsX2hzdV9icmVha19jdGwsCisJLnN0YXJ0dXAJPSBzZXJpYWxfaHN1X3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc2VyaWFsX2hzdV9zaHV0ZG93biwKKwkuc2V0X3Rlcm1pb3MJPSBzZXJpYWxfaHN1X3NldF90ZXJtaW9zLAorCS5wbQkJPSBzZXJpYWxfaHN1X3BtLAorCS50eXBlCQk9IHNlcmlhbF9oc3VfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gc2VyaWFsX2hzdV9yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydAk9IHNlcmlhbF9oc3VfcmVxdWVzdF9wb3J0LAorCS5jb25maWdfcG9ydAk9IHNlcmlhbF9oc3VfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gc2VyaWFsX2hzdV92ZXJpZnlfcG9ydCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX2hzdV9yZWcgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQk9ICJNRkQgc2VyaWFsIiwKKwkuZGV2X25hbWUJPSAidHR5TUZEIiwKKwkubWFqb3IJCT0gVFRZX01BSk9SLAorCS5taW5vcgkJPSAxMjgsCisJLm5yCQk9IDMsCit9OworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNlcmlhbF9oc3Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXZvaWQgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwOworCisJLyogTWFrZSBzdXJlIHRoaXMgaXMgbm90IHRoZSBpbnRlcm5hbCBkbWEgY29udHJvbGxlciAqLworCWlmIChwcml2ICYmIChwZGV2LT5kZXZpY2UgIT0gMHgwODFFKSkgeworCQl1cCA9IHByaXY7CisJCXVhcnRfc3VzcGVuZF9wb3J0KCZzZXJpYWxfaHN1X3JlZywgJnVwLT5wb3J0KTsKKwl9CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX2hzdV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdm9pZCAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXA7CisJaW50IHJldDsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkiSFNVOiBjYW4ndCByZS1lbmFibGUgZGV2aWNlLCB0cnkgdG8gY29udGludWVcbiIpOworCisJaWYgKHByaXYgJiYgKHBkZXYtPmRldmljZSAhPSAweDA4MUUpKSB7CisJCXVwID0gcHJpdjsKKwkJdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsX2hzdV9yZWcsICZ1cC0+cG9ydCk7CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgc2VyaWFsX2hzdV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgc2VyaWFsX2hzdV9yZXN1bWUJTlVMTAorI2VuZGlmCisKKy8qIHRlbXAgZ2xvYmFsIHBvaW50ZXIgYmVmb3JlIHdlIHNldHRsZSBkb3duIG9uIHVzaW5nIG9uZSBvciBmb3VyIFBDSSBkZXYgKi8KK3N0YXRpYyBzdHJ1Y3QgaHN1X3BvcnQgKnBoc3U7CisKK3N0YXRpYyBpbnQgc2VyaWFsX2hzdV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCB1YXJ0X2hzdV9wb3J0ICp1cG9ydDsKKwlpbnQgaW5kZXgsIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIkhTVTogZm91bmQgUENJIFNlcmlhbCBjb250cm9sbGVyKElEOiAlMDR4OiUwNHgpXG4iLAorCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CisKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgMHgwODFCOgorCQlpbmRleCA9IDA7CisJCWJyZWFrOworCWNhc2UgMHgwODFDOgorCQlpbmRleCA9IDE7CisJCWJyZWFrOworCWNhc2UgMHgwODFEOgorCQlpbmRleCA9IDI7CisJCWJyZWFrOworCWNhc2UgMHgwODFFOgorCQkvKiBpbnRlcm5hbCBETUEgY29udHJvbGxlciAqLworCQlpbmRleCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkhTVTogb3V0IG9mIGluZGV4ISIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGluZGV4ID09IDMpIHsKKwkJLyogRE1BIGNvbnRyb2xsZXIgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBkbWFfaXJxLCAwLCAiaHN1X2RtYSIsIHBoc3UpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQkJZ290byBlcnJfZGlzYWJsZTsKKwkJfQorCQlwY2lfc2V0X2RydmRhdGEocGRldiwgcGhzdSk7CisJfSBlbHNlIHsKKwkJLyogVUFSVCBwb3J0IDB+MiAqLworCQl1cG9ydCA9ICZwaHN1LT5wb3J0W2luZGV4XTsKKwkJdXBvcnQtPnBvcnQuaXJxID0gcGRldi0+aXJxOworCQl1cG9ydC0+cG9ydC5kZXYgPSAmcGRldi0+ZGV2OworCQl1cG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKKworCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBvcnRfaXJxLCAwLCB1cG9ydC0+bmFtZSwgdXBvcnQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4gbm90IGdldCBJUlFcbiIpOworCQkJZ290byBlcnJfZGlzYWJsZTsKKwkJfQorCQl1YXJ0X2FkZF9vbmVfcG9ydCgmc2VyaWFsX2hzdV9yZWcsICZ1cG9ydC0+cG9ydCk7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX01GRF9IU1VfQ09OU09MRQorCQlpZiAoaW5kZXggPT0gMikgeworCQkJcmVnaXN0ZXJfY29uc29sZSgmc2VyaWFsX2hzdV9jb25zb2xlKTsKKwkJCXVwb3J0LT5wb3J0LmNvbnMgPSAmc2VyaWFsX2hzdV9jb25zb2xlOworCQl9CisjZW5kaWYKKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHVwb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhzdV9kbWFfcnhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGhzdV9kbWFfY2hhbiAqY2hhbiA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgdWFydF9oc3VfcG9ydCAqdXAgPSBjaGFuLT51cG9ydDsKKwlzdHJ1Y3QgaHN1X2RtYV9idWZmZXIgKmRidWYgPSAmdXAtPnJ4YnVmOworCWludCBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwljb3VudCA9IGNoYW5fcmVhZGwoY2hhbiwgSFNVX0NIX0QwU0FSKSAtIGRidWYtPmRtYV9hZGRyOworCisJaWYgKCFjb3VudCkgeworCQltb2RfdGltZXIoJmNoYW4tPnJ4X3RpbWVyLCBqaWZmaWVzICsgSFNVX0RNQV9USU1FT1VUX0NIRUNLX0ZSRVEpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaHN1X2RtYV9yeCh1cCwgMCk7CitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaHN1X2dsb2JhbF9pbml0KHZvaWQpCit7CisJc3RydWN0IGhzdV9wb3J0ICpoc3U7CisJc3RydWN0IHVhcnRfaHN1X3BvcnQgKnVwb3J0OworCXN0cnVjdCBoc3VfZG1hX2NoYW4gKmRjaGFuOworCWludCBpLCByZXQ7CisKKwloc3UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaHN1X3BvcnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhzdSkKKwkJcmV0dXJuOworCisJLyogR2V0IGJhc2ljIGlvIHJlc291cmNlIGFuZCBtYXAgaXQgKi8KKwloc3UtPnBhZGRyID0gMHhmZmEyODAwMDsKKwloc3UtPmlvbGVuID0gMHgxMDAwOworCisJaWYgKCEocmVxdWVzdF9tZW1fcmVnaW9uKGhzdS0+cGFkZHIsIGhzdS0+aW9sZW4sICJIU1UgZ2xvYmFsIikpKQorCQlwcl93YXJuaW5nKCJIU1U6IGVycm9yIGluIHJlcXVlc3QgbWVtIHJlZ2lvblxuIik7CisKKwloc3UtPnJlZyA9IGlvcmVtYXBfbm9jYWNoZSgodW5zaWduZWQgbG9uZyloc3UtPnBhZGRyLCBoc3UtPmlvbGVuKTsKKwlpZiAoIWhzdS0+cmVnKSB7CisJCXByX2VycigiSFNVOiBlcnJvciBpbiBpb3JlbWFwXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9yZWdpb247CisJfQorCisJLyogSW5pdGlhbGlzZSB0aGUgMyBVQVJUIHBvcnRzICovCisJdXBvcnQgPSBoc3UtPnBvcnQ7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl1cG9ydC0+cG9ydC50eXBlID0gUE9SVF9NRkQ7CisJCXVwb3J0LT5wb3J0LmlvdHlwZSA9IFVQSU9fTUVNOworCQl1cG9ydC0+cG9ydC5tYXBiYXNlID0gKHJlc291cmNlX3NpemVfdCloc3UtPnBhZGRyCisJCQkJCSsgSFNVX1BPUlRfUkVHX09GRlNFVAorCQkJCQkrIGkgKiBIU1VfUE9SVF9SRUdfTEVOR1RIOworCQl1cG9ydC0+cG9ydC5tZW1iYXNlID0gaHN1LT5yZWcgKyBIU1VfUE9SVF9SRUdfT0ZGU0VUCisJCQkJCSsgaSAqIEhTVV9QT1JUX1JFR19MRU5HVEg7CisKKwkJc3ByaW50Zih1cG9ydC0+bmFtZSwgImhzdV9wb3J0JWQiLCBpKTsKKwkJdXBvcnQtPnBvcnQuZmlmb3NpemUgPSA2NDsKKwkJdXBvcnQtPnBvcnQub3BzID0gJnNlcmlhbF9oc3VfcG9wczsKKwkJdXBvcnQtPnBvcnQubGluZSA9IGk7CisJCXVwb3J0LT5wb3J0LmZsYWdzID0gVVBGX0lPUkVNQVA7CisJCS8qIHNldCB0aGUgc2NhbGFibGUgbWF4aW0gc3VwcG9ydCByYXRlIHRvIDI3NDY4MDAgYnBzICovCisJCXVwb3J0LT5wb3J0LnVhcnRjbGsgPSAxMTUyMDAgKiAyNCAqIDE2OworCisJCXVwb3J0LT5ydW5uaW5nID0gMDsKKwkJdXBvcnQtPnR4YyA9ICZoc3UtPmNoYW5zW2kgKiAyXTsKKwkJdXBvcnQtPnJ4YyA9ICZoc3UtPmNoYW5zW2kgKiAyICsgMV07CisKKwkJc2VyaWFsX2hzdV9wb3J0c1tpXSA9IHVwb3J0OworCQl1cG9ydC0+aW5kZXggPSBpOworCQl1cG9ydCsrOworCX0KKworCS8qIEluaXRpYWxpc2UgNiBkbWEgY2hhbm5lbHMgKi8KKwlkY2hhbiA9IGhzdS0+Y2hhbnM7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlkY2hhbi0+aWQgPSBpOworCQlkY2hhbi0+ZGlydCA9IChpICYgMHgxKSA/IERNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7CisJCWRjaGFuLT51cG9ydCA9ICZoc3UtPnBvcnRbaS8yXTsKKwkJZGNoYW4tPnJlZyA9IGhzdS0+cmVnICsgSFNVX0RNQV9DSEFOU19SRUdfT0ZGU0VUICsKKwkJCQlpICogSFNVX0RNQV9DSEFOU19SRUdfTEVOR1RIOworCisJCS8qIFdvcmsgYXJvdW5kIGZvciBSWCAqLworCQlpZiAoZGNoYW4tPmRpcnQgPT0gRE1BX0ZST01fREVWSUNFKSB7CisJCQlpbml0X3RpbWVyKCZkY2hhbi0+cnhfdGltZXIpOworCQkJZGNoYW4tPnJ4X3RpbWVyLmZ1bmN0aW9uID0gaHN1X2RtYV9yeF90aW1lb3V0OworCQkJZGNoYW4tPnJ4X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkY2hhbjsKKwkJfQorCQlkY2hhbisrOworCX0KKworCXBoc3UgPSBoc3U7CisKKwloc3VfZGVidWdmc19pbml0KGhzdSk7CisJcmV0dXJuOworCitlcnJfZnJlZV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKGhzdS0+cGFkZHIsIGhzdS0+aW9sZW4pOworCWtmcmVlKGhzdSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfaHN1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaHN1X3BvcnQgKmhzdTsKKwlpbnQgaTsKKworCWhzdSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWhzdSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNlcmlhbF9oc3VfcmVnLCAmaHN1LT5wb3J0W2ldLnBvcnQpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyZWVfaXJxKGhzdS0+aXJxLCBoc3UpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworLyogRmlyc3QgMyBhcmUgVUFSVCBwb3J0cywgYW5kIHRoZSA0dGggaXMgdGhlIERNQSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MUIpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgxQykgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODFEKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MUUpIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHN1X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPQkJIkhTVSBzZXJpYWwiLAorCS5pZF90YWJsZSA9CXBjaV9pZHMsCisJLnByb2JlID0Jc2VyaWFsX2hzdV9wcm9iZSwKKwkucmVtb3ZlID0JX19kZXZleGl0X3Aoc2VyaWFsX2hzdV9yZW1vdmUpLAorCS5zdXNwZW5kID0Jc2VyaWFsX2hzdV9zdXNwZW5kLAorCS5yZXN1bWUJPQlzZXJpYWxfaHN1X3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGhzdV9wY2lfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwloc3VfZ2xvYmFsX2luaXQoKTsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfaHN1X3JlZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZoc3VfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoc3VfcGNpX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhzdV9wY2lfZHJpdmVyKTsKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfaHN1X3JlZyk7CisKKwloc3VfZGVidWdmc19yZW1vdmUocGhzdSk7CisKKwlrZnJlZShwaHN1KTsKK30KKworbW9kdWxlX2luaXQoaHN1X3BjaV9pbml0KTsKK21vZHVsZV9leGl0KGhzdV9wY2lfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWVkZmllbGQtaHN1Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcnN0X21heDMxMTAuYyBiL2RyaXZlcnMvc2VyaWFsL21yc3RfbWF4MzExMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWQxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NlcmlhbC9tcnN0X21heDMxMTAuYwpAQCAtMCwwICsxLDg0NCBAQAorLyoKKyAqICBtYXgzMTEwLmMgLSBzcGkgdWFydCBwcm90b2NvbCBkcml2ZXIgZm9yIE1heGltIDMxMTAgb24gTW9vcmVzdG93bgorICoKKyAqICBDb3B5cmlnaHQgKEMpIEludGVsIDIwMDggRmVuZyBUYW5nIDxmZW5nLnRhbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKworLyoKKyAqIE5vdGU6CisgKiAxLiBGcm9tIE1heDMxMTAgc3BlYywgdGhlIFJ4IEZJRk8gaGFzIDggd29yZHMsIHdoaWxlIHRoZSBUeCBGSUZPIG9ubHkgaGFzCisgKiAgICAxIHdvcmQuIElmIFNQSSBtYXN0ZXIgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgc2NsayBmcmVxdWVuY3kgY2hhbmdlLAorICogICAgdGhlbiB0aGUgY2hhciBuZWVkIGJlIHNlbnQgb3V0IG9uZSBieSBvbmUgd2l0aCBzb21lIGRlbGF5CisgKgorICogMi4gQ3VycmVudGx5IG9ubHkgUlggYXZhaWxhYmUgaW50ZXJycnVwdCBpcyB1c2VkLCBubyBuZWVkIGZvciB3YWl0aW5nIFRYRQorICogICAgaW50ZXJydXB0IGZvciBhIGxvdyBzcGVlZCBVQVJUIGRldmljZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2R3X3NwaS5oPgorCisjaW5jbHVkZSAibXJzdF9tYXgzMTEwLmgiCisKKyNkZWZpbmUgUFJfRk1UCSJtcnN0X21heDMxMTA6ICIKKworI2RlZmluZSBVQVJUX1RYX05FRURFRCAxCisjZGVmaW5lIENPTl9UWF9ORUVERUQgIDIKKyNkZWZpbmUgQklUX0lSUV9QRU5ESU5HICAgIDMKKworc3RydWN0IHVhcnRfbWF4MzExMCB7CisJc3RydWN0IHVhcnRfcG9ydCBwb3J0OworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJY2hhciAqbmFtZTsKKworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWFpbl90aHJlYWQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICpyZWFkX3RocmVhZDsKKwlzdHJ1Y3QgbXV0ZXggdGhyZWFkX211dGV4OzsKKworCXUzMiBiYXVkOworCXUxNiBjdXJfY29uZjsKKwl1OCBjbG9jazsKKwl1OCBwYXJpdHksIHdvcmRfN2JpdHM7CisKKwl1bnNpZ25lZCBsb25nIHVhcnRfZmxhZ3M7CisKKwkvKiBjb25zb2xlIHJlbGF0ZWQgKi8KKwlzdHJ1Y3QgY2lyY19idWYgY29uX3htaXQ7CisKKwkvKiBpcnEgcmVsYXRlZCAqLworCXUxNiBpcnE7Cit9OworCisvKiBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUsIG1heSBuZWVkIGJlIHJlbW92ZWQgKi8KK3N0cnVjdCB1YXJ0X21heDMxMTAgKnBtYXg7CitzdGF0aWMgaW5saW5lIHZvaWQgcmVjZWl2ZV9jaGFyKHN0cnVjdCB1YXJ0X21heDMxMTAgKm1heCwgdTggY2gpOworc3RhdGljIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXgsCisJCQkJdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgbGVuKTsKK3N0YXRpYyBpbnQgbWF4MzExMF9yZWFkX211bHRpKHN0cnVjdCB1YXJ0X21heDMxMTAgKm1heCwgaW50IGxlbiwgdTggKmJ1Zik7CitzdGF0aWMgdm9pZCBtYXgzMTEwX2NvbnNvbGVfcmVjZWl2ZShzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXgpOworCitpbnQgbWF4MzExMF93cml0ZV90aGVuX3JlYWQoc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4LAorCQljb25zdCB1OCAqdHhidWYsIHU4ICpyeGJ1ZiwgdW5zaWduZWQgbGVuLCBpbnQgYWx3YXlzX2Zhc3QpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IG1heC0+c3BpOworCXN0cnVjdCBzcGlfbWVzc2FnZQltZXNzYWdlOworCXN0cnVjdCBzcGlfdHJhbnNmZXIJeDsKKwlpbnQgcmV0OworCisJaWYgKCF0eGJ1ZiB8fCAhcnhidWYpCisJCXJldHVybiAtRUlOVkFMOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KCZ4LCAwLCBzaXplb2YgeCk7CisJeC5sZW4gPSBsZW47CisJeC50eF9idWYgPSB0eGJ1ZjsKKwl4LnJ4X2J1ZiA9IHJ4YnVmOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4LCAmbWVzc2FnZSk7CisKKwlpZiAoYWx3YXlzX2Zhc3QpCisJCXguc3BlZWRfaHogPSAzMTI1MDAwOworCWVsc2UgaWYgKG1heC0+YmF1ZCkKKwkJeC5zcGVlZF9oeiA9IG1heC0+YmF1ZDsKKworCS8qIERvIHRoZSBpL28gKi8KKwlyZXQgPSBzcGlfc3luYyhzcGksICZtZXNzYWdlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBXcml0ZSBhIHUxNiB0byB0aGUgZGV2aWNlLCBhbmQgcmV0dXJuIG9uZSB1MTYgcmVhZCBiYWNrICovCitpbnQgbWF4MzExMF9vdXQoc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4LCBjb25zdCB1MTYgb3V0KQoreworCXUxNiB0bXA7CisJaW50IHJldDsKKworCXJldCA9IG1heDMxMTBfd3JpdGVfdGhlbl9yZWFkKG1heCwgKHU4ICopJm91dCwgKHU4ICopJnRtcCwgMiwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIElmIHNvbWUgdmFsaWQgZGF0YSBpcyByZWFkIGJhY2sgKi8KKwlpZiAodG1wICYgTUFYMzExMF9SRUFEX0RBVEFfQVZBSUxBQkxFKQorCQlyZWNlaXZlX2NoYXIobWF4LCAodG1wICYgMHhmZikpOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfUkVBRF9MRU4JMjAKKy8qCisgKiBUaGlzIGlzIHVzdWFsbHkgdXNlZCB0byByZWFkIGRhdGEgZnJvbSBTUElDIFJYIEZJRk8sIHdoaWNoIGRvZXNuJ3QKKyAqIG5lZWQgYW55IGRlbGF5IGxpa2UgZmx1c2hpbmcgY2hhcmFjdGVyIG91dC4gSXQgcmV0dXJucyBob3cgbWFueQorICogdmFsaWRlIGJ5dGVzIGFyZSByZWFkIGJhY2sKKyAqLworc3RhdGljIGludCBtYXgzMTEwX3JlYWRfbXVsdGkoc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4LCBpbnQgbGVuLCB1OCAqYnVmKQoreworCXUxNiBvdXRbTUFYX1JFQURfTEVOXSwgaW5bTUFYX1JFQURfTEVOXTsKKwl1OCAqcGJ1ZiwgdmFsaWRfc3RyW01BWF9SRUFEX0xFTl07CisJaW50IGksIGosIGJ5dGVsZW47CisKKwlpZiAobGVuID4gTUFYX1JFQURfTEVOKSB7CisJCXByX2VycihQUl9GTVQgInJlYWQgbGVuICVkIGlzIHRvbyBsYXJnZVxuIiwgbGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnl0ZWxlbiA9IGxlbiAqIDI7CisJbWVtc2V0KG91dCwgMCwgYnl0ZWxlbik7CisJbWVtc2V0KGluLCAwLCBieXRlbGVuKTsKKworCWlmIChtYXgzMTEwX3dyaXRlX3RoZW5fcmVhZChtYXgsICh1OCAqKW91dCwgKHU4ICopaW4sIGJ5dGVsZW4sIDEpKQorCQlyZXR1cm4gMDsKKworCS8qIElmIGNhbGxlciBkb24ndCBwcm92aWRlIGEgYnVmZmVyLCB0aGVuIGhhbmRsZSByZWNlaXZlZCBjaGFyICovCisJcGJ1ZiA9IGJ1ZiA/IGJ1ZiA6IHZhbGlkX3N0cjsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGluW2ldICYgTUFYMzExMF9SRUFEX0RBVEFfQVZBSUxBQkxFKQorCQkJcGJ1ZltqKytdID0gKHU4KShpbltpXSAmIDB4ZmYpOworCX0KKworCWlmIChqICYmIChwYnVmID09IHZhbGlkX3N0cikpCisJCXJlY2VpdmVfY2hhcnMobWF4LCB2YWxpZF9zdHIsIGopOworCisJcmV0dXJuIGo7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9jb25fcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X21heDMxMTAsIHBvcnQpOworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZtYXgtPmNvbl94bWl0OworCisJaWYgKHVhcnRfY2lyY19jaGFyc19mcmVlKHhtaXQpKSB7CisJCXhtaXQtPmJ1Zlt4bWl0LT5oZWFkXSA9IChjaGFyKWNoOworCQl4bWl0LT5oZWFkID0gKHhtaXQtPmhlYWQgKyAxKSAmIChQQUdFX1NJWkUgLSAxKTsKKwl9CisKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChDT05fVFhfTkVFREVELCAmbWF4LT51YXJ0X2ZsYWdzKSkKKwkJd2FrZV91cF9wcm9jZXNzKG1heC0+bWFpbl90aHJlYWQpOworfQorCisvKgorICogUHJpbnQgYSBzdHJpbmcgdG8gdGhlIHNlcmlhbCBwb3J0IHRyeWluZyBub3QgdG8gZGlzdHVyYgorICogYW55IHBvc3NpYmxlIHJlYWwgdXNlIG9mIHRoZSBwb3J0Li4uCisgKgorICoJVGhlIGNvbnNvbGVfbG9jayBtdXN0IGJlIGhlbGQgd2hlbiB3ZSBnZXQgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgc2VyaWFsX20zMTEwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sCisJCQkJY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQoreworCWlmICghcG1heCkKKwkJcmV0dXJuOworCisJdWFydF9jb25zb2xlX3dyaXRlKCZwbWF4LT5wb3J0LCBzLCBjb3VudCwgc2VyaWFsX20zMTEwX2Nvbl9wdXRjaGFyKTsKK30KKworc3RhdGljIGludCBfX2luaXQKK3NlcmlhbF9tMzExMF9jb25fc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X21heDMxMTAgKm1heCA9IHBtYXg7CisJaW50IGJhdWQgPSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwlwcl9pbmZvKFBSX0ZNVCAic2V0dGluZyB1cCBjb25zb2xlXG4iKTsKKworCWlmICghbWF4KSB7CisJCXByX2VycihQUl9GTVQgInBtYXggaXMgTlVMTCwgcmV0dXJuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvcHRpb25zKQorCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CisKKwlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucygmbWF4LT5wb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKK30KKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpzZXJpYWxfbTMxMTBfY29uX2RldmljZShzdHJ1Y3QgY29uc29sZSAqY28sCisJCQkJCQkJaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgdWFydF9kcml2ZXIgKnAgPSBjby0+ZGF0YTsKKwkqaW5kZXggPSBjby0+aW5kZXg7CisJcmV0dXJuIHAtPnR0eV9kcml2ZXI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc2VyaWFsX20zMTEwX3JlZzsKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzZXJpYWxfbTMxMTBfY29uc29sZSA9IHsKKwkubmFtZQkJPSAidHR5UyIsCisJLndyaXRlCQk9IHNlcmlhbF9tMzExMF9jb25fd3JpdGUsCisJLmRldmljZQkJPSBzZXJpYWxfbTMxMTBfY29uX2RldmljZSwKKwkuc2V0dXAJCT0gc2VyaWFsX20zMTEwX2Nvbl9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmc2VyaWFsX20zMTEwX3JlZywKK307CisKKyNkZWZpbmUgTVJTVF9DT05TT0xFCSgmc2VyaWFsX20zMTEwX2NvbnNvbGUpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VyaWFsX20zMTEwX3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuOworfQorCisvKiBzdG9wX3J4IHdpbGwgYmUgY2FsbGVkIGluIHNwaW5fbG9jayBlbnYgKi8KK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuOworfQorCisjZGVmaW5lIFdPUkRTX1BFUl9YRkVSCTEyOAorc3RhdGljIGlubGluZSB2b2lkIHNlbmRfY2lyY19idWYoc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4LAorCQkJCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCkKK3sKKwlpbnQgbGVuLCBsZWZ0ID0gMDsKKwl1MTYgb2J1ZltXT1JEU19QRVJfWEZFUl0sIGlidWZbV09SRFNfUEVSX1hGRVJdOworCXU4IHZhbGlkX3N0cltXT1JEU19QRVJfWEZFUl07CisJaW50IGksIGo7CisKKwl3aGlsZSAoIXVhcnRfY2lyY19lbXB0eSh4bWl0KSkgeworCQlsZWZ0ID0gdWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCk7CisJCXdoaWxlIChsZWZ0KSB7CisJCQlsZW4gPSAobGVmdCA+PSBXT1JEU19QRVJfWEZFUikgPyBXT1JEU19QRVJfWEZFUiA6IGxlZnQ7CisKKwkJCW1lbXNldChvYnVmLCAwLCBsZW4gKiAyKTsKKwkJCW1lbXNldChpYnVmLCAwLCBsZW4gKiAyKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJCW9idWZbaV0gPSAodTgpeG1pdC0+YnVmW3htaXQtPnRhaWxdIHwgV0RfVEFHOworCQkJCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIDEpICYKKwkJCQkJCShVQVJUX1hNSVRfU0laRSAtIDEpOworCQkJfQorCQkJbWF4MzExMF93cml0ZV90aGVuX3JlYWQobWF4LCAodTggKilvYnVmLAorCQkJCQkJKHU4ICopaWJ1ZiwgbGVuICogMiwgMCk7CisKKwkJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQlpZiAoaWJ1ZltpXSAmIE1BWDMxMTBfUkVBRF9EQVRBX0FWQUlMQUJMRSkKKwkJCQkJdmFsaWRfc3RyW2orK10gPSAodTgpKGlidWZbaV0gJiAweGZmKTsKKwkJCX0KKworCQkJaWYgKGopCisJCQkJcmVjZWl2ZV9jaGFycyhtYXgsIHZhbGlkX3N0ciwgaik7CisKKwkJCW1heC0+cG9ydC5pY291bnQudHggKz0gbGVuOworCQkJbGVmdCAtPSBsZW47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXIoc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmbWF4LT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKworCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkgfHwgdWFydF90eF9zdG9wcGVkKHBvcnQpKQorCQlyZXR1cm47CisKKwlzZW5kX2NpcmNfYnVmKG1heCwgeG1pdCk7CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworCisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJc2VyaWFsX20zMTEwX3N0b3BfdHgocG9ydCk7Cit9CisKKy8qIFRoaXMgd2lsbCBiZSBjYWxsZWQgYnkgdWFydF93cml0ZSgpIGFuZCB0dHlfd3JpdGUsIGNhbid0CisgKiBnbyB0byBzbGVlcCAqLworc3RhdGljIHZvaWQgc2VyaWFsX20zMTEwX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X21heDMxMTAsIHBvcnQpOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFVBUlRfVFhfTkVFREVELCAmbWF4LT51YXJ0X2ZsYWdzKSkKKwkJd2FrZV91cF9wcm9jZXNzKG1heC0+bWFpbl90aHJlYWQpOworfQorCitzdGF0aWMgdm9pZCByZWNlaXZlX2NoYXJzKHN0cnVjdCB1YXJ0X21heDMxMTAgKm1heCwgdW5zaWduZWQgY2hhciAqc3RyLCBpbnQgbGVuKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmbWF4LT5wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHVzYWJsZTsKKworCS8qIElmIHVhcnQgaXMgbm90IG9wZW5lZCwganVzdCByZXR1cm4gKi8KKwlpZiAoIXBvcnQtPnN0YXRlKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsJLyogcmVjZWl2ZSBzb21lIGNoYXIgYmVmb3JlIHRoZSB0dHkgaXMgb3BlbmVkICovCisKKwl3aGlsZSAobGVuKSB7CisJCXVzYWJsZSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuKTsKKwkJaWYgKHVzYWJsZSkgeworCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHN0ciwgdXNhYmxlKTsKKwkJCXN0ciArPSB1c2FibGU7CisJCQlwb3J0LT5pY291bnQucnggKz0gdXNhYmxlOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwkJfQorCQlsZW4gLT0gdXNhYmxlOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlY2VpdmVfY2hhcihzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXgsIHU4IGNoKQoreworCXJlY2VpdmVfY2hhcnMobWF4LCAmY2gsIDEpOworfQorCitzdGF0aWMgdm9pZCBtYXgzMTEwX2NvbnNvbGVfcmVjZWl2ZShzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXgpCit7CisJaW50IGxvb3AgPSAxLCBudW0sIHRvdGFsID0gMDsKKwl1OCByZWN2X2J1Zls1MTJdLCAqcGJ1ZjsKKworCXBidWYgPSByZWN2X2J1ZjsKKwlkbyB7CisJCW51bSA9IG1heDMxMTBfcmVhZF9tdWx0aShtYXgsIDgsIHBidWYpOworCisJCWlmIChudW0pIHsKKwkJCWxvb3AgPSAxMDsKKwkJCXBidWYgKz0gbnVtOworCQkJdG90YWwgKz0gbnVtOworCisJCQlpZiAodG90YWwgPj0gNTAwKSB7CisJCQkJcmVjZWl2ZV9jaGFycyhtYXgsIHJlY3ZfYnVmLCB0b3RhbCk7CisJCQkJcGJ1ZiA9IHJlY3ZfYnVmOworCQkJCXRvdGFsID0gMDsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKC0tbG9vcCk7CisKKwlpZiAodG90YWwpCisJCXJlY2VpdmVfY2hhcnMobWF4LCByZWN2X2J1ZiwgdG90YWwpOworfQorCitzdGF0aWMgaW50IG1heDMxMTBfbWFpbl90aHJlYWQodm9pZCAqX21heCkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXggPSBfbWF4OworCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9ICZtYXgtPndxOworCWludCByZXQgPSAwOworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZtYXgtPmNvbl94bWl0OworCisJaW5pdF93YWl0cXVldWVfaGVhZCh3cSk7CisJcHJfaW5mbyhQUl9GTVQgInN0YXJ0IG1haW4gdGhyZWFkXG4iKTsKKworCWRvIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCp3cSwgbWF4LT51YXJ0X2ZsYWdzIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisKKwkJbXV0ZXhfbG9jaygmbWF4LT50aHJlYWRfbXV0ZXgpOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQklUX0lSUV9QRU5ESU5HLCAmbWF4LT51YXJ0X2ZsYWdzKSkKKwkJCW1heDMxMTBfY29uc29sZV9yZWNlaXZlKG1heCk7CisKKwkJLyogZmlyc3QgaGFuZGxlIGNvbnNvbGUgb3V0cHV0ICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ09OX1RYX05FRURFRCwgJm1heC0+dWFydF9mbGFncykpCisJCQlzZW5kX2NpcmNfYnVmKG1heCwgeG1pdCk7CisKKwkJLyogaGFuZGxlIHVhcnQgb3V0cHV0ICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVUFSVF9UWF9ORUVERUQsICZtYXgtPnVhcnRfZmxhZ3MpKQorCQkJdHJhbnNtaXRfY2hhcihtYXgpOworCisJCW11dGV4X3VubG9jaygmbWF4LT50aHJlYWRfbXV0ZXgpOworCisJfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX01SU1RfTUFYMzExMF9JUlEKK3N0YXRpYyBpcnFyZXR1cm5fdCBzZXJpYWxfbTMxMTBfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXggPSBkZXZfaWQ7CisKKwkvKiBtYXgzMTEwJ3MgaXJxIGlzIGEgZmFsbGluZyBlZGdlLCBub3QgbGV2ZWwgdHJpZ2dlcmVkLAorCSAqIHNvIG5vIG5lZWQgdG8gZGlzYWJsZSB0aGUgaXJxICovCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJJVF9JUlFfUEVORElORywgJm1heC0+dWFydF9mbGFncykpCisJCXdha2VfdXBfcHJvY2VzcyhtYXgtPm1haW5fdGhyZWFkKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbHNlCisvKiBpZiBkb24ndCB1c2UgUlggSVJRLCB0aGVuIG5lZWQgYSB0aHJlYWQgdG8gcG9sbGluZyByZWFkICovCitzdGF0aWMgaW50IG1heDMxMTBfcmVhZF90aHJlYWQodm9pZCAqX21heCkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXggPSBfbWF4OworCisJcHJfaW5mbyhQUl9GTVQgInN0YXJ0IHJlYWQgdGhyZWFkXG4iKTsKKwlkbyB7CisJCW11dGV4X2xvY2soJm1heC0+dGhyZWFkX211dGV4KTsKKwkJbWF4MzExMF9jb25zb2xlX3JlY2VpdmUobWF4KTsKKwkJbXV0ZXhfdW5sb2NrKCZtYXgtPnRocmVhZF9tdXRleCk7CisKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dChIWiAvIDIwKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2VyaWFsX20zMTEwX3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXggPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfbWF4MzExMCwgcG9ydCk7CisJdTE2IGNvbmZpZyA9IDA7CisJaW50IHJldCA9IDA7CisKKwlpZiAocG9ydC0+bGluZSAhPSAwKQorCQlwcl9lcnIoUFJfRk1UICJ1YXJ0IHBvcnQgc3RhcnR1cCBmYWlsZWRcbiIpOworCisJLyogZmlyc3RseSBkaXNhYmxlIGFsbCBJUlEgYW5kIGNvbmZpZyBpdCB0byAxMTUyMDAsIDhuMSAqLworCWNvbmZpZyA9IFdDX1RBRyB8IFdDX0ZJRk9fRU5BQkxFCisJCQl8IFdDXzFfU1RPUEJJVFMKKwkJCXwgV0NfOEJJVF9XT1JECisJCQl8IFdDX0JBVURfRFIyOworCXJldCA9IG1heDMxMTBfb3V0KG1heCwgY29uZmlnKTsKKworCS8qIGFzIHdlIHVzZSB0aHJlYWQgdG8gaGFuZGxlIHR4L3J4LCBuZWVkIHNldCBsb3cgbGF0ZW5jeSAqLworCXBvcnQtPnN0YXRlLT5wb3J0LnR0eS0+bG93X2xhdGVuY3kgPSAxOworCisjaWZkZWYgQ09ORklHX01SU1RfTUFYMzExMF9JUlEKKwlyZXQgPSByZXF1ZXN0X2lycShtYXgtPmlycSwgc2VyaWFsX20zMTEwX2lycSwKKwkJCQlJUlFfVFlQRV9FREdFX0ZBTExJTkcsICJtYXgzMTEwIiwgbWF4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogZW5hYmxlIFJYIElSUSBvbmx5ICovCisJY29uZmlnIHw9IFdDX1JYQV9JUlFfRU5BQkxFOworCW1heDMxMTBfb3V0KG1heCwgY29uZmlnKTsKKyNlbHNlCisJLyogaWYgSVJRIGlzIGRpc2FibGVkLCBzdGFydCBhIHJlYWQgdGhyZWFkIGZvciBpbnB1dCBkYXRhICovCisJbWF4LT5yZWFkX3RocmVhZCA9CisJCWt0aHJlYWRfcnVuKG1heDMxMTBfcmVhZF90aHJlYWQsIG1heCwgIm1heDMxMTBfcmVhZCIpOworI2VuZGlmCisKKwltYXgtPmN1cl9jb25mID0gY29uZmlnOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfbTMxMTBfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXggPQorCQljb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfbWF4MzExMCwgcG9ydCk7CisJdTE2IGNvbmZpZzsKKworCWlmIChtYXgtPnJlYWRfdGhyZWFkKSB7CisJCWt0aHJlYWRfc3RvcChtYXgtPnJlYWRfdGhyZWFkKTsKKwkJbWF4LT5yZWFkX3RocmVhZCA9IE5VTEw7CisJfQorCisjaWZkZWYgQ09ORklHX01SU1RfTUFYMzExMF9JUlEKKwlmcmVlX2lycShtYXgtPmlycSwgbWF4KTsKKyNlbmRpZgorCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdGhpcyBwb3J0ICovCisJY29uZmlnID0gV0NfVEFHIHwgV0NfU1dfU0hESTsKKwltYXgzMTEwX291dChtYXgsIGNvbmZpZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGludCBzZXJpYWxfbTMxMTBfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgZmxhZ3MpCit7CisJLyogZ2l2ZSBpdCBmYWtlIHR5cGUgKi8KKwlwb3J0LT50eXBlID0gUE9SVF9QWEE7Cit9CisKK3N0YXRpYyBpbnQKK3NlcmlhbF9tMzExMF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCAqc2VyKQoreworCS8qIHdlIGRvbid0IHdhbnQgdGhlIGNvcmUgY29kZSB0byBtb2RpZnkgYW55IHBvcnQgcGFyYW1zICovCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnNlcmlhbF9tMzExMF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X21heDMxMTAsIHBvcnQpOworCXJldHVybiBtYXgtPm5hbWU7Cit9CisKK3N0YXRpYyB2b2lkCitzZXJpYWxfbTMxMTBfc2V0X3Rlcm1pb3Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAorCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4ID0KKwkJY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X21heDMxMTAsIHBvcnQpOworCXVuc2lnbmVkIGNoYXIgY3ZhbDsKKwl1bnNpZ25lZCBpbnQgYmF1ZCwgcGFyaXR5ID0gMDsKKwlpbnQgY2xrX2RpdiA9IC0xOworCXUxNiBuZXdfY29uZiA9IG1heC0+Y3VyX2NvbmY7CisKKwlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M3OgorCQljdmFsID0gVUFSVF9MQ1JfV0xFTjc7CisJCW5ld19jb25mIHw9IFdDXzdCSVRfV09SRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJY3ZhbCA9IFVBUlRfTENSX1dMRU44OworCQluZXdfY29uZiB8PSBXQ184QklUX1dPUkQ7CisJCWJyZWFrOworCX0KKworCWJhdWQgPSB1YXJ0X2dldF9iYXVkX3JhdGUocG9ydCwgdGVybWlvcywgb2xkLCAwLCAyMzA0MDApOworCisJLyogZmlyc3QgY2FsYyB0aGUgZGl2IGZvciAxLjhNSFogY2xvY2sgY2FzZSAqLworCXN3aXRjaCAoYmF1ZCkgeworCWNhc2UgMzAwOgorCQljbGtfZGl2ID0gV0NfQkFVRF9EUjM4NDsKKwkJYnJlYWs7CisJY2FzZSA2MDA6CisJCWNsa19kaXYgPSBXQ19CQVVEX0RSMTkyOworCQlicmVhazsKKwljYXNlIDEyMDA6CisJCWNsa19kaXYgPSBXQ19CQVVEX0RSOTY7CisJCWJyZWFrOworCWNhc2UgMjQwMDoKKwkJY2xrX2RpdiA9IFdDX0JBVURfRFI0ODsKKwkJYnJlYWs7CisJY2FzZSA0ODAwOgorCQljbGtfZGl2ID0gV0NfQkFVRF9EUjI0OworCQlicmVhazsKKwljYXNlIDk2MDA6CisJCWNsa19kaXYgPSBXQ19CQVVEX0RSMTI7CisJCWJyZWFrOworCWNhc2UgMTkyMDA6CisJCWNsa19kaXYgPSBXQ19CQVVEX0RSNjsKKwkJYnJlYWs7CisJY2FzZSAzODQwMDoKKwkJY2xrX2RpdiA9IFdDX0JBVURfRFIzOworCQlicmVhazsKKwljYXNlIDU3NjAwOgorCQljbGtfZGl2ID0gV0NfQkFVRF9EUjI7CisJCWJyZWFrOworCWNhc2UgMTE1MjAwOgorCQljbGtfZGl2ID0gV0NfQkFVRF9EUjE7CisJCWJyZWFrOworCWNhc2UgMjMwNDAwOgorCQlpZiAobWF4LT5jbG9jayAmIE1BWDMxMTBfSElHSF9DTEspCisJCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBwaWNrIHRoZSBwcmV2aW91cyBiYXVkIHJhdGUgKi8KKwkJYmF1ZCA9IG1heC0+YmF1ZDsKKwkJY2xrX2RpdiA9IG1heC0+Y3VyX2NvbmYgJiBXQ19CQVVEX0RJVl9NQVNLOworCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHRlcm1pb3MsIGJhdWQsIGJhdWQpOworCX0KKworCWlmIChtYXgtPmNsb2NrICYgTUFYMzExMF9ISUdIX0NMSykgeworCQljbGtfZGl2ICs9IDE7CisJCS8qIGhpZ2ggY2xrIHZlcnNpb24gbWF4MzExMCBkb2Vzbid0IHN1cHBvcnQgQjMwMCAqLworCQlpZiAoYmF1ZCA9PSAzMDApCisJCQliYXVkID0gNjAwOworCQlpZiAoYmF1ZCA9PSAyMzA0MDApCisJCQljbGtfZGl2ID0gV0NfQkFVRF9EUjE7CisJCXR0eV90ZXJtaW9zX2VuY29kZV9iYXVkX3JhdGUodGVybWlvcywgYmF1ZCwgYmF1ZCk7CisJfQorCisJbmV3X2NvbmYgPSAobmV3X2NvbmYgJiB+V0NfQkFVRF9ESVZfTUFTSykgfCBjbGtfZGl2OworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQorCQluZXdfY29uZiB8PSBXQ18yX1NUT1BCSVRTOworCWVsc2UKKwkJbmV3X2NvbmYgJj0gfldDXzJfU1RPUEJJVFM7CisKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUkVOQikgeworCQluZXdfY29uZiB8PSBXQ19QQVJJVFlfRU5BQkxFOworCQlwYXJpdHkgfD0gVUFSVF9MQ1JfUEFSSVRZOworCX0gZWxzZQorCQluZXdfY29uZiAmPSB+V0NfUEFSSVRZX0VOQUJMRTsKKworCWlmICghKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpKQorCQlwYXJpdHkgfD0gVUFSVF9MQ1JfRVBBUjsKKwltYXgtPnBhcml0eSA9IHBhcml0eTsKKworCXVhcnRfdXBkYXRlX3RpbWVvdXQocG9ydCwgdGVybWlvcy0+Y19jZmxhZywgYmF1ZCk7CisKKwluZXdfY29uZiB8PSBXQ19UQUc7CisJaWYgKG5ld19jb25mICE9IG1heC0+Y3VyX2NvbmYpIHsKKwkJbWF4MzExMF9vdXQobWF4LCBuZXdfY29uZik7CisJCW1heC0+Y3VyX2NvbmYgPSBuZXdfY29uZjsKKwkJbWF4LT5iYXVkID0gYmF1ZDsKKwl9Cit9CisKKy8qIGRvbid0IGhhbmRsZSBodyBoYW5kc2hha2luZyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWxfbTMxMTBfZ2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIFRJT0NNX0RTUiB8IFRJT0NNX0NBUiB8IFRJT0NNX0RTUjsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX20zMTEwX3NldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgbWN0cmwpCit7Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF9tMzExMF9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfbTMxMTBfcG0oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHN0YXRlLAorCQkJdW5zaWduZWQgaW50IG9sZHN0YXRlKQoreworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfbTMxMTBfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7Cit9CisKK3N0cnVjdCB1YXJ0X29wcyBzZXJpYWxfbTMxMTBfb3BzID0geworCS50eF9lbXB0eQk9IHNlcmlhbF9tMzExMF90eF9lbXB0eSwKKwkuc2V0X21jdHJsCT0gc2VyaWFsX20zMTEwX3NldF9tY3RybCwKKwkuZ2V0X21jdHJsCT0gc2VyaWFsX20zMTEwX2dldF9tY3RybCwKKwkuc3RvcF90eAk9IHNlcmlhbF9tMzExMF9zdG9wX3R4LAorCS5zdGFydF90eAk9IHNlcmlhbF9tMzExMF9zdGFydF90eCwKKwkuc3RvcF9yeAk9IHNlcmlhbF9tMzExMF9zdG9wX3J4LAorCS5lbmFibGVfbXMJPSBzZXJpYWxfbTMxMTBfZW5hYmxlX21zLAorCS5icmVha19jdGwJPSBzZXJpYWxfbTMxMTBfYnJlYWtfY3RsLAorCS5zdGFydHVwCT0gc2VyaWFsX20zMTEwX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gc2VyaWFsX20zMTEwX3NodXRkb3duLAorCS5zZXRfdGVybWlvcwk9IHNlcmlhbF9tMzExMF9zZXRfdGVybWlvcywJLyogbXVzdCBoYXZlICovCisJLnBtCQk9IHNlcmlhbF9tMzExMF9wbSwKKwkudHlwZQkJPSBzZXJpYWxfbTMxMTBfdHlwZSwKKwkucmVsZWFzZV9wb3J0CT0gc2VyaWFsX20zMTEwX3JlbGVhc2VfcG9ydCwKKwkucmVxdWVzdF9wb3J0CT0gc2VyaWFsX20zMTEwX3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQJPSBzZXJpYWxfbTMxMTBfY29uZmlnX3BvcnQsCisJLnZlcmlmeV9wb3J0CT0gc2VyaWFsX20zMTEwX3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzZXJpYWxfbTMxMTBfcmVnID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZHJpdmVyX25hbWUJPSAiTVJTVCBzZXJpYWwiLAorCS5kZXZfbmFtZQk9ICJ0dHlTIiwKKwkubWFqb3IJCT0gVFRZX01BSk9SLAorCS5taW5vcgkJPSA2NCwKKwkubnIJCT0gMSwKKwkuY29ucwkJPSBNUlNUX0NPTlNPTEUsCit9OworCitzdGF0aWMgaW50IHNlcmlhbF9tMzExMF9zdXNwZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXJpYWxfbTMxMTBfcmVzdW1lKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfc3BpX2NoaXAgc3BpMF91YXJ0ID0geworCS5wb2xsX21vZGUgPSAxLAorCS5lbmFibGVfZG1hID0gMCwKKwkudHlwZSA9IFNQSV9GUkZfU1BJLAorfTsKKworc3RhdGljIGludCBzZXJpYWxfbTMxMTBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdWFydF9tYXgzMTEwICptYXg7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdTE2IHJlczsKKwltYXggPSBremFsbG9jKHNpemVvZigqbWF4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogc2V0IHNwaSBpbmZvICovCisJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKKwltYXgtPmNsb2NrID0gTUFYMzExMF9ISUdIX0NMSzsKKwlzcGktPmNvbnRyb2xsZXJfZGF0YSA9ICZzcGkwX3VhcnQ7CisKKwlzcGlfc2V0dXAoc3BpKTsKKworCW1heC0+cG9ydC50eXBlID0gUE9SVF9QWEE7CS8qIG5lZWQgYXBwbHkgZm9yIGEgbWF4MzExMCB0eXBlICovCisJbWF4LT5wb3J0LmZpZm9zaXplID0gMjsJCS8qIG9ubHkgaGF2ZSAxNmIgYnVmZmVyICovCisJbWF4LT5wb3J0Lm9wcyA9ICZzZXJpYWxfbTMxMTBfb3BzOworCW1heC0+cG9ydC5saW5lID0gMDsKKwltYXgtPnBvcnQuZGV2ID0gJnNwaS0+ZGV2OworCW1heC0+cG9ydC51YXJ0Y2xrID0gMTE1MjAwOworCisJbWF4LT5zcGkgPSBzcGk7CisJbWF4LT5uYW1lID0gc3BpLT5tb2RhbGlhczsJLyogdXNlIHNwaSBuYW1lIGFzIHRoZSBuYW1lICovCisJbWF4LT5pcnEgPSAodTE2KXNwaS0+aXJxOworCisJbXV0ZXhfaW5pdCgmbWF4LT50aHJlYWRfbXV0ZXgpOworCisJbWF4LT53b3JkXzdiaXRzID0gMDsKKwltYXgtPnBhcml0eSA9IDA7CisJbWF4LT5iYXVkID0gMDsKKworCW1heC0+Y3VyX2NvbmYgPSAwOworCW1heC0+dWFydF9mbGFncyA9IDA7CisKKwkvKiBDaGVjayBpZiByZWFkaW5nIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgcmV0dXJucyBzb21ldGhpbmcgc2FuZSAqLworCisJcmVzID0gUkNfVEFHOworCXJldCA9IG1heDMxMTBfd3JpdGVfdGhlbl9yZWFkKG1heCwgKHU4ICopJnJlcywgKHU4ICopJnJlcywgMiwgMCk7CisJaWYgKHJldCA8IDAgfHwgcmVzID09IDAgfHwgcmVzID09IDB4ZmZmZikgeworCQlwcmludGsoS0VSTl9FUlIgIk1BWDMxMTEgZGVlbWVkIG5vdCBwcmVzZW50IChjb25mIHJlZyAlMDR4KSIsCisJCQkJCQkJCQlyZXMpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9nZXRfcGFnZTsKKwl9CisJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZ2V0X3BhZ2U7CisJfQorCW1heC0+Y29uX3htaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXI7CisJbWF4LT5jb25feG1pdC5oZWFkID0gbWF4LT5jb25feG1pdC50YWlsID0gMDsKKworCW1heC0+bWFpbl90aHJlYWQgPSBrdGhyZWFkX3J1bihtYXgzMTEwX21haW5fdGhyZWFkLAorCQkJCQltYXgsICJtYXgzMTEwX21haW4iKTsKKwlpZiAoSVNfRVJSKG1heC0+bWFpbl90aHJlYWQpKSB7CisJCXJldCA9IFBUUl9FUlIobWF4LT5tYWluX3RocmVhZCk7CisJCWdvdG8gZXJyX2t0aHJlYWQ7CisJfQorCisJcG1heCA9IG1heDsKKwkvKiBnaXZlIG1lbWJhc2UgYSBwc3VkbyB2YWx1ZSB0byBwYXNzIHNlcmlhbF9jb3JlJ3MgY2hlY2sgKi8KKwltYXgtPnBvcnQubWVtYmFzZSA9ICh2b2lkICopMHhmZjExMDAwMDsKKwl1YXJ0X2FkZF9vbmVfcG9ydCgmc2VyaWFsX20zMTEwX3JlZywgJm1heC0+cG9ydCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2t0aHJlYWQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlcik7CitlcnJfZ2V0X3BhZ2U6CisJcG1heCA9IE5VTEw7CisJa2ZyZWUobWF4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDMxMTBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVhcnRfbWF4MzExMCAqbWF4ID0gcG1heDsKKworCWlmICghcG1heCkKKwkJcmV0dXJuIDA7CisKKwlwbWF4ID0gTlVMTDsKKwl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2VyaWFsX20zMTEwX3JlZywgJm1heC0+cG9ydCk7CisKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpbWF4LT5jb25feG1pdC5idWYpOworCisJaWYgKG1heC0+bWFpbl90aHJlYWQpCisJCWt0aHJlYWRfc3RvcChtYXgtPm1haW5fdGhyZWFkKTsKKworCWtmcmVlKG1heCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB1YXJ0X21heDMxMTBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCQkubmFtZQk9ICJzcGlfbWF4MzExMSIsCisJCQkuYnVzCT0gJnNwaV9idXNfdHlwZSwKKwkJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHNlcmlhbF9tMzExMF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDMxMTBfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IHNlcmlhbF9tMzExMF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2VyaWFsX20zMTEwX3Jlc3VtZSwKK307CisKKworaW50IF9faW5pdCBzZXJpYWxfbTMxMTBfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9tMzExMF9yZWcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ1YXJ0X21heDMxMTBfZHJpdmVyKTsKKwlpZiAocmV0KQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfbTMxMTBfcmVnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19leGl0IHNlcmlhbF9tMzExMF9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ1YXJ0X21heDMxMTBfZHJpdmVyKTsKKwl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfbTMxMTBfcmVnKTsKK30KKworbW9kdWxlX2luaXQoc2VyaWFsX20zMTEwX2luaXQpOworbW9kdWxlX2V4aXQoc2VyaWFsX20zMTEwX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoIm1heDMxMTAtdWFydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXJzdF9tYXgzMTEwLmggYi9kcml2ZXJzL3NlcmlhbC9tcnN0X21heDMxMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjM0NzhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zZXJpYWwvbXJzdF9tYXgzMTEwLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfTVJTVF9NQVgzMTEwX0gKKyNkZWZpbmUgX01SU1RfTUFYMzExMF9ICisKKyNkZWZpbmUgTUFYMzExMF9ISUdIX0NMSwkweDEJLyogMy42ODY0IE1IWiAqLworI2RlZmluZSBNQVgzMTEwX0xPV19DTEsJCTB4MAkvKiAxLjg0MzIgTUhaICovCisKKy8qIHN0YXR1cyBiaXRzIGZvciBhbGwgNCBNQVgzMTEwIG9wZXJhdGUgbW9kZXMgKi8KKyNkZWZpbmUgTUFYMzExMF9SRUFEX0RBVEFfQVZBSUxBQkxFCSgxIDw8IDE1KQorI2RlZmluZSBNQVgzMTEwX1dSSVRFX0JVRl9FTVBUWQkJKDEgPDwgMTQpCisKKyNkZWZpbmUgV0NfVEFHCQkJKDMgPDwgMTQpCisjZGVmaW5lIFJDX1RBRwkJCSgxIDw8IDE0KQorI2RlZmluZSBXRF9UQUcJCQkoMiA8PCAxNCkKKyNkZWZpbmUgUkRfVEFHCQkJKDAgPDwgMTQpCisKKy8qIGJpdHMgZGVmIGZvciB3cml0ZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFdDX0ZJRk9fRU5BQkxFX01BU0sJKDEgPDwgMTMpCisjZGVmaW5lIFdDX0ZJRk9fRU5BQkxFCQkoMCA8PCAxMykKKworI2RlZmluZSBXQ19TV19TSERJCQkoMSA8PCAxMikKKworI2RlZmluZSBXQ19JUlFfTUFTSwkJKDB4RiA8PCA4KQorI2RlZmluZSBXQ19UWEVfSVJRX0VOQUJMRQkoMSA8PCAxMSkJLyogVFggZW1wdHkgaXJxICovCisjZGVmaW5lIFdDX1JYQV9JUlFfRU5BQkxFCSgxIDw8IDEwKQkvKiBSWCBhdmFpbGFiZSBpcnEgKi8KKyNkZWZpbmUgV0NfUEFSX0hJR0hfSVJRX0VOQUJMRQkoMSA8PCA5KQorI2RlZmluZSBXQ19SRUNfQUNUX0lSUV9FTkFCTEUJKDEgPDwgOCkKKworI2RlZmluZSBXQ19JUkRBX0VOQUJMRQkJKDEgPDwgNykKKworI2RlZmluZSBXQ19TVE9QQklUU19NQVNLCSgxIDw8IDYpCisjZGVmaW5lIFdDXzJfU1RPUEJJVFMJCSgxIDw8IDYpCisjZGVmaW5lIFdDXzFfU1RPUEJJVFMJCSgwIDw8IDYpCisKKyNkZWZpbmUgV0NfUEFSSVRZX0VOQUJMRV9NQVNLCSgxIDw8IDUpCisjZGVmaW5lIFdDX1BBUklUWV9FTkFCTEUJKDEgPDwgNSkKKworI2RlZmluZSBXQ19XT1JETEVOX01BU0sJCSgxIDw8IDQpCisjZGVmaW5lIFdDXzdCSVRfV09SRAkJKDEgPDwgNCkKKyNkZWZpbmUgV0NfOEJJVF9XT1JECQkoMCA8PCA0KQorCisjZGVmaW5lIFdDX0JBVURfRElWX01BU0sJKDB4RikKKyNkZWZpbmUgV0NfQkFVRF9EUjEJCSgweDApCisjZGVmaW5lIFdDX0JBVURfRFIyCQkoMHgxKQorI2RlZmluZSBXQ19CQVVEX0RSNAkJKDB4MikKKyNkZWZpbmUgV0NfQkFVRF9EUjgJCSgweDMpCisjZGVmaW5lIFdDX0JBVURfRFIxNgkJKDB4NCkKKyNkZWZpbmUgV0NfQkFVRF9EUjMyCQkoMHg1KQorI2RlZmluZSBXQ19CQVVEX0RSNjQJCSgweDYpCisjZGVmaW5lIFdDX0JBVURfRFIxMjgJCSgweDcpCisjZGVmaW5lIFdDX0JBVURfRFIzCQkoMHg4KQorI2RlZmluZSBXQ19CQVVEX0RSNgkJKDB4OSkKKyNkZWZpbmUgV0NfQkFVRF9EUjEyCQkoMHhBKQorI2RlZmluZSBXQ19CQVVEX0RSMjQJCSgweEIpCisjZGVmaW5lIFdDX0JBVURfRFI0OAkJKDB4QykKKyNkZWZpbmUgV0NfQkFVRF9EUjk2CQkoMHhEKQorI2RlZmluZSBXQ19CQVVEX0RSMTkyCQkoMHhFKQorI2RlZmluZSBXQ19CQVVEX0RSMzg0CQkoMHhGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3M1cHYyMTAuYyBiL2RyaXZlcnMvc2VyaWFsL3M1cHYyMTAuYwppbmRleCA0YTc4OWU1Li42ZWJjY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zNXB2MjEwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczVwdjIxMC5jCkBAIC0yOCw4ICsyOCwxMiBAQAogc3RhdGljIGludCBzNXB2MjEwX3NlcmlhbF9zZXRzb3VyY2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKIAkJCQkJc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgKmNsaykKIHsKKwlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcgPSBwb3J0LT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgbG9uZyB1Y29uID0gcmRfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04pOwogCisJaWYgKChjZmctPmNsb2Nrc19zaXplKSA9PSAxKQorCQlyZXR1cm4gMDsKKwogCWlmIChzdHJjbXAoY2xrLT5uYW1lLCAicGNsayIpID09IDApCiAJCXVjb24gJj0gflM1UFYyMTBfVUNPTl9DTEtNQVNLOwogCWVsc2UgaWYgKHN0cmNtcChjbGstPm5hbWUsICJ1Y2xrMSIpID09IDApCkBAIC00NywxMCArNTEsMTQgQEAKIHN0YXRpYyBpbnQgczVwdjIxMF9zZXJpYWxfZ2V0c291cmNlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCiAJCQkJCXN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjICpjbGspCiB7CisJc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnID0gcG9ydC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXUzMiB1Y29uID0gcmRfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04pOwogCiAJY2xrLT5kaXZpc29yID0gMTsKIAorCWlmICgoY2ZnLT5jbG9ja3Nfc2l6ZSkgPT0gMSkKKwkJcmV0dXJuIDA7CisKIAlzd2l0Y2ggKHVjb24gJiBTNVBWMjEwX1VDT05fQ0xLTUFTSykgewogCWNhc2UgUzVQVjIxMF9VQ09OX1BDTEs6CiAJCWNsay0+bmFtZSA9ICJwY2xrIjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYyBiL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYwppbmRleCBhOWQ2YzU2Li5iMTE1NmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCkBAIC03MDUsOCArNzA1LDEzIEBACiAJaWYgKG91cnBvcnQtPmluZm8tPmhhc19kaXZzbG90KSB7CiAJCXVuc2lnbmVkIGludCBkaXYgPSBvdXJwb3J0LT5iYXVkY2xrX3JhdGUgLyBiYXVkOwogCi0JCXVkaXZzbG90ID0gdWRpdnNsb3RfdGFibGVbZGl2ICYgMTVdOwotCQlkYmcoInVkaXZzbG90ID0gJTA0eCAoZGl2ICVkKVxuIiwgdWRpdnNsb3QsIGRpdiAmIDE1KTsKKwkJaWYgKGNmZy0+aGFzX2ZyYWN2YWwpIHsKKwkJCXVkaXZzbG90ID0gKGRpdiAmIDE1KTsKKwkJCWRiZygiZnJhY3ZhbCA9ICUwNHhcbiIsIHVkaXZzbG90KTsKKwkJfSBlbHNlIHsKKwkJCXVkaXZzbG90ID0gdWRpdnNsb3RfdGFibGVbZGl2ICYgMTVdOworCQkJZGJnKCJ1ZGl2c2xvdCA9ICUwNHggKGRpdiAlZClcbiIsIHVkaXZzbG90LCBkaXYgJiAxNSk7CisJCX0KIAl9CiAKIAlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggN2YyODMwNy4uY2Q4NTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC01OCw5ICs1OCw5IEBACiAjZGVmaW5lIHVhcnRfY29uc29sZShwb3J0KQkoMCkKICNlbmRpZgogCi1zdGF0aWMgdm9pZCB1YXJ0X2NoYW5nZV9zcGVlZChzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsCitzdGF0aWMgdm9pZCB1YXJ0X2NoYW5nZV9zcGVlZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsCiAJCQkJCXN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOwotc3RhdGljIHZvaWQgdWFydF93YWl0X3VudGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHRpbWVvdXQpOworc3RhdGljIHZvaWQgX191YXJ0X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgdGltZW91dCk7CiBzdGF0aWMgdm9pZCB1YXJ0X2NoYW5nZV9wbShzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIGludCBwbV9zdGF0ZSk7CiAKIC8qCkBAIC0xMzcsNyArMTM3LDcgQEAKICAqIFN0YXJ0dXAgdGhlIHBvcnQuICBUaGlzIHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyIG9wZW4uICBBbGwgY2FsbHMKICAqIHdpbGwgYmUgc2VyaWFsaXNlZCBieSB0aGUgcGVyLXBvcnQgbXV0ZXguCiAgKi8KLXN0YXRpYyBpbnQgdWFydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwgaW50IGluaXRfaHcpCitzdGF0aWMgaW50IHVhcnRfc3RhcnR1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsIGludCBpbml0X2h3KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAkgKiBvbmNlIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZCB0aGUgcG9ydC4gIEFsc28gc2V0CiAJICogdXAgdGhlIHR0eS0+YWx0X3NwZWVkIGtsdWRnZQogCSAqLwotCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmcG9ydC0+dHR5LT5mbGFncyk7CisJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAogCWlmICh1cG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pCiAJCXJldHVybiAwOwpAQCAtMTc3LDI2ICsxNzcsMjYgQEAKIAkJCS8qCiAJCQkgKiBJbml0aWFsaXNlIHRoZSBoYXJkd2FyZSBwb3J0IHNldHRpbmdzLgogCQkJICovCi0JCQl1YXJ0X2NoYW5nZV9zcGVlZChzdGF0ZSwgTlVMTCk7CisJCQl1YXJ0X2NoYW5nZV9zcGVlZCh0dHksIHN0YXRlLCBOVUxMKTsKIAogCQkJLyoKIAkJCSAqIFNldHVwIHRoZSBSVFMgYW5kIERUUiBzaWduYWxzIG9uY2UgdGhlCiAJCQkgKiBwb3J0IGlzIG9wZW4gYW5kIHJlYWR5IHRvIHJlc3BvbmQuCiAJCQkgKi8KLQkJCWlmIChwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKKwkJCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDQkFVRCkKIAkJCQl1YXJ0X3NldF9tY3RybCh1cG9ydCwgVElPQ01fUlRTIHwgVElPQ01fRFRSKTsKIAkJfQogCiAJCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZ1cG9ydC0+bG9jayk7CiAJCQlpZiAoISh1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpICYgVElPQ01fQ1RTKSkKLQkJCQlwb3J0LT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCXR0eS0+aHdfc3RvcHBlZCA9IDE7CiAJCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAkJfQogCiAJCXNldF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+ZmxhZ3MpOwogCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZwb3J0LT50dHktPmZsYWdzKTsKKwkJY2xlYXJfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOwogCX0KIAogCWlmIChyZXR2YWwgJiYgY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKQEAgLTIxMCwxMSArMjEwLDEwIEBACiAgKiBEVFIgaXMgZHJvcHBlZCBpZiB0aGUgaGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLiAgQ2FsbHMgdG8KICAqIHVhcnRfc2h1dGRvd24gYXJlIHNlcmlhbGlzZWQgYnkgdGhlIHBlci1wb3J0IHNlbWFwaG9yZS4KICAqLwotc3RhdGljIHZvaWQgdWFydF9zaHV0ZG93bihzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgdm9pZCB1YXJ0X3NodXRkb3duKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAKIAkvKgogCSAqIFNldCB0aGUgVFRZIElPIGVycm9yIG1hcmtlcgpAQCAtNDMwLDExICs0MjksMTAgQEAKIEVYUE9SVF9TWU1CT0wodWFydF9nZXRfZGl2aXNvcik7CiAKIC8qIEZJWE1FOiBDb25zaXN0ZW50IGxvY2tpbmcgcG9saWN5ICovCi1zdGF0aWMgdm9pZAotdWFydF9jaGFuZ2Vfc3BlZWQoc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQorc3RhdGljIHZvaWQgdWFydF9jaGFuZ2Vfc3BlZWQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLAorCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+dHR5OwogCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3M7CiAKQEAgLTQ2Myw4ICs0NjEsOCBAQAogCXVwb3J0LT5vcHMtPnNldF90ZXJtaW9zKHVwb3J0LCB0ZXJtaW9zLCBvbGRfdGVybWlvcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1fX3VhcnRfcHV0X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgc3RydWN0IGNpcmNfYnVmICpjaXJjLCB1bnNpZ25lZCBjaGFyIGMpCitzdGF0aWMgaW5saW5lIGludCBfX3VhcnRfcHV0X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQlzdHJ1Y3QgY2lyY19idWYgKmNpcmMsIHVuc2lnbmVkIGNoYXIgYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwpAQCAtNDk0LDggKzQ5Miw4IEBACiAJdWFydF9zdGFydCh0dHkpOwogfQogCi1zdGF0aWMgaW50Ci11YXJ0X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorc3RhdGljIGludCB1YXJ0X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKQEAgLTY3NSw3ICs2NzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVhcnRfc2V0X2luZm8oc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLAorc3RhdGljIGludCB1YXJ0X3NldF9pbmZvKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSwKIAkJCSBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKm5ld2luZm8pCiB7CiAJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgbmV3X3NlcmlhbDsKQEAgLTc3MCw3ICs3NjgsNyBAQAogCQkgKiBXZSBuZWVkIHRvIHNodXRkb3duIHRoZSBzZXJpYWwgcG9ydCBhdCB0aGUgb2xkCiAJCSAqIHBvcnQvdHlwZS9pcnEgY29tYmluYXRpb24uCiAJCSAqLwotCQl1YXJ0X3NodXRkb3duKHN0YXRlKTsKKwkJdWFydF9zaHV0ZG93bih0dHksIHN0YXRlKTsKIAl9CiAKIAlpZiAoY2hhbmdlX3BvcnQpIHsKQEAgLTg2OSwyNSArODY3LDI3IEBACiAJCQkJICAgICAgICJpcyBkZXByZWNhdGVkLlxuIiwgY3VycmVudC0+Y29tbSwKIAkJCQkgICAgICAgdHR5X25hbWUocG9ydC0+dHR5LCBidWYpKTsKIAkJCX0KLQkJCXVhcnRfY2hhbmdlX3NwZWVkKHN0YXRlLCBOVUxMKTsKKwkJCXVhcnRfY2hhbmdlX3NwZWVkKHR0eSwgc3RhdGUsIE5VTEwpOwogCQl9CiAJfSBlbHNlCi0JCXJldHZhbCA9IHVhcnRfc3RhcnR1cChzdGF0ZSwgMSk7CisJCXJldHZhbCA9IHVhcnRfc3RhcnR1cCh0dHksIHN0YXRlLCAxKTsKICBleGl0OgogCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLQotLyoKLSAqIHVhcnRfZ2V0X2xzcl9pbmZvIC0gZ2V0IGxpbmUgc3RhdHVzIHJlZ2lzdGVyIGluZm8uCi0gKiBOb3RlOiB1YXJ0X2lvY3RsIHByb3RlY3RzIHVzIGFnYWluc3QgaGFuZ3Vwcy4KKy8qKgorICoJdWFydF9nZXRfbHNyX2luZm8JLQlnZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgaW5mbworICoJQHR0eTogdHR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgVUFSVAorICoJQHN0YXRlOiBVQVJUIGJlaW5nIHF1ZXJpZWQKKyAqCUB2YWx1ZTogcmV0dXJuZWQgbW9kZW0gdmFsdWUKKyAqCisgKglOb3RlOiB1YXJ0X2lvY3RsIHByb3RlY3RzIHVzIGFnYWluc3QgaGFuZ3Vwcy4KICAqLwotc3RhdGljIGludCB1YXJ0X2dldF9sc3JfaW5mbyhzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQorc3RhdGljIGludCB1YXJ0X2dldF9sc3JfaW5mbyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgX191c2VyICp2YWx1ZSkKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7Ci0Jc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXVuc2lnbmVkIGludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSB1cG9ydC0+b3BzLT50eF9lbXB0eSh1cG9ydCk7CkBAIC05MDAsNyArOTAwLDcgQEAKIAkgKi8KIAlpZiAodXBvcnQtPnhfY2hhciB8fAogCSAgICAoKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKCZzdGF0ZS0+eG1pdCkgPiAwKSAmJgotCSAgICAgIXBvcnQtPnR0eS0+c3RvcHBlZCAmJiAhcG9ydC0+dHR5LT5od19zdG9wcGVkKSkKKwkgICAgICF0dHktPnN0b3BwZWQgJiYgIXR0eS0+aHdfc3RvcHBlZCkpCiAJCXJlc3VsdCAmPSB+VElPQ1NFUl9URU1UOwogCiAJcmV0dXJuIHB1dF91c2VyKHJlc3VsdCwgdmFsdWUpOwpAQCAtOTYxLDcgKzk2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWFydF9kb19hdXRvY29uZmlnKHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQgdWFydF9kb19hdXRvY29uZmlnKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CkBAIC05ODAsNyArOTgwLDcgQEAKIAogCXJldCA9IC1FQlVTWTsKIAlpZiAodHR5X3BvcnRfdXNlcnMocG9ydCkgPT0gMSkgewotCQl1YXJ0X3NodXRkb3duKHN0YXRlKTsKKwkJdWFydF9zaHV0ZG93bih0dHksIHN0YXRlKTsKIAogCQkvKgogCQkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwb3J0IHR5cGUgY29uZmlndXJlZCwKQEAgLTk5OSw3ICs5OTksNyBAQAogCQkgKi8KIAkJdXBvcnQtPm9wcy0+Y29uZmlnX3BvcnQodXBvcnQsIGZsYWdzKTsKIAotCQlyZXQgPSB1YXJ0X3N0YXJ0dXAoc3RhdGUsIDEpOworCQlyZXQgPSB1YXJ0X3N0YXJ0dXAodHR5LCBzdGF0ZSwgMSk7CiAJfQogCW11dGV4X3VubG9jaygmcG9ydC0+bXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xMTIyLDExICsxMTIyLDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DU1NFUklBTDoKLQkJcmV0ID0gdWFydF9zZXRfaW5mbyhzdGF0ZSwgdWFyZyk7CisJCXJldCA9IHVhcnRfc2V0X2luZm8odHR5LCBzdGF0ZSwgdWFyZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DU0VSQ09ORklHOgotCQlyZXQgPSB1YXJ0X2RvX2F1dG9jb25maWcoc3RhdGUpOworCQlyZXQgPSB1YXJ0X2RvX2F1dG9jb25maWcodHR5LCBzdGF0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBUSU9DU0VSR1dJTEQ6IC8qIG9ic29sZXRlICovCkBAIC0xMTcyLDcgKzExNzIsNyBAQAogCSAqLwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBUSU9DU0VSR0VUTFNSOiAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLQkJcmV0ID0gdWFydF9nZXRfbHNyX2luZm8oc3RhdGUsIHVhcmcpOworCQlyZXQgPSB1YXJ0X2dldF9sc3JfaW5mbyh0dHksIHN0YXRlLCB1YXJnKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiB7CkBAIC0xMTk0LDcgKzExOTQsNyBAQAogCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAogCWlmICh1cG9ydC0+b3BzLT5zZXRfbGRpc2MpCi0JCXVwb3J0LT5vcHMtPnNldF9sZGlzYyh1cG9ydCk7CisJCXVwb3J0LT5vcHMtPnNldF9sZGlzYyh1cG9ydCwgdHR5LT50ZXJtaW9zLT5jX2xpbmUpOwogfQogCiBzdGF0aWMgdm9pZCB1YXJ0X3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCkBAIC0xMjE5LDcgKzEyMTksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JdWFydF9jaGFuZ2Vfc3BlZWQoc3RhdGUsIG9sZF90ZXJtaW9zKTsKKwl1YXJ0X2NoYW5nZV9zcGVlZCh0dHksIHN0YXRlLCBvbGRfdGVybWlvcyk7CiAKIAkvKiBIYW5kbGUgdHJhbnNpdGlvbiB0byBCMCBzdGF0dXMgKi8KIAlpZiAoKG9sZF90ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpICYmICEoY2ZsYWcgJiBDQkFVRCkpCkBAIC0xMjcyLDggKzEyNzIsOSBAQAogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHR0eV9wb3J0ICpwb3J0OwogCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04oIWtlcm5lbF9sb2NrZWQoKSk7CisJQlVHX09OKCF0dHlfbG9ja2VkKCkpOwogCiAJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuOwpAQCAtMTI4NCw5ICsxMjg1LDEyIEBACiAJcHJfZGVidWcoInVhcnRfY2xvc2UoJWQpIGNhbGxlZFxuIiwgdXBvcnQtPmxpbmUpOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkKKwlpZiAodHR5X2h1bmdfdXBfcChmaWxwKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJCWdvdG8gZG9uZTsKKwl9CiAKIAlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKHBvcnQtPmNvdW50ICE9IDEpKSB7CiAJCS8qCkBAIC0xMzA1LDggKzEzMDksMTAgQEAKIAkJICAgICAgIHR0eS0+bmFtZSwgcG9ydC0+Y291bnQpOwogCQlwb3J0LT5jb3VudCA9IDA7CiAJfQotCWlmIChwb3J0LT5jb3VudCkKKwlpZiAocG9ydC0+Y291bnQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCQlnb3RvIGRvbmU7CisJfQogCiAJLyoKIAkgKiBOb3cgd2Ugd2FpdCBmb3IgdGhlIHRyYW5zbWl0IGJ1ZmZlciB0byBjbGVhcjsgYW5kIHdlIG5vdGlmeQpAQCAtMTMxNCw5ICsxMzIwLDE4IEBACiAJICogc2V0dGluZyB0dHktPmNsb3NpbmcuCiAJICovCiAJdHR5LT5jbG9zaW5nID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocG9ydC0+Y2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKQotCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgbXNlY3NfdG9famlmZmllcyhwb3J0LT5jbG9zaW5nX3dhaXQpKTsKKwlpZiAocG9ydC0+Y2xvc2luZ193YWl0ICE9IEFTWU5DX0NMT1NJTkdfV0FJVF9OT05FKSB7CisJCS8qCisJCSAqIGhhY2s6IG9wZW4tY29kZWQgdHR5X3dhaXRfdW50aWxfc2VudCB0byBhdm9pZAorCQkgKiByZWN1cnNpdmUgdHR5X2xvY2sKKwkJICovCisJCWxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMocG9ydC0+Y2xvc2luZ193YWl0KTsKKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHR0eS0+d3JpdGVfd2FpdCwKKwkJCQkhdHR5X2NoYXJzX2luX2J1ZmZlcih0dHkpLCB0aW1lb3V0KSA+PSAwKQorCQkJX191YXJ0X3dhaXRfdW50aWxfc2VudCh1cG9ydCwgdGltZW91dCk7CisJfQogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB3ZSBzdG9wIGFjY2VwdGluZyBpbnB1dC4gIFRvIGRvIHRoaXMsIHdlCkBAIC0xMzMyLDQ1ICsxMzQ3LDQ3IEBACiAJCSAqIGhhcyBjb21wbGV0ZWx5IGRyYWluZWQ7IHRoaXMgaXMgZXNwZWNpYWxseQogCQkgKiBpbXBvcnRhbnQgaWYgdGhlcmUgaXMgYSB0cmFuc21pdCBGSUZPIQogCQkgKi8KLQkJdWFydF93YWl0X3VudGlsX3NlbnQodHR5LCB1cG9ydC0+dGltZW91dCk7CisJCV9fdWFydF93YWl0X3VudGlsX3NlbnQodXBvcnQsIHVwb3J0LT50aW1lb3V0KTsKIAl9CiAKLQl1YXJ0X3NodXRkb3duKHN0YXRlKTsKKwl1YXJ0X3NodXRkb3duKHR0eSwgc3RhdGUpOwogCXVhcnRfZmx1c2hfYnVmZmVyKHR0eSk7CiAKIAl0dHlfbGRpc2NfZmx1c2godHR5KTsKIAotCXR0eS0+Y2xvc2luZyA9IDA7CiAJdHR5X3BvcnRfdHR5X3NldChwb3J0LCBOVUxMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXR0eS0+Y2xvc2luZyA9IDA7CiAKIAlpZiAocG9ydC0+YmxvY2tlZF9vcGVuKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHBvcnQtPmNsb3NlX2RlbGF5KQogCQkJbXNsZWVwX2ludGVycnVwdGlibGUocG9ydC0+Y2xvc2VfZGVsYXkpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSBpZiAoIXVhcnRfY29uc29sZSh1cG9ydCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgMyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJfQogCiAJLyoKIAkgKiBXYWtlIHVwIGFueW9uZSB0cnlpbmcgdG8gb3BlbiB0aGlzIHBvcnQuCiAJICovCiAJY2xlYXJfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBvcnQtPm9wZW5fd2FpdCk7CiAKIGRvbmU6CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIHVhcnRfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQorc3RhdGljIHZvaWQgX191YXJ0X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgdGltZW91dCkKIHsKLQlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzdGF0ZS0+dWFydF9wb3J0OwogCXVuc2lnbmVkIGxvbmcgY2hhcl90aW1lLCBleHBpcmU7CiAKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04gfHwgcG9ydC0+Zmlmb3NpemUgPT0gMCkKIAkJcmV0dXJuOwogCi0JbG9ja19rZXJuZWwoKTsKLQogCS8qCiAJICogU2V0IHRoZSBjaGVjayBpbnRlcnZhbCB0byBiZSAxLzUgb2YgdGhlIGVzdGltYXRlZCB0aW1lIHRvCiAJICogc2VuZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGFuZCBtYWtlIGl0IGF0IGxlYXN0IDEuICBUaGUgY2hlY2sKQEAgLTE0MTYsNyArMTQzMywxNiBAQAogCQkJYnJlYWs7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7IC8qIG1pZ2h0IG5vdCBiZSBuZWVkZWQgKi8KLQl1bmxvY2tfa2VybmVsKCk7Cit9CisKK3N0YXRpYyB2b2lkIHVhcnRfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KQoreworCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CisKKwl0dHlfbG9jaygpOworCV9fdWFydF93YWl0X3VudGlsX3NlbnQocG9ydCwgdGltZW91dCk7CisJdHR5X3VubG9jaygpOwogfQogCiAvKgpAQCAtMTQyOSwxNiArMTQ1NSwxOSBAQAogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04oIWtlcm5lbF9sb2NrZWQoKSk7CisJQlVHX09OKCF0dHlfbG9ja2VkKCkpOwogCXByX2RlYnVnKCJ1YXJ0X2hhbmd1cCglZClcbiIsIHN0YXRlLT51YXJ0X3BvcnQtPmxpbmUpOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOwogCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX05PUk1BTF9BQ1RJVkUpIHsKIAkJdWFydF9mbHVzaF9idWZmZXIodHR5KTsKLQkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CisJCXVhcnRfc2h1dGRvd24odHR5LCBzdGF0ZSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJCXBvcnQtPmNvdW50ID0gMDsKIAkJY2xlYXJfYml0KEFTWU5DQl9OT1JNQUxfQUNUSVZFLCAmcG9ydC0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiAJCXR0eV9wb3J0X3R0eV9zZXQocG9ydCwgTlVMTCk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+b3Blbl93YWl0KTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CkBAIC0xNDQ2LDE1ICsxNDc1LDE5IEBACiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CiB9CiAKLS8qCi0gKiBDb3B5IGFjcm9zcyB0aGUgc2VyaWFsIGNvbnNvbGUgY2ZsYWcgc2V0dGluZyBpbnRvIHRoZSB0ZXJtaW9zIHNldHRpbmdzCi0gKiBmb3IgdGhlIGluaXRpYWwgb3BlbiBvZiB0aGUgcG9ydC4gIFRoaXMgYWxsb3dzIGNvbnRpbnVpdHkgYmV0d2VlbiB0aGUKLSAqIGtlcm5lbCBzZXR0aW5ncywgYW5kIHRoZSBzZXR0aW5ncyBpbml0IGFkb3B0cyB3aGVuIGl0IG9wZW5zIHRoZSBwb3J0Ci0gKiBmb3IgdGhlIGZpcnN0IHRpbWUuCisvKioKKyAqCXVhcnRfdXBkYXRlX3Rlcm1pb3MJLQl1cGRhdGUgdGhlIHRlcm1pbmFsIGh3IHNldHRpbmdzCisgKglAdHR5OiB0dHkgYXNzb2NpYXRlZCB3aXRoIFVBUlQKKyAqCUBzdGF0ZTogVUFSVCB0byB1cGRhdGUKKyAqCisgKglDb3B5IGFjcm9zcyB0aGUgc2VyaWFsIGNvbnNvbGUgY2ZsYWcgc2V0dGluZyBpbnRvIHRoZSB0ZXJtaW9zIHNldHRpbmdzCisgKglmb3IgdGhlIGluaXRpYWwgb3BlbiBvZiB0aGUgcG9ydC4gIFRoaXMgYWxsb3dzIGNvbnRpbnVpdHkgYmV0d2VlbiB0aGUKKyAqCWtlcm5lbCBzZXR0aW5ncywgYW5kIHRoZSBzZXR0aW5ncyBpbml0IGFkb3B0cyB3aGVuIGl0IG9wZW5zIHRoZSBwb3J0CisgKglmb3IgdGhlIGZpcnN0IHRpbWUuCiAgKi8KLXN0YXRpYyB2b2lkIHVhcnRfdXBkYXRlX3Rlcm1pb3Moc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlKQorc3RhdGljIHZvaWQgdWFydF91cGRhdGVfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBzdGF0ZS0+cG9ydC50dHk7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7CiAKIAlpZiAodWFydF9jb25zb2xlKHBvcnQpICYmIHBvcnQtPmNvbnMtPmNmbGFnKSB7CkBAIC0xNDcxLDcgKzE1MDQsNyBAQAogCQkvKgogCQkgKiBNYWtlIHRlcm1pb3Mgc2V0dGluZ3MgdGFrZSBlZmZlY3QuCiAJCSAqLwotCQl1YXJ0X2NoYW5nZV9zcGVlZChzdGF0ZSwgTlVMTCk7CisJCXVhcnRfY2hhbmdlX3NwZWVkKHR0eSwgc3RhdGUsIE5VTEwpOwogCiAJCS8qCiAJCSAqIEFuZCBmaW5hbGx5IGVuYWJsZSB0aGUgUlRTIGFuZCBEVFIgc2lnbmFscy4KQEAgLTE0ODEsOTIgKzE1MTQsMzkgQEAKIAl9CiB9CiAKLS8qCi0gKiBCbG9jayB0aGUgb3BlbiB1bnRpbCB0aGUgcG9ydCBpcyByZWFkeS4gIFdlIG11c3QgYmUgY2FsbGVkIHdpdGgKLSAqIHRoZSBwZXItcG9ydCBzZW1hcGhvcmUgaGVsZC4KLSAqLwotc3RhdGljIGludAotdWFydF9ibG9ja190aWxfcmVhZHkoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQgdWFydF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpCiB7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKHBvcnQsIHN0cnVjdCB1YXJ0X3N0YXRlLCBwb3J0KTsKIAlzdHJ1Y3QgdWFydF9wb3J0ICp1cG9ydCA9IHN0YXRlLT51YXJ0X3BvcnQ7Ci0Jc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwotCXVuc2lnbmVkIGludCBtY3RybDsKLQotCXBvcnQtPmJsb2NrZWRfb3BlbisrOwotCXBvcnQtPmNvdW50LS07Ci0KLQlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+b3Blbl93YWl0LCAmd2FpdCk7Ci0Jd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBoYXZlIGJlZW4gaHVuZyB1cCwgdGVsbCB1c2Vyc3BhY2UvcmVzdGFydCBvcGVuLgotCQkgKi8KLQkJaWYgKHR0eV9odW5nX3VwX3AoZmlscCkgfHwgcG9ydC0+dHR5ID09IE5VTEwpCi0JCQlicmVhazsKLQotCQkvKgotCQkgKiBJZiB0aGUgcG9ydCBoYXMgYmVlbiBjbG9zZWQsIHRlbGwgdXNlcnNwYWNlL3Jlc3RhcnQgb3Blbi4KLQkJICovCi0JCWlmICghKHBvcnQtPmZsYWdzICYgQVNZTkNfSU5JVElBTElaRUQpKQotCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogSWYgbm9uLWJsb2NraW5nIG1vZGUgaXMgc2V0LCBvciBDTE9DQUwgbW9kZSBpcyBzZXQsCi0JCSAqIHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgdGhlIG1vZGVtIHN0YXR1cyBsaW5lcyB0bwotCQkgKiBpbmRpY2F0ZSB0aGF0IHRoZSBwb3J0IGlzIHJlYWR5LgotCQkgKgotCQkgKiBBbHNvLCBpZiB0aGUgcG9ydCBpcyBub3QgZW5hYmxlZC9jb25maWd1cmVkLCB3ZSB3YW50Ci0JCSAqIHRvIGFsbG93IHRoZSBvcGVuIHRvIHN1Y2NlZWQgaGVyZS4gIE5vdGUgdGhhdCB3ZSB3aWxsCi0JCSAqIGhhdmUgc2V0IFRUWV9JT19FUlJPUiBmb3IgYSBub24tZXhpc3RhbnQgcG9ydC4KLQkJICovCi0JCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHx8Ci0JCSAgICAocG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0xPQ0FMKSB8fAotCQkgICAgKHBvcnQtPnR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkKLQkJCWJyZWFrOwotCi0JCS8qCi0JCSAqIFNldCBEVFIgdG8gYWxsb3cgbW9kZW0gdG8ga25vdyB3ZSdyZSB3YWl0aW5nLiAgRG8KLQkJICogbm90IHNldCBSVFMgaGVyZSAtIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGNhdGNoCi0JCSAqIHRoZSBkYXRhIGZyb20gdGhlIG1vZGVtLgotCQkgKi8KLQkJaWYgKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENCQVVEKQotCQkJdWFydF9zZXRfbWN0cmwodXBvcnQsIFRJT0NNX0RUUik7Ci0KLQkJLyoKLQkJICogYW5kIHdhaXQgZm9yIHRoZSBjYXJyaWVyIHRvIGluZGljYXRlIHRoYXQgdGhlCi0JCSAqIG1vZGVtIGlzIHJlYWR5IGZvciB1cy4KLQkJICovCi0JCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKLQkJdXBvcnQtPm9wcy0+ZW5hYmxlX21zKHVwb3J0KTsKLQkJbWN0cmwgPSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOwotCQlzcGluX3VubG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKLQkJaWYgKG1jdHJsICYgVElPQ01fQ0FSKQotCQkJYnJlYWs7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQlicmVhazsKLQl9Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9ydC0+b3Blbl93YWl0LCAmd2FpdCk7Ci0KLQlwb3J0LT5jb3VudCsrOwotCXBvcnQtPmJsb2NrZWRfb3Blbi0tOwotCi0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JaWYgKCFwb3J0LT50dHkgfHwgdHR5X2h1bmdfdXBfcChmaWxwKSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KKwlpbnQgbWN0cmw7CisJc3Bpbl9sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCXVwb3J0LT5vcHMtPmVuYWJsZV9tcyh1cG9ydCk7CisJbWN0cmwgPSB1cG9ydC0+b3BzLT5nZXRfbWN0cmwodXBvcnQpOworCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOworCWlmIChtY3RybCAmIFRJT0NNX0NBUikKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHVhcnRfZHRyX3J0cyhzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQsIGludCBvbm9mZikKK3sKKwlzdHJ1Y3QgdWFydF9zdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHVhcnRfc3RhdGUsIHBvcnQpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKKworCWlmIChvbm9mZikgeworCQl1YXJ0X3NldF9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBvcGVuIHRvIHN1Y2NlZWQsCisJCSAqIGFkanVzdCB0aGluZ3MgdG8gc3VpdC4KKwkJICovCisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJnBvcnQtPmZsYWdzKSkKKwkJCXVhcnRfdXBkYXRlX3Rlcm1pb3MocG9ydC0+dHR5LCBzdGF0ZSk7CisJfQorCWVsc2UKKwkJdWFydF9jbGVhcl9tY3RybCh1cG9ydCwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKK30KKwogc3RhdGljIHN0cnVjdCB1YXJ0X3N0YXRlICp1YXJ0X2dldChzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgaW50IGxpbmUpCiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlOwpAQCAtMTYxMSw3ICsxNTkxLDcgQEAKIAlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQ7CiAJaW50IHJldHZhbCwgbGluZSA9IHR0eS0+aW5kZXg7CiAKLQlCVUdfT04oIWtlcm5lbF9sb2NrZWQoKSk7CisJQlVHX09OKCF0dHlfbG9ja2VkKCkpOwogCXByX2RlYnVnKCJ1YXJ0X29wZW4oJWQpIGNhbGxlZFxuIiwgbGluZSk7CiAKIAkvKgpAQCAtMTY2OCwyMyArMTY0OCwxNCBAQAogCS8qCiAJICogU3RhcnQgdXAgdGhlIHNlcmlhbCBwb3J0LgogCSAqLwotCXJldHZhbCA9IHVhcnRfc3RhcnR1cChzdGF0ZSwgMCk7CisJcmV0dmFsID0gdWFydF9zdGFydHVwKHR0eSwgc3RhdGUsIDApOwogCiAJLyoKIAkgKiBJZiB3ZSBzdWNjZWVkZWQsIHdhaXQgdW50aWwgdGhlIHBvcnQgaXMgcmVhZHkuCiAJICovCi0JaWYgKHJldHZhbCA9PSAwKQotCQlyZXR2YWwgPSB1YXJ0X2Jsb2NrX3RpbF9yZWFkeShmaWxwLCBzdGF0ZSk7CiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7Ci0KLQkvKgotCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IG9wZW4gdG8gc3VjY2VlZCwgYWRqdXN0IHRoaW5ncyB0byBzdWl0LgotCSAqLwotCWlmIChyZXR2YWwgPT0gMCAmJiAhKHBvcnQtPmZsYWdzICYgQVNZTkNfTk9STUFMX0FDVElWRSkpIHsKLQkJc2V0X2JpdChBU1lOQ0JfTk9STUFMX0FDVElWRSwgJnBvcnQtPmZsYWdzKTsKLQotCQl1YXJ0X3VwZGF0ZV90ZXJtaW9zKHN0YXRlKTsKLQl9CisJaWYgKHJldHZhbCA9PSAwKQorCQlyZXR2YWwgPSB0dHlfcG9ydF9ibG9ja190aWxfcmVhZHkocG9ydCwgdHR5LCBmaWxwKTsKIAogZmFpbDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMjAxMCw5ICsxOTgxLDEzIEBACiAJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnN0YXRlLT5wb3J0OwogCXN0cnVjdCBkZXZpY2UgKnR0eV9kZXY7CiAJc3RydWN0IHVhcnRfbWF0Y2ggbWF0Y2ggPSB7dXBvcnQsIGRydn07CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAogCW11dGV4X2xvY2soJnBvcnQtPm11dGV4KTsKIAorCS8qIE11c3QgYmUgaW5zaWRlIHRoZSBtdXRleCBsb2NrIHVudGlsIHdlIGNvbnZlcnQgdG8gdHR5X3BvcnQgKi8KKwl0dHkgPSBwb3J0LT50dHk7CisKIAl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQodXBvcnQtPmRldiwgJm1hdGNoLCBzZXJpYWxfbWF0Y2hfcG9ydCk7CiAJaWYgKGRldmljZV9tYXlfd2FrZXVwKHR0eV9kZXYpKSB7CiAJCWVuYWJsZV9pcnFfd2FrZSh1cG9ydC0+aXJxKTsKQEAgLTIxMDUsOSArMjA4MCwxMiBAQAogCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmdXBvcnQtPmxvY2spOwogCQlpZiAoY29uc29sZV9zdXNwZW5kX2VuYWJsZWQgfHwgIXVhcnRfY29uc29sZSh1cG9ydCkpIHsKKwkJCS8qIFByb3RlY3RlZCBieSBwb3J0IG11dGV4IGZvciBub3cgKi8KKwkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAJCQlyZXQgPSBvcHMtPnN0YXJ0dXAodXBvcnQpOwogCQkJaWYgKHJldCA9PSAwKSB7Ci0JCQkJdWFydF9jaGFuZ2Vfc3BlZWQoc3RhdGUsIE5VTEwpOworCQkJCWlmICh0dHkpCisJCQkJCXVhcnRfY2hhbmdlX3NwZWVkKHR0eSwgc3RhdGUsIE5VTEwpOwogCQkJCXNwaW5fbG9ja19pcnEoJnVwb3J0LT5sb2NrKTsKIAkJCQlvcHMtPnNldF9tY3RybCh1cG9ydCwgdXBvcnQtPm1jdHJsKTsKIAkJCQlvcHMtPnN0YXJ0X3R4KHVwb3J0KTsKQEAgLTIxMTksNyArMjA5Nyw3IEBACiAJCQkJICogQ2xlYXIgdGhlICJpbml0aWFsaXplZCIgZmxhZyBzbyB3ZSB3b24ndCB0cnkKIAkJCQkgKiB0byBjYWxsIHRoZSBsb3cgbGV2ZWwgZHJpdmVycyBzaHV0ZG93biBtZXRob2QuCiAJCQkJICovCi0JCQkJdWFydF9zaHV0ZG93bihzdGF0ZSk7CisJCQkJdWFydF9zaHV0ZG93bih0dHksIHN0YXRlKTsKIAkJCX0KIAkJfQogCkBAIC0yMzEyLDYgKzIyOTAsMTEgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIHVhcnRfcG9ydF9vcHMgPSB7CisJLmNhcnJpZXJfcmFpc2VkID0gdWFydF9jYXJyaWVyX3JhaXNlZCwKKwkuZHRyX3J0cwk9IHVhcnRfZHRyX3J0cywKK307CisKIC8qKgogICoJdWFydF9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGRyaXZlciB3aXRoIHRoZSB1YXJ0IGNvcmUgbGF5ZXIKICAqCUBkcnY6IGxvdyBsZXZlbCBkcml2ZXIgc3RydWN0dXJlCkBAIC0yMzY4LDYgKzIzNTEsNyBAQAogCQlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQgPSAmc3RhdGUtPnBvcnQ7CiAKIAkJdHR5X3BvcnRfaW5pdChwb3J0KTsKKwkJcG9ydC0+b3BzID0gJnVhcnRfcG9ydF9vcHM7CiAJCXBvcnQtPmNsb3NlX2RlbGF5ICAgICA9IDUwMDsJLyogLjUgc2Vjb25kcyAqLwogCQlwb3J0LT5jbG9zaW5nX3dhaXQgICAgPSAzMDAwMDsJLyogMzAgc2Vjb25kcyAqLwogCQl0YXNrbGV0X2luaXQoJnN0YXRlLT50bGV0LCB1YXJ0X3Rhc2tsZXRfYWN0aW9uLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NzLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCBhYjE3YzA4Li4xNDFjNjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY3MuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzY29kZS5oPgpAQCAtMTE1LDE2ICsxMTQsMTQgQEAKIAogc3RhdGljIGludCBxdWlya19wb3N0X2libShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQljb25mX3JlZ190IHJlZyA9IHsgMCwgQ1NfUkVBRCwgMHg4MDAsIDAgfTsKKwl1OCB2YWw7CiAJaW50IHJldDsKIAotCXJldCA9IHBjbWNpYV9hY2Nlc3NfY29uZmlndXJhdGlvbl9yZWdpc3RlcihsaW5rLCAmcmVnKTsKKwlyZXQgPSBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShsaW5rLCAweDgwMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKLQlyZWcuQWN0aW9uID0gQ1NfV1JJVEU7Ci0JcmVnLlZhbHVlID0gcmVnLlZhbHVlIHwgMTsKLQlyZXQgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIobGluaywgJnJlZyk7CisJcmV0ID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGxpbmssIDB4ODAwLCB2YWwgfCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIAlyZXR1cm4gMDsKQEAgLTMzOCw4ICszMzUsOCBAQAogCWluZm8tPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gaW5mbzsKIAotCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JbGluay0+aW8uTnVtUG9ydHMxID0gODsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IDg7CiAJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogCWlmIChkb19zb3VuZCkgewogCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKQEAgLTQyNywxMiArNDI0LDEzIEBACiAJCXBfZGV2LT5jb25mLlZwcCA9CiAJCQljZi0+dnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0gLyAxMDAwMDsKIAorCXBfZGV2LT5pb19saW5lcyA9ICgoKnRyeSAmIDB4MSkgPT0gMCkgPworCQkJMTYgOiBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoY2YtPmlvLndpblswXS5sZW4gPT0gc2l6ZV90YWJsZVsoKnRyeSA+PiAxKV0pCiAJICAgICYmIChjZi0+aW8ud2luWzBdLmJhc2UgIT0gMCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gKCgqdHJ5ICYgMHgxKSA9PSAwKSA/Ci0JCQkxNiA6IGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC00NDksOSArNDQ3LDkgQEAKIAogCWlmICgoY2YtPmlvLm53aW4gPiAwKSAmJiAoKGNmLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSA8PSAzKSkgewogCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZVtqXTsKLQkJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGJhc2Vbal0gPyAxNiA6IDM7Ci0JCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBiYXNlW2pdOworCQkJcF9kZXYtPmlvX2xpbmVzID0gYmFzZVtqXSA/IDE2IDogMzsKKwkJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKQogCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNDY2LDEzICs0NjQsMTMgQEAKIAkvKiBJZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGxvb2sgdXAgdGhlIHBvcnQgYW5kIGlycSAqLwogCWlmIChsaW5rLT5mdW5jdGlvbl9jb25maWcpIHsKIAkJdW5zaWduZWQgaW50IHBvcnQgPSAwOwotCQlpZiAoKGxpbmstPmlvLkJhc2VQb3J0MiAhPSAwKSAmJgotCQkgICAgKGxpbmstPmlvLk51bVBvcnRzMiA9PSA4KSkgewotCQkJcG9ydCA9IGxpbmstPmlvLkJhc2VQb3J0MjsKKwkJaWYgKChsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kICE9IDApICYmCisJCQkocmVzb3VyY2Vfc2l6ZShsaW5rLT5yZXNvdXJjZVsxXSkgPT0gOCkpIHsKKwkJCXBvcnQgPSBsaW5rLT5yZXNvdXJjZVsxXS0+ZW5kOwogCQkJaW5mby0+c2xhdmUgPSAxOwogCQl9IGVsc2UgaWYgKChpbmZvLT5tYW5maWQgPT0gTUFORklEX09TSVRFQ0gpICYmCi0JCQkgICAobGluay0+aW8uTnVtUG9ydHMxID09IDB4NDApKSB7Ci0JCQlwb3J0ID0gbGluay0+aW8uQmFzZVBvcnQxICsgMHgyODsKKwkJCShyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKSA9PSAweDQwKSkgeworCQkJcG9ydCA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydCArIDB4Mjg7CiAJCQlpbmZvLT5zbGF2ZSA9IDE7CiAJCX0KIAkJaWYgKGluZm8tPnNsYXZlKSB7CkBAIC01MTAsNyArNTA4LDcgQEAKIAlpID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYgKGkgIT0gMCkKIAkJcmV0dXJuIC0xOwotCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+aW8uQmFzZVBvcnQxLCBsaW5rLT5pcnEpOworCXJldHVybiBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogfQogCiBzdGF0aWMgaW50IG11bHRpX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCkBAIC01MjQsMTAgKzUyMiwxMCBAQAogCS8qIFRoZSBxdWFkIHBvcnQgY2FyZHMgaGF2ZSBiYWQgQ0lTJ3MsIHNvIGp1c3QgbG9vayBmb3IgYQogCSAgIHdpbmRvdyBsYXJnZXIgdGhhbiA4IHBvcnRzIGFuZCBhc3N1bWUgaXQgd2lsbCBiZSByaWdodCAqLwogCWlmICgoY2YtPmlvLm53aW4gPT0gMSkgJiYgKGNmLT5pby53aW5bMF0ubGVuID4gOCkpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7Ci0JCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQxICsgODsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGNmLT5pby53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPmlvX2xpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpKSB7CisJCQkqYmFzZTIgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ICsgODsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNTQzLDExICs1NDEsMTEgQEAKIAlpbnQgKmJhc2UyID0gcHJpdl9kYXRhOwogCiAJaWYgKGNmLT5pby5ud2luID09IDIpIHsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGNmLT5pby53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGNmLT5pby53aW5bMV0uYmFzZTsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2YtPmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCWlmICghcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pKSB7Ci0JCQkqYmFzZTIgPSBwX2Rldi0+aW8uQmFzZVBvcnQyOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gY2YtPmlvLndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gY2YtPmlvLndpblsxXS5iYXNlOworCQlwX2Rldi0+aW9fbGluZXMgPSBjZi0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpIHsKKwkJCSpiYXNlMiA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQ7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTU2MCwxMCArNTU4LDEwIEBACiAJaW50IGksIGJhc2UyID0gMDsKIAogCS8qIEZpcnN0LCBsb29rIGZvciBhIGdlbmVyaWMgZnVsbC1zaXplZCB3aW5kb3cgKi8KLQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpbmZvLT5tdWx0aSAqIDg7CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCA9IGluZm8tPm11bHRpICogODsKIAlpZiAocGNtY2lhX2xvb3BfY29uZmlnKGxpbmssIG11bHRpX2NvbmZpZ19jaGVjaywgJmJhc2UyKSkgewogCQkvKiBJZiB0aGF0IGRpZG4ndCB3b3JrLCBsb29rIGZvciB0d28gd2luZG93cyAqLwotCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSA4OworCQlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gbGluay0+cmVzb3VyY2VbMV0tPmVuZCA9IDg7CiAJCWluZm8tPm11bHRpID0gMjsKIAkJaWYgKHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBtdWx0aV9jb25maWdfY2hlY2tfbm90cGlja3ksCiAJCQkJICAgICAgICZiYXNlMikpIHsKQEAgLTU5OSw5ICs1OTcsOSBAQAogCQkgICAgbGluay0+Y29uZi5Db25maWdJbmRleCA9PSAzKSB7CiAJCQllcnIgPSBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgYmFzZTIsCiAJCQkJCWxpbmstPmlycSk7Ci0JCQliYXNlMiA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJCWJhc2UyID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OzsKIAkJfSBlbHNlIHsKLQkJCWVyciA9IHNldHVwX3NlcmlhbChsaW5rLCBpbmZvLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQllcnIgPSBzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAogCQkJCQlsaW5rLT5pcnEpOwogCQl9CiAJCWluZm8tPmM5NTBjdHJsID0gYmFzZTI7CkBAIC02MTYsNyArNjE0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKTsKKwlzZXR1cF9zZXJpYWwobGluaywgaW5mbywgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tdWx0aSAtIDE7IGkrKykKIAkJc2V0dXBfc2VyaWFsKGxpbmssIGluZm8sIGJhc2UyICsgKDggKiBpKSwKIAkJCQlsaW5rLT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA1ZjkwZmNkLi5jMjkxYjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMzQ2LDYgKzM0NiwyNyBAQAogCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSAmIFNDSUYyX1JGRENfTUFTSzsKIAl9CiB9CisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKK3N0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQorCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4OworCWVsc2UKKwkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1RGRFIpOworfQorCitzdGF0aWMgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIHBvcnQtPmZpZm9zaXplIC0gc2NpZl90eGZpbGwocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgc2NpZl9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQorCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSAmIFNDSUZfUkZEQ19NQVNLOworCWVsc2UKKwkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpOworfQogI2Vsc2UKIHN0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKQEAgLTY4Myw3ICs3MDQsNyBAQAogCQl1MTYgc3NyID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKIAogCQkvKiBEaXNhYmxlIGZ1dHVyZSBSeCBpbnRlcnJ1cHRzICovCi0JCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpIHsKKwkJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpIHsKIAkJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwogCQkJc2NyIHw9IDB4NDAwMDsKIAkJfSBlbHNlIHsKQEAgLTkyOCw3ICs5NDksNyBAQAogCiAJaWYgKCF1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKIAkJc2NoZWR1bGVfd29yaygmcy0+d29ya190eCk7Ci0JfSBlbHNlIGlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpIHsKKwl9IGVsc2UgaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpIHsKIAkJdTE2IGN0cmwgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwogCQlzY2lfb3V0KHBvcnQsIFNDU0NSLCBjdHJsICYgflNDSV9DVFJMX0ZMQUdTX1RJRSk7CiAJfQpAQCAtMTE4NCw3ICsxMjA1LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBjdHJsOwogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfRE1BCi0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSkgeworCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEgfHwgcG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZCKSB7CiAJCXUxNiBuZXcsIHNjciA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJCWlmIChzLT5jaGFuX3R4KQogCQkJbmV3ID0gc2NyIHwgMHg4MDAwOwpAQCAtMTE5Nyw3ICsxMjE4LDcgQEAKIAkgICAgcy0+Y29va2llX3R4IDwgMCkKIAkJc2NoZWR1bGVfd29yaygmcy0+d29ya190eCk7CiAjZW5kaWYKLQlpZiAoIXMtPmNoYW5fdHggfHwgcG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKSB7CisJaWYgKCFzLT5jaGFuX3R4IHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpIHsKIAkJLyogU2V0IFRJRSAoVHJhbnNtaXQgSW50ZXJydXB0IEVuYWJsZSkgYml0IGluIFNDU0NSICovCiAJCWN0cmwgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwogCQlzY2lfb3V0KHBvcnQsIFNDU0NSLCBjdHJsIHwgU0NJX0NUUkxfRkxBR1NfVElFKTsKQEAgLTEyMTAsNyArMTIzMSw3IEBACiAKIAkvKiBDbGVhciBUSUUgKFRyYW5zbWl0IEludGVycnVwdCBFbmFibGUpIGJpdCBpbiBTQ1NDUiAqLwogCWN0cmwgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEpCisJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpCiAJCWN0cmwgJj0gfjB4ODAwMDsKIAljdHJsICY9IH5TQ0lfQ1RSTF9GTEFHU19USUU7CiAJc2NpX291dChwb3J0LCBTQ1NDUiwgY3RybCk7CkBAIC0xMjIyLDcgKzEyNDMsNyBAQAogCiAJLyogU2V0IFJJRSAoUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KIAljdHJsIHw9IHNjaV9pbihwb3J0LCBTQ1NDUik7Ci0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSkKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBIHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQikKIAkJY3RybCAmPSB+MHg0MDAwOwogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwogfQpAQCAtMTIzMyw3ICsxMjU0LDcgQEAKIAogCS8qIENsZWFyIFJJRSAoUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KIAljdHJsID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKQorCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRkEgfHwgcG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZCKQogCQljdHJsICY9IH4weDQwMDA7CiAJY3RybCAmPSB+KFNDSV9DVFJMX0ZMQUdTX1JJRSB8IFNDSV9DVFJMX0ZMQUdTX1JFSUUpOwogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwpAQCAtMTI3MSw3ICsxMjkyLDcgQEAKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBvcnQ7CiAJdTE2IHNjciA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAKLQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZBKSB7CisJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQSB8fCBwb3J0LT50eXBlID09IFBPUlRfU0NJRkIpIHsKIAkJc2NyICY9IH4weDQwMDA7CiAJCWVuYWJsZV9pcnEocy0+aXJxc1sxXSk7CiAJfQpAQCAtMTUyNCw2ICsxNTQ1LDggQEAKIAkJcmV0dXJuICJzY2lmIjsKIAljYXNlIFBPUlRfU0NJRkE6CiAJCXJldHVybiAic2NpZmEiOworCWNhc2UgUE9SVF9TQ0lGQjoKKwkJcmV0dXJuICJzY2lmYiI7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC0xNjEyLDYgKzE2MzUsOSBAQAogCXBvcnQtPmxpbmUJPSBpbmRleDsKIAogCXN3aXRjaCAocC0+dHlwZSkgeworCWNhc2UgUE9SVF9TQ0lGQjoKKwkJcG9ydC0+Zmlmb3NpemUgPSAyNTY7CisJCWJyZWFrOwogCWNhc2UgUE9SVF9TQ0lGQToKIAkJcG9ydC0+Zmlmb3NpemUgPSA2NDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IGY3MGM0OWYuLjliNTJmNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0zMjIsNyArMzIyLDcgQEAKICNkZWZpbmUgQ1BVX1NDSXhfRk5TKG5hbWUsIHNjaV9vZmZzZXQsIHNjaV9zaXplLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKVwKICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NpXyMjbmFtZSMjX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCVwKICAgewkJCQkJCQkJCVwKLSAgICBpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpIHsJCQkJCVwKKyAgICBpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYgfHwgcG9ydC0+dHlwZSA9PSBQT1JUX1NDSUZCKSB7CQlcCiAgICAgICBTQ0lfSU4oc2NpZl9zaXplLCBzY2lmX29mZnNldCkJCQkJCVwKICAgICB9IGVsc2UgewkvKiBQT1JUX1NDSSBvciBQT1JUX1NDSUZBICovCQkJCVwKICAgICAgIFNDSV9JTihzY2lfc2l6ZSwgc2NpX29mZnNldCk7CQkJCQlcCkBAIC0zMzAsNyArMzMwLDcgQEAKICAgfQkJCQkJCQkJCVwKICAgc3RhdGljIGlubGluZSB2b2lkIHNjaV8jI25hbWUjI19vdXQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHZhbHVlKSBcCiAgIHsJCQkJCQkJCQlcCi0gICAgaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKSB7CQkJCQlcCisgICAgaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGIHx8IHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGQikgewkJXAogICAgICAgU0NJX09VVChzY2lmX3NpemUsIHNjaWZfb2Zmc2V0LCB2YWx1ZSkJCQkJXAogICAgIH0gZWxzZSB7CS8qIFBPUlRfU0NJIG9yIFBPUlRfU0NJRkEgKi8JCQkJXAogICAgICAgU0NJX09VVChzY2lfc2l6ZSwgc2NpX29mZnNldCwgdmFsdWUpOwkJCQlcCkBAIC0zODQsOCArMzg0LDEyIEBACiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNjcpIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3Mzc3KSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKKyAgICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3Mzc3KQorI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKSBcCisgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzIpCisjZGVmaW5lIFNDSXhfRk5TKG5hbWUsIHNoNF9zY2lmYV9vZmZzZXQsIHNoNF9zY2lmYV9zaXplLCBzaDRfc2NpZmJfb2Zmc2V0LCBzaDRfc2NpZmJfc2l6ZSkgXAorICBDUFVfU0NJeF9GTlMobmFtZSwgc2g0X3NjaWZhX29mZnNldCwgc2g0X3NjaWZhX3NpemUsIHNoNF9zY2lmYl9vZmZzZXQsIHNoNF9zY2lmYl9zaXplKQogI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKSBcCiAgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQogI2Vsc2UKQEAgLTQyMiw4ICs0MjYsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0g3MzY3KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSDczNzcpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKKyAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3NykKIAogU0NJRl9GTlMoU0NTTVIsICAweDAwLCAxNikKIFNDSUZfRk5TKFNDQlJSLCAgMHgwNCwgIDgpCkBAIC00MzYsNiArNDM5LDIwIEBACiBTQ0lGX0ZOUyhTQ3hURFIsIDB4MjAsICA4KQogU0NJRl9GTlMoU0N4UkRSLCAweDI0LCAgOCkKIFNDSUZfRk5TKFNDTFNSLCAgMHgwMCwgIDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1NINzM3MikKK1NDSUZfRk5TKFNDU01SLCAgMHgwMCwgMTYpCitTQ0lGX0ZOUyhTQ0JSUiwgIDB4MDQsICA4KQorU0NJRl9GTlMoU0NTQ1IsICAweDA4LCAxNikKK1NDSUZfRk5TKFNDVERTUiwgMHgwYywgMTYpCitTQ0lGX0ZOUyhTQ0ZFUiwgIDB4MTAsIDE2KQorU0NJRl9GTlMoU0N4U1IsICAweDE0LCAxNikKK1NDSUZfRk5TKFNDRkNSLCAgMHgxOCwgMTYpCitTQ0lGX0ZOUyhTQ0ZEUiwgIDB4MWMsIDE2KQorU0NJRl9GTlMoU0NURkRSLCAweDM4LCAxNikKK1NDSUZfRk5TKFNDUkZEUiwgMHgzYywgMTYpCitTQ0l4X0ZOUyhTQ3hURFIsIDB4MjAsICA4LCAweDQwLCAgOCkKK1NDSXhfRk5TKFNDeFJEUiwgMHgyNCwgIDgsIDB4NjAsICA4KQorU0NJRl9GTlMoU0NMU1IsICAweDAwLCAgMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykgfHxcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCiBTQ0l4X0ZOUyhTQ1NNUiwgIDB4MDAsIDE2LCAweDAwLCAxNikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC90aW1idWFydC5jCmluZGV4IDY3Y2E2NDIuLjFmMzZiN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJLm5yID0gMQogfTsKIAotc3RhdGljIGludCB0aW1idWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0aW1idWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGVyciwgaXJxOwogCXN0cnVjdCB0aW1idWFydF9wb3J0ICp1YXJ0OwpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB0aW1idWFydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgdGltYnVhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGltYnVhcnRfcG9ydCAqdWFydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSB0aW1idWFydF9wcm9iZSwKLQkucmVtb3ZlCQk9IHRpbWJ1YXJ0X3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRpbWJ1YXJ0X3JlbW92ZSksCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvTWFrZWZpbGUgYi9kcml2ZXJzL3NoL01ha2VmaWxlCmluZGV4IDc4YmI1MTIuLjA4ZmM2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zaC9NYWtlZmlsZQpAQCAtMSw5ICsxLDEwIEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgU3VwZXJIIHNwZWNpZmljIGRyaXZlcnMuCiAjCitvYmoteQk6PSBjbGsubyBpbnRjLm8KKwogb2JqLSQoQ09ORklHX1NVUEVSSFlXQVkpCSs9IHN1cGVyaHl3YXkvCiBvYmotJChDT05GSUdfTUFQTEUpCQkrPSBtYXBsZS8KKwogb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gcGZjLm8KLW9iai0kKENPTkZJR19TVVBFUkgpCQkrPSBjbGsubwogb2JqLSQoQ09ORklHX1NIX0NMS19DUEcpCSs9IGNsay1jcGcubwotb2JqLXkJCQkJKz0gaW50Yy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2Nsay1jcGcuYyBiL2RyaXZlcnMvc2gvY2xrLWNwZy5jCmluZGV4IGY1YzgwYmEuLjhjMDI0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvY2xrLWNwZy5jCisrKyBiL2RyaXZlcnMvc2gvY2xrLWNwZy5jCkBAIC02OCw2ICs2OCwzOSBAQAogCXJldHVybiBjbGstPmZyZXFfdGFibGVbaWR4XS5mcmVxdWVuY3k7CiB9CiAKK3N0YXRpYyBpbnQgc2hfY2xrX2RpdjZfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgY2xrX2Rpdl9tdWx0X3RhYmxlICp0YWJsZSA9ICZzaF9jbGtfZGl2Nl90YWJsZTsKKwl1MzIgdmFsdWU7CisJaW50IHJldCwgaTsKKworCWlmICghY2xrLT5wYXJlbnRfdGFibGUgfHwgIWNsay0+cGFyZW50X251bSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZWFyY2ggdGhlIHBhcmVudCAqLworCWZvciAoaSA9IDA7IGkgPCBjbGstPnBhcmVudF9udW07IGkrKykKKwkJaWYgKGNsay0+cGFyZW50X3RhYmxlW2ldID09IHBhcmVudCkKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gY2xrLT5wYXJlbnRfbnVtKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGNsa19yZXBhcmVudChjbGssIHBhcmVudCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZykgJgorCQl+KCgoMSA8PCBjbGstPnNyY193aWR0aCkgLSAxKSA8PCBjbGstPnNyY19zaGlmdCk7CisKKwlfX3Jhd193cml0ZWwodmFsdWUgfCAoaSA8PCBjbGstPnNyY19zaGlmdCksIGNsay0+ZW5hYmxlX3JlZyk7CisKKwkvKiBSZWJ1aWxkIHRoZSBmcmVxdWVuY3kgdGFibGUgKi8KKwljbGtfcmF0ZV90YWJsZV9idWlsZChjbGssIGNsay0+ZnJlcV90YWJsZSwgdGFibGUtPm5yX2Rpdmlzb3JzLAorCQkJICAgICB0YWJsZSwgJmNsay0+YXJjaF9mbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzaF9jbGtfZGl2Nl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCiAJCQkJdW5zaWduZWQgbG9uZyByYXRlLCBpbnQgYWxnb19pZCkKIHsKQEAgLTExNyw3ICsxNTAsMTcgQEAKIAkuZGlzYWJsZQk9IHNoX2Nsa19kaXY2X2Rpc2FibGUsCiB9OwogCi1pbnQgX19pbml0IHNoX2Nsa19kaXY2X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBucikKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaF9jbGtfZGl2Nl9yZXBhcmVudF9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gc2hfY2xrX2RpdjZfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gc2hfY2xrX2Rpdl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9IHNoX2Nsa19kaXY2X3NldF9yYXRlLAorCS5lbmFibGUJCT0gc2hfY2xrX2RpdjZfZW5hYmxlLAorCS5kaXNhYmxlCT0gc2hfY2xrX2RpdjZfZGlzYWJsZSwKKwkuc2V0X3BhcmVudAk9IHNoX2Nsa19kaXY2X3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9jbGtfZGl2Nl9yZWdpc3Rlcl9vcHMoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAorCQkJCQkgICBzdHJ1Y3QgY2xrX29wcyAqb3BzKQogewogCXN0cnVjdCBjbGsgKmNsa3A7CiAJdm9pZCAqZnJlcV90YWJsZTsKQEAgLTEzNiw3ICsxNzksNyBAQAogCWZvciAoayA9IDA7ICFyZXQgJiYgKGsgPCBucik7IGsrKykgewogCQljbGtwID0gY2xrcyArIGs7CiAKLQkJY2xrcC0+b3BzID0gJnNoX2Nsa19kaXY2X2Nsa19vcHM7CisJCWNsa3AtPm9wcyA9IG9wczsKIAkJY2xrcC0+aWQgPSAtMTsKIAkJY2xrcC0+ZnJlcV90YWJsZSA9IGZyZXFfdGFibGUgKyAoayAqIGZyZXFfdGFibGVfc2l6ZSk7CiAJCWNsa3AtPmZyZXFfdGFibGVbbnJfZGl2c10uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CkBAIC0xNDcsNiArMTkwLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IF9faW5pdCBzaF9jbGtfZGl2Nl9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIpCit7CisJcmV0dXJuIHNoX2Nsa19kaXY2X3JlZ2lzdGVyX29wcyhjbGtzLCBuciwgJnNoX2Nsa19kaXY2X2Nsa19vcHMpOworfQorCitpbnQgX19pbml0IHNoX2Nsa19kaXY2X3JlcGFyZW50X3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsa3MsIGludCBucikKK3sKKwlyZXR1cm4gc2hfY2xrX2RpdjZfcmVnaXN0ZXJfb3BzKGNsa3MsIG5yLAorCQkJCQkmc2hfY2xrX2RpdjZfcmVwYXJlbnRfY2xrX29wcyk7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2Nsa19kaXY0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJc3RydWN0IGNsa19kaXY0X3RhYmxlICpkNHQgPSBjbGstPnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggN2NlZTdmNC4uNzg5MmFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY21jaWEuYyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCmluZGV4IGU3MmY0MDQuLjUyNjY4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjbWNpYS5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNjb2RlLmg+CkBAIC03MiwxNCArNzEsOSBAQAogLyogV3JpdGUgdG8gYSBQQ01DSUEgY29uZmlndXJhdGlvbiByZWdpc3Rlci4gKi8KIHN0YXRpYyBpbnQgc3NiX3BjbWNpYV9jZmdfd3JpdGUoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggb2Zmc2V0LCB1OCB2YWx1ZSkKIHsKLQljb25mX3JlZ190IHJlZzsKIAlpbnQgcmVzOwogCi0JbWVtc2V0KCZyZWcsIDAsIHNpemVvZihyZWcpKTsKLQlyZWcuT2Zmc2V0ID0gb2Zmc2V0OwotCXJlZy5BY3Rpb24gPSBDU19XUklURTsKLQlyZWcuVmFsdWUgPSB2YWx1ZTsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7CisJcmVzID0gcGNtY2lhX3dyaXRlX2NvbmZpZ19ieXRlKGJ1cy0+aG9zdF9wY21jaWEsIG9mZnNldCwgdmFsdWUpOwogCWlmICh1bmxpa2VseShyZXMgIT0gMCkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTg5LDE2ICs4MywxMSBAQAogLyogUmVhZCBmcm9tIGEgUENNQ0lBIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovCiBzdGF0aWMgaW50IHNzYl9wY21jaWFfY2ZnX3JlYWQoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggb2Zmc2V0LCB1OCAqdmFsdWUpCiB7Ci0JY29uZl9yZWdfdCByZWc7CiAJaW50IHJlczsKIAotCW1lbXNldCgmcmVnLCAwLCBzaXplb2YocmVnKSk7Ci0JcmVnLk9mZnNldCA9IG9mZnNldDsKLQlyZWcuQWN0aW9uID0gQ1NfUkVBRDsKLQlyZXMgPSBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoYnVzLT5ob3N0X3BjbWNpYSwgJnJlZyk7CisJcmVzID0gcGNtY2lhX3JlYWRfY29uZmlnX2J5dGUoYnVzLT5ob3N0X3BjbWNpYSwgb2Zmc2V0LCB2YWx1ZSk7CiAJaWYgKHVubGlrZWx5KHJlcyAhPSAwKSkKIAkJcmV0dXJuIC1FQlVTWTsKLQkqdmFsdWUgPSByZWcuVmFsdWU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NjYW4uYyBiL2RyaXZlcnMvc3NiL3NjYW4uYwppbmRleCAwZDZjMDI4Li45NzM4Y2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zY2FuLmMKKysrIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggMGU0MTIyZS4uNGE3YTdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTk3LDYgKzk3LDggQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92dDY2NTUvS2NvbmZpZyIKQEAgLTExNSw3ICsxMTcsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3pyYW0vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9LY29uZmlnIgogCkBAIC0xMjcsOCArMTI5LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvS2NvbmZpZyIKQEAgLTE0Nyw1ICsxNDcsMTMgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3F1aWNrc3RhcnQvS2NvbmZpZyIKKwogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBlY2ZiMGJiLi5jYTVjMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0yMyw2ICsyMyw3IEBACiBvYmotJChDT05GSUdfUlRMODE5MlNVKQkJKz0gcnRsODE5MnN1Lwogb2JqLSQoQ09ORklHX1JUTDgxOTJVKQkJKz0gcnRsODE5MnUvCiBvYmotJChDT05GSUdfUlRMODE5MkUpCQkrPSBydGw4MTkyZS8KK29iai0kKENPTkZJR19TUEVDVFJBKQkJKz0gc3BlY3RyYS8KIG9iai0kKENPTkZJR19UUkFOWlBPUlQpCQkrPSBmcm9udGllci8KIG9iai0kKENPTkZJR19EUkVBTSkJCSs9IGRyZWFtLwogb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCkBAIC0zOSwxMyArNDAsMTIgQEAKIG9iai0kKENPTkZJR19NUlNUX1JBUl9IQU5ETEVSKQkrPSBtZW1yYXIvCiBvYmotJChDT05GSUdfRFhfU0VQKQkJKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlpby8KLW9iai0kKENPTkZJR19SQU1aU1dBUCkJCSs9IHJhbXpzd2FwLworb2JqLSQoQ09ORklHX1pSQU0pCQkrPSB6cmFtLwogb2JqLSQoQ09ORklHX1dMQUdTNDlfSDIpCSs9IHdsYWdzNDlfaDIvCiBvYmotJChDT05GSUdfV0xBR1M0OV9IMjUpCSs9IHdsYWdzNDlfaDI1Lwogb2JqLSQoQ09ORklHX0JBVE1BTl9BRFYpCSs9IGJhdG1hbi1hZHYvCiBvYmotJChDT05GSUdfU0FNU1VOR19MQVBUT1ApCSs9IHNhbXN1bmctbGFwdG9wLwogb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCi1vYmotJChDT05GSUdfRFQzMTU1KQkJKz0gZHQzMTU1Lwogb2JqLSQoQ09ORklHX1ZJREVPX0RUMzE1NSkJKz0gZHQzMTU1djRsLwogb2JqLSQoQ09ORklHX0NSWVNUQUxIRCkJCSs9IGNyeXN0YWxoZC8KIG9iai0kKENPTkZJR19DWFQxRTEpCQkrPSBjeHQxZTEvCkBAIC01NCwzICs1NCw3IEBACiBvYmotJChDT05GSUdfRkJfWEdJKQkJKz0geGdpZmIvCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fTVJTVE9VQ0gpCSs9IG1yc3QtdG91Y2hzY3JlZW4vCiBvYmotJChDT05GSUdfTVNNX1NUQUdJTkcpCSs9IG1zbS8KK29iai0kKENPTkZJR19FQVNZQ0FQKQkJKz0gZWFzeWNhcC8KK29iai0kKENPTkZJR19TT0xPNlgxMCkJCSs9IHNvbG82eDEwLworb2JqLSQoQ09ORklHX1RJRFNQQlJJREdFKQkrPSB0aWRzcGJyaWRnZS8KK29iai0kKENPTkZJR19BQ1BJX1FVSUNLU1RBUlQpCSs9IHF1aWNrc3RhcnQvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWRpczE2MjU1L2FkaXMxNjI1NS5jIGIvZHJpdmVycy9zdGFnaW5nL2FkaXMxNjI1NS9hZGlzMTYyNTUuYwppbmRleCA1NWQ2NmUyLi5jM2U2YTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWRpczE2MjU1L2FkaXMxNjI1NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZGlzMTYyNTUvYWRpczE2MjU1LmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBlcnI7CiAJaWYgKHZhbHVlICE9IDB4MDgwMCkgewotCQlkZXZfd2Fybigmc3BpYWRpcy0+c3BpLT5kZXYsICJTY2FsZSBmYWN0b3IgaXMgbm9uZSBkZWZhdWx0IgorCQlkZXZfd2Fybigmc3BpYWRpcy0+c3BpLT5kZXYsICJTY2FsZSBmYWN0b3IgaXMgbm9uZSBkZWZhdWx0ICIKIAkJCQkidmFsdWUgKCUuNHgpXG4iLCB2YWx1ZSk7CiAJfQogCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCQlnb3RvIGVycjsKIAkJfSBlbHNlIGlmICh2YWx1ZSAmIDB4MykJewotCQkJZGV2X3dhcm4oJnNwaWFkaXMtPnNwaS0+ZGV2LCAiU2Vuc29yIHZvbHRhZ2UiCisJCQlkZXZfd2Fybigmc3BpYWRpcy0+c3BpLT5kZXYsICJTZW5zb3Igdm9sdGFnZSAiCiAJCQkJCQkib3V0IG9mIHJhbmdlLlxuIik7CiAJCQlzdGF0dXMgPSAtRU5PREVWOwogCQkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9DSEFOR0VMT0cgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9DSEFOR0VMT0cKaW5kZXggYzhmOWQ5ZS4uODY0NTBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvQ0hBTkdFTE9HCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0NIQU5HRUxPRwpAQCAtMSwzICsxLDE1IEBACitiYXRtYW4tYWR2IDIwMTAuMC4wOgorCisqIHN1cHBvcnQgbGF0ZXN0IGtlcm5lbHMgKDIuNi4yMSAtIDIuNi4zNSkKKyogZnVydGhlciBjb2RlIHJlZmFjdG9yaW5nIGFuZCBjbGVhbmluZyBmb3IgY29kaW5nIHN0eWxlCisqIG1vdmUgZnJvbSBwcm9jZnMgYmFzZWQgY29uZmlndXJhdGlvbiB0byBzeXNmcworKiByZW9yZ2FuaXplZCBzZXF1ZW5jZSBudW1iZXIgaGFuZGxpbmcKKyogbGltaXQgcXVldWUgbGVuZ3RocyBmb3IgYmF0bWFuIGFuZCBicm9hZGNhc3QgcGFja2V0cworKiBtYW55IGJ1Z3MgKGVuZGxlc3MgbG9vcCBhbmQgcm9ndWUgcGFja2V0cyBvbiBzaHV0ZG93biwgd3JvbmcgdGNwZHVtcCBvdXRwdXQsCisgIG1pc3NpbmcgZnJlZXMgaW4gZXJyb3Igc2l0dWF0aW9ucywgc2xlZXBzIGluIGF0b21pYyBjb250ZXh0cykgc3F1YXNoZWQKKworIC0tIEZyaSwgMTggSnVuIDIwMTAgMjE6MzQ6MjYgKzAyMDAKKwogYmF0bWFuLWFkdiAwLjIuMToKIAogKiBzdXBwb3J0IGxhdGVzdCBrZXJuZWxzICgyLjYuMjAgLSAyLjYuMzMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwppbmRleCAxZTdlMGE4Li44NTUzZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAKIGNvbmZpZyBCQVRNQU5fQURWCiAJdHJpc3RhdGUgIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sIgotCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBORVQKKwlkZXBlbmRzIG9uIE5FVAogICAgICAgICBkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKaW5kZXggZjI1MDY4Yy4uZTk4MTdiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKQEAgLTE4LDUgKzE4LDUgQEAKICMgMDIxMTAtMTMwMSwgVVNBCiAjCiAKLW9iai1tICs9IGJhdG1hbi1hZHYubwotYmF0bWFuLWFkdi1vYmpzIDo9IG1haW4ubyBzZW5kLm8gcm91dGluZy5vIHNvZnQtaW50ZXJmYWNlLm8gZGV2aWNlLm8gdHJhbnNsYXRpb24tdGFibGUubyBiaXRhcnJheS5vIGhhc2gubyByaW5nX2J1ZmZlci5vIHZpcy5vIGhhcmQtaW50ZXJmYWNlLm8gYWdncmVnYXRpb24ubyBvcmlnaW5hdG9yLm8gYmF0X3N5c2ZzLm8KK29iai0kKENPTkZJR19CQVRNQU5fQURWKSArPSBiYXRtYW4tYWR2Lm8KK2JhdG1hbi1hZHYtb2JqcyA6PSBtYWluLm8gYmF0X2RlYnVnZnMubyBiYXRfc3lzZnMubyBzZW5kLm8gcm91dGluZy5vIHNvZnQtaW50ZXJmYWNlLm8gaWNtcF9zb2NrZXQubyB0cmFuc2xhdGlvbi10YWJsZS5vIGJpdGFycmF5Lm8gaGFzaC5vIHJpbmdfYnVmZmVyLm8gdmlzLm8gaGFyZC1pbnRlcmZhY2UubyBhZ2dyZWdhdGlvbi5vIG9yaWdpbmF0b3IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvUkVBRE1FCmluZGV4IDE0MjQ0YTIuLjcxOTJiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9SRUFETUUKQEAgLTEsNCArMSw0IEBACi1bc3RhdGU6IDAzLTA1LTIwMTBdCitbc3RhdGU6IDEyLTA2LTIwMTBdCiAKIEJBVE1BTi1BRFYKIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPCmluZGV4IDUxOGRiN2YuLjljNWFlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvVE9ETwpAQCAtMSw2ICsxLDkgQEAKLVJlcXVlc3QgYSByZXZpZXcuCi1Qcm9jZXNzIHRoZSBjb21tZW50cyBmcm9tIHRoZSByZXZpZXcuCi1Nb3ZlIGludG8gbWFpbmxpbmUgcHJvcGVyLgorICogVXNlIGh3ZWlnaHQqIGZvciBoYW1taW5nIHdlaWdodCBjYWxjdWxhdGlvbgorICogU2F2ZS9jYWNoZSBwYWNrZXRzIGRpcmVrdGx5IGFzIHNrYiBpbnN0ZWFkIG9mIHVzaW5nIGEgbm9ybWFsIG1lbW9yeSByZWdpb24KKyAgIGFuZCBjb3B5aW5nIGl0IGluIGEgc2tiIHVzaW5nIHNlbmRfcmF3X3BhY2tldCBhbmQgc2ltaWxhciBmdW5jdGlvbnMKKyAqIFJlcXVlc3QgYSBuZXcgcmV2aWV3CisgKiBQcm9jZXNzIHRoZSBjb21tZW50cyBmcm9tIHRoZSByZXZpZXcKKyAqIE1vdmUgaW50byBtYWlubGluZSBwcm9wZXIKIAogUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG86CiAJTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCmluZGV4IGNlOGI4YTYuLjk4NjJkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwpAQCAtMTA2LDExICsxMDYsMTQgQEAKIHsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0X2FnZ3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkvKiBGSVhNRTogZWFjaCBiYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAKIAkvKiBvd24gcGFja2V0IHNob3VsZCBhbHdheXMgYmUgc2NoZWR1bGVkICovCiAJaWYgKCFvd25fcGFja2V0KSB7CiAJCWlmICghYXRvbWljX2RlY19ub3RfemVybygmYmF0bWFuX3F1ZXVlX2xlZnQpKSB7Ci0JCQliYXRfZGJnKERCR19CQVRNQU4sICJiYXRtYW4gcGFja2V0IHF1ZXVlIGZ1bGxcbiIpOworCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCQkiYmF0bWFuIHBhY2tldCBxdWV1ZSBmdWxsXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTI1Miw5ICsyNTUsOSBAQAogCXdoaWxlIChhZ2dyZWdhdGVkX3BhY2tldChidWZmX3BvcywgcGFja2V0X2xlbiwKIAkJCQkgYmF0bWFuX3BhY2tldC0+bnVtX2huYSkpIHsKIAotCQkvKiBuZXR3b3JrIHRvIGhvc3Qgb3JkZXIgZm9yIG91ciAxNmJpdCBzZXFubywgYW5kIHRoZQorCQkvKiBuZXR3b3JrIHRvIGhvc3Qgb3JkZXIgZm9yIG91ciAzMmJpdCBzZXFubywgYW5kIHRoZQogCQkgICBvcmlnX2ludGVydmFsLiAqLwotCQliYXRtYW5fcGFja2V0LT5zZXFubyA9IG50b2hzKGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKKwkJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBudG9obChiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAKIAkJaG5hX2J1ZmYgPSBwYWNrZXRfYnVmZiArIGJ1ZmZfcG9zICsgQkFUX1BBQ0tFVF9MRU47CiAJCXJlY2VpdmVfYmF0X3BhY2tldChldGhoZHIsIGJhdG1hbl9wYWNrZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uaAppbmRleCA4NDQwMWNhLi43MWE5MWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmgKQEAgLTE5LDYgKzE5LDkgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQUdHUkVHQVRJT05fSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0FHR1JFR0FUSU9OX0hfCisKICNpbmNsdWRlICJtYWluLmgiCiAKIC8qIGlzIHRoZXJlIGFub3RoZXIgYWdncmVnYXRlZCBwYWNrZXQgaGVyZT8gKi8KQEAgLTM2LDMgKzM5LDUgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIHNlbmRfdGltZSk7CiB2b2lkIHJlY2VpdmVfYWdncl9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwgdW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsCiAJCQkgICAgIGludCBwYWNrZXRfbGVuLCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZyk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQUdHUkVHQVRJT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwN2RhNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfZGVidWdmcy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJtYWluLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKKyNpbmNsdWRlICJiYXRfZGVidWdmcy5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAidmlzLmgiCisjaW5jbHVkZSAiaWNtcF9zb2NrZXQuaCIKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmJhdF9kZWJ1Z2ZzOworCisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKKyNkZWZpbmUgTE9HX0JVRkZfTUFTSyAobG9nX2J1ZmZfbGVuLTEpCisjZGVmaW5lIExPR19CVUZGKGlkeCkgKGRlYnVnX2xvZy0+bG9nX2J1ZmZbKGlkeCkgJiBMT0dfQlVGRl9NQVNLXSkKKworc3RhdGljIGludCBsb2dfYnVmZl9sZW4gPSBMT0dfQlVGX0xFTjsKKworc3RhdGljIHZvaWQgZW1pdF9sb2dfY2hhcihzdHJ1Y3QgZGVidWdfbG9nICpkZWJ1Z19sb2csIGNoYXIgYykKK3sKKwlMT0dfQlVGRihkZWJ1Z19sb2ctPmxvZ19lbmQpID0gYzsKKwlkZWJ1Z19sb2ctPmxvZ19lbmQrKzsKKworCWlmIChkZWJ1Z19sb2ctPmxvZ19lbmQgLSBkZWJ1Z19sb2ctPmxvZ19zdGFydCA+IGxvZ19idWZmX2xlbikKKwkJZGVidWdfbG9nLT5sb2dfc3RhcnQgPSBkZWJ1Z19sb2ctPmxvZ19lbmQgLSBsb2dfYnVmZl9sZW47Cit9CisKK3N0YXRpYyBpbnQgZmRlYnVnX2xvZyhzdHJ1Y3QgZGVidWdfbG9nICpkZWJ1Z19sb2csIGNoYXIgKmZtdCwgLi4uKQoreworCWludCBwcmludGVkX2xlbjsKKwl2YV9saXN0IGFyZ3M7CisJc3RhdGljIGNoYXIgZGVidWdfbG9nX2J1ZlsyNTZdOworCWNoYXIgKnA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGVidWdfbG9nKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZWJ1Z19sb2ctPmxvY2ssIGZsYWdzKTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXByaW50ZWRfbGVuID0gdnNjbnByaW50ZihkZWJ1Z19sb2dfYnVmLCBzaXplb2YoZGVidWdfbG9nX2J1ZiksCisJCQkJIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJZm9yIChwID0gZGVidWdfbG9nX2J1ZjsgKnAgIT0gMDsgcCsrKQorCQllbWl0X2xvZ19jaGFyKGRlYnVnX2xvZywgKnApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVidWdfbG9nLT5sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwKCZkZWJ1Z19sb2ctPnF1ZXVlX3dhaXQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWJ1Z19sb2coc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiwgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgdG1wX2xvZ19idWZbMjU2XTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNjbnByaW50Zih0bXBfbG9nX2J1Ziwgc2l6ZW9mKHRtcF9sb2dfYnVmKSwgZm10LCBhcmdzKTsKKwlmZGVidWdfbG9nKGJhdF9wcml2LT5kZWJ1Z19sb2csICJbJTEwdV0gJXMiLAorCQkgICAoamlmZmllcyAvIEhaKSwgdG1wX2xvZ19idWYpOworCXZhX2VuZChhcmdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJaW5jX21vZHVsZV9jb3VudCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWRlY19tb2R1bGVfY291bnQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbG9nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZyA9IGJhdF9wcml2LT5kZWJ1Z19sb2c7CisJaW50IGVycm9yLCBpID0gMDsKKwljaGFyIGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCisJICAgICEoZGVidWdfbG9nLT5sb2dfZW5kIC0gZGVidWdfbG9nLT5sb2dfc3RhcnQpKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWlmICgoIWJ1ZikgfHwgKGNvdW50IDwgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZWJ1Z19sb2ctPnF1ZXVlX3dhaXQsCisJCQkJKGRlYnVnX2xvZy0+bG9nX3N0YXJ0IC0gZGVidWdfbG9nLT5sb2dfZW5kKSk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZWJ1Z19sb2ctPmxvY2ssIGZsYWdzKTsKKworCXdoaWxlICgoIWVycm9yKSAmJiAoaSA8IGNvdW50KSAmJgorCSAgICAgICAoZGVidWdfbG9nLT5sb2dfc3RhcnQgIT0gZGVidWdfbG9nLT5sb2dfZW5kKSkgeworCQljID0gTE9HX0JVRkYoZGVidWdfbG9nLT5sb2dfc3RhcnQpOworCisJCWRlYnVnX2xvZy0+bG9nX3N0YXJ0Kys7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVidWdfbG9nLT5sb2NrLCBmbGFncyk7CisKKwkJZXJyb3IgPSBfX3B1dF91c2VyKGMsIGJ1Zik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlYnVnX2xvZy0+bG9jaywgZmxhZ3MpOworCisJCWJ1ZisrOworCQlpKys7CisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZWJ1Z19sb2ctPmxvY2ssIGZsYWdzKTsKKworCWlmICghZXJyb3IpCisJCXJldHVybiBpOworCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxvZ19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRlYnVnX2xvZyAqZGVidWdfbG9nID0gYmF0X3ByaXYtPmRlYnVnX2xvZzsKKworCXBvbGxfd2FpdChmaWxlLCAmZGVidWdfbG9nLT5xdWV1ZV93YWl0LCB3YWl0KTsKKworCWlmIChkZWJ1Z19sb2ctPmxvZ19lbmQgLSBkZWJ1Z19sb2ctPmxvZ19zdGFydCkKKwkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9nX2ZvcHMgPSB7CisJLm9wZW4gICAgICAgICAgID0gbG9nX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gbG9nX3JlbGVhc2UsCisJLnJlYWQgICAgICAgICAgID0gbG9nX3JlYWQsCisJLnBvbGwgICAgICAgICAgID0gbG9nX3BvbGwsCit9OworCitzdGF0aWMgaW50IGRlYnVnX2xvZ19zZXR1cChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIWJhdF9wcml2LT5kZWJ1Z19kaXIpCisJCWdvdG8gZXJyOworCisJYmF0X3ByaXYtPmRlYnVnX2xvZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZWJ1Z19sb2cpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJhdF9wcml2LT5kZWJ1Z19sb2cpCisJCWdvdG8gZXJyOworCisJc3Bpbl9sb2NrX2luaXQoJmJhdF9wcml2LT5kZWJ1Z19sb2ctPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmJhdF9wcml2LT5kZWJ1Z19sb2ctPnF1ZXVlX3dhaXQpOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImxvZyIsIFNfSUZSRUcgfCBTX0lSVVNSLAorCQkJCWJhdF9wcml2LT5kZWJ1Z19kaXIsIGJhdF9wcml2LCAmbG9nX2ZvcHMpOworCWlmIChkKQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX2xvZ19jbGVhbnVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpCit7CisJa2ZyZWUoYmF0X3ByaXYtPmRlYnVnX2xvZyk7CisJYmF0X3ByaXYtPmRlYnVnX2xvZyA9IE5VTEw7Cit9CisjZWxzZSAvKiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqLworc3RhdGljIGludCBkZWJ1Z19sb2dfc2V0dXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwliYXRfcHJpdi0+ZGVidWdfbG9nID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfbG9nX2NsZWFudXAoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGludCBvcmlnaW5hdG9yc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5vZGUtPmlfcHJpdmF0ZTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb3JpZ19zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnN0YWJsZV9nbG9iYWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQsIG5ldF9kZXYpOworfQorCitzdGF0aWMgaW50IHRyYW5zdGFibGVfbG9jYWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYV9sb2NhbF9zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0YXRpYyBpbnQgdmlzX2RhdGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZpc19zZXFfcHJpbnRfdGV4dCwgbmV0X2Rldik7Cit9CisKK3N0cnVjdCBiYXRfZGVidWdpbmZvIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOworfTsKKworI2RlZmluZSBCQVRfREVCVUdJTkZPKF9uYW1lLCBfbW9kZSwgX29wZW4pCVwKK3N0cnVjdCBiYXRfZGVidWdpbmZvIGJhdF9kZWJ1Z2luZm9fIyNfbmFtZSA9IHsJXAorCS5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJXAorCQkgIC5tb2RlID0gX21vZGUsIH0sCQlcCisJLmZvcHMgPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLAkJXAorCQkgIC5vcGVuID0gX29wZW4sCQlcCisJCSAgLnJlYWQJPSBzZXFfcmVhZCwJCVwKKwkJICAubGxzZWVrID0gc2VxX2xzZWVrLAkJXAorCQkgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCVwKKwkJfQkJCQlcCit9OworCitzdGF0aWMgQkFUX0RFQlVHSU5GTyhvcmlnaW5hdG9ycywgU19JUlVHTywgb3JpZ2luYXRvcnNfb3Blbik7CitzdGF0aWMgQkFUX0RFQlVHSU5GTyh0cmFuc3RhYmxlX2dsb2JhbCwgU19JUlVHTywgdHJhbnN0YWJsZV9nbG9iYWxfb3Blbik7CitzdGF0aWMgQkFUX0RFQlVHSU5GTyh0cmFuc3RhYmxlX2xvY2FsLCBTX0lSVUdPLCB0cmFuc3RhYmxlX2xvY2FsX29wZW4pOworc3RhdGljIEJBVF9ERUJVR0lORk8odmlzX2RhdGEsIFNfSVJVR08sIHZpc19kYXRhX29wZW4pOworCitzdGF0aWMgc3RydWN0IGJhdF9kZWJ1Z2luZm8gKm1lc2hfZGVidWdpbmZvc1tdID0geworCSZiYXRfZGVidWdpbmZvX29yaWdpbmF0b3JzLAorCSZiYXRfZGVidWdpbmZvX3RyYW5zdGFibGVfZ2xvYmFsLAorCSZiYXRfZGVidWdpbmZvX3RyYW5zdGFibGVfbG9jYWwsCisJJmJhdF9kZWJ1Z2luZm9fdmlzX2RhdGEsCisJTlVMTCwKK307CisKK3ZvaWQgZGVidWdmc19pbml0KHZvaWQpCit7CisJYmF0X2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoREVCVUdGU19CQVRfU1VCRElSLCBOVUxMKTsKKwlpZiAoYmF0X2RlYnVnZnMgPT0gRVJSX1BUUigtRU5PREVWKSkKKwkJYmF0X2RlYnVnZnMgPSBOVUxMOworfQorCit2b2lkIGRlYnVnZnNfZGVzdHJveSh2b2lkKQoreworCWlmIChiYXRfZGVidWdmcykgeworCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYmF0X2RlYnVnZnMpOworCQliYXRfZGVidWdmcyA9IE5VTEw7CisJfQorfQorCitpbnQgZGVidWdmc19hZGRfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGJhdF9kZWJ1Z2luZm8gKipiYXRfZGVidWc7CisJc3RydWN0IGRlbnRyeSAqZmlsZTsKKworCWlmICghYmF0X2RlYnVnZnMpCisJCWdvdG8gb3V0OworCisJYmF0X3ByaXYtPmRlYnVnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXYtPm5hbWUsIGJhdF9kZWJ1Z2ZzKTsKKwlpZiAoIWJhdF9wcml2LT5kZWJ1Z19kaXIpCisJCWdvdG8gb3V0OworCisJYmF0X3NvY2tldF9zZXR1cChiYXRfcHJpdik7CisJZGVidWdfbG9nX3NldHVwKGJhdF9wcml2KTsKKworCWZvciAoYmF0X2RlYnVnID0gbWVzaF9kZWJ1Z2luZm9zOyAqYmF0X2RlYnVnOyArK2JhdF9kZWJ1ZykgeworCQlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgoKCpiYXRfZGVidWcpLT5hdHRyKS5uYW1lLAorCQkJCQkgIFNfSUZSRUcgfCAoKCpiYXRfZGVidWcpLT5hdHRyKS5tb2RlLAorCQkJCQkgIGJhdF9wcml2LT5kZWJ1Z19kaXIsCisJCQkJCSAgZGV2LCAmKCpiYXRfZGVidWcpLT5mb3BzKTsKKwkJaWYgKCFmaWxlKSB7CisJCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBkZWJ1Z2ZzIGZpbGU6ICVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgKCgqYmF0X2RlYnVnKS0+YXR0cikubmFtZSk7CisJCQlnb3RvIHJlbV9hdHRyOworCQl9CisJfQorCisJcmV0dXJuIDA7CityZW1fYXR0cjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoYmF0X3ByaXYtPmRlYnVnX2Rpcik7CisJYmF0X3ByaXYtPmRlYnVnX2RpciA9IE5VTEw7CitvdXQ6CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJcmV0dXJuIC1FTk9NRU07CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworfQorCit2b2lkIGRlYnVnZnNfZGVsX21lc2hpZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGVidWdfbG9nX2NsZWFudXAoYmF0X3ByaXYpOworCisJaWYgKGJhdF9kZWJ1Z2ZzKSB7CisJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShiYXRfcHJpdi0+ZGVidWdfZGlyKTsKKwkJYmF0X3ByaXYtPmRlYnVnX2RpciA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X2RlYnVnZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkZjUzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JhdF9kZWJ1Z2ZzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgorICoKKyAqIE1hcmVrIExpbmRuZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEsIFVTQQorICoKKyAqLworCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0RFQlVHRlNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0RFQlVHRlNfSF8KKworI2RlZmluZSBERUJVR0ZTX0JBVF9TVUJESVIgImJhdG1hbl9hZHYiCisKK3ZvaWQgZGVidWdmc19pbml0KHZvaWQpOwordm9pZCBkZWJ1Z2ZzX2Rlc3Ryb3kodm9pZCk7CitpbnQgZGVidWdmc19hZGRfbWVzaGlmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBkZWJ1Z2ZzX2RlbF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfREVCVUdGU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuYwppbmRleCAyMTJiYzIxLi5iNGE4ZDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuYwpAQCAtMjgsMjIgKzI4LDYgQEAKIAogI2RlZmluZSB0b19kZXYob2JqKSAgICAgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZSwga29iaikKIAotc3RydWN0IGJhdF9hdHRyaWJ1dGUgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQljaGFyICpidWYpOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotfTsKLQotc3RydWN0IGhhcmRpZl9hdHRyaWJ1dGUgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQljaGFyICpidWYpOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotfTsKLQogI2RlZmluZSBCQVRfQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpCVwKIHN0cnVjdCBiYXRfYXR0cmlidXRlIGJhdF9hdHRyXyMjX25hbWUgPSB7CVwKIAkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJXApAQCAtNTIsMzQgKzM2LDE4IEBACiAJLnN0b3JlICA9IF9zdG9yZSwJCQlcCiB9OwogCi0jZGVmaW5lIEJBVF9CSU5fQVRUUihfbmFtZSwgX21vZGUsIF9yZWFkLCBfd3JpdGUpCVwKLXN0cnVjdCBiaW5fYXR0cmlidXRlIGJhdF9hdHRyXyMjX25hbWUgPSB7CQlcCi0JLmF0dHIgPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLAkJXAotCQkgIC5tb2RlID0gX21vZGUsIH0sCQkJXAotCS5yZWFkID0gX3JlYWQsCQkJCQlcCi0JLndyaXRlID0gX3dyaXRlLAkJCQlcCi19OwotCi0jZGVmaW5lIEhBUkRJRl9BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkJXAotc3RydWN0IGhhcmRpZl9hdHRyaWJ1dGUgaGFyZGlmX2F0dHJfIyNfbmFtZSA9IHsJCVwKLQkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwJCVwKLQkJIC5tb2RlID0gX21vZGUgfSwJCQlcCi0JLnNob3cgICA9IF9zaG93LAkJCQlcCi0JLnN0b3JlICA9IF9zdG9yZSwJCQkJXAotfTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19hZ2dyX29nbShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IHNob3dfYWdncl9vZ21zKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJICAgICBjaGFyICpidWZmKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqLT5wYXJlbnQpOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOwogCWludCBhZ2dyX3N0YXR1cyA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWZmLCAic3RhdHVzOiAlc1xuY29tbWFuZHM6IGVuYWJsZSwgZGlzYWJsZSwgMCwgMVxuIiwKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJXNcbiIsCiAJCSAgICAgICBhZ2dyX3N0YXR1cyA9PSAwID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2FnZ3Jfb2dtKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfYWdncl9vZ21zKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqLT5wYXJlbnQpOwpAQCAtOTksMjMgKzY3LDczIEBACiAJCWlmIChidWZmW2NvdW50IC0gMV0gPT0gJ1xuJykKIAkJCWJ1ZmZbY291bnQgLSAxXSA9ICdcMCc7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ2FnZ3JlZ2F0ZSBPR00nIHNldHRpbmcgb24gbWVzaCAlcyByZWNlaXZlZDogJXNcbiIsCi0JCSAgICAgICBuZXRfZGV2LT5uYW1lLCBidWZmKTsKKwkJYmF0X2luZm8obmV0X2RldiwKKwkJCSAiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICdhZ2dyZWdhdGUgT0dNJyBzZXR0aW5nIgorCQkJICJyZWNlaXZlZDogJXNcbiIsIGJ1ZmYpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5hZ2dyZWdhdGlvbl9lbmFibGVkKSA9PSBhZ2dyX3RtcCkKIAkJcmV0dXJuIGNvdW50OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpDaGFuZ2luZyBhZ2dyZWdhdGlvbiBmcm9tOiAlcyB0bzogJXMgb24gbWVzaDogJXNcbiIsCi0JICAgICAgIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCkgPT0gMSA/Ci0JICAgICAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGFnZ3JfdG1wID09IDEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiQ2hhbmdpbmcgYWdncmVnYXRpb24gZnJvbTogJXMgdG86ICVzXG4iLAorCQkgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5hZ2dyZWdhdGlvbl9lbmFibGVkKSA9PSAxID8KKwkJICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGFnZ3JfdG1wID09IDEgPyAiZW5hYmxlZCIgOgorCQkgImRpc2FibGVkIik7CiAKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+YWdncmVnYXRpb25fZW5hYmxlZCwgKHVuc2lnbmVkKWFnZ3JfdG1wKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfYm9uZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKKwlpbnQgYm9uZF9zdGF0dXMgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmJvbmRpbmdfZW5hYmxlZCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJXNcbiIsCisJCSAgICAgICBib25kX3N0YXR1cyA9PSAwID8gImRpc2FibGVkIiA6ICJlbmFibGVkIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2JvbmQoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJaW50IGJvbmRpbmdfZW5hYmxlZF90bXAgPSAtMTsKKworCWlmICgoKGNvdW50ID09IDIpICYmIChidWZmWzBdID09ICcxJykpIHx8CisJICAgIChzdHJuY21wKGJ1ZmYsICJlbmFibGUiLCA2KSA9PSAwKSkKKwkJYm9uZGluZ19lbmFibGVkX3RtcCA9IDE7CisKKwlpZiAoKChjb3VudCA9PSAyKSAmJiAoYnVmZlswXSA9PSAnMCcpKSB8fAorCSAgICAoc3RybmNtcChidWZmLCAiZGlzYWJsZSIsIDcpID09IDApKQorCQlib25kaW5nX2VuYWJsZWRfdG1wID0gMDsKKworCWlmIChib25kaW5nX2VuYWJsZWRfdG1wIDwgMCkgeworCQlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCisJCQlidWZmW2NvdW50IC0gMV0gPSAnXDAnOworCisJCWJhdF9lcnIobmV0X2RldiwKKwkJCSJJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ2JvbmRpbmcnIHNldHRpbmcgcmVjZWl2ZWQ6ICIKKwkJCSIlc1xuIiwgYnVmZik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmJvbmRpbmdfZW5hYmxlZCkgPT0gYm9uZGluZ19lbmFibGVkX3RtcCkKKwkJcmV0dXJuIGNvdW50OworCisJYmF0X2luZm8obmV0X2RldiwgIkNoYW5naW5nIGJvbmRpbmcgZnJvbTogJXMgdG86ICVzXG4iLAorCQkgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5ib25kaW5nX2VuYWJsZWQpID09IDEgPworCQkgImVuYWJsZWQiIDogImRpc2FibGVkIiwKKwkJIGJvbmRpbmdfZW5hYmxlZF90bXAgPT0gMSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmJvbmRpbmdfZW5hYmxlZCwgKHVuc2lnbmVkKWJvbmRpbmdfZW5hYmxlZF90bXApOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd192aXNfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY2hhciAqYnVmZikKIHsKQEAgLTEyMywxMCArMTQxLDkgQEAKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAlpbnQgdmlzX21vZGUgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJzdGF0dXM6ICVzXG5jb21tYW5kczogY2xpZW50LCBzZXJ2ZXIsICVkLCAlZFxuIiwKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJXNcbiIsCiAJCSAgICAgICB2aXNfbW9kZSA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFID8KLQkJCQkJCQkiY2xpZW50IiA6ICJzZXJ2ZXIiLAotCQkgICAgICAgVklTX1RZUEVfU0VSVkVSX1NZTkMsIFZJU19UWVBFX0NMSUVOVF9VUERBVEUpOworCQkJCQkJCSJjbGllbnQiIDogInNlcnZlciIpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV92aXNfbW9kZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKQEAgLTE0MSw3ICsxNTgsOCBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZmYsIDEwLCAmdmFsKTsKIAogCWlmICgoKGNvdW50ID09IDIpICYmICghcmV0KSAmJiAodmFsID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpKSB8fAotCSAgICAoc3RybmNtcChidWZmLCAiY2xpZW50IiwgNikgPT0gMCkpCisJICAgIChzdHJuY21wKGJ1ZmYsICJjbGllbnQiLCA2KSA9PSAwKSB8fAorCSAgICAoc3RybmNtcChidWZmLCAib2ZmIiwgMykgPT0gMCkpCiAJCXZpc19tb2RlX3RtcCA9IFZJU19UWVBFX0NMSUVOVF9VUERBVEU7CiAKIAlpZiAoKChjb3VudCA9PSAyKSAmJiAoIXJldCkgJiYgKHZhbCA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQykpIHx8CkBAIC0xNTIsMTggKzE3MCwxOSBAQAogCQlpZiAoYnVmZltjb3VudCAtIDFdID09ICdcbicpCiAJCQlidWZmW2NvdW50IC0gMV0gPSAnXDAnOwogCi0JCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6SW52YWxpZCBwYXJhbWV0ZXIgZm9yICd2aXMgbW9kZScgc2V0dGluZyBvbiBtZXNoICVzIHJlY2VpdmVkOiAlc1xuIiwKLQkJICAgICAgIG5ldF9kZXYtPm5hbWUsIGJ1ZmYpOworCQliYXRfaW5mbyhuZXRfZGV2LAorCQkJICJJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ3ZpcyBtb2RlJyBzZXR0aW5nIHJlY2VpdmVkOiAiCisJCQkgIiVzXG4iLCBidWZmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpID09IHZpc19tb2RlX3RtcCkKIAkJcmV0dXJuIGNvdW50OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpDaGFuZ2luZyB2aXMgbW9kZSBmcm9tOiAlcyB0bzogJXMgb24gbWVzaDogJXNcbiIsCi0JICAgICAgIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+dmlzX21vZGUpID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUgPwotCSAgICAgICAiY2xpZW50IiA6ICJzZXJ2ZXIiLCB2aXNfbW9kZV90bXAgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSA/Ci0JICAgICAgICJjbGllbnQiIDogInNlcnZlciIsIG5ldF9kZXYtPm5hbWUpOworCWJhdF9pbmZvKG5ldF9kZXYsICJDaGFuZ2luZyB2aXMgbW9kZSBmcm9tOiAlcyB0bzogJXNcbiIsCisJCSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKSA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFID8KKwkJICJjbGllbnQiIDogInNlcnZlciIsIHZpc19tb2RlX3RtcCA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFID8KKwkJICJjbGllbnQiIDogInNlcnZlciIpOwogCiAJYXRvbWljX3NldCgmYmF0X3ByaXYtPnZpc19tb2RlLCAodW5zaWduZWQpdmlzX21vZGVfdG1wKTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNzUsNyArMTk0LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYodG9fbmV0X2RldihkZXYpKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJzdGF0dXM6ICVpXG4iLAorCXJldHVybiBzcHJpbnRmKGJ1ZmYsICIlaVxuIiwKIAkJICAgICAgIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCkpOwogfQogCkBAIC0xOTAsOTEgKzIwOSw4NyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmZiwgMTAsICZvcmlnX2ludGVydmFsX3RtcCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkludmFsaWQgcGFyYW1ldGVyIGZvciAnb3JpZ19pbnRlcnZhbCcgc2V0dGluZyBvbiBtZXNoICVzIHJlY2VpdmVkOiAlc1xuIiwKLQkJICAgICAgIG5ldF9kZXYtPm5hbWUsIGJ1ZmYpOworCQliYXRfaW5mbyhuZXRfZGV2LCAiSW52YWxpZCBwYXJhbWV0ZXIgZm9yICdvcmlnX2ludGVydmFsJyAiCisJCQkgInNldHRpbmcgcmVjZWl2ZWQ6ICVzXG4iLCBidWZmKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKG9yaWdfaW50ZXJ2YWxfdG1wIDw9IEpJVFRFUiAqIDIpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpOZXcgb3JpZ2luYXRvciBpbnRlcnZhbCB0b28gc21hbGw6ICVsaSAobWluOiAlaSlcbiIsCi0JCSAgICAgICBvcmlnX2ludGVydmFsX3RtcCwgSklUVEVSICogMik7CisJaWYgKG9yaWdfaW50ZXJ2YWxfdG1wIDwgSklUVEVSICogMikgeworCQliYXRfaW5mbyhuZXRfZGV2LCAiTmV3IG9yaWdpbmF0b3IgaW50ZXJ2YWwgdG9vIHNtYWxsOiAlbGkgIgorCQkJICIobWluOiAlaSlcbiIsIG9yaWdfaW50ZXJ2YWxfdG1wLCBKSVRURVIgKiAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCkgPT0gb3JpZ19pbnRlcnZhbF90bXApCiAJCXJldHVybiBjb3VudDsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6Q2hhbmdpbmcgb3JpZ2luYXRvciBpbnRlcnZhbCBmcm9tOiAlaSB0bzogJWxpIG9uIG1lc2g6ICVzXG4iLAotCSAgICAgICBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPm9yaWdfaW50ZXJ2YWwpLAotCSAgICAgICBvcmlnX2ludGVydmFsX3RtcCwgbmV0X2Rldi0+bmFtZSk7CisJYmF0X2luZm8obmV0X2RldiwgIkNoYW5naW5nIG9yaWdpbmF0b3IgaW50ZXJ2YWwgZnJvbTogJWkgdG86ICVsaVxuIiwKKwkJIGF0b21pY19yZWFkKCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCksCisJCSBvcmlnX2ludGVydmFsX3RtcCk7CiAKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+b3JpZ19pbnRlcnZhbCwgb3JpZ19pbnRlcnZhbF90bXApOwogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIEJBVF9BVFRSKGFnZ3JlZ2F0ZV9vZ20sIFNfSVJVR08gfCBTX0lXVVNSLAotCQlzaG93X2FnZ3Jfb2dtLCBzdG9yZV9hZ2dyX29nbSk7CisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9nX2xldmVsKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWZmKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqLT5wYXJlbnQpOworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCWludCBsb2dfbGV2ZWwgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmxvZ19sZXZlbCk7CisKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJWRcbiIsIGxvZ19sZXZlbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xvZ19sZXZlbChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CisJdW5zaWduZWQgbG9uZyBsb2dfbGV2ZWxfdG1wOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWZmLCAxMCwgJmxvZ19sZXZlbF90bXApOworCWlmIChyZXQpIHsKKwkJYmF0X2luZm8obmV0X2RldiwgIkludmFsaWQgcGFyYW1ldGVyIGZvciAnbG9nX2xldmVsJyAiCisJCQkgInNldHRpbmcgcmVjZWl2ZWQ6ICVzXG4iLCBidWZmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxvZ19sZXZlbF90bXAgPiAzKSB7CisJCWJhdF9pbmZvKG5ldF9kZXYsICJOZXcgbG9nIGxldmVsIHRvbyBiaWc6ICVsaSAiCisJCQkgIihtYXg6ICVpKVxuIiwgbG9nX2xldmVsX3RtcCwgMyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmYmF0X3ByaXYtPmxvZ19sZXZlbCkgPT0gbG9nX2xldmVsX3RtcCkKKwkJcmV0dXJuIGNvdW50OworCisJYXRvbWljX3NldCgmYmF0X3ByaXYtPmxvZ19sZXZlbCwgKHVuc2lnbmVkKWxvZ19sZXZlbF90bXApOworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZgorCitzdGF0aWMgQkFUX0FUVFIoYWdncmVnYXRlZF9vZ21zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19hZ2dyX29nbXMsIHN0b3JlX2FnZ3Jfb2dtcyk7CitzdGF0aWMgQkFUX0FUVFIoYm9uZGluZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9uZCwgc3RvcmVfYm9uZCk7CiBzdGF0aWMgQkFUX0FUVFIodmlzX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3Zpc19tb2RlLCBzdG9yZV92aXNfbW9kZSk7CiBzdGF0aWMgQkFUX0FUVFIob3JpZ19pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfb3JpZ19pbnRlcnZhbCwgc3RvcmVfb3JpZ19pbnRlcnZhbCk7CisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKK3N0YXRpYyBCQVRfQVRUUihsb2dfbGV2ZWwsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2xvZ19sZXZlbCwgc3RvcmVfbG9nX2xldmVsKTsKKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGJhdF9hdHRyaWJ1dGUgKm1lc2hfYXR0cnNbXSA9IHsKLQkmYmF0X2F0dHJfYWdncmVnYXRlX29nbSwKKwkmYmF0X2F0dHJfYWdncmVnYXRlZF9vZ21zLAorCSZiYXRfYXR0cl9ib25kaW5nLAogCSZiYXRfYXR0cl92aXNfbW9kZSwKIAkmYmF0X2F0dHJfb3JpZ19pbnRlcnZhbCwKLQlOVUxMLAotfTsKLQotc3RhdGljIHNzaXplX3QgdHJhbnN0YWJsZV9sb2NhbF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQkgIGNoYXIgKmJ1ZmYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHRvX25ldF9kZXYoZGV2KTsKLQotCXJldHVybiBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dChuZXRfZGV2LCBidWZmLCBjb3VudCwgb2ZmKTsKLX0KLQotc3RhdGljIHNzaXplX3QgdHJhbnN0YWJsZV9nbG9iYWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCi0JCQkJICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCi0JCQkJICBjaGFyICpidWZmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2KGtvYmotPnBhcmVudCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSB0b19uZXRfZGV2KGRldik7Ci0KLQlyZXR1cm4gaG5hX2dsb2JhbF9maWxsX2J1ZmZlcl90ZXh0KG5ldF9kZXYsIGJ1ZmYsIGNvdW50LCBvZmYpOwotfQotCi1zdGF0aWMgc3NpemVfdCBvcmlnaW5hdG9yc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKLQkJCQkgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwKLQkJCQkgIGNoYXIgKmJ1ZmYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXYoa29iai0+cGFyZW50KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHRvX25ldF9kZXYoZGV2KTsKLQotCXJldHVybiBvcmlnX2ZpbGxfYnVmZmVyX3RleHQobmV0X2RldiwgYnVmZiwgY291bnQsIG9mZik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHZpc19kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAotCQkJCSAgY2hhciAqYnVmZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2Rldihrb2JqLT5wYXJlbnQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gdG9fbmV0X2RldihkZXYpOwotCi0JcmV0dXJuIHZpc19maWxsX2J1ZmZlcl90ZXh0KG5ldF9kZXYsIGJ1ZmYsIGNvdW50LCBvZmYpOwotfQotCi1zdGF0aWMgQkFUX0JJTl9BVFRSKHRyYW5zdGFibGVfbG9jYWwsIFNfSVJVR08sIHRyYW5zdGFibGVfbG9jYWxfcmVhZCwgTlVMTCk7Ci1zdGF0aWMgQkFUX0JJTl9BVFRSKHRyYW5zdGFibGVfZ2xvYmFsLCBTX0lSVUdPLCB0cmFuc3RhYmxlX2dsb2JhbF9yZWFkLCBOVUxMKTsKLXN0YXRpYyBCQVRfQklOX0FUVFIob3JpZ2luYXRvcnMsIFNfSVJVR08sIG9yaWdpbmF0b3JzX3JlYWQsIE5VTEwpOwotc3RhdGljIEJBVF9CSU5fQVRUUih2aXNfZGF0YSwgU19JUlVHTywgdmlzX2RhdGFfcmVhZCwgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqbWVzaF9iaW5fYXR0cnNbXSA9IHsKLQkmYmF0X2F0dHJfdHJhbnN0YWJsZV9sb2NhbCwKLQkmYmF0X2F0dHJfdHJhbnN0YWJsZV9nbG9iYWwsCi0JJmJhdF9hdHRyX29yaWdpbmF0b3JzLAotCSZiYXRfYXR0cl92aXNfZGF0YSwKKyNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRworCSZiYXRfYXR0cl9sb2dfbGV2ZWwsCisjZW5kaWYKIAlOVUxMLAogfTsKIApAQCAtMjgzLDIyICsyOTgsMjQgQEAKIAlzdHJ1Y3Qga29iamVjdCAqYmF0aWZfa29iamVjdCA9ICZkZXYtPmRldi5rb2JqOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBiYXRfYXR0cmlidXRlICoqYmF0X2F0dHI7Ci0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUgKipiaW5fYXR0cjsKIAlpbnQgZXJyOwogCiAJLyogRklYTUU6IHNob3VsZCBiZSBkb25lIGluIHRoZSBnZW5lcmFsIG1lc2ggc2V0dXAKIAkJICByb3V0aW5lIGFzIHNvb24gYXMgd2UgaGF2ZSBpdCAqLwogCWF0b21pY19zZXQoJmJhdF9wcml2LT5hZ2dyZWdhdGlvbl9lbmFibGVkLCAxKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+Ym9uZGluZ19lbmFibGVkLCAwKTsKIAlhdG9taWNfc2V0KCZiYXRfcHJpdi0+dmlzX21vZGUsIFZJU19UWVBFX0NMSUVOVF9VUERBVEUpOwogCWF0b21pY19zZXQoJmJhdF9wcml2LT5vcmlnX2ludGVydmFsLCAxMDAwKTsKKwlhdG9taWNfc2V0KCZiYXRfcHJpdi0+bG9nX2xldmVsLCAwKTsKKwogCWJhdF9wcml2LT5wcmltYXJ5X2lmID0gTlVMTDsKIAliYXRfcHJpdi0+bnVtX2lmYWNlcyA9IDA7CiAKIAliYXRfcHJpdi0+bWVzaF9vYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFNZU0ZTX0lGX01FU0hfU1VCRElSLAogCQkJCQkJICAgIGJhdGlmX2tvYmplY3QpOwogCWlmICghYmF0X3ByaXYtPm1lc2hfb2JqKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgc3lzZnMgZGlyZWN0b3J5OiAlcy8lc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgU1lTRlNfSUZfTUVTSF9TVUJESVIpOworCQliYXRfZXJyKGRldiwgIkNhbid0IGFkZCBzeXNmcyBkaXJlY3Rvcnk6ICVzLyVzXG4iLCBkZXYtPm5hbWUsCisJCQlTWVNGU19JRl9NRVNIX1NVQkRJUik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzA2LDI4ICszMjMsMTUgQEAKIAkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLAogCQkJCQkmKCgqYmF0X2F0dHIpLT5hdHRyKSk7CiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgc3lzZnMgZmlsZTogJXMvJXMvJXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBTWVNGU19JRl9NRVNIX1NVQkRJUiwKLQkJCSAgICAgICAoKCpiYXRfYXR0ciktPmF0dHIpLm5hbWUpOworCQkJYmF0X2VycihkZXYsICJDYW4ndCBhZGQgc3lzZnMgZmlsZTogJXMvJXMvJXNcbiIsCisJCQkJZGV2LT5uYW1lLCBTWVNGU19JRl9NRVNIX1NVQkRJUiwKKwkJCQkoKCpiYXRfYXR0ciktPmF0dHIpLm5hbWUpOwogCQkJZ290byByZW1fYXR0cjsKIAkJfQogCX0KIAotCWZvciAoYmluX2F0dHIgPSBtZXNoX2Jpbl9hdHRyczsgKmJpbl9hdHRyOyArK2Jpbl9hdHRyKSB7Ci0JCWVyciA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZShiYXRfcHJpdi0+bWVzaF9vYmosICgqYmluX2F0dHIpKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IGFkZCBzeXNmcyBmaWxlOiAlcy8lcy8lc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIFNZU0ZTX0lGX01FU0hfU1VCRElSLAotCQkJICAgICAgICgoKmJpbl9hdHRyKS0+YXR0cikubmFtZSk7Ci0JCQlnb3RvIHJlbV9iaW5fYXR0cjsKLQkJfQotCX0KLQogCXJldHVybiAwOwogCi1yZW1fYmluX2F0dHI6Ci0JZm9yIChiaW5fYXR0ciA9IG1lc2hfYmluX2F0dHJzOyAqYmluX2F0dHI7ICsrYmluX2F0dHIpCi0JCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShiYXRfcHJpdi0+bWVzaF9vYmosICgqYmluX2F0dHIpKTsKIHJlbV9hdHRyOgogCWZvciAoYmF0X2F0dHIgPSBtZXNoX2F0dHJzOyAqYmF0X2F0dHI7ICsrYmF0X2F0dHIpCiAJCXN5c2ZzX3JlbW92ZV9maWxlKGJhdF9wcml2LT5tZXNoX29iaiwgJigoKmJhdF9hdHRyKS0+YXR0cikpOwpAQCAtMzQyLDEwICszNDYsNiBAQAogewogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBiYXRfYXR0cmlidXRlICoqYmF0X2F0dHI7Ci0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUgKipiaW5fYXR0cjsKLQotCWZvciAoYmluX2F0dHIgPSBtZXNoX2Jpbl9hdHRyczsgKmJpbl9hdHRyOyArK2Jpbl9hdHRyKQotCQlzeXNmc19yZW1vdmVfYmluX2ZpbGUoYmF0X3ByaXYtPm1lc2hfb2JqLCAoKmJpbl9hdHRyKSk7CiAKIAlmb3IgKGJhdF9hdHRyID0gbWVzaF9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKQogCQlzeXNmc19yZW1vdmVfZmlsZShiYXRfcHJpdi0+bWVzaF9vYmosICYoKCpiYXRfYXR0ciktPmF0dHIpKTsKQEAgLTM2NCw3ICszNjQsNyBAQAogCWlmICghYmF0bWFuX2lmKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmYsICJzdGF0dXM6ICVzXG5jb21tYW5kczogbm9uZSwgYmF0MFxuIiwKKwlyZXR1cm4gc3ByaW50ZihidWZmLCAiJXNcbiIsCiAJCSAgICAgICBiYXRtYW5faWYtPmlmX3N0YXR1cyA9PSBJRl9OT1RfSU5fVVNFID8KIAkJCQkJCQkibm9uZSIgOiAiYmF0MCIpOwogfQpAQCAtMzkwLDggKzM5MCw4IEBACiAJCWlmIChidWZmW2NvdW50IC0gMV0gPT0gJ1xuJykKIAkJCWJ1ZmZbY291bnQgLSAxXSA9ICdcMCc7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkludmFsaWQgcGFyYW1ldGVyIGZvciAnbWVzaF9pZmFjZScgc2V0dGluZyByZWNlaXZlZDogJXNcbiIsCi0JCSAgICAgICBidWZmKTsKKwkJcHJfZXJyKCJJbnZhbGlkIHBhcmFtZXRlciBmb3IgJ21lc2hfaWZhY2UnIHNldHRpbmcgcmVjZWl2ZWQ6ICIKKwkJICAgICAgICIlc1xuIiwgYnVmZik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDMzLDM3ICs0MzMsMzcgQEAKIAl9CiB9CiAKLXN0YXRpYyBIQVJESUZfQVRUUihtZXNoX2lmYWNlLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgc2hvd19tZXNoX2lmYWNlLCBzdG9yZV9tZXNoX2lmYWNlKTsKLXN0YXRpYyBIQVJESUZfQVRUUihpZmFjZV9zdGF0dXMsIFNfSVJVR08sIHNob3dfaWZhY2Vfc3RhdHVzLCBOVUxMKTsKK3N0YXRpYyBCQVRfQVRUUihtZXNoX2lmYWNlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJc2hvd19tZXNoX2lmYWNlLCBzdG9yZV9tZXNoX2lmYWNlKTsKK3N0YXRpYyBCQVRfQVRUUihpZmFjZV9zdGF0dXMsIFNfSVJVR08sIHNob3dfaWZhY2Vfc3RhdHVzLCBOVUxMKTsKIAotc3RhdGljIHN0cnVjdCBoYXJkaWZfYXR0cmlidXRlICpiYXRtYW5fYXR0cnNbXSA9IHsKLQkmaGFyZGlmX2F0dHJfbWVzaF9pZmFjZSwKLQkmaGFyZGlmX2F0dHJfaWZhY2Vfc3RhdHVzLAorc3RhdGljIHN0cnVjdCBiYXRfYXR0cmlidXRlICpiYXRtYW5fYXR0cnNbXSA9IHsKKwkmYmF0X2F0dHJfbWVzaF9pZmFjZSwKKwkmYmF0X2F0dHJfaWZhY2Vfc3RhdHVzLAogCU5VTEwsCiB9OwogCiBpbnQgc3lzZnNfYWRkX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmosIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGtvYmplY3QgKmhhcmRpZl9rb2JqZWN0ID0gJmRldi0+ZGV2LmtvYmo7Ci0Jc3RydWN0IGhhcmRpZl9hdHRyaWJ1dGUgKipoYXJkaWZfYXR0cjsKKwlzdHJ1Y3QgYmF0X2F0dHJpYnV0ZSAqKmJhdF9hdHRyOwogCWludCBlcnI7CiAKIAkqaGFyZGlmX29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoU1lTRlNfSUZfQkFUX1NVQkRJUiwKIAkJCQkJCSAgICBoYXJkaWZfa29iamVjdCk7CiAKIAlpZiAoISpoYXJkaWZfb2JqKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgc3lzZnMgZGlyZWN0b3J5OiAlcy8lc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgU1lTRlNfSUZfQkFUX1NVQkRJUik7CisJCWJhdF9lcnIoZGV2LCAiQ2FuJ3QgYWRkIHN5c2ZzIGRpcmVjdG9yeTogJXMvJXNcbiIsIGRldi0+bmFtZSwKKwkJCVNZU0ZTX0lGX0JBVF9TVUJESVIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGhhcmRpZl9hdHRyID0gYmF0bWFuX2F0dHJzOyAqaGFyZGlmX2F0dHI7ICsraGFyZGlmX2F0dHIpIHsKLQkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoKmhhcmRpZl9vYmosICYoKCpoYXJkaWZfYXR0ciktPmF0dHIpKTsKKwlmb3IgKGJhdF9hdHRyID0gYmF0bWFuX2F0dHJzOyAqYmF0X2F0dHI7ICsrYmF0X2F0dHIpIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2ZpbGUoKmhhcmRpZl9vYmosICYoKCpiYXRfYXR0ciktPmF0dHIpKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IGFkZCBzeXNmcyBmaWxlOiAlcy8lcy8lc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIFNZU0ZTX0lGX0JBVF9TVUJESVIsCi0JCQkgICAgICAgKCgqaGFyZGlmX2F0dHIpLT5hdHRyKS5uYW1lKTsKKwkJCWJhdF9lcnIoZGV2LCAiQ2FuJ3QgYWRkIHN5c2ZzIGZpbGU6ICVzLyVzLyVzXG4iLAorCQkJCWRldi0+bmFtZSwgU1lTRlNfSUZfQkFUX1NVQkRJUiwKKwkJCQkoKCpiYXRfYXR0ciktPmF0dHIpLm5hbWUpOwogCQkJZ290byByZW1fYXR0cjsKIAkJfQogCX0KQEAgLTQ3MSw4ICs0NzEsOCBAQAogCXJldHVybiAwOwogCiByZW1fYXR0cjoKLQlmb3IgKGhhcmRpZl9hdHRyID0gYmF0bWFuX2F0dHJzOyAqaGFyZGlmX2F0dHI7ICsraGFyZGlmX2F0dHIpCi0JCXN5c2ZzX3JlbW92ZV9maWxlKCpoYXJkaWZfb2JqLCAmKCgqaGFyZGlmX2F0dHIpLT5hdHRyKSk7CisJZm9yIChiYXRfYXR0ciA9IGJhdG1hbl9hdHRyczsgKmJhdF9hdHRyOyArK2JhdF9hdHRyKQorCQlzeXNmc19yZW1vdmVfZmlsZSgqaGFyZGlmX29iaiwgJigoKmJhdF9hdHRyKS0+YXR0cikpOwogb3V0OgogCXJldHVybiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYmF0X3N5c2ZzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuaAppbmRleCBlMTg5MzQxLi43ZjE4NmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iYXRfc3lzZnMuaApAQCAtMjAsMTAgKzIwLDIzIEBACiAgKi8KIAogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TWVNGU19IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfU1lTRlNfSF8KKwogI2RlZmluZSBTWVNGU19JRl9NRVNIX1NVQkRJUiAibWVzaCIKICNkZWZpbmUgU1lTRlNfSUZfQkFUX1NVQkRJUiAiYmF0bWFuX2FkdiIKIAorc3RydWN0IGJhdF9hdHRyaWJ1dGUgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworfTsKKwogaW50IHN5c2ZzX2FkZF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIHN5c2ZzX2RlbF9tZXNoaWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgc3lzZnNfYWRkX2hhcmRpZihzdHJ1Y3Qga29iamVjdCAqKmhhcmRpZl9vYmosIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBzeXNmc19kZWxfaGFyZGlmKHN0cnVjdCBrb2JqZWN0ICoqaGFyZGlmX29iaik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfU1lTRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5jCmluZGV4IDJmZWY2ZTMuLmRkNDE5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuYwpAQCAtMjQsMTAgKzI0LDEwIEBACiAKIC8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGdpdmVuIHNlcV9iaXRzIGluZGljYXRlcyB0cnVlCiAgKiBhbmQgY3Vycl9zZXFubyBpcyB3aXRoaW4gcmFuZ2Ugb2YgbGFzdF9zZXFubyAqLwotdWludDhfdCBnZXRfYml0X3N0YXR1cyhUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCB1aW50MTZfdCBsYXN0X3NlcW5vLAotCQkgICAgICAgdWludDE2X3QgY3Vycl9zZXFubykKK3VpbnQ4X3QgZ2V0X2JpdF9zdGF0dXMoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgdWludDMyX3QgbGFzdF9zZXFubywKKwkJICAgICAgIHVpbnQzMl90IGN1cnJfc2Vxbm8pCiB7Ci0JaW50MTZfdCBkaWZmLCB3b3JkX29mZnNldCwgd29yZF9udW07CisJaW50MzJfdCBkaWZmLCB3b3JkX29mZnNldCwgd29yZF9udW07CiAKIAlkaWZmID0gbGFzdF9zZXFubyAtIGN1cnJfc2Vxbm87CiAJaWYgKGRpZmYgPCAwIHx8IGRpZmYgPj0gVFFfTE9DQUxfV0lORE9XX1NJWkUpIHsKQEAgLTYzLDcgKzYzLDcgQEAKIH0KIAogLyogc2hpZnQgdGhlIHBhY2tldCBhcnJheSBieSBuIHBsYWNlcy4gKi8KLXZvaWQgYml0X3NoaWZ0KFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIGludDMyX3QgbikKK3N0YXRpYyB2b2lkIGJpdF9zaGlmdChUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQzMl90IG4pCiB7CiAJaW50MzJfdCB3b3JkX29mZnNldCwgd29yZF9udW07CiAJaW50MzJfdCBpOwpAQCAtMTI1LDkgKzEyNSwxMiBAQAogICogIDEgaWYgdGhlIHdpbmRvdyB3YXMgbW92ZWQgKGVpdGhlciBuZXcgb3IgdmVyeSBvbGQpCiAgKiAgMCBpZiB0aGUgd2luZG93IHdhcyBub3QgbW92ZWQvc2hpZnRlZC4KICAqLwotY2hhciBiaXRfZ2V0X3BhY2tldChUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQxNl90IHNlcV9udW1fZGlmZiwKK2NoYXIgYml0X2dldF9wYWNrZXQoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MzJfdCBzZXFfbnVtX2RpZmYsCiAJCSAgICBpbnQ4X3Qgc2V0X21hcmspCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CisKIAkvKiBzZXF1ZW5jZSBudW1iZXIgaXMgc2xpZ2h0bHkgb2xkZXIuIFdlIGFscmVhZHkgZ290IGEgc2VxdWVuY2UgbnVtYmVyCiAJICogaGlnaGVyIHRoYW4gdGhpcyBvbmUsIHNvIHdlIGp1c3QgbWFyayBpdC4gKi8KIApAQCAtMTUyLDcgKzE1NSw3IEBACiAKIAlpZiAoKHNlcV9udW1fZGlmZiA+PSBUUV9MT0NBTF9XSU5ET1dfU0laRSkKIAkJfHwgKHNlcV9udW1fZGlmZiA8IEVYUEVDVEVEX1NFUU5PX1JBTkdFKSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiV2UgbWlzc2VkIGEgbG90IG9mIHBhY2tldHMgKCVpKSAhXG4iLAogCQkJc2VxX251bV9kaWZmIC0gMSk7CiAJCWJpdF9yZXNldF93aW5kb3coc2VxX2JpdHMpOwpAQCAtMTY5LDcgKzE3Miw3IEBACiAJaWYgKChzZXFfbnVtX2RpZmYgPD0gLVRRX0xPQ0FMX1dJTkRPV19TSVpFKQogCQl8fCAoc2VxX251bV9kaWZmID49IEVYUEVDVEVEX1NFUU5PX1JBTkdFKSkgewogCi0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJPdGhlciBob3N0IHByb2JhYmx5IHJlc3RhcnRlZCFcbiIpOwogCiAJCWJpdF9yZXNldF93aW5kb3coc2VxX2JpdHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmgKaW5kZXggNzZhZDI0Yy4uMDE4OTdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5oCkBAIC0xOSw2ICsxOSw4IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JJVEFSUkFZX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CSVRBUlJBWV9IXwogCiAvKiB5b3Ugc2hvdWxkIGNob29zZSBzb21ldGhpbmcgYmlnLCBpZiB5b3UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBjcHUgKi8KICNkZWZpbmUgVFlQRV9PRl9XT1JEIHVuc2lnbmVkIGxvbmcKQEAgLTI2LDIwICsyOCwxOSBAQAogCiAvKiByZXR1cm5zIHRydWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIHRoZSBnaXZlbiBzZXFfYml0cyBpbmRpY2F0ZXMgdHJ1ZQogICogYW5kIGN1cnJfc2Vxbm8gaXMgd2l0aGluIHJhbmdlIG9mIGxhc3Rfc2Vxbm8gKi8KLXVpbnQ4X3QgZ2V0X2JpdF9zdGF0dXMoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgdWludDE2X3QgbGFzdF9zZXFubywKLQkJCQkJICAgdWludDE2X3QgY3Vycl9zZXFubyk7Cit1aW50OF90IGdldF9iaXRfc3RhdHVzKFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIHVpbnQzMl90IGxhc3Rfc2Vxbm8sCisJCQkJCSAgIHVpbnQzMl90IGN1cnJfc2Vxbm8pOwogCiAvKiB0dXJuIGNvcnJlc3BvbmRpbmcgYml0IG9uLCBzbyB3ZSBjYW4gcmVtZW1iZXIgdGhhdCB3ZSBnb3QgdGhlIHBhY2tldCAqLwogdm9pZCBiaXRfbWFyayhUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQzMl90IG4pOwogCi0vKiBzaGlmdCB0aGUgcGFja2V0IGFycmF5IGJ5IG4gcGxhY2VzLiAqLwotdm9pZCBiaXRfc2hpZnQoVFlQRV9PRl9XT1JEICpzZXFfYml0cywgaW50MzJfdCBuKTsKLQogCiAvKiByZWNlaXZlIGFuZCBwcm9jZXNzIG9uZSBwYWNrZXQsIHJldHVybnMgMSBpZiByZWNlaXZlZCBzZXFfbnVtIGlzIGNvbnNpZGVyZWQKICAqIG5ldywgMCBpZiBvbGQgICovCi1jaGFyIGJpdF9nZXRfcGFja2V0KFRZUEVfT0ZfV09SRCAqc2VxX2JpdHMsIGludDE2X3Qgc2VxX251bV9kaWZmLAorY2hhciBiaXRfZ2V0X3BhY2tldChUWVBFX09GX1dPUkQgKnNlcV9iaXRzLCBpbnQzMl90IHNlcV9udW1fZGlmZiwKIAkJCQkJaW50OF90IHNldF9tYXJrKTsKIAogLyogY291bnQgdGhlIGhhbW1pbmcgd2VpZ2h0LCBob3cgbWFueSBnb29kIHBhY2tldHMgZGlkIHdlIHJlY2VpdmU/ICovCiBpbnQgIGJpdF9wYWNrZXRfY291bnQoVFlQRV9PRl9XT1JEICpzZXFfYml0cyk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMjA0YjUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6Ci0gKgotICogTWFyZWsgTGluZG5lcgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSwgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAibWFpbi5oIgotI2luY2x1ZGUgImRldmljZS5oIgotI2luY2x1ZGUgInNlbmQuaCIKLSNpbmNsdWRlICJ0eXBlcy5oIgotI2luY2x1ZGUgImhhc2guaCIKLSNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgotCi1zdGF0aWMgc3RydWN0IGNsYXNzICpiYXRtYW5fY2xhc3M7Ci0KLXN0YXRpYyBpbnQgTWFqb3I7CS8qIE1ham9yIG51bWJlciBhc3NpZ25lZCB0byBvdXIgZGV2aWNlIGRyaXZlciAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewotCS5vcGVuID0gYmF0X2RldmljZV9vcGVuLAotCS5yZWxlYXNlID0gYmF0X2RldmljZV9yZWxlYXNlLAotCS5yZWFkID0gYmF0X2RldmljZV9yZWFkLAotCS53cml0ZSA9IGJhdF9kZXZpY2Vfd3JpdGUsCi0JLnBvbGwgPSBiYXRfZGV2aWNlX3BvbGwsCi19OwotCi1zdGF0aWMgc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnRfaGFzaFsyNTZdOwotCi12b2lkIGJhdF9kZXZpY2VfaW5pdCh2b2lkKQotewotCW1lbXNldChkZXZpY2VfY2xpZW50X2hhc2gsIDAsIHNpemVvZihkZXZpY2VfY2xpZW50X2hhc2gpKTsKLX0KLQotaW50IGJhdF9kZXZpY2Vfc2V0dXAodm9pZCkKLXsKLQlpbnQgdG1wX21ham9yOwotCi0JaWYgKE1ham9yKQotCQlyZXR1cm4gMTsKLQotCS8qIHJlZ2lzdGVyIG91ciBkZXZpY2UgLSBrZXJuZWwgYXNzaWducyBhIGZyZWUgbWFqb3IgbnVtYmVyICovCi0JdG1wX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERSSVZFUl9ERVZJQ0UsICZmb3BzKTsKLQlpZiAodG1wX21ham9yIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkgICAgICAgIlJlZ2lzdGVyaW5nIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGZhaWxlZCB3aXRoICVkXG4iLAotCQkJICB0bXBfbWFqb3IpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQliYXRtYW5fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJiYXRtYW4tYWR2Iik7Ci0KLQlpZiAoSVNfRVJSKGJhdG1hbl9jbGFzcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJDb3VsZCBub3QgcmVnaXN0ZXIgY2xhc3MgJ2JhdG1hbi1hZHYnXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZShiYXRtYW5fY2xhc3MsIE5VTEwsIE1LREVWKHRtcF9tYWpvciwgMCksIE5VTEwsCi0JCSAgICAgICJiYXRtYW4tYWR2Iik7Ci0KLQlNYWpvciA9IHRtcF9tYWpvcjsKLQlyZXR1cm4gMTsKLX0KLQotdm9pZCBiYXRfZGV2aWNlX2Rlc3Ryb3kodm9pZCkKLXsKLQlpZiAoIU1ham9yKQotCQlyZXR1cm47Ci0KLQlkZXZpY2VfZGVzdHJveShiYXRtYW5fY2xhc3MsIE1LREVWKE1ham9yLCAwKSk7Ci0JY2xhc3NfZGVzdHJveShiYXRtYW5fY2xhc3MpOwotCi0JLyogVW5yZWdpc3RlciB0aGUgZGV2aWNlICovCi0JdW5yZWdpc3Rlcl9jaHJkZXYoTWFqb3IsIERSSVZFUl9ERVZJQ0UpOwotCi0JTWFqb3IgPSAwOwotfQotCi1pbnQgYmF0X2RldmljZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBkZXZpY2VfY2xpZW50ICpkZXZpY2VfY2xpZW50OwotCi0JZGV2aWNlX2NsaWVudCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2VfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWRldmljZV9jbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGV2aWNlX2NsaWVudF9oYXNoKTsgaSsrKSB7Ci0JCWlmICghZGV2aWNlX2NsaWVudF9oYXNoW2ldKSB7Ci0JCQlkZXZpY2VfY2xpZW50X2hhc2hbaV0gPSBkZXZpY2VfY2xpZW50OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaSA9PSBBUlJBWV9TSVpFKGRldmljZV9jbGllbnRfaGFzaCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJFcnJvciAtIGNhbid0IGFkZCBhbm90aGVyIHBhY2tldCBjbGllbnQ6ICIKLQkJICAgICAgICJtYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIHJlYWNoZWRcbiIpOwotCQlrZnJlZShkZXZpY2VfY2xpZW50KTsKLQkJcmV0dXJuIC1FWEZVTEw7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmRldmljZV9jbGllbnQtPnF1ZXVlX2xpc3QpOwotCWRldmljZV9jbGllbnQtPnF1ZXVlX2xlbiA9IDA7Ci0JZGV2aWNlX2NsaWVudC0+aW5kZXggPSBpOwotCXNwaW5fbG9ja19pbml0KCZkZXZpY2VfY2xpZW50LT5sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZpY2VfY2xpZW50LT5xdWV1ZV93YWl0KTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldmljZV9jbGllbnQ7Ci0KLQlpbmNfbW9kdWxlX2NvdW50KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBiYXRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQgPQotCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRldmljZV9wYWNrZXQgKmRldmljZV9wYWNrZXQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBmb3IgYWxsIHBhY2tldHMgaW4gdGhlIHF1ZXVlIC4uLiAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCkgewotCQlkZXZpY2VfcGFja2V0ID0gbGlzdF9lbnRyeShsaXN0X3BvcywKLQkJCQkJICAgc3RydWN0IGRldmljZV9wYWNrZXQsIGxpc3QpOwotCi0JCWxpc3RfZGVsKGxpc3RfcG9zKTsKLQkJa2ZyZWUoZGV2aWNlX3BhY2tldCk7Ci0JfQotCi0JZGV2aWNlX2NsaWVudF9oYXNoW2RldmljZV9jbGllbnQtPmluZGV4XSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0Ja2ZyZWUoZGV2aWNlX2NsaWVudCk7Ci0JZGVjX21vZHVsZV9jb3VudCgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXNzaXplX3QgYmF0X2RldmljZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQlsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQgPQotCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGRldmljZV9wYWNrZXQgKmRldmljZV9wYWNrZXQ7Ci0JaW50IGVycm9yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAoZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuID09IDApKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWlmICgoIWJ1ZikgfHwgKGNvdW50IDwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2aWNlX2NsaWVudC0+cXVldWVfd2FpdCwKLQkJCQkJIGRldmljZV9jbGllbnQtPnF1ZXVlX2xlbik7Ci0KLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0KLQlkZXZpY2VfcGFja2V0ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCwKLQkJCQkJIHN0cnVjdCBkZXZpY2VfcGFja2V0LCBsaXN0KTsKLQlsaXN0X2RlbCgmZGV2aWNlX3BhY2tldC0+bGlzdCk7Ci0JZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuLS07Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0KLQllcnJvciA9IF9fY29weV90b191c2VyKGJ1ZiwgJmRldmljZV9wYWNrZXQtPmljbXBfcGFja2V0LAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKTsKLQotCWtmcmVlKGRldmljZV9wYWNrZXQpOwotCi0JaWYgKGVycm9yKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KTsKLX0KLQotc3NpemVfdCBiYXRfZGV2aWNlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZiwKLQkJCSBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZikKLXsKLQlzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqZGV2aWNlX2NsaWVudCA9Ci0JCShzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgaWNtcF9wYWNrZXQgaWNtcF9wYWNrZXQ7Ci0Jc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwotCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKLQl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmF0bWFuLWFkdjoiCi0JCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCi0JCQkiaW52YWxpZCBwYWNrZXQgc2l6ZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmLCBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKF9fY29weV9mcm9tX3VzZXIoJmljbXBfcGFja2V0LCBidWZmLCBzaXplb2YoaWNtcF9wYWNrZXQpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoaWNtcF9wYWNrZXQucGFja2V0X3R5cGUgIT0gQkFUX0lDTVApIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmF0bWFuLWFkdjoiCi0JCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCi0JCQkiZ290IGJvZ3VzIHBhY2tldCB0eXBlIChleHBlY3RlZDogQkFUX0lDTVApXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGljbXBfcGFja2V0Lm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkgewotCQliYXRfZGJnKERCR19CQVRNQU4sICJiYXRtYW4tYWR2OiIKLQkJCSJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6ICIKLQkJCSJnb3QgYm9ndXMgbWVzc2FnZSB0eXBlIChleHBlY3RlZDogRUNIT19SRVFVRVNUKVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWljbXBfcGFja2V0LnVpZCA9IGRldmljZV9jbGllbnQtPmluZGV4OwotCi0JaWYgKGljbXBfcGFja2V0LnZlcnNpb24gIT0gQ09NUEFUX1ZFUlNJT04pIHsKLQkJaWNtcF9wYWNrZXQubXNnX3R5cGUgPSBQQVJBTUVURVJfUFJPQkxFTTsKLQkJaWNtcF9wYWNrZXQudHRsID0gQ09NUEFUX1ZFUlNJT047Ci0JCWJhdF9kZXZpY2VfYWRkX3BhY2tldChkZXZpY2VfY2xpZW50LCAmaWNtcF9wYWNrZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoYXRvbWljX3JlYWQoJm1vZHVsZV9zdGF0ZSkgIT0gTU9EVUxFX0FDVElWRSkKLQkJZ290byBkc3RfdW5yZWFjaDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LmRzdCkpOwotCi0JaWYgKCFvcmlnX25vZGUpCi0JCWdvdG8gdW5sb2NrOwotCi0JaWYgKCFvcmlnX25vZGUtPnJvdXRlcikKLQkJZ290byB1bmxvY2s7Ci0KLQliYXRtYW5faWYgPSBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmc7Ci0JbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFiYXRtYW5faWYpCi0JCWdvdG8gZHN0X3VucmVhY2g7Ci0KLQlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQotCQlnb3RvIGRzdF91bnJlYWNoOwotCi0JbWVtY3B5KGljbXBfcGFja2V0Lm9yaWcsCi0JICAgICAgIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsCi0JICAgICAgIEVUSF9BTEVOKTsKLQotCXNlbmRfcmF3X3BhY2tldCgodW5zaWduZWQgY2hhciAqKSZpY21wX3BhY2tldCwKLQkJCXNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpLAotCQkJYmF0bWFuX2lmLCBkc3RhZGRyKTsKLQotCWdvdG8gb3V0OwotCi11bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKLWRzdF91bnJlYWNoOgotCWljbXBfcGFja2V0Lm1zZ190eXBlID0gREVTVElOQVRJT05fVU5SRUFDSEFCTEU7Ci0JYmF0X2RldmljZV9hZGRfcGFja2V0KGRldmljZV9jbGllbnQsICZpY21wX3BhY2tldCk7Ci1vdXQ6Ci0JcmV0dXJuIGxlbjsKLX0KLQotdW5zaWduZWQgaW50IGJhdF9kZXZpY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqZGV2aWNlX2NsaWVudCA9Ci0JCShzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXBvbGxfd2FpdChmaWxlLCAmZGV2aWNlX2NsaWVudC0+cXVldWVfd2FpdCwgd2FpdCk7Ci0KLQlpZiAoZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuID4gMCkKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBiYXRfZGV2aWNlX2FkZF9wYWNrZXQoc3RydWN0IGRldmljZV9jbGllbnQgKmRldmljZV9jbGllbnQsCi0JCQkgICBzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0KQotewotCXN0cnVjdCBkZXZpY2VfcGFja2V0ICpkZXZpY2VfcGFja2V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkZXZpY2VfcGFja2V0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZV9wYWNrZXQpLCBHRlBfQVRPTUlDKTsKLQotCWlmICghZGV2aWNlX3BhY2tldCkKLQkJcmV0dXJuOwotCi0JSU5JVF9MSVNUX0hFQUQoJmRldmljZV9wYWNrZXQtPmxpc3QpOwotCW1lbWNweSgmZGV2aWNlX3BhY2tldC0+aWNtcF9wYWNrZXQsIGljbXBfcGFja2V0LAotCSAgICAgICBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwotCi0JLyogd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdGhlIGRldmljZV9jbGllbnQgY291bGQgaGF2ZSBiZWVuCi0JICogZGVsZXRlZCAqLwotCWlmICghZGV2aWNlX2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKLQkJa2ZyZWUoZGV2aWNlX3BhY2tldCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZkZXZpY2VfcGFja2V0LT5saXN0LCAmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCk7Ci0JZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuKys7Ci0KLQlpZiAoZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuID4gMTAwKSB7Ci0JCWRldmljZV9wYWNrZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2VfY2xpZW50LT5xdWV1ZV9saXN0LAotCQkJCQkJIHN0cnVjdCBkZXZpY2VfcGFja2V0LCBsaXN0KTsKLQotCQlsaXN0X2RlbCgmZGV2aWNlX3BhY2tldC0+bGlzdCk7Ci0JCWtmcmVlKGRldmljZV9wYWNrZXQpOwotCQlkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4tLTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3VwKCZkZXZpY2VfY2xpZW50LT5xdWV1ZV93YWl0KTsKLX0KLQotdm9pZCBiYXRfZGV2aWNlX3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQpCi17Ci0Jc3RydWN0IGRldmljZV9jbGllbnQgKmhhc2ggPSBkZXZpY2VfY2xpZW50X2hhc2hbaWNtcF9wYWNrZXQtPnVpZF07Ci0KLQlpZiAoaGFzaCkKLQkJYmF0X2RldmljZV9hZGRfcGFja2V0KGhhc2gsIGljbXBfcGFja2V0KTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViMTRiMzcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKLSAqCi0gKiBNYXJlayBMaW5kbmVyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgInR5cGVzLmgiCi0KLXZvaWQgYmF0X2RldmljZV9pbml0KHZvaWQpOwotaW50IGJhdF9kZXZpY2Vfc2V0dXAodm9pZCk7Ci12b2lkIGJhdF9kZXZpY2VfZGVzdHJveSh2b2lkKTsKLWludCBiYXRfZGV2aWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotaW50IGJhdF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zc2l6ZV90IGJhdF9kZXZpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkJbG9mZl90ICpwcG9zKTsKLXNzaXplX3QgYmF0X2RldmljZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmYsCi0JCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpOwotdW5zaWduZWQgaW50IGJhdF9kZXZpY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7Ci12b2lkIGJhdF9kZXZpY2VfYWRkX3BhY2tldChzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqZGV2aWNlX2NsaWVudCwKLQkJCSAgIHN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQpOwotdm9pZCBiYXRfZGV2aWNlX3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKaW5kZXggOTZjODZjOC4uOTJjMjE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiaGFzaC5oIgogCiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogCiAjZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQogCkBAIC0xMDgsNyArMTA5LDcgQEAKIAlzZXRfbWFpbl9pZl9hZGRyKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCiAJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShiYXRtYW5faWYtPnBhY2tldF9idWZmKTsKLQliYXRtYW5fcGFja2V0LT5mbGFncyA9IDA7CisJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSBQUklNQVJJRVNfRklSU1RfSE9QOwogCWJhdG1hbl9wYWNrZXQtPnR0bCA9IFRUTDsKIAogCS8qKioKQEAgLTE0OSwxMiArMTUwLDEwIEBACiAJCWlmICghY29tcGFyZV9vcmlnKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQkJY29udGludWU7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjoiCi0JCSAgICAiVGhlIG5ld2x5IGFkZGVkIG1hYyBhZGRyZXNzICglcE0pIGFscmVhZHkgZXhpc3RzIG9uOiAlc1xuIiwKLQkJICAgIGFkZHIsIGJhdG1hbl9pZi0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjoiCi0JCSAgICAiSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8ga2VlcCBtYWMgYWRkcmVzc2VzIHVuaXF1ZSIKLQkJICAgICJ0byBhdm9pZCBwcm9ibGVtcyFcbiIpOworCQlwcl93YXJuaW5nKCJUaGUgbmV3bHkgYWRkZWQgbWFjIGFkZHJlc3MgKCVwTSkgYWxyZWFkeSBleGlzdHMgIgorCQkJICAgIm9uOiAlc1xuIiwgYWRkciwgYmF0bWFuX2lmLT5kZXYpOworCQlwcl93YXJuaW5nKCJJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBrZWVwIG1hYyBhZGRyZXNzZXMgIgorCQkJICAgInVuaXF1ZSB0byBhdm9pZCBwcm9ibGVtcyFcbiIpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTE4OCw3ICsxODcsOCBAQAogCQlzb2Z0X2RldmljZS0+bXR1ID0gbWluX210dTsKIH0KIAotc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorc3RhdGljIHZvaWQgaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKKwkJCQkgICAgICBzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgICAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKIAlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCkBAIC0yMDYsOCArMjA2LDcgQEAKIAlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKQogCQlzZXRfcHJpbWFyeV9pZihiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6SW50ZXJmYWNlIGFjdGl2YXRlZDogJXNcbiIsCi0JICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiSW50ZXJmYWNlIGFjdGl2YXRlZDogJXNcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAogCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSA9PSBNT0RVTEVfSU5BQ1RJVkUpCiAJCWFjdGl2YXRlX21vZHVsZSgpOwpAQCAtMjE2LDcgKzIxNSw4IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBoYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQorc3RhdGljIHZvaWQgaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAorCQkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCiB7CiAJaWYgKChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpICYmCiAJICAgKGJhdG1hbl9pZi0+aWZfc3RhdHVzICE9IElGX1RPX0JFX0FDVElWQVRFRCkpCkBAIC0yMjYsOCArMjI2LDcgQEAKIAogCWJhdG1hbl9pZi0+aWZfc3RhdHVzID0gSUZfSU5BQ1RJVkU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkludGVyZmFjZSBkZWFjdGl2YXRlZDogJXNcbiIsCi0JICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwliYXRfaW5mbyhuZXRfZGV2LCAiSW50ZXJmYWNlIGRlYWN0aXZhdGVkOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCiAJdXBkYXRlX21pbl9tdHUoKTsKIH0KQEAgLTI0NSw5ICsyNDQsOCBAQAogCWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKGJhdG1hbl9pZi0+cGFja2V0X2xlbiwgR0ZQX0FUT01JQyk7CiAKIAlpZiAoIWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJDYW4ndCBhZGQgaW50ZXJmYWNlIHBhY2tldCAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAotCQkgICAgICAgYmF0bWFuX2lmLT5kZXYpOworCQliYXRfZXJyKHNvZnRfZGV2aWNlLCAiQ2FuJ3QgYWRkIGludGVyZmFjZSBwYWNrZXQgKCVzKTogIgorCQkJIm91dCBvZiBtZW1vcnlcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0yNjUsMTUgKzI2MywxNCBAQAogCW9yaWdfaGFzaF9hZGRfaWYoYmF0bWFuX2lmLCBiYXRfcHJpdi0+bnVtX2lmYWNlcyk7CiAKIAlhdG9taWNfc2V0KCZiYXRtYW5faWYtPnNlcW5vLCAxKTsKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkFkZGluZyBpbnRlcmZhY2U6ICVzXG4iLCBiYXRtYW5faWYtPmRldik7CisJYmF0X2luZm8oc29mdF9kZXZpY2UsICJBZGRpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCiAJaWYgKGhhcmRpZl9pc19pZmFjZV91cChiYXRtYW5faWYpKQotCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKGJhdF9wcml2LCBiYXRtYW5faWYpOworCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiTm90IHVzaW5nIGludGVyZmFjZSAlcyAiCi0JCSAgICAgICAiKHJldHJ5aW5nIGxhdGVyKTogaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCi0JCSAgICAgICBiYXRtYW5faWYtPmRldik7CisJCWJhdF9lcnIoc29mdF9kZXZpY2UsICJOb3QgdXNpbmcgaW50ZXJmYWNlICVzICIKKwkJCSIocmV0cnlpbmcgbGF0ZXIpOiBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwKKwkJCWJhdG1hbl9pZi0+ZGV2KTsKIAogCS8qIGJlZ2luIHNjaGVkdWxpbmcgb3JpZ2luYXRvciBtZXNzYWdlcyBvbiB0aGF0IGludGVyZmFjZSAqLwogCXNjaGVkdWxlX293bl9wYWNrZXQoYmF0bWFuX2lmKTsKQEAgLTI5MSwxMiArMjg4LDEyIEBACiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAogCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyA9PSBJRl9BQ1RJVkUpCi0JCWhhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOworCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc29mdF9kZXZpY2UsIGJhdG1hbl9pZik7CiAKIAlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfSU5BQ1RJVkUpCiAJCXJldHVybjsKIAotCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6UmVtb3ZpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOworCWJhdF9pbmZvKHNvZnRfZGV2aWNlLCAiUmVtb3ZpbmcgaW50ZXJmYWNlOiAlc1xuIiwgYmF0bWFuX2lmLT5kZXYpOwogCWJhdF9wcml2LT5udW1faWZhY2VzLS07CiAJb3JpZ19oYXNoX2RlbF9pZihiYXRtYW5faWYsIGJhdF9wcml2LT5udW1faWZhY2VzKTsKIApAQCAtMzIzLDggKzMyMCw3IEBACiAKIAliYXRtYW5faWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmF0bWFuX2lmKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFiYXRtYW5faWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJDYW4ndCBhZGQgaW50ZXJmYWNlICglcyk6IG91dCBvZiBtZW1vcnlcbiIsCisJCXByX2VycigiQ2FuJ3QgYWRkIGludGVyZmFjZSAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLAogCQkgICAgICAgbmV0X2Rldi0+bmFtZSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQwNywxMSArNDAzLDExIEBACiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1VQOgotCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKGJhdF9wcml2LCBiYXRtYW5faWYpOworCQloYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRfcHJpdiwgYmF0bWFuX2lmKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKIAljYXNlIE5FVERFVl9ET1dOOgotCQloYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKKwkJaGFyZGlmX2RlYWN0aXZhdGVfaW50ZXJmYWNlKHNvZnRfZGV2aWNlLCBiYXRtYW5faWYpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQloYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShiYXRtYW5faWYpOwpAQCAtNDMyLDExICs0MjgsMTggQEAKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKK3N0YXRpYyBpbnQgYmF0bWFuX3NrYl9yZWN2X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKIC8qIHJlY2VpdmUgYSBwYWNrZXQgd2l0aCB0aGUgYmF0bWFuIGV0aGVydHlwZSBjb21pbmcgb24gYSBoYXJkCiAgKiBpbnRlcmZhY2UgKi8KIGludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CisJLyogRklYTUU6IGVhY2ggb3JpZ19ub2RlLT5iYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKQEAgLTQ1Miw2ICs0NTUsMTMgQEAKIAlpZiAoYXRvbWljX3JlYWQoJm1vZHVsZV9zdGF0ZSkgIT0gTU9EVUxFX0FDVElWRSkKIAkJZ290byBlcnJfZnJlZTsKIAorCS8qIGlmIG5ldGZpbHRlci9lYnRhYmxlcyB3YW50cyB0byBibG9jayBpbmNvbWluZyBiYXRtYW4KKwkgKiBwYWNrZXRzIHRoZW4gZ2l2ZSB0aGVtIGEgY2hhbmNlIHRvIGRvIHNvIGhlcmUgKi8KKwlyZXQgPSBORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sIHNrYiwgZGV2LCBOVUxMLAorCQkgICAgICBiYXRtYW5fc2tiX3JlY3ZfZmluaXNoKTsKKwlpZiAocmV0ICE9IDEpCisJCWdvdG8gZXJyX291dDsKKwogCS8qIHBhY2tldCBzaG91bGQgaG9sZCBhdCBsZWFzdCB0eXBlIGFuZCB2ZXJzaW9uICovCiAJaWYgKHVubGlrZWx5KHNrYl9oZWFkbGVuKHNrYikgPCAyKSkKIAkJZ290byBlcnJfZnJlZTsKQEAgLTQ3OCw3ICs0ODgsNyBAQAogCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKilza2ItPmRhdGE7CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IGluY29tcGF0aWJsZSBiYXRtYW4gdmVyc2lvbiAoJWkpXG4iLAogCQkJYmF0bWFuX3BhY2tldC0+dmVyc2lvbik7CiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC01MDAsNyArNTEwLDcgQEAKIAogCQkvKiB1bmljYXN0IHBhY2tldCAqLwogCWNhc2UgQkFUX1VOSUNBU1Q6Ci0JCXJldCA9IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc2tiKTsKKwkJcmV0ID0gcmVjdl91bmljYXN0X3BhY2tldChza2IsIGJhdG1hbl9pZik7CiAJCWJyZWFrOwogCiAJCS8qIGJyb2FkY2FzdCBwYWNrZXQgKi8KQEAgLTUzMSw3ICs1NDEsNiBAQAogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAotCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaGFyZF9pZl9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGhhcmRfaWZfZXZlbnQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKaW5kZXggMWU1ZmMzZS4uZDU2NDBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC0xOSw2ICsxOSw5IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9IQVJEX0lOVEVSRkFDRV9IXworCiAjZGVmaW5lIElGX05PVF9JTl9VU0UgMAogI2RlZmluZSBJRl9UT19CRV9SRU1PVkVEIDEKICNkZWZpbmUgSUZfSU5BQ1RJVkUgMgpAQCAtMzgsMyArNDEsNSBAQAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CiBpbnQgaGFyZGlmX21pbl9tdHUodm9pZCk7CiB2b2lkIHVwZGF0ZV9taW5fbXR1KHZvaWQpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMKaW5kZXggZDRhNGFkYy4uMTI4NmY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgImhhc2guaCIKIAogLyogY2xlYXJzIHRoZSBoYXNoICovCi12b2lkIGhhc2hfaW5pdChzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpCitzdGF0aWMgdm9pZCBoYXNoX2luaXQoc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmgKaW5kZXggZWE2ZDIxZS4uYzQ4M2UxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guaApAQCAtMTksOCArMTksOSBAQAogICoKICAqLwogCi0jaWZuZGVmIF9CQVRNQU5fSEFTSF9ICi0jZGVmaW5lIF9CQVRNQU5fSEFTSF9ICisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9IQVNIX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9IQVNIX0hfCisKICNkZWZpbmUgSEFTSElUKG5hbWUpIHN0cnVjdCBoYXNoX2l0X3QgbmFtZSA9IHsgXAogCQkuaW5kZXggPSAtMSwgLmJ1Y2tldCA9IE5VTEwsIFwKIAkJLnByZXZfYnVja2V0ID0gTlVMTCwgXApAQCAtNTYsOSArNTcsNiBAQAogCQkJCSAgICAgKiBhcmd1bWVudCBhbmQgdGhlIHNpemUgdGhlIHNlY29uZCAqLwogfTsKIAotLyogY2xlYXJzIHRoZSBoYXNoICovCi12b2lkIGhhc2hfaW5pdChzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpOwotCiAvKiBhbGxvY2F0ZXMgYW5kIGNsZWFycyB0aGUgaGFzaCAqLwogc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoX25ldyhpbnQgc2l6ZSwgaGFzaGRhdGFfY29tcGFyZV9jYiBjb21wYXJlLAogCQkJICAgICBoYXNoZGF0YV9jaG9vc2VfY2IgY2hvb3NlKTsKQEAgLTk5LDYgKzk3LDQgQEAKIHN0cnVjdCBoYXNoX2l0X3QgKmhhc2hfaXRlcmF0ZShzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gsCiAJCQkgICAgICAgc3RydWN0IGhhc2hfaXRfdCAqaXRlcl9pbik7CiAKLS8qIHByaW50IHRoZSBoYXNoIHRhYmxlIGZvciBkZWJ1Z2dpbmcgKi8KLXZvaWQgaGFzaF9kZWJ1ZyhzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gpOwotI2VuZGlmCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0hBU0hfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjM2QzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9pY21wX3NvY2tldC5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImljbXBfc29ja2V0LmgiCisjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgInR5cGVzLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCisKKworc3RhdGljIHN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50X2hhc2hbMjU2XTsKKworc3RhdGljIHZvaWQgYmF0X3NvY2tldF9hZGRfcGFja2V0KHN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50LAorCQkJCSAgc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldCwKKwkJCQkgIHNpemVfdCBpY21wX2xlbik7CisKK3ZvaWQgYmF0X3NvY2tldF9pbml0KHZvaWQpCit7CisJbWVtc2V0KHNvY2tldF9jbGllbnRfaGFzaCwgMCwgc2l6ZW9mKHNvY2tldF9jbGllbnRfaGFzaCkpOworfQorCitzdGF0aWMgaW50IGJhdF9zb2NrZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3Qgc29ja2V0X2NsaWVudCAqc29ja2V0X2NsaWVudDsKKworCXNvY2tldF9jbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2V0X2NsaWVudCksIEdGUF9LRVJORUwpOworCisJaWYgKCFzb2NrZXRfY2xpZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNvY2tldF9jbGllbnRfaGFzaCk7IGkrKykgeworCQlpZiAoIXNvY2tldF9jbGllbnRfaGFzaFtpXSkgeworCQkJc29ja2V0X2NsaWVudF9oYXNoW2ldID0gc29ja2V0X2NsaWVudDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShzb2NrZXRfY2xpZW50X2hhc2gpKSB7CisJCXByX2VycigiRXJyb3IgLSBjYW4ndCBhZGQgYW5vdGhlciBwYWNrZXQgY2xpZW50OiAiCisJCSAgICAgICAibWF4aW11bSBudW1iZXIgb2YgY2xpZW50cyByZWFjaGVkXG4iKTsKKwkJa2ZyZWUoc29ja2V0X2NsaWVudCk7CisJCXJldHVybiAtRVhGVUxMOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0KTsKKwlzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4gPSAwOworCXNvY2tldF9jbGllbnQtPmluZGV4ID0gaTsKKwlzcGluX2xvY2tfaW5pdCgmc29ja2V0X2NsaWVudC0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc29ja2V0X2NsaWVudC0+cXVldWVfd2FpdCk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBzb2NrZXRfY2xpZW50OworCisJaW5jX21vZHVsZV9jb3VudCgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJhdF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc29ja2V0X2NsaWVudCAqc29ja2V0X2NsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0X3BhY2tldCAqc29ja2V0X3BhY2tldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcywgKmxpc3RfcG9zX3RtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY2tldF9jbGllbnQtPmxvY2ssIGZsYWdzKTsKKworCS8qIGZvciBhbGwgcGFja2V0cyBpbiB0aGUgcXVldWUgLi4uICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3Bvc190bXAsICZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0KSB7CisJCXNvY2tldF9wYWNrZXQgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLAorCQkJCQkgICBzdHJ1Y3Qgc29ja2V0X3BhY2tldCwgbGlzdCk7CisKKwkJbGlzdF9kZWwobGlzdF9wb3MpOworCQlrZnJlZShzb2NrZXRfcGFja2V0KTsKKwl9CisKKwlzb2NrZXRfY2xpZW50X2hhc2hbc29ja2V0X2NsaWVudC0+aW5kZXhdID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NrZXRfY2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwlrZnJlZShzb2NrZXRfY2xpZW50KTsKKwlkZWNfbW9kdWxlX2NvdW50KCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgYmF0X3NvY2tldF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NrZXRfcGFja2V0ICpzb2NrZXRfcGFja2V0OworCXNpemVfdCBwYWNrZXRfbGVuOworCWludCBlcnJvcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgKHNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbiA9PSAwKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAoKCFidWYpIHx8IChjb3VudCA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvY2tldF9jbGllbnQtPnF1ZXVlX3dhaXQsCisJCQkJCSBzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4pOworCisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29ja2V0X2NsaWVudC0+bG9jaywgZmxhZ3MpOworCisJc29ja2V0X3BhY2tldCA9IGxpc3RfZmlyc3RfZW50cnkoJnNvY2tldF9jbGllbnQtPnF1ZXVlX2xpc3QsCisJCQkJCSBzdHJ1Y3Qgc29ja2V0X3BhY2tldCwgbGlzdCk7CisJbGlzdF9kZWwoJnNvY2tldF9wYWNrZXQtPmxpc3QpOworCXNvY2tldF9jbGllbnQtPnF1ZXVlX2xlbi0tOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29ja2V0X2NsaWVudC0+bG9jaywgZmxhZ3MpOworCisJZXJyb3IgPSBfX2NvcHlfdG9fdXNlcihidWYsICZzb2NrZXRfcGFja2V0LT5pY21wX3BhY2tldCwKKwkJCSAgICAgICBzb2NrZXRfcGFja2V0LT5pY21wX2xlbik7CisKKwlwYWNrZXRfbGVuID0gc29ja2V0X3BhY2tldC0+aWNtcF9sZW47CisJa2ZyZWUoc29ja2V0X3BhY2tldCk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHBhY2tldF9sZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhdF9zb2NrZXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmLAorCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqb2ZmKQoreworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpY21wX3BhY2tldF9yciBpY21wX3BhY2tldDsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXNpemVfdCBwYWNrZXRfbGVuID0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCk7CisJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiAiCisJCQkiaW52YWxpZCBwYWNrZXQgc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCXBhY2tldF9sZW4gPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0X3JyKTsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmLCBwYWNrZXRfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmaWNtcF9wYWNrZXQsIGJ1ZmYsIHBhY2tldF9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChpY21wX3BhY2tldC5wYWNrZXRfdHlwZSAhPSBCQVRfSUNNUCkgeworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkJIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogIgorCQkJImdvdCBib2d1cyBwYWNrZXQgdHlwZSAoZXhwZWN0ZWQ6IEJBVF9JQ01QKVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpY21wX3BhY2tldC5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6ICIKKwkJCSJnb3QgYm9ndXMgbWVzc2FnZSB0eXBlIChleHBlY3RlZDogRUNIT19SRVFVRVNUKVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljbXBfcGFja2V0LnVpZCA9IHNvY2tldF9jbGllbnQtPmluZGV4OworCisJaWYgKGljbXBfcGFja2V0LnZlcnNpb24gIT0gQ09NUEFUX1ZFUlNJT04pIHsKKwkJaWNtcF9wYWNrZXQubXNnX3R5cGUgPSBQQVJBTUVURVJfUFJPQkxFTTsKKwkJaWNtcF9wYWNrZXQudHRsID0gQ09NUEFUX1ZFUlNJT047CisJCWJhdF9zb2NrZXRfYWRkX3BhY2tldChzb2NrZXRfY2xpZW50LCAmaWNtcF9wYWNrZXQsIHBhY2tldF9sZW4pOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYXRvbWljX3JlYWQoJm1vZHVsZV9zdGF0ZSkgIT0gTU9EVUxFX0FDVElWRSkKKwkJZ290byBkc3RfdW5yZWFjaDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LmRzdCkpOworCisJaWYgKCFvcmlnX25vZGUpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKCFvcmlnX25vZGUtPnJvdXRlcikKKwkJZ290byB1bmxvY2s7CisKKwliYXRtYW5faWYgPSBvcmlnX25vZGUtPnJvdXRlci0+aWZfaW5jb21pbmc7CisJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJaWYgKCFiYXRtYW5faWYpCisJCWdvdG8gZHN0X3VucmVhY2g7CisKKwlpZiAoYmF0bWFuX2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQorCQlnb3RvIGRzdF91bnJlYWNoOworCisJbWVtY3B5KGljbXBfcGFja2V0Lm9yaWcsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCWlmIChwYWNrZXRfbGVuID09IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpKQorCQltZW1jcHkoaWNtcF9wYWNrZXQucnIsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCXNlbmRfcmF3X3BhY2tldCgodW5zaWduZWQgY2hhciAqKSZpY21wX3BhY2tldCwKKwkJCXBhY2tldF9sZW4sIGJhdG1hbl9pZiwgZHN0YWRkcik7CisKKwlnb3RvIG91dDsKKwordW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Citkc3RfdW5yZWFjaDoKKwlpY21wX3BhY2tldC5tc2dfdHlwZSA9IERFU1RJTkFUSU9OX1VOUkVBQ0hBQkxFOworCWJhdF9zb2NrZXRfYWRkX3BhY2tldChzb2NrZXRfY2xpZW50LCAmaWNtcF9wYWNrZXQsIHBhY2tldF9sZW4pOworb3V0OgorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmF0X3NvY2tldF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcG9sbF93YWl0KGZpbGUsICZzb2NrZXRfY2xpZW50LT5xdWV1ZV93YWl0LCB3YWl0KTsKKworCWlmIChzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4gPiAwKQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gYmF0X3NvY2tldF9vcGVuLAorCS5yZWxlYXNlID0gYmF0X3NvY2tldF9yZWxlYXNlLAorCS5yZWFkID0gYmF0X3NvY2tldF9yZWFkLAorCS53cml0ZSA9IGJhdF9zb2NrZXRfd3JpdGUsCisJLnBvbGwgPSBiYXRfc29ja2V0X3BvbGwsCit9OworCitpbnQgYmF0X3NvY2tldF9zZXR1cChzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQoreworCXN0cnVjdCBkZW50cnkgKmQ7CisKKwlpZiAoIWJhdF9wcml2LT5kZWJ1Z19kaXIpCisJCWdvdG8gZXJyOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoSUNNUF9TT0NLRVQsIFNfSUZSRUcgfCBTX0lXVVNSIHwgU19JUlVTUiwKKwkJCQliYXRfcHJpdi0+ZGVidWdfZGlyLCBOVUxMLCAmZm9wcyk7CisJaWYgKGQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgYmF0X3NvY2tldF9hZGRfcGFja2V0KHN0cnVjdCBzb2NrZXRfY2xpZW50ICpzb2NrZXRfY2xpZW50LAorCQkJCSAgc3RydWN0IGljbXBfcGFja2V0X3JyICppY21wX3BhY2tldCwKKwkJCQkgIHNpemVfdCBpY21wX2xlbikKK3sKKwlzdHJ1Y3Qgc29ja2V0X3BhY2tldCAqc29ja2V0X3BhY2tldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc29ja2V0X3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrZXRfcGFja2V0KSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIXNvY2tldF9wYWNrZXQpCisJCXJldHVybjsKKworCUlOSVRfTElTVF9IRUFEKCZzb2NrZXRfcGFja2V0LT5saXN0KTsKKwltZW1jcHkoJnNvY2tldF9wYWNrZXQtPmljbXBfcGFja2V0LCBpY21wX3BhY2tldCwgaWNtcF9sZW4pOworCXNvY2tldF9wYWNrZXQtPmljbXBfbGVuID0gaWNtcF9sZW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29ja2V0X2NsaWVudC0+bG9jaywgZmxhZ3MpOworCisJLyogd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdGhlIHNvY2tldF9jbGllbnQgY291bGQgaGF2ZSBiZWVuCisJICogZGVsZXRlZCAqLworCWlmICghc29ja2V0X2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY2tldF9jbGllbnQtPmxvY2ssIGZsYWdzKTsKKwkJa2ZyZWUoc29ja2V0X3BhY2tldCk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2FkZF90YWlsKCZzb2NrZXRfcGFja2V0LT5saXN0LCAmc29ja2V0X2NsaWVudC0+cXVldWVfbGlzdCk7CisJc29ja2V0X2NsaWVudC0+cXVldWVfbGVuKys7CisKKwlpZiAoc29ja2V0X2NsaWVudC0+cXVldWVfbGVuID4gMTAwKSB7CisJCXNvY2tldF9wYWNrZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzb2NrZXRfY2xpZW50LT5xdWV1ZV9saXN0LAorCQkJCQkJIHN0cnVjdCBzb2NrZXRfcGFja2V0LCBsaXN0KTsKKworCQlsaXN0X2RlbCgmc29ja2V0X3BhY2tldC0+bGlzdCk7CisJCWtmcmVlKHNvY2tldF9wYWNrZXQpOworCQlzb2NrZXRfY2xpZW50LT5xdWV1ZV9sZW4tLTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NrZXRfY2xpZW50LT5sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwKCZzb2NrZXRfY2xpZW50LT5xdWV1ZV93YWl0KTsKK30KKwordm9pZCBiYXRfc29ja2V0X3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQsCisJCQkgICAgICAgc2l6ZV90IGljbXBfbGVuKQoreworCXN0cnVjdCBzb2NrZXRfY2xpZW50ICpoYXNoID0gc29ja2V0X2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdOworCisJaWYgKGhhc2gpCisJCWJhdF9zb2NrZXRfYWRkX3BhY2tldChoYXNoLCBpY21wX3BhY2tldCwgaWNtcF9sZW4pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaWNtcF9zb2NrZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5YjM0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2ljbXBfc29ja2V0LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0lDTVBfU09DS0VUX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9JQ01QX1NPQ0tFVF9IXworCisjaW5jbHVkZSAidHlwZXMuaCIKKworI2RlZmluZSBJQ01QX1NPQ0tFVCAic29ja2V0IgorCit2b2lkIGJhdF9zb2NrZXRfaW5pdCh2b2lkKTsKK2ludCBiYXRfc29ja2V0X3NldHVwKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYpOwordm9pZCBiYXRfc29ja2V0X3JlY2VpdmVfcGFja2V0KHN0cnVjdCBpY21wX3BhY2tldF9yciAqaWNtcF9wYWNrZXQsCisJCQkgICAgICAgc2l6ZV90IGljbXBfbGVuKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9JQ01QX1NPQ0tFVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5jCmluZGV4IDc0YzcwZDUuLjI2ODYwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMKQEAgLTIxLDExICsyMSwxMiBAQAogCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgImJhdF9zeXNmcy5oIgorI2luY2x1ZGUgImJhdF9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAicm91dGluZy5oIgogI2luY2x1ZGUgInNlbmQuaCIKICNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCiAjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJpY21wX3NvY2tldC5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgpAQCAtNDEsNyArNDIsNiBAQAogREVGSU5FX1NQSU5MT0NLKGZvcndfYmF0X2xpc3RfbG9jayk7CiBERUZJTkVfU1BJTkxPQ0soZm9yd19iY2FzdF9saXN0X2xvY2spOwogCi1hdG9taWNfdCB2aXNfaW50ZXJ2YWw7CiBhdG9taWNfdCBiY2FzdF9xdWV1ZV9sZWZ0OwogYXRvbWljX3QgYmF0bWFuX3F1ZXVlX2xlZnQ7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAKIAogc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfZGV2aWNlOwogCi11bnNpZ25lZCBjaGFyIGJyb2FkY2FzdEFkZHJbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKK3Vuc2lnbmVkIGNoYXIgYnJvYWRjYXN0X2FkZHJbXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKIGF0b21pY190IG1vZHVsZV9zdGF0ZTsKIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBiYXRtYW5fYWR2X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC01OSwxOCArNTksNyBAQAogCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0X2V2ZW50X3dvcmtxdWV1ZTsKIAotI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCi1pbnQgZGVidWc7Ci0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLQotaW50IGJhdF9kZWJ1Z190eXBlKGludCB0eXBlKQotewotCXJldHVybiBkZWJ1ZyAmIHR5cGU7Ci19Ci0jZW5kaWYKLQotaW50IGluaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBiYXRtYW5faW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKQEAgLTgwLDggKzY5LDYgQEAKIAogCWF0b21pY19zZXQoJm1vZHVsZV9zdGF0ZSwgTU9EVUxFX0lOQUNUSVZFKTsKIAotCWF0b21pY19zZXQoJnZpc19pbnRlcnZhbCwgMTAwMCk7LyogVE9ETzogcmFpc2UgdGhpcyBsYXRlciwgdGhpcyBpcyBvbmx5Ci0JCQkJCSAqIGZvciBkZWJ1Z2dpbmcgbm93LiAqLwogCWF0b21pY19zZXQoJmJjYXN0X3F1ZXVlX2xlZnQsIEJDQVNUX1FVRVVFX0xFTik7CiAJYXRvbWljX3NldCgmYmF0bWFuX3F1ZXVlX2xlZnQsIEJBVE1BTl9RVUVVRV9MRU4pOwogCkBAIC05MiwyMyArNzksMjIgQEAKIAlpZiAoIWJhdF9ldmVudF93b3JrcXVldWUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYmF0X2RldmljZV9pbml0KCk7CisJYmF0X3NvY2tldF9pbml0KCk7CisJZGVidWdmc19pbml0KCk7CiAKIAkvKiBpbml0aWFsaXplIGxheWVyIDIgaW50ZXJmYWNlICovCiAJc29mdF9kZXZpY2UgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBiYXRfcHJpdikgLCAiYmF0JWQiLAogCQkJCSAgIGludGVyZmFjZV9zZXR1cCk7CiAKIAlpZiAoIXNvZnRfZGV2aWNlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBiYXRtYW4gaW50ZXJmYWNlXG4iKTsKKwkJcHJfZXJyKCJVbmFibGUgdG8gYWxsb2NhdGUgdGhlIGJhdG1hbiBpbnRlcmZhY2VcbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9uZXRkZXYoc29mdF9kZXZpY2UpOwogCiAJaWYgKHJldHZhbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiIKLQkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIGJhdG1hbiBpbnRlcmZhY2U6ICVpXG4iLCByZXR2YWwpOworCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYmF0bWFuIGludGVyZmFjZTogJWlcbiIsIHJldHZhbCk7CiAJCWdvdG8gZnJlZV9zb2Z0X2RldmljZTsKIAl9CiAKQEAgLTExNywxNSArMTAzLDIyIEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gdW5yZWdfc29mdF9kZXZpY2U7CiAKKwlyZXR2YWwgPSBkZWJ1Z2ZzX2FkZF9tZXNoaWYoc29mdF9kZXZpY2UpOworCisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gdW5yZWdfc3lzZnM7CisKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmhhcmRfaWZfbm90aWZpZXIpOwogCWRldl9hZGRfcGFjaygmYmF0bWFuX2Fkdl9wYWNrZXRfdHlwZSk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OiIKLQkgICAgICAgIkIuQS5ULk0uQS5OLiBhZHZhbmNlZCAlcyVzIChjb21wYXRpYmlsaXR5IHZlcnNpb24gJWkpIGxvYWRlZFxuIiwKLQkgICAgICAgU09VUkNFX1ZFUlNJT04sIFJFVklTSU9OX1ZFUlNJT05fU1RSLCBDT01QQVRfVkVSU0lPTik7CisJcHJfaW5mbygiQi5BLlQuTS5BLk4uIGFkdmFuY2VkICVzJXMgKGNvbXBhdGliaWxpdHkgdmVyc2lvbiAlaSkgIgorCQkibG9hZGVkXG4iLCBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCisJCUNPTVBBVF9WRVJTSU9OKTsKIAogCXJldHVybiAwOwogCit1bnJlZ19zeXNmczoKKwlzeXNmc19kZWxfbWVzaGlmKHNvZnRfZGV2aWNlKTsKIHVucmVnX3NvZnRfZGV2aWNlOgogCXVucmVnaXN0ZXJfbmV0ZGV2KHNvZnRfZGV2aWNlKTsKIAlzb2Z0X2RldmljZSA9IE5VTEw7CkBAIC0xMzgsMTQgKzEzMSwxNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYmF0bWFuX2V4aXQodm9pZCkKIHsKIAlkZWFjdGl2YXRlX21vZHVsZSgpOwogCisJZGVidWdmc19kZXN0cm95KCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmhhcmRfaWZfbm90aWZpZXIpOwogCWhhcmRpZl9yZW1vdmVfaW50ZXJmYWNlcygpOwogCiAJaWYgKHNvZnRfZGV2aWNlKSB7CisJCWRlYnVnZnNfZGVsX21lc2hpZihzb2Z0X2RldmljZSk7CiAJCXN5c2ZzX2RlbF9tZXNoaWYoc29mdF9kZXZpY2UpOwogCQl1bnJlZ2lzdGVyX25ldGRldihzb2Z0X2RldmljZSk7CiAJCXNvZnRfZGV2aWNlID0gTlVMTDsKQEAgLTE1Nyw3ICsxNTIsNyBAQAogCWJhdF9ldmVudF93b3JrcXVldWUgPSBOVUxMOwogfQogCi0vKiBhY3RpdmF0ZXMgdGhlIG1vZHVsZSwgY3JlYXRlcyBiYXQgZGV2aWNlLCBzdGFydHMgdGltZXIgLi4uICovCisvKiBhY3RpdmF0ZXMgdGhlIG1vZHVsZSwgc3RhcnRzIHRpbWVyIC4uLiAqLwogdm9pZCBhY3RpdmF0ZV9tb2R1bGUodm9pZCkKIHsKIAlpZiAob3JpZ2luYXRvcl9pbml0KCkgPCAxKQpAQCAtMTcxLDkgKzE2Niw2IEBACiAKIAlobmFfbG9jYWxfYWRkKHNvZnRfZGV2aWNlLT5kZXZfYWRkcik7CiAKLQlpZiAoYmF0X2RldmljZV9zZXR1cCgpIDwgMSkKLQkJZ290byBlbmQ7Ci0KIAlpZiAodmlzX2luaXQoKSA8IDEpCiAJCWdvdG8gZXJyOwogCkBAIC0xODIsOCArMTc0LDcgQEAKIAlnb3RvIGVuZDsKIAogZXJyOgotCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjoiCi0JICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtZXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZXM6ICIKKwlwcl9lcnIoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1lc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlczogIgogCSAgICAgICAib3V0IG9mIG1lbSA/XG4iKTsKIAlkZWFjdGl2YXRlX21vZHVsZSgpOwogZW5kOgpAQCAtMjA4LDcgKzE5OSw2IEBACiAJaG5hX2dsb2JhbF9mcmVlKCk7CiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKLQliYXRfZGV2aWNlX2Rlc3Ryb3koKTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCWF0b21pY19zZXQoJm1vZHVsZV9zdGF0ZSwgTU9EVUxFX0lOQUNUSVZFKTsKQEAgLTIyNiw4ICsyMTYsNyBAQAogCiBpbnQgYWRkcl90b19zdHJpbmcoY2hhciAqYnVmZiwgdWludDhfdCAqYWRkcikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWZmLCBNQUNfRk1ULAotCQkgICAgICAgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisJcmV0dXJuIHNwcmludGYoYnVmZiwgIiVwTSIsIGFkZHIpOwogfQogCiAvKiByZXR1cm5zIDEgaWYgdGhleSBhcmUgdGhlIHNhbWUgb3JpZ2luYXRvciAqLwpAQCAtMjg0LDYgKzI3Myw5IEBACiAJcmV0dXJuICphZGRyICYgMHgwMTsKIH0KIAorbW9kdWxlX2luaXQoYmF0bWFuX2luaXQpOworbW9kdWxlX2V4aXQoYmF0bWFuX2V4aXQpOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmgKaW5kZXggNWY4MzQzZC4uODUxMzI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaApAQCAtMTksNiArMTksOSBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9NQUlOX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9NQUlOX0hfCisKIC8qIEtlcm5lbCBQcm9ncmFtbWluZyAqLwogI2RlZmluZSBMSU5VWAogCkBAIC0yNyw3ICszMCw3IEBACiAjZGVmaW5lIERSSVZFUl9ERVNDICAgIkIuQS5ULk0uQS5OLiBhZHZhbmNlZCIKICNkZWZpbmUgRFJJVkVSX0RFVklDRSAiYmF0bWFuLWFkdiIKIAotI2RlZmluZSBTT1VSQ0VfVkVSU0lPTiAiMC4yLjItYmV0YSIKKyNkZWZpbmUgU09VUkNFX1ZFUlNJT04gIm1haW50IgogCiAKIC8qIEIuQS5ULk0uQS5OLiBwYXJhbWV0ZXJzICovCkBAIC0zNiwxMCArMzksMTAgQEAKICNkZWZpbmUgSklUVEVSIDIwCiAjZGVmaW5lIFRUTCA1MAkJCSAgLyogVGltZSBUbyBMaXZlIG9mIGJyb2FkY2FzdCBtZXNzYWdlcyAqLwogCi0jZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwMDAwCSAgLyogcHVyZ2Ugb3JpZ2luYXRvcnMgYWZ0ZXIgdGltZSBpbiBtcyBpZiBubworI2RlZmluZSBQVVJHRV9USU1FT1VUIDIwMAkvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIHNlY29uZHMgaWYgbm8KIAkJCQkgICAqIHZhbGlkIHBhY2tldCBjb21lcyBpbiAtPiBUT0RPOiBjaGVjawogCQkJCSAgICogaW5mbHVlbmNlIG9uIFRRX0xPQ0FMX1dJTkRPV19TSVpFICovCi0jZGVmaW5lIExPQ0FMX0hOQV9USU1FT1VUIDM2MDAwMDAKKyNkZWZpbmUgTE9DQUxfSE5BX1RJTUVPVVQgMzYwMCAvKiBpbiBzZWNvbmRzICovCiAKICNkZWZpbmUgVFFfTE9DQUxfV0lORE9XX1NJWkUgNjQJICAvKiBzbGlkaW5nIHBhY2tldCByYW5nZSBvZiByZWNlaXZlZCBvcmlnaW5hdG9yCiAJCQkJICAgKiBtZXNzYWdlcyBpbiBzcXVlbmNlIG51bWJlcnMgKHNob3VsZCBiZSBhCkBAIC01Nyw0NCArNjAsNDIgQEAKICNkZWZpbmUgTE9HX0JVRl9MRU4gODE5MgkgIC8qIGhhcyB0byBiZSBhIHBvd2VyIG9mIDIgKi8KICNkZWZpbmUgRVRIX1NUUl9MRU4gMjAKIAorI2RlZmluZSBWSVNfSU5URVJWQUwgNTAwMAkvKiA1IHNlY29uZHMgKi8KKworLyogaG93IG11Y2ggd29yc2Ugc2Vjb25kYXJ5IGludGVyZmFjZXMgbWF5IGJlIHRvCisgKiB0byBiZSBjb25zaWRlcmVkIGFzIGJvbmRpbmcgY2FuZGlkYXRlcyAqLworCisjZGVmaW5lIEJPTkRJTkdfVFFfVEhSRVNIT0xECTUwCisKICNkZWZpbmUgTUFYX0FHR1JFR0FUSU9OX0JZVEVTIDUxMiAvKiBzaG91bGQgbm90IGJlIGJpZ2dlciB0aGFuIDUxMiBieXRlcyBvcgogCQkJCSAgICogY2hhbmdlIHRoZSBzaXplIG9mCiAJCQkJICAgKiBmb3J3X3BhY2tldC0+ZGlyZWN0X2xpbmtfZmxhZ3MgKi8KICNkZWZpbmUgTUFYX0FHR1JFR0FUSU9OX01TIDEwMAogCiAjZGVmaW5lIFJFU0VUX1BST1RFQ1RJT05fTVMgMzAwMDAKLSNkZWZpbmUgRVhQRUNURURfU0VRTk9fUkFOR0UJNDA5NgorI2RlZmluZSBFWFBFQ1RFRF9TRVFOT19SQU5HRQk2NTUzNgogLyogZG9uJ3QgcmVzZXQgYWdhaW4gd2l0aGluIDMwIHNlY29uZHMgKi8KIAogI2RlZmluZSBNT0RVTEVfSU5BQ1RJVkUgMAogI2RlZmluZSBNT0RVTEVfQUNUSVZFIDEKICNkZWZpbmUgTU9EVUxFX0RFQUNUSVZBVElORyAyCiAKLSNkZWZpbmUgQkNBU1RfUVVFVUVfTEVOIDI1NgorI2RlZmluZSBCQ0FTVF9RVUVVRV9MRU4JCTI1NgogI2RlZmluZSBCQVRNQU5fUVVFVUVfTEVOCTI1NgogCiAvKgogICogRGVidWcgTWVzc2FnZXMKICAqLworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdCAvKiBBcHBlbmQgJ2JhdG1hbi1hZHY6ICcgYmVmb3JlCisJCQkJCSAgICAgKiBrZXJuZWwgbWVzc2FnZXMgKi8KIAogI2RlZmluZSBEQkdfQkFUTUFOIDEJLyogYWxsIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyAvIGZsb29kaW5nIC8KIAkJCSAqIGJyb2FkY2FzdGluZyAvIGV0YyAqLwogI2RlZmluZSBEQkdfUk9VVEVTIDIJLyogcm91dGUgb3IgaG5hIGFkZGVkIC8gY2hhbmdlZCAvIGRlbGV0ZWQgKi8KKyNkZWZpbmUgREJHX0FMTCAzCiAKLSNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRwotZXh0ZXJuIGludCBkZWJ1ZzsKKyNkZWZpbmUgTE9HX0JVRl9MRU4gODE5MiAgICAgICAgICAvKiBoYXMgdG8gYmUgYSBwb3dlciBvZiAyICovCiAKLWV4dGVybiBpbnQgYmF0X2RlYnVnX3R5cGUoaW50IHR5cGUpOwotI2RlZmluZSBiYXRfZGJnKHR5cGUsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCQlcCi0JCWlmIChiYXRfZGVidWdfdHlwZSh0eXBlKSkJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgImJhdG1hbi1hZHY6IiBmbXQsICMjIGFyZyk7CVwKLQl9CQkJCQkJCQlcCi0Jd2hpbGUgKDApCi0jZWxzZSAvKiAhQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgKi8KLSNkZWZpbmUgYmF0X2RiZyh0eXBlLCBmbXQsIGFyZy4uLikgZG8gewkJXAotCX0JCQkJCVwKLQl3aGlsZSAoMCkKLSNlbmRpZgogCiAvKgogICogIFZpcwpAQCAtMTE3LDYgKzExOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CQkvKiBzdHJ1Y3Qgc29jayAqLwogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgInR5cGVzLmgiCiAKICNpZm5kZWYgUkVWSVNJT05fVkVSU0lPTgpAQCAtMTM0LDE0ICsxMzYsMTMgQEAKIGV4dGVybiBzcGlubG9ja190IGZvcndfYmF0X2xpc3RfbG9jazsKIGV4dGVybiBzcGlubG9ja190IGZvcndfYmNhc3RfbGlzdF9sb2NrOwogCi1leHRlcm4gYXRvbWljX3QgdmlzX2ludGVydmFsOwogZXh0ZXJuIGF0b21pY190IGJjYXN0X3F1ZXVlX2xlZnQ7CiBleHRlcm4gYXRvbWljX3QgYmF0bWFuX3F1ZXVlX2xlZnQ7CiBleHRlcm4gaW50MTZfdCBudW1faG5hOwogCiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfZGV2aWNlOwogCi1leHRlcm4gdW5zaWduZWQgY2hhciBicm9hZGNhc3RBZGRyW107CitleHRlcm4gdW5zaWduZWQgY2hhciBicm9hZGNhc3RfYWRkcltdOwogZXh0ZXJuIGF0b21pY190IG1vZHVsZV9zdGF0ZTsKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0X2V2ZW50X3dvcmtxdWV1ZTsKIApAQCAtMTU1LDMgKzE1Niw0NCBAQAogaW50IGlzX215X21hYyh1aW50OF90ICphZGRyKTsKIGludCBpc19iY2FzdCh1aW50OF90ICphZGRyKTsKIGludCBpc19tY2FzdCh1aW50OF90ICphZGRyKTsKKworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCitleHRlcm4gaW50IGRlYnVnX2xvZyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LCBjaGFyICpmbXQsIC4uLik7CisKKyNkZWZpbmUgYmF0X2RiZyh0eXBlLCBiYXRfcHJpdiwgZm10LCBhcmcuLi4pCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5sb2dfbGV2ZWwpICYgdHlwZSkJXAorCQkJZGVidWdfbG9nKGJhdF9wcml2LCBmbXQsICMjIGFyZyk7CVwKKwl9CQkJCQkJCVwKKwl3aGlsZSAoMCkKKyNlbHNlIC8qICFDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqLworc3RhdGljIGlubGluZSB2b2lkIGJhdF9kYmcoY2hhciB0eXBlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorCQkJICAgc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKKwkJCSAgIGNoYXIgKmZtdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwgLi4uKQoreworfQorI2VuZGlmCisKKyNkZWZpbmUgYmF0X3dhcm5pbmcobmV0X2RldiwgZm10LCBhcmcuLi4pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0cnVjdCBuZXRfZGV2aWNlICpfbmV0ZGV2ID0gKG5ldF9kZXYpOyAgICAgICAgICAgICAgICAgXAorCQlzdHJ1Y3QgYmF0X3ByaXYgKl9iYXRwcml2ID0gbmV0ZGV2X3ByaXYoX25ldGRldik7ICAgICAgIFwKKwkJYmF0X2RiZyhEQkdfQUxMLCBfYmF0cHJpdiwgZm10LCAjIyBhcmcpOwkJXAorCQlwcl93YXJuaW5nKCIlczogIiBmbXQsIF9uZXRkZXYtPm5hbWUsICMjIGFyZyk7CQlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgYmF0X2luZm8obmV0X2RldiwgZm10LCBhcmcuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqX25ldGRldiA9IChuZXRfZGV2KTsgICAgICAgICAgICAgICAgIFwKKwkJc3RydWN0IGJhdF9wcml2ICpfYmF0cHJpdiA9IG5ldGRldl9wcml2KF9uZXRkZXYpOyAgICAgICBcCisJCWJhdF9kYmcoREJHX0FMTCwgX2JhdHByaXYsIGZtdCwgIyMgYXJnKTsJCVwKKwkJcHJfaW5mbygiJXM6ICIgZm10LCBfbmV0ZGV2LT5uYW1lLCAjIyBhcmcpOwkJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGJhdF9lcnIobmV0X2RldiwgZm10LCBhcmcuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqX25ldGRldiA9IChuZXRfZGV2KTsgICAgICAgICAgICAgICAgIFwKKwkJc3RydWN0IGJhdF9wcml2ICpfYmF0cHJpdiA9IG5ldGRldl9wcml2KF9uZXRkZXYpOyAgICAgICBcCisJCWJhdF9kYmcoREJHX0FMTCwgX2JhdHByaXYsIGZtdCwgIyMgYXJnKTsJCVwKKwkJcHJfZXJyKCIlczogIiBmbXQsIF9uZXRkZXYtPm5hbWUsICMjIGFyZyk7CQlcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9NQUlOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKaW5kZXggNTY4YWVmOC4uMjhiYjYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwpAQCAtNTYsMjggKzU2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb3JpZ2luYXRvcl9mcmVlKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghb3JpZ19oYXNoKQotCQlyZXR1cm47Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnB1cmdlX29yaWdfd3EpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Ci0JaGFzaF9kZWxldGUob3JpZ19oYXNoLCBmcmVlX29yaWdfbm9kZSk7Ci0Jb3JpZ19oYXNoID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotfQotCiBzdHJ1Y3QgbmVpZ2hfbm9kZSAqCiBjcmVhdGVfbmVpZ2hib3Ioc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsCiAJCXVpbnQ4X3QgKm5laWdoLCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwgIkNyZWF0aW5nIG5ldyBsYXN0LWhvcCBuZWlnaGJvciBvZiBvcmlnaW5hdG9yXG4iKTsKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkiQ3JlYXRpbmcgbmV3IGxhc3QtaG9wIG5laWdoYm9yIG9mIG9yaWdpbmF0b3JcbiIpOwogCiAJbmVpZ2hfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZWlnaF9ub2RlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZWlnaF9ub2RlKQpAQCAtOTMsNyArODEsNyBAQAogCXJldHVybiBuZWlnaF9ub2RlOwogfQogCi12b2lkIGZyZWVfb3JpZ19ub2RlKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwpAQCAtMTE0LDYgKzEwMiwyMSBAQAogCWtmcmVlKG9yaWdfbm9kZSk7CiB9CiAKK3ZvaWQgb3JpZ2luYXRvcl9mcmVlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghb3JpZ19oYXNoKQorCQlyZXR1cm47CisKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnB1cmdlX29yaWdfd3EpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJaGFzaF9kZWxldGUob3JpZ19oYXNoLCBmcmVlX29yaWdfbm9kZSk7CisJb3JpZ19oYXNoID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworfQorCiAvKiB0aGlzIGZ1bmN0aW9uIGZpbmRzIG9yIGNyZWF0ZXMgYW4gb3JpZ2luYXRvciBlbnRyeSBmb3IgdGhlIGdpdmVuCiAgKiBhZGRyZXNzIGlmIGl0IGRvZXMgbm90IGV4aXRzICovCiBzdHJ1Y3Qgb3JpZ19ub2RlICpnZXRfb3JpZ19ub2RlKHVpbnQ4X3QgKmFkZHIpCkBAIC0xMjksNyArMTMyLDggQEAKIAlpZiAob3JpZ19ub2RlICE9IE5VTEwpCiAJCXJldHVybiBvcmlnX25vZGU7CiAKLQliYXRfZGJnKERCR19CQVRNQU4sICJDcmVhdGluZyBuZXcgb3JpZ2luYXRvcjogJXBNXG4iLCBhZGRyKTsKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkiQ3JlYXRpbmcgbmV3IG9yaWdpbmF0b3I6ICVwTVxuIiwgYWRkcik7CiAKIAlvcmlnX25vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3JpZ19ub2RlKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFvcmlnX25vZGUpCkBAIC0xNjMsOCArMTY3LDggQEAKIAkJc3dhcGhhc2ggPSBoYXNoX3Jlc2l6ZShvcmlnX2hhc2gsIG9yaWdfaGFzaC0+c2l6ZSAqIDIpOwogCiAJCWlmIChzd2FwaGFzaCA9PSBOVUxMKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImJhdG1hbi1hZHY6Q291bGRuJ3QgcmVzaXplIG9yaWcgaGFzaCB0YWJsZVxuIik7CisJCQliYXRfZXJyKHNvZnRfZGV2aWNlLAorCQkJCSJDb3VsZG4ndCByZXNpemUgb3JpZyBoYXNoIHRhYmxlXG4iKTsKIAkJZWxzZQogCQkJb3JpZ19oYXNoID0gc3dhcGhhc2g7CiAJfQpAQCAtMTgyLDYgKzE4Niw4IEBACiBzdGF0aWMgYm9vbCBwdXJnZV9vcmlnX25laWdoYm9ycyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCiAJCQkJIHN0cnVjdCBuZWlnaF9ub2RlICoqYmVzdF9uZWlnaF9ub2RlKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwogCWJvb2wgbmVpZ2hfcHVyZ2VkID0gZmFsc2U7CkBAIC0xOTMsMjAgKzE5OSwxOSBAQAogCQluZWlnaF9ub2RlID0gbGlzdF9lbnRyeShsaXN0X3Bvcywgc3RydWN0IG5laWdoX25vZGUsIGxpc3QpOwogCiAJCWlmICgodGltZV9hZnRlcihqaWZmaWVzLAotCQkJICAgICAgIChuZWlnaF9ub2RlLT5sYXN0X3ZhbGlkICsKLQkJCQkoKFBVUkdFX1RJTUVPVVQgKiBIWikgLyAxMDAwKSkpKSB8fAorCQkJbmVpZ2hfbm9kZS0+bGFzdF92YWxpZCArIFBVUkdFX1RJTUVPVVQgKiBIWikpIHx8CiAJCSAgICAobmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPmlmX3N0YXR1cyA9PQogCQkJCQkJSUZfVE9fQkVfUkVNT1ZFRCkpIHsKIAogCQkJaWYgKG5laWdoX25vZGUtPmlmX2luY29taW5nLT5pZl9zdGF0dXMgPT0KIAkJCQkJCQlJRl9UT19CRV9SRU1PVkVEKQotCQkJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJCQkibmVpZ2hib3IgcHVyZ2U6IG9yaWdpbmF0b3IgJXBNLCAiCiAJCQkJCSJuZWlnaGJvcjogJXBNLCBpZmFjZTogJXNcbiIsCiAJCQkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwKIAkJCQkJbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmctPmRldik7CiAJCQllbHNlCi0JCQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJCSJuZWlnaGJvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVwTSwgIgogCQkJCQkibmVpZ2hib3I6ICVwTSwgbGFzdF92YWxpZDogJWx1XG4iLAogCQkJCQlvcmlnX25vZGUtPm9yaWcsIG5laWdoX25vZGUtPmFkZHIsCkBAIC0yMjYsMjEgKzIzMSwyNiBAQAogCiBzdGF0aWMgYm9vbCBwdXJnZV9vcmlnX25vZGUoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQogeworCS8qIEZJWE1FOiBlYWNoIGJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqYmVzdF9uZWlnaF9ub2RlOwogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgKwotCQkJKCgyICogUFVSR0VfVElNRU9VVCAqIEhaKSAvIDEwMDApKSkpIHsKKwkJb3JpZ19ub2RlLT5sYXN0X3ZhbGlkICsgMiAqIFBVUkdFX1RJTUVPVVQgKiBIWikpIHsKIAotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiT3JpZ2luYXRvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVwTSwgbGFzdF92YWxpZCAlbHVcbiIsCiAJCQlvcmlnX25vZGUtPm9yaWcsIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9IGVsc2UgewotCQlpZiAocHVyZ2Vfb3JpZ19uZWlnaGJvcnMob3JpZ19ub2RlLCAmYmVzdF9uZWlnaF9ub2RlKSkKKwkJaWYgKHB1cmdlX29yaWdfbmVpZ2hib3JzKG9yaWdfbm9kZSwgJmJlc3RfbmVpZ2hfbm9kZSkpIHsKIAkJCXVwZGF0ZV9yb3V0ZXMob3JpZ19ub2RlLCBiZXN0X25laWdoX25vZGUsCiAJCQkJICAgICAgb3JpZ19ub2RlLT5obmFfYnVmZiwKIAkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmX2xlbik7CisJCQkvKiB1cGRhdGUgYm9uZGluZyBjYW5kaWRhdGVzLCB3ZSBjb3VsZCBoYXZlIGxvc3QKKwkJCSAqIHNvbWUgY2FuZGlkYXRlcy4gKi8KKwkJCXVwZGF0ZV9ib25kaW5nX2NhbmRpZGF0ZXMoYmF0X3ByaXYsIG9yaWdfbm9kZSk7CisJCX0KIAl9CiAKIAlyZXR1cm4gZmFsc2U7CkBAIC0yNzEsNDkgKzI4MSw0MSBAQAogCQlzdGFydF9wdXJnZV90aW1lcigpOwogfQogCi1zc2l6ZV90IG9yaWdfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZikKK2ludCBvcmlnX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJSEFTSElUKGhhc2hpdCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKLQlzaXplX3QgaGRyX2xlbiwgdG1wX2xlbjsKLQlpbnQgYmF0bWFuX2NvdW50ID0gMCwgYnl0ZXNfd3JpdHRlbiA9IDA7CisJaW50IGJhdG1hbl9jb3VudCA9IDA7CisJaW50IGxhc3Rfc2Vlbl9zZWNzOworCWludCBsYXN0X3NlZW5fbXNlY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljaGFyIG9yaWdfc3RyW0VUSF9TVFJfTEVOXSwgcm91dGVyX3N0cltFVEhfU1RSX0xFTl07CiAKLQlpZiAoIWJhdF9wcml2LT5wcmltYXJ5X2lmKSB7Ci0JCWlmIChvZmYgPT0gMCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZmYsCi0JCQkJICAgICAiQkFUTUFOIG1lc2ggJXMgZGlzYWJsZWQgLSAiCisJaWYgKCghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHx8CisJICAgIChiYXRfcHJpdi0+cHJpbWFyeV9pZi0+aWZfc3RhdHVzICE9IElGX0FDVElWRSkpIHsKKwkJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikKKwkJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgogCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAogCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7CiAKLQkJcmV0dXJuIDA7CisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzICIKKwkJCQkgICJkaXNhYmxlZCAtIHByaW1hcnkgaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsCisJCQkJICBuZXRfZGV2LT5uYW1lKTsKIAl9CiAKLQlpZiAoYmF0X3ByaXYtPnByaW1hcnlfaWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUgJiYgb2ZmID09IDApCi0JCXJldHVybiBzcHJpbnRmKGJ1ZmYsCi0JCQkgICAgICAgIkJBVE1BTiBtZXNoICVzICIKLQkJCSAgICAgICAiZGlzYWJsZWQgLSBwcmltYXJ5IGludGVyZmFjZSBub3QgYWN0aXZlXG4iLAotCQkJICAgICAgIG5ldF9kZXYtPm5hbWUpOwotCWVsc2UgaWYgKGJhdF9wcml2LT5wcmltYXJ5X2lmLT5pZl9zdGF0dXMgIT0gSUZfQUNUSVZFKQotCQlyZXR1cm4gMDsKLQogCXJjdV9yZWFkX2xvY2soKTsKLQloZHJfbGVuID0gc3ByaW50ZihidWZmLAotCQkgICAiICAlLTE0cyAoJXMvJWkpICUxN3MgWyUxMHNdOiAlMjBzICIKLQkJICAgIi4uLiBbQi5BLlQuTS5BLk4uIGFkdiAlcyVzLCBNYWluSUYvTUFDOiAlcy8lcyAoJXMpXVxuIiwKLQkJICAgIk9yaWdpbmF0b3IiLCAiIyIsIFRRX01BWF9WQUxVRSwgIk5leHRob3AiLCAib3V0Z29pbmdJRiIsCi0JCSAgICJQb3RlbnRpYWwgbmV4dGhvcHMiLCBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsCisJc2VxX3ByaW50ZihzZXEsICJbQi5BLlQuTS5BLk4uIGFkdiAlcyVzLCBNYWluSUYvTUFDOiAlcy8lcyAoJXMpXVxuIiwKKwkJICAgU09VUkNFX1ZFUlNJT04sIFJFVklTSU9OX1ZFUlNJT05fU1RSLAogCQkgICBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+ZGV2LCBiYXRfcHJpdi0+cHJpbWFyeV9pZi0+YWRkcl9zdHIsCiAJCSAgIG5ldF9kZXYtPm5hbWUpOworCXNlcV9wcmludGYoc2VxLCAiICAlLTE1cyAlcyAoJXMvJWkpICUxN3MgWyUxMHNdOiAlMjBzIC4uLlxuIiwKKwkJICAgIk9yaWdpbmF0b3IiLCAibGFzdC1zZWVuIiwgIiMiLCBUUV9NQVhfVkFMVUUsICJOZXh0aG9wIiwKKwkJICAgIm91dGdvaW5nSUYiLCAiUG90ZW50aWFsIG5leHRob3BzIik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlpZiAob2ZmIDwgaGRyX2xlbikKLQkJYnl0ZXNfd3JpdHRlbiA9IGhkcl9sZW47Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCXdoaWxlIChoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCAmaGFzaGl0KSkgewpAQCAtMzI2LDQ0ICszMjgsMzQgQEAKIAkJaWYgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIGVzdGltYXRlZCBsaW5lIGxlbmd0aCAqLwotCQlpZiAoY291bnQgPCBieXRlc193cml0dGVuICsgMjAwKQotCQkJYnJlYWs7Ci0KIAkJYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIG9yaWdfbm9kZS0+b3JpZyk7CiAJCWFkZHJfdG9fc3RyaW5nKHJvdXRlcl9zdHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwkJbGFzdF9zZWVuX3NlY3MgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLQorCQkJCQkJb3JpZ19ub2RlLT5sYXN0X3ZhbGlkKSAvIDEwMDA7CisJCWxhc3Rfc2Vlbl9tc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCisJCQkJCQlvcmlnX25vZGUtPmxhc3RfdmFsaWQpICUgMTAwMDsKIAotCQl0bXBfbGVuID0gc3ByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwKLQkJCQkgICIlLTE3cyAgKCUzaSkgJTE3cyBbJTEwc106IiwKLQkJCQkgICBvcmlnX3N0ciwgb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZywKLQkJCQkgICByb3V0ZXJfc3RyLAotCQkJCSAgIG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZy0+ZGV2KTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTE3cyAlNGkuJTAzaXMgICAoJTNpKSAlMTdzIFslMTBzXToiLAorCQkJICAgb3JpZ19zdHIsIGxhc3Rfc2Vlbl9zZWNzLCBsYXN0X3NlZW5fbXNlY3MsCisJCQkgICBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnLCByb3V0ZXJfc3RyLAorCQkJICAgb3JpZ19ub2RlLT5yb3V0ZXItPmlmX2luY29taW5nLT5kZXYpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewogCQkJYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIG5laWdoX25vZGUtPmFkZHIpOwotCQkJdG1wX2xlbiArPSBzcHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuICsgdG1wX2xlbiwKLQkJCQkJICAgIiAlMTdzICglM2kpIiwgb3JpZ19zdHIsCisJCQlzZXFfcHJpbnRmKHNlcSwgIiAlMTdzICglM2kpIiwgb3JpZ19zdHIsCiAJCQkJCSAgIG5laWdoX25vZGUtPnRxX2F2Zyk7CiAJCX0KIAotCQl0bXBfbGVuICs9IHNwcmludGYoYnVmZiArIGJ5dGVzX3dyaXR0ZW4gKyB0bXBfbGVuLCAiXG4iKTsKLQorCQlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CiAJCWJhdG1hbl9jb3VudCsrOwotCQloZHJfbGVuICs9IHRtcF9sZW47Ci0KLQkJaWYgKG9mZiA+PSBoZHJfbGVuKQotCQkJY29udGludWU7Ci0KLQkJYnl0ZXNfd3JpdHRlbiArPSB0bXBfbGVuOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQlpZiAoKGJhdG1hbl9jb3VudCA9PSAwKSAmJiAob2ZmID09IDApKQotCQlieXRlc193cml0dGVuICs9IHNwcmludGYoYnVmZiArIGJ5dGVzX3dyaXR0ZW4sCi0JCQkJCSJObyBiYXRtYW4gbm9kZXMgaW4gcmFuZ2UgLi4uXG4iKTsKKwlpZiAoKGJhdG1hbl9jb3VudCA9PSAwKSkKKwkJc2VxX3ByaW50ZihzZXEsICJObyBiYXRtYW4gbm9kZXMgaW4gcmFuZ2UgLi4uXG4iKTsKIAotCXJldHVybiBieXRlc193cml0dGVuOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9yaWdfbm9kZV9hZGRfaWYoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBpbnQgbWF4X2lmX251bSkKQEAgLTM3Myw4ICszNjUsNyBAQAogCWRhdGFfcHRyID0ga21hbGxvYyhtYXhfaWZfbnVtICogc2l6ZW9mKFRZUEVfT0ZfV09SRCkgKiBOVU1fV09SRFMsCiAJCQkgICBHRlBfQVRPTUlDKTsKIAlpZiAoIWRhdGFfcHRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImJhdG1hbi1hZHY6Q2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9lcnIoIkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzg1LDggKzM3Niw3IEBACiAKIAlkYXRhX3B0ciA9IGttYWxsb2MobWF4X2lmX251bSAqIHNpemVvZih1aW50OF90KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFkYXRhX3B0cikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJiYXRtYW4tYWR2OkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCJDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQzNSw4ICs0MjUsNyBAQAogCWNodW5rX3NpemUgPSBzaXplb2YoVFlQRV9PRl9XT1JEKSAqIE5VTV9XT1JEUzsKIAlkYXRhX3B0ciA9IGttYWxsb2MobWF4X2lmX251bSAqIGNodW5rX3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghZGF0YV9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYmF0bWFuLWFkdjpDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2VycigiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00NTcsOCArNDQ2LDcgQEAKIAogCWRhdGFfcHRyID0ga21hbGxvYyhtYXhfaWZfbnVtICogc2l6ZW9mKHVpbnQ4X3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRhdGFfcHRyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImJhdG1hbi1hZHY6Q2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9lcnIoIkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCmluZGV4IGFmYmM3YzAuLmU4ODQxMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKQEAgLTE5LDE2ICsxOSwxOCBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfCisKIGludCBvcmlnaW5hdG9yX2luaXQodm9pZCk7Ci12b2lkIGZyZWVfb3JpZ19ub2RlKHZvaWQgKmRhdGEpOwogdm9pZCBvcmlnaW5hdG9yX2ZyZWUodm9pZCk7CiB2b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfZmluZChjaGFyICptYWMpOwogc3RydWN0IG9yaWdfbm9kZSAqZ2V0X29yaWdfbm9kZSh1aW50OF90ICphZGRyKTsKIHN0cnVjdCBuZWlnaF9ub2RlICoKIGNyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKIAkJdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKLXNzaXplX3Qgb3JpZ19maWxsX2J1ZmZlcl90ZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBjaGFyICpidWZmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKK2ludCBvcmlnX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpOwogaW50IG9yaWdfaGFzaF9hZGRfaWYoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCBpbnQgbWF4X2lmX251bSk7CiBpbnQgb3JpZ19oYXNoX2RlbF9pZihzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsIGludCBtYXhfaWZfbnVtKTsKKworI2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wYWNrZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCmluZGV4IDE1MmY1N2IuLmFiYjVlNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCkBAIC0xOSw2ICsxOSw5IEBACiAgKgogICovCiAKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1BBQ0tFVF9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfUEFDS0VUX0hfCisKICNkZWZpbmUgRVRIX1BfQkFUTUFOICAweDQzMDUJLyogdW5vZmZpY2lhbC9ub3QgcmVnaXN0ZXJlZCBFdGhlcnR5cGUgKi8KIAogI2RlZmluZSBCQVRfUEFDS0VUICAgIDB4MDEKQEAgLTI4LDkgKzMxLDEwIEBACiAjZGVmaW5lIEJBVF9WSVMgICAgICAgMHgwNQogCiAvKiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgYmF0Y3RsIHdoaWNoIG5lZWRzIHRoZXNlIGRlZmluZXMgKi8KLSNkZWZpbmUgQ09NUEFUX1ZFUlNJT04gOAorI2RlZmluZSBDT01QQVRfVkVSU0lPTiAxMQogI2RlZmluZSBESVJFQ1RMSU5LIDB4NDAKICNkZWZpbmUgVklTX1NFUlZFUiAweDIwCisjZGVmaW5lIFBSSU1BUklFU19GSVJTVF9IT1AgMHgxMAogCiAvKiBJQ01QIG1lc3NhZ2UgdHlwZXMgKi8KICNkZWZpbmUgRUNIT19SRVBMWSAwCkBAIC00OCw3ICs1Miw3IEBACiAJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCiAJdWludDhfdCAgZmxhZ3M7ICAgIC8qIDB4NDA6IERJUkVDVExJTksgZmxhZywgMHgyMCBWSVNfU0VSVkVSIGZsYWcuLi4gKi8KIAl1aW50OF90ICB0cTsKLQl1aW50MTZfdCBzZXFubzsKKwl1aW50MzJfdCBzZXFubzsKIAl1aW50OF90ICBvcmlnWzZdOwogCXVpbnQ4X3QgIHByZXZfc2VuZGVyWzZdOwogCXVpbnQ4X3QgIHR0bDsKQEAgLTY4LDYgKzcyLDIzIEBACiAJdWludDhfdCAgdWlkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorI2RlZmluZSBCQVRfUlJfTEVOIDE2CisKKy8qIGljbXBfcGFja2V0X3JyIG11c3Qgc3RhcnQgd2l0aCBhbGwgZmllbGRzIGZyb20gaW1jcF9wYWNrZXQKKyAgIGFzIHRoaXMgaXMgYXNzdW1lZCBieSBjb2RlIHRoYXQgaGFuZGxlcyBJQ01QIHBhY2tldHMgKi8KK3N0cnVjdCBpY21wX3BhY2tldF9yciB7CisJdWludDhfdCAgcGFja2V0X3R5cGU7CisJdWludDhfdCAgdmVyc2lvbjsgIC8qIGJhdG1hbiB2ZXJzaW9uIGZpZWxkICovCisJdWludDhfdCAgbXNnX3R5cGU7IC8qIHNlZSBJQ01QIG1lc3NhZ2UgdHlwZXMgYWJvdmUgKi8KKwl1aW50OF90ICB0dGw7CisJdWludDhfdCAgZHN0WzZdOworCXVpbnQ4X3QgIG9yaWdbNl07CisJdWludDE2X3Qgc2Vxbm87CisJdWludDhfdCAgdWlkOworCXVpbnQ4X3QgIHJyX2N1cjsKKwl1aW50OF90ICBycltCQVRfUlJfTEVOXVtFVEhfQUxFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgewogCXVpbnQ4X3QgIHBhY2tldF90eXBlOwogCXVpbnQ4X3QgIHZlcnNpb247ICAvKiBiYXRtYW4gdmVyc2lvbiBmaWVsZCAqLwpAQCAtNzksMTggKzEwMCwyMSBAQAogCXVpbnQ4X3QgIHBhY2tldF90eXBlOwogCXVpbnQ4X3QgIHZlcnNpb247ICAvKiBiYXRtYW4gdmVyc2lvbiBmaWVsZCAqLwogCXVpbnQ4X3QgIG9yaWdbNl07Ci0JdWludDE2X3Qgc2Vxbm87CisJdWludDhfdCAgdHRsOworCXVpbnQzMl90IHNlcW5vOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IHZpc19wYWNrZXQgewogCXVpbnQ4X3QgIHBhY2tldF90eXBlOwogCXVpbnQ4X3QgIHZlcnNpb247ICAgICAgICAvKiBiYXRtYW4gdmVyc2lvbiBmaWVsZCAqLwogCXVpbnQ4X3QgIHZpc190eXBlOwkgLyogd2hpY2ggdHlwZSBvZiB2aXMtcGFydGljaXBhbnQgc2VudCB0aGlzPyAqLwotCXVpbnQ4X3QgIHNlcW5vOwkJIC8qIHNlcXVlbmNlIG51bWJlciAqLwogCXVpbnQ4X3QgIGVudHJpZXM7CSAvKiBudW1iZXIgb2YgZW50cmllcyBiZWhpbmQgdGhpcyBzdHJ1Y3QgKi8KKwl1aW50MzJfdCBzZXFubzsJCSAvKiBzZXF1ZW5jZSBudW1iZXIgKi8KIAl1aW50OF90ICB0dGw7CQkgLyogVFRMICovCiAJdWludDhfdCAgdmlzX29yaWdbNl07CSAvKiBvcmlnaW5hdG9yIHRoYXQgaW5mb3JtcyBhYm91dCBpdHMKIAkJCQkgICogbmVpZ2hib3JzICovCiAJdWludDhfdCAgdGFyZ2V0X29yaWdbNl07IC8qIHdobyBzaG91bGQgcmVjZWl2ZSB0aGlzIHBhY2tldCAqLwogCXVpbnQ4X3QgIHNlbmRlcl9vcmlnWzZdOyAvKiB3aG8gc2VudCBvciByZWJyb2FkY2FzdGVkIHRoaXMgcGFja2V0ICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1BBQ0tFVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcmluZ19idWZmZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmgKaW5kZXggYjhjOTQ1Ni4uNmIwY2I5YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JpbmdfYnVmZmVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcmluZ19idWZmZXIuaApAQCAtMTksNSArMTksMTAgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfUklOR19CVUZGRVJfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1JJTkdfQlVGRkVSX0hfCisKIHZvaWQgcmluZ19idWZmZXJfc2V0KHVpbnQ4X3QgbHFfcmVjdltdLCB1aW50OF90ICpscV9pbmRleCwgdWludDhfdCB2YWx1ZSk7CiB1aW50OF90IHJpbmdfYnVmZmVyX2F2Zyh1aW50OF90IGxxX3JlY3ZbXSk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUklOR19CVUZGRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYwppbmRleCAwNjZkYzhiLi4wNjZjYzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJkZXZpY2UuaCIKKyNpbmNsdWRlICJpY21wX3NvY2tldC5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCiAjaW5jbHVkZSAib3JpZ2luYXRvci5oIgogI2luY2x1ZGUgInR5cGVzLmgiCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKIAotREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodGhyZWFkX3dhaXQpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRocmVhZF93YWl0KTsKIAogdm9pZCBzbGlkZV9vd25fYmNhc3Rfd2luZG93KHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKQEAgLTc3LDI0ICs3NywyNyBAQAogCQkJIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLAogCQkJIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCiAJLyogcm91dGUgZGVsZXRlZCAqLwogCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkgJiYgKG5laWdoX25vZGUgPT0gTlVMTCkpIHsKIAotCQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlcE1cbiIsCisJCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlcE1cbiIsCiAJCQlvcmlnX25vZGUtPm9yaWcpOwogCQlobmFfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZSwgIm9yaWdpbmF0b3IgdGltZWQgb3V0Iik7CiAKIAkJLyogcm91dGUgYWRkZWQgKi8KIAl9IGVsc2UgaWYgKChvcmlnX25vZGUtPnJvdXRlciA9PSBOVUxMKSAmJiAobmVpZ2hfbm9kZSAhPSBOVUxMKSkgewogCi0JCWJhdF9kYmcoREJHX1JPVVRFUywKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJBZGRpbmcgcm91dGUgdG93YXJkczogJXBNICh2aWEgJXBNKVxuIiwKIAkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkcik7CiAJCWhuYV9nbG9iYWxfYWRkX29yaWcob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKIAogCQkvKiByb3V0ZSBjaGFuZ2VkICovCiAJfSBlbHNlIHsKLQkJYmF0X2RiZyhEQkdfUk9VVEVTLAorCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAogCQkJIkNoYW5naW5nIHJvdXRlIHRvd2FyZHM6ICVwTSAiCiAJCQkiKG5vdyB2aWEgJXBNIC0gd2FzIHZpYSAlcE0pXG4iLAogCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLApAQCAtMTIwLDExICsxMjMsMTMgQEAKIAkJdXBkYXRlX0hOQShvcmlnX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOwogfQogCi1zdGF0aWMgaW50IGlzQmlkaXJlY3Rpb25hbE5laWdoKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKK3N0YXRpYyBpbnQgaXNfYmlkaXJlY3Rpb25hbF9uZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCiAJCQkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAogCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAogCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKIAl1bnNpZ25lZCBjaGFyIHRvdGFsX2NvdW50OwogCkBAIC0yMTEsNyArMjE2LDcgQEAKIAkJCSAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5KSAvCiAJCQkgICAgIChUUV9NQVhfVkFMVUUgKiBUUV9NQVhfVkFMVUUpKTsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkiYmlkaXJlY3Rpb25hbDogIgogCQkib3JpZyA9ICUtMTVwTSBuZWlnaCA9ICUtMTVwTSA9PiBvd25fYmNhc3QgPSAlMmksICIKIAkJInJlYWwgcmVjdiA9ICUyaSwgbG9jYWwgdHE6ICUzaSwgYXN5bV9wZW5hbHR5OiAlM2ksICIKQEAgLTIzNCwxMCArMjM5LDEyIEBACiAJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKIAkJCWNoYXIgaXNfZHVwbGljYXRlKQogeworCS8qIEZJWE1FOiBnZXQgYmF0X3ByaXYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKIAlpbnQgdG1wX2huYV9idWZmX2xlbjsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwgInVwZGF0ZV9vcmlnaW5hdG9yKCk6ICIKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAidXBkYXRlX29yaWdpbmF0b3IoKTogIgogCQkiU2VhcmNoaW5nIGFuZCB1cGRhdGluZyBvcmlnaW5hdG9yIGVudHJ5IG9mIHJlY2VpdmVkIHBhY2tldFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CkBAIC0yNjksNyArMjc2LDcgQEAKIAkJaWYgKCFuZWlnaF9ub2RlKQogCQkJcmV0dXJuOwogCX0gZWxzZQotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiVXBkYXRpbmcgZXhpc3RpbmcgbGFzdC1ob3AgbmVpZ2hib3Igb2Ygb3JpZ2luYXRvclxuIik7CiAKIAlvcmlnX25vZGUtPmZsYWdzID0gYmF0bWFuX3BhY2tldC0+ZmxhZ3M7CkBAIC0zMTgsMTYgKzMyNSwxOSBAQAogICogIDAgaWYgdGhlIHBhY2tldCBpcyB0byBiZSBhY2NlcHRlZAogICogIDEgaWYgdGhlIHBhY2tldCBpcyB0byBiZSBpZ25vcmVkLgogICovCi1zdGF0aWMgaW50IHdpbmRvd19wcm90ZWN0ZWQoaW50MTZfdCBzZXFfbnVtX2RpZmYsCitzdGF0aWMgaW50IHdpbmRvd19wcm90ZWN0ZWQoaW50MzJfdCBzZXFfbnVtX2RpZmYsCiAJCQkJdW5zaWduZWQgbG9uZyAqbGFzdF9yZXNldCkKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKKwogCWlmICgoc2VxX251bV9kaWZmIDw9IC1UUV9MT0NBTF9XSU5ET1dfU0laRSkKIAkJfHwgKHNlcV9udW1fZGlmZiA+PSBFWFBFQ1RFRF9TRVFOT19SQU5HRSkpIHsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgKmxhc3RfcmVzZXQgKwogCQkJbXNlY3NfdG9famlmZmllcyhSRVNFVF9QUk9URUNUSU9OX01TKSkpIHsKIAogCQkJKmxhc3RfcmVzZXQgPSBqaWZmaWVzOwotCQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCQkib2xkIHBhY2tldCByZWNlaXZlZCwgc3RhcnQgcHJvdGVjdGlvblxuIik7CiAKIAkJCXJldHVybiAwOwpAQCAtMzQ5LDEwICszNTksMTIgQEAKIAkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKIAkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlOwogCWNoYXIgaXNfZHVwbGljYXRlID0gMDsKLQlpbnQxNl90IHNlcV9kaWZmOworCWludDMyX3Qgc2VxX2RpZmY7CiAJaW50IG5lZWRfdXBkYXRlID0gMDsKIAlpbnQgc2V0X21hcms7CiAKQEAgLTM4Nyw3ICszOTksOCBAQAogCX0KIAogCWlmIChuZWVkX3VwZGF0ZSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sICJ1cGRhdGluZyBsYXN0X3NlcW5vOiBvbGQgJWQsIG5ldyAlZFxuIiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJ1cGRhdGluZyBsYXN0X3NlcW5vOiBvbGQgJWQsIG5ldyAlZFxuIiwKIAkJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vLCBiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vID0gYmF0bWFuX3BhY2tldC0+c2Vxbm87CiAJfQpAQCAtMzk1LDE4ICs0MDgsMTI3IEBACiAJcmV0dXJuIGlzX2R1cGxpY2F0ZTsKIH0KIAorLyogY29weSBwcmltYXJ5IGFkZHJlc3MgZm9yIGJvbmRpbmcgKi8KK3N0YXRpYyB2b2lkIG1hcmtfYm9uZGluZ19hZGRyZXNzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkJIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCQkgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAorCQkJCSBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCkKKworeworCWlmIChiYXRtYW5fcGFja2V0LT5mbGFncyAmIFBSSU1BUklFU19GSVJTVF9IT1ApCisJCW1lbWNweShvcmlnX25laWdoX25vZGUtPnByaW1hcnlfYWRkciwKKwkJICAgICAgIG9yaWdfbm9kZS0+b3JpZywgRVRIX0FMRU4pOworCisJcmV0dXJuOworfQorCisvKiBtYXJrIHBvc3NpYmxlIGJvbmQuY2FuZGlkYXRlcyBpbiB0aGUgbmVpZ2hib3IgbGlzdCAqLwordm9pZCB1cGRhdGVfYm9uZGluZ19jYW5kaWRhdGVzKHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCisJCQkgICAgICAgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCWludCBjYW5kaWRhdGVzOworCWludCBpbnRlcmZlcmVuY2VfY2FuZGlkYXRlOworCWludCBiZXN0X3RxOworCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZSwgKnRtcF9uZWlnaF9ub2RlMjsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmlyc3RfY2FuZGlkYXRlLCAqbGFzdF9jYW5kaWRhdGU7CisKKwkvKiB1cGRhdGUgdGhlIGNhbmRpZGF0ZXMgZm9yIHRoaXMgb3JpZ2luYXRvciAqLworCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpIHsKKwkJb3JpZ19ub2RlLT5ib25kLmNhbmRpZGF0ZXMgPSAwOworCQlyZXR1cm47CisJfQorCisJYmVzdF90cSA9IG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmc7CisKKwkvKiB1cGRhdGUgYm9uZC5jYW5kaWRhdGVzICovCisKKwljYW5kaWRhdGVzID0gMDsKKworCS8qIG1hcmsgb3RoZXIgbm9kZXMgd2hpY2ggYWxzbyByZWNlaXZlZCAiUFJJTUFSSUVTIEZJUlNUIEhPUCIgcGFja2V0cworCSAqIGFzICJib25kaW5nIHBhcnRuZXIiICovCisKKwkvKiBmaXJzdCwgemVybyB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKwkJdG1wX25laWdoX25vZGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBOVUxMOworCX0KKworCWZpcnN0X2NhbmRpZGF0ZSA9IE5VTEw7CisJbGFzdF9jYW5kaWRhdGUgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKworCQkvKiBvbmx5IGNvbnNpZGVyIGlmIGl0IGhhcyB0aGUgc2FtZSBwcmltYXJ5IGFkZHJlc3MgLi4uICAqLworCQlpZiAobWVtY21wKG9yaWdfbm9kZS0+b3JpZywKKwkJCQl0bXBfbmVpZ2hfbm9kZS0+b3JpZ19ub2RlLT5wcmltYXJ5X2FkZHIsCisJCQkJRVRIX0FMRU4pICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiAuLi4gYW5kIGlzIGdvb2QgZW5vdWdoIHRvIGJlIGNvbnNpZGVyZWQgKi8KKwkJaWYgKHRtcF9uZWlnaF9ub2RlLT50cV9hdmcgPCBiZXN0X3RxIC0gQk9ORElOR19UUV9USFJFU0hPTEQpCisJCQljb250aW51ZTsKKworCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGFub3RoZXIgY2FuZGlkYXRlIHdpdGggdGhlIHNhbWUKKwkJICogbWFjIGFkZHJlc3Mgb3IgaW50ZXJmYWNlLiBJZiB3ZSBkbywgd2Ugd29uJ3QKKwkJICogc2VsZWN0IHRoaXMgY2FuZGlkYXRlIGJlY2F1c2Ugb2YgcG9zc2libGUgaW50ZXJmZXJlbmNlLiAqLworCisJCWludGVyZmVyZW5jZV9jYW5kaWRhdGUgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlMiwKKwkJCQkmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisKKwkJCWlmICh0bXBfbmVpZ2hfbm9kZTIgPT0gdG1wX25laWdoX25vZGUpCisJCQkJY29udGludWU7CisKKwkJCS8qIHdlIG9ubHkgY2FyZSBpZiB0aGUgb3RoZXIgY2FuZGlkYXRlIGlzIGV2ZW4KKwkJCSAqIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlLiAqLworCQkJaWYgKHRtcF9uZWlnaF9ub2RlMi0+bmV4dF9ib25kX2NhbmRpZGF0ZSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCisKKwkJCWlmICgodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09CisJCQkJdG1wX25laWdoX25vZGUyLT5pZl9pbmNvbWluZykKKwkJCQl8fCAobWVtY21wKHRtcF9uZWlnaF9ub2RlLT5hZGRyLAorCQkJCXRtcF9uZWlnaF9ub2RlMi0+YWRkciwgRVRIX0FMRU4pID09IDApKSB7CisKKwkJCQlpbnRlcmZlcmVuY2VfY2FuZGlkYXRlID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQkvKiBkb24ndCBjYXJlIGZ1cnRoZXIgaWYgaXQgaXMgYW4gaW50ZXJmZXJlbmNlIGNhbmRpZGF0ZSAqLworCQlpZiAoaW50ZXJmZXJlbmNlX2NhbmRpZGF0ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmaXJzdF9jYW5kaWRhdGUgPT0gTlVMTCkgeworCQkJZmlyc3RfY2FuZGlkYXRlID0gdG1wX25laWdoX25vZGU7CisJCQl0bXBfbmVpZ2hfbm9kZS0+bmV4dF9ib25kX2NhbmRpZGF0ZSA9IGZpcnN0X2NhbmRpZGF0ZTsKKwkJfSBlbHNlCisJCQl0bXBfbmVpZ2hfbm9kZS0+bmV4dF9ib25kX2NhbmRpZGF0ZSA9IGxhc3RfY2FuZGlkYXRlOworCisJCWxhc3RfY2FuZGlkYXRlID0gdG1wX25laWdoX25vZGU7CisKKwkJY2FuZGlkYXRlcysrOworCX0KKworCWlmIChjYW5kaWRhdGVzID4gMCkgeworCQlmaXJzdF9jYW5kaWRhdGUtPm5leHRfYm9uZF9jYW5kaWRhdGUgPSBsYXN0X2NhbmRpZGF0ZTsKKwkJb3JpZ19ub2RlLT5ib25kLnNlbGVjdGVkID0gZmlyc3RfY2FuZGlkYXRlOworCX0KKworCW9yaWdfbm9kZS0+Ym9uZC5jYW5kaWRhdGVzID0gY2FuZGlkYXRlczsKK30KKwogdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAogCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAogCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAogCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQogeworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsICpvcmlnX25vZGU7CiAJY2hhciBoYXNfZGlyZWN0bGlua19mbGFnOwogCWNoYXIgaXNfbXlfYWRkciA9IDAsIGlzX215X29yaWcgPSAwLCBpc19teV9vbGRvcmlnID0gMDsKIAljaGFyIGlzX2Jyb2FkY2FzdCA9IDAsIGlzX2JpZGlyZWN0aW9uYWwsIGlzX3NpbmdsZV9ob3BfbmVpZ2g7CiAJY2hhciBpc19kdXBsaWNhdGU7Ci0JdW5zaWduZWQgc2hvcnQgaWZfaW5jb21pbmdfc2Vxbm87CisJdWludDMyX3QgaWZfaW5jb21pbmdfc2Vxbm87CiAKIAkvKiBTaWxlbnRseSBkcm9wIHdoZW4gdGhlIGJhdG1hbiBwYWNrZXQgaXMgYWN0dWFsbHkgbm90IGEKIAkgKiBjb3JyZWN0IHBhY2tldC4KQEAgLTQzMSw3ICs1NTMsOCBAQAogCWlzX3NpbmdsZV9ob3BfbmVpZ2ggPSAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsCiAJCQkJCSAgICBiYXRtYW5fcGFja2V0LT5vcmlnKSA/IDEgOiAwKTsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwgIlJlY2VpdmVkIEJBVE1BTiBwYWNrZXQgdmlhIE5COiAlcE0sIElGOiAlcyBbJXNdICIKKwliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAorCQkiUmVjZWl2ZWQgQkFUTUFOIHBhY2tldCB2aWEgTkI6ICVwTSwgSUY6ICVzIFslc10gIgogCQkiKGZyb20gT0c6ICVwTSwgdmlhIHByZXYgT0c6ICVwTSwgc2Vxbm8gJWQsIHRxICVkLCAiCiAJCSJUVEwgJWQsIFYgJWQsIElERiAlZClcbiIsCiAJCWV0aGhkci0+aF9zb3VyY2UsIGlmX2luY29taW5nLT5kZXYsIGlmX2luY29taW5nLT5hZGRyX3N0ciwKQEAgLTQ1NSwxOSArNTc4LDE5IEBACiAJCQkJIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpKQogCQkJaXNfbXlfb2xkb3JpZyA9IDE7CiAKLQkJaWYgKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLCBicm9hZGNhc3RBZGRyKSkKKwkJaWYgKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLCBicm9hZGNhc3RfYWRkcikpCiAJCQlpc19icm9hZGNhc3QgPSAxOwogCX0KIAogCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSlcbiIsCiAJCQliYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChpc19teV9hZGRyKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogcmVjZWl2ZWQgbXkgb3duIGJyb2FkY2FzdCAoc2VuZGVyOiAlcE0iCiAJCQkiKVxuIiwKIAkJCWV0aGhkci0+aF9zb3VyY2UpOwpAQCAtNDc1LDcgKzU5OCw3IEBACiAJfQogCiAJaWYgKGlzX2Jyb2FkY2FzdCkgewotCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogIgorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAiRHJvcCBwYWNrZXQ6ICIKIAkJImlnbm9yaW5nIGFsbCBwYWNrZXRzIHdpdGggYnJvYWRjYXN0IHNvdXJjZSBhZGRyIChzZW5kZXI6ICVwTSIKIAkJIilcbiIsIGV0aGhkci0+aF9zb3VyY2UpOwogCQlyZXR1cm47CkBAIC01MDUsMTMgKzYyOCwxMyBAQAogCQkJCWJpdF9wYWNrZXRfY291bnQod29yZCk7CiAJCX0KIAotCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogIgorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAiRHJvcCBwYWNrZXQ6ICIKIAkJCSJvcmlnaW5hdG9yIHBhY2tldCBmcm9tIG15c2VsZiAodmlhIG5laWdoYm9yKVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfbXlfb2xkb3JpZykgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBlY2hvcyAoc2VuZGVyOiAiCiAJCQkiJXBNKVxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKQEAgLTUyNCwxNCArNjQ3LDE0IEBACiAJaXNfZHVwbGljYXRlID0gY291bnRfcmVhbF9wYWNrZXRzKGV0aGhkciwgYmF0bWFuX3BhY2tldCwgaWZfaW5jb21pbmcpOwogCiAJaWYgKGlzX2R1cGxpY2F0ZSA9PSAtMSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiRHJvcCBwYWNrZXQ6IHBhY2tldCB3aXRoaW4gc2Vxbm8gcHJvdGVjdGlvbiB0aW1lICIKIAkJCSIoc2VuZGVyOiAlcE0pXG4iLCBldGhoZHItPmhfc291cmNlKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChiYXRtYW5fcGFja2V0LT50cSA9PSAwKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogb3JpZ2luYXRvciBwYWNrZXQgd2l0aCB0cSBlcXVhbCAwXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU0NCw3ICs2NjcsNyBAQAogCSAgICAhKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5vcmlnLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCiAJICAgIChjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsCiAJCQkgIG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGUtPnJvdXRlci0+YWRkcikpKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHJlYnJvYWRjYXN0IHBhY2tldHMgdGhhdCAiCiAJCQkibWF5IG1ha2UgbWUgbG9vcCAoc2VuZGVyOiAlcE0pXG4iLCBldGhoZHItPmhfc291cmNlKTsKIAkJcmV0dXJuOwpAQCAtNTYxLDExICs2ODQsMTIgQEAKIAkgKiBkb24ndCByb3V0ZSB0b3dhcmRzIGl0ICovCiAJaWYgKCFpc19zaW5nbGVfaG9wX25laWdoICYmCiAJICAgIChvcmlnX25laWdoX25vZGUtPnJvdXRlciA9PSBOVUxMKSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogT0dNIHZpYSB1bmtub3duIG5laWdoYm9yIVxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciFcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaXNfYmlkaXJlY3Rpb25hbCA9IGlzQmlkaXJlY3Rpb25hbE5laWdoKG9yaWdfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLAorCWlzX2JpZGlyZWN0aW9uYWwgPSBpc19iaWRpcmVjdGlvbmFsX25laWdoKG9yaWdfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLAogCQkJCQkJYmF0bWFuX3BhY2tldCwgaWZfaW5jb21pbmcpOwogCiAJLyogdXBkYXRlIHJhbmtpbmcgaWYgaXQgaXMgbm90IGEgZHVwbGljYXRlIG9yIGhhcyB0aGUgc2FtZQpAQCAtNTc3LDYgKzcwMSwxMCBAQAogCQl1cGRhdGVfb3JpZyhvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKIAkJCSAgICBpZl9pbmNvbWluZywgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbiwgaXNfZHVwbGljYXRlKTsKIAorCW1hcmtfYm9uZGluZ19hZGRyZXNzKGJhdF9wcml2LCBvcmlnX25vZGUsCisJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwgYmF0bWFuX3BhY2tldCk7CisJdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhiYXRfcHJpdiwgb3JpZ19ub2RlKTsKKwogCS8qIGlzIHNpbmdsZSBob3AgKGRpcmVjdCkgbmVpZ2hib3IgKi8KIAlpZiAoaXNfc2luZ2xlX2hvcF9uZWlnaCkgewogCkBAIC01ODQsMjQgKzcxMiwyNSBAQAogCQlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKIAkJCQkJMSwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CiAKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRm9yd2FyZGluZyBwYWNrZXQ6ICIKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgIkZvcndhcmRpbmcgcGFja2V0OiAiCiAJCQkicmVicm9hZGNhc3QgbmVpZ2hib3IgcGFja2V0IHdpdGggZGlyZWN0IGxpbmsgZmxhZ1xuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBtdWx0aWhvcCBvcmlnaW5hdG9yICovCiAJaWYgKCFpc19iaWRpcmVjdGlvbmFsKSB7Ci0JCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKIAkJCSJEcm9wIHBhY2tldDogbm90IHJlY2VpdmVkIHZpYSBiaWRpcmVjdGlvbmFsIGxpbmtcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGlzX2R1cGxpY2F0ZSkgewotCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogZHVwbGljYXRlIHBhY2tldCByZWNlaXZlZFxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCQkiRHJvcCBwYWNrZXQ6IGR1cGxpY2F0ZSBwYWNrZXQgcmVjZWl2ZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JYmF0X2RiZyhEQkdfQkFUTUFOLAorCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCSJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3Qgb3JpZ2luYXRvciBwYWNrZXRcbiIpOwogCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAogCQkJCTAsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOwpAQCAtNjUyLDEwICs3ODEsMTAgQEAKIAlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgcmVjdl9teV9pY21wX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCByZWN2X215X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBpY21wX2xlbikKIHsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0Jc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OwogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29sZDsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CkBAIC02NjMsMTIgKzc5MiwxMiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKIAotCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKXNrYi0+ZGF0YTsKKwlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CiAJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCiAJLyogYWRkIGRhdGEgdG8gZGV2aWNlIHF1ZXVlICovCiAJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKLQkJYmF0X2RldmljZV9yZWNlaXZlX3BhY2tldChpY21wX3BhY2tldCk7CisJCWJhdF9zb2NrZXRfcmVjZWl2ZV9wYWNrZXQoaWNtcF9wYWNrZXQsIGljbXBfbGVuKTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIApAQCAtNjkwLDEzICs4MTksMTIgQEAKIAogCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwogCQlza2Jfb2xkID0gTlVMTDsKLQkJaWYgKCFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSkpIHsKKwkJaWYgKCFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBpY21wX2xlbikpIHsKIAkJCXNrYl9vbGQgPSBza2I7CiAJCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFza2IpCiAJCQkJcmV0dXJuIE5FVF9SWF9EUk9QOwotCi0JCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKilza2ItPmRhdGE7CisJCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKilza2ItPmRhdGE7CiAJCQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CiAJCQlrZnJlZV9za2Ioc2tiX29sZCk7CiAJCX0KQEAgLTcxNSw3ICs4NDMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcmVjdl9pY21wX3R0bF9leGNlZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCByZWN2X2ljbXBfdHRsX2V4Y2VlZGVkKHN0cnVjdCBza19idWZmICpza2IsIHNpemVfdCBpY21wX2xlbikKIHsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKQEAgLTczMSwxMCArODU5LDkgQEAKIAogCS8qIHNlbmQgVFRMIGV4Y2VlZGVkIGlmIHBhY2tldCBpcyBhbiBlY2hvIHJlcXVlc3QgKHRyYWNlcm91dGUpICovCiAJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjoiCi0JCSAgICAgICAiV2FybmluZyAtIGNhbid0IGZvcndhcmQgaWNtcCBwYWNrZXQgZnJvbSAlcE0gdG8gJXBNOiAiCi0JCSAgICAgICAidHRsIGV4Y2VlZGVkXG4iLAotCQkgICAgICAgaWNtcF9wYWNrZXQtPm9yaWcsIGljbXBfcGFja2V0LT5kc3QpOworCQlwcl93YXJuaW5nKCJXYXJuaW5nIC0gY2FuJ3QgZm9yd2FyZCBpY21wIHBhY2tldCBmcm9tICVwTSB0byAiCisJCQkgICAiJXBNOiB0dGwgZXhjZWVkZWRcbiIsIGljbXBfcGFja2V0LT5vcmlnLAorCQkJICAgaWNtcF9wYWNrZXQtPmRzdCk7CiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKQEAgLTc1NCw3ICs4ODEsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCiAJCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCi0JCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgaWNtcF9sZW4pKSB7CiAJCQlza2Jfb2xkID0gc2tiOwogCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghc2tiKQpAQCAtNzgxLDcgKzkwOCw3IEBACiAKIGludCByZWN2X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIgKmljbXBfcGFja2V0OwogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9vbGQ7CkBAIC03OTEsNiArOTE4LDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOwogCisJLyoqCisJICogd2UgdHJ1bmNhdGUgYWxsIGluY29taW5nIGljbXAgcGFja2V0cyBpZiB0aGV5IGRvbid0IG1hdGNoIG91ciBzaXplCisJICovCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPj0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycikpCisJCWhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldF9ycik7CisKIAkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KIAlpZiAoc2tiX2hlYWRsZW4oc2tiKSA8IGhkcl9zaXplKQogCQlyZXR1cm4gTkVUX1JYX0RST1A7CkBAIC04MDksMTUgKzk0MiwyMyBAQAogCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopc2tiLT5kYXRhOworCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYi0+ZGF0YTsKKworCS8qIGFkZCByZWNvcmQgcm91dGUgaW5mb3JtYXRpb24gaWYgbm90IGZ1bGwgKi8KKwlpZiAoKGhkcl9zaXplID09IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXRfcnIpKSAmJgorCSAgICAoaWNtcF9wYWNrZXQtPnJyX2N1ciA8IEJBVF9SUl9MRU4pKSB7CisJCW1lbWNweSgmKGljbXBfcGFja2V0LT5ycltpY21wX3BhY2tldC0+cnJfY3VyXSksCisJCQlldGhoZHItPmhfZGVzdCwgRVRIX0FMRU4pOworCQlpY21wX3BhY2tldC0+cnJfY3VyKys7CisJfQogCiAJLyogcGFja2V0IGZvciBtZSAqLwogCWlmIChpc19teV9tYWMoaWNtcF9wYWNrZXQtPmRzdCkpCi0JCXJldHVybiByZWN2X215X2ljbXBfcGFja2V0KHNrYik7CisJCXJldHVybiByZWN2X215X2ljbXBfcGFja2V0KHNrYiwgaGRyX3NpemUpOwogCiAJLyogVFRMIGV4Y2VlZGVkICovCiAJaWYgKGljbXBfcGFja2V0LT50dGwgPCAyKQotCQlyZXR1cm4gcmVjdl9pY21wX3R0bF9leGNlZWRlZChza2IpOworCQlyZXR1cm4gcmVjdl9pY21wX3R0bF9leGNlZWRlZChza2IsIGhkcl9zaXplKTsKIAogCXJldCA9IE5FVF9SWF9EUk9QOwogCkBAIC04MzYsMTIgKzk3NywxMiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCiAJCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCi0JCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgaGRyX3NpemUpKSB7CiAJCQlza2Jfb2xkID0gc2tiOwogCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghc2tiKQogCQkJCXJldHVybiBORVRfUlhfRFJPUDsKLQkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKXNrYi0+ZGF0YTsKKwkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldF9yciAqKXNrYi0+ZGF0YTsKIAkJCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKIAkJCWtmcmVlX3NrYihza2Jfb2xkKTsKIAkJfQpAQCAtODU5LDE2ICsxMDAwLDEwOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCisvKiBmaW5kIGEgc3VpdGFibGUgcm91dGVyIGZvciB0aGlzIG9yaWdpbmF0b3IsIGFuZCB1c2UKKyAqIGJvbmRpbmcgaWYgcG9zc2libGUuICovCitzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmluZF9yb3V0ZXIoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQlzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKQoreworCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCXN0cnVjdCBvcmlnX25vZGUgKnByaW1hcnlfb3JpZ19ub2RlOworCXN0cnVjdCBvcmlnX25vZGUgKnJvdXRlcl9vcmlnOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXIsICpmaXJzdF9jYW5kaWRhdGUsICpiZXN0X3JvdXRlcjsKKwlzdGF0aWMgdWludDhfdCB6ZXJvX21hY1tFVEhfQUxFTl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CisJaW50IGJvbmRpbmdfZW5hYmxlZDsKKworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghb3JpZ19ub2RlLT5yb3V0ZXIpCisJCXJldHVybiBOVUxMOworCisJLyogd2l0aG91dCBib25kaW5nLCB0aGUgZmlyc3Qgbm9kZSBzaG91bGQKKwkgKiBhbHdheXMgY2hvb3NlIHRoZSBkZWZhdWx0IHJvdXRlci4gKi8KKworCWJvbmRpbmdfZW5hYmxlZCA9IGF0b21pY19yZWFkKCZiYXRfcHJpdi0+Ym9uZGluZ19lbmFibGVkKTsKKwlpZiAoIWJvbmRpbmdfZW5hYmxlZCAmJiAocmVjdl9pZiA9PSBOVUxMKSkKKwkJCXJldHVybiBvcmlnX25vZGUtPnJvdXRlcjsKKworCXJvdXRlcl9vcmlnID0gb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZTsKKworCS8qIGlmIHdlIGhhdmUgc29tZXRoaW5nIGluIHRoZSBwcmltYXJ5X2FkZHIsIHdlIGNhbiBzZWFyY2gKKwkgKiBmb3IgYSBwb3RlbnRpYWwgYm9uZGluZyBjYW5kaWRhdGUuICovCisJaWYgKG1lbWNtcChyb3V0ZXJfb3JpZy0+cHJpbWFyeV9hZGRyLCB6ZXJvX21hYywgRVRIX0FMRU4pID09IDApCisJCXJldHVybiBvcmlnX25vZGUtPnJvdXRlcjsKKworCS8qIGZpbmQgdGhlIG9yaWdfbm9kZSB3aGljaCBoYXMgdGhlIHByaW1hcnkgaW50ZXJmYWNlLiBtaWdodAorCSAqIGV2ZW4gYmUgdGhlIHNhbWUgYXMgb3VyIHJvdXRlcl9vcmlnIGluIG1hbnkgY2FzZXMgKi8KKworCWlmIChtZW1jbXAocm91dGVyX29yaWctPnByaW1hcnlfYWRkciwKKwkJCQlyb3V0ZXJfb3JpZy0+b3JpZywgRVRIX0FMRU4pID09IDApIHsKKwkJcHJpbWFyeV9vcmlnX25vZGUgPSByb3V0ZXJfb3JpZzsKKwl9IGVsc2UgeworCQlwcmltYXJ5X29yaWdfbm9kZSA9IGhhc2hfZmluZChvcmlnX2hhc2gsCisJCQkJCQlyb3V0ZXJfb3JpZy0+cHJpbWFyeV9hZGRyKTsKKwkJaWYgKCFwcmltYXJ5X29yaWdfbm9kZSkKKwkJCXJldHVybiBvcmlnX25vZGUtPnJvdXRlcjsKKwl9CisKKwkvKiB3aXRoIGxlc3MgdGhhbiAyIGNhbmRpZGF0ZXMsIHdlIGNhbid0IGRvIGFueQorCSAqIGJvbmRpbmcgYW5kIHByZWZlciB0aGUgb3JpZ2luYWwgcm91dGVyLiAqLworCisJaWYgKHByaW1hcnlfb3JpZ19ub2RlLT5ib25kLmNhbmRpZGF0ZXMgPCAyKQorCQlyZXR1cm4gb3JpZ19ub2RlLT5yb3V0ZXI7CisKKworCS8qIGFsbCBub2RlcyBiZXR3ZWVuIHNob3VsZCBjaG9vc2UgYSBjYW5kaWRhdGUgd2hpY2gKKwkgKiBpcyBpcyBub3Qgb24gdGhlIGludGVyZmFjZSB3aGVyZSB0aGUgcGFja2V0IGNhbWUKKwkgKiBpbi4gKi8KKwlmaXJzdF9jYW5kaWRhdGUgPSBwcmltYXJ5X29yaWdfbm9kZS0+Ym9uZC5zZWxlY3RlZDsKKwlyb3V0ZXIgPSBmaXJzdF9jYW5kaWRhdGU7CisKKwlpZiAoYm9uZGluZ19lbmFibGVkKSB7CisJCS8qIGluIHRoZSBib25kaW5nIGNhc2UsIHNlbmQgdGhlIHBhY2tldHMgaW4gYSByb3VuZAorCQkgKiByb2JpbiBmYXNoaW9uIG92ZXIgdGhlIHJlbWFpbmluZyBpbnRlcmZhY2VzLiAqLworCQlkbyB7CisJCQkvKiByZWN2X2lmID09IE5VTEwgb24gdGhlIGZpcnN0IG5vZGUuICovCisJCQlpZiAocm91dGVyLT5pZl9pbmNvbWluZyAhPSByZWN2X2lmKQorCQkJCWJyZWFrOworCisJCQlyb3V0ZXIgPSByb3V0ZXItPm5leHRfYm9uZF9jYW5kaWRhdGU7CisJCX0gd2hpbGUgKHJvdXRlciAhPSBmaXJzdF9jYW5kaWRhdGUpOworCisJCXByaW1hcnlfb3JpZ19ub2RlLT5ib25kLnNlbGVjdGVkID0gcm91dGVyLT5uZXh0X2JvbmRfY2FuZGlkYXRlOworCisJfSBlbHNlIHsKKwkJLyogaWYgYm9uZGluZyBpcyBkaXNhYmxlZCwgdXNlIHRoZSBiZXN0IG9mIHRoZQorCQkgKiByZW1haW5pbmcgY2FuZGlkYXRlcyB3aGljaCBhcmUgbm90IHVzaW5nCisJCSAqIHRoaXMgaW50ZXJmYWNlLiAqLworCQliZXN0X3JvdXRlciA9IGZpcnN0X2NhbmRpZGF0ZTsKKworCQlkbyB7CisJCQkvKiByZWN2X2lmID09IE5VTEwgb24gdGhlIGZpcnN0IG5vZGUuICovCisJCQlpZiAoKHJvdXRlci0+aWZfaW5jb21pbmcgIT0gcmVjdl9pZikgJiYKKwkJCQkocm91dGVyLT50cV9hdmcgPiBiZXN0X3JvdXRlci0+dHFfYXZnKSkKKwkJCQkJYmVzdF9yb3V0ZXIgPSByb3V0ZXI7CisKKwkJCXJvdXRlciA9IHJvdXRlci0+bmV4dF9ib25kX2NhbmRpZGF0ZTsKKwkJfSB3aGlsZSAocm91dGVyICE9IGZpcnN0X2NhbmRpZGF0ZSk7CisKKwkJcm91dGVyID0gYmVzdF9yb3V0ZXI7CisJfQorCisJcmV0dXJuIHJvdXRlcjsKK30KKworaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZikKIHsKIAlzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKnVuaWNhc3RfcGFja2V0OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyOwogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9vbGQ7CiAJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKIAlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KTsKLQlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KQEAgLTg5OSw0OSArMTEzMyw1MCBAQAogCiAJLyogVFRMIGV4Y2VlZGVkICovCiAJaWYgKHVuaWNhc3RfcGFja2V0LT50dGwgPCAyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImJhdG1hbi1hZHY6V2FybmluZyAtICIKLQkJICAgICAgICJjYW4ndCBmb3J3YXJkIHVuaWNhc3QgcGFja2V0IGZyb20gJXBNIHRvICVwTTogIgotCQkgICAgICAgInR0bCBleGNlZWRlZFxuIiwKLQkJICAgICAgIGV0aGhkci0+aF9zb3VyY2UsIHVuaWNhc3RfcGFja2V0LT5kZXN0KTsKKwkJcHJfd2FybmluZygiV2FybmluZyAtIGNhbid0IGZvcndhcmQgdW5pY2FzdCBwYWNrZXQgZnJvbSAlcE0gdG8gIgorCQkJICAgIiVwTTogdHRsIGV4Y2VlZGVkXG4iLCBldGhoZHItPmhfc291cmNlLAorCQkJICAgdW5pY2FzdF9wYWNrZXQtPmRlc3QpOwogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAJfQogCi0JcmV0ID0gTkVUX1JYX0RST1A7CiAJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKIAkJICAgICBoYXNoX2ZpbmQob3JpZ19oYXNoLCB1bmljYXN0X3BhY2tldC0+ZGVzdCkpOwogCi0JaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYKLQkgICAgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7CisJcm91dGVyID0gZmluZF9yb3V0ZXIob3JpZ19ub2RlLCByZWN2X2lmKTsKIAotCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQotCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCi0JCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+cm91dGVyLT5pZl9pbmNvbWluZzsKLQkJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisJaWYgKCFyb3V0ZXIpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KIAotCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLwotCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSkgewotCQkJc2tiX29sZCA9IHNrYjsKLQkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXNrYikKLQkJCQlyZXR1cm4gTkVUX1JYX0RST1A7Ci0JCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7Ci0JCQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7Ci0JCQlrZnJlZV9za2Ioc2tiX29sZCk7Ci0JCX0KLQkJLyogZGVjcmVtZW50IHR0bCAqLwotCQl1bmljYXN0X3BhY2tldC0+dHRsLS07CisJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCiAKLQkJLyogcm91dGUgaXQgKi8KLQkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKLQkJcmV0ID0gTkVUX1JYX1NVQ0NFU1M7CisJYmF0bWFuX2lmID0gcm91dGVyLT5pZl9pbmNvbWluZzsKKwltZW1jcHkoZHN0YWRkciwgcm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CiAKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldDsKKwkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCkpKSB7CisJCXNrYl9vbGQgPSBza2I7CisJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKikgc2tiLT5kYXRhOworCQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisJCWtmcmVlX3NrYihza2Jfb2xkKTsKKwl9CisKKwkvKiBkZWNyZW1lbnQgdHRsICovCisJdW5pY2FzdF9wYWNrZXQtPnR0bC0tOworCisJLyogcm91dGUgaXQgKi8KKwlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCisJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogfQogCiBpbnQgcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTk1MCw3ICsxMTg1LDcgQEAKIAlzdHJ1Y3QgYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KTsKLQlpbnQxNl90IHNlcV9kaWZmOworCWludDMyX3Qgc2VxX2RpZmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLwpAQCAtOTc3LDYgKzEyMTIsOSBAQAogCWlmIChpc19teV9tYWMoYmNhc3RfcGFja2V0LT5vcmlnKSkKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCisJaWYgKGJjYXN0X3BhY2tldC0+dHRsIDwgMikKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCiAJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgYmNhc3RfcGFja2V0LT5vcmlnKSk7CkBAIC05ODksMTIgKzEyMjcsMTIgQEAKIAkvKiBjaGVjayB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgYSBkdXBsaWNhdGUgKi8KIAlpZiAoZ2V0X2JpdF9zdGF0dXMob3JpZ19ub2RlLT5iY2FzdF9iaXRzLAogCQkJICAgb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vLAotCQkJICAgbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubykpKSB7CisJCQkgICBudG9obChiY2FzdF9wYWNrZXQtPnNlcW5vKSkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIAotCXNlcV9kaWZmID0gbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubykgLSBvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm87CisJc2VxX2RpZmYgPSBudG9obChiY2FzdF9wYWNrZXQtPnNlcW5vKSAtIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubzsKIAogCS8qIGNoZWNrIHdoZXRoZXIgdGhlIHBhY2tldCBpcyBvbGQgYW5kIHRoZSBob3N0IGp1c3QgcmVzdGFydGVkLiAqLwogCWlmICh3aW5kb3dfcHJvdGVjdGVkKHNlcV9kaWZmLCAmb3JpZ19ub2RlLT5iY2FzdF9zZXFub19yZXNldCkpIHsKQEAgLTEwMDUsNyArMTI0Myw3IEBACiAJLyogbWFyayBicm9hZGNhc3QgaW4gZmxvb2QgaGlzdG9yeSwgdXBkYXRlIHdpbmRvdyBwb3NpdGlvbgogCSAqIGlmIHJlcXVpcmVkLiAqLwogCWlmIChiaXRfZ2V0X3BhY2tldChvcmlnX25vZGUtPmJjYXN0X2JpdHMsIHNlcV9kaWZmLCAxKSkKLQkJb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vID0gbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubyk7CisJCW9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubyA9IG50b2hsKGJjYXN0X3BhY2tldC0+c2Vxbm8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAkvKiByZWJyb2FkY2FzdCBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaAppbmRleCA4Mjg4ZGVjLi4zZWFjNjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5oCkBAIC0xOSw5ICsxOSwxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSAidHlwZXMuaCIKKyNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8KIAotZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHRocmVhZF93YWl0OworI2luY2x1ZGUgInR5cGVzLmgiCiAKIHZvaWQgc2xpZGVfb3duX2JjYXN0X3dpbmRvdyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOwogdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLApAQCAtMzIsOCArMzMsMTQgQEAKIAkJCQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKIAkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbik7CiBpbnQgcmVjdl9pY21wX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpOworaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJhdG1hbl9pZiAqcmVjdl9pZik7CiBpbnQgcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcmVjdl92aXNfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHJlY3ZfYmF0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7CitzdHJ1Y3QgbmVpZ2hfbm9kZSAqZmluZF9yb3V0ZXIoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQlzdHJ1Y3QgYmF0bWFuX2lmICpyZWN2X2lmKTsKK3ZvaWQgdXBkYXRlX2JvbmRpbmdfY2FuZGlkYXRlcyhzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2LAorCQkJICAgICAgIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUk9VVElOR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCmluZGV4IGFjNjllZDguLjA1NWVkZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKQEAgLTI5LDYgKzI5LDEwIEBACiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKIAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KKworc3RhdGljIHZvaWQgc2VuZF9vdXRzdGFuZGluZ19iY2FzdF9wYWNrZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogLyogYXBwbHkgaG9wIHBlbmFsdHkgZm9yIGEgbm9ybWFsIGxpbmsgKi8KIHN0YXRpYyB1aW50OF90IGhvcF9wZW5hbHR5KGNvbnN0IHVpbnQ4X3QgdHEpCiB7CkBAIC0zOCwxNSArNDIsMTUgQEAKIC8qIHdoZW4gZG8gd2Ugc2NoZWR1bGUgb3VyIG93biBwYWNrZXQgdG8gYmUgc2VudCAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb3duX3NlbmRfdGltZShzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2KQogewotCXJldHVybiBqaWZmaWVzICsKLQkJKCgoYXRvbWljX3JlYWQoJmJhdF9wcml2LT5vcmlnX2ludGVydmFsKSAtIEpJVFRFUiArCi0JCSAgIChyYW5kb20zMigpICUgMipKSVRURVIpKSAqIEhaKSAvIDEwMDApOworCXJldHVybiBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygKKwkJICAgYXRvbWljX3JlYWQoJmJhdF9wcml2LT5vcmlnX2ludGVydmFsKSAtCisJCSAgIEpJVFRFUiArIChyYW5kb20zMigpICUgMipKSVRURVIpKTsKIH0KIAogLyogd2hlbiBkbyB3ZSBzY2hlZHVsZSBhIGZvcndhcmRlZCBwYWNrZXQgdG8gYmUgc2VudCAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZm9yd2FyZF9zZW5kX3RpbWUoc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdikKIHsKLQlyZXR1cm4gamlmZmllcyArICgoKHJhbmRvbTMyKCkgJSAoSklUVEVSLzIpKSAqIEhaKSAvIDEwMDApOworCXJldHVybiBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhyYW5kb20zMigpICUgKEpJVFRFUi8yKSk7CiB9CiAKIC8qIHNlbmQgb3V0IGFuIGFscmVhZHkgcHJlcGFyZWQgcGFja2V0IHRvIHRoZSBnaXZlbiBhZGRyZXNzIHZpYSB0aGUKQEAgLTY0LDEwICs2OCw4IEBACiAJCWdvdG8gc2VuZF9za2JfZXJyOwogCiAJaWYgKCEoYmF0bWFuX2lmLT5uZXRfZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImJhdG1hbi1hZHY6SW50ZXJmYWNlICVzICIKLQkJICAgICAgICJpcyBub3QgdXAgLSBjYW4ndCBzZW5kIHBhY2tldCB2aWEgdGhhdCBpbnRlcmZhY2UhXG4iLAotCQkgICAgICAgYmF0bWFuX2lmLT5kZXYpOworCQlwcl93YXJuaW5nKCJJbnRlcmZhY2UgJXMgaXMgbm90IHVwIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgdmlhICIKKwkJCSAgICJ0aGF0IGludGVyZmFjZSFcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAkJZ290byBzZW5kX3NrYl9lcnI7CiAJfQogCkBAIC05MCw5ICs5MiwxMiBAQAogCiAJLyogZGV2X3F1ZXVlX3htaXQoKSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IG9uIGVycm9yLgkgSG93ZXZlciBvbgogCSAqIGNvbmdlc3Rpb24gYW5kIHRyYWZmaWMgc2hhcGluZywgaXQgZHJvcHMgYW5kIHJldHVybnMgTkVUX1hNSVRfRFJPUAotCSAqICh3aGljaCBpcyA+IDApLiBUaGlzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCisJICogKHdoaWNoIGlzID4gMCkuIFRoaXMgd2lsbCBub3QgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4KKwkgKiBBbHNvLCBpZiBuZXRmaWx0ZXIvZWJ0YWJsZXMgd2FudHMgdG8gYmxvY2sgb3V0Z29pbmcgYmF0bWFuCisJICogcGFja2V0cyB0aGVuIGdpdmluZyB0aGVtIGEgY2hhbmNlIHRvIGRvIHNvIGhlcmUgKi8KIAotCXJldHVybiBkZXZfcXVldWVfeG1pdChza2IpOworCXJldHVybiBORl9IT09LKFBGX0JSSURHRSwgTkZfQlJfTE9DQUxfT1VULCBza2IsIE5VTEwsIHNrYi0+ZGV2LAorCQkgICAgICAgZGV2X3F1ZXVlX3htaXQpOwogc2VuZF9za2JfZXJyOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORVRfWE1JVF9EUk9QOwpAQCAtMTE5LDYgKzEyNCw4IEBACiBzdGF0aWMgdm9pZCBzZW5kX3BhY2tldF90b19pZihzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LAogCQkJICAgICAgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQogeworCS8qIEZJWE1FOiBlYWNoIGJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAljaGFyICpmd2Rfc3RyOwogCXVpbnQ4X3QgcGFja2V0X251bTsKIAlpbnQxNl90IGJ1ZmZfcG9zOwpAQCAtMTQ4LDExICsxNTUsMTEgQEAKIAkJZndkX3N0ciA9IChwYWNrZXRfbnVtID4gMCA/ICJGb3J3YXJkaW5nIiA6IChmb3J3X3BhY2tldC0+b3duID8KIAkJCQkJCQkgICAgIlNlbmRpbmcgb3duIiA6CiAJCQkJCQkJICAgICJGb3J3YXJkaW5nIikpOwotCQliYXRfZGJnKERCR19CQVRNQU4sCisJCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkiJXMgJXNwYWNrZXQgKG9yaWdpbmF0b3IgJXBNLCBzZXFubyAlZCwgVFEgJWQsIFRUTCAlZCwiCiAJCQkiIElERiAlcykgb24gaW50ZXJmYWNlICVzIFslc11cbiIsCiAJCQlmd2Rfc3RyLCAocGFja2V0X251bSA+IDAgPyAiYWdncmVnYXRlZCAiIDogIiIpLAotCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaHMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAorCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaGwoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAogCQkJYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwKIAkJCShiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPwogCQkJICJvbiIgOiAib2ZmIiksCkBAIC0xNjcsMjAgKzE3NCwyMiBAQAogCiAJc2VuZF9yYXdfcGFja2V0KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwKIAkJCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuLAotCQkJYmF0bWFuX2lmLCBicm9hZGNhc3RBZGRyKTsKKwkJCWJhdG1hbl9pZiwgYnJvYWRjYXN0X2FkZHIpOwogfQogCiAvKiBzZW5kIGEgYmF0bWFuIHBhY2tldCAqLwogc3RhdGljIHZvaWQgc2VuZF9wYWNrZXQoc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCkKIHsKKwkvKiBGSVhNRTogZWFjaCBiYXRtYW5faWYgd2lsbCBiZSBhdHRhY2hlZCB0byBhIHNvZnRpZiAqLworCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihzb2Z0X2RldmljZSk7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0ID0KIAkJKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZik7CiAJdW5zaWduZWQgY2hhciBkaXJlY3RsaW5rID0gKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyA/IDEgOiAwKTsKIAogCWlmICghZm9yd19wYWNrZXQtPmlmX2luY29taW5nKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjogRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogIgotCQkgICAgICAgImluY29taW5nIGlmYWNlIG5vdCBzcGVjaWZpZWRcbiIpOworCQlwcl9lcnIoIkVycm9yIC0gY2FuJ3QgZm9yd2FyZCBwYWNrZXQ6IGluY29taW5nIGlmYWNlIG5vdCAiCisJCSAgICAgICAic3BlY2lmaWVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTkzLDE4ICsyMDIsMTggQEAKIAkgICAgKGZvcndfcGFja2V0LT5vd24gJiYgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+aWZfbnVtID4gMCkpKSB7CiAKIAkJLyogRklYTUU6IHdoYXQgYWJvdXQgYWdncmVnYXRlZCBwYWNrZXRzID8gKi8KLQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LAogCQkJIiVzIHBhY2tldCAob3JpZ2luYXRvciAlcE0sIHNlcW5vICVkLCBUVEwgJWQpICIKIAkJCSJvbiBpbnRlcmZhY2UgJXMgWyVzXVxuIiwKIAkJCShmb3J3X3BhY2tldC0+b3duID8gIlNlbmRpbmcgb3duIiA6ICJGb3J3YXJkaW5nIiksCi0JCQliYXRtYW5fcGFja2V0LT5vcmlnLCBudG9ocyhiYXRtYW5fcGFja2V0LT5zZXFubyksCisJCQliYXRtYW5fcGFja2V0LT5vcmlnLCBudG9obChiYXRtYW5fcGFja2V0LT5zZXFubyksCiAJCQliYXRtYW5fcGFja2V0LT50dGwsIGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+ZGV2LAogCQkJZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5hZGRyX3N0cik7CiAKIAkJc2VuZF9yYXdfcGFja2V0KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwKIAkJCQlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiwKIAkJCQlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmcsCi0JCQkJYnJvYWRjYXN0QWRkcik7CisJCQkJYnJvYWRjYXN0X2FkZHIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNzYsMTQgKzI4NSwxNCBAQAogCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKiliYXRtYW5faWYtPnBhY2tldF9idWZmOwogCiAJLyogY2hhbmdlIHNlcXVlbmNlIG51bWJlciB0byBuZXR3b3JrIG9yZGVyICovCi0JYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBodG9ucygodWludDE2X3QpYXRvbWljX3JlYWQoJmJhdG1hbl9pZi0+c2Vxbm8pKTsKKwliYXRtYW5fcGFja2V0LT5zZXFubyA9CisJCWh0b25sKCh1aW50MzJfdClhdG9taWNfcmVhZCgmYmF0bWFuX2lmLT5zZXFubykpOwogCiAJaWYgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMpCi0JCWJhdG1hbl9wYWNrZXQtPmZsYWdzID0gVklTX1NFUlZFUjsKKwkJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgfD0gVklTX1NFUlZFUjsKIAllbHNlCiAJCWJhdG1hbl9wYWNrZXQtPmZsYWdzICY9IH5WSVNfU0VSVkVSOwogCi0JLyogY291bGQgYmUgcmVhZCBieSByZWNlaXZlX2JhdF9wYWNrZXQoKSAqLwogCWF0b21pY19pbmMoJmJhdG1hbl9pZi0+c2Vxbm8pOwogCiAJc2xpZGVfb3duX2JjYXN0X3dpbmRvdyhiYXRtYW5faWYpOwpAQCAtMzA2LDcgKzMxNSw3IEBACiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dHRsIDw9IDEpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAidHRsIGV4Y2VlZGVkXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwgInR0bCBleGNlZWRlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMzNSwxMyArMzQ0LDE2IEBACiAJLyogYXBwbHkgaG9wIHBlbmFsdHkgKi8KIAliYXRtYW5fcGFja2V0LT50cSA9IGhvcF9wZW5hbHR5KGJhdG1hbl9wYWNrZXQtPnRxKTsKIAotCWJhdF9kYmcoREJHX0JBVE1BTiwgIkZvcndhcmRpbmcgcGFja2V0OiB0cV9vcmlnOiAlaSwgdHFfYXZnOiAlaSwgIgorCWJhdF9kYmcoREJHX0JBVE1BTiwgYmF0X3ByaXYsCisJCSJGb3J3YXJkaW5nIHBhY2tldDogdHFfb3JpZzogJWksIHRxX2F2ZzogJWksICIKIAkJInRxX2Zvcnc6ICVpLCB0dGxfb3JpZzogJWksIHR0bF9mb3J3OiAlaVxuIiwKIAkJaW5fdHEsIHRxX2F2ZywgYmF0bWFuX3BhY2tldC0+dHEsIGluX3R0bCAtIDEsCiAJCWJhdG1hbl9wYWNrZXQtPnR0bCk7CiAKLQliYXRtYW5fcGFja2V0LT5zZXFubyA9IGh0b25zKGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKKwliYXRtYW5fcGFja2V0LT5zZXFubyA9IGh0b25sKGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKIAorCS8qIHN3aXRjaCBvZiBwcmltYXJpZXMgZmlyc3QgaG9wIGZsYWcgd2hlbiBmb3J3YXJkaW5nICovCisJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJj0gflBSSU1BUklFU19GSVJTVF9IT1A7CiAJaWYgKGRpcmVjdGxpbmspCiAJCWJhdG1hbl9wYWNrZXQtPmZsYWdzIHw9IERJUkVDVExJTks7CiAJZWxzZQpAQCAtMzkyLDkgKzQwNCwxMiBAQAogaW50IGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQ7CisJc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OworCS8qIEZJWE1FOiBlYWNoIGJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAogCWlmICghYXRvbWljX2RlY19ub3RfemVybygmYmNhc3RfcXVldWVfbGVmdCkpIHsKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmNhc3QgcGFja2V0IHF1ZXVlIGZ1bGxcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sIGJhdF9wcml2LCAiYmNhc3QgcGFja2V0IHF1ZXVlIGZ1bGxcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQwNyw2ICs0MjIsMTAgQEAKIAlpZiAoIXNrYikKIAkJZ290byBwYWNrZXRfZnJlZTsKIAorCS8qIGFzIHdlIGhhdmUgYSBjb3B5IG5vdywgaXQgaXMgc2FmZSB0byBkZWNyZWFzZSB0aGUgVFRMICovCisJYmNhc3RfcGFja2V0ID0gKHN0cnVjdCBiY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7CisJYmNhc3RfcGFja2V0LT50dGwtLTsKKwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKIAlmb3J3X3BhY2tldC0+c2tiID0gc2tiOwpAQCAtNDI2LDcgKzQ0NSw3IEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCi12b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0KQEAgLTQ1MCw3ICs0NjksNyBAQAogCQlza2IxID0gc2tiX2NvcHkoZm9yd19wYWNrZXQtPnNrYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChza2IxKQogCQkJc2VuZF9za2JfcGFja2V0KHNrYjEsCi0JCQkJYmF0bWFuX2lmLCBicm9hZGNhc3RBZGRyKTsKKwkJCQliYXRtYW5faWYsIGJyb2FkY2FzdF9hZGRyKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKQEAgLTUwMiwxNSArNTIxLDE5IEBACiAKIHZvaWQgcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCiB7CisJLyogRklYTUU6IGVhY2ggYmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOwogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKnRtcF9ub2RlLCAqc2FmZV90bXBfbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGJhdG1hbl9pZikKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpOiAlc1xuIiwKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKCk6ICVzXG4iLAogCQkJYmF0bWFuX2lmLT5kZXYpOwogCWVsc2UKLQkJYmF0X2RiZyhEQkdfQkFUTUFOLCAicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCBiYXRfcHJpdiwKKwkJCSJwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKClcbiIpOwogCiAJLyogZnJlZSBiY2FzdCBsaXN0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmgKaW5kZXggZmVhYTJmYy4uYjY0YzYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuaApAQCAtMTksOSArMTksMTEgQEAKICAqCiAgKi8KIAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfU0VORF9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfU0VORF9IXworCiAjaW5jbHVkZSAidHlwZXMuaCIKIAotdm9pZCBzZW5kX293bl9wYWNrZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogaW50IHNlbmRfc2tiX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwKIAkJCQl1aW50OF90ICpkc3RfYWRkcik7CkBAIC0zNCw2ICszNiw3IEBACiAJCQkgICAgIHVpbnQ4X3QgZGlyZWN0bGluaywgaW50IGhuYV9idWZmX2xlbiwKIAkJCSAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfb3V0Z29pbmcpOwogaW50ICBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmF0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfU0VORF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKaW5kZXggNTFjNDBiNy4uMmVhOTdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJyb3V0aW5nLmgiCiAjaW5jbHVkZSAic2VuZC5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKQEAgLTMwLDEzICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogCi1zdGF0aWMgdWludDE2X3QgYmNhc3Rfc2Vxbm8gPSAxOyAvKiBnaXZlIG93biBiY2FzdCBtZXNzYWdlcyBzZXEgbnVtYmVycyB0byBhdm9pZAorc3RhdGljIHVpbnQzMl90IGJjYXN0X3NlcW5vID0gMTsgLyogZ2l2ZSBvd24gYmNhc3QgbWVzc2FnZXMgc2VxIG51bWJlcnMgdG8gYXZvaWQKIAkJCQkgICogYnJvYWRjYXN0IHN0b3JtcyAqLwogc3RhdGljIGludDMyX3Qgc2tiX3BhY2tldHM7CiBzdGF0aWMgaW50MzJfdCBza2JfYmFkX3BhY2tldHM7CiAKLXVuc2lnbmVkIGNoYXIgbWFpbklmQWRkcltFVEhfQUxFTl07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBtYWluSWZBZGRyX2RlZmF1bHRbRVRIX0FMRU5dOwordW5zaWduZWQgY2hhciBtYWluX2lmX2FkZHJbRVRIX0FMRU5dOwogc3RhdGljIGludCBiYXRfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIHN0YXRpYyB2b2lkIGJhdF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pOwpAQCAtNTgsMTIgKzU4LDcgQEAKIAogdm9pZCBzZXRfbWFpbl9pZl9hZGRyKHVpbnQ4X3QgKmFkZHIpCiB7Ci0JbWVtY3B5KG1haW5JZkFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKLX0KLQotaW50IG1haW5faWZfd2FzX3VwKHZvaWQpCi17Ci0JcmV0dXJuIChtZW1jbXAobWFpbklmQWRkciwgbWFpbklmQWRkcl9kZWZhdWx0LCBFVEhfQUxFTikgIT0gMCA/IDEgOiAwKTsKKwltZW1jcHkobWFpbl9pZl9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CiB9CiAKIGludCBteV9za2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtODMsNjkgKzc4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBIQVZFX05FVF9ERVZJQ0VfT1BTCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJhdF9uZXRkZXZfb3BzID0gewotCS5uZG9fb3BlbiA9IGludGVyZmFjZV9vcGVuLAotCS5uZG9fc3RvcCA9IGludGVyZmFjZV9yZWxlYXNlLAotCS5uZG9fZ2V0X3N0YXRzID0gaW50ZXJmYWNlX3N0YXRzLAotCS5uZG9fc2V0X21hY19hZGRyZXNzID0gaW50ZXJmYWNlX3NldF9tYWNfYWRkciwKLQkubmRvX2NoYW5nZV9tdHUgPSBpbnRlcmZhY2VfY2hhbmdlX210dSwKLQkubmRvX3N0YXJ0X3htaXQgPSBpbnRlcmZhY2VfdHgsCi0JLm5kb192YWxpZGF0ZV9hZGRyID0gZXRoX3ZhbGlkYXRlX2FkZHIKLX07Ci0jZW5kaWYKLQotdm9pZCBpbnRlcmZhY2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYmF0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNoYXIgZGV2X2FkZHJbRVRIX0FMRU5dOwotCi0JZXRoZXJfc2V0dXAoZGV2KTsKLQotI2lmZGVmIEhBVkVfTkVUX0RFVklDRV9PUFMKLQlkZXYtPm5ldGRldl9vcHMgPSAmYmF0X25ldGRldl9vcHM7Ci0jZWxzZQotCWRldi0+b3BlbiA9IGludGVyZmFjZV9vcGVuOwotCWRldi0+c3RvcCA9IGludGVyZmFjZV9yZWxlYXNlOwotCWRldi0+Z2V0X3N0YXRzID0gaW50ZXJmYWNlX3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaW50ZXJmYWNlX3NldF9tYWNfYWRkcjsKLQlkZXYtPmNoYW5nZV9tdHUgPSBpbnRlcmZhY2VfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGludGVyZmFjZV90eDsKLSNlbmRpZgotCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCi0JZGV2LT5tdHUgPSBoYXJkaWZfbWluX210dSgpOwotCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQkFUX0hFQURFUl9MRU47IC8qIHJlc2VydmUgbW9yZSBzcGFjZSBpbiB0aGUKLQkJCQkJCSogc2tidWZmIGZvciBvdXIgaGVhZGVyICovCi0KLQkvKiBnZW5lcmF0ZSByYW5kb20gYWRkcmVzcyAqLwotCXJhbmRvbV9ldGhlcl9hZGRyKGRldl9hZGRyKTsKLQltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQotCVNFVF9FVEhUT09MX09QUyhkZXYsICZiYXRfZXRodG9vbF9vcHMpOwotCi0JbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgYmF0X3ByaXYpKTsKLX0KLQotaW50IGludGVyZmFjZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGludGVyZmFjZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGludGVyZmFjZV9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGludGVyZmFjZV9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaW50ZXJmYWNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBiYXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcmV0dXJuICZwcml2LT5zdGF0czsKIH0KIAotaW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3N0YXRpYyBpbnQgaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAKQEAgLTE2Myw3ICsxMTQsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaW50ZXJmYWNlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitzdGF0aWMgaW50IGludGVyZmFjZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCS8qIGNoZWNrIHJhbmdlcyAqLwogCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IGhhcmRpZl9taW5fbXR1KCkpKQpAQCAtMTc5LDYgKzEzMCw3IEBACiAJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKIAlzdHJ1Y3QgYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBuZWlnaF9ub2RlICpyb3V0ZXI7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGJhdF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CkBAIC0yMDUsMTYgKzE1NywxNyBAQAogCiAJCWJjYXN0X3BhY2tldCA9IChzdHJ1Y3QgYmNhc3RfcGFja2V0ICopc2tiLT5kYXRhOwogCQliY2FzdF9wYWNrZXQtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKKwkJYmNhc3RfcGFja2V0LT50dGwgPSBUVEw7CiAKIAkJLyogYmF0bWFuIHBhY2tldCB0eXBlOiBicm9hZGNhc3QgKi8KIAkJYmNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSA9IEJBVF9CQ0FTVDsKIAogCQkvKiBodyBhZGRyZXNzIG9mIGZpcnN0IGludGVyZmFjZSBpcyB0aGUgb3JpZyBtYWMgYmVjYXVzZSBvbmx5CiAJCSAqIHRoaXMgbWFjIGlzIGtub3duIHRocm91Z2hvdXQgdGhlIG1lc2ggKi8KLQkJbWVtY3B5KGJjYXN0X3BhY2tldC0+b3JpZywgbWFpbklmQWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoYmNhc3RfcGFja2V0LT5vcmlnLCBtYWluX2lmX2FkZHIsIEVUSF9BTEVOKTsKIAogCQkvKiBzZXQgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciAqLwotCQliY2FzdF9wYWNrZXQtPnNlcW5vID0gaHRvbnMoYmNhc3Rfc2Vxbm8pOworCQliY2FzdF9wYWNrZXQtPnNlcW5vID0gaHRvbmwoYmNhc3Rfc2Vxbm8pOwogCiAJCS8qIGJyb2FkY2FzdCBwYWNrZXQuIG9uIHN1Y2Nlc3MsIGluY3JlYXNlIHNlcW5vLiAqLwogCQlpZiAoYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHNrYikgPT0gTkVUREVWX1RYX09LKQpAQCAtMjM1LDM4ICsxODgsMzYgQEAKIAkJaWYgKCFvcmlnX25vZGUpCiAJCQlvcmlnX25vZGUgPSB0cmFuc3RhYmxlX3NlYXJjaChldGhoZHItPmhfZGVzdCk7CiAKLQkJaWYgKChvcmlnX25vZGUpICYmCi0JCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIpKSB7Ci0JCQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqcm91dGVyID0gb3JpZ19ub2RlLT5yb3V0ZXI7CisJCXJvdXRlciA9IGZpbmRfcm91dGVyKG9yaWdfbm9kZSwgTlVMTCk7CiAKLQkJCWlmIChteV9za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSA8IDApCi0JCQkJZ290byB1bmxvY2s7Ci0KLQkJCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKLQotCQkJdW5pY2FzdF9wYWNrZXQtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKLQkJCS8qIGJhdG1hbiBwYWNrZXQgdHlwZTogdW5pY2FzdCAqLwotCQkJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7Ci0JCQkvKiBzZXQgdW5pY2FzdCB0dGwgKi8KLQkJCXVuaWNhc3RfcGFja2V0LT50dGwgPSBUVEw7Ci0JCQkvKiBjb3B5IHRoZSBkZXN0aW5hdGlvbiBmb3IgZmFzdGVyIHJvdXRpbmcgKi8KLQkJCW1lbWNweSh1bmljYXN0X3BhY2tldC0+ZGVzdCwgb3JpZ19ub2RlLT5vcmlnLCBFVEhfQUxFTik7Ci0KLQkJCS8qIG5ldF9kZXYgd29uJ3QgYmUgYXZhaWxhYmxlIHdoZW4gbm90IGFjdGl2ZSAqLwotCQkJaWYgKHJvdXRlci0+aWZfaW5jb21pbmctPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCi0JCQkJZ290byB1bmxvY2s7Ci0KLQkJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCi0JCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCi0KLQkJCWJhdG1hbl9pZiA9IHJvdXRlci0+aWZfaW5jb21pbmc7Ci0JCQltZW1jcHkoZHN0YWRkciwgcm91dGVyLT5hZGRyLCBFVEhfQUxFTik7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotCi0JCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOwotCQl9IGVsc2UgeworCQlpZiAoIXJvdXRlcikKIAkJCWdvdG8gdW5sb2NrOwotCQl9CisKKwkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCisJCWJhdG1hbl9pZiA9IHJvdXRlci0+aWZfaW5jb21pbmc7CisJCW1lbWNweShkc3RhZGRyLCByb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJCWlmIChiYXRtYW5faWYtPmlmX3N0YXR1cyAhPSBJRl9BQ1RJVkUpCisJCQlnb3RvIGRyb3BwZWQ7CisKKwkJaWYgKG15X3NrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCkpIDwgMCkKKwkJCWdvdG8gZHJvcHBlZDsKKworCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7CisKKwkJdW5pY2FzdF9wYWNrZXQtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKKwkJLyogYmF0bWFuIHBhY2tldCB0eXBlOiB1bmljYXN0ICovCisJCXVuaWNhc3RfcGFja2V0LT5wYWNrZXRfdHlwZSA9IEJBVF9VTklDQVNUOworCQkvKiBzZXQgdW5pY2FzdCB0dGwgKi8KKwkJdW5pY2FzdF9wYWNrZXQtPnR0bCA9IFRUTDsKKwkJLyogY29weSB0aGUgZGVzdGluYXRpb24gZm9yIGZhc3RlciByb3V0aW5nICovCisJCW1lbWNweSh1bmljYXN0X3BhY2tldC0+ZGVzdCwgb3JpZ19ub2RlLT5vcmlnLCBFVEhfQUxFTik7CisKKwkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKIAl9CiAKIAlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0zMTUsNiArMjY2LDUwIEBACiAJbmV0aWZfcngoc2tiKTsKIH0KIAorI2lmZGVmIEhBVkVfTkVUX0RFVklDRV9PUFMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gaW50ZXJmYWNlX29wZW4sCisJLm5kb19zdG9wID0gaW50ZXJmYWNlX3JlbGVhc2UsCisJLm5kb19nZXRfc3RhdHMgPSBpbnRlcmZhY2Vfc3RhdHMsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBpbnRlcmZhY2Vfc2V0X21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dSA9IGludGVyZmFjZV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGludGVyZmFjZV90eCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkcgorfTsKKyNlbmRpZgorCit2b2lkIGludGVyZmFjZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2hhciBkZXZfYWRkcltFVEhfQUxFTl07CisKKwlldGhlcl9zZXR1cChkZXYpOworCisjaWZkZWYgSEFWRV9ORVRfREVWSUNFX09QUworCWRldi0+bmV0ZGV2X29wcyA9ICZiYXRfbmV0ZGV2X29wczsKKyNlbHNlCisJZGV2LT5vcGVuID0gaW50ZXJmYWNlX29wZW47CisJZGV2LT5zdG9wID0gaW50ZXJmYWNlX3JlbGVhc2U7CisJZGV2LT5nZXRfc3RhdHMgPSBpbnRlcmZhY2Vfc3RhdHM7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBpbnRlcmZhY2Vfc2V0X21hY19hZGRyOworCWRldi0+Y2hhbmdlX210dSA9IGludGVyZmFjZV9jaGFuZ2VfbXR1OworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaW50ZXJmYWNlX3R4OworI2VuZGlmCisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CisKKwlkZXYtPm10dSA9IGhhcmRpZl9taW5fbXR1KCk7CisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBCQVRfSEVBREVSX0xFTjsgLyogcmVzZXJ2ZSBtb3JlIHNwYWNlIGluIHRoZQorCQkJCQkJKiBza2J1ZmYgZm9yIG91ciBoZWFkZXIgKi8KKworCS8qIGdlbmVyYXRlIHJhbmRvbSBhZGRyZXNzICovCisJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZXZfYWRkciwgRVRIX0FMRU4pOworCisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmJhdF9ldGh0b29sX29wcyk7CisKKwltZW1zZXQocHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBiYXRfcHJpdikpOworfQorCiAvKiBldGh0b29sICovCiBzdGF0aWMgaW50IGJhdF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaAppbmRleCBlN2Y1OWFmLi42MzY0ODU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKQEAgLTE5LDE2ICsxOSwxNSBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TT0ZUX0lOVEVSRkFDRV9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfU09GVF9JTlRFUkZBQ0VfSF8KKwogdm9pZCBzZXRfbWFpbl9pZl9hZGRyKHVpbnQ4X3QgKmFkZHIpOwotaW50IG1haW5faWZfd2FzX3VwKHZvaWQpOwogdm9pZCBpbnRlcmZhY2Vfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaW50ZXJmYWNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaW50ZXJmYWNlX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaW50ZXJmYWNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7Ci1pbnQgaW50ZXJmYWNlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwogaW50IGludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaW50ZXJmYWNlX3J4KHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSk7CiBpbnQgbXlfc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CiAKLWV4dGVybiB1bnNpZ25lZCBjaGFyIG1haW5JZkFkZHJbXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIG1haW5faWZfYWRkcltdOworCisjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1NPRlRfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtYmF0bWFuLWFkdiBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3N5c2ZzLWNsYXNzLW5ldC1iYXRtYW4tYWR2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZGQ3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtYmF0bWFuLWFkdgpAQCAtMCwwICsxLDE0IEBACisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88aWZhY2U+L2JhdG1hbi1hZHYvbWVzaF9pZmFjZQorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIFRoZSAvc3lzL2NsYXNzL25ldC88aWZhY2U+L2JhdG1hbi1hZHYvbWVzaF9pZmFjZSBmaWxlCisgICAgICAgICAgICAgICAgZGlzcGxheXMgdGhlIGJhdG1hbiBtZXNoIGludGVyZmFjZSB0aGlzIDxpZmFjZT4KKyAgICAgICAgICAgICAgICBjdXJyZW50bHkgaXMgYXNzb2NpYXRlZCB3aXRoLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPGlmYWNlPi9iYXRtYW4tYWR2L2lmYWNlX3N0YXR1cworRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEluZGljYXRlcyB0aGUgc3RhdHVzIG9mIDxpZmFjZT4gYXMgaXQgaXMgc2VlbiBieSBiYXRtYW4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtbWVzaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3N5c2ZzLWNsYXNzLW5ldC1tZXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYTE5MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zeXNmcy1jbGFzcy1uZXQtbWVzaApAQCAtMCwwICsxLDMzIEBACisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC9hZ2dyZWdhdGVkX29nbXMKK0RhdGU6ICAgICAgICAgICBNYXkgMjAxMAorQ29udGFjdDogICAgICAgIE1hcmVrIExpbmRuZXIgPGxpbmRuZXJfbWFyZWtAeWFob28uZGU+CitEZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYmF0bWFuIHByb3RvY29sIG1lc3NhZ2VzIG9mIHRoZQorICAgICAgICAgICAgICAgIG1lc2ggPG1lc2hfaWZhY2U+IHNoYWxsIGJlIGFnZ3JlZ2F0ZWQgb3Igbm90LgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPG1lc2hfaWZhY2U+L21lc2gvYm9uZGluZworRGF0ZTogICAgICAgICAgIEp1bmUgMjAxMAorQ29udGFjdDogICAgICAgIFNpbW9uIFd1bmRlcmxpY2ggPHNpd3VAaHJ6LnR1LWNoZW1uaXR6LmRlPgorRGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgdHJhZmZpYyBnb2luZyB0aHJvdWdoIHRoZQorICAgICAgICAgICAgICAgIG1lc2ggd2lsbCBiZSBzZW50IHVzaW5nIG11bHRpcGxlIGludGVyZmFjZXMgYXQgdGhlCisgICAgICAgICAgICAgICAgc2FtZSB0aW1lIChpZiBhdmFpbGFibGUpLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9uZXQvPG1lc2hfaWZhY2U+L21lc2gvb3JpZ19pbnRlcnZhbAorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIERlZmluZXMgdGhlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBpbiB3aGljaCBiYXRtYW4KKyAgICAgICAgICAgICAgICBzZW5kcyBpdHMgcHJvdG9jb2wgbWVzc2FnZXMuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL25ldC88bWVzaF9pZmFjZT4vbWVzaC92aXNfbW9kZQorRGF0ZTogICAgICAgICAgIE1heSAyMDEwCitDb250YWN0OiAgICAgICAgTWFyZWsgTGluZG5lciA8bGluZG5lcl9tYXJla0B5YWhvby5kZT4KK0Rlc2NyaXB0aW9uOgorICAgICAgICAgICAgICAgIEVhY2ggYmF0bWFuIG5vZGUgb25seSBtYWludGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaXRzCisgICAgICAgICAgICAgICAgb3duIGxvY2FsIG5laWdoYm9yaG9vZCwgdGhlcmVmb3JlIGdlbmVyYXRpbmcgZ3JhcGhzCisgICAgICAgICAgICAgICAgc2hvd2luZyB0aGUgdG9wb2xvZ3kgb2YgdGhlIGVudGlyZSBtZXNoIGlzIG5vdCBlYXNpbHkKKyAgICAgICAgICAgICAgICBmZWFzaWJsZSB3aXRob3V0IGhhdmluZyBhIGNlbnRyYWwgaW5zdGFuY2UgdG8gY29sbGVjdAorICAgICAgICAgICAgICAgIHRoZSBsb2NhbCB0b3BvbG9naWVzIGZyb20gYWxsIG5vZGVzLiBUaGlzIGZpbGUgYWxsb3dzCisgICAgICAgICAgICAgICAgdG8gYWN0aXZhdGUgdGhlIGNvbGxlY3RpbmcgKHNlcnZlcikgbW9kZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCmluZGV4IGUwMWZmMjEuLmIyMzMzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwpAQCAtMzIsNyArMzIsMTAgQEAKIERFRklORV9TUElOTE9DSyhobmFfbG9jYWxfaGFzaF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaG5hX2dsb2JhbF9oYXNoX2xvY2spOwogCitzdGF0aWMgdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhobmFfbG9jYWxfcHVyZ2Vfd3EsIGhuYV9sb2NhbF9wdXJnZSk7CitzdGF0aWMgdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKKwkJCQkgY2hhciAqbWVzc2FnZSk7CiAKIHN0YXRpYyB2b2lkIGhuYV9sb2NhbF9zdGFydF90aW1lcih2b2lkKQogewpAQCAtNTcsNiArNjAsOCBAQAogCiB2b2lkIGhuYV9sb2NhbF9hZGQodWludDhfdCAqYWRkcikKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpzd2FwaGFzaDsKQEAgLTc3LDE1ICs4MiwxNSBAQAogCSAgIE1BQy1mbG9vZGluZy4gKi8KIAlpZiAoKG51bV9obmEgKyAxID4gKEVUSF9EQVRBX0xFTiAtIEJBVF9QQUNLRVRfTEVOKSAvIEVUSF9BTEVOKSB8fAogCSAgICAobnVtX2huYSArIDEgPiAyNTUpKSB7Ci0JCWJhdF9kYmcoREJHX1JPVVRFUywKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCBiYXRfcHJpdiwKIAkJCSJDYW4ndCBhZGQgbmV3IGxvY2FsIGhuYSBlbnRyeSAoJXBNKTogIgogCQkJIm51bWJlciBvZiBsb2NhbCBobmEgZW50cmllcyBleGNlZWRzIHBhY2tldCBzaXplXG4iLAogCQkJYWRkcik7CiAJCXJldHVybjsKIAl9CiAKLQliYXRfZGJnKERCR19ST1VURVMsICJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcE1cbiIsCi0JCWFkZHIpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCSJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcE1cbiIsIGFkZHIpOwogCiAJaG5hX2xvY2FsX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmICghaG5hX2xvY2FsX2VudHJ5KQpAQCAtMTExLDggKzExNiw3IEBACiAJCQkJICAgICAgIGhuYV9sb2NhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkJICAgICAgICJDb3VsZG4ndCByZXNpemUgbG9jYWwgaG5hIGhhc2ggdGFibGVcbiIpOworCQkJcHJfZXJyKCJDb3VsZG4ndCByZXNpemUgbG9jYWwgaG5hIGhhc2ggdGFibGVcbiIpOwogCQllbHNlCiAJCQlobmFfbG9jYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTE2MCw1OSArMTY0LDU0IEBACiAJcmV0dXJuIGk7CiB9CiAKLWludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpCitpbnQgaG5hX2xvY2FsX3NlcV9wcmludF90ZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKIAlIQVNISVQoaGFzaGl0KTsKLQlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisJSEFTSElUKGhhc2hpdF9jb3VudCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaXplX3QgaGRyX2xlbjsKKwlzaXplX3QgYnVmX3NpemUsIHBvczsKKwljaGFyICpidWZmOwogCiAJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlpZiAob2ZmID09IDApCi0JCQlyZXR1cm4gc3ByaW50ZihidWZmLAotCQkJCSAgICAgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgotCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJICAgICAgICJwbGVhc2Ugc3BlY2lmeSBpbnRlcmZhY2VzIHRvIGVuYWJsZSBpdFxuIiwKKwkJCSAgICAgICBuZXRfZGV2LT5uYW1lKTsKIAl9CiAKLQloZHJfbGVuID0gc3ByaW50ZihidWZmLAotCQkJICAiTG9jYWxseSByZXRyaWV2ZWQgYWRkcmVzc2VzIChmcm9tICVzKSAiCi0JCQkgICJhbm5vdW5jZWQgdmlhIEhOQTpcbiIsCi0JCQkgIG5ldF9kZXYtPm5hbWUpOwotCi0JaWYgKG9mZiA8IGhkcl9sZW4pCi0JCWJ5dGVzX3dyaXR0ZW4gPSBoZHJfbGVuOworCXNlcV9wcmludGYoc2VxLCAiTG9jYWxseSByZXRyaWV2ZWQgYWRkcmVzc2VzIChmcm9tICVzKSAiCisJCSAgICJhbm5vdW5jZWQgdmlhIEhOQTpcbiIsCisJCSAgIG5ldF9kZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIAorCWJ1Zl9zaXplID0gMTsKKwkvKiBFc3RpbWF0ZSBsZW5ndGggZm9yOiAiICogeHg6eHg6eHg6eHg6eHg6eHhcbiIgKi8KKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0X2NvdW50KSkKKwkJYnVmX3NpemUgKz0gMjE7CisKKwlidWZmID0ga21hbGxvYyhidWZfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWZmKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCXBvcyA9IDA7CisKIAl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0KSkgewotCQloZHJfbGVuICs9IDIxOwotCi0JCWlmIChjb3VudCA8IGJ5dGVzX3dyaXR0ZW4gKyAyMikKLQkJCWJyZWFrOwotCi0JCWlmIChvZmYgPj0gaGRyX2xlbikKLQkJCWNvbnRpbnVlOwotCiAJCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAKLQkJYnl0ZXNfd3JpdHRlbiArPSBzbnByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwgMjIsCi0JCQkJCSAgIiAqICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkgIGhuYV9sb2NhbF9lbnRyeS0+YWRkclswXSwKLQkJCQkJICBobmFfbG9jYWxfZW50cnktPmFkZHJbMV0sCi0JCQkJCSAgaG5hX2xvY2FsX2VudHJ5LT5hZGRyWzJdLAotCQkJCQkgIGhuYV9sb2NhbF9lbnRyeS0+YWRkclszXSwKLQkJCQkJICBobmFfbG9jYWxfZW50cnktPmFkZHJbNF0sCi0JCQkJCSAgaG5hX2xvY2FsX2VudHJ5LT5hZGRyWzVdKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDIyLCAiICogJXBNXG4iLAorCQkJCWhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOwotCXJldHVybiBieXRlc193cml0dGVuOworCisJc2VxX3ByaW50ZihzZXEsICIlcyIsIGJ1ZmYpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfaG5hX2xvY2FsX2RlbCh2b2lkICpkYXRhKQpAQCAtMjI1LDcgKzIyNCw5IEBACiBzdGF0aWMgdm9pZCBobmFfbG9jYWxfZGVsKHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwKIAkJCSAgY2hhciAqbWVzc2FnZSkKIHsKLQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzXG4iLAorCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzXG4iLAogCQlobmFfbG9jYWxfZW50cnktPmFkZHIsIG1lc3NhZ2UpOwogCiAJaGFzaF9yZW1vdmUoaG5hX2xvY2FsX2hhc2gsIGhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CkBAIC0yNDcsNyArMjQ4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaG5hX2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGhuYV9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwogCUhBU0hJVChoYXNoaXQpOwpAQCAtMjU5LDggKzI2MCw3IEBACiAJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgJmhhc2hpdCkpIHsKIAkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAotCQl0aW1lb3V0ID0gaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gKwotCQkJKChMT0NBTF9ITkFfVElNRU9VVCAvIDEwMDApICogSFopOworCQl0aW1lb3V0ID0gaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gKyBMT0NBTF9ITkFfVElNRU9VVCAqIEhaOwogCQlpZiAoKCFobmFfbG9jYWxfZW50cnktPm5ldmVyX3B1cmdlKSAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKIAkJCWhuYV9sb2NhbF9kZWwoaG5hX2xvY2FsX2VudHJ5LCAiYWRkcmVzcyB0aW1lZCBvdXQiKTsKQEAgLTI5Niw2ICsyOTYsOCBAQAogdm9pZCBobmFfZ2xvYmFsX2FkZF9vcmlnKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKIAkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKIHsKKwkvKiBGSVhNRTogZWFjaCBvcmlnX25vZGUtPmJhdG1hbl9pZiB3aWxsIGJlIGF0dGFjaGVkIHRvIGEgc29mdGlmICovCisJc3RydWN0IGJhdF9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KHNvZnRfZGV2aWNlKTsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpzd2FwaGFzaDsKQEAgLTMyMiw3ICszMjQsNyBAQAogCiAJCQltZW1jcHkoaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwgaG5hX3B0ciwgRVRIX0FMRU4pOwogCi0JCQliYXRfZGJnKERCR19ST1VURVMsCisJCQliYXRfZGJnKERCR19ST1VURVMsIGJhdF9wcml2LAogCQkJCSJDcmVhdGluZyBuZXcgZ2xvYmFsIGhuYSBlbnRyeTogIgogCQkJCSIlcE0gKHZpYSAlcE0pXG4iLAogCQkJCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIG9yaWdfbm9kZS0+b3JpZyk7CkBAIC0zNjksOCArMzcxLDcgQEAKIAkJCQkgICAgICAgaG5hX2dsb2JhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IgotCQkJICAgICAgICJDb3VsZG4ndCByZXNpemUgZ2xvYmFsIGhuYSBoYXNoIHRhYmxlXG4iKTsKKwkJCXByX2VycigiQ291bGRuJ3QgcmVzaXplIGdsb2JhbCBobmEgaGFzaCB0YWJsZVxuIik7CiAJCWVsc2UKIAkJCWhuYV9nbG9iYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTM3OCw3MSArMzc5LDYzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAotaW50IGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpCitpbnQgaG5hX2dsb2JhbF9zZXFfcHJpbnRfdGV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlIQVNISVQoaGFzaGl0KTsKLQlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisJSEFTSElUKGhhc2hpdF9jb3VudCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzaXplX3QgaGRyX2xlbjsKKwlzaXplX3QgYnVmX3NpemUsIHBvczsKKwljaGFyICpidWZmOwogCiAJaWYgKCFiYXRfcHJpdi0+cHJpbWFyeV9pZikgewotCQlpZiAob2ZmID09IDApCi0JCQlyZXR1cm4gc3ByaW50ZihidWZmLAotCQkJCSAgICAgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgotCQkJCSAgICAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAotCQkJCSAgICAgbmV0X2Rldi0+bmFtZSk7Ci0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBzZXFfcHJpbnRmKHNlcSwgIkJBVE1BTiBtZXNoICVzIGRpc2FibGVkIC0gIgorCQkJCSAgInBsZWFzZSBzcGVjaWZ5IGludGVyZmFjZXMgdG8gZW5hYmxlIGl0XG4iLAorCQkJCSAgbmV0X2Rldi0+bmFtZSk7CiAJfQogCi0JaGRyX2xlbiA9IHNwcmludGYoYnVmZiwKLQkJCSAgIkdsb2JhbGx5IGFubm91bmNlZCBITkFzIHJlY2VpdmVkIHZpYSB0aGUgbWVzaCAlcyAiCi0JCQkgICIodHJhbnNsYXRpb24gdGFibGUpOlxuIiwKLQkJCSAgbmV0X2Rldi0+bmFtZSk7Ci0KLQlpZiAob2ZmIDwgaGRyX2xlbikKLQkJYnl0ZXNfd3JpdHRlbiA9IGhkcl9sZW47CisJc2VxX3ByaW50ZihzZXEsICJHbG9iYWxseSBhbm5vdW5jZWQgSE5BcyByZWNlaXZlZCB2aWEgdGhlIG1lc2ggJXNcbiIsCisJCSAgIG5ldF9kZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7CiAKKwlidWZfc2l6ZSA9IDE7CisJLyogRXN0aW1hdGUgbGVuZ3RoIGZvcjogIiAqIHh4Onh4Onh4Onh4Onh4Onh4IHZpYSB4eDp4eDp4eDp4eDp4eDp4eFxuIiovCisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfZ2xvYmFsX2hhc2gsICZoYXNoaXRfY291bnQpKQorCQlidWZfc2l6ZSArPSA0MzsKKworCWJ1ZmYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWJ1ZmZbMF0gPSAnXDAnOworCXBvcyA9IDA7CisKIAl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9nbG9iYWxfaGFzaCwgJmhhc2hpdCkpIHsKLQkJaGRyX2xlbiArPSA0MzsKLQotCQlpZiAoY291bnQgPCBieXRlc193cml0dGVuICsgNDQpCi0JCQlicmVhazsKLQotCQlpZiAob2ZmID49IGhkcl9sZW4pCi0JCQljb250aW51ZTsKLQogCQlobmFfZ2xvYmFsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAotCQlieXRlc193cml0dGVuICs9IHNucHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLCA0NCwKLQkJCQkJICAiICogIiBNQUNfRk1UICIgdmlhICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPmFkZHJbMF0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+YWRkclsxXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyWzJdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPmFkZHJbM10sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+YWRkcls0XSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyWzVdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZ1swXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWdbMV0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnWzJdLAotCQkJCQkgIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZ1szXSwKLQkJCQkJICBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWdbNF0sCi0JCQkJCSAgaG5hX2dsb2JhbF9lbnRyeS0+b3JpZ19ub2RlLT5vcmlnWzVdKTsKKwkJcG9zICs9IHNucHJpbnRmKGJ1ZmYgKyBwb3MsIDQ0LAorCQkJCSIgKiAlcE0gdmlhICVwTVxuIiwgaG5hX2dsb2JhbF9lbnRyeS0+YWRkciwKKwkJCQlobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGJ5dGVzX3dyaXR0ZW47CisKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CisJa2ZyZWUoYnVmZik7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX2huYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnksCi0JCQkgIGNoYXIgKm1lc3NhZ2UpCitzdGF0aWMgdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKKwkJCQkgY2hhciAqbWVzc2FnZSkKIHsKLQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyBnbG9iYWwgaG5hIGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAorCS8qIEZJWE1FOiBlYWNoIG9yaWdfbm9kZS0+YmF0bWFuX2lmIHdpbGwgYmUgYXR0YWNoZWQgdG8gYSBzb2Z0aWYgKi8KKwlzdHJ1Y3QgYmF0X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoc29mdF9kZXZpY2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgYmF0X3ByaXYsCisJCSJEZWxldGluZyBnbG9iYWwgaG5hIGVudHJ5ICVwTSAodmlhICVwTSk6ICVzXG4iLAogCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcsCiAJCW1lc3NhZ2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaAppbmRleCA4ZjQxMmZjLi5mYTkzZTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKQEAgLTE5LDIzICsxOSwyMSBAQAogICoKICAqLwogCisjaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IXworI2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8KKwogI2luY2x1ZGUgInR5cGVzLmgiCiAKIGludCBobmFfbG9jYWxfaW5pdCh2b2lkKTsKIHZvaWQgaG5hX2xvY2FsX2FkZCh1aW50OF90ICphZGRyKTsKIHZvaWQgaG5hX2xvY2FsX3JlbW92ZSh1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKTsKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXIodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKLWludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOwotdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCBobmFfbG9jYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiB2b2lkIGhuYV9sb2NhbF9mcmVlKHZvaWQpOwogaW50IGhuYV9nbG9iYWxfaW5pdCh2b2lkKTsKIHZvaWQgaG5hX2dsb2JhbF9hZGRfb3JpZyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLAogCQkJIGludCBobmFfYnVmZl9sZW4pOwotaW50IGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCBvZmYpOwotdm9pZCBfaG5hX2dsb2JhbF9kZWxfb3JpZyhzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeSwKLQkJCSAgY2hhciAqb3JpZ19zdHIpOworaW50IGhuYV9nbG9iYWxfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiB2b2lkIGhuYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBjaGFyICptZXNzYWdlKTsKIHZvaWQgaG5hX2dsb2JhbF9mcmVlKHZvaWQpOwogc3RydWN0IG9yaWdfbm9kZSAqdHJhbnN0YWJsZV9zZWFyY2godWludDhfdCAqYWRkcik7CkBAIC00MywzICs0MSw1IEBACiBleHRlcm4gc3BpbmxvY2tfdCBobmFfbG9jYWxfaGFzaF9sb2NrOwogZXh0ZXJuIHN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2xvY2FsX2hhc2g7CiBleHRlcm4gYXRvbWljX3QgaG5hX2xvY2FsX2NoYW5nZWQ7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90eXBlcy5oCmluZGV4IDg2MDA3YzcuLjIxZDA3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHlwZXMuaApAQCAtMjEsMTAgKzIxLDggQEAKIAogCiAKLQotCi0jaWZuZGVmIFRZUEVTX0gKLSNkZWZpbmUgVFlQRVNfSAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFlQRVNfSF8KKyNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1RZUEVTX0hfCiAKICNpbmNsdWRlICJwYWNrZXQuaCIKICNpbmNsdWRlICJiaXRhcnJheS5oIgpAQCAtNTIsNiArNTAsNyBAQAogCiAvKioKICAgKglvcmlnX25vZGUgLSBzdHJ1Y3R1cmUgZm9yIG9yaWdfbGlzdCBtYWludGFpbmluZyBub2RlcyBvZiBtZXNoCisgICoJQHByaW1hcnlfYWRkcjogaG9zdHMgcHJpbWFyeSBpbnRlcmZhY2UgYWRkcmVzcwogICAqCUBsYXN0X3ZhbGlkOiB3aGVuIGxhc3QgcGFja2V0IGZyb20gdGhpcyBub2RlIHdhcyByZWNlaXZlZAogICAqCUBiY2FzdF9zZXFub19yZXNldDogdGltZSB3aGVuIHRoZSBicm9hZGNhc3Qgc2Vxbm8gd2luZG93IHdhcyByZXNldAogICAqCUBiYXRtYW5fc2Vxbm9fcmVzZXQ6IHRpbWUgd2hlbiB0aGUgYmF0bWFuIHNlcW5vIHdpbmRvdyB3YXMgcmVzZXQKQEAgLTU5LDkgKzU4LDEzIEBACiAgICoJQGxhc3RfcmVhbF9zZXFubzogbGFzdCBhbmQgYmVzdCBrbm93biBzcXVlbmNlIG51bWJlcgogICAqCUBsYXN0X3R0bDogdHRsIG9mIGxhc3QgcmVjZWl2ZWQgcGFja2V0CiAgICoJQGxhc3RfYmNhc3Rfc2Vxbm86IGxhc3QgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciByZWNlaXZlZCBieSB0aGlzIGhvc3QKKyAgKgorICAqCUBjYW5kaWRhdGVzOiBob3cgbWFueSBjYW5kaWRhdGVzIGFyZSBhdmFpbGFibGUKKyAgKglAc2VsZWN0ZWQ6IG5leHQgYm9uZGluZyBjYW5kaWRhdGUKICAqLwogc3RydWN0IG9yaWdfbm9kZSB7CiAJdWludDhfdCBvcmlnW0VUSF9BTEVOXTsKKwl1aW50OF90IHByaW1hcnlfYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG5laWdoX25vZGUgKnJvdXRlcjsKIAlUWVBFX09GX1dPUkQgKmJjYXN0X293bjsKIAl1aW50OF90ICpiY2FzdF9vd25fc3VtOwpAQCAtNzIsMTIgKzc1LDE2IEBACiAJdW5zaWduZWQgbG9uZyBiYXRtYW5fc2Vxbm9fcmVzZXQ7CiAJdWludDhfdCAgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmY7Ci0JaW50MTZfdCAgaG5hX2J1ZmZfbGVuOwotCXVpbnQxNl90IGxhc3RfcmVhbF9zZXFubzsKKwlpbnQxNl90IGhuYV9idWZmX2xlbjsKKwl1aW50MzJfdCBsYXN0X3JlYWxfc2Vxbm87CiAJdWludDhfdCBsYXN0X3R0bDsKIAlUWVBFX09GX1dPUkQgYmNhc3RfYml0c1tOVU1fV09SRFNdOwotCXVpbnQxNl90IGxhc3RfYmNhc3Rfc2Vxbm87CisJdWludDMyX3QgbGFzdF9iY2FzdF9zZXFubzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5laWdoX2xpc3Q7CisJc3RydWN0IHsKKwkJdWludDhfdCBjYW5kaWRhdGVzOworCQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqc2VsZWN0ZWQ7CisJfSBib25kOwogfTsKIAogLyoqCkBAIC05Miw2ICs5OSw3IEBACiAJdWludDhfdCB0cV9pbmRleDsKIAl1aW50OF90IHRxX2F2ZzsKIAl1aW50OF90IGxhc3RfdHRsOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZXh0X2JvbmRfY2FuZGlkYXRlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsKIAlUWVBFX09GX1dPUkQgcmVhbF9iaXRzW05VTV9XT1JEU107CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwpAQCAtMTAxLDE0ICsxMDksMTggQEAKIHN0cnVjdCBiYXRfcHJpdiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJYXRvbWljX3QgYWdncmVnYXRpb25fZW5hYmxlZDsKKwlhdG9taWNfdCBib25kaW5nX2VuYWJsZWQ7CiAJYXRvbWljX3QgdmlzX21vZGU7CiAJYXRvbWljX3Qgb3JpZ19pbnRlcnZhbDsKKwlhdG9taWNfdCBsb2dfbGV2ZWw7CiAJY2hhciBudW1faWZhY2VzOworCXN0cnVjdCBkZWJ1Z19sb2cgKmRlYnVnX2xvZzsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpwcmltYXJ5X2lmOwogCXN0cnVjdCBrb2JqZWN0ICptZXNoX29iajsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlX2NsaWVudCB7CitzdHJ1Y3Qgc29ja2V0X2NsaWVudCB7CiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OwogCXVuc2lnbmVkIGludCBxdWV1ZV9sZW47CiAJdW5zaWduZWQgY2hhciBpbmRleDsKQEAgLTExNiw5ICsxMjgsMTAgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZV93YWl0OwogfTsKIAotc3RydWN0IGRldmljZV9wYWNrZXQgeworc3RydWN0IHNvY2tldF9wYWNrZXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWNtcF9wYWNrZXQgaWNtcF9wYWNrZXQ7CisJc2l6ZV90IGljbXBfbGVuOworCXN0cnVjdCBpY21wX3BhY2tldF9yciBpY21wX3BhY2tldDsKIH07CiAKIHN0cnVjdCBobmFfbG9jYWxfZW50cnkgewpAQCAtMTU5LDQgKzE3MiwxMiBAQAogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiB9OwogCi0jZW5kaWYKK3N0cnVjdCBkZWJ1Z19sb2cgeworCWNoYXIgbG9nX2J1ZmZbTE9HX0JVRl9MRU5dOworCXVuc2lnbmVkIGxvbmcgbG9nX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgbG9nX2VuZDsKKwlzcGlubG9ja190IGxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWVfd2FpdDsKK307CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggMWQzZDk1NC4uNGI2YTUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmMKQEAgLTQzLDggKzQzLDggQEAKIAkJCV9kdW1teSA+IHNtYWxsZXN0X3NpZ25lZF9pbnQoX2R1bW15KTsgfSkKICNkZWZpbmUgc2VxX2FmdGVyKHgsIHkpIHNlcV9iZWZvcmUoeSwgeCkKIAotc3RydWN0IGhhc2h0YWJsZV90ICp2aXNfaGFzaDsKLURFRklORV9TUElOTE9DSyh2aXNfaGFzaF9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgaGFzaHRhYmxlX3QgKnZpc19oYXNoOworc3RhdGljIERFRklORV9TUElOTE9DSyh2aXNfaGFzaF9sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVjdl9saXN0X2xvY2spOwogc3RhdGljIHN0cnVjdCB2aXNfaW5mbyAqbXlfdmlzX2luZm87CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzZW5kX2xpc3Q7CS8qIGFsd2F5cyBsb2NrZWQgd2l0aCB2aXNfaGFzaF9sb2NrICovCkBAIC0xMTUsNyArMTE1LDcgQEAKIAl9CiAKIAkvKiBpdHMgYSBuZXcgYWRkcmVzcywgYWRkIGl0IHRvIHRoZSBsaXN0ICovCi0JZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmICghZW50cnkpCiAJCXJldHVybjsKIAltZW1jcHkoZW50cnktPmFkZHIsIGludGVyZmFjZSwgRVRIX0FMRU4pOwpAQCAtMTQyLDEyICsxNDIsMjkgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgc2l6ZV90IHZpc19kYXRhX2NvdW50X3ByaW1fc2VjKHN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0KQoreworCXN0cnVjdCBpZl9saXN0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXNpemVfdCBjb3VudCA9IDA7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCBpZl9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+cHJpbWFyeSkKKwkJCWNvdW50ICs9IDk7CisJCWVsc2UKKwkJCWNvdW50ICs9IDIzOworCX0KKworCXJldHVybiBjb3VudDsKK30KKwogLyogcmVhZCBhbiBlbnRyeSAgKi8KIHN0YXRpYyBzc2l6ZV90IHZpc19kYXRhX3JlYWRfZW50cnkoY2hhciAqYnVmZiwgc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyeSwKIAkJCQkgICB1aW50OF90ICpzcmMsIGJvb2wgcHJpbWFyeSkKIHsKLQljaGFyIHRvWzQwXTsKKwljaGFyIHRvWzE4XTsKIAorCS8qIG1heGltYWwgbGVuZ3RoOiBtYXgoNCsxNysyLCAzKzE3KzErMysyKSA9PSAyNiAqLwogCWFkZHJfdG9fc3RyaW5nKHRvLCBlbnRyeS0+ZGVzdCk7CiAJaWYgKHByaW1hcnkgJiYgZW50cnktPnF1YWxpdHkgPT0gMCkKIAkJcmV0dXJuIHNwcmludGYoYnVmZiwgIkhOQSAlcywgIiwgdG8pOwpAQCAtMTU3LDM4ICsxNzQsNzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3NpemVfdCB2aXNfZmlsbF9idWZmZXJfdGV4dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgY2hhciAqYnVmZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IG9mZikKK2ludCB2aXNfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlIQVNISVQoaGFzaGl0KTsKKwlIQVNISVQoaGFzaGl0X2NvdW50KTsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CiAJc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyaWVzOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopc2VxLT5wcml2YXRlOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlITElTVF9IRUFEKHZpc19pZl9saXN0KTsKIAlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47Ci0Jc2l6ZV90IGhkcl9sZW4sIHRtcF9sZW47Ci0JaW50IGksIGJ5dGVzX3dyaXR0ZW4gPSAwOworCWludCBpOwogCWNoYXIgdG1wX2FkZHJfc3RyW0VUSF9TVFJfTEVOXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJmJhdF9wcml2LT52aXNfbW9kZSk7CisJc2l6ZV90IGJ1ZmZfcG9zLCBidWZfc2l6ZTsKKwljaGFyICpidWZmOwogCiAJaWYgKCghYmF0X3ByaXYtPnByaW1hcnlfaWYpIHx8CiAJICAgICh2aXNfc2VydmVyID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpKQogCQlyZXR1cm4gMDsKIAotCWhkcl9sZW4gPSAwOwotCisJYnVmX3NpemUgPSAxOworCS8qIEVzdGltYXRlIGxlbmd0aCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZSh2aXNfaGFzaCwgJmhhc2hpdF9jb3VudCkpIHsKKwkJaW5mbyA9IGhhc2hpdF9jb3VudC5idWNrZXQtPmRhdGE7CisJCWVudHJpZXMgPSAoc3RydWN0IHZpc19pbmZvX2VudHJ5ICopCisJCQkoKGNoYXIgKilpbmZvICsgc2l6ZW9mKHN0cnVjdCB2aXNfaW5mbykpOworCisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5wYWNrZXQuZW50cmllczsgaSsrKSB7CisJCQlpZiAoZW50cmllc1tpXS5xdWFsaXR5ID09IDApCisJCQkJY29udGludWU7CisJCQl2aXNfZGF0YV9pbnNlcnRfaW50ZXJmYWNlKGVudHJpZXNbaV0uc3JjLCAmdmlzX2lmX2xpc3QsCisJCQkJY29tcGFyZV9vcmlnKGVudHJpZXNbaV0uc3JjLAorCQkJCQkJaW5mby0+cGFja2V0LnZpc19vcmlnKSk7CisJCX0KKworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCAmdmlzX2lmX2xpc3QsIGxpc3QpIHsKKwkJCWJ1Zl9zaXplICs9IDE4ICsgMjYgKiBpbmZvLT5wYWNrZXQuZW50cmllczsKKworCQkJLyogYWRkIHByaW1hcnkvc2Vjb25kYXJ5IHJlY29yZHMgKi8KKwkJCWlmIChjb21wYXJlX29yaWcoZW50cnktPmFkZHIsIGluZm8tPnBhY2tldC52aXNfb3JpZykpCisJCQkJYnVmX3NpemUgKz0KKwkJCQkJdmlzX2RhdGFfY291bnRfcHJpbV9zZWMoJnZpc19pZl9saXN0KTsKKworCQkJYnVmX3NpemUgKz0gMTsKKwkJfQorCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHBvcywgbiwgJnZpc19pZl9saXN0LCBsaXN0KSB7CisJCQlobGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJCWtmcmVlKGVudHJ5KTsKKwkJfQorCX0KKworCWJ1ZmYgPSBrbWFsbG9jKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmYpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJYnVmZlswXSA9ICdcMCc7CisJYnVmZl9wb3MgPSAwOworCiAJd2hpbGUgKGhhc2hfaXRlcmF0ZSh2aXNfaGFzaCwgJmhhc2hpdCkpIHsKIAkJaW5mbyA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAJCWVudHJpZXMgPSAoc3RydWN0IHZpc19pbmZvX2VudHJ5ICopCiAJCQkoKGNoYXIgKilpbmZvICsgc2l6ZW9mKHN0cnVjdCB2aXNfaW5mbykpOwogCi0JCS8qIGVzdGltYXRlZCBsaW5lIGxlbmd0aCAqLwotCQlpZiAoY291bnQgPCBieXRlc193cml0dGVuICsgMjAwKQotCQkJYnJlYWs7Ci0KIAkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBhY2tldC5lbnRyaWVzOyBpKyspIHsKIAkJCWlmIChlbnRyaWVzW2ldLnF1YWxpdHkgPT0gMCkKIAkJCQljb250aW51ZTsKQEAgLTE5OSwzMCArMjUyLDIyIEBACiAKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIHBvcywgJnZpc19pZl9saXN0LCBsaXN0KSB7CiAJCQlhZGRyX3RvX3N0cmluZyh0bXBfYWRkcl9zdHIsIGVudHJ5LT5hZGRyKTsKLQkJCXRtcF9sZW4gPSBzcHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLAotCQkJCQkgICIlcywiLCB0bXBfYWRkcl9zdHIpOworCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICIlcywiLAorCQkJCQkgICAgdG1wX2FkZHJfc3RyKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBhY2tldC5lbnRyaWVzOyBpKyspCi0JCQkJdG1wX2xlbiArPSB2aXNfZGF0YV9yZWFkX2VudHJ5KAotCQkJCQkJYnVmZiArIGJ5dGVzX3dyaXR0ZW4gKyB0bXBfbGVuLAotCQkJCQkJJmVudHJpZXNbaV0sIGVudHJ5LT5hZGRyLAotCQkJCQkJZW50cnktPnByaW1hcnkpOworCQkJCWJ1ZmZfcG9zICs9IHZpc19kYXRhX3JlYWRfZW50cnkoYnVmZiArIGJ1ZmZfcG9zLAorCQkJCQkJCQkmZW50cmllc1tpXSwKKwkJCQkJCQkJZW50cnktPmFkZHIsCisJCQkJCQkJCWVudHJ5LT5wcmltYXJ5KTsKIAogCQkJLyogYWRkIHByaW1hcnkvc2Vjb25kYXJ5IHJlY29yZHMgKi8KIAkJCWlmIChjb21wYXJlX29yaWcoZW50cnktPmFkZHIsIGluZm8tPnBhY2tldC52aXNfb3JpZykpCi0JCQkJdG1wX2xlbiArPSB2aXNfZGF0YV9yZWFkX3ByaW1fc2VjKAotCQkJCQkJYnVmZiArIGJ5dGVzX3dyaXR0ZW4gKyB0bXBfbGVuLAotCQkJCQkJJnZpc19pZl9saXN0KTsKKwkJCQlidWZmX3BvcyArPQorCQkJCQl2aXNfZGF0YV9yZWFkX3ByaW1fc2VjKGJ1ZmYgKyBidWZmX3BvcywKKwkJCQkJCQkgICAgICAgJnZpc19pZl9saXN0KTsKIAotCQkJdG1wX2xlbiArPSBzcHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuICsgdG1wX2xlbiwKLQkJCQkJICAiXG4iKTsKLQotCQkJaGRyX2xlbiArPSB0bXBfbGVuOwotCi0JCQlpZiAob2ZmID49IGhkcl9sZW4pCi0JCQkJY29udGludWU7Ci0KLQkJCWJ5dGVzX3dyaXR0ZW4gKz0gdG1wX2xlbjsKKwkJCWJ1ZmZfcG9zICs9IHNwcmludGYoYnVmZiArIGJ1ZmZfcG9zLCAiXG4iKTsKIAkJfQogCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHBvcywgbiwgJnZpc19pZl9saXN0LCBsaXN0KSB7CkBAIC0yMzAsOSArMjc1LDEzIEBACiAJCQlrZnJlZShlbnRyeSk7CiAJCX0KIAl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gYnl0ZXNfd3JpdHRlbjsKKwlzZXFfcHJpbnRmKHNlcSwgIiVzIiwgYnVmZik7CisJa2ZyZWUoYnVmZik7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogYWRkIHRoZSBpbmZvIHBhY2tldCB0byB0aGUgc2VuZCBsaXN0LCBpZiBpdCB3YXMgbm90CkBAIC0zMDgsNyArMzU3LDggQEAKIAlvbGRfaW5mbyA9IGhhc2hfZmluZCh2aXNfaGFzaCwgJnNlYXJjaF9lbGVtKTsKIAogCWlmIChvbGRfaW5mbyAhPSBOVUxMKSB7Ci0JCWlmICghc2VxX2FmdGVyKHZpc19wYWNrZXQtPnNlcW5vLCBvbGRfaW5mby0+cGFja2V0LnNlcW5vKSkgeworCQlpZiAoIXNlcV9hZnRlcihudG9obCh2aXNfcGFja2V0LT5zZXFubyksCisJCQkJbnRvaGwob2xkX2luZm8tPnBhY2tldC5zZXFubykpKSB7CiAJCQlpZiAob2xkX2luZm8tPnBhY2tldC5zZXFubyA9PSB2aXNfcGFja2V0LT5zZXFubykgewogCQkJCXJlY3ZfbGlzdF9hZGQoJm9sZF9pbmZvLT5yZWN2X2xpc3QsCiAJCQkJCSAgICAgIHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnKTsKQEAgLTM0MCw3ICszOTAsNyBAQAogCiAJLyogTWFrZSBpdCBhIGJyb2FkY2FzdCBwYWNrZXQsIGlmIHJlcXVpcmVkICovCiAJaWYgKG1ha2VfYnJvYWRjYXN0KQotCQltZW1jcHkoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnLCBicm9hZGNhc3RBZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdF9hZGRyLCBFVEhfQUxFTik7CiAKIAkvKiByZXBhaXIgaWYgZW50cmllcyBpcyBsb25nZXIgdGhhbiBwYWNrZXQuICovCiAJaWYgKGluZm8tPnBhY2tldC5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCB2aXNfaW5mb19lbnRyeSkgPiB2aXNfaW5mb19sZW4pCkBAIC00NzQsOSArNTI0LDkgQEAKIAlpbmZvLT5wYWNrZXQudmlzX3R5cGUgPSBhdG9taWNfcmVhZCgmYmF0X3ByaXYtPnZpc19tb2RlKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwotCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnLCBicm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwogCWluZm8tPnBhY2tldC50dGwgPSBUVEw7Ci0JaW5mby0+cGFja2V0LnNlcW5vKys7CisJaW5mby0+cGFja2V0LnNlcW5vID0gaHRvbmwobnRvaGwoaW5mby0+cGFja2V0LnNlcW5vKSArIDEpOwogCWluZm8tPnBhY2tldC5lbnRyaWVzID0gMDsKIAogCWlmIChpbmZvLT5wYWNrZXQudmlzX3R5cGUgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkgewpAQCAtNTQ3LDcgKzU5Nyw3IEBACiAJCWlmIChpbmZvID09IG15X3Zpc19pbmZvKQkvKiBuZXZlciBwdXJnZSBvd24gZGF0YS4gKi8KIAkJCWNvbnRpbnVlOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkJICAgICAgIGluZm8tPmZpcnN0X3NlZW4gKyAoVklTX1RJTUVPVVQqSFopLzEwMDApKSB7CisJCQkgICAgICAgaW5mby0+Zmlyc3Rfc2VlbiArIFZJU19USU1FT1VUICogSFopKSB7CiAJCQloYXNoX3JlbW92ZV9idWNrZXQodmlzX2hhc2gsICZoYXNoaXQpOwogCQkJc2VuZF9saXN0X2RlbChpbmZvKTsKIAkJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKQEAgLTU5MSw3ICs2NDEsNyBAQAogCiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Ci0JbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0QWRkciwgRVRIX0FMRU4pOworCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdF9hZGRyLCBFVEhfQUxFTik7CiB9CiAKIHN0YXRpYyB2b2lkIHVuaWNhc3RfdmlzX3BhY2tldChzdHJ1Y3QgdmlzX2luZm8gKmluZm8sIGludCBwYWNrZXRfbGVuZ3RoKQpAQCAtNjI4LDExICs2NzgsMTEgQEAKIAlpbnQgcGFja2V0X2xlbmd0aDsKIAogCWlmIChpbmZvLT5wYWNrZXQudHRsIDwgMikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2OiBFcnJvciAtIGNhbid0IHNlbmQgdmlzIHBhY2tldDogdHRsIGV4Y2VlZGVkXG4iKTsKKwkJcHJfd2FybmluZygiRXJyb3IgLSBjYW4ndCBzZW5kIHZpcyBwYWNrZXQ6IHR0bCBleGNlZWRlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQltZW1jcHkoaW5mby0+cGFja2V0LnNlbmRlcl9vcmlnLCBtYWluSWZBZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGluZm8tPnBhY2tldC5zZW5kZXJfb3JpZywgbWFpbl9pZl9hZGRyLCBFVEhfQUxFTik7CiAJaW5mby0+cGFja2V0LnR0bC0tOwogCiAJcGFja2V0X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCkgKwpAQCAtNjkwLDE4ICs3NDAsMTggQEAKIAogCXZpc19oYXNoID0gaGFzaF9uZXcoMjU2LCB2aXNfaW5mb19jbXAsIHZpc19pbmZvX2Nob29zZSk7CiAJaWYgKCF2aXNfaGFzaCkgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgaW5pdGlhbGl6ZSB2aXNfaGFzaFxuIik7CisJCXByX2VycigiQ2FuJ3QgaW5pdGlhbGl6ZSB2aXNfaGFzaFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAogCW15X3Zpc19pbmZvID0ga21hbGxvYygxMDAwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW15X3Zpc19pbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBpbml0aWFsaXplIHZpcyBwYWNrZXRcbiIpOworCQlwcl9lcnIoIkNhbid0IGluaXRpYWxpemUgdmlzIHBhY2tldFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAogCS8qIHByZWZpbGwgdGhlIHZpcyBpbmZvICovCi0JbXlfdmlzX2luZm8tPmZpcnN0X3NlZW4gPSBqaWZmaWVzIC0gYXRvbWljX3JlYWQoJnZpc19pbnRlcnZhbCk7CisJbXlfdmlzX2luZm8tPmZpcnN0X3NlZW4gPSBqaWZmaWVzIC0gbXNlY3NfdG9famlmZmllcyhWSVNfSU5URVJWQUwpOwogCUlOSVRfTElTVF9IRUFEKCZteV92aXNfaW5mby0+cmVjdl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmbXlfdmlzX2luZm8tPnNlbmRfbGlzdCk7CiAJa3JlZl9pbml0KCZteV92aXNfaW5mby0+cmVmY291bnQpOwpAQCAtNzEzLDEyICs3NjMsMTEgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzZW5kX2xpc3QpOwogCi0JbWVtY3B5KG15X3Zpc19pbmZvLT5wYWNrZXQudmlzX29yaWcsIG1haW5JZkFkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobXlfdmlzX2luZm8tPnBhY2tldC5zZW5kZXJfb3JpZywgbWFpbklmQWRkciwgRVRIX0FMRU4pOworCW1lbWNweShteV92aXNfaW5mby0+cGFja2V0LnZpc19vcmlnLCBtYWluX2lmX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobXlfdmlzX2luZm8tPnBhY2tldC5zZW5kZXJfb3JpZywgbWFpbl9pZl9hZGRyLCBFVEhfQUxFTik7CiAKIAlpZiAoaGFzaF9hZGQodmlzX2hhc2gsIG15X3Zpc19pbmZvKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgb3duIHZpcyBwYWNrZXQgaW50byBoYXNoXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBhZGQgb3duIHZpcyBwYWNrZXQgaW50byBoYXNoXG4iKTsKIAkJLyogbm90IGluIGhhc2gsIG5lZWQgdG8gcmVtb3ZlIGl0IG1hbnVhbGx5LiAqLwogCQlrcmVmX3B1dCgmbXlfdmlzX2luZm8tPnJlZmNvdW50LCBmcmVlX2luZm8pOwogCQlnb3RvIGVycjsKQEAgLTc2NCw1ICs4MTMsNSBAQAogc3RhdGljIHZvaWQgc3RhcnRfdmlzX3RpbWVyKHZvaWQpCiB7CiAJcXVldWVfZGVsYXllZF93b3JrKGJhdF9ldmVudF93b3JrcXVldWUsICZ2aXNfdGltZXJfd3EsCi0JCQkgICAoYXRvbWljX3JlYWQoJnZpc19pbnRlcnZhbCkgKiBIWikgLyAxMDAwKTsKKwkJCSAgIChWSVNfSU5URVJWQUwgKiBIWikgLyAxMDAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKaW5kZXggOWMxZmQ3Ny4uYmIxM2JmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKQEAgLTE5LDcgKzE5LDEwIEBACiAgKgogICovCiAKLSNkZWZpbmUgVklTX1RJTUVPVVQJCTIwMDAwMAorI2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVklTX0hfCisjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9WSVNfSF8KKworI2RlZmluZSBWSVNfVElNRU9VVAkJMjAwCS8qIHRpbWVvdXQgb2YgdmlzIHBhY2tldHMgaW4gc2Vjb25kcyAqLwogCiBzdHJ1Y3QgdmlzX2luZm8gewogCXVuc2lnbmVkIGxvbmcgICAgICAgZmlyc3Rfc2VlbjsKQEAgLTQ0LDExICs0Nyw3IEBACiAJdWludDhfdCBtYWNbRVRIX0FMRU5dOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBoYXNodGFibGVfdCAqdmlzX2hhc2g7Ci1leHRlcm4gc3BpbmxvY2tfdCB2aXNfaGFzaF9sb2NrOwotCi1zc2l6ZV90IHZpc19maWxsX2J1ZmZlcl90ZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBjaGFyICpidWZmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2ZmKTsKK2ludCB2aXNfc2VxX3ByaW50X3RleHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCk7CiB2b2lkIHJlY2VpdmVfc2VydmVyX3N5bmNfcGFja2V0KHN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYsCiAJCQkJc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQsCiAJCQkJaW50IHZpc19pbmZvX2xlbik7CkBAIC01NywzICs1Niw1IEBACiAJCQkJICBpbnQgdmlzX2luZm9fbGVuKTsKIGludCB2aXNfaW5pdCh2b2lkKTsKIHZvaWQgdmlzX3F1aXQodm9pZCk7CisKKyNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfVklTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL1RPRE8KaW5kZXggMTVjOTM0OC4uYjEwZjczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvVE9ETwpAQCAtMiw3ICsyLDYgQEAKIAktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMKIAktIExpbmRlbnQKIAktIHJlbW92ZSBhbGwgd3JhcHBlcnMKLQktIHJlbW92ZSB0eXBlZGVmcwogCS0gYXVkaXQgdXNlcnNwYWNlIGludGVyZmFjZQogCS0gcmVzZXJ2ZSBtYWpvciBudW1iZXIKIAktIGNsZWFudXAgdGhlIGluZGl2aWR1YWwgY29tZWRpIGRyaXZlcnMgYXMgd2VsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IGFlYjJjMDAuLjE0MDkxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTE4NDUsOCArMTg0NSwxNSBAQAogCQl9CiAJfQogCi0JaWYgKGRldi0+YXR0YWNoZWQgJiYgZGV2LT51c2VfY291bnQgPT0gMCAmJiBkZXYtPm9wZW4pCi0JCWRldi0+b3BlbihkZXYpOworCWlmIChkZXYtPmF0dGFjaGVkICYmIGRldi0+dXNlX2NvdW50ID09IDAgJiYgZGV2LT5vcGVuKSB7CisJCWludCByYyA9IGRldi0+b3BlbihkZXYpOworCQlpZiAocmMgPCAwKSB7CisJCQltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5tb2R1bGUpOworCQkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQogCiAJZGV2LT51c2VfY291bnQrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKaW5kZXggNGViMmI3Ny4uNjhhYTkxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCkBAIC01Myw2MiArNTMsNiBAQAogCUNPTUVESV9NSU5PUlZFUlNJT04sIENPTUVESV9NSUNST1ZFUlNJT04pCiAjZGVmaW5lIENPTUVESV9SRUxFQVNFIFZFUlNJT04KIAotI2RlZmluZSBDT01FRElfSU5JVENMRUFOVVBfTk9NT0RVTEUoeCkJCQkJCVwKLQlzdGF0aWMgaW50IF9faW5pdCB4ICMjIF9pbml0X21vZHVsZSh2b2lkKQkJCVwKLQkJe3JldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCYoeCkpOyB9CQkJXAotCXN0YXRpYyB2b2lkIF9fZXhpdCB4ICMjIF9jbGVhbnVwX21vZHVsZSh2b2lkKQkJCVwKLQkJe2NvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmKHgpKTsgfQkJCVwKLQltb2R1bGVfaW5pdCh4ICMjIF9pbml0X21vZHVsZSk7CQkJCQlcCi0JbW9kdWxlX2V4aXQoeCAjIyBfY2xlYW51cF9tb2R1bGUpOwotCi0jZGVmaW5lIENPTUVESV9NT0RVTEVfTUFDUk9TCQkJCQkJXAotCU1PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsJCVwKLQlNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CQkJXAotCU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotI2RlZmluZSBDT01FRElfSU5JVENMRUFOVVAoeCkJCQkJCQlcCi0JQ09NRURJX01PRFVMRV9NQUNST1MJCVwKLQlDT01FRElfSU5JVENMRUFOVVBfTk9NT0RVTEUoeCkKLQotI2RlZmluZSBDT01FRElfUENJX0lOSVRDTEVBTlVQX05PTU9EVUxFKGNvbWVkaV9kcml2ZXIsIHBjaV9pZF90YWJsZSkgXAotCXN0YXRpYyBpbnQgX19kZXZpbml0IGNvbWVkaV9kcml2ZXIgIyMgX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBcCi0JCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpIFwKLQl7IFwKLQkJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBjb21lZGlfZHJpdmVyLmRyaXZlcl9uYW1lKTsgXAotCX0gXAotCXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjb21lZGlfZHJpdmVyICMjIF9wY2lfcmVtb3ZlKFwKLQkJc3RydWN0IHBjaV9kZXYgKmRldikgXAotCXsgXAotCQljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsgXAotCX0gXAotCXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjb21lZGlfZHJpdmVyICMjIF9wY2lfZHJpdmVyID0gXAotCXsgXAotCQkuaWRfdGFibGUgPSBwY2lfaWRfdGFibGUsIFwKLQkJLnByb2JlID0gJmNvbWVkaV9kcml2ZXIgIyMgX3BjaV9wcm9iZSwgXAotCQkucmVtb3ZlID0gX19kZXZleGl0X3AoJmNvbWVkaV9kcml2ZXIgIyMgX3BjaV9yZW1vdmUpIFwKLQl9OyBcCi0Jc3RhdGljIGludCBfX2luaXQgY29tZWRpX2RyaXZlciAjIyBfaW5pdF9tb2R1bGUodm9pZCkgXAotCXsgXAotCQlpbnQgcmV0dmFsOyBcCi0JCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmNvbWVkaV9kcml2ZXIpOyBcCi0JCWlmIChyZXR2YWwgPCAwKSBcCi0JCQlyZXR1cm4gcmV0dmFsOyBcCi0JCQljb21lZGlfZHJpdmVyICMjIF9wY2lfZHJpdmVyLm5hbWUgPSBcCi0JCQkJKGNoYXIgKiljb21lZGlfZHJpdmVyLmRyaXZlcl9uYW1lOyBcCi0JCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjb21lZGlfZHJpdmVyICMjIF9wY2lfZHJpdmVyKTsgXAotCX0gXAotCXN0YXRpYyB2b2lkIF9fZXhpdCBjb21lZGlfZHJpdmVyICMjIF9jbGVhbnVwX21vZHVsZSh2b2lkKSBcCi0JeyBcCi0JCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY29tZWRpX2RyaXZlciAjIyBfcGNpX2RyaXZlcik7IFwKLQkJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZjb21lZGlfZHJpdmVyKTsgXAotCX0gXAotCW1vZHVsZV9pbml0KGNvbWVkaV9kcml2ZXIgIyMgX2luaXRfbW9kdWxlKTsgXAotCW1vZHVsZV9leGl0KGNvbWVkaV9kcml2ZXIgIyMgX2NsZWFudXBfbW9kdWxlKTsKLQotI2RlZmluZSBDT01FRElfUENJX0lOSVRDTEVBTlVQKGNvbWVkaV9kcml2ZXIsIHBjaV9pZF90YWJsZSkgXAotCUNPTUVESV9NT0RVTEVfTUFDUk9TIFwKLQlDT01FRElfUENJX0lOSVRDTEVBTlVQX05PTU9EVUxFKGNvbWVkaV9kcml2ZXIsIHBjaV9pZF90YWJsZSkKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FETElOSwkJMHgxNDRhCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUNQCQkweDEwNGMKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT05URUMJCTB4MTIyMQpAQCAtMjg1LDcgKzIyOSw3IEBACiAKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqYXN5bmNfcXVldWU7CiAKLQl2b2lkICgqb3BlbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworCWludCAoKm9wZW4pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCmluZGV4IGZlNjM4MzAuLjk1MDQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTUuYwpAQCAtMTE3LDcgKzExNywxOCBAQAogCS5kZXRhY2ggPSBkZXZfODI1NV9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyXzgyNTUpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyXzgyNTVfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyXzgyNTUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyXzgyNTVfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl84MjU1KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyXzgyNTVfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyXzgyNTVfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgdm9pZCBkb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwogCkBAIC00NTcsMyArNDY4LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCmluZGV4IGUyMGMzNTQuLjlkZWYyMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCkBAIC00OSw3ICs0OSwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FjbDcyMjViKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hY2w3MjI1Yl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWNsNzIyNWIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FjbDcyMjViX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYWNsNzIyNWIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYWNsNzIyNWJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FjbDcyMjViX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBhY2w3MjI1Yl9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCkBAIC0xNTAsMyArMTYxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19zNTkzMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaAppbmRleCBjMzI4NGViLi44ZWQxOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19zNTkzMy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX3M1OTMzLmgKQEAgLTI0NywxNiArMjQ3LDE0IEBACiAvKiBidWlsZCBsaXN0IG9mIGFtY2MgY2FyZHMgaW4gdGhpcyBzeXN0ZW0gKi8KIHZvaWQgdl9wY2lfY2FyZF9saXN0X2luaXQodW5zaWduZWQgc2hvcnQgcGNpX3ZlbmRvciwgY2hhciBkaXNwbGF5KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpsYXN0OwogCWludCBpOwogCWludCBpX0NvdW50ID0gMDsKIAlhbWNjX2RldmljZXMgPSBOVUxMOwogCWxhc3QgPSBOVUxMOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPCAyOyBpX0NvdW50KyspIHsKIAkJCXBjaV92ZW5kb3IgPSBpX0FERElEQVRBRGV2aWNlSURbaV9Db3VudF07CiAJCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gcGNpX3ZlbmRvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCmluZGV4IGIxOGU4MWQuLjVlZDRiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKQEAgLTI1NDEsNyArMjU0MSw0MyBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFkZGlfYm9hcmQpLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRkaSwgYWRkaV9hcGNpX3RibCk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYWRkaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9hZGRpLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hZGRpX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hZGRpX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gYWRkaV9hcGNpX3RibCwKKwkucHJvYmUgPSAmZHJpdmVyX2FkZGlfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FkZGlfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hZGRpX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hZGRpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hZGRpX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2FkZGkuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGRpX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FkZGlfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGRpX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FkZGkpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYWRkaV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYWRkaV9jbGVhbnVwX21vZHVsZSk7CiAKIC8qCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwppbmRleCBiZWEzMjlmLi5lMDIxM2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogfTsKIAogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qgc3RyX0FuYWxvZ091dHB1dEhlYWRlciB7CiAJdW5zaWduZWQgc2hvcnQgd19OY2hhbm5lbDsKIAl1bnNpZ25lZCBjaGFyIGJfUmVzb2x1dGlvbjsKLX0gc3RyX0FuYWxvZ091dHB1dEhlYWRlcjsKK307CiAKIHN0cnVjdCBzdHJfQW5hbG9nSW5wdXRIZWFkZXIgewogCXVuc2lnbmVkIHNob3J0IHdfTmNoYW5uZWw7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAogaW50IGlfRWVwcm9tUmVhZEFubG9nT3V0cHV0SGVhZGVyKHVuc2lnbmVkIHNob3J0IHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAogCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgdW5zaWduZWQgc2hvcnQgd19BZGRyZXNzLAotCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKTsKKwlzdHJ1Y3Qgc3RyX0FuYWxvZ091dHB1dEhlYWRlciAqc19IZWFkZXIpOwogCiBpbnQgaV9FZXByb21SZWFkQW5sb2dJbnB1dEhlYWRlcih1bnNpZ25lZCBzaG9ydCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKIAljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHVuc2lnbmVkIHNob3J0IHdfQWRkcmVzcywKQEAgLTYzNSw3ICs2MzUsNyBAQAogCiB8IElucHV0IFBhcmFtZXRlcnMgIDogdW5zaWduZWQgaW50IGR3X0FkZHJlc3MgOiBQQ0kgZWVwcm9tIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgIHwKIAotfAkJICAgICAgdW5zaWduZWQgc2hvcnQgICAgd19vZmZzZXQgOiBPZmZzZXQgb2YgdGhlIGFkcmVzcyB0byByZWFkICAgICAgICAgICAgIHwKK3wJCSAgICAgIHVuc2lnbmVkIHNob3J0ICAgIHdfb2Zmc2V0IDogT2Zmc2V0IG9mIHRoZSBhZGRyZXNzIHRvIHJlYWQgICAgICAgICAgICAgfAogCiB8CQkgICAgICB1bnNpZ25lZCBzaG9ydCAqICAgcHdfVmFsdWUgOiBQQ0kgZWVwcm9tIDE2IGJpdCByZWFkIHZhbHVlLiAgICAgICAgICAgIHwKIApAQCAtODExLDcgKzgxMSw3IEBACiAJc3RydWN0IHN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgc19EaWdpdGFsSW5wdXRIZWFkZXI7CiAJc3RydWN0IHN0cl9EaWdpdGFsT3V0cHV0SGVhZGVyIHNfRGlnaXRhbE91dHB1dEhlYWRlcjsKIAkvKiBzdHJ1Y3Qgc3RyX1RpbWVyTWFpbkhlYWRlciAgICAgc19UaW1lck1haW5IZWFkZXIsc19XYXRjaGRvZ01haW5IZWFkZXI7ICovCi0Jc3RyX0FuYWxvZ091dHB1dEhlYWRlciBzX0FuYWxvZ091dHB1dEhlYWRlcjsKKwlzdHJ1Y3Qgc3RyX0FuYWxvZ091dHB1dEhlYWRlciBzX0FuYWxvZ091dHB1dEhlYWRlcjsKIAlzdHJ1Y3Qgc3RyX0FuYWxvZ0lucHV0SGVhZGVyIHNfQW5hbG9nSW5wdXRIZWFkZXI7CiAKIAkvKiBSZWFkIHNpemUgKi8KQEAgLTEwODEsNyArMTA4MSw3IEBACiAKIGludCBpX0VlcHJvbVJlYWRBbmxvZ091dHB1dEhlYWRlcih1bnNpZ25lZCBzaG9ydCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKIAljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHVuc2lnbmVkIHNob3J0IHdfQWRkcmVzcywKLQlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICpzX0hlYWRlcikKKwlzdHJ1Y3Qgc3RyX0FuYWxvZ091dHB1dEhlYWRlciAqc19IZWFkZXIpCiB7CiAJdW5zaWduZWQgc2hvcnQgd19UZW1wOwogCS8qICBObyBvZiBjaGFubmVscyBmb3IgMXN0IGhhcmQgY29tcG9uZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKaW5kZXggZjkzZGRkNC4uODUxZjcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpAQCAtMTA5MCwxMyArMTA5MCwxMyBAQAogICogYW5kIHB1dCBpbnRvIGludG8gYW4gYXJyYXkgYXJyYXkgdXNlZCBtYXkgYmUgZm9yIGRpZmZlcm5ldCBwYWdlcwogICovCiAKLQkJLyogIERNQSBTdGFydCBBZHJlc3MgTG93ICovCisJCS8qICBETUEgU3RhcnQgQWRkcmVzcyBMb3cgKi8KIAkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKIAkJb3V0dygoZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF0gJiAweEZGRkYpLAogCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwogCiAJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkvKiBETUEgU3RhcnQgQWRyZXNzIEhpZ2ggKi8KKwkJLyogRE1BIFN0YXJ0IEFkZHJlc3MgSGlnaCAqLwogCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CiAJCW91dHcoKGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3WzBdIC8gNjU1MzYpLApAQCAtMTczMywxMSArMTczMywxMSBAQAogCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1tuZXh0X2RtYV9idWZdOwogCQloaWdoX3dvcmQgPSB2YXIgLyA2NTUzNjsKIAotCQkvKiBETUEgU3RhcnQgQWRyZXNzIExvdyAqLworCQkvKiBETUEgU3RhcnQgQWRkcmVzcyBMb3cgKi8KIAkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKIAkJb3V0dyhsb3dfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwogCi0JCS8qIERNQSBTdGFydCBBZHJlc3MgSGlnaCAqLworCQkvKiBETUEgU3RhcnQgQWRkcmVzcyBIaWdoICovCiAJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOwogCQlvdXR3KGhpZ2hfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzAzNS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8wMzUuYwppbmRleCA2ZGZjYmU4Li40YzAwZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzAzNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKQEAgLTUsMyArNSw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMDM1IgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xMDMyLmMKaW5kZXggNDcyMmVjOC4uNzgzMWNlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xMDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xMDMyLmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMTAzMiIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCmluZGV4IGRiM2RhZmQuLmJmZDg0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzE1MDAiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MTYuYwppbmRleCBmNTkxYmFmLi5hMTJlMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MTYuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8xNTE2IgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTU2NC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKaW5kZXggNmY1YzkyMy4uMWI5ZDU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMTU2NCIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCmluZGV4IDFkOTI2YWQuLmQ1NDIxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzE2eHgiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYwppbmRleCA3MjY2ZTQxLi5mYTUwYzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8yMDE2IgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKaW5kZXggZjY3ZGE5NC4uMDczYThhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDMyLmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMjAzMiIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIyMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCmluZGV4IGJjN2Y3ZDYuLmFkZmJiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzIyMDAiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYwppbmRleCBkODZjNDIwLi4wMGFjNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8zMDAxIgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMTIwLmMKaW5kZXggMGIyMmNmMS4uYzM1NTE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMTIwLmMKQEAgLTMsMyArMyw3IEBACiAjZGVmaW5lIEFERElEQVRBX0RSSVZFUl9OQU1FCSJhZGRpX2FwY2lfMzEyMCIKIAogI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCmluZGV4IGQ4YTAxYjEuLmRkMmMxZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCkBAIC0zLDMgKzMsNyBAQAogI2RlZmluZSBBRERJREFUQV9EUklWRVJfTkFNRQkiYWRkaV9hcGNpXzM1MDEiCiAKICNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzN4eHguYwppbmRleCA5NDJiYzllLi4wMzE2MWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzN4eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzN4eHguYwpAQCAtMywzICszLDcgQEAKICNkZWZpbmUgQURESURBVEFfRFJJVkVSX05BTUUJImFkZGlfYXBjaV8zeHh4IgogCiAjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKaW5kZXggNzEyYjllMC4uMDczZDAyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKQEAgLTExOSw3ICsxMTksNDMgQEAKIAkuZGV0YWNoID0gcGNpNjIwOF9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2k2MjA4LCBwY2k2MjA4X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfcGNpNjIwOF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2k2MjA4LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9wY2k2MjA4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9wY2k2MjA4X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpNjIwOF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9wY2k2MjA4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2k2MjA4X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpNjIwOF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpNjIwOCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpNjIwOF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2k2MjA4LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpNjIwOF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2k2MjA4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpNjIwOF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2k2MjA4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaTYyMDhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaTYyMDhfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IHBjaTYyMDhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IGJ1cywgaW50IHNsb3QpOwogc3RhdGljIGludApAQCAtMzE1LDEyICszNTEsMTAgQEAKIAogc3RhdGljIGludCBwY2k2MjA4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBidXMsIGludCBzbG90KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKIAlpbnQgaTsKIAotCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldiAhPSBOVUxMOwotCSAgICAgcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2KSB7CiAJCWlmIChwY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTkspIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaTYyMDhfYm9hcmRzKTsgaSsrKSB7CiAJCQkJaWYgKHBjaTYyMDhfYm9hcmRzW2ldLmRldl9pZCA9PQpAQCAtNDA4LDMgKzQ0Miw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3MjMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyMzAuYwppbmRleCAyNGE4MmViLi43MmE3MjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyMzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTcyMzAuYwpAQCAtOTAsNyArOTAsNyBAQAogc3RhdGljIGludCBhZGxfcGNpNzIzMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgYnVzLCBzbG90OwogCkBAIC0xMDYsMTAgKzEwNiw3IEBACiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkJcGNpZGV2ICE9IE5VTEw7Ci0JCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKLQorCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgogCQkJcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k3MjMwKSB7CiAJCQlpZiAoYnVzIHx8IHNsb3QpIHsKQEAgLTIwMyw0ICsyMDAsNDYgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTcyMzAsIGFkbF9wY2k3MjMwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYWRsX3BjaTcyMzBfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYWRsX3BjaTcyMzAuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2FkbF9wY2k3MjMwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGFkbF9wY2k3MjMwX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2FkbF9wY2k3MjMwX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FkbF9wY2k3MjMwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpNzIzMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYWRsX3BjaTcyMzBfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYWRsX3BjaTcyMzAuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpNzIzMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZGxfcGNpNzIzMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FkbF9wY2k3MjMwX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FkbF9wY2k3MjMwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkbF9wY2k3MjMwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hZGxfcGNpNzIzMF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKaW5kZXggODYwMjg2NS4uZjI4ZmU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKQEAgLTc3LDcgKzc3LDcgQEAKIHN0YXRpYyBpbnQgYWRsX3BjaTcyOTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgYnVzLCBzbG90OwogCWludCByZXQ7CkBAIC05NCwxMCArOTQsNyBAQAogCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKLQorCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgogCQkgICAgcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k3Mjk2KSB7CiAJCQlpZiAoYnVzIHx8IHNsb3QpIHsKQEAgLTE3Nyw0ICsxNzQsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTcyOTYsIGFkbF9wY2k3Mjk2X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYWRsX3BjaTcyOTZfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYWRsX3BjaTcyOTYuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2FkbF9wY2k3Mjk2X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGFkbF9wY2k3Mjk2X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2FkbF9wY2k3Mjk2X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FkbF9wY2k3Mjk2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpNzI5Nik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYWRsX3BjaTcyOTZfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYWRsX3BjaTcyOTYuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpNzI5Nl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZGxfcGNpNzI5Nl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FkbF9wY2k3Mjk2X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FkbF9wY2k3Mjk2KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkbF9wY2k3Mjk2X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hZGxfcGNpNzI5Nl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3NDMyLmMKaW5kZXggYjVhOTQ5OS4uMjYyZGE3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3NDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3NDMyLmMKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQgYWRsX3BjaTc0MzJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgYnVzLCBzbG90OwogCkBAIC0xMDIsMTAgKzEwMiw3IEBACiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgewotCisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LICYmCiAJCSAgICBwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BDSTc0MzIpIHsKIAkJCWlmIChidXMgfHwgc2xvdCkgewpAQCAtMjEwLDQgKzIwNyw0NiBAQAogCXJldHVybiAyOwogfQogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hZGxfcGNpNzQzMiwgYWRsX3BjaTc0MzJfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9hZGxfcGNpNzQzMl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9hZGxfcGNpNzQzMi5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYWRsX3BjaTc0MzJfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gYWRsX3BjaTc0MzJfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYWRsX3BjaTc0MzJfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYWRsX3BjaTc0MzJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FkbF9wY2k3NDMyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hZGxfcGNpNzQzMl9wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9hZGxfcGNpNzQzMi5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FkbF9wY2k3NDMyX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FkbF9wY2k3NDMyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYWRsX3BjaTc0MzJfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYWRsX3BjaTc0MzIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYWRsX3BjaTc0MzJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2FkbF9wY2k3NDMyX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k4MTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYwppbmRleCBkYTI1NmExLi43NjdhNTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiBzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IGJ1cywgc2xvdDsKIApAQCAtMTQyLDEwICsxNDIsNyBAQAogCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKLQorCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgogCQkgICAgcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k4MTY0KSB7CiAJCQlpZiAoYnVzIHx8IHNsb3QpIHsKQEAgLTM4OSw0ICszODYsNDYgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTgxNjQsIGFkbF9wY2k4MTY0X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYWRsX3BjaTgxNjRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYWRsX3BjaTgxNjQuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2FkbF9wY2k4MTY0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hZGxfcGNpODE2NF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGFkbF9wY2k4MTY0X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2FkbF9wY2k4MTY0X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hZGxfcGNpODE2NF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FkbF9wY2k4MTY0X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hZGxfcGNpODE2NCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYWRsX3BjaTgxNjRfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYWRsX3BjaTgxNjQuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hZGxfcGNpODE2NF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZGxfcGNpODE2NF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FkbF9wY2k4MTY0X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2FkbF9wY2k4MTY0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FkbF9wY2k4MTY0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hZGxfcGNpODE2NF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKaW5kZXggMzlkMTEyYi4uYjJhMDJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKQEAgLTM4LDggKzM4LDggQEAKICAgLSBkb19pbnNuIHJlYWQvd3JpdGUKICAgLSBhaV9kb19jbWQgbW9kZSB3aXRoIHRoZSBmb2xsb3dpbmcgc291cmNlczoKIAotICAgIC0gc3RhcnRfc3JjIAkJVFJJR19OT1cKLSAgICAtIHNjYW5fYmVnaW5fc3JjIAkJVFJJR19GT0xMT1cJVFJJR19USU1FUglUUklHX0VYVAorICAgIC0gc3RhcnRfc3JjCQkJVFJJR19OT1cKKyAgICAtIHNjYW5fYmVnaW5fc3JjCQlUUklHX0ZPTExPVwlUUklHX1RJTUVSCVRSSUdfRVhUCiAgICAgLSBjb252ZXJ0X3NyYwkJCQlUUklHX1RJTUVSCVRSSUdfRVhUCiAgICAgLSBzY2FuX2VuZF9zcmMJCVRSSUdfQ09VTlQKICAgICAtIHN0b3Bfc3JjCQkJVFJJR19DT1VOVAlUUklHX05PTkUKQEAgLTY4LDggKzY4LDkgQEAKIFRPRE86CiAKICAgLSBSZWFsbHkgdGVzdCBpbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5LgotICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgUENJLTkxMTFERyB3aXRoIGEgcHJvYmUgcm91dGluZSB0byBpZGVudGlmeSB0aGUgY2FyZCB0eXBlCi0gICAgKHBlcmhhcHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2hhbm5lbCBudW1iZXIgcmVhZGJhY2sgb2YgdGhlIEEvRCBEYXRhIHJlZ2lzdGVyKS4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFBDSS05MTExREcgd2l0aCBhIHByb2JlIHJvdXRpbmUgdG8gaWRlbnRpZnkgdGhlIGNhcmQKKyAgICB0eXBlIChwZXJoYXBzIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNoYW5uZWwgbnVtYmVyIHJlYWRiYWNrIG9mIHRoZSBBL0QgRGF0YQorICAgIHJlZ2lzdGVyKS4KICAgLSBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgc3VwcG9ydC4KIAogKi8KQEAgLTgzLDEyICs4NCwxMiBAQAogI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKIAotI2RlZmluZSBQQ0k5MTExX0RSSVZFUl9OQU1FIAkiYWRsX3BjaTkxMTEiCi0jZGVmaW5lIFBDSTkxMTFfSFJfREVWSUNFX0lEIAkweDkxMTEKKyNkZWZpbmUgUENJOTExMV9EUklWRVJfTkFNRQkiYWRsX3BjaTkxMTEiCisjZGVmaW5lIFBDSTkxMTFfSFJfREVWSUNFX0lECTB4OTExMQogCiAvKiAgVE9ETzogQWRkIG90aGVyIHBjaTkxMTEgYm9hcmQgaWQgKi8KIAotI2RlZmluZSBQQ0k5MTExX0lPX1JBTkdFIAkweDAxMDAKKyNkZWZpbmUgUENJOTExMV9JT19SQU5HRQkweDAxMDAKIAogI2RlZmluZSBQQ0k5MTExX0ZJRk9fSEFMRl9TSVpFCTUxMgogCkBAIC0xMzQsMjcgKzEzNSwyOSBAQAogCiAvKiBJTyBhZGRyZXNzIG1hcCAqLwogCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSAJCQkweDAwCS8qICBBRCBEYXRhIHN0b3JlZCBpbiBGSUZPICovCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUIAkJCTB4MDAKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPIAkJCTB4MDIKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9FWFRFTkRFRF9JT19QT1JUUyAJCTB4MDQKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX0NPTlRST0wgCQkweDA2CS8qICBDaGFubmVsIHNlbGVjdGlvbiAqLwotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0sgCQkweDA2Ci0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFIAkJMHgwOAotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSyAJCTB4MDgKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTCAJCTB4MEEKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSyAJMHgwQQotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIgCQkweDBFCi0jZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wgCQkweDBDCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRQkJCTB4MDAgLyogQUQgRGF0YSBzdG9yZWQKKwkJCQkJCQkJaW4gRklGTyAqLworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0RBX09VVFBVVAkJCTB4MDAKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPCQkJMHgwMgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0VYVEVOREVEX0lPX1BPUlRTCQkweDA0CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MCQkweDA2IC8qIENoYW5uZWwKKwkJCQkJCQkJc2VsZWN0aW9uICovCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9SRUFEQkFDSwkJMHgwNgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOUFVUX1NJR05BTF9SQU5HRQkJMHgwOAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSwkJMHgwOAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1RSSUdHRVJfTU9ERV9DT05UUk9MCQkweDBBCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0sJMHgwQQorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIJCTB4MEUKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTAkJMHgwQwogI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8wCQkJMHg0MAogI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xCQkJMHg0MgotI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8yIAkJMFg0NAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8yCQkJMFg0NAogI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09OVFJPTAkJCTB4NDYKLSNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ0xFQVIgCQkweDQ4CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NMRUFSCQkweDQ4CiAKLSNkZWZpbmUgUENJOTExMV9UUklHR0VSX01BU0sgCQkJCTB4MEYKLSNkZWZpbmUgUENJOTExMV9QVFJHX09GRiAJCQkJKDAgPDwgMykKLSNkZWZpbmUgUENJOTExMV9QVFJHX09OIAkJCQkoMSA8PCAzKQorI2RlZmluZSBQQ0k5MTExX1RSSUdHRVJfTUFTSwkJCQkweDBGCisjZGVmaW5lIFBDSTkxMTFfUFRSR19PRkYJCQkJKDAgPDwgMykKKyNkZWZpbmUgUENJOTExMV9QVFJHX09OCQkJCQkoMSA8PCAzKQogI2RlZmluZSBQQ0k5MTExX0VJVFNfRVhURVJOQUwJCQkJKDEgPDwgMikKICNkZWZpbmUgUENJOTExMV9FSVRTX0lOVEVSTkFMCQkJCSgwIDw8IDIpCiAjZGVmaW5lIFBDSTkxMTFfVFBTVF9TT0ZUV0FSRV9UUklHR0VSCQkJKDAgPDwgMSkKQEAgLTE2NCw5ICsxNjcsOSBAQAogCiAjZGVmaW5lIFBDSTkxMTFfSVNDMF9TRVRfSVJRX09OX0VORElOR19PRl9BRF9DT05WRVJTSU9OICgwIDw8IDApCiAjZGVmaW5lIFBDSTkxMTFfSVNDMF9TRVRfSVJRX09OX0ZJRk9fSEFMRl9GVUxMCQkoMSA8PCAwKQotI2RlZmluZSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9USU1FUl9USUNLICAJCSgwIDw8IDEpCi0jZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX0VYVF9UUkcgCQkoMSA8PCAxKQotI2RlZmluZSBQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFIAkJCSgwIDw8IDIpCisjZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX1RJTUVSX1RJQ0sJCSgwIDw8IDEpCisjZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX0VYVF9UUkcJCQkoMSA8PCAxKQorI2RlZmluZSBQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFCQkJKDAgPDwgMikKICNkZWZpbmUgUENJOTExMV9GRkVOX1NFVF9GSUZPX0RJU0FCTEUJCQkoMSA8PCAyKQogCiAjZGVmaW5lIFBDSTkxMTFfQ0hBTk5FTF9NQVNLCQkJCTB4MEYKQEAgLTE3Nyw3ICsxODAsNyBAQAogI2RlZmluZSBQQ0k5MTExX0ZJRk9fRlVMTF9NQVNLCQkJCTB4NDAKICNkZWZpbmUgUENJOTExMV9BRF9CVVNZX01BU0sJCQkJMHg4MAogCi0jZGVmaW5lIFBDSTkxMTFfSU9fQkFTRSBkZXYtPmlvYmFzZQorI2RlZmluZSBQQ0k5MTExX0lPX0JBU0UgKGRldi0+aW9iYXNlKQogCiAvKgogICogRGVmaW5lIGlubGluZWQgZnVuY3Rpb24KQEAgLTE4OSw4ICsxOTIsOSBAQAogI2RlZmluZSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncykgXAogICBvdXRiKGZsYWdzLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTCkKIAotI2RlZmluZSBwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19nZXQoKSBcCi0gICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX01PREVfSU5URVJSVVBUX1JFQURCQUNLKSA+PiA0KSAmMHgwMykKKyNkZWZpbmUgcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fZ2V0KCkJCQkJICAgXAorICAoKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSykgPj4gNCkgXAorICAgJjB4MDMpCiAKICNkZWZpbmUgcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fc2V0KGZsYWdzKSBcCiAgIG91dGIoZmxhZ3MsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKQpAQCAtMjAxLDQ1ICsyMDUsNTYgQEAKICNkZWZpbmUgcGNpOTExMV9zb2Z0d2FyZV90cmlnZ2VyKCkgXAogICBvdXRiKDAsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIpCiAKLSNkZWZpbmUgcGNpOTExMV9maWZvX3Jlc2V0KCkgXAotICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsgXAotICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19ESVNBQkxFLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7IFwKLSAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCkKKyNkZWZpbmUgcGNpOTExMV9maWZvX3Jlc2V0KCkgZG8gewkJCQkJXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUsCQkJCQlcCisgICAgICAgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOwkJXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19ESVNBQkxFLAkJCQkJXAorICAgICAgIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsJCVwKKyAgb3V0YihQQ0k5MTExX0ZGRU5fU0VUX0ZJRk9fRU5BQkxFLAkJCQkJXAorICAgICAgIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsJCVwKKyAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9fZnVsbCgpIFwKICAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAotICAgIFBDSTkxMTFfRklGT19GVUxMX01BU0spPT0wKQorICAgIFBDSTkxMTFfRklGT19GVUxMX01BU0spID09IDApCiAKICNkZWZpbmUgcGNpOTExMV9pc19maWZvX2hhbGZfZnVsbCgpIFwKICAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAotICAgIFBDSTkxMTFfRklGT19IQUxGX0ZVTExfTUFTSyk9PTApCisgICAgUENJOTExMV9GSUZPX0hBTEZfRlVMTF9NQVNLKSA9PSAwKQogCiAjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19lbXB0eSgpIFwKICAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAotICAgIFBDSTkxMTFfRklGT19FTVBUWV9NQVNLKT09MCkKKyAgICBQQ0k5MTExX0ZJRk9fRU1QVFlfTUFTSykgPT0gMCkKIAotI2RlZmluZSBwY2k5MTExX2FpX2NoYW5uZWxfc2V0KGNoYW5uZWwpIFwKLSAgb3V0YigoY2hhbm5lbCkmUENJOTExMV9DSEFOTkVMX01BU0ssIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfQ09OVFJPTCkKKyNkZWZpbmUgcGNpOTExMV9haV9jaGFubmVsX3NldChjaGFubmVsKQkJCQkJXAorICBvdXRiKChjaGFubmVsKSZQQ0k5MTExX0NIQU5ORUxfTUFTSywJCQkJCVwKKyAgICAgICBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX0NPTlRST0wpCiAKLSNkZWZpbmUgcGNpOTExMV9haV9jaGFubmVsX2dldCgpIFwKLSAgaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0spJlBDSTkxMTFfQ0hBTk5FTF9NQVNLCisjZGVmaW5lIHBjaTkxMTFfYWlfY2hhbm5lbF9nZXQoKQkJCQkJXAorICAoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0spCQlcCisgICAmUENJOTExMV9DSEFOTkVMX01BU0spCiAKLSNkZWZpbmUgcGNpOTExMV9haV9yYW5nZV9zZXQocmFuZ2UpIFwKLSAgb3V0YigocmFuZ2UpJlBDSTkxMTFfUkFOR0VfTUFTSywgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFKQorI2RlZmluZSBwY2k5MTExX2FpX3JhbmdlX3NldChyYW5nZSkJCQkJCVwKKyAgb3V0YigocmFuZ2UpJlBDSTkxMTFfUkFOR0VfTUFTSywJCQkJCVwKKyAgICAgICBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlBVVF9TSUdOQUxfUkFOR0UpCiAKLSNkZWZpbmUgcGNpOTExMV9haV9yYW5nZV9nZXQoKSBcCi0gIGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9SQU5HRV9TVEFUVVNfUkVBREJBQ0spJlBDSTkxMTFfUkFOR0VfTUFTSworI2RlZmluZSBwY2k5MTExX2FpX3JhbmdlX2dldCgpCQkJCQkJXAorICAoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykJCVwKKyAgICZQQ0k5MTExX1JBTkdFX01BU0spCiAKLSNkZWZpbmUgcGNpOTExMV9haV9nZXRfZGF0YSgpIFwKLSAgKChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSk+PjQpJlBDSTkxMTFfQUlfUkVTT0xVVElPTl9NQVNLKSBcCi0gIF4gUENJOTExMV9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAorI2RlZmluZSBwY2k5MTExX2FpX2dldF9kYXRhKCkJCQkJCQlcCisgICgoKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKT4+NCkJCVwKKyAgICAmUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0spCQkJCQlcCisgICBeIFBDSTkxMTFfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQpCiAKLSNkZWZpbmUgcGNpOTExMV9ocl9haV9nZXRfZGF0YSgpIFwKLSAgKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKSAmIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLKSBcCi0gIF4gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAorI2RlZmluZSBwY2k5MTExX2hyX2FpX2dldF9kYXRhKCkJCQkJCVwKKyAgKChpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSkJCQlcCisgICAgJiBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT05fTUFTSykJCQkJCVwKKyAgIF4gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVCkKIAotI2RlZmluZSBwY2k5MTExX2FvX3NldF9kYXRhKGRhdGEpIFwKLSAgb3V0dyhkYXRhJlBDSTkxMTFfQU9fUkVTT0xVVElPTl9NQVNLLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9EQV9PVVRQVVQpCisjZGVmaW5lIHBjaTkxMTFfYW9fc2V0X2RhdGEoZGF0YSkJCQkJCVwKKyAgb3V0dyhkYXRhJlBDSTkxMTFfQU9fUkVTT0xVVElPTl9NQVNLLAkJCQkJXAorICAgICAgIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0RBX09VVFBVVCkKIAogI2RlZmluZSBwY2k5MTExX2RpX2dldF9iaXRzKCkgXAogICBpbncoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTykKQEAgLTI4NCwxMiArMjk5LDExIEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpOTExMV9wY2lfdGFibGUpID0gewotCXsKLQlQQ0lfVkVORE9SX0lEX0FETElOSywgUENJOTExMV9IUl9ERVZJQ0VfSUQsIFBDSV9BTllfSUQsCi0JCSAgICBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQkgICAgLyogeyBQQ0lfVkVORE9SX0lEX0FETElOSywgUENJOTExMV9IR19ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgKi8KLQl7Ci0JMH0KKwl7IFBDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0k5MTExX0hSX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgIDAsIDAsIDAgfSwKKwkvKiB7IFBDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0k5MTExX0hHX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgKiAgIDAsIDAsIDAgfSwgKi8KKwl7IDAgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTkxMTFfcGNpX3RhYmxlKTsKQEAgLTMzNyw3ICszNTEsNDMgQEAKIAkuZGV0YWNoID0gcGNpOTExMV9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKHBjaTkxMTFfZHJpdmVyLCBwY2k5MTExX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2k5MTExX2RyaXZlcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIHBjaTkxMTFfZHJpdmVyLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHBjaTkxMTFfZHJpdmVyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaTkxMTFfZHJpdmVyX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gcGNpOTExMV9wY2lfdGFibGUsCisJLnByb2JlID0gJnBjaTkxMTFfZHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJnBjaTkxMTFfZHJpdmVyX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY2k5MTExX2RyaXZlcl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZwY2k5MTExX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwY2k5MTExX2RyaXZlcl9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKXBjaTkxMTFfZHJpdmVyLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2k5MTExX2RyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBjaTkxMTFfZHJpdmVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2k5MTExX2RyaXZlcl9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJnBjaTkxMTFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGNpOTExMV9kcml2ZXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQocGNpOTExMV9kcml2ZXJfY2xlYW51cF9tb2R1bGUpOwogCiAvKiAgUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogCkBAIC0zNDUsNyArMzk1LDggQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZTsKIAl1bnNpZ25lZCBsb25nIGlvX3JhbmdlOwkvKiAgUENJNjUwMyBpbyByYW5nZSAqLwogCi0JdW5zaWduZWQgbG9uZyBsY3JfaW9fYmFzZTsJLyogIExvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBsY3JfaW9fYmFzZTsgLyogTG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlciBiYXNlCisJCQkJICAgICogYWRkcmVzcyAqLwogCXVuc2lnbmVkIGxvbmcgbGNyX2lvX3JhbmdlOwogCiAJaW50IHN0b3BfY291bnRlcjsKQEAgLTM1OCw3ICs0MDksOCBAQAogCiAJaW50IGFvX3JlYWRiYWNrOwkvKiAgTGFzdCB3cml0dGVuIGFuYWxvZyBvdXRwdXQgZGF0YSAqLwogCi0JdW5zaWduZWQgaW50IHRpbWVyX2Rpdmlzb3JfMTsJLyogIERpdmlzb3IgdmFsdWVzIGZvciB0aGUgODI1NCB0aW1lciBwYWNlciAqLworCXVuc2lnbmVkIGludCB0aW1lcl9kaXZpc29yXzE7IC8qIERpdmlzb3IgdmFsdWVzIGZvciB0aGUgODI1NCB0aW1lcgorCQkJCSAgICAgICAqIHBhY2VyICovCiAJdW5zaWduZWQgaW50IHRpbWVyX2Rpdmlzb3JfMjsKIAogCWludCBpc192YWxpZDsJCS8qICBJcyBkZXZpY2UgdmFsaWQgKi8KQEAgLTM2Niw3ICs0MTgsNyBAQAogCXNob3J0IGFpX2JvdW5jZV9idWZmZXJbMiAqIFBDSTkxMTFfRklGT19IQUxGX1NJWkVdOwogfTsKIAotI2RlZmluZSBkZXZfcHJpdmF0ZSAJKChzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIGRldl9wcml2YXRlCSgoc3RydWN0IHBjaTkxMTFfcHJpdmF0ZV9kYXRhICopZGV2LT5wcml2YXRlKQogCiAvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAgUExYOTA1MCBTRUNUSU9OICovCkBAIC01NDgsMTAgKzYwMCwxMiBAQAogCiAvKiAgVGVzdCBhbmFsb2cgaW5wdXQgY29tbWFuZCAqLwogCi0jZGVmaW5lIHBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoc3JjLCBmbGFncykgXAotICB0bXAgPSBzcmM7IFwKLSAgc3JjICY9IGZsYWdzOyBcCi0gIGlmICghc3JjIHx8IHRtcCAhPSBzcmMpIGVycm9yKysKKyNkZWZpbmUgcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhzcmMsIGZsYWdzKQlkbyB7CQkJXAorCQl0bXAgPSBzcmM7CQkJCQkJXAorCQlzcmMgJj0gZmxhZ3M7CQkJCQkJXAorCQlpZiAoIXNyYyB8fCB0bXAgIT0gc3JjKQkJCQkJXAorCQkJZXJyb3IrKzsJCQkJCVwKKwl9IHdoaWxlIChmYWxzZSk7CiAKIHN0YXRpYyBpbnQKIHBjaTkxMTFfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTU3NSw3ICs2MjksOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIDE7CiAKLQkvKiAgc3RlcCAyIDogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJLyogIHN0ZXAgMiA6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiAgY29tcGF0aWJsZSAqLwogCiAJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XKQogCQllcnJvcisrOwpAQCAtNjM3LDcgKzY5Miw4IEBACiAJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9uczsKIAkJZXJyb3IrKzsKIAl9Ci0JaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSAmJiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSkgeworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkgICAgJiYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkpIHsKIAkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CiAJCWVycm9yKys7CiAJfQpAQCAtMTIxNiw3ICsxMjcyLDcgQEAKIHsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOwogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSwgaW9fcmFuZ2UsIGxjcl9pb19iYXNlLCBsY3JfaW9fcmFuZ2U7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSBOVUxMOwogCWludCBlcnJvciwgaTsKIAljb25zdCBzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqYm9hcmQ7CiAKQEAgLTEyMjYsMTcgKzEyODIsMTcgQEAKIAogCXByaW50aygiY29tZWRpJWQ6ICIgUENJOTExMV9EUklWRVJfTkFNRSAiIGRyaXZlclxuIiwgZGV2LT5taW5vcik7CiAKLQlmb3IgKHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaV9kZXZpY2UgIT0gTlVMTDsKLQkgICAgIHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2aWNlKSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpX2RldmljZSkgewogCQlpZiAocGNpX2RldmljZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQURMSU5LKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcGNpOTExMV9ib2FyZF9uYnI7IGkrKykgewogCQkJCWlmIChwY2k5MTExX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0KIAkJCQkgICAgcGNpX2RldmljZS0+ZGV2aWNlKSB7Ci0JCQkJCS8qICB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KKwkJCQkJLyogd2FzIGEgcGFydGljdWxhciBidXMvc2xvdAorCQkJCQkgKiByZXF1ZXN0ZWQ/ICovCiAJCQkJCWlmICgoaXQtPm9wdGlvbnNbMF0gIT0gMCkKIAkJCQkJICAgIHx8IChpdC0+b3B0aW9uc1sxXSAhPSAwKSkgewotCQkJCQkJLyogIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJCQkvKiBhcmUgd2Ugb24gdGhlIHdyb25nCisJCQkJCQkgKiBidXMvc2xvdD8gKi8KIAkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQogCQkJCQkJICAgIGl0LT5vcHRpb25zWzBdCiAJCQkJCQkgICAgfHwKQEAgLTEyNzIsNyArMTMyOCw4IEBACiAKIAkvKiAgVE9ETzogV2FybiBhYm91dCBub24tdGVzdGVkIGJvYXJkcy4gKi8KIAotCS8qICBSZWFkIGxvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMxXS4gKi8KKwkvKiAgUmVhZCBsb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworCSAqICBbUENJX0JBU0VfQUREUkVTUyAjMV0uICovCiAKIAlsY3JfaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2aWNlLCAxKTsKIAlsY3JfaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZpY2UsIDEpOwpAQCAtMTM5OSwzICsxNDU2LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCmluZGV4IGNjZWY1NDkuLmIwZTM5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCkBAIC0yODksNyArMjg5LDQzIEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTkxMTgsIHBjaTkxMThfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2k5MTE4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3BjaTkxMTguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaTkxMThfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3BjaTkxMThfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2k5MTE4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaTkxMThfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3BjaTkxMThfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2k5MTE4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2k5MTE4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9wY2k5MTE4X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaTkxMTguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2k5MTE4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjaTkxMThfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2k5MTE4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaTkxMTgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNpOTExOF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpOTExOF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0cnVjdCBwY2k5MTE4X3ByaXZhdGUgewogCXVuc2lnbmVkIGxvbmcgaW9iYXNlX2E7CS8qIGJhc2Urc2l6ZSBmb3IgQU1DQyBjaGlwICovCkBAIC0yNDMyLDMgKzI0NjgsNyBAQAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCmluZGV4IGYzYmE2NDUuLjRiNDcwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKQEAgLTQwMiw0ICs0MDIsMTkgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hZHExMmIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FkcTEyYl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYWRxMTJiKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hZHExMmJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hZHExMmIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYWRxMTJiX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hZHExMmJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCmluZGV4IDY3YzRmMTEuLmJkZDY5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAvKgogRHJpdmVyOiBhZHZfcGNpMTcxMAogRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTcxMCwgUENJLTE3MTBIRywgUENJLTE3MTEsIFBDSS0xNzEzLAotICAgICAgICAgICAgIEFkdmFudGVjaCBQQ0ktMTcyMCwgUENJLTE3MzEKKwkgICAgIEFkdmFudGVjaCBQQ0ktMTcyMCwgUENJLTE3MzEKIEF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CiBEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0ktMTcxMCAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMEhHIChwY2kxNzEwaGcpLAogICBQQ0ktMTcxMSAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMywgUENJLTE3MjAsCkBAIC0zNyw4ICszNyw4IEBACiBDb25maWd1cmF0aW9uIG9wdGlvbnM6CiAgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKICAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKLSAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQotICAgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisJSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKwlkZXZpY2Ugd2lsbCBiZSB1c2VkLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNTAsNyArNTAsOSBAQAogI2luY2x1ZGUgIjgyNTMuaCIKICNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCiAKLSNkZWZpbmUgUENJMTcxeF9QQVJBTk9JRENIRUNLCS8qIGlmIGRlZmluZWQsIHRoZW4gaXMgdXNlZCBjb2RlIHdoaWNoIGNvbnRyb2wgY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQgc2FtcGxlICovCisjZGVmaW5lIFBDSTE3MXhfUEFSQU5PSURDSEVDSwkvKiBpZiBkZWZpbmVkLCB0aGVuIGlzIHVzZWQgY29kZSB3aGljaCBjb250cm9sCisJCQkJICogY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQKKwkJCQkgKiBzYW1wbGUgKi8KIAogI3VuZGVmIFBDSTE3MVhfRVhUREVCVUcKIApAQCAtNzAsOCArNzIsOCBAQAogI2RlZmluZSBUWVBFX1BDSTE3MTMJMgogI2RlZmluZSBUWVBFX1BDSTE3MjAJMwogCi0jZGVmaW5lIElPUkFOR0VfMTcxeCAJMzIKLSNkZWZpbmUgSU9SQU5HRV8xNzIwIAkxNgorI2RlZmluZSBJT1JBTkdFXzE3MXgJMzIKKyNkZWZpbmUgSU9SQU5HRV8xNzIwCTE2CiAKICNkZWZpbmUgUENJMTcxeF9BRF9EQVRBCSAwCS8qIFI6ICAgQS9EIGRhdGEgKi8KICNkZWZpbmUgUENJMTcxeF9TT0ZUVFJHCSAwCS8qIFc6ICAgc29mdCB0cmlnZ2VyIGZvciBBL0QgKi8KQEAgLTkxLDEzICs5MywxNSBAQAogI2RlZmluZSBQQ0kxNzF4X0NOVDIJMjgJLyogUi9XOiA4MjU0IGNvdW50ZXIgMiAqLwogI2RlZmluZSBQQ0kxNzF4X0NOVENUUkwJMzAJLyogVzogICA4MjU0IGNvdW50ZXIgY29udHJvbCAqLwogCi0vKiB1cHBlciBiaXRzIGZyb20gc3RhdHVzIHJlZ2lzdGVyIChQQ0kxNzF4X1NUQVRVUykgKGxvd2VyIGlzIHNhbWUgd290aCBjb250cm9sIHJlZykgKi8KKy8qIHVwcGVyIGJpdHMgZnJvbSBzdGF0dXMgcmVnaXN0ZXIgKFBDSTE3MXhfU1RBVFVTKSAobG93ZXIgaXMgc2FtZSB3aXRoIGNvbnRyb2wKKyAqIHJlZykgKi8KICNkZWZpbmUJU3RhdHVzX0ZFCTB4MDEwMAkvKiAxPUZJRk8gaXMgZW1wdHkgKi8KICNkZWZpbmUgU3RhdHVzX0ZICTB4MDIwMAkvKiAxPUZJRk8gaXMgaGFsZiBmdWxsICovCiAjZGVmaW5lIFN0YXR1c19GRgkweDA0MDAJLyogMT1GSUZPIGlzIGZ1bGwsIGZhdGFsIGVycm9yICovCiAjZGVmaW5lIFN0YXR1c19JUlEJMHgwODAwCS8qIDE9SVJRIG9jY3VyZWQgKi8KIC8qIGJpdHMgZnJvbSBjb250cm9sIHJlZ2lzdGVyIChQQ0kxNzF4X0NPTlRST0wpICovCi0jZGVmaW5lIENvbnRyb2xfQ05UMAkweDAwNDAJLyogMT1DTlQwIGhhdmUgZXh0ZXJuYWwgc291cmNlLCAwPWhhdmUgaW50ZXJuYWwgMTAwa0h6IHNvdXJjZSAqLworI2RlZmluZSBDb250cm9sX0NOVDAJMHgwMDQwCS8qIDE9Q05UMCBoYXZlIGV4dGVybmFsIHNvdXJjZSwKKwkJCQkgKiAwPWhhdmUgaW50ZXJuYWwgMTAwa0h6IHNvdXJjZSAqLwogI2RlZmluZSBDb250cm9sX09ORUZICTB4MDAyMAkvKiAxPUlSUSBvbiBGSUZPIGlzIGhhbGYgZnVsbCwgMD1ldmVyeSBzYW1wbGUgKi8KICNkZWZpbmUgQ29udHJvbF9JUlFFTgkweDAwMTAJLyogMT1lbmFibGUgSVJRICovCiAjZGVmaW5lIENvbnRyb2xfR0FURQkweDAwMDgJLyogMT1lbmFibGUgZXh0ZXJuYWwgdHJpZ2dlciBHQVRFICg4MjU0PykgKi8KQEAgLTExMiw3ICsxMTYsOCBAQAogI2RlZmluZSBDb3VudGVyX1JXMCAgICAgMHgwMDEwCS8qIFJXMC9SVzEgc2VsZWN0IHJlYWQvd3JpdGUgbW9kZSAqLwogI2RlZmluZSBDb3VudGVyX1JXMSAgICAgMHgwMDIwCiAjZGVmaW5lIENvdW50ZXJfU0MwICAgICAweDAwNDAJLyogU2VsZWN0IENvdW50ZXIuIE9ubHkgMDAgb3IgMTEgbWF5ICovCi0jZGVmaW5lIENvdW50ZXJfU0MxICAgICAweDAwODAJLyogYmUgdXNlZCwgMDAgZm9yIENOVDAsIDExIGZvciByZWFkLWJhY2sgY29tbWFuZCAqLworI2RlZmluZSBDb3VudGVyX1NDMSAgICAgMHgwMDgwCS8qIGJlIHVzZWQsIDAwIGZvciBDTlQwLAorCQkJCSAqIDExIGZvciByZWFkLWJhY2sgY29tbWFuZCAqLwogCiAjZGVmaW5lIFBDSTE3MjBfREEwCSAwCS8qIFc6ICAgRC9BIHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgUENJMTcyMF9EQTEJIDIJLyogVzogICBEL0EgcmVnaXN0ZXIgMSAqLwpAQCAtMTM4LDggKzE0Myw4IEBACiAJCQkJCQkJICB9CiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwXzNbXSA9Ci0gICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDEwLCAweDExLCAweDEyLCAweDEzIH07CitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwXzNbXSA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwKKwkJCQkJICAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMyB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMTcxMGhnID0geyAxMiwgewogCQkJCQkJCSAgIEJJUF9SQU5HRSg1KSwKQEAgLTE1NywxMCArMTYyLDkgQEAKIAkJCQkJCQkgICB9CiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwaGdbXSA9Ci0gICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDEwLCAweDExLCAweDEyLAotCTB4MTMKLX07CitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxNzEwaGdbXSA9IHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwKKwkJCQkJICAgICAgMHgwNSwgMHgwNiwgMHgwNywgMHgxMCwgMHgxMSwKKwkJCQkJICAgICAgMHgxMiwgMHgxMyB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMTd4MSA9IHsgNSwgewogCQkJCQkJCUJJUF9SQU5HRSgxMCksCkBAIC0zMDEsNyArMzA1LDggQEAKIAl1bnNpZ25lZCBpbnQgYWlfdGltZXIxOwkvKiAgdGltZXJzICovCiAJdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKIAlzaG9ydCBhb19kYXRhWzRdOwkvKiAgZGF0YSBvdXRwdXQgYnVmZmVyICovCi0JdW5zaWduZWQgaW50IGNudDBfd3JpdGVfd2FpdDsJLyogIGFmdGVyIGEgd3JpdGUsIHdhaXQgZm9yIHVwZGF0ZSBvZiB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwl1bnNpZ25lZCBpbnQgY250MF93cml0ZV93YWl0OwkvKiBhZnRlciBhIHdyaXRlLCB3YWl0IGZvciB1cGRhdGUgb2YgdGhlCisJCQkJCSAqIGludGVybmFsIHN0YXRlICovCiB9OwogCiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQpAQCAtMzI0LDcgKzMyOSw5IEBACiBzdGF0aWMgaW50IHBjaTE3MXhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXhvbmVjaGFuW10gPSB7IDB4MDAwMCwgMHgwMTAxLCAweDAyMDIsIDB4MDMwMywgMHgwNDA0LCAweDA1MDUsIDB4MDYwNiwgMHgwNzA3LAkvKiAgdXNlZCBmb3IgZ2FpbiBsaXN0IHByb2dyYW1taW5nICovCisvKiAgdXNlZCBmb3IgZ2FpbiBsaXN0IHByb2dyYW1taW5nICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG11eG9uZWNoYW5bXSA9IHsKKwkweDAwMDAsIDB4MDEwMSwgMHgwMjAyLCAweDAzMDMsIDB4MDQwNCwgMHgwNTA1LCAweDA2MDYsIDB4MDcwNywKIAkweDA4MDgsIDB4MDkwOSwgMHgwYTBhLCAweDBiMGIsIDB4MGMwYywgMHgwZDBkLCAweDBlMGUsIDB4MGYwZiwKIAkweDEwMTAsIDB4MTExMSwgMHgxMjEyLCAweDEzMTMsIDB4MTQxNCwgMHgxNTE1LCAweDE2MTYsIDB4MTcxNywKIAkweDE4MTgsIDB4MTkxOSwgMHgxYTFhLCAweDFiMWIsIDB4MWMxYywgMHgxZDFkLCAweDFlMWUsIDB4MWYxZgpAQCAtNzc0LDcgKzc4MSw4IEBACiAJfQogCiAJaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkKLQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7IC8qIGFsbCBkYXRhCisJCQkJCQkJCSAgICBzYW1wbGVkICovCiAJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOwogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CkBAIC0xNTU5LDcgKzE1NjcsOCBAQAogCQlzLT5tYXhkYXRhID0gMTsKIAkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CiAJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7Ci0JCXMtPmlvX2JpdHMgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2RvY2hhbikgLSAxOwkvKiBhbGwgYml0cyBvdXRwdXQgKi8KKwkJLyogYWxsIGJpdHMgb3V0cHV0ICovCisJCXMtPmlvX2JpdHMgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2RvY2hhbikgLSAxOwogCQlzLT5zdGF0ZSA9IDA7CiAJCXMtPmluc25fYml0cyA9IHBjaTE3MXhfaW5zbl9iaXRzX2RvOwogCQlzdWJkZXYrKzsKQEAgLTE2MDksNyArMTYxOCw0NyBAQAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MTAsIHBjaTE3MTBfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2kxNzEwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3BjaTE3MTAuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaTE3MTBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3BjaTE3MTBfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2kxNzEwX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaTE3MTBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3BjaTE3MTBfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2kxNzEwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2kxNzEwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9wY2kxNzEwX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaTE3MTAuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2kxNzEwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjaTE3MTBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2kxNzEwX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaTE3MTApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNpMTcxMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpMTcxMF9jbGVhbnVwX21vZHVsZSk7CiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcyMy5jCmluZGV4IDlmZThmY2MuLmIxMzNiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcyMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcyMy5jCkBAIC00OTYsNCArNDk2LDQ0IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MjMsIHBjaTE3MjNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2kxNzIzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3BjaTE3MjMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaTE3MjNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3BjaTE3MjNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2kxNzIzX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaTE3MjNfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3BjaTE3MjNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2kxNzIzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2kxNzIzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9wY2kxNzIzX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaTE3MjMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2kxNzIzX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjaTE3MjNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2kxNzIzX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaTE3MjMpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNpMTcyM19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpMTcyM19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKaW5kZXggZTQyNGEwYy4uZDAxOGJiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKQEAgLTgsOCArOCw4IEBACiAvKgogRHJpdmVyOiBhZHZfcGNpX2RpbwogRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTczMCwgUENJLTE3MzMsIFBDSS0xNzM0LCBQQ0ktMTczNVUsCi0gICAgICAgICAgICAgUENJLTE3MzZVUCwgUENJLTE3NTAsIFBDSS0xNzUxLCBQQ0ktMTc1MiwgUENJLTE3NTMvRSwKLSAgICAgICAgICAgICBQQ0ktMTc1NCwgUENJLTE3NTYsIFBDSS0xNzYyCisJUENJLTE3MzZVUCwgUENJLTE3NTAsIFBDSS0xNzUxLCBQQ0ktMTc1MiwgUENJLTE3NTMvRSwKKwlQQ0ktMTc1NCwgUENJLTE3NTYsIFBDSS0xNzYyCiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgogRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MzAgKGFkdl9wY2lfZGlvKSwgUENJLTE3MzMsCiAgIFBDSS0xNzM0LCBQQ0ktMTczNVUsIFBDSS0xNzM2VVAsIFBDSS0xNzUwLApAQCAtMjQsOCArMjQsOCBAQAogQ29uZmlndXJhdGlvbiBvcHRpb25zOgogICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCiAgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCi0gICAgICAgICAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKLSAgICAgICAgICBkZXZpY2Ugd2lsbCBiZSB1c2VkLgorCUlmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCisJZGV2aWNlIHdpbGwgYmUgdXNlZC4KIAogKi8KIApAQCAtNjcsOSArNjcsMTIgQEAKIAogI2RlZmluZSBNQVhfRElfU1VCREVWUwkyCS8qIG1heCBudW1iZXIgb2YgREkgc3ViZGV2aWNlcyBwZXIgY2FyZCAqLwogI2RlZmluZSBNQVhfRE9fU1VCREVWUwkyCS8qIG1heCBudW1iZXIgb2YgRE8gc3ViZGV2aWNlcyBwZXIgY2FyZCAqLwotI2RlZmluZSBNQVhfRElPX1NVQkRFVkcJMgkvKiBtYXggbnVtYmVyIG9mIERJTyBzdWJkZXZpY2VzIGdyb3VwIHBlciBjYXJkICovCi0jZGVmaW5lIE1BWF84MjU0X1NVQkRFVlMgICAxCS8qIG1heCBudW1iZXIgb2YgODI1NCBjb3VudGVyIHN1YmRldnMgcGVyIGNhcmQgKi8KLQkJCQkvKiAoY291bGQgYmUgbW9yZSB0aGFuIG9uZSA4MjU0IHBlciBzdWJkZXZpY2UpICovCisjZGVmaW5lIE1BWF9ESU9fU1VCREVWRwkyCS8qIG1heCBudW1iZXIgb2YgRElPIHN1YmRldmljZXMgZ3JvdXAgcGVyCisJCQkJICogY2FyZCAqLworI2RlZmluZSBNQVhfODI1NF9TVUJERVZTICAgMQkvKiBtYXggbnVtYmVyIG9mIDgyNTQgY291bnRlciBzdWJkZXZzIHBlcgorCQkJCSAqIGNhcmQgKi8KKwkJCQkvKiAoY291bGQgYmUgbW9yZSB0aGFuIG9uZSA4MjU0IHBlcgorCQkJCSAqIHN1YmRldmljZSkgKi8KIAogI2RlZmluZSBTSVpFXzgyNTQJICAgNAkvKiA4MjU0IElPIHNwYWNlIGxlbmd0aCAqLwogI2RlZmluZSBTSVpFXzgyNTUJICAgNAkvKiA4MjU1IElPIHNwYWNlIGxlbmd0aCAqLwpAQCAtODQsNyArODcsOCBAQAogI2RlZmluZSBQQ0kxNzMwX0RPCSAgIDIJLyogVzogICBEaWdpdGFsIG91dHB1dCAwLTE1ICovCiAjZGVmaW5lIFBDSTE3MzNfSURJCSAgIDAJLyogUjogICBJc29sYXRlZCBkaWdpdGFsIGlucHV0ICAwLTMxICovCiAjZGVmaW5lCVBDSTE3MzBfM19JTlRfRU4JMHgwOAkvKiBSL1c6IGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMgKi8KLSNkZWZpbmUJUENJMTczMF8zX0lOVF9SRgkweDBjCS8qIFIvVzogc2V0IGZhbGxpbmcvcmFpc2luZyBlZGdlIGZvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfUkYJMHgwYwkvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IKKwkJCQkJICogaW50ZXJydXB0cyAqLwogI2RlZmluZQlQQ0kxNzMwXzNfSU5UX0NMUgkweDEwCS8qIFIvVzogY2xlYXIgaW50ZXJydXB0cyAqLwogI2RlZmluZSBQQ0kxNzM0X0lETwkgICAwCS8qIFc6ICAgSXNvbGF0ZWQgZGlnaXRhbCBvdXRwdXQgMC0zMSAqLwogI2RlZmluZSBQQ0kxNzN4X0JPQVJESUQJICAgNAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggZm9yIDE3MzAvMy80ICovCkBAIC05OSw3ICsxMDMsOCBAQAogI2RlZmluZSBQQ0kxNzM2X0lESSAgICAgICAgMAkvKiBSOiAgIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KICNkZWZpbmUgUENJMTczNl9JRE8gICAgICAgIDAJLyogVzogICBJc29sYXRlZCBkaWdpdGFsIG91dHB1dCAwLTE1ICovCiAjZGVmaW5lIFBDSTE3MzZfM19JTlRfRU4gICAgICAgIDB4MDgJLyogUi9XOiBlbmFibGUvZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0jZGVmaW5lIFBDSTE3MzZfM19JTlRfUkYgICAgICAgIDB4MGMJLyogUi9XOiBzZXQgZmFsbGluZy9yYWlzaW5nIGVkZ2UgZm9yIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9SRiAgICAgICAgMHgwYwkvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IKKwkJCQkJICogaW50ZXJydXB0cyAqLwogI2RlZmluZSBQQ0kxNzM2XzNfSU5UX0NMUiAgICAgICAweDEwCS8qIFIvVzogY2xlYXIgaW50ZXJydXB0cyAqLwogI2RlZmluZSBQQ0kxNzM2X0JPQVJESUQgICAgNAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggZm9yIDE3MzZVUCAqLwogI2RlZmluZSBQQ0kxNzM2X01BSU5SRUcgICAgMAkvKiBOb3JtYWwgcmVnaXN0ZXIgKDIpIGRvZXNuJ3Qgd29yayAqLwpAQCAtMTYxLDM3ICsxNjYsNjYgQEAKICNkZWZpbmUgSU5UQ1NSMwkJMHgzYgogCiAvKiAgUENJLTE3NjAgbWFpbGJveCBjb21tYW5kcyAqLwotI2RlZmluZSBDTURfQ2xlYXJJTUIyCQkweDAwCS8qIENsZWFyIElNQjIgc3RhdHVzIGFuZCByZXR1cm4gYWN0YXVsIERJIHN0YXR1cyBpbiBJTUIzICovCisjZGVmaW5lIENNRF9DbGVhcklNQjIJCTB4MDAJLyogQ2xlYXIgSU1CMiBzdGF0dXMgYW5kIHJldHVybiBhY3R1YWwKKwkJCQkJICogREkgc3RhdHVzIGluIElNQjMgKi8KICNkZWZpbmUgQ01EX1NldFJlbGF5c091dHB1dAkweDAxCS8qIFNldCByZWxheSBvdXRwdXQgZnJvbSBPTUIwICovCiAjZGVmaW5lIENNRF9HZXRSZWxheXNTdGF0dXMJMHgwMgkvKiBHZXQgcmVsYXkgc3RhdHVzIHRvIElNQjAgKi8KLSNkZWZpbmUgQ01EX1JlYWRDdXJyZW50U3RhdHVzCTB4MDcJLyogUmVhZCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHJlZ2lzdGVyIGluIE9NQjAsIHJlc3VsdCBpbiBJTUIwICovCi0jZGVmaW5lIENNRF9SZWFkRmlybXdhcmVWZXJzaW9uCTB4MGUJLyogUmVhZCB0aGUgZmlybXdhcmUgdmVyLiwgcmVzdWx0IGluIElNQjEuSU1CMCAqLwotI2RlZmluZSBDTURfUmVhZEhhcmR3YXJlVmVyc2lvbgkweDBmCS8qIFJlYWQgdGhlIGhhcmR3YXJlIHZlci4sIHJlc3VsdCBpbiBJTUIxLklNQjAgKi8KLSNkZWZpbmUgQ01EX0VuYWJsZUlESUZpbHRlcnMJMHgyMAkvKiBFbmFibGUgSURJIGZpbHRlcnMgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCi0jZGVmaW5lIENNRF9FbmFibGVJRElQYXR0ZXJuTWF0Y2ggMHgyMQkvKiBFbmFibGUgSURJIHBhdHRlcm4gbWF0Y2ggYmFzZWQgb24gYml0cyBpbiBPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJRElQYXR0ZXJuTWF0Y2gJMHgyMgkvKiBFbmFibGUgSURJIHBhdHRlcm4gbWF0Y2ggYmFzZWQgb24gYml0cyBpbiBPTUIwICovCi0jZGVmaW5lIENNRF9FbmFibGVJRElDb3VudGVycwkweDI4CS8qIEVuYWJsZSBJREkgY291bnRlcnMgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCi0jZGVmaW5lIENNRF9SZXNldElESUNvdW50ZXJzCTB4MjkJLyogUmVzZXQgSURJIGNvdW50ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCB0byBpdHMgcmVzZXQgdmFsdWVzICovCi0jZGVmaW5lIENNRF9PdmVyZmxvd0lESUNvdW50ZXJzCTB4MmEJLyogRW5hYmxlIElESSBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHRzICBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KLSNkZWZpbmUgQ01EX01hdGNoSW50SURJQ291bnRlcnMJMHgyYgkvKiBFbmFibGUgSURJIGNvdW50ZXJzIG1hdGNoIHZhbHVlIGludGVycnVwdHMgIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLwotI2RlZmluZSBDTURfRWRnZUlESUNvdW50ZXJzCTB4MmMJLyogU2V0IElESSB1cCBjb3VudGVycyBjb3VudCBlZGdlIChiaXQ9MCAtIHJpc2luZywgPTEgLSBmYWxsaW5nKSAqLwotI2RlZmluZSBDTURfR2V0SURJQ250Q3VyVmFsdWUJMHgyZgkvKiBSZWFkIElESXtPTUIwfSB1cCBjb3VudGVyIGN1cnJlbnQgdmFsdWUgKi8KLSNkZWZpbmUgQ01EX1NldElESTBDbnRSZXNldFZhbHVlIDB4NDAJLyogU2V0IElESTAgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREkxQ250UmVzZXRWYWx1ZSAweDQxCS8qIFNldCBJREkxIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJMkNudFJlc2V0VmFsdWUgMHg0MgkvKiBTZXQgSURJMiBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTNDbnRSZXNldFZhbHVlIDB4NDMJLyogU2V0IElESTMgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk0Q250UmVzZXRWYWx1ZSAweDQ0CS8qIFNldCBJREk0IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJNUNudFJlc2V0VmFsdWUgMHg0NQkvKiBTZXQgSURJNSBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTZDbnRSZXNldFZhbHVlIDB4NDYJLyogU2V0IElESTYgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk3Q250UmVzZXRWYWx1ZSAweDQ3CS8qIFNldCBJREk3IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJMENudE1hdGNoVmFsdWUgMHg0OAkvKiBTZXQgSURJMCBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTFDbnRNYXRjaFZhbHVlIDB4NDkJLyogU2V0IElESTEgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREkyQ250TWF0Y2hWYWx1ZSAweDRhCS8qIFNldCBJREkyIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJM0NudE1hdGNoVmFsdWUgMHg0YgkvKiBTZXQgSURJMyBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTRDbnRNYXRjaFZhbHVlIDB4NGMJLyogU2V0IElESTQgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCi0jZGVmaW5lIENNRF9TZXRJREk1Q250TWF0Y2hWYWx1ZSAweDRkCS8qIFNldCBJREk1IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLwotI2RlZmluZSBDTURfU2V0SURJNkNudE1hdGNoVmFsdWUgMHg0ZQkvKiBTZXQgSURJNiBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KLSNkZWZpbmUgQ01EX1NldElESTdDbnRNYXRjaFZhbHVlIDB4NGYJLyogU2V0IElESTcgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9SZWFkQ3VycmVudFN0YXR1cwkweDA3CS8qIFJlYWQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZQorCQkJCQkgKiByZWdpc3RlciBpbiBPTUIwLCByZXN1bHQgaW4gSU1CMCAqLworI2RlZmluZSBDTURfUmVhZEZpcm13YXJlVmVyc2lvbgkweDBlCS8qIFJlYWQgdGhlIGZpcm13YXJlIHZlci4sIHJlc3VsdCBpbgorCQkJCQkgKiBJTUIxLklNQjAgKi8KKyNkZWZpbmUgQ01EX1JlYWRIYXJkd2FyZVZlcnNpb24JMHgwZgkvKiBSZWFkIHRoZSBoYXJkd2FyZSB2ZXIuLCByZXN1bHQgaW4KKwkJCQkJICogSU1CMS5JTUIwICovCisjZGVmaW5lIENNRF9FbmFibGVJRElGaWx0ZXJzCTB4MjAJLyogRW5hYmxlIElESSBmaWx0ZXJzIGJhc2VkIG9uIGJpdHMgaW4KKwkJCQkJICogT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJUGF0dGVybk1hdGNoIDB4MjEJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uCisJCQkJCSAqIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJUGF0dGVybk1hdGNoCTB4MjIJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uCisJCQkJCSAqIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJQ291bnRlcnMJMHgyOAkvKiBFbmFibGUgSURJIGNvdW50ZXJzIGJhc2VkIG9uIGJpdHMgaW4KKwkJCQkJICogT01CMCAqLworI2RlZmluZSBDTURfUmVzZXRJRElDb3VudGVycwkweDI5CS8qIFJlc2V0IElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluCisJCQkJCSAqIE9NQjAgdG8gaXRzIHJlc2V0IHZhbHVlcyAqLworI2RlZmluZSBDTURfT3ZlcmZsb3dJRElDb3VudGVycwkweDJhCS8qIEVuYWJsZSBJREkgY291bnRlcnMgb3ZlcmZsb3cKKwkJCQkJICogaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCisjZGVmaW5lIENNRF9NYXRjaEludElESUNvdW50ZXJzCTB4MmIJLyogRW5hYmxlIElESSBjb3VudGVycyBtYXRjaCB2YWx1ZQorCQkJCQkgKiBpbnRlcnJ1cHRzICBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VkZ2VJRElDb3VudGVycwkweDJjCS8qIFNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAoYml0PTAKKwkJCQkJICogLSByaXNpbmcsID0xIC0gZmFsbGluZykgKi8KKyNkZWZpbmUgQ01EX0dldElESUNudEN1clZhbHVlCTB4MmYJLyogUmVhZCBJREl7T01CMH0gdXAgY291bnRlciBjdXJyZW50CisJCQkJCSAqIHZhbHVlICovCisjZGVmaW5lIENNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSAweDQwCS8qIFNldCBJREkwIENvdW50ZXIgUmVzZXQgVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMUNudFJlc2V0VmFsdWUgMHg0MQkvKiBTZXQgSURJMSBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTJDbnRSZXNldFZhbHVlIDB4NDIJLyogU2V0IElESTIgQ291bnRlciBSZXNldCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkzQ250UmVzZXRWYWx1ZSAweDQzCS8qIFNldCBJREkzIENvdW50ZXIgUmVzZXQgVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNENudFJlc2V0VmFsdWUgMHg0NAkvKiBTZXQgSURJNCBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTVDbnRSZXNldFZhbHVlIDB4NDUJLyogU2V0IElESTUgQ291bnRlciBSZXNldCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk2Q250UmVzZXRWYWx1ZSAweDQ2CS8qIFNldCBJREk2IENvdW50ZXIgUmVzZXQgVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJN0NudFJlc2V0VmFsdWUgMHg0NwkvKiBTZXQgSURJNyBDb3VudGVyIFJlc2V0IFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTBDbnRNYXRjaFZhbHVlIDB4NDgJLyogU2V0IElESTAgQ291bnRlciBNYXRjaCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkxQ250TWF0Y2hWYWx1ZSAweDQ5CS8qIFNldCBJREkxIENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMkNudE1hdGNoVmFsdWUgMHg0YQkvKiBTZXQgSURJMiBDb3VudGVyIE1hdGNoIFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTNDbnRNYXRjaFZhbHVlIDB4NGIJLyogU2V0IElESTMgQ291bnRlciBNYXRjaCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk0Q250TWF0Y2hWYWx1ZSAweDRjCS8qIFNldCBJREk0IENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNUNudE1hdGNoVmFsdWUgMHg0ZAkvKiBTZXQgSURJNSBDb3VudGVyIE1hdGNoIFZhbHVlCisJCQkJCSAqIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTZDbnRNYXRjaFZhbHVlIDB4NGUJLyogU2V0IElESTYgQ291bnRlciBNYXRjaCBWYWx1ZQorCQkJCQkgKiAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk3Q250TWF0Y2hWYWx1ZSAweDRmCS8qIFNldCBJREk3IENvdW50ZXIgTWF0Y2ggVmFsdWUKKwkJCQkJICogMjU2Kk9NQjErT01CMCAqLwogCiAjZGVmaW5lIE9NQkNNRF9SRVRSWQkweDAzCS8qIDMgdGltZXMgdHJ5IHJlcXVlc3QgYmVmb3JlIGVycm9yICovCiAKQEAgLTI0NCwxMTUgKzI3OCwxMTUgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGlvX2JvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CiAJeyJwY2kxNzMwIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczMCwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTczMCwKLQkge3sxNiwgUENJMTczMF9ESSwgMiwgMH0sIHsxNiwgUENJMTczMF9JREksIDIsIDB9fSwKLQkge3sxNiwgUENJMTczMF9ETywgMiwgMH0sIHsxNiwgUENJMTczMF9JRE8sIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MTYsIFBDSTE3MzBfREksIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURJLCAyLCAwfSB9LAorCSB7IHsxNiwgUENJMTczMF9ETywgMiwgMH0sIHsxNiwgUENJMTczMF9JRE8sIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3MzMiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMzLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzMzLAotCSB7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3MzNfSURJLCA0LCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3MzNfSURJLCA0LCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3MzQiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzM0LCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzM0LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3MzRfSURPLCA0LCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHszMiwgUENJMTczNF9JRE8sIDQsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3MzUiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzM1LCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzM1LAotCSB7ezMyLCBQQ0kxNzM1X0RJLCA0LCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3szMiwgUENJMTczNV9ETywgNCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezMyLCBQQ0kxNzM1X0RJLCA0LCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezMyLCBQQ0kxNzM1X0RPLCA0LCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgeyA0LCBQQ0kxNzM1X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCi0JIHt7MywgUENJMTczNV9DODI1NCwgMSwgMH19LAorCSB7IHszLCBQQ0kxNzM1X0M4MjU0LCAxLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzM2IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNiwgUENJMTczNl9NQUlOUkVHLAogCSBUWVBFX1BDSTE3MzYsCi0JIHt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTczNl9JREksIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzM2X0lETywgMiwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzM2X0lESSwgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTczNl9JRE8sIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3MzZfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUwLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUwLAotCSB7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NTBfSURJLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc1MF9JRE8sIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc1MF9JREksIDIsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NTBfSURPLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCiAJIHswLCAwLCAwLCAwfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTEiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUxLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUxLAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezQ4LCBQQ0kxNzUxX0RJTywgMiwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHs0OCwgUENJMTc1MV9ESU8sIDIsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezAsIDAsIDAsIDB9LAotCSB7ezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0gfSwKIAkgSU9fOGJ9LAogCXsicGNpMTc1MiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTIsIFBDSURJT19NQUlOUkVHLAogCSBUWVBFX1BDSTE3NTIsCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MzIsIFBDSTE3NTJfSURPLCAyLCAwfSwgezMyLCBQQ0kxNzUyX0lETzIsIDIsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHszMiwgUENJMTc1Ml9JRE8sIDIsIDB9LCB7MzIsIFBDSTE3NTJfSURPMiwgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAogCSB7NCwgUENJMTc1eF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAotCSB7ezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0gfSwKIAkgSU9fMTZifSwKIAl7InBjaTE3NTMiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUzLAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezk2LCBQQ0kxNzUzX0RJTywgNCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAorCSB7IHs5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezAsIDAsIDAsIDB9LAotCSB7ezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0gfSwKIAkgSU9fOGJ9LAogCXsicGNpMTc1M2UiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzUzRSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKLQkge3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7OTYsIFBDSTE3NTNFX0RJTywgNCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7OTYsIFBDSTE3NTNfRElPLCA0LCAwfSwgezk2LCBQQ0kxNzUzRV9ESU8sIDQsIDB9IH0sCiAJIHswLCAwLCAwLCAwfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzhifSwKIAl7InBjaTE3NTQiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzU0LCBQQ0lESU9fTUFJTlJFRywKIAkgVFlQRV9QQ0kxNzU0LAotCSB7ezMyLCBQQ0kxNzU0X0lESSwgMiwgMH0sIHszMiwgUENJMTc1NF9JREkyLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezMyLCBQQ0kxNzU0X0lESSwgMiwgMH0sIHszMiwgUENJMTc1NF9JREkyLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzE2Yn0sCiAJeyJwY2kxNzU2IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NiwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc1NiwKLQkge3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lESSwgMiwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURPLCAyLCAwfX0sCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURJLCAyLCAwfSB9LAorCSB7IHswLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzU2X0lETywgMiwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAogCSB7NCwgUENJMTc1eF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAotCSB7ezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0gfSwKIAkgSU9fMTZifSwKIAl7InBjaTE3NjAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYwLCAwLAogCSBUWVBFX1BDSTE3NjAsCi0JIHt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCS8qICBUaGlzIGNhcmQgaGF2ZSBvd24gc2V0dXAgd29yayAqLwotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9IH0sIC8qIFRoaXMgY2FyZCBoYXZlIG93biBzZXR1cCB3b3JrICovCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKKwkgeyB7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfSB9LAogCSB7MCwgMCwgMCwgMH0sCi0JIHt7MCwgMCwgMCwgMH19LAorCSB7IHswLCAwLCAwLCAwfSB9LAogCSBJT184Yn0sCiAJeyJwY2kxNzYyIiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MiwgUENJRElPX01BSU5SRUcsCiAJIFRZUEVfUENJMTc2MiwKLQkge3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX0lESSwgMSwgMH19LAotCSB7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NjJfUk8sIDEsIDB9fSwKLQkge3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkgeyB7MCwgMCwgMCwgMH0sIHsxNiwgUENJMTc2Ml9JREksIDEsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3NjJfUk8sIDEsIDB9IH0sCisJIHsgezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH0gfSwKIAkgezQsIFBDSTE3NjJfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKLQkge3swLCAwLCAwLCAwfX0sCisJIHsgezAsIDAsIDAsIDB9IH0sCiAJIElPXzE2Yn0KIH07CiAKQEAgLTM3MiwxMyArNDA2LDE2IEBACiAJY2hhciB2YWxpZDsJCS8qICBjYXJkIGlzIHVzYWJsZSAqLwogCWNoYXIgR2xvYmFsSXJxRW5hYmxlZDsJLyogIDE9IGFueSBJUlEgc291cmNlIGlzIGVuYWJsZWQgKi8KIAkvKiAgUENJLTE3NjAgc3BlY2lmaWMgZGF0YSAqLwotCXVuc2lnbmVkIGNoYXIgSURJQ250RW5hYmxlOwkvKiAgY291bnRlcidzIGNvdW50aW5nIGVuYWJsZSBzdGF0dXMgKi8KLQl1bnNpZ25lZCBjaGFyIElESUNudE92ZXJFbmFibGU7CS8qICBjb3VudGVyJ3Mgb3ZlcmZsb3cgaW50ZXJydXB0cyBlbmFibGUgc3RhdHVzICovCi0JdW5zaWduZWQgY2hhciBJRElDbnRNYXRjaEVuYWJsZTsJLyogIGNvdW50ZXIncyBtYXRjaCBpbnRlcnJ1cHRzIGVuYWJsZSBzdGF0dXMgKi8KLQl1bnNpZ25lZCBjaGFyIElESUNudEVkZ2U7CS8qICBjb3VudGVyJ3MgY291bnQgZWRnZSB2YWx1ZSAoYml0PTAgLSByaXNpbmcsID0xIC0gZmFsbGluZykgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudEVuYWJsZTsJLyogY291bnRlcidzIGNvdW50aW5nIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudE92ZXJFbmFibGU7CS8qIGNvdW50ZXIncyBvdmVyZmxvdyBpbnRlcnJ1cHRzIGVuYWJsZQorCQkJCQkgKiBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudE1hdGNoRW5hYmxlOwkvKiBjb3VudGVyJ3MgbWF0Y2ggaW50ZXJydXB0cworCQkJCQkJICogZW5hYmxlIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgSURJQ250RWRnZTsJLyogY291bnRlcidzIGNvdW50IGVkZ2UgdmFsdWUKKwkJCQkJICogKGJpdD0wIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCiAJdW5zaWduZWQgc2hvcnQgQ250UmVzVmFsdWVbOF07CS8qICBjb3VudGVycycgcmVzZXQgdmFsdWUgKi8KLQl1bnNpZ25lZCBzaG9ydCBDbnRNYXRjaFZhbHVlWzhdOwkvKiAgY291bnRlcnMnIG1hdGNoIGludGVycnVwdCB2YWx1ZSAqLwotCXVuc2lnbmVkIGNoYXIgSURJRmlsdGVyc0VuOwkvKiAgSURJJ3MgZGlnaXRhbCBmaWx0ZXJzIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBzaG9ydCBDbnRNYXRjaFZhbHVlWzhdOyAvKiAgY291bnRlcnMnIG1hdGNoIGludGVycnVwdCB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgSURJRmlsdGVyc0VuOyAvKiAgSURJJ3MgZGlnaXRhbCBmaWx0ZXJzIGVuYWJsZSBzdGF0dXMgKi8KIAl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoRW47CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIGVuYWJsZSBzdGF0dXMgKi8KIAl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoVmFsdWU7CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIHZhbHVlICovCiAJdW5zaWduZWQgc2hvcnQgSURJRmlsdHJMb3dbOF07CS8qICBJREkncyBmaWx0ZXIgdmFsdWUgbG93IHNpZ25hbCAqLwpAQCAtNjkxLDcgKzcyOCw4IEBACiAJfTsKIAl1bnNpZ25lZCBjaGFyIGltYls0XTsKIAotCWlmIChkZXZwcml2LT5DbnRSZXNWYWx1ZVtjaGFuXSAhPSAoZGF0YVswXSAmIDB4ZmZmZikpIHsJLyogIFNldCByZXNldCB2YWx1ZSBpZiBkaWZmZXJlbnQgKi8KKwkvKiBTZXQgcmVzZXQgdmFsdWUgaWYgZGlmZmVyZW50ICovCisJaWYgKGRldnByaXYtPkNudFJlc1ZhbHVlW2NoYW5dICE9IChkYXRhWzBdICYgMHhmZmZmKSkgewogCQlyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTcwNCw3ICs3NDIsOCBAQAogCWlmICghcmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKCEoYml0bWFzayAmIGRldnByaXYtPklESUNudEVuYWJsZSkpIHsJLyogIHN0YXJ0IGNvdW50ZXIgaWYgaXQgZG9uJ3QgcnVuICovCisJLyogIHN0YXJ0IGNvdW50ZXIgaWYgaXQgZG9uJ3QgcnVuICovCisJaWYgKCEoYml0bWFzayAmIGRldnByaXYtPklESUNudEVuYWJsZSkpIHsKIAkJb21iWzBdID0gYml0bWFzazsKIAkJb21iWzJdID0gQ01EX0VuYWJsZUlESUNvdW50ZXJzOwogCQlyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CkBAIC03NDAsMTIgKzc3OSwxNCBAQAogCWRldnByaXYtPklESUNudEVuYWJsZSA9IDA7CiAKIAlvbWJbMF0gPSAweDAwOwotCW9tYlsyXSA9IENNRF9PdmVyZmxvd0lESUNvdW50ZXJzOwkvKiAgZGlzYWJsZSBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHRzICovCisJb21iWzJdID0gQ01EX092ZXJmbG93SURJQ291bnRlcnM7IC8qIGRpc2FibGUgY291bnRlcnMgb3ZlcmZsb3cKKwkJCQkJICAgKiBpbnRlcnJ1cHRzICovCiAJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOwogCWRldnByaXYtPklESUNudE92ZXJFbmFibGUgPSAwOwogCiAJb21iWzBdID0gMHgwMDsKLQlvbWJbMl0gPSBDTURfTWF0Y2hJbnRJRElDb3VudGVyczsJLyogIGRpc2FibGUgY291bnRlcnMgbWF0Y2ggdmFsdWUgaW50ZXJydXB0cyAqLworCW9tYlsyXSA9IENNRF9NYXRjaEludElESUNvdW50ZXJzOyAvKiBkaXNhYmxlIGNvdW50ZXJzIG1hdGNoIHZhbHVlCisJCQkJCSAgICogaW50ZXJydXB0cyAqLwogCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKIAlkZXZwcml2LT5JRElDbnRNYXRjaEVuYWJsZSA9IDA7CiAKQEAgLTc2Niw3ICs4MDcsOCBAQAogCX0KIAogCW9tYlswXSA9IDB4ZmY7Ci0Jb21iWzJdID0gQ01EX1Jlc2V0SURJQ291bnRlcnM7CS8qICByZXNldCBJREkgdXAgY291bnRlcnMgdG8gcmVzZXQgdmFsdWVzICovCisJb21iWzJdID0gQ01EX1Jlc2V0SURJQ291bnRlcnM7IC8qIHJlc2V0IElESSB1cCBjb3VudGVycyB0byByZXNldAorCQkJCQkqIHZhbHVlcyAqLwogCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKIAogCW9tYlswXSA9IDB4MDA7CkBAIC04MDcsOSArODQ5LDEyIEBACiAJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0lETyArIDEpOwogCQkvKiBOTyBicmVhayB0aGVyZSEgKi8KIAljYXNlIFRZUEVfUENJMTczMzoKLQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfRU4pOwkvKiAgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0NMUik7CS8qICBjbGVhciBpbnRlcnJ1cHRzICovCi0JCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX1JGKTsJLyogIHNldCByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF8zX0lOVF9FTik7CisJCS8qIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDBmLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfQ0xSKTsKKwkJLyogc2V0IHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfUkYpOwogCQlicmVhazsKIAljYXNlIFRZUEVfUENJMTczNDoKIAkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzRfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KQEAgLTgzMCw0MyArODc1LDUzIEBACiAJY2FzZSBUWVBFX1BDSTE3MzY6CiAJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM2X0lETyk7CiAJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM2X0lETyArIDEpOwotCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNl8zX0lOVF9FTik7CS8qICBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJb3V0YigweDBmLCBkZXYtPmlvYmFzZSArIFBDSTE3MzZfM19JTlRfQ0xSKTsJLyogIGNsZWFyIGludGVycnVwdHMgKi8KLQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzZfM19JTlRfUkYpOwkvKiAgc2V0IHJpc2luZyBlZGdlIHRyaWdnZXIgKi8KKwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM2XzNfSU5UX0VOKTsKKwkJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXRiKDB4MGYsIGRldi0+aW9iYXNlICsgUENJMTczNl8zX0lOVF9DTFIpOworCQkvKiBzZXQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNl8zX0lOVF9SRik7CiAJCWJyZWFrOwogCiAJY2FzZSBUWVBFX1BDSTE3NTA6CiAJY2FzZSBUWVBFX1BDSTE3NTE6Ci0JCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUwX0lDUik7CS8qICBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQkvKiBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1MF9JQ1IpOwogCQlicmVhazsKIAljYXNlIFRZUEVfUENJMTc1MjoKLQkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfNl9DRkMpOwkvKiAgZGlzYWJsZSBjaGFubmVsIGZyZWV6ZSBmdW5jdGlvbiAqLworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml82X0NGQyk7IC8qIGRpc2FibGUgY2hhbm5lbCBmcmVlemUKKwkJCQkJCSAgICAgICAqIGZ1bmN0aW9uICovCiAJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETyk7CS8qICBjbGVhciBvdXRwdXRzICovCiAJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETyArIDIpOwogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8yKTsKIAkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPMiArIDIpOwogCQlicmVhazsKIAljYXNlIFRZUEVfUENJMTc1M0U6Ci0JCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IwKTsJLyogIGRpc2FibGUgJiBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IwKTsgLyogZGlzYWJsZSAmIGNsZWFyCisJCQkJCQkJICAqIGludGVycnVwdHMgKi8KIAkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjEpOwogCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMik7CiAJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IzKTsKIAkJLyogTk8gYnJlYWsgdGhlcmUhICovCiAJY2FzZSBUWVBFX1BDSTE3NTM6Ci0JCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjApOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDg4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMCk7IC8qIGRpc2FibGUgJiBjbGVhcgorCQkJCQkJCSAqIGludGVycnVwdHMgKi8KIAkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMSk7CiAJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjIpOwogCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IzKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BDSTE3NTQ6Ci0JCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7CS8qICBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7IC8qIGRpc2FibGUgYW5kIGNsZWFyCisJCQkJCQkJICAgKiBpbnRlcnJ1cHRzICovCiAJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMSk7CiAJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0X0lDUjIpOwogCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF9JQ1IzKTsKIAkJYnJlYWs7CiAJY2FzZSBUWVBFX1BDSTE3NTY6Ci0JCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KLQkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IwKTsJLyogIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfNl9DRkMpOyAvKiBkaXNhYmxlIGNoYW5uZWwgZnJlZXplCisJCQkJCQkgICAgICAgKiBmdW5jdGlvbiAqLworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjApOyAvKiBkaXNhYmxlIGFuZCBjbGVhcgorCQkJCQkJCSAgICogaW50ZXJydXB0cyAqLwogCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF82X0lDUjEpOwogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Nl9JRE8pOwkvKiAgY2xlYXIgb3V0cHV0cyAqLwogCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Nl9JRE8gKyAyKTsKQEAgLTg3NSw3ICs5MzAsOCBAQAogCQlwY2kxNzYwX3Jlc2V0KGRldik7CiAJCWJyZWFrOwogCWNhc2UgVFlQRV9QQ0kxNzYyOgotCQlvdXR3KDB4MDEwMSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzYyX0lDUik7CS8qICBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQlvdXR3KDB4MDEwMSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzYyX0lDUik7IC8qIGRpc2FibGUgJiBjbGVhcgorCQkJCQkJCSAgKiBpbnRlcnJ1cHRzICovCiAJCWJyZWFrOwogCX0KIApAQCAtOTk2LDcgKzEwNTIsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwogc3RhdGljIGludCBwY2lfZGlvX2FkZF84MjU0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgIGNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQsIGludCBzdWJkZXYpCiB7CiAJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CkBAIC0xMDIzLDcgKzEwNzksNyBAQAogCiAJZm9yIChwciA9IHBjaV9wcml2LCBwcmV2ID0gTlVMTDsgcHIgIT0gTlVMTDsgcHJldiA9IHByLCBwciA9IHByLT5uZXh0KSB7CiAJCWlmIChwci0+cGNpZGV2ID09IHBjaWRldikKLQkJCXJldHVybiAwOwkvKiAgdGhpcyBjYXJkIGlzIHVzZWQsIGxvb2sgZm9yIGFub3RoZXIgKi8KKwkJCXJldHVybiAwOyAvKiB0aGlzIGNhcmQgaXMgdXNlZCwgbG9vayBmb3IgYW5vdGhlciAqLwogCiAJfQogCkBAIC0xMDQ4LDcgKzExMDQsNyBAQAogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQsIHN1YmRldiwgbl9zdWJkZXZpY2VzLCBpLCBqOwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAKIAlwcmludGsoImNvbWVkaSVkOiBhZHZfcGNpX2RpbzogIiwgZGV2LT5taW5vcik7CiAKQEAgLTEwNTgsOSArMTExNCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQkvKiAgbG9vcCB0aHJvdWdoIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbl9ib2FyZHR5cGVzOyArK2kpIHsKIAkJCWlmIChib2FyZHR5cGVzW2ldLnZlbmRvcl9pZCAhPSBwY2lkZXYtPnZlbmRvcikKQEAgLTEyMTUsMTUgKzEyNjksMTIgQEAKIAkJCX0KIAkJfQogCi0JCWlmICh0aGlzX2JvYXJkLT5ib2FyZGlkLmNoYW5zKSB7CisJCWlmICh0aGlzX2JvYXJkLT5ib2FyZGlkLmNoYW5zKQogCQkJc3ViZGV2Kys7Ci0JCX0KIAotCQlmb3IgKGkgPSAwOyBpIDwgTUFYXzgyNTRfU1VCREVWUzsgaSsrKSB7Ci0JCQlpZiAodGhpc19ib2FyZC0+czgyNTRbaV0uY2hhbnMpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF84MjU0X1NVQkRFVlM7IGkrKykKKwkJCWlmICh0aGlzX2JvYXJkLT5zODI1NFtpXS5jaGFucykKIAkJCQlzdWJkZXYrKzsKLQkJCX0KLQkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CiAJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKQEAgLTEyNTMsNyArMTMwNCw0NyBAQAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaV9kaW8sIHBjaV9kaW9fcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2lfZGlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3BjaV9kaW8uZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaV9kaW9fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3BjaV9kaW9fcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2lfZGlvX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaV9kaW9fcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3BjaV9kaW9fcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2lfZGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2lfZGlvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9wY2lfZGlvX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaV9kaW8uZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2lfZGlvX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjaV9kaW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2lfZGlvX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaV9kaW8pOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNpX2Rpb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpX2Rpb19jbGVhbnVwX21vZHVsZSk7CiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCmluZGV4IDdhMWM2MzYuLjE3MjhjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCkBAIC0yMjcsNCArMjI3LDE5IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9haW9fYWlvMTJfOCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYWlvX2FpbzEyXzhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2Fpb19haW8xMl84KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9haW9fYWlvMTJfOF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2Fpb19haW8xMl84KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2Fpb19haW8xMl84X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9haW9fYWlvMTJfOF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKaW5kZXggNGJhZWY5Zi4uNDg3NTk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKQEAgLTE4NCw0ICsxODQsMTkgQEAKIAlyZXR1cm4gMjsKIH0KIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9haW9faWlyb18xNik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYWlvX2lpcm9fMTZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2Fpb19paXJvXzE2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9haW9faWlyb18xNl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2Fpb19paXJvXzE2KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2Fpb19paXJvXzE2X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9haW9faWlyb18xNl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbTk1MTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbTk1MTMuaAppbmRleCA3MzM2N2Q2Li4wYmI4MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW05NTEzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oCkBAIC00NywzMiArNDcsMzIgQEAKICNpZmRlZiBBbTk1MTNfOEJJVEJVUwogCiAjZGVmaW5lIEFtOTUxM193cml0ZV9yZWdpc3RlcihyZWcsIHZhbCkJCQkJXAotCWRvewkJCQkJCQlcCisJZG8gewkJCQkJCQlcCiAJCUFtOTUxM19vdXRwdXRfY29udHJvbChyZWcpOwkJCVwKIAkJQW05NTEzX291dHB1dF9kYXRhKHZhbD4+OCk7CQkJXAogCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsJjB4ZmYpOwkJCVwKLQl9d2hpbGUgKDApCisJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBBbTk1MTNfcmVhZF9yZWdpc3RlcihyZWcsIHZhbCkJCQkJXAotCWRvewkJCQkJCQlcCisJZG8gewkJCQkJCQlcCiAJCUFtOTUxM19vdXRwdXRfY29udHJvbChyZWcpOwkJCVwKLQkJdmFsPUFtOTUxM19pbnB1dF9kYXRhKCk8PDg7CQkJXAotCQl2YWx8PUFtOTUxM19pbnB1dF9kYXRhKCk7CQkJXAotCX13aGlsZSAoMCkKKwkJdmFsID0gQW05NTEzX2lucHV0X2RhdGEoKTw8ODsJCQlcCisJCXZhbCB8PSBBbTk1MTNfaW5wdXRfZGF0YSgpOwkJCVwKKwl9IHdoaWxlICgwKQogCiAjZWxzZSAvKiBBbTk1MTNfMTZCSVRCVVMgKi8KIAogI2RlZmluZSBBbTk1MTNfd3JpdGVfcmVnaXN0ZXIocmVnLCB2YWwpCQkJCVwKLQlkb3sJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAogCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCiAJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWwpOwkJCVwKLQl9d2hpbGUgKDApCisJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBBbTk1MTNfcmVhZF9yZWdpc3RlcihyZWcsIHZhbCkJCQkJXAotCWRvewkJCQkJCQlcCisJZG8gewkJCQkJCQlcCiAJCUFtOTUxM19vdXRwdXRfY29udHJvbChyZWcpOwkJCVwKLQkJdmFsPUFtOTUxM19pbnB1dF9kYXRhKCk7CQkJXAotCX13aGlsZSAoMCkKKwkJdmFsID0gQW05NTEzX2lucHV0X2RhdGEoKTsJCQlcCisJfSB3aGlsZSAoMCkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYwppbmRleCBiZjI3NjE3Li45M2JiZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCkBAIC00OTQsOSArNDk0LDU4IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX2RpbzIwMCwgZGlvMjAwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYW1wbGNfZGlvMjAwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYW1wbGNfZGlvMjAwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2FtcGxjX2RpbzIwMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGRpbzIwMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FtcGxjX2RpbzIwMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FtcGxjX2RpbzIwMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfZGlvMjAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hbXBsY19kaW8yMDBfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYW1wbGNfZGlvMjAwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfZGlvMjAwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX2RpbzIwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX2RpbzIwMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19kaW8yMDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfZGlvMjAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hbXBsY19kaW8yMDBfY2xlYW51cF9tb2R1bGUpOwogI2Vsc2UKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfZGlvMjAwKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19kaW8yMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX2RpbzIwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfZGlvMjAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfZGlvMjAwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FtcGxjX2RpbzIwMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfZGlvMjAwX2NsZWFudXBfbW9kdWxlKTsKICNlbmRpZgogCiAvKgpAQCAtMTUwMSwzICsxNTUwLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCmluZGV4IGEzMDdkNjguLjQ4MjQ2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCkBAIC0xODIsOSArMTgyLDU4IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjM2LCBwYzIzNl9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FtcGxjX3BjMjM2X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FtcGxjX3BjMjM2LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hbXBsY19wYzIzNl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwYzIzNl9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hbXBsY19wYzIzNl9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wYzIzNl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyMzYpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FtcGxjX3BjMjM2X3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FtcGxjX3BjMjM2LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGMyMzZfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfcGMyMzZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19wYzIzNl9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzIzNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19wYzIzNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGMyMzZfY2xlYW51cF9tb2R1bGUpOwogI2Vsc2UKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyMzYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FtcGxjX3BjMjM2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzIzNik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfcGMyMzZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzIzNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19wYzIzNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGMyMzZfY2xlYW51cF9tb2R1bGUpOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgcGMyMzZfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwKQEAgLTY2NCwzICs3MTMsNyBAQAogCX0KIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjYzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYwppbmRleCAxNTgwOGU5Li44YTMzODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYwpAQCAtNDMyLDcgKzQzMiw2MCBAQAogICogYXMgbmVjZXNzYXJ5LgogICovCiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjYzLCBwYzI2M19wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FtcGxjX3BjMjYzX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FtcGxjX3BjMjYzLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hbXBsY19wYzI2M19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwYzI2M19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hbXBsY19wYzI2M19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wYzI2M19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGMyNjMpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2FtcGxjX3BjMjYzX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FtcGxjX3BjMjYzLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGMyNjNfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfcGMyNjNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19wYzI2M19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzI2Myk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19wYzI2M19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGMyNjNfY2xlYW51cF9tb2R1bGUpOwogI2Vsc2UKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyNjMpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FtcGxjX3BjMjYzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzI2Myk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYW1wbGNfcGMyNjNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wYzI2Myk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hbXBsY19wYzI2M19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGMyNjNfY2xlYW51cF9tb2R1bGUpOwogI2VuZGlmCisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwppbmRleCBjNDg2YTg3Li4xYjViYTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCkBAIC00NDMsNyArNDQzLDQ1IEBACiAJLm51bV9uYW1lcyA9IEFSUkFZX1NJWkUocGNpMjI0X2JvYXJkcyksCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMjQsIHBjaTIyNF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2FtcGxjX3BjaTIyNF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkCisJCQkJCQkgICAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2FtcGxjX3BjaTIyNC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9hbXBsY19wY2kyMjRfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2kyMjRfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9hbXBsY19wY2kyMjRfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9hbXBsY19wY2kyMjRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2FtcGxjX3BjaTIyNCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfYW1wbGNfcGNpMjI0X3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2FtcGxjX3BjaTIyNC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX3BjaTIyNF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hbXBsY19wY2kyMjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9hbXBsY19wY2kyMjRfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGNpMjI0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2FtcGxjX3BjaTIyNF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYW1wbGNfcGNpMjI0X2NsZWFudXBfbW9kdWxlKTsKIAogLyoKICAqIENhbGxlZCBmcm9tIHRoZSAnaW5zbl93cml0ZScgZnVuY3Rpb24gdG8gcGVyZm9ybSBhIHNpbmdsZSB3cml0ZS4KQEAgLTE1NTcsMyArMTU5NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCmluZGV4IDdmZmZkOTYuLjVkMDY0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKQEAgLTYxNyw3ICs2MTcsNDUgQEAKIAkubnVtX25hbWVzID0gQVJSQVlfU0laRShwY2kyMzBfYm9hcmRzKSwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjaTIzMCwgcGNpMjMwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfYW1wbGNfcGNpMjMwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAgICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfYW1wbGNfcGNpMjMwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2FtcGxjX3BjaTIzMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHBjaTIzMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2FtcGxjX3BjaTIzMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2FtcGxjX3BjaTIzMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYW1wbGNfcGNpMjMwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9hbXBsY19wY2kyMzBfcGNpX2RyaXZlci5uYW1lID0KKwkgICAgKGNoYXIgKilkcml2ZXJfYW1wbGNfcGNpMjMwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfYW1wbGNfcGNpMjMwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2FtcGxjX3BjaTIzMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2FtcGxjX3BjaTIzMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hbXBsY19wY2kyMzApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYW1wbGNfcGNpMjMwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hbXBsY19wY2kyMzBfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IHBjaTIzMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKQEAgLTcyNiw3ICs3NjQsNyBAQAogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlMSwgaW9iYXNlMjsKIAkvKiBQQ0kyMzAncyBJL08gc3BhY2VzIDEgYW5kIDIgcmVzcGVjdGl2ZWx5LiAqLwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKIAlpbnQgaSA9IDAsIGlycV9oZGwsIHJjOwogCiAJcHJpbnRrKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhdHRhY2ggJXMgJWQsJWRcbiIsIGRldi0+bWlub3IsCkBAIC03NDIsOSArNzgwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFvX3N0b3Bfc3BpbmxvY2spOwogCS8qIEZpbmQgY2FyZCAqLwotCWZvciAocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldiAhPSBOVUxMOwotCSAgICAgcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2KSB7CiAJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgewogCQkJLyogTWF0Y2ggYWdhaW5zdCBidXMvc2xvdCBvcHRpb25zLiAqLwogCQkJaWYgKGl0LT5vcHRpb25zWzBdICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyIHx8CkBAIC0zMDE0LDMgKzMwNTAsNyBAQAogCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKaW5kZXggZmIwZDVmYS4uZTBhYzgyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKQEAgLTUxNyw0ICs1MTcsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9jNnhkaWdpbyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYzZ4ZGlnaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2M2eGRpZ2lvKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jNnhkaWdpb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2M2eGRpZ2lvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2M2eGRpZ2lvX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jNnhkaWdpb19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKaW5kZXggY2ZlYjExZi4uZjhlZGUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX2RhczE2X2NzLmMKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpAQCAtMTcxLDcgKzE3MCw3IEBACiAJaWYgKCFsaW5rKQogCQlyZXR1cm4gLUVJTzsKIAotCWRldi0+aW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCWRldi0+aW9iYXNlID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OzsKIAlwcmludGsoIkkvTyBiYXNlPTB4JTA0bHggIiwgZGV2LT5pb2Jhc2UpOwogCiAJcHJpbnRrKCJmaW5nZXJwcmludDpcbiIpOwpAQCAtNjYyLDE0ICs2NjEsNiBAQAogICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgogKi8KIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBkZXZfaW5mb190IGRldl9pbmZvID0gImNiX2RhczE2X2NzIjsKLQogc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHN0b3A7CkBAIC03MTksOCArNzEwLDcgQEAKIAkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+c3RvcCA9IDE7CiAJZGFzMTZjc19wY21jaWFfcmVsZWFzZShsaW5rKTsKIAkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IHN0cnVjdCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCi0JaWYgKGxpbmstPnByaXYpCi0JCWtmcmVlKGxpbmstPnByaXYpOworCWtmcmVlKGxpbmstPnByaXYpOwogfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9kZXRhY2ggKi8KIAogCkBAIC03MzcsMjQgKzcyNywyMiBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzg4LDEyICs3NzYsMTAgQEAKIAlkZXZfaW5mbygmbGluay0+ZGV2LCAiaW5kZXggMHglMDJ4IiwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAldSIsIGxpbmstPmlycSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiLCBpbyAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisJaWYgKGxpbmstPnJlc291cmNlWzFdKQorCQlwcmludGsoIiwgaW8gJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTg0Nyw3ICs4MzMsNyBAQAogCS5pZF90YWJsZSA9IGRhczE2Y3NfaWRfdGFibGUsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAiY2JfZGFzMTZfY3MiLAogCQl9LAogfTsKIApAQCAtODgxLDUgKzg2NywxNiBAQAogfQogCiAjZWxzZQotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNmNzKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kYXMxNmNzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXMxNmNzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXMxNmNzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMTZjcyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXMxNmNzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXMxNmNzX2NsZWFudXBfbW9kdWxlKTsKICNlbmRpZiAvKiBDT05GSUdfUENNQ0lBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKaW5kZXggNDM0NTkxZC4uNjUzMGI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwpAQCAtNTMzLDcgKzUzMyw3IEBACiAJCQkgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJaW50IGluZGV4OwogCWludCBpOwogCkBAIC01NTAsOSArNTUwLDcgQEAKICAqLwogCXByaW50aygiXG4iKTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQkvKiAgaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/ICovCiAJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NCKQogCQkJY29udGludWU7CkBAIC0xODcxLDQgKzE4NjksNDQgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGFzLCBjYl9wY2lkYXNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jYl9wY2lkYXNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NiX3BjaWRhcy5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfY2JfcGNpZGFzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBjYl9wY2lkYXNfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfY2JfcGNpZGFzX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jYl9wY2lkYXNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jYl9wY2lkYXNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2NiX3BjaWRhcyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2NiX3BjaWRhcy5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRhc19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jYl9wY2lkYXNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGFzKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NiX3BjaWRhc19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2JfcGNpZGFzX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYwppbmRleCA3OWFhMjg2Li41M2U3MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYwpAQCAtMTIzNyw3ICsxMjM3LDQzIEBACiBzdGF0aWMgdm9pZCBsb2FkX2FvX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaWRhcywgcGNpZGFzNjRfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9jYl9wY2lkYXNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NiX3BjaWRhcy5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfY2JfcGNpZGFzX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBwY2lkYXM2NF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9jYl9wY2lkYXNfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2NiX3BjaWRhc19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2NiX3BjaWRhc19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGFzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9jYl9wY2lkYXNfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfY2JfcGNpZGFzLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpZGFzX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2NiX3BjaWRhc19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRhc19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2lkYXMpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfY2JfcGNpZGFzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jYl9wY2lkYXNfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFpX3JhbmdlX2JpdHNfNnh4eChjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgpCkBAIC0xNzE4LDcgKzE3NTQsNyBAQAogICovCiBzdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlpbnQgaW5kZXg7CiAJdWludDMyX3QgbG9jYWxfcmFuZ2UsIGxvY2FsX2RlY29kZTsKIAlpbnQgcmV0dmFsOwpAQCAtMTczNSw5ICsxNzcxLDcgQEAKICAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCiAgKi8KIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQkvKiAgaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/ICovCiAJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQogCQkJY29udGludWU7CkBAIC00MzAzLDMgKzQzMzcsNyBAQAogCX0KIAlpMmNfc3RvcChkZXYpOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKaW5kZXggYzM3NGJlZS4uMmQzNTE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJCQkgICAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwotCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CiAJaW50IGluZGV4OwogCiAJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGRhOiAiLCBkZXYtPm1pbm9yKTsKQEAgLTI5Niw5ICsyOTYsNyBAQAogICovCiAJcHJpbnRrKCJcbiIpOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NCKSB7CiAJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKIAkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBpdC0+b3B0aW9uc1swXSB8fApAQCAtODU2LDQgKzg1NCw0NCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkZGEsIGNiX3BjaWRkYV9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2NiX3BjaWRkYV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfY2JfcGNpZGRhLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9jYl9wY2lkZGFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRkYV9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGNiX3BjaWRkYV9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9jYl9wY2lkZGFfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2NiX3BjaWRkYV9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2NiX3BjaWRkYV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGRhKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9jYl9wY2lkZGFfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfY2JfcGNpZGRhLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpZGRhX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2NiX3BjaWRkYV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRkYV9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2lkZGEpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfY2JfcGNpZGRhX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jYl9wY2lkZGFfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKaW5kZXggMzhjY2QxMC4uYzE2OTNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwpAQCAtMjAyLDkgKzIwMiw3IEBACiAgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgogICovCiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJLyogIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPyAqLwogCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKIAkJCWNvbnRpbnVlOwpAQCAtMzAwLDQgKzI5OCw0NCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkaW8sIHBjaWRpb19wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2NiX3BjaWRpb19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfY2JfcGNpZGlvLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9jYl9wY2lkaW9fcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRpb19wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHBjaWRpb19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9jYl9wY2lkaW9fcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2NiX3BjaWRpb19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2NiX3BjaWRpb19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfY2JfcGNpZGlvKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9jYl9wY2lkaW9fcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfY2JfcGNpZGlvLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfY2JfcGNpZGlvX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2NiX3BjaWRpb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NiX3BjaWRpb19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2lkaW8pOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfY2JfcGNpZGlvX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jYl9wY2lkaW9fY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwppbmRleCA0OWRjY2JiLi5jZWQzNDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCQkJICAgICBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlpbnQgaW5kZXg7CiAJLyogaW50IGk7ICovCiAKQEAgLTIyNyw5ICsyMjcsNyBAQAogICovCiAJcHJpbnRrKCJcbiIpOwogCi0JZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaWRldiAhPSBOVUxMOwotCSAgICAgcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpZGV2KSB7CiAJCS8qICBpcyBpdCBub3QgYSBjb21wdXRlciBib2FyZHMgY2FyZD8gKi8KIAkJaWYgKHBjaWRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMpCiAJCQljb250aW51ZTsKQEAgLTQ5MSw0ICs0ODksNDYgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpbWRhcywgY2JfcGNpbWRhc19wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2NiX3BjaW1kYXNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQKKwkJCQkJCSAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NiX3BjaW1kYXMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2NiX3BjaW1kYXNfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2NiX3BjaW1kYXNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBjYl9wY2ltZGFzX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2NiX3BjaW1kYXNfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2NiX3BjaW1kYXNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jYl9wY2ltZGFzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9jYl9wY2ltZGFzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9jYl9wY2ltZGFzX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopZHJpdmVyX2NiX3BjaW1kYXMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2ltZGFzX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2NiX3BjaW1kYXNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jYl9wY2ltZGFzX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2NiX3BjaW1kYXMpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfY2JfcGNpbWRhc19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2JfcGNpbWRhc19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCmluZGV4IGY0MDRlYzc3Li44Yzk4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKQEAgLTE5NSw3ICsxOTUsNDUgQEAKIAkJICAgInNlcmllcy4gIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFBDSU0tRERBMDYtMTYgKHdoaWNoICIKIAkJICAgImFsc28gaGFwcGVucyB0byBiZSB0aGUgb25seSBib2FyZCBpbiB0aGlzIHNlcmllcy4gOikgKSAiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVBfTk9NT0RVTEUoY2JfcGNpbWRkYV9kcml2ZXIsIHBjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBjYl9wY2ltZGRhX2RyaXZlcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBjYl9wY2ltZGRhX2RyaXZlci5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjYl9wY2ltZGRhX2RyaXZlcl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjYl9wY2ltZGRhX2RyaXZlcl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHBjaV90YWJsZSwKKwkucHJvYmUgPSAmY2JfcGNpbWRkYV9kcml2ZXJfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmY2JfcGNpbWRkYV9kcml2ZXJfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNiX3BjaW1kZGFfZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmNiX3BjaW1kZGFfZHJpdmVyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWNiX3BjaW1kZGFfZHJpdmVyX3BjaV9kcml2ZXIubmFtZSA9CisJICAgIChjaGFyICopY2JfcGNpbWRkYV9kcml2ZXIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNiX3BjaW1kZGFfZHJpdmVyX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2JfcGNpbWRkYV9kcml2ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNiX3BjaW1kZGFfZHJpdmVyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmY2JfcGNpbWRkYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjYl9wY2ltZGRhX2RyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChjYl9wY2ltZGRhX2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CkBAIC00MjYsMTMgKzQ2NCwxMSBAQAogICovCiBzdGF0aWMgaW50IHByb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCWludCBpbmRleDsKIAl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyczsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQkvKiAgaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/ICovCiAJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfYm9uZC5jCmluZGV4IDcwMTYyMjIuLmNmY2JkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfYm9uZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfYm9uZC5jCkBAIC01MCw0MyArNTAsNiBAQAogICB3aXRoaW4gZWFjaCBtaW5vciB3aWxsIGJlIGNvbmNhdGVuYXRlZCB0b2dldGhlciBpbiB0aGUgb3JkZXIgZ2l2ZW4gaGVyZS4KICovCiAKLS8qCi0gKiBUaGUgcHJldmlvdXMgYmxvY2sgY29tbWVudCBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUKLSAqIGRvY3VtZW50YXRpb24gaW4gQ29tZWRpIGFuZCBDb21lZGlsaWIuICBUaGUgZmllbGRzOgotICoKLSAqIERyaXZlcjogdGhlIG5hbWUgb2YgdGhlIGRyaXZlcgotICogRGVzY3JpcHRpb246IGEgc2hvcnQgcGhyYXNlIGRlc2NyaWJpbmcgdGhlIGRyaXZlci4gIERvbid0IGxpc3QgYm9hcmRzLgotICogRGV2aWNlczogYSBmdWxsIGxpc3Qgb2YgdGhlIGJvYXJkcyB0aGF0IGF0dGVtcHQgdG8gYmUgc3VwcG9ydGVkIGJ5Ci0gKiAgIHRoZSBkcml2ZXIuICBGb3JtYXQgaXMgIihtYW51ZmFjdHVyZXIpIGJvYXJkIG5hbWUgW2NvbWVkaSBuYW1lXSIsCi0gKiAgIHdoZXJlIGNvbWVkaV9uYW1lIGlzIHRoZSBuYW1lIHRoYXQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGJvYXJkLgotICogICBTZWUgdGhlIGNvbW1lbnQgbmVhciBib2FyZF9uYW1lOiBpbiB0aGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlCi0gKiAgIGJlbG93LiAgSWYgKG1hbnVmYWN0dXJlcikgb3IgW2NvbWVkaSBuYW1lXSBpcyBtaXNzaW5nLCB0aGUgcHJldmlvdXMKLSAqICAgdmFsdWUgaXMgdXNlZC4KLSAqIEF1dGhvcjogeW91Ci0gKiBVcGRhdGVkOiBkYXRlIHdoZW4gdGhlIF9kb2N1bWVudGF0aW9uXyB3YXMgbGFzdCB1cGRhdGVkLiAgVXNlICdkYXRlIC1SJwotICogICB0byBnZXQgYSB2YWx1ZSBmb3IgdGhpcy4KLSAqIFN0YXR1czogYSBvbmUtd29yZCBkZXNjcmlwdGlvbiBvZiB0aGUgc3RhdHVzLiAgVmFsaWQgdmFsdWVzIGFyZToKLSAqICAgd29ya3MgLSBkcml2ZXIgd29ya3MgY29ycmVjdGx5IG9uIG1vc3QgYm9hcmRzIHN1cHBvcnRlZCwgYW5kCi0gKiAgICAgcGFzc2VzIGNvbWVkaV90ZXN0LgotICogICB1bmtub3duIC0gdW5rbm93bi4gIFVzdWFsbHkgcHV0IHRoZXJlIGJ5IGRzLgotICogICBleHBlcmltZW50YWwgLSBtYXkgbm90IHdvcmsgaW4gYW55IHBhcnRpY3VsYXIgcmVsZWFzZS4gIEF1dGhvcgotICogICAgIHByb2JhYmx5IHdhbnRzIGFzc2lzdGFuY2UgdGVzdGluZyBpdC4KLSAqICAgYml0cm90dGVuIC0gZHJpdmVyIGhhcyBub3QgYmVlbiB1cGRhdGUgaW4gYSBsb25nIHRpbWUsIHByb2JhYmx5Ci0gKiAgICAgZG9lc24ndCB3b3JrLCBhbmQgcHJvYmFibHkgaXMgbWlzc2luZyBzdXBwb3J0IGZvciBzaWduaWZpY2FudAotICogICAgIENvbWVkaSBpbnRlcmZhY2UgZmVhdHVyZXMuCi0gKiAgIHVudGVzdGVkIC0gYXV0aG9yIHByb2JhYmx5IHdyb3RlIGl0ICJibGluZCIsIGFuZCBpcyBiZWxpZXZlZCB0bwotICogICAgIHdvcmssIGJ1dCBubyBjb25maXJtYXRpb24uCi0gKgotICogVGhlc2UgaGVhZGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhbmQgYW55IGNvbW1lbnRzCi0gKiB5b3Ugd2lzaCB0byBzYXkgYWJvdXQgdGhlIGRyaXZlci4gIFRoZSBjb21tZW50IGFyZWEgaXMgdGhlIHBsYWNlCi0gKiB0byBwdXQgYW55IGtub3duIGJ1Z3MsIGxpbWl0YXRpb25zLCB1bnN1cHBvcnRlZCBmZWF0dXJlcywgc3VwcG9ydGVkCi0gKiBjb21tYW5kIHRyaWdnZXJzLCB3aGV0aGVyIG9yIG5vdCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIG9uIHBhcnRpY3VsYXIKLSAqIHN1YmRldmljZXMsIGV0Yy4KLSAqCi0gKiBTb21ld2hlcmUgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIGJlIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ3VyYXRpb24KLSAqIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCB3aXRoIGNvbWVkaV9jb25maWcuCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICIuLi9jb21lZGkuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKaW5kZXggZmNkNzcyMS4uMjFkODM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKQEAgLTEwMSw3ICsxMDEsMTggQEAKIAkuZGV0YWNoID0gcGFycG9ydF9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BhcnBvcnQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BhcnBvcnRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BhcnBvcnQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BhcnBvcnRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wYXJwb3J0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BhcnBvcnRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BhcnBvcnRfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGFycG9ydF9wcml2YXRlIHsKIAl1bnNpZ25lZCBpbnQgYV9kYXRhOwpAQCAtMzk2LDMgKzQwNyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYwppbmRleCBlZjgzYTFhLi5iMjIwYjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX3Rlc3QuYwpAQCAtMTA3LDcgKzEwNywxOCBAQAogCS5udW1fbmFtZXMgPSBBUlJBWV9TSVpFKHdhdmVmb3JtX2JvYXJkcyksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3dhdmVmb3JtKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl93YXZlZm9ybV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfd2F2ZWZvcm0pOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3dhdmVmb3JtX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfd2F2ZWZvcm0pOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfd2F2ZWZvcm1faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3dhdmVmb3JtX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCkBAIC01NDksMyArNTYwLDcgQEAKIAogCXJldHVybiBpbnNuLT5uOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCmluZGV4IDk1MTE4MTQuLjg3MWYxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogc3RhdGljIGludCBjb250ZWNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJcHJpbnRrKCJjb21lZGklZDogY29udGVjOiAiLCBkZXYtPm1pbm9yKTsKQEAgLTExNiwxMCArMTE2LDcgQEAKIAlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7Ci0KKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DT05URUMgJiYKIAkJICAgIHBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUElPMTYxNkwpIHsKIAkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgewpAQCAtMjMyLDQgKzIyOSw0NCBAQAogCXJldHVybiAyOwogfQogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jb250ZWMsIGNvbnRlY19wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2NvbnRlY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX2NvbnRlYy5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfY29udGVjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9jb250ZWNfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBjb250ZWNfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfY29udGVjX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9jb250ZWNfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9jb250ZWNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2NvbnRlYyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfY29udGVjX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2NvbnRlYy5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2NvbnRlY19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jb250ZWNfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9jb250ZWNfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY29udGVjKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2NvbnRlY19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY29udGVjX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jCmluZGV4IDA3OGVjMjcuLjZhZjZjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMKQEAgLTg4Nyw0ICs4ODcsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfZGFxYm9hcmQyMDAwLCBkYXFib2FyZDIwMDBfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9kYXFib2FyZDIwMDBfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZAorCQkJCQkJICAgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9kYXFib2FyZDIwMDAuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfZGFxYm9hcmQyMDAwX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gZGFxYm9hcmQyMDAwX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfZGFxYm9hcmQyMDAwX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFxYm9hcmQyMDAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXFib2FyZDIwMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX2RhcWJvYXJkMjAwMF9wY2lfZHJpdmVyLm5hbWUgPQorCSAgICAoY2hhciAqKWRyaXZlcl9kYXFib2FyZDIwMDAuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9kYXFib2FyZDIwMDBfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZGFxYm9hcmQyMDAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfZGFxYm9hcmQyMDAwX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhcWJvYXJkMjAwMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXFib2FyZDIwMDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhcWJvYXJkMjAwMF9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKaW5kZXggOWNiMTQ0Zi4uMzE0MWRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKQEAgLTI5LDExICsyOSwxMSBAQAogICogRGVzY3JpcHRpb246IERBUy0wOCBjb21wYXRpYmxlIGJvYXJkcwogICogQXV0aG9yOiBXYXJyZW4gSmFzcGVyLCBkcywgRnJhbmsgSGVzcwogICogRGV2aWNlczogW0tlaXRobGV5IE1ldHJhYnl0ZV0gREFTMDggKGlzYS1kYXMwOCksCi0gKiBbQ29tcHV0ZXJCb2FyZHNdIERBUzA4IChpc2EtZGFzMDgpLCBEQVMwOC1QR00gKGRhczA4LXBnbSksCi0gKiBEQVMwOC1QR0ggKGRhczA4LXBnaCksIERBUzA4LVBHTCAoZGFzMDgtcGdsKSwgREFTMDgtQU9IIChkYXMwOC1hb2gpLAotICogREFTMDgtQU9MIChkYXMwOC1hb2wpLCBEQVMwOC1BT00gKGRhczA4LWFvbSksIERBUzA4L0pSLUFPIChkYXMwOC9qci1hbyksCi0gKiBEQVMwOC9KUi0xNi1BTyAoZGFzMDhqci0xNi1hbyksIFBDSS1EQVMwOCAoZGFzMDgpLAotICogUEMxMDQtREFTMDggKHBjMTA0LWRhczA4KSwgREFTMDgvSlIvMTYgKGRhczA4anIvMTYpCisgKiAgIFtDb21wdXRlckJvYXJkc10gREFTMDggKGlzYS1kYXMwOCksIERBUzA4LVBHTSAoZGFzMDgtcGdtKSwKKyAqICAgREFTMDgtUEdIIChkYXMwOC1wZ2gpLCBEQVMwOC1QR0wgKGRhczA4LXBnbCksIERBUzA4LUFPSCAoZGFzMDgtYW9oKSwKKyAqICAgREFTMDgtQU9MIChkYXMwOC1hb2wpLCBEQVMwOC1BT00gKGRhczA4LWFvbSksIERBUzA4L0pSLUFPIChkYXMwOC9qci1hbyksCisgKiAgIERBUzA4L0pSLTE2LUFPIChkYXMwOGpyLTE2LWFvKSwgUENJLURBUzA4IChkYXMwOCksCisgKiAgIFBDMTA0LURBUzA4IChwYzEwNC1kYXMwOCksIERBUzA4L0pSLzE2IChkYXMwOGpyLzE2KQogICogU3RhdHVzOiB3b3JrcwogICoKICAqIFRoaXMgaXMgYSByZXdyaXRlIG9mIHRoZSBkYXMwOCBhbmQgZGFzMDhqciBkcml2ZXJzLgpAQCAtOTgwLDcgKzk4MCw3IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKIAl1bnNpZ25lZCBsb25nIHBjaV9pb2Jhc2UgPSAwOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKICNlbmRpZgogCiAJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QpKTsKQEAgLTk5Nyw5ICs5OTcsNyBAQAogCQl9CiAJCXByaW50aygiXG4iKTsKIAkJLyogIGZpbmQgY2FyZCAqLwotCQlmb3IgKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkJICAgICBwZGV2ICE9IE5VTEw7Ci0JCSAgICAgcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSB7CisJCWZvcl9lYWNoX3BjaV9kZXYocGRldikgewogCQkJaWYgKHBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTCiAJCQkgICAgJiYgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJREFTMDgpIHsKIAkJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKQEAgLTEwODIsMTEgKzEwODAsNjIgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGRhczA4X2NvbW1vbl9kZXRhY2gpOwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2RhczA4LCBkYXMwOF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX2RhczA4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9kYXMwOC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfZGFzMDhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2RhczA4X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gZGFzMDhfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfZGFzMDhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX2RhczA4X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzMDhfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczA4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9kYXMwOF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9kYXMwOC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2RhczA4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczA4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfZGFzMDhfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMDgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzMDhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczA4X2NsZWFudXBfbW9kdWxlKTsKICNlbHNlCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczA4KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kYXMwOF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMDgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczA4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzMDgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzMDhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczA4X2NsZWFudXBfbW9kdWxlKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ01DSUEKIEVYUE9SVF9TWU1CT0xfR1BMKGRhczA4X2NzX2JvYXJkcyk7CiAjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwppbmRleCA4NzYxYTZkLi5jNmFhNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgImRhczA4LmgiCiAKIC8qIHBjbWNpYSBpbmNsdWRlcyAqLwotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTg5LDcgKzg4LDcgQEAKIAkJCXByaW50aygiIG5vIHBjbWNpYSBjYXJkcyBmb3VuZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKIAl9IGVsc2UgewogCQlwcmludGsoIiBidWchIGJvYXJkIGRvZXMgbm90IGhhdmUgUENNQ0lBIGJ1c3R5cGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMiwxNCArMTMxLDYgQEAKICAgIGxlc3Mgb24gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KICovCiAKLS8qCi0gICBUaGUgZGV2X2luZm8gdmFyaWFibGUgaXMgdGhlICJrZXkiIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB1cCB0aGlzCi0gICBkZXZpY2UgZHJpdmVyIHdpdGggYXBwcm9wcmlhdGUgY2FyZHMsIHRocm91Z2ggdGhlIGNhcmQgY29uZmlndXJhdGlvbgotICAgZGF0YWJhc2UuCi0qLwotCi1zdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJwY20tZGFzMDgiOwotCiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc3RvcDsKQEAgLTIwNiw4ICsxOTcsNyBAQAogCWRhczA4X3BjbWNpYV9yZWxlYXNlKGxpbmspOwogCiAJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBkYXMwOF9wY21jaWFfZGV0YWNoICovCiAKQEAgLTIyNSwyNCArMjE1LDIzIEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CiAJCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2Rldik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjg0LDEyICsyNzMsMTAgQEAKIAlkZXZfaW5mbygmbGluay0+ZGV2LCAiaW5kZXggMHglMDJ4IiwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAldSIsIGxpbmstPmlycSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiLCBpbyAlcFIiLCBsaW5rLT5yZXNvdXJjZVswXSk7CisJaWYgKGxpbmstPnJlc291cmNlWzFdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzFdKTsKIAlwcmludGsoIlxuIik7CiAKIAlyZXR1cm47CkBAIC0zNjMsNyArMzUwLDcgQEAKIAkuaWRfdGFibGUgPSBkYXMwOF9jc19pZF90YWJsZSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZHJ2ID0gewotCQkubmFtZSA9IGRldl9pbmZvLAorCQkubmFtZSA9ICJwY20tZGFzMDgiLAogCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYwppbmRleCBjY2VlNGYxLi4wYWYxYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTYuYwpAQCAtMTcxNyw3ICsxNzE3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhczE2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXMxNik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZGFzMTZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMxNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXMxNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZGFzMTZfY2xlYW51cF9tb2R1bGUpOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgc3VnZ2VzdHMgYSBkbWEgdHJhbnNmZXIgc2l6ZSBpbiBieXRlcyAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTE3NzYsMyArMTc4Nyw3IEBACiAKIAl9CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCmluZGV4IGM0MDNkODguLmE1Y2UzYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2bTEuYwpAQCAtMTk4LDcgKzE5OCwxOCBAQAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgKikoZGV2LT5wcml2YXRlKSkKICNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczE2bTFfYm9hcmQgKikoZGV2LT5ib2FyZF9wdHIpKQogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE2bTEpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RhczE2bTFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczE2bTEpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczE2bTFfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMxNm0xKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2RhczE2bTFfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczE2bTFfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW5saW5lIHNob3J0IG11bmdlX3NhbXBsZShzaG9ydCBkYXRhKQogewpAQCAtNzc3LDMgKzc4OCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxODAwLmMKaW5kZXggZGU1ZTgyZi4uNmVhOTNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCkBAIC01MzEsNyArNTMxLDE4IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTgwMCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzMTgwMF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMTgwMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZGFzMTgwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczE4MDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfZGFzMTgwMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZGFzMTgwMF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZGFzMTgwMF9pbml0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZG1hMCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZG1hMSkKQEAgLTE4MDAsMyArMTgxMSw3IEBACiAKIAlyZXR1cm4gc2l6ZTsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKaW5kZXggYTQwNGExOC4uNjMyOGY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCkBAIC0xMDksNyArMTA5LDE4IEBACiAJLmRldGFjaCA9IGRhczY0MDJfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM2NDAyKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kYXM2NDAyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXM2NDAyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kYXM2NDAyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZGFzNjQwMik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXM2NDAyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9kYXM2NDAyX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IGRhczY0MDJfcHJpdmF0ZSB7CiAJaW50IGFpX2J5dGVzX3RvX3JlYWQ7CkBAIC0zNjAsMyArMzcxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKaW5kZXggYWFkYzQ5Ny4uYWVjYWVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpAQCAtMzQ3LDcgKzM0NywxOCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczgwMCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZGFzODAwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXM4MDApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RhczgwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczgwMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kYXM4MDBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RhczgwMF9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBkYXM4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCkBAIC05MDUsMyArOTE2LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYwppbmRleCBkNWNiZDUxLi42OTM3MjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKQEAgLTM3LDQzICszNyw2IEBACiAgIGNvbWVkaV9jb25maWcgL2Rldi9jb21lZGkwIGRtbTMyYXQgYmFzZWFkZHIsaXJxCiAqLwogCi0vKgotICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCi0gKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKLSAqCi0gKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKLSAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KLSAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQotICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAotICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KLSAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQotICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCi0gKiAgIHZhbHVlIGlzIHVzZWQuCi0gKiBBdXRob3I6IHlvdQotICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKLSAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCi0gKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6Ci0gKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAotICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KLSAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KLSAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKLSAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCi0gKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQotICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKLSAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgotICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KLSAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgotICoKLSAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cwotICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQotICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAotICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCi0gKiBzdWJkZXZpY2VzLCBldGMuCi0gKgotICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCi0gKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgotICovCi0KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTMzNiwxMiArMjk5LDE0IEBACiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CiAJaXJxID0gaXQtPm9wdGlvbnNbMV07CiAKLQlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hpbmdcbiIsIGRldi0+bWlub3IpOwotCXByaW50aygiZG1tMzJhdDogcHJvYmluZyBhdCBhZGRyZXNzIDB4JTA0bHgsIGlycSAldVxuIiwgaW9iYXNlLCBpcnEpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hpbmdcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJkbW0zMmF0OiBwcm9iaW5nIGF0IGFkZHJlc3MgMHglMDRseCwgaXJxICV1XG4iLAorCSAgICAgICBpb2Jhc2UsIGlycSk7CiAKIAkvKiByZWdpc3RlciBhZGRyZXNzIHNwYWNlICovCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERNTTMyQVRfTUVNU0laRSwgdGhpc2JvYXJkLT5uYW1lKSkgewotCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZG1tMzJhdDogSS9PIHBvcnQgY29uZmxpY3RcbiIsCisJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwpAQCAtMzc5LDE0ICszNDQsMTUgQEAKIAlpbnRzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfSU5UQ0xPQ0spOwogCWFpcmJhY2sgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVJCQUNLKTsKIAotCXByaW50aygiZG1tMzJhdDogbG89MHglMDJ4IGhpPTB4JTAyeCBmaWZvc3RhdD0weCUwMnhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImRtbTMyYXQ6IGxvPTB4JTAyeCBoaT0weCUwMnggZmlmb3N0YXQ9MHglMDJ4XG4iLAogCSAgICAgICBhaWxvLCBhaWhpLCBmaWZvc3RhdCk7Ci0JcHJpbnRrKCJkbW0zMmF0OiBhaXN0YXQ9MHglMDJ4IGludHN0YXQ9MHglMDJ4IGFpcmJhY2s9MHglMDJ4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJkbW0zMmF0OiBhaXN0YXQ9MHglMDJ4IGludHN0YXQ9MHglMDJ4IGFpcmJhY2s9MHglMDJ4XG4iLAogCSAgICAgICBhaXN0YXQsIGludHN0YXQsIGFpcmJhY2spOwogCiAJaWYgKChhaWxvICE9IDB4MDApIHx8IChhaWhpICE9IDB4MWYpIHx8IChmaWZvc3RhdCAhPSAweDgwKSB8fAogCSAgICAoYWlzdGF0ICE9IDB4NjAgfHwgKGludHN0YXQgIT0gMHgwMCkgfHwgYWlyYmFjayAhPSAweDBjKSkgewotCQlwcmludGsoImRtbWF0MzI6IGJvYXJkIGRldGVjdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImRtbWF0MzI6IGJvYXJkIGRldGVjdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTM5NCw3ICszNjAsNyBAQAogCWlmIChpcnEpIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBkbW0zMmF0X2lzciwgMCwgdGhpc2JvYXJkLT5uYW1lLCBkZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKCJpcnEgY29uZmxpY3RcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJkbW0zMmF0OiBpcnEgY29uZmxpY3RcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlkZXYtPmlycSA9IGlycTsKQEAgLTQ3OCw3ICs0NDQsNyBAQAogCX0KIAogCS8qIHN1Y2Nlc3MgKi8KLQlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hlZFxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGRtbTMyYXQ6IGF0dGFjaGVkXG4iLCBkZXYtPm1pbm9yKTsKIAogCXJldHVybiAxOwogCkBAIC00OTQsNyArNDYwLDcgQEAKICAqLwogc3RhdGljIGludCBkbW0zMmF0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IGRtbTMyYXQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGRtbTMyYXQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAJaWYgKGRldi0+aXJxKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlpZiAoZGV2LT5pb2Jhc2UpCkBAIC01NDIsNyArNTA4LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSA0MDAwMCkgewotCQlwcmludGsoInRpbWVvdXRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJkbW0zMmF0OiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCkBAIC01NTcsNyArNTIzLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA9PSA0MDAwMCkgewotCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImRtbTMyYXQ6IHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIApAQCAtNjI3LDcgKzU5Myw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseQorCSAqIGNvbXBhdGlibGUgKi8KIAogCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKQEAgLTgwMCw3ICs3NjcsOCBAQAogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQgPSBjbWQtPnN0b3BfYXJnOwogCWVsc2UgewkJCS8qIFRSSUdfTk9ORSAqLwotCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID0gMHhmZmZmZmZmZjsJLyogaW5kaWNhdGVzIFRSSUdfTk9ORSB0byBpc3IgKi8KKwkJZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9IDB4ZmZmZmZmZmY7IC8qIGluZGljYXRlcyBUUklHX05PTkUgdG8KKwkJCQkJCSAgICAgICogaXNyICovCiAJfQogCiAJLyogd2FpdCBmb3IgY2lyY3VpdCB0byBzZXR0bGUgKi8KQEAgLTgxMCw3ICs3NzgsNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChpID09IDQwMDAwKSB7Ci0JCXByaW50aygidGltZW91dFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImRtbTMyYXQ6IHRpbWVvdXRcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKQEAgLTgyMywxMyArNzkxLDEzIEBACiAJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DT05WLCAweGZmKTsKIAl9CiAKLS8qIAlwcmludGsoImRtbWF0MzIgaW4gY29tbWFuZFxuIik7ICovCisvKglwcmludGsoImRtbWF0MzIgaW4gY29tbWFuZFxuIik7ICovCiAKLS8qIAlmb3IoaT0wO2k8Y21kLT5jaGFubGlzdF9sZW47aSsrKSAqLwotLyogCQljb21lZGlfYnVmX3B1dChzLT5hc3luYyxpKjEwMCk7ICovCisvKglmb3IoaT0wO2k8Y21kLT5jaGFubGlzdF9sZW47aSsrKSAqLworLyoJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLGkqMTAwKTsgKi8KIAotLyogCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsgKi8KLS8qIAljb21lZGlfZXZlbnQoZGV2LCBzKTsgKi8KKy8qCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsgKi8KKy8qCWNvbWVkaV9ldmVudChkZXYsIHMpOyAqLwogCiAJcmV0dXJuIDA7CiAKQEAgLTkzNyw3ICs5MDUsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpID09IDQwMDAwKSB7Ci0JCQlwcmludGsoInRpbWVvdXRcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1tMzJhdDogdGltZW91dFxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQkvKiBkdW1teSByZWFkIHRvIHVwZGF0ZSB0cmlnZ2VyIHRoZSBvdXRwdXQgKi8KQEAgLTEwOTUsNCArMTA2MywxOSBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RtbTMyYXQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2RtbTMyYXRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RtbTMyYXQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RtbTMyYXRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kbW0zMmF0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2RtbTMyYXRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RtbTMyYXRfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKaW5kZXggODNmYjZlNS4uNWNjZTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYwpAQCAtOTgsNyArOTgsMTggQEAKIAkuZGV0YWNoID0gZHQyODAxX2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODAxKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kdDI4MDFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2R0MjgwMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZHQyODAxX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZHQyODAxKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2R0MjgwMV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZHQyODAxX2NsZWFudXBfbW9kdWxlKTsKIAogI2lmIDAKIC8qIGlnbm9yZSAnZGVmaW5lZCBidXQgbm90IHVzZWQnIHdhcm5pbmcgKi8KQEAgLTcyMCwzICs3MzEsNyBAQAogCiAJcmV0dXJuIDE7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTEuYwppbmRleCBlYTliZmI3Li5hMTY2NGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCkBAIC0yMzksNyArMjM5LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgZHQyODExX2JvYXJkKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODExKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kdDI4MTFfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2R0MjgxMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfZHQyODExX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZHQyODExKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2R0MjgxMV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZHQyODExX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBkdDI4MTFfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpAQCAtNjI1LDMgKzYzNiw3IEBACiAKIAlyZXR1cm4gMjsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNC5jCmluZGV4IDE2ZmRlMDYuLjFjNjI0OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKQEAgLTcwLDcgKzcwLDE4IEBACiAJLmRldGFjaCA9IGR0MjgxNF9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODE0X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgxNF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgxNCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MTRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgxNF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldik7CiAKQEAgLTM4NywzICszOTgsNyBAQAogCWNvbWVkaV9ldmVudChkZXYsIHMpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCmluZGV4IGQxYTRmNzguLjQxNTVkYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKQEAgLTgyLDcgKzgyLDE4IEBACiAJLmRldGFjaCA9IGR0MjgxNV9kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNSk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODE1X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgxNV9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgxNSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MTVfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgxNV9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIGR0MjgxNV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIApAQCAtMjU1LDMgKzI2Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCmluZGV4IDU0ZTBkZWEuLjY1MWZlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKQEAgLTU3LDcgKzU3LDE4IEBACiAJLmRldGFjaCA9IGR0MjgxN19kZXRhY2gsCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODE3X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MTcpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgxN19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgxNyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MTdfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgxN19jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZHQyODE3X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCkBAIC0xODAsMyArMTkxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODJ4LmMKaW5kZXggZmQ4NzI4Yy4uOGNlYTlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYwpAQCAtNDIzLDcgKzQyMywxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGR0MjgyeF9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgyeCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZHQyODJ4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kdDI4MngpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2R0MjgyeF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2R0MjgyeCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kdDI4MnhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2R0MjgyeF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBwcmVwX2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgY2hhbiwgaW50IHNpemUpOwpAQCAtMTUwMiwzICsxNTEzLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQzMDAwLmMKaW5kZXggY2E2ODc4OS4uNjU2ZTdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYwpAQCAtMjg3LDcgKzI4Nyw0MyBAQAogCS5kZXRhY2ggPSBkdDMwMDBfZGV0YWNoLAogfTsKIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfZHQzMDAwLCBkdDNrX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfZHQzMDAwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfZHQzMDAwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9kdDMwMDBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX2R0MzAwMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGR0M2tfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfZHQzMDAwX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9kdDMwMDBfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9kdDMwMDBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2R0MzAwMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfZHQzMDAwX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX2R0MzAwMC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2R0MzAwMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9kdDMwMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9kdDMwMDBfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfZHQzMDAwKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2R0MzAwMF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfZHQzMDAwX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIHZvaWQgZHQza19haV9lbXB0eV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwpAQCAtOTkxLDMgKzEwMjcsNyBAQAogCSpib2FyZCA9IC0xOwogCXJldHVybiBmcm9tOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKaW5kZXggOTZjYWFlMy4uZDAxZDJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwpAQCAtODkwLDggKzg5MCwxMCBAQAogICogQ29tZWRpIGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyB2b2lkIGR0OTgxMl9jb21lZGlfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBkdDk4MTJfY29tZWRpX29wZW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKKwlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKwogCWRvd24oJmRldnByaXYtPnNsb3QtPm11dGV4KTsKIAlpZiAoZGV2cHJpdi0+c2xvdC0+dXNiKSB7CiAJCS8qIFdlIGhhdmUgYW4gYXR0YWNoZWQgZGV2aWNlLCBmaWxsIGluIGN1cnJlbnQgcmFuZ2UgaW5mbyAqLwpAQCAtOTM0LDggKzkzNiwxMCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KKwkJcmVzdWx0ID0gMDsKIAl9CiAJdXAoJmRldnByaXYtPnNsb3QtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGR0OTgxMl9kaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwppbmRleCBhMTBhMmIwLi43ZjQ5YWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwpAQCAtNTIsNyArNTIsMTggQEAKIAkuZGV0YWNoID0gZmw1MTJfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9mbDUxMik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZmw1MTJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2ZsNTEyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9mbDUxMl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2ZsNTEyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2ZsNTEyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9mbDUxMl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZmw1MTJfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCkBAIC0yMDUsMyArMjE2LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZmw1MTI6IGR1bW15IGkgZGV0YWNoXG4iLCBkZXYtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwppbmRleCA1MWYxMmJmLi4xNjYxYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpAQCAtMzExLDE3ICszMTEsMjUgQEAKIAl2b2lkICpwbHg5MDgwX2lvYmFzZTsKIAl2b2lkICpocGRpX2lvYmFzZTsKIAl1aW50MzJfdCAqZGlvX2J1ZmZlcltOVU1fRE1BX0JVRkZFUlNdOwkvKiAgZG1hIGJ1ZmZlcnMgKi8KLQlkbWFfYWRkcl90IGRpb19idWZmZXJfcGh5c19hZGRyW05VTV9ETUFfQlVGRkVSU107CS8qICBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgZG1hIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgcGx4X2RtYV9kZXNjICpkbWFfZGVzYzsJLyogIGFycmF5IG9mIGRtYSBkZXNjcmlwdG9ycyByZWFkIGJ5IHBseDkwODAsIGFsbG9jYXRlZCB0byBnZXQgcHJvcGVyIGFsaWdubWVudCAqLwotCWRtYV9hZGRyX3QgZG1hX2Rlc2NfcGh5c19hZGRyOwkvKiAgcGh5c2ljYWwgYWRkcmVzcyBvZiBkbWEgZGVzY3JpcHRvciBhcnJheSAqLworCS8qIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBkbWEgYnVmZmVycyAqLworCWRtYV9hZGRyX3QgZGlvX2J1ZmZlcl9waHlzX2FkZHJbTlVNX0RNQV9CVUZGRVJTXTsKKwkvKiBhcnJheSBvZiBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlcgorCSAqIGFsaWdubWVudCAqLworCXN0cnVjdCBwbHhfZG1hX2Rlc2MgKmRtYV9kZXNjOworCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZG1hIGRlc2NyaXB0b3IgYXJyYXkgKi8KKwlkbWFfYWRkcl90IGRtYV9kZXNjX3BoeXNfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnVtX2RtYV9kZXNjcmlwdG9yczsKLQl1aW50MzJfdCAqZGVzY19kaW9fYnVmZmVyW05VTV9ETUFfREVTQ1JJUFRPUlNdOwkvKiAgcG9pbnRlciB0byBzdGFydCBvZiBidWZmZXJzIGluZGV4ZWQgYnkgZGVzY3JpcHRvciAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBkbWFfZGVzY19pbmRleDsJLyogIGluZGV4IG9mIHRoZSBkbWEgZGVzY3JpcHRvciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkICovCisJLyogcG9pbnRlciB0byBzdGFydCBvZiBidWZmZXJzIGluZGV4ZWQgYnkgZGVzY3JpcHRvciAqLworCXVpbnQzMl90ICpkZXNjX2Rpb19idWZmZXJbTlVNX0RNQV9ERVNDUklQVE9SU107CisJLyogaW5kZXggb2YgdGhlIGRtYSBkZXNjcmlwdG9yIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgKi8KKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfaW5kZXg7CiAJdW5zaWduZWQgaW50IHR4X2ZpZm9fc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcnhfZmlmb19zaXplOwogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGlvX2NvdW50OwotCXZvbGF0aWxlIHVpbnQzMl90IGJpdHNbMjRdOwkvKiAgc29mdHdhcmUgY29waWVzIG9mIHZhbHVlcyB3cml0dGVuIHRvIGhwZGkgcmVnaXN0ZXJzICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CS8qICBudW1iZXIgb2YgYnl0ZXMgYXQgd2hpY2ggdG8gZ2VuZXJhdGUgQ09NRURJX0NCX0JMT0NLIGV2ZW50cyAqLworCS8qIHNvZnR3YXJlIGNvcGllcyBvZiB2YWx1ZXMgd3JpdHRlbiB0byBocGRpIHJlZ2lzdGVycyAqLworCXZvbGF0aWxlIHVpbnQzMl90IGJpdHNbMjRdOworCS8qIG51bWJlciBvZiBieXRlcyBhdCB3aGljaCB0byBnZW5lcmF0ZSBDT01FRElfQ0JfQkxPQ0sgZXZlbnRzICovCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGJsb2NrX3NpemU7CiAJdW5zaWduZWQgZGlvX2NvbmZpZ19vdXRwdXQ6MTsKIH07CiAKQEAgLTMzNyw3ICszNDUsNDMgQEAKIAkuZGV0YWNoID0gaHBkaV9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9ocGRpLCBocGRpX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfaHBkaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9ocGRpLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9ocGRpX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9ocGRpX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gaHBkaV9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9ocGRpX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9ocGRpX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfaHBkaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfaHBkaSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfaHBkaV9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9ocGRpLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfaHBkaV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9ocGRpX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfaHBkaV9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9ocGRpKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2hwZGlfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2hwZGlfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IGRpb19jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKQEAgLTU3MCw3ICs2MTQsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXBjaWRldiA9IE5VTEw7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHBkaV9ib2FyZHMpICYmIGRldi0+Ym9hcmRfcHRyID09IE5VTEw7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwZGlfYm9hcmRzKSAmJgorCQkgICAgZGV2LT5ib2FyZF9wdHIgPT0gTlVMTDsgaSsrKSB7CiAJCWRvIHsKIAkJCXBjaWRldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfUExYLAogCQkJCQkJaHBkaV9ib2FyZHNbaV0uZGV2aWNlX2lkLApAQCAtNjE4LDcgKzY2Myw3IEBACiAJLyogIHJlbWFwLCB3b24ndCB3b3JrIHdpdGggMi4wIGtlcm5lbHMgYnV0IHdobyBjYXJlcyAqLwogCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgPSBpb3JlbWFwKHByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSwKIAkJCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LAotCQkJCQkJCSAgICAgUExYOTA4MF9CQUREUklOREVYKSk7CisJCQkJCSAgICBQTFg5MDgwX0JBRERSSU5ERVgpKTsKIAlwcml2KGRldiktPmhwZGlfaW9iYXNlID0KIAkgICAgaW9yZW1hcChwcml2KGRldiktPmhwZGlfcGh5c19pb2Jhc2UsCiAJCSAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgSFBESV9CQUREUklOREVYKSk7CkBAIC03NjksNyArODE0LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMTsKIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJICogY29tcGF0aWJsZSAqLwogCiAJLyogIHVuaXF1ZW5lc3MgY2hlY2sgKi8KIAlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQpAQCAtMTA2NiwzICsxMTEyLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKaW5kZXggZmEwZTQ4MS4uODA5ZDE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwpAQCAtMTg1LDcgKzE4NSwxOCBAQAogb2Zmc2V0IDogc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9pY3BfbXVsdGkpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2ljcF9tdWx0aV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfaWNwX211bHRpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9pY3BfbXVsdGlfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9pY3BfbXVsdGkpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfaWNwX211bHRpX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9pY3BfbXVsdGlfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgaWNwX211bHRpX3ByaXZhdGUgewogCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICpjYXJkOwkvKiAgcG9pbnRlciB0byBjYXJkICovCkBAIC0xMTI1LDMgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaAppbmRleCAyYmI5NmIxLi42OGFjZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oCkBAIC02MiwxNiArNjIsMTQgQEAKIC8qIGJ1aWxkIGxpc3Qgb2YgSW5vdmEgY2FyZHMgaW4gdGhpcyBzeXN0ZW0gKi8KIHN0YXRpYyB2b2lkIHBjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqaW5vdmEsICpsYXN0OwogCWludCBpOwogCiAJaW5vdmFfZGV2aWNlcyA9IE5VTEw7CiAJbGFzdCA9IE5VTEw7CiAKLQlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpZGV2ICE9IE5VTEw7Ci0JICAgICBwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lkZXYpIHsKIAkJaWYgKHBjaWRldi0+dmVuZG9yID09IHBjaV92ZW5kb3IpIHsKIAkJCWlub3ZhID0ga3phbGxvYyhzaXplb2YoKmlub3ZhKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIWlub3ZhKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYwppbmRleCBlMjZjMWI4Li4zOWE2YTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWlfcGNpMjBrYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKQEAgLTY0MCw0ICs2NDAsMTkgQEAKIH0KICNlbmRpZgogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTIweHh4KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2kyMHh4eF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNpMjB4eHgpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjaTIweHh4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNpMjB4eHgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNpMjB4eHhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaTIweHh4X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKaW5kZXggZDMzMGIxOC4uOGIzODNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKICNpbmNsdWRlICJqcjNfcGNpLmgiCiAKQEAgLTEyMywxMiArMTI0LDkgQEAKIH07CiAKIC8qIEhvdHBsdWcgZmlybXdhcmUgbG9hZGluZyBzdHVmZiAqLwotCi10eXBlZGVmIGludCBjb21lZGlfZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCQkgICAgIGNvbnN0IHU4ICogZGF0YSwgc2l6ZV90IHNpemUpOwotCiBzdGF0aWMgaW50IGNvbWVkaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGNoYXIgKm5hbWUsCi0JCQkJY29tZWRpX2Zpcm13YXJlX2NhbGxiYWNrIGNiKQorCQkJCWludCAoKmNiKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IHNpemUpKQogewogCWludCByZXN1bHQgPSAwOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC0zNzMsNyArMzcxLDcgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBqcjNfcGNpX29wZW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQganIzX3BjaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAJc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CkBAIC0zODgsNiArMzg2LDcgQEAKIAkJCSAgICAgICBwLT5jaGFubmVsX25vKTsKIAkJfQogCX0KKwlyZXR1cm4gMDsKIH0KIAogaW50IHJlYWRfaWRtX3dvcmQoY29uc3QgdTggKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50ICpwb3MsIHVuc2lnbmVkIGludCAqdmFsKQpAQCAtMzk5LDE0ICszOTgsMTQgQEAKIAkJfQogCQkvKiAgQ29sbGVjdCB2YWx1ZSAqLwogCQkqdmFsID0gMDsKLQkJZm9yICg7ICpwb3MgPCBzaXplICYmIGlzeGRpZ2l0KGRhdGFbKnBvc10pOyAoKnBvcykrKykgewotCQkJY2hhciBjaCA9IHRvbG93ZXIoZGF0YVsqcG9zXSk7Ci0JCQlyZXN1bHQgPSAxOwotCQkJaWYgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpIHsKLQkJCQkqdmFsID0gKCp2YWwgPDwgNCkgKyAoY2ggLSAnMCcpOwotCQkJfSBlbHNlIGlmICgnYScgPD0gY2ggJiYgY2ggPD0gJ2YnKSB7Ci0JCQkJKnZhbCA9ICgqdmFsIDw8IDQpICsgKGNoIC0gJ2EnICsgMTApOwotCQkJfQorCQlmb3IgKDsgKnBvcyA8IHNpemU7ICgqcG9zKSsrKSB7CisJCQlpbnQgdmFsdWU7CisJCQl2YWx1ZSA9IGhleF90b19iaW4oZGF0YVsqcG9zXSk7CisJCQlpZiAodmFsdWUgPj0gMCkgeworCQkJCXJlc3VsdCA9IDE7CisJCQkJKnZhbCA9ICgqdmFsIDw8IDQpICsgdmFsdWU7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKIAkJfQogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtOTg2LDQgKzk4NSw0NCBAQAogCXJldHVybiAwOwogfQogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9qcjNfcGNpLCBqcjNfcGNpX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfanIzX3BjaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9qcjNfcGNpLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9qcjNfcGNpX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9qcjNfcGNpX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0ganIzX3BjaV9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9qcjNfcGNpX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9qcjNfcGNpX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfanIzX3BjaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfanIzX3BjaSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfanIzX3BjaV9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9qcjNfcGNpLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfanIzX3BjaV9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9qcjNfcGNpX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfanIzX3BjaV9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9qcjNfcGNpKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2pyM19wY2lfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2pyM19wY2lfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYwppbmRleCA3M2IwNDQ1Li4yODYwOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKQEAgLTk2LDcgKzk2LDQzIEBACiAJLmRldGFjaCA9IGNudF9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGNudF9kcml2ZXIsIGNudF9wY2lfdGFibGUpOworc3RhdGljIGludCBfX2RldmluaXQgY250X2RyaXZlcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgY250X2RyaXZlci5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjbnRfZHJpdmVyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNudF9kcml2ZXJfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBjbnRfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZjbnRfZHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmNudF9kcml2ZXJfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNudF9kcml2ZXJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmY250X2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwljbnRfZHJpdmVyX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopY250X2RyaXZlci5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY250X2RyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNudF9kcml2ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNudF9kcml2ZXJfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZjbnRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY250X2RyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChjbnRfZHJpdmVyX2NsZWFudXBfbW9kdWxlKTsKIAogLyotLSBjb3VudGVyIHdyaXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xNTIsNyArMTg4LDcgQEAKIHN0YXRpYyBpbnQgY250X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZSA9IE5VTEw7CiAJc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgKmJvYXJkOwogCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKIAlpbnQgZXJyb3IsIGk7CkBAIC0xNjMsOSArMTk5LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJLyogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4gKi8KLQlmb3IgKHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKLQkgICAgIHBjaV9kZXZpY2UgIT0gTlVMTDsKLQkgICAgIHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2aWNlKSkgeworCWZvcl9lYWNoX3BjaV9kZXYocGNpX2RldmljZSkgewogCQlpZiAocGNpX2RldmljZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfS09MVEVSKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgY250X2JvYXJkX25icjsgaSsrKSB7CiAJCQkJaWYgKGNudF9ib2FyZHNbaV0uZGV2aWNlX2lkID09CkBAIC0yNTksMyArMjkzLDcgQEAKIAkgICAgICAgZGV2LT5taW5vcik7CiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwppbmRleCA4YjlmYTBmOS4uMTQ3MTM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYwpAQCAtOTEsMjIgKzkxLDIyIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWU0MDAwX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWU0MDAwX2JvYXJkIG1lNDAwMF9ib2FyZHNbXSA9IHsKLQl7Ik1FLTQ2NTAiLCAweDQ2NTAsIHswLCAwfSwgezE2LCAwLCAwLCAwfSwgezR9LCB7MH19LAorCXsiTUUtNDY1MCIsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfSB9LAogCi0JeyJNRS00NjYwIiwgMHg0NjYwLCB7MCwgMH0sIHszMiwgMCwgMTYsIDB9LCB7NH0sIHszfX0sCi0JeyJNRS00NjYwaSIsIDB4NDY2MSwgezAsIDB9LCB7MzIsIDAsIDE2LCAwfSwgezR9LCB7M319LAotCXsiTUUtNDY2MHMiLCAweDQ2NjIsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2NjBpcyIsIDB4NDY2MywgezAsIDB9LCB7MzIsIDgsIDE2LCAwfSwgezR9LCB7M319LAorCXsiTUUtNDY2MCIsIDB4NDY2MCwgezAsIDB9LCB7MzIsIDAsIDE2LCAwfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2NjBpIiwgMHg0NjYxLCB7MCwgMH0sIHszMiwgMCwgMTYsIDB9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY2MHMiLCAweDQ2NjIsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9IH0sCisJeyJNRS00NjYwaXMiLCAweDQ2NjMsIHswLCAwfSwgezMyLCA4LCAxNiwgMH0sIHs0fSwgezN9IH0sCiAKLQl7Ik1FLTQ2NzAiLCAweDQ2NzAsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2NzBpIiwgMHg0NjcxLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfX0sCi0JeyJNRS00NjcwcyIsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M319LAotCXsiTUUtNDY3MGlzIiwgMHg0NjczLCB7NCwgMH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCisJeyJNRS00NjcwIiwgMHg0NjcwLCB7NCwgMH0sIHszMiwgMCwgMTYsIDF9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY3MGkiLCAweDQ2NzEsIHs0LCAwfSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9IH0sCisJeyJNRS00NjcwcyIsIDB4NDY3MiwgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2NzBpcyIsIDB4NDY3MywgezQsIDB9LCB7MzIsIDgsIDE2LCAxfSwgezR9LCB7M30gfSwKIAotCXsiTUUtNDY4MCIsIDB4NDY4MCwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M319LAotCXsiTUUtNDY4MGkiLCAweDQ2ODEsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9fSwKLQl7Ik1FLTQ2ODBzIiwgMHg0NjgyLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfX0sCi0JeyJNRS00NjgwaXMiLCAweDQ2ODMsIHs0LCA0fSwgezMyLCA4LCAxNiwgMX0sIHs0fSwgezN9fSwKKwl7Ik1FLTQ2ODAiLCAweDQ2ODAsIHs0LCA0fSwgezMyLCAwLCAxNiwgMX0sIHs0fSwgezN9IH0sCisJeyJNRS00NjgwaSIsIDB4NDY4MSwgezQsIDR9LCB7MzIsIDAsIDE2LCAxfSwgezR9LCB7M30gfSwKKwl7Ik1FLTQ2ODBzIiwgMHg0NjgyLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfSB9LAorCXsiTUUtNDY4MGlzIiwgMHg0NjgzLCB7NCwgNH0sIHszMiwgOCwgMTYsIDF9LCB7NH0sIHszfSB9LAogCiAJezB9LAogfTsKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAJCQkgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKIHN0YXRpYyBpbnQgbWU0MDAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbWU0MDAwID0gewotZHJpdmVyX25hbWU6Im1lNDAwMCIsCi1tb2R1bGU6VEhJU19NT0RVTEUsCi1hdHRhY2g6bWU0MDAwX2F0dGFjaCwKLWRldGFjaDptZTQwMDBfZGV0YWNoLAorZHJpdmVyX25hbWU6ICJtZTQwMDAiLAorbW9kdWxlIDogVEhJU19NT0RVTEUsCithdHRhY2ggOiBtZTQwMDBfYXR0YWNoLAorZGV0YWNoIDogbWU0MDAwX2RldGFjaCwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwMiw4ICszMDIsOCBAQAogCQkJaWYgKHJlcXVlc3RfaXJxKGluZm8tPmlycSwgbWU0MDAwX2FpX2lzciwKIAkJCQkJSVJRRl9TSEFSRUQsICJNRS00MDAwIiwgZGV2KSkgewogCQkJCXByaW50awotCQkJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogVW5hYmxlIHRvIGFsbG9jYXRlIGlycVxuIiwKLQkJCQkgICAgIGRldi0+bWlub3IpOworCQkJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogIgorCQkJCSAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBpcnFcbiIsIGRldi0+bWlub3IpOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKIAkJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOwpAQCAtMzEzLDggKzMxMyw4IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hdHRhY2goKTogTm8gaW50ZXJydXB0IGF2YWlsYWJsZVxuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2F0dGFjaCgpOiAiCisJCQkgICAgICAgIk5vIGludGVycnVwdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQl9CiAJfSBlbHNlIHsKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKQEAgLTM4OSw3ICszODksNyBAQAogCiBzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UgPSBOVUxMOwogCWludCByZXN1bHQsIGk7CiAJc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmQ7CiAKQEAgLTQwMiwxNyArNDAyLDIxIEBACiAJLyoKIAkgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgogCSAqLwotCWZvciAocGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldmljZSAhPSBOVUxMOwotCSAgICAgcGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2aWNlKSB7CiAJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9NRUlMSEFVUykgewogCQkJZm9yIChpID0gMDsgaSA8IE1FNDAwMF9CT0FSRF9WRVJTSU9OUzsgaSsrKSB7CiAJCQkJaWYgKG1lNDAwMF9ib2FyZHNbaV0uZGV2aWNlX2lkID09CiAJCQkJICAgIHBjaV9kZXZpY2UtPmRldmljZSkgewotCQkJCQkvKiBXYXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KKwkJCQkJLyoKKwkJCQkJICogV2FzIGEgcGFydGljdWxhcgorCQkJCQkgKiBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQkJCSAqLwogCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCiAJCQkJCSAgICB8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKLQkJCQkJCS8qIEFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJCQkvKgorCQkJCQkJICogQXJlIHdlIG9uIHRoZSB3cm9uZworCQkJCQkJICogYnVzL3Nsb3Q/CisJCQkJCQkgKi8KIAkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQogCQkJCQkJICAgIGl0LT5vcHRpb25zWzBdCiAJCQkJCQkgICAgfHwKQEAgLTQzMywxNCArNDM3LDE2IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fRVJSCi0JICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogTm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkgICAgICAgIk5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKIAkgICAgICAgZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKIAlyZXR1cm4gLUVOT0RFVjsKIAogZm91bmQ6CiAKIAlwcmludGsoS0VSTl9JTkZPCi0JICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogRm91bmQgJXMgYXQgUENJIGJ1cyAlZCwgc2xvdCAlZFxuIiwKKwkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJICAgICAgICJGb3VuZCAlcyBhdCBQQ0kgYnVzICVkLCBzbG90ICVkXG4iLAogCSAgICAgICBkZXYtPm1pbm9yLCBtZTQwMDBfYm9hcmRzW2ldLm5hbWUsIHBjaV9kZXZpY2UtPmJ1cy0+bnVtYmVyLAogCSAgICAgICBQQ0lfU0xPVChwY2lfZGV2aWNlLT5kZXZmbikpOwogCkBAIC00NTEsOCArNDU3LDggQEAKIAlyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2aWNlLCBkZXYtPmJvYXJkX25hbWUpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCBJL08gcmVnaW9uc1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgZW5hYmxlIFBDSSAiCisJCSAgICAgICAiZGV2aWNlIGFuZCByZXF1ZXN0IEkvTyByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTQ2MCwxNiArNDY2LDE2IEBACiAJcmVzdWx0ID0gZ2V0X3JlZ2lzdGVycyhkZXYsIHBjaV9kZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBnZXQgcmVnaXN0ZXJzXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgZ2V0IHJlZ2lzdGVyc1xuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCS8qIEluaXRpYWxpemUgYm9hcmQgaW5mbyAqLwogCXJlc3VsdCA9IGluaXRfYm9hcmRfaW5mbyhkZXYsIHBjaV9kZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBpbml0IGJhb3JkIGluZm9cbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogIgorCQkgICAgICAgIkNhbm5vdCBpbml0IGJhb3JkIGluZm9cbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNDc3LDggKzQ4Myw4IEBACiAJcmVzdWx0ID0gaW5pdF9hb19jb250ZXh0KGRldik7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfcHJvYmUoKTogQ2Fubm90IGluaXQgYW8gY29udGV4dFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2Fubm90IGluaXQgYW8gY29udGV4dFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC00ODYsOCArNDkyLDggQEAKIAlyZXN1bHQgPSBpbml0X2FpX2NvbnRleHQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgaW5pdCBhaSBjb250ZXh0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgaW5pdCBhaSBjb250ZXh0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAKQEAgLTQ5NSw4ICs1MDEsOCBAQAogCXJlc3VsdCA9IGluaXRfZGlvX2NvbnRleHQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW5ub3QgaW5pdCBkaW8gY29udGV4dFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2Fubm90IGluaXQgZGlvIGNvbnRleHRcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNTA0LDggKzUxMCw4IEBACiAJcmVzdWx0ID0gaW5pdF9jbnRfY29udGV4dChkZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6IENhbm5vdCBpbml0IGNudCBjb250ZXh0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX3Byb2JlKCk6ICIKKwkJICAgICAgICJDYW5ub3QgaW5pdCBjbnQgY29udGV4dFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiByZXN1bHQ7CiAJfQogCkBAIC01MTMsOCArNTE5LDggQEAKIAlyZXN1bHQgPSB4aWxpbnhfZG93bmxvYWQoZGV2KTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiBDYW4ndCBkb3dubG9hZCBmaXJtd2FyZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9wcm9iZSgpOiAiCisJCSAgICAgICAiQ2FuJ3QgZG93bmxvYWQgZmlybXdhcmVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KIApAQCAtNTM1LDI0ICs1NDEsMjQgQEAKIAogCUNBTExfUERFQlVHKCJJbiBnZXRfcmVnaXN0ZXJzKClcbiIpOwogCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGx4IHJlZ2Jhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwbHggcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCWluZm8tPnBseF9yZWdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXZfcCwgMSk7CiAJaWYgKGluZm8tPnBseF9yZWdiYXNlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiBQQ0kgYmFzZSBhZGRyZXNzIDEgaXMgbm90IGF2YWlsYWJsZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGdldF9yZWdpc3RlcnMoKTogIgorCQkgICAgICAgIlBDSSBiYXNlIGFkZHJlc3MgMSBpcyBub3QgYXZhaWxhYmxlXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWluZm8tPnBseF9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZfcCwgMSk7CiAKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZTQwMDAgcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1lNDAwMCByZWdiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAJaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2Rldl9wLCAyKTsKIAlpZiAoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBnZXRfcmVnaXN0ZXJzKCk6IFBDSSBiYXNlIGFkZHJlc3MgMiBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiAiCisJCSAgICAgICAiUENJIGJhc2UgYWRkcmVzcyAyIGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW5mby0+bWU0MDAwX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2Rldl9wLCAyKTsKQEAgLTU2MiwxOSArNTY4LDE5IEBACiAJaW5mby0+dGltZXJfcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2X3AsIDMpOwogCWlmIChpbmZvLT50aW1lcl9yZWdiYXNlID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiBQQ0kgYmFzZSBhZGRyZXNzIDMgaXMgbm90IGF2YWlsYWJsZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGdldF9yZWdpc3RlcnMoKTogIgorCQkgICAgICAgIlBDSSBiYXNlIGFkZHJlc3MgMyBpcyBub3QgYXZhaWxhYmxlXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWluZm8tPnRpbWVyX3JlZ2Jhc2Vfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2Rldl9wLCAzKTsKIAotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb2dyYW0gcmVnYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCWluZm8tPnByb2dyYW1fcmVnYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2X3AsIDUpOwogCWlmIChpbmZvLT5wcm9ncmFtX3JlZ2Jhc2UgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBnZXRfcmVnaXN0ZXJzKCk6IFBDSSBiYXNlIGFkZHJlc3MgNSBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogZ2V0X3JlZ2lzdGVycygpOiAiCisJCSAgICAgICAiUENJIGJhc2UgYWRkcmVzcyA1IGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaW5mby0+cHJvZ3JhbV9yZWdiYXNlX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZfcCwgNSk7CkBAIC04MDAsOCArODA2LDggQEAKIAl1ZGVsYXkoMjApOwogCWlmICghKGlubChpbmZvLT5wbHhfcmVnYmFzZSArIFBMWF9JTlRDU1IpICYgMHgyMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6IENhbid0IGluaXQgWGlsaW54XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6ICIKKwkJICAgICAgICJDYW4ndCBpbml0IFhpbGlueFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODEwLDggKzgxNiw4IEBACiAJdmFsdWUgJj0gfjB4MTAwOwogCW91dGwodmFsdWUsIGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUik7CiAJaWYgKEZJUk1XQVJFX05PVF9BVkFJTEFCTEUpIHsKLQkJY29tZWRpX2Vycm9yKGRldiwKLQkJCSAgICAgInhpbGlueCBmaXJtd2FyZSB1bmF2YWlsYWJsZSBkdWUgdG8gbGljZW5zaW5nLCBhYm9ydGluZyIpOworCQljb21lZGlfZXJyb3IoZGV2LCAieGlsaW54IGZpcm13YXJlIHVuYXZhaWxhYmxlICIKKwkJCSAgICAgImR1ZSB0byBsaWNlbnNpbmcsIGFib3J0aW5nIik7CiAJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7CiAJCS8qIERvd25sb2FkIFhpbGlueCBmaXJtd2FyZSAqLwpAQCAtODI2LDcgKzgzMiw4IEBACiAJCQkvKiBDaGVjayBpZiBCVVNZIGZsYWcgaXMgbG93ICovCiAJCQlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDIwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogWGlsaW54IGlzIHN0aWxsIGJ1c3kgKGlkeCA9ICVkKVxuIiwKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IHhpbGlueF9kb3dubG9hZCgpOiAiCisJCQkJICAgICAgICJYaWxpbnggaXMgc3RpbGwgYnVzeSAoaWR4ID0gJWQpXG4iLAogCQkJCSAgICAgICBkZXYtPm1pbm9yLCBpZHgpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtODM3LDExICs4NDQsMTEgQEAKIAlpZiAoaW5sKGluZm8tPnBseF9yZWdiYXNlICsgUExYX0lDUikgJiAweDQpIHsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogRE9ORSBmbGFnIGlzIG5vdCBzZXRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiB4aWxpbnhfZG93bmxvYWQoKTogIgorCQkgICAgICAgIkRPTkUgZmxhZyBpcyBub3Qgc2V0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6IERvd25sb2FkIG5vdCBzdWNjZXNzZnVsXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogeGlsaW54X2Rvd25sb2FkKCk6ICIKKwkJICAgICAgICJEb3dubG9hZCBub3Qgc3VjY2Vzc2Z1bFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTAyLDcgKzkwOSwxMCBAQAogCW1lNDAwMF9vdXRsKGRldiwgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9WQUxVRSwKIAkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcpOwogCi0JLyogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwIHRvIG91dHB1dCBvbiBpc29sYXRlZCB2ZXJzaW9ucyAqLworCS8qCisJICogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwCisJICogdG8gb3V0cHV0IG9uIGlzb2xhdGVkIHZlcnNpb25zCisJICovCiAJaWYgKCEobWU0MDAwX2lubChkZXYsIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0RJT19ESVJfUkVHKSAmIDB4MSkpIHsKIAkJbWU0MDAwX291dGwoZGV2LCAweDEsCiAJCQkgICAgaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0NUUkxfUkVHKTsKQEAgLTk1MCw4ICs5NjAsOCBAQAogCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKGluc24tPm4gPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aCAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTcwLDggKzk4MCw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogSW52YWxpZCByYW5nZSBzcGVjaWZpZWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIHJhbmdlIHNwZWNpZmllZFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTgwLDggKzk5MCw4IEBACiAJY2FzZSBBUkVGX0NPTU1PTjoKIAkJaWYgKGNoYW4gPj0gdGhpc2JvYXJkLT5haS5jb3VudCkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogQW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogIgorCQkJICAgICAgICJBbmFsb2cgaW5wdXQgaXMgbm90IGF2YWlsYWJsZVxuIiwgZGV2LT5taW5vcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQllbnRyeSB8PSBNRTQwMDBfQUlfTElTVF9JTlBVVF9TSU5HTEVfRU5ERUQgfCBjaGFuOwpAQCAtOTkwLDIzICsxMDAwLDI0IEBACiAJY2FzZSBBUkVGX0RJRkY6CiAJCWlmIChyYW5nID09IDAgfHwgcmFuZyA9PSAxKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiBSYW5nZSBtdXN0IGJlIGJpcG9sYXIgd2hlbiBhcmVmID0gZGlmZlxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCQkgICAgICAgIlJhbmdlIG11c3QgYmUgYmlwb2xhciB3aGVuIGFyZWYgPSBkaWZmXG4iLAogCQkJICAgICAgIGRldi0+bWlub3IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlpZiAoY2hhbiA+PSB0aGlzYm9hcmQtPmFpLmRpZmZfY291bnQpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6IEFuYWxvZyBpbnB1dCBpcyBub3QgYXZhaWxhYmxlXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaW5zbl9yZWFkKCk6ICIKKwkJCSAgICAgICAiQW5hbG9nIGlucHV0IGlzIG5vdCBhdmFpbGFibGVcbiIsIGRldi0+bWlub3IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfRElGRkVSRU5USUFMIHwgY2hhbjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiBJbnZhbGlkIGFyZWYgc3BlY2lmaWVkXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBhcmVmIHNwZWNpZmllZFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTA0NSw4ICsxMDU2LDggQEAKIAkgICAgKG1lNDAwMF9pbmwoZGV2LCBpbmZvLT5haV9jb250ZXh0LnN0YXR1c19yZWcpICYKIAkgICAgIE1FNDAwMF9BSV9TVEFUVVNfQklUX0VGX0RBVEEpKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pbnNuX3JlYWQoKTogVmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiVmFsdWUgbm90IGF2YWlsYWJsZSBhZnRlciB3YWl0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMDg2LDI0ICsxMDk3LDI0IEBACiAJLyogQ2hlY2sgd2hldGhlciBhIGNoYW5uZWwgbGlzdCBpcyBhdmFpbGFibGUgKi8KIAlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IE5vIGNoYW5uZWwgbGlzdCBhdmFpbGFibGVcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCSAgICAgICAiTm8gY2hhbm5lbCBsaXN0IGF2YWlsYWJsZVxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIENoZWNrIHRoZSBjaGFubmVsIGxpc3Qgc2l6ZSAqLwogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfQ09VTlQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogQ2hhbm5lbCBsaXN0IGlzIHRvIGxhcmdlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogIgorCQkgICAgICAgIkNoYW5uZWwgbGlzdCBpcyB0byBsYXJnZVxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIENoZWNrIHRoZSBwb2ludGVyICovCiAJaWYgKCFjbWQtPmNoYW5saXN0KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IE5VTEwgcG9pbnRlciB0byBjaGFubmVsIGxpc3RcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCSAgICAgICAiTlVMTCBwb2ludGVyIHRvIGNoYW5uZWwgbGlzdFxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtMTExMiw3ICsxMTIzLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgewogCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSBhcmVmKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKTogTW9kZSBpcyBub3QgZXF1YWwgZm9yIGFsbCBlbnRyaWVzXG4iLAorCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiAiCisJCQkgICAgICAgIk1vZGUgaXMgbm90IGVxdWFsIGZvciBhbGwgZW50cmllc1xuIiwKIAkJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0xMTI0LDggKzExMzYsOCBAQAogCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgPj0KIAkJCSAgICB0aGlzYm9hcmQtPmFpLmRpZmZfY291bnQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6IENoYW5uZWwgbnVtYmVyIHRvIGhpZ2hcbiIsCi0JCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogYWlfY2hlY2tfY2hhbmxpc3QoKToiCisJCQkJICAgICAgICIgQ2hhbm5lbCBudW1iZXIgdG8gaGlnaFxuIiwgZGV2LT5taW5vcik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTExMzMsOCArMTE0NSw4IEBACiAJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CiAJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSA+PSB0aGlzYm9hcmQtPmFpLmNvdW50KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiBDaGFubmVsIG51bWJlciB0byBoaWdoXG4iLAotCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6ICIKKwkJCQkgICAgICAgIkNoYW5uZWwgbnVtYmVyIHRvIGhpZ2hcbiIsIGRldi0+bWlub3IpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQl9CkBAIC0xMTQ2LDcgKzExNTgsOSBAQAogCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IDEgJiYKIAkJCSAgICBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSAyKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBhaV9jaGVja19jaGFubGlzdCgpOiBCaXBvbGFyIGlzIG5vdCBzZWxlY3RlZCBpbiBkaWZmZXJlbnRpYWwgbW9kZVxuIiwKKwkJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IGFpX2NoZWNrX2NoYW5saXN0KCk6ICIKKwkJCQkgICAgICAgIkJpcG9sYXIgaXMgbm90IHNlbGVjdGVkIGluICIKKwkJCQkgICAgICAgImRpZmZlcmVudGlhbCBtb2RlXG4iLAogCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzMzAsMjEgKzEzNDQsMTkgQEAKIAogCQllbnRyeSA9IGNoYW47CiAKLQkJaWYgKHJhbmcgPT0gMCkgeworCQlpZiAocmFuZyA9PSAwKQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfUkFOR0VfVU5JUE9MQVJfMl81OwotCQl9IGVsc2UgaWYgKHJhbmcgPT0gMSkgeworCQllbHNlIGlmIChyYW5nID09IDEpCiAJCQllbnRyeSB8PSBNRTQwMDBfQUlfTElTVF9SQU5HRV9VTklQT0xBUl8xMDsKLQkJfSBlbHNlIGlmIChyYW5nID09IDIpIHsKKwkJZWxzZSBpZiAocmFuZyA9PSAyKQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfUkFOR0VfQklQT0xBUl8yXzU7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWVudHJ5IHw9IE1FNDAwMF9BSV9MSVNUX1JBTkdFX0JJUE9MQVJfMTA7Ci0JCX0KIAotCQlpZiAoYXJlZiA9PSBTREZfRElGRikgeworCQlpZiAoYXJlZiA9PSBTREZfRElGRikKIAkJCWVudHJ5IHw9IE1FNDAwMF9BSV9MSVNUX0lOUFVUX0RJRkZFUkVOVElBTDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJZW50cnkgfD0gTUU0MDAwX0FJX0xJU1RfSU5QVVRfU0lOR0xFX0VOREVEOwotCQl9CiAKIAkJbWU0MDAwX291dGwoZGV2LCBlbnRyeSwgaW5mby0+YWlfY29udGV4dC5jaGFubmVsX2xpc3RfcmVnKTsKIAl9CkBAIC0xNDU0LDggKzE0NjYsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RhcnQgc291cmNlXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKIAkJZXJyKys7CiAJfQpAQCAtMTQ3MCw4ICsxNDgyLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc2NhbiBiZWdpbiBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc2NhbiBiZWdpbiBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fYmVnaW5fc3JjID0gVFJJR19GT0xMT1c7CiAJCWVycisrOwogCX0KQEAgLTE0ODUsOCArMTQ5Nyw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgc291cmNlXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgc291cmNlXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CiAJCWVycisrOwogCX0KQEAgLTE1MDAsOCArMTUxMiw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIHNvdXJjZVxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBzY2FuIGVuZCBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQpAQCAtMTUxNSw4ICsxNTI3LDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RvcCBzb3VyY2VcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RvcCBzb3VyY2VcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnN0b3Bfc3JjID0gVFJJR19OT05FOwogCQllcnIrKzsKIAl9CkBAIC0xNTQ2LDggKzE1NTgsOCBAQAogCQkgICBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgdHJpZ2dlciBjb21iaW5hdGlvblxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBzdGFydCB0cmlnZ2VyIGNvbWJpbmF0aW9uXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKIAkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOwogCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKQEAgLTE1NjMsOCArMTU3NSw4IEBACiAJCSAgIGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQpIHsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdG9wIHRyaWdnZXIgY29tYmluYXRpb25cbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkgICAgICAgIkludmFsaWQgc3RvcCB0cmlnZ2VyIGNvbWJpbmF0aW9uXG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5zdG9wX3NyYyA9IFRSSUdfTk9ORTsKIAkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX05PTkU7CiAJCWVycisrOwpAQCAtMTU3NywyOSArMTU4OSwyOSBAQAogCSAqLwogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IE5vIGNoYW5uZWwgbGlzdFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiTm8gY2hhbm5lbCBsaXN0XG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jaGFubGlzdF9sZW4gPSAxOwogCQllcnIrKzsKIAl9CiAJaWYgKGluaXRfdGlja3MgPCA2NikgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogU3RhcnQgYXJnIHRvIGxvd1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiU3RhcnQgYXJnIHRvIGxvd1xuIiwgZGV2LT5taW5vcik7CiAJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsKIAkJZXJyKys7CiAJfQogCWlmIChzY2FuX3RpY2tzICYmIHNjYW5fdGlja3MgPCA2NykgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogU2NhbiBiZWdpbiBhcmcgdG8gbG93XG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJICAgICAgICJTY2FuIGJlZ2luIGFyZyB0byBsb3dcbiIsIGRldi0+bWlub3IpOwogCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMjAzMTsKIAkJZXJyKys7CiAJfQogCWlmIChjaGFuX3RpY2tzIDwgNjYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IENvbnZlcnQgYXJnIHRvIGxvd1xuIiwKLQkJICAgICAgIGRldi0+bWlub3IpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCSAgICAgICAiQ29udmVydCBhcmcgdG8gbG93XG4iLCBkZXYtPm1pbm9yKTsKIAkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CiAJCWVycisrOwogCX0KQEAgLTE2MTcsMjMgKzE2MjksMjUgQEAKIAkJLyogQ2hlY2sgdGltZXIgYXJndW1lbnRzICovCiAJCWlmIChpbml0X3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdGFydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChzY2FuX3RpY2tzIDw9IGNtZC0+Y2hhbmxpc3RfbGVuICogY2hhbl90aWNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc2NhbiBlbmQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKKworCQkJLyogIEF0IGxlYXN0IG9uZSB0aWNrIG1vcmUgKi8KKwkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cgJiYKQEAgLTE2NDMsMTUgKzE2NTcsMTUgQEAKIAkJLyogQ2hlY2sgdGltZXIgYXJndW1lbnRzICovCiAJCWlmIChpbml0X3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdGFydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CkBAIC0xNjYyLDIzICsxNjc2LDI1IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoc2Nhbl90aWNrcyA8PSBjbWQtPmNoYW5saXN0X2xlbiAqIGNoYW5fdGlja3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzY2FuIGVuZCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7Ci0JCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvKiAgQXQgbGVhc3Qgb25lIHRpY2sgbW9yZSAqLworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwgZGV2LT5taW5vcik7CisKKwkJCS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCisJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNjg4LDE1ICsxNzA0LDE1IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQpAQCAtMTcwNywxNSArMTcyMywxNSBAQAogCQkvKiBDaGVjayB0aW1lciBhcmd1bWVudHMgKi8KIAkJaWYgKGluaXRfdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgY29udmVydCBhcmdcbiIsIGRldi0+bWlub3IpOwogCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KQEAgLTE3MjYsOCArMTc0Miw4IEBACiAJCS8qIENoZWNrIHRpbWVyIGFyZ3VtZW50cyAqLwogCQlpZiAoaW5pdF90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiAiCisJCQkgICAgICAgIkludmFsaWQgc3RhcnQgYXJnXG4iLCBkZXYtPm1pbm9yKTsKIAkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQpAQCAtMTczNSw4ICsxNzUxLDggQEAKIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCWlmIChjbWQtPnN0b3BfYXJnID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdG9wIGFyZ1xuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6ICIKKwkJCSAgICAgICAiSW52YWxpZCBzdG9wIGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnN0b3BfYXJnID0gMTsKIAkJCWVycisrOwogCQl9CkBAIC0xNzQ0LDggKzE3NjAsOCBAQAogCWlmIChjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UKSB7CiAJCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc2NhbiBlbmQgYXJnXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogIgorCQkJICAgICAgICJJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwgZGV2LT5taW5vcik7CiAJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CiAJCQllcnIrKzsKIAkJfQpAQCAtMTc4Niw4ICsxODAyLDggQEAKIAkvKiBDaGVjayBpZiBpcnEgbnVtYmVyIGlzIHJpZ2h0ICovCiAJaWYgKGlycSAhPSBhaV9jb250ZXh0LT5pcnEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiBJbmNvcnJlY3QgaW50ZXJydXB0IG51bTogJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpcnEpOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pc3IoKTogIgorCQkgICAgICAgIkluY29ycmVjdCBpbnRlcnJ1cHQgbnVtOiAlZFxuIiwgZGV2LT5taW5vciwgaXJxKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApAQCAtMTgwNiw3ICsxODIyLDEwIEBACiAJCQlJU1JfUERFQlVHKCJtZTQwMDBfYWlfaXNyKCk6IEZpZm8gZnVsbFxuIik7CiAJCQljID0gTUU0MDAwX0FJX0ZJRk9fQ09VTlQ7CiAKLQkJCS8qIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbiBhbmQgZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCQkJLyoKKwkJCSAqIEZJRk8gb3ZlcmZsb3csIHNvIHN0b3AgY29udmVyc2lvbgorCQkJICogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJCSAqLwogCQkJdG1wIHw9IE1FNDAwMF9BSV9DVFJMX0JJVF9JTU1FRElBVEVfU1RPUDsKIAkJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAogCQkJCSBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKQEAgLTE4MTUsOCArMTgzNCw4IEBACiAJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CiAKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEZJRk8gb3ZlcmZsb3dcbiIsCi0JCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9pc3IoKTogIgorCQkJICAgICAgICJGSUZPIG92ZXJmbG93XG4iLCBkZXYtPm1pbm9yKTsKIAkJfSBlbHNlIGlmICgodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRkZfREFUQSkKIAkJCSAgICYmICEodG1wICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfSEZfREFUQSkKIAkJCSAgICYmICh0bXAgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9FRl9EQVRBKSkgewpAQCAtMTgyNywxMSArMTg0NiwxNCBAQAogCQkJYyA9IE1FNDAwMF9BSV9GSUZPX0NPVU5UIC8gMjsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IENhbid0IGRldGVybWluZSBzdGF0ZSBvZiBmaWZvXG4iLAotCQkJICAgICAgIGRldi0+bWlub3IpOworCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCSAgICAgICAiQ2FuJ3QgZGV0ZXJtaW5lIHN0YXRlIG9mIGZpZm9cbiIsIGRldi0+bWlub3IpOwogCQkJYyA9IDA7CiAKLQkJCS8qIFVuZGVmaW5lZCBzdGF0ZSwgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCQkvKgorCQkJICogVW5kZWZpbmVkIHN0YXRlLCBzbyBzdG9wIGNvbnZlcnNpb24KKwkJCSAqIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzCisJCQkgKi8KIAkJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CiAJCQl0bXAgJj0gfihNRTQwMDBfQUlfQ1RSTF9CSVRfSEZfSVJRIHwKIAkJCQkgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSk7CkBAIC0xODQwLDggKzE4NjIsOCBAQAogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOwogCiAJCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiBVbmRlZmluZWQgRklGTyBzdGF0ZVxuIiwKLQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2lzcigpOiAiCisJCQkgICAgICAgIlVuZGVmaW5lZCBGSUZPIHN0YXRlXG4iLCBkZXYtPm1pbm9yKTsKIAkJfQogCiAJCUlTUl9QREVCVUcoIm1lNDAwMF9haV9pc3IoKTogVHJ5IHRvIHJlYWQgJWQgdmFsdWVzXG4iLCBjKTsKQEAgLTE4NTIsNyArMTg3NCwxMCBAQAogCQkJbHZhbCBePSAweDgwMDA7CiAKIAkJCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGx2YWwpKSB7Ci0JCQkJLyogQnVmZmVyIG92ZXJmbG93LCBzbyBzdG9wIGNvbnZlcnNpb24gYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwkJCQkvKgorCQkJCSAqIEJ1ZmZlciBvdmVyZmxvdywgc28gc3RvcCBjb252ZXJzaW9uCisJCQkJICogYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJCQkgKi8KIAkJCQl0bXAgfD0gTUU0MDAwX0FJX0NUUkxfQklUX0lNTUVESUFURV9TVE9QOwogCQkJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfAogCQkJCQkgTUU0MDAwX0FJX0NUUkxfQklUX1NDX0lSUSk7CkBAIC0xODYxLDggKzE4ODYsOCBAQAogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOwogCiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEJ1ZmZlciBvdmVyZmxvd1xuIiwKLQkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCQkgICAgICAgIkJ1ZmZlciBvdmVyZmxvd1xuIiwgZGV2LT5taW5vcik7CiAKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE4ODMsNyArMTkwOCwxMCBAQAogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLIHwgQ09NRURJX0NCX0VPQTsKIAotCQkvKiBBY3F1aXNpdGlvbiBpcyBjb21wbGV0ZSwgc28gc3RvcCBjb252ZXJzaW9uIGFuZCBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJCS8qCisJCSAqIEFjcXVpc2l0aW9uIGlzIGNvbXBsZXRlLCBzbyBzdG9wCisJCSAqIGNvbnZlcnNpb24gYW5kIGRpc2FibGUgYWxsIGludGVycnVwdHMKKwkJICovCiAJCXRtcCA9IG1lNDAwMF9pbmwoZGV2LCBhaV9jb250ZXh0LT5jdHJsX3JlZyk7CiAJCXRtcCB8PSBNRTQwMDBfQUlfQ1RSTF9CSVRfSU1NRURJQVRFX1NUT1A7CiAJCXRtcCAmPSB+KE1FNDAwMF9BSV9DVFJMX0JJVF9IRl9JUlEgfCBNRTQwMDBfQUlfQ1RSTF9CSVRfU0NfSVJRKTsKQEAgLTE4OTcsOCArMTkyNSw4IEBACiAKIAkJCWlmICghY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGx2YWwpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6IEJ1ZmZlciBvdmVyZmxvd1xuIiwKLQkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfaXNyKCk6ICIKKwkJCQkgICAgICAgIkJ1ZmZlciBvdmVyZmxvd1xuIiwgZGV2LT5taW5vcik7CiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xOTQxLDI5ICsxOTY5LDI5IEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoaW5zbi0+biA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYW9faW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsIGRldi0+bWlub3IsIGluc24tPm4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY2hhbiA+PSB0aGlzYm9hcmQtPmFvLmNvdW50KSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6IEludmFsaWQgY2hhbm5lbCAlZFxuIiwKLQkJICAgICAgIGRldi0+bWlub3IsIGluc24tPm4pOworCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNoYW5uZWwgJWRcbiIsIGRldi0+bWlub3IsIGluc24tPm4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocmFuZyAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9hb19pbnNuX3dyaXRlKCk6IEludmFsaWQgcmFuZ2UgJWRcbiIsCi0JCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYW9faW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCByYW5nZSAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChhcmVmICE9IEFSRUZfR1JPVU5EICYmIGFyZWYgIT0gQVJFRl9DT01NT04pIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogSW52YWxpZCBhcmVmICVkXG4iLAotCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fd3JpdGUoKTogIgorCQkgICAgICAgIkludmFsaWQgYXJlZiAlZFxuIiwgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTk5NCw4ICsyMDIyLDggQEAKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChpbnNuLT5uID4gMSkgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fcmVhZCgpOiBJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aFxuIiwKLQkJICAgICBkZXYtPm1pbm9yKTsKKwkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FvX2luc25fcmVhZCgpOiAiCisJCSAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoXG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDIxLDggKzIwNDksOCBAQAogCiAJaWYgKGluc24tPm4gIT0gMikgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsCi0JCSAgICAgZGV2LT5taW5vcik7CisJCSAgICAoImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9kaW9faW5zbl9iaXRzKCk6ICIKKwkJICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIwOTUsOCArMjEyMyw5IEBACiAJCQl0bXAgfD0gTUU0MDAwX0RJT19DVFJMX0JJVF9NT0RFXzA7CiAJCX0gZWxzZSBpZiAoY2hhbiA8IDE2KSB7CiAJCQkvKgotCQkJICogQ2hlY2ggZm9yIG9wdG9pc29sYXRlZCBNRS00MDAwIHZlcnNpb24uIElmIG9uZSB0aGUgZmlyc3QKLQkJCSAqIHBvcnQgaXMgYSBmaXhlZCBvdXRwdXQgcG9ydCBhbmQgdGhlIHNlY29uZCBpcyBhIGZpeGVkIGlucHV0IHBvcnQuCisJCQkgKiBDaGVjaCBmb3Igb3B0b2lzb2xhdGVkIE1FLTQwMDAgdmVyc2lvbi4KKwkJCSAqIElmIG9uZSB0aGUgZmlyc3QgcG9ydCBpcyBhIGZpeGVkIG91dHB1dAorCQkJICogcG9ydCBhbmQgdGhlIHNlY29uZCBpcyBhIGZpeGVkIGlucHV0IHBvcnQuCiAJCQkgKi8KIAkJCWlmICghbWU0MDAwX2lubChkZXYsIGluZm8tPmRpb19jb250ZXh0LmRpcl9yZWcpKQogCQkJCXJldHVybiAtRU5PREVWOwpAQCAtMjEyMSw4ICsyMTUwLDkgQEAKIAl9IGVsc2UgewogCQlpZiAoY2hhbiA8IDgpIHsKIAkJCS8qCi0JCQkgKiBDaGVjaCBmb3Igb3B0b2lzb2xhdGVkIE1FLTQwMDAgdmVyc2lvbi4gSWYgb25lIHRoZSBmaXJzdAotCQkJICogcG9ydCBpcyBhIGZpeGVkIG91dHB1dCBwb3J0IGFuZCB0aGUgc2Vjb25kIGlzIGEgZml4ZWQgaW5wdXQgcG9ydC4KKwkJCSAqIENoZWNoIGZvciBvcHRvaXNvbGF0ZWQgTUUtNDAwMCB2ZXJzaW9uLgorCQkJICogSWYgb25lIHRoZSBmaXJzdCBwb3J0IGlzIGEgZml4ZWQgb3V0cHV0CisJCQkgKiBwb3J0IGFuZCB0aGUgc2Vjb25kIGlzIGEgZml4ZWQgaW5wdXQgcG9ydC4KIAkJCSAqLwogCQkJaWYgKCFtZTQwMDBfaW5sKGRldiwgaW5mby0+ZGlvX2NvbnRleHQuZGlyX3JlZykpCiAJCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMjU3LDcgKzIyODcsOCBAQAogCWNhc2UgR1BDVF9SRVNFVDoKIAkJaWYgKGluc24tPm4gIT0gMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGglZFxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCQkgICAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoJWRcbiIsCiAJCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMjI2OSw3ICsyMzAwLDggQEAKIAljYXNlIEdQQ1RfU0VUX09QRVJBVElPTjoKIAkJaWYgKGluc24tPm4gIT0gMikgewogCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGglZFxuIiwKKwkJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCQkgICAgICAgIkludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoJWRcbiIsCiAJCQkgICAgICAgZGV2LT5taW5vciwgaW5zbi0+bik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMjI4MCw4ICsyMzEyLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiBJbnZhbGlkIGluc3RydWN0aW9uXG4iLAotCQkgICAgICAgZGV2LT5taW5vcik7CisJCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX2NvbmZpZygpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvblxuIiwgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjMwMiw3ICsyMzM0LDggQEAKIAogCWlmIChpbnNuLT5uID4gMSkgewogCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fcmVhZCgpOiBJbnZhbGlkIGluc3RydWN0aW9uIGxlbmd0aCAlZFxuIiwKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fcmVhZCgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjMyOCw3ICsyMzYxLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3JlYWQoKTogSW52YWxpZCBjaGFubmVsICVkXG4iLAorCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9yZWFkKCk6ICIKKwkJICAgICAgICJJbnZhbGlkIGNoYW5uZWwgJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5jaGFuc3BlYyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIzNDksNyArMjM4Myw4IEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoaW5zbi0+biA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3dyaXRlKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoICVkXG4iLAorCQkgICAgICAgImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl93cml0ZSgpOiAiCisJCSAgICAgICAiSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGggJWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBpbnNuLT5uKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM3NSw3ICsyNDEwLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2NudF9pbnNuX3dyaXRlKCk6IEludmFsaWQgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgICJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfY250X2luc25fd3JpdGUoKTogIgorCQkgICAgICAgIkludmFsaWQgY2hhbm5lbCAlZFxuIiwKIAkJICAgICAgIGRldi0+bWlub3IsIGluc24tPmNoYW5zcGVjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjM4Myw0ICsyNDE5LDQ0IEBACiAJcmV0dXJuIDE7CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX21lNDAwMCwgbWU0MDAwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbWU0MDAwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbWU0MDAwLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9tZTQwMDBfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX21lNDAwMF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG1lNDAwMF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9tZTQwMDBfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX21lNDAwMF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX21lNDAwMF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbWU0MDAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9tZTQwMDBfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbWU0MDAwLmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbWU0MDAwX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX21lNDAwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX21lNDAwMF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9tZTQwMDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbWU0MDAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tZTQwMDBfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggYzg0ODRhZS4uY2RhNGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtMjU3LDcgKzI1Nyw0MyBAQAogCS5kZXRhY2ggPSBtZV9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKG1lX2RyaXZlciwgbWVfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1lX2RyaXZlcl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBtZV9kcml2ZXIuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbWVfZHJpdmVyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1lX2RyaXZlcl9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG1lX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmbWVfZHJpdmVyX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJm1lX2RyaXZlcl9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVfZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJm1lX2RyaXZlcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwltZV9kcml2ZXJfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKiltZV9kcml2ZXIuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1lX2RyaXZlcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1lX2RyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbWVfZHJpdmVyX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmbWVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobWVfZHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KG1lX2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBtZV9wcml2YXRlX2RhdGEgewpAQCAtNjQ0LDcgKzY4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgbWVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZSA9IE5VTEw7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKIAlzdHJ1Y3QgbWVfYm9hcmQgKmJvYXJkOwogCXJlc291cmNlX3NpemVfdCBwbHhfcmVnYmFzZV90bXA7CkBAIC02NjEsOSArNjk3LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLiAqLwotCWZvciAocGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOwotCSAgICAgcGNpX2RldmljZSAhPSBOVUxMOwotCSAgICAgcGNpX2RldmljZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJZm9yX2VhY2hfcGNpX2RldihwY2lfZGV2aWNlKSB7CiAJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9NRUlMSEFVUykgewogCQkJZm9yIChpID0gMDsgaSA8IG1lX2JvYXJkX25icjsgaSsrKSB7CiAJCQkJaWYgKG1lX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0KQEAgLTg1NywzICs4OTEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKaW5kZXggOTlkOTk4NS4uY2QyNWIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCkBAIC03MCwxMiArNzAsMTAgQEAKIAogdm9pZCBtaXRlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBOVUxMOwogCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKIAotCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7Ci0JICAgICBwY2lkZXYgIT0gTlVMTDsKLQkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwlmb3JfZWFjaF9wY2lfZGV2KHBjaWRldikgewogCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OSSkgewogCQkJdW5zaWduZWQgaTsKIApAQCAtODI5LDMgKzgyNyw3IEBACiAJbWl0ZV9jbGVhbnVwKCk7CiB9CiAjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCmluZGV4IDk4NzRhYzMuLmE4OWVlYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKQEAgLTQwNiw0ICs0MDYsMTkgQEAKIAlyZXR1cm4gbjsKIH0KIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM2MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX21wYzYyNF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbXBjNjI0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tcGM2MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9tcGM2MjQpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbXBjNjI0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tcGM2MjRfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzgyNjBjcG0uYwppbmRleCA0NDBhMTQ0Li41ZjY4MTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjODI2MGNwbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKQEAgLTU2LDcgKzU2LDE4IEBACiAJLmRldGFjaCA9IG1wYzgyNjBjcG1fZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM4MjYwY3BtKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9tcGM4MjYwY3BtX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9tcGM4MjYwY3BtKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tcGM4MjYwY3BtX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbXBjODI2MGNwbSk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9tcGM4MjYwY3BtX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tcGM4MjYwY3BtX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL211bHRpcTMuYwppbmRleCA2YjIyZjBmLi5kYWNlOTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXVsdGlxMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKQEAgLTkzLDcgKzkzLDE4IEBACiAJLmRldGFjaCA9IG11bHRpcTNfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tdWx0aXEzKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9tdWx0aXEzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9tdWx0aXEzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9tdWx0aXEzX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbXVsdGlxMyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9tdWx0aXEzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9tdWx0aXEzX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IG11bHRpcTNfcHJpdmF0ZSB7CiAJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOwpAQCAtMzM4LDMgKzM0OSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKaW5kZXggMWZjNzZjYy4uMTRlNzE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCkBAIC00OTAsNCArNDkwLDQwIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pNjUyNywgbmk2NTI3X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbmk2NTI3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbmk2NTI3LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9uaTY1MjdfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pNjUyN19wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IG5pNjUyN19wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9uaTY1MjdfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pNjUyN19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX25pNjUyN19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbmk2NTI3KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaTY1MjdfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbmk2NTI3LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmk2NTI3X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pNjUyN19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX25pNjUyN19wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaTY1MjcpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmk2NTI3X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9uaTY1MjdfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggZDc5M2Y1YS4uOGI4ZTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC04MzQsNCArODM0LDQwIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pXzY1eHgsIG5pXzY1eHhfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9uaV82NXh4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX25pXzY1eHguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX25pXzY1eHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pXzY1eHhfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBuaV82NXh4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX25pXzY1eHhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pXzY1eHhfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9uaV82NXh4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV82NXh4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX25pXzY1eHguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pXzY1eHhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NXh4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX25pXzY1eHgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmlfNjV4eF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfbmlfNjV4eF9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwppbmRleCA2YTZmYWU1Li42NjEyYjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCUdsb2JhbF9JbnRfRW5hYmxlX0JpdCA9IDB4ODAwMDAwMDAKIH07CiAKLS8qIE9mZnNldCBvZiB0aGUgR1BDVCBjaGlwcyBmcm9tIHRoZSBiYXNlLWFkcmVzcyBvZiB0aGUgY2FyZCAqLworLyogT2Zmc2V0IG9mIHRoZSBHUENUIGNoaXBzIGZyb20gdGhlIGJhc2UtYWRkcmVzcyBvZiB0aGUgY2FyZCAqLwogLyogRmlyc3QgY2hpcCBpcyBhdCBiYXNlLWFkZHJlc3MgKyAweDAwLCBldGMuICovCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgR1BDVF9PRkZTRVRbMl0gPSB7IDB4MCwgMHg4MDAgfTsKIApAQCAtNDcxLDcgKzQ3MSw0MyBAQAogCS5kZXRhY2ggPSBuaV82NjB4X2RldGFjaCwKIH07CiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX25pXzY2MHgsIG5pXzY2MHhfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9uaV82NjB4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX25pXzY2MHguZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX25pXzY2MHhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX25pXzY2MHhfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBuaV82NjB4X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX25pXzY2MHhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX25pXzY2MHhfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9uaV82NjB4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV82NjB4KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX25pXzY2MHguZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX25pXzY2MHhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9uaV82NjB4X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX25pXzY2MHgpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfbmlfNjYweF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfbmlfNjYweF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CiBzdGF0aWMgaW50IG5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwppbmRleCA0NGFlODM2Li5lOWYwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKQEAgLTEyMCw3ICsxMjAsNDMgQEAKIAkuZGV0YWNoID0gbmlfNjcweF9kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NzB4LCBuaV82NzB4X3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBkcml2ZXJfbmlfNjcweF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9uaV82NzB4LmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGRyaXZlcl9uaV82NzB4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9uaV82NzB4X3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfNjcweF9wY2lfdGFibGUsCisJLnByb2JlID0gJmRyaXZlcl9uaV82NzB4X3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9uaV82NzB4X3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfbmlfNjcweF9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfbmlfNjcweCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uaV82NzB4LmRyaXZlcl9uYW1lOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9uaV82NzB4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfbmlfNjcweF9wY2lfZHJpdmVyKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaV82NzB4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX25pXzY3MHhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX25pXzY3MHhfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfMF8yMG1BID0geyAxLCB7UkFOR0VfbUEoMCwgMjApfSB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCmluZGV4IDliZmYzNGMuLmU0NmQ2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hMjE1MC5jCkBAIC0xOTcsNyArMTk3LDE4IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYTIxNTApOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2EyMTUwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9hMjE1MCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYTIxNTBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9hMjE1MCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9hMjE1MF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYTIxNTBfY2xlYW51cF9tb2R1bGUpOwogCiAjaWZkZWYgQTIxNTBfREVCVUcKIApAQCAtOTEwLDMgKzkyMSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwppbmRleCBjZTYwMjI0Li4xMzhkY2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYW8uYwpAQCAtMTk0LDcgKzE5NCwxOCBAQAogCS5udW1fbmFtZXMgPSBBUlJBWV9TSVpFKGF0YW9fYm9hcmRzKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYXRhbyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRhb19pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfYXRhbyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfYXRhb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0YW8pOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfYXRhb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfYXRhb19jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKQEAgLTQ1OSwzICs0NzAsNyBAQAogCiAJcmV0dXJuIGluc24tPm47CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKaW5kZXggMDAzZDAwYi4uMzMzMGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMKQEAgLTM0OSw3ICszNDksMTggQEAKIAkuZGV0YWNoID0gbmlfYXRtaW9fZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRtaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2F0bWlvKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hdG1pb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0bWlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2F0bWlvX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hdG1pb19jbGVhbnVwX21vZHVsZSk7CiAKICNpbmNsdWRlICJuaV9taW9fY29tbW9uLmMiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKaW5kZXggY2Y0ZjI0MS4uMjg1YjkzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKQEAgLTE1MSw3ICsxNTEsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhdG1pbzE2X2JvYXJkX3QpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbzE2ZCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfYXRtaW8xNmRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2F0bWlvMTZkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9hdG1pbzE2ZF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2F0bWlvMTZkKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2F0bWlvMTZkX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9hdG1pbzE2ZF9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIHJhbmdlIHN0cnVjdHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV8xMF9iaXBvbGFyID0geyA0LCB7CkBAIC04ODcsMyArODk4LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCA2ZWM3N2JmLi5jYzE1NjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTM3Nyw3ICszNzYsNyBAQAogCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCiAJCWlmICghbGluaykKIAkJCXJldHVybiAtRUlPOwotCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICNpZmRlZiBpbmNvbXBsZXRlCiAJCWlycSA9IGxpbmstPmlycTsKICNlbmRpZgpAQCAtNDU5LDE0ICs0NTgsNiBAQAogICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgogKi8KIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV83MDAiOwotCiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKIAlpbnQgc3RvcDsKQEAgLTUzNyw4ICs1MjgsNyBAQAogCWRpbzcwMF9yZWxlYXNlKGxpbmspOwogCiAJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBkaW83MDBfY3NfZGV0YWNoICovCiAKQEAgLTU1Niw5ICs1NDYsNiBAQAogCQkJCXVuc2lnbmVkIGludCB2Y2MsCiAJCQkJdm9pZCAqcHJpdl9kYXRhKQogewotCXdpbl9yZXFfdCAqcmVxID0gcHJpdl9kYXRhOwotCW1lbXJlcV90IG1hcDsKLQogCWlmIChjZmctPmluZGV4ID09IDApCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC01NzIsNDQgKzU1OSwyNSBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOwotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0JCXBfZGV2LT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOwotCQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCXBfZGV2LT5pb19saW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzICY9IH5JT19EQVRBX1BBVEhfV0lEVEg7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0KKwkJCXBjbWNpYV9pb19jZmdfZGF0YV93aWR0aChpby0+ZmxhZ3MpOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gaW8tPndpblswXS5iYXNlOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IGlvLT53aW5bMF0ubGVuOwogCQlpZiAoaW8tPm53aW4gPiAxKSB7Ci0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBwX2Rldi0+aW8uQXR0cmlidXRlczE7Ci0JCQlwX2Rldi0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOwotCQkJcF9kZXYtPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyA9IHBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3M7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQogCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pICE9IDApCisJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldikgIT0gMCkKIAkJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICgoY2ZnLT5tZW0ubndpbiA+IDApIHx8IChkZmx0LT5tZW0ubndpbiA+IDApKSB7Ci0JCWNpc3RwbF9tZW1fdCAqbWVtID0KLQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0LT5tZW07Ci0JCXJlcS0+QXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNOwotCQlyZXEtPkF0dHJpYnV0ZXMgfD0gV0lOX0VOQUJMRTsKLQkJcmVxLT5CYXNlID0gbWVtLT53aW5bMF0uaG9zdF9hZGRyOwotCQlyZXEtPlNpemUgPSBtZW0tPndpblswXS5sZW47Ci0JCWlmIChyZXEtPlNpemUgPCAweDEwMDApCi0JCQlyZXEtPlNpemUgPSAweDEwMDA7Ci0JCXJlcS0+QWNjZXNzU3BlZWQgPSAwOwotCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCByZXEsICZwX2Rldi0+d2luKSkKLQkJCXJldHVybiAtRU5PREVWOwotCQltYXAuUGFnZSA9IDA7Ci0JCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOwotCQlpZiAocGNtY2lhX21hcF9tZW1fcGFnZShwX2RldiwgcF9kZXYtPndpbiwgJm1hcCkpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLwogCXJldHVybiAwOwogfQpAQCAtNjIzLDcgKzU5MSw3IEBACiAKIAlkZXZfZGJnKCZsaW5rLT5kZXYsICJkaW83MDBfY29uZmlnXG4iKTsKIAotCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBkaW83MDBfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvNzAwX3BjbWNpYV9jb25maWdfbG9vcCwgTlVMTCk7CiAJaWYgKHJldCkgewogCQlkZXZfd2FybigmbGluay0+ZGV2LCAibm8gY29uZmlndXJhdGlvbiBmb3VuZFxuIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtNjQ1LDE1ICs2MTMsMTAgQEAKIAlkZXZfaW5mbygmbGluay0+ZGV2LCAiaW5kZXggMHglMDJ4IiwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CiAJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKIAkJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKLQkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKLQlpZiAobGluay0+d2luKQotCQlwcmludGsoIiwgbWVtIDB4JTA2bHgtMHglMDZseCIsIHJlcS5CYXNlLAotCQkgICAgICAgcmVxLkJhc2UgKyByZXEuU2l6ZSAtIDEpOworCWlmIChsaW5rLT5yZXNvdXJjZVswXSkKKwkJcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTcyMyw3ICs2ODYsNyBAQAogCS5pZF90YWJsZSA9IGRpbzcwMF9jc19pZHMsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAibmlfZGFxXzcwMCIsCiAJCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKaW5kZXggZTQ4NjViMS4uNzczYWUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtNDgsNyArNDgsNiBAQAogCiAjaW5jbHVkZSAiODI1NS5oIgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEyOSw3ICsxMjgsNyBAQAogCQlsaW5rID0gcGNtY2lhX2N1cl9kZXY7CS8qIFhYWCBoYWNrICovCiAJCWlmICghbGluaykKIAkJCXJldHVybiAtRUlPOwotCQlpb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJCWlvYmFzZSA9IGxpbmstPnJlc291cmNlWzBdLT5zdGFydDsKICNpZmRlZiBpbmNvbXBsZXRlCiAJCWlycSA9IGxpbmstPmlycTsKICNlbmRpZgpAQCAtMjExLDE0ICsyMTAsNiBAQAogICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgogKi8KIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV9kaW8yNCI7Ci0KIHN0cnVjdCBsb2NhbF9pbmZvX3QgewogCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwogCWludCBzdG9wOwpAQCAtMjg5LDggKzI4MCw3IEBACiAJZGlvMjRfcmVsZWFzZShsaW5rKTsKIAogCS8qIFRoaXMgcG9pbnRzIHRvIHRoZSBwYXJlbnQgbG9jYWxfaW5mb190IHN0cnVjdCAqLwotCWlmIChsaW5rLT5wcml2KQotCQlrZnJlZShsaW5rLT5wcml2KTsKKwlrZnJlZShsaW5rLT5wcml2KTsKIAogfQkJCQkvKiBkaW8yNF9jc19kZXRhY2ggKi8KIApAQCAtMzA4LDkgKzI5OCw2IEBACiAJCQkJdW5zaWduZWQgaW50IHZjYywKIAkJCQl2b2lkICpwcml2X2RhdGEpCiB7Ci0Jd2luX3JlcV90ICpyZXEgPSBwcml2X2RhdGE7Ci0JbWVtcmVxX3QgbWFwOwotCiAJaWYgKGNmZy0+aW5kZXggPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTMyNCw0NCArMzExLDI1IEBACiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CiAKIAkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KLQlwX2Rldi0+aW8uTnVtUG9ydHMxID0gcF9kZXYtPmlvLk51bVBvcnRzMiA9IDA7CisJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IDA7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCi0JCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PQorCQkJcGNtY2lhX2lvX2NmZ19kYXRhX3dpZHRoKGlvLT5mbGFncyk7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+c3RhcnQgPSBpby0+d2luWzBdLmJhc2U7CisJCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gaW8tPndpblswXS5sZW47CiAJCWlmIChpby0+bndpbiA+IDEpIHsKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMiA9IHBfZGV2LT5pby5BdHRyaWJ1dGVzMTsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmZsYWdzID0gcF9kZXYtPnJlc291cmNlWzBdLT5mbGFnczsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+c3RhcnQgPSBpby0+d2luWzFdLmJhc2U7CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPmVuZCA9IGlvLT53aW5bMV0ubGVuOwogCQl9CiAJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JCWlmIChwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbykgIT0gMCkKKwkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KSAhPSAwKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQtPm1lbS5ud2luID4gMCkpIHsKLQkJY2lzdHBsX21lbV90ICptZW0gPQotCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQtPm1lbTsKLQkJcmVxLT5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007Ci0JCXJlcS0+QXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOwotCQlyZXEtPkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7Ci0JCXJlcS0+U2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKLQkJaWYgKHJlcS0+U2l6ZSA8IDB4MTAwMCkKLQkJCXJlcS0+U2l6ZSA9IDB4MTAwMDsKLQkJcmVxLT5BY2Nlc3NTcGVlZCA9IDA7Ci0JCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3cocF9kZXYsIHJlcSwgJnBfZGV2LT53aW4pKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCW1hcC5QYWdlID0gMDsKLQkJbWFwLkNhcmRPZmZzZXQgPSBtZW0tPndpblswXS5jYXJkX2FkZHI7Ci0JCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+d2luLCAmbWFwKSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KIAkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjksMTMgKzMzNywxMiBAQAogc3RhdGljIHZvaWQgZGlvMjRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCWludCByZXQ7Ci0Jd2luX3JlcV90IHJlcTsKIAogCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8hIC0gY29uZmlnXG4iKTsKIAogCWRldl9kYmcoJmxpbmstPmRldiwgImRpbzI0X2NvbmZpZ1xuIik7CiAKLQlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wLCAmcmVxKTsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcobGluaywgZGlvMjRfcGNtY2lhX2NvbmZpZ19sb29wLCBOVUxMKTsKIAlpZiAocmV0KSB7CiAJCWRldl93YXJuKCZsaW5rLT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvdW5kXG4iKTsKIAkJZ290byBmYWlsZWQ7CkBAIC0zOTcsMTUgKzM2NCwxMCBAQAogCWRldl9pbmZvKCZsaW5rLT5kZXYsICJpbmRleCAweCUwMngiLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCi0JCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOwotCWlmIChsaW5rLT53aW4pCi0JCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCi0JCSAgICAgICByZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTQ3NCw3ICs0MzYsNyBAQAogCS5pZF90YWJsZSA9IGRpbzI0X2NzX2lkcywKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZHJ2ID0gewotCQkubmFtZSA9IGRldl9pbmZvLAorCQkubmFtZSA9ICJuaV9kYXFfZGlvMjQiLAogCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCA2N2M4YTUzLi4zYWNmN2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtNTI2LDcgKzUyNiw4IEBACiAJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3MsIGlzcl9mbGFnczsKIAlzaG9ydCBsc2IsIG1zYjsKIAotCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsCisJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogbmlfbGFicGM6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsCisJCQkJCQkJCXRoaXNib2FyZC0+bmFtZSwKIAkgICAgICAgaW9iYXNlKTsKIAlpZiAoaXJxKQogCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKQEAgLTU0Myw3ICs1NDQsNyBAQAogCQkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLwogCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgTEFCUENfU0laRSwKIAkJCQkgICAgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgewotCQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJfQpAQCAtNTc1LDcgKzU3Niw3IEBACiAJCQlpc3JfZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAogCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgewotCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC01ODMsMTggKzU4NCwxOCBAQAogCiAJLyogZ3JhYiBkbWEgY2hhbm5lbCAqLwogCWlmIChkbWFfY2hhbiA+IDMpIHsKLQkJcHJpbnRrKCIgaW52YWxpZCBkbWEgY2hhbm5lbCAldVxuIiwgZG1hX2NoYW4pOworCQlwcmludGsoS0VSTl9FUlIgIiBpbnZhbGlkIGRtYSBjaGFubmVsICV1XG4iLCBkbWFfY2hhbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSBpZiAoZG1hX2NoYW4pIHsKIAkJLyogYWxsb2NhdGUgZG1hIGJ1ZmZlciAqLwogCQlkZXZwcml2LT5kbWFfYnVmZmVyID0KIAkJICAgIGttYWxsb2MoZG1hX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyID09IE5VTEwpIHsKLQkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgewotCQkJcHJpbnRrKCIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAogCQkJICAgICAgIGRtYV9jaGFuKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC02OTAsNyArNjkxLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspCiAJCQlkZXZwcml2LT5lZXByb21fZGF0YVtpXSA9IGxhYnBjX2VlcHJvbV9yZWFkKGRldiwgaSk7CiAjaWZkZWYgTEFCUENfREVCVUcKLQkJcHJpbnRrKCIgZWVwcm9tOiIpOworCQlwcmludGsoS0VSTl9FUlIgIiBlZXByb206Iik7CiAJCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKQogCQkJcHJpbnRrKCIgJWk6MHgleCAiLCBpLCBkZXZwcml2LT5lZXByb21fZGF0YVtpXSk7CiAJCXByaW50aygiXG4iKTsKQEAgLTczMiw3ICs3MzMsOCBAQAogCQlpb2Jhc2UgPSAodW5zaWduZWQgbG9uZylkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcjsKIAkJaXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CiAjZWxzZQotCQlwcmludGsoIiB0aGlzIGRyaXZlciBoYXMgbm90IGJlZW4gYnVpbHQgd2l0aCBQQ0kgc3VwcG9ydC5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiB0aGlzIGRyaXZlciBoYXMgbm90IGJlZW4gYnVpbHQgd2l0aCBQQ0kgIgorCQkJCQkJCQkic3VwcG9ydC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCQlicmVhazsKQEAgLTc0Miw3ICs3NDQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJidWchIGNvdWxkbid0IGRldGVybWluZSBib2FyZCB0eXBlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KQEAgLTc3Niw3ICs3NzgsNyBAQAogCQkJfQogCQl9CiAJfQotCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm5vIGRldmljZSBmb3VuZFxuIik7CiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KQEAgLTc4NCw3ICs3ODYsNyBAQAogCiBpbnQgbGFicGNfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldi0+c3ViZGV2aWNlcykKIAkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOwpAQCAtODQ2LDcgKzg0OCw3IEBACiAJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPiBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMV0pKQogCQlyZXR1cm4gTU9ERV9NVUxUX0NIQU5fRE9XTjsKIAotCXByaW50aygibmlfbGFicGM6IGJ1ZyEgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIm5pX2xhYnBjOiBidWchIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwMiw3ICs5MDQsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoIm5pX2xhYnBjOiBidWchIGluIGNoYW5saXN0IGNoZWNrXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAibmlfbGFicGM6IGJ1ZyEgaW4gY2hhbmxpc3QgY2hlY2tcbiIpOwogCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTA5Niw3ICsxMDk4LDEwIEBACiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKLQkJLyogIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIgb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbCAqLworCQkvKgorCQkgKiBUUklHX0VYVCBkb2Vzbid0IGNhcmUgc2luY2UgaXQgZG9lc24ndAorCQkgKiB0cmlnZ2VyIG9mZiBhIG51bWJlcmVkIGNoYW5uZWwKKwkJICovCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTE1NCwyNSArMTE1OSwzNSBAQAogCiAJLyogIHNldHVwIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciAqLwogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7Ci0JCS8qICBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMCAqLworCQkvKgorCQkgKiBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzCisJCSAqIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMAorCQkgKi8KIAkJcmV0ID0gbGFicGNfY291bnRlcl9sb2FkKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQkFTRV9SRUcsCiAJCQkJCSAxLCAzLCAwKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBsb2FkaW5nIGNvdW50ZXIgYTEiKTsKIAkJCXJldHVybiAtMTsKIAkJfQotCX0gZWxzZQkJCS8qICBvdGhlcndpc2UsIGp1c3QgcHV0IGExIGluIG1vZGUgMCB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdyAqLworCX0gZWxzZQkJCS8qCisJCQkJICogb3RoZXJ3aXNlLCBqdXN0IHB1dCBhMSBpbiBtb2RlIDAKKwkJCQkgKiB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdworCQkJCSAqLwogCQlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTFfQklUUywKIAkJCQkgICAgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOwogCiAJLyogIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2Qgd2Ugd2lsbCB1c2UgdG8gdHJhbnNmZXIgZGF0YSAqLwogCWlmIChkZXZwcml2LT5kbWFfY2hhbiAmJgkvKiAgbmVlZCBhIGRtYSBjaGFubmVsIGFsbG9jYXRlZCAqLwotCSAgICAvKiAgZG1hIHVuc2FmZSBhdCBSVCBwcmlvcml0eSwgYW5kIHRvbyBtdWNoIHNldHVwIHRpbWUgZm9yIFRSSUdfV0FLRV9FT1MgZm9yICovCisJCS8qCisJCSAqIGRtYSB1bnNhZmUgYXQgUlQgcHJpb3JpdHksCisJCSAqIGFuZCB0b28gbXVjaCBzZXR1cCB0aW1lIGZvciBUUklHX1dBS0VfRU9TIGZvcgorCQkgKi8KIAkgICAgKGNtZC0+ZmxhZ3MgJiAoVFJJR19XQUtFX0VPUyB8IFRSSUdfUlQpKSA9PSAwICYmCiAJICAgIC8qICBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgaXNhIGJvYXJkcyAqLwogCSAgICB0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUpIHsKIAkJeGZlciA9IGlzYV9kbWFfdHJhbnNmZXI7Ci0JfSBlbHNlIGlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCAmJgkvKiAgcGMtcGx1cyBoYXMgbm8gZmlmby1oYWxmIGZ1bGwgaW50ZXJydXB0ICovCisJCS8qIHBjLXBsdXMgaGFzIG5vIGZpZm8taGFsZiBmdWxsIGludGVycnVwdCAqLworCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQgJiYKIAkJICAgLyogIHdha2UtZW5kLW9mLXNjYW4gc2hvdWxkIGludGVycnVwdCBvbiBmaWZvIG5vdCBlbXB0eSAqLwogCQkgICAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDAgJiYKIAkJICAgLyogIG1ha2Ugc3VyZSB3ZSBhcmUgdGFraW5nIG1vcmUgdGhhbiBqdXN0IGEgZmV3IHBvaW50cyAqLwpAQCAtMTYxOSw3ICsxNjM0LDEwIEBACiAJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gQURDX0RJRkZfQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDRfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENF9SRUcpOwogCi0JLyogaW5pdGlhbGl6ZSBwYWNlciBjb3VudGVyIG91dHB1dCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBhbnkgcHJvYmxlbXMgKi8KKwkvKgorCSAqIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgKiBjYXVzZSBhbnkgcHJvYmxlbXMKKwkgKi8KIAlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTBfQklUUywgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOwogCiAJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKQEAgLTE4NDQsNyArMTg2MiwxMCBAQAogCQl1bnNpZ25lZCBpbnQgc2Nhbl9wZXJpb2Q7CiAKIAkJc2Nhbl9wZXJpb2QgPSBsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpOwotCQkvKiBjYWxjdWxhdGUgY2FzY2FkZWQgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgc2NhbiB0aW1pbmcgKi8KKwkJLyoKKwkJICogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzCisJCSAqIHRoYXQgZ2l2ZSBkZXNpcmVkIHNjYW4gdGltaW5nCisJCSAqLwogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoTEFCUENfVElNRVJfQkFTRSwKIAkJCQkJICAgICAgICYoZGV2cHJpdi0+ZGl2aXNvcl9iMSksCiAJCQkJCSAgICAgICAmKGRldnByaXYtPmRpdmlzb3JfYjApLApAQCAtMTg1NSw3ICsxODc2LDEwIEBACiAJCXVuc2lnbmVkIGludCBjb252ZXJ0X3BlcmlvZDsKIAogCQljb252ZXJ0X3BlcmlvZCA9IGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCk7Ci0JCS8qIGNhbGN1bGF0ZSBjYXNjYWRlZCBjb3VudGVyIHZhbHVlcyB0aGF0IGdpdmUgZGVzaXJlZCBjb252ZXJzaW9uIHRpbWluZyAqLworCQkvKgorCQkgKiBjYWxjdWxhdGUgY2FzY2FkZWQgY291bnRlciB2YWx1ZXMKKwkJICogdGhhdCBnaXZlIGRlc2lyZWQgY29udmVyc2lvbiB0aW1pbmcKKwkJICovCiAJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAogCQkJCQkgICAgICAgJihkZXZwcml2LT5kaXZpc29yX2EwKSwKIAkJCQkJICAgICAgICYoZGV2cHJpdi0+ZGl2aXNvcl9iMCksCkBAIC0yMDc2LDkgKzIxMDAsNTYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01FRElfUENJCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYywgbGFicGNfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9sYWJwY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfbGFicGMuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX2xhYnBjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwljb21lZGlfcGNpX2F1dG9fdW5jb25maWcoZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlcl9sYWJwY19wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IGxhYnBjX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX2xhYnBjX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9sYWJwY19wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9sYWJwYyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfbGFicGNfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfbGFicGMuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9sYWJwY19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX2xhYnBjX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSk7CiAjZWxzZQotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfbGFicGNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2xhYnBjKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2xhYnBjX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9sYWJwY19jbGVhbnVwX21vZHVsZSk7CiAjZW5kaWYKIAogRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfY29tbW9uX2F0dGFjaCk7CkBAIC0yMDg2LDMgKzIxNTcsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmFuZ2VfbGFicGNfMTIwMF9haSk7CiBFWFBPUlRfU1lNQk9MX0dQTChsYWJwY18xMjAwX2FpX2dhaW5fYml0cyk7CiBFWFBPUlRfU1lNQk9MX0dQTChsYWJwY18xMjAwX2lzX3VuaXBvbGFyKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwppbmRleCAxNjMyNDVlLi42OGM0ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwpAQCAtNzEsNyArNzEsNiBAQAogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgogI2luY2x1ZGUgIm5pX2xhYnBjLmgiCiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgpAQCAtMTQzLDcgKzE0Miw3IEBACiAJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KIAkJaWYgKCFsaW5rKQogCQkJcmV0dXJuIC1FSU87Ci0JCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJaW9iYXNlID0gbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0OwogCQlpcnEgPSBsaW5rLT5pcnE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xODksMTQgKzE4OCw2IEBACiAgICBsZXNzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCiAqLwogCi0vKgotICAgVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcwotICAgZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KLSAgIGRhdGFiYXNlLgotKi8KLQotc3RhdGljIGNvbnN0IGRldl9pbmZvX3QgZGV2X2luZm8gPSAiZGFxY2FyZC0xMjAwIjsKLQogc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CiAJaW50IHN0b3A7CkBAIC0yODYsOSArMjc3LDYgQEAKIAkJCQl1bnNpZ25lZCBpbnQgdmNjLAogCQkJCXZvaWQgKnByaXZfZGF0YSkKIHsKLQl3aW5fcmVxX3QgKnJlcSA9IHByaXZfZGF0YTsKLQltZW1yZXFfdCBtYXA7Ci0KIAlpZiAoY2ZnLT5pbmRleCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMzAyLDQ0ICsyOTAsMjUgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUSB8IENPTkZfRU5BQkxFX1BVTFNFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSAhPSAwKQorCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpICE9IDApCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC0+bWVtLm53aW4gPiAwKSkgewotCQljaXN0cGxfbWVtX3QgKm1lbSA9Ci0JCQkoY2ZnLT5tZW0ubndpbikgPyAmY2ZnLT5tZW0gOiAmZGZsdC0+bWVtOwotCQlyZXEtPkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKLQkJcmVxLT5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7Ci0JCXJlcS0+QmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKLQkJcmVxLT5TaXplID0gbWVtLT53aW5bMF0ubGVuOwotCQlpZiAocmVxLT5TaXplIDwgMHgxMDAwKQotCQkJcmVxLT5TaXplID0gMHgxMDAwOwotCQlyZXEtPkFjY2Vzc1NwZWVkID0gMDsKLQkJaWYgKHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhwX2RldiwgcmVxLCAmcF9kZXYtPndpbikpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJbWFwLlBhZ2UgPSAwOwotCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKLQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT53aW4sICZtYXApKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTM0OCwxMSArMzE3LDEwIEBACiBzdGF0aWMgdm9pZCBsYWJwY19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7CiAJaW50IHJldDsKLQl3aW5fcmVxX3QgcmVxOwogCiAJZGV2X2RiZygmbGluay0+ZGV2LCAibGFicGNfY29uZmlnXG4iKTsKIAotCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBsYWJwY19wY21jaWFfY29uZmlnX2xvb3AsICZyZXEpOworCXJldCA9IHBjbWNpYV9sb29wX2NvbmZpZyhsaW5rLCBsYWJwY19wY21jaWFfY29uZmlnX2xvb3AsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJZGV2X3dhcm4oJmxpbmstPmRldiwgIm5vIGNvbmZpZ3VyYXRpb24gZm91bmRcbiIpOwogCQlnb3RvIGZhaWxlZDsKQEAgLTM3NCwxNSArMzQyLDEwIEBACiAJZGV2X2luZm8oJmxpbmstPmRldiwgImluZGV4IDB4JTAyeCIsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7Ci0JaWYgKGxpbmstPndpbikKLQkJcHJpbnRrKCIsIG1lbSAweCUwNmx4LTB4JTA2bHgiLCByZXEuQmFzZSwKLQkJICAgICAgIHJlcS5CYXNlICsgcmVxLlNpemUgLSAxKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMF0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMF0pOworCWlmIChsaW5rLT5yZXNvdXJjZVsxXSkKKwkJcHJpbnRrKCIgJiAlcFIiLCBsaW5rLT5yZXNvdXJjZVsxXSk7CiAJcHJpbnRrKCJcbiIpOwogCiAJcmV0dXJuOwpAQCAtNDQ5LDcgKzQxMiw3IEBACiAJLmlkX3RhYmxlID0gbGFicGNfY3NfaWRzLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5kcnYgPSB7Ci0JCS5uYW1lID0gZGV2X2luZm8sCisJCS5uYW1lID0gImRhcWNhcmQtMTIwMCIsCiAJCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKaW5kZXggM2E0NmYwYy4uMWYyNDI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIm5pX3N0Yy5oIgogI2luY2x1ZGUgIjgyNTUuaCIKIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTI2MSwxMiArMjYwLDExIEBACiBzdGF0aWMgdm9pZCBjc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldiA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgZGV2X2luZm9fdCBkZXZfaW5mbyA9ICJuaV9taW9fY3MiOwogCiBzdGF0aWMgaW50IGNzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQlsaW5rLT5pby5OdW1Qb3J0czEgPSAxNjsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPnJlc291cmNlWzBdLT5lbmQgPSAxNjsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAKQEAgLTMxMSwxMyArMzA5LDEyIEBACiB7CiAJaW50IGJhc2UsIHJldDsKIAotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBjZmctPmlvLndpblswXS5sZW47Ci0JcF9kZXYtPmlvLklPQWRkckxpbmVzID0gY2ZnLT5pby5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOwotCXBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gY2ZnLT5pby53aW5bMF0ubGVuOworCXBfZGV2LT5pb19saW5lcyA9IGNmZy0+aW8uZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKIAogCWZvciAoYmFzZSA9IDB4MDAwOyBiYXNlIDwgMHg0MDA7IGJhc2UgKz0gMHgyMCkgewotCQlwX2Rldi0+aW8uQmFzZVBvcnQxID0gYmFzZTsKLQkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0ID0gYmFzZTsKKwkJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCQlpZiAoIXJldCkKIAkJCXJldHVybiAwOwogCX0KQEAgLTM1Niw3ICszNTMsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRldi0+ZHJpdmVyID0gJmRyaXZlcl9uaV9taW9fY3M7Ci0JZGV2LT5pb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJZGV2LT5pb2Jhc2UgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlpcnEgPSBsaW5rLT5pcnE7CiAKQEAgLTQ1MCw3ICs0NDcsNyBAQAogCS5pZF90YWJsZSA9IG5pX21pb19jc19pZHMsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmRydiA9IHsKLQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJLm5hbWUgPSAibmlfbWlvX2NzIiwKIAkJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwppbmRleCBiMTI2NjM4Li44NGExNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCkBAIC0xMzE3LDQgKzEzMTcsNDAgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpZGlvLCBuaV9wY2lkaW9fcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2lkaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2lkaW8uZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaWRpb19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfcGNpZGlvX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfcGNpZGlvX3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3BjaWRpb19wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfcGNpZGlvX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNpZGlvX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2lkaW8pOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX3BjaWRpb19wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9wY2lkaW8uZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2lkaW9fcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNpZGlvX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXJfcGNpZGlvX3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjaWRpbyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2lkaW9faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjaWRpb19jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKaW5kZXggNTc3ZmRhOC4uMjNhMzgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwpAQCAtMTIzOSw3ICsxMjM5LDQzIEBACiAJLmRldGFjaCA9IHBjaW1pb19kZXRhY2gsCiB9OwogCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2ltaW8sIG5pX3BjaV90YWJsZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9wY2ltaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlyZXR1cm4gY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhkZXYsIGRyaXZlcl9wY2ltaW8uZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3BjaW1pb19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfcGNpbWlvX3BjaV9kcml2ZXIgPSB7CisJLmlkX3RhYmxlID0gbmlfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfcGNpbWlvX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoJmRyaXZlcl9wY2ltaW9fcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2ltaW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjaW1pbyk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkcml2ZXJfcGNpbWlvX3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3BjaW1pby5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3BjaW1pb19wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2ltaW9fY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9wY2ltaW9fcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNpbWlvKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjaW1pb19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNpbWlvX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IG5pX3ByaXZhdGUgewogTklfUFJJVkFURV9DT01NT059OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5jCmluZGV4IDEzZTViMjYuLmE5YmI2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCQkJCQkJCQkJbmlfZ3BjdF9yZWdpc3RlcgogCQkJCQkJCQkJcmVnKSwKIAkJCQkJCXVuc2lnbmVkICgqcmVhZF9yZWdpc3RlcikKLQkJCQkJCShzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsCisJCQkJCQkoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCiAJCQkJCQkgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksCiAJCQkJCQllbnVtIG5pX2dwY3RfdmFyaWFudCB2YXJpYW50LAogCQkJCQkJdW5zaWduZWQgbnVtX2NvdW50ZXJzKQpAQCAtMzMyLDYgKzMzMiw3IEBACiAJY291bnRlcl9kZXYtPm51bV9jb3VudGVycyA9IG51bV9jb3VudGVyczsKIAlyZXR1cm4gY291bnRlcl9kZXY7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3QpOwogCiB2b2lkIG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldikKIHsKQEAgLTM0MCw2ICszNDEsNyBAQAogCWtmcmVlKGNvdW50ZXJfZGV2LT5jb3VudGVycyk7CiAJa2ZyZWUoY291bnRlcl9kZXYpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfZGVzdHJveSk7CiAKIHN0YXRpYyBpbnQgbmlfdGlvX3NlY29uZF9nYXRlX3JlZ2lzdGVyc19wcmVzZW50KGNvbnN0IHN0cnVjdCBuaV9ncGN0X2RldmljZQogCQkJCQkJKmNvdW50ZXJfZGV2KQpAQCAtNDE4LDYgKzQyMCw3IEBACiAJCQlOSVRJT19HaV9JbnRlcnJ1cHRfRW5hYmxlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKIAkJCX4wLCAweDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmlfdGlvX2NvdW50ZXJfc3RhdHVzKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQogewpAQCAtNDQ2LDkgKzQ0OSw3IEBACiAJaWYgKG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSA9PSAwKQogCQlyZXR1cm47CiAKLQlzd2l0Y2ggKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCi0JCQkJICAgICBjb3VudGluZ19tb2RlX3JlZykgJiBHaV9Db3VudGluZ19Nb2RlX01hc2spCi0JeworCXN3aXRjaCAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwgY291bnRpbmdfbW9kZV9yZWcpICYgR2lfQ291bnRpbmdfTW9kZV9NYXNrKSB7CiAJY2FzZSBHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYMV9CaXRzOgogCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDJfQml0czoKIAljYXNlIEdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVg0X0JpdHM6CkBAIC01MTMsOSArNTE0LDggQEAKIAkJY291bnRpbmdfbW9kZV9iaXRzIHw9CiAJCSAgICAoKG1vZGUgPj4gTklfR1BDVF9JTkRFWF9QSEFTRV9CSVRTSElGVCkgPDwKIAkJICAgICBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCkgJiBHaV9JbmRleF9QaGFzZV9NYXNrOwotCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkgeworCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkKIAkJCWNvdW50aW5nX21vZGVfYml0cyB8PSBHaV9JbmRleF9Nb2RlX0JpdDsKLQkJfQogCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKIAkJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT4KIAkJCQkJCQkgICBjb3VudGVyX2luZGV4KSwKQEAgLTUyOSwxMiArNTI5LDEwIEBACiAJCQkobW9kZSA+PiBOSV9HUENUX0NPVU5USU5HX0RJUkVDVElPTl9TSElGVCkgPDwKIAkJCUdpX1VwX0Rvd25fU2hpZnQpOwogCi0JaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKSB7CisJaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKQogCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9Pcl9HYXRlX0JpdDsKLQl9Ci0JaWYgKG1vZGUgJiBOSV9HUENUX0lOVkVSVF9PVVRQVVRfQklUKSB7CisJaWYgKG1vZGUgJiBOSV9HUENUX0lOVkVSVF9PVVRQVVRfQklUKQogCQlpbnB1dF9zZWxlY3RfYml0cyB8PSBHaV9PdXRwdXRfUG9sYXJpdHlfQml0OwotCX0KIAluaV90aW9fc2V0X2JpdHMoY291bnRlciwKIAkJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCiAJCQlHaV9HYXRlX1NlbGVjdF9Mb2FkX1NvdXJjZV9CaXQgfCBHaV9Pcl9HYXRlX0JpdCB8CkBAIC02MDAsNiArNTk4LDcgQEAKIAkJCQkgIDAsIDAsIGNvbW1hbmRfdHJhbnNpZW50X2JpdHMpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2FybSk7CiAKIHN0YXRpYyB1bnNpZ25lZCBuaV82NjB4X3NvdXJjZV9zZWxlY3RfYml0cyh1bnNpZ25lZCBpbnQgY2xvY2tfc291cmNlKQogewpAQCAtNzA2LDcgKzcwNSw3IEBACiAJCX0KIAkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQogCQkJYnJlYWs7Ci0JCXByaW50aygiaW52YWxpZCBjbG9jayBzb3VyY2UgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBjbG9jayBzb3VyY2UgMHglbHhcbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyljbG9ja19zb3VyY2UpOwogCQlCVUcoKTsKIAkJbmlfbV9zZXJpZXNfY2xvY2sgPSAwOwpAQCAtMTAyNiwxNCArMTAyNSwxMiBAQAogCWNvbnN0IHVuc2lnbmVkIG1vZGVfbWFzayA9IEdpX0dhdGVfUG9sYXJpdHlfQml0IHwgR2lfR2F0aW5nX01vZGVfTWFzazsKIAl1bnNpZ25lZCBtb2RlX3ZhbHVlcyA9IDA7CiAKLQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpIHsKKwlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpCiAJCW1vZGVfdmFsdWVzIHw9IEdpX0dhdGVfUG9sYXJpdHlfQml0OwotCX0KLQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9FREdFKSB7CisJaWYgKGdhdGVfc291cmNlICYgQ1JfRURHRSkKIAkJbW9kZV92YWx1ZXMgfD0gR2lfUmlzaW5nX0VkZ2VfR2F0aW5nX0JpdHM7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1vZGVfdmFsdWVzIHw9IEdpX0xldmVsX0dhdGluZ19CaXRzOwotCX0KIAluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCiAJCQltb2RlX21hc2ssIG1vZGVfdmFsdWVzKTsKIH0KQEAgLTEyOTAsNiArMTI4Nyw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3NldF9nYXRlX3NyYyk7CiAKIHN0YXRpYyBpbnQgbmlfdGlvX3NldF9vdGhlcl9zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGluZGV4LAogCQkJCXVuc2lnbmVkIGludCBzb3VyY2UpCkBAIC0xNTMxLDEyICsxNTI5LDEwIEBACiAJCQlCVUcoKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChtb2RlX2JpdHMgJiBHaV9HYXRlX1BvbGFyaXR5X0JpdCkgeworCQlpZiAobW9kZV9iaXRzICYgR2lfR2F0ZV9Qb2xhcml0eV9CaXQpCiAJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfSU5WRVJUOwotCQl9Ci0JCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgIT0gR2lfTGV2ZWxfR2F0aW5nX0JpdHMpIHsKKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykKIAkJCSpnYXRlX3NvdXJjZSB8PSBDUl9FREdFOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSA9PSBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cwpAQCAtMTU3Miw5ICsxNTY4LDggQEAKIAkJCSpnYXRlX3NvdXJjZSB8PSBDUl9JTlZFUlQ7CiAJCX0KIAkJLyogc2Vjb25kIGdhdGUgY2FuJ3QgaGF2ZSBlZGdlL2xldmVsIG1vZGUgc2V0IGluZGVwZW5kZW50bHkgKi8KLQkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykgeworCQlpZiAoKG1vZGVfYml0cyAmIEdpX0dhdGluZ19Nb2RlX01hc2spICE9IEdpX0xldmVsX0dhdGluZ19CaXRzKQogCQkJKmdhdGVfc291cmNlIHw9IENSX0VER0U7Ci0JCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjI3LDYgKzE2MjIsNyBAQAogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19pbnNuX2NvbmZpZyk7CiAKIGludCBuaV90aW9fcmluc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKIAkJIHVuc2lnbmVkIGludCAqZGF0YSkKQEAgLTE2ODEsNiArMTY3Nyw3IEBACiAJfTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19yaW5zbik7CiAKIHN0YXRpYyB1bnNpZ25lZCBuaV90aW9fbmV4dF9sb2FkX3JlZ2lzdGVyKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQogewpAQCAtMTY4OCwxMSArMTY4NSwxMCBAQAogCQkJCQkgICAgTklUSU9fR3h4X1N0YXR1c19SZWcoY291bnRlci0+CiAJCQkJCQkJCSBjb3VudGVyX2luZGV4KSk7CiAKLQlpZiAoYml0cyAmIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJaWYgKGJpdHMgJiBHaV9OZXh0X0xvYWRfU291cmNlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkKIAkJcmV0dXJuIE5JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmV0dXJuIE5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKLQl9CiB9CiAKIGludCBuaV90aW9fd2luc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKQEAgLTE3MzUsMTIgKzE3MzEsNCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLQotRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3JpbnNuKTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb193aW5zbik7Ci1FWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faW5zbl9jb25maWcpOwotRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYXJtKTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19zZXRfZ2F0ZV9zcmMpOwotRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCmluZGV4IGE0OTlmNzAuLmI0NDM4NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKQEAgLTE3MSw3ICsxNzEsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w3MTFfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MTEpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDcxMV9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsNzExKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w3MTFfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w3MTEpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsNzExX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w3MTFfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgewogCkBAIC0yNzAsNyArMjgxLDcgQEAKIAkJCQlnb3RvIG9rOwogCQkJdWRlbGF5KDEpOwogCQl9Ci0JCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogQS9EIHRpbWVvdXRcbiIsIGRldi0+bWlub3IpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBwY2w3MTE6IEEvRCB0aW1lb3V0XG4iLCBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FVElNRTsKIAogb2s6CkBAIC01MDUsNyArNTE2LDcgQEAKIC8qICBGcmVlIGFueSByZXNvdXJjZXMgdGhhdCB3ZSBoYXZlIGNsYWltZWQgICovCiBzdGF0aWMgaW50IHBjbDcxMV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDcxMTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CkBAIC01MjcsNyArNTM4LDcgQEAKIAkvKiBjbGFpbSBvdXIgSS9PIHNwYWNlICovCiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MTE6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzExOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTDcxMV9TSVpFLCAicGNsNzExIikpIHsKIAkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtNTQyLDE1ICs1NTMsMTUgQEAKIAkvKiBncmFiIG91ciBJUlEgKi8KIAlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKIAlpZiAoaXJxID4gdGhpc19ib2FyZC0+bWF4aXJxKSB7Ci0JCXByaW50aygiaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiaXJxIG91dCBvZiByYW5nZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoaXJxKSB7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIHBjbDcxMV9pbnRlcnJ1cHQsIDAsICJwY2w3MTEiLCBkZXYpKSB7Ci0JCQlwcmludGsoInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIGlycSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfSBlbHNlIHsKLQkJCXByaW50aygiKCBpcnEgPSAldSApXG4iLCBpcnEpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiKCBpcnEgPSAldSApXG4iLCBpcnEpOwogCQl9CiAJfQogCWRldi0+aXJxID0gaXJxOwpAQCAtNjI0LDcgKzYzNSwxMSBAQAogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREExX0xPKTsKIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMV9ISSk7CiAKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKaW5kZXggMGYxMDNjMy4uMzk2YTA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwpAQCAtOTMsNyArOTMsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w3MjRfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDcyNF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsNzI0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w3MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w3MjQpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsNzI0X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w3MjRfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaW50IHN1YmRldl84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yMjEsMyArMjMyLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKaW5kZXggNjAyNjFmNC4uMjRiMjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwpAQCAtMzAsNyArMzAsMTggQEAKIAkuZGV0YWNoID0gcGNsNzI1X2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzI1KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2w3MjVfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbDcyNSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNsNzI1X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNsNzI1KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbDcyNV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNsNzI1X2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY2w3MjVfZG9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCkBAIC0xMTAsMyArMTIxLDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKaW5kZXggNmExYTk3OS4uODk3Y2Q4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYwpAQCAtMTYyLDcgKzE2MiwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBjbDcyNl9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDcyNik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNsNzI2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2w3MjYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbDcyNl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbDcyNik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2w3MjZfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbDcyNl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0cnVjdCBwY2w3MjZfcHJpdmF0ZSB7CiAKQEAgLTM4MSwzICszOTIsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYwppbmRleCBlNWU3YmVkLi5jOTY4MmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCkBAIC01NSw3ICs1NSwxOCBAQAogCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBjbDczMF9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDczMCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNsNzMwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY2w3MzApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbDczMF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbDczMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY2w3MzBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbDczMF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgcGNsNzMwX2RvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQpAQCAtMTY2LDMgKzE3Nyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCmluZGV4IDFkZGMxOWMuLmM2ZGNlNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKQEAgLTE1LDk3ICsxNSw5OCBAQAogICogIGNhcmQ6ICAgQS04MjNQR0gsIEEtODIzUEdMLCBBLTgyNlBHCiAgKiBkcml2ZXI6ICBhODIzcGdoLCAgYTgyM3BnbCwgIGE4MjZwZwogICovCisKIC8qCi1Ecml2ZXI6IHBjbDgxMgotRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtODEyL1BHLCBQQ0wtODEzL0IsCi0gICAgICAgICAgICAgQURMaW5rIEFDTC04MTEyREcvSEcvUEcsIEFDTC04MTEzLCBBQ0wtODIxNiwKLSAgICAgICAgICAgICBJQ1AgREFTIEEtODIxUEdIL1BHTC9QR0wtTkRBLCBBLTgyMlBHSC9QR0wsIEEtODIzUEdIL1BHTCwgQS04MjZQRywKLSAgICAgICAgICAgICBJQ1AgREFTIElTTy04MTMKLUF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+Ci1EZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODEyIChwY2w4MTIpLCBQQ0wtODEyUEcgKHBjbDgxMnBnKSwKLSAgUENMLTgxMyAocGNsODEzKSwgUENMLTgxM0IgKHBjbDgxM2IpLCBbQURMaW5rXSBBQ0wtODExMkRHIChhY2w4MTEyZGcpLAotICBBQ0wtODExMkhHIChhY2w4MTEyaGcpLCBBQ0wtODExMyAoYWNsLTgxMTMpLCBBQ0wtODIxNiAoYWNsODIxNiksCi0gIFtJQ1BdIElTTy04MTMgKGlzbzgxMyksIEEtODIxUEdIIChhODIxcGdoKSwgQS04MjFQR0wgKGE4MjFwZ2wpLAotICBBLTgyMVBHTC1OREEgKGE4MjFwY2xuZGEpLCBBLTgyMlBHSCAoYTgyMnBnaCksIEEtODIyUEdMIChhODIycGdsKSwKLSAgQS04MjNQR0ggKGE4MjNwZ2gpLCBBLTgyM1BHTCAoYTgyM3BnbCksIEEtODI2UEcgKGE4MjZwZykKLVVwZGF0ZWQ6IE1vbiwgMDYgQXVnIDIwMDcgMTI6MDM6MTUgKzAxMDAKLVN0YXR1czogd29ya3MgKEkgaG9wZS4gTXkgYm9hcmQgZmlyZSB1cCB1bmRlciBteSBoYW5kcwotICAgICAgICAgICAgICAgYW5kIEkgY2Fubid0IHRlc3QgYWxsIGZlYXR1cmVzLikKLQotVGhpcyBkcml2ZXIgc3VwcG9ydHMgaW5zbiBhbmQgY21kIGludGVyZmFjZXMuIFNvbWUgYm9hcmRzIHN1cHBvcnQgb25seSBpbnNuCi1iZWNvdXNlIHRoZWlyIGhhcmR3YXJlIGRvbid0IGFsbG93IG1vcmUgKFBDTC04MTMvQiwgQUNMLTgxMTMsIElTTy04MTMpLgotRGF0YSB0cmFuc2ZlciBvdmVyIERNQSBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIHlvdSBtZWFzdXJlIG9ubHkgb25lCi1jaGFubmVsLCB0aGlzIGlzIHRvbyBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIHRoZXNlIGJvYXJkcy4KLQotT3B0aW9ucyBmb3IgUENMLTgxMjoKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKLSAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQotICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCi0gICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKLSAgWzRdIC0gMD1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMTBWCi0gICAgICAgIDE9QS9EIGlucHV0IHJhbmdlIGlzICsvLTVWCi0gICAgICAgIDI9QS9EIGlucHV0IHJhbmdlIGlzICsvLTIuNVYKLSAgICAgICAgMz1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMS4yNVYKLSAgICAgICAgND1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC42MjVWCi0gICAgICAgIDU9QS9EIGlucHV0IHJhbmdlIGlzICsvLTAuMzEyNVYKLSAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKLSAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0gICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQotCi1PcHRpb25zIGZvciBQQ0wtODEyUEcsIEFDTC04MTEyUEc6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3OyAxMCwgMTEsIDEyLCAxNCwgMTUpCi0gIFsyXSAtIERNQSAgKDA9ZGlzYWJsZSwgMSwgMykKLSAgWzNdIC0gMD10cmlnZ2VyIHNvdXJjZSBpcyBpbnRlcm5hbCA4MjUzIHdpdGggMk1IeiBjbG9jawotICAgICAgICAxPXRyaWdnZXIgc291cmNlIGlzIGV4dGVybmFsCi0gIFs0XSAtIDA9QS9EIGhhdmUgbWF4ICsvLTVWIGlucHV0Ci0gICAgICAgIDE9QS9EIGhhdmUgbWF4ICsvLTEwViBpbnB1dAotICBbNV0gLSAwPUQvQSBvdXRwdXRzIDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQotICAgICAgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKLSAgICAgICAgMj1EL0Egb3V0cHV0cyB1bmtub3duIChleHRlcm5hbCByZWZlcmVuY2UpCi0KLU9wdGlvbnMgZm9yIEFDTC04MTEyREcvSEcsIEEtODIyUEdML1BHSCwgQS04MjNQR0wvUEdILCBBQ0wtODIxNiwgQS04MjZQRzoKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKLSAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQotICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCi0gICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKLSAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KLSAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKLSAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKLSAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0gICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQotCi1PcHRpb25zIGZvciBBLTgyMVBHTC9QR0g6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gSVJRICAoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQotICBbMl0gLSAwPUEvRCBjaGFubmVscyBhcmUgUy5FLgotICAgICAgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgotICBbM10gLSAwPUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCi0gICAgICAgIDE9RC9BIG91dHB1dCAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCi0KLU9wdGlvbnMgZm9yIEEtODIxUEdMLU5EQToKLSAgWzBdIC0gSU8gQmFzZQotICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCi0gIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCi0gICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCi0KLU9wdGlvbnMgZm9yIFBDTC04MTM6Ci0gIFswXSAtIElPIEJhc2UKLQotT3B0aW9ucyBmb3IgUENMLTgxM0I6Ci0gIFswXSAtIElPIEJhc2UKLSAgWzFdIC0gMD0gYmlwb2xhciBpbnB1dHMKLSAgICAgICAgMT0gdW5pcG9sYXIgaW5wdXRzCi0KLU9wdGlvbnMgZm9yIEFDTC04MTEzLCBJU08tODEzOgotICBbMF0gLSBJTyBCYXNlCi0gIFsxXSAtIDA9IDEwViBiaXBvbGFyIGlucHV0cwotICAgICAgICAxPSAxMFYgdW5pcG9sYXIgaW5wdXRzCi0gICAgICAgIDI9IDIwViBiaXBvbGFyIGlucHV0cwotICAgICAgICAzPSAyMFYgdW5pcG9sYXIgaW5wdXRzCi0qLworICogRHJpdmVyOiBwY2w4MTIKKyAqIERlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxMi9QRywgUENMLTgxMy9CLAorICoJICAgICBBRExpbmsgQUNMLTgxMTJERy9IRy9QRywgQUNMLTgxMTMsIEFDTC04MjE2LAorICoJICAgICBJQ1AgREFTIEEtODIxUEdIL1BHTC9QR0wtTkRBLCBBLTgyMlBHSC9QR0wsIEEtODIzUEdIL1BHTCwgQS04MjZQRywKKyAqCSAgICAgSUNQIERBUyBJU08tODEzCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICogRGV2aWNlczogW0FkdmFudGVjaF0gUENMLTgxMiAocGNsODEyKSwgUENMLTgxMlBHIChwY2w4MTJwZyksCisgKglQQ0wtODEzIChwY2w4MTMpLCBQQ0wtODEzQiAocGNsODEzYiksIFtBRExpbmtdIEFDTC04MTEyREcgKGFjbDgxMTJkZyksCisgKglBQ0wtODExMkhHIChhY2w4MTEyaGcpLCBBQ0wtODExMyAoYWNsLTgxMTMpLCBBQ0wtODIxNiAoYWNsODIxNiksCisgKglbSUNQXSBJU08tODEzIChpc284MTMpLCBBLTgyMVBHSCAoYTgyMXBnaCksIEEtODIxUEdMIChhODIxcGdsKSwKKyAqCUEtODIxUEdMLU5EQSAoYTgyMXBjbG5kYSksIEEtODIyUEdIIChhODIycGdoKSwgQS04MjJQR0wgKGE4MjJwZ2wpLAorICoJQS04MjNQR0ggKGE4MjNwZ2gpLCBBLTgyM1BHTCAoYTgyM3BnbCksIEEtODI2UEcgKGE4MjZwZykKKyAqIFVwZGF0ZWQ6IE1vbiwgMDYgQXVnIDIwMDcgMTI6MDM6MTUgKzAxMDAKKyAqIFN0YXR1czogd29ya3MgKEkgaG9wZS4gTXkgYm9hcmQgZmlyZSB1cCB1bmRlciBteSBoYW5kcworICoJICAgICAgIGFuZCBJIGNhbm4ndCB0ZXN0IGFsbCBmZWF0dXJlcy4pCisgKgorICogVGhpcyBkcml2ZXIgc3VwcG9ydHMgaW5zbiBhbmQgY21kIGludGVyZmFjZXMuIFNvbWUgYm9hcmRzIHN1cHBvcnQgb25seSBpbnNuCisgKiBiZWNvdXNlIHRoZWlyIGhhcmR3YXJlIGRvbid0IGFsbG93IG1vcmUgKFBDTC04MTMvQiwgQUNMLTgxMTMsIElTTy04MTMpLgorICogRGF0YSB0cmFuc2ZlciBvdmVyIERNQSBpcyBzdXBwb3J0ZWQgb25seSB3aGVuIHlvdSBtZWFzdXJlIG9ubHkgb25lCisgKiBjaGFubmVsLCB0aGlzIGlzIHRvbyBoYXJkd2FyZSBsaW1pdGF0aW9uIG9mIHRoZXNlIGJvYXJkcy4KKyAqCisgKiBPcHRpb25zIGZvciBQQ0wtODEyOgorICogICBbMF0gLSBJTyBCYXNlCisgKiAgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICogICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgKiAgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAqICAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICogICBbNF0gLSAwPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xMFYKKyAqCSAgIDE9QS9EIGlucHV0IHJhbmdlIGlzICsvLTVWCisgKgkgICAyPUEvRCBpbnB1dCByYW5nZSBpcyArLy0yLjVWCisgKgkgICAzPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xLjI1VgorICoJICAgND1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC42MjVWCisgKgkgICA1PUEvRCBpbnB1dCByYW5nZSBpcyArLy0wLjMxMjVWCisgKiAgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAqCSAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorICoKKyAqIE9wdGlvbnMgZm9yIFBDTC04MTJQRywgQUNMLTgxMTJQRzoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAqICAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICogICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgKgkgICAxPXRyaWdnZXIgc291cmNlIGlzIGV4dGVybmFsCisgKiAgIFs0XSAtIDA9QS9EIGhhdmUgbWF4ICsvLTVWIGlucHV0CisgKgkgICAxPUEvRCBoYXZlIG1heCArLy0xMFYgaW5wdXQKKyAqICAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAqCSAgIDE9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICoJICAgMj1EL0Egb3V0cHV0cyB1bmtub3duIChleHRlcm5hbCByZWZlcmVuY2UpCisgKgorICogT3B0aW9ucyBmb3IgQUNMLTgxMTJERy9IRywgQS04MjJQR0wvUEdILCBBLTgyM1BHTC9QR0gsIEFDTC04MjE2LCBBLTgyNlBHOgorICogICBbMF0gLSBJTyBCYXNlCisgKiAgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICogICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgKiAgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAqCSAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAqICAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAqCSAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisgKiAgIFs1XSAtIDA9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAqCSAgIDI9RC9BIG91dHB1dHMgdW5rbm93biAoZXh0ZXJuYWwgcmVmZXJlbmNlKQorICoKKyAqIE9wdGlvbnMgZm9yIEEtODIxUEdML1BHSDoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgKiAgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgKgkgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgorICogICBbM10gLSAwPUQvQSBvdXRwdXQgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgKgkgICAxPUQvQSBvdXRwdXQgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICoKKyAqIE9wdGlvbnMgZm9yIEEtODIxUEdMLU5EQToKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgKiAgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgKgkgICAxPUEvRCBjaGFubmVscyBhcmUgRElGRgorICoKKyAqIE9wdGlvbnMgZm9yIFBDTC04MTM6CisgKiAgIFswXSAtIElPIEJhc2UKKyAqCisgKiBPcHRpb25zIGZvciBQQ0wtODEzQjoKKyAqICAgWzBdIC0gSU8gQmFzZQorICogICBbMV0gLSAwPSBiaXBvbGFyIGlucHV0cworICoJICAgMT0gdW5pcG9sYXIgaW5wdXRzCisgKgorICogT3B0aW9ucyBmb3IgQUNMLTgxMTMsIElTTy04MTM6CisgKiAgIFswXSAtIElPIEJhc2UKKyAqICAgWzFdIC0gMD0gMTBWIGJpcG9sYXIgaW5wdXRzCisgKgkgICAxPSAxMFYgdW5pcG9sYXIgaW5wdXRzCisgKgkgICAyPSAyMFYgYmlwb2xhciBpbnB1dHMKKyAqCSAgIDM9IDIwViB1bmlwb2xhciBpbnB1dHMKKyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CkBAIC0xMTcsNDkgKzExOCw1MCBAQAogCiAjaW5jbHVkZSAiODI1My5oIgogCi0jdW5kZWYgUENMODEyX0VYVERFQlVHCQkvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisjdW5kZWYgUENMODEyX0VYVERFQlVHCiAKIC8qIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLwotI2RlZmluZSBib2FyZFBDTDgxMlBHIAkJIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KLSNkZWZpbmUgYm9hcmRQQ0w4MTNCIAkJIDEKLSNkZWZpbmUgYm9hcmRQQ0w4MTIJCSAyCi0jZGVmaW5lIGJvYXJkUENMODEzIAkJIDMKLSNkZWZpbmUgYm9hcmRJU084MTMgCQkgNQotI2RlZmluZSBib2FyZEFDTDgxMTMgCQkgNgotI2RlZmluZSBib2FyZEFDTDgxMTIgCQkgNwkvKiBBQ0wtODExMkRHL0hHLCBBLTgyMlBHTC9QR0gsIEEtODIzUEdML1BHSCAqLwotI2RlZmluZSBib2FyZEFDTDgyMTYJCSA4CS8qIGFuZCBJQ1AgREFTIEEtODI2UEcgKi8KLSNkZWZpbmUgYm9hcmRBODIxCQkgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLworI2RlZmluZSBib2FyZFBDTDgxMlBHCSAgICAgIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KKyNkZWZpbmUgYm9hcmRQQ0w4MTNCCSAgICAgIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MTIJICAgICAgMgorI2RlZmluZSBib2FyZFBDTDgxMwkgICAgICAzCisjZGVmaW5lIGJvYXJkSVNPODEzCSAgICAgIDUKKyNkZWZpbmUgYm9hcmRBQ0w4MTEzCSAgICAgIDYKKyNkZWZpbmUgYm9hcmRBQ0w4MTEyCSAgICAgIDcgLyogQUNMLTgxMTJERy9IRywgQS04MjJQR0wvUEdILCBBLTgyM1BHTC9QR0ggKi8KKyNkZWZpbmUgYm9hcmRBQ0w4MjE2CSAgICAgIDgJLyogYW5kIElDUCBEQVMgQS04MjZQRyAqLworI2RlZmluZSBib2FyZEE4MjEJICAgICAgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLwogCi0jZGVmaW5lIFBDTHgxeF9JT1JBTkdFIAkJMTYKKyNkZWZpbmUgUENMeDF4X0lPUkFOR0UJICAgICAxNgogCi0jZGVmaW5lIFBDTDgxMl9DVFIwCQkgMAotI2RlZmluZSBQQ0w4MTJfQ1RSMQkJIDEKLSNkZWZpbmUgUENMODEyX0NUUjIJCSAyCi0jZGVmaW5lIFBDTDgxMl9DVFJDVEwJCSAzCi0jZGVmaW5lIFBDTDgxMl9BRF9MTwkJIDQKLSNkZWZpbmUgUENMODEyX0RBMV9MTwkJIDQKLSNkZWZpbmUgUENMODEyX0FEX0hJCQkgNQotI2RlZmluZSBQQ0w4MTJfREExX0hJCQkgNQotI2RlZmluZSBQQ0w4MTJfREEyX0xPCQkgNgotI2RlZmluZSBQQ0w4MTJfRElfTE8JCSA2Ci0jZGVmaW5lIFBDTDgxMl9EQTJfSEkJCSA3Ci0jZGVmaW5lIFBDTDgxMl9ESV9ISQkJIDcKLSNkZWZpbmUgUENMODEyX0NMUklOVAkJIDgKLSNkZWZpbmUgUENMODEyX0dBSU4JCSA5Ci0jZGVmaW5lIFBDTDgxMl9NVVgJCTEwCi0jZGVmaW5lIFBDTDgxMl9NT0RFCQkxMQotI2RlZmluZSBQQ0w4MTJfQ05URU5BQkxFIAkxMAotI2RlZmluZSBQQ0w4MTJfU09GVFRSSUcgCTEyCi0jZGVmaW5lIFBDTDgxMl9ET19MTwkJMTMKLSNkZWZpbmUgUENMODEyX0RPX0hJIAkJMTQKKyNkZWZpbmUgUENMODEyX0NUUjAJICAgICAgMAorI2RlZmluZSBQQ0w4MTJfQ1RSMQkgICAgICAxCisjZGVmaW5lIFBDTDgxMl9DVFIyCSAgICAgIDIKKyNkZWZpbmUgUENMODEyX0NUUkNUTAkgICAgICAzCisjZGVmaW5lIFBDTDgxMl9BRF9MTwkgICAgICA0CisjZGVmaW5lIFBDTDgxMl9EQTFfTE8JICAgICAgNAorI2RlZmluZSBQQ0w4MTJfQURfSEkJICAgICAgNQorI2RlZmluZSBQQ0w4MTJfREExX0hJCSAgICAgIDUKKyNkZWZpbmUgUENMODEyX0RBMl9MTwkgICAgICA2CisjZGVmaW5lIFBDTDgxMl9ESV9MTwkgICAgICA2CisjZGVmaW5lIFBDTDgxMl9EQTJfSEkJICAgICAgNworI2RlZmluZSBQQ0w4MTJfRElfSEkJICAgICAgNworI2RlZmluZSBQQ0w4MTJfQ0xSSU5UCSAgICAgIDgKKyNkZWZpbmUgUENMODEyX0dBSU4JICAgICAgOQorI2RlZmluZSBQQ0w4MTJfTVVYCSAgICAgMTAKKyNkZWZpbmUgUENMODEyX01PREUJICAgICAxMQorI2RlZmluZSBQQ0w4MTJfQ05URU5BQkxFICAgICAxMAorI2RlZmluZSBQQ0w4MTJfU09GVFRSSUcJICAgICAxMgorI2RlZmluZSBQQ0w4MTJfRE9fTE8JICAgICAxMworI2RlZmluZSBQQ0w4MTJfRE9fSEkJICAgICAxNAogCi0jZGVmaW5lIFBDTDgxMl9EUkRZIAkJMHgxMAkvKiA9MCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFBDTDgxMl9EUkRZCSAgIDB4MTAJLyogPTAgZGF0YSByZWFkeSAqLwogCi0jZGVmaW5lIEFDTDgyMTZfU1RBVFVTIAkJIDgJLyogNS4gYml0IHNpZ25hbGl6ZSBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEFDTDgyMTZfU1RBVFVTCSAgICAgIDgJLyogNS4gYml0IHNpZ25hbGl6ZSBkYXRhIHJlYWR5ICovCiAKLSNkZWZpbmUgQUNMODIxNl9EUkRZIAkJMHgyMAkvKiA9MCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIEFDTDgyMTZfRFJEWQkgICAweDIwCS8qID0wIGRhdGEgcmVhZHkgKi8KIAotI2RlZmluZSBNQVhfQ0hBTkxJU1RfTEVOCTI1NgkvKiBsZW5ndGggb2Ygc2NhbiBsaXN0ICovCisjZGVmaW5lIE1BWF9DSEFOTElTVF9MRU4gICAgMjU2CS8qIGxlbmd0aCBvZiBzY2FuIGxpc3QgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnX2FpID0geyA1LCB7CiAJCQkJCQkJICAgIEJJUF9SQU5HRSg1KSwKQEAgLTQwNyw3ICs0MDksMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w4MTJfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDgxMl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsODEyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w4MTJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w4MTIpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsODEyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w4MTJfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsODEyX3ByaXZhdGUgewogCkBAIC00NjYsMTAgKzQ3OSwxMyBAQAogCWludCBuOwogCWludCB0aW1lb3V0LCBoaTsKIAotCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CS8qIHNlbGVjdCBzb2Z0d2FyZSB0cmlnZ2VyICovCi0Jc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGluc24tPmNoYW5zcGVjLCAxKTsJLyogIHNlbGVjdCBjaGFubmVsIGFuZCByZW5nZSAqLworCS8qIHNlbGVjdCBzb2Z0d2FyZSB0cmlnZ2VyICovCisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsKKwkvKiAgc2VsZWN0IGNoYW5uZWwgYW5kIHJlbmdlICovCisJc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGluc24tPmNoYW5zcGVjLCAxKTsKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7Ci0JCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQlvdXRiKDI1NSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfU09GVFRSSUcpOwogCQl1ZGVsYXkoNSk7CiAJCXRpbWVvdXQgPSA1MDsJLyogd2FpdCBtYXggNTB1cywgaXQgbXVzdCBmaW5pc2ggdW5kZXIgMzN1cyAqLwogCQl3aGlsZSAodGltZW91dC0tKSB7CkBAIC01MDEsMTAgKzUxNywxMyBAQAogCWludCBuOwogCWludCB0aW1lb3V0OwogCi0Jb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KLQlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwkvKiAgc2VsZWN0IGNoYW5uZWwgYW5kIHJlbmdlICovCisJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KKwlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCS8qICBzZWxlY3QgY2hhbm5lbCBhbmQgcmVuZ2UgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJb3V0YigyNTUsIGRldi0+aW9iYXNlICsgUENMODEyX1NPRlRUUklHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CiAJCXVkZWxheSg1KTsKIAkJdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzLCBpdCBtdXN0IGZpbmlzaCB1bmRlciAzM3VzICovCiAJCXdoaWxlICh0aW1lb3V0LS0pIHsKQEAgLTU1OCw5ICs1NzcsOCBAQAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKIAkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOwotCX0KIAogCXJldHVybiBpOwogfQpAQCAtNjA4LDE0ICs2MjYsMTUgQEAKICovCiBzdGF0aWMgdm9pZCBwY2w4MTJfY21kdGVzdF9vdXQoaW50IGUsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdGFydHNyYz0leCBzY2Fuc3JjPSV4IGNvbnZzcmM9JXhcbiIsIGUsCisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODEyIGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAogCSAgICAgICBjbWQtPnN0YXJ0X3NyYywgY21kLT5zY2FuX2JlZ2luX3NyYywgY21kLT5jb252ZXJ0X3NyYyk7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdGFydGFyZz0lZCBzY2FuYXJnPSVkIGNvbnZhcmc9JWRcbiIsIGUsCisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODEyIGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAogCSAgICAgICBjbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7Ci0JcHJpbnRrKCJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCi0JICAgICAgIGNtZC0+c2Nhbl9lbmRfc3JjKTsKLQlwcmludGsoInBjbDgxMiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKLQkgICAgICAgY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsCisJICAgICAgIGNtZC0+c3RvcF9zcmMsIGNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY2w4MTIgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgIgorCSAgICAgICAiY2hhbmxpc3RsZW49JWRcbiIsIGUsIGNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLAorCSAgICAgICBjbWQtPmNoYW5saXN0X2xlbik7CiB9CiAjZW5kaWYKIApAQCAtNjQ1LDExICs2NjQsMTEgQEAKIAkJZXJyKys7CiAKIAl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOwotCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykgeworCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykKIAkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0VYVDsKLQl9IGVsc2UgeworCWVsc2UKIAkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOwotCX0KKwogCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKIAkJZXJyKys7CiAKQEAgLTY3Myw3ICs2OTIsMTAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUKKwkgKiB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgewogCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOwpAQCAtODA3LDcgKzgyOSw3IEBACiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY21kKC4uLilcbiIpOwogI2VuZGlmCiAKIAlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpCkBAIC04NDIsMTMgKzg2NCwxNSBAQAogCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCW1lbWNweShkZXZwcml2LT5haV9jaGFubGlzdCwgY21kLT5jaGFubGlzdCwKIAkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBjbWQtPnNjYW5fZW5kX2FyZyk7Ci0Jc2V0dXBfcmFuZ2VfY2hhbm5lbChkZXYsIHMsIGRldnByaXYtPmFpX2NoYW5saXN0WzBdLCAxKTsJLyogIHNlbGVjdCBmaXJzdCBjaGFubmVsIGFuZCByYW5nZSAqLworCS8qICBzZWxlY3QgZmlyc3QgY2hhbm5lbCBhbmQgcmFuZ2UgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3RbMF0sIDEpOwogCiAJaWYgKGRldnByaXYtPmRtYSkgewkvKiAgY2hlY2sgaWYgd2UgY2FuIHVzZSBETUEgdHJhbnNmZXIgKi8KIAkJZGV2cHJpdi0+YWlfZG1hID0gMTsKIAkJZm9yIChpID0gMTsgaSA8IGRldnByaXYtPmFpX25fY2hhbjsgaSsrKQogCQkJaWYgKGRldnByaXYtPmFpX2NoYW5saXN0WzBdICE9IGRldnByaXYtPmFpX2NoYW5saXN0W2ldKSB7Ci0JCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLyogIHdlIGNhbm4ndCB1c2UgRE1BIDotKCAqLworCQkJCS8qICB3ZSBjYW5uJ3QgdXNlIERNQSA6LSggKi8KKwkJCQlkZXZwcml2LT5haV9kbWEgPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCX0gZWxzZQpAQCAtODY5LDE0ICs4OTMsMTggQEAKIAlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAotCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvKiAgZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/ICovCisJLyogIGRvbid0IHdlIHdhbnQgd2FrZSB1cCBldmVyeSBzY2FuPyAqLworCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewogCQlkZXZwcml2LT5haV9lb3MgPSAxOworCisJCS8qICBETUEgaXMgdXNlbGVzcyBmb3IgdGhpcyBzaXR1YXRpb24gKi8KIAkJaWYgKGRldnByaXYtPmFpX25fY2hhbiA9PSAxKQotCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLyogIERNQSBpcyB1c2VsZXNzIGZvciB0aGlzIHNpdHVhdGlvbiAqLworCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsKIAl9CiAKIAlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7Ci0JCWlmIChkZXZwcml2LT5haV9lb3MpIHsJLyogIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4gKi8KKwkJLyogIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4gKi8KKwkJaWYgKGRldnByaXYtPmFpX2VvcykgewogCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPQogCQkJICAgIGRldnByaXYtPmFpX25fY2hhbiAqIHNpemVvZihzaG9ydCk7CiAJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9CkBAIC04OTQsOSArOTIyLDE3IEBACiAJCQlpZiAoZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKIAkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlieXRlcyA9IGRldnByaXYtPmFpX25fY2hhbiAqIGRldnByaXYtPmFpX3NjYW5zICogc2l6ZW9mKHNob3J0KTsJLyogIGhvdyBtYW55IHNhbXBsZXMgd2UgbXVzdCB0cmFuc2Zlcj8gKi8KLQkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOwkvKiAgaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlsbCAqLwotCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CS8qIG9uIGxhc3QgZG1hIHRyYW5zZmVyIG11c3QgYmUgbW92ZWQgKi8KKwkJCQkvKiAgaG93IG1hbnkgc2FtcGxlcyB3ZSBtdXN0IHRyYW5zZmVyPyAqLworCQkJCWJ5dGVzID0gZGV2cHJpdi0+YWlfbl9jaGFuICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnMgKiBzaXplb2Yoc2hvcnQpOworCisJCQkJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPQorCQkJCQlieXRlcyAvIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOworCisJCQkJLyogb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZCAqLworCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9CisJCQkJCWJ5dGVzICUgZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CiAJCQkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9PSAwKQogCQkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CiAJCQkJCSAgICBkZXZwcml2LT5sYXN0X2RtYV9ydW47CkBAIC05MzQsMTQgKzk3MCwxMyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7Ci0JCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CS8qICBsZXQncyBnbyEgKi8KLQl9IGVsc2UgewotCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDYsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiAgbGV0J3MgZ28hICovCi0JfQorCWlmIChkZXZwcml2LT5haV9kbWEpCQkJCQkvKiAgbGV0J3MgZ28hICovCisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJZWxzZQkJCQkJCQkvKiAgbGV0J3MgZ28hICovCisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgNiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CiAKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtOTgzLDcgKzEwMTgsOCBAQAogCiAJaWYgKGVycikgewogCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IHBjbDgxMjogKCVzIGF0IDB4JWx4KSBBL0QgY21kIElSUSB3aXRob3V0IERSRFkhXG4iLAorCQkgICAgKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpICIKKwkJICAgICAiQS9EIGNtZCBJUlEgd2l0aG91dCBEUkRZIVxuIiwKIAkJICAgICBkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGRldi0+aW9iYXNlKTsKIAkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CkBAIC0xMDA5LDcgKzEwNDUsOCBAQAogCWlmIChuZXh0X2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCiAJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CiAJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKLQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJCQkJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CiAJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJCX0KQEAgLTEwMzAsMTQgKzEwNjcsMTYgQEAKIAogCXMtPmFzeW5jLT5ldmVudHMgPSAwOwogCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7Ci0JCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsJLyogIGdldCBvbmUgc2FtcGxlICovCisJCQkJCQkJLyogIGdldCBvbmUgc2FtcGxlICovCisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsKIAogCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKIAkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKIAkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsKIAkJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOwogCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQkJCWJyZWFrOwpAQCAtMTA2MCw3ICsxMDk5LDcgQEAKIAlzaG9ydCAqcHRyOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYSguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CiAjZW5kaWYKIAlwdHIgPSAoc2hvcnQgKilkZXZwcml2LT5kbWFidWZbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXTsKIAlsZW4gPSAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSA+PiAxKSAtCkBAIC0xMDk1LDcgKzExMzQsNyBAQAogCXRyYW5zZmVyX2Zyb21fZG1hX2J1ZihkZXYsIHMsIHB0ciwgYnVmcHRyLCBsZW4pOwogCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYSguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEVORDogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CiAjZW5kaWYKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMTExLDExICsxMTUwLDEwIEBACiAJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQlpZiAoZGV2cHJpdi0+YWlfZG1hKSB7CisJaWYgKGRldnByaXYtPmFpX2RtYSkKIAkJcmV0dXJuIGludGVycnVwdF9wY2w4MTJfYWlfZG1hKGlycSwgZCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXJldHVybiBpbnRlcnJ1cHRfcGNsODEyX2FpX2ludChpcnEsIGQpOwotCX07CiB9CiAKIC8qCkBAIC0xMTMyLDcgKzExNzAsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmFpX2RtYSk7CS8qICB3aGVyZSBpcyBub3cgRE1BICovCisJCS8qICB3aGVyZSBpcyBub3cgRE1BICovCisJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+YWlfZG1hKTsKIAkJdG9wMiA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5haV9kbWEpOwogCQlpZiAodG9wMSA9PSB0b3AyKQogCQkJYnJlYWs7CkBAIC0xMTQyLDggKzExODEsOCBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwogCX0KLQotCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CS8qICB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlciAqLworCS8qICB3aGVyZSBpcyBub3cgRE1BIGluIGJ1ZmZlciAqLworCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CiAJdG9wMSA+Pj0gMTsJCS8qICBzYW1wbGUgcG9zaXRpb24gKi8KIAl0b3AyID0gdG9wMSAtIGRldnByaXYtPmFpX3BvbGxfcHRyOwogCWlmICh0b3AyIDwgMSkgewkJLyogIG5vIG5ldyBzYW1wbGVzICovCkBAIC0xMTcxLDcgKzEyMTAsOSBAQAogCQkJCXVuc2lnbmVkIGludCByYW5nZWNoYW4sIGNoYXIgd2FpdCkKIHsKIAl1bnNpZ25lZCBjaGFyIGNoYW5fcmVnID0gQ1JfQ0hBTihyYW5nZWNoYW4pOwkvKiAgbm9ybWFsIGJvYXJkICovCi0JdW5zaWduZWQgY2hhciBnYWluX3JlZyA9IENSX1JBTkdFKHJhbmdlY2hhbikgKyBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uOwkvKiAgZ2FpbiBpbmRleCAqLworCQkJCQkJCS8qICBnYWluIGluZGV4ICovCisJdW5zaWduZWQgY2hhciBnYWluX3JlZyA9IENSX1JBTkdFKHJhbmdlY2hhbikgKworCQkJCSBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uOwogCiAJaWYgKChjaGFuX3JlZyA9PSBkZXZwcml2LT5vbGRfY2hhbl9yZWcpCiAJICAgICYmIChnYWluX3JlZyA9PSBkZXZwcml2LT5vbGRfZ2Fpbl9yZWcpKQpAQCAtMTE4NCwyMCArMTIyNSwyNSBAQAogCQlpZiAoZGV2cHJpdi0+dXNlX2RpZmYpIHsKIAkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDMwOwkvKiAgRElGRiBpbnB1dHMgKi8KIAkJfSBlbHNlIHsKLQkJCWlmIChjaGFuX3JlZyAmIDB4ODApIHsKLQkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsJLyogIFNFIGlucHV0cyA4LTE1ICovCi0JCQl9IGVsc2UgewotCQkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDEwOwkvKiAgU0UgaW5wdXRzIDAtNyAqLwotCQkJfQorCQkJaWYgKGNoYW5fcmVnICYgMHg4MCkKKwkJCQkJCQkvKiAgU0UgaW5wdXRzIDgtMTUgKi8KKwkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsKKwkJCWVsc2UKKwkJCQkJCQkvKiAgU0UgaW5wdXRzIDAtNyAqLworCQkJCWNoYW5fcmVnID0gY2hhbl9yZWcgfCAweDEwOwogCQl9CiAJfQogCiAJb3V0YihjaGFuX3JlZywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgKi8KIAlvdXRiKGdhaW5fcmVnLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9HQUlOKTsJLyogc2VsZWN0IGdhaW4gKi8KIAotCWlmICh3YWl0KSB7Ci0JCXVkZWxheShkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCk7CS8qICBYWFggdGhpcyBkZXBlbmRzIG9uIHNlbGVjdGVkIHJhbmdlIGFuZCBjYW4gYmUgdmVyeSBsb25nIGZvciBzb21lIGhpZ2ggZ2FpbiByYW5nZXMhICovCi0JfQorCisJaWYgKHdhaXQpCisJCS8qCisJCSAqIFhYWCB0aGlzIGRlcGVuZHMgb24gc2VsZWN0ZWQgcmFuZ2UgYW5kIGNhbiBiZSB2ZXJ5IGxvbmcgZm9yCisJCSAqIHNvbWUgaGlnaCBnYWluIHJhbmdlcyEKKwkJICovCisJCXVkZWxheShkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCk7CiB9CiAKIC8qCkBAIC0xMjA3LDggKzEyNTMsOCBAQAogCQkJdW5zaWduZWQgaW50IGRpdmlzb3IxLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBzdGFydF9wYWNlciglZCwldSwldSlcbiIsIG1vZGUsIGRpdmlzb3IxLAotCSAgICAgICBkaXZpc29yMik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBCR046IHN0YXJ0X3BhY2VyKCVkLCV1LCV1KVxuIiwgbW9kZSwKKwkgICAgICAgZGl2aXNvcjEsIGRpdmlzb3IyKTsKICNlbmRpZgogCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSQ1RMKTsKIAlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUkNUTCk7CkBAIC0xMjIxLDcgKzEyNjcsNyBAQAogCQlvdXRiKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjEpOwogCX0KICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHN0YXJ0X3BhY2VyKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogRU5EOiBzdGFydF9wYWNlciguLi4pXG4iKTsKICNlbmRpZgogfQogCkBAIC0xMjUyLDE2ICsxMjk4LDE3IEBACiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOwogI2VuZGlmCiAJaWYgKGRldnByaXYtPmFpX2RtYSkKIAkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCi0Jb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogU3RvcCBBL0QgKi8KKwkJCQkJCQkvKiBTdG9wIEEvRCAqLworCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CiAJc3RhcnRfcGFjZXIoZGV2LCAtMSwgMCwgMCk7CS8qICBzdG9wIDgyNTQgKi8KIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjcyLDcgKzEzMTksNyBAQAogc3RhdGljIHZvaWQgcGNsODEyX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgUENMODEyX0VYVERFQlVHCi0JcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9yZXNldCguLi4pXG4iKTsKICNlbmRpZgogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTVVYKTsKIAlvdXRiKDAgKyBkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9HQUlOKTsKQEAgLTEzMDQsNyArMTM1MSw3IEBACiAJfQogCXVkZWxheSg1KTsKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9yZXNldCguLi4pXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNsODEyIEVEQkc6IEVORDogcGNsODEyX3Jlc2V0KC4uLilcbiIpOwogI2VuZGlmCiB9CiAKQEAgLTEzMjIsOCArMTM2OSw4IEBACiAJaW50IG5fc3ViZGV2aWNlczsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsIGRldi0+bWlub3IsCi0JICAgICAgIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsCisJICAgICAgIGRldi0+bWlub3IsIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UsICJwY2w4MTIiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKQEAgLTEzNDUsMTggKzEzOTIsMTggQEAKIAkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KIAkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKLQkJCQkgICAgIGlycSk7CisJCQkJICAgICgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsICIKKwkJCQkgICAgICJESVNBQkxJTkcgSVQiLCBpcnEpOwogCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJlcXVlc3RfaXJxCiAJCQkJICAgIChpcnEsIGludGVycnVwdF9wY2w4MTIsIDAsICJwY2w4MTIiLCBkZXYpKSB7CiAJCQkJCXByaW50awotCQkJCQkgICAgKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCi0JCQkJCSAgICAgaXJxKTsKKwkJCQkJICAgICgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCAiCisJCQkJCSAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCBpcnE9JXUiLCBpcnEpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMTM3NiwxNiArMTQyMywyMCBAQAogCQl9CiAJCXJldCA9IHJlcXVlc3RfZG1hKGRtYSwgInBjbDgxMiIpOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSAldSwgRkFJTCFcbiIsIGRtYSk7CisJCQlwcmludGsoS0VSTl9FUlIgIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSAldSwgRkFJTCFcbiIsCisJCQkgICAgICAgZG1hKTsKIAkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCiAJCX0KIAkJZGV2cHJpdi0+ZG1hID0gZG1hOwotCQlwcmludGsoIiwgZG1hPSV1IiwgZG1hKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiLCBkbWE9JXUiLCBkbWEpOwogCQlwYWdlcyA9IDE7CS8qIHdlIHdhbnQgOEtCICovCiAJCWRldnByaXYtPmRtYWJ1ZlswXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CiAJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CiAJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKLQkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQkvKgorCQkJICogbWF5YmUgZXhwZXJpbWVudCB3aXRoIHRyeV90b19mcmVlX3BhZ2VzKCkKKwkJCSAqIHdpbGwgaGVscCAuLi4uCisJCQkgKi8KIAkJCWZyZWVfcmVzb3VyY2VzKGRldik7CiAJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCiAJCX0KQEAgLTEzOTQsNyArMTQ0NSw3IEBACiAJCWRldnByaXYtPmh3ZG1hc2l6ZVswXSA9IFBBR0VfU0laRSAqICgxIDw8IHBhZ2VzKTsKIAkJZGV2cHJpdi0+ZG1hYnVmWzFdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKIAkJaWYgKCFkZXZwcml2LT5kbWFidWZbMV0pIHsKLQkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciwgRkFJTCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CiAJCQlmcmVlX3Jlc291cmNlcyhkZXYpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQpAQCAtMTQ1NywxMSArMTUwOCwxMSBAQAogCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKIAkJcy0+bGVuX2NoYW5saXN0ID0gTUFYX0NIQU5MSVNUX0xFTjsKIAkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7Ci0JCWlmICh0aGlzX2JvYXJkLT5ib2FyZF90eXBlID09IGJvYXJkQUNMODIxNikgeworCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSA9PSBib2FyZEFDTDgyMTYpCiAJCQlzLT5pbnNuX3JlYWQgPSBhY2w4MjE2X2FpX2luc25fcmVhZDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcy0+aW5zbl9yZWFkID0gcGNsODEyX2FpX2luc25fcmVhZDsKLQkJfQorCiAJCWRldnByaXYtPnVzZV9NUEMgPSB0aGlzX2JvYXJkLT5oYXZlTVBDNTA4OwogCQlzLT5jYW5jZWwgPSBwY2w4MTJfYWlfY2FuY2VsOwogCQlpZiAoZGV2LT5pcnEpIHsKQEAgLTE1MDAsOCArMTU1MSw4IEBACiAJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOwogCQkJCWJyZWFrOwogCQkJCXByaW50awotCQkJCSAgICAoIiwgaW5jb3JyZWN0IHJhbmdlIG51bWJlciAlZCwgY2hhbmdpbmcgdG8gMCAoKy8tMTBWKSIsCi0JCQkJICAgICBpdC0+b3B0aW9uc1s0XSk7CisJCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyAiCisJCQkJICAgICAidG8gMCAoKy8tMTBWKSIsIGl0LT5vcHRpb25zWzRdKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTUzMCw4ICsxNTgxLDggQEAKIAkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9pc284MTNfMV9haTsKIAkJCQlicmVhazsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsIGNoYW5naW5nIHRvIDAgIiwKLQkJCQkgICAgIGl0LT5vcHRpb25zWzFdKTsKKwkJCQkgICAgKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsICIKKwkJCQkgICAgICJjaGFuZ2luZyB0byAwICIsIGl0LT5vcHRpb25zWzFdKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTU1NSw4ICsxNjA2LDggQEAKIAkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfYWk7CiAJCQkJYnJlYWs7CiAJCQkJcHJpbnRrCi0JCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyB0byAwICIsCi0JCQkJICAgICBpdC0+b3B0aW9uc1sxXSk7CisJCQkJICAgICgiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCAiCisJCQkJICAgICAiY2hhbmdpbmcgdG8gMCAiLCBpdC0+b3B0aW9uc1sxXSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE2MjcsNyArMTY3OCw4IEBACiAJY2FzZSBib2FyZEFDTDgxMTI6CiAJCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gMTsKIAkJaWYgKGl0LT5vcHRpb25zWzNdID4gMCkKLQkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsJLyogIHdlIHVzZSBleHRlcm5hbCB0cmlnZ2VyICovCisJCQkJCQkvKiAgd2UgdXNlIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsKIAljYXNlIGJvYXJkQTgyMToKIAkJZGV2cHJpdi0+bWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQgPSAxOwogCQlkZXZwcml2LT5tb2RlX3JlZ19pbnQgPSAoaXJxIDw8IDQpICYgMHhmMDsKQEAgLTE2MzYsMTEgKzE2ODgsMTIgQEAKIAljYXNlIGJvYXJkUENMODEzOgogCWNhc2UgYm9hcmRJU084MTM6CiAJY2FzZSBib2FyZEFDTDgxMTM6Ci0JCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gNTsJLyogbWF5YmUgdGhlcmUgbXVzdCBieSBncmVhdGVzdCB0aW1lb3V0ICovCisJCS8qIG1heWJlIHRoZXJlIG11c3QgYnkgZ3JlYXRlc3QgdGltZW91dCAqLworCQlkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCA9IDU7CiAJCWJyZWFrOwogCX0KIAotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogCWRldnByaXYtPnZhbGlkID0gMTsKIAogCXBjbDgxMl9yZXNldChkZXYpOwpAQCAtMTY1NSw4ICsxNzA4LDEyIEBACiB7CiAKICNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAlmcmVlX3Jlc291cmNlcyhkZXYpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKaW5kZXggNzFjMmEzYS4uM2QwZjAxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwpAQCAtMiw3ICsyLDcgQEAKICAgIGNvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCiAKICAgIEF1dGhvcjogIEp1YW4gR3JpZ2VyYSA8anVhbkBncmlnZXJhLmNvbS5hcj4KLSAgICAgICAgICAgIGJhc2VkIG9uIHBjbDgxOCBieSBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gYW5kIGJpdHMgb2YgcGNsODEyCisJICAgIGJhc2VkIG9uIHBjbDgxOCBieSBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4gYW5kIGJpdHMgb2YgcGNsODEyCiAKICAgIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgogICAgIGNhcmQ6ICAgUENMLTgxNiwgUENMODE0QgpAQCAtMjgsNyArMjgsNyBAQAogICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKICAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCiAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0Ci0gICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisJICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKIAogKi8KIApAQCAtODUsNyArODUsNyBAQAogI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BX1JUQyAxMAogCiAvKiBSVEMgc3R1ZmYuLi4gKi8KLSNkZWZpbmUgUlRDX0lSUSAJOAorI2RlZmluZSBSVENfSVJRCQk4CiAjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMAogI2VuZGlmCiAKQEAgLTE2OCw3ICsxNjgsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwY2w4MTZfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTYpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbDgxNl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcGNsODE2KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY2w4MTZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY2w4MTYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcGNsODE2X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY2w4MTZfY2xlYW51cF9tb2R1bGUpOwogCiBzdHJ1Y3QgcGNsODE2X3ByaXZhdGUgewogCkBAIC0yNTMsNyArMjY0LDggQEAKIAogCS8qICBTZXQgdGhlIGlucHV0IGNoYW5uZWwgKi8KIAlvdXRiKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwotCW91dGIoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9SQU5HRSk7CS8qIHNlbGVjdCBnYWluICovCisJLyogc2VsZWN0IGdhaW4gKi8KKwlvdXRiKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwogCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewogCkBAIC0yNjgsOCArMjgwLDggQEAKIAkJCQkgICAgKChpbmIoZGV2LT5pb2Jhc2UgKwogCQkJCQkgIFBDTDgxNl9BRF9ISSkgPDwgOCkgfAogCQkJCSAgICAgKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTykpKTsKLQotCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJCS8qIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcgKi8KKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQl1ZGVsYXkoMSk7CkBAIC0yNzgsNyArMjkwLDggQEAKIAkJaWYgKCF0aW1lb3V0KSB7CiAJCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIGluc24gdGltZW91dFxuIik7CiAJCQlkYXRhWzBdID0gMDsKLQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMzMyLDcgKzM0NSw4IEBACiAJfQogCiAJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQkJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsKIAkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KIAkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKIAkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKQEAgLTM2OSw3ICszODMsOCBAQAogCQl9CiAKIAkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKLQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiAgYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQkJLyogIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewogCQkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKIAkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CkBAIC0zOTEsNyArNDA2LDggQEAKIAlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOwogCXRoaXNfZG1hX2J1ZiA9IGRldnByaXYtPm5leHRfZG1hX2J1ZjsKIAotCWlmICgoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID4gLTEpIHx8IGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSB7CS8qICBzd2l0Y2ggZG1hIGJ1ZnMgKi8KKwkvKiAgc3dpdGNoIGRtYSBidWZzICovCisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPiAtMSkgfHwgZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKIAogCQlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOwogCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKQEAgLTQ2NywxNCArNDgzLDE0IEBACiAqLwogc3RhdGljIHZvaWQgcGNsODE2X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewotCXByaW50aygicGNsODE2IGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAorCXByaW50ayhLRVJOX0lORk8gInBjbDgxNiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKIAkgICAgICAgY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOwotCXByaW50aygicGNsODE2IGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCXByaW50ayhLRVJOX0lORk8gInBjbDgxNiBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKIAkgICAgICAgY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOwotCXByaW50aygicGNsODE2IGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLCBjbWQtPnN0b3Bfc3JjLAotCSAgICAgICBjbWQtPnNjYW5fZW5kX3NyYyk7Ci0JcHJpbnRrKCJwY2w4MTYgZT0lZCBzdG9wYXJnPSVkIHNjYW5lbmRhcmc9JWQgY2hhbmxpc3RsZW49JWRcbiIsIGUsCi0JICAgICAgIGNtZC0+c3RvcF9hcmcsIGNtZC0+c2Nhbl9lbmRfYXJnLCBjbWQtPmNoYW5saXN0X2xlbik7CisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODE2IGU9JWQgc3RvcHNyYz0leCBzY2FuZW5kPSV4XG4iLCBlLAorCSAgICAgICBjbWQtPnN0b3Bfc3JjLCBjbWQtPnNjYW5fZW5kX3NyYyk7CisJcHJpbnRrKEtFUk5fSU5GTyAicGNsODE2IGU9JWQgc3RvcGFyZz0lZCBzY2FuZW5kYXJnPSVkIGNoYW5saXN0bGVuPSVkXG4iLAorCSAgICAgICBlLCBjbWQtPnN0b3BfYXJnLCBjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOwogfQogCiAvKgpAQCAtNDg2LDggKzUwMiw5IEBACiAJaW50IGVyciA9IDA7CiAJaW50IHRtcCwgZGl2aXNvcjEgPSAwLCBkaXZpc29yMiA9IDA7CiAKLQlERUJVRyhwcmludGsoInBjbDgxNiBwY2w4MTJfYWlfY21kdGVzdFxuIik7IHBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTsKLQkgICAgKTsKKwlERUJVRyhwcmludGsoS0VSTl9JTkZPICJwY2w4MTYgcGNsODEyX2FpX2NtZHRlc3RcbiIpOworCSAgICAgIHBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTsKKwkgICAgICk7CiAKIAkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLwogCXRtcCA9IGNtZC0+c3RhcnRfc3JjOwpAQCAtNTE1LDExICs1MzIsMTQgQEAKIAlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCiAJCWVycisrOwogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAxOwotCX0KIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcworCSAqIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgewogCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOwpAQCAtNTQ0LDkgKzU2NCw5IEBACiAJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKIAkJZXJyKys7CiAKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIDI7Ci0JfQorCiAKIAkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCiAJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKQEAgLTU4Niw5ICs2MDYsOSBAQAogCQl9CiAJfQogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAzOwotCX0KKwogCiAJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLwogCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKQEAgLTYwMyw5ICs2MjMsOSBAQAogCQkJZXJyKys7CiAJfQogCi0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiA0OwotCX0KKwogCiAJLyogc3RlcCA1OiBjb21wbGFpbiBhYm91dCBzcGVjaWFsIGNoYW5saXN0IGNvbnNpZGVyYXRpb25zICovCiAKQEAgLTY0Myw3ICs2NjMsOSBAQAogCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKHRoaXNfYm9hcmQtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCiAJCQkJCSAgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKIAkJCQkJICBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKLQkJaWYgKGRpdmlzb3IxID09IDEpIHsJLyogIFBDTDgxNiBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMSAqLworCisJCS8qICBQQ0w4MTYgY3Jhc2ggaWYgYW55IGRpdmlzb3IgaXMgc2V0IHRvIDEgKi8KKwkJaWYgKGRpdmlzb3IxID09IDEpIHsKIAkJCWRpdmlzb3IxID0gMjsKIAkJCWRpdmlzb3IyIC89IDI7CiAJCX0KQEAgLTY3Niw4ICs2OTgsMTAgQEAKIAkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOwogCX0KIAotCWlmICgoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CS8qICBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8gKi8KLQkJcHJpbnRrKCJwbDgxNjogWW91IHdhbmt0IFdBS0VfRU9TIGJ1dCBJIGRvbnQgd2FudCBoYW5kbGUgaXQiKTsKKwkvKiAgZG9uJ3Qgd2Ugd2FudCB3YWtlIHVwIGV2ZXJ5IHNjYW4/ICovCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgInBsODE2OiBZb3Ugd2Fua3QgV0FLRV9FT1MgYnV0IEkgZG9udCB3YW50IGhhbmRsZSBpdCIpOwogCQkvKiAgICAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOyAqLwogCQkvKiBpZiAoZGV2cHJpdi0+YWlfbl9jaGFuPT0xKSAqLwogCQkvKiAgICAgICBkZXZwcml2LT5kbWE9MDsgLy8gRE1BIGlzIHVzZWxlc3MgZm9yIHRoaXMgc2l0dWF0aW9uICovCkBAIC02ODYsOSArNzEwLDE3IEBACiAJaWYgKGRldnByaXYtPmRtYSkgewogCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKIAkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykgewotCQkJYnl0ZXMgPSBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbiAqIHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuICogc2l6ZW9mKHNob3J0KTsJLyogIGhvdyBtYW55ICovCi0JCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KLQkJCWRldnByaXYtPmxhc3RfZG1hX3J1biA9IGJ5dGVzICUgZGV2cHJpdi0+aHdkbWFzaXplWzBdOwkvKiBvbiBsYXN0IGRtYSB0cmFuc2ZlciBtdXN0IGJlIG1vdmVkICovCisJCQkvKiAgaG93IG1hbnkgKi8KKwkJCWJ5dGVzID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKgorCQkJcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKgorCQkJc2l6ZW9mKHNob3J0KTsKKworCQkJLyogIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwgKi8KKwkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IGJ5dGVzIC8KKwkJCWRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKworCQkJLyogb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZCAqLworCQkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5od2RtYXNpemVbMF07CiAJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKIAkJCWlmIChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPj0gMCkKIAkJCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKQEAgLTcxMSwxNCArNzQzLDIyIEBACiAJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CiAJY2FzZSBUUklHX1RJTUVSOgogCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJMV9ETUE7Ci0JCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qICBQYWNlcitJUlErRE1BICovCi0JCW91dGIoZG1haXJxLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9TVEFUVVMpOwkvKiAgd3JpdGUgaXJxIGFuZCBETUEgdG8gY2FyZCAqLworCisJCS8qICBQYWNlcitJUlErRE1BICovCisJCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CisKKwkJLyogIHdyaXRlIGlycSBhbmQgRE1BIHRvIGNhcmQgKi8KKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJZGV2cHJpdi0+aW50ODE2X21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BOwotCQlvdXRiKDB4MzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiAgRXh0IHRyaWcrSVJRK0RNQSAqLwotCQlvdXRiKGRtYWlycSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfU1RBVFVTKTsJLyogIHdyaXRlIGlycSB0byBjYXJkICovCisKKwkJLyogIEV4dCB0cmlnK0lSUStETUEgKi8KKwkJb3V0YigweDM0LCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsKKworCQkvKiAgd3JpdGUgaXJxIHRvIGNhcmQgKi8KKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CiAJCWJyZWFrOwogCX0KIApAQCAtNzQ3LDcgKzc4Nyw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCXRvcDEgPSBkZXZwcml2LT5od2RtYXNpemVbMF0gLSB0b3AxOwkvKiAgd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIgKi8KKwkvKiAgd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIgKi8KKwl0b3AxID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdIC0gdG9wMTsKIAl0b3AxID4+PSAxOwkJLyogIHNhbXBsZSBwb3NpdGlvbiAqLwogCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CiAJaWYgKHRvcDIgPCAxKSB7CQkvKiAgbm8gbmV3IHNhbXBsZXMgKi8KQEAgLTc4NywxNiArODI4LDIzIEBACiAJCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOwogCQljYXNlIElOVF9UWVBFX0FJMV9JTlQ6CiAJCWNhc2UgSU5UX1RZUEVfQUkzX0lOVDoKLQkJCW91dGIoaW5iKGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpICYgMHg3MywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qIFN0b3AgQS9EICovCisJCQlvdXRiKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKSAmIDB4NzMsCisJCQkgICAgIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLwogCQkJdWRlbGF5KDEpOwogCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KLQkJCW91dGIoMHhiMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLyogU3RvcCBwYWNlciAqLworCisJCQkvKiBTdG9wIHBhY2VyICovCisJCQlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJCQlvdXRiKDB4NzAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0FEX0xPKTsKIAkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CiAJCQlpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfSEkpOwotCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLwotCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKworCQkJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsKKworCQkJLyogU3RvcCBBL0QgKi8KKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CiAJCQlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CiAJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSBkZXZwcml2LT5pbnQ4MTZfbW9kZTsKIAkJCWRldnByaXYtPmludDgxNl9tb2RlID0gMDsKQEAgLTg2Niw4ICs5MTQsMTEgQEAKIAlvdXRiKDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjApOwogCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMCk7CiAJdWRlbGF5KDEpOwotCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLyogIHNldCBjb3VudGVyIDIgYXMgbW9kZSAzICovCi0Jb3V0YigweDc0LCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvKiAgc2V0IGNvdW50ZXIgMSBhcyBtb2RlIDMgKi8KKworCS8qICBzZXQgY291bnRlciAyIGFzIG1vZGUgMyAqLworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwkvKiAgc2V0IGNvdW50ZXIgMSBhcyBtb2RlIDMgKi8KKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CiAJdWRlbGF5KDEpOwogCiAJaWYgKG1vZGUgPT0gMSkgewpAQCAtOTAzLDQxICs5NTQsNTEgQEAKIAl9CiAKIAlpZiAoY2hhbmxlbiA+IDEpIHsKLQkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLyogIGZpcnN0IGNoYW5uZWwgaXMgZXZlcnl0aW1lIG9rICovCisJCS8qICBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvayAqLworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOwogCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgY2hhbmxlbjsgaSsrLCBzZWdsZW4rKykgewogCQkJLyogIGJ1aWxkIHBhcnQgb2YgY2hhbmxpc3QgKi8KLQkJCURFQlVHKHByaW50aygiJWQuICVkICVkXG4iLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKKwkJCURFQlVHKHByaW50ayhLRVJOX0lORk8gIiVkLiAlZCAlZFxuIiwgaSwKKwkJCQkgICAgIENSX0NIQU4oY2hhbmxpc3RbaV0pLAogCQkJCSAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTspCisKKwkJCS8qICB3ZSBkZXRlY3QgbG9vcCwgdGhpcyBtdXN0IGJ5IGZpbmlzaCAqLwogCQkJICAgIGlmIChjaGFubGlzdFswXSA9PSBjaGFubGlzdFtpXSkKLQkJCQlicmVhazsJLyogIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoICovCisJCQkJYnJlYWs7CiAJCQlub3dtdXN0YmVjaGFuID0KIAkJCSAgICAoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBjaGFubGVuOwogCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsKIAkJCQkvKiAgY2hhbm5lbCBsaXN0IGlzbid0IGNvbnRpbm91cyA6LSggKi8KLQkJCQlwcmludGsKLQkJCQkgICAgKCJjb21lZGklZDogcGNsODE2OiBjaGFubmVsIGxpc3QgbXVzdCBiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgbXVzdCBiZSAlZCBvciAlZCFcbiIsCi0JCQkJICAgICBkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKLQkJCQkgICAgIG5vd211c3RiZWNoYW4sIENSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJjb21lZGklZDogcGNsODE2OiBjaGFubmVsIGxpc3QgbXVzdCAiCisJCQkJICAgICAgICJiZSBjb250aW5vdXMhIGNoYW5saXN0WyVpXT0lZCBidXQgIgorCQkJCSAgICAgICAibXVzdCBiZSAlZCBvciAlZCFcbiIsIGRldi0+bWlub3IsCisJCQkJICAgICAgIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLCBub3dtdXN0YmVjaGFuLAorCQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0WzBdKSk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9Ci0JCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOwkvKiAgd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0ICovCisJCQkvKiAgd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0ICovCisJCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOwogCQl9CiAKLQkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IGNoYW5sZW47IGkrKykgewkvKiAgY2hlY2sgd2hvbGUgY2hhbmxpc3QgKi8KKwkJLyogIGNoZWNrIHdob2xlIGNoYW5saXN0ICovCisJCWZvciAoaSA9IDAsIHNlZ3BvcyA9IDA7IGkgPCBjaGFubGVuOyBpKyspIHsKIAkJCURFQlVHKHByaW50aygiJWQgJWQ9JWQgJWRcbiIsCiAJCQkJICAgICBDUl9DSEFOKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKIAkJCQkgICAgIENSX1JBTkdFKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKIAkJCQkgICAgIENSX0NIQU4oY2hhbmxpc3RbaV0pLAogCQkJCSAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaV0pKTspCiAJCQkgICAgaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7Ci0JCQkJcHJpbnRrCi0JCQkJICAgICgiY29tZWRpJWQ6IHBjbDgxNjogYmFkIGNoYW5uZWwgb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCi0JCQkJICAgICBkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5zZWdtZW50W2ldKSwKLQkJCQkgICAgIENSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKLQkJCQkgICAgIENSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAotCQkJCSAgICAgQ1JfQ0hBTihjaGFubGlzdFtpICUgc2VnbGVuXSksCi0JCQkJICAgICBDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCi0JCQkJICAgICBDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiY29tZWRpJWQ6IHBjbDgxNjogYmFkIGNoYW5uZWwgb3IgcmFuZ2UiCisJCQkJICAgICAgICIgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCIKKwkJCQkgICAgICAgIiAlZCwlZCwlZCFcbiIsIGRldi0+bWlub3IsIGksCisJCQkJICAgICAgIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAorCQkJCSAgICAgICBDUl9SQU5HRShjaGFuc2VnbWVudFtpXSksCisJCQkJICAgICAgIENSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCSAgICAgICBDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkgICAgICAgQ1JfUkFOR0UoY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCSAgICAgICBDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CiAJCQkJcmV0dXJuIDA7CS8qICBjaGFuL2dhaW4gbGlzdCBpcyBzdHJhbmdlICovCiAJCQl9CiAJCX0KQEAgLTk2NSwxMiArMTAyNiwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBzZWdsZW47IGkrKykgewkvKiAgc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkICovCiAJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwogCQlvdXRiKENSX0NIQU4oY2hhbmxpc3RbMF0pICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwotCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCQkvKiBzZWxlY3QgZ2FpbiAqLworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwogCX0KIAogCXVkZWxheSgxKTsKLQotCW91dGIoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0WzBdIHwgKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtzZWdsZW4gLSAxXSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgaW50ZXJ2YWwgdG8gc2NhbiAqLworCS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKwlvdXRiKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFswXSB8CisJICAgICAoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0W3NlZ2xlbiAtIDFdIDw8IDQpLAorCSAgICAgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKIH0KIAogI2lmZGVmIHVudXNlZApAQCAtOTk4LDExICsxMDYyLDExIEBACiAJc2F2ZV9mbGFncyhmbGFncyk7CiAJY2xpKCk7CiAJdmFsID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKLQlpZiAoYml0KSB7CisJaWYgKGJpdCkKIAkJdmFsIHw9IFJUQ19QSUU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXZhbCAmPSB+UlRDX1BJRTsKLQl9CisKIAlDTU9TX1dSSVRFKHZhbCwgUlRDX0NPTlRST0wpOwogCUNNT1NfUkVBRChSVENfSU5UUl9GTEFHUyk7CiAJcmVzdG9yZV9mbGFncyhmbGFncyk7CkBAIC0xMDcyLDcgKzExMzYsNyBAQAogCWRldi0+aW9iYXNlID0gaW9iYXNlOwogCiAJaWYgKHBjbDgxNl9jaGVjayhpb2Jhc2UpKSB7Ci0JCXByaW50aygiLCBJIGNhbm4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIsIEkgY2Fubid0IGRldGVjdCBib2FyZC4gRkFJTCFcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEwOTAsMzAgKzExNTQsMjkgQEAKIAkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KIAkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKIAkJCQlwcmludGsKLQkJCQkgICAgKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKLQkJCQkgICAgIGlycSk7CisJCQkJICAgICgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsICIKKwkJCQkgICAgICJESVNBQkxJTkcgSVQiLCBpcnEpOwogCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJlcXVlc3RfaXJxCiAJCQkJICAgIChpcnEsIGludGVycnVwdF9wY2w4MTYsIDAsICJwY2w4MTYiLCBkZXYpKSB7CiAJCQkJCXByaW50awotCQkJCQkgICAgKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCi0JCQkJCSAgICAgaXJxKTsKKwkJCQkJICAgICgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCAiCisJCQkJCSAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KIAkJCQl9IGVsc2UgewotCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCBpcnE9JXUiLCBpcnEpOwogCQkJCX0KIAkJCX0KIAkJfQogCX0KIAogCWRldi0+aXJxID0gaXJxOwotCWlmIChpcnEpIHsKKwlpZiAoaXJxKQkvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLwogCQlkZXZwcml2LT5pcnFfZnJlZSA9IDE7Ci0JfSAvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLwotCWVsc2UgeworCWVsc2UKIAkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAwOwotCX0KKwogCWRldnByaXYtPmlycV9ibG9ja2VkID0gMDsJLyogbnVtYmVyIG9mIHN1YmRldmljZSB3aGljaCB1c2UgSVJRICovCiAJZGV2cHJpdi0+aW50ODE2X21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLwogCkBAIC0xMTcwLDE4ICsxMjMzLDIyIEBACiAJCX0KIAkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODE2Iik7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOwogCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KIAkJfQogCiAJCWRldnByaXYtPmRtYSA9IGRtYTsKLQkJcHJpbnRrKCIsIGRtYT0ldSIsIGRtYSk7CisJCXByaW50ayhLRVJOX0lORk8gIiwgZG1hPSV1IiwgZG1hKTsKIAkJcGFnZXMgPSAyOwkvKiB3ZSBuZWVkIDE2S0IgKi8KIAkJZGV2cHJpdi0+ZG1hYnVmWzBdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKIAogCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgewogCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7Ci0JCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJLyoKKwkJCSAqIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpCisJCQkgKiB3aWxsIGhlbHAgLi4uLgorCQkJICovCiAJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCiAJCX0KIAkJZGV2cHJpdi0+ZG1hcGFnZXNbMF0gPSBwYWdlczsKQEAgLTExOTIsOCArMTI1OSw5IEBACiAJCWlmIChkZXZwcml2LT5kbWFfcnRjID09IDApIHsJLyogIHdlIG11c3QgZG8gZHVibGUgYnVmZiA6LSggKi8KIAkJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CiAJCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgewotCQkJCXByaW50awotCQkJCSAgICAoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsICIKKwkJCQkgICAgICAgIkZBSUwhXG4iKTsKIAkJCQlyZXR1cm4gLUVCVVNZOwogCQkJfQogCQkJZGV2cHJpdi0+ZG1hcGFnZXNbMV0gPSBwYWdlczsKQEAgLTEyNzcsNyArMTM0NSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcGNsODE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCURFQlVHKHByaW50aygiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTspCisJREVCVUcocHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTspCiAJICAgIGZyZWVfcmVzb3VyY2VzKGRldik7CiAjaWZkZWYgdW51c2VkCiAJaWYgKGRldnByaXYtPmRtYV9ydGMpCkBAIC0xMjg1LDMgKzEzNTMsNyBAQAogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwppbmRleCA5ZDZhYTM5Li5kMmJkNmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCkBAIC0zMTMsNyArMzEzLDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGNsODE4X2JvYXJkKSwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsODE4KTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY2w4MThfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbDgxOCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcGNsODE4X2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNsODE4KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbDgxOF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcGNsODE4X2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IHBjbDgxOF9wcml2YXRlIHsKIApAQCAtMjAzNiwzICsyMDQ3LDcgQEAKIAlmcmVlX3Jlc291cmNlcyhkZXYpOwogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwppbmRleCBlZDYxMDMwLi43ZmIzYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKQEAgLTk3LDcgKzk3LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcGNtMzcyNF9ib2FyZCksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbTM3MjQpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3BjbTM3MjRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbTM3MjQpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BjbTM3MjRfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9wY20zNzI0KTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbTM3MjRfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BjbTM3MjRfY2xlYW51cF9tb2R1bGUpOwogCiAvKiAoc2V0cSBjLWJhc2ljLW9mZnNldCA4KSAqLwogCkBAIC0xODQsNyArMTk1LDcgQEAKIAlzdHJ1Y3QgcHJpdl9wY20zNzI0ICpwcml2OwogCiAJZ2F0ZWNmZyA9IDA7Ci0JcHJpdiA9IChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopKGRldi0+cHJpdmF0ZSk7CisJcHJpdiA9IGRldi0+cHJpdmF0ZTsKIAogCW1hc2sgPSAxIDw8IENSX0NIQU4oY2hhbnNwZWMpOwogCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykJLyogIHN1YmRldiAwICovCkBAIC0zMDcsMyArMzE4LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYwppbmRleCAyMmI3YWFlLi5iYWRhNmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKQEAgLTM4LDcgKzM4LDE4IEBACiAJLmRldGFjaCA9IHBjbTM3MzBfZGV0YWNoLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY20zNzMwKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9wY20zNzMwX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wY20zNzMwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY20zNzMwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcGNtMzczMCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wY20zNzMwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY20zNzMwX2NsZWFudXBfbW9kdWxlKTsKIAogc3RhdGljIGludCBwY20zNzMwX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLApAQCAtMTU0LDMgKzE2NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbV9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21fY29tbW9uLmMKaW5kZXggNTJjMmE2NjkuLjQ3NGFmN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbV9jb21tb24uYwpAQCAtMTA5LDMgKzEwOSw3IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9wY21fY21kdGVzdCk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKaW5kZXggZmFiODA5Mi4uMjNiM2Q3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKQEAgLTg5LDcgKzg5LDE4IEBACiAJLm9mZnNldCA9IHNpemVvZihwY21hZF9ib2FyZHNbMF0pLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY21hZCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcGNtYWRfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3BjbWFkKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9wY21hZF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BjbWFkKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3BjbWFkX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9wY21hZF9jbGVhbnVwX21vZHVsZSk7CiAKICNkZWZpbmUgVElNRU9VVAkxMDAKIApAQCAtMTc2LDMgKzE4Nyw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21kYTEyLmMKaW5kZXggNzEzM2ViMC4uMGU5ZmZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtZGExMi5jCkBAIC0xNTcsNyArMTU3LDggQEAKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICVzICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJjb21lZGklZDogJXM6IGlvOiAlbHggJXMgIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lLAogCSAgICAgICBpb2Jhc2UsIGl0LT5vcHRpb25zWzFdID8gInNpbXVsdGFuZW91cyB4ZmVyIG1vZGUgZW5hYmxlZCIgOiAiIik7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgSU9TSVpFLCBkcml2ZXIuZHJpdmVyX25hbWUpKSB7CkBAIC0xNzcsNyArMTc4LDcgQEAKICAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KICAqLwogCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY21kYTEyX3ByaXZhdGUpKSA8IDApIHsKLQkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE5MSw3ICsxOTIsNyBAQAogCSAqIDk2LWNoYW5uZWwgdmVyc2lvbiBvZiB0aGUgYm9hcmQuCiAJICovCiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApIHsKLQkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHN1YmRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogCiAJemVyb19jaGFucyhkZXYpOwkvKiBjbGVhciBvdXQgYWxsIHRoZSByZWdpc3RlcnMsIGJhc2ljYWxseSAqLwogCi0JcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYXR0YWNoZWRcbiIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yMjIsNyArMjIzLDggQEAKICAqLwogc3RhdGljIGludCBwY21kYTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgSU9TSVpFKTsKIAlyZXR1cm4gMDsKQEAgLTMwMyw0ICszMDUsMTkgQEAKICAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKICAqIGFzIG5lY2Vzc2FyeS4KICAqLwotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwppbmRleCAwMjVhNTJlLi41YzgzMmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCkBAIC0xNDUsMTAgKzE0NSw2IEBACiAjZGVmaW5lIFBBR0VfRU5BQiAyCiAjZGVmaW5lIFBBR0VfSU5UX0lEIDMKIAotdHlwZWRlZiBpbnQgKCpjb21lZGlfaW5zbl9mbl90KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwKLQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKLQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICosIHVuc2lnbmVkIGludCAqKTsKLQogc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLAogCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICosIHVuc2lnbmVkIGludCAqKTsKIHN0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKQEAgLTE3MSw3ICsxNjcsMTggQEAKIAljb25zdCBpbnQgbl9haV9jaGFuczsKIAljb25zdCBpbnQgbl9hb19jaGFuczsKIAljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGUsICphb19yYW5nZV90YWJsZTsKLQljb21lZGlfaW5zbl9mbl90IGFpX3JpbnNuLCBhb19yaW5zbiwgYW9fd2luc247CisJaW50ICgqYWlfcmluc24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQl1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmFvX3JpbnNuKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCphb193aW5zbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCXVuc2lnbmVkIGludCAqZGF0YSk7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VzX2FpID0gewpAQCAtMTMzMyw0ICsxMzQwLDE5IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKaW5kZXggNWFmNGM4NC4uN2E5Mjg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY211aW8uYwpAQCAtMTAxOCw0ICsxMDE4LDE5IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKaW5kZXggMWViYzM1Ni4uODMxYTU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYwpAQCAtMjQ4LDQgKzI0OCwxOSBAQAogCXJldHVybiAyOwogfQogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BvYyk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfcG9jX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9wb2MpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3BvY19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3BvYyk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9wb2NfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3BvY19jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwppbmRleCBhOTFkYjZjLi5iZjQ4OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCkBAIC0xNCw3ICsxNCw3IEBACiAKICAgICBEb2N1bWVudGF0aW9uIGZvciB0aGUgREFRUCBQQ01DSUEgY2FyZHMgY2FuIGJlIGZvdW5kIG9uIFF1YXRlY2gncyBzaXRlOgogCi0gICAgICAgICAgICAgICAgZnRwOi8vZnRwLnF1YXRlY2guY29tL01hbnVhbHMvZGFxcC0yMDgucGRmCisJCWZ0cDovL2Z0cC5xdWF0ZWNoLmNvbS9NYW51YWxzL2RhcXAtMjA4LnBkZgogCiAgICAgVGhpcyBtYW51YWwgaXMgZm9yIGJvdGggdGhlIERBUVAtMjA4IGFuZCB0aGUgREFRUC0zMDguCiAKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC0xOTUsNyArMTk0LDcgQEAKIAogc3RhdGljIHZvaWQgZGFxcF9kdW1wKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJEQVFQOiBzdGF0dXMgJTAyeDsgYXV4IHN0YXR1cyAlMDJ4XG4iLAorCXByaW50ayhLRVJOX0lORk8gIkRBUVA6IHN0YXR1cyAlMDJ4OyBhdXggc3RhdHVzICUwMnhcbiIsCiAJICAgICAgIGluYihkZXYtPmlvYmFzZSArIERBUVBfU1RBVFVTKSwgaW5iKGRldi0+aW9iYXNlICsgREFRUF9BVVgpKTsKIH0KIApAQCAtMjA3LDkgKzIwNiw5IEBACiAJcHJpbnRrKHN0cik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJaWYgKGkgJSAxNiA9PSAwKSB7Ci0JCQlwcmludGsoIlxuMHglMDh4OiIsICh1bnNpZ25lZCBpbnQpY3B0cik7Ci0JCX0KKwkJaWYgKGkgJSAxNiA9PSAwKQorCQkJcHJpbnRrKCJcbiVwOiIsIGNwdHIpOworCiAJCXByaW50aygiICUwMngiLCAqKGNwdHIrKykpOwogCX0KIAlwcmludGsoIlxuIik7CkBAIC0yMjMsOSArMjIyLDkgQEAKIHsKIAlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopcy0+cHJpdmF0ZTsKIAotCWlmIChsb2NhbC0+c3RvcCkgeworCWlmIChsb2NhbC0+c3RvcCkKIAkJcmV0dXJuIC1FSU87Ci0JfQorCiAKIAlvdXRiKERBUVBfQ09NTUFORF9TVE9QLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CiAKQEAgLTM1NSw5ICszNTQsOSBAQAogCWludCB2OwogCWludCBjb3VudGVyID0gMTAwMDA7CiAKLQlpZiAobG9jYWwtPnN0b3ApIHsKKwlpZiAobG9jYWwtPnN0b3ApCiAJCXJldHVybiAtRUlPOwotCX0KKwogCiAJLyogU3RvcCBhbnkgcnVubmluZyBjb252ZXJzaW9uICovCiAJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKQEAgLTM3Miw5ICszNzEsOSBAQAogCXYgPSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpCiAJICAgIHwgREFRUF9TQ0FOTElTVF9HQUlOKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CiAKLQlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKSB7CisJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpID09IEFSRUZfRElGRikKIAkJdiB8PSBEQVFQX1NDQU5MSVNUX0RJRkZFUkVOVElBTDsKLQl9CisKIAogCXYgfD0gREFRUF9TQ0FOTElTVF9TVEFSVDsKIApAQCAtNDg4LDcgKzQ4NywxMCBAQAogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKgorCSAqIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcworCSAqIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKQEAgLTU4OCw5ICs1OTAsOSBAQAogCWludCBpOwogCWludCB2OwogCi0JaWYgKGxvY2FsLT5zdG9wKSB7CisJaWYgKGxvY2FsLT5zdG9wKQogCQlyZXR1cm4gLUVJTzsKLQl9CisKIAogCS8qIFN0b3AgYW55IHJ1bm5pbmcgY29udmVyc2lvbiAqLwogCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CkBAIC02NDAsMTMgKzY0MiwxMSBAQAogCQl2ID0gREFRUF9TQ0FOTElTVF9DSEFOTkVMKENSX0NIQU4oY2hhbnNwZWMpKQogCQkgICAgfCBEQVFQX1NDQU5MSVNUX0dBSU4oQ1JfUkFOR0UoY2hhbnNwZWMpKTsKIAotCQlpZiAoQ1JfQVJFRihjaGFuc3BlYykgPT0gQVJFRl9ESUZGKSB7CisJCWlmIChDUl9BUkVGKGNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpCiAJCQl2IHw9IERBUVBfU0NBTkxJU1RfRElGRkVSRU5USUFMOwotCQl9CiAKLQkJaWYgKGkgPT0gMCB8fCBzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeSkgeworCQlpZiAoaSA9PSAwIHx8IHNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5KQogCQkJdiB8PSBEQVFQX1NDQU5MSVNUX1NUQVJUOwotCQl9CiAKIAkJb3V0Yih2ICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKIAkJb3V0Yih2ID4+IDgsIGRldi0+aW9iYXNlICsgREFRUF9TQ0FOTElTVCk7CkBAIC03NjAsNyArNzYwLDggQEAKIAl3aGlsZSAoLS1jb3VudGVyCiAJICAgICAgICYmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX1NUQVRVUykgJiBEQVFQX1NUQVRVU19FVkVOVFMpKSA7CiAJaWYgKCFjb3VudGVyKSB7Ci0JCXByaW50aygiZGFxcDogY291bGRuJ3QgY2xlYXIgaW50ZXJydXB0cyBpbiBzdGF0dXMgcmVnaXN0ZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkYXFwOiBjb3VsZG4ndCBjbGVhciBpbnRlcnJ1cHRzIGluIHN0YXR1cyByZWdpc3RlclxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTc4NSw5ICs3ODYsOCBAQAogCWludCBkOwogCXVuc2lnbmVkIGludCBjaGFuOwogCi0JaWYgKGxvY2FsLT5zdG9wKSB7CisJaWYgKGxvY2FsLT5zdG9wKQogCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJZCA9IGRhdGFbMF07CkBAIC04MTEsOSArODExLDggQEAKIHsKIAlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopcy0+cHJpdmF0ZTsKIAotCWlmIChsb2NhbC0+c3RvcCkgeworCWlmIChsb2NhbC0+c3RvcCkKIAkJcmV0dXJuIC1FSU87Ci0JfQogCiAJZGF0YVswXSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRElHSVRBTF9JTyk7CiAKQEAgLTgyOCw5ICs4MjcsOCBAQAogewogCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKilzLT5wcml2YXRlOwogCi0JaWYgKGxvY2FsLT5zdG9wKSB7CisJaWYgKGxvY2FsLT5zdG9wKQogCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAlvdXR3KGRhdGFbMF0gJiAweGYsIGRldi0+aW9iYXNlICsgREFRUF9ESUdJVEFMX0lPKTsKIApAQCAtODcyLDEzICs4NzAsMTMgQEAKIAkJfQogCX0KIAotCWRldi0+aW9iYXNlID0gbG9jYWwtPmxpbmstPmlvLkJhc2VQb3J0MTsKKwlkZXYtPmlvYmFzZSA9IGxvY2FsLT5saW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKIAlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlwcmludGsoImNvbWVkaSVkOiBhdHRhY2hpbmcgZGFxcCVkIChpbyAweCUwNGx4KVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogYXR0YWNoaW5nIGRhcXAlZCAoaW8gMHglMDRseClcbiIsCiAJICAgICAgIGRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdLCBkZXYtPmlvYmFzZSk7CiAKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKQEAgLTkzMSw3ICs5MjksNyBAQAogCiBzdGF0aWMgaW50IGRhcXBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogZGV0YWNoaW5nIGRhcXBcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkZXRhY2hpbmcgZGFxcFxuIiwgZGV2LT5taW5vcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk5NiwxNCArOTk0LDYgQEAKIHN0YXRpYyBpbnQgZGFxcF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBkYXFwX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKIAotLyoKLSAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKLSAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCi0gICBkYXRhYmFzZS4KLSovCi0KLXN0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gInF1YXRlY2hfZGFxcF9jcyI7Ci0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgZGFxcF9jc19hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMTA3Niw4ICsxMDY2LDcgQEAKIAogCS8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgZnJlZSBpdCAqLwogCWRldl90YWJsZVtkZXYtPnRhYmxlX2luZGV4XSA9IE5VTEw7Ci0JaWYgKGRldikKLQkJa2ZyZWUoZGV2KTsKKwlrZnJlZShkZXYpOwogCiB9CQkJCS8qIGRhcXBfY3NfZGV0YWNoICovCiAKQEAgLTExMDMsMjYgKzEwOTIsMjQgQEAKIAlwX2Rldi0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKIAogCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLwotCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBwX2Rldi0+aW8uTnVtUG9ydHMyID0gMDsKKwlwX2Rldi0+cmVzb3VyY2VbMF0tPmVuZCA9IHBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gMDsKIAlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LT5pby5ud2luID4gMCkpIHsKIAkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LT5pbzsKLQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87Ci0JCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKLQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKLQkJCXBfZGV2LT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OwotCQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKLQkJcF9kZXYtPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKLQkJcF9kZXYtPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyAmPSB+SU9fREFUQV9QQVRIX1dJRFRIOworCQlwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzIHw9CisJCQlwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgoaW8tPmZsYWdzKTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAkJaWYgKGlvLT5ud2luID4gMSkgewotCQkJcF9kZXYtPmlvLkF0dHJpYnV0ZXMyID0gcF9kZXYtPmlvLkF0dHJpYnV0ZXMxOwotCQkJcF9kZXYtPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKLQkJCXBfZGV2LT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZmxhZ3MgPSBwX2Rldi0+cmVzb3VyY2VbMF0tPmZsYWdzOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5zdGFydCA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCXBfZGV2LT5yZXNvdXJjZVsxXS0+ZW5kID0gaW8tPndpblsxXS5sZW47CiAJCX0KIAl9CiAKIAkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLwotCXJldHVybiBwY21jaWFfcmVxdWVzdF9pbyhwX2RldiwgJnBfZGV2LT5pbyk7CisJcmV0dXJuIHBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgZGFxcF9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0xMTU0LDEyICsxMTQxLDEwIEBACiAJZGV2X2luZm8oJmxpbmstPmRldiwgImluZGV4IDB4JTAyeCIsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJaWYgKGxpbmstPnJlc291cmNlWzBdKQorCQlwcmludGsoIiAmICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKKwlpZiAobGluay0+cmVzb3VyY2VbMV0pCisJCXByaW50aygiICYgJXBSIiwgbGluay0+cmVzb3VyY2VbMV0pOwogCXByaW50aygiXG4iKTsKIAogCXJldHVybjsKQEAgLTEyMjgsNyArMTIxMyw3IEBACiAJLmlkX3RhYmxlID0gZGFxcF9jc19pZF90YWJsZSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZHJ2ID0gewotCQkubmFtZSA9IGRldl9pbmZvLAorCQkubmFtZSA9ICJxdWF0ZWNoX2RhcXBfY3MiLAogCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCmluZGV4IDg2MjY2NTguLjAzNjdkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKQEAgLTIzNTYsNCArMjM1Niw0NCBAQAogICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAogICogYXMgbmVjZXNzYXJ5LgogICovCi1DT01FRElfUENJX0lOSVRDTEVBTlVQKHJ0ZDUyMERyaXZlciwgcnRkNTIwX3BjaV90YWJsZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBydGQ1MjBEcml2ZXJfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgcnRkNTIwRHJpdmVyLmRyaXZlcl9uYW1lKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHJ0ZDUyMERyaXZlcl9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBydGQ1MjBEcml2ZXJfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBydGQ1MjBfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZydGQ1MjBEcml2ZXJfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmcnRkNTIwRHJpdmVyX3BjaV9yZW1vdmUpCit9OworCitzdGF0aWMgaW50IF9faW5pdCBydGQ1MjBEcml2ZXJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmcnRkNTIwRHJpdmVyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJ0ZDUyMERyaXZlcl9wY2lfZHJpdmVyLm5hbWUgPSAoY2hhciAqKXJ0ZDUyMERyaXZlci5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRkNTIwRHJpdmVyX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRkNTIwRHJpdmVyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGQ1MjBEcml2ZXJfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZydGQ1MjBEcml2ZXIpOworfQorCittb2R1bGVfaW5pdChydGQ1MjBEcml2ZXJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQocnRkNTIwRHJpdmVyX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCmluZGV4IDAyOGVkNmYuLjcyMDQyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKQEAgLTE1OCw3ICsxNTgsMTggQEAKIAkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBydGk4MDBfYm9hcmQpLAogfTsKIAotQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9ydGk4MDApOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3J0aTgwMF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfcnRpODAwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRyaXZlcl9ydGk4MDBfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9ydGk4MDApOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfcnRpODAwX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9ydGk4MDBfY2xlYW51cF9tb2R1bGUpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRpODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYpOwogCkBAIC00NzUsMyArNDg2LDcgQEAKIAogCXJldHVybiAwOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKaW5kZXggMjE1N2VkYy4uZjU5Y2IxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwpAQCAtNTcsNyArNTcsMTggQEAKIAkuZGV0YWNoID0gcnRpODAyX2RldGFjaCwKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcnRpODAyKTsKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9ydGk4MDJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3J0aTgwMik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfcnRpODAyX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfcnRpODAyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3J0aTgwMl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfcnRpODAyX2NsZWFudXBfbW9kdWxlKTsKIAogc3RydWN0IHJ0aTgwMl9wcml2YXRlIHsKIAllbnVtIHsKQEAgLTE1MCwzICsxNjEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCmluZGV4IDA3YzIxZTYuLjM2MDdhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpAQCAtMTAwMiw0ICsxMDAyLDE5IEBACiAgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCiAgKiBhcyBuZWNlc3NhcnkuCiAgKi8KLUNPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfczUyNik7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfczUyNl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfczUyNik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfczUyNl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3M1MjYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfczUyNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfczUyNl9jbGVhbnVwX21vZHVsZSk7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCmluZGV4IGEzY2M5MzM2Li5kNWJhM2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKQEAgLTYwLDEwICs2MCwxMCBAQAogICAgaW5zbi5pbnNuPUlOU05fQ09ORklHOyAgIC8vY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbgogICAgaW5zbi5uPTE7ICAgICAgICAgICAgICAgIC8vbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQogICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vaW5pdGlhbCB2YWx1ZSBsb2FkZWQgaW50byBlbmNvZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kdXJpbmcgY29uZmlndXJhdGlvbgorCQkJCS8vZHVyaW5nIGNvbmZpZ3VyYXRpb24KICAgIGluc24uc3ViZGV2PTU7ICAgICAgICAgICAvL2VuY29kZXIgc3ViZGV2aWNlCiAgICBpbnNuLmNoYW5zcGVjPUNSX1BBQ0soZW5jb2Rlcl9jaGFubmVsLDAsQVJFRl9PVEhFUik7IC8vZW5jb2Rlcl9jaGFubmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gY29uZmlndXJlCisJCQkJCQkJLy90byBjb25maWd1cmUKIAogICAgY29tZWRpX2RvX2luc24oY2YsJmluc24pOyAvL2V4ZWN1dGluZyBjb25maWd1cmF0aW9uCiAqLwpAQCAtMjI0LDcgKzIyNCw0MyBAQAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHM2MjZfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKICNkZWZpbmUgZGlvcHJpdiAoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKXMtPnByaXZhdGUpCiAKLUNPTUVESV9QQ0lfSU5JVENMRUFOVVBfTk9NT0RVTEUoZHJpdmVyX3M2MjYsIHM2MjZfcGNpX3RhYmxlKTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRyaXZlcl9zNjI2X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBjb21lZGlfcGNpX2F1dG9fY29uZmlnKGRldiwgZHJpdmVyX3M2MjYuZHJpdmVyX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZHJpdmVyX3M2MjZfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWNvbWVkaV9wY2lfYXV0b191bmNvbmZpZyhkZXYpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyX3M2MjZfcGNpX2RyaXZlciA9IHsKKwkuaWRfdGFibGUgPSBzNjI2X3BjaV90YWJsZSwKKwkucHJvYmUgPSAmZHJpdmVyX3M2MjZfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCgmZHJpdmVyX3M2MjZfcGNpX3JlbW92ZSkKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRyaXZlcl9zNjI2X2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9zNjI2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRyaXZlcl9zNjI2X3BjaV9kcml2ZXIubmFtZSA9IChjaGFyICopZHJpdmVyX3M2MjYuZHJpdmVyX25hbWU7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9zNjI2X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3M2MjZfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcl9zNjI2X3BjaV9kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3M2MjYpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfczYyNl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfczYyNl9jbGVhbnVwX21vZHVsZSk7CiAKIC8qIGlvY3RsIHJvdXRpbmVzICovCiBzdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKQEAgLTI2Myw3ICsyOTksNyBAQAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIHN0YXRpYyBpbnQgczYyNl9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKLXN0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKiBwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqcHBsLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKIHN0YXRpYyBpbnQgczYyNl9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50IHRyaWdudW0pOwogc3RhdGljIGlycXJldHVybl90IHM2MjZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZCk7CkBAIC0yOTQsMTYgKzMzMCwxNiBAQAogLyogIENPVU5URVIgT0JKRUNUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RydWN0IGVuY19wcml2YXRlIHsKIAkvKiAgUG9pbnRlcnMgdG8gZnVuY3Rpb25zIHRoYXQgZGlmZmVyIGZvciBBIGFuZCBCIGNvdW50ZXJzOiAqLwotCXVpbnQxNl90KCpHZXRFbmFibGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gY2xvY2sgZW5hYmxlLiAqLwotCXVpbnQxNl90KCpHZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gaW50ZXJydXB0IHNvdXJjZS4gKi8KLQl1aW50MTZfdCgqR2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KLQl1aW50MTZfdCgqR2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCi0Jdm9pZCAoKlB1bHNlSW5kZXgpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBHZW5lcmF0ZSBzb2Z0IGluZGV4IHN0cm9iZS4gKi8KLQl2b2lkICgqU2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBlbmFiKTsJLyogUHJvZ3JhbSBjbG9jayBlbmFibGUuICovCi0Jdm9pZCAoKlNldEludFNyYykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgSW50U291cmNlKTsJLyogUHJvZ3JhbSBpbnRlcnJ1cHQgc291cmNlLiAqLwotCXZvaWQgKCpTZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgVHJpZyk7CS8qIFByb2dyYW0gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KLQl2b2lkICgqU2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgU2V0dXAsIHVpbnQxNl90IERpc2FibGVJbnRTcmMpOwkvKiBQcm9ncmFtIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4gKi8KLQl2b2lkICgqUmVzZXRDYXBGbGFncykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJlc2V0IGV2ZW50IGNhcHR1cmUgZmxhZ3MuICovCisJdWludDE2X3QoKkdldEVuYWJsZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqKTsJLyogUmV0dXJuIGNsb2NrIGVuYWJsZS4gKi8KKwl1aW50MTZfdCgqR2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl1aW50MTZfdCgqR2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBwcmVsb2FkIHRyaWdnZXIgc291cmNlLiAqLworCXVpbnQxNl90KCpHZXRNb2RlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpQdWxzZUluZGV4KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBHZW5lcmF0ZSBzb2Z0IGluZGV4IHN0cm9iZS4gKi8KKwl2b2lkICgqU2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IGVuYWIpOwkvKiBQcm9ncmFtIGNsb2NrIGVuYWJsZS4gKi8KKwl2b2lkICgqU2V0SW50U3JjKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IEludFNvdXJjZSk7CS8qIFByb2dyYW0gaW50ZXJydXB0IHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TG9hZFRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgVHJpZyk7CS8qIFByb2dyYW0gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4gKi8KKwl2b2lkICgqU2V0TW9kZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBTZXR1cCwgdWludDE2X3QgRGlzYWJsZUludFNyYyk7CS8qIFByb2dyYW0gc3RhbmRhcmRpemVkIG9wZXJhdGluZyBtb2RlLiAqLworCXZvaWQgKCpSZXNldENhcEZsYWdzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXNldCBldmVudCBjYXB0dXJlIGZsYWdzLiAqLwogCiAJdWludDE2X3QgTXlDUkE7CQkvKiAgICBBZGRyZXNzIG9mIENSQSByZWdpc3Rlci4gKi8KIAl1aW50MTZfdCBNeUNSQjsJCS8qICAgIEFkZHJlc3Mgb2YgQ1JCIHJlZ2lzdGVyLiAqLwpAQCAtNTQzLDEzICs1NzksMTMgQEAKIAlkZXZwcml2LT5wZGV2ID0gcGRldjsKIAogCWlmIChwZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogQm9hcmQgbm90IHByZXNlbnQhISFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBCb2FyZCBub3QgcHJlc2VudCEhIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXJlc3VsdCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBkZXYsICJzNjI2Iik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogY29tZWRpX3BjaV9lbmFibGUgZmFpbHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBjb21lZGlfcGNpX2VuYWJsZSBmYWlsc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlkZXZwcml2LT5nb3RfcmVnaW9ucyA9IDE7CkBAIC01NTgsNyArNTk0LDcgQEAKIAogCWRldnByaXYtPmJhc2VfYWRkciA9IGlvcmVtYXAocmVzb3VyY2VTdGFydCwgU0laRU9GX0FERFJFU1NfU1BBQ0UpOwogCWlmIChkZXZwcml2LT5iYXNlX2FkZHIgPT0gTlVMTCkgewotCQlwcmludGsoInM2MjZfYXR0YWNoOiBJT1JFTUFQIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiczYyNl9hdHRhY2g6IElPUkVNQVAgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01NzksNyArNjE1LDcgQEAKIAkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGRldnByaXYtPnBkZXYsIERNQUJVRl9TSVpFLCAmYXBwZG1hKTsKIAogCQlpZiAoZGV2cHJpdi0+QU5BQnVmLkxvZ2ljYWxCYXNlID09IE5VTEwpIHsKLQkJCXByaW50aygiczYyNl9hdHRhY2g6IERNQSBNZW1vcnkgbWFwcGluZyBlcnJvclxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtNTk2LDcgKzYzMiw3IEBACiAJCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgJmFwcGRtYSk7CiAKIAkJaWYgKGRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJzNjI2X2F0dGFjaDogRE1BIE1lbW9yeSBtYXBwaW5nIGVycm9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKQEAgLTYyMiwxOCArNjU4LDE4IEBACiAKIAkvKiBzZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAoZGV2LT5pcnEgPT0gMCkgewotCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiIHVua25vd24gaXJxIChiYWQpXG4iKTsKIAl9IGVsc2UgewogCQlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgczYyNl9pcnFfaGFuZGxlciwgSVJRRl9TSEFSRUQsCiAJCQkJICAiczYyNiIsIGRldik7CiAKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJCWRldi0+aXJxID0gMDsKIAkJfQogCX0KIAotCURFQlVHKCJzNjI2X2F0dGFjaDogLS0gaXQgb3B0cyAgJWQsJWQgLS0gXG4iLAorCURFQlVHKCJzNjI2X2F0dGFjaDogLS0gaXQgb3B0cyAgJWQsJWQgLS1cbiIsCiAJICAgICAgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKIAogCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwpAQCAtNzc5LDcgKzgxNSw4IEBACiAJCS8qICBXcml0ZSBJMkMgY29udHJvbDogYWJvcnQgYW55IEkyQyBhY3Rpdml0eS4gKi8KIAkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwogCQkvKiAgSW52b2tlIGNvbW1hbmQgIHVwbG9hZCAqLwotCQl3aGlsZSAoKFJSNzE0NihQX01DMikgJiBNQzJfVVBMRF9JSUMpID09IDApIDsKKwkJd2hpbGUgKChSUjcxNDYoUF9NQzIpICYgTUMyX1VQTERfSUlDKSA9PSAwKQorCQkJOwogCQkvKiAgYW5kIHdhaXQgZm9yIHVwbG9hZCB0byBjb21wbGV0ZS4gKi8KIAogCQkvKiBQZXIgU0FBNzE0NiBkYXRhIHNoZWV0LCB3cml0ZSB0byBTVEFUVVMgcmVnIHR3aWNlIHRvCkBAIC03ODgsNyArODI1LDggQEAKIAkJCVdSNzE0NihQX0kyQ1NUQVQsIEkyQ19DTEtTRUwpOwogCQkJLyogIFdyaXRlIEkyQyBjb250cm9sOiByZXNldCAgZXJyb3IgZmxhZ3MuICovCiAJCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CS8qICBJbnZva2UgY29tbWFuZCB1cGxvYWQgKi8KLQkJCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkgOworCQkJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKQorCQkJCTsKIAkJCS8qIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAJCX0KIApAQCAtODI4LDE0ICs4NjYsMTQgQEAKIAkJICogbm90IHN0YXJ0IHVwIGluIGEgZGVmaW5lZCBzdGF0ZSBhZnRlciBhIFBDSSByZXNldC4KIAkJICovCiAKLS8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkJLy8gQ3JlYXRlIGEgc2ltcGxlIHBvbGxpbmcgKi8KLS8qIAkJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCi0vKiAJCQkJCS8vIGNoYW5uZWwgMC4gKi8KKy8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkvLyBDcmVhdGUgYSBzaW1wbGUgcG9sbGluZyAqLworLyoJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCisvKgkJCQkvLyBjaGFubmVsIDAuICovCiAvKiAgICAgUmVzZXRBREMoIGRldiwgJlBvbGxMaXN0ICk7ICovCiAKIC8qICAgICBzNjI2X2FpX3JpbnNuKGRldixkZXYtPnN1YmRldmljZXMsTlVMTCxkYXRhKTsgLy8oICZBZGNEYXRhICk7IC8vICovCi0vKiAJCQkJCQkgIC8vR2V0IGluaXRpYWwgQURDICovCi0vKiAJCQkJCQkgIC8vdmFsdWUuICovCisvKgkJCQkJCQkvL0dldCBpbml0aWFsIEFEQyAqLworLyoJCQkJCQkJLy92YWx1ZS4gKi8KIAogLyogICAgIFN0YXJ0VmFsID0gZGF0YVswXTsgKi8KIApAQCAtODQ4LDEwICs4ODYsMTAgQEAKIAogLyogICAgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCA1MDA7IGluZGV4KysgKSAqLwogLyogICAgICAgeyAqLwotLyogCXM2MjZfYWlfcmluc24oZGV2LGRldi0+c3ViZGV2aWNlcyxOVUxMLGRhdGEpOyAqLwotLyogCUFkY0RhdGEgPSBkYXRhWzBdOwkvL1JlYWRBREMoICAmQWRjRGF0YSApOyAqLwotLyogCWlmICggQWRjRGF0YSAhPSBTdGFydFZhbCApICovCi0vKiAJICBicmVhazsgKi8KKy8qCXM2MjZfYWlfcmluc24oZGV2LGRldi0+c3ViZGV2aWNlcyxOVUxMLGRhdGEpOyAqLworLyoJQWRjRGF0YSA9IGRhdGFbMF07CS8vUmVhZEFEQyggICZBZGNEYXRhICk7ICovCisvKglpZiAoIEFkY0RhdGEgIT0gU3RhcnRWYWwgKSAqLworLyoJCWJyZWFrOyAqLwogLyogICAgICAgfSAqLwogCiAJCS8qICBlbmQgaW5pdEFEQyAqLwpAQCAtMTUxMyw3ICsxNTUxLDcgQEAKIAkJCWJyZWFrOwkvKiAgRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLiAqLwogCQl9CiAJfQotCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkIFxuIiwgZGV2cHJpdi0+QWRjSXRlbXMpOworCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkXG4iLCBkZXZwcml2LT5BZGNJdGVtcyk7CiAKIAkvKiBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBERUxBWSBDSEFOR0VEIEZST00gMjUwTlMgdG8gMlVTLiAgQWxsb3cgdGhlCiAJICogQURDIHRvIHN0YWJpbGl6ZSBmb3IgMiBtaWNyb3NlY29uZHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBmaW5hbApAQCAtMTU3NCw3ICsxNjEyLDcgQEAKIC8qICAgcmVnaXN0ZXIgdWludDhfdAlpOyAqLwogLyogICByZWdpc3RlciBpbnQzMl90CSpyZWFkYWRkcjsgKi8KIAotLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyIFxuIik7ICAqLworLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyXG4iKTsgICovCiAKIC8qICAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogLyogICBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOyAqLwpAQCAtMTU5MSwxMSArMTYyOSwxMSBAQAogLyogIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uIGJ1ZmZlci4gKi8KIC8qICAgZm9yICggaSA9IDA7IGkgPCBkZXZwcml2LT5BZGNJdGVtczsgaSsrICkgeyAqLwogLyogICAgICpkYXRhID0gczYyNl9haV9yZWdfdG9fdWludCggKnJlYWRhZGRyKysgKTsgKi8KLS8qICAgICBERUJVRygiczYyNl9haV9yaW5zbjogZGF0YSAlZCBcbiIsKmRhdGEpOyAqLworLyogICAgIERFQlVHKCJzNjI2X2FpX3JpbnNuOiBkYXRhICVkXG4iLCpkYXRhKTsgKi8KIC8qICAgICBkYXRhKys7ICovCiAvKiAgIH0gKi8KIAotLyogICBERUJVRygiczYyNl9haV9yaW5zbjogYWlfcmluc24gZXNjYXBlIFxuIik7ICovCisvKiAgIERFQlVHKCJzNjI2X2FpX3JpbnNuOiBhaV9yaW5zbiBlc2NhcGVcbiIpOyAqLwogLyogICByZXR1cm4gaTsgKi8KIC8qIH0gKi8KIApAQCAtMTY1MSw3ICsxNjg5LDggQEAKIAkJLyogIHNoaWZ0IGludG8gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKIAkJLyogIFdhaXQgZm9yIEFEQyBkb25lLiAqLwotCQl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkgOworCQl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkKKwkJCTsKIAogCQkvKiAgRmV0Y2ggQURDIGRhdGEuICovCiAJCWlmIChuICE9IDApCkBAIC0xNjgzLDcgKzE3MjIsOCBAQAogCS8qICBXYWl0IGZvciB0aGUgZGF0YSB0byBhcnJpdmUgaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKIAkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCi0Jd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpIDsKKwl3aGlsZSAoIShSUjcxNDYoUF9QU1IpICYgUFNSX0dQSU8yKSkKKwkJOwogCiAJLyogIEZldGNoIEFEQyBkYXRhIGZyb20gYXVkaW8gaW50ZXJmYWNlJ3MgaW5wdXQgc2hpZnQgcmVnaXN0ZXIuICovCiAKQEAgLTE2OTYsNyArMTczNiw3IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKiBwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHM2MjZfYWlfbG9hZF9wb2xsbGlzdCh1aW50OF90ICpwcGwsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAKIAlpbnQgbjsKQEAgLTE3NDMsNyArMTc4Myw3IEBACiAJREVCVUcoInM2MjZfYWlfY21kOiBlbnRlcmluZyBjb21tYW5kIGZ1bmN0aW9uXG4iKTsKIAogCWlmIChkZXZwcml2LT5haV9jbWRfcnVubmluZykgewotCQlwcmludGsoInM2MjZfYWlfY21kOiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgInM2MjZfYWlfY21kOiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nICVkXG4iLAogCQkgICAgICAgZGV2LT5taW5vcik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtMjE0Nyw3ICsyMTg3LDcgQEAKIAkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JET3V0LCAwKTsJLyogIFByb2dyYW0gYWxsIG91dHB1dHMgKi8KIAkJLyogIHRvIGluYWN0aXZlIHN0YXRlLiAqLwogCX0KLQlERUJVRygiczYyNl9kaW9faW5pdDogRElPIGluaXRpYWxpemVkIFxuIik7CisJREVCVUcoInM2MjZfZGlvX2luaXQ6IERJTyBpbml0aWFsaXplZFxuIik7CiB9CiAKIC8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KQEAgLTIzNDYsNyArMjM4Niw3IEBACiAJaW50IG47CiAJc3RydWN0IGVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwogCi0JREVCVUcoInM2MjZfZW5jX2luc25fcmVhZDogZW5jb2RlciByZWFkIGNoYW5uZWwgJWQgXG4iLAorCURFQlVHKCJzNjI2X2VuY19pbnNuX3JlYWQ6IGVuY29kZXIgcmVhZCBjaGFubmVsICVkXG4iLAogCSAgICAgIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCkBAIC0yMzY0LDcgKzI0MDQsNyBAQAogCiAJc3RydWN0IGVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwogCi0JREVCVUcoInM2MjZfZW5jX2luc25fd3JpdGU6IGVuY29kZXIgd3JpdGUgY2hhbm5lbCAlZCBcbiIsCisJREVCVUcoInM2MjZfZW5jX2luc25fd3JpdGU6IGVuY29kZXIgd3JpdGUgY2hhbm5lbCAlZFxuIiwKIAkgICAgICBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CiAKIAkvKiAgU2V0IHRoZSBwcmVsb2FkIHJlZ2lzdGVyICovCkBAIC0yNDI1LDggKzI0NjUsNyBAQAogc3RhdGljIHVpbnQ4X3QgdHJpbWNoYW5bXSA9IHsgMTAsIDksIDgsIDMsIDIsIDcsIDYsIDEsIDAsIDUsIDQgfTsKIAogLyogIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLiAqLwotc3RhdGljIHVpbnQ4X3QgdHJpbWFkcnNbXSA9Ci0gICAgeyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CitzdGF0aWMgdWludDhfdCB0cmltYWRyc1tdID0geyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CiAKIHN0YXRpYyB2b2lkIExvYWRUcmltREFDcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewpAQCAtMjUyNCwxMCArMjU2MywxMiBAQAogCS8qICB1cGxvYWQgY29uZmlybWF0aW9uLiAqLwogCiAJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwotCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkgOworCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfSUlDKSkKKwkJOwogCiAJLyogIFdhaXQgdW50aWwgSTJDIGJ1cyB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciBhbiBlcnJvciBvY2N1cnMuICovCi0Jd2hpbGUgKChSUjcxNDYoUF9JMkNDVFJMKSAmIChJMkNfQlVTWSB8IEkyQ19FUlIpKSA9PSBJMkNfQlVTWSkgOworCXdoaWxlICgoUlI3MTQ2KFBfSTJDQ1RSTCkgJiAoSTJDX0JVU1kgfCBJMkNfRVJSKSkgPT0gSTJDX0JVU1kpCisJCTsKIAogCS8qICBSZXR1cm4gbm9uLXplcm8gaWYgSTJDIGVycm9yIG9jY3VyZWQuICovCiAJcmV0dXJuIFJSNzE0NihQX0kyQ0NUUkwpICYgSTJDX0VSUjsKQEAgLTI2NDEsNyArMjY4Miw4IEBACiAJICogRG9uZSBieSBwb2xsaW5nIHRoZSBETUFDIGVuYWJsZSBmbGFnOyB0aGlzIGZsYWcgaXMgYXV0b21hdGljYWxseQogCSAqIGNsZWFyZWQgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLgogCSAqLwotCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkgOworCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkKKwkJOwogCiAJLyogU1RBUlQgVEhFIE9VVFBVVCBTVFJFQU0gVE8gVEhFIFRBUkdFVCBEQUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjY1OCw3ICsyNzAwLDggQEAKIAkgKiBmaW5pc2hlZCB0cmFuc2ZlcnJpbmcgdGhlIERBQydzIGRhdGEgRFdPUkQgZnJvbSB0aGUgb3V0cHV0IEZJRk8KIAkgKiB0byB0aGUgb3V0cHV0IGJ1ZmZlciByZWdpc3Rlci4KIAkgKi8KLQl3aGlsZSAoKFJSNzE0NihQX1NTUikgJiBTU1JfQUYyX09VVCkgPT0gMCkgOworCXdoaWxlICgoUlI3MTQ2KFBfU1NSKSAmIFNTUl9BRjJfT1VUKSA9PSAwKQorCQk7CiAKIAkvKiBTZXQgdXAgdG8gdHJhcCBleGVjdXRpb24gYXQgc2xvdCAwIHdoZW4gdGhlIFRTTCBzZXF1ZW5jZXIgY3ljbGVzCiAJICogYmFjayB0byBzbG90IDAgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBFT1MgaW4gc2xvdCA1LiAgQWxzbywKQEAgLTI2OTQsNyArMjczNyw4IEBACiAJCSAqIGZyb20gMHhGRiB0byAweDAwLCB3aGljaCBzbG90IDAgY2F1c2VzIHRvIGhhcHBlbiBieSBzaGlmdGluZwogCQkgKiBvdXQvaW4gb24gU0QyIHRoZSAweDAwIHRoYXQgaXMgYWx3YXlzIHJlZmVyZW5jZWQgYnkgc2xvdCA1LgogCQkgKi8KLQkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApIDsKKwkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApCisJCQk7CiAJfQogCS8qIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAogCSAqIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCkBAIC0yNzEwLDcgKzI3NTQsOCBAQAogCSAqIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCiAJICogZnJvbSAweDAwIHRvIDB4RkYuCiAJICovCi0Jd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApIDsKKwl3aGlsZSAoKFJSNzE0NihQX0ZCX0JVRkZFUjIpICYgMHhGRjAwMDAwMCkgPT0gMCkKKwkJOwogfQogCiBzdGF0aWMgdm9pZCBXcml0ZU1JU0MyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IE5ld0ltYWdlKQpAQCAtMjc0OSwxMCArMjc5NCwxMiBAQAogCiAJLyogIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgdXBsb2FkIGZyb20gc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgKi8KIAkvKiAgcmVnaXN0ZXIuICovCi0Jd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9ERUJJKSkgOworCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfREVCSSkpCisJCTsKIAogCS8qICBXYWl0IHVudGlsIERFQkkgdHJhbnNmZXIgaXMgZG9uZS4gKi8KLQl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpIDsKKwl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpCisJCTsKIH0KIAogLyogIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAqLwpAQCAtMzA5OSwxOCArMzE0NiwxOCBAQAogc3RhdGljIHZvaWQgU2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCQkJICAgdWludDE2X3QgdmFsdWUpCiB7Ci0JREVCVUcoIlNldExhdGNoU291cmNlOiBTZXRMYXRjaFNvdXJjZSBlbnRlciAzNTUwIFxuIik7CisJREVCVUcoIlNldExhdGNoU291cmNlOiBTZXRMYXRjaFNvdXJjZSBlbnRlciAzNTUwXG4iKTsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkgICAgKHVpbnQxNl90KSAofihDUkJNU0tfSU5UQ1RSTCB8IENSQk1TS19MQVRDSFNSQykpLAogCQkgICAgKHVpbnQxNl90KSAodmFsdWUgPDwgQ1JCQklUX0xBVENIU1JDKSk7CiAKLQlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXQgXG4iKTsKKwlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXRcbiIpOwogfQogCiAvKgogICogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApCiAgKiB7Ci0gKiAJcmV0dXJuICggREVCSXJlYWQoIGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9MQVRDSFNSQyApICYgMzsKKyAqCXJldHVybiAoIERFQklyZWFkKCBkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfTEFUQ0hTUkMgKSAmIDM7CiAgKiB9CiAgKi8KIApAQCAtMzMxNyw2ICszMzY0LDYgQEAKIAkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0FMV0FZUyk7CiAJfQotCURFQlVHKCJDb3VudGVyc0luaXQ6IGNvdW50ZXJzIGluaXRpYWxpemVkIFxuIik7CisJREVCVUcoIkNvdW50ZXJzSW5pdDogY291bnRlcnMgaW5pdGlhbGl6ZWRcbiIpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaAppbmRleCBkMDI3NDJhLi4yZDFhZmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmgKQEAgLTcyMCwxNSArNzIwLDYgQEAKICNkZWZpbmUgU1RETVNLX0NMS01VTFQJCSgodWludDE2X3QpKDMgPDwgU1REQklUX0NMS01VTFQpKQogI2RlZmluZSBTVERNU0tfQ0xLRU5BQgkJKCh1aW50MTZfdCkoMSA8PCBTVERCSVRfQ0xLRU5BQikpCiAKLS8qIHR5cGVkZWYgc3RydWN0IGluZGV4Q291bnRlciAqLwotLyogeyAqLwotLyogICB1bnNpZ25lZCBpbnQgYW87ICovCi0vKiAgIHVuc2lnbmVkIGludCBhaTsgKi8KLS8qICAgdW5zaWduZWQgaW50IGRpZ291dDsgKi8KLS8qICAgdW5zaWduZWQgaW50IGRpZ2luOyAqLwotLyogICB1bnNpZ25lZCBpbnQgZW5jOyAqLwotLyogfUNhbGxDb3VudGVyOyAqLwotCiBzdHJ1Y3QgYnVmZmVyRE1BIHsKIAlkbWFfYWRkcl90IFBoeXNpY2FsQmFzZTsKIAl2b2lkICpMb2dpY2FsQmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IDA3OTI2MTcuLmM5YmU5ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzkzLDE1ICszOTMsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbF8yMDAyX29wZW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2VyaWFsXzIwMDJfb3BlbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogeworCWludCByZXN1bHQ7CiAJY2hhciBwb3J0WzIwXTsKIAogCXNwcmludGYocG9ydCwgIi9kZXYvdHR5UyVkIiwgZGV2cHJpdi0+cG9ydCk7CiAJZGV2cHJpdi0+dHR5ID0gZmlscF9vcGVuKHBvcnQsIE9fUkRXUiwgMCk7CiAJaWYgKElTX0VSUihkZXZwcml2LT50dHkpKSB7Ci0JCXByaW50aygic2VyaWFsXzIwMDI6IGZpbGUgb3BlbiBlcnJvciA9ICVsZFxuIiwKLQkJICAgICAgIFBUUl9FUlIoZGV2cHJpdi0+dHR5KSk7CisJCXJlc3VsdCA9IChpbnQpUFRSX0VSUihkZXZwcml2LT50dHkpOworCQlwcmludGsoInNlcmlhbF8yMDAyOiBmaWxlIG9wZW4gZXJyb3IgPSAlZFxuIiwgcmVzdWx0KTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgY29uZmlnX3QgewogCkBAIC00MTEsMjkgKzQxMiwyNSBAQAogCQkJaW50IG1heDsKIAkJfTsKIAotCQlzdHJ1Y3QgY29uZmlnX3QgZGlnX2luX2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBkaWdfb3V0X2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBjaGFuX2luX2NvbmZpZ1szMl07Ci0JCXN0cnVjdCBjb25maWdfdCBjaGFuX291dF9jb25maWdbMzJdOworCQlzdHJ1Y3QgY29uZmlnX3QgKmRpZ19pbl9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqZGlnX291dF9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqY2hhbl9pbl9jb25maWc7CisJCXN0cnVjdCBjb25maWdfdCAqY2hhbl9vdXRfY29uZmlnOwogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQkJZGlnX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWRpZ19pbl9jb25maWdbaV0uYml0cyA9IDA7Ci0JCQlkaWdfaW5fY29uZmlnW2ldLm1pbiA9IDA7Ci0JCQlkaWdfaW5fY29uZmlnW2ldLm1heCA9IDA7Ci0JCQlkaWdfb3V0X2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWRpZ19vdXRfY29uZmlnW2ldLmJpdHMgPSAwOwotCQkJZGlnX291dF9jb25maWdbaV0ubWluID0gMDsKLQkJCWRpZ19vdXRfY29uZmlnW2ldLm1heCA9IDA7Ci0JCQljaGFuX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKLQkJCWNoYW5faW5fY29uZmlnW2ldLmJpdHMgPSAwOwotCQkJY2hhbl9pbl9jb25maWdbaV0ubWluID0gMDsKLQkJCWNoYW5faW5fY29uZmlnW2ldLm1heCA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0ua2luZCA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0uYml0cyA9IDA7Ci0JCQljaGFuX291dF9jb25maWdbaV0ubWluID0gMDsKLQkJCWNoYW5fb3V0X2NvbmZpZ1tpXS5tYXggPSAwOworCQlyZXN1bHQgPSAwOworCQlkaWdfaW5fY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWRpZ19vdXRfY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWNoYW5faW5fY29uZmlnID0ga2NhbGxvYygzMiwgc2l6ZW9mKHN0cnVjdCBjb25maWdfdCksCisJCQkJR0ZQX0tFUk5FTCk7CisJCWNoYW5fb3V0X2NvbmZpZyA9IGtjYWxsb2MoMzIsIHNpemVvZihzdHJ1Y3QgY29uZmlnX3QpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWRpZ19pbl9jb25maWcgfHwgIWRpZ19vdXRfY29uZmlnCisJCSAgICB8fCAhY2hhbl9pbl9jb25maWcgfHwgIWNoYW5fb3V0X2NvbmZpZykgeworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX2FsbG9jX2NvbmZpZ3M7CiAJCX0KIAogCQl0dHlfc2V0c3BlZWQoZGV2cHJpdi0+dHR5LCBkZXZwcml2LT5zcGVlZCk7CkBAIC00NDcsNyArNDQ0LDcgQEAKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJaW50IGNvbW1hbmQsIGNoYW5uZWwsIGtpbmQ7Ci0JCQkJc3RydWN0IGNvbmZpZ190ICpjdXJfY29uZmlnID0gMDsKKwkJCQlzdHJ1Y3QgY29uZmlnX3QgKmN1cl9jb25maWcgPSBOVUxMOwogCiAJCQkJY2hhbm5lbCA9IGRhdGEudmFsdWUgJiAweDFmOwogCQkJCWtpbmQgPSAoZGF0YS52YWx1ZSA+PiA1KSAmIDB4NzsKQEAgLTU3NCw4ICs1NzEsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgewogCQkJLyogIEZpbGwgaW4gc3ViZGV2IGRhdGEgKi8KIAkJCXN0cnVjdCBjb25maWdfdCAqYzsKLQkJCXVuc2lnbmVkIGNoYXIgKm1hcHBpbmcgPSAwOwotCQkJc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCAqcmFuZ2UgPSAwOworCQkJdW5zaWduZWQgY2hhciAqbWFwcGluZyA9IE5VTEw7CisJCQlzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90ICpyYW5nZSA9IE5VTEw7CiAJCQlpbnQga2luZCA9IDA7CiAKIAkJCXN3aXRjaCAoaSkgewpAQCAtNjEzLDcgKzYxMCw3IEBACiAJCQkJfQogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDp7Ci0JCQkJCWMgPSAwOworCQkJCQljID0gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02MzIsMjIgKzYyOSwyMyBAQAogCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOwogCQkJCXMtPm5fY2hhbiA9IGNoYW47CiAJCQkJcy0+bWF4ZGF0YSA9IDA7Ci0JCQkJaWYgKHMtPm1heGRhdGFfbGlzdCkgewotCQkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwotCQkJCX0KKwkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwogCQkJCXMtPm1heGRhdGFfbGlzdCA9IG1heGRhdGFfbGlzdCA9CiAJCQkJICAgIGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCkgKiBzLT5uX2NoYW4sCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJCQlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgewotCQkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKLQkJCQl9CisJCQkJaWYgKCFzLT5tYXhkYXRhX2xpc3QpCisJCQkJCWJyZWFrOwkvKiBlcnJvciBoYW5kbGVkIGJlbG93ICovCisJCQkJa2ZyZWUocy0+cmFuZ2VfdGFibGVfbGlzdCk7CisJCQkJcy0+cmFuZ2VfdGFibGUgPSBOVUxMOworCQkJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBOVUxMOwogCQkJCWlmIChyYW5nZSkgewotCQkJCQlzLT5yYW5nZV90YWJsZSA9IDA7CiAJCQkJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSByYW5nZV90YWJsZV9saXN0ID0KIAkJCQkJICAgIGttYWxsb2Moc2l6ZW9mCiAJCQkJCQkgICAgKHN0cnVjdAogCQkJCQkJICAgICBzZXJpYWwyMDAyX3JhbmdlX3RhYmxlX3QpICoKIAkJCQkJCSAgICBzLT5uX2NoYW4sIEdGUF9LRVJORUwpOworCQkJCQlpZiAoIXMtPnJhbmdlX3RhYmxlX2xpc3QpCisJCQkJCQlicmVhazsJLyogZXJyIGhhbmRsZWQgYmVsb3cgKi8KIAkJCQl9CiAJCQkJZm9yIChjaGFuID0gMCwgaiA9IDA7IGogPCAzMjsgaisrKSB7CiAJCQkJCWlmIChjW2pdLmtpbmQgPT0ga2luZCkgewpAQCAtNjczLDcgKzY3MSwzNSBAQAogCQkJCX0KIAkJCX0KIAkJfQorCQlpZiAoaSA8PSA0KSB7CisJCQkvKiBGYWlsZWQgdG8gYWxsb2NhdGUgbWF4ZGF0YV9saXN0IG9yIHJhbmdlX3RhYmxlX2xpc3QKKwkJCSAqIGZvciBhIHN1YmRldmljZSB0aGF0IG5lZWRlZCBpdC4gICovCisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQkJCWtmcmVlKHMtPm1heGRhdGFfbGlzdCk7CisJCQkJcy0+bWF4ZGF0YV9saXN0ID0gTlVMTDsKKwkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gTlVMTDsKKwkJCX0KKwkJfQorCitlcnJfYWxsb2NfY29uZmlnczoKKwkJa2ZyZWUoZGlnX2luX2NvbmZpZyk7CisJCWtmcmVlKGRpZ19vdXRfY29uZmlnKTsKKwkJa2ZyZWUoY2hhbl9pbl9jb25maWcpOworCQlrZnJlZShjaGFuX291dF9jb25maWcpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCWlmIChkZXZwcml2LT50dHkpIHsKKwkJCQlmaWxwX2Nsb3NlKGRldnByaXYtPnR0eSwgMCk7CisJCQkJZGV2cHJpdi0+dHR5ID0gTlVMTDsKKwkJCX0KKwkJfQogCX0KKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfMjAwMl9jbG9zZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQpAQCAtODc5LDcgKzkwNSw3IEBACiAJaW50IGk7CiAKIAlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOwogCQlpZiAocy0+bWF4ZGF0YV9saXN0KSB7CiAJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOwpAQCAtODkxLDQgKzkxNywxOSBAQAogCXJldHVybiAwOwogfQogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NlcmlhbDIwMDIpOworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3NlcmlhbDIwMDJfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3NlcmlhbDIwMDIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX3NlcmlhbDIwMDJfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9zZXJpYWwyMDAyKTsKK30KKworbW9kdWxlX2luaXQoZHJpdmVyX3NlcmlhbDIwMDJfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX3NlcmlhbDIwMDJfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NrZWwuYwppbmRleCA0OTA3NTNiLi4wYjllY2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2tlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKQEAgLTM5LDI4ICszOSwyOCBAQAogICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCiAgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKICAqCi0gKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKLSAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KLSAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQotICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAotICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KLSAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQotICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCi0gKiAgIHZhbHVlIGlzIHVzZWQuCi0gKiBBdXRob3I6IHlvdQotICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKLSAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCi0gKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6Ci0gKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAotICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KLSAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KLSAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKLSAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCi0gKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQotICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKLSAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgotICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KLSAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICogIERyaXZlcjogdGhlIG5hbWUgb2YgdGhlIGRyaXZlcgorICogIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqICBEZXZpY2VzOiBhIGZ1bGwgbGlzdCBvZiB0aGUgYm9hcmRzIHRoYXQgYXR0ZW1wdCB0byBiZSBzdXBwb3J0ZWQgYnkKKyAqICAgIHRoZSBkcml2ZXIuICBGb3JtYXQgaXMgIihtYW51ZmFjdHVyZXIpIGJvYXJkIG5hbWUgW2NvbWVkaSBuYW1lXSIsCisgKiAgICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgIFNlZSB0aGUgY29tbWVudCBuZWFyIGJvYXJkX25hbWU6IGluIHRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgIGJlbG93LiAgSWYgKG1hbnVmYWN0dXJlcikgb3IgW2NvbWVkaSBuYW1lXSBpcyBtaXNzaW5nLCB0aGUgcHJldmlvdXMKKyAqICAgIHZhbHVlIGlzIHVzZWQuCisgKiAgQXV0aG9yOiB5b3UKKyAqICBVcGRhdGVkOiBkYXRlIHdoZW4gdGhlIF9kb2N1bWVudGF0aW9uXyB3YXMgbGFzdCB1cGRhdGVkLiAgVXNlICdkYXRlIC1SJworICogICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiAgU3RhdHVzOiBhIG9uZS13b3JkIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0dXMuICBWYWxpZCB2YWx1ZXMgYXJlOgorICogICAgd29ya3MgLSBkcml2ZXIgd29ya3MgY29ycmVjdGx5IG9uIG1vc3QgYm9hcmRzIHN1cHBvcnRlZCwgYW5kCisgKiAgICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgIHVua25vd24gLSB1bmtub3duLiAgVXN1YWxseSBwdXQgdGhlcmUgYnkgZHMuCisgKiAgICBleHBlcmltZW50YWwgLSBtYXkgbm90IHdvcmsgaW4gYW55IHBhcnRpY3VsYXIgcmVsZWFzZS4gIEF1dGhvcgorICogICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgICBiaXRyb3R0ZW4gLSBkcml2ZXIgaGFzIG5vdCBiZWVuIHVwZGF0ZSBpbiBhIGxvbmcgdGltZSwgcHJvYmFibHkKKyAqICAgICAgZG9lc24ndCB3b3JrLCBhbmQgcHJvYmFibHkgaXMgbWlzc2luZyBzdXBwb3J0IGZvciBzaWduaWZpY2FudAorICogICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICAgdW50ZXN0ZWQgLSBhdXRob3IgcHJvYmFibHkgd3JvdGUgaXQgImJsaW5kIiwgYW5kIGlzIGJlbGlldmVkIHRvCisgKiAgICAgIHdvcmssIGJ1dCBubyBjb25maXJtYXRpb24uCiAgKgogICogVGhlc2UgaGVhZGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhbmQgYW55IGNvbW1lbnRzCiAgKiB5b3Ugd2lzaCB0byBzYXkgYWJvdXQgdGhlIGRyaXZlci4gIFRoZSBjb21tZW50IGFyZWEgaXMgdGhlIHBsYWNlCkBAIC02MjAsMTIgKzYyMCw1OSBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi0vKgotICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAotICogYXMgbmVjZXNzYXJ5LgotICovCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NrZWwpOwotLyogSWYgeW91IGFyZSB3cml0aW5nIGEgUENJIGRyaXZlciB5b3Ugc2hvdWxkIHVzZSBDT01FRElfUENJX0lOSVRDTEVBTlVQCi0gKiBpbnN0ZWFkLgotICovCi0vKiBDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9za2VsLCBza2VsX3BjaV90YWJsZSkgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludCBfX2RldmluaXQgZHJpdmVyX3NrZWxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJcmV0dXJuIGNvbWVkaV9wY2lfYXV0b19jb25maWcoZGV2LCBkcml2ZXJfc2tlbC5kcml2ZXJfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkcml2ZXJfc2tlbF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXJfc2tlbF9wY2lfZHJpdmVyID0geworCS5pZF90YWJsZSA9IHNrZWxfcGNpX3RhYmxlLAorCS5wcm9iZSA9ICZkcml2ZXJfc2tlbF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKCZkcml2ZXJfc2tlbF9wY2lfcmVtb3ZlKQorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJpdmVyX3NrZWxfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3NrZWwpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJZHJpdmVyX3NrZWxfcGNpX2RyaXZlci5uYW1lID0gKGNoYXIgKilkcml2ZXJfc2tlbC5kcml2ZXJfbmFtZTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3NrZWxfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyX3NrZWxfcGNpX2RyaXZlcik7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfc2tlbCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9za2VsX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRyaXZlcl9za2VsX2NsZWFudXBfbW9kdWxlKTsKKyNlbHNlCitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfc2tlbF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfc2tlbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3NrZWwpOworfQorCittb2R1bGVfaW5pdChkcml2ZXJfc2tlbF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChkcml2ZXJfc2tlbF9jbGVhbnVwX21vZHVsZSk7CisjZW5kaWYKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKaW5kZXggMThiMGE4My4uNTI2ZGUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCkBAIC0xMDIsNyArMTAyLDE4IEBACiAJLm51bV9uYW1lcyA9IEFSUkFZX1NJWkUoZG5wX2JvYXJkcyksCiB9OwogCi1DT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RucCk7CitzdGF0aWMgaW50IF9faW5pdCBkcml2ZXJfZG5wX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kbnApOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJpdmVyX2RucF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RucCk7Cit9CisKK21vZHVsZV9pbml0KGRyaXZlcl9kbnBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZHJpdmVyX2RucF9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgZG5wX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCkBAIC0zMTQsMyArMzI1LDcgQEAKIAlyZXR1cm4gMTsKIAogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VuaW94eDUuYwppbmRleCAxNmQ0YzlmLi41OTg4ODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91bmlveHg1LmMKQEAgLTExNCw3ICsxMTQsMTggQEAKIAkuZGV0YWNoID0gdW5pb3h4NV9kZXRhY2gKIH07CiAKLUNPTUVESV9JTklUQ0xFQU5VUCh1bmlveHg1X2RyaXZlcik7CitzdGF0aWMgaW50IF9faW5pdCB1bmlveHg1X2RyaXZlcl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZ1bmlveHg1X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1bmlveHg1X2RyaXZlcl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmdW5pb3h4NV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1bmlveHg1X2RyaXZlcl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh1bmlveHg1X2RyaXZlcl9jbGVhbnVwX21vZHVsZSk7CiAKIHN0YXRpYyBpbnQgdW5pb3h4NV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQpAQCAtMzAyLDcgKzMxMyw4IEBACiAJCV9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHVzcCwgaSAqIDIpOwogCQlvdXRiKGkgKyAxLCBzdWJkZXZfaW9iYXNlICsgNSk7CS8qIHNlbmRzIGNoYW5uZWwgbnVtYmVyIHRvIGNhcmQgKi8KIAkJb3V0YignSCcsIHN1YmRldl9pb2Jhc2UgKyA2KTsJLyogcmVxdWVzdHMgRUVQUk9NIHdvcmxkICovCi0JCXdoaWxlICghKGluYihzdWJkZXZfaW9iYXNlICsgMCkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFR4QkUpKQorCQkJOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KIAkJb3V0YigwLCBzdWJkZXZfaW9iYXNlICsgNik7CiAKIAkJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBvZiB0d28gYnl0ZXMgd2lsbCBiZSBhbGxvd2VkICovCkBAIC00MzcsNyArNDQ5LDggQEAKIAogCS8qIHNlbmRpbmcgZm9yIGJ5dGVzIHRvIG1vZHVsZShvbmUgYnl0ZSBwZXIgY3ljbGUgaXRlcmF0aW9uKSAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkKKwkJCTsJLyogd2FpdHMgd2hpbGUgd3JpdHRpbmcgd2lsbCBiZSBhbGxvd2VkICovCiAJCW91dGIodXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2ldLCB1c3AtPnVzcF9pb2Jhc2UgKyA2KTsKIAl9CiAKQEAgLTQ2Nyw3ICs0ODAsOCBAQAogCWNvbnRyb2wgPSBpbmIodXNwLT51c3BfaW9iYXNlKTsJLyogZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgYnl0ZSAqLwogCiAJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBmb3VyIGJ5dGVzIHdpbGwgYmUgYWxsb3dlZCAqLwotCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkgOworCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkKKwkJOwogCiAJLyogaWYgZm91ciBieXRlcyByZWFkZGluZyBlcnJvciBvY2N1cnMgLSByZXR1cm4gMChmYWxzZSkgKi8KIAlpZiAoKGNvbnRyb2wgJiBSeDRDQV9FUlJfTUFTSykpIHsKQEAgLTUyNiwzICs1NDAsNyBAQAogCiAJcmV0dXJuIChjaGFuX251bSA+PiAzKSArIDE7CiB9CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSBodHRwOi8vd3d3LmNvbWVkaS5vcmciKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCAyN2I0Y2IyLi40YjMyMGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC0xMTEsNyArMTExLDcgQEAKICNkZWZpbmUgVkVORE9SX0RJUl9JTiAgMHhDMAogI2RlZmluZSBWRU5ET1JfRElSX09VVCAweDQwCiAKLS8qIGludGVybmFsIGFkcmVzc2VzIG9mIHRoZSA4MDUxIHByb2Nlc3NvciAqLworLyogaW50ZXJuYWwgYWRkcmVzc2VzIG9mIHRoZSA4MDUxIHByb2Nlc3NvciAqLwogI2RlZmluZSBVU0JEVVhTVUJfQ1BVQ1MgMHhFNjAwCiAKIC8qCkBAIC0yMDg1LDcgKzIwODUsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyogaW5pdGFsaXNlIHRoZSBidWZmZXIgKi8KKwkvKiBpbml0aWFsaXNlIHRoZSBidWZmZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdGhpc191c2JkdXhzdWItPnNpemVQd21CdWY7IGkrKykKIAkJKChjaGFyICopKHRoaXNfdXNiZHV4c3ViLT51cmJQd20tPnRyYW5zZmVyX2J1ZmZlcikpW2ldID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggMjljM2MwMS4uMGExNjRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lIFZFTkRPUl9ESVJfT1VUCQkweDQwCiAKIC8qCi0gKiBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKKyAqIGludGVybmFsIGFkZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKICAqLwogI2RlZmluZSBVU0JEVVhGQVNUU1VCX0NQVUNTCTB4RTYwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMKaW5kZXggODYzYWFlNC4uMDI1MmI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYwpAQCAtOTMsNyArOTMsNyBAQAogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBpbnNuLT5zdWJkZXY7CiAKIAlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9VTlVTRUQpIHsKLQkJcHJpbnRrKCIlZCBub3QgdXNlYWJsZSBzdWJkZXZpY2VcbiIsIGluc24tPnN1YmRldik7CisJCXByaW50ayhLRVJOX0VSUiAiJWQgbm90IHVzZWFibGUgc3ViZGV2aWNlXG4iLCBpbnNuLT5zdWJkZXYpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTEwMiw3ICsxMDIsNyBAQAogCiAJcmV0ID0gY29tZWRpX2NoZWNrX2NoYW5saXN0KHMsIDEsICZpbnNuLT5jaGFuc3BlYyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJiYWQgY2hhbnNwZWNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhZCBjaGFuc3BlY1xuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwppbmRleCBhNGVjODkxLi5mYmI4MGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwpAQCAtMTUsMTEgKzE1LDEyIEBACiAgIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSAiY3J5c3RhbGhkX2xueC5oIgogCitzdGF0aWMgREVGSU5FX01VVEVYKGNoZF9kZWNfbXV0ZXgpOwogc3RhdGljIHN0cnVjdCBjbGFzcyAqY3J5c3RhbGhkX2NsYXNzOwogCiBzdGF0aWMgc3RydWN0IGNyeXN0YWxoZF9hZHAgKmdfYWRwX2luZm87CkBAIC0xNTIsMTAgKzE1Myw4IEBACiAJaWYgKHJjKSB7CiAJCUJDTUxPR19FUlIoImZhaWxlZCB0byBwdWxsIGFkZF9jZGF0YSBzejoleCB1YV9vZmY6JXhcbiIsCiAJCQkgICBpby0+YWRkX2NkYXRhX3N6LCAodW5zaWduZWQgaW50KXVhX29mZik7Ci0JCWlmIChpby0+YWRkX2NkYXRhKSB7Ci0JCQlrZnJlZShpby0+YWRkX2NkYXRhKTsKLQkJCWlvLT5hZGRfY2RhdGEgPSBOVUxMOwotCQl9CisJCWtmcmVlKGlvLT5hZGRfY2RhdGEpOworCQlpby0+YWRkX2NkYXRhID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIApAQCAtMjczLDIyICsyNzIsMjIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwl1YyA9IGZkLT5wcml2YXRlX2RhdGE7CiAJaWYgKCF1YykgewogCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZ2V0IHVjXG4iKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwogCX0KIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmY2hkX2RlY19tdXRleCk7CiAJY3Byb2MgPSBjcnlzdGFsaGRfZ2V0X2NtZF9wcm9jKCZhZHAtPmNtZHMsIGNtZCwgdWMpOwogCWlmICghY3Byb2MpIHsKIAkJQkNNTE9HX0VSUigiVW5oYW5kbGVkIGNvbW1hbmQ6ICVkXG4iLCBjbWQpOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmY2hkX2RlY19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldCA9IGNoZF9kZWNfYXBpX2NtZChhZHAsIHVhLCB1Yy0+dWlkLCBjbWQsIGNwcm9jKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZjaGRfZGVjX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzQsNyArMzMzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwl1YyA9IGZkLT5wcml2YXRlX2RhdGE7CiAJaWYgKCF1YykgewogCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZ2V0IHVjXG4iKTsKIAkJcmV0dXJuIC1FTk9EQVRBOwpAQCAtNDM1LDggKzQzNCw3IEBACiAJLyogQ2xlYXIgaW9kYXRhIHBvb2wuLiAqLwogCWRvIHsKIAkJdGVtcCA9IGNoZF9kZWNfYWxsb2NfaW9kYXRhKGFkcCwgMCk7Ci0JCWlmICh0ZW1wKQotCQkJa2ZyZWUodGVtcCk7CisJCWtmcmVlKHRlbXApOwogCX0gd2hpbGUgKHRlbXApOwogCiAJY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woYWRwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMKaW5kZXggYTQzYjE4OC4uYmJlMzY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMKQEAgLTY5OCw3ICs2OTgsNyBAQAogCiAJLyogQ2FyZCAiY3JlYXRpb24iICovCiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2N4MjU4MjFfZGV2X2ZyZWU7Ci0JY2hpcCA9IChzdHJ1Y3QgY3gyNTgyMV9hdWRpb19kZXYgKikgY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAogCWNoaXAtPmRldiA9IGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvZnVuY3Rpb25zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2Z1bmN0aW9ucy5jCmluZGV4IDg2YjQ5ODAuLjIzZWExMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvZnVuY3Rpb25zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9mdW5jdGlvbnMuYwpAQCAtMTIyLDE5ICsxMjIsNyBAQAogICAgICAgICAgICAgcHJfd2FybmluZygiJXM6IGRydnIgbm90IGF2YWlsYWJsZSAoJXgpXG4iLCBfX2Z1bmNfXywgZHJ2cl9zdGF0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgLyogSW5pdGlhbGl6ZSB0aGUgdHEgZW50cnkgb25seSB0aGUgZmlyc3QgdGltZSAqLwotICAgIGlmICh3ZC0+aW5pdF90cSkKLSAgICB7Ci0gICAgICAgIHdkLT5pbml0X3RxID0gMDsKLSAgICAgICAgd2QtPnRxLnJvdXRpbmUgPSB3ZC0+ZnVuYzsKLSAgICAgICAgd2QtPnRxLnN5bmMgPSAwOwotICAgICAgICB3ZC0+dHEuZGF0YSA9IHdkLT5zb2Z0YzsKLSAgICB9Ci0gICAgc2NoZWR1bGVfdGFzayAoJndkLT50cSk7Ci0jZWxzZQogICAgIHNjaGVkdWxlX3dvcmsgKCZ3ZC0+d29yayk7Ci0jZW5kaWYKICAgICBtb2RfdGltZXIgKCZ3ZC0+aCwgamlmZmllcyArIHdkLT50aWNrcyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvaHdwcm9iZS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKaW5kZXggNGM4NjEwMi4uODkyMDBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9od3Byb2JlLmMKQEAgLTMwNSwxNSArMzA1LDkgQEAKICAgICBlcnJvcl9mbGFnID0gMDsKICAgICBwcmVwX2hkd19pbmZvICgpOwogICAgIC8qKiogc2NhbiBQQ0kgYnVzIGZvciBhbGwgcG9zc2libGUgYm9hcmRzICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQogICAgIHdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlIChQQ0lfVkVORE9SX0lEX0NPTkVYQU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX0NOODQ3NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRldikpKQotI2Vsc2UKLSAgICB3aGlsZSAoKHBkZXYgPSBwY2lfZmluZF9kZXZpY2UgKFBDSV9WRU5ET1JfSURfQ09ORVhBTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX0NOODQ3NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYpKSkKLSNlbmRpZgogICAgIHsKICAgICAgICAgaWYgKGM0X2hkd19pbml0IChwZGV2LCBmb3VuZCkpCiAgICAgICAgICAgICBmb3VuZCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9saW51eC5jCmluZGV4IDEzNGU3NTYuLmViMGY0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL2xpbnV4LmMKQEAgLTE0MiwxMCArMTQyLDYgQEAKIH0KIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jZGVmaW5lIERFVl9UT19QUklWKGRldikgKCAqIChzdHJ1Y3QgYzRfcHJpdiAqKikgKChoZGxjX2RldmljZSopKGRldikrMSkpCi0jZWxzZQotCiBjaGFyICAgICAgICoKIGdldF9oZGxjX25hbWUgKGhkbGNfZGV2aWNlICogaGRsYykKIHsKQEAgLTE1NCw3ICsxNTAsNiBAQAogCiAgICAgcmV0dXJuIGRldi0+bmFtZTsKIH0KLSNlbmRpZgogCiAKIHN0YXRpYyAgICAgIHN0YXR1c190CkBAIC0xNjcsNyArMTYyLDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qKioKQEAgLTI1OSw3ICsyNTMsNiBAQAogICAgICAgICBwaS0+d3FfcG9ydCA9IDA7CiAgICAgfQogfQotI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTI5MSw0OCArMjg0LDYgQEAKIH0KIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaWYgIWRlZmluZWQoR0VORVJJQ19IRExDX1ZFUlNJT04pIHx8IChHRU5FUklDX0hETENfVkVSU0lPTiA8IDQpCi0KLS8qKiBMaW51eCAyLjQuMTgtMTkgKiovCi1TVEFUSUMgaW50Ci1jaGFuX29wZW4gKGhkbGNfZGV2aWNlICogaGRsYykKLXsKLSAgICBzdGF0dXNfdCAgICByZXQ7Ci0KLSAgICBpZiAoKHJldCA9IGM0X2NoYW5fdXAgKERFVl9UT19QUklWIChoZGxjKS0+Y2ksIERFVl9UT19QUklWIChoZGxjKS0+Y2hhbm51bSkpKQotICAgICAgICByZXR1cm4gLXJldDsKLSAgICBNT0RfSU5DX1VTRV9DT1VOVDsKLSAgICBuZXRpZl9zdGFydF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVycm9yID0gc3VjY2VzcyAqLwotfQotCi0jZWxzZQotCi0vKiogTGludXggMi40LjIwIGFuZCBoaWdoZXIgKiovCi1TVEFUSUMgaW50Ci1jaGFuX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICogbmRldikKLXsKLSAgICBoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjIChuZGV2KTsKLSAgICBzdGF0dXNfdCAgICByZXQ7Ci0KLSAgICBoZGxjLT5wcm90byA9IElGX1BST1RPX0hETEM7Ci0gICAgaWYgKChyZXQgPSBoZGxjX29wZW4gKGhkbGMpKSkKLSAgICB7Ci0gICAgICAgIHByX2luZm8oImhkbGNfb3BlbiBmYWlsdXJlLCBlcnIgJWQuXG4iLCByZXQpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgICBpZiAoKHJldCA9IGM0X2NoYW5fdXAgKERFVl9UT19QUklWIChoZGxjKS0+Y2ksIERFVl9UT19QUklWIChoZGxjKS0+Y2hhbm51bSkpKQotICAgICAgICByZXR1cm4gLXJldDsKLSAgICBNT0RfSU5DX1VTRV9DT1VOVDsKLSAgICBuZXRpZl9zdGFydF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVycm9yID0gc3VjY2VzcyAqLwotfQotI2VuZGlmCi0KLSNlbHNlCi0KLS8qKiBMaW51eCAyLjYgKiovCiBTVEFUSUMgaW50CiBjaGFuX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICogbmRldikKIHsKQEAgLTM1MSwzOSArMzAyLDggQEAKICAgICBuZXRpZl9zdGFydF9xdWV1ZSAobmRldik7CiAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBlcnJvciA9IHN1Y2Nlc3MgKi8KIH0KLSNlbmRpZgogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiAhZGVmaW5lZChHRU5FUklDX0hETENfVkVSU0lPTikgfHwgKEdFTkVSSUNfSERMQ19WRVJTSU9OIDwgNCkKLQotLyoqIExpbnV4IDIuNC4xOC0xOSAqKi8KLVNUQVRJQyB2b2lkCi1jaGFuX2Nsb3NlIChoZGxjX2RldmljZSAqIGhkbGMpCi17Ci0gICAgbmV0aWZfc3RvcF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICBtdXN5Y2NfY2hhbl9kb3duICgoY2lfdCAqKSAwLCBERVZfVE9fUFJJViAoaGRsYyktPmNoYW5udW0pOwotICAgIE1PRF9ERUNfVVNFX0NPVU5UOwotfQotI2Vsc2UKLQotLyoqIExpbnV4IDIuNC4yMCBhbmQgaGlnaGVyICoqLwotU1RBVElDIGludAotY2hhbl9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2KQotewotICAgIGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMgKG5kZXYpOwotCi0gICAgbmV0aWZfc3RvcF9xdWV1ZSAoaGRsY190b19kZXYgKGhkbGMpKTsKLSAgICBtdXN5Y2NfY2hhbl9kb3duICgoY2lfdCAqKSAwLCBERVZfVE9fUFJJViAoaGRsYyktPmNoYW5udW0pOwotICAgIGhkbGNfY2xvc2UgKGhkbGMpOwotICAgIE1PRF9ERUNfVVNFX0NPVU5UOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLSNlbHNlCi0KLS8qKiBMaW51eCAyLjYgKiovCiBTVEFUSUMgaW50CiBjaGFuX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqIG5kZXYpCiB7CkBAIC0zOTYsMzcgKzMxNiw4IEBACiAgICAgbW9kdWxlX3B1dCAoVEhJU19NT0RVTEUpOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmCiAKIAotI2lmICFkZWZpbmVkKEdFTkVSSUNfSERMQ19WRVJTSU9OKSB8fCAoR0VORVJJQ19IRExDX1ZFUlNJT04gPCA0KQotCi0vKiogTGludXggMi40LjE4LTE5ICoqLwotU1RBVElDIGludAotY2hhbl9pb2N0bCAoaGRsY19kZXZpY2UgKiBoZGxjLCBzdHJ1Y3QgaWZyZXEgKiBpZnIsIGludCBjbWQpCi17Ci0gICAgaWYgKGNtZCA9PSBIRExDU0NMT0NLKQotICAgIHsKLSAgICAgICAgaWZyLT5pZnJfaWZydS5pZnJ1X2l2YWx1ZSA9IExJTkVfREVGQVVMVDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAtRUlOVkFMOwotfQotI2VuZGlmCi0KLQotI2lmICFkZWZpbmVkKEdFTkVSSUNfSERMQ19WRVJTSU9OKSB8fCAoR0VORVJJQ19IRExDX1ZFUlNJT04gPCA0KQotU1RBVElDIGludAotY2hhbl9kZXZfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICogaGRsYywgc3RydWN0IGlmcmVxICogaWZyLCBpbnQgY21kKQotewotICAgIGlmIChjbWQgPT0gSERMQ1NDTE9DSykKLSAgICB7Ci0gICAgICAgIGlmci0+aWZyX2lmcnUuaWZydV9pdmFsdWUgPSBMSU5FX0RFRkFVTFQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gLUVJTlZBTDsKLX0KLSNlbHNlCiBTVEFUSUMgaW50CiBjaGFuX2Rldl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIHN0cnVjdCBpZnJlcSAqIGlmciwgaW50IGNtZCkKIHsKQEAgLTQzNSwxNiArMzI2LDExIEBACiAKIAogU1RBVElDIGludAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotY2hhbl9hdHRhY2hfbm9vcCAoaGRsY19kZXZpY2UgKiBoZGxjLCB1bnNpZ25lZCBzaG9ydCBmb29fMSwgdW5zaWduZWQgc2hvcnQgZm9vXzIpCi0jZWxzZQogY2hhbl9hdHRhY2hfbm9vcCAoc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2LCB1bnNpZ25lZCBzaG9ydCBmb29fMSwgdW5zaWduZWQgc2hvcnQgZm9vXzIpCi0jZW5kaWYKIHsKICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogb3VyIGRyaXZlciBoYXMgbm90aGluZyB0byBkbyBoZXJlLCBzaG93J3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3ZlciwgZ28gaG9tZSAqLwogfQotI2VuZGlmCiAKIAogU1RBVElDIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKQEAgLTQ1NSwxNiArMzQxLDEyIEBACiAgICAgc3RydWN0IHNiZWNvbV9jaGFuX3N0YXRzICpzdGF0czsKICAgICBpbnQgICAgICAgICBjaGFubnVtOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgY2hhbm51bSA9IERFVl9UT19QUklWIChuZGV2KS0+Y2hhbm51bTsKLSNlbHNlCiAgICAgewogICAgICAgICBzdHJ1Y3QgYzRfcHJpdiAqcHJpdjsKIAogICAgICAgICBwcml2ID0gKHN0cnVjdCBjNF9wcml2ICopIGRldl90b19oZGxjIChuZGV2KS0+cHJpdjsKICAgICAgICAgY2hhbm51bSA9IHByaXYtPmNoYW5udW07CiAgICAgfQotI2VuZGlmCiAKICAgICBjaCA9IGM0X2ZpbmRfY2hhbiAoY2hhbm51bSk7CiAgICAgaWYgKGNoID09IE5VTEwpCkBAIC01MTEsMzQgKzM5MywxOSBAQAogfQogCiAKLSNpZiAhZGVmaW5lZChHRU5FUklDX0hETENfVkVSU0lPTikgfHwgKEdFTkVSSUNfSERMQ19WRVJTSU9OIDwgNCkKLVNUQVRJQyBpbnQKLWM0X2xpbnV4X3htaXQgKGhkbGNfZGV2aWNlICogaGRsYywgc3RydWN0IHNrX2J1ZmYgKiBza2IpCi17Ci0gICAgaW50ICAgICAgICAgcnZhbDsKLQotICAgIHJ2YWwgPSBtdXN5Y2Nfc3RhcnRfeG1pdCAoREVWX1RPX1BSSVYgKGhkbGMpLT5jaSwgREVWX1RPX1BSSVYgKGhkbGMpLT5jaGFubnVtLCBza2IpOwotICAgIHJldHVybiAtcnZhbDsKLX0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmV3ICovCiBTVEFUSUMgaW50CiBjNF9saW51eF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKiBuZGV2KQogewogICAgIGNvbnN0IHN0cnVjdCBjNF9wcml2ICpwcml2OwogICAgIGludCAgICAgICAgIHJ2YWw7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBwcml2ID0gREVWX1RPX1BSSVYgKG5kZXYpOwotI2Vsc2UKICAgICBoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjIChuZGV2KTsKIAogICAgIHByaXYgPSBoZGxjLT5wcml2OwotI2VuZGlmCiAKICAgICBydmFsID0gbXVzeWNjX3N0YXJ0X3htaXQgKHByaXYtPmNpLCBwcml2LT5jaGFubnVtLCBza2IpOwogICAgIHJldHVybiAtcnZhbDsKIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VORVJJQ19IRExDX1ZFUlNJT04gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjaGFuX29wcyA9IHsKICAgICAgICAubmRvX29wZW4gICAgICAgPSBjaGFuX29wZW4sCkBAIC04MjMsMTggKzY5MCwxMCBAQAogICAgIHJldCA9IG1rcmV0IChjNF9uZXdfY2hhbiAoY2ksIGNwLnBvcnQsIGNwLmNoYW5udW0sIGRldikpOwogICAgIGlmIChyZXQpCiAgICAgewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgICAgICBydG5sX3VubG9jayAoKTsgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgICAgIFY3ICh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKSAoZGV2X3RvX2hkbGMgKGRldikpOwotICAgICAgICBydG5sX2xvY2sgKCk7ICAgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgICAgIE9TX2tmcmVlIChERVZfVE9fUFJJViAoZGV2KSk7Ci0gICAgICAgIE9TX2tmcmVlIChkZXYpOwotI2Vsc2UKICAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBkdWUgdG8gSW9jdGwgY2FsbGluZyBzZXF1ZW5jZSAqLwogICAgICAgICB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkZXYpOwogICAgICAgICBydG5sX2xvY2sgKCk7ICAgICAgICAgICAgICAgLyogbmVlZGVkIGR1ZSB0byBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgICAgIGZyZWVfbmV0ZGV2IChkZXYpOwotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CkBAIC04ODMsMTEgKzc0Miw3IEBACiAgICAgICAgIGNvbnN0IHN0cnVjdCBjNF9wcml2ICpwcml2OwogICAgICAgICBpbnQgICAgICAgICBjaGFubnVtOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIHByaXYgPSBERVZfVE9fUFJJViAobmRldik7Ci0jZWxzZQogICAgICAgICBwcml2ID0gKHN0cnVjdCBjNF9wcml2ICopIGRldl90b19oZGxjIChuZGV2KS0+cHJpdjsKLSNlbmRpZgogICAgICAgICBjaSA9IHByaXYtPmNpOwogICAgICAgICBjaGFubnVtID0gcHJpdi0+Y2hhbm51bTsKIApAQCAtODk3LDIyICs3NTIsMTIgQEAKICAgICAgICAgY2gtPnVzZXIgPSAwOyAgICAgICAgICAgICAgIC8qIHdpbGwgYmUgZnJlZWQsIGJlbG93ICovCiAgICAgfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgaWYgKGxvY2tpdCkKLSAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCi0gICAgVjcgKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpIChkZXZfdG9faGRsYyAobmRldikpOwotICAgIGlmIChsb2NraXQpCi0gICAgICAgIHJ0bmxfbG9jayAoKTsgICAgICAgICAgICAgICAvKiBuZWVkZWQgaWYgSW9jdGwgY2FsbGluZyBzZXF1ZW5jZSAqLwotICAgIE9TX2tmcmVlIChERVZfVE9fUFJJViAobmRldikpOwotICAgIE9TX2tmcmVlIChuZGV2KTsKLSNlbHNlCiAgICAgaWYgKGxvY2tpdCkKICAgICAgICAgcnRubF91bmxvY2sgKCk7ICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAobmRldik7CiAgICAgaWYgKGxvY2tpdCkKICAgICAgICAgcnRubF9sb2NrICgpOyAgICAgICAgICAgICAgIC8qIG5lZWRlZCBpZiBJb2N0bCBjYWxsaW5nIHNlcXVlbmNlICovCiAgICAgZnJlZV9uZXRkZXYgKG5kZXYpOwotI2VuZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzksMTQgKzExODQsNiBAQAogbW9kdWxlX2luaXQgKGM0X21vZF9pbml0KTsKIG1vZHVsZV9leGl0IChjNF9tb2RfcmVtb3ZlKTsKIAotI2lmbmRlZiBTQkVfSU5DTFVERV9TWU1CT0xTCi0jaWZuZGVmIENPTkZJR19TQkVfV0FOQzI0X05DT01NCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi1FWFBPUlRfTk9fU1lNQk9MUzsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQogTU9EVUxFX0FVVEhPUiAoIlNCRSBUZWNobmljYWwgU2VydmljZXMgPHN1cHBvcnRAc2JlaS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04gKCJ3YW5QQ0ktQ3hUMUUxIEdlbmVyaWMgSERMQyBXQU4gRHJpdmVyIG1vZHVsZSIpOwogI2lmZGVmIE1PRFVMRV9MSUNFTlNFCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9tdXN5Y2MuYwppbmRleCBkM2Y1YTViLi4xMmM3NmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL211c3ljYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvbXVzeWNjLmMKQEAgLTQwNSw3ICs0MDUsNiBAQAogfQogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAvKgogICogVGhpcyBpcyB0aGUgd29ya3EgdGFzayBleGVjdXRlZCBieSB0aGUgT1Mgd2hlbiBvdXIgcXVldWVfd29yaygpIGlzCiAgKiBzY2hlZHVsZWQgYW5kIHJ1bi4gIEl0IGNhbiBmaXJlIG9mZiBlaXRoZXIgUlggb3IgVFggQUNUSVZBVElPTiBkZXBlbmRpbmcKQEAgLTUxNSw3ICs1MTQsNiBAQAogI2VuZGlmCiAgICAgfQogfQotI2VuZGlmCiAKIAogIC8qCkBAIC01MzEsNyArNTI5LDYgQEAKICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+dHhkX2lycV9zcnYsIGNoLT50eGRfaXJxX3Nydi0+c3RhdHVzKTsKICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQogICAgIC8qIDIuNiAtIGZpbmQgbmV4dCB1bnByb2Nlc3NlZCBtZXNzYWdlLCB0aGVuIHNldCBUWCB0aHAgdG8gaXQgKi8KICNpZmRlZiBSTERfUkVTVEFSVF9ERUJVRwogICAgIHByX2luZm8oIj4+IG11c3ljY19jaGFuX3Jlc3RhcnQ6IHNjaGVkdWxpbmcgQ2hhbiAleCB3b3JrUSBAICVwXG4iLCBjaC0+Y2hhbm51bSwgJmNoLT5jaF93b3JrKTsKQEAgLTUzOSw1MSArNTM2LDkgQEAKICAgICBjNF93a19jaGFuX3Jlc3RhcnQgKGNoKTsgICAgICAgIC8qIHdvcmsgcXVldWUgbWVjaGFuaXNtIGZpcmVzIG9mZjogUmVmOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbXVzeWNjX3dxX2NoYW5fcmVzdGFydCAoKSAqLwogCi0jZWxzZQotCi0KLSAgICAvKiAyLjQgLSBmaW5kIG5leHQgdW5wcm9jZXNzZWQgbWVzc2FnZSwgdGhlbiBzZXQgVFggdGhwIHRvIGl0ICovCi0jaWZkZWYgUkxEX1JFU1RBUlRfREVCVUcKLSAgICBwcl9pbmZvKCI+PiBtdXN5Y2NfY2hhbl9yZXN0YXJ0OiBzY2hlZHVsaW5nIENoYW4gJXggc3RhcnRfdHggJXhcbiIsIGNoLT5jaGFubnVtLCBjaC0+Y2hfc3RhcnRfdHgpOwotI2VuZGlmCi0gICAgLyogcmVzdGFydCB0cmFuc21pc3Npb24gZnJvbSBiYWNrZ3JvdW5kIGxvb3AgKi8KLSAgICBjaC0+dXAtPnVwLT53ZF9ub3RpZnkgPSBXRF9OT1RJRllfMVRYOwotI2VuZGlmCiB9CiAKIAotI2lmIDAKLXZvaWQKLW11c3ljY19jbGVhbnVwIChjaV90ICogY2kpCi17Ci0gICAgbXBpX3QgICAgICAqcGk7Ci0gICAgaW50ICAgICAgICAgaSwgajsKLQotICAgIC8qIGZyZWUgdXAgZHJpdmVyIHJlc291cmNlcyAqLwotICAgIGNpLT5zdGF0ZSA9IENfSU5JVDsgICAgICAgICAgICAgLyogbWFyayBhcyBoYXJkd2FyZSBub3QgYXZhaWxhYmxlICovCi0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY2ktPm1heF9wb3J0czsgaSsrKQotICAgIHsKLSAgICAgICAgcGkgPSAmY2ktPnBvcnRbaV07Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQotICAgICAgICBjNF93cV9wb3J0X2NsZWFudXAgKHBpKTsKLSNlbmRpZgotICAgICAgICBmb3IgKGogPSAwOyBqIDwgTVVTWUNDX05DSEFOUzsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGktPmNoYW5bal0pCi0gICAgICAgICAgICAgICAgT1Nfa2ZyZWUgKHBpLT5jaGFuW2pdKTsgLyogZnJlZSBtY2hfdCBzdHJ1Y3QgKi8KLSAgICAgICAgfQotICAgICAgICBPU19rZnJlZSAocGktPnJlZ3JhbV9zYXZlZCk7Ci0gICAgfQotI2lmIDAKLSAgICAvKiBvYnNvbGV0ZSAtIHdhdGNoZG9nIGlzIG5vdyBzdGF0aWMgdy9pbiBjaV90ICovCi0gICAgT1NfZnJlZV93YXRjaGRvZyAoY2ktPndkKTsKLSNlbmRpZgotICAgIE9TX2tmcmVlIChjaS0+aXFkX3Bfc2F2ZWQpOwotICAgIE9TX2tmcmVlIChjaSk7Ci19Ci0jZW5kaWYKLQogdm9pZAogcmxkX3B1dF9sZWQgKG1waV90ICogcGksIHVfaW50MzJfdCBsZWR2YWwpCiB7CkBAIC0yMDA4LDM3ICsxOTYzLDEzIEBACiAgICAgYXRvbWljX2FkZCAobGVuLCAmY2ktPnR4X3BlbmRpbmcpOwogICAgIGNoLT5zLnR4X3BhY2tldHMrKzsKICAgICBjaC0+cy50eF9ieXRlcyArPSBsZW47Ci0jaWYgMAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7ICAgLyogYWxsb3cgcGVuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJydXB0IHRvIHNuZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aHJ1ICovCi0jZW5kaWYKLQogICAgIC8qCiAgICAgICogSWYgYW4gT05SIHdhcyBzZWVuLCB0aGVuIGNoYW5uZWwgcmVxdWlyZXMgcG9raW5nIHRvIHJlc3RhcnQKICAgICAgKiB0cmFuc21pc3Npb24uCiAgICAgICovCiAgICAgaWYgKGNoLT5jaF9zdGFydF90eCkKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKLSAgICAgICAgU0RfU0VNX1RBS0UgKCZjaS0+c2VtX3dkYnVzeSwgIl93ZF8iKTsgIC8qIG9ubHkgMSB0aHJ1IGhlcmUsIHBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYm9hcmQgKi8KLSAgICAgICAgaWYgKChjaC0+Y2hfc3RhcnRfdHggPT0gQ0hfU1RBUlRfVFhfT05SKSAmJiAoY2gtPnAuY2hhbl9tb2RlID09IENGR19DSF9QUk9UT19UUkFOUykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIE9OUiByZXN0YXJ0IHRyYW5zbWlzc2lvbiBmcm9tIGJhY2tncm91bmQgbG9vcCAqLwotICAgICAgICAgICAgY2ktPndkX25vdGlmeSA9IFdEX05PVElGWV9PTlI7ICAgICAgLyogZW5hYmxlZCBnbG9iYWwgd2F0Y2hkb2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYW4tdGhydSAgKi8KLSAgICAgICAgfSBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIHN0YXJ0IGZpcnN0IHRyYW5zbWlzc2lvbiBmcm9tIGJhY2tncm91bmQgbG9vcCAqLwotICAgICAgICAgICAgY2ktPndkX25vdGlmeSA9IFdEX05PVElGWV8xVFg7ICAgICAgLyogZW5hYmxlZCBnbG9iYWwgd2F0Y2hkb2cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNjYW4tdGhydSAgKi8KLSAgICAgICAgfQogICAgICAgICBtdXN5Y2NfY2hhbl9yZXN0YXJ0IChjaCk7Ci0gICAgICAgIFNEX1NFTV9HSVZFICgmY2ktPnNlbV93ZGJ1c3kpOwotI2Vsc2UKLSAgICAgICAgbXVzeWNjX2NoYW5fcmVzdGFydCAoY2gpOwotI2VuZGlmCiAgICAgfQogI2lmZGVmIFNCRV9XQU4yNTZUM19FTkFCTEUKICAgICB3YW4yNTZ0M19sZWQgKGNpLCBMRURfVFgsIExFRFZfRyk7CkBAIC0yMDQ3LDEzOSArMTk3OCw0IEBACiB9CiAKIAotI2lmIDAKLWludAotbXVzeWNjX3NldF9jaGFuIChjaV90ICogY2ksIGludCBjaGFubnVtLCBzdHJ1Y3Qgc2JlY29tX2NoYW5fcGFyYW0gKiBwKQotewotICAgIG1jaF90ICAgICAgKmNoOwotICAgIGludCAgICAgICAgIHJvayA9IDA7Ci0gICAgaW50ICAgICAgICAgbiA9IDA7Ci0KLSAgICBpZiAoY2hhbm51bSA8IDAgfHwgY2hhbm51bSA+PSAoTVVTWUNDX05QT1JUUyAqIE1VU1lDQ19OQ0hBTlMpKSAgICAgIC8qIHNhbml0eSBjaGsgcGFyYW0gKi8KLSAgICAgICAgcmV0dXJuIEVDSFJORzsKLSAgICBpZiAoIShjaCA9IHNkX2ZpbmRfY2hhbiAoY2ksIGNoYW5udW0pKSkKLSAgICAgICAgcmV0dXJuIEVOT0VOVDsKLSAgICBpZiAoY2gtPmNoYW5udW0gIT0gcC0+Y2hhbm51bSkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICBpZiAoc2RfbGluZV9pc19vayAoY2gtPnVzZXIpKQotICAgIHsKLSAgICAgICAgcm9rID0gMTsKLSAgICAgICAgc2RfbGluZV9pc19kb3duIChjaC0+dXNlcik7Ci0gICAgfQotICAgIGlmIChjaC0+c3RhdGUgPT0gVVAgJiYgICAgICAgICAgLyogYnJpbmcgZG93biBpbiBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KLSAgICAgICAgKGNoLT5wLnN0YXR1cyAhPSBwLT5zdGF0dXMgfHwKLSAgICAgICAgIGNoLT5wLmNoYW5fbW9kZSAhPSBwLT5jaGFuX21vZGUgfHwKLSAgICAgICAgIGNoLT5wLmludHJfbWFzayAhPSBwLT5pbnRyX21hc2sgfHwKLSAgICAgICAgIGNoLT50eGRfZnJlZSA8IGNoLT50eGRfbnVtKSkKLSAgICB7Ci0gICAgICAgIGlmICgobiA9IG11c3ljY19jaGFuX2Rvd24gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgaWYgKGNoLT5wLm1vZGVfNTZrICE9IHAtPm1vZGVfNTZrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaC0+cCA9ICpwOyAgICAgICAgICAgICAvKiBjb3B5IGluIG5ldyBwYXJhbWV0ZXJzICovCi0gICAgICAgICAgICBtdXN5Y2NfdXBkYXRlX3RpbWVzbG90cyAoJmNpLT5wb3J0W2NoLT5jaGFubnVtIC8gTVVTWUNDX05DSEFOU10pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoLT5wID0gKnA7ICAgICAgICAgICAgIC8qIGNvcHkgaW4gbmV3IHBhcmFtZXRlcnMgKi8KLSAgICAgICAgaWYgKChuID0gbXVzeWNjX2NoYW5fdXAgKGNpLCBjaGFubnVtKSkpCi0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgc2RfZW5hYmxlX3htaXQgKGNoLT51c2VyKTsgIC8qIHJlLWVuYWJsZSB0byBjYXRjaCBmbG93IGNvbnRyb2xsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGNoYW5uZWwgKi8KLSAgICB9IGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChjaC0+cC5tb2RlXzU2ayAhPSBwLT5tb2RlXzU2aykKLSAgICAgICAgewotICAgICAgICAgICAgY2gtPnAgPSAqcDsgICAgICAgICAgICAgLyogY29weSBpbiBuZXcgcGFyYW1ldGVycyAqLwotICAgICAgICAgICAgbXVzeWNjX3VwZGF0ZV90aW1lc2xvdHMgKCZjaS0+cG9ydFtjaC0+Y2hhbm51bSAvIE1VU1lDQ19OQ0hBTlNdKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjaC0+cCA9ICpwOyAgICAgICAgICAgICAvKiBjb3B5IGluIG5ldyBwYXJhbWV0ZXJzICovCi0gICAgfQotCi0gICAgaWYgKHJvaykKLSAgICAgICAgc2RfbGluZV9pc191cCAoY2gtPnVzZXIpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotaW50Ci1tdXN5Y2NfZ2V0X2NoYW4gKGNpX3QgKiBjaSwgaW50IGNoYW5udW0sIHN0cnVjdCBzYmVjb21fY2hhbl9wYXJhbSAqIHApCi17Ci0gICAgbWNoX3QgICAgICAqY2g7Ci0KLSNpZiAwCi0gICAgaWYgKGNoYW5udW0gPCAwIHx8IGNoYW5udW0gPj0gKE1VU1lDQ19OUE9SVFMgKiBNVVNZQ0NfTkNIQU5TKSkgICAgICAvKiBzYW5pdHkgY2hrIHBhcmFtICovCi0gICAgICAgIHJldHVybiBFQ0hSTkc7Ci0jZW5kaWYKLSAgICBpZiAoIShjaCA9IHNkX2ZpbmRfY2hhbiAoY2ksIGNoYW5udW0pKSkKLSAgICAgICAgcmV0dXJuIEVOT0VOVDsKLSAgICAqcCA9IGNoLT5wOwotICAgIHJldHVybiAwOwotfQotCi0KLWludAotbXVzeWNjX2dldF9jaGFuX3N0YXRzIChjaV90ICogY2ksIGludCBjaGFubnVtLCBzdHJ1Y3Qgc2JlY29tX2NoYW5fc3RhdHMgKiBwKQotewotICAgIG1jaF90ICAgICAgKmNoOwotCi0gICAgaWYgKGNoYW5udW0gPCAwIHx8IGNoYW5udW0gPj0gKE1VU1lDQ19OUE9SVFMgKiBNVVNZQ0NfTkNIQU5TKSkgICAgICAvKiBzYW5pdHkgY2hrIHBhcmFtICovCi0gICAgICAgIHJldHVybiBFQ0hSTkc7Ci0gICAgaWYgKCEoY2ggPSBzZF9maW5kX2NoYW4gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgIHJldHVybiBFTk9FTlQ7Ci0gICAgKnAgPSBjaC0+czsKLSAgICBwLT50eF9wZW5kaW5nID0gYXRvbWljX3JlYWQgKCZjaC0+dHhfcGVuZGluZyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotCi0jaWZkZWYgU0JFX1dBTjI1NlQzX0VOQUJMRQotaW50Ci1tdXN5Y2NfY2hhbl9kb3duIChjaV90ICogY2ksIGludCBjaGFubnVtKQotewotICAgIG1jaF90ICAgICAgKmNoOwotICAgIG1waV90ICAgICAgKnBpOwotICAgIGludCAgICAgICAgIGksIGdjaGFuOwotCi0gICAgaWYgKCEoY2ggPSBzZF9maW5kX2NoYW4gKGNpLCBjaGFubnVtKSkpCi0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgcGkgPSBjaC0+dXA7Ci0gICAgZ2NoYW4gPSBjaC0+Z2NoYW47Ci0KLSAgICAvKiBEZWFjdGl2YXRlIHRoZSBjaGFubmVsICovCi0gICAgbXVzeWNjX3NlcnZfcmVxIChwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfUlhfRElSRUNUSU9OIHwgZ2NoYW4pOwotICAgIGNoLT5jaF9zdGFydF9yeCA9IDA7Ci0gICAgbXVzeWNjX3NlcnZfcmVxIChwaSwgU1JfQ0hBTk5FTF9ERUFDVElWQVRFIHwgU1JfVFhfRElSRUNUSU9OIHwgZ2NoYW4pOwotICAgIGNoLT5jaF9zdGFydF90eCA9IDA7Ci0KLSAgICBpZiAoY2gtPnN0YXRlID09IERPV04pCi0gICAgICAgIHJldHVybiAwOwotICAgIGNoLT5zdGF0ZSA9IERPV047Ci0KLSAgICBwaS0+cmVncmFtLT50aHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT50bXBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5yaHBbZ2NoYW5dID0gMDsKLSAgICBwaS0+cmVncmFtLT5ybXBbZ2NoYW5dID0gMDsKLSAgICBGTFVTSF9NRU1fV1JJVEUgKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IGNoLT50eGRfbnVtOyBpKyspCi0gICAgewotICAgICAgICBpZiAoY2gtPm1kdFtpXS5tZW1fdG9rZW4gIT0gMCkKLSAgICAgICAgICAgIE9TX21lbV90b2tlbl9mcmVlIChjaC0+bWR0W2ldLm1lbV90b2tlbik7Ci0gICAgfQotCi0gICAgZm9yIChpID0gMDsgaSA8IGNoLT5yeGRfbnVtOyBpKyspCi0gICAgewotICAgICAgICBpZiAoY2gtPm1kcltpXS5tZW1fdG9rZW4gIT0gMCkKLSAgICAgICAgICAgIE9TX21lbV90b2tlbl9mcmVlIChjaC0+bWRyW2ldLm1lbV90b2tlbik7Ci0gICAgfQotCi0gICAgT1Nfa2ZyZWUgKGNoLT5tZHQpOwotICAgIGNoLT5tZHQgPSAwOwotICAgIE9TX2tmcmVlIChjaC0+bWRyKTsKLSAgICBjaC0+bWRyID0gMDsKLQotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qKiogRW5kLW9mLUZpbGUgKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWM5M3g2X2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWM5M3g2X2VlcHJvbS5jCmluZGV4IDFjOGRmYjguLjYyYjEyZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jOTN4Nl9lZXByb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtYzkzeDZfZWVwcm9tLmMKQEAgLTUwMCwxMSArNTAwLDcgQEAKICAgICB0aW1lX3QgICAgICBjcmVhdGVUaW1lOwogICAgIGludCAgICAgICAgIGk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBjcmVhdGVUaW1lID0gQ1VSUkVOVF9USU1FOwotI2Vsc2UKICAgICBjcmVhdGVUaW1lID0gZ2V0X3NlY29uZHMgKCk7Ci0jZW5kaWYKIAogICAgIC8qIHVzZSB0ZW1wbGF0ZSBkYXRhICovCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoRkxEX1RZUEUyKTsgKytpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNC5oIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNC5oCmluZGV4IDI2YzFmMGUuLmVmNmFjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0LmgKQEAgLTExNywxMiArMTE3LDggQEAKIAogI2luY2x1ZGUgInBtY2M0X3ByaXZhdGUuaCIKIAotI2lmICEoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogY2hhciAgICAgICAqZ2V0X2hkbGNfbmFtZSAoaGRsY19kZXZpY2UgKik7CiAKLSNlbmRpZgotCi0KIC8qCiAgKiBleHRlcm5hbCBpbnRlcmZhY2UKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvcG1jYzRfZHJ2LmMKaW5kZXggMzMzY2YyNi4uOWY3MzBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9wbWNjNF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3h0MWUxL3BtY2M0X2Rydi5jCkBAIC0xMTksMTIgKzExOSwxMCBAQAogI2RlZmluZSBLRVJOX1dBUk4gS0VSTl9XQVJOSU5HCiAKIC8qIGZvcndhcmQgcmVmZXJlbmNlcyAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKIHN0YXR1c190ICAgIGM0X3drX2NoYW5faW5pdCAobXBpX3QgKiwgbWNoX3QgKik7CiB2b2lkICAgICAgICBjNF93cV9wb3J0X2NsZWFudXAgKG1waV90ICopOwogc3RhdHVzX3QgICAgYzRfd3FfcG9ydF9pbml0IChtcGlfdCAqKTsKIAotI2VuZGlmCiBpbnQgICAgICAgICBjNF9sb29wX3BvcnQgKGNpX3QgKiwgaW50LCB1X2ludDhfdCk7CiBzdGF0dXNfdCAgICBjNF9zZXRfcG9ydCAoY2lfdCAqLCBpbnQpOwogc3RhdHVzX3QgICAgbXVzeWNjX2NoYW5fZG93biAoY2lfdCAqLCBpbnQpOwpAQCAtNTMzLDE0NSArNTMxLDE1IEBACiBTVEFUSUMgdm9pZAogYzRfd2F0Y2hkb2cgKGNpX3QgKiBjaSkKIHsKLSNpZiAwCi0gICAgLy91bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCi0KICAgICBpZiAoZHJ2cl9zdGF0ZSAhPSBTQkVfRFJWUl9BVkFJTEFCTEUpCiAgICAgewogICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQogICAgICAgICAgICAgcHJfaW5mbygiZHJ2ciBub3QgYXZhaWxhYmxlICgleClcbiIsIGRydnJfc3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2lmIDAKLSAgICBTRF9TRU1fVEFLRSAoJmNpLT5zZW1fd2RidXN5LCAiX3dkXyIpOyAgICAvKiBvbmx5IDEgdGhydSBoZXJlLCBwZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBib2FyZCAqLwotI2VuZGlmCi0KICAgICBjaS0+d2Rjb3VudCsrOwogICAgIGNoZWNrUG9ydHMgKGNpKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw1LDQxKQotICAgIGlmIChjaS0+d2Rfbm90aWZ5KQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgdGhlcmUgYSBzdGF0ZSBjaGFuZ2UgdG8gc2VhcmNoIGZvciAqLwotICAgICAgICBpbnQgICAgICAgICBwb3J0LCBnY2hhbjsKLQotICAgICAgICBjaS0+d2Rfbm90aWZ5ID0gMDsgICAgICAgICAgLyogcmVzZXQgbm90aWZpY2F0aW9uICovCi0gICAgICAgIGZvciAoZ2NoYW4gPSAwOyBnY2hhbiA8IE1VU1lDQ19OQ0hBTlM7IGdjaGFuKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAocG9ydCA9IDA7IHBvcnQgPCBjaS0+bWF4X3BvcnQ7IHBvcnQrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtY2hfdCAgICAgICpjaCA9IGNpLT5wb3J0W3BvcnRdLmNoYW5bZ2NoYW5dOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjaCB8fCBjaS0+c3RhdGUgIT0gQ19SVU5OSU5HKSAgICAgIC8qIHN0YXRlIGNoYW5nZWQgd2hpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYWNxdWlyaW5nIHNlbWFwaG9yZSAqLwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoY2gtPnN0YXRlID09IFVQKS8qIGNoYW5uZWwgbXVzdCBiZSBzZXQgdXAgKi8KLSAgICAgICAgICAgICAgICB7Ci0jaWYgMAotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICBpZiAoMSB8fCBsb2dfbGV2ZWwgPj0gTE9HX01PTklUT1IpCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCIlczogd2F0Y2hkb2cgcmV2aXZpbmcgUG9ydCAlZCBDaGFubmVsICVkIFslZF0gc3RzICV4LyV4LCBzdGFydF9UWCAleCBmcmVlICV4IHN0YXJ0X1JYICV4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNpLT5kZXZuYW1lLCBjaC0+Y2hhbm51bSwgcG9ydCwgZ2NoYW4sIGNoLT5jaGFubnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+cC5zdGF0dXMsIGNoLT5zdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNoX3N0YXJ0X3R4LCBjaC0+dHhkX2ZyZWUsIGNoLT5jaF9zdGFydF9yeCk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAgICAgICAgICAgLyoqIGNoZWNrIGZvciBSWCByZXN0YXJ0IHJlcXVlc3QgKiovCi0gICAgICAgICAgICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaC0+Y2hfc3RhcnRfcnggJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChjaC0+c3RhdHVzICYgUlhfRU5BQkxFRCkpICAgICAgLyogcmVxdWlyZXMgc3RhcnQgb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZW5hYmxlZCBSWCAqLwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hfc3RhcnRfcnggPSAwOyAgICAvKiB3ZSBhcmUgcmVzdGFydGluZyBSWC4uLiAqLwotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgcHJfaW5mbygiKysgYzRfd2F0Y2hkb2coKSBDSEFOIFJYIEFDVElWQVRFOiBjaGFuICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hhbm51bSk7Ci0jZW5kaWYKLSNpZmRlZiBSTERfUlhBQ1RfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWRlc2MgKm1kOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBpbnQgIGhlcmViNCA9IDc7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZWI0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZWI0LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kID0gJmNoLT5tZHJbY2gtPnJ4aXhfaXJxX3Nydl07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIGM0X3dhdGNoZG9nWyVkXSBDSEFOIFJYIEFDVElWQVRFOiByeGl4X2lycV9zcnYgJWQsIG1kICVwIHN0cyAleCwgcnhwa3QgJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+cnhpeF9pcnFfc3J2LCBtZCwgbGUzMl90b19jcHUgKG1kLT5zdGF0dXMpLCBjaC0+cy5yeF9wYWNrZXRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX2R1bXBfcnhidWZmZXJfcmluZyAoY2gsIDEpOyAgICAgIC8qIFJMRCBERUJVRyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX3NlcnZfcmVxIChjaC0+dXAsIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9SWF9ESVJFQ1RJT04gfCBnY2hhbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgICAgICAgICAgIC8qKiBjaGVjayBmb3IgVFggcmVzdGFydCByZXF1ZXN0ICoqLwotICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2gtPmNoX3N0YXJ0X3R4ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2gtPnN0YXR1cyAmIFRYX0VOQUJMRUQpKSAgICAgIC8qIHJlcXVpcmVzIHN0YXJ0IG9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVuYWJsZWQgVFggKi8KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1kZXNjICptZDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbmQgbmV4dCB1bnByb2Nlc3NlZCBtZXNzYWdlLCB0aGVuIHNldCBUWCB0aHAgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIG11c3ljY191cGRhdGVfdHhfdGhwIChjaCk7Ci0KLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSAoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgbWQgPSBjaC0+dHhkX2lycV9zcnY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1kKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIi0tIGM0X3dhdGNoZG9nWyVkXTogV0FSTklORywgc3RhcnRpbmcgTlVMTCBtZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9pbmZvKCItLSAgIGNoYW4gJWQgdHhkX2lycV9zcnYgJXAgc3RzICV4IHVzcl9hZGQgJXAgc3RzICV4LCB0eHBrdCAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+Y2hhbm51bSwgY2gtPnR4ZF9pcnFfc3J2LCBsZTMyX3RvX2NwdSAoKHN0cnVjdCBtZGVzYyAqKSAoY2gtPnR4ZF9pcnFfc3J2KS0+c3RhdHVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT50eGRfdXNyX2FkZCwgbGUzMl90b19jcHUgKChzdHJ1Y3QgbWRlc2MgKikgKGNoLT50eGRfdXNyX2FkZCktPnN0YXR1cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC0+cy50eF9wYWNrZXRzKTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmNoLT5jaF90eGxvY2ssIGZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZC0+ZGF0YSAmJiAoKGxlMzJfdG9fY3B1IChtZC0+c3RhdHVzKSkgJiBNVVNZQ0NfVFhfT1dORUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotI2lmZGVmIFJMRF9UUkFOU19ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIGM0X3dhdGNoZG9nWyVkXSBDSEFOIFRYIEFDVElWQVRFOiBzdGFydF90eCAleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaGFubnVtLCBjaC0+Y2hfc3RhcnRfdHgpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNoX3N0YXJ0X3R4ID0gMDsgICAgICAgIC8qIHdlIGFyZSByZXN0YXJ0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRYLi4uICovCi0jaWYgMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZjaC0+Y2hfdHhsb2NrLCBmbGFncyk7ICAgLyogYWxsb3cgaW50ZXJydXB0cyBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNlcnZpY2UgcmVxdWVzdCAqLwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzeWNjX3NlcnZfcmVxIChjaC0+dXAsIFNSX0NIQU5ORUxfQUNUSVZBVEUgfCBTUl9UWF9ESVJFQ1RJT04gfCBnY2hhbik7Ci0jaWZkZWYgUkxEX1RSQU5TX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDEgfHwgbG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nX2xldmVsID49IExPR19NT05JVE9SKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIisrIFNBQ0tbUCVkL0MlZF0gYWNrJ2QsIGNvbnRpbnVpbmcuLi5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPnVwLT5wb3J0bnVtLCBjaC0+Y2hhbm51bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQogICAgIGNpLT53ZF9ub3RpZnkgPSAwOwotI2VuZGlmCi0jaWYgMAotICAgIFNEX1NFTV9HSVZFICgmY2ktPnNlbV93ZGJ1c3kpOy8qIHJlbGVhc2UgcGVyLWJvYXJkIGhvbGQgKi8KLSNlbmRpZgogfQogCiAKQEAgLTY5MCw5ICs1NTgsNyBAQAogICAgICAgICBmb3IgKHBvcnRudW0gPSAwOyBwb3J0bnVtIDwgY2ktPm1heF9wb3J0OyBwb3J0bnVtKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHBpID0gJmNpLT5wb3J0W3BvcnRudW1dOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSw0MSkKICAgICAgICAgICAgIGM0X3dxX3BvcnRfY2xlYW51cCAocGkpOwotI2VuZGlmCiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTVVTWUNDX05DSEFOUzsgaisrKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChwaS0+Y2hhbltqXSkKQEAgLTcwMCwxMCArNTY2LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE9TX2tmcmVlIChwaS0+cmVncmFtX3NhdmVkKTsKICAgICAgICAgfQotI2lmIDAKLSAgICAgICAgLyogb2Jzb2xldGUgLSB3YXRjaGRvZyBpcyBub3cgc3RhdGljIHcvaW4gY2lfdCAqLwotICAgICAgICBPU19mcmVlX3dhdGNoZG9nIChjaS0+d2QpOwotI2VuZGlmCiAgICAgICAgIE9TX2tmcmVlIChjaS0+aXFkX3Bfc2F2ZWQpOwogICAgICAgICBPU19rZnJlZSAoY2kpOwogICAgICAgICBjaSA9IG5leHQ7ICAgICAgICAgICAgICAgICAgLyogY2xlYW51cCBuZXh0IGJvYXJkLCBpZiBhbnkgKi8KQEAgLTExNDUsNyArMTAwNyw2IEBACiAgICAgICAgIHJldHVybiBFQlVTWTsgICAgICAgICAgICAgICAvKiBncm91cCBuZWVkcyBpbml0aWFsaXphdGlvbiBvbmx5IGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZmlyc3QgY2hhbm5lbCBvZiBhIGdyb3VwICovCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAgICAgewogICAgICAgICBzdGF0dXNfdCAgICByZXQ7CiAKQEAgLTExNTMsNyArMTAxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3b3JrcXVldWVfc3RydWN0ICovCiAgICAgICAgICAgICByZXR1cm4gKHJldCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBpbml0X2NvbWV0IChjaSwgcGktPmNvbWV0YmFzZSwgcHAtPnBvcnRfbW9kZSwgMSAvKiBjbG9ja21hc3RlciA9PSB0cnVlICovICwgcHAtPnBvcnRQKTsKICAgICBjbGNrID0gcGNpX3JlYWRfMzIgKCh1X2ludDMyX3QgKikgJmNpLT5jcGxkYmFzZS0+bWNsaykgJiBQTUNDNF9DUExEX01DTEtfTUFTSzsKQEAgLTEyNjksMTQgKzExMjksMTIgQEAKICAgICBzcGluX2xvY2tfaW5pdCAoJmNoLT5jaF9yeGxvY2spOwogICAgIHNwaW5fbG9ja19pbml0ICgmY2gtPmNoX3R4bG9jayk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsNDEpCiAgICAgewogICAgICAgICBzdGF0dXNfdCAgICByZXQ7CiAKICAgICAgICAgaWYgKChyZXQgPSBjNF93a19jaGFuX2luaXQgKHBpLCBjaCkpKQogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9Ci0jZW5kaWYKIAogICAgIC8qIHNhdmUgb2ZmIGludGVyZmFjZSBhc3NpZ25tZW50cyB3aGljaCBib3VuZCBhIGJvYXJkICovCiAgICAgaWYgKGNpLT5maXJzdF9pZiA9PSAwKSAgICAgICAgICAvKiBmaXJzdCBjaGFubmVsIHJlZ2lzdGVyZWQgaXMgYXNzdW1lZCB0bwpAQCAtMTcwNSwzMSArMTU2MywyMyBAQAogCiAgICAgaWYgKGNpLT5maXJzdF9pZikKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChjaS0+Zmlyc3RfaWYpOwotI2Vsc2UKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogICAgICAgICAgICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGNpLT5maXJzdF9pZjsKICAgICAgICAgICAgIG5wID0gKGNoYXIgKikgZGV2LT5uYW1lOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgc3RybmNweSAoYmlwLT5maXJzdF9pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHN0cmNweSAoYmlwLT5maXJzdF9pbmFtZSwgIjxOVUxMPiIpOwogICAgIGlmIChjaS0+bGFzdF9pZikKICAgICB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChjaS0+bGFzdF9pZik7Ci0jZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAgICAgICAgICAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgY2ktPmxhc3RfaWY7CiAgICAgICAgICAgICBucCA9IChjaGFyICopIGRldi0+bmFtZTsKICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIHN0cm5jcHkgKGJpcC0+bGFzdF9pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHN0cmNweSAoYmlwLT5sYXN0X2luYW1lLCAiPE5VTEw+Iik7CkBAIC0xNzYzLDExICsxNjEzLDcgQEAKICAgICBpZiAoIShkZXYgPSBnZXR1c2VyYnljaGFuIChpaXAtPmNoYW5udW0pKSkKICAgICAgICAgcmV0dXJuIEVOT0VOVDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgIG5wID0gKGNoYXIgKikgaGRsY190b19uYW1lIChkZXZfdG9faGRsYyAoZGV2KSk7Ci0jZWxzZQogICAgIG5wID0gZGV2LT5uYW1lOwotI2VuZGlmCiAgICAgc3RybmNweSAoaWlwLT5pbmFtZSwgbnAsIENITk1fU1RSTEVOIC0gMSk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xODI2LDExICsxNjcyLDcgQEAKICAgICBwY2lfd3JpdGVfMzIgKCh1X2ludDMyX3QgKikgJmNpLT5yZWctPmdsY2QsIEdDRF9NQUdJQyB8IE1VU1lDQ19HQ0RfSU5UQl9ESVNBQkxFKTsKICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkKLSAgICByZXR1cm47Ci0jZWxzZQogICAgIHJldHVybiBJUlFfUkVUVkFMIChoYW5kbGVkKTsKLSNlbmRpZgogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeHQxZTEvc2JlY29tX2lubGluZV9saW51eC5oIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKaW5kZXggYzY1MTcyZC4uNWE3MmNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4dDFlMS9zYmVjb21faW5saW5lX2xpbnV4LmgKQEAgLTQ4LDkgKzQ4LDYgQEAKICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE4KQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhIGRlZmluZWQoX19TTVBfXykKICNkZWZpbmUgX19TTVBfXwogI2VuZGlmCkBAIC02MCwxMiArNTcsOCBAQAogCiAjaWZkZWYgTU9EVUxFCiAjaWZkZWYgTU9EVkVSU0lPTlMKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDxsaW51eC9tb2R2ZXJzaW9ucy5oPgotI2Vsc2UKICNpbmNsdWRlIDxjb25maWcvbW9kdmVyc2lvbnMuaD4KICNlbmRpZgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjZW5kaWYKICNlbmRpZgpAQCAtMjYwLDExICsyNTMsNyBAQAogc3RydWN0IHdhdGNoZG9nCiB7CiAgICAgc3RydWN0IHRpbWVyX2xpc3QgaDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICBzdHJ1Y3QgdHFfc3RydWN0IHRxOwotI2Vsc2UKICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLSNlbmRpZgogICAgIHZvaWQgICAgICAgKnNvZnRjOwogICAgIHZvaWQgICAgICAgICgqZnVuYykgKHZvaWQgKnNvZnRjKTsKICAgICBpbnQgICAgICAgICB0aWNrczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV92ZmU4eC5jCmluZGV4IGU2MWZkYmEuLmQ4N2Q1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fdmZlOHguYwpAQCAtNjQ0LDE3ICs2NDQsMTAgQEAKIAkJaWYgKCFheGlkKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJYXhpbyA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZyksCi0JCQkJR0ZQX0FUT01JQyk7Ci0JCWlmICghYXhpbykKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihheGlvLCAodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKLQkJCXNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZykpKSB7Ci0JCQlrZnJlZShheGlvKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9CisJCWF4aW8gPSBtZW1kdXBfdXNlcigodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKTsKKwkJaWYgKElTX0VSUihheGlvKSkKKwkJCXJldHVybiBQVFJfRVJSKGF4aW8pOwogCiAJCXZmZV9jb25maWdfYXhpKE9VVFBVVF8xLCBheGlkLCBheGlvKTsKIAkJdmZlX2F4aV9vdXRwdXRfY29uZmlnKGF4aW8pOwpAQCAtNjY5LDE3ICs2NjIsMTAgQEAKIAkJaWYgKCFheGlkKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJYXhpbyA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmZlX2NtZF9heGlfb3V0cHV0X2NvbmZpZyksCi0JCQkJR0ZQX0FUT01JQyk7Ci0JCWlmICghYXhpbykKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWlmIChjb3B5X2Zyb21fdXNlcihheGlvLCAodm9pZCBfX3VzZXIgKikodmZlY21kLnZhbHVlKSwKLQkJCQlzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKSkgewotCQkJa2ZyZWUoYXhpbyk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQorCQlheGlvID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCisJCQkJICAgc2l6ZW9mKHN0cnVjdCB2ZmVfY21kX2F4aV9vdXRwdXRfY29uZmlnKSk7CisJCWlmIChJU19FUlIoYXhpbykpCisJCQlyZXR1cm4gUFRSX0VSUihheGlvKTsKIAogCQl2ZmVfY29uZmlnX2F4aShPVVRQVVRfMiwgYXhpZCwgYXhpbyk7CiAKQEAgLTY5NCwxNyArNjgwLDEwIEBACiAJCWlmICghYXhpZCkKIAkJCXJldHVybiAtRUZBVUxUOwogCi0JCWF4aW8gPQotCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpLAotCQkJCUdGUF9BVE9NSUMpOwotCQlpZiAoIWF4aW8pCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoYXhpbywgKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCi0JCQlzaXplb2Yoc3RydWN0IHZmZV9jbWRfYXhpX291dHB1dF9jb25maWcpKSkgewotCQkJa2ZyZWUoYXhpbyk7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQorCQlheGlvID0gbWVtZHVwX3VzZXIoKHZvaWQgX191c2VyICopKHZmZWNtZC52YWx1ZSksCisJCQkJICAgc2l6ZW9mKHN0cnVjdCB2ZmVfY21kX2F4aV9vdXRwdXRfY29uZmlnKSk7CisJCWlmIChJU19FUlIoYXhpbykpCisJCQlyZXR1cm4gUFRSX0VSUihheGlvKTsKIAogCQl2ZmVfY29uZmlnX2F4aShPVVRQVVRfMV9BTkRfMiwKIAkJCWF4aWQsIGF4aW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9wbWVtLmMKaW5kZXggNjM4NzM2NS4uN2Q2YmJhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcG1lbS5jCkBAIC0yNCw4ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCiAjZGVmaW5lIFBNRU1fTUFYX0RFVklDRVMgMTAKQEAgLTE3NSw3ICsxNzUsNyBAQAogc3RhdGljIGludCBwbWVtX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIGxvbmcgcG1lbV9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBtZW1fZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1lbV9mb3BzID0gewogCS5yZWxlYXNlID0gcG1lbV9yZWxlYXNlLAogCS5tbWFwID0gcG1lbV9tbWFwLAogCS5vcGVuID0gcG1lbV9vcGVuLApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlpZiAodW5saWtlbHkoIWZpbGUtPnByaXZhdGVfZGF0YSkpCiAJCXJldHVybiAwOwotCWRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmICh1bmxpa2VseShkYXRhLT5pbmRleCA8IDApKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm4gMDsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoUE1FTV9GTEFHU19NQVNURVJNQVAgJiBkYXRhLT5mbGFncykKIAkJcmV0dXJuIDE7CiAJbWFzdGVyX2ZpbGUgPSBmZ2V0X2xpZ2h0KGRhdGEtPm1hc3Rlcl9mZCwgJnB1dF9uZWVkZWQpOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAKIHN0YXRpYyBpbnQgcG1lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwbWVtX2RhdGEgKmRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBwbWVtX3JlZ2lvbl9ub2RlICpyZWdpb25fbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbHQsICplbHQyOwogCWludCBpZCA9IGdldF9pZChmaWxlKSwgcmV0ID0gMDsKQEAgLTM5OSw4ICszOTksOCBAQAogCURMT0coIm9yZGVyICVseFxuIiwgb3JkZXIpOwogCiAJLyogbG9vayB0aHJvdWdoIHRoZSBiaXRtYXA6Ci0JICogCWlmIHlvdSBmaW5kIGEgZnJlZSBzbG90IG9mIHRoZSBjb3JyZWN0IG9yZGVyIHVzZSBpdAotCSAqIAlvdGhlcndpc2UsIHVzZSB0aGUgYmVzdCBmaXQgKHNtYWxsZXN0IHdpdGggc2l6ZSA+IG9yZGVyKSBzbG90CisJICoJaWYgeW91IGZpbmQgYSBmcmVlIHNsb3Qgb2YgdGhlIGNvcnJlY3Qgb3JkZXIgdXNlIGl0CisJICoJb3RoZXJ3aXNlLCB1c2UgdGhlIGJlc3QgZml0IChzbWFsbGVzdCB3aXRoIHNpemUgPiBvcmRlcikgc2xvdAogCSAqLwogCXdoaWxlIChjdXJyIDwgZW5kKSB7CiAJCWlmIChQTUVNX0lTX0ZSRUUoaWQsIGN1cnIpKSB7CkBAIC00MjYsOCArNDI2LDggQEAKIAl9CiAKIAkvKiBub3cgcGFydGl0aW9uIHRoZSBiZXN0IGZpdDoKLQkgKiAJc3BsaXQgdGhlIHNsb3QgaW50byAyIGJ1ZGRpZXMgb2Ygb3JkZXIgLSAxCi0JICogCXJlcGVhdCB1bnRpbCB0aGUgc2xvdCBpcyBvZiB0aGUgY29ycmVjdCBvcmRlcgorCSAqCXNwbGl0IHRoZSBzbG90IGludG8gMiBidWRkaWVzIG9mIG9yZGVyIC0gMQorCSAqCXJlcGVhdCB1bnRpbCB0aGUgc2xvdCBpcyBvZiB0aGUgY29ycmVjdCBvcmRlcgogCSAqLwogCXdoaWxlIChQTUVNX09SREVSKGlkLCBiZXN0X2ZpdCkgPiAodW5zaWduZWQgY2hhcilvcmRlcikgewogCQlpbnQgYnVkZHk7CkBAIC01OTEsNyArNTkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJZG93bl93cml0ZSgmZGF0YS0+c2VtKTsKIAkvKiBjaGVjayB0aGlzIGZpbGUgaXNuJ3QgYWxyZWFkeSBtbWFwZWQsIGZvciBzdWJtYXBzIGNoZWNrIHRoaXMgZmlsZQogCSAqIGhhcyBuZXZlciBiZWVuIG1tYXBlZCAqLwpAQCAtNjkwLDcgKzY5MCw3IEBACiAjZW5kaWYKIAkJcmV0dXJuIC0xOwogCX0KLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlkb3duX3JlYWQoJmRhdGEtPnNlbSk7CiAJaWYgKGRhdGEtPnZtYSkgewogCQkqc3RhcnQgPSBkYXRhLT52bWEtPnZtX3N0YXJ0OwpAQCAtNzEyLDcgKzcxMiw3IEBACiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm4gLTE7CiAKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoZGF0YS0+aW5kZXggPT0gLTEpIHsKICNpZiBQTUVNX0RFQlVHCiAJCXByaW50ayhLRVJOX0lORk8gInBtZW06IHJlcXVlc3RlZCBwbWVtIGRhdGEgZnJvbSBmaWxlIHdpdGggbm8gIgpAQCAtNzY2LDcgKzc2Niw3IEBACiAJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkpCiAJCXJldHVybjsKIAlpZCA9IGdldF9pZChmaWxlKTsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKICNpZiBQTUVNX0RFQlVHCiAJZG93bl93cml0ZSgmZGF0YS0+c2VtKTsKIAlpZiAoZGF0YS0+cmVmID09IDApIHsKQEAgLTc5Myw3ICs3OTMsNyBAQAogCQlyZXR1cm47CiAKIAlpZCA9IGdldF9pZChmaWxlKTsKLQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoIXBtZW1baWRdLmNhY2hlZCkKIAkJcmV0dXJuOwogCkBAIC04MjIsNyArODIyLDcgQEAKIAogc3RhdGljIGludCBwbWVtX2Nvbm5lY3QodW5zaWduZWQgbG9uZyBjb25uZWN0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcG1lbV9kYXRhICpzcmNfZGF0YTsKIAlzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGU7CiAJaW50IHJldCA9IDAsIHB1dF9uZWVkZWQ7CkBAIC04NDIsNyArODQyLDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfYmFkX2ZpbGU7CiAJfQotCXNyY19kYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilzcmNfZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNyY19kYXRhID0gc3JjX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChoYXNfYWxsb2NhdGlvbihmaWxlKSAmJiAoZGF0YS0+aW5kZXggIT0gc3JjX2RhdGEtPmluZGV4KSkgewogCQlwcmludGsoS0VSTl9JTkZPICJwbWVtOiBmaWxlIGlzIGFscmVhZHkgbWFwcGVkIGJ1dCBkb2Vzbid0ICIKQEAgLTkyOSw3ICs5MjksNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbHQsICplbHQyOwogCWludCBpZCA9IGdldF9pZChmaWxlKTsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCS8qIHBtZW0gcmVnaW9uIG11c3QgYmUgYWxpZ25lZCBvbiBhIHBhZ2UgYm91bmRyeSAqLwogCWlmICh1bmxpa2VseSghUE1FTV9JU19QQUdFX0FMSUdORUQocmVnaW9uLT5vZmZzZXQpIHx8CkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCiBzdGF0aWMgdm9pZCBwbWVtX2dldF9zaXplKHN0cnVjdCBwbWVtX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBtZW1fZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgaWQgPSBnZXRfaWQoZmlsZSk7CiAKIAlpZiAoIWhhc19hbGxvY2F0aW9uKGZpbGUpKSB7CkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCQkJCXJlZ2lvbi5vZmZzZXQgPSAwOwogCQkJCXJlZ2lvbi5sZW4gPSAwOwogCQkJfSBlbHNlIHsKLQkJCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQkJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJCQlyZWdpb24ub2Zmc2V0ID0gcG1lbV9zdGFydF9hZGRyKGlkLCBkYXRhKTsKIAkJCQlyZWdpb24ubGVuID0gcG1lbV9sZW4oaWQsIGRhdGEpOwogCQkJfQpAQCAtMTA5OSw3ICsxMDk5LDcgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVnaW9uLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJCQlzaXplb2Yoc3RydWN0IHBtZW1fcmVnaW9uKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJcmV0dXJuIHBtZW1fcmVtYXAoJnJlZ2lvbiwgZmlsZSwgUE1FTV9NQVApOwogCQl9CiAJCWJyZWFrOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVnaW9uLCAodm9pZCBfX3VzZXIgKilhcmcsCiAJCQkJCQlzaXplb2Yoc3RydWN0IHBtZW1fcmVnaW9uKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkYXRhID0gKHN0cnVjdCBwbWVtX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJCQlkYXRhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJcmV0dXJuIHBtZW1fcmVtYXAoJnJlZ2lvbiwgZmlsZSwgUE1FTV9VTk1BUCk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTEzOSw3ICsxMTM5LDcgQEAKIAkJewogCQkJaWYgKGhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQkJZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJCWRhdGEtPmluZGV4ID0gcG1lbV9hbGxvY2F0ZShpZCwgYXJnKTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMzI5M2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1jb25maWcgRFQzMTU1Ci0JdHJpc3RhdGUgIkRUMzE1NSBEaWdpdGl6ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2ZjIxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1vYmotJChDT05GSUdfRFQzMTU1KQkrPSBkdDMxNTUubwotZHQzMTU1LW9ianMgOj0JXAotCQlkdDMxNTVfZHJ2Lm8JXAotCQlkdDMxNTVfaXNyLm8JXAotCQlkdDMxNTVfaW8ubwlcCi0JCWFsbG9jYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWEzYjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotVE9ETzoKLQktIGZpeCBjaGVja3BhdGNoLnBsIGlzc3VlcwotCS0gcmVtb3ZlIG9sZCBrZXJuZWwgc3VwcG9ydCwgaXQgaXMgbm90IG5lZWRlZAotCS0gY29udmVydCB0byBwcm9wZXIgUENJIGRldmljZSBBUEkKLQktIGZpeCBzcGFyc2Ugd2FybmluZ3MKLQktIGF1ZGl0IGZvciBjb3JyZWN0IHN1YnN5c3RlbSBpbnRlcmFjdGlvbgotCS0gcmV2aWV3IHJldmlldyByZXZpZXchCi0KLVBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLWFuZCBTY290dCBTbWVkbGV5IDxzc0BhYW8uZ292LmF1PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTcwMGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLlJFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLQotVGhlIGFsbG9jYXRvciBzaG93biBoZXJlICBleHBsb2l0cyBoaWdoIG1lbW9yeS4gVGhpcyBkb2N1bWVudCBleHBsYWlucwotaG93ICBhIHVzZXIgY2FuICBkZWFsICAgd2l0aCBkcml2ZXJzIHVzZXMgICB0aGlzICBhbGxvY2F0b3IgYW5kIGhvdyAgYQotcHJvZ3JhbW1lciBjYW4gbGluayBpbiB0aGUgbW9kdWxlLgotCi1UaGUgbW9kdWxlIGlzIGJlaW5nIHVzZWQgYnkgbXkgcHhjIGFuZCBweGRydiBkZXZpY2UgZHJpdmVycyAoYXMgd2VsbCBhcwotb3RoZXIgb25lcyksIGF2YWlsYWJsZSBmcm9tIGZ0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIGFuZAotZnRwLmxpbnV4Lml0L3B1Yi9QZW9wbGUvUnViaW5pCi0KLQlVc2VyJ3MgbWFudWFsCi0JPT09PT09PT09PT09PQotCi0KLU9uZSBvZiB0aGUgbW9zdCBjb21wZWxsaW5nIHByb2JsZW1zIHdpdGggYW55IERNQS1jYXBhYmxlIGRldmljZSBpcyB0aGUKLWFsbG9jYXRpb24gIG9mIGEgc3VpdGFibGUgIG1lbW9yeSBidWZmZXIuIFRoZSAiYWxsb2NhdG9yIiBtb2R1bGUgdHJpZXMKLXRvIGRlYWwgd2l0aCAgdGhlIHByb2JsZW0gaW4gIGEgY2xlYW4gd2F5LiAgVGhlIG1vZHVsZSBpcyAgYWJsZSB0byB1c2UKLWhpZ2ggICBtZW1vcnkgIChhYm92ZSB0aGUgIG9uZSAgIHVzZWQgaW4gIG5vcm1hbCAgIG9wZXJhdGlvbikgIGZvciBETUEKLWFsbG9jYXRpb24uCi0KLVRvIHByZXZlbnQgIHRoZSAga2VybmVsIGZvciB1c2luZyAgIGhpZ2ggbWVtb3J5LCAgc28gIHRoYXQgaXQgIHJlbWFpbnMKLWF2YWlsYWJsZSBmb3IgIERNQSwgeW91IHNob3VsZCAgcGFzcyBhICBjb21tYW5kICBsaW5lIGFyZ3VtZW50IHRvICB0aGUKLWtlcm5lbC4gIENvbW1hbmQgbGluZSBhcmd1bWVudHMgIGNhbiBiZSBwYXNzZWQgdG8gIExpbG8sIHRvIExvYWRsaW4gb3IKLXRvIHdoaWNoZXZlciBsb2FkZXIgIHlvdSBhcmUgdXNpbmcgICh1bmxlc3MgaXQncyB2ZXJ5IHBvb3IgaW4gZGVzaWduKS4KLUZvciBMaWxvLCBlaXRoZXIgdXNlICAiYXBwZW5kPSIgaW4gIC9ldGMvbGlsby5jb25mIG9yIGFkZCAgY29tbWFuZGxpbmUKLWFyZ3VtZW50cyB0byB0aGUgIGludGVyYWN0aXZlIHByb21wdC4gRm9yICBleGFtcGxlLCBJIGhhdmUgYSAzMk1CICBib3gKLWFuZCByZXNlcnZlIHR3byBtZWdzIGZvciBETUE6Ci0KLUluIGxpbG8uY29uZjoKLQlpbWFnZSA9IC96SW1hZ2UKLQlsYWJlbCA9IGxpbnV4Ci0JYXBwZW5kID0gIm1lbT0zME0iCi0KLU9yLCBpbnRlcmFjdGl2ZWx5OgotCUxJTE86IGxpbnV4IG1lbT0zME0KLQotT25jZSAgdGhlIGtlcm5lbCBpcyBib290ZWQgIHdpdGggdGhlICByaWdodCBjb21tYW5kLWxpbmUgYXJndW1lbnQsIGFueQotZHJpdmVyICBsaW5rZWQgICB3aXRoICB0aGUgIGFsbG9jYXRvciAgIG1vZHVsZSAgd2lsbCAgYmUgYWJsZSAgIHRvIGdldAotRE1BLWNhcGFibGUgbWVtb3J5IHdpdGhvdXQgIG11Y2ggIHRyb3VibGUgKHVubGVzcyB0aGUgIHZhcmlvdXMgZHJpdmVycwotbmVlZCBtb3JlIG1lbW9yeSB0aGFuIGF2YWlsYWJsZSkuCi0KLVRoZSBtb2R1bGUgaW1wbGVtZW50cyBhbiBhbGxvYy9mcmVlICBtZWNoYW5pc20sICBzbyB0aGF0IGl0IGNhbiAgc2VydmUKLW11bHRpcGxlIGRyaXZlcnMgIGF0IHRoZSAgc2FtZSB0aW1lLiBOb3RlICBob3dldmVyIHRoYXQgIHRoZSBhbGxvY2F0b3IKLXVzZXMgYWxsIG9mICBoaWdoIG1lbW9yeSBhbmQgYXNzdW1lcyB0byAgYmUgdGhlIG9ubHkgcGllY2Ugb2Ygc29mdHdhcmUKLXVzaW5nIHN1Y2ggbWVtb3J5LgotCi0KLQlQcm9ncmFtbWVyJ3MgbWFudWFsCi0JPT09PT09PT09PT09PT09PT09PQotCi1UaGUgYWxsb2NhdG9yLCAgYXMgIHJlbGVhc2VkLCBpcyBkZXNpZ25lZCAgdG8gIGJlIGxpbmtlZCAgdG8gIGEgZGV2aWNlCi1kcml2ZXIuICBJbiB0aGlzICBjYXNlLCB0aGUgZHJpdmVyICBtdXN0IGNhbGwgYWxsb2NhdG9yX2luaXQoKSAgYmVmb3JlCi11c2luZyAgIHRoZSAgYWxsb2NhdG9yICAgYW5kICBtdXN0ICBjYWxsICAgYWxsb2NhdG9yX2NsZWFudXAoKSAgYmVmb3JlCi11bmxvYWRpbmcuICBUaGlzIGlzICB1c3VhbGx5ICBkb25lICAgZnJvbSB3aXRoaW4gIGluaXRfbW9kdWxlKCkgICAgYW5kCi1jbGVhbnVwX21vZHVsZSgpLiBJZiB0aGUgYWxsb2NhdG9yIGlzIGxpbmtlZCB0byAgYSBkcml2ZXIsIGl0IHdvbid0IGJlCi1wb3NzaWJsZSBmb3Igc2V2ZXJhbCBkcml2ZXJzIHRvIGFsbG9jYXRlIGhpZ2ggRE1BIG1lbW9yeSwgYXMgZXhwbGFpbmVkCi1hYm92ZS4KLQotSXQgaXMgcG9zc2libGUsIG9uIHRoZSBvdGhlciBoYW5kLCB0byBjb21waWxlIHRoZSBtb2R1bGUgYXMgYSBzdGFuZGFsb25lCi1tb2R1bGUsIHNvIHRoYXQgc2V2ZXJhbCBtb2R1bGVzIGNhbiByZWx5IG9uIHRoZSBhbGxvY2F0b3IgZm9yIHRoZXkgRE1BCi1idWZmZXJzLiBUbyBjb21waWxlIHRoZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgZG8gdGhlCi1mb2xsb3dpbmcgaW4gdGhpcyBkaXJlY3RvcnkgKG9yIHByb3ZpZGUgYSBzdWl0YWJsZSBNYWtlZmlsZSwgb3IgZWRpdAotdGhlIHNvdXJjZSBjb2RlKToKLQotCW1ha2UgYWxsb2NhdG9yLm8gQ0M9ImdjYyAtRGFsbG9jYXRvcl9pbml0PWluaXRfbW9kdWxlIC1EYWxsb2NhdG9yX2NsZWFudXA9Y2xlYW51cF9tb2R1bGUgLWluY2x1ZGUgL3Vzci9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIgotCi1UaGUgcHJldmlvdXMgY29tbWFuZGxpbmUgIHRlbGxzICAgdG8gaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ICBpbiAgdGhlCi1maXJzdCBwbGFjZSwgIGFuZCB0byByZW5hbWUgdGhlIGluaXQgIGFuZCBjbGVhbnVwIGZ1bmN0aW9uIHRvIHRoZSBvbmVzCi1uZWVkZWQgZm9yICBtb2R1bGUgbG9hZGluZyBhbmQgIHVubG9hZGluZy4gIERyaXZlcnMgdXNpbmcgYSBzdGFuZGFsb25lCi1hbGxvY2F0b3Igd29uJ3QgbmVlZCB0byBjYWxsIGFsbG9jYXRvcl9pbml0KCkgbm9yIGFsbG9jYXRvcl9jbGVhbnVwKCkuCi0KLVRoZSBhbGxvY2F0b3IgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyAoZGVjbGFyZWQgaW4gYWxsb2NhdG9yLmgpOgotCi0gICB1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEgKHVuc2lnbmVkIGxvbmcga2lsb2J5dGVzLAotCQkJCQkgaW50IHByaW9yaXR5KTsKLQotCVRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBoeXNpY2FsIGFkZHJlc3MsIG92ZXIgaGlnaF9tZW1vcnksCi0Jd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYXJlYSBvZiBhdCBsZWFzdCAia2lsb2J5dGVzIiBraWxvYnl0ZXMuCi0JVGhlIGFyZWEgd2lsbCBiZSBvd25lZCBieSB0aGUgbW9kdWxlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgotCVRoZSByZXR1cm5lZCBhZGRyZXNzIGNhbiBiZSBwYXNzZWQgdG8gZGV2aWNlIGJvYXJkcywgdG8gaW5zdHJ1Y3QKLQl0aGVpciBETUEgY29udHJvbGxlcnMsIHZpYSBwaHlzX3RvX2J1cygpLiBUaGUgYWRkcmVzcyBjYW4gYmUgdXNlZAotCWJ5IEMgY29kZSBhZnRlciB2cmVtYXAoKS9pb3JlbWFwKCkuIFRoZSAicHJpb3JpdHkiIGFyZ3VtZW50IHNob3VsZAotCWJlIEdGUF9LRVJORUwgb3IgR0ZQX0FUT01JQywgYWNjb3JkaW5nIHRvIHRoZSBjb250ZXh0IG9mIHRoZQotCWNhbGxlcjsgaXQgaXMgdXNlZCB0byBjYWxsIGttYWxsb2MoKSwgYXMgdGhlIGFsbG9jYXRvciBtdXN0IGtlZXAKLQl0cmFjayBvZiBhbnkgcmVnaW9uIGl0IGdpdmVzIGF3YXkuIEluIGNhc2Ugb2YgZXJyb3IgdGhlIGZ1bmN0aW9uCi0JcmV0dXJucyAwLCBhbmQgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpc3N1ZSBhIC1FTk9NRU0gZXJyb3IuCi0KLQotICAgdm9pZCBhbGxvY2F0b3JfZnJlZV9kbWEgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Ci0KLQlUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIHRoZSBwcmV2aW91cyBvbmUuIElmIGEgZHJpdmVyCi0JZG9lc24ndCBmcmVlIHRoZSBETUEgbWVtb3J5IGl0IGFsbG9jYXRlZCwgdGhlIGFsbG9jYXRvciB3aWxsCi0JY29uc2lkZXIgc3VjaCBtZW1vcnkgYXMgYnVzeS4gTm90ZSwgaG93ZXZlciwgdGhhdAotCWFsbG9jYXRvcl9jbGVhbnVwKCkgY2FsbHMga2ZyZWUoKSBvbiBldmVyeSByZWdpb24gaXQgcmVjbGFpbWVkLAotCXNvIHRoYXQgYSBkcml2ZXIgd2l0aCB0aGUgYWxsb2NhdG9yIGxpbmtlZCBpbiBjYW4gYXZvaWQgY2FsbGluZwotCWFsbG9jYXRvcl9mcmVlX2RtYSgpIGF0IHVubG9hZCB0aW1lLgotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMzk0N2IuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKgotICogYWxsb2NhdG9yLmMgLS0gYWxsb2NhdGUgYWZ0ZXIgaGlnaF9tZW1vcnksIGlmIGF2YWlsYWJsZQotICoKLSAqIE5PVEU6IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gbXkgcHJldmlvdXMgYWxsb2NhdG9yLCB0aGUgb25lIHRoYXQKLSAqICAgICAgIGFzc2VtYmxlcyBwYWdlcywgd2hpY2ggcmV2ZWFsZWQgaXRzZWxmIGJvdGggc2xvdyBhbmQgdW5yZWxpYWJsZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggICBydWJpbmlAbGludXguaXQgKEFsZXNzYW5kcm8gUnViaW5pKQotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlCSAgICAgIFByb2dyYW1tZXIgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDAyLUF1Zy0yMDAyIE5KQyAgICAgICAgIGFsbG9jYXRvciBub3cgc3RlcHMgaW4gMU1CIGluY3JlbWVudHMsIHJhdGhlcgotCQkJICB0aGFuIGRvdWJsaW5nIGl0cyBzaXplIGVhY2ggdGltZS4KLQkJCSAgQWxzbywgYWxsb2NhdG9yX2luaXQodTMyICopIG5vdyByZXR1cm5zCi0JCQkgIChpbiB0aGUgZmlyc3QgYXJnKSB0aGUgc2l6ZSBvZiB0aGUgZnJlZQotCQkJICBzcGFjZS4gIFRoaXMgaXMgbm8gbG9uZ2VyIGNvbnNpc3RlbnQgd2l0aAotCQkJICB1c2luZyB0aGUgYWxsb2NhdG9yIGFzIGEgbW9kdWxlLCBhbmQgc29tZSBjaGFuZ2VzCi0JCQkgIG1heSBiZSBuZWNlc3NhcnkgZm9yIHRoYXQgcHVycG9zZS4gIFRoaXMgd2FzCi0JCQkgIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgRFQzMTU1IGRyaXZlciwgaW4KLQkJCSAgc3RhbmQgYWxvbmUgbW9kZSBvbmx5ISEhCi0gIDI2LU9jdC0yMDA5IFNTCSAgUG9ydCB0byAyLjYuMzAga2VybmVsLgotICovCi0KLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jICBkZWZpbmUgX19LRVJORUxfXwotI2VuZGlmCi0jaWZuZGVmIE1PRFVMRQotIyAgZGVmaW5lIE1PRFVMRQotI2VuZGlmCi0KLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CS8qIFBBR0VfQUxJR04oKSAqLwotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2luY2x1ZGUgImFsbG9jYXRvci5oIgotCi0vKiNkZWZpbmUgQUxMX0RFQlVHKi8KLSNkZWZpbmUgQUxMX01TRyAiYWxsb2NhdG9yOiAiCi0KLSN1bmRlZiBQREVCVUcgICAgICAgICAgICAgLyogdW5kZWYgaXQsIGp1c3QgaW4gY2FzZSAqLwotI2lmZGVmIEFMTF9ERUJVRwotIyAgZGVmaW5lIF9fc3RhdGljCi0jICBkZWZpbmUgRFVNUF9MSVNUKCkgZHVtcF9saXN0KCkKLSMgIGlmZGVmIF9fS0VSTkVMX18KLSAgICAgLyogVGhpcyBvbmUgaWYgZGVidWdnaW5nIGlzIG9uLCBhbmQga2VybmVsIHNwYWNlICovCi0jICAgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBBTExfTVNHIGZtdCwgIyMgYXJncykKLSMgIGVsc2UKLSAgICAgLyogVGhpcyBvbmUgZm9yIHVzZXIgc3BhY2UgKi8KLSMgICAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIGZwcmludGYoc3RkZXJyLCBmbXQsICMjIGFyZ3MpCi0jICBlbmRpZgotI2Vsc2UKLSMgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSAvKiBub3QgZGVidWdnaW5nOiBub3RoaW5nICovCi0jICBkZWZpbmUgRFVNUF9MSVNUKCkKLSMgIGRlZmluZSBfX3N0YXRpYyBzdGF0aWMKLSNlbmRpZgotCi0jdW5kZWYgUERFQlVHRwotI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikKLS8qI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikgcHJpbnRrKCBLRVJOX0RFQlVHIEFMTF9NU0cgZm10LCAjIyBhcmdzKSovCi0KLQotc3RhdGljIGludCBhbGxvY2F0b3JfaGltZW0gPSAxOyAvKiAwID0gcHJvYmUsIHBvcy4gPSBtZWdzLCBuZWcuID0gZGlzYWJsZSAgICovCi1zdGF0aWMgaW50IGFsbG9jYXRvcl9zdGVwID0gMTsgIC8qIFRoaXMgaXMgdGhlIHN0ZXAgc2l6ZSBpbiBNQiAgICAgICAgICAgICAgKi8KLXN0YXRpYyBpbnQgYWxsb2NhdG9yX3Byb2JlID0gMTsgLyogVGhpcyBpcyBhIGZsYWcgLS0gMT1wcm9iZSwgMD1kb24ndCBwcm9iZSAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0b3JfYnVmZmVyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2J1ZmZlcl9zaXplOwkvKiBraWxvYnl0ZXMgKi8KLQotLyoKLSAqIFRoZSBhbGxvY2F0b3Iga2VlcHMgYSBsaXN0IG9mIERNQSBhcmVhcywgc28gbXVsdGlwbGUgZGV2aWNlcwotICogY2FuIGNvZXhpc3QuIFRoZSBsaXN0IGlzIGtlcHQgc29ydGVkIGJ5IGFkZHJlc3MKLSAqLwotCi1zdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqbmV4dDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqYWxsb2NhdG9yX2xpc3Q7Ci0KLSNpZmRlZiBBTExfREVCVUcKLXN0YXRpYyBpbnQgZHVtcF9saXN0KHZvaWQpCi17Ci0Jc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0cjsKLQotCVBERUJVRygiQ3VycmVudCBsaXN0OlxuIik7Ci0JZm9yIChwdHIgPSBhbGxvY2F0b3JfbGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCi0JCVBERUJVRygiMHglMDhseCAoc2l6ZSAlbGlrQilcbiIsIHB0ci0+YWRkcmVzcywgcHRyLT5zaXplPj4xMCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgYWxsb2NhdG9yLgotICoKLSAqIElmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBoaWdoIG1lbW9yeSAoYXMgZGV0ZWN0ZWQgYXQgbG9hZCB0aW1lKSwgdGhhdAotICogb25lIGlzIHJldHVybmVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyAoaS5lLiwgaXQgY2FuCi0gKiBiZSB1c2VkIHN0cmFpZ2h0IGFoZWFkIGZvciBETUEsIGJ1dCBuZWVkcyByZW1hcHBpbmcgZm9yIHByb2dyYW0gdXNlKS4KLSAqLwotCi11bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEodW5zaWduZWQgbG9uZyBraWxvYnl0ZXMsIGdmcF90IGZsYWdzKQotewotCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHIgPSBhbGxvY2F0b3JfbGlzdCwgKm5ld3B0cjsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzID0ga2lsb2J5dGVzIDw8IDEwOwotCi0JLyogY2hlY2sgaWYgaGlnaCBtZW1vcnkgaXMgYXZhaWxhYmxlICovCi0JaWYgKCFhbGxvY2F0b3JfYnVmZmVyKQotCQlyZXR1cm4gMDsKLQotCS8qIFJvdW5kIGl0IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2VzaXplICovCi0JYnl0ZXMgPSBQQUdFX0FMSUdOKGJ5dGVzKTsKLQlQREVCVUcoInJlcXVlc3QgZm9yICVsaSBieXRlc1xuIiwgYnl0ZXMpOwotCi0Jd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKLQkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyAtIChwdHItPmFkZHJlc3MgKyBwdHItPnNpemUpID49IGJ5dGVzKQotCQkJYnJlYWs7IC8qIGVub3VnaCBzcGFjZSAqLwotCQlwdHIgPSBwdHItPm5leHQ7Ci0JfQotCWlmICghcHRyLT5uZXh0KSB7Ci0JCURVTVBfTElTVCgpOwotCQlQREVCVUcoImFsbG9jIGZhaWxlZFxuIik7Ci0JCXJldHVybiAwOyAvKiBlbmQgb2YgbGlzdCAqLwotCX0KLQluZXdwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCksIGZsYWdzKTsKLQlpZiAoIW5ld3B0cikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBvaywgbm93IHN0aWNrIGl0IGFmdGVyIHB0ciAqLwotCW5ld3B0ci0+YWRkcmVzcyA9IHB0ci0+YWRkcmVzcyArIHB0ci0+c2l6ZTsKLQluZXdwdHItPnNpemUgPSBieXRlczsKLQluZXdwdHItPm5leHQgPSBwdHItPm5leHQ7Ci0JcHRyLT5uZXh0ID0gbmV3cHRyOwotCi0JRFVNUF9MSVNUKCk7Ci0JUERFQlVHKCJyZXR1cm5pbmcgMHglMDhseFxuIiwgbmV3cHRyLT5hZGRyZXNzKTsKLQlyZXR1cm4gbmV3cHRyLT5hZGRyZXNzOwotfQotCi1pbnQgYWxsb2NhdG9yX2ZyZWVfZG1hKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqcHRyID0gYWxsb2NhdG9yX2xpc3QsICpwcmV2OwotCi0Jd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKLQkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyA9PSBhZGRyZXNzKQotCQkJYnJlYWs7Ci0JCXB0ciA9IHB0ci0+bmV4dDsKLQl9Ci0JLyogdGhlIG9uZSBiZWluZyBmcmVlZCBpcyBwdHItPm5leHQgKi8KLQlwcmV2ID0gcHRyOyBwdHIgPSBwdHItPm5leHQ7Ci0KLQlpZiAoIXB0cikgewotCQlwcl9lcnIoQUxMX01TRyAiZnJlZV9kbWEgYnV0IGFkZC4gbm90IGFsbG9jYXRlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlQREVCVUdHKCJmcmVlaW5nOiAlMDhseCAoJWxpKSBuZXh0ICUwOGx4XG4iLCBwdHItPmFkZHJlc3MsIHB0ci0+c2l6ZSwKLQkJcHRyLT5uZXh0LT5hZGRyZXNzKTsKLQlwcmV2LT5uZXh0ID0gcHRyLT5uZXh0OwotCWtmcmVlKHB0cik7Ci0KLQkvKiBkdW1wX2xpc3QoKTsgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBJbml0IGFuZCBjbGVhbnVwCi0gKgotICogT24gY2xlYW51cCBldmVyeXRoaW5nIGlzIHJlbGVhc2VkLiBJZiB0aGUgbGlzdCBpcyBub3QgZW1wdHksIHRoYXQgYQotICogcHJvYmxlbSBvZiBvdXIgY2xpZW50cwotICovCi1pbnQgYWxsb2NhdG9yX2luaXQodTMyICphbGxvY2F0b3JfbWF4KQotewotCS8qIGNoZWNrIGhvdyBtdWNoIGZyZWUgbWVtb3J5IGlzIHRoZXJlICovCi0Jdm9pZCAqcmVtYXBwZWQ7Ci0JdW5zaWduZWQgbG9uZyBtYXg7Ci0JdW5zaWduZWQgbG9uZyB0cmlhbF9zaXplID0gYWxsb2NhdG9yX2hpbWVtPDwyMDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdHJpYWwgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RlcCA9IGFsbG9jYXRvcl9zdGVwPDwyMDsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOwotCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpoZWFkLCAqdGFpbDsKLQljaGFyIHRlc3Rfc3RyaW5nW10gPSAiMDEyMzQ1Njc4OWFiY2RlIjsgLyogMTYgYnl0ZXMgKi8KLQotCVBERUJVR0coImhpbWVtID0gJWlcbiIsIGFsbG9jYXRvcl9oaW1lbSk7Ci0JaWYgKGFsbG9jYXRvcl9oaW1lbSA8IDApIC8qIGRvbid0IGV2ZW4gdHJ5ICovCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCF0cmlhbF9zaXplKQotCQl0cmlhbF9zaXplID0gMTw8MjA7IC8qIG5vdCBzcGVjaWZpZWQ6IHRyeSBvbmUgbWVnICovCi0KLQl3aGlsZSAoMSkgewotCQlyZW1hcHBlZCA9IGlvcmVtYXAoX19wYShoaWdoX21lbW9yeSksIHRyaWFsX3NpemUpOwotCQlpZiAoIXJlbWFwcGVkKSB7Ci0JCQlQREVCVUdHKCIlbGkgbWVncyBmYWlsZWQhXG4iLCB0cmlhbF9zaXplPj4yMCk7Ci0JCQlicmVhazsKLQkJfQotCQlQREVCVUdHKCJUcnlpbmcgJWxpIG1lZ3MgKGF0ICVwLCAlcClcbiIsIHRyaWFsX3NpemU+PjIwLAotCQkJKHZvaWQgKilfX3BhKGhpZ2hfbWVtb3J5KSwgcmVtYXBwZWQpOwotCQlmb3IgKGkgPSBsYXN0X3RyaWFsOyBpIDwgdHJpYWxfc2l6ZTsgaSArPSAxNikgewotCQkJc3RyY3B5KChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZyk7Ci0JCQlpZiAoc3RyY21wKChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZykpCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWlvdW5tYXAoKHZvaWQgKilyZW1hcHBlZCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCWxhc3RfdHJpYWwgPSB0cmlhbF9zaXplOwotCQlpZiAoaSA9PSB0cmlhbF9zaXplKQotCQkJdHJpYWxfc2l6ZSArPSBzdGVwOyAvKiBpbmNyZW1lbnQsIGlmIGFsbCB3ZW50IHdlbGwgKi8KLQkJZWxzZSB7Ci0JCQlQREVCVUdHKCIlbGkgbWVncyBjb3B5IHRlc3QgZmFpbGVkIVxuIiwgdHJpYWxfc2l6ZT4+MjApOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFhbGxvY2F0b3JfcHJvYmUpCi0JCQlicmVhazsKLQl9Ci0JUERFQlVHKCIlbGkgbWVncyAoJWxpIGssICVsaSBiKVxuIiwgaT4+MjAsIGk+PjEwLCBpKTsKLQlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSBpPj4xMDsgLyoga2lsb2J5dGVzICovCi0JYWxsb2NhdG9yX2J1ZmZlciA9IF9fcGEoaGlnaF9tZW1vcnkpOwotCWlmICghYWxsb2NhdG9yX2J1ZmZlcl9zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgQUxMX01TRyAibm8gZnJlZSBoaWdoIG1lbW9yeSB0byB1c2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSogdG8gc2ltcGxpZnkgdGhpbmdzLCBhbHdheXMgaGF2ZSB0d28gY2VsbHMgaW4gdGhlIGxpc3Q6Ci0JKiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0LiBUaGlzIGF2b2lkcyBzb21lIGNvbmRpdGlvbmFscyBhbmQKLQkqIGV4dHJhIGNvZGUgd2hlbiBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmc6IHdlIG9ubHkgcGxheQotCSogaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdAotCSovCi0JaGVhZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFoZWFkKQotCQlyZXR1cm4gLUVOT01FTTsKLQl0YWlsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhaWwpIHsKLQkJa2ZyZWUoaGVhZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1heCA9IGFsbG9jYXRvcl9idWZmZXJfc2l6ZTw8MTA7Ci0KLQloZWFkLT5zaXplID0gdGFpbC0+c2l6ZSA9IDA7Ci0JaGVhZC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXI7Ci0JdGFpbC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXIgKyBtYXg7Ci0JaGVhZC0+bmV4dCA9IHRhaWw7Ci0JdGFpbC0+bmV4dCA9IE5VTEw7Ci0JYWxsb2NhdG9yX2xpc3QgPSBoZWFkOwotCi0JLyogQmFjayB0byB0aGUgdXNlciBjb2RlLCBpbiBLQiAqLwotCSphbGxvY2F0b3JfbWF4ID0gYWxsb2NhdG9yX2J1ZmZlcl9zaXplOwotCi0JcmV0dXJuIDA7IC8qIG9rLCByZWFkeSAqLwotfQotCi12b2lkIGFsbG9jYXRvcl9jbGVhbnVwKHZvaWQpCi17Ci0Jc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0ciwgKm5leHQ7Ci0KLQlmb3IgKHB0ciA9IGFsbG9jYXRvcl9saXN0OyBwdHI7IHB0ciA9IG5leHQpIHsKLQkJbmV4dCA9IHB0ci0+bmV4dDsKLQkJUERFQlVHKCJmcmVlaW5nIGxpc3Q6IDB4JTA4bHhcbiIsIHB0ci0+YWRkcmVzcyk7Ci0JCWtmcmVlKHB0cik7Ci0JfQotCi0JYWxsb2NhdG9yX2J1ZmZlciAgICAgID0gMDsKLQlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSAwOwotCWFsbG9jYXRvcl9saXN0ID0gTlVMTDsKLX0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1YjcwZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIGFsbG9jYXRvci5oIC0tIHByb3RvdHlwZXMgZm9yIGFsbG9jYXRpbmcgaGlnaCBtZW1vcnkKLSAqCi0gKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG15IHByZXZpb3VzIGFsbG9jYXRvciwgdGhlIG9uZSB0aGF0Ci0gKiAgICAgICBhc3NlbWJsZXMgcGFnZXMsIHdoaWNoIHJldmVhbGVkIGl0c2VsZiBib3RoIHNsb3cgYW5kIHVucmVsaWFibGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4ICAgcnViaW5pQGxpbnV4Lml0IChBbGVzc2FuZHJvIFJ1YmluaSkKLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICovCi0KLWludCBhbGxvY2F0b3JfZnJlZV9kbWEodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLXVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2FsbG9jYXRlX2RtYSh1bnNpZ25lZCBsb25nIGtpbG9ieXRlcywgZ2ZwX3QgZmxhZ3MpOwotaW50IGFsbG9jYXRvcl9pbml0KHUzMiAqKTsKLXZvaWQgYWxsb2NhdG9yX2NsZWFudXAodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkzZTJmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCi0JCQkgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlICAgICBQcm9ncmFtbWVyICBEZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIG1hZGUKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAwMy1KdWwtMjAwMCBKTUwgICAgIG4vYQotICAxMC1PY3QtMjAwMSBTUyAgICAgIHBvcnQgdG8gMi40IGtlcm5lbC4KLSAgMjQtSnVsLTIwMDIgU1MgICAgICByZW1vdmUgdW51c2VkIGNvZGUgJiBhZGRlZCBHUEwgbGljZW5jZS4KLSAgMDUtQXVnLTIwMDUgU1MgICAgICBwb3J0IHRvIDIuNiBrZXJuZWw7IG1ha2UgQ0NJUiBtb2RlIGRlZmF1bHQuCi0KLSovCi0KLSNpZm5kZWYgX0RUMzE1NV9JTkMKLSNkZWZpbmUgX0RUMzE1NV9JTkMKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgkJLyogc3RydWN0IHRpbWV2YWwgKi8KLQotCi0vKiBVbmNvbW1lbnQgdGhpcyBmb3IgNTBIeiBDQ0lSICovCi0jZGVmaW5lIENDSVIgMQotCi0vKiBDYW4gYmUgMSBvciAyICovCi0jZGVmaW5lIE1BWEJPQVJEUyAxCi0KLSNkZWZpbmUgQk9BUkRfTUFYX0JVRkZTCTMKLSNkZWZpbmUgTUFYQlVGRkVSUwkoQk9BUkRfTUFYX0JVRkZTKk1BWEJPQVJEUykKLQotI2RlZmluZSBQQ0lfUEFHRV9TSVpFCSgxIDw8IDEyKQotCi0jaWZkZWYgQ0NJUgotI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNTc2Ci0jZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk3NjgKLSNkZWZpbmUgRk9STUFUNTBIWgkxCi0jZWxzZQotI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNDgwCi0jZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk2NDAKLSNkZWZpbmUgRk9STUFUNTBIWgkwCi0jZW5kaWYKLQotLyogQ29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBkdDMxNTVfY29uZmlnIHsKLQl1MzIgYWNxX21vZGU7Ci0JdTMyIGNvbHMsIHJvd3M7Ci0JdTMyIGNvbnRpbnVvdXM7Ci19OwotCi0KLS8qIGhvbGQgZGF0YSBmb3IgZWFjaCBmcmFtZSAqLwotc3RydWN0IGZyYW1lX2luZm8gewotCXUzMiBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdpdGggdGhlIGZyYW1lICovCi0JdTMyIHRhZzsJCS8qIHVuaXF1ZSBudW1iZXIgZm9yIHRoZSBmcmFtZSAqLwotCXN0cnVjdCB0aW1ldmFsIHRpbWU7CS8qIHRpbWUgdGhhdCBjYXB0dXJlIHRvb2sgcGxhY2UgKi8KLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBhbmQgYnVmZmVyIGhhbmRsaW5nLgotICogVGhpcyBpcyB0aGUgc2V0dXAgZm9yIDEgY2FyZAotICovCi1zdHJ1Y3QgZHQzMTU1X2ZidWZmZXIgewotCWludCAgICBuYnVmZmVyczsKLQotCXN0cnVjdCBmcmFtZV9pbmZvIGZyYW1lX2luZm9bQk9BUkRfTUFYX0JVRkZTXTsKLQotCWludCBlbXB0eV9idWZmZXJzW0JPQVJEX01BWF9CVUZGU107CS8qIGluZGV4ZXMgZW1wdHkgZnJhbWVzICovCi0JaW50IGVtcHR5X2xlbjsJCQkJLyogTnVtYmVyIG9mIGVtcHR5IGJ1ZmZlcnMgKi8KLQkJCQkJCS8qIFplcm8gbWVhbnMgZW1wdHkgKi8KLQotCWludCBhY3RpdmVfYnVmOwkJCS8qIFdoZXJlIGRhdGEgaXMgY3VycmVudGx5IGRtYSdpbmcgKi8KLQlpbnQgbG9ja2VkX2J1ZjsJCQkvKiBCdWZmZXJzIHVzZWQgYnkgdXNlciAqLwotCi0JaW50IHJlYWR5X3F1ZVtCT0FSRF9NQVhfQlVGRlNdOwotCXUzMiByZWFkeV9oZWFkOwkvKiBUaGUgbW9zdCByZWNlbnQgYnVmZmVyIGxvY2F0ZWQgaGVyZSAqLwotCXUzMiByZWFkeV9sZW47CS8qIFRoZSBudW1iZXIgb2YgcmVhZHkgYnVmZmVycyAqLwotCi0JaW50IGV2ZW5faGFwcGVuZWQ7Ci0JaW50IGV2ZW5fc3RvcHBlZDsKLQotCWludCBzdG9wX2FjcXVpcmU7CS8qIEZsYWcgdG8gc3RvcCBpbnRlcnJ1cHRzICovCi0JdTMyIGZyYW1lX2NvdW50OwkvKiBDb3VudGVyIGZvciBmcmFtZXMgYWNxdWlyZWQgYnkgdGhpcyBjYXJkICovCi19OwotCi0KLQotI2RlZmluZSBEVDMxNTVfTU9ERV9GUkFNRQkxCi0jZGVmaW5lIERUMzE1NV9NT0RFX0ZJRUxECTIKLQotI2RlZmluZSBEVDMxNTVfU05BUAkJMQotI2RlZmluZSBEVDMxNTVfQUNRCQkyCi0KLS8qIFRoZXJlIGlzIG9uZSBzdGF0dXMgc3RydWN0dXJlIGZvciBlYWNoIGNhcmQuICovCi1zdHJ1Y3QgZHQzMTU1X3N0YXR1cyB7Ci0JaW50IGZpeGVkX21vZGU7CQkvKiBpZiAxLCB3ZSBhcmUgaW4gZml4ZWQgZnJhbWUgbW9kZSAqLwotCXUzMiByZWdfYWRkcjsJLyogUmVnaXN0ZXIgYWRkcmVzcyBmb3IgYSBzaW5nbGUgY2FyZCAqLwotCXUzMiBtZW1fYWRkcjsJLyogQnVmZmVyIHN0YXJ0IGFkZHIgZm9yIHRoaXMgY2FyZCAqLwotCXUzMiBtZW1fc2l6ZTsJLyogVGhpcyBpcyB0aGUgYW1vdW50IG9mIG1lbSBhdmFpbGFibGUgICovCi0JdTMyIGlycTsJCS8qIHRoaXMgY2FyZCdzIGlycSAqLwotCXN0cnVjdCBkdDMxNTVfY29uZmlnIGNvbmZpZzsJCS8qIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCi0Jc3RydWN0IGR0MzE1NV9mYnVmZmVyIGZidWZmZXI7CS8qIGZyYW1lIGJ1ZmZlciBzdGF0ZSBzdHJ1Y3QgKi8KLQl1MzIgc3RhdGU7CQkvKiB0aGlzIGNhcmQncyBzdGF0ZSAqLwotCXUzMiBkZXZpY2VfaW5zdGFsbGVkOwkvKiBGbGFnIGlmIGluc3RhbGxlZC4gMT1pbnN0YWxsZWQgKi8KLX07Ci0KLS8qIFJlZmVyZW5jZSB0byBnbG9iYWwgc3RhdHVzIHN0cnVjdHVyZSAqLwotZXh0ZXJuIHN0cnVjdCBkdDMxNTVfc3RhdHVzIGR0MzE1NV9zdGF0dXNbTUFYQk9BUkRTXTsKLQotI2RlZmluZSBEVDMxNTVfU1RBVEVfSURMRQkweDAwCi0jZGVmaW5lIERUMzE1NV9TVEFURV9GUkFNRQkweDAxCi0jZGVmaW5lIERUMzE1NV9TVEFURV9GTEQJMHgwMgotI2RlZmluZSBEVDMxNTVfU1RBVEVfU1RPUAkweDEwMAotI2RlZmluZSBEVDMxNTVfU1RBVEVfRVJST1IJMHgyMDAKLSNkZWZpbmUgRFQzMTU1X1NUQVRFX01PREUJMHgwZmYKLQotI2RlZmluZSBEVDMxNTVfSU9DX01BR0lDCSchJwotCi0jZGVmaW5lIERUMzE1NV9TRVRfQ09ORklHCV9JT1coRFQzMTU1X0lPQ19NQUdJQywgMSwgc3RydWN0IGR0MzE1NV9jb25maWcpCi0jZGVmaW5lIERUMzE1NV9HRVRfQ09ORklHCV9JT1IoRFQzMTU1X0lPQ19NQUdJQywgMiwgc3RydWN0IGR0MzE1NV9zdGF0dXMpCi0jZGVmaW5lIERUMzE1NV9TVE9QCQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgMykKLSNkZWZpbmUgRFQzMTU1X1NUQVJUCQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgNCkKLSNkZWZpbmUgRFQzMTU1X0ZMVVNICQlfSU8oRFQzMTU1X0lPQ19NQUdJQywgNSkKLSNkZWZpbmUgRFQzMTU1X0lPQ19NQVhOUgk1Ci0KLS8qIEVycm9yIGNvZGVzICovCi0KLSNkZWZpbmUgRFRfRVJSX05PX0JVRkZFUlMJMHgxMDAwMAkvKiBub3QgdXNlZCBidXQgaXQgbWlnaHQgYmUgb25lIGRheSAqLwotI2RlZmluZSBEVF9FUlJfQ09SUlVQVAkJMHgyMDAwMAotI2RlZmluZSBEVF9FUlJfT1ZFUlJVTgkJMHgzMDAwMAotI2RlZmluZSBEVF9FUlJfSTJDX1RJTUVPVVQJMHg0MDAwMAotI2RlZmluZSBEVF9FUlJfTUFTSwkJMHhmZjAwMDAvKiBub3QgdXNlZCBidXQgaXQgbWlnaHQgYmUgb25lIGRheSAqLwotCi0vKiBVc2VyIGNvZGUgd2lsbCBwcm9iYWJseSB3YW50IHRvIGRlY2xhcmUgb25lIG9mIHRoZXNlIGZvciBlYWNoIGNhcmQgKi8KLXN0cnVjdCBkdDMxNTVfcmVhZCB7Ci0JdTMyIG9mZnNldDsKLQl1MzIgZnJhbWVfc2VxOwotCXUzMiBzdGF0ZTsKLQotCXN0cnVjdCBmcmFtZV9pbmZvIGZyYW1lX2luZm87Ci19OwotCi0jZW5kaWYgLyogX0RUMzE1NV9pbmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LnN5c3Zpbml0IGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyZWMwOTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jISAvYmluL3NoCi0jCi0jIE1vZHVsZSBsb2FkL3VubG9hZCBzY3JpcHQgZm9yIHVzZSB3aXRoIFN5c1Ytc3R5bGUgL2V0Yy9pbml0LmQvIHN5c3RlbXMuCi0jIE9uIGEgRGViaWFuIHN5c3RlbSwgY29weSB0aGlzIHRvIC9ldGMvaW5pdC5kL2R0MzE1NSBhbmQgdGhlbiBydW4KLSMgCS91c3Ivc2Jpbi91cGRhdGUtcmMuZCBkdDMxNTUgZGVmYXVsdHMgNTUKLSMgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSAvZXRjL3JjPy5kL1tTS101NWR0MzE1NSBzdGFydC9zdG9wIGxpbmtzLgotIyAoVGhlICI1NSIgaXMgYXJiaXRyYXJ5IGJ1dCBpcyB3aGF0IEkgdXNlIHRvIGxvYWQgdGhpcyByYXRoZXIgbGF0ZS4pCi0jCi0jICAgIEFuZHkgRG91Z2hlcnR5ICAgRmViIDIyIDIwMDAJZG91Z2hlcmFAbGFmYXlldHRlLmVkdQotIyAgICBEZXB0LiBvZiBQaHlzaWNzCi0jICAgIExhZmF5ZXR0ZSBDb2xsZWdlLCBFYXN0b24gUEEgMTgwNDIKLSMKLQotUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KLQotIyBFZGl0IHRvIHBvaW50IHRvIHlvdXIgbG9jYWwgY29weS4KLUZJTEU9L3Vzci9sb2NhbC9saWIvbW9kdWxlcy9kdDMxNTUvZHQzMTU1Lm8KLU5BTUU9ImR0MzE1NSIKLURFU0M9ImR0MzE1NSBGcmFtZSBHcmFiYmVyIG1vZHVsZSIKLURFVj0iZHQzMTU1IgotCi1pZiB0ZXN0ICEgLWYgJEZJTEU7IHRoZW4KLSAgICBlY2hvICJVbmFibGUgdG8gbG9jYXRlICRGSUxFIgotICAgIGV4aXQgMAotZmkKLQotc2V0IC1lCi0KLWNhc2UgIiQxIiBpbgotICBzdGFydCkKLSAgICBlY2hvIC1uICJMb2FkaW5nICRERVNDICIKLSAgICBpZiAvc2Jpbi9pbnNtb2QgLXYgLWYgJEZJTEU7IHRoZW4KLQltYWpvcj1gZ3JlcCAkREVWIC9wcm9jL2RldmljZXMgfCBhd2sgIntwcmludCBcXCQxfSJgCi0Jcm0gLWYgL2Rldi9kdDMxNTU/Ci0JbWtub2QgL2Rldi9kdDMxNTVhIGMgJG1ham9yIDAKLQlta25vZCAvZGV2L2R0MzE1NWIgYyAkbWFqb3IgMQotCWNobW9kIGdvK3J3IC9kZXYvZHQzMTU1PwotCWVjaG8KLSAgICBlbHNlCi0JZWNobyAiJEZJTEUgbm90IGxvYWRlZC4iCi0gICAgZmkKLSAgICA7OwotICBzdG9wKQotICAgIGVjaG8gLW4gIlVubG9hZGluZyAkREVTQzogIgotICAgIGlmIC9zYmluL3JtbW9kICROQU1FIDsgdGhlbgotCWVjaG8KLSAgICBlbHNlCi0JZWNobyAiJERFViBub3QgcmVtb3ZlZCIKLQlleGl0IDAKLSAgICBmaQotICAgIHJtIC1mIC9kZXYvZHQzMTU1PwotICAgIDs7Ci0gICopCi0gICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kLyROQU1FIHtzdGFydHxzdG9wfSIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotCi1leGl0IDAKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlZjk3Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTkgKzAsMCBAQAotLyoKLQotQ29weXJpZ2h0IDE5OTYsMjAwMiwyMDA1IEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5LCBHcmVnIFNoYXJwCi0KLVRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KLQotVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0Ci1hbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQotTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQotdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQotb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLWFsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotTUEgMDIxMTEtMTMwNyBVU0EKLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgIFByb2dyYW1tZXIJRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAxMC1PY3QtMjAwMSBTUyAgICAgICAgcG9ydCB0byAyLjQga2VybmVsCi0gIDAyLUFwci0yMDAyIFNTICAgICAgICBNb2RzIHRvIHVzZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlZCBKb2huIFJvbGwncyBjaGFuZ2VzIChqb2huQGNmYS5oYXJ2YXJkLmVkdSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2Ugd29yayB3aXRoIG11bHRpcGxlIGJvYXJkcy4KLSAgMDItSnVsLTIwMDIgU1MgICAgICAgIE1lcmdlZCBKYW1lcyBSb3NlJ3MgY2hhZ2VzIChyb3NlanJAcHVyZHVlLmVkdSkgdG86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgKiBmaXggc3VjY2Vzc2l2ZSBpbnRlcnJ1cHQtZHJpdmVuIGNhcHR1cmVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGQgc2VsZWN0L3BvbGwgc3VwcG9ydC4KLSAgMTAtSnVsLTIwMDIgR0NTICAgICAgIEFkZCBlcnJvciBjaGVjayB3aGVuIG5kZXZpY2VzID4gTUFYQk9BUkRTLgotICAwMi1BdWctMjAwMiBHQ1MgICAgICAgRml4IGZpZWxkIG1vZGUgc28gdGhhdCBvZGQgKGxvd2VyKSBmaWVsZCBpcyBzdG9yZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvd2VyIGhhbGYgb2YgYnVmZmVyLgotICAwNS1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgotICAyNi1PY3QtMjAwOSBTUwlwb3J0IHRvIDIuNi4zMCBrZXJuZWwuCi0KLS0tIE5vdGVzIC0tCi0KLSoqIGFwcGVuZGVkICJtZW09MTI0IiBpbiBsaWxvLmNvbmYgdG8gYWxsb3cgZm9yIDRtZWdzIGZyZWUgb24gbXkgMTI4bWVnIHN5c3RlbS4KLSAqIHVzaW5nIGFsbG9jYXRvci5jIGFuZCBhbGxvY2F0b3IuaCBmcm9tIG8ncmVpbGx5IGJvb2sgKGFsZXNzYW5kcm8gcnViaW5pKQotICAgIGZ0cDovL2Z0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIChzZWUgUkVBRE1FLmFsbG9jYXRvcikKLQotICsgbWlnaHQgd2FudCB0byBnZXQgcmlkIG9mIE1BWGJvYXJkcyBmb3IgYWxsb2NhdGluZyBpbml0aWFsIGJ1ZmZlci4KLSAgICBjb25mdXNpbmcgYW5kIG5vdCBuZWNlc3NhcnkKLQotICsgaW4gY2xlYW51cF9tb2R1bGUgdGhlIE1PRF9JTl9VU0UgbG9va3MgbGlrZSBpdCBpcyBjaGVjayBhZnRlciBpdCBzaG91bGQKLQotICogR0ZQX0RNQSBzaG91bGQgbm90IGJlIHNldCB3aXRoIGEgUENJIHN5c3RlbSAocGcgMjkxKQotCi0gLSBOSkMgd2h5IGFyZSBvbmx5IHR3byBidWZmZXJzIGFsbG93ZWQ/IChzZWUgaXNyLCBhcHByb3ggbGluZSAzNTgpCi0KLSovCi0KLWV4dGVybiB2b2lkIHByaW50cXVlcyhpbnQpOwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImR0MzE1NS5oIgotI2luY2x1ZGUgImR0MzE1NV9kcnYuaCIKLSNpbmNsdWRlICJkdDMxNTVfaXNyLmgiCi0jaW5jbHVkZSAiZHQzMTU1X2lvLmgiCi0jaW5jbHVkZSAiYWxsb2NhdG9yLmgiCi0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKiBFcnJvciB2YXJpYWJsZS4gIFplcm8gbWVhbnMgbm8gZXJyb3IuICovCi1pbnQgZHQzMTU1X2Vycm5vID0gMDsKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzcxMTYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF83MTE2IDB4MTIyMwotI2VuZGlmCi0KLSNkZWZpbmUgRFQzMTU1X1ZFTkRPUklEICAgIFBDSV9WRU5ET1JfSURfSU5URUwKLSNkZWZpbmUgRFQzMTU1X0RFVklDRUlEICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfNzExNgotI2RlZmluZSBNQVhQQ0kgICAgMTYKLQotI2lmZGVmIERUX0RFQlVHCi0jZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkgcHJpbnRrKHgseSkKLSNlbHNlCi0jZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkKLSNlbmRpZgotCi0vKiB3YWl0IHF1ZXVlIGZvciBpbnRlcnJ1cHRzICovCi13YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW01BWEJPQVJEU107Ci0KLSNkZWZpbmUgRFRfMzE1NV9TVUNDRVNTIDAKLSNkZWZpbmUgRFRfMzE1NV9GQUlMVVJFIC1FSU8KLQotLyogc2V0IHRvIGR5bmFtaWNhbHkgYWxsb2NhdGUsIGJ1dCBpdCBpcyB0dW5hYmxlOiAqLwotLyogaW5zbW9kIERUXzMxNTUgZHQzMTU1IGR0MzE1NV9tYWpvcj1YWCAqLwotaW50IGR0MzE1NV9tYWpvciA9IDA7Ci0KLS8qIFRoZSBtaW5vciBudW1iZXJzIGFyZSAwIGFuZCAxIC4uLiB0aGV5IGFyZSBub3QgdHVuYWJsZS4KLSAqIFRoZXkgYXJlIHVzZWQgYXMgdGhlIGluZGljZXMgZm9yIHRoZSBzdHJ1Y3R1cmUgdmVjdG9ycywKLSAqIGFuZCByZWdpc3RlciBhZGRyZXNzIHZlY3RvcnMKLSAqLwotCi0vKiBHbG9iYWwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzICovCi0KLS8qIFN0YXR1cyBvZiBlYWNoIGRldmljZSAqLwotc3RydWN0IGR0MzE1NV9zdGF0dXMgZHQzMTU1X3N0YXR1c1tNQVhCT0FSRFNdOwotCi0vKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHRoZSBib2FyZCAqLwotdTggKmR0MzE1NV9sYmFzZVtNQVhCT0FSRFNdID0geyBOVUxMCi0jaWYgTUFYQk9BUkRTID09IDIKLQkJCQkgICAgICAsIE5VTEwKLSNlbmRpZgotfTsKLS8qIERUMzE1NSByZWdpc3RlcnMgICAgICAgICAgICAgICovCi11OCAqZHQzMTU1X2JiYXNlID0gTlVMTDsJCSAgLyoga2VybmVsIGxvZ2ljYWwgYWRkcmVzcyBvZiB0aGUgKgotCQkJCQkgICAqIGJ1ZmZlciByZWdpb24gICAgICAgICAgICAgICAgICovCi11MzIgIGR0MzE1NV9kZXZfb3BlbltNQVhCT0FSRFNdID0gezAKLSNpZiBNQVhCT0FSRFMgPT0gMgotCQkJCSAgICAgICAsIDAKLSNlbmRpZgotfTsKLQotdTMyICBuZGV2aWNlcyA9IDA7Ci11MzIgdW5pcXVlX3RhZyA9IDA7OwotCi0KLS8qCi0gKiBTdG9wcyBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiByaWdodCBhd2F5IGFuZCByZXNldHMgdGhlIHN0YXR1cwotICogdG8gaWRsZS4gIEkgZG9uJ3Qga25vdyB3aHkgdGhpcyB3b3JrcyBhbmQgdGhlIG90aGVyIHdheSBkb2Vzbid0LgotICogKEphbWVzIFJvc2UpCi0gKi8KLXN0YXRpYyB2b2lkIHF1aWNrX3N0b3AgKGludCBtaW5vcikKLXsKLSAgLy8gVE9ETzogc2NvdHQgd2FzIGhlcmUKLSNpZiAxCi0gIFJlYWRNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcpOwotICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLSAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRV9FTiA9IDA7Ci0gIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOwotICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgJj0gfihEVDMxNTVfU1RBVEVfU1RPUHwweGZmKTsKLSAgLyogbWFyayB0aGUgc3lzdGVtIHN0b3BwZWQ6ICovCi0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9JRExFOwotICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSA9IDA7Ci0gIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+ZXZlbl9zdG9wcGVkID0gMDsKLSNlbHNlCi0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9TVE9QOwotICBkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLnN0b3BfYWNxdWlyZSA9IDE7Ci0jZW5kaWYKLQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGR0MzE1NV9pc3IoKSBJbnRlcnJ1cHQgc2VydmljZSByb3V0aWVuCi0gKgotICogLSBsb29rcyBsaWtlIHRoaXMgaXNyIHN1cHBvcnRzIElSUSBzaGFyaW5nIChvciBjb3VsZCkgSk1MCi0gKiAtIEFzc3VtZXMgaXJxJ3MgYXJlIGRpc2FibGVkLCB2aWEgU0FfSU5URVJSVVBUIGZsYWcKLSAqIGJlaW5nIHNldCBpbiByZXF1ZXN0X2lycSgpIGNhbGwgZnJvbSBpbml0X21vZHVsZSgpCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBkdDMxNTVfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0gIGludCAgICBtaW5vciA9IC0xOwotICBpbnQgICAgaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gIHUzMiBidWZmZXJfYWRkcjsKLQotICAvKiBmaW5kIG91dCB3aG8gaXNzdWVkIHRoZSBpbnRlcnJ1cHQgKi8KLSAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbmRldmljZXM7IGluZGV4KyspIHsKLSAgICBpZihkZXZfaWQgPT0gKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1tpbmRleF0pCi0gICAgICB7Ci0JbWlub3IgPSBpbmRleDsKLQlicmVhazsKLSAgICAgIH0KLSAgfQotCi0gIC8qIGhvcGVmdWxseSB3ZSBzaG91bGQgbm90IGdldCBoZXJlICovCi0gIGlmIChtaW5vciA8IDAgfHwgbWlub3IgPj0gTUFYQk9BUkRTKSB7Ci0gICAgcHJpbnRrKEtFUk5fRVJSICJkdDMxNTVfaXNyIGNhbGxlZCB3aXRoIGludmFsaWQgZGV2X2lkXG4iKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBDaGVjayBmb3IgY29ycnVwdGlvbiBhbmQgc2V0IGEgZmxhZyBpZiBzbyAqLwotICBSZWFkTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIENTUjEpLCBjc3IxX3IucmVnKTsKLQotICBpZiAoKGNzcjFfci5mbGQuRkxEX0NSUFRfRVZFKSB8fCAoY3NyMV9yLmZsZC5GTERfQ1JQVF9PREQpKQotICAgIHsKLSAgICAgIC8qIFRPRE86IHRoaXMgc2hvdWxkIHByb2JhYmx5IHN0b3AgYWNxdWlzaXRpb24gKi8KLSAgICAgIC8qIGFuZCBzZXQgc29tZSBmbGFncyBzbyB0aGF0IGR0MzE1NV9yZWFkICAgICAgKi8KLSAgICAgIC8qIHJldHVybnMgYW4gZXJyb3IgbmV4dCB0aW1lIGl0IGlzIGNhbGxlZCAgICAgKi8KLSAgICAgIGR0MzE1NV9lcnJubyA9IERUX0VSUl9DT1JSVVBUOwotICAgICAgcHJpbnRrKCJkdDMxNTU6ICBjb3JydXB0IGZpZWxkXG4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgUmVhZE1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgLyogSGFuZGxlIHRoZSBldmVuIGZpZWxkIC4uLiAqLwotICBpZiAoaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRSkKLSAgICB7Ci0gICAgICBpZiAoKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09Ci0JICAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmZyYW1lX2NvdW50Kys7Ci0JfQotCi0gICAgICBSZWFkSTJDKGR0MzE1NV9sYmFzZVttaW5vcl0sIEVWRU5fQ1NSLCAmaTJjX2V2ZW5fY3NyLnJlZyk7Ci0KLSAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQ/ICovCi0gICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFID0gMTsKLQotICAgICAgLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGlmIGxhc3QgZmllbGQgKi8KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSkKLQl7Ci0JICBwcmludGsoImR0MzE1NTogIGV2ZW4gc3RvcHBlZC5cbiIpOwotCSAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX3N0b3BwZWQgPSAxOwotCSAgaWYgKGkyY19ldmVuX2Nzci5mbGQuU05HTF9FVkUpCi0JICAgIHsKLQkgICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFX0VOID0gMDsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaTJjX2V2ZW5fY3NyLmZsZC5TTkdMX0VWRSAgPSAxOwotCSAgICB9Ci0JfQotCi0gICAgICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgICAgIC8qIFNldCB1cCBuZXh0IERNQSBpZiB3ZSBhcmUgZG9pbmcgRklFTERTICovCi0gICAgICBpZiAoKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09Ci0JICAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICAvKiBHQ1MgKEF1ZyAyLCAyMDAyKSAtLSBJbiBmaWVsZCBtb2RlLCBkbWEgdGhlIG9kZCBmaWVsZAotCSAgICAgaW50byB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgYnVmZmVyICovCi0JICBjb25zdCB1MzIgc3RyaWRlID0gIGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZy5jb2xzOwotCSAgYnVmZmVyX2FkZHIgPSBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCSAgICBmcmFtZV9pbmZvW2R0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1Zl0uYWRkcgotCSAgICArIChEVDMxNTVfTUFYX1JPV1MgLyAyKSAqIHN0cmlkZTsKLQkgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0pOwotCi0JICAvKiBTZXQgdXAgdGhlIERNQSBhZGRyZXNzIGZvciB0aGUgbmV4dCBmaWVsZCAqLwotCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgT0REX0RNQV9TVEFSVCksIGJ1ZmZlcl9hZGRyKTsKLQl9Ci0KLSAgICAgIC8qIENoZWNrIGZvciBlcnJvcnMuICovCi0gICAgICBpMmNfZXZlbl9jc3IuZmxkLkRPTkVfRVZFID0gMTsKLSAgICAgIGlmIChpMmNfZXZlbl9jc3IuZmxkLkVSUk9SX0VWRSkKLQlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKLQotICAgICAgV3JpdGVJMkMoZHQzMTU1X2xiYXNlW21pbm9yXSwgRVZFTl9DU1IsIGkyY19ldmVuX2Nzci5yZWcpOwotCi0gICAgICAvKiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgc2F3IGFuIGV2ZW4gZmllbGQgbWVhbmluZyAgKi8KLSAgICAgIC8qIHRoYXQgc3Vic2VxdWVudCBvZGQgZmllbGQgY29tcGxldGUgdGhlIGZyYW1lICAgICAqLwotICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX2hhcHBlbmVkID0gMTsKLQotICAgICAgLyogcmVjb3JkaW5nIHRoZSB0aW1lIHRoYXQgdGhlIGV2ZW4gZmllbGQgZmluaXNoZWQsIHRoaXMgc2hvdWxkIGJlICovCi0gICAgICAvKiBhYm91dCB0aW1lIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZyYW1lICovCi0gICAgICBkb19nZXR0aW1lb2ZkYXkoJihkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCQkJIGZyYW1lX2luZm9bZHQzMTU1X2ZidWZmZXJbbWlub3JdLT4KLQkJCQkgICAgIGFjdGl2ZV9idWZdLnRpbWUpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgLyogLi4uIG5vdyBoYW5kbGUgdGhlIG9kZCBmaWVsZCAqLwotICBpZiAoaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERCkKLSAgICB7Ci0gICAgICBSZWFkSTJDKGR0MzE1NV9sYmFzZVttaW5vcl0sIE9ERF9DU1IsICZpMmNfb2RkX2Nzci5yZWcpOwotCi0gICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0PyAqLwotICAgICAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERCA9IDE7Ci0KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgfHwKLQkgIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQotCSAgRFQzMTU1X1NUQVRFX0ZMRCkKLQl7Ci0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmZyYW1lX2NvdW50Kys7Ci0JfQotCi0gICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5zdG9wX2FjcXVpcmUgJiYKLQkgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5fc3RvcHBlZCkKLQl7Ci0JICBwcmludGsoS0VSTl9ERUJVRyAiZHQzMTU1OiAgc3RvcHBpbmcgb2RkLi5cbiIpOwotCSAgaWYgKGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCkKLQkgICAgewotCSAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCSAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOwotCSAgICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICY9IH4oRFQzMTU1X1NUQVRFX1NUT1B8MHhmZik7Ci0KLQkgICAgICAvKiBtYXJrIHRoZSBzeXN0ZW0gc3RvcHBlZDogKi8KLQkgICAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSB8PSBEVDMxNTVfU1RBVEVfSURMRTsKLQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPnN0b3BfYWNxdWlyZSA9IDA7Ci0JICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5ldmVuX3N0b3BwZWQgPSAwOwotCi0JICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImR0MzE1NTogIHN0YXRlIGlzIG5vdyAleFxuIiwKLQkJICAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSk7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCAgPSAxOwotCSAgICB9Ci0JfQotCi0gICAgICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgICAgIC8qIGlmIHRoZSBvZGQgZmllbGQgaGFzIGJlZW4gYWNxdWlyZWQsIHRoZW4gICAgICovCi0gICAgICAvKiBjaGFuZ2UgdGhlIG5leHQgZG1hIGxvY2F0aW9uIGZvciBib3RoIGZpZWxkcyAqLwotICAgICAgLyogYW5kIHdha2UgdXAgdGhlIHByb2Nlc3MgaWYgc2xlZXBpbmcgICAgICAgICAgKi8KLSAgICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgfHwKLQkgICAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkgPT0KLQkgICBEVDMxNTVfU1RBVEVfRkxEKQotCXsKLQotCSAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JICBsb2NhbF9pcnFfZGlzYWJsZSgpOwotCi0jaWZkZWYgREVCVUdfUVVFU19CCi0JICBwcmludHF1ZXMobWlub3IpOwotI2VuZGlmCi0JICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5uYnVmZmVycyA+IDIpCi0JICAgIHsKLQkgICAgICBpZiAoIWFyZV9lbXB0eV9idWZmZXJzKG1pbm9yKSkKLQkJewotCQkgIC8qIFRoZSBudW1iZXIgb2YgYWN0aXZlICsgbG9ja2VkIGJ1ZmZlcnMgaXMKLQkJICAgKiBhdCBtb3N0IDIsIGFuZCBzaW5jZSB0aGVyZSBhcmUgbm9uZSBlbXB0eSwgdGhlcmUKLQkJICAgKiBtdXN0IGJlIGF0IGxlYXN0IG5idWZmZXJzLTIgcmVhZHkgYnVmZmVycy4KLQkJICAgKiBUaGlzIGlzIHdoZXJlIHdlICdkcm9wIGZyYW1lcycsIG9sZGVzdCBmaXJzdC4gKi8KLQkJICBwdXNoX2VtcHR5KHBvcF9yZWFkeShtaW5vciksICBtaW5vcik7Ci0JCX0KLQotCSAgICAgIC8qIFRoZSByZWFkeV9xdWUgY2FuJ3QgYmUgZnVsbCwgc2luY2Ugd2Uga25vdwotCSAgICAgICAqIHRoZXJlIGlzIG9uZSBhY3RpdmUgYnVmZmVyIHJpZ2h0IG5vdywgc28gaXQncyBzYWZlCi0JICAgICAgICogdG8gcHVzaCB0aGUgYWN0aXZlIGJ1ZiBvbiB0aGUgcmVhZHlfcXVlLiAqLwotCSAgICAgIHB1c2hfcmVhZHkobWlub3IsIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1Zik7Ci0JICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCAxIGVtcHR5IC0tIG1ha2UgaXQgYWN0aXZlICovCi0JICAgICAgZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5hY3RpdmVfYnVmID0gcG9wX2VtcHR5KG1pbm9yKTsKLQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCQlmcmFtZV9pbmZvW2R0MzE1NV9mYnVmZmVyW21pbm9yXS0+Ci0JCQkgICAgYWN0aXZlX2J1Zl0udGFnID0gKyt1bmlxdWVfdGFnOwotCSAgICB9Ci0JICBlbHNlIC8qIG5idWZmZXJzID09IDIsIHNwZWNpYWwgY2FzZSAqLwotCSAgICB7IC8qIFRoZXJlIGlzIDEgYWN0aXZlIGJ1ZmZlci4KLQkgICAgICAgKiBJZiB0aGVyZSBpcyBhIGxvY2tlZCBidWZmZXIsIGtlZXAgdGhlIGFjdGl2ZSBidWZmZXIKLQkgICAgICAgKiB0aGUgc2FtZSAtLSB0aGF0IG1lYW5zIHdlIGRyb3AgYSBmcmFtZS4KLQkgICAgICAgKi8KLQkgICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5sb2NrZWRfYnVmIDwgMCkKLQkJewotCQkgIHB1c2hfcmVhZHkobWlub3IsCi0JCQkgICAgICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmFjdGl2ZV9idWYpOwotCQkgIGlmIChhcmVfZW1wdHlfYnVmZmVycyhtaW5vcikpCi0JCSAgICB7Ci0JCSAgICAgIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1ZiA9Ci0JCQlwb3BfZW1wdHkobWlub3IpOwotCQkgICAgfQotCQkgIGVsc2UKLQkJICAgIHsgLyogbm8gZW1wdHkgb3IgbG9ja2VkIGJ1ZmZlcnMsIHNvIHVzZSBhIHJlYWR5YnVmICovCi0JCSAgICAgIGR0MzE1NV9mYnVmZmVyW21pbm9yXS0+YWN0aXZlX2J1ZiA9Ci0JCQlwb3BfcmVhZHkobWlub3IpOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQotI2lmZGVmIERFQlVHX1FVRVNfQgotCSAgcHJpbnRxdWVzKG1pbm9yKTsKLSNlbmRpZgotCi0JICBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPmV2ZW5faGFwcGVuZWQgPSAwOwotCi0JICB3YWtlX3VwX2ludGVycnVwdGlibGUoJmR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdKTsKLQotCSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLQotCi0gICAgICAvKiBTZXQgdXAgdGhlIERNQSBhZGRyZXNzIGZvciB0aGUgbmV4dCBmcmFtZS9maWVsZCAqLwotICAgICAgYnVmZmVyX2FkZHIgPSBkdDMxNTVfZmJ1ZmZlclttaW5vcl0tPgotCWZyYW1lX2luZm9bZHQzMTU1X2ZidWZmZXJbbWlub3JdLT5hY3RpdmVfYnVmXS5hZGRyOwotICAgICAgaWYgKChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQotCSAgIERUMzE1NV9TVEFURV9GTEQpCi0JewotCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLCBidWZmZXJfYWRkcik7Ci0JfQotICAgICAgZWxzZQotCXsKLQkgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIEVWRU5fRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIpOwotCi0JICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBPRERfRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIKLQkJICAgICsgZHQzMTU1X3N0YXR1c1ttaW5vcl0uY29uZmlnLmNvbHMpOwotCX0KLQotICAgICAgLyogRG8gZXJyb3IgY2hlY2tpbmcgKi8KLSAgICAgIGkyY19vZGRfY3NyLmZsZC5ET05FX09ERCA9IDE7Ci0gICAgICBpZiAoaTJjX29kZF9jc3IuZmxkLkVSUk9SX09ERCkKLQlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKLQotICAgICAgV3JpdGVJMkMoZHQzMTU1X2xiYXNlW21pbm9yXSwgT0REX0NTUiwgaTJjX29kZF9jc3IucmVnKTsKLQotICAgICAgcmV0dXJuOwotICAgIH0KLSAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBPZGQgRmllbGQgd2Fzbid0IGl0IGVpdGhlci4uLiAqLwotICBwcmludGsoIm5laXRoZXIgZXZlbiBub3Igb2RkLiAgc2hhcmVkIHBlcmhhcHM/XG4iKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpbml0X2lzcihpbnQgbWlub3IpCi0gKiAgIHR1cm5zIG9uIGludGVydXB0IGdlbmVyYXRpb24gZm9yIHRoZSBjYXJkCi0gKiAgIGRlc2lnbmF0ZWQgYnkgIm1pbm9yIi4KLSAqICAgSXQgaXMgY2FsbGVkICpvbmx5KiBmcm9tIGluc2lkZSBpb2N0bCgpLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgZHQzMTU1X2luaXRfaXNyKGludCBtaW5vcikKLXsKLSAgY29uc3QgdTMyIHN0cmlkZSA9ICBkdDMxNTVfc3RhdHVzW21pbm9yXS5jb25maWcuY29sczsKLQotICBzd2l0Y2ggKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpCi0gICAgewotICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZMRDoKLSAgICAgIHsKLQlldmVuX2RtYV9zdGFydF9yICA9IGR0MzE1NV9zdGF0dXNbbWlub3JdLgotCSAgZmJ1ZmZlci5mcmFtZV9pbmZvW2R0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuYWN0aXZlX2J1Zl0uYWRkcjsKLQlldmVuX2RtYV9zdHJpZGVfciA9IDA7Ci0Jb2RkX2RtYV9zdHJpZGVfciAgPSAwOwotCi0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLAotCQkgIGV2ZW5fZG1hX3N0YXJ0X3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIEVWRU5fRE1BX1NUUklERSksCi0JCSAgZXZlbl9kbWFfc3RyaWRlX3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIE9ERF9ETUFfU1RSSURFKSwKLQkJICBvZGRfZG1hX3N0cmlkZV9yKTsKLQlicmVhazsKLSAgICAgIH0KLQotICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZSQU1FOgotICAgIGRlZmF1bHQ6Ci0gICAgICB7Ci0JZXZlbl9kbWFfc3RhcnRfciAgPSBkdDMxNTVfc3RhdHVzW21pbm9yXS4KLQkgIGZidWZmZXIuZnJhbWVfaW5mb1tkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLmFjdGl2ZV9idWZdLmFkZHI7Ci0Jb2RkX2RtYV9zdGFydF9yICAgPSAgZXZlbl9kbWFfc3RhcnRfciArIHN0cmlkZTsKLQlldmVuX2RtYV9zdHJpZGVfciA9ICBzdHJpZGU7Ci0Jb2RkX2RtYV9zdHJpZGVfciAgPSAgc3RyaWRlOwotCi0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RBUlQpLAotCQkgIGV2ZW5fZG1hX3N0YXJ0X3IpOwotCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIE9ERF9ETUFfU1RBUlQpLAotCQkgIG9kZF9kbWFfc3RhcnRfcik7Ci0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgRVZFTl9ETUFfU1RSSURFKSwKLQkJICBldmVuX2RtYV9zdHJpZGVfcik7Ci0JV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbbWlub3JdICsgT0REX0RNQV9TVFJJREUpLAotCQkgIG9kZF9kbWFfc3RyaWRlX3IpOwotCWJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAvKiA1MC82MCBIeiBzaG91bGQgYmUgc2V0IGJlZm9yZSB0aGlzIHBvaW50IGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQgaXMgKi8KLSAgLyogcmlnaHQgYW55d2F5ICovCi0KLSAgUmVhZEkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCAmaTJjX2NzcjIucmVnKTsKLSAgaTJjX2NzcjIuZmxkLkhaNTAgPSBGT1JNQVQ1MEhaOwotICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCBpMmNfY3NyMi5yZWcpOwotCi0gIC8qIGVuYWJsZSBidXNtYXN0ZXIgY2hpcCwgY2xlYXIgZmxhZ3MgKi8KLQotICAvKgotICAgKiBUT0RPOgotICAgKiBzaG91bGRuJ3Qgd2UgYmUgY29uY2VyZWQgd2l0aCBjb250aW51b3VzIHZhbHVlcyBvZgotICAgKiBEVDMxNTVfU05BUCAmIERUMzE1NV9BQ1EgaGVyZT8gKFNTKQotICAgKi8KLQotICBjc3IxX3IucmVnICAgICAgICAgICAgICAgID0gMDsKLSAgY3NyMV9yLmZsZC5DQVBfQ09OVF9FVkUgICA9IDE7IC8qIHVzZSBjb250aW51b3VzIGNhcHR1cmUgYml0cyB0byAqLwotICBjc3IxX3IuZmxkLkNBUF9DT05UX09ERCAgID0gMTsgLyogZW5hYmxlICovCi0gIGNzcjFfci5mbGQuRkxEX0ROX0VWRSAgICAgPSAxOyAvKiB3cml0aW5nIGEgMSBjbGVhcnMgZmxhZ3MgKi8KLSAgY3NyMV9yLmZsZC5GTERfRE5fT0REICAgICA9IDE7Ci0gIGNzcjFfci5mbGQuU1JTVCAgICAgICAgICAgPSAxOyAvKiByZXNldCAgICAgICAgLSBtdXN0IGJlIDEgKi8KLSAgY3NyMV9yLmZsZC5GSUZPX0VOICAgICAgICA9IDE7IC8qIGZpZm8gY29udHJvbCAtIG11c3QgYmUgMSAqLwotICBjc3IxX3IuZmxkLkZMRF9DUlBUX0VWRSAgID0gMTsgLyogd3JpdGluZyBhIDEgY2xlYXJzIGZsYWdzICovCi0gIGNzcjFfci5mbGQuRkxEX0NSUFRfT0REICAgPSAxOwotCi0gIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIENTUjEpLGNzcjFfci5yZWcpOwotCi0gIC8qIEVuYWJsZSBpbnRlcnJ1cHRzIGF0IHRoZSBlbmQgb2YgZWFjaCBmaWVsZCAqLwotCi0gIGludF9jc3Jfci5yZWcgPSAwOwotICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFX0VOID0gMTsKLSAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERF9FTiA9IDE7Ci0gIGludF9jc3Jfci5mbGQuRkxEX1NUQVJUX0VOID0gMDsKLQotICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVttaW5vcl0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7Ci0KLSAgLyogc3RhcnQgaW50ZXJuYWwgQlVTWSBiaXRzICovCi0KLSAgUmVhZEkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCAmaTJjX2NzcjIucmVnKTsKLSAgaTJjX2NzcjIuZmxkLkJVU1lfT0REICA9IDE7Ci0gIGkyY19jc3IyLmZsZC5CVVNZX0VWRSAgPSAxOwotICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbbWlub3JdLCBDU1IyLCBpMmNfY3NyMi5yZWcpOwotCi0gIC8qIE5vdyBpdHMgdXAgdG8gdGhlIGludGVycnVwdCByb3V0aW5lISEgKi8KLQotICByZXR1cm47Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpb2N0bCgpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBkdDMxNTVfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCXN0cnVjdCBmaWxlICpmaWxlLAotCQkJdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQotewotICBpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsgLyogV2hhdCBkZXZpY2UgYXJlIHdlIGlvY3RsKCknaW5nPyAqLwotCi0gIGlmIChtaW5vciA+PSBNQVhCT0FSRFMgfHwgbWlub3IgPCAwKQotICAgIHJldHVybiAtRU5PREVWOwotCi0gIC8qIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCBjb21tYW5kICovCi0gIGlmIChfSU9DX05SKGNtZCkgPiBEVDMxNTVfSU9DX01BWE5SKQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1OiBpbnZhbGlkIElPQ1RMKDB4JXgpXG4iLGNtZCk7Ci0gICAgICBwcmludGsoIkRUMzE1NTogVmFsaWQgY29tbWFuZHMgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpLCAoMHgleClcbiIsCi0JICAgICAodW5zaWduZWQgaW50KURUMzE1NV9HRVRfQ09ORklHLAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU0VUX0NPTkZJRywKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NUQVJULAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU1RPUCwKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X0ZMVVNIKTsKLSAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICBzd2l0Y2ggKGNtZCkKLSAgICB7Ci0gICAgY2FzZSBEVDMxNTVfU0VUX0NPTkZJRzoKLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JewotCSAgc3RydWN0IGR0MzE1NV9jb25maWcgdG1wOwotCSAgaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJnRtcCwgKHZvaWQgKikgYXJnLCBzaXplb2YodG1wKSkpCi0JICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JICAvKiBjaGVjayBmb3IgdmFsaWQgc2V0dGluZ3MgKi8KLQkgIGlmICh0bXAucm93cyA+IERUMzE1NV9NQVhfUk9XUyB8fAotCSAgICAgIHRtcC5jb2xzID4gRFQzMTU1X01BWF9DT0xTIHx8Ci0JICAgICAgKHRtcC5hY3FfbW9kZSAhPSBEVDMxNTVfTU9ERV9GUkFNRSAmJgotCSAgICAgICB0bXAuYWNxX21vZGUgIT0gRFQzMTU1X01PREVfRklFTEQpIHx8Ci0JICAgICAgKHRtcC5jb250aW51b3VzICE9IERUMzE1NV9TTkFQICYmCi0JICAgICAgIHRtcC5jb250aW51b3VzICE9IERUMzE1NV9BQ1EpKQotCSAgICB7Ci0JICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JICAgIH0KLQkgIGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZyA9IHRtcDsKLQl9Ci0JcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgY2FzZSBEVDMxNTVfR0VUX0NPTkZJRzoKLSAgICAgIHsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgIHNpemVvZihzdHJ1Y3QgZHQzMTU1X3N0YXR1cykpKQotCSAgICByZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLSAgICAgIH0KLSAgICBjYXNlIERUMzE1NV9GTFVTSDogLyogRmx1c2hlcyB0aGUgYnVmZmVycyAtLSBlbnN1cmVzIGZyZXNoIGRhdGEgKi8KLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCXJldHVybiBkdDMxNTVfZmx1c2gobWlub3IpOwotICAgICAgfQotICAgIGNhc2UgRFQzMTU1X1NUT1A6Ci0gICAgICB7Ci0JaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICYgRFQzMTU1X1NUQVRFX1NUT1AgfHwKLQkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5zdG9wX2FjcXVpcmUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID09IERUMzE1NV9TVEFURV9JRExFKQotCSAgcmV0dXJuIDA7Ci0KLQlxdWlja19zdG9wKG1pbm9yKTsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgIHNpemVvZihzdHJ1Y3QgZHQzMTU1X3N0YXR1cykpKQotCSAgICByZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKLSAgICAgIH0KLSAgICBjYXNlIERUMzE1NV9TVEFSVDoKLSAgICAgIHsKLQlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCi0JICByZXR1cm4gLUVCVVNZOwotCi0JZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5zdG9wX2FjcXVpcmUgPSAwOwotCWR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQgPSAwOwotCi0JLyogU2V0IHRoZSBNT0RFIGluIHRoZSBzdGF0dXMgLS0gd2UgZGVmYXVsdCB0byBGUkFNRSAqLwotCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5jb25maWcuYWNxX21vZGUgPT0gRFQzMTU1X01PREVfRklFTEQpCi0JICB7Ci0JICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZMRDsKLQkgIH0KLQllbHNlCi0JICB7Ci0JICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZSQU1FOwotCSAgfQotCi0JZHQzMTU1X2luaXRfaXNyKG1pbm9yKTsKLQlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAotCQkgICAgICBzaXplb2Yoc3RydWN0IGR0MzE1NV9zdGF0dXMpKSkKLQkgICAgcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci0gICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIHsKLQlwcmludGsoIkRUMzE1NTogaW52YWxpZCBJT0NUTCgweCV4KVxuIixjbWQpOwotICAgICAgcHJpbnRrKCJEVDMxNTU6IFZhbGlkIGNvbW1hbmRzICgweCV4KSwgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpXG4iLAotCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfR0VUX0NPTkZJRywKLQkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NFVF9DT05GSUcsCi0JICAgICBEVDMxNTVfU1RBUlQsIERUMzE1NV9TVE9QLCBEVDMxNTVfRkxVU0gpOwotCXJldHVybiAtRU5PU1lTOwotICAgICAgfQotICAgIH0KLSAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogbW1hcCgpCi0gKgotICogb25seSBhbGxvdyB0aGUgdXNlciB0byBtbWFwIHRoZSByZWdpc3RlcnMgYW5kIGJ1ZmZlcgotICogSXQgaXMgcXVpdGUgcG9zc2libGUgdGhhdCB0aGlzIGlzIGJyb2tlbiwgc2luY2UgdGhlCi0gKiBhZGRpdGlvbiBvZiBvZiB0aGUgY2FwYWNpdHkgZm9yIHR3byBjYXJkcyEhISEhISEhCi0gKiBJdCAqbG9va3MqIGxpa2UgaXQgc2hvdWxkIHdvcmsgYnV0IHNpbmNlIEknbSBub3QKLSAqIHN1cmUgaG93IHRvIHVzZSBpdCwgSSdtIG5vdCBhY3R1YWxseSBzdXJlLiAoTkpDPyBkaXR0byBieSBTUykKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZHQzMTU1X21tYXAgKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQotewotICAvKiB3aGljaCBkZXZpY2UgYXJlIHdlIG1tYXBwaW5nPyAqLwotICBpbnQJCQkJbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLSAgdW5zaWduZWQgbG9uZwlvZmZzZXQ7Ci0gIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQotICBpZiAob2Zmc2V0ID49IF9fcGEoaGlnaF9tZW1vcnkpIHx8IChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSkKLSAgICB2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOwotCi0gIC8qIERvbid0IHRyeSB0byBzd2FwIG91dCBwaHlzaWNhbCBwYWdlcy4uICovCi0gIHZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7Ci0KLSAgLyogdGhleSBhcmUgbWFwcGluZyB0aGUgcmVnaXN0ZXJzIG9yIHRoZSBidWZmZXIgKi8KLSAgaWYgKChvZmZzZXQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ucmVnX2FkZHIgJiYKLSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPT0gUENJX1BBR0VfU0laRSkgfHwKLSAgICAgIChvZmZzZXQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ubWVtX2FkZHIgJiYKLSAgICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgPT0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ubWVtX3NpemUpKQotICAgIHsKLSAgICAgIGlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLAotCQkJdm1hLT52bV9zdGFydCwKLQkJCW9mZnNldCA+PiBQQUdFX1NISUZULAotCQkJdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAotCQkJdm1hLT52bV9wYWdlX3Byb3QpKSB7Ci0JICBwcmludGsoIkRUMzE1NTogcmVtYXBfcGFnZV9yYW5nZSgpIGZhaWxlZC5cbiIpOwotCSAgcmV0dXJuIC1FQUdBSU47Ci0JfQotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1OiBkdDMxNTVfbW1hcCgpIGJhZCBjYWxsLlxuIik7Ci0gICAgICByZXR1cm4gLUVOWElPOwotICAgIH0KLQotICByZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIG9wZW4oKQotICoKLSAqIE91ciBzcGVjaWFsIG9wZW4gY29kZS4KLSAqIE1PRF9JTkNfVVNFX0NPVU5UIG1ha2Ugc3VyZSB0aGF0IHRoZSBkcml2ZXIgbWVtb3J5IGlzIG5vdCBmcmVlZAotICogd2hpbGUgdGhlIGRldmljZSBpcyBpbiB1c2UuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGR0MzE1NV9vcGVuKHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxlcCkKLXsKLSAgaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7IC8qIHdoYXQgZGV2aWNlIGFyZSB3ZSBvcGVuaW5nPyAqLwotICBpZiAoZHQzMTU1X2Rldl9vcGVuW21pbm9yXSkgewotICAgIHByaW50ayAoIkRUMzE1NTogIEFscmVhZHkgb3BlbmVkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cbiIpOwotICAgIHJldHVybiAtRUJVU1k7Ci0gIH0KLQotICBpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uZGV2aWNlX2luc3RhbGxlZD09MCkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NSBPcGVuIEVycm9yOiBObyBzdWNoIGRldmljZSBkdDMxNTUgbWlub3IgbnVtYmVyICVkXG4iLAotCSAgICAgbWlub3IpOwotICAgICAgcmV0dXJuIC1FSU87Ci0gICAgfQotCi0gIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkgewotICAgIHByaW50ayAoIkRUMzE1NTogIE5vdCBpbiBpZGxlIHN0YXRlIChzdGF0ZSA9ICV4KVxuIiwKLQkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUpOwotICAgIHJldHVybiAtRUJVU1k7Ci0gIH0KLQotICBwcmludGsoIkRUMzE1NTogRGV2aWNlIG9wZW5lZC5cbiIpOwotCi0gIGR0MzE1NV9kZXZfb3BlblttaW5vcl0gPSAxIDsKLQotICBkdDMxNTVfZmx1c2gobWlub3IpOwotCi0gIC8qIERpc2FibGUgQUxMIGludGVycnVwdHMgKi8KLSAgaW50X2Nzcl9yLnJlZyA9IDA7Ci0gIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW21pbm9yXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKLQotICBpbml0X3dhaXRxdWV1ZV9oZWFkKCYoZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0pKTsKLQotICByZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNsb3NlKCkKLSAqCi0gKiBOb3cgZGVjcmVtZW50IHRoZSB1c2UgY291bnQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBkdDMxNTVfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQotewotICBpbnQgbWlub3I7Ci0KLSAgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsgLyogd2hpY2ggZGV2aWNlIGFyZSB3ZSBjbG9zaW5nICovCi0gIGlmICghZHQzMTU1X2Rldl9vcGVuW21pbm9yXSkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogYXR0ZW1wdCB0byBDTE9TRSBhIG5vdCBPUEVOIGRldmljZVxuIik7Ci0gICAgfQotICBlbHNlCi0gICAgewotICAgICAgZHQzMTU1X2Rldl9vcGVuW21pbm9yXSA9IDA7Ci0KLSAgICAgIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkKLQl7Ci0JICBxdWlja19zdG9wKG1pbm9yKTsKLQl9Ci0gICAgfQotICByZXR1cm4gMDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiByZWFkKCkKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3NpemVfdCBkdDMxNTVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLSAgLyogd2hpY2ggZGV2aWNlIGFyZSB3ZSByZWFkaW5nIGZyb20/ICovCi0gIGludAkJbWlub3IgPSBNSU5PUihmaWxlcC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7Ci0gIHUzMgkJb2Zmc2V0OwotICBpbnQJCWZyYW1lX2luZGV4OwotICBzdHJ1Y3QgZnJhbWVfaW5mbwkqZnJhbWVfaW5mbzsKLQotICAvKiBUT0RPOiB0aGlzIHNob3VsZCBjaGVjayB0aGUgZXJyb3IgZmxhZyBhbmQgKi8KLSAgLyogICByZXR1cm4gYW4gZXJyb3Igb24gaGFyZHdhcmUgZmFpbHVyZXMgKi8KLSAgaWYgKGNvdW50ICE9IHNpemVvZihzdHJ1Y3QgZHQzMTU1X3JlYWQpKQotICAgIHsKLSAgICAgIHByaW50aygiRFQzMTU1IEVSUk9SIChOSkMpOiBjb3VudCBpcyBub3QgcmlnaHRcbiIpOwotICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0KLSAgLyogSGFjayBoZXJlIC0tIEknbSBnb2luZyB0byBhbGxvdyByZWFkaW5nIGV2ZW4gd2hlbiBpZGxlLgotICAgKiB0aGlzIGlzIHNvIHRoYXQgdGhlIGZyYW1lcyBjYW4gYmUgcmVhZCBhZnRlciBTVE9QIGhhcwotICAgKiBiZWVuIGNhbGxlZC4gIExlYXZpbmcgaXQgaGVyZSwgY29tbWVudGVkIG91dCwgYXMgYSByZW1pbmRlcgotICAgKiBmb3IgYSBzaG9ydCB3aGlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByb2JsZW1zLgotICAgKiBOb3RlIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBub3Qgb3BlbmVkIGluIG5vbl9ibG9ja2luZyBtb2RlLAotICAgKiBhbmQgdGhlIGRldmljZSBpcyBpZGxlLCB0aGVuIGl0IGNvdWxkIHNpdCBoZXJlIGZvcmV2ZXIhICovCi0KLSAgLyogIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSA9PSBEVDMxNTVfU1RBVEVfSURMRSkqLwotICAvKiAgICByZXR1cm4gLUVCVVNZOyovCi0KLSAgLyogbm9uLWJsb2NraW5nIHJlYWRzIHNob3VsZCByZXR1cm4gaWYgbm8gZGF0YSAqLwotICBpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05ERUxBWSkKLSAgICB7Ci0gICAgICBpZiAoKGZyYW1lX2luZGV4ID0gZHQzMTU1X2dldF9yZWFkeV9idWZmZXIobWlub3IpKSA8IDApIHsKLQkvKnByaW50aygiZHQzMTU1OiAgbm8gYnVmZmVycyBhdmFpbGFibGUgKD8pXG4iKTsqLwotCS8qIAkJcHJpbnRxdWVzKG1pbm9yKTsgKi8KLQlyZXR1cm4gLUVBR0FJTjsKLSAgICAgIH0KLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKgotICAgICAgICogc2xlZXAgdGlsbCBkYXRhIGFycml2ZXMgLCBvciB3ZSBnZXQgaW50ZXJydXB0ZWQuCi0gICAgICAgKiBOb3RlIHRoYXQgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkgZG9lcyBub3QgYWN0dWFsbHkKLSAgICAgICAqIHNsZWVwL3dhaXQgaWYgaXQncyBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgdXBvbiBlbnRyeS4KLSAgICAgICAqLwotICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdLAotCQkJICAgICAgIChmcmFtZV9pbmRleCA9IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKG1pbm9yKSkKLQkJCSAgICAgICA+PSAwKTsKLQotICAgICAgaWYgKGZyYW1lX2luZGV4IDwgMCkKLQl7Ci0JICBwcmludGsgKCJEVDMxNTU6IHJlYWQ6IGludGVycnVwdGVkXG4iKTsKLQkgIHF1aWNrX3N0b3AgKG1pbm9yKTsKLQkgIHByaW50cXVlcyhtaW5vcik7Ci0JICByZXR1cm4gLUVJTlRSOwotCX0KLSAgICB9Ci0KLSAgZnJhbWVfaW5mbyA9ICZkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLmZyYW1lX2luZm9bZnJhbWVfaW5kZXhdOwotCi0gIC8qIG1ha2UgdGhpcyBhbiBvZmZzZXQgKi8KLSAgb2Zmc2V0ID0gZnJhbWVfaW5mby0+YWRkciAtIGR0MzE1NV9zdGF0dXNbbWlub3JdLm1lbV9hZGRyOwotCi0gIHB1dF91c2VyKG9mZnNldCwgKHVuc2lnbmVkIGludCAqKSBidWYpOwotICBidWYgKz0gc2l6ZW9mKHUzMik7Ci0gIHB1dF91c2VyKGR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQsICh1bnNpZ25lZCBpbnQgKikgYnVmKTsKLSAgYnVmICs9IHNpemVvZih1MzIpOwotICBwdXRfdXNlcihkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSwgKHVuc2lnbmVkIGludCAqKSBidWYpOwotICBidWYgKz0gc2l6ZW9mKHUzMik7Ci0gIGlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZV9pbmZvLCBzaXplb2YoKmZyYW1lX2luZm8pKSkKLSAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gIHJldHVybiBzaXplb2Yoc3RydWN0IGR0MzE1NV9yZWFkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkdDMxNTVfcG9sbCAoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQotewotICBpbnQgbWlub3IgPSBNSU5PUihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKLQotICBpZiAoIWlzX3JlYWR5X2J1Zl9lbXB0eShtaW5vcikpCi0gICAgcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLSAgcG9sbF93YWl0IChmaWxwLCAmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0sIHdhaXQpOwotCi0gIHJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZwotZHQzMTU1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0OwotCi0JbG9ja19rZXJuZWwoKTsKLQlyZXQgPSBkdDMxNTVfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZmlsZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBEVDMxNTUgZHJpdmVyCi0gKiAgbmVlZGVkIGJ5IGluaXRfbW9kdWxlCi0gKiAgcmVnaXN0ZXJfY2hyZGV2Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdDMxNTVfZm9wcyA9IHsKLQkucmVhZAkJPSBkdDMxNTVfcmVhZCwKLQkudW5sb2NrZWRfaW9jdGwJPSBkdDMxNTVfdW5sb2NrZWRfaW9jdGwsCi0JLm1tYXAJCT0gZHQzMTU1X21tYXAsCi0JLnBvbGwJCT0gZHQzMTU1X3BvbGwsCi0JLm9wZW4JCT0gZHQzMTU1X29wZW4sCi0JLnJlbGVhc2UJPSBkdDMxNTVfY2xvc2UKLX07Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBmaW5kX1BDSSgpOwotICoKLSAqIFBDSSBoYXMgYmVlbiB0b3RhbGx5IHJld29ya2VkIGluIDIuMS4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGZpbmRfUENJICh2b2lkKQotewotICBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7Ci0gIGludCBlcnJvciwgcGNpX2luZGV4ID0gMDsKLSAgdW5zaWduZWQgc2hvcnQgcmV2X2RldmljZTsKLSAgdW5zaWduZWQgbG9uZyBiYXNlOwotICB1bnNpZ25lZCBjaGFyIGlycTsKLQotICB3aGlsZSAoKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZQotCSAgKERUMzE1NV9WRU5ET1JJRCwgRFQzMTU1X0RFVklDRUlELCBwY2lfZGV2KSkgIT0gTlVMTCkKLSAgICB7Ci0gICAgICBwY2lfaW5kZXggKys7Ci0KLSAgICAgIC8qIElzIGl0IHJlYWxseSB0aGVyZT8gKi8KLSAgICAgIGlmICgoZXJyb3IgPQotCSAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9DTEFTU19ERVZJQ0UsICZyZXZfZGV2aWNlKSkpCi0JY29udGludWU7Ci0KLSAgICAgIC8qIEZvdW5kIGEgYm9hcmQgKi8KLSAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IERldmljZSBudW1iZXIgJWQgXG4iLCBwY2lfaW5kZXgpOwotCi0gICAgICAvKiBNYWtlIHN1cmUgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgd2l0aCBlbm91Z2ggYnVmZmVycyB0byBoYW5kbGUKLQkgdGhpcyBtYW55IGJvYXJkcyAqLwotICAgICAgaWYgKHBjaV9pbmRleCA+IE1BWEJPQVJEUykgewotCXByaW50aygiRFQzMTU1OiBFUlJPUiAtIGZvdW5kICVkIGRldmljZXMsIGJ1dCBkcml2ZXIgb25seSBjb25maWd1cmVkICIKLQkgICAgICAgImZvciAlZCBkZXZpY2VzXG4iCi0JICAgICAgICJEVDMxNTU6IFBsZWFzZSBjaGFuZ2UgTUFYQk9BUkRTIGluIGR0MzE1NS5oXG4iLAotCSAgICAgICBwY2lfaW5kZXgsIE1BWEJPQVJEUyk7Ci0JZ290byBlcnI7Ci0gICAgICB9Ci0KLSAgICAgIC8qIE5vdywganVzdCBnbyBvdXQgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMvdGhlc2UgZGV2aWNlKHMpIGlzL2FyZQotCSBhY3R1YWxseSBtYXBwZWQgaW50byB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2UgKi8KLSAgICAgIGlmICgoZXJyb3IgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwgUENJX0JBU0VfQUREUkVTU18wLAotCQkJCQkgICh1MzIgKikgJmJhc2UpKSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogV2FzIG5vdCBhYmxlIHRvIGZpbmQgZGV2aWNlIFxuIik7Ci0JICBnb3RvIGVycjsKLQl9Ci0KLSAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IEJhc2UgYWRkcmVzcyAwIGZvciBkZXZpY2UgaXMgJWx4IFxuIiwgYmFzZSk7Ci0gICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5yZWdfYWRkciA9IGJhc2U7Ci0KLSAgICAgIC8qIFJlbWFwIHRoZSBiYXNlIGFkZHJlc3MgdG8gYSBsb2dpY2FsIGFkZHJlc3MgdGhyb3VnaCB3aGljaCB3ZQotICAgICAgICogY2FuIGFjY2VzcyBpdC4gKi8KLSAgICAgIGR0MzE1NV9sYmFzZVtwY2lfaW5kZXggLSAxXSA9IGlvcmVtYXAoYmFzZSxQQ0lfUEFHRV9TSVpFKTsKLSAgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4IC0gMV0ucmVnX2FkZHIgPSBiYXNlOwotICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogTmV3IGxvZ2ljYWwgYWRkcmVzcyBpcyAlcCBcbiIsCi0JCQlkdDMxNTVfbGJhc2VbcGNpX2luZGV4LTFdKTsKLSAgICAgIGlmICghZHQzMTU1X2xiYXNlW3BjaV9pbmRleC0xXSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogVW5hYmxlIHRvIHJlbWFwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKLQkgIGdvdG8gZXJyOwotCX0KLQotICAgICAgaWYgKChlcnJvciA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycSkpKQotCXsKLQkgIHByaW50aygiRFQzMTU1OiBXYXMgbm90IGFibGUgdG8gZmluZCBkZXZpY2UgXG4iKTsKLQkgIGdvdG8gZXJyOwotCX0KLQotICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogSVJRIGlzICVkIFxuIixpcnEpOwotICAgICAgZHQzMTU1X3N0YXR1c1twY2lfaW5kZXgtMV0uaXJxID0gaXJxOwotICAgICAgLyogU2V0IGZsYWc6IGt0aCBkZXZpY2UgZm91bmQhICovCi0gICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5kZXZpY2VfaW5zdGFsbGVkID0gMTsKLSAgICAgIHByaW50aygiRFQzMTU1OiBJbnN0YWxsaW5nIGRldmljZSAlZCB3L2lycSAlZCBhbmQgYWRkcmVzcyAlcFxuIiwKLQkgICAgIHBjaV9pbmRleCwKLQkgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4LTFdLmlycSwKLQkgICAgIGR0MzE1NV9sYmFzZVtwY2lfaW5kZXgtMV0pOwotCi0gICAgfQotICBuZGV2aWNlcyA9IHBjaV9pbmRleDsKLQotICByZXR1cm4gRFRfMzE1NV9TVUNDRVNTOwotCi1lcnI6Ci0gIHBjaV9kZXZfcHV0KHBjaV9kZXYpOwotICByZXR1cm4gRFRfMzE1NV9GQUlMVVJFOwotfQotCi11MzIgYWxsb2NhdG9yQWRkciA9IDA7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaW5pdF9tb2R1bGUoKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGluaXRfbW9kdWxlKHZvaWQpCi17Ci0gIGludCBpbmRleDsKLSAgaW50IHJjb2RlID0gMDsKLSAgY2hhciAqZGV2bmFtZVtNQVhCT0FSRFNdOwotCi0gIGRldm5hbWVbMF0gPSAiZHQzMTU1YSI7Ci0jaWYgTUFYQk9BUkRTID09IDIKLSAgZGV2bmFtZVsxXSA9ICJkdDMxNTViIjsKLSNlbmRpZgotCi0gIHByaW50aygiRFQzMTU1OiBMb2FkaW5nIG1vZHVsZS4uLlxuIik7Ci0KLSAgLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgKi8KLSAgcmNvZGUgPSByZWdpc3Rlcl9jaHJkZXYoZHQzMTU1X21ham9yLCAiZHQzMTU1IiwgJmR0MzE1NV9mb3BzKTsKLSAgaWYocmNvZGUgPCAwKQotICAgIHsKLSAgICAgIHByaW50ayhLRVJOX0lORk8gIkRUMzE1NTogcmVnaXN0ZXJfY2hyZGV2IGZhaWxlZCBcbiIpOwotICAgICAgcmV0dXJuIHJjb2RlOwotICAgIH0KLQotICBpZihkdDMxNTVfbWFqb3IgPT0gMCkKLSAgICBkdDMxNTVfbWFqb3IgPSByY29kZTsgLyogZHluYW1pYyAqLwotCi0KLSAgLyogaW5pdCB0aGUgc3RhdHVzIHZhcmlhYmxlcy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBETUEgbWVtb3J5IGlzIHRha2VuIGNhcmUgb2YgaW4gc2V0dXBfYnVmZmVycygpICovCi0gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWEJPQVJEUzsgaW5kZXgrKykKLSAgICB7Ci0gICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcuYWNxX21vZGUgICA9IERUMzE1NV9NT0RFX0ZSQU1FOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbnRpbnVvdXMgPSBEVDMxNTVfQUNROwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbHMgICAgICAgPSBEVDMxNTVfTUFYX0NPTFM7Ci0gICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcucm93cyAgICAgICA9IERUMzE1NV9NQVhfUk9XUzsKLSAgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0lETEU7Ci0KLSAgICAgIC8qIGZpbmRfUENJKCkgd2lsbCBjaGVjayBpZiBkZXZpY2VzIGFyZSBpbnN0YWxsZWQ7ICovCi0gICAgICAvKiBmaXJzdCBhc3N1bWUgdGhleSdyZSBub3Q6ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX2FkZHIgICAgICAgICAgPSAwOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX3NpemUgICAgICAgICAgPSAwOwotICAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uc3RhdGUgICAgICAgICAgICAgPSBEVDMxNTVfU1RBVEVfSURMRTsKLSAgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQgID0gMDsKLSAgICB9Ci0KLSAgLyogTm93IGxldCdzIGZpbmQgdGhlIGhhcmR3YXJlLiAgZmluZF9QQ0koKSB3aWxsIHNldCBuZGV2aWNlcyB0byB0aGUKLSAgICogbnVtYmVyIG9mIGNhcmRzIGZvdW5kIGluIHRoaXMgbWFjaGluZS4gKi8KLSAgICB7Ci0gICAgICBpZiAoKHJjb2RlID0gZmluZF9QQ0koKSkgIT0gIERUXzMxNTVfU1VDQ0VTUykKLQl7Ci0JICBwcmludGsoIkRUMzE1NSBlcnJvcjogZmluZF9QQ0koKSBmYWlsZWQgdG8gZmluZCBkdDMxNTUgYm9hcmQocylcbiIpOwotCSAgdW5yZWdpc3Rlcl9jaHJkZXYoZHQzMTU1X21ham9yLCAiZHQzMTU1Iik7Ci0JICByZXR1cm4gcmNvZGU7Ci0JfQotICAgIH0KLQotICAvKiBPaywgdGltZSB0byBzZXR1cCB0aGUgZnJhbWUgYnVmZmVycyAqLwotICBpZigocmNvZGUgPSBkdDMxNTVfc2V0dXBfYnVmZmVycygmYWxsb2NhdG9yQWRkcikpIDwgMCkKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogRXJyb3I6IHNldHRpbmcgdXAgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2guIik7Ci0gICAgICB1bnJlZ2lzdGVyX2NocmRldihkdDMxNTVfbWFqb3IsICJkdDMxNTUiKTsKLSAgICAgIHJldHVybiByY29kZTsKLSAgICB9Ci0KLSAgLyogSWYgd2UgYXJlIHRoaXMgZmFyLCB0aGVuIHRoZXJlIGlzIGVub3VnaCBSQU0gKi8KLSAgLyogZm9yIHRoZSBidWZmZXJzOiBQcmludCB0aGUgY29uZmlndXJhdGlvbi4gICAgKi8KLSAgZm9yKCBpbmRleCA9IDA7ICBpbmRleCA8IG5kZXZpY2VzOyAgaW5kZXgrKykKLSAgICB7Ci0gICAgICBwcmludGsoIkRUMzE1NTogRGV2aWNlID0gJWQ7IGFjcV9tb2RlID0gJWQ7ICIKLQkgICAgICJjb250aW51b3VzID0gJWQ7IGNvbHMgPSAlZDsgcm93cyA9ICVkO1xuIiwKLQkgICAgIGluZGV4ICwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmNvbmZpZy5hY3FfbW9kZSwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmNvbmZpZy5jb250aW51b3VzLAotCSAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0uY29uZmlnLmNvbHMsCi0JICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5jb25maWcucm93cyk7Ci0gICAgICBwcmludGsoIkRUMzE1NTogbV9hZGRyID0gMHgleDsgbV9zaXplID0gJWxkOyAiCi0JICAgICAic3RhdGUgPSAlZDsgZGV2aWNlX2luc3RhbGxlZCA9ICVkXG4iLAotCSAgICAgZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX2FkZHIsCi0JICAgICAobG9uZyBpbnQpZHQzMTU1X3N0YXR1c1tpbmRleF0ubWVtX3NpemUsCi0JICAgICBkdDMxNTVfc3RhdHVzW2luZGV4XS5zdGF0ZSwKLQkgICAgIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQpOwotICAgIH0KLQotICAvKiBEaXNhYmxlIEFMTCBpbnRlcnJ1cHRzICovCi0gIGludF9jc3Jfci5yZWcgPSAwOwotICBmb3IoIGluZGV4ID0gMDsgIGluZGV4IDwgbmRldmljZXM7ICBpbmRleCsrKQotICAgIHsKLSAgICAgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlW2luZGV4XSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKLSAgICAgIGlmKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQpCi0JewotCSAgLyoKLQkgICAqIFRoaXMgZHJpdmVyICpsb29rcyogbGlrZSBpdCBjYW4gaGFuZGxlIHNoYXJpbmcgaW50ZXJydXB0cywKLQkgICAqIGJ1dCBJIGNhbid0IGFjdHVhbGx5IHRlc3QgbXlzZWxmLiBJJ3ZlIGhhZCByZXBvcnRzIHRoYXQgaXQKLQkgICAqIERPRVMgd29yayBzbyBJJ2xsIGVuYWJsZSBpdCBmb3Igbm93LiBUaGlzIGNvbW1lbnQgd2lsbCByZW1haW4KLQkgICAqIGFzIGEgcmVtaW5kZXIgaW4gY2FzZSBhbnkgcHJvYmxlbXMgYXJpc2UuIChTUykKLQkgICAqLwotCSAgLyogaW4gb2xkZXIga2VybmVscyBmbGFncyBhcmU6IFNBX1NISVJRIHwgU0FfSU5URVJSVVBUICovCi0JICByY29kZSA9IHJlcXVlc3RfaXJxKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmlycSwgKHZvaWQgKilkdDMxNTVfaXNyLAotCQkJICAgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2bmFtZVtpbmRleF0sCi0JCQkgICAgICAgKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1tpbmRleF0pOwotCSAgaWYocmNvZGUgPCAwKQotCSAgICB7Ci0JICAgICAgcHJpbnRrKCJEVDMxNTU6IG1pbm9yICVkIHJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgSVJRICVkXG4iLAotCQkgICAgIGluZGV4LCBkdDMxNTVfc3RhdHVzW2luZGV4XS5pcnEpOwotCSAgICAgIHVucmVnaXN0ZXJfY2hyZGV2KGR0MzE1NV9tYWpvciwgImR0MzE1NSIpOwotCSAgICAgIHJldHVybiByY29kZTsKLQkgICAgfQotCX0KLSAgICB9Ci0KLSAgcHJpbnRrKCJEVDMxNTU6IGZpbmlzaGVkIGxvYWRpbmdcbiIpOwotCi0gIHJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNsZWFudXBfbW9kdWxlKHZvaWQpCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQotewotICBpbnQgaW5kZXg7Ci0KLSAgcHJpbnRrKCJEVDMxNTU6ICBjbGVhbnVwX21vZHVsZSBjYWxsZWRcbiIpOwotCi0gIC8qIHJlbW92ZWQgRE1BIGFsbG9jYXRlZCB3aXRoIHRoZSBhbGxvY2F0b3IgKi8KLSNpZmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgotICBpZiAoYWxsb2NhdG9yQWRkciAhPSAwKQotICAgIGFsbG9jYXRvcl9mcmVlX2RtYShhbGxvY2F0b3JBZGRyKTsKLSNlbHNlCi0gIGFsbG9jYXRvcl9jbGVhbnVwKCk7Ci0jZW5kaWYKLQotICB1bnJlZ2lzdGVyX2NocmRldihkdDMxNTVfbWFqb3IsICJkdDMxNTUiKTsKLQotICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IG5kZXZpY2VzOyBpbmRleCsrKQotICAgIHsKLSAgICAgIGlmKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmRldmljZV9pbnN0YWxsZWQgPT0gMSkKLQl7Ci0JICBwcmludGsoIkRUMzE1NTogRnJlZWluZyBpcnEgJWQgZm9yIGRldmljZSAlZFxuIiwKLQkJICBkdDMxNTVfc3RhdHVzW2luZGV4XS5pcnEsIGluZGV4KTsKLQkgIGZyZWVfaXJxKGR0MzE1NV9zdGF0dXNbaW5kZXhdLmlycSwgKHZvaWQqKSZkdDMxNTVfc3RhdHVzW2luZGV4XSk7Ci0JfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlNjhjMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkgICAgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0qLwotCi0jaWZuZGVmIERUMzE1NV9EUlZfSU5DCi0jZGVmaW5lIERUMzE1NV9EUlZfSU5DCi0KLS8qIGtlcm5lbCBsb2dpY2FsIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGdyYWJiZXJzICovCi1leHRlcm4gdTggKmR0MzE1NV9sYmFzZVtNQVhCT0FSRFNdOwotCi0vKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHJhbSBidWZmZXIgKi8KLWV4dGVybiB1OCAqZHQzMTU1X2JiYXNlOwotCi0jaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotLyogd2FpdCBxdWV1ZSBmb3IgcmVhZHMgKi8KLWV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW01BWEJPQVJEU107Ci0jZW5kaWYKLQotLyogbnVtYmVyIG9mIGRldmljZXMgKi8KLWV4dGVybiB1MzIgbmRldmljZXM7Ci0KLWV4dGVybiBpbnQgZHQzMTU1X2Vycm5vOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzkyZTcxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCi0gKgkJCSAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotICoKLSAqIFRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbAotICogUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0vKgotICogVGhpcyBmaWxlIHByb3ZpZGVzIHNvbWUgYmFzaWMgcmVnaXN0ZXIgaW8gcm91dGluZXMuICBJdCBpcyBtb2RpZmllZCBmcm9tCi0gKiBkZW1vIGNvZGUgcHJvdmlkZWQgYnkgRGF0YSBUcmFuc2xhdGlvbnMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiZHQzMTU1LmgiCi0jaW5jbHVkZSAiZHQzMTU1X2lvLmgiCi0jaW5jbHVkZSAiZHQzMTU1X2Rydi5oIgotCi0KLS8qKioqKiogbG9jYWwgY29waWVzIG9mIGJvYXJkJ3MgMzIgYml0IHJlZ2lzdGVycyAqKioqKiovCi11MzIgZXZlbl9kbWFfc3RhcnRfcjsJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLwotdTMyIG9kZF9kbWFfc3RhcnRfcjsJLyogICAgICAgICAgICAgICAuLiAqLwotdTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCi11MzIgb2RkX2RtYV9zdHJpZGVfcjsJLyogICAgICAgICAgICAgICAuLiAqLwotdTMyIGV2ZW5fcGl4ZWxfZm10X3I7Ci11MzIgb2RkX3BpeGVsX2ZtdF9yOwotCi1GSUZPX1RSSUdHRVJfUgkJZmlmb190cmlnZ2VyX3I7Ci1YRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7Ci1DU1IxX1IJCQljc3IxX3I7Ci1SRVRSWV9XQUlUX0NOVF9SCXJldHJ5X3dhaXRfY250X3I7Ci1JTlRfQ1NSX1IJCWludF9jc3JfcjsKLQotdTMyIGV2ZW5fZmxkX21hc2tfcjsKLXUzMiBvZGRfZmxkX21hc2tfcjsKLQotTUFTS19MRU5HVEhfUgkJbWFza19sZW5ndGhfcjsKLUZJRk9fRkxBR19DTlRfUgkJZmlmb19mbGFnX2NudF9yOwotSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKLUlJQ19DU1IxX1IJCWlpY19jc3IxX3I7Ci1JSUNfQ1NSMl9SCQlpaWNfY3NyMl9yOwotRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKLURNQV9VUFBFUl9MTVRfUgkJb2RkX2RtYV91cHBlcl9sbXRfcjsKLQotCi0KLS8qKioqKioqKiBsb2NhbCBjb3BpZXMgb2YgYm9hcmQncyA4IGJpdCBJMkMgcmVnaXN0ZXJzICoqKioqKi8KLUkyQ19DU1IyIGkyY19jc3IyOwotSTJDX0VWRU5fQ1NSIGkyY19ldmVuX2NzcjsKLUkyQ19PRERfQ1NSIGkyY19vZGRfY3NyOwotSTJDX0NPTkZJRyBpMmNfY29uZmlnOwotdTggaTJjX2R0X2lkOwotdTggaTJjX3hfY2xpcF9zdGFydDsKLXU4IGkyY195X2NsaXBfc3RhcnQ7Ci11OCBpMmNfeF9jbGlwX2VuZDsKLXU4IGkyY195X2NsaXBfZW5kOwotdTggaTJjX2FkX2FkZHI7Ci11OCBpMmNfYWRfbHV0OwotSTJDX0FEX0NNRCBpMmNfYWRfY21kOwotdTggaTJjX2RpZ19vdXQ7Ci11OCBpMmNfcG1fbHV0X2FkZHI7Ci11OCBpMmNfcG1fbHV0X2RhdGE7Ci0KLS8qCi0gKiB3YWl0X2lic3ljbHIoKQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkL3dyaXRlIHRpbWluZyBhbmQgci93IHRpbWVvdXQgZXJyb3IKLSAqLwotc3RhdGljIGludCB3YWl0X2lic3ljbHIodTggKmxwUmVnKQotewotCS8qIHdhaXQgMTAwIG1pY3Jvc2Vjb25kcyAqLwotCXVkZWxheSgxMDBMKTsKLQkvKiBfX2RlbGF5KGxvb3BzX3Blcl9zZWMvMTAwMDApOyAqLwotCi0JUmVhZE1SZWcobHBSZWcgKyBJSUNfQ1NSMiwgaWljX2NzcjJfci5yZWcpOwotCWlmIChpaWNfY3NyMl9yLmZsZC5ORVdfQ1lDTEUpIHsKLQkJLyogaWYgTkVXX0NZQ0xFIGRpZG4ndCBjbGVhciAqLwotCQkvKiBUSU1FT1VUIEVSUk9SICovCi0JCWR0MzE1NV9lcnJubyA9IERUX0VSUl9JMkNfVElNRU9VVDsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JcmV0dXJuIDA7CS8qIG5vIGVycm9yICovCi19Ci0KLS8qCi0gKiBXcml0ZUkyQygpCi0gKgotICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHdyaXRpbmcgdG8gOC1iaXQgRFQzMTU1IHJlZ2lzdGVycwotICoKLSAqIDFzdCBwYXJhbWV0ZXIgaXMgcG9pbnRlciB0byAzMi1iaXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCi0gKiAybmQgcGFyYW1ldGVyIGlzIHJlZy4gaW5kZXg7Ci0gKiAzcmQgaXMgdmFsdWUgdG8gYmUgd3JpdHRlbgotICovCi1pbnQgV3JpdGVJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4IGJ5VmFsKQotewotCS8qIHJlYWQgMzIgYml0IElJQ19DU1IyIHJlZ2lzdGVyIGRhdGEgaW50byB1bmlvbiAqLwotCi0JUmVhZE1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7Ci0KLQkvKiBmb3Igd3JpdGUgb3BlcmF0aW9uICovCi0JaWljX2NzcjJfci5mbGQuRElSX1JEICAgICAgPSAwOwotCS8qIEkyQyBhZGRyZXNzIG9mIEkyQyByZWdpc3RlcjogKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfQUREUiAgICA9IHdJcmVnSW5kZXg7Ci0JLyogOCBiaXQgZGF0YSB0byBiZSB3cml0dGVuIHRvIEkyQyByZWcgKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfV1JfREFUQSA9IGJ5VmFsOwotCS8qIHdpbGwgc3RhcnQgYSBkaXJlY3QgSTJDIGN5Y2xlOiAqLwotCWlpY19jc3IyX3IuZmxkLk5FV19DWUNMRSAgID0gMTsKLQotCS8qIHhmZXIgdW5pb24gZGF0YSBpbnRvIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciAqLwotCVdyaXRlTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKLQotCS8qIHdhaXQgZm9yIElJQyBjeWNsZSB0byBmaW5pc2ggKi8KLQlyZXR1cm4gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKLX0KLQotLyoKLSAqIFJlYWRJMkMoKQotICoKLSAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkaW5nIGZyb20gOC1iaXQgRFQzMTU1IHJlZ2lzdGVycwotICoKLSAqIDFzdCBwYXJhbWV0ZXIgaXMgcG9pbnRlciB0byAzMi1iaXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCi0gKiAybmQgcGFyYW1ldGVyIGlzIHJlZy4gaW5kZXg7Ci0gKiAzcmQgaXMgYWRycyBvZiB2YWx1ZSB0byBiZSByZWFkCi0gKi8KLWludCBSZWFkSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCAqYnlWYWwpCi17Ci0JaW50IHdyaXRlc3RhdDsJLyogc3RhdHVzIGZvciByZXR1cm4gKi8KLQotCS8qICByZWFkIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciBkYXRhIGludG8gdW5pb24gKi8KLQlSZWFkTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKLQotCS8qICBmb3IgcmVhZCBvcGVyYXRpb24gKi8KLQlpaWNfY3NyMl9yLmZsZC5ESVJfUkQgICAgID0gMTsKLQotCS8qICBJMkMgYWRkcmVzcyBvZiBJMkMgcmVnaXN0ZXI6ICovCi0JaWljX2NzcjJfci5mbGQuRElSX0FERFIgICA9IHdJcmVnSW5kZXg7Ci0KLQkvKiAgd2lsbCBzdGFydCBhIGRpcmVjdCBJMkMgY3ljbGU6ICovCi0JaWljX2NzcjJfci5mbGQuTkVXX0NZQ0xFICA9IDE7Ci0KLQkvKiAgeGZlciB1bmlvbidzIGRhdGEgaW50byAzMiBiaXQgSUlDX0NTUjIgcmVnaXN0ZXIgKi8KLQlXcml0ZU1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7Ci0KLQkvKiB3YWl0IGZvciBJSUMgY3ljbGUgdG8gZmluaXNoICovCi0Jd3JpdGVzdGF0ID0gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKLQotCS8qIE5leHQgMiBjb21tYW5kcyByZWFkIDMyIGJpdCBJSUNfQ1NSMSByZWdpc3RlcidzIGRhdGEgaW50byB1bmlvbiAqLwotCS8qIGZpcnN0IHJlYWQgZGF0YSBpcyBpbiBJSUNfQ1NSMSAqLwotCVJlYWRNUmVnKChscFJlZyArIElJQ19DU1IxKSwgaWljX2NzcjFfci5yZWcpOwotCi0JLyogbm93IGdldCBkYXRhIHU4IG91dCBvZiByZWdpc3RlciAqLwotCSpieVZhbCA9ICh1OCkgaWljX2NzcjFfci5mbGQuUkRfREFUQTsKLQotCXJldHVybiB3cml0ZXN0YXQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFhMjUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0KLUNvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkgICAgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQotCi1UaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAotYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi1wdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLVRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKLXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKLW9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi1hbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLU1BIDAyMTExLTEzMDcgVVNBCi0KLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgIFByb2dyYW1tZXIgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIDI0LUp1bC0yMDAyIFNTICAgICAgIEdQTCBsaWNlbmNlLgotCi0qLwotCi0vKiBUaGlzIGNvZGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGV4YW1wbGVzIHByb3ZpZGVkIGJ5IERhdGEgVHJhbnNsYXRpb25zLiovCi0KLSNpZm5kZWYgRFQzMTU1X0lPX0lOQwotI2RlZmluZSBEVDMxNTVfSU9fSU5DCi0KLS8qIG1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzICovCi0KLSNkZWZpbmUgV3JpdGVNUmVnKEFkZHJlc3MsIERhdGEpCSgqKCh1MzIgKikoQWRkcmVzcykpID0gRGF0YSkKLSNkZWZpbmUgUmVhZE1SZWcoQWRkcmVzcywgRGF0YSkJCShEYXRhID0gKigodTMyICopKEFkZHJlc3MpKSkKLQotLyoqKioqKioqKioqKioqKioqIDMyIGJpdCByZWdpc3RlciBnbG9iYWxzICAqKioqKioqKioqKioqKi8KLQotLyogIG9mZnNldHMgZm9yIDMyLWJpdCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIEVWRU5fRE1BX1NUQVJUCQkweDAwMAotI2RlZmluZSBPRERfRE1BX1NUQVJUCQkweDAwQwotI2RlZmluZSBFVkVOX0RNQV9TVFJJREUJCTB4MDE4Ci0jZGVmaW5lIE9ERF9ETUFfU1RSSURFCQkweDAyNAotI2RlZmluZSBFVkVOX1BJWEVMX0ZNVAkJMHgwMzAKLSNkZWZpbmUgT0REX1BJWEVMX0ZNVAkJMHgwMzQKLSNkZWZpbmUgRklGT19UUklHR0VSCQkweDAzOAotI2RlZmluZSBYRkVSX01PREUJCTB4MDNDCi0jZGVmaW5lIENTUjEJCQkweDA0MAotI2RlZmluZSBSRVRSWV9XQUlUX0NOVAkJMHgwNDQKLSNkZWZpbmUgSU5UX0NTUgkJCTB4MDQ4Ci0jZGVmaW5lIEVWRU5fRkxEX01BU0sJCTB4MDRDCi0jZGVmaW5lIE9ERF9GTERfTUFTSwkJMHgwNTAKLSNkZWZpbmUgTUFTS19MRU5HVEgJCTB4MDU0Ci0jZGVmaW5lIEZJRk9fRkxBR19DTlQJCTB4MDU4Ci0jZGVmaW5lIElJQ19DTEtfRFVSCQkweDA1QwotI2RlZmluZSBJSUNfQ1NSMQkJMHgwNjAKLSNkZWZpbmUgSUlDX0NTUjIJCTB4MDY0Ci0jZGVmaW5lIEVWRU5fRE1BX1VQUFJfTE1UCTB4MDhDCi0jZGVmaW5lIE9ERF9ETUFfVVBQUl9MTVQJMHgwOTAKLQotI2RlZmluZSBDTEtfRFVSX1ZBTAkJMHgwMTAxMDEwMQotCi0KLQotLyoqKioqKioqIEFzc2lnbm1lbnRzIGFuZCBUeXBlZGVmcyBmb3IgMzIgYml0IE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXJzICoqKioqKioqLwotCi10eXBlZGVmIHVuaW9uIGZpZm9fdHJpZ2dlcl90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUEFDS0VEOjY7Ci0JCXUzMiAgICAgICA6OTsKLQkJdTMyIFBMQU5FUjo3OwotCQl1MzIgICAgICAgOjk7Ci0JfSBmbGQ7Ci19IEZJRk9fVFJJR0dFUl9SOwotCi10eXBlZGVmIHVuaW9uIHhmZXJfbW9kZV90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgICAgICAgICAgICAgOjI7Ci0JCXUzMiBGSUVMRF9UT0dHTEU6MTsKLQkJdTMyICAgICAgICAgICAgIDo1OwotCQl1MzIgICAgICAgICAgICAgOjI7Ci0JCXUzMiAgICAgICAgICAgICA6MjI7Ci0JfSBmbGQ7Ci19IFhGRVJfTU9ERV9SOwotCi10eXBlZGVmIHVuaW9uIGNzcjFfdGFnIHsKLQl1MzIgICByZWc7Ci0Jc3RydWN0IHsKLQkJdTMyIENBUF9DT05UX0VWRToxOwotCQl1MzIgQ0FQX0NPTlRfT0REOjE7Ci0JCXUzMiBDQVBfU05HTF9FVkU6MTsKLQkJdTMyIENBUF9TTkdMX09ERDoxOwotCQl1MzIgRkxEX0ROX0VWRSAgOjE7Ci0JCXUzMiBGTERfRE5fT0REICA6MTsKLQkJdTMyIFNSU1QgICAgICAgIDoxOwotCQl1MzIgRklGT19FTiAgICAgOjE7Ci0JCXUzMiBGTERfQ1JQVF9FVkU6MTsKLQkJdTMyIEZMRF9DUlBUX09ERDoxOwotCQl1MzIgQUREUl9FUlJfRVZFOjE7Ci0JCXUzMiBBRERSX0VSUl9PREQ6MTsKLQkJdTMyIENSUFRfRElTICAgIDoxOwotCQl1MzIgUkFOR0VfRU4gICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICA6MTY7Ci0JfSBmbGQ7Ci19IENTUjFfUjsKLQotdHlwZWRlZiB1bmlvbiByZXRyeV93YWl0X2NudF90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUlRSWV9XQUlUX0NOVDo4OwotCQl1MzIgICAgICAgICAgICAgIDoyNDsKLQl9IGZsZDsKLX0gUkVUUllfV0FJVF9DTlRfUjsKLQotdHlwZWRlZiB1bmlvbiBpbnRfY3NyX3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBGTERfRU5EX0VWRSAgIDoxOwotCQl1MzIgRkxEX0VORF9PREQgICA6MTsKLQkJdTMyIEZMRF9TVEFSVCAgICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICAgIDo1OwotCQl1MzIgRkxEX0VORF9FVkVfRU46MTsKLQkJdTMyIEZMRF9FTkRfT0REX0VOOjE7Ci0JCXUzMiBGTERfU1RBUlRfRU4gIDoxOwotCQl1MzIgICAgICAgICAgICAgICA6MjE7Ci0JfSBmbGQ7Ci19IElOVF9DU1JfUjsKLQotdHlwZWRlZiB1bmlvbiBtYXNrX2xlbmd0aF90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgTUFTS19MRU5fRVZFOjU7Ci0JCXUzMiAgICAgICAgICAgICA6MTE7Ci0JCXUzMiBNQVNLX0xFTl9PREQ6NTsKLQkJdTMyICAgICAgICAgICAgIDoxMTsKLQl9IGZsZDsKLX0gTUFTS19MRU5HVEhfUjsKLQotdHlwZWRlZiB1bmlvbiBmaWZvX2ZsYWdfY250X3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBBRl9DT1VOVDo3OwotCQl1MzIgICAgICAgICA6OTsKLQkJdTMyIEFFX0NPVU5UOjc7Ci0JCXUzMiAgICAgICAgIDo5OwotCX0gZmxkOwotfSBGSUZPX0ZMQUdfQ05UX1I7Ci0KLXR5cGVkZWYgdW5pb24gaWljX2Nsa19kdXIgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgUEhBU0VfMTo4OwotCQl1MzIgUEhBU0VfMjo4OwotCQl1MzIgUEhBU0VfMzo4OwotCQl1MzIgUEhBU0VfNDo4OwotCX0gZmxkOwotfSBJSUNfQ0xLX0RVUl9SOwotCi10eXBlZGVmIHVuaW9uIGlpY19jc3IxX3RhZyB7Ci0JdTMyICAgcmVnOwotCXN0cnVjdCB7Ci0JCXUzMiBBVVRPX0VOICAgICA6MTsKLQkJdTMyIEJZUEFTUyAgICAgIDoxOwotCQl1MzIgU0RBX09VVCAgICAgOjE7Ci0JCXUzMiBTQ0xfT1VUICAgICA6MTsKLQkJdTMyICAgICAgICAgICAgIDo0OwotCQl1MzIgQVVUT19BQk9SVCAgOjE7Ci0JCXUzMiBESVJFQ1RfQUJPUlQ6MTsKLQkJdTMyIFNEQV9JTiAgICAgIDoxOwotCQl1MzIgU0NMX0lOICAgICAgOjE7Ci0JCXUzMiAgICAgICAgICAgICA6NDsKLQkJdTMyIEFVVE9fQUREUiAgIDo4OwotCQl1MzIgUkRfREFUQSAgICAgOjg7Ci0JfSBmbGQ7Ci19IElJQ19DU1IxX1I7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpaWNfY3NyMl90YWcKLSAqLwotdHlwZWRlZiB1bmlvbiBpaWNfY3NyMl90YWcgewotCXUzMiAgIHJlZzsKLQlzdHJ1Y3QgewotCQl1MzIgRElSX1dSX0RBVEEgOjg7Ci0JCXUzMiBESVJfU1VCX0FERFI6ODsKLQkJdTMyIERJUl9SRCAgICAgIDoxOwotCQl1MzIgRElSX0FERFIgICAgOjc7Ci0JCXUzMiBORVdfQ1lDTEUgICA6MTsKLQkJdTMyICAgICAgICAgICAgIDo3OwotCX0gZmxkOwotfSAgSUlDX0NTUjJfUjsKLQotLyogdXNlIGZvciBib3RoIEVWRU4gYW5kIE9ERCBETUEgVVBQRVIgTElNSVRTICovCi0KLS8qCi0gKiBkbWFfdXBwZXJfbG10X3RhZwotICovCi10eXBlZGVmIHVuaW9uIGRtYV91cHBlcl9sbXRfdGFnICAgewotCXUzMiByZWc7Ci0Jc3RydWN0IHsKLQkJdTMyIERNQV9VUFBFUl9MTVRfVkFMOjI0OwotCQl1MzIgICAgICAgICAgICAgICAgICA6ODsKLQl9IGZsZDsKLX0gRE1BX1VQUEVSX0xNVF9SOwotCi0KLS8qCi0gKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDMyIGJpdCByZWdpc3RlcnMKLSAqLwotZXh0ZXJuIHUzMiBldmVuX2RtYV9zdGFydF9yOwkJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLwotZXh0ZXJuIHUzMiBvZGRfZG1hX3N0YXJ0X3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICovCi1leHRlcm4gdTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCi1leHRlcm4gdTMyIG9kZF9kbWFfc3RyaWRlX3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgICovCi1leHRlcm4gdTMyIGV2ZW5fcGl4ZWxfZm10X3I7Ci1leHRlcm4gdTMyIG9kZF9waXhlbF9mbXRfcjsKLQotZXh0ZXJuIEZJRk9fVFJJR0dFUl9SCQlmaWZvX3RyaWdnZXJfcjsKLWV4dGVybiBYRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7Ci1leHRlcm4gQ1NSMV9SCQkJY3NyMV9yOwotZXh0ZXJuIFJFVFJZX1dBSVRfQ05UX1IJCXJldHJ5X3dhaXRfY250X3I7Ci1leHRlcm4gSU5UX0NTUl9SCQlpbnRfY3NyX3I7Ci0KLWV4dGVybiB1MzIgZXZlbl9mbGRfbWFza19yOwotZXh0ZXJuIHUzMiBvZGRfZmxkX21hc2tfcjsKLQotZXh0ZXJuIE1BU0tfTEVOR1RIX1IJCW1hc2tfbGVuZ3RoX3I7Ci1leHRlcm4gRklGT19GTEFHX0NOVF9SCQlmaWZvX2ZsYWdfY250X3I7Ci1leHRlcm4gSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKLWV4dGVybiBJSUNfQ1NSMV9SCQlpaWNfY3NyMV9yOwotZXh0ZXJuIElJQ19DU1IyX1IJCWlpY19jc3IyX3I7Ci1leHRlcm4gRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKLWV4dGVybiBETUFfVVBQRVJfTE1UX1IJCW9kZF9kbWFfdXBwZXJfbG10X3I7Ci0KLQotCi0vKioqKioqKioqKioqKioqKiogOCBiaXQgSTJDIHJlZ2lzdGVyIGdsb2JhbHMgICoqKioqKioqKioqLwotI2RlZmluZSBDU1IyCQkweDAxMAkvKiBpbmRpY2VzIG9mIDgtYml0IEkyQyBtYXBwZWQgcmVnJ3MqLwotI2RlZmluZSBFVkVOX0NTUgkweDAxMQotI2RlZmluZSBPRERfQ1NSCQkweDAxMgotI2RlZmluZSBDT05GSUcJCTB4MDEzCi0jZGVmaW5lIERUX0lECQkweDAxRgotI2RlZmluZSBYX0NMSVBfU1RBUlQJMHgwMjAKLSNkZWZpbmUgWV9DTElQX1NUQVJUCTB4MDIyCi0jZGVmaW5lIFhfQ0xJUF9FTkQJMHgwMjQKLSNkZWZpbmUgWV9DTElQX0VORAkweDAyNgotI2RlZmluZSBBRF9BRERSCQkweDAzMAotI2RlZmluZSBBRF9MVVQJCTB4MDMxCi0jZGVmaW5lIEFEX0NNRAkJMHgwMzIKLSNkZWZpbmUgRElHX09VVAkJMHgwNDAKLSNkZWZpbmUgUE1fTFVUX0FERFIJMHgwNTAKLSNkZWZpbmUgUE1fTFVUX0RBVEEJMHgwNTEKLQotCi0vKioqKioqKiogQXNzaWdubWVudHMgYW5kIFR5cGVkZWZzIGZvciA4IGJpdCBJMkMgUmVnaXN0ZXJzKioqKioqKioqKioqKioqKioqKiovCi0KLXR5cGVkZWYgdW5pb24gaTJjX2NzcjJfdGFnIHsKLQl1OCByZWc7Ci0Jc3RydWN0IHsKLQkJdTggQ0hST01fRklMOjE7Ci0JCXU4IFNZTkNfU05UTDoxOwotCQl1OCBIWjUwOjE7Ci0JCXU4IFNZTkNfUFJFU0VOVDoxOwotCQl1OCBCVVNZX0VWRToxOwotCQl1OCBCVVNZX09ERDoxOwotCQl1OCBESVNQX1BBU1M6MTsKLQl9IGZsZDsKLX0gSTJDX0NTUjI7Ci0KLXR5cGVkZWYgdW5pb24gaTJjX2V2ZW5fY3NyX3RhZyB7Ci0JdTggICAgcmVnOwotCXN0cnVjdCB7Ci0JCXU4IERPTkVfRVZFIDoxOwotCQl1OCBTTkdMX0VWRSA6MTsKLQkJdTggRVJST1JfRVZFOjE7Ci0JCXU4ICAgICAgICAgIDo1OwotCX0gZmxkOwotfSBJMkNfRVZFTl9DU1I7Ci0KLXR5cGVkZWYgdW5pb24gaTJjX29kZF9jc3JfdGFnIHsKLQl1OCByZWc7Ci0Jc3RydWN0IHsKLQkJdTggRE9ORV9PREQ6MTsKLQkJdTggU05HTF9PREQ6MTsKLQkJdTggRVJST1JfT0REOjE7Ci0JCXU4IDo1OwotCX0gZmxkOwotfSBJMkNfT0REX0NTUjsKLQotdHlwZWRlZiB1bmlvbiBpMmNfY29uZmlnX3RhZyB7Ci0JdTggcmVnOwotCXN0cnVjdCB7Ci0JCXU4IEFDUV9NT0RFOjI7Ci0JCXU4IEVYVF9UUklHX0VOOjE7Ci0JCXU4IEVYVF9UUklHX1BPTDoxOwotCQl1OCBIX1NDQUxFOjE7Ci0JCXU4IENMSVA6MTsKLQkJdTggUE1fTFVUX1NFTDoxOwotCQl1OCBQTV9MVVRfUEdNOjE7Ci0JfSBmbGQ7Ci19IEkyQ19DT05GSUc7Ci0KLQotdHlwZWRlZiB1bmlvbiBpMmNfYWRfY21kX3RhZyB7Ci0JLyogYml0cyBjYW4gaGF2ZSAzIGRpZmZlcmVudCBtZWFuaW5ncyBkZXBlbmRpbmcgb24gdmFsdWUgb2YgQURfQUREUiAqLwotCXU4IHJlZzsKLQkvKiBCdDI1MiBDb21tYW5kIFJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMGggKi8KLQlzdHJ1Y3QgewotCQl1OCAgICAgICAgICAgICA6MjsKLQkJdTggU1lOQ19MVkxfU0VMOjI7Ci0JCXU4IFNZTkNfQ05MX1NFTDoyOwotCQl1OCBESUdJVElaRV9DTkxfU0VMMToyOwotCQl9IGJ0MjUyX2NvbW1hbmQ7Ci0KLQkvKiBCdDI1MiBJT1VUMCByZWdpc3RlciBpZiBBRF9BRERSID0gMDFoICovCi0Jc3RydWN0IHsKLQkJdTggSU9VVF9EQVRBOjg7Ci0JfSBidDI1Ml9pb3V0MDsKLQotCS8qIEJUMjUyIElPVVQxIHJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMmggKi8KLQlzdHJ1Y3QgewotCQl1OCBJT1VUX0RBVEE6ODsKLQl9IGJ0MjUyX2lvdXQxOwotfSBJMkNfQURfQ01EOwotCi0KLS8qKioqKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDggYml0IEkyQyByZWdpc3RlcnMgKioqLwotCi1leHRlcm4gSTJDX0NTUjIJCQlpMmNfY3NyMjsKLWV4dGVybiBJMkNfRVZFTl9DU1IJCWkyY19ldmVuX2NzcjsKLWV4dGVybiBJMkNfT0REX0NTUgkJaTJjX29kZF9jc3I7Ci1leHRlcm4gSTJDX0NPTkZJRwkJaTJjX2NvbmZpZzsKLWV4dGVybiB1OAkJCWkyY19kdF9pZDsKLWV4dGVybiB1OAkJCWkyY194X2NsaXBfc3RhcnQ7Ci1leHRlcm4gdTgJCQlpMmNfeV9jbGlwX3N0YXJ0OwotZXh0ZXJuIHU4CQkJaTJjX3hfY2xpcF9lbmQ7Ci1leHRlcm4gdTgJCQlpMmNfeV9jbGlwX2VuZDsKLWV4dGVybiB1OAkJCWkyY19hZF9hZGRyOwotZXh0ZXJuIHU4CQkJaTJjX2FkX2x1dDsKLWV4dGVybiBJMkNfQURfQ01ECQlpMmNfYWRfY21kOwotZXh0ZXJuIHU4CQkJaTJjX2RpZ19vdXQ7Ci1leHRlcm4gdTgJCQlpMmNfcG1fbHV0X2FkZHI7Ci1leHRlcm4gdTgJCQlpMmNfcG1fbHV0X2RhdGE7Ci0KLS8qIEZ1bmN0aW9ucyBmb3IgR2xvYmFsIHVzZSAqLwotCi0vKiBhY2Nlc3MgOC1iaXQgSUlDIHJlZ2lzdGVycyAqLwotCi1leHRlcm4gaW50IFJlYWRJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4ICpieVZhbCk7Ci1leHRlcm4gaW50IFdyaXRlSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCBieVZhbCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNkZGM5Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYworKysgL2Rldi9udWxsCkBAIC0xLDUwOSArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgMTk5NiwyMDAyLDIwMDUgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAotCQkJCUphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXksIEdyZWcgU2hhcnAKLQotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKLWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi1MaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi11c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci1vZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi1NQSAwMjExMS0xMzA3IFVTQQotCi0gICBGaWxlOiBkdDMxNTVfaXNyLmMKLVB1cnBvc2U6IEJ1ZmZlciBtYW5hZ2VtZW50IHJvdXRpbmVzLCBhbmQgb3RoZXIgcm91dGluZXMgZm9yIHRoZSBJU1IKLQkJKHRoZSBhY3R1YWwgaXNyIGlzIGluIGR0MzE1NV9kcnYuYykKLQotLS0gQ2hhbmdlcyAtLQotCi0gIERhdGUgICAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAwMi1BcHItMjAwMiBTUyAgICAgICAgTW9kcyB0byBtYWtlIHdvcmsgd2l0aCBzZXBhcmF0ZSBhbGxvY2F0b3IKLQkJCW1vZHVsZTsgTWVyZ2VkIEpvaG4gUm9sbCdzIG1vZHMgdG8gbWFrZSB3b3JrIHdpdGgKLQkJCW11bHRpcGxlIGJvYXJkcy4KLSAgMTAtSnVsLTIwMDIgR0NTICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2Ygc2V0dXBfYnVmZmVycyB0byBkaXNhbGxvdwotCQkJYnVmZmVycyB3aGljaCBzcGFuIGEgNE1CIGJvdW5kYXJ5LgotICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCi0gIDMwLUp1bC0yMDAyIE5KQyAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBidWZmZXIgbG9vcC4KLSAgMzEtSnVsLTIwMDIgTkpDICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2YgYnVmZmVyIG1hbmFnZW1lbnQKLSAgMDItQXVnLTIwMDIgTkpDICAgICAgIEluY2x1ZGluZyBzbGFiLmggaW5zdGVhZCBvZiBtYWxsb2MuaCAobm8gd2FybmluZykuCi0JCQlBbHNvLCBhbGxvY2F0b3JfaW5pdCgpIG5vdyByZXR1cm5zIGFsbG9jYXRvcl9tYXgKLQkJCXNvIGNsZWFuZWQgdXAgYWxsb2NhdGVfYnVmZmVycygpIGFjY29yZGluZ2x5LgotICAwOC1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgotCi0qLwotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgImR0MzE1NS5oIgotI2luY2x1ZGUgImR0MzE1NV9kcnYuaCIKLSNpbmNsdWRlICJkdDMxNTVfaW8uaCIKLSNpbmNsdWRlICJkdDMxNTVfaXNyLmgiCi0jaW5jbHVkZSAiYWxsb2NhdG9yLmgiCi0KLSNkZWZpbmUgRk9VUl9NQiAgICAgICAgICgweDA0MDAwMDApICAvKiBDYW4ndCBETUEgYWNjcm9zcyBhIDRNQiBib3VuZGFyeSEqLwotI2RlZmluZSBVUFBFUl8xMF9CSVRTICAgKDB4M0ZGPDwyMikgIC8qIENhbid0IERNQSBhY2Nyb3NzIGEgNE1CIGJvdW5kYXJ5ISovCi0KLQotLyogUG9pbnRlciBpbnRvIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIGJ1ZmZlcnMgKi8KLXN0cnVjdCBkdDMxNTVfZmJ1ZmZlciAqZHQzMTU1X2ZidWZmZXJbTUFYQk9BUkRTXSA9IHtOVUxMCi0jaWYgTUFYQk9BUkRTID09IDIKLQkJCQkJCSAgICAgICwgTlVMTAotI2VuZGlmCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAotICoKLSAqIFNvbWUgaGFuZHkgZnVuY3Rpb25zIHVzaW5nIHRoZSBidWZmZXJpbmcgc3RydWN0dXJlLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFyZV9lbXB0eV9idWZmZXJzCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbCBhcmVfZW1wdHlfYnVmZmVycyhpbnQgbSkKLXsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5lbXB0eV9sZW47Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHVzaF9lbXB0eQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqIFRoaXMgaXMgc2xpZ2h0bHkgY29uZnVzaW5nLiAgVGhlIG51bWJlciBlbXB0eV9sZW4gaXMgdGhlIGxpdGVyYWwgIwotICogb2YgZW1wdHkgYnVmZmVycy4gIEFmdGVyIGNhbGxpbmcsIGVtcHR5X2xlbi0xIGlzIHRoZSBpbmRleCBpbnRvIHRoZQotICogZW1wdHkgYnVmZmVyIHN0YWNrLiAgU28sIGlmIGVtcHR5X2xlbiA9PSAxLCB0aGVyZSBpcyBvbmUgZW1wdHkgYnVmZmVyLAotICogZ2l2ZW4gYnkgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2J1ZmZlcnNbMF0uCi0gKiBlbXB0eV9idWZmZXJzIHNob3VsZCBuZXZlciBmaWxsIHVwLCB0aG91Z2ggdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHVzaF9lbXB0eShpbnQgaW5kZXgsIGludCBtKQotewotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuXSA9IGluZGV4OwotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuKys7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcG9wX2VtcHR5KG0pCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgcG9wX2VtcHR5KGludCBtKQotewotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuLS07Ci0gIHJldHVybiBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuXTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGlzX3JlYWR5X2J1Zl9lbXB0eShtKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKiovCi1ib29sIGlzX3JlYWR5X2J1Zl9lbXB0eShpbnQgbSkKLXsKLSAgcmV0dXJuICgoZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2xlbikgPT0gMCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBpc19yZWFkeV9idWZfZnVsbChtKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICogdGhpcyBzaG91bGQgKm5ldmVyKiBiZSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYWN0aXZlLCBsb2NrZWQgb3IgZW1wdHkKLSAqIGJ1ZmZlcnMsIHNpbmNlIGl0IGNvcnJlc3BvbmRzIHRvIG5idWZmZXJzIHJlYWR5IGJ1ZmZlcnMhIQotICogNy8zMS8wMjogdG90YWwgcmV3cml0ZS4gLS1OSkMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqLwotYm9vbCBpc19yZWFkeV9idWZfZnVsbChpbnQgbSkKLXsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gPT0gZHQzMTU1X2ZidWZmZXJbbV0tPm5idWZmZXJzOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIHB1c2hfcmVhZHkobSwgYnVmZmVyKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHVzaF9yZWFkeShpbnQgbSwgaW50IGluZGV4KQotewotICBpbnQgaGVhZCA9IGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9oZWFkOwotCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9xdWVbaGVhZF0gPSBpbmRleDsKLSAgZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAoKGhlYWQgKyAxKSAlCi0JCQkJICAgICAgKGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycykpOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfbGVuKys7Ci0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBnZXRfdGFpbCgpCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKgotICogU2ltcGx5IGNvbXB0dXRlcyB0aGUgdGFpbCBnaXZlbiB0aGUgaGVhZCBhbmQgdGhlIGxlbmd0aC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgZ2V0X3RhaWwoaW50IG0pCi17Ci0gIHJldHVybiAoZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgLQotCSAgIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gKwotCSAgIGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycyklCi0JICAoZHQzMTU1X2ZidWZmZXJbbV0tPm5idWZmZXJzKTsKLX0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcG9wX3JlYWR5KCkKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqCi0gKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGVyZSBpcyBhIHJlYWR5IGJ1ZmZlciByZWFkeS4uLiBzaG91bGQKLSAqIGJlIGNoZWNrZWQgKGUuZy4gd2l0aCBpc19yZWFkeV9idWZfZW1wdHkoKSAgcHJpb3IgdG8gY2FsbC4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludCBwb3BfcmVhZHkoaW50IG0pCi17Ci0gIGludCB0YWlsOwotICB0YWlsID0gZ2V0X3RhaWwobSk7Ci0gIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4tLTsKLSAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9xdWVbdGFpbF07Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBwcmludHF1ZXMKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgcHJpbnRxdWVzKGludCBtKQotewotICBpbnQgaGVhZCA9IGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9oZWFkOwotICBpbnQgdGFpbDsKLSAgaW50IG51bSA9IGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVyczsKLSAgaW50IGZyYW1lX2luZGV4OwotICBpbnQgaW5kZXg7Ci0KLSAgdGFpbCA9IGdldF90YWlsKG0pOwotCi0gIHByaW50aygiXG4gUjoiKTsKLSAgICBmb3IgKGluZGV4ID0gdGFpbDsgaW5kZXggIT0gaGVhZDsgaW5kZXgrKywgaW5kZXggPSBpbmRleCAlIChudW0pKSB7Ci0JZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfcXVlW2luZGV4XTsKLQlwcmludGsoIiAlZCAiLCBmcmFtZV9pbmRleCk7Ci0gICAgfQotCi0gIHByaW50aygiXG4gRToiKTsKLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuOyBpbmRleCsrKSB7Ci0JZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1tpbmRleF07Ci0JcHJpbnRrKCIgJWQgIiwgZnJhbWVfaW5kZXgpOwotICAgIH0KLQotICBmcmFtZV9pbmRleCA9IGR0MzE1NV9mYnVmZmVyW21dLT5hY3RpdmVfYnVmOwotICBwcmludGsoIlxuIEE6ICVkIiwgZnJhbWVfaW5kZXgpOwotCi0gIGZyYW1lX2luZGV4ID0gZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWY7Ci0gIHByaW50aygiXG4gTDogJWRcbiIsIGZyYW1lX2luZGV4KTsKLQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFkanVzdF80TUIKLSAqCi0gKiAgSWYgYSBidWZmZXIgaW50ZXJzZWN0cyB0aGUgNE1CIGJvdW5kYXJ5LCBwdXNoCi0gKiAgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAqICBuZXh0IDRNQiBjaHVuayAoYXNzdW1pbmcgYnVmc2l6ZSA8IDRNQikuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11MzIgYWRqdXN0XzRNQih1MzIgYnVmX2FkZHIsIHUzMiBidWZzaXplKQotewotICAgIGlmICgoKGJ1Zl9hZGRyK2J1ZnNpemUpICYgVVBQRVJfMTBfQklUUykgIT0gKGJ1Zl9hZGRyICYgVVBQRVJfMTBfQklUUykpCi0JcmV0dXJuIChidWZfYWRkcitidWZzaXplKSAmIFVQUEVSXzEwX0JJVFM7Ci0gICAgZWxzZQotCXJldHVybiBidWZfYWRkcjsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGFsbG9jYXRlX2J1ZmZlcnMKLSAqCi0gKiAgVHJ5IHRvIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgZm9yIGFsbCByZXF1ZXN0ZWQKLSAqICBidWZmZXJzLiAgSWYgdGhlcmUgaXMgbm90IGVub3VnaCBmcmVlIHNwYWNlCi0gKiAgdHJ5IGZvciBsZXNzIG1lbW9yeS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgYWxsb2NhdGVfYnVmZmVycyh1MzIgKmJ1Zl9hZGRyLCB1MzIqIHRvdGFsX3NpemVfa2JzLAotCQkgICAgICAgdTMyIGJ1ZnNpemUpCi17Ci0gIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSBndWFyYW50ZWVkIHRvIGhvbGQgYWxsCi0gICAgIE1BWEJVRkZFUlMgc3VjaCB0aGF0IG5vIGJ1ZmZlciBjcm9zc2VzIHRoZSA0TUIgYm91bmRhcnkuCi0gICAgIFN0b3JlIHRoaXMgdmFsdWUgaW4gdGhlIHZhcmlhYmxlICJmdWxsX3NpemUiICovCi0KLSAgdTMyIGFsbG9jYXRvcl9tYXg7Ci0gIHUzMiBidWZzX3Blcl9jaHVuayA9IChGT1VSX01CIC8gYnVmc2l6ZSk7Ci0gIHUzMiBmaWxsZWRfY2h1bmtzID0gKE1BWEJVRkZFUlMtMSkgLyBidWZzX3Blcl9jaHVuazsKLSAgdTMyIGxlZnRvdmVyX2J1ZnMgPSBNQVhCVUZGRVJTIC0gZmlsbGVkX2NodW5rcyAqIGJ1ZnNfcGVyX2NodW5rOwotCi0gIHUzMiBmdWxsX3NpemUgPSBidWZzaXplICAgICAgLyogcG9zc2libHkgdW51c2FibGUgcGFydCBvZiAxc3QgY2h1bmsgKi8KLSAgICArIGZpbGxlZF9jaHVua3MgKiBGT1VSX01CICAgLyogbWF4ICMgb2YgY29tcGxldGVseSBmaWxsZWQgNG1iIGNodW5rcyAqLwotICAgICsgbGVmdG92ZXJfYnVmcyAqIGJ1ZnNpemU7ICAvKiB0aGVzZSBidWZmcyB3aWxsIGJlIGluIGEgcGFydGx5IGZpbGxlZAotCQkJCSAgIGNodW5rIGF0IGJlZ2lubmluZyBvciBlbmQgKi8KLQotICB1MzIgZnVsbF9zaXplX2ticyA9IDEgKyAoZnVsbF9zaXplLTEpIC8gMTAyNDsKLSAgdTMyIG1pbl9zaXplX2ticyA9IDIqbmRldmljZXMqYnVmc2l6ZSAvIDEwMjQ7Ci0gIHUzMiBzaXplX2ticzsKLQotICAvKiBOb3csIHRyeSB0byBhbGxvY2F0ZSBmdWxsX3NpemUuICBJZiB0aGlzIGZhaWxzLCBrZWVwIHRyeWluZyBmb3IKLSAgICAgbGVzcyAmIGxlc3MgbWVtb3J5IHVudGlsIGl0IHN1Y2NlZWRzLiAqLwotI2lmbmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgotICAvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgICAgICAgICAgICAqLwotICBhbGxvY2F0b3JfaW5pdCgmYWxsb2NhdG9yX21heCk7Ci0jZW5kaWYKLSAgc2l6ZV9rYnMgPSBmdWxsX3NpemVfa2JzOwotICAqYnVmX2FkZHIgPSAwOwotICBwcmludGsoIkRUMzE1NTogV2Ugd291bGQgbGlrZSB0byBnZXQ6ICVkIEtCXG4iLCBmdWxsX3NpemVfa2JzKTsKLSAgcHJpbnRrKCJEVDMxNTU6IC4uLmJ1dCBuZWVkIGF0IGxlYXN0OiAlZCBLQlxuIiwgbWluX3NpemVfa2JzKTsKLSAgcHJpbnRrKCJEVDMxNTU6IC4uLnRoZSBhbGxvY2F0b3IgaGFzOiAlZCBLQlxuIiwgYWxsb2NhdG9yX21heCk7Ci0gIHNpemVfa2JzID0gKGZ1bGxfc2l6ZV9rYnMgPD0gYWxsb2NhdG9yX21heCA/IGZ1bGxfc2l6ZV9rYnMgOiBhbGxvY2F0b3JfbWF4KTsKLSAgICBpZiAoc2l6ZV9rYnMgPiBtaW5fc2l6ZV9rYnMpIHsKLQlpZiAoKCpidWZfYWRkciA9IGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEoc2l6ZV9rYnMsIEdGUF9LRVJORUwpKSAhPSAwKSB7Ci0JCXByaW50aygiRFQzMTU1OiAgTWFuYWdlZCB0byBhbGxvY2F0ZTogJWQgS0JcbiIsIHNpemVfa2JzKTsKLQkJKnRvdGFsX3NpemVfa2JzID0gc2l6ZV9rYnM7Ci0JCXJldHVybjsKLQl9Ci0gICAgfQotICAvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlIGFsbG9jYXRpb24gZmFpbGVkICovCi0gIHByaW50aygiRFQzMTU1OiBBbGxvY2F0b3IgZmFpbGVkIVxuIik7Ci0gICpidWZfYWRkciA9IDA7Ci0gICp0b3RhbF9zaXplX2ticyA9IDA7Ci0gIHJldHVybjsKLQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZHQzMTU1X3NldHVwX2J1ZmZlcnMKLSAqCi0gKiAgc2V0dXBfYnVmZmVycyBqdXN0IHB1dHMgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0gaW50bwotICogIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGludGVycnVwdHMKLSAqCi0gKiBKTUwgOiBpdCBsb29rcyBsaWtlIGFsbCB0aGUgYnVmZmVycyBuZWVkIHRvIGJlCi0gKiBjb250aW51b3VzLiBTbyBJJ20gZ29pbmcgdG8gdHJ5IGFuZCBhbGxvY2F0ZSBvbmUKLSAqIGNvbnRpbnVvdXMgYnVmZmVyLgotICoKLSAqIEdDUyA6IEZpeCBETUEgcHJvYmxlbXMgd2hlbiBidWZmZXIgc3BhbnMKLSAqIDRNQiBib3VuZGFyeS4gIEFsc28sIGFkZCBlcnJvciBjaGVja2luZy4gIFRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9NRU0gd2hlbiBub3QgZW5vdWdoIG1lbW9yeS4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXUzMiBkdDMxNTVfc2V0dXBfYnVmZmVycyh1MzIgKmFsbG9jYXRvckFkZHIpCi0KLXsKLSAgdTMyIGluZGV4OwotICB1MzIgcmFtYnVmZl9hZGRyOyAvKiBzdGFydCBvZiBhbGxvY2F0aW9uICovCi0gIHUzMiByYW1idWZmX3NpemU7IC8qIHRvdGFsIHNpemUgYWxsb2NhdGVkIHRvIGRyaXZlciAqLwotICB1MzIgcmFtYnVmZl9hY207ICAvKiBhY2N1bWxhdG9yLCBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoCi0JCQkgIGlzIGxlZnQgYWZ0ZXIgYmVpbmcgc3BsaXQgdXAqLwotICB1MzIgcmFtYnVmZl9lbmQ7ICAvKiBlbmQgb2YgcmFtYnVmZiAqLwotICB1MzIgbnVtYnVmczsgICAgICAvKiBudW1iZXIgb2YgdXNlZnVsIGJ1ZmZlcnMgYWxsb2NhdGVkIChwZXIgZGV2aWNlKSAqLwotICB1MzIgYnVmc2l6ZSAgICAgID0gRFQzMTU1X01BWF9ST1dTICogRFQzMTU1X01BWF9DT0xTOwotICBpbnQgbTsgICAgICAgICAgICAgICAvKiBtaW5vciAjIG9mIGRldmljZSwgbG9vcGVkIGZvciBhbGwgZGV2cyAqLwotCi0gIC8qIHplcm8gdGhlIGZidWZmZXIgc3RhdHVzIGFuZCBhZGRyZXNzIHN0cnVjdHVyZSAqLwotICAgIGZvciAobSA9IDA7IG0gPCBuZGV2aWNlczsgbSsrKSB7Ci0JZHQzMTU1X2ZidWZmZXJbbV0gPSAmKGR0MzE1NV9zdGF0dXNbbV0uZmJ1ZmZlcik7Ci0KLSAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgYnVmZmVyaW5nIHZhcmlhYmxlcyBhcmUgY29uc2lzdGVudCAqLwotICAgICAgewotCXU4ICpwdHIgPSAodTggKikgZHQzMTU1X2ZidWZmZXJbbV07Ci0JCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgZHQzMTU1X2ZidWZmZXIpOyBpbmRleCsrKQotCQkJKihwdHIrKykgPSAwOwotICAgICAgfQotICAgIH0KLQotICAvKiBhbGxvY2F0ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgY2h1bmsgb2YgUkFNICovCi0gIGFsbG9jYXRlX2J1ZmZlcnMoJnJhbWJ1ZmZfYWRkciwgJnJhbWJ1ZmZfc2l6ZSwgYnVmc2l6ZSk7Ci0gIHByaW50aygiRFQzMTU1OiBtZW0gaW5mb1xuIik7Ci0gIHByaW50aygiICAtIHJhbWJ1Zl9hZGRyID0gMHgleFxuIiwgcmFtYnVmZl9hZGRyKTsKLSAgcHJpbnRrKCIgIC0gbGVuZ3RoIChrYikgPSAldVxuIiwgcmFtYnVmZl9zaXplKTsKLSAgICBpZiAocmFtYnVmZl9hZGRyID09IDApIHsKLQlwcmludGsoS0VSTl9JTkZPCi0JICAgICJEVDMxNTU6IEVycm9yIHNldHVwX2J1ZmZlcnMoKSBhbGxvY2F0b3IgZG1hIGZhaWxlZFxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAqYWxsb2NhdG9yQWRkciA9IHJhbWJ1ZmZfYWRkcjsKLSAgcmFtYnVmZl9lbmQgPSByYW1idWZmX2FkZHIgKyAxMDI0ICogcmFtYnVmZl9zaXplOwotCi0gIC8qIGFmdGVyIGFsbG9jYXRpb24sIHdlIG5lZWQgdG8gY291bnQgaG93IG1hbnkgdXNlZnVsIGJ1ZmZlcnMgdGhlcmUKLSAgICAgYXJlIHNvIHdlIGNhbiBnaXZlIGFuIGVxdWFsIG51bWJlciB0byBlYWNoIGRldmljZSAqLwotICByYW1idWZmX2FjbSA9IHJhbWJ1ZmZfYWRkcjsKLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhCVUZGRVJTOyBpbmRleCsrKSB7Ci0JcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsvKmF2b2lkIHNwYW5uaW5nIDRNQiBiZHJ5Ki8KLQlpZiAocmFtYnVmZl9hY20gKyBidWZzaXplID4gcmFtYnVmZl9lbmQpCi0JCWJyZWFrOwotCXJhbWJ1ZmZfYWNtICs9IGJ1ZnNpemU7Ci0gICAgfQotICAvKiBGb2xsb3dpbmcgbGluZSBpcyBPSywgd2lsbCB3YXN0ZSBidWZmZXJzIGlmIGluZGV4Ci0gICAqIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IG5kZXZpY2VzIC1OSkMqLwotICBudW1idWZzID0gaW5kZXggLyBuZGV2aWNlczsKLSAgcHJpbnRrKCIgIC0gbnVtYnVmcyA9ICV1XG4iLCBudW1idWZzKTsKLSAgICBpZiAobnVtYnVmcyA8IDIpIHsKLQlwcmludGsoS0VSTl9JTkZPCi0JIkRUMzE1NTogRXJyb3Igc2V0dXBfYnVmZmVycygpIGNvdWxkbid0IGFsbG9jYXRlIDIgYnVmcy9ib2FyZFxuIik7Ci0JcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotCi0gIC8qIG5vdyB0aGF0IHdlIGhhdmUgYm9hcmQgbWVtb3J5IHdlIHNwaXQgaXQgdXAgKi8KLSAgLyogYmV0d2VlbiB0aGUgYm9hcmRzIGFuZCB0aGUgYnVmZmVycyAgICAgICAgICAqLwotICAgIHJhbWJ1ZmZfYWNtID0gcmFtYnVmZl9hZGRyOwotICAgIGZvciAobSA9IDA7IG0gPCBuZGV2aWNlczsgbSsrKSB7Ci0JcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsKLQotCS8qIFNhdmUgdGhlIHN0YXJ0IG9mIHRoaXMgYm9hcmRzIGJ1ZmZlciBzcGFjZSAoZm9yIG1tYXApLiAgKi8KLQlkdDMxNTVfc3RhdHVzW21dLm1lbV9hZGRyID0gcmFtYnVmZl9hY207Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1idWZzOyBpbmRleCsrKSB7Ci0JCXJhbWJ1ZmZfYWNtID0gYWRqdXN0XzRNQihyYW1idWZmX2FjbSwgYnVmc2l6ZSk7Ci0JCWlmIChyYW1idWZmX2FjbSArIGJ1ZnNpemUgPiByYW1idWZmX2VuZCkgewotCQkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQkJcHJpbnRrKCJEVDMxNTUgUFJPR1JBTSBFUlJPUiAoR0NTKVxuIgotCQkJIkVycm9yIGRpc3RyaWJ1dGluZyBhbGxvY2F0ZWQgYnVmZmVyc1xuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWR0MzE1NV9mYnVmZmVyW21dLT5mcmFtZV9pbmZvW2luZGV4XS5hZGRyID0gcmFtYnVmZl9hY207Ci0JCXB1c2hfZW1wdHkoaW5kZXgsIG0pOwotCQkvKiBwcmludGsoIiAgLSBCdWZmZXIgOiAlbHhcbiIsCi0JCSogZHQzMTU1X2ZidWZmZXJbbV0tPmZyYW1lX2luZm9baW5kZXhdLmFkZHIpOwotCQkqLwotCQlkdDMxNTVfZmJ1ZmZlclttXS0+bmJ1ZmZlcnMgKz0gMTsKLQkJcmFtYnVmZl9hY20gKz0gYnVmc2l6ZTsKLQl9Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW4gYWN0aXZlIGJ1ZmZlciB0aGVyZS4gKi8KLQlkdDMxNTVfZmJ1ZmZlclttXS0+YWN0aXZlX2J1ZiAgICA9IHBvcF9lbXB0eShtKTsKLQlkdDMxNTVfZmJ1ZmZlclttXS0+ZXZlbl9oYXBwZW5lZCA9IDA7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmV2ZW5fc3RvcHBlZCAgPSAwOwotCi0JLyogbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGxvY2tlZF9idWYgSk1MIDIvMjgvMDAgKi8KLQlkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiA9IC0xOwotCi0JZHQzMTU1X3N0YXR1c1ttXS5tZW1fc2l6ZSA9Ci0JcmFtYnVmZl9hY20gLSBkdDMxNTVfc3RhdHVzW21dLm1lbV9hZGRyOwotCi0JLyogc2V0dXAgdGhlIHJlYWR5IHF1ZXVlICovCi0JZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAwOwotCWR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9sZW4gPSAwOwotCXByaW50aygiQXZhaWxhYmxlIGJ1ZmZlcnMgZm9yIGRldmljZSAlZDogJWRcbiIsCi0JICAgIG0sIGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVycyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyCi0gKgotICogVGhlIGludGVybmFsIGZ1bmN0aW9uIGZvciByZWxlYXNpbmcgYSBsb2NrZWQgYnVmZmVyLgotICogSXQgYXNzdW1lcyBpbnRlcnJ1cHRzIGFyZSB0dXJuZWQgb2ZmLgotICoKLSAqIG0gaXMgbWlub3IgbnVtYmVyIG9mIGRldmljZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtKQotewotICAvKiBQb2ludGVyIGludG8gZ2xvYmFsIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcgYnVmZmVycyAqLwotICAgIGlmIChkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiA+PSAwKSB7Ci0JcHVzaF9lbXB0eShkdDMxNTVfZmJ1ZmZlclttXS0+bG9ja2VkX2J1ZiwgbSk7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWYgPSAtMTsKLSAgICB9Ci19Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCkKLSAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKLSAqCi0gKiBUaGUgdXNlciBmdW5jdGlvbiBvZiB0aGUgYWJvdmUuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtKQotewotCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKG0pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGR0MzE1NV9mbHVzaCgpCi0gKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGR0MzE1NV9mbHVzaChpbnQgbSkKLXsKLSAgaW50IGluZGV4OwotICB1bnNpZ25lZCBsb25nIGludCBmbGFnczsKLSAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0gIGxvY2FsX2lycV9kaXNhYmxlKCk7Ci0KLSAgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKG0pOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuID0gMDsKLQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGR0MzE1NV9mYnVmZmVyW21dLT5uYnVmZmVyczsgaW5kZXgrKykKLQlwdXNoX2VtcHR5KGluZGV4LCAgbSk7Ci0KLSAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFuIGFjdGl2ZSBidWZmZXIgdGhlcmUuICovCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5hY3RpdmVfYnVmID0gcG9wX2VtcHR5KG0pOwotCi0gIGR0MzE1NV9mYnVmZmVyW21dLT5ldmVuX2hhcHBlbmVkID0gMDsKLSAgZHQzMTU1X2ZidWZmZXJbbV0tPmV2ZW5fc3RvcHBlZCAgPSAwOwotCi0gIC8qIHNldHVwIHRoZSByZWFkeSBxdWV1ZSAgKi8KLSAgZHQzMTU1X2ZidWZmZXJbbV0tPnJlYWR5X2hlYWQgPSAwOwotICBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfbGVuID0gMDsKLQotICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZHQzMTU1X2dldF9yZWFkeV9idWZmZXIoKQotICogbSBpcyBtaW5vciAjIG9mIGRldmljZQotICoKLSAqIGdldF9yZWFkeV9idWZmZXIgd2lsbCBncmFiIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEKLSAqIGlmIGl0IGlzIGFscmVhZHkgdGhlcmUsIG90aGVyd2lzZSBpdCByZXR1cm5zIDAuCi0gKiBJZiB0aGUgdXNlciBoYXMgYSBidWZmZXIgbG9ja2VkIGl0IHdpbGwgdW5sb2NrCi0gKiB0aGF0IGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nIHRoZSBuZXcgb25lLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKGludCBtKQotewotICBpbnQgZnJhbWVfaW5kZXg7Ci0gIHVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQotI2lmZGVmIERFQlVHX1FVRVNfQQotICBwcmludHF1ZXMobSk7Ci0jZW5kaWYKLQotICBpbnRlcm5hbF9yZWxlYXNlX2xvY2tlZF9idWZmZXIobSk7Ci0KLSAgICBpZiAoaXNfcmVhZHlfYnVmX2VtcHR5KG0pKQotCWZyYW1lX2luZGV4ID0gLTE7Ci0gICAgZWxzZSB7Ci0JZnJhbWVfaW5kZXggPSBwb3BfcmVhZHkobSk7Ci0JZHQzMTU1X2ZidWZmZXJbbV0tPmxvY2tlZF9idWYgPSBmcmFtZV9pbmRleDsKLSAgICB9Ci0KLSNpZmRlZiBERUJVR19RVUVTX0IKLSAgcHJpbnRxdWVzKG0pOwotI2VuZGlmCi0KLSAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0gIHJldHVybiBmcmFtZV9pbmRleDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lzci5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNDc0Y2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotCi1Db3B5cmlnaHQgMTk5NiwyMDAyIEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKLQkJICAgIEphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXkKLQotVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKLWFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi1MaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi1UaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCi11c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5Ci1vZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi1NQSAwMjExMS0xMzA3IFVTQQotCi0KLS0tIENoYW5nZXMgLS0KLQotICBEYXRlICAgICBQcm9ncmFtbWVyICAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQotICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCi0gIDI2LU9jdC0yMDA5IFNTCVBvcnRpbmcgdG8gMi42LjMwIGtlcm5lbC4KLQotLS0gbm90ZXMgLS0KLQotKi8KLQotI2lmbmRlZiBEVDMxNTVfSVNSX0gKLSNkZWZpbmUgRFQzMTU1X0lTUl9ICi0KLWV4dGVybiBzdHJ1Y3QgZHQzMTU1X2ZidWZmZXIgKmR0MzE1NV9mYnVmZmVyW01BWEJPQVJEU107Ci0KLS8qIFVzZXIgZnVuY3Rpb25zIGZvciBidWZmZXJpbmcgKi8KLS8qIEluaXRpYWxpemUgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0uICBUaGlzIHNob3VsZCAqLwotLyogYmUgY2FsbGVkIHByaW9yIHRvIGVuYWJsaW5nIGludGVycnVwdHMgKi8KLQotdTMyIGR0MzE1NV9zZXR1cF9idWZmZXJzKHUzMiAqYWxsb2NhdG9yQWRkcik7Ci0KLS8qIEdldCB0aGUgbmV4dCBmcmFtZSBvZiBkYXRhIGlmIGl0IGlzIHJlYWR5LiAgUmV0dXJucyAqLwotLyogemVybyBpZiBubyBkYXRhIGlzIHJlYWR5LiAgSWYgdGhlcmUgaXMgZGF0YSBidXQgKi8KLS8qIHRoZSB1c2VyIGhhcyBhIGxvY2tlZCBidWZmZXIsIGl0IHdpbGwgdW5sb2NrIHRoYXQgKi8KLS8qIGJ1ZmZlciBhbmQgcmV0dXJuIGl0IHRvIHRoZSBmcmVlIGxpc3QuICovCi0KLWludCBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcihpbnQgbWlub3IpOwotCi0vKiBSZXR1cm4gYSBsb2NrZWQgYnVmZmVyIHRvIHRoZSBmcmVlIGxpc3QgKi8KLQotdm9pZCBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtaW5vcik7Ci0KLS8qIEZsdXNoIHRoZSBidWZmZXIgc3lzdGVtICovCi1pbnQgZHQzMTU1X2ZsdXNoKGludCBtaW5vcik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWJvb2wgYXJlX2VtcHR5X2J1ZmZlcnMoaW50IG1pbm9yKTsKLXZvaWQgcHVzaF9lbXB0eShpbnQgaW5kZXgsIGludCBtaW5vcik7Ci0KLWludCAgcG9wX2VtcHR5KGludCBtaW5vcik7Ci0KLWJvb2wgaXNfcmVhZHlfYnVmX2VtcHR5KGludCBtaW5vcik7Ci1ib29sIGlzX3JlYWR5X2J1Zl9mdWxsKGludCBtaW5vcik7Ci0KLXZvaWQgcHVzaF9yZWFkeShpbnQgbWlub3IsIGludCBpbmRleCk7Ci1pbnQgIHBvcF9yZWFkeShpbnQgbWlub3IpOwotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTV2NGwvZHQzMTU1djRsLmMKaW5kZXggNmRjM2FmNi4uZmQ0OGIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NXY0bC9kdDMxNTV2NGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1djRsL2R0MzE1NXY0bC5jCkBAIC0xMDA4LDYgKzEwMDgsOCBAQAogc3RhdGljIGludCBfX2RldmluaXQKIGR0MzE1NV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKm1lbTsKKwlkbWFfYWRkcl90IGRldl9iYXNlOwogCWludCBwYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAlpbnQgYml0bWFwX3NpemUgPSBCSVRTX1RPX0xPTkdTKHBhZ2VzKSAqIHNpemVvZihsb25nKTsKIApAQCAtMTAxOCwyNSArMTAyMCwyOCBAQAogCWlmIChkZXYtPmRtYV9tZW0pCiAJCWdvdG8gb3V0OwogCi0JZGV2LT5kbWFfbWVtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYV9jb2hlcmVudF9tZW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRldi0+ZG1hX21lbSkKKwltZW0gPSBremFsbG9jKHNpemVvZigqbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZW0pCiAJCWdvdG8gb3V0OwotCWRldi0+ZG1hX21lbS0+Yml0bWFwID0ga3phbGxvYyhiaXRtYXBfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0tPmJpdG1hcCkKKwltZW0tPnZpcnRfYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsICZkZXZfYmFzZSwKKwkJCQkJCQlEVDMxNTVfQ09IX0ZMQUdTKTsKKwlpZiAoIW1lbS0+dmlydF9iYXNlKQorCQlnb3RvIGVycl9hbGxvY19jb2hlcmVudDsKKwltZW0tPmJpdG1hcCA9IGt6YWxsb2MoYml0bWFwX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghbWVtLT5iaXRtYXApCiAJCWdvdG8gZXJyX2JpdG1hcDsKIAotCWRldi0+ZG1hX21lbS0+dmlydF9iYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwKLQkJCQkmZGV2LT5kbWFfbWVtLT5kZXZpY2VfYmFzZSwgRFQzMTU1X0NPSF9GTEFHUyk7Ci0JaWYgKCFkZXYtPmRtYV9tZW0tPnZpcnRfYmFzZSkKLQkJZ290byBlcnJfY29oZXJlbnQ7Ci0JZGV2LT5kbWFfbWVtLT5zaXplID0gcGFnZXM7Ci0JZGV2LT5kbWFfbWVtLT5mbGFncyA9IGZsYWdzOworCS8qIGNvaGVyZW50X2RtYV9tYXNrIGlzIGFscmVhZHkgc2V0IHRvIDMyIGJpdHMgKi8KKwltZW0tPmRldmljZV9iYXNlID0gZGV2X2Jhc2U7CisJbWVtLT5zaXplID0gcGFnZXM7CisJbWVtLT5mbGFncyA9IGZsYWdzOworCWRldi0+ZG1hX21lbSA9IG1lbTsKIAlyZXR1cm4gRE1BX01FTU9SWV9NQVA7CiAKLWVycl9jb2hlcmVudDoKLQlrZnJlZShkZXYtPmRtYV9tZW0tPmJpdG1hcCk7CiBlcnJfYml0bWFwOgotCWtmcmVlKGRldi0+ZG1hX21lbSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBtZW0tPnZpcnRfYmFzZSwgZGV2X2Jhc2UpOworZXJyX2FsbG9jX2NvaGVyZW50OgorCWtmcmVlKG1lbSk7CiBvdXQ6CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDk2ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgRUFTWUNBUAorCXRyaXN0YXRlICJFYXN5Q0FQIFVTQiBJRCAwNWUxOjA0MDggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKworCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYW4gaW50ZWdyYXRlZCBhdWRpby92aWRlbyBkcml2ZXIgZm9yIEVhc3lDQVAgY2FyZHMgd2l0aAorCSAgVVNCIElEIDA1ZTE6MDQwOC4gIEl0IHN1cHBvcnRzIHR3byBoYXJkd2FyZSB2YXJpYW50czoKKworCSAgKiAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgREM2MCwKKwkgICAgIGhhdmluZyBpbnB1dCBjYWJsZXMgbGFiZWxsZWQgQ1ZCUywgUy1WSURFTywgQVVESU8oTCksIEFVRElPKFIpCisKKwkgICogIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSLCBoYXZpbmcgaW5wdXQgY2FibGVzIGxhYmVsbGVkCisJICAgICAxLCAyLCAzLCA0IGFuZCBhbiB1bmxhYmVsbGVkIGlucHV0IGNhYmxlIGZvciBhIG1pY3JvcGhvbmUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVhc3ljYXAKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNiZDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvTWFrZWZpbGUKQEAgLTAsMCArMSwxMyBAQAorCitvYmotJChDT05GSUdfRUFTWUNBUCkJKz0gZWFzeWNhcC5vCisKK2Vhc3ljYXAtb2Jqcwk6PSBlYXN5Y2FwX21haW4ubyBlYXN5Y2FwX2xvdy5vIGVhc3ljYXBfc291bmQubworZWFzeWNhcC1vYmpzCSs9IGVhc3ljYXBfaW9jdGwubyBlYXN5Y2FwX3NldHRpbmdzLm8KK2Vhc3ljYXAtb2JqcwkrPSBlYXN5Y2FwX3Rlc3RjYXJkLm8KKworRVhUUkFfQ0ZMQUdTICs9IC1XYWxsCisjIEltcG9zZSBhbGwgb3Igbm9uZSBvZiB0aGUgZm9sbG93aW5nOgorRVhUUkFfQ0ZMQUdTICs9IC1ERUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQKK0VYVFJBX0NGTEFHUyArPSAtREVBU1lDQVBfTkVFRFNfVjRMMl9ERVZJQ0VfSAorRVhUUkFfQ0ZMQUdTICs9IC1ERUFTWUNBUF9ORUVEU19WNEwyX0ZPUFMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NzU0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9SRUFETUUKQEAgLTAsMCArMSwxMzAgQEAKKworICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAqICAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgREM2MCAgKgorICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAgICAqICAgICAgICAgICAgIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSICAgICAgICAgICAgKgorICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgTWlrZSBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKworCisKK1NVUFBPUlRFRCBIQVJEV0FSRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBoYXZpbmcgVVNCIElEIDA1ZTE6MDQwOC4KK1R3byBraW5kcyBvZiBFYXN5Q0FQIGhhdmUgdGhpcyBVU0IgSUQsIG5hbWVseToKKworICAgICogIEVhc3lDQVAgVVNCIDIuMCBWaWRlbyBBZGFwdGVyIHdpdGggQXVkaW8sIE1vZGVsIERDNjAsCisgICAgICAgaGF2aW5nIGlucHV0IGNhYmxlcyBsYWJlbGxlZCBDVkJTLCBTLVZJREVPLCBBVURJTyhMKSwgQVVESU8oUikKKworICAgICogIEVhc3lDQVAwMDIgNC1DaGFubmVsIFVTQiAyLjAgRFZSLCBoYXZpbmcgaW5wdXQgY2FibGVzIGxhYmVsbGVkCisgICAgICAgMSwgMiwgMywgNCBhbmQgYW4gdW5sYWJlbGxlZCBpbnB1dCBjYWJsZSBmb3IgYSBtaWNyb3Bob25lLgorCisKK0JVSUxEIE9QVElPTlMgQU5EIERFUEVOREVOQ0lFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBwYXJhbWV0ZXIgRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQgaXMgdW5kZWZpbmVkIGR1cmluZyBjb21waWxhdGlvbgordGhlIGJ1aWx0IG1vZHVsZSBpcyBlbnRpcmVseSBpbmRlcGVuZGVudCBvZiB0aGUgdmlkZW9kZXYgbW9kdWxlLCBhbmQgd2hlbgordGhlIEVhc3lDQVAgaXMgcGh5c2ljYWxseSBwbHVnZ2VkIGludG8gYSBVU0IgcG9ydCB0aGUgc3BlY2lhbCBmaWxlcworL2Rldi9lYXN5Y2FwMCBhbmQgL2Rldi9lYXN5c25kMSBhcmUgY3JlYXRlZCBhcyB2aWRlbyBhbmQgc291bmQgc291cmNlcworcmVzcGVjdGl2ZWx5LgorCitJZiB0aGUgcGFyYW1ldGVyIEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UIGlzIGRlZmluZWQgZHVyaW5nIGNvbXBpbGF0aW9uCit0aGUgYnVpbHQgZWFzeWNhcCBtb2R1bGUgaXMgY29uZmlndXJlZCB0byByZWdpc3RlciB3aXRoIHRoZSB2aWRlb2RldiBtb2R1bGUsCitpbiB3aGljaCBjYXNlIHRoZSBzcGVjaWFsIGZpbGVzIGNyZWF0ZWQgd2hlbiB0aGUgRWFzeUNBUCBpcyBwbHVnZ2VkIGluIGFyZQorL2Rldi92aWRlbzAgYW5kIC9kZXYvZWFzeXNuZDAuICBVc2Ugb2YgdGhlIGVhc3ljYXAgbW9kdWxlIGFzIGEgY2xpZW50IG9mCit0aGUgdmlkZW9kZXYgbW9kdWxlIGhhcyByZWNlaXZlZCB2ZXJ5IGxpdHRsZSB0ZXN0aW5nIGFzIG9mIEp1bmUgMjAxMC4KKworCitLTk9XTiBCVUlMRCBQUk9CTEVNUworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKDEpIFJlY2VudCBnY2MgdmVyc2lvbnMgbWF5IGdlbmVyYXRlIHRoZSBtZXNzYWdlOgorCisgICAgIHdhcm5pbmc6IHRoZSBmcmFtZSBzaXplIG9mIC4uLi4gYnl0ZXMgaXMgbGFyZ2VyIHRoYW4gMTAyNCBieXRlcworCitUaGlzIHdhcm5pbmcgY2FuIGJlIHN1cHByZXNzZWQgYnkgc3BlY2lmeWluZyBpbiB0aGUgTWFrZWZpbGU6CisKKyAgICAgRVhUUkFfQ0ZMQUdTICs9IC1XZnJhbWUtbGFyZ2VyLXRoYW49ODE5MgorCitidXQgaXQgd291bGQgYmUgcHJlZmVyYWJsZSB0byByZW1vdmUgdGhlIGNhdXNlIG9mIHRoZSB3YXJuaW5nLgorCisKK0tOT1dOIFJVTlRJTUUgSVNTVUVTCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMSkgUmFuZG9tbHkgKG1heWJlIDUgdG8gMTAlIG9mIG9jY2FzaW9ucykgdGhlIGRyaXZlciBmYWlscyB0byBwcm9kdWNlIGFueQorb3V0cHV0IGF0IHN0YXJ0LXVwLiAgQ2xvc2luZyBtcGxheWVyIChvciB3aGF0ZXZlciB0aGUgdXNlciBwcm9ncmFtIGlzKSBhbmQKK3Jlc3RhcnRpbmcgaXQgcmVzdG9yZXMgbm9ybWFsIHBlcmZvcm1hbmNlIHdpdGhvdXQgYW55IG90aGVyIHJlbWVkaWFsIGFjdGlvbgorYmVpbmcgbmVjZXNzYXJ5LiAgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyBub3Qga25vd24uCisKKygyKSBJbnRlbnRpb25hbGx5LCB0aGlzIGRyaXZlciB3aWxsIG5vdCBzdHJlYW0gbWF0ZXJpYWwgd2hpY2ggaXMgdW5hbWJpZ3VvdXNseQoraWRlbnRpZmllZCBieSB0aGUgaGFyZHdhcmUgYXMgY29weS1wcm90ZWN0ZWQuICBUaGUgdmlkZW8gb3V0cHV0IHdpbGwgZnJlZXplCit3aXRoaW4gYWJvdXQgYSBtaW51dGUgd2hlbiB0aGlzIHNpdHVhdGlvbiBhcmlzZXMuCisKKygzKSBUaGUgY29udHJvbHMgZm9yIGx1bWluYW5jZSwgY29udHJhc3QsIHNhdHVyYXRpb24sIGh1ZSBhbmQgdm9sdW1lIG1heSBub3QKK2Fsd2F5cyB3b3JrIHByb3Blcmx5LgorCisoNCkgUmVkdWNlZC1yZXNvbHV0aW9uIFMtVmlkZW8gc2VlbXMgdG8gc3VmZmVyIGZyb20gbW9pcmUgYXJ0ZWZhY3RzLiAgTm8KK2F0dGVtcHQgaGFzIHlldCBiZWVuIG1hZGUgdG8gcmVtZW1keSB0aGlzLgorCisKK1NVUFBPUlRFRCBUViBTVEFOREFSRFMgQU5EIFJFU09MVVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIFRWIHN0YW5kYXJkcyBhcmUgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgYXJlCit1c2FibGUgYXMgKGZvciBleGFtcGxlKSB0aGUgIm5vcm09IiBwYXJhbWV0ZXIgaW4gdGhlIG1wbGF5ZXIgY29tbWFuZDoKKworICAgIFBBTF9CR0hJTiwgICAgTlRTQ19OXzQ0MywKKyAgICBQQUxfTmMsICAgICAgIE5UU0NfTiwKKyAgICBTRUNBTSwgICAgICAgIE5UU0NfTSwgICAgICAgIE5UU0NfTV9KUCwKKyAgICBQQUxfNjAsICAgICAgIE5UU0NfNDQzLAorICAgIFBBTF9NLgorCitUaGUgYXZhaWxhYmxlIHBpY3R1cmUgc2l6ZXMgYXJlOgorCisgICAgIGF0IDI1IGZyYW1lcyBwZXIgc2Vjb25kOiAgIDcyMHg1NzYsIDcwNHg1NzYsIDY0MHg0ODAsIDM2MHgyODgsIDMyMHgyNDA7CisgICAgIGF0IDMwIGZyYW1lcyBwZXIgc2Vjb25kOiAgIDcyMHg0ODAsIDY0MHg0ODAsIDM2MHgyNDAsIDMyMHgyNDA7CisKKworV0hBVCdTIFRFU1RFRCBBTkQgV0hBVCdTIE5PVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggbXBsYXllciwgbWVuY29kZXIsIHR2dGltZSBhbmQgc3VmZmljaWVudGx5CityZWNlbnQgdmVyc2lvbnMgb2YgdmxjLiAgQW4gaW50ZXJmYWNlIHRvIGZmbXBlZyBpcyBpbXBsZW1lbnRlZCwgYnV0IHNlcmlvdXMKK2F1ZGlvLXZpZGVvIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyByZW1haW4uCisKK1RoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhbGwgdGhlIFRWIHN0YW5kYXJkcyBhY2NlcHRlZCBieSB0aGUKK2hhcmR3YXJlLCBidXQgYXMgeWV0IGl0IGhhcyBhY3R1YWxseSBiZWVuIHRlc3RlZCBvbiBvbmx5IGEgZmV3IG9mIHRoZXNlLgorCitJIGhhdmUgYmVlbiB1bmFibGUgdG8gdGVzdCBhbmQgY2FsaWJyYXRlIHRoZSBTLXZpZGVvIGlucHV0IG15c2VsZiBiZWNhdXNlIEkKK2RvIG5vdCBwb3NzZXNzIGFueSBlcXVpcG1lbnQgd2l0aCBTLXZpZGVvIG91dHB1dC4KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgVjRMMSBJT0NUTCBjb21tYW5kcywgc28gcHJvZ3JhbXMgc3VjaAorYXMgY2Ftb3JhbWEgYXJlIG5vdCBjb21wYXRpYmxlLiAgVGhlcmUgYXJlIHJlcG9ydHMgdGhhdCB0aGUgZHJpdmVyIGRvZXMKK3dvcmsgd2l0aCBzdWZmaWNpZW50bHkgcmVjZW50IChWNEwyKSB2ZXJzaW9ucyBvZiB6b25lbWluZGVyLCBidXQgSSBoYXZlIG5vdAorYXR0ZW1wdGVkIHRvIGNvbmZpcm0gdGhpcyBteXNlbGYuCisKKworVURFViBSVUxFUworLS0tLS0tLS0tLQorCitJbiBvcmRlciB0aGF0IHRoZSBzcGVjaWFsIGZpbGVzIC9kZXYvZWFzeWNhcDAgYW5kIC9kZXYvZWFzeXNuZDEgYXJlIGNyZWF0ZWQKK3dpdGggY29udmVuaWVudGx5IHJlbGF4ZWQgcGVybWlzc2lvbnMgd2hlbiB0aGUgRWFzeUNBUCBpcyBwbHVnZ2VkIGluLCBhIGZpbGUKK2lzIHByZWZlcmFibHkgdG8gYmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IC9ldGMvdWRldi9ydWxlcy5kIHdpdGggY29udGVudDoKKworQUNUSU9OIT0iYWRkfGNoYW5nZSIsIEdPVE89ImVhc3ljYXBfcnVsZXNfZW5kIgorQVRUUlN7aWRWZW5kb3J9PT0iMDVlMSIsIEFUVFJTe2lkUHJvZHVjdH09PSIwNDA4IiwgXAorCU1PREU9IjA2NjYiLCBPV05FUj0icm9vdCIsIEdST1VQPSJyb290IgorTEFCRUw9ImVhc3ljYXBfcnVsZXNfZW5kIgorCisKK0FDS05PV0xFR0VNRU5UUyBBTkQgUkVGRVJFTkNFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBTeW50ZWsgU2VtaWNvbiBEQy0xMTI1CitEcml2ZXIsIHByZXNlbnRseSBtYWludGFpbmVkIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc3ludGVrZHJpdmVyLworYnkgTmljb2xhcyBWaXZpZW4uICBQYXJ0aWN1bGFybHkgdXNlZnVsIGhhcyBiZWVuIGEgcGF0Y2ggdG8gdGhlIGxhdHRlciBkcml2ZXIKK3Byb3ZpZGVkIGJ5IEl2b3IgSGV3aXR0IGluIEphbnVhcnkgMjAwOS4gIFRoZSBOVFNDIGltcGxlbWVudGF0aW9uIGlzIHRha2VuCitmcm9tIHRoZSB3b3JrIG9mIEJlbiBUcmFzay4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcC5oIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYzgyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwLmgKQEAgLTAsMCArMSw2MzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgRk9MTE9XSU5HIFBBUkFNRVRFUlMgQVJFIFVOREVGSU5FRDoKKyAqCisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX0RFQlVHCisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVAorICogICAgICAgICAgICAgICAgRUFTWUNBUF9ORUVEU19VU0JWSURFT19ICisgKiAgICAgICAgICAgICAgICBFQVNZQ0FQX05FRURTX1Y0TDJfREVWSUNFX0gKKyAqICAgICAgICAgICAgICAgIEVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTCisgKgorICogIElGIFJFUVVJUkVEIFRIRVkgTVVTVCBCRSBFWFRFUk5BTExZIERFRklORUQsIEZPUiBFWEFNUExFIEFTIENPTVBJTEVSCisgKiAgT1BUSU9OUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKCFkZWZpbmVkKEVBU1lDQVBfSCkpCisjZGVmaW5lIEVBU1lDQVBfSAorCisjaWYgZGVmaW5lZChFQVNZQ0FQX0RFQlVHKQorI2lmICg5IDwgRUFTWUNBUF9ERUJVRykKKyNlcnJvciBEZWJ1ZyBsZXZlbHMgMCB0byA5IGFyZSBva2F5LlwKKyAgVG8gYWNoaWV2ZSBoaWdoZXIgbGV2ZWxzLCByZW1vdmUgdGhpcyB0cmFwIG1hbnVhbGx5IGZyb20gZWFzeWNhcC5oCisjZW5kaWYKKyNlbmRpZiAvKkVBU1lDQVBfREVCVUcqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEVTRSBBUkUgRk9SIE1BSU5URU5BTkNFIE9OTFkgLSBOT1JNQUxMWSBVTkRFRklORUQ6CisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyN1bmRlZiAgUFJFRkVSX05UU0MKKyN1bmRlZiAgRUFTWUNBUF9URVNUQ0FSRAorI3VuZGVmICBFQVNZQ0FQX1RFU1RUT05FCisjdW5kZWYgIExPQ0tGUkFNRQorI3VuZGVmICBOT1JFQURCQUNLCisjdW5kZWYgIEFVRElPVElNRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqCisgKiAgREVGSU5FICAgQlJJREdFUiAgIFRPIEFDVElWQVRFIFRIRSBST1VUSU5FIEZPUiBCUklER0lORyBWSURFT1RBUEUgRFJPUE9VVFMuCisgKgorICogICAgICAgICAgICAgKioqIFVOREVSIERFVkVMT1BNRU5UL1RFU1RJTkcgLSBOT1QgUkVBRFkgWUVUISoqKgorICoKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI3VuZGVmICBCUklER0VSCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKQorI2lmICghZGVmaW5lZChfX09MRF9WSURJT0NfKSkKKyNkZWZpbmUgX19PTERfVklESU9DXworI2VuZGlmIC8qICFkZWZpbmVkKF9fT0xEX1ZJRElPQ18pICovCisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorCisjaWYgZGVmaW5lZChFQVNZQ0FQX05FRURTX1Y0TDJfREVWSUNFX0gpCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNlbmRpZiAvKkVBU1lDQVBfTkVFRFNfVjRMMl9ERVZJQ0VfSCovCisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKworI2lmICghZGVmaW5lZChfX09MRF9WSURJT0NfKSkKKyNkZWZpbmUgX19PTERfVklESU9DXworI2VuZGlmIC8qICFkZWZpbmVkKF9fT0xEX1ZJRElPQ18pICovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKworI2lmIGRlZmluZWQoRUFTWUNBUF9ORUVEU19VU0JWSURFT19IKQorI2luY2x1ZGUgPGNvbmZpZy92aWRlby91c2J2aWRlby5oPgorI2VuZGlmIC8qRUFTWUNBUF9ORUVEU19VU0JWSURFT19IKi8KKworI2lmICghZGVmaW5lZChQQUdFX1NJWkUpKQorI2Vycm9yICJQQUdFX1NJWkUgbm90IGRlZmluZWQiCisjZW5kaWYKKworI2RlZmluZSBTVFJJTkdJWkVfQUdBSU4oeCkgI3gKKyNkZWZpbmUgU1RSSU5HSVpFKHgpIFNUUklOR0laRV9BR0FJTih4KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgVkVORE9SLCBQUk9EVUNUOiAgU3ludGVrIFNlbWljb25kdWN0b3IgQ28uLCBMdGQKKyAqCisgKiAgICAgIEVJVEhFUiAgICAgICAgRWFzeUNBUCBVU0IgMi4wIFZpZGVvIEFkYXB0ZXIgd2l0aCBBdWRpbywgTW9kZWwgTm8uIERDNjAKKyAqICAgICAgICAgICAgICAgd2l0aCBpbnB1dCBjYWJsaW5nOiAgQVVESU8oTCksIEFVRElPKFIpLCBDVkJTLCBTLVZJREVPLgorICoKKyAqICAgICAgICAgIE9SICAgICAgICBFYXN5Q0FQIDRDSEFOTkVMIFVTQiAyLjAgRFZSLCBNb2RlbCBOby4gRWFzeUNBUDAwMgorICogICAgICAgICAgICAgICB3aXRoIGlucHV0IGNhYmxpbmc6ICBNSUNST1BIT05FLCBDVkJTMSwgQ1ZCUzIsIENWQlMzLCBDVkJTNC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBVU0JfRUFTWUNBUF9WRU5ET1JfSUQJMHgwNWUxCisjZGVmaW5lIFVTQl9FQVNZQ0FQX1BST0RVQ1RfSUQJMHgwNDA4CisKKyNkZWZpbmUgRUFTWUNBUF9EUklWRVJfVkVSU0lPTiAiMC44LjIxIgorI2RlZmluZSBFQVNZQ0FQX0RSSVZFUl9ERVNDUklQVElPTiAiZWFzeWNhcGRjNjAiCisKKyNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRSAgICAgMTkyCisjZGVmaW5lIFZJREVPX0RFVklDRV9NQU5ZIDgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBERUZBVUxUIExVTUlOQU5DRSwgQ09OVFJBU1QsIFNBVFVSQVRJT04gQU5EIEhVRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNBQV8wQV9ERUZBVUxUIDB4N0YKKyNkZWZpbmUgU0FBXzBCX0RFRkFVTFQgMHgzRgorI2RlZmluZSBTQUFfMENfREVGQVVMVCAweDJGCisjZGVmaW5lIFNBQV8wRF9ERUZBVUxUIDB4MDAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVklERU8gU1RSRUFNSU5HIFBBUkFNRVRFUlM6CisgKiAgVVNCIDIuMCBQUk9WSURFUyBGT1IgSElHSC1CQU5EV0lEVEggRU5EUE9JTlRTIFdJVEggQU4gVVBQRVIgTElNSVQKKyAqICBPRiAzMDcyIEJZVEVTIFBFUiBNSUNST0ZSQU1FIGZvciB3TWF4UGFja2V0U2l6ZS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBWSURFT19JU09DX0JVRkZFUl9NQU5ZIDE2CisjZGVmaW5lIFZJREVPX0lTT0NfT1JERVIgMworI2RlZmluZSBWSURFT19JU09DX0ZSQU1FU1BFUkRFU0MgKCh1bnNpZ25lZCBpbnQpIDEgPDwgVklERU9fSVNPQ19PUkRFUikKKyNkZWZpbmUgVVNCXzJfMF9NQVhQQUNLRVRTSVpFIDMwNzIKKyNpZiAoVVNCXzJfMF9NQVhQQUNLRVRTSVpFID4gUEFHRV9TSVpFKQorI2Vycm9yIHZpZGVvX2lzb2NfYnVmZmVyWy5dIHdpbGwgbm90IGJlIGJpZyBlbm91Z2gKKyNlbmRpZgorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBWSURFTyBCVUZGRVJTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgRklFTERfQlVGRkVSX1NJWkUgKDIwMyAqIFBBR0VfU0laRSkKKyNkZWZpbmUgRlJBTUVfQlVGRkVSX1NJWkUgKDQwNSAqIFBBR0VfU0laRSkKKyNkZWZpbmUgRklFTERfQlVGRkVSX01BTlkgNAorI2RlZmluZSBGUkFNRV9CVUZGRVJfTUFOWSA2CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIFNUUkVBTUlORyBQQVJBTUVURVJTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQVVESU9fSVNPQ19CVUZGRVJfTUFOWSAxNgorI2RlZmluZSBBVURJT19JU09DX09SREVSIDMKKyNkZWZpbmUgQVVESU9fSVNPQ19CVUZGRVJfU0laRSAoUEFHRV9TSVpFIDw8IEFVRElPX0lTT0NfT1JERVIpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIEJVRkZFUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBBVURJT19GUkFHTUVOVF9NQU5ZIDMyCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIElUIElTIEVTU0VOVElBTCBUSEFUIEVWRU4tTlVNQkVSRUQgU1RBTkRBUkRTIEFSRSAyNSBGUkFNRVMgUEVSIFNFQ09ORCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgT0RELU5VTUJFUkVEIFNUQU5EQVJEUyBBUkUgMzAgRlJBTUVTIFBFUiBTRUNPTkQuCisgKiAgVEhFIE5VTUJFUklORyBPRiBTVEFOREFSRFMgTVVTVCBOT1QgQkUgQ0hBTkdFRCBXSVRIT1VUIERVRSBDQVJFLiAgTk9UCisgKiAgT05MWSBNVVNUIFRIRSBQQVJBTUVURVIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFOREFSRF9NQU5ZCisgKiAgQkUgQ0hBTkdFRCBUTyBDT1JSRVNQT05EIFRPIFRIRSBORVcgTlVNQkVSIE9GIFNUQU5EQVJEUywgQlVUIEFMU08gVEhFCisgKiAgTlVNQkVSSU5HIE1VU1QgUkVNQUlOIEFOIFVOQlJPS0VOIEFTQ0VORElORyBTRVFVRU5DRTogIERVTU1ZIFNUQU5EQVJEUworICogIE1BWSBORUVEIFRPIEJFIEFEREVELiAgIEFQUFJPUFJJQVRFIENIQU5HRVMgV0lMTCBBTFdBWVMgQkUgUkVRVUlSRUQgSU4KKyAqICBST1VUSU5FIGZpbGxpbl9mb3JtYXRzKCkgQU5EIFBPU1NJQkxZIEVMU0VXSEVSRS4gIEJFV0FSRS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSAgUEFMX0JHSElOICAgICAgMAorI2RlZmluZSAgUEFMX05jICAgICAgICAgMgorI2RlZmluZSAgU0VDQU0gICAgICAgICAgNAorI2RlZmluZSAgTlRTQ19OICAgICAgICAgNgorI2RlZmluZSAgTlRTQ19OXzQ0MyAgICAgOAorI2RlZmluZSAgTlRTQ19NICAgICAgICAgMQorI2RlZmluZSAgTlRTQ180NDMgICAgICAgMworI2RlZmluZSAgTlRTQ19NX0pQICAgICAgNQorI2RlZmluZSAgUEFMXzYwICAgICAgICAgNworI2RlZmluZSAgUEFMX00gICAgICAgICAgOQorI2RlZmluZSAgU1RBTkRBUkRfTUFOWSAxMAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBFTlVNUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitlbnVtIHsKK0FUXzcyMHg1NzYsCitBVF83MDR4NTc2LAorQVRfNjQweDQ4MCwKK0FUXzcyMHg0ODAsCitBVF8zNjB4Mjg4LAorQVRfMzIweDI0MCwKK0FUXzM2MHgyNDAsCitSRVNPTFVUSU9OX01BTlkKK307CitlbnVtIHsKK0ZNVF9VWVZZLAorRk1UX1lVWTIsCitGTVRfUkdCMjQsCitGTVRfUkdCMzIsCitGTVRfQkdSMjQsCitGTVRfQkdSMzIsCitQSVhFTEZPUk1BVF9NQU5ZCit9OworZW51bSB7CitGSUVMRF9OT05FLAorRklFTERfSU5URVJMQUNFRCwKK0ZJRUxEX0FMVEVSTkFURSwKK0lOVEVSTEFDRV9NQU5ZCit9OworI2RlZmluZSBTRVRUSU5HU19NQU5ZCShTVEFOREFSRF9NQU5ZICogXAorCQkJUkVTT0xVVElPTl9NQU5ZICogXAorCQkJMiAqIFwKKwkJCVBJWEVMRk9STUFUX01BTlkgKiBcCisJCQlJTlRFUkxBQ0VfTUFOWSkKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU1RSVUNUVVJFIERFRklOSVRJT05TCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBkYXRhX2J1ZmZlciB7CitzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKK3ZvaWQgKnBnbzsKK3ZvaWQgKnB0bzsKK19fdTE2IGtvdW50OworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBkYXRhX3VyYiB7CitzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfaGVhZDsKK3N0cnVjdCB1cmIgKnB1cmI7CitpbnQgaXNidWY7CitpbnQgbGVuZ3RoOworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIHsKK19fdTE2IG1hc2s7CitzdHJ1Y3QgdjRsMl9zdGFuZGFyZCB2NGwyX3N0YW5kYXJkOworfTsKK3N0cnVjdCBlYXN5Y2FwX2Zvcm1hdCB7CitfX3UxNiBtYXNrOworY2hhciBuYW1lWzEyOF07CitzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7Cit9OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICAgZWFzeWNhcC5pbGsgPT0gMCAgID0+ICBDVkJTK1MtVklERU8gSEFSRFdBUkUsIEFVRElPIHdNYXhQYWNrZXRTaXplPTI1NgorICogICBlYXN5Y2FwLmlsayA9PSAyICAgPT4gIENWQlMrUy1WSURFTyBIQVJEV0FSRSwgQVVESU8gd01heFBhY2tldFNpemU9OQorICogICBlYXN5Y2FwLmlsayA9PSAzICAgPT4gICAgIEZPVVItQ1ZCUyBIQVJEV0FSRSwgQVVESU8gd01heFBhY2tldFNpemU9OQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgZWFzeWNhcCB7Cit1bnNpZ25lZCBpbnQgYXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50OwordW5zaWduZWQgaW50IGF1ZGlvX2J5dGVzX3Blcl9mcmFnbWVudDsKK3Vuc2lnbmVkIGludCBhdWRpb19idWZmZXJfcGFnZV9tYW55OworCisjZGVmaW5lIFVQU0FNUExFCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK19fczE2IG9sZGF1ZGlvOworI2VuZGlmIC8qVVBTQU1QTEUqLworCitzdHJ1Y3QgZWFzeWNhcF9mb3JtYXQgZWFzeWNhcF9mb3JtYXRbMSArIFNFVFRJTkdTX01BTlldOworCitpbnQgaWxrOworYm9vbCBtaWNyb3Bob25lOworCisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKQorc3RydWN0IHZpZGVvX2RldmljZSAqcHZpZGVvX2RldmljZTsKKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKy8qXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4qLworCitzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2U7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2U7CisKK3N0cnVjdCBrcmVmIGtyZWY7CisKK3N0cnVjdCBtdXRleCBtdXRleF9tbWFwX3ZpZGVvW0ZSQU1FX0JVRkZFUl9NQU5ZXTsKK3N0cnVjdCBtdXRleCBtdXRleF90aW1ldmFsMDsKK3N0cnVjdCBtdXRleCBtdXRleF90aW1ldmFsMTsKKworaW50IHF1ZXVlZFtGUkFNRV9CVUZGRVJfTUFOWV07CitpbnQgZG9uZVtGUkFNRV9CVUZGRVJfTUFOWV07CisKK3dhaXRfcXVldWVfaGVhZF90IHdxX3ZpZGVvOword2FpdF9xdWV1ZV9oZWFkX3Qgd3FfYXVkaW87CisKK2ludCBpbnB1dDsKK2ludCBwb2xsZWQ7CitpbnQgc3RhbmRhcmRfb2Zmc2V0OworaW50IGZvcm1hdF9vZmZzZXQ7CisKK2ludCBmcHM7CitpbnQgdXNlYzsKK2ludCB0b2xlcmF0ZTsKK2ludCBtZXJpdFsxODBdOworCitzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWwxOworc3RydWN0IHRpbWV2YWwgdGltZXZhbDI7CitzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsNzsKK2xvbmcgbG9uZyBpbnQgZG5ieWR0OworCitpbnQgICAgdmlkZW9faW50ZXJmYWNlOworaW50ICAgIHZpZGVvX2FsdHNldHRpbmdfb247CitpbnQgICAgdmlkZW9fYWx0c2V0dGluZ19vZmY7CitpbnQgICAgdmlkZW9fZW5kcG9pbnRudW1iZXI7CitpbnQgICAgdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CitpbnQgICAgdmlkZW9faXNvY19idWZmZXJfc2l6ZTsKK2ludCAgICB2aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisKK2ludCAgICB2aWRlb19pc29jX3N0cmVhbWluZzsKK2ludCAgICB2aWRlb19pc29jX3NlcXVlbmNlOworaW50ICAgIHZpZGVvX2lkbGU7CitpbnQgICAgdmlkZW9fZW9mOworaW50ICAgIHZpZGVvX2p1bms7CisKK2ludCAgICBmdWRnZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIHZpZGVvX2lzb2NfYnVmZmVyW1ZJREVPX0lTT0NfQlVGRkVSX01BTlldOworc3RydWN0IGRhdGFfYnVmZmVyIFwKKwkgICAgIGZpZWxkX2J1ZmZlcltGSUVMRF9CVUZGRVJfTUFOWV1bKEZJRUxEX0JVRkZFUl9TSVpFL1BBR0VfU0laRSldOworc3RydWN0IGRhdGFfYnVmZmVyIFwKKwkgICAgIGZyYW1lX2J1ZmZlcltGUkFNRV9CVUZGRVJfTUFOWV1bKEZSQU1FX0JVRkZFUl9TSVpFL1BBR0VfU0laRSldOworCitzdHJ1Y3QgbGlzdF9oZWFkIHVyYl92aWRlb19oZWFkOworc3RydWN0IGxpc3RfaGVhZCAqcHVyYl92aWRlb19oZWFkOworCitpbnQgdm1hX21hbnk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQlVGRkVSIElORElDQVRPUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IGZpZWxkX2ZpbGw7CQkvKiBGaWVsZCBidWZmZXIgYmVpbmcgZmlsbGVkIGJ5IGVhc3ljYXBfY29tcGxldGUoKS4gICovCisJCQkvKiAgIEJ1bXBlZCBvbmx5IGJ5IGVhc3ljYXBfY29tcGxldGUoKS4gICAgICAgICAgICAgICovCitpbnQgZmllbGRfcGFnZTsJCS8qIFBhZ2Ugb2YgZmllbGQgYnVmZmVyIHBhZ2UgYmVpbmcgZmlsbGVkIGJ5ICAgICAgICAgKi8KKwkJCS8qICAgZWFzeWNhcF9jb21wbGV0ZSgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK2ludCBmaWVsZF9yZWFkOwkJLyogRmllbGQgYnVmZmVyIHRvIGJlIHJlYWQgYnkgZmllbGQyZnJhbWUoKS4gICAgICAgICAqLworCQkJLyogICBCdW1wZWQgb25seSBieSBlYXN5Y2FwX2NvbXBsZXRlKCkuICAgICAgICAgICAgICAqLworaW50IGZyYW1lX2ZpbGw7CQkvKiBGcmFtZSBidWZmZXIgYmVpbmcgZmlsbGVkIGJ5IGZpZWxkMmZyYW1lKCkuICAgICAgICovCisJCQkvKiAgIEJ1bXBlZCBvbmx5IGJ5IGVhc3ljYXBfZHFidWYoKSB3aGVuICAgICAgICAgICAgICovCisJCQkvKiAgIGZpZWxkMmZyYW1lKCkgaGFzIGNyZWF0ZWQgYSBjb21wbGV0ZSBmcmFtZS4gICAgICovCitpbnQgZnJhbWVfcmVhZDsJCS8qIEZyYW1lIGJ1ZmZlciBvZmZlcmVkIHRvIHVzZXIgYnkgRFFCVUYuICAgICAgICAgICAgKi8KKwkJCS8qICAgU2V0IG9ubHkgYnkgZWFzeWNhcF9kcWJ1ZigpIHRvIHRyYWlsIGZyYW1lX2ZpbGwuKi8KK2ludCBmcmFtZV9sb2NrOwkJLyogRmxhZyBzZXQgdG8gMSBieSBEUUJVRiBhbmQgY2xlYXJlZCBieSBRQlVGICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTUFHRSBQUk9QRVJUSUVTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK19fdTMyICAgICAgICAgICAgICAgICAgIHBpeGVsZm9ybWF0OworX191MzIgICAgICAgICAgICAgICAgICAgZmllbGQ7CitpbnQgICAgICAgICAgICAgICAgICAgICB3aWR0aDsKK2ludCAgICAgICAgICAgICAgICAgICAgIGhlaWdodDsKK2ludCAgICAgICAgICAgICAgICAgICAgIGJ5dGVzcGVycGl4ZWw7Citib29sICAgICAgICAgICAgICAgICAgICBieXRlc3dhcG9yZGVyOworYm9vbCAgICAgICAgICAgICAgICAgICAgZGVjaW1hdGVwaXhlbDsKK2Jvb2wgICAgICAgICAgICAgICAgICAgIG9mZmVyZmllbGRzOworaW50ICAgICAgICAgICAgICAgICAgICAgZnJhbWVfYnVmZmVyX3VzZWQ7CitpbnQgICAgICAgICAgICAgICAgICAgICBmcmFtZV9idWZmZXJfbWFueTsKK2ludCAgICAgICAgICAgICAgICAgICAgIHZpZGVvZmllbGRhbW91bnQ7CisKK2ludCAgICAgICAgICAgICAgICAgICAgIGJyaWdodG5lc3M7CitpbnQgICAgICAgICAgICAgICAgICAgICBjb250cmFzdDsKK2ludCAgICAgICAgICAgICAgICAgICAgIHNhdHVyYXRpb247CitpbnQgICAgICAgICAgICAgICAgICAgICBodWU7CisKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3VyYjsKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3BhZ2U7CitpbnQgYWxsb2NhdGlvbl92aWRlb19zdHJ1Y3Q7CitpbnQgcmVnaXN0ZXJlZF92aWRlbzsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU09VTkQgUFJPUEVSVElFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgYXVkaW9faW50ZXJmYWNlOworaW50IGF1ZGlvX2FsdHNldHRpbmdfb247CitpbnQgYXVkaW9fYWx0c2V0dGluZ19vZmY7CitpbnQgYXVkaW9fZW5kcG9pbnRudW1iZXI7CitpbnQgYXVkaW9faXNvY19tYXhmcmFtZXNpemU7CitpbnQgYXVkaW9faXNvY19idWZmZXJfc2l6ZTsKK2ludCBhdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7CisKK2ludCBhdWRpb19pc29jX3N0cmVhbWluZzsKK2ludCBhdWRpb19pZGxlOworaW50IGF1ZGlvX2VvZjsKK2ludCB2b2x1bWU7CitpbnQgbXV0ZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIGF1ZGlvX2lzb2NfYnVmZmVyW0FVRElPX0lTT0NfQlVGRkVSX01BTlldOworCitzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9hdWRpb19oZWFkOworc3RydWN0IGxpc3RfaGVhZCAqcHVyYl9hdWRpb19oZWFkOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBCVUZGRVIgSU5ESUNBVE9SUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgYXVkaW9fZmlsbDsJCS8qIEF1ZGlvIGJ1ZmZlciBiZWluZyBmaWxsZWQgYnkgZWFzeXNuZF9jb21wbGV0ZSgpLiAgKi8KKwkJCS8qICAgQnVtcGVkIG9ubHkgYnkgZWFzeXNuZF9jb21wbGV0ZSgpLiAgICAgICAgICAgICAgKi8KK2ludCBhdWRpb19yZWFkOwkJLyogQXVkaW8gYnVmZmVyIHBhZ2UgYmVpbmcgcmVhZCBieSBlYXN5c25kX3JlYWQoKS4gICAqLworCQkJLyogICBTZXQgYnkgZWFzeXNuZF9yZWFkKCkgdG8gdHJhaWwgYXVkaW9fZmlsbCBieSAgICAqLworCQkJLyogICBvbmUgZnJhZ21lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTT1VORCBQUk9QRVJUSUVTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGF1ZGlvX2J1ZmZlcl9tYW55OworCitpbnQgYWxsb2NhdGlvbl9hdWRpb191cmI7CitpbnQgYWxsb2NhdGlvbl9hdWRpb19wYWdlOworaW50IGFsbG9jYXRpb25fYXVkaW9fc3RydWN0OworaW50IHJlZ2lzdGVyZWRfYXVkaW87CisKK2xvbmcgbG9uZyBpbnQgYXVkaW9fc2FtcGxlOworbG9uZyBsb25nIGludCBhdWRpb19uaXZlYXU7Citsb25nIGxvbmcgaW50IGF1ZGlvX3NxdWFyZTsKKworc3RydWN0IGRhdGFfYnVmZmVyIGF1ZGlvX2J1ZmZlcltdOworfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVklERU8gRlVOQ1RJT04gUFJPVE9UWVBFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfY29tcGxldGUoc3RydWN0IHVyYiAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2xvbmcgICAgICAgICAgICAgZWFzeWNhcF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsICB1bnNpZ25lZCBsb25nKTsKKworLyp2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diovCisjaWYgZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9vcGVuX25vaW5vZGUoc3RydWN0IGZpbGUgKik7CitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfcmVsZWFzZV9ub2lub2RlKHN0cnVjdCBmaWxlICopOworaW50ICAgICAgICAgICAgICB2aWRlb2Rldl9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKik7CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKwordW5zaWduZWQgaW50ICAgICBlYXN5Y2FwX3BvbGwoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK2ludCAgICAgICAgICAgICAgZWFzeWNhcF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwgXAorCQkJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfZGVsZXRlKHN0cnVjdCBrcmVmICopOworCit2b2lkICAgICAgICAgICAgIGVhc3ljYXBfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwordm9pZCAgICAgICAgICAgICBlYXN5Y2FwX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fZmF1bHQgKik7CitpbnQgICAgICAgICAgICAgIGVhc3ljYXBfZHFidWYoc3RydWN0IGVhc3ljYXAgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgc3VibWl0X3ZpZGVvX3VyYnMoc3RydWN0IGVhc3ljYXAgKik7CitpbnQgICAgICAgICAgICAgIGtpbGxfdmlkZW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqKTsKK2ludCAgICAgICAgICAgICAgZmllbGQyZnJhbWUoc3RydWN0IGVhc3ljYXAgKik7CitpbnQgICAgICAgICAgICAgIHJlZGF1YihzdHJ1Y3QgZWFzeWNhcCAqLCB2b2lkICosIHZvaWQgKiwgXAorCQkJCQkJaW50LCBpbnQsIF9fdTgsIF9fdTgsIGJvb2wpOwordm9pZCAgICAgICAgICAgICBkZWJyaWVmKHN0cnVjdCBlYXN5Y2FwICopOwordm9pZCAgICAgICAgICAgICBzYXlyZWFkb25seShzdHJ1Y3QgZWFzeWNhcCAqKTsKK3ZvaWQgICAgICAgICAgICAgZWFzeWNhcF90ZXN0Y2FyZChzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBleHBsYWluX2lvY3RsKF9fdTMyKTsKK2ludCAgICAgICAgICAgICAgZXhwbGFpbl9jaWQoX191MzIpOworaW50ICAgICAgICAgICAgICBmaWxsaW5fZm9ybWF0cyh2b2lkKTsKK2ludCAgICAgICAgICAgICAgYWRqdXN0X3N0YW5kYXJkKHN0cnVjdCBlYXN5Y2FwICosIHY0bDJfc3RkX2lkKTsKK2ludCAgICAgICAgICAgICAgYWRqdXN0X2Zvcm1hdChzdHJ1Y3QgZWFzeWNhcCAqLCBfX3UzMiwgX191MzIsIF9fdTMyLCBcCisJCQkJCQkJCWludCwgYm9vbCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF9icmlnaHRuZXNzKHN0cnVjdCBlYXN5Y2FwICosIGludCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF9jb250cmFzdChzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBhZGp1c3Rfc2F0dXJhdGlvbihzdHJ1Y3QgZWFzeWNhcCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBhZGp1c3RfaHVlKHN0cnVjdCBlYXN5Y2FwICosIGludCk7CitpbnQgICAgICAgICAgICAgIGFkanVzdF92b2x1bWUoc3RydWN0IGVhc3ljYXAgKiwgaW50KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQVVESU8gRlVOQ1RJT04gUFJPVE9UWVBFUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkICAgICAgICAgICAgIGVhc3lzbmRfY29tcGxldGUoc3RydWN0IHVyYiAqKTsKK3NzaXplX3QgICAgICAgICAgZWFzeXNuZF9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOworaW50ICAgICAgICAgICAgICBlYXN5c25kX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworaW50ICAgICAgICAgICAgICBlYXN5c25kX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworbG9uZyAgICAgICAgICAgICBlYXN5c25kX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgIHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgaW50ICAgICBlYXN5c25kX3BvbGwoc3RydWN0IGZpbGUgKiwgcG9sbF90YWJsZSAqKTsKK3ZvaWQgICAgICAgICAgICAgZWFzeXNuZF9kZWxldGUoc3RydWN0IGtyZWYgKik7CitpbnQgICAgICAgICAgICAgIHN1Ym1pdF9hdWRpb191cmJzKHN0cnVjdCBlYXN5Y2FwICopOworaW50ICAgICAgICAgICAgICBraWxsX2F1ZGlvX3VyYnMoc3RydWN0IGVhc3ljYXAgKik7Cit2b2lkICAgICAgICAgICAgIGVhc3lzbmRfdGVzdHRvbmUoc3RydWN0IGVhc3ljYXAgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgYXVkaW9fc2V0dXAoc3RydWN0IGVhc3ljYXAgKik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIExPVy1MRVZFTCBGVU5DVElPTiBQUk9UT1RZUEVTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCAgICAgICAgICAgICAgYXVkaW9fZ2FpbmdldChzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgYXVkaW9fZ2FpbnNldChzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3M4KTsKKworaW50ICAgICAgICAgICAgICBzZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2KTsKK2ludCAgICAgICAgICAgICAgd2FrZXVwX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgY29uZmlybV9yZXNvbHV0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBjb25maXJtX3N0cmVhbShzdHJ1Y3QgdXNiX2RldmljZSAqKTsKKworaW50ICAgICAgICAgICAgICBzZXR1cF9zdGsoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIHNldHVwX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgc2V0dXBfdnQoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIGNoZWNrX3N0ayhzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgY2hlY2tfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICByZWFkeV9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIG1lcml0X3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgY2hlY2tfdnQoc3RydWN0IHVzYl9kZXZpY2UgKik7CitpbnQgICAgICAgICAgICAgIHNlbGVjdF9pbnB1dChzdHJ1Y3QgdXNiX2RldmljZSAqLCBpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIHNldF9yZXNvbHV0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICosIFwKKwkJCQkJCV9fdTE2LCBfX3UxNiwgX191MTYsIF9fdTE2KTsKKworaW50ICAgICAgICAgICAgICByZWFkX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHJlYWRfc3RrKHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTMyKTsKK2ludCAgICAgICAgICAgICAgd3JpdGVfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2LCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHdhaXRfaTJjKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICB3cml0ZV8wMDAoc3RydWN0IHVzYl9kZXZpY2UgKiwgX191MTYsIF9fdTE2KTsKK2ludCAgICAgICAgICAgICAgc3RhcnRfMTAwKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICBzdG9wXzEwMChzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgd3JpdGVfMzAwKHN0cnVjdCB1c2JfZGV2aWNlICopOworaW50ICAgICAgICAgICAgICByZWFkX3Z0KHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2KTsKK2ludCAgICAgICAgICAgICAgd3JpdGVfdnQoc3RydWN0IHVzYl9kZXZpY2UgKiwgX191MTYsIF9fdTE2KTsKKworaW50ICAgICAgICAgICAgICBzZXQydG83OChzdHJ1Y3QgdXNiX2RldmljZSAqKTsKK2ludCAgICAgICAgICAgICAgc2V0MnRvOTMoc3RydWN0IHVzYl9kZXZpY2UgKik7CisKK2ludCAgICAgICAgICAgICAgcmVnc2V0KHN0cnVjdCB1c2JfZGV2aWNlICosIF9fdTE2LCBfX3UxNik7CitpbnQgICAgICAgICAgICAgIHJlZ2dldChzdHJ1Y3QgdXNiX2RldmljZSAqLCBfX3UxNiwgdm9pZCAqKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCB7Citsb25nIGxvbmcgaW50IHF1b3RpZW50OwordW5zaWduZWQgbG9uZyBsb25nIGludCByZW1haW5kZXI7Cit9IHNpZ25lZF9kaXYobG9uZyBsb25nIGludCwgbG9uZyBsb25nIGludCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE1BQ1JPUworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEdFVChYLCBZLCBaKSBkbyB7IFwKKwlpbnQgcmM7IFwKKwkqKFopID0gKF9fdTE2KTA7IFwKKwlyYyA9IHJlZ2dldChYLCBZLCBaKTsgXAorCWlmICgwID4gcmMpIHsgXAorCQlKT1QoOCwgIjotKCVpXG4iLCBfX0xJTkVfXyk7ICByZXR1cm4ocmMpOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIFNFVChYLCBZLCBaKSBkbyB7IFwKKwlpbnQgcmM7IFwKKwlyYyA9IHJlZ3NldChYLCBZLCBaKTsgXAorCWlmICgwID4gcmMpIHsgXAorCQlKT1QoOCwgIjotKCVpXG4iLCBfX0xJTkVfXyk7ICByZXR1cm4ocmMpOyBcCisJfSBcCit9IHdoaWxlICgwKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFNBWShmb3JtYXQsIGFyZ3MuLi4pIGRvIHsgXAorCXByaW50ayhLRVJOX0RFQlVHICJlYXN5Y2FwOiAlczogIiBmb3JtYXQsIF9fZnVuY19fLCAjI2FyZ3MpOyBcCit9IHdoaWxlICgwKQorCisKKyNpZiBkZWZpbmVkKEVBU1lDQVBfREVCVUcpCisjZGVmaW5lIEpPVChuLCBmb3JtYXQsIGFyZ3MuLi4pIGRvIHsgXAorCWlmIChuIDw9IGVhc3ljYXBfZGVidWcpIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyAiZWFzeWNhcDogJXM6ICIgZm9ybWF0LCBfX2Z1bmNfXywgIyNhcmdzKTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIEpPVChuLCBmb3JtYXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmIC8qRUFTWUNBUF9ERUJVRyovCisKKyNkZWZpbmUgUE9VVCBKT1QoOCwgIjotKGluIGZpbGUgJXMgbGluZSAlNGlcbiIsIF9fRklMRV9fLCBfX0xJTkVfXykKKworI2RlZmluZSBNSUNST1NFQ09ORFMoWCwgWSkgXAorCQkJKCgxMDAwMDAwKigobG9uZyBsb25nIGludCkoWC50dl9zZWMgLSBZLnR2X3NlYykpKSArIFwKKwkJCQkJKGxvbmcgbG9uZyBpbnQpKFgudHZfdXNlYyAtIFkudHZfdXNlYykpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgKHVuc2lnbmVkIGNoYXIgKilQICAgICAgICAgICBwb2ludGVyIHRvIG5leHQgYnl0ZSBwYWlyCisgKiAgICAgICAobG9uZyBpbnQgKilYICAgICAgICAgICBwb2ludGVyIHRvIGFjY3VtdWxhdGluZyBjb3VudAorICogICAgICAgKGxvbmcgaW50ICopWSAgICAgICAgICAgcG9pbnRlciB0byBhY2N1bXVsYXRpbmcgc3VtCisgKiAgKGxvbmcgbG9uZyBpbnQgKilaICAgICAgICAgICBwb2ludGVyIHRvIGFjY3VtdWxhdGluZyBzdW0gb2Ygc3F1YXJlcworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTU1FUihQLCBYLCBZLCBaKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGNoYXIgKnA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGludCB1MCwgdTEsIHUyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWxvbmcgaW50IHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXAgPSAodW5zaWduZWQgY2hhciAqKShQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXUwID0gKHVuc2lnbmVkIGludCkgKCpwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXUxID0gKHVuc2lnbmVkIGludCkgKCoocCArIDEpKTsgICAgICAgICAgICAgICAgICAgICAgXAorCXUyID0gKHVuc2lnbmVkIGludCkgKCh1MSA8PCA4KSB8IHUwKTsgICAgICAgICAgICAgICAgXAorCWlmICgweDgwMDAgJiB1MikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlzID0gLShsb25nIGludCkoMHg3RkZGICYgKH51MikpOyAgICAgICAgICAgICBcCisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXMgPSAgKGxvbmcgaW50KSgweDdGRkYgJiB1Mik7ICAgICAgICAgICAgICAgIFwKKwkqKChYKSkgKz0gKGxvbmcgaW50KSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKChZKSkgKz0gKGxvbmcgaW50KSBzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKChaKSkgKz0gKChsb25nIGxvbmcgaW50KShzKSAqIChsb25nIGxvbmcgaW50KShzKSk7IFwKK30gd2hpbGUgKDApCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNlbmRpZiAvKkVBU1lDQVBfSCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxMGQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfZGVidWcuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9kZWJ1Zy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgZWFzeWNhcF9kZWJ1ZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQyYWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9pb2N0bC5jCkBAIC0wLDAgKzEsMjY5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9pb2N0bC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX3N0YW5kYXJkLmgiCisjaW5jbHVkZSAiZWFzeWNhcF9pb2N0bC5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVU5MRVNTIFRIRVJFIElTIEEgUFJFTUFUVVJFIEVSUk9SIFJFVFVSTiBUSElTIFJPVVRJTkUgVVBEQVRFUyBUSEUKKyAqICBGT0xMT1dJTkc6CisgKiAgICAgICAgICBwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0CisgKiAgICAgICAgICBwZWFzeWNhcC0+ZnBzCisgKiAgICAgICAgICBwZWFzeWNhcC0+dXNlYworICogICAgICAgICAgcGVhc3ljYXAtPnRvbGVyYXRlCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBhZGp1c3Rfc3RhbmRhcmQoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwLCB2NGwyX3N0ZF9pZCBzdGRfaWQpCit7CitzdHJ1Y3QgZWFzeWNhcF9zdGFuZGFyZCBjb25zdCAqcGVhc3ljYXBfc3RhbmRhcmQ7CitfX3UxNiByZWcsIHNldDsKK2ludCBpciwgcmMsIG5lZWQ7Cit1bnNpZ25lZCBpbnQgaXR3YXMsIGlzbm93OworCitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwZWFzeWNhcF9zdGFuZGFyZCA9ICZlYXN5Y2FwX3N0YW5kYXJkWzBdOword2hpbGUgKDB4RkZGRiAhPSBwZWFzeWNhcF9zdGFuZGFyZC0+bWFzaykgeworCWlmIChzdGRfaWQgJiBwZWFzeWNhcF9zdGFuZGFyZC0+djRsMl9zdGFuZGFyZC5pZCkKKwkJYnJlYWs7CisJcGVhc3ljYXBfc3RhbmRhcmQrKzsKK30KK2lmICgweEZGRkYgPT0gcGVhc3ljYXBfc3RhbmRhcmQtPm1hc2spIHsKKwlTQVkoIkVSUk9SOiAweCUwOFg9c3RkX2lkOiBzdGFuZGFyZCBub3QgZm91bmRcbiIsIFwKKwkJCQkJCQkodW5zaWduZWQgaW50KXN0ZF9pZCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitTQVkoInVzZXIgcmVxdWVzdHMgc3RhbmRhcmQ6ICVzXG4iLCBcCisJCQkmKHBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLm5hbWVbMF0pKTsKK2lmIChwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0ID09IFwKKwkJCShpbnQpKHBlYXN5Y2FwX3N0YW5kYXJkIC0gJmVhc3ljYXBfc3RhbmRhcmRbMF0pKSB7CisJU0FZKCJyZXF1ZXN0ZWQgc3RhbmRhcmQgYWxyZWFkeSBpbiBlZmZlY3RcbiIpOworCXJldHVybiAwOworfQorcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldCA9IChpbnQpKHBlYXN5Y2FwX3N0YW5kYXJkIC0gJmVhc3ljYXBfc3RhbmRhcmRbMF0pOworcGVhc3ljYXAtPmZwcyA9IHBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yIC8gXAorCQlwZWFzeWNhcF9zdGFuZGFyZC0+djRsMl9zdGFuZGFyZC5mcmFtZXBlcmlvZC5udW1lcmF0b3I7CitpZiAoIXBlYXN5Y2FwLT5mcHMpIHsKKwlTQVkoIk1JU1RBS0U6IGZyYW1lcy1wZXItc2Vjb25kIGlzIHplcm9cbiIpOworCXJldHVybiAtRUZBVUxUOworfQorSk9UKDgsICIlaSBmcmFtZXMtcGVyLXNlY29uZFxuIiwgcGVhc3ljYXAtPmZwcyk7CitwZWFzeWNhcC0+dXNlYyA9IDEwMDAwMDAgLyAoMiAqIHBlYXN5Y2FwLT5mcHMpOworcGVhc3ljYXAtPnRvbGVyYXRlID0gMTAwMCAqICgyNSAvIHBlYXN5Y2FwLT5mcHMpOworCitraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU0FBNzExM0ggREFUQVNIRUVUIFBBR0UgNDQsIFRBQkxFIDQyCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworbmVlZCA9IDA7ICBpdHdhcyA9IDA7ICByZWcgPSAweDAwOyAgc2V0ID0gMHgwMDsKK3N3aXRjaCAocGVhc3ljYXBfc3RhbmRhcmQtPm1hc2sgJiAweDAwMEYpIHsKK2Nhc2UgTlRTQ19NX0pQOiB7CisJcmVnID0gMHgwQTsgIHNldCA9IDB4OTU7CisJaXIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJaWYgKDAgPiBpcikKKwkJU0FZKCJFUlJPUjogY2Fubm90IHJlYWQgU0FBIHJlZ2lzdGVyIDB4JTAyWFxuIiwgcmVnKTsKKwllbHNlCisJCWl0d2FzID0gKHVuc2lnbmVkIGludClpcjsKKworCisJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCisJcmMgPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCk7CisJaWYgKDAgIT0gcmMpCisJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBIHJlZ2lzdGVyICIgXAorCQkJIjB4JTAyWCB0byAweCUwMlggZm9yIEpQIHN0YW5kYXJkXG4iLCByZWcsIHNldCk7CisJZWxzZSB7CisJCWlzbm93ID0gKHVuc2lnbmVkIGludClyZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJCWlmICgwID4gaXIpCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiIFwKKwkJCQkidG8gMHglMDJYXG4iLCByZWcsIGlzbm93KTsKKwkJZWxzZQorCQkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkJImZyb20gMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBpdHdhcywgaXNub3cpOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwl9CisKKwlyZWcgPSAweDBCOyAgc2V0ID0gMHg0ODsKKwlpciA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwlpZiAoMCA+IGlyKQorCQlTQVkoIkVSUk9SOiBjYW5ub3QgcmVhZCBTQUEgcmVnaXN0ZXIgMHglMDJYXG4iLCByZWcpOworCWVsc2UKKwkJaXR3YXMgPSAodW5zaWduZWQgaW50KWlyOworCisJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCXJjID0gd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnLCBzZXQpOworCWlmICgwICE9IHJjKQorCQlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSByZWdpc3RlciAweCUwMlggdG8gMHglMDJYICIgXAorCQkJCQkJImZvciBKUCBzdGFuZGFyZFxuIiwgcmVnLCBzZXQpOworCWVsc2UgeworCQlpc25vdyA9ICh1bnNpZ25lZCBpbnQpcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCQlpZiAoMCA+IGlyKQorCQkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkJInRvIDB4JTAyWFxuIiwgcmVnLCBpc25vdyk7CisJCWVsc2UKKwkJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIgXAorCQkJCSJmcm9tIDB4JTAyWCB0byAweCUwMlhcbiIsIHJlZywgaXR3YXMsIGlzbm93KTsKKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE5PVEU6ICBOTyBicmVhayBIRVJFOiAgUlVOIE9OIFRPIE5FWFQgQ0FTRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK30KK2Nhc2UgTlRTQ19NOgorY2FzZSBQQUxfQkdISU46IHsKKwlyZWcgPSAweDBFOyAgc2V0ID0gMHgwMTsgIG5lZWQgPSAxOyAgYnJlYWs7Cit9CitjYXNlIE5UU0NfTl80NDM6CitjYXNlIFBBTF82MDogeworCXJlZyA9IDB4MEU7ICBzZXQgPSAweDExOyAgbmVlZCA9IDE7ICBicmVhazsKK30KK2Nhc2UgTlRTQ180NDM6CitjYXNlIFBBTF9OYzogeworCXJlZyA9IDB4MEU7ICBzZXQgPSAweDIxOyAgbmVlZCA9IDE7ICBicmVhazsKK30KK2Nhc2UgTlRTQ19OOgorY2FzZSBQQUxfTTogeworCXJlZyA9IDB4MEU7ICBzZXQgPSAweDMxOyAgbmVlZCA9IDE7ICBicmVhazsKK30KK2Nhc2UgU0VDQU06IHsKKwlyZWcgPSAweDBFOyAgc2V0ID0gMHg1MTsgIG5lZWQgPSAxOyAgYnJlYWs7Cit9CitkZWZhdWx0OgorCWJyZWFrOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAobmVlZCkgeworCWlyID0gcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCWlmICgwID4gaXIpCisJCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFNBQSByZWdpc3RlciAweCUwMlhcbiIsIHJlZyk7CisJZWxzZQorCQlpdHdhcyA9ICh1bnNpZ25lZCBpbnQpaXI7CisKKwlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJcmMgPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCk7CisJaWYgKDAgIT0gd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnLCBzZXQpKSB7CisJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBIHJlZ2lzdGVyICIgXAorCQkJIjB4JTAyWCB0byAweCUwMlggZm9yIHRhYmxlIDQyXG4iLCByZWcsIHNldCk7CisJfSBlbHNlIHsKKwkJaXNub3cgPSAodW5zaWduZWQgaW50KXJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwkJaWYgKDAgPiBpcikKKwkJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIgXAorCQkJCSJ0byAweCUwMlhcbiIsIHJlZywgaXNub3cpOworCQllbHNlCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiIFwKKwkJCQkiZnJvbSAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIGl0d2FzLCBpc25vdyk7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBQTcxMTNIIERBVEFTSEVFVCBQQUdFIDQxCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworcmVnID0gMHgwODsKK2lyID0gcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworaWYgKDAgPiBpcikKKwlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gcmVhZCBTQUEgcmVnaXN0ZXIgMHglMDJYICIgXAorCQkJCQkJInNvIGNhbm5vdCByZXNldFxuIiwgcmVnKTsKK2Vsc2UgeworCWl0d2FzID0gKHVuc2lnbmVkIGludClpcjsKKwlpZiAocGVhc3ljYXBfc3RhbmRhcmQtPm1hc2sgJiAweDAwMDEpCisJCXNldCA9IGl0d2FzIHwgMHg0MCA7CisJZWxzZQorCQlzZXQgPSBpdHdhcyAmIH4weDQwIDsKKworc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworcmMgID0gd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnLCBzZXQpOworaWYgKDAgIT0gcmMpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgcmVnaXN0ZXIgMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBzZXQpOworZWxzZSB7CisJaXNub3cgPSAodW5zaWduZWQgaW50KXJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcmVnKTsKKwlpZiAoMCA+IGlyKQorCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCB0byAweCUwMlhcbiIsIHJlZywgaXNub3cpOworCWVsc2UKKwkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIiBcCisJCQkiZnJvbSAweCUwMlggdG8gMHglMDJYXG4iLCByZWcsIGl0d2FzLCBpc25vdyk7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBQTcxMTNIIERBVEFTSEVFVCBQQUdFIDUxLCBUQUJMRSA1NworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityZWcgPSAweDQwOworaXIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CitpZiAoMCA+IGlyKQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFNBQSByZWdpc3RlciAweCUwMlggIiBcCisJCQkJCQkic28gY2Fubm90IHJlc2V0XG4iLCByZWcpOworZWxzZSB7CisJaXR3YXMgPSAodW5zaWduZWQgaW50KWlyOworCWlmIChwZWFzeWNhcF9zdGFuZGFyZC0+bWFzayAmIDB4MDAwMSkKKwkJc2V0ID0gaXR3YXMgfCAweDgwIDsKKwllbHNlCisJCXNldCA9IGl0d2FzICYgfjB4ODAgOworCitzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCityYyA9IHdyaXRlX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZywgc2V0KTsKK2lmICgwICE9IHJjKQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBIHJlZ2lzdGVyIDB4JTAyWCB0byAweCUwMlhcbiIsIHJlZywgc2V0KTsKK2Vsc2UgeworCWlzbm93ID0gKHVuc2lnbmVkIGludClyZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CisJaWYgKDAgPiBpcikKKwkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgdG8gMHglMDJYXG4iLCByZWcsIGlzbm93KTsKKwllbHNlCisJCUpPVCg4LCAiU0FBIHJlZ2lzdGVyIDB4JTAyWCBjaGFuZ2VkICIgXAorCQkJImZyb20gMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBpdHdhcywgaXNub3cpOworCX0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTQUE3MTEzSCBEQVRBU0hFRVQgUEFHRSA1MywgVEFCTEUgNjYKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityZWcgPSAweDVBOworaXIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIHJlZyk7CitpZiAoMCA+IGlyKQorCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFNBQSByZWdpc3RlciAweCUwMlggYnV0IGNvbnRpbnVpbmdcbiIsIHJlZyk7CisJaXR3YXMgPSAodW5zaWduZWQgaW50KWlyOworCWlmIChwZWFzeWNhcF9zdGFuZGFyZC0+bWFzayAmIDB4MDAwMSkKKwkJc2V0ID0gMHgwQSA7CisJZWxzZQorCQlzZXQgPSAweDA3IDsKKworCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwlpZiAoMCAhPSB3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcsIHNldCkpCisJCVNBWSgiRVJST1I6IGZhaWxlZCB0byBzZXQgU0FBIHJlZ2lzdGVyIDB4JTAyWCB0byAweCUwMlhcbiIsIFwKKwkJCQkJCQkJcmVnLCBzZXQpOworCWVsc2UgeworCQlpc25vdyA9ICh1bnNpZ25lZCBpbnQpcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCByZWcpOworCQlpZiAoMCA+IGlyKQorCQkJSk9UKDgsICJTQUEgcmVnaXN0ZXIgMHglMDJYIGNoYW5nZWQgIgorCQkJCSJ0byAweCUwMlhcbiIsIHJlZywgaXNub3cpOworCQllbHNlCisJCQlKT1QoOCwgIlNBQSByZWdpc3RlciAweCUwMlggY2hhbmdlZCAiCisJCQkJImZyb20gMHglMDJYIHRvIDB4JTAyWFxuIiwgcmVnLCBpdHdhcywgaXNub3cpOworCX0KKwlpZiAoMCAhPSBjaGVja19zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlKSkKKwkJU0FZKCJFUlJPUjogY2hlY2tfc2FhKCkgZmFpbGVkXG4iKTsKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRIRSBBTEdPUklUSE0gRk9SIFJFU1BPTkRJTkcgVE8gVEhFIFZJRElPX1NfRk1UIElPQ1RMIERFUEVORFMgT04gVEhFCisgKiAgQ1VSUkVOVCBWQUxVRSBPRiBwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0LgorICogIFBST1ZJREVEIFRIRSBBUkdVTUVOVCB0cnkgSVMgZmFsc2UgQU5EIFRIRVJFIElTIE5PIFBSRU1BVFVSRSBFUlJPUiBSRVRVUk4KKyAqICBUSElTIFJPVVRJTkUgVVBEQVRFUyBUSEUgRk9MTE9XSU5HOgorICogICAgICAgICAgcGVhc3ljYXAtPmZvcm1hdF9vZmZzZXQKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5waXhlbGZvcm1hdAorICogICAgICAgICAgcGVhc3ljYXAtPmZpZWxkCisgKiAgICAgICAgICBwZWFzeWNhcC0+aGVpZ2h0CisgKiAgICAgICAgICBwZWFzeWNhcC0+d2lkdGgKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5ieXRlc3BlcnBpeGVsCisgKiAgICAgICAgICBwZWFzeWNhcC0+Ynl0ZXN3YXBvcmRlcgorICogICAgICAgICAgcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWwKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfdXNlZAorICogICAgICAgICAgcGVhc3ljYXAtPnZpZGVvZmllbGRhbW91bnQKKyAqICAgICAgICAgIHBlYXN5Y2FwLT5vZmZlcmZpZWxkcworICoKKyAqICBJRiBTVUNDRVNTRlVMIFRIRSBGVU5DVElPTiBSRVRVUk5TIFRIRSBPRkZTRVQgSU4gZWFzeWNhcF9mb3JtYXRbXQorICogIElERU5USUZZSU5HIFRIRSBGT1JNQVQgV0hJQ0ggSVMgVE8gUkVUVVJORUQgVE8gVEhFIFVTRVIuCisgKiAgRVJST1JTIFJFVFVSTiBBIE5FR0FUSVZFIE5VTUJFUi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgYWRqdXN0X2Zvcm1hdChzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIFwKKwlfX3UzMiB3aWR0aCwgX191MzIgaGVpZ2h0LCBfX3UzMiBwaXhlbGZvcm1hdCwgaW50IGZpZWxkLCBib29sIHRyeSkKK3sKK3N0cnVjdCBlYXN5Y2FwX2Zvcm1hdCAqcGVhc3ljYXBfZm9ybWF0LCAqcGVhc3ljYXBfYmVzdF9mb3JtYXQ7CitfX3UxNiBtYXNrOworc3RydWN0IHVzYl9kZXZpY2UgKnA7CitpbnQgbWlzcywgbXVsdGlwbGllciwgYmVzdDsKK2NoYXIgYmZbNV0sICpwYzsKK19fdTMyIHVjOworCitpZiAoKHN0cnVjdCBlYXN5Y2FwICopTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcCA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHApIHsKKwlTQVkoIkVSUk9SOiBwZWF5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3BjID0gJmJmWzBdOwordWMgPSBwaXhlbGZvcm1hdDsgIG1lbWNweSgodm9pZCAqKXBjLCAodm9pZCAqKSgmdWMpLCA0KTsgIGJmWzRdID0gMDsKK21hc2sgPSBlYXN5Y2FwX3N0YW5kYXJkW3BlYXN5Y2FwLT5zdGFuZGFyZF9vZmZzZXRdLm1hc2s7CitTQVkoInNvdWdodDogICAgJWl4JWksJXMoMHglMDhYKSwlaT1maWVsZCwweCUwMlg9c3RkIG1hc2tcbiIsIFwKKwkJCQl3aWR0aCwgaGVpZ2h0LCBwYywgcGl4ZWxmb3JtYXQsIGZpZWxkLCBtYXNrKTsKK2lmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgeworCWZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCVNBWSgicHJlZmVyOiAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ9ZmllbGQsIHdhcyBWNEwyX0ZJRUxEX0FOWVxuIik7Cit9CitwZWFzeWNhcF9iZXN0X2Zvcm1hdCA9IChzdHJ1Y3QgZWFzeWNhcF9mb3JtYXQgKilOVUxMOworcGVhc3ljYXBfZm9ybWF0ID0gJmVhc3ljYXBfZm9ybWF0WzBdOword2hpbGUgKDAgIT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSB7CisJSk9UKDE2LCAiLj4gJWkgJWkgMHglMDhYICVpeCVpXG4iLCBcCisJCXBlYXN5Y2FwX2Zvcm1hdC0+bWFzayAmIDB4MDEsCisJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5maWVsZCwKKwkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0LAorCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgsCisJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpOworCisJaWYgKCgocGVhc3ljYXBfZm9ybWF0LT5tYXNrICYgMHgwRikgPT0gKG1hc2sgJiAweDBGKSkgJiYgXAorCQkocGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmZpZWxkID09IGZpZWxkKSAmJiBcCisJCShwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gXAorCQkJCQkJCXBpeGVsZm9ybWF0KSAmJiBcCisJCShwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGggID09IHdpZHRoKSAmJiBcCisJCShwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0ID09IGhlaWdodCkpIHsKKwkJCXBlYXN5Y2FwX2Jlc3RfZm9ybWF0ID0gcGVhc3ljYXBfZm9ybWF0OworCQkJYnJlYWs7CisJCX0KKwlwZWFzeWNhcF9mb3JtYXQrKzsKK30KK2lmICgwID09IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgeworCVNBWSgiY2Fubm90IGRvOiAlaXglaSB3aXRoIHN0YW5kYXJkIG1hc2sgMHglMDJYXG4iLCBcCisJCQkJCQkJd2lkdGgsIGhlaWdodCwgbWFzayk7CisJcGVhc3ljYXBfZm9ybWF0ID0gJmVhc3ljYXBfZm9ybWF0WzBdOyAgYmVzdCA9IC0xOworCXdoaWxlICgwICE9IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgeworCQlpZiAoKChwZWFzeWNhcF9mb3JtYXQtPm1hc2sgJiAweDBGKSA9PSAobWFzayAmIDB4MEYpKSAmJiBcCisJCQkJIChwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXhcCisJCQkJCQkuZmllbGQgPT0gZmllbGQpICYmIFwKKwkJCQkgKHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeFwKKwkJCQkJCS5waXhlbGZvcm1hdCA9PSBwaXhlbGZvcm1hdCkpIHsKKwkJCW1pc3MgPSBhYnMocGVhc3ljYXBfZm9ybWF0LT5cCisJCQkJCXY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGggIC0gd2lkdGgpOworCQkJaWYgKChiZXN0ID4gbWlzcykgfHwgKGJlc3QgPCAwKSkgeworCQkJCWJlc3QgPSBtaXNzOworCQkJCXBlYXN5Y2FwX2Jlc3RfZm9ybWF0ID0gcGVhc3ljYXBfZm9ybWF0OworCQkJCWlmICghbWlzcykKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcGVhc3ljYXBfZm9ybWF0Kys7CisJfQorCWlmICgtMSA9PSBiZXN0KSB7CisJCVNBWSgiY2Fubm90IGRvICVpeC4uLiB3aXRoIHN0YW5kYXJkIG1hc2sgMHglMDJYXG4iLCBcCisJCQkJCQkJCXdpZHRoLCBtYXNrKTsKKwkJU0FZKCJjYW5ub3QgZG8gLi4ueCVpIHdpdGggc3RhbmRhcmQgbWFzayAweCUwMlhcbiIsIFwKKwkJCQkJCQkJaGVpZ2h0LCBtYXNrKTsKKwkJU0FZKCIgICAgICAgICAgICVpeCVpIHVubWF0Y2hlZFxuIiwgd2lkdGgsIGhlaWdodCk7CisJCXJldHVybiBwZWFzeWNhcC0+Zm9ybWF0X29mZnNldDsKKwl9Cit9CitpZiAoKHN0cnVjdCBlYXN5Y2FwX2Zvcm1hdCAqKU5VTEwgPT0gcGVhc3ljYXBfYmVzdF9mb3JtYXQpIHsKKwlTQVkoIk1JU1RBS0U6IHBlYXN5Y2FwX2Jlc3RfZm9ybWF0IGlzIE5VTEwiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3BlYXN5Y2FwX2Zvcm1hdCA9IHBlYXN5Y2FwX2Jlc3RfZm9ybWF0OworCisvKi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiovCitpZiAodHJ1ZSA9PSB0cnkpCisJcmV0dXJuIChpbnQpKHBlYXN5Y2FwX2Jlc3RfZm9ybWF0IC0gJmVhc3ljYXBfZm9ybWF0WzBdKTsKKy8qLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKworaWYgKGZhbHNlICE9IHRyeSkgeworCVNBWSgiTUlTVEFLRTogdHJ1ZT09dHJ5IHdoZXJlIGlzIHNob3VsZCBiZSBmYWxzZVxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitTQVkoImFjdGlvbmluZzogJWl4JWkgJXNcbiIsIFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCwgXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCwKKwkJCSZwZWFzeWNhcF9mb3JtYXQtPm5hbWVbMF0pOworcGVhc3ljYXAtPmhlaWdodCAgICAgICAgPSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0OworcGVhc3ljYXAtPndpZHRoICAgICAgICAgPSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGg7CitwZWFzeWNhcC0+cGl4ZWxmb3JtYXQgICA9IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5waXhlbGZvcm1hdDsKK3BlYXN5Y2FwLT5maWVsZCAgICAgICAgID0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmZpZWxkOworcGVhc3ljYXAtPmZvcm1hdF9vZmZzZXQgPSAoaW50KShwZWFzeWNhcF9mb3JtYXQgLSAmZWFzeWNhcF9mb3JtYXRbMF0pOworcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWwgPSAoMHgwMEYwICYgcGVhc3ljYXBfZm9ybWF0LT5tYXNrKSA+PiA0IDsKK2lmICgweDAxMDAgJiBwZWFzeWNhcF9mb3JtYXQtPm1hc2spCisJcGVhc3ljYXAtPmJ5dGVzd2Fwb3JkZXIgPSB0cnVlOworZWxzZQorCXBlYXN5Y2FwLT5ieXRlc3dhcG9yZGVyID0gZmFsc2U7CitpZiAoMHgwODAwICYgcGVhc3ljYXBfZm9ybWF0LT5tYXNrKQorCXBlYXN5Y2FwLT5kZWNpbWF0ZXBpeGVsID0gdHJ1ZTsKK2Vsc2UKKwlwZWFzeWNhcC0+ZGVjaW1hdGVwaXhlbCA9IGZhbHNlOworaWYgKDB4MTAwMCAmIHBlYXN5Y2FwX2Zvcm1hdC0+bWFzaykKKwlwZWFzeWNhcC0+b2ZmZXJmaWVsZHMgPSB0cnVlOworZWxzZQorCXBlYXN5Y2FwLT5vZmZlcmZpZWxkcyA9IGZhbHNlOworaWYgKHRydWUgPT0gcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWwpCisJbXVsdGlwbGllciA9IDI7CitlbHNlCisJbXVsdGlwbGllciA9IDE7CitwZWFzeWNhcC0+dmlkZW9maWVsZGFtb3VudCA9IG11bHRpcGxpZXIgKiBwZWFzeWNhcC0+d2lkdGggKiBcCisJCQkJCW11bHRpcGxpZXIgKiBwZWFzeWNhcC0+aGVpZ2h0OworcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkID0gcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWwgKiBcCisJCQkJCXBlYXN5Y2FwLT53aWR0aCAqIHBlYXN5Y2FwLT5oZWlnaHQ7CisKK2lmICh0cnVlID09IHBlYXN5Y2FwLT5vZmZlcmZpZWxkcykgeworCVNBWSgiV0FSTklORzogJWk9cGVhc3ljYXAtPmZpZWxkIGlzIHVudGVzdGVkOiAiIFwKKwkJCQkicGxlYXNlIHJlcG9ydCBwcm9ibGVtc1xuIiwgcGVhc3ljYXAtPmZpZWxkKTsKKworCisvKgorICogICAgRklYTUUgLS0tLSBUSElTIElTIFVOVEVTVEVELCBNQVkgQkUgKEFORCBQUk9CQUJMWSBJUykgSU5DT1JSRUNUOgorICoKKyAqICAgIHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfdXNlZCA9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfdXNlZCAvIDI7CisgKgorICogICAgU08gRE8gTk9UIFJJU0sgSVQgWUVULgorICoKKyAqLworCisKKworfQorCitraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFBBTAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAoMCA9PSAoMHgwMSAmIHBlYXN5Y2FwX2Zvcm1hdC0+bWFzaykpIHsKKwlpZiAoKCg3MjAgPT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSAmJiBcCisJCQkoNTc2ID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpKSB8fCBcCisJCQkoKDM2MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSgyODggPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpKSB7CisJCWlmICgwICE9IHNldF9yZXNvbHV0aW9uKHAsIDB4MDAwMCwgMHgwMDAxLCAweDA1QTAsIDB4MDEyMSkpIHsKKwkJCVNBWSgiRVJST1I6IHNldF9yZXNvbHV0aW9uKCkgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmICgoNzA0ID09IHBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDU3NiA9PSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkgeworCQlpZiAoMCAhPSBzZXRfcmVzb2x1dGlvbihwLCAweDAwMDQsIDB4MDAwMSwgMHgwNTg0LCAweDAxMjEpKSB7CisJCQlTQVkoIkVSUk9SOiBzZXRfcmVzb2x1dGlvbigpIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoKCg2NDAgPT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSAmJiBcCisJCQkoNDgwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpKSB8fCBcCisJCQkoKDMyMCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSgyNDAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpKSB7CisJCWlmICgwICE9IHNldF9yZXNvbHV0aW9uKHAsIDB4MDAxNCwgMHgwMDIwLCAweDA1MTQsIDB4MDExMCkpIHsKKwkJCVNBWSgiRVJST1I6IHNldF9yZXNvbHV0aW9uKCkgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJU0FZKCJNSVNUQUtFOiBiYWQgZm9ybWF0LCBjYW5ub3Qgc2V0IHJlc29sdXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE5UU0MKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworfSBlbHNlIHsKKwlpZiAoKCg3MjAgPT0gcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LndpZHRoKSAmJiBcCisJCQkoNDgwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC5oZWlnaHQpKSB8fCBcCisJCQkoKDM2MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSgyNDAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpKSB7CisJCWlmICgwICE9IHNldF9yZXNvbHV0aW9uKHAsIDB4MDAwMCwgMHgwMDAzLCAweDA1QTAsIDB4MDBGMykpIHsKKwkJCVNBWSgiRVJST1I6IHNldF9yZXNvbHV0aW9uKCkgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmICgoKDY0MCA9PSBwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXgud2lkdGgpICYmIFwKKwkJCSg0ODAgPT0gXAorCQkJcGVhc3ljYXBfZm9ybWF0LT52NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCkpIHx8IFwKKwkJCSgoMzIwID09IFwKKwkJCXBlYXN5Y2FwX2Zvcm1hdC0+djRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCkgJiYgXAorCQkJKDI0MCA9PSBcCisJCQlwZWFzeWNhcF9mb3JtYXQtPnY0bDJfZm9ybWF0LmZtdC5waXguaGVpZ2h0KSkpIHsKKwkJaWYgKDAgIT0gc2V0X3Jlc29sdXRpb24ocCwgMHgwMDE0LCAweDAwMDMsIDB4MDUxNCwgMHgwMEYzKSkgeworCQkJU0FZKCJFUlJPUjogc2V0X3Jlc29sdXRpb24oKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlTQVkoIk1JU1RBS0U6IGJhZCBmb3JtYXQsIGNhbm5vdCBzZXQgcmVzb2x1dGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworY2hlY2tfc3RrKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKK3JldHVybiAoaW50KShwZWFzeWNhcF9iZXN0X2Zvcm1hdCAtICZlYXN5Y2FwX2Zvcm1hdFswXSk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYWRqdXN0X2JyaWdodG5lc3Moc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwLCBpbnQgdmFsdWUpCit7Cit1bnNpZ25lZCBpbnQgbW9vZDsKK2ludCBpMTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9CUklHSFRORVNTID09IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwkJaWYgKChlYXN5Y2FwX2NvbnRyb2xbaTFdLm1pbmltdW0gPiB2YWx1ZSkgfHwgXAorCQkJCQkoZWFzeWNhcF9jb250cm9sW2kxXS5tYXhpbXVtIDwgdmFsdWUpKQorCQkJdmFsdWUgPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmRlZmF1bHRfdmFsdWU7CisJCXBlYXN5Y2FwLT5icmlnaHRuZXNzID0gdmFsdWU7CisJCW1vb2QgPSAweDAwRkYgJiAodW5zaWduZWQgaW50KXBlYXN5Y2FwLT5icmlnaHRuZXNzOworCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJaWYgKCF3cml0ZV9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDBBLCBtb29kKSkgeworCQkJU0FZKCJhZGp1c3RpbmcgYnJpZ2h0bmVzcyB0byAgMHglMDJYXG4iLCBtb29kKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IGJyaWdodG5lc3MgIiBcCisJCQkJCQkJInRvIDB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJYnJlYWs7CisJfQorCWkxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgYnJpZ2h0bmVzczogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYWRqdXN0X2NvbnRyYXN0KHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IHZhbHVlKQorewordW5zaWduZWQgaW50IG1vb2Q7CitpbnQgaTE7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2kxID0gMDsKK3doaWxlICgweEZGRkZGRkZGICE9IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwlpZiAoVjRMMl9DSURfQ09OVFJBU1QgPT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCQlpZiAoKGVhc3ljYXBfY29udHJvbFtpMV0ubWluaW11bSA+IHZhbHVlKSB8fCBcCisJCQkJCShlYXN5Y2FwX2NvbnRyb2xbaTFdLm1heGltdW0gPCB2YWx1ZSkpCisJCQl2YWx1ZSA9IGVhc3ljYXBfY29udHJvbFtpMV0uZGVmYXVsdF92YWx1ZTsKKwkJcGVhc3ljYXAtPmNvbnRyYXN0ID0gdmFsdWU7CisJCW1vb2QgPSAweDAwRkYgJiAodW5zaWduZWQgaW50KSAocGVhc3ljYXAtPmNvbnRyYXN0IC0gMTI4KTsKKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJCWlmICghd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgwQiwgbW9vZCkpIHsKKwkJCVNBWSgiYWRqdXN0aW5nIGNvbnRyYXN0IHRvICAweCUwMlhcbiIsIG1vb2QpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgY29udHJhc3QgdG8gIiBcCisJCQkJCQkJIjB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCisJCXNldDJ0bzc4KHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisKKwkJYnJlYWs7CisJfQorCWkxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgY29udHJhc3Q6IGNvbnRyb2wgbm90IGZvdW5kXG4iKTsKK3JldHVybiAtRU5PRU5UOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGFkanVzdF9zYXR1cmF0aW9uKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IHZhbHVlKQorewordW5zaWduZWQgaW50IG1vb2Q7CitpbnQgaTE7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2kxID0gMDsKK3doaWxlICgweEZGRkZGRkZGICE9IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwlpZiAoVjRMMl9DSURfU0FUVVJBVElPTiA9PSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCWlmICgoZWFzeWNhcF9jb250cm9sW2kxXS5taW5pbXVtID4gdmFsdWUpIHx8IFwKKwkJCQkJKGVhc3ljYXBfY29udHJvbFtpMV0ubWF4aW11bSA8IHZhbHVlKSkKKwkJCXZhbHVlID0gZWFzeWNhcF9jb250cm9sW2kxXS5kZWZhdWx0X3ZhbHVlOworCQlwZWFzeWNhcC0+c2F0dXJhdGlvbiA9IHZhbHVlOworCQltb29kID0gMHgwMEZGICYgKHVuc2lnbmVkIGludCkgKHBlYXN5Y2FwLT5zYXR1cmF0aW9uIC0gMTI4KTsKKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJCWlmICghd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgwQywgbW9vZCkpIHsKKwkJCVNBWSgiYWRqdXN0aW5nIHNhdHVyYXRpb24gdG8gIDB4JTAyWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCVNBWSgiV0FSTklORzogZmFpbGVkIHRvIGFkanVzdCBzYXR1cmF0aW9uIHRvICIgXAorCQkJCQkJCSIweCUwMlhcbiIsIG1vb2QpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJYnJlYWs7CisKKwkJc2V0MnRvNzgocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKKworCX0KKwlpMSsrOworfQorU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IHNhdHVyYXRpb246IGNvbnRyb2wgbm90IGZvdW5kXG4iKTsKK3JldHVybiAtRU5PRU5UOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGFkanVzdF9odWUoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwLCBpbnQgdmFsdWUpCit7Cit1bnNpZ25lZCBpbnQgbW9vZDsKK2ludCBpMSwgaTI7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2kxID0gMDsKK3doaWxlICgweEZGRkZGRkZGICE9IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwlpZiAoVjRMMl9DSURfSFVFID09IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwkJaWYgKChlYXN5Y2FwX2NvbnRyb2xbaTFdLm1pbmltdW0gPiB2YWx1ZSkgfHwgXAorCQkJCQkoZWFzeWNhcF9jb250cm9sW2kxXS5tYXhpbXVtIDwgdmFsdWUpKQorCQkJdmFsdWUgPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmRlZmF1bHRfdmFsdWU7CisJCXBlYXN5Y2FwLT5odWUgPSB2YWx1ZTsKKwkJaTIgPSBwZWFzeWNhcC0+aHVlIC0gMTI4OworCQltb29kID0gMHgwMEZGICYgKChpbnQpIGkyKTsKKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJCWlmICghd3JpdGVfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgwRCwgbW9vZCkpIHsKKwkJCVNBWSgiYWRqdXN0aW5nIGh1ZSB0byAgMHglMDJYXG4iLCBtb29kKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IGh1ZSB0byAweCUwMlhcbiIsIG1vb2QpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKworCQlzZXQydG83OChwZWFzeWNhcC0+cHVzYl9kZXZpY2UpOworCisJCWJyZWFrOworCX0KKwlpMSsrOworfQorU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IGh1ZTogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgYWRqdXN0X3ZvbHVtZShzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCB2YWx1ZSkKK3sKK19fczggbW9vZDsKK2ludCBpMTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9BVURJT19WT0xVTUUgPT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCQlpZiAoKGVhc3ljYXBfY29udHJvbFtpMV0ubWluaW11bSA+IHZhbHVlKSB8fCBcCisJCQkoZWFzeWNhcF9jb250cm9sW2kxXS5tYXhpbXVtIDwgdmFsdWUpKQorCQkJdmFsdWUgPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmRlZmF1bHRfdmFsdWU7CisJCXBlYXN5Y2FwLT52b2x1bWUgPSB2YWx1ZTsKKwkJbW9vZCA9ICgxNiA+IHBlYXN5Y2FwLT52b2x1bWUpID8gMTYgOiBcCisJCQkoKDMxIDwgcGVhc3ljYXAtPnZvbHVtZSkgPyAzMSA6IFwKKwkJCShfX3M4KSBwZWFzeWNhcC0+dm9sdW1lKTsKKwkJaWYgKCFhdWRpb19nYWluc2V0KHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgbW9vZCkpIHsKKwkJCVNBWSgiYWRqdXN0aW5nIHZvbHVtZSB0byAweCUwMVhcbiIsIG1vb2QpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3Qgdm9sdW1lIHRvICIgXAorCQkJCQkJCSIweCUxWFxuIiwgbW9vZCk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCQlicmVhazsKKwl9CitpMSsrOworfQorU0FZKCJXQVJOSU5HOiBmYWlsZWQgdG8gYWRqdXN0IHZvbHVtZTogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFOIEFMVEVSTkFUSVZFIE1FVEhPRCBPRiBNVVRJTkcgTUlHSFQgU0VFTSBUTyBCRToKKyAqICAgICAgICAgICAgdXNiX3NldF9pbnRlcmZhY2UocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2UsIFwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb2ZmKTsKKyAqICBIT1dFVkVSLCBBRlRFUiBUSElTIENPTU1BTkQgSVMgSVNTVUVEIEFMTCBTVUJTRVFVRU5UIFVSQlMgUkVDRUlWRSBTVEFUVVMKKyAqICAtRVNIVVRET1dOLiAgVEhFIEhBTkRMRVIgUk9VVElORSBlYXN5c25kX2NvbXBsZXRlKCkgREVDTElORVMgVE8gUkVTVUJNSVQKKyAqICBUSEUgVVJCIEFORCBUSEUgUElQRUxJTkUgQ09MTEFQU0VTIElSUkVUUklFVkFCTFkuICBCRVdBUkUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBhZGp1c3RfbXV0ZShzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCB2YWx1ZSkKK3sKK2ludCBpMTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraTEgPSAwOword2hpbGUgKDB4RkZGRkZGRkYgIT0gZWFzeWNhcF9jb250cm9sW2kxXS5pZCkgeworCWlmIChWNEwyX0NJRF9BVURJT19NVVRFID09IGVhc3ljYXBfY29udHJvbFtpMV0uaWQpIHsKKwkJcGVhc3ljYXAtPm11dGUgPSB2YWx1ZTsKKwkJc3dpdGNoIChwZWFzeWNhcC0+bXV0ZSkgeworCQljYXNlIDE6IHsKKwkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlID0gMTsKKwkJCXBlYXN5Y2FwLT50aW1ldmFsMC50dl9zZWMgPSAwOworCQkJU0FZKCJhZGp1c3RpbmcgbXV0ZTogJWk9cGVhc3ljYXAtPmF1ZGlvX2lkbGVcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9faWRsZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlkZWZhdWx0OiB7CisJCQlwZWFzeWNhcC0+YXVkaW9faWRsZSA9IDA7CisJCQlTQVkoImFkanVzdGluZyBtdXRlOiAlaT1wZWFzeWNhcC0+YXVkaW9faWRsZVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJCXJldHVybiAwOworCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWkxKys7Cit9CitTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgbXV0ZTogY29udHJvbCBub3QgZm91bmRcbiIpOworcmV0dXJuIC1FTk9FTlQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBlYXN5Y2FwX2lvY3RsX2JrbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CitzdGF0aWMgc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlICpwOworc3RhdGljIF9fdTMyIGlzZXF1ZW5jZTsKKworcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLTE7Cit9CitwID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcCkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTU9TVCBPRiBUSEUgVkFSSUFCTEVTIERFQ0xBUkVEIHN0YXRpYyBJTiBUSEUgY2FzZXt9IEJMT0NLUyBCRUxPVyBBUkUgU08KKyAqICBERUNMQVJFRCBTSU1QTFkgVE8gQVZPSUQgQSBDT01QSUxFUiBXQVJOSU5HIE9GIFRIRSBLSU5EOgorICogIGVhc3ljYXBfaW9jdGwuYzogd2FybmluZzoKKyAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnJhbWUgc2l6ZSBvZiAuLi4gYnl0ZXMgaXMgbGFyZ2VyIHRoYW4gMTAyNCBieXRlcworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzd2l0Y2ggKGNtZCkgeworY2FzZSBWSURJT0NfUVVFUllDQVA6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSB2NGwyX2NhcGFiaWxpdHk7CisJc3RhdGljIGNoYXIgdmVyc2lvblsxNl0sICpwMSwgKnAyOworCXN0YXRpYyBpbnQgaSwgcmMsIGtbM107CisJc3RhdGljIGxvbmcgbG5nOworCisJSk9UKDgsICJWSURJT0NfUVVFUllDQVBcbiIpOworCisJaWYgKDE2IDw9IHN0cmxlbihFQVNZQ0FQX0RSSVZFUl9WRVJTSU9OKSkgeworCQlTQVkoIkVSUk9SOiBiYWQgZHJpdmVyIHZlcnNpb24gc3RyaW5nXG4iKTsgcmV0dXJuIC1FSU5WQUw7CisJfQorCXN0cmNweSgmdmVyc2lvblswXSwgRUFTWUNBUF9EUklWRVJfVkVSU0lPTik7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJa1tpXSA9IDA7CisJcDIgPSAmdmVyc2lvblswXTsgIGkgPSAwOworCXdoaWxlICgqcDIpIHsKKwkJcDEgPSBwMjsKKwkJd2hpbGUgKCpwMiAmJiAoJy4nICE9ICpwMikpCisJCQlwMisrOworCQlpZiAoKnAyKQorCQkJKnAyKysgPSAwOworCQlpZiAoMyA+IGkpIHsKKwkJCXJjID0gKGludCkgc3RyaWN0X3N0cnRvbChwMSwgMTAsICZsbmcpOworCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQlTQVkoIkVSUk9SOiAlaT1zdHJpY3Rfc3RydG9sKCVzLC4sLClcbiIsIFwKKwkJCQkJCQkJcmMsIHAxKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWtbaV0gPSAoaW50KWxuZzsKKwkJfQorCQlpKys7CisJfQorCisJbWVtc2V0KCZ2NGwyX2NhcGFiaWxpdHksIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CisJc3RybGNweSgmdjRsMl9jYXBhYmlsaXR5LmRyaXZlclswXSwgImVhc3ljYXAiLCBcCisJCQkJCXNpemVvZih2NGwyX2NhcGFiaWxpdHkuZHJpdmVyKSk7CisKKwl2NGwyX2NhcGFiaWxpdHkuY2FwYWJpbGl0aWVzID0gXAorCQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkcgfCBcCisJCQkJVjRMMl9DQVBfQVVESU8gICAgICAgICB8IFY0TDJfQ0FQX1JFQURXUklURTsKKworCXY0bDJfY2FwYWJpbGl0eS52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oa1swXSwga1sxXSwga1syXSk7CisJSk9UKDgsICJ2NGwyX2NhcGFiaWxpdHkudmVyc2lvbj0oJWksJWksJWkpXG4iLCBrWzBdLCBrWzFdLCBrWzJdKTsKKworCXN0cmxjcHkoJnY0bDJfY2FwYWJpbGl0eS5jYXJkWzBdLCAiRWFzeUNBUCBEQzYwIiwgXAorCQlzaXplb2YodjRsMl9jYXBhYmlsaXR5LmNhcmQpKTsKKworCWlmICh1c2JfbWFrZV9wYXRoKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgJnY0bDJfY2FwYWJpbGl0eS5idXNfaW5mb1swXSxcCisJCQkJc2l6ZW9mKHY0bDJfY2FwYWJpbGl0eS5idXNfaW5mbykpIDwgMCkgeworCQlzdHJsY3B5KCZ2NGwyX2NhcGFiaWxpdHkuYnVzX2luZm9bMF0sICJFYXN5Q0FQIGJ1c19pbmZvIiwgXAorCQkJCQlzaXplb2YodjRsMl9jYXBhYmlsaXR5LmJ1c19pbmZvKSk7CisJCUpPVCg4LCAiJXM9djRsMl9jYXBhYmlsaXR5LmJ1c19pbmZvXG4iLCBcCisJCQkJCSZ2NGwyX2NhcGFiaWxpdHkuYnVzX2luZm9bMF0pOworCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9jYXBhYmlsaXR5LCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTUlOUFVUOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX2lucHV0IHY0bDJfaW5wdXQ7CisJc3RhdGljIF9fdTMyIGluZGV4OworCisJSk9UKDgsICJWSURJT0NfRU5VTUlOUFVUXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2lucHV0LCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaW5kZXggPSB2NGwyX2lucHV0LmluZGV4OworCW1lbXNldCgmdjRsMl9pbnB1dCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAwOiB7CisJCXY0bDJfaW5wdXQuaW5kZXggPSBpbmRleDsKKwkJc3RyY3B5KCZ2NGwyX2lucHV0Lm5hbWVbMF0sICJDVkJTMCIpOworCQl2NGwyX2lucHV0LnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQl2NGwyX2lucHV0LmF1ZGlvc2V0ID0gMHgwMTsKKwkJdjRsMl9pbnB1dC50dW5lciA9IDA7CisJCXY0bDJfaW5wdXQuc3RkID0gVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0gfCBcCisJCQkJVjRMMl9TVERfTlRTQyA7CisJCXY0bDJfaW5wdXQuc3RhdHVzID0gMDsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9pbnB1dC5uYW1lWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMTogeworCQl2NGwyX2lucHV0LmluZGV4ID0gaW5kZXg7CisJCXN0cmNweSgmdjRsMl9pbnB1dC5uYW1lWzBdLCAiQ1ZCUzEiKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDI6IHsKKwkJdjRsMl9pbnB1dC5pbmRleCA9IGluZGV4OworCQlzdHJjcHkoJnY0bDJfaW5wdXQubmFtZVswXSwgIkNWQlMyIik7CisJCXY0bDJfaW5wdXQudHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisJCXY0bDJfaW5wdXQuYXVkaW9zZXQgPSAweDAxOworCQl2NGwyX2lucHV0LnR1bmVyID0gMDsKKwkJdjRsMl9pbnB1dC5zdGQgPSBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSB8IFwKKwkJCQlWNEwyX1NURF9OVFNDIDsKKwkJdjRsMl9pbnB1dC5zdGF0dXMgPSAwOworCQlKT1QoOCwgIiVpPWluZGV4OiAlc1xuIiwgaW5kZXgsICZ2NGwyX2lucHV0Lm5hbWVbMF0pOworCQlicmVhazsKKwl9CisJY2FzZSAzOiB7CisJCXY0bDJfaW5wdXQuaW5kZXggPSBpbmRleDsKKwkJc3RyY3B5KCZ2NGwyX2lucHV0Lm5hbWVbMF0sICJDVkJTMyIpOworCQl2NGwyX2lucHV0LnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCQl2NGwyX2lucHV0LmF1ZGlvc2V0ID0gMHgwMTsKKwkJdjRsMl9pbnB1dC50dW5lciA9IDA7CisJCXY0bDJfaW5wdXQuc3RkID0gVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0gfCBcCisJCQkJVjRMMl9TVERfTlRTQyA7CisJCXY0bDJfaW5wdXQuc3RhdHVzID0gMDsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9pbnB1dC5uYW1lWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgNDogeworCQl2NGwyX2lucHV0LmluZGV4ID0gaW5kZXg7CisJCXN0cmNweSgmdjRsMl9pbnB1dC5uYW1lWzBdLCAiQ1ZCUzQiKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDU6IHsKKwkJdjRsMl9pbnB1dC5pbmRleCA9IGluZGV4OworCQlzdHJjcHkoJnY0bDJfaW5wdXQubmFtZVswXSwgIlMtVklERU8iKTsKKwkJdjRsMl9pbnB1dC50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJdjRsMl9pbnB1dC5hdWRpb3NldCA9IDB4MDE7CisJCXY0bDJfaW5wdXQudHVuZXIgPSAwOworCQl2NGwyX2lucHV0LnN0ZCA9IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNIHwgXAorCQkJCVY0TDJfU1REX05UU0MgOworCQl2NGwyX2lucHV0LnN0YXR1cyA9IDA7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfaW5wdXQubmFtZVswXSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGlucHV0c1xuIiwgaW5kZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJfQorCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfaW5wdXQsIFwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfSU5QVVQ6IHsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisKKwlKT1QoOCwgIlZJRElPQ19HX0lOUFVUXG4iKTsKKwlpbmRleCA9IChfX3UzMilwZWFzeWNhcC0+aW5wdXQ7CisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVpXG4iLCBpbmRleCk7CisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmluZGV4LCBzaXplb2YoX191MzIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX0lOUFVUOgorCXsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisKKwlKT1QoOCwgIlZJRElPQ19TX0lOUFVUXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZpbmRleCwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YoX191MzIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlKT1QoOCwgInVzZXIgcmVxdWVzdHMgaW5wdXQgJWlcbiIsIGluZGV4KTsKKworCWlmICgoaW50KWluZGV4ID09IHBlYXN5Y2FwLT5pbnB1dCkgeworCQlTQVkoInJlcXVlc3RlZCBpbnB1dCBhbHJlYWR5IGluIGVmZmVjdFxuIik7CisJCWJyZWFrOworCX0KKworCWlmICgoMCA+IGluZGV4KSB8fCAoNSA8IGluZGV4KSkgeworCQlKT1QoOCwgIkVSUk9SOiAgYmFkIHJlcXVlc3RlZCBpbnB1dDogJWlcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBlYXN5Y2FwLT5pbnB1dCA9IChpbnQpaW5kZXg7CisKKwlzZWxlY3RfaW5wdXQocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBwZWFzeWNhcC0+aW5wdXQsIDkpOworCisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19FTlVNQVVESU86IHsKKwlKT1QoOCwgIlZJRElPQ19FTlVNQVVESU9cbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTUFVRE9VVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9hdWRpb291dCB2NGwyX2F1ZGlvb3V0OworCisJSk9UKDgsICJWSURJT0NfRU5VTUFVRE9VVFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9hdWRpb291dCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpb291dCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICgwICE9IHY0bDJfYXVkaW9vdXQuaW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCgmdjRsMl9hdWRpb291dCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2F1ZGlvb3V0KSk7CisJdjRsMl9hdWRpb291dC5pbmRleCA9IDA7CisJc3RyY3B5KCZ2NGwyX2F1ZGlvb3V0Lm5hbWVbMF0sICJTb3VuZHRyYWNrIik7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9hdWRpb291dCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW9vdXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19RVUVSWUNUUkw6IHsKKwlzdGF0aWMgaW50IGkxOworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdjRsMl9xdWVyeWN0cmw7CisKKwlKT1QoOCwgIlZJRElPQ19RVUVSWUNUUkxcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfcXVlcnljdHJsLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWkxID0gMDsKKwl3aGlsZSAoMHhGRkZGRkZGRiAhPSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCWlmIChlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkID09IHY0bDJfcXVlcnljdHJsLmlkKSB7CisJCQlKT1QoOCwgIlZJRElPQ19RVUVSWUNUUkwgICVzPWVhc3ljYXBfY29udHJvbFslaV0iIFwKKwkJCQkiLm5hbWVcbiIsICZlYXN5Y2FwX2NvbnRyb2xbaTFdLm5hbWVbMF0sIGkxKTsKKwkJCW1lbWNweSgmdjRsMl9xdWVyeWN0cmwsICZlYXN5Y2FwX2NvbnRyb2xbaTFdLCBcCisJCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfcXVlcnljdHJsKSk7CisJCQlicmVhazsKKwkJfQorCQlpMSsrOworCX0KKwlpZiAoMHhGRkZGRkZGRiA9PSBlYXN5Y2FwX2NvbnRyb2xbaTFdLmlkKSB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGNvbnRyb2xzXG4iLCBpMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9xdWVyeWN0cmwsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FVRVJZTUVOVTogeworCUpPVCg4LCAiVklESU9DX1FVRVJZTUVOVSB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19HX0NUUkw6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfY29udHJvbCB2NGwyX2NvbnRyb2w7CisKKwlKT1QoOCwgIlZJRElPQ19HX0NUUkxcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfY29udHJvbCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9jb250cm9sKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3dpdGNoICh2NGwyX2NvbnRyb2wuaWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6IHsKKwkJdjRsMl9jb250cm9sLnZhbHVlID0gcGVhc3ljYXAtPmJyaWdodG5lc3M7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyBicmlnaHRuZXNzOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJdjRsMl9jb250cm9sLnZhbHVlID0gcGVhc3ljYXAtPmNvbnRyYXN0OworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgY29udHJhc3Q6ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiB7CisJCXY0bDJfY29udHJvbC52YWx1ZSA9IHBlYXN5Y2FwLT5zYXR1cmF0aW9uOworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgc2F0dXJhdGlvbjogJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX0hVRTogeworCQl2NGwyX2NvbnRyb2wudmFsdWUgPSBwZWFzeWNhcC0+aHVlOworCQlKT1QoOCwgInVzZXIgZW5xdWlyZXMgaHVlOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiB7CisJCXY0bDJfY29udHJvbC52YWx1ZSA9IHBlYXN5Y2FwLT52b2x1bWU7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyB2b2x1bWU6ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiB7CisJCWlmICgxID09IHBlYXN5Y2FwLT5tdXRlKQorCQkJdjRsMl9jb250cm9sLnZhbHVlID0gdHJ1ZTsKKwkJZWxzZQorCQkJdjRsMl9jb250cm9sLnZhbHVlID0gZmFsc2U7CisJCUpPVCg4LCAidXNlciBlbnF1aXJlcyBtdXRlOiAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJU0FZKCJFUlJPUjogdW5rbm93biBWNEwyIGNvbnRyb2w6IDB4JTA4WD1pZFxuIiwgXAorCQkJCQkJCXY0bDJfY29udHJvbC5pZCk7CisJCWV4cGxhaW5fY2lkKHY0bDJfY29udHJvbC5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl9CisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfY29udHJvbCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY29udHJvbCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKyNpZiBkZWZpbmVkKFZJRElPQ19TX0NUUkxfT0xEKQorY2FzZSBWSURJT0NfU19DVFJMX09MRDogeworCUpPVCg4LCAiVklESU9DX1NfQ1RSTF9PTEQgcmVxdWlyZWQgYXQgbGVhc3QgZm9yIHhhd3R2XG4iKTsKK30KKyNlbmRpZiAvKlZJRElPQ19TX0NUUkxfT0xEKi8KK2Nhc2UgVklESU9DX1NfQ1RSTDoKKwl7CisJc3RhdGljIHN0cnVjdCB2NGwyX2NvbnRyb2wgdjRsMl9jb250cm9sOworCisJSk9UKDgsICJWSURJT0NfU19DVFJMXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2NvbnRyb2wsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY29udHJvbCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXN3aXRjaCAodjRsMl9jb250cm9sLmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiB7CisJCUpPVCg4LCAidXNlciByZXF1ZXN0cyBicmlnaHRuZXNzICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlpZiAoMCAhPSBhZGp1c3RfYnJpZ2h0bmVzcyhwZWFzeWNhcCwgdjRsMl9jb250cm9sLnZhbHVlKSkKKwkJCTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIGNvbnRyYXN0ICVpXG4iLCB2NGwyX2NvbnRyb2wudmFsdWUpOworCQlpZiAoMCAhPSBhZGp1c3RfY29udHJhc3QocGVhc3ljYXAsIHY0bDJfY29udHJvbC52YWx1ZSkpCisJCQk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIHNhdHVyYXRpb24gJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICgwICE9IGFkanVzdF9zYXR1cmF0aW9uKHBlYXN5Y2FwLCB2NGwyX2NvbnRyb2wudmFsdWUpKQorCQkJOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9IVUU6IHsKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIGh1ZSAlaVxuIiwgdjRsMl9jb250cm9sLnZhbHVlKTsKKwkJaWYgKDAgIT0gYWRqdXN0X2h1ZShwZWFzeWNhcCwgdjRsMl9jb250cm9sLnZhbHVlKSkKKwkJCTsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOiB7CisJCUpPVCg4LCAidXNlciByZXF1ZXN0cyB2b2x1bWUgJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICgwICE9IGFkanVzdF92b2x1bWUocGVhc3ljYXAsIHY0bDJfY29udHJvbC52YWx1ZSkpCisJCQk7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6IHsKKwkJaW50IG11dGU7CisKKwkJSk9UKDgsICJ1c2VyIHJlcXVlc3RzIG11dGUgJWlcbiIsIHY0bDJfY29udHJvbC52YWx1ZSk7CisJCWlmICh0cnVlID09IHY0bDJfY29udHJvbC52YWx1ZSkKKwkJCW11dGUgPSAxOworCQllbHNlCisJCQltdXRlID0gMDsKKworCQlpZiAoMCAhPSBhZGp1c3RfbXV0ZShwZWFzeWNhcCwgbXV0ZSkpCisJCQlTQVkoIldBUk5JTkc6IGZhaWxlZCB0byBhZGp1c3QgbXV0ZSB0byAlaVxuIiwgbXV0ZSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCVNBWSgiRVJST1I6IHVua25vd24gVjRMMiBjb250cm9sOiAweCUwOFg9aWRcbiIsIFwKKwkJCQkJCQl2NGwyX2NvbnRyb2wuaWQpOworCQlleHBsYWluX2NpZCh2NGwyX2NvbnRyb2wuaWQpOworCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX0VYVF9DVFJMUzogeworCUpPVCg4LCAiVklESU9DX1NfRVhUX0NUUkxTIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0VOVU1fRk1UOiB7CisJc3RhdGljIF9fdTMyIGluZGV4OworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHY0bDJfZm10ZGVzYzsKKworCUpPVCg4LCAiVklESU9DX0VOVU1fRk1UXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2ZtdGRlc2MsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWluZGV4ID0gdjRsMl9mbXRkZXNjLmluZGV4OworCW1lbXNldCgmdjRsMl9mbXRkZXNjLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfZm10ZGVzYykpOworCisJdjRsMl9mbXRkZXNjLmluZGV4ID0gaW5kZXg7CisJdjRsMl9mbXRkZXNjLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisKKwlzd2l0Y2ggKGluZGV4KSB7CisJY2FzZSAwOiB7CisJCXY0bDJfZm10ZGVzYy5mbGFncyA9IDA7CisJCXN0cmNweSgmdjRsMl9mbXRkZXNjLmRlc2NyaXB0aW9uWzBdLCAidXl2eSIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfVVlWWTsKKwkJSk9UKDgsICIlaT1pbmRleDogJXNcbiIsIGluZGV4LCAmdjRsMl9mbXRkZXNjLmRlc2NyaXB0aW9uWzBdKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgMTogeworCQl2NGwyX2ZtdGRlc2MuZmxhZ3MgPSAwOworCQlzdHJjcHkoJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSwgInl1eTIiKTsKKwkJdjRsMl9mbXRkZXNjLnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDI6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJyZ2IyNCIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMjQ7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDM6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJyZ2IzMiIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfUkdCMzI7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDQ6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJiZ3IyNCIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfQkdSMjQ7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwljYXNlIDU6IHsKKwkJdjRsMl9mbXRkZXNjLmZsYWdzID0gMDsKKwkJc3RyY3B5KCZ2NGwyX2ZtdGRlc2MuZGVzY3JpcHRpb25bMF0sICJiZ3IzMiIpOworCQl2NGwyX2ZtdGRlc2MucGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfQkdSMzI7CisJCUpPVCg4LCAiJWk9aW5kZXg6ICVzXG4iLCBpbmRleCwgJnY0bDJfZm10ZGVzYy5kZXNjcmlwdGlvblswXSk7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCUpPVCg4LCAiJWk9aW5kZXg6IGV4aGF1c3RzIGZvcm1hdHNcbiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCX0KKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9mbXRkZXNjLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mbXRkZXNjKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfRU5VTV9GUkFNRVNJWkVTOiB7CisJSk9UKDgsICJWSURJT0NfRU5VTV9GUkFNRVNJWkVTIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK2Nhc2UgVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFM6IHsKKwlKT1QoOCwgIlZJRElPQ19FTlVNX0ZSQU1FX0lOVEVSVkFMUyB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19HX0ZNVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7CisJc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdjRsMl9waXhfZm9ybWF0OworCisJSk9UKDgsICJWSURJT0NfR19GTVRcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfZm9ybWF0LCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Zvcm1hdCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX2Zvcm1hdC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1zZXQoJnY0bDJfcGl4X2Zvcm1hdCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpKTsKKwl2NGwyX2Zvcm1hdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCW1lbWNweSgmKHY0bDJfZm9ybWF0LmZtdC5waXgpLCBcCisJCQkgJihlYXN5Y2FwX2Zvcm1hdFtwZWFzeWNhcC0+Zm9ybWF0X29mZnNldF1cCisJCQkudjRsMl9mb3JtYXQuZm10LnBpeCksIHNpemVvZih2NGwyX3BpeF9mb3JtYXQpKTsKKwlKT1QoOCwgInVzZXIgaXMgdG9sZDogJXNcbiIsIFwKKwkJCSZlYXN5Y2FwX2Zvcm1hdFtwZWFzeWNhcC0+Zm9ybWF0X29mZnNldF0ubmFtZVswXSk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9mb3JtYXQsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Zvcm1hdCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1RSWV9GTVQ6CitjYXNlIFZJRElPQ19TX0ZNVDogeworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mb3JtYXQgdjRsMl9mb3JtYXQ7CisJc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdjRsMl9waXhfZm9ybWF0OworCXN0YXRpYyBib29sIHRyeTsKKwlzdGF0aWMgaW50IGJlc3RfZm9ybWF0OworCisJaWYgKFZJRElPQ19UUllfRk1UID09IGNtZCkgeworCQlKT1QoOCwgIlZJRElPQ19UUllfRk1UXG4iKTsKKwkJdHJ5ID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlKT1QoOCwgIlZJRElPQ19TX0ZNVFxuIik7CisJCXRyeSA9IGZhbHNlOworCX0KKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2Zvcm1hdCwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwliZXN0X2Zvcm1hdCA9IGFkanVzdF9mb3JtYXQocGVhc3ljYXAsIFwKKwkJCQkJdjRsMl9mb3JtYXQuZm10LnBpeC53aWR0aCwgXAorCQkJCQl2NGwyX2Zvcm1hdC5mbXQucGl4LmhlaWdodCwgXAorCQkJCQl2NGwyX2Zvcm1hdC5mbXQucGl4LnBpeGVsZm9ybWF0LCBcCisJCQkJCXY0bDJfZm9ybWF0LmZtdC5waXguZmllbGQsIFwKKwkJCQkJdHJ5KTsKKwlpZiAoMCA+IGJlc3RfZm9ybWF0KSB7CisJCUpPVCg4LCAiV0FSTklORzogYWRqdXN0X2Zvcm1hdCgpIHJldHVybmVkICVpXG4iLCBiZXN0X2Zvcm1hdCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKy8qLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uKi8KKwltZW1zZXQoJnY0bDJfcGl4X2Zvcm1hdCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpKTsKKwl2NGwyX2Zvcm1hdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJbWVtY3B5KCYodjRsMl9mb3JtYXQuZm10LnBpeCksICYoZWFzeWNhcF9mb3JtYXRbYmVzdF9mb3JtYXRdXAorCQkJLnY0bDJfZm9ybWF0LmZtdC5waXgpLCBzaXplb2YodjRsMl9waXhfZm9ybWF0KSk7CisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVzXG4iLCAmZWFzeWNhcF9mb3JtYXRbYmVzdF9mb3JtYXRdLm5hbWVbMF0pOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfZm9ybWF0LCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9mb3JtYXQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19DUk9QQ0FQOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX2Nyb3BjYXAgdjRsMl9jcm9wY2FwOworCisJSk9UKDgsICJWSURJT0NfQ1JPUENBUFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9jcm9wY2FwLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2Nyb3BjYXApKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAodjRsMl9jcm9wY2FwLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlKT1QoOCwgInY0bDJfY3JvcGNhcC50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRVxuIik7CisKKwltZW1zZXQoJnY0bDJfY3JvcGNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2Nyb3BjYXApKTsKKwl2NGwyX2Nyb3BjYXAudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwl2NGwyX2Nyb3BjYXAuYm91bmRzLmxlZnQgICAgICA9IDA7CisJdjRsMl9jcm9wY2FwLmJvdW5kcy50b3AgICAgICAgPSAwOworCXY0bDJfY3JvcGNhcC5ib3VuZHMud2lkdGggICAgID0gcGVhc3ljYXAtPndpZHRoOworCXY0bDJfY3JvcGNhcC5ib3VuZHMuaGVpZ2h0ICAgID0gcGVhc3ljYXAtPmhlaWdodDsKKwl2NGwyX2Nyb3BjYXAuZGVmcmVjdC5sZWZ0ICAgICA9IDA7CisJdjRsMl9jcm9wY2FwLmRlZnJlY3QudG9wICAgICAgPSAwOworCXY0bDJfY3JvcGNhcC5kZWZyZWN0LndpZHRoICAgID0gcGVhc3ljYXAtPndpZHRoOworCXY0bDJfY3JvcGNhcC5kZWZyZWN0LmhlaWdodCAgID0gcGVhc3ljYXAtPmhlaWdodDsKKwl2NGwyX2Nyb3BjYXAucGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKKwl2NGwyX2Nyb3BjYXAucGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSAxOworCisJSk9UKDgsICJ1c2VyIGlzIHRvbGQ6ICVpeCVpXG4iLCBwZWFzeWNhcC0+d2lkdGgsIHBlYXN5Y2FwLT5oZWlnaHQpOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfY3JvcGNhcCwgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY3JvcGNhcCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfQ1JPUDoKK2Nhc2UgVklESU9DX1NfQ1JPUDogeworCUpPVCg4LCAiVklESU9DX0dfQ1JPUHxWSURJT0NfU19DUk9QICB1bnN1cHBvcnRlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19RVUVSWVNURDogeworCUpPVCg4LCAiVklESU9DX1FVRVJZU1REOiAiIFwKKwkJCSJFYXN5Q0FQIGlzIGluY2FwYWJsZSBvZiBkZXRlY3Rpbmcgc3RhbmRhcmRcbiIpOworCXJldHVybiAtRUlOVkFMOworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgTUFOSVBVTEFUSU9OUyBJTlZPTFZJTkcgbGFzdDAsbGFzdDEsbGFzdDIsbGFzdDMgQ09OU1RJVFVURSBBIFdPUktBUk9VTkQKKyAqICBGT1IgV0hBVCBBUFBFQVJTIFRPIEJFIEEgQlVHIElOIDY0LUJJVCBtcGxheWVyLgorICogIE5PVCBORUVERUQsIEJVVCBIT1BFRlVMTFkgSEFSTUxFU1MsIEZPUiAzMi1CSVQgbXBsYXllci4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY2FzZSBWSURJT0NfRU5VTVNURDogeworCXN0YXRpYyBpbnQgbGFzdDAgPSAtMSwgbGFzdDEgPSAtMSwgbGFzdDIgPSAtMSwgbGFzdDMgPSAtMTsKKwlzdGF0aWMgc3RydWN0IHY0bDJfc3RhbmRhcmQgdjRsMl9zdGFuZGFyZDsKKwlzdGF0aWMgX191MzIgaW5kZXg7CisJc3RhdGljIHN0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIGNvbnN0ICpwZWFzeWNhcF9zdGFuZGFyZDsKKworCUpPVCg4LCAiVklESU9DX0VOVU1TVERcbiIpOworCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfc3RhbmRhcmQsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaW5kZXggPSB2NGwyX3N0YW5kYXJkLmluZGV4OworCisJbGFzdDMgPSBsYXN0MjsgbGFzdDIgPSBsYXN0MTsgbGFzdDEgPSBsYXN0MDsgbGFzdDAgPSBpbmRleDsKKwlpZiAoKGluZGV4ID09IGxhc3QzKSAmJiAoaW5kZXggPT0gbGFzdDIpICYmIFwKKwkJCShpbmRleCA9PSBsYXN0MSkgJiYgKGluZGV4ID09IGxhc3QwKSkgeworCQlpbmRleCsrOworCQlsYXN0MyA9IGxhc3QyOyBsYXN0MiA9IGxhc3QxOyBsYXN0MSA9IGxhc3QwOyBsYXN0MCA9IGluZGV4OworCX0KKworCW1lbXNldCgmdjRsMl9zdGFuZGFyZCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSk7CisKKwlwZWFzeWNhcF9zdGFuZGFyZCA9ICZlYXN5Y2FwX3N0YW5kYXJkWzBdOworCXdoaWxlICgweEZGRkYgIT0gcGVhc3ljYXBfc3RhbmRhcmQtPm1hc2spIHsKKwkJaWYgKChpbnQpKHBlYXN5Y2FwX3N0YW5kYXJkIC0gJmVhc3ljYXBfc3RhbmRhcmRbMF0pID09IGluZGV4KQorCQkJYnJlYWs7CisJCXBlYXN5Y2FwX3N0YW5kYXJkKys7CisJfQorCWlmICgweEZGRkYgPT0gcGVhc3ljYXBfc3RhbmRhcmQtPm1hc2spIHsKKwkJSk9UKDgsICIlaT1pbmRleDogZXhoYXVzdHMgc3RhbmRhcmRzXG4iLCBpbmRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlKT1QoOCwgIiVpPWluZGV4OiAlc1xuIiwgaW5kZXgsIFwKKwkJCQkmKHBlYXN5Y2FwX3N0YW5kYXJkLT52NGwyX3N0YW5kYXJkLm5hbWVbMF0pKTsKKwltZW1jcHkoJnY0bDJfc3RhbmRhcmQsICYocGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQpLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9zdGFuZGFyZCkpOworCisJdjRsMl9zdGFuZGFyZC5pbmRleCA9IGluZGV4OworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfc3RhbmRhcmQsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19TVEQ6IHsKKwlzdGF0aWMgdjRsMl9zdGRfaWQgc3RkX2lkOworCXN0YXRpYyBzdHJ1Y3QgZWFzeWNhcF9zdGFuZGFyZCBjb25zdCAqcGVhc3ljYXBfc3RhbmRhcmQ7CisKKwlKT1QoOCwgIlZJRElPQ19HX1NURFxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmc3RkX2lkLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJCXNpemVvZih2NGwyX3N0ZF9pZCkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXBlYXN5Y2FwX3N0YW5kYXJkID0gJmVhc3ljYXBfc3RhbmRhcmRbcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldF07CisJc3RkX2lkID0gcGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQuaWQ7CisKKwlKT1QoOCwgInVzZXIgaXMgdG9sZDogJXNcbiIsIFwKKwkJCQkmcGVhc3ljYXBfc3RhbmRhcmQtPnY0bDJfc3RhbmRhcmQubmFtZVswXSk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmc3RkX2lkLCBcCisJCQkJCQlzaXplb2YodjRsMl9zdGRfaWQpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX1NURDogeworCXN0YXRpYyB2NGwyX3N0ZF9pZCBzdGRfaWQ7CisJc3RhdGljIGludCByYzsKKworCUpPVCg4LCAiVklESU9DX1NfU1REXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZzdGRfaWQsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQkJc2l6ZW9mKHY0bDJfc3RkX2lkKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmMgPSBhZGp1c3Rfc3RhbmRhcmQocGVhc3ljYXAsIHN0ZF9pZCk7CisJaWYgKDAgPiByYykgeworCQlKT1QoOCwgIldBUk5JTkc6IGFkanVzdF9zdGFuZGFyZCgpIHJldHVybmVkICVpXG4iLCByYyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1JFUUJVRlM6IHsKKwlzdGF0aWMgaW50IG5idWZmZXJzOworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyB2NGwyX3JlcXVlc3RidWZmZXJzOworCisJSk9UKDgsICJWSURJT0NfUkVRQlVGU1xuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9yZXF1ZXN0YnVmZmVycywgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKHY0bDJfcmVxdWVzdGJ1ZmZlcnMudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2NGwyX3JlcXVlc3RidWZmZXJzLm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwluYnVmZmVycyA9IHY0bDJfcmVxdWVzdGJ1ZmZlcnMuY291bnQ7CisJSk9UKDgsICIgICAgICAgICAgICAgICAgICAgVXNlciByZXF1ZXN0cyAlaSBidWZmZXJzIC4uLlxuIiwgbmJ1ZmZlcnMpOworCWlmIChuYnVmZmVycyA8IDIpCisJCW5idWZmZXJzID0gMjsKKwlpZiAobmJ1ZmZlcnMgPiBGUkFNRV9CVUZGRVJfTUFOWSkKKwkJbmJ1ZmZlcnMgPSBGUkFNRV9CVUZGRVJfTUFOWTsKKwlpZiAodjRsMl9yZXF1ZXN0YnVmZmVycy5jb3VudCA9PSBuYnVmZmVycykgeworCQlKT1QoOCwgIiAgICAgICAgICAgICAgICAgICAuLi4gYWdyZWUgdG8gICVpIGJ1ZmZlcnNcbiIsIFwKKwkJCQkJCQkJbmJ1ZmZlcnMpOworCX0gZWxzZSB7CisJCUpPVCg4LCAiICAgICAgICAgICAgICAgICAgLi4uIGluc2lzdCBvbiAgJWkgYnVmZmVyc1xuIiwgXAorCQkJCQkJCQluYnVmZmVycyk7CisJCXY0bDJfcmVxdWVzdGJ1ZmZlcnMuY291bnQgPSBuYnVmZmVyczsKKwl9CisJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl9tYW55ID0gbmJ1ZmZlcnM7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9yZXF1ZXN0YnVmZmVycywgXAorCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycykpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FVRVJZQlVGOiB7CisJc3RhdGljIF9fdTMyIGluZGV4OworCXN0YXRpYyBzdHJ1Y3QgdjRsMl9idWZmZXIgdjRsMl9idWZmZXI7CisKKwlKT1QoOCwgIlZJRElPQ19RVUVSWUJVRlxuIik7CisKKwlpZiAocGVhc3ljYXAtPnZpZGVvX2VvZikgeworCQlKT1QoOCwgInJldHVybmluZyAtMSBiZWNhdXNlICAlaT12aWRlb19lb2ZcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX2J1ZmZlciwgKHZvaWQgX191c2VyICopYXJnLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlpZiAodjRsMl9idWZmZXIudHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCWluZGV4ID0gdjRsMl9idWZmZXIuaW5kZXg7CisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnkpCisJCXJldHVybiAtRUlOVkFMOworCW1lbXNldCgmdjRsMl9idWZmZXIsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKTsKKwl2NGwyX2J1ZmZlci5pbmRleCA9IGluZGV4OworCXY0bDJfYnVmZmVyLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJdjRsMl9idWZmZXIuYnl0ZXN1c2VkID0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBcCisJCQkJCQlwZWFzeWNhcC0+ZG9uZVtpbmRleF0gfCBcCisJCQkJCQlwZWFzeWNhcC0+cXVldWVkW2luZGV4XTsKKwl2NGwyX2J1ZmZlci5maWVsZCA9IHBlYXN5Y2FwLT5maWVsZDsKKwl2NGwyX2J1ZmZlci5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCXY0bDJfYnVmZmVyLm0ub2Zmc2V0ID0gaW5kZXggKiBGUkFNRV9CVUZGRVJfU0laRTsKKwl2NGwyX2J1ZmZlci5sZW5ndGggPSBGUkFNRV9CVUZGRVJfU0laRTsKKworCUpPVCgxNiwgIiAgJTEwaT1pbmRleFxuIiwgdjRsMl9idWZmZXIuaW5kZXgpOworCUpPVCgxNiwgIiAgMHglMDhYPXR5cGVcbiIsIHY0bDJfYnVmZmVyLnR5cGUpOworCUpPVCgxNiwgIiAgJTEwaT1ieXRlc3VzZWRcbiIsIHY0bDJfYnVmZmVyLmJ5dGVzdXNlZCk7CisJSk9UKDE2LCAiICAweCUwOFg9ZmxhZ3NcbiIsIHY0bDJfYnVmZmVyLmZsYWdzKTsKKwlKT1QoMTYsICIgICUxMGk9ZmllbGRcbiIsIHY0bDJfYnVmZmVyLmZpZWxkKTsKKwlKT1QoMTYsICIgICUxMGxpPXRpbWVzdGFtcC50dl91c2VjXG4iLCBcCisJCQkJCSAobG9uZyl2NGwyX2J1ZmZlci50aW1lc3RhbXAudHZfdXNlYyk7CisJSk9UKDE2LCAiICAlMTBpPXNlcXVlbmNlXG4iLCB2NGwyX2J1ZmZlci5zZXF1ZW5jZSk7CisJSk9UKDE2LCAiICAweCUwOFg9bWVtb3J5XG4iLCB2NGwyX2J1ZmZlci5tZW1vcnkpOworCUpPVCgxNiwgIiAgJTEwaT1tLm9mZnNldFxuIiwgdjRsMl9idWZmZXIubS5vZmZzZXQpOworCUpPVCgxNiwgIiAgJTEwaT1sZW5ndGhcbiIsIHY0bDJfYnVmZmVyLmxlbmd0aCk7CisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmdjRsMl9idWZmZXIsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlicmVhazsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX1FCVUY6IHsKKwlzdGF0aWMgc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmZmVyOworCisJSk9UKDgsICJWSURJT0NfUUJVRlxuIik7CisKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmdjRsMl9idWZmZXIsICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfYnVmZmVyKSkpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKHY0bDJfYnVmZmVyLnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodjRsMl9idWZmZXIubWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2NGwyX2J1ZmZlci5pbmRleCA8IDAgfHwgXAorCQkgKHY0bDJfYnVmZmVyLmluZGV4ID49IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSkpCisJCXJldHVybiAtRUlOVkFMOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX1FVRVVFRDsKKworCXBlYXN5Y2FwLT5kb25lW3Y0bDJfYnVmZmVyLmluZGV4XSAgID0gMDsKKwlwZWFzeWNhcC0+cXVldWVkW3Y0bDJfYnVmZmVyLmluZGV4XSA9IFY0TDJfQlVGX0ZMQUdfUVVFVUVEOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnY0bDJfYnVmZmVyLCBcCisJCQkJCXNpemVvZihzdHJ1Y3QgdjRsMl9idWZmZXIpKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlKT1QoOCwgIi4uLi4uICAgdXNlciBxdWV1ZWluZyBmcmFtZSBidWZmZXIgJWlcbiIsIFwKKwkJCQkJCShpbnQpdjRsMl9idWZmZXIuaW5kZXgpOworCisJcGVhc3ljYXAtPmZyYW1lX2xvY2sgPSAwOworCisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19EUUJVRjoKKwl7CisjaWYgZGVmaW5lZChBVURJT1RJTUUpCisJc3RhdGljIHN0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisJc3RhdGljIGxvbmcgbG9uZyBpbnQgYWJvdmUsIGJlbG93LCBkbmJ5ZHQsIGZ1ZGdlLCBzbGw7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsOworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMTsKKyNlbmRpZiAvKkFVRElPVElNRSovCisJc3RhdGljIHN0cnVjdCB0aW1ldmFsIHRpbWV2YWwsIHRpbWV2YWwyOworCXN0YXRpYyBpbnQgaSwgajsKKwlzdGF0aWMgc3RydWN0IHY0bDJfYnVmZmVyIHY0bDJfYnVmZmVyOworCisJSk9UKDgsICJWSURJT0NfRFFCVUZcbiIpOworCisJaWYgKChwZWFzeWNhcC0+dmlkZW9faWRsZSkgfHwgKHBlYXN5Y2FwLT52aWRlb19lb2YpKSB7CisJCUpPVCg4LCAicmV0dXJuaW5nIC1FSU8gYmVjYXVzZSAgIiBcCisJCQkJIiVpPXZpZGVvX2lkbGUgICVpPXZpZGVvX2VvZlxuIiwgXAorCQkJCXBlYXN5Y2FwLT52aWRlb19pZGxlLCBwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJnY0bDJfYnVmZmVyLCAodm9pZCBfX3VzZXIgKilhcmcsIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX2J1ZmZlci50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCQlKT1QoMTYsICJyZXR1cm5pbmcgLUVJTyBiZWNhdXNlIHZpZGVvIHVyYnMgbm90IHN0cmVhbWluZ1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSUYgVEhFIFVTRVIgSEFTIFBSRVZJT1VTTFkgQ0FMTEVEIGVhc3ljYXBfcG9sbCgpLCBBUyBERVRFUk1JTkVEIEJZIEZJTkRJTkcKKyAqICBUSEUgRkxBRyBwZWFzeWNhcC0+cG9sbGVkIFNFVCwgVEhFUkUgTVVTVCBCRSBOTyBGVVJUSEVSIFdBSVQgSEVSRS4gIElOIFRISVMKKyAqICBDQVNFLCBKVVNUIENIT09TRSBUSEUgRlJBTUUgSU5ESUNBVEVEIEJZIHBlYXN5Y2FwLT5mcmFtZV9yZWFkCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCWlmICghcGVhc3ljYXAtPnBvbGxlZCkgeworCQlpZiAoLUVJTyA9PSBlYXN5Y2FwX2RxYnVmKHBlYXN5Y2FwLCAwKSkKKwkJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCWlmIChwZWFzeWNhcC0+dmlkZW9fZW9mKQorCQkJcmV0dXJuIC1FSU87CisJfQorCWlmIChWNEwyX0JVRl9GTEFHX0RPTkUgIT0gcGVhc3ljYXAtPmRvbmVbcGVhc3ljYXAtPmZyYW1lX3JlYWRdKSB7CisJCVNBWSgiRVJST1I6IFY0TDJfQlVGX0ZMQUdfRE9ORSAhPSAweCUwOFhcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmRvbmVbcGVhc3ljYXAtPmZyYW1lX3JlYWRdKTsKKwl9CisJcGVhc3ljYXAtPnBvbGxlZCA9IDA7CisKKwlpZiAoIShpc2VxdWVuY2UgJSAxMCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IDE3OTsgaSsrKQorCQkJcGVhc3ljYXAtPm1lcml0W2ldID0gcGVhc3ljYXAtPm1lcml0W2krMV07CisJCXBlYXN5Y2FwLT5tZXJpdFsxNzldID0gbWVyaXRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJCWogPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMTgwOyBpKyspCisJCQlqICs9IHBlYXN5Y2FwLT5tZXJpdFtpXTsKKwkJaWYgKDkwIDwgaikgeworCQkJU0FZKCJlYXN5Y2FwIGRyaXZlciBzaHV0dGluZyBkb3duICIgXAorCQkJCQkJCSJvbiBjb25kaXRpb24gYmx1ZVxuIik7CisJCQlwZWFzeWNhcC0+dmlkZW9fZW9mID0gMTsgcGVhc3ljYXAtPmF1ZGlvX2VvZiA9IDE7CisJCX0KKwl9CisKKwl2NGwyX2J1ZmZlci5pbmRleCA9IHBlYXN5Y2FwLT5mcmFtZV9yZWFkOworCXY0bDJfYnVmZmVyLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJdjRsMl9idWZmZXIuYnl0ZXN1c2VkID0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcl91c2VkOworCXY0bDJfYnVmZmVyLmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQgfCBWNEwyX0JVRl9GTEFHX0RPTkU7CisJdjRsMl9idWZmZXIuZmllbGQgPSAgcGVhc3ljYXAtPmZpZWxkOworCWlmIChWNEwyX0ZJRUxEX0FMVEVSTkFURSA9PSB2NGwyX2J1ZmZlci5maWVsZCkKKwkJdjRsMl9idWZmZXIuZmllbGQgPSBcCisJCQkJMHgwMDBGICYgKHBlYXN5Y2FwLT5cCisJCQkJZnJhbWVfYnVmZmVyW3BlYXN5Y2FwLT5mcmFtZV9yZWFkXVswXS5rb3VudCk7CisJZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKKwl0aW1ldmFsMiA9IHRpbWV2YWw7CisKKyNpZiBkZWZpbmVkKEFVRElPVElNRSkKKwlpZiAoIXBlYXN5Y2FwLT50aW1ldmFsMC50dl9zZWMpIHsKKwkJdGltZXZhbDAgPSB0aW1ldmFsOworCQl0aW1ldmFsMSA9IHRpbWV2YWw7CisJCXRpbWV2YWwyID0gdGltZXZhbDsKKwkJZG5ieWR0ID0gMTkyMDAwOworCisJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDApKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCXBlYXN5Y2FwLT50aW1ldmFsMCA9IHRpbWV2YWwwOworCQltdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDApKTsKKwl9IGVsc2UgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSkpCisJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQlkbmJ5ZHQgPSBwZWFzeWNhcC0+ZG5ieWR0OworCQl0aW1ldmFsMSA9IHBlYXN5Y2FwLT50aW1ldmFsMTsKKwkJbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSk7CisJCWFib3ZlID0gZG5ieWR0ICogTUlDUk9TRUNPTkRTKHRpbWV2YWwsIHRpbWV2YWwxKTsKKwkJYmVsb3cgPSAxOTIwMDA7CisJCXNkciA9IHNpZ25lZF9kaXYoYWJvdmUsIGJlbG93KTsKKworCQlhYm92ZSA9IHNkci5xdW90aWVudCArIHRpbWV2YWwxLnR2X3VzZWMgLSAzNTAwMDA7CisKKwkJYmVsb3cgPSAxMDAwMDAwOworCQlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJCXRpbWV2YWwyLnR2X3VzZWMgPSBzZHIucmVtYWluZGVyOworCQl0aW1ldmFsMi50dl9zZWMgPSB0aW1ldmFsMS50dl9zZWMgKyBzZHIucXVvdGllbnQ7CisJfQorCWlmICghKGlzZXF1ZW5jZSAlIDUwMCkpIHsKKwkJZnVkZ2UgPSAoKGxvbmcgbG9uZyBpbnQpKDEwMDAwMDApKSAqIFwKKwkJCQkoKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfc2VjIC0gXAorCQkJCQkJdGltZXZhbDIudHZfc2VjKSkgKyBcCisJCQkJKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfdXNlYyAtIFwKKwkJCQl0aW1ldmFsMi50dl91c2VjKTsKKwkJc2RyID0gc2lnbmVkX2RpdihmdWRnZSwgMTAwMCk7CisJCXNsbCA9IHNkci5xdW90aWVudDsKKwkJdWxsID0gc2RyLnJlbWFpbmRlcjsKKworCQlTQVkoIiU1bGxpLiUtM2xsaT1tcyB0aW1lc3RhbXAgZnVkZ2VcbiIsIHNsbCwgdWxsKTsKKwl9CisjZW5kaWYgLypBVURJT1RJTUUqLworCisJdjRsMl9idWZmZXIudGltZXN0YW1wID0gdGltZXZhbDI7CisJdjRsMl9idWZmZXIuc2VxdWVuY2UgPSBpc2VxdWVuY2UrKzsKKwl2NGwyX2J1ZmZlci5tZW1vcnkgPSBWNEwyX01FTU9SWV9NTUFQOworCXY0bDJfYnVmZmVyLm0ub2Zmc2V0ID0gdjRsMl9idWZmZXIuaW5kZXggKiBGUkFNRV9CVUZGRVJfU0laRTsKKwl2NGwyX2J1ZmZlci5sZW5ndGggPSBGUkFNRV9CVUZGRVJfU0laRTsKKworCUpPVCgxNiwgIiAgJTEwaT1pbmRleFxuIiwgdjRsMl9idWZmZXIuaW5kZXgpOworCUpPVCgxNiwgIiAgMHglMDhYPXR5cGVcbiIsIHY0bDJfYnVmZmVyLnR5cGUpOworCUpPVCgxNiwgIiAgJTEwaT1ieXRlc3VzZWRcbiIsIHY0bDJfYnVmZmVyLmJ5dGVzdXNlZCk7CisJSk9UKDE2LCAiICAweCUwOFg9ZmxhZ3NcbiIsIHY0bDJfYnVmZmVyLmZsYWdzKTsKKwlKT1QoMTYsICIgICUxMGk9ZmllbGRcbiIsIHY0bDJfYnVmZmVyLmZpZWxkKTsKKwlKT1QoMTYsICIgICUxMGxpPXRpbWVzdGFtcC50dl91c2VjXG4iLCBcCisJCQkJCShsb25nKXY0bDJfYnVmZmVyLnRpbWVzdGFtcC50dl91c2VjKTsKKwlKT1QoMTYsICIgICUxMGk9c2VxdWVuY2VcbiIsIHY0bDJfYnVmZmVyLnNlcXVlbmNlKTsKKwlKT1QoMTYsICIgIDB4JTA4WD1tZW1vcnlcbiIsIHY0bDJfYnVmZmVyLm1lbW9yeSk7CisJSk9UKDE2LCAiICAlMTBpPW0ub2Zmc2V0XG4iLCB2NGwyX2J1ZmZlci5tLm9mZnNldCk7CisJSk9UKDE2LCAiICAlMTBpPWxlbmd0aFxuIiwgdjRsMl9idWZmZXIubGVuZ3RoKTsKKworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2NGwyX2J1ZmZlciwgXAorCQkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX2J1ZmZlcikpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCUpPVCg4LCAiLi4uLi4gdXNlciBpcyBvZmZlcmVkIGZyYW1lIGJ1ZmZlciAlaVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKKwlwZWFzeWNhcC0+ZnJhbWVfbG9jayA9IDE7CisJaWYgKHBlYXN5Y2FwLT5mcmFtZV9yZWFkID09IHBlYXN5Y2FwLT5mcmFtZV9maWxsKSB7CisJCWlmIChwZWFzeWNhcC0+ZnJhbWVfbG9jaykgeworCQkJSk9UKDgsICJFUlJPUjogIGZpbGxpbmcgZnJhbWUgYnVmZmVyICIgXAorCQkJCQkJIndoaWxlIG9mZmVyZWQgdG8gdXNlclxuIik7CisJCX0KKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEFVRElPIFVSQlMgSEFWRSBBTFJFQURZIEJFRU4gU1VCTUlUVEVEIFdIRU4gVEhJUyBDT01NQU5EIElTIFJFQ0VJVkVEOworICogIFZJREVPIFVSQlMgSEFWRSBOT1QuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgVklESU9DX1NUUkVBTU9OOiB7CisJc3RhdGljIGludCBpOworCisJSk9UKDgsICJWSURJT0NfU1RSRUFNT05cbiIpOworCisJaXNlcXVlbmNlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTgwOyBpKyspCisJCXBlYXN5Y2FwLT5tZXJpdFtpXSA9IDA7CisJaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCXN1Ym1pdF92aWRlb191cmJzKHBlYXN5Y2FwKTsKKwlwZWFzeWNhcC0+dmlkZW9faWRsZSA9IDA7CisJcGVhc3ljYXAtPmF1ZGlvX2lkbGUgPSAwOworCXBlYXN5Y2FwLT52aWRlb19lb2YgPSAwOworCXBlYXN5Y2FwLT5hdWRpb19lb2YgPSAwOworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7CisJSk9UKDgsICJWSURJT0NfU1RSRUFNT0ZGXG4iKTsKKworCWlmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXBlYXN5Y2FwLT52aWRlb19pZGxlID0gMTsKKwlwZWFzeWNhcC0+YXVkaW9faWRsZSA9IDE7ICBwZWFzeWNhcC0+dGltZXZhbDAudHZfc2VjID0gMDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSUYgVEhFIFdBSVQgUVVFVUVTIEFSRSBOT1QgQ0xFQVJFRCBJTiBSRVNQT05TRSBUTyBUSEUgU1RSRUFNT0ZGIENPTU1BTkQKKyAqICBUSEUgVVNFUlNQQUNFIFBST0dSQU0sIEUuRy4gbXBsYXllciwgTUFZIEhBTkcgT04gRVhJVC4gICBCRVdBUkUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoOCwgImNhbGxpbmcgd2FrZV91cCBvbiB3cV92aWRlbyBhbmQgd3FfYXVkaW9cbiIpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKHBlYXN5Y2FwLT53cV92aWRlbykpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmKHBlYXN5Y2FwLT53cV9hdWRpbykpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWJyZWFrOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19QQVJNOiB7CisJc3RhdGljIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gdjRsMl9zdHJlYW1wYXJtOworCisJSk9UKDgsICJWSURJT0NfR19QQVJNXG4iKTsKKworCWlmICgwICE9IGNvcHlfZnJvbV91c2VyKCZ2NGwyX3N0cmVhbXBhcm0sICh2b2lkIF9fdXNlciAqKWFyZywgXAorCQkJCQlzaXplb2Yoc3RydWN0IHY0bDJfc3RyZWFtcGFybSkpKSB7CisJCVBPVVQ7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICh2NGwyX3N0cmVhbXBhcm0udHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJUE9VVDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXY0bDJfc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUuY2FwYWJpbGl0eSA9IDA7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS5jYXB0dXJlbW9kZSA9IDA7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKKwl2NGwyX3N0cmVhbXBhcm0ucGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IDMwOworCXY0bDJfc3RyZWFtcGFybS5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnk7CisJdjRsMl9zdHJlYW1wYXJtLnBhcm0uY2FwdHVyZS5leHRlbmRlZG1vZGUgPSAwOworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZ2NGwyX3N0cmVhbXBhcm0sIFwKKwkJCQkJc2l6ZW9mKHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pKSkgeworCQlQT1VUOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJYnJlYWs7Cit9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCitjYXNlIFZJRElPQ19TX1BBUk06IHsKKwlKT1QoOCwgIlZJRElPQ19TX1BBUk0gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19BVURJTzogeworCUpPVCg4LCAiVklESU9DX0dfQVVESU8gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU19BVURJTzogeworCUpPVCg4LCAiVklESU9DX1NfQVVESU8gdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfU19UVU5FUjogeworCUpPVCg4LCAiVklESU9DX1NfVFVORVIgdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworY2FzZSBWSURJT0NfR19GQlVGOgorY2FzZSBWSURJT0NfU19GQlVGOgorY2FzZSBWSURJT0NfT1ZFUkxBWTogeworCUpPVCg4LCAiVklESU9DX0dfRkJVRnxWSURJT0NfU19GQlVGfFZJRElPQ19PVkVSTEFZIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK2Nhc2UgVklESU9DX0dfVFVORVI6IHsKKwlKT1QoOCwgIlZJRElPQ19HX1RVTkVSIHVuc3VwcG9ydGVkXG4iKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK2Nhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6IHsKKwlKT1QoOCwgIlZJRElPQ19HX0ZSRVFVRU5DWXxWSURJT0NfU19GUkVRVUVOQ1kgdW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOworfQorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworZGVmYXVsdDogeworCUpPVCg4LCAiRVJST1I6IHVucmVjb2duaXplZCBWNEwyIElPQ1RMIGNvbW1hbmQ6IDB4JTA4WFxuIiwgY21kKTsKKwlleHBsYWluX2lvY3RsKGNtZCk7CisJUE9VVDsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorfQorcmV0dXJuIDA7Cit9CisKK2xvbmcgZWFzeWNhcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWxvbmcgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBlYXN5Y2FwX2lvY3RsX2JrbChpbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBlYXN5c25kX2lvY3RsX2JrbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CitzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXA7CitzdHJ1Y3QgdXNiX2RldmljZSAqcDsKKworcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMLlxuIik7CisJcmV0dXJuIC0xOworfQorcCA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N3aXRjaCAoY21kKSB7CitjYXNlIFNORENUTF9EU1BfR0VUQ0FQUzogeworCWludCBjYXBzOworCUpPVCg4LCAiU05EQ1RMX0RTUF9HRVRDQVBTXG4iKTsKKworI2lmIGRlZmluZWQoVVBTQU1QTEUpCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWNhcHMgPSAweDA0NDAwMDAwOworCWVsc2UKKwkJY2FwcyA9IDB4MDQ0MDAwMDA7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQljYXBzID0gMHgwMjQwMDAwMDsKKwllbHNlCisJCWNhcHMgPSAweDA0NDAwMDAwOworI2VuZGlmIC8qVVBTQU1QTEUqLworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNhcHMsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfR0VURk1UUzogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VURk1UU1xuIik7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IEFGTVRfUzE2X0xFOworCWVsc2UKKwkJaW5jb21pbmcgPSBBRk1UX1MxNl9MRTsKKyNlbHNlCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWluY29taW5nID0gQUZNVF9TMTZfTEU7CisJZWxzZQorCQlpbmNvbWluZyA9IEFGTVRfUzE2X0xFOworI2VuZGlmIC8qVVBTQU1QTEUqLworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmluY29taW5nLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCWJyZWFrOworfQorY2FzZSBTTkRDVExfRFNQX1NFVEZNVDogeworCWludCBpbmNvbWluZywgb3V0Z29pbmc7CisJSk9UKDgsICJTTkRDVExfRFNQX1NFVEZNVFxuIik7CisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJmluY29taW5nLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJSk9UKDgsICIuLi4uLi4uLi4uLiAlaT1pbmNvbWluZ1xuIiwgaW5jb21pbmcpOworCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKKwlpZiAodHJ1ZSA9PSBwZWFzeWNhcC0+bWljcm9waG9uZSkKKwkJb3V0Z29pbmcgPSBBRk1UX1MxNl9MRTsKKwllbHNlCisJCW91dGdvaW5nID0gQUZNVF9TMTZfTEU7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlvdXRnb2luZyA9IEFGTVRfUzE2X0xFOworCWVsc2UKKwkJb3V0Z29pbmcgPSBBRk1UX1MxNl9MRTsKKyNlbmRpZiAvKlVQU0FNUExFKi8KKworCWlmIChpbmNvbWluZyAhPSBvdXRnb2luZykgeworCQlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPW91dGdvaW5nXG4iLCBvdXRnb2luZyk7CisJCUpPVCg4LCAiICAgICAgICBjZi4gJWk9QUZNVF9TMTZfTEVcbiIsIEFGTVRfUzE2X0xFKTsKKwkJSk9UKDgsICIgICAgICAgIGNmLiAlaT1BRk1UX1U4XG4iLCBBRk1UX1U4KTsKKwkJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJm91dGdvaW5nLCBcCisJCQkJCQkJCXNpemVvZihpbnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVJTlZBTCA7CisJfQorCWJyZWFrOworfQorY2FzZSBTTkRDVExfRFNQX1NURVJFTzogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfU1RFUkVPXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDE7CisJZWxzZQorCQlpbmNvbWluZyA9IDE7CisjZWxzZQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDA7CisJZWxzZQorCQlpbmNvbWluZyA9IDE7CisjZW5kaWYgLypVUFNBTVBMRSovCisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5jb21pbmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfU1BFRUQ6IHsKKwlpbnQgaW5jb21pbmc7CisJSk9UKDgsICJTTkRDVExfRFNQX1NQRUVEXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCWlmICh0cnVlID09IHBlYXN5Y2FwLT5taWNyb3Bob25lKQorCQlpbmNvbWluZyA9IDMyMDAwOworCWVsc2UKKwkJaW5jb21pbmcgPSA0ODAwMDsKKyNlbHNlCisJaWYgKHRydWUgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpCisJCWluY29taW5nID0gODAwMDsKKwllbHNlCisJCWluY29taW5nID0gNDgwMDA7CisjZW5kaWYgLypVUFNBTVBMRSovCisKKwlpZiAoMCAhPSBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaW5jb21pbmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitjYXNlIFNORENUTF9EU1BfR0VUVFJJR0dFUjogeworCWludCBpbmNvbWluZzsKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VUVFJJR0dFUlxuIik7CisJaWYgKDAgIT0gY29weV9mcm9tX3VzZXIoJmluY29taW5nLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJSk9UKDgsICIuLi4uLi4uLi4uLiAlaT1pbmNvbWluZ1xuIiwgaW5jb21pbmcpOworCisJaW5jb21pbmcgPSBQQ01fRU5BQkxFX0lOUFVUOworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmNvbWluZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9TRVRUUklHR0VSOiB7CisJaW50IGluY29taW5nOworCUpPVCg4LCAiU05EQ1RMX0RTUF9TRVRUUklHR0VSXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisJSk9UKDgsICIuLi4uLi4uLi4uLiBjZiAweCV4PVBDTV9FTkFCTEVfSU5QVVQgIiBcCisJCQkJIjB4JXg9UENNX0VOQUJMRV9PVVRQVVRcbiIsIFwKKwkJCQkJUENNX0VOQUJMRV9JTlBVVCwgUENNX0VOQUJMRV9PVVRQVVQpOworCTsKKwk7CisJOworCTsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9HRVRCTEtTSVpFOiB7CisJaW50IGluY29taW5nOworCUpPVCg4LCAiU05EQ1RMX0RTUF9HRVRCTEtTSVpFXG4iKTsKKwlpZiAoMCAhPSBjb3B5X2Zyb21fdXNlcigmaW5jb21pbmcsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlKT1QoOCwgIi4uLi4uLi4uLi4uICVpPWluY29taW5nXG4iLCBpbmNvbWluZyk7CisJaW5jb21pbmcgPSBwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50OworCWlmICgwICE9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpbmNvbWluZywgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlicmVhazsKK30KK2Nhc2UgU05EQ1RMX0RTUF9HRVRJU1BBQ0U6IHsKKwlzdHJ1Y3QgYXVkaW9fYnVmX2luZm8gYXVkaW9fYnVmX2luZm87CisKKwlKT1QoOCwgIlNORENUTF9EU1BfR0VUSVNQQUNFXG4iKTsKKworCWF1ZGlvX2J1Zl9pbmZvLmJ5dGVzICAgICAgPSBwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50OworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdtZW50cyAgPSAxOworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdzaXplICAgPSAwOworCWF1ZGlvX2J1Zl9pbmZvLmZyYWdzdG90YWwgPSAwOworCisJaWYgKDAgIT0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmF1ZGlvX2J1Zl9pbmZvLCBcCisJCQkJCQkJCXNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnJlYWs7Cit9CitkZWZhdWx0OiB7CisJSk9UKDgsICJFUlJPUjogdW5yZWNvZ25pemVkIERTUCBJT0NUTCBjb21tYW5kOiAweCUwOFhcbiIsIGNtZCk7CisJUE9VVDsKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorfQorcmV0dXJuIDA7Cit9CisKK2xvbmcgZWFzeXNuZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWxvbmcgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBlYXN5c25kX2lvY3RsX2JrbChpbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBleHBsYWluX2lvY3RsKF9fdTMyIHdvdCkKK3sKK2ludCBrOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgREFUQSBGT1IgVEhFIEFSUkFZIG1lc3MgQkVMT1cgV0VSRSBDT05TVFJVQ1RFRCBCWSBSVU5OSU5HIFRIRSBGT0xMT1dJTkcKKyAqICBTSEVMTCBTQ1JJUFQ6CisgKiAgIworICogIGNhdCAvdXNyL3NyYy9saW51eC1oZWFkZXJzLWB1bmFtZSAtcmAvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaCB8IFwKKyAqICAgICBncmVwICJeI2RlZmluZSBWSURJT0NfIiAtIHwgZ3JlcCAtdiAiX09MRCIgLSB8IFwKKyAqICAgICBzZWQgLWUgInMsX0lPLiokLCw7cCIgfCBzZWQgLWUgIk47cyxcbiwsICIgfCBcCisgKiAgICAgc2VkIC1lICJzL14jZGVmaW5lIC8gIHsvO3MvI2RlZmluZSAvLCBcIi87cy8kL1wifSwvIiB8IFwKKyAqICAgICBzZWQgLWUgInMsCSwsZztzLCAsLGciID5pb2N0bC50bXAKKyAqICBlY2hvICJ7MHhGRkZGRkZGRixcIlwifSIgPj5pb2N0bC50bXAKKyAqICBleGl0IDAKKyAqICAjCisgKiBBTkQgUkVJTlNUQVRJTkcgVEhFIEVYQ0lTRUQgIl9PTEQiIENBU0VTIFdFUkUgTEFURVIgTUFOVUFMTFkuCisgKgorICogVEhFIERBVEEgRk9SIFRIRSBBUlJBWSBtZXNzMSBCRUxPVyBXRVJFIENPTlNUUlVDVEVEIEJZIFJVTk5JTkcgVEhFIEZPTExPV0lORworICogU0hFTEwgU0NSSVBUOgorICogIGNhdCAvdXNyL3NyYy9saW51eC1oZWFkZXJzLWB1bmFtZSAtcmAvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oIHwgXAorICogICAgIGdyZXAgIl4jZGVmaW5lIFZJRElPQyIgLSB8IGdyZXAgLXYgIl9PTEQiIC0gfCBcCisgKiAgICAgc2VkIC1lICJzLF9JTy4qJCwsO3AiIHwgc2VkIC1lICJOO3MsXG4sLCAiIHwgXAorICogICAgIHNlZCAtZSAicy9eI2RlZmluZSAvICB7LztzLyNkZWZpbmUgLywgXCIvO3MvJC9cIn0sLyIgfCBcCisgKiAgICAgc2VkIC1lICJzLCAgICwsZztzLCAsLGciID5pb2N0bC50bXAKKyAqICBlY2hvICJ7MHhGRkZGRkZGRixcIlwifSIgPj5pb2N0bC50bXAKKyAqICBleGl0IDAKKyAqICAjCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3QgbWVzcyB7CisJX191MzIgY29tbWFuZDsKKwljaGFyICBuYW1lWzY0XTsKK30gbWVzc1tdID0geworI2lmIGRlZmluZWQoVklESU9DX1FVRVJZQ0FQKQore1ZJRElPQ19RVUVSWUNBUCwgIlZJRElPQ19RVUVSWUNBUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfUkVTRVJWRUQpCit7VklESU9DX1JFU0VSVkVELCAiVklESU9DX1JFU0VSVkVEIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19FTlVNX0ZNVCkKK3tWSURJT0NfRU5VTV9GTVQsICJWSURJT0NfRU5VTV9GTVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfRk1UKQore1ZJRElPQ19HX0ZNVCwgIlZJRElPQ19HX0ZNVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19GTVQpCit7VklESU9DX1NfRk1ULCAiVklESU9DX1NfRk1UIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19SRVFCVUZTKQore1ZJRElPQ19SRVFCVUZTLCAiVklESU9DX1JFUUJVRlMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1FVRVJZQlVGKQore1ZJRElPQ19RVUVSWUJVRiwgIlZJRElPQ19RVUVSWUJVRiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19GQlVGKQore1ZJRElPQ19HX0ZCVUYsICJWSURJT0NfR19GQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0ZCVUYpCit7VklESU9DX1NfRkJVRiwgIlZJRElPQ19TX0ZCVUYifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX09WRVJMQVkpCit7VklESU9DX09WRVJMQVksICJWSURJT0NfT1ZFUkxBWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfUUJVRikKK3tWSURJT0NfUUJVRiwgIlZJRElPQ19RQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19EUUJVRikKK3tWSURJT0NfRFFCVUYsICJWSURJT0NfRFFCVUYifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NUUkVBTU9OKQore1ZJRElPQ19TVFJFQU1PTiwgIlZJRElPQ19TVFJFQU1PTiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU1RSRUFNT0ZGKQore1ZJRElPQ19TVFJFQU1PRkYsICJWSURJT0NfU1RSRUFNT0ZGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX1BBUk0pCit7VklESU9DX0dfUEFSTSwgIlZJRElPQ19HX1BBUk0ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfUEFSTSkKK3tWSURJT0NfU19QQVJNLCAiVklESU9DX1NfUEFSTSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19TVEQpCit7VklESU9DX0dfU1RELCAiVklESU9DX0dfU1REIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX1NURCkKK3tWSURJT0NfU19TVEQsICJWSURJT0NfU19TVEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0VOVU1TVEQpCit7VklESU9DX0VOVU1TVEQsICJWSURJT0NfRU5VTVNURCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTUlOUFVUKQore1ZJRElPQ19FTlVNSU5QVVQsICJWSURJT0NfRU5VTUlOUFVUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0NUUkwpCit7VklESU9DX0dfQ1RSTCwgIlZJRElPQ19HX0NUUkwifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfQ1RSTCkKK3tWSURJT0NfU19DVFJMLCAiVklESU9DX1NfQ1RSTCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19UVU5FUikKK3tWSURJT0NfR19UVU5FUiwgIlZJRElPQ19HX1RVTkVSIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX1RVTkVSKQore1ZJRElPQ19TX1RVTkVSLCAiVklESU9DX1NfVFVORVIifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfQVVESU8pCit7VklESU9DX0dfQVVESU8sICJWSURJT0NfR19BVURJTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19BVURJTykKK3tWSURJT0NfU19BVURJTywgIlZJRElPQ19TX0FVRElPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19RVUVSWUNUUkwpCit7VklESU9DX1FVRVJZQ1RSTCwgIlZJRElPQ19RVUVSWUNUUkwifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1FVRVJZTUVOVSkKK3tWSURJT0NfUVVFUllNRU5VLCAiVklESU9DX1FVRVJZTUVOVSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19JTlBVVCkKK3tWSURJT0NfR19JTlBVVCwgIlZJRElPQ19HX0lOUFVUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0lOUFVUKQore1ZJRElPQ19TX0lOUFVULCAiVklESU9DX1NfSU5QVVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfT1VUUFVUKQore1ZJRElPQ19HX09VVFBVVCwgIlZJRElPQ19HX09VVFBVVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19PVVRQVVQpCit7VklESU9DX1NfT1VUUFVULCAiVklESU9DX1NfT1VUUFVUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19FTlVNT1VUUFVUKQore1ZJRElPQ19FTlVNT1VUUFVULCAiVklESU9DX0VOVU1PVVRQVVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfQVVET1VUKQore1ZJRElPQ19HX0FVRE9VVCwgIlZJRElPQ19HX0FVRE9VVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19BVURPVVQpCit7VklESU9DX1NfQVVET1VULCAiVklESU9DX1NfQVVET1VUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX01PRFVMQVRPUikKK3tWSURJT0NfR19NT0RVTEFUT1IsICJWSURJT0NfR19NT0RVTEFUT1IifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfTU9EVUxBVE9SKQore1ZJRElPQ19TX01PRFVMQVRPUiwgIlZJRElPQ19TX01PRFVMQVRPUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19GUkVRVUVOQ1kpCit7VklESU9DX0dfRlJFUVVFTkNZLCAiVklESU9DX0dfRlJFUVVFTkNZIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0ZSRVFVRU5DWSkKK3tWSURJT0NfU19GUkVRVUVOQ1ksICJWSURJT0NfU19GUkVRVUVOQ1kifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0NST1BDQVApCit7VklESU9DX0NST1BDQVAsICJWSURJT0NfQ1JPUENBUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19DUk9QKQore1ZJRElPQ19HX0NST1AsICJWSURJT0NfR19DUk9QIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0NST1ApCit7VklESU9DX1NfQ1JPUCwgIlZJRElPQ19TX0NST1AifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfSlBFR0NPTVApCit7VklESU9DX0dfSlBFR0NPTVAsICJWSURJT0NfR19KUEVHQ09NUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19KUEVHQ09NUCkKK3tWSURJT0NfU19KUEVHQ09NUCwgIlZJRElPQ19TX0pQRUdDT01QIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19RVUVSWVNURCkKK3tWSURJT0NfUVVFUllTVEQsICJWSURJT0NfUVVFUllTVEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1RSWV9GTVQpCit7VklESU9DX1RSWV9GTVQsICJWSURJT0NfVFJZX0ZNVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTUFVRElPKQore1ZJRElPQ19FTlVNQVVESU8sICJWSURJT0NfRU5VTUFVRElPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19FTlVNQVVET1VUKQore1ZJRElPQ19FTlVNQVVET1VULCAiVklESU9DX0VOVU1BVURPVVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfUFJJT1JJVFkpCit7VklESU9DX0dfUFJJT1JJVFksICJWSURJT0NfR19QUklPUklUWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19QUklPUklUWSkKK3tWSURJT0NfU19QUklPUklUWSwgIlZJRElPQ19TX1BSSU9SSVRZIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQKQore1ZJRElPQ19HX1NMSUNFRF9WQklfQ0FQLCAiVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVAifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0xPR19TVEFUVVMpCit7VklESU9DX0xPR19TVEFUVVMsICJWSURJT0NfTE9HX1NUQVRVUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfR19FWFRfQ1RSTFMpCit7VklESU9DX0dfRVhUX0NUUkxTLCAiVklESU9DX0dfRVhUX0NUUkxTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19TX0VYVF9DVFJMUykKK3tWSURJT0NfU19FWFRfQ1RSTFMsICJWSURJT0NfU19FWFRfQ1RSTFMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1RSWV9FWFRfQ1RSTFMpCit7VklESU9DX1RSWV9FWFRfQ1RSTFMsICJWSURJT0NfVFJZX0VYVF9DVFJMUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5VTV9GUkFNRVNJWkVTKQore1ZJRElPQ19FTlVNX0ZSQU1FU0laRVMsICJWSURJT0NfRU5VTV9GUkFNRVNJWkVTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTKQore1ZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTLCAiVklESU9DX0VOVU1fRlJBTUVJTlRFUlZBTFMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfRU5DX0lOREVYKQore1ZJRElPQ19HX0VOQ19JTkRFWCwgIlZJRElPQ19HX0VOQ19JTkRFWCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfRU5DT0RFUl9DTUQpCit7VklESU9DX0VOQ09ERVJfQ01ELCAiVklESU9DX0VOQ09ERVJfQ01EIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19UUllfRU5DT0RFUl9DTUQpCit7VklESU9DX1RSWV9FTkNPREVSX0NNRCwgIlZJRElPQ19UUllfRU5DT0RFUl9DTUQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfQ0hJUF9JREVOVCkKK3tWSURJT0NfR19DSElQX0lERU5ULCAiVklESU9DX0dfQ0hJUF9JREVOVCJ9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZJRElPQ19PVkVSTEFZX09MRCkKK3tWSURJT0NfT1ZFUkxBWV9PTEQsICJWSURJT0NfT1ZFUkxBWV9PTEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX1NfUEFSTV9PTEQpCit7VklESU9DX1NfUEFSTV9PTEQsICJWSURJT0NfU19QQVJNX09MRCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfU19DVFJMX09MRCkKK3tWSURJT0NfU19DVFJMX09MRCwgIlZJRElPQ19TX0NUUkxfT0xEIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ19HX0FVRElPX09MRCkKK3tWSURJT0NfR19BVURJT19PTEQsICJWSURJT0NfR19BVURJT19PTEQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DX0dfQVVET1VUX09MRCkKK3tWSURJT0NfR19BVURPVVRfT0xELCAiVklESU9DX0dfQVVET1VUX09MRCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NfQ1JPUENBUF9PTEQpCit7VklESU9DX0NST1BDQVBfT0xELCAiVklESU9DX0NST1BDQVBfT0xEIn0sCisjZW5kaWYKK3sweEZGRkZGRkZGLCAiIn0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVzcyBtZXNzMVtdID0gXAoreworI2lmIGRlZmluZWQoVklESU9DR0NBUCkKK3tWSURJT0NHQ0FQLCAiVklESU9DR0NBUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHQ0hBTikKK3tWSURJT0NHQ0hBTiwgIlZJRElPQ0dDSEFOIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NDSEFOKQore1ZJRElPQ1NDSEFOLCAiVklESU9DU0NIQU4ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR1RVTkVSKQore1ZJRElPQ0dUVU5FUiwgIlZJRElPQ0dUVU5FUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTVFVORVIpCit7VklESU9DU1RVTkVSLCAiVklESU9DU1RVTkVSIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dQSUNUKQore1ZJRElPQ0dQSUNULCAiVklESU9DR1BJQ1QifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU1BJQ1QpCit7VklESU9DU1BJQ1QsICJWSURJT0NTUElDVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NDQVBUVVJFKQore1ZJRElPQ0NBUFRVUkUsICJWSURJT0NDQVBUVVJFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dXSU4pCit7VklESU9DR1dJTiwgIlZJRElPQ0dXSU4ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU1dJTikKK3tWSURJT0NTV0lOLCAiVklESU9DU1dJTiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHRkJVRikKK3tWSURJT0NHRkJVRiwgIlZJRElPQ0dGQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NGQlVGKQore1ZJRElPQ1NGQlVGLCAiVklESU9DU0ZCVUYifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DS0VZKQore1ZJRElPQ0tFWSwgIlZJRElPQ0tFWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHRlJFUSkKK3tWSURJT0NHRlJFUSwgIlZJRElPQ0dGUkVRIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NGUkVRKQore1ZJRElPQ1NGUkVRLCAiVklESU9DU0ZSRVEifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR0FVRElPKQore1ZJRElPQ0dBVURJTywgIlZJRElPQ0dBVURJTyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTQVVESU8pCit7VklESU9DU0FVRElPLCAiVklESU9DU0FVRElPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NZTkMpCit7VklESU9DU1lOQywgIlZJRElPQ1NZTkMifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DTUNBUFRVUkUpCit7VklESU9DTUNBUFRVUkUsICJWSURJT0NNQ0FQVFVSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHTUJVRikKK3tWSURJT0NHTUJVRiwgIlZJRElPQ0dNQlVGIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ0dVTklUKQore1ZJRElPQ0dVTklULCAiVklESU9DR1VOSVQifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DR0NBUFRVUkUpCit7VklESU9DR0NBUFRVUkUsICJWSURJT0NHQ0FQVFVSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NTQ0FQVFVSRSkKK3tWSURJT0NTQ0FQVFVSRSwgIlZJRElPQ1NDQVBUVVJFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NQTEFZTU9ERSkKK3tWSURJT0NTUExBWU1PREUsICJWSURJT0NTUExBWU1PREUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVklESU9DU1dSSVRFTU9ERSkKK3tWSURJT0NTV1JJVEVNT0RFLCAiVklESU9DU1dSSVRFTU9ERSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWSURJT0NHUExBWUlORk8pCit7VklESU9DR1BMQVlJTkZPLCAiVklESU9DR1BMQVlJTkZPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFZJRElPQ1NNSUNST0NPREUpCit7VklESU9DU01JQ1JPQ09ERSwgIlZJRElPQ1NNSUNST0NPREUifSwKKyNlbmRpZgorezB4RkZGRkZGRkYsICIifQorfTsKKworayA9IDA7Cit3aGlsZSAobWVzc1trXS5uYW1lWzBdKSB7CisJaWYgKHdvdCA9PSBtZXNzW2tdLmNvbW1hbmQpIHsKKwkJSk9UKDgsICJpb2N0bCAweCUwOFggaXMgJXNcbiIsIFwKKwkJCQkJbWVzc1trXS5jb21tYW5kLCAmbWVzc1trXS5uYW1lWzBdKTsKKwkJcmV0dXJuIDA7CisJfQorCWsrKzsKK30KK0pPVCg4LCAiaW9jdGwgMHglMDhYIGlzIG5vdCBpbiB2aWRlb2RldjIuaFxuIiwgd290KTsKKworayA9IDA7Cit3aGlsZSAobWVzczFba10ubmFtZVswXSkgeworCWlmICh3b3QgPT0gbWVzczFba10uY29tbWFuZCkgeworCQlKT1QoOCwgImlvY3RsIDB4JTA4WCBpcyAlcyAoVjRMMSlcbiIsIFwKKwkJCQkJbWVzczFba10uY29tbWFuZCwgJm1lc3MxW2tdLm5hbWVbMF0pOworCQlyZXR1cm4gMDsKKwl9CisJaysrOworfQorSk9UKDgsICJpb2N0bCAweCUwOFggaXMgbm90IGluIHZpZGVvZGV2LmhcbiIsIHdvdCk7CityZXR1cm4gLTE7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZXhwbGFpbl9jaWQoX191MzIgd290KQoreworaW50IGs7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRIRSBEQVRBIEZPUiBUSEUgQVJSQVkgbWVzcyBCRUxPVyBXRVJFIENPTlNUUlVDVEVEIEJZIFJVTk5JTkcgVEhFIEZPTExPV0lORworICogIFNIRUxMIFNDUklQVDoKKyAqICAjCisgKiAgY2F0IC91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtYHVuYW1lIC1yYC9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIHwgXAorICogICAgIGdyZXAgIl4jZGVmaW5lIFY0TDJfQ0lEXyIgfCAgXAorICogICAgIHNlZCAtZSAicywoLiokLCw7cCIgfCBzZWQgLWUgIk47cyxcbiwsICIgfCBcCisgKiAgICAgc2VkIC1lICJzL14jZGVmaW5lIC8gIHsvO3MvI2RlZmluZSAvLCBcIi87cy8kL1wifSwvIiB8IFwKKyAqICAgICBzZWQgLWUgInMsCSwsZztzLCAsLGciIHwgZ3JlcCAtdiAiX0JBU0UiIHwgZ3JlcCAtdiAiTVBFRyIgPmNpZC50bXAKKyAqICBlY2hvICJ7MHhGRkZGRkZGRixcIlwifSIgPj5jaWQudG1wCisgKiAgZXhpdCAwCisgKiAgIworICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IG1lc3MKK3sKK19fdTMyIGNvbW1hbmQ7CitjaGFyICBuYW1lWzY0XTsKK30gbWVzc1tdID0geworI2lmIGRlZmluZWQoVjRMMl9DSURfVVNFUl9DTEFTUykKK3tWNEwyX0NJRF9VU0VSX0NMQVNTLCAiVjRMMl9DSURfVVNFUl9DTEFTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9CUklHSFRORVNTKQore1Y0TDJfQ0lEX0JSSUdIVE5FU1MsICJWNEwyX0NJRF9CUklHSFRORVNTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0NPTlRSQVNUKQore1Y0TDJfQ0lEX0NPTlRSQVNULCAiVjRMMl9DSURfQ09OVFJBU1QifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfU0FUVVJBVElPTikKK3tWNEwyX0NJRF9TQVRVUkFUSU9OLCAiVjRMMl9DSURfU0FUVVJBVElPTiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9IVUUpCit7VjRMMl9DSURfSFVFLCAiVjRMMl9DSURfSFVFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSkKK3tWNEwyX0NJRF9BVURJT19WT0xVTUUsICJWNEwyX0NJRF9BVURJT19WT0xVTUUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVESU9fQkFMQU5DRSkKK3tWNEwyX0NJRF9BVURJT19CQUxBTkNFLCAiVjRMMl9DSURfQVVESU9fQkFMQU5DRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9BVURJT19CQVNTKQore1Y0TDJfQ0lEX0FVRElPX0JBU1MsICJWNEwyX0NJRF9BVURJT19CQVNTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0FVRElPX1RSRUJMRSkKK3tWNEwyX0NJRF9BVURJT19UUkVCTEUsICJWNEwyX0NJRF9BVURJT19UUkVCTEUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVESU9fTVVURSkKK3tWNEwyX0NJRF9BVURJT19NVVRFLCAiVjRMMl9DSURfQVVESU9fTVVURSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9BVURJT19MT1VETkVTUykKK3tWNEwyX0NJRF9BVURJT19MT1VETkVTUywgIlY0TDJfQ0lEX0FVRElPX0xPVURORVNTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0JMQUNLX0xFVkVMKQore1Y0TDJfQ0lEX0JMQUNLX0xFVkVMLCAiVjRMMl9DSURfQkxBQ0tfTEVWRUwifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFKQore1Y0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwgIlY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFKQore1Y0TDJfQ0lEX0RPX1dISVRFX0JBTEFOQ0UsICJWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1JFRF9CQUxBTkNFKQore1Y0TDJfQ0lEX1JFRF9CQUxBTkNFLCAiVjRMMl9DSURfUkVEX0JBTEFOQ0UifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQkxVRV9CQUxBTkNFKQore1Y0TDJfQ0lEX0JMVUVfQkFMQU5DRSwgIlY0TDJfQ0lEX0JMVUVfQkFMQU5DRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9HQU1NQSkKK3tWNEwyX0NJRF9HQU1NQSwgIlY0TDJfQ0lEX0dBTU1BIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1dISVRFTkVTUykKK3tWNEwyX0NJRF9XSElURU5FU1MsICJWNEwyX0NJRF9XSElURU5FU1MifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRVhQT1NVUkUpCit7VjRMMl9DSURfRVhQT1NVUkUsICJWNEwyX0NJRF9FWFBPU1VSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9BVVRPR0FJTikKK3tWNEwyX0NJRF9BVVRPR0FJTiwgIlY0TDJfQ0lEX0FVVE9HQUlOIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0dBSU4pCit7VjRMMl9DSURfR0FJTiwgIlY0TDJfQ0lEX0dBSU4ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfSEZMSVApCit7VjRMMl9DSURfSEZMSVAsICJWNEwyX0NJRF9IRkxJUCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9WRkxJUCkKK3tWNEwyX0NJRF9WRkxJUCwgIlY0TDJfQ0lEX1ZGTElQIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0hDRU5URVIpCit7VjRMMl9DSURfSENFTlRFUiwgIlY0TDJfQ0lEX0hDRU5URVIifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfVkNFTlRFUikKK3tWNEwyX0NJRF9WQ0VOVEVSLCAiVjRMMl9DSURfVkNFTlRFUiJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSkKK3tWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSwgIlY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0hVRV9BVVRPKQore1Y0TDJfQ0lEX0hVRV9BVVRPLCAiVjRMMl9DSURfSFVFX0FVVE8ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSkKK3tWNEwyX0NJRF9XSElURV9CQUxBTkNFX1RFTVBFUkFUVVJFLCAiVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9TSEFSUE5FU1MpCit7VjRMMl9DSURfU0hBUlBORVNTLCAiVjRMMl9DSURfU0hBUlBORVNTIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04pCit7VjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiwgIlY0TDJfQ0lEX0JBQ0tMSUdIVF9DT01QRU5TQVRJT04ifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQ0hST01BX0FHQykKK3tWNEwyX0NJRF9DSFJPTUFfQUdDLCAiVjRMMl9DSURfQ0hST01BX0FHQyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9DT0xPUl9LSUxMRVIpCit7VjRMMl9DSURfQ09MT1JfS0lMTEVSLCAiVjRMMl9DSURfQ09MT1JfS0lMTEVSIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0xBU1RQMSkKK3tWNEwyX0NJRF9MQVNUUDEsICJWNEwyX0NJRF9MQVNUUDEifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfQ0FNRVJBX0NMQVNTKQore1Y0TDJfQ0lEX0NBTUVSQV9DTEFTUywgIlY0TDJfQ0lEX0NBTUVSQV9DTEFTUyJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9FWFBPU1VSRV9BVVRPKQore1Y0TDJfQ0lEX0VYUE9TVVJFX0FVVE8sICJWNEwyX0NJRF9FWFBPU1VSRV9BVVRPIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFKQore1Y0TDJfQ0lEX0VYUE9TVVJFX0FCU09MVVRFLCAiVjRMMl9DSURfRVhQT1NVUkVfQUJTT0xVVEUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWSkKK3tWNEwyX0NJRF9FWFBPU1VSRV9BVVRPX1BSSU9SSVRZLCAiVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9QQU5fUkVMQVRJVkUpCit7VjRMMl9DSURfUEFOX1JFTEFUSVZFLCAiVjRMMl9DSURfUEFOX1JFTEFUSVZFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1RJTFRfUkVMQVRJVkUpCit7VjRMMl9DSURfVElMVF9SRUxBVElWRSwgIlY0TDJfQ0lEX1RJTFRfUkVMQVRJVkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfUEFOX1JFU0VUKQore1Y0TDJfQ0lEX1BBTl9SRVNFVCwgIlY0TDJfQ0lEX1BBTl9SRVNFVCJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9USUxUX1JFU0VUKQore1Y0TDJfQ0lEX1RJTFRfUkVTRVQsICJWNEwyX0NJRF9USUxUX1JFU0VUIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX1BBTl9BQlNPTFVURSkKK3tWNEwyX0NJRF9QQU5fQUJTT0xVVEUsICJWNEwyX0NJRF9QQU5fQUJTT0xVVEUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfVElMVF9BQlNPTFVURSkKK3tWNEwyX0NJRF9USUxUX0FCU09MVVRFLCAiVjRMMl9DSURfVElMVF9BQlNPTFVURSJ9LAorI2VuZGlmCisjaWYgZGVmaW5lZChWNEwyX0NJRF9GT0NVU19BQlNPTFVURSkKK3tWNEwyX0NJRF9GT0NVU19BQlNPTFVURSwgIlY0TDJfQ0lEX0ZPQ1VTX0FCU09MVVRFIn0sCisjZW5kaWYKKyNpZiBkZWZpbmVkKFY0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFKQore1Y0TDJfQ0lEX0ZPQ1VTX1JFTEFUSVZFLCAiVjRMMl9DSURfRk9DVVNfUkVMQVRJVkUifSwKKyNlbmRpZgorI2lmIGRlZmluZWQoVjRMMl9DSURfRk9DVVNfQVVUTykKK3tWNEwyX0NJRF9GT0NVU19BVVRPLCAiVjRMMl9DSURfRk9DVVNfQVVUTyJ9LAorI2VuZGlmCit7MHhGRkZGRkZGRiwgIiJ9Cit9OworCitrID0gMDsKK3doaWxlIChtZXNzW2tdLm5hbWVbMF0pIHsKKwlpZiAod290ID09IG1lc3Nba10uY29tbWFuZCkgeworCQlKT1QoOCwgImlvY3RsIDB4JTA4WCBpcyAlc1xuIiwgXAorCQkJCQltZXNzW2tdLmNvbW1hbmQsICZtZXNzW2tdLm5hbWVbMF0pOworCQlyZXR1cm4gMDsKKwl9CisJaysrOworfQorSk9UKDgsICJjaWQgMHglMDhYIGlzIG5vdCBpbiB2aWRlb2RldjIuaFxuIiwgd290KTsKK3JldHVybiAtMTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTBjZDYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9pb2N0bC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX2lvY3RsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHN0cnVjdCBlYXN5Y2FwX2Zvcm1hdCBlYXN5Y2FwX2Zvcm1hdFtdOworZXh0ZXJuIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBlYXN5Y2FwX2NvbnRyb2xbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfbG93LmMgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2xvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWZjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX2xvdy5jCkBAIC0wLDAgKzEsMTA0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9sb3cuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqICBBQ0tOT1dMRUdFTUVOVFMgQU5EIFJFRkVSRU5DRVMKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaGlzIGRyaXZlciBtYWtlcyB1c2Ugb2YgcmVnaXN0ZXIgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBTeW50ZWsKKyAqICBTZW1pY29uIERDLTExMjUgZHJpdmVyIGhvc3RlZCBhdAorICogICAgICAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3N5bnRla2RyaXZlci8uCisgKiAgUGFydGljdWxhcmx5IHVzZWZ1bCBoYXMgYmVlbiBhIHBhdGNoIHRvIHRoZSBsYXR0ZXIgZHJpdmVyIHByb3ZpZGVkIGJ5CisgKiAgSXZvciBIZXdpdHQgaW4gSmFudWFyeSAyMDA5LiAgVGhlIE5UU0MgaW1wbGVtZW50YXRpb24gaXMgdGFrZW4gZnJvbSB0aGUKKyAqICB3b3JrIG9mIEJlbiBUcmFzay4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKyNpbmNsdWRlICJlYXN5Y2FwLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY29uc3Qgc3RydWN0IHN0azExNjBjb25maWcgeyBpbnQgcmVnOyBpbnQgc2V0OyB9IHN0azExNjBjb25maWdbMjU2XSA9IHsKKwl7MHgwMDAsIDB4MDA5OH0sCisJezB4MDAyLCAweDAwOTN9LAorCisJezB4MDAxLCAweDAwMDN9LAorCXsweDAwMywgMHgwMDgwfSwKKwl7MHgwMEQsIDB4MDAwMH0sCisJezB4MDBGLCAweDAwMDJ9LAorCXsweDAxOCwgMHgwMDEwfSwKKwl7MHgwMTksIDB4MDAwMH0sCisJezB4MDFBLCAweDAwMTR9LAorCXsweDAxQiwgMHgwMDBFfSwKKwl7MHgwMUMsIDB4MDA0Nn0sCisKKwl7MHgxMDAsIDB4MDAzM30sCisJezB4MTAzLCAweDAwMDB9LAorCXsweDEwNCwgMHgwMDAwfSwKKwl7MHgxMDUsIDB4MDAwMH0sCisJezB4MTA2LCAweDAwMDB9LAorCisjaWYgZGVmaW5lZChQUkVGRVJfTlRTQykKKworI3VuZGVmICBPTERNQVJHSU4KKyNpZiBkZWZpbmVkKE9MRE1BUkdJTikKKwl7MHgxMTAsIDB4MDAwOH0sCisjZWxzZQorCXsweDExMCwgMHgwMDE0fSwKKyNlbmRpZiAvKk9MRE1BUkdJTiovCisKKwl7MHgxMTEsIDB4MDAwMH0sCisJezB4MTEyLCAweDAwMDN9LAorCXsweDExMywgMHgwMDAwfSwKKworI2lmIGRlZmluZWQoT0xETUFSR0lOKQorCXsweDExNCwgMHgwNTA4fSwKKyNlbHNlCisJezB4MTE0LCAweDA1MTR9LAorI2VuZGlmIC8qT0xETUFSR0lOKi8KKworCXsweDExNSwgMHgwMDA1fSwKKwl7MHgxMTYsIDB4MDBGM30sCisJezB4MTE3LCAweDAwMDB9LAorCisjZWxzZSAvKiAhIFBSRUZFUl9OVFNDKi8KKworI2lmIGRlZmluZWQoT0xETUFSR0lOKQorCXsweDExMCwgMHgwMDA4fSwKKyNlbHNlCisJezB4MTEwLCAweDAwMTR9LAorI2VuZGlmIC8qT0xETUFSR0lOKi8KKworCXsweDExMSwgMHgwMDAwfSwKKwl7MHgxMTIsIDB4MDAyMH0sCisJezB4MTEzLCAweDAwMDB9LAorCisjaWYgZGVmaW5lZChPTERNQVJHSU4pCisJezB4MTE0LCAweDA1MDh9LAorI2Vsc2UKKwl7MHgxMTQsIDB4MDUxNH0sCisjZW5kaWYgLypPTERNQVJHSU4qLworCisJezB4MTE1LCAweDAwMDV9LAorCXsweDExNiwgMHgwMTEwfSwKKwl7MHgxMTcsIDB4MDAwMX0sCisKKyNlbmRpZiAvKiAhIFBSRUZFUl9OVFNDKi8KKworCXsweDIwMiwgMHgwMDBGfSwKKwl7MHgyMDMsIDB4MDA0QX0sCisJezB4MkZGLCAweDAwMDB9LAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXsweEZGRiwgMHhGRkZGfQorCX07CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2NvbnN0IHN0cnVjdCBzYWE3MTEzY29uZmlnIHsgaW50IHJlZzsgaW50IHNldDsgfSBzYWE3MTEzY29uZmlnWzI1Nl0gPSB7CisJezB4MDEsIDB4MDh9LAorCXsweDAyLCAweDgwfSwKKwl7MHgwMywgMHgzM30sCisJezB4MDQsIDB4MDB9LAorCXsweDA1LCAweDAwfSwKKwl7MHgwNiwgMHhFOX0sCisJezB4MDcsIDB4MER9LAorI2lmIGRlZmluZWQoUFJFRkVSX05UU0MpCisJezB4MDgsIDB4Nzh9LAorI2Vsc2UKKwl7MHgwOCwgMHgzOH0sCisjZW5kaWYgLyogISBQUkVGRVJfTlRTQyovCisJezB4MDksIDB4MDB9LAorCXsweDBBLCBTQUFfMEFfREVGQVVMVH0sCisJezB4MEIsIFNBQV8wQl9ERUZBVUxUfSwKKwl7MHgwQywgU0FBXzBDX0RFRkFVTFR9LAorCXsweDBELCBTQUFfMERfREVGQVVMVH0sCisJezB4MEUsIDB4MDF9LAorCXsweDBGLCAweDM2fSwKKwl7MHgxMCwgMHgwMH0sCisJezB4MTEsIDB4MEN9LAorCXsweDEyLCAweEU3fSwKKwl7MHgxMywgMHgwMH0sCisJezB4MTUsIDB4MDB9LAorCXsweDE2LCAweDAwfSwKKyNpZiBkZWZpbmVkKFBSRUZFUl9OVFNDKQorCXsweDQwLCAweDgyfSwKKyNlbHNlCisJezB4NDAsIDB4MDJ9LAorI2VuZGlmIC8qICEgUFJFRkVSX05UU0MqLworCXsweDQxLCAweEZGfSwKKwl7MHg0MiwgMHhGRn0sCisJezB4NDMsIDB4RkZ9LAorCXsweDQ0LCAweEZGfSwKKwl7MHg0NSwgMHhGRn0sCisJezB4NDYsIDB4RkZ9LAorCXsweDQ3LCAweEZGfSwKKwl7MHg0OCwgMHhGRn0sCisJezB4NDksIDB4RkZ9LAorCXsweDRBLCAweEZGfSwKKwl7MHg0QiwgMHhGRn0sCisJezB4NEMsIDB4RkZ9LAorCXsweDRELCAweEZGfSwKKwl7MHg0RSwgMHhGRn0sCisJezB4NEYsIDB4RkZ9LAorCXsweDUwLCAweEZGfSwKKwl7MHg1MSwgMHhGRn0sCisJezB4NTIsIDB4RkZ9LAorCXsweDUzLCAweEZGfSwKKwl7MHg1NCwgMHhGRn0sCisJezB4NTUsIDB4RkZ9LAorCXsweDU2LCAweEZGfSwKKwl7MHg1NywgMHhGRn0sCisJezB4NTgsIDB4NDB9LAorCXsweDU5LCAweDU0fSwKKyNpZiBkZWZpbmVkKFBSRUZFUl9OVFNDKQorCXsweDVBLCAweDBBfSwKKyNlbHNlCisJezB4NUEsIDB4MDd9LAorI2VuZGlmIC8qICEgUFJFRkVSX05UU0MqLworCXsweDVCLCAweDgzfSwKKwl7MHhGRiwgMHhGRn0KKwl9OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50Citjb25maXJtX3Jlc29sdXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitfX3U4IGdldDAsIGdldDEsIGdldDIsIGdldDMsIGdldDQsIGdldDUsIGdldDYsIGdldDc7CitHRVQocCwgMHgwMTEwLCAmZ2V0MCk7CitHRVQocCwgMHgwMTExLCAmZ2V0MSk7CitHRVQocCwgMHgwMTEyLCAmZ2V0Mik7CitHRVQocCwgMHgwMTEzLCAmZ2V0Myk7CitHRVQocCwgMHgwMTE0LCAmZ2V0NCk7CitHRVQocCwgMHgwMTE1LCAmZ2V0NSk7CitHRVQocCwgMHgwMTE2LCAmZ2V0Nik7CitHRVQocCwgMHgwMTE3LCAmZ2V0Nyk7CitKT1QoOCwgICIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWFxuIiwgXAorCWdldDAsIGdldDEsIGdldDIsIGdldDMsIGdldDQsIGdldDUsIGdldDYsIGdldDcpOworSk9UKDgsICAiLi4uLmNmIFBBTF83MjB4NTI2OiAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1hcbiIsIFwKKwkweDAwMCwgMHgwMDAsIDB4MDAxLCAweDAwMCwgMHg1QTAsIDB4MDA1LCAweDEyMSwgMHgwMDEpOworSk9UKDgsICAiLi4uLmNmIFBBTF83MDR4NTI2OiAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1hcbiIsIFwKKwkweDAwNCwgMHgwMDAsIDB4MDAxLCAweDAwMCwgMHg1ODQsIDB4MDA1LCAweDEyMSwgMHgwMDEpOworSk9UKDgsICAiLi4uLmNmIFZHQV82NDB4NDgwOiAiIFwKKwkiMHglMDNYLCAweCUwM1gsICIgXAorCSIweCUwM1gsIDB4JTAzWCwgIiBcCisJIjB4JTAzWCwgMHglMDNYLCAiIFwKKwkiMHglMDNYLCAweCUwM1hcbiIsIFwKKwkweDAwOCwgMHgwMDAsIDB4MDIwLCAweDAwMCwgMHg1MDgsIDB4MDA1LCAweDExMCwgMHgwMDEpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorY29uZmlybV9zdHJlYW0oc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitfX3UxNiBnZXQyOworX191OCBpZ290OworCitHRVQocCwgMHgwMTAwLCAmaWdvdCk7ICBnZXQyID0gMHg4MCAmIGlnb3Q7CitpZiAoMHg4MCA9PSBnZXQyKQorCUpPVCg4LCAiY29uZmlybV9zdHJlYW06ICBPS1xuIik7CitlbHNlCisJSk9UKDgsICJjb25maXJtX3N0cmVhbTogIFNUVUNLXG4iKTsKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3NldHVwX3N0ayhzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpMDsKKworaTAgPSAwOword2hpbGUgKDB4RkZGICE9IHN0azExNjBjb25maWdbaTBdLnJlZykgeworCVNFVChwLCBzdGsxMTYwY29uZmlnW2kwXS5yZWcsIHN0azExNjBjb25maWdbaTBdLnNldCk7CisJaTArKzsKKwl9CisKK3dyaXRlXzMwMChwKTsKKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorc2V0dXBfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworaW50IGkwLCBpcjsKKworCitzZXQydG83OChwKTsKKworCitpMCA9IDA7Cit3aGlsZSAoMHhGRiAhPSBzYWE3MTEzY29uZmlnW2kwXS5yZWcpIHsKKwlpciA9IHdyaXRlX3NhYShwLCBzYWE3MTEzY29uZmlnW2kwXS5yZWcsIHNhYTcxMTNjb25maWdbaTBdLnNldCk7CisJaTArKzsKKwl9CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50Cit3cml0ZV8wMDAoc3RydWN0IHVzYl9kZXZpY2UgKnAsIF9fdTE2IHNldDIsIF9fdTE2IHNldDApCit7CitfX3U4IGlnb3QwLCBpZ290MjsKKworR0VUKHAsIDB4MDAwMiwgJmlnb3QyKTsKK0dFVChwLCAweDAwMDAsICZpZ290MCk7CitTRVQocCwgMHgwMDAyLCBzZXQyKTsKK1NFVChwLCAweDAwMDAsIHNldDApOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAord3JpdGVfc2FhKHN0cnVjdCB1c2JfZGV2aWNlICpwLCBfX3UxNiByZWcwLCBfX3UxNiBzZXQwKQoreworU0VUKHAsIDB4MjAwLCAweDAwKTsKK1NFVChwLCAweDIwNCwgcmVnMCk7CitTRVQocCwgMHgyMDUsIHNldDApOworU0VUKHAsIDB4MjAwLCAweDAxKTsKK3JldHVybiB3YWl0X2kyYyhwKTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFR0lTVEVSIDUwMDogIFNFVFRJTkcgVkFMVUUgVE8gMHgwMDhCIFJFQURTIEZST00gVlQxNjEyQSAoPykKKyAqICBSRUdJU1RFUiA1MDA6ICBTRVRUSU5HIFZBTFVFIFRPIDB4MDA4QyBXUklURVMgVE8gIFZUMTYxMkEKKyAqICBSRUdJU1RFUiA1MDI6ICBMRUFTVCBTSUdOSUZJQ0FOVCBCWVRFIE9GIFZBTFVFIFRPIFNFVAorICogIFJFR0lTVEVSIDUwMzogIE1PU1QgU0lHTklGSUNBTlQgQllURSBPRiBWQUxVRSBUTyBTRVQKKyAqICBSRUdJU1RFUiA1MDQ6ICBUQVJHRVQgQUREUkVTUyBPTiBWVDE2MTJBCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50Cit3cml0ZV92dChzdHJ1Y3QgdXNiX2RldmljZSAqcCwgX191MTYgcmVnMCwgX191MTYgc2V0MCkKK3sKK19fdTggaWdvdDsKK19fdTE2IGdvdDUwMiwgZ290NTAzOworX191MTYgc2V0NTAyLCBzZXQ1MDM7CisKK1NFVChwLCAweDA1MDQsIHJlZzApOworU0VUKHAsIDB4MDUwMCwgMHgwMDhCKTsKKworR0VUKHAsIDB4MDUwMiwgJmlnb3QpOyAgZ290NTAyID0gKDB4RkYgJiBpZ290KTsKK0dFVChwLCAweDA1MDMsICZpZ290KTsgIGdvdDUwMyA9ICgweEZGICYgaWdvdCk7CisKK0pPVCgxNiwgIndyaXRlX3Z0KC4sIDB4JTA0WCwgMHglMDRYKTogd2FzIDB4JTA0WFxuIiwgXAorCQkJCQlyZWcwLCBzZXQwLCAoKGdvdDUwMyA8PCA4KSB8IGdvdDUwMikpOworCitzZXQ1MDIgPSAgKDB4MDBGRiAmIHNldDApOworc2V0NTAzID0gKCgweEZGMDAgJiBzZXQwKSA+PiA4KTsKKworU0VUKHAsIDB4MDUwNCwgcmVnMCk7CitTRVQocCwgMHgwNTAyLCBzZXQ1MDIpOworU0VUKHAsIDB4MDUwMywgc2V0NTAzKTsKK1NFVChwLCAweDA1MDAsIDB4MDA4Qyk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVHSVNURVIgNTAwOiAgU0VUVElORyBWQUxVRSBUTyAweDAwOEIgUkVBRFMgRlJPTSBWVDE2MTJBICg/KQorICogIFJFR0lTVEVSIDUwMDogIFNFVFRJTkcgVkFMVUUgVE8gMHgwMDhDIFdSSVRFUyBUTyAgVlQxNjEyQQorICogIFJFR0lTVEVSIDUwMjogIExFQVNUIFNJR05JRklDQU5UIEJZVEUgT0YgVkFMVUUgVE8gR0VUCisgKiAgUkVHSVNURVIgNTAzOiAgTU9TVCBTSUdOSUZJQ0FOVCBCWVRFIE9GIFZBTFVFIFRPIEdFVAorICogIFJFR0lTVEVSIDUwNDogIFRBUkdFVCBBRERSRVNTIE9OIFZUMTYxMkEKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK3JlYWRfdnQoc3RydWN0IHVzYl9kZXZpY2UgKnAsIF9fdTE2IHJlZzApCit7CitfX3U4IGlnb3Q7CitfX3UxNiBnb3Q1MDIsIGdvdDUwMzsKKworU0VUKHAsIDB4MDUwNCwgcmVnMCk7CitTRVQocCwgMHgwNTAwLCAweDAwOEIpOworCitHRVQocCwgMHgwNTAyLCAmaWdvdCk7ICBnb3Q1MDIgPSAoMHhGRiAmIGlnb3QpOworR0VUKHAsIDB4MDUwMywgJmlnb3QpOyAgZ290NTAzID0gKDB4RkYgJiBpZ290KTsKKworSk9UKDE2LCAicmVhZF92dCguLCAweCUwNFgpOiBoYXMgMHglMDRYXG4iLCByZWcwLCAoKGdvdDUwMyA8PCA4KSB8IGdvdDUwMikpOworCityZXR1cm4gKGdvdDUwMyA8PCA4KSB8IGdvdDUwMjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRIRVNFIEFQUEVBUiBUTyBIQVZFIE5PIEVGRkVDVCBPTiBFSVRIRVIgVklERU8gT1IgQVVESU8uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50Cit3cml0ZV8zMDAoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitTRVQocCwgMHgzMDAsIDB4MDAxMik7CitTRVQocCwgMHgzNTAsIDB4MDAyRCk7CitTRVQocCwgMHgzNTEsIDB4MDAwMSk7CitTRVQocCwgMHgzNTIsIDB4MDAwMCk7CitTRVQocCwgMHgzNTMsIDB4MDAwMCk7CitTRVQocCwgMHgzMDAsIDB4MDA4MCk7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE5PVEU6IFRIRSBGT0xMT1dJTkcgSVMgTk9UIENIRUNLRUQ6CisgKiAgUkVHSVNURVIgMHgwRiwgV0hJQ0ggSVMgSU5WT0xWRUQgSU4gQ0hST01JTkFOQ0UgQVVUT01BVElDIEdBSU4gQ09OVFJPTC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2NoZWNrX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpMCwgaXIsIHJjOworaTAgPSAwOworCityYyA9IDA7Cit3aGlsZSAoMHhGRiAhPSBzYWE3MTEzY29uZmlnW2kwXS5yZWcpIHsKKwlpZiAoMHgwRiA9PSBzYWE3MTEzY29uZmlnW2kwXS5yZWcpIHsKKwkJaTArKzsgY29udGludWU7CisJfQorCisJaXIgPSByZWFkX3NhYShwLCBzYWE3MTEzY29uZmlnW2kwXS5yZWcpOworCWlmIChpciAhPSBzYWE3MTEzY29uZmlnW2kwXS5zZXQpIHsKKwkJU0FZKCJTQUEgcmVnaXN0ZXIgMHglMDJYIGhhcyAweCUwMlgsIGV4cGVjdGVkIDB4JTAyWFxuIiwgXAorCQkJc2FhNzExM2NvbmZpZ1tpMF0ucmVnLCBpciwgc2FhNzExM2NvbmZpZ1tpMF0uc2V0KTsKKwkJcmMtLTsKKwl9CisJaTArKzsKK30KK2lmICgtOCA+IHJjKQorCXJldHVybiByYzsKK2Vsc2UKKwlyZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CittZXJpdF9zYWEoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitpbnQgcmM7CisKK3JjID0gcmVhZF9zYWEocCwgMHgxRik7CitpZiAoKDAgPiByYykgfHwgKDB4MDIgJiByYykpCisJcmV0dXJuIDEgOworZWxzZQorCXJldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3JlYWR5X3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBqLCByYzsKK3N0YXRpYyBpbnQgbWF4ID0gMTA7CisKK2ogPSAwOword2hpbGUgKG1heCA+IGopIHsKKwlyYyA9IHJlYWRfc2FhKHAsIDB4MUYpOworCWlmICgwIDw9IHJjKSB7CisJCWlmICgoMSA9PSAoMHgwMSAmIHJjKSkmJigwID09ICgweDQwICYgcmMpKSkKKwkJCWJyZWFrOworCX0KKwltc2xlZXAoMTAwKTsgIGorKzsKK30KK2lmIChtYXggPT0gaikKKwlyZXR1cm4gLTE7CitlbHNlIHsKKwlpZiAoMHgyMCAmIHJjKQorCQlKT1QoOCwgImhhcmR3YXJlIGRldGVjdHMgNjAgSHpcbiIpOworCWVsc2UKKwkJSk9UKDgsICJoYXJkd2FyZSBkZXRlY3RzIDUwIEh6XG4iKTsKKwlpZiAoMHg4MCAmIHJjKQorCQlKT1QoOCwgImhhcmR3YXJlIGRldGVjdHMgaW50ZXJsYWNpbmdcbiIpOworCWVsc2UKKwkJSk9UKDgsICJoYXJkd2FyZSBkZXRlY3RzIG5vIGludGVybGFjaW5nXG4iKTsKK30KK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTk9URTogVEhFIEZPTExPV0lORyBBUkUgTk9UIENIRUNLRUQ6CisgKiAgUkVHSVNURVJTIDB4MDAwLCAweDAwMjogIEZVTkNUSU9OQUxJVFkgSVMgTk9UIEtOT1dOCisgKiAgUkVHSVNURVIgIDB4MTAwOiAgQUNDRVBUIEFMU08gKDB4ODAgfCBzdGsxMTYwY29uZmlnWy5dLnNldCkKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2NoZWNrX3N0ayhzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpMCwgaXI7CitpMCA9IDA7Cit3aGlsZSAoMHhGRkYgIT0gc3RrMTE2MGNvbmZpZ1tpMF0ucmVnKSB7CisJaWYgKDB4MDAwID09IHN0azExNjBjb25maWdbaTBdLnJlZykgeworCQlpMCsrOyBjb250aW51ZTsKKwl9CisJaWYgKDB4MDAyID09IHN0azExNjBjb25maWdbaTBdLnJlZykgeworCQlpMCsrOyBjb250aW51ZTsKKwl9CisKKwlpciA9IHJlYWRfc3RrKHAsIHN0azExNjBjb25maWdbaTBdLnJlZyk7CisKKwlpZiAoMHgxMDAgPT0gc3RrMTE2MGNvbmZpZ1tpMF0ucmVnKSB7CisJCWlmICgoaXIgIT0gKDB4RkYgJiBzdGsxMTYwY29uZmlnW2kwXS5zZXQpKSAmJiBcCisJCQkoaXIgIT0gKDB4ODAgfCAoMHhGRiAmIHN0azExNjBjb25maWdbaTBdLnNldCkpKSAmJiBcCisJCQkJKDB4RkZGRiAhPSBzdGsxMTYwY29uZmlnW2kwXS5zZXQpKSB7CisJCQlTQVkoIlNUSyByZWdpc3RlciAweCUwM1ggaGFzIDB4JTAyWCwgIiBcCisJCQkJCSJleHBlY3RlZCAweCUwMlhcbiIsIFwKKwkJCQkJc3RrMTE2MGNvbmZpZ1tpMF0ucmVnLCBpciwgXAorCQkJCQlzdGsxMTYwY29uZmlnW2kwXS5zZXQpOworCQkJfQorCQlpMCsrOyBjb250aW51ZTsKKwkJfQorCisJaWYgKChpciAhPSAoMHhGRiAmIHN0azExNjBjb25maWdbaTBdLnNldCkpICYmIFwKKwkJCSgweEZGRkYgIT0gc3RrMTE2MGNvbmZpZ1tpMF0uc2V0KSkgeworCQlTQVkoIlNUSyByZWdpc3RlciAweCUwM1ggaGFzIDB4JTAyWCwgIiBcCisJCQkJCSJleHBlY3RlZCAweCUwMlhcbiIsIFwKKwkJCQkJc3RrMTE2MGNvbmZpZ1tpMF0ucmVnLCBpciwgXAorCQkJCQlzdGsxMTYwY29uZmlnW2kwXS5zZXQpOworCQl9CisJaTArKzsKKwl9CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CityZWFkX3NhYShzdHJ1Y3QgdXNiX2RldmljZSAqcCwgX191MTYgcmVnMCkKK3sKK19fdTggaWdvdDsKKworU0VUKHAsIDB4MjA4LCByZWcwKTsKK1NFVChwLCAweDIwMCwgMHgyMCk7CitpZiAoMCAhPSB3YWl0X2kyYyhwKSkKKwlyZXR1cm4gLTE7CitpZ290ID0gMDsKK0dFVChwLCAweDAyMDksICZpZ290KTsKK3JldHVybiBpZ290OworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3JlYWRfc3RrKHN0cnVjdCB1c2JfZGV2aWNlICpwLCBfX3UzMiByZWcwKQoreworX191OCBpZ290OworCitpZ290ID0gMDsKK0dFVChwLCByZWcwLCAmaWdvdCk7CityZXR1cm4gaWdvdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgICBIQVJEV0FSRSAgICBVU0VSU1BBQ0UgSU5QVVQgTlVNQkVSICAgUEhZU0lDQUwgSU5QVVQgICBEUklWRVIgaW5wdXQgVkFMVUUKKyAqCisgKiAgQ1ZCUytTLVZJREVPICAgICAgICAgICAwIG9yIDEgICAgICAgICAgICAgIENWQlMgICAgICAgICAgICAgICAgIDEKKyAqICAgRk9VUi1DVkJTICAgICAgICAgICAgIDAgb3IgMSAgICAgICAgICAgICAgQ1ZCUzEgICAgICAgICAgICAgICAgMQorICogICBGT1VSLUNWQlMgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICBDVkJTMiAgICAgICAgICAgICAgICAyCisgKiAgIEZPVVItQ1ZCUyAgICAgICAgICAgICAgICAzICAgICAgICAgICAgICAgIENWQlMzICAgICAgICAgICAgICAgIDMKKyAqICAgRk9VUi1DVkJTICAgICAgICAgICAgICAgIDQgICAgICAgICAgICAgICAgQ1ZCUzQgICAgICAgICAgICAgICAgNAorICogIENWQlMrUy1WSURFTyAgICAgICAgICAgICAgNSAgICAgICAgICAgICAgIFMtVklERU8gICAgICAgICAgICAgICA1CisgKgorICogIFdIRU4gNT09aW5wdXQgVEhFIEFSR1VNRU5UIG1vZGUgTVVTVCBBTFNPIEJFIFNVUFBMSUVEOgorICoKKyAqICAgICBtb2RlICA3ICAgPT4gR0FJTiBUTyBCRSBTRVQgRVhQTElDSVRMWSBVU0lORyBSRUdJU1RFUiAweDA1IChVTlRFU1RFRCkKKyAqICAgICBtb2RlICA5ICAgPT4gVVNFIEFVVE9NQVRJQyBHQUlOIENPTlRST0wgKERFRkFVTFQpCisgKgorKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorc2VsZWN0X2lucHV0KHN0cnVjdCB1c2JfZGV2aWNlICpwLCBpbnQgaW5wdXQsIGludCBtb2RlKQoreworCitzdG9wXzEwMChwKTsKKworbXNsZWVwKDIwKTsKK3N3aXRjaCAoaW5wdXQpIHsKK2Nhc2UgMDoKK2Nhc2UgMTogeworCVNFVChwLCAweDAwMDAsIDB4MDA5OCk7IGJyZWFrOworfQorY2FzZSAyOiB7CisJU0VUKHAsIDB4MDAwMCwgMHgwMDkwKTsgYnJlYWs7Cit9CitjYXNlIDM6IHsKKwlTRVQocCwgMHgwMDAwLCAweDAwODgpOyBicmVhazsKK30KK2Nhc2UgNDogeworCVNFVChwLCAweDAwMDAsIDB4MDA4MCk7IGJyZWFrOworfQorY2FzZSA1OiB7CisJaWYgKDkgIT0gbW9kZSkKKwkJbW9kZSA9IDc7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSA3OgorCQl7CisJCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDAyLCAweDg3KSkgeworCQkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgIiBcCisJCQkJInJlZ2lzdGVyIDB4MDIgZm9yIGlucHV0ICIgXAorCQkJCSIlaVxuIiwgaW5wdXQpOworCQl9CisJCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDA1LCAweEZGKSkgeworCQkJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCBTQUEgIiBcCisJCQkJInJlZ2lzdGVyIDB4MDUgZm9yIGlucHV0ICIgXAorCQkJCSIlaVxuIiwgaW5wdXQpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIDk6CisJCXsKKwkJaWYgKDAgIT0gd3JpdGVfc2FhKHAsIDB4MDIsIDB4ODkpKSB7CisJCQlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSAiIFwKKwkJCQkicmVnaXN0ZXIgMHgwMiBmb3IgaW5wdXQgIiBcCisJCQkJIiVpXG4iLCBpbnB1dCk7CisJCX0KKwkJaWYgKDAgIT0gd3JpdGVfc2FhKHAsIDB4MDUsIDB4MDApKSB7CisJCQlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSAiIFwKKwkJCQkicmVnaXN0ZXIgMHgwNSBmb3IgaW5wdXQgIiBcCisJCQkJIiVpXG4iLCBpbnB1dCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXsKKwkJU0FZKCJNSVNUQUtFOiAgYmFkIG1vZGU6ICVpXG4iLCBtb2RlKTsKKwkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDA0LCAweDAwKSkgeworCQlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSByZWdpc3RlciAweDA0ICIgXAorCQkJCQkiZm9yIGlucHV0ICVpXG4iLCBpbnB1dCk7CisJfQorCWlmICgwICE9IHdyaXRlX3NhYShwLCAweDA5LCAweDgwKSkgeworCQlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IFNBQSByZWdpc3RlciAweDA5ICIgXAorCQkJCQkiZm9yIGlucHV0ICVpXG4iLCBpbnB1dCk7CisJfQorCWJyZWFrOworfQorZGVmYXVsdDoKKwl7CisJU0FZKCJFUlJPUjogIGJhZCBpbnB1dDogJWlcbiIsIGlucHV0KTsKKwlyZXR1cm4gLTE7Cit9Cit9Cittc2xlZXAoMjApOworU0VUKHAsIDB4MDAwMiwgMHgwMDkzKTsKK21zbGVlcCgyMCk7CisKK3N0YXJ0XzEwMChwKTsKKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorc2V0X3Jlc29sdXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKnAsIFwKKwkJCQlfX3UxNiBzZXQwLCBfX3UxNiBzZXQxLCBfX3UxNiBzZXQyLCBfX3UxNiBzZXQzKQoreworX191MTYgdTB4MDExMSwgdTB4MDExMywgdTB4MDExNSwgdTB4MDExNzsKKwordTB4MDExMSA9ICgoMHhGRjAwICYgc2V0MCkgPj4gOCk7Cit1MHgwMTEzID0gKCgweEZGMDAgJiBzZXQxKSA+PiA4KTsKK3UweDAxMTUgPSAoKDB4RkYwMCAmIHNldDIpID4+IDgpOwordTB4MDExNyA9ICgoMHhGRjAwICYgc2V0MykgPj4gOCk7CisKK1NFVChwLCAweDAxMTAsICgweDAwRkYgJiBzZXQwKSk7CitTRVQocCwgMHgwMTExLCB1MHgwMTExKTsKK1NFVChwLCAweDAxMTIsICgweDAwRkYgJiBzZXQxKSk7CitTRVQocCwgMHgwMTEzLCB1MHgwMTEzKTsKK1NFVChwLCAweDAxMTQsICgweDAwRkYgJiBzZXQyKSk7CitTRVQocCwgMHgwMTE1LCB1MHgwMTE1KTsKK1NFVChwLCAweDAxMTYsICgweDAwRkYgJiBzZXQzKSk7CitTRVQocCwgMHgwMTE3LCB1MHgwMTE3KTsKKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorc3RhcnRfMTAwKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworX191MTYgZ2V0MDsKK19fdTggaWdvdDsKKworR0VUKHAsIDB4MDEwMCwgJmlnb3QpOyAgZ2V0MCA9IGlnb3Q7Cittc2xlZXAoMHgxZjQpOworU0VUKHAsIDB4MDEwMCwgKDB4ODAgfCBnZXQwKSk7Cittc2xlZXAoMHgxZjQpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorc3RvcF8xMDAoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitfX3UxNiBnZXQwOworX191OCBpZ290OworCitHRVQocCwgMHgwMTAwLCAmaWdvdCk7ICBnZXQwID0gaWdvdDsKK21zbGVlcCgweDFmNCk7CitTRVQocCwgMHgwMTAwLCAoMHg3RiAmIGdldDApKTsKK21zbGVlcCgweDFmNCk7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEZVTkNUSU9OIHdhaXRfaTJjKCkgUkVUVVJOUyAwIE9OIFNVQ0NFU1MKKyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAord2FpdF9pMmMoc3RydWN0IHVzYl9kZXZpY2UgKnApCit7CitfX3UxNiBnZXQwOworX191OCBpZ290OworY29uc3QgaW50IG1heCA9IDQ7CitpbnQgazsKKworZm9yIChrID0gMDsgIGsgPCBtYXg7ICBrKyspIHsKKwlHRVQocCwgMHgwMjAxLCAmaWdvdCk7ICBnZXQwID0gaWdvdDsKKwlzd2l0Y2ggKGdldDApIHsKKwljYXNlIDB4MDQ6CisJY2FzZSAweDAxOiB7CisJCXJldHVybiAwOworCX0KKwljYXNlIDB4MDA6IHsKKwkJbXNsZWVwKDEwKTsKKwkJY29udGludWU7CisJfQorCWRlZmF1bHQ6IHsKKwkJcmV0dXJuIGdldDAgLSAxOworCX0KKwl9Cit9CityZXR1cm4gLTE7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorcmVnc2V0KHN0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZSwgX191MTYgaW5kZXgsIF9fdTE2IHZhbHVlKQoreworX191MTYgaWdvdDsKK2ludCByYzAsIHJjMTsKKworaWYgKCFwdXNiX2RldmljZSkKKwlyZXR1cm4gLUVGQVVMVDsKKworcmMxID0gMDsgIGlnb3QgPSAwOworcmMwID0gdXNiX2NvbnRyb2xfbXNnKHB1c2JfZGV2aWNlLCB1c2Jfc25kY3RybHBpcGUocHVzYl9kZXZpY2UsIDApLCBcCisJCShfX3U4KTB4MDEsIFwKKwkJKF9fdTgpKFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSksIFwKKwkJKF9fdTE2KXZhbHVlLCBcCisJCShfX3UxNilpbmRleCwgXAorCQkodm9pZCAqKU5VTEwsIFwKKwkJKF9fdTE2KTAsIFwKKwkJKGludCk1MDApOworCisjaWYgZGVmaW5lZChOT1JFQURCQUNLKQorIworI2Vsc2UKK3JjMSA9IHVzYl9jb250cm9sX21zZyhwdXNiX2RldmljZSwgdXNiX3JjdmN0cmxwaXBlKHB1c2JfZGV2aWNlLCAwKSwgXAorCQkoX191OCkweDAwLCBcCisJCShfX3U4KShVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSksIFwKKwkJKF9fdTE2KTB4MDAsIFwKKwkJKF9fdTE2KWluZGV4LCBcCisJCSh2b2lkICopJmlnb3QsIFwKKwkJKF9fdTE2KXNpemVvZihfX3UxNiksIFwKKwkJKGludCk1MDAwMCk7CitpZ290ID0gMHhGRiAmIGlnb3Q7Citzd2l0Y2ggKGluZGV4KSB7CitjYXNlIDB4MDAwOgorY2FzZSAweDUwMDoKK2Nhc2UgMHg1MDI6CitjYXNlIDB4NTAzOgorY2FzZSAweDUwNDoKK2Nhc2UgMHg1MDY6CitjYXNlIDB4NTA3OiB7CisJYnJlYWs7Cit9CitjYXNlIDB4MjA0OgorY2FzZSAweDIwNToKK2Nhc2UgMHgzNTA6CitjYXNlIDB4MzUxOiB7CisJaWYgKDAgIT0gaWdvdCkgeworCQlKT1QoOCwgInVuZXhwZWN0ZWQgMHglMDJYIGZvciBTVEsgcmVnaXN0ZXIgMHglMDNYXG4iLCBcCisJCQkJCQkJCWlnb3QsIGluZGV4KTsKKwl9CiticmVhazsKK30KK2Nhc2UgMHgxMTQ6CitjYXNlIDB4MTE2OiB7CisJaWYgKCgweEZGICYgdmFsdWUpICE9IGlnb3QpIHsKKwkJSk9UKDgsICJ1bmV4cGVjdGVkIDB4JTAyWCAhPSAweCUwMlggIiBcCisJCQkJCQkiZm9yIFNUSyByZWdpc3RlciAweCUwM1hcbiIsIFwKKwkJCQkJCWlnb3QsIHZhbHVlLCBpbmRleCk7CisJfQorYnJlYWs7Cit9CitjYXNlIDB4MjAwOiB7CisJaWYgKDAgPT0gaWdvdCkKKwkJYnJlYWs7Cit9CitkZWZhdWx0OiB7CisJaWYgKHZhbHVlICE9IGlnb3QpIHsKKwkJSk9UKDgsICJ1bmV4cGVjdGVkIDB4JTAyWCAhPSAweCUwMlggIiBcCisJCQkJCSJmb3IgU1RLIHJlZ2lzdGVyIDB4JTAzWFxuIiwgXAorCQkJCQlpZ290LCB2YWx1ZSwgaW5kZXgpOworCX0KK2JyZWFrOworfQorfQorI2VuZGlmIC8qICEgTk9SRUFEQkFDSyovCisKK3JldHVybiAoMCA+IHJjMCkgPyByYzAgOiByYzE7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3JlZ2dldChzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2UsIF9fdTE2IGluZGV4LCB2b2lkICpwdm9pZCkKK3sKK2ludCBpcjsKKworaWYgKCFwdXNiX2RldmljZSkKKwlyZXR1cm4gLUVGQVVMVDsKKworaXIgPSB1c2JfY29udHJvbF9tc2cocHVzYl9kZXZpY2UsIHVzYl9yY3ZjdHJscGlwZShwdXNiX2RldmljZSwgMCksIFwKKwkJKF9fdTgpMHgwMCwgXAorCQkoX191OCkoVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UpLCBcCisJCShfX3UxNikweDAwLCBcCisJCShfX3UxNilpbmRleCwgXAorCQkodm9pZCAqKXB2b2lkLCBcCisJCXNpemVvZihfX3U4KSwgXAorCQkoaW50KTUwMDAwKTsKK3JldHVybiAweEZGICYgaXI7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3dha2V1cF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnB1c2JfZGV2aWNlKQoreworcmV0dXJuIHVzYl9jb250cm9sX21zZyhwdXNiX2RldmljZSwgdXNiX3NuZGN0cmxwaXBlKHB1c2JfZGV2aWNlLCAwKSwgXAorCQkoX191OClVU0JfUkVRX1NFVF9GRUFUVVJFLCBcCisJCShfX3U4KShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1NUQU5EQVJEIHwgVVNCX1JFQ0lQX0RFVklDRSksIFwKKwkJVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQLCBcCisJCShfX3UxNikwLCBcCisJCSh2b2lkICopIE5VTEwsIFwKKwkJKF9fdTE2KTAsIFwKKwkJKGludCk1MDAwMCk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUE9SVEFOVDoKKyAqICBUSEUgTUVTU0FHRSBPRiBUWVBFIChVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkKKyAqICBDQVVTRVMgTVVUSU5HIElGIFRIRSBWQUxVRSAweDAxMDAgSVMgU0VOVC4KKyAqICBUTyBFTkFCTEUgQVVESU8gIFRIRSBWQUxVRSAweDAyMDAgTVVTVCBCRSBTRU5ULgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2F1ZGlvX3NldHVwKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZTsKK3N0YXRpYyBfX3U4IHJlcXVlc3QgPSAweDAxOworc3RhdGljIF9fdTggcmVxdWVzdHR5cGUgPSBcCisJCShfX3U4KShVU0JfRElSX09VVCB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSk7CisKK3N0YXRpYyBfX3UxNiB2YWx1ZV91bm11dGUgPSAweDAyMDA7CitzdGF0aWMgX191MTYgaW5kZXggPSAweDAzMDE7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxXTsKK3N0YXRpYyBfX3UxNiBsZW5ndGggPSAxOworaW50IHJjLCBpZDEsIGlkMjsKKworaWYgKE5VTEwgPT0gcGVhc3ljYXApCisJcmV0dXJuIC1FRkFVTFQ7CisKK3B1c2JfZGV2aWNlID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKE5VTEwgPT0gcHVzYl9kZXZpY2UpCisJcmV0dXJuIC1FRkFVTFQ7CisKK0pPVCg4LCAiJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYXG4iLAlcCisJCQlyZXF1ZXN0dHlwZSwgcmVxdWVzdCwJCVwKKwkJCSgweDAwRkYgJiB2YWx1ZV91bm11dGUpLAlcCisJCQkoMHhGRjAwICYgdmFsdWVfdW5tdXRlKSA+PiA4LAlcCisJCQkoMHgwMEZGICYgaW5kZXgpLAkJXAorCQkJKDB4RkYwMCAmIGluZGV4KSA+PiA4LAkJXAorCQkJKDB4MDBGRiAmIGxlbmd0aCksCQlcCisJCQkoMHhGRjAwICYgbGVuZ3RoKSA+PiA4KTsKKworYnVmZmVyWzBdID0gMHgwMTsKKworcmMgPSB1c2JfY29udHJvbF9tc2cocHVzYl9kZXZpY2UsIHVzYl9zbmRjdHJscGlwZShwdXNiX2RldmljZSwgMCksCVwKKwkJCShfX3U4KXJlcXVlc3QsCQkJCQlcCisJCQkoX191OClyZXF1ZXN0dHlwZSwJCQkJXAorCQkJKF9fdTE2KXZhbHVlX3VubXV0ZSwJCQkJXAorCQkJKF9fdTE2KWluZGV4LAkJCQkJXAorCQkJKHZvaWQgKikmYnVmZmVyWzBdLAkJCQlcCisJCQkoX191MTYpbGVuZ3RoLAkJCQkJXAorCQkJKGludCk1MDAwMCk7CisKK0pPVCg4LCAiMHglMDJYPWJ1ZmZlclxuIiwgKigoX191OCAqKSAmYnVmZmVyWzBdKSk7CitpZiAocmMgIT0gKGludClsZW5ndGgpCisJU0FZKCJFUlJPUjogdXNiX2NvbnRyb2xfbXNnIHJldHVybmVkICVpXG4iLCByYyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBSRUdJU1RFUiA1MDA6ICBTRVRUSU5HIFZBTFVFIFRPIDB4MDA5NCBSRVNFVFMgQVVESU8gQ09ORklHVVJBVElPTiA/Pz8KKyAqICBSRUdJU1RFUiA1MDY6ICBBTkFMT0dVRSBBVURJTyBBVFRFTlRVQVRPUiA/Pz8KKyAqICAgICAgICAgICAgICAgICBGT1IgVEhFIENWQlMrUy1WSURFTyBIQVJEV0FSRToKKyAqICAgICAgICAgICAgICAgICAgICBTRVRUSU5HIFZBTFVFIFRPIDB4MDAwMCBHSVZFUyBRVUlFVCBTT1VORC4KKyAqICAgICAgICAgICAgICAgICAgICBUSEUgVVBQRVIgQllURSBTRUVNUyBUTyBIQVZFIE5PIEVGRkVDVC4KKyAqICAgICAgICAgICAgICAgICBGT1IgVEhFIEZPVVItQ1ZCUyBIQVJEV0FSRToKKyAqICAgICAgICAgICAgICAgICAgICBTRVRUSU5HIFZBTFVFIFRPIDB4MDAwMCBTRUVNUyBUTyBIQVZFIE5PIEVGRkVDVC4KKyAqICBSRUdJU1RFUiA1MDc6ICBBTkFMT0dVRSBBVURJTyBQUkVBTVBMSUZJRVIgT04vT0ZGID8/PworICogICAgICAgICAgICAgICAgIEZPUiBUSEUgQ1ZCUy1TLVZJREVPIEhBUkRXQVJFOgorICogICAgICAgICAgICAgICAgICAgIFNFVFRJTkcgVkFMVUUgVE8gMHgwMDAxIEdJVkVTIFZFUlkgTE9VRCwgRElTVE9SVEVEIFNPVU5ELgorICogICAgICAgICAgICAgICAgICAgIFRIRSBVUFBFUiBCWVRFIFNFRU1TIFRPIEhBVkUgTk8gRUZGRUNULgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworU0VUKHB1c2JfZGV2aWNlLCAweDA1MDAsIDB4MDA5NCk7CisKK1NFVChwdXNiX2RldmljZSwgMHgwNTAwLCAweDAwOEMpOworCitTRVQocHVzYl9kZXZpY2UsIDB4MDUwNiwgMHgwMDAxKTsKK1NFVChwdXNiX2RldmljZSwgMHgwNTA3LCAweDAwMDApOworCitpZDEgPSByZWFkX3Z0KHB1c2JfZGV2aWNlLCAweDAwN0MpOworaWQyID0gcmVhZF92dChwdXNiX2RldmljZSwgMHgwMDdFKTsKK1NBWSgiMHglMDRYOjB4JTA0WCBpcyBhdWRpbyB2ZW5kb3IgaWRcbiIsIGlkMSwgaWQyKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyogICBTRUxFQ1QgQVVESU8gU09VUkNFICJMSU5FIElOIiBBTkQgU0VUIERFRkFVTFQgR0FJTiBUTyAwIGRCLgorKgorKiAgIFRIRVNFIENPTU1BTkRTIFNFRU0gVE8gQkUgQUNDRVBURUQgKFRIT1VHSCBQT1NTSUJMWSBJR05PUkVEKSBFVkVOIFdIRU4KKyogICBUSEVSRSBJUyBOTyBTRVBBUkFURSBBVURJTyBDSElQIFBSRVNFTlQuCisqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDAyLCAweDgwMDApOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxQywgMHg4MDAwKTsKKword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAwRSwgMHgwMDAwKTsKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMTAsIDB4MDAwMCk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDEyLCAweDgwMDApOword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxNiwgMHgwMDAwKTsKKword3JpdGVfdnQocHVzYl9kZXZpY2UsIDB4MDAxQSwgMHgwNDA0KTsKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMDIsIDB4MDAwMCk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDFDLCAweDAwMDApOworCitjaGVja192dChwdXNiX2RldmljZSk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CitjaGVja192dChzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2UpCit7CitpbnQgaWdvdDsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAwMik7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDAyXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDAyKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAwRSk7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDBFXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDBFKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxMCk7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDEwXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDEwKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxMik7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDEyXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDEyKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxNik7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDE2XG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDE2KTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxQSk7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDFBXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDFBKTsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxQyk7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDFDXG4iKTsKK2lmICgweDgwMDAgJiBpZ290KQorCVNBWSgicmVnaXN0ZXIgMHglMDJYIG11dGVkXG4iLCAweDFDKTsKKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE5PVEU6ICBUSElTIERPRVMgSU5DUkVBU0UgVEhFIFZPTFVNRSBEUkFNQVRJQ0FMTFk6CisgKiAgICAgICAgIGF1ZGlvX2dhaW5zZXQocHVzYl9kZXZpY2UsIDB4MDAwRik7CisgKgorICogIElGIDE2PGxvdWQ8MzEgVlQxNjIxQSBSRUdJU1RFUiAweDFDIElTIFNFVCBGT1IgUE9TSVRJVkUgR0FJTi4KKyAqICBJRiBsb3VkPD0xNiBWVDE2MjFBIFJFR0lTVEVSIDB4MUMgSVMgU0VUIEZPUiBaRVJPIEdBSU4uCisgKiAgVEhFUkUgSVMgTkVWRVIgQU5ZIChBRERJVElPTkFMKSBBVFRFTlVBVElPTi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CithdWRpb19nYWluc2V0KHN0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZSwgX19zOCBsb3VkKQoreworaW50IGlnb3Q7CitfX3U4IHU4OworX191MTYgbXV0ZTsKKworaWYgKDE2ID4gbG91ZCkKKwlsb3VkID0gMTY7Cit1OCA9IDB4MDAwRiAmIChfX3U4KShsb3VkIC0gMTYpOworCit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDAyLCAweDgwMDApOworCitpZ290ID0gcmVhZF92dChwdXNiX2RldmljZSwgMHgwMDFDKTsKK2lmICgwID4gaWdvdCkgeworCVNBWSgiRVJST1I6IGZhaWxlZCB0byByZWFkIFZUMTYxMkEgcmVnaXN0ZXIgMHgxQ1xuIik7CisJbXV0ZSA9IDB4MDAwMDsKK30gZWxzZQorCW11dGUgPSAweDgwMDAgJiAoKHVuc2lnbmVkIGludClpZ290KTsKKworSk9UKDgsICIweCUwNFg9KG11dGV8dTh8KHU4PDw4KSlcbiIsIG11dGUgfCB1OCB8ICh1OCA8PCA4KSk7CisKK3dyaXRlX3Z0KHB1c2JfZGV2aWNlLCAweDAwMUMsIDB4ODAwMCk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDFDLCAobXV0ZSB8IHU4IHwgKHU4IDw8IDgpKSk7Cit3cml0ZV92dChwdXNiX2RldmljZSwgMHgwMDAyLCAweDAwMDApOworCityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorYXVkaW9fZ2FpbmdldChzdHJ1Y3QgdXNiX2RldmljZSAqcHVzYl9kZXZpY2UpCit7CitpbnQgaWdvdDsKKworaWdvdCA9IHJlYWRfdnQocHVzYl9kZXZpY2UsIDB4MDAxQyk7CitpZiAoMCA+IGlnb3QpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHJlYWQgVlQxNjEyQSByZWdpc3RlciAweDFDXG4iKTsKK3JldHVybiBpZ290OworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50CitzZXQydG83OChzdHJ1Y3QgdXNiX2RldmljZSAqcCkKK3sKK2ludCBpcjsKKworbXNsZWVwKDIwKTsKK2lyID0gcmVnc2V0KHAsIDB4MDAwMiwgMHgwMDc4KTsKK2lmICgwID4gaXIpCisJU0FZKCJFUlJPUjogZmFpbGVkIHRvIHNldCByZWdpc3RlciAweDAwMDIgdG8gMHgwMDc4XG4iKTsKK21zbGVlcCgyMCk7CityZXR1cm4gaXI7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3NldDJ0bzkzKHN0cnVjdCB1c2JfZGV2aWNlICpwKQoreworaW50IGlyOworCittc2xlZXAoMjApOworaXIgPSByZWdzZXQocCwgMHgwMDAyLCAweDAwOTMpOworaWYgKDAgPiBpcikKKwlTQVkoIkVSUk9SOiBmYWlsZWQgdG8gc2V0IHJlZ2lzdGVyIDB4MDAwMiB0byAweDAwNzhcbiIpOworbXNsZWVwKDIwKTsKK3JldHVybiBpcjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0YmJkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfbWFpbi5jCkBAIC0wLDAgKzEsNDM1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9tYWluLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgVmlkZW8gZHJpdmVyIGZvciBFYXN5Q0FQIFVTQjIuMCBWaWRlbyBDYXB0dXJlIERldmljZSBEQzYwICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfc3RhbmRhcmQuaCIKKworaW50IGVhc3ljYXBfZGVidWc7Cittb2R1bGVfcGFyYW0oZWFzeWNhcF9kZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEFSQU1FVEVSUyBBUFBMSUNBQkxFIFRPIEVOVElSRSBEUklWRVIsIEkuRS4gQk9USCBWSURFTyBBTkQgQVVESU8KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RydWN0IHVzYl9kZXZpY2VfaWQgZWFzeWNhcF91c2JfZGV2aWNlX2lkX3RhYmxlW10gPSB7Cit7IFVTQl9ERVZJQ0UoVVNCX0VBU1lDQVBfVkVORE9SX0lELCBVU0JfRUFTWUNBUF9QUk9EVUNUX0lEKSB9LAoreyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGVhc3ljYXBfdXNiX2RldmljZV9pZF90YWJsZSk7CitzdHJ1Y3QgdXNiX2RyaXZlciBlYXN5Y2FwX3VzYl9kcml2ZXIgPSB7CisubmFtZSA9ICJlYXN5Y2FwIiwKKy5pZF90YWJsZSA9IGVhc3ljYXBfdXNiX2RldmljZV9pZF90YWJsZSwKKy5wcm9iZSA9IGVhc3ljYXBfdXNiX3Byb2JlLAorLmRpc2Nvbm5lY3QgPSBlYXN5Y2FwX3VzYl9kaXNjb25uZWN0LAorfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEFSQU1FVEVSUyBVU0VEIFdIRU4gUkVHSVNURVJJTkcgVEhFIFZJREVPIElOVEVSRkFDRQorICoKKyAqICBOT1RFOiBTT01FIEtFUk5FTFMgSUdOT1JFIHVzYl9jbGFzc19kcml2ZXIubWlub3JfYmFzZSwgQVMgTUVOVElPTkVEIEJZCisgKiAgICAgICAgQ09SQkVUIEVUIEFMLiAiTElOVVggREVWSUNFIERSSVZFUlMiLCAzcmQgRURJVElPTiwgUEFHRSAyNTMuCisgKiAgICAgICAgVEhJUyBJUyBUSEUgQ0FTRSBGT1IgT3BlblNVU0UuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWFzeWNhcF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBlYXN5Y2FwX29wZW4sCisJLnJlbGVhc2UJPSBlYXN5Y2FwX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gZWFzeWNhcF9pb2N0bCwKKwkucG9sbAkJPSBlYXN5Y2FwX3BvbGwsCisJLm1tYXAJCT0gZWFzeWNhcF9tbWFwLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKK3N0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBlYXN5Y2FwX3ZtX29wcyA9IHsKKy5vcGVuICA9IGVhc3ljYXBfdm1hX29wZW4sCisuY2xvc2UgPSBlYXN5Y2FwX3ZtYV9jbG9zZSwKKy5mYXVsdCA9IGVhc3ljYXBfdm1hX2ZhdWx0LAorfTsKK3N0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGVhc3ljYXBfY2xhc3MgPSB7CisubmFtZSA9ICJ1c2IvZWFzeWNhcCVkIiwKKy5mb3BzID0gJmVhc3ljYXBfZm9wcywKKy5taW5vcl9iYXNlID0gVVNCX1NLRUxfTUlOT1JfQkFTRSwKK307CisKKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCisjaWYgZGVmaW5lZChFQVNZQ0FQX05FRURTX1Y0TDJfRk9QUykKK2NvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2NGwyX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGVhc3ljYXBfb3Blbl9ub2lub2RlLAorCS5yZWxlYXNlCT0gZWFzeWNhcF9yZWxlYXNlX25vaW5vZGUsCisJLnVubG9ja2VkX2lvY3RsCT0gZWFzeWNhcF9pb2N0bCwKKwkucG9sbAkJPSBlYXN5Y2FwX3BvbGwsCisJLm1tYXAJCT0gZWFzeWNhcF9tbWFwLAorfTsKKyNlbmRpZiAvKkVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTKi8KK2ludCB2aWRlb19kZXZpY2VfbWFueSAvKj0wKi87CitzdHJ1Y3QgdmlkZW9fZGV2aWNlICpwdmlkZW9fYXJyYXlbVklERU9fREVWSUNFX01BTlldLCAqcHZpZGVvX2RldmljZTsKKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKy8qXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEFSQU1FVEVSUyBVU0VEIFdIRU4gUkVHSVNURVJJTkcgVEhFIEFVRElPIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWFzeXNuZF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBlYXN5c25kX29wZW4sCisJLnJlbGVhc2UJPSBlYXN5c25kX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gZWFzeXNuZF9pb2N0bCwKKwkucmVhZAkJPSBlYXN5c25kX3JlYWQsCisJLmxsc2VlawkJPSBub19sbHNlZWssCit9Oworc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgZWFzeXNuZF9jbGFzcyA9IHsKKy5uYW1lID0gInVzYi9lYXN5c25kJWQiLAorLmZvcHMgPSAmZWFzeXNuZF9mb3BzLAorLm1pbm9yX2Jhc2UgPSBVU0JfU0tFTF9NSU5PUl9CQVNFLAorfTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIElUIElTIE5PVCBBUFBST1BSSUFURSBGT1IgZWFzeWNhcF9vcGVuKCkgVE8gU1VCTUlUIFRIRSBWSURFTyBVUkJTIEhFUkUsCisgKiAgQkVDQVVTRSBUSEVSRSBXSUxMIEFMV0FZUyBCRSBTVUJTRVFVRU5UIE5FR09USUFUSU9OIE9GIFRWIFNUQU5EQVJEIEFORAorICogIEZPUk1BVCBCWSBJT0NUTCBBTkQgSVQgSVMgSU5BRFZJU0FCTEUgVE8gSEFWRSBUSEUgVVJCUyBSVU5OSU5HIFdISUxFCisgKiAgUkVHSVNURVJTIE9GIFRIRSBTQTcxMTNIIEFSRSBCRUlORyBNQU5JUFVMQVRFRC4KKyAqCisgKiAgVEhFIFNVQk1JU1NJT04gT0YgVklERU8gVVJCUyBJUyBUSEVSRUZPUkUgREVMQVlFRCBVTlRJTCBUSEUgSU9DVEwgQ09NTUFORAorICogIFNUUkVBTU9OIElTIFJFQ0VJVkVELgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK2Vhc3ljYXBfb3Blbl9ub2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKQoreworcmV0dXJuIGVhc3ljYXBfb3Blbigoc3RydWN0IGlub2RlICopTlVMTCwgZmlsZSk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KK2ludAorZWFzeWNhcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworI2lmICghZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkpCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2U7CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCitzdHJ1Y3QgdXNiX2RldmljZSAqcDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK2ludCBpLCBrLCBtLCByYzsKKworSk9UKDQsICJcbiIpOworU0FZKCI9PT09PT09PT09T1BFTj09PT09PT09PVxuIik7CisKK3BlYXN5Y2FwID0gKHN0cnVjdCBlYXN5Y2FwICopTlVMTDsKKyNpZiAoIWRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpKQoraWYgKChzdHJ1Y3QgaW5vZGUgKilOVUxMID09IGlub2RlKSB7CisJU0FZKCJFUlJPUjogaW5vZGUgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcHVzYl9pbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmVhc3ljYXBfdXNiX2RyaXZlciwgaW1pbm9yKGlub2RlKSk7CitpZiAoIXB1c2JfaW50ZXJmYWNlKSB7CisJU0FZKCJFUlJPUjogcHVzYl9pbnRlcmZhY2UgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAgPSB1c2JfZ2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlKTsKKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2Vsc2UKK2ZvciAoaSA9IDA7ICBpIDwgdmlkZW9fZGV2aWNlX21hbnk7ICBpKyspIHsKKwlwdmlkZW9fZGV2aWNlID0gcHZpZGVvX2FycmF5W2ldOworCWlmICgoc3RydWN0IHZpZGVvX2RldmljZSAqKU5VTEwgIT0gcHZpZGVvX2RldmljZSkgeworCQlwZWFzeWNhcCA9IChzdHJ1Y3QgZWFzeWNhcCAqKXZpZGVvX2dldF9kcnZkYXRhKHB2aWRlb19kZXZpY2UpOworCQlicmVhazsKKwl9Cit9CisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KK2lmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMID09IHBlYXN5Y2FwKSB7CisJU0FZKCJNSVNUQUtFOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2ZpbGUtPnByaXZhdGVfZGF0YSA9IHBlYXN5Y2FwOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpBVElPTgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgInN0YXJ0aW5nIGluaXRpYWxpemF0aW9uXG4iKTsKKworZm9yIChrID0gMDsgIGsgPCBGUkFNRV9CVUZGRVJfTUFOWTsgIGsrKykgeworCWZvciAobSA9IDA7ICBtIDwgRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFOyAgbSsrKQorCQltZW1zZXQocGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28sIDAsIFBBR0VfU0laRSk7Cit9CitwID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcCkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30gZWxzZSB7CisJSk9UKDE2LCAiMHglMDhsWD1wZWFzeWNhcC0+cHVzYl9kZXZpY2VcbiIsIFwKKwkJCQkJKGxvbmcgaW50KXBlYXN5Y2FwLT5wdXNiX2RldmljZSk7Cit9CityYyA9IHdha2V1cF9kZXZpY2UocGVhc3ljYXAtPnB1c2JfZGV2aWNlKTsKK2lmICgwID09IHJjKQorCUpPVCg4LCAid2FrZXVwX2RldmljZSgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHdha2V1cF9kZXZpY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzZXR1cF9zdGsocCk7ICBwZWFzeWNhcC0+aW5wdXQgPSAwOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJzZXR1cF9zdGsoKSBPS1xuIik7CitlbHNlIHsKKwlTQVkoIkVSUk9SOiBzZXR1cF9zdGsoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzZXR1cF9zYWEocCk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgInNldHVwX3NhYSgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHNldHVwX3NhYSgpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGNoZWNrX3NhYShwKTsKK2lmICgwID09IHJjKQorCUpPVCg4LCAiY2hlY2tfc2FhKCkgT0tcbiIpOworZWxzZSBpZiAoLTggPCByYykKKwlTQVkoImNoZWNrX3NhYSgpIHJldHVybmVkICVpXG4iLCByYyk7CitlbHNlIHsKKwlTQVkoIkVSUk9SOiBjaGVja19zYWEoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAtPnN0YW5kYXJkX29mZnNldCA9IC0xOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoUFJFRkVSX05UU0MpCisKK3JjID0gYWRqdXN0X3N0YW5kYXJkKHBlYXN5Y2FwLCBWNEwyX1NURF9OVFNDX00pOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJhZGp1c3Rfc3RhbmRhcmQoLixOVFNDX00pIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IGFkanVzdF9zdGFuZGFyZCguLE5UU0NfTSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2Zvcm1hdChwZWFzeWNhcCwgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0ZJRUxEX05PTkUsIFwKKwkJCQkJCQkJCWZhbHNlKTsKK2lmICgwIDw9IHJjKQorCUpPVCg4LCAiYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsVVlWWSkgT0tcbiIpOworZWxzZSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsVVlWWSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworI2Vsc2UKKworcmMgPSBhZGp1c3Rfc3RhbmRhcmQocGVhc3ljYXAsIFwKKwkJKFY0TDJfU1REX1BBTF9CIHwgVjRMMl9TVERfUEFMX0cgfCBWNEwyX1NURF9QQUxfSCB8IFwKKwkJVjRMMl9TVERfUEFMX0kgfCBWNEwyX1NURF9QQUxfTikpOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJhZGp1c3Rfc3RhbmRhcmQoLixQQUxfQkdISU4pIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IGFkanVzdF9zdGFuZGFyZCguLFBBTF9CR0hJTikgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2Zvcm1hdChwZWFzeWNhcCwgNjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0ZJRUxEX05PTkUsIFwKKwkJCQkJCQkJCWZhbHNlKTsKK2lmICgwIDw9IHJjKQorCUpPVCg4LCAiYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsdXl2eSxmYWxzZSkgT0tcbiIpOworZWxzZSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X2Zvcm1hdCguLDY0MCw0ODAsdXl2eSxmYWxzZSkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworI2VuZGlmIC8qICFQUkVGRVJfTlRTQyovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityYyA9IGFkanVzdF9icmlnaHRuZXNzKHBlYXN5Y2FwLCAtODE5Mik7CitpZiAoMCAhPSByYykgeworCVNBWSgiRVJST1I6IGFkanVzdF9icmlnaHRuZXNzKGRlZmF1bHQpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGFkanVzdF9jb250cmFzdChwZWFzeWNhcCwgLTgxOTIpOworaWYgKDAgIT0gcmMpIHsKKwlTQVkoIkVSUk9SOiBhZGp1c3RfY29udHJhc3QoZGVmYXVsdCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X3NhdHVyYXRpb24ocGVhc3ljYXAsIC04MTkyKTsKK2lmICgwICE9IHJjKSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X3NhdHVyYXRpb24oZGVmYXVsdCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3JjID0gYWRqdXN0X2h1ZShwZWFzeWNhcCwgLTgxOTIpOworaWYgKDAgIT0gcmMpIHsKKwlTQVkoIkVSUk9SOiBhZGp1c3RfaHVlKGRlZmF1bHQpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCityYyA9IHVzYl9zZXRfaW50ZXJmYWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24pOworaWYgKDAgPT0gcmMpCisJSk9UKDgsICJ1c2Jfc2V0X2ludGVyZmFjZSguLCVpLCVpKSBPS1xuIiwgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24pOworZWxzZSB7CisJU0FZKCJFUlJPUjogdXNiX3NldF9pbnRlcmZhY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSBzdGFydF8xMDAocCk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgInN0YXJ0XzEwMCgpIE9LXG4iKTsKK2Vsc2UgeworCVNBWSgiRVJST1I6IHN0YXJ0XzEwMCgpIHJldHVybmVkICVpXG4iLCByYyk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwZWFzeWNhcC0+dmlkZW9faXNvY19zZXF1ZW5jZSA9IFZJREVPX0lTT0NfQlVGRkVSX01BTlkgLSAxOworcGVhc3ljYXAtPnZpZGVvX2lkbGUgPSAwOworcGVhc3ljYXAtPnZpZGVvX2p1bmsgPSAwOworZm9yIChpID0gMDsgaSA8IDE4MDsgaSsrKQorCXBlYXN5Y2FwLT5tZXJpdFtpXSA9IDA7CitwZWFzeWNhcC0+dmlkZW9fZW9mID0gMDsKK3BlYXN5Y2FwLT5hdWRpb19lb2YgPSAwOworCitkb19nZXR0aW1lb2ZkYXkoJnBlYXN5Y2FwLT50aW1ldmFsNyk7CisKK3BlYXN5Y2FwLT5mdWRnZSA9IDA7CisKK0pPVCg0LCAiZmluaXNoZWQgaW5pdGlhbGl6YXRpb25cbiIpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK3N1Ym1pdF92aWRlb191cmJzKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0cnVjdCBkYXRhX3VyYiAqcGRhdGFfdXJiOworc3RydWN0IHVyYiAqcHVyYjsKK3N0cnVjdCBsaXN0X2hlYWQgKnBsaXN0X2hlYWQ7CitpbnQgaiwgaXNiYWQsIG0sIHJjOworaW50IGlzYnVmOworCitpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMID09IHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+dXJiX3ZpZGVvX2hlYWQgdW5pbml0aWFsaXplZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoKHN0cnVjdCB1c2JfZGV2aWNlICopTlVMTCA9PSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoIXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCisKKworCisKKworCisKKwlKT1QoNCwgInN1Ym1pc3Npb24gb2YgYWxsIHZpZGVvIHVyYnNcbiIpOworCWlmICgwICE9IHJlYWR5X3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UpKSB7CisJCVNBWSgiRVJST1I6IG5vdCByZWFkeSB0byBjYXB0dXJlIGFmdGVyIHdhaXRpbmcgIiBcCisJCQkJCQkJIm9uZSBzZWNvbmRcbiIpOworCQlTQVkoIi4uLi4uICBjb250aW51aW5nIGFueXdheVxuIik7CisJfQorCWlzYmFkID0gMDsgIG0gPSAwOworCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoTlVMTCAhPSBwZGF0YV91cmIpIHsKKwkJCXB1cmIgPSBwZGF0YV91cmItPnB1cmI7CisJCQlpZiAoTlVMTCAhPSBwdXJiKSB7CisJCQkJaXNidWYgPSBwZGF0YV91cmItPmlzYnVmOworCQkJCXB1cmItPmludGVydmFsID0gMTsKKwkJCQlwdXJiLT5kZXYgPSBwZWFzeWNhcC0+cHVzYl9kZXZpY2U7CisJCQkJcHVyYi0+cGlwZSA9IFwKKwkJCQkJdXNiX3Jjdmlzb2NwaXBlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSxcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCQkJcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCQkJcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJbaXNidWZdLnBnbzsKKwkJCQlwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZTsKKwkJCQlwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7CisJCQkJcHVyYi0+Y29udGV4dCA9IHBlYXN5Y2FwOworCQkJCXB1cmItPnN0YXJ0X2ZyYW1lID0gMDsKKwkJCQlwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYzsKKworCQkJCWZvciAoaiA9IDA7ICBqIDwgcGVhc3ljYXAtPlwKKwkJCQkJdmlkZW9faXNvY19mcmFtZXNwZXJkZXNjOyBqKyspIHsKKwkJCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2pdLlwKKwkJCQkJCW9mZnNldCA9IGogKiBcCisJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQkJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5cCisJCQkJCQlsZW5ndGggPSBwZWFzeWNhcC0+XAorCQkJCQkJdmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQkJCX0KKworCQkJCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQkJaXNiYWQrKzsKKwkJCQkJU0FZKCJFUlJPUjogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQgIiBcCisJCQkJCQkJImZvciB1cmIgd2l0aCByYzpcbiIpOworCQkJCQlzd2l0Y2ggKHJjKSB7CisJCQkJCWNhc2UgLUVOT01FTTogeworCQkJCQkJU0FZKCJFTk9NRU1cbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU5PREVWOiB7CisJCQkJCQlTQVkoIkVOT0RFVlxuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTlhJTzogeworCQkJCQkJU0FZKCJFTlhJT1xuIik7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQkJCVNBWSgiRUlOVkFMXG4iKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVBR0FJTjogeworCQkJCQkJU0FZKCJFQUdBSU5cbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRUZCSUc6IHsKKwkJCQkJCVNBWSgiRUZCSUdcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQkJCVNBWSgiRVBJUEVcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU1TR1NJWkU6IHsKKwkJCQkJCVNBWSgiRU1TR1NJWkVcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJU0FZKCJ1bmtub3duIGVycm9yIGNvZGUgJWlcbiIsXAorCQkJCQkJCQkJIHJjKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQltKys7CisJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlzYmFkKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkgaXNiYWQrKzsKKwkJCX0KKwkJfQorCWlmIChpc2JhZCkgeworCQlKT1QoNCwgImF0dGVtcHRpbmcgY2xlYW51cCBpbnN0ZWFkIG9mIHN1Ym1pdHRpbmdcbiIpOworCQlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSkgeworCQkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIFwKKwkJCQkJCQkJbGlzdF9oZWFkKTsKKwkJCWlmIChOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCXB1cmIgPSBwZGF0YV91cmItPnB1cmI7CisJCQkJaWYgKE5VTEwgIT0gcHVyYikKKwkJCQkJdXNiX2tpbGxfdXJiKHB1cmIpOworCQkJfQorCQl9CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyA9IDA7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc3RyZWFtaW5nID0gMTsKKwkJSk9UKDQsICJzdWJtaXR0ZWQgJWkgdmlkZW8gdXJic1xuIiwgbSk7CisJfQorCisKKworCisKKworfSBlbHNlIHsKKwlKT1QoNCwgImFscmVhZHkgc3RyZWFtaW5nIHZpZGVvIHVyYnNcbiIpOworfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2tpbGxfdmlkZW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXApCit7CitpbnQgbTsKK3N0cnVjdCBsaXN0X2hlYWQgKnBsaXN0X2hlYWQ7CitzdHJ1Y3QgZGF0YV91cmIgKnBkYXRhX3VyYjsKKworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2lmIChwZWFzeWNhcC0+dmlkZW9faXNvY19zdHJlYW1pbmcpIHsKKworCisKKwlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwkJSk9UKDQsICJraWxsaW5nIHZpZGVvIHVyYnNcbiIpOworCQltID0gMDsKKwkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCkpIHsKKwkJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBcCisJCQkJCQkJCWxpc3RfaGVhZCk7CisJCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJaWYgKChzdHJ1Y3QgdXJiICopTlVMTCAhPSBwZGF0YV91cmItPnB1cmIpIHsKKwkJCQkJdXNiX2tpbGxfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJCW0rKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgbSk7CisJfSBlbHNlIHsKKwkJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorfSBlbHNlIHsKKwlKT1QoOCwgIiVpPXZpZGVvX2lzb2Nfc3RyZWFtaW5nLCBubyB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19zdHJlYW1pbmcpOworfQorcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK2Vhc3ljYXBfcmVsZWFzZV9ub2lub2RlKHN0cnVjdCBmaWxlICpmaWxlKQoreworcmV0dXJuIGVhc3ljYXBfcmVsZWFzZSgoc3RydWN0IGlub2RlICopTlVMTCwgZmlsZSk7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisjaWYgKCFkZWZpbmVkKEVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKSkKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKKworSk9UKDQsICJcbiIpOworCitwZWFzeWNhcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK2lmIChOVUxMID09IHBlYXN5Y2FwKSB7CisJU0FZKCJFUlJPUjogIHBlYXN5Y2FwIGlzIE5VTEwuXG4iKTsKKwlTQVkoImVuZGluZyB1bnN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAoMCAhPSBraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApKSB7CisJU0FZKCJFUlJPUjoga2lsbF92aWRlb191cmJzKCkgZmFpbGVkXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK0pPVCg0LCAiZW5kaW5nIHN1Y2Nlc3NmdWxseVxuIik7CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisjCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYqLworI2lmIGRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpCitpbnQKK3ZpZGVvZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqcHZkKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworaW50IGksIGosIGs7CisKK0pPVCg0LCAiXG4iKTsKKworayA9IDA7Citmb3IgKGkgPSAwOyAgaSA8IHZpZGVvX2RldmljZV9tYW55OyAgaSsrKSB7CisJcHZpZGVvX2RldmljZSA9IHB2aWRlb19hcnJheVtpXTsKKwlpZiAoKHN0cnVjdCB2aWRlb19kZXZpY2UgKilOVUxMICE9IHB2aWRlb19kZXZpY2UpIHsKKwkJaWYgKHB2ZC0+bWlub3IgPT0gcHZpZGVvX2RldmljZS0+bWlub3IpIHsKKwkJCXBlYXN5Y2FwID0gKHN0cnVjdCBlYXN5Y2FwICopXAorCQkJCQl2aWRlb19nZXRfZHJ2ZGF0YShwdmlkZW9fZGV2aWNlKTsKKwkJCWlmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMID09IHBlYXN5Y2FwKSB7CisJCQkJU0FZKCJFUlJPUjogIHBlYXN5Y2FwIGlzIE5VTExcbiIpOworCQkJCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5XG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJCWlmICgwICE9IGtpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCkpIHsKKwkJCQlTQVkoIkVSUk9SOiBraWxsX3ZpZGVvX3VyYnMoKSBmYWlsZWRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJSk9UKDQsICJmcmVlaW5nIHZpZGVvX2RldmljZSBzdHJ1Y3R1cmU6ICIgXAorCQkJCQkJCSIvZGV2L3ZpZGVvJWlcbiIsIGkpOworCQkJa2ZyZWUoKHZvaWQgKilwdmlkZW9fZGV2aWNlKTsKKwkJCWZvciAoaiA9IGk7ICBqIDwgKFZJREVPX0RFVklDRV9NQU5ZIC0gMSk7ICBqKyspCisJCQkJcHZpZGVvX2FycmF5W2pdID0gcHZpZGVvX2FycmF5W2ogKyAxXTsKKwkJCXZpZGVvX2RldmljZV9tYW55LS07ICBrKys7CisJCQlicmVhazsKKwkJfQorCX0KK30KK2lmICghaykgeworCVNBWSgiRVJST1I6IGxvc3QgdmlkZW9fZGV2aWNlIHN0cnVjdHVyZSBmb3IgJWk9bWlub3JcbiIsIHB2ZC0+bWlub3IpOworCVNBWSgiY2Fubm90IGZyZWU6IG1heSBjYXVzZSBtZW1vcnkgbGVha1xuIik7CisJU0FZKCJlbmRpbmcgdW5zdWNjZXNzZnVsbHlcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorCitKT1QoNCwgImVuZGluZyBzdWNjZXNzZnVsbHlcbiIpOworcmV0dXJuIDA7Cit9CisjZW5kaWYgLypFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCovCisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRISVMgRlVOQ1RJT04gSVMgQ0FMTEVEIEZST00gV0lUSElOIGVhc3ljYXBfdXNiX2Rpc2Nvbm5lY3QoKS4KKyAqICBCWSBUSElTIFNUQUdFIFRIRSBERVZJQ0UgSEFTIEFMUkVBRFkgQkVFTiBQSFlTSUNBTExZIFVOUExVR0dFRC4KKyAqICBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgSVMgTk8gTE9OR0VSIFZBTElEIEFORCBTSE9VTEQgSEFWRSBCRUVOIFNFVCBUTyBOVUxMLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitlYXN5Y2FwX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqcGtyZWYpCit7CitpbnQgaywgbSwgbG9zdDsKK2ludCBhbGxvY2F0aW9uX3ZpZGVvX3VyYiwgYWxsb2NhdGlvbl92aWRlb19wYWdlLCBhbGxvY2F0aW9uX3ZpZGVvX3N0cnVjdDsKK2ludCBhbGxvY2F0aW9uX2F1ZGlvX3VyYiwgYWxsb2NhdGlvbl9hdWRpb19wYWdlLCBhbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdDsKK2ludCByZWdpc3RlcmVkX3ZpZGVvLCByZWdpc3RlcmVkX2F1ZGlvOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkLCAqcGxpc3RfbmV4dDsKKworSk9UKDQsICJcbiIpOworCitwZWFzeWNhcCA9IGNvbnRhaW5lcl9vZihwa3JlZiwgc3RydWN0IGVhc3ljYXAsIGtyZWYpOworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMOiBjYW5ub3QgcGVyZm9ybSBkZWxldGlvbnNcbiIpOworCXJldHVybjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgRlJFRSBWSURFTy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgbGlzdF9oZWFkICopTlVMTCAhPSBwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSB7CisJSk9UKDQsICJmcmVlaW5nIHZpZGVvIHVyYnNcbiIpOworCW0gPSAwOworCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoTlVMTCA9PSBwZGF0YV91cmIpCisJCQlKT1QoNCwgIkVSUk9SOiBwZGF0YV91cmIgaXMgTlVMTFxuIik7CisJCWVsc2UgeworCQkJaWYgKChzdHJ1Y3QgdXJiICopTlVMTCAhPSBwZGF0YV91cmItPnB1cmIpIHsKKwkJCQl1c2JfZnJlZV91cmIocGRhdGFfdXJiLT5wdXJiKTsKKwkJCQlwZGF0YV91cmItPnB1cmIgPSAoc3RydWN0IHVyYiAqKU5VTEw7CisJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiIC09IDE7CisJCQkJbSsrOworCQkJfQorCQl9CisJfQorCisJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGZyZWVkXG4iLCBtKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImZyZWVpbmcgdmlkZW8gZGF0YV91cmIgc3RydWN0dXJlcy5cbiIpOworCW0gPSAwOworCWxpc3RfZm9yX2VhY2hfc2FmZShwbGlzdF9oZWFkLCBwbGlzdF9uZXh0LCBwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSB7CisJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLCBsaXN0X2hlYWQpOworCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQlrZnJlZShwZGF0YV91cmIpOyAgcGRhdGFfdXJiID0gKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEw7CisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgLT0gXAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBkYXRhX3VyYik7CisJCQltKys7CisJCX0KKwl9CisJSk9UKDQsICIlaSB2aWRlbyBkYXRhX3VyYiBzdHJ1Y3R1cmVzIGZyZWVkXG4iLCBtKTsKKwlKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZD1OVUxMXG4iKTsKKwlwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkID0gKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMOworCX0gZWxzZSB7CitKT1QoNCwgInBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQgaXMgTlVMTFxuIik7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImZyZWVpbmcgdmlkZW8gaXNvYyBidWZmZXJzLlxuIik7CittID0gMDsKK2ZvciAoayA9IDA7ICBrIDwgVklERU9fSVNPQ19CVUZGRVJfTUFOWTsgIGsrKykgeworCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbykgeworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKVwKKwkJCQkocGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyksIFwKKwkJCQlWSURFT19JU09DX09SREVSKTsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyA9ICh2b2lkICopTlVMTDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSAtPSBcCisJCQkJKCh1bnNpZ25lZCBpbnQpKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworCQltKys7CisJfQorfQorSk9UKDQsICJpc29jIHZpZGVvIGJ1ZmZlcnMgZnJlZWQ6ICVpIHBhZ2VzXG4iLCBtICogKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIHZpZGVvIGZpZWxkIGJ1ZmZlcnMuXG4iKTsKK2xvc3QgPSAwOworZm9yIChrID0gMDsgIGsgPCBGSUVMRF9CVUZGRVJfTUFOWTsgIGsrKykgeworCWZvciAobSA9IDA7ICBtIDwgRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFOyAgbSsrKSB7CisJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28pIHsKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylcCisJCQkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tdW21dLnBnbykpOworCQkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28gPSAodm9pZCAqKU5VTEw7CisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlIC09IDE7CisJCQlsb3N0Kys7CisJCX0KKwl9Cit9CitKT1QoNCwgInZpZGVvIGZpZWxkIGJ1ZmZlcnMgZnJlZWQ6ICVpIHBhZ2VzXG4iLCBsb3N0KTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK0pPVCg0LCAiZnJlZWluZyB2aWRlbyBmcmFtZSBidWZmZXJzLlxuIik7Citsb3N0ID0gMDsKK2ZvciAoayA9IDA7ICBrIDwgRlJBTUVfQlVGRkVSX01BTlk7ICBrKyspIHsKKwlmb3IgKG0gPSAwOyAgbSA8IEZSQU1FX0JVRkZFUl9TSVpFL1BBR0VfU0laRTsgIG0rKykgeworCQlpZiAoKHZvaWQgKilOVUxMICE9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpXAorCQkJCQkocGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28pKTsKKwkJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvID0gKHZvaWQgKilOVUxMOworCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSAtPSAxOworCQkJbG9zdCsrOworCQl9CisJfQorfQorSk9UKDQsICJ2aWRlbyBmcmFtZSBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgbG9zdCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEZSRUUgQVVESU8uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkgeworCUpPVCg0LCAiZnJlZWluZyBhdWRpbyB1cmJzXG4iKTsKKwltID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKSkgeworCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIHN0cnVjdCBkYXRhX3VyYiwgbGlzdF9oZWFkKTsKKwkJaWYgKE5VTEwgPT0gcGRhdGFfdXJiKQorCQkJSk9UKDQsICJFUlJPUjogcGRhdGFfdXJiIGlzIE5VTExcbiIpOworCQllbHNlIHsKKwkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gcGRhdGFfdXJiLT5wdXJiKSB7CisJCQkJdXNiX2ZyZWVfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJcGRhdGFfdXJiLT5wdXJiID0gKHN0cnVjdCB1cmIgKilOVUxMOworCQkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3VyYiAtPSAxOworCQkJCW0rKzsKKwkJCX0KKwkJfQorCX0KKwlKT1QoNCwgIiVpIGF1ZGlvIHVyYnMgZnJlZWRcbiIsIG0pOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCUpPVCg0LCAiZnJlZWluZyBhdWRpbyBkYXRhX3VyYiBzdHJ1Y3R1cmVzLlxuIik7CisJbSA9IDA7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHBsaXN0X2hlYWQsIHBsaXN0X25leHQsIHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCWlmICgoc3RydWN0IGRhdGFfdXJiICopTlVMTCAhPSBwZGF0YV91cmIpIHsKKwkJCWtmcmVlKHBkYXRhX3VyYik7ICBwZGF0YV91cmIgPSAoc3RydWN0IGRhdGFfdXJiICopTlVMTDsKKwkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCAtPSBcCisJCQkJCQlzaXplb2Yoc3RydWN0IGRhdGFfdXJiKTsKKwkJCW0rKzsKKwkJfQorCX0KK0pPVCg0LCAiJWkgYXVkaW8gZGF0YV91cmIgc3RydWN0dXJlcyBmcmVlZFxuIiwgbSk7CitKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZD1OVUxMXG4iKTsKK3BlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQgPSAoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEw7Cit9IGVsc2UgeworSk9UKDQsICJwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkIGlzIE5VTExcbiIpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIGF1ZGlvIGlzb2MgYnVmZmVycy5cbiIpOworbSA9IDA7Citmb3IgKGsgPSAwOyAgayA8IEFVRElPX0lTT0NfQlVGRkVSX01BTlk7ICBrKyspIHsKKwlpZiAoKHZvaWQgKilOVUxMICE9IHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28pIHsKKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylcCisJCQkJKHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28pLCBcCisJCQkJQVVESU9fSVNPQ19PUkRFUik7CisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28gPSAodm9pZCAqKU5VTEw7CisJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3BhZ2UgLT0gXAorCQkJCSgodW5zaWduZWQgaW50KSgweDAxIDw8IEFVRElPX0lTT0NfT1JERVIpKTsKKwkJbSsrOworCX0KK30KK0pPVCg0LCAiZWFzeXNuZF9kZWxldGUoKTogaXNvYyBhdWRpbyBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgXAorCQkJCQltICogKDB4MDEgPDwgQVVESU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJmcmVlaW5nIGF1ZGlvIGJ1ZmZlcnMuXG4iKTsKK2xvc3QgPSAwOworZm9yIChrID0gMDsgIGsgPCBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueTsgIGsrKykgeworCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcltrXS5wZ28pIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbykpOworCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbyA9ICh2b2lkICopTlVMTDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSAtPSAxOworCQlsb3N0Kys7CisJfQorfQorSk9UKDQsICJlYXN5c25kX2RlbGV0ZSgpOiBhdWRpbyBidWZmZXJzIGZyZWVkOiAlaSBwYWdlc1xuIiwgbG9zdCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImZyZWVpbmcgZWFzeWNhcCBzdHJ1Y3R1cmUuXG4iKTsKK2FsbG9jYXRpb25fdmlkZW9fdXJiICAgID0gcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiOworYWxsb2NhdGlvbl92aWRlb19wYWdlICAgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlOworYWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3Q7CityZWdpc3RlcmVkX3ZpZGVvICAgICAgICA9IHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvOworYWxsb2NhdGlvbl9hdWRpb191cmIgICAgPSBwZWFzeWNhcC0+YWxsb2NhdGlvbl9hdWRpb191cmI7CithbGxvY2F0aW9uX2F1ZGlvX3BhZ2UgICA9IHBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3BhZ2U7CithbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCA9IHBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdDsKK3JlZ2lzdGVyZWRfYXVkaW8gICAgICAgID0gcGVhc3ljYXAtPnJlZ2lzdGVyZWRfYXVkaW87CittID0gMDsKK2lmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMICE9IHBlYXN5Y2FwKSB7CisJa2ZyZWUocGVhc3ljYXApOyAgcGVhc3ljYXAgPSAoc3RydWN0IGVhc3ljYXAgKilOVUxMOworCWFsbG9jYXRpb25fdmlkZW9fc3RydWN0IC09IHNpemVvZihzdHJ1Y3QgZWFzeWNhcCk7CisJbSsrOworfQorSk9UKDQsICIlaSBlYXN5Y2FwIHN0cnVjdHVyZSBmcmVlZFxuIiwgbSk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK1NBWSgiJThpPSB2aWRlbyB1cmJzICAgICBhZnRlciBhbGwgZGVsZXRpb25zXG4iLCBhbGxvY2F0aW9uX3ZpZGVvX3VyYik7CitTQVkoIiU4aT0gdmlkZW8gcGFnZXMgICAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl92aWRlb19wYWdlKTsKK1NBWSgiJThpPSB2aWRlbyBzdHJ1Y3RzICBhZnRlciBhbGwgZGVsZXRpb25zXG4iLCBhbGxvY2F0aW9uX3ZpZGVvX3N0cnVjdCk7CitTQVkoIiU4aT0gdmlkZW8gZGV2aWNlcyAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgcmVnaXN0ZXJlZF92aWRlbyk7CitTQVkoIiU4aT0gYXVkaW8gdXJicyAgICAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl9hdWRpb191cmIpOworU0FZKCIlOGk9IGF1ZGlvIHBhZ2VzICAgIGFmdGVyIGFsbCBkZWxldGlvbnNcbiIsIGFsbG9jYXRpb25fYXVkaW9fcGFnZSk7CitTQVkoIiU4aT0gYXVkaW8gc3RydWN0cyAgYWZ0ZXIgYWxsIGRlbGV0aW9uc1xuIiwgYWxsb2NhdGlvbl9hdWRpb19zdHJ1Y3QpOworU0FZKCIlOGk9IGF1ZGlvIGRldmljZXMgIGFmdGVyIGFsbCBkZWxldGlvbnNcbiIsIHJlZ2lzdGVyZWRfYXVkaW8pOworCitKT1QoNCwgImVuZGluZy5cbiIpOworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordW5zaWduZWQgaW50IGVhc3ljYXBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKKworSk9UKDgsICJcbiIpOworCitpZiAoTlVMTCA9PSAoKHBvbGxfdGFibGUgKil3YWl0KSkKKwlKT1QoOCwgIldBUk5JTkc6ICBwb2xsIHRhYmxlIHBvaW50ZXIgaXMgTlVMTCAuLi4gY29udGludWluZ1xuIik7CitpZiAoTlVMTCA9PSAoKHN0cnVjdCBmaWxlICopZmlsZSkpIHsKKwlTQVkoIkVSUk9SOiAgZmlsZSBwb2ludGVyIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGVhc3ljYXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CitpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCVNBWSgiRVJST1I6ICBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK3BlYXN5Y2FwLT5wb2xsZWQgPSAxOworCitpZiAoMCA9PSBlYXN5Y2FwX2RxYnVmKHBlYXN5Y2FwLCAwKSkKKwlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKK2Vsc2UKKwlyZXR1cm4gUE9MTEVSUjsKKworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJRiBtb2RlIElTIE5PTlpFUk8gVEhJUyBST1VUSU5FIFJFVFVSTlMgLUVBR0FJTiBSQVRIRVIgVEhBTiBCTE9DS0lORy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX2RxYnVmKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IG1vZGUpCit7CitpbnQgbWlzcywgcmM7CisKK0pPVCg4LCAiXG4iKTsKKworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiAgcGVhc3ljYXAgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFdBSVQgRk9SIEZJRUxEIDAKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworbWlzcyA9IDA7CitpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOword2hpbGUgKChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgfHwgXAorCQkJCSgwICE9ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgfHwgXAorCQkJCSgwICE9ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpIHsKKwltdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworCisJaWYgKG1vZGUpCisJCXJldHVybiAtRUFHQUlOOworCisJSk9UKDgsICJmaXJzdCB3YWl0ICBvbiB3cV92aWRlbywgIiBcCisJCQkJIiVpPWZpZWxkX3JlYWQgICVpPWZpZWxkX2ZpbGxcbiIsIFwKKwkJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZpZWxkX2ZpbGwpOworCisJbXNsZWVwKDEpOworCWlmICgwICE9ICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX3ZpZGVvLCBcCisJCQkocGVhc3ljYXAtPnZpZGVvX2lkbGUgfHwgcGVhc3ljYXAtPnZpZGVvX2VvZiAgfHwgXAorCQkJKChwZWFzeWNhcC0+ZmllbGRfcmVhZCAhPSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgJiYgXAorCQkJCSgwID09ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgJiYgXAorCQkJCSgwID09ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpKSkpKXsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRUlPOworCQl9CisJaWYgKHBlYXN5Y2FwLT52aWRlb19pZGxlKSB7CisJCUpPVCg4LCAiJWk9cGVhc3ljYXAtPnZpZGVvX2lkbGVcbiIsIHBlYXN5Y2FwLT52aWRlb19pZGxlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChwZWFzeWNhcC0+dmlkZW9fZW9mKSB7CisJCUpPVCg4LCAiJWk9cGVhc3ljYXAtPnZpZGVvX2VvZlxuIiwgcGVhc3ljYXAtPnZpZGVvX2VvZik7CisJCWRlYnJpZWYocGVhc3ljYXApOworCQlraWxsX3ZpZGVvX3VyYnMocGVhc3ljYXApOworCQlyZXR1cm4gLUVJTzsKKwl9CittaXNzKys7CitpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOworfQorbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKTsKK0pPVCg4LCAiZmlyc3QgYXdha2VuaW5nIG9uIHdxX3ZpZGVvIGFmdGVyICVpIHdhaXRzXG4iLCBtaXNzKTsKKworcmMgPSBmaWVsZDJmcmFtZShwZWFzeWNhcCk7CitpZiAoMCAhPSByYykKKwlTQVkoIkVSUk9SOiBmaWVsZDJmcmFtZSgpIHJldHVybmVkICVpXG4iLCByYyk7CisKK2lmICh0cnVlID09IHBlYXN5Y2FwLT5vZmZlcmZpZWxkcykgeworCXBlYXN5Y2FwLT5mcmFtZV9yZWFkID0gcGVhc3ljYXAtPmZyYW1lX2ZpbGw7CisJKHBlYXN5Y2FwLT5mcmFtZV9maWxsKSsrOworCWlmIChwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyX21hbnkgPD0gcGVhc3ljYXAtPmZyYW1lX2ZpbGwpCisJCXBlYXN5Y2FwLT5mcmFtZV9maWxsID0gMDsKKworCWlmICgweDAxICYgZWFzeWNhcF9zdGFuZGFyZFtwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0XS5tYXNrKSB7CisJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfQk9UVE9NOworCX0gZWxzZSB7CisJCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfVE9QOworCX0KK0pPVCg4LCAic2V0dGluZzogICAgJWk9cGVhc3ljYXAtPmZyYW1lX3JlYWRcbiIsIHBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKK0pPVCg4LCAiYnVtcGVkIHRvOiAgJWk9cGVhc3ljYXAtPmZyYW1lX2ZpbGxcbiIsIHBlYXN5Y2FwLT5mcmFtZV9maWxsKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgV0FJVCBGT1IgRklFTEQgMQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCittaXNzID0gMDsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpKQorCXJldHVybiAtRVJFU1RBUlRTWVM7Cit3aGlsZSAoKHBlYXN5Y2FwLT5maWVsZF9yZWFkID09IHBlYXN5Y2FwLT5maWVsZF9maWxsKSB8fCBcCisJCQkJKDAgIT0gKDB4RkYwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcmVhZF1bMF0ua291bnQpKSB8fCBcCisJCQkJKDAgPT0gKDB4MDBGRiAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcmVhZF1bMF0ua291bnQpKSkgeworCW11dGV4X3VubG9jaygmKHBlYXN5Y2FwLT5tdXRleF9tbWFwX3ZpZGVvWzBdKSk7CisKKwlpZiAobW9kZSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlKT1QoOCwgInNlY29uZCB3YWl0IG9uIHdxX3ZpZGVvLCAiIFwKKwkJCQkiJWk9ZmllbGRfcmVhZCAgJWk9ZmllbGRfZmlsbFxuIiwgXAorCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkLCBwZWFzeWNhcC0+ZmllbGRfZmlsbCk7CisJbXNsZWVwKDEpOworCWlmICgwICE9ICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX3ZpZGVvLCBcCisJCQkocGVhc3ljYXAtPnZpZGVvX2lkbGUgfHwgcGVhc3ljYXAtPnZpZGVvX2VvZiAgfHwgXAorCQkJKChwZWFzeWNhcC0+ZmllbGRfcmVhZCAhPSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgJiYgXAorCQkJCSgwID09ICgweEZGMDAgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkgJiYgXAorCQkJCSgwICE9ICgweDAwRkYgJiBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkpKSkpKXsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocGVhc3ljYXAtPnZpZGVvX2lkbGUpIHsKKwkJSk9UKDgsICIlaT1wZWFzeWNhcC0+dmlkZW9faWRsZVxuIiwgcGVhc3ljYXAtPnZpZGVvX2lkbGUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHBlYXN5Y2FwLT52aWRlb19lb2YpIHsKKwkJSk9UKDgsICIlaT1wZWFzeWNhcC0+dmlkZW9fZW9mXG4iLCBwZWFzeWNhcC0+dmlkZW9fZW9mKTsKKwkJZGVicmllZihwZWFzeWNhcCk7CisJCWtpbGxfdmlkZW9fdXJicyhwZWFzeWNhcCk7CisJCXJldHVybiAtRUlPOworCX0KK21pc3MrKzsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpKQorCXJldHVybiAtRVJFU1RBUlRTWVM7Cit9CittdXRleF91bmxvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworSk9UKDgsICJzZWNvbmQgYXdha2VuaW5nIG9uIHdxX3ZpZGVvIGFmdGVyICVpIHdhaXRzXG4iLCBtaXNzKTsKKworcmMgPSBmaWVsZDJmcmFtZShwZWFzeWNhcCk7CitpZiAoMCAhPSByYykKKwlTQVkoIkVSUk9SOiBmaWVsZDJmcmFtZSgpIHJldHVybmVkICVpXG4iLCByYyk7CisKK3BlYXN5Y2FwLT5mcmFtZV9yZWFkID0gcGVhc3ljYXAtPmZyYW1lX2ZpbGw7CitwZWFzeWNhcC0+cXVldWVkW3BlYXN5Y2FwLT5mcmFtZV9yZWFkXSA9IDA7CitwZWFzeWNhcC0+ZG9uZVtwZWFzeWNhcC0+ZnJhbWVfcmVhZF0gICA9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKKworKHBlYXN5Y2FwLT5mcmFtZV9maWxsKSsrOworaWYgKHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSA8PSBwZWFzeWNhcC0+ZnJhbWVfZmlsbCkKKwlwZWFzeWNhcC0+ZnJhbWVfZmlsbCA9IDA7CisKK2lmICgweDAxICYgZWFzeWNhcF9zdGFuZGFyZFtwZWFzeWNhcC0+c3RhbmRhcmRfb2Zmc2V0XS5tYXNrKSB7CisJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltwZWFzeWNhcC0+ZnJhbWVfcmVhZF1bMF0ua291bnQgPSBcCisJCQkJCQkJVjRMMl9GSUVMRF9UT1A7Cit9IGVsc2UgeworCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJbcGVhc3ljYXAtPmZyYW1lX3JlYWRdWzBdLmtvdW50ID0gXAorCQkJCQkJCVY0TDJfRklFTERfQk9UVE9NOworfQorCitKT1QoOCwgInNldHRpbmc6ICAgICVpPXBlYXN5Y2FwLT5mcmFtZV9yZWFkXG4iLCBwZWFzeWNhcC0+ZnJhbWVfcmVhZCk7CitKT1QoOCwgImJ1bXBlZCB0bzogICVpPXBlYXN5Y2FwLT5mcmFtZV9maWxsXG4iLCBwZWFzeWNhcC0+ZnJhbWVfZmlsbCk7CisKK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBCWSBERUZJTklUSU9OLCBvZGQgSVMgdHJ1ZSAgRk9SIFRIRSBGSUVMRCBPQ0NVUFlJTkcgTElORVMgMSwzLDUsLi4uLDQ3OQorICogICAgICAgICAgICAgICAgIG9kZCBJUyBmYWxzZSBGT1IgVEhFIEZJRUxEIE9DQ1VQWUlORyBMSU5FUyAwLDIsNCwuLi4sNDc4CisgKgorICogIFdIRU4gQk9PTEVBTiBQQVJBTUVURVIgZGVjaW1hdGVwaXhlbCBJUyB0cnVlLCBPTkxZIFRIRSBGSUVMRCBGT1IgV0hJQ0gKKyAqICBvZGQ9PWZhbHNlIElTIFRSQU5TRkVSUkVEIFRPIFRIRSBGUkFNRSBCVUZGRVIuCisgKgorICogIFRIRSBCT09MRUFOIFBBUkFNRVRFUiBvZmZlcmZpZWxkcyBJUyB0cnVlIE9OTFkgV0hFTiBUSEUgVVNFUiBQUk9HUkFNCisgKiAgQ0hPT1NFUyBUSEUgT1BUSU9OIFY0TDJfRklFTERfQUxURVJOQVRFLiAgTk8gVVNFUlNQQUNFIFBST0dSQU0gVEVTVEVECisgKiAgVE8gREFURSBIQVMgRE9ORSBUSElTLiAgQlVHUyBBUkUgTElLRUxZLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQKK2ZpZWxkMmZyYW1lKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0aW1ldmFsMDsKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWw7Citsb25nIGxvbmcgaW50IGFib3ZlLCBiZWxvdzsKK19fdTMyIHJlbWFpbmRlcjsKK3N0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisKK3ZvaWQgKnBleCwgKnBhZDsKK2ludCBrZXgsIGthZCwgbWV4LCBtYWQsIHJleCwgcmFkLCByYWQyOworaW50IGMyLCBjMywgdzIsIHczLCBjeiwgd3o7CitpbnQgcmMsIGJ5dGVzcGVycGl4ZWwsIG11bHRpcGxpZXIsIG11Y2gsIG1vcmUsIG92ZXIsIHJ1bXAsIGNhY2hlczsKK19fdTggbWFzaywgbWFyZ2luOworYm9vbCBvZGQsIGlzdXksIGRlY2ltYXRlcGl4ZWwsIG9mZmVyZmllbGRzOworCitKT1QoOCwgIj09PT09ICBwYXJpdHkgJWksIGZpZWxkIGJ1ZmZlciAlaSAtLT4gZnJhbWUgYnVmZmVyICVpXG4iLCBcCisJCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW3BlYXN5Y2FwLT5maWVsZF9yZWFkXVswXS5rb3VudCxcCisJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZyYW1lX2ZpbGwpOworSk9UKDgsICI9PT09PSAgJWk9Ynl0ZXNwZXJwaXhlbFxuIiwgcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWwpOworaWYgKHRydWUgPT0gcGVhc3ljYXAtPm9mZmVyZmllbGRzKQorCUpPVCg4LCAiPT09PT0gb2ZmZXJmaWVsZHNcbiIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFSkVDVCBPUiBDTEVBTiBCQUQgRklFTERTCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgeworCVNBWSgiRVJST1I6IG9uIGVudHJ5LCBzdGlsbCBmaWxsaW5nIGZpZWxkIGJ1ZmZlciAlaVxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkKTsKKwlyZXR1cm4gMDsKK30KKyNpZiBkZWZpbmVkKEVBU1lDQVBfVEVTVENBUkQpCitlYXN5Y2FwX3Rlc3RjYXJkKHBlYXN5Y2FwLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisjZWxzZQoraWYgKDAgIT0gKDB4MDQwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KSkKKwllYXN5Y2FwX3Rlc3RjYXJkKHBlYXN5Y2FwLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisjZW5kaWYgLypFQVNZQ0FQX1RFU1RDQVJEKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworb2ZmZXJmaWVsZHMgPSBwZWFzeWNhcC0+b2ZmZXJmaWVsZHM7CitieXRlc3BlcnBpeGVsID0gcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWw7CitkZWNpbWF0ZXBpeGVsID0gcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWw7CisKK2lmICgoMiAhPSBieXRlc3BlcnBpeGVsKSAmJiBcCisJCQkoMyAhPSBieXRlc3BlcnBpeGVsKSAmJiBcCisJCQkoNCAhPSBieXRlc3BlcnBpeGVsKSkgeworCVNBWSgiTUlTVEFLRTogJWk9Ynl0ZXNwZXJwaXhlbFxuIiwgYnl0ZXNwZXJwaXhlbCk7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitpZiAodHJ1ZSA9PSBkZWNpbWF0ZXBpeGVsKQorCW11bHRpcGxpZXIgPSAyOworZWxzZQorCW11bHRpcGxpZXIgPSAxOworCit3MiA9IDIgKiBtdWx0aXBsaWVyICogKHBlYXN5Y2FwLT53aWR0aCk7Cit3MyA9IGJ5dGVzcGVycGl4ZWwgKiBcCisJCW11bHRpcGxpZXIgKiBcCisJCShwZWFzeWNhcC0+d2lkdGgpOword3ogPSBtdWx0aXBsaWVyICogXAorCQkocGVhc3ljYXAtPmhlaWdodCkgKiBcCisJCW11bHRpcGxpZXIgKiBcCisJCShwZWFzeWNhcC0+d2lkdGgpOworCitrZXggPSBwZWFzeWNhcC0+ZmllbGRfcmVhZDsgIG1leCA9IDA7CitrYWQgPSBwZWFzeWNhcC0+ZnJhbWVfZmlsbDsgIG1hZCA9IDA7CisKK3BleCA9IHBlYXN5Y2FwLT5maWVsZF9idWZmZXJba2V4XVswXS5wZ287ICByZXggPSBQQUdFX1NJWkU7CitwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2thZF1bMF0ucGdvOyAgcmFkID0gUEFHRV9TSVpFOworaWYgKHBlYXN5Y2FwLT5maWVsZF9idWZmZXJba2V4XVswXS5rb3VudCkKKwlvZGQgPSB0cnVlOworZWxzZQorCW9kZCA9IGZhbHNlOworCitpZiAoKHRydWUgPT0gb2RkKSAmJiAoZmFsc2UgPT0gb2ZmZXJmaWVsZHMpICYmKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpKSB7CisJSk9UKDgsICIgIGluaXRpYWwgc2tpcHBpbmcgICAgJTRpICAgICAgICAgIGJ5dGVzIHAuJTRpXG4iLCBcCisJCQkJCQkJdzMvbXVsdGlwbGllciwgbWFkKTsKKwlwYWQgKz0gKHczIC8gbXVsdGlwbGllcik7ICByYWQgLT0gKHczIC8gbXVsdGlwbGllcik7Cit9Citpc3V5ID0gdHJ1ZTsKK21hc2sgPSAwOyAgcnVtcCA9IDA7ICBjYWNoZXMgPSAwOworCitjeiA9IDA7Cit3aGlsZSAoY3ogPCB3eikgeworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyoKKwkqKiAgUFJPQ0VTUyBPTkUgTElORSBPRiBGUkFNRSBBVCBGVUxMIFJFU09MVVRJT046CisJKiogIFJFQUQgICB3MiAgIEJZVEVTIEZST00gRklFTEQgQlVGRkVSLAorCSoqICBXUklURSAgdzMgICBCWVRFUyBUTyBGUkFNRSBCVUZGRVIKKwkqKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWlmIChmYWxzZSA9PSBkZWNpbWF0ZXBpeGVsKSB7CisJCW92ZXIgPSB3MjsKKwkJZG8geworCQkJbXVjaCA9IG92ZXI7ICBtb3JlID0gMDsgIG1hcmdpbiA9IDA7ICBtYXNrID0gMHgwMDsKKwkJCWlmIChyZXggPCBtdWNoKQorCQkJCW11Y2ggPSByZXg7CisJCQlydW1wID0gMDsKKworCQkJaWYgKG11Y2ggJSAyKSB7CisJCQkJU0FZKCJNSVNUQUtFOiBtdWNoIGlzIG9kZFxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisKKwkJCW1vcmUgPSAoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCQkJbXVjaCkgLyAyOworLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworCQkJaWYgKDEgPCBieXRlc3BlcnBpeGVsKSB7CisJCQkJaWYgKChyYWQgKiBcCisJCQkJCTIpIDwgKG11Y2ggKiBcCisJCQkJCQlieXRlc3BlcnBpeGVsKSkgeworCQkJCQkvKgorCQkJCQkqKiAgIElOSlVESUNJT1VTIEFMVEVSQVRJT04gT0YgVEhJUworCQkJCQkqKiAgIEJMT0NLIFdJTEwgQ0FVU0UgQlJFQUtBR0UuCisJCQkJCSoqICAgQkVXQVJFLgorCQkJCQkqKi8KKwkJCQkJcmFkMiA9IHJhZCArIGJ5dGVzcGVycGl4ZWwgLSAxOworCQkJCQltdWNoID0gKCgoKDIgKiBcCisJCQkJCQlyYWQyKS9ieXRlc3BlcnBpeGVsKS8yKSAqIDIpOworCQkJCQlydW1wID0gKChieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCW11Y2gpIC8gMikgLSByYWQ7CisJCQkJCW1vcmUgPSByYWQ7CisJCQkJCX0KKwkJCQltYXNrID0gKF9fdTgpcnVtcDsKKwkJCQltYXJnaW4gPSAwOworCQkJCWlmIChtdWNoID09IHJleCkgeworCQkJCQltYXNrIHw9IDB4MDQ7CisJCQkJCWlmICgobWV4ICsgMSkgPCBGSUVMRF9CVUZGRVJfU0laRS8gXAorCQkJCQkJCQlQQUdFX1NJWkUpIHsKKwkJCQkJCW1hcmdpbiA9ICooKF9fdTggKikocGVhc3ljYXAtPlwKKwkJCQkJCQlmaWVsZF9idWZmZXJcCisJCQkJCQkJW2tleF1bbWV4ICsgMV0ucGdvKSk7CisJCQkJCX0gZWxzZQorCQkJCQkJbWFzayB8PSAweDA4OworCQkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCX0gZWxzZSB7CisJCQkJU0FZKCJNSVNUQUtFOiAlaT1ieXRlc3BlcnBpeGVsXG4iLCBcCisJCQkJCQlieXRlc3BlcnBpeGVsKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCWlmIChydW1wKQorCQkJCWNhY2hlcysrOworCisJCQlyYyA9IHJlZGF1YihwZWFzeWNhcCwgcGFkLCBwZXgsIG11Y2gsIG1vcmUsIFwKKwkJCQkJCQltYXNrLCBtYXJnaW4sIGlzdXkpOworCQkJaWYgKDAgPiByYykgeworCQkJCVNBWSgiRVJST1I6IHJlZGF1YigpIGZhaWxlZFxuIik7CisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9CisJCQlpZiAobXVjaCAlIDQpIHsKKwkJCQlpZiAoaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQl9CisJCQlvdmVyIC09IG11Y2g7ICAgY3ogKz0gbXVjaDsKKwkJCXBleCAgKz0gbXVjaDsgIHJleCAtPSBtdWNoOworCQkJaWYgKCFyZXgpIHsKKwkJCQltZXgrKzsKKwkJCQlwZXggPSBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tleF1bbWV4XS5wZ287CisJCQkJcmV4ID0gUEFHRV9TSVpFOworCQkJfQorCQkJcGFkICArPSBtb3JlOworCQkJcmFkIC09IG1vcmU7CisJCQlpZiAoIXJhZCkgeworCQkJCW1hZCsrOworCQkJCXBhZCA9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba2FkXVttYWRdLnBnbzsKKwkJCQlyYWQgPSBQQUdFX1NJWkU7CisJCQkJaWYgKHJ1bXApIHsKKwkJCQkJcGFkICs9IHJ1bXA7CisJCQkJCXJhZCAtPSBydW1wOworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAob3Zlcik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNLSVAgIHczIEJZVEVTIElOIFRBUkdFVCBGUkFNRSBCVUZGRVIsCisgKiAgVU5MRVNTIElUIElTIFRIRSBMQVNUIExJTkUgT0YgQU4gT0REIEZSQU1FCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJaWYgKCgoZmFsc2UgPT0gb2RkKSB8fCAoY3ogIT0gd3opKSYmKGZhbHNlID09IG9mZmVyZmllbGRzKSkgeworCQkJb3ZlciA9IHczOworCQkJZG8geworCQkJCWlmICghcmFkKSB7CisJCQkJCW1hZCsrOworCQkJCQlwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyXAorCQkJCQkJW2thZF1bbWFkXS5wZ287CisJCQkJCXJhZCA9IFBBR0VfU0laRTsKKwkJCQl9CisJCQkJbW9yZSA9IG92ZXI7CisJCQkJaWYgKHJhZCA8IG1vcmUpCisJCQkJCW1vcmUgPSByYWQ7CisJCQkJb3ZlciAtPSBtb3JlOworCQkJCXBhZCAgKz0gbW9yZTsKKwkJCQlyYWQgIC09IG1vcmU7CisJCQl9IHdoaWxlIChvdmVyKTsKKwkJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBQUk9DRVNTIE9ORSBMSU5FIE9GIEZSQU1FIEFUIFJFRFVDRUQgUkVTT0xVVElPTjoKKyAqICBPTkxZIElGIGZhbHNlPT1vZGQsCisgKiAgUkVBRCAgIHcyICAgQllURVMgRlJPTSBGSUVMRCBCVUZGRVIsCisgKiAgV1JJVEUgIHczIC8gMiAgQllURVMgVE8gRlJBTUUgQlVGRkVSCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl9IGVsc2UgaWYgKGZhbHNlID09IG9kZCkgeworCQlvdmVyID0gdzI7CisJCWRvIHsKKwkJCW11Y2ggPSBvdmVyOyAgbW9yZSA9IDA7ICBtYXJnaW4gPSAwOyAgbWFzayA9IDB4MDA7CisJCQlpZiAocmV4IDwgbXVjaCkKKwkJCQltdWNoID0gcmV4OworCQkJcnVtcCA9IDA7CisKKwkJCWlmIChtdWNoICUgMikgeworCQkJCVNBWSgiTUlTVEFLRTogbXVjaCBpcyBvZGRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCisJCQltb3JlID0gKGJ5dGVzcGVycGl4ZWwgKiBcCisJCQkJCW11Y2gpIC8gNDsKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCWlmICgxIDwgYnl0ZXNwZXJwaXhlbCkgeworCQkJCWlmICgocmFkICogNCkgPCAobXVjaCAqIFwKKwkJCQkJCWJ5dGVzcGVycGl4ZWwpKSB7CisJCQkJCS8qCisJCQkJCSoqICAgSU5KVURJQ0lPVVMgQUxURVJBVElPTiBPRiBUSElTCisJCQkJCSoqICAgQkxPQ0sgV0lMTCBDQVVTRSBCUkVBS0FHRS4KKwkJCQkJKiogICBCRVdBUkUuCisJCQkJCSoqLworCQkJCQlyYWQyID0gcmFkICsgYnl0ZXNwZXJwaXhlbCAtIDE7CisJCQkJCW11Y2ggPSAoKCgoMiAqIHJhZDIpL2J5dGVzcGVycGl4ZWwpLzIpXAorCQkJCQkJCQkJKiA0KTsKKwkJCQkJcnVtcCA9ICgoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCQkJCQltdWNoKSAvIDQpIC0gcmFkOworCQkJCQltb3JlID0gcmFkOworCQkJCQl9CisJCQkJbWFzayA9IChfX3U4KXJ1bXA7CisJCQkJbWFyZ2luID0gMDsKKwkJCQlpZiAobXVjaCA9PSByZXgpIHsKKwkJCQkJbWFzayB8PSAweDA0OworCQkJCQlpZiAoKG1leCArIDEpIDwgRklFTERfQlVGRkVSX1NJWkUvIFwKKwkJCQkJCQkJUEFHRV9TSVpFKSB7CisJCQkJCQltYXJnaW4gPSAqKChfX3U4ICopKHBlYXN5Y2FwLT5cCisJCQkJCQkJZmllbGRfYnVmZmVyXAorCQkJCQkJCVtrZXhdW21leCArIDFdLnBnbykpOworCQkJCQkJfQorCQkJCQllbHNlCisJCQkJCQltYXNrIHw9IDB4MDg7CisJCQkJCX0KKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJCQl9IGVsc2UgeworCQkJCQlTQVkoIk1JU1RBS0U6ICVpPWJ5dGVzcGVycGl4ZWxcbiIsIFwKKwkJCQkJCWJ5dGVzcGVycGl4ZWwpOworCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl9CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisJCQlpZiAocnVtcCkKKwkJCQljYWNoZXMrKzsKKworCQkJcmMgPSByZWRhdWIocGVhc3ljYXAsIHBhZCwgcGV4LCBtdWNoLCBtb3JlLCBcCisJCQkJCQkJbWFzaywgbWFyZ2luLCBpc3V5KTsKKwkJCWlmICgwID4gcmMpIHsKKwkJCQlTQVkoIkVSUk9SOiByZWRhdWIoKSBmYWlsZWRcbiIpOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJb3ZlciAtPSBtdWNoOyAgIGN6ICs9IG11Y2g7CisJCQlwZXggICs9IG11Y2g7ICByZXggLT0gbXVjaDsKKwkJCWlmICghcmV4KSB7CisJCQkJbWV4Kys7CisJCQkJcGV4ID0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrZXhdW21leF0ucGdvOworCQkJCXJleCA9IFBBR0VfU0laRTsKKwkJCX0KKwkJCXBhZCAgKz0gbW9yZTsKKwkJCXJhZCAtPSBtb3JlOworCQkJaWYgKCFyYWQpIHsKKwkJCQltYWQrKzsKKwkJCQlwYWQgPSBwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2thZF1bbWFkXS5wZ287CisJCQkJcmFkID0gUEFHRV9TSVpFOworCQkJCWlmIChydW1wKSB7CisJCQkJCXBhZCArPSBydW1wOworCQkJCQlyYWQgLT0gcnVtcDsKKwkJCQl9CisJCQl9CisJCX0gd2hpbGUgKG92ZXIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBPVEhFUldJU0UgSlVTVAorICogIFJFQUQgICB3MiAgIEJZVEVTIEZST00gRklFTEQgQlVGRkVSIEFORCBESVNDQVJEIFRIRU0KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCX0gZWxzZSB7CisJCW92ZXIgPSB3MjsKKwkJZG8geworCQkJaWYgKCFyZXgpIHsKKwkJCQltZXgrKzsKKwkJCQlwZXggPSBwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tleF1bbWV4XS5wZ287CisJCQkJcmV4ID0gUEFHRV9TSVpFOworCQkJfQorCQkJbXVjaCA9IG92ZXI7CisJCQlpZiAocmV4IDwgbXVjaCkKKwkJCQltdWNoID0gcmV4OworCQkJb3ZlciAtPSBtdWNoOworCQkJY3ogKz0gbXVjaDsKKwkJCXBleCAgKz0gbXVjaDsKKwkJCXJleCAtPSBtdWNoOworCQl9IHdoaWxlIChvdmVyKTsKKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBTklUWSBDSEVDS1MKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworYzIgPSAobWV4ICsgMSkqUEFHRV9TSVpFIC0gcmV4OworaWYgKGN6ICE9IGMyKQorCVNBWSgiRVJST1I6IGRpc2NyZXBhbmN5ICVpIGluIGJ5dGVzIHJlYWRcbiIsIGMyIC0gY3opOworYzMgPSAobWFkICsgMSkqUEFHRV9TSVpFIC0gcmFkOworCitpZiAoZmFsc2UgPT0gZGVjaW1hdGVwaXhlbCkgeworCWlmIChieXRlc3BlcnBpeGVsICogXAorCQljeiAhPSBjMykgXAorCQlTQVkoIkVSUk9SOiBkaXNjcmVwYW5jeSAlaSBpbiBieXRlcyB3cml0dGVuXG4iLCBcCisJCQkJCQljMyAtIChieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCQkJY3opKTsKK30gZWxzZSB7CisJaWYgKGZhbHNlID09IG9kZCkgeworCQlpZiAoYnl0ZXNwZXJwaXhlbCAqIFwKKwkJCWN6ICE9ICg0ICogYzMpKQorCQkJU0FZKCJFUlJPUjogZGlzY3JlcGFuY3kgJWkgaW4gYnl0ZXMgd3JpdHRlblxuIiwgXAorCQkJCQkJKDIqYzMpLShieXRlc3BlcnBpeGVsICogXAorCQkJCQkJCQkJY3opKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgwICE9IGMzKQorCQkJCVNBWSgiRVJST1I6IGRpc2NyZXBhbmN5ICVpICIgXAorCQkJCQkJImluIGJ5dGVzIHdyaXR0ZW5cbiIsIGMzKTsKKwkJfQorfQoraWYgKHJ1bXApCisJU0FZKCJFUlJPUjogdW5kaXNjaGFyZ2VkIGNhY2hlIGF0IGVuZCBvZiBsaW5lIGluIGZyYW1lIGJ1ZmZlclxuIik7CisKK0pPVCg4LCAiPT09PT0gZmllbGQyZnJhbWUoKTogJWkgYnl0ZXMgLS0+ICVpIGJ5dGVzIChpbmNsIHNraXApXG4iLCBjMiwgYzMpOworSk9UKDgsICI9PT09PSBmaWVsZDJmcmFtZSgpOiAlaT1tYWQgICVpPXJhZFxuIiwgbWFkLCByYWQpOworCitpZiAodHJ1ZSA9PSBvZGQpCisJSk9UKDgsICIrKysrKyBmaWVsZDJmcmFtZSgpOiAgZnJhbWUgYnVmZmVyICVpIGlzIGZ1bGxcbiIsIGthZCk7CisKK2lmIChwZWFzeWNhcC0+ZmllbGRfcmVhZCA9PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkKKwlTQVkoIldBUk5JTkc6IG9uIGV4aXQsIGZpbGxpbmcgZmllbGQgYnVmZmVyICVpXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxDVUxBVEUgVklERU8gU1RSRUFNSU5HIFJBVEUKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKK2lmICh0aW1ldmFsMC50dl9zZWMpIHsKKwliZWxvdyA9ICgobG9uZyBsb25nIGludCkoMTAwMDAwMCkpICogXAorCQkoKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfc2VjICAtIHRpbWV2YWwwLnR2X3NlYykpICsgXAorCQkJIChsb25nIGxvbmcgaW50KSh0aW1ldmFsLnR2X3VzZWMgLSB0aW1ldmFsMC50dl91c2VjKTsKKwlhYm92ZSA9IChsb25nIGxvbmcgaW50KTEwMDAwMDA7CisKKwlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJYWJvdmUgPSBzZHIucXVvdGllbnQ7CisJcmVtYWluZGVyID0gKF9fdTMyKXNkci5yZW1haW5kZXI7CisKKwlKT1QoOCwgInZpZGVvIHN0cmVhbWluZyBhdCAlM2xsaS4lMDNpIGZpZWxkcyBwZXIgc2Vjb25kXG4iLCBhYm92ZSwgXAorCQkJCQkJCShyZW1haW5kZXIvMTAwMCkpOworfQordGltZXZhbDAgPSB0aW1ldmFsOworCitpZiAoY2FjaGVzKQorCUpPVCg4LCAiJWk9Y2FjaGVzXG4iLCBjYWNoZXMpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3Qgc2lnbmVkX2Rpdl9yZXN1bHQKK3NpZ25lZF9kaXYobG9uZyBsb25nIGludCBhYm92ZSwgbG9uZyBsb25nIGludCBiZWxvdykKK3sKK3N0cnVjdCBzaWduZWRfZGl2X3Jlc3VsdCBzZHI7CisKK2lmICgoKDAgPD0gYWJvdmUpICYmICgwIDw9IGJlbG93KSkgfHwgKCgwICA+IGFib3ZlKSAmJiAoMCAgPiBiZWxvdykpKSB7CisJc2RyLnJlbWFpbmRlciA9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSBkb19kaXYoYWJvdmUsIGJlbG93KTsKKwlzZHIucXVvdGllbnQgID0gKGxvbmcgbG9uZyBpbnQpIGFib3ZlOworfSBlbHNlIHsKKwlpZiAoMCA+IGFib3ZlKQorCQlhYm92ZSA9IC1hYm92ZTsKKwlpZiAoMCA+IGJlbG93KQorCQliZWxvdyA9IC1iZWxvdzsKKwlzZHIucmVtYWluZGVyID0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIGRvX2RpdihhYm92ZSwgYmVsb3cpOworCXNkci5xdW90aWVudCAgPSAtKChsb25nIGxvbmcgaW50KSBhYm92ZSk7Cit9CityZXR1cm4gc2RyOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBERUNJTUFUSU9OIEFORCBDT0xPVVJTUEFDRSBDT05WRVJTSU9OLgorICoKKyAqICBUSElTIFJPVVRJTkUgUkVRVUlSRVMgVEhBVCBBTEwgVEhFIERBVEEgVE8gQkUgUkVBRCBSRVNJREVTIE9OIE9ORSBQQUdFCisgKiAgQU5EIFRIQVQgQUxMIFRIRSBEQVRBIFRPIEJFIFdSSVRURU4gUkVTSURFUyBPTiBPTkUgKERJRkZFUkVOVCkgUEFHRS4KKyAqICBUSEUgQ0FMTElORyBST1VUSU5FIE1VU1QgRU5TVVJFIFRIQVQgVEhJUyBSRVFVSVJFTUVOVCBJUyBNRVQsIEFORCBNVVNUCisgKiAgQUxTTyBFTlNVUkUgVEhBVCBtdWNoIElTIEVWRU4uCisgKgorICogIG11Y2ggQllURVMgQVJFIFJFQUQsIEFUIExFQVNUIChieXRlc3BlcnBpeGVsICogbXVjaCkvMiBCWVRFUyBBUkUgV1JJVFRFTgorICogIElGIFRIRVJFIElTIE5PIERFQ0lNQVRJT04sIEhBTEYgVEhJUyBBTU9VTlQgSUYgVEhFUkUgSVMgREVDSU1BVElPTi4KKyAqCisgKiAgbWFzayBJUyBaRVJPIFdIRU4gTk8gU1BFQ0lBTCBCRUhBVklPVVIgUkVRVUlSRUQuIE9USEVSV0lTRSBJVCBJUyBTRVQgVEhVUzoKKyAqICAgICAweDAzICYgbWFzayA9ICBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiB0byBjYWNoZSBpbnN0ZWFkIG9mIHRvCisgKiAgICAgICAgICAgICAgICAgICAgZnJhbWUgYnVmZmVyCisgKiAgICAgMHgwNCAmIG1hc2sgPT4gdXNlIGFyZ3VtZW50IG1hcmdpbiB0byBzZXQgdGhlIGNocm9taW5hbmNlIGZvciBsYXN0IHBpeGVsCisgKiAgICAgMHgwOCAmIG1hc2sgPT4gZG8gbm90IHNldCB0aGUgY2hyb21pbmFuY2UgZm9yIGxhc3QgcGl4ZWwKKyAqCisgKiAgWVVWIHRvIFJHQiBDT05WRVJTSU9OIElTIChPUiBTSE9VTEQgQkUpIElUVS1SIEJUIDYwMS4KKyAqCisgKiAgVEhFUkUgSVMgQSBMT1QgT0YgQ09ERSBSRVBFVElUSU9OIElOIFRISVMgUk9VVElORSBJTiBPUkRFUiBUTyBBVk9JRAorICogIElORUZGSUNJRU5UIFNXSVRDSElORyBJTlNJREUgSU5ORVIgTE9PUFMuICBSRUFSUkFOR0lORyBUSEUgTE9HSUMgVE8KKyAqICBSRURVQ0UgQ09ERSBMRU5HVEggV0lMTCBHRU5FUkFMTFkgSU1QQUlSIFJVTlRJTUUgUEVSRk9STUFOQ0UuICBCRVdBUkUuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorcmVkYXViKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgdm9pZCAqcGFkLCB2b2lkICpwZXgsIGludCBtdWNoLCBpbnQgbW9yZSwgXAorCQkJCQlfX3U4IG1hc2ssIF9fdTggbWFyZ2luLCBib29sIGlzdXkpCit7CitzdGF0aWMgX19zMzIgYXlbMjU2XSwgYnVbMjU2XSwgcnZbMjU2XSwgZ3VbMjU2XSwgZ3ZbMjU2XTsKK3N0YXRpYyBfX3U4IGNhY2hlWzhdLCAqcGNhY2hlOworX191OCByLCBnLCBiLCB5LCB1LCB2LCBjLCAqcDIsICpwMywgKnB6LCAqcHI7CitpbnQgIGJ5dGVzcGVycGl4ZWw7Citib29sIGJ5dGVzd2Fwb3JkZXIsIGRlY2ltYXRlcGl4ZWwsIGxhc3Q7CitpbnQgaiwgcnVtcDsKK19fczMyIHMzMjsKKworaWYgKG11Y2ggJSAyKSB7CisJU0FZKCJNSVNUQUtFOiBtdWNoIGlzIG9kZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitieXRlc3BlcnBpeGVsID0gcGVhc3ljYXAtPmJ5dGVzcGVycGl4ZWw7CitieXRlc3dhcG9yZGVyID0gcGVhc3ljYXAtPmJ5dGVzd2Fwb3JkZXI7CitkZWNpbWF0ZXBpeGVsID0gcGVhc3ljYXAtPmRlY2ltYXRlcGl4ZWw7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICghYnVbMjU1XSkgeworCWZvciAoaiA9IDA7IGogPCAxMTI7IGorKykgeworCQlzMzIgPSAoMHhGRjAwICYgKDQ1MyAqIGopKSA+PiA4OworCQlidVtqICsgMTI4XSA9ICBzMzI7IGJ1WzEyNyAtIGpdID0gLXMzMjsKKwkJczMyID0gKDB4RkYwMCAmICgzNTkgKiBqKSkgPj4gODsKKwkJcnZbaiArIDEyOF0gPSAgczMyOyBydlsxMjcgLSBqXSA9IC1zMzI7CisJCXMzMiA9ICgweEZGMDAgJiAoODggKiBqKSkgPj4gODsKKwkJZ3VbaiArIDEyOF0gPSAgczMyOyBndVsxMjcgLSBqXSA9IC1zMzI7CisJCXMzMiA9ICgweEZGMDAgJiAoMTgzICogaikpID4+IDg7CisJCWd2W2ogKyAxMjhdID0gIHMzMjsgZ3ZbMTI3IC0gal0gPSAtczMyOworCX0KKwlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworCQlidVtqXSA9IGJ1WzE2XTsgcnZbal0gPSBydlsxNl07CisJCWd1W2pdID0gZ3VbMTZdOyBndltqXSA9IGd2WzE2XTsKKwl9CisJZm9yIChqID0gMjQwOyBqIDwgMjU2OyBqKyspIHsKKwkJYnVbal0gPSBidVsyMzldOyBydltqXSA9IHJ2WzIzOV07CisJCWd1W2pdID0gZ3VbMjM5XTsgZ3Zbal0gPSBndlsyMzldOworCX0KKwlmb3IgKGogPSAgMTY7IGogPCAyMzY7IGorKykKKwkJYXlbal0gPSBqOworCWZvciAoaiA9ICAgMDsgaiA8ICAxNjsgaisrKQorCQlheVtqXSA9IGF5WzE2XTsKKwlmb3IgKGogPSAyMzY7IGogPCAyNTY7IGorKykKKwkJYXlbal0gPSBheVsyMzVdOworCUpPVCg4LCAibG9va3VwIHRhYmxlcyBhcmUgcHJlcGFyZWRcbiIpOworfQoraWYgKChfX3U4ICopTlVMTCA9PSBwY2FjaGUpCisJcGNhY2hlID0gJmNhY2hlWzBdOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUUkFOU0ZFUiBDT05URU5UUyBPRiBDQUNIRSBUTyBUSEUgRlJBTUUgQlVGRkVSCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICghcGNhY2hlKSB7CisJU0FZKCJNSVNUQUtFOiBwY2FjaGUgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK2lmIChwY2FjaGUgIT0gJmNhY2hlWzBdKQorCUpPVCgxNiwgImNhY2hlIGhhcyAlaSBieXRlc1xuIiwgKGludCkocGNhY2hlIC0gJmNhY2hlWzBdKSk7CitwMiA9ICZjYWNoZVswXTsKK3AzID0gKF9fdTggKilwYWQgLSAoaW50KShwY2FjaGUgLSAmY2FjaGVbMF0pOword2hpbGUgKHAyIDwgcGNhY2hlKSB7CisJKnAzKysgPSAqcDI7ICBwMisrOworfQorcGNhY2hlID0gJmNhY2hlWzBdOworaWYgKHAzICE9IHBhZCkgeworCVNBWSgiTUlTVEFLRTogcG9pbnRlciBtaXNhbGlnbm1lbnRcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworcnVtcCA9IChpbnQpKDB4MDMgJiBtYXNrKTsKK3UgPSAwOyB2ID0gMDsKK3AyID0gKF9fdTggKilwZXg7ICBweiA9IHAyICsgbXVjaDsgIHByID0gcDMgKyBtb3JlOyAgbGFzdCA9IGZhbHNlOworcDIrKzsKKworaWYgKHRydWUgPT0gaXN1eSkKKwl1ID0gKihwMiAtIDEpOworZWxzZQorCXYgPSAqKHAyIC0gMSk7CisKK2lmIChydW1wKQorCUpPVCgxNiwgIiU0aT1tdWNoICAlNGk9bW9yZSAgJWk9cnVtcFxuIiwgbXVjaCwgbW9yZSwgcnVtcCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N3aXRjaCAoYnl0ZXNwZXJwaXhlbCkgeworY2FzZSAyOiB7CisJaWYgKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpIHsKKwkJbWVtY3B5KHBhZCwgcGV4LCAoc2l6ZV90KW11Y2gpOworCQlpZiAoZmFsc2UgPT0gYnl0ZXN3YXBvcmRlcikKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgVVlWWQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXJldHVybiAwOworCQllbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgWVVZVgorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXAzID0gKF9fdTggKilwYWQ7ICBweiA9IHAzICsgbXVjaDsKKwkJCXdoaWxlICAocHogPiBwMykgeworCQkJCWMgPSAqcDM7CisJCQkJKnAzID0gKihwMyArIDEpOworCQkJCSoocDMgKyAxKSA9IGM7CisJCQkJcDMgKz0gMjsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgVVlWWSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlwMiA9IChfX3U4ICopcGV4OyAgcDMgPSAoX191OCAqKXBhZDsgIHB6ID0gcDIgKyBtdWNoOworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQkqcDMgPSAqcDI7CisJCQkJKihwMyArIDEpID0gKihwMiArIDEpOworCQkJCSoocDMgKyAyKSA9ICoocDIgKyAyKTsKKwkJCQkqKHAzICsgMykgPSAqKHAyICsgMyk7CisJCQkJcDMgKz0gNDsgIHAyICs9IDg7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgWVVZViBERUNJTUFURUQKKwkJCSoqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJcDIgPSAoX191OCAqKXBleDsgIHAzID0gKF9fdTggKilwYWQ7ICBweiA9IHAyICsgbXVjaDsKKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJKnAzID0gKihwMiArIDEpOworCQkJCSoocDMgKyAxKSA9ICpwMjsKKwkJCQkqKHAzICsgMikgPSAqKHAyICsgMyk7CisJCQkJKihwMyArIDMpID0gKihwMiArIDIpOworCQkJCXAzICs9IDQ7ICBwMiArPSA4OworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJYnJlYWs7CisJfQorY2FzZSAzOgorCXsKKwlpZiAoZmFsc2UgPT0gZGVjaW1hdGVwaXhlbCkgeworCQlpZiAoZmFsc2UgPT0gYnl0ZXN3YXBvcmRlcikgeworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJLyoKKwkJCSoqICBSR0IKKwkJCSoqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQlpZiAocHIgPD0gKHAzICsgYnl0ZXNwZXJwaXhlbCkpCisJCQkJCWxhc3QgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJbGFzdCA9IGZhbHNlOworCQkJCXkgPSAqcDI7CisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmICgweDBDICYgbWFzaykpIHsKKwkJCQkJaWYgKDB4MDQgJiBtYXNrKSB7CisJCQkJCQlpZiAodHJ1ZSA9PSBpc3V5KQorCQkJCQkJCXYgPSBtYXJnaW47CisJCQkJCQllbHNlCisJCQkJCQkJdSA9IG1hcmdpbjsKKwkJCQkJfSBlbHNlCisJCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQkJOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQl2ID0gKihwMiArIDEpOworCQkJCQllbHNlCisJCQkJCQl1ID0gKihwMiArIDEpOworCQkJCX0KKworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBydlsoaW50KXZdOworCQkJCXIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJYiA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkwIDogKF9fdTgpczMyKTsKKworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCXBjYWNoZSA9ICZjYWNoZVswXTsKKwkJCQkJc3dpdGNoIChieXRlc3BlcnBpeGVsIC0gcnVtcCkgeworCQkJCQljYXNlIDE6IHsKKwkJCQkJCSpwMyA9IHI7CisJCQkJCQkqcGNhY2hlKysgPSBnOworCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZGVmYXVsdDogeworCQkJCQkJU0FZKCJNSVNUQUtFOiAlaT1ydW1wXG4iLCBcCisJCQkJCQkJYnl0ZXNwZXJwaXhlbCAtIHJ1bXApOworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCX0KKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCSpwMyA9IHI7CisJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJfQorCQkJCXAyICs9IDI7CisJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJLyoKKwkJCSoqICBCR1IKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9CisJCQkJZWxzZQorCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAyOiB7CisJCQkJCQkqcDMgPSBiOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSpwY2FjaGUrKyA9IHI7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlTQVkoIk1JU1RBS0U6ICVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJKnAzID0gYjsKKwkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJKihwMyArIDIpID0gcjsKKwkJCQkJfQorCQkJCXAyICs9IDI7CisJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCQl9CisJCQl9CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlmIChmYWxzZSA9PSBieXRlc3dhcG9yZGVyKSB7CisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkvKgorCQkJKiogIFJHQiBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSByOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMjogeworCQkJCQkJCSpwMyA9IHI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZGVmYXVsdDogeworCQkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkJIiVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSByOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCX0KKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCQlwMyArPSBieXRlc3BlcnBpeGVsOworCQkJCX0gZWxzZSB7CisJCQkJCWlzdXkgPSB0cnVlOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJfQorCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkvKgorCQkJICogIEJHUiBERUNJTUFURUQKKwkJCSAqLworCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKHB6ID4gcDIpIHsKKwkJCQlpZiAocHIgPD0gKHAzICsgYnl0ZXNwZXJwaXhlbCkpCisJCQkJCWxhc3QgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJbGFzdCA9IGZhbHNlOworCQkJCXkgPSAqcDI7CisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmICgweDBDICYgbWFzaykpIHsKKwkJCQkJaWYgKDB4MDQgJiBtYXNrKSB7CisJCQkJCQlpZiAodHJ1ZSA9PSBpc3V5KQorCQkJCQkJCXYgPSBtYXJnaW47CisJCQkJCQllbHNlCisJCQkJCQkJdSA9IG1hcmdpbjsKKwkJCQkJfSBlbHNlCisJCQkJCQlpZiAoMHgwOCAmIG1hc2spCisJCQkJCQkJOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQl2ID0gKihwMiArIDEpOworCQkJCQllbHNlCisJCQkJCQl1ID0gKihwMiArIDEpOworCQkJCX0KKworCQkJCWlmICh0cnVlID09IGlzdXkpIHsKKworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gcjsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMjogeworCQkJCQkJCSpwMyA9IGI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZGVmYXVsdDogeworCQkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkJIiVpPXJ1bXBcbiIsIFwKKwkJCQkJCQlieXRlc3BlcnBpeGVsIC0gcnVtcCk7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSBiOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IHI7CisJCQkJCQl9CisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQkJcDMgKz0gYnl0ZXNwZXJwaXhlbDsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJaXN1eSA9IHRydWU7CisJCQkJcDIgKz0gMjsKKwkJCQl9CisJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCWJyZWFrOworCX0KK2Nhc2UgNDoKKwl7CisJaWYgKGZhbHNlID09IGRlY2ltYXRlcGl4ZWwpIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgUkdCQQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJaWYgKHByIDw9IChwMyArIGJ5dGVzcGVycGl4ZWwpKQorCQkJCQlsYXN0ID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWxhc3QgPSBmYWxzZTsKKwkJCQl5ID0gKnAyOworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiAoMHgwQyAmIG1hc2spKSB7CisJCQkJCWlmICgweDA0ICYgbWFzaykgeworCQkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCQl2ID0gbWFyZ2luOworCQkJCQkJZWxzZQorCQkJCQkJCXUgPSBtYXJnaW47CisJCQkJCX0gZWxzZQorCQkJCQkJIGlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMzogeworCQkJCQkJKnAzID0gcjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqKHAzICsgMikgPSBiOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkqcDMgPSByOworCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkqKHAzICsgMikgPSBiOworCQkJCQkqKHAzICsgMykgPSAwOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgQkdSQQorCQkJKi8KKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCXdoaWxlIChweiA+IHAyKSB7CisJCQkJaWYgKHByIDw9IChwMyArIGJ5dGVzcGVycGl4ZWwpKQorCQkJCQlsYXN0ID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWxhc3QgPSBmYWxzZTsKKwkJCQl5ID0gKnAyOworCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiAoMHgwQyAmIG1hc2spKSB7CisJCQkJCWlmICgweDA0ICYgbWFzaykgeworCQkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCQl2ID0gbWFyZ2luOworCQkJCQkJZWxzZQorCQkJCQkJCXUgPSBtYXJnaW47CisJCQkJCX0gZWxzZQorCQkJCQkJIGlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJczMyID0gYXlbKGludCl5XSArIHJ2WyhpbnQpdl07CisJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBndlsoaW50KXZdOworCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBidVsoaW50KXVdOworCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJcGNhY2hlID0gJmNhY2hlWzBdOworCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCWNhc2UgMTogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMjogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqcGNhY2hlKysgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgMzogeworCQkJCQkJKnAzID0gYjsKKwkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkqcDMgPSBiOworCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkqKHAzICsgMykgPSAwOworCQkJCX0KKwkJCQlwMiArPSAyOworCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCWlzdXkgPSBmYWxzZTsKKwkJCQllbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKGZhbHNlID09IGJ5dGVzd2Fwb3JkZXIpIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgUkdCQSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gKyBydlsoaW50KXZdOworCQkJCQlyID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSAtIGd1WyhpbnQpdV0gLSBcCisJCQkJCQkJCWd2WyhpbnQpdl07CisJCQkJCWcgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCQkJCQlzMzIgPSBheVsoaW50KXldICsgYnVbKGludCl1XTsKKwkJCQkJYiA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisKKwkJCQkJaWYgKCh0cnVlID09IGxhc3QpICYmIHJ1bXApIHsKKwkJCQkJCXBjYWNoZSA9ICZjYWNoZVswXTsKKwkJCQkJCXN3aXRjaCAoYnl0ZXNwZXJwaXhlbCAtIHJ1bXApIHsKKwkJCQkJCWNhc2UgMTogeworCQkJCQkJCSpwMyA9IHI7CisJCQkJCQkJKnBjYWNoZSsrID0gZzsKKwkJCQkJCQkqcGNhY2hlKysgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IDA7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQljYXNlIDI6IHsKKwkJCQkJCQkqcDMgPSByOworCQkJCQkJCSoocDMgKyAxKSA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gYjsKKwkJCQkJCQkqcGNhY2hlKysgPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJY2FzZSAzOiB7CisJCQkJCQkJKnAzID0gcjsKKwkJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWRlZmF1bHQ6IHsKKwkJCQkJCQlTQVkoIk1JU1RBS0U6ICIgXAorCQkJCQkJCSIlaT1ydW1wXG4iLCBcCisJCQkJCQkJYnl0ZXNwZXJwaXhlbCAtIFwKKwkJCQkJCQlydW1wKTsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQkqcDMgPSByOworCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCSoocDMgKyAyKSA9IGI7CisJCQkJCQkqKHAzICsgMykgPSAwOworCQkJCQkJfQorCQkJCQlpc3V5ID0gZmFsc2U7CisJCQkJCXAzICs9IGJ5dGVzcGVycGl4ZWw7CisJCQkJfSBlbHNlCisJCQkJCWlzdXkgPSB0cnVlOworCQkJCXAyICs9IDI7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCS8qCisJCQkqKiAgQkdSQSBERUNJTUFURUQKKwkJCSovCisJCQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQl3aGlsZSAocHogPiBwMikgeworCQkJCWlmIChwciA8PSAocDMgKyBieXRlc3BlcnBpeGVsKSkKKwkJCQkJbGFzdCA9IHRydWU7CisJCQkJZWxzZQorCQkJCQlsYXN0ID0gZmFsc2U7CisJCQkJeSA9ICpwMjsKKwkJCQlpZiAoKHRydWUgPT0gbGFzdCkgJiYgKDB4MEMgJiBtYXNrKSkgeworCQkJCQlpZiAoMHgwNCAmIG1hc2spIHsKKwkJCQkJCWlmICh0cnVlID09IGlzdXkpCisJCQkJCQkJdiA9IG1hcmdpbjsKKwkJCQkJCWVsc2UKKwkJCQkJCQl1ID0gbWFyZ2luOworCQkJCQl9IGVsc2UKKwkJCQkJCWlmICgweDA4ICYgbWFzaykKKwkJCQkJCQk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKHRydWUgPT0gaXN1eSkKKwkJCQkJCXYgPSAqKHAyICsgMSk7CisJCQkJCWVsc2UKKwkJCQkJCXUgPSAqKHAyICsgMSk7CisJCQkJfQorCisJCQkJaWYgKHRydWUgPT0gaXN1eSkgeworCQkJCQlzMzIgPSBheVsoaW50KXldICsgcnZbKGludCl2XTsKKwkJCQkJciA9ICgyNTUgPCBzMzIpID8gMjU1IDogKCgwID4gczMyKSA/IFwKKwkJCQkJCQkJMCA6IChfX3U4KXMzMik7CisJCQkJCXMzMiA9IGF5WyhpbnQpeV0gLSBndVsoaW50KXVdIC0gXAorCQkJCQkJCQlndlsoaW50KXZdOworCQkJCQlnID0gKDI1NSA8IHMzMikgPyAyNTUgOiAoKDAgPiBzMzIpID8gXAorCQkJCQkJCQkwIDogKF9fdTgpczMyKTsKKwkJCQkJczMyID0gYXlbKGludCl5XSArIGJ1WyhpbnQpdV07CisJCQkJCWIgPSAoMjU1IDwgczMyKSA/IDI1NSA6ICgoMCA+IHMzMikgPyBcCisJCQkJCQkJCTAgOiAoX191OClzMzIpOworCisJCQkJCWlmICgodHJ1ZSA9PSBsYXN0KSAmJiBydW1wKSB7CisJCQkJCQlwY2FjaGUgPSAmY2FjaGVbMF07CisJCQkJCQlzd2l0Y2ggKGJ5dGVzcGVycGl4ZWwgLSBydW1wKSB7CisJCQkJCQljYXNlIDE6IHsKKwkJCQkJCQkqcDMgPSBiOworCQkJCQkJCSpwY2FjaGUrKyA9IGc7CisJCQkJCQkJKnBjYWNoZSsrID0gcjsKKwkJCQkJCQkqcGNhY2hlKysgPSAwOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJY2FzZSAyOiB7CisJCQkJCQkJKnAzID0gYjsKKwkJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJCSpwY2FjaGUrKyA9IHI7CisJCQkJCQkJKnBjYWNoZSsrID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCWNhc2UgMzogeworCQkJCQkJCSpwMyA9IGI7CisJCQkJCQkJKihwMyArIDEpID0gZzsKKwkJCQkJCQkqKHAzICsgMikgPSByOworCQkJCQkJCSpwY2FjaGUrKyA9IDA7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlkZWZhdWx0OiB7CisJCQkJCQkJU0FZKCJNSVNUQUtFOiAiIFwKKwkJCQkJCQkiJWk9cnVtcFxuIiwgXAorCQkJCQkJCWJ5dGVzcGVycGl4ZWwgLSBydW1wKTsKKwkJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCSpwMyA9IGI7CisJCQkJCQkqKHAzICsgMSkgPSBnOworCQkJCQkJKihwMyArIDIpID0gcjsKKwkJCQkJCSoocDMgKyAzKSA9IDA7CisJCQkJCX0KKwkJCQkJaXN1eSA9IGZhbHNlOworCQkJCQlwMyArPSBieXRlc3BlcnBpeGVsOworCQkJCX0gZWxzZQorCQkJCQlpc3V5ID0gdHJ1ZTsKKwkJCQkJcDIgKz0gMjsKKwkJCQl9CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwlicmVhazsKKwl9CitkZWZhdWx0OiB7CisJU0FZKCJNSVNUQUtFOiAlaT1ieXRlc3BlcnBpeGVsXG4iLCBieXRlc3BlcnBpeGVsKTsKKwlyZXR1cm4gLUVGQVVMVDsKKwl9Cit9CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK2RlYnJpZWYoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwKQoreworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJY2hlY2tfc3RrKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJY2hlY2tfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CisJc2F5cmVhZG9ubHkocGVhc3ljYXApOworCVNBWSgiJWk9cGVhc3ljYXAtPmZpZWxkX2ZpbGxcbiIsIHBlYXN5Y2FwLT5maWVsZF9maWxsKTsKKwlTQVkoIiVpPXBlYXN5Y2FwLT5maWVsZF9yZWFkXG4iLCBwZWFzeWNhcC0+ZmllbGRfcmVhZCk7CisJU0FZKCIlaT1wZWFzeWNhcC0+ZnJhbWVfZmlsbFxuIiwgcGVhc3ljYXAtPmZyYW1lX2ZpbGwpOworCVNBWSgiJWk9cGVhc3ljYXAtPmZyYW1lX3JlYWRcbiIsIHBlYXN5Y2FwLT5mcmFtZV9yZWFkKTsKK30KK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK3NheXJlYWRvbmx5KHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCkKK3sKK3N0YXRpYyBpbnQgZG9uZTsKK2ludCBnb3QwMCwgZ290MUYsIGdvdDYwLCBnb3Q2MSwgZ290NjI7CisKK2lmICgoIWRvbmUpICYmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkpIHsKKwlkb25lID0gMTsKKwlnb3QwMCA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHgwMCk7CisJZ290MUYgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIDB4MUYpOworCWdvdDYwID0gcmVhZF9zYWEocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCAweDYwKTsKKwlnb3Q2MSA9IHJlYWRfc2FhKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgMHg2MSk7CisJZ290NjIgPSByZWFkX3NhYShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIDB4NjIpOworCVNBWSgiMHglMDJYPXJlZzB4MDAgIDB4JTAyWD1yZWcweDFGXG4iLCBnb3QwMCwgZ290MUYpOworCVNBWSgiMHglMDJYPXJlZzB4NjAgIDB4JTAyWD1yZWcweDYxICAweCUwMlg9cmVnMHg2MlxuIiwgXAorCQkJCQkJCWdvdDYwLCBnb3Q2MSwgZ290NjIpOworfQorcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTRUUgQ09SQkVUIEVUIEFMLiAiTElOVVggREVWSUNFIERSSVZFUlMiLCAzcmQgRURJVElPTiwgUEFHRVMgNDMwLTQzNAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpbnQgZWFzeWNhcF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnB2bWEpCit7CisKK0pPVCg4LCAiXG4iKTsKKworcHZtYS0+dm1fb3BzID0gJmVhc3ljYXBfdm1fb3BzOworcHZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CitpZiAoTlVMTCAhPSBmaWxlKQorCXB2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKK2Vhc3ljYXBfdm1hX29wZW4ocHZtYSk7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQKK2Vhc3ljYXBfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitwZWFzeWNhcCA9IHB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKK2lmIChOVUxMICE9IHBlYXN5Y2FwKQorCXBlYXN5Y2FwLT52bWFfbWFueSsrOworCitKT1QoOCwgIiVpPXBlYXN5Y2FwLT52bWFfbWFueVxuIiwgcGVhc3ljYXAtPnZtYV9tYW55KTsKKworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZAorZWFzeWNhcF92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitwZWFzeWNhcCA9IHB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKK2lmIChOVUxMICE9IHBlYXN5Y2FwKSB7CisJcGVhc3ljYXAtPnZtYV9tYW55LS07CisJSk9UKDgsICIlaT1wZWFzeWNhcC0+dm1hX21hbnlcbiIsIHBlYXN5Y2FwLT52bWFfbWFueSk7Cit9CityZXR1cm47Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQKK2Vhc3ljYXBfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSwgc3RydWN0IHZtX2ZhdWx0ICpwdm1mKQoreworaW50IGssIG0sIHJldGNvZGU7Cit2b2lkICpwYnVmOworc3RydWN0IHBhZ2UgKnBhZ2U7CitzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXA7CisKK3JldGNvZGUgPSBWTV9GQVVMVF9OT1BBR0U7CitwYnVmID0gKHZvaWQgKilOVUxMOworcGFnZSA9IChzdHJ1Y3QgcGFnZSAqKU5VTEw7CisKK2lmIChOVUxMID09IHB2bWEpIHsKKwlTQVkoInB2bWEgaXMgTlVMTFxuIik7CisJcmV0dXJuIHJldGNvZGU7Cit9CitpZiAoTlVMTCA9PSBwdm1mKSB7CisJU0FZKCJwdm1mIGlzIE5VTExcbiIpOworCXJldHVybiByZXRjb2RlOworfQorCitrID0gKHB2bWYtPnBnb2ZmKSAvIChGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkUpOworbSA9IChwdm1mLT5wZ29mZikgJSAoRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworaWYgKCFtKQorCUpPVCg0LCAiJTRpPWssICU0aT1tXG4iLCBrLCBtKTsKK2Vsc2UKKwlKT1QoMTYsICIlNGk9aywgJTRpPW1cbiIsIGssIG0pOworCitpZiAoKDAgPiBrKSB8fCAoRlJBTUVfQlVGRkVSX01BTlkgPD0gaykpIHsKKwlTQVkoIkVSUk9SOiBidWZmZXIgaW5kZXggJWkgb3V0IG9mIHJhbmdlXG4iLCBrKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK2lmICgoMCA+IG0pIHx8IChGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkUgPD0gbSkpIHsKKwlTQVkoIkVSUk9SOiBwYWdlIG51bWJlciAgJWkgb3V0IG9mIHJhbmdlXG4iLCBtKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK3BlYXN5Y2FwID0gcHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gcmV0Y29kZTsKK30KK211dGV4X2xvY2soJihwZWFzeWNhcC0+bXV0ZXhfbW1hcF92aWRlb1swXSkpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworcGJ1ZiA9IHBlYXN5Y2FwLT5mcmFtZV9idWZmZXJba11bbV0ucGdvOworaWYgKE5VTEwgPT0gcGJ1ZikgeworCVNBWSgiRVJST1I6ICBwYnVmIGlzIE5VTExcbiIpOworCWdvdG8gZmluaXNoOworfQorcGFnZSA9IHZpcnRfdG9fcGFnZShwYnVmKTsKK2lmIChOVUxMID09IHBhZ2UpIHsKKwlTQVkoIkVSUk9SOiAgcGFnZSBpcyBOVUxMXG4iKTsKKwlnb3RvIGZpbmlzaDsKK30KK2dldF9wYWdlKHBhZ2UpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZmluaXNoOgorbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKTsKK2lmIChOVUxMID09IHBhZ2UpIHsKKwlTQVkoIkVSUk9SOiAgcGFnZSBpcyBOVUxMIGFmdGVyIGdldF9wYWdlKHBhZ2UpXG4iKTsKK30gZWxzZSB7CisJcHZtZi0+cGFnZSA9IHBhZ2U7CisJcmV0Y29kZSA9IFZNX0ZBVUxUX01JTk9SOworfQorcmV0dXJuIHJldGNvZGU7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIE9OIENPTVBMRVRJT04gT0YgQSBWSURFTyBVUkIgSVRTIERBVEEgSVMgQ09QSUVEIFRPIFRIRSBGSUVMRCBCVUZGRVJTCisgKiAgUFJPVklERUQgcGVhc3ljYXAtPnZpZGVvX2lkbGUgSVMgWkVSMC4gIFJFR0FSRExFU1MgT0YgVEhJUyBCRUlORyBUUlVFLAorICogIElUIElTIFJFU1VCTUlUVEVEIFBST1ZJREVEIHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyBJUyBOT1QgWkVSTy4KKyAqCisgKiAgVEhJUyBGVU5DVElPTiBJUyBBTiBJTlRFUlJVUFQgU0VSVklDRSBST1VUSU5FIEFORCBNVVNUIE5PVCBTTEVFUC4KKyAqCisgKiAgSU5GT1JNQVRJT04gQUJPVVQgVEhFIFZBTElESVRZIE9GIFRIRSBDT05URU5UUyBPRiBUSEUgRklFTEQgQlVGRkVSIEFSRQorICogIFNUT1JFRCBJTiBUSEUgVFdPLUJZVEUgU1RBVFVTIFBBUkFNRVRFUgorICogICAgICAgIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdWzBdLmtvdW50CisgKiAgTk9USUNFIFRIQVQgVEhFIElORk9STUFUSU9OIElTIFNUT1JFRCBPTkxZIFdJVEggUEFHRSAwIE9GIFRIRSBGSUVMRCBCVUZGRVIuCisgKgorICogIFRIRSBMT1dFUiBCWVRFIENPTlRBSU5TIFRIRSBGSUVMRCBQQVJJVFkgQllURSBGVVJOSVNIRUQgQlkgVEhFIFNBQTcxMTNICisgKiAgQ0hJUC4KKyAqCisgKiAgVEhFIFVQUEVSIEJZVEUgSVMgWkVSTyBJRiBOTyBQUk9CTEVNUywgT1RIRVJXSVNFOgorICogICAgICAwICE9IChrb3VudCAmIDB4ODAwMCkgICA9PiBBVCBMRUFTVCBPTkUgVVJCIENPTVBMRVRFRCBXSVRIIEVSUk9SUworICogICAgICAwICE9IChrb3VudCAmIDB4NDAwMCkgICA9PiBCVUZGRVIgSEFTIFRPTyBNVUNIIERBVEEKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDIwMDApICAgPT4gQlVGRkVSIEhBUyBOT1QgRU5PVUdIIERBVEEKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDA0MDApICAgPT4gRklFTEQgV0FTIFNVQk1JVFRFRCBCWSBCUklER0VSIFJPVVRJTkUKKyAqICAgICAgMCAhPSAoa291bnQgJiAweDAyMDApICAgPT4gRklFTEQgQlVGRkVSIE5PVCBZRVQgQ0hFQ0tFRAorICogICAgICAwICE9IChrb3VudCAmIDB4MDEwMCkgICA9PiBCVUZGRVIgSEFTIFRXTyBFWFRSQSBCWVRFUyAtIFdIWT8KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorZWFzeWNhcF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiKQoreworc3RhdGljIGludCBtdDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGZpZWxkX2J1ZmZlcjsKK2NoYXIgZXJyYnVmWzE2XTsKK2ludCBpLCBtb3JlLCBtdWNoLCBsZWFwLCByYywgbGFzdDsKK2ludCB2aWRlb2ZpZWxkYW1vdW50OwordW5zaWduZWQgaW50IG92ZXJyaWRlOworaW50IGZyYW1lc3RhdHVzLCBmcmFtZWxlbmd0aCwgZnJhbWVhY3R1YWwsIGZyYW1lb2Zmc2V0OworX191OCAqcHU7CisjaWYgZGVmaW5lZChCUklER0VSKQorc3RydWN0IHRpbWV2YWwgdGltZXZhbDsKK2xvbmcgbG9uZyB1c2VjOworI2VuZGlmIC8qQlJJREdFUiovCisKK2lmIChOVUxMID09IHB1cmIpIHsKKwlTQVkoIkVSUk9SOiBlYXN5Y2FwX2NvbXBsZXRlKCk6IHB1cmIgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorcGVhc3ljYXAgPSBwdXJiLT5jb250ZXh0OworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBlYXN5Y2FwX2NvbXBsZXRlKCk6IHBlYXN5Y2FwIGlzIE5VTExcbiIpOworCXJldHVybjsKK30KKworaWYgKHBlYXN5Y2FwLT52aWRlb19lb2YpCisJcmV0dXJuOworCitmb3IgKGkgPSAwOyBpIDwgVklERU9fSVNPQ19CVUZGRVJfTUFOWTsgaSsrKQorCWlmIChwdXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2ldLnBnbykKKwkJYnJlYWs7CitKT1QoMTYsICIlMmk9dXJiXG4iLCBpKTsKK2xhc3QgPSBwZWFzeWNhcC0+dmlkZW9faXNvY19zZXF1ZW5jZTsKK2lmICgoKChWSURFT19JU09DX0JVRkZFUl9NQU5ZIC0gMSkgPT0gbGFzdCkgJiYgXAorCQkJCQkJKDAgIT0gaSkpIHx8IFwKKwkoKChWSURFT19JU09DX0JVRkZFUl9NQU5ZIC0gMSkgIT0gbGFzdCkgJiYgXAorCQkJCQkJKChsYXN0ICsgMSkgIT0gaSkpKSB7CisJU0FZKCJFUlJPUjogb3V0LW9mLW9yZGVyIHVyYnMgJWksJWkgLi4uIGNvbnRpbnVpbmdcbiIsIGxhc3QsIGkpOworfQorcGVhc3ljYXAtPnZpZGVvX2lzb2Nfc2VxdWVuY2UgPSBpOworCitpZiAocGVhc3ljYXAtPnZpZGVvX2lkbGUpIHsKKwlKT1QoMTYsICIlaT12aWRlb19pZGxlICAlaT12aWRlb19pc29jX3N0cmVhbWluZ1xuIiwgXAorCQkJcGVhc3ljYXAtPnZpZGVvX2lkbGUsIHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZyk7CisJaWYgKHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9dmlkZW9faWRsZSwgIiBcCisJCQkJCSJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCB3aXRoIHJjOlxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT52aWRlb19pZGxlKTsKKwkJCXN3aXRjaCAocmMpIHsKKwkJCWNhc2UgLUVOT01FTTogeworCQkJCVNBWSgiRU5PTUVNXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCVNBWSgiRU5PREVWXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOWElPOiB7CisJCQkJU0FZKCJFTlhJT1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlTQVkoIkVJTlZBTFxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQUdBSU46IHsKKwkJCQlTQVkoIkVBR0FJTlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FRkJJRzogeworCQkJCVNBWSgiRUZCSUdcbiIpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQlTQVkoIkVQSVBFXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVNU0dTSVpFOiB7CisJCQkJU0FZKCJFTVNHU0laRVxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9TUEM6IHsKKwkJCQlTQVkoIkVOT1NQQ1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OiB7CisJCQkJU0FZKCIweCUwOFhcbiIsIHJjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KK3JldHVybjsKK30KK292ZXJyaWRlID0gMDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChGSUVMRF9CVUZGRVJfTUFOWSA8PSBwZWFzeWNhcC0+ZmllbGRfZmlsbCkgeworCVNBWSgiRVJST1I6IGJhZCBwZWFzeWNhcC0+ZmllbGRfZmlsbFxuIik7CisJcmV0dXJuOworfQoraWYgKHB1cmItPnN0YXR1cykgeworCWlmICgoLUVTSFVURE9XTiA9PSBwdXJiLT5zdGF0dXMpIHx8ICgtRU5PRU5UID09IHB1cmItPnN0YXR1cykpIHsKKwkJSk9UKDgsICJ1cmIgc3RhdHVzIC1FU0hVVERPV04gb3IgLUVOT0VOVFxuIik7CisJCXJldHVybjsKKwl9CisKKwkocGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQpIHw9IDB4ODAwMCA7CisJU0FZKCJFUlJPUjogYmFkIHVyYiBzdGF0dXM6XG4iKTsKKwlzd2l0Y2ggKHB1cmItPnN0YXR1cykgeworCWNhc2UgLUVJTlBST0dSRVNTOiB7CisJCVNBWSgiLUVJTlBST0dSRVNTXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1NSOiB7CisJCVNBWSgiLUVOT1NSXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQSVBFOiB7CisJCVNBWSgiLUVQSVBFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPVkVSRkxPVzogeworCQlTQVkoIi1FT1ZFUkZMT1dcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRVBST1RPOiB7CisJCVNBWSgiLUVQUk9UT1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FSUxTRVE6IHsKKwkJU0FZKCItRUlMU0VRXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVUSU1FRE9VVDogeworCQlTQVkoIi1FVElNRURPVVRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU1TR1NJWkU6IHsKKwkJU0FZKCItRU1TR1NJWkVcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU9QTk9UU1VQUDogeworCQlTQVkoIi1FT1BOT1RTVVBQXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQRk5PU1VQUE9SVDogeworCQlTQVkoIi1FUEZOT1NVUFBPUlRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFGTk9TVVBQT1JUOiB7CisJCVNBWSgiLUVBRk5PU1VQUE9SVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FQUREUklOVVNFOiB7CisJCVNBWSgiLUVBRERSSU5VU0VcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFERFJOT1RBVkFJTDogeworCQlTQVkoIi1FQUREUk5PVEFWQUlMXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT0JVRlM6IHsKKwkJU0FZKCItRU5PQlVGU1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FSVNDT05OOiB7CisJCVNBWSgiLUVJU0NPTk5cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PVENPTk46IHsKKwkJU0FZKCItRU5PVENPTk5cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRVNIVVRET1dOOiB7CisJCVNBWSgiLUVTSFVURE9XTlxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9FTlQ6IHsKKwkJU0FZKCItRU5PRU5UXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVDT05OUkVTRVQ6IHsKKwkJU0FZKCItRUNPTk5SRVNFVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9TUEM6IHsKKwkJU0FZKCJFTk9TUENcbiIpOyBicmVhazsKKwl9CisJZGVmYXVsdDogeworCQlTQVkoInVua25vd24gZXJyb3IgY29kZSAweCUwOFhcbiIsIHB1cmItPnN0YXR1cyk7IGJyZWFrOworCX0KKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit9IGVsc2UgeworCWZvciAoaSA9IDA7ICBpIDwgcHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCQlpZiAoMCAhPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQpIHw9IDB4ODAwMCA7CisJCQlzd2l0Y2ggKHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cykgeworCQkJY2FzZSAgMDogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiT0siKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9FTlQ6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9FTlQiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5QUk9HUkVTUzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVJTlBST0dSRVNTIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRVBST1RPOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVBST1RPIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUlMU0VROiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRUlMU0VRIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRVRJTUU6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FVElNRSIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVUSU1FRE9VVDogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVUSU1FRE9VVCIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVQSVBFOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVBJUEUiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQ09NTTogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVDT01NIik7IGJyZWFrOworCQkJfQorCQkJY2FzZSAtRU5PU1I6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9TUiIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVPVkVSRkxPVzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVPVkVSRkxPVyIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVSRU1PVEVJTzogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVSRU1PVEVJTyIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVOT0RFViIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVYREVWOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRVhERVYiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FSU5WQUwiKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FQ09OTlJFU0VUOiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICItRUNPTk5SRVNFVCIpOyBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT1NQQzogeworCQkJCVNBWSgiRU5PU1BDXG4iKTsgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FU0hVVERPV046IHsKKwkJCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FU0hVVERPV04iKTsgYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OiB7CisJCQkJc3RyY3B5KCZlcnJidWZbMF0sICJ1bmtub3duIGVycm9yIik7IGJyZWFrOworCQkJfQorCQkJfQorCQl9CisJCWZyYW1lc3RhdHVzID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCQlmcmFtZWxlbmd0aCA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKwkJZnJhbWVhY3R1YWwgPSBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoOworCQlmcmFtZW9mZnNldCA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKworCQlKT1QoMTYsICJmcmFtZVslMmldOiIgXAorCQkJCSIlNGk9c3RhdHVzICIgIFwKKwkJCQkiJTRpPWFjdHVhbCAiICBcCisJCQkJIiU0aT1sZW5ndGggIiAgXAorCQkJCSIlNWk9b2Zmc2V0XG4iLCBcCisJCQlpLCBmcmFtZXN0YXR1cywgZnJhbWVhY3R1YWwsIGZyYW1lbGVuZ3RoLCBmcmFtZW9mZnNldCk7CisJCWlmICghcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJCQltb3JlID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsKKwkJCXBmaWVsZF9idWZmZXIgPSAmcGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkgIFtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJdmlkZW9maWVsZGFtb3VudCA9IChwZWFzeWNhcC0+ZmllbGRfcGFnZSAqIFwKKwkJCQlQQUdFX1NJWkUpICsgXAorCQkJCShpbnQpKHBmaWVsZF9idWZmZXItPnB0byAtIHBmaWVsZF9idWZmZXItPnBnbyk7CisJCWlmICg0ID09IG1vcmUpCisJCQltdCsrOworCQlpZiAoNCA8IG1vcmUpIHsKKwkJCWlmIChtdCkgeworCQkJCUpPVCg4LCAiJTRpIGVtcHR5IHZpZGVvIHVyYiBmcmFtZXNcbiIsIG10KTsKKwkJCQltdCA9IDA7CisJCQl9CisJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gcGVhc3ljYXAtPmZpZWxkX2ZpbGwpIHsKKwkJCQlTQVkoIkVSUk9SOiBiYWQgcGVhc3ljYXAtPmZpZWxkX2ZpbGxcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChGSUVMRF9CVUZGRVJfU0laRS9QQUdFX1NJWkUgPD0gXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9wYWdlKSB7CisJCQkJU0FZKCJFUlJPUjogYmFkIHBlYXN5Y2FwLT5maWVsZF9wYWdlXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQlwdSA9IChfX3U4ICopKHB1cmItPnRyYW5zZmVyX2J1ZmZlciArIFwKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKwkJCWlmICgweDgwICYgKnB1KQorCQkJCWxlYXAgPSA4OworCQkJZWxzZQorCQkJCWxlYXAgPSA0OworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIEVJR0hULUJZVEUgRU5ELU9GLVZJREVPRklFTEQgTUFSS0VSLgorICogIE5PVEU6ICBBIFNVQ0NFU1NJT04gT0YgVVJCIEZSQU1FUyBGT0xMT1dJTkcgVEhJUyBBUkUgRU1QVFksCisgKiAgICAgICAgIENPUlJFU1BPTkRJTkcgVE8gVEhFIEZJRUxEIEZMWUJBQ0sgKFZFUlRJQ0FMIEJMQU5LSU5HKSBQRVJJT0QuCisgKgorICogIFBST1ZJREVEIFRIRSBGSUVMRCBCVUZGRVIgQ09OVEFJTlMgR09PRCBEQVRBIEFTIElORElDQVRFRCBCWSBBIFpFUk8gVVBQRVIKKyAqICBCWVRFIE9GCisgKiAgICAgICAgcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+ZmllbGRfZmlsbF1bMF0ua291bnQKKyAqICBUSEUgQ09OVEVOVFMgT0YgVEhFIEZJRUxEIEJVRkZFUiBBUkUgT0ZGRVJFRCBUTyBkcWJ1ZigpLCBmaWVsZF9yZWFkIElTCisgKiAgVVBEQVRFRCBBTkQgZmllbGRfZmlsbCBJUyBCVU1QRUQuICBJRiBUSEUgRklFTEQgQlVGRkVSIENPTlRBSU5TIEJBRCBEQVRBCisgKiAgTk9USElORyBJUyBPRkZFUkVEIFRPIGRxYnVmKCkuCisgKgorICogIFRIRSBERUNJU0lPTiBPTiBXSEVUSEVSIFRIRSBQQVJJVFkgT0YgVEhFIE9GRkVSRUQgRklFTEQgQlVGRkVSIElTIFJJR0hUCisgKiAgUkVTVFMgV0lUSCBkcWJ1ZigpLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQlpZiAoKDggPT0gbW9yZSkgfHwgb3ZlcnJpZGUpIHsKKwkJCQlpZiAodmlkZW9maWVsZGFtb3VudCA+IFwKKwkJCQkJCXBlYXN5Y2FwLT52aWRlb2ZpZWxkYW1vdW50KSB7CisJCQkJCWlmICgyID09IHZpZGVvZmllbGRhbW91bnQgLSBcCisJCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCQl2aWRlb2ZpZWxkYW1vdW50KQorCQkJCQkJKHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJCVswXS5rb3VudCkgfD0gMHgwMTAwOworCQkJCQllbHNlCisJCQkJCQkocGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1cCisJCQkJCQkJWzBdLmtvdW50KSB8PSAweDQwMDA7CisJCQkJCX0gZWxzZSBpZiAodmlkZW9maWVsZGFtb3VudCA8IFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvZmllbGRhbW91bnQpIHsKKwkJCQkJCShwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVwKKwkJCQkJCQlbMF0ua291bnQpIHw9IDB4MjAwMDsKKwkJCQkJfQorCQkJCWlmICghKDB4RkYwMCAmIHBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJWzBdLmtvdW50KSkgeworCQkJCQkocGVhc3ljYXAtPnZpZGVvX2p1bmspLS07CisJCQkJCWlmICgtMTYgPiBwZWFzeWNhcC0+dmlkZW9fanVuaykKKwkJCQkJCXBlYXN5Y2FwLT52aWRlb19qdW5rID0gLTE2OworCQkJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCA9IFwKKwkJCQkJCQkocGVhc3ljYXAtPlwKKwkJCQkJCQkJZmllbGRfZmlsbCkrKzsKKworCQkJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwpCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCA9IDA7CisJCQkJCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwkJCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+XAorCQkJCQkJZmllbGRfYnVmZmVyXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9maWxsXVwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQkJCXBmaWVsZF9idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ287CisKKwkJCQkJSk9UKDgsICJidW1wZWQgdG86ICVpPXBlYXN5Y2FwLT4iIFwKKwkJCQkJCSJmaWVsZF9maWxsICAlaT1wYXJpdHlcbiIsIFwKKwkJCQkJCXBlYXN5Y2FwLT5maWVsZF9maWxsLCBcCisJCQkJCQkweDAwRkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCQkJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhcyAlaSAiIFwKKwkJCQkJCSJieXRlcyBmaXQgdG8gYmUgcmVhZFxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQsIFwKKwkJCQkJCXZpZGVvZmllbGRhbW91bnQpOworCQkJCQlKT1QoOCwgIndha2V1cCBjYWxsIHRvIHdxX3ZpZGVvLCAiIFwKKwkJCQkJCSIlaT1maWVsZF9yZWFkICVpPWZpZWxkX2ZpbGwgIlwKKwkJCQkJCSIlaT1wYXJpdHlcbiIsIFwKKwkJCQkJCXBlYXN5Y2FwLT5maWVsZF9yZWFkLCBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCwgXAorCQkJCQkJMHgwMEZGICYgcGVhc3ljYXAtPlwKKwkJCQkJCWZpZWxkX2J1ZmZlcltwZWFzeWNhcC0+XAorCQkJCQkJZmllbGRfcmVhZF1bMF0ua291bnQpOworCQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+XAorCQkJCQkJCQl3cV92aWRlbykpOworCQkJCQlkb19nZXR0aW1lb2ZkYXkoJnBlYXN5Y2FwLT50aW1ldmFsNyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCXBlYXN5Y2FwLT52aWRlb19qdW5rKys7CisJCQkJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhZCAlaSAiIFwKKwkJCQkJCSJieXRlcywgbm93IGRpc2NhcmRlZFxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwsIFwKKwkJCQkJCXZpZGVvZmllbGRhbW91bnQpOworCisJCQkJCShwZWFzeWNhcC0+ZmllbGRfZmlsbCkrKzsKKworCQkJCQlpZiAoRklFTERfQlVGRkVSX01BTlkgPD0gXAorCQkJCQkJCXBlYXN5Y2FwLT5maWVsZF9maWxsKQorCQkJCQkJcGVhc3ljYXAtPmZpZWxkX2ZpbGwgPSAwOworCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSA9IDA7CisJCQkJCXBmaWVsZF9idWZmZXIgPSBcCisJCQkJCQkmcGVhc3ljYXAtPmZpZWxkX2J1ZmZlclwKKwkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1cCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJCQlwZmllbGRfYnVmZmVyLT5wdG8gPSBcCisJCQkJCQkJcGZpZWxkX2J1ZmZlci0+cGdvOworCisJCQkJCUpPVCg4LCAiYnVtcGVkIHRvOiAlaT1wZWFzeWNhcC0+IiBcCisJCQkJCQkiZmllbGRfZmlsbCAgJWk9cGFyaXR5XG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCwgXAorCQkJCQkJMHgwMEZGICYgcGZpZWxkX2J1ZmZlci0+a291bnQpOworCQkJCX0KKwkJCQlpZiAoOCA9PSBtb3JlKSB7CisJCQkJCUpPVCg4LCAiZW5kLW9mLWZpZWxkOiByZWNlaXZlZCAiIFwKKwkJCQkJCSJwYXJpdHkgYnl0ZSAweCUwMlhcbiIsIFwKKwkJCQkJCSgweEZGICYgKnB1KSk7CisJCQkJCWlmICgweDQwICYgKnB1KQorCQkJCQkJcGZpZWxkX2J1ZmZlci0+a291bnQgPSAweDAwMDA7CisJCQkJCWVsc2UKKwkJCQkJCXBmaWVsZF9idWZmZXItPmtvdW50ID0gMHgwMDAxOworCQkJCQlKT1QoOCwgImVuZC1vZi1maWVsZDogMHglMDJYPWtvdW50XG4iLFwKKwkJCQkJCTB4RkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCQkJfQorCQkJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDT1BZIG1vcmUgQllURVMgRlJPTSBJU09DIEJVRkZFUiBUTyBGSUVMRCBCVUZGRVIKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJcHUgKz0gbGVhcDsKKwkJCW1vcmUgLT0gbGVhcDsKKworCQkJaWYgKEZJRUxEX0JVRkZFUl9NQU5ZIDw9IHBlYXN5Y2FwLT5maWVsZF9maWxsKSB7CisJCQkJU0FZKCJFUlJPUjogYmFkIHBlYXN5Y2FwLT5maWVsZF9maWxsXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpZiAoRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFIDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSkgeworCQkJCVNBWSgiRVJST1I6IGJhZCBwZWFzeWNhcC0+ZmllbGRfcGFnZVxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQkJd2hpbGUgKG1vcmUpIHsKKwkJCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJcCisJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJW3BlYXN5Y2FwLT5maWVsZF9wYWdlXTsKKwkJCQlpZiAoUEFHRV9TSVpFIDwgKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pKSB7CisJCQkJCVNBWSgiRVJST1I6IGJhZCBwZmllbGRfYnVmZmVyLT5wdG9cbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWlmIChQQUdFX1NJWkUgPT0gKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pKSB7CisJCQkJCShwZWFzeWNhcC0+ZmllbGRfcGFnZSkrKzsKKwkJCQkJaWYgKEZJRUxEX0JVRkZFUl9TSVpFL1BBR0VfU0laRSA8PSBcCisJCQkJCQkJcGVhc3ljYXAtPmZpZWxkX3BhZ2UpIHsKKwkJCQkJCUpPVCgxNiwgIndyYXBwaW5nIHBlYXN5Y2FwLT4iIFwKKwkJCQkJCQkiZmllbGRfcGFnZVxuIik7CisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfcGFnZSA9IDA7CisJCQkJCX0KKwkJCQkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+XAorCQkJCQkJCWZpZWxkX2J1ZmZlclwKKwkJCQkJCQlbcGVhc3ljYXAtPmZpZWxkX2ZpbGxdXAorCQkJCQkJCVtwZWFzeWNhcC0+ZmllbGRfcGFnZV07CisJCQkJCXBmaWVsZF9idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ287CisJCQkJfQorCisJCQkJbXVjaCA9IFBBR0VfU0laRSAtIChpbnQpKHBmaWVsZF9idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwZmllbGRfYnVmZmVyLT5wZ28pOworCisJCQkJaWYgKG11Y2ggPiBtb3JlKQorCQkJCQltdWNoID0gbW9yZTsKKwkJCQltZW1jcHkocGZpZWxkX2J1ZmZlci0+cHRvLCBwdSwgbXVjaCk7CisJCQkJcHUgKz0gbXVjaDsKKwkJCQkocGZpZWxkX2J1ZmZlci0+cHRvKSArPSBtdWNoOworCQkJCW1vcmUgLT0gbXVjaDsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICoKKyAqCisgKiAgICAgICAgICAgICAqKiogVU5ERVIgREVWRUxPUE1FTlQvVEVTVElORyAtIE5PVCBSRUFEWSBZRVQhICoqKgorICoKKyAqCisgKgorICogIFZJREVPVEFQRVMgTUFZIEhBVkUgQkVFTiBNQU5VQUxMWSBQQVVTRUQgQU5EIFJFU1RBUlRFRCBEVVJJTkcgUkVDT1JESU5HLgorICogIFRISVMgQ0FVU0VTIExPU1MgT0YgU1lOQywgQ09ORlVTSU5HIERPV05TVFJFQU0gVVNFUlNQQUNFIFBST0dSQU1TIFdISUNICisgKiAgTUFZIElOVEVSUFJFVCBUSEUgSU5URVJSVVBUSU9OIEFTIEEgU1lNUFRPTSBPRiBMQVRFTkNZLiAgVE8gT1ZFUkNPTUUgVEhJUworICogIFRIRSBEUklWRVIgQlJJREdFUyBUSEUgSElBVFVTIEJZIFNFTkRJTkcgRFVNTVkgVklERU8gRlJBTUVTIEFUIFJPVUdITFkKKyAqICBUSEUgUklHSFQgVElNRSBJTlRFUlZBTFMgSU4gVEhFIEhPUEUgT0YgUEVSU1VBRElORyBUSEUgRE9XTlNUUkVBTSBVU0VSU1BBQ0UKKyAqICBQUk9HUkFNIFRPIFJFU1VNRSBOT1JNQUwgU0VSVklDRSBXSEVOIFRIRSBJTlRFUlJVUFRJT04gSVMgT1ZFUi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQlJJREdFUikKK2RvX2dldHRpbWVvZmRheSgmdGltZXZhbCk7CitpZiAocGVhc3ljYXAtPnRpbWV2YWw3LnR2X3NlYykgeworCXVzZWMgPSAxMDAwMDAwKih0aW1ldmFsLnR2X3NlYyAgLSBwZWFzeWNhcC0+dGltZXZhbDcudHZfc2VjKSArIFwKKwkJCSh0aW1ldmFsLnR2X3VzZWMgLSBwZWFzeWNhcC0+dGltZXZhbDcudHZfdXNlYyk7CisJaWYgKHVzZWMgPiAocGVhc3ljYXAtPnVzZWMgKyBwZWFzeWNhcC0+dG9sZXJhdGUpKSB7CisJCUpPVCg4LCAiYnJpZGdpbmcgaGlhdHVzXG4iKTsKKwkJcGVhc3ljYXAtPnZpZGVvX2p1bmsgPSAwOworCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW3BlYXN5Y2FwLT5maWVsZF9maWxsXVswXS5rb3VudCB8PSAweDA0MDA7CisKKwkJcGVhc3ljYXAtPmZpZWxkX3JlYWQgPSAocGVhc3ljYXAtPmZpZWxkX2ZpbGwpKys7CisKKwkJaWYgKEZJRUxEX0JVRkZFUl9NQU5ZIDw9IHBlYXN5Y2FwLT5maWVsZF9maWxsKSBcCisJCQkJCQlwZWFzeWNhcC0+ZmllbGRfZmlsbCA9IDA7CisJCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwkJcGZpZWxkX2J1ZmZlciA9ICZwZWFzeWNhcC0+ZmllbGRfYnVmZmVyXAorCQkJCVtwZWFzeWNhcC0+ZmllbGRfZmlsbF1bcGVhc3ljYXAtPmZpZWxkX3BhZ2VdOworCQlwZmllbGRfYnVmZmVyLT5wdG8gPSBwZmllbGRfYnVmZmVyLT5wZ287CisKKwkJSk9UKDgsICJidW1wZWQgdG86ICVpPXBlYXN5Y2FwLT5maWVsZF9maWxsICAlaT1wYXJpdHlcbiIsIFwKKwkJCXBlYXN5Y2FwLT5maWVsZF9maWxsLCAweDAwRkYgJiBwZmllbGRfYnVmZmVyLT5rb3VudCk7CisJCUpPVCg4LCAiZmllbGQgYnVmZmVyICVpIGhhcyAlaSBieXRlcyB0byBiZSBvdmVyd3JpdHRlblxuIiwgXAorCQkJcGVhc3ljYXAtPmZpZWxkX3JlYWQsIHZpZGVvZmllbGRhbW91bnQpOworCQlKT1QoOCwgIndha2V1cCBjYWxsIHRvIHdxX3ZpZGVvLCAiIFwKKwkJCSIlaT1maWVsZF9yZWFkICVpPWZpZWxkX2ZpbGwgJWk9cGFyaXR5XG4iLCBcCisJCQlwZWFzeWNhcC0+ZmllbGRfcmVhZCwgcGVhc3ljYXAtPmZpZWxkX2ZpbGwsIFwKKwkJCTB4MDBGRiAmIFwKKwkJCXBlYXN5Y2FwLT5maWVsZF9idWZmZXJbcGVhc3ljYXAtPmZpZWxkX3JlYWRdWzBdLmtvdW50KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJCWRvX2dldHRpbWVvZmRheSgmcGVhc3ljYXAtPnRpbWV2YWw3KTsKKwl9Cit9CisjZW5kaWYgLypCUklER0VSKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVTVUJNSVQgVEhJUyBVUkIsIFVOTEVTUyBBIFNFVkVSRSBQRVJTSVNURU5UIEVSUk9SIENPTkRJVElPTiBFWElTVFMuCisgKgorICogIElGIFRIRSBXQUlUIFFVRVVFUyBBUkUgTk9UIENMRUFSRUQgSU4gUkVTUE9OU0UgVE8gQU4gRVJST1IgQ09ORElUSU9OCisgKiAgVEhFIFVTRVJTUEFDRSBQUk9HUkFNLCBFLkcuIG1wbGF5ZXIsIE1BWSBIQU5HIE9OIEVYSVQuICAgQkVXQVJFLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAoVklERU9fSVNPQ19CVUZGRVJfTUFOWSA8PSBwZWFzeWNhcC0+dmlkZW9fanVuaykgeworCVNBWSgiZWFzeWNhcCBkcml2ZXIgc2h1dHRpbmcgZG93biBvbiBjb25kaXRpb24gZ3JlZW5cbiIpOworCXBlYXN5Y2FwLT52aWRlb19lb2YgPSAxOworCXBlYXN5Y2FwLT5hdWRpb19lb2YgPSAxOworCXBlYXN5Y2FwLT52aWRlb19qdW5rID0gLVZJREVPX0lTT0NfQlVGRkVSX01BTlk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPndxX2F1ZGlvKSk7CisJcmV0dXJuOworfQoraWYgKHBlYXN5Y2FwLT52aWRlb19pc29jX3N0cmVhbWluZykgeworCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJFUlJPUjogd2hpbGUgJWk9dmlkZW9faWRsZSwgdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQgIiBcCisJCQkJCSJ3aXRoIHJjOlxuIiwgcGVhc3ljYXAtPnZpZGVvX2lkbGUpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgLUVOT01FTTogeworCQkJU0FZKCJFTk9NRU1cbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FTk9ERVY6IHsKKwkJCVNBWSgiRU5PREVWXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5YSU86IHsKKwkJCVNBWSgiRU5YSU9cbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FSU5WQUw6IHsKKwkJCVNBWSgiRUlOVkFMXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRUFHQUlOOiB7CisJCQlTQVkoIkVBR0FJTlxuIik7IGJyZWFrOworCQl9CisJCWNhc2UgLUVGQklHOiB7CisJCQlTQVkoIkVGQklHXG4iKTsgYnJlYWs7CisJCX0KKwkJY2FzZSAtRVBJUEU6IHsKKwkJCVNBWSgiRVBJUEVcbiIpOyBicmVhazsKKwkJfQorCQljYXNlIC1FTVNHU0laRTogeworCQkJU0FZKCJFTVNHU0laRVxuIik7ICBicmVhazsKKwkJfQorCQljYXNlIC1FTk9TUEM6IHsKKwkJCVNBWSgiRU5PU1BDXG4iKTsgYnJlYWs7CisJCX0KKwkJZGVmYXVsdDogeworCQkJU0FZKCIweCUwOFhcbiIsIHJjKTsgYnJlYWs7CisJCX0KKwkJfQorCX0KK30KK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYTUUKKyAqCisgKgorICogIFRISVMgRlVOQ1RJT04gQVNTVU1FUyBUSEFULCBPTiBFQUNIIEFORCBFVkVSWSBPQ0NBU0lPTiBUSEFUIFRIRSBERVZJQ0UgSVMKKyAqICBQSFlTSUNBTExZIFBMVUdHRUQgSU4sIElOVEVSRkFDRSAwIElTIFBST0JFRCBGSVJTVC4KKyAqICBJRiBUSElTIElTIE5PVCBUUlVFLCBUSEVSRSBJUyBUSEUgUE9TU0lCSUxJVFkgT0YgQU4gT29wcy4KKyAqCisgKiAgVEhJUyBIQVMgTkVWRVIgQkVFTiBBIFBST0JMRU0gSU4gUFJBQ1RJQ0UsIEJVVCBTT01FVEhJTkcgU0VFTVMgV1JPTkcgSEVSRS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitlYXN5Y2FwX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqcHVzYl9pbnRlcmZhY2UsIFwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKK3N0cnVjdCB1c2JfZGV2aWNlICpwdXNiX2RldmljZSwgKnB1c2JfZGV2aWNlMTsKK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnB1c2JfaG9zdF9pbnRlcmZhY2U7CitzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnBlcGQ7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yOworc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciAqcHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvcjsKK3N0cnVjdCB1cmIgKnB1cmI7CitzdGF0aWMgc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwIC8qPU5VTEwqLzsKK3N0cnVjdCBkYXRhX3VyYiAqcGRhdGFfdXJiOworc2l6ZV90IHdNYXhQYWNrZXRTaXplOworaW50IElTT0N3TWF4UGFja2V0U2l6ZTsKK2ludCBCVUxLd01heFBhY2tldFNpemU7CitpbnQgSU5Ud01heFBhY2tldFNpemU7CitpbnQgQ1RSTHdNYXhQYWNrZXRTaXplOworX191OCBiRW5kcG9pbnRBZGRyZXNzOworX191OCBJU09DYkVuZHBvaW50QWRkcmVzczsKK19fdTggSU5UYkVuZHBvaW50QWRkcmVzczsKK2ludCBpc2luLCBpLCBqLCBrLCBtOworX191OCBiSW50ZXJmYWNlTnVtYmVyOworX191OCBiSW50ZXJmYWNlQ2xhc3M7CitfX3U4IGJJbnRlcmZhY2VTdWJDbGFzczsKK3ZvaWQgKnBidWY7CitpbnQgb2thbHRbOF0sIGlzb2thbHQ7CitpbnQgb2tlcG5bOF0sIGlzb2tlcG47CitpbnQgb2ttcHNbOF0sIGlzb2ttcHM7CitpbnQgbWF4cGFja2V0c2l6ZTsKK2ludCByYzsKKworSk9UKDQsICJcbiIpOworCitpZiAoKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBHRVQgUE9JTlRFUiBUTyBTVFJVQ1RVUkUgdXNiX2RldmljZQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2RldmljZTEgPSBjb250YWluZXJfb2YocHVzYl9pbnRlcmZhY2UtPmRldi5wYXJlbnQsIFwKKwkJCQkJCXN0cnVjdCB1c2JfZGV2aWNlLCBkZXYpOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcHVzYl9kZXZpY2UxKSB7CisJU0FZKCJFUlJPUjogcHVzYl9kZXZpY2UxIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcHVzYl9kZXZpY2UgPSB1c2JfZ2V0X2RldihwdXNiX2RldmljZTEpOworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcHVzYl9kZXZpY2UpIHsKKwlTQVkoIkVSUk9SOiBwdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK2lmICgodW5zaWduZWQgbG9uZyBpbnQpcHVzYl9kZXZpY2UxICE9ICh1bnNpZ25lZCBsb25nIGludClwdXNiX2RldmljZSkgeworCUpPVCg0LCAiRVJST1I6IHB1c2JfZGV2aWNlMSAhPSBwdXNiX2RldmljZVxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK0pPVCg0LCAiYk51bUNvbmZpZ3VyYXRpb25zPSVpXG4iLCBwdXNiX2RldmljZS0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2hvc3RfaW50ZXJmYWNlID0gcHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworaWYgKE5VTEwgPT0gcHVzYl9ob3N0X2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaG9zdF9pbnRlcmZhY2UgaXMgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKK2lmIChOVUxMID09IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpIHsKKwlTQVkoIkVSUk9SOiBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBHRVQgUFJPUEVSVElFUyBPRiBQUk9CRUQgSU5URVJGQUNFCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2JJbnRlcmZhY2VOdW1iZXIgPSBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyOworYkludGVyZmFjZUNsYXNzID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZUNsYXNzOworYkludGVyZmFjZVN1YkNsYXNzID0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzOworCitKT1QoNCwgImludGZbJWldOiBwdXNiX2ludGVyZmFjZS0+bnVtX2FsdHNldHRpbmc9JWlcbiIsIFwKKwkJCWJJbnRlcmZhY2VOdW1iZXIsIHB1c2JfaW50ZXJmYWNlLT5udW1fYWx0c2V0dGluZyk7CitKT1QoNCwgImludGZbJWldOiBwdXNiX2ludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmcgLSAiIFwKKwkJCSJwdXNiX2ludGVyZmFjZS0+YWx0c2V0dGluZz0lbGlcbiIsIGJJbnRlcmZhY2VOdW1iZXIsIFwKKwkJCShsb25nIGludCkocHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nIC0gXAorCQkJCQkJcHVzYl9pbnRlcmZhY2UtPmFsdHNldHRpbmcpKTsKK3N3aXRjaCAoYkludGVyZmFjZUNsYXNzKSB7CitjYXNlIFVTQl9DTEFTU19BVURJTzogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VDbGFzcz0weCUwMlg9VVNCX0NMQVNTX0FVRElPXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgYkludGVyZmFjZUNsYXNzKTsgYnJlYWs7CisJfQorY2FzZSBVU0JfQ0xBU1NfVklERU86IHsKKwlKT1QoNCwgImludGZbJWldOiBiSW50ZXJmYWNlQ2xhc3M9MHglMDJYPVVTQl9DTEFTU19WSURFT1xuIiwgXAorCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGJJbnRlcmZhY2VDbGFzcyk7IGJyZWFrOworCX0KK2Nhc2UgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDOiB7CisJSk9UKDQsICJpbnRmWyVpXTogYkludGVyZmFjZUNsYXNzPTB4JTAyWD1VU0JfQ0xBU1NfVkVORE9SX1NQRUNcbiIsIFwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlQ2xhc3MpOyBicmVhazsKKwl9CitkZWZhdWx0OgorCWJyZWFrOworfQorc3dpdGNoIChiSW50ZXJmYWNlU3ViQ2xhc3MpIHsKK2Nhc2UgMHgwMTogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VTdWJDbGFzcz0weCUwMlg9QVVESU9DT05UUk9MXG4iLCBcCisJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlU3ViQ2xhc3MpOyBicmVhazsKK30KK2Nhc2UgMHgwMjogeworCUpPVCg0LCAiaW50ZlslaV06IGJJbnRlcmZhY2VTdWJDbGFzcz0weCUwMlg9QVVESU9TVFJFQU1JTkdcbiIsIFwKKwkJCWJJbnRlcmZhY2VOdW1iZXIsIGJJbnRlcmZhY2VTdWJDbGFzcyk7IGJyZWFrOworfQorY2FzZSAweDAzOiB7CisJSk9UKDQsICJpbnRmWyVpXTogYkludGVyZmFjZVN1YkNsYXNzPTB4JTAyWD1NSURJU1RSRUFNSU5HXG4iLCBcCisJCQliSW50ZXJmYWNlTnVtYmVyLCBiSW50ZXJmYWNlU3ViQ2xhc3MpOyBicmVhazsKK30KK2RlZmF1bHQ6CisJYnJlYWs7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yID0gcHVzYl9pbnRlcmZhY2UtPmludGZfYXNzb2M7CitpZiAoTlVMTCAhPSBwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yKSB7CisJSk9UKDQsICJpbnRmWyVpXTogYkZpcnN0SW50ZXJmYWNlPTB4JTAyWCAgYkludGVyZmFjZUNvdW50PTB4JTAyWFxuIiwgXAorCQkJYkludGVyZmFjZU51bWJlciwgXAorCQkJcHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvci0+YkZpcnN0SW50ZXJmYWNlLCBcCisJCQlwdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yLT5iSW50ZXJmYWNlQ291bnQpOworfSBlbHNlIHsKK0pPVCg0LCAiaW50ZlslaV06IHB1c2JfaW50ZXJmYWNlX2Fzc29jX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIiwgXAorCQkJCQkJCWJJbnRlcmZhY2VOdW1iZXIpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBIE5FVyBzdHJ1Y3QgZWFzeWNhcCBJUyBBTFdBWVMgQUxMT0NBVEVEIFdIRU4gSU5URVJGQUNFIDAgSVMgUFJPQkVELgorICogIElUIElTIE5PVCBQT1NTSUJMRSBIRVJFIFRPIEZSRUUgQU5ZIEVYSVNUSU5HIHN0cnVjdCBlYXN5Y2FwLiAgVEhJUworICogIFNIT1VMRCBIQVZFIEJFRU4gRE9ORSBCWSBlYXN5Y2FwX2RlbGV0ZSgpIFdIRU4gVEhFIERFVklDRSBXQVMgUEhZU0lDQUxMWQorICogIFVOUExVR0dFRC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKDAgPT0gYkludGVyZmFjZU51bWJlcikgeworCXBlYXN5Y2FwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVhc3ljYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoTlVMTCA9PSBwZWFzeWNhcCkgeworCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgcGVhc3ljYXBcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19zdHJ1Y3QgPSBzaXplb2Yoc3RydWN0IGVhc3ljYXApOworCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fdXJiID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fc3RydWN0ID0gMDsKKwkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSA9IDA7CisJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3VyYiA9IDA7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpFIFRIRSBORVcgZWFzeWNhcCBTVFJVQ1RVUkUuCisgKiAgTk8gUEFSQU1FVEVSUyBBUkUgU1BFQ0lGSUVEIEhFUkUgUkVRVUlSSU5HIFRIRSBTRVRUSU5HIE9GIFJFR0lTVEVSUy4KKyAqICBUSEFUIElTIERPTkUgRklSU1QgQlkgZWFzeWNhcF9vcGVuKCkgQU5EIExBVEVSIEJZIGVhc3ljYXBfaW9jdGwoKS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXBlYXN5Y2FwLT5wdXNiX2RldmljZSA9IHB1c2JfZGV2aWNlOworCXBlYXN5Y2FwLT5wdXNiX2ludGVyZmFjZSA9IHB1c2JfaW50ZXJmYWNlOworCisJa3JlZl9pbml0KCZwZWFzeWNhcC0+a3JlZik7CisJSk9UKDgsICJpbnRmWyVpXTogYWZ0ZXIga3JlZl9pbml0KC4uLl92aWRlbykgIiBcCisJCQkiJWk9cGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlclxuIiwgXAorCQkJYkludGVyZmFjZU51bWJlciwgcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYocGVhc3ljYXAtPndxX3ZpZGVvKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKHBlYXN5Y2FwLT53cV9hdWRpbykpOworCisJbXV0ZXhfaW5pdCgmKHBlYXN5Y2FwLT5tdXRleF90aW1ldmFsMCkpOworCW11dGV4X2luaXQoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDEpKTsKKworCWZvciAoayA9IDA7IGsgPCBGUkFNRV9CVUZGRVJfTUFOWTsgaysrKQorCQltdXRleF9pbml0KCYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9ba10pKTsKKworCXBlYXN5Y2FwLT5pbGsgPSAwOworCXBlYXN5Y2FwLT5taWNyb3Bob25lID0gZmFsc2U7CisKKwlwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlID0gLTE7CisJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24gPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9fYWx0c2V0dGluZ19vZmYgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9fZW5kcG9pbnRudW1iZXIgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUgPSAtMTsKKwlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSA9IC0xOworCisJcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSA9IC0xOworCXBlYXN5Y2FwLT5hdWRpb19hbHRzZXR0aW5nX29uID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb2ZmID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2VuZHBvaW50bnVtYmVyID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplID0gLTE7CisJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemUgPSAtMTsKKworCXBlYXN5Y2FwLT5mcmFtZV9idWZmZXJfbWFueSA9IEZSQU1FX0JVRkZFUl9NQU5ZOworCisJaWYgKChzdHJ1Y3QgbXV0ZXggKilOVUxMID09ICYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bMF0pKSB7CisJCVNBWSgiRVJST1I6ICYocGVhc3ljYXAtPm11dGV4X21tYXBfdmlkZW9bJWldKSBpcyBOVUxMXG4iLCAwKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBEWU5BTUlDQUxMWSBGSUxMIElOIFRIRSBBVkFJTEFCTEUgRk9STUFUUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXJjID0gZmlsbGluX2Zvcm1hdHMoKTsKKwlpZiAoMCA+IHJjKSB7CisJCVNBWSgiRVJST1I6IGZpbGxpbl9mb3JtYXRzKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCUpPVCg0LCAiJWkgZm9ybWF0cyBhdmFpbGFibGVcbiIsIHJjKTsKKwl9IGVsc2UgeworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQlpZiAoKHN0cnVjdCBlYXN5Y2FwICopTlVMTCA9PSBwZWFzeWNhcCkgeworCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAgaXMgTlVMTCAiIFwKKwkJCQkJIndoZW4gcHJvYmluZyBpbnRlcmZhY2UgJWlcbiIsIFwKKwkJCQkJCQliSW50ZXJmYWNlTnVtYmVyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwlKT1QoOCwgImtyZWZfZ2V0KCkgd2l0aCAlaT1wZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLCBcCisJCQkJCShpbnQpcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CisJa3JlZl9nZXQoJnBlYXN5Y2FwLT5rcmVmKTsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoVVNCX0NMQVNTX1ZJREVPID09IGJJbnRlcmZhY2VDbGFzcykgfHwgXAorCShVU0JfQ0xBU1NfVkVORE9SX1NQRUMgPT0gYkludGVyZmFjZUNsYXNzKSkgeworCWlmICgtMSA9PSBwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlKSB7CisJCXBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2UgPSBiSW50ZXJmYWNlTnVtYmVyOworCQlKT1QoNCwgInNldHRpbmcgcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZT0laVxuIiwgXAorCQkJCQkJcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSk7CisJfSBlbHNlIHsKKwkJaWYgKHBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2UgIT0gYkludGVyZmFjZU51bWJlcikgeworCQkJU0FZKCJFUlJPUjogYXR0ZW1wdGluZyB0byByZXNldCAiIFwKKwkJCQkJInBlYXN5Y2FwLT52aWRlb19pbnRlcmZhY2VcbiIpOworCQkJU0FZKCIuLi4uLi4gY29udGludWluZyB3aXRoICIgXAorCQkJCQkiJWk9cGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faW50ZXJmYWNlKTsKKwkJfQorCX0KK30gZWxzZSBpZiAoKFVTQl9DTEFTU19BVURJTyA9PSBiSW50ZXJmYWNlQ2xhc3MpICYmIFwKKwkJCQkJCSgweDAyID09IGJJbnRlcmZhY2VTdWJDbGFzcykpIHsKKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSkgeworCQlwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlID0gYkludGVyZmFjZU51bWJlcjsKKwkJSk9UKDQsICJzZXR0aW5nIHBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2U9JWlcbiIsIFwKKwkJCQkJCSBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlKTsKKwl9IGVsc2UgeworCQlpZiAocGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSAhPSBiSW50ZXJmYWNlTnVtYmVyKSB7CisJCQlTQVkoIkVSUk9SOiBhdHRlbXB0aW5nIHRvIHJlc2V0ICIgXAorCQkJCQkicGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZVxuIik7CisJCQlTQVkoIi4uLi4uLiBjb250aW51aW5nIHdpdGggIiBcCisJCQkJCSIlaT1wZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2UpOworCQl9CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlZFU1RJR0FURSBBTEwgQUxUU0VUVElOR1MuCisgKiAgRE9ORSBJTiBERVRBSUwgQkVDQVVTRSBVU0IgREVWSUNFIDA1ZTE6MDQwOCBIQVMgRElTUEFSQVRFIElOQ0FSTkFUSU9OUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaXNva2FsdCA9IDA7Citpc29rZXBuID0gMDsKK2lzb2ttcHMgPSAwOworCitmb3IgKGkgPSAwOyBpIDwgcHVzYl9pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nOyBpKyspIHsKKwlwdXNiX2hvc3RfaW50ZXJmYWNlID0gJihwdXNiX2ludGVyZmFjZS0+YWx0c2V0dGluZ1tpXSk7CisJaWYgKChzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2hvc3RfaW50ZXJmYWNlKSB7CisJCVNBWSgiRVJST1I6IHB1c2JfaG9zdF9pbnRlcmZhY2UgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKKwlpZiAoKHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKilOVUxMID09IFwKKwkJCQkJCXB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IpIHsKKwkJU0FZKCJFUlJPUjogcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkRlc2NyaXB0b3JUeXBlPTB4JTAyWFxuIiwgXAorCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJEZXNjcmlwdG9yVHlwZSk7CisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYkludGVyZmFjZU51bWJlcj0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iSW50ZXJmYWNlTnVtYmVyKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iQWx0ZXJuYXRlU2V0dGluZz0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iQWx0ZXJuYXRlU2V0dGluZyk7CisJSk9UKDQsICJpbnRmWyVpXWFsdFslaV06IGRlc2MuYk51bUVuZHBvaW50cz0weCUwMlhcbiIsIFwKKwliSW50ZXJmYWNlTnVtYmVyLCBpLCBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iTnVtRW5kcG9pbnRzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlQ2xhc3M9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZUNsYXNzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3M9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVN1YkNsYXNzKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2w9MHglMDJYXG4iLCBcCisJYkludGVyZmFjZU51bWJlciwgaSwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZVByb3RvY29sKTsKKwlKT1QoNCwgImludGZbJWldYWx0WyVpXTogZGVzYy5pSW50ZXJmYWNlPTB4JTAyWFxuIiwgXAorCWJJbnRlcmZhY2VOdW1iZXIsIGksIHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmlJbnRlcmZhY2UpOworCisJSVNPQ3dNYXhQYWNrZXRTaXplID0gLTE7CisJQlVMS3dNYXhQYWNrZXRTaXplID0gLTE7CisJSU5Ud01heFBhY2tldFNpemUgPSAtMTsKKwlDVFJMd01heFBhY2tldFNpemUgPSAtMTsKKwlJU09DYkVuZHBvaW50QWRkcmVzcyA9IDA7CisJSU5UYkVuZHBvaW50QWRkcmVzcyA9IDA7CisKKwlpZiAoMCA9PSBwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yLT5iTnVtRW5kcG9pbnRzKQorCQkJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldIGhhcyBubyBlbmRwb2ludHNcbiIsIFwKKwkJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlmb3IgKGogPSAwOyBqIDwgcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+Yk51bUVuZHBvaW50czsgaisrKSB7CisJCXBlcGQgPSAmKHB1c2JfaG9zdF9pbnRlcmZhY2UtPmVuZHBvaW50W2pdLmRlc2MpOworCQlpZiAoKHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqKU5VTEwgPT0gcGVwZCkgeworCQkJU0FZKCJFUlJPUjogIHBlcGQgaXMgTlVMTC5cbiIpOworCQkJU0FZKCIuLi4uLi4gc2tpcHBpbmdcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJd01heFBhY2tldFNpemUgPSBsZTE2X3RvX2NwdShwZXBkLT53TWF4UGFja2V0U2l6ZSk7CisJCWJFbmRwb2ludEFkZHJlc3MgPSBwZXBkLT5iRW5kcG9pbnRBZGRyZXNzOworCisJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXTogYkVuZHBvaW50QWRkcmVzcz0weCVYXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwgXAorCQkJCXBlcGQtPmJFbmRwb2ludEFkZHJlc3MpOworCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJtQXR0cmlidXRlcz0weCVYXG4iLCBcCisJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaiwgXAorCQkJCXBlcGQtPmJtQXR0cmlidXRlcyk7CisJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXTogd01heFBhY2tldFNpemU9JWlcbiIsIFwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqLCBcCisJCQkJcGVwZC0+d01heFBhY2tldFNpemUpOworCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV06IGJJbnRlcnZhbD0laVxuIiwKKwkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqLCBcCisJCQkJcGVwZC0+YkludGVydmFsKTsKKworCQlpZiAocGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCUpPVCg0LCAiaW50ZlslaV1hbHRbJWldZW5kWyVpXSBpcyBhbiAgSU4gIGVuZHBvaW50XG4iLFwKKwkJCQkJCWJJbnRlcmZhY2VOdW1iZXIsIGksIGopOworCQkJaXNpbiA9IDE7CisJCX0gZWxzZSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYW4gIE9VVCBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJCVNBWSgiRVJST1I6IE9VVCBlbmRwb2ludCB1bmV4cGVjdGVkXG4iKTsKKwkJCVNBWSgiLi4uLi4uIGNvbnRpbnVpbmdcbiIpOworCQkJaXNpbiA9IDA7CisJCX0KKwkJaWYgKChwZXBkLT5ibUF0dHJpYnV0ZXMgJiBcCisJCQkJVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFwKKwkJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYW4gSVNPQyBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJCWlmIChpc2luKSB7CisJCQkJc3dpdGNoIChiSW50ZXJmYWNlQ2xhc3MpIHsKKwkJCQljYXNlIFVTQl9DTEFTU19WSURFTzoKKwkJCQljYXNlIFVTQl9DTEFTU19WRU5ET1JfU1BFQzogeworCQkJCQlpZiAoIXBlYXN5Y2FwKSB7CisJCQkJCQlTQVkoIk1JU1RBS0U6ICIgXAorCQkJCQkJCSJwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwkJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCQl9CisJCQkJCWlmIChwZXBkLT53TWF4UGFja2V0U2l6ZSkgeworCQkJCQkJaWYgKDggPiBpc29rYWx0KSB7CisJCQkJCQkJb2thbHRbaXNva2FsdF0gPSBpOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2thbHRbJWldXG4iLCBcCisJCQkJCQkJb2thbHRbaXNva2FsdF0sIFwKKwkJCQkJCQlpc29rYWx0KTsKKwkJCQkJCQlpc29rYWx0Kys7CisJCQkJCQl9CisJCQkJCQlpZiAoOCA+IGlzb2tlcG4pIHsKKwkJCQkJCQlva2Vwbltpc29rZXBuXSA9IFwKKwkJCQkJCQlwZXBkLT5cCisJCQkJCQkJYkVuZHBvaW50QWRkcmVzcyAmIFwKKwkJCQkJCQkweDBGOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2tlcG5bJWldXG4iLCBcCisJCQkJCQkJb2tlcG5baXNva2Vwbl0sIFwKKwkJCQkJCQlpc29rZXBuKTsKKwkJCQkJCQlpc29rZXBuKys7CisJCQkJCQl9CisJCQkJCQlpZiAoOCA+IGlzb2ttcHMpIHsKKwkJCQkJCQlva21wc1tpc29rbXBzXSA9IFwKKwkJCQkJCQlsZTE2X3RvX2NwdShwZXBkLT5cCisJCQkJCQkJd01heFBhY2tldFNpemUpOworCQkJCQkJCUpPVCg0LFwKKwkJCQkJCQkiJWk9b2ttcHNbJWldXG4iLCBcCisJCQkJCQkJb2ttcHNbaXNva21wc10sIFwKKwkJCQkJCQlpc29rbXBzKTsKKwkJCQkJCQlpc29rbXBzKys7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoLTEgPT0gcGVhc3ljYXAtPlwKKwkJCQkJCQl2aWRlb19hbHRzZXR0aW5nX29mZikgeworCQkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQkJdmlkZW9fYWx0c2V0dGluZ19vZmYgPVwKKwkJCQkJCQkJCSBpOworCQkJCQkJCUpPVCg0LCAiJWk9dmlkZW9fIiBcCisJCQkJCQkJImFsdHNldHRpbmdfb2ZmICIgXAorCQkJCQkJCQkiPD09PT1cbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAiIFwKKwkJCQkJCQkiLT52aWRlb19hbHRzZXR0aW5nXyIgXAorCQkJCQkJCSJvZmYgYWxyZWFkeSBzZXRcbiIpOworCQkJCQkJCVNBWSgiLi4uLi4uICIgXAorCQkJCQkJCSJjb250aW51aW5nIHdpdGggIiBcCisJCQkJCQkJIiVpPXBlYXN5Y2FwLT52aWRlb18iIFwKKwkJCQkJCQkiYWx0c2V0dGluZ19vZmZcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCXZpZGVvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBVU0JfQ0xBU1NfQVVESU86IHsKKwkJCQkJaWYgKDB4MDIgIT0gYkludGVyZmFjZVN1YkNsYXNzKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmICghcGVhc3ljYXApIHsKKwkJCQkJCVNBWSgiTUlTVEFLRTogIiBcCisJCQkJCQkicGVhc3ljYXAgaXMgTlVMTFxuIik7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCQlpZiAocGVwZC0+d01heFBhY2tldFNpemUpIHsKKwkJCQkJCWlmICg4ID4gaXNva2FsdCkgeworCQkJCQkJCW9rYWx0W2lzb2thbHRdID0gaSA7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va2FsdFslaV1cbiIsIFwKKwkJCQkJCQlva2FsdFtpc29rYWx0XSwgXAorCQkJCQkJCWlzb2thbHQpOworCQkJCQkJCWlzb2thbHQrKzsKKwkJCQkJCX0KKwkJCQkJCWlmICg4ID4gaXNva2VwbikgeworCQkJCQkJCW9rZXBuW2lzb2tlcG5dID0gXAorCQkJCQkJCXBlcGQtPlwKKwkJCQkJCQliRW5kcG9pbnRBZGRyZXNzICYgXAorCQkJCQkJCTB4MEY7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va2VwblslaV1cbiIsIFwKKwkJCQkJCQlva2Vwbltpc29rZXBuXSwgXAorCQkJCQkJCWlzb2tlcG4pOworCQkJCQkJCWlzb2tlcG4rKzsKKwkJCQkJCX0KKwkJCQkJCWlmICg4ID4gaXNva21wcykgeworCQkJCQkJCW9rbXBzW2lzb2ttcHNdID0gXAorCQkJCQkJCWxlMTZfdG9fY3B1KHBlcGQtPlwKKwkJCQkJCQl3TWF4UGFja2V0U2l6ZSk7CisJCQkJCQkJSk9UKDQsXAorCQkJCQkJCSIlaT1va21wc1slaV1cbiIsXAorCQkJCQkJCW9rbXBzW2lzb2ttcHNdLCBcCisJCQkJCQkJaXNva21wcyk7CisJCQkJCQkJaXNva21wcysrOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKC0xID09IHBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ19vZmYpIHsKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmID1cCisJCQkJCQkJCQkgaTsKKwkJCQkJCQlKT1QoNCwgIiVpPWF1ZGlvXyIgXAorCQkJCQkJCSJhbHRzZXR0aW5nX29mZiAiIFwKKwkJCQkJCQkiPD09PT1cbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJCWF1ZGlvX2FsdHNldHRpbmdfb2ZmKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAiIFwKKwkJCQkJCQkiLT5hdWRpb19hbHRzZXR0aW5nXyIgXAorCQkJCQkJCSJvZmYgYWxyZWFkeSBzZXRcbiIpOworCQkJCQkJCVNBWSgiLi4uLi4uICIgXAorCQkJCQkJCSJjb250aW51aW5nIHdpdGggIiBcCisJCQkJCQkJIiVpPXBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ18iIFwKKwkJCQkJCQkib2ZmXG4iLAorCQkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQkJYXVkaW9fYWx0c2V0dGluZ19vZmYpOworCQkJCQkJfQorCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICgocGVwZC0+Ym1BdHRyaWJ1dGVzICYgXAorCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09XAorCQkJCQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldIGlzIGEgIEJVTEsgZW5kcG9pbnRcbiIsXAorCQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaik7CisJCX0gZWxzZSBpZiAoKHBlcGQtPmJtQXR0cmlidXRlcyAmIFwKKwkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PVwKKwkJCQkJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldIGlzIGFuICBJTlQgZW5kcG9pbnRcbiIsXAorCQkJCQkJYkludGVyZmFjZU51bWJlciwgaSwgaik7CisJCX0gZWxzZSB7CisJCQlKT1QoNCwgImludGZbJWldYWx0WyVpXWVuZFslaV0gaXMgYSAgQ1RSTCBlbmRwb2ludFxuIixcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJfQorCQlpZiAoMCA9PSBwZXBkLT53TWF4UGFja2V0U2l6ZSkgeworCQkJSk9UKDQsICJpbnRmWyVpXWFsdFslaV1lbmRbJWldICIgXAorCQkJCQkJImhhcyB6ZXJvIHBhY2tldCBzaXplXG4iLCBcCisJCQkJCQliSW50ZXJmYWNlTnVtYmVyLCBpLCBqKTsKKwkJfQorCX0KK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUEVSRk9STSBJTklUSUFMSVpBVElPTiBPRiBUSEUgUFJPQkVEIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitKT1QoNCwgImluaXRpYWxpemF0aW9uIGJlZ2lucyBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7Citzd2l0Y2ggKGJJbnRlcmZhY2VOdW1iZXIpIHsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgSU5URVJGQUNFIDAgSVMgVEhFIFZJREVPIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjYXNlIDA6IHsKKwlpZiAoIXBlYXN5Y2FwKSB7CisJCVNBWSgiTUlTVEFLRTogcGVhc3ljYXAgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoIWlzb2thbHQpIHsKKwkJU0FZKCJFUlJPUjogIG5vIHZpYWJsZSB2aWRlb19hbHRzZXR0aW5nX29uXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2FsdHNldHRpbmdfb24gPSBva2FsdFtpc29rYWx0IC0gMV07CisJCUpPVCg0LCAiJWk9dmlkZW9fYWx0c2V0dGluZ19vbiA8PT09PVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9fYWx0c2V0dGluZ19vbik7CisJfQorCWlmICghaXNva2VwbikgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIHZpZGVvX2VuZHBvaW50bnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnZpZGVvX2VuZHBvaW50bnVtYmVyID0gb2tlcG5baXNva2VwbiAtIDFdOworCQlKT1QoNCwgIiVpPXZpZGVvX2VuZHBvaW50bnVtYmVyXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCX0KKwlpZiAoIWlzb2ttcHMpIHsKKwkJU0FZKCJFUlJPUjogIG5vIHZpYWJsZSB2aWRlb19tYXhwYWNrZXRzaXplXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIERFQ0lERSBUSEUgVklERU8gU1RSRUFNSU5HIFBBUkFNRVRFUlMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCX0gZWxzZSB7CisJCW1heHBhY2tldHNpemUgPSBva21wc1tpc29rbXBzIC0gMV0gLSAxMDI0OworCQlpZiAoVVNCXzJfMF9NQVhQQUNLRVRTSVpFID4gbWF4cGFja2V0c2l6ZSkgeworCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplID0gbWF4cGFja2V0c2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZSA9IFwKKwkJCQkJCQlVU0JfMl8wX01BWFBBQ0tFVFNJWkU7CisJCX0KKwkJSk9UKDQsICIlaT12aWRlb19pc29jX21heGZyYW1lc2l6ZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpOworCQlpZiAoMCA+PSBwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgdmlkZW9faXNvY19tYXhmcmFtZXNpemVcbiIpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyA9IFZJREVPX0lTT0NfRlJBTUVTUEVSREVTQzsKKwkJSk9UKDQsICIlaT12aWRlb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCWlmICgwID49IHBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2MpIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgdmlkZW9faXNvY19mcmFtZXNwZXJkZXNjXG4iKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplID0gXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUgKiBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCUpPVCg0LCAiJWk9dmlkZW9faXNvY19idWZmZXJfc2l6ZVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSk7CisJCWlmICgoUEFHRV9TSVpFIDw8IFZJREVPX0lTT0NfT1JERVIpIDwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZSkgeworCQkJU0FZKCJNSVNUQUtFOiAiIFwKKwkJCQkicGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUgdG9vIGJpZ1xuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPnZpZGVvX2ludGVyZmFjZSkgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pbnRlcmZhY2UgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19hbHRzZXR0aW5nX29uKSB7CisJCVNBWSgiTUlTVEFLRTogIHZpZGVvX2FsdHNldHRpbmdfb24gaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19hbHRzZXR0aW5nX29mZikgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pbnRlcmZhY2Vfb2ZmIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICgtMSA9PSBwZWFzeWNhcC0+dmlkZW9fZW5kcG9pbnRudW1iZXIpIHsKKwkJU0FZKCJNSVNUQUtFOiAgdmlkZW9fZW5kcG9pbnRudW1iZXIgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZSkgeworCQlTQVkoIk1JU1RBS0U6ICB2aWRlb19pc29jX21heGZyYW1lc2l6ZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpIHsKKwkJU0FZKCJNSVNUQUtFOiAgdmlkZW9faXNvY19idWZmZXJfc2l6ZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQUxMT0NBVEUgTUVNT1JZIEZPUiBWSURFTyBCVUZGRVJTLiAgTElTVFMgTVVTVCBCRSBJTklUSUFMSVpFRCBGSVJTVC4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCUlOSVRfTElTVF9IRUFEKCYocGVhc3ljYXAtPnVyYl92aWRlb19oZWFkKSk7CisJcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCA9ICYocGVhc3ljYXAtPnVyYl92aWRlb19oZWFkKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgZnJhbWUgYnVmZmVycyBvZiBzaXplICVsaVxuIiwgIFwKKwkJCUZSQU1FX0JVRkZFUl9NQU5ZLCAobG9uZyBpbnQpRlJBTUVfQlVGRkVSX1NJWkUpOworCUpPVCg0LCAiLi4uLiBlYWNoIHNjYXR0ZXJlZCBvdmVyICVsaSBwYWdlc1xuIiwgXAorCQkJCQkJRlJBTUVfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworCWZvciAoayA9IDA7ICBrIDwgRlJBTUVfQlVGRkVSX01BTlk7ICBrKyspIHsKKwkJZm9yIChtID0gMDsgIG0gPCBGUkFNRV9CVUZGRVJfU0laRS9QQUdFX1NJWkU7ICBtKyspIHsKKwkJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ28pCisJCQkJU0FZKCJhdHRlbXB0aW5nIHRvIHJlYWxsb2NhdGUgZnJhbWUgIiBcCisJCQkJCQkJCSIgYnVmZmVyc1xuIik7CisJCQllbHNlIHsKKwkJCQlwYnVmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCh2b2lkICopTlVMTCA9PSBwYnVmKSB7CisJCQkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSAiXAorCQkJCQkJImJ1ZmZlciAlaSBwYWdlICVpXG4iLCBrLCBtKTsKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJfSBlbHNlCisJCQkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX3ZpZGVvX3BhZ2UgKz0gMTsKKwkJCQlwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2tdW21dLnBnbyA9IHBidWY7CisJCQl9CisJCQlwZWFzeWNhcC0+ZnJhbWVfYnVmZmVyW2tdW21dLnB0byA9IFwKKwkJCQkJcGVhc3ljYXAtPmZyYW1lX2J1ZmZlcltrXVttXS5wZ287CisJCX0KKwl9CisKKwlwZWFzeWNhcC0+ZnJhbWVfZmlsbCA9IDA7CisJcGVhc3ljYXAtPmZyYW1lX3JlYWQgPSAwOworCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBmcmFtZSBidWZmZXJzIGRvbmU6ICAlaSBwYWdlc1xuIiwgayAqIFwKKwkJCQkJCQkJbSk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIGZpZWxkIGJ1ZmZlcnMgb2Ygc2l6ZSAlbGlcbiIsICBcCisJCQlGSUVMRF9CVUZGRVJfTUFOWSwgKGxvbmcgaW50KUZJRUxEX0JVRkZFUl9TSVpFKTsKKwlKT1QoNCwgIi4uLi4gZWFjaCBzY2F0dGVyZWQgb3ZlciAlbGkgcGFnZXNcbiIsIFwKKwkJCQkJRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKTsKKworCWZvciAoayA9IDA7ICBrIDwgRklFTERfQlVGRkVSX01BTlk7ICBrKyspIHsKKwkJZm9yIChtID0gMDsgIG0gPCBGSUVMRF9CVUZGRVJfU0laRS9QQUdFX1NJWkU7ICBtKyspIHsKKwkJCWlmICgodm9pZCAqKU5VTEwgIT0gcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ28pIHsKKwkJCQlTQVkoIkVSUk9SOiBhdHRlbXB0aW5nIHRvIHJlYWxsb2NhdGUgIiBcCisJCQkJCQkJImZpZWxkIGJ1ZmZlcnNcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwYnVmID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCQkJCWlmICgodm9pZCAqKU5VTEwgPT0gcGJ1ZikgeworCQkJCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgZmllbGQiIFwKKwkJCQkJCSIgYnVmZmVyICVpIHBhZ2UgJWlcbiIsIGssIG0pOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fcGFnZSArPSAxOworCQkJCXBlYXN5Y2FwLT5maWVsZF9idWZmZXJba11bbV0ucGdvID0gcGJ1ZjsKKwkJCQl9CisJCQlwZWFzeWNhcC0+ZmllbGRfYnVmZmVyW2tdW21dLnB0byA9IFwKKwkJCQkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVttXS5wZ287CisJCX0KKwkJcGVhc3ljYXAtPmZpZWxkX2J1ZmZlcltrXVswXS5rb3VudCA9IDB4MDIwMDsKKwl9CisJcGVhc3ljYXAtPmZpZWxkX2ZpbGwgPSAwOworCXBlYXN5Y2FwLT5maWVsZF9wYWdlID0gMDsKKwlwZWFzeWNhcC0+ZmllbGRfcmVhZCA9IDA7CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mIGZpZWxkIGJ1ZmZlcnMgZG9uZTogICVpIHBhZ2VzXG4iLCBrICogXAorCQkJCQkJCQltKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgaXNvYyB2aWRlbyBidWZmZXJzIG9mIHNpemUgJWlcbiIsICBcCisJCQkJCVZJREVPX0lTT0NfQlVGRkVSX01BTlksIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpOworCUpPVCg0LCAiLi4uLiBlYWNoIG9jY3VweWluZyBjb250aWd1b3VzIG1lbW9yeSBwYWdlc1xuIik7CisKKwlmb3IgKGsgPSAwOyAgayA8IFZJREVPX0lTT0NfQlVGRkVSX01BTlk7IGsrKykgeworCQlwYnVmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIFZJREVPX0lTT0NfT1JERVIpOworCQlpZiAoTlVMTCA9PSBwYnVmKSB7CisJCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgaXNvYyB2aWRlbyBidWZmZXIgIiBcCisJCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb19wYWdlICs9IFwKKwkJCQkoKHVuc2lnbmVkIGludCkoMHgwMSA8PCBWSURFT19JU09DX09SREVSKSk7CisKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLnBnbyA9IHBidWY7CisJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcltrXS5wdG8gPSBwYnVmICsgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19idWZmZXJfc2l6ZTsKKwkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyW2tdLmtvdW50ID0gazsKKwl9CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mIGlzb2MgdmlkZW8gYnVmZmVycyBkb25lOiAlaSBwYWdlc1xuIiwgXAorCQkJCQlrICogKDB4MDEgPDwgVklERU9fSVNPQ19PUkRFUikpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBBTkQgSU5JVElBTElaRSBNVUxUSVBMRSBzdHJ1Y3QgdXJiIC4uLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIHN0cnVjdCB1cmIuXG4iLCBWSURFT19JU09DX0JVRkZFUl9NQU5ZKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJSk9UKDQsICJ1c2luZyAlaT1wZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfYnVmZmVyX3NpemUpOworCisJZm9yIChrID0gMDsgIGsgPCBWSURFT19JU09DX0JVRkZFUl9NQU5ZOyBrKyspIHsKKwkJcHVyYiA9IHVzYl9hbGxvY191cmIocGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYywgXAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKE5VTEwgPT0gcHVyYikgeworCQkJU0FZKCJFUlJPUjogdXNiX2FsbG9jX3VyYiByZXR1cm5lZCBOVUxMIGZvciBidWZmZXIgIiBcCisJCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl92aWRlb191cmIgKz0gMTsKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KKwkJcGRhdGFfdXJiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRhdGFfdXJiKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChOVUxMID09IHBkYXRhX3VyYikgeworCQkJU0FZKCJFUlJPUjogQ291bGQgbm90IGFsbG9jYXRlIHN0cnVjdCBkYXRhX3VyYi5cbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZQorCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fdmlkZW9fc3RydWN0ICs9IFwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZGF0YV91cmIpOworCisJCXBkYXRhX3VyYi0+cHVyYiA9IHB1cmI7CisJCXBkYXRhX3VyYi0+aXNidWYgPSBrOworCQlwZGF0YV91cmItPmxlbmd0aCA9IDA7CisJCWxpc3RfYWRkX3RhaWwoJihwZGF0YV91cmItPmxpc3RfaGVhZCksIFwKKwkJCQkJCXBlYXN5Y2FwLT5wdXJiX3ZpZGVvX2hlYWQpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICAuLi4gQU5EIElOSVRJQUxJWkUgVEhFTQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCWlmICghaykgeworCQkJSk9UKDQsICJpbml0aWFsaXppbmcgdmlkZW8gdXJicyB0aHVzOlxuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+aW50ZXJ2YWwgPSAxO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+ZGV2ID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZSIgXAorCQkJCQkiKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwlaSk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19lbmRwb2ludG51bWJlcik7CisJCQlKT1QoNCwgIiAgcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwZWFzeWNhcC0+IiBcCisJCQkJCSJ2aWRlb19pc29jX2J1ZmZlclsuXS5wZ287XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5zdGFydF9mcmFtZSA9IDA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJCUpPVCg0LCAiICBmb3IgKGogPSAwOyBqIDwgJWk7IGorKylcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCQlKT1QoNCwgIiAgICB7XG4iKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGoqJWk7XG4iLFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemUpOworCQkJSk9UKDQsICIgICAgfVxuIik7CisJCX0KKworCQlwdXJiLT5pbnRlcnZhbCA9IDE7CisJCXB1cmItPmRldiA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTsKKwkJcHVyYi0+cGlwZSA9IHVzYl9yY3Zpc29jcGlwZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsIFwKKwkJCQkJcGVhc3ljYXAtPnZpZGVvX2VuZHBvaW50bnVtYmVyKTsKKwkJcHVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcltrXS5wZ287CisJCXB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX2J1ZmZlcl9zaXplOworCQlwdXJiLT5jb21wbGV0ZSA9IGVhc3ljYXBfY29tcGxldGU7CisJCXB1cmItPmNvbnRleHQgPSBwZWFzeWNhcDsKKwkJcHVyYi0+c3RhcnRfZnJhbWUgPSAwOworCQlwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHBlYXN5Y2FwLT52aWRlb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCWZvciAoaiA9IDA7ICBqIDwgcGVhc3ljYXAtPnZpZGVvX2lzb2NfZnJhbWVzcGVyZGVzYzsgaisrKSB7CisJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBqICogXAorCQkJCQlwZWFzeWNhcC0+dmlkZW9faXNvY19tYXhmcmFtZXNpemU7CisJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBcCisJCQkJCXBlYXN5Y2FwLT52aWRlb19pc29jX21heGZyYW1lc2l6ZTsKKwkJfQorCX0KKwlKT1QoNCwgImFsbG9jYXRpb24gb2YgJWkgc3RydWN0IHVyYiBkb25lLlxuIiwgayk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgU0FWRSBQT0lOVEVSIHBlYXN5Y2FwIElOIFRISVMgSU5URVJGQUNFLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIFZJREVPIERFVklDRSBDQU4gQkUgUkVHSVNURVJFRCBOT1csIEFTIElUIElTIFJFQURZLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiAoIWRlZmluZWQoRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQpKQorCWlmICgwICE9ICh1c2JfcmVnaXN0ZXJfZGV2KHB1c2JfaW50ZXJmYWNlLCAmZWFzeWNhcF9jbGFzcykpKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlIik7CisJCXVzYl9zZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UsIE5VTEwpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKSsrOworCVNBWSgiZWFzeWNhcCBhdHRhY2hlZCB0byBtaW5vciAjJWRcbiIsIHB1c2JfaW50ZXJmYWNlLT5taW5vcik7CisJYnJlYWs7CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisJcHZpZGVvX2RldmljZSA9IChzdHJ1Y3QgdmlkZW9fZGV2aWNlICopXAorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICgoc3RydWN0IHZpZGVvX2RldmljZSAqKU5VTEwgPT0gcHZpZGVvX2RldmljZSkgeworCQlTQVkoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgc3RydWN0dXJlIHZpZGVvX2RldmljZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlpZiAoVklERU9fREVWSUNFX01BTlkgPD0gdmlkZW9fZGV2aWNlX21hbnkpIHsKKwkJU0FZKCJFUlJPUjogVG9vIG1hbnkgL2Rldi92aWRlb3NcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcHZpZGVvX2FycmF5W3ZpZGVvX2RldmljZV9tYW55XSA9IHB2aWRlb19kZXZpY2U7ICB2aWRlb19kZXZpY2VfbWFueSsrOworCisJc3RyY3B5KCZwdmlkZW9fZGV2aWNlLT5uYW1lWzBdLCAiZWFzeWNhcGRjNjAiKTsKKyNpZiBkZWZpbmVkKEVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTKQorCXB2aWRlb19kZXZpY2UtPmZvcHMgPSAmdjRsMl9mb3BzOworI2Vsc2UKKwlwdmlkZW9fZGV2aWNlLT5mb3BzID0gJmVhc3ljYXBfZm9wczsKKyNlbmRpZiAvKkVBU1lDQVBfTkVFRFNfVjRMMl9GT1BTKi8KKwlwdmlkZW9fZGV2aWNlLT5taW5vciA9IC0xOworCXB2aWRlb19kZXZpY2UtPnJlbGVhc2UgPSAodm9pZCAqKSgmdmlkZW9kZXZfcmVsZWFzZSk7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YShwdmlkZW9fZGV2aWNlLCAodm9pZCAqKXBlYXN5Y2FwKTsKKworCXJjID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHB2aWRlb19kZXZpY2UsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwlpZiAoMCAhPSByYykgeworCQllcnIoIk5vdCBhYmxlIHRvIHJlZ2lzdGVyIHdpdGggdmlkZW9kZXYiKTsKKwkJdmlkZW9kZXZfcmVsZWFzZShwdmlkZW9fZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPnB2aWRlb19kZXZpY2UgPSBwdmlkZW9fZGV2aWNlOworCQkocGVhc3ljYXAtPnJlZ2lzdGVyZWRfdmlkZW8pKys7CisJCUpPVCg0LCAicmVnaXN0ZXJlZCB3aXRoIHZpZGVvZGV2OiAlaT1taW5vclxuIiwgXAorCQkJCQkJCXB2aWRlb19kZXZpY2UtPm1pbm9yKTsKKwl9CisvKl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eKi8KKyNlbmRpZiAvKkVBU1lDQVBfSVNfVklERU9ERVZfQ0xJRU5UKi8KKwlicmVhazsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlRFUkZBQ0UgMSBJUyBUSEUgQVVESU8gQ09OVFJPTCBJTlRFUkZBQ0UKKyAqICBJTlRFUkZBQ0UgMiBJUyBUSEUgQVVESU8gU1RSRUFNSU5HIElOVEVSRkFDRQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgMTogeworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNBVkUgUE9JTlRFUiBwZWFzeWNhcCBJTiBJTlRFUkZBQ0UgMQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisJSk9UKDQsICJubyBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7CisJYnJlYWs7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2Nhc2UgMjogeworCWlmICghcGVhc3ljYXApIHsKKwkJU0FZKCJNSVNUQUtFOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICghaXNva2FsdCkgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX2FsdHNldHRpbmdfb25cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbiA9IG9rYWx0W2lzb2thbHQgLSAxXTsKKwkJSk9UKDQsICIlaT1hdWRpb19hbHRzZXR0aW5nX29uIDw9PT09XG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbik7CisJfQorCWlmICghaXNva2VwbikgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX2VuZHBvaW50bnVtYmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfSBlbHNlIHsKKwkJcGVhc3ljYXAtPmF1ZGlvX2VuZHBvaW50bnVtYmVyID0gb2tlcG5baXNva2VwbiAtIDFdOworCQlKT1QoNCwgIiVpPWF1ZGlvX2VuZHBvaW50bnVtYmVyXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcik7CisJfQorCWlmICghaXNva21wcykgeworCQlTQVkoIkVSUk9SOiAgbm8gdmlhYmxlIGF1ZGlvX21heHBhY2tldHNpemVcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUgPSBva21wc1tpc29rbXBzIC0gMV07CisJCUpPVCg0LCAiJWk9YXVkaW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJaWYgKDAgPj0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKSB7CisJCQlTQVkoIkVSUk9SOiAgYmFkIGF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplXG4iKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCWlmICg5ID09IHBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSkgeworCQkJcGVhc3ljYXAtPmlsayB8PSAweDAyOworCQkJU0FZKCJoYXJkd2FyZSBpcyBGT1VSLUNWQlNcbiIpOworCQkJcGVhc3ljYXAtPm1pY3JvcGhvbmUgPSB0cnVlOworCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCA9IDQ7CisJCX0gZWxzZSBpZiAoMjU2ID09IHBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSkgeworCQkJcGVhc3ljYXAtPmlsayAmPSB+MHgwMjsKKwkJCVNBWSgiaGFyZHdhcmUgaXMgQ1ZCUytTLVZJREVPXG4iKTsKKwkJCXBlYXN5Y2FwLT5taWNyb3Bob25lID0gZmFsc2U7CisJCQlwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50ID0gNDsKKwkJfSBlbHNlIHsKKwkJCVNBWSgiaGFyZHdhcmUgaXMgdW5pZGVudGlmaWVkOlxuIik7CisJCQlTQVkoIiVpPWF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX21heGZyYW1lc2l6ZSk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCisJCXBlYXN5Y2FwLT5hdWRpb19ieXRlc19wZXJfZnJhZ21lbnQgPSBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQgKiBcCisJCQkJCQkJCVBBR0VfU0laRSA7CisJCXBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55ID0gKEFVRElPX0ZSQUdNRU5UX01BTlkgKiBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpOworCisJCUpPVCg0LCAiJTZpPUFVRElPX0ZSQUdNRU5UX01BTllcbiIsIEFVRElPX0ZSQUdNRU5UX01BTlkpOworCQlKT1QoNCwgIiU2aT1hdWRpb19wYWdlc19wZXJfZnJhZ21lbnRcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCk7CisJCUpPVCg0LCAiJTZpPWF1ZGlvX2J5dGVzX3Blcl9mcmFnbWVudFxuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYnl0ZXNfcGVyX2ZyYWdtZW50KTsKKwkJSk9UKDQsICIlNmk9YXVkaW9fYnVmZmVyX3BhZ2VfbWFueVxuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSk7CisKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyA9IDEyODsKKworCQlKT1QoNCwgIiVpPWF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzY1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJaWYgKDAgPj0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYykgeworCQkJU0FZKCJFUlJPUjogIGJhZCBhdWRpb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZSA9IFwKKwkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUgKiBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYzsKKwkJSk9UKDQsICIlaT1hdWRpb19pc29jX2J1ZmZlcl9zaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJaWYgKEFVRElPX0lTT0NfQlVGRkVSX1NJWkUgPCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKSB7CisJCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19pc29jX2J1ZmZlcl9zaXplIGJpZ2dlciAiCisJCQkidGhhbiAlbGk9QVVESU9fSVNPQ19CVUZGRVJfU0laRVxuIiwgXAorCQkJCQkJQVVESU9fSVNPQ19CVUZGRVJfU0laRSk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCWlmICgtMSA9PSBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2ludGVyZmFjZSBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb24pIHsKKwkJU0FZKCJNSVNUQUtFOiAgYXVkaW9fYWx0c2V0dGluZ19vbiBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb2ZmKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2ludGVyZmFjZV9vZmYgaXMgdW5zZXRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKC0xID09IHBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcikgeworCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19lbmRwb2ludG51bWJlciBpcyB1bnNldFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAoLTEgPT0gcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKSB7CisJCVNBWSgiTUlTVEFLRTogIGF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmICgtMSA9PSBwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZSkgeworCQlTQVkoIk1JU1RBS0U6ICBhdWRpb19pc29jX2J1ZmZlcl9zaXplIGlzIHVuc2V0XG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBNRU1PUlkgRk9SIEFVRElPIEJVRkZFUlMuICBMSVNUUyBNVVNUIEJFIElOSVRJQUxJWkVEIEZJUlNULgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSU5JVF9MSVNUX0hFQUQoJihwZWFzeWNhcC0+dXJiX2F1ZGlvX2hlYWQpKTsKKwlwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkID0gJihwZWFzeWNhcC0+dXJiX2F1ZGlvX2hlYWQpOworCisJSk9UKDQsICJhbGxvY2F0aW5nIGFuIGF1ZGlvIGJ1ZmZlclxuIik7CisJSk9UKDQsICIuLi4uIHNjYXR0ZXJlZCBvdmVyICVpIHBhZ2VzXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55KTsKKworCWZvciAoayA9IDA7ICBrIDwgcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcl9wYWdlX21hbnk7ICBrKyspIHsKKwkJaWYgKCh2b2lkICopTlVMTCAhPSBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbykgeworCQkJU0FZKCJFUlJPUjogYXR0ZW1wdGluZyB0byByZWFsbG9jYXRlIGF1ZGlvIGJ1ZmZlcnNcbiIpOworCQl9IGVsc2UgeworCQkJcGJ1ZiA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwkJCWlmICgodm9pZCAqKU5VTEwgPT0gcGJ1ZikgeworCQkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBhdWRpbyAiIFwKKwkJCQkJCQkiYnVmZmVyIHBhZ2UgJWlcbiIsIGspOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfSBlbHNlCisJCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSArPSAxOworCisJCQlwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbyA9IHBidWY7CisJCX0KKwkJcGVhc3ljYXAtPmF1ZGlvX2J1ZmZlcltrXS5wdG8gPSBwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2tdLnBnbzsKKwl9CisKKwlwZWFzeWNhcC0+YXVkaW9fZmlsbCA9IDA7CisJcGVhc3ljYXAtPmF1ZGlvX3JlYWQgPSAwOworCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBhdWRpbyBidWZmZXIgZG9uZTogICVpIHBhZ2VzXG4iLCBrKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlKT1QoNCwgImFsbG9jYXRpbmcgJWkgaXNvYyBhdWRpbyBidWZmZXJzIG9mIHNpemUgJWlcbiIsICBcCisJCUFVRElPX0lTT0NfQlVGRkVSX01BTlksIHBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwlKT1QoNCwgIi4uLi4gZWFjaCBvY2N1cHlpbmcgY29udGlndW91cyBtZW1vcnkgcGFnZXNcbiIpOworCisJZm9yIChrID0gMDsgIGsgPCBBVURJT19JU09DX0JVRkZFUl9NQU5ZOyAgaysrKSB7CisJCXBidWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgQVVESU9fSVNPQ19PUkRFUik7CisJCWlmIChOVUxMID09IHBidWYpIHsKKwkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBpc29jIGF1ZGlvIGJ1ZmZlciAiIFwKKwkJCQkJCQkiJWlcbiIsIGspOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZQorCQkJcGVhc3ljYXAtPmFsbG9jYXRpb25fYXVkaW9fcGFnZSArPSBcCisJCQkJKCh1bnNpZ25lZCBpbnQpKDB4MDEgPDwgQVVESU9fSVNPQ19PUkRFUikpOworCisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5wZ28gPSBwYnVmOworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJba10ucHRvID0gcGJ1ZiArIFwKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemU7CisJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcltrXS5rb3VudCA9IGs7CisJfQorCUpPVCg0LCAiYWxsb2NhdGlvbiBvZiBpc29jIGF1ZGlvIGJ1ZmZlcnMgZG9uZS5cbiIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBBTExPQ0FURSBBTkQgSU5JVElBTElaRSBNVUxUSVBMRSBzdHJ1Y3QgdXJiIC4uLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJSk9UKDQsICJhbGxvY2F0aW5nICVpIHN0cnVjdCB1cmIuXG4iLCBBVURJT19JU09DX0JVRkZFUl9NQU5ZKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2NcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJSk9UKDQsICJ1c2luZyAlaT1wZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemVcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwlKT1QoNCwgInVzaW5nICVpPXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplXG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKworCWZvciAoayA9IDA7ICBrIDwgQVVESU9fSVNPQ19CVUZGRVJfTUFOWTsgaysrKSB7CisJCXB1cmIgPSB1c2JfYWxsb2NfdXJiKHBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2MsIFwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChOVUxMID09IHB1cmIpIHsKKwkJCVNBWSgiRVJST1I6IHVzYl9hbGxvY191cmIgcmV0dXJuZWQgTlVMTCBmb3IgYnVmZmVyICIgXAorCQkJCQkJCSIlaVxuIiwgayk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfSBlbHNlCisJCQlwZWFzeWNhcC0+YWxsb2NhdGlvbl9hdWRpb191cmIgKz0gMSA7CisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCisJCXBkYXRhX3VyYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXRhX3VyYiksIEdGUF9LRVJORUwpOworCQlpZiAoTlVMTCA9PSBwZGF0YV91cmIpIHsKKwkJCVNBWSgiRVJST1I6IENvdWxkIG5vdCBhbGxvY2F0ZSBzdHJ1Y3QgZGF0YV91cmIuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9IGVsc2UKKwkJCXBlYXN5Y2FwLT5hbGxvY2F0aW9uX2F1ZGlvX3N0cnVjdCArPSBcCisJCQkJCQlzaXplb2Yoc3RydWN0IGRhdGFfdXJiKTsKKworCQlwZGF0YV91cmItPnB1cmIgPSBwdXJiOworCQlwZGF0YV91cmItPmlzYnVmID0gazsKKwkJcGRhdGFfdXJiLT5sZW5ndGggPSAwOworCQlsaXN0X2FkZF90YWlsKCYocGRhdGFfdXJiLT5saXN0X2hlYWQpLCBcCisJCQkJCQlwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgLi4uIEFORCBJTklUSUFMSVpFIFRIRU0KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQlpZiAoIWspIHsKKwkJCUpPVCg0LCAiaW5pdGlhbGl6aW5nIGF1ZGlvIHVyYnMgdGh1czpcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPmludGVydmFsID0gMTtcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPmRldiA9IHBlYXN5Y2FwLT5wdXNiX2RldmljZTtcbiIpOworCQkJSk9UKDQsICIgIHB1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUocGVhc3ljYXAtPiIgXAorCQkJCQkicHVzYl9kZXZpY2UsJWkpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fZW5kcG9pbnRudW1iZXIpOworCQkJSk9UKDQsICIgIHB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQO1xuIik7CisJCQlKT1QoNCwgIiAgcHVyYi0+dHJhbnNmZXJfYnVmZmVyID0gIiBcCisJCQkJInBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlclsuXS5wZ287XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gJWk7XG4iLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2J1ZmZlcl9zaXplKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb21wbGV0ZSA9IGVhc3lzbmRfY29tcGxldGU7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5zdGFydF9mcmFtZSA9IDA7XG4iKTsKKwkJCUpPVCg0LCAiICBwdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjKTsKKwkJCUpPVCg0LCAiICBmb3IgKGogPSAwOyBqIDwgJWk7IGorKylcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfZnJhbWVzcGVyZGVzYyk7CisJCQlKT1QoNCwgIiAgICB7XG4iKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGoqJWk7XG4iLFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplKTsKKwkJCUpPVCg0LCAiICAgIHB1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9ICVpO1xuIiwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemUpOworCQkJSk9UKDQsICIgICAgfVxuIik7CisJCQl9CisKKwkJcHVyYi0+aW50ZXJ2YWwgPSAxOworCQlwdXJiLT5kZXYgPSBwZWFzeWNhcC0+cHVzYl9kZXZpY2U7CisJCXB1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUocGVhc3ljYXAtPnB1c2JfZGV2aWNlLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19lbmRwb2ludG51bWJlcik7CisJCXB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQlwdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJba10ucGdvOworCQlwdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19idWZmZXJfc2l6ZTsKKwkJcHVyYi0+Y29tcGxldGUgPSBlYXN5c25kX2NvbXBsZXRlOworCQlwdXJiLT5jb250ZXh0ID0gcGVhc3ljYXA7CisJCXB1cmItPnN0YXJ0X2ZyYW1lID0gMDsKKwkJcHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBwZWFzeWNhcC0+YXVkaW9faXNvY19mcmFtZXNwZXJkZXNjOworCQlmb3IgKGogPSAwOyAgaiA8IHBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7IGorKykgeworCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaiAqIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplOworCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9faXNvY19tYXhmcmFtZXNpemU7CisJCX0KKwl9CisJSk9UKDQsICJhbGxvY2F0aW9uIG9mICVpIHN0cnVjdCB1cmIgZG9uZS5cbiIsIGspOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBTQVZFIFBPSU5URVIgcGVhc3ljYXAgSU4gVEhJUyBJTlRFUkZBQ0UuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBwZWFzeWNhcCk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFRIRSBBVURJTyBERVZJQ0UgQ0FOIEJFIFJFR0lTVEVSRUQgTk9XLCBBUyBJVCBJUyBSRUFEWS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXJjID0gdXNiX3JlZ2lzdGVyX2RldihwdXNiX2ludGVyZmFjZSwgJmVhc3lzbmRfY2xhc3MpOworCWlmICgwICE9IHJjKSB7CisJCWVycigiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKHB1c2JfaW50ZXJmYWNlLCBOVUxMKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfSBlbHNlCisJCShwZWFzeWNhcC0+cmVnaXN0ZXJlZF9hdWRpbykrKzsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgTEVUIFRIRSBVU0VSIEtOT1cgV0hBVCBOT0RFIFRIRSBBVURJTyBERVZJQ0UgSVMgQVRUQUNIRUQgVE8uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlTQVkoImVhc3lzbmQgYXR0YWNoZWQgdG8gbWlub3IgIyVkXG4iLCBwdXNiX2ludGVyZmFjZS0+bWlub3IpOworCWJyZWFrOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTlRFUkZBQ0VTIE9USEVSIFRIQU4gMCwgMSBBTkQgMiBBUkUgVU5FWFBFQ1RFRAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitkZWZhdWx0OiB7CisJSk9UKDQsICJFUlJPUjogdW5leHBlY3RlZCBpbnRlcmZhY2UgJWlcbiIsIGJJbnRlcmZhY2VOdW1iZXIpOworCXJldHVybiAtRUlOVkFMOworfQorfQorSk9UKDQsICJlbmRzIHN1Y2Nlc3NmdWxseSBmb3IgaW50ZXJmYWNlICVpXG4iLCBcCisJCQkJcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvci0+YkludGVyZmFjZU51bWJlcik7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgV0hFTiBUSElTIEZVTkNUSU9OIElTIENBTExFRCBUSEUgREVWSUNFIEhBUyBBTFJFQURZIEJFRU4gUEhZU0lDQUxMWQorICogIFVOUExVR0dFRC4KKyAqICBIRU5DRSBwZWFzeWNhcC0+cHVzYl9kZXZpY2UgSVMgTk8gTE9OR0VSIFZBTElEIEFORCBNVVNUIEJFIFNFVCBUTyBOVUxMLgorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit2b2lkCitlYXN5Y2FwX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGVyZmFjZSkKK3sKK3N0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnB1c2JfaG9zdF9pbnRlcmZhY2U7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICpwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yOworX191OCBiSW50ZXJmYWNlTnVtYmVyOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CitpbnQgbWlub3IsIG07CisKK0pPVCg0LCAiXG4iKTsKKworaWYgKChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKU5VTEwgPT0gcHVzYl9pbnRlcmZhY2UpIHsKKwlKT1QoNCwgIkVSUk9SOiBwdXNiX2ludGVyZmFjZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CitwdXNiX2hvc3RfaW50ZXJmYWNlID0gcHVzYl9pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworaWYgKChzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICopTlVMTCA9PSBwdXNiX2hvc3RfaW50ZXJmYWNlKSB7CisJSk9UKDQsICJFUlJPUjogcHVzYl9ob3N0X2ludGVyZmFjZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CitwdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yID0gJihwdXNiX2hvc3RfaW50ZXJmYWNlLT5kZXNjKTsKK2lmICgoc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqKU5VTEwgPT0gcHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvcikgeworCUpPVCg0LCAiRVJST1I6IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorYkludGVyZmFjZU51bWJlciA9IHB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3ItPmJJbnRlcmZhY2VOdW1iZXI7CittaW5vciA9IHB1c2JfaW50ZXJmYWNlLT5taW5vcjsKK0pPVCg0LCAiaW50ZlslaV06IG1pbm9yPSVpXG4iLCBiSW50ZXJmYWNlTnVtYmVyLCBtaW5vcik7CisKK3BlYXN5Y2FwID0gdXNiX2dldF9pbnRmZGF0YShwdXNiX2ludGVyZmFjZSk7CitpZiAoKHN0cnVjdCBlYXN5Y2FwICopTlVMTCA9PSBwZWFzeWNhcCkKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKK2Vsc2UgeworCXBlYXN5Y2FwLT5wdXNiX2RldmljZSA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEw7CisJc3dpdGNoIChiSW50ZXJmYWNlTnVtYmVyKSB7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJY2FzZSAwOiB7CisJCWlmICgoc3RydWN0IGxpc3RfaGVhZCAqKU5VTEwgIT0gcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCkgeworCQkJSk9UKDQsICJraWxsaW5nIHZpZGVvIHVyYnNcbiIpOworCQkJbSA9IDA7CisJCQlsaXN0X2Zvcl9lYWNoKHBsaXN0X2hlYWQsIChwZWFzeWNhcC0+cHVyYl92aWRlb19oZWFkKSkKKwkJCQl7CisJCQkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBcCisJCQkJCQlzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCQkJaWYgKChzdHJ1Y3QgZGF0YV91cmIgKilOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCQlpZiAoKHN0cnVjdCB1cmIgKilOVUxMICE9IFwKKwkJCQkJCQlwZGF0YV91cmItPnB1cmIpIHsKKwkJCQkJCXVzYl9raWxsX3VyYihwZGF0YV91cmItPnB1cmIpOworCQkJCQkJbSsrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJSk9UKDQsICIlaSB2aWRlbyB1cmJzIGtpbGxlZFxuIiwgbSk7CisJCX0gZWxzZQorCQkJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1cmJfdmlkZW9faGVhZCBpcyBOVUxMXG4iKTsKKwkJYnJlYWs7CisJfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWNhc2UgMjogeworCQlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJCUpPVCg0LCAia2lsbGluZyBhdWRpbyB1cmJzXG4iKTsKKwkJCW0gPSAwOworCQkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCBcCisJCQkJCQkocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIFwKKwkJCQkJCXN0cnVjdCBkYXRhX3VyYiwgbGlzdF9oZWFkKTsKKwkJCQlpZiAoKHN0cnVjdCBkYXRhX3VyYiAqKU5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gXAorCQkJCQkJCXBkYXRhX3VyYi0+cHVyYikgeworCQkJCQkJdXNiX2tpbGxfdXJiKHBkYXRhX3VyYi0+cHVyYik7CisJCQkJCQltKys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlKT1QoNCwgIiVpIGF1ZGlvIHVyYnMga2lsbGVkXG4iLCBtKTsKKwkJfSBlbHNlCisJCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkIGlzIE5VTExcbiIpOworCQlicmVhazsKKwl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIERFUkVHSVNURVIKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzd2l0Y2ggKGJJbnRlcmZhY2VOdW1iZXIpIHsKK2Nhc2UgMDogeworI2lmICghZGVmaW5lZChFQVNZQ0FQX0lTX1ZJREVPREVWX0NMSUVOVCkpCisJaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwkJU0FZKCJFUlJPUjogcGVhc3ljYXAgaGFzIGJlY29tZSBOVUxMXG4iKTsKKwl9IGVsc2UgeworCQlsb2NrX2tlcm5lbCgpOworCQl1c2JfZGVyZWdpc3Rlcl9kZXYocHVzYl9pbnRlcmZhY2UsICZlYXN5Y2FwX2NsYXNzKTsKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKS0tOworCisJCUpPVCg0LCAiaW50ZlslaV06IHVzYl9kZXJlZ2lzdGVyX2RldigpXG4iLCBiSW50ZXJmYWNlTnVtYmVyKTsKKwkJdW5sb2NrX2tlcm5lbCgpOworCQlTQVkoImVhc3ljYXAgZGV0YWNoZWQgZnJvbSBtaW5vciAjJWRcbiIsIG1pbm9yKTsKKwl9CisvKnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2Ki8KKyNlbHNlCisJaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApCisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJZWxzZSB7CisJCWxvY2tfa2VybmVsKCk7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHBlYXN5Y2FwLT5wdmlkZW9fZGV2aWNlKTsKKwkJKHBlYXN5Y2FwLT5yZWdpc3RlcmVkX3ZpZGVvKS0tOworCQl1bmxvY2tfa2VybmVsKCk7CisJCUpPVCg0LCAidW5yZWdpc3RlcmVkIHdpdGggdmlkZW9kZXY6ICVpPW1pbm9yXG4iLCBcCisJCQkJCQkJcHZpZGVvX2RldmljZS0+bWlub3IpOworCX0KKy8qXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4qLworI2VuZGlmIC8qRUFTWUNBUF9JU19WSURFT0RFVl9DTElFTlQqLworCWJyZWFrOworfQorY2FzZSAyOiB7CisJbG9ja19rZXJuZWwoKTsKKworCXVzYl9kZXJlZ2lzdGVyX2RldihwdXNiX2ludGVyZmFjZSwgJmVhc3lzbmRfY2xhc3MpOworCWlmICgoc3RydWN0IGVhc3ljYXAgKilOVUxMICE9IHBlYXN5Y2FwKQorCQkocGVhc3ljYXAtPnJlZ2lzdGVyZWRfYXVkaW8pLS07CisKKwlKT1QoNCwgImludGZbJWldOiB1c2JfZGVyZWdpc3Rlcl9kZXYoKVxuIiwgYkludGVyZmFjZU51bWJlcik7CisJdW5sb2NrX2tlcm5lbCgpOworCisJU0FZKCJlYXN5c25kIGRldGFjaGVkIGZyb20gbWlub3IgIyVkXG4iLCBtaW5vcik7CisJYnJlYWs7Cit9CitkZWZhdWx0OgorCWJyZWFrOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxMIGVhc3ljYXBfZGVsZXRlKCkgSUYgTk8gUkVNQUlOSU5HIFJFRkVSRU5DRVMgVE8gcGVhc3ljYXAKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgZWFzeWNhcCAqKU5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBoYXMgYmVjb21lIE5VTExcbiIpOworCVNBWSgiY2Fubm90IGNhbGwga3JlZl9wdXQoKVxuIik7CisJU0FZKCJlbmRpbmcgdW5zdWNjZXNzZnVsbHk6IG1heSBjYXVzZSBtZW1vcnkgbGVha1xuIik7CisJcmV0dXJuOworfQoraWYgKCFwZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlciBpcyB6ZXJvICIgXAorCQkJCQkJInNvIGNhbm5vdCBjYWxsIGtyZWZfcHV0KClcbiIpOworCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5OiBtYXkgY2F1c2UgbWVtb3J5IGxlYWtcbiIpOworCXJldHVybjsKK30KK0pPVCg0LCAiaW50ZlslaV06IGtyZWZfcHV0KCkgd2l0aCAlaT1wZWFzeWNhcC0+a3JlZi5yZWZjb3VudC5jb3VudGVyXG4iLCBcCisJCWJJbnRlcmZhY2VOdW1iZXIsIChpbnQpcGVhc3ljYXAtPmtyZWYucmVmY291bnQuY291bnRlcik7CitrcmVmX3B1dCgmcGVhc3ljYXAtPmtyZWYsIGVhc3ljYXBfZGVsZXRlKTsKK0pPVCg0LCAiaW50ZlslaV06IGtyZWZfcHV0KCkgZG9uZS5cbiIsIGJJbnRlcmZhY2VOdW1iZXIpOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitKT1QoNCwgImVuZHNcbiIpOworcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IF9faW5pdAorZWFzeWNhcF9tb2R1bGVfaW5pdCh2b2lkKQoreworaW50IHJlc3VsdDsKKworU0FZKCI9PT09PT09PWVhc3ljYXA9PT09PT09XG4iKTsKK0pPVCg0LCAiYmVnaW5zLiAgJWk9ZGVidWdcbiIsIGVhc3ljYXBfZGVidWcpOworU0FZKCJ2ZXJzaW9uOiAiIEVBU1lDQVBfRFJJVkVSX1ZFUlNJT04gIlxuIik7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFR0lTVEVSIFRISVMgRFJJVkVSIFdJVEggVEhFIFVTQiBTVUJTWVRFTS4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJyZWdpc3RlcmluZyBkcml2ZXIgZWFzeWNhcFxuIik7CisKK3Jlc3VsdCA9IHVzYl9yZWdpc3RlcigmZWFzeWNhcF91c2JfZHJpdmVyKTsKK2lmICgwICE9IHJlc3VsdCkKKwlTQVkoIkVSUk9SOiAgdXNiX3JlZ2lzdGVyIHJldHVybmVkICVpXG4iLCByZXN1bHQpOworCitKT1QoNCwgImVuZHNcbiIpOworcmV0dXJuIHJlc3VsdDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgX19leGl0CitlYXN5Y2FwX21vZHVsZV9leGl0KHZvaWQpCit7CitKT1QoNCwgImJlZ2luc1xuIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgREVSRUdJU1RFUiBUSElTIERSSVZFUiBXSVRIIFRIRSBVU0IgU1VCU1lURU0uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VzYl9kZXJlZ2lzdGVyKCZlYXN5Y2FwX3VzYl9kcml2ZXIpOworCitKT1QoNCwgImVuZHNcbiIpOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCittb2R1bGVfaW5pdChlYXN5Y2FwX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGVhc3ljYXBfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJSLk0uIFRob21hcyA8cm10aG9tYXNAc2Npb2x1cy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRUFTWUNBUF9EUklWRVJfREVTQ1JJUFRJT04pOworTU9EVUxFX1ZFUlNJT04oRUFTWUNBUF9EUklWRVJfVkVSU0lPTik7CisjaWYgZGVmaW5lZChFQVNZQ0FQX0RFQlVHKQorTU9EVUxFX1BBUk1fREVTQyhlYXN5Y2FwX2RlYnVnLCAiZGVidWc6IDAgKGRlZmF1bHQpLCAxLCAyLC4uLiIpOworI2VuZGlmIC8qRUFTWUNBUF9ERUJVRyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NldHRpbmdzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NldHRpbmdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkOTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc2V0dGluZ3MuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgZWFzeWNhcF9zZXR0aW5ncy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIFIuTS4gVGhvbWFzICA8cm10aG9tYXNAc2Npb2x1cy5vcmc+CisgKgorICoKKyAqICBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImVhc3ljYXAuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX2RlYnVnLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIExFQVNUIFNJR05JRklDQU5UIEJJVCBPRiBlYXN5Y2FwX3N0YW5kYXJkLm1hc2sgSEFTIE1FQU5JTkc6CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAwID0+IDI1IGZwcworICogICAgICAgICAgICAgICAgICAgICAgICAgMSA9PiAzMCBmcHMKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworY29uc3Qgc3RydWN0IGVhc3ljYXBfc3RhbmRhcmQgZWFzeWNhcF9zdGFuZGFyZFtdID0geworeworLm1hc2sgPSAweDAwMEYgJiBQQUxfQkdISU4gLAorLnY0bDJfc3RhbmRhcmQgPSB7CisJLmluZGV4ID0gUEFMX0JHSElOLAorCS5pZCA9IChWNEwyX1NURF9QQUxfQiB8IFY0TDJfU1REX1BBTF9HIHwgVjRMMl9TVERfUEFMX0ggfCBcCisJCQkJCVY0TDJfU1REX1BBTF9JIHwgVjRMMl9TVERfUEFMX04pLAorCS5uYW1lID0gIlBBTF9CR0hJTiIsCisJLmZyYW1lcGVyaW9kID0gezEsIDI1fSwKKwkuZnJhbWVsaW5lcyA9IDYyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KKwl9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLm1hc2sgPSAweDAwMEYgJiBOVFNDX05fNDQzICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTl80NDMsCisJLmlkID0gVjRMMl9TVERfVU5LTk9XTiwKKwkubmFtZSA9ICJOVFNDX05fNDQzIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNDgwLAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgUEFMX05jICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFBBTF9OYywKKwkuaWQgPSBWNEwyX1NURF9QQUxfTmMsCisJLm5hbWUgPSAiUEFMX05jIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNjI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19OICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTiwKKwkuaWQgPSBWNEwyX1NURF9VTktOT1dOLAorCS5uYW1lID0gIk5UU0NfTiIsCisJLmZyYW1lcGVyaW9kID0gezEsIDI1fSwKKwkuZnJhbWVsaW5lcyA9IDUyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KK30KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisubWFzayA9IDB4MDAwRiAmIFNFQ0FNICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFNFQ0FNLAorCS5pZCA9IFY0TDJfU1REX1NFQ0FNLAorCS5uYW1lID0gIlNFQ0FNIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMjV9LAorCS5mcmFtZWxpbmVzID0gNjI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19NICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTSwKKwkuaWQgPSBWNEwyX1NURF9OVFNDX00sCisJLm5hbWUgPSAiTlRTQ19NIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ19NX0pQICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IE5UU0NfTV9KUCwKKwkuaWQgPSBWNEwyX1NURF9OVFNDX01fSlAsCisJLm5hbWUgPSAiTlRTQ19NX0pQIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgUEFMXzYwICwKKy52NGwyX3N0YW5kYXJkID0geworCS5pbmRleCA9IFBBTF82MCwKKwkuaWQgPSBWNEwyX1NURF9QQUxfNjAsCisJLm5hbWUgPSAiUEFMXzYwIiwKKwkuZnJhbWVwZXJpb2QgPSB7MSwgMzB9LAorCS5mcmFtZWxpbmVzID0gNTI1LAorCS5yZXNlcnZlZCA9IHswLCAwLCAwLCAwfQorfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5tYXNrID0gMHgwMDBGICYgTlRTQ180NDMgLAorLnY0bDJfc3RhbmRhcmQgPSB7CisJLmluZGV4ID0gTlRTQ180NDMsCisJLmlkID0gVjRMMl9TVERfTlRTQ180NDMsCisJLm5hbWUgPSAiTlRTQ180NDMiLAorCS5mcmFtZXBlcmlvZCA9IHsxLCAzMH0sCisJLmZyYW1lbGluZXMgPSA1MjUsCisJLnJlc2VydmVkID0gezAsIDAsIDAsIDB9Cit9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLm1hc2sgPSAweDAwMEYgJiBQQUxfTSAsCisudjRsMl9zdGFuZGFyZCA9IHsKKwkuaW5kZXggPSBQQUxfTSwKKwkuaWQgPSBWNEwyX1NURF9QQUxfTSwKKwkubmFtZSA9ICJQQUxfTSIsCisJLmZyYW1lcGVyaW9kID0gezEsIDMwfSwKKwkuZnJhbWVsaW5lcyA9IDUyNSwKKwkucmVzZXJ2ZWQgPSB7MCwgMCwgMCwgMH0KK30KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisubWFzayA9IDB4RkZGRgorfQorfTsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgVEhFIDE2LUJJVCBlYXN5Y2FwX2Zvcm1hdC5tYXNrIEhBUyBNRUFOSU5HOgorICogICAgKGxlYXN0IHNpZ25pZmljYW50KSBCSVQgIDA6ICAgICAwID0+IFBBTCwgMjUgRlBTOyAgIDEgPT4gTlRTQywgMzAgRlBTCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMgMS0zOiAgIFJFU0VSVkVEIEZPUiBESUZGRVJFTlRJQVRJTkcgU1RBTkRBUkRTCisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVFMgNC03OiAgIE5VTUJFUiBPRiBCWVRFUyBQRVIgUElYRUwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQklUICA4OiAgICAgMCA9PiBOQVRJVkUgQllURSBPUkRFUjsgIDEgPT4gU1dBUFBFRAorICogICAgICAgICAgICAgICAgICAgICAgICBCSVRTIDktMTA6ICBSRVNFUlZFRCBGT1IgT1RIRVIgQllURSBQRVJNVVRBVElPTlMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgQklUIDExOiAgICAgMCA9PiBVTkRFQ0lNQVRFRDsgIDEgPT4gREVDSU1BVEVECisgKiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCAxMjogICAgIDAgPT4gT0ZGRVIgRlJBTUVTOyAxID0+IE9GRkVSIEZJRUxEUworICogICAgIChtb3N0IHNpZ25pZmljYW50KSBCSVRTIDEzLTE1OiBSRVNFUlZFRCBGT1IgT1RIRVIgRklFTEQgT1JERVIgT1BUSU9OUworICogIElUIEZPTExPV1MgVEhBVDoKKyAqICAgICBieXRlc3BlcnBpeGVsIElTICAgICAgICAgKCgweDAwRjAgJiBlYXN5Y2FwX2Zvcm1hdC5tYXNrKSA+PiA0KQorICogICAgIGJ5dGVzd2Fwb3JkZXIgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgwMTAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKgorICogICAgIGRlY2ltYXRlcGl4ZWwgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgwODAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKgorICogICAgICAgb2ZmZXJmaWVsZHMgSVMgdHJ1ZSBJRiAoMCAhPSAoMHgxMDAwICYgZWFzeWNhcF9mb3JtYXQubWFzaykpCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGVhc3ljYXBfZm9ybWF0IGVhc3ljYXBfZm9ybWF0WzEgKyBTRVRUSU5HU19NQU5ZXTsKKworaW50CitmaWxsaW5fZm9ybWF0cyh2b2lkKQoreworaW50IGksIGosIGssIG0sIG47CitfX3UzMiB3aWR0aCwgaGVpZ2h0LCBwaXhlbGZvcm1hdCwgYnl0ZXNwZXJsaW5lLCBzaXplaW1hZ2U7CitfX3UzMiBmaWVsZCwgY29sb3JzcGFjZTsKK19fdTE2IG1hc2sxLCBtYXNrMiwgbWFzazMsIG1hc2s0OworY2hhciBuYW1lMVszMl0sIG5hbWUyWzMyXSwgbmFtZTNbMzJdLCBuYW1lNFszMl07CisKK2ZvciAoaSA9IDAsIG4gPSAwOyBpIDwgU1RBTkRBUkRfTUFOWTsgaSsrKSB7CisJbWFzazEgPSAweDAwMDA7CisJc3dpdGNoIChpKSB7CisJY2FzZSBQQUxfQkdISU46IHsKKwkJbWFzazEgPSBQQUxfQkdISU47CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfQkdISU4iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBTRUNBTTogeworCQltYXNrMSA9IFNFQ0FNOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiU0VDQU0iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfTmM6IHsKKwkJbWFzazEgPSBQQUxfTmM7CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfTmMiKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfNjA6IHsKKwkJbWFzazEgPSBQQUxfNjA7CisJCXN0cmNweSgmbmFtZTFbMF0sICJQQUxfNjAiKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBQQUxfTTogeworCQltYXNrMSA9IFBBTF9NOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiUEFMX00iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX0JHOworCQlicmVhazsKKwl9CisJY2FzZSBOVFNDX006IHsKKwkJbWFzazEgPSBOVFNDX007CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDX00iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX007CisJCWJyZWFrOworCX0KKwljYXNlIE5UU0NfNDQzOiB7CisJCW1hc2sxID0gTlRTQ180NDM7CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDXzQ0MyIpOworCQljb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTTsKKwkJYnJlYWs7CisJfQorCWNhc2UgTlRTQ19NX0pQOiB7CisJCW1hc2sxID0gTlRTQ19NX0pQOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiTlRTQ19NX0pQIik7CisJCWNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfNDcwX1NZU1RFTV9NOworCQlicmVhazsKKwl9CisJY2FzZSBOVFNDX046IHsKKwkJbWFzazEgPSBOVFNDX007CisJCXN0cmNweSgmbmFtZTFbMF0sICJOVFNDX04iKTsKKwkJY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV80NzBfU1lTVEVNX007CisJCWJyZWFrOworCX0KKwljYXNlIE5UU0NfTl80NDM6IHsKKwkJbWFzazEgPSBOVFNDX05fNDQzOworCQlzdHJjcHkoJm5hbWUxWzBdLCAiTlRTQ19OXzQ0MyIpOworCQljb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgUkVTT0xVVElPTl9NQU5ZOyBqKyspIHsKKwkJbWFzazIgPSAweDAwMDA7CisJCXN3aXRjaCAoaikgeworCQljYXNlIEFUXzcyMHg1NzY6IHsKKwkJCWlmICgweDEgJiBtYXNrMSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfNzIweDU3NiIpOworCQkJd2lkdGggPSA3MjA7IGhlaWdodCA9IDU3NjsgYnJlYWs7CisJCX0KKwkJY2FzZSBBVF83MDR4NTc2OiB7CisJCQlpZiAoMHgxICYgbWFzazEpCisJCQkJY29udGludWU7CisJCQlzdHJjcHkoJm5hbWUyWzBdLCAiX0FUXzcwNHg1NzYiKTsKKwkJCXdpZHRoID0gNzA0OyBoZWlnaHQgPSA1NzY7IGJyZWFrOworCQl9CisJCWNhc2UgQVRfNjQweDQ4MDogeworCQkJc3RyY3B5KCZuYW1lMlswXSwgIl9BVF82NDB4NDgwIik7CisJCQl3aWR0aCA9IDY0MDsgaGVpZ2h0ID0gNDgwOyBicmVhazsKKwkJfQorCQljYXNlIEFUXzcyMHg0ODA6IHsKKwkJCWlmICghKDB4MSAmIG1hc2sxKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfNzIweDQ4MCIpOworCQkJd2lkdGggPSA3MjA7IGhlaWdodCA9IDQ4MDsgYnJlYWs7CisJCX0KKwkJY2FzZSBBVF8zNjB4Mjg4OiB7CisJCQlpZiAoMHgxICYgbWFzazEpCisJCQkJY29udGludWU7CisJCQlzdHJjcHkoJm5hbWUyWzBdLCAiX0FUXzM2MHgyODgiKTsKKwkJCXdpZHRoID0gMzYwOyBoZWlnaHQgPSAyODg7IG1hc2syID0gMHgwODAwOyBicmVhazsKKwkJfQorCQljYXNlIEFUXzMyMHgyNDA6IHsKKwkJCXN0cmNweSgmbmFtZTJbMF0sICJfQVRfMzIweDI0MCIpOworCQkJd2lkdGggPSAzMjA7IGhlaWdodCA9IDI0MDsgbWFzazIgPSAweDA4MDA7IGJyZWFrOworCQl9CisJCWNhc2UgQVRfMzYweDI0MDogeworCQkJaWYgKCEoMHgxICYgbWFzazEpKQorCQkJCWNvbnRpbnVlOworCQkJc3RyY3B5KCZuYW1lMlswXSwgIl9BVF8zNjB4MjQwIik7CisJCQl3aWR0aCA9IDM2MDsgaGVpZ2h0ID0gMjQwOyBtYXNrMiA9IDB4MDgwMDsgYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMjsKKwkJfQorCisJCWZvciAoayA9IDA7IGsgPCBQSVhFTEZPUk1BVF9NQU5ZOyBrKyspIHsKKwkJCW1hc2szID0gMHgwMDAwOworCQkJc3dpdGNoIChrKSB7CisJCQljYXNlIEZNVF9VWVZZOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfVVlWWSkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJCQkJbWFzazMgfD0gKDB4MDIgPDwgNCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEZNVF9ZVVkyOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfWVVZMikpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCQkJbWFzazMgfD0gKDB4MDIgPDwgNCk7CisJCQkJbWFzazMgfD0gMHgwMTAwOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfUkdCMjQ6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9SR0IyNCkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjI0OworCQkJCW1hc2szIHw9ICgweDAzIDw8IDQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfUkdCMzI6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9SR0IzMikpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjMyOworCQkJCW1hc2szIHw9ICgweDA0IDw8IDQpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBGTVRfQkdSMjQ6IHsKKwkJCQlzdHJjcHkoJm5hbWUzWzBdLCAiXyIgU1RSSU5HSVpFKEZNVF9CR1IyNCkpOworCQkJCXBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0JHUjI0OworCQkJCW1hc2szIHw9ICgweDAzIDw8IDQpOworCQkJCW1hc2szIHw9IDB4MDEwMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgRk1UX0JHUjMyOiB7CisJCQkJc3RyY3B5KCZuYW1lM1swXSwgIl8iIFNUUklOR0laRShGTVRfQkdSMzIpKTsKKwkJCQlwaXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9CR1IzMjsKKwkJCQltYXNrMyB8PSAoMHgwNCA8PCA0KTsKKwkJCQltYXNrMyB8PSAweDAxMDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtMzsKKwkJCX0KKwkJCWJ5dGVzcGVybGluZSA9IHdpZHRoICogKChtYXNrMyAmIDB4MDBGMCkgPj4gNCk7CisJCQlzaXplaW1hZ2UgPSAgYnl0ZXNwZXJsaW5lICogaGVpZ2h0OworCisJCQlmb3IgKG0gPSAwOyBtIDwgSU5URVJMQUNFX01BTlk7IG0rKykgeworCQkJCW1hc2s0ID0gMHgwMDAwOworCQkJCXN3aXRjaCAobSkgeworCQkJCWNhc2UgRklFTERfTk9ORTogeworCQkJCQlzdHJjcHkoJm5hbWU0WzBdLCAiLW4iKTsKKwkJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljYXNlIEZJRUxEX0lOVEVSTEFDRUQ6IHsKKwkJCQkJc3RyY3B5KCZuYW1lNFswXSwgIi1pIik7CisJCQkJCWZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY2FzZSBGSUVMRF9BTFRFUk5BVEU6IHsKKwkJCQkJc3RyY3B5KCZuYW1lNFswXSwgIi1hIik7CisJCQkJCW1hc2s0IHw9IDB4MTAwMDsKKwkJCQkJZmllbGQgPSBWNEwyX0ZJRUxEX0FMVEVSTkFURTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtNDsKKwkJCQl9CisJCQkJaWYgKFNFVFRJTkdTX01BTlkgPD0gbikKKwkJCQkJcmV0dXJuIC01OworCQkJCXN0cmNweSgmZWFzeWNhcF9mb3JtYXRbbl0ubmFtZVswXSwgJm5hbWUxWzBdKTsKKwkJCQlzdHJjYXQoJmVhc3ljYXBfZm9ybWF0W25dLm5hbWVbMF0sICZuYW1lMlswXSk7CisJCQkJc3RyY2F0KCZlYXN5Y2FwX2Zvcm1hdFtuXS5uYW1lWzBdLCAmbmFtZTNbMF0pOworCQkJCXN0cmNhdCgmZWFzeWNhcF9mb3JtYXRbbl0ubmFtZVswXSwgJm5hbWU0WzBdKTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS5tYXNrID0gXAorCQkJCQkJbWFzazEgfCBtYXNrMiB8IG1hc2szIHwgbWFzazQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC53aWR0aCA9IHdpZHRoOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC5oZWlnaHQgPSBoZWlnaHQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LnBpeGVsZm9ybWF0ID0gcGl4ZWxmb3JtYXQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LmZpZWxkID0gZmllbGQ7CisJCQkJZWFzeWNhcF9mb3JtYXRbbl0udjRsMl9mb3JtYXRcCisJCQkJCS5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS52NGwyX2Zvcm1hdFwKKwkJCQkJLmZtdC5waXguc2l6ZWltYWdlID0gc2l6ZWltYWdlOworCQkJCWVhc3ljYXBfZm9ybWF0W25dLnY0bDJfZm9ybWF0XAorCQkJCQkuZm10LnBpeC5jb2xvcnNwYWNlID0gY29sb3JzcGFjZTsKKwkJCQllYXN5Y2FwX2Zvcm1hdFtuXS52NGwyX2Zvcm1hdFwKKwkJCQkJLmZtdC5waXgucHJpdiA9IDA7CisJCQkJbisrOworCQkJfQorCQl9CisJfQorfQoraWYgKCgxICsgU0VUVElOR1NfTUFOWSkgPD0gbikKKwlyZXR1cm4gLTY7CitlYXN5Y2FwX2Zvcm1hdFtuXS5tYXNrID0gMHhGRkZGOworcmV0dXJuIG47Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgZWFzeWNhcF9jb250cm9sW10gPSBcCisge3sKKy5pZCAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIkJyaWdodG5lc3MiLAorLm1pbmltdW0gID0gMCwKKy5tYXhpbXVtICA9IDI1NSwKKy5zdGVwICAgICA9ICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMEFfREVGQVVMVCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKKy50eXBlICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisubmFtZSAgICAgPSAiQ29udHJhc3QiLAorLm1pbmltdW0gID0gMCwKKy5tYXhpbXVtICA9IDI1NSwKKy5zdGVwICAgICA9ICAgMSwKKy5kZWZhdWx0X3ZhbHVlID0gU0FBXzBCX0RFRkFVTFQgKyAxMjgsCisuZmxhZ3MgICAgPSAwLAorLnJlc2VydmVkID0gezAsIDB9Cit9LAorLyogLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAqLworeworLmlkICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKKy50eXBlICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisubmFtZSAgICAgPSAiU2F0dXJhdGlvbiIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMjU1LAorLnN0ZXAgICAgID0gICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMENfREVGQVVMVCArIDEyOCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9IVUUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIkh1ZSIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMjU1LAorLnN0ZXAgICAgID0gICAxLAorLmRlZmF1bHRfdmFsdWUgPSBTQUFfMERfREVGQVVMVCArIDEyOCwKKy5mbGFncyAgICA9IDAsCisucmVzZXJ2ZWQgPSB7MCwgMH0KK30sCisvKiAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtICovCit7CisuaWQgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorLm5hbWUgICAgID0gIlZvbHVtZSIsCisubWluaW11bSAgPSAwLAorLm1heGltdW0gID0gMzEsCisuc3RlcCAgICAgPSAgIDEsCisuZGVmYXVsdF92YWx1ZSA9IDE2LAorLmZsYWdzICAgID0gMCwKKy5yZXNlcnZlZCA9IHswLCAwfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5pZCAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisudHlwZSAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorLm5hbWUgICAgID0gIk11dGUiLAorLmRlZmF1bHRfdmFsdWUgPSB0cnVlLAorLmZsYWdzICAgID0gMCwKKy5yZXNlcnZlZCA9IHswLCAwfQorfSwKKy8qIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gKi8KK3sKKy5pZCA9IDB4RkZGRkZGRkYKK30KKyB9OworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5jIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTYyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NvdW5kLmMKQEAgLTAsMCArMSwxMDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3NvdW5kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBBdWRpbyBkcml2ZXIgZm9yIEVhc3lDQVAgVVNCMi4wIFZpZGVvIENhcHR1cmUgRGV2aWNlIERDNjAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKyNpbmNsdWRlICJlYXN5Y2FwX3NvdW5kLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgT04gQ09NUExFVElPTiBPRiBBTiBBVURJTyBVUkIgSVRTIERBVEEgSVMgQ09QSUVEIFRPIFRIRSBBVURJTyBCVUZGRVJTCisgKiAgUFJPVklERUQgcGVhc3ljYXAtPmF1ZGlvX2lkbGUgSVMgWkVSMC4gIFJFR0FSRExFU1MgT0YgVEhJUyBCRUlORyBUUlVFLAorICogIElUIElTIFJFU1VCTUlUVEVEIFBST1ZJREVEIHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZyBJUyBOT1QgWkVSTy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZAorZWFzeXNuZF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpwdXJiKQoreworc3RhdGljIGludCBtdDsKK3N0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcDsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGF1ZGlvX2J1ZmZlcjsKK2NoYXIgZXJyYnVmWzE2XTsKK19fdTggKnAxLCAqcDI7CitfX3MxNiBzMTY7CitpbnQgaSwgaiwgbW9yZSwgbXVjaCwgbGVhcCwgcmM7CisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK2ludCBrOworX19zMTYgb2xkYXVkaW8sIG5ld2F1ZGlvLCBkZWx0YTsKKyNlbmRpZiAvKlVQU0FNUExFKi8KKworSk9UKDE2LCAiXG4iKTsKKworaWYgKE5VTEwgPT0gcHVyYikgeworCVNBWSgiRVJST1I6IHB1cmIgaXMgTlVMTFxuIik7CisJcmV0dXJuOworfQorcGVhc3ljYXAgPSBwdXJiLT5jb250ZXh0OworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm47Cit9CittdWNoID0gMDsKKworCitpZiAocGVhc3ljYXAtPmF1ZGlvX2lkbGUpIHsKKwlKT1QoMTYsICIlaT1hdWRpb19pZGxlICAlaT1hdWRpb19pc29jX3N0cmVhbWluZ1xuIiwgXAorCQkJcGVhc3ljYXAtPmF1ZGlvX2lkbGUsIHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZyk7CisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9YXVkaW9faWRsZSwgIiBcCisJCQkJCSJ1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCB3aXRoIHJjOlxuIiwgXAorCQkJCQkJCXBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJCXN3aXRjaCAocmMpIHsKKwkJCWNhc2UgLUVOT01FTTogeworCQkJCVNBWSgiRU5PTUVNXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9ERVY6IHsKKwkJCQlTQVkoIkVOT0RFVlxuIik7ICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRU5YSU86IHsKKwkJCQlTQVkoIkVOWElPXG4iKTsgICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUlOVkFMOiB7CisJCQkJU0FZKCJFSU5WQUxcbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVBR0FJTjogeworCQkJCVNBWSgiRUFHQUlOXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FRkJJRzogeworCQkJCVNBWSgiRUZCSUdcbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FUElQRTogeworCQkJCVNBWSgiRVBJUEVcbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTVNHU0laRTogeworCQkJCVNBWSgiRU1TR1NJWkVcbiIpOyAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTk9TUEM6IHsKKwkJCQlTQVkoIkVOT1NQQ1xuIik7ICBicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6IHsKKwkJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KK3JldHVybjsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwdXJiLT5zdGF0dXMpIHsKKwlpZiAoLUVTSFVURE9XTiA9PSBwdXJiLT5zdGF0dXMpIHsKKwkJSk9UKDE2LCAiaW1tZWRpYXRlIHJldHVybiBiZWNhdXNlIC1FU0hVVERPV049cHVyYi0+c3RhdHVzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlTQVkoIkVSUk9SOiBub24temVybyB1cmIgc3RhdHVzOlxuIik7CisJc3dpdGNoIChwdXJiLT5zdGF0dXMpIHsKKwljYXNlIC1FSU5QUk9HUkVTUzogeworCQlTQVkoIi1FSU5QUk9HUkVTU1xuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9TUjogeworCQlTQVkoIi1FTk9TUlxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FUElQRTogeworCQlTQVkoIi1FUElQRVxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FT1ZFUkZMT1c6IHsKKwkJU0FZKCItRU9WRVJGTE9XXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQUk9UTzogeworCQlTQVkoIi1FUFJPVE9cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlMU0VROiB7CisJCVNBWSgiLUVJTFNFUVxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FVElNRURPVVQ6IHsKKwkJU0FZKCItRVRJTUVET1VUXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVNU0dTSVpFOiB7CisJCVNBWSgiLUVNU0dTSVpFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPUE5PVFNVUFA6IHsKKwkJU0FZKCItRU9QTk9UU1VQUFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FUEZOT1NVUFBPUlQ6IHsKKwkJU0FZKCItRVBGTk9TVVBQT1JUXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVBRk5PU1VQUE9SVDogeworCQlTQVkoIi1FQUZOT1NVUFBPUlRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUFERFJJTlVTRTogeworCQlTQVkoIi1FQUREUklOVVNFXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVBRERSTk9UQVZBSUw6IHsKKwkJU0FZKCItRUFERFJOT1RBVkFJTFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9CVUZTOiB7CisJCVNBWSgiLUVOT0JVRlNcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlTQ09OTjogeworCQlTQVkoIi1FSVNDT05OXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1RDT05OOiB7CisJCVNBWSgiLUVOT1RDT05OXG4iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVTSFVURE9XTjogeworCQlTQVkoIi1FU0hVVERPV05cbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PRU5UOiB7CisJCVNBWSgiLUVOT0VOVFxuIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09OTlJFU0VUOiB7CisJCVNBWSgiLUVDT05OUkVTRVRcbiIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PU1BDOiB7CisJCVNBWSgiRU5PU1BDXG4iKTsgIGJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCVNBWSgidW5rbm93biBlcnJvciBjb2RlIDB4JTA4WFxuIiwgcHVyYi0+c3RhdHVzKTsgYnJlYWs7CisJfQorCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgUkVTVUJNSVQgVEhJUyBVUkIgQUZURVIgQU4gRVJST1IKKyAqCisgKiAgKFRISVMgSVMgRFVQTElDQVRFIENPREUgVE8gUkVEVUNFIElOREVOVEFUSU9OIE9GIFRIRSBOTy1FUlJPUiBQQVRIKQorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoMCAhPSByYykgeworCQkJU0FZKCJFUlJPUjogd2hpbGUgJWk9YXVkaW9faWRsZSwgdXNiX3N1Ym1pdF91cmIoKSAiCisJCQkJImZhaWxlZCB3aXRoIHJjOlxuIiwgcGVhc3ljYXAtPmF1ZGlvX2lkbGUpOworCQkJc3dpdGNoIChyYykgeworCQkJY2FzZSAtRU5PTUVNOiB7CisJCQkJU0FZKCJFTk9NRU1cbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVOT0RFVjogeworCQkJCVNBWSgiRU5PREVWXG4iKTsgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FTlhJTzogeworCQkJCVNBWSgiRU5YSU9cbiIpOyAgICAgYnJlYWs7CisJCQl9CisJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQlTQVkoIkVJTlZBTFxuIik7ICAgIGJyZWFrOworCQkJfQorCQkJY2FzZSAtRUFHQUlOOiB7CisJCQkJU0FZKCJFQUdBSU5cbiIpOyAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVGQklHOiB7CisJCQkJU0FZKCJFRkJJR1xuIik7ICAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVQSVBFOiB7CisJCQkJU0FZKCJFUElQRVxuIik7ICAgICBicmVhazsKKwkJCX0KKwkJCWNhc2UgLUVNU0dTSVpFOiB7CisJCQkJU0FZKCJFTVNHU0laRVxuIik7ICBicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6IHsKKwkJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFBST0NFRUQgSEVSRSBXSEVOIE5PIEVSUk9SCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorb2xkYXVkaW8gPSBwZWFzeWNhcC0+b2xkYXVkaW87CisjZW5kaWYgLypVUFNBTVBMRSovCisKK2ZvciAoaSA9IDA7ICBpIDwgcHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgeworCXN3aXRjaCAocHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSB7CisJY2FzZSAgMDogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIk9LIik7IGJyZWFrOworCX0KKwljYXNlIC1FTk9FTlQ6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRU5PRU5UIik7IGJyZWFrOworCX0KKwljYXNlIC1FSU5QUk9HUkVTUzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FSU5QUk9HUkVTUyIpOyBicmVhazsKKwl9CisJY2FzZSAtRVBST1RPOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVQUk9UTyIpOyBicmVhazsKKwl9CisJY2FzZSAtRUlMU0VROiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVJTFNFUSIpOyBicmVhazsKKwl9CisJY2FzZSAtRVRJTUU6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRVRJTUUiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVUSU1FRE9VVDogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FVElNRURPVVQiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVQSVBFOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVQSVBFIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09NTTogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FQ09NTSIpOyBicmVhazsKKwl9CisJY2FzZSAtRU5PU1I6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRU5PU1IiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVPVkVSRkxPVzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FT1ZFUkZMT1ciKTsgYnJlYWs7CisJfQorCWNhc2UgLUVSRU1PVEVJTzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FUkVNT1RFSU8iKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT0RFVjogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9ERVYiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVYREVWOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVYREVWIik7IGJyZWFrOworCX0KKwljYXNlIC1FSU5WQUw6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICItRUlOVkFMIik7IGJyZWFrOworCX0KKwljYXNlIC1FQ09OTlJFU0VUOiB7CisJCXN0cmNweSgmZXJyYnVmWzBdLCAiLUVDT05OUkVTRVQiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVOT1NQQzogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FTk9TUEMiKTsgYnJlYWs7CisJfQorCWNhc2UgLUVTSFVURE9XTjogeworCQlzdHJjcHkoJmVycmJ1ZlswXSwgIi1FU0hVVERPV04iKTsgYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJc3RyY3B5KCZlcnJidWZbMF0sICJVTktOT1dOIik7IGJyZWFrOworCX0KKwl9CisJaWYgKCghcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKSAmJiAwKSB7CisJCUpPVCgxNiwgImZyYW1lWyUyaV06ICVpPXN0YXR1c3s9JTE2c30gICIgIFwKKwkJCQkJCSIlNWk9YWN0dWFsICAiICBcCisJCQkJCQkiJTVpPWxlbmd0aCAgIiAgXAorCQkJCQkJIiUzaT1vZmZzZXRcbiIsIFwKKwkJCQlpLCBwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMsICZlcnJidWZbMF0sCisJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCwKKwkJCQlwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGgsCisJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKwl9CisJaWYgKCFwdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpIHsKKwkJbW9yZSA9IHB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGg7CisKKyNpZiBkZWZpbmVkKFRFU1RUT05FKQorCQlpZiAoIW1vcmUpCisJCQltb3JlID0gcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworI2VuZGlmCisKKwkJaWYgKCFtb3JlKQorCQkJbXQrKzsKKwkJZWxzZSB7CisJCQlpZiAobXQpIHsKKwkJCQlKT1QoMTYsICIlNGkgZW1wdHkgYXVkaW8gdXJiIGZyYW1lc1xuIiwgbXQpOworCQkJCW10ID0gMDsKKwkJCX0KKworCQkJcDEgPSAoX191OCAqKShwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBcCisJCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CisKKwkJCWxlYXAgPSAwOworCQkJcDEgKz0gbGVhcDsKKwkJCW1vcmUgLT0gbGVhcDsKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQ09QWSBtb3JlIEJZVEVTIEZST00gSVNPQyBCVUZGRVIgVE8gQVVESU8gQlVGRkVSLAorICogIENPTlZFUlRJTkcgOC1CSVQgTU9OTyBUTyAxNi1CSVQgU0lHTkVEIExJVFRMRS1FTkRJQU4gU0FNUExFUyBJRiBORUNFU1NBUlkKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCQkJd2hpbGUgKG1vcmUpIHsKKwkJCQlpZiAoMCA+IG1vcmUpIHsKKwkJCQkJU0FZKCJlYXN5c25kX2NvbXBsZXRlOiBNSVNUQUtFOiAiIFwKKwkJCQkJCQkibW9yZSBpcyBuZWdhdGl2ZVxuIik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJaWYgKHBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9fZmlsbCkgeworCQkJCQlTQVkoIkVSUk9SOiBiYWQgIiBcCisJCQkJCQkicGVhc3ljYXAtPmF1ZGlvX2ZpbGxcbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJcGF1ZGlvX2J1ZmZlciA9ICZwZWFzeWNhcC0+YXVkaW9fYnVmZmVyXAorCQkJCQkJCVtwZWFzeWNhcC0+YXVkaW9fZmlsbF07CisJCQkJaWYgKFBBR0VfU0laRSA8IChwYXVkaW9fYnVmZmVyLT5wdG8gLSBcCisJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ28pKSB7CisJCQkJCVNBWSgiRVJST1I6IGJhZCBwYXVkaW9fYnVmZmVyLT5wdG9cbiIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWlmIChQQUdFX1NJWkUgPT0gKHBhdWRpb19idWZmZXItPnB0byAtIFwKKwkJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ28pKSB7CisKKyNpZiBkZWZpbmVkKFRFU1RUT05FKQorCQkJCQllYXN5c25kX3Rlc3R0b25lKHBlYXN5Y2FwLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ZpbGwpOworI2VuZGlmIC8qVEVTVFRPTkUqLworCisJCQkJCXBhdWRpb19idWZmZXItPnB0byA9IFwKKwkJCQkJCQlwYXVkaW9fYnVmZmVyLT5wZ287CisJCQkJCShwZWFzeWNhcC0+YXVkaW9fZmlsbCkrKzsKKwkJCQkJaWYgKHBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9fZmlsbCkKKwkJCQkJCXBlYXN5Y2FwLT5hdWRpb19maWxsID0gMDsKKworCQkJCQlKT1QoMTIsICJidW1wZWQgcGVhc3ljYXAtPiIgXAorCQkJCQkJCSJhdWRpb19maWxsIHRvICVpXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ZpbGwpOworCisJCQkJCXBhdWRpb19idWZmZXIgPSAmcGVhc3ljYXAtPlwKKwkJCQkJCQlhdWRpb19idWZmZXJcCisJCQkJCQkJW3BlYXN5Y2FwLT5hdWRpb19maWxsXTsKKwkJCQkJcGF1ZGlvX2J1ZmZlci0+cHRvID0gXAorCQkJCQkJCXBhdWRpb19idWZmZXItPnBnbzsKKworCQkJCQlpZiAoIShwZWFzeWNhcC0+YXVkaW9fZmlsbCAlIFwKKwkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpKSB7CisJCQkJCQlKT1QoMTIsICJ3YWtldXAgY2FsbCBvbiB3cV8iIFwKKwkJCQkJCSJhdWRpbywgJWk9ZnJhZyByZWFkaW5nICAlaSIgXAorCQkJCQkJIj1mcmFnbWVudCBmaWxsXG4iLCBcCisJCQkJCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBcCisJCQkJCQlwZWFzeWNhcC0+XAorCQkJCQkJYXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkJCQkJKHBlYXN5Y2FwLT5hdWRpb19maWxsIC8gXAorCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCWF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpOworCQkJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlXAorCQkJCQkJKCYocGVhc3ljYXAtPndxX2F1ZGlvKSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQltdWNoID0gUEFHRV9TSVpFIC0gKGludCkocGF1ZGlvX2J1ZmZlci0+cHRvIC1cCisJCQkJCQkJIHBhdWRpb19idWZmZXItPnBnbyk7CisKKwkJCQlpZiAoZmFsc2UgPT0gcGVhc3ljYXAtPm1pY3JvcGhvbmUpIHsKKwkJCQkJaWYgKG11Y2ggPiBtb3JlKQorCQkJCQkJbXVjaCA9IG1vcmU7CisKKwkJCQkJbWVtY3B5KHBhdWRpb19idWZmZXItPnB0bywgcDEsIG11Y2gpOworCQkJCQlwMSArPSBtdWNoOworCQkJCQltb3JlIC09IG11Y2g7CisJCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKFVQU0FNUExFKQorCQkJCQlpZiAobXVjaCAlIDE2KQorCQkJCQkJSk9UKDgsICJNSVNUQUtFPyBtdWNoIiBcCisJCQkJCQkiIGlzIG5vdCBkaXZpc2libGUgYnkgMTZcbiIpOworCQkJCQlpZiAobXVjaCA+ICgxNiAqIFwKKwkJCQkJCQltb3JlKSkKKwkJCQkJCW11Y2ggPSAxNiAqIFwKKwkJCQkJCQltb3JlOworCQkJCQlwMiA9IChfX3U4ICopcGF1ZGlvX2J1ZmZlci0+cHRvOworCisJCQkJCWZvciAoaiA9IDA7ICBqIDwgKG11Y2gvMTYpOyAgaisrKSB7CisJCQkJCQluZXdhdWRpbyA9ICAoKGludCkgKnAxKSAtIDEyODsKKwkJCQkJCW5ld2F1ZGlvID0gMTI4ICogXAorCQkJCQkJCQluZXdhdWRpbzsKKworCQkJCQkJZGVsdGEgPSAobmV3YXVkaW8gLSBvbGRhdWRpbykgXAorCQkJCQkJCQkJLyA0OworCQkJCQkJczE2ID0gb2xkYXVkaW8gKyBkZWx0YTsKKworCQkJCQkJZm9yIChrID0gMDsgIGsgPCA0OyAgaysrKSB7CisJCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkJKihwMiArIDEpID0gKDB4RkYwMCAmIFwKKwkJCQkJCQkJczE2KSA+PiA4OworCQkJCQkJCXAyICs9IDI7CisJCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkJKihwMiArIDEpID0gKDB4RkYwMCAmIFwKKwkJCQkJCQkJczE2KSA+PiA4OworCQkJCQkJCXAyICs9IDI7CisKKwkJCQkJCQlzMTYgKz0gZGVsdGE7CisJCQkJCQl9CisJCQkJCQlwMSsrOworCQkJCQkJbW9yZS0tOworCQkJCQkJb2xkYXVkaW8gPSBzMTY7CisJCQkJCX0KKyNlbHNlCisJCQkJCWlmIChtdWNoID4gKDIgKiBtb3JlKSkKKwkJCQkJCW11Y2ggPSAyICogbW9yZTsKKwkJCQkJcDIgPSAoX191OCAqKXBhdWRpb19idWZmZXItPnB0bzsKKworCQkJCQlmb3IgKGogPSAwOyAgaiA8IChtdWNoIC8gMik7ICBqKyspIHsKKwkJCQkJCXMxNiA9ICAoKGludCkgKnAxKSAtIDEyODsKKwkJCQkJCXMxNiA9IDEyOCAqIFwKKwkJCQkJCQkJczE2OworCQkJCQkJKnAyID0gKDB4MDBGRiAmIHMxNik7CisJCQkJCQkqKHAyICsgMSkgPSAoMHhGRjAwICYgczE2KSA+PiBcCisJCQkJCQkJCQk4OworCQkJCQkJcDErKzsgIHAyICs9IDI7CisJCQkJCQltb3JlLS07CisJCQkJCX0KKyNlbmRpZiAvKlVQU0FNUExFKi8KKwkJCQl9CisJCQkJKHBhdWRpb19idWZmZXItPnB0bykgKz0gbXVjaDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCUpPVCgxMiwgImRpc2NhcmRpbmcgYXVkaW8gc2FtcGxlcyBiZWNhdXNlICIgXAorCQkJIiVpPXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1c1xuIiwgXAorCQkJCXB1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJfQorCisjaWYgZGVmaW5lZChVUFNBTVBMRSkKK3BlYXN5Y2FwLT5vbGRhdWRpbyA9IG9sZGF1ZGlvOworI2VuZGlmIC8qVVBTQU1QTEUqLworCit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFJFU1VCTUlUIFRISVMgVVJCIEFGVEVSIE5PIEVSUk9SCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmIChwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlyYyA9IHVzYl9zdWJtaXRfdXJiKHB1cmIsIEdGUF9BVE9NSUMpOworCWlmICgwICE9IHJjKSB7CisJCVNBWSgiRVJST1I6IHdoaWxlICVpPWF1ZGlvX2lkbGUsIHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkICIgXAorCQkJCQkid2l0aCByYzpcbiIsIHBlYXN5Y2FwLT5hdWRpb19pZGxlKTsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIC1FTk9NRU06IHsKKwkJCVNBWSgiRU5PTUVNXG4iKTsgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5PREVWOiB7CisJCQlTQVkoIkVOT0RFVlxuIik7ICAgIGJyZWFrOworCQl9CisJCWNhc2UgLUVOWElPOiB7CisJCQlTQVkoIkVOWElPXG4iKTsgICAgIGJyZWFrOworCQl9CisJCWNhc2UgLUVJTlZBTDogeworCQkJU0FZKCJFSU5WQUxcbiIpOyAgICBicmVhazsKKwkJfQorCQljYXNlIC1FQUdBSU46IHsKKwkJCVNBWSgiRUFHQUlOXG4iKTsgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRUZCSUc6IHsKKwkJCVNBWSgiRUZCSUdcbiIpOyAgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRVBJUEU6IHsKKwkJCVNBWSgiRVBJUEVcbiIpOyAgICAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU1TR1NJWkU6IHsKKwkJCVNBWSgiRU1TR1NJWkVcbiIpOyAgYnJlYWs7CisJCX0KKwkJY2FzZSAtRU5PU1BDOiB7CisJCQlTQVkoIkVOT1NQQ1xuIik7ICBicmVhazsKKwkJfQorCQlkZWZhdWx0OiB7CisJCQlTQVkoIjB4JTA4WFxuIiwgcmMpOyBicmVhazsKKwkJfQorCQl9CisJfQorfQorcmV0dXJuOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBUSEUgQVVESU8gVVJCUyBBUkUgU1VCTUlUVEVEIEFUIFRISVMgRUFSTFkgU1RBR0UgU08gVEhBVCBJVCBJUyBQT1NTSUJMRSBUTworICogIFNUUkVBTSBGUk9NIC9kZXYvZWFzeXNuZDEgV0lUSCBTSU1QTEUgUFJPR1JBTVMgU1VDSCBBUyBjYXQgV0hJQ0ggRE8gTk9UCisgKiAgSEFWRSBBTiBJT0NUTCBJTlRFUkZBQ0UuICBUSEUgVklERU8gVVJCUywgQlkgQ09OVFJBU1QsIE1VU1QgQkUgU1VCTUlUVEVECisgKiAgTVVDSCBMQVRFUjogU0VFIENPTU1FTlRTIElOIEZJTEUgZWFzeWNhcF9tYWluLmMuCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludAorZWFzeXNuZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworc3RydWN0IHVzYl9pbnRlcmZhY2UgKnB1c2JfaW50ZXJmYWNlOworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworaW50IHN1Ym1pbm9yLCByYzsKKworSk9UKDQsICJiZWdpbnMuXG4iKTsKKworc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworCitwdXNiX2ludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmZWFzeWNhcF91c2JfZHJpdmVyLCBzdWJtaW5vcik7CitpZiAoTlVMTCA9PSBwdXNiX2ludGVyZmFjZSkgeworCVNBWSgiRVJST1I6IHB1c2JfaW50ZXJmYWNlIGlzIE5VTExcbiIpOworCVNBWSgiZW5kaW5nIHVuc3VjY2Vzc2Z1bGx5XG4iKTsKKwlyZXR1cm4gLTE7Cit9CitwZWFzeWNhcCA9IHVzYl9nZXRfaW50ZmRhdGEocHVzYl9pbnRlcmZhY2UpOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlTQVkoImVuZGluZyB1bnN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuIC0xOworfQorCitmaWxlLT5wcml2YXRlX2RhdGEgPSBwZWFzeWNhcDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBJTklUSUFMSVpBVElPTi4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworSk9UKDQsICJzdGFydGluZyBpbml0aWFsaXphdGlvblxuIik7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30gZWxzZSB7CisJSk9UKDE2LCAiMHglMDhsWD1wZWFzeWNhcC0+cHVzYl9kZXZpY2VcbiIsIFwKKwkJCQkJKGxvbmcgaW50KXBlYXN5Y2FwLT5wdXNiX2RldmljZSk7Cit9CisKK3JjID0gYXVkaW9fc2V0dXAocGVhc3ljYXApOworaWYgKDAgPD0gcmMpCisJSk9UKDgsICJhdWRpb19zZXR1cCgpIHJldHVybmVkICVpXG4iLCByYyk7CitlbHNlCisJSk9UKDgsICJlYXN5c25kIG9wZW4oKTogRVJST1I6IGF1ZGlvX3NldHVwKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IGFkanVzdF92b2x1bWUocGVhc3ljYXAsIC04MTkyKTsKK2lmICgwICE9IHJjKSB7CisJU0FZKCJFUlJPUjogYWRqdXN0X3ZvbHVtZShkZWZhdWx0KSByZXR1cm5lZCAlaVxuIiwgcmMpOworCXJldHVybiAtRUZBVUxUOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CityYyA9IHVzYl9zZXRfaW50ZXJmYWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSwgcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbik7CitKT1QoOCwgInVzYl9zZXRfaW50ZXJmYWNlKC4sJWksJWkpIHJldHVybmVkICVpXG4iLCBwZWFzeWNhcC0+YXVkaW9faW50ZXJmYWNlLCBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19hbHRzZXR0aW5nX29uLCByYyk7CisKK2lmICgoc3RydWN0IHVzYl9kZXZpY2UgKilOVUxMID09IHBlYXN5Y2FwLT5wdXNiX2RldmljZSkgeworCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXNiX2RldmljZSBoYXMgYmVjb21lIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcmMgPSB3YWtldXBfZGV2aWNlKHBlYXN5Y2FwLT5wdXNiX2RldmljZSk7CitpZiAoMCA9PSByYykKKwlKT1QoOCwgIndha2V1cF9kZXZpY2UoKSByZXR1cm5lZCAlaVxuIiwgcmMpOworZWxzZQorCUpPVCg4LCAiZWFzeXNuZCBvcGVuKCk6IEVSUk9SOiB3YWtldXBfZGV2aWNlKCkgcmV0dXJuZWQgJWlcbiIsIHJjKTsKKworaWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGhhcyBiZWNvbWUgTlVMTFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitzdWJtaXRfYXVkaW9fdXJicyhwZWFzeWNhcCk7CitwZWFzeWNhcC0+YXVkaW9faWRsZSA9IDA7CisKK3BlYXN5Y2FwLT50aW1ldmFsMS50dl9zZWMgID0gMDsKK3BlYXN5Y2FwLT50aW1ldmFsMS50dl91c2VjID0gMDsKKworSk9UKDQsICJmaW5pc2hlZCBpbml0aWFsaXphdGlvblxuIik7CityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludAorZWFzeXNuZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworCitKT1QoNCwgImJlZ2luc1xuIik7CisKK3BlYXN5Y2FwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SOiAgcGVhc3ljYXAgaXMgTlVMTC5cbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKDAgIT0ga2lsbF9hdWRpb191cmJzKHBlYXN5Y2FwKSkgeworCVNBWSgiRVJST1I6IGtpbGxfYXVkaW9fdXJicygpIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FRkFVTFQ7Cit9CitKT1QoNCwgImVuZGluZyBzdWNjZXNzZnVsbHlcbiIpOworcmV0dXJuIDA7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzc2l6ZV90CitlYXN5c25kX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpwdXNlcnNwYWNlYnVmZmVyLCBcCisJCQkJCQlzaXplX3Qga291bnQsIGxvZmZfdCAqcG9mZikKK3sKK3N0cnVjdCB0aW1ldmFsIHRpbWV2YWw7CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZXZhbDE7CitzdGF0aWMgbG9uZyBsb25nIGludCBhdWRpb19ieXRlcywgYWJvdmUsIGJlbG93LCBtZWFuOworc3RydWN0IHNpZ25lZF9kaXZfcmVzdWx0IHNkcjsKK3Vuc2lnbmVkIGNoYXIgKnAwOworbG9uZyBpbnQga291bnQxLCBtb3JlLCByYywgbDAsIGxtOworaW50IGZyYWdtZW50Oworc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworc3RydWN0IGRhdGFfYnVmZmVyICpwZGF0YV9idWZmZXI7CitzaXplX3Qgc3pyZXQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgRE8gQSBCTE9DS0lORyBSRUFEIFRPIFRSQU5TRkVSIERBVEEgVE8gVVNFUiBTUEFDRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKiogIE4uQi4gIElGIFRISVMgRlVOQ1RJT04gUkVUVVJOUyAwLCBOT1RISU5HIElTIFNFRU4gSU4gVVNFUiBTUEFDRS4gKioqKioqCisgKioqKiogICAgICAgIFRISVMgQ09ORElUSU9OIFNJR05JRklFUyBFTkQtT0YtRklMRS4gICAgICAgICAgICAgICAgICAgICAgKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworSk9UKDgsICI9PT09PSBlYXN5c25kX3JlYWQoKToga291bnQ9JWksICpwb2ZmPSVpXG4iLCAoaW50KWtvdW50LCAoaW50KSgqcG9mZikpOworCitwZWFzeWNhcCA9IChzdHJ1Y3QgZWFzeWNhcCAqKShmaWxlLT5wcml2YXRlX2RhdGEpOworaWYgKE5VTEwgPT0gcGVhc3ljYXApIHsKKwlTQVkoIkVSUk9SIGluIGVhc3lzbmRfcmVhZCgpOiBwZWFzeWNhcCBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2lmICgoMCA+IHBlYXN5Y2FwLT5hdWRpb19yZWFkKSB8fCBcCisJCShwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSA8PSBwZWFzeWNhcC0+YXVkaW9fcmVhZCkpIHsKKwlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+YXVkaW9fcmVhZCBvdXQgb2YgcmFuZ2VcbiIpOworCXJldHVybiAtRUZBVUxUOworfQorcGRhdGFfYnVmZmVyID0gJnBlYXN5Y2FwLT5hdWRpb19idWZmZXJbcGVhc3ljYXAtPmF1ZGlvX3JlYWRdOworaWYgKChzdHJ1Y3QgZGF0YV9idWZmZXIgKilOVUxMID09IHBkYXRhX2J1ZmZlcikgeworCVNBWSgiRVJST1I6IHBkYXRhX2J1ZmZlciBpcyBOVUxMXG4iKTsKKwlyZXR1cm4gLUVGQVVMVDsKK30KK0pPVCgxMiwgImJlZm9yZSB3YWl0LCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitmcmFnbWVudCA9IChwZWFzeWNhcC0+YXVkaW9fcmVhZCAvIHBlYXN5Y2FwLT5hdWRpb19wYWdlc19wZXJfZnJhZ21lbnQpOword2hpbGUgKChmcmFnbWVudCA9PSAocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpIHx8IFwKKwkJKDAgPT0gKFBBR0VfU0laRSAtIChwZGF0YV9idWZmZXItPnB0byAtIHBkYXRhX2J1ZmZlci0+cGdvKSkpKSB7CisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCUpPVCgxNiwgInJldHVybmluZyAtRUFHQUlOIGFzIGluc3RydWN0ZWRcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUocGVhc3ljYXAtPndxX2F1ZGlvLCBcCisJCShwZWFzeWNhcC0+YXVkaW9faWRsZSAgfHwgcGVhc3ljYXAtPmF1ZGlvX2VvZiAgIHx8IFwKKwkJKChmcmFnbWVudCAhPSAocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpICYmIFwKKwkJKDAgPCAoUEFHRV9TSVpFIC0gKHBkYXRhX2J1ZmZlci0+cHRvIC0gcGRhdGFfYnVmZmVyLT5wZ28pKSkpKSk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJhYm9ydGVkIGJ5IHNpZ25hbFxuIik7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCWlmIChwZWFzeWNhcC0+YXVkaW9fZW9mKSB7CisJCUpPVCg4LCAicmV0dXJuaW5nIDAgYmVjYXVzZSAgJWk9YXVkaW9fZW9mXG4iLCBcCisJCQkJCQkJcGVhc3ljYXAtPmF1ZGlvX2VvZik7CisJCWtpbGxfYXVkaW9fdXJicyhwZWFzeWNhcCk7CisJCW1zbGVlcCg1MDApOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHBlYXN5Y2FwLT5hdWRpb19pZGxlKSB7CisJCUpPVCgxNiwgInJldHVybmluZyAwIGJlY2F1c2UgICVpPWF1ZGlvX2lkbGVcbiIsIFwKKwkJCQkJCQlwZWFzeWNhcC0+YXVkaW9faWRsZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXBlYXN5Y2FwLT5hdWRpb19pc29jX3N0cmVhbWluZykgeworCQlKT1QoMTYsICJyZXR1cm5pbmcgMCBiZWNhdXNlIGF1ZGlvIHVyYnMgbm90IHN0cmVhbWluZ1xuIik7CisJCXJldHVybiAwOworCX0KK30KK0pPVCgxMiwgImFmdGVyICB3YWl0LCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitzenJldCA9IChzaXplX3QpMDsKK3doaWxlIChmcmFnbWVudCA9PSAocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBcCisJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpIHsKKwlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnBnbykgeworCQlTQVkoIkVSUk9SOiBwZGF0YV9idWZmZXItPnBnbyBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChOVUxMID09IHBkYXRhX2J1ZmZlci0+cHRvKSB7CisJCVNBWSgiRVJST1I6IHBkYXRhX2J1ZmZlci0+cHRvIGlzIE5VTExcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJa291bnQxID0gUEFHRV9TSVpFIC0gKHBkYXRhX2J1ZmZlci0+cHRvIC0gcGRhdGFfYnVmZmVyLT5wZ28pOworCWlmICgwID4ga291bnQxKSB7CisJCVNBWSgiZWFzeXNuZF9yZWFkOiBNSVNUQUtFOiBrb3VudDEgaXMgbmVnYXRpdmVcbiIpOworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKwlpZiAoIWtvdW50MSkgeworCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQpKys7CisJCWlmIChwZWFzeWNhcC0+YXVkaW9fYnVmZmVyX3BhZ2VfbWFueSA8PSBwZWFzeWNhcC0+YXVkaW9fcmVhZCkKKwkJCXBlYXN5Y2FwLT5hdWRpb19yZWFkID0gMDsKKwkJSk9UKDEyLCAiYnVtcGVkIHBlYXN5Y2FwLT5hdWRpb19yZWFkIHRvICVpXG4iLCBcCisJCQkJCQlwZWFzeWNhcC0+YXVkaW9fcmVhZCk7CisKKwkJaWYgKGZyYWdtZW50ICE9IChwZWFzeWNhcC0+YXVkaW9fcmVhZCAvIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3BhZ2VzX3Blcl9mcmFnbWVudCkpCisJCQlicmVhazsKKworCQlpZiAoKDAgPiBwZWFzeWNhcC0+YXVkaW9fcmVhZCkgfHwgXAorCQkJKHBlYXN5Y2FwLT5hdWRpb19idWZmZXJfcGFnZV9tYW55IDw9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX3JlYWQpKSB7CisJCQlTQVkoIkVSUk9SOiBwZWFzeWNhcC0+YXVkaW9fcmVhZCBvdXQgb2YgcmFuZ2VcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJcGRhdGFfYnVmZmVyID0gJnBlYXN5Y2FwLT5hdWRpb19idWZmZXJbcGVhc3ljYXAtPmF1ZGlvX3JlYWRdOworCQlpZiAoKHN0cnVjdCBkYXRhX2J1ZmZlciAqKU5VTEwgPT0gcGRhdGFfYnVmZmVyKSB7CisJCQlTQVkoIkVSUk9SOiBwZGF0YV9idWZmZXIgaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnBnbykgeworCQkJU0FZKCJFUlJPUjogcGRhdGFfYnVmZmVyLT5wZ28gaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoTlVMTCA9PSBwZGF0YV9idWZmZXItPnB0bykgeworCQkJU0FZKCJFUlJPUjogcGRhdGFfYnVmZmVyLT5wdG8gaXMgTlVMTFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlrb3VudDEgPSBQQUdFX1NJWkUgLSAocGRhdGFfYnVmZmVyLT5wdG8gLSBwZGF0YV9idWZmZXItPnBnbyk7CisJfQorCUpPVCgxMiwgInJlYWR5ICB0byBzZW5kICVsaSBieXRlc1xuIiwgKGxvbmcgaW50KSBrb3VudDEpOworCUpPVCgxMiwgInN0aWxsICB0byBzZW5kICVsaSBieXRlc1xuIiwgKGxvbmcgaW50KSBrb3VudCk7CisJbW9yZSA9IGtvdW50MTsKKwlpZiAobW9yZSA+IGtvdW50KQorCQltb3JlID0ga291bnQ7CisJSk9UKDEyLCAiYWdyZWVkIHRvIHNlbmQgJWxpIGJ5dGVzIGZyb20gcGFnZSAlaVxuIiwgXAorCQkJCQkJbW9yZSwgcGVhc3ljYXAtPmF1ZGlvX3JlYWQpOworCWlmICghbW9yZSkKKwkJYnJlYWs7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgQUNDVU1VTEFURSBEWU5BTUlDLVJBTkdFIElORk9STUFUSU9OCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlwMCA9ICh1bnNpZ25lZCBjaGFyICopcGRhdGFfYnVmZmVyLT5wZ287ICBsMCA9IDA7ICBsbSA9IG1vcmUvMjsKKwl3aGlsZSAobDAgPCBsbSkgeworCQlTVU1NRVIocDAsICZwZWFzeWNhcC0+YXVkaW9fc2FtcGxlLCAmcGVhc3ljYXAtPmF1ZGlvX25pdmVhdSwgXAorCQkJCSZwZWFzeWNhcC0+YXVkaW9fc3F1YXJlKTsgIGwwKys7ICBwMCArPSAyOworCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlyYyA9IGNvcHlfdG9fdXNlcihwdXNlcnNwYWNlYnVmZmVyLCBwZGF0YV9idWZmZXItPnB0bywgbW9yZSk7CisJaWYgKDAgIT0gcmMpIHsKKwkJU0FZKCJFUlJPUjogY29weV90b191c2VyKCkgcmV0dXJuZWQgJWxpXG4iLCByYyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkqcG9mZiArPSAobG9mZl90KW1vcmU7CisJc3pyZXQgKz0gKHNpemVfdCltb3JlOworCXBkYXRhX2J1ZmZlci0+cHRvICs9IG1vcmU7CisJcHVzZXJzcGFjZWJ1ZmZlciArPSBtb3JlOworCWtvdW50IC09IChzaXplX3QpbW9yZTsKK30KK0pPVCgxMiwgImFmdGVyICByZWFkLCAlaT1mcmFnIHJlYWQgICVpPWZyYWcgZmlsbFxuIiwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX3JlYWQgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSwgXAorCQkocGVhc3ljYXAtPmF1ZGlvX2ZpbGwgLyBwZWFzeWNhcC0+YXVkaW9fcGFnZXNfcGVyX2ZyYWdtZW50KSk7CitpZiAoa291bnQgPCAwKSB7CisJU0FZKCJNSVNUQUtFOiAgJWxpPWtvdW50ICAlbGk9c3pyZXRcbiIsIFwKKwkJCQkJKGxvbmcgaW50KWtvdW50LCAobG9uZyBpbnQpc3pyZXQpOworfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqICBDQUxDVUxBVEUgRFlOQU1JQyBSQU5HRSBGT1IgKFZBUE9VUldBUkUpIEFVVE9NQVRJQyBWT0xVTUUgQ09OVFJPTAorICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitpZiAocGVhc3ljYXAtPmF1ZGlvX3NhbXBsZSkgeworCWJlbG93ID0gcGVhc3ljYXAtPmF1ZGlvX3NhbXBsZTsKKwlhYm92ZSA9IHBlYXN5Y2FwLT5hdWRpb19zcXVhcmU7CisJc2RyID0gc2lnbmVkX2RpdihhYm92ZSwgYmVsb3cpOworCWFib3ZlID0gc2RyLnF1b3RpZW50OworCW1lYW4gPSBwZWFzeWNhcC0+YXVkaW9fbml2ZWF1OworCXNkciA9IHNpZ25lZF9kaXYobWVhbiwgcGVhc3ljYXAtPmF1ZGlvX3NhbXBsZSk7CisKKwlKT1QoOCwgIiU4bGxpPW1lYW4gICU4bGxpPW1lYW5zcXVhcmUgYWZ0ZXIgJWxsaSBzYW1wbGVzLCA9PlxuIiwgXAorCQkJCXNkci5xdW90aWVudCwgYWJvdmUsIHBlYXN5Y2FwLT5hdWRpb19zYW1wbGUpOworCisJc2RyID0gc2lnbmVkX2RpdihhYm92ZSwgMzI3NjgpOworCUpPVCg4LCAiYXVkaW8gZHluYW1pYyByYW5nZSBpcyByb3VnaGx5ICVsbGlcbiIsIHNkci5xdW90aWVudCk7Cit9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFVQREFURSBUSEUgQVVESU8gQ0xPQ0sKKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldmFsKTsKK2lmICghcGVhc3ljYXAtPnRpbWV2YWwxLnR2X3NlYykgeworCWF1ZGlvX2J5dGVzID0gMDsKKwl0aW1ldmFsMSA9IHRpbWV2YWw7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJcGVhc3ljYXAtPnRpbWV2YWwxID0gdGltZXZhbDE7CisJbXV0ZXhfdW5sb2NrKCYocGVhc3ljYXAtPm11dGV4X3RpbWV2YWwxKSk7CisJc2RyLnF1b3RpZW50ID0gMTkyMDAwOworfSBlbHNlIHsKKwlhdWRpb19ieXRlcyArPSAobG9uZyBsb25nIGludCkgc3pyZXQ7CisJYmVsb3cgPSAoKGxvbmcgbG9uZyBpbnQpKDEwMDAwMDApKSAqIFwKKwkJKChsb25nIGxvbmcgaW50KSh0aW1ldmFsLnR2X3NlYyAgLSB0aW1ldmFsMS50dl9zZWMpKSArIFwKKwkJKGxvbmcgbG9uZyBpbnQpKHRpbWV2YWwudHZfdXNlYyAtIHRpbWV2YWwxLnR2X3VzZWMpOworCWFib3ZlID0gMTAwMDAwMCAqICgobG9uZyBsb25nIGludCkgYXVkaW9fYnl0ZXMpOworCisJaWYgKGJlbG93KQorCQlzZHIgPSBzaWduZWRfZGl2KGFib3ZlLCBiZWxvdyk7CisJZWxzZQorCQlzZHIucXVvdGllbnQgPSAxOTIwMDA7Cit9CitKT1QoOCwgImF1ZGlvIHN0cmVhbWluZyBhdCAlbGxpIGJ5dGVzL3NlY29uZFxuIiwgc2RyLnF1b3RpZW50KTsKK2lmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJihwZWFzeWNhcC0+bXV0ZXhfdGltZXZhbDEpKSkKKwlyZXR1cm4gLUVSRVNUQVJUU1lTOworcGVhc3ljYXAtPmRuYnlkdCA9IHNkci5xdW90aWVudDsKK211dGV4X3VubG9jaygmKHBlYXN5Y2FwLT5tdXRleF90aW1ldmFsMSkpOworCitKT1QoOCwgInJldHVybmluZyAlbGlcbiIsIChsb25nIGludClzenJldCk7CityZXR1cm4gc3pyZXQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogIFNVQk1JVCBBTEwgQVVESU8gVVJCUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitzdWJtaXRfYXVkaW9fdXJicyhzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXApCit7CitzdHJ1Y3QgZGF0YV91cmIgKnBkYXRhX3VyYjsKK3N0cnVjdCB1cmIgKnB1cmI7CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworaW50IGosIGlzYmFkLCBtLCByYzsKK2ludCBpc2J1ZjsKKworaWYgKChzdHJ1Y3QgbGlzdF9oZWFkICopTlVMTCA9PSBwZWFzeWNhcC0+cHVyYl9hdWRpb19oZWFkKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnVyYl9hdWRpb19oZWFkIHVuaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKChzdHJ1Y3QgdXNiX2RldmljZSAqKU5VTEwgPT0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlKSB7CisJU0FZKCJFUlJPUjogcGVhc3ljYXAtPnB1c2JfZGV2aWNlIGlzIE5VTExcbiIpOworCXJldHVybiAtRUZBVUxUOworfQoraWYgKCFwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlKT1QoNCwgImluaXRpYWwgc3VibWlzc2lvbiBvZiBhbGwgYXVkaW8gdXJic1xuIik7CisJcmMgPSB1c2Jfc2V0X2ludGVyZmFjZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pbnRlcmZhY2UsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2FsdHNldHRpbmdfb24pOworCUpPVCg4LCAidXNiX3NldF9pbnRlcmZhY2UoLiwlaSwlaSkgcmV0dXJuZWQgJWlcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2ludGVyZmFjZSwgXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fYWx0c2V0dGluZ19vbiwgcmMpOworCisJaXNiYWQgPSAwOyAgbSA9IDA7CisJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJcGRhdGFfdXJiID0gbGlzdF9lbnRyeShwbGlzdF9oZWFkLCBzdHJ1Y3QgZGF0YV91cmIsIGxpc3RfaGVhZCk7CisJCWlmIChOVUxMICE9IHBkYXRhX3VyYikgeworCQkJcHVyYiA9IHBkYXRhX3VyYi0+cHVyYjsKKwkJCWlmIChOVUxMICE9IHB1cmIpIHsKKwkJCQlpc2J1ZiA9IHBkYXRhX3VyYi0+aXNidWY7CisKKwkJCQlwdXJiLT5pbnRlcnZhbCA9IDE7CisJCQkJcHVyYi0+ZGV2ID0gcGVhc3ljYXAtPnB1c2JfZGV2aWNlOworCQkJCXB1cmItPnBpcGUgPSBcCisJCQkJCXVzYl9yY3Zpc29jcGlwZShwZWFzeWNhcC0+cHVzYl9kZXZpY2UsXAorCQkJCQlwZWFzeWNhcC0+YXVkaW9fZW5kcG9pbnRudW1iZXIpOworCQkJCXB1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQOworCQkJCXB1cmItPnRyYW5zZmVyX2J1ZmZlciA9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyW2lzYnVmXS5wZ287CisJCQkJcHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2NfYnVmZmVyX3NpemU7CisJCQkJcHVyYi0+Y29tcGxldGUgPSBlYXN5c25kX2NvbXBsZXRlOworCQkJCXB1cmItPmNvbnRleHQgPSBwZWFzeWNhcDsKKwkJCQlwdXJiLT5zdGFydF9mcmFtZSA9IDA7CisJCQkJcHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPSBcCisJCQkJCXBlYXN5Y2FwLT5hdWRpb19pc29jX2ZyYW1lc3BlcmRlc2M7CisJCQkJZm9yIChqID0gMDsgIGogPCBwZWFzeWNhcC0+XAorCQkJCQkJYXVkaW9faXNvY19mcmFtZXNwZXJkZXNjOyBcCisJCQkJCQkJCQlqKyspIHsKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ub2Zmc2V0ID0gaiAqIFwKKwkJCQkJCXBlYXN5Y2FwLT5cCisJCQkJCQlhdWRpb19pc29jX21heGZyYW1lc2l6ZTsKKwkJCQkJcHVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gXAorCQkJCQkJcGVhc3ljYXAtPlwKKwkJCQkJCWF1ZGlvX2lzb2NfbWF4ZnJhbWVzaXplOworCQkJCX0KKworCQkJCXJjID0gdXNiX3N1Ym1pdF91cmIocHVyYiwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKDAgIT0gcmMpIHsKKwkJCQkJaXNiYWQrKzsKKwkJCQkJU0FZKCJFUlJPUjogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiIFwKKwkJCQkJCQkiIGZvciB1cmIgd2l0aCByYzpcbiIpOworCQkJCQlzd2l0Y2ggKHJjKSB7CisJCQkJCWNhc2UgLUVOT01FTTogeworCQkJCQkJU0FZKCJFTk9NRU1cbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTk9ERVY6IHsKKwkJCQkJCVNBWSgiRU5PREVWXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRU5YSU86IHsKKwkJCQkJCVNBWSgiRU5YSU9cbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FSU5WQUw6IHsKKwkJCQkJCVNBWSgiRUlOVkFMXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRUFHQUlOOiB7CisJCQkJCQlTQVkoIkVBR0FJTlxuIik7IGJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVGQklHOiB7CisJCQkJCQlTQVkoIkVGQklHXG4iKTsgYnJlYWs7CisJCQkJCX0KKwkJCQkJY2FzZSAtRVBJUEU6IHsKKwkJCQkJCVNBWSgiRVBJUEVcbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQljYXNlIC1FTVNHU0laRTogeworCQkJCQkJU0FZKCJFTVNHU0laRVxuIik7IGJyZWFrOworCQkJCQl9CisJCQkJCWNhc2UgLUVOT1NQQzogeworCQkJCQkJU0FZKCJFTk9TUENcbiIpOyBicmVhazsKKwkJCQkJfQorCQkJCQlkZWZhdWx0OiB7CisJCQkJCQlTQVkoInVua25vd24gZXJyb3IgY29kZSAlaVxuIixcCisJCQkJCQkJCSByYyk7IGJyZWFrOworCQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkgbSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaXNiYWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlzYmFkKys7CisJCX0KKwl9CisJaWYgKGlzYmFkKSB7CisJCUpPVCg0LCAiYXR0ZW1wdGluZyBjbGVhbnVwIGluc3RlYWQgb2Ygc3VibWl0dGluZ1xuIik7CisJCWxpc3RfZm9yX2VhY2gocGxpc3RfaGVhZCwgKHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpKSB7CisJCQlwZGF0YV91cmIgPSBsaXN0X2VudHJ5KHBsaXN0X2hlYWQsIHN0cnVjdCBkYXRhX3VyYiwgXAorCQkJCQkJCQlsaXN0X2hlYWQpOworCQkJaWYgKE5VTEwgIT0gcGRhdGFfdXJiKSB7CisJCQkJcHVyYiA9IHBkYXRhX3VyYi0+cHVyYjsKKwkJCQlpZiAoTlVMTCAhPSBwdXJiKQorCQkJCQl1c2Jfa2lsbF91cmIocHVyYik7CisJCQl9CisJCX0KKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwl9IGVsc2UgeworCQlwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcgPSAxOworCQlKT1QoNCwgInN1Ym1pdHRlZCAlaSBhdWRpbyB1cmJzXG4iLCBtKTsKKwl9Cit9IGVsc2UKKwlKT1QoNCwgImFscmVhZHkgc3RyZWFtaW5nIGF1ZGlvIHVyYnNcbiIpOworCityZXR1cm4gMDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiAgS0lMTCBBTEwgQVVESU8gVVJCUy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50CitraWxsX2F1ZGlvX3VyYnMoc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwKQoreworaW50IG07CitzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdF9oZWFkOworc3RydWN0IGRhdGFfdXJiICpwZGF0YV91cmI7CisKK2lmIChwZWFzeWNhcC0+YXVkaW9faXNvY19zdHJlYW1pbmcpIHsKKwlpZiAoKHN0cnVjdCBsaXN0X2hlYWQgKilOVUxMICE9IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQpIHsKKwkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nID0gMDsKKwkJSk9UKDQsICJraWxsaW5nIGF1ZGlvIHVyYnNcbiIpOworCQltID0gMDsKKwkJbGlzdF9mb3JfZWFjaChwbGlzdF9oZWFkLCAocGVhc3ljYXAtPnB1cmJfYXVkaW9faGVhZCkpIHsKKwkJCXBkYXRhX3VyYiA9IGxpc3RfZW50cnkocGxpc3RfaGVhZCwgc3RydWN0IGRhdGFfdXJiLAorCQkJCQkJCQlsaXN0X2hlYWQpOworCQkJaWYgKChzdHJ1Y3QgZGF0YV91cmIgKilOVUxMICE9IHBkYXRhX3VyYikgeworCQkJCWlmICgoc3RydWN0IHVyYiAqKU5VTEwgIT0gcGRhdGFfdXJiLT5wdXJiKSB7CisJCQkJCXVzYl9raWxsX3VyYihwZGF0YV91cmItPnB1cmIpOworCQkJCQltKys7CisJCQkJfQorCQkJfQorCQl9CisJCUpPVCg0LCAiJWkgYXVkaW8gdXJicyBraWxsZWRcbiIsIG0pOworCX0gZWxzZSB7CisJCVNBWSgiRVJST1I6IHBlYXN5Y2FwLT5wdXJiX2F1ZGlvX2hlYWQgaXMgTlVMTFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KK30gZWxzZSB7CisJSk9UKDgsICIlaT1hdWRpb19pc29jX3N0cmVhbWluZywgbm8gYXVkaW8gdXJicyBraWxsZWRcbiIsIFwKKwkJCQkJcGVhc3ljYXAtPmF1ZGlvX2lzb2Nfc3RyZWFtaW5nKTsKK30KK3JldHVybiAwOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5oIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zb3VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MTI3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWFzeWNhcC9lYXN5Y2FwX3NvdW5kLmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIGVhc3ljYXBfc291bmQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBSLk0uIFRob21hcyAgPHJtdGhvbWFzQHNjaW9sdXMub3JnPgorICoKKyAqCisgKiAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoZSBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitleHRlcm4gc3RydWN0IGVhc3ljYXAgKnBlYXN5Y2FwOworZXh0ZXJuIHN0cnVjdCB1c2JfZHJpdmVyIGVhc3ljYXBfdXNiX2RyaXZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc3RhbmRhcmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfc3RhbmRhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRjOGQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF9zdGFuZGFyZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3N0YW5kYXJkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIHN0cnVjdCBlYXN5Y2FwX3N0YW5kYXJkIGVhc3ljYXBfc3RhbmRhcmRbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfdGVzdGNhcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9lYXN5Y2FwL2Vhc3ljYXBfdGVzdGNhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzJjZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Vhc3ljYXAvZWFzeWNhcF90ZXN0Y2FyZC5jCkBAIC0wLDAgKzEsMzkyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBlYXN5Y2FwX3Rlc3RjYXJkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgUi5NLiBUaG9tYXMgIDxybXRob21hc0BzY2lvbHVzLm9yZz4KKyAqCisgKgorICogIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiZWFzeWNhcC5oIgorI2luY2x1ZGUgImVhc3ljYXBfZGVidWcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBURVNUQ0FSRF9CWVRFU1BFUkxJTkUgKDIgKiAxNDQwKQordm9pZAorZWFzeWNhcF90ZXN0Y2FyZChzdHJ1Y3QgZWFzeWNhcCAqcGVhc3ljYXAsIGludCBmaWVsZF9maWxsKQoreworaW50IHRvdGFsOworaW50IHksIHUsIHYsIHIsIGcsIGI7Cit1bnNpZ25lZCBjaGFyIHV5dnlbNF07CisKK2ludCBpMSwgbGluZSwgaywgbSwgbiwgbW9yZSwgbXVjaCwgYmFyd2lkdGg7Cit1bnNpZ25lZCBjaGFyIGJmYmFyW1RFU1RDQVJEX0JZVEVTUEVSTElORSAvIDhdLCAqcDEsICpwMjsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGZpZWxkX2J1ZmZlcjsKKworSk9UKDgsICIlaT1maWVsZF9maWxsXG4iLCBmaWVsZF9maWxsKTsKKworaWYgKChURVNUQ0FSRF9CWVRFU1BFUkxJTkUgLyAyKSA8IHBlYXN5Y2FwLT53aWR0aCkgeworCVNBWSgiRVJST1I6IGltYWdlIGlzIHRvbyB3aWRlXG4iKTsKKwlyZXR1cm47Cit9CitpZiAocGVhc3ljYXAtPndpZHRoICUgMTYpIHsKKwlTQVkoIkVSUk9SOiBpbmRpdmlzaWJsZSBpbWFnZSB3aWR0aFxuIik7CisJcmV0dXJuOworfQorCit0b3RhbCA9IDA7CitiYXJ3aWR0aCA9ICgyICogcGVhc3ljYXAtPndpZHRoKSAvIDg7CisKK2sgPSBmaWVsZF9maWxsOworbSA9IDA7CituID0gMDsKKworZm9yIChsaW5lID0gMDsgIGxpbmUgPCAocGVhc3ljYXAtPmhlaWdodCAvIDIpOyAgbGluZSsrKSB7CisJZm9yIChpMSA9IDA7ICBpMSA8IDg7ICBpMSsrKSB7CisJCXIgPSAoaTEgKiAyNTYpLzg7CisJCWcgPSAoaTEgKiAyNTYpLzg7CisJCWIgPSAoaTEgKiAyNTYpLzg7CisKKwkJeSA9ICAyOTkqci8xMDAwICsgNTg3KmcvMTAwMCArIDExNCpiLzEwMDAgOworCQl1ID0gLTE0NypyLzEwMDAgLSAyODkqZy8xMDAwICsgNDM2KmIvMTAwMCA7ICB1ID0gdSArIDEyODsKKwkJdiA9ICA2MTUqci8xMDAwIC0gNTE1KmcvMTAwMCAtIDEwMCpiLzEwMDAgOyAgdiA9IHYgKyAxMjg7CisKKwkJdXl2eVswXSA9ICAweEZGICYgdSA7CisJCXV5dnlbMV0gPSAgMHhGRiAmIHkgOworCQl1eXZ5WzJdID0gIDB4RkYgJiB2IDsKKwkJdXl2eVszXSA9ICAweEZGICYgeSA7CisKKwkJcDEgPSAmYmZiYXJbMF07CisJCXdoaWxlIChwMSA8ICZiZmJhcltiYXJ3aWR0aF0pIHsKKwkJCSpwMSsrID0gdXl2eVswXSA7CisJCQkqcDErKyA9IHV5dnlbMV0gOworCQkJKnAxKysgPSB1eXZ5WzJdIDsKKwkJCSpwMSsrID0gdXl2eVszXSA7CisJCQl0b3RhbCArPSA0OworCQkJfQorCisJCXAxID0gJmJmYmFyWzBdOworCQltb3JlID0gYmFyd2lkdGg7CisKKwkJd2hpbGUgKG1vcmUpIHsKKwkJCWlmICgoRklFTERfQlVGRkVSX1NJWkUvUEFHRV9TSVpFKSA8PSBtKSB7CisJCQkJU0FZKCJFUlJPUjogIGJhZCBtIHJlYWNoZWRcbiIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJaWYgKFBBR0VfU0laRSA8IG4pIHsKKwkJCVNBWSgiRVJST1I6ICBiYWQgbiByZWFjaGVkXG4iKTsgcmV0dXJuOworCQl9CisKKwkJaWYgKDAgPiBtb3JlKSB7CisJCQlTQVkoIkVSUk9SOiAgaW50ZXJuYWwgZmF1bHRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJbXVjaCA9IFBBR0VfU0laRSAtIG47CisJCWlmIChtdWNoID4gbW9yZSkKKwkJCW11Y2ggPSBtb3JlOworCQlwZmllbGRfYnVmZmVyID0gJnBlYXN5Y2FwLT5maWVsZF9idWZmZXJba11bbV07CisJCXAyID0gcGZpZWxkX2J1ZmZlci0+cGdvICsgbjsKKwkJbWVtY3B5KHAyLCBwMSwgbXVjaCk7CisKKwkJcDEgKz0gbXVjaDsKKwkJbiArPSBtdWNoOworCQltb3JlIC09IG11Y2g7CisJCWlmIChQQUdFX1NJWkUgPT0gbikgeworCQkJbSsrOworCQkJbiA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK0pPVCg4LCAiJWk9dG90YWxcbiIsIHRvdGFsKTsKK2lmICh0b3RhbCAhPSBwZWFzeWNhcC0+d2lkdGggKiBwZWFzeWNhcC0+aGVpZ2h0KQorCVNBWSgiRVJST1I6IHdyb25nIG51bWJlciBvZiBieXRlcyB3cml0dGVuOiAgJWlcbiIsIHRvdGFsKTsKK3JldHVybjsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKEVBU1lDQVBfVEVTVFRPTkUpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUSEUgdG9uZXNbXSBBUlJBWSBCRUxPVyBJUyBUSEUgT1VUUFVUIE9GIFRISVMgUFJPR1JBTSwKK0NPTVBJTEVEIGdjYyAtbyBwcm9nIC1sbSBwcm9nLmMKKy0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworaW50IG1haW4odm9pZCk7CitpbnQKK21haW4odm9pZCkKK3sKK2ludCBpMSwgaTIsIGxhc3Q7Citkb3VibGUgZDEsIGQyOworCitsYXN0ID0gMTAyNCAtIDE7CitkMSA9IDEwLjAqMy4xNDE1OTI2NS8xMDI0LjA7CitwcmludGYoImludCB0b25lc1syMDQ4XSA9XG57XG4iKTsKK2ZvciAoaTEgPSAwOyAgaTEgPD0gbGFzdDsgIGkxKyspCisJeworCWQyID0gKChkb3VibGUpaTEpICogZDE7CisJaTIgPSAoaW50KSgxNjM4NC4wKnNpbihkMikpOworCisJaWYgKGxhc3QgIT0gaTEpCisJCXsKKwkJcHJpbnRmKCIlNmksICIsIGkyKTsgIHByaW50ZigiJTZpLCAiLCBpMik7CisJCWlmICghKChpMSArIDEpJTUpKSBwcmludGYoIlxuIik7CisJCX0KKwllbHNlCisJCXsKKwkJcHJpbnRmKCIlNmksICIsIGkyKTsgIHByaW50ZigiJTZpXG59O1xuIiwgaTIpOworCQl9CisJfQorcmV0dXJuKDApOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworaW50IHRvbmVzWzIwNDhdID0geworICAgICAwLCAgICAgMCwgICA1MDIsICAgNTAyLCAgMTAwNCwgIDEwMDQsICAxNTA1LCAgMTUwNSwgIDIwMDUsICAyMDA1LAorICAyNTAzLCAgMjUwMywgIDI5OTgsICAyOTk4LCAgMzQ5MSwgIDM0OTEsICAzOTgwLCAgMzk4MCwgIDQ0NjYsICA0NDY2LAorICA0OTQ4LCAgNDk0OCwgIDU0MjQsICA1NDI0LCAgNTg5NiwgIDU4OTYsICA2MzYyLCAgNjM2MiwgIDY4MjIsICA2ODIyLAorICA3Mjc2LCAgNzI3NiwgIDc3MjMsICA3NzIzLCAgODE2MiwgIDgxNjIsICA4NTk0LCAgODU5NCwgIDkwMTgsICA5MDE4LAorICA5NDM0LCAgOTQzNCwgIDk4NDAsICA5ODQwLCAxMDIzNywgMTAyMzcsIDEwNjI1LCAxMDYyNSwgMTEwMDIsIDExMDAyLAorIDExMzcwLCAxMTM3MCwgMTE3MjYsIDExNzI2LCAxMjA3MiwgMTIwNzIsIDEyNDA2LCAxMjQwNiwgMTI3MjgsIDEyNzI4LAorIDEzMDM4LCAxMzAzOCwgMTMzMzcsIDEzMzM3LCAxMzYyMiwgMTM2MjIsIDEzODk1LCAxMzg5NSwgMTQxNTUsIDE0MTU1LAorIDE0NDAxLCAxNDQwMSwgMTQ2MzQsIDE0NjM0LCAxNDg1MywgMTQ4NTMsIDE1MDU4LCAxNTA1OCwgMTUyNDksIDE1MjQ5LAorIDE1NDI2LCAxNTQyNiwgMTU1ODgsIDE1NTg4LCAxNTczNSwgMTU3MzUsIDE1ODY4LCAxNTg2OCwgMTU5ODUsIDE1OTg1LAorIDE2MDg4LCAxNjA4OCwgMTYxNzUsIDE2MTc1LCAxNjI0OCwgMTYyNDgsIDE2MzA1LCAxNjMwNSwgMTYzNDYsIDE2MzQ2LAorIDE2MzcyLCAxNjM3MiwgMTYzODMsIDE2MzgzLCAxNjM3OSwgMTYzNzksIDE2MzU5LCAxNjM1OSwgMTYzMjMsIDE2MzIzLAorIDE2MjcyLCAxNjI3MiwgMTYyMDYsIDE2MjA2LCAxNjEyNSwgMTYxMjUsIDE2MDI4LCAxNjAyOCwgMTU5MTcsIDE1OTE3LAorIDE1NzkwLCAxNTc5MCwgMTU2NDksIDE1NjQ5LCAxNTQ5MiwgMTU0OTIsIDE1MzIyLCAxNTMyMiwgMTUxMzYsIDE1MTM2LAorIDE0OTM3LCAxNDkzNywgMTQ3MjMsIDE0NzIzLCAxNDQ5NiwgMTQ0OTYsIDE0MjU1LCAxNDI1NSwgMTQwMDEsIDE0MDAxLAorIDEzNzMzLCAxMzczMywgMTM0NTIsIDEzNDUyLCAxMzE1OSwgMTMxNTksIDEyODU0LCAxMjg1NCwgMTI1MzYsIDEyNTM2LAorIDEyMjA3LCAxMjIwNywgMTE4NjYsIDExODY2LCAxMTUxMywgMTE1MTMsIDExMTUwLCAxMTE1MCwgMTA3NzcsIDEwNzc3LAorIDEwMzkzLCAxMDM5MywgMTAwMDAsIDEwMDAwLCAgOTU5NywgIDk1OTcsICA5MTg1LCAgOTE4NSwgIDg3NjUsICA4NzY1LAorICA4MzM2LCAgODMzNiwgIDc5MDAsICA3OTAwLCAgNzQ1NiwgIDc0NTYsICA3MDA1LCAgNzAwNSwgIDY1NDcsICA2NTQ3LAorICA2MDgzLCAgNjA4MywgIDU2MTQsICA1NjE0LCAgNTEzOSwgIDUxMzksICA0NjU5LCAgNDY1OSwgIDQxNzUsICA0MTc1LAorICAzNjg3LCAgMzY4NywgIDMxOTYsICAzMTk2LCAgMjcwMSwgIDI3MDEsICAyMjA0LCAgMjIwNCwgIDE3MDUsICAxNzA1LAorICAxMjA1LCAgMTIwNSwgICA3MDMsICAgNzAzLCAgIDIwMSwgICAyMDEsICAtMzAxLCAgLTMwMSwgIC04MDMsICAtODAzLAorIC0xMzA1LCAtMTMwNSwgLTE4MDUsIC0xODA1LCAtMjMwNCwgLTIzMDQsIC0yODAxLCAtMjgwMSwgLTMyOTQsIC0zMjk0LAorIC0zNzg1LCAtMzc4NSwgLTQyNzIsIC00MjcyLCAtNDc1NiwgLTQ3NTYsIC01MjM0LCAtNTIzNCwgLTU3MDgsIC01NzA4LAorIC02MTc2LCAtNjE3NiwgLTY2MzksIC02NjM5LCAtNzA5NSwgLTcwOTUsIC03NTQ1LCAtNzU0NSwgLTc5ODgsIC03OTg4LAorIC04NDIzLCAtODQyMywgLTg4NTAsIC04ODUwLCAtOTI2OCwgLTkyNjgsIC05Njc5LCAtOTY3OSwgLTEwMDc5LCAtMTAwNzksCistMTA0NzEsIC0xMDQ3MSwgLTEwODUzLCAtMTA4NTMsIC0xMTIyNCwgLTExMjI0LCAtMTE1ODUsIC0xMTU4NSwgLTExOTM1LCAtMTE5MzUsCistMTIyNzMsIC0xMjI3MywgLTEyNjAwLCAtMTI2MDAsIC0xMjkxNiwgLTEyOTE2LCAtMTMyMTksIC0xMzIxOSwgLTEzNTEwLCAtMTM1MTAsCistMTM3ODgsIC0xMzc4OCwgLTE0MDUzLCAtMTQwNTMsIC0xNDMwNCwgLTE0MzA0LCAtMTQ1NDMsIC0xNDU0MywgLTE0NzY3LCAtMTQ3NjcsCistMTQ5NzgsIC0xNDk3OCwgLTE1MTc1LCAtMTUxNzUsIC0xNTM1NywgLTE1MzU3LCAtMTU1MjUsIC0xNTUyNSwgLTE1Njc4LCAtMTU2NzgsCistMTU4MTcsIC0xNTgxNywgLTE1OTQwLCAtMTU5NDAsIC0xNjA0OSwgLTE2MDQ5LCAtMTYxNDIsIC0xNjE0MiwgLTE2MjIxLCAtMTYyMjEsCistMTYyODQsIC0xNjI4NCwgLTE2MzMxLCAtMTYzMzEsIC0xNjM2NCwgLTE2MzY0LCAtMTYzODEsIC0xNjM4MSwgLTE2MzgyLCAtMTYzODIsCistMTYzNjgsIC0xNjM2OCwgLTE2MzM5LCAtMTYzMzksIC0xNjI5NCwgLTE2Mjk0LCAtMTYyMzQsIC0xNjIzNCwgLTE2MTU5LCAtMTYxNTksCistMTYwNjksIC0xNjA2OSwgLTE1OTYzLCAtMTU5NjMsIC0xNTg0MiwgLTE1ODQyLCAtMTU3MDcsIC0xNTcwNywgLTE1NTU3LCAtMTU1NTcsCistMTUzOTIsIC0xNTM5MiwgLTE1MjEyLCAtMTUyMTIsIC0xNTAxOCwgLTE1MDE4LCAtMTQ4MTAsIC0xNDgxMCwgLTE0NTg5LCAtMTQ1ODksCistMTQzNTMsIC0xNDM1MywgLTE0MTA0LCAtMTQxMDQsIC0xMzg0MiwgLTEzODQyLCAtMTM1NjYsIC0xMzU2NiwgLTEzMjc4LCAtMTMyNzgsCistMTI5NzcsIC0xMjk3NywgLTEyNjY1LCAtMTI2NjUsIC0xMjM0MCwgLTEyMzQwLCAtMTIwMDMsIC0xMjAwMywgLTExNjU2LCAtMTE2NTYsCistMTEyOTcsIC0xMTI5NywgLTEwOTI4LCAtMTA5MjgsIC0xMDU0OCwgLTEwNTQ4LCAtMTAxNTksIC0xMDE1OSwgLTk3NTksIC05NzU5LAorIC05MzUxLCAtOTM1MSwgLTg5MzQsIC04OTM0LCAtODUwOSwgLTg1MDksIC04MDc1LCAtODA3NSwgLTc2MzQsIC03NjM0LAorIC03MTg2LCAtNzE4NiwgLTY3MzEsIC02NzMxLCAtNjI2OSwgLTYyNjksIC01ODAyLCAtNTgwMiwgLTUzMjksIC01MzI5LAorIC00ODUyLCAtNDg1MiwgLTQzNjksIC00MzY5LCAtMzg4MywgLTM4ODMsIC0zMzkzLCAtMzM5MywgLTI5MDAsIC0yOTAwLAorIC0yNDA0LCAtMjQwNCwgLTE5MDUsIC0xOTA1LCAtMTQwNSwgLTE0MDUsICAtOTA0LCAgLTkwNCwgIC00MDIsICAtNDAyLAorICAgMTAwLCAgIDEwMCwgICA2MDMsICAgNjAzLCAgMTEwNSwgIDExMDUsICAxNjA1LCAgMTYwNSwgIDIxMDUsICAyMTA1LAorICAyNjAyLCAgMjYwMiwgIDMwOTcsICAzMDk3LCAgMzU4OSwgIDM1ODksICA0MDc4LCAgNDA3OCwgIDQ1NjMsICA0NTYzLAorICA1MDQzLCAgNTA0MywgIDU1MTksICA1NTE5LCAgNTk5MCwgIDU5OTAsICA2NDU1LCAgNjQ1NSwgIDY5MTQsICA2OTE0LAorICA3MzY2LCAgNzM2NiwgIDc4MTEsICA3ODExLCAgODI0OSwgIDgyNDksICA4NjgwLCAgODY4MCwgIDkxMDIsICA5MTAyLAorICA5NTE2LCAgOTUxNiwgIDk5MjAsICA5OTIwLCAxMDMxNSwgMTAzMTUsIDEwNzAxLCAxMDcwMSwgMTEwNzcsIDExMDc3LAorIDExNDQyLCAxMTQ0MiwgMTE3OTYsIDExNzk2LCAxMjEzOSwgMTIxMzksIDEyNDcxLCAxMjQ3MSwgMTI3OTEsIDEyNzkxLAorIDEzMDk5LCAxMzA5OSwgMTMzOTUsIDEzMzk1LCAxMzY3OCwgMTM2NzgsIDEzOTQ4LCAxMzk0OCwgMTQyMDUsIDE0MjA1LAorIDE0NDQ5LCAxNDQ0OSwgMTQ2NzksIDE0Njc5LCAxNDg5NSwgMTQ4OTUsIDE1MDk4LCAxNTA5OCwgMTUyODYsIDE1Mjg2LAorIDE1NDU5LCAxNTQ1OSwgMTU2MTgsIDE1NjE4LCAxNTc2MywgMTU3NjMsIDE1ODkyLCAxNTg5MiwgMTYwMDcsIDE2MDA3LAorIDE2MTA3LCAxNjEwNywgMTYxOTEsIDE2MTkxLCAxNjI2MCwgMTYyNjAsIDE2MzE0LCAxNjMxNCwgMTYzNTMsIDE2MzUzLAorIDE2Mzc2LCAxNjM3NiwgMTYzODQsIDE2Mzg0LCAxNjM3NiwgMTYzNzYsIDE2MzUzLCAxNjM1MywgMTYzMTQsIDE2MzE0LAorIDE2MjYwLCAxNjI2MCwgMTYxOTEsIDE2MTkxLCAxNjEwNywgMTYxMDcsIDE2MDA3LCAxNjAwNywgMTU4OTIsIDE1ODkyLAorIDE1NzYzLCAxNTc2MywgMTU2MTgsIDE1NjE4LCAxNTQ1OSwgMTU0NTksIDE1Mjg2LCAxNTI4NiwgMTUwOTgsIDE1MDk4LAorIDE0ODk1LCAxNDg5NSwgMTQ2NzksIDE0Njc5LCAxNDQ0OSwgMTQ0NDksIDE0MjA1LCAxNDIwNSwgMTM5NDgsIDEzOTQ4LAorIDEzNjc4LCAxMzY3OCwgMTMzOTUsIDEzMzk1LCAxMzA5OSwgMTMwOTksIDEyNzkxLCAxMjc5MSwgMTI0NzEsIDEyNDcxLAorIDEyMTM5LCAxMjEzOSwgMTE3OTYsIDExNzk2LCAxMTQ0MiwgMTE0NDIsIDExMDc3LCAxMTA3NywgMTA3MDEsIDEwNzAxLAorIDEwMzE1LCAxMDMxNSwgIDk5MjAsICA5OTIwLCAgOTUxNiwgIDk1MTYsICA5MTAyLCAgOTEwMiwgIDg2ODAsICA4NjgwLAorICA4MjQ5LCAgODI0OSwgIDc4MTEsICA3ODExLCAgNzM2NiwgIDczNjYsICA2OTE0LCAgNjkxNCwgIDY0NTUsICA2NDU1LAorICA1OTkwLCAgNTk5MCwgIDU1MTksICA1NTE5LCAgNTA0MywgIDUwNDMsICA0NTYzLCAgNDU2MywgIDQwNzgsICA0MDc4LAorICAzNTg5LCAgMzU4OSwgIDMwOTcsICAzMDk3LCAgMjYwMiwgIDI2MDIsICAyMTA1LCAgMjEwNSwgIDE2MDUsICAxNjA1LAorICAxMTA1LCAgMTEwNSwgICA2MDMsICAgNjAzLCAgIDEwMCwgICAxMDAsICAtNDAyLCAgLTQwMiwgIC05MDQsICAtOTA0LAorIC0xNDA1LCAtMTQwNSwgLTE5MDUsIC0xOTA1LCAtMjQwNCwgLTI0MDQsIC0yOTAwLCAtMjkwMCwgLTMzOTMsIC0zMzkzLAorIC0zODgzLCAtMzg4MywgLTQzNjksIC00MzY5LCAtNDg1MiwgLTQ4NTIsIC01MzI5LCAtNTMyOSwgLTU4MDIsIC01ODAyLAorIC02MjY5LCAtNjI2OSwgLTY3MzEsIC02NzMxLCAtNzE4NiwgLTcxODYsIC03NjM0LCAtNzYzNCwgLTgwNzUsIC04MDc1LAorIC04NTA5LCAtODUwOSwgLTg5MzQsIC04OTM0LCAtOTM1MSwgLTkzNTEsIC05NzU5LCAtOTc1OSwgLTEwMTU5LCAtMTAxNTksCistMTA1NDgsIC0xMDU0OCwgLTEwOTI4LCAtMTA5MjgsIC0xMTI5NywgLTExMjk3LCAtMTE2NTYsIC0xMTY1NiwgLTEyMDAzLCAtMTIwMDMsCistMTIzNDAsIC0xMjM0MCwgLTEyNjY1LCAtMTI2NjUsIC0xMjk3NywgLTEyOTc3LCAtMTMyNzgsIC0xMzI3OCwgLTEzNTY2LCAtMTM1NjYsCistMTM4NDIsIC0xMzg0MiwgLTE0MTA0LCAtMTQxMDQsIC0xNDM1MywgLTE0MzUzLCAtMTQ1ODksIC0xNDU4OSwgLTE0ODEwLCAtMTQ4MTAsCistMTUwMTgsIC0xNTAxOCwgLTE1MjEyLCAtMTUyMTIsIC0xNTM5MiwgLTE1MzkyLCAtMTU1NTcsIC0xNTU1NywgLTE1NzA3LCAtMTU3MDcsCistMTU4NDIsIC0xNTg0MiwgLTE1OTYzLCAtMTU5NjMsIC0xNjA2OSwgLTE2MDY5LCAtMTYxNTksIC0xNjE1OSwgLTE2MjM0LCAtMTYyMzQsCistMTYyOTQsIC0xNjI5NCwgLTE2MzM5LCAtMTYzMzksIC0xNjM2OCwgLTE2MzY4LCAtMTYzODIsIC0xNjM4MiwgLTE2MzgxLCAtMTYzODEsCistMTYzNjQsIC0xNjM2NCwgLTE2MzMxLCAtMTYzMzEsIC0xNjI4NCwgLTE2Mjg0LCAtMTYyMjEsIC0xNjIyMSwgLTE2MTQyLCAtMTYxNDIsCistMTYwNDksIC0xNjA0OSwgLTE1OTQwLCAtMTU5NDAsIC0xNTgxNywgLTE1ODE3LCAtMTU2NzgsIC0xNTY3OCwgLTE1NTI1LCAtMTU1MjUsCistMTUzNTcsIC0xNTM1NywgLTE1MTc1LCAtMTUxNzUsIC0xNDk3OCwgLTE0OTc4LCAtMTQ3NjcsIC0xNDc2NywgLTE0NTQzLCAtMTQ1NDMsCistMTQzMDQsIC0xNDMwNCwgLTE0MDUzLCAtMTQwNTMsIC0xMzc4OCwgLTEzNzg4LCAtMTM1MTAsIC0xMzUxMCwgLTEzMjE5LCAtMTMyMTksCistMTI5MTYsIC0xMjkxNiwgLTEyNjAwLCAtMTI2MDAsIC0xMjI3MywgLTEyMjczLCAtMTE5MzUsIC0xMTkzNSwgLTExNTg1LCAtMTE1ODUsCistMTEyMjQsIC0xMTIyNCwgLTEwODUzLCAtMTA4NTMsIC0xMDQ3MSwgLTEwNDcxLCAtMTAwNzksIC0xMDA3OSwgLTk2NzksIC05Njc5LAorIC05MjY4LCAtOTI2OCwgLTg4NTAsIC04ODUwLCAtODQyMywgLTg0MjMsIC03OTg4LCAtNzk4OCwgLTc1NDUsIC03NTQ1LAorIC03MDk1LCAtNzA5NSwgLTY2MzksIC02NjM5LCAtNjE3NiwgLTYxNzYsIC01NzA4LCAtNTcwOCwgLTUyMzQsIC01MjM0LAorIC00NzU2LCAtNDc1NiwgLTQyNzIsIC00MjcyLCAtMzc4NSwgLTM3ODUsIC0zMjk0LCAtMzI5NCwgLTI4MDEsIC0yODAxLAorIC0yMzA0LCAtMjMwNCwgLTE4MDUsIC0xODA1LCAtMTMwNSwgLTEzMDUsICAtODAzLCAgLTgwMywgIC0zMDEsICAtMzAxLAorICAgMjAxLCAgIDIwMSwgICA3MDMsICAgNzAzLCAgMTIwNSwgIDEyMDUsICAxNzA1LCAgMTcwNSwgIDIyMDQsICAyMjA0LAorICAyNzAxLCAgMjcwMSwgIDMxOTYsICAzMTk2LCAgMzY4NywgIDM2ODcsICA0MTc1LCAgNDE3NSwgIDQ2NTksICA0NjU5LAorICA1MTM5LCAgNTEzOSwgIDU2MTQsICA1NjE0LCAgNjA4MywgIDYwODMsICA2NTQ3LCAgNjU0NywgIDcwMDUsICA3MDA1LAorICA3NDU2LCAgNzQ1NiwgIDc5MDAsICA3OTAwLCAgODMzNiwgIDgzMzYsICA4NzY1LCAgODc2NSwgIDkxODUsICA5MTg1LAorICA5NTk3LCAgOTU5NywgMTAwMDAsIDEwMDAwLCAxMDM5MywgMTAzOTMsIDEwNzc3LCAxMDc3NywgMTExNTAsIDExMTUwLAorIDExNTEzLCAxMTUxMywgMTE4NjYsIDExODY2LCAxMjIwNywgMTIyMDcsIDEyNTM2LCAxMjUzNiwgMTI4NTQsIDEyODU0LAorIDEzMTU5LCAxMzE1OSwgMTM0NTIsIDEzNDUyLCAxMzczMywgMTM3MzMsIDE0MDAxLCAxNDAwMSwgMTQyNTUsIDE0MjU1LAorIDE0NDk2LCAxNDQ5NiwgMTQ3MjMsIDE0NzIzLCAxNDkzNywgMTQ5MzcsIDE1MTM2LCAxNTEzNiwgMTUzMjIsIDE1MzIyLAorIDE1NDkyLCAxNTQ5MiwgMTU2NDksIDE1NjQ5LCAxNTc5MCwgMTU3OTAsIDE1OTE3LCAxNTkxNywgMTYwMjgsIDE2MDI4LAorIDE2MTI1LCAxNjEyNSwgMTYyMDYsIDE2MjA2LCAxNjI3MiwgMTYyNzIsIDE2MzIzLCAxNjMyMywgMTYzNTksIDE2MzU5LAorIDE2Mzc5LCAxNjM3OSwgMTYzODMsIDE2MzgzLCAxNjM3MiwgMTYzNzIsIDE2MzQ2LCAxNjM0NiwgMTYzMDUsIDE2MzA1LAorIDE2MjQ4LCAxNjI0OCwgMTYxNzUsIDE2MTc1LCAxNjA4OCwgMTYwODgsIDE1OTg1LCAxNTk4NSwgMTU4NjgsIDE1ODY4LAorIDE1NzM1LCAxNTczNSwgMTU1ODgsIDE1NTg4LCAxNTQyNiwgMTU0MjYsIDE1MjQ5LCAxNTI0OSwgMTUwNTgsIDE1MDU4LAorIDE0ODUzLCAxNDg1MywgMTQ2MzQsIDE0NjM0LCAxNDQwMSwgMTQ0MDEsIDE0MTU1LCAxNDE1NSwgMTM4OTUsIDEzODk1LAorIDEzNjIyLCAxMzYyMiwgMTMzMzcsIDEzMzM3LCAxMzAzOCwgMTMwMzgsIDEyNzI4LCAxMjcyOCwgMTI0MDYsIDEyNDA2LAorIDEyMDcyLCAxMjA3MiwgMTE3MjYsIDExNzI2LCAxMTM3MCwgMTEzNzAsIDExMDAyLCAxMTAwMiwgMTA2MjUsIDEwNjI1LAorIDEwMjM3LCAxMDIzNywgIDk4NDAsICA5ODQwLCAgOTQzNCwgIDk0MzQsICA5MDE4LCAgOTAxOCwgIDg1OTQsICA4NTk0LAorICA4MTYyLCAgODE2MiwgIDc3MjMsICA3NzIzLCAgNzI3NiwgIDcyNzYsICA2ODIyLCAgNjgyMiwgIDYzNjIsICA2MzYyLAorICA1ODk2LCAgNTg5NiwgIDU0MjQsICA1NDI0LCAgNDk0OCwgIDQ5NDgsICA0NDY2LCAgNDQ2NiwgIDM5ODAsICAzOTgwLAorICAzNDkxLCAgMzQ5MSwgIDI5OTgsICAyOTk4LCAgMjUwMywgIDI1MDMsICAyMDA1LCAgMjAwNSwgIDE1MDUsICAxNTA1LAorICAxMDA0LCAgMTAwNCwgICA1MDIsICAgNTAyLCAgICAgMCwgICAgIDAsICAtNTAyLCAgLTUwMiwgLTEwMDQsIC0xMDA0LAorIC0xNTA1LCAtMTUwNSwgLTIwMDUsIC0yMDA1LCAtMjUwMywgLTI1MDMsIC0yOTk4LCAtMjk5OCwgLTM0OTEsIC0zNDkxLAorIC0zOTgwLCAtMzk4MCwgLTQ0NjYsIC00NDY2LCAtNDk0OCwgLTQ5NDgsIC01NDI0LCAtNTQyNCwgLTU4OTYsIC01ODk2LAorIC02MzYyLCAtNjM2MiwgLTY4MjIsIC02ODIyLCAtNzI3NiwgLTcyNzYsIC03NzIzLCAtNzcyMywgLTgxNjIsIC04MTYyLAorIC04NTk0LCAtODU5NCwgLTkwMTgsIC05MDE4LCAtOTQzNCwgLTk0MzQsIC05ODQwLCAtOTg0MCwgLTEwMjM3LCAtMTAyMzcsCistMTA2MjUsIC0xMDYyNSwgLTExMDAyLCAtMTEwMDIsIC0xMTM3MCwgLTExMzcwLCAtMTE3MjYsIC0xMTcyNiwgLTEyMDcyLCAtMTIwNzIsCistMTI0MDYsIC0xMjQwNiwgLTEyNzI4LCAtMTI3MjgsIC0xMzAzOCwgLTEzMDM4LCAtMTMzMzcsIC0xMzMzNywgLTEzNjIyLCAtMTM2MjIsCistMTM4OTUsIC0xMzg5NSwgLTE0MTU1LCAtMTQxNTUsIC0xNDQwMSwgLTE0NDAxLCAtMTQ2MzQsIC0xNDYzNCwgLTE0ODUzLCAtMTQ4NTMsCistMTUwNTgsIC0xNTA1OCwgLTE1MjQ5LCAtMTUyNDksIC0xNTQyNiwgLTE1NDI2LCAtMTU1ODgsIC0xNTU4OCwgLTE1NzM1LCAtMTU3MzUsCistMTU4NjgsIC0xNTg2OCwgLTE1OTg1LCAtMTU5ODUsIC0xNjA4OCwgLTE2MDg4LCAtMTYxNzUsIC0xNjE3NSwgLTE2MjQ4LCAtMTYyNDgsCistMTYzMDUsIC0xNjMwNSwgLTE2MzQ2LCAtMTYzNDYsIC0xNjM3MiwgLTE2MzcyLCAtMTYzODMsIC0xNjM4MywgLTE2Mzc5LCAtMTYzNzksCistMTYzNTksIC0xNjM1OSwgLTE2MzIzLCAtMTYzMjMsIC0xNjI3MiwgLTE2MjcyLCAtMTYyMDYsIC0xNjIwNiwgLTE2MTI1LCAtMTYxMjUsCistMTYwMjgsIC0xNjAyOCwgLTE1OTE3LCAtMTU5MTcsIC0xNTc5MCwgLTE1NzkwLCAtMTU2NDksIC0xNTY0OSwgLTE1NDkyLCAtMTU0OTIsCistMTUzMjIsIC0xNTMyMiwgLTE1MTM2LCAtMTUxMzYsIC0xNDkzNywgLTE0OTM3LCAtMTQ3MjMsIC0xNDcyMywgLTE0NDk2LCAtMTQ0OTYsCistMTQyNTUsIC0xNDI1NSwgLTE0MDAxLCAtMTQwMDEsIC0xMzczMywgLTEzNzMzLCAtMTM0NTIsIC0xMzQ1MiwgLTEzMTU5LCAtMTMxNTksCistMTI4NTQsIC0xMjg1NCwgLTEyNTM2LCAtMTI1MzYsIC0xMjIwNywgLTEyMjA3LCAtMTE4NjYsIC0xMTg2NiwgLTExNTEzLCAtMTE1MTMsCistMTExNTAsIC0xMTE1MCwgLTEwNzc3LCAtMTA3NzcsIC0xMDM5MywgLTEwMzkzLCAtMTAwMDAsIC0xMDAwMCwgLTk1OTcsIC05NTk3LAorIC05MTg1LCAtOTE4NSwgLTg3NjUsIC04NzY1LCAtODMzNiwgLTgzMzYsIC03OTAwLCAtNzkwMCwgLTc0NTYsIC03NDU2LAorIC03MDA1LCAtNzAwNSwgLTY1NDcsIC02NTQ3LCAtNjA4MywgLTYwODMsIC01NjE0LCAtNTYxNCwgLTUxMzksIC01MTM5LAorIC00NjU5LCAtNDY1OSwgLTQxNzUsIC00MTc1LCAtMzY4NywgLTM2ODcsIC0zMTk2LCAtMzE5NiwgLTI3MDEsIC0yNzAxLAorIC0yMjA0LCAtMjIwNCwgLTE3MDUsIC0xNzA1LCAtMTIwNSwgLTEyMDUsICAtNzAzLCAgLTcwMywgIC0yMDEsICAtMjAxLAorICAgMzAxLCAgIDMwMSwgICA4MDMsICAgODAzLCAgMTMwNSwgIDEzMDUsICAxODA1LCAgMTgwNSwgIDIzMDQsICAyMzA0LAorICAyODAxLCAgMjgwMSwgIDMyOTQsICAzMjk0LCAgMzc4NSwgIDM3ODUsICA0MjcyLCAgNDI3MiwgIDQ3NTYsICA0NzU2LAorICA1MjM0LCAgNTIzNCwgIDU3MDgsICA1NzA4LCAgNjE3NiwgIDYxNzYsICA2NjM5LCAgNjYzOSwgIDcwOTUsICA3MDk1LAorICA3NTQ1LCAgNzU0NSwgIDc5ODgsICA3OTg4LCAgODQyMywgIDg0MjMsICA4ODUwLCAgODg1MCwgIDkyNjgsICA5MjY4LAorICA5Njc5LCAgOTY3OSwgMTAwNzksIDEwMDc5LCAxMDQ3MSwgMTA0NzEsIDEwODUzLCAxMDg1MywgMTEyMjQsIDExMjI0LAorIDExNTg1LCAxMTU4NSwgMTE5MzUsIDExOTM1LCAxMjI3MywgMTIyNzMsIDEyNjAwLCAxMjYwMCwgMTI5MTYsIDEyOTE2LAorIDEzMjE5LCAxMzIxOSwgMTM1MTAsIDEzNTEwLCAxMzc4OCwgMTM3ODgsIDE0MDUzLCAxNDA1MywgMTQzMDQsIDE0MzA0LAorIDE0NTQzLCAxNDU0MywgMTQ3NjcsIDE0NzY3LCAxNDk3OCwgMTQ5NzgsIDE1MTc1LCAxNTE3NSwgMTUzNTcsIDE1MzU3LAorIDE1NTI1LCAxNTUyNSwgMTU2NzgsIDE1Njc4LCAxNTgxNywgMTU4MTcsIDE1OTQwLCAxNTk0MCwgMTYwNDksIDE2MDQ5LAorIDE2MTQyLCAxNjE0MiwgMTYyMjEsIDE2MjIxLCAxNjI4NCwgMTYyODQsIDE2MzMxLCAxNjMzMSwgMTYzNjQsIDE2MzY0LAorIDE2MzgxLCAxNjM4MSwgMTYzODIsIDE2MzgyLCAxNjM2OCwgMTYzNjgsIDE2MzM5LCAxNjMzOSwgMTYyOTQsIDE2Mjk0LAorIDE2MjM0LCAxNjIzNCwgMTYxNTksIDE2MTU5LCAxNjA2OSwgMTYwNjksIDE1OTYzLCAxNTk2MywgMTU4NDIsIDE1ODQyLAorIDE1NzA3LCAxNTcwNywgMTU1NTcsIDE1NTU3LCAxNTM5MiwgMTUzOTIsIDE1MjEyLCAxNTIxMiwgMTUwMTgsIDE1MDE4LAorIDE0ODEwLCAxNDgxMCwgMTQ1ODksIDE0NTg5LCAxNDM1MywgMTQzNTMsIDE0MTA0LCAxNDEwNCwgMTM4NDIsIDEzODQyLAorIDEzNTY2LCAxMzU2NiwgMTMyNzgsIDEzMjc4LCAxMjk3NywgMTI5NzcsIDEyNjY1LCAxMjY2NSwgMTIzNDAsIDEyMzQwLAorIDEyMDAzLCAxMjAwMywgMTE2NTYsIDExNjU2LCAxMTI5NywgMTEyOTcsIDEwOTI4LCAxMDkyOCwgMTA1NDgsIDEwNTQ4LAorIDEwMTU5LCAxMDE1OSwgIDk3NTksICA5NzU5LCAgOTM1MSwgIDkzNTEsICA4OTM0LCAgODkzNCwgIDg1MDksICA4NTA5LAorICA4MDc1LCAgODA3NSwgIDc2MzQsICA3NjM0LCAgNzE4NiwgIDcxODYsICA2NzMxLCAgNjczMSwgIDYyNjksICA2MjY5LAorICA1ODAyLCAgNTgwMiwgIDUzMjksICA1MzI5LCAgNDg1MiwgIDQ4NTIsICA0MzY5LCAgNDM2OSwgIDM4ODMsICAzODgzLAorICAzMzkzLCAgMzM5MywgIDI5MDAsICAyOTAwLCAgMjQwNCwgIDI0MDQsICAxOTA1LCAgMTkwNSwgIDE0MDUsICAxNDA1LAorICAgOTA0LCAgIDkwNCwgICA0MDIsICAgNDAyLCAgLTEwMCwgIC0xMDAsICAtNjAzLCAgLTYwMywgLTExMDUsIC0xMTA1LAorIC0xNjA1LCAtMTYwNSwgLTIxMDUsIC0yMTA1LCAtMjYwMiwgLTI2MDIsIC0zMDk3LCAtMzA5NywgLTM1ODksIC0zNTg5LAorIC00MDc4LCAtNDA3OCwgLTQ1NjMsIC00NTYzLCAtNTA0MywgLTUwNDMsIC01NTE5LCAtNTUxOSwgLTU5OTAsIC01OTkwLAorIC02NDU1LCAtNjQ1NSwgLTY5MTQsIC02OTE0LCAtNzM2NiwgLTczNjYsIC03ODExLCAtNzgxMSwgLTgyNDksIC04MjQ5LAorIC04NjgwLCAtODY4MCwgLTkxMDIsIC05MTAyLCAtOTUxNiwgLTk1MTYsIC05OTIwLCAtOTkyMCwgLTEwMzE1LCAtMTAzMTUsCistMTA3MDEsIC0xMDcwMSwgLTExMDc3LCAtMTEwNzcsIC0xMTQ0MiwgLTExNDQyLCAtMTE3OTYsIC0xMTc5NiwgLTEyMTM5LCAtMTIxMzksCistMTI0NzEsIC0xMjQ3MSwgLTEyNzkxLCAtMTI3OTEsIC0xMzA5OSwgLTEzMDk5LCAtMTMzOTUsIC0xMzM5NSwgLTEzNjc4LCAtMTM2NzgsCistMTM5NDgsIC0xMzk0OCwgLTE0MjA1LCAtMTQyMDUsIC0xNDQ0OSwgLTE0NDQ5LCAtMTQ2NzksIC0xNDY3OSwgLTE0ODk1LCAtMTQ4OTUsCistMTUwOTgsIC0xNTA5OCwgLTE1Mjg2LCAtMTUyODYsIC0xNTQ1OSwgLTE1NDU5LCAtMTU2MTgsIC0xNTYxOCwgLTE1NzYzLCAtMTU3NjMsCistMTU4OTIsIC0xNTg5MiwgLTE2MDA3LCAtMTYwMDcsIC0xNjEwNywgLTE2MTA3LCAtMTYxOTEsIC0xNjE5MSwgLTE2MjYwLCAtMTYyNjAsCistMTYzMTQsIC0xNjMxNCwgLTE2MzUzLCAtMTYzNTMsIC0xNjM3NiwgLTE2Mzc2LCAtMTYzODMsIC0xNjM4MywgLTE2Mzc2LCAtMTYzNzYsCistMTYzNTMsIC0xNjM1MywgLTE2MzE0LCAtMTYzMTQsIC0xNjI2MCwgLTE2MjYwLCAtMTYxOTEsIC0xNjE5MSwgLTE2MTA3LCAtMTYxMDcsCistMTYwMDcsIC0xNjAwNywgLTE1ODkyLCAtMTU4OTIsIC0xNTc2MywgLTE1NzYzLCAtMTU2MTgsIC0xNTYxOCwgLTE1NDU5LCAtMTU0NTksCistMTUyODYsIC0xNTI4NiwgLTE1MDk4LCAtMTUwOTgsIC0xNDg5NSwgLTE0ODk1LCAtMTQ2NzksIC0xNDY3OSwgLTE0NDQ5LCAtMTQ0NDksCistMTQyMDUsIC0xNDIwNSwgLTEzOTQ4LCAtMTM5NDgsIC0xMzY3OCwgLTEzNjc4LCAtMTMzOTUsIC0xMzM5NSwgLTEzMDk5LCAtMTMwOTksCistMTI3OTEsIC0xMjc5MSwgLTEyNDcxLCAtMTI0NzEsIC0xMjEzOSwgLTEyMTM5LCAtMTE3OTYsIC0xMTc5NiwgLTExNDQyLCAtMTE0NDIsCistMTEwNzcsIC0xMTA3NywgLTEwNzAxLCAtMTA3MDEsIC0xMDMxNSwgLTEwMzE1LCAtOTkyMCwgLTk5MjAsIC05NTE2LCAtOTUxNiwKKyAtOTEwMiwgLTkxMDIsIC04NjgwLCAtODY4MCwgLTgyNDksIC04MjQ5LCAtNzgxMSwgLTc4MTEsIC03MzY2LCAtNzM2NiwKKyAtNjkxNCwgLTY5MTQsIC02NDU1LCAtNjQ1NSwgLTU5OTAsIC01OTkwLCAtNTUxOSwgLTU1MTksIC01MDQzLCAtNTA0MywKKyAtNDU2MywgLTQ1NjMsIC00MDc4LCAtNDA3OCwgLTM1ODksIC0zNTg5LCAtMzA5NywgLTMwOTcsIC0yNjAyLCAtMjYwMiwKKyAtMjEwNSwgLTIxMDUsIC0xNjA1LCAtMTYwNSwgLTExMDUsIC0xMTA1LCAgLTYwMywgIC02MDMsICAtMTAwLCAgLTEwMCwKKyAgIDQwMiwgICA0MDIsICAgOTA0LCAgIDkwNCwgIDE0MDUsICAxNDA1LCAgMTkwNSwgIDE5MDUsICAyNDA0LCAgMjQwNCwKKyAgMjkwMCwgIDI5MDAsICAzMzkzLCAgMzM5MywgIDM4ODMsICAzODgzLCAgNDM2OSwgIDQzNjksICA0ODUyLCAgNDg1MiwKKyAgNTMyOSwgIDUzMjksICA1ODAyLCAgNTgwMiwgIDYyNjksICA2MjY5LCAgNjczMSwgIDY3MzEsICA3MTg2LCAgNzE4NiwKKyAgNzYzNCwgIDc2MzQsICA4MDc1LCAgODA3NSwgIDg1MDksICA4NTA5LCAgODkzNCwgIDg5MzQsICA5MzUxLCAgOTM1MSwKKyAgOTc1OSwgIDk3NTksIDEwMTU5LCAxMDE1OSwgMTA1NDgsIDEwNTQ4LCAxMDkyOCwgMTA5MjgsIDExMjk3LCAxMTI5NywKKyAxMTY1NiwgMTE2NTYsIDEyMDAzLCAxMjAwMywgMTIzNDAsIDEyMzQwLCAxMjY2NSwgMTI2NjUsIDEyOTc3LCAxMjk3NywKKyAxMzI3OCwgMTMyNzgsIDEzNTY2LCAxMzU2NiwgMTM4NDIsIDEzODQyLCAxNDEwNCwgMTQxMDQsIDE0MzUzLCAxNDM1MywKKyAxNDU4OSwgMTQ1ODksIDE0ODEwLCAxNDgxMCwgMTUwMTgsIDE1MDE4LCAxNTIxMiwgMTUyMTIsIDE1MzkyLCAxNTM5MiwKKyAxNTU1NywgMTU1NTcsIDE1NzA3LCAxNTcwNywgMTU4NDIsIDE1ODQyLCAxNTk2MywgMTU5NjMsIDE2MDY5LCAxNjA2OSwKKyAxNjE1OSwgMTYxNTksIDE2MjM0LCAxNjIzNCwgMTYyOTQsIDE2Mjk0LCAxNjMzOSwgMTYzMzksIDE2MzY4LCAxNjM2OCwKKyAxNjM4MiwgMTYzODIsIDE2MzgxLCAxNjM4MSwgMTYzNjQsIDE2MzY0LCAxNjMzMSwgMTYzMzEsIDE2Mjg0LCAxNjI4NCwKKyAxNjIyMSwgMTYyMjEsIDE2MTQyLCAxNjE0MiwgMTYwNDksIDE2MDQ5LCAxNTk0MCwgMTU5NDAsIDE1ODE3LCAxNTgxNywKKyAxNTY3OCwgMTU2NzgsIDE1NTI1LCAxNTUyNSwgMTUzNTcsIDE1MzU3LCAxNTE3NSwgMTUxNzUsIDE0OTc4LCAxNDk3OCwKKyAxNDc2NywgMTQ3NjcsIDE0NTQzLCAxNDU0MywgMTQzMDQsIDE0MzA0LCAxNDA1MywgMTQwNTMsIDEzNzg4LCAxMzc4OCwKKyAxMzUxMCwgMTM1MTAsIDEzMjE5LCAxMzIxOSwgMTI5MTYsIDEyOTE2LCAxMjYwMCwgMTI2MDAsIDEyMjczLCAxMjI3MywKKyAxMTkzNSwgMTE5MzUsIDExNTg1LCAxMTU4NSwgMTEyMjQsIDExMjI0LCAxMDg1MywgMTA4NTMsIDEwNDcxLCAxMDQ3MSwKKyAxMDA3OSwgMTAwNzksICA5Njc5LCAgOTY3OSwgIDkyNjgsICA5MjY4LCAgODg1MCwgIDg4NTAsICA4NDIzLCAgODQyMywKKyAgNzk4OCwgIDc5ODgsICA3NTQ1LCAgNzU0NSwgIDcwOTUsICA3MDk1LCAgNjYzOSwgIDY2MzksICA2MTc2LCAgNjE3NiwKKyAgNTcwOCwgIDU3MDgsICA1MjM0LCAgNTIzNCwgIDQ3NTYsICA0NzU2LCAgNDI3MiwgIDQyNzIsICAzNzg1LCAgMzc4NSwKKyAgMzI5NCwgIDMyOTQsICAyODAxLCAgMjgwMSwgIDIzMDQsICAyMzA0LCAgMTgwNSwgIDE4MDUsICAxMzA1LCAgMTMwNSwKKyAgIDgwMywgICA4MDMsICAgMzAxLCAgIDMwMSwgIC0yMDEsICAtMjAxLCAgLTcwMywgIC03MDMsIC0xMjA1LCAtMTIwNSwKKyAtMTcwNSwgLTE3MDUsIC0yMjA0LCAtMjIwNCwgLTI3MDEsIC0yNzAxLCAtMzE5NiwgLTMxOTYsIC0zNjg3LCAtMzY4NywKKyAtNDE3NSwgLTQxNzUsIC00NjU5LCAtNDY1OSwgLTUxMzksIC01MTM5LCAtNTYxNCwgLTU2MTQsIC02MDgzLCAtNjA4MywKKyAtNjU0NywgLTY1NDcsIC03MDA1LCAtNzAwNSwgLTc0NTYsIC03NDU2LCAtNzkwMCwgLTc5MDAsIC04MzM2LCAtODMzNiwKKyAtODc2NSwgLTg3NjUsIC05MTg1LCAtOTE4NSwgLTk1OTcsIC05NTk3LCAtMTAwMDAsIC0xMDAwMCwgLTEwMzkzLCAtMTAzOTMsCistMTA3NzcsIC0xMDc3NywgLTExMTUwLCAtMTExNTAsIC0xMTUxMywgLTExNTEzLCAtMTE4NjYsIC0xMTg2NiwgLTEyMjA3LCAtMTIyMDcsCistMTI1MzYsIC0xMjUzNiwgLTEyODU0LCAtMTI4NTQsIC0xMzE1OSwgLTEzMTU5LCAtMTM0NTIsIC0xMzQ1MiwgLTEzNzMzLCAtMTM3MzMsCistMTQwMDEsIC0xNDAwMSwgLTE0MjU1LCAtMTQyNTUsIC0xNDQ5NiwgLTE0NDk2LCAtMTQ3MjMsIC0xNDcyMywgLTE0OTM3LCAtMTQ5MzcsCistMTUxMzYsIC0xNTEzNiwgLTE1MzIyLCAtMTUzMjIsIC0xNTQ5MiwgLTE1NDkyLCAtMTU2NDksIC0xNTY0OSwgLTE1NzkwLCAtMTU3OTAsCistMTU5MTcsIC0xNTkxNywgLTE2MDI4LCAtMTYwMjgsIC0xNjEyNSwgLTE2MTI1LCAtMTYyMDYsIC0xNjIwNiwgLTE2MjcyLCAtMTYyNzIsCistMTYzMjMsIC0xNjMyMywgLTE2MzU5LCAtMTYzNTksIC0xNjM3OSwgLTE2Mzc5LCAtMTYzODMsIC0xNjM4MywgLTE2MzcyLCAtMTYzNzIsCistMTYzNDYsIC0xNjM0NiwgLTE2MzA1LCAtMTYzMDUsIC0xNjI0OCwgLTE2MjQ4LCAtMTYxNzUsIC0xNjE3NSwgLTE2MDg4LCAtMTYwODgsCistMTU5ODUsIC0xNTk4NSwgLTE1ODY4LCAtMTU4NjgsIC0xNTczNSwgLTE1NzM1LCAtMTU1ODgsIC0xNTU4OCwgLTE1NDI2LCAtMTU0MjYsCistMTUyNDksIC0xNTI0OSwgLTE1MDU4LCAtMTUwNTgsIC0xNDg1MywgLTE0ODUzLCAtMTQ2MzQsIC0xNDYzNCwgLTE0NDAxLCAtMTQ0MDEsCistMTQxNTUsIC0xNDE1NSwgLTEzODk1LCAtMTM4OTUsIC0xMzYyMiwgLTEzNjIyLCAtMTMzMzcsIC0xMzMzNywgLTEzMDM4LCAtMTMwMzgsCistMTI3MjgsIC0xMjcyOCwgLTEyNDA2LCAtMTI0MDYsIC0xMjA3MiwgLTEyMDcyLCAtMTE3MjYsIC0xMTcyNiwgLTExMzcwLCAtMTEzNzAsCistMTEwMDIsIC0xMTAwMiwgLTEwNjI1LCAtMTA2MjUsIC0xMDIzNywgLTEwMjM3LCAtOTg0MCwgLTk4NDAsIC05NDM0LCAtOTQzNCwKKyAtOTAxOCwgLTkwMTgsIC04NTk0LCAtODU5NCwgLTgxNjIsIC04MTYyLCAtNzcyMywgLTc3MjMsIC03Mjc2LCAtNzI3NiwKKyAtNjgyMiwgLTY4MjIsIC02MzYyLCAtNjM2MiwgLTU4OTYsIC01ODk2LCAtNTQyNCwgLTU0MjQsIC00OTQ4LCAtNDk0OCwKKyAtNDQ2NiwgLTQ0NjYsIC0zOTgwLCAtMzk4MCwgLTM0OTEsIC0zNDkxLCAtMjk5OCwgLTI5OTgsIC0yNTAzLCAtMjUwMywKKyAtMjAwNSwgLTIwMDUsIC0xNTA1LCAtMTUwNSwgLTEwMDQsIC0xMDA0LCAgLTUwMiwgIC01MDIKK307CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkCitlYXN5c25kX3Rlc3R0b25lKHN0cnVjdCBlYXN5Y2FwICpwZWFzeWNhcCwgaW50IGF1ZGlvX2ZpbGwpCit7CitpbnQgaTE7Cit1bnNpZ25lZCBjaGFyICpwMjsKK3N0cnVjdCBkYXRhX2J1ZmZlciAqcGF1ZGlvX2J1ZmZlcjsKKworSk9UKDgsICIlaT1hdWRpb19maWxsXG4iLCBhdWRpb19maWxsKTsKKworcGF1ZGlvX2J1ZmZlciA9ICZwZWFzeWNhcC0+YXVkaW9fYnVmZmVyW2F1ZGlvX2ZpbGxdOworCitwMiA9ICh1bnNpZ25lZCBjaGFyICopKHBhdWRpb19idWZmZXItPnBnbyk7Citmb3IgKGkxID0gMDsgIGkxIDwgUEFHRV9TSVpFOyAgaTEgKz0gNCwgcDIgKz0gNCkgeworCSpwMiAgICAgICA9ICh1bnNpZ25lZCBjaGFyKSAoMHgwMEZGICYgdG9uZXNbaTEvMl0pOworCSoocDIgKyAxKSA9ICh1bnNpZ25lZCBjaGFyKSgoMHhGRjAwICYgdG9uZXNbaTEvMl0pID4+IDgpOworCSoocDIgKyAyKSA9ICh1bnNpZ25lZCBjaGFyKSAoMHgwMEZGICYgdG9uZXNbaTEvMiArIDFdKTsKKwkqKHAyICsgMykgPSAodW5zaWduZWQgY2hhcikoKDB4RkYwMCAmIHRvbmVzW2kxLzIgKyAxXSkgPj4gOCk7CisJfQorcmV0dXJuOworfQorI2VuZGlmIC8qRUFTWUNBUF9URVNUVE9ORSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCmluZGV4IGE2ZDlmMjkuLjIxYzVlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jCkBAIC03NjAsNyArNzYwLDggQEAKIAkJCWlmIChldGRldi0+bGlua3NwZWVkID09IFRSVUVQSFlfU1BFRURfMTBNQlBTKSB7CiAJCQkJLyogTk9URSAtIElzIHRoZXJlIGEgd2F5IHRvIHF1ZXJ5IHRoaXMgd2l0aG91dAogCQkJCSAqIFRydWVQSFk/Ci0JCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKSA9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKSA9PQorCQkJCSAqIEVNSV9UUlVFUEhZX0ExM08pIHsKIAkJCQkgKi8KIAkJCQl1MTYgUmVnaXN0ZXIxODsKIApAQCAtNzc4LDcgKzc3OSw3IEBACiAJCQkgKiBpbiB0aGUgTGlua0RldGVjdGlvbkRQQykuCiAJCQkgKi8KIAkJCWlmICghKGV0ZGV2LT5GbGFncyAmIGZNUF9BREFQVEVSX0xJTktfREVURUNUSU9OKSB8fAotCQkJICAoZXRkZXYtPk1lZGlhU3RhdGUgPT0gTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QpKSB7CisJCQkgKGV0ZGV2LT5NZWRpYVN0YXRlID09IE5FVElGX1NUQVRVU19NRURJQV9ESVNDT05ORUNUKSkgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZldGRldi0+TG9jaywgZmxhZ3MpOwogCQkJCWV0ZGV2LT5NZWRpYVN0YXRlID0KIAkJCQkgICAgTkVUSUZfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q7CkBAIC04MzYsNyArODM3LDggQEAKIAkJCQkvKgogCQkJCSAqIE5PVEUgLSBJcyB0aGVyZSBhIHdheSB0byBxdWVyeSB0aGlzIHdpdGhvdXQKIAkJCQkgKiBUcnVlUEhZPwotCQkJCSAqICYmIFRSVV9RdWVyeUNvcmVUeXBlKGV0ZGV2LT5oVHJ1ZVBoeSwgMCk9PSBFTUlfVFJVRVBIWV9BMTNPKSB7CisJCQkJICogJiYgVFJVX1F1ZXJ5Q29yZVR5cGUoZXRkZXYtPmhUcnVlUGh5LCAwKT09CisJCQkJICogRU1JX1RSVUVQSFlfQTEzTykgewogCQkJCSAqLwogCQkJCXUxNiBSZWdpc3RlcjE4OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCmluZGV4IDk3NDgwZjUuLjc0NTVjODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAKIGNvbmZpZyBIWVBFUlZfQkxPQ0sKIAl0cmlzdGF0ZSAiTWljcm9zb2Z0IEh5cGVyLVYgdmlydHVhbCBibG9jayBkcml2ZXIiCi0JZGVwZW5kcyBvbiBCTE9DSyAmJiBTQ1NJICYmIExCREFGCisJZGVwZW5kcyBvbiBCTE9DSyAmJiBTQ1NJICYmIChMQkRBRiB8fCA2NEJJVCkKIAlkZWZhdWx0IEhZUEVSVgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIEh5cGVyLVYgdmlydHVhbCBibG9jayBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTWFrZWZpbGUKaW5kZXggMTg2NmY4MC4uYjYzNTE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai0kKENPTkZJR19IWVBFUlYpCQkrPSBodl92bWJ1cy5vCitvYmotJChDT05GSUdfSFlQRVJWKQkJKz0gaHZfdm1idXMubyBodl90aW1lc291cmNlLm8KIG9iai0kKENPTkZJR19IWVBFUlZfU1RPUkFHRSkJKz0gaHZfc3RvcnZzYy5vCiBvYmotJChDT05GSUdfSFlQRVJWX0JMT0NLKQkrPSBodl9ibGt2c2Mubwogb2JqLSQoQ09ORklHX0hZUEVSVl9ORVQpCSs9IGh2X25ldHZzYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjLmMKaW5kZXggMGRhZWJjNC4uOTI5MjM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2MuYwpAQCAtNDAsMTUgKzQwLDExIEBACiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZUluZm87CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDKTsKLQogCWRldmljZUluZm8gPSAoc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKilBZGRpdGlvbmFsSW5mbzsKIAogCXJldCA9IFN0b3JWc2NPbkRldmljZUFkZChEZXZpY2UsIEFkZGl0aW9uYWxJbmZvKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJRFBSSU5UX0VYSVQoQkxLVlNDKTsKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7Ci0JfQogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHVzZSB0aGUgZGV2aWNlIGluc3RhbmNlIGd1aWQgdG8gc2V0IHRoZSBwYXRoIGFuZCB0YXJnZXQKQEAgLTYzLDggKzU5LDYgQEAKIAlkZXZpY2VJbmZvLT5UYXJnZXRJZCA9IERldmljZS0+ZGV2aWNlSW5zdGFuY2UuZGF0YVs1XSA8PCA4IHwKIAkJCSAgICAgICBEZXZpY2UtPmRldmljZUluc3RhbmNlLmRhdGFbNF07CiAKLQlEUFJJTlRfRVhJVChCTEtWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzMsOCArNjcsNiBAQAogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3JEcml2ZXI7CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDKTsKLQogCXN0b3JEcml2ZXIgPSAoc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqKURyaXZlcjsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgYXQgbGVhc3QgMiBwYWdlcyBzaW5jZSAxIHBhZ2UgaXMgdXNlZCBmb3IgY29udHJvbCAqLwpAQCAtMTA2LDcgKzk4LDUgQEAKIAlzdG9yRHJpdmVyLT5CYXNlLk9uQ2xlYW51cCA9IFN0b3JWc2NPbkNsZWFudXA7CiAJc3RvckRyaXZlci0+T25JT1JlcXVlc3QJPSBTdG9yVnNjT25JT1JlcXVlc3Q7CiAKLQlEUFJJTlRfRVhJVChCTEtWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCmluZGV4IDYxYmQwYmUuLmZmMWQyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CkBAIC0xNzUsOCArMTc2LDYgQEAKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRydl9jdHggPSAmZ19ibGt2c2NfZHJ2LmRydl9jdHg7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihCTEtWU0NfRFJWKTsKLQogCXZtYnVzX2dldF9pbnRlcmZhY2UoJnN0b3J2c2NfZHJ2X29iai0+QmFzZS5WbWJ1c0NoYW5uZWxJbnRlcmZhY2UpOwogCiAJc3RvcnZzY19kcnZfb2JqLT5SaW5nQnVmZmVyU2l6ZSA9IGJsa3ZzY19yaW5nYnVmZmVyX3NpemU7CkBAIC0xOTUsOCArMTk0LDYgQEAKIAkvKiBUaGUgZHJpdmVyIGJlbG9uZ3MgdG8gdm1idXMgKi8KIAlyZXQgPSB2bWJ1c19jaGlsZF9kcml2ZXJfcmVnaXN0ZXIoZHJ2X2N0eCk7CiAKLQlEUFJJTlRfRVhJVChCTEtWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxNCw4ICsyMTEsNiBAQAogCXN0cnVjdCBkZXZpY2UgKmN1cnJlbnRfZGV2OwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7Ci0KIAl3aGlsZSAoMSkgewogCQljdXJyZW50X2RldiA9IE5VTEw7CiAKQEAgLTI0MSw4ICsyMzYsNiBAQAogCiAJdm1idXNfY2hpbGRfZHJpdmVyX3VucmVnaXN0ZXIoZHJ2X2N0eCk7CiAKLQlEUFJJTlRfRVhJVChCTEtWU0NfRFJWKTsKLQogCXJldHVybjsKIH0KIApAQCAtMjY4LDggKzI2MSw2IEBACiAJc3RhdGljIGludCBpZGUwX3JlZ2lzdGVyZWQ7CiAJc3RhdGljIGludCBpZGUxX3JlZ2lzdGVyZWQ7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7Ci0KIAlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGt2c2NfcHJvYmUgLSBlbnRlciIpOwogCiAJaWYgKCFzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25EZXZpY2VBZGQpIHsKQEAgLTQxMyw4ICs0MDQsNiBAQAogCQlibGtkZXYgPSBOVUxMOwogCX0KIAotCURQUklOVF9FWElUKEJMS1ZTQ19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzUxLDE0ICs3NDAsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7Ci0KIAlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICJibGt2c2NfcmVtb3ZlKClcbiIpOwogCi0JaWYgKCFzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25EZXZpY2VSZW1vdmUpIHsKLQkJRFBSSU5UX0VYSVQoQkxLVlNDX0RSVik7CisJaWYgKCFzdG9ydnNjX2Rydl9vYmotPkJhc2UuT25EZXZpY2VSZW1vdmUpCiAJCXJldHVybiAtMTsKLQl9CiAKIAkvKgogCSAqIENhbGwgdG8gdGhlIHZzYyBkcml2ZXIgdG8gbGV0IGl0IGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGJlaW5nCkBAIC04MDIsOCArNzg3LDYgQEAKIAogCWtmcmVlKGJsa2Rldik7CiAKLQlEUFJJTlRfRVhJVChCTEtWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyMyw3ICs4MDYsOCBAQAogCQkJYmxrdnNjX3JlcS0+Y21uZFswXSA9IFJFQURfMTY7CiAJCX0KIAotCQlibGt2c2NfcmVxLT5jbW5kWzFdIHw9IGJsa19mdWFfcnEoYmxrdnNjX3JlcS0+cmVxKSA/IDB4OCA6IDA7CisJCWJsa3ZzY19yZXEtPmNtbmRbMV0gfD0KKwkJCShibGt2c2NfcmVxLT5yZXEtPmNtZF9mbGFncyAmIFJFUV9GVUEpID8gMHg4IDogMDsKIAogCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSZibGt2c2NfcmVxLT5jbW5kWzJdID0KIAkJCQljcHVfdG9fYmU2NChibGt2c2NfcmVxLT5zZWN0b3Jfc3RhcnQpOwpAQCAtODM5LDcgKzgyMyw4IEBACiAJCQlibGt2c2NfcmVxLT5jbW5kWzBdID0gUkVBRF8xMDsKIAkJfQogCi0JCWJsa3ZzY19yZXEtPmNtbmRbMV0gfD0gYmxrX2Z1YV9ycShibGt2c2NfcmVxLT5yZXEpID8gMHg4IDogMDsKKwkJYmxrdnNjX3JlcS0+Y21uZFsxXSB8PQorCQkJKGJsa3ZzY19yZXEtPnJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZVQSkgPyAweDggOiAwOwogCiAJCSoodW5zaWduZWQgaW50ICopJmJsa3ZzY19yZXEtPmNtbmRbMl0gPQogCQkJCWNwdV90b19iZTMyKGJsa3ZzY19yZXEtPnNlY3Rvcl9zdGFydCk7CkBAIC0xMjg2LDcgKzEyNzEsNyBAQAogCQlEUFJJTlRfREJHKEJMS1ZTQ19EUlYsICItIHJlcSAlcFxuIiwgcmVxKTsKIAogCQlibGtkZXYgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQkJaWYgKGJsa2Rldi0+c2h1dHRpbmdfZG93biB8fCAhYmxrX2ZzX3JlcXVlc3QocmVxKSB8fAorCQlpZiAoYmxrZGV2LT5zaHV0dGluZ19kb3duIHx8IHJlcS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfRlMgfHwKIAkJICAgIGJsa2Rldi0+bWVkaWFfbm90X3ByZXNlbnQpIHsKIAkJCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIDApOwogCQkJY29udGludWU7CkBAIC0xMzI0LDYgKzEzMDksNyBAQAogCURQUklOVF9EQkcoQkxLVlNDX0RSViwgIi0gdXNlcnMgJWQgZGlzayAlc1xuIiwgYmxrZGV2LT51c2VycywKIAkJICAgYmxrZGV2LT5nZC0+ZGlza19uYW1lKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJc3Bpbl9sb2NrKCZibGtkZXYtPmxvY2spOwogCiAJaWYgKCFibGtkZXYtPnVzZXJzICYmIGJsa2Rldi0+ZGV2aWNlX3R5cGUgPT0gRFZEX1RZUEUpIHsKQEAgLTEzMzUsNiArMTMyMSw3IEBACiAJYmxrZGV2LT51c2VycysrOwogCiAJc3Bpbl91bmxvY2soJmJsa2Rldi0+bG9jayk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzQ1LDYgKzEzMzIsNyBAQAogCURQUklOVF9EQkcoQkxLVlNDX0RSViwgIi0gdXNlcnMgJWQgZGlzayAlc1xuIiwgYmxrZGV2LT51c2VycywKIAkJICAgYmxrZGV2LT5nZC0+ZGlza19uYW1lKTsKIAorCWxvY2tfa2VybmVsKCk7CiAJc3Bpbl9sb2NrKCZibGtkZXYtPmxvY2spOwogCWlmIChibGtkZXYtPnVzZXJzID09IDEpIHsKIAkJc3Bpbl91bmxvY2soJmJsa2Rldi0+bG9jayk7CkBAIC0xMzU1LDYgKzEzNDMsNyBAQAogCWJsa2Rldi0+dXNlcnMtLTsKIAogCXNwaW5fdW5sb2NrKCZibGtkZXYtPmxvY2spOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ5MiwyMiArMTQ4MSwxNiBAQAogCiAJQlVJTERfQlVHX09OKHNpemVvZihzZWN0b3JfdCkgIT0gOCk7CiAKLQlEUFJJTlRfRU5URVIoQkxLVlNDX0RSVik7Ci0KIAlEUFJJTlRfSU5GTyhCTEtWU0NfRFJWLCAiQmxrdnNjIGluaXRpYWxpemluZy4uLi4iKTsKIAogCXJldCA9IGJsa3ZzY19kcnZfaW5pdChCbGtWc2NJbml0aWFsaXplKTsKIAotCURQUklOVF9FWElUKEJMS1ZTQ19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJsa3ZzY19leGl0KHZvaWQpCiB7Ci0JRFBSSU5UX0VOVEVSKEJMS1ZTQ19EUlYpOwogCWJsa3ZzY19kcnZfZXhpdCgpOwotCURQUklOVF9FTlRFUihCTEtWU0NfRFJWKTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsLmMKaW5kZXggZjA0N2M1YS4uZmVjZTMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbC5jCkBAIC03NCw4ICs3NCw2IEBACiB7CiAJc3RydWN0IGh2X21vbml0b3JfcGFnZSAqbW9uaXRvclBhZ2U7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJaWYgKENoYW5uZWwtPk9mZmVyTXNnLk1vbml0b3JBbGxvY2F0ZWQpIHsKIAkJLyogRWFjaCB1MzIgcmVwcmVzZW50cyAzMiBjaGFubmVscyAqLwogCQlzZXRfYml0KENoYW5uZWwtPk9mZmVyTXNnLkNoaWxkUmVsSWQgJiAzMSwKQEAgLTkyLDggKzkwLDYgQEAKIAl9IGVsc2UgewogCQlWbWJ1c1NldEV2ZW50KENoYW5uZWwtPk9mZmVyTXNnLkNoaWxkUmVsSWQpOwogCX0KLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogI2lmIDAKQEAgLTEwMSw4ICs5Nyw2IEBACiB7CiAJc3RydWN0IGh2X21vbml0b3JfcGFnZSAqbW9uaXRvclBhZ2U7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJaWYgKENoYW5uZWwtPk9mZmVyTXNnLk1vbml0b3JBbGxvY2F0ZWQpIHsKIAkJLyogRWFjaCB1MzIgcmVwcmVzZW50cyAzMiBjaGFubmVscyAqLwogCQljbGVhcl9iaXQoQ2hhbm5lbC0+T2ZmZXJNc2cuQ2hpbGRSZWxJZCAmIDMxLApAQCAtMTE3LDggKzExMSw2IEBACiAJCQkgICh1bnNpZ25lZCBsb25nICopJm1vbml0b3JQYWdlLT5UcmlnZ2VyR3JvdXAKIAkJCQkJW0NoYW5uZWwtPk1vbml0b3JHcm91cF0uUGVuZGluZyk7CiAJfQotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAjZW5kaWYKQEAgLTE4MCw4ICsxNzIsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCwgZXJyID0gMDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkvKiBBbGlnbmVkIHRvIHBhZ2Ugc2l6ZSAqLwogCS8qIEFTU0VSVCghKFNlbmRSaW5nQnVmZmVyU2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkpOyAqLwogCS8qIEFTU0VSVCghKFJlY3ZSaW5nQnVmZmVyU2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkpOyAqLwpAQCAtMzA1LDkgKzI5NSw2IEBACiAKIAlrZnJlZShvcGVuSW5mby0+V2FpdEV2ZW50KTsKIAlrZnJlZShvcGVuSW5mbyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3JvdXQ6CkBAIC00NjUsNiArNDUyLDggQEAKIAkJCSAgc2l6ZW9mKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2hlYWRlcikgKwogCQkJICBzaXplb2Yoc3RydWN0IGdwYV9yYW5nZSkgKyBwYWdlQ291bnQgKiBzaXplb2YodTY0KTsKIAkJbXNnSGVhZGVyID0ga3phbGxvYyhtc2dTaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG1zZ0hlYWRlciA9PSBOVUxMKQorCQkJZ290byBub21lbTsKIAkJbXNnSGVhZGVyLT5NZXNzYWdlU2l6ZSA9IG1zZ1NpemU7CiAKIAkJZ3BhSGVhZGVyID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2hlYWRlciAqKW1zZ0hlYWRlci0+TXNnOwpAQCAtNTA5LDggKzQ5OCw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAluZXh0R3BhZGxIYW5kbGUgPSBhdG9taWNfcmVhZCgmZ1ZtYnVzQ29ubmVjdGlvbi5OZXh0R3BhZGxIYW5kbGUpOwogCWF0b21pY19pbmMoJmdWbWJ1c0Nvbm5lY3Rpb24uTmV4dEdwYWRsSGFuZGxlKTsKIApAQCAtNTkyLDkgKzU3OSw2IEBACiAKIAlrZnJlZShtc2dJbmZvLT5XYWl0RXZlbnQpOwogCWtmcmVlKG1zZ0luZm8pOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjA4LDggKzU5Miw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIEFTU0VSVChHcGFkbEhhbmRsZSAhPSAwKTsgKi8KIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZigqaW5mbykgKwpAQCAtNjUwLDkgKzYzMiw2IEBACiAKIAlrZnJlZShpbmZvLT5XYWl0RXZlbnQpOwogCWtmcmVlKGluZm8pOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjY2LDggKzY0NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIFN0b3AgY2FsbGJhY2sgYW5kIGNhbmNlbCB0aGUgdGltZXIgYXNhcCAqLwogCUNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrID0gTlVMTDsKIAlkZWxfdGltZXJfc3luYygmQ2hhbm5lbC0+cG9sbF90aW1lcik7CkBAIC03MjAsOCArNjk3LDYgQEAKIAogCQlGcmVlVm1idXNDaGFubmVsKENoYW5uZWwpOwogCX0KLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoqCkBAIC03NDksNyArNzI0LDYgQEAKIAl1NjQgYWxpZ25lZERhdGEgPSAwOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwogCURQUklOVF9EQkcoVk1CVVMsICJjaGFubmVsICVwIGJ1ZmZlciAlcCBsZW4gJWQiLAogCQkgICBDaGFubmVsLCBCdWZmZXIsIEJ1ZmZlckxlbik7CiAKQEAgLTc3Niw4ICs3NTAsNiBAQAogCWlmIChyZXQgPT0gMCAmJiAhR2V0UmluZ0J1ZmZlckludGVycnVwdE1hc2soJkNoYW5uZWwtPk91dGJvdW5kKSkKIAkJVm1idXNDaGFubmVsU2V0RXZlbnQoQ2hhbm5lbCk7CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChWbWJ1c0NoYW5uZWxTZW5kUGFja2V0KTsKQEAgLTgwMCw4ICs3NzIsNiBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBidWZmZXJMaXN0WzNdOwogCXU2NCBhbGlnbmVkRGF0YSA9IDA7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJaWYgKFBhZ2VDb3VudCA+IE1BWF9QQUdFX0JVRkZFUl9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg0NCw4ICs4MTQsNiBAQAogCWlmIChyZXQgPT0gMCAmJiAhR2V0UmluZ0J1ZmZlckludGVycnVwdE1hc2soJkNoYW5uZWwtPk91dGJvdW5kKSkKIAkJVm1idXNDaGFubmVsU2V0RXZlbnQoQ2hhbm5lbCk7CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NjcsOCArODM1LDYgQEAKIAl1MzIgUGZuQ291bnQgPSBOVU1fUEFHRVNfU1BBTk5FRChNdWx0aVBhZ2VCdWZmZXItPk9mZnNldCwKIAkJCQkJIE11bHRpUGFnZUJ1ZmZlci0+TGVuZ3RoKTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlEdW1wVm1idXNDaGFubmVsKENoYW5uZWwpOwogCiAJRFBSSU5UX0RCRyhWTUJVUywgImRhdGEgYnVmZmVyIC0gb2Zmc2V0ICV1IGxlbiAldSBwZm4gY291bnQgJXUiLApAQCAtOTE0LDggKzg4MCw2IEBACiAJaWYgKHJldCA9PSAwICYmICFHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzaygmQ2hhbm5lbC0+T3V0Ym91bmQpKQogCQlWbWJ1c0NoYW5uZWxTZXRFdmVudChDaGFubmVsKTsKIAotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk0Miw4ICs5MDYsNiBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkqQnVmZmVyQWN0dWFsTGVuID0gMDsKIAkqUmVxdWVzdElkID0gMDsKIApAQCAtOTU1LDcgKzkxNyw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwogCiAJCS8qIERQUklOVF9EQkcoVk1CVVMsICJub3RoaW5nIHRvIHJlYWQhISIpOyAqLwotCQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTc3LDggKzkzOCw2IEBACiAKIAkJRFBSSU5UX0VSUihWTUJVUywgImJ1ZmZlciB0b28gc21hbGwgLSBnb3QgJWQgbmVlZHMgJWQiLAogCQkJICAgQnVmZmVyTGVuLCB1c2VyTGVuKTsKLQkJRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTk5MCw4ICs5NDksNiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmQ2hhbm5lbC0+aW5ib3VuZF9sb2NrLCBmbGFncyk7CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woVm1idXNDaGFubmVsUmVjdlBhY2tldCk7CkBAIC0xMDA5LDggKzk2Niw2IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCSpCdWZmZXJBY3R1YWxMZW4gPSAwOwogCSpSZXF1ZXN0SWQgPSAwOwogCkBAIC0xMDIyLDcgKzk3Nyw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwogCiAJCS8qIERQUklOVF9EQkcoVk1CVVMsICJub3RoaW5nIHRvIHJlYWQhISIpOyAqLwotCQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTA0Myw3ICs5OTcsNiBAQAogCiAJCURQUklOVF9FUlIoVk1CVVMsICJidWZmZXIgdG9vIHNtYWxsIC0gbmVlZGVkICVkIGJ5dGVzIGJ1dCAiCiAJCQkgICAiZ290IHNwYWNlIGZvciBvbmx5ICVkIGJ5dGVzIiwgcGFja2V0TGVuLCBCdWZmZXJMZW4pOwotCQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJCXJldHVybiAtMjsKIAl9CiAKQEAgLTEwNTMsOSArMTAwNiw2IEBACiAJcmV0ID0gUmluZ0J1ZmZlclJlYWQoJkNoYW5uZWwtPkluYm91bmQsIEJ1ZmZlciwgcGFja2V0TGVuLCAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkNoYW5uZWwtPmluYm91bmRfbG9jaywgZmxhZ3MpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuYwppbmRleCAxMmRiNTU1Li42Y2NmNTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5jCkBAIC0yNjcsMTUgKzI2NywxMSBAQAogewogCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsID0gY29udGV4dDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlEUFJJTlRfREJHKFZNQlVTLCAicmVsZWFzaW5nIGNoYW5uZWwgKCVwKSIsIGNoYW5uZWwpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGNoYW5uZWwtPkNvbnRyb2xXUSk7CiAJRFBSSU5UX0RCRyhWTUJVUywgImNoYW5uZWwgcmVsZWFzZWQgKCVwKSIsIGNoYW5uZWwpOwogCiAJa2ZyZWUoY2hhbm5lbCk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC0zMjYsOCArMzIyLDYgQEAKIAlpbnQgY250OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogTWFrZSBzdXJlIHRoaXMgaXMgYSBuZXcgb2ZmZXIgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ1ZtYnVzQ29ubmVjdGlvbi5jaGFubmVsX2xvY2ssIGZsYWdzKTsKIApAQCAtMzUzLDcgKzM0Nyw2IEBACiAJCURQUklOVF9EQkcoVk1CVVMsICJJZ25vcmluZyBkdXBsaWNhdGUgb2ZmZXIgZm9yIHJlbGlkICglZCkiLAogCQkJICAgbmV3Q2hhbm5lbC0+T2ZmZXJNc2cuQ2hpbGRSZWxJZCk7CiAJCUZyZWVWbWJ1c0NoYW5uZWwobmV3Q2hhbm5lbCk7Ci0JCURQUklOVF9FWElUKFZNQlVTKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDEwLDcgKzQwMyw2IEBACiAJCQl9CiAJCX0KIAl9Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtNDIwLDkgKzQxMiw3IEBACiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwgPSBjb250ZXh0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKIAlWbWJ1c0NoaWxkRGV2aWNlUmVtb3ZlKGNoYW5uZWwtPkRldmljZU9iamVjdCk7Ci0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtNDQxLDggKzQzMSw2IEBACiAJaW50IGk7CiAJaW50IGZTdXBwb3J0ZWQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCW9mZmVyID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX29mZmVyX2NoYW5uZWwgKiloZHI7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fREVWSUNFX0NMQVNTRVNfU1VQUE9SVEVEOyBpKyspIHsKIAkJaWYgKG1lbWNtcCgmb2ZmZXItPk9mZmVyLkludGVyZmFjZVR5cGUsCkBAIC00NTUsNyArNDQzLDYgQEAKIAlpZiAoIWZTdXBwb3J0ZWQpIHsKIAkJRFBSSU5UX0RCRyhWTUJVUywgIklnbm9yaW5nIGNoYW5uZWwgb2ZmZXIgbm90aWZpY2F0aW9uIGZvciAiCiAJCQkgICAiY2hpbGQgcmVsaWQgJWQiLCBvZmZlci0+Q2hpbGRSZWxJZCk7Ci0JCURQUklOVF9FWElUKFZNQlVTKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTA0LDggKzQ5MSw2IEBACiAJLyogVE9ETzogTWFrZSBzdXJlIHRoZSBvZmZlciBjb21lcyBmcm9tIG91ciBwYXJlbnQgcGFydGl0aW9uICovCiAJb3NkX3NjaGVkdWxlX2NhbGxiYWNrKG5ld0NoYW5uZWwtPkNvbnRyb2xXUSwgVm1idXNDaGFubmVsUHJvY2Vzc09mZmVyLAogCQkJICAgICAgbmV3Q2hhbm5lbCk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC01MTgsOCArNTAzLDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9yZXNjaW5kX29mZmVyICpyZXNjaW5kOwogCXN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFubmVsOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCXJlc2NpbmQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfcmVzY2luZF9vZmZlciAqKWhkcjsKIAljaGFubmVsID0gR2V0Q2hhbm5lbEZyb21SZWxJZChyZXNjaW5kLT5DaGlsZFJlbElkKTsKIAlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CkBAIC01MzEsOCArNTE0LDYgQEAKIAlvc2Rfc2NoZWR1bGVfY2FsbGJhY2soY2hhbm5lbC0+Q29udHJvbFdRLAogCQkJICAgICAgVm1idXNDaGFubmVsUHJvY2Vzc1Jlc2NpbmRPZmZlciwKIAkJCSAgICAgIGNoYW5uZWwpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtNTQzLDggKzUyNCw2IEBACiBzdGF0aWMgdm9pZCBWbWJ1c0NoYW5uZWxPbk9mZmVyc0RlbGl2ZXJlZCgKIAkJCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyICpoZHIpCiB7Ci0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC01NjMsOCArNTQyLDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9vcGVuX2NoYW5uZWwgKm9wZW5Nc2c7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlyZXN1bHQgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfb3Blbl9yZXN1bHQgKiloZHI7CiAJRFBSSU5UX0RCRyhWTUJVUywgInZtYnVzIG9wZW4gcmVzdWx0IC0gJWQiLCByZXN1bHQtPlN0YXR1cyk7CiAKQEAgLTU5MSw4ICs1NjgsNiBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdWbWJ1c0Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC02MTEsOCArNTg2LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF9oZWFkZXIgKmdwYWRsSGVhZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJZ3BhZGxDcmVhdGVkID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX2dwYWRsX2NyZWF0ZWQgKiloZHI7CiAJRFBSSU5UX0RCRyhWTUJVUywgInZtYnVzIGdwYWRsIGNyZWF0ZWQgcmVzdWx0IC0gJWQiLAogCQkgICBncGFkbENyZWF0ZWQtPkNyZWF0aW9uU3RhdHVzKTsKQEAgLTY0Myw4ICs2MTYsNiBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdWbWJ1c0Nvbm5lY3Rpb24uY2hhbm5lbG1zZ19sb2NrLCBmbGFncyk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC02NjQsOCArNjM1LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9ncGFkbF90ZWFyZG93biAqZ3BhZGxUZWFyZG93bjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWdwYWRsVG9ybmRvd24gPSAoc3RydWN0IHZtYnVzX2NoYW5uZWxfZ3BhZGxfdG9ybmRvd24gKiloZHI7CiAKIAkvKgpAQCAtNjkxLDggKzY2MCw2IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ1ZtYnVzQ29ubmVjdGlvbi5jaGFubmVsbXNnX2xvY2ssIGZsYWdzKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTcxMiw4ICs2NzksNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX3ZlcnNpb25fcmVzcG9uc2UgKnZlcnNpb25SZXNwb25zZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCXZlcnNpb25SZXNwb25zZSA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbF92ZXJzaW9uX3Jlc3BvbnNlICopaGRyOwogCXNwaW5fbG9ja19pcnFzYXZlKCZnVm1idXNDb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwogCkBAIC03MzIsOCArNjk3LDYgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnVm1idXNDb25uZWN0aW9uLmNoYW5uZWxtc2dfbG9jaywgZmxhZ3MpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKiBDaGFubmVsIG1lc3NhZ2UgZGlzcGF0Y2ggdGFibGUgKi8KQEAgLTc2OSw4ICs3MzIsNiBAQAogCXN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyICpoZHI7CiAJaW50IHNpemU7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJaGRyID0gKHN0cnVjdCB2bWJ1c19jaGFubmVsX21lc3NhZ2VfaGVhZGVyICopbXNnLT51LlBheWxvYWQ7CiAJc2l6ZSA9IG1zZy0+SGVhZGVyLlBheWxvYWRTaXplOwogCkBAIC03OTQsNyArNzU1LDYgQEAKIAogCS8qIEZyZWUgdGhlIG1zZyB0aGF0IHdhcyBhbGxvY2F0ZWQgaW4gVm1idXNPbk1zZ0RQQygpICovCiAJa2ZyZWUobXNnKTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC04MDYsOCArNzY2LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tc2dpbmZvICptc2dJbmZvOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJbXNnSW5mbyA9IGttYWxsb2Moc2l6ZW9mKCptc2dJbmZvKSArCiAJCQkgIHNpemVvZihzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciksCiAJCQkgIEdGUF9LRVJORUwpOwpAQCAtODUzLDcgKzgxMSw2IEBACiAJCWtmcmVlKG1zZ0luZm8pOwogCX0KIAotCURQUklOVF9FWElUKFZNQlVTKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvY2hhbm5lbF9tZ210LmgKaW5kZXggNTkwOGI4MS4uZjk2OTI2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2NoYW5uZWxfbWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jaGFubmVsX21nbXQuaApAQCAtMjQ3LDggKzI0Nyw4IEBACiAJLyogQWxsb2NhdGVkIG1lbW9yeSBmb3IgcmluZyBidWZmZXIgKi8KIAl2b2lkICpSaW5nQnVmZmVyUGFnZXM7CiAJdTMyIFJpbmdCdWZmZXJQYWdlQ291bnQ7Ci0JUklOR19CVUZGRVJfSU5GTyBPdXRib3VuZDsJLyogc2VuZCB0byBwYXJlbnQgKi8KLQlSSU5HX0JVRkZFUl9JTkZPIEluYm91bmQ7CS8qIHJlY2VpdmUgZnJvbSBwYXJlbnQgKi8KKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyBPdXRib3VuZDsJLyogc2VuZCB0byBwYXJlbnQgKi8KKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyBJbmJvdW5kOwkvKiByZWNlaXZlIGZyb20gcGFyZW50ICovCiAJc3BpbmxvY2tfdCBpbmJvdW5kX2xvY2s7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKkNvbnRyb2xXUTsKIApAQCAtMjcyLDggKzI3Miw4IEBACiAJdTMyIENsaWVudE1vbml0b3JMYXRlbmN5OwogCXUzMiBDbGllbnRNb25pdG9yQ29ubmVjdGlvbklkOwogCi0JUklOR19CVUZGRVJfREVCVUdfSU5GTyBJbmJvdW5kOwotCVJJTkdfQlVGRkVSX0RFQlVHX0lORk8gT3V0Ym91bmQ7CisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gSW5ib3VuZDsKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfZGVidWdfaW5mbyBPdXRib3VuZDsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Nvbm5lY3Rpb24uYwppbmRleCBlODgyNGRhLi4xZjRkNjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvY29ubmVjdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9jb25uZWN0aW9uLmMKQEAgLTQ0LDggKzQ0LDYgQEAKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9pbml0aWF0ZV9jb250YWN0ICptc2c7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBjb25uZWN0aW5nIG9yIGNvbm5lY3RlZCAqLwogCWlmIChnVm1idXNDb25uZWN0aW9uLkNvbm5lY3RTdGF0ZSAhPSBEaXNjb25uZWN0ZWQpCiAJCXJldHVybiAtMTsKQEAgLTE1NSw4ICsxNTMsNiBAQAogCiAJa2ZyZWUobXNnSW5mby0+V2FpdEV2ZW50KTsKIAlrZnJlZShtc2dJbmZvKTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gMDsKIAogQ2xlYW51cDoKQEAgLTE4MCw4ICsxNzYsNiBAQAogCQlrZnJlZShtc2dJbmZvKTsKIAl9CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTMsOCArMTg3LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbF9tZXNzYWdlX2hlYWRlciAqbXNnOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgY29ubmVjdGVkICovCiAJaWYgKGdWbWJ1c0Nvbm5lY3Rpb24uQ29ubmVjdFN0YXRlICE9IENvbm5lY3RlZCkKIAkJcmV0dXJuIC0xOwpAQCAtMjIxLDcgKzIxMyw2IEBACiAKIENsZWFudXA6CiAJa2ZyZWUobXNnKTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjg1LDggKzI3Niw2IEBACiAJaW50IHJlbGlkOwogCXUzMiAqcmVjdkludGVycnVwdFBhZ2UgPSBnVm1idXNDb25uZWN0aW9uLlJlY3ZJbnRlcnJ1cHRQYWdlOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCS8qIENoZWNrIGV2ZW50cyAqLwogCWlmIChyZWN2SW50ZXJydXB0UGFnZSkgewogCQlmb3IgKGR3b3JkID0gMDsgZHdvcmQgPCBtYXhkd29yZDsgZHdvcmQrKykgewpAQCAtMzEwLDggKzI5OSw2IEBACiAJCQl9CiAJCSB9CiAJfQotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybjsKIH0KIApAQCAtMzMyLDE4ICszMTksMTAgQEAKICAqLwogaW50IFZtYnVzU2V0RXZlbnQodTMyIGNoaWxkUmVsSWQpCiB7Ci0JaW50IHJldCA9IDA7Ci0KLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogRWFjaCB1MzIgcmVwcmVzZW50cyAzMiBjaGFubmVscyAqLwogCXNldF9iaXQoY2hpbGRSZWxJZCAmIDMxLAogCQkodW5zaWduZWQgbG9uZyAqKWdWbWJ1c0Nvbm5lY3Rpb24uU2VuZEludGVycnVwdFBhZ2UgKwogCQkoY2hpbGRSZWxJZCA+PiA1KSk7CiAKLQlyZXQgPSBIdlNpZ25hbEV2ZW50KCk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBIdlNpZ25hbEV2ZW50KCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCmluZGV4IDZjNzdlNjQuLjg2YjFkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9odi5jCkBAIC0xOTIsOCArMTkyLDYgQEAKIAl1bmlvbiBodl94NjRfbXNyX2h5cGVyY2FsbF9jb250ZW50cyBoeXBlcmNhbGxNc3I7CiAJdm9pZCAqdmlydEFkZHIgPSBOVUxMOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCW1lbXNldChnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlLCAwLCBzaXplb2Yodm9pZCAqKSAqIE1BWF9OVU1fQ1BVUyk7CiAJbWVtc2V0KGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZSwgMCwgc2l6ZW9mKHZvaWQgKikgKiBNQVhfTlVNX0NQVVMpOwogCkBAIC0yNzUsOCArMjczLDYgQEAKIAlnSHZDb250ZXh0LlNpZ25hbEV2ZW50UGFyYW0tPkZsYWdOdW1iZXIgPSAwOwogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRQYXJhbS0+UnN2ZFogPSAwOwogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIAogQ2xlYW51cDoKQEAgLTI4OSw4ICsyODUsNiBAQAogCQl2ZnJlZSh2aXJ0QWRkcik7CiAJfQogCXJldCA9IC0xOwotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwMyw4ICsyOTcsNiBAQAogewogCXVuaW9uIGh2X3g2NF9tc3JfaHlwZXJjYWxsX2NvbnRlbnRzIGh5cGVyY2FsbE1zcjsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlrZnJlZShnSHZDb250ZXh0LlNpZ25hbEV2ZW50QnVmZmVyKTsKIAlnSHZDb250ZXh0LlNpZ25hbEV2ZW50QnVmZmVyID0gTlVMTDsKIAlnSHZDb250ZXh0LlNpZ25hbEV2ZW50UGFyYW0gPSBOVUxMOwpAQCAtMzE1LDggKzMwNyw2IEBACiAJCXZmcmVlKGdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSk7CiAJCWdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSA9IE5VTEw7CiAJfQotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiAvKgpAQCAtMzkyLDEyICszODIsOCBAQAogCXUzMiBpcnFWZWN0b3IgPSAqKCh1MzIgKikoaXJxYXJnKSk7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KLQlpZiAoIWdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSkgewotCQlEUFJJTlRfRVhJVChWTUJVUyk7CisJaWYgKCFnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UpCiAJCXJldHVybjsKLQl9CiAKIAkvKiBDaGVjayB0aGUgdmVyc2lvbiAqLwogCXJkbXNybChIVl9YNjRfTVNSX1NWRVJTSU9OLCB2ZXJzaW9uKTsKQEAgLTQ2NCw5ICs0NTAsNiBAQAogCXdybXNybChIVl9YNjRfTVNSX1NDT05UUk9MLCBzY3RybC5Bc1VJTlQ2NCk7CiAKIAlnSHZDb250ZXh0LlN5bklDSW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuOwogCiBDbGVhbnVwOgpAQCAtNDc1LDggKzQ1OCw2IEBACiAKIAlpZiAoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0pCiAJCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSwgMSk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiAJcmV0dXJuOwogfQogCkBAIC00OTAsMTIgKzQ3MSw4IEBACiAJdW5pb24gaHZfc3luaWNfc2llZnAgc2llZnA7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KLQlpZiAoIWdIdkNvbnRleHQuU3luSUNJbml0aWFsaXplZCkgewotCQlEUFJJTlRfRVhJVChWTUJVUyk7CisJaWYgKCFnSHZDb250ZXh0LlN5bklDSW5pdGlhbGl6ZWQpCiAJCXJldHVybjsKLQl9CiAKIAlyZG1zcmwoSFZfWDY0X01TUl9TSU5UMCArIFZNQlVTX01FU1NBR0VfU0lOVCwgc2hhcmVkU2ludC5Bc1VJTlQ2NCk7CiAKQEAgLTUxOSw2ICs0OTYsNCBAQAogCiAJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLCAxKTsKIAlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdLCAxKTsKLQotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9odl90aW1lc291cmNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdGltZXNvdXJjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZWU1MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdGltZXNvdXJjZS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQSBjbG9ja3NvdXJjZSBmb3IgTGludXggcnVubmluZyBvbiBIeXBlclYuCisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgTm92ZWxsLCBJbmMuCisgKiBBdXRob3IgOiBLLiBZLiBTcmluaXZhc2FuIDxrc3Jpbml2YXNhbkBub3ZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCisgKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorICogZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2Lmg+CisjaW5jbHVkZSA8YXNtL21zaHlwZXJ2Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KKworI2RlZmluZSBIVl9DTE9DS19TSElGVAkyMgorCitzdGF0aWMgY3ljbGVfdCByZWFkX2h2X2Nsb2NrKHN0cnVjdCBjbG9ja3NvdXJjZSAqYXJnKQoreworCWN5Y2xlX3QgY3VycmVudF90aWNrOworCS8qCisJICogUmVhZCB0aGUgcGFydGl0aW9uIGNvdW50ZXIgdG8gZ2V0IHRoZSBjdXJyZW50IHRpY2sgY291bnQuIFRoaXMgY291bnQKKwkgKiBpcyBzZXQgdG8gMCB3aGVuIHRoZSBwYXJ0aXRpb24gaXMgY3JlYXRlZCBhbmQgaXMgaW5jcmVtZW50ZWQgaW4KKwkgKiAxMDAgbmFub3NlY29uZCB1bml0cy4KKwkgKi8KKwlyZG1zcmwoSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVCwgY3VycmVudF90aWNrKTsKKwlyZXR1cm4gY3VycmVudF90aWNrOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGh5cGVydl9jcyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAiaHlwZXJ2X2Nsb2Nrc291cmNlIiwKKwkucmF0aW5nICAgICAgICAgPSA0MDAsIC8qIHVzZSB0aGlzIHdoZW4gcnVubmluZyBvbiBIeXBlcnYqLworCS5yZWFkICAgICAgICAgICA9IHJlYWRfaHZfY2xvY2ssCisJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCisJLyoKKwkgKiBUaGUgdGltZSByZWYgY291bnRlciBpbiBIeXBlclYgaXMgaW4gMTAwbnMgdW5pdHMuCisJICogVGhlIGRlZmluaXRpb24gb2YgbXVsdCBpczoKKwkgKiBtdWx0LzJec2hpZnQgPSBucy9jeWMgPSAxMDAKKwkgKiBtdWx0ID0gKDEwMCA8PCBzaGlmdCkKKwkgKi8KKwkubXVsdCAgICAgICAgICAgPSAoMTAwIDw8IEhWX0NMT0NLX1NISUZUKSwKKwkuc2hpZnQgICAgICAgICAgPSBIVl9DTE9DS19TSElGVCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdAoraHZfdGltZXNvdXJjZV9kbWlfdGFibGVbXSBfX21heWJlX3VudXNlZCAgPSB7CisJeworCQkuaWRlbnQgPSAiSHlwZXItViIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm9zb2Z0IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZpcnR1YWwgTWFjaGluZSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiVmlydHVhbCBNYWNoaW5lIiksCisJCX0sCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIGh2X3RpbWVzb3VyY2VfZG1pX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9faW5pdGNvbnN0Citodl90aW1lc291cmNlX3BjaV90YWJsZVtdIF9fbWF5YmVfdW51c2VkID0geworCXsgUENJX0RFVklDRSgweDE0MTQsIDB4NTM1MykgfSwgLyogVkdBIGNvbXBhdGlibGUgY29udHJvbGxlciAqLworCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGh2X3RpbWVzb3VyY2VfcGNpX3RhYmxlKTsKKworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2h2X2Nsb2Nrc291cmNlKHZvaWQpCit7CisJaWYgKCh4ODZfaHlwZXIgIT0gJng4Nl9oeXBlcl9tc19oeXBlcnYpIHx8CisJCSEobXNfaHlwZXJ2LmZlYXR1cmVzICYgSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVF9BVkFJTEFCTEUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghZG1pX2NoZWNrX3N5c3RlbShodl90aW1lc291cmNlX2RtaV90YWJsZSkpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgSHlwZXJWIGNsb2NrIHNvdXJjZVxuIik7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZoeXBlcnZfY3MpOworfQorCittb2R1bGVfaW5pdChpbml0X2h2X2Nsb2Nrc291cmNlKTsKK01PRFVMRV9ERVNDUklQVElPTigiSHlwZXJWIGJhc2VkIGNsb2Nrc291cmNlIik7CitNT0RVTEVfQVVUSE9SKCJLLiBZLiBTcmluaXZhc2FuIDxrc3Jpbml2YXNhbkBub3ZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2h2X3V0aWxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYwppbmRleCAyYWRjOWI0Li42ZWI3OWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvaHZfdXRpbHMuYwpAQCAtNTIsOCArNTIsNiBAQAogCXN0cnVjdCBpY21zZ19oZHIgKmljbXNnaGRycDsKIAlzdHJ1Y3QgaWNtc2dfbmVnb3RpYXRlICpuZWdvcCA9IE5VTEw7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJYnVmbGVuID0gUEFHRV9TSVpFOwogCWJ1ZiA9IGttYWxsb2MoYnVmbGVuLCBHRlBfQVRPTUlDKTsKIApAQCAtMTAyLDggKzEwMCw2IEBACiAKIAlrZnJlZShidWYpOwogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJaWYgKGV4ZWN1dGVfc2h1dGRvd24gPT0gdHJ1ZSkKIAkJb3JkZXJseV9wb3dlcm9mZihmYWxzZSk7CiB9CkBAIC0xNjAsOCArMTU2LDYgQEAKIAlzdHJ1Y3QgaWNtc2dfaGRyICppY21zZ2hkcnA7CiAJc3RydWN0IGljdGltZXN5bmNfZGF0YSAqdGltZWRhdGFwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWJ1ZmxlbiA9IFBBR0VfU0laRTsKIAlidWYgPSBrbWFsbG9jKGJ1ZmxlbiwgR0ZQX0FUT01JQyk7CiAKQEAgLTE5Miw4ICsxODYsNiBAQAogCX0KIAogCWtmcmVlKGJ1Zik7Ci0KLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC0yMTAsOCArMjAyLDYgQEAKIAlzdHJ1Y3QgaWNtc2dfaGRyICppY21zZ2hkcnA7CiAJc3RydWN0IGhlYXJ0YmVhdF9tc2dfZGF0YSAqaGVhcnRiZWF0X21zZzsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlidWZsZW4gPSBQQUdFX1NJWkU7CiAJYnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9BVE9NSUMpOwogCkBAIC0yNDksOCArMjM5LDYgQEAKIAl9CiAKIAlrZnJlZShidWYpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19pbml0Y29uc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvbG9nZ2luZy5oCmluZGV4IGFkNGNmY2YuLjIwZDRkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9sb2dnaW5nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L2xvZ2dpbmcuaApAQCAtOTIsMjEgKzkyLDQgQEAKIAkJICAgICAgIF9fZnVuY19fLCAjIyBhcmdzKTtcCiAJfSB3aGlsZSAoMCkKIAotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQUklOVF9FTlRFUihtb2QpIGRvIHtcCi0JaWYgKChtb2QgJiAoSElXT1JEKHZtYnVzX2xvZ2xldmVsKSkpICYmIFwKLQkgICAgKERFQlVHX0xWTF9FTlRFUkVYSVQgPD0gTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSkpCVwKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlsiI21vZCJdOiAlcygpIGVudGVyXG4iLCBfX2Z1bmNfXyk7XAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRFBSSU5UX0VYSVQobW9kKSBkbyB7XAotCWlmICgobW9kICYgKEhJV09SRCh2bWJ1c19sb2dsZXZlbCkpKSAmJiBcCi0JICAgIChERUJVR19MVkxfRU5URVJFWElUIDw9IExPV09SRCh2bWJ1c19sb2dsZXZlbCkpKQlcCi0JCXByaW50ayhLRVJOX0RFQlVHICJbIiNtb2QiXTogJXMoKSBleGl0XG4iLCBfX2Z1bmNfXyk7XAotCX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBEUFJJTlRfRU5URVIobW9kKQotI2RlZmluZSBEUFJJTlRfRVhJVChtb2QpCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9MT0dHSU5HX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKaW5kZXggYmExNTA1OS4uMWQyZWJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwpAQCAtMTc0LDggKzE3NCw2IEBACiB7CiAJc3RydWN0IG5ldHZzY19kcml2ZXIgKmRyaXZlciA9IChzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqKWRydjsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJRFBSSU5UX0RCRyhORVRWU0MsICJzaXplb2Yoc3RydWN0IGh2X25ldHZzY19wYWNrZXQpPSV6ZCwgIgogCQkgICAic2l6ZW9mKHN0cnVjdCBudnNwX21lc3NhZ2UpPSV6ZCwgIgogCQkgICAic2l6ZW9mKHN0cnVjdCB2bXRyYW5zZmVyX3BhZ2VfcGFja2V0X2hlYWRlcik9JXpkIiwKQEAgLTIwMiw5ICsyMDAsNiBAQAogCWRyaXZlci0+T25TZW5kCQkJPSBOZXRWc2NPblNlbmQ7CiAKIAlSbmRpc0ZpbHRlckluaXQoZHJpdmVyKTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE0LDEzICsyMDksMTAgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlOwogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRQYWNrZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCW5ldERldmljZSA9IEdldE91dGJvdW5kTmV0RGV2aWNlKERldmljZSk7CiAJaWYgKCFuZXREZXZpY2UpIHsKIAkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gZ2V0IG5ldCBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJcmV0dXJuIC0xOwogCX0KIAkvKiBBU1NFUlQobmV0RGV2aWNlLT5SZWNlaXZlQnVmZmVyU2l6ZSA+IDApOyAqLwpAQCAtMzM1LDcgKzMyNyw2IEBACiAKIEV4aXQ6CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDUsMTMgKzMzNiwxMCBAQAogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2U7CiAJc3RydWN0IG52c3BfbWVzc2FnZSAqaW5pdFBhY2tldDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0T3V0Ym91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChuZXREZXZpY2UtPlNlbmRCdWZmZXJTaXplIDw9IDApIHsKQEAgLTQzNCw3ICs0MjIsNiBAQAogCiBFeGl0OgogCVB1dE5ldERldmljZShEZXZpY2UpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDQzLDggKzQzMCw2IEBACiAJc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlUGFja2V0OwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIHNlY3Rpb24gY291bnQsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEKIAkgKiBTZW5kUmVjZWl2ZUJ1ZmZlckNvbXBsZXRlIG1zZyAoaWUgc2VudApAQCAtNDc1LDcgKzQ2MCw2IEBACiAJCWlmIChyZXQgIT0gMCkgewogCQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gc2VuZCByZXZva2UgcmVjZWl2ZSAiCiAJCQkJICAgImJ1ZmZlciB0byBuZXR2c3AiKTsKLQkJCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC00OTIsNyArNDc2LDYgQEAKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlEUFJJTlRfRVJSKE5FVFZTQywKIAkJCQkgICAidW5hYmxlIHRvIHRlYXJkb3duIHJlY2VpdmUgYnVmZmVyJ3MgZ3BhZGwiKTsKLQkJCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJTmV0RGV2aWNlLT5SZWNlaXZlQnVmZmVyR3BhZGxIYW5kbGUgPSAwOwpAQCAtNTEzLDggKzQ5Niw2IEBACiAJCU5ldERldmljZS0+UmVjZWl2ZVNlY3Rpb25zID0gTlVMTDsKIAl9CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTIzLDggKzUwNCw2IEBACiAJc3RydWN0IG52c3BfbWVzc2FnZSAqcmV2b2tlUGFja2V0OwogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKgogCSAqIElmIHdlIGdvdCBhIHNlY3Rpb24gY291bnQsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEKIAkgKiAgU2VuZFJlY2VpdmVCdWZmZXJDb21wbGV0ZSBtc2cgKGllIHNlbnQKQEAgLTU1NCw3ICs1MzMsNiBAQAogCQlpZiAocmV0ICE9IDApIHsKIAkJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIHNlbmQgcmV2b2tlIHNlbmQgYnVmZmVyICIKIAkJCQkgICAidG8gbmV0dnNwIik7Ci0JCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtNTcyLDcgKzU1MCw2IEBACiAJCWlmIChyZXQgIT0gMCkgewogCQkJRFBSSU5UX0VSUihORVRWU0MsICJ1bmFibGUgdG8gdGVhcmRvd24gc2VuZCBidWZmZXIncyAiCiAJCQkJICAgImdwYWRsIik7Ci0JCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCU5ldERldmljZS0+U2VuZEJ1ZmZlckdwYWRsSGFuZGxlID0gMDsKQEAgLTU4Nyw4ICs1NjQsNiBAQAogCQlOZXREZXZpY2UtPlNlbmRCdWZmZXIgPSBOVUxMOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MDAsMTMgKzU3NSwxMCBAQAogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRQYWNrZXQ7CiAJaW50IG5kaXNWZXJzaW9uOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAluZXREZXZpY2UgPSBHZXRPdXRib3VuZE5ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTY5NiwxOCArNjY4LDEzIEBACiAKIENsZWFudXA6CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBOZXRWc2NEaXNjb25uZWN0RnJvbVZzcChzdHJ1Y3QgbmV0dnNjX2RldmljZSAqTmV0RGV2aWNlKQogewotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJTmV0VnNjRGVzdHJveVJlY2VpdmVCdWZmZXIoTmV0RGV2aWNlKTsKIAlOZXRWc2NEZXN0cm95U2VuZEJ1ZmZlcihOZXREZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIH0KIAogLyoKQEAgLTcyMiw4ICs2ODksNiBAQAogCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXREcml2ZXIgPQogCQkJCShzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqKURldmljZS0+RHJpdmVyOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAluZXREZXZpY2UgPSBBbGxvY05ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCXJldCA9IC0xOwpAQCAtNzg3LDcgKzc1Miw2IEBACiAJRFBSSU5UX0lORk8oTkVUVlNDLCAiKioqIE5ldFZTQyBjaGFubmVsIGhhbmRzaGFrZSByZXN1bHQgLSAlZCAqKioiLAogCQkgICAgcmV0KTsKIAotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIAogQ2xvc2U6CkBAIC04MTIsNyArNzc2LDYgQEAKIAkJRnJlZU5ldERldmljZShuZXREZXZpY2UpOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODI0LDggKzc4Nyw2IEBACiAJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldERldmljZTsKIAlzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqbmV0dnNjUGFja2V0LCAqcG9zOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlEUFJJTlRfSU5GTyhORVRWU0MsICJEaXNhYmxpbmcgb3V0Ym91bmQgdHJhZmZpYyBvbiBuZXQgZGV2aWNlICglcCkuLi4iLAogCQkgICAgRGV2aWNlLT5FeHRlbnNpb24pOwogCkBAIC04NjgsOCArODI5LDYgQEAKIAogCWtmcmVlKG5ldERldmljZS0+Q2hhbm5lbEluaXRFdmVudCk7CiAJRnJlZU5ldERldmljZShuZXREZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODc4LDggKzgzNyw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIE5ldFZzY09uQ2xlYW51cChzdHJ1Y3QgaHZfZHJpdmVyICpkcnYpCiB7Ci0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIH0KIAogc3RhdGljIHZvaWQgTmV0VnNjT25TZW5kQ29tcGxldGlvbihzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCkBAIC04ODksMTMgKzg0NiwxMCBAQAogCXN0cnVjdCBudnNwX21lc3NhZ2UgKm52c3BQYWNrZXQ7CiAJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKm52c2NQYWNrZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCW5ldERldmljZSA9IEdldEluYm91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC05MjksNyArODgzLDYgQEAKIAl9CiAKIAlQdXROZXREZXZpY2UoRGV2aWNlKTsKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgaW50IE5ldFZzY09uU2VuZChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCkBAIC05NDAsMTMgKzg5MywxMCBAQAogCiAJc3RydWN0IG52c3BfbWVzc2FnZSBzZW5kTWVzc2FnZTsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0T3V0Ym91bmROZXREZXZpY2UoRGV2aWNlKTsKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgIm5ldCBkZXZpY2UgKCVwKSBzaHV0dGluZyBkb3duLi4uIgogCQkJICAgImlnbm9yaW5nIG91dGJvdW5kIHBhY2tldHMiLCBuZXREZXZpY2UpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTI7CiAJfQogCkBAIC05ODYsOCArOTM2LDYgQEAKIAogCWF0b21pY19pbmMoJm5ldERldmljZS0+TnVtT3V0c3RhbmRpbmdTZW5kcyk7CiAJUHV0TmV0RGV2aWNlKERldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDcsMTMgKzk1NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJTElTVF9IRUFEKGxpc3RIZWFkKTsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJbmV0RGV2aWNlID0gR2V0SW5ib3VuZE5ldERldmljZShEZXZpY2UpOwogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAidW5hYmxlIHRvIGdldCBuZXQgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExODksNyArMTEzNCw2IEBACiAJLyogQVNTRVJUKGxpc3RfZW1wdHkoJmxpc3RIZWFkKSk7ICovCiAKIAlQdXROZXREZXZpY2UoRGV2aWNlKTsKLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgdm9pZCBOZXRWc2NTZW5kUmVjZWl2ZUNvbXBsZXRpb24oc3RydWN0IGh2X2RldmljZSAqRGV2aWNlLApAQCAtMTI0OCw4ICsxMTkyLDYgQEAKIAlib29sIGZTZW5kUmVjZWl2ZUNvbXAgPSBmYWxzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBBU1NFUlQocGFja2V0LT5YZmVyUGFnZVBhY2tldCk7ICovCiAKIAkvKgpAQCAtMTI2MSw3ICsxMjAzLDYgQEAKIAlpZiAoIW5ldERldmljZSkgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgInVuYWJsZSB0byBnZXQgbmV0IGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMjkyLDcgKzEyMzMsNiBAQAogCQlOZXRWc2NTZW5kUmVjZWl2ZUNvbXBsZXRpb24oZGV2aWNlLCB0cmFuc2FjdGlvbklkKTsKIAogCVB1dE5ldERldmljZShkZXZpY2UpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIHN0YXRpYyB2b2lkIE5ldFZzY09uQ2hhbm5lbENhbGxiYWNrKHZvaWQgKkNvbnRleHQpCkBAIC0xMzA3LDkgKzEyNDcsNiBAQAogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAlpbnQgYnVmZmVybGVuID0gTkVUVlNDX1BBQ0tFVF9TSVpFOwogCi0KLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIEFTU0VSVChkZXZpY2UpOyAqLwogCiAJcGFja2V0ID0ga3phbGxvYyhORVRWU0NfUEFDS0VUX1NJWkUgKiBzaXplb2YodW5zaWduZWQgY2hhciksCkBAIC0xMzIyLDcgKzEyNTksNiBAQAogCWlmICghbmV0RGV2aWNlKSB7CiAJCURQUklOVF9FUlIoTkVUVlNDLCAibmV0IGRldmljZSAoJXApIHNodXR0aW5nIGRvd24uLi4iCiAJCQkgICAiaWdub3JpbmcgaW5ib3VuZCBwYWNrZXRzIiwgbmV0RGV2aWNlKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMzg2LDcgKzEzMjIsNiBAQAogCX0gd2hpbGUgKDEpOwogCiAJUHV0TmV0RGV2aWNlKGRldmljZSk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIG91dDoKIAlrZnJlZShidWZmZXIpOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCmluZGV4IDU1Yjk5MzIuLjU2ZTExNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwpAQCAtNzYsOCArNzYsNiBAQAogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmbmV0X2RldmljZV9jdHgtPmRldmljZV9jdHgtPmRldmljZV9vYmo7CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlpZiAobmV0aWZfY2Fycmllcl9vayhuZXQpKSB7CiAJCS8qIE9wZW4gdXAgdGhlIGRldmljZSAqLwogCQlyZXQgPSBSbmRpc0ZpbHRlck9uT3BlbihkZXZpY2Vfb2JqKTsKQEAgLTkyLDcgKzkwLDYgQEAKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAidW5hYmxlIHRvIG9wZW4gZGV2aWNlLi4ubGluayBpcyBkb3duLiIpOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMiwxNiArOTksMTIgQEAKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJm5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAKIAlyZXQgPSBSbmRpc0ZpbHRlck9uQ2xvc2UoZGV2aWNlX29iaik7CiAJaWYgKHJldCAhPSAwKQogCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJ1bmFibGUgdG8gY2xvc2UgZGV2aWNlIChyZXQgJWQpLiIsIHJldCk7CiAKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyMSw4ICsxMTQsNiBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikKIAkJKHVuc2lnbmVkIGxvbmcpcGFja2V0LT5Db21wbGV0aW9uLlNlbmQuU2VuZENvbXBsZXRpb25UaWQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlrZnJlZShwYWNrZXQpOwogCiAJaWYgKHNrYikgewpAQCAtMTM1LDggKzEyNiw2IEBACiAJCWlmICgobmV0X2RldmljZV9jdHgtPmF2YWlsICs9IG51bV9wYWdlcykgPj0gUEFDS0VUX1BBR0VTX0hJV0FURVIpCiAgCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwogCX0KLQotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwogfQogCiBzdGF0aWMgaW50IG5ldHZzY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCkBAIC0xNTEsOCArMTQwLDYgQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpLCBudW1fcGFnZXM7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlEUFJJTlRfREJHKE5FVFZTQ19EUlYsICJ4bWl0IHBhY2tldCAtIGxlbiAlZCBkYXRhX2xlbiAlZCIsCiAJCSAgIHNrYi0+bGVuLCBza2ItPmRhdGFfbGVuKTsKIApAQCAtMjI1LDcgKzIxMiw2IEBACiAJCW5ldHZzY194bWl0X2NvbXBsZXRpb24ocGFja2V0KTsKIAl9CiAKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0yMzgsOCArMjI0LDYgQEAKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gdG9fdm1fZGV2aWNlKGRldmljZV9vYmopOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXZfZ2V0X2RydmRhdGEoJmRldmljZV9jdHgtPmRldmljZSk7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlpZiAoIW5ldCkgewogCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJnb3QgbGluayBzdGF0dXMgYnV0IG5ldCBkZXZpY2UgIgogCQkJCSJub3QgaW5pdGlhbGl6ZWQgeWV0Iik7CkBAIC0yNTMsNyArMjM3LDYgQEAKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCX0KLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIH0KIAogLyoKQEAgLTI3MCw4ICsyNTMsNiBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7Ci0KIAlpZiAoIW5ldCkgewogCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsICJnb3QgcmVjZWl2ZSBjYWxsYmFjayBidXQgbmV0IGRldmljZSAiCiAJCQkJIm5vdCBpbml0aWFsaXplZCB5ZXQiKTsKQEAgLTMyMyw4ICszMDQsNiBAQAogCURQUklOVF9EQkcoTkVUVlNDX0RSViwgIiMgb2YgcmVjdnMgJWx1IHRvdGFsIHNpemUgJWx1IiwKIAkJICAgbmV0LT5zdGF0cy5yeF9wYWNrZXRzLCBuZXQtPnN0YXRzLnJ4X2J5dGVzKTsKIAotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NCw4ICszNDMsNiBAQAogCXN0cnVjdCBuZXR2c2NfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKLQogCWlmICghbmV0X2Rydl9vYmotPkJhc2UuT25EZXZpY2VBZGQpCiAJCXJldHVybiAtMTsKIApAQCAtNDIyLDcgKzM5OSw2IEBACiAJCWZyZWVfbmV0ZGV2KG5ldCk7CiAJfQogCi0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDM4LDE4ICs0MTQsMTMgQEAKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJmRldmljZV9jdHgtPmRldmljZV9vYmo7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKLQogCWlmIChuZXQgPT0gTlVMTCkgewogCQlEUFJJTlRfSU5GTyhORVRWU0MsICJubyBuZXQgZGV2aWNlIHRvIHJlbW92ZSIpOwotCQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFuZXRfZHJ2X29iai0+QmFzZS5PbkRldmljZVJlbW92ZSkgewotCQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKKwlpZiAoIW5ldF9kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJLyogU3RvcCBvdXRib3VuZCBhc2FwICovCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwpAQCAtNDY4LDcgKzQzOSw2IEBACiAJfQogCiAJZnJlZV9uZXRkZXYobmV0KTsKLQlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00ODgsOCArNDU4LDYgQEAKIAlzdHJ1Y3QgZGV2aWNlICpjdXJyZW50X2RldjsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJd2hpbGUgKDEpIHsKIAkJY3VycmVudF9kZXYgPSBOVUxMOwogCkBAIC01MTUsOCArNDgzLDYgQEAKIAogCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKGRydl9jdHgpOwogCi0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTUyNiw4ICs0OTIsNiBAQAogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJ2X2N0eCA9ICZnX25ldHZzY19kcnYuZHJ2X2N0eDsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwotCiAJdm1idXNfZ2V0X2ludGVyZmFjZSgmbmV0X2Rydl9vYmotPkJhc2UuVm1idXNDaGFubmVsSW50ZXJmYWNlKTsKIAogCW5ldF9kcnZfb2JqLT5SaW5nQnVmZmVyU2l6ZSA9IHJpbmdfc2l6ZSAqIFBBR0VfU0laRTsKQEAgLTU0Nyw4ICs1MTEsNiBAQAogCS8qIFRoZSBkcml2ZXIgYmVsb25ncyB0byB2bWJ1cyAqLwogCXJldCA9IHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3RlcihkcnZfY3R4KTsKIAotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTY4LDI2ICs1MzAsMTcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmV0dnNjX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwogCURQUklOVF9JTkZPKE5FVFZTQ19EUlYsICJOZXR2c2MgaW5pdGlhbGl6aW5nLi4uLiIpOwogCiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGh2X25ldHZzY19kbWlfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IG5ldHZzY19kcnZfaW5pdChOZXRWc2NJbml0aWFsaXplKTsKLQotCURQUklOVF9FWElUKE5FVFZTQ19EUlYpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbmV0dnNjX2Rydl9pbml0KE5ldFZzY0luaXRpYWxpemUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmV0dnNjX2V4aXQodm9pZCkKIHsKLQlEUFJJTlRfRU5URVIoTkVUVlNDX0RSVik7CiAJbmV0dnNjX2Rydl9leGl0KCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2luaXRjb25zdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuYwppbmRleCBhZTJhMTBlLi4xN2JjNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuYwpAQCAtNDYsNyArNDYsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQKLUdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKFJJTkdfQlVGRkVSX0lORk8gKnJiaSwgdTMyICpyZWFkLCB1MzIgKndyaXRlKQorR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKnJiaSwgdTMyICpyZWFkLCB1MzIgKndyaXRlKQogewogCXUzMiByZWFkX2xvYywgd3JpdGVfbG9jOwogCkBAIC02OCw3ICs2OCw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1HZXROZXh0V3JpdGVMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKK0dldE5leHRXcml0ZUxvY2F0aW9uKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbykKIHsKIAl1MzIgbmV4dCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4OwogCkBAIC04Nyw3ICs4Nyw4IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotU2V0TmV4dFdyaXRlTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHUzMiBOZXh0V3JpdGVMb2NhdGlvbikKK1NldE5leHRXcml0ZUxvY2F0aW9uKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywKKwkJICAgICB1MzIgTmV4dFdyaXRlTG9jYXRpb24pCiB7CiAJUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXggPSBOZXh0V3JpdGVMb2NhdGlvbjsKIH0KQEAgLTEwMiw3ICsxMDMsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0TmV4dFJlYWRMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKK0dldE5leHRSZWFkTG9jYXRpb24oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKQogewogCXUzMiBuZXh0ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKIApAQCAtMTIyLDcgKzEyMyw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1HZXROZXh0UmVhZExvY2F0aW9uV2l0aE9mZnNldChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdTMyIE9mZnNldCkKK0dldE5leHRSZWFkTG9jYXRpb25XaXRoT2Zmc2V0KHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywgdTMyIE9mZnNldCkKIHsKIAl1MzIgbmV4dCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CiAKQEAgLTE0Myw3ICsxNDQsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQKLVNldE5leHRSZWFkTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHUzMiBOZXh0UmVhZExvY2F0aW9uKQorU2V0TmV4dFJlYWRMb2NhdGlvbihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIHUzMiBOZXh0UmVhZExvY2F0aW9uKQogewogCVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXggPSBOZXh0UmVhZExvY2F0aW9uOwogfQpAQCAtMTU5LDcgKzE2MCw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqCi1HZXRSaW5nQnVmZmVyKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQorR2V0UmluZ0J1ZmZlcihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pCiB7CiAJcmV0dXJuICh2b2lkICopUmluZ0luZm8tPlJpbmdCdWZmZXItPkJ1ZmZlcjsKIH0KQEAgLTE3NSw3ICsxNzYsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0UmluZ0J1ZmZlclNpemUoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCitHZXRSaW5nQnVmZmVyU2l6ZShzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pCiB7CiAJcmV0dXJuIFJpbmdJbmZvLT5SaW5nRGF0YVNpemU7CiB9CkBAIC0xOTAsNyArMTkxLDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1NjQKLUdldFJpbmdCdWZmZXJJbmRpY2VzKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQorR2V0UmluZ0J1ZmZlckluZGljZXMoc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvKQogewogCXJldHVybiAoKHU2NClSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleCA8PCAzMikKIAl8fCBSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4OwpAQCAtMjA2LDcgKzIwNyw3IEBACiAJRHVtcCBvdXQgdG8gY29uc29sZSB0aGUgcmluZyBidWZmZXIgaW5mbwogCiAtLSovCi12b2lkIER1bXBSaW5nSW5mbyhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgY2hhciAqUHJlZml4KQordm9pZCBEdW1wUmluZ0luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLCBjaGFyICpQcmVmaXgpCiB7CiAJdTMyIGJ5dGVzQXZhaWxUb1dyaXRlOwogCXUzMiBieXRlc0F2YWlsVG9SZWFkOwpAQCAtMjMzLDE0ICsyMzQsMTQgQEAKIAogc3RhdGljIHUzMgogQ29weVRvUmluZ0J1ZmZlcigKLQlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbwkqUmluZ0luZm8sCiAJdTMyCQkJCVN0YXJ0V3JpdGVPZmZzZXQsCiAJdm9pZAkJCQkqU3JjLAogCXUzMgkJCQlTcmNMZW4pOwogCiBzdGF0aWMgdTMyCiBDb3B5RnJvbVJpbmdCdWZmZXIoCi0JUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCisJc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8JKlJpbmdJbmZvLAogCXZvaWQJCQkJKkRlc3QsCiAJdTMyCQkJCURlc3RMZW4sCiAJdTMyCQkJCVN0YXJ0UmVhZE9mZnNldCk7CkBAIC0yNTYsOCArMjU3LDggQEAKIAlHZXQgdmFyaW91cyBkZWJ1ZyBtZXRyaWNzIGZvciB0aGUgc3BlY2lmaWVkIHJpbmcgYnVmZmVyCiAKIC0tKi8KLXZvaWQgUmluZ0J1ZmZlckdldERlYnVnSW5mbyhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywKLQkJCSAgICBSSU5HX0JVRkZFUl9ERUJVR19JTkZPICpEZWJ1Z0luZm8pCit2b2lkIFJpbmdCdWZmZXJHZXREZWJ1Z0luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLAorCQkJICAgIHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvICpkZWJ1Z19pbmZvKQogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKQEAgLTI2NywxMSArMjY4LDExIEBACiAJCQkJCSZieXRlc0F2YWlsVG9SZWFkLAogCQkJCQkmYnl0ZXNBdmFpbFRvV3JpdGUpOwogCi0JCURlYnVnSW5mby0+Qnl0ZXNBdmFpbFRvUmVhZCA9IGJ5dGVzQXZhaWxUb1JlYWQ7Ci0JCURlYnVnSW5mby0+Qnl0ZXNBdmFpbFRvV3JpdGUgPSBieXRlc0F2YWlsVG9Xcml0ZTsKLQkJRGVidWdJbmZvLT5DdXJyZW50UmVhZEluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKLQkJRGVidWdJbmZvLT5DdXJyZW50V3JpdGVJbmRleCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4OwotCQlEZWJ1Z0luZm8tPkN1cnJlbnRJbnRlcnJ1cHRNYXNrID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPkludGVycnVwdE1hc2s7CisJCWRlYnVnX2luZm8tPkJ5dGVzQXZhaWxUb1JlYWQgPSBieXRlc0F2YWlsVG9SZWFkOworCQlkZWJ1Z19pbmZvLT5CeXRlc0F2YWlsVG9Xcml0ZSA9IGJ5dGVzQXZhaWxUb1dyaXRlOworCQlkZWJ1Z19pbmZvLT5DdXJyZW50UmVhZEluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKKwkJZGVidWdfaW5mby0+Q3VycmVudFdyaXRlSW5kZXggPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleDsKKwkJZGVidWdfaW5mby0+Q3VycmVudEludGVycnVwdE1hc2sgPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+SW50ZXJydXB0TWFzazsKIAl9CiB9CiAKQEAgLTI4NSw3ICsyODYsNyBAQAogCUdldCB0aGUgaW50ZXJydXB0IG1hc2sgZm9yIHRoZSBzcGVjaWZpZWQgcmluZyBidWZmZXIKIAogLS0qLwotdTMyIEdldFJpbmdCdWZmZXJJbnRlcnJ1cHRNYXNrKFJJTkdfQlVGRkVSX0lORk8gKnJiaSkKK3UzMiBHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqcmJpKQogewogCXJldHVybiByYmktPlJpbmdCdWZmZXItPkludGVycnVwdE1hc2s7CiB9CkBAIC0yOTksMTggKzMwMCwxOCBAQAogCUluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyCiAKIC0tKi8KLWludCBSaW5nQnVmZmVySW5pdChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdm9pZCAqQnVmZmVyLCB1MzIgQnVmZmVyTGVuKQoraW50IFJpbmdCdWZmZXJJbml0KHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywgdm9pZCAqQnVmZmVyLCB1MzIgQnVmZmVyTGVuKQogewotCWlmIChzaXplb2YoUklOR19CVUZGRVIpICE9IFBBR0VfU0laRSkKKwlpZiAoc2l6ZW9mKHN0cnVjdCBodl9yaW5nX2J1ZmZlcikgIT0gUEFHRV9TSVpFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChSaW5nSW5mbywgMCwgc2l6ZW9mKFJJTkdfQlVGRkVSX0lORk8pKTsKKwltZW1zZXQoUmluZ0luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbykpOwogCi0JUmluZ0luZm8tPlJpbmdCdWZmZXIgPSAoUklOR19CVUZGRVIgKilCdWZmZXI7CisJUmluZ0luZm8tPlJpbmdCdWZmZXIgPSAoc3RydWN0IGh2X3JpbmdfYnVmZmVyICopQnVmZmVyOwogCVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXggPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleCA9IDA7CiAKIAlSaW5nSW5mby0+UmluZ1NpemUgPSBCdWZmZXJMZW47Ci0JUmluZ0luZm8tPlJpbmdEYXRhU2l6ZSA9IEJ1ZmZlckxlbiAtIHNpemVvZihSSU5HX0JVRkZFUik7CisJUmluZ0luZm8tPlJpbmdEYXRhU2l6ZSA9IEJ1ZmZlckxlbiAtIHNpemVvZihzdHJ1Y3QgaHZfcmluZ19idWZmZXIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJlJpbmdJbmZvLT5yaW5nX2xvY2spOwogCkBAIC0zMjYsNyArMzI3LDcgQEAKIAlDbGVhbnVwIHRoZSByaW5nIGJ1ZmZlcgogCiAtLSovCi12b2lkIFJpbmdCdWZmZXJDbGVhbnVwKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQordm9pZCBSaW5nQnVmZmVyQ2xlYW51cChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pCiB7CiB9CiAKQEAgLTMzOSw3ICszNDAsNyBAQAogCVdyaXRlIHRvIHRoZSByaW5nIGJ1ZmZlcgogCiAtLSovCi1pbnQgUmluZ0J1ZmZlcldyaXRlKFJJTkdfQlVGRkVSX0lORk8gKk91dFJpbmdJbmZvLAoraW50IFJpbmdCdWZmZXJXcml0ZShzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqT3V0UmluZ0luZm8sCiAJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgdTMyIHNnY291bnQpCiB7CiAJaW50IGkgPSAwOwpAQCAtMzUyLDggKzM1Myw2IEBACiAJdTY0IHByZXZJbmRpY2VzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKLQogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIHNnY291bnQsIGkpCiAJewogCQl0b3RhbEJ5dGVzVG9Xcml0ZSArPSBzZy0+bGVuZ3RoOwpAQCAtMzgyLDkgKzM4MSw2IEBACiAJCQlieXRlQXZhaWxUb1dyaXRlKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZPdXRSaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7Ci0KLQkJRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQxNiw5ICs0MTIsNiBAQAogCS8qIER1bXBSaW5nSW5mbyhPdXRSaW5nSW5mbywgIkFGVEVSICIpOyAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmT3V0UmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzMiw3ICs0MjUsNyBAQAogCVJlYWQgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHJlYWQgaW5kZXgKIAogLS0qLwotaW50IFJpbmdCdWZmZXJQZWVrKFJJTkdfQlVGRkVSX0lORk8gKkluUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwgdTMyIEJ1ZmZlckxlbikKK2ludCBSaW5nQnVmZmVyUGVlayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqSW5SaW5nSW5mbywgdm9pZCAqQnVmZmVyLCB1MzIgQnVmZmVyTGVuKQogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKQEAgLTQ4MSw3ICs0NzQsNyBAQAogCVJlYWQgYW5kIGFkdmFuY2UgdGhlIHJlYWQgaW5kZXgKIAogLS0qLwotaW50IFJpbmdCdWZmZXJSZWFkKFJJTkdfQlVGRkVSX0lORk8gKkluUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwKK2ludCBSaW5nQnVmZmVyUmVhZChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqSW5SaW5nSW5mbywgdm9pZCAqQnVmZmVyLAogCQkgICB1MzIgQnVmZmVyTGVuLCB1MzIgT2Zmc2V0KQogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKQEAgLTU1Niw3ICs1NDksNyBAQAogLS0qLwogc3RhdGljIHUzMgogQ29weVRvUmluZ0J1ZmZlcigKLQlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbwkqUmluZ0luZm8sCiAJdTMyCQkJCVN0YXJ0V3JpdGVPZmZzZXQsCiAJdm9pZAkJCQkqU3JjLAogCXUzMgkJCQlTcmNMZW4pCkBAIC01OTQsNyArNTg3LDcgQEAKIC0tKi8KIHN0YXRpYyB1MzIKIENvcHlGcm9tUmluZ0J1ZmZlcigKLQlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKKwlzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbwkqUmluZ0luZm8sCiAJdm9pZAkJCQkqRGVzdCwKIAl1MzIJCQkJRGVzdExlbiwKIAl1MzIJCQkJU3RhcnRSZWFkT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3JpbmdfYnVmZmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuaAppbmRleCA2MjAyMTU3Li5hN2YxNzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcmluZ19idWZmZXIuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAotdHlwZWRlZiBzdHJ1Y3QgX1JJTkdfQlVGRkVSIHsKK3N0cnVjdCBodl9yaW5nX2J1ZmZlciB7CiAJLyogT2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHJpbmcgZGF0YSBiZWxvdyAqLwogCXZvbGF0aWxlIHUzMiBXcml0ZUluZGV4OwogCkBAIC01MSw1MSArNTEsNTIgQEAKIAkgKiAhISEgRE8gTk9UIHBsYWNlIGFueSBmaWVsZHMgYmVsb3cgdGhpcyAhISEKIAkgKi8KIAl1OCBCdWZmZXJbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJJTkdfQlVGRkVSOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1JJTkdfQlVGRkVSX0lORk8gewotCVJJTkdfQlVGRkVSICpSaW5nQnVmZmVyOworc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8geworCXN0cnVjdCBodl9yaW5nX2J1ZmZlciAqUmluZ0J1ZmZlcjsKIAl1MzIgUmluZ1NpemU7CQkJLyogSW5jbHVkZSB0aGUgc2hhcmVkIGhlYWRlciAqLwogCXNwaW5sb2NrX3QgcmluZ19sb2NrOwogCiAJdTMyIFJpbmdEYXRhU2l6ZTsJCS8qIDwgcmluZ1NpemUgKi8KIAl1MzIgUmluZ0RhdGFTdGFydE9mZnNldDsKK307CiAKLX0gUklOR19CVUZGRVJfSU5GTzsKLQotdHlwZWRlZiBzdHJ1Y3QgX1JJTkdfQlVGRkVSX0RFQlVHX0lORk8geworc3RydWN0IGh2X3JpbmdfYnVmZmVyX2RlYnVnX2luZm8gewogCXUzMiBDdXJyZW50SW50ZXJydXB0TWFzazsKIAl1MzIgQ3VycmVudFJlYWRJbmRleDsKIAl1MzIgQ3VycmVudFdyaXRlSW5kZXg7CiAJdTMyIEJ5dGVzQXZhaWxUb1JlYWQ7CiAJdTMyIEJ5dGVzQXZhaWxUb1dyaXRlOwotfSBSSU5HX0JVRkZFUl9ERUJVR19JTkZPOworfTsKIAogCiAKIC8qIEludGVyZmFjZSAqLwogCiAKLWludCBSaW5nQnVmZmVySW5pdChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdm9pZCAqQnVmZmVyLCB1MzIgQnVmZmVyTGVuKTsKK2ludCBSaW5nQnVmZmVySW5pdChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sIHZvaWQgKkJ1ZmZlciwKKwkJICAgdTMyIEJ1ZmZlckxlbik7CiAKLXZvaWQgUmluZ0J1ZmZlckNsZWFudXAoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pOwordm9pZCBSaW5nQnVmZmVyQ2xlYW51cChzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pOwogCi1pbnQgUmluZ0J1ZmZlcldyaXRlKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLAoraW50IFJpbmdCdWZmZXJXcml0ZShzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8sCiAJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJICAgIHUzMiBzZ2NvdW50KTsKIAotaW50IFJpbmdCdWZmZXJQZWVrKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLCB2b2lkICpCdWZmZXIsIHUzMiBCdWZmZXJMZW4pOworaW50IFJpbmdCdWZmZXJQZWVrKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywgdm9pZCAqQnVmZmVyLAorCQkgICB1MzIgQnVmZmVyTGVuKTsKIAotaW50IFJpbmdCdWZmZXJSZWFkKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLAoraW50IFJpbmdCdWZmZXJSZWFkKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywKIAkJICAgdm9pZCAqQnVmZmVyLAogCQkgICB1MzIgQnVmZmVyTGVuLAogCQkgICB1MzIgT2Zmc2V0KTsKIAotdTMyIEdldFJpbmdCdWZmZXJJbnRlcnJ1cHRNYXNrKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKTsKK3UzMiBHZXRSaW5nQnVmZmVySW50ZXJydXB0TWFzayhzdHJ1Y3QgaHZfcmluZ19idWZmZXJfaW5mbyAqUmluZ0luZm8pOwogCi12b2lkIER1bXBSaW5nSW5mbyhSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgY2hhciAqUHJlZml4KTsKK3ZvaWQgRHVtcFJpbmdJbmZvKHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9pbmZvICpSaW5nSW5mbywgY2hhciAqUHJlZml4KTsKIAotdm9pZCBSaW5nQnVmZmVyR2V0RGVidWdJbmZvKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLAotCQkJICAgIFJJTkdfQlVGRkVSX0RFQlVHX0lORk8gKkRlYnVnSW5mbyk7Cit2b2lkIFJpbmdCdWZmZXJHZXREZWJ1Z0luZm8oc3RydWN0IGh2X3JpbmdfYnVmZmVyX2luZm8gKlJpbmdJbmZvLAorCQkJICAgIHN0cnVjdCBodl9yaW5nX2J1ZmZlcl9kZWJ1Z19pbmZvICpkZWJ1Z19pbmZvKTsKIAogI2VuZGlmIC8qIF9SSU5HX0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3JuZGlzX2ZpbHRlci5jCmluZGV4IDVlZGYwODUuLmZhMjE0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9ybmRpc19maWx0ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvcm5kaXNfZmlsdGVyLmMKQEAgLTI0NCw4ICsyNDQsNiBAQAogCWludCByZXQ7CiAJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogU2V0dXAgdGhlIHBhY2tldCB0byBzZW5kIGl0ICovCiAJcGFja2V0ID0gJlJlcXVlc3QtPlBhY2tldDsKIApAQCAtMjY1LDcgKzI2Myw2IEBACiAJcGFja2V0LT5Db21wbGV0aW9uLlNlbmQuU2VuZENvbXBsZXRpb25UaWQgPSAodW5zaWduZWQgbG9uZylEZXZpY2U7CiAKIAlyZXQgPSBnUm5kaXNGaWx0ZXIuSW5uZXJEcml2ZXIuT25TZW5kKERldmljZS0+TmV0RGV2aWNlLT5EZXZpY2UsIHBhY2tldCk7Ci0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNzYsOCArMjczLDYgQEAKIAlib29sIGZvdW5kID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJkRldmljZS0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmRGV2aWNlLT5SZXF1ZXN0TGlzdCwgTGlzdEVudHJ5KSB7CiAJCS8qCkBAIC0zMjUsOCArMzIwLDYgQEAKIAkJCSAgIFJlc3BvbnNlLT5NZXNzYWdlLkluaXRpYWxpemVDb21wbGV0ZS5SZXF1ZXN0SWQsCiAJCQkgICBSZXNwb25zZS0+TmRpc01lc3NhZ2VUeXBlKTsKIAl9Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgdm9pZCBSbmRpc0ZpbHRlclJlY2VpdmVJbmRpY2F0ZVN0YXR1cyhzdHJ1Y3Qgcm5kaXNfZGV2aWNlICpEZXZpY2UsCkBAIC0zNTMsOCArMzQ2LDYgQEAKIAlzdHJ1Y3Qgcm5kaXNfcGFja2V0ICpybmRpc1BhY2tldDsKIAl1MzIgZGF0YU9mZnNldDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogZW1wdHkgZXRoZXJuZXQgZnJhbWUgPz8gKi8KIAkvKiBBU1NFUlQoUGFja2V0LT5QYWdlQnVmZmVyc1swXS5MZW5ndGggPiAqLwogCS8qIAlSTkRJU19NRVNTQUdFX1NJWkUoc3RydWN0IHJuZGlzX3BhY2tldCkpOyAqLwpAQCAtMzc3LDggKzM2OCw2IEBACiAKIAlnUm5kaXNGaWx0ZXIuSW5uZXJEcml2ZXIuT25SZWNlaXZlQ2FsbGJhY2soRGV2aWNlLT5OZXREZXZpY2UtPkRldmljZSwKIAkJCQkJCSAgIFBhY2tldCk7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiBzdGF0aWMgaW50IFJuZGlzRmlsdGVyT25SZWNlaXZlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwKQEAgLTM4OSw4ICszNzgsNiBAQAogCXN0cnVjdCBybmRpc19tZXNzYWdlIHJuZGlzTWVzc2FnZTsKIAlzdHJ1Y3Qgcm5kaXNfbWVzc2FnZSAqcm5kaXNIZWFkZXI7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCWlmICghbmV0RGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzk4LDcgKzM4NSw2IEBACiAJaWYgKCFuZXREZXZpY2UtPkV4dGVuc2lvbikgewogCQlEUFJJTlRfRVJSKE5FVFZTQywgImdvdCBybmRpcyBtZXNzYWdlIGJ1dCBubyBybmRpcyBkZXZpY2UuLi4iCiAJCQkgICJkcm9wcGluZyB0aGlzIG1lc3NhZ2UhIik7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQwNiw3ICszOTIsNiBAQAogCWlmIChybmRpc0RldmljZS0+U3RhdGUgPT0gUk5ESVNfREVWX1VOSU5JVElBTElaRUQpIHsKIAkJRFBSSU5UX0VSUihORVRWU0MsICJnb3Qgcm5kaXMgbWVzc2FnZSBidXQgcm5kaXMgZGV2aWNlICIKIAkJCSAgICJ1bmluaXRpYWxpemVkLi4uZHJvcHBpbmcgdGhpcyBtZXNzYWdlISIpOwotCQlEUFJJTlRfRVhJVChORVRWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC00MzEsNyArNDE2LDYgQEAKIAkJCSAgICJieXRlcyBnb3QgJXUpLi4uZHJvcHBpbmcgdGhpcyBtZXNzYWdlISIsCiAJCQkgICBybmRpc0hlYWRlci0+TWVzc2FnZUxlbmd0aCwKIAkJCSAgIFBhY2tldC0+VG90YWxEYXRhQnVmZmVyTGVuZ3RoKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJcmV0dXJuIC0xOwogCX0KICNlbmRpZgpAQCAtNDc5LDcgKzQ2Myw2IEBACiAJCWJyZWFrOwogCX0KIAotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Miw4ICs0NzUsNiBAQAogCXN0cnVjdCBybmRpc19xdWVyeV9jb21wbGV0ZSAqcXVlcnlDb21wbGV0ZTsKIAlpbnQgcmV0ID0gMDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJaWYgKCFSZXN1bHQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01MzYsNyArNTE3LDYgQEAKIENsZWFudXA6CiAJaWYgKHJlcXVlc3QpCiAJCVB1dFJuZGlzUmVxdWVzdChEZXZpY2UsIHJlcXVlc3QpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTY4LDggKzU0OCw2IEBACiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBBU1NFUlQoUk5ESVNfTUVTU0FHRV9TSVpFKHN0cnVjdCBybmRpc19zZXRfcmVxdWVzdCkgKyBzaXplb2YodTMyKSA8PSAqLwogCS8qIAlzaXplb2Yoc3RydWN0IHJuZGlzX21lc3NhZ2UpKTsgKi8KIApAQCAtNjE0LDE1ICs1OTIsMTEgQEAKIAlpZiAocmVxdWVzdCkKIAkJUHV0Um5kaXNSZXF1ZXN0KERldmljZSwgcmVxdWVzdCk7CiBFeGl0OgotCURQUklOVF9FWElUKE5FVFZTQyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBpbnQgUm5kaXNGaWx0ZXJJbml0KHN0cnVjdCBuZXR2c2NfZHJpdmVyICpEcml2ZXIpCiB7Ci0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlEUFJJTlRfREJHKE5FVFZTQywgInNpemVvZihzdHJ1Y3Qgcm5kaXNfZmlsdGVyX3BhY2tldCkgPT0gJXpkIiwKIAkJICAgc2l6ZW9mKHN0cnVjdCBybmRpc19maWx0ZXJfcGFja2V0KSk7CiAKQEAgLTY1OCw4ICs2MzIsNiBAQAogCS8qIERyaXZlci0+UXVlcnlMaW5rU3RhdHVzID0gUm5kaXNGaWx0ZXJRdWVyeURldmljZUxpbmtTdGF0dXM7ICovCiAJRHJpdmVyLT5PblJlY2VpdmVDYWxsYmFjayA9IFJuZGlzRmlsdGVyT25SZWNlaXZlOwogCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02NzEsOCArNjQzLDYgQEAKIAl1MzIgc3RhdHVzOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCXJlcXVlc3QgPSBHZXRSbmRpc1JlcXVlc3QoRGV2aWNlLCBSRU1PVEVfTkRJU19JTklUSUFMSVpFX01TRywKIAkJCVJORElTX01FU1NBR0VfU0laRShzdHJ1Y3Qgcm5kaXNfaW5pdGlhbGl6ZV9yZXF1ZXN0KSk7CiAJaWYgKCFyZXF1ZXN0KSB7CkBAIC03MTAsNyArNjgwLDYgQEAKIENsZWFudXA6CiAJaWYgKHJlcXVlc3QpCiAJCVB1dFJuZGlzUmVxdWVzdChEZXZpY2UsIHJlcXVlc3QpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzIwLDggKzY4OSw2IEBACiAJc3RydWN0IHJuZGlzX3JlcXVlc3QgKnJlcXVlc3Q7CiAJc3RydWN0IHJuZGlzX2hhbHRfcmVxdWVzdCAqaGFsdDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogQXR0ZW1wdCB0byBkbyBhIHJuZGlzIGRldmljZSBoYWx0ICovCiAJcmVxdWVzdCA9IEdldFJuZGlzUmVxdWVzdChEZXZpY2UsIFJFTU9URV9ORElTX0hBTFRfTVNHLAogCQkJCVJORElTX01FU1NBR0VfU0laRShzdHJ1Y3Qgcm5kaXNfaGFsdF9yZXF1ZXN0KSk7CkBAIC03NDAsNyArNzA3LDYgQEAKIENsZWFudXA6CiAJaWYgKHJlcXVlc3QpCiAJCVB1dFJuZGlzUmVxdWVzdChEZXZpY2UsIHJlcXVlc3QpOwotCURQUklOVF9FWElUKE5FVFZTQyk7CiAJcmV0dXJuOwogfQogCkBAIC03NDgsOCArNzE0LDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlpZiAoRGV2aWNlLT5TdGF0ZSAhPSBSTkRJU19ERVZfSU5JVElBTElaRUQpCiAJCXJldHVybiAwOwogCkBAIC03NjAsNyArNzI0LDYgQEAKIAlpZiAocmV0ID09IDApCiAJCURldmljZS0+U3RhdGUgPSBSTkRJU19ERVZfREFUQUlOSVRJQUxJWkVEOwogCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjgsOCArNzMxLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAlpZiAoRGV2aWNlLT5TdGF0ZSAhPSBSTkRJU19ERVZfREFUQUlOSVRJQUxJWkVEKQogCQlyZXR1cm4gMDsKIApAQCAtNzc3LDggKzczOCw2IEBACiAJaWYgKHJldCA9PSAwKQogCQlEZXZpY2UtPlN0YXRlID0gUk5ESVNfREVWX0lOSVRJQUxJWkVEOwogCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc5MCwxMyArNzQ5LDkgQEAKIAlzdHJ1Y3Qgcm5kaXNfZGV2aWNlICpybmRpc0RldmljZTsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICpkZXZpY2VJbmZvID0gQWRkaXRpb25hbEluZm87CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCXJuZGlzRGV2aWNlID0gR2V0Um5kaXNEZXZpY2UoKTsKLQlpZiAoIXJuZGlzRGV2aWNlKSB7Ci0JCURQUklOVF9FWElUKE5FVFZTQyk7CisJaWYgKCFybmRpc0RldmljZSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCURQUklOVF9EQkcoTkVUVlNDLCAicm5kaXMgZGV2aWNlIG9iamVjdCBhbGxvY2F0ZWQgLSAlcCIsIHJuZGlzRGV2aWNlKTsKIApAQCAtODA4LDcgKzc2Myw2IEBACiAJcmV0ID0gZ1JuZGlzRmlsdGVyLklubmVyRHJpdmVyLkJhc2UuT25EZXZpY2VBZGQoRGV2aWNlLCBBZGRpdGlvbmFsSW5mbyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWtmcmVlKHJuZGlzRGV2aWNlKTsKLQkJRFBSSU5UX0VYSVQoTkVUVlNDKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTg0OSw4ICs4MDMsNiBAQAogCURQUklOVF9JTkZPKE5FVFZTQywgIkRldmljZSAweCVwIGxpbmsgc3RhdGUgJXMiLCBybmRpc0RldmljZSwKIAkJICAgICgoZGV2aWNlSW5mby0+TGlua1N0YXRlKSA/ICgiZG93biIpIDogKCJ1cCIpKSk7CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODU5LDggKzgxMSw2IEBACiAJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldERldmljZSA9IERldmljZS0+RXh0ZW5zaW9uOwogCXN0cnVjdCBybmRpc19kZXZpY2UgKnJuZGlzRGV2aWNlID0gbmV0RGV2aWNlLT5FeHRlbnNpb247CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIEhhbHQgYW5kIHJlbGVhc2UgdGhlIHJuZGlzIGRldmljZSAqLwogCVJuZGlzRmlsdGVySGFsdERldmljZShybmRpc0RldmljZSk7CiAKQEAgLTg3MCw1MCArODIwLDMxIEBACiAJLyogUGFzcyBjb250cm9sIHRvIGlubmVyIGRyaXZlciB0byByZW1vdmUgdGhlIGRldmljZSAqLwogCWdSbmRpc0ZpbHRlci5Jbm5lckRyaXZlci5CYXNlLk9uRGV2aWNlUmVtb3ZlKERldmljZSk7CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIFJuZGlzRmlsdGVyT25DbGVhbnVwKHN0cnVjdCBodl9kcml2ZXIgKkRyaXZlcikKIHsKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQotCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKIGludCBSbmRpc0ZpbHRlck9uT3BlbihzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlID0gRGV2aWNlLT5FeHRlbnNpb247CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCWlmICghbmV0RGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IFJuZGlzRmlsdGVyT3BlbkRldmljZShuZXREZXZpY2UtPkV4dGVuc2lvbik7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gUm5kaXNGaWx0ZXJPcGVuRGV2aWNlKG5ldERldmljZS0+RXh0ZW5zaW9uKTsKIH0KIAogaW50IFJuZGlzRmlsdGVyT25DbG9zZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlID0gRGV2aWNlLT5FeHRlbnNpb247CiAKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCWlmICghbmV0RGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IFJuZGlzRmlsdGVyQ2xvc2VEZXZpY2UobmV0RGV2aWNlLT5FeHRlbnNpb24pOwotCi0JRFBSSU5UX0VYSVQoTkVUVlNDKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIFJuZGlzRmlsdGVyQ2xvc2VEZXZpY2UobmV0RGV2aWNlLT5FeHRlbnNpb24pOwogfQogCiBzdGF0aWMgaW50IFJuZGlzRmlsdGVyT25TZW5kKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwKQEAgLTkyNSw4ICs4NTYsNiBAQAogCXN0cnVjdCBybmRpc19wYWNrZXQgKnJuZGlzUGFja2V0OwogCXUzMiBybmRpc01lc3NhZ2VTaXplOwogCi0JRFBSSU5UX0VOVEVSKE5FVFZTQyk7Ci0KIAkvKiBBZGQgdGhlIHJuZGlzIGhlYWRlciAqLwogCWZpbHRlclBhY2tldCA9IChzdHJ1Y3Qgcm5kaXNfZmlsdGVyX3BhY2tldCAqKVBhY2tldC0+RXh0ZW5zaW9uOwogCS8qIEFTU0VSVChmaWx0ZXJQYWNrZXQpOyAqLwpAQCAtOTcxLDggKzkwMCw2IEBACiAJCQkJZmlsdGVyUGFja2V0LT5Db21wbGV0aW9uQ29udGV4dDsKIAl9CiAKLQlEUFJJTlRfRVhJVChORVRWU0MpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTgwLDE5ICs5MDcsMTIgQEAKIHsKIAlzdHJ1Y3Qgcm5kaXNfZmlsdGVyX3BhY2tldCAqZmlsdGVyUGFja2V0ID0gQ29udGV4dDsKIAotCURQUklOVF9FTlRFUihORVRWU0MpOwotCiAJLyogUGFzcyBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBoYW5kbGVyICovCiAJZmlsdGVyUGFja2V0LT5PbkNvbXBsZXRpb24oZmlsdGVyUGFja2V0LT5Db21wbGV0aW9uQ29udGV4dCk7Ci0KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCiAKIHN0YXRpYyB2b2lkIFJuZGlzRmlsdGVyT25TZW5kUmVxdWVzdENvbXBsZXRpb24odm9pZCAqQ29udGV4dCkKIHsKLQlEUFJJTlRfRU5URVIoTkVUVlNDKTsKLQogCS8qIE5vb3AgKi8KLQlEUFJJTlRfRVhJVChORVRWU0MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjLmMKaW5kZXggMjdhMjc2ZS4uNmJkMmZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzYy5jCkBAIC0xODYsNyArMTg2LDYgQEAKIAlpZiAoIXN0b3JEZXZpY2UpIHsKIAkJRFBSSU5UX0VSUihTVE9SVlNDLCAidW5hYmxlIHRvIGdldCBzdG9yIGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzQ0LDggKzM0Myw2IEBACiAJcmVxdWVzdC0+V2FpdEV2ZW50ID0gTlVMTDsKIG5vbWVtOgogCVB1dFN0b3JEZXZpY2UoRGV2aWNlKTsKLQotCURQUklOVF9FWElUKFNUT1JWU0MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM1NiwxMyArMzUzLDEwIEBACiAJc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3Qgc3RvcnZzY19kZXZpY2UgKnN0b3JEZXZpY2U7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQyk7Ci0KIAlzdG9yRGV2aWNlID0gTXVzdEdldFN0b3JEZXZpY2UoRGV2aWNlKTsKIAlpZiAoIXN0b3JEZXZpY2UpIHsKIAkJRFBSSU5UX0VSUihTVE9SVlNDLCAidW5hYmxlIHRvIGdldCBzdG9yIGRldmljZS4uLiIKIAkJCSAgICJkZXZpY2UgYmVpbmcgZGVzdHJveWVkPyIpOwotCQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDE0LDggKzQwOCw2IEBACiAJYXRvbWljX2RlYygmc3RvckRldmljZS0+TnVtT3V0c3RhbmRpbmdSZXF1ZXN0cyk7CiAKIAlQdXRTdG9yRGV2aWNlKERldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIH0KIAogc3RhdGljIHZvaWQgU3RvclZzY09uUmVjZWl2ZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCkBAIC00NDksMTUgKzQ0MSwxMiBAQAogCXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICpyZXF1ZXN0OwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQyk7Ci0KIAkvKiBBU1NFUlQoZGV2aWNlKTsgKi8KIAogCXN0b3JEZXZpY2UgPSBNdXN0R2V0U3RvckRldmljZShkZXZpY2UpOwogCWlmICghc3RvckRldmljZSkgewogCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKFNUT1JWU0MpOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDEsOCArNDkwLDYgQEAKIAl9IHdoaWxlICgxKTsKIAogCVB1dFN0b3JEZXZpY2UoZGV2aWNlKTsKLQotCURQUklOVF9FWElUKFNUT1JWU0MpOwogCXJldHVybjsKIH0KIApAQCAtNTQ3LDggKzUzNCw2IEBACiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlX2luZm8gKmRldmljZUluZm87CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQyk7Ci0KIAlkZXZpY2VJbmZvID0gKHN0cnVjdCBzdG9ydnNjX2RldmljZV9pbmZvICopQWRkaXRpb25hbEluZm87CiAJc3RvckRldmljZSA9IEFsbG9jU3RvckRldmljZShEZXZpY2UpOwogCWlmICghc3RvckRldmljZSkgewpAQCAtNTg0LDggKzU2OSw2IEBACiAJCSAgIHN0b3JEZXZpY2UtPlRhcmdldElkKTsKIAogQ2xlYW51cDoKLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU5Niw4ICs1NzksNiBAQAogewogCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3RvckRldmljZTsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCURQUklOVF9JTkZPKFNUT1JWU0MsICJkaXNhYmxpbmcgc3RvcmFnZSBkZXZpY2UgKCVwKS4uLiIsCiAJCSAgICBEZXZpY2UtPkV4dGVuc2lvbik7CiAKQEAgLTYyNSw4ICs2MDYsNiBAQAogCURldmljZS0+RHJpdmVyLT5WbWJ1c0NoYW5uZWxJbnRlcmZhY2UuQ2xvc2UoRGV2aWNlKTsKIAogCUZyZWVTdG9yRGV2aWNlKHN0b3JEZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzNywxNSArNjE2LDEyIEBACiAJc3RydWN0IHZzdG9yX3BhY2tldCAqdnN0b3JQYWNrZXQ7CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQogCURQUklOVF9JTkZPKFNUT1JWU0MsICJyZXNldHRpbmcgaG9zdCBhZGFwdGVyLi4uIik7CiAKIAlzdG9yRGV2aWNlID0gR2V0U3RvckRldmljZShEZXZpY2UpOwogCWlmICghc3RvckRldmljZSkgewogCQlEUFJJTlRfRVJSKFNUT1JWU0MsICJ1bmFibGUgdG8gZ2V0IHN0b3IgZGV2aWNlLi4uIgogCQkJICAgImRldmljZSBiZWluZyBkZXN0cm95ZWQ/Iik7Ci0JCURQUklOVF9FWElUKFNUT1JWU0MpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC02ODcsNyArNjYzLDYgQEAKIAogQ2xlYW51cDoKIAlQdXRTdG9yRGV2aWNlKERldmljZSk7Ci0JRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzAyLDggKzY3Nyw2IEBACiAJc3RydWN0IHZzdG9yX3BhY2tldCAqdnN0b3JQYWNrZXQ7CiAJaW50IHJldCA9IDA7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQyk7Ci0KIAlyZXF1ZXN0RXh0ZW5zaW9uID0KIAkJKHN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICopUmVxdWVzdC0+RXh0ZW5zaW9uOwogCXZzdG9yUGFja2V0ID0gJnJlcXVlc3RFeHRlbnNpb24tPlZTdG9yUGFja2V0OwpAQCAtNzIwLDcgKzY5Myw2IEBACiAJaWYgKCFzdG9yRGV2aWNlKSB7CiAJCURQUklOVF9FUlIoU1RPUlZTQywgInVuYWJsZSB0byBnZXQgc3RvciBkZXZpY2UuLi4iCiAJCQkgICAiZGV2aWNlIGJlaW5nIGRlc3Ryb3llZD8iKTsKLQkJRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJCXJldHVybiAtMjsKIAl9CiAKQEAgLTc4Niw4ICs3NTgsNiBAQAogCWF0b21pY19pbmMoJnN0b3JEZXZpY2UtPk51bU91dHN0YW5kaW5nUmVxdWVzdHMpOwogCiAJUHV0U3RvckRldmljZShEZXZpY2UpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzk2LDggKzc2Niw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIFN0b3JWc2NPbkNsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqRHJpdmVyKQogewotCURQUklOVF9FTlRFUihTVE9SVlNDKTsKLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIH0KIAogLyoKQEAgLTgwNyw4ICs3NzUsNiBAQAogewogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3JEcml2ZXI7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQyk7Ci0KIAlzdG9yRHJpdmVyID0gKHN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKilEcml2ZXI7CiAKIAlEUFJJTlRfREJHKFNUT1JWU0MsICJzaXplb2YoU1RPUlZTQ19SRVFVRVNUKT0lemQgIgpAQCAtODUyLDcgKzgxOCw1IEBACiAKIAlzdG9yRHJpdmVyLT5PbklPUmVxdWVzdAkJPSBTdG9yVnNjT25JT1JlcXVlc3Q7CiAKLQlEUFJJTlRfRVhJVChTVE9SVlNDKTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYwppbmRleCBkMjJlMzVmLi4wNzViNjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYwpAQCAtMTQxLDggKzE0MSw2IEBACiAJc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvcnZzY19kcnZfb2JqID0gJmdfc3RvcnZzY19kcnYuZHJ2X29iajsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRydl9jdHggPSAmZ19zdG9ydnNjX2Rydi5kcnZfY3R4OwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQogCXZtYnVzX2dldF9pbnRlcmZhY2UoJnN0b3J2c2NfZHJ2X29iai0+QmFzZS5WbWJ1c0NoYW5uZWxJbnRlcmZhY2UpOwogCiAJc3RvcnZzY19kcnZfb2JqLT5SaW5nQnVmZmVyU2l6ZSA9IHN0b3J2c2NfcmluZ2J1ZmZlcl9zaXplOwpAQCAtMTc1LDggKzE3Myw2IEBACiAJLyogVGhlIGRyaXZlciBiZWxvbmdzIHRvIHZtYnVzICovCiAJcmV0ID0gdm1idXNfY2hpbGRfZHJpdmVyX3JlZ2lzdGVyKGRydl9jdHgpOwogCi0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTk0LDggKzE5MCw2IEBACiAJc3RydWN0IGRldmljZSAqY3VycmVudF9kZXYgPSBOVUxMOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCiAJd2hpbGUgKDEpIHsKIAkJY3VycmVudF9kZXYgPSBOVUxMOwogCkBAIC0yMTksOSArMjEzLDYgQEAKIAkJc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uQ2xlYW51cCgmc3RvcnZzY19kcnZfb2JqLT5CYXNlKTsKIAogCXZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKGRydl9jdHgpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotCiAJcmV0dXJuOwogfQogCkBAIC0yNDMsOCArMjM0LDYgQEAKIAlzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqaG9zdF9kZXZpY2VfY3R4OwogCXN0cnVjdCBzdG9ydnNjX2RldmljZV9pbmZvIGRldmljZV9pbmZvOwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQogCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlQWRkKQogCQlyZXR1cm4gLTE7CiAKQEAgLTI3MSw4ICsyNjAsNiBAQAogCiAJaWYgKCFob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCkgewogCQlzY3NpX2hvc3RfcHV0KGhvc3QpOwotCQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yODQsOCArMjcxLDYgQEAKIAkJRFBSSU5UX0VSUihTVE9SVlNDX0RSViwgInVuYWJsZSB0byBhZGQgc2NzaSB2c2MgZGV2aWNlIik7CiAJCWttZW1fY2FjaGVfZGVzdHJveShob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCk7CiAJCXNjc2lfaG9zdF9wdXQoaG9zdCk7Ci0JCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDksMTUgKzI5NCwxMCBAQAogCiAJCWttZW1fY2FjaGVfZGVzdHJveShob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCk7CiAJCXNjc2lfaG9zdF9wdXQoaG9zdCk7Ci0JCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLQogCQlyZXR1cm4gLTE7CiAJfQogCiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDAsMTIgKzMyMCw4IEBACiAJCQkoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilob3N0LT5ob3N0ZGF0YTsKIAogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQotCWlmICghc3RvcnZzY19kcnZfb2JqLT5CYXNlLk9uRGV2aWNlUmVtb3ZlKSB7Ci0JCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKKwlpZiAoIXN0b3J2c2NfZHJ2X29iai0+QmFzZS5PbkRldmljZVJlbW92ZSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCS8qCiAJICogQ2FsbCB0byB0aGUgdnNjIGRyaXZlciB0byBsZXQgaXQga25vdyB0aGF0IHRoZSBkZXZpY2UgaXMgYmVpbmcKQEAgLTM2OCw5ICszNDQsNiBAQAogCiAJRFBSSU5UX0lORk8oU1RPUlZTQywgInJlbGVhc2luZyBob3N0IGFkYXB0ZXIgKCVwKS4uLiIsIGhvc3QpOwogCXNjc2lfaG9zdF9wdXQoaG9zdCk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTMsOCArMzY2LDYgQEAKIAkvKiAgICAgICAgKHVuc2lnbmVkIGxvbmcpY21kX3JlcXVlc3QpOyAqLwogCS8qIEFTU0VSVChzY21uZC0+c2NzaV9kb25lKTsgKi8KIAotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7Ci0KIAlpZiAoY21kX3JlcXVlc3QtPmJvdW5jZV9zZ2xfY291bnQpIHsKIAkJLyogdXNpbmcgYm91bmNlIGJ1ZmZlciAqLwogCQkvKiBwcmludGsoImNvcHlfZnJvbV9ib3VuY2VfYnVmZmVyXG4iKTsgKi8KQEAgLTQyNyw4ICszOTgsNiBAQAogCXNjc2lfZG9uZV9mbihzY21uZCk7CiAKIAlrbWVtX2NhY2hlX2ZyZWUoaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wsIGNtZF9yZXF1ZXN0KTsKLQotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKIH0KIAogc3RhdGljIGludCBkb19ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2dfY291bnQpCkBAIC02NDcsOCArNjE2LDYgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbDsKIAotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7Ci0KIAlEUFJJTlRfREJHKFNUT1JWU0NfRFJWLCAic2NtbmQgJXAgZGlyICVkLCB1c2Vfc2cgJWQgYnVmICVwIGxlbiAlZCAiCiAJCSAgICJxdWV1ZSBkZXB0aCAlZCB0YWdnZWQgJWQiLCBzY21uZCwgc2NtbmQtPnNjX2RhdGFfZGlyZWN0aW9uLAogCQkgICBzY3NpX3NnX2NvdW50KHNjbW5kKSwgc2NzaV9zZ2xpc3Qoc2NtbmQpLApAQCAtODEyLDggKzc3OSw2IEBACiAJCXJldCA9IFNDU0lfTUxRVUVVRV9ERVZJQ0VfQlVTWTsKIAl9CiAKLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC04NzMsMjMgKzgzOCwxNyBAQAogCQkoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilzY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4OwogCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQogCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIGRldiBvYmogKCVwKSAtIGhvc3QgcmVzZXR0aW5nLi4uIiwKIAkJICAgIHNjbW5kLT5kZXZpY2UsICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqKTsKIAogCS8qIEludm9rZXMgdGhlIHZzYyB0byByZXNldCB0aGUgaG9zdC9idXMgKi8KIAlyZXQgPSBTdG9yVnNjT25Ib3N0UmVzZXQoJmRldmljZV9jdHgtPmRldmljZV9vYmopOwotCWlmIChyZXQgIT0gMCkgewotCQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7CisJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwotCX0KIAogCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAic2RldiAoJXApIGRldiBvYmogKCVwKSAtIGhvc3QgcmVzZXRlZCIsCiAJCSAgICBzY21uZC0+ZGV2aWNlLCAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iaik7CiAKLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NzcsMTggKzkzNiwxNCBAQAogewogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwogCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAiU3RvcnZzYyBpbml0aWFsaXppbmcuLi4uIik7CiAJcmV0ID0gc3RvcnZzY19kcnZfaW5pdChTdG9yVnNjSW5pdGlhbGl6ZSk7Ci0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzdG9ydnNjX2V4aXQodm9pZCkKIHsKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwogCXN0b3J2c2NfZHJ2X2V4aXQoKTsKLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5jCmluZGV4IDAwNzU0M2IuLmNhMWUxOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5jCkBAIC01Nyw5ICs1Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIFZtYnVzR2V0Q2hhbm5lbE9mZmVycyh2b2lkKQogewotCURQUklOVF9FTlRFUihWTUJVUyk7CiAJVm1idXNDaGFubmVsUmVxdWVzdE9mZmVycygpOwotCURQUklOVF9FWElUKFZNQlVTKTsKIH0KIAogLyoKQEAgLTEyMCw4ICsxMTgsNiBAQAogCXUzMiAqaXJxdmVjdG9yID0gQWRkaXRpb25hbEluZm87CiAJaW50IHJldDsKIAotCURQUklOVF9FTlRFUihWTUJVUyk7Ci0KIAlnRGV2aWNlID0gZGV2OwogCiAJbWVtY3B5KCZnRGV2aWNlLT5kZXZpY2VUeXBlLCAmZ1ZtYnVzRGV2aWNlVHlwZSwgc2l6ZW9mKHN0cnVjdCBodl9ndWlkKSk7CkBAIC0xMzYsOCArMTMyLDYgQEAKIAlyZXQgPSBWbWJ1c0Nvbm5lY3QoKTsKIAogCS8qIFZtYnVzU2VuZEV2ZW50KGRldmljZS0+bG9jYWxQb3J0SWQrMSk7ICovCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ4LDEyICsxNDIsOSBAQAogewogCWludCByZXQgPSAwOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKIAlWbWJ1c0NoYW5uZWxSZWxlYXNlVW5hdHRhY2hlZENoYW5uZWxzKCk7CiAJVm1idXNEaXNjb25uZWN0KCk7CiAJb25fZWFjaF9jcHUoSHZTeW5pY0NsZWFudXAsIE5VTEwsIDEpOwotCURQUklOVF9FWElUKFZNQlVTKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE2NCw5ICsxNTUsNyBAQAogewogCS8qIHN0cnVjdCB2bWJ1c19kcml2ZXIgKmRyaXZlciA9IChzdHJ1Y3Qgdm1idXNfZHJpdmVyICopZHJ2OyAqLwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTKTsKIAlIdkNsZWFudXAoKTsKLQlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CiAKIC8qCkBAIC0yMzksOCArMjI4LDYgQEAKIAlwYWdlX2FkZHIgPSBnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XTsKIAltc2cgPSAoc3RydWN0IGh2X21lc3NhZ2UgKilwYWdlX2FkZHIgKyBWTUJVU19NRVNTQUdFX1NJTlQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFjdHVhbCBtc2dzIHRvIGJlIHByb2Nlc3MgKi8KIAlpZiAobXNnLT5IZWFkZXIuTWVzc2FnZVR5cGUgIT0gSHZNZXNzYWdlVHlwZU5vbmUpIHsKIAkJRFBSSU5UX0RCRyhWTUJVUywgInJlY2VpdmVkIG1zZyB0eXBlICVkIHNpemUgJWQiLApAQCAtMjU5LDcgKzI0Niw2IEBACiAJCXJldCB8PSAweDI7CiAJfQogCi0JRFBSSU5UX0VYSVQoVk1CVVMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MSw4ICsyNTcsNiBAQAogCXN0cnVjdCB2bWJ1c19kcml2ZXIgKmRyaXZlciA9IChzdHJ1Y3Qgdm1idXNfZHJpdmVyICopZHJ2OwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVMpOwotCiAJRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIEhWIERyaXZlciB2ZXJzaW9uID0gJXMgKysrKysrKyIsCiAJCSAgICBIVl9EUlZfVkVSU0lPTik7CiAJRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIFZtYnVzIHN1cHBvcnRlZCB2ZXJzaW9uID0gJWQgKysrKysrKyIsCkBAIC0zMDUsNyArMjg5LDUgQEAKIAkJCQlyZXQpOwogCWdEcml2ZXIgPSBkcnY7CiAKLQlEUFJJTlRfRVhJVChWTUJVUyk7Ci0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCmluZGV4IDIyYzgwZWMuLjA5MmYwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKQEAgLTI1NCw4ICsyNTQsNiBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IHZlY3RvcjsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyoKIAkgKiBTZXQgdGhpcyB1cCB0byBhbGxvdyBsb3dlciBsYXllciB0byBjYWxsYmFjayB0byBhZGQvcmVtb3ZlIGNoaWxkCiAJICogZGV2aWNlcyBvbiB0aGUgYnVzCkBAIC0zNjAsOCArMzU4LDYgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZodl9jaGFubmVsX3JlYWR5KTsKIAogY2xlYW51cDoKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc3LDggKzM3Myw2IEBACiAKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZfY3R4ID0gJmdfdm1idXNfZHJ2LmRldmljZV9jdHg7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIFJlbW92ZSB0aGUgcm9vdCBkZXZpY2UgKi8KIAlpZiAodm1idXNfZHJ2X29iai0+QmFzZS5PbkRldmljZVJlbW92ZSkKIAkJdm1idXNfZHJ2X29iai0+QmFzZS5PbkRldmljZVJlbW92ZSgmZGV2X2N0eC0+ZGV2aWNlX29iaik7CkBAIC0zOTUsMTAgKzM4OSw2IEBACiAKIAl0YXNrbGV0X2tpbGwoJnZtYnVzX2Rydl9jdHgtPm1zZ19kcGMpOwogCXRhc2tsZXRfa2lsbCgmdm1idXNfZHJ2X2N0eC0+ZXZlbnRfZHBjKTsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KLQlyZXR1cm47CiB9CiAKIApAQCAtNDE5LDggKzQwOSw2IEBACiAJc3RydWN0IHZtYnVzX2RyaXZlciAqdm1idXNfZHJ2X29iaiA9ICZnX3ZtYnVzX2Rydi5kcnZfb2JqOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRyaXZlciAoJXApIHJlZ2lzdGVyaW5nIC0gbmFtZSAlcyIsCiAJCSAgICBkcml2ZXJfY3R4LCBkcml2ZXJfY3R4LT5kcml2ZXIubmFtZSk7CiAKQEAgLTQzMSw4ICs0MTksNiBAQAogCiAJdm1idXNfZHJ2X29iai0+R2V0Q2hhbm5lbE9mZmVycygpOwogCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYnVzX2NoaWxkX2RyaXZlcl9yZWdpc3Rlcik7CkBAIC00NTAsMTYgKzQzNiwxMiBAQAogICovCiB2b2lkIHZtYnVzX2NoaWxkX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCkKIHsKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImNoaWxkIGRyaXZlciAoJXApIHVucmVnaXN0ZXJpbmcgLSBuYW1lICVzIiwKIAkJICAgIGRyaXZlcl9jdHgsIGRyaXZlcl9jdHgtPmRyaXZlci5uYW1lKTsKIAogCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfY3R4LT5kcml2ZXIpOwogCiAJZHJpdmVyX2N0eC0+ZHJpdmVyLmJ1cyA9IE5VTEw7Ci0KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogfQogRVhQT1JUX1NZTUJPTCh2bWJ1c19jaGlsZF9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKQEAgLTUwNiwxNSArNDg4LDExIEBACiAJc3RydWN0IHZtX2RldmljZSAqY2hpbGRfZGV2aWNlX2N0eDsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpjaGlsZF9kZXZpY2Vfb2JqOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiBBbGxvY2F0ZSB0aGUgbmV3IGNoaWxkIGRldmljZSAqLwogCWNoaWxkX2RldmljZV9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlsZF9kZXZpY2VfY3R4KSB7CiAJCURQUklOVF9FUlIoVk1CVVNfRFJWLAogCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2VfY29udGV4dCBmb3IgY2hpbGQgZGV2aWNlIik7Ci0JCURQUklOVF9FWElUKFZNQlVTX0RSVik7Ci0KIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC01NDYsOCArNTI0LDYgQEAKIAltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmNsYXNzX2lkLCB0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQogCXJldHVybiBjaGlsZF9kZXZpY2Vfb2JqOwogfQogCkBAIC01NjQsOCArNTQwLDYgQEAKIAkJCQl0b192bV9kZXZpY2UoY2hpbGRfZGV2aWNlX29iaik7CiAJc3RhdGljIGF0b21pY190IGRldmljZV9udW0gPSBBVE9NSUNfSU5JVCgwKTsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJRFBSSU5UX0RCRyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmluZyIsCiAJCSAgIGNoaWxkX2RldmljZV9jdHgpOwogCkBAIC01OTQsOCArNTY4LDYgQEAKIAkJRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAiY2hpbGQgZGV2aWNlICglcCkgcmVnaXN0ZXJlZCIsCiAJCQkgICAgJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSk7CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjA3LDggKzU3OSw2IEBACiB7CiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IHRvX3ZtX2RldmljZShkZXZpY2Vfb2JqKTsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJRFBSSU5UX0lORk8oVk1CVVNfRFJWLCAidW5yZWdpc3RlcmluZyBjaGlsZCBkZXZpY2UgKCVwKSIsCiAJCSAgICAmZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIApAQCAtNjIwLDggKzU5MCw2IEBACiAKIAlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSB1bnJlZ2lzdGVyZWQiLAogCQkgICAgJmRldmljZV9jdHgtPmRldmljZSk7Ci0KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogfQogCiAvKgpAQCAtNjI5LDkgKzU5Nyw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX2NoaWxkX2RldmljZV9kZXN0cm95KHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmopCiB7Ci0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogfQogCiAvKgpAQCAtNjQ2LDggKzYxMSw2IEBACiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAlpbnQgcmV0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJnZW5lcmF0aW5nIHVldmVudCAtIFZNQlVTX0RFVklDRV9DTEFTU19HVUlEPXsiCiAJCSAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCSAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnh9IiwKQEAgLTcwOCw4ICs2NzEsNiBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcyMiw4ICs2ODMsNiBAQAogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCA9IGRyaXZlcl90b19kcml2ZXJfY29udGV4dChkcml2ZXIpOwogCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIFdlIGZvdW5kIG91ciBkcml2ZXIgPyAqLwogCWlmIChtZW1jbXAoJmRldmljZV9jdHgtPmNsYXNzX2lkLCAmZHJpdmVyX2N0eC0+Y2xhc3NfaWQsCiAJCSAgIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpID09IDApIHsKQEAgLTc0Miw5ICs3MDEsNiBAQAogCiAJCW1hdGNoID0gMTsKIAl9Ci0KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIG1hdGNoOwogfQogCkBAIC03NTksOCArNzE1LDYgQEAKIHsKIAlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gKHN0cnVjdCB2bV9kZXZpY2UgKiljb250ZXh0OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKgogCSAqIEtpY2sgb2ZmIHRoZSBwcm9jZXNzIG9mIHVucmVnaXN0ZXJpbmcgdGhlIGRldmljZS4KIAkgKiBUaGlzIHdpbGwgY2FsbCB2bWJ1c19yZW1vdmUoKSBhbmQgZXZlbnR1YWxseSB2bWJ1c19kZXZpY2VfcmVsZWFzZSgpCkBAIC03NjgsNyArNzIyLDYgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAogCS8qIHB1dF9kZXZpY2UoJmRldmljZV9jdHgtPmRldmljZSk7ICovCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIH0KIAogLyoKQEAgLTc4Miw4ICs3MzUsNiBAQAogCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPQogCQkJZGV2aWNlX3RvX3ZtX2RldmljZShjaGlsZF9kZXZpY2UpOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiBMZXQgdGhlIHNwZWNpZmljIG9wZW4tc291cmNlIGRyaXZlciBoYW5kbGVzIHRoZSBwcm9iZSBpZiBpdCBjYW4gKi8KIAlpZiAoZHJpdmVyX2N0eC0+cHJvYmUpIHsKIAkJcmV0ID0gZGV2aWNlX2N0eC0+cHJvYmVfZXJyb3IgPSBkcml2ZXJfY3R4LT5wcm9iZShjaGlsZF9kZXZpY2UpOwpAQCAtODAyLDggKzc1Myw2IEBACiAJCQkgICBjaGlsZF9kZXZpY2UtPmRyaXZlci0+bmFtZSk7CiAJCXJldCA9IC0xOwogCX0KLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODE1LDE1ICs3NjQsMTIgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eDsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogU3BlY2lhbCBjYXNlIHJvb3QgYnVzIGRldmljZSAqLwogCWlmIChjaGlsZF9kZXZpY2UtPnBhcmVudCA9PSBOVUxMKSB7CiAJCS8qCiAJCSAqIE5vLW9wIHNpbmNlIGl0IGlzIHN0YXRpY2FsbHkgZGVmaW5lZCBhbmQgaGFuZGxlIGluCiAJCSAqIHZtYnVzX2J1c19leGl0KCkKIAkJICovCi0JCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODQ0LDggKzc5MCw2IEBACiAJCX0KIAl9CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1NiwyMyArODAwLDE4IEBACiB7CiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4OwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiBTcGVjaWFsIGNhc2Ugcm9vdCBidXMgZGV2aWNlICovCiAJaWYgKGNoaWxkX2RldmljZS0+cGFyZW50ID09IE5VTEwpIHsKIAkJLyoKIAkJICogTm8tb3Agc2luY2UgaXQgaXMgc3RhdGljYWxseSBkZWZpbmVkIGFuZCBoYW5kbGUgaW4KIAkJICogdm1idXNfYnVzX2V4aXQoKQogCQkgKi8KLQkJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFRoZSBkZXZpY2UgbWF5IG5vdCBiZSBhdHRhY2hlZCB5ZXQgKi8KLQlpZiAoIWNoaWxkX2RldmljZS0+ZHJpdmVyKSB7Ci0JCURQUklOVF9FWElUKFZNQlVTX0RSVik7CisJaWYgKCFjaGlsZF9kZXZpY2UtPmRyaXZlcikKIAkJcmV0dXJuOwotCX0KIAogCWRyaXZlcl9jdHggPSBkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQoY2hpbGRfZGV2aWNlLT5kcml2ZXIpOwogCkBAIC04ODAsOCArODE5LDYgQEAKIAlpZiAoZHJpdmVyX2N0eC0+c2h1dGRvd24pCiAJCWRyaXZlcl9jdHgtPnNodXRkb3duKGNoaWxkX2RldmljZSk7CiAKLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCiAJcmV0dXJuOwogfQogCkBAIC04OTAsMTMgKzgyNywxMSBAQAogICovCiBzdGF0aWMgdm9pZCB2bWJ1c19idXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAJLyogRklYTUUgKi8KIAkvKiBFbXB0eSByZWxlYXNlIGZ1bmN0aW9ucyBhcmUgYSBidWcsIG9yIGEgbWFqb3Igc2lnbgogCSAqIG9mIGEgcHJvYmxlbSBkZXNpZ24sIHRoaXMgTVVTVCBCRSBGSVhFRCEgKi8KIAlkZXZfZXJyKGRldmljZSwgIiVzIG5lZWRzIHRvIGJlIGZpeGVkIVxuIiwgX19mdW5jX18pOwogCVdBUk5fT04oMSk7Ci0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIH0KIAogLyoKQEAgLTkwNiwxNSArODQxLDEwIEBACiB7CiAJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJLyogdm1idXNfY2hpbGRfZGV2aWNlX2Rlc3Ryb3koJmRldmljZV9jdHgtPmRldmljZV9vYmopOyAqLwogCWtmcmVlKGRldmljZV9jdHgpOwogCiAJLyogISFETyBOT1QgUkVGRVJFTkNFIGRldmljZV9jdHggYW55bW9yZSBhdCB0aGlzIHBvaW50ISEgKi8KLQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwotCi0JcmV0dXJuOwogfQogCiAvKgpAQCAtOTI0LDE0ICs4NTQsMTAgQEAKIHsKIAlzdHJ1Y3Qgdm1idXNfZHJpdmVyICp2bWJ1c19kcnZfb2JqID0gKHN0cnVjdCB2bWJ1c19kcml2ZXIgKilkYXRhOwogCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAkvKiBBU1NFUlQodm1idXNfZHJ2X29iai0+T25Nc2dEcGMgIT0gTlVMTCk7ICovCiAKIAkvKiBDYWxsIHRvIGJ1cyBkcml2ZXIgdG8gaGFuZGxlIGludGVycnVwdCAqLwogCXZtYnVzX2Rydl9vYmotPk9uTXNnRHBjKCZ2bWJ1c19kcnZfb2JqLT5CYXNlKTsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiB9CiAKIC8qCkBAIC05NDEsMTQgKzg2NywxMCBAQAogewogCXN0cnVjdCB2bWJ1c19kcml2ZXIgKnZtYnVzX2Rydl9vYmogPSAoc3RydWN0IHZtYnVzX2RyaXZlciAqKWRhdGE7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIEFTU0VSVCh2bWJ1c19kcnZfb2JqLT5PbkV2ZW50RHBjICE9IE5VTEwpOyAqLwogCiAJLyogQ2FsbCB0byBidXMgZHJpdmVyIHRvIGhhbmRsZSBpbnRlcnJ1cHQgKi8KIAl2bWJ1c19kcnZfb2JqLT5PbkV2ZW50RHBjKCZ2bWJ1c19kcnZfb2JqLT5CYXNlKTsKLQotCURQUklOVF9FWElUKFZNQlVTX0RSVik7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB2bWJ1c19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtOTU2LDggKzg3OCw2IEBACiAJc3RydWN0IHZtYnVzX2RyaXZlciAqdm1idXNfZHJpdmVyX29iaiA9ICZnX3ZtYnVzX2Rydi5kcnZfb2JqOwogCWludCByZXQ7CiAKLQlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKLQogCS8qIEFTU0VSVCh2bWJ1c19kcml2ZXJfb2JqLT5PbklzciAhPSBOVUxMKTsgKi8KIAogCS8qIENhbGwgdG8gYnVzIGRyaXZlciB0byBoYW5kbGUgaW50ZXJydXB0ICovCkBAIC05NzEsMTAgKzg5MSw4IEBACiAJCWlmICh0ZXN0X2JpdCgxLCAodW5zaWduZWQgbG9uZyAqKSZyZXQpKQogCQkJdGFza2xldF9zY2hlZHVsZSgmZ192bWJ1c19kcnYuZXZlbnRfZHBjKTsKIAotCQlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfSBlbHNlIHsKLQkJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIH0KQEAgLTk5NCwxMCArOTEyLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgdm1idXNfaW5pdCh2b2lkKQogewotCWludCByZXQgPSAwOwotCi0JRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7Ci0KIAlEUFJJTlRfSU5GTyhWTUJVU19EUlYsCiAJCSJWbWJ1cyBpbml0aWFsaXppbmcuLi4uIGN1cnJlbnQgbG9nIGxldmVsIDB4JXggKCV4LCV4KSIsCiAJCXZtYnVzX2xvZ2xldmVsLCBISVdPUkQodm1idXNfbG9nbGV2ZWwpLCBMT1dPUkQodm1idXNfbG9nbGV2ZWwpKTsKQEAgLTEwMDYsMjAgKzkyMCwxMyBAQAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShtaWNyb3NvZnRfaHZfZG1pX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSB2bWJ1c19idXNfaW5pdChWbWJ1c0luaXRpYWxpemUpOwotCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiB2bWJ1c19idXNfaW5pdChWbWJ1c0luaXRpYWxpemUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdm1idXNfZXhpdCh2b2lkKQogewotCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwotCiAJdm1idXNfYnVzX2V4aXQoKTsKIAkvKiBUb2RvOiBpdCBpcyB1c2VkIGZvciBsb2dsZXZlbCwgdG8gYmUgcG9ydGVkIHRvIG5ldyBrZXJuZWwuICovCi0JRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKLQlyZXR1cm47CiB9CiAKIC8qCkBAIC0xMDI4LDcgKzkzNSw3IEBACiAgKiBpbnN0YWxsZWQgYW5kL29yIGNvbmZpZ3VyZWQuICBXZSBkb24ndCBkbyBhbnl0aGluZyBlbHNlIHdpdGggdGhlIHRhYmxlLCBidXQKICAqIGl0IG5lZWRzIHRvIGJlIHByZXNlbnQuCiAgKi8KLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtaWNyb3NvZnRfaHZfcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWljcm9zb2Z0X2h2X3BjaV90YWJsZVtdID0gewogCXsgUENJX0RFVklDRSgweDE0MTQsIDB4NTM1MykgfSwJLyogVkdBIGNvbXBhdGlibGUgY29udHJvbGxlciAqLwogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL292ZXJ2aWV3LnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vRG9jdW1lbnRhdGlvbi9vdmVydmlldy50eHQKaW5kZXggZTM5ZGZjMS4uY2M2ZWNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9Eb2N1bWVudGF0aW9uL292ZXJ2aWV3LnR4dAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0RvY3VtZW50YXRpb24vb3ZlcnZpZXcudHh0CkBAIC00NCw3ICs0NCw3IEBACiBhcHBsaWNhdGlvbnMgaXQgaXQgdXNlZnVsIHRvIGJlIGFibGUgdG8gY2FwdHVyZSBkYXRhIGJhc2VkIG9uIHNvbWUKIGV4dGVybmFsIHNpZ25hbCAodHJpZ2dlcikuICBUaGVzZSB0cmlnZ2VycyBtaWdodCBiZSBhIGRhdGEgcmVhZHkKIHNpZ25hbCwgYSBncGlvIGxpbmUgY29ubmVjdGVkIHRvIHNvbWUgZXh0ZXJuYWwgc3lzdGVtIG9yIGFuIG9uCi1wcm9jZXNzb3IgcGVyaW9kaWMgaW50ZXJydXB0LiAgQSBzaW5nbGUgdHJpZ2dlciBtYW55IGluaXRpYWxpemUgZGF0YQorcHJvY2Vzc29yIHBlcmlvZGljIGludGVycnVwdC4gIEEgc2luZ2xlIHRyaWdnZXIgbWF5IGluaXRpYWxpemUgZGF0YQogY2FwdHVyZSBvciByZWFkaW5nIGZyb20gYSBudW1iZXIgb2Ygc2Vuc29ycy4gIFRoZXNlIHRyaWdnZXJzIGFyZQogdXNlZCBpbiBpaW8gdG8gZmlsbCBzb2Z0d2FyZSByaW5nIGJ1ZmZlcnMgYWN0aW5nIGluIGEgdmVyeSBzaW1pbGFyCiBmYXNoaW9uIHRvIHRoZSBoYXJkd2FyZSBidWZmZXJzIGRlc2NyaWJlZCBhYm92ZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwppbmRleCBiMGU2MjQ0Li5lZDQ4ODE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCkBAIC0yMSw2ICsyMSw3IEBACiBpZiBJSU9fUklOR19CVUZGRVIKIAogY29uZmlnIElJT19TV19SSU5HCisgICAgICAgc2VsZWN0IElJT19UUklHR0VSCiAJdHJpc3RhdGUgIkluZHVzdHJpYWwgSS9PIGxvY2sgZnJlZSBzb2Z0d2FyZSByaW5nIgogCWhlbHAKIAkgIEV4YW1wbGUgc29mdHdhcmUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24uICBUaGUgZGVzaWduIGFpbQpAQCAtNDQsNiArNDUsNyBAQAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2lpby9NYWtlZmlsZQppbmRleCAzNTAyYjM5Li5lOTA5Njc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vTWFrZWZpbGUKQEAgLTE0LDUgKzE0LDUgQEAKIG9iai15ICs9IGd5cm8vCiBvYmoteSArPSBpbXUvCiBvYmoteSArPSBsaWdodC8KLQotb2JqLXkgKz0gdHJpZ2dlci8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvYmoteSArPSB0cmlnZ2VyLworb2JqLXkgKz0gbWFnbmV0b21ldGVyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2lpby9UT0RPCmluZGV4IDE1ZGEwYzIuLjg5OGNiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL1RPRE8KQEAgLTY2LDQgKzY2LDQgQEAKIDIpIFNvbWUgZGV2aWNlIHJlcXVpcmUgaW5kdmlkdWFsIGRvY3MuCiAKIENvbnRhY3Q6IEpvbmF0aGFuIENhbWVyb24gPGppYzIzQGNhbS5hYy51az4uCi1NYWlsaW5nIGxpc3Q6IExLTUwuCitNYWlsaW5nIGxpc3Q6IGxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvS2NvbmZpZwppbmRleCBiNGU1N2QxLi41OTI2YzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9LY29uZmlnCkBAIC00LDI5ICs0LDI5IEBACiBjb21tZW50ICJBY2NlbGVyb21ldGVycyIKIAogY29uZmlnIEFESVMxNjIwOQotICAgICAgIHRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYyMDkgRHVhbC1BeGlzIERpZ2l0YWwgSW5jbGlub21ldGVyIGFuZCBBY2NlbGVyb21ldGVyIgotICAgICAgIGRlcGVuZHMgb24gU1BJCi0gICAgICAgc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgotICAgICAgIHNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKLSAgICAgICBoZWxwCi0gICAgICAgICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2MjA5IGR1YWwtYXhpcyBkaWdpdGFsIGluY2xpbm9tZXRlcgotCSBhbmQgYWNjZWxlcm9tZXRlci4KKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2MjA5IER1YWwtQXhpcyBEaWdpdGFsIEluY2xpbm9tZXRlciBhbmQgQWNjZWxlcm9tZXRlciIKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBJSU9fVFJJR0dFUiBpZiBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgSUlPX1NXX1JJTkcgaWYgSUlPX1JJTkdfQlVGRkVSCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjIwOSBkdWFsLWF4aXMgZGlnaXRhbCBpbmNsaW5vbWV0ZXIKKwkgIGFuZCBhY2NlbGVyb21ldGVyLgogCiBjb25maWcgQURJUzE2MjIwCi0gICAgICAgdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjIyMCBQcm9ncmFtbWFibGUgRGlnaXRhbCBWaWJyYXRpb24gU2Vuc29yIGRyaXZlciIKLSAgICAgICBkZXBlbmRzIG9uIFNQSQotICAgICAgIGhlbHAKLSAgICAgICAgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYyMjAgcHJvZ3JhbW1hYmxlCi0gICAgICAgICBkaWdpdGFsIHZpYnJhdGlvbiBzZW5zb3IuCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjIyMCBQcm9ncmFtbWFibGUgRGlnaXRhbCBWaWJyYXRpb24gU2Vuc29yIgorCWRlcGVuZHMgb24gU1BJCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjIyMCBwcm9ncmFtbWFibGUKKwkgIGRpZ2l0YWwgdmlicmF0aW9uIHNlbnNvci4KIAogY29uZmlnIEFESVMxNjI0MAotICAgICAgIHRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRElTMTYyNDAgUHJvZ3JhbW1hYmxlIEltcGFjdCBTZW5zb3IgYW5kIFJlY29yZGVyIgotICAgICAgIGRlcGVuZHMgb24gU1BJCi0gICAgICAgc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgotICAgICAgIHNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKLSAgICAgICBoZWxwCi0gICAgICAgICBTYXkgeWVzIGhlcmUgdG8gYnVpbGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgYWRpczE2MjQwIHByb2dyYW1tYWJsZQotCSBpbXBhY3QgU2Vuc29yIGFuZCByZWNvcmRlci4KKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2MjQwIFByb2dyYW1tYWJsZSBJbXBhY3QgU2Vuc29yIGFuZCBSZWNvcmRlciIKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBJSU9fVFJJR0dFUiBpZiBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgSUlPX1NXX1JJTkcgaWYgSUlPX1JJTkdfQlVGRkVSCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjI0MCBwcm9ncmFtbWFibGUKKwkgIGltcGFjdCBTZW5zb3IgYW5kIHJlY29yZGVyLgogCiBjb25maWcgS1hTRDkKIAl0cmlzdGF0ZSAiS2lvbml4IEtYU0Q5IEFjY2VsZXJvbWV0ZXIgRHJpdmVyIgpAQCAtNDYsOSArNDYsOSBAQAogCSAgYW5kIGFuIGV2ZW50IGludGVyZmFjZSB2aWEgYSBjaGFyYWN0ZXIgZGV2aWNlLgogCiBjb25maWcgU0NBMzAwMAotICAgICAgIGRlcGVuZHMgb24gSUlPX1JJTkdfQlVGRkVSCi0gICAgICAgZGVwZW5kcyBvbiBTUEkKLSAgICAgICB0cmlzdGF0ZSAiVlRJIFNDQTMwMDAgc2VyaWVzIGFjY2VsZXJvbWV0ZXJzIgotICAgICAgIGhlbHAKLSAgICAgICAgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgVlRJIFNDQTMwMDAgc2VyaWVzIG9mIFNQSQotCSBhY2NlbGVyb21ldGVycy4gVGhlc2UgZGV2aWNlcyB1c2UgYSBoYXJkd2FyZSByaW5nIGJ1ZmZlci4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJZGVwZW5kcyBvbiBJSU9fUklOR19CVUZGRVIKKwlkZXBlbmRzIG9uIFNQSQorCXRyaXN0YXRlICJWVEkgU0NBMzAwMCBzZXJpZXMgYWNjZWxlcm9tZXRlcnMiCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBWVEkgU0NBMzAwMCBzZXJpZXMgb2YgU1BJCisJICBhY2NlbGVyb21ldGVycy4gVGhlc2UgZGV2aWNlcyB1c2UgYSBoYXJkd2FyZSByaW5nIGJ1ZmZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL01ha2VmaWxlCmluZGV4IGMzNGIxMzYuLmZmODQ3MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIGluZHVzdHJpYWwgSS9PIGFjY2VsZXJvbWV0ZXIgZHJpdmVycwogIworCiBhZGlzMTYyMDkteSAgICAgICAgICAgICA6PSBhZGlzMTYyMDlfY29yZS5vCiBhZGlzMTYyMDktJChDT05GSUdfSUlPX1JJTkdfQlVGRkVSKSArPSBhZGlzMTYyMDlfcmluZy5vIGFkaXMxNjIwOV90cmlnZ2VyLm8KIG9iai0kKENPTkZJR19BRElTMTYyMDkpICs9IGFkaXMxNjIwOS5vCkBAIC0xOSw0ICsyMCw0IEBACiBvYmotJChDT05GSUdfTElTM0wwMkRRKQkrPSBsaXMzbDAyZHEubwogCiBzY2EzMDAwLXkJCTo9IHNjYTMwMDBfY29yZS5vIHNjYTMwMDBfcmluZy5vCi1vYmotJChDT05GSUdfU0NBMzAwMCkJKz0gc2NhMzAwMC5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX1NDQTMwMDApCSs9IHNjYTMwMDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5LmgKaW5kZXggODc3ZmQyYS4uNGU5NzU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOS5oCkBAIC0xMDUsOCArMTA1LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgotICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQogICogQHRyaWc6CQlkYXRhIHJlYWR5IHRyaWdnZXIgcmVnaXN0ZXJlZCB3aXRoIGlpbwpAQCAtMTE3LDcgKzExNSw2IEBACiBzdHJ1Y3QgYWRpczE2MjA5X3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF90aHJlc2g7CiAJczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwpAQCAtMTI5LDE2ICsxMjYsMTUgQEAKIGludCBhZGlzMTYyMDlfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKIAogI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKLWVudW0gYWRpczE2MjA5X3NjYW4gewotCUFESVMxNjIwOV9TQ0FOX1NVUFBMWSwKLQlBRElTMTYyMDlfU0NBTl9BQ0NfWCwKLQlBRElTMTYyMDlfU0NBTl9BQ0NfWSwKLQlBRElTMTYyMDlfU0NBTl9BVVhfQURDLAotCUFESVMxNjIwOV9TQ0FOX1RFTVAsCi0JQURJUzE2MjA5X1NDQU5fSU5DTElfWCwKLQlBRElTMTYyMDlfU0NBTl9JTkNMSV9ZLAotCUFESVMxNjIwOV9TQ0FOX1JPVCwKLX07CisKKyNkZWZpbmUgQURJUzE2MjA5X1NDQU5fU1VQUExZCTAKKyNkZWZpbmUgQURJUzE2MjA5X1NDQU5fQUNDX1gJMQorI2RlZmluZSBBRElTMTYyMDlfU0NBTl9BQ0NfWQkyCisjZGVmaW5lIEFESVMxNjIwOV9TQ0FOX0FVWF9BREMJMworI2RlZmluZSBBRElTMTYyMDlfU0NBTl9URU1QCTQKKyNkZWZpbmUgQURJUzE2MjA5X1NDQU5fSU5DTElfWAk1CisjZGVmaW5lIEFESVMxNjIwOV9TQ0FOX0lOQ0xJX1kJNgorI2RlZmluZSBBRElTMTYyMDlfU0NBTl9ST1QJNwogCiB2b2lkIGFkaXMxNjIwOV9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIGludCBhZGlzMTYyMDlfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKQEAgLTE1MCw4ICsxNDYsNiBAQAogaW50IGFkaXMxNjIwOV9jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgYWRpczE2MjA5X3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBhZGlzMTYyMDlfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwotdm9pZCBhZGlzMTYyMDlfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYyMDlfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKQEAgLTE4MCwxNCArMTc0LDUgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWRpczE2MjA5X2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjA5X3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogU1BJX0FESVMxNjIwOV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfY29yZS5jCmluZGV4IGFjMzc1YzUuLjZjNjkyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiYWNjZWwuaCIKICNpbmNsdWRlICJpbmNsaW5vbWV0ZXIuaCIKICNpbmNsdWRlICIuLi9neXJvL2d5cm8uaCIKQEAgLTc2LDExICs3NywxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDMwLAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCisJCQkuZGVsYXlfdXNlY3MgPSAzMCwKIAkJfSwKIAl9OwogCkBAIC0xMjAsMTMgKzEyMywxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKLQkJCS5kZWxheV91c2VjcyA9IDIwLAorCQkJLmRlbGF5X3VzZWNzID0gMzAsCiAJCX0sIHsKIAkJCS5yeF9idWYgPSBzdC0+cngsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjAsCisJCQkuZGVsYXlfdXNlY3MgPSAzMCwKIAkJfSwKIAl9OwogCkBAIC01MTgsNyArNTIxLDcgQEAKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwogCi0JcmV0ID0gYWRpczE2MjA5X2luaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZywgMCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwpAQCAtNTUwLDcgKzU1Myw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkaXMxNjIwOV91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CiAJYWRpczE2MjA5X3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTU3OSw3ICs1ODIsNyBAQAogCWlmIChzcGktPmlycSkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKIAotCWFkaXMxNjIwOV91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJYWRpczE2MjA5X3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfcmluZy5jCmluZGV4IDUzM2UyODUuLjI1ZmRlNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV9yaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMTYsMTYgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjA5LmgiCiAKLS8qKgotICogY29tYmluZV84X3RvXzE2KCkgdXRpbGl0eSBmdW5jdGlvbiB0byBtdW5nZSB0byB1OHMgaW50byB1MTYKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNvbWJpbmVfOF90b18xNih1OCBsb3dlciwgdTggdXBwZXIpCi17Ci0JdTE2IF9sb3dlciA9IGxvd2VyOwotCXUxNiBfdXBwZXIgPSB1cHBlcjsKLQlyZXR1cm4gX2xvd2VyIHwgKF91cHBlciA8PCA4KTsKLX0KLQogc3RhdGljIElJT19TQ0FOX0VMX0Moc3VwcGx5LCBBRElTMTYyMDlfU0NBTl9TVVBQTFksIElJT19VTlNJR05FRCgxNCksCiAJCSAgICAgQURJUzE2MjA5X1NVUFBMWV9PVVQsIE5VTEwpOwogc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeCwgQURJUzE2MjA5X1NDQU5fQUNDX1gsIElJT19TSUdORUQoMTQpLApAQCAtNjcsMTAgKzU4LDEwIEBACiAgKiBhZGlzMTYyMDlfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjIwOV9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjIwOV9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xMzgsMTAgKzEyOSw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjIwOV9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCQkgIHN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNTcsNTAgKzE0Nyw2IEBACiAJcmV0dXJuOwogfQogCi0vKiBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzIGlzIGl0IGJldHRlciB0byBnbyB3aXRoIHVuYWxpZ25lZCBwYWNraW5nIGFuZAotICogZGVhbCB3aXRoIHRoZSBjb3N0PyovCi1zdGF0aWMgaW50IGFkaXMxNjIwOV9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHRvIHM2NCkgYW5kIGRhdGEgKi8KLQkJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogc2l6ZW9mKHMxNikpCi0JCQkJCSArIHNpemVvZihzNjQpIC0gMSkKLQkJCQkJJiB+KHNpemVvZihzNjQpIC0gMSkpCi0JCQkJCSsgc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyMDlfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjIwOV9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCi0JCT8gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCiB2b2lkIGFkaXMxNjIwOV91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJa2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CkBAIC0yMzUsMTggKzE4MSwxNiBAQAogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPnByZWVuYWJsZSA9ICZhZGlzMTYyMDlfZGF0YV9yZHlfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZhZGlzMTYyMDlfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmYWRpczE2MjA5X2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5icGUgPSAyOworCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7CisJcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKKwlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlpbmRpb19kZXYtPnBvbGxmdW5jID0ga3phbGxvYyhzaXplb2YoKmluZGlvX2Rldi0+cG9sbGZ1bmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7OwotCX0KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZhZGlzMTYyMDlfcG9sbF9mdW5jX3RoOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWRpczE2MjA5X3BvbGxfZnVuY190aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CiAKQEAgLTI1NCwxMyArMTk4LDMgQEAKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBhZGlzMTYyMDlfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBhZGlzMTYyMDlfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjA5X3RyaWdnZXIuYwppbmRleCA0YTA1MDdjLi4xNDg3ZWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIwOV90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMDlfdHJpZ2dlci5jCkBAIC0yMyw4ICsyMyw3IEBACiAJc3RydWN0IGFkaXMxNjIwOV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKIAotCXRyaWctPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcpOworCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTgzLDE0ICs4MiwxMyBAQAogCXN0cnVjdCBhZGlzMTYyMDlfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJICAgImFkaXMxNjIwOS1kZXYlZCIsCisJCQkJICAgaW5kaW9fZGV2LT5pZCk7CiAJaWYgKCFzdC0+dHJpZy0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAl9Ci0Jc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKLQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkgImFkaXMxNjIwOS1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwogCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMC5oCmluZGV4IDJhYmY0ODUuLjcwMTMzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjAuaApAQCAtMTI3LDcgKzEyNyw2IEBACiAgKiBzdHJ1Y3QgYWRpczE2MjIwX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQogICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAd29ya19jb250X3RocmVzaDogQ0xFQU4KICAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKICAqIEBsYXN0X3RpbWVzdGFtcDoJcGFzc2luZyB0aW1lc3RhbXAgZnJvbSB0aCB0byBiaCBvZiBpbnRlcnJ1cHQgaGFuZGxlcgogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjIwX2NvcmUuYwppbmRleCA2ZGU0MzlmLi5iYjdkNzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjIyMF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyMjBfY29yZS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC03MiwxMyArNzIsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTExOCwxMyArMTE4LDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjUsCisJCQkuZGVsYXlfdXNlY3MgPSAzNSwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTI5MSw5ICsyOTEsOSBAQAogCWlmIChzdGF0dXMgJiBBRElTMTYyMjBfRElBR19TVEFUX0ZMQVNIX1VQVCkKIAkJZGV2X2VycihkZXYsICJGbGFzaCB1cGRhdGUgZmFpbGVkXG4iKTsKIAlpZiAoc3RhdHVzICYgQURJUzE2MjIwX0RJQUdfU1RBVF9QT1dFUl9ISUdIKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBhYm92ZSA1LjI1VlxuIik7CisJCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGFib3ZlIDMuNjI1VlxuIik7CiAJaWYgKHN0YXR1cyAmIEFESVMxNjIyMF9ESUFHX1NUQVRfUE9XRVJfTE9XKQotCQlkZXZfZXJyKGRldiwgIlBvd2VyIHN1cHBseSBiZWxvdyA0Ljc1VlxuIik7CisJCWRldl9lcnIoZGV2LCAiUG93ZXIgc3VwcGx5IGJlbG93IDMuMTVWXG4iKTsKIAogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CkBAIC00MTQsNyArNDE0LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGFkaXMxNjIyMF9hY2NlbF9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKK3N0YXRpYyBzc2l6ZV90IGFkaXMxNjIyMF9hY2NlbF9iaW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJCXN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAogCQkJCQljaGFyICpidWYsCiAJCQkJCWxvZmZfdCBvZmYsCkBAIC00MzgsNyArNDM4LDcgQEAKIAkuc2l6ZSA9IEFESVMxNjIyMF9DQVBUVVJFX1NJWkUsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBhZGlzMTYyMjBfYWRjMV9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwKK3N0YXRpYyBzc2l6ZV90IGFkaXMxNjIyMF9hZGMxX2Jpbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYsIGxvZmZfdCBvZmYsCiAJCQkJc2l6ZV90IGNvdW50KQpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJLnNpemUgPSBBRElTMTYyMjBfQ0FQVFVSRV9TSVpFLAogfTsKIAotc3RhdGljIHNzaXplX3QgYWRpczE2MjIwX2FkYzJfYmluX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosCitzdGF0aWMgc3NpemVfdCBhZGlzMTYyMjBfYWRjMl9iaW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLAogCQkJCXNpemVfdCBjb3VudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MC5oCmluZGV4IGRjZmY0M2MuLjUxYTgwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDAuaApAQCAtMTI3LDcgKzEyNyw2IEBACiAgKiBzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlIC0gZGV2aWNlIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEB1czoJCQlhY3R1YWwgc3BpX2RldmljZQogICogQHdvcmtfdHJpZ2dlcl90b19yaW5nOiBiaCBmb3IgdHJpZ2dlcmVkIGV2ZW50IGhhbmRsaW5nCi0gKiBAd29ya19jb250X3RocmVzaDogQ0xFQU4KICAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKICAqIEBsYXN0X3RpbWVzdGFtcDoJcGFzc2luZyB0aW1lc3RhbXAgZnJvbSB0aCB0byBiaCBvZiBpbnRlcnJ1cHQgaGFuZGxlcgogICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEzOSw3ICsxMzgsNiBAQAogc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXN0cnVjdCBpaW9fd29ya19jb250CQl3b3JrX2NvbnRfdGhyZXNoOwogCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKQEAgLTE1NSwxNCArMTUzLDEyIEBACiAgKiBmaWxsaW5nLiBUaGlzIG1heSBjaGFuZ2UhCiAgKi8KIAotZW51bSBhZGlzMTYyNDBfc2NhbiB7Ci0JQURJUzE2MjQwX1NDQU5fU1VQUExZLAotCUFESVMxNjI0MF9TQ0FOX0FDQ19YLAotCUFESVMxNjI0MF9TQ0FOX0FDQ19ZLAotCUFESVMxNjI0MF9TQ0FOX0FDQ19aLAotCUFESVMxNjI0MF9TQ0FOX0FVWF9BREMsCi0JQURJUzE2MjQwX1NDQU5fVEVNUCwKLX07CisjZGVmaW5lIEFESVMxNjI0MF9TQ0FOX1NVUFBMWQkwCisjZGVmaW5lIEFESVMxNjI0MF9TQ0FOX0FDQ19YCTEKKyNkZWZpbmUgQURJUzE2MjQwX1NDQU5fQUNDX1kJMgorI2RlZmluZSBBRElTMTYyNDBfU0NBTl9BQ0NfWgkzCisjZGVmaW5lIEFESVMxNjI0MF9TQ0FOX0FVWF9BREMJNAorI2RlZmluZSBBRElTMTYyNDBfU0NBTl9URU1QCTUKIAogdm9pZCBhZGlzMTYyNDBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2MjQwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CkBAIC0xNzUsOCArMTcxLDYgQEAKIGludCBhZGlzMTYyNDBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1pbnQgYWRpczE2MjQwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgYWRpczE2MjQwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjQwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCkBAIC0yMDUsMTQgKzE5OSw1IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkaXMxNjI0MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjI0MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotfQotCiAjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIFNQSV9BRElTMTYyNDBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX2NvcmUuYwppbmRleCA1NGZkNmQ3Li4zZTk1MzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfY29yZS5jCkBAIC0xNCwxMiArMTQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgogI2luY2x1ZGUgImFjY2VsLmgiCiAjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgogCkBAIC03NCwxMyArNzUsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTEyMCwxMyArMTIxLDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjUsCisJCQkuZGVsYXlfdXNlY3MgPSAzNSwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTUwMiw3ICs1MDMsNyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYyNDBfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CkBAIC01MzQsNyArNTM1LDcgQEAKIAlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MjQwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYyNDBfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNTYzLDcgKzU2NCw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MjQwX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYyNDBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF9yaW5nLmMKaW5kZXggMjZiNjc3Yi4uY2Q2OWEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3JpbmcuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC0xNiwxNiArMTcsNiBAQAogI2luY2x1ZGUgIi4uL3RyaWdnZXIuaCIKICNpbmNsdWRlICJhZGlzMTYyNDAuaCIKIAotLyoqCi0gKiBjb21iaW5lXzhfdG9fMTYoKSB1dGlsaXR5IGZ1bmN0aW9uIHRvIG11bmdlIHRvIHU4cyBpbnRvIHUxNgotICoqLwotc3RhdGljIGlubGluZSB1MTYgY29tYmluZV84X3RvXzE2KHU4IGxvd2VyLCB1OCB1cHBlcikKLXsKLQl1MTYgX2xvd2VyID0gbG93ZXI7Ci0JdTE2IF91cHBlciA9IHVwcGVyOwotCXJldHVybiBfbG93ZXIgfCAoX3VwcGVyIDw8IDgpOwotfQotCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhzdXBwbHksIEFESVMxNjI0MF9TQ0FOX1NVUFBMWSwgSUlPX1VOU0lHTkVEKDEwKSwKIAkJQURJUzE2MjQwX1NVUFBMWV9PVVQsIE5VTEwpOwogc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeCwgQURJUzE2MjQwX1NDQU5fQUNDX1gsIElJT19TSUdORUQoMTApLApAQCAtNjEsMTAgKzUyLDEwIEBACiAgKiBhZGlzMTYyNDBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjI0MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjI0MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjI0MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xMzAsMTAgKzEyMSw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjI0MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCXN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNDksNDggKzEzOSw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjI0MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHNpemVvZihzNjQpIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9ICgoKGluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIHNpemVvZihzMTYpKQotCQkJCQkgKyBzaXplb2YoczY0KSAtIDEpCi0JCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQotCQkJCQkrIHNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjQwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MjQwX2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCi0JCQkJaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCiB2b2lkIGFkaXMxNjI0MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJa2ZyZWUoaW5kaW9fZGV2LT5wb2xsZnVuYyk7CkBAIC0yMjMsMTggKzE3MSwxNiBAQAogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPnByZWVuYWJsZSA9ICZhZGlzMTYyNDBfZGF0YV9yZHlfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZhZGlzMTYyNDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmYWRpczE2MjQwX2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5icGUgPSAyOworCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7CisJcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKKwlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlpbmRpb19kZXYtPnBvbGxmdW5jID0ga3phbGxvYyhzaXplb2YoKmluZGlvX2Rldi0+cG9sbGZ1bmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7OwotCX0KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZhZGlzMTYyNDBfcG9sbF9mdW5jX3RoOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWRpczE2MjQwX3BvbGxfZnVuY190aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CiAKQEAgLTI0MywxMiArMTg5LDMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYWRpczE2MjQwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19Ci0KLXZvaWQgYWRpczE2MjQwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIocmluZyk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2FkaXMxNjI0MF90cmlnZ2VyLmMKaW5kZXggZGYxMzEyZS4uMmJhNzFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9hZGlzMTYyNDBfdHJpZ2dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvYWRpczE2MjQwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTYyNDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04MywxNCArODIsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2MjQwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTYyNDAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTYyNDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2t4c2Q5LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2t4c2Q5LmMKaW5kZXggYWU3ZmZlMS4uNzlmNTc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9reHNkOS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwva3hzZDkuYwpAQCAtMTYsMTcgKzE2LDExIEBACiAgKgkJaGVhdmlseSBvcHRpbWl6ZWQgcmluZyBidWZmZXIgYWNjZXNzIGZ1bmN0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHEuaAppbmRleCBlNzZhOTc5Li42ZTczMDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxLmgKQEAgLTE0OCwzMCArMTQ4LDMxIEBACiAjZGVmaW5lIExJUzNMMDJEUV9NQVhfUlggMTIKIC8qKgogICogc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCisgKiBAaGVscGVyOgkJZGF0YSBhbmQgZnVuYyBwb2ludGVyIGFsbG93aW5nIGdlbmVyaWMgZnVuY3Rpb25zCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKLSAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQHdvcmtfY29udF90aHJlc2g6IENMRUFOCisgKiBAd29ya190aHJlc2g6CWJoIGZvciB0aHJlc2hvbGQgZXZlbnRzCisgKiBAdGhyZXNoX3RpbWVzdGFtcDoJdGltZXN0YW1wIGZvciB0aHJlc2hvbGQgaW50ZXJydXB0cy4KICAqIEBpbnRlcjoJCXVzZWQgdG8gY2hlY2sgaWYgbmV3IGludGVycnVwdCBoYXMgYmVlbiB0cmlnZ2VyZWQKLSAqIEBsYXN0X3RpbWVzdGFtcDoJcGFzc2luZyB0aW1lc3RhbXAgZnJvbSB0aCB0byBiaCBvZiBpbnRlcnJ1cHQgaGFuZGxlcgotICogQGluZGlvX2RldjoJCWluZHVzdHJpYWwgSS9PIGRldmljZSBzdHJ1Y3R1cmUKICAqIEB0cmlnOgkJZGF0YSByZWFkeSB0cmlnZ2VyIHJlZ2lzdGVyZWQgd2l0aCBpaW8KICAqIEB0eDoJCQl0cmFuc21pdCBidWZmZXIKICAqIEByeDoJCQlyZWNpZXZlIGJ1ZmZlcgogICogQGJ1Zl9sb2NrOgkJbXV0ZXggdG8gcHJvdGVjdCB0eCBhbmQgcngKICAqKi8KIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgeworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUJaGVscDsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF90aHJlc2g7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RocmVzaDsKKwlzNjQJCQkJdGhyZXNoX3RpbWVzdGFtcDsKIAlib29sCQkJCWludGVyOwotCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKLQlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKIAl1OAkJCQkqdHg7CiAJdTgJCQkJKnJ4OwogCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOwogfTsKIAorI2RlZmluZSBsaXMzbDAyZHFfaF90b19zKF9oKQkJCQlcCisJY29udGFpbmVyX29mKF9oLCBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlLCBoZWxwKQorCiBpbnQgbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgdTggcmVnX2FkZHJlc3MsCiAJCQkgICAgIHU4ICp2YWwpOwpAQCAtMTk1LDE1ICsxOTYsMTUgQEAKIGludCBsaXMzbDAyZHFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGxpczNsMDJkcV91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1pbnQgbGlzM2wwMmRxX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgbGlzM2wwMmRxX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIGxpczNsMDJkcV9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworfQogc3RhdGljIGlubGluZSBpbnQgbGlzM2wwMmRxX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKLX07Cit9CiAKIHN0YXRpYyBpbmxpbmUgc3NpemVfdAogbGlzM2wwMmRxX3JlYWRfYWNjZWxfZnJvbV9yaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTIxMSwxOCArMjEyLDE0IEBACiAJCQkgICAgICAgY2hhciAqYnVmKQogewogCXJldHVybiAwOwotfTsKK30KIAogc3RhdGljIGludCBsaXMzbDAyZHFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKLX07Cit9CiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzM2wwMmRxX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXt9Owotc3RhdGljIGlubGluZSBpbnQgbGlzM2wwMmRxX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQogewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBsaXMzbDAyZHFfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykge307Cit9CiAjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIFNQSV9MSVMzTDAyRFFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX2NvcmUuYwppbmRleCA2YjU1NzdkLi4wZWU5MzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfY29yZS5jCkBAIC0yNyw2ICsyNyw5IEBACiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgorI2luY2x1ZGUgIi4uL3JpbmdfZ2VuZXJpYy5oIgorI2luY2x1ZGUgIi4uL3Jpbmdfc3cuaCIKKwogI2luY2x1ZGUgImFjY2VsLmgiCiAKICNpbmNsdWRlICJsaXMzbDAyZHEuaCIKQEAgLTQ3LDcgKzUwLDkgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmggPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOworCiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyID0gewogCQkudHhfYnVmID0gc3QtPnR4LAogCQkucnhfYnVmID0gc3QtPnJ4LApAQCAtODIsNyArODcsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyID0gewogCQkudHhfYnVmID0gc3QtPnR4LAogCQkuYml0c19wZXJfd29yZCA9IDgsCkBAIC05Niw3ICsxMDMsNyBAQAogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm1zZyk7Ci0JcmV0ID0gIHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKIAltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTE2LDcgKzEyMyw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCisJCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7IHsKIAkJCS50eF9idWYgPSBzdC0+dHgsCiAJCQkuYml0c19wZXJfd29yZCA9IDgsCkBAIC0xNTgsNyArMTY3LDkgQEAKIHsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbXNnOwogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoCisJCT0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKIAlpbnQgcmV0OwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgeGZlcnNbXSA9IHsgewogCQkJLnR4X2J1ZiA9IHN0LT50eCwKQEAgLTQxMSw3ICs0MjIsNyBAQAogCiAJdmFsID0gTElTM0wwMkRRX0RFRkFVTFRfQ1RSTDE7CiAJLyogV3JpdGUgc3VpdGFibGUgZGVmYXVsdHMgdG8gY3RybDEgKi8KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCiAJCQkJCSZ2YWwpOwogCWlmIChyZXQpIHsKQEAgLTQxOSw3ICs0MzAsNyBAQAogCQlnb3RvIGVycl9yZXQ7CiAJfQogCS8qIFJlcGVhdCBhcyBzb21ldGltZXMgZG9lc24ndCB3b3JrIGZpcnN0IHRpbWU/Ki8KLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCiAJCQkJCSZ2YWwpOwogCWlmIChyZXQpIHsKQEAgLTQyOSwxNyArNDQwLDE3IEBACiAKIAkvKiBSZWFkIGJhY2sgdG8gY2hlY2sgdGhpcyBoYXMgd29ya2VkIGFjdHMgYXMgbG9vc2UgdGVzdCBvZiBjb3JyZWN0CiAJICogY2hpcCAqLwotCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgmc3QtPmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJICAgICAgIExJUzNMMDJEUV9SRUdfQ1RSTF8xX0FERFIsCiAJCQkJICAgICAgICZ2YWx0ZXN0KTsKIAlpZiAocmV0IHx8ICh2YWx0ZXN0ICE9IHZhbCkpIHsKLQkJZGV2X2Vycigmc3QtPmluZGlvX2Rldi0+ZGV2LCAiZGV2aWNlIG5vdCBwbGF5aW5nIGJhbGwiKTsKKwkJZGV2X2Vycigmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsICJkZXZpY2Ugbm90IHBsYXlpbmcgYmFsbCIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZXQ7CiAJfQogCiAJdmFsID0gTElTM0wwMkRRX0RFRkFVTFRfQ1RSTDI7Ci0JcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmluZGlvX2Rldi0+ZGV2LAorCXJldCA9IGxpczNsMDJkcV9zcGlfd3JpdGVfcmVnXzgoJnN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LAogCQkJCQlMSVMzTDAyRFFfUkVHX0NUUkxfMl9BRERSLAogCQkJCQkmdmFsKTsKIAlpZiAocmV0KSB7CkBAIC00NDgsNyArNDU5LDcgQEAKIAl9CiAKIAl2YWwgPSBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0xBVENIX1NSQzsKLQlyZXQgPSBsaXMzbDAyZHFfc3BpX3dyaXRlX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJcmV0ID0gbGlzM2wwMmRxX3NwaV93cml0ZV9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJCUxJUzNMMDJEUV9SRUdfV0FLRV9VUF9DRkdfQUREUiwKIAkJCQkJJnZhbCk7CiAJaWYgKHJldCkKQEAgLTUyNCw4ICs1MzUsNyBAQAogCQkJCSAgICAgICBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfQ0ZHX0FERFIsCiAJCQkJICAgICAgICh1OCAqKSZ2YWwpOwogCi0JcmV0dXJuIHJldCA/IHJldCA6IHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkJICAgKHZhbCAmIHRoaXNfYXR0ci0+bWFzaykgPyAxIDogMCk7OworCXJldHVybiByZXQgPyByZXQgOiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhISh2YWwgJiB0aGlzX2F0dHItPm1hc2spKTsKIH0KIAogc3RhdGljIHNzaXplX3QgbGlzM2wwMmRxX3dyaXRlX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LApAQCAtNTk1LDE2ICs2MDUsMTggQEAKIH0KIAogCi1zdGF0aWMgaW50IGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl90aChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCitzdGF0aWMgaW50IGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl90aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAogCQkJCSAgICAgICBpbnQgaW5kZXgsCiAJCQkJICAgICAgIHM2NCB0aW1lc3RhbXAsCiAJCQkJICAgICAgIGludCBub190ZXN0KQogewotCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCiAJLyogU3Rhc2ggdGhlIHRpbWVzdGFtcCBzb21ld2hlcmUgY29udmVuaWVudCBmb3IgdGhlIGJoICovCi0Jc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOwotCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX2NvbnRfdGhyZXNoLndzKTsKKwlzdC0+dGhyZXNoX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190aHJlc2gpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02MTUsNDggKzYyNyw0OSBAQAogICovCiBzdGF0aWMgdm9pZCBsaXMzbDAyZHFfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCiB7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQgKndjCi0JCT0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IGlpb193b3JrX2NvbnQsIHdzKTsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IHdjLT5zdDsKKyAgICAgICBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdAorCSAgICAgICA9IGNvbnRhaW5lcl9vZih3b3JrX3MsCisJCSAgICAgICBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlLCB3b3JrX3RocmVzaCk7CisKIAl1OCB0OwogCi0JbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19BRERSLAogCQkJCSAmdCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1pfSElHSCkKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19FVkVOVF9DT0RFX0FDQ0VMX1pfSElHSCwKLQkJCSAgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWl9MT1cpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9BQ0NFTF9aX0xPVywKLQkJCSAgICAgICBzdC0+bGFzdF90aW1lc3RhbXApOworCQkJICAgICAgIHN0LT50aHJlc2hfdGltZXN0YW1wKTsKIAogCWlmICh0ICYgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19JTlRFUlJVUFRfWV9ISUdIKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQUNDRUxfWV9ISUdILAotCQkJICAgICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7CisJCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9ZX0xPVykKLQkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmhlbHAuaW5kaW9fZGV2LCAwLAogCQkJICAgICAgIElJT19FVkVOVF9DT0RFX0FDQ0VMX1lfTE9XLAotCQkJICAgICAgIHN0LT5sYXN0X3RpbWVzdGFtcCk7CisJCQkgICAgICAgc3QtPnRocmVzaF90aW1lc3RhbXApOwogCiAJaWYgKHQgJiBMSVMzTDAyRFFfUkVHX1dBS0VfVVBfU1JDX0lOVEVSUlVQVF9YX0hJR0gpCi0JCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCWlpb19wdXNoX2V2ZW50KHN0LT5oZWxwLmluZGlvX2RldiwgMCwKIAkJCSAgICAgICBJSU9fRVZFTlRfQ09ERV9BQ0NFTF9YX0hJR0gsCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CiAKIAlpZiAodCAmIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfSU5URVJSVVBUX1hfTE9XKQotCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQlpaW9fcHVzaF9ldmVudChzdC0+aGVscC5pbmRpb19kZXYsIDAsCiAJCQkgICAgICAgSUlPX0VWRU5UX0NPREVfQUNDRUxfWF9MT1csCi0JCQkgICAgICAgc3QtPmxhc3RfdGltZXN0YW1wKTsKKwkJCSAgICAgICBzdC0+dGhyZXNoX3RpbWVzdGFtcCk7CiAJLyogcmVlbmFibGUgdGhlIGlycSAqLwogCWVuYWJsZV9pcnEoc3QtPnVzLT5pcnEpOwogCS8qIEFjayBhbmQgYWxsb3cgZm9yIG5ldyBpbnRlcnJ1cHRzICovCi0JbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aW5kaW9fZGV2LT5kZXYsCisJbGlzM2wwMmRxX3NwaV9yZWFkX3JlZ184KCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkgTElTM0wwMkRRX1JFR19XQUtFX1VQX0FDS19BRERSLAogCQkJCSAmdCk7CiAKQEAgLTc1MCw2ICs3NjMsNyBAQAogCQlyZXQgPSAgLUVOT01FTTsKIAkJZ290byBlcnJvcl9yZXQ7CiAJfQorCUlOSVRfV09SSygmc3QtPndvcmtfdGhyZXNoLCBsaXMzbDAyZHFfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2spOwogCS8qIHRoaXMgaXMgb25seSB1c2VkIHRvciByZW1vdmFsIHB1cnBvc2VzICovCiAJc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOwogCkBAIC03NjcsNTYgKzc4MSw0NiBAQAogCXN0LT51cyA9IHNwaTsKIAltdXRleF9pbml0KCZzdC0+YnVmX2xvY2spOwogCS8qIHNldHVwIHRoZSBpbmR1c3RyaWFsaW8gZHJpdmVyIGFsbG9jYXRlZCBlbGVtZW50cyAqLwotCXN0LT5pbmRpb19kZXYgPSBpaW9fYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKHN0LT5pbmRpb19kZXYgPT0gTlVMTCkgeworCXN0LT5oZWxwLmluZGlvX2RldiA9IGlpb19hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoc3QtPmhlbHAuaW5kaW9fZGV2ID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3R4OwogCX0KIAotCXN0LT5pbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7Ci0Jc3QtPmluZGlvX2Rldi0+bnVtX2ludGVycnVwdF9saW5lcyA9IDE7Ci0Jc3QtPmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmbGlzM2wwMmRxX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKLQlzdC0+aW5kaW9fZGV2LT5hdHRycyA9ICZsaXMzbDAyZHFfYXR0cmlidXRlX2dyb3VwOwotCXN0LT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoc3QpOwotCXN0LT5pbmRpb19kZXYtPmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRTsKLQlzdC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCXN0LT5oZWxwLmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKKwlzdC0+aGVscC5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOworCXN0LT5oZWxwLmluZGlvX2Rldi0+ZXZlbnRfYXR0cnMgPSAmbGlzM2wwMmRxX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKwlzdC0+aGVscC5pbmRpb19kZXYtPmF0dHJzID0gJmxpczNsMDJkcV9hdHRyaWJ1dGVfZ3JvdXA7CisJc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKCZzdC0+aGVscCk7CisJc3QtPmhlbHAuaW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CisJc3QtPmhlbHAuaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOwogCi0JcmV0ID0gbGlzM2wwMmRxX2NvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOworCXJldCA9IGxpczNsMDJkcV9jb25maWd1cmVfcmluZyhzdC0+aGVscC5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZnJlZV9kZXY7CiAKLQlyZXQgPSBpaW9fZGV2aWNlX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYpOworCXJldCA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoc3QtPmhlbHAuaW5kaW9fZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBsaXMzbDAyZHFfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aGVscC5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAl9CiAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkgewotCQkvKiBUaGlzIGlzIGEgbGl0dGxlIHVudXN1YWwsIGluIHRoYXQgdGhlIGRldmljZSBzZWVtcwotCQkgICB0byBuZWVkIGEgZnVsbCByZWFkIG9mIHRoZSBpbnRlcnJ1cHQgc291cmNlIHJlZyBiZWZvcmUKLQkJICAgdGhlIGludGVycnVwdCB3aWxsIHJlc2V0LgotCQkgICBIZW5jZSB0aGUgdHdvIGhhbmRsZXJzIGFyZSB0aGUgc2FtZSAqLwotCQlpaW9faW5pdF93b3JrX2NvbnQoJnN0LT53b3JrX2NvbnRfdGhyZXNoLAotCQkJCSAgIGxpczNsMDJkcV90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjaywKLQkJCQkgICBsaXMzbDAyZHFfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2ssCi0JCQkJICAgTElTM0wwMkRRX1JFR19XQUtFX1VQX1NSQ19BRERSLAotCQkJCSAgIDAsCi0JCQkJICAgc3QpOwogCQlzdC0+aW50ZXIgPSAwOwogCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCi0JCQkJCQkgIHN0LT5pbmRpb19kZXYsCisJCQkJCQkgIHN0LT5oZWxwLmluZGlvX2RldiwKIAkJCQkJCSAgMCwKIAkJCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKIAkJCQkJCSAgImxpczNsMDJkcSIpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJvcl91bmluaXRpYWxpemVfcmluZzsKIAotCQlyZXQgPSBsaXMzbDAyZHFfcHJvYmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKKwkJcmV0ID0gbGlzM2wwMmRxX3Byb2JlX3RyaWdnZXIoc3QtPmhlbHAuaW5kaW9fZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyb3JfdW5yZWdpc3Rlcl9saW5lOwogCX0KQEAgLTgyOCwyMCArODMyLDIwIEBACiAJcmV0dXJuIDA7CiAKIGVycm9yX3JlbW92ZV90cmlnZ2VyOgotCWlmIChzdC0+aW5kaW9fZGV2LT5tb2RlcyAmIElORElPX1JJTkdfVFJJR0dFUkVEKQotCQlsaXMzbDAyZHFfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7CisJaWYgKHN0LT5oZWxwLmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKKwkJbGlzM2wwMmRxX3JlbW92ZV90cmlnZ2VyKHN0LT5oZWxwLmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOworCWlmIChzdC0+aGVscC5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCisJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5oZWxwLmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlsaXMzbDAyZHFfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmhlbHAuaW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6Ci0JbGlzM2wwMmRxX3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CisJbGlzM2wwMmRxX3VuY29uZmlndXJlX3Jpbmcoc3QtPmhlbHAuaW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgogCWlmIChyZWdkb25lKQotCQlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldik7CisJCWlpb19kZXZpY2VfdW5yZWdpc3RlcihzdC0+aGVscC5pbmRpb19kZXYpOwogCWVsc2UKLQkJaWlvX2ZyZWVfZGV2aWNlKHN0LT5pbmRpb19kZXYpOworCQlpaW9fZnJlZV9kZXZpY2Uoc3QtPmhlbHAuaW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfdHg6CiAJa2ZyZWUoc3QtPnR4KTsKIGVycm9yX2ZyZWVfcng6CkBAIC04NTYsNyArODYwLDkgQEAKIHN0YXRpYyBpbnQgbGlzM2wwMmRxX3N0b3BfZGV2aWNlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGxpczNsMDJkcV9oX3RvX3MoaCk7CiAJdTggdmFsID0gMDsKIAogCW11dGV4X2xvY2soJmluZGlvX2Rldi0+bWxvY2spOwpAQCAtODgzLDcgKzg4OSw3IEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aW5kaW9fZGV2OworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBzdC0+aGVscC5pbmRpb19kZXY7CiAKIAlyZXQgPSBsaXMzbDAyZHFfc3RvcF9kZXZpY2UoaW5kaW9fZGV2KTsKIAlpZiAocmV0KQpAQCAtODk1LDcgKzkwMSw3IEBACiAJaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CiAKLQlsaXMzbDAyZHFfdW5pbml0aWFsaXplX3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCWxpczNsMDJkcV91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPnR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvbGlzM2wwMmRxX3JpbmcuYwppbmRleCBlNGUyMDJlLi5hOTYwYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL2xpczNsMDJkcV9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9saXMzbDAyZHFfcmluZy5jCkBAIC0xMDMsMTMgKzEwMywxNSBAQAogICogbGlzM2wwMmRxX3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCiAgKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2CiAgKiovCi1zdGF0aWMgdm9pZCBsaXMzbDAyZHFfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgdm9pZCBsaXMzbDAyZHFfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQogewotICBzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSBpbmRpb19kZXYtPnRyaWctPnRpbWVzdGFtcDsKLQlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwotCS8qIEluZGljYXRlIHRoYXQgdGhpcyBpbnRlcnJ1cHQgaXMgYmVpbmcgaGFuZGxlZCAqLworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOworCS8qIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHNsaWdodGx5IGV4dGVuZCB0aGUgaGVscGVyIGZ1bmN0aW9uICovCisJaWlvX3N3X3BvbGxfZnVuY190aChpbmRpb19kZXYsIHRpbWUpOwogCisJLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCiAJLyogVGVjaG5pY2FsbHkgdGhpcyBpcyB0cmlnZ2VyIHJlbGF0ZWQsIGJ1dCB3aXRob3V0IHRoaXMKIAkgKiBoYW5kbGVyIHJ1bm5pbmcgdGhlcmUgaXMgY3VycmVudGx5IG5vdyB3YXkgZm9yIHRoZSBpbnRlcnJ1cHQKIAkgKiB0byBjbGVhci4KQEAgLTEyMCwxNiArMTIyLDE2IEBACiAvKioKICAqIGxpczNsMDJkcV9kYXRhX3JkeV90cmlnX3BvbGwoKSB0aGUgZXZlbnQgaGFuZGxlciBmb3IgdGhlIGRhdGEgcmR5IHRyaWcKICAqKi8KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX2RhdGFfcmR5X3RyaWdfcG9sbChzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8sCitzdGF0aWMgaW50IGxpczNsMDJkcV9kYXRhX3JkeV90cmlnX3BvbGwoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKIAkJCQkgICAgICAgaW50IGluZGV4LAogCQkJCSAgICAgICBzNjQgdGltZXN0YW1wLAogCQkJCSAgICAgICBpbnQgbm9fdGVzdCkKIHsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOwotCXN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyA9IHN0LT50cmlnOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSBsaXMzbDAyZHFfaF90b19zKGgpOwogCi0JdHJpZy0+dGltZXN0YW1wID0gdGltZXN0YW1wOwotCWlpb190cmlnZ2VyX3BvbGwodHJpZyk7CisJaWlvX3RyaWdnZXJfcG9sbChzdC0+dHJpZywgdGltZXN0YW1wKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTIxMyw3ICsyMTUsNyBAQAogCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CiAJaW50IHJldCwgaSwgaiA9IDA7CiAKLQl4ZmVycyA9IGt6YWxsb2MoKHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQpICogMgorCXhmZXJzID0ga3phbGxvYygoc3QtPmhlbHAuaW5kaW9fZGV2LT5zY2FuX2NvdW50KSAqIDIKIAkJCSogc2l6ZW9mKCp4ZmVycyksIEdGUF9LRVJORUwpOwogCWlmICgheGZlcnMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjIxLDcgKzIyMyw3IEBACiAJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlYWRfYWxsX3R4X2FycmF5KS80OyBpKyspIHsKLQkJaWYgKHN0LT5pbmRpb19kZXYtPnNjYW5fbWFzayAmICgxIDw8IGkpKSB7CisJCWlmIChzdC0+aGVscC5pbmRpb19kZXYtPnNjYW5fbWFzayAmICgxIDw8IGkpKSB7CiAJCQkvKiBsb3dlciBieXRlICovCiAJCQl4ZmVyc1tqXS50eF9idWYgPSBzdC0+dHggKyAyKmo7CiAJCQlzdC0+dHhbMipqXSA9IHJlYWRfYWxsX3R4X2FycmF5W2kqNF07CkBAIC0yNDksNyArMjUxLDcgQEAKIAkgKiB2YWx1ZXMgaW4gYWx0ZXJuYXRlIGJ5dGVzCiAJICovCiAJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlmb3IgKGogPSAwOyBqIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIDI7IGorKykKKwlmb3IgKGogPSAwOyBqIDwgc3QtPmhlbHAuaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogMjsgaisrKQogCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbal0sICZtc2cpOwogCiAJcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKQEAgLTI1OSwxMDIgKzI2MSwzNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotLyogV2hpbHN0IHRoaXMgbWFrZXMgYSBsb3Qgb2YgY2FsbHMgdG8gaWlvX3N3X3JpbmcgZnVuY3Rpb25zIC0gaXQgaXMgdG8gZGV2aWNlCi0gKiBzcGVjaWZpYyB0byBiZSByb2xsZWQgaW50byB0aGUgY29yZS4KLSAqLwogc3RhdGljIHZvaWQgbGlzM2wwMmRxX3RyaWdnZXJfYmhfdG9fcmluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKIHsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdAotCQk9IGNvbnRhaW5lcl9vZih3b3JrX3MsIHN0cnVjdCBsaXMzbDAyZHFfc3RhdGUsCi0JCQkgICAgICAgd29ya190cmlnZ2VyX3RvX3JpbmcpOworCXN0cnVjdCBpaW9fc3dfcmluZ19oZWxwZXJfc3RhdGUgKmgKKwkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlLAorCQkJd29ya190cmlnZ2VyX3RvX3JpbmcpOworCXN0cnVjdCBsaXMzbDAyZHFfc3RhdGUgKnN0ID0gbGlzM2wwMmRxX2hfdG9fcyhoKTsKIAotCXU4ICpyeF9hcnJheTsKLQlpbnQgaSA9IDA7Ci0JdTE2ICpkYXRhOwotCXNpemVfdCBkYXRhc2l6ZSA9IHN0LT5pbmRpb19kZXYKLQkJLT5yaW5nLT5hY2Nlc3MuZ2V0X2JwZChzdC0+aW5kaW9fZGV2LT5yaW5nKTsKLQotCWRhdGEgPSBrbWFsbG9jKGRhdGFzaXplICwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRhdGEgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgIm1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gcmluZyBiaCIpOwotCQlyZXR1cm47Ci0JfQotCS8qIER1ZSB0byBpbnRlcmxlYXZlZCBuYXR1cmUgb2YgdHJhbnNtaXNzaW9uIHRoaXMgYnVmZmVyIG11c3QgYmUKLQkgKiB0d2ljZSB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBvciA0IHRpbWVzIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKLQkgKi8KLQlyeF9hcnJheSA9IGttYWxsb2MoNCAqIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJ4X2FycmF5ID09IE5VTEwpIHsKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKLQkJa2ZyZWUoZGF0YSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB3aGlsc3QgdHJpZ2dlciBzcGVjaWZpYywgaWYgdGhpcyByZWFkIGRvZXMgbnRvIG9jY3VyIHRoZSBkYXRhCi0JICAgcmVhZHkgaW50ZXJydXB0IHdpbGwgbm90IGJlIGNsZWFyZWQuICBOZWVkIHRvIGFkZCBhIG1lY2hhbmlzbQotCSAgIHRvIHByb3ZpZGUgYSBkdW1teSByZWFkIGZ1bmN0aW9uIGlmIHRoaXMgaXMgbm90IHRyaWdnZXJpbmcgb24KLQkgICB0aGUgZGF0YSByZWFkeSBmdW5jdGlvbiBidXQgc29tZXRoaW5nIGVsc2UgaXMuCi0JKi8KIAlzdC0+aW50ZXIgPSAwOworCWlpb19zd190cmlnZ2VyX2JoX3RvX3Jpbmcod29ya19zKTsKK30KIAotCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQotCQlpZiAobGlzM2wwMmRxX3JlYWRfYWxsKHN0LCByeF9hcnJheSkgPj0gMCkKLQkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYocnhfYXJyYXlbaSo0KzFdLAotCQkJCQkJCSAgcnhfYXJyYXlbaSo0KzNdKTsKLQkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KLQlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCi0JCSooKHM2NCAqKShkYXRhICsgKChpICsgMykvNCkqNCkpID0gc3QtPmxhc3RfdGltZXN0YW1wOworc3RhdGljIGludCBsaXMzbDAyZHFfZ2V0X3JpbmdfZWxlbWVudChzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoLAorCQkJCXU4ICpidWYpCit7CisJaW50IHJldCwgaTsKKwl1OCAqcnhfYXJyYXkgOworCXMxNiAqZGF0YSA9IChzMTYgKilidWY7CiAKLQlzdC0+aW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oc3QtPmluZGlvX2Rldi0+cmluZywKLQkJCQkJICAgICh1OCAqKWRhdGEsCi0JCQkJCSAgICBzdC0+bGFzdF90aW1lc3RhbXApOwotCi0JaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUoc3QtPmluZGlvX2Rldi0+dHJpZyk7CisJcnhfYXJyYXkgPSBremFsbG9jKDQgKiAoaC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJ4X2FycmF5ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IGxpczNsMDJkcV9yZWFkX2FsbChsaXMzbDAyZHFfaF90b19zKGgpLCByeF9hcnJheSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IGgtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQlkYXRhW2ldID0gY29tYmluZV84X3RvXzE2KHJ4X2FycmF5W2kqNCsxXSwKKwkJCQkJcnhfYXJyYXlbaSo0KzNdKTsKIAlrZnJlZShyeF9hcnJheSk7Ci0Ja2ZyZWUoZGF0YSk7CiAKLQlyZXR1cm47CisJcmV0dXJuIGkqc2l6ZW9mKGRhdGFbMF0pOwogfQotLyogaW4gdGhlc2UgY2lyY3Vtc3RhbmNlcyBpcyBpdCBiZXR0ZXIgdG8gZ28gd2l0aCB1bmFsaWduZWQgcGFja2luZyBhbmQKLSAqIGRlYWwgd2l0aCB0aGUgY29zdD8qLwotc3RhdGljIGludCBsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wcmVlbmFibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlzaXplX3Qgc2l6ZTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpIC8qIFRpbWVzdGFtcCBhbmQgZGF0YSAqLwotCQkJCXNpemUgPSAyKnNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGlzM2wwMmRxX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJICAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQogCiAvKiBDYWxsZXIgcmVzcG9uc2libGUgZm9yIGxvY2tpbmcgYXMgbmVjZXNzYXJ5LiAqLwogc3RhdGljIGludApAQCAtNDI3LDcgKzM2NCw3IEBACiAJc3RydWN0IGxpczNsMDJkcV9zdGF0ZSAqc3QgPSB0cmlnLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldCA9IDA7CiAJdTggdDsKLQlfX2xpczNsMDJkcV93cml0ZV9kYXRhX3JlYWR5X2NvbmZpZygmc3QtPmluZGlvX2Rldi0+ZGV2LAorCV9fbGlzM2wwMmRxX3dyaXRlX2RhdGFfcmVhZHlfY29uZmlnKCZzdC0+aGVscC5pbmRpb19kZXYtPmRldiwKIAkJCQkJICAgICZpaW9fZXZlbnRfZGF0YV9yZHlfdHJpZywKIAkJCQkJICAgIHN0YXRlKTsKIAlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKQEAgLTQzNyw3ICszNzQsNyBAQAogCQkvKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgcmVhZHkgZXZlbnRzICovCiAJCXJldCA9IGxpczNsMDJkcV9yZWFkX2FsbChzdCwgTlVMTCk7CiAJfQotCWxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgmc3QtPmluZGlvX2Rldi0+ZGV2LAorCWxpczNsMDJkcV9zcGlfcmVhZF9yZWdfOCgmc3QtPmhlbHAuaW5kaW9fZGV2LT5kZXYsCiAJCQkJIExJUzNMMDJEUV9SRUdfV0FLRV9VUF9TUkNfQUREUiwKIAkJCQkgJnQpOwogCXJldHVybiByZXQ7CkBAIC00OTUsMTQgKzQzMiwxNCBAQAogCWlmICghc3RhdGUtPnRyaWcpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3RhdGUtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdGF0ZS0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICAgICJsaXMzbDAyZHEtZGV2JWQiLAorCQkJCSAgICAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3RhdGUtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3RhdGUtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJsaXMzbDAyZHEtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKKwogCXN0YXRlLT50cmlnLT5kZXYucGFyZW50ID0gJnN0YXRlLT51cy0+ZGV2OwogCXN0YXRlLT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0YXRlLT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdGF0ZTsKQEAgLTU0MCwxMiArNDc3LDEyIEBACiAKIGludCBsaXMzbDAyZHFfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGlzM2wwMmRxX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7Ci0Jc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZzsKLQlJTklUX1dPUksoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZywgbGlzM2wwMmRxX3RyaWdnZXJfYmhfdG9fcmluZyk7Ci0JLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCisJaW50IHJldDsKKwlzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlICpoID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwogCisJSU5JVF9XT1JLKCZoLT53b3JrX3RyaWdnZXJfdG9fcmluZywgbGlzM2wwMmRxX3RyaWdnZXJfYmhfdG9fcmluZyk7CisJLyogU2V0IGRlZmF1bHQgc2NhbiBtb2RlICovCisJaC0+Z2V0X3JpbmdfZWxlbWVudCA9ICZsaXMzbDAyZHFfZ2V0X3JpbmdfZWxlbWVudDsKIAlpaW9fc2Nhbl9tYXNrX3NldChpbmRpb19kZXYsIGlpb19zY2FuX2VsX2FjY2VsX3gubnVtYmVyKTsKIAlpaW9fc2Nhbl9tYXNrX3NldChpbmRpb19kZXYsIGlpb19zY2FuX2VsX2FjY2VsX3kubnVtYmVyKTsKIAlpaW9fc2Nhbl9tYXNrX3NldChpbmRpb19kZXYsIGlpb19zY2FuX2VsX2FjY2VsX3oubnVtYmVyKTsKQEAgLTU1MywyNiArNDkwLDIxIEBACiAKIAlpbmRpb19kZXYtPnNjYW5fZWxfYXR0cnMgPSAmbGlzM2wwMmRxX3NjYW5fZWxfZ3JvdXA7CiAKLQlyaW5nID0gaWlvX3N3X3JiX2FsbG9jYXRlKGluZGlvX2Rldik7Ci0JaWYgKCFyaW5nKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCXJldHVybiByZXQ7Ci0JfQotCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7Ci0JLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwotCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPnByZWVuYWJsZSA9ICZsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZsaXMzbDAyZHFfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmbGlzM2wwMmRxX2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZTsKLQlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOworCWluZGlvX2Rldi0+cmluZyA9IGlpb19zd19yYl9hbGxvY2F0ZShpbmRpb19kZXYpOworCWlmICghaW5kaW9fZGV2LT5yaW5nKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKKwkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCisJaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJmluZGlvX2Rldi0+cmluZy0+YWNjZXNzKTsKKwlpbmRpb19kZXYtPnJpbmctPmJwZSA9IDI7CisJaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOworCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKKwlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmxpczNsMDJkcV9wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7OwotCX0KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZsaXMzbDAyZHFfcG9sbF9mdW5jX3RoOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwogCkBAIC01ODAsMjMgKzUxMiwzIEBACiAJaWlvX3N3X3JiX2ZyZWUoaW5kaW9fZGV2LT5yaW5nKTsKIAlyZXR1cm4gcmV0OwogfQotCi1pbnQgbGlzM2wwMmRxX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19Ci0KLXZvaWQgbGlzM2wwMmRxX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIocmluZyk7Ci19Ci0KLWludCBsaXMzbDAyZHFfc2V0X3JpbmdfbGVuZ3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIGludCBsZW5ndGgpCi17Ci0JLyogU2V0IHNlbnNpYmxlIGRlZmF1bHRzIGZvciB0aGUgcmluZyBidWZmZXIgKi8KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2xlbmd0aCkKLQkJcmV0dXJuIGluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9sZW5ndGgoaW5kaW9fZGV2LT5yaW5nLCA1MDApOwotCXJldHVybiAwOwotfQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKaW5kZXggZTUzMjE5OS4uMDlkOTQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwLmgKQEAgLTI0Miw3ICsyNDIsNyBAQAogCXZhbCB8PSAodmFsICYgKDEgPDwgMTIpKSA/IDB4RTAwMCA6IDA7CiAKIAlyZXR1cm4gdmFsOwotfTsKK30KIAogc3RhdGljIGlubGluZSBpbnQgc2NhMzAwMF8xM2JpdF9jb252ZXJ0KHVpbnQ4X3QgbXNiLCB1aW50OF90IGxzYikKIHsKQEAgLTI1Myw3ICsyNTMsNyBAQAogCXZhbCB8PSAodmFsICYgKDEgPDwgMTIpKSA/IDB4RTAwMCA6IDA7CiAKIAlyZXR1cm4gdmFsOwotfTsKK30KIAogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgpAQCAtMjg2LDE1ICsyODYsMTkgQEAKIHZvaWQgc2NhMzAwMF9yaW5nX2ludF9wcm9jZXNzKHU4IHZhbCwgc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NhMzAwMF9yZWdpc3Rlcl9yaW5nX2Z1bmNzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIHNjYTMwMDBfcmVnaXN0ZXJfcmluZ19mdW5jcyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworfQogCiBzdGF0aWMgaW5saW5lCiBpbnQgc2NhMzAwMF9yZWdpc3Rlcl9yaW5nX2FjY2Vzc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCXJldHVybiAwOwotfTsKK30KIAotc3RhdGljIGlubGluZSB2b2lkIHNjYTMwMDBfcmluZ19pbnRfcHJvY2Vzcyh1OCB2YWwsIHZvaWQgKnJpbmcpIHt9Oworc3RhdGljIGlubGluZSB2b2lkIHNjYTMwMDBfcmluZ19pbnRfcHJvY2Vzcyh1OCB2YWwsIHZvaWQgKnJpbmcpCit7Cit9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hY2NlbC9zY2EzMDAwX2NvcmUuYwppbmRleCBkNGY4MmMzLi5iNzhiNmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FjY2VsL3NjYTMwMDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWNjZWwvc2NhMzAwMF9jb3JlLmMKQEAgLTM4Nyw3ICszODcsNyBAQAogCWNhc2UgU0NBMzAwMF9PUF9NT0RFX0JZUEFTUzoKIAkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiLCAxIC0gYnlwYXNzIG1vZGUiKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJc3dpdGNoIChzdC0+aW5mby0+b3B0aW9uX21vZGVfMikgewogCWNhc2UgU0NBMzAwMF9PUF9NT0RFX1dJREU6CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiwgMiAtIHdpZGUgbW9kZSIpOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJCWNhc2UgU0NBMzAwMF9PUF9NT0RFX0JZUEFTUzoKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIjEgLSBieXBhc3MgbW9kZVxuIik7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlicmVhazsKIAljYXNlIFNDQTMwMDBfTUVBU19NT0RFX09QXzI6CiAJCXN3aXRjaCAoc3QtPmluZm8tPm9wdGlvbl9tb2RlXzIpIHsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIGVycm9yX3JldDoKIAltdXRleF91bmxvY2soJnN0LT5sb2NrKTsKQEAgLTU1OSw3ICs1NTksNyBAQAogCQkJICAgICAgIHN0LT5pbmZvLT5vcHRpb25fbW9kZV8yX2ZyZXEvMiwKIAkJCSAgICAgICBzdC0+aW5mby0+b3B0aW9uX21vZGVfMl9mcmVxLzQpOwogCQlicmVhazsKLQl9OworCX0KIAlrZnJlZShyeCk7CiAJcmV0dXJuIGxlbjsKIGVycm9yX3JldDoKQEAgLTU5MCw3ICs1OTAsNyBAQAogCWNhc2UgU0NBMzAwMF9NRUFTX01PREVfT1BfMjoKIAkJKmJhc2VfZnJlcSA9IGluZm8tPm9wdGlvbl9tb2RlXzJfZnJlcTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJa2ZyZWUocngpOwogZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CkBAIC02MjcsOCArNjI3LDggQEAKIAkJY2FzZSAweDAyOgogCQkJbGVuID0gc3ByaW50ZihidWYsICIlZFxuIiwgYmFzZV9mcmVxLzQpOwogCQkJYnJlYWs7Ci0JfTsKLQkJCWtmcmVlKHJ4KTsKKwl9CisJa2ZyZWUocngpOwogCXJldHVybiBsZW47CiBlcnJvcl9yZXRfbXV0OgogCW11dGV4X3VubG9jaygmc3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQppbmRleCAxOGM5Mzc2Li42ODg1MTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLQorIwogIyBNYWtlZmlsZSBmb3IgaW5kdXN0cmlhbCBJL08gQURDIGRyaXZlcnMKICMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWRjLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaAppbmRleCAwNGViMTZmLi43ODQxZTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZGMuaApAQCAtMjYsMyArMjYsNiBAQAogCQkJICAgICAgX3Nob3csCQkJCQlcCiAJCQkgICAgICBOVUxMLAkJCQkJXAogCQkJICAgICAgX2FkZHIpCisKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfSU5fSElHSF9USFJFU0goYSkgKElJT19FVkVOVF9DT0RFX0FEQ19CQVNFICArIGEpCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goYSkgKElJT19FVkVOVF9DT0RFX0FEQ19CQVNFICArIGEgKyAzMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjMuaAppbmRleCA3MmNmMzY3Li44ZjBmZTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2My5oCkBAIC0zMiwxNCArMzIsNiBAQAogCiAvKiBTcGVjaWZpYyB0byB0aGUgbWF4MTM2MyAqLwogI2RlZmluZSBNQVgxMzYzX01PTl9SRVNFVF9DSEFOKGEpICgxIDw8ICgoYSkgKyA0KSkKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzEzM2tzcHMJCTAKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzY2XzVrc3BzCQkweDAyCi0jZGVmaW5lIE1BWDEzNjNfTU9OX0NPTlZfUkFURV8zM18za3NwcwkJMHgwNAotI2RlZmluZSBNQVgxMzYzX01PTl9DT05WX1JBVEVfMTZfNmtzcHMJCTB4MDYKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzhfM2tzcHMJCTB4MDgKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzRfMmtzcHMJCTB4MEEKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzJfMGtzcHMJCTB4MEMKLSNkZWZpbmUgTUFYMTM2M19NT05fQ09OVl9SQVRFXzFfMGtzcHMJCTB4MEUKICNkZWZpbmUgTUFYMTM2M19NT05fSU5UX0VOQUJMRQkJCTB4MDEKIAogLyogZGVmaW5lZCBmb3IgcmVhZGFiaWxpdHkgcmVhc29ucyAqLwpAQCAtNjcsOSArNTksOCBAQAogCiAvKioKICAqIHN0cnVjdCBtYXgxMzYzX21vZGUgLSBzY2FuIG1vZGUgaW5mb3JtYXRpb24KLSAqIEBuYW1lOglOYW1lIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjYW4gbW9kZS4KICAqIEBjb25mOglUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbiByZWdpc3RlcgotICogQG51bXZhbHM6CVRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkIGJ5IGEgc2luZ2xlIHNjYW4KKyAqIEBtb2RlbWFzazoJQml0IG1hc2sgY29ycmVzcG9uZGluZyB0byBjaGFubmVscyBlbmFibGVkIGluIHRoaXMgbW9kZQogICovCiBzdHJ1Y3QgbWF4MTM2M19tb2RlIHsKIAlpbnQ4X3QJCWNvbmY7CkBAIC0xMjIsMTUgKzExMyw2IEBACiAJCQkubW9kZW1hc2sgPSBfbWFzawkJCQlcCiB9CiAKLS8qIE5vdCBjdXJyZW50bHkgaGFuZGxlZCAqLwotI2RlZmluZSBNQVgxMzYzX01PREVfTU9OSVRPUiB7CQkJCQlcCi0JCS5uYW1lID0gIm1vbml0b3IiLAkJCQlcCi0JCQkuY29uZiA9IE1BWDEzNjNfQ0hBTk5FTF9TRUwoMykJCVwKLQkJCXwgTUFYMTM2M19DT05GSUdfU0NBTl9NT05JVE9SX01PREUJXAotCQkJfCBNQVgxMzYzX0NPTkZJR19TRSwJCQlcCi0JCQkubnVtdmFscyA9IDEwLAkJCQlcCi0JCX0KLQogLyogVGhpcyBtYXkgc2VlbSBhbiBvdmVybHkgbG9uZyB3aW5kZWQgd2F5IHRvIGRvIHRoaXMsIGJ1dCBhdCBsZWFzdCBpdCBtYWtlcwogICogY2xlYXIgd2hhdCBhbGwgdGhlIHZhcmlvdXMgb3B0aW9ucyBhY3R1YWxseSBkby4gQWx0ZXJuYXRpdmUgc3VnZ2VzdGlvbnMKICAqIHRoYXQgZG9uJ3QgcmVxdWlyZSB1c2VyIHRvIGhhdmUgaW50aW1hdGUga25vd2xlZGdlIG9mIHRoZSBjaGlwIHdlbGNvbWVkLgpAQCAtMTQ3LDcgKzEyOSw3IEBACiAJbWF4MTM2M19pbjFtaW4wLCBtYXgxMzYzX2luM21pbjIsCiAJbWF4MTM2M19pbjVtaW40LCBtYXgxMzYzX2luN21pbjYsCiAJbWF4MTM2M19pbjltaW44LCBtYXgxMzYzX2luMTFtaW4xMCwKLQl9OworfTsKIAogLyogVGhpcyBtdXN0IGJlIG1haW50YWluZWQgYWxvbmcgc2lkZSB0aGUgbWF4MTM2M19tb2RlX3RhYmxlIGluIG1heDEzNjNfY29yZSAqLwogZW51bSBtYXgxMzYzX21vZGVzIHsKQEAgLTE3OSw3ICsxNjEsNiBAQAogICogQGRlZmF1bHRfbW9kZToJdGhlIHNjYW4gbW9kZSBpbiB3aGljaCB0aGUgY2hpcCBzdGFydHMgdXAKICAqLwogc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvIHsKLQljb25zdCBjaGFyCQkJKm5hbWU7CiAJdTgJCQkJbnVtX2lucHV0czsKIAl1OAkJCQliaXRzOwogCXUxNgkJCQlpbnRfdnJlZl9tdjsKQEAgLTE5MSw3ICsxNzIsNiBAQAogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAJCSpzY2FuX2F0dHJzOwogfTsKIAotCiAvKioKICAqIHN0cnVjdCBtYXgxMzYzX3N0YXRlIC0gZHJpdmVyIGluc3RhbmNlIHNwZWNpZmljIGRhdGEKICAqIEBpbmRpb19kZXY6CQl0aGUgaW5kdXN0cmlhbCBJL08gZGV2aWNlCkBAIC0yMDQsMTIgKzE4NCwyMCBAQAogICogQHBvbGxfd29yazoJCWJvdHRvbSBoYWxmIG9mIHBvbGxpbmcgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBwcm90ZWN0X3Jpbmc6CXVzZWQgdG8gZW5zdXJlIG9ubHkgb25lIHBvbGxpbmcgYmggcnVubmluZyBhdCBhIHRpbWUKICAqIEByZWc6CQlzdXBwbHkgcmVndWxhdG9yCisgKiBAbW9uaXRvcl9vbjoJCXdoZXRoZXIgbW9uaXRvciBtb2RlIGlzIGVuYWJsZWQKKyAqIEBtb25pdG9yX3NwZWVkOglwYXJhbWV0ZXIgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgbW9uaXRvciBzcGVlZCBzZXR0aW5nCisgKiBAbWFza19oaWdoOgkJYml0bWFzayBmb3IgZW5hYmxlZCBoaWdoIHRocmVzaG9sZHMKKyAqIEBtYXNrX2xvdzoJCWJpdG1hc2sgZm9yIGVuYWJsZWQgbG93IHRocmVzaG9sZHMKKyAqIEB0aHJlc2hfaGlnaDoJaGlnaCB0aHJlc2hvbGQgdmFsdWVzCisgKiBAdGhyZXNoX2xvdzoJCWxvdyB0aHJlc2hvbGQgdmFsdWVzCisgKiBAbGFzdF90aW1lc3RhbXA6CXRpbWVzdGFtcCBvZiBsYXN0IGV2ZW50IGludGVycnVwdAorICogQHRocmVzaF93b3JrOgliaCB3b3JrIHN0cnVjdHVyZSBmb3IgZXZlbnQgaGFuZGxpbmcKICAqLwogc3RydWN0IG1heDEzNjNfc3RhdGUgewogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaTJjX2NsaWVudAkJKmNsaWVudDsKLQljaGFyCQkJCXNldHVwYnl0ZTsKLQljaGFyCQkJCWNvbmZpZ2J5dGU7CisJdTgJCQkJc2V0dXBieXRlOworCXU4CQkJCWNvbmZpZ2J5dGU7CiAJY29uc3Qgc3RydWN0IG1heDEzNjNfY2hpcF9pbmZvCSpjaGlwX2luZm87CiAJY29uc3Qgc3RydWN0IG1heDEzNjNfbW9kZQkqY3VycmVudF9tb2RlOwogCXUzMgkJCQlyZXF1ZXN0ZWRtYXNrOwpAQCAtMjE3LDYgKzIwNSwxOCBAQAogCWF0b21pY190CQkJcHJvdGVjdF9yaW5nOwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CiAJc3RydWN0IHJlZ3VsYXRvcgkJKnJlZzsKKworCS8qIFVzaW5nIG1vbml0b3IgbW9kZXMgYW5kIGJ1ZmZlciBhdCB0aGUgc2FtZSB0aW1lIGlzCisJICAgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgKi8KKwlib29sCQkJCW1vbml0b3Jfb247CisJdW5zaWduZWQgaW50CQkJbW9uaXRvcl9zcGVlZDozOworCXU4CQkJCW1hc2tfaGlnaDsKKwl1OAkJCQltYXNrX2xvdzsKKwkvKiA0eCB1bmlwb2xhciBmaXJzdCB0aGVuIHRoZSBmb3VycyBiaXBvbGFyIG9uZXMgKi8KKwlzMTYJCQkJdGhyZXNoX2hpZ2hbOF07CisJczE2CQkJCXRocmVzaF9sb3dbOF07CisJczY0CQkJCWxhc3RfdGltZXN0YW1wOworCXN0cnVjdCB3b3JrX3N0cnVjdAkJdGhyZXNoX3dvcms7CiB9OwogCiBjb25zdCBzdHJ1Y3QgbWF4MTM2M19tb2RlCkBAIC0yMzAsMzIgKzIzMCwyMSBAQAogaW50IG1heDEzNjNfcmVnaXN0ZXJfcmluZ19mdW5jc19hbmRfaW5pdChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIHZvaWQgbWF4MTM2M19yaW5nX2NsZWFudXAoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiAKLWludCBtYXgxMzYzX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgbWF4MTM2M191bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLQogI2Vsc2UgLyogQ09ORklHX01BWDEzNjNfUklOR19CVUZGRVIgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIG1heDEzNjNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1heDEzNjNfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19OwotCiBpbnQgbWF4MTM2M19zaW5nbGVfY2hhbm5lbF9mcm9tX3JpbmcobG9uZyBtYXNrLCBzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCiB7CiAJcmV0dXJuIC1FSU5WQUw7Ci19OwotCit9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBtYXgxMzYzX3JlZ2lzdGVyX3JpbmdfZnVuY3NfYW5kX2luaXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKLX07Cit9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXgxMzYzX3JpbmdfY2xlYW51cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KSB7fTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXgxMzYzX3JpbmdfY2xlYW51cChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworfQogI2VuZGlmIC8qIENPTkZJR19NQVgxMzYzX1JJTkdfQlVGRkVSICovCiAjZW5kaWYgLyogX01BWDEzNjNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL21heDEzNjNfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKaW5kZXggOTA1Zjg1Ni4uNjQzNWU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19jb3JlLmMKQEAgLTE4LDIxICsxOCwxOSBAQAogICAqCiAgICogTm90IGN1cnJlbnRseSBpbXBsZW1lbnRlZC4KICAgKgotICAqIC0gTW9uaXRvciBpbnRlcnJydXB0IGdlbmVyYXRpb24uCiAgICogLSBDb250cm9sIG9mIGludGVybmFsIHJlZmVyZW5jZS4KICAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpbmNsdWRlICIuLi9paW8uaCIKICNpbmNsdWRlICIuLi9zeXNmcy5oIgpAQCAtNDgsNyArNDYsNyBAQAogCUlJT19TQ0FOX0VMX0MoaW4jI251bWJlciwgbnVtYmVyLCBJSU9fVU5TSUdORUQoMTYpLCAwLCBOVUxMKTsKICNkZWZpbmUgTUFYMTM2M19TQ0FOX0VMX0QocCwgbiwgbnVtYmVyKQkJCQkJXAogCUlJT19TQ0FOX05BTUVEX0VMX0MoaW4jI3AjI20jI2luIyNuLCBpbiMjcC1pbiMjbiwJCVwKLQkJCW51bWJlciwgSUlPX1NJR05FRCgxNiksIDAgLCBOVUxMKTsKKwkJCW51bWJlciwgSUlPX1NJR05FRCgxNiksIDAsIE5VTEwpOwogCiBzdGF0aWMgTUFYMTM2M19TQ0FOX0VMKDApOwogc3RhdGljIE1BWDEzNjNfU0NBTl9FTCgxKTsKQEAgLTE0OCw3ICsxNDYsNyBAQAogCQkJICAgICAgbWFzaykpCiAJCQkJcmV0dXJuICZtYXgxMzYzX21vZGVfdGFibGVbY2ktPm1vZGVfbGlzdFtpXV07CiAJcmV0dXJuIE5VTEw7Ci19OworfQogCiBzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfcHJlY2lzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTE2Nyw3ICsxNjUsNyBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZDIpCiB7CiAJaW50IHJldDsKLQl1OCAqdHhfYnVmID0ga21hbGxvYygyICwgR0ZQX0tFUk5FTCk7CisJdTggKnR4X2J1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIXR4X2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDYsNiArMjA0LDE2IEBACiAJbG9uZyBtYXNrOwogCiAJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwkvKgorCSAqIElmIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkLCB0aGUgbWV0aG9kIGZvciByZWFkaW5nIGEgc2luZ2xlCisJICogY2hhbm5lbCB3aWxsIGhhdmUgdG8gYmUgcmF0aGVyIGRpZmZlcmVudCBhbmQgaGFzIG5vdCB5ZXQKKwkgKiBiZWVuIGltcGxlbWVudGVkLgorCSAqLworCWlmIChzdC0+bW9uaXRvcl9vbikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKwogCS8qIElmIHJpbmcgYnVmZmVyIGNhcHR1cmUgaXMgb2NjdXJpbmcsIHF1ZXJ5IHRoZSBidWZmZXIgKi8KIAlpZiAoaWlvX3JpbmdfZW5hYmxlZChkZXZfaW5mbykpIHsKIAkJbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVt0aGlzX2F0dHItPmFkZHJlc3NdLm1vZGVtYXNrOwpAQCAtMzA1LDcgKzMxMyw3IEBACiB7CiAJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHN0LT5jaGlwX2luZm8tPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzdC0+Y2xpZW50LT5uYW1lKTsKIH0KIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBtYXgxMzYzX3Nob3dfbmFtZSwgTlVMTCwgMCk7CkBAIC01NTIsOCArNTYwLDcgQEAKIAogLyogbWF4MTM2MyBhbmQgbWF4MTM2OCB0ZXN0ZWQgLSByZXN0IGZyb20gZGF0YSBzaGVldCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBtYXgxMzYzX2NoaXBfaW5mbyBtYXgxMzYzX2NoaXBfaW5mb190YmxbXSA9IHsKLQl7Ci0JCS5uYW1lID0gIm1heDEzNjEiLAorCVttYXgxMzYxXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNTYzLDggKzU3MCw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzYyIiwKKwl9LAorCVttYXgxMzYyXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNTc0LDggKzU4MSw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzYzIiwKKwl9LAorCVttYXgxMzYzXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNTg1LDggKzU5Miw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMzY0IiwKKwl9LAorCVttYXgxMzY0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNTk2LDggKzYwMyw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMDM2IiwKKwl9LAorCVttYXgxMDM2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC02MDYsOCArNjEzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDEwMzciLAorCX0sCisJW21heDEwMzddID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTYxNiw4ICs2MjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTAzOCIsCisJfSwKKwlbbWF4MTAzOF0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTYyNiw4ICs2MzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDEwMzkiLAorCX0sCisJW21heDEwMzldID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC02MzYsOCArNjQzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM2IiwKKwl9LAorCVttYXgxMTM2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNjQ2LDggKzY1Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM3IiwKKwl9LAorCVttYXgxMTM3XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNjU2LDggKzY2Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTM4IiwKKwl9LAorCVttYXgxMTM4XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTY2Niw4ICs2NzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExMzkiLAorCX0sCisJW21heDExMzldID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNjc2LDggKzY4Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzNiIsCisJfSwKKwlbbWF4MTIzNl0gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTY4Niw4ICs2OTMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzNyIsCisJfSwKKwlbbWF4MTIzN10gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTY5Niw4ICs3MDMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTIzOCIsCisJfSwKKwlbbWF4MTIzOF0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gMTIsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC03MDYsOCArNzEzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMjM5IiwKKwl9LAorCVttYXgxMjM5XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTcxNiw4ICs3MjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjAwIiwKKwl9LAorCVttYXgxMTYwMF0gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNzI2LDggKzczMyw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwMSIsCisJfSwKKwlbbWF4MTE2MDFdID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gOCwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTczNiw4ICs3NDMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDIiLAorCX0sCisJW21heDExNjAyXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC03NDYsOCArNzUzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDMiLAorCX0sCisJW21heDExNjAzXSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDgsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC03NTYsOCArNzYzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDQiLAorCX0sCisJW21heDExNjA0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSA0MDk4LApAQCAtNzY2LDggKzc3Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDUiLAorCX0sCisJW21heDExNjA1XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSA4LAogCQkuaW50X3ZyZWZfbXYgPSAyMDQ4LApAQCAtNzc2LDggKzc4Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MDYiLAorCX0sCisJW21heDExNjA2XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA0LAogCQkuYml0cyA9IDEwLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtNzg2LDggKzc5Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMywKIAkJLmRldl9hdHRycyA9ICZtYXgxMzYzX2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMzYzX3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwNyIsCisJfSwKKwlbbWF4MTE2MDddID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC03OTYsOCArODAzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjA4IiwKKwl9LAorCVttYXgxMTYwOF0gPSB7CiAJCS5udW1faW5wdXRzID0gOCwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5NiwKQEAgLTgwNiw4ICs4MTMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDExNjA4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYwOSIsCisJfSwKKwlbbWF4MTE2MDldID0gewogCQkubnVtX2lucHV0cyA9IDgsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC04MTYsOCArODIzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG83LAogCQkuZGV2X2F0dHJzID0gJm1heDExNjA4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMTYwOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTAiLAorCX0sCisJW21heDExNjEwXSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMCwKIAkJLmludF92cmVmX212ID0gNDA5OCwKQEAgLTgyNiw4ICs4MzMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzExLAogCQkuZGV2X2F0dHJzID0gJm1heDEyMzhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEyMzhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjExIiwKKwl9LAorCVttYXgxMTYxMV0gPSB7CiAJCS5udW1faW5wdXRzID0gMTIsCiAJCS5iaXRzID0gMTAsCiAJCS5pbnRfdnJlZl9tdiA9IDIwNDgsCkBAIC04MzYsOCArODQzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8xMSwKIAkJLmRldl9hdHRycyA9ICZtYXgxMjM4X2Rldl9hdHRyX2dyb3VwLAogCQkuc2Nhbl9hdHRycyA9ICZtYXgxMjM4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYxMiIsCisJfSwKKwlbbWF4MTE2MTJdID0gewogCQkubnVtX2lucHV0cyA9IDQsCiAJCS5iaXRzID0gMTIsCiAJCS5pbnRfdnJlZl9tdiA9IDQwOTYsCkBAIC04NDYsOCArODUzLDggQEAKIAkJLmRlZmF1bHRfbW9kZSA9IHMwdG8zLAogCQkuZGV2X2F0dHJzID0gJm1heDEzNjNfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDEzNjNfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjEzIiwKKwl9LAorCVttYXgxMTYxM10gPSB7CiAJCS5udW1faW5wdXRzID0gNCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg1Niw4ICs4NjMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzMsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTM2M19kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTM2M19zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTQiLAorCX0sCisJW21heDExNjE0XSA9IHsKIAkJLm51bV9pbnB1dHMgPSA4LAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk2LApAQCAtODY2LDggKzg3Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvNywKIAkJLmRldl9hdHRycyA9ICZtYXgxMTYwOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTE2MDhfc2Nhbl9lbF9ncm91cCwKLQl9LCB7Ci0JCS5uYW1lID0gIm1heDExNjE1IiwKKwl9LAorCVttYXgxMTYxNV0gPSB7CiAJCS5udW1faW5wdXRzID0gOCwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg3Niw4ICs4ODMsOCBAQAogCQkuZGVmYXVsdF9tb2RlID0gczB0bzcsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTE2MDhfZGV2X2F0dHJfZ3JvdXAsCiAJCS5zY2FuX2F0dHJzID0gJm1heDExNjA4X3NjYW5fZWxfZ3JvdXAsCi0JfSwgewotCQkubmFtZSA9ICJtYXgxMTYxNiIsCisJfSwKKwlbbWF4MTE2MTZdID0gewogCQkubnVtX2lucHV0cyA9IDEyLAogCQkuYml0cyA9IDEyLAogCQkuaW50X3ZyZWZfbXYgPSA0MDk4LApAQCAtODg2LDggKzg5Myw4IEBACiAJCS5kZWZhdWx0X21vZGUgPSBzMHRvMTEsCiAJCS5kZXZfYXR0cnMgPSAmbWF4MTIzOF9kZXZfYXR0cl9ncm91cCwKIAkJLnNjYW5fYXR0cnMgPSAmbWF4MTIzOF9zY2FuX2VsX2dyb3VwLAotCX0sIHsKLQkJLm5hbWUgPSAibWF4MTE2MTciLAorCX0sCisJW21heDExNjE3XSA9IHsKIAkJLm51bV9pbnB1dHMgPSAxMiwKIAkJLmJpdHMgPSAxMiwKIAkJLmludF92cmVmX212ID0gMjA0OCwKQEAgLTg5OSw2ICs5MDYsNjY4IEBACiAJfQogfTsKIAorc3RhdGljIGNvbnN0IGludCBtYXgxMzYzX21vbml0b3Jfc3BlZWRzW10gPSB7IDEzMzAwMCwgNjY1MDAwLCAzMzMwMCwgMTY2MDAsCisJCQkJCSAgICAgIDgzMDAsIDQyMDAsIDIwMDAsIDEwMDAgfTsKKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19tb25pdG9yX3Nob3dfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1heDEzNjNfbW9uaXRvcl9zcGVlZHNbc3QtPm1vbml0b3Jfc3BlZWRdKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19tb25pdG9yX3N0b3JlX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCWludCBpLCByZXQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4MTM2M19tb25pdG9yX3NwZWVkcyk7IGkrKykKKwkJaWYgKHZhbCA9PSBtYXgxMzYzX21vbml0b3Jfc3BlZWRzW2ldKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCWlmICghZm91bmQpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKwlzdC0+bW9uaXRvcl9zcGVlZCA9IGk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBJSU9fREVWX0FUVFJfU0FNUF9GUkVRKFNfSVJVR08gfCBTX0lXVVNSLAorCQkJbWF4MTM2M19tb25pdG9yX3Nob3dfZnJlcSwKKwkJCW1heDEzNjNfbW9uaXRvcl9zdG9yZV9mcmVxKTsKKworc3RhdGljIElJT19DT05TVF9BVFRSKHNhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUsCisJCSIxMzMwMDAgNjY1MDAwIDMzMzAwIDE2NjAwIDgzMDAgNDIwMCAyMDAwIDEwMDAiKTsKKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zaG93X3RocmVzaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmLAorCQkJCWJvb2wgaGlnaCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisKKwlpZiAoaGlnaCkKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSk7CisJZWxzZQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKKwkJCXN0LT50aHJlc2hfbG93W3RoaXNfYXR0ci0+YWRkcmVzcyAmIDB4N10pOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBtYXgxMzYzX3Nob3dfdGhyZXNoKGRldiwgYXR0ciwgYnVmLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfc2hvd190aHJlc2hfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIG1heDEzNjNfc2hvd190aHJlc2goZGV2LCBhdHRyLCBidWYsIHRydWUpOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF91bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCXNpemVfdCBsZW4sCisJCQkJCWJvb2wgaGlnaCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoc3QtPmNoaXBfaW5mby0+Yml0cykgeworCWNhc2UgMTA6CisJCWlmICh2YWwgPiAweDNGRikKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDEyOgorCQlpZiAodmFsID4gMHhGRkYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChoaWdoKSB7CisJY2FzZSAxOgorCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddID0gdmFsOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQkJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWF4MTM2M19zdG9yZV90aHJlc2hfdW5zaWduZWQoZGV2LCBhdHRyLCBidWYsIGxlbiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd191bnNpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3Vuc2lnbmVkKGRldiwgYXR0ciwgYnVmLCBsZW4sIGZhbHNlKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJc2l6ZV90IGxlbiwKKwkJCQkJYm9vbCBoaWdoKQoreworCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoZGV2X2luZm8pOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKwlsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKHN0LT5jaGlwX2luZm8tPmJpdHMpIHsKKwljYXNlIDEwOgorCQlpZiAodmFsIDwgLTUxMiB8fCB2YWwgPiA1MTEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJaWYgKHZhbCA8IC0yMDQ4IHx8IHZhbCA+IDIwNDcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChoaWdoKSB7CisJY2FzZSAxOgorCQlzdC0+dGhyZXNoX2hpZ2hbdGhpc19hdHRyLT5hZGRyZXNzXSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlzdC0+dGhyZXNoX2xvd1t0aGlzX2F0dHItPmFkZHJlc3MgJiAweDddID0gdmFsOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBtYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgbGVuLCB0cnVlKTsKK30KKworc3RhdGljIHNzaXplX3QgbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIG1heDEzNjNfc3RvcmVfdGhyZXNoX3NpZ25lZChkZXYsIGF0dHIsIGJ1ZiwgbGVuLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4wX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAwKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAxKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4xX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAxKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4yX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAyKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4yX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAyKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4zX3RocmVzaF9oaWdoX3ZhbHVlLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJbWF4MTM2M19zaG93X3RocmVzaF9oaWdoLAorCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3Vuc2lnbmVkLCAzKTsKK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoaW4zX3RocmVzaF9sb3dfdmFsdWUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQltYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJbWF4MTM2M19zdG9yZV90aHJlc2hfbG93X3Vuc2lnbmVkLCAzKTsKKworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjBtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4wLWluMV90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMG1pbjFfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMC1pbjFfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDQpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjJtaW4zX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4yLWluM190aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMm1pbjNfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMi1pbjNfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDUpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjFtaW4wX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4xLWluMF90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNik7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluMW1pbjBfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMS1pbjBfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDYpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUl9OQU1FRChpbjNtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLAorCQkJaW4zLWluMl90aHJlc2hfaGlnaF92YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2hpZ2gsCisJCQltYXgxMzYzX3N0b3JlX3RocmVzaF9oaWdoX3NpZ25lZCwgNyk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSX05BTUVEKGluM21pbjJfdGhyZXNoX2xvd192YWx1ZSwKKwkJCWluMy1pbjJfdGhyZXNoX2xvd192YWx1ZSwKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBtYXgxMzYzX3Nob3dfdGhyZXNoX2xvdywKKwkJCW1heDEzNjNfc3RvcmVfdGhyZXNoX2xvd19zaWduZWQsIDcpOworCitzdGF0aWMgaW50IG1heDEzNjNfaW50X3RoKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbywKKwkJCWludCBpbmRleCwKKwkJCXM2NCB0aW1lc3RhbXAsCisJCQlpbnQgbm90X3Rlc3QpCit7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gZGV2X2luZm8tPmRldl9kYXRhOworCisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZXN0YW1wOworCXNjaGVkdWxlX3dvcmsoJnN0LT50aHJlc2hfd29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1heDEzNjNfdGhyZXNoX2hhbmRsZXJfYmgoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCit7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHdvcmtfcywgc3RydWN0IG1heDEzNjNfc3RhdGUsCisJCQkJCQl0aHJlc2hfd29yayk7CisJdTggcng7CisJdTggdHhbMl0gPSB7IHN0LT5zZXR1cGJ5dGUsCisJCSAgICAgTUFYMTM2M19NT05fSU5UX0VOQUJMRSB8IChzdC0+bW9uaXRvcl9zcGVlZCA8PCAxKSB8IDB4RjAgfTsKKworCWkyY19tYXN0ZXJfcmVjdihzdC0+Y2xpZW50LCAmcngsIDEpOworCWlmIChyeCAmICgxIDw8IDApKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgzKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgMSkpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgzKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgMikpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9MT1dfVEhSRVNIKDIpLAorCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlpZiAocnggJiAoMSA8PCAzKSkKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJCUlJT19FVkVOVF9DT0RFX0lOX0hJR0hfVEhSRVNIKDIpLAorCQkJc3QtPmxhc3RfdGltZXN0YW1wKTsKKwlpZiAocnggJiAoMSA8PCA0KSkKKwkJaWlvX3B1c2hfZXZlbnQoc3QtPmluZGlvX2RldiwgMCwKKwkJCUlJT19FVkVOVF9DT0RFX0lOX0xPV19USFJFU0goMSksCisJCQlzdC0+bGFzdF90aW1lc3RhbXApOworCWlmIChyeCAmICgxIDw8IDUpKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fSElHSF9USFJFU0goMSksCisJCQlzdC0+bGFzdF90aW1lc3RhbXApOworCWlmIChyeCAmICgxIDw8IDYpKQorCQlpaW9fcHVzaF9ldmVudChzdC0+aW5kaW9fZGV2LCAwLAorCQkJSUlPX0VWRU5UX0NPREVfSU5fTE9XX1RIUkVTSCgwKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJaWYgKHJ4ICYgKDEgPDwgNykpCisJCWlpb19wdXNoX2V2ZW50KHN0LT5pbmRpb19kZXYsIDAsCisJCQlJSU9fRVZFTlRfQ09ERV9JTl9ISUdIX1RIUkVTSCgwKSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisJZW5hYmxlX2lycShzdC0+Y2xpZW50LT5pcnEpOworCWkyY19tYXN0ZXJfc2VuZChzdC0+Y2xpZW50LCB0eCwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKKwlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOworCWludCB2YWw7CisKKwltdXRleF9sb2NrKCZkZXZfaW5mby0+bWxvY2spOworCWlmICh0aGlzX2F0dHItPm1hc2sgJiAweDgpCisJCXZhbCA9ICgxIDw8ICh0aGlzX2F0dHItPm1hc2sgJiAweDcpKSAmIHN0LT5tYXNrX2xvdzsKKwllbHNlCisJCXZhbCA9ICgxIDw8IHRoaXNfYXR0ci0+bWFzaykgJiBzdC0+bWFza19oaWdoOworCW11dGV4X3VubG9jaygmZGV2X2luZm8tPm1sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIXZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4MTM2M19tb25pdG9yX21vZGVfdXBkYXRlKHN0cnVjdCBtYXgxMzYzX3N0YXRlICpzdCwgaW50IGVuYWJsZWQpCit7CisJdTggKnR4X2J1ZjsKKwlpbnQgcmV0LCBpID0gMywgajsKKwl1bnNpZ25lZCBsb25nIG51bWVsZW1lbnRzOworCWludCBsZW47CisJbG9uZyBtb2RlbWFzazsKKworCWlmICghZW5hYmxlZCkgeworCQkvKiB0cmFuc2l0aW9uIHRvIHJpbmcgY2FwdHVyZSBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCAqLworCQlzdC0+c2V0dXBieXRlICY9IH5NQVgxMzYzX1NFVFVQX01PTklUT1JfU0VUVVA7CisJCXN0LT5jb25maWdieXRlICY9IH5NQVgxMzYzX1NDQU5fTUFTSzsKKwkJc3QtPm1vbml0b3Jfb24gPSBmYWxzZTsKKwkJcmV0dXJuIG1heDEzNjNfd3JpdGVfYmFzaWNfY29uZmlnKHN0LT5jbGllbnQsCisJCQkJCQlzdC0+c2V0dXBieXRlLAorCQkJCQkJc3QtPmNvbmZpZ2J5dGUpOworCX0KKworCS8qIEVuc3VyZSB3ZSBhcmUgaW4gdGhlIHJlbGV2YW50IG1vZGUgKi8KKwlzdC0+c2V0dXBieXRlIHw9IE1BWDEzNjNfU0VUVVBfTU9OSVRPUl9TRVRVUDsKKwlzdC0+Y29uZmlnYnl0ZSAmPSB+KE1BWDEzNjNfQ0hBTk5FTF9TRUxfTUFTSworCQkJICAgIHwgTUFYMTM2M19TQ0FOX01BU0sKKwkJCXwgTUFYMTM2M19TRV9ERV9NQVNLKTsKKwlzdC0+Y29uZmlnYnl0ZSB8PSBNQVgxMzYzX0NPTkZJR19TQ0FOX01PTklUT1JfTU9ERTsKKwlpZiAoKHN0LT5tYXNrX2xvdyB8IHN0LT5tYXNrX2hpZ2gpICYgMHgwRikgeworCQlzdC0+Y29uZmlnYnl0ZSB8PSBtYXgxMzYzX21vZGVfdGFibGVbczB0bzNdLmNvbmY7CisJCW1vZGVtYXNrID0gbWF4MTM2M19tb2RlX3RhYmxlW3MwdG8zXS5tb2RlbWFzazsKKwl9IGVsc2UgaWYgKChzdC0+bWFza19sb3cgfCBzdC0+bWFza19oaWdoKSAmIDB4MzApIHsKKwkJc3QtPmNvbmZpZ2J5dGUgfD0gbWF4MTM2M19tb2RlX3RhYmxlW2QwbTF0bzJtM10uY29uZjsKKwkJbW9kZW1hc2sgPSBtYXgxMzYzX21vZGVfdGFibGVbZDBtMXRvMm0zXS5tb2RlbWFzazsKKwl9IGVsc2UgeworCQlzdC0+Y29uZmlnYnl0ZSB8PSBtYXgxMzYzX21vZGVfdGFibGVbZDFtMHRvM20yXS5jb25mOworCQltb2RlbWFzayA9IG1heDEzNjNfbW9kZV90YWJsZVtkMW0wdG8zbTJdLm1vZGVtYXNrOworCX0KKwludW1lbGVtZW50cyA9IGh3ZWlnaHRfbG9uZyhtb2RlbWFzayk7CisJbGVuID0gMyAqIG51bWVsZW1lbnRzICsgMzsKKwl0eF9idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0eF9idWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcl9yZXQ7CisJfQorCXR4X2J1ZlswXSA9IHN0LT5jb25maWdieXRlOworCXR4X2J1ZlsxXSA9IHN0LT5zZXR1cGJ5dGU7CisJdHhfYnVmWzJdID0gKHN0LT5tb25pdG9yX3NwZWVkIDw8IDEpOworCisJLyoKKwkgKiBTbyB3ZSBuZWVkIHRvIGRvIHlldCBhbm90aGVyIGJpdCBvZiBuZWZhcmlvdXMgc2NhbiBtb2RlCisJICogc2V0dXAgdG8gbWF0Y2ggd2hhdCB3ZSBuZWVkLgorCSAqLworCWZvciAoaiA9IDA7IGogPCA4OyBqKyspCisJCWlmIChtb2RlbWFzayAmICgxIDw8IGopKSB7CisJCQkvKiBFc3RhYmxpc2ggdGhlIG1vZGUgaXMgaW4gdGhlIHNjYW4gKi8KKwkJCWlmIChzdC0+bWFza19sb3cgJiAoMSA8PCBqKSkgeworCQkJCXR4X2J1ZltpXSA9IChzdC0+dGhyZXNoX2xvd1tqXSA+PiA0KSAmIDB4RkY7CisJCQkJdHhfYnVmW2kgKyAxXSA9IChzdC0+dGhyZXNoX2xvd1tqXSA8PCA0KSAmIDB4RjA7CisJCQl9IGVsc2UgaWYgKGogPCA0KSB7CisJCQkJdHhfYnVmW2ldID0gMDsKKwkJCQl0eF9idWZbaSArIDFdID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJdHhfYnVmW2ldID0gMHg4MDsKKwkJCQl0eF9idWZbaSArIDFdID0gMDsKKwkJCX0KKwkJCWlmIChzdC0+bWFza19oaWdoICYgKDEgPDwgaikpIHsKKwkJCQl0eF9idWZbaSArIDFdIHw9CisJCQkJCShzdC0+dGhyZXNoX2hpZ2hbal0gPj4gOCkgJiAweDBGOworCQkJCXR4X2J1ZltpICsgMl0gPSBzdC0+dGhyZXNoX2hpZ2hbal0gJiAweEZGOworCQkJfSBlbHNlIGlmIChqIDwgNCkgeworCQkJCXR4X2J1ZltpICsgMV0gfD0gMHgwRjsKKwkJCQl0eF9idWZbaSArIDJdID0gMHhGRjsKKwkJCX0gZWxzZSB7CisJCQkJdHhfYnVmW2kgKyAxXSB8PSAweDA3OworCQkJCXR4X2J1ZltpICsgMl0gPSAweEZGOworCQkJfQorCQkJaSArPSAzOworCQl9CisKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChzdC0+Y2xpZW50LCB0eF9idWYsIGxlbik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWlmIChyZXQgIT0gbGVuKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXJyb3JfcmV0OworCX0KKworCS8qCisJICogTm93IHRoYXQgd2UgaG9wZWZ1bGx5IGhhdmUgc2Vuc2libGUgdGhyZXNob2xkcyBpbiBwbGFjZSBpdCBpcworCSAqIHRpbWUgdG8gdHVybiB0aGUgaW50ZXJydXB0cyBvbi4KKwkgKiBJdCBpcyB1bmNsZWFyIGZyb20gdGhlIGRhdGEgc2hlZXQgaWYgdGhpcyBzaG91bGQgYmUgbmVjZXNzYXJ5CisJICogKGkuZS4gd2hldGhlciBtb25pdG9yIG1vZGUgc2V0dXAgaXMgYXRvbWljKSBidXQgaXQgYXBwZWFycyB0bworCSAqIGJlIGluIHByYWN0aWNlLgorCSAqLworCXR4X2J1ZlswXSA9IHN0LT5zZXR1cGJ5dGU7CisJdHhfYnVmWzFdID0gTUFYMTM2M19NT05fSU5UX0VOQUJMRSB8IChzdC0+bW9uaXRvcl9zcGVlZCA8PCAxKSB8IDB4RjA7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHN0LT5jbGllbnQsIHR4X2J1ZiwgMik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWlmIChyZXQgIT0gMikgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycm9yX3JldDsKKwl9CisJcmV0ID0gMDsKKwlzdC0+bW9uaXRvcl9vbiA9IHRydWU7CitlcnJvcl9yZXQ6CisKKwlrZnJlZSh0eF9idWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRvIGtlZXAgdGhpcyBtYW5hZ2FibGUgd2UgYWx3YXlzIHVzZSBvbmUgb2YgMyBzY2FuIG1vZGVzLgorICogU2NhbiAwLi4uMywgMC0xLDItMyBhbmQgMS0wLDMtMgorICovCitzdGF0aWMgaW5saW5lIGludCBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzayhpbnQgdGhpc21hc2ssIGludCBjaGVja21hc2spCit7CisJaW50IHJldCA9IDA7CisJLyogSXMgaXQgdW5pcG9sYXIgKi8KKwlpZiAodGhpc21hc2sgPCA0KSB7CisJCWlmIChjaGVja21hc2sgJiB+MHgwRikgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBlcnJvcl9yZXQ7CisJCX0KKwl9IGVsc2UgaWYgKHRoaXNtYXNrIDwgNikgeworCQlpZiAoY2hlY2ttYXNrICYgfjB4MzApIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyb3JfcmV0OworCQl9CisJfSBlbHNlIGlmIChjaGVja21hc2sgJiB+MHhDMCkKKwkJcmV0ID0gLUVCVVNZOworZXJyb3JfcmV0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGlpb19kZXYgKmRldl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1heDEzNjNfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CisJc3RydWN0IGlpb19ldmVudF9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZXZlbnRfYXR0cihhdHRyKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCXUxNiB1bmlmaWVkbWFzazsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZzdC0+aW5kaW9fZGV2LT5tbG9jayk7CisJdW5pZmllZG1hc2sgPSBzdC0+bWFza19sb3cgfCBzdC0+bWFza19oaWdoOworCWlmICh0aGlzX2F0dHItPm1hc2sgJiAweDA4KSB7CisJCS8qIElmIHdlIGFyZSBkaXNhYmxpbmcgbm8gbmVlZCB0byB0ZXN0ICovCisJCWlmICh2YWwgPT0gMCkKKwkJCXN0LT5tYXNrX2xvdyAmPSB+KDEgPDwgKHRoaXNfYXR0ci0+bWFzayAmIDB4NykpOworCQllbHNlIHsKKwkJCXJldCA9IF9fbWF4MTM2M19jaGVja19ldmVudF9tYXNrKHRoaXNfYXR0ci0+bWFzayAmIDB4NywKKwkJCQkJCQl1bmlmaWVkbWFzayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyb3JfcmV0OworCQkJc3QtPm1hc2tfbG93IHw9ICgxIDw8ICh0aGlzX2F0dHItPm1hc2sgJiAweDcpKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh2YWwgPT0gMCkKKwkJCXN0LT5tYXNrX2hpZ2ggJj0gfigxIDw8ICh0aGlzX2F0dHItPm1hc2spKTsKKwkJZWxzZSB7CisJCQlyZXQgPSBfX21heDEzNjNfY2hlY2tfZXZlbnRfbWFzayh0aGlzX2F0dHItPm1hc2ssCisJCQkJCQkJdW5pZmllZG1hc2spOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycm9yX3JldDsKKwkJCXN0LT5tYXNrX2hpZ2ggfD0gKDEgPDwgdGhpc19hdHRyLT5tYXNrKTsKKwkJfQorCX0KKwlpZiAoc3QtPm1vbml0b3Jfb24gJiYgIXN0LT5tYXNrX2hpZ2ggJiYgIXN0LT5tYXNrX2xvdykKKwkJaWlvX3JlbW92ZV9ldmVudF9mcm9tX2xpc3QodGhpc19hdHRyLT5saXN0ZWwsCisJCQkJCSZkZXZfaW5mby0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CisJaWYgKCFzdC0+bW9uaXRvcl9vbiAmJiB2YWwpCisJCWlpb19hZGRfZXZlbnRfdG9fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKKwkJCQkmZGV2X2luZm8tPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOworCisJbWF4MTM2M19tb25pdG9yX21vZGVfdXBkYXRlKHN0LCAhIShzdC0+bWFza19oaWdoIHwgc3QtPm1hc2tfbG93KSk7CitlcnJvcl9yZXQ6CisJbXV0ZXhfdW5sb2NrKCZzdC0+aW5kaW9fZGV2LT5tbG9jayk7CisKKwlyZXR1cm4gbGVuOworfQorCitJSU9fRVZFTlRfU0gobWF4MTM2M190aHJlc2gsIG1heDEzNjNfaW50X3RoKTsKKworI2RlZmluZSBNQVgxMzYzX0hJR0hfVEhSRVNIKGEpIGEKKyNkZWZpbmUgTUFYMTM2M19MT1dfVEhSRVNIKGEpIChhIHwgMHg4KQorCitJSU9fRVZFTlRfQVRUUl9TSChpbjBfdGhyZXNoX2hpZ2hfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19ISUdIX1RIUkVTSCgwKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluMF90aHJlc2hfbG93X2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfTE9XX1RIUkVTSCgwKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluMV90aHJlc2hfaGlnaF9lbiwKKwkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDEpKTsKKworSUlPX0VWRU5UX0FUVFJfU0goaW4xX3RocmVzaF9sb3dfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19MT1dfVEhSRVNIKDEpKTsKKworSUlPX0VWRU5UX0FUVFJfU0goaW4yX3RocmVzaF9oaWdoX2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfSElHSF9USFJFU0goMikpOworCitJSU9fRVZFTlRfQVRUUl9TSChpbjJfdGhyZXNoX2xvd19lbiwKKwkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQlNQVgxMzYzX0xPV19USFJFU0goMikpOworCitJSU9fRVZFTlRfQVRUUl9TSChpbjNfdGhyZXNoX2hpZ2hfZW4sCisJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJTUFYMTM2M19ISUdIX1RIUkVTSCgzKSk7CisKK0lJT19FVkVOVF9BVFRSX1NIKGluM190aHJlc2hfbG93X2VuLAorCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCU1BWDEzNjNfTE9XX1RIUkVTSCgzKSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMG1pbjFfdGhyZXNoX2hpZ2hfZW4sCisJCQlpbjAtaW4xX3RocmVzaF9oaWdoX2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDQpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4wbWluMV90aHJlc2hfbG93X2VuLAorCQkJaW4wLWluMV90aHJlc2hfbG93X2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0xPV19USFJFU0goNCkpOworCitJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjNtaW4yX3RocmVzaF9oaWdoX2VuLAorCQkJaW4zLWluMl90aHJlc2hfaGlnaF9lbiwKKwkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQkJTUFYMTM2M19ISUdIX1RIUkVTSCg1KSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluM21pbjJfdGhyZXNoX2xvd19lbiwKKwkJCWluMy1pbjJfdGhyZXNoX2xvd19lbiwKKwkJCWlpb19ldmVudF9tYXgxMzYzX3RocmVzaCwKKwkJCW1heDEzNjNfcmVhZF9pbnRlcnJ1cHRfY29uZmlnLAorCQkJbWF4MTM2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCQkJTUFYMTM2M19MT1dfVEhSRVNIKDUpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4xbWluMF90aHJlc2hfaGlnaF9lbiwKKwkJCWluMS1pbjBfdGhyZXNoX2hpZ2hfZW4sCisJCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJCU1BWDEzNjNfSElHSF9USFJFU0goNikpOworCitJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChpbjFtaW4wX3RocmVzaF9sb3dfZW4sCisJCQlpbjEtaW4wX3RocmVzaF9sb3dfZW4sCisJCQlpaW9fZXZlbnRfbWF4MTM2M190aHJlc2gsCisJCQltYXgxMzYzX3JlYWRfaW50ZXJydXB0X2NvbmZpZywKKwkJCW1heDEzNjNfd3JpdGVfaW50ZXJydXB0X2NvbmZpZywKKwkJCU1BWDEzNjNfTE9XX1RIUkVTSCg2KSk7CisKK0lJT19FVkVOVF9BVFRSX05BTUVEX1NIKGluMm1pbjNfdGhyZXNoX2hpZ2hfZW4sCisJCQlpbjItaW4zX3RocmVzaF9oaWdoX2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0hJR0hfVEhSRVNIKDcpKTsKKworSUlPX0VWRU5UX0FUVFJfTkFNRURfU0goaW4ybWluM190aHJlc2hfbG93X2VuLAorCQkJaW4yLWluM190aHJlc2hfbG93X2VuLAorCQkJaWlvX2V2ZW50X21heDEzNjNfdGhyZXNoLAorCQkJbWF4MTM2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJCQltYXgxMzYzX3dyaXRlX2ludGVycnVwdF9jb25maWcsCisJCQlNQVgxMzYzX0xPV19USFJFU0goNykpOworCisvKgorICogQXMgd2l0aCBzY2FuX2VsZW1lbnRzLCBvbmx5IGNlcnRhaW4gc2V0cyBvZiB0aGVzZSBjYW4KKyAqIGJlIGNvbWJpbmVkLgorICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWF4MTM2M19ldmVudF9hdHRyaWJ1dGVzW10gPSB7CisJJmlpb19kZXZfYXR0cl9pbjBfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMV90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjJfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMl90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luM190aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjBtaW4xX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2hpZ2hfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW4xbWluMF90aHJlc2hfbG93X3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX3ZhbHVlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbjNtaW4yX3RocmVzaF9sb3dfdmFsdWUuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fY29uc3RfYXR0cl9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMF90aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjFfdGhyZXNoX2hpZ2hfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2V2ZW50X2F0dHJfaW4xX3RocmVzaF9sb3dfZW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2V2ZW50X2F0dHJfaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMl90aHJlc2hfbG93X2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luM190aHJlc2hfaGlnaF9lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjBtaW4xX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMG1pbjFfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjNtaW4yX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luM21pbjJfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjFtaW4wX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMW1pbjBfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZXZlbnRfYXR0cl9pbjJtaW4zX3RocmVzaF9oaWdoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19ldmVudF9hdHRyX2luMm1pbjNfdGhyZXNoX2xvd19lbi5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtYXgxMzYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBtYXgxMzYzX2V2ZW50X2F0dHJpYnV0ZXMsCit9OworCiBzdGF0aWMgaW50IG1heDEzNjNfaW5pdGlhbF9zZXR1cChzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QpCiB7CiAJc3QtPnNldHVwYnl0ZSA9IE1BWDEzNjNfU0VUVVBfQUlOM19JU19BSU4zX1JFRl9JU19WREQKQEAgLTkzMCwxOSArMTU5OSw3IEBACiAKIAlhdG9taWNfc2V0KCZzdC0+cHJvdGVjdF9yaW5nLCAwKTsKIAotCS8qIEZpbmQgdGhlIGNoaXAgbW9kZWwgc3BlY2lmaWMgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDEzNjNfY2hpcF9pbmZvX3RibCk7IGkrKykKLQkJaWYgKCFzdHJjbXAobWF4MTM2M19jaGlwX2luZm9fdGJsW2ldLm5hbWUsIGlkLT5uYW1lKSkgewotCQkJc3QtPmNoaXBfaW5mbyA9ICZtYXgxMzYzX2NoaXBfaW5mb190YmxbaV07Ci0JCQlicmVhazsKLQkJfTsKLQkvKiBVbnN1cHBvcnRlZCBjaGlwICovCi0JaWYgKCFzdC0+Y2hpcF9pbmZvKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZFxuIiwgaWQtPm5hbWUpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Q7Ci0JfQotCisJc3QtPmNoaXBfaW5mbyA9ICZtYXgxMzYzX2NoaXBfaW5mb190YmxbaWQtPmRyaXZlcl9kYXRhXTsKIAlzdC0+cmVnID0gcmVndWxhdG9yX2dldCgmY2xpZW50LT5kZXYsICJ2Y2MiKTsKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkgewogCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHN0LT5yZWcpOwpAQCAtOTc4LDYgKzE2MzUsMTEgQEAKIAlzdC0+aW5kaW9fZGV2LT5kZXZfZGF0YSA9ICh2b2lkICopKHN0KTsKIAlzdC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJc3QtPmluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKKwlpZiAoc3QtPmNoaXBfaW5mby0+bW9uaXRvcl9tb2RlICYmIGNsaWVudC0+aXJxKSB7CisJCXN0LT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOworCQlzdC0+aW5kaW9fZGV2LT5ldmVudF9hdHRycworCQkJPSAmbWF4MTM2M19ldmVudF9hdHRyaWJ1dGVfZ3JvdXA7CisJfQogCiAJcmV0ID0gbWF4MTM2M19pbml0aWFsX3NldHVwKHN0KTsKIAlpZiAocmV0KQpAQCAtOTkxLDEwICsxNjUzLDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl9jbGVhbnVwX3Jpbmc7CiAJcmVnZG9uZSA9IDE7Ci0JcmV0ID0gbWF4MTM2M19pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfY2xlYW51cF9yaW5nOworCisJaWYgKHN0LT5jaGlwX2luZm8tPm1vbml0b3JfbW9kZSAmJiBjbGllbnQtPmlycSkgeworCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2xpZW50LT5pcnEsCisJCQkJCQlzdC0+aW5kaW9fZGV2LAorCQkJCQkJMCwKKwkJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJCQljbGllbnQtPm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJvcl91bmluaXRfcmluZzsKKworCQlJTklUX1dPUksoJnN0LT50aHJlc2hfd29yaywgbWF4MTM2M190aHJlc2hfaGFuZGxlcl9iaCk7CisJfQorCiAJcmV0dXJuIDA7CitlcnJvcl91bmluaXRfcmluZzoKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX2NsZWFudXBfcmluZzoKIAltYXgxMzYzX3JpbmdfY2xlYW51cChzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfYXZhaWxhYmxlX3NjYW5fbWFza3M6CkBAIC0xMDEwLDcgKzE2ODcsNiBAQAogZXJyb3JfcHV0X3JlZzoKIAlpZiAoIUlTX0VSUihzdC0+cmVnKSkKIAkJcmVndWxhdG9yX3B1dChzdC0+cmVnKTsKLWVycm9yX2ZyZWVfc3Q6CiAJa2ZyZWUoc3QpOwogCiBlcnJvcl9yZXQ6CkBAIC0xMDIxLDcgKzE2OTcsMTAgQEAKIHsKIAlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gc3QtPmluZGlvX2RldjsKLQltYXgxMzYzX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisKKwlpZiAoc3QtPmNoaXBfaW5mby0+bW9uaXRvcl9tb2RlICYmIGNsaWVudC0+aXJxKQorCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihpbmRpb19kZXYtPnJpbmcpOwogCW1heDEzNjNfcmluZ19jbGVhbnVwKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPmluZGlvX2Rldi0+YXZhaWxhYmxlX3NjYW5fbWFza3MpOwogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvbWF4MTM2M19yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwppbmRleCA1NjY4OGRjLi43ODZiMTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9tYXgxMzYzX3JpbmcuYwpAQCAtNjgsNyArNjgsNyBAQAogfQogCiAvKioKLSAqIG1heDEzNjNfcmluZ19wcmVlbmFibGUoKSBzZXR1cCB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcmluZyBiZWZvcmUgZW5hYmxpbmcKKyAqIG1heDEzNjNfcmluZ19wcmVlbmFibGUoKSAtIHNldHVwIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByaW5nIGJlZm9yZSBlbmFibGluZwogICoKICAqIFRoZSBjb21wbGV4IG5hdHVyZSBvZiB0aGUgc2V0dGluZyBvZiB0aGUgbnViZXIgb2YgYnl0ZXMgcGVyIGRhdHVtIGlzIGR1ZQogICogdG8gdGhpcyBkcml2ZXIgY3VycmVudGx5IGVuc3VyaW5nIHRoYXQgdGhlIHRpbWVzdGFtcCBpcyBzdG9yZWQgYXQgYW4gOApAQCAtMTA1LDQ0ICsxMDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZSgpIHR5cGljYWwgcmluZyBwb3N0IGVuYWJsZQotICoKLSAqIE9ubHkgbm90IG1vdmVkIGludG8gdGhlIGNvcmUgZm9yIHRoZSBoYXJkd2FyZSByaW5nIGJ1ZmZlciBjYXNlcwotICogdGhhdCBhcmUgbW9yZSBzb3BoaXN0aWNhdGVkLgotICoqLwotc3RhdGljIGludCBtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCWlmIChpbmRpb19kZXYtPnRyaWcgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgaW5kaW9fZGV2LT5wb2xsZnVuYyk7Ci19CiAKIC8qKgotICogbWF4MTM2M19yaW5nX3ByZWRpc2FibGUoKSBydW5zIGp1c3QgcHJpb3IgdG8gcmluZyBidWZmZXIgYmVpbmcgZGlzYWJsZWQKLSAqCi0gKiBUeXBpY2FsIHByZWRpc2FibGUgZnVuY3Rpb24gd2hpY2ggZW5zdXJlcyB0aGF0IG5vIHRyaWdnZXIgZXZlbnRzIGNhbgotICogb2NjdXIgYmVmb3JlIHdlIGRpc2FibGUgdGhlIHJpbmcgYnVmZmVyIChhbmQgaGVuY2Ugd291bGQgaGF2ZSBubyBpZGVhCi0gKiB3aGF0IHRvIGRvIHdpdGggdGhlbSkKLSAqKi8KLXN0YXRpYyBpbnQgbWF4MTM2M19yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlpZiAoaW5kaW9fZGV2LT50cmlnKQotCQlyZXR1cm4gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJICAgICBpbmRpb19kZXYtPnBvbGxmdW5jKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKioKLSAqIG1heDEzNjNfcG9sbF9mdW5jX3RoKCkgdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCisgKiBtYXgxMzYzX3BvbGxfZnVuY190aCgpIC0gdGggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKgogICogQXMgc2FtcGxpbmcgb25seSBvY2N1cnMgb24gaTJjIGNvbW1zIG9jY3VyaW5nLCBsZWF2ZSB0aW1lc3RhbXBpbmcgdW50aWwKICAqIHRoZW4uICBTb21lIHRyaWdnZXJzIHdpbGwgZ2VuZXJhdGUgdGhlaXIgb3duIHRpbWUgc3RhbXAuICBDdXJyZW50bHkKICAqIHRoZXJlIGlzIG5vIHdheSBvZiBub3RpZnlpbmcgdGhlbSB3aGVuIG5vIG9uZSBjYXJlcy4KICAqKi8KLXN0YXRpYyB2b2lkIG1heDEzNjNfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgdm9pZCBtYXgxMzYzX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgbWF4MTM2M19zdGF0ZSAqc3QgPSBpbmRpb19kZXYtPmRldl9kYXRhOwogCkBAIC0xNTEsNyArMTIyLDcgQEAKIAlyZXR1cm47CiB9CiAvKioKLSAqIG1heDEzNjNfcG9sbF9iaF90b19yaW5nKCkgYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCisgKiBtYXgxMzYzX3BvbGxfYmhfdG9fcmluZygpIC0gYmggb2YgdHJpZ2dlciBsYXVuY2hlZCBwb2xsaW5nIHRvIHJpbmcgYnVmZmVyCiAgKiBAd29ya19zOgl0aGUgd29yayBzdHJ1Y3QgdGhyb3VnaCB3aGljaCB0aGlzIHdhcyBzY2hlZHVsZWQKICAqCiAgKiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gb3B0aW9uIGluIHRoaXMgZHJpdmVyIHRvIGRpc2FibGUgdGhlIHNhdmluZyBvZgpAQCAtMjIzLDE5ICsxOTQsMTQgQEAKIAl9CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZzdC0+aW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3MpOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmbWF4MTM2M19wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3JfZGVhbGxvY2F0ZV9zd19yYjsKLQl9Ci0JLyogQ29uZmlndXJlIHRoZSBwb2xsaW5nIGZ1bmN0aW9uIGNhbGxlZCBvbiB0cmlnZ2VyIGludGVycnVwdHMgKi8KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZtYXgxMzYzX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CiAKIAkvKiBSaW5nIGJ1ZmZlciBmdW5jdGlvbnMgLSBoZXJlIHRyaWdnZXIgc2V0dXAgcmVsYXRlZCAqLwotCWluZGlvX2Rldi0+cmluZy0+cG9zdGVuYWJsZSA9ICZtYXgxMzYzX3JpbmdfcG9zdGVuYWJsZTsKKwlpbmRpb19kZXYtPnJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CiAJaW5kaW9fZGV2LT5yaW5nLT5wcmVlbmFibGUgPSAmbWF4MTM2M19yaW5nX3ByZWVuYWJsZTsKLQlpbmRpb19kZXYtPnJpbmctPnByZWRpc2FibGUgPSAmbWF4MTM2M19yaW5nX3ByZWRpc2FibGU7CisJaW5kaW9fZGV2LT5yaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCUlOSVRfV09SSygmc3QtPnBvbGxfd29yaywgJm1heDEzNjNfcG9sbF9iaF90b19yaW5nKTsKIAogCS8qIEZsYWcgdGhhdCBwb2xsZWQgcmluZyBidWZmZXJpbmcgaXMgcG9zc2libGUgKi8KQEAgLTI1OCwxMyArMjI0LDMgQEAKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogfQotCi12b2lkIG1heDEzNjNfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX07Ci0KLWludCBtYXgxMzYzX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCXJldHVybiBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIocmluZywgMCk7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vY2hyZGV2LmgKaW5kZXggM2Y5NmY4Ni4uZmQyM2JkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9jaHJkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2NocmRldi5oCkBAIC03Myw4ICs3Myw2IEBACiAgKiBAZGV0X2V2ZW50czoJCWxpc3Qgb2YgZGV0ZWN0ZWQgZXZlbnRzCiAgKiBAbWF4X2V2ZW50czoJCW1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBiZWZvcmUgbmV3IG9uZXMgYXJlIGRyb3BwZWQKICAqIEBjdXJyZW50X2V2ZW50czoJbnVtYmVyIG9mIGV2ZW50cyBpbiBkZXRlY3RlZCBsaXN0Ci0gKiBAaWQ6CQkJaW5kZW50aWZpZXIgdG8gYWxsb3cgdGhlIGV2ZW50IGludGVyZmFjZSB0byBrbm93IHdoaWNoCi0gKgkJCXBoeXNpY2FsIGxpbmUgaXQgY29ycmVzcG9uZHMgdG8KICAqIEBhdHRyOgkJdGhpcyBjaHJkZXYncyBtaW5vciBudW1iZXIgc3lzZnMgYXR0cmlidXRlCiAgKiBAb3duZXI6CQllbnN1cmUgdGhlIGRyaXZlciBtb2R1bGUgb3ducyB0aGUgZmlsZSwgbm90IGlpbwogICogQHByaXZhdGU6CQlkcml2ZXIgc3BlY2lmaWMgZGF0YQpAQCAtOTAsNyArODgsNiBAQAogCXN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdAkJZGV0X2V2ZW50czsKIAlpbnQJCQkJCW1heF9ldmVudHM7CiAJaW50CQkJCQljdXJyZW50X2V2ZW50czsKLQlpbnQJCQkJCWlkOwogCXN0cnVjdCBpaW9fY2hyZGV2X21pbm9yX2F0dHIJCWF0dHI7CiAJc3RydWN0IG1vZHVsZQkJCQkqb3duZXI7CiAJdm9pZAkJCQkJKnByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vTWFrZWZpbGUKaW5kZXggNmQyYzU0Ny4uYjVmMGRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLQorIwogIyBNYWtlZmlsZSBmb3IgZGlnaXRhbCBneXJvc2NvcGUgc2Vuc29yIGRyaXZlcnMKICMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MC5oCmluZGV4IGYxOWVmYjQuLjgxMjQ0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwLmgKQEAgLTg1LDcgKzg1LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtOTcsNyArOTYsNiBAQAogc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJCSp1czsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHJpZ2dlcl90b19yaW5nOwotCXN0cnVjdCBpaW9fd29ya19jb250CQl3b3JrX2NvbnRfdGhyZXNoOwogCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKIAlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CiAJc3RydWN0IGlpb190cmlnZ2VyCQkqdHJpZzsKQEAgLTExMywxMyArMTExLDExIEBACiAgKiBmaWxsaW5nLiBUaGlzIG1heSBjaGFuZ2UhCiAgKi8KIAotZW51bSBhZGlzMTYyNjBfc2NhbiB7Ci0JQURJUzE2MjYwX1NDQU5fU1VQUExZLAotCUFESVMxNjI2MF9TQ0FOX0dZUk8sCi0JQURJUzE2MjYwX1NDQU5fQVVYX0FEQywKLQlBRElTMTYyNjBfU0NBTl9URU1QLAotCUFESVMxNjI2MF9TQ0FOX0FOR0wsCi19OworI2RlZmluZSBBRElTMTYyNjBfU0NBTl9TVVBQTFkJMAorI2RlZmluZSBBRElTMTYyNjBfU0NBTl9HWVJPCTEKKyNkZWZpbmUgQURJUzE2MjYwX1NDQU5fQVVYX0FEQwkyCisjZGVmaW5lIEFESVMxNjI2MF9TQ0FOX1RFTVAJMworI2RlZmluZSBBRElTMTYyNjBfU0NBTl9BTkdMCTQKIAogdm9pZCBhZGlzMTYyNjBfcmVtb3ZlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiBpbnQgYWRpczE2MjYwX3Byb2JlX3RyaWdnZXIoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CkBAIC0xMzIsOCArMTI4LDYgQEAKIGludCBhZGlzMTYyNjBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldik7CiB2b2lkIGFkaXMxNjI2MF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogCi1pbnQgYWRpczE2MjYwX2luaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKLXZvaWQgYWRpczE2MjYwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpOwogI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRpczE2MjYwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCkBAIC0xNjIsMTQgKzE1Niw1IEBACiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkaXMxNjI2MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotfQotCiAjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIFNQSV9BRElTMTYyNjBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKaW5kZXggYzkzZjRkNS4uMTM0ZGZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWRjL2FkYy5oIgogI2luY2x1ZGUgImd5cm8uaCIKIApAQCAtNTU1LDggKzU1Niw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwogCXJlZ2RvbmUgPSAxOwotCi0JcmV0ID0gYWRpczE2MjYwX2luaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlyZXQgPSBpaW9fcmluZ19idWZmZXJfcmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZywgMCk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByaW5nXG4iKTsKIAkJZ290byBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CiAJYWRpczE2MjYwX3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTYyMiwxNSArNjIyLDEzIEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MjYwX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJYWRpczE2MjYwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwogCWtmcmVlKHN0LT5yeCk7CiAJa2ZyZWUoc3QpOwogCi0JcmV0dXJuIDA7Ci0KIGVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vZ3lyby9hZGlzMTYyNjBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKaW5kZXggNGM0MzkwYy4uOWVmN2Y5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF9yaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMTYsMTYgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MjYwLmgiCiAKLS8qKgotICogY29tYmluZV84X3RvXzE2KCkgdXRpbGl0eSBmdW5jdGlvbiB0byBtdW5nZSB0byB1OHMgaW50byB1MTYKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNvbWJpbmVfOF90b18xNih1OCBsb3dlciwgdTggdXBwZXIpCi17Ci0JdTE2IF9sb3dlciA9IGxvd2VyOwotCXUxNiBfdXBwZXIgPSB1cHBlcjsKLQlyZXR1cm4gX2xvd2VyIHwgKF91cHBlciA8PCA4KTsKLX0KLQogc3RhdGljIElJT19TQ0FOX0VMX0Moc3VwcGx5LCBBRElTMTYyNjBfU0NBTl9TVVBQTFksIElJT19VTlNJR05FRCgxMiksCiAJCUFESVMxNjI2MF9TVVBQTFlfT1VULCBOVUxMKTsKIHN0YXRpYyBJSU9fU0NBTl9FTF9DKGd5cm8sIEFESVMxNjI2MF9TQ0FOX0dZUk8sIElJT19TSUdORUQoMTQpLApAQCAtNTgsMTAgKzQ5LDEwIEBACiAgKiBhZGlzMTYyNjBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjI2MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjI2MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjI2MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xMzMsMTAgKzEyNCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjI2MF9yZWFkX3JpbmdfZGF0YSgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCXN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNTIsNDggKzE0Miw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHM2NCkgYW5kIGRhdGEgKi8KLQkJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogc2l6ZW9mKHMxNikpCi0JCQkJCQkrIHNpemVvZihzNjQpIC0gMSkKLQkJCQkJJiB+KHNpemVvZihzNjQpIC0gMSkpCi0JCQkJCSsgc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQotCQk6IDA7Ci19Ci0KIHZvaWQgYWRpczE2MjYwX3VuY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlrZnJlZShpbmRpb19kZXYtPnBvbGxmdW5jKTsKQEAgLTIyNSwxOCArMTczLDE2IEBACiAJaW5kaW9fZGV2LT5yaW5nID0gcmluZzsKIAkvKiBFZmZlY3RpdmVseSBzZWxlY3QgdGhlIHJpbmcgYnVmZmVyIGltcGxlbWVudGF0aW9uICovCiAJaWlvX3Jpbmdfc3dfcmVnaXN0ZXJfZnVuY3MoJnJpbmctPmFjY2Vzcyk7Ci0JcmluZy0+cHJlZW5hYmxlID0gJmFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZTsKLQlyaW5nLT5wb3N0ZW5hYmxlID0gJmFkaXMxNjI2MF9kYXRhX3JkeV9yaW5nX3Bvc3RlbmFibGU7Ci0JcmluZy0+cHJlZGlzYWJsZSA9ICZhZGlzMTYyNjBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlOworCXJpbmctPmJwZSA9IDI7CisJcmluZy0+cHJlZW5hYmxlID0gJmlpb19zd19yaW5nX3ByZWVuYWJsZTsKKwlyaW5nLT5wb3N0ZW5hYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlOworCXJpbmctPnByZWRpc2FibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3ByZWRpc2FibGU7CiAJcmluZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOwotCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTs7Ci0JfQotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19tYWluID0gJmFkaXMxNjI2MF9wb2xsX2Z1bmNfdGg7Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cHJpdmF0ZV9kYXRhID0gaW5kaW9fZGV2OworCXJldCA9IGlpb19hbGxvY19wb2xsZnVuYyhpbmRpb19kZXYsIE5VTEwsICZhZGlzMTYyNjBfcG9sbF9mdW5jX3RoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOworCiAJaW5kaW9fZGV2LT5tb2RlcyB8PSBJTkRJT19SSU5HX1RSSUdHRVJFRDsKIAlyZXR1cm4gMDsKIApAQCAtMjQ0LDEzICsxOTAsMyBAQAogCWlpb19zd19yYl9mcmVlKGluZGlvX2Rldi0+cmluZyk7CiAJcmV0dXJuIHJldDsKIH0KLQotaW50IGFkaXMxNjI2MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjI2MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9neXJvL2FkaXMxNjI2MF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYwppbmRleCBiM2M1NjU5Li5kZTAxNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2d5cm8vYWRpczE2MjYwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTYyNjBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04MywxNCArODIsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2MjYwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTYyNjAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTYyNjAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9paW8uaAppbmRleCBmY2VlNDdjLi45ZDBjYTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2lpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaWlvLmgKQEAgLTE2LDkgKzE2LDcgQEAKICNpbmNsdWRlICJjaHJkZXYuaCIKIAogLyogSUlPIFRPRE8gTElTVCAqLwotLyogU3RhdGljIGRldmljZSBzcGVjaWZpYyBlbGVtZW50cyAoY29udmVyc2lvbiBmYWN0b3JzIGV0YykKLSAqIHNob3VsZCBiZSBleHBvcnRlZCB2aWEgc3lzZnMKLSAqCisvKgogICogUHJvdmlkZSBtZWFucyBvZiBhZGp1c3RpbmcgdGltZXIgYWNjdXJhY3kuCiAgKiBDdXJyZW50bHkgYXNzdW1lcyBuYW5vIHNlY29uZHMuCiAgKi8KQEAgLTI4NCw0OSArMjgyLDYgQEAKIAkJICBzNjQgdGltZXN0YW1wKTsKIAogLyoqCi0gKiBzdHJ1Y3QgaWlvX3dvcmtfY29udCAtIGNvbnRhaW5lciBmb3Igd2hlbiBzaW5nbGV0b24gaGFuZGxlciBjYXNlIG1hdHRlcnMKLSAqIEB3czoJCQlbREVWSUNFXSB3b3JrX3N0cnVjdCB3aGVuIG5vdCBvbmx5IHBvc3NpYmxlIGV2ZW50Ci0gKiBAd3Nfbm9jaGVjazoJCVtERVZJQ0VdIHdvcmtfc3RydWN0IHdoZW4gb25seSBwb3NzaWJsZSBldmVudAotICogQGFkZHJlc3M6CQlbREVWSUNFXSBhc3NvY2lhdGVkIHJlZ2lzdGVyIGFkZHJlc3MKLSAqIEBtYXNrOgkJW0RFVklDRV0gYXNzb2NpYXRlZCBtYXNrIGZvciBpZGVudGlmeWluZyBldmVudCBzb3VyY2UKLSAqIEBzdDoJCQlbREVWSUNFXSBkZXZpY2Ugc3BlY2lmaWMgc3RhdGUgaW5mb3JtYXRpb24KLSAqKi8KLXN0cnVjdCBpaW9fd29ya19jb250IHsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd3M7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXdzX25vY2hlY2s7Ci0JaW50CQkJYWRkcmVzczsKLQlpbnQJCQltYXNrOwotCXZvaWQJCQkqc3Q7Ci19OwotCi0jZGVmaW5lIHRvX2lpb193b3JrX2NvbnRfY2hlY2soX3dzKQkJCVwKLQljb250YWluZXJfb2YoX3dzLCBzdHJ1Y3QgaWlvX3dvcmtfY29udCwgd3MpCi0KLSNkZWZpbmUgdG9faWlvX3dvcmtfY29udF9ub19jaGVjayhfd3MpCQkJCVwKLQljb250YWluZXJfb2YoX3dzLCBzdHJ1Y3QgaWlvX3dvcmtfY29udCwgd3Nfbm9jaGVjaykKLQotLyoqCi0gKiBpaW9faW5pdF93b3JrX2NvbnQoKSAtIGludGlpYWxpemUgdGhlIGVsZW1lbnRzIG9mIGEgd29yayBjb250YWluZXIKLSAqIEBjb250OiB0aGUgd29yayBjb250YWluZXIKLSAqIEBfY2hlY2tmdW5jOiBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2libGUgaW50IHNvdXJjZXMKLSAqIEBfbm9jaGVja2Z1bmM6IGZ1bmN0aW9uIGZvciB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGludCBzb3VyY2UKLSAqIEBfYWRkOiBkcml2ZXIgZGVwZW5kZW50LCB0eXBpY2FsbHkgYSByZWdpc3RlciBhZGRyZXNzCi0gKiBAX21hc2s6IGRyaXZlciBkZXBlbmRlbnQsIHR5cGljYWxseSBhIGJpdCBtYXNrIGZvciBhIHJlZ2lzdGVyCi0gKiBAX3N0OiBkcml2ZXIgZGVwZW5kZW50LCB0eXBpY2FsbHkgcG9pbnRlciB0byBhIGRldmljZSBzdGF0ZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotaWlvX2luaXRfd29ya19jb250KHN0cnVjdCBpaW9fd29ya19jb250ICpjb250LAotCQkgICB2b2lkICgqX2NoZWNrZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICopLAotCQkgICB2b2lkICgqX25vY2hlY2tmdW5jKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiksCi0JCSAgIGludCBfYWRkLCBpbnQgX21hc2ssIHZvaWQgKl9zdCkKLXsKLQlJTklUX1dPUksoJihjb250KS0+d3MsIF9jaGVja2Z1bmMpOwotCUlOSVRfV09SSygmKGNvbnQpLT53c19ub2NoZWNrLCBfbm9jaGVja2Z1bmMpOwotCWNvbnQtPmFkZHJlc3MgPSBfYWRkOwotCWNvbnQtPm1hc2sgPSBfbWFzazsKLQljb250LT5zdCA9IF9zdDsKLX0KLS8qKgogICogX19paW9fcHVzaF9ldmVudCgpIC0gdHJpZXMgdG8gYWRkIGFuIGV2ZW50IHRvIHRoZSBsaXN0IGFzc29jaWF0ZWQgd2l0aCBhIGNocmRldgogICogQGV2X2ludDoJCXRoZSBldmVudCBpbnRlcmZhY2UgdG8gd2hpY2ggd2UgYXJlIHB1c2hpbmcgdGhlIGV2ZW50CiAgKiBAZXZfY29kZToJCXRoZSBvdXRnb2luZyBldmVudCBjb2RlCkBAIC00MjgsNyArMzgzLDkgQEAKICAqKi8KIHZvaWQgaWlvX2dldCh2b2lkKTsKIAotLyogUmluZyBidWZmZXIgcmVsYXRlZCAqLworLyoqCisgKiBpaW9fZGV2aWNlX2dldF9jaHJkZXZfbWlub3IoKSAtIGdldCBhbiB1bnVzZWQgbWlub3IgbnVtYmVyCisgKiovCiBpbnQgaWlvX2RldmljZV9nZXRfY2hyZGV2X21pbm9yKHZvaWQpOwogdm9pZCBpaW9fZGV2aWNlX2ZyZWVfY2hyZGV2X21pbm9yKGludCB2YWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvS2NvbmZpZwppbmRleCA2MzA4ZDZmLi4zMWE2MjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L0tjb25maWcKQEAgLTYsOSArNiw4IEBACiBjb25maWcgQURJUzE2MzAwCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFESVMxNjMwMCBJTVUgU1BJIGRyaXZlciIKIAlkZXBlbmRzIG9uIFNQSQotCXNlbGVjdCBJSU9fU1dfUklORwotCXNlbGVjdCBJSU9fUklOR19CVUZGRVIKLQlzZWxlY3QgSUlPX1RSSUdHRVIKKwlzZWxlY3QgSUlPX1NXX1JJTkcgaWYgSUlPX1JJTkdfQlVGRkVSCisJc2VsZWN0IElJT19UUklHR0VSIGlmIElJT19SSU5HX0JVRkZFUgogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBhZGlzMTYzMDAgZm91ciBkZWdyZWVzCiAJICBvZiBmcmVlZG9tIGluZXJ0aWFsIHNlbnNvci4KQEAgLTI0LDEwICsyMyw5IEBACiAKIGNvbmZpZyBBRElTMTY0MDAKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURJUzE2NDAwLzUgSU1VIFNQSSBkcml2ZXIiCi0gCWRlcGVuZHMgb24gU1BJCi0Jc2VsZWN0IElJT19TV19SSU5HCi0Jc2VsZWN0IElJT19SSU5HX0JVRkZFUgotCXNlbGVjdCBJSU9fVFJJR0dFUgotIAloZWxwCi0gCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjQwMC81IHRyaWF4aWFsCi0gCSAgaW5lcnRpYWwgc2Vuc29yIHdpdGggTWFnbmV0b21ldGVyLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkZXBlbmRzIG9uIFNQSQorCXNlbGVjdCBJSU9fU1dfUklORyBpZiBJSU9fUklOR19CVUZGRVIKKwlzZWxlY3QgSUlPX1RSSUdHRVIgaWYgSUlPX1JJTkdfQlVGRkVSCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGJ1aWxkIHN1cHBvcnQgZm9yIEFuYWxvZyBEZXZpY2VzIGFkaXMxNjQwMC81IHRyaWF4aWFsCisJICBpbmVydGlhbCBzZW5zb3Igd2l0aCBNYWduZXRvbWV0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCmluZGV4IDMxZGY3MzUuLmYzYjQ1MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgSW5lcnRpYWwgTWVhc3VyZW1lbnQgVW5pdHMKICMKKwogYWRpczE2MzAwLXkgICAgICAgICAgICAgOj0gYWRpczE2MzAwX2NvcmUubwogYWRpczE2MzAwLSQoQ09ORklHX0lJT19SSU5HX0JVRkZFUikgKz0gYWRpczE2MzAwX3JpbmcubyBhZGlzMTYzMDBfdHJpZ2dlci5vCiBvYmotJChDT05GSUdfQURJUzE2MzAwKSArPSBhZGlzMTYzMDAubwpAQCAtMTEsNCArMTIsNCBAQAogCiBhZGlzMTY0MDAteSAgICAgICAgICAgICA6PSBhZGlzMTY0MDBfY29yZS5vCiBhZGlzMTY0MDAtJChDT05GSUdfSUlPX1JJTkdfQlVGRkVSKSArPSBhZGlzMTY0MDBfcmluZy5vIGFkaXMxNjQwMF90cmlnZ2VyLm8KLW9iai0kKENPTkZJR19BRElTMTY0MDApICs9IGFkaXMxNjQwMC5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX0FESVMxNjQwMCkgKz0gYWRpczE2NDAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKaW5kZXggMWM3ZWE1Yy4uMWYyNWQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwLmgKQEAgLTk0LDcgKzk0LDYgQEAKICAqIHN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTA2LDcgKzEwNSw2IEBACiBzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF90aHJlc2g7CiAJczY0CQkJCWxhc3RfdGltZXN0YW1wOwogCXN0cnVjdCBpaW9fZGV2CQkJKmluZGlvX2RldjsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIJCSp0cmlnOwpAQCAtMTE1LDMwICsxMTMsMjIgQEAKIAlzdHJ1Y3QgbXV0ZXgJCQlidWZfbG9jazsKIH07CiAKLWludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpOwotCiBpbnQgYWRpczE2MzAwX3NldF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CiAKLWludCBhZGlzMTYzMDBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KTsKLQotaW50IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KTsKLQogI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKIC8qIEF0IHRoZSBtb21lbnQgdHJpZ2dlcnMgYXJlIG9ubHkgdXNlZCBmb3IgcmluZyBidWZmZXIKICAqIGZpbGxpbmcuIFRoaXMgbWF5IGNoYW5nZSEKICAqLwogCi1lbnVtIGFkaXMxNjMwMF9zY2FuIHsKLQlBRElTMTYzMDBfU0NBTl9TVVBQTFksCi0JQURJUzE2MzAwX1NDQU5fR1lST19YLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19YLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19ZLAotCUFESVMxNjMwMF9TQ0FOX0FDQ19aLAotCUFESVMxNjMwMF9TQ0FOX1RFTVAsCi0JQURJUzE2MzAwX1NDQU5fQURDXzAsCi0JQURJUzE2MzAwX1NDQU5fSU5DTElfWCwKLQlBRElTMTYzMDBfU0NBTl9JTkNMSV9ZLAotfTsKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fU1VQUExZCTAKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fR1lST19YCTEKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fQUNDX1gJMgorI2RlZmluZSBBRElTMTYzMDBfU0NBTl9BQ0NfWQkzCisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FDQ19aCTQKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fVEVNUAk1CisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0FEQ18wCTYKKyNkZWZpbmUgQURJUzE2MzAwX1NDQU5fSU5DTElfWAk3CisjZGVmaW5lIEFESVMxNjMwMF9TQ0FOX0lOQ0xJX1kJOAogCiB2b2lkIGFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIGludCBhZGlzMTYzMDBfcHJvYmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfY29yZS5jCmluZGV4IDVhN2U1ZWYuLmYxOTUwZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX2NvcmUuYwpAQCAtMTQsMTIgKzE0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjaW5jbHVkZSAiLi4vaWlvLmgiCiAjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICIuLi9yaW5nX2dlbmVyaWMuaCIKICNpbmNsdWRlICIuLi9hY2NlbC9hY2NlbC5oIgogI2luY2x1ZGUgIi4uL2FjY2VsL2luY2xpbm9tZXRlci5oIgogI2luY2x1ZGUgIi4uL2d5cm8vZ3lyby5oIgpAQCAtMjksMTAgKzMwLDcgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJImFkaXMxNjMwMCIKIAotLyogQXQgdGhlIG1vbWVudCB0aGUgc3BpIGZyYW1ld29yayBkb2Vzbid0IGFsbG93IGdsb2JhbCBzZXR0aW5nIG9mIGNzX2NoYW5nZS4KLSAqIEl0J3MgaW4gdGhlIGxpa2VseSB0byBiZSBhZGRlZCBjb21tZW50IGF0IHRoZSB0b3Agb2Ygc3BpLmguCi0gKiBUaGlzIG1lYW5zIHRoYXQgdXNlIGNhbm5vdCBiZSBtYWRlIG9mIHNwaV93cml0ZSBldGMuCi0gKi8KK3N0YXRpYyBpbnQgYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKioKICAqIGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoKSAtIHdyaXRlIHNpbmdsZSBieXRlIHRvIGEgcmVnaXN0ZXIKQEAgLTc5LDExICs3NywxMyBAQAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCiAJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDc1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCisJCQkuZGVsYXlfdXNlY3MgPSA3NSwKIAkJfSwKIAl9OwogCkBAIC0xMjIsMTIgKzEyMiwxNCBAQAogCQkJLnR4X2J1ZiA9IHN0LT50eCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAotCQkJLmNzX2NoYW5nZSA9IDAsCisJCQkuY3NfY2hhbmdlID0gMSwKKwkJCS5kZWxheV91c2VjcyA9IDc1LAogCQl9LCB7CiAJCQkucnhfYnVmID0gc3QtPnJ4LAogCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAogCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMCwKKwkJCS5jc19jaGFuZ2UgPSAxLAorCQkJLmRlbGF5X3VzZWNzID0gNzUsCiAJCX0sCiAJfTsKIApAQCAtMTU0LDU0ICsxNTYsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogYWRpczE2MzAwX3NwaV9yZWFkX2J1cnN0KCkgLSByZWFkIGFsbCBkYXRhIHJlZ2lzdGVycwotICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQotICogQHJ4OiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkIChtaW4gc2l6ZSBpcyAyNCBieXRlcykKLSAqKi8KLWludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCi17Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKLQlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0JdTMyIG9sZF9zcGVlZF9oeiA9IHN0LT51cy0+bWF4X3NwZWVkX2h6OwotCWludCByZXQ7Ci0KLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7Ci0JCXsKLQkJCS50eF9idWYgPSBzdC0+dHgsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMiwKLQkJCS5jc19jaGFuZ2UgPSAwLAotCQl9LCB7Ci0JCQkucnhfYnVmID0gcngsCi0JCQkuYml0c19wZXJfd29yZCA9IDgsCi0JCQkubGVuID0gMTgsCi0JCQkuY3NfY2hhbmdlID0gMCwKLQkJfSwKLQl9OwotCi0JbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKLQlzdC0+dHhbMF0gPSBBRElTMTYzMDBfUkVBRF9SRUcoQURJUzE2MzAwX0dMT0JfQ01EKTsKLQlzdC0+dHhbMV0gPSAwOwotCi0Jc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7Ci0KLQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IG1pbihBRElTMTYzMDBfU1BJX0JVUlNULCBvbGRfc3BlZWRfaHopOwotCXNwaV9zZXR1cChzdC0+dXMpOwotCi0JcmV0ID0gc3BpX3N5bmMoc3QtPnVzLCAmbXNnKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKCZzdC0+dXMtPmRldiwgInByb2JsZW0gd2hlbiBidXJzdCByZWFkaW5nIik7Ci0KLQlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IG9sZF9zcGVlZF9oejsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQltdXRleF91bmxvY2soJnN0LT5idWZfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHNzaXplX3QgYWRpczE2MzAwX3NwaV9yZWFkX3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYsCkBAIC0yNDAsNiArMTk0LDI0IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4MEZGRik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3Vuc2lnbmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0OworCXUxNiB2YWwgPSAwOworCXN0cnVjdCBpaW9fZGV2X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19kZXZfYXR0cihhdHRyKTsKKworCXJldCA9IGFkaXMxNjMwMF9zcGlfcmVhZF9yZWdfMTYoZGV2LCB0aGlzX2F0dHItPmFkZHJlc3MsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodmFsICYgQURJUzE2MzAwX0VSUk9SX0FDVElWRSkKKwkJYWRpczE2MzAwX2NoZWNrX3N0YXR1cyhkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAmIDB4M0ZGRik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC0zNTYsNiArMzI4LDE4IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKIH0KIAorc3RhdGljIGludCBhZGlzMTYzMDBfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYWRpczE2MzAwX3NwaV93cml0ZV9yZWdfOChkZXYsCisJCQlBRElTMTYzMDBfR0xPQl9DTUQsCisJCQlBRElTMTYzMDBfR0xPQl9DTURfU1dfUkVTRVQpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAicHJvYmxlbSByZXNldHRpbmcgZGV2aWNlIik7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdCBhZGlzMTYzMDBfd3JpdGVfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQpAQCAtMzcxLDggKzM1NSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0KLQogaW50IGFkaXMxNjMwMF9zZXRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCiB7CiAJaW50IHJldDsKQEAgLTM5NiwxOCArMzc4LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYWRpczE2MzAwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0OwotCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzgoZGV2LAotCQkJQURJUzE2MzAwX0dMT0JfQ01ELAotCQkJQURJUzE2MzAwX0dMT0JfQ01EX1NXX1JFU0VUKTsKLQlpZiAocmV0KQotCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyogUG93ZXIgZG93biB0aGUgZGV2aWNlICovCiBzdGF0aWMgaW50IGFkaXMxNjMwMF9zdG9wX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC00MjEsNyArMzkxLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTYzMDBfc2VsZl90ZXN0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFkaXMxNjMwMF9zcGlfd3JpdGVfcmVnXzE2KGRldiwKKwkJCUFESVMxNjMwMF9NU0NfQ1RSTCwKKwkJCUFESVMxNjMwMF9NU0NfQ1RSTF9NRU1fVEVTVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgc2VsZiB0ZXN0Iik7CisJCWdvdG8gZXJyX3JldDsKKwl9CisKKwlhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKGRldik7CisKK2Vycl9yZXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGlzMTYzMDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1MTYgc3RhdHVzOwogCWludCByZXQ7CkBAIC00ODMsNiArNDcwLDExIEBACiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCisJcmV0ID0gYWRpczE2MzAwX3NlbGZfdGVzdChkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOworCQlnb3RvIGVycl9yZXQ7CisJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwogCXJldCA9IGFkaXMxNjMwMF9jaGVja19zdGF0dXMoZGV2KTsKQEAgLTUyNiw3ICs1MTgsNyBAQAogCQlhZGlzMTYzMDBfd3JpdGVfMTZiaXQsCiAJCUFESVMxNjMwMF9aQUNDTF9PRkYpOwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX0lOX05BTUVEX1JBVyhzdXBwbHksIGFkaXMxNjMwMF9yZWFkXzE0Yml0X3NpZ25lZCwKK3N0YXRpYyBJSU9fREVWX0FUVFJfSU5fTkFNRURfUkFXKHN1cHBseSwgYWRpczE2MzAwX3JlYWRfMTRiaXRfdW5zaWduZWQsCiAJCQkgICBBRElTMTYzMDBfU1VQUExZX09VVCk7CiBzdGF0aWMgSUlPX0NPTlNUX0FUVFIoaW5fc3VwcGx5X3NjYWxlLCAiMC4wMDI0MiIpOwogCkBAIC01NDgsNyArNTQwLDcgQEAKIAkJQURJUzE2MzAwX1lJTkNMSV9PVVQpOwogc3RhdGljIElJT19DT05TVF9BVFRSKGluY2xpX3NjYWxlLCAiMC4wNDQgZCIpOwogCi1zdGF0aWMgSUlPX0RFVl9BVFRSX1RFTVBfUkFXKGFkaXMxNjMwMF9yZWFkXzEyYml0X3NpZ25lZCk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX1RFTVBfUkFXKGFkaXMxNjMwMF9yZWFkXzEyYml0X3Vuc2lnbmVkKTsKIHN0YXRpYyBJSU9fQ09OU1RfQVRUUih0ZW1wX29mZnNldCwgIjE5OC4xNiBLIik7CiBzdGF0aWMgSUlPX0NPTlNUX0FUVFIodGVtcF9zY2FsZSwgIjAuMTQgSyIpOwogCkBAIC02NTMsMjEgKzY0NSwxMyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYzMDBfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJfQogCi0JaWYgKHNwaS0+aXJxICYmIGdwaW9faXNfdmFsaWQoaXJxX3RvX2dwaW8oc3BpLT5pcnEpKSA+IDApIHsKLSNpZiAwIC8qIGZpeG1lOiBoZXJlIHdlIHNob3VsZCBzdXBwb3J0ICovCi0JCWlpb19pbml0X3dvcmtfY29udCgmc3QtPndvcmtfY29udF90aHJlc2gsCi0JCQkJTlVMTCwKLQkJCQlhZGlzMTYzMDBfdGhyZXNoX2hhbmRsZXJfYmhfbm9fY2hlY2ssCi0JCQkJMCwKLQkJCQkwLAotCQkJCXN0KTsKLSNlbmRpZgorCWlmIChzcGktPmlycSkgewogCQlyZXQgPSBpaW9fcmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3BpLT5pcnEsCiAJCQkJc3QtPmluZGlvX2RldiwKIAkJCQkwLApAQCAtNjg4LDEzICs2NzIsMTIgQEAKIAlyZXR1cm4gMDsKIAogZXJyb3JfcmVtb3ZlX3RyaWdnZXI6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCi0JCWFkaXMxNjMwMF9yZW1vdmVfdHJpZ2dlcihzdC0+aW5kaW9fZGV2KTsKKwlhZGlzMTYzMDBfcmVtb3ZlX3RyaWdnZXIoc3QtPmluZGlvX2Rldik7CiBlcnJvcl91bnJlZ2lzdGVyX2xpbmU6Ci0JaWYgKHN0LT5pbmRpb19kZXYtPm1vZGVzICYgSU5ESU9fUklOR19UUklHR0VSRUQpCisJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzdC0+aW5kaW9fZGV2LCAwKTsKIGVycm9yX3VuaW5pdGlhbGl6ZV9yaW5nOgotCWFkaXMxNjMwMF91bmluaXRpYWxpemVfcmluZyhzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nKTsKIGVycm9yX3VucmVnX3JpbmdfZnVuY3M6CiAJYWRpczE2MzAwX3VuY29uZmlndXJlX3Jpbmcoc3QtPmluZGlvX2Rldik7CiBlcnJvcl9mcmVlX2RldjoKQEAgLTcxMiw3ICs2OTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIGZpeG1lLCBjb25maXJtIG9yZGVyaW5nIGluIHRoaXMgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgYWRpczE2MzAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCWludCByZXQ7CkBAIC03MjYsMTIgKzcwOCwxMiBAQAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlhZGlzMTYzMDBfcmVtb3ZlX3RyaWdnZXIoaW5kaW9fZGV2KTsKLQlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKKwlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKGluZGlvX2RldiwgMCk7CiAKLQlhZGlzMTYzMDBfdW5pbml0aWFsaXplX3JpbmcoaW5kaW9fZGV2LT5yaW5nKTsKLQlhZGlzMTYzMDBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKGluZGlvX2Rldi0+cmluZyk7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CisJYWRpczE2MzAwX3VuY29uZmlndXJlX3JpbmcoaW5kaW9fZGV2KTsKIAlrZnJlZShzdC0+dHgpOwogCWtmcmVlKHN0LT5yeCk7CiAJa2ZyZWUoc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3JpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF9yaW5nLmMKaW5kZXggNzZjZjhhNi4uZmM5MzE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3JpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzMDBfcmluZy5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKQEAgLTE2LDE3ICsxNyw3IEBACiAjaW5jbHVkZSAiLi4vdHJpZ2dlci5oIgogI2luY2x1ZGUgImFkaXMxNjMwMC5oIgogCi0vKioKLSAqIGNvbWJpbmVfOF90b18xNigpIHV0aWxpdHkgZnVuY3Rpb24gdG8gbXVuZ2UgdG8gdThzIGludG8gdTE2Ci0gKiovCi1zdGF0aWMgaW5saW5lIHUxNiBjb21iaW5lXzhfdG9fMTYodTggbG93ZXIsIHU4IHVwcGVyKQotewotCXUxNiBfbG93ZXIgPSBsb3dlcjsKLQl1MTYgX3VwcGVyID0gdXBwZXI7Ci0JcmV0dXJuIF9sb3dlciB8IChfdXBwZXIgPDwgOCk7Ci19Ci0KLXN0YXRpYyBJSU9fU0NBTl9FTF9DKHN1cHBseSwgQURJUzE2MzAwX1NDQU5fU1VQUExZLCBJSU9fU0lHTkVEKDE0KSwKK3N0YXRpYyBJSU9fU0NBTl9FTF9DKHN1cHBseSwgQURJUzE2MzAwX1NDQU5fU1VQUExZLCBJSU9fVU5TSUdORUQoMTQpLAogCQkgICAgIEFESVMxNjMwMF9TVVBQTFlfT1VULCBOVUxMKTsKIAogc3RhdGljIElJT19TQ0FOX0VMX0MoZ3lyb194LCBBRElTMTYzMDBfU0NBTl9HWVJPX1gsIElJT19TSUdORUQoMTQpLApAQCAtMzksOSArMzAsOSBAQAogc3RhdGljIElJT19TQ0FOX0VMX0MoYWNjZWxfeiwgQURJUzE2MzAwX1NDQU5fQUNDX1osIElJT19TSUdORUQoMTQpLAogCQkgICAgIEFESVMxNjMwMF9aQUNDTF9PVVQsIE5VTEwpOwogCi1zdGF0aWMgSUlPX1NDQU5fRUxfQyh0ZW1wLCBBRElTMTYzMDBfU0NBTl9URU1QLCBJSU9fU0lHTkVEKDEyKSwKK3N0YXRpYyBJSU9fU0NBTl9FTF9DKHRlbXAsIEFESVMxNjMwMF9TQ0FOX1RFTVAsIElJT19VTlNJR05FRCgxMiksCiAJCSAgICAgQURJUzE2MzAwX1RFTVBfT1VULCBOVUxMKTsKLXN0YXRpYyBJSU9fU0NBTl9FTF9DKGFkY18wLCBBRElTMTYzMDBfU0NBTl9BRENfMCwgSUlPX1NJR05FRCgxMiksCitzdGF0aWMgSUlPX1NDQU5fRUxfQyhhZGNfMCwgQURJUzE2MzAwX1NDQU5fQURDXzAsIElJT19VTlNJR05FRCgxMiksCiAJCSAgICAgQURJUzE2MzAwX0FVWF9BREMsIE5VTEwpOwogCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhpbmNsaV94LCBBRElTMTYzMDBfU0NBTl9JTkNMSV9YLCBJSU9fU0lHTkVEKDEyKSwKQEAgLTc0LDEwICs2NSwxMCBAQAogICogYWRpczE2MzAwX3BvbGxfZnVuY190aCgpIHRvcCBoYWxmIGludGVycnVwdCBoYW5kbGVyIGNhbGxlZCBieSB0cmlnZ2VyCiAgKiBAcHJpdmF0ZV9kYXRhOglpaW9fZGV2CiAgKiovCi1zdGF0aWMgdm9pZCBhZGlzMTYzMDBfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgdm9pZCBhZGlzMTYzMDBfcG9sbF9mdW5jX3RoKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsIHM2NCB0aW1lKQogewogCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXN0LT5sYXN0X3RpbWVzdGFtcCA9IGluZGlvX2Rldi0+dHJpZy0+dGltZXN0YW1wOworCXN0LT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7CiAJc2NoZWR1bGVfd29yaygmc3QtPndvcmtfdHJpZ2dlcl90b19yaW5nKTsKIAkvKiBJbmRpY2F0ZSB0aGF0IHRoaXMgaW50ZXJydXB0IGlzIGJlaW5nIGhhbmRsZWQgKi8KIApAQCAtODcsNiArNzgsNTQgQEAKIAkgKi8KIH0KIAorLyoqCisgKiBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3QoKSAtIHJlYWQgYWxsIGRhdGEgcmVnaXN0ZXJzCisgKiBAZGV2OiBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIGNoaWxkIG9mIGFjdHVhbCBkZXZpY2UgKGlpb19kZXYgb3IgaWlvX3RyaWcpCisgKiBAcng6IHNvbWV3aGVyZSB0byBwYXNzIGJhY2sgdGhlIHZhbHVlIHJlYWQgKG1pbiBzaXplIGlzIDI0IGJ5dGVzKQorICoqLworc3RhdGljIGludCBhZGlzMTYzMDBfc3BpX3JlYWRfYnVyc3Qoc3RydWN0IGRldmljZSAqZGV2LCB1OCAqcngpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlIG1zZzsKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFkaXMxNjMwMF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7CisJdTMyIG9sZF9zcGVlZF9oeiA9IHN0LT51cy0+bWF4X3NwZWVkX2h6OworCWludCByZXQ7CisKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHhmZXJzW10gPSB7CisJCXsKKwkJCS50eF9idWYgPSBzdC0+dHgsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMiwKKwkJCS5jc19jaGFuZ2UgPSAwLAorCQl9LCB7CisJCQkucnhfYnVmID0gcngsCisJCQkuYml0c19wZXJfd29yZCA9IDgsCisJCQkubGVuID0gMTgsCisJCQkuY3NfY2hhbmdlID0gMCwKKwkJfSwKKwl9OworCisJbXV0ZXhfbG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlzdC0+dHhbMF0gPSBBRElTMTYzMDBfUkVBRF9SRUcoQURJUzE2MzAwX0dMT0JfQ01EKTsKKwlzdC0+dHhbMV0gPSAwOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMF0sICZtc2cpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyc1sxXSwgJm1zZyk7CisKKwlzdC0+dXMtPm1heF9zcGVlZF9oeiA9IEFESVMxNjMwMF9TUElfQlVSU1Q7CisJc3BpX3NldHVwKHN0LT51cyk7CisKKwlyZXQgPSBzcGlfc3luYyhzdC0+dXMsICZtc2cpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnN0LT51cy0+ZGV2LCAicHJvYmxlbSB3aGVuIGJ1cnN0IHJlYWRpbmciKTsKKworCXN0LT51cy0+bWF4X3NwZWVkX2h6ID0gb2xkX3NwZWVkX2h6OworCXNwaV9zZXR1cChzdC0+dXMpOworCW11dGV4X3VubG9jaygmc3QtPmJ1Zl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKiBXaGlsc3QgdGhpcyBtYWtlcyBhIGxvdCBvZiBjYWxscyB0byBpaW9fc3dfcmluZyBmdW5jdGlvbnMgLSBpdCBpcyB0byBkZXZpY2UKICAqIHNwZWNpZmljIHRvIGJlIHJvbGxlZCBpbnRvIHRoZSBjb3JlLgogICovCkBAIC0xMDksMTAgKzE0OCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjMwMF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCQkgIHN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xMjcsNDUgKzE2NSw2IEBACiAKIAlyZXR1cm47CiB9Ci0vKiBpbiB0aGVzZSBjaXJjdW1zdGFuY2VzIGlzIGl0IGJldHRlciB0byBnbyB3aXRoIHVuYWxpZ25lZCBwYWNraW5nIGFuZAotICogZGVhbCB3aXRoIHRoZSBjb3N0PyovCi1zdGF0aWMgaW50IGFkaXMxNjMwMF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpIC8qIFRpbWVzdGFtcCBhbmQgZGF0YSAqLwotCQkJCXNpemUgPSA0KnNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJICAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzMDBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KIAogdm9pZCBhZGlzMTYzMDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewpAQCAtMjAyLDE4ICsyMDEsMTYgQEAKIAlpbmRpb19kZXYtPnJpbmcgPSByaW5nOwogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KIAlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmcmluZy0+YWNjZXNzKTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmYWRpczE2MzAwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmFkaXMxNjMwMF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+YnBlID0gMjsKKwlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOworCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CisJcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOzsKLQl9Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSAmYWRpczE2MzAwX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CisJcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjMwMF9wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwogCkBAIC0yMjIsMTIgKzIxOSwzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjMwMF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjMwMF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMKaW5kZXggNTRlZGIyMGIuLjY0MDM2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjMwMF90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzAwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTYzMDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04NiwxNCArODUsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2MzAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTYzMDAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTYzMDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCmluZGV4IDMzNGIxOGEuLmIwMDAwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MC5oCkBAIC0xMDAsNyArMTAwLDYgQEAKICAqIHN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgLSBkZXZpY2UgaW5zdGFuY2Ugc3BlY2lmaWMgZGF0YQogICogQHVzOgkJCWFjdHVhbCBzcGlfZGV2aWNlCiAgKiBAd29ya190cmlnZ2VyX3RvX3Jpbmc6IGJoIGZvciB0cmlnZ2VyZWQgZXZlbnQgaGFuZGxpbmcKLSAqIEB3b3JrX2NvbnRfdGhyZXNoOiBDTEVBTgogICogQGludGVyOgkJdXNlZCB0byBjaGVjayBpZiBuZXcgaW50ZXJydXB0IGhhcyBiZWVuIHRyaWdnZXJlZAogICogQGxhc3RfdGltZXN0YW1wOglwYXNzaW5nIHRpbWVzdGFtcCBmcm9tIHRoIHRvIGJoIG9mIGludGVycnVwdCBoYW5kbGVyCiAgKiBAaW5kaW9fZGV2OgkJaW5kdXN0cmlhbCBJL08gZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTEyLDcgKzExMSw2IEBACiBzdHJ1Y3QgYWRpczE2MzUwX3N0YXRlIHsKIAlzdHJ1Y3Qgc3BpX2RldmljZQkJKnVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya190cmlnZ2VyX3RvX3Jpbmc7Ci0Jc3RydWN0IGlpb193b3JrX2NvbnQJCXdvcmtfY29udF9kYXRhX3JkeTsKIAlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CkBAIC0xMjUsMTkgKzEyMywxNyBAQAogCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogCi1lbnVtIGFkaXMxNjM1MF9zY2FuIHsKLQlBRElTMTYzNTBfU0NBTl9TVVBQTFksCi0JQURJUzE2MzUwX1NDQU5fR1lST19YLAotCUFESVMxNjM1MF9TQ0FOX0dZUk9fWSwKLQlBRElTMTYzNTBfU0NBTl9HWVJPX1osCi0JQURJUzE2MzUwX1NDQU5fQUNDX1gsCi0JQURJUzE2MzUwX1NDQU5fQUNDX1ksCi0JQURJUzE2MzUwX1NDQU5fQUNDX1osCi0JQURJUzE2MzUwX1NDQU5fVEVNUF9YLAotCUFESVMxNjM1MF9TQ0FOX1RFTVBfWSwKLQlBRElTMTYzNTBfU0NBTl9URU1QX1osCi0JQURJUzE2MzUwX1NDQU5fQURDXzAKLX07CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1NVUFBMWQkwCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWAkxCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWQkyCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0dZUk9fWgkzCisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FDQ19YCTQKKyNkZWZpbmUgQURJUzE2MzUwX1NDQU5fQUNDX1kJNQorI2RlZmluZSBBRElTMTYzNTBfU0NBTl9BQ0NfWgk2CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWAk3CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWQk4CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX1RFTVBfWgk5CisjZGVmaW5lIEFESVMxNjM1MF9TQ0FOX0FEQ18wCTEwCiAKIHZvaWQgYWRpczE2MzUwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjM1MF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwpAQCAtMTUwLDggKzE0Niw2IEBACiBpbnQgYWRpczE2MzUwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAotaW50IGFkaXMxNjM1MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjM1MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjM1MF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMTcxLDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWRpczE2MzUwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCitzdGF0aWMgaW5saW5lIGludCBhZGlzMTYzNTBfY29uZmlndXJlX3Jpbmcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE3OSwxNSArMTczLDUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTYzNTBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTYzNTBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KICNlbmRpZiAvKiBTUElfQURJUzE2MzUwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX2NvcmUuYwppbmRleCAwZWRkZTczLi4xNTc1YjdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF9jb3JlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWNjZWwvYWNjZWwuaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAjaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCkBAIC03NSwxMyArNzYsMTMgQEAKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LCB7CiAJCQkudHhfYnVmID0gc3QtPnR4ICsgMiwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTEyMSwxMyArMTIyLDEzIEBACiAJCQkuYml0c19wZXJfd29yZCA9IDgsCiAJCQkubGVuID0gMiwKIAkJCS5jc19jaGFuZ2UgPSAxLAotCQkJLmRlbGF5X3VzZWNzID0gMjUsCisJCQkuZGVsYXlfdXNlY3MgPSAzNSwKIAkJfSwgewogCQkJLnJ4X2J1ZiA9IHN0LT5yeCwKIAkJCS5iaXRzX3Blcl93b3JkID0gOCwKIAkJCS5sZW4gPSAyLAogCQkJLmNzX2NoYW5nZSA9IDEsCi0JCQkuZGVsYXlfdXNlY3MgPSAyNSwKKwkJCS5kZWxheV91c2VjcyA9IDM1LAogCQl9LAogCX07CiAKQEAgLTYxOSw3ICs2MjAsNyBAQAogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CiAJcmVnZG9uZSA9IDE7CiAKLQlyZXQgPSBhZGlzMTYzNTBfaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCXJldCA9IGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihzdC0+aW5kaW9fZGV2LT5yaW5nLCAwKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJpbmdcbiIpOwogCQlnb3RvIGVycm9yX3VucmVnX3JpbmdfZnVuY3M7CkBAIC02NTEsNyArNjUyLDcgQEAKIAlpZiAoc3BpLT5pcnEpCiAJCWlpb191bnJlZ2lzdGVyX2ludGVycnVwdF9saW5lKHN0LT5pbmRpb19kZXYsIDApOwogZXJyb3JfdW5pbml0aWFsaXplX3Jpbmc6Ci0JYWRpczE2MzUwX3VuaW5pdGlhbGl6ZV9yaW5nKHN0LT5pbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogZXJyb3JfdW5yZWdfcmluZ19mdW5jczoKIAlhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdC0+aW5kaW9fZGV2KTsKIGVycm9yX2ZyZWVfZGV2OgpAQCAtNjg1LDcgKzY4Niw3IEBACiAJaWYgKHNwaS0+aXJxKQogCQlpaW9fdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShpbmRpb19kZXYsIDApOwogCi0JYWRpczE2MzUwX3VuaW5pdGlhbGl6ZV9yaW5nKGluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoaW5kaW9fZGV2LT5yaW5nKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKIAlhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhpbmRpb19kZXYpOwogCWtmcmVlKHN0LT50eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3JpbmcuYwppbmRleCA1ZTk3MTZlLi5lMDUzZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF9yaW5nLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIApAQCAtMTYsMTYgKzE3LDYgQEAKICNpbmNsdWRlICIuLi90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiYWRpczE2MzUwLmgiCiAKLS8qKgotICogY29tYmluZV84X3RvXzE2KCkgdXRpbGl0eSBmdW5jdGlvbiB0byBtdW5nZSB0byB1OHMgaW50byB1MTYKLSAqKi8KLXN0YXRpYyBpbmxpbmUgdTE2IGNvbWJpbmVfOF90b18xNih1OCBsb3dlciwgdTggdXBwZXIpCi17Ci0JdTE2IF9sb3dlciA9IGxvd2VyOwotCXUxNiBfdXBwZXIgPSB1cHBlcjsKLQlyZXR1cm4gX2xvd2VyIHwgKF91cHBlciA8PCA4KTsKLX0KLQogc3RhdGljIElJT19TQ0FOX0VMX0Moc3VwcGx5LCBBRElTMTYzNTBfU0NBTl9TVVBQTFksIElJT19VTlNJR05FRCgxMiksCiAJCUFESVMxNjM1MF9TVVBQTFlfT1VULCBOVUxMKTsKIApAQCAtODAsMTAgKzcxLDEwIEBACiAgKiBhZGlzMTYzNTBfcG9sbF9mdW5jX3RoKCkgdG9wIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgY2FsbGVkIGJ5IHRyaWdnZXIKICAqIEBwcml2YXRlX2RhdGE6CWlpb19kZXYKICAqKi8KLXN0YXRpYyB2b2lkIGFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKK3N0YXRpYyB2b2lkIGFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwgczY0IHRpbWUpCiB7CiAJc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGluZGlvX2Rldik7Ci0Jc3QtPmxhc3RfdGltZXN0YW1wID0gaW5kaW9fZGV2LT50cmlnLT50aW1lc3RhbXA7CisJc3QtPmxhc3RfdGltZXN0YW1wID0gdGltZTsKIAlzY2hlZHVsZV93b3JrKCZzdC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOwogfQogCkBAIC0xNTcsMTAgKzE0OCw5IEBACiAKIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudCkKIAkJaWYgKGFkaXMxNjM1MF9zcGlfcmVhZF9idXJzdCgmc3QtPmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpID49IDApCi0JCQlmb3IgKDsgaSA8IHN0LT5pbmRpb19kZXYtPnNjYW5fY291bnQ7IGkrKykgewotCQkJCWRhdGFbaV0gPSBjb21iaW5lXzhfdG9fMTYoc3QtPnJ4W2kqMisxXSwKLQkJCQkJCQkgIHN0LT5yeFtpKjJdKTsKLQkJCX0KKwkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKQorCQkJCWRhdGFbaV0gPSBiZTE2X3RvX2NwdXAoCisJCQkJCShfX2JlMTYgKikmKHN0LT5yeFtpKjJdKSk7CiAKIAkvKiBHdWFyYW50ZWVkIHRvIGJlIGFsaWduZWQgd2l0aCA4IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAoc3QtPmluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApCkBAIC0xNzYsNDggKzE2Niw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IGFkaXMxNjM1MF9kYXRhX3JkeV9yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXNpemVfdCBzaXplOwotCWRldl9kYmcoJmluZGlvX2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQkvKiBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNjYW4gZWxlbWVudHMgZW5hYmxlZCwgaWYgbm90IGZhaWwqLwotCWlmICghKGluZGlvX2Rldi0+c2Nhbl9jb3VudCB8fCBpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc2V0X2JwZCkgewotCQlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKLQkJCWlmIChpbmRpb19kZXYtPnNjYW5fY291bnQpCi0JCQkJLyogVGltZXN0YW1wIChhbGlnbmVkIHNpemVvZihzNjQpIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9ICgoKGluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIHNpemVvZihzMTYpKQotCQkJCQkJKyBzaXplb2YoczY0KSAtIDEpCi0JCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQotCQkJCQkrIHNpemVvZihzNjQpOwotCQkJZWxzZSAvKiBUaW1lc3RhbXAgb25seSAgKi8KLQkJCQlzaXplID0gc2l6ZW9mKHM2NCk7Ci0JCWVsc2UgLyogRGF0YSBvbmx5ICovCi0JCQlzaXplID0gaW5kaW9fZGV2LT5zY2FuX2NvdW50KnNpemVvZihzMTYpOwotCQlpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKGluZGlvX2Rldi0+cmluZywgc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQotewotCXJldHVybiBpbmRpb19kZXYtPnRyaWcKLQkJPyBpaW9fdHJpZ2dlcl9hdHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJICAgICAgIGluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTYzNTBfZGF0YV9yZHlfcmluZ19wcmVkaXNhYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKGluZGlvX2Rldi0+dHJpZywKLQkJCQkJCWluZGlvX2Rldi0+cG9sbGZ1bmMpCi0JCTogMDsKLX0KLQogdm9pZCBhZGlzMTYzNTBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQogewogCWtmcmVlKGluZGlvX2Rldi0+cG9sbGZ1bmMpOwpAQCAtMjU1LDE4ICsyMDMsMTYgQEAKIAlpbmRpb19kZXYtPnJpbmcgPSByaW5nOwogCS8qIEVmZmVjdGl2ZWx5IHNlbGVjdCB0aGUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gKi8KIAlpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcygmcmluZy0+YWNjZXNzKTsKLQlyaW5nLT5wcmVlbmFibGUgPSAmYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlOwotCXJpbmctPnBvc3RlbmFibGUgPSAmYWRpczE2MzUwX2RhdGFfcmR5X3JpbmdfcG9zdGVuYWJsZTsKLQlyaW5nLT5wcmVkaXNhYmxlID0gJmFkaXMxNjM1MF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGU7CisJcmluZy0+YnBlID0gMjsKKwlyaW5nLT5wcmVlbmFibGUgPSAmaWlvX3N3X3JpbmdfcHJlZW5hYmxlOworCXJpbmctPnBvc3RlbmFibGUgPSAmaWlvX3RyaWdnZXJlZF9yaW5nX3Bvc3RlbmFibGU7CisJcmluZy0+cHJlZGlzYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZTsKIAlyaW5nLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JaW5kaW9fZGV2LT5wb2xsZnVuYyA9IGt6YWxsb2Moc2l6ZW9mKCppbmRpb19kZXYtPnBvbGxmdW5jKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGluZGlvX2Rldi0+cG9sbGZ1bmMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2lpb19zd19yYl9mcmVlOzsKLQl9Ci0JaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSAmYWRpczE2MzUwX3BvbGxfZnVuY190aDsKLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wcml2YXRlX2RhdGEgPSBpbmRpb19kZXY7CisJcmV0ID0gaWlvX2FsbG9jX3BvbGxmdW5jKGluZGlvX2RldiwgTlVMTCwgJmFkaXMxNjM1MF9wb2xsX2Z1bmNfdGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7CisKIAlpbmRpb19kZXYtPm1vZGVzIHw9IElORElPX1JJTkdfVFJJR0dFUkVEOwogCXJldHVybiAwOwogCkBAIC0yNzUsMTIgKzIyMSwzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjM1MF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlyZXR1cm4gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHJpbmcsIDApOwotfQotCi12b2lkIGFkaXMxNjM1MF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKQotewotCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHJpbmcpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3RyaWdnZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjM1MF90cmlnZ2VyLmMKaW5kZXggMWZmYTc1ZC4uNzZlZGNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2MzUwX3RyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTYzNTBfdHJpZ2dlci5jCkBAIC0yMyw4ICsyMyw3IEBACiAJc3RydWN0IGFkaXMxNjM1MF9zdGF0ZSAqc3QgPSBpaW9fZGV2X2dldF9kZXZkYXRhKGRldl9pbmZvKTsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBzdC0+dHJpZzsKIAotCXRyaWctPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLQlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcpOworCWlpb190cmlnZ2VyX3BvbGwodHJpZywgdGltZXN0YW1wKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTg2LDE0ICs4NSwxMyBAQAogCXN0cnVjdCBhZGlzMTYzNTBfc3RhdGUgKnN0ID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKIAogCXN0LT50cmlnID0gaWlvX2FsbG9jYXRlX3RyaWdnZXIoKTsKLQlzdC0+dHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsIEdGUF9LRVJORUwpOworCXN0LT50cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsCisJCQkJICAgImFkaXMxNjM1MC1kZXYlZCIsCisJCQkJICAgaW5kaW9fZGV2LT5pZCk7CiAJaWYgKCFzdC0+dHJpZy0+bmFtZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX2ZyZWVfdHJpZzsKIAl9Ci0Jc25wcmludGYoKGNoYXIgKilzdC0+dHJpZy0+bmFtZSwKLQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkgImFkaXMxNjM1MC1kZXYlZCIsIGluZGlvX2Rldi0+aWQpOwogCXN0LT50cmlnLT5kZXYucGFyZW50ID0gJnN0LT51cy0+ZGV2OwogCXN0LT50cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXN0LT50cmlnLT5wcml2YXRlX2RhdGEgPSBzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKaW5kZXggNWE2OWE3YS4uNmZmMzNlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwLmgKQEAgLTEyNiw3ICsxMjYsNiBAQAogICogc3RydWN0IGFkaXMxNjQwMF9zdGF0ZSAtIGRldmljZSBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAgKiBAdXM6CQkJYWN0dWFsIHNwaV9kZXZpY2UKICAqIEB3b3JrX3RyaWdnZXJfdG9fcmluZzogYmggZm9yIHRyaWdnZXJlZCBldmVudCBoYW5kbGluZwotICogQHdvcmtfY29udF90aHJlc2g6IENMRUFOCiAgKiBAaW50ZXI6CQl1c2VkIHRvIGNoZWNrIGlmIG5ldyBpbnRlcnJ1cHQgaGFzIGJlZW4gdHJpZ2dlcmVkCiAgKiBAbGFzdF90aW1lc3RhbXA6CXBhc3NpbmcgdGltZXN0YW1wIGZyb20gdGggdG8gYmggb2YgaW50ZXJydXB0IGhhbmRsZXIKICAqIEBpbmRpb19kZXY6CQlpbmR1c3RyaWFsIEkvTyBkZXZpY2Ugc3RydWN0dXJlCkBAIC0xMzgsNyArMTM3LDYgQEAKIHN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgewogCXN0cnVjdCBzcGlfZGV2aWNlCQkqdXM7CiAJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKLQlzdHJ1Y3QgaWlvX3dvcmtfY29udAkJd29ya19jb250X3RocmVzaDsKIAlzNjQJCQkJbGFzdF90aW1lc3RhbXA7CiAJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OwogCXN0cnVjdCBpaW9fdHJpZ2dlcgkJKnRyaWc7CkBAIC0xNDcsMzMgKzE0NSwyNSBAQAogCXN0cnVjdCBtdXRleAkJCWJ1Zl9sb2NrOwogfTsKIAotaW50IGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU4ICpyeCk7Ci0KIGludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKTsKIAotaW50IGFkaXMxNjQwMF9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1pbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiAjaWZkZWYgQ09ORklHX0lJT19SSU5HX0JVRkZFUgogLyogQXQgdGhlIG1vbWVudCB0cmlnZ2VycyBhcmUgb25seSB1c2VkIGZvciByaW5nIGJ1ZmZlcgogICogZmlsbGluZy4gVGhpcyBtYXkgY2hhbmdlIQogICovCiAKLWVudW0gYWRpczE2NDAwX3NjYW4gewotCUFESVMxNjQwMF9TQ0FOX1NVUFBMWSwKLQlBRElTMTY0MDBfU0NBTl9HWVJPX1gsCi0JQURJUzE2NDAwX1NDQU5fR1lST19ZLAotCUFESVMxNjQwMF9TQ0FOX0dZUk9fWiwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWCwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWSwKLQlBRElTMTY0MDBfU0NBTl9BQ0NfWiwKLQlBRElTMTY0MDBfU0NBTl9NQUdOX1gsCi0JQURJUzE2NDAwX1NDQU5fTUFHTl9ZLAotCUFESVMxNjQwMF9TQ0FOX01BR05fWiwKLQlBRElTMTY0MDBfU0NBTl9URU1QLAotCUFESVMxNjQwMF9TQ0FOX0FEQ18wCi19OworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9TVVBQTFkJMAorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1gJMQorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1kJMgorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9HWVJPX1oJMworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9BQ0NfWAk0CisjZGVmaW5lIEFESVMxNjQwMF9TQ0FOX0FDQ19ZCTUKKyNkZWZpbmUgQURJUzE2NDAwX1NDQU5fQUNDX1oJNgorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1gJNworI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1kJOAorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9NQUdOX1oJOQorI2RlZmluZSBBRElTMTY0MDBfU0NBTl9URU1QCTEwCisjZGVmaW5lIEFESVMxNjQwMF9TQ0FOX0FEQ18wCTExCiAKIHZvaWQgYWRpczE2NDAwX3JlbW92ZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogaW50IGFkaXMxNjQwMF9wcm9iZV90cmlnZ2VyKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwpAQCAtMTg2LDggKzE3Niw2IEBACiBpbnQgYWRpczE2NDAwX2NvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAotaW50IGFkaXMxNjQwMF9pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZyk7Ci12b2lkIGFkaXMxNjQwMF91bmluaXRpYWxpemVfcmluZyhzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKICNlbHNlIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGFkaXMxNjQwMF9yZW1vdmVfdHJpZ2dlcihzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpAQCAtMjE2LDE0ICsyMDQsNSBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZGlzMTY0MDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19JSU9fUklOR19CVUZGRVIgKi8KICNlbmRpZiAvKiBTUElfQURJUzE2NDAwX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX2NvcmUuYwppbmRleCBlNjllMmNlLi42MDEzZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9jb3JlLmMKQEAgLTIxLDEyICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgIi4uL2lpby5oIgogI2luY2x1ZGUgIi4uL3N5c2ZzLmgiCisjaW5jbHVkZSAiLi4vcmluZ19nZW5lcmljLmgiCiAjaW5jbHVkZSAiLi4vYWNjZWwvYWNjZWwuaCIKICNpbmNsdWRlICIuLi9hZGMvYWRjLmgiCiAjaW5jbHVkZSAiLi4vZ3lyby9neXJvLmgiCkBAIC0zNiw2ICszNyw4IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJhZGlzMTY0MDAiCiAKK3N0YXRpYyBpbnQgYWRpczE2NDAwX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworCiAvKiBBdCB0aGUgbW9tZW50IHRoZSBzcGkgZnJhbWV3b3JrIGRvZXNuJ3QgYWxsb3cgZ2xvYmFsIHNldHRpbmcgb2YgY3NfY2hhbmdlLgogICogSXQncyBpbiB0aGUgbGlrZWx5IHRvIGJlIGFkZGVkIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiBzcGkuaC4KICAqIFRoaXMgbWVhbnMgdGhhdCB1c2UgY2Fubm90IGJlIG1hZGUgb2Ygc3BpX3dyaXRlIGV0Yy4KQEAgLTE2MSw1NCArMTY0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKLSAqIGFkaXMxNjQwMF9zcGlfcmVhZF9idXJzdCgpIC0gcmVhZCBhbGwgZGF0YSByZWdpc3RlcnMKLSAqIEBkZXY6IGRldmljZSBhc3NvY2lhdGVkIHdpdGggY2hpbGQgb2YgYWN0dWFsIGRldmljZSAoaWlvX2RldiBvciBpaW9fdHJpZykKLSAqIEByeDogc29tZXdoZXJlIHRvIHBhc3MgYmFjayB0aGUgdmFsdWUgcmVhZCAobWluIHNpemUgaXMgMjQgYnl0ZXMpCi0gKiovCi1pbnQgYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggKnJ4KQotewotCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7Ci0Jc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOwotCXUzMiBvbGRfc3BlZWRfaHogPSBzdC0+dXMtPm1heF9zcGVlZF9oejsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0gewotCQl7Ci0JCQkudHhfYnVmID0gc3QtPnR4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDIsCi0JCQkuY3NfY2hhbmdlID0gMCwKLQkJfSwgewotCQkJLnJ4X2J1ZiA9IHJ4LAotCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAotCQkJLmxlbiA9IDI0LAotCQkJLmNzX2NoYW5nZSA9IDEsCi0JCX0sCi0JfTsKLQotCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7Ci0Jc3QtPnR4WzBdID0gQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9HTE9CX0NNRCk7Ci0Jc3QtPnR4WzFdID0gMDsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBtaW4oQURJUzE2NDAwX1NQSV9CVVJTVCwgb2xkX3NwZWVkX2h6KTsKLQlzcGlfc2V0dXAoc3QtPnVzKTsKLQotCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7Ci0JaWYgKHJldCkKLQkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOwotCi0Jc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7Ci0Jc3BpX3NldHVwKHN0LT51cyk7Ci0JbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGFkaXMxNjQwMF9zcGlfcmVhZF9zaWduZWQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY2hhciAqYnVmLApAQCAtMjc3LDcgKzIzMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgc3NpemVfdCBhZGlzMTY0MDBfd3JpdGVfMTZiaXQoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLApAQCAtMzQ5LDYgKzMwMywxOCBAQAogCXJldHVybiByZXQgPyByZXQgOiBsZW47CiB9CiAKK3N0YXRpYyBpbnQgYWRpczE2NDAwX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXJldCA9IGFkaXMxNjQwMF9zcGlfd3JpdGVfcmVnXzgoZGV2LAorCQkJQURJUzE2NDAwX0dMT0JfQ01ELAorCQkJQURJUzE2NDAwX0dMT0JfQ01EX1NXX1JFU0VUKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGRldiwgInByb2JsZW0gcmVzZXR0aW5nIGRldmljZSIpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgYWRpczE2NDAwX3dyaXRlX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKQEAgLTM2NCw4ICszMzAsNiBAQAogCXJldHVybiAtMTsKIH0KIAotCi0KIGludCBhZGlzMTY0MDBfc2V0X2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKQogewogCWludCByZXQ7CkBAIC0zODgsMTggKzM1Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjQwMF9yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBhZGlzMTY0MDBfc3BpX3dyaXRlX3JlZ184KGRldiwKLQkJCUFESVMxNjQwMF9HTE9CX0NNRCwKLQkJCUFESVMxNjQwMF9HTE9CX0NNRF9TV19SRVNFVCk7Ci0JaWYgKHJldCkKLQkJZGV2X2VycihkZXYsICJwcm9ibGVtIHJlc2V0dGluZyBkZXZpY2UiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIFBvd2VyIGRvd24gdGhlIGRldmljZSAqLwogc3RhdGljIGludCBhZGlzMTY0MDBfc3RvcF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDMwLDcgKzM4Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhZGlzMTY0MDBfY2hlY2tfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAl1MTYgc3RhdHVzOwogCWludCByZXQ7CkBAIC00OTYsNiArNDQ4LDExIEBACiAJfQogCiAJLyogRG8gc2VsZiB0ZXN0ICovCisJcmV0ID0gYWRpczE2NDAwX3NlbGZfdGVzdChkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJzZWxmIHRlc3QgZmFpbHVyZSIpOworCQlnb3RvIGVycl9yZXQ7CisJfQogCiAJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHJlc3VsdCAqLwogCXJldCA9IGFkaXMxNjQwMF9jaGVja19zdGF0dXMoZGV2KTsKQEAgLTY4NSwyMSArNjQyLDEzIEBACiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAlyZWdkb25lID0gMTsKIAotCXJldCA9IGFkaXMxNjQwMF9pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJcmV0ID0gaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcsIDApOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcmluZ1xuIik7CiAJCWdvdG8gZXJyb3JfdW5yZWdfcmluZ19mdW5jczsKIAl9CiAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkgewotI2lmIDAgLyogZml4bWU6IGhlcmUgd2Ugc2hvdWxkIHN1cHBvcnQgKi8KLQkJaWlvX2luaXRfd29ya19jb250KCZzdC0+d29ya19jb250X3RocmVzaCwKLQkJCQlOVUxMLAotCQkJCWFkaXMxNjQwMF90aHJlc2hfaGFuZGxlcl9iaF9ub19jaGVjaywKLQkJCQkwLAotCQkJCTAsCi0JCQkJc3QpOwotI2VuZGlmCiAJCXJldCA9IGlpb19yZWdpc3Rlcl9pbnRlcnJ1cHRfbGluZShzcGktPmlycSwKIAkJCQlzdC0+aW5kaW9fZGV2LAogCQkJCTAsCkBAIC03MjYsNyArNjc1LDcgQEAKIAlpZiAoc3QtPmluZGlvX2Rldi0+bW9kZXMgJiBJTkRJT19SSU5HX1RSSUdHRVJFRCkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoc3QtPmluZGlvX2RldiwgMCk7CiBlcnJvcl91bmluaXRpYWxpemVfcmluZzoKLQlhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3QtPmluZGlvX2Rldi0+cmluZyk7CisJaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3QtPmluZGlvX2Rldi0+cmluZyk7CiBlcnJvcl91bnJlZ19yaW5nX2Z1bmNzOgogCWFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKHN0LT5pbmRpb19kZXYpOwogZXJyb3JfZnJlZV9kZXY6CkBAIC03NjEsNyArNzEwLDcgQEAKIAlpZiAoc3BpLT5pcnEgJiYgZ3Bpb19pc192YWxpZChpcnFfdG9fZ3BpbyhzcGktPmlycSkpID4gMCkKIAkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoaW5kaW9fZGV2LCAwKTsKIAotCWFkaXMxNjQwMF91bmluaXRpYWxpemVfcmluZyhpbmRpb19kZXYtPnJpbmcpOworCWlpb19yaW5nX2J1ZmZlcl91bnJlZ2lzdGVyKHN0LT5pbmRpb19kZXYtPnJpbmcpOwogCWFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKGluZGlvX2Rldik7CiAJaWlvX2RldmljZV91bnJlZ2lzdGVyKGluZGlvX2Rldik7CiAJa2ZyZWUoc3QtPnR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCmluZGV4IDU1MjliMzIuLjk0OWRiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCkBAIC0xNiwxNiArMTcsNiBAQAogI2luY2x1ZGUgIi4uL3RyaWdnZXIuaCIKICNpbmNsdWRlICJhZGlzMTY0MDAuaCIKIAotLyoqCi0gKiBjb21iaW5lXzhfdG9fMTYoKSB1dGlsaXR5IGZ1bmN0aW9uIHRvIG11bmdlIHRvIHU4cyBpbnRvIHUxNgotICoqLwotc3RhdGljIGlubGluZSB1MTYgY29tYmluZV84X3RvXzE2KHU4IGxvd2VyLCB1OCB1cHBlcikKLXsKLQl1MTYgX2xvd2VyID0gbG93ZXI7Ci0JdTE2IF91cHBlciA9IHVwcGVyOwotCXJldHVybiBfbG93ZXIgfCAoX3VwcGVyIDw8IDgpOwotfQotCiBzdGF0aWMgSUlPX1NDQU5fRUxfQyhzdXBwbHksIEFESVMxNjQwMF9TQ0FOX1NVUFBMWSwgSUlPX1NJR05FRCgxNCksCiAJCSAgICAgQURJUzE2NDAwX1NVUFBMWV9PVVQsIE5VTEwpOwogCkBAIC04MywxMCArNzQsMTAgQEAKICAqIGFkaXMxNjQwMF9wb2xsX2Z1bmNfdGgoKSB0b3AgaGFsZiBpbnRlcnJ1cHQgaGFuZGxlciBjYWxsZWQgYnkgdHJpZ2dlcgogICogQHByaXZhdGVfZGF0YToJaWlvX2RldgogICoqLwotc3RhdGljIHZvaWQgYWRpczE2NDAwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQorc3RhdGljIHZvaWQgYWRpczE2NDAwX3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKLQlzdC0+bGFzdF90aW1lc3RhbXAgPSBpbmRpb19kZXYtPnRyaWctPnRpbWVzdGFtcDsKKwlzdC0+bGFzdF90aW1lc3RhbXAgPSB0aW1lOwogCXNjaGVkdWxlX3dvcmsoJnN0LT53b3JrX3RyaWdnZXJfdG9fcmluZyk7CiAJLyogSW5kaWNhdGUgdGhhdCB0aGlzIGludGVycnVwdCBpcyBiZWluZyBoYW5kbGVkICovCiAKQEAgLTk2LDYgKzg3LDU0IEBACiAJICovCiB9CiAKKy8qKgorICogYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCkgLSByZWFkIGFsbCBkYXRhIHJlZ2lzdGVycworICogQGRldjogZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBjaGlsZCBvZiBhY3R1YWwgZGV2aWNlIChpaW9fZGV2IG9yIGlpb190cmlnKQorICogQHJ4OiBzb21ld2hlcmUgdG8gcGFzcyBiYWNrIHRoZSB2YWx1ZSByZWFkIChtaW4gc2l6ZSBpcyAyNCBieXRlcykKKyAqKi8KK3N0YXRpYyBpbnQgYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdTggKnJ4KQoreworCXN0cnVjdCBzcGlfbWVzc2FnZSBtc2c7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShpbmRpb19kZXYpOworCXUzMiBvbGRfc3BlZWRfaHogPSBzdC0+dXMtPm1heF9zcGVlZF9oejsKKwlpbnQgcmV0OworCisJc3RydWN0IHNwaV90cmFuc2ZlciB4ZmVyc1tdID0geworCQl7CisJCQkudHhfYnVmID0gc3QtPnR4LAorCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkJLmxlbiA9IDIsCisJCQkuY3NfY2hhbmdlID0gMCwKKwkJfSwgeworCQkJLnJ4X2J1ZiA9IHJ4LAorCQkJLmJpdHNfcGVyX3dvcmQgPSA4LAorCQkJLmxlbiA9IDI0LAorCQkJLmNzX2NoYW5nZSA9IDEsCisJCX0sCisJfTsKKworCW11dGV4X2xvY2soJnN0LT5idWZfbG9jayk7CisJc3QtPnR4WzBdID0gQURJUzE2NDAwX1JFQURfUkVHKEFESVMxNjQwMF9HTE9CX0NNRCk7CisJc3QtPnR4WzFdID0gMDsKKworCXNwaV9tZXNzYWdlX2luaXQoJm1zZyk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhmZXJzWzBdLCAmbXNnKTsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlcnNbMV0sICZtc2cpOworCisJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBtaW4oQURJUzE2NDAwX1NQSV9CVVJTVCwgb2xkX3NwZWVkX2h6KTsKKwlzcGlfc2V0dXAoc3QtPnVzKTsKKworCXJldCA9IHNwaV9zeW5jKHN0LT51cywgJm1zZyk7CisJaWYgKHJldCkKKwkJZGV2X2Vycigmc3QtPnVzLT5kZXYsICJwcm9ibGVtIHdoZW4gYnVyc3QgcmVhZGluZyIpOworCisJc3QtPnVzLT5tYXhfc3BlZWRfaHogPSBvbGRfc3BlZWRfaHo7CisJc3BpX3NldHVwKHN0LT51cyk7CisJbXV0ZXhfdW5sb2NrKCZzdC0+YnVmX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKIC8qIFdoaWxzdCB0aGlzIG1ha2VzIGEgbG90IG9mIGNhbGxzIHRvIGlpb19zd19yaW5nIGZ1bmN0aW9ucyAtIGl0IGlzIHRvIGRldmljZQogICogc3BlY2lmaWMgdG8gYmUgcm9sbGVkIGludG8gdGhlIGNvcmUuCiAgKi8KQEAgLTExOCwxMCArMTU3LDkgQEAKIAogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQogCQlpZiAoYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZzdC0+aW5kaW9fZGV2LT5kZXYsIHN0LT5yeCkgPj0gMCkKLQkJCWZvciAoOyBpIDwgc3QtPmluZGlvX2Rldi0+c2Nhbl9jb3VudDsgaSsrKSB7Ci0JCQkJZGF0YVtpXSA9IGNvbWJpbmVfOF90b18xNihzdC0+cnhbaSoyKzFdLAotCQkJCQkJCSAgc3QtPnJ4W2kqMl0pOwotCQkJfQorCQkJZm9yICg7IGkgPCBzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50OyBpKyspCisJCQkJZGF0YVtpXQk9IGJlMTZfdG9fY3B1cCgKKwkJCQkJKF9fYmUxNiAqKSYoc3QtPnJ4W2kqMl0pKTsKIAogCS8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLwogCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKQEAgLTEzNiw0NSArMTc0LDYgQEAKIAogCXJldHVybjsKIH0KLS8qIGluIHRoZXNlIGNpcmN1bXN0YW5jZXMgaXMgaXQgYmV0dGVyIHRvIGdvIHdpdGggdW5hbGlnbmVkIHBhY2tpbmcgYW5kCi0gKiBkZWFsIHdpdGggdGhlIGNvc3Q/Ki8KLXN0YXRpYyBpbnQgYWRpczE2NDAwX2RhdGFfcmR5X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0Jc2l6ZV90IHNpemU7Ci0JZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCi0JaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbmRpb19kZXYtPnJpbmctPmFjY2Vzcy5zZXRfYnBkKSB7Ci0JCWlmIChpbmRpb19kZXYtPnNjYW5fdGltZXN0YW1wKQotCQkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkgLyogVGltZXN0YW1wIGFuZCBkYXRhICovCi0JCQkJc2l6ZSA9IDYqc2l6ZW9mKHM2NCk7Ci0JCQllbHNlIC8qIFRpbWVzdGFtcCBvbmx5ICAqLwotCQkJCXNpemUgPSBzaXplb2YoczY0KTsKLQkJZWxzZSAvKiBEYXRhIG9ubHkgKi8KLQkJCXNpemUgPSBpbmRpb19kZXYtPnNjYW5fY291bnQqc2l6ZW9mKHMxNik7Ci0JCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCi17Ci0JcmV0dXJuIGluZGlvX2Rldi0+dHJpZwotCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQotCi1zdGF0aWMgaW50IGFkaXMxNjQwMF9kYXRhX3JkeV9yaW5nX3ByZWRpc2FibGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldikKLXsKLQlyZXR1cm4gaW5kaW9fZGV2LT50cmlnCi0JCT8gaWlvX3RyaWdnZXJfZGV0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAotCQkJCQkJaW5kaW9fZGV2LT5wb2xsZnVuYykKLQkJOiAwOwotfQogCiB2b2lkIGFkaXMxNjQwMF91bmNvbmZpZ3VyZV9yaW5nKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCiB7CkBAIC0yMTQsMTggKzIxMywxNiBAQAogCWluZGlvX2Rldi0+cmluZyA9IHJpbmc7CiAJLyogRWZmZWN0aXZlbHkgc2VsZWN0IHRoZSByaW5nIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiAqLwogCWlpb19yaW5nX3N3X3JlZ2lzdGVyX2Z1bmNzKCZyaW5nLT5hY2Nlc3MpOwotCXJpbmctPnByZWVuYWJsZSA9ICZhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wcmVlbmFibGU7Ci0JcmluZy0+cG9zdGVuYWJsZSA9ICZhZGlzMTY0MDBfZGF0YV9yZHlfcmluZ19wb3N0ZW5hYmxlOwotCXJpbmctPnByZWRpc2FibGUgPSAmYWRpczE2NDAwX2RhdGFfcmR5X3JpbmdfcHJlZGlzYWJsZTsKKwlyaW5nLT5icGUgPSAyOworCXJpbmctPnByZWVuYWJsZSA9ICZpaW9fc3dfcmluZ19wcmVlbmFibGU7CisJcmluZy0+cG9zdGVuYWJsZSA9ICZpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZTsKKwlyaW5nLT5wcmVkaXNhYmxlID0gJmlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlOwogCXJpbmctPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlpbmRpb19kZXYtPnBvbGxmdW5jID0ga3phbGxvYyhzaXplb2YoKmluZGlvX2Rldi0+cG9sbGZ1bmMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5kaW9fZGV2LT5wb2xsZnVuYyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3JfaWlvX3N3X3JiX2ZyZWU7OwotCX0KLQlpbmRpb19kZXYtPnBvbGxmdW5jLT5wb2xsX2Z1bmNfbWFpbiA9ICZhZGlzMTY0MDBfcG9sbF9mdW5jX3RoOwotCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXQgPSBpaW9fYWxsb2NfcG9sbGZ1bmMoaW5kaW9fZGV2LCBOVUxMLCAmYWRpczE2NDAwX3BvbGxfZnVuY190aCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9paW9fc3dfcmJfZnJlZTsKKwogCWluZGlvX2Rldi0+bW9kZXMgfD0gSU5ESU9fUklOR19UUklHR0VSRUQ7CiAJcmV0dXJuIDA7CiAKQEAgLTIzMywxMyArMjMwLDMgQEAKIAlpaW9fc3dfcmJfZnJlZShpbmRpb19kZXYtPnJpbmcpOwogCXJldHVybiByZXQ7CiB9Ci0KLWludCBhZGlzMTY0MDBfaW5pdGlhbGl6ZV9yaW5nKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcpCi17Ci0JcmV0dXJuIGlpb19yaW5nX2J1ZmZlcl9yZWdpc3RlcihyaW5nLCAwKTsKLX0KLQotdm9pZCBhZGlzMTY0MDBfdW5pbml0aWFsaXplX3Jpbmcoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKLXsKLQlpaW9fcmluZ19idWZmZXJfdW5yZWdpc3RlcihyaW5nKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF90cmlnZ2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfdHJpZ2dlci5jCmluZGV4IDNiMzI1MGEuLmFhZmU2MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF90cmlnZ2VyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3RyaWdnZXIuYwpAQCAtMjMsOCArMjMsNyBAQAogCXN0cnVjdCBhZGlzMTY0MDBfc3RhdGUgKnN0ID0gaWlvX2Rldl9nZXRfZGV2ZGF0YShkZXZfaW5mbyk7CiAJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnID0gc3QtPnRyaWc7CiAKLQl0cmlnLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0JaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwlpaW9fdHJpZ2dlcl9wb2xsKHRyaWcsIHRpbWVzdGFtcCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC04NiwxNCArODUsMTMgQEAKIAlzdHJ1Y3QgYWRpczE2NDAwX3N0YXRlICpzdCA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CiAKIAlzdC0+dHJpZyA9IGlpb19hbGxvY2F0ZV90cmlnZ2VyKCk7Ci0Jc3QtPnRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlzdC0+dHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJCSAgICJhZGlzMTY0MDAtZGV2JWQiLAorCQkJCSAgIGluZGlvX2Rldi0+aWQpOwogCWlmICghc3QtPnRyaWctPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcl9mcmVlX3RyaWc7CiAJfQotCXNucHJpbnRmKChjaGFyICopc3QtPnRyaWctPm5hbWUsCi0JCSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJICJhZGlzMTY0MDAtZGV2JWQiLCBpbmRpb19kZXYtPmlkKTsKIAlzdC0+dHJpZy0+ZGV2LnBhcmVudCA9ICZzdC0+dXMtPmRldjsKIAlzdC0+dHJpZy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlzdC0+dHJpZy0+cHJpdmF0ZV9kYXRhID0gc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMDEwMzA2OC4uZGQ0ZDg3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMzAsOSArMzAsNiBAQAogCiAvKiBJRFIgdG8gYXNzaWduIGVhY2ggcmVnaXN0ZXJlZCBkZXZpY2UgYSB1bmlxdWUgaWQqLwogc3RhdGljIERFRklORV9JRFIoaWlvX2lkcik7Ci0KLS8qIElEUiBmb3IgZ2VuZXJhbCBldmVudCBpZGVudGlmaWVycyAqLwotc3RhdGljIERFRklORV9JRFIoaWlvX2V2ZW50X2lkcik7CiAvKiBJRFIgdG8gYWxsb2NhdGUgY2hhcmFjdGVyIGRldmljZSBtaW5vciBudW1iZXJzICovCiBzdGF0aWMgREVGSU5FX0lEUihpaW9fY2hyZGV2X2lkcik7CiAvKiBMb2NrIHVzZWQgdG8gcHJvdGVjdCBib3RoIG9mIHRoZSBhYm92ZSAqLwpAQCAtNjU0LDE2ICs2NTEsMTEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7CiAJCWRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2ldLm93bmVyID0gZGV2X2luZm8tPmRyaXZlcl9tb2R1bGU7Ci0JCXJldCA9IGlpb19nZXRfbmV3X2lkcl92YWwoJmlpb19ldmVudF9pZHIpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyb3JfZnJlZV9zZXR1cF9ldl9pbnRzOwotCQllbHNlCi0JCQlkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCA9IHJldDsKIAogCQlzbnByaW50ZihkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5fbmFtZSwgMjAsCiAJCQkgIiVzOmV2ZW50JWQiLAogCQkJIGRldl9uYW1lKCZkZXZfaW5mby0+ZGV2KSwKLQkJCSBkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCk7CisJCQkgaSk7CiAKIAkJcmV0ID0gaWlvX3NldHVwX2V2X2ludCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbaV0sCiAJCQkJICAgICAgIChjb25zdCBjaGFyICopKGRldl9pbmZvCkBAIC02NzQsOCArNjY2LDYgQEAKIAkJaWYgKHJldCkgewogCQkJZGV2X2VycigmZGV2X2luZm8tPmRldiwKIAkJCQkiQ291bGQgbm90IGdldCBjaHJkZXYgaW50ZXJmYWNlXG4iKTsKLQkJCWlpb19mcmVlX2lkcl92YWwoJmlpb19ldmVudF9pZHIsCi0JCQkJCSBkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5pZCk7CiAJCQlnb3RvIGVycm9yX2ZyZWVfc2V0dXBfZXZfaW50czsKIAkJfQogCkBAIC03MTEsMTEgKzcwMSw4IEBACiAJCQkJICAgLT5ldmVudF9pbnRlcmZhY2VzW2pdLmRldi5rb2JqLAogCQkJCSAgICZkZXZfaW5mby0+ZXZlbnRfYXR0cnNbal0pOwogZXJyb3JfZnJlZV9zZXR1cF9ldl9pbnRzOgotCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKLQkJaWlvX2ZyZWVfaWRyX3ZhbCgmaWlvX2V2ZW50X2lkciwKLQkJCQkgZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbal0uaWQpOworCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCiAJCWlpb19mcmVlX2V2X2ludCgmZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXNbal0pOwotCX0KIAlrZnJlZShkZXZfaW5mby0+aW50ZXJydXB0cyk7CiBlcnJvcl9mcmVlX2V2ZW50X2ludGVyZmFjZXM6CiAJa2ZyZWUoZGV2X2luZm8tPmV2ZW50X2ludGVyZmFjZXMpOwpAQCAtNzM1LDExICs3MjIsOCBAQAogCQkJCSAgIC0+ZXZlbnRfaW50ZXJmYWNlc1tpXS5kZXYua29iaiwKIAkJCQkgICAmZGV2X2luZm8tPmV2ZW50X2F0dHJzW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+bnVtX2ludGVycnVwdF9saW5lczsgaSsrKSB7Ci0JCWlpb19mcmVlX2lkcl92YWwoJmlpb19ldmVudF9pZHIsCi0JCQkJIGRldl9pbmZvLT5ldmVudF9pbnRlcmZhY2VzW2ldLmlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X2luZm8tPm51bV9pbnRlcnJ1cHRfbGluZXM7IGkrKykKIAkJaWlvX2ZyZWVfZXZfaW50KCZkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlc1tpXSk7Ci0JfQogCWtmcmVlKGRldl9pbmZvLT5pbnRlcnJ1cHRzKTsKIAlrZnJlZShkZXZfaW5mby0+ZXZlbnRfaW50ZXJmYWNlcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1yaW5nLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1yaW5nLmMKaW5kZXggYWRhMTU5Yi4uNmFiNTc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXJpbmcuYwpAQCAtMTQ5LDEyICsxNDksMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JYnVmLT5ldl9pbnQuaWQgPSBpZDsKLQogCXNucHJpbnRmKGJ1Zi0+ZXZfaW50Ll9uYW1lLCBzaXplb2YoYnVmLT5ldl9pbnQuX25hbWUpLAogCQkgIiVzOmV2ZW50JWQiLAogCQkgZGV2X25hbWUoJmJ1Zi0+ZGV2KSwKLQkJIGJ1Zi0+ZXZfaW50LmlkKTsKKwkJIGlkKTsKIAlyZXQgPSBpaW9fc2V0dXBfZXZfaW50KCYoYnVmLT5ldl9pbnQpLAogCQkJICAgICAgIGJ1Zi0+ZXZfaW50Ll9uYW1lLAogCQkJICAgICAgIG93bmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCmluZGV4IDU2ODJlNjEuLjU3ZGQ5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKQEAgLTMxLDcgKzMxLDYgQEAKICAqIEFueSBvdGhlciBzdWdnZXN0aW9ucz8KICAqLwogCi0KIHN0YXRpYyBERUZJTkVfSURSKGlpb190cmlnZ2VyX2lkcik7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlpb190cmlnZ2VyX2lkcl9sb2NrKTsKIApAQCAtMTczLDcgKzE3Miw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX2ZpbmRfYnlfbmFtZSk7CiAKLXZvaWQgaWlvX3RyaWdnZXJfcG9sbChzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcpCit2b2lkIGlpb190cmlnZ2VyX3BvbGwoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSkKIHsKIAlzdHJ1Y3QgaWlvX3BvbGxfZnVuYyAqcGZfY3Vyc29yOwogCkBAIC0xODUsNyArMTg0LDggQEAKIAl9CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwZl9jdXJzb3IsICZ0cmlnLT5wb2xsZnVuY19saXN0LCBsaXN0KSB7CiAJCWlmIChwZl9jdXJzb3ItPnBvbGxfZnVuY19tYWluKSB7Ci0JCQlwZl9jdXJzb3ItPnBvbGxfZnVuY19tYWluKHBmX2N1cnNvci0+cHJpdmF0ZV9kYXRhKTsKKwkJCXBmX2N1cnNvci0+cG9sbF9mdW5jX21haW4ocGZfY3Vyc29yLT5wcml2YXRlX2RhdGEsCisJCQkJCQkgIHRpbWUpOwogCQkJdHJpZy0+dXNlX2NvdW50Kys7CiAJCX0KIAl9CkBAIC0xOTgsOCArMTk4LDcgQEAKIAlpZiAodHJpZy0+dXNlX2NvdW50ID09IDAgJiYgdHJpZy0+dHJ5X3JlZW5hYmxlKQogCQlpZiAodHJpZy0+dHJ5X3JlZW5hYmxlKHRyaWcpKSB7CiAJCQkvKiBNaXNzZWQgYW5kIGludGVycnVwdCBzbyBsYXVuY2ggbmV3IHBvbGwgbm93ICovCi0JCQl0cmlnLT50aW1lc3RhbXAgPSAwOwotCQkJaWlvX3RyaWdnZXJfcG9sbCh0cmlnKTsKKwkJCWlpb190cmlnZ2VyX3BvbGwodHJpZywgMCk7CiAJCX0KIH0KIEVYUE9SVF9TWU1CT0woaWlvX3RyaWdnZXJfbm90aWZ5X2RvbmUpOwpAQCAtMjg0LDcgKzI4Myw3IEBACiBFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyX2RldHRhY2hfcG9sbF9mdW5jKTsKIAogLyoqCi0gKiBpaW9fdHJpZ2dlcl9yZWFkX2N1cnJyZW50KCkgdHJpZ2dlciBjb25zdW1lciBzeXNmcyBxdWVyeSB3aGljaCB0cmlnZ2VyCisgKiBpaW9fdHJpZ2dlcl9yZWFkX2N1cnJyZW50KCkgLSB0cmlnZ2VyIGNvbnN1bWVyIHN5c2ZzIHF1ZXJ5IHdoaWNoIHRyaWdnZXIKICAqCiAgKiBGb3IgdHJpZ2dlciBjb25zdW1lcnMgdGhlIGN1cnJlbnRfdHJpZ2dlciBpbnRlcmZhY2UgYWxsb3dzIHRoZSB0cmlnZ2VyCiAgKiB1c2VkIGJ5IHRoZSBkZXZpY2UgdG8gYmUgcXVlcmllZC4KQEAgLTI5NiwxMCArMjk1LDkgQEAKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGVuID0gMDsKIAlpZiAoZGV2X2luZm8tPnRyaWcpCi0JCWxlbiA9IHNucHJpbnRmKGJ1ZiwKLQkJCSAgICAgICBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCwKLQkJCSAgICAgICAiJXNcbiIsCi0JCQkgICAgICAgZGV2X2luZm8tPnRyaWctPm5hbWUpOworCQlsZW4gPSBzcHJpbnRmKGJ1ZiwKKwkJCSAgICAgICIlc1xuIiwKKwkJCSAgICAgIGRldl9pbmZvLT50cmlnLT5uYW1lKTsKIAlyZXR1cm4gbGVuOwogfQogCkBAIC0zMjQsOCArMzIyLDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+bWxvY2spOwogCi0JbGVuID0gbGVuIDwgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEggPyBsZW4gOiBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSDsKLQogCWRldl9pbmZvLT50cmlnID0gaWlvX3RyaWdnZXJfZmluZF9ieV9uYW1lKGJ1ZiwgbGVuKTsKIAlpZiAob2xkdHJpZyAmJiBkZXZfaW5mby0+dHJpZyAhPSBvbGR0cmlnKQogCQlpaW9fcHV0X3RyaWdnZXIob2xkdHJpZyk7CkBAIC00MDIsMyArMzk4LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19kZXZpY2VfdW5yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKTsKIAoraW50IGlpb19hbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkgICAgICAgdm9pZCAoKmltbWVkaWF0ZSkoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiksCisJCSAgICAgICB2b2lkICgqbWFpbikoc3RydWN0IGlpb19kZXYgKnByaXZhdGVfZGF0YSwgczY0IHRpbWUpKQoreworCWluZGlvX2Rldi0+cG9sbGZ1bmMgPSBremFsbG9jKHNpemVvZigqaW5kaW9fZGV2LT5wb2xsZnVuYyksIEdGUF9LRVJORUwpOworCWlmIChpbmRpb19kZXYtPnBvbGxmdW5jID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnBvbGxfZnVuY19pbW1lZGlhdGUgPSBpbW1lZGlhdGU7CisJaW5kaW9fZGV2LT5wb2xsZnVuYy0+cG9sbF9mdW5jX21haW4gPSBtYWluOworCWluZGlvX2Rldi0+cG9sbGZ1bmMtPnByaXZhdGVfZGF0YSA9IGluZGlvX2RldjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaWlvX2FsbG9jX3BvbGxmdW5jKTsKKworaW50IGlpb190cmlnZ2VyZWRfcmluZ19wb3N0ZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7CisJcmV0dXJuIGluZGlvX2Rldi0+dHJpZworCQk/IGlpb190cmlnZ2VyX2F0dGFjaF9wb2xsX2Z1bmMoaW5kaW9fZGV2LT50cmlnLAorCQkJCQkgICAgICAgaW5kaW9fZGV2LT5wb2xsZnVuYykKKwkJOiAwOworfQorRVhQT1JUX1NZTUJPTChpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZSk7CisKK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQoreworCXJldHVybiBpbmRpb19kZXYtPnRyaWcKKwkJPyBpaW9fdHJpZ2dlcl9kZXR0YWNoX3BvbGxfZnVuYyhpbmRpb19kZXYtPnRyaWcsCisJCQkJCQlpbmRpb19kZXYtPnBvbGxmdW5jKQorCQk6IDA7Cit9CitFWFBPUlRfU1lNQk9MKGlpb190cmlnZ2VyZWRfcmluZ19wcmVkaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvS2NvbmZpZwppbmRleCA4MGNiNmU1Li4zZGRjNDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9LY29uZmlnCkBAIC0xMiw0ICsxMiwzIEBACiAKIAkgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSB3aWxsIGJlIGNhbGxlZCB0c2wyNTYzLgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2xpZ2h0LmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L2xpZ2h0LmgKaW5kZXggZjAwZjgyNy4uZTRlMWUyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC9saWdodC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvbGlnaHQuaApAQCAtMiwxMSArMiw2IEBACiAKIC8qIExpZ2h0IHRvIGRpZ2l0YWwgc2Vuc29yIGF0dHJpYnV0ZXMgKi8KIAotI2RlZmluZSBJSU9fREVWX0FUVFJfTElHSFRfSU5GUkFSRUQoX251bSwgX3Nob3csIF9hZGRyKQkJCVwKLQlJSU9fREVWSUNFX0FUVFIobGlnaHRfaW5mcmFyZWQjI19udW0sIFNfSVJVR08sIF9zaG93LCBOVUxMLCBfYWRkcikKKyNkZWZpbmUgSUlPX0VWRU5UX0NPREVfTElHSFRfVEhSRVNIIElJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UKIAotI2RlZmluZSBJSU9fREVWX0FUVFJfTElHSFRfQlJPQUQoX251bSwgX3Nob3csIF9hZGRyKQkJCVwKLQlJSU9fREVWSUNFX0FUVFIobGlnaHRfYnJvYWRzcGVjdHJ1bSMjX251bSwgU19JUlVHTywgX3Nob3csIE5VTEwsIF9hZGRyKQogCi0jZGVmaW5lIElJT19ERVZfQVRUUl9MSUdIVF9WSVNJQkxFKF9udW0sIF9zaG93LCBfYWRkcikJCQlcCi0JSUlPX0RFVklDRV9BVFRSKGxpZ2h0X3Zpc2libGUjI19udW0sIFNfSVJVR08sIF9zaG93LCBOVUxMLCBfYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2My5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKaW5kZXggZTRiMGE1ZS4uOThmOGI3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9saWdodC90c2wyNTYzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTExNywxNSArMTE4LDE3IEBACiAJc3RydWN0IGlpb19kZXYJCSppbmRpb19kZXY7CiAJc3RydWN0IGRlbGF5ZWRfd29yawlwb3dlcm9mZl93b3JrOwogCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcmtfdGhyZXNoOworCXM2NAkJCWV2ZW50X3RpbWVzdGFtcDsKIAkvKiBSZW1lbWJlciBzdGF0ZSBmb3Igc3VzcGVuZCBhbmQgcmVzdW1lIGZ1bmN0aW9ucyAqLwogCXBtX21lc3NhZ2VfdAkJc3RhdGU7CiAKIAlzdHJ1Y3QgdHNsMjU2M19nYWlubGV2ZWxfY29lZmYgKmdhaW5sZXZlbDsKIAotCS8qIFRocmVzaG9sZHMgYXJlIGluIGx1eCAqLwogCXUxNgkJCWxvd190aHJlczsKIAl1MTYJCQloaWdoX3RocmVzOwogCXU4CQkJaW50cjsKKwlib29sCQkJaW50X2VuYWJsZWQ7CiAKIAkvKiBDYWxpYnJhdGlvbiBjb2VmZmljaWVudHMgKi8KIAl1MzIJCQljYWxpYjA7CkBAIC0xODksMTcgKzE5MiwyOSBAQAogCiBzdGF0aWMgaW50IHRzbDI1NjNfY29uZmlndXJlKHN0cnVjdCB0c2wyNTYzX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNoaXAtPmNsaWVudDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdHNsMjU2M193cml0ZShjbGllbnQsIFRTTDI1NjNfUkVHX1RJTUlORywKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfVElNSU5HLAogCQkJY2hpcC0+Z2FpbmxldmVsLT5nYWludGltZSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB0c2wyNTYzX3dyaXRlKGNsaWVudCwgVFNMMjU2M19SRUdfSU5ULCBjaGlwLT5pbnRyKTsKLQotb3V0OgorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSElHSExPVywKKwkJCWNoaXAtPmhpZ2hfdGhyZXMgJiAweEZGKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSElHSEhJR0gsCisJCQkoY2hpcC0+aGlnaF90aHJlcyA+PiA4KSAmIDB4RkYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3JfcmV0OworCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19MT1dMT1csCisJCQljaGlwLT5sb3dfdGhyZXMgJiAweEZGKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3JldDsKKwlyZXQgPSB0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfTE9XSElHSCwKKwkJCShjaGlwLT5sb3dfdGhyZXMgPj4gOCkgJiAweEZGKTsKKy8qIEludGVycnVwdCByZWdpc3RlciBpcyBhdXRvbWF0aWNhbGx5IHdyaXR0ZW4gYW55d2F5IGlmIGl0IGlzIHJlbGV2YW50CisgICBzbyBpcyBub3QgaGVyZSAqLworZXJyb3JfcmV0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyMywyMSArMzM4LDIzIEBACiAJaWYgKGNoaXAtPnN0YXRlLmV2ZW50ICE9IFBNX0VWRU5UX09OKQogCQlnb3RvIG91dDsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmspOworCWlmICghY2hpcC0+aW50X2VuYWJsZWQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yayk7CiAKLQlpZiAoIXRzbDI1NjNfZ2V0X3Bvd2VyKGNoaXApKSB7Ci0JCXJldCA9IHRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IHRzbDI1NjNfY29uZmlndXJlKGNoaXApOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXRzbDI1NjNfd2FpdF9hZGMoY2hpcCk7CisJCWlmICghdHNsMjU2M19nZXRfcG93ZXIoY2hpcCkpIHsKKwkJCXJldCA9IHRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDEpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXJldCA9IHRzbDI1NjNfY29uZmlndXJlKGNoaXApOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXRzbDI1NjNfd2FpdF9hZGMoY2hpcCk7CisJCX0KIAl9CiAKIAl3aGlsZSAocmV0cnkpIHsKIAkJcmV0ID0gdHNsMjU2M19yZWFkKGNsaWVudCwKLQkJCQkgICBUU0wyNTYzX1JFR19EQVRBMExPVyB8IFRTTDI1NjNfQ0xFQVJJTlQsCisJCQkJICAgVFNMMjU2M19SRUdfREFUQTBMT1csCiAJCQkJICAgYnVmMCwgc2l6ZW9mKGJ1ZjApKTsKIAkJaWYgKHJldCAhPSBzaXplb2YoYnVmMCkpCiAJCQlnb3RvIG91dDsKQEAgLTM1Niw3ICszNzMsOCBAQAogCWNoaXAtPmRhdGEwID0gbm9ybWFsaXplX2FkYyhhZGMwLCBjaGlwLT5nYWlubGV2ZWwtPmdhaW50aW1lKTsKIAljaGlwLT5kYXRhMSA9IG5vcm1hbGl6ZV9hZGMoYWRjMSwgY2hpcC0+Z2FpbmxldmVsLT5nYWludGltZSk7CiAKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmssIDUgKiBIWik7CisJaWYgKCFjaGlwLT5pbnRfZW5hYmxlZCkKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrLCA1ICogSFopOwogCiAJcmV0ID0gMDsKIG91dDoKQEAgLTQ0OSwxMSArNDY3LDEyIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICBTeXNmcyBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2FkYzBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX2FkY19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwpAQCAtNDYyLDI2ICs0ODEsMTQgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGNoaXAtPmRhdGEwKTsKLW91dDoKLQltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfYWRjMV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0KLQlyZXQgPSB0c2wyNTYzX2dldF9hZGMoY2hpcCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjaGlwLT5kYXRhMSk7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIDA6CisJCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGNoaXAtPmRhdGEwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjaGlwLT5kYXRhMSk7CisJCWJyZWFrOworCX0KIG91dDoKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogCXJldHVybiByZXQ7CkBAIC01MjcsMzcgKzUzNCwzNiBAQAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBjYWxpYl90b19zeXNmcyhjYWxpYikpOwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2NhbGliMF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdHNsMjU2M19jYWxpYl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNoaXAtPmxvY2spOwotCXJldCA9IGZvcm1hdF9jYWxpYihidWYsIFBBR0VfU0laRSwgY2hpcC0+Y2FsaWIwKTsKKwlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgeworCWNhc2UgMDoKKwkJcmV0ID0gZm9ybWF0X2NhbGliKGJ1ZiwgUEFHRV9TSVpFLCBjaGlwLT5jYWxpYjApOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IGZvcm1hdF9jYWxpYihidWYsIFBBR0VfU0laRSwgY2hpcC0+Y2FsaWIxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCB0c2wyNTYzX2NhbGliMV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgdHNsMjU2M19jYWxpYl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0ID0gZm9ybWF0X2NhbGliKGJ1ZiwgUEFHRV9TSVpFLCBjaGlwLT5jYWxpYjEpOwotCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBkb19jYWxpYl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwKLQkJCSAgaW50IGNoKQotewotCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CiAJaW50IHZhbHVlOwogCXUzMiBjYWxpYjsKIApAQCAtNTY2LDM3ICs1NzIsMjcgQEAKIAogCWNhbGliID0gY2FsaWJfZnJvbV9zeXNmcyh2YWx1ZSk7CiAKLQlpZiAoY2gpCi0JCWNoaXAtPmNhbGliMSA9IGNhbGliOwotCWVsc2UKKwlzd2l0Y2ggKHRoaXNfYXR0ci0+YWRkcmVzcykgeworCWNhc2UgMDoKIAkJY2hpcC0+Y2FsaWIwID0gY2FsaWI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2hpcC0+Y2FsaWIxID0gY2FsaWI7CisJCWJyZWFrOworCX0KIAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfY2FsaWIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gZG9fY2FsaWJfc3RvcmUoZGV2LCBidWYsIGxlbiwgMCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRzbDI1NjNfY2FsaWIxX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlyZXR1cm4gZG9fY2FsaWJfc3RvcmUoZGV2LCBidWYsIGxlbiwgMSk7Ci19Ci0KLS8qIEFtaXRYWFhYOiBDb252ZXJ0IHRvIElJT19ERVZfQVRUUl9MSUdIVCogYXMgaW4gdHNsMjU2MQotICogb25jZSBJIHVuZGVyc3RhbmQgd2hhdCB0aGV5IG1lYW4gKi8KLXN0YXRpYyBERVZJQ0VfQVRUUihhZGMwLCBTX0lSVUdPLCB0c2wyNTYzX2FkYzBfc2hvdywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoYWRjMSwgU19JUlVHTywgdHNsMjU2M19hZGMxX3Nob3csIE5VTEwpOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF9yYXcsIFNfSVJVR08sCisJCXRzbDI1NjNfYWRjX3Nob3csIE5VTEwsIDApOworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfaXJfcmF3LCBTX0lSVUdPLAorCQl0c2wyNTYzX2FkY19zaG93LCBOVUxMLCAxKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbGx1bWluYW5jZTBfaW5wdXQsIFNfSVJVR08sIHRzbDI1NjNfbHV4X3Nob3csIE5VTEwpOwotc3RhdGljIERFVklDRV9BVFRSKGNhbGliMCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHRzbDI1NjNfY2FsaWIwX3Nob3csIHRzbDI1NjNfY2FsaWIwX3N0b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihjYWxpYjEsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICB0c2wyNTYzX2NhbGliMV9zaG93LCB0c2wyNTYzX2NhbGliMV9zdG9yZSk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eV9ib3RoX2NhbGliZ2FpbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCXRzbDI1NjNfY2FsaWJfc2hvdywgdHNsMjU2M19jYWxpYl9zdG9yZSwgMCk7CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGludGVuc2l0eV9pcl9jYWxpYmdhaW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQl0c2wyNTYzX2NhbGliX3Nob3csIHRzbDI1NjNfY2FsaWJfc3RvcmUsIDEpOwogCiBzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3Nob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC02MTAsMTEgKzYwNiwxMSBAQAogc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHRzbDI1NjNfc2hvd19uYW1lLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRzbDI1NjNfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9hZGMwLmF0dHIsCi0JJmRldl9hdHRyX2FkYzEuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX2ludGVuc2l0eV9ib3RoX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2lyX3Jhdy5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9pbGx1bWluYW5jZTBfaW5wdXQuYXR0ciwKLQkmZGV2X2F0dHJfY2FsaWIwLmF0dHIsCi0JJmRldl9hdHRyX2NhbGliMS5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2JvdGhfY2FsaWJnYWluLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRlbnNpdHlfaXJfY2FsaWJnYWluLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX25hbWUuYXR0ciwKIAlOVUxMCiB9OwpAQCAtNjIzLDYgKzYxOSwxOTIgQEAKIAkuYXR0cnMgPSB0c2wyNTYzX2F0dHJpYnV0ZXMsCiB9OwogCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3JlYWRfdGhyZXNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdTE2IHZhbCA9IDA7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIFRTTDI1NjNfUkVHX0hJR0hMT1c6CisJCXZhbCA9IGNoaXAtPmhpZ2hfdGhyZXM7CisJCWJyZWFrOworCWNhc2UgVFNMMjU2M19SRUdfTE9XTE9XOgorCQl2YWwgPSBjaGlwLT5sb3dfdGhyZXM7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgdHNsMjU2M193cml0ZV90aHJlc2goc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcmV0ID0gdHNsMjU2M193cml0ZShjaGlwLT5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcywgdmFsICYgMHhGRik7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcl9yZXQ7CisJcmV0ID0gdHNsMjU2M193cml0ZShjaGlwLT5jbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcyArIDEsCisJCQkodmFsID4+IDgpICYgMHhGRik7CisJc3dpdGNoICh0aGlzX2F0dHItPmFkZHJlc3MpIHsKKwljYXNlIFRTTDI1NjNfUkVHX0hJR0hMT1c6CisJCWNoaXAtPmhpZ2hfdGhyZXMgPSB2YWw7CisJCWJyZWFrOworCWNhc2UgVFNMMjU2M19SRUdfTE9XTE9XOgorCQljaGlwLT5sb3dfdGhyZXMgPSB2YWw7CisJCWJyZWFrOworCX0KKworZXJyb3JfcmV0OgorCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF90aHJlc2hfaGlnaF92YWx1ZSwKKwkJU19JUlVHTyB8IFNfSVdVU1IsCisJCXRzbDI1NjNfcmVhZF90aHJlc2gsCisJCXRzbDI1NjNfd3JpdGVfdGhyZXNoLAorCQlUU0wyNTYzX1JFR19ISUdITE9XKTsKKworc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbnRlbnNpdHlfYm90aF90aHJlc2hfbG93X3ZhbHVlLAorCQlTX0lSVUdPIHwgU19JV1VTUiwKKwkJdHNsMjU2M19yZWFkX3RocmVzaCwKKwkJdHNsMjU2M193cml0ZV90aHJlc2gsCisJCVRTTDI1NjNfUkVHX0xPV0xPVyk7CisKK3N0YXRpYyBpbnQgdHNsMjU2M19pbnRfdGgoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvLAorCQkJaW50IGluZGV4LAorCQkJczY0IHRpbWVzdGFtcCwKKwkJCWludCBub3RfdGVzdCkKK3sKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gZGV2X2luZm8tPmRldl9kYXRhOworCisJY2hpcC0+ZXZlbnRfdGltZXN0YW1wID0gdGltZXN0YW1wOworCXNjaGVkdWxlX3dvcmsoJmNoaXAtPndvcmtfdGhyZXNoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0c2wyNTYzX2ludF9iaChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmtfcykKK3sKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwCisJCT0gY29udGFpbmVyX29mKHdvcmtfcywKKwkJCXN0cnVjdCB0c2wyNTYzX2NoaXAsIHdvcmtfdGhyZXNoKTsKKwl1OCBjbWQgPSBUU0wyNTYzX0NNRCB8IFRTTDI1NjNfQ0xFQVJJTlQ7CisKKwlpaW9fcHVzaF9ldmVudChjaGlwLT5pbmRpb19kZXYsIDAsCisJCUlJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UsCisJCWNoaXAtPmV2ZW50X3RpbWVzdGFtcCk7CisKKwkvKiByZWVuYWJsZV9pcnEgKi8KKwllbmFibGVfaXJxKGNoaXAtPmNsaWVudC0+aXJxKTsKKwkvKiBjbGVhciB0aGUgaW50ZXJydXB0IGFuZCBwdXNoIHRoZSBldmVudCAqLworCWkyY19tYXN0ZXJfc2VuZChjaGlwLT5jbGllbnQsICZjbWQsIHNpemVvZihjbWQpKTsKKworfQorCitzdGF0aWMgc3NpemVfdCB0c2wyNTYzX3dyaXRlX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2V2ZW50X2F0dHIgKnRoaXNfYXR0ciA9IHRvX2lpb19ldmVudF9hdHRyKGF0dHIpOworCWludCBpbnB1dCwgcmV0ID0gMDsKKworCXJldCA9IHNzY2FuZihidWYsICIlZCIsICZpbnB1dCk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKKwlpZiAoaW5wdXQgJiYgIShjaGlwLT5pbnRyICYgMHgzMCkpIHsKKwkJaWlvX2FkZF9ldmVudF90b19saXN0KHRoaXNfYXR0ci0+bGlzdGVsLAorCQkJCSZpbmRpb19kZXYtPmludGVycnVwdHNbMF0tPmV2X2xpc3QpOworCQljaGlwLT5pbnRyICY9IH4weDMwOworCQljaGlwLT5pbnRyIHw9IDB4MTA7CisJCS8qIGVuc3VyZSB0aGUgY2hpcCBpcyBhY3R1YWxseSBvbiAqLworCQljYW5jZWxfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrKTsKKwkJaWYgKCF0c2wyNTYzX2dldF9wb3dlcihjaGlwKSkgeworCQkJcmV0ID0gdHNsMjU2M19zZXRfcG93ZXIoY2hpcCwgMSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQkJcmV0ID0gdHNsMjU2M19jb25maWd1cmUoY2hpcCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisJCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19JTlQsIGNoaXAtPmludHIpOworCQljaGlwLT5pbnRfZW5hYmxlZCA9IHRydWU7CisJfQorCisJaWYgKCFpbnB1dCAmJiAoY2hpcC0+aW50ciAmIDB4MzApKSB7CisJCWNoaXAtPmludHIgfD0gfjB4MzA7CisJCXJldCA9IHRzbDI1NjNfd3JpdGUoY2hpcC0+Y2xpZW50LCBUU0wyNTYzX1JFR19JTlQsIGNoaXAtPmludHIpOworCQlpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCh0aGlzX2F0dHItPmxpc3RlbCwKKwkJCQkJJmluZGlvX2Rldi0+aW50ZXJydXB0c1swXS0+ZXZfbGlzdCk7CisJCWNoaXAtPmludF9lbmFibGVkID0gZmFsc2U7CisJCS8qIG5vdyB0aGUgaW50ZXJydXB0IGlzIG5vdCBlbmFibGVkLCB3ZSBjYW4gZ28gdG8gc2xlZXAgKi8KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT5wb3dlcm9mZl93b3JrLCA1ICogSFopOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOworCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHNsMjU2M19jaGlwICpjaGlwID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlpbnQgcmV0OworCXU4IHJ4YnVmOworCXNzaXplX3QgbGVuOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bG9jayk7CisJcmV0ID0gdHNsMjU2M19yZWFkKGNoaXAtPmNsaWVudCwKKwkJCVRTTDI1NjNfUkVHX0lOVCwKKwkJCSZyeGJ1ZiwKKwkJCXNpemVvZihyeGJ1ZikpOworCW11dGV4X3VubG9jaygmY2hpcC0+bG9jayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcmV0OworCWxlbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsICEhKHJ4YnVmICYgMHgzMCkpOworZXJyb3JfcmV0OgorCisJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGxlbjsKK30KKworSUlPX0VWRU5UX0FUVFIoaW50ZW5zaXR5X2JvdGhfdGhyZXNoX2JvdGhfZW4sCisJdHNsMjU2M19yZWFkX2ludGVycnVwdF9jb25maWcsCisJdHNsMjU2M193cml0ZV9pbnRlcnJ1cHRfY29uZmlnLAorCTAsCisJdHNsMjU2M19pbnRfdGgpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHNsMjU2M19ldmVudF9hdHRyaWJ1dGVzW10gPSB7CisJJmlpb19ldmVudF9hdHRyX2ludGVuc2l0eV9ib3RoX3RocmVzaF9ib3RoX2VuLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9pbnRlbnNpdHlfYm90aF90aHJlc2hfaGlnaF92YWx1ZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfaW50ZW5zaXR5X2JvdGhfdGhyZXNoX2xvd192YWx1ZS5kZXZfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSB0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZXMsCit9OworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qICAgICAgICAgICAgICAgICAgICAgIFByb2JlLCBBdHRhY2gsIFJlbW92ZSAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC02NDEsNiArODIzLDcgQEAKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJSU5JVF9XT1JLKCZjaGlwLT53b3JrX3RocmVzaCwgdHNsMjU2M19pbnRfYmgpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwogCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKIApAQCAtNjc5LDE4ICs4NjIsMzYgQEAKIAljaGlwLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoY2hpcCk7CiAJY2hpcC0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CiAJY2hpcC0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWlmIChjbGllbnQtPmlycSkgeworCQljaGlwLT5pbmRpb19kZXYtPm51bV9pbnRlcnJ1cHRfbGluZXMgPSAxOworCQljaGlwLT5pbmRpb19kZXYtPmV2ZW50X2F0dHJzCisJCQk9ICZ0c2wyNTYzX2V2ZW50X2F0dHJpYnV0ZV9ncm91cDsKKwl9CiAJcmV0ID0gaWlvX2RldmljZV9yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDE7CiAKKwlpZiAoY2xpZW50LT5pcnEpIHsKKwkJcmV0ID0gaWlvX3JlZ2lzdGVyX2ludGVycnVwdF9saW5lKGNsaWVudC0+aXJxLAorCQkJCQkJY2hpcC0+aW5kaW9fZGV2LAorCQkJCQkJMCwKKwkJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkJCQljbGllbnQtPm5hbWUpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsMjsKKwl9CiAJZXJyID0gdHNsMjU2M19jb25maWd1cmUoY2hpcCk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsMjsKKwkJZ290byBmYWlsMzsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZjaGlwLT5wb3dlcm9mZl93b3JrLCB0c2wyNTYzX3Bvd2Vyb2ZmX3dvcmspOworCS8qIFRoZSBpbnRlcnJ1cHQgY2Fubm90IHlldCBiZSBlbmFibGVkIHNvIHRoaXMgaXMgZmluZSB3aXRob3V0IGxvY2sgKi8KIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPnBvd2Vyb2ZmX3dvcmssIDUgKiBIWik7CiAKIAlyZXR1cm4gMDsKK2ZhaWwzOgorCWlmIChjbGllbnQtPmlycSkKKwkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAwKTsKIGZhaWwyOgogCWlpb19kZXZpY2VfdW5yZWdpc3RlcihjaGlwLT5pbmRpb19kZXYpOwogZmFpbDE6CkBAIC03MDEsNyArOTAyLDE1IEBACiBzdGF0aWMgaW50IHRzbDI1NjNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHRzbDI1NjNfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCisJaWYgKCFjaGlwLT5pbnRfZW5hYmxlZCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmY2hpcC0+cG93ZXJvZmZfd29yayk7CisJLyogRW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgLSB0aGVuIGZsdXNoIGFueSBib3R0b20gaGFsdmVzICovCisJY2hpcC0+aW50ciB8PSB+MHgzMDsKKwl0c2wyNTYzX3dyaXRlKGNoaXAtPmNsaWVudCwgVFNMMjU2M19SRUdfSU5ULCBjaGlwLT5pbnRyKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCXRzbDI1NjNfc2V0X3Bvd2VyKGNoaXAsIDApOworCWlmIChjbGllbnQtPmlycSkKKwkJaWlvX3VucmVnaXN0ZXJfaW50ZXJydXB0X2xpbmUoY2hpcC0+aW5kaW9fZGV2LCAwKTsKIAlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoY2hpcC0+aW5kaW9fZGV2KTsKIAogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxNDQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorIworIyBNYWduZXRvbWV0ZXIgc2Vuc29ycworIworY29tbWVudCAiTWFnbmV0b21ldGVyIHNlbnNvcnMiCisKK2NvbmZpZyBTRU5TT1JTX0hNQzU4NDMKKwl0cmlzdGF0ZSAiSG9uZXl3ZWxsIEhNQzU4NDMgMy1BeGlzIE1hZ25ldG9tZXRlciIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBIb25leXdlbGwgSE1DIDU4NDMgMy1BeGlzCisJICBNYWduZXRvbWV0ZXIgKGRpZ2l0YWwgY29tcGFzcykuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGhtYzU4NDMKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL21hZ25ldG9tZXRlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJmYjJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBpbmR1c3RyaWFsIEkvTyBNYWduZXRvbWV0ZXIgc2Vuc29ycworIworCitvYmotJChDT05GSUdfU0VOU09SU19ITUM1ODQzKQkrPSBobWM1ODQzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2htYzU4NDMuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbWFnbmV0b21ldGVyL2htYzU4NDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmY2YzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9tYWduZXRvbWV0ZXIvaG1jNTg0My5jCkBAIC0wLDAgKzEsNjI0IEBACisvKiAgQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzCisgICAgQXV0aG9yOiBTaHViaHJhanlvdGkgRGF0dGEgPHNodWJocmFqeW90aUB0aS5jb20+CisgICAgQWNrbm93bGVkZ2VtZW50OiBKb25hdGhhbiBDYW1lcm9uIDxqaWMyM0BjYW0uYWMudWs+IGZvciB2YWx1YWJsZSBpbnB1dHMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiLi4vaWlvLmgiCisjaW5jbHVkZSAiLi4vc3lzZnMuaCIKKyNpbmNsdWRlICJtYWduZXQuaCIKKworI2RlZmluZSBITUM1ODQzX0kyQ19BRERSRVNTCQkJMHgxRQorCisjZGVmaW5lIEhNQzU4NDNfQ09ORklHX1JFR19BCQkJMHgwMAorI2RlZmluZSBITUM1ODQzX0NPTkZJR19SRUdfQgkJCTB4MDEKKyNkZWZpbmUgSE1DNTg0M19NT0RFX1JFRwkJCTB4MDIKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9YX01TQl9SRUcJCTB4MDMKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9YX0xTQl9SRUcJCTB4MDQKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9ZX01TQl9SRUcJCTB4MDUKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9ZX0xTQl9SRUcJCTB4MDYKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9aX01TQl9SRUcJCTB4MDcKKyNkZWZpbmUgSE1DNTg0M19EQVRBX09VVF9aX0xTQl9SRUcJCTB4MDgKKyNkZWZpbmUgSE1DNTg0M19TVEFUVVNfUkVHCQkJMHgwOQorI2RlZmluZSBITUM1ODQzX0lEX1JFR19BCQkJMHgwQQorI2RlZmluZSBITUM1ODQzX0lEX1JFR19CCQkJMHgwQgorI2RlZmluZSBITUM1ODQzX0lEX1JFR19DCQkJMHgwQworCisjZGVmaW5lIEhNQzU4NDNfSURfUkVHX0xFTkdUSAkJCTB4MDMKKyNkZWZpbmUgSE1DNTg0M19JRF9TVFJJTkcJCQkiSDQzIgorCisvKgorICogUmFuZ2Ugc2V0dGluZ3MgaW4gICgrLSlHYQorICogKi8KKyNkZWZpbmUgUkFOR0VfR0FJTl9PRkZTRVQJCQkweDA1CisKKyNkZWZpbmUJUkFOR0VfMF83CQkJCTB4MDAKKyNkZWZpbmUJUkFOR0VfMV8wCQkJCTB4MDEgLyogZGVmYXVsdCAqLworI2RlZmluZQlSQU5HRV8xXzUJCQkJMHgwMgorI2RlZmluZQlSQU5HRV8yXzAJCQkJMHgwMworI2RlZmluZQlSQU5HRV8zXzIJCQkJMHgwNAorI2RlZmluZQlSQU5HRV8zXzgJCQkJMHgwNQorI2RlZmluZQlSQU5HRV80XzUJCQkJMHgwNgorI2RlZmluZQlSQU5HRV82XzUJCQkJMHgwNyAvKiBOb3QgcmVjb21tZW5kZWQgKi8KKworLyoKKyAqIERldmljZSBzdGF0dXMKKyAqLworI2RlZmluZQlEQVRBX1JFQURZICAJCQkJMHgwMQorI2RlZmluZQlEQVRBX09VVFBVVF9MT0NLICAJCQkweDAyCisjZGVmaW5lCVZPTFRBR0VfUkVHVUxBVE9SX0VOQUJMRUQgIAkJMHgwNAorCisvKgorICogTW9kZSByZWdpc3RlciBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUJTU9ERV9DT05WRVJTSU9OX0NPTlRJTlVPVVMJCTB4MDAKKyNkZWZpbmUJTU9ERV9DT05WRVJTSU9OX1NJTkdMRQkJCTB4MDEKKyNkZWZpbmUJTU9ERV9JRExFCQkJCTB4MDIKKyNkZWZpbmUJTU9ERV9TTEVFUAkJCQkweDAzCisKKy8qIE1pbmltdW0gRGF0YSBPdXRwdXQgUmF0ZSBpbiAxLzEwIEh6ICAqLworI2RlZmluZSBSQVRFX09GRlNFVAkJCQkweDAyCisjZGVmaW5lIFJBVEVfQklUTUFTSwkJCQkweDFDCisjZGVmaW5lCVJBVEVfNQkJCQkJMHgwMAorI2RlZmluZQlSQVRFXzEwCQkJCQkweDAxCisjZGVmaW5lCVJBVEVfMjAJCQkJCTB4MDIKKyNkZWZpbmUJUkFURV81MAkJCQkJMHgwMworI2RlZmluZQlSQVRFXzEwMAkJCQkweDA0CisjZGVmaW5lCVJBVEVfMjAwCQkJCTB4MDUKKyNkZWZpbmUJUkFURV81MDAJCQkJMHgwNgorI2RlZmluZQlSQVRFX05PVF9VU0VECQkJCTB4MDcKKworLyoKKyAqIERldmljZSBDb25maWd1dHJhdGlvbgorICovCisjZGVmaW5lCUNPTkZfTk9STUFMICAJCQkJMHgwMAorI2RlZmluZQlDT05GX1BPU0lUSVZFX0JJQVMJCQkweDAxCisjZGVmaW5lCUNPTkZfTkVHQVRJVkVfQklBUwkJCTB4MDIKKyNkZWZpbmUJQ09ORl9OT1RfVVNFRAkJCQkweDAzCisjZGVmaW5lCU1FQVNfQ09ORl9NQVNLCQkJCTB4MDMKKworc3RhdGljIGNvbnN0IGludCByZWd2YWxfdG9fY291bnRzX3Blcl9tZ1tdID0geworCTE2MjAsCisJMTMwMCwKKwk5NzAsCisJNzgwLAorCTUzMCwKKwk0NjAsCisJMzkwLAorCTI4MAorfTsKK3N0YXRpYyBjb25zdCBpbnQgcmVndmFsX3RvX2lucHV0X2ZpZWxkX21nW10gPSB7CisJNzAwLAorCTEwMDAsCisJMTUwMCwKKwkyMDAwLAorCTMyMDAsCisJMzgwMCwKKwk0NTAwLAorCTY1MDAKK307CitzdGF0aWMgY29uc3QgY2hhciAqcmVndmFsX3RvX3NhbXBfZnJlcVtdID0geworCSIwLjUiLAorCSIxIiwKKwkiMiIsCisJIjUiLAorCSIxMCIsCisJIjIwIiwKKwkiNTAiLAorfTsKKworLyogQWRkcmVzc2VzIHRvIHNjYW46IDB4MUUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEhNQzU4NDNfSTJDX0FERFJFU1MsCisJCQkJCQkJSTJDX0NMSUVOVF9FTkQgfTsKKworLyogRWFjaCBjbGllbnQgaGFzIHRoaXMgYWRkaXRpb25hbCBkYXRhICovCitzdHJ1Y3QgaG1jNTg0M19kYXRhIHsKKwlzdHJ1Y3QgaWlvX2RldgkqaW5kaW9fZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOworCXU4CQlyYXRlOworCXU4CQltZWFzX2NvbmY7CisJdTgJCW9wZXJhdGluZ19tb2RlOworCXU4CQlyYW5nZTsKK307CisKK3N0YXRpYyB2b2lkIGhtYzU4NDNfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CisKK3N0YXRpYyBzMzIgaG1jNTg0M19jb25maWd1cmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgdTggb3BlcmF0aW5nX21vZGUpCit7CisJLyogVGhlIGxvd2VyIHR3byBiaXRzIGNvbnRhaW4gdGhlIGN1cnJlbnQgY29udmVyc2lvbiBtb2RlICovCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQlITUM1ODQzX01PREVfUkVHLAorCQkJCQkob3BlcmF0aW5nX21vZGUgJiAweDAzKSk7Cit9CisKKy8qIFJldHVybiB0aGUgbWVhc3VyZW1lbnQgdmFsdWUgZnJvbSB0aGUgIHNwZWNpZmllZCBjaGFubmVsICovCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3JlYWRfbWVhc3VyZW1lbnQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChpbmRpb19kZXYtPmRldi5wYXJlbnQpOworCXMxNiBjb29yZGluYXRlX3ZhbDsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJczMyIHJlc3VsdDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCisJcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19TVEFUVVNfUkVHKTsKKwl3aGlsZSAoIShyZXN1bHQgJiBEQVRBX1JFQURZKSkKKwkJcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19TVEFUVVNfUkVHKTsKKworCXJlc3VsdCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb29yZGluYXRlX3ZhbAk9IChzMTYpc3dhYjE2KCh1MTYpcmVzdWx0KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY29vcmRpbmF0ZV92YWwpOworfQorc3RhdGljIElJT19ERVZfQVRUUl9NQUdOX1goaG1jNTg0M19yZWFkX21lYXN1cmVtZW50LAorCQlITUM1ODQzX0RBVEFfT1VUX1hfTVNCX1JFRyk7CitzdGF0aWMgSUlPX0RFVl9BVFRSX01BR05fWShobWM1ODQzX3JlYWRfbWVhc3VyZW1lbnQsCisJCUhNQzU4NDNfREFUQV9PVVRfWV9NU0JfUkVHKTsKK3N0YXRpYyBJSU9fREVWX0FUVFJfTUFHTl9aKGhtYzU4NDNfcmVhZF9tZWFzdXJlbWVudCwKKwkJSE1DNTg0M19EQVRBX09VVF9aX01TQl9SRUcpOworCisvKgorICogRnJvbSB0aGUgZGF0YXNoZWV0CisgKiAwIC0gQ29udGludW91cy1Db252ZXJzaW9uIE1vZGU6IEluIGNvbnRpbnVvdXMtY29udmVyc2lvbiBtb2RlLCB0aGUKKyAqIGRldmljZSBjb250aW51b3VzbHkgcGVyZm9ybXMgY29udmVyc2lvbnMgYW4gcGxhY2VzIHRoZSByZXN1bHQgaW4gdGhlCisgKiBkYXRhIHJlZ2lzdGVyLgorICoKKyAqIDEgLSBTaW5nbGUtQ29udmVyc2lvbiBNb2RlIDogZGV2aWNlIHBlcmZvcm1zIGEgc2luZ2xlIG1lYXN1cmVtZW50LAorICogIHNldHMgUkRZIGhpZ2ggYW5kIHJldHVybmVkIHRvIHNsZWVwIG1vZGUKKyAqCisgKiAyIC0gSWRsZSBNb2RlIDogIERldmljZSBpcyBwbGFjZWQgaW4gaWRsZSBtb2RlLgorICoKKyAqIDMgLSBTbGVlcCBNb2RlLiBEZXZpY2UgaXMgcGxhY2VkIGluIHNsZWVwIG1vZGUuCisgKgorICovCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3Nob3dfb3BlcmF0aW5nX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+b3BlcmF0aW5nX21vZGUpOworfQorCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdW5zaWduZWQgbG9uZyBvcGVyYXRpbmdfbW9kZSA9IDA7CisJczMyIHN0YXR1czsKKwlpbnQgZXJyb3I7CisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmb3BlcmF0aW5nX21vZGUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWRldl9kYmcoZGV2LCAic2V0IENvbnZlcnNpb24gbW9kZSB0byAlbHVcbiIsIG9wZXJhdGluZ19tb2RlKTsKKwlpZiAob3BlcmF0aW5nX21vZGUgPiBNT0RFX1NMRUVQKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgdGhpc19hdHRyLT5hZGRyZXNzLAorCQkJCQlvcGVyYXRpbmdfbW9kZSk7CisJaWYgKHN0YXR1cykgeworCQljb3VudCA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKKwl9CisJZGF0YS0+b3BlcmF0aW5nX21vZGUgPSBvcGVyYXRpbmdfbW9kZTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIob3BlcmF0aW5nX21vZGUsCisJCQlTX0lXVVNSIHwgU19JUlVHTywKKwkJCWhtYzU4NDNfc2hvd19vcGVyYXRpbmdfbW9kZSwKKwkJCWhtYzU4NDNfc2V0X29wZXJhdGluZ19tb2RlLAorCQkJSE1DNTg0M19NT0RFX1JFRyk7CisKKy8qCisgKiBBUEkgZm9yIHNldHRpbmcgdGhlIG1lYXN1cmVtZW50IGNvbmZpZ3VyYXRpb24gdG8KKyAqIE5vcm1hbCwgUG9zaXRpdmUgYmlhcyBhbmQgTmVnYXRpdmUgYmlhcworICogRnJvbSB0aGUgZGF0YXNoZWV0CisgKgorICogTm9ybWFsIG1lYXN1cmVtZW50IGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQpOiBJbiBub3JtYWwgbWVhc3VyZW1lbnQKKyAqIGNvbmZpZ3VyYXRpb24gdGhlIGRldmljZSBmb2xsb3dzIG5vcm1hbCBtZWFzdXJlbWVudCBmbG93LiBQaW5zIEJQIGFuZCBCTgorICogYXJlIGxlZnQgZmxvYXRpbmcgYW5kIGhpZ2ggaW1wZWRhbmNlLgorICoKKyAqIFBvc2l0aXZlIGJpYXMgY29uZmlndXJhdGlvbjogSW4gcG9zaXRpdmUgYmlhcyBjb25maWd1cmF0aW9uLCBhIHBvc2l0aXZlCisgKiBjdXJyZW50IGlzIGZvcmNlZCBhY3Jvc3MgdGhlIHJlc2lzdGl2ZSBsb2FkIG9uIHBpbnMgQlAgYW5kIEJOLgorICoKKyAqIE5lZ2F0aXZlIGJpYXMgY29uZmlndXJhdGlvbi4gSW4gbmVnYXRpdmUgYmlhcyBjb25maWd1cmF0aW9uLCBhIG5lZ2F0aXZlCisgKiBjdXJyZW50IGlzIGZvcmNlZCBhY3Jvc3MgdGhlIHJlc2lzdGl2ZSBsb2FkIG9uIHBpbnMgQlAgYW5kIEJOLgorICoKKyAqLworc3RhdGljIHMzMiBobWM1ODQzX3NldF9tZWFzX2NvbmYoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1OCBtZWFzX2NvbmYpCit7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IHJlZ192YWw7CisJcmVnX3ZhbCA9IChtZWFzX2NvbmYgJiBNRUFTX0NPTkZfTUFTSykgfCAgKGRhdGEtPnJhdGUgPDwgUkFURV9PRkZTRVQpOworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19DT05GSUdfUkVHX0EsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBobWM1ODQzX3Nob3dfbWVhc3VyZW1lbnRfY29uZmlndXJhdGlvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPm1lYXNfY29uZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhtYzU4NDNfc2V0X21lYXN1cmVtZW50X2NvbmZpZ3VyYXRpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljb25zdCBjaGFyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGluZGlvX2Rldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGxvbmcgbWVhc19jb25mID0gMDsKKwlpbnQgZXJyb3IgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWVhc19jb25mKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCWRldl9kYmcoZGV2LCAic2V0IG1vZGUgdG8gJWx1XG4iLCBtZWFzX2NvbmYpOworCWlmIChobWM1ODQzX3NldF9tZWFzX2NvbmYoY2xpZW50LCBtZWFzX2NvbmYpKSB7CisJCWNvdW50ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlkYXRhLT5tZWFzX2NvbmYgPSBtZWFzX2NvbmY7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgSUlPX0RFVklDRV9BVFRSKG1lYXNfY29uZiwKKwkJCVNfSVdVU1IgfCBTX0lSVUdPLAorCQkJaG1jNTg0M19zaG93X21lYXN1cmVtZW50X2NvbmZpZ3VyYXRpb24sCisJCQlobWM1ODQzX3NldF9tZWFzdXJlbWVudF9jb25maWd1cmF0aW9uLAorCQkJMCk7CisKKy8qCisgKiBGcm9tIERhdGFzaGVldAorICogVGhlIHRhYmxlIHNob3dzIHRoZSBtaW5pbXVtIGRhdGEgb3V0cHV0CisgKiBWYWx1ZQl8IE1pbmltdW0gZGF0YSBvdXRwdXQgcmF0ZShIeikKKyAqIDAJCXwgMC41CisgKiAxCQl8IDEKKyAqIDIJCXwgMgorICogMwkJfCA1CisgKiA0CQl8IDEwIChkZWZhdWx0KQorICogNQkJfCAyMAorICogNgkJfCA1MAorICogNwkJfCBOb3QgdXNlZAorICovCitzdGF0aWMgSUlPX0NPTlNUX0FUVFJfQVZBSUxfU0FNUF9GUkVRKCIwLjUgMSAyIDUgMTAgMjAgNTAiKTsKKworc3RhdGljIHMzMiBobWM1ODQzX3NldF9yYXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdTggcmF0ZSkKK3sKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggcmVnX3ZhbDsKKworCXJlZ192YWwgPSAoZGF0YS0+bWVhc19jb25mKSB8ICAocmF0ZSA8PCBSQVRFX09GRlNFVCk7CisJaWYgKHJhdGUgPj0gUkFURV9OT1RfVVNFRCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJUaGlzIGRhdGEgb3V0cHV0IHJhdGUgaXMgbm90IHN1cHBvcnRlZCBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBITUM1ODQzX0NPTkZJR19SRUdfQSwgcmVnX3ZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9zYW1wbGluZ19mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSAwOworCisJaWYgKHN0cm5jbXAoYnVmLCAiMC41IiAsIDMpID09IDApCisJCXJhdGUgPSBSQVRFXzU7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICIxIiAsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzEwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiMiIsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzIwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiNSIsIDEpID09IDApCisJCXJhdGUgPSBSQVRFXzUwOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiMTAiLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV8xMDA7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICIyMCIgLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV8yMDA7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICI1MCIgLCAyKSA9PSAwKQorCQlyYXRlID0gUkFURV81MDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWRldl9kYmcoZGV2LCAic2V0IHJhdGUgdG8gJWx1XG4iLCByYXRlKTsKKwlpZiAoaG1jNTg0M19zZXRfcmF0ZShjbGllbnQsIHJhdGUpKSB7CisJCWNvdW50ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKwlkYXRhLT5yYXRlID0gcmF0ZTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19mcmVxdWVuY3koc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJdTMyIHJhdGU7CisKKwlyYXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgIHRoaXNfYXR0ci0+YWRkcmVzcyk7CisJaWYgKHJhdGUgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyYXRlID0gKHJhdGUgJiBSQVRFX0JJVE1BU0spID4+IFJBVEVfT0ZGU0VUOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCByZWd2YWxfdG9fc2FtcF9mcmVxW3JhdGVdKTsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIoc2FtcGxpbmdfZnJlcXVlbmN5LAorCQkJU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3NhbXBsaW5nX2ZyZXF1ZW5jeSwKKwkJCXNldF9zYW1wbGluZ19mcmVxdWVuY3ksCisJCQlITUM1ODQzX0NPTkZJR19SRUdfQSk7CisKKy8qCisgKiBGcm9tIERhdGFzaGVldAorICoJTm9taW5hbCBnYWluIHNldHRpbmdzCisgKiBWYWx1ZQl8IFNlbnNvciBJbnB1dCBGaWVsZCBSYW5nZShHYSkJfCBHYWluKGNvdW50cy8gbWlsbGktZ2F1c3MpCisgKjAJCXwoKy0pMC43CQkJfDE2MjAKKyAqMQkJfCgrLSkxLjAJCQl8MTMwMAorICoyCQl8KCstKTEuNQkJCXw5NzAKKyAqMwkJfCgrLSkyLjAJCQl8NzgwCisgKjQJCXwoKy0pMy4yCQkJfDUzMAorICo1CQl8KCstKTMuOAkJCXw0NjAKKyAqNgkJfCgrLSk0LjUJCQl8MzkwCisgKjcJCXwoKy0pNi41CQkJfDI4MAorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJdTggcmFuZ2U7CisJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpbmRpb19kZXYtPmRldl9kYXRhOworCisJcmFuZ2UgPSBkYXRhLT5yYW5nZTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVndmFsX3RvX2lucHV0X2ZpZWxkX21nW3JhbmdlXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoaW5kaW9fZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaWlvX2Rldl9hdHRyICp0aGlzX2F0dHIgPSB0b19paW9fZGV2X2F0dHIoYXR0cik7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGluZGlvX2Rldi0+ZGV2X2RhdGE7CisJdW5zaWduZWQgbG9uZyByYW5nZSA9IDA7CisJaW50IGVycm9yOworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWVycm9yID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnJhbmdlKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlkZXZfZGJnKGRldiwgInNldCByYW5nZSB0byAlbHVcbiIsIHJhbmdlKTsKKworCWlmIChyYW5nZSA+IFJBTkdFXzZfNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhLT5yYW5nZSA9IHJhbmdlOworCXJhbmdlID0gcmFuZ2UgPDwgUkFOR0VfR0FJTl9PRkZTRVQ7CisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCB0aGlzX2F0dHItPmFkZHJlc3MsIHJhbmdlKSkKKwkJY291bnQgPSAtRUlOVkFMOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKKwlyZXR1cm4gY291bnQ7CisKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIobWFnbl9yYW5nZSwKKwkJCVNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19yYW5nZSwKKwkJCXNldF9yYW5nZSwKKwkJCUhNQzU4NDNfQ09ORklHX1JFR19CKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19nYWluKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaG1jNTg0M19kYXRhICpkYXRhID0gaW5kaW9fZGV2LT5kZXZfZGF0YTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVndmFsX3RvX2NvdW50c19wZXJfbWdbZGF0YS0+cmFuZ2VdKTsKK30KK3N0YXRpYyBJSU9fREVWSUNFX0FUVFIobWFnbl9nYWluLAorCQkJU19JUlVHTywKKwkJCXNob3dfZ2FpbiwKKwkJCU5VTEwgLCAwKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhtYzU4NDNfYXR0cmlidXRlc1tdID0geworCSZpaW9fZGV2X2F0dHJfbWVhc19jb25mLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9vcGVyYXRpbmdfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZpaW9fZGV2X2F0dHJfc2FtcGxpbmdfZnJlcXVlbmN5LmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9tYWduX3JhbmdlLmRldl9hdHRyLmF0dHIsCisJJmlpb19kZXZfYXR0cl9tYWduX2dhaW4uZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25feF9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25feV9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2Rldl9hdHRyX21hZ25fel9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmaWlvX2NvbnN0X2F0dHJfYXZhaWxhYmxlX3NhbXBsaW5nX2ZyZXF1ZW5jeS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGhtYzU4NDNfZ3JvdXAgPSB7CisJLmF0dHJzID0gaG1jNTg0M19hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBobWM1ODQzX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciBpZF9zdHJbSE1DNTg0M19JRF9SRUdfTEVOR1RIXTsKKworCWlmIChjbGllbnQtPmFkZHIgIT0gSE1DNTg0M19JMkNfQUREUkVTUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCBITUM1ODQzX0lEX1JFR19BLAorCQkJCUhNQzU4NDNfSURfUkVHX0xFTkdUSCwgaWRfc3RyKQorCQkJIT0gSE1DNTg0M19JRF9SRUdfTEVOR1RIKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICgwICE9IHN0cm5jbXAoaWRfc3RyLCBITUM1ODQzX0lEX1NUUklORywgSE1DNTg0M19JRF9SRUdfTEVOR1RIKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdoZW4gd2UgaGF2ZSBmb3VuZCBhIG5ldyBITUM1ODQzLiAqLworc3RhdGljIHZvaWQgaG1jNTg0M19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlobWM1ODQzX3NldF9tZWFzX2NvbmYoY2xpZW50LCBkYXRhLT5tZWFzX2NvbmYpOworCWhtYzU4NDNfc2V0X3JhdGUoY2xpZW50LCBkYXRhLT5yYXRlKTsKKwlobWM1ODQzX2NvbmZpZ3VyZShjbGllbnQsIGRhdGEtPm9wZXJhdGluZ19tb2RlKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgSE1DNTg0M19DT05GSUdfUkVHX0IsIGRhdGEtPnJhbmdlKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKwlwcl9pbmZvKCJITUM1ODQzIGluaXRpYWxpemVkXG4iKTsKK30KKworc3RhdGljIGludCBobWM1ODQzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGE7CisJaW50IGVyciA9IDA7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhtYzU4NDNfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogZGVmYXVsdCBzZXR0aW5ncyBhdCBwcm9iZSAqLworCisJZGF0YS0+bWVhc19jb25mID0gQ09ORl9OT1JNQUw7CisJZGF0YS0+cmFuZ2UgPSBSQU5HRV8xXzA7CisJZGF0YS0+b3BlcmF0aW5nX21vZGUgPSBNT0RFX0NPTlZFUlNJT05fQ09OVElOVU9VUzsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgSE1DNTg0MyBjaGlwICovCisJaG1jNTg0M19pbml0X2NsaWVudChjbGllbnQpOworCisJZGF0YS0+aW5kaW9fZGV2ID0gaWlvX2FsbG9jYXRlX2RldmljZSgpOworCWlmICghZGF0YS0+aW5kaW9fZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlMTsKKwl9CisJZGF0YS0+aW5kaW9fZGV2LT5hdHRycyA9ICZobWM1ODQzX2dyb3VwOworCWRhdGEtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmRldjsKKwlkYXRhLT5pbmRpb19kZXYtPmRldl9kYXRhID0gKHZvaWQgKikoZGF0YSk7CisJZGF0YS0+aW5kaW9fZGV2LT5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEU7CisJZGF0YS0+aW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworCWVyciA9IGlpb19kZXZpY2VfcmVnaXN0ZXIoZGF0YS0+aW5kaW9fZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTI7CisJcmV0dXJuIDA7CitleGl0X2ZyZWUyOgorCWlpb19mcmVlX2RldmljZShkYXRhLT5pbmRpb19kZXYpOworZXhpdF9mcmVlMToKKwlrZnJlZShkYXRhKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBobWM1ODQzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBobWM1ODQzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkgLyogIHNsZWVwIG1vZGUgdG8gc2F2ZSBwb3dlciAqLworCWhtYzU4NDNfY29uZmlndXJlKGNsaWVudCwgTU9ERV9TTEVFUCk7CisJaWlvX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmluZGlvX2Rldik7CisJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtYzU4NDNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlobWM1ODQzX2NvbmZpZ3VyZShjbGllbnQsIE1PREVfU0xFRVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhtYzU4NDNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGhtYzU4NDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWhtYzU4NDNfY29uZmlndXJlKGNsaWVudCwgZGF0YS0+b3BlcmF0aW5nX21vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaG1jNTg0M19pZFtdID0geworCXsgImhtYzU4NDMiLCAwIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaG1jNTg0M19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiaG1jNTg0MyIsCisJfSwKKwkuaWRfdGFibGUJPSBobWM1ODQzX2lkLAorCS5wcm9iZQkJPSBobWM1ODQzX3Byb2JlLAorCS5yZW1vdmUJCT0gaG1jNTg0M19yZW1vdmUsCisJLmRldGVjdAkJPSBobWM1ODQzX2RldGVjdCwKKwkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKKwkuc3VzcGVuZAk9IGhtYzU4NDNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGhtYzU4NDNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaG1jNTg0M19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZobWM1ODQzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBobWM1ODQzX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaG1jNTg0M19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJTaHViaHJhanlvdGkgRGF0dGEgPHNodWJocmFqeW90aUB0aS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSE1DNTg0MyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoaG1jNTg0M19pbml0KTsKK21vZHVsZV9leGl0KGhtYzU4NDNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaAppbmRleCAwZTQ0Mzc1Li5hODcyZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgX0lJT19SSU5HX0dFTkVSSUNfSF8KICNpbmNsdWRlICJpaW8uaCIKIAorI2lmZGVmIENPTkZJR19JSU9fUklOR19CVUZGRVIKKwogc3RydWN0IGlpb19oYW5kbGVyOwogc3RydWN0IGlpb19yaW5nX2J1ZmZlcjsKIHN0cnVjdCBpaW9fZGV2OwpAQCAtOTgsNiArMTAwLDcgQEAKICAqIEBhY2Nlc3NfaWQ6CQlkZXZpY2UgaWQgbnVtYmVyCiAgKiBAbGVuZ3RoOgkJW0RFVklDRV0gbnVtYmVyIG9mIGRhdHVtcyBpbiByaW5nCiAgKiBAYnBkOgkJW0RFVklDRV0gc2l6ZSBvZiBpbmRpdmlkdWFsIGRhdHVtIGluY2x1ZGluZyB0aW1lc3RhbXAKKyAqIEBicGU6CQlbREVWSUNFXSBzaXplIG9mIGluZGl2aWR1YWwgY2hhbm5lbCB2YWx1ZQogICogQGxvb3Bjb3VudDoJCVtJTlRFUk5dIG51bWJlciBvZiB0aW1lcyB0aGUgcmluZyBoYXMgbG9vcGVkCiAgKiBAYWNjZXNzX2hhbmRsZXI6CVtJTlRFUk5dIGNocmRldiBhY2Nlc3MgaGFuZGxpbmcKICAqIEBldl9pbnQ6CQlbSU5URVJOXSBjaHJkZXYgaW50ZXJmYWNlIGZvciB0aGUgZXZlbnQgY2hyZGV2CkBAIC0xMTksNiArMTIyLDcgQEAKIAlpbnQJCQkJYWNjZXNzX2lkOwogCWludAkJCQlsZW5ndGg7CiAJaW50CQkJCWJwZDsKKwlpbnQJCQkJYnBlOwogCWludAkJCQlsb29wY291bnQ7CiAJc3RydWN0IGlpb19oYW5kbGVyCQlhY2Nlc3NfaGFuZGxlcjsKIAlzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZQlldl9pbnQ7CkBAIC0yMTMsNyArMjE3LDcgQEAKICAqIEBfbGFiZWw6CWluZGVudGlmaWNhdGlvbiB2YXJpYWJsZSB1c2VkIGJ5IGRyaXZlcnMuICBPZnRlbiBhIHJlZyBhZGRyZXNzLgogICogQF9jb250cm9sZnVuYzogZnVuY3Rpb24gdXNlZCB0byBub3RpZnkgaGFyZHdhcmUgb2Ygd2hldGhlciBzdGF0ZSBjaGFuZ2VzCiAgKiovCi0jZGVmaW5lIElJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykJXAorI2RlZmluZSBfX0lJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykJXAogCXN0cnVjdCBpaW9fc2Nhbl9lbCBpaW9fc2Nhbl9lbF8jI19uYW1lID0gewkJCVwKIAkJLmRldl9hdHRyID0gX19BVFRSKF9udW1iZXIjI18jI19uYW1lIyNfZW4sCQlcCiAJCQkJICAgU19JUlVHTyB8IFNfSVdVU1IsCQkJXApAQCAtMjI1LDcgKzIyOSwxMCBAQAogCQkuc2V0X3N0YXRlID0gX2NvbnRyb2xmdW5jLAkJCQlcCiAJfQogCi0jZGVmaW5lIElJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikgXAorI2RlZmluZSBJSU9fU0NBTl9FTF9DKF9uYW1lLCBfbnVtYmVyLCBfYml0cywgX2xhYmVsLCBfY29udHJvbGZ1bmMpCVwKKwlfX0lJT19TQ0FOX0VMX0MoX25hbWUsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jb250cm9sZnVuYykKKworI2RlZmluZSBfX0lJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikgXAogCXN0cnVjdCBpaW9fc2Nhbl9lbCBpaW9fc2Nhbl9lbF8jI19uYW1lID0gewkJCVwKIAkJLmRldl9hdHRyID0gX19BVFRSKF9udW1iZXIjI18jI19zdHJpbmcjI19lbiwJCVwKIAkJCQkgICBTX0lSVUdPIHwgU19JV1VTUiwJCQlcCkBAIC0yMzYsNyArMjQzLDggQEAKIAkJLmxhYmVsID0gX2xhYmVsLAkJCQkJXAogCQkuc2V0X3N0YXRlID0gX2NmLAkJCQkJXAogCX0KLQorI2RlZmluZSBJSU9fU0NBTl9OQU1FRF9FTF9DKF9uYW1lLCBfc3RyaW5nLCBfbnVtYmVyLCBfYml0cywgX2xhYmVsLCBfY2YpIFwKKwlfX0lJT19TQ0FOX05BTUVEX0VMX0MoX25hbWUsIF9zdHJpbmcsIF9udW1iZXIsIF9iaXRzLCBfbGFiZWwsIF9jZikKIC8qKgogICogSUlPX1NDQU5fRUxfVElNRVNUQU1QIC0gZGVjbGFyZSBhIHNwZWNpYWwgc2NhbiBlbGVtZW50IGZvciB0aW1lc3RhbXBzCiAgKgpAQCAtMjg3LDUgKzI5NSwxNCBAQAogI2RlZmluZSBJSU9fUklOR19FTkFCTEVfQVRUUiBERVZJQ0VfQVRUUihyaW5nX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAkJCQkJIGlpb19zaG93X3JpbmdfZW5hYmxlLAkJXAogCQkJCQkgaWlvX3N0b3JlX3JpbmdfZW5hYmxlKQorI2Vsc2UgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLworc3RhdGljIGlubGluZSBpbnQgaWlvX3JpbmdfYnVmZmVyX3JlZ2lzdGVyKHN0cnVjdCBpaW9fcmluZ19idWZmZXIgKnJpbmcsIGludCBpZCkKK3sKKwlyZXR1cm4gMDsKK307CitzdGF0aWMgaW5saW5lIHZvaWQgaWlvX3JpbmdfYnVmZmVyX3VucmVnaXN0ZXIoc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqcmluZykKK3t9OworCisjZW5kaWYgLyogQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogCiAjZW5kaWYgLyogX0lJT19SSU5HX0dFTkVSSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKaW5kZXggMjk0MjcyZC4uZTJmMDFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJyaW5nX3N3LmgiCisjaW5jbHVkZSAidHJpZ2dlci5oIgogCiBzdGF0aWMgaW5saW5lIGludCBfX2lpb19hbGxvY2F0ZV9zd19yaW5nX2J1ZmZlcihzdHJ1Y3QgaWlvX3N3X3JpbmdfYnVmZmVyICpyaW5nLAogCQkJCQkJaW50IGJ5dGVzX3Blcl9kYXR1bSwgaW50IGxlbmd0aCkKQEAgLTQzMSw1ICs0MzIsNzMgQEAKIAkJaWlvX3B1dF9yaW5nX2J1ZmZlcihyKTsKIH0KIEVYUE9SVF9TWU1CT0woaWlvX3N3X3JiX2ZyZWUpOworCitpbnQgaWlvX3N3X3JpbmdfcHJlZW5hYmxlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpCit7CisJc2l6ZV90IHNpemU7CisJZGV2X2RiZygmaW5kaW9fZGV2LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCS8qIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2NhbiBlbGVtZW50cyBlbmFibGVkLCBpZiBub3QgZmFpbCovCisJaWYgKCEoaW5kaW9fZGV2LT5zY2FuX2NvdW50IHx8IGluZGlvX2Rldi0+c2Nhbl90aW1lc3RhbXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKKwkJaWYgKGluZGlvX2Rldi0+c2Nhbl9jb3VudCkKKwkJCS8qIFRpbWVzdGFtcCAoYWxpZ25lZCB0byBzNjQpIGFuZCBkYXRhICovCisJCQlzaXplID0gKCgoaW5kaW9fZGV2LT5zY2FuX2NvdW50ICogaW5kaW9fZGV2LT5yaW5nLT5icGUpCisJCQkJCSsgc2l6ZW9mKHM2NCkgLSAxKQorCQkJCSYgfihzaXplb2YoczY0KSAtIDEpKQorCQkJCSsgc2l6ZW9mKHM2NCk7CisJCWVsc2UgLyogVGltZXN0YW1wIG9ubHkgICovCisJCQlzaXplID0gc2l6ZW9mKHM2NCk7CisJZWxzZSAvKiBEYXRhIG9ubHkgKi8KKwkJc2l6ZSA9IGluZGlvX2Rldi0+c2Nhbl9jb3VudCAqIGluZGlvX2Rldi0+cmluZy0+YnBlOworCWluZGlvX2Rldi0+cmluZy0+YWNjZXNzLnNldF9icGQoaW5kaW9fZGV2LT5yaW5nLCBzaXplKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpaW9fc3dfcmluZ19wcmVlbmFibGUpOworCit2b2lkIGlpb19zd190cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpCit7CisJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqc3QKKwkJPSBjb250YWluZXJfb2Yod29ya19zLCBzdHJ1Y3QgaWlvX3N3X3JpbmdfaGVscGVyX3N0YXRlLAorCQkJd29ya190cmlnZ2VyX3RvX3JpbmcpOworCWludCBsZW4gPSAwOworCXNpemVfdCBkYXRhc2l6ZSA9IHN0LT5pbmRpb19kZXYKKwkJLT5yaW5nLT5hY2Nlc3MuZ2V0X2JwZChzdC0+aW5kaW9fZGV2LT5yaW5nKTsKKwljaGFyICpkYXRhID0ga21hbGxvYyhkYXRhc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoc3QtPmluZGlvX2Rldi0+ZGV2LnBhcmVudCwKKwkJCSJtZW1vcnkgYWxsb2MgZmFpbGVkIGluIHJpbmcgYmgiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX2NvdW50KQorCQlsZW4gPSBzdC0+Z2V0X3JpbmdfZWxlbWVudChzdCwgZGF0YSk7CisKKwkgIC8qIEd1YXJhbnRlZWQgdG8gYmUgYWxpZ25lZCB3aXRoIDggYnl0ZSBib3VuZGFyeSAqLworCWlmIChzdC0+aW5kaW9fZGV2LT5zY2FuX3RpbWVzdGFtcCkKKwkJKihzNjQgKikoKChwaHlzX2FkZHJfdClkYXRhICsgbGVuCisJCQkJKyBzaXplb2YoczY0KSAtIDEpICYgfihzaXplb2YoczY0KSAtIDEpKQorCQkJPSBzdC0+bGFzdF90aW1lc3RhbXA7CisJICBzdC0+aW5kaW9fZGV2LT5yaW5nLT5hY2Nlc3Muc3RvcmVfdG8oc3QtPmluZGlvX2Rldi0+cmluZywKKwkJCQkJKHU4ICopZGF0YSwKKwkJCXN0LT5sYXN0X3RpbWVzdGFtcCk7CisKKwlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShzdC0+aW5kaW9fZGV2LT50cmlnKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woaWlvX3N3X3RyaWdnZXJfYmhfdG9fcmluZyk7CisKK3ZvaWQgaWlvX3N3X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSkKK3sJc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqaAorCQk9IGlpb19kZXZfZ2V0X2RldmRhdGEoaW5kaW9fZGV2KTsKKwloLT5sYXN0X3RpbWVzdGFtcCA9IHRpbWU7CisJc2NoZWR1bGVfd29yaygmaC0+d29ya190cmlnZ2VyX3RvX3JpbmcpOworfQorRVhQT1JUX1NZTUJPTChpaW9fc3dfcG9sbF9mdW5jX3RoKTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmR1c3RyaWFsaW8gSS9PIHNvZnR3YXJlIHJpbmcgYnVmZmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCmluZGV4IGZkNjc3ZjAuLjYxZjFlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5oCkBAIC0yMDcsMTAgKzIwNywyMSBAQAogc3RydWN0IGlpb19yaW5nX2J1ZmZlciAqaWlvX3N3X3JiX2FsbG9jYXRlKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpOwogdm9pZCBpaW9fc3dfcmJfZnJlZShzdHJ1Y3QgaWlvX3JpbmdfYnVmZmVyICpyaW5nKTsKIAoraW50IGlpb19zd19yaW5nX3ByZWVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKIAorc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSB7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3RyaWdnZXJfdG9fcmluZzsKKwlzdHJ1Y3QgaWlvX2RldgkJCSppbmRpb19kZXY7CisJaW50ICgqZ2V0X3JpbmdfZWxlbWVudCkoc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSAqc3QsIHU4ICpidWYpOworCXM2NAkJCQlsYXN0X3RpbWVzdGFtcDsKK307CisKK3ZvaWQgaWlvX3N3X3BvbGxfZnVuY190aChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LCBzNjQgdGltZSk7Cit2b2lkIGlpb19zd190cmlnZ2VyX2JoX3RvX3Jpbmcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrX3MpOwogCiAjZWxzZSAvKiBDT05GSUdfSUlPX1JJTkdfQlVGRkVSKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpaW9fcmluZ19zd19yZWdpc3Rlcl9mdW5jcyhzdHJ1Y3QgaWlvX3JpbmdfYWNjZXNzX2Z1bmNzICpyYSkKLXt9Oworc3RydWN0IGlpb19zd19yaW5nX2hlbHBlcl9zdGF0ZSB7CisJc3RydWN0IGlpb19kZXYJCQkqaW5kaW9fZGV2OworfTsKICNlbmRpZiAvKiAhQ09ORklHX0lJT19SSU5HX0JVRkZFUiAqLwogI2VuZGlmIC8qIF9JSU9fUklOR19TV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby9zeXNmcy5oCmluZGV4IGFmY2Y1YWIuLjYwODM0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vc3lzZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3N5c2ZzLmgKQEAgLTI4NCw2ICsyODQsMTQgQEAKIAkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCiAJICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKIAorI2RlZmluZSBJSU9fRVZFTlRfQVRUUl9OQU1FRF9TSChfdm5hbWUsIF9uYW1lLCBfZXZfbGlzdCwgX3Nob3csIF9zdG9yZSwgX21hc2spIFwKKwlzdGF0aWMgc3RydWN0IGlpb19ldmVudF9hdHRyCQkJCQlcCisJaWlvX2V2ZW50X2F0dHJfIyNfdm5hbWUJCQkJCQlcCisJPSB7IC5kZXZfYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsCQlcCisJCQkgICAgICAgX3Nob3csIF9zdG9yZSksCQkJCVwKKwkgICAgLm1hc2sgPSBfbWFzaywJCQkJCQlcCisJICAgIC5saXN0ZWwgPSAmX2V2X2xpc3QgfTsKKwogLyoqCiAgKiBJSU9fRVZFTlRfQVRUUiAtIG5vbi1zaGFyZWQgZXZlbnQgYXR0cmlidXRlCiAgKiBAX25hbWU6IGV2ZW50IG5hbWUKQEAgLTI5MywxMCArMzAxLDcgQEAKICAqIEBfaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKICAqKi8KICNkZWZpbmUgSUlPX0VWRU5UX0FUVFIoX25hbWUsIF9zaG93LCBfc3RvcmUsIF9tYXNrLCBfaGFuZGxlcikJCVwKLQlzdGF0aWMgc3RydWN0IGlpb19ldmVudF9oYW5kbGVyX2xpc3QJCQkJXAotCWlpb19ldmVudF8jI19uYW1lID0gewkJCQkJCVwKLQkJLmhhbmRsZXIgPSBfaGFuZGxlciwJCQkJCVwKLQl9OwkJCQkJCQkJXAorCUlJT19FVkVOVF9TSChfbmFtZSwgX2hhbmRsZXIpOwkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QJCQkJCQkJXAogCWlpb19ldmVudF9hdHRyCQkJCQkJCVwKIAlpaW9fZXZlbnRfYXR0cl8jI19uYW1lCQkJCQkJXApAQCAtMzI0LDYgKzMyOSw3IEBACiAjZGVmaW5lIElJT19FVkVOVF9DT0RFX0dZUk9fQkFTRQk0MDAKICNkZWZpbmUgSUlPX0VWRU5UX0NPREVfQURDX0JBU0UJCTUwMAogI2RlZmluZSBJSU9fRVZFTlRfQ09ERV9NSVNDX0JBU0UJNjAwCisjZGVmaW5lIElJT19FVkVOVF9DT0RFX0xJR0hUX0JBU0UJNzAwCiAKICNkZWZpbmUgSUlPX0VWRU5UX0NPREVfREVWSUNFX1NQRUNJRklDCTEwMDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaAppbmRleCA3ODRlN2I2Li40Njk5NTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIuaApAQCAtOCwxMCArOCw2IEBACiAgKi8KICNpZm5kZWYgX0lJT19UUklHR0VSX0hfCiAjZGVmaW5lIF9JSU9fVFJJR0dFUl9IXwotI2RlZmluZSBJSU9fVFJJR0dFUl9OQU1FX0xFTkdUSCAyMAotI2RlZmluZSBJSU9fVFJJR0dFUl9JRF9QUkVGSVggImlpbzp0cmlnZ2VyIgotI2RlZmluZSBJSU9fVFJJR0dFUl9JRF9GT1JNQVQgSUlPX1RSSUdHRVJfSURfUFJFRklYICIlZCIKLQogCiAvKioKICAqIHN0cnVjdCBpaW9fdHJpZ2dlciAtIGluZHVzdHJpYWwgSS9PIHRyaWdnZXIgZGV2aWNlCkBAIC0yNSw3ICsyMSw2IEBACiAgKiBAcG9sbGZ1bmNfbGlzdF9sb2NrOglbSU5URVJOXSBwcm90ZWN0aW9uIG9mIHRoZSBwb2xsaW5nIGZ1bmN0aW9uIGxpc3QKICAqIEBwb2xsZnVuY19saXN0OglbSU5URVJOXSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBydW4gb24gdHJpZ2dlci4KICAqIEBjb250cm9sX2F0dHJzOglbRFJJVkVSXSBzeXNmcyBhdHRyaWJ1dGVzIHJlbGV2YW50IHRvIHRyaWdnZXIgdHlwZQotICogQHRpbWVzdGFtcDoJCVtJTlRFUk5dIHRpbWVzdGFtcCB1c2VzZCBieSBzb21lIHRyaWdzIChlLmcuIGRhdGFyZHkpCiAgKiBAb3duZXI6CQlbRFJJVkVSXSB1c2VkIHRvIG1vbml0b3IgdXNhZ2UgY291bnQgb2YgdGhlIHRyaWdnZXIuCiAgKiBAdXNlX2NvdW50OgkJdXNlIGNvdW50IGZvciB0aGUgdHJpZ2dlcgogICogQHNldF90cmlnZ2VyX3N0YXRlOglbRFJJVkVSXSBzd2l0Y2ggb24vb2ZmIHRoZSB0cmlnZ2VyIG9uIGRlbWFuZApAQCAtNDMsNyArMzgsNiBAQAogCXNwaW5sb2NrX3QJCQlwb2xsZnVuY19saXN0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJcG9sbGZ1bmNfbGlzdDsKIAljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCSpjb250cm9sX2F0dHJzOwotCXM2NAkJCQl0aW1lc3RhbXA7CiAJc3RydWN0IG1vZHVsZQkJCSpvd25lcjsKIAlpbnQgdXNlX2NvdW50OwogCkBAIC0xMjQsNyArMTE4LDcgQEAKICAqCiAgKiBUeXBpY2FsbHkgY2FsbGVkIGluIHJlbGV2YW50IGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyLgogICoqLwotdm9pZCBpaW9fdHJpZ2dlcl9wb2xsKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7Cit2b2lkIGlpb190cmlnZ2VyX3BvbGwoc3RydWN0IGlpb190cmlnZ2VyICp0cmlnLCBzNjQgdGltZSk7CiB2b2lkIGlpb190cmlnZ2VyX25vdGlmeV9kb25lKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7CiAKIC8qKgpAQCAtMTQ4LDEzICsxNDIsMjcgQEAKIAlzdHJ1Y3QJCQkJbGlzdF9oZWFkIGxpc3Q7CiAJdm9pZAkJCQkqcHJpdmF0ZV9kYXRhOwogCXZvaWQgKCpwb2xsX2Z1bmNfaW1tZWRpYXRlKShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKLQl2b2lkICgqcG9sbF9mdW5jX21haW4pKHN0cnVjdCBpaW9fZGV2ICAqcHJpdmF0ZV9kYXRhKTsKKwl2b2lkICgqcG9sbF9mdW5jX21haW4pKHN0cnVjdCBpaW9fZGV2ICpwcml2YXRlX2RhdGEsIHM2NCB0aW1lKTsKIAogfTsKIAoraW50IGlpb19hbGxvY19wb2xsZnVuYyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LAorCQkgICAgICAgdm9pZCAoKmltbWVkaWF0ZSkoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiksCisJCSAgICAgICB2b2lkICgqbWFpbikoc3RydWN0IGlpb19kZXYgKnByaXZhdGVfZGF0YSwgczY0IHRpbWUpKTsKKworLyoKKyAqIFR3byBmdW5jdGlvbnMgZm9yIGNvbW1vbiBjYXNlIHdoZXJlIGFsbCB0aGF0IGhhcHBlbnMgaXMgYSBwb2xsZnVuYworICogaXMgYXR0YWNoZWQgYW5kIGRldGFjaGVkIGZvcm0gYSB0cmlnZ2VyCisgKi8KK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcG9zdGVuYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKK2ludCBpaW9fdHJpZ2dlcmVkX3JpbmdfcHJlZGlzYWJsZShzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KTsKKwogc3RydWN0IGlpb190cmlnZ2VyICppaW9fYWxsb2NhdGVfdHJpZ2dlcih2b2lkKTsKIAogdm9pZCBpaW9fZnJlZV90cmlnZ2VyKHN0cnVjdCBpaW9fdHJpZ2dlciAqdHJpZyk7CiAKIAorc3RydWN0IGlpb19zaW1wbGVfdHJpZ2dlciB7CisJc3RydWN0IGlpb190cmlnZ2VyIHRyaWc7Cit9OwogI2VuZGlmIC8qIF9JSU9fVFJJR0dFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL01ha2VmaWxlCmluZGV4IGU1Zjk2ZDIuLjEwYWVjYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvTWFrZWZpbGUKQEAgLTEsNSArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0cmlnZ2VycyBub3QgYXNzb2NpYXRlZCB3aXRoIGlpby1kZXZpY2VzCiAjCisKIG9iai0kKENPTkZJR19JSU9fUEVSSU9ESUNfUlRDX1RSSUdHRVIpICs9IGlpby10cmlnLXBlcmlvZGljLXJ0Yy5vCi1vYmotJChDT05GSUdfSUlPX0dQSU9fVFJJR0dFUikgKz0gaWlvLXRyaWctZ3Bpby5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX0lJT19HUElPX1RSSUdHRVIpICs9IGlpby10cmlnLWdwaW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWdwaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1ncGlvLmMKaW5kZXggMWRhMjg1ZC4uZjkzY2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLWdwaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctZ3Bpby5jCkBAIC00Miw3ICs0Miw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpaW9fZ3Bpb190cmlnZ2VyX3BvbGwoaW50IGlycSwgdm9pZCAqcHJpdmF0ZSkKIHsKLQlpaW9fdHJpZ2dlcl9wb2xsKHByaXZhdGUpOworCS8qIFRpbWVzdGFtcCBub3QgY3VycmVudGx5IHByb3ZpZGVkICovCisJaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlLCAwKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTkzLDE2ICs5NCwxMSBAQAogCQkJdHJpZy0+cHJpdmF0ZV9kYXRhID0gdHJpZ19pbmZvOwogCQkJdHJpZ19pbmZvLT5pcnEgPSBpcnE7CiAJCQl0cmlnLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJdHJpZy0+bmFtZSA9IGttYWxsb2MoSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCi0JCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCF0cmlnLT5uYW1lKSB7CisJCQl0cmlnLT5uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpcnF0cmlnJWQiLCBpcnEpOworCQkJaWYgKHRyaWctPm5hbWUgPT0gTlVMTCkgewogCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJZ290byBlcnJvcl9mcmVlX3RyaWdfaW5mbzsKIAkJCX0KLQkJCXNucHJpbnRmKChjaGFyICopdHJpZy0+bmFtZSwKLQkJCQkgSUlPX1RSSUdHRVJfTkFNRV9MRU5HVEgsCi0JCQkJICJpcnF0cmlnJWQiLCBpcnEpOwotCiAJCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGlpb19ncGlvX3RyaWdnZXJfcG9sbCwKIAkJCQkJICBpcnFmbGFncywgdHJpZy0+bmFtZSwgdHJpZyk7CiAJCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctcGVyaW9kaWMtcnRjLmMKaW5kZXggNGVlM2FlMS4uYjBiNTJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyL2lpby10cmlnLXBlcmlvZGljLXJ0Yy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlci9paW8tdHJpZy1wZXJpb2RpYy1ydGMuYwpAQCAtMjUsNyArMjUsNiBAQAogc3RydWN0IGlpb19wcnRjX3RyaWdnZXJfaW5mbyB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlpbnQgZnJlcXVlbmN5OwotCWNoYXIgKm5hbWU7CiAJc3RydWN0IHJ0Y190YXNrIHRhc2s7CiB9OwogCkBAIC03OCw4ICs3Nyw3IEBACiAJCQkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaWlvX3RyaWdnZXIgKnRyaWcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaWlvX3BydGNfdHJpZ2dlcl9pbmZvICp0cmlnX2luZm8gPSB0cmlnLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWdfaW5mby0+bmFtZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRyaWctPm5hbWUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywKQEAgLTEwMCw3ICs5OCw4IEBACiAKIHN0YXRpYyB2b2lkIGlpb19wcnRjX3RyaWdnZXJfcG9sbCh2b2lkICpwcml2YXRlX2RhdGEpCiB7Ci0JaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlX2RhdGEpOworCS8qIFRpbWVzdGFtcCBpcyBub3QgcHJvdmlkZWQgY3VycmVudGx5ICovCisJaWlvX3RyaWdnZXJfcG9sbChwcml2YXRlX2RhdGEsIDApOwogfQogCiBzdGF0aWMgaW50IGlpb190cmlnX3BlcmlvZGljX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCkBAIC0xMjksMTYgKzEyOCwxMiBAQAogCQl0cmlnLT5wcml2YXRlX2RhdGEgPSB0cmlnX2luZm87CiAJCXRyaWctPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXRyaWctPnNldF90cmlnZ2VyX3N0YXRlID0gJmlpb190cmlnX3BlcmlvZGljX3J0Y19zZXRfc3RhdGU7Ci0JCXRyaWctPm5hbWUgPSBrbWFsbG9jKElJT19UUklHR0VSX05BTUVfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwkJdHJpZy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGVyaW9kaWMlcyIsIHBkYXRhW2ldKTsKIAkJaWYgKHRyaWctPm5hbWUgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyb3JfZnJlZV90cmlnX2luZm87CiAJCX0KLQkJc25wcmludGYoKGNoYXIgKil0cmlnLT5uYW1lLAotCQkJIElJT19UUklHR0VSX05BTUVfTEVOR1RILAotCQkJICJwZXJpb2RpYyVzIiwKLQkJCSBwZGF0YVtpXSk7Ci0JCXRyaWdfaW5mby0+bmFtZSA9IChjaGFyICopdHJpZy0+bmFtZTsKKwogCQkvKiBSVEMgYWNjZXNzICovCiAJCXRyaWdfaW5mby0+cnRjCiAJCQk9IHJ0Y19jbGFzc19vcGVuKHBkYXRhW2ldKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKaW5kZXggNzg1MmQ0YS4uYmMxZmZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIkxpbmU2IFVTQiBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCICYmIFNORAogCXNlbGVjdCBTTkRfUkFXTUlESQorCXNlbGVjdCBTTkRfUENNCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIGd1aXRhciBhbXAsIGNhYiwgYW5kIGVmZmVjdHMgbW9kZWxsZXIKIAkgIFBPRHh0IFBybyBieSBMaW5lNiAoYW5kIHNpbWlsYXIgZGV2aWNlcyksIHN1cHBvcnRpbmcgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKaW5kZXggMWQ1YTQ3My4uMjdiOTg2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwpAQCAtNjc5LDggKzY3OSwxMCBAQAogCXVzYl9nZXRfZGV2KHVzYmRldik7CiAKIAkvKiB3ZSBkb24ndCBoYW5kbGUgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgKi8KLQlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAodXNiZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3B1dDsKKwl9CiAKIAkvKiBjaGVjayB2ZW5kb3IgYW5kIHByb2R1Y3QgaWQgKi8KIAlmb3IgKGRldnR5cGUgPSBBUlJBWV9TSVpFKGxpbmU2X2lkX3RhYmxlKSAtIDE7IGRldnR5cGUtLTspIHsKQEAgLTY5MiwxNiArNjk0LDIwIEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoZGV2dHlwZSA8IDApCi0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXZ0eXBlIDwgMCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CisJfQogCiAJLyogZmluZCBmcmVlIHNsb3QgaW4gZGV2aWNlIHRhYmxlOiAqLwogCWZvciAoZGV2bnVtID0gMDsgZGV2bnVtIDwgTElORTZfTUFYX0RFVklDRVM7ICsrZGV2bnVtKQogCQlpZiAobGluZTZfZGV2aWNlc1tkZXZudW1dID09IE5VTEwpCiAJCQlicmVhazsKIAotCWlmIChkZXZudW0gPT0gTElORTZfTUFYX0RFVklDRVMpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChkZXZudW0gPT0gTElORTZfTUFYX0RFVklDRVMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0OworCX0KIAogCS8qIGluaXRpYWxpemUgZGV2aWNlIGluZm86ICovCiAJcHJvcGVydGllcyA9ICZsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW2RldnR5cGVdOwpAQCAtNzYyLDEzICs3NjgsMTQgQEAKIAogCWRlZmF1bHQ6CiAJCU1JU1NJTkdfQ0FTRTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsIGludGVyZmFjZV9udW1iZXIsIGFsdGVybmF0ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3B1dDsKIAl9CiAKIAkvKiBpbml0aWFsaXplIGRldmljZSBkYXRhIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCkBAIC04MTUsNyArODIyLDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9wdXQ7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTgyNywxOSArODM1LDIyIEBACiAKIAlkZWZhdWx0OgogCQlNSVNTSU5HX0NBU0U7Ci0JCXJldHVybiAtRU5PREVWOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJaWYgKHNpemUgPT0gMCkgewogCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJkcml2ZXIgYnVnOiBpbnRlcmZhY2UgZGF0YSBzaXplIG5vdCBzZXRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0OwogCX0KIAogCWxpbmU2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmIChsaW5lNiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9wdXQ7CiAJfQogCiAJLyogc3RvcmUgYmFzaWMgZGF0YTogKi8KQEAgLTg3NSwxNiArODg2LDE2IEBACiAKIAkJaWYgKGxpbmU2LT5idWZmZXJfbGlzdGVuID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAJCX0KIAogCQlsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPSBrbWFsbG9jKExJTkU2X01FU1NBR0VfTUFYTEVOLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAobGluZTYtPmJ1ZmZlcl9tZXNzYWdlID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAJCX0KIAogCQlsaW5lNi0+dXJiX2xpc3RlbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CkBAIC04OTIsMTUgKzkwMywxNSBAQAogCQlpZiAobGluZTYtPnVyYl9saXN0ZW4gPT0gTlVMTCkgewogCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9kZXN0cnVjdDsKIAkJfQogCiAJCXJldCA9IGxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsCiAJCQkJX19mdW5jX18pOwotCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIGVycl9kZXN0cnVjdDsKIAkJfQogCX0KIApAQCAtOTUyLDIyICs5NjMsMjUgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAocmV0IDwgMCkgewotCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAKIAlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmaW50ZXJmYWNlLT5kZXYua29iaiwgJnVzYmRldi0+ZGV2LmtvYmosCiAJCQkJInVzYl9kZXZpY2UiKTsKLQlpZiAocmV0IDwgMCkgewotCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGVzdHJ1Y3Q7CiAKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBub3cgYXR0YWNoZWRcbiIsCiAJCSBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CiAJbGluZTZfZGV2aWNlc1tkZXZudW1dID0gbGluZTY7CiAJbGluZTZfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cnVjdDoKKwlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworZXJyX3B1dDoKKwl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwl1c2JfcHV0X2Rldih1c2JkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnCmluZGV4IDk2OGMyYWRlLi4xMDBjNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAjCiBtZW51Y29uZmlnIExJUkNfU1RBR0lORwogCWJvb2wgIkxpbnV4IEluZnJhcmVkIFJlbW90ZSBDb250cm9sIElSIHJlY2VpdmVyL3RyYW5zbWl0dGVyIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBMSVJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSwgYW5kIGFsbCBzdXBwb3J0ZWQgTGludXggSW5mcmFyZWQgUmVtb3RlIENvbnRyb2wgSVIgYW5kCiAJICBSRiByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgZHJpdmVycyB3aWxsIGJlIGRpc3BsYXllZC4gV2hlbiBwYWlyZWQKQEAgLTEzLDIxICsxNCwxMyBAQAogCiBjb25maWcgTElSQ19CVDgyOQogICAgICAgICB0cmlzdGF0ZSAiQlQ4MjkgYmFzZWQgaGFyZHdhcmUiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQQ0kKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBJUiBpbnRlcmZhY2Ugb24gQlQ4MjktYmFzZWQgaGFyZHdhcmUKIAotY29uZmlnIExJUkNfRU5FMDEwMAotCXRyaXN0YXRlICJFTkUgS0IzOTI0L0VORTAxMDAgQ0lSIFBvcnQgUmVjaWV2ZXIiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKLQloZWxwCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciBDSVIgcG9ydCBoYW5kbGVkIGJ5IEVORSBLQjM5MjQgZW1iZWRkZWQKLQkgIGNvbnRyb2xsZXIgZm91bmQgb24gc29tZSBub3RlYm9va3MuCi0JICBJdCBhcHBlYXJzIG9uIFBOUCBsaXN0IGFzIEVORTAxMDAuCi0KIGNvbmZpZyBMSVJDX0kyQwogCXRyaXN0YXRlICJJMkMgQmFzZWQgSVIgUmVjZWl2ZXJzIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgSTJDCiAJaGVscAogCSAgRHJpdmVyIGZvciBJMkMtYmFzZWQgSVIgcmVjZWl2ZXJzLCBzdWNoIGFzIHRob3NlIGNvbW1vbmx5CiAJICBmb3VuZCBvbmJvYXJkIEhhdXBwYXVnZSBQVlItMTUwLzI1MC8zNTAgdmlkZW8gY2FwdHVyZSBjYXJkcwpAQCAtNDAsNyArMzMsNyBAQAogCiBjb25maWcgTElSQ19JTU9OCiAJdHJpc3RhdGUgIkxlZ2FjeSBTb3VuZEdyYXBoIGlNT04gUmVjZWl2ZXIgYW5kIERpc3BsYXkiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBVU0IKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBvcmlnaW5hbCBTb3VuZEdyYXBoIGlNT04gSVIgUmVjZWl2ZXIgYW5kIERpc3BsYXkKIApAQCAtNDgsNyArNDEsNyBAQAogCiBjb25maWcgTElSQ19JVDg3CiAJdHJpc3RhdGUgIklURSBJVDg3WFggQ0lSIFBvcnQgUmVjZWl2ZXIiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQTlAKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBJVEUgSVQ4N3h4IElSIFJlY2VpdmVyCiAKQEAgLTYwLDEzICs1MywxMyBAQAogCiBjb25maWcgTElSQ19QQVJBTExFTAogCXRyaXN0YXRlICJIb21lYnJldyBQYXJhbGxlbCBQb3J0IFJlY2VpdmVyIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmICFTTVAKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBQQVJQT1JUICYmICFTTVAKIAloZWxwCiAJICBEcml2ZXIgZm9yIEhvbWVicmV3IFBhcmFsbGVsIFBvcnQgUmVjZWl2ZXJzCiAKIGNvbmZpZyBMSVJDX1NBU0VNCiAJdHJpc3RhdGUgIlNhc2VtIFVTQiBJUiBSZW1vdGUiCi0JZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcKKwlkZXBlbmRzIG9uIExJUkNfU1RBR0lORyAmJiBVU0IKIAloZWxwCiAJICBEcml2ZXIgZm9yIHRoZSBTYXNlbSBPbkFpciBSZW1vY29uLVYgb3IgRGlnbiBIVjUgSFRQQyBJUi9WRkQgTW9kdWxlCiAKQEAgLTg5LDEyICs4Miw2IEBACiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgU0lSIElyREEgcG9ydAogCi1jb25maWcgTElSQ19TVFJFQU1aQVAKLQl0cmlzdGF0ZSAiU3RyZWFtemFwIFBDIFJlY2VpdmVyIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCi0JaGVscAotCSAgRHJpdmVyIGZvciB0aGUgU3RyZWFtemFwIFBDIFJlY2VpdmVyCi0KIGNvbmZpZyBMSVJDX1RUVVNCSVIKIAl0cmlzdGF0ZSAiVGVjaG5vdHJlbmQgVVNCIElSIFJlY2VpdmVyIgogCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HICYmIFVTQgpAQCAtMTAzLDcgKzkwLDcgQEAKIAogY29uZmlnIExJUkNfWklMT0cKIAl0cmlzdGF0ZSAiWmlsb2cvSGF1cHBhdWdlIElSIFRyYW5zbWl0dGVyIgotCWRlcGVuZHMgb24gTElSQ19TVEFHSU5HCisJZGVwZW5kcyBvbiBMSVJDX1NUQUdJTkcgJiYgSTJDCiAJaGVscAogCSAgRHJpdmVyIGZvciB0aGUgWmlsb2cvSGF1cHBhdWdlIElSIFRyYW5zbWl0dGVyLCBmb3VuZCBvbgogCSAgUFZSLTE1MC81MDAsIEhWUi0xMjAwLzEyNTAvMTcwMC8xODAwLCBIRC1QVlIgYW5kIG90aGVyIGNhcmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCmluZGV4IGEwMTkxODIuLjRkYTFmMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL01ha2VmaWxlCkBAIC00LDcgKzQsNiBAQAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCiBvYmotJChDT05GSUdfTElSQ19CVDgyOSkJKz0gbGlyY19idDgyOS5vCi1vYmotJChDT05GSUdfTElSQ19FTkUwMTAwKQkrPSBsaXJjX2VuZTAxMDAubwogb2JqLSQoQ09ORklHX0xJUkNfSTJDKQkJKz0gbGlyY19pMmMubwogb2JqLSQoQ09ORklHX0xJUkNfSUdPUlBMVUdVU0IpCSs9IGxpcmNfaWdvcnBsdWd1c2Iubwogb2JqLSQoQ09ORklHX0xJUkNfSU1PTikJCSs9IGxpcmNfaW1vbi5vCkBAIC0xNCw2ICsxMyw1IEBACiBvYmotJChDT05GSUdfTElSQ19TQVNFTSkJKz0gbGlyY19zYXNlbS5vCiBvYmotJChDT05GSUdfTElSQ19TRVJJQUwpCSs9IGxpcmNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19MSVJDX1NJUikJCSs9IGxpcmNfc2lyLm8KLW9iai0kKENPTkZJR19MSVJDX1NUUkVBTVpBUCkJKz0gbGlyY19zdHJlYW16YXAubwogb2JqLSQoQ09ORklHX0xJUkNfVFRVU0JJUikJKz0gbGlyY190dHVzYmlyLm8KIG9iai0kKENPTkZJR19MSVJDX1pJTE9HKQkrPSBsaXJjX3ppbG9nLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfZW5lMDEwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNTJjNTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19lbmUwMTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDYgKzAsMCBAQAotLyoKLSAqIGRyaXZlciBmb3IgRU5FIEtCMzkyNiBCL0MvRCBDSVIgKGFsc28ga25vd24gYXMgRU5FMDEwMCkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW0gTGV2aXRza3kgPG1heGltbGV2aXRza3lAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKLSAqIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKLSAqIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbnAuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSAibGlyY19lbmUwMTAwLmgiCi0KLXN0YXRpYyBpbnQgc2FtcGxlX3BlcmlvZCA9IDc1Owotc3RhdGljIGludCBlbmFibGVfaWRsZSA9IDE7Ci1zdGF0aWMgaW50IGVuYWJsZV9sZWFybmluZzsKLQotc3RhdGljIHZvaWQgZW5lX3NldF9pZGxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBpZGxlKTsKLXN0YXRpYyB2b2lkIGVuZV9zZXRfaW5wdXRzKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBlbmFibGUpOwotCi0vKiByZWFkIGEgaGFyZHdhcmUgcmVnaXN0ZXIgKi8KLXN0YXRpYyB1OCBlbmVfaHdfcmVhZF9yZWcoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgdTE2IHJlZykKLXsKLQlvdXRiKHJlZyA+PiA4LCBkZXYtPmh3X2lvICsgRU5FX0FERFJfSEkpOwotCW91dGIocmVnICYgMHhGRiwgZGV2LT5od19pbyArIEVORV9BRERSX0xPKTsKLQlyZXR1cm4gaW5iKGRldi0+aHdfaW8gKyBFTkVfSU8pOwotfQotCi0vKiB3cml0ZSBhIGhhcmR3YXJlIHJlZ2lzdGVyICovCi1zdGF0aWMgdm9pZCBlbmVfaHdfd3JpdGVfcmVnKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIHUxNiByZWcsIHU4IHZhbHVlKQotewotCW91dGIocmVnID4+IDgsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9ISSk7Ci0Jb3V0YihyZWcgJiAweEZGLCBkZXYtPmh3X2lvICsgRU5FX0FERFJfTE8pOwotCW91dGIodmFsdWUsIGRldi0+aHdfaW8gKyBFTkVfSU8pOwotfQotCi0vKiBjaGFuZ2Ugc3BlY2lmaWMgYml0cyBpbiBoYXJkd2FyZSByZWdpc3RlciAqLwotc3RhdGljIHZvaWQgZW5lX2h3X3dyaXRlX3JlZ19tYXNrKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsCi0JCQkJICB1MTYgcmVnLCB1OCB2YWx1ZSwgdTggbWFzaykKLXsKLQl1OCByZWd2YWx1ZTsKLQotCW91dGIocmVnID4+IDgsIGRldi0+aHdfaW8gKyBFTkVfQUREUl9ISSk7Ci0Jb3V0YihyZWcgJiAweEZGLCBkZXYtPmh3X2lvICsgRU5FX0FERFJfTE8pOwotCi0JcmVndmFsdWUgPSBpbmIoZGV2LT5od19pbyArIEVORV9JTykgJiB+bWFzazsKLQlyZWd2YWx1ZSB8PSAodmFsdWUgJiBtYXNrKTsKLQlvdXRiKHJlZ3ZhbHVlLCBkZXYtPmh3X2lvICsgRU5FX0lPKTsKLX0KLQotLyogcmVhZCBpcnEgc3RhdHVzIGFuZCBhY2sgaXQgKi8KLXN0YXRpYyBpbnQgZW5lX2h3X2lycV9zdGF0dXMoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50ICpidWZmZXJfcG9pbnRlcikKLXsKLQl1OCBpcnFfc3RhdHVzOwotCXU4IGZ3X2ZsYWdzMSwgZndfZmxhZ3MyOwotCi0JZndfZmxhZ3MyID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0ZXMik7Ci0KLQlpZiAoYnVmZmVyX3BvaW50ZXIpCi0JCSpidWZmZXJfcG9pbnRlciA9IDQgKiAoZndfZmxhZ3MyICYgRU5FX0ZXMl9CVUZfSElHSCk7Ci0KLQlpZiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKSB7Ci0JCWlycV9zdGF0dXMgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVCX0lSUV9TVEFUVVMpOwotCi0JCWlmICghKGlycV9zdGF0dXMgJiBFTkVCX0lSUV9TVEFUVVNfSVIpKQotCQkJcmV0dXJuIDA7Ci0JCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVCX0lSUV9TVEFUVVMsCi0JCQkJIGlycV9zdGF0dXMgJiB+RU5FQl9JUlFfU1RBVFVTX0lSKTsKLQotCQkvKiByZXYgQiBzdXBwb3J0IG9ubHkgcmVjaWV2aW5nICovCi0JCXJldHVybiBFTkVfSVJRX1JYOwotCX0KLQotCWlycV9zdGF0dXMgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVDX0lSUSk7Ci0KLQlpZiAoIShpcnFfc3RhdHVzICYgRU5FQ19JUlFfU1RBVFVTKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBvcmlnaW5hbCBkcml2ZXIgZG9lcyB0aGF0IHR3aWNlIC0gYSB3b3JrYXJvdW5kID8gKi8KLQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FQ19JUlEsIGlycV9zdGF0dXMgJiB+RU5FQ19JUlFfU1RBVFVTKTsKLQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FQ19JUlEsIGlycV9zdGF0dXMgJiB+RU5FQ19JUlFfU1RBVFVTKTsKLQotCS8qIGNsZWFyIHVua25vd24gZmxhZyBpbiBGOEY5ICovCi0JaWYgKGZ3X2ZsYWdzMiAmIEVORV9GVzJfSVJRX0NMUikKLQkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GVzIsIGZ3X2ZsYWdzMiAmIH5FTkVfRlcyX0lSUV9DTFIpOwotCi0JLyogY2hlY2sgaWYgdGhpcyBpcyBhIFRYIGludGVycnVwdCAqLwotCWZ3X2ZsYWdzMSA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9GVzEpOwotCi0JaWYgKGZ3X2ZsYWdzMSAmIEVORV9GVzFfVFhJUlEpIHsKLQkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GVzEsIGZ3X2ZsYWdzMSAmIH5FTkVfRlcxX1RYSVJRKTsKLQkJcmV0dXJuIEVORV9JUlFfVFg7Ci0JfSBlbHNlCi0JCXJldHVybiBFTkVfSVJRX1JYOwotfQotCi1zdGF0aWMgaW50IGVuZV9od19kZXRlY3Qoc3RydWN0IGVuZV9kZXZpY2UgKmRldikKLXsKLQl1OCBjaGlwX21ham9yLCBjaGlwX21pbm9yOwotCXU4IGh3X3JldmlzaW9uLCBvbGRfdmVyOwotCXU4IHRtcDsKLQl1OCBmd19jYXBhYmlsaXRpZXM7Ci0KLQl0bXAgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfSFdfVU5LKTsKLQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0hXX1VOSywgdG1wICYgfkVORV9IV19VTktfQ0xSKTsKLQotCWNoaXBfbWFqb3IgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfSFdfVkVSX01BSk9SKTsKLQljaGlwX21pbm9yID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1ZFUl9NSU5PUik7Ci0KLQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX0hXX1VOSywgdG1wKTsKLQlod19yZXZpc2lvbiA9IGVuZV9od19yZWFkX3JlZyhkZXYsIEVORV9IV19WRVJTSU9OKTsKLQlvbGRfdmVyID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FX0hXX1ZFUl9PTEQpOwotCi0JaWYgKGh3X3JldmlzaW9uID09IDB4RkYpIHsKLQotCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgImRldmljZSBzZWVtcyB0byBiZSBkaXNhYmxlZFxuIik7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJInNlbmQgYSBtYWlsIHRvIGxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOwotCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgInBsZWFzZSBhdHRhY2ggb3V0cHV0IG9mIGFjcGlkdW1wXG4iKTsKLQotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoY2hpcF9tYWpvciA9PSAweDMzKSB7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLCAiY2hpcHMgMHgzM3h4IGFyZW4ndCBzdXBwb3J0ZWQgeWV0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGNoaXBfbWFqb3IgPT0gMHgzOSAmJiBjaGlwX21pbm9yID09IDB4MjYgJiYgaHdfcmV2aXNpb24gPT0gMHhDMCkgewotCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0M7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkgICAgICAgIktCMzkyNkMgZGV0ZWN0ZWQsIGRyaXZlciBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZSFcbiIpOwotCi0JfSBlbHNlIGlmIChvbGRfdmVyID09IDB4MjQgJiYgaHdfcmV2aXNpb24gPT0gMHhDMCkgewotCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0I7Ci0JCWVuZV9wcmludGsoS0VSTl9OT1RJQ0UsICJLQjM5MjZCIGRldGVjdGVkXG4iKTsKLQl9IGVsc2UgewotCQlkZXYtPmh3X3JldmlzaW9uID0gRU5FX0hXX0Q7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkJInVua25vd24gRU5FIGNoaXAgZGV0ZWN0ZWQsIGFzc3VtaW5nIEtCMzkyNkRcbiIpOwotCQllbmVfcHJpbnRrKEtFUk5fV0FSTklORywgImRyaXZlciBzdXBwb3J0IGluY29tcGxldGUiKTsKLQotCX0KLQotCWVuZV9wcmludGsoS0VSTl9ERUJVRywgImNoaXAgaXMgMHglMDJ4JTAyeCAtIDB4JTAyeCwgMHglMDJ4XG4iLAotCQljaGlwX21ham9yLCBjaGlwX21pbm9yLCBvbGRfdmVyLCBod19yZXZpc2lvbik7Ci0KLQotCS8qIGRldGVjdCBmZWF0dXJlcyBoYXJkd2FyZSBzdXBwb3J0cyAqLwotCi0JaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykKLQkJcmV0dXJuIDA7Ci0KLQlmd19jYXBhYmlsaXRpZXMgPSBlbmVfaHdfcmVhZF9yZWcoZGV2LCBFTkVfRlcyKTsKLQotCWRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nID0gZndfY2FwYWJpbGl0aWVzICYgRU5FX0ZXMl9HUDQwX0FTX0xFQVJOOwotCWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgPSBmd19jYXBhYmlsaXRpZXMgJiBFTkVfRlcyX0xFQVJOSU5HOwotCi0JZGV2LT5od19mYW5fYXNfbm9ybWFsX2lucHV0ID0gZGV2LT5od19sZWFybmluZ19hbmRfdHhfY2FwYWJsZSAmJgotCSAgICBmd19jYXBhYmlsaXRpZXMgJiBFTkVfRlcyX0ZBTl9BU19OUk1MX0lOOwotCi0JZW5lX3ByaW50ayhLRVJOX05PVElDRSwgImhhcmR3YXJlIGZlYXR1cmVzOlxuIik7Ci0JZW5lX3ByaW50ayhLRVJOX05PVElDRSwKLQkJImxlYXJuaW5nIGFuZCB0eCAlcywgZ3BpbzQwX2xlYXJuICVzLCBmYW5faW4gJXNcbiIsCi0JICAgICAgIGRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUgPyAib24iIDogIm9mZiIsCi0JICAgICAgIGRldi0+aHdfZ3BpbzQwX2xlYXJuaW5nID8gIm9uIiA6ICJvZmYiLAotCSAgICAgICBkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQgPyAib24iIDogIm9mZiIpOwotCi0JaWYgKCFkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlICYmIGVuYWJsZV9sZWFybmluZykKLQkJZW5hYmxlX2xlYXJuaW5nID0gMDsKLQotCWlmIChkZXYtPmh3X2xlYXJuaW5nX2FuZF90eF9jYXBhYmxlKSB7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkiRGV2aWNlIHN1cHBvcnRzIHRyYW5zbWl0dGluZywgYnV0IHRoZSBkcml2ZXIgZG9lc24ndFxuIik7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkiZHVlIHRvIGxhY2sgb2YgaGFyZHdhcmUgdG8gdGVzdCBhZ2FpbnN0LlxuIik7Ci0JCWVuZV9wcmludGsoS0VSTl9XQVJOSU5HLAotCQkiU2VuZCBhIG1haWwgdG86IGxpcmMtbGlzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXRcbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gKi8KLXN0YXRpYyBpbnQgZW5lX2h3X2luaXQodm9pZCAqZGF0YSkKLXsKLQl1OCByZWdfdmFsdWU7Ci0Jc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7Ci0JZGV2LT5pbl91c2UgPSAxOwotCi0JaWYgKGRldi0+aHdfcmV2aXNpb24gPCBFTkVfSFdfQykgewotCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FQl9JUlEsIGRldi0+aXJxIDw8IDEpOwotCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FQl9JUlFfVU5LMSwgMHgwMSk7Ci0JfSBlbHNlIHsKLQkJcmVnX3ZhbHVlID0gZW5lX2h3X3JlYWRfcmVnKGRldiwgRU5FQ19JUlEpICYgMHhGMDsKLQkJcmVnX3ZhbHVlIHw9IEVORUNfSVJRX1VOS19FTjsKLQkJcmVnX3ZhbHVlICY9IH5FTkVDX0lSUV9TVEFUVVM7Ci0JCXJlZ192YWx1ZSB8PSAoZGV2LT5pcnEgJiBFTkVDX0lSUV9NQVNLKTsKLQkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORUNfSVJRLCByZWdfdmFsdWUpOwotCQllbmVfaHdfd3JpdGVfcmVnKGRldiwgRU5FX1RYX1VOSzEsIDB4NjMpOwotCX0KLQotCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfQ0lSX0NPTkYyLCAweDAwKTsKLQllbmVfc2V0X2lucHV0cyhkZXYsIGVuYWJsZV9sZWFybmluZyk7Ci0KLQkvKiBzZXQgc2FtcGxpbmcgcGVyaW9kICovCi0JZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9DSVJfU0FNUExFX1BFUklPRCwgc2FtcGxlX3BlcmlvZCk7Ci0KLQkvKiBhY2sgYW55IHBlbmRpbmcgaXJxcyAtIGp1c3QgaW4gY2FzZSAqLwotCWVuZV9od19pcnFfc3RhdHVzKGRldiwgTlVMTCk7Ci0KLQkvKiBlbnRlciBpZGxlIG1vZGUgKi8KLQllbmVfc2V0X2lkbGUoZGV2LCAxKTsKLQotCS8qIGVuYWJsZSBmaXJtd2FyZSBiaXRzICovCi0JZW5lX2h3X3dyaXRlX3JlZ19tYXNrKGRldiwgRU5FX0ZXMSwKLQkJCSAgICAgIEVORV9GVzFfRU5BQkxFIHwgRU5FX0ZXMV9JUlEsCi0JCQkgICAgICBFTkVfRlcxX0VOQUJMRSB8IEVORV9GVzFfSVJRKTsKLQkvKiBjbGVhciBzdGF0cyAqLwotCWRldi0+c2FtcGxlID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotLyogdGhpcyBlbmFibGVzIGdwaW80MCBzaWduYWwsIHVzZWQgaWYgY29ubmVjdGVkIHRvIHdpZGUgYmFuZCBpbnB1dCovCi1zdGF0aWMgdm9pZCBlbmVfZW5hYmxlX2dwaW80MChzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKQotewotCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9DSVJfQ09ORjEsIGVuYWJsZSA/Ci0JCQkgICAgICAwIDogRU5FX0NJUl9DT05GMl9HUElPNDBESVMsCi0JCQkgICAgICBFTkVfQ0lSX0NPTkYyX0dQSU80MERJUyk7Ci19Ci0KLS8qIHRoaXMgZW5hYmxlcyB0aGUgY2xhc3NpYyBzYW1wbGVyICovCi1zdGF0aWMgdm9pZCBlbmVfZW5hYmxlX25vcm1hbF9yZWNpZXZlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBlbmFibGUpCi17Ci0JZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9DSVJfQ09ORjEsIGVuYWJsZSA/IEVORV9DSVJfQ09ORjFfQURDX09OIDogMCk7Ci19Ci0KLS8qIHRoaXMgZW5hYmxlcyByZWNpZXZlIHZpYSBmYW4gaW5wdXQgKi8KLXN0YXRpYyB2b2lkIGVuZV9lbmFibGVfZmFuX3JlY2lldmUoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKLXsKLQlpZiAoIWVuYWJsZSkKLQkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCAwKTsKLQllbHNlIHsKLQkJZW5lX2h3X3dyaXRlX3JlZyhkZXYsIEVORV9GQU5fQVNfSU4xLCBFTkVfRkFOX0FTX0lOMV9FTik7Ci0JCWVuZV9od193cml0ZV9yZWcoZGV2LCBFTkVfRkFOX0FTX0lOMiwgRU5FX0ZBTl9BU19JTjJfRU4pOwotCX0KLQlkZXYtPmZhbl9pbnB1dF9pbnVzZSA9IGVuYWJsZTsKLX0KLQotLyogZGV0ZXJtaW5lIHdoaWNoIGlucHV0IHRvIHVzZSovCi1zdGF0aWMgdm9pZCBlbmVfc2V0X2lucHV0cyhzdHJ1Y3QgZW5lX2RldmljZSAqZGV2LCBpbnQgbGVhcm5pbmdfZW5hYmxlKQotewotCWVuZV9lbmFibGVfbm9ybWFsX3JlY2lldmUoZGV2LCAxKTsKLQotCS8qIG9sZCBoYXJkd2FyZSBkb2Vzbid0IHN1cHBvcnQgbGVhcm5pbmcgbW9kZSBmb3Igc3VyZSAqLwotCWlmIChkZXYtPmh3X3JldmlzaW9uIDw9IEVORV9IV19CKQotCQlyZXR1cm47Ci0KLQkvKiByZWNpZXZlciBub3QgbGVhcm5pbmcgY2FwYWJsZSwgc3RpbGwgc2V0IGdwaW80MCBjb3JyZWN0bHkgKi8KLQlpZiAoIWRldi0+aHdfbGVhcm5pbmdfYW5kX3R4X2NhcGFibGUpIHsKLQkJZW5lX2VuYWJsZV9ncGlvNDAoZGV2LCAhZGV2LT5od19ncGlvNDBfbGVhcm5pbmcpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogZW5hYmxlIGxlYXJuaW5nIG1vZGUgKi8KLQlpZiAobGVhcm5pbmdfZW5hYmxlKSB7Ci0JCWVuZV9lbmFibGVfZ3BpbzQwKGRldiwgZGV2LT5od19ncGlvNDBfbGVhcm5pbmcpOwotCi0JCS8qIGZhbiBpbnB1dCBpcyBub3QgdXNlZCBmb3IgbGVhcm5pbmcgKi8KLQkJaWYgKGRldi0+aHdfZmFuX2FzX25vcm1hbF9pbnB1dCkKLQkJCWVuZV9lbmFibGVfZmFuX3JlY2lldmUoZGV2LCAwKTsKLQotCS8qIGRpc2FibGUgbGVhcm5pbmcgbW9kZSAqLwotCX0gZWxzZSB7Ci0JCWlmIChkZXYtPmh3X2Zhbl9hc19ub3JtYWxfaW5wdXQpIHsKLQkJCWVuZV9lbmFibGVfZmFuX3JlY2lldmUoZGV2LCAxKTsKLQkJCWVuZV9lbmFibGVfbm9ybWFsX3JlY2lldmUoZGV2LCAwKTsKLQkJfSBlbHNlCi0JCQllbmVfZW5hYmxlX2dwaW80MChkZXYsICFkZXYtPmh3X2dwaW80MF9sZWFybmluZyk7Ci0JfQotCi0JLyogc2V0IGZldyBhZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGlzIG1vZGUgKi8KLQllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfQ0lSX0NPTkYxLCBsZWFybmluZ19lbmFibGUgPwotCQkJICAgICAgRU5FX0NJUl9DT05GMV9MRUFSTjEgOiAwLCBFTkVfQ0lSX0NPTkYxX0xFQVJOMSk7Ci0KLQllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfQ0lSX0NPTkYyLCBsZWFybmluZ19lbmFibGUgPwotCQkJICAgICAgRU5FX0NJUl9DT05GMl9MRUFSTjIgOiAwLCBFTkVfQ0lSX0NPTkYyX0xFQVJOMik7Ci19Ci0KLS8qIGRlaW5pdGlhbGl6YXRpb24gKi8KLXN0YXRpYyB2b2lkIGVuZV9od19kZWluaXQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gKHN0cnVjdCBlbmVfZGV2aWNlICopZGF0YTsKLQotCS8qIGRpc2FibGUgc2FtcGxlcnMgKi8KLQllbmVfZW5hYmxlX25vcm1hbF9yZWNpZXZlKGRldiwgMCk7Ci0KLQlpZiAoZGV2LT5od19mYW5fYXNfbm9ybWFsX2lucHV0KQotCQllbmVfZW5hYmxlX2Zhbl9yZWNpZXZlKGRldiwgMCk7Ci0KLQkvKiBkaXNhYmxlIGhhcmR3YXJlIElSUSBhbmQgZmlybXdhcmUgZmxhZyAqLwotCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9GVzEsIDAsIEVORV9GVzFfRU5BQkxFIHwgRU5FX0ZXMV9JUlEpOwotCi0JZW5lX3NldF9pZGxlKGRldiwgMSk7Ci0JZGV2LT5pbl91c2UgPSAwOwotfQotCi0vKiAgc2VuZHMgY3VycmVudCBzYW1wbGUgdG8gdXNlcnNwYWNlICovCi1zdGF0aWMgdm9pZCBzZW5kX3NhbXBsZShzdHJ1Y3QgZW5lX2RldmljZSAqZGV2KQotewotCWludCB2YWx1ZSA9IGFicyhkZXYtPnNhbXBsZSkgJiBQVUxTRV9NQVNLOwotCi0JaWYgKGRldi0+c2FtcGxlID4gMCkKLQkJdmFsdWUgfD0gUFVMU0VfQklUOwotCi0JaWYgKCFsaXJjX2J1ZmZlcl9mdWxsKGRldi0+bGlyY19kcml2ZXItPnJidWYpKSB7Ci0JCWxpcmNfYnVmZmVyX3dyaXRlKGRldi0+bGlyY19kcml2ZXItPnJidWYsICh2b2lkICopJnZhbHVlKTsKLQkJd2FrZV91cCgmZGV2LT5saXJjX2RyaXZlci0+cmJ1Zi0+d2FpdF9wb2xsKTsKLQl9Ci0JZGV2LT5zYW1wbGUgPSAwOwotfQotCi0vKiAgdGhpcyB1cGRhdGVzIGN1cnJlbnQgc2FtcGxlICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfc2FtcGxlKHN0cnVjdCBlbmVfZGV2aWNlICpkZXYsIGludCBzYW1wbGUpCi17Ci0JaWYgKCFkZXYtPnNhbXBsZSkKLQkJZGV2LT5zYW1wbGUgPSBzYW1wbGU7Ci0JZWxzZSBpZiAoc2FtZV9zaWduKGRldi0+c2FtcGxlLCBzYW1wbGUpKQotCQlkZXYtPnNhbXBsZSArPSBzYW1wbGU7Ci0JZWxzZSB7Ci0JCXNlbmRfc2FtcGxlKGRldik7Ci0JCWRldi0+c2FtcGxlID0gc2FtcGxlOwotCX0KLX0KLQotLyogZW5hYmxlIG9yIGRpc2FibGUgaWRsZSBtb2RlICovCi1zdGF0aWMgdm9pZCBlbmVfc2V0X2lkbGUoc3RydWN0IGVuZV9kZXZpY2UgKmRldiwgaW50IGlkbGUpCi17Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwotCWludCBkaXNhYmxlID0gaWRsZSAmJiBlbmFibGVfaWRsZSAmJiAoZGV2LT5od19yZXZpc2lvbiA8IEVORV9IV19DKTsKLQotCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9DSVJfU0FNUExFX1BFUklPRCwKLQkJCSAgICAgIGRpc2FibGUgPyAwIDogRU5FX0NJUl9TQU1QTEVfT1ZFUkZMT1csCi0JCQkgICAgICBFTkVfQ0lSX1NBTVBMRV9PVkVSRkxPVyk7Ci0JZGV2LT5pZGxlID0gaWRsZTsKLQotCS8qIHJlbWVtYmVyIHdoZW4gd2UgaGF2ZSBlbnRlcmVkIHRoZSBpZGxlIG1vZGUgKi8KLQlpZiAoaWRsZSkgewotCQlkb19nZXR0aW1lb2ZkYXkoJmRldi0+Z2FwX3N0YXJ0KTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHNlbmQgdGhlIGdhcCBiZXR3ZWVuIGtleXByZXNzZXMgbm93ICovCi0JZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCi0JaWYgKG5vdy50dl9zZWMgLSBkZXYtPmdhcF9zdGFydC50dl9zZWMgPiAxNikKLQkJZGV2LT5zYW1wbGUgPSBzcGFjZShQVUxTRV9NQVNLKTsKLQllbHNlCi0JCWRldi0+c2FtcGxlID0gZGV2LT5zYW1wbGUgKwotCQkgICAgc3BhY2UoMTAwMDAwMHVsbCAqIChub3cudHZfc2VjIC0gZGV2LT5nYXBfc3RhcnQudHZfc2VjKSkKLQkJICAgICsgc3BhY2Uobm93LnR2X3VzZWMgLSBkZXYtPmdhcF9zdGFydC50dl91c2VjKTsKLQotCWlmIChhYnMoZGV2LT5zYW1wbGUpID4gUFVMU0VfTUFTSykKLQkJZGV2LT5zYW1wbGUgPSBzcGFjZShQVUxTRV9NQVNLKTsKLQlzZW5kX3NhbXBsZShkZXYpOwotfQotCi0vKiBpbnRlcnJ1cHQgaGFuZGxlciAqLwotc3RhdGljIGlycXJldHVybl90IGVuZV9od19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQl1MTYgaHdfdmFsdWU7Ci0JaW50IGksIGh3X3NhbXBsZTsKLQlpbnQgc3BhY2U7Ci0JaW50IGJ1ZmZlcl9wb2ludGVyOwotCWludCBpcnFfc3RhdHVzOwotCi0Jc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZW5lX2RldmljZSAqKWRhdGE7Ci0JaXJxX3N0YXR1cyA9IGVuZV9od19pcnFfc3RhdHVzKGRldiwgJmJ1ZmZlcl9wb2ludGVyKTsKLQotCWlmICghaXJxX3N0YXR1cykKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JLyogVE9ETzogb25seSBSWCBmb3Igbm93ICovCi0JaWYgKGlycV9zdGF0dXMgPT0gRU5FX0lSUV9UWCkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCi0JZm9yIChpID0gMDsgaSA8IEVORV9TQU1QTEVTX1NJWkU7IGkrKykgewotCi0JCWh3X3ZhbHVlID0gZW5lX2h3X3JlYWRfcmVnKGRldiwKLQkJCQlFTkVfU0FNUExFX0JVRkZFUiArIGJ1ZmZlcl9wb2ludGVyICsgaSk7Ci0KLQkJaWYgKGRldi0+ZmFuX2lucHV0X2ludXNlKSB7Ci0JCQkvKiByZWFkIGhpZ2ggcGFydCBvZiB0aGUgc2FtcGxlICovCi0JCQlod192YWx1ZSB8PSBlbmVfaHdfcmVhZF9yZWcoZGV2LAotCQkJICAgIEVORV9TQU1QTEVfQlVGRkVSX0ZBTiArIGJ1ZmZlcl9wb2ludGVyICsgaSkgPDwgODsKLQotCQkJLyogdGVzdCBmb3IgX3NwYWNlXyBiaXQgKi8KLQkJCXNwYWNlID0gIShod192YWx1ZSAmIEVORV9GQU5fU01QTF9QVUxTX01TSyk7Ci0KLQkJCS8qIGNsZWFyIHNwYWNlIGJpdCwgYW5kIG90aGVyIHVudXNlZCBiaXRzICovCi0JCQlod192YWx1ZSAmPSBFTkVfRkFOX1ZBTFVFX01BU0s7Ci0JCQlod19zYW1wbGUgPSBod192YWx1ZSAqIEVORV9TQU1QTEVfUEVSSU9EX0ZBTjsKLQotCQl9IGVsc2UgewotCQkJc3BhY2UgPSBod192YWx1ZSAmIEVORV9TQU1QTEVfU1BDX01BU0s7Ci0JCQlod192YWx1ZSAmPSBFTkVfU0FNUExFX1ZBTFVFX01BU0s7Ci0JCQlod19zYW1wbGUgPSBod192YWx1ZSAqIHNhbXBsZV9wZXJpb2Q7Ci0JCX0KLQotCQkvKiBubyBtb3JlIGRhdGEgKi8KLQkJaWYgKCEoaHdfdmFsdWUpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHNwYWNlKQotCQkJaHdfc2FtcGxlICo9IC0xOwotCi0JCS8qIG92ZXJmbG93IHNhbXBsZSByZWNpZXZlZCwgaGFuZGxlIGl0ICovCi0KLQkJaWYgKCFkZXYtPmZhbl9pbnB1dF9pbnVzZSAmJiBod192YWx1ZSA9PSBFTkVfU0FNUExFX09WRVJGTE9XKSB7Ci0KLQkJCWlmIChkZXYtPmlkbGUpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChkZXYtPnNhbXBsZSA+IDAgfHwgYWJzKGRldi0+c2FtcGxlKSA8PSBFTkVfTUFYR0FQKQotCQkJCXVwZGF0ZV9zYW1wbGUoZGV2LCBod19zYW1wbGUpOwotCQkJZWxzZQotCQkJCWVuZV9zZXRfaWRsZShkZXYsIDEpOwotCi0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIG5vcm1hbCBmaXJzdCBzYW1wbGUgcmVjaWV2ZWQgKi8KLQkJaWYgKCFkZXYtPmZhbl9pbnB1dF9pbnVzZSAmJiBkZXYtPmlkbGUpIHsKLQkJCWVuZV9zZXRfaWRsZShkZXYsIDApOwotCi0JCQkvKiBkaXNjYXJkIGZpcnN0IHJlY2lldmVkIHZhbHVlLCBpdHMgcmFuZG9tCi0JCQkgICBzaW5jZSBpdHMgdGhlIHRpbWUgc2lnbmFsIHdhcyBvZmYgYmVmb3JlCi0JCQkgICBmaXJzdCBwdWxzZSBpZiBpZGxlIG1vZGUgaXMgZW5hYmxlZCwgSFcKLQkJCSAgIGRvZXMgdGhhdCBmb3IgdXMgKi8KLQotCQkJaWYgKCFlbmFibGVfaWRsZSkKLQkJCQljb250aW51ZTsKLQkJfQotCQl1cGRhdGVfc2FtcGxlKGRldiwgaHdfc2FtcGxlKTsKLQkJc2VuZF9zYW1wbGUoZGV2KTsKLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IGVuZV9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldiwKLQkJICAgICBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBlbmVfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGxpcmNfZHJpdmVyICpsaXJjX2RyaXZlcjsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwotCi0JZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVuZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghZGV2KQotCQlnb3RvIGVycjE7Ci0KLQlkZXYtPnBucF9kZXYgPSBwbnBfZGV2OwotCXBucF9zZXRfZHJ2ZGF0YShwbnBfZGV2LCBkZXYpOwotCi0KLQkvKiBwcmVwYXJlIGxpcmMgaW50ZXJmYWNlICovCi0JZXJyb3IgPSAtRU5PTUVNOwotCWxpcmNfZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWxpcmNfZHJpdmVyKQotCQlnb3RvIGVycjI7Ci0KLQlkZXYtPmxpcmNfZHJpdmVyID0gbGlyY19kcml2ZXI7Ci0KLQlzdHJjcHkobGlyY19kcml2ZXItPm5hbWUsIEVORV9EUklWRVJfTkFNRSk7Ci0JbGlyY19kcml2ZXItPm1pbm9yID0gLTE7Ci0JbGlyY19kcml2ZXItPmNvZGVfbGVuZ3RoID0gc2l6ZW9mKGludCkgKiA4OwotCWxpcmNfZHJpdmVyLT5mZWF0dXJlcyA9IExJUkNfQ0FOX1JFQ19NT0RFMjsKLQlsaXJjX2RyaXZlci0+ZGF0YSA9IGRldjsKLQlsaXJjX2RyaXZlci0+c2V0X3VzZV9pbmMgPSBlbmVfaHdfaW5pdDsKLQlsaXJjX2RyaXZlci0+c2V0X3VzZV9kZWMgPSBlbmVfaHdfZGVpbml0OwotCWxpcmNfZHJpdmVyLT5kZXYgPSAmcG5wX2Rldi0+ZGV2OwotCWxpcmNfZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JbGlyY19kcml2ZXItPnJidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGlyY19idWZmZXIpLCBHRlBfS0VSTkVMKTsKLQotCWlmICghbGlyY19kcml2ZXItPnJidWYpCi0JCWdvdG8gZXJyMzsKLQotCWlmIChsaXJjX2J1ZmZlcl9pbml0KGxpcmNfZHJpdmVyLT5yYnVmLCBzaXplb2YoaW50KSwgc2l6ZW9mKGludCkgKiAyNTYpKQotCQlnb3RvIGVycjQ7Ci0KLQllcnJvciA9IC1FTk9ERVY7Ci0JaWYgKGxpcmNfcmVnaXN0ZXJfZHJpdmVyKGxpcmNfZHJpdmVyKSkKLQkJZ290byBlcnI1OwotCi0JLyogdmFsaWRhdGUgcmVzb3VyY2VzICovCi0JaWYgKCFwbnBfcG9ydF92YWxpZChwbnBfZGV2LCAwKSB8fAotCSAgICBwbnBfcG9ydF9sZW4ocG5wX2RldiwgMCkgPCBFTkVfTUFYX0lPKQotCQlnb3RvIGVycjY7Ci0KLQlpZiAoIXBucF9pcnFfdmFsaWQocG5wX2RldiwgMCkpCi0JCWdvdG8gZXJyNjsKLQotCWRldi0+aHdfaW8gPSBwbnBfcG9ydF9zdGFydChwbnBfZGV2LCAwKTsKLQlkZXYtPmlycSA9IHBucF9pcnEocG5wX2RldiwgMCk7Ci0KLQkvKiBjbGFpbSB0aGUgcmVzb3VyY2VzICovCi0JZXJyb3IgPSAtRUJVU1k7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmh3X2lvLCBFTkVfTUFYX0lPLCBFTkVfRFJJVkVSX05BTUUpKQotCQlnb3RvIGVycjY7Ci0KLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVuZV9od19pcnEsCi0JCQlJUlFGX1NIQVJFRCwgRU5FX0RSSVZFUl9OQU1FLCAodm9pZCAqKWRldikpCi0JCWdvdG8gZXJyNzsKLQotCS8qIGRldGVjdCBoYXJkd2FyZSB2ZXJzaW9uIGFuZCBmZWF0dXJlcyAqLwotCWVycm9yID0gZW5lX2h3X2RldGVjdChkZXYpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI4OwotCi0JZW5lX3ByaW50ayhLRVJOX05PVElDRSwgImRyaXZlciBoYXMgYmVlbiBzdWNjZXNmdWxseSBsb2FkZWRcbiIpOwotCXJldHVybiAwOwotCi1lcnI4OgotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotZXJyNzoKLQlyZWxlYXNlX3JlZ2lvbihkZXYtPmh3X2lvLCBFTkVfTUFYX0lPKTsKLWVycjY6Ci0JbGlyY191bnJlZ2lzdGVyX2RyaXZlcihsaXJjX2RyaXZlci0+bWlub3IpOwotZXJyNToKLQlsaXJjX2J1ZmZlcl9mcmVlKGxpcmNfZHJpdmVyLT5yYnVmKTsKLWVycjQ6Ci0Ja2ZyZWUobGlyY19kcml2ZXItPnJidWYpOwotZXJyMzoKLQlrZnJlZShsaXJjX2RyaXZlcik7Ci1lcnIyOgotCWtmcmVlKGRldik7Ci1lcnIxOgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHZvaWQgZW5lX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOwotCWVuZV9od19kZWluaXQoZGV2KTsKLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQlyZWxlYXNlX3JlZ2lvbihkZXYtPmh3X2lvLCBFTkVfTUFYX0lPKTsKLQlsaXJjX3VucmVnaXN0ZXJfZHJpdmVyKGRldi0+bGlyY19kcml2ZXItPm1pbm9yKTsKLQlsaXJjX2J1ZmZlcl9mcmVlKGRldi0+bGlyY19kcml2ZXItPnJidWYpOwotCWtmcmVlKGRldi0+bGlyY19kcml2ZXIpOwotCWtmcmVlKGRldik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotLyogVE9ETzogbWFrZSAnd2FrZSBvbiBJUicgY29uZmlndXJhYmxlIGFuZCBhZGQgLnNodXRkb3duICovCi0vKiBjdXJyZW50bHkgaW1wb3NzaWJsZSBkdWUgdG8gbGFjayBvZiBrZXJuZWwgc3VwcG9ydCAqLwotCi1zdGF0aWMgaW50IGVuZV9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwbnBfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGVuZV9kZXZpY2UgKmRldiA9IHBucF9nZXRfZHJ2ZGF0YShwbnBfZGV2KTsKLQllbmVfaHdfd3JpdGVfcmVnX21hc2soZGV2LCBFTkVfRlcxLCBFTkVfRlcxX1dBS0UsIEVORV9GVzFfV0FLRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZW5lX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcG5wX2RldikKLXsKLQlzdHJ1Y3QgZW5lX2RldmljZSAqZGV2ID0gcG5wX2dldF9kcnZkYXRhKHBucF9kZXYpOwotCWlmIChkZXYtPmluX3VzZSkKLQkJZW5lX2h3X2luaXQoZGV2KTsKLQotCWVuZV9od193cml0ZV9yZWdfbWFzayhkZXYsIEVORV9GVzEsIDAsIEVORV9GVzFfV0FLRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgZW5lX2lkc1tdID0gewotCXsuaWQgPSAiRU5FMDEwMCIsfSwKLQl7fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBlbmVfZHJpdmVyID0gewotCS5uYW1lID0gRU5FX0RSSVZFUl9OQU1FLAotCS5pZF90YWJsZSA9IGVuZV9pZHMsCi0JLmZsYWdzID0gUE5QX0RSSVZFUl9SRVNfRE9fTk9UX0NIQU5HRSwKLQotCS5wcm9iZSA9IGVuZV9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AoZW5lX3JlbW92ZSksCi0KLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9IGVuZV9zdXNwZW5kLAotCS5yZXN1bWUgPSBlbmVfcmVzdW1lLAotI2VuZGlmCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBlbmVfaW5pdCh2b2lkKQotewotCWlmIChzYW1wbGVfcGVyaW9kIDwgNSkgewotCQllbmVfcHJpbnRrKEtFUk5fRVJSLCAic2FtcGxlIHBlcmlvZCBtdXN0IGJlIGF0XG4iKTsKLQkJZW5lX3ByaW50ayhLRVJOX0VSUiwgImxlYXN0IDUgdXMsIChhdCBsZWFzdCAzMCByZWNvbW1lbmRlZClcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHBucF9yZWdpc3Rlcl9kcml2ZXIoJmVuZV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBlbmVfZXhpdCh2b2lkKQotewotCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmZW5lX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9wYXJhbShzYW1wbGVfcGVyaW9kLCBpbnQsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhzYW1wbGVfcGVyaW9kLCAiSGFyZHdhcmUgc2FtcGxlIHBlcmlvZCAoNzUgdXMgZGVmYXVsdCkiKTsKLQotbW9kdWxlX3BhcmFtKGVuYWJsZV9pZGxlLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9pZGxlLAotCSJFbmFibGVzIHR1cm5pbmcgb2ZmIHNpZ25hbCBzYW1wbGluZyBhZnRlciBsb25nIGluYWN0aXZpdHkgdGltZTsgIgotCSJpZiBkaXNhYmxlZCBtaWdodCBoZWxwIGRldGVjdGluZyBpbnB1dCBzaWduYWwgKGRlZmF1bHQ6IGVuYWJsZWQpIik7Ci0KLW1vZHVsZV9wYXJhbShlbmFibGVfbGVhcm5pbmcsIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfbGVhcm5pbmcsICJVc2Ugd2lkZSBiYW5kIChsZWFybmluZykgcmVjaWV2ZXIiKTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIGVuZV9pZHMpOwotTU9EVUxFX0RFU0NSSVBUSU9OCi0gICAgKCJMSVJDIGRyaXZlciBmb3IgS0IzOTI2Qi9LQjM5MjZDL0tCMzkyNkQgKGFrYSBFTkUwMTAwKSBDSVIgcG9ydCIpOwotTU9EVUxFX0FVVEhPUigiTWF4aW0gTGV2aXRza3kiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoZW5lX2luaXQpOwotbW9kdWxlX2V4aXQoZW5lX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19pdDg3LmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ODcuYwppbmRleCAwOWYzNjk2Li5lYzExYzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ODcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX2l0ODcuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaGFyZHdhcmVfbG9jayk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldl9sb2NrKTsKK3N0YXRpYyBib29sIGRldmljZV9vcGVuOwogCiBzdGF0aWMgaW50IHJ4X2J1ZltSQlVGX0xFTl07CiB1bnNpZ25lZCBpbnQgcnhfdGFpbCwgcnhfaGVhZDsKQEAgLTE0NywxMCArMTQ4LDExIEBACiBzdGF0aWMgaW50IGxpcmNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzcGluX2xvY2soJmRldl9sb2NrKTsKLQlpZiAobW9kdWxlX3JlZmNvdW50KFRISVNfTU9EVUxFKSkgeworCWlmIChkZXZpY2Vfb3BlbikgewogCQlzcGluX3VubG9jaygmZGV2X2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KKwlkZXZpY2Vfb3BlbiA9IHRydWU7CiAJc3Bpbl91bmxvY2soJmRldl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OCw2ICsxNjAsOSBAQAogCiBzdGF0aWMgaW50IGxpcmNfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CisJc3Bpbl9sb2NrKCZkZXZfbG9jayk7CisJZGV2aWNlX29wZW4gPSBmYWxzZTsKKwlzcGluX3VubG9jaygmZGV2X2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0zNjMsNyArMzY4LDYgQEAKIH07CiAKIAotI2lmZGVmIE1PRFVMRQogc3RhdGljIGludCBpbml0X2NocmRldih2b2lkKQogewogCWRyaXZlci5taW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwpAQCAtMzgwLDcgKzM4NCw2IEBACiB7CiAJbGlyY191bnJlZ2lzdGVyX2RyaXZlcihkcml2ZXIubWlub3IpOwogfQotI2VuZGlmCiAKIAogLyogU0VDVElPTjogSGFyZHdhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfcGFyYWxsZWwuYwppbmRleCBhMWViZDA3Li42ZGE0YThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3BhcmFsbGVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19wYXJhbGxlbC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAl1bnNpZ25lZCBpbnQgbGV2ZWwsIG5ld2xldmVsOwogCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCi0JaWYgKCFtb2R1bGVfcmVmY291bnQoVEhJU19NT0RVTEUpKQorCWlmICghaXNfb3BlbikKIAkJcmV0dXJuOwogCiAJaWYgKCFpc19jbGFpbWVkKQpAQCAtNTE1LDcgKzUxNSw3IEBACiAKIHN0YXRpYyBpbnQgbGlyY19vcGVuKHN0cnVjdCBpbm9kZSAqbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQogewotCWlmIChtb2R1bGVfcmVmY291bnQoVEhJU19NT0RVTEUpIHx8ICFsaXJjX2NsYWltKCkpCisJaWYgKGlzX29wZW4gfHwgIWxpcmNfY2xhaW0oKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXBhcnBvcnRfZW5hYmxlX2lycShwcG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3N0cmVhbXphcC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY19zdHJlYW16YXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwOWMxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3N0cmVhbXphcC5jCisrKyAvZGV2L251bGwKQEAgLTEsODIxICswLDAgQEAKLS8qCi0gKiBTdHJlYW16YXAgUmVtb3RlIENvbnRyb2wgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA1IENocmlzdG9waCBCYXJ0ZWxtdXMgPGxpcmNAYmFydGVsbXVzLmRlPgotICoKLSAqIFRoaXMgZHJpdmVyIHdhcyBiYXNlZCBvbiB0aGUgd29yayBvZiBHcmVnIFdpY2toYW0gYW5kIEFkcmlhbgotICogRGV3aHVyc3QuIEl0IHdhcyBzdWJzdGFudGlhbGx5IHJld3JpdHRlbiB0byBzdXBwb3J0IGNvcnJlY3Qgc2lnbmFsCi0gKiBnYXBzIGFuZCBub3cgbWFpbnRhaW5zIGEgZGVsYXkgYnVmZmVyLCB3aGljaCBpcyB1c2VkIHRvIHByZXNlbnQKLSAqIGNvbnNpc3RlbnQgdGltaW5nIGJlaGF2aW91ciB0byB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucy4gV2l0aG91dCB0aGUKLSAqIGRlbGF5IGJ1ZmZlciBhbiB1Z2x5IGhhY2sgd291bGQgYmUgcmVxdWlyZWQgaW4gbGlyY2QsIHdoaWNoIGNhbgotICogY2F1c2Ugc2x1Z2dpc2ggc2lnbmFsIGRlY29kaW5nIGluIGNlcnRhaW4gc2l0dWF0aW9ucy4KLSAqCi0gKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgVVNCIHNrZWxldG9uIGRyaXZlciBwYWNrYWdlZCB3aXRoIHRoZQotICoga2VybmVsOyBjb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jaW5jbHVkZSA8bWVkaWEvbGlyYy5oPgotI2luY2x1ZGUgPG1lZGlhL2xpcmNfZGV2Lmg+Ci0KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjEuMjgiCi0jZGVmaW5lIERSSVZFUl9OQU1FCSJsaXJjX3N0cmVhbXphcCIKLSNkZWZpbmUgRFJJVkVSX0RFU0MJIlN0cmVhbXphcCBSZW1vdGUgQ29udHJvbCBkcml2ZXIiCi0KLXN0YXRpYyBpbnQgZGVidWc7Ci0KLSNkZWZpbmUgVVNCX1NUUkVBTVpBUF9WRU5ET1JfSUQJCTB4MGU5YwotI2RlZmluZSBVU0JfU1RSRUFNWkFQX1BST0RVQ1RfSUQJMHgwMDAwCi0KLS8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLwotI2RlZmluZSBkcHJpbnRrKGZtdCwgYXJncy4uLikJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJaWYgKGRlYnVnKQkJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIlslZF06ICIJXAotCQkJICAgICAgIGZtdCAiXG4iLCAjIyBhcmdzKTsJCVwKLQl9IHdoaWxlICgwKQotCi0vKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc3RyZWFtemFwX3RhYmxlW10gPSB7Ci0JLyogU3RyZWFtemFwIFJlbW90ZSBDb250cm9sICovCi0JeyBVU0JfREVWSUNFKFVTQl9TVFJFQU1aQVBfVkVORE9SX0lELCBVU0JfU1RSRUFNWkFQX1BST0RVQ1RfSUQpIH0sCi0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzdHJlYW16YXBfdGFibGUpOwotCi0jZGVmaW5lIFNUUkVBTVpBUF9QVUxTRV9NQVNLIDB4ZjAKLSNkZWZpbmUgU1RSRUFNWkFQX1NQQUNFX01BU0sgMHgwZgotI2RlZmluZSBTVFJFQU1aQVBfVElNRU9VVCAgICAweGZmCi0jZGVmaW5lIFNUUkVBTVpBUF9SRVNPTFVUSU9OIDI1NgotCi0vKiBudW1iZXIgb2Ygc2FtcGxlcyBidWZmZXJlZCAqLwotI2RlZmluZSBTVFJFQU1aQVBfQlVGX0xFTiAxMjgKLQotZW51bSBTdHJlYW16YXBEZWNvZGVyU3RhdGUgewotCVB1bHNlU3BhY2UsCi0JRnVsbFB1bHNlLAotCUZ1bGxTcGFjZSwKLQlJZ25vcmVQdWxzZQotfTsKLQotLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYKLSAqCi0gKiBzb21lIHJlbWFya3MgcmVnYXJkaW5nIGxvY2tpbmc6Ci0gKiB0aGVvcmV0aWNhbGx5IHRoaXMgc3RydWN0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRocmVlIHRocmVhZHM6Ci0gKgotICogLSBmcm9tIGxpcmNfZGV2IHRocm91Z2ggc2V0X3VzZV9pbmMvc2V0X3VzZV9kZWMKLSAqCi0gKiAtIGZyb20gdGhlIFVTQiBsYXllciB0aHJvdWggcHJvYmUvZGlzY29ubmVjdC9pcnEKLSAqCi0gKiAgIENhcmVmdWwgcGxhY2VtZW50IG9mIGxpcmNfcmVnaXN0ZXJfZHJpdmVyL2xpcmNfdW5yZWdpc3Rlcl9kcml2ZXIKLSAqICAgY2FsbHMgd2lsbCBwcmV2ZW50IGNvbmZsaWN0cy4gbGlyY19kZXYgbWFrZXMgc3VyZSB0aGF0Ci0gKiAgIHNldF91c2VfaW5jL3NldF91c2VfZGVjIGFyZSBub3QgYmVpbmcgZXhlY3V0ZWQgYW5kIHdpbGwgbm90IGJlCi0gKiAgIGNhbGxlZCBhZnRlciBsaXJjX3VucmVnaXN0ZXJfZHJpdmVyIHJldHVybnMuCi0gKgotICogLSBieSB0aGUgdGltZXIgY2FsbGJhY2sKLSAqCi0gKiAgIFRoZSB0aW1lciBpcyBvbmx5IHJ1bm5pbmcgd2hlbiB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCBhbmQgdGhlCi0gKiAgIExJUkMgZGV2aWNlIGlzIG9wZW4uIE1ha2luZyBzdXJlIHRoZSB0aW1lciBpcyBkZWxldGVkIGJ5Ci0gKiAgIHNldF91c2VfZGVjIHdpbGwgbWFrZSBjb25mbGljdHMgaW1wb3NzaWJsZS4KLSAqLwotc3RydWN0IHVzYl9zdHJlYW16YXAgewotCi0JLyogdXNiICovCi0JLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLwotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwotCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKLQotCS8qIGJ1ZmZlciAmIGRtYSAqLwotCXVuc2lnbmVkIGNoYXIJCSpidWZfaW47Ci0JZG1hX2FkZHJfdAkJZG1hX2luOwotCXVuc2lnbmVkIGludAkJYnVmX2luX2xlbjsKLQotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7Ci0KLQkvKiBJUlEgKi8KLQlzdHJ1Y3QgdXJiCQkqdXJiX2luOwotCi0JLyogbGlyYyAqLwotCXN0cnVjdCBsaXJjX2RyaXZlcgkqZHJpdmVyOwotCXN0cnVjdCBsaXJjX2J1ZmZlcgkqZGVsYXlfYnVmOwotCi0JLyogdGltZXIgdXNlZCB0byBzdXBwb3J0IGRlbGF5IGJ1ZmZlcmluZyAqLwotCXN0cnVjdCB0aW1lcl9saXN0CWRlbGF5X3RpbWVyOwotCWludAkJCXRpbWVyX3J1bm5pbmc7Ci0Jc3BpbmxvY2tfdAkJdGltZXJfbG9jazsKLQotCS8qIHRyYWNrcyB3aGV0aGVyIHdlIGFyZSBjdXJyZW50bHkgcmVjZWl2aW5nIHNvbWUgc2lnbmFsICovCi0JaW50CQkJaWRsZTsKLQkvKiBzdW0gb2Ygc2lnbmFsIGxlbmd0aHMgcmVjZWl2ZWQgc2luY2Ugc2lnbmFsIHN0YXJ0ICovCi0JdW5zaWduZWQgbG9uZwkJc3VtOwotCS8qIHN0YXJ0IHRpbWUgb2Ygc2lnbmFsOyBuZWNlc3NhcnkgZm9yIGdhcCB0cmFja2luZyAqLwotCXN0cnVjdCB0aW1ldmFsCQlzaWduYWxfbGFzdDsKLQlzdHJ1Y3QgdGltZXZhbAkJc2lnbmFsX3N0YXJ0OwotCWVudW0gU3RyZWFtemFwRGVjb2RlclN0YXRlIGRlY29kZXJfc3RhdGU7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJZmx1c2hfdGltZXI7Ci0JaW50CQkJZmx1c2g7Ci0JaW50CQkJaW5fdXNlOwotCWludAkJCXRpbWVvdXRfZW5hYmxlZDsKLX07Ci0KLQotLyogbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwotc3RhdGljIGludCBzdHJlYW16YXBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgdm9pZCBzdHJlYW16YXBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLXN0YXRpYyB2b2lkIHVzYl9zdHJlYW16YXBfaXJxKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgaW50IHN0cmVhbXphcF91c2VfaW5jKHZvaWQgKmRhdGEpOwotc3RhdGljIHZvaWQgc3RyZWFtemFwX3VzZV9kZWModm9pZCAqZGF0YSk7Ci1zdGF0aWMgbG9uZyBzdHJlYW16YXBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKLXN0YXRpYyBpbnQgc3RyZWFtemFwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci0KLS8qIHVzYiBzcGVjaWZpYyBvYmplY3QgbmVlZGVkIHRvIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIHVzYiBzdWJzeXN0ZW0gKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHN0cmVhbXphcF9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJRFJJVkVSX05BTUUsCi0JLnByb2JlID0Jc3RyZWFtemFwX3Byb2JlLAotCS5kaXNjb25uZWN0ID0Jc3RyZWFtemFwX2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQgPQlzdHJlYW16YXBfc3VzcGVuZCwKLQkucmVzdW1lID0Jc3RyZWFtemFwX3Jlc3VtZSwKLQkuaWRfdGFibGUgPQlzdHJlYW16YXBfdGFibGUsCi19OwotCi1zdGF0aWMgdm9pZCBzdG9wX3RpbWVyKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN6LT50aW1lcl9sb2NrLCBmbGFncyk7Ci0JaWYgKHN6LT50aW1lcl9ydW5uaW5nKSB7Ci0JCXN6LT50aW1lcl9ydW5uaW5nID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKLQkJZGVsX3RpbWVyX3N5bmMoJnN6LT5kZWxheV90aW1lcik7Ci0JfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3otPnRpbWVyX2xvY2ssIGZsYWdzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGZsdXNoX3RpbWVvdXQodW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6ID0gKHN0cnVjdCB1c2Jfc3RyZWFtemFwICopIGFyZzsKLQotCS8qIGZpbmFsbHkgc3RhcnQgYWNjZXB0aW5nIGRhdGEgKi8KLQlzei0+Zmx1c2ggPSAwOwotfQotc3RhdGljIHZvaWQgZGVsYXlfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8qIGRlbGl2ZXIgZGF0YSBldmVyeSAxMCBtcyAqLwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2luYyA9Ci0JCSgxMDAwMC8oMTAwMDAwMC9IWikpID09IDAgPyAxIDogKDEwMDAwLygxMDAwMDAwL0haKSk7Ci0Jc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6ID0gKHN0cnVjdCB1c2Jfc3RyZWFtemFwICopIGFyZzsKLQlpbnQgZGF0YTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFsaXJjX2J1ZmZlcl9lbXB0eShzei0+ZGVsYXlfYnVmKSAmJgotCSAgICAhbGlyY19idWZmZXJfZnVsbChzei0+ZHJpdmVyLT5yYnVmKSkgewotCQlsaXJjX2J1ZmZlcl9yZWFkKHN6LT5kZWxheV9idWYsICh1bnNpZ25lZCBjaGFyICopICZkYXRhKTsKLQkJbGlyY19idWZmZXJfd3JpdGUoc3otPmRyaXZlci0+cmJ1ZiwgKHVuc2lnbmVkIGNoYXIgKikgJmRhdGEpOwotCX0KLQlpZiAoIWxpcmNfYnVmZmVyX2VtcHR5KHN6LT5kZWxheV9idWYpKSB7Ci0JCXdoaWxlIChsaXJjX2J1ZmZlcl9hdmFpbGFibGUoc3otPmRlbGF5X2J1ZikgPAotCQkgICAgICAgU1RSRUFNWkFQX0JVRl9MRU4gLyAyICYmCi0JCSAgICAgICAhbGlyY19idWZmZXJfZnVsbChzei0+ZHJpdmVyLT5yYnVmKSkgewotCQkJbGlyY19idWZmZXJfcmVhZChzei0+ZGVsYXlfYnVmLAotCQkJCQkgICAodW5zaWduZWQgY2hhciAqKSAmZGF0YSk7Ci0JCQlsaXJjX2J1ZmZlcl93cml0ZShzei0+ZHJpdmVyLT5yYnVmLAotCQkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgJmRhdGEpOwotCQl9Ci0JCWlmIChzei0+dGltZXJfcnVubmluZykgewotCQkJc3otPmRlbGF5X3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZXJfaW5jOwotCQkJYWRkX3RpbWVyKCZzei0+ZGVsYXlfdGltZXIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3otPnRpbWVyX3J1bm5pbmcgPSAwOwotCX0KLQotCWlmICghbGlyY19idWZmZXJfZW1wdHkoc3otPmRyaXZlci0+cmJ1ZikpCi0JCXdha2VfdXAoJnN6LT5kcml2ZXItPnJidWYtPndhaXRfcG9sbCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBmbHVzaF9kZWxheV9idWZmZXIoc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6KQotewotCWludCBkYXRhOwotCWludCBlbXB0eSA9IDE7Ci0KLQl3aGlsZSAoIWxpcmNfYnVmZmVyX2VtcHR5KHN6LT5kZWxheV9idWYpKSB7Ci0JCWVtcHR5ID0gMDsKLQkJbGlyY19idWZmZXJfcmVhZChzei0+ZGVsYXlfYnVmLCAodW5zaWduZWQgY2hhciAqKSAmZGF0YSk7Ci0JCWlmICghbGlyY19idWZmZXJfZnVsbChzei0+ZHJpdmVyLT5yYnVmKSkgewotCQkJbGlyY19idWZmZXJfd3JpdGUoc3otPmRyaXZlci0+cmJ1ZiwKLQkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopICZkYXRhKTsKLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoImJ1ZmZlciBvdmVyZmxvdyIsIHN6LT5kcml2ZXItPm1pbm9yKTsKLQkJfQotCX0KLQlpZiAoIWVtcHR5KQotCQl3YWtlX3VwKCZzei0+ZHJpdmVyLT5yYnVmLT53YWl0X3BvbGwpOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiwgdW5zaWduZWQgY2hhciAqZGF0YSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN6LT50aW1lcl9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpcmNfYnVmZmVyX2Z1bGwoc3otPmRlbGF5X2J1ZikpIHsKLQkJaW50IHJlYWRfZGF0YTsKLQotCQlsaXJjX2J1ZmZlcl9yZWFkKHN6LT5kZWxheV9idWYsCi0JCQkJICAgKHVuc2lnbmVkIGNoYXIgKikgJnJlYWRfZGF0YSk7Ci0JCWlmICghbGlyY19idWZmZXJfZnVsbChzei0+ZHJpdmVyLT5yYnVmKSkgewotCQkJbGlyY19idWZmZXJfd3JpdGUoc3otPmRyaXZlci0+cmJ1ZiwKLQkJCQkJICAgICh1bnNpZ25lZCBjaGFyICopICZyZWFkX2RhdGEpOwotCQl9IGVsc2UgewotCQkJZHByaW50aygiYnVmZmVyIG92ZXJmbG93Iiwgc3otPmRyaXZlci0+bWlub3IpOwotCQl9Ci0JfQotCi0JbGlyY19idWZmZXJfd3JpdGUoc3otPmRlbGF5X2J1ZiwgZGF0YSk7Ci0KLQlpZiAoIXN6LT50aW1lcl9ydW5uaW5nKSB7Ci0JCXN6LT5kZWxheV90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaLzEwOwotCQlhZGRfdGltZXIoJnN6LT5kZWxheV90aW1lcik7Ci0JCXN6LT50aW1lcl9ydW5uaW5nID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzei0+dGltZXJfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoX2Z1bGxfcHVsc2Uoc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JaW50IHB1bHNlOwotCi0JaWYgKHN6LT5pZGxlKSB7Ci0JCWxvbmcgZGVsdHY7Ci0JCWludCB0bXA7Ci0KLQkJc3otPnNpZ25hbF9sYXN0ID0gc3otPnNpZ25hbF9zdGFydDsKLQkJZG9fZ2V0dGltZW9mZGF5KCZzei0+c2lnbmFsX3N0YXJ0KTsKLQotCQlkZWx0diA9IHN6LT5zaWduYWxfc3RhcnQudHZfc2VjLXN6LT5zaWduYWxfbGFzdC50dl9zZWM7Ci0JCWlmIChkZWx0diA+IDE1KSB7Ci0JCQkvKiByZWFsbHkgbG9uZyB0aW1lICovCi0JCQl0bXAgPSBMSVJDX1NQQUNFKExJUkNfVkFMVUVfTUFTSyk7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSAoaW50KSAoZGVsdHYqMTAwMDAwMCsKLQkJCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KLQkJCQkJc3otPnNpZ25hbF9sYXN0LnR2X3VzZWMpOwotCQkJdG1wIC09IHN6LT5zdW07Ci0JCQl0bXAgPSBMSVJDX1NQQUNFKHRtcCk7Ci0JCX0KLQkJZHByaW50aygibHMgJXUiLCBzei0+ZHJpdmVyLT5taW5vciwgdG1wKTsKLQkJcHVzaChzeiwgKGNoYXIgKikmdG1wKTsKLQotCQlzei0+aWRsZSA9IDA7Ci0JCXN6LT5zdW0gPSAwOwotCX0KLQotCXB1bHNlID0gKChpbnQpIHZhbHVlKSAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OOwotCXB1bHNlICs9IFNUUkVBTVpBUF9SRVNPTFVUSU9OIC8gMjsKLQlzei0+c3VtICs9IHB1bHNlOwotCXB1bHNlID0gTElSQ19QVUxTRShwdWxzZSk7Ci0KLQlkcHJpbnRrKCJwICV1Iiwgc3otPmRyaXZlci0+bWlub3IsIHB1bHNlICYgUFVMU0VfTUFTSyk7Ci0JcHVzaChzeiwgKGNoYXIgKikmcHVsc2UpOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoX2hhbGZfcHVsc2Uoc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JcHVzaF9mdWxsX3B1bHNlKHN6LCAodmFsdWUgJiBTVFJFQU1aQVBfUFVMU0VfTUFTSyk+PjQpOwotfQotCi1zdGF0aWMgdm9pZCBwdXNoX2Z1bGxfc3BhY2Uoc3RydWN0IHVzYl9zdHJlYW16YXAgKnN6LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCi17Ci0JaW50IHNwYWNlOwotCi0Jc3BhY2UgPSAoKGludCkgdmFsdWUpKlNUUkVBTVpBUF9SRVNPTFVUSU9OOwotCXNwYWNlICs9IFNUUkVBTVpBUF9SRVNPTFVUSU9OLzI7Ci0Jc3otPnN1bSArPSBzcGFjZTsKLQlzcGFjZSA9IExJUkNfU1BBQ0Uoc3BhY2UpOwotCWRwcmludGsoInMgJXUiLCBzei0+ZHJpdmVyLT5taW5vciwgc3BhY2UpOwotCXB1c2goc3osIChjaGFyICopJnNwYWNlKTsKLX0KLQotc3RhdGljIHZvaWQgcHVzaF9oYWxmX3NwYWNlKHN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiwKLQkJCSAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQotewotCXB1c2hfZnVsbF9zcGFjZShzeiwgdmFsdWUgJiBTVFJFQU1aQVBfU1BBQ0VfTUFTSyk7Ci19Ci0KLS8qKgotICogdXNiX3N0cmVhbXphcF9pcnEgLSBJUlEgaGFuZGxlcgotICoKLSAqIFRoaXMgcHJvY2VkdXJlIGlzIGludm9rZWQgb24gcmVjZXB0aW9uIG9mIGRhdGEgZnJvbQotICogdGhlIHVzYiByZW1vdGUuCi0gKi8KLXN0YXRpYyB2b2lkIHVzYl9zdHJlYW16YXBfaXJxKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3o7Ci0JaW50CQlsZW47Ci0JdW5zaWduZWQgaW50CWkgPSAwOwotCi0JaWYgKCF1cmIpCi0JCXJldHVybjsKLQotCXN6ID0gdXJiLT5jb250ZXh0OwotCWxlbiA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qCi0JCSAqIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwLgotCQkgKiBzeiBtaWdodCBhbHJlYWR5IGJlIGludmFsaWQgYXQgdGhpcyBwb2ludAotCQkgKi8KLQkJZHByaW50aygidXJiIHN0YXR1czogJWQiLCAtMSwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JZHByaW50aygicmVjZWl2ZWQgJWQiLCBzei0+ZHJpdmVyLT5taW5vciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQlpZiAoIXN6LT5mbHVzaCkgewotCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpKyspIHsKLQkJCWRwcmludGsoIiVkOiAleCIsIHN6LT5kcml2ZXItPm1pbm9yLAotCQkJCWksICh1bnNpZ25lZCBjaGFyKSBzei0+YnVmX2luW2ldKTsKLQkJCXN3aXRjaCAoc3otPmRlY29kZXJfc3RhdGUpIHsKLQkJCWNhc2UgUHVsc2VTcGFjZToKLQkJCQlpZiAoKHN6LT5idWZfaW5baV0mU1RSRUFNWkFQX1BVTFNFX01BU0spID09Ci0JCQkJICAgIFNUUkVBTVpBUF9QVUxTRV9NQVNLKSB7Ci0JCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gRnVsbFB1bHNlOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgaWYgKChzei0+YnVmX2luW2ldJlNUUkVBTVpBUF9TUEFDRV9NQVNLKQotCQkJCQkgICA9PSBTVFJFQU1aQVBfU1BBQ0VfTUFTSykgewotCQkJCQlwdXNoX2hhbGZfcHVsc2Uoc3osIHN6LT5idWZfaW5baV0pOwotCQkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IEZ1bGxTcGFjZTsKLQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHVzaF9oYWxmX3B1bHNlKHN6LCBzei0+YnVmX2luW2ldKTsKLQkJCQkJcHVzaF9oYWxmX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZ1bGxQdWxzZToKLQkJCQlwdXNoX2Z1bGxfcHVsc2Uoc3osIHN6LT5idWZfaW5baV0pOwotCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gSWdub3JlUHVsc2U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZ1bGxTcGFjZToKLQkJCQlpZiAoc3otPmJ1Zl9pbltpXSA9PSBTVFJFQU1aQVBfVElNRU9VVCkgewotCQkJCQlzei0+aWRsZSA9IDE7Ci0JCQkJCXN0b3BfdGltZXIoc3opOwotCQkJCQlpZiAoc3otPnRpbWVvdXRfZW5hYmxlZCkgewotCQkJCQkJaW50IHRpbWVvdXQgPQotCQkJCQkJCUxJUkNfVElNRU9VVAotCQkJCQkJCShTVFJFQU1aQVBfVElNRU9VVCAqCi0JCQkJCQkJU1RSRUFNWkFQX1JFU09MVVRJT04pOwotCQkJCQkJcHVzaChzeiwgKGNoYXIgKikmdGltZW91dCk7Ci0JCQkJCX0KLQkJCQkJZmx1c2hfZGVsYXlfYnVmZmVyKHN6KTsKLQkJCQl9IGVsc2UKLQkJCQkJcHVzaF9mdWxsX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKLQkJCQlzei0+ZGVjb2Rlcl9zdGF0ZSA9IFB1bHNlU3BhY2U7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIElnbm9yZVB1bHNlOgotCQkJCWlmICgoc3otPmJ1Zl9pbltpXSZTVFJFQU1aQVBfU1BBQ0VfTUFTSykgPT0KLQkJCQkgICAgU1RSRUFNWkFQX1NQQUNFX01BU0spIHsKLQkJCQkJc3otPmRlY29kZXJfc3RhdGUgPSBGdWxsU3BhY2U7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlwdXNoX2hhbGZfc3BhY2Uoc3osIHN6LT5idWZfaW5baV0pOwotCQkJCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0cmVhbXphcF9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkudW5sb2NrZWRfaW9jdGwJPSBzdHJlYW16YXBfaW9jdGwsCi0JLnJlYWQJCT0gbGlyY19kZXZfZm9wX3JlYWQsCi0JLndyaXRlCQk9IGxpcmNfZGV2X2ZvcF93cml0ZSwKLQkucG9sbAkJPSBsaXJjX2Rldl9mb3BfcG9sbCwKLQkub3BlbgkJPSBsaXJjX2Rldl9mb3Bfb3BlbiwKLQkucmVsZWFzZQk9IGxpcmNfZGV2X2ZvcF9jbG9zZSwKLX07Ci0KLQotLyoqCi0gKglzdHJlYW16YXBfcHJvYmUKLSAqCi0gKglDYWxsZWQgYnkgdXNiLWNvcmUgdG8gYXNzb2NpYXRlZCB3aXRoIGEgY2FuZGlkYXRlIGRldmljZQotICoJT24gYW55IGZhaWx1cmUgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgRVJST1IKLSAqCU9uIHN1Y2Nlc3MgcmV0dXJuIDAKLSAqLwotc3RhdGljIGludCBzdHJlYW16YXBfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKLQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9ob3N0OwotCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzejsKLQlzdHJ1Y3QgbGlyY19kcml2ZXIgKmRyaXZlcjsKLQlzdHJ1Y3QgbGlyY19idWZmZXIgKmxpcmNfYnVmOwotCXN0cnVjdCBsaXJjX2J1ZmZlciAqZGVsYXlfYnVmOwotCWNoYXIgYnVmWzYzXSwgbmFtZVsxMjhdID0gIiI7Ci0JaW50IHJldHZhbCA9IC1FTk9NRU07Ci0JaW50IG1pbm9yID0gMDsKLQotCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KLQlzeiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc3RyZWFtemFwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN6ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3otPnVkZXYgPSB1ZGV2OwotCXN6LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0KLQkvKiBDaGVjayB0byBlbnN1cmUgZW5kcG9pbnQgaW5mb3JtYXRpb24gbWF0Y2hlcyByZXF1aXJlbWVudHMgKi8KLQlpZmFjZV9ob3N0ID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKLQotCWlmIChpZmFjZV9ob3N0LT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkgewotCQllcnIoIiVzOiBVbmV4cGVjdGVkIGRlc2MuYk51bUVuZHBvaW50cyAoJWQpIiwgX19mdW5jX18sCi0JCSAgICBpZmFjZV9ob3N0LT5kZXNjLmJOdW1FbmRwb2ludHMpOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfc3o7Ci0JfQotCi0Jc3otPmVuZHBvaW50ID0gJihpZmFjZV9ob3N0LT5lbmRwb2ludFswXS5kZXNjKTsKLQlpZiAoKHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKLQkgICAgIT0gVVNCX0RJUl9JTikgewotCQllcnIoIiVzOiBlbmRwb2ludCBkb2Vzbid0IG1hdGNoIGlucHV0IGRldmljZSAwMiUwMngiLAotCQkgICAgX19mdW5jX18sIHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9zejsKLQl9Ci0KLQlpZiAoKHN6LT5lbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JICAgICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgewotCQllcnIoIiVzOiBlbmRwb2ludCBhdHRyaWJ1dGVzIGRvbid0IG1hdGNoIHhmZXIgMDIlMDJ4IiwKLQkJICAgIF9fZnVuY19fLCBzei0+ZW5kcG9pbnQtPmJtQXR0cmlidXRlcyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9zejsKLQl9Ci0KLQlpZiAoc3otPmVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSA9PSAwKSB7Ci0JCWVycigiJXM6IGVuZHBvaW50IG1lc3NhZ2Ugc2l6ZT09MD8gIiwgX19mdW5jX18pOwotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfc3o7Ci0JfQotCi0JLyogQWxsb2NhdGUgdGhlIFVTQiBidWZmZXIgYW5kIElSUSBVUkIgKi8KLQotCXN6LT5idWZfaW5fbGVuID0gc3otPmVuZHBvaW50LT53TWF4UGFja2V0U2l6ZTsKLQlzei0+YnVmX2luID0gdXNiX2FsbG9jX2NvaGVyZW50KHN6LT51ZGV2LCBzei0+YnVmX2luX2xlbiwKLQkJCQkgICAgICBHRlBfQVRPTUlDLCAmc3otPmRtYV9pbik7Ci0JaWYgKHN6LT5idWZfaW4gPT0gTlVMTCkKLQkJZ290byBmcmVlX3N6OwotCi0Jc3otPnVyYl9pbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHN6LT51cmJfaW4gPT0gTlVMTCkKLQkJZ290byBmcmVlX3N6OwotCi0JLyogQ29ubmVjdCB0aGlzIGRldmljZSB0byB0aGUgTElSQyBzdWItc3lzdGVtICovCi0JZHJpdmVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkcml2ZXIpCi0JCWdvdG8gZnJlZV9zejsKLQotCWxpcmNfYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpcmNfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFsaXJjX2J1ZikKLQkJZ290byBmcmVlX2RyaXZlcjsKLQlpZiAobGlyY19idWZmZXJfaW5pdChsaXJjX2J1Ziwgc2l6ZW9mKGludCksIFNUUkVBTVpBUF9CVUZfTEVOKSkKLQkJZ290byBrZnJlZV9saXJjX2J1ZjsKLQotCWRlbGF5X2J1ZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXJjX2J1ZmZlciksIEdGUF9LRVJORUwpOwotCWlmICghZGVsYXlfYnVmKQotCQlnb3RvIGZyZWVfbGlyY19idWY7Ci0JaWYgKGxpcmNfYnVmZmVyX2luaXQoZGVsYXlfYnVmLCBzaXplb2YoaW50KSwgU1RSRUFNWkFQX0JVRl9MRU4pKQotCQlnb3RvIGtmcmVlX2RlbGF5X2J1ZjsKLQotCXN6LT5kcml2ZXIgPSBkcml2ZXI7Ci0Jc3RyY3B5KHN6LT5kcml2ZXItPm5hbWUsIERSSVZFUl9OQU1FKTsKLQlzei0+ZHJpdmVyLT5taW5vciA9IC0xOwotCXN6LT5kcml2ZXItPnNhbXBsZV9yYXRlID0gMDsKLQlzei0+ZHJpdmVyLT5jb2RlX2xlbmd0aCA9IHNpemVvZihpbnQpICogODsKLQlzei0+ZHJpdmVyLT5mZWF0dXJlcyA9IExJUkNfQ0FOX1JFQ19NT0RFMiB8Ci0JCUxJUkNfQ0FOX0dFVF9SRUNfUkVTT0xVVElPTiB8Ci0JCUxJUkNfQ0FOX1NFVF9SRUNfVElNRU9VVDsKLQlzei0+ZHJpdmVyLT5kYXRhID0gc3o7Ci0Jc3otPmRyaXZlci0+bWluX3RpbWVvdXQgPSBTVFJFQU1aQVBfVElNRU9VVCAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OOwotCXN6LT5kcml2ZXItPm1heF90aW1lb3V0ID0gU1RSRUFNWkFQX1RJTUVPVVQgKiBTVFJFQU1aQVBfUkVTT0xVVElPTjsKLQlzei0+ZHJpdmVyLT5yYnVmID0gbGlyY19idWY7Ci0Jc3otPmRlbGF5X2J1ZiA9IGRlbGF5X2J1ZjsKLQlzei0+ZHJpdmVyLT5zZXRfdXNlX2luYyA9ICZzdHJlYW16YXBfdXNlX2luYzsKLQlzei0+ZHJpdmVyLT5zZXRfdXNlX2RlYyA9ICZzdHJlYW16YXBfdXNlX2RlYzsKLQlzei0+ZHJpdmVyLT5mb3BzID0gJnN0cmVhbXphcF9mb3BzOwotCXN6LT5kcml2ZXItPmRldiA9ICZpbnRlcmZhY2UtPmRldjsKLQlzei0+ZHJpdmVyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCi0Jc3otPmlkbGUgPSAxOwotCXN6LT5kZWNvZGVyX3N0YXRlID0gUHVsc2VTcGFjZTsKLQlpbml0X3RpbWVyKCZzei0+ZGVsYXlfdGltZXIpOwotCXN6LT5kZWxheV90aW1lci5mdW5jdGlvbiA9IGRlbGF5X3RpbWVvdXQ7Ci0Jc3otPmRlbGF5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc3o7Ci0Jc3otPnRpbWVyX3J1bm5pbmcgPSAwOwotCXNwaW5fbG9ja19pbml0KCZzei0+dGltZXJfbG9jayk7Ci0KLQlpbml0X3RpbWVyKCZzei0+Zmx1c2hfdGltZXIpOwotCXN6LT5mbHVzaF90aW1lci5mdW5jdGlvbiA9IGZsdXNoX3RpbWVvdXQ7Ci0Jc3otPmZsdXNoX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgc3o7Ci0JLyogQ29tcGxldGUgZmluYWwgaW5pdGlhbGlzYXRpb25zICovCi0KLQl1c2JfZmlsbF9pbnRfdXJiKHN6LT51cmJfaW4sIHVkZXYsCi0JCXVzYl9yY3ZpbnRwaXBlKHVkZXYsIHN6LT5lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCXN6LT5idWZfaW4sIHN6LT5idWZfaW5fbGVuLCB1c2Jfc3RyZWFtemFwX2lycSwgc3osCi0JCXN6LT5lbmRwb2ludC0+YkludGVydmFsKTsKLQlzei0+dXJiX2luLT50cmFuc2Zlcl9kbWEgPSBzei0+ZG1hX2luOwotCXN6LT51cmJfaW4tPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JaWYgKHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlcgotCSAgICAmJiB1c2Jfc3RyaW5nKHVkZXYsIHVkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKLQkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQotCQlzdHJsY3B5KG5hbWUsIGJ1Ziwgc2l6ZW9mKG5hbWUpKTsKLQotCWlmICh1ZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0Ci0JICAgICYmIHVzYl9zdHJpbmcodWRldiwgdWRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKLQkJCSAgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQotCQlzbnByaW50ZihuYW1lICsgc3RybGVuKG5hbWUpLCBzaXplb2YobmFtZSkgLSBzdHJsZW4obmFtZSksCi0JCQkgIiAlcyIsIGJ1Zik7Ci0KLQltaW5vciA9IGxpcmNfcmVnaXN0ZXJfZHJpdmVyKGRyaXZlcik7Ci0KLQlpZiAobWlub3IgPCAwKQotCQlnb3RvIGZyZWVfZGVsYXlfYnVmOwotCi0Jc3otPmRyaXZlci0+bWlub3IgPSBtaW5vcjsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBzeik7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJbJWRdOiAlcyBvbiB1c2IlZDolZCBhdHRhY2hlZFxuIiwKLQkgICAgICAgc3otPmRyaXZlci0+bWlub3IsIG5hbWUsCi0JICAgICAgIHVkZXYtPmJ1cy0+YnVzbnVtLCBzei0+dWRldi0+ZGV2bnVtKTsKLQotCXJldHVybiAwOwotCi1mcmVlX2RlbGF5X2J1ZjoKLQlsaXJjX2J1ZmZlcl9mcmVlKHN6LT5kZWxheV9idWYpOwota2ZyZWVfZGVsYXlfYnVmOgotCWtmcmVlKGRlbGF5X2J1Zik7Ci1mcmVlX2xpcmNfYnVmOgotCWxpcmNfYnVmZmVyX2ZyZWUoc3otPmRyaXZlci0+cmJ1Zik7Ci1rZnJlZV9saXJjX2J1ZjoKLQlrZnJlZShsaXJjX2J1Zik7Ci1mcmVlX2RyaXZlcjoKLQlrZnJlZShkcml2ZXIpOwotZnJlZV9zejoKLQlpZiAocmV0dmFsID09IC1FTk9NRU0pCi0JCWVycigiT3V0IG9mIG1lbW9yeSIpOwotCi0JaWYgKHN6KSB7Ci0JCXVzYl9mcmVlX3VyYihzei0+dXJiX2luKTsKLQkJdXNiX2ZyZWVfY29oZXJlbnQodWRldiwgc3otPmJ1Zl9pbl9sZW4sIHN6LT5idWZfaW4sIHN6LT5kbWFfaW4pOwotCQlrZnJlZShzeik7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBzdHJlYW16YXBfdXNlX2luYyh2b2lkICpkYXRhKQotewotCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiA9IGRhdGE7Ci0KLQlpZiAoIXN6KSB7Ci0JCWRwcmludGsoIiVzIGNhbGxlZCB3aXRoIG5vIGNvbnRleHQiLCAtMSwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZHByaW50aygic2V0IHVzZSBpbmMiLCBzei0+ZHJpdmVyLT5taW5vcik7Ci0KLQlsaXJjX2J1ZmZlcl9jbGVhcihzei0+ZHJpdmVyLT5yYnVmKTsKLQlsaXJjX2J1ZmZlcl9jbGVhcihzei0+ZGVsYXlfYnVmKTsKLQotCXN6LT5mbHVzaF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwotCXN6LT5mbHVzaCA9IDE7Ci0JYWRkX3RpbWVyKCZzei0+Zmx1c2hfdGltZXIpOwotCi0Jc3otPnVyYl9pbi0+ZGV2ID0gc3otPnVkZXY7Ci0JaWYgKHVzYl9zdWJtaXRfdXJiKHN6LT51cmJfaW4sIEdGUF9BVE9NSUMpKSB7Ci0JCWRwcmludGsoIm9wZW4gcmVzdWx0ID0gLUVJTyBlcnJvciBzdWJtaXR0aW5nIHVyYiIsCi0JCQlzei0+ZHJpdmVyLT5taW5vcik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlzei0+aW5fdXNlKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RyZWFtemFwX3VzZV9kZWModm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3ogPSBkYXRhOwotCi0JaWYgKCFzeikgewotCQlkcHJpbnRrKCIlcyBjYWxsZWQgd2l0aCBubyBjb250ZXh0IiwgLTEsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQlkcHJpbnRrKCJzZXQgdXNlIGRlYyIsIHN6LT5kcml2ZXItPm1pbm9yKTsKLQotCWlmIChzei0+Zmx1c2gpIHsKLQkJc3otPmZsdXNoID0gMDsKLQkJZGVsX3RpbWVyX3N5bmMoJnN6LT5mbHVzaF90aW1lcik7Ci0JfQotCi0JdXNiX2tpbGxfdXJiKHN6LT51cmJfaW4pOwotCi0Jc3RvcF90aW1lcihzeik7Ci0KLQlzei0+aW5fdXNlLS07Ci19Ci0KLXN0YXRpYyBsb25nIHN0cmVhbXphcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHZhbDsKLQlzdHJ1Y3QgdXNiX3N0cmVhbXphcCAqc3ogPSBsaXJjX2dldF9wZGF0YShmaWxlcCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgTElSQ19HRVRfUkVDX1JFU09MVVRJT046Ci0JCXJlc3VsdCA9IHB1dF91c2VyKFNUUkVBTVpBUF9SRVNPTFVUSU9OLCAodW5zaWduZWQgaW50ICopIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgTElSQ19TRVRfUkVDX1RJTUVPVVQ6Ci0JCXJlc3VsdCA9IGdldF91c2VyKHZhbCwgKGludCAqKWFyZyk7Ci0JCWlmIChyZXN1bHQgPT0gMCkgewotCQkJaWYgKHZhbCA9PSBTVFJFQU1aQVBfVElNRU9VVCAqIFNUUkVBTVpBUF9SRVNPTFVUSU9OKQotCQkJCXN6LT50aW1lb3V0X2VuYWJsZWQgPSAxOwotCQkJZWxzZSBpZiAodmFsID09IDApCi0JCQkJc3otPnRpbWVvdXRfZW5hYmxlZCA9IDA7Ci0JCQllbHNlCi0JCQkJcmVzdWx0ID0gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gbGlyY19kZXZfZm9wX2lvY3RsKGZpbGVwLCBjbWQsIGFyZyk7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogc3RyZWFtemFwX2Rpc2Nvbm5lY3QKLSAqCi0gKiBDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgZ3VhcmFudGVlcyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBub3Qgc3VibWl0IGFueSBtb3JlIHVyYnMKLSAqIGJ5IGNsZWFyaW5nIGRldi0+dWRldi4gIEl0IGlzIGFsc28gc3VwcG9zZWQgdG8gdGVybWluYXRlIGFueSBjdXJyZW50bHkKLSAqIGFjdGl2ZSB1cmJzLiAgVW5mb3J0dW5hdGVseSwgdXNiX2J1bGtfbXNnKCksIHVzZWQgaW4gc3RyZWFtemFwX3JlYWQoKSwKLSAqIGRvZXMgbm90IHByb3ZpZGUgYW55IHdheSB0byBkbyB0aGlzLgotICovCi1zdGF0aWMgdm9pZCBzdHJlYW16YXBfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzejsKLQlpbnQgZXJybnVtOwotCWludCBtaW5vcjsKLQotCXN6ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCi0JLyogdW5yZWdpc3RlciBmcm9tIHRoZSBMSVJDIHN1Yi1zeXN0ZW0gKi8KLQotCWVycm51bSA9IGxpcmNfdW5yZWdpc3Rlcl9kcml2ZXIoc3otPmRyaXZlci0+bWlub3IpOwotCWlmIChlcnJudW0gIT0gMCkKLQkJZHByaW50aygiZXJyb3IgaW4gbGlyY191bnJlZ2lzdGVyOiAocmV0dXJuZWQgJWQpIiwKLQkJCXN6LT5kcml2ZXItPm1pbm9yLCBlcnJudW0pOwotCi0JbGlyY19idWZmZXJfZnJlZShzei0+ZGVsYXlfYnVmKTsKLQlsaXJjX2J1ZmZlcl9mcmVlKHN6LT5kcml2ZXItPnJidWYpOwotCi0JLyogdW5yZWdpc3RlciBmcm9tIHRoZSBVU0Igc3ViLXN5c3RlbSAqLwotCi0JdXNiX2ZyZWVfdXJiKHN6LT51cmJfaW4pOwotCi0JdXNiX2ZyZWVfY29oZXJlbnQoc3otPnVkZXYsIHN6LT5idWZfaW5fbGVuLCBzei0+YnVmX2luLCBzei0+ZG1hX2luKTsKLQotCW1pbm9yID0gc3otPmRyaXZlci0+bWlub3I7Ci0Ja2ZyZWUoc3otPmRyaXZlci0+cmJ1Zik7Ci0Ja2ZyZWUoc3otPmRyaXZlcik7Ci0Ja2ZyZWUoc3otPmRlbGF5X2J1Zik7Ci0Ja2ZyZWUoc3opOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiWyVkXTogZGlzY29ubmVjdGVkXG4iLCBtaW5vcik7Ci19Ci0KLXN0YXRpYyBpbnQgc3RyZWFtemFwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQotewotCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICJbJWRdOiBzdXNwZW5kXG4iLCBzei0+ZHJpdmVyLT5taW5vcik7Ci0JaWYgKHN6LT5pbl91c2UpIHsKLQkJaWYgKHN6LT5mbHVzaCkgewotCQkJc3otPmZsdXNoID0gMDsKLQkJCWRlbF90aW1lcl9zeW5jKCZzei0+Zmx1c2hfdGltZXIpOwotCQl9Ci0KLQkJc3RvcF90aW1lcihzeik7Ci0KLQkJdXNiX2tpbGxfdXJiKHN6LT51cmJfaW4pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdHJlYW16YXBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCB1c2Jfc3RyZWFtemFwICpzeiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0KLQlsaXJjX2J1ZmZlcl9jbGVhcihzei0+ZHJpdmVyLT5yYnVmKTsKLQlsaXJjX2J1ZmZlcl9jbGVhcihzei0+ZGVsYXlfYnVmKTsKLQotCWlmIChzei0+aW5fdXNlKSB7Ci0JCXN6LT5mbHVzaF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwotCQlzei0+Zmx1c2ggPSAxOwotCQlhZGRfdGltZXIoJnN6LT5mbHVzaF90aW1lcik7Ci0KLQkJc3otPnVyYl9pbi0+ZGV2ID0gc3otPnVkZXY7Ci0JCWlmICh1c2Jfc3VibWl0X3VyYihzei0+dXJiX2luLCBHRlBfQVRPTUlDKSkgewotCQkJZHByaW50aygib3BlbiByZXN1bHQgPSAtRUlPIGVycm9yIHN1Ym1pdHRpbmcgdXJiIiwKLQkJCQlzei0+ZHJpdmVyLT5taW5vcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgl1c2Jfc3RyZWFtemFwX2luaXQKLSAqLwotc3RhdGljIGludCBfX2luaXQgdXNiX3N0cmVhbXphcF9pbml0KHZvaWQpCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KLQlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnN0cmVhbXphcF9kcml2ZXIpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsCi0JCSAgICByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIiAiIERSSVZFUl9WRVJTSU9OICIgcmVnaXN0ZXJlZFxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdXNiX3N0cmVhbXphcF9leGl0Ci0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCB1c2Jfc3RyZWFtemFwX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3Rlcigmc3RyZWFtemFwX2RyaXZlcik7Ci19Ci0KLQotbW9kdWxlX2luaXQodXNiX3N0cmVhbXphcF9pbml0KTsKLW1vZHVsZV9leGl0KHVzYl9zdHJlYW16YXBfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIkNocmlzdG9waCBCYXJ0ZWxtdXMsIEdyZWcgV2lja2hhbSwgQWRyaWFuIERld2h1cnN0Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL1RPRE8KaW5kZXggMDA4NzQ0Ny4uNDM1ZTA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvVE9ETwpAQCAtMSw3ICsxLDcgQEAKIFJBUiBIYW5kbGVyIChtZW1yYXIpIERyaXZlciBUT0RPIEl0ZW1zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1NYWludGFpbmVyOiBPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4KK01haW50YWluZXI6IEV1Z2VuZSBFcHNodGV5biA8ZXVnZW5lLmVwc2h0ZXluQGludGVsLmNvbT4KIAogbWVtcmFyLmgKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci1hYmkgYi9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhci1hYmkKaW5kZXggOThhNmJiMS4uYzIzZmM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXItYWJpCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyLWFiaQpAQCAtMSw3ICsxLDcgQEAKIFdoYXQ6CQkvZGV2L21lbXJhcgogRGF0ZToJCU1hcmNoIDIwMTAKLUtlcm5lbFZlcnNpb246CUtlcm5lbCB2ZXJzaW9uIHRoaXMgZmVhdHVyZSBmaXJzdCBzaG93ZWQgdXAgaW4uCi1Db250YWN0OglPc3NhbWEgT3RobWFuIDxvc3NhbWEub3RobWFuQGludGVsLmNvbT4KK0tlcm5lbFZlcnNpb246CTIuNi4zNAorQ29udGFjdDoJRXVnZW5lIEVwc2h0ZXluIDxldWdlbmUuZXBzaHRleW5AaW50ZWwuY29tPgogRGVzY3JpcHRpb246CVRoZSBJbnRlbCBNb29yZXN0b3duIFJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiAoUkFSKQogCQlIYW5kbGVyIGRyaXZlciBleHBvc2VzIGFuIGlvY3RsKCkgYmFzZWQgaW50ZXJmYWNlIHRoYXQKIAkJYWxsb3dzIGEgdXNlciB0byByZXNlcnZlIGFuZCByZWxlYXNlIGJsb2NrcyBvZiBSQVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2hhbmRsZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZW1yYXIvbWVtcmFyX2hhbmRsZXIuYwppbmRleCA0MTg3NmYyLi5hOThiM2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVtcmFyL21lbXJhcl9oYW5kbGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lbXJhci9tZW1yYXJfaGFuZGxlci5jCkBAIC0yNzgsMTkgKzI3OCwxMCBAQAogCUJVR19PTighbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHJhcm51bSkpOwogCUJVR19PTihyYXItPmFsbG9jYXRlZCk7CiAKLQltdXRleF9pbml0KCZyYXItPmxvY2spOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBwcm9jZXNzIHRhYmxlIGJlZm9yZSB3ZSByZWFjaCBhbnkKLQkgKiBjb2RlIHRoYXQgZXhpdCBvbiBmYWlsdXJlIHNpbmNlIHRoZSBmaW5hbGl6YXRpb24KLQkgKiBjb2RlIHJlcXVpcmVzIGFuIGluaXRpYWxpemVkIGxpc3QuCi0JICovCi0JSU5JVF9MSVNUX0hFQUQoJnJhci0+YnVmZmVycy5saXN0KTsKLQogCWlmIChyYXJfZ2V0X2FkZHJlc3MocmFybnVtLCAmbG93LCAmaGlnaCkgIT0gMCkKIAkJLyogTm8gUkFSIGlzIGF2YWlsYWJsZS4gKi8KIAkJcmV0dXJuIC1FTk9ERVY7Ci0JCisKIAlpZiAobG93ID09IDAgfHwgaGlnaCA9PSAwKSB7CiAJCXJhci0+YmFzZSAgICAgID0gMDsKIAkJcmFyLT5sZW5ndGggICAgPSAwOwpAQCAtMzEwLDcgKzMwMSw4IEBACiAJLyogQ2xhaW0gUkFSIG1lbW9yeSBhcyBvdXIgb3duLiAqLwogCWlmIChyZXF1ZXN0X21lbV9yZWdpb24obG93LCByYXItPmxlbmd0aCwgZGV2bmFtZSkgPT0gTlVMTCkgewogCQlyYXItPmxlbmd0aCA9IDA7Ci0JCXByX2VycigiJXM6IFVuYWJsZSB0byBjbGFpbSBSQVJbJWRdIG1lbW9yeS5cbiIsIGRldm5hbWUsIHJhcm51bSk7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBjbGFpbSBSQVJbJWRdIG1lbW9yeS5cbiIsCisJCSAgICAgICBkZXZuYW1lLCByYXJudW0pOwogCQlwcl9lcnIoIiVzOiBSQVJbJWRdIGRpc2FibGVkLlxuIiwgZGV2bmFtZSwgcmFybnVtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0zNDYsNyArMzM4LDcgQEAKIAl9CiAKIAlwcl9pbmZvKCIlczogQlJBUlslZF0gYnVzIGFkZHJlc3MgcmFuZ2UgPSBbMHglbHgsIDB4JWx4XVxuIiwKLQkJCWRldm5hbWUsIHJhcm51bSwgKHVuc2lnbmVkIGxvbmcpIGxvdywgKHVuc2lnbmVkIGxvbmcpIGhpZ2gpOworCQlkZXZuYW1lLCByYXJudW0sICh1bnNpZ25lZCBsb25nKSBsb3csICh1bnNpZ25lZCBsb25nKSBoaWdoKTsKIAogCXByX2luZm8oIiVzOiBCUkFSWyVkXSBzaXplID0gJXp1IEtpQlxuIiwKIAkJCWRldm5hbWUsIHJhcm51bSwgcmFyLT5hbGxvY2F0b3ItPmNhcGFjaXR5IC8gMTAyNCk7CkBAIC01MzAsNyArNTIyLDcgQEAKIHsKIAlzdHJ1Y3QgbWVtcmFyX2FsbG9jYXRvciAqYWxsb2NhdG9yOwogCi0gCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHItPnR5cGUpKQorCWlmICghbWVtcmFyX2lzX3ZhbGlkX3Jhcl90eXBlKHItPnR5cGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghbWVtcmFyc1tyLT50eXBlXS5hbGxvY2F0ZWQpCkBAIC05MzksOSArOTMxLDI4IEBACiBzdGF0aWMgaW50IF9faW5pdCBtZW1yYXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CisJaW50IGk7CiAKIAlwcmludGsoYmFubmVyKTsKIAorCS8qCisJICogU29tZSBkZWxheWVkIGluaXRpYWxpemF0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGlzIGRyaXZlci4KKwkgKiBNYWtlIHN1cmUgcmVzb3VyY2VzIHRoYXQgYXJlIHVzZWQgZHVyaW5nIGRyaXZlciBjbGVhbi11cAorCSAqIChlLmcuIGR1cmluZyBkcml2ZXIncyByZWxlYXNlKCkgZnVuY3Rpb24pIGFyZSBmdWxseQorCSAqIGluaXRpYWxpemVkIGJlZm9yZSBmaXJzdCB1c2UuICBUaGlzIGlzIHBhcnRpY3VsYXJseQorCSAqIGltcG9ydGFudCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgZGVsYXllZCBpbml0aWFsaXphdGlvbgorCSAqIGlzbid0IGNvbXBsZXRlZCwgbGVhdmluZyBiZWhpbmQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKKwkgKiBkcml2ZXIuCisJICoKKwkgKiBTdWNoIGEgc2NlbmFyaW8gY2FuIG9jY3VyIHdoZW4gUkFSIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlCisJICogcGxhdGZvcm0sIGFuZCB0aGUgZHJpdmVyIGlzIHJlbGVhc2UoKWQuCisJICovCisJZm9yIChpID0gMDsgaSAhPSBBUlJBWV9TSVpFKG1lbXJhcnMpOyArK2kpIHsKKwkJc3RydWN0IG1lbXJhcl9yYXJfaW5mbyAqIGNvbnN0IHJhciA9ICZtZW1yYXJzW2ldOworCQltdXRleF9pbml0KCZyYXItPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmcmFyLT5idWZmZXJzLmxpc3QpOworCX0KKwogCWVyciA9IG1pc2NfcmVnaXN0ZXIoJm1lbXJhcl9taXNjZGV2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21zbS9LY29uZmlnCmluZGV4IGM1NzAzOWYuLmM1MzA5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL0tjb25maWcKQEAgLTQ2LDIxICs0NiwxMSBAQAogCXNlbGVjdCBGQl9NU01fTENEQ19QQU5FTAogCWRlZmF1bHQgbgogCi1jb25maWcgRkJfTVNNX0xDRENfU1QxX1dYR0EKLQlib29sCi0Jc2VsZWN0IEZCX01TTV9MQ0RDX1BBTkVMCi0JZGVmYXVsdCBuCi0KIGNvbmZpZyBGQl9NU01fTENEQ19TVDE1X1dYR0EKICAgICAgICAgYm9vbAogICAgICAgICBzZWxlY3QgRkJfTVNNX0xDRENfUEFORUwKICAgICAgICAgZGVmYXVsdCBuCiAKLWNvbmZpZyBGQl9NU01fTENEQ19XWEdBCi0JYm9vbAotCXNlbGVjdCBGQl9NU01fTENEQ19QQU5FTAotCWRlZmF1bHQgbgotCiBjaG9pY2UKIAlwcm9tcHQgIkxDRCBQYW5lbCIKIAlkZWZhdWx0IEZCX01TTV9MQ0RDX1NUMTVfUEFORUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL01ha2VmaWxlCmluZGV4IDk4YTBjZTEuLmJiMzYwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9NYWtlZmlsZQpAQCAtNjEsMTQgKzYxLDEyIEBACiBvYmoteSArPSBtZGRpX3Rvc2hpYmEubwogb2JqLXkgKz0gbWRkaV90b3NoaWJhX3ZnYS5vCiBvYmoteSArPSBtZGRpX3Rvc2hpYmFfd3ZnYV9wdC5vCi1vYmoteSArPSBtZGRpX3Rvc2hpYmFfd3ZnYS5vCiBvYmoteSArPSBtZGRpX3NoYXJwLm8KIGVsc2UKIG9iai0kKENPTkZJR19GQl9NU01fTURESV9QUklTTV9XVkdBKSArPSBtZGRpX3ByaXNtLm8KIG9iai0kKENPTkZJR19GQl9NU01fTURESV9UT1NISUJBX0NPTU1PTikgKz0gbWRkaV90b3NoaWJhLm8KIG9iai0kKENPTkZJR19GQl9NU01fTURESV9UT1NISUJBX0NPTU1PTl9WR0EpICs9IG1kZGlfdG9zaGliYV92Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1RPU0hJQkFfV1ZHQV9QT1JUUkFJVCkgKz0gbWRkaV90b3NoaWJhX3d2Z2FfcHQubwotb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1RPU0hJQkFfV1ZHQSkgKz0gbWRkaV90b3NoaWJhX3d2Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9NRERJX1NIQVJQX1FWR0FfMTI4eDEyOCkgKz0gbWRkaV9zaGFycC5vCiBlbmRpZgogCkBAIC03NiwxMSArNzQsOCBAQAogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1BSSVNNX1dWR0EpICs9IGxjZGNfcHJpc20ubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX0VYVEVSTkFMX1dYR0EpICs9IGxjZGNfZXh0ZXJuYWwubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX0dPUkRPTl9WR0EpICs9IGxjZGNfZ29yZG9uLm8KLW9iai0kKENPTkZJR19GQl9NU01fTENEQ19XWEdBKSArPSBsY2RjX3d4Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1RPU0hJQkFfV1ZHQV9QVCkgKz0gbGNkY190b3NoaWJhX3d2Z2FfcHQubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1NIQVJQX1dWR0FfUFQpICs9IGxjZGNfc2hhcnBfd3ZnYV9wdC5vCi1vYmotJChDT05GSUdfRkJfTVNNX0xDRENfR1JBUEVGUlVJVF9WR0EpICs9IGxjZGNfZ3JhcGVmcnVpdC5vCi1vYmotJChDT05GSUdfRkJfTVNNX0xDRENfU1QxX1dYR0EpICs9IGxjZGNfc3QxX3d4Z2Eubwogb2JqLSQoQ09ORklHX0ZCX01TTV9MQ0RDX1NUMTVfV1hHQSkgKz0gbGNkY19zdDE1Lm8KIG9iai0kKENPTkZJR19GQl9NU01fSERNSV9TSUlfRVhURVJOQUxfNzIwUCkgKz0gaGRtaV9zaWk5MDIyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX2dyYXBlZnJ1aXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY19ncmFwZWZydWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyODQ2NDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX2dyYXBlZnJ1aXQuYworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibXNtX2ZiLmgiCi0KLSNpZmRlZiBDT05GSUdfRkJfTVNNX1RSWV9NRERJX0NBVENIX0xDRENfUFJJU00KLSNpbmNsdWRlICJtZGRpaG9zdGkuaCIKLSNlbmRpZgotCi1zdGF0aWMgaW50IF9faW5pdCBsY2RjX2dyYXBlZnJ1aXRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0jaWZkZWYgQ09ORklHX0ZCX01TTV9UUllfTURESV9DQVRDSF9MQ0RDX1BSSVNNCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX2dyYXBlZnJ1aXRfdmdhIikpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KLQlwaW5mby54cmVzID0gMTAyNDsKLQlwaW5mby55cmVzID0gNjAwOwotCXBpbmZvLnR5cGUgPSBMQ0RDX1BBTkVMOwotCXBpbmZvLnBkZXN0ID0gRElTUExBWV8xOwotCXBpbmZvLndhaXRfY3ljbGUgPSAwOwotCXBpbmZvLmJwcCA9IDE4OwotCXBpbmZvLmZiX251bSA9IDI7Ci0JcGluZm8uY2xrX3JhdGUgPSA0MDAwMDAwMDsKLQotCXBpbmZvLmxjZGMuaF9iYWNrX3BvcmNoID0gODg7Ci0JcGluZm8ubGNkYy5oX2Zyb250X3BvcmNoID0gNDA7Ci0JcGluZm8ubGNkYy5oX3B1bHNlX3dpZHRoID0gMTI4OwotCXBpbmZvLmxjZGMudl9iYWNrX3BvcmNoID0gMjM7Ci0JcGluZm8ubGNkYy52X2Zyb250X3BvcmNoID0gMTsKLQlwaW5mby5sY2RjLnZfcHVsc2Vfd2lkdGggPSA0OwotCXBpbmZvLmxjZGMuYm9yZGVyX2NsciA9IDA7CS8qIGJsayAqLwotCXBpbmZvLmxjZGMudW5kZXJmbG93X2NsciA9IDB4ZmY7CS8qIGJsdWUgKi8KLQlwaW5mby5sY2RjLmhzeW5jX3NrZXcgPSAwOwotCi0JcmV0ID0gbGNkY19kZXZpY2VfcmVnaXN0ZXIoJnBpbmZvKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobGNkY19ncmFwZWZydWl0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9sY2RjX3N0MV93eGdhLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfc3QxX3d4Z2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM3NjAwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfc3QxX3d4Z2EuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIENvcHlyaWdodCAoYykgMjAwOSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAotICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAibXNtX2ZiLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IGxjZGNfc3QxX3d4Z2FfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX3N0MV93eGdhIikpCi0JCXJldHVybiAwOwotCi0JcGluZm8ueHJlcyA9IDEyODA7Ci0JcGluZm8ueXJlcyA9IDcyMDsKLQlwaW5mby50eXBlID0gTENEQ19QQU5FTDsKLQlwaW5mby5wZGVzdCA9IERJU1BMQVlfMTsKLQlwaW5mby53YWl0X2N5Y2xlID0gMDsKLQlwaW5mby5icHAgPSAxODsKLQlwaW5mby5mYl9udW0gPSAyOwotCXBpbmZvLmNsa19yYXRlID0gNzQyNTAwMDA7Ci0KLQlwaW5mby5sY2RjLmhfYmFja19wb3JjaCA9IDEyNDsKLQlwaW5mby5sY2RjLmhfZnJvbnRfcG9yY2ggPSAxMTA7Ci0JcGluZm8ubGNkYy5oX3B1bHNlX3dpZHRoID0gMTM2OwotCXBpbmZvLmxjZGMudl9iYWNrX3BvcmNoID0gMTk7Ci0JcGluZm8ubGNkYy52X2Zyb250X3BvcmNoID0gNTsKLQlwaW5mby5sY2RjLnZfcHVsc2Vfd2lkdGggPSA2OwotCXBpbmZvLmxjZGMuYm9yZGVyX2NsciA9IDA7CS8qIGJsayAqLwotCXBpbmZvLmxjZGMudW5kZXJmbG93X2NsciA9IDB4ZmY7CS8qIGJsdWUgKi8KLQlwaW5mby5sY2RjLmhzeW5jX3NrZXcgPSAwOwotCi0JcmV0ID0gbGNkY19kZXZpY2VfcmVnaXN0ZXIoJnBpbmZvKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlIVxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobGNkY19zdDFfd3hnYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY193eGdhLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL2xjZGNfd3hnYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDJjOTJjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbGNkY193eGdhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIm1zbV9mYi5oIgotCi1zdGF0aWMgaW50IF9faW5pdCBsY2RjX3d4Z2FfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0Jc3RydWN0IG1zbV9wYW5lbF9pbmZvIHBpbmZvOwotCi0jaWZkZWYgQ09ORklHX0ZCX01TTV9NRERJX0FVVE9fREVURUNUCi0JaWYgKG1zbV9mYl9kZXRlY3RfY2xpZW50KCJsY2RjX3d4Z2EiKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCXBpbmZvLnhyZXMgPSAxMjgwOwotCXBpbmZvLnlyZXMgPSA3MjA7Ci0JcGluZm8udHlwZSA9IExDRENfUEFORUw7Ci0JcGluZm8ucGRlc3QgPSBESVNQTEFZXzE7Ci0JcGluZm8ud2FpdF9jeWNsZSA9IDA7Ci0JcGluZm8uYnBwID0gMjQ7Ci0JcGluZm8uZmJfbnVtID0gMjsKLQlwaW5mby5jbGtfcmF0ZSA9IDc0MjUwMDAwOwotCi0JcGluZm8ubGNkYy5oX2JhY2tfcG9yY2ggPSAxMjQ7Ci0JcGluZm8ubGNkYy5oX2Zyb250X3BvcmNoID0gMTEwOwotCXBpbmZvLmxjZGMuaF9wdWxzZV93aWR0aCA9IDEzNjsKLQlwaW5mby5sY2RjLnZfYmFja19wb3JjaCA9IDE5OwotCXBpbmZvLmxjZGMudl9mcm9udF9wb3JjaCA9IDU7Ci0JcGluZm8ubGNkYy52X3B1bHNlX3dpZHRoID0gNjsKLQlwaW5mby5sY2RjLmJvcmRlcl9jbHIgPSAwOwkvKiBibGsgKi8KLQlwaW5mby5sY2RjLnVuZGVyZmxvd19jbHIgPSAweGZmOwkvKiBibHVlICovCi0JcGluZm8ubGNkYy5oc3luY19za2V3ID0gMDsKLQotCXJldCA9IGxjZGNfZGV2aWNlX3JlZ2lzdGVyKCZwaW5mbyk7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSFcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLW1vZHVsZV9pbml0KGxjZGNfd3hnYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaV90b3NoaWJhX3d2Z2EuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaV90b3NoaWJhX3d2Z2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU3YjBmMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlfdG9zaGliYV93dmdhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBDb3B5cmlnaHQgKGMpIDIwMDksIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKLSAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgIm1zbV9mYi5oIgotI2luY2x1ZGUgIm1kZGlob3N0LmgiCi0jaW5jbHVkZSAibWRkaV90b3NoaWJhLmgiCi0KLXN0YXRpYyBpbnQgX19pbml0IG1kZGlfdG9zaGliYV93dmdhX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtc21fcGFuZWxfaW5mbyBwaW5mbzsKLQotI2lmZGVmIENPTkZJR19GQl9NU01fTURESV9BVVRPX0RFVEVDVAotCWlmIChtc21fZmJfZGV0ZWN0X2NsaWVudCgibWRkaV90b3NoaWJhX3d2Z2EiKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQotCXBpbmZvLnhyZXMgPSA4MDA7Ci0JcGluZm8ueXJlcyA9IDQ4MDsKLQlwaW5mby5wZGVzdCA9IERJU1BMQVlfMjsKLQlwaW5mby50eXBlID0gTURESV9QQU5FTDsKLQlwaW5mby5tZGRpLnZkb3BrdCA9IE1ERElfREVGQVVMVF9QUklNX1BJWF9BVFRSOwotCXBpbmZvLndhaXRfY3ljbGUgPSAwOwotCXBpbmZvLmJwcCA9IDE4OwotCXBpbmZvLmxjZC52c3luY19lbmFibGUgPSBUUlVFOwotCXBpbmZvLmxjZC5yZWZ4MTAwID0gNjExODsKLQlwaW5mby5sY2Qudl9iYWNrX3BvcmNoID0gNjsKLQlwaW5mby5sY2Qudl9mcm9udF9wb3JjaCA9IDA7Ci0JcGluZm8ubGNkLnZfcHVsc2Vfd2lkdGggPSAwOwotCXBpbmZvLmxjZC5od192c3luY19tb2RlID0gRkFMU0U7Ci0JcGluZm8ubGNkLnZzeW5jX25vdGlmaWVyX3BlcmlvZCA9ICgxICogSFopOwotCXBpbmZvLmJsX21heCA9IDQ7Ci0JcGluZm8uYmxfbWluID0gMTsKLQlwaW5mby5jbGtfcmF0ZSA9IDE5MjAwMDAwMDsKLQlwaW5mby5jbGtfbWluID0gIDE5MDAwMDAwMDsKLQlwaW5mby5jbGtfbWF4ID0gIDIwMDAwMDAwMDsKLQlwaW5mby5mYl9udW0gPSAyOwotCi0JcmV0ID0gbWRkaV90b3NoaWJhX2RldmljZV9yZWdpc3RlcigmcGluZm8sIFRPU0hJQkFfVkdBX1BSSU0sCi0JCQkJCSAgIExDRF9UT1NISUJBXzJQNF9XVkdBKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBkZXZpY2UhXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotbW9kdWxlX2luaXQobWRkaV90b3NoaWJhX3d2Z2FfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlob3N0LmggYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kZGlob3N0LmgKaW5kZXggMjBiODE3OC4uYzQ2ZjI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tZGRpaG9zdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRkaWhvc3QuaApAQCAtNDQsOCArNDQsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSAibXNtX2ZiX3BhbmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfZGVidWdmcy5jCmluZGV4IDg0NGQ0NjcuLjM2OTU0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X2RlYnVnZnMuYwpAQCAtNjMsMTMgKzYzLDYgQEAKIAkJCSIlbGx4XG4iKTsKIAogCi1zdGF0aWMgaW50IG1kcDRfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIG5vbi1zZWVrYWJsZSAqLwotCWZpbGUtPmZfbW9kZSAmPSB+KEZNT0RFX0xTRUVLIHwgRk1PREVfUFJFQUQgfCBGTU9ERV9QV1JJVEUpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1kcDRfZGVidWdmc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXJldHVybiAwOwpAQCAtMTQ0LDEwICsxMzcsMTEgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRwNF9kZWJ1Z2ZzX2ZvcHMgPSB7Ci0JLm9wZW4gPSBtZHA0X2RlYnVnZnNfb3BlbiwKKwkub3BlbiA9IG5vbnNlZWthYmxlX29wZW4sCiAJLnJlbGVhc2UgPSBtZHA0X2RlYnVnZnNfcmVsZWFzZSwKIAkucmVhZCA9IG1kcDRfZGVidWdmc19yZWFkLAogCS53cml0ZSA9IG1kcDRfZGVidWdmc193cml0ZSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAogfTsKIAogaW50IG1kcDRfZGVidWdmc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tZHA0X292ZXJsYXkuYwppbmRleCAzMDRiYjgyLi5kZTI4NGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL21kcDRfb3ZlcmxheS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbWRwNF9vdmVybGF5LmMKQEAgLTg3NCw4ICs4NzQsOCBAQAogCQlpZiAocGlwZS0+cGlwZV9uZHggPT0gMCkgewogCQkJcGlwZS0+cGlwZV9uZHggPSBpICsgMTsJLyogc3RhcnQgZnJvbSAxICovCiAJCQlpbml0X2NvbXBsZXRpb24oJnBpcGUtPmNvbXApOwotCXByaW50ayhLRVJOX0lORk8gIm1kcDRfb3ZlcmxheV9waXBlX2FsbG9jOiBwaXBlPSV4IG5keD0lZFxuIiwKLQkJCQkJKGludClwaXBlLCBwaXBlLT5waXBlX25keCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRwNF9vdmVybGF5X3BpcGVfYWxsb2M6IHBpcGU9JXAgbmR4PSVkXG4iLAorCQkJCQlwaXBlLCBwaXBlLT5waXBlX25keCk7CiAJCQlyZXR1cm4gcGlwZTsKIAkJfQogCQlwaXBlKys7CkBAIC04ODcsOCArODg3LDggQEAKIAogdm9pZCBtZHA0X292ZXJsYXlfcGlwZV9mcmVlKHN0cnVjdCBtZHA0X292ZXJsYXlfcGlwZSAqcGlwZSkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJtZHA0X292ZXJsYXlfcGlwZV9mcmVlOiBwaXBlPSV4IG5keD0lZFxuIiwKLQkJCQkJKGludClwaXBlLCBwaXBlLT5waXBlX25keCk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWRwNF9vdmVybGF5X3BpcGVfZnJlZTogcGlwZT0lcCBuZHg9JWRcbiIsCisJCQkJCXBpcGUsIHBpcGUtPnBpcGVfbmR4KTsKIAltZW1zZXQocGlwZSwgMCwgc2l6ZW9mKCpwaXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiX2RlZi5oIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKaW5kZXggNmRlNDQwOS4uYzVmOWU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmJfZGVmLmgKQEAgLTUwLDE1ICs1MCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSAibGludXgvcHJvY19mcy5oIgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbXNtL3N0YWdpbmctZGV2aWNlcy5jIGIvZHJpdmVycy9zdGFnaW5nL21zbS9zdGFnaW5nLWRldmljZXMuYwppbmRleCAwZjhlYzNlLi44NjFmMzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbXNtL3N0YWdpbmctZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vc3RhZ2luZy1kZXZpY2VzLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJtc21fbWRwLmgiCiAjaW5jbHVkZSAibWVtb3J5X2xsLmgiCiAvLyNpbmNsdWRlICJhbmRyb2lkX3BtZW0uaCIKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAKICNpZmRlZiBDT05GSUdfTVNNX1NPQ19SRVZfQQogI2RlZmluZSBNU01fU01JX0JBU0UgMHhFMDAwMDAwMApAQCAtMTE1LDE3ICsxMTQsNyBAQAogCX0gZWxzZSBpZiAoKG1hY2hpbmVfaXNfcXNkOHg1MF9zdXJmKCkgfHwgbWFjaGluZV9pc19xc2Q4eDUwYV9zdXJmKCkpCiAJCQkmJiAhc3RyY21wKG5hbWUsICJsY2RjX2V4dGVybmFsIikpCiAJCXJldCA9IDA7Ci0JZWxzZSBpZiAoMCAvKm1hY2hpbmVfaXNfcXNkOHg1MF9ncmFwZWZydWl0KCkgKi8pIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfZ3JhcGVmcnVpdF92Z2EiKSkKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBfc3QxKCkpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfc3QxX3d4Z2EiKSkKLQkJCXJldCA9IDA7Ci0JCWVsc2UKLQkJCXJldCA9IC1FTk9ERVY7Ci0JfSBlbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBhX3N0MV81KCkpIHsKKwllbHNlIGlmIChtYWNoaW5lX2lzX3FzZDh4NTBhX3N0MV81KCkpIHsKIAkJaWYgKCFzdHJjbXAobmFtZSwgImxjZGNfc3QxNSIpIHx8CiAJCSAgICAhc3RyY21wKG5hbWUsICJoZG1pX3NpaTkwMjIiKSkKIAkJCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtY21kLXF1ZXVlLmMKaW5kZXggOTc2MjI3Yi4uZTk4MDlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWNtZC1xdWV1ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1jbWQtcXVldWUuYwpAQCAtMTQwLDIxICsxNDAsMjEgQEAKIAlpZiAocXN0YXRlLT5iYXNlX3B0cl9kaXYxMjgpIHsKIAkJaWYgKG1heF9kZXB0aCAhPSAoaW50KXFzdGF0ZS0+bWF4X2RlcHRoKSB7CiAJCQljdm14X2RwcmludGYoIkVSUk9SOiBjdm14X2NtZF9xdWV1ZV9pbml0aWFsaXplOiAiCi0JCQkJIlF1ZXVlIGFscmVhZHkgaW5pdGFsaXplZCB3aXRoIGRpZmZlcmVudCAiCisJCQkJIlF1ZXVlIGFscmVhZHkgaW5pdGlhbGl6ZWQgd2l0aCBkaWZmZXJlbnQgIgogCQkJCSJtYXhfZGVwdGggKCVkKS5cbiIsCiAJCQkgICAgIChpbnQpcXN0YXRlLT5tYXhfZGVwdGgpOwogCQkJcmV0dXJuIENWTVhfQ01EX1FVRVVFX0lOVkFMSURfUEFSQU07CiAJCX0KIAkJaWYgKGZwYV9wb29sICE9IHFzdGF0ZS0+ZnBhX3Bvb2wpIHsKIAkJCWN2bXhfZHByaW50ZigiRVJST1I6IGN2bXhfY21kX3F1ZXVlX2luaXRpYWxpemU6ICIKLQkJCQkiUXVldWUgYWxyZWFkeSBpbml0YWxpemVkIHdpdGggZGlmZmVyZW50ICIKKwkJCQkiUXVldWUgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIGRpZmZlcmVudCAiCiAJCQkJIkZQQSBwb29sICgldSkuXG4iLAogCQkJICAgICBxc3RhdGUtPmZwYV9wb29sKTsKIAkJCXJldHVybiBDVk1YX0NNRF9RVUVVRV9JTlZBTElEX1BBUkFNOwogCQl9CiAJCWlmICgocG9vbF9zaXplID4+IDMpIC0gMSAhPSBxc3RhdGUtPnBvb2xfc2l6ZV9tMSkgewogCQkJY3ZteF9kcHJpbnRmKCJFUlJPUjogY3ZteF9jbWRfcXVldWVfaW5pdGlhbGl6ZTogIgotCQkJCSJRdWV1ZSBhbHJlYWR5IGluaXRhbGl6ZWQgd2l0aCBkaWZmZXJlbnQgIgorCQkJCSJRdWV1ZSBhbHJlYWR5IGluaXRpYWxpemVkIHdpdGggZGlmZmVyZW50ICIKIAkJCQkiRlBBIHBvb2wgc2l6ZSAoJXUpLlxuIiwKIAkJCSAgICAgKHFzdGF0ZS0+cG9vbF9zaXplX20xICsgMSkgPDwgMyk7CiAJCQlyZXR1cm4gQ1ZNWF9DTURfUVVFVUVfSU5WQUxJRF9QQVJBTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mYXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vY3ZteC1mYXUuaAppbmRleCAyOWJkY2U2Li5hNjkzOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2N2bXgtZmF1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9jdm14LWZhdS5oCkBAIC0yOTksNyArMjk5LDcgQEAKIC8qKgogICogQnVpbGRzIEkvTyBkYXRhIGZvciBhc3luYyBvcGVyYXRpb25zCiAgKgotICogQHNjcmFkZHI6IFNjcmF0Y2ggcGFkIGJ5dGUgYWRkcmVzIHRvIHdyaXRlIHRvLiAgTXVzdCBiZSA4IGJ5dGUgYWxpZ25lZAorICogQHNjcmFkZHI6IFNjcmF0Y2ggcGFkIGJ5dGUgYWRkcmVzcyB0byB3cml0ZSB0by4gIE11c3QgYmUgOCBieXRlIGFsaWduZWQKICAqIEB2YWx1ZTogICBTaWduZWQgdmFsdWUgdG8gYWRkLgogICogICAgICAgICAgICAgICAgTm90ZTogV2hlbiBwZXJmb3JtaW5nIDMyIGFuZCA2NCBiaXQgYWNjZXNzLCBvbmx5IHRoZSBsb3cKICAqICAgICAgICAgICAgICAgIDIyIGJpdHMgYXJlIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LXNwaS5jCmluZGV4IGI1OGI4OTcuLjk3MDgyNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtc3BpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1zcGkuYwpAQCAtMjk0LDYgKzI5NCw4IEBACiAJaWYgKG51bWJlcl9zcGlfcG9ydHMgPT0gMCkgewogCQlyID0gcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9STUwsIGN2bV9vY3Rfc3BpX3JtbF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQsICJTUEkiLCAmbnVtYmVyX3NwaV9wb3J0cyk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJfQogCW51bWJlcl9zcGlfcG9ydHMrKzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3R4cnguYwppbmRleCBhMTI3MTk2Li4xMzUxNjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3R4cnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3R4cnguYwpAQCAtMzExNyw3ICszMTE3LDcgQEAKIAogICAgIGluZGV4ID0gKHNyY1syXSt1cCkgJiAoWk1fRklMVEVSX1RBQkxFX1JPVy0xKTsKIAotICAgIC8qIFRCRCA6IGZpbHRlciBmcmFtZSB3aXRoIHNvdXJjZSBhZGRyZXNzID09IG93biBNQUMgYWRyZXNzICovCisgICAgLyogVEJEIDogZmlsdGVyIGZyYW1lIHdpdGggc291cmNlIGFkZHJlc3MgPT0gb3duIE1BQyBhZGRyZXNzICovCiAgICAgaWYgKCh3ZC0+bWFjQWRkclswXSA9PSBzcmNbMF0pICYmICh3ZC0+bWFjQWRkclsxXSA9PSBzcmNbMV0pCiAgICAgICAgICAgICAmJiAod2QtPm1hY0FkZHJbMl0gPT0gc3JjWzJdKSkKICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwppbmRleCA0Y2FmMDI2Li42ZmVhOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8KQEAgLTIsMTUgKzIsNyBAQAogcmVhbGx5IGhhdmUgcGVvcGxlIGhlbHAgdGhlbSBvdXQgb24gdGhlICJjbGVhbiIgYXI5MTcwIGRyaXZlciB0aGF0IGNhbgogYmUgZm91bmQgYXQgdGhlIGxpbnV4LXdpcmVsZXNzIGRldmVsb3BlciBzaXRlLgogCi1CdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKLXRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6Ci0KLVRPRE86Ci0JLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCi0JLSBzcGFyc2UgY2xlYW51cHMKLQktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCi0JLSByZXZpZXcgYnkgdGhlIHdpcmVsZXNzIGRldmVsb3BlciBjb21tdW5pdHkKLQotUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kCi1MdWlzIFJvZHJpZ3VleiA8THVpcy5Sb2RyaWd1ZXpAQXRoZXJvcy5jb20+IGFuZCB0aGUKLW90dXMtZGV2ZWxAbGlzdHMubWFkd2lmaS1wcm9qZWN0Lm9yZyBtYWlsaW5nIGxpc3QuCitUaGlzIGRyaXZlciBpcyB1bm1haW50YWluZWQgYW5kIGl0cyBvbmx5IHB1cnBvc2UgaXMgYXMgYQorc291cmNlIG9mIGRvY3VtZW50YXRpb24gZm9yIGRldmVsb3BlcnMgd29ya2luZyBvbiBhcjkxNzAgYW5kIGNhcmw5MTcwLgorT25jZSBjYXJsOTE3MCBnZXRzIDExbiBzdXBwb3J0IGFuZCBtZXJnZWQgdXBzdHJlYW0gdGhlbiB0aGlzIGRyaXZlcgorY2FuIGJlIHJlbW92ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvYXBkYmcuYwppbmRleCBiNTkwMjhlLi4wOTQxNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMKQEAgLTkwLDI4ICs5MCw2IEBACiAKICNlbmRpZgogCi1zdGF0aWMgY2hhciBoZXgoY2hhciB2KQotewotCWlmIChpc2RpZ2l0KHYpKQotCQlyZXR1cm4gdiAtICcwJzsKLQllbHNlIGlmIChpc3hkaWdpdCh2KSkKLQkJcmV0dXJuIHRvbG93ZXIodikgLSAnYScgKyAxMDsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhc2N0b2hleChjaGFyICpzdHIpCi17Ci0JdW5zaWduZWQgY2hhciB2YWx1ZTsKLQotCXZhbHVlID0gaGV4KCpzdHIpICYgMHgwZjsKLQl2YWx1ZSA9IHZhbHVlIDw8IDQ7Ci0Jc3RyKys7Ci0JdmFsdWUgfD0gaGV4KCpzdHIpICYgMHgwZjsKLQotCXJldHVybiB2YWx1ZTsKLX0KLQogY2hhciAqcHJnbmFtZTsKIAogaW50IHNldF9pb2N0bChpbnQgc29jaywgc3RydWN0IGlmcmVxICpyZXEpCkBAIC0xODAsNyArMTU4LDcgQEAKIAlpZiAoYXJnYyA8IDMpIHsKIAkJZnByaW50ZihzdGRlcnIsICIlczogdXNhZ2UgaXMgXCIlcyA8aWZuYW1lPiA8b3BlcmF0aW9uPiIKIAkJCQkiWzxhZGRyZXNzPl0gWzx2YWx1ZT5dXCJcbiIsIHByZ25hbWUsIHByZ25hbWUpOwotCQlmcHJpbnRmKHN0ZGVyciwgInZhbGlkIG9wZXJhdGlvbiA6IHJlYWQsIHdyaXRlLCBtZW0sIHJlZywgXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJ2YWxpZCBvcGVyYXRpb24gOiByZWFkLCB3cml0ZSwgbWVtLCByZWcsXG4iKTsKIAkJZnByaW50ZihzdGRlcnIsICIJCTogdHhkLCByeGQsIHJtZW0sIHdtZW1cbiIpOwogCQlmcHJpbnRmKHN0ZGVyciwgIgkJOiBkbWF0LCByZWd0LCB0ZXN0XG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwYW5pLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYwppbmRleCBmNTNlNDgzLi45Yjk0MjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYwpAQCAtNzIsNyArNzIsNiBAQAogCiB2b2lkIHpmSHBBbmlBdHRhY2goemRldl90ICpkZXYpCiB7Ci0jZGVmaW5lIE4oYSkgICAgIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCiAgICAgdTMyX3QgaTsKICAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIApAQCAtMTI1LDcgKzEyNCw2IEBACiAgICAgSHBQcml2LT5zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gWk1fUlNTSV9EVU1NWV9NQVJLRVI7CiAgICAgSHBQcml2LT5zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z3Jzc2kgPSBaTV9SU1NJX0RVTU1ZX01BUktFUjsKICAgICBIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZndHhyc3NpID0gWk1fUlNTSV9EVU1NWV9NQVJLRVI7Ci0jdW5kZWYgTgogfQogCiAvKgpAQCAtMTMzLDcgKzEzMSw2IEBACiAgKi8KIHU4X3QgemZIcEFuaUNvbnRyb2woemRldl90ICpkZXYsIFpNX0hBTF9BTklfQ01EIGNtZCwgaW50IHBhcmFtKQogewotI2RlZmluZSBOKGEpIChzaXplb2YoYSkvc2l6ZW9mKGFbMF0pKQogICAgIHR5cGVkZWYgczMyX3QgVEFCTEVbXTsKICAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CkBAIC0xNDgsOSArMTQ1LDkgQEAKICAgICB7CiAgICAgICAgIHUzMl90IGxldmVsID0gcGFyYW07CiAKLSAgICAgICAgaWYgKGxldmVsID49IE4oSHBQcml2LT50b3RhbFNpemVEZXNpcmVkKSkgeworICAgICAgICBpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWQpKSB7CiAgICAgICAgICAgem1fZGVidWdfbXNnMSgibGV2ZWwgb3V0IG9mIHJhbmdlLCBkZXNpcmVkIGxldmVsIDogIiwgbGV2ZWwpOwotICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIE4oSHBQcml2LT50b3RhbFNpemVEZXNpcmVkKSk7CisgICAgICAgICAgem1fZGVidWdfbXNnMSgibWF4IGxldmVsIDogIiwgQVJSQVlfU0laRShIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWQpKTsKICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KIApAQCAtMjYwLDEwICsyNTcsMTAgQEAKICAgICAgICAgY29uc3QgVEFCTEUgZmlyc3RlcCA9IHsgMCwgNCwgOCB9OwogICAgICAgICB1MzJfdCBsZXZlbCA9IHBhcmFtOwogCi0gICAgICAgIGlmIChsZXZlbCA+PSBOKGZpcnN0ZXApKQorICAgICAgICBpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShmaXJzdGVwKSkKICAgICAgICAgewogICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibGV2ZWwgb3V0IG9mIHJhbmdlLCBkZXNpcmVkIGxldmVsIDogIiwgbGV2ZWwpOwotICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibWF4IGxldmVsIDogIiwgTihmaXJzdGVwKSk7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJtYXggbGV2ZWwgOiAiLCBBUlJBWV9TSVpFKGZpcnN0ZXApKTsKICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIEFSX1BIWV9GSU5EX1NJRywKQEAgLTI4MywxMCArMjgwLDEwIEBACiAgICAgICAgIGNvbnN0IFRBQkxFIGN5Y3B3clRocjEgPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2IH07CiAgICAgICAgIHUzMl90IGxldmVsID0gcGFyYW07CiAKLSAgICAgICAgaWYgKGxldmVsID49IE4oY3ljcHdyVGhyMSkpCisgICAgICAgIGlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGN5Y3B3clRocjEpKQogICAgICAgICB7CiAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJsZXZlbCBvdXQgb2YgcmFuZ2UsIGRlc2lyZWQgbGV2ZWwgOiAiLCBsZXZlbCk7Ci0gICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJtYXggbGV2ZWwgOiAiLCBOKGN5Y3B3clRocjEpKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIEFSUkFZX1NJWkUoY3ljcHdyVGhyMSkpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX1RJTUlORzUsCkBAIC0zMzUsNyArMzMyLDYgQEAKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KICAgICByZXR1cm4gVFJVRTsKLSN1bmRlZiAgTgogfQogCiB2b2lkIHpmSHBBbmlSZXN0YXJ0KHpkZXZfdCogZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCmluZGV4IDVmNDEyZTAuLjZkMmQzNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgICAqIFJlZ2lzdGVyIHNldHRpbmcgYnkgbW9kZQogICAgICAqLwogCi0gICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZNb2RlcykgLyBzaXplb2YoKmFyNTQxNk1vZGVzKTsKKyAgICBlbnRyaWVzID0gQVJSQVlfU0laRShhcjU0MTZNb2Rlcyk7CiAgICAgem1fbXNnMV9zY2FuKFpNX0xWXzIsICJNb2RlcyByZWdpc3RlciBzZXR0aW5nIGVudHJpZXM9IiwgZW50cmllcyk7CiAgICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQogICAgIHsKQEAgLTQ5Niw3ICs0OTYsNyBAQAogICAgIC8qCiAgICAgICogQ29tbW9uIFJlZ2lzdGVyIHNldHRpbmcKICAgICAgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkNvbW1vbikgLyBzaXplb2YoKmFyNTQxNkNvbW1vbik7CisgICAgZW50cmllcyA9IEFSUkFZX1NJWkUoYXI1NDE2Q29tbW9uKTsKICAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2Q29tbW9uW2ldWzBdLCBhcjU0MTZDb21tb25baV1bMV0pOwpAQCAtNTA2LDcgKzUwNiw3IEBACiAgICAgLyoKICAgICAgKiBSRiBHYWluIHNldHRpbmcgYnkgZnJlcUluZGV4CiAgICAgICovCi0gICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCQl9SZkdhaW4pIC8gc2l6ZW9mKCphcjU0MTZCQl9SZkdhaW4pOworICAgIGVudHJpZXMgPSBBUlJBWV9TSVpFKGFyNTQxNkJCX1JmR2Fpbik7CiAgICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJCX1JmR2FpbltpXVswXSwgYXI1NDE2QkJfUmZHYWluW2ldW2ZyZXFJbmRleF0pOwpAQCAtOTYzLDcgKzk2Myw2IEBACiAvKiBCYW5rIDAgMSAyIDMgNSA2IDcgKi8KIHZvaWQgemZTZXRSZlJlZ3MoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSkKIHsKLSAgICB1MTZfdCBlbnRyaWVzOwogICAgIHUxNl90IGZyZXFJbmRleCA9IDA7CiAgICAgdTE2X3QgaTsKIApAQCAtOTg0LDMzICs5ODMsMjggQEAKICAgICB9CiAKICNpZiAxCi0gICAgZW50cmllcyA9IHNpemVvZihvdHVzQmFuaykgLyBzaXplb2YoKm90dXNCYW5rKTsKLSAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgZm9yIChpPTA7IGk8QVJSQVlfU0laRShvdHVzQmFuayk7IGkrKykKICAgICB7CiAgICAgICAgIHJlZ193cml0ZShvdHVzQmFua1tpXVswXSwgb3R1c0JhbmtbaV1bZnJlcUluZGV4XSk7CiAgICAgfQogI2Vsc2UKICAgICAvKiBCYW5rMCAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazApIC8gc2l6ZW9mKCphcjU0MTZCYW5rMCk7Ci0gICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUoYXI1NDE2QmFuazApOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazBbaV1bMF0sIGFyNTQxNkJhbmswW2ldWzFdKTsKICAgICB9CiAgICAgLyogQmFuazEgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbmsxKSAvIHNpemVvZigqYXI1NDE2QmFuazEpOwotICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGFyNTQxNkJhbmsxKTsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbmsxW2ldWzBdLCBhcjU0MTZCYW5rMVtpXVsxXSk7CiAgICAgfQogICAgIC8qIEJhbmsyICovCi0gICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCYW5rMikgLyBzaXplb2YoKmFyNTQxNkJhbmsyKTsKLSAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgZm9yIChpPTA7IGk8QVJSQVlfU0laRShhcjU0MTZCYW5rMik7IGkrKykKICAgICB7CiAgICAgICAgIHJlZ193cml0ZShhcjU0MTZCYW5rMltpXVswXSwgYXI1NDE2QmFuazJbaV1bMV0pOwogICAgIH0KICAgICAvKiBCYW5rMyAqLwotICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazMpIC8gc2l6ZW9mKCphcjU0MTZCYW5rMyk7Ci0gICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIGZvciAoaT0wOyBpPEFSUkFZX1NJWkUoYXI1NDE2QmFuazMpOyBpKyspCiAgICAgewogICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazNbaV1bMF0sIGFyNTQxNkJhbmszW2ldW2ZyZXFJbmRleF0pOwogICAgIH0KQEAgLTEwMTgsMTQgKzEwMTIsMTIgQEAKICAgICByZWdfd3JpdGUgKDB4OThiMCwgIDB4MDAwMDAwMTMpOwogICAgIHJlZ193cml0ZSAoMHg5OGU0LCAgMHgwMDAwMDAwMik7CiAgICAgLyogQmFuazYgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbms2KSAvIHNpemVvZigqYXI1NDE2QmFuazYpOwotICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGFyNTQxNkJhbms2KTsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbms2W2ldWzBdLCBhcjU0MTZCYW5rNltpXVtmcmVxSW5kZXhdKTsKICAgICB9CiAgICAgLyogQmFuazcgKi8KLSAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbms3KSAvIHNpemVvZigqYXI1NDE2QmFuazcpOwotICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICBmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGFyNTQxNkJhbms3KTsgaSsrKQogICAgIHsKICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbms3W2ldWzBdLCBhcjU0MTZCYW5rN1tpXVsxXSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwppbmRleCBkYTNiNzc0Li45YjA0NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwpAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgImhwcmVnLmgiCiAjaW5jbHVkZSAiaHB1c2IuaCIKIAotLyogdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZS4uLiAqLwotI2RlZmluZQlOKGEpCShzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCi0KICNkZWZpbmUgSEFMX01PREVfMTFBX1RVUkJPCUhBTF9NT0RFXzEwOEEKICNkZWZpbmUgSEFMX01PREVfMTFHX1RVUkJPCUhBTF9NT0RFXzEwOEcKIApAQCAtMTU1Nyw3ICsxNTU0LDcgQEAKIAl1NjRfdCBmbGFncyA9IE5PX1JFUTsKIAlSRUdfRE1OX1BBSVJfTUFQUElORyAqcmVnUGFpciA9IE5VTEw7CiAKLQlmb3IgKGkgPSAwLCBmb3VuZCA9IDA7IChpIDwgTihyZWdEb21haW5QYWlycykpICYmICghZm91bmQpOyBpKyspIHsKKwlmb3IgKGkgPSAwLCBmb3VuZCA9IDA7IChpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycykpICYmICghZm91bmQpOyBpKyspIHsKIAkJaWYgKHJlZ0RvbWFpblBhaXJzW2ldLnJlZ0RtbkVudW0gPT0gcmVnaW9uQ29kZSkgewogCQkJcmVnUGFpciA9ICZyZWdEb21haW5QYWlyc1tpXTsKIAkJCWZvdW5kID0gMTsKQEAgLTE1ODEsNyArMTU3OCw3IEBACiAJICogdW5pdGFyeSByZWcgZG9tYWluIG9mIHRoZSBwYWlyCiAJICovCiAKLQlmb3IgKGkgPSAwIDsgaSA8IE4ocmVnRG9tYWlucykgOyBpKyspIHsKKwlmb3IgKGkgPSAwIDsgaSA8IEFSUkFZX1NJWkUocmVnRG9tYWlucykgOyBpKyspIHsKIAkJaWYgKHJlZ0RvbWFpbnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKIAkJCWlmIChyZCAhPSBOVUxMKSB7CiAJCQkJCXpmTWVtb3J5Q29weSgodThfdCAqKXJkLCAodThfdCAqKSZyZWdEb21haW5zW2ldLApAQCAtMTY1Myw3ICsxNjUwLDcgQEAKIAogCXptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CiAKLQlmb3IgKGNtID0gbW9kZXM7IGNtIDwgJm1vZGVzW04obW9kZXMpXTsgY20rKykgeworCWZvciAoY20gPSBtb2RlczsgY20gPCAmbW9kZXNbQVJSQVlfU0laRShtb2RlcyldOyBjbSsrKSB7CiAJCXUxNl90IGM7CiAJCXU2NF90ICpjaGFubmVsQk0gPSBOVUxMOwogCQlSRUdfRE9NQUlOICpyZCA9IE5VTEw7CkBAIC0xODQ2LDcgKzE4NDMsNyBAQAogCiAJem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOKGFsbENvdW50cmllcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykgewogCQlpZiAoQ291bnRyeUNvZGUgPT0gYWxsQ291bnRyaWVzW2ldLmNvdW50cnlDb2RlKSB7CiAJCQlSZWdEb21haW4gPSBhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bTsKIApAQCAtMTg4MSw3ICsxODc4LDcgQEAKIAkJc3RyTGVuID0gMzsgKi8KIAl9CiAJLyogem1fZGVidWdfbXNnX3MoIkRlc2lyZWQgaXNvIG5hbWUgPSAiLCBpc29OYW1lKTsgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTihhbGxDb3VudHJpZXMpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxDb3VudHJpZXMpOyBpKyspIHsKIAkJLyogem1fZGVidWdfbXNnX3MoIkN1cnJlbnQgaXNvIG5hbWUgPSAiLCBhbGxDb3VudHJpZXNbaV0uaXNvTmFtZSk7ICovCiAJCWlmICh6Zk1lbW9yeUlzRXF1YWwoKHU4X3QgKilhbGxDb3VudHJpZXNbaV0uaXNvTmFtZSwgKHU4X3QgKikmY291bnRyeUluZm9bMl0sIGxlbmd0aC0xKSkgewogCQkJLyogRGJnUHJpbnQoIlNldCBjdXJyZW50IGlzbyBuYW1lID0gJXNcbiIsIGFsbENvdW50cmllc1tpXS5pc29OYW1lKTsgKi8KQEAgLTE5MzcsNyArMTkzNCw3IEBACiB7CiAJdTE2X3QgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBOKGFsbENvdW50cmllcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykgewogCQlpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmVnaW9uQ29kZSkKIAkJCXJldHVybiBhbGxDb3VudHJpZXNbaV0uaXNvTmFtZTsKIAl9CkBAIC0xOTUzLDcgKzE5NTAsNyBAQAogCS8qIGlmIG5vIG1hdGNoaW5nIGl0ZW0sIHJldHVybiBkZWZhdWx0ICovCiAJcmVnaW9uQ29kZSA9IERFRl9SRUdETU47CiAKLQlmb3IgKGkgPSAwOyBpIDwgTihhbGxDb3VudHJpZXMpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxDb3VudHJpZXMpOyBpKyspIHsKIAkJaWYgKHpmTWVtb3J5SXNFcXVhbCgodThfdCAqKWFsbENvdW50cmllc1tpXS5pc29OYW1lLCBjb3VudHJ5SXNvTmFtZSwgMikpIHsKIAkJCXJlZ2lvbkNvZGUgPSBhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYwppbmRleCBhNDhjOGU0Li5kYzMwNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKQEAgLTYzLDggKzYzLDcgQEAKIAogZXh0ZXJuIHUxNl90IHpmTG54R2V0VmFwSWQoemRldl90ICpkZXYpOwogCi1zdGF0aWMgY29uc3QgdTMyX3QgY2hhbm5lbF9mcmVxdWVuY3lfMTFBW10gPQoteworc3RhdGljIGNvbnN0IHUzMl90IGNoYW5uZWxfZnJlcXVlbmN5XzExQVtdID0gewogCS8qIEV2ZW4gZWxlbWVudCBmb3IgQ2hhbm5lbCBOdW1iZXIsIE9kZCBmb3IgRnJlcXVlbmN5ICovCiAJMzYsIDUxODAsCiAJNDAsIDUyMDAsCkBAIC01MDcsNyArNTA2LDcgQEAKIHsKIAkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCiAKLQlzdHJjcHkod3JxLT5uYW1lLCAiSUVFRSA4MDIuMTEtTUlNTyIpOworCXN0cmNweSh3cnEtPm5hbWUsICJJRUVFIDgwMi4xMWFiZ24iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM2MSw3ICsxMzYwLDcgQEAKIH0KIAogLyppbnQgdXNiZHJ2d2V4dF9zZXRwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotKgkJICAgCSB2b2lkICp3LCBjaGFyICpleHRyYSkKKyoJCQkJdm9pZCAqdywgY2hhciAqZXh0cmEpCiAqewogKglzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBkZXYtPm1sX3ByaXY7CiAqCXN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gdmFwLT5pdl9pYzsKQEAgLTIyNjEsMTAgKzIyNjAsMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ3ZC0+YXAud3BhTGVuIDogJSBkXG4iLCBsZW4pOwogCiAJCS8qIERVTVAgV1BBIElFICovCi0JCWZvcihpaSA9IDA7IGlpIDwgbGVuOykgeworCQlmb3IgKGlpID0gMDsgaWkgPCBsZW47KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB3cGFpZVtpaV0pOwogCi0JCQlpZigoKytpaSAlIDE2KSA9PSAwKQorCQkJaWYgKCgrK2lpICUgMTYpID09IDApCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKQEAgLTIzMDksMTEgKzIzMDgsMTAgQEAKIAkvKiBHZXQgdGhlIEFQIElkICovCiAJYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKIAotCWlmIChhcElkID09IDB4ZmZmZikgeworCWlmIChhcElkID09IDB4ZmZmZikKIAkJYXBJZCA9IDA7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWFwSWQgPSBhcElkICsgMTsKLQl9CiAKIAlzd2l0Y2ggKHpkcGFybS0+Y21kKSB7CiAJY2FzZSBaTV9DTURfQ0VOQ19TRVRDRU5DOgpAQCAtMjMzNCwxNSArMjMzMiwxNSBAQAogCiAJCXByaW50ayhLRVJOX0VSUiAiS2V5IEluZGV4IDogJSBkXG4iLCB6ZHBhcm0tPnUuY3J5cHQua2V5aWQpOwogCQlwcmludGsoS0VSTl9FUlIgIkVuY3J5cHRpb24ga2V5ID0gIik7Ci0JCWZvciAoaWkgPSAwOyBpaSA8IDE2OyBpaSsrKSB7CisJCWZvciAoaWkgPSAwOyBpaSA8IDE2OyBpaSsrKQogCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOwotCQl9CisKIAkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCiAJCXByaW50ayhLRVJOX0VSUiAiTUlDIGtleSA9ICIpOwotCQlmb3IoaWkgPSAxNjsgaWkgPCBaTV9DRU5DX0tFWV9TSVpFOyBpaSsrKSB7CisJCWZvciAoaWkgPSAxNjsgaWkgPCBaTV9DRU5DX0tFWV9TSVpFOyBpaSsrKQogCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOwotCQl9CisKIAkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCiAJCS8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KQEAgLTI0MjQsNyArMjQyMiw3IEBACiAJCWJyZWFrOwogCWNhc2UgU0lPQ1NJV1JUUzoKIAkJZXJyID0gdXNiZHJ2X2lvY3RsX3NldHJ0cyhkZXYsICZ3cnEtPnUucnRzKTsKLQkJaWYgKCEgZXJyKQorCQlpZiAoIWVycikKIAkJCWNoYW5nZWQgPSAxOwogCQlicmVhazsKIAkvKiBzZXRfYXV0aCAqLwpAQCAtMjU4Miw4ICsyNTgwLDcgQEAKIAkJCQkJCQlaTV9BVVRIX01PREVfV1BBKTsKIAkJCQkJfSBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKIAkJCQkJCShtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKLQkJCQkJCShtYWNwLT5zdXBJZVsxOV0gPT0gMHgyKSkKLQkJCQkJeworCQkJCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDIpKSB7CiAJCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLXG4iKTsKIAkJCQkvKiB3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7ICovCkBAIC0yNTkyLDggKzI1ODksNyBAQAogCQkJCVpNX0FVVEhfTU9ERV9XUEEyUFNLKTsKIAkJCX0gZWxzZSBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpICYmCiAJCQkJKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgotCQkJCShtYWNwLT5zdXBJZVsxOV0gPT0gMHgxKSkKLQkJCQl7CisJCQkJKG1hY3AtPnN1cEllWzE5XSA9PSAweDEpKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJcbiIpOwogCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsgKi8KQEAgLTI2MTgsNyArMjYxNCw3IEBACiAJCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fQUVTKTsKIAkJCQl9CiAJCQl9Ci0JCQkvL1dQQTIgb3IgV1BBMlBTSworCQkJLypXUEEyIG9yIFdQQTJQU0sqLwogCQkJaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSB8fAogCQkJCShtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykpIHsKIAkJCQlpZiAobWFjcC0+c3VwSWVbMTNdID09IDB4MikgewpAQCAtMjY1Niw3ICsyNjUyLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSIqKioqKioqKioqKioqKioqWkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTIDogIik7CiAKLQkJCWlmKGFyZykgeworCQkJaWYgKGFyZykgewogCQkJCS8qICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTE7ICovCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwogCQkJfSBlbHNlIHsKQEAgLTI2NjcsMjAgKzI2NjMsMTggQEAKIAkJaWYgKG9wID09IFpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQgOiAiKTsKIAotCQkJaWYoYXJnKSB7CisJCQlpZiAoYXJnKQogCQkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLQkJCX0KIAkJfQogCQlpZiAob3AgPT0gWkRfUEFSQU1fQVVUSF9BTEdTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0FVVEhfQUxHUyA6ICIpOwogCi0JCQlpZiAoYXJnID09IDApIHsKKwkJCWlmIChhcmcgPT0gMCkKIAkJCQlwcmludGsoS0VSTl9FUlIgIk9QRU5fU1lTVEVNXG4iKTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJTSEFSRURfS0VZXG4iKTsKLQkJCX0KIAkJfQogCQlpZiAob3AgPT0gWkRfUEFSQU1fV1BTX0ZJTFRFUikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUFNfRklMVEVSIDogIik7CkBAIC0yNzA1LDExICsyNjk5LDEwIEBACiAJCS8qIEdldCB0aGUgQVAgSWQgKi8KIAkJYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKIAotCQlpZiAoYXBJZCA9PSAweGZmZmYpIHsKKwkJaWYgKGFwSWQgPT0gMHhmZmZmKQogCQkJYXBJZCA9IDA7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCWFwSWQgPSBhcElkICsgMTsKLQkJfQogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxX3dwYWllLCBpZnItPmlmcl9kYXRhLAogCQkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKSB7CkBAIC0yNzIxLDEwICsyNzE0LDEwIEBACiAJCQlmb3IgKGogPSAwOyBqIDwgSUVFRTgwMjExX0FERFJfTEVOOyBqKyspIHsKIAkJCQlpZiAobWFjcC0+c3Rhd3BhaWVbaV0ud3BhX21hY2FkZHJbal0gIT0KIAkJCQkJCXJlcV93cGFpZS53cGFfbWFjYWRkcltqXSkKLQkJCQlicmVhazsKKwkJCQkJYnJlYWs7CiAJCQl9CiAJCQlpZiAoaiA9PSA2KQotCQkJYnJlYWs7CisJCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoaSA8IFpNX09BTF9NQVhfU1RBX1NVUFBPUlQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfc2VjLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3NlYy5jCmluZGV4IDBiMjM4ZTkuLjFmYmE3YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfc2VjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9zZWMuYwpAQCAtMzYsNyArMzYsNyBAQAogdTE2X3QgemZMbnhDZW5jQXNvY05vdGlmeSh6ZGV2X3QgKmRldiwgdTE2X3QgKm1hY0FkZHIsIHU4X3QgKmJvZHksCiAJCQkJdTE2X3QgYm9keVNpemUsIHUxNl90IHBvcnQpCiB7Ci0Jc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CiAJc3RydWN0IHp5ZGFzX2NlbmNfc3RhX2luZm8gY2VuY19pbmZvOwogCS8qIHN0cnVjdCBzb2NrICpuZXRsaW5rX3NrOwkqLwogCXU4X3QgaWVfbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfdXNiLmMKaW5kZXggOTM0NTljYS4uOWYwNDA0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3VzYi5jCkBAIC0xMDQsNiArMTA0LDExIEBACiAKIAlpZiAoc2l6ZSA+IDApIHsKIAkJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCQlwcl9lcnIoInpmd1VzYlN1Ym1pdENvbnRyb2woKSBmYWlsZWQsICIKKwkJCQkgICJrbWFsbG9jKCkgcmV0dXJuZWQgTlVMTFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQogCQltZW1jcHkoYnVmLCAodThfdCAqKWRhdGEsIHNpemUpOwogCX0gZWxzZQogCQlidWYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMKaW5kZXggYjAyZWI0Mi4uZmNkM2RhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCkBAIC0yOSwyNCArMjksMjQgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KIAotZXh0ZXJuIHZvaWQgemZpUmVjdjgwMjExKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKTsKLWV4dGVybiB2b2lkIHpmQ29yZVJlY3YoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pOwotZXh0ZXJuIHZvaWQgemZJZGxDaGtSc3AoemRldl90KiBkZXYsIHUzMl90KiByc3AsIHUxNl90IHJzcExlbik7Ci1leHRlcm4gdm9pZCB6ZklkbFJzcCh6ZGV2X3QqIGRldiwgdTMyX3QgKnJzcCwgdTE2X3QgcnNwTGVuKTsKK2V4dGVybiB2b2lkIHpmaVJlY3Y4MDIxMSh6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyAqYWRkSW5mbyk7CitleHRlcm4gdm9pZCB6ZkNvcmVSZWN2KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvKTsKK2V4dGVybiB2b2lkIHpmSWRsQ2hrUnNwKHpkZXZfdCAqZGV2LCB1MzJfdCAqcnNwLCB1MTZfdCByc3BMZW4pOworZXh0ZXJuIHZvaWQgemZJZGxSc3AoemRldl90ICpkZXYsIHUzMl90ICpyc3AsIHUxNl90IHJzcExlbik7CiAKIAogCi0vL2V4dGVybiBzdHJ1Y3QgenNXZHNTdHJ1Y3Qgd2RzW1pNX1dEU19QT1JUX05VTUJFUl07CisvKmV4dGVybiBzdHJ1Y3QgenNXZHNTdHJ1Y3Qgd2RzW1pNX1dEU19QT1JUX05VTUJFUl07Ki8KIGV4dGVybiBzdHJ1Y3QgenNWYXBTdHJ1Y3QgdmFwW1pNX1ZBUF9QT1JUX05VTUJFUl07CiAKLXUzMl90IHpmTG54VXNiU3VibWl0VHhEYXRhKHpkZXZfdCogZGV2KTsKLXUzMl90IHpmTG54VXNiSW4oemRldl90KiBkZXYsIHVyYl90ICp1cmIsIHpidWZfdCAqYnVmKTsKK3UzMl90IHpmTG54VXNiU3VibWl0VHhEYXRhKHpkZXZfdCAqZGV2KTsKK3UzMl90IHpmTG54VXNiSW4oemRldl90ICpkZXYsIHVyYl90ICp1cmIsIHpidWZfdCAqYnVmKTsKIHUzMl90IHpmTG54U3VibWl0UmVnSW5VcmIoemRldl90ICpkZXYpOwogdTMyX3QgemZMbnhVc2JTdWJtaXRCdWxrVXJiKHVyYl90ICp1cmIsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IsIHUxNl90IGVwbnVtLCB1MTZfdCBkaXJlY3Rpb24sCi0gICAgICAgIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KTsKKwl2b2lkICp0cmFuc2Zlcl9idWZmZXIsIGludCBidWZmZXJfbGVuZ3RoLCB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCk7CiB1MzJfdCB6ZkxueFVzYlN1Ym1pdEludFVyYih1cmJfdCAqdXJiLCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiLCB1MTZfdCBlcG51bSwgdTE2X3QgZGlyZWN0aW9uLAotICAgICAgICB2b2lkICp0cmFuc2Zlcl9idWZmZXIsIGludCBidWZmZXJfbGVuZ3RoLCB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCwKLSAgICAgICAgdTMyX3QgaW50ZXJ2YWwpOworCXZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0LAorCXUzMl90IGludGVydmFsKTsKIAogdTE2X3QgemZMbnhHZXRGcmVlVHhVcmIoemRldl90ICpkZXYpCiB7CkBAIC01NiwyMiArNTYsMTkgQEAKIAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIC8vaWR4ID0gKChtYWNwLT5UeFVyYlRhaWwgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsKKyAgICAvKmlkeCA9ICgobWFjcC0+VHhVcmJUYWlsICsgMSkgJiAoWk1fTUFYX1RYX1VSQl9OVU0gLSAxKSk7Ki8KIAotICAgIC8vaWYgKGlkeCAhPSBtYWNwLT5UeFVyYkhlYWQpCi0gICAgaWYgKG1hY3AtPlR4VXJiQ250ICE9IDApCi0gICAgewotICAgICAgICBpZHggPSBtYWNwLT5UeFVyYlRhaWw7Ci0gICAgICAgIG1hY3AtPlR4VXJiVGFpbCA9ICgobWFjcC0+VHhVcmJUYWlsICsgMSkgJiAoWk1fTUFYX1RYX1VSQl9OVU0gLSAxKSk7Ci0gICAgICAgIG1hY3AtPlR4VXJiQ250LS07Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJtYWNwLT5UeFVyYkNudDogJWRcbiIsIG1hY3AtPlR4VXJiQ250KTsKLSAgICAgICAgaWR4ID0gMHhmZmZmOwotICAgIH0KKyAgICAvKmlmIChpZHggIT0gbWFjcC0+VHhVcmJIZWFkKSovCisgICAgaWYgKG1hY3AtPlR4VXJiQ250ICE9IDApIHsKKwlpZHggPSBtYWNwLT5UeFVyYlRhaWw7CisJbWFjcC0+VHhVcmJUYWlsID0gKChtYWNwLT5UeFVyYlRhaWwgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsKKwltYWNwLT5UeFVyYkNudC0tOworCX0gZWxzZSB7CisJLypwcmludGsoS0VSTl9FUlIgIm1hY3AtPlR4VXJiQ250OiAlZFxuIiwgbWFjcC0+VHhVcmJDbnQpOyovCisJaWR4ID0gMHhmZmZmOworCX0KIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogICAgIHJldHVybiBpZHg7CiB9CiAKQEAgLTg1LDE2ICs4MiwxMyBAQAogCiAgICAgaWR4ID0gKChtYWNwLT5UeFVyYkhlYWQgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsKIAotICAgIC8vaWYgKGlkeCAhPSBtYWNwLT5UeFVyYlRhaWwpCi0gICAgaWYgKG1hY3AtPlR4VXJiQ250IDwgWk1fTUFYX1RYX1VSQl9OVU0pCi0gICAgewotICAgICAgICBtYWNwLT5UeFVyYkhlYWQgPSBpZHg7Ci0gICAgICAgIG1hY3AtPlR4VXJiQ250Kys7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHByaW50aygiVXNiVHhVcmJRIGluY29uc2lzdGVudDogVHhVcmJIZWFkOiAlZCwgVHhVcmJUYWlsOiAlZFxuIiwKLSAgICAgICAgICAgICAgICBtYWNwLT5UeFVyYkhlYWQsIG1hY3AtPlR4VXJiVGFpbCk7CisgICAgLyppZiAoaWR4ICE9IG1hY3AtPlR4VXJiVGFpbCkqLworICAgIGlmIChtYWNwLT5UeFVyYkNudCA8IFpNX01BWF9UWF9VUkJfTlVNKSB7CisJbWFjcC0+VHhVcmJIZWFkID0gaWR4OworCW1hY3AtPlR4VXJiQ250Kys7CisgICAgfSBlbHNlIHsKKwlwcmludGsoIlVzYlR4VXJiUSBpbmNvbnNpc3RlbnQ6IFR4VXJiSGVhZDogJWQsIFR4VXJiVGFpbDogJWRcbiIsCisJbWFjcC0+VHhVcmJIZWFkLCBtYWNwLT5UeFVyYlRhaWwpOwogICAgIH0KIAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwpAQCAtMTI1LDI0ICsxMTksMjAgQEAKIAogICAgIGlkeCA9ICgobWFjcC0+VHhCdWZIZWFkKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOwogCi0gICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4QnVmVGFpbCkKLSAgICBpZiAobWFjcC0+VHhCdWZDbnQgPiAwKQotICAgIHsKLSAgICAgICAgLy9wcmludGsoIkNXWSAtIHpmd0dldFVzYlR4QnVmZmVyICxtYWNwLT5UeEJ1ZkNudCA9ICVkXG4iLCBtYWNwLT5UeEJ1ZkNudCk7Ci0gICAgICAgIFR4USA9IChVc2JUeFFfdCAqKSYobWFjcC0+VXNiVHhCdWZRW21hY3AtPlR4QnVmSGVhZF0pOwotICAgICAgICBtYWNwLT5UeEJ1ZkhlYWQgPSAoKG1hY3AtPlR4QnVmSGVhZCsxKSAmIChaTV9NQVhfVFhfQlVGX05VTSAtIDEpKTsKLSAgICAgICAgbWFjcC0+VHhCdWZDbnQtLTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKG1hY3AtPlR4QnVmSGVhZCAhPSBtYWNwLT5UeEJ1ZlRhaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiemZ3R2V0VXNiVHhCdWYgVXNiVHhCdWZRIGluY29uc2lzdGVudDogVHhCdWZIZWFkOiAlZCwgVHhCdWZUYWlsOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbWFjcC0+VHhCdWZIZWFkLCBtYWNwLT5UeEJ1ZlRhaWwpOwotICAgICAgICB9CisgICAgLyppZiAoaWR4ICE9IG1hY3AtPlR4QnVmVGFpbCkqLworICAgIGlmIChtYWNwLT5UeEJ1ZkNudCA+IDApIHsKKwkvKnByaW50aygiQ1dZIC0gemZ3R2V0VXNiVHhCdWZmZXIgLG1hY3AtPlR4QnVmQ250ID0gJWRcbiIsIG1hY3AtPlR4QnVmQ250KTsqLworCVR4USA9IChVc2JUeFFfdCAqKSYobWFjcC0+VXNiVHhCdWZRW21hY3AtPlR4QnVmSGVhZF0pOworCW1hY3AtPlR4QnVmSGVhZCA9ICgobWFjcC0+VHhCdWZIZWFkKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOworCW1hY3AtPlR4QnVmQ250LS07CisJfSBlbHNlIHsKKwlpZiAobWFjcC0+VHhCdWZIZWFkICE9IG1hY3AtPlR4QnVmVGFpbCkgeworCQlwcmludGsoS0VSTl9FUlIgInpmd0dldFVzYlR4QnVmIFVzYlR4QnVmUSBpbmNvbnNpc3RlbnQ6IFR4QnVmSGVhZDogJWQsIFR4QnVmVGFpbDogJWRcbiIsCisJCW1hY3AtPlR4QnVmSGVhZCwgbWFjcC0+VHhCdWZUYWlsKTsKKwl9CiAKLSAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7Ci0gICAgICAgIHJldHVybiBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwpAQCAtMTUwLDggKzE0MCw4IEBACiB9CiAKIHUxNl90IHpmTG54UHV0VXNiVHhCdWZmZXIoemRldl90ICpkZXYsIHU4X3QgKmhkciwgdTE2X3QgaGRybGVuLAotICAgICAgICB1OF90ICpzbmFwLCB1MTZfdCBzbmFwTGVuLCB1OF90ICp0YWlsLCB1MTZfdCB0YWlsTGVuLAotICAgICAgICB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KQorCXU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sIHU4X3QgKnRhaWwsIHUxNl90IHRhaWxMZW4sCisJemJ1Zl90ICpidWYsIHUxNl90IG9mZnNldCkKIHsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAgICAgdTE2X3QgaWR4OwpAQCAtMTYzLDMyICsxNTMsMjkgQEAKICAgICBpZHggPSAoKG1hY3AtPlR4QnVmVGFpbCsxKSAmIChaTV9NQVhfVFhfQlVGX05VTSAtIDEpKTsKIAogICAgIC8qIEZvciBUeCBkZWJ1ZyAqLwotICAgIC8vem1fYXNzZXJ0KG1hY3AtPlR4QnVmQ250ID49IDApOyAvLyBkZWxldGVkIGJlY2F1c2Ugb2YgYWx3YXlzIHRydWUKKyAgICAvKnptX2Fzc2VydChtYWNwLT5UeEJ1ZkNudCA+PSAwKTsgLy8gZGVsZXRlZCBiZWNhdXNlIG9mIGFsd2F5cyB0cnVlKi8KIAotICAgIC8vaWYgKGlkeCAhPSBtYWNwLT5UeEJ1ZkhlYWQpCi0gICAgaWYgKG1hY3AtPlR4QnVmQ250IDwgWk1fTUFYX1RYX0JVRl9OVU0pCi0gICAgewotICAgICAgICAvL3ByaW50aygiQ1dZIC0gemZ3UHV0VXNiVHhCdWZmZXIgLG1hY3AtPlR4QnVmQ250ID0gJWRcbiIsIG1hY3AtPlR4QnVmQ250KTsKLSAgICAgICAgVHhRID0gKFVzYlR4UV90ICopJihtYWNwLT5Vc2JUeEJ1ZlFbbWFjcC0+VHhCdWZUYWlsXSk7Ci0gICAgICAgIG1lbWNweShUeFEtPmhkciwgaGRyLCBoZHJsZW4pOwotICAgICAgICBUeFEtPmhkcmxlbiA9IGhkcmxlbjsKLSAgICAgICAgbWVtY3B5KFR4US0+c25hcCwgc25hcCwgc25hcExlbik7Ci0gICAgICAgIFR4US0+c25hcExlbiA9IHNuYXBMZW47Ci0gICAgICAgIG1lbWNweShUeFEtPnRhaWwsIHRhaWwsIHRhaWxMZW4pOwotICAgICAgICBUeFEtPnRhaWxMZW4gPSB0YWlsTGVuOwotICAgICAgICBUeFEtPmJ1ZiA9IGJ1ZjsKLSAgICAgICAgVHhRLT5vZmZzZXQgPSBvZmZzZXQ7CisgICAgLyppZiAoaWR4ICE9IG1hY3AtPlR4QnVmSGVhZCkqLworICAgIGlmIChtYWNwLT5UeEJ1ZkNudCA8IFpNX01BWF9UWF9CVUZfTlVNKSB7CisJLypwcmludGsoIkNXWSAtIHpmd1B1dFVzYlR4QnVmZmVyICxtYWNwLT5UeEJ1ZkNudCA9ICVkXG4iLCBtYWNwLT5UeEJ1ZkNudCk7Ki8KKwlUeFEgPSAoVXNiVHhRX3QgKikmKG1hY3AtPlVzYlR4QnVmUVttYWNwLT5UeEJ1ZlRhaWxdKTsKKwltZW1jcHkoVHhRLT5oZHIsIGhkciwgaGRybGVuKTsKKwlUeFEtPmhkcmxlbiA9IGhkcmxlbjsKKwltZW1jcHkoVHhRLT5zbmFwLCBzbmFwLCBzbmFwTGVuKTsKKwlUeFEtPnNuYXBMZW4gPSBzbmFwTGVuOworCW1lbWNweShUeFEtPnRhaWwsIHRhaWwsIHRhaWxMZW4pOworCVR4US0+dGFpbExlbiA9IHRhaWxMZW47CisJVHhRLT5idWYgPSBidWY7CisJVHhRLT5vZmZzZXQgPSBvZmZzZXQ7CiAKLSAgICAgICAgbWFjcC0+VHhCdWZUYWlsID0gKChtYWNwLT5UeEJ1ZlRhaWwrMSkgJiAoWk1fTUFYX1RYX0JVRl9OVU0gLSAxKSk7Ci0gICAgICAgIG1hY3AtPlR4QnVmQ250Kys7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiemZMbnhQdXRVc2JUeEJ1ZmZlciBVc2JUeEJ1ZlEgaW5jb25zaXN0ZW50OiBUeEJ1ZkhlYWQ6ICVkLCBUeEJ1ZlRhaWw6ICVkLCBUeEJ1ZkNudDogJWRcbiIsCi0gICAgICAgICAgICBtYWNwLT5UeEJ1ZkhlYWQsIG1hY3AtPlR4QnVmVGFpbCwgbWFjcC0+VHhCdWZDbnQpOwotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKLSAgICAgICAgcmV0dXJuIDB4ZmZmZjsKLSAgICB9CisJbWFjcC0+VHhCdWZUYWlsID0gKChtYWNwLT5UeEJ1ZlRhaWwrMSkgJiAoWk1fTUFYX1RYX0JVRl9OVU0gLSAxKSk7CisJbWFjcC0+VHhCdWZDbnQrKzsKKwl9IGVsc2UgeworCXByaW50ayhLRVJOX0VSUiAiemZMbnhQdXRVc2JUeEJ1ZmZlciBVc2JUeEJ1ZlEgaW5jb25zaXN0ZW50OiBUeEJ1ZkhlYWQ6ICVkLCBUeEJ1ZlRhaWw6ICVkLCBUeEJ1ZkNudDogJWRcbiIsCisJCW1hY3AtPlR4QnVmSGVhZCwgbWFjcC0+VHhCdWZUYWlsLCBtYWNwLT5UeEJ1ZkNudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJcmV0dXJuIDB4ZmZmZjsKKwl9CiAKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKICAgICByZXR1cm4gMDsKQEAgLTE5NywyOCArMTg0LDI1IEBACiB6YnVmX3QgKnpmTG54R2V0VXNiUnhCdWZmZXIoemRldl90ICpkZXYpCiB7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIC8vdTE2X3QgaWR4OworICAgIC8qdTE2X3QgaWR4OyovCiAgICAgemJ1Zl90ICpidWY7CiAgICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOwogCiAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgLy9pZHggPSAoKG1hY3AtPlJ4QnVmSGVhZCsxKSAmIChaTV9NQVhfUlhfVVJCX05VTSAtIDEpKTsKKyAgICAvKmlkeCA9ICgobWFjcC0+UnhCdWZIZWFkKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOyovCiAKLSAgICAvL2lmIChpZHggIT0gbWFjcC0+UnhCdWZUYWlsKQotICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSAwKQotICAgIHsKLSAgICAgICAgYnVmID0gbWFjcC0+VXNiUnhCdWZRW21hY3AtPlJ4QnVmSGVhZF07Ci0gICAgICAgIG1hY3AtPlJ4QnVmSGVhZCA9ICgobWFjcC0+UnhCdWZIZWFkKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOwotICAgICAgICBtYWNwLT5SeEJ1ZkNudC0tOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBwcmludGsoIlJ4QnVmUSBpbmNvbnNpc3RlbnQ6IFJ4QnVmSGVhZDogJWQsIFJ4QnVmVGFpbDogJWRcbiIsCi0gICAgICAgICAgICAgICAgbWFjcC0+UnhCdWZIZWFkLCBtYWNwLT5SeEJ1ZlRhaWwpOwotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIC8qaWYgKGlkeCAhPSBtYWNwLT5SeEJ1ZlRhaWwpKi8KKyAgICBpZiAobWFjcC0+UnhCdWZDbnQgIT0gMCkgeworCWJ1ZiA9IG1hY3AtPlVzYlJ4QnVmUVttYWNwLT5SeEJ1ZkhlYWRdOworCW1hY3AtPlJ4QnVmSGVhZCA9ICgobWFjcC0+UnhCdWZIZWFkKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOworCW1hY3AtPlJ4QnVmQ250LS07CisgICAgfSBlbHNlIHsKKwlwcmludGsoIlJ4QnVmUSBpbmNvbnNpc3RlbnQ6IFJ4QnVmSGVhZDogJWQsIFJ4QnVmVGFpbDogJWRcbiIsCisJCW1hY3AtPlJ4QnVmSGVhZCwgbWFjcC0+UnhCdWZUYWlsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlyZXR1cm4gTlVMTDsKKwl9CiAKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKICAgICByZXR1cm4gYnVmOwpAQCAtMjM0LDYxICsyMTgsNTYgQEAKIAogICAgIGlkeCA9ICgobWFjcC0+UnhCdWZUYWlsKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOwogCi0gICAgLy9pZiAoaWR4ICE9IG1hY3AtPlJ4QnVmSGVhZCkKLSAgICBpZiAobWFjcC0+UnhCdWZDbnQgIT0gWk1fTUFYX1JYX1VSQl9OVU0pCi0gICAgewotICAgICAgICBtYWNwLT5Vc2JSeEJ1ZlFbbWFjcC0+UnhCdWZUYWlsXSA9IGJ1ZjsKLSAgICAgICAgbWFjcC0+UnhCdWZUYWlsID0gaWR4OwotICAgICAgICBtYWNwLT5SeEJ1ZkNudCsrOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBwcmludGsoIlJ4QnVmUSBpbmNvbnNpc3RlbnQ6IFJ4QnVmSGVhZDogJWQsIFJ4QnVmVGFpbDogJWRcbiIsCi0gICAgICAgICAgICAgICAgbWFjcC0+UnhCdWZIZWFkLCBtYWNwLT5SeEJ1ZlRhaWwpOwotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKLSAgICAgICAgcmV0dXJuIDB4ZmZmZjsKLSAgICB9CisgICAgLyppZiAoaWR4ICE9IG1hY3AtPlJ4QnVmSGVhZCkqLworICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSBaTV9NQVhfUlhfVVJCX05VTSkgeworCW1hY3AtPlVzYlJ4QnVmUVttYWNwLT5SeEJ1ZlRhaWxdID0gYnVmOworCW1hY3AtPlJ4QnVmVGFpbCA9IGlkeDsKKwltYWNwLT5SeEJ1ZkNudCsrOworICAgIH0gZWxzZSB7CisJcHJpbnRrKCJSeEJ1ZlEgaW5jb25zaXN0ZW50OiBSeEJ1ZkhlYWQ6ICVkLCBSeEJ1ZlRhaWw6ICVkXG4iLAorCQltYWNwLT5SeEJ1ZkhlYWQsIG1hY3AtPlJ4QnVmVGFpbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJcmV0dXJuIDB4ZmZmZjsKKwl9CiAKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKLSAgICByZXR1cm4gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCB6ZkxueFVzYkRhdGFPdXRfY2FsbGJhY2sodXJiX3QgKnVyYikKIHsKLSAgICB6ZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKLSAgICAvL1VzYlR4UV90ICpUeERhdGE7CisgICAgemRldl90ICpkZXYgPSB1cmItPmNvbnRleHQ7CisgICAgLypVc2JUeFFfdCAqVHhEYXRhOyovCiAKICAgICAvKiBHaXZlIHRoZSB1cmIgYmFjayAqLwogICAgIHpmTG54UHV0VHhVcmIoZGV2KTsKIAogICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW55IHBlbmRpbmcgYnVmZmVyIG5lZWRlZCAqLwogICAgIC8qIHRvIGJlIHNlbnQgKi8KLSAgICBpZiAoemZMbnhDaGVja1R4QnVmZmVyQ250KGRldikgIT0gMCkKLSAgICB7Ci0gICAgICAgIC8vVHhEYXRhID0gemZ3R2V0VXNiVHhCdWZmZXIoZGV2KTsKLQotICAgICAgICAvL2lmIChUeERhdGEgPT0gTlVMTCkKLSAgICAgICAgLy97Ci0gICAgICAgIC8vICAgIHByaW50aygiR2V0IGEgTlVMTCBidWZmZXIgZnJvbSB6ZndHZXRVc2JUeEJ1ZmZlclxuIik7Ci0gICAgICAgIC8vICAgIHJldHVybjsKLSAgICAgICAgLy99Ci0gICAgICAgIC8vZWxzZQotICAgICAgICAvL3sKLSAgICAgICAgICAgIHpmTG54VXNiU3VibWl0VHhEYXRhKGRldik7Ci0gICAgICAgIC8vfQorICAgIGlmICh6ZkxueENoZWNrVHhCdWZmZXJDbnQoZGV2KSAhPSAwKSB7CisJLypUeERhdGEgPSB6ZndHZXRVc2JUeEJ1ZmZlcihkZXYpOworCS8vaWYgKFR4RGF0YSA9PSBOVUxMKQorCS8veworCS8vICAgIHByaW50aygiR2V0IGEgTlVMTCBidWZmZXIgZnJvbSB6ZndHZXRVc2JUeEJ1ZmZlclxuIik7CisJLy8gICAgcmV0dXJuOworCS8vfQorCS8vZWxzZQorCS8veworCQl6ZkxueFVzYlN1Ym1pdFR4RGF0YShkZXYpOworCS8vfSovCiAgICAgfQogfQogCiB2b2lkIHpmTG54VXNiRGF0YUluX2NhbGxiYWNrKHVyYl90ICp1cmIpCiB7Ci0gICAgemRldl90KiBkZXYgPSB1cmItPmNvbnRleHQ7CisgICAgemRldl90ICpkZXYgPSB1cmItPmNvbnRleHQ7CiAgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogICAgIHpidWZfdCAqYnVmOwogICAgIHpidWZfdCAqbmV3X2J1ZjsKICAgICBpbnQgc3RhdHVzOwogCiAjaWYgWk1fVVNCX1NUUkVBTV9NT0RFID09IDEKLSAgICBzdGF0aWMgaW50IHJlbWFpbl9sZW4gPSAwLCBjaGVja19wYWQgPSAwLCBjaGVja19sZW4gPSAwOworICAgIHN0YXRpYyBpbnQgcmVtYWluX2xlbiwgY2hlY2tfcGFkLCBjaGVja19sZW47CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBpbnQgY2hrX2lkeDsKICAgICB1MTZfdCBwa3RfbGVuOwpAQCAtMjk5LDQ3ICsyNzgsNDUgQEAKICNlbmRpZgogCiAgICAgLyogQ2hlY2sgc3RhdHVzIGZvciBVUkIgKi8KLSAgICBpZiAodXJiLT5zdGF0dXMgIT0gMCl7Ci0gICAgICAgIHByaW50aygiemZMbnhVc2JEYXRhSW5fY2FsbGJhY2soKSA6IHN0YXR1cz0weCV4XG4iLCB1cmItPnN0YXR1cyk7Ci0gICAgICAgIGlmICgodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgJiYgKHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQotICAgICAgICAgICAgJiYgKHVyYi0+c3RhdHVzICE9IC1FU0hVVERPV04pKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSl7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUElQRSIpOwotICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAtMTsKLSAgICAgICAgICAgICAgICB9CisgICAgaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKKwlwcmludGsoInpmTG54VXNiRGF0YUluX2NhbGxiYWNrKCkgOiBzdGF0dXM9MHgleFxuIiwgdXJiLT5zdGF0dXMpOworCWlmICgodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgJiYgKHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkmJiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkgeworCQkJLypwcmludGsoS0VSTl9FUlIgIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFIik7Ki8KKwkJCXN0YXR1cyA9IC0xOworCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTyl7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUFJPVE8iKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CisJCQkvKnByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBST1RPIik7Ki8KKwkJCXN0YXR1cyA9IC0xOworCQl9CisJfQogCi0gICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJ1cmItPnN0YXR1czogMHglMDh4XG4iLCB1cmItPnN0YXR1cyk7CisJLypwcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsqLwogCi0gICAgICAgIC8qIERlcXVldWUgc2tiIGJ1ZmZlciAqLwotICAgICAgICBidWYgPSB6ZkxueEdldFVzYlJ4QnVmZmVyKGRldik7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfYW55KGJ1Zik7Ci0gICAgICAgICNpZiAwCi0gICAgICAgIC8qIEVucXVldWUgc2tiIGJ1ZmZlciAqLwotICAgICAgICB6ZkxueFB1dFVzYlJ4QnVmZmVyKGRldiwgYnVmKTsKKwkvKiBEZXF1ZXVlIHNrYiBidWZmZXIgKi8KKwlidWYgPSB6ZkxueEdldFVzYlJ4QnVmZmVyKGRldik7CisJZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKKwkjaWYgMAorCS8qIEVucXVldWUgc2tiIGJ1ZmZlciAqLworCXpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBidWYpOwogCi0gICAgICAgIC8qIFN1Ym1pdCBhIFJ4IHVyYiAqLwotICAgICAgICB6ZkxueFVzYkluKGRldiwgdXJiLCBidWYpOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwkvKiBTdWJtaXQgYSBSeCB1cmIgKi8KKwl6ZkxueFVzYkluKGRldiwgdXJiLCBidWYpOworCSNlbmRpZgorCXJldHVybjsKKwl9CiAKLSAgICBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgIkdldCBhbiBVUkIgd2hvc2UgbGVuZ3RoIGlzIHplcm8iKTsKLSAgICAgICAgc3RhdHVzID0gLTE7CisgICAgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CisJcHJpbnRrKEtFUk5fRVJSICJHZXQgYW4gVVJCIHdob3NlIGxlbmd0aCBpcyB6ZXJvIik7CisJc3RhdHVzID0gLTE7CiAgICAgfQogCiAgICAgLyogRGVxdWV1ZSBza2IgYnVmZmVyICovCiAgICAgYnVmID0gemZMbnhHZXRVc2JSeEJ1ZmZlcihkZXYpOwogCi0gICAgLy96ZndCdWZTZXRTaXplKGRldiwgYnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOworICAgIC8qemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsqLwogI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVAogICAgIGJ1Zi0+dGFpbCA9IDA7CiAgICAgYnVmLT5sZW4gPSAwOwpAQCAtMzUzLDEzNCArMzMwLDEyMiBAQAogICAgIHNrYl9wdXQoYnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAjaWYgWk1fVVNCX1NUUkVBTV9NT0RFID09IDEKLSAgICBpZiAocmVtYWluX2xlbiAhPSAwKQotICAgIHsKLSAgICAgICAgemJ1Zl90ICpyZW1haW5fYnVmID0gbWFjcC0+cmVhbWluX2J1ZjsKKyAgICBpZiAocmVtYWluX2xlbiAhPSAwKSB7CisJemJ1Zl90ICpyZW1haW5fYnVmID0gbWFjcC0+cmVhbWluX2J1ZjsKIAotICAgICAgICBpbmRleCA9IHJlbWFpbl9sZW47Ci0gICAgICAgIHJlbWFpbl9sZW4gLT0gY2hlY2tfcGFkOworCWluZGV4ID0gcmVtYWluX2xlbjsKKwlyZW1haW5fbGVuIC09IGNoZWNrX3BhZDsKIAotICAgICAgICAvKiAgQ29weSBkYXRhICovCi0gICAgICAgIG1lbWNweSgmKHJlbWFpbl9idWYtPmRhdGFbY2hlY2tfbGVuXSksIGJ1Zi0+ZGF0YSwgcmVtYWluX2xlbik7Ci0gICAgICAgIGNoZWNrX2xlbiArPSByZW1haW5fbGVuOwotICAgICAgICByZW1haW5fbGVuID0gMDsKKwkvKiAgQ29weSBkYXRhICovCisJbWVtY3B5KCYocmVtYWluX2J1Zi0+ZGF0YVtjaGVja19sZW5dKSwgYnVmLT5kYXRhLCByZW1haW5fbGVuKTsKKwljaGVja19sZW4gKz0gcmVtYWluX2xlbjsKKwlyZW1haW5fbGVuID0gMDsKIAotICAgICAgICByeEJ1ZlBvb2xbcnhCdWZQb29sSW5kZXgrK10gPSByZW1haW5fYnVmOworCXJ4QnVmUG9vbFtyeEJ1ZlBvb2xJbmRleCsrXSA9IHJlbWFpbl9idWY7CiAgICAgfQogCi0gICAgd2hpbGUoaW5kZXggPCB1cmItPmFjdHVhbF9sZW5ndGgpCi0gICAgewotICAgICAgICBwa3RfbGVuID0gYnVmLT5kYXRhW2luZGV4XSArIChidWYtPmRhdGFbaW5kZXgrMV0gPDwgOCk7Ci0gICAgICAgIHBrdF90YWcgPSBidWYtPmRhdGFbaW5kZXgrMl0gKyAoYnVmLT5kYXRhW2luZGV4KzNdIDw8IDgpOworICAgIHdoaWxlIChpbmRleCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCXBrdF9sZW4gPSBidWYtPmRhdGFbaW5kZXhdICsgKGJ1Zi0+ZGF0YVtpbmRleCsxXSA8PCA4KTsKKwlwa3RfdGFnID0gYnVmLT5kYXRhW2luZGV4KzJdICsgKGJ1Zi0+ZGF0YVtpbmRleCszXSA8PCA4KTsKIAotICAgICAgICBpZiAocGt0X3RhZyA9PSAweDRlMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBwYWRfbGVuOworCWlmIChwa3RfdGFnID09IDB4NGUwMCkgeworCQlpbnQgcGFkX2xlbjsKIAotICAgICAgICAgICAgLy9wcmludGsoIkdldCBhIHBhY2tldCwgaW5kZXg6ICVkLCBwa3RfbGVuOiAweCUwNHhcbiIsIGluZGV4LCBwa3RfbGVuKTsKLSAgICAgICAgICAgICNpZiAwCi0gICAgICAgICAgICAvKiBEdW1wIGRhdGEgKi8KLSAgICAgICAgICAgIGZvciAoaWkgPSBpbmRleDsgaWkgPCBwa3RfbGVuKzQ7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50aygiJTAyeCAiLCAoYnVmLT5kYXRhW2lpXSAmIDB4ZmYpKTsKKwkJLypwcmludGsoIkdldCBhIHBhY2tldCwgaW5kZXg6ICVkLCBwa3RfbGVuOiAweCUwNHhcbiIsIGluZGV4LCBwa3RfbGVuKTsqLworCQkjaWYgMAorCQkvKiBEdW1wIGRhdGEgKi8KKwkJZm9yIChpaSA9IGluZGV4OyBpaSA8IHBrdF9sZW4rNDspIHsKKwkJCXByaW50aygiJTAyeCAiLCAoYnVmLT5kYXRhW2lpXSAmIDB4ZmYpKTsKIAotICAgICAgICAgICAgICAgIGlmICgoKytpaSAlIDE2KSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICB9CisJCQlpZiAoKCsraWkgJSAxNikgPT0gMCkKKwkJCXByaW50aygiXG4iKTsKKwkJCX0KIAotICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgI2VuZGlmCisJCQlwcmludGsoIlxuIik7CisJCSNlbmRpZgogCi0gICAgICAgICAgICBwYWRfbGVuID0gNCAtIChwa3RfbGVuICYgMHgzKTsKKwkJcGFkX2xlbiA9IDQgLSAocGt0X2xlbiAmIDB4Myk7CiAKLSAgICAgICAgICAgIGlmKHBhZF9sZW4gPT0gNCkKLSAgICAgICAgICAgICAgICBwYWRfbGVuID0gMDsKKwkJaWYgKHBhZF9sZW4gPT0gNCkKKwkJcGFkX2xlbiA9IDA7CiAKLSAgICAgICAgICAgIGNoa19pZHggPSBpbmRleDsKLSAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyA0ICsgcGt0X2xlbiArIHBhZF9sZW47CisJCWNoa19pZHggPSBpbmRleDsKKwkJaW5kZXggPSBpbmRleCArIDQgKyBwa3RfbGVuICsgcGFkX2xlbjsKIAotICAgICAgICAgICAgaWYgKGluZGV4ID4gWk1fTUFYX1JYX0JVRkZFUl9TSVpFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlbWFpbl9sZW4gPSBpbmRleCAtIFpNX01BWF9SWF9CVUZGRVJfU0laRTsgLy8gLSBwYWRfbGVuOwotICAgICAgICAgICAgICAgIGNoZWNrX2xlbiA9IFpNX01BWF9SWF9CVUZGRVJfU0laRSAtIGNoa19pZHggLSA0OwotICAgICAgICAgICAgICAgIGNoZWNrX3BhZCA9IHBhZF9sZW47CisJCWlmIChpbmRleCA+IFpNX01BWF9SWF9CVUZGRVJfU0laRSkgeworCQkJcmVtYWluX2xlbiA9IGluZGV4IC0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFOyAvKiAtIHBhZF9sZW47Ki8KKwkJCWNoZWNrX2xlbiA9IFpNX01BWF9SWF9CVUZGRVJfU0laRSAtIGNoa19pZHggLSA0OworCQkJY2hlY2tfcGFkID0gcGFkX2xlbjsKIAotICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIC8vbmV3X2J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKLSAgICAgICAgICAgICAgICBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCQkJLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCisJCQkvKm5ld19idWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIFpNX01BWF9SWF9CVUZGRVJfU0laRSk7Ki8KKwkJCW5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CiAKLSAgICAgICAgICAgICAgICAvKiBTZXQgc2tiIGJ1ZmZlciBsZW5ndGggKi8KLSAgICAgICAgICAgICNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKLSAgICAgICAgICAgICAgICBuZXdfYnVmLT50YWlsID0gMDsKLSAgICAgICAgICAgICAgICBuZXdfYnVmLT5sZW4gPSAwOwotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgICAgICBuZXdfYnVmLT50YWlsID0gbmV3X2J1Zi0+ZGF0YTsKLSAgICAgICAgICAgICAgICBuZXdfYnVmLT5sZW4gPSAwOwotICAgICAgICAgICAgI2VuZGlmCisJCQkvKiBTZXQgc2tiIGJ1ZmZlciBsZW5ndGggKi8KKwkJCSNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKKwkJCW5ld19idWYtPnRhaWwgPSAwOworCQkJbmV3X2J1Zi0+bGVuID0gMDsKKwkJCSNlbHNlCisJCQluZXdfYnVmLT50YWlsID0gbmV3X2J1Zi0+ZGF0YTsKKwkJCW5ld19idWYtPmxlbiA9IDA7CisJCQkjZW5kaWYKIAotICAgICAgICAgICAgICAgIHNrYl9wdXQobmV3X2J1ZiwgcGt0X2xlbik7CisJCQlza2JfcHV0KG5ld19idWYsIHBrdF9sZW4pOwogCi0gICAgICAgICAgICAgICAgLyogQ29weSB0aGUgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgbWVtY3B5KG5ld19idWYtPmRhdGEsICYoYnVmLT5kYXRhW2Noa19pZHgrNF0pLCBjaGVja19sZW4pOworCQkJLyogQ29weSB0aGUgYnVmZmVyICovCisJCQltZW1jcHkobmV3X2J1Zi0+ZGF0YSwgJihidWYtPmRhdGFbY2hrX2lkeCs0XSksIGNoZWNrX2xlbik7CiAKLSAgICAgICAgICAgICAgICAvKiBSZWNvcmQgdGhlIGJ1ZmZlciBwb2ludGVyICovCi0gICAgICAgICAgICAgICAgbWFjcC0+cmVhbWluX2J1ZiA9IG5ld19idWY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICNpZmRlZiBaTV9ET05UX0NPUFlfUlhfQlVGRkVSCi0gICAgICAgICAgICAgICAgaWYgKHJ4QnVmUG9vbEluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdfYnVmID0gc2tiX2Nsb25lKGJ1ZiwgR0ZQX0FUT01JQyk7CisJCQkvKiBSZWNvcmQgdGhlIGJ1ZmZlciBwb2ludGVyICovCisJCQltYWNwLT5yZWFtaW5fYnVmID0gbmV3X2J1ZjsKKwkJfSBlbHNlICB7CisJCQkjaWZkZWYgWk1fRE9OVF9DT1BZX1JYX0JVRkZFUgorCQkJaWYgKHJ4QnVmUG9vbEluZGV4ID09IDApIHsKKwkJCQluZXdfYnVmID0gc2tiX2Nsb25lKGJ1ZiwgR0ZQX0FUT01JQyk7CiAKLSAgICAgICAgICAgICAgICAgICAgbmV3X2J1Zi0+ZGF0YSA9ICYoYnVmLT5kYXRhW2Noa19pZHgrNF0pOwotICAgICAgICAgICAgICAgICAgICBuZXdfYnVmLT5sZW4gPSBwa3RfbGVuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCQkJCW5ld19idWYtPmRhdGEgPSAmKGJ1Zi0+ZGF0YVtjaGtfaWR4KzRdKTsKKwkJCQluZXdfYnVmLT5sZW4gPSBwa3RfbGVuOworCQkJfSBlbHNlICB7CisJCQkJI2VuZGlmCisJCQkJLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCisJCQkJbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKIAotICAgICAgICAgICAgICAgIC8qIFNldCBza2IgYnVmZmVyIGxlbmd0aCAqLwotICAgICAgICAgICAgI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVAotICAgICAgICAgICAgICAgIG5ld19idWYtPnRhaWwgPSAwOwotICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IDA7Ci0gICAgICAgICAgICAjZWxzZQotICAgICAgICAgICAgICAgIG5ld19idWYtPnRhaWwgPSBuZXdfYnVmLT5kYXRhOwotICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IDA7Ci0gICAgICAgICAgICAjZW5kaWYKKwkJCQkvKiBTZXQgc2tiIGJ1ZmZlciBsZW5ndGggKi8KKwkJCQkjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCisJCQkJbmV3X2J1Zi0+dGFpbCA9IDA7CisJCQkJbmV3X2J1Zi0+bGVuID0gMDsKKwkJCQkjZWxzZQorCQkJCW5ld19idWYtPnRhaWwgPSBuZXdfYnVmLT5kYXRhOworCQkJCW5ld19idWYtPmxlbiA9IDA7CisJCQkJI2VuZGlmCiAKLSAgICAgICAgICAgICAgICBza2JfcHV0KG5ld19idWYsIHBrdF9sZW4pOworCQkJCXNrYl9wdXQobmV3X2J1ZiwgcGt0X2xlbik7CiAKLSAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBtZW1jcHkobmV3X2J1Zi0+ZGF0YSwgJihidWYtPmRhdGFbY2hrX2lkeCs0XSksIHBrdF9sZW4pOworCQkJCS8qIENvcHkgdGhlIGJ1ZmZlciAqLworCQkJCW1lbWNweShuZXdfYnVmLT5kYXRhLCAmKGJ1Zi0+ZGF0YVtjaGtfaWR4KzRdKSwgcGt0X2xlbik7CiAKLSAgICAgICAgI2lmZGVmIFpNX0RPTlRfQ09QWV9SWF9CVUZGRVIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgIHJ4QnVmUG9vbFtyeEJ1ZlBvb2xJbmRleCsrXSA9IG5ld19idWY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGZpbmQgdGFnLCBwa3RfbGVuOiAweCUwNHgsIHRhZzogMHglMDR4XG4iLCBwa3RfbGVuLCBwa3RfdGFnKTsKKwkJCQkjaWZkZWYgWk1fRE9OVF9DT1BZX1JYX0JVRkZFUgorCQkJCX0KKwkJCSNlbmRpZgorCQkJcnhCdWZQb29sW3J4QnVmUG9vbEluZGV4KytdID0gbmV3X2J1ZjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCB0YWcsIHBrdF9sZW46IDB4JTA0eCwgdGFnOiAweCUwNHhcbiIsIHBrdF9sZW4sIHBrdF90YWcpOwogCi0gICAgICAgICAgICAvKiBGcmVlIGJ1ZmZlciAqLwotICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKKwkJCS8qIEZyZWUgYnVmZmVyICovCisJCQlkZXZfa2ZyZWVfc2tiX2FueShidWYpOwogCi0gICAgICAgICAgICAvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KLSAgICAgICAgICAgIG5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CisJCQkvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KKwkJCW5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CiAKLSAgICAgICAgICAgIC8qIEVucXVldWUgc2tiIGJ1ZmZlciAqLwotICAgICAgICAgICAgemZMbnhQdXRVc2JSeEJ1ZmZlcihkZXYsIG5ld19idWYpOworCQkJLyogRW5xdWV1ZSBza2IgYnVmZmVyICovCisJCQl6ZkxueFB1dFVzYlJ4QnVmZmVyKGRldiwgbmV3X2J1Zik7CiAKLSAgICAgICAgICAgIC8qIFN1Ym1pdCBhIFJ4IHVyYiAqLwotICAgICAgICAgICAgemZMbnhVc2JJbihkZXYsIHVyYiwgbmV3X2J1Zik7CisJCQkvKiBTdWJtaXQgYSBSeCB1cmIgKi8KKwkJCXpmTG54VXNiSW4oZGV2LCB1cmIsIG5ld19idWYpOwogCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisJCQlyZXR1cm47CisJCQl9CisJCX0KIAogICAgIC8qIEZyZWUgYnVmZmVyICovCiAgICAgZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKQEAgLTQ5Niw5ICs0NjEsOCBAQAogICAgIHpmTG54VXNiSW4oZGV2LCB1cmIsIG5ld19idWYpOwogCiAjaWYgWk1fVVNCX1NUUkVBTV9NT0RFID09IDEKLSAgICBmb3IoaWkgPSAwOyBpaSA8IHJ4QnVmUG9vbEluZGV4OyBpaSsrKQotICAgIHsKLSAgICAgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYlJlY3YoZGV2LCByeEJ1ZlBvb2xbaWldKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCByeEJ1ZlBvb2xJbmRleDsgaWkrKykgeworCW1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JSZWN2KGRldiwgcnhCdWZQb29sW2lpXSk7CiAgICAgfQogI2Vsc2UKICAgICAvKiBwYXNzIGRhdGEgdG8gdXBwZXIgbGF5ZXIgKi8KQEAgLTUwOCw1MSArNDcyLDQ4IEBACiAKIHZvaWQgemZMbnhVc2JSZWdPdXRfY2FsbGJhY2sodXJiX3QgKnVyYikKIHsKLSAgICAvL2Rldl90KiBkZXYgPSB1cmItPmNvbnRleHQ7CisgICAgLypkZXZfdCogZGV2ID0gdXJiLT5jb250ZXh0OyovCiAKLSAgICAvL3ByaW50ayhLRVJOX0VSUiAiemZ3VXNiUmVnT3V0X2NhbGxiYWNrXG4iKTsKKwkvKnByaW50ayhLRVJOX0VSUiAiemZ3VXNiUmVnT3V0X2NhbGxiYWNrXG4iKTsqLwogfQogCiB2b2lkIHpmTG54VXNiUmVnSW5fY2FsbGJhY2sodXJiX3QgKnVyYikKIHsKLSAgICB6ZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKKyAgICB6ZGV2X3QgKmRldiA9IHVyYi0+Y29udGV4dDsKICAgICB1MzJfdCByc3BbNjQvNF07CiAgICAgaW50IHN0YXR1czsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKICAgICAvKiBDaGVjayBzdGF0dXMgZm9yIFVSQiAqLwotICAgIGlmICh1cmItPnN0YXR1cyAhPSAwKXsKLSAgICAgICAgcHJpbnRrKCJ6ZkxueFVzYlJlZ0luX2NhbGxiYWNrKCkgOiBzdGF0dXM9MHgleFxuIiwgdXJiLT5zdGF0dXMpOwotICAgICAgICBpZiAoKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQpICYmICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkKLSAgICAgICAgICAgICYmICh1cmItPnN0YXR1cyAhPSAtRVNIVVRET1dOKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpewotICAgICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgICAgICAgICAgICAgfQorICAgIGlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJcHJpbnRrKCJ6ZkxueFVzYlJlZ0luX2NhbGxiYWNrKCkgOiBzdGF0dXM9MHgleFxuIiwgdXJiLT5zdGF0dXMpOworCWlmICgodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgJiYgKHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikpIHsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FUElQRSkgeworCQkJLypwcmludGsoS0VSTl9FUlIgIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogLUVQSVBFIik7Ki8KKwkJCXN0YXR1cyA9IC0xOworCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTyl7Ci0gICAgICAgICAgICAgICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6IC1FUFJPVE8iKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CisJCQkvKnByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBST1RPIik7Ki8KKwkJCXN0YXR1cyA9IC0xOworCQl9CisJfQogCi0gICAgICAgIC8vcHJpbnRrKEtFUk5fRVJSICJ1cmItPnN0YXR1czogMHglMDh4XG4iLCB1cmItPnN0YXR1cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJLypwcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsqLworCXJldHVybjsKKwl9CiAKLSAgICBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgIkdldCBhbiBVUkIgd2hvc2UgbGVuZ3RoIGlzIHplcm8iKTsKLSAgICAgICAgc3RhdHVzID0gLTE7CisgICAgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKSB7CisJcHJpbnRrKEtFUk5fRVJSICJHZXQgYW4gVVJCIHdob3NlIGxlbmd0aCBpcyB6ZXJvIik7CisJc3RhdHVzID0gLTE7CiAgICAgfQogCiAgICAgLyogQ29weSBkYXRhIGludG8gcmVzcG9uZSBidWZmZXIgKi8KICAgICBtZW1jcHkocnNwLCBtYWNwLT5yZWdVc2JSZWFkQnVmLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAgICAgLyogTm90aWZ5IHRvIHVwcGVyIGxheWVyICovCi0gICAgLy96ZklkbENoa1JzcChkZXYsIHJzcCwgKHUxNl90KXVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0gICAgLy96ZmlVc2JSZWdJbihkZXYsIHJzcCwgKHUxNl90KXVyYi0+YWN0dWFsX2xlbmd0aCk7CisgICAgLyp6ZklkbENoa1JzcChkZXYsIHJzcCwgKHUxNl90KXVyYi0+YWN0dWFsX2xlbmd0aCk7Ki8KKyAgICAvKnpmaVVzYlJlZ0luKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsqLwogICAgIG1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JSZWdJbihkZXYsIHJzcCwgKHUxNl90KXVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKICAgICAvKiBJc3N1ZSBhbm90aGVyIFVTQiBJTiBVUkIgKi8KQEAgLTU2NCwyMiArNTI1LDIyIEBACiAgICAgdTMyX3QgcmV0OwogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIC8qIFN1Ym1pdCBhIHJ4IHVyYiAqLworICAgIC8qIFN1Ym1pdCBhIHJ4IHVyYgogICAgIC8vcmV0ID0gemZMbnhVc2JTdWJtaXRCdWxrVXJiKG1hY3AtPlJlZ0luVXJiLCBtYWNwLT51ZGV2LAogICAgIC8vICAgICAgICBVU0JfUkVHX0lOX1BJUEUsIFVTQl9ESVJfSU4sIG1hY3AtPnJlZ1VzYlJlYWRCdWYsCiAgICAgLy8gICAgICAgIFpNX1VTQl9SRUdfTUFYX0JVRl9TSVpFLCB6ZkxueFVzYlJlZ0luX2NhbGxiYWNrLCBkZXYpOwogICAgIC8vQ1dZYW5nKC0pCiAgICAgLy9pZiAocmV0ICE9IDApCi0gICAgLy8gICAgcHJpbnRrKCJ6ZndVc2JTdWJtaXRCdWxrVXJiIGZhaWwsIHN0YXR1czogMHglMDh4XG4iLCAoaW50KXJldCk7CisgICAgLy8gICAgcHJpbnRrKCJ6ZndVc2JTdWJtaXRCdWxrVXJiIGZhaWwsIHN0YXR1czogMHglMDh4XG4iLCAoaW50KXJldCk7Ki8KIAogICAgIHJldCA9IHpmTG54VXNiU3VibWl0SW50VXJiKG1hY3AtPlJlZ0luVXJiLCBtYWNwLT51ZGV2LAotICAgICAgICAgICAgVVNCX1JFR19JTl9QSVBFLCBVU0JfRElSX0lOLCBtYWNwLT5yZWdVc2JSZWFkQnVmLAotICAgICAgICAgICAgWk1fVVNCX1JFR19NQVhfQlVGX1NJWkUsIHpmTG54VXNiUmVnSW5fY2FsbGJhY2ssIGRldiwgMSk7CisJVVNCX1JFR19JTl9QSVBFLCBVU0JfRElSX0lOLCBtYWNwLT5yZWdVc2JSZWFkQnVmLAorCVpNX1VTQl9SRUdfTUFYX0JVRl9TSVpFLCB6ZkxueFVzYlJlZ0luX2NhbGxiYWNrLCBkZXYsIDEpOwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotdTMyX3QgemZMbnhVc2JTdWJtaXRUeERhdGEoemRldl90KiBkZXYpCit1MzJfdCB6ZkxueFVzYlN1Ym1pdFR4RGF0YSh6ZGV2X3QgKmRldikKIHsKICAgICB1MzJfdCBpOwogICAgIHUzMl90IHJldDsKQEAgLTYwMCwzOSArNTYxLDMzIEBACiAgICAgZnJlZVR4VXJiID0gemZMbnhHZXRGcmVlVHhVcmIoZGV2KTsKIAogICAgIC8qIElmIHRoZXJlIGlzIG5vIGFueSBmcmVlIFR4IFVyYiAqLwotICAgIGlmIChmcmVlVHhVcmIgPT0gMHhmZmZmKQotICAgIHsKLSAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCBmcmVlIFR4IFVyYlxuIik7Ci0gICAgICAgIC8vcHJpbnRrKCJDV1kgLSBDYW4ndCBnZXQgZnJlZSBUeCBVcmJcbiIpOwotICAgICAgICByZXR1cm4gMHhmZmZmOworICAgIGlmIChmcmVlVHhVcmIgPT0gMHhmZmZmKSB7CisJLypwcmludGsoS0VSTl9FUlIgIkNhbid0IGdldCBmcmVlIFR4IFVyYlxuIik7CisJLy9wcmludGsoIkNXWSAtIENhbid0IGdldCBmcmVlIFR4IFVyYlxuIik7Ki8KKwlyZXR1cm4gMHhmZmZmOwogICAgIH0KIAogI2lmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSA9PSAxCiAgICAgdXNiVHhBZ2dDbnQgPSB6ZkxueENoZWNrVHhCdWZmZXJDbnQoZGV2KTsKIAotICAgIGlmICh1c2JUeEFnZ0NudCA+PSBaTV9NQVhfVFhfQUdHUkVHQVRFX05VTSkKLSAgICB7Ci0gICAgICAgdXNiVHhBZ2dDbnQgPSBaTV9NQVhfVFhfQUdHUkVHQVRFX05VTTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICB1c2JUeEFnZ0NudCA9IDE7CisgICAgaWYgKHVzYlR4QWdnQ250ID49IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNKSB7CisJdXNiVHhBZ2dDbnQgPSBaTV9NQVhfVFhfQUdHUkVHQVRFX05VTTsKKyAgICB9IGVsc2UgeworCXVzYlR4QWdnQ250ID0gMTsKICAgICB9CiAKLSAgICAvL3ByaW50aygidXNiVHhBZ2dDbnQ6ICVkXG4iLCB1c2JUeEFnZ0NudCk7CisgICAgLypwcmludGsoInVzYlR4QWdnQ250OiAlZFxuIiwgdXNiVHhBZ2dDbnQpOyovCiAjZW5kaWYKIAogI2lmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSA9PSAxCi0gICAgZm9yKGlpID0gMDsgaWkgPCB1c2JUeEFnZ0NudDsgaWkrKykKLSAgICB7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgdXNiVHhBZ2dDbnQ7IGlpKyspIHsKICNlbmRpZgogICAgIC8qIERlcXVldWUgdGhlIHBhY2tldCBmcm9tIFVzYlR4QnVmUSAqLwogICAgIFR4RGF0YSA9IHpmTG54R2V0VXNiVHhCdWZmZXIoZGV2KTsKLSAgICBpZiAoVHhEYXRhID09IE5VTEwpCi0gICAgewotICAgICAgICAvKiBHaXZlIHRoZSB1cmIgYmFjayAqLwotICAgICAgICB6ZkxueFB1dFR4VXJiKGRldik7Ci0gICAgICAgIHJldHVybiAweGZmZmY7CisgICAgaWYgKFR4RGF0YSA9PSBOVUxMKSB7CisJLyogR2l2ZSB0aGUgdXJiIGJhY2sgKi8KKwl6ZkxueFB1dFR4VXJiKGRldik7CisJcmV0dXJuIDB4ZmZmZjsKICAgICB9CiAKICAgICAvKiBQb2ludCB0byB0aGUgZnJlZVR4VXJiIGJ1ZmZlciAqLwpAQCAtNjQ0LDExNCArNTk5LDEwMyBAQAogCiAgICAgLyogQWRkIHRoZSBwYWNrZXQgbGVuZ3RoIGFuZCB0YWcgaW5mb3JtYXRpb24gKi8KICAgICAqcFVzYlR4SGRyKysgPSBUeERhdGEtPmhkcmxlbiArIFR4RGF0YS0+c25hcExlbiArCi0gICAgICAgICAgICAgKFR4RGF0YS0+YnVmLT5sZW4gLSBUeERhdGEtPm9mZnNldCkgKyAgVHhEYXRhLT50YWlsTGVuOworCShUeERhdGEtPmJ1Zi0+bGVuIC0gVHhEYXRhLT5vZmZzZXQpICsgIFR4RGF0YS0+dGFpbExlbjsKIAogICAgICpwVXNiVHhIZHIrKyA9IDB4Njk3ZTsKIAogICAgIHB1VHhCdWYgKz0gNDsKLSNlbmRpZiAvLyAjaWZkZWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFCisjZW5kaWYgLyogI2lmZGVmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSovCiAKICAgICAvKiBDb3B5IFdMQU4gaGVhZGVyIGFuZCBwYWNrZXQgYnVmZmVyIGludG8gVVNCIGJ1ZmZlciAqLwotICAgIGZvcihpID0gMDsgaSA8IFR4RGF0YS0+aGRybGVuOyBpKyspCi0gICAgewotICAgICAgICAqcHVUeEJ1ZisrID0gVHhEYXRhLT5oZHJbaV07CisgICAgZm9yIChpID0gMDsgaSA8IFR4RGF0YS0+aGRybGVuOyBpKyspIHsKKwkqcHVUeEJ1ZisrID0gVHhEYXRhLT5oZHJbaV07CiAgICAgfQogCiAgICAgLyogQ29weSBTTkFQIGhlYWRlciAqLwotICAgIGZvcihpID0gMDsgaSA8IFR4RGF0YS0+c25hcExlbjsgaSsrKQotICAgIHsKLSAgICAgICAgKnB1VHhCdWYrKyA9IFR4RGF0YS0+c25hcFtpXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgVHhEYXRhLT5zbmFwTGVuOyBpKyspIHsKKwkqcHVUeEJ1ZisrID0gVHhEYXRhLT5zbmFwW2ldOwogICAgIH0KIAogICAgIC8qIENvcHkgcGFja2V0IGJ1ZmZlciAqLwotICAgIGZvcihpID0gMDsgaSA8IFR4RGF0YS0+YnVmLT5sZW4gLSBUeERhdGEtPm9mZnNldDsgaSsrKQotICAgIHsKLSAgICAJLy8qcHVUeEJ1ZisrID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIFR4RGF0YS0+YnVmLCBpKTsKLSAgICAJKnB1VHhCdWYrKyA9ICoodThfdCopKCh1OF90KilUeERhdGEtPmJ1Zi0+ZGF0YStpK1R4RGF0YS0+b2Zmc2V0KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgVHhEYXRhLT5idWYtPmxlbiAtIFR4RGF0YS0+b2Zmc2V0OyBpKyspIHsKKwkvKnB1VHhCdWYrKyA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBUeERhdGEtPmJ1ZiwgaSk7Ki8KKwkqcHVUeEJ1ZisrID0gKih1OF90ICopKCh1OF90ICopVHhEYXRhLT5idWYtPmRhdGEraStUeERhdGEtPm9mZnNldCk7CiAgICAgfQogCiAgICAgLyogQ29weSB0YWlsICovCi0gICAgZm9yKGkgPSAwOyBpIDwgVHhEYXRhLT50YWlsTGVuOyBpKyspCi0gICAgewotICAgICAgICAqcHVUeEJ1ZisrID0gVHhEYXRhLT50YWlsW2ldOworICAgIGZvciAoaSA9IDA7IGkgPCBUeERhdGEtPnRhaWxMZW47IGkrKykgeworCSpwdVR4QnVmKysgPSBUeERhdGEtPnRhaWxbaV07CiAgICAgfQogCiAgICAgbGVuID0gVHhEYXRhLT5oZHJsZW4rVHhEYXRhLT5zbmFwTGVuK1R4RGF0YS0+YnVmLT5sZW4rVHhEYXRhLT50YWlsTGVuLVR4RGF0YS0+b2Zmc2V0OwogCiAgICAgI2lmIDAKLSAgICBpZiAoVHhEYXRhLT5oZHJsZW4gIT0gMCkKLSAgICB7Ci0gICAgICAgIHB1VHhCdWYgPSBtYWNwLT50eFVzYkJ1ZltmcmVlVHhVcmJdOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50aygiJTAyeCAiLCBwdVR4QnVmW2ldKTsKLSAgICAgICAgICAgIGlmIChpICUgMTYgPT0gMTUpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50aygiXG4iKTsKLSAgICB9CisgICAgaWYgKFR4RGF0YS0+aGRybGVuICE9IDApIHsKKwlwdVR4QnVmID0gbWFjcC0+dHhVc2JCdWZbZnJlZVR4VXJiXTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJcHJpbnRrKCIlMDJ4ICIsIHB1VHhCdWZbaV0pOworCQlpZiAoaSAlIDE2ID09IDE1KQorCQlwcmludGsoIlxuIik7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KICAgICAjZW5kaWYKICAgICAjaWYgMAogICAgIC8qIEZvciBkZWJ1ZyBwdXJwb3NlICovCi0gICAgaWYoVHhEYXRhLT5oZHJbOV0gJiAweDQwKQotICAgIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIHUxNl90IGN0cmxMZW4gPSBUeERhdGEtPmhkclswXSArIChUeERhdGEtPmhkclsxXSA8PCA4KTsKKyAgICBpZiAoVHhEYXRhLT5oZHJbOV0gJiAweDQwKSB7CisJaW50IGk7CisJdTE2X3QgY3RybExlbiA9IFR4RGF0YS0+aGRyWzBdICsgKFR4RGF0YS0+aGRyWzFdIDw8IDgpOwogCi0gICAgICAgIGlmIChjdHJsTGVuICE9IGxlbiArIDQpCi0gICAgICAgIHsKLSAgICAgICAgLyogRHVtcCBjb250cm9sIHNldHRpbmcgKi8KLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCBUeERhdGEtPmhkcltpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCWlmIChjdHJsTGVuICE9IGxlbiArIDQpIHsKKwkvKiBEdW1wIGNvbnRyb2wgc2V0dGluZyAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgVHhEYXRhLT5oZHJbaV0pOworCX0KKwlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjdHJMZW46ICVkLCBoZHJMZW46ICVkLCBzbmFwTGVuOiAlZFxuIiwgY3RybExlbiwgVHhEYXRhLT5oZHJsZW4sIFR4RGF0YS0+c25hcExlbik7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnVmTGVuOiAlZCwgdGFpbExlbjogJWQsIGxlbjogJWRcbiIsIFR4RGF0YS0+YnVmLT5sZW4sIFR4RGF0YS0+dGFpbExlbiwgbGVuKTsKLSAgICAgICAgfQorCXByaW50ayhLRVJOX0VSUiAiY3RyTGVuOiAlZCwgaGRyTGVuOiAlZCwgc25hcExlbjogJWRcbiIsIGN0cmxMZW4sIFR4RGF0YS0+aGRybGVuLCBUeERhdGEtPnNuYXBMZW4pOworCXByaW50ayhLRVJOX0VSUiAiYnVmTGVuOiAlZCwgdGFpbExlbjogJWQsIGxlbjogJWRcbiIsIFR4RGF0YS0+YnVmLT5sZW4sIFR4RGF0YS0+dGFpbExlbiwgbGVuKTsKKwl9CiAgICAgfQogICAgICNlbmRpZgogCiAjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKLSAgICAvLyBBZGQgdGhlIExlbmd0aCBhbmQgVGFnCisgICAgLyogQWRkIHRoZSBMZW5ndGggYW5kIFRhZyovCiAgICAgbGVuICs9IDQ7CiAKLSAgICAvL3ByaW50aygiJWQgcGFja2V0LCBsZW5ndGg6ICVkXG4iLCBpaSsxLCBsZW4pOworICAgIC8qcHJpbnRrKCIlZCBwYWNrZXQsIGxlbmd0aDogJWRcbiIsIGlpKzEsIGxlbik7Ki8KIAotICAgIGlmIChpaSA8IChaTV9NQVhfVFhfQUdHUkVHQVRFX05VTS0xKSkKLSAgICB7Ci0gICAgICAgIC8qIFBhZCB0aGUgYnVmZmVyIHRvIGZpcm13YXJlIGRlc2NyaXB0b3IgYm91bmRhcnkgKi8KLSAgICAgICAgb2Zmc2V0ICs9ICgoKGxlbi0xKSAvIDQpICsgMSkgKiA0OworICAgIGlmIChpaSA8IChaTV9NQVhfVFhfQUdHUkVHQVRFX05VTS0xKSkgeworCS8qIFBhZCB0aGUgYnVmZmVyIHRvIGZpcm13YXJlIGRlc2NyaXB0b3IgYm91bmRhcnkgKi8KKwlvZmZzZXQgKz0gKCgobGVuLTEpIC8gNCkgKyAxKSAqIDQ7CiAgICAgfQogCi0gICAgaWYgKGlpID09IChaTV9NQVhfVFhfQUdHUkVHQVRFX05VTS0xKSkKLSAgICB7Ci0gICAgICAgIGxlbiArPSBvZmZzZXQ7CisgICAgaWYgKGlpID09IChaTV9NQVhfVFhfQUdHUkVHQVRFX05VTS0xKSkgeworCWxlbiArPSBvZmZzZXQ7CiAgICAgfQogCiAgICAgVHhRUG9vbFtpaV0gPSBUeERhdGE7CiAKLSAgICAvL0RiZ1ByaW50KCIlZCBwYWNrZXQsIG9mZnNldDogJWRcbiIsIGlpKzEsIHBVc2JUeFRyYW5zZmVyLT5vZmZzZXQpOworICAgIC8qRGJnUHJpbnQoIiVkIHBhY2tldCwgb2Zmc2V0OiAlZFxuIiwgaWkrMSwgcFVzYlR4VHJhbnNmZXItPm9mZnNldCk7Ki8KIAogICAgIC8qIGZyZWUgcGFja2V0ICovCi0gICAgLy96ZkJ1ZkZyZWUoZGV2LCB0eERhdGEtPmJ1Zik7CisgICAgLyp6ZkJ1ZkZyZWUoZGV2LCB0eERhdGEtPmJ1Zik7Ki8KICAgICB9CiAjZW5kaWYKLSAgICAvL3ByaW50aygiQ1dZIC0gY2FsbCB6ZndVc2JTdWJtaXRCdWxrVXJiKCksIGxlbiA9IDB4JWRcbiIsIGxlbik7CisgICAgLypwcmludGsoIkNXWSAtIGNhbGwgemZ3VXNiU3VibWl0QnVsa1VyYigpLCBsZW4gPSAweCVkXG4iLCBsZW4pOyovCiAgICAgLyogU3VibWl0IGEgdHggdXJiICovCiAgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRCdWxrVXJiKG1hY3AtPldsYW5UeERhdGFVcmJbZnJlZVR4VXJiXSwgbWFjcC0+dWRldiwKLSAgICAgICAgICAgIFVTQl9XTEFOX1RYX1BJUEUsIFVTQl9ESVJfT1VULCBtYWNwLT50eFVzYkJ1ZltmcmVlVHhVcmJdLAotICAgICAgICAgICAgbGVuLCB6ZkxueFVzYkRhdGFPdXRfY2FsbGJhY2ssIGRldik7Ci0gICAgLy9DV1lhbmcoLSkKKwlVU0JfV0xBTl9UWF9QSVBFLCBVU0JfRElSX09VVCwgbWFjcC0+dHhVc2JCdWZbZnJlZVR4VXJiXSwKKwlsZW4sIHpmTG54VXNiRGF0YU91dF9jYWxsYmFjaywgZGV2KTsKKyAgICAvKkNXWWFuZygtKQogICAgIC8vaWYgKHJldCAhPSAwKQotICAgIC8vICAgIHByaW50aygiemZ3VXNiU3VibWl0QnVsa1VyYiBmYWlsLCBzdGF0dXM6IDB4JTA4eFxuIiwgKGludClyZXQpOworICAgIC8vICAgIHByaW50aygiemZ3VXNiU3VibWl0QnVsa1VyYiBmYWlsLCBzdGF0dXM6IDB4JTA4eFxuIiwgKGludClyZXQpOyovCiAKICAgICAvKiBmcmVlIHBhY2tldCAqLwotICAgIC8vZGV2X2tmcmVlX3NrYl9hbnkoVHhEYXRhLT5idWYpOworICAgIC8qZGV2X2tmcmVlX3NrYl9hbnkoVHhEYXRhLT5idWYpOyovCiAjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKLSAgICBmb3IoaWkgPSAwOyBpaSA8IHVzYlR4QWdnQ250OyBpaSsrKQotICAgICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiT3V0Q29tcGxldGUoZGV2LCBUeFFQb29sW2lpXS0+YnVmLCAxLCBUeFFQb29sW2lpXS0+aGRyKTsKKyAgICBmb3IgKGlpID0gMDsgaWkgPCB1c2JUeEFnZ0NudDsgaWkrKykKKwltYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiT3V0Q29tcGxldGUoZGV2LCBUeFFQb29sW2lpXS0+YnVmLCAxLCBUeFFQb29sW2lpXS0+aGRyKTsKICNlbHNlCiAgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYk91dENvbXBsZXRlKGRldiwgVHhEYXRhLT5idWYsIDEsIFR4RGF0YS0+aGRyKTsKICNlbmRpZgpAQCAtNzYxLDIzICs3MDUsMjMgQEAKIAogCiAKLXUzMl90IHpmTG54VXNiSW4oemRldl90KiBkZXYsIHVyYl90ICp1cmIsIHpidWZfdCAqYnVmKQordTMyX3QgemZMbnhVc2JJbih6ZGV2X3QgKmRldiwgdXJiX3QgKnVyYiwgemJ1Zl90ICpidWYpCiB7CiAgICAgdTMyX3QgcmV0OwogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAogICAgIC8qIFN1Ym1pdCBhIHJ4IHVyYiAqLwogICAgIHJldCA9IHpmTG54VXNiU3VibWl0QnVsa1VyYih1cmIsIG1hY3AtPnVkZXYsIFVTQl9XTEFOX1JYX1BJUEUsCi0gICAgICAgICAgICBVU0JfRElSX0lOLCBidWYtPmRhdGEsIFpNX01BWF9SWF9CVUZGRVJfU0laRSwKLSAgICAgICAgICAgIHpmTG54VXNiRGF0YUluX2NhbGxiYWNrLCBkZXYpOwotICAgIC8vQ1dZYW5nKC0pCisJVVNCX0RJUl9JTiwgYnVmLT5kYXRhLCBaTV9NQVhfUlhfQlVGRkVSX1NJWkUsCisJemZMbnhVc2JEYXRhSW5fY2FsbGJhY2ssIGRldik7CisgICAgLypDV1lhbmcoLSkKICAgICAvL2lmIChyZXQgIT0gMCkKLSAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsKKyAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsqLwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotdTMyX3QgemZMbnhVc2JXcml0ZVJlZyh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuKQordTMyX3QgemZMbnhVc2JXcml0ZVJlZyh6ZGV2X3QgKmRldiwgdTMyX3QgKmNtZCwgdTE2X3QgY21kTGVuKQogewogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKICAgICB1MzJfdCByZXQ7CkBAIC03ODUsNyArNzI5LDcgQEAKICNpZmRlZiBaTV9DT05GSUdfQklHX0VORElBTgogICAgIGludCBpaSA9IDA7CiAKLSAgICBmb3IoaWk9MDsgaWk8KGNtZExlbj4+Mik7IGlpKyspCisgICAgZm9yIChpaSA9IDA7IGlpIDwgKGNtZExlbj4+Mik7IGlpKyspCiAJY21kW2lpXSA9IGNwdV90b19sZTMyKGNtZFtpaV0pOwogI2VuZGlmCiAKQEAgLTc5NCwzOSArNzM4LDM4IEBACiAgICAgLyogSXNzdWUgYW4gVVNCIE91dCB0cmFuc2ZlciAqLwogICAgIC8qIFN1Ym1pdCBhIHR4IHVyYiAqLwogICAgIHJldCA9IHpmTG54VXNiU3VibWl0SW50VXJiKG1hY3AtPlJlZ091dFVyYiwgbWFjcC0+dWRldiwKLSAgICAgICAgICAgIFVTQl9SRUdfT1VUX1BJUEUsIFVTQl9ESVJfT1VULCBtYWNwLT5yZWdVc2JXcml0ZUJ1ZiwKLSAgICAgICAgICAgIGNtZExlbiwgemZMbnhVc2JSZWdPdXRfY2FsbGJhY2ssIGRldiwgMSk7CisJVVNCX1JFR19PVVRfUElQRSwgVVNCX0RJUl9PVVQsIG1hY3AtPnJlZ1VzYldyaXRlQnVmLAorCWNtZExlbiwgemZMbnhVc2JSZWdPdXRfY2FsbGJhY2ssIGRldiwgMSk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCiAKLXUzMl90IHpmTG54VXNiT3V0KHpkZXZfdCogZGV2LCB1OF90ICpoZHIsIHUxNl90IGhkcmxlbiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwKLSAgICAgICAgdThfdCAqdGFpbCwgdTE2X3QgdGFpbExlbiwgemJ1Zl90ICpidWYsIHUxNl90IG9mZnNldCkKK3UzMl90IHpmTG54VXNiT3V0KHpkZXZfdCAqZGV2LCB1OF90ICpoZHIsIHUxNl90IGhkcmxlbiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwKKwl1OF90ICp0YWlsLCB1MTZfdCB0YWlsTGVuLCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KQogewogICAgIHUzMl90IHJldDsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKICAgICAvKiBDaGVjayBsZW5ndGggb2YgdGFpbCBidWZmZXIgKi8KLSAgICAvL3ptX2Fzc2VydCgodGFpbExlbiA8PSAxNikpOworICAgIC8qem1fYXNzZXJ0KCh0YWlsTGVuIDw9IDE2KSk7Ki8KIAogICAgIC8qIEVucXVldWUgdGhlIHBhY2tldCBpbnRvIFVzYlR4QnVmUSAqLwotICAgIGlmICh6ZkxueFB1dFVzYlR4QnVmZmVyKGRldiwgaGRyLCBoZHJsZW4sIHNuYXAsIHNuYXBMZW4sIHRhaWwsIHRhaWxMZW4sIGJ1Ziwgb2Zmc2V0KSA9PSAweGZmZmYpCi0gICAgewotICAgICAgICAvKiBmcmVlIHBhY2tldCAqLwotICAgICAgICAvL3ByaW50aygiQ1dZIC0gemZ3UHV0VXNiVHhCdWZmZXIgRXJyb3IsIGZyZWUgcGFja2V0XG4iKTsKLSAgICAgICAgLy9kZXZfa2ZyZWVfc2tiX2FueShidWYpOwotICAgICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiT3V0Q29tcGxldGUoZGV2LCBidWYsIDAsIGhkcik7Ci0gICAgICAgIHJldHVybiAweGZmZmY7Ci0gICAgfQorICAgIGlmICh6ZkxueFB1dFVzYlR4QnVmZmVyKGRldiwgaGRyLCBoZHJsZW4sIHNuYXAsIHNuYXBMZW4sIHRhaWwsIHRhaWxMZW4sIGJ1Ziwgb2Zmc2V0KSA9PSAweGZmZmYpIHsKKwkvKiBmcmVlIHBhY2tldCAqLworCS8qcHJpbnRrKCJDV1kgLSB6ZndQdXRVc2JUeEJ1ZmZlciBFcnJvciwgZnJlZSBwYWNrZXRcbiIpOworCS8vZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsqLworCW1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JPdXRDb21wbGV0ZShkZXYsIGJ1ZiwgMCwgaGRyKTsKKwlyZXR1cm4gMHhmZmZmOworCX0KIAotICAgIC8vcmV0dXJuIDA7Ci0gICAgLy9wcmludGsoIkNXWSAtIGNhbGwgemZ3VXNiU3VibWl0VHhEYXRhKClcbiIpOworICAgIC8qcmV0dXJuIDA7CisgICAgLy9wcmludGsoIkNXWSAtIGNhbGwgemZ3VXNiU3VibWl0VHhEYXRhKClcbiIpOyovCiAgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRUeERhdGEoZGV2KTsKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkIHpmTG54SW5pdFVzYlR4USh6ZGV2X3QqIGRldikKK3ZvaWQgemZMbnhJbml0VXNiVHhRKHpkZXZfdCAqZGV2KQogewogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIApAQCAtODQyLDcgKzc4NSw3IEBACiAgICAgbWFjcC0+VHhVcmJDbnQgPSBaTV9NQVhfVFhfVVJCX05VTTsKIH0KIAotdm9pZCB6ZkxueEluaXRVc2JSeFEoemRldl90KiBkZXYpCit2b2lkIHpmTG54SW5pdFVzYlJ4USh6ZGV2X3QgKmRldikKIHsKICAgICB1MTZfdCBpOwogICAgIHpidWZfdCAqYnVmOwpAQCAtODUzLDc2ICs3OTYsNjUgQEAKIAogICAgIG1hY3AtPlJ4QnVmSGVhZCA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgWk1fTUFYX1JYX1VSQl9OVU07IGkrKykKLSAgICB7Ci0gICAgICAgIC8vYnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOwotICAgICAgICBidWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7Ci0gICAgICAgIG1hY3AtPlVzYlJ4QnVmUVtpXSA9IGJ1ZjsKLSAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9SWF9VUkJfTlVNOyBpKyspIHsKKwkvKmJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsqLworCWJ1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKKwltYWNwLT5Vc2JSeEJ1ZlFbaV0gPSBidWY7CisJfQogCi0gICAgLy9tYWNwLT5SeEJ1ZlRhaWwgPSBaTV9NQVhfUlhfVVJCX05VTSAtIDE7CisgICAgLyptYWNwLT5SeEJ1ZlRhaWwgPSBaTV9NQVhfUlhfVVJCX05VTSAtIDE7Ki8KICAgICBtYWNwLT5SeEJ1ZlRhaWwgPSAwOwogCiAgICAgLyogU3VibWl0IGFsbCBSeCB1cmJzICovCi0gICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9SWF9VUkJfTlVNOyBpKyspCi0gICAgewotICAgICAgICB6ZkxueFB1dFVzYlJ4QnVmZmVyKGRldiwgbWFjcC0+VXNiUnhCdWZRW2ldKTsKLSAgICAgICAgemZMbnhVc2JJbihkZXYsIG1hY3AtPldsYW5SeERhdGFVcmJbaV0sIG1hY3AtPlVzYlJ4QnVmUVtpXSk7Ci0gICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfUlhfVVJCX05VTTsgaSsrKSB7CisJemZMbnhQdXRVc2JSeEJ1ZmZlcihkZXYsIG1hY3AtPlVzYlJ4QnVmUVtpXSk7CisJemZMbnhVc2JJbihkZXYsIG1hY3AtPldsYW5SeERhdGFVcmJbaV0sIG1hY3AtPlVzYlJ4QnVmUVtpXSk7CisJfQogfQogCiAKIAogdTMyX3QgemZMbnhVc2JTdWJtaXRCdWxrVXJiKHVyYl90ICp1cmIsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IsIHUxNl90IGVwbnVtLCB1MTZfdCBkaXJlY3Rpb24sCi0gICAgICAgIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KQorCXZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KQogewogICAgIHUzMl90IHJldDsKIAotICAgIGlmKGRpcmVjdGlvbiA9PSBVU0JfRElSX09VVCkKLSAgICB7Ci0gICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiLCB1c2Jfc25kYnVsa3BpcGUodXNiLCBlcG51bSksCi0gICAgICAgICAgICAgICAgdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBVU0JfRElSX09VVCkgeworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdXNiLCB1c2Jfc25kYnVsa3BpcGUodXNiLCBlcG51bSksCisJCXRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQpOwogCi0gICAgICAgIHVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYiwgdXNiX3JjdmJ1bGtwaXBlKHVzYiwgZXBudW0pLAotICAgICAgICAgICAgICAgIHRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQpOworCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOworICAgIH0gZWxzZSB7CisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2IsIHVzYl9yY3ZidWxrcGlwZSh1c2IsIGVwbnVtKSwKKwkJdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCk7CiAgICAgfQogCi0gICAgaWYgKGVwbnVtID09IDQpCi0gICAgewotICAgICAgICBpZiAodXJiLT5oY3ByaXYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vcHJpbnRrKCJDV1kgLSB1cmItPmhjcHJpdiBzZXQgYnkgdW5rbm93biByZWFzb24sIHJlc2V0IGl0XG4iKTsKLSAgICAgICAgICAgIC8vdXJiLT5oY3ByaXYgPSAwOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChlcG51bSA9PSA0KSB7CisJaWYgKHVyYi0+aGNwcml2KSB7CisJCS8qcHJpbnRrKCJDV1kgLSB1cmItPmhjcHJpdiBzZXQgYnkgdW5rbm93biByZWFzb24sIHJlc2V0IGl0XG4iKTsKKwkJLy91cmItPmhjcHJpdiA9IDA7Ki8KKwkJfQorCX0KIAogICAgIHJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0gICAgaWYgKChlcG51bSA9PSA0KSAmIChyZXQgIT0gMCkpCi0gICAgewotICAgICAgICAvL3ByaW50aygiQ1dZIC0gcmV0ID0gJXhcbiIsIHJldCk7CisgICAgaWYgKChlcG51bSA9PSA0KSAmIChyZXQgIT0gMCkpIHsKKwkvKnByaW50aygiQ1dZIC0gcmV0ID0gJXhcbiIsIHJldCk7Ki8KICAgICB9CiAgICAgcmV0dXJuIHJldDsKIH0KIAogdTMyX3QgemZMbnhVc2JTdWJtaXRJbnRVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKLSAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQsCi0gICAgICAgIHUzMl90IGludGVydmFsKQorCXZvaWQgKnRyYW5zZmVyX2J1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgsIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0LAorCXUzMl90IGludGVydmFsKQogewogICAgIHUzMl90IHJldDsKIAotICAgIGlmKGRpcmVjdGlvbiA9PSBVU0JfRElSX09VVCkKLSAgICB7Ci0gICAgICAgIHVzYl9maWxsX2ludF91cmIodXJiLCB1c2IsIHVzYl9zbmRidWxrcGlwZSh1c2IsIGVwbnVtKSwKLSAgICAgICAgICAgICAgICB0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0LCBpbnRlcnZhbCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVzYl9maWxsX2ludF91cmIodXJiLCB1c2IsIHVzYl9yY3ZidWxrcGlwZSh1c2IsIGVwbnVtKSwKLSAgICAgICAgICAgICAgICB0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0LCBpbnRlcnZhbCk7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBVU0JfRElSX09VVCkgeworCXVzYl9maWxsX2ludF91cmIodXJiLCB1c2IsIHVzYl9zbmRidWxrcGlwZSh1c2IsIGVwbnVtKSwKKwkJdHJhbnNmZXJfYnVmZmVyLCBidWZmZXJfbGVuZ3RoLCBjb21wbGV0ZSwgY29udGV4dCwgaW50ZXJ2YWwpOworICAgIH0gZWxzZSB7CisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3JjdmJ1bGtwaXBlKHVzYiwgZXBudW0pLAorCXRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQsIGludGVydmFsKTsKICAgICB9CiAKICAgICByZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtOTQ2LDUxICs4NzgsNDggQEAKIAlzaXplID0gTkxNU0dfU1BBQ0UobGVuKTsKIAlza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0FUT01JQyk7CiAKLQlpZihza2IgPT0gTlVMTCkKLQl7CisJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCXByaW50aygiZGV2X2FsbG9jX3NrYiBmYWlsdXJlIFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlvbGRfdGFpbCA9IHNrYi0+dGFpbDsKIAotCS8qzO7QtMr9vt2xqM/gudjQxc+iKi8KKwkvKiAqLwogCW5saCA9IE5MTVNHX1BVVChza2IsIDAsIDAsIFdBSV9LX01TRywgc2l6ZS1zaXplb2YoKm5saCkpOwogCXBvcyA9IE5MTVNHX0RBVEEobmxoKTsKIAotCS8qtKvK5LW908O7p7/VvOS1xMr9vt0qLworCS8qICovCiAJbWVtY3B5KHBvcywgbXNnLCAgbGVuKTsKLQkvKrzGy+O+rbn919a92rbUxuS687XEyv2+3cq1vMqzpLbIKi8KKwkvKiAqLwogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gb2xkX3RhaWw7CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IENPTU1UWVBFX0dST1VQOwogCW5ldGxpbmtfYnJvYWRjYXN0KG5ldGxpbmtfc2ssIHNrYiwgMCwgQ09NTVRZUEVfR1JPVVAsIEdGUF9BVE9NSUMpOwogCXJldCA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJldDsKLW5sbXNnX2ZhaWx1cmU6IC8qTkxNU0dfUFVUIMqnsNyjrNTys7fP+szXvdPX1ru6tOYqLworbmxtc2dfZmFpbHVyZTogLyogKi8KIAlrZnJlZV9za2Ioc2tiKTsKIAlnb3RvIG91dDsKIAogI3VuZGVmIENPTU1UWVBFX0dST1VQCiAjdW5kZWYgV0FJX0tfTVNHCiB9Ci0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworI2VuZGlmIC8qWk1fRU5BQkxFX0NFTkMqLwogCiAvKiBTaW1wbHkgcmV0dXJuIDB4ZmZmZiBpZiBWQVAgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAqLwotdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QqIGRldikKK3UxNl90IHpmTG54R2V0VmFwSWQoemRldl90ICpkZXYpCiB7CiAgICAgdTE2X3QgaTsKIAotICAgIGZvciAoaT0wOyBpPFpNX1ZBUF9QT1JUX05VTUJFUjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKHZhcFtpXS5kZXYgPT0gZGV2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMHhmZmZmOworICAgIGZvciAoaSA9IDA7IGkgPCBaTV9WQVBfUE9SVF9OVU1CRVI7IGkrKykgeworCWlmICh2YXBbaV0uZGV2ID09IGRldikgeworCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gMHhmZmZmOwogfQogCi11MzJfdCB6ZndSZWFkUmVnKHpkZXZfdCogZGV2LCB1MzJfdCBvZmZzZXQpCit1MzJfdCB6ZndSZWFkUmVnKHpkZXZfdCAqZGV2LCB1MzJfdCBvZmZzZXQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMDEyLDI1ICs5NDEsMjMgQEAKIHZvaWQga2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKICAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPQotICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSwga2V2ZW50KTsKLSAgICB6ZGV2X3QgKmRldiA9IG1hY3AtPmRldmljZTsKKwljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmRydl9wcml2YXRlLCBrZXZlbnQpOworCXpkZXZfdCAqZGV2ID0gbWFjcC0+ZGV2aWNlOwogCi0gICAgaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgKHZvaWQgKikmc21wX2tldmVudF9Mb2NrKSkKLSAgICB7Ci0gICAgICAgIC8vc2NoZWR1bGVfd29yaygmbWFjcC0+a2V2ZW50KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJnNtcF9rZXZlbnRfTG9jaykpIHsKKwkvKnNjaGVkdWxlX3dvcmsoJm1hY3AtPmtldmVudCk7Ki8KKwlyZXR1cm47CiAgICAgfQogCiAgICAgZG93bigmbWFjcC0+aW9jdGxfc2VtKTsKIAotICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS0VWRU5UX1dBVENIRE9HLCAmbWFjcC0+a2V2ZW50X2ZsYWdzKSkKLSAgICB7CisgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLRVZFTlRfV0FUQ0hET0csICZtYWNwLT5rZXZlbnRfZmxhZ3MpKSB7CiAgICAgZXh0ZXJuIHUxNl90IHpmSHBTdGFydFJlY3YoemRldl90ICpkZXYpOwotICAgICAgICAvL3pmaUh3V2F0Y2hEb2dSZWluaXQoZGV2KTsKLSAgICAgICAgcHJpbnRrKCgiXG4gKioqKioqKioqKioqIEh3IHdhdGNoRG9nIG9jY3VyISEgKioqKioqKioqKioqKiogXG4iKSk7Ci0gICAgICAgIHpmaVdsYW5TdXNwZW5kKGRldik7Ci0gICAgICAgIHpmaVdsYW5SZXN1bWUoZGV2LDApOwotICAgICAgICB6ZkhwU3RhcnRSZWN2KGRldik7CisJLyp6ZmlId1dhdGNoRG9nUmVpbml0KGRldik7Ki8KKwlwcmludGsoKCJcbiAqKioqKioqKioqKiogSHcgd2F0Y2hEb2cgb2NjdXIhISAqKioqKioqKioqKioqKiBcbiIpKTsKKwl6ZmlXbGFuU3VzcGVuZChkZXYpOworCXpmaVdsYW5SZXN1bWUoZGV2ICwgMCk7CisJemZIcFN0YXJ0UmVjdihkZXYpOwogICAgIH0KIAogICAgIGNsZWFyX2JpdCgwLCAodm9pZCAqKSZzbXBfa2V2ZW50X0xvY2spOwpAQCAtMTA4Myw0MSArMTAxMCwzOCBAQAogewogICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmIChtYWNwID09IE5VTEwpCi0gICAgewotICAgICAgICBwcmludGsoIm1hY3AgaXMgTlVMTFxuIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobWFjcCA9PSBOVUxMKSB7CisJcHJpbnRrKCJtYWNwIGlzIE5VTExcbiIpOworCXJldHVybjsKICAgICB9CiAKLSAgICBpZiAoMCAmJiBtYWNwLT5rZXZlbnRfcmVhZHkgIT0gMSkKLSAgICB7Ci0gICAgICAgIHByaW50aygiS2V2ZW50IG5vdCByZWFkeVxuIik7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoMCAmJiBtYWNwLT5rZXZlbnRfcmVhZHkgIT0gMSkgeworCXByaW50aygiS2V2ZW50IG5vdCByZWFkeVxuIik7CisJcmV0dXJuOwogICAgIH0KIAogICAgIHNldF9iaXQoZmxhZywgJm1hY3AtPmtldmVudF9mbGFncyk7CiAKLSAgICBpZiAoIXNjaGVkdWxlX3dvcmsoJm1hY3AtPmtldmVudCkpCi0gICAgewotICAgICAgICAvL0ZhaWxzIGlzIE5vcm1hbAotICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAic2NoZWR1bGVfdGFzayBmYWlsZWQsIGZsYWcgPSAleFxuIiwgZmxhZyk7Ci0gICAgfQorICAgIGlmICghc2NoZWR1bGVfd29yaygmbWFjcC0+a2V2ZW50KSkgeworCS8qRmFpbHMgaXMgTm9ybWFsCisJLy9wcmludGsoS0VSTl9FUlIgInNjaGVkdWxlX3Rhc2sgZmFpbGVkLCBmbGFnID0gJXhcbiIsIGZsYWcpOyovCisJfQogfQogCiAvKiBOb3RpZnkgd3JhcHBlciB0b2RvIHJlZG93bmxvYWQgZmlybXdhcmUgYW5kIHJlaW5pdCBwcm9jZWR1cmUgd2hlbiAqLwogLyogaGFyZHdhcmUgd2F0Y2hkb2cgb2NjdXIgOiB6ZmlId1dhdGNoRG9nUmVpbml0KCkgKi8KLXZvaWQgemZMbnhXYXRjaERvZ05vdGlmeSh6ZGV2X3QqIGRldikKK3ZvaWQgemZMbnhXYXRjaERvZ05vdGlmeSh6ZGV2X3QgKmRldikKIHsKICAgICB6ZkxueFNpZ25hbFRocmVhZChkZXYsIEtFVkVOVF9XQVRDSERPRyk7CiB9CiAKIC8qIFF1ZXJ5IER1cmFudGlvbiBvZiBBY3RpdmUgU2NhbiAqLwotdm9pZCB6ZndHZXRBY3RpdmVTY2FuRHVyKHpkZXZfdCogZGV2LCB1OF90KiBEdXIpCit2b2lkIHpmd0dldEFjdGl2ZVNjYW5EdXIoemRldl90ICpkZXYsIHU4X3QgKkR1cikKIHsKLSAgICAqRHVyID0gMzA7IC8vIGRlZmF1bHQgMzAgbXMKKyAgICAqRHVyID0gMzA7IC8qIGRlZmF1bHQgMzAgbXMqLwogfQogCi12b2lkIHpmd0dldFNob3daZXJvTGVuZ3RoU1NJRCh6ZGV2X3QqIGRldiwgdThfdCogRHVyKQordm9pZCB6ZndHZXRTaG93WmVyb0xlbmd0aFNTSUQoemRldl90ICpkZXYsIHU4X3QgKkR1cikKIHsKICAgICAqRHVyID0gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5jCmluZGV4IDJjNzk5YTIuLjQwMTRiNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYwpAQCAtNDgsNyArNDgsNyBAQAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpkMTIyMV9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0FUSFIsIFBST0RVQ1RfQVI5MTcwKSB9LAotICAgICAgICB7IFVTQl9ERVZJQ0UoVkVORE9SX0RMSU5LLCBQUk9EVUNUX0RXQTE2MEEpIH0sCisJeyBVU0JfREVWSUNFKFZFTkRPUl9ETElOSywgUFJPRFVDVF9EV0ExNjBBKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfTkVUR0VBUiwgUFJPRFVDVF9XTkRBMzEwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX05FVEdFQVIsIFBST0RVQ1RfV04xMTF2MikgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC02MCw5ICs2MCw5IEBACiBleHRlcm4gaW50IHVzYmRydl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB1OF90IHpmTG54Q2xlYXJTdHJ1Y3RzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCB6Zldkc0Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCB6ZlVucmVnaXN0ZXJXZHNEZXYoc3RydWN0IG5ldF9kZXZpY2UqIHBhcmVudERldiwgdTE2X3Qgd2RzSWQpOworZXh0ZXJuIGludCB6ZlVucmVnaXN0ZXJXZHNEZXYoc3RydWN0IG5ldF9kZXZpY2UgKnBhcmVudERldiwgdTE2X3Qgd2RzSWQpOwogZXh0ZXJuIGludCB6ZkxueFZhcENsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCB6ZkxueFVucmVnaXN0ZXJWYXBEZXYoc3RydWN0IG5ldF9kZXZpY2UqIHBhcmVudERldiwgdTE2X3QgdmFwSWQpOworZXh0ZXJuIGludCB6ZkxueFVucmVnaXN0ZXJWYXBEZXYoc3RydWN0IG5ldF9kZXZpY2UgKnBhcmVudERldiwgdTE2X3QgdmFwSWQpOwogCiAvKiBXRFMgKi8KIGV4dGVybiBzdHJ1Y3QgenNXZHNTdHJ1Y3Qgd2RzW1pNX1dEU19QT1JUX05VTUJFUl07CkBAIC03MywxNDggKzczLDEzNSBAQAogc3RhdGljIGludCB6ZkxueFByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotICAgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKIAotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBOVUxMOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IE5VTEw7Ci0gICAgaW50IHZlbmRvcl9pZCwgcHJvZHVjdF9pZDsKLSAgICBpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBOVUxMOworCWludCB2ZW5kb3JfaWQsIHByb2R1Y3RfaWQ7CisJaW50IHJlc3VsdCA9IDA7CiAKLSAgICB1c2JfZ2V0X2RldihkZXYpOworCXVzYl9nZXRfZGV2KGRldik7CiAKLSAgICB2ZW5kb3JfaWQgPSBkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3I7Ci0gICAgcHJvZHVjdF9pZCA9IGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3Q7CisJdmVuZG9yX2lkID0gZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yOworCXByb2R1Y3RfaWQgPSBkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0OwogCi0jaWZkZWYgSE1BQ19ERUJVRwotICAgIHByaW50ayhLRVJOX05PVElDRSAidmVuZG9yX2lkID0gJTA0eFxuIiwgdmVuZG9yX2lkKTsKLSAgICBwcmludGsoS0VSTl9OT1RJQ0UgInByb2R1Y3RfaWQgPSAlMDR4XG4iLCBwcm9kdWN0X2lkKTsKKwkjaWZkZWYgSE1BQ19ERUJVRworCQlwcmludGsoS0VSTl9OT1RJQ0UgInZlbmRvcl9pZCA9ICUwNHhcbiIsIHZlbmRvcl9pZCk7CisJCXByaW50ayhLRVJOX05PVElDRSAicHJvZHVjdF9pZCA9ICUwNHhcbiIsIHByb2R1Y3RfaWQpOwogCi0gICAgaWYgKGRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiVVNCIDIuMCBIb3N0XG4iKTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiVVNCIDEuMSBIb3N0XG4iKTsKLSNlbmRpZgorCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVTQiAyLjAgSG9zdFxuIik7CisJZWxzZQorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVTQiAxLjEgSG9zdFxuIik7CisJI2VuZGlmCiAKLSAgICBtYWNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYmRydl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKCFtYWNwKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZGV2aWNlIHN0cnVjdHVyZVxuIik7Ci0gICAgICAgIHJlc3VsdCA9IC1FTk9NRU07Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9CisJbWFjcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghbWFjcCkgeworCQlwcmludGsoS0VSTl9FUlIgIm91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBkZXZpY2Ugc3RydWN0dXJlXG4iKTsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KIAotICAgIG5ldCA9IGFsbG9jX2V0aGVyZGV2KDApOworCW5ldCA9IGFsbG9jX2V0aGVyZGV2KDApOwogCi0gICAgaWYgKG5ldCA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ6ZkxueFByb2JlOiBOb3QgYWJsZSB0byBhbGxvYyBldGhlcmRldiBzdHJ1Y3RcbiIpOwotICAgICAgICByZXN1bHQgPSAtRU5PTUVNOwotICAgICAgICBnb3RvIGZhaWwxOwotICAgIH0KKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ6ZkxueFByb2JlOiBOb3QgYWJsZSB0byBhbGxvYyBldGhlcmRldiBzdHJ1Y3RcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwxOworCX0KIAotICAgIHN0cmNweShuZXQtPm5hbWUsICJhdGglZCIpOworCXN0cmNweShuZXQtPm5hbWUsICJhdGglZCIpOwogCi0gICAgbmV0LT5tbF9wcml2ID0gbWFjcDsgICAvL2tlcm5lbCAyLjYKLSAgICBtYWNwLT51ZGV2ID0gZGV2OwotICAgIG1hY3AtPmRldmljZSA9IG5ldDsKKwluZXQtPm1sX3ByaXYgPSBtYWNwOyAgIC8qIGtlcm5lbCAyLjYgKi8KKwltYWNwLT51ZGV2ID0gZGV2OworCW1hY3AtPmRldmljZSA9IG5ldDsKIAotICAgIC8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KLSAgICAvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLwotICAgIG1hY3AtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KKwltYWNwLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAKLSAgICAvL2luaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPnJlZ1NldF93YWl0KTsKLSAgICAvL2luaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPmlvcndSc3Bfd2FpdCk7Ci0gICAgLy9pbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWNwLT50ZXJtX3dhaXQpOworCS8qIGluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPnJlZ1NldF93YWl0KTsgKi8KKwkvKiBpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWNwLT5pb3J3UnNwX3dhaXQpOyAqLworCS8qIGluaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPnRlcm1fd2FpdCk7ICovCiAKLSAgICBpZiAoIXpmTG54QWxsb2NBbGxVcmJzKG1hY3ApKQotICAgIHsKLSAgICAgICAgcmVzdWx0ID0gLUVOT01FTTsKLSAgICAgICAgZ290byBmYWlsMjsKLSAgICB9CisJaWYgKCF6ZkxueEFsbG9jQWxsVXJicyhtYWNwKSkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWwyOworCX0KIAotICAgIGlmICghemZMbnhJbml0U2V0dXAobmV0LCBtYWNwKSkKLSAgICB7Ci0gICAgICAgIHJlc3VsdCA9IC1FSU87Ci0gICAgICAgIGdvdG8gZmFpbDM7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBtYWNwKTsKLSAgICAgICAgU0VUX05FVERFVl9ERVYobmV0LCAmaW50ZXJmYWNlLT5kZXYpOworCWlmICghemZMbnhJbml0U2V0dXAobmV0LCBtYWNwKSkgeworCQlyZXN1bHQgPSAtRUlPOworCQlnb3RvIGZhaWwzOworCX0gZWxzZSB7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBtYWNwKTsKKwkJU0VUX05FVERFVl9ERVYobmV0LCAmaW50ZXJmYWNlLT5kZXYpOwogCi0gICAgICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYobmV0KSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWwzOwotICAgICAgICB9Ci0gICAgfQorCQlpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldCkgIT0gMCkgeworCQkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQkJZ290byBmYWlsMzsKKwkJfQorCX0KIAotICAgIG5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7Ci0gICAgZ290byBkb25lOwotCisJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKKwkgICAgZ290byBkb25lOwogZmFpbDM6Ci0gICAgemZMbnhGcmVlQWxsVXJicyhtYWNwKTsKKwl6ZkxueEZyZWVBbGxVcmJzKG1hY3ApOwogZmFpbDI6Ci0gICAgZnJlZV9uZXRkZXYobmV0KTsgIC8va2VybmVsIDIuNgorCWZyZWVfbmV0ZGV2KG5ldCk7ICAvKiBrZXJuZWwgMi42ICovCiBmYWlsMToKLSAgICBrZnJlZShtYWNwKTsKLQorCWtmcmVlKG1hY3ApOwogZmFpbDoKLSAgICB1c2JfcHV0X2RldihkZXYpOwotICAgIG1hY3AgPSBOVUxMOwotCisJdXNiX3B1dF9kZXYoZGV2KTsKKwltYWNwID0gTlVMTDsKIGRvbmU6Ci0gICAgcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCB6ZkxueERpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAotICAgIHByaW50ayhLRVJOX0RFQlVHICJ6ZkxueERpc2Nvbm5lY3RcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJ6ZkxueERpc2Nvbm5lY3RcbiIpOwogCi0gICAgaWYgKCFtYWNwKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1bnJlZ2lzdGVyaW5nIG5vbi1leGlzdGFudCBkZXZpY2VcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCWlmICghbWFjcCkgeworCQlwcmludGsoS0VSTl9FUlIgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CiAKLSAgICBpZiAobWFjcC0+ZHJpdmVyX2lzb2xhdGVkKQotICAgIHsKLSAgICAgICAgaWYgKG1hY3AtPmRldmljZS0+ZmxhZ3MgJiBJRkZfVVApCi0gICAgICAgICAgICB1c2JkcnZfY2xvc2UobWFjcC0+ZGV2aWNlKTsKLSAgICB9CisJaWYgKG1hY3AtPmRyaXZlcl9pc29sYXRlZCkKKwkJaWYgKG1hY3AtPmRldmljZS0+ZmxhZ3MgJiBJRkZfVVApCisJCQl1c2JkcnZfY2xvc2UobWFjcC0+ZGV2aWNlKTsKIAotI2lmIDAKLSAgICAvKiBDbG9zZSBXRFMgKi8KLSAgICAvL3pmV2RzQ2xvc2Uod2RzWzBdLmRldik7Ci0gICAgLyogVW5yZWdpc3RlciBXRFMgKi8KLSAgICAvL3pmVW5yZWdpc3Rlcldkc0RldihtYWNwLT5kZXZpY2UsIDApOworCSNpZiAwCisJCS8qIENsb3NlIFdEUyAqLworCQkvKiB6Zldkc0Nsb3NlKHdkc1swXS5kZXYpOyAqLworCQkvKiBVbnJlZ2lzdGVyIFdEUyAqLworCQkvKiB6ZlVucmVnaXN0ZXJXZHNEZXYobWFjcC0+ZGV2aWNlLCAwKTsgKi8KIAotICAgIC8qIENsb3NlIFZBUCAqLwotICAgIHpmTG54VmFwQ2xvc2UodmFwWzBdLmRldik7Ci0gICAgLyogVW5yZWdpc3RlciBWQVAgKi8KLSAgICB6ZkxueFVucmVnaXN0ZXJWYXBEZXYobWFjcC0+ZGV2aWNlLCAwKTsKLSNlbmRpZgorCQkvKiBDbG9zZSBWQVAgKi8KKwkJemZMbnhWYXBDbG9zZSh2YXBbMF0uZGV2KTsKKwkJLyogVW5yZWdpc3RlciBWQVAgKi8KKwkJemZMbnhVbnJlZ2lzdGVyVmFwRGV2KG1hY3AtPmRldmljZSwgMCk7CisJI2VuZGlmCiAKLSAgICB6ZkxueENsZWFyU3RydWN0cyhtYWNwLT5kZXZpY2UpOworCXpmTG54Q2xlYXJTdHJ1Y3RzKG1hY3AtPmRldmljZSk7CiAKLSAgICB1bnJlZ2lzdGVyX25ldGRldihtYWNwLT5kZXZpY2UpOworCXVucmVnaXN0ZXJfbmV0ZGV2KG1hY3AtPmRldmljZSk7CiAKLSAgICB1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCXVzYl9wdXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CiAKLSAgICAvL3ByaW50ayhLRVJOX0VSUiAiMy4gemZMbnhVbmxpbmtBbGxVcmJzXG4iKTsKLSAgICAvL3pmTG54VW5saW5rQWxsVXJicyhtYWNwKTsKKwkvKiBwcmludGsoS0VSTl9FUlIgIjMuIHpmTG54VW5saW5rQWxsVXJic1xuIik7ICovCisJLyogemZMbnhVbmxpbmtBbGxVcmJzKG1hY3ApOyAqLwogCi0gICAgLyogRnJlZSBuZXR3b3JrIGludGVyZmFjZSAqLwotICAgIGZyZWVfbmV0ZGV2KG1hY3AtPmRldmljZSk7CisJLyogRnJlZSBuZXR3b3JrIGludGVyZmFjZSAqLworCWZyZWVfbmV0ZGV2KG1hY3AtPmRldmljZSk7CiAKLSAgICB6ZkxueEZyZWVBbGxVcmJzKG1hY3ApOwotICAgIC8vemZMbnhDbGVhclN0cnVjdHMobWFjcC0+ZGV2aWNlKTsKLSAgICBrZnJlZShtYWNwKTsKLSAgICBtYWNwID0gTlVMTDsKKwl6ZkxueEZyZWVBbGxVcmJzKG1hY3ApOworCS8qIHpmTG54Q2xlYXJTdHJ1Y3RzKG1hY3AtPmRldmljZSk7ICovCisJa2ZyZWUobWFjcCk7CisJbWFjcCA9IE5VTEw7CiAKLSAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgemQxMjIxX2RyaXZlciA9IHsKQEAgLTIyNiwxMyArMjEzLDEzIEBACiAKIGludCBfX2luaXQgemZMbnhJaW5pdCh2b2lkKQogewotICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgLSB2ZXJzaW9uICVzXG4iLCAgRFJJVkVSX05BTUUsIFZFUlNJT05JRCk7Ci0gICAgcmV0dXJuIHVzYl9yZWdpc3RlcigmemQxMjIxX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyAtIHZlcnNpb24gJXNcbiIsICBEUklWRVJfTkFNRSwgVkVSU0lPTklEKTsKKwlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZ6ZDEyMjFfZHJpdmVyKTsKIH0KIAogdm9pZCBfX2V4aXQgemZMbnhFeGl0KHZvaWQpCiB7Ci0gICAgdXNiX2RlcmVnaXN0ZXIoJnpkMTIyMV9kcml2ZXIpOworCXVzYl9kZXJlZ2lzdGVyKCZ6ZDEyMjFfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoemZMbnhJaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IDljYTBlOWUuLjMyMjE4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC02OCwxMSArNjksMTYgQEAKICNkZWZpbmUgTENEX01BWEJZVEVTCQkyNTYJLyogbWF4IGJ1cnN0IHdyaXRlICovCiAKICNkZWZpbmUgS0VZUEFEX0JVRkZFUgkJNjQKLSNkZWZpbmUgSU5QVVRfUE9MTF9USU1FCQkoSFovNTApCS8qIHBvbGwgdGhlIGtleWJvYXJkIHRoaXMgZXZlcnkgc2Vjb25kICovCi0jZGVmaW5lIEtFWVBBRF9SRVBfU1RBUlQJKDEwKQkvKiBhIGtleSBzdGFydHMgdG8gcmVwZWF0IGFmdGVyIHRoaXMgdGltZXMgSU5QVVRfUE9MTF9USU1FICovCi0jZGVmaW5lIEtFWVBBRF9SRVBfREVMQVkJKDIpCS8qIGEga2V5IHJlcGVhdHMgdGhpcyB0aW1lcyBJTlBVVF9QT0xMX1RJTUUgKi8KIAotI2RlZmluZSBGTEFTSF9MSUdIVF9URU1QTwkoMjAwKQkvKiBrZWVwIHRoZSBsaWdodCBvbiB0aGlzIHRpbWVzIElOUFVUX1BPTExfVElNRSBmb3IgZWFjaCBmbGFzaCAqLworLyogcG9sbCB0aGUga2V5Ym9hcmQgdGhpcyBldmVyeSBzZWNvbmQgKi8KKyNkZWZpbmUgSU5QVVRfUE9MTF9USU1FCQkoSFovNTApCisvKiBhIGtleSBzdGFydHMgdG8gcmVwZWF0IGFmdGVyIHRoaXMgdGltZXMgSU5QVVRfUE9MTF9USU1FICovCisjZGVmaW5lIEtFWVBBRF9SRVBfU1RBUlQJKDEwKQorLyogYSBrZXkgcmVwZWF0cyB0aGlzIHRpbWVzIElOUFVUX1BPTExfVElNRSAqLworI2RlZmluZSBLRVlQQURfUkVQX0RFTEFZCSgyKQorCisvKiBrZWVwIHRoZSBsaWdodCBvbiB0aGlzIHRpbWVzIElOUFVUX1BPTExfVElNRSBmb3IgZWFjaCBmbGFzaCAqLworI2RlZmluZSBGTEFTSF9MSUdIVF9URU1QTwkoMjAwKQogCiAvKiBjb252ZXJ0cyBhbiByX3N0cigpIGlucHV0IHRvIGFuIGFjdGl2ZSBoaWdoLCBiaXRzIHN0cmluZyA6IDAwMEJBT1NFICovCiAjZGVmaW5lIFBOTF9QSU5QVVQoYSkJCSgoKCh1bnNpZ25lZCBjaGFyKShhKSkgXiAweDdGKSA+PiAzKQpAQCAtODQsNyArOTAsOCBAQAogI2RlZmluZSBQTkxfUEVSUk9SUAkJMHgwOAkvKiBkaXJlY3QgaW5wdXQsIGFjdGl2ZSBsb3cgKi8KIAogI2RlZmluZSBQTkxfUEJJRElSCQkweDIwCS8qIGJpLWRpcmVjdGlvbmFsIHBvcnRzICovCi0jZGVmaW5lIFBOTF9QSU5URU4JCTB4MTAJLyogaGlnaCB0byByZWFkIGRhdGEgaW4gb3ItZWQgd2l0aCBkYXRhIG91dCAqLworLyogaGlnaCB0byByZWFkIGRhdGEgaW4gb3ItZWQgd2l0aCBkYXRhIG91dCAqLworI2RlZmluZSBQTkxfUElOVEVOCQkweDEwCiAjZGVmaW5lIFBOTF9QU0VMRUNQCQkweDA4CS8qIGludmVydGVkIG91dHB1dCwgYWN0aXZlIGxvdyAqLwogI2RlZmluZSBQTkxfUElOSVRQCQkweDA0CS8qIGRpcmVjdCBvdXRwdXQsIGFjdGl2ZSBsb3cgKi8KICNkZWZpbmUgUE5MX1BBVVRPTEYJCTB4MDIJLyogaW52ZXJ0ZWQgb3V0cHV0LCBhY3RpdmUgbG93ICovCkBAIC0xMjMsNyArMTMwLDcgQEAKICNkZWZpbmUgTENEX0ZMQUdfTgkJMHgwMDQwCS8qIDItcm93cyBtb2RlICovCiAjZGVmaW5lIExDRF9GTEFHX0wJCTB4MDA4MAkvKiBiYWNrbGlnaHQgZW5hYmxlZCAqLwogCi0jZGVmaW5lIExDRF9FU0NBUEVfTEVOCQkyNAkvKiAyNCBjaGFycyBtYXggZm9yIGFuIExDRCBlc2NhcGUgY29tbWFuZCAqLworI2RlZmluZSBMQ0RfRVNDQVBFX0xFTgkJMjQJLyogbWF4IGNoYXJzIGZvciBMQ0QgZXNjYXBlIGNvbW1hbmQgKi8KICNkZWZpbmUgTENEX0VTQ0FQRV9DSEFSCTI3CS8qIHVzZSBjaGFyIDI3IGZvciBlc2NhcGUgY29tbWFuZCAqLwogCiAvKiBtYWNyb3MgdG8gc2ltcGxpZnkgdXNlIG9mIHRoZSBwYXJhbGxlbCBwb3J0ICovCkBAIC0xMzQsOCArMTQxLDEwIEBACiAjZGVmaW5lIHdfZHRyKHgsIHkpICAgICBkbyB7IHBhcnBvcnRfd3JpdGVfZGF0YSgoeCktPnBvcnQsICh5KSk7IH0gd2hpbGUgKDApCiAKIC8qIHRoaXMgZGVmaW5lcyB3aGljaCBiaXRzIGFyZSB0byBiZSB1c2VkIGFuZCB3aGljaCBvbmVzIHRvIGJlIGlnbm9yZWQgKi8KLXN0YXRpYyBfX3U4IHNjYW5fbWFza19vOwkvKiBsb2dpY2FsIG9yIG9mIHRoZSBvdXRwdXQgYml0cyBpbnZvbHZlZCBpbiB0aGUgc2NhbiBtYXRyaXggKi8KLXN0YXRpYyBfX3U4IHNjYW5fbWFza19pOwkvKiBsb2dpY2FsIG9yIG9mIHRoZSBpbnB1dCBiaXRzIGludm9sdmVkIGluIHRoZSBzY2FuIG1hdHJpeCAqLworLyogbG9naWNhbCBvciBvZiB0aGUgb3V0cHV0IGJpdHMgaW52b2x2ZWQgaW4gdGhlIHNjYW4gbWF0cml4ICovCitzdGF0aWMgX191OCBzY2FuX21hc2tfbzsKKy8qIGxvZ2ljYWwgb3Igb2YgdGhlIGlucHV0IGJpdHMgaW52b2x2ZWQgaW4gdGhlIHNjYW4gbWF0cml4ICovCitzdGF0aWMgX191OCBzY2FuX21hc2tfaTsKIAogdHlwZWRlZiBfX3U2NCBwbWFza190OwogCkBAIC0xNjEsMTQgKzE3MCwxNCBAQAogCV9fdTggcmlzZV90aW1lciwgZmFsbF90aW1lciwgaGlnaF90aW1lcjsKIAogCXVuaW9uIHsKLQkJc3RydWN0IHsJLyogdGhpcyBzdHJ1Y3R1cmUgaXMgdmFsaWQgd2hlbiB0eXBlID09IElOUFVUX1RZUEVfU1REICovCisJCXN0cnVjdCB7CS8qIHZhbGlkIHdoZW4gdHlwZSA9PSBJTlBVVF9UWVBFX1NURCAqLwogCQkJdm9pZCAoKnByZXNzX2ZjdCkgKGludCk7CiAJCQl2b2lkICgqcmVsZWFzZV9mY3QpIChpbnQpOwogCQkJaW50IHByZXNzX2RhdGE7CiAJCQlpbnQgcmVsZWFzZV9kYXRhOwogCQl9IHN0ZDsKLQkJc3RydWN0IHsJLyogdGhpcyBzdHJ1Y3R1cmUgaXMgdmFsaWQgd2hlbiB0eXBlID09IElOUFVUX1RZUEVfS0JEICovCi0JCQkvKiBzdHJpbmdzIGNhbiBiZSBmdWxsLWxlbmd0aCAoaWUuIG5vbiBudWxsLXRlcm1pbmF0ZWQpICovCisJCXN0cnVjdCB7CS8qIHZhbGlkIHdoZW4gdHlwZSA9PSBJTlBVVF9UWVBFX0tCRCAqLworCQkJLyogc3RyaW5ncyBjYW4gYmUgbm9uIG51bGwtdGVybWluYXRlZCAqLwogCQkJY2hhciBwcmVzc19zdHJbc2l6ZW9mKHZvaWQgKikgKyBzaXplb2YoaW50KV07CiAJCQljaGFyIHJlcGVhdF9zdHJbc2l6ZW9mKHZvaWQgKikgKyBzaXplb2YoaW50KV07CiAJCQljaGFyIHJlbGVhc2Vfc3RyW3NpemVvZih2b2lkICopICsgc2l6ZW9mKGludCldOwpAQCAtMTg4LDExICsxOTcsMTcgQEAKICAqIDAwMDAwMDAwMDAwMDAwMDAwMDBCQVBTRUJBUFNFQkFQU0VCQVBTRUJBUFNFQkFQU0VCQVBTRUJBUFNFQkFQU0UKICAqIDwtLS0tLXVudXNlZC0tLS0tLT48Z25kPjxkMDc+PGQwNj48ZDA1PjxkMDQ+PGQwMz48ZDAyPjxkMDE+PGQwMD4KICAqLwotc3RhdGljIHBtYXNrX3QgcGh5c19yZWFkOwkvKiB3aGF0IGhhcyBqdXN0IGJlZW4gcmVhZCBmcm9tIHRoZSBJL08gcG9ydHMgKi8KLXN0YXRpYyBwbWFza190IHBoeXNfcmVhZF9wcmV2OwkvKiBwcmV2aW91cyBwaHlzX3JlYWQgKi8KLXN0YXRpYyBwbWFza190IHBoeXNfY3VycjsJLyogc3RhYmlsaXplZCBwaHlzX3JlYWQgKHBoeXNfcmVhZHxwaHlzX3JlYWRfcHJldikgKi8KLXN0YXRpYyBwbWFza190IHBoeXNfcHJldjsJLyogcHJldmlvdXMgcGh5c19jdXJyICovCi1zdGF0aWMgY2hhciBpbnB1dHNfc3RhYmxlOwkvKiAwIG1lYW5zIHRoYXQgYXQgbGVhc3Qgb25lIGxvZ2ljYWwgc2lnbmFsIG5lZWRzIGJlIGNvbXB1dGVkICovCisKKy8qIHdoYXQgaGFzIGp1c3QgYmVlbiByZWFkIGZyb20gdGhlIEkvTyBwb3J0cyAqLworc3RhdGljIHBtYXNrX3QgcGh5c19yZWFkOworLyogcHJldmlvdXMgcGh5c19yZWFkICovCitzdGF0aWMgcG1hc2tfdCBwaHlzX3JlYWRfcHJldjsKKy8qIHN0YWJpbGl6ZWQgcGh5c19yZWFkIChwaHlzX3JlYWR8cGh5c19yZWFkX3ByZXYpICovCitzdGF0aWMgcG1hc2tfdCBwaHlzX2N1cnI7CisvKiBwcmV2aW91cyBwaHlzX2N1cnIgKi8KK3N0YXRpYyBwbWFza190IHBoeXNfcHJldjsKKy8qIDAgbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgbG9naWNhbCBzaWduYWwgbmVlZHMgYmUgY29tcHV0ZWQgKi8KK3N0YXRpYyBjaGFyIGlucHV0c19zdGFibGU7CiAKIC8qIHRoZXNlIHZhcmlhYmxlcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGtleXBhZCAqLwogc3RhdGljIGNoYXIga2V5cGFkX2J1ZmZlcltLRVlQQURfQlVGRkVSXTsKQEAgLTIwMiwxMSArMjE3LDE3IEBACiBzdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3Qga2V5cGFkX3JlYWRfd2FpdDsKIAogLyogbGNkLXNwZWNpZmljIHZhcmlhYmxlcyAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IGxjZF9mbGFnczsJLyogY29udGFpbnMgdGhlIExDRCBjb25maWcgc3RhdGUgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGludCBsY2RfYWRkcl94OwkvKiBjb250YWlucyB0aGUgTENEIFggb2Zmc2V0ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgbGNkX2FkZHJfeTsJLyogY29udGFpbnMgdGhlIExDRCBZIG9mZnNldCAqLwotc3RhdGljIGNoYXIgbGNkX2VzY2FwZVtMQ0RfRVNDQVBFX0xFTiArIDFdOwkvKiBjdXJyZW50IGVzY2FwZSBzZXF1ZW5jZSwgMCB0ZXJtaW5hdGVkICovCi1zdGF0aWMgaW50IGxjZF9lc2NhcGVfbGVuID0gLTE7CS8qIG5vdCBpbiBlc2NhcGUgc3RhdGUuID49MCA9IGVzY2FwZSBjbWQgbGVuICovCisKKy8qIGNvbnRhaW5zIHRoZSBMQ0QgY29uZmlnIHN0YXRlICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgbGNkX2ZsYWdzOworLyogY29udGFpbnMgdGhlIExDRCBYIG9mZnNldCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IGxjZF9hZGRyX3g7CisvKiBjb250YWlucyB0aGUgTENEIFkgb2Zmc2V0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgbGNkX2FkZHJfeTsKKy8qIGN1cnJlbnQgZXNjYXBlIHNlcXVlbmNlLCAwIHRlcm1pbmF0ZWQgKi8KK3N0YXRpYyBjaGFyIGxjZF9lc2NhcGVbTENEX0VTQ0FQRV9MRU4gKyAxXTsKKy8qIG5vdCBpbiBlc2NhcGUgc3RhdGUuID49MCA9IGVzY2FwZSBjbWQgbGVuICovCitzdGF0aWMgaW50IGxjZF9lc2NhcGVfbGVuID0gLTE7CiAKIC8qCiAgKiBCaXQgbWFza3MgdG8gY29udmVydCBMQ0Qgc2lnbmFscyB0byBwYXJhbGxlbCBwb3J0IG91dHB1dHMuCkBAIC00MzYsMTEgKzQ1NywxMyBAQAogc3RhdGljIGludCBsY2RfdHlwZSA9IC0xOwogbW9kdWxlX3BhcmFtKGxjZF90eXBlLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfdHlwZSwKLQkJICJMQ0QgdHlwZTogMD1ub25lLCAxPW9sZCAvLywgMj1zZXJpYWwga3MwMDc0LCAzPWhhbnRyb25peCAvLywgND1uZXhjb20gLy8sIDU9Y29tcGlsZWQtaW4iKTsKKwkJICJMQ0QgdHlwZTogMD1ub25lLCAxPW9sZCAvLywgMj1zZXJpYWwga3MwMDc0LCAiCisJCSAiMz1oYW50cm9uaXggLy8sIDQ9bmV4Y29tIC8vLCA1PWNvbXBpbGVkLWluIik7CiAKIHN0YXRpYyBpbnQgbGNkX3Byb3RvID0gLTE7CiBtb2R1bGVfcGFyYW0obGNkX3Byb3RvLCBpbnQsIDAwMDApOwotTU9EVUxFX1BBUk1fREVTQyhsY2RfcHJvdG8sICJMQ0QgY29tbXVuaWNhdGlvbjogMD1wYXJhbGxlbCAoLy8pLCAxPXNlcmlhbCwiCitNT0RVTEVfUEFSTV9ERVNDKGxjZF9wcm90bywKKwkJIkxDRCBjb21tdW5pY2F0aW9uOiAwPXBhcmFsbGVsICgvLyksIDE9c2VyaWFsLCIKIAkJIjI9VEkgTENEIEludGVyZmFjZSIpOwogCiBzdGF0aWMgaW50IGxjZF9jaGFyc2V0ID0gLTE7CkBAIC00NTAsMTIgKzQ3MywxNCBAQAogc3RhdGljIGludCBrZXlwYWRfdHlwZSA9IC0xOwogbW9kdWxlX3BhcmFtKGtleXBhZF90eXBlLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhrZXlwYWRfdHlwZSwKLQkJICJLZXlwYWQgdHlwZTogMD1ub25lLCAxPW9sZCA2IGtleXMsIDI9bmV3IDYrMSBrZXlzLCAzPW5leGNvbSA0IGtleXMiKTsKKwkJICJLZXlwYWQgdHlwZTogMD1ub25lLCAxPW9sZCA2IGtleXMsIDI9bmV3IDYrMSBrZXlzLCAiCisJCSAiMz1uZXhjb20gNCBrZXlzIik7CiAKIHN0YXRpYyBpbnQgcHJvZmlsZSA9IERFRkFVTFRfUFJPRklMRTsKIG1vZHVsZV9wYXJhbShwcm9maWxlLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhwcm9maWxlLAotCQkgIjE9MTZ4MiBvbGQga3A7IDI9c2VyaWFsIDE2eDIsIG5ldyBrcDsgMz0xNngyIGhhbnRyb25peDsgND0xNngyIG5leGNvbTsgZGVmYXVsdD00MHgyLCBvbGQga3AiKTsKKwkJICIxPTE2eDIgb2xkIGtwOyAyPXNlcmlhbCAxNngyLCBuZXcga3A7IDM9MTZ4MiBoYW50cm9uaXg7ICIKKwkJICI0PTE2eDIgbmV4Y29tOyBkZWZhdWx0PTQweDIsIG9sZCBrcCIpOwogCiAvKgogICogVGhlc2UgYXJlIHRoZSBwYXJhbGxlbCBwb3J0IHBpbnMgdGhlIExDRCBjb250cm9sIHNpZ25hbHMgYXJlIGNvbm5lY3RlZCB0by4KQEAgLTQ2OSwzMiArNDk0LDM4IEBACiBzdGF0aWMgaW50IGxjZF9lX3BpbiAgPSBQSU5fTk9UX1NFVDsKIG1vZHVsZV9wYXJhbShsY2RfZV9waW4sIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF9lX3BpbiwKLQkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEICdFJyBzaWduYWwsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CisJCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCAnRScgc2lnbmFsLCAiCisJCSAid2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKIAogc3RhdGljIGludCBsY2RfcnNfcGluID0gUElOX05PVF9TRVQ7CiBtb2R1bGVfcGFyYW0obGNkX3JzX3BpbiwgaW50LCAwMDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobGNkX3JzX3BpbiwKLQkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gTENEICdSUycgc2lnbmFsLCB3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOworCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBMQ0QgJ1JTJyBzaWduYWwsICIKKwkJICJ3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOwogCiBzdGF0aWMgaW50IGxjZF9yd19waW4gPSBQSU5fTk9UX1NFVDsKIG1vZHVsZV9wYXJhbShsY2RfcndfcGluLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfcndfcGluLAotCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBMQ0QgJ1JXJyBzaWduYWwsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CisJCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCAnUlcnIHNpZ25hbCwgIgorCQkgIndpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CiAKIHN0YXRpYyBpbnQgbGNkX2JsX3BpbiA9IFBJTl9OT1RfU0VUOwogbW9kdWxlX3BhcmFtKGxjZF9ibF9waW4sIGludCwgMDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGxjZF9ibF9waW4sCi0JCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCBiYWNrbGlnaHQsIHdpdGggcG9sYXJpdHkgKC0xNy4uMTcpIik7CisJCSAiIyBvZiB0aGUgLy8gcG9ydCBwaW4gY29ubmVjdGVkIHRvIExDRCBiYWNrbGlnaHQsICIKKwkJICJ3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOwogCiBzdGF0aWMgaW50IGxjZF9kYV9waW4gPSBQSU5fTk9UX1NFVDsKIG1vZHVsZV9wYXJhbShsY2RfZGFfcGluLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfZGFfcGluLAotCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBzZXJpYWwgTENEICdTREEnIHNpZ25hbCwgd2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKKwkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gc2VyaWFsIExDRCAnU0RBJyAiCisJCSAic2lnbmFsLCB3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOwogCiBzdGF0aWMgaW50IGxjZF9jbF9waW4gPSBQSU5fTk9UX1NFVDsKIG1vZHVsZV9wYXJhbShsY2RfY2xfcGluLCBpbnQsIDAwMDApOwogTU9EVUxFX1BBUk1fREVTQyhsY2RfY2xfcGluLAotCQkgIiMgb2YgdGhlIC8vIHBvcnQgcGluIGNvbm5lY3RlZCB0byBzZXJpYWwgTENEICdTQ0wnIHNpZ25hbCwgd2l0aCBwb2xhcml0eSAoLTE3Li4xNykiKTsKKwkJICIjIG9mIHRoZSAvLyBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gc2VyaWFsIExDRCAnU0NMJyAiCisJCSAic2lnbmFsLCB3aXRoIHBvbGFyaXR5ICgtMTcuLjE3KSIpOwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciAqbGNkX2NoYXJfY29udjsKIApAQCAtNTcyLDEyICs2MDMsMTIgQEAKIAogLyogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBhIGJpdCBhcnJheSBjb250YWluaW5nIHNpZ25hbHMgc3RhdGVzICovCiBzdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBjaGFyIGU7CS8qIHBhcmFsbGVsIExDRCBFICAgKGRhdGEgbGF0Y2ggb24gZmFsbGluZyBlZGdlKSAqLwotCXVuc2lnbmVkIGNoYXIgcnM7CS8qIHBhcmFsbGVsIExDRCBSUyAgKDAgPSBjbWQsIDEgPSBkYXRhKSAqLwotCXVuc2lnbmVkIGNoYXIgcnc7CS8qIHBhcmFsbGVsIExDRCBSL1cgKDAgPSBXLCAxID0gUikgKi8KLQl1bnNpZ25lZCBjaGFyIGJsOwkvKiBwYXJhbGxlbCBMQ0QgYmFja2xpZ2h0ICgwID0gb2ZmLCAxID0gb24pICovCi0JdW5zaWduZWQgY2hhciBjbDsJLyogc2VyaWFsIExDRCBjbG9jayAobGF0Y2ggb24gcmlzaW5nIGVkZ2UpICovCi0JdW5zaWduZWQgY2hhciBkYTsJLyogc2VyaWFsIExDRCBkYXRhICovCisJdW5zaWduZWQgY2hhciBlOyAgLyogcGFyYWxsZWwgTENEIEUgKGRhdGEgbGF0Y2ggb24gZmFsbGluZyBlZGdlKSAqLworCXVuc2lnbmVkIGNoYXIgcnM7IC8qIHBhcmFsbGVsIExDRCBSUyAgKDAgPSBjbWQsIDEgPSBkYXRhKSAqLworCXVuc2lnbmVkIGNoYXIgcnc7IC8qIHBhcmFsbGVsIExDRCBSL1cgKDAgPSBXLCAxID0gUikgKi8KKwl1bnNpZ25lZCBjaGFyIGJsOyAvKiBwYXJhbGxlbCBMQ0QgYmFja2xpZ2h0ICgwID0gb2ZmLCAxID0gb24pICovCisJdW5zaWduZWQgY2hhciBjbDsgLyogc2VyaWFsIExDRCBjbG9jayAobGF0Y2ggb24gcmlzaW5nIGVkZ2UpICovCisJdW5zaWduZWQgY2hhciBkYTsgLyogc2VyaWFsIExDRCBkYXRhICovCiB9IGJpdHM7CiAKIHN0YXRpYyB2b2lkIGluaXRfc2Nhbl90aW1lcih2b2lkKTsKQEAgLTY2Niw3ICs2OTcsNyBAQAogCQljX2JpdCA9IFBOTF9QQVVUT0xGOwogCQlpbnYgPSAhaW52OwogCQlicmVhazsKLQljYXNlIFBJTl9JTklUUDoJLyogaW5pdCwgZGlyZWN0ICovCisJY2FzZSBQSU5fSU5JVFA6CQkvKiBpbml0LCBkaXJlY3QgKi8KIAkJY19iaXQgPSBQTkxfUElOSVRQOwogCQlicmVhazsKIAljYXNlIFBJTl9TRUxFQ1A6CS8qIHNlbGVjdF9pbiwgaW52ZXJ0ZWQgKi8KQEAgLTY5OCwyMyArNzI5LDIzIEBACiAJfQogfQogCi0vKiBzZW5kIGEgc2VyaWFsIGJ5dGUgdG8gdGhlIExDRCBwYW5lbC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbG9ja2luZyBpZiBuZWVkZWQuICovCisvKiBzZW5kIGEgc2VyaWFsIGJ5dGUgdG8gdGhlIExDRCBwYW5lbC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbG9ja2luZworICAgaWYgbmVlZGVkLiAqLwogc3RhdGljIHZvaWQgbGNkX3NlbmRfc2VyaWFsKGludCBieXRlKQogewogCWludCBiaXQ7CiAKIAkvKiB0aGUgZGF0YSBiaXQgaXMgc2V0IG9uIEQwLCBhbmQgdGhlIGNsb2NrIG9uIFNUUk9CRS4KLQkgKiBMQ0QgcmVhZHMgRDAgb24gU1RST0JFJ3MgcmlzaW5nIGVkZ2UuCi0JICovCisJICogTENEIHJlYWRzIEQwIG9uIFNUUk9CRSdzIHJpc2luZyBlZGdlLiAqLwogCWZvciAoYml0ID0gMDsgYml0IDwgODsgYml0KyspIHsKIAkJYml0cy5jbCA9IEJJVF9DTFI7CS8qIENMSyBsb3cgKi8KIAkJcGFuZWxfc2V0X2JpdHMoKTsKIAkJYml0cy5kYSA9IGJ5dGUgJiAxOwogCQlwYW5lbF9zZXRfYml0cygpOwotCQl1ZGVsYXkoMik7CS8qIG1haW50YWluIHRoZSBkYXRhIGR1cmluZyAyIHVzIGJlZm9yZSBDTEsgdXAgKi8KKwkJdWRlbGF5KDIpOyAgLyogbWFpbnRhaW4gdGhlIGRhdGEgZHVyaW5nIDIgdXMgYmVmb3JlIENMSyB1cCAqLwogCQliaXRzLmNsID0gQklUX1NFVDsJLyogQ0xLIGhpZ2ggKi8KIAkJcGFuZWxfc2V0X2JpdHMoKTsKLQkJdWRlbGF5KDEpOwkvKiBtYWludGFpbiB0aGUgc3Ryb2JlIGR1cmluZyAxIHVzICovCisJCXVkZWxheSgxKTsgIC8qIG1haW50YWluIHRoZSBzdHJvYmUgZHVyaW5nIDEgdXMgKi8KIAkJYnl0ZSA+Pj0gMTsKIAl9CiB9CkBAIC03NjAsMTkgKzc5MSwxOSBAQAogCXNwaW5fbG9jaygmcHBydF9sb2NrKTsKIAkvKiBwcmVzZW50IHRoZSBkYXRhIHRvIHRoZSBkYXRhIHBvcnQgKi8KIAl3X2R0cihwcHJ0LCBjbWQpOwotCXVkZWxheSgyMCk7CQkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KKwl1ZGVsYXkoMjApOwkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KIAogCWJpdHMuZSA9IEJJVF9TRVQ7CiAJYml0cy5ycyA9IEJJVF9DTFI7CiAJYml0cy5ydyA9IEJJVF9DTFI7CiAJc2V0X2N0cmxfYml0cygpOwogCi0JdWRlbGF5KDQwKTsJCS8qIG1haW50YWluIHRoZSBzdHJvYmUgZHVyaW5nIDQwIHVzICovCisJdWRlbGF5KDQwKTsJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KIAogCWJpdHMuZSA9IEJJVF9DTFI7CiAJc2V0X2N0cmxfYml0cygpOwogCi0JdWRlbGF5KDEyMCk7CQkvKiB0aGUgc2hvcnRlc3QgY29tbWFuZCB0YWtlcyBhdCBsZWFzdCAxMjAgdXMgKi8KKwl1ZGVsYXkoMTIwKTsJLyogdGhlIHNob3J0ZXN0IGNvbW1hbmQgdGFrZXMgYXQgbGVhc3QgMTIwIHVzICovCiAJc3Bpbl91bmxvY2soJnBwcnRfbG9jayk7CiB9CiAKQEAgLTc4MiwxOSArODEzLDE5IEBACiAJc3Bpbl9sb2NrKCZwcHJ0X2xvY2spOwogCS8qIHByZXNlbnQgdGhlIGRhdGEgdG8gdGhlIGRhdGEgcG9ydCAqLwogCXdfZHRyKHBwcnQsIGRhdGEpOwotCXVkZWxheSgyMCk7CQkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KKwl1ZGVsYXkoMjApOwkvKiBtYWludGFpbiB0aGUgZGF0YSBkdXJpbmcgMjAgdXMgYmVmb3JlIHRoZSBzdHJvYmUgKi8KIAogCWJpdHMuZSA9IEJJVF9TRVQ7CiAJYml0cy5ycyA9IEJJVF9TRVQ7CiAJYml0cy5ydyA9IEJJVF9DTFI7CiAJc2V0X2N0cmxfYml0cygpOwogCi0JdWRlbGF5KDQwKTsJCS8qIG1haW50YWluIHRoZSBzdHJvYmUgZHVyaW5nIDQwIHVzICovCisJdWRlbGF5KDQwKTsJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KIAogCWJpdHMuZSA9IEJJVF9DTFI7CiAJc2V0X2N0cmxfYml0cygpOwogCi0JdWRlbGF5KDQ1KTsJCS8qIHRoZSBzaG9ydGVzdCBkYXRhIHRha2VzIGF0IGxlYXN0IDQ1IHVzICovCisJdWRlbGF5KDQ1KTsJLyogdGhlIHNob3J0ZXN0IGRhdGEgdGFrZXMgYXQgbGVhc3QgNDUgdXMgKi8KIAlzcGluX3VubG9jaygmcHBydF9sb2NrKTsKIH0KIApAQCAtODIyLDcgKzg1Myw4IEBACiB7CiAJbGNkX3dyaXRlX2NtZCgweDgwCS8qIHNldCBERFJBTSBhZGRyZXNzICovCiAJCSAgICAgIHwgKGxjZF9hZGRyX3kgPyBsY2RfaHdpZHRoIDogMCkKLQkJICAgICAgLyogd2UgZm9yY2UgdGhlIGN1cnNvciB0byBzdGF5IGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaWYgaXQgd2FudHMgdG8gZ28gZmFydGhlciAqLworCQkgICAgICAvKiB3ZSBmb3JjZSB0aGUgY3Vyc29yIHRvIHN0YXkgYXQgdGhlIGVuZCBvZiB0aGUKKwkJCSBsaW5lIGlmIGl0IHdhbnRzIHRvIGdvIGZhcnRoZXIgKi8KIAkJICAgICAgfCAoKGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoKSA/IGxjZF9hZGRyX3ggJgogCQkJIChsY2RfaHdpZHRoIC0gMSkgOiBsY2RfYndpZHRoIC0gMSkpOwogfQpAQCAtODcxLDE5ICs5MDMsMjMgQEAKIAlmb3IgKHBvcyA9IDA7IHBvcyA8IGxjZF9oZWlnaHQgKiBsY2RfaHdpZHRoOyBwb3MrKykgewogCQkvKiBwcmVzZW50IHRoZSBkYXRhIHRvIHRoZSBkYXRhIHBvcnQgKi8KIAkJd19kdHIocHBydCwgJyAnKTsKLQkJdWRlbGF5KDIwKTsJLyogbWFpbnRhaW4gdGhlIGRhdGEgZHVyaW5nIDIwIHVzIGJlZm9yZSB0aGUgc3Ryb2JlICovCisKKwkJLyogbWFpbnRhaW4gdGhlIGRhdGEgZHVyaW5nIDIwIHVzIGJlZm9yZSB0aGUgc3Ryb2JlICovCisJCXVkZWxheSgyMCk7CiAKIAkJYml0cy5lID0gQklUX1NFVDsKIAkJYml0cy5ycyA9IEJJVF9TRVQ7CiAJCWJpdHMucncgPSBCSVRfQ0xSOwogCQlzZXRfY3RybF9iaXRzKCk7CiAKLQkJdWRlbGF5KDQwKTsJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KKwkJLyogbWFpbnRhaW4gdGhlIHN0cm9iZSBkdXJpbmcgNDAgdXMgKi8KKwkJdWRlbGF5KDQwKTsKIAogCQliaXRzLmUgPSBCSVRfQ0xSOwogCQlzZXRfY3RybF9iaXRzKCk7CiAKLQkJdWRlbGF5KDQ1KTsJLyogdGhlIHNob3J0ZXN0IGRhdGEgdGFrZXMgYXQgbGVhc3QgNDUgdXMgKi8KKwkJLyogdGhlIHNob3J0ZXN0IGRhdGEgdGFrZXMgYXQgbGVhc3QgNDUgdXMgKi8KKwkJdWRlbGF5KDQ1KTsKIAl9CiAJc3Bpbl91bmxvY2soJnBwcnRfbG9jayk7CiAKQEAgLTk1NCw3ICs5OTAsOCBAQAogCiAJbG9uZ19zbGVlcCgxMCk7CiAKLQlsY2Rfd3JpdGVfY21kKDB4MDYpOwkvKiBlbnRyeSBtb2RlIHNldCA6IGluY3JlbWVudCwgY3Vyc29yIHNoaWZ0aW5nICovCisJLyogZW50cnkgbW9kZSBzZXQgOiBpbmNyZW1lbnQsIGN1cnNvciBzaGlmdGluZyAqLworCWxjZF93cml0ZV9jbWQoMHgwNik7CiAKIAlsY2RfY2xlYXJfZGlzcGxheSgpOwogfQpAQCAtOTY2LDMxNyArMTAwMywzMzYgQEAKICAqCiAgKi8KIAorc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX2xjZF9zcGVjaWFsX2NvZGUodm9pZCkKK3sKKwkvKiBMQ0Qgc3BlY2lhbCBjb2RlcyAqLworCisJaW50IHByb2Nlc3NlZCA9IDA7CisKKwljaGFyICplc2MgPSBsY2RfZXNjYXBlICsgMjsKKwlpbnQgb2xkZmxhZ3MgPSBsY2RfZmxhZ3M7CisKKwkvKiBjaGVjayBmb3IgZGlzcGxheSBtb2RlIGZsYWdzICovCisJc3dpdGNoICgqZXNjKSB7CisJY2FzZSAnRCc6CS8qIERpc3BsYXkgT04gKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0Q7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ2QnOgkvKiBEaXNwbGF5IE9GRiAqLworCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0Q7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ0MnOgkvKiBDdXJzb3IgT04gKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0M7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ2MnOgkvKiBDdXJzb3IgT0ZGICovCisJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfQzsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnQic6CS8qIEJsaW5rIE9OICovCisJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19COworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdiJzoJLyogQmxpbmsgT0ZGICovCisJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfQjsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CS8qIEJhY2sgbGlnaHQgT04gKi8KKwkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0w7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJy0nOgkvKiBCYWNrIGxpZ2h0IE9GRiAqLworCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0w7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJyonOgorCQkvKiBmbGFzaCBiYWNrIGxpZ2h0IHVzaW5nIHRoZSBrZXlwYWQgdGltZXIgKi8KKwkJaWYgKHNjYW5fdGltZXIuZnVuY3Rpb24gIT0gTlVMTCkgeworCQkJaWYgKGxpZ2h0X3RlbXBvID09IDAgJiYgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19MKSA9PSAwKSkKKwkJCQlsY2RfYmFja2xpZ2h0KDEpOworCQkJbGlnaHRfdGVtcG8gPSBGTEFTSF9MSUdIVF9URU1QTzsKKwkJfQorCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdmJzoJLyogU21hbGwgRm9udCAqLworCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0Y7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ0YnOgkvKiBMYXJnZSBGb250ICovCisJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19GOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICduJzoJLyogT25lIExpbmUgKi8KKwkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19OOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdOJzoJLyogVHdvIExpbmVzICovCisJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19OOworCQlicmVhazsKKwljYXNlICdsJzoJLyogU2hpZnQgQ3Vyc29yIExlZnQgKi8KKwkJaWYgKGxjZF9hZGRyX3ggPiAwKSB7CisJCQkvKiBiYWNrIG9uZSBjaGFyIGlmIG5vdCBhdCBlbmQgb2YgbGluZSAqLworCQkJaWYgKGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoKQorCQkJCWxjZF93cml0ZV9jbWQoMHgxMCk7CisJCQlsY2RfYWRkcl94LS07CisJCX0KKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAncic6CS8qIHNoaWZ0IGN1cnNvciByaWdodCAqLworCQlpZiAobGNkX2FkZHJfeCA8IGxjZF93aWR0aCkgeworCQkJLyogYWxsb3cgdGhlIGN1cnNvciB0byBwYXNzIHRoZSBlbmQgb2YgdGhlIGxpbmUgKi8KKwkJCWlmIChsY2RfYWRkcl94IDwKKwkJCSAgICAobGNkX2J3aWR0aCAtIDEpKQorCQkJCWxjZF93cml0ZV9jbWQoMHgxNCk7CisJCQlsY2RfYWRkcl94Kys7CisJCX0KKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJY2FzZSAnTCc6CS8qIHNoaWZ0IGRpc3BsYXkgbGVmdCAqLworCQlsY2RfbGVmdF9zaGlmdCsrOworCQlsY2Rfd3JpdGVfY21kKDB4MTgpOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdSJzoJLyogc2hpZnQgZGlzcGxheSByaWdodCAqLworCQlsY2RfbGVmdF9zaGlmdC0tOworCQlsY2Rfd3JpdGVfY21kKDB4MUMpOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwljYXNlICdrJzogewkvKiBraWxsIGVuZCBvZiBsaW5lICovCisJCWludCB4OworCQlmb3IgKHggPSBsY2RfYWRkcl94OyB4IDwgbGNkX2J3aWR0aDsgeCsrKQorCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKKworCQkvKiByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCQlsY2RfZ290b3h5KCk7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCX0KKwljYXNlICdJJzoJLyogcmVpbml0aWFsaXplIGRpc3BsYXkgKi8KKwkJbGNkX2luaXRfZGlzcGxheSgpOworCQlsY2RfbGVmdF9zaGlmdCA9IDA7CisJCXByb2Nlc3NlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ0cnOiB7CisJCS8qIEdlbmVyYXRvciA6IExHY3h4eHh4Li4ueHg7IG11c3QgaGF2ZSA8Yz4gYmV0d2VlbiAnMCcKKwkJICogYW5kICc3JywgcmVwcmVzZW50aW5nIHRoZSBudW1lcmljYWwgQVNDSUkgY29kZSBvZiB0aGUKKwkJICogcmVkZWZpbmVkIGNoYXJhY3RlciwgYW5kIDx4eC4uLnh4PiBhIHNlcXVlbmNlIG9mIDE2CisJCSAqIGhleCBkaWdpdHMgcmVwcmVzZW50aW5nIDggYnl0ZXMgZm9yIGVhY2ggY2hhcmFjdGVyLgorCQkgKiBNb3N0IExDRHMgd2lsbCBvbmx5IHVzZSA1IGxvd2VyIGJpdHMgb2YgdGhlIDcgZmlyc3QKKwkJICogYnl0ZXMuCisJCSAqLworCisJCXVuc2lnbmVkIGNoYXIgY2dieXRlc1s4XTsKKwkJdW5zaWduZWQgY2hhciBjZ2FkZHI7CisJCWludCBjZ29mZnNldDsKKwkJaW50IHNoaWZ0OworCQljaGFyIHZhbHVlOworCQlpbnQgYWRkcjsKKworCQlpZiAoc3RyY2hyKGVzYywgJzsnKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJZXNjKys7CisKKwkJY2dhZGRyID0gKihlc2MrKykgLSAnMCc7CisJCWlmIChjZ2FkZHIgPiA3KSB7CisJCQlwcm9jZXNzZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQljZ29mZnNldCA9IDA7CisJCXNoaWZ0ID0gMDsKKwkJdmFsdWUgPSAwOworCQl3aGlsZSAoKmVzYyAmJiBjZ29mZnNldCA8IDgpIHsKKwkJCXNoaWZ0IF49IDQ7CisJCQlpZiAoKmVzYyA+PSAnMCcgJiYgKmVzYyA8PSAnOScpCisJCQkJdmFsdWUgfD0gKCplc2MgLSAnMCcpIDw8IHNoaWZ0OworCQkJZWxzZSBpZiAoKmVzYyA+PSAnQScgJiYgKmVzYyA8PSAnWicpCisJCQkJdmFsdWUgfD0gKCplc2MgLSAnQScgKyAxMCkgPDwgc2hpZnQ7CisJCQllbHNlIGlmICgqZXNjID49ICdhJyAmJiAqZXNjIDw9ICd6JykKKwkJCQl2YWx1ZSB8PSAoKmVzYyAtICdhJyArIDEwKSA8PCBzaGlmdDsKKwkJCWVsc2UgeworCQkJCWVzYysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc2hpZnQgPT0gMCkgeworCQkJCWNnYnl0ZXNbY2dvZmZzZXQrK10gPSB2YWx1ZTsKKwkJCQl2YWx1ZSA9IDA7CisJCQl9CisKKwkJCWVzYysrOworCQl9CisKKwkJbGNkX3dyaXRlX2NtZCgweDQwIHwgKGNnYWRkciAqIDgpKTsKKwkJZm9yIChhZGRyID0gMDsgYWRkciA8IGNnb2Zmc2V0OyBhZGRyKyspCisJCQlsY2Rfd3JpdGVfZGF0YShjZ2J5dGVzW2FkZHJdKTsKKworCQkvKiBlbnN1cmVzIHRoYXQgd2Ugc3RvcCB3cml0aW5nIHRvIENHUkFNICovCisJCWxjZF9nb3RveHkoKTsKKwkJcHJvY2Vzc2VkID0gMTsKKwkJYnJlYWs7CisJfQorCWNhc2UgJ3gnOgkvKiBnb3RveHkgOiBMeFhYWFt5WVlZXTsgKi8KKwljYXNlICd5JzoJLyogZ290b3h5IDogTHlZWVlbeFhYWF07ICovCisJCWlmIChzdHJjaHIoZXNjLCAnOycpID09IE5VTEwpCisJCQlicmVhazsKKworCQl3aGlsZSAoKmVzYykgeworCQkJY2hhciAqZW5kcDsKKworCQkJaWYgKCplc2MgPT0gJ3gnKSB7CisJCQkJZXNjKys7CisJCQkJbGNkX2FkZHJfeCA9IHNpbXBsZV9zdHJ0b3VsKGVzYywgJmVuZHAsIDEwKTsKKwkJCQllc2MgPSBlbmRwOworCQkJfSBlbHNlIGlmICgqZXNjID09ICd5JykgeworCQkJCWVzYysrOworCQkJCWxjZF9hZGRyX3kgPSBzaW1wbGVfc3RydG91bChlc2MsICZlbmRwLCAxMCk7CisJCQkJZXNjID0gZW5kcDsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisKKwkJbGNkX2dvdG94eSgpOworCQlwcm9jZXNzZWQgPSAxOworCQlicmVhazsKKwl9CisKKwkvKiBDaGVjayB3ZXRoZXIgb25lIGZsYWcgd2FzIGNoYW5nZWQgKi8KKwlpZiAob2xkZmxhZ3MgIT0gbGNkX2ZsYWdzKSB7CisJCS8qIGNoZWNrIHdoZXRoZXIgb25lIG9mIEIsQyxEIGZsYWdzIHdlcmUgY2hhbmdlZCAqLworCQlpZiAoKG9sZGZsYWdzIF4gbGNkX2ZsYWdzKSAmCisJCSAgICAoTENEX0ZMQUdfQiB8IExDRF9GTEFHX0MgfCBMQ0RfRkxBR19EKSkKKwkJCS8qIHNldCBkaXNwbGF5IG1vZGUgKi8KKwkJCWxjZF93cml0ZV9jbWQoMHgwOAorCQkJCSAgICAgIHwgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19EKSA/IDQgOiAwKQorCQkJCSAgICAgIHwgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19DKSA/IDIgOiAwKQorCQkJCSAgICAgIHwgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19CKSA/IDEgOiAwKSk7CisJCS8qIGNoZWNrIHdoZXRoZXIgb25lIG9mIEYsTiBmbGFncyB3YXMgY2hhbmdlZCAqLworCQllbHNlIGlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYgKExDRF9GTEFHX0YgfCBMQ0RfRkxBR19OKSkKKwkJCWxjZF93cml0ZV9jbWQoMHgzMAorCQkJCSAgICAgIHwgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19GKSA/IDQgOiAwKQorCQkJCSAgICAgIHwgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19OKSA/IDggOiAwKSk7CisJCS8qIGNoZWNrIHdldGhlciBMIGZsYWcgd2FzIGNoYW5nZWQgKi8KKwkJZWxzZSBpZiAoKG9sZGZsYWdzIF4gbGNkX2ZsYWdzKSAmIChMQ0RfRkxBR19MKSkgeworCQkJaWYgKGxjZF9mbGFncyAmIChMQ0RfRkxBR19MKSkKKwkJCQlsY2RfYmFja2xpZ2h0KDEpOworCQkJZWxzZSBpZiAobGlnaHRfdGVtcG8gPT0gMCkKKwkJCQkvKiBzd2l0Y2ggb2ZmIHRoZSBsaWdodCBvbmx5IHdoZW4gdGhlIHRlbXBvCisJCQkJICAgbGlnaHRpbmcgaXMgZ29uZSAqLworCQkJCWxjZF9iYWNrbGlnaHQoMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gcHJvY2Vzc2VkOworfQorCiBzdGF0aWMgc3NpemVfdCBsY2Rfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQogCWNvbnN0IGNoYXIgKnRtcCA9IGJ1ZjsKIAljaGFyIGM7CiAKIAlmb3IgKDsgY291bnQtLSA+IDA7IChwcG9zID8gKCpwcG9zKSsrIDogMCksICsrdG1wKSB7CiAJCWlmICghaW5faW50ZXJydXB0KCkgJiYgKCgoY291bnQgKyAxKSAmIDB4MWYpID09IDApKQotCQkJc2NoZWR1bGUoKTsJLyogbGV0J3MgYmUgYSBsaXR0bGUgbmljZSB3aXRoIG90aGVyIHByb2Nlc3NlcyB0aGF0IG5lZWQgc29tZSBDUFUgKi8KKwkJCS8qIGxldCdzIGJlIGEgbGl0dGxlIG5pY2Ugd2l0aCBvdGhlciBwcm9jZXNzZXMKKwkJCSAgIHRoYXQgbmVlZCBzb21lIENQVSAqLworCQkJc2NoZWR1bGUoKTsKIAogCQlpZiAocHBvcyA9PSBOVUxMICYmIGZpbGUgPT0gTlVMTCkKLQkJCWMgPSAqdG1wOwkvKiBsZXQncyBub3QgdXNlIGdldF91c2VyKCkgZnJvbSB0aGUga2VybmVsICEgKi8KKwkJCS8qIGxldCdzIG5vdCB1c2UgZ2V0X3VzZXIoKSBmcm9tIHRoZSBrZXJuZWwgISAqLworCQkJYyA9ICp0bXA7CiAJCWVsc2UgaWYgKGdldF91c2VyKGMsIHRtcCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQkvKiBmaXJzdCwgd2UnbGwgdGVzdCBpZiB3ZSdyZSBpbiBlc2NhcGUgbW9kZSAqLwotCQlpZiAoKGMgIT0gJ1xuJykgJiYgbGNkX2VzY2FwZV9sZW4gPj0gMCkgewkvKiB5ZXMsIGxldCdzIGFkZCB0aGlzIGNoYXIgdG8gdGhlIGJ1ZmZlciAqLworCQlpZiAoKGMgIT0gJ1xuJykgJiYgbGNkX2VzY2FwZV9sZW4gPj0gMCkgeworCQkJLyogeWVzLCBsZXQncyBhZGQgdGhpcyBjaGFyIHRvIHRoZSBidWZmZXIgKi8KIAkJCWxjZF9lc2NhcGVbbGNkX2VzY2FwZV9sZW4rK10gPSBjOwogCQkJbGNkX2VzY2FwZVtsY2RfZXNjYXBlX2xlbl0gPSAwOwogCQl9IGVsc2UgewotCQkJbGNkX2VzY2FwZV9sZW4gPSAtMTsJLyogYWJvcnRzIGFueSBwcmV2aW91cyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCS8qIGFib3J0cyBhbnkgcHJldmlvdXMgZXNjYXBlIHNlcXVlbmNlICovCisJCQlsY2RfZXNjYXBlX2xlbiA9IC0xOwogCiAJCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgTENEX0VTQ0FQRV9DSEFSOgkvKiBzdGFydCBvZiBhbiBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCWNhc2UgTENEX0VTQ0FQRV9DSEFSOgorCQkJCS8qIHN0YXJ0IG9mIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLwogCQkJCWxjZF9lc2NhcGVfbGVuID0gMDsKIAkJCQlsY2RfZXNjYXBlW2xjZF9lc2NhcGVfbGVuXSA9IDA7CiAJCQkJYnJlYWs7Ci0JCQljYXNlICdcYic6CS8qIGdvIGJhY2sgb25lIGNoYXIgYW5kIGNsZWFyIGl0ICovCisJCQljYXNlICdcYic6CisJCQkJLyogZ28gYmFjayBvbmUgY2hhciBhbmQgY2xlYXIgaXQgKi8KIAkJCQlpZiAobGNkX2FkZHJfeCA+IDApIHsKLQkJCQkJaWYgKGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoKQkvKiBjaGVjayBpZiB3ZSdyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSAqLwotCQkJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsJLyogYmFjayBvbmUgY2hhciAqLworCQkJCQkvKiBjaGVjayBpZiB3ZSdyZSBub3QgYXQgdGhlCisJCQkJCSAgIGVuZCBvZiB0aGUgbGluZSAqLworCQkJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpCisJCQkJCQkvKiBiYWNrIG9uZSBjaGFyICovCisJCQkJCQlsY2Rfd3JpdGVfY21kKDB4MTApOwogCQkJCQlsY2RfYWRkcl94LS07CiAJCQkJfQotCQkJCWxjZF93cml0ZV9kYXRhKCcgJyk7CS8qIHJlcGxhY2Ugd2l0aCBhIHNwYWNlICovCi0JCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsJLyogYmFjayBvbmUgY2hhciBhZ2FpbiAqLworCQkJCS8qIHJlcGxhY2Ugd2l0aCBhIHNwYWNlICovCisJCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKKwkJCQkvKiBiYWNrIG9uZSBjaGFyIGFnYWluICovCisJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ1wwMTQnOgkvKiBxdWlja2x5IGNsZWFyIHRoZSBkaXNwbGF5ICovCisJCQljYXNlICdcMDE0JzoKKwkJCQkvKiBxdWlja2x5IGNsZWFyIHRoZSBkaXNwbGF5ICovCiAJCQkJbGNkX2NsZWFyX2Zhc3QoKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ1xuJzoJLyogZmx1c2ggdGhlIHJlbWFpbmRlciBvZiB0aGUgY3VycmVudCBsaW5lIGFuZCBnbyB0byB0aGUKLQkJCQkJICAgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUgKi8KKwkJCWNhc2UgJ1xuJzoKKwkJCQkvKiBmbHVzaCB0aGUgcmVtYWluZGVyIG9mIHRoZSBjdXJyZW50IGxpbmUgYW5kCisJCQkJICAgZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lICovCiAJCQkJZm9yICg7IGxjZF9hZGRyX3ggPCBsY2RfYndpZHRoOyBsY2RfYWRkcl94KyspCiAJCQkJCWxjZF93cml0ZV9kYXRhKCcgJyk7CiAJCQkJbGNkX2FkZHJfeCA9IDA7CiAJCQkJbGNkX2FkZHJfeSA9IChsY2RfYWRkcl95ICsgMSkgJSBsY2RfaGVpZ2h0OwogCQkJCWxjZF9nb3RveHkoKTsKIAkJCQlicmVhazsKLQkJCWNhc2UgJ1xyJzoJLyogZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtZSBsaW5lICovCisJCQljYXNlICdccic6CisJCQkJLyogZ28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2FtZSBsaW5lICovCiAJCQkJbGNkX2FkZHJfeCA9IDA7CiAJCQkJbGNkX2dvdG94eSgpOwogCQkJCWJyZWFrOwotCQkJY2FzZSAnXHQnOgkvKiBwcmludCBhIHNwYWNlIGluc3RlYWQgb2YgdGhlIHRhYiAqLworCQkJY2FzZSAnXHQnOgorCQkJCS8qIHByaW50IGEgc3BhY2UgaW5zdGVhZCBvZiB0aGUgdGFiICovCiAJCQkJbGNkX3ByaW50KCcgJyk7CiAJCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgkvKiBzaW1wbHkgcHJpbnQgdGhpcyBjaGFyICovCisJCQlkZWZhdWx0OgorCQkJCS8qIHNpbXBseSBwcmludCB0aGlzIGNoYXIgKi8KIAkJCQlsY2RfcHJpbnQoYyk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAogCQkvKiBub3cgd2UnbGwgc2VlIGlmIHdlJ3JlIGluIGFuIGVzY2FwZSBtb2RlIGFuZCBpZiB0aGUgY3VycmVudAotCQkgICBlc2NhcGUgc2VxdWVuY2UgY2FuIGJlIHVuZGVyc3Rvb2QuCi0JCSAqLwotCQlpZiAobGNkX2VzY2FwZV9sZW4gPj0gMikgewkvKiBtaW5pbWFsIGxlbmd0aCBmb3IgYW4gZXNjYXBlIGNvbW1hbmQgKi8KLQkJCWludCBwcm9jZXNzZWQgPSAwOwkvKiAxIG1lYW5zIHRoZSBjb21tYW5kIGhhcyBiZWVuIHByb2Nlc3NlZCAqLworCQkgICBlc2NhcGUgc2VxdWVuY2UgY2FuIGJlIHVuZGVyc3Rvb2QuICovCisJCWlmIChsY2RfZXNjYXBlX2xlbiA+PSAyKSB7CisJCQlpbnQgcHJvY2Vzc2VkID0gMDsKIAotCQkJaWYgKCFzdHJjbXAobGNkX2VzY2FwZSwgIlsySiIpKSB7CS8qIENsZWFyIHRoZSBkaXNwbGF5ICovCi0JCQkJbGNkX2NsZWFyX2Zhc3QoKTsJLyogY2xlYXIgZGlzcGxheSAqLworCQkJaWYgKCFzdHJjbXAobGNkX2VzY2FwZSwgIlsySiIpKSB7CisJCQkJLyogY2xlYXIgdGhlIGRpc3BsYXkgKi8KKwkJCQlsY2RfY2xlYXJfZmFzdCgpOwogCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQl9IGVsc2UgaWYgKCFzdHJjbXAobGNkX2VzY2FwZSwgIltIIikpIHsJLyogQ3Vyc29yIHRvIGhvbWUgKi8KKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChsY2RfZXNjYXBlLCAiW0giKSkgeworCQkJCS8qIGN1cnNvciB0byBob21lICovCiAJCQkJbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOwogCQkJCWxjZF9nb3RveHkoKTsKIAkJCQlwcm9jZXNzZWQgPSAxOwogCQkJfQogCQkJLyogY29kZXMgc3RhcnRpbmcgd2l0aCBeW1tMICovCiAJCQllbHNlIGlmICgobGNkX2VzY2FwZV9sZW4gPj0gMykgJiYKLQkJCQkgKGxjZF9lc2NhcGVbMF0gPT0gJ1snKSAmJiAobGNkX2VzY2FwZVsxXSA9PSAnTCcpKSB7CS8qIExDRCBzcGVjaWFsIGNvZGVzICovCi0KLQkJCQljaGFyICplc2MgPSBsY2RfZXNjYXBlICsgMjsKLQkJCQlpbnQgb2xkZmxhZ3MgPSBsY2RfZmxhZ3M7Ci0KLQkJCQkvKiBjaGVjayBmb3IgZGlzcGxheSBtb2RlIGZsYWdzICovCi0JCQkJc3dpdGNoICgqZXNjKSB7Ci0JCQkJY2FzZSAnRCc6CS8qIERpc3BsYXkgT04gKi8KLQkJCQkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0Q7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2QnOgkvKiBEaXNwbGF5IE9GRiAqLwotCQkJCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0Q7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ0MnOgkvKiBDdXJzb3IgT04gKi8KLQkJCQkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0M7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2MnOgkvKiBDdXJzb3IgT0ZGICovCi0JCQkJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfQzsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnQic6CS8qIEJsaW5rIE9OICovCi0JCQkJCWxjZF9mbGFncyB8PSBMQ0RfRkxBR19COwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdiJzoJLyogQmxpbmsgT0ZGICovCi0JCQkJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfQjsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnKyc6CS8qIEJhY2sgbGlnaHQgT04gKi8KLQkJCQkJbGNkX2ZsYWdzIHw9IExDRF9GTEFHX0w7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJy0nOgkvKiBCYWNrIGxpZ2h0IE9GRiAqLwotCQkJCQlsY2RfZmxhZ3MgJj0gfkxDRF9GTEFHX0w7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJyonOgkvKiBmbGFzaCBiYWNrIGxpZ2h0IHVzaW5nIHRoZSBrZXlwYWQgdGltZXIgKi8KLQkJCQkJaWYgKHNjYW5fdGltZXIuZnVuY3Rpb24gIT0gTlVMTCkgewotCQkJCQkJaWYgKGxpZ2h0X3RlbXBvID09IDAKLQkJCQkJCSAgICAmJiAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0wpCi0JCQkJCQkJPT0gMCkpCi0JCQkJCQkJbGNkX2JhY2tsaWdodCgxKTsKLQkJCQkJCWxpZ2h0X3RlbXBvID0gRkxBU0hfTElHSFRfVEVNUE87Ci0JCQkJCX0KLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnZic6CS8qIFNtYWxsIEZvbnQgKi8KLQkJCQkJbGNkX2ZsYWdzICY9IH5MQ0RfRkxBR19GOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdGJzoJLyogTGFyZ2UgRm9udCAqLwotCQkJCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfRjsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnbic6CS8qIE9uZSBMaW5lICovCi0JCQkJCWxjZF9mbGFncyAmPSB+TENEX0ZMQUdfTjsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnTic6CS8qIFR3byBMaW5lcyAqLwotCQkJCQlsY2RfZmxhZ3MgfD0gTENEX0ZMQUdfTjsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlICdsJzoJLyogU2hpZnQgQ3Vyc29yIExlZnQgKi8KLQkJCQkJaWYgKGxjZF9hZGRyX3ggPiAwKSB7Ci0JCQkJCQlpZiAobGNkX2FkZHJfeCA8IGxjZF9id2lkdGgpCi0JCQkJCQkJbGNkX3dyaXRlX2NtZCgweDEwKTsJLyogYmFjayBvbmUgY2hhciBpZiBub3QgYXQgZW5kIG9mIGxpbmUgKi8KLQkJCQkJCWxjZF9hZGRyX3gtLTsKLQkJCQkJfQotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgJ3InOgkvKiBzaGlmdCBjdXJzb3IgcmlnaHQgKi8KLQkJCQkJaWYgKGxjZF9hZGRyX3ggPCBsY2Rfd2lkdGgpIHsKLQkJCQkJCWlmIChsY2RfYWRkcl94IDwgKGxjZF9id2lkdGggLSAxKSkKLQkJCQkJCQlsY2Rfd3JpdGVfY21kKDB4MTQpOwkvKiBhbGxvdyB0aGUgY3Vyc29yIHRvIHBhc3MgdGhlIGVuZCBvZiB0aGUgbGluZSAqLwotCQkJCQkJbGNkX2FkZHJfeCsrOwotCQkJCQl9Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAnTCc6CS8qIHNoaWZ0IGRpc3BsYXkgbGVmdCAqLwotCQkJCQlsY2RfbGVmdF9zaGlmdCsrOwotCQkJCQlsY2Rfd3JpdGVfY21kKDB4MTgpOwotCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQlicmVhazsKLQotCQkJCWNhc2UgJ1InOgkvKiBzaGlmdCBkaXNwbGF5IHJpZ2h0ICovCi0JCQkJCWxjZF9sZWZ0X3NoaWZ0LS07Ci0JCQkJCWxjZF93cml0ZV9jbWQoMHgxQyk7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSAnayc6ewkvKiBraWxsIGVuZCBvZiBsaW5lICovCi0JCQkJCQlpbnQgeDsKLQkJCQkJCWZvciAoeCA9IGxjZF9hZGRyX3g7IHggPCBsY2RfYndpZHRoOyB4KyspCi0JCQkJCQkJbGNkX3dyaXRlX2RhdGEoJyAnKTsKLQkJCQkJCWxjZF9nb3RveHkoKTsJLyogcmVzdG9yZSBjdXJzb3IgcG9zaXRpb24gKi8KLQkJCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCWNhc2UgJ0knOgkvKiByZWluaXRpYWxpemUgZGlzcGxheSAqLwotCQkJCQlsY2RfaW5pdF9kaXNwbGF5KCk7Ci0JCQkJCWxjZF9sZWZ0X3NoaWZ0ID0gMDsKLQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlICdHJzoJLyogR2VuZXJhdG9yIDogTEdjeHh4eHguLi54eDsgKi8gIHsKLQkJCQkJCS8qIG11c3QgaGF2ZSA8Yz4gYmV0d2VlbiAnMCcgYW5kICc3JywgcmVwcmVzZW50aW5nIHRoZSBudW1lcmljYWwKLQkJCQkJCSAqIEFTQ0lJIGNvZGUgb2YgdGhlIHJlZGVmaW5lZCBjaGFyYWN0ZXIsIGFuZCA8eHguLi54eD4gYSBzZXF1ZW5jZQotCQkJCQkJICogb2YgMTYgaGV4IGRpZ2l0cyByZXByZXNlbnRpbmcgOCBieXRlcyBmb3IgZWFjaCBjaGFyYWN0ZXIuIE1vc3QKLQkJCQkJCSAqIExDRHMgd2lsbCBvbmx5IHVzZSA1IGxvd2VyIGJpdHMgb2YgdGhlIDcgZmlyc3QgYnl0ZXMuCi0JCQkJCQkgKi8KLQotCQkJCQkJdW5zaWduZWQgY2hhciBjZ2J5dGVzWzhdOwotCQkJCQkJdW5zaWduZWQgY2hhciBjZ2FkZHI7Ci0JCQkJCQlpbnQgY2dvZmZzZXQ7Ci0JCQkJCQlpbnQgc2hpZnQ7Ci0JCQkJCQljaGFyIHZhbHVlOwotCQkJCQkJaW50IGFkZHI7Ci0KLQkJCQkJCWlmIChzdHJjaHIoZXNjLCAnOycpID09IE5VTEwpCi0JCQkJCQkJYnJlYWs7Ci0KLQkJCQkJCWVzYysrOwotCi0JCQkJCQljZ2FkZHIgPSAqKGVzYysrKSAtICcwJzsKLQkJCQkJCWlmIChjZ2FkZHIgPiA3KSB7Ci0JCQkJCQkJcHJvY2Vzc2VkID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQotCQkJCQkJY2dvZmZzZXQgPSAwOwotCQkJCQkJc2hpZnQgPSAwOwotCQkJCQkJdmFsdWUgPSAwOwotCQkJCQkJd2hpbGUgKCplc2MgJiYgY2dvZmZzZXQgPCA4KSB7Ci0JCQkJCQkJc2hpZnQgXj0gNDsKLQkJCQkJCQlpZiAoKmVzYyA+PSAnMCcgJiYgKmVzYyA8PSAnOScpCi0JCQkJCQkJCXZhbHVlIHw9ICgqZXNjIC0gJzAnKSA8PCBzaGlmdDsKLQkJCQkJCQllbHNlIGlmICgqZXNjID49ICdBJyAmJiAqZXNjIDw9ICdaJykKLQkJCQkJCQkJdmFsdWUgfD0gKCplc2MgLSAnQScgKyAxMCkgPDwgc2hpZnQ7Ci0JCQkJCQkJZWxzZSBpZiAoKmVzYyA+PSAnYScgJiYgKmVzYyA8PSAneicpCi0JCQkJCQkJCXZhbHVlIHw9ICgqZXNjIC0gJ2EnICsgMTApIDw8IHNoaWZ0OwotCQkJCQkJCWVsc2UgewotCQkJCQkJCQllc2MrKzsKLQkJCQkJCQkJY29udGludWU7Ci0JCQkJCQkJfQotCi0JCQkJCQkJaWYgKHNoaWZ0ID09IDApIHsKLQkJCQkJCQkJY2dieXRlc1tjZ29mZnNldCsrXSA9IHZhbHVlOwotCQkJCQkJCQl2YWx1ZSA9IDA7Ci0JCQkJCQkJfQotCi0JCQkJCQkJZXNjKys7Ci0JCQkJCQl9Ci0KLQkJCQkJCWxjZF93cml0ZV9jbWQoMHg0MCB8IChjZ2FkZHIgKiA4KSk7Ci0JCQkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgY2dvZmZzZXQ7IGFkZHIrKykKLQkJCQkJCQlsY2Rfd3JpdGVfZGF0YShjZ2J5dGVzW2FkZHJdKTsKLQotCQkJCQkJbGNkX2dvdG94eSgpOwkvKiBlbnN1cmVzIHRoYXQgd2Ugc3RvcCB3cml0aW5nIHRvIENHUkFNICovCi0JCQkJCQlwcm9jZXNzZWQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQljYXNlICd4JzoJLyogZ290b3h5IDogTHhYWFhbeVlZWV07ICovCi0JCQkJY2FzZSAneSc6CS8qIGdvdG94eSA6IEx5WVlZW3hYWFhdOyAqLwotCQkJCQlpZiAoc3RyY2hyKGVzYywgJzsnKSA9PSBOVUxMKQotCQkJCQkJYnJlYWs7Ci0KLQkJCQkJd2hpbGUgKCplc2MpIHsKLQkJCQkJCWlmICgqZXNjID09ICd4JykgewotCQkJCQkJCWVzYysrOwotCQkJCQkJCWxjZF9hZGRyX3ggPSAwOwotCQkJCQkJCXdoaWxlIChpc2RpZ2l0KCplc2MpKSB7Ci0JCQkJCQkJCWxjZF9hZGRyX3ggPQotCQkJCQkJCQkgICAgbGNkX2FkZHJfeCAqCi0JCQkJCQkJCSAgICAxMCArICgqZXNjIC0KLQkJCQkJCQkJCSAgJzAnKTsKLQkJCQkJCQkJZXNjKys7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlIGlmICgqZXNjID09ICd5JykgewotCQkJCQkJCWVzYysrOwotCQkJCQkJCWxjZF9hZGRyX3kgPSAwOwotCQkJCQkJCXdoaWxlIChpc2RpZ2l0KCplc2MpKSB7Ci0JCQkJCQkJCWxjZF9hZGRyX3kgPQotCQkJCQkJCQkgICAgbGNkX2FkZHJfeSAqCi0JCQkJCQkJCSAgICAxMCArICgqZXNjIC0KLQkJCQkJCQkJCSAgJzAnKTsKLQkJCQkJCQkJZXNjKys7Ci0JCQkJCQkJfQotCQkJCQkJfSBlbHNlCi0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQotCQkJCQlsY2RfZ290b3h5KCk7Ci0JCQkJCXByb2Nlc3NlZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0JLyogZW5kIG9mIHN3aXRjaCAqLwotCi0JCQkJLyogQ2hlY2sgd2V0aGVyIG9uZSBmbGFnIHdhcyBjaGFuZ2VkICovCi0JCQkJaWYgKG9sZGZsYWdzICE9IGxjZF9mbGFncykgewotCQkJCQkvKiBjaGVjayB3ZXRoZXIgb25lIG9mIEIsQyxEIGZsYWdzIHdhcyBjaGFuZ2VkICovCi0JCQkJCWlmICgob2xkZmxhZ3MgXiBsY2RfZmxhZ3MpICYKLQkJCQkJICAgIChMQ0RfRkxBR19CIHwgTENEX0ZMQUdfQyB8IExDRF9GTEFHX0QpKQotCQkJCQkJLyogc2V0IGRpc3BsYXkgbW9kZSAqLwotCQkJCQkJbGNkX3dyaXRlX2NtZCgweDA4IHwKLQkJCQkJCQkgICAgICAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0QpID8gNCA6IDApIHwKLQkJCQkJCQkgICAgICAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0MpID8gMiA6IDApIHwKLQkJCQkJCQkgICAgICAoKGxjZF9mbGFncyAmIExDRF9GTEFHX0IpID8gMSA6IDApKTsKLQkJCQkJLyogY2hlY2sgd2V0aGVyIG9uZSBvZiBGLE4gZmxhZ3Mgd2FzIGNoYW5nZWQgKi8KLQkJCQkJZWxzZSBpZiAoKG9sZGZsYWdzIF4gbGNkX2ZsYWdzKSAmCi0JCQkJCQkgKExDRF9GTEFHX0YgfCBMQ0RfRkxBR19OKSkKLQkJCQkJCWxjZF93cml0ZV9jbWQoMHgzMCB8Ci0JCQkJCQkJICAgICAgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19GKSA/IDQgOiAwKSB8Ci0JCQkJCQkJICAgICAgKChsY2RfZmxhZ3MgJiBMQ0RfRkxBR19OKSA/IDggOiAwKSk7Ci0JCQkJCS8qIGNoZWNrIHdldGhlciBMIGZsYWcgd2FzIGNoYW5nZWQgKi8KLQkJCQkJZWxzZSBpZiAoKG9sZGZsYWdzIF4gbGNkX2ZsYWdzKSAmCi0JCQkJCQkgKExDRF9GTEFHX0wpKSB7Ci0JCQkJCQlpZiAobGNkX2ZsYWdzICYgKExDRF9GTEFHX0wpKQotCQkJCQkJCWxjZF9iYWNrbGlnaHQoMSk7Ci0JCQkJCQllbHNlIGlmIChsaWdodF90ZW1wbyA9PSAwKQkvKiBzd2l0Y2ggb2ZmIHRoZSBsaWdodCBvbmx5IHdoZW4gdGhlIHRlbXBvIGxpZ2h0aW5nIGlzIGdvbmUgKi8KLQkJCQkJCQlsY2RfYmFja2xpZ2h0KDApOwotCQkJCQl9Ci0JCQkJfQorCQkJCSAobGNkX2VzY2FwZVswXSA9PSAnWycpICYmCisJCQkJIChsY2RfZXNjYXBlWzFdID09ICdMJykpIHsKKwkJCQlwcm9jZXNzZWQgPSBoYW5kbGVfbGNkX3NwZWNpYWxfY29kZSgpOwogCQkJfQogCiAJCQkvKiBMQ0Qgc3BlY2lhbCBlc2NhcGUgY29kZXMgKi8KLQkJCS8qIGZsdXNoIHRoZSBlc2NhcGUgc2VxdWVuY2UgaWYgaXQncyBiZWVuIHByb2Nlc3NlZCBvciBpZiBpdCBpcwotCQkJICAgZ2V0dGluZyB0b28gbG9uZy4gKi8KKwkJCS8qIGZsdXNoIHRoZSBlc2NhcGUgc2VxdWVuY2UgaWYgaXQncyBiZWVuIHByb2Nlc3NlZAorCQkJICAgb3IgaWYgaXQgaXMgZ2V0dGluZyB0b28gbG9uZy4gKi8KIAkJCWlmIChwcm9jZXNzZWQgfHwgKGxjZF9lc2NhcGVfbGVuID49IExDRF9FU0NBUEVfTEVOKSkKIAkJCQlsY2RfZXNjYXBlX2xlbiA9IC0xOwotCQl9CQkvKiBlc2NhcGUgY29kZXMgKi8KKwkJfSAvKiBlc2NhcGUgY29kZXMgKi8KIAl9CiAKIAlyZXR1cm4gdG1wIC0gYnVmOwpAQCAtMTI5NSw3ICsxMzUxLDcgQEAKIAkJbGNkX211c3RfY2xlYXIgPSAwOwogCX0KIAlsY2Rfb3Blbl9jbnQrKzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBpbnQgbGNkX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMzA0LDEwICsxMzYwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7CiAJLndyaXRlICAgPSBsY2Rfd3JpdGUsCiAJLm9wZW4gICAgPSBsY2Rfb3BlbiwKIAkucmVsZWFzZSA9IGxjZF9yZWxlYXNlLAorCS5sbHNlZWsgID0gbm9fbGxzZWVrLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGxjZF9kZXYgPSB7CkBAIC0xMzI3LDcgKzEzODQsOCBAQAogdm9pZCBsY2RfaW5pdCh2b2lkKQogewogCXN3aXRjaCAobGNkX3R5cGUpIHsKLQljYXNlIExDRF9UWVBFX09MRDoJLyogcGFyYWxsZWwgbW9kZSwgOCBiaXRzICovCisJY2FzZSBMQ0RfVFlQRV9PTEQ6CisJCS8qIHBhcmFsbGVsIG1vZGUsIDggYml0cyAqLwogCQlpZiAobGNkX3Byb3RvIDwgMCkKIAkJCWxjZF9wcm90byA9IExDRF9QUk9UT19QQVJBTExFTDsKIAkJaWYgKGxjZF9jaGFyc2V0IDwgMCkKQEAgLTEzNDYsNyArMTQwNCw4IEBACiAJCWlmIChsY2RfaGVpZ2h0IDwgMCkKIAkJCWxjZF9oZWlnaHQgPSAyOwogCQlicmVhazsKLQljYXNlIExDRF9UWVBFX0tTMDA3NDoJLyogc2VyaWFsIG1vZGUsIGtzMDA3NCAqLworCWNhc2UgTENEX1RZUEVfS1MwMDc0OgorCQkvKiBzZXJpYWwgbW9kZSwga3MwMDc0ICovCiAJCWlmIChsY2RfcHJvdG8gPCAwKQogCQkJbGNkX3Byb3RvID0gTENEX1BST1RPX1NFUklBTDsKIAkJaWYgKGxjZF9jaGFyc2V0IDwgMCkKQEAgLTEzNjcsNyArMTQyNiw4IEBACiAJCWlmIChsY2RfaGVpZ2h0IDwgMCkKIAkJCWxjZF9oZWlnaHQgPSAyOwogCQlicmVhazsKLQljYXNlIExDRF9UWVBFX05FWENPTToJLyogcGFyYWxsZWwgbW9kZSwgOCBiaXRzLCBnZW5lcmljICovCisJY2FzZSBMQ0RfVFlQRV9ORVhDT006CisJCS8qIHBhcmFsbGVsIG1vZGUsIDggYml0cywgZ2VuZXJpYyAqLwogCQlpZiAobGNkX3Byb3RvIDwgMCkKIAkJCWxjZF9wcm90byA9IExDRF9QUk9UT19QQVJBTExFTDsKIAkJaWYgKGxjZF9jaGFyc2V0IDwgMCkKQEAgLTEzODgsMTQgKzE0NDgsMTYgQEAKIAkJaWYgKGxjZF9oZWlnaHQgPCAwKQogCQkJbGNkX2hlaWdodCA9IDI7CiAJCWJyZWFrOwotCWNhc2UgTENEX1RZUEVfQ1VTVE9NOgkvKiBjdXN0b21lci1kZWZpbmVkICovCisJY2FzZSBMQ0RfVFlQRV9DVVNUT006CisJCS8qIGN1c3RvbWVyLWRlZmluZWQgKi8KIAkJaWYgKGxjZF9wcm90byA8IDApCiAJCQlsY2RfcHJvdG8gPSBERUZBVUxUX0xDRF9QUk9UTzsKIAkJaWYgKGxjZF9jaGFyc2V0IDwgMCkKIAkJCWxjZF9jaGFyc2V0ID0gREVGQVVMVF9MQ0RfQ0hBUlNFVDsKIAkJLyogZGVmYXVsdCBnZW9tZXRyeSB3aWxsIGJlIHNldCBsYXRlciAqLwogCQlicmVhazsKLQljYXNlIExDRF9UWVBFX0hBTlRST05JWDoJLyogcGFyYWxsZWwgbW9kZSwgOCBiaXRzLCBoYW50cm9uaXgtbGlrZSAqLworCWNhc2UgTENEX1RZUEVfSEFOVFJPTklYOgorCQkvKiBwYXJhbGxlbCBtb2RlLCA4IGJpdHMsIGhhbnRyb25peC1saWtlICovCiAJZGVmYXVsdDoKIAkJaWYgKGxjZF9wcm90byA8IDApCiAJCQlsY2RfcHJvdG8gPSBMQ0RfUFJPVE9fUEFSQUxMRUw7CkBAIC0xNDk2LDggKzE1NTgsNyBAQAogCiAJLyogYmVmb3JlIHRoaXMgbGluZSwgd2UgbXVzdCBOT1Qgc2VuZCBhbnl0aGluZyB0byB0aGUgZGlzcGxheS4KIAkgKiBTaW5jZSBsY2RfaW5pdF9kaXNwbGF5KCkgbmVlZHMgdG8gd3JpdGUgZGF0YSwgd2UgaGF2ZSB0bwotCSAqIGVuYWJsZSBtYXJrIHRoZSBMQ0QgaW5pdGlhbGl6ZWQganVzdCBiZWZvcmUuCi0JICovCisJICogZW5hYmxlIG1hcmsgdGhlIExDRCBpbml0aWFsaXplZCBqdXN0IGJlZm9yZS4gKi8KIAlsY2RfaW5pdGlhbGl6ZWQgPSAxOwogCWxjZF9pbml0X2Rpc3BsYXkoKTsKIApAQCAtMTUxMSw3ICsxNTcyLDggQEAKIAkJCVBBTkVMX1ZFUlNJT04pOwogI2VuZGlmCiAJbGNkX2FkZHJfeCA9IGxjZF9hZGRyX3kgPSAwOwotCWxjZF9tdXN0X2NsZWFyID0gMTsJLyogY2xlYXIgdGhlIGRpc3BsYXkgb24gdGhlIG5leHQgZGV2aWNlIG9wZW5pbmcgKi8KKwkvKiBjbGVhciB0aGUgZGlzcGxheSBvbiB0aGUgbmV4dCBkZXZpY2Ugb3BlbmluZyAqLworCWxjZF9tdXN0X2NsZWFyID0gMTsKIAlsY2RfZ290b3h5KCk7CiB9CiAKQEAgLTE1MzUsNyArMTU5Nyw4IEBACiAJCQlyZXR1cm4gLUVJTlRSOwogCX0KIAotCWZvciAoOyBjb3VudC0tID4gMCAmJiAoa2V5cGFkX2J1ZmxlbiA+IDApOyArK2ksICsrdG1wLCAtLWtleXBhZF9idWZsZW4pIHsKKwlmb3IgKDsgY291bnQtLSA+IDAgJiYgKGtleXBhZF9idWZsZW4gPiAwKTsKKwkgICAgICsraSwgKyt0bXAsIC0ta2V5cGFkX2J1ZmxlbikgewogCQlwdXRfdXNlcihrZXlwYWRfYnVmZmVyW2tleXBhZF9zdGFydF0sIHRtcCk7CiAJCWtleXBhZF9zdGFydCA9IChrZXlwYWRfc3RhcnQgKyAxKSAlIEtFWVBBRF9CVUZGRVI7CiAJfQpAQCAtMTU2NCw3ICsxNjI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga2V5cGFkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrZXlwYWRfZm9wcyA9IHsKIAkucmVhZCAgICA9IGtleXBhZF9yZWFkLAkJLyogcmVhZCAqLwogCS5vcGVuICAgID0ga2V5cGFkX29wZW4sCQkvKiBvcGVuICovCiAJLnJlbGVhc2UgPSBrZXlwYWRfcmVsZWFzZSwJLyogY2xvc2UgKi8KQEAgLTE1OTEsMTQgKzE2NTQsMTUgQEAKIAl9CiB9CiAKLS8qIHRoaXMgZnVuY3Rpb24gc2NhbnMgYWxsIHRoZSBiaXRzIGludm9sdmluZyBhdCBsZWFzdCBvbmUgbG9naWNhbCBzaWduYWwsIGFuZCBwdXRzIHRoZQotICogcmVzdWx0cyBpbiB0aGUgYml0ZmllbGQgInBoeXNfcmVhZCIgKG9uZSBiaXQgcGVyIGVzdGFibGlzaGVkIGNvbnRhY3QpLCBhbmQgc2V0cwotICogInBoeXNfcmVhZF9wcmV2IiB0byAicGh5c19yZWFkIi4KKy8qIHRoaXMgZnVuY3Rpb24gc2NhbnMgYWxsIHRoZSBiaXRzIGludm9sdmluZyBhdCBsZWFzdCBvbmUgbG9naWNhbCBzaWduYWwsCisgKiBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbiB0aGUgYml0ZmllbGQgInBoeXNfcmVhZCIgKG9uZSBiaXQgcGVyIGVzdGFibGlzaGVkCisgKiBjb250YWN0KSwgYW5kIHNldHMgInBoeXNfcmVhZF9wcmV2IiB0byAicGh5c19yZWFkIi4KICAqCi0gKiBOb3RlOiB0byBkZWJvdW5jZSBpbnB1dCBzaWduYWxzLCB3ZSB3aWxsIG9ubHkgY29uc2lkZXIgYXMgc3dpdGNoZWQgYSBzaWduYWwgd2hpY2ggaXMKLSAqIHN0YWJsZSBhY3Jvc3MgMiBtZWFzdXJlcy4gU2lnbmFscyB3aGljaCBhcmUgZGlmZmVyZW50IGJldHdlZW4gdHdvIHJlYWRzIHdpbGwgYmUga2VwdAotICogYXMgdGhleSBwcmV2aW91c2x5IHdlcmUgaW4gdGhlaXIgbG9naWNhbCBmb3JtIChwaHlzX3ByZXYpLiBBIHNpZ25hbCB3aGljaCBoYXMganVzdAotICogc3dpdGNoZWQgd2lsbCBoYXZlIGEgMSBpbiAocGh5c19yZWFkIF4gcGh5c19yZWFkX3ByZXYpLgorICogTm90ZTogdG8gZGVib3VuY2UgaW5wdXQgc2lnbmFscywgd2Ugd2lsbCBvbmx5IGNvbnNpZGVyIGFzIHN3aXRjaGVkIGEgc2lnbmFsCisgKiB3aGljaCBpcyBzdGFibGUgYWNyb3NzIDIgbWVhc3VyZXMuIFNpZ25hbHMgd2hpY2ggYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHR3bworICogcmVhZHMgd2lsbCBiZSBrZXB0IGFzIHRoZXkgcHJldmlvdXNseSB3ZXJlIGluIHRoZWlyIGxvZ2ljYWwgZm9ybSAocGh5c19wcmV2KS4KKyAqIEEgc2lnbmFsIHdoaWNoIGhhcyBqdXN0IHN3aXRjaGVkIHdpbGwgaGF2ZSBhIDEgaW4KKyAqIChwaHlzX3JlYWQgXiBwaHlzX3JlYWRfcHJldikuCiAgKi8KIHN0YXRpYyB2b2lkIHBoeXNfc2Nhbl9jb250YWN0cyh2b2lkKQogewpAQCAtMTYxMSwyMSArMTY3NSwzMCBAQAogCXBoeXNfcmVhZF9wcmV2ID0gcGh5c19yZWFkOwogCXBoeXNfcmVhZCA9IDA7CQkvKiBmbHVzaCBhbGwgc2lnbmFscyAqLwogCi0Jb2xkdmFsID0gcl9kdHIocHBydCkgfCBzY2FuX21hc2tfbzsJLyoga2VlcCB0cmFjayBvZiBvbGQgdmFsdWUsIHdpdGggYWxsIG91dHB1dHMgZGlzYWJsZWQgKi8KLQl3X2R0cihwcHJ0LCBvbGR2YWwgJiB+c2Nhbl9tYXNrX28pOwkvKiBhY3RpdmF0ZSBhbGwga2V5Ym9hcmQgb3V0cHV0cyAoYWN0aXZlIGxvdykgKi8KLQliaXRtYXNrID0gUE5MX1BJTlBVVChyX3N0cihwcHJ0KSkgJiBzY2FuX21hc2tfaTsJLyogd2lsbCBoYXZlIGEgMSBmb3IgZWFjaCBiaXQgc2V0IHRvIGduZCAqLwotCXdfZHRyKHBwcnQsIG9sZHZhbCk7CS8qIGRpc2FibGUgYWxsIG1hdHJpeCBzaWduYWxzICovCisJLyoga2VlcCB0cmFjayBvZiBvbGQgdmFsdWUsIHdpdGggYWxsIG91dHB1dHMgZGlzYWJsZWQgKi8KKwlvbGR2YWwgPSByX2R0cihwcHJ0KSB8IHNjYW5fbWFza19vOworCS8qIGFjdGl2YXRlIGFsbCBrZXlib2FyZCBvdXRwdXRzIChhY3RpdmUgbG93KSAqLworCXdfZHRyKHBwcnQsIG9sZHZhbCAmIH5zY2FuX21hc2tfbyk7CisKKwkvKiB3aWxsIGhhdmUgYSAxIGZvciBlYWNoIGJpdCBzZXQgdG8gZ25kICovCisJYml0bWFzayA9IFBOTF9QSU5QVVQocl9zdHIocHBydCkpICYgc2Nhbl9tYXNrX2k7CisJLyogZGlzYWJsZSBhbGwgbWF0cml4IHNpZ25hbHMgKi8KKwl3X2R0cihwcHJ0LCBvbGR2YWwpOwogCiAJLyogbm93IHRoYXQgYWxsIG91dHB1dHMgYXJlIGNsZWFyZWQsIHRoZSBvbmx5IGFjdGl2ZSBpbnB1dCBiaXRzIGFyZQogCSAqIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgZ3JvdW5kCiAJICovCi0JZ25kbWFzayA9IFBOTF9QSU5QVVQocl9zdHIocHBydCkpICYgc2Nhbl9tYXNrX2k7CS8qIDEgZm9yIGVhY2ggZ3JvdW5kZWQgaW5wdXQgKi8KIAotCXBoeXNfcmVhZCB8PSAocG1hc2tfdCkgZ25kbWFzayA8PCA0MDsJLyogZ3JvdW5kZWQgaW5wdXRzIGFyZSBzaWduYWxzIDQwLTQ0ICovCisJLyogMSBmb3IgZWFjaCBncm91bmRlZCBpbnB1dCAqLworCWduZG1hc2sgPSBQTkxfUElOUFVUKHJfc3RyKHBwcnQpKSAmIHNjYW5fbWFza19pOworCisJLyogZ3JvdW5kZWQgaW5wdXRzIGFyZSBzaWduYWxzIDQwLTQ0ICovCisJcGh5c19yZWFkIHw9IChwbWFza190KSBnbmRtYXNrIDw8IDQwOwogCiAJaWYgKGJpdG1hc2sgIT0gZ25kbWFzaykgewotCQkvKiBzaW5jZSBjbGVhcmluZyB0aGUgb3V0cHV0cyBjaGFuZ2VkIHNvbWUgaW5wdXRzLCB3ZSBrbm93IHRoYXQgc29tZQotCQkgKiBpbnB1dCBzaWduYWxzIGFyZSBjdXJyZW50bHkgdGllZCB0byBzb21lIG91dHB1dHMuIFNvIHdlJ2xsIHNjYW4gdGhlbS4KKwkJLyogc2luY2UgY2xlYXJpbmcgdGhlIG91dHB1dHMgY2hhbmdlZCBzb21lIGlucHV0cywgd2Uga25vdworCQkgKiB0aGF0IHNvbWUgaW5wdXQgc2lnbmFscyBhcmUgY3VycmVudGx5IHRpZWQgdG8gc29tZSBvdXRwdXRzLgorCQkgKiBTbyB3ZSdsbCBzY2FuIHRoZW0uCiAJCSAqLwogCQlmb3IgKGJpdCA9IDA7IGJpdCA8IDg7IGJpdCsrKSB7CiAJCQliaXR2YWwgPSAxIDw8IGJpdDsKQEAgLTE2MzksMTEgKzE3MTIsMTI3IEBACiAJCX0KIAkJd19kdHIocHBydCwgb2xkdmFsKTsJLyogZGlzYWJsZSBhbGwgb3V0cHV0cyAqLwogCX0KLQkvKiB0aGlzIGlzIGVhc3k6IHVzZSBvbGQgYml0cyB3aGVuIHRoZXkgYXJlIGZsYXBwaW5nLCB1c2UgbmV3IG9uZXMgd2hlbiBzdGFibGUgKi8KLQlwaHlzX2N1cnIgPQotCSAgICAocGh5c19wcmV2ICYgKHBoeXNfcmVhZCBeIHBoeXNfcmVhZF9wcmV2KSkgfCAocGh5c19yZWFkICYKLQkJCQkJCQkgIH4ocGh5c19yZWFkIF4KLQkJCQkJCQkgICAgcGh5c19yZWFkX3ByZXYpKTsKKwkvKiB0aGlzIGlzIGVhc3k6IHVzZSBvbGQgYml0cyB3aGVuIHRoZXkgYXJlIGZsYXBwaW5nLAorCSAqIHVzZSBuZXcgb25lcyB3aGVuIHN0YWJsZSAqLworCXBoeXNfY3VyciA9IChwaHlzX3ByZXYgJiAocGh5c19yZWFkIF4gcGh5c19yZWFkX3ByZXYpKSB8CisJCSAgICAocGh5c19yZWFkICYgfihwaHlzX3JlYWQgXiBwaHlzX3JlYWRfcHJldikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbnB1dF9zdGF0ZV9oaWdoKHN0cnVjdCBsb2dpY2FsX2lucHV0ICppbnB1dCkKK3sKKyNpZiAwCisJLyogRklYTUU6CisJICogdGhpcyBpcyBhbiBpbnZhbGlkIHRlc3QuIEl0IHRyaWVzIHRvIGNhdGNoCisJICogdHJhbnNpdGlvbnMgZnJvbSBzaW5nbGUta2V5IHRvIG11bHRpcGxlLWtleSwgYnV0CisJICogZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0aGUgY29udGFjdHMgcG9sYXJpdHkuCisJICogVGhlIG9ubHkgc29sdXRpb24gdG8gdGhlIHByb2JsZW0gaXMgdG8gcGFyc2Uga2V5cworCSAqIGZyb20gdGhlIG1vc3QgY29tcGxleCB0byB0aGUgc2ltcGxlc3QgY29tYmluYXRpb25zLAorCSAqIGFuZCBtYXJrIHRoZW0gYXMgJ2NhdWdodCcgb25jZSBhIGNvbWJpbmF0aW9uCisJICogbWF0Y2hlcywgdGhlbiB1bm1hdGNoIGl0IGZvciBhbGwgb3RoZXIgb25lcy4KKwkgKi8KKworCS8qIHRyeSB0byBjYXRjaCBkYW5nZXJvdXMgdHJhbnNpdGlvbnMgY2FzZXMgOgorCSAqIHNvbWVvbmUgYWRkcyBhIGJpdCwgc28gdGhpcyBzaWduYWwgd2FzIGEgZmFsc2UKKwkgKiBwb3NpdGl2ZSByZXN1bHRpbmcgZnJvbSBhIHRyYW5zaXRpb24uIFdlIHNob3VsZAorCSAqIGludmFsaWRhdGUgdGhlIHNpZ25hbCBpbW1lZGlhdGVseSBhbmQgbm90IGNhbGwgdGhlCisJICogcmVsZWFzZSBmdW5jdGlvbi4KKwkgKiBlZzogMCAtKHByZXNzIEEpLT4gQSAtKHByZXNzIEIpLT4gQUIgOiBkb24ndCBtYXRjaCBBJ3MgcmVsZWFzZS4KKwkgKi8KKwlpZiAoKChwaHlzX3ByZXYgJiBpbnB1dC0+bWFzaykgPT0gaW5wdXQtPnZhbHVlKQorCSAgICAmJiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA+IGlucHV0LT52YWx1ZSkpIHsKKwkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOyAvKiBpbnZhbGlkYXRlICovCisJCXJldHVybiAxOworCX0KKyNlbmRpZgorCisJaWYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPT0gaW5wdXQtPnZhbHVlKSB7CisJCWlmICgoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9TVEQpICYmCisJCSAgICAoaW5wdXQtPmhpZ2hfdGltZXIgPT0gMCkpIHsKKwkJCWlucHV0LT5oaWdoX3RpbWVyKys7CisJCQlpZiAoaW5wdXQtPnUuc3RkLnByZXNzX2ZjdCAhPSBOVUxMKQorCQkJCWlucHV0LT51LnN0ZC5wcmVzc19mY3QoaW5wdXQtPnUuc3RkLnByZXNzX2RhdGEpOworCQl9IGVsc2UgaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7CisJCQkvKiB3aWxsIHR1cm4gb24gdGhlIGxpZ2h0ICovCisJCQlrZXlwcmVzc2VkID0gMTsKKworCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID09IDApIHsKKwkJCQljaGFyICpwcmVzc19zdHIgPSBpbnB1dC0+dS5rYmQucHJlc3Nfc3RyOworCQkJCWlmIChwcmVzc19zdHJbMF0pCisJCQkJCWtleXBhZF9zZW5kX2tleShwcmVzc19zdHIsCisJCQkJCQkJc2l6ZW9mKHByZXNzX3N0cikpOworCQkJfQorCisJCQlpZiAoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHJbMF0pIHsKKwkJCQljaGFyICpyZXBlYXRfc3RyID0gaW5wdXQtPnUua2JkLnJlcGVhdF9zdHI7CisJCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyID49IEtFWVBBRF9SRVBfU1RBUlQpIHsKKwkJCQkJaW5wdXQtPmhpZ2hfdGltZXIgLT0gS0VZUEFEX1JFUF9ERUxBWTsKKwkJCQkJa2V5cGFkX3NlbmRfa2V5KHJlcGVhdF9zdHIsCisJCQkJCQkJc2l6ZW9mKHJlcGVhdF9zdHIpKTsKKwkJCQl9CisJCQkJLyogd2Ugd2lsbCBuZWVkIHRvIGNvbWUgYmFjayBoZXJlIHNvb24gKi8KKwkJCQlpbnB1dHNfc3RhYmxlID0gMDsKKwkJCX0KKworCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyIDwgMjU1KQorCQkJCWlucHV0LT5oaWdoX3RpbWVyKys7CisJCX0KKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJLyogZWxzZSBzaWduYWwgZmFsbGluZyBkb3duLiBMZXQncyBmYWxsIHRocm91Z2guICovCisJCWlucHV0LT5zdGF0ZSA9IElOUFVUX1NUX0ZBTExJTkc7CisJCWlucHV0LT5mYWxsX3RpbWVyID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9zdGF0ZV9mYWxsaW5nKHN0cnVjdCBsb2dpY2FsX2lucHV0ICppbnB1dCkKK3sKKyNpZiAwCisJLyogRklYTUUgISEhIHNhbWUgY29tbWVudCBhcyBpbiBpbnB1dF9zdGF0ZV9oaWdoICovCisJaWYgKCgocGh5c19wcmV2ICYgaW5wdXQtPm1hc2spID09IGlucHV0LT52YWx1ZSkKKwkgICAgJiYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPiBpbnB1dC0+dmFsdWUpKSB7CisJCWlucHV0LT5zdGF0ZSA9IElOUFVUX1NUX0xPVzsJLyogaW52YWxpZGF0ZSAqLworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlpZiAoKHBoeXNfY3VyciAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpIHsKKwkJaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7CisJCQkvKiB3aWxsIHR1cm4gb24gdGhlIGxpZ2h0ICovCisJCQlrZXlwcmVzc2VkID0gMTsKKworCQkJaWYgKGlucHV0LT51LmtiZC5yZXBlYXRfc3RyWzBdKSB7CisJCQkJY2hhciAqcmVwZWF0X3N0ciA9IGlucHV0LT51LmtiZC5yZXBlYXRfc3RyOworCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA+PSBLRVlQQURfUkVQX1NUQVJUKQorCQkJCQlpbnB1dC0+aGlnaF90aW1lciAtPSBLRVlQQURfUkVQX0RFTEFZOworCQkJCQlrZXlwYWRfc2VuZF9rZXkocmVwZWF0X3N0ciwKKwkJCQkJCQlzaXplb2YocmVwZWF0X3N0cikpOworCQkJCS8qIHdlIHdpbGwgbmVlZCB0byBjb21lIGJhY2sgaGVyZSBzb29uICovCisJCQkJaW5wdXRzX3N0YWJsZSA9IDA7CisJCQl9CisKKwkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA8IDI1NSkKKwkJCQlpbnB1dC0+aGlnaF90aW1lcisrOworCQl9CisJCWlucHV0LT5zdGF0ZSA9IElOUFVUX1NUX0hJR0g7CisJfSBlbHNlIGlmIChpbnB1dC0+ZmFsbF90aW1lciA+PSBpbnB1dC0+ZmFsbF90aW1lKSB7CisJCS8qIGNhbGwgcmVsZWFzZSBldmVudCAqLworCQlpZiAoaW5wdXQtPnR5cGUgPT0gSU5QVVRfVFlQRV9TVEQpIHsKKwkJCXZvaWQgKCpyZWxlYXNlX2ZjdCkoaW50KSA9IGlucHV0LT51LnN0ZC5yZWxlYXNlX2ZjdDsKKwkJCWlmIChyZWxlYXNlX2ZjdCAhPSBOVUxMKQorCQkJCXJlbGVhc2VfZmN0KGlucHV0LT51LnN0ZC5yZWxlYXNlX2RhdGEpOworCQl9IGVsc2UgaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7CisJCQljaGFyICpyZWxlYXNlX3N0ciA9IGlucHV0LT51LmtiZC5yZWxlYXNlX3N0cjsKKwkJCWlmIChyZWxlYXNlX3N0clswXSkKKwkJCQlrZXlwYWRfc2VuZF9rZXkocmVsZWFzZV9zdHIsCisJCQkJCQlzaXplb2YocmVsZWFzZV9zdHIpKTsKKwkJfQorCisJCWlucHV0LT5zdGF0ZSA9IElOUFVUX1NUX0xPVzsKKwl9IGVsc2UgeworCQlpbnB1dC0+ZmFsbF90aW1lcisrOworCQlpbnB1dHNfc3RhYmxlID0gMDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHBhbmVsX3Byb2Nlc3NfaW5wdXRzKHZvaWQpCkBAIC0xNjY2LDEwICsxODU1LDEyIEBACiAJCWNhc2UgSU5QVVRfU1RfTE9XOgogCQkJaWYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgIT0gaW5wdXQtPnZhbHVlKQogCQkJCWJyZWFrOwotCQkJLyogaWYgYWxsIG5lZWRlZCBvbmVzIHdlcmUgYWxyZWFkeSBzZXQgcHJldmlvdXNseSwgdGhpcyBtZWFucyB0aGF0Ci0JCQkgKiB0aGlzIGxvZ2ljYWwgc2lnbmFsIGhhcyBiZWVuIGFjdGl2YXRlZCBieSB0aGUgcmVsZWFzaW5nIG9mCi0JCQkgKiBhbm90aGVyIGNvbWJpbmVkIHNpZ25hbCwgc28gd2UgZG9uJ3Qgd2FudCB0byBtYXRjaC4KLQkJCSAqIGVnOiBBQiAtKHJlbGVhc2UgQiktPiBBIC0ocmVsZWFzZSBBKS0+IDAgOiBkb24ndCBtYXRjaCBBLgorCQkJLyogaWYgYWxsIG5lZWRlZCBvbmVzIHdlcmUgYWxyZWFkeSBzZXQgcHJldmlvdXNseSwKKwkJCSAqIHRoaXMgbWVhbnMgdGhhdCB0aGlzIGxvZ2ljYWwgc2lnbmFsIGhhcyBiZWVuCisJCQkgKiBhY3RpdmF0ZWQgYnkgdGhlIHJlbGVhc2luZyBvZiBhbm90aGVyIGNvbWJpbmVkCisJCQkgKiBzaWduYWwsIHNvIHdlIGRvbid0IHdhbnQgdG8gbWF0Y2guCisJCQkgKiBlZzogQUIgLShyZWxlYXNlIEIpLT4gQSAtKHJlbGVhc2UgQSktPiAwIDoKKwkJCSAqICAgICBkb24ndCBtYXRjaCBBLgogCQkJICovCiAJCQlpZiAoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpCiAJCQkJYnJlYWs7CkBAIC0xNjkwLDEyMiArMTg4MSwxMSBAQAogCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfSElHSDsKIAkJCS8qIG5vIGJyZWFrIGhlcmUsIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIElOUFVUX1NUX0hJR0g6Ci0jaWYgMAotCQkJLyogRklYTUU6Ci0JCQkgKiB0aGlzIGlzIGFuIGludmFsaWQgdGVzdC4gSXQgdHJpZXMgdG8gY2F0Y2ggdHJhbnNpdGlvbnMgZnJvbSBzaW5nbGUta2V5Ci0JCQkgKiB0byBtdWx0aXBsZS1rZXksIGJ1dCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSBjb250YWN0cyBwb2xhcml0eS4KLQkJCSAqIFRoZSBvbmx5IHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGlzIHRvIHBhcnNlIGtleXMgZnJvbSB0aGUgbW9zdCBjb21wbGV4Ci0JCQkgKiB0byB0aGUgc2ltcGxlc3QgY29tYmluYXRpb25zLCBhbmQgbWFyayB0aGVtIGFzICdjYXVnaHQnIG9uY2UgYSBjb21iaW5hdGlvbgotCQkJICogbWF0Y2hlcywgdGhlbiB1bm1hdGNoIGl0IGZvciBhbGwgb3RoZXIgb25lcy4KLQkJCSAqLwotCi0JCQkvKiB0cnkgdG8gY2F0Y2ggZGFuZ2Vyb3VzIHRyYW5zaXRpb25zIGNhc2VzIDoKLQkJCSAqIHNvbWVvbmUgYWRkcyBhIGJpdCwgc28gdGhpcyBzaWduYWwgd2FzIGEgZmFsc2UKLQkJCSAqIHBvc2l0aXZlIHJlc3VsdGluZyBmcm9tIGEgdHJhbnNpdGlvbi4gV2Ugc2hvdWxkIGludmFsaWRhdGUKLQkJCSAqIHRoZSBzaWduYWwgaW1tZWRpYXRlbHkgYW5kIG5vdCBjYWxsIHRoZSByZWxlYXNlIGZ1bmN0aW9uLgotCQkJICogZWc6IDAgLShwcmVzcyBBKS0+IEEgLShwcmVzcyBCKS0+IEFCIDogZG9uJ3QgbWF0Y2ggQSdzIHJlbGVhc2UuCi0JCQkgKi8KLQkJCWlmICgoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpCi0JCQkgICAgJiYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPiBpbnB1dC0+dmFsdWUpKSB7Ci0JCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOwkvKiBpbnZhbGlkYXRlICovCisJCQlpZiAoaW5wdXRfc3RhdGVfaGlnaChpbnB1dCkpCiAJCQkJYnJlYWs7Ci0JCQl9Ci0jZW5kaWYKLQotCQkJaWYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPT0gaW5wdXQtPnZhbHVlKSB7Ci0JCQkJaWYgKChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX1NURCkKLQkJCQkgICAgJiYgKGlucHV0LT5oaWdoX3RpbWVyID09IDApKSB7Ci0JCQkJCWlucHV0LT5oaWdoX3RpbWVyKys7Ci0JCQkJCWlmIChpbnB1dC0+dS5zdGQucHJlc3NfZmN0ICE9IE5VTEwpCi0JCQkJCQlpbnB1dC0+dS5zdGQucHJlc3NfZmN0KGlucHV0LT51LgotCQkJCQkJCQkgICAgICAgc3RkLgotCQkJCQkJCQkgICAgICAgcHJlc3NfZGF0YSk7Ci0JCQkJfSBlbHNlIGlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX0tCRCkgewotCQkJCQlrZXlwcmVzc2VkID0gMTsJLyogd2lsbCB0dXJuIG9uIHRoZSBsaWdodCAqLwotCi0JCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA9PSAwKSB7Ci0JCQkJCQlpZiAoaW5wdXQtPnUua2JkLnByZXNzX3N0clswXSkKLQkJCQkJCQlrZXlwYWRfc2VuZF9rZXkoaW5wdXQtPgotCQkJCQkJCQkJdS5rYmQuCi0JCQkJCQkJCQlwcmVzc19zdHIsCi0JCQkJCQkJCQlzaXplb2YKLQkJCQkJCQkJCShpbnB1dC0+Ci0JCQkJCQkJCQkgdS5rYmQuCi0JCQkJCQkJCQkgcHJlc3Nfc3RyKSk7Ci0JCQkJCX0KLQotCQkJCQlpZiAoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHJbMF0pIHsKLQkJCQkJCWlmIChpbnB1dC0+aGlnaF90aW1lciA+PQotCQkJCQkJICAgIEtFWVBBRF9SRVBfU1RBUlQpIHsKLQkJCQkJCQlpbnB1dC0+aGlnaF90aW1lciAtPQotCQkJCQkJCSAgICBLRVlQQURfUkVQX0RFTEFZOwotCQkJCQkJCWtleXBhZF9zZW5kX2tleShpbnB1dC0+Ci0JCQkJCQkJCQl1LmtiZC4KLQkJCQkJCQkJCXJlcGVhdF9zdHIsCi0JCQkJCQkJCQlzaXplb2YKLQkJCQkJCQkJCShpbnB1dC0+Ci0JCQkJCQkJCQkgdS5rYmQuCi0JCQkJCQkJCQkgcmVwZWF0X3N0cikpOwotCQkJCQkJfQotCQkJCQkJaW5wdXRzX3N0YWJsZSA9IDA7CS8qIHdlIHdpbGwgbmVlZCB0byBjb21lIGJhY2sgaGVyZSBzb29uICovCi0JCQkJCX0KLQotCQkJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPCAyNTUpCi0JCQkJCQlpbnB1dC0+aGlnaF90aW1lcisrOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogZWxzZSBzaWduYWwgZmFsbGluZyBkb3duLiBMZXQncyBmYWxsIHRocm91Z2guICovCi0JCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfRkFMTElORzsKLQkJCQlpbnB1dC0+ZmFsbF90aW1lciA9IDA7Ci0JCQl9CiAJCQkvKiBubyBicmVhayBoZXJlLCBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBJTlBVVF9TVF9GQUxMSU5HOgotI2lmIDAKLQkJCS8qIEZJWE1FICEhISBzYW1lIGNvbW1lbnQgYXMgYWJvdmUgKi8KLQkJCWlmICgoKHBoeXNfcHJldiAmIGlucHV0LT5tYXNrKSA9PSBpbnB1dC0+dmFsdWUpCi0JCQkgICAgJiYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPiBpbnB1dC0+dmFsdWUpKSB7Ci0JCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOwkvKiBpbnZhbGlkYXRlICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0jZW5kaWYKLQotCQkJaWYgKChwaHlzX2N1cnIgJiBpbnB1dC0+bWFzaykgPT0gaW5wdXQtPnZhbHVlKSB7Ci0JCQkJaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7Ci0JCQkJCWtleXByZXNzZWQgPSAxOwkvKiB3aWxsIHR1cm4gb24gdGhlIGxpZ2h0ICovCi0KLQkJCQkJaWYgKGlucHV0LT51LmtiZC5yZXBlYXRfc3RyWzBdKSB7Ci0JCQkJCQlpZiAoaW5wdXQtPmhpZ2hfdGltZXIgPj0gS0VZUEFEX1JFUF9TVEFSVCkKLQkJCQkJCQlpbnB1dC0+aGlnaF90aW1lciAtPSBLRVlQQURfUkVQX0RFTEFZOwotCQkJCQkJa2V5cGFkX3NlbmRfa2V5KGlucHV0LT51LmtiZC5yZXBlYXRfc3RyLAotCQkJCQkJCQlzaXplb2YoaW5wdXQtPnUua2JkLnJlcGVhdF9zdHIpKTsKLQkJCQkJCWlucHV0c19zdGFibGUgPSAwOwkvKiB3ZSB3aWxsIG5lZWQgdG8gY29tZSBiYWNrIGhlcmUgc29vbiAqLwotCQkJCQl9Ci0KLQkJCQkJaWYgKGlucHV0LT5oaWdoX3RpbWVyIDwgMjU1KQotCQkJCQkJaW5wdXQtPmhpZ2hfdGltZXIrKzsKLQkJCQl9Ci0JCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfSElHSDsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoaW5wdXQtPmZhbGxfdGltZXIgPj0gaW5wdXQtPmZhbGxfdGltZSkgewotCQkJCS8qIGNhbGwgcmVsZWFzZSBldmVudCAqLwotCQkJCWlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX1NURCkgewotCQkJCQlpZiAoaW5wdXQtPnUuc3RkLnJlbGVhc2VfZmN0ICE9IE5VTEwpCi0JCQkJCQlpbnB1dC0+dS5zdGQucmVsZWFzZV9mY3QoaW5wdXQtPnUuc3RkLnJlbGVhc2VfZGF0YSk7Ci0KLQkJCQl9IGVsc2UgaWYgKGlucHV0LT50eXBlID09IElOUFVUX1RZUEVfS0JEKSB7Ci0JCQkJCWlmIChpbnB1dC0+dS5rYmQucmVsZWFzZV9zdHJbMF0pCi0JCQkJCQlrZXlwYWRfc2VuZF9rZXkoaW5wdXQtPnUua2JkLnJlbGVhc2Vfc3RyLAotCQkJCQkJCQlzaXplb2YoaW5wdXQtPnUua2JkLnJlbGVhc2Vfc3RyKSk7Ci0JCQkJfQotCi0JCQkJaW5wdXQtPnN0YXRlID0gSU5QVVRfU1RfTE9XOwotCQkJCWJyZWFrOwotCQkJfSBlbHNlIHsKLQkJCQlpbnB1dC0+ZmFsbF90aW1lcisrOwotCQkJCWlucHV0c19zdGFibGUgPSAwOwotCQkJCWJyZWFrOwotCQkJfQorCQkJaW5wdXRfc3RhdGVfZmFsbGluZyhpbnB1dCk7CiAJCX0KIAl9CiB9CkBAIC0xODE1LDcgKzE4OTUsOSBAQAogCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpIHsKIAkJaWYgKHNwaW5fdHJ5bG9jaygmcHBydF9sb2NrKSkgewogCQkJcGh5c19zY2FuX2NvbnRhY3RzKCk7Ci0JCQlzcGluX3VubG9jaygmcHBydF9sb2NrKTsJLyogbm8gbmVlZCBmb3IgdGhlIHBhcnBvcnQgYW55bW9yZSAqLworCisJCQkvKiBubyBuZWVkIGZvciB0aGUgcGFycG9ydCBhbnltb3JlICovCisJCQlzcGluX3VubG9jaygmcHBydF9sb2NrKTsKIAkJfQogCiAJCWlmICghaW5wdXRzX3N0YWJsZSB8fCBwaHlzX2N1cnIgIT0gcGh5c19wcmV2KQpAQCAtMTg1MCw4ICsxOTMyLDggQEAKIH0KIAogLyogY29udmVydHMgYSBuYW1lIG9mIHRoZSBmb3JtICIoe0JiQWFQcFNzRWV9ezAxMjM0NTY3LX0pKiIgdG8gYSBzZXJpZXMgb2YgYml0cy4KLSAqIGlmIDxvbWFzaz4gb3IgPGltYXNrPiBhcmUgbm9uLW51bGwsIHRoZXkgd2lsbCBiZSBvcidlZCB3aXRoIHRoZSBiaXRzIGNvcnJlc3BvbmRpbmcKLSAqIHRvIG91dCBhbmQgaW4gYml0cyByZXNwZWN0aXZlbHkuCisgKiBpZiA8b21hc2s+IG9yIDxpbWFzaz4gYXJlIG5vbi1udWxsLCB0aGV5IHdpbGwgYmUgb3InZWQgd2l0aCB0aGUgYml0cworICogY29ycmVzcG9uZGluZyB0byBvdXQgYW5kIGluIGJpdHMgcmVzcGVjdGl2ZWx5LgogICogcmV0dXJucyAxIGlmIG9rLCAwIGlmIGVycm9yIChpbiB3aGljaCBjYXNlLCBub3RoaW5nIGlzIHdyaXR0ZW4pLgogICovCiBzdGF0aWMgaW50IGlucHV0X25hbWUybWFzayhjaGFyICpuYW1lLCBwbWFza190ICptYXNrLCBwbWFza190ICp2YWx1ZSwKQEAgLTE4NjQsNyArMTk0Niw4IEBACiAJb20gPSBpbSA9IG0gPSB2ID0gMFVMTDsKIAl3aGlsZSAoKm5hbWUpIHsKIAkJaW50IGluLCBvdXQsIGJpdCwgbmVnOwotCQlmb3IgKGluID0gMDsgKGluIDwgc2l6ZW9mKHNpZ3RhYikpICYmIChzaWd0YWJbaW5dICE9ICpuYW1lKTsgaW4rKykKKwkJZm9yIChpbiA9IDA7IChpbiA8IHNpemVvZihzaWd0YWIpKSAmJgorCQkJICAgICAoc2lndGFiW2luXSAhPSAqbmFtZSk7IGluKyspCiAJCQk7CiAJCWlmIChpbiA+PSBzaXplb2Yoc2lndGFiKSkKIAkJCXJldHVybiAwOwkvKiBpbnB1dCBuYW1lIG5vdCBmb3VuZCAqLwpAQCAtMTkxMiw4ICsxOTk1LDEwIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAoIWlucHV0X25hbWUybWFzayhuYW1lLCAma2V5LT5tYXNrLCAma2V5LT52YWx1ZSwgJnNjYW5fbWFza19pLAotCQkJICAgICAmc2Nhbl9tYXNrX28pKQorCQkJICAgICAmc2Nhbl9tYXNrX28pKSB7CisJCWtmcmVlKGtleSk7CiAJCXJldHVybiBOVUxMOworCX0KIAogCWtleS0+dHlwZSA9IElOUFVUX1RZUEVfS0JEOwogCWtleS0+c3RhdGUgPSBJTlBVVF9TVF9MT1c7CkBAIC0xOTM2LDcgKzIwMjEsOCBAQAogLyogdHJpZXMgdG8gYmluZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBzaWduYWwgbmFtZSA8bmFtZT4uIFRoZSBmdW5jdGlvbgogICogPHByZXNzX2ZjdD4gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgPHByZXNzX2RhdGE+IGFyZyB3aGVuIHRoZSBzaWduYWwgaXMKICAqIGFjdGl2YXRlZCwgYW5kIHNvIG9uIGZvciA8cmVsZWFzZV9mY3Q+LzxyZWxlYXNlX2RhdGE+Ci0gKiBSZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBuZXcgc2lnbmFsIGlmIG9rLCBOVUxMIGlmIHRoZSBzaWduYWwgY291bGQgbm90IGJlIGJvdW5kLgorICogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbmV3IHNpZ25hbCBpZiBvaywgTlVMTCBpZiB0aGUgc2lnbmFsIGNvdWxkIG5vdAorICogYmUgYm91bmQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbG9naWNhbF9pbnB1dCAqcGFuZWxfYmluZF9jYWxsYmFjayhjaGFyICpuYW1lLAogCQkJCQkJIHZvaWQgKCpwcmVzc19mY3QpIChpbnQpLApAQCAtMjAyOCwzMyArMjExNCw1MiBAQAogCiAJaWYgKHBwcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAicGFuZWxfYXR0YWNoKCk6IHBvcnQtPm51bWJlcj0lZCBwYXJwb3J0PSVkLCBhbHJlYWR5IHJlZ2lzdGVyZWQgIVxuIiwKKwkJICAgICAgICJwYW5lbF9hdHRhY2goKTogcG9ydC0+bnVtYmVyPSVkIHBhcnBvcnQ9JWQsICIKKwkJICAgICAgICJhbHJlYWR5IHJlZ2lzdGVyZWQgIVxuIiwKIAkJICAgICAgIHBvcnQtPm51bWJlciwgcGFycG9ydCk7CiAJCXJldHVybjsKIAl9CiAKLQlwcHJ0ID0gcGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UocG9ydCwgInBhbmVsIiwgTlVMTCwgTlVMTCwJLyogcGYsIGtmICovCisJcHBydCA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBvcnQsICJwYW5lbCIsIE5VTEwsIE5VTEwsICAvKiBwZiwga2YgKi8KIAkJCQkgICAgICAgTlVMTCwKIAkJCQkgICAgICAgLypQQVJQT1JUX0RFVl9FWENMICovCiAJCQkJICAgICAgIDAsICh2b2lkICopJnBwcnQpOwotCi0JaWYgKHBhcnBvcnRfY2xhaW0ocHBydCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiUGFuZWw6IGNvdWxkIG5vdCBjbGFpbSBhY2Nlc3MgdG8gcGFycG9ydCVkLiBBYm9ydGluZy5cbiIsCi0JCSAgICAgICBwYXJwb3J0KTsKKwlpZiAocHBydCA9PSBOVUxMKSB7CisJCXByX2VycigicGFuZWxfYXR0YWNoKCk6IHBvcnQtPm51bWJlcj0lZCBwYXJwb3J0PSVkLCAiCisJCSAgICAgICAicGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWRcbiIsCisJCSAgICAgICBwb3J0LT5udW1iZXIsIHBhcnBvcnQpOwogCQlyZXR1cm47CiAJfQogCi0JLyogbXVzdCBpbml0IExDRCBmaXJzdCwganVzdCBpbiBjYXNlIGFuIElSUSBmcm9tIHRoZSBrZXlwYWQgaXMgZ2VuZXJhdGVkIGF0IGtleXBhZCBpbml0ICovCisJaWYgKHBhcnBvcnRfY2xhaW0ocHBydCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiUGFuZWw6IGNvdWxkIG5vdCBjbGFpbSBhY2Nlc3MgdG8gcGFycG9ydCVkLiAiCisJCSAgICAgICAiQWJvcnRpbmcuXG4iLCBwYXJwb3J0KTsKKwkJZ290byBlcnJfdW5yZWdfZGV2aWNlOworCX0KKworCS8qIG11c3QgaW5pdCBMQ0QgZmlyc3QsIGp1c3QgaW4gY2FzZSBhbiBJUlEgZnJvbSB0aGUga2V5cGFkIGlzCisJICogZ2VuZXJhdGVkIGF0IGtleXBhZCBpbml0CisJICovCiAJaWYgKGxjZF9lbmFibGVkKSB7CiAJCWxjZF9pbml0KCk7Ci0JCW1pc2NfcmVnaXN0ZXIoJmxjZF9kZXYpOworCQlpZiAobWlzY19yZWdpc3RlcigmbGNkX2RldikpCisJCQlnb3RvIGVycl91bnJlZ19kZXZpY2U7CiAJfQogCiAJaWYgKGtleXBhZF9lbmFibGVkKSB7CiAJCWtleXBhZF9pbml0KCk7Ci0JCW1pc2NfcmVnaXN0ZXIoJmtleXBhZF9kZXYpOworCQlpZiAobWlzY19yZWdpc3Rlcigma2V5cGFkX2RldikpCisJCQlnb3RvIGVycl9sY2RfdW5yZWc7CiAJfQorCXJldHVybjsKKworZXJyX2xjZF91bnJlZzoKKwlpZiAobGNkX2VuYWJsZWQpCisJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CitlcnJfdW5yZWdfZGV2aWNlOgorCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHBydCk7CisJcHBydCA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHBhbmVsX2RldGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKQEAgLTIwNjQsNyArMjE2OSw4IEBACiAKIAlpZiAoIXBwcnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAicGFuZWxfZGV0YWNoKCk6IHBvcnQtPm51bWJlcj0lZCBwYXJwb3J0PSVkLCBub3RoaW5nIHRvIHVucmVnaXN0ZXIuXG4iLAorCQkgICAgICAgInBhbmVsX2RldGFjaCgpOiBwb3J0LT5udW1iZXI9JWQgcGFycG9ydD0lZCwgIgorCQkgICAgICAgIm5vdGhpbmcgdG8gdW5yZWdpc3Rlci5cbiIsCiAJCSAgICAgICBwb3J0LT5udW1iZXIsIHBhcnBvcnQpOwogCQlyZXR1cm47CiAJfQpAQCAtMjEwNSwxMyArMjIxMSwxNSBAQAogCiAJLyogdGFrZSBjYXJlIG9mIGFuIGV2ZW50dWFsIHByb2ZpbGUgKi8KIAlzd2l0Y2ggKHByb2ZpbGUpIHsKLQljYXNlIFBBTkVMX1BST0ZJTEVfQ1VTVE9NOgkvKiBjdXN0b20gcHJvZmlsZSAqLworCWNhc2UgUEFORUxfUFJPRklMRV9DVVNUT006CisJCS8qIGN1c3RvbSBwcm9maWxlICovCiAJCWlmIChrZXlwYWRfdHlwZSA8IDApCiAJCQlrZXlwYWRfdHlwZSA9IERFRkFVTFRfS0VZUEFEOwogCQlpZiAobGNkX3R5cGUgPCAwKQogCQkJbGNkX3R5cGUgPSBERUZBVUxUX0xDRDsKIAkJYnJlYWs7Ci0JY2FzZSBQQU5FTF9QUk9GSUxFX09MRDoJLyogOCBiaXRzLCAyKjE2LCBvbGQga2V5cGFkICovCisJY2FzZSBQQU5FTF9QUk9GSUxFX09MRDoKKwkJLyogOCBiaXRzLCAyKjE2LCBvbGQga2V5cGFkICovCiAJCWlmIChrZXlwYWRfdHlwZSA8IDApCiAJCQlrZXlwYWRfdHlwZSA9IEtFWVBBRF9UWVBFX09MRDsKIAkJaWYgKGxjZF90eXBlIDwgMCkKQEAgLTIxMjEsMjUgKzIyMjksMjkgQEAKIAkJaWYgKGxjZF9od2lkdGggPCAwKQogCQkJbGNkX2h3aWR0aCA9IDE2OwogCQlicmVhazsKLQljYXNlIFBBTkVMX1BST0ZJTEVfTkVXOgkvKiBzZXJpYWwsIDIqMTYsIG5ldyBrZXlwYWQgKi8KKwljYXNlIFBBTkVMX1BST0ZJTEVfTkVXOgorCQkvKiBzZXJpYWwsIDIqMTYsIG5ldyBrZXlwYWQgKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gS0VZUEFEX1RZUEVfTkVXOwogCQlpZiAobGNkX3R5cGUgPCAwKQogCQkJbGNkX3R5cGUgPSBMQ0RfVFlQRV9LUzAwNzQ7CiAJCWJyZWFrOwotCWNhc2UgUEFORUxfUFJPRklMRV9IQU5UUk9OSVg6CS8qIDggYml0cywgMioxNiBoYW50cm9uaXgtbGlrZSwgbm8ga2V5cGFkICovCisJY2FzZSBQQU5FTF9QUk9GSUxFX0hBTlRST05JWDoKKwkJLyogOCBiaXRzLCAyKjE2IGhhbnRyb25peC1saWtlLCBubyBrZXlwYWQgKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gS0VZUEFEX1RZUEVfTk9ORTsKIAkJaWYgKGxjZF90eXBlIDwgMCkKIAkJCWxjZF90eXBlID0gTENEX1RZUEVfSEFOVFJPTklYOwogCQlicmVhazsKLQljYXNlIFBBTkVMX1BST0ZJTEVfTkVYQ09NOgkvKiBnZW5lcmljIDggYml0cywgMioxNiwgbmV4Y29tIGtleXBhZCwgZWcuIE5leGNvbS4gKi8KKwljYXNlIFBBTkVMX1BST0ZJTEVfTkVYQ09NOgorCQkvKiBnZW5lcmljIDggYml0cywgMioxNiwgbmV4Y29tIGtleXBhZCwgZWcuIE5leGNvbS4gKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gS0VZUEFEX1RZUEVfTkVYQ09NOwogCQlpZiAobGNkX3R5cGUgPCAwKQogCQkJbGNkX3R5cGUgPSBMQ0RfVFlQRV9ORVhDT007CiAJCWJyZWFrOwotCWNhc2UgUEFORUxfUFJPRklMRV9MQVJHRToJLyogOCBiaXRzLCAyKjQwLCBvbGQga2V5cGFkICovCisJY2FzZSBQQU5FTF9QUk9GSUxFX0xBUkdFOgorCQkvKiA4IGJpdHMsIDIqNDAsIG9sZCBrZXlwYWQgKi8KIAkJaWYgKGtleXBhZF90eXBlIDwgMCkKIAkJCWtleXBhZF90eXBlID0gS0VZUEFEX1RZUEVfT0xEOwogCQlpZiAobGNkX3R5cGUgPCAwKQpAQCAtMjE3OSw2ICsyMjkxLDcgQEAKIAkJaWYgKHBwcnQpIHsKIAkJCXBhcnBvcnRfcmVsZWFzZShwcHJ0KTsKIAkJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHBydCk7CisJCQlwcHJ0ID0gTlVMTDsKIAkJfQogCQlwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCZwYW5lbF9kcml2ZXIpOwogCQlwcmludGsoS0VSTl9FUlIgIlBhbmVsIGRyaXZlciB2ZXJzaW9uICIgUEFORUxfVkVSU0lPTgpAQCAtMjE5NSw3ICsyMzA4LDggQEAKIAllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIlBhbmVsIGRyaXZlciB2ZXJzaW9uICIgUEFORUxfVkVSU0lPTgogCQkgICAgICAgIiBub3QgeWV0IHJlZ2lzdGVyZWRcbiIpOwotCS8qIHRlbGxzIHZhcmlvdXMgc3Vic3lzdGVtcyBhYm91dCB0aGUgZmFjdCB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaGVkICovCisJLyogdGVsbHMgdmFyaW91cyBzdWJzeXN0ZW1zIGFib3V0IHRoZSBmYWN0IHRoYXQgaW5pdGlhbGl6YXRpb24KKwkgICBpcyBmaW5pc2hlZCAqLwogCWluaXRfaW5fcHJvZ3Jlc3MgPSAwOwogCXJldHVybiAwOwogfQpAQCAtMjIyOCw2ICsyMzQyLDcgQEAKIAkJLyogVE9ETzogZnJlZSBhbGwgaW5wdXQgc2lnbmFscyAqLwogCQlwYXJwb3J0X3JlbGVhc2UocHBydCk7CiAJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHBydCk7CisJCXBwcnQgPSBOVUxMOwogCX0KIAlwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCZwYW5lbF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwppbmRleCA2NDNiNDEzLi45N2RhZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwpAQCAtODE1LDcgKzgxNSw3IEBACiB9CiAKIC8qCi0gKiBTbWFsbCBhZGRyZXMgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgUE9ITUVMRlMuCisgKiBTbWFsbCBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgZm9yIFBPSE1FTEZTLgogICovCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHBvaG1lbGZzX2FvcHMgPSB7CiAJLnJlYWRwYWdlCQk9IHBvaG1lbGZzX3JlYWRwYWdlLApAQCAtODQ3LDcgKzg0Nyw3IEBACiB9CiAKIC8qCi0gKiAtPmFsbG9jX2lub2RlKCkgY2FsbGJhY2suIEFsbG9jYXRlcyBpbm9kZSBhbmQgaW5pdGlsaXplcyBwcml2YXRlIGRhdGEuCisgKiAtPmFsbG9jX2lub2RlKCkgY2FsbGJhY2suIEFsbG9jYXRlcyBpbm9kZSBhbmQgaW5pdGlhbGl6ZXMgcHJpdmF0ZSBkYXRhLgogICovCiBzdGF0aWMgc3RydWN0IGlub2RlICpwb2htZWxmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewpAQCAtOTY4LDEyICs5NjgsMTggQEAKIAkJZ290byBlcnJfb3V0X2V4aXQ7CiAJfQogCi0JZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBmYWlsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGVzLlxuIiwgX19mdW5jX18sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8pOwotCQlnb3RvIGVycl9vdXRfZXhpdDsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnIgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKGVycikgeworCQkJZHByaW50aygiJXM6IGlubzogJWxsdSwgZmFpbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlcy5cbiIsIF9fZnVuY19fLCBQT0hNRUxGU19JKGlub2RlKS0+aW5vKTsKKwkJCWdvdG8gZXJyX291dF9leGl0OworCQl9CiAJfQogCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwogCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIG1vZGU6ICVvIC0+ICVvLCB1aWQ6ICV1IC0+ICV1LCBnaWQ6ICV1IC0+ICV1LCBzaXplOiAlbGx1IC0+ICVsbHUuXG4iLAogCQkJX19mdW5jX18sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8sIGlub2RlLT5pX21vZGUsIGF0dHItPmlhX21vZGUsCiAJCQlpbm9kZS0+aV91aWQsIGF0dHItPmlhX3VpZCwgaW5vZGUtPmlfZ2lkLCBhdHRyLT5pYV9naWQsIGlub2RlLT5pX3NpemUsIGF0dHItPmlhX3NpemUpOwpAQCAtMTIxNyw3ICsxMjIzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBvaG1lbGZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgcG9obWVsZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKQEAgLTEyMjYsNyArMTIzMiw3IEBACiAJbGlzdF9kZWxfaW5pdCgmcGktPmlub2RlX2VudHJ5KTsKIAlzcGluX3VubG9jaygmcHNiLT5pbm9fbG9jayk7CiAKLQlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworCXJldHVybiBnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOwogfQogCiBzdGF0aWMgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19nZXRfaW5vZGVfZnJvbV9saXN0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLApAQCAtMTI2Niw3ICsxMjcyLDcgQEAKIHsKIAlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHNiKTsKIAlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpOwotCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCXVuc2lnbmVkIGludCBpbl9kcm9wX2xpc3QgPSAwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUsICp0bXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCmluZGV4IGVjZDczMTMuLjk4MzhlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYwpAQCAtMjU4LDggKzI1OCw2IEBACiBzdGF0aWMgaW50IHF0Ml9ib3hfc2V0X3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCiAJCXVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLCB1bnNpZ25lZCBzaG9ydCBSZWdpc3Rlcl9OdW0sCiAJCXVuc2lnbmVkIHNob3J0IFZhbHVlKTsKLXN0YXRpYyBpbnQgcXQyX2JveF9mbHVzaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCAgdW5zaWduZWQgY2hhciB1YXJ0X251bWJlciwKLQkJdW5zaWduZWQgc2hvcnQgcmN2X29yX3htaXQpOwogc3RhdGljIGludCBxdDJfYm94c2V0dWFydChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKIAkJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9kaXZpc29yLCB1bnNpZ25lZCBjaGFyIGRlZmF1bHRfTENSKTsKIHN0YXRpYyBpbnQgcXQyX2JveHNldGh3X2Zsb3djdGwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKQEAgLTY0NSw5ICs2NDMsNiBAQAogCS8qIGdldCB0aGUgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCXBvcnRfZXh0cmEgPSBxdDJfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsgLyogcG9ydCBwcml2YXRlIGRhdGEgKi8KIAotCS8qIHdlIGRvbid0IG5lZWQgdG8gZm9yY2UgZmx1c2ggdGhvdWdoIHRoZSBoYXJkd2FyZSwgc28gd2Ugc2tpcCB1c2luZwotCSAqIHF0Ml9ib3hfZmx1c2goKSBoZXJlICovCi0KIAkvKiB3ZSBjYW4gbm93IChhbmQgb25seSBub3cpIHN0b3AgcmVhZGluZyBkYXRhICovCiAJcG9ydF9leHRyYS0+Y2xvc2VfcGVuZGluZyA9IHRydWU7CiAJZGJnKCIlcygpOiBwb3J0X2V4dHJhLT5jbG9zZV9wZW5kaW5nID0gdHJ1ZSIsIF9fZnVuY19fKTsKQEAgLTE4NDEsMjQgKzE4MzYsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLQotLyoqIEBicmllZiBSZXF1ZXN0IHRoZSBUeCBvciBSeCBidWZmZXJzIG9uIHRoZSBVU0Igc2lkZSBiZSBmbHVzaGVkCi0gKgotICogVHggZmx1c2g6IFdoZW4gYWxsIHRoZSBjdXJyZW50bHkgYnVmZmVyZWQgZGF0YSBoYXMgYmVlbiBzZW50LCBzZW5kIGFuIGVzY2FwZQotICogc2VxdWVuY2UgYmFjayB1cCB0aGUgZGF0YSBzdHJlYW0gdG8gdXMKLSAqIFJ4IGZsdXNoOiBhZGQgYSBmbGFnIGluIHRoZSBkYXRhIHN0cmVhbSBub3cgc28gd2Uga25vdyB3aGVuIGl0J3MgbWFkZSBpdCdzCi0gKiB3YXkgdXAgdG8gdXMuCi0gKi8KLXN0YXRpYyBpbnQgcXQyX2JveF9mbHVzaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCAgdW5zaWduZWQgY2hhciB1YXJ0X251bWJlciwKLQkJICAgIHVuc2lnbmVkIHNob3J0IHJjdl9vcl94bWl0KQotewotCWludCByZXN1bHQ7Ci0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQlRVDJfRkxVU0hfREVWSUNFLCAweDQwLCByY3Zfb3JfeG1pdCwgdWFydF9udW1iZXIsIE5VTEwsIDAsCi0JCTMwMCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQogLyoqIHF0Ml9ib3hzZXR1YXJ0IC0gSXNzdWUgYSBTRVRfVUFSVCB2ZW5kb3Itc3BjaWZpYyByZXF1ZXN0IG9uIHRoZSBkZWZhdWx0CiAgKiBjb250cm9sIHBpcGUuIElmIHN1Y2Nlc3NmdWwgc2V0cyBiYXVkIHJhdGUgZGl2aXNvciBhbmQgTENSIHZhbHVlLgogICovCkBAIC0xODczLDYgKzE4NTAsNyBAQAogCQkJUVQyX0dFVF9TRVRfVUFSVCwgMHg0MCwgZGVmYXVsdF9kaXZpc29yLCBVYXJ0TnVtYW5kTENSLAogCQkJTlVMTCwgMCwgMzAwKTsKIH0KKwogLyoqIHF0Ml9ib3hzZXRod19mbG93Y3RsIC0gVHVybiBoYXJkd2FyZSAoUlRTL0NUUykgZmxvdyBjb250cm9sIG9uIGFuZCBvZmYgZm9yCiAgKiBhIGhhcmR3YXJlIFVBUlQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWE0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK2NvbmZpZyBBQ1BJX1FVSUNLU1RBUlQKKwl0cmlzdGF0ZSAiQUNQSSBRdWlja3N0YXJ0IGtleSBkcml2ZXIiCisJZGVwZW5kcyBvbiBBQ1BJICYmIElOUFVUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgdGhlIEFDUEkKKwkgIHF1aWNrc3RhcnQga2V5IHByb3RvY29sLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBxdWlja3N0YXJ0LgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGUwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfQUNQSV9RVUlDS1NUQVJUKQkJKz0gcXVpY2tzdGFydC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9xdWlja3N0YXJ0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcXVpY2tzdGFydC9xdWlja3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxMjI0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9xdWlja3N0YXJ0L3F1aWNrc3RhcnQuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAqICBxdWlja3N0YXJ0LmMgLSBBQ1BJIERpcmVjdCBBcHAgTGF1bmNoIGRyaXZlcgorICoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgQW5nZWxvIEFycmlmYW5vIDxtaWtuaXhAZ21haWwuY29tPgorICoKKyAqICBJbmZvcm1hdGlvbiBnYXRoZXJlZCBmcm9tIGRpc2Fzc2VibGVkIGRzZHQgYW5kIGZyb20gaGVyZToKKyAqICAiaHR0cDovL2Rvd25sb2FkLm1pY3Jvc29mdC5jb20vZG93bmxvYWQvOS9jLzUvCisgKiAgOWM1YjIxNjctODAxNy00YmFlLTlmZGUtZDU5OWJhYzgxODRhL0RpckFwcExhdW5jaF9WaXN0YS5kb2MiCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNkZWZpbmUgUVVJQ0tTVEFSVF9WRVJTSU9OICIxLjAzIgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCitNT0RVTEVfQVVUSE9SKCJBbmdlbG8gQXJyaWZhbm8iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBEaXJlY3QgQXBwIExhdW5jaCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBRVUlDS1NUQVJUX0FDUElfREVWSUNFX05BTUUgICAicXVpY2tzdGFydCIKKyNkZWZpbmUgUVVJQ0tTVEFSVF9BQ1BJX0NMQVNTICAgICAgICAgInF1aWNrc3RhcnQiCisjZGVmaW5lIFFVSUNLU1RBUlRfQUNQSV9ISUQgICAgICAgICAgICJQTlAwQzMyIgorCisjZGVmaW5lIFFVSUNLU1RBUlRfUEZfRFJJVkVSX05BTUUgICAgICJxdWlja3N0YXJ0IgorI2RlZmluZSBRVUlDS1NUQVJUX1BGX0RFVklDRV9OQU1FICAgICAicXVpY2tzdGFydCIKKyNkZWZpbmUgUVVJQ0tTVEFSVF9QRl9ERVZBVFRSX05BTUUgICAgInByZXNzZWRfYnV0dG9uIgorCisjZGVmaW5lIFFVSUNLU1RBUlRfTUFYX0JUTl9OQU1FX0xFTiAgIDE2CisKKy8qIFRoZXJlIHdpbGwgYmUgdHdvIGV2ZW50czoKKwkgKiAweDAyIC0gQSBob3QgYnV0dG9uIHdhcyBwcmVzc2VkIHdoaWxlIGRldmljZSB3YXMgb2ZmL3NsZWVwaW5nLgorCSAqIDB4ODAgLSBBIGhvdCBidXR0b24gd2FzIHByZXNzZWQgd2hpbGUgZGV2aWNlIHdhcyB1cC4gKi8KKyNkZWZpbmUgUVVJQ0tTVEFSVF9FVkVOVF9XQUtFICAgICAgICAgMHgwMgorI2RlZmluZSBRVUlDS1NUQVJUX0VWRU5UX1JVTlRJTUUgICAgICAweDgwCisKK3N0cnVjdCBxdWlja3N0YXJ0X2J0biB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBxdWlja3N0YXJ0X2RyaXZlcl9kYXRhIHsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKmJ0bl9sc3Q7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICpwcmVzc2VkOworfSBxdWlja3N0YXJ0X2RhdGE7CisKKy8qIEFDUEkgZHJpdmVyIFN0cnVjdHMgKi8KK3N0cnVjdCBxdWlja3N0YXJ0X2FjcGkgeworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqYnRuOworfTsKK3N0YXRpYyBpbnQgcXVpY2tzdGFydF9hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IHF1aWNrc3RhcnRfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgIHF1aWNrc3RhcnRfZGV2aWNlX2lkc1tdID0geworCXtRVUlDS1NUQVJUX0FDUElfSElELCAwfSwKKwl7IiIsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBxdWlja3N0YXJ0X2FjcGlfZHJpdmVyID0geworCS5uYW1lID0gInF1aWNrc3RhcnQiLAorCS5jbGFzcyA9IFFVSUNLU1RBUlRfQUNQSV9DTEFTUywKKwkuaWRzID0gcXVpY2tzdGFydF9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCQkuYWRkID0gcXVpY2tzdGFydF9hY3BpX2FkZCwKKwkJCS5yZW1vdmUgPSBxdWlja3N0YXJ0X2FjcGlfcmVtb3ZlLAorCQl9LAorfTsKKworLyogSW5wdXQgZGV2aWNlIHN0cnVjdHMgKi8KK3N0cnVjdCBpbnB1dF9kZXYgKnF1aWNrc3RhcnRfaW5wdXQ7CisKKy8qIFBsYXRmb3JtIGRyaXZlciBzdHJ1Y3RzICovCitzdGF0aWMgc3NpemVfdCBidXR0b25zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IHByZXNzZWRfYnV0dG9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IHByZXNzZWRfYnV0dG9uX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjb25zdCBjaGFyICpidWYsCisJCQkJCSBzaXplX3QgY291bnQpOworc3RhdGljIERFVklDRV9BVFRSKHByZXNzZWRfYnV0dG9uLCAwNjY2LCBwcmVzc2VkX2J1dHRvbl9zaG93LAorCQkJCQkgcHJlc3NlZF9idXR0b25fc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGJ1dHRvbnMsIDA0NDQsIGJ1dHRvbnNfc2hvdywgTlVMTCk7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGZfZGV2aWNlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gUVVJQ0tTVEFSVF9QRl9EUklWRVJfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfQorfTsKKworLyoKKyAqIFBsYXRmb3JtIGRyaXZlciBmdW5jdGlvbnMKKyAqLworc3RhdGljIHNzaXplX3QgYnV0dG9uc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY2hhciAqYnVmKQoreworCWludCBjb3VudCA9IDA7CisJc3RydWN0IHF1aWNrc3RhcnRfYnRuICpwdHIgPSBxdWlja3N0YXJ0X2RhdGEuYnRuX2xzdDsKKworCWlmICghcHRyKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lIik7CisKKwl3aGlsZSAocHRyICYmIChjb3VudCA8IFBBR0VfU0laRSkpIHsKKwkJaWYgKHB0ci0+bmFtZSkgeworCQkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsCisJCQkJCVBBR0VfU0laRSAtIGNvdW50LAorCQkJCQkiJWRcdCVzXG4iLCBwdHItPmlkLCBwdHItPm5hbWUpOworCQl9CisJCXB0ciA9IHB0ci0+bmV4dDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHByZXNzZWRfYnV0dG9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAorCQkocXVpY2tzdGFydF9kYXRhLnByZXNzZWQ/cXVpY2tzdGFydF9kYXRhLnByZXNzZWQtPm5hbWU6Im5vbmUiKSk7Cit9CisKKworc3RhdGljIHNzaXplX3QgcHJlc3NlZF9idXR0b25fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoY291bnQgPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJuY2FzZWNtcChidWYsICJub25lIiwgNCkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlxdWlja3N0YXJ0X2RhdGEucHJlc3NlZCA9IE5VTEw7CisJcmV0dXJuIGNvdW50OworfQorCisvKiBIb3RzdGFydCBIZWxwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IHF1aWNrc3RhcnRfYnRubHN0X2FkZChzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKipkYXRhKQoreworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqKnB0ciA9ICZxdWlja3N0YXJ0X2RhdGEuYnRuX2xzdDsKKworCXdoaWxlICgqcHRyKQorCQlwdHIgPSAmKCgqcHRyKS0+bmV4dCk7CisKKwkqcHRyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHF1aWNrc3RhcnRfYnRuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCEqcHRyKSB7CisJCSpkYXRhID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCSpkYXRhID0gKnB0cjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdWlja3N0YXJ0X2J0bmxzdF9kZWwoc3RydWN0IHF1aWNrc3RhcnRfYnRuICpkYXRhKQoreworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqKnB0ciA9ICZxdWlja3N0YXJ0X2RhdGEuYnRuX2xzdDsKKworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJd2hpbGUgKCpwdHIpIHsKKwkJaWYgKCpwdHIgPT0gZGF0YSkgeworCQkJKnB0ciA9ICgqcHRyKS0+bmV4dDsKKwkJCWtmcmVlKGRhdGEpOworCQkJcmV0dXJuOworCQl9CisJCXB0ciA9ICYoKCpwdHIpLT5uZXh0KTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHF1aWNrc3RhcnRfYnRubHN0X2ZyZWUodm9pZCkKK3sKKwlzdHJ1Y3QgcXVpY2tzdGFydF9idG4gKnB0ciA9IHF1aWNrc3RhcnRfZGF0YS5idG5fbHN0OworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqbHB0ciA9IE5VTEw7CisKKwl3aGlsZSAocHRyKSB7CisJCWxwdHIgPSBwdHI7CisJCXB0ciA9IHB0ci0+bmV4dDsKKwkJa2ZyZWUobHB0ci0+bmFtZSk7CisJCWtmcmVlKGxwdHIpOworCX0KKworCXJldHVybjsKK30KKworLyogQUNQSSBEcml2ZXIgZnVuY3Rpb25zICovCitzdGF0aWMgdm9pZCBxdWlja3N0YXJ0X2FjcGlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBxdWlja3N0YXJ0X2FjcGkgKnF1aWNrc3RhcnQgPSBkYXRhOworCisJaWYgKCFxdWlja3N0YXJ0KQorCQlyZXR1cm47CisKKwlpZiAoZXZlbnQgPT0gUVVJQ0tTVEFSVF9FVkVOVF9XQUtFKQorCQlxdWlja3N0YXJ0X2RhdGEucHJlc3NlZCA9IHF1aWNrc3RhcnQtPmJ0bjsKKwllbHNlIGlmIChldmVudCA9PSBRVUlDS1NUQVJUX0VWRU5UX1JVTlRJTUUpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShxdWlja3N0YXJ0X2lucHV0LCBxdWlja3N0YXJ0LT5idG4tPmlkLCAxKTsKKwkJaW5wdXRfc3luYyhxdWlja3N0YXJ0X2lucHV0KTsKKwkJaW5wdXRfcmVwb3J0X2tleShxdWlja3N0YXJ0X2lucHV0LCBxdWlja3N0YXJ0LT5idG4tPmlkLCAwKTsKKwkJaW5wdXRfc3luYyhxdWlja3N0YXJ0X2lucHV0KTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBxdWlja3N0YXJ0X2FjcGlfZ2hpZChzdHJ1Y3QgcXVpY2tzdGFydF9hY3BpICpxdWlja3N0YXJ0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXVpbnQzMl90IHVzYWdlaWQgPSAwOworCisJaWYgKCFxdWlja3N0YXJ0KQorCQlyZXR1cm47CisKKwkvKiBUaGlzIHJldHVybnMgYSBidWZmZXIgdGVsbGluZyB0aGUgYnV0dG9uIHVzYWdlIElELAorCSAqIGFuZCB0cmlnZ2VycyBwZW5kaW5nIG5vdGlmeSBldmVudHMgKFRoZSBvbmVzIGJlZm9yZSBib290aW5nKS4gKi8KKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChxdWlja3N0YXJ0LT5kZXZpY2UtPmhhbmRsZSwKKwkJCQkJIkdISUQiLCBOVUxMLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwgIWJ1ZmZlci5wb2ludGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAicXVpY2tzdGFydDogJXMgR0hJRCBtZXRob2QgZmFpbGVkLlxuIiwKKwkJICAgICAgIHF1aWNrc3RhcnQtPmJ0bi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYnVmZmVyLmxlbmd0aCA8IDgpCisJCXJldHVybjsKKworCS8qIDw8VGhlIEdISUQgbWV0aG9kIGNhbiByZXR1cm4gYSBCWVRFLCBXT1JELCBvciBEV09SRC4KKwkgKiBUaGUgdmFsdWUgbXVzdCBiZSBlbmNvZGVkIGluIGxpdHRsZS1lbmRpYW4gYnl0ZQorCSAqIG9yZGVyIChsZWFzdCBzaWduaWZpY2FudCBieXRlIGZpcnN0KS4+PiAqLworCXVzYWdlaWQgPSAqKCh1aW50MzJfdCAqKShidWZmZXIucG9pbnRlciArIChidWZmZXIubGVuZ3RoIC0gOCkpKTsKKwlxdWlja3N0YXJ0LT5idG4tPmlkID0gdXNhZ2VpZDsKKworCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKK30KKworc3RhdGljIGludCBxdWlja3N0YXJ0X2FjcGlfY29uZmlnKHN0cnVjdCBxdWlja3N0YXJ0X2FjcGkgKnF1aWNrc3RhcnQsIGNoYXIgKmJpZCkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGJpZCk7CisJaW50IHJldDsKKworCS8qIEFkZCBidXR0b24gdG8gbGlzdCAqLworCXJldCA9IHF1aWNrc3RhcnRfYnRubHN0X2FkZCgmcXVpY2tzdGFydC0+YnRuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcXVpY2tzdGFydC0+YnRuLT5uYW1lID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXF1aWNrc3RhcnQtPmJ0bi0+bmFtZSkgeworCQlxdWlja3N0YXJ0X2J0bmxzdF9mcmVlKCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzdHJjcHkocXVpY2tzdGFydC0+YnRuLT5uYW1lLCBiaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVpY2tzdGFydF9hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKKwlzdHJ1Y3QgcXVpY2tzdGFydF9hY3BpICpxdWlja3N0YXJ0ID0gTlVMTDsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXF1aWNrc3RhcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcXVpY2tzdGFydF9hY3BpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWlja3N0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXF1aWNrc3RhcnQtPmRldmljZSA9IGRldmljZTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpLCBRVUlDS1NUQVJUX0FDUElfREVWSUNFX05BTUUpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBRVUlDS1NUQVJUX0FDUElfQ0xBU1MpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBxdWlja3N0YXJ0OworCisJLyogQWRkIGJ1dHRvbiB0byBsaXN0IGFuZCBpbml0aWFsaXplIHNvbWUgc3R1ZmYgKi8KKwlyZXQgPSBxdWlja3N0YXJ0X2FjcGlfY29uZmlnKHF1aWNrc3RhcnQsIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfY29uZmlnOworCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQkJCQkJQUNQSV9BTExfTk9USUZZLAorCQkJCQkJcXVpY2tzdGFydF9hY3BpX25vdGlmeSwKKwkJCQkJCXF1aWNrc3RhcnQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgInF1aWNrc3RhcnQ6IE5vdGlmeSBoYW5kbGVyIGluc3RhbGwgZXJyb3JcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfaW5zdGFsbG5vdGlmeTsKKwl9CisKKwlxdWlja3N0YXJ0X2FjcGlfZ2hpZChxdWlja3N0YXJ0KTsKKworCXJldHVybiAwOworCitmYWlsX2luc3RhbGxub3RpZnk6CisJcXVpY2tzdGFydF9idG5sc3RfZGVsKHF1aWNrc3RhcnQtPmJ0bik7CisKK2ZhaWxfY29uZmlnOgorCisJa2ZyZWUocXVpY2tzdGFydCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHF1aWNrc3RhcnRfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CisJc3RydWN0IHF1aWNrc3RhcnRfYWNwaSAqcXVpY2tzdGFydCA9IE5VTEw7CisKKwlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXF1aWNrc3RhcnQgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisKKwlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmhhbmRsZSwKKwkJCQkJCSBBQ1BJX0FMTF9OT1RJRlksCisJCQkJCSAgICBxdWlja3N0YXJ0X2FjcGlfbm90aWZ5KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXByaW50ayhLRVJOX0VSUiAicXVpY2tzdGFydDogRXJyb3IgcmVtb3Zpbmcgbm90aWZ5IGhhbmRsZXJcbiIpOworCisKKwlrZnJlZShxdWlja3N0YXJ0KTsKKworCXJldHVybiAwOworfQorCisvKiBNb2R1bGUgZnVuY3Rpb25zICovCisKK3N0YXRpYyB2b2lkIHF1aWNrc3RhcnRfZXhpdCh2b2lkKQoreworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHF1aWNrc3RhcnRfaW5wdXQpOworCWlucHV0X2ZyZWVfZGV2aWNlKHF1aWNrc3RhcnRfaW5wdXQpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZl9kZXZpY2UtPmRldiwgJmRldl9hdHRyX3ByZXNzZWRfYnV0dG9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBmX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9ucyk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZl9kZXZpY2UpOworCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBmX2RyaXZlcik7CisKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmcXVpY2tzdGFydF9hY3BpX2RyaXZlcik7CisKKwlxdWlja3N0YXJ0X2J0bmxzdF9mcmVlKCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHF1aWNrc3RhcnRfaW5pdF9pbnB1dCh2b2lkKQoreworCXN0cnVjdCBxdWlja3N0YXJ0X2J0biAqKnB0ciA9ICZxdWlja3N0YXJ0X2RhdGEuYnRuX2xzdDsKKwlpbnQgY291bnQ7CisKKwlxdWlja3N0YXJ0X2lucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisKKwlpZiAoIXF1aWNrc3RhcnRfaW5wdXQpCisJCXJldHVybiAtRU5PTUVNOworCisJcXVpY2tzdGFydF9pbnB1dC0+bmFtZSA9ICJRdWlja3N0YXJ0IEFDUEkgQnV0dG9ucyI7CisJcXVpY2tzdGFydF9pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCisJd2hpbGUgKCpwdHIpIHsKKwkJY291bnQrKzsKKwkJc2V0X2JpdChFVl9LRVksIHF1aWNrc3RhcnRfaW5wdXQtPmV2Yml0KTsKKwkJc2V0X2JpdCgoKnB0ciktPmlkLCBxdWlja3N0YXJ0X2lucHV0LT5rZXliaXQpOworCQlwdHIgPSAmKCgqcHRyKS0+bmV4dCk7CisJfQorCisJcmV0dXJuIGlucHV0X3JlZ2lzdGVyX2RldmljZShxdWlja3N0YXJ0X2lucHV0KTsKK30KKworc3RhdGljIGludCBfX2luaXQgcXVpY2tzdGFydF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOworCisJLyogQUNQSSBDaGVjayAqLworCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEFDUEkgZHJpdmVyIHJlZ2lzdGVyICovCisJc3RhdHVzID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZxdWlja3N0YXJ0X2FjcGlfZHJpdmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBJZiBleGlzdGluZyBidXMgd2l0aCBubyBkZXZpY2VzICovCisJaWYgKCFxdWlja3N0YXJ0X2RhdGEuYnRuX2xzdCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGZhaWxfcGZkcnZfcmVnOworCX0KKworCS8qIFBsYXRmb3JtIGRyaXZlciByZWdpc3RlciAqLworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGZfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcGZkcnZfcmVnOworCisJLyogUGxhdGZvcm0gZGV2aWNlIHJlZ2lzdGVyICovCisJcGZfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKFFVSUNLU1RBUlRfUEZfREVWSUNFX05BTUUsIC0xKTsKKwlpZiAoIXBmX2RldmljZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfcGZkZXZfYWxsb2M7CisJfQorCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGZfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcGZkZXZfYWRkOworCisJLyogQ3JlYXRlIGRldmljZSBzeXNmcyBmaWxlICovCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZl9kZXZpY2UtPmRldiwgJmRldl9hdHRyX3ByZXNzZWRfYnV0dG9uKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfZGV2X2ZpbGU7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBmX2RldmljZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9ucyk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2Rldl9maWxlMjsKKworCisJLyogSW5wdXQgZGV2aWNlICovCisJcmV0ID0gcXVpY2tzdGFydF9pbml0X2lucHV0KCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2lucHV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAicXVpY2tzdGFydDogQUNQSSBEaXJlY3QgQXBwIExhdW5jaCB2ZXIgJXNcbiIsCisJCQkJCQlRVUlDS1NUQVJUX1ZFUlNJT04pOworCisJcmV0dXJuIDA7CitmYWlsX2lucHV0OgorCWRldmljZV9yZW1vdmVfZmlsZSgmcGZfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9idXR0b25zKTsKKworZmFpbF9kZXZfZmlsZTI6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZl9kZXZpY2UtPmRldiwgJmRldl9hdHRyX3ByZXNzZWRfYnV0dG9uKTsKKworZmFpbF9kZXZfZmlsZToKKwlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBmX2RldmljZSk7CisKK2ZhaWxfcGZkZXZfYWRkOgorCXBsYXRmb3JtX2RldmljZV9wdXQocGZfZGV2aWNlKTsKKworZmFpbF9wZmRldl9hbGxvYzoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGZfZHJpdmVyKTsKKworZmFpbF9wZmRydl9yZWc6CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnF1aWNrc3RhcnRfYWNwaV9kcml2ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQocXVpY2tzdGFydF9pbml0KTsKK21vZHVsZV9leGl0KHF1aWNrc3RhcnRfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjdiM2M2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotY29uZmlnIFJBTVpTV0FQCi0JdHJpc3RhdGUgIkNvbXByZXNzZWQgaW4tbWVtb3J5IHN3YXAgZGV2aWNlIChyYW16c3dhcCkiCi0JZGVwZW5kcyBvbiBTV0FQCi0Jc2VsZWN0IExaT19DT01QUkVTUwotCXNlbGVjdCBMWk9fREVDT01QUkVTUwotCWRlZmF1bHQgbgotCWhlbHAKLQkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcyBzd2FwCi0JICBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluCi0JICBtZW1vcnkgaXRzZWxmLgotCi0JICBTZWUgcmFtenN3YXAudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCSAgUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tLwotCi1jb25maWcgUkFNWlNXQVBfU1RBVFMKLQlib29sICJFbmFibGUgcmFtenN3YXAgc3RhdHMiCi0JZGVwZW5kcyBvbiBSQU1aU1dBUAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEVuYWJsZSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gZm9yIHJhbXpzd2FwLiBUaGlzIGFkZHMgb25seSBhIG1pbmltYWwKLQkgIG92ZXJoZWFkLiBJbiB1bnN1cmUsIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDdkN2RjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotcmFtenN3YXAtb2Jqcwk6PQlyYW16c3dhcF9kcnYubyB4dm1hbGxvYy5vCi0KLW9iai0kKENPTkZJR19SQU1aU1dBUCkJKz0JcmFtenN3YXAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwLnR4dCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OTRhY2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLXJhbXpzd2FwOiBDb21wcmVzc2VkIFJBTSBiYXNlZCBzd2FwIGRldmljZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Qcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20vCi0KLSogSW50cm9kdWN0aW9uCi0KLVRoZSByYW16c3dhcCBtb2R1bGUgY3JlYXRlcyBSQU0gYmFzZWQgYmxvY2sgZGV2aWNlcyB3aGljaCBjYW4gKG9ubHkpIGJlIHVzZWQgYXMKLXN3YXAgZGlza3MuIFBhZ2VzIHN3YXBwZWQgdG8gdGhlc2UgZGV2aWNlcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeQotaXRzZWxmLiBTZWUgcHJvamVjdCBob21lIGZvciB1c2UgY2FzZXMsIHBlcmZvcm1hbmNlIG51bWJlcnMgYW5kIGEgbG90IG1vcmUuCi0KLUluZGl2aWR1YWwgcmFtenN3YXAgZGV2aWNlcyBhcmUgY29uZmlndXJlZCBhbmQgaW5pdGlhbGl6ZWQgdXNpbmcgcnpzY29udHJvbAotdXNlcnNwYWNlIHV0aWxpdHkgYXMgc2hvd24gaW4gZXhhbXBsZXMgYmVsb3cuIFNlZSByenNjb250cm9sIG1hbiBwYWdlIGZvciBtb3JlCi1kZXRhaWxzLgotCi0qIFVzYWdlCi0KLUZvbGxvd2luZyBzaG93cyBhIHR5cGljYWwgc2VxdWVuY2Ugb2Ygc3RlcHMgZm9yIHVzaW5nIHJhbXpzd2FwLgotCi0xKSBMb2FkIE1vZHVsZXM6Ci0JbW9kcHJvYmUgcmFtenN3YXAgbnVtX2RldmljZXM9NAotCVRoaXMgY3JlYXRlcyA0ICh1bmluaXRpYWxpemVkKSBkZXZpY2VzOiAvZGV2L3JhbXpzd2FwezAsMSwyLDN9Ci0JKG51bV9kZXZpY2VzIHBhcmFtZXRlciBpcyBvcHRpb25hbC4gRGVmYXVsdDogMSkKLQotMikgSW5pdGlhbGl6ZToKLQlVc2UgcnpzY29udHJvbCB1dGlsaXR5IHRvIGNvbmZpZ3VyZSBhbmQgaW5pdGlhbGl6ZSBpbmRpdmlkdWFsCi0JcmFtenN3YXAgZGV2aWNlcy4gRXhhbXBsZToKLQlyenNjb250cm9sIC9kZXYvcmFtenN3YXAyIC0taW5pdCAjIHVzZXMgZGVmYXVsdCB2YWx1ZSBvZiBkaXNrc2l6ZV9rYgotCi0JKlNlZSByenNjb250cm9sIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzKgotCi0zKSBBY3RpdmF0ZToKLQlzd2Fwb24gL2Rldi9yYW16c3dhcDIgIyBvciBhbnkgb3RoZXIgaW5pdGlhbGl6ZWQgcmFtenN3YXAgZGV2aWNlCi0KLTQpIFN0YXRzOgotCXJ6c2NvbnRyb2wgL2Rldi9yYW16c3dhcDIgLS1zdGF0cwotCi01KSBEZWFjdGl2YXRlOgotCXN3YXBvZmYgL2Rldi9yYW16c3dhcDIKLQotNikgUmVzZXQ6Ci0JcnpzY29udHJvbCAvZGV2L3JhbXpzd2FwMiAtLXJlc2V0Ci0JKFRoaXMgZnJlZXMgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGlzIGRldmljZSkuCi0KLQotUGxlYXNlIHJlcG9ydCBhbnkgcHJvYmxlbXMgYXQ6Ci0gLSBNYWlsaW5nIGxpc3Q6IGxpbnV4LW1tLWNjIGF0IGxhcHRvcCBkb3Qgb3JnCi0gLSBJc3N1ZSB0cmFja2VyOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY29tcGNhY2hlL2lzc3Vlcy9saXN0Ci0KLU5pdGluIEd1cHRhCi1uZ3VwdGFAdmZsYXJlLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTRiZjkxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYworKysgL2Rldi9udWxsCkBAIC0xLDgzNyArMCwwIEBACi0vKgotICogQ29tcHJlc3NlZCBSQU0gYmFzZWQgc3dhcCBkZXZpY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCi0gKgotICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCi0gKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgotICoKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzLWNsYXVzZSBCU0QgTGljZW5zZQotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCi0gKgotICogUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tCi0gKi8KLQotI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAicmFtenN3YXAiCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10Ci0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9sem8uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLQotI2luY2x1ZGUgInJhbXpzd2FwX2Rydi5oIgotCi0vKiBHbG9iYWxzICovCi1zdGF0aWMgaW50IHJhbXpzd2FwX21ham9yOwotc3RhdGljIHN0cnVjdCByYW16c3dhcCAqZGV2aWNlczsKLQotLyogTW9kdWxlIHBhcmFtcyAoZG9jdW1lbnRhdGlvbiBhdCBlbmQpICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG51bV9kZXZpY2VzOwotCi1zdGF0aWMgaW50IHJ6c190ZXN0X2ZsYWcoc3RydWN0IHJhbXpzd2FwICpyenMsIHUzMiBpbmRleCwKLQkJCWVudW0gcnpzX3BhZ2VmbGFncyBmbGFnKQotewotCXJldHVybiByenMtPnRhYmxlW2luZGV4XS5mbGFncyAmIEJJVChmbGFnKTsKLX0KLQotc3RhdGljIHZvaWQgcnpzX3NldF9mbGFnKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgaW5kZXgsCi0JCQllbnVtIHJ6c19wYWdlZmxhZ3MgZmxhZykKLXsKLQlyenMtPnRhYmxlW2luZGV4XS5mbGFncyB8PSBCSVQoZmxhZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ6c19jbGVhcl9mbGFnKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgaW5kZXgsCi0JCQllbnVtIHJ6c19wYWdlZmxhZ3MgZmxhZykKLXsKLQlyenMtPnRhYmxlW2luZGV4XS5mbGFncyAmPSB+QklUKGZsYWcpOwotfQotCi1zdGF0aWMgaW50IHBhZ2VfemVyb19maWxsZWQodm9pZCAqcHRyKQotewotCXVuc2lnbmVkIGludCBwb3M7Ci0JdW5zaWduZWQgbG9uZyAqcGFnZTsKLQotCXBhZ2UgPSAodW5zaWduZWQgbG9uZyAqKXB0cjsKLQotCWZvciAocG9zID0gMDsgcG9zICE9IFBBR0VfU0laRSAvIHNpemVvZigqcGFnZSk7IHBvcysrKSB7Ci0JCWlmIChwYWdlW3Bvc10pCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgcmFtenN3YXBfc2V0X2Rpc2tzaXplKHN0cnVjdCByYW16c3dhcCAqcnpzLCBzaXplX3QgdG90YWxyYW1fYnl0ZXMpCi17Ci0JaWYgKCFyenMtPmRpc2tzaXplKSB7Ci0JCXByX2luZm8oCi0JCSJkaXNrIHNpemUgbm90IHByb3ZpZGVkLiBZb3UgY2FuIHVzZSBkaXNrc2l6ZV9rYiBtb2R1bGUgIgotCQkicGFyYW0gdG8gc3BlY2lmeSBzaXplLlxuVXNpbmcgZGVmYXVsdDogKCV1JSUgb2YgUkFNKS5cbiIsCi0JCWRlZmF1bHRfZGlza3NpemVfcGVyY19yYW0KLQkJKTsKLQkJcnpzLT5kaXNrc2l6ZSA9IGRlZmF1bHRfZGlza3NpemVfcGVyY19yYW0gKgotCQkJCQkodG90YWxyYW1fYnl0ZXMgLyAxMDApOwotCX0KLQotCWlmIChyenMtPmRpc2tzaXplID4gMiAqICh0b3RhbHJhbV9ieXRlcykpIHsKLQkJcHJfaW5mbygKLQkJIlRoZXJlIGlzIGxpdHRsZSBwb2ludCBjcmVhdGluZyBhIHJhbXpzd2FwIG9mIGdyZWF0ZXIgdGhhbiAiCi0JCSJ0d2ljZSB0aGUgc2l6ZSBvZiBtZW1vcnkgc2luY2Ugd2UgZXhwZWN0IGEgMjoxIGNvbXByZXNzaW9uICIKLQkJInJhdGlvLiBOb3RlIHRoYXQgcmFtenN3YXAgdXNlcyBhYm91dCAwLjElJSBvZiB0aGUgc2l6ZSBvZiAiCi0JCSJ0aGUgc3dhcCBkZXZpY2Ugd2hlbiBub3QgaW4gdXNlIHNvIGEgaHVnZSByYW16c3dhcCBpcyAiCi0JCSJ3YXN0ZWZ1bC5cbiIKLQkJIlx0TWVtb3J5IFNpemU6ICV6dSBrQlxuIgotCQkiXHRTaXplIHlvdSBzZWxlY3RlZDogJXp1IGtCXG4iCi0JCSJDb250aW51aW5nIGFueXdheSAuLi5cbiIsCi0JCXRvdGFscmFtX2J5dGVzID4+IDEwLCByenMtPmRpc2tzaXplCi0JCSk7Ci0JfQotCi0JcnpzLT5kaXNrc2l6ZSAmPSBQQUdFX01BU0s7Ci19Ci0KLS8qCi0gKiBTd2FwIGhlYWRlciAoMXN0IHBhZ2Ugb2Ygc3dhcCBkZXZpY2UpIGNvbnRhaW5zIGluZm9ybWF0aW9uCi0gKiBhYm91dCBhIHN3YXAgZmlsZS9wYXJ0aXRpb24uIFByZXBhcmUgc3VjaCBhIGhlYWRlciBmb3IgdGhlCi0gKiBnaXZlbiByYW16c3dhcCBkZXZpY2Ugc28gdGhhdCBzd2Fwb24gY2FuIGlkZW50aWZ5IGl0IGFzIGEKLSAqIHN3YXAgcGFydGl0aW9uLgotICovCi1zdGF0aWMgdm9pZCBzZXR1cF9zd2FwX2hlYWRlcihzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgdW5pb24gc3dhcF9oZWFkZXIgKnMpCi17Ci0Jcy0+aW5mby52ZXJzaW9uID0gMTsKLQlzLT5pbmZvLmxhc3RfcGFnZSA9IChyenMtPmRpc2tzaXplID4+IFBBR0VfU0hJRlQpIC0gMTsKLQlzLT5pbmZvLm5yX2JhZHBhZ2VzID0gMDsKLQltZW1jcHkocy0+bWFnaWMubWFnaWMsICJTV0FQU1BBQ0UyIiwgMTApOwotfQotCi1zdGF0aWMgdm9pZCByYW16c3dhcF9pb2N0bF9nZXRfc3RhdHMoc3RydWN0IHJhbXpzd2FwICpyenMsCi0JCQlzdHJ1Y3QgcmFtenN3YXBfaW9jdGxfc3RhdHMgKnMpCi17Ci0Jcy0+ZGlza3NpemUgPSByenMtPmRpc2tzaXplOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNWlNXQVBfU1RBVFMpCi0JewotCXN0cnVjdCByYW16c3dhcF9zdGF0cyAqcnMgPSAmcnpzLT5zdGF0czsKLQlzaXplX3Qgc3VjY193cml0ZXMsIG1lbV91c2VkOwotCXVuc2lnbmVkIGludCBnb29kX2NvbXByZXNzX3BlcmMgPSAwLCBub19jb21wcmVzc19wZXJjID0gMDsKLQotCW1lbV91c2VkID0geHZfZ2V0X3RvdGFsX3NpemVfYnl0ZXMocnpzLT5tZW1fcG9vbCkKLQkJCSsgKHJzLT5wYWdlc19leHBhbmQgPDwgUEFHRV9TSElGVCk7Ci0Jc3VjY193cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPm51bV93cml0ZXMpIC0KLQkJCXJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+ZmFpbGVkX3dyaXRlcyk7Ci0KLQlpZiAoc3VjY193cml0ZXMgJiYgcnMtPnBhZ2VzX3N0b3JlZCkgewotCQlnb29kX2NvbXByZXNzX3BlcmMgPSBycy0+Z29vZF9jb21wcmVzcyAqIDEwMAotCQkJCQkvIHJzLT5wYWdlc19zdG9yZWQ7Ci0JCW5vX2NvbXByZXNzX3BlcmMgPSBycy0+cGFnZXNfZXhwYW5kICogMTAwCi0JCQkJCS8gcnMtPnBhZ2VzX3N0b3JlZDsKLQl9Ci0KLQlzLT5udW1fcmVhZHMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPm51bV9yZWFkcyk7Ci0Jcy0+bnVtX3dyaXRlcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+bnVtX3dyaXRlcyk7Ci0Jcy0+ZmFpbGVkX3JlYWRzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5mYWlsZWRfcmVhZHMpOwotCXMtPmZhaWxlZF93cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmZhaWxlZF93cml0ZXMpOwotCXMtPmludmFsaWRfaW8gPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmludmFsaWRfaW8pOwotCXMtPm5vdGlmeV9mcmVlID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5ub3RpZnlfZnJlZSk7Ci0Jcy0+cGFnZXNfemVybyA9IHJzLT5wYWdlc196ZXJvOwotCi0Jcy0+Z29vZF9jb21wcmVzc19wY3QgPSBnb29kX2NvbXByZXNzX3BlcmM7Ci0Jcy0+cGFnZXNfZXhwYW5kX3BjdCA9IG5vX2NvbXByZXNzX3BlcmM7Ci0KLQlzLT5wYWdlc19zdG9yZWQgPSBycy0+cGFnZXNfc3RvcmVkOwotCXMtPnBhZ2VzX3VzZWQgPSBtZW1fdXNlZCA+PiBQQUdFX1NISUZUOwotCXMtPm9yaWdfZGF0YV9zaXplID0gcnMtPnBhZ2VzX3N0b3JlZCA8PCBQQUdFX1NISUZUOwotCXMtPmNvbXByX2RhdGFfc2l6ZSA9IHJzLT5jb21wcl9zaXplOwotCXMtPm1lbV91c2VkX3RvdGFsID0gbWVtX3VzZWQ7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19SQU1aU1dBUF9TVEFUUyAqLwotfQotCi1zdGF0aWMgdm9pZCByYW16c3dhcF9mcmVlX3BhZ2Uoc3RydWN0IHJhbXpzd2FwICpyenMsIHNpemVfdCBpbmRleCkKLXsKLQl1MzIgY2xlbjsKLQl2b2lkICpvYmo7Ci0KLQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2U7Ci0JdTMyIG9mZnNldCA9IHJ6cy0+dGFibGVbaW5kZXhdLm9mZnNldDsKLQotCWlmICh1bmxpa2VseSghcGFnZSkpIHsKLQkJLyoKLQkJICogTm8gbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgemVybyBmaWxsZWQgcGFnZXMuCi0JCSAqIFNpbXBseSBjbGVhciB6ZXJvIHBhZ2UgZmxhZy4KLQkJICovCi0JCWlmIChyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19aRVJPKSkgewotCQkJcnpzX2NsZWFyX2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pOwotCQkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAodW5saWtlbHkocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkpIHsKLQkJY2xlbiA9IFBBR0VfU0laRTsKLQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCXJ6c19jbGVhcl9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlyenNfc3RhdF9kZWMoJnJ6cy0+c3RhdHMucGFnZXNfZXhwYW5kKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jb2JqID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApICsgb2Zmc2V0OwotCWNsZW4gPSB4dl9nZXRfb2JqZWN0X3NpemUob2JqKSAtIHNpemVvZihzdHJ1Y3Qgem9ial9oZWFkZXIpOwotCWt1bm1hcF9hdG9taWMob2JqLCBLTV9VU0VSMCk7Ci0KLQl4dl9mcmVlKHJ6cy0+bWVtX3Bvb2wsIHBhZ2UsIG9mZnNldCk7Ci0JaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwotCi1vdXQ6Ci0JcnpzLT5zdGF0cy5jb21wcl9zaXplIC09IGNsZW47Ci0JcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7Ci0KLQlyenMtPnRhYmxlW2luZGV4XS5wYWdlID0gTlVMTDsKLQlyenMtPnRhYmxlW2luZGV4XS5vZmZzZXQgPSAwOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV96ZXJvX3BhZ2Uoc3RydWN0IGJpbyAqYmlvKQotewotCXZvaWQgKnVzZXJfbWVtOwotCXN0cnVjdCBwYWdlICpwYWdlID0gYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZTsKLQotCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCW1lbXNldCh1c2VyX21lbSwgMCwgUEFHRV9TSVpFKTsKLQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7Ci0KLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQotCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7Ci0JYmlvX2VuZGlvKGJpbywgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX3VuY29tcHJlc3NlZF9wYWdlKHN0cnVjdCByYW16c3dhcCAqcnpzLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JdTMyIGluZGV4OwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbTsKLQotCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwotCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKLQotCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCWNtZW0gPSBrbWFwX2F0b21pYyhyenMtPnRhYmxlW2luZGV4XS5wYWdlLCBLTV9VU0VSMSkgKwotCQkJcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwotCi0JbWVtY3B5KHVzZXJfbWVtLCBjbWVtLCBQQUdFX1NJWkUpOwotCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKLQlrdW5tYXBfYXRvbWljKGNtZW0sIEtNX1VTRVIxKTsKLQotCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwotCi0Jc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQliaW9fZW5kaW8oYmlvLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIHJlcXVlc3QgcGFnZSBpcyBub3QgcHJlc2VudCBpbiByYW16c3dhcC4KLSAqIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byByZWFkIGJlZm9yZSBhbnkgcHJldmlvdXMgd3JpdGUKLSAqIHRvIHRoaXMgbG9jYXRpb24gLSB0aGlzIGhhcHBlbnMgZHVlIHRvIHJlYWRhaGVhZCB3aGVuCi0gKiBzd2FwIGRldmljZSBpcyByZWFkIGZyb20gdXNlci1zcGFjZSAoZS5nLiBkdXJpbmcgc3dhcG9uKQotICovCi1zdGF0aWMgaW50IGhhbmRsZV9yYW16c3dhcF9mYXVsdChzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgc3RydWN0IGJpbyAqYmlvKQotewotCXByX2RlYnVnKCJSZWFkIGJlZm9yZSB3cml0ZSBvbiBzd2FwIGRldmljZTogIgotCQkic2VjdG9yPSVsdSwgc2l6ZT0ldSwgb2Zmc2V0PSV1XG4iLAotCQkodWxvbmcpKGJpby0+Ymlfc2VjdG9yKSwgYmlvLT5iaV9zaXplLAotCQliaW8tPmJpX2lvX3ZlY1swXS5idl9vZmZzZXQpOwotCi0JLyogRG8gbm90aGluZy4gSnVzdCByZXR1cm4gc3VjY2VzcyAqLwotCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7Ci0JYmlvX2VuZGlvKGJpbywgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmFtenN3YXBfcmVhZChzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgc3RydWN0IGJpbyAqYmlvKQotewotCWludCByZXQ7Ci0JdTMyIGluZGV4OwotCXNpemVfdCBjbGVuOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXN0cnVjdCB6b2JqX2hlYWRlciAqemhlYWRlcjsKLQl1bnNpZ25lZCBjaGFyICp1c2VyX21lbSwgKmNtZW07Ci0KLQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLm51bV9yZWFkcyk7Ci0KLQlwYWdlID0gYmlvLT5iaV9pb192ZWNbMF0uYnZfcGFnZTsKLQlpbmRleCA9IGJpby0+Ymlfc2VjdG9yID4+IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7Ci0KLQlpZiAocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTykpCi0JCXJldHVybiBoYW5kbGVfemVyb19wYWdlKGJpbyk7Ci0KLQkvKiBSZXF1ZXN0ZWQgcGFnZSBpcyBub3QgcHJlc2VudCBpbiBjb21wcmVzc2VkIGFyZWEgKi8KLQlpZiAoIXJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UpCi0JCXJldHVybiBoYW5kbGVfcmFtenN3YXBfZmF1bHQocnpzLCBiaW8pOwotCi0JLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KLQlpZiAodW5saWtlbHkocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkpCi0JCXJldHVybiBoYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UocnpzLCBiaW8pOwotCi0JdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JY2xlbiA9IFBBR0VfU0laRTsKLQotCWNtZW0gPSBrbWFwX2F0b21pYyhyenMtPnRhYmxlW2luZGV4XS5wYWdlLCBLTV9VU0VSMSkgKwotCQkJcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwotCi0JcmV0ID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKAotCQljbWVtICsgc2l6ZW9mKCp6aGVhZGVyKSwKLQkJeHZfZ2V0X29iamVjdF9zaXplKGNtZW0pIC0gc2l6ZW9mKCp6aGVhZGVyKSwKLQkJdXNlcl9tZW0sICZjbGVuKTsKLQotCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKLQlrdW5tYXBfYXRvbWljKGNtZW0sIEtNX1VTRVIxKTsKLQotCS8qIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KLQlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewotCQlwcl9lcnIoIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcbiIsCi0JCQlyZXQsIGluZGV4KTsKLQkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5mYWlsZWRfcmVhZHMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQotCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7Ci0JYmlvX2VuZGlvKGJpbywgMCk7Ci0JcmV0dXJuIDA7Ci0KLW91dDoKLQliaW9faW9fZXJyb3IoYmlvKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYW16c3dhcF93cml0ZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgc3RydWN0IGJpbyAqYmlvKQotewotCWludCByZXQ7Ci0JdTMyIG9mZnNldCwgaW5kZXg7Ci0Jc2l6ZV90IGNsZW47Ci0Jc3RydWN0IHpvYmpfaGVhZGVyICp6aGVhZGVyOwotCXN0cnVjdCBwYWdlICpwYWdlLCAqcGFnZV9zdG9yZTsKLQl1bnNpZ25lZCBjaGFyICp1c2VyX21lbSwgKmNtZW0sICpzcmM7Ci0KLQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLm51bV93cml0ZXMpOwotCi0JcGFnZSA9IGJpby0+YmlfaW9fdmVjWzBdLmJ2X3BhZ2U7Ci0JaW5kZXggPSBiaW8tPmJpX3NlY3RvciA+PiBTRUNUT1JTX1BFUl9QQUdFX1NISUZUOwotCi0Jc3JjID0gcnpzLT5jb21wcmVzc19idWZmZXI7Ci0KLQltdXRleF9sb2NrKCZyenMtPmxvY2spOwotCi0JdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7Ci0JaWYgKHBhZ2VfemVyb19maWxsZWQodXNlcl9tZW0pKSB7Ci0JCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKLQkJbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwotCQlyenNfc3RhdF9pbmMoJnJ6cy0+c3RhdHMucGFnZXNfemVybyk7Ci0JCXJ6c19zZXRfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0KLQkJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQkJYmlvX2VuZGlvKGJpbywgMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGx6bzF4XzFfY29tcHJlc3ModXNlcl9tZW0sIFBBR0VfU0laRSwgc3JjLCAmY2xlbiwKLQkJCQlyenMtPmNvbXByZXNzX3dvcmttZW0pOwotCi0Ja3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOwotCi0JaWYgKHVubGlrZWx5KHJldCAhPSBMWk9fRV9PSykpIHsKLQkJbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwotCQlwcl9lcnIoIkNvbXByZXNzaW9uIGZhaWxlZCEgZXJyPSVkXG4iLCByZXQpOwotCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIFBhZ2UgaXMgaW5jb21wcmVzc2libGUuIFN0b3JlIGl0IGFzLWlzICh1bmNvbXByZXNzZWQpCi0JICogc2luY2Ugd2UgZG8gbm90IHdhbnQgdG8gcmV0dXJuIHRvbyBtYW55IHN3YXAgd3JpdGUKLQkgKiBlcnJvcnMgd2hpY2ggaGFzIHNpZGUgZWZmZWN0IG9mIGhhbmdpbmcgdGhlIHN5c3RlbS4KLQkgKi8KLQlpZiAodW5saWtlbHkoY2xlbiA+IG1heF96cGFnZV9zaXplKSkgewotCQljbGVuID0gUEFHRV9TSVpFOwotCQlwYWdlX3N0b3JlID0gYWxsb2NfcGFnZShHRlBfTk9JTyB8IF9fR0ZQX0hJR0hNRU0pOwotCQlpZiAodW5saWtlbHkoIXBhZ2Vfc3RvcmUpKSB7Ci0JCQltdXRleF91bmxvY2soJnJ6cy0+bG9jayk7Ci0JCQlwcl9pbmZvKCJFcnJvciBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgaW5jb21wcmVzc2libGUgIgotCQkJCSJwYWdlOiAldVxuIiwgaW5kZXgpOwotCQkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5mYWlsZWRfd3JpdGVzKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJb2Zmc2V0ID0gMDsKLQkJcnpzX3NldF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlyenNfc3RhdF9pbmMoJnJ6cy0+c3RhdHMucGFnZXNfZXhwYW5kKTsKLQkJcnpzLT50YWJsZVtpbmRleF0ucGFnZSA9IHBhZ2Vfc3RvcmU7Ci0JCXNyYyA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJZ290byBtZW1zdG9yZTsKLQl9Ci0KLQlpZiAoeHZfbWFsbG9jKHJ6cy0+bWVtX3Bvb2wsIGNsZW4gKyBzaXplb2YoKnpoZWFkZXIpLAotCQkJJnJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UsICZvZmZzZXQsCi0JCQlHRlBfTk9JTyB8IF9fR0ZQX0hJR0hNRU0pKSB7Ci0JCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKLQkJcHJfaW5mbygiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbXByZXNzZWQgIgotCQkJInBhZ2U6ICV1LCBzaXplPSV6dVxuIiwgaW5kZXgsIGNsZW4pOwotCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW1lbXN0b3JlOgotCXJ6cy0+dGFibGVbaW5kZXhdLm9mZnNldCA9IG9mZnNldDsKLQotCWNtZW0gPSBrbWFwX2F0b21pYyhyenMtPnRhYmxlW2luZGV4XS5wYWdlLCBLTV9VU0VSMSkgKwotCQkJcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwotCi0jaWYgMAotCS8qIEJhY2stcmVmZXJlbmNlIG5lZWRlZCBmb3IgbWVtb3J5IGRlZnJhZ21lbnRhdGlvbiAqLwotCWlmICghcnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkgewotCQl6aGVhZGVyID0gKHN0cnVjdCB6b2JqX2hlYWRlciAqKWNtZW07Ci0JCXpoZWFkZXItPnRhYmxlX2lkeCA9IGluZGV4OwotCQljbWVtICs9IHNpemVvZigqemhlYWRlcik7Ci0JfQotI2VuZGlmCi0KLQltZW1jcHkoY21lbSwgc3JjLCBjbGVuKTsKLQotCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOwotCWlmICh1bmxpa2VseShyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpKSkKLQkJa3VubWFwX2F0b21pYyhzcmMsIEtNX1VTRVIwKTsKLQotCS8qIFVwZGF0ZSBzdGF0cyAqLwotCXJ6cy0+c3RhdHMuY29tcHJfc2l6ZSArPSBjbGVuOwotCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5wYWdlc19zdG9yZWQpOwotCWlmIChjbGVuIDw9IFBBR0VfU0laRSAvIDIpCi0JCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKLQotCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKLQotCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7Ci0JYmlvX2VuZGlvKGJpbywgMCk7Ci0JcmV0dXJuIDA7Ci0KLW91dDoKLQliaW9faW9fZXJyb3IoYmlvKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENoZWNrIGlmIHJlcXVlc3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgcGFnZSBhbGlnbmVkLgotICovCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9zd2FwX3JlcXVlc3Qoc3RydWN0IHJhbXpzd2FwICpyenMsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlpZiAodW5saWtlbHkoCi0JCShiaW8tPmJpX3NlY3RvciA+PSAocnpzLT5kaXNrc2l6ZSA+PiBTRUNUT1JfU0hJRlQpKSB8fAotCQkoYmlvLT5iaV9zZWN0b3IgJiAoU0VDVE9SU19QRVJfUEFHRSAtIDEpKSB8fAotCQkoYmlvLT5iaV92Y250ICE9IDEpIHx8Ci0JCShiaW8tPmJpX3NpemUgIT0gUEFHRV9TSVpFKSB8fAotCQkoYmlvLT5iaV9pb192ZWNbMF0uYnZfb2Zmc2V0ICE9IDApKSkgewotCi0JCXJldHVybiAwOwotCX0KLQotCS8qIHN3YXAgcmVxdWVzdCBpcyB2YWxpZCAqLwotCXJldHVybiAxOwotfQotCi0vKgotICogSGFuZGxlciBmdW5jdGlvbiBmb3IgYWxsIHJhbXpzd2FwIEkvTyByZXF1ZXN0cy4KLSAqLwotc3RhdGljIGludCByYW16c3dhcF9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHJhbXpzd2FwICpyenMgPSBxdWV1ZS0+cXVldWVkYXRhOwotCi0JaWYgKHVubGlrZWx5KCFyenMtPmluaXRfZG9uZSkpIHsKLQkJYmlvX2lvX2Vycm9yKGJpbyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghdmFsaWRfc3dhcF9yZXF1ZXN0KHJ6cywgYmlvKSkgewotCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmludmFsaWRfaW8pOwotCQliaW9faW9fZXJyb3IoYmlvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3dpdGNoIChiaW9fZGF0YV9kaXIoYmlvKSkgewotCWNhc2UgUkVBRDoKLQkJcmV0ID0gcmFtenN3YXBfcmVhZChyenMsIGJpbyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBXUklURToKLQkJcmV0ID0gcmFtenN3YXBfd3JpdGUocnpzLCBiaW8pOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCByZXNldF9kZXZpY2Uoc3RydWN0IHJhbXpzd2FwICpyenMpCi17Ci0Jc2l6ZV90IGluZGV4OwotCi0JLyogRG8gbm90IGFjY2VwdCBhbnkgbmV3IEkvTyByZXF1ZXN0ICovCi0JcnpzLT5pbml0X2RvbmUgPSAwOwotCi0JLyogRnJlZSB2YXJpb3VzIHBlci1kZXZpY2UgYnVmZmVycyAqLwotCWtmcmVlKHJ6cy0+Y29tcHJlc3Nfd29ya21lbSk7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyenMtPmNvbXByZXNzX2J1ZmZlciwgMSk7Ci0KLQlyenMtPmNvbXByZXNzX3dvcmttZW0gPSBOVUxMOwotCXJ6cy0+Y29tcHJlc3NfYnVmZmVyID0gTlVMTDsKLQotCS8qIEZyZWUgYWxsIHBhZ2VzIHRoYXQgYXJlIHN0aWxsIGluIHRoaXMgcmFtenN3YXAgZGV2aWNlICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcnpzLT5kaXNrc2l6ZSA+PiBQQUdFX1NISUZUOyBpbmRleCsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQl1MTYgb2Zmc2V0OwotCi0JCXBhZ2UgPSByenMtPnRhYmxlW2luZGV4XS5wYWdlOwotCQlvZmZzZXQgPSByenMtPnRhYmxlW2luZGV4XS5vZmZzZXQ7Ci0KLQkJaWYgKCFwYWdlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHVubGlrZWx5KHJ6c190ZXN0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1VOQ09NUFJFU1NFRCkpKQotCQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCWVsc2UKLQkJCXh2X2ZyZWUocnpzLT5tZW1fcG9vbCwgcGFnZSwgb2Zmc2V0KTsKLQl9Ci0KLQl2ZnJlZShyenMtPnRhYmxlKTsKLQlyenMtPnRhYmxlID0gTlVMTDsKLQotCXh2X2Rlc3Ryb3lfcG9vbChyenMtPm1lbV9wb29sKTsKLQlyenMtPm1lbV9wb29sID0gTlVMTDsKLQotCS8qIFJlc2V0IHN0YXRzICovCi0JbWVtc2V0KCZyenMtPnN0YXRzLCAwLCBzaXplb2YocnpzLT5zdGF0cykpOwotCi0JcnpzLT5kaXNrc2l6ZSA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmFtenN3YXBfaW9jdGxfaW5pdF9kZXZpY2Uoc3RydWN0IHJhbXpzd2FwICpyenMpCi17Ci0JaW50IHJldDsKLQlzaXplX3QgbnVtX3BhZ2VzOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuaW9uIHN3YXBfaGVhZGVyICpzd2FwX2hlYWRlcjsKLQotCWlmIChyenMtPmluaXRfZG9uZSkgewotCQlwcl9pbmZvKCJEZXZpY2UgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJhbXpzd2FwX3NldF9kaXNrc2l6ZShyenMsIHRvdGFscmFtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOwotCi0JcnpzLT5jb21wcmVzc193b3JrbWVtID0ga3phbGxvYyhMWk8xWF9NRU1fQ09NUFJFU1MsIEdGUF9LRVJORUwpOwotCWlmICghcnpzLT5jb21wcmVzc193b3JrbWVtKSB7Ci0JCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBjb21wcmVzc29yIHdvcmtpbmcgbWVtb3J5IVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlyenMtPmNvbXByZXNzX2J1ZmZlciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhfX0dGUF9aRVJPLCAxKTsKLQlpZiAoIXJ6cy0+Y29tcHJlc3NfYnVmZmVyKSB7Ci0JCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBjb21wcmVzc29yIGJ1ZmZlciBzcGFjZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQludW1fcGFnZXMgPSByenMtPmRpc2tzaXplID4+IFBBR0VfU0hJRlQ7Ci0JcnpzLT50YWJsZSA9IHZtYWxsb2MobnVtX3BhZ2VzICogc2l6ZW9mKCpyenMtPnRhYmxlKSk7Ci0JaWYgKCFyenMtPnRhYmxlKSB7Ci0JCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyByYW16c3dhcCBhZGRyZXNzIHRhYmxlXG4iKTsKLQkJLyogVG8gcHJldmVudCBhY2Nlc3NpbmcgdGFibGUgZW50cmllcyBkdXJpbmcgY2xlYW51cCAqLwotCQlyenMtPmRpc2tzaXplID0gMDsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQltZW1zZXQocnpzLT50YWJsZSwgMCwgbnVtX3BhZ2VzICogc2l6ZW9mKCpyenMtPnRhYmxlKSk7Ci0KLQlwYWdlID0gYWxsb2NfcGFnZShfX0dGUF9aRVJPKTsKLQlpZiAoIXBhZ2UpIHsKLQkJcHJfZXJyKCJFcnJvciBhbGxvY2F0aW5nIHN3YXAgaGVhZGVyIHBhZ2VcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCXJ6cy0+dGFibGVbMF0ucGFnZSA9IHBhZ2U7Ci0JcnpzX3NldF9mbGFnKHJ6cywgMCwgUlpTX1VOQ09NUFJFU1NFRCk7Ci0KLQlzd2FwX2hlYWRlciA9IGttYXAocGFnZSk7Ci0Jc2V0dXBfc3dhcF9oZWFkZXIocnpzLCBzd2FwX2hlYWRlcik7Ci0Ja3VubWFwKHBhZ2UpOwotCi0Jc2V0X2NhcGFjaXR5KHJ6cy0+ZGlzaywgcnpzLT5kaXNrc2l6ZSA+PiBTRUNUT1JfU0hJRlQpOwotCi0JLyogcmFtenN3YXAgZGV2aWNlcyBzb3J0IG9mIHJlc2VtYmxlcyBub24tcm90YXRpb25hbCBkaXNrcyAqLwotCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCByenMtPmRpc2stPnF1ZXVlKTsKLQotCXJ6cy0+bWVtX3Bvb2wgPSB4dl9jcmVhdGVfcG9vbCgpOwotCWlmICghcnpzLT5tZW1fcG9vbCkgewotCQlwcl9lcnIoIkVycm9yIGNyZWF0aW5nIG1lbW9yeSBwb29sXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJ6cy0+aW5pdF9kb25lID0gMTsKLQotCXByX2RlYnVnKCJJbml0aWFsaXphdGlvbiBkb25lIVxuIik7Ci0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JcmVzZXRfZGV2aWNlKHJ6cyk7Ci0KLQlwcl9lcnIoIkluaXRpYWxpemF0aW9uIGZhaWxlZDogZXJyPSVkXG4iLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcmFtenN3YXBfaW9jdGxfcmVzZXRfZGV2aWNlKHN0cnVjdCByYW16c3dhcCAqcnpzKQotewotCWlmIChyenMtPmluaXRfZG9uZSkKLQkJcmVzZXRfZGV2aWNlKHJ6cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYW16c3dhcF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCi0JCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgZGlza3NpemVfa2I7Ci0KLQlzdHJ1Y3QgcmFtenN3YXAgKnJ6cyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSWlNJT19TRVRfRElTS1NJWkVfS0I6Ci0JCWlmIChyenMtPmluaXRfZG9uZSkgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZkaXNrc2l6ZV9rYiwgKHZvaWQgKilhcmcsCi0JCQkJCQlfSU9DX1NJWkUoY21kKSkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyenMtPmRpc2tzaXplID0gZGlza3NpemVfa2IgPDwgMTA7Ci0JCXByX2luZm8oIkRpc2sgc2l6ZSBzZXQgdG8gJXp1IGtCXG4iLCBkaXNrc2l6ZV9rYik7Ci0JCWJyZWFrOwotCi0JY2FzZSBSWlNJT19HRVRfU1RBVFM6Ci0JewotCQlzdHJ1Y3QgcmFtenN3YXBfaW9jdGxfc3RhdHMgKnN0YXRzOwotCQlpZiAoIXJ6cy0+aW5pdF9kb25lKSB7Ci0JCQlyZXQgPSAtRU5PVFRZOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzdGF0cykgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXJhbXpzd2FwX2lvY3RsX2dldF9zdGF0cyhyenMsIHN0YXRzKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgc3RhdHMsIHNpemVvZigqc3RhdHMpKSkgewotCQkJa2ZyZWUoc3RhdHMpOwotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWtmcmVlKHN0YXRzKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgUlpTSU9fSU5JVDoKLQkJcmV0ID0gcmFtenN3YXBfaW9jdGxfaW5pdF9kZXZpY2UocnpzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFJaU0lPX1JFU0VUOgotCQkvKiBEbyBub3QgcmVzZXQgYW4gYWN0aXZlIGRldmljZSEgKi8KLQkJaWYgKGJkZXYtPmJkX2hvbGRlcnMpIHsKLQkJCXJldCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogTWFrZSBzdXJlIGFsbCBwZW5kaW5nIEkvTyBpcyBmaW5pc2hlZCAqLwotCQlpZiAoYmRldikKLQkJCWZzeW5jX2JkZXYoYmRldik7Ci0KLQkJcmV0ID0gcmFtenN3YXBfaW9jdGxfcmVzZXRfZGV2aWNlKHJ6cyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcHJfaW5mbygiSW52YWxpZCBpb2N0bCAldVxuIiwgY21kKTsKLQkJcmV0ID0gLUVOT1RUWTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHJhbXpzd2FwX3Nsb3RfZnJlZV9ub3RpZnkoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBpbmRleCkKLXsKLQlzdHJ1Y3QgcmFtenN3YXAgKnJ6czsKLQotCXJ6cyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlyYW16c3dhcF9mcmVlX3BhZ2UocnpzLCBpbmRleCk7Ci0JcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5ub3RpZnlfZnJlZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgcmFtenN3YXBfZGV2b3BzID0gewotCS5pb2N0bCA9IHJhbXpzd2FwX2lvY3RsLAotCS5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSByYW16c3dhcF9zbG90X2ZyZWVfbm90aWZ5LAotCS5vd25lciA9IFRISVNfTU9EVUxFCi19OwotCi1zdGF0aWMgaW50IGNyZWF0ZV9kZXZpY2Uoc3RydWN0IHJhbXpzd2FwICpyenMsIGludCBkZXZpY2VfaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9pbml0KCZyenMtPmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZyenMtPnN0YXQ2NF9sb2NrKTsKLQotCXJ6cy0+cXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyenMtPnF1ZXVlKSB7Ci0JCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBkaXNrIHF1ZXVlIGZvciBkZXZpY2UgJWRcbiIsCi0JCQlkZXZpY2VfaWQpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHJ6cy0+cXVldWUsIHJhbXpzd2FwX21ha2VfcmVxdWVzdCk7Ci0JcnpzLT5xdWV1ZS0+cXVldWVkYXRhID0gcnpzOwotCi0JIC8qIGdlbmRpc2sgc3RydWN0dXJlICovCi0JcnpzLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKLQlpZiAoIXJ6cy0+ZGlzaykgewotCQlibGtfY2xlYW51cF9xdWV1ZShyenMtPnF1ZXVlKTsKLQkJcHJfd2FybmluZygiRXJyb3IgYWxsb2NhdGluZyBkaXNrIHN0cnVjdHVyZSBmb3IgZGV2aWNlICVkXG4iLAotCQkJZGV2aWNlX2lkKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcnpzLT5kaXNrLT5tYWpvciA9IHJhbXpzd2FwX21ham9yOwotCXJ6cy0+ZGlzay0+Zmlyc3RfbWlub3IgPSBkZXZpY2VfaWQ7Ci0JcnpzLT5kaXNrLT5mb3BzID0gJnJhbXpzd2FwX2Rldm9wczsKLQlyenMtPmRpc2stPnF1ZXVlID0gcnpzLT5xdWV1ZTsKLQlyenMtPmRpc2stPnByaXZhdGVfZGF0YSA9IHJ6czsKLQlzbnByaW50ZihyenMtPmRpc2stPmRpc2tfbmFtZSwgMTYsICJyYW16c3dhcCVkIiwgZGV2aWNlX2lkKTsKLQotCS8qIEFjdHVhbCBjYXBhY2l0eSBzZXQgdXNpbmcgUlpTSU9fU0VUX0RJU0tTSVpFX0tCIGlvY3RsICovCi0Jc2V0X2NhcGFjaXR5KHJ6cy0+ZGlzaywgMCk7Ci0KLQlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShyenMtPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOwotCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocnpzLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKLQotCWFkZF9kaXNrKHJ6cy0+ZGlzayk7Ci0KLQlyenMtPmluaXRfZG9uZSA9IDA7Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBkZXN0cm95X2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cykKLXsKLQlpZiAocnpzLT5kaXNrKSB7Ci0JCWRlbF9nZW5kaXNrKHJ6cy0+ZGlzayk7Ci0JCXB1dF9kaXNrKHJ6cy0+ZGlzayk7Ci0JfQotCi0JaWYgKHJ6cy0+cXVldWUpCi0JCWJsa19jbGVhbnVwX3F1ZXVlKHJ6cy0+cXVldWUpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCByYW16c3dhcF9pbml0KHZvaWQpCi17Ci0JaW50IHJldCwgZGV2X2lkOwotCi0JaWYgKG51bV9kZXZpY2VzID4gbWF4X251bV9kZXZpY2VzKSB7Ci0JCXByX3dhcm5pbmcoIkludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzOiAldVxuIiwKLQkJCQludW1fZGV2aWNlcyk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJhbXpzd2FwX21ham9yID0gcmVnaXN0ZXJfYmxrZGV2KDAsICJyYW16c3dhcCIpOwotCWlmIChyYW16c3dhcF9tYWpvciA8PSAwKSB7Ci0JCXByX3dhcm5pbmcoIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyXG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIW51bV9kZXZpY2VzKSB7Ci0JCXByX2luZm8oIm51bV9kZXZpY2VzIG5vdCBzcGVjaWZpZWQuIFVzaW5nIGRlZmF1bHQ6IDFcbiIpOwotCQludW1fZGV2aWNlcyA9IDE7Ci0JfQotCi0JLyogQWxsb2NhdGUgdGhlIGRldmljZSBhcnJheSBhbmQgaW5pdGlhbGl6ZSBlYWNoIG9uZSAqLwotCXByX2luZm8oIkNyZWF0aW5nICV1IGRldmljZXMgLi4uXG4iLCBudW1fZGV2aWNlcyk7Ci0JZGV2aWNlcyA9IGt6YWxsb2MobnVtX2RldmljZXMgKiBzaXplb2Yoc3RydWN0IHJhbXpzd2FwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXZpY2VzKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gdW5yZWdpc3RlcjsKLQl9Ci0KLQlmb3IgKGRldl9pZCA9IDA7IGRldl9pZCA8IG51bV9kZXZpY2VzOyBkZXZfaWQrKykgewotCQlyZXQgPSBjcmVhdGVfZGV2aWNlKCZkZXZpY2VzW2Rldl9pZF0sIGRldl9pZCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZyZWVfZGV2aWNlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZnJlZV9kZXZpY2VzOgotCXdoaWxlIChkZXZfaWQpCi0JCWRlc3Ryb3lfZGV2aWNlKCZkZXZpY2VzWy0tZGV2X2lkXSk7Ci11bnJlZ2lzdGVyOgotCXVucmVnaXN0ZXJfYmxrZGV2KHJhbXpzd2FwX21ham9yLCAicmFtenN3YXAiKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmFtenN3YXBfZXhpdCh2b2lkKQotewotCWludCBpOwotCXN0cnVjdCByYW16c3dhcCAqcnpzOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9kZXZpY2VzOyBpKyspIHsKLQkJcnpzID0gJmRldmljZXNbaV07Ci0KLQkJZGVzdHJveV9kZXZpY2UocnpzKTsKLQkJaWYgKHJ6cy0+aW5pdF9kb25lKQotCQkJcmVzZXRfZGV2aWNlKHJ6cyk7Ci0JfQotCi0JdW5yZWdpc3Rlcl9ibGtkZXYocmFtenN3YXBfbWFqb3IsICJyYW16c3dhcCIpOwotCi0Ja2ZyZWUoZGV2aWNlcyk7Ci0JcHJfZGVidWcoIkNsZWFudXAgZG9uZSFcbiIpOwotfQotCi1tb2R1bGVfcGFyYW0obnVtX2RldmljZXMsIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhudW1fZGV2aWNlcywgIk51bWJlciBvZiByYW16c3dhcCBkZXZpY2VzIik7Ci0KLW1vZHVsZV9pbml0KHJhbXpzd2FwX2luaXQpOwotbW9kdWxlX2V4aXQocmFtenN3YXBfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKLU1PRFVMRV9BVVRIT1IoIk5pdGluIEd1cHRhIDxuZ3VwdGFAdmZsYXJlLm9yZz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ29tcHJlc3NlZCBSQU0gQmFzZWQgU3dhcCBEZXZpY2UiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjMzA0Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQotICoKLSAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAotICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KLSAqCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMAotICoKLSAqIFByb2plY3QgaG9tZTogaHR0cDovL2NvbXBjYWNoZS5nb29nbGVjb2RlLmNvbQotICovCi0KLSNpZm5kZWYgX1JBTVpTV0FQX0RSVl9IXwotI2RlZmluZSBfUkFNWlNXQVBfRFJWX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlICJyYW16c3dhcF9pb2N0bC5oIgotI2luY2x1ZGUgInh2bWFsbG9jLmgiCi0KLS8qCi0gKiBTb21lIGFyYml0cmFyeSB2YWx1ZS4gVGhpcyBpcyBqdXN0IHRvIGNhdGNoCi0gKiBpbnZhbGlkIHZhbHVlIGZvciBudW1fZGV2aWNlcyBtb2R1bGUgcGFyYW1ldGVyLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X251bV9kZXZpY2VzID0gMzI7Ci0KLS8qCi0gKiBTdG9yZWQgYXQgYmVnaW5uaW5nIG9mIGVhY2ggY29tcHJlc3NlZCBvYmplY3QuCi0gKgotICogSXQgc3RvcmVzIGJhY2stcmVmZXJlbmNlIHRvIHRhYmxlIGVudHJ5IHdoaWNoIHBvaW50cyB0byB0aGlzCi0gKiBvYmplY3QuIFRoaXMgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBtZW1vcnkgZGVmcmFnbWVudGF0aW9uLgotICovCi1zdHJ1Y3Qgem9ial9oZWFkZXIgewotI2lmIDAKLQl1MzIgdGFibGVfaWR4OwotI2VuZGlmCi19OwotCi0vKi0tIENvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzICovCi0KLS8qIERlZmF1bHQgcmFtenN3YXAgZGlzayBzaXplOiAyNSUgb2YgdG90YWwgUkFNICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdF9kaXNrc2l6ZV9wZXJjX3JhbSA9IDI1OwotCi0vKgotICogUGFnZXMgdGhhdCBjb21wcmVzcyB0byBzaXplIGdyZWF0ZXIgdGhhbiB0aGlzIGFyZSBzdG9yZWQKLSAqIHVuY29tcHJlc3NlZCBpbiBtZW1vcnkuCi0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfenBhZ2Vfc2l6ZSA9IFBBR0VfU0laRSAvIDQgKiAzOwotCi0vKgotICogTk9URTogbWF4X3pwYWdlX3NpemUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG86Ci0gKiAgIFhWX01BWF9BTExPQ19TSVpFIC0gc2l6ZW9mKHN0cnVjdCB6b2JqX2hlYWRlcikKLSAqIG90aGVyd2lzZSwgeHZfbWFsbG9jKCkgd291bGQgYWx3YXlzIHJldHVybiBmYWlsdXJlLgotICovCi0KLS8qLS0gRW5kIG9mIGNvbmZpZ3VyYWJsZSBwYXJhbXMgKi8KLQotI2RlZmluZSBTRUNUT1JfU0hJRlQJCTkKLSNkZWZpbmUgU0VDVE9SX1NJWkUJCSgxIDw8IFNFQ1RPUl9TSElGVCkKLSNkZWZpbmUgU0VDVE9SU19QRVJfUEFHRV9TSElGVAkoUEFHRV9TSElGVCAtIFNFQ1RPUl9TSElGVCkKLSNkZWZpbmUgU0VDVE9SU19QRVJfUEFHRQkoMSA8PCBTRUNUT1JTX1BFUl9QQUdFX1NISUZUKQotCi0vKiBGbGFncyBmb3IgcmFtenN3YXAgcGFnZXMgKHRhYmxlW3BhZ2Vfbm9dLmZsYWdzKSAqLwotZW51bSByenNfcGFnZWZsYWdzIHsKLQkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgKi8KLQlSWlNfVU5DT01QUkVTU0VELAotCi0JLyogUGFnZSBjb25zaXN0cyBlbnRpcmVseSBvZiB6ZXJvcyAqLwotCVJaU19aRVJPLAotCi0JX19OUl9SWlNfUEFHRUZMQUdTLAotfTsKLQotLyotLSBEYXRhIHN0cnVjdHVyZXMgKi8KLQotLyoKLSAqIEFsbG9jYXRlZCBmb3IgZWFjaCBzd2FwIHNsb3QsIGluZGV4ZWQgYnkgcGFnZSBuby4KLSAqIFRoZXNlIHRhYmxlIGVudHJpZXMgbXVzdCBmaXQgZXhhY3RseSBpbiBhIHBhZ2UuCi0gKi8KLXN0cnVjdCB0YWJsZSB7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdTE2IG9mZnNldDsKLQl1OCBjb3VudDsJLyogb2JqZWN0IHJlZiBjb3VudCAobm90IHlldCB1c2VkKSAqLwotCXU4IGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7Ci0KLXN0cnVjdCByYW16c3dhcF9zdGF0cyB7Ci0JLyogYmFzaWMgc3RhdHMgKi8KLQlzaXplX3QgY29tcHJfc2l6ZTsJLyogY29tcHJlc3NlZCBzaXplIG9mIHBhZ2VzIHN0b3JlZCAtCi0JCQkJICogbmVlZGVkIHRvIGVuZm9yY2UgbWVtbGltaXQgKi8KLQkvKiBtb3JlIHN0YXRzICovCi0jaWYgZGVmaW5lZChDT05GSUdfUkFNWlNXQVBfU1RBVFMpCi0JdTY0IG51bV9yZWFkczsJCS8qIGZhaWxlZCArIHN1Y2Nlc3NmdWwgKi8KLQl1NjQgbnVtX3dyaXRlczsJCS8qIC0tZG8tLSAqLwotCXU2NCBmYWlsZWRfcmVhZHM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCi0JdTY0IGZhaWxlZF93cml0ZXM7CS8qIGNhbiBoYXBwZW4gd2hlbiBtZW1vcnkgaXMgdG9vIGxvdyAqLwotCXU2NCBpbnZhbGlkX2lvOwkJLyogbm9uLXN3YXAgSS9PIHJlcXVlc3RzICovCi0JdTY0IG5vdGlmeV9mcmVlOwkvKiBuby4gb2Ygc3dhcCBzbG90IGZyZWUgbm90aWZpY2F0aW9ucyAqLwotCXUzMiBwYWdlc196ZXJvOwkJLyogbm8uIG9mIHplcm8gZmlsbGVkIHBhZ2VzICovCi0JdTMyIHBhZ2VzX3N0b3JlZDsJLyogbm8uIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgKi8KLQl1MzIgZ29vZF9jb21wcmVzczsJLyogJSBvZiBwYWdlcyB3aXRoIGNvbXByZXNzaW9uIHJhdGlvPD01MCUgKi8KLQl1MzIgcGFnZXNfZXhwYW5kOwkvKiAlIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzICovCi0jZW5kaWYKLX07Ci0KLXN0cnVjdCByYW16c3dhcCB7Ci0Jc3RydWN0IHh2X3Bvb2wgKm1lbV9wb29sOwotCXZvaWQgKmNvbXByZXNzX3dvcmttZW07Ci0Jdm9pZCAqY29tcHJlc3NfYnVmZmVyOwotCXN0cnVjdCB0YWJsZSAqdGFibGU7Ci0Jc3BpbmxvY2tfdCBzdGF0NjRfbG9jazsJLyogcHJvdGVjdCA2NC1iaXQgc3RhdHMgKi8KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2s7Ci0JaW50IGluaXRfZG9uZTsKLQkvKgotCSAqIFRoaXMgaXMgbGltaXQgb24gYW1vdW50IG9mICp1bmNvbXByZXNzZWQqIHdvcnRoIG9mIGRhdGEKLQkgKiB3ZSBjYW4gaG9sZC4gV2hlbiBiYWNraW5nIHN3YXAgZGV2aWNlIGlzIHByb3ZpZGVkLCBpdCBpcwotCSAqIHNldCBlcXVhbCB0byBkZXZpY2Ugc2l6ZS4KLQkgKi8KLQlzaXplX3QgZGlza3NpemU7CS8qIGJ5dGVzICovCi0KLQlzdHJ1Y3QgcmFtenN3YXBfc3RhdHMgc3RhdHM7Ci19OwotCi0vKi0tICovCi0KLS8qIERlYnVnZ2luZyBhbmQgU3RhdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19SQU1aU1dBUF9TVEFUUykKLXN0YXRpYyB2b2lkIHJ6c19zdGF0X2luYyh1MzIgKnYpCi17Ci0JKnYgPSAqdiArIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ6c19zdGF0X2RlYyh1MzIgKnYpCi17Ci0JKnYgPSAqdiAtIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ6c19zdGF0NjRfaW5jKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1NjQgKnYpCi17Ci0Jc3Bpbl9sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKLQkqdiA9ICp2ICsgMTsKLQlzcGluX3VubG9jaygmcnpzLT5zdGF0NjRfbG9jayk7Ci19Ci0KLXN0YXRpYyB1NjQgcnpzX3N0YXQ2NF9yZWFkKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1NjQgKnYpCi17Ci0JdTY0IHZhbDsKLQotCXNwaW5fbG9jaygmcnpzLT5zdGF0NjRfbG9jayk7Ci0JdmFsID0gKnY7Ci0Jc3Bpbl91bmxvY2soJnJ6cy0+c3RhdDY0X2xvY2spOwotCi0JcmV0dXJuIHZhbDsKLX0KLSNlbHNlCi0jZGVmaW5lIHJ6c19zdGF0X2luYyh2KQotI2RlZmluZSByenNfc3RhdF9kZWModikKLSNkZWZpbmUgcnpzX3N0YXQ2NF9pbmMociwgdikKLSNkZWZpbmUgcnpzX3N0YXQ2NF9yZWFkKHIsIHYpCi0jZW5kaWYgLyogQ09ORklHX1JBTVpTV0FQX1NUQVRTICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2lvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfaW9jdGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI5NGJjYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfaW9jdGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb21wcmVzc2VkIFJBTSBiYXNlZCBzd2FwIGRldmljZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKLSAqCi0gKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKLSAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCi0gKgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIDMtY2xhdXNlIEJTRCBMaWNlbnNlCi0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjAKLSAqCi0gKiBQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20KLSAqLwotCi0jaWZuZGVmIF9SQU1aU1dBUF9JT0NUTF9IXwotI2RlZmluZSBfUkFNWlNXQVBfSU9DVExfSF8KLQotc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzIHsKLQl1NjQgZGlza3NpemU7CQkvKiB1c2VyIHNwZWNpZmllZCBvciBlcXVhbCB0byBiYWNraW5nIHN3YXAKLQkJCQkgKiBzaXplIChpZiBwcmVzZW50KSAqLwotCXU2NCBudW1fcmVhZHM7CQkvKiBmYWlsZWQgKyBzdWNjZXNzZnVsICovCi0JdTY0IG51bV93cml0ZXM7CQkvKiAtLWRvLS0gKi8KLQl1NjQgZmFpbGVkX3JlYWRzOwkvKiBzaG91bGQgTkVWRVIhIGhhcHBlbiAqLwotCXU2NCBmYWlsZWRfd3JpdGVzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KLQl1NjQgaW52YWxpZF9pbzsJCS8qIG5vbi1zd2FwIEkvTyByZXF1ZXN0cyAqLwotCXU2NCBub3RpZnlfZnJlZTsJLyogbm8uIG9mIHN3YXAgc2xvdCBmcmVlIG5vdGlmaWNhdGlvbnMgKi8KLQl1MzIgcGFnZXNfemVybzsJCS8qIG5vLiBvZiB6ZXJvIGZpbGxlZCBwYWdlcyAqLwotCXUzMiBnb29kX2NvbXByZXNzX3BjdDsJLyogbm8uIG9mIHBhZ2VzIHdpdGggY29tcHJlc3Npb24gcmF0aW88PTUwJSAqLwotCXUzMiBwYWdlc19leHBhbmRfcGN0OwkvKiBuby4gb2YgaW5jb21wcmVzc2libGUgcGFnZXMgKi8KLQl1MzIgcGFnZXNfc3RvcmVkOwotCXUzMiBwYWdlc191c2VkOwotCXU2NCBvcmlnX2RhdGFfc2l6ZTsKLQl1NjQgY29tcHJfZGF0YV9zaXplOwotCXU2NCBtZW1fdXNlZF90b3RhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCwgYWxpZ25lZCg0KSkpOwotCi0jZGVmaW5lIFJaU0lPX1NFVF9ESVNLU0laRV9LQglfSU9XKCd6JywgMCwgc2l6ZV90KQotI2RlZmluZSBSWlNJT19HRVRfU1RBVFMJCV9JT1IoJ3onLCAxLCBzdHJ1Y3QgcmFtenN3YXBfaW9jdGxfc3RhdHMpCi0jZGVmaW5lIFJaU0lPX0lOSVQJCV9JTygneicsIDIpCi0jZGVmaW5lIFJaU0lPX1JFU0VUCQlfSU8oJ3onLCAzKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvYXAuaAppbmRleCAzZjc0NGE1Li5mYWFjODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2FwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9hcC5oCkBAIC00Miw3ICs0Miw4IEBACiAKIC8qIGFwX3dwYS5jICovCiB2b2lkIFdwYVN0YXRlTWFjaGluZUluaXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHN0cnVjdCBydF9zdGF0ZV9tYWNoaW5lICpTbSwgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKwkJCSBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSAqU20sCisJCQkgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKIAogI2lmZGVmIFJUTVBfTUFDX1VTQgogdm9pZCBCZWFjb25VcGRhdGVFeGVjKHZvaWQgKlN5c3RlbVNwZWNpZmljMSwKQEAgLTYxLDYgKzYyLDcgQEAKIEJPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCiAJCQkgICAgdTE2IHdjaWQsIHU4ICpwQWRkcik7CiAKLXN0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKk1hY1RhYmxlTG9va3VwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwgdTggKnBBZGRyKTsKK3N0cnVjdCBydF9tYWNfdGFibGVfZW50cnkgKk1hY1RhYmxlTG9va3VwKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKKwkJCQkJCQkJdTggKnBBZGRyKTsKIAogI2VuZGlmIC8qIF9fQVBfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NobGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jaGxpc3QuaAppbmRleCBhZGE2NWU1Li4xMjMxZTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NobGlzdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY2hsaXN0LmgKQEAgLTczLDM1ICs3MywzMSBAQAogZXh0ZXJuIHN0cnVjdCBydF9jaF9mcmVxX21hcCBDSF9IWl9JRF9NQVBbXTsKIGV4dGVybiBpbnQgQ0hfSFpfSURfTUFQX05VTTsKIAotI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKF9jaCwgX2toeikJCQkJCVwKLQkJZG97CQkJCQkJCQkJCQkJCVwKLQkJCWludCBfY2hJZHg7CQkJCQkJCQkJCQlcCi0JCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKVwKLQkJCXsJCQkJCQkJCQkJCQkJXAotCQkJCWlmICgoX2NoKSA9PSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsKQkJCVwKLQkJCQl7CQkJCQkJCQkJCQkJXAotCQkJCQkoX2toeikgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5mcmVxS0h6ICogMTAwMDsJXAotCQkJCQlicmVhazsJCQkJCQkJCQkJXAotCQkJCX0JCQkJCQkJCQkJCQlcCi0JCQl9CQkJCQkJCQkJCQkJCVwKLQkJCWlmIChfY2hJZHggPT0gQ0hfSFpfSURfTUFQX05VTSkJCQkJCVwKLQkJCQkoX2toeikgPSAyNDEyMDAwOwkJCQkJCQkJCVwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKF9jaCwgX2toeikJCVwKKwkJZG8gewkJCQkJCQlcCisJCQlpbnQgX2NoSWR4OwkJCQkJXAorCQkJZm9yIChfY2hJZHggPSAwOyBfY2hJZHggPCBDSF9IWl9JRF9NQVBfTlVNOyBfY2hJZHgrKykge1wKKwkJCQlpZiAoKF9jaCkgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uY2hhbm5lbCkgeyBcCisJCQkJCShfa2h6KSA9IENIX0haX0lEX01BUFtfY2hJZHhdLmZyZXFLSHogKiAxMDAwO1wKKwkJCQkJYnJlYWs7CQkJCVwKKwkJCQl9CQkJCQlcCisJCQl9CQkJCQkJXAorCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQlcCisJCQkJKF9raHopID0gMjQxMjAwMDsJCVwKKwkJfSB3aGlsZSAoMCkKIAogI2RlZmluZSAgICAgTUFQX0tIWl9UT19DSEFOTkVMX0lEKF9raHosIF9jaCkgICAgICAgICAgICAgICAgIFwKLQkJZG97CQkJCQkJCQkJCQkJCVwKLQkJCWludCBfY2hJZHg7CQkJCQkJCQkJCQlcCi0JCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKVwKLQkJCXsJCQkJCQkJCQkJCQkJXAotCQkJCWlmICgoX2toeikgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uZnJlcUtIeikJCQlcCi0JCQkJewkJCQkJCQkJCQkJCVwKLQkJCQkJKF9jaCkgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsOwkJCVwKLQkJCQkJYnJlYWs7CQkJCQkJCQkJCVwKLQkJCQl9CQkJCQkJCQkJCQkJXAotCQkJfQkJCQkJCQkJCQkJCQlcCi0JCQlpZiAoX2NoSWR4ID09IENIX0haX0lEX01BUF9OVU0pCQkJCQlcCi0JCQkJKF9jaCkgPSAxOwkJCQkJCQkJCQkJXAotCQl9d2hpbGUoMCkKKwkJZG8gewkJCQkJCQlcCisJCQlpbnQgX2NoSWR4OwkJCQlcCisJCQlmb3IgKF9jaElkeCA9IDA7IF9jaElkeCA8IENIX0haX0lEX01BUF9OVU07IF9jaElkeCsrKSB7XAorCQkJCWlmICgoX2toeikgPT0gQ0hfSFpfSURfTUFQW19jaElkeF0uZnJlcUtIeikge1wKKwkJCQkJKF9jaCkgPSBDSF9IWl9JRF9NQVBbX2NoSWR4XS5jaGFubmVsOyBcCisJCQkJCWJyZWFrOwkJCVwKKwkJCQl9CQkJCQlcCisJCQl9CQkJCQkJXAorCQkJaWYgKF9jaElkeCA9PSBDSF9IWl9JRF9NQVBfTlVNKQkJCVwKKwkJCQkoX2NoKSA9IDE7CQkJCVwKKwkJfSB3aGlsZSAoMCkKIAogdm9pZCBCdWlsZENoYW5uZWxMaXN0RXgoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCmluZGV4IGMxNmYzNzYuLjk0MTRhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKQEAgLTQyNyw3ICs0MjcsNyBAQAogLyoKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIERlc2NyaXB0aW9uOgotICAgICAgICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gaW5pdGlsaXplIDQtd2F5IGhhbmRzaGFrZQorICAgICAgICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSA0LXdheSBoYW5kc2hha2UKIAogICAgIFJldHVybjoKIApAQCAtODY3LDcgKzg2Nyw3IEBACiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBEZXNjcmlwdGlvbjoKICAgICAgICAgV2hlbiByZWNlaXZpbmcgdGhlIGxhc3QgcGFja2V0IG9mIDQtd2F5IHBhaXJ3aXNla2V5IGhhbmRzaGFrZS4KLSAgICAgICAgSW5pdGlsaXplIDItd2F5IGdyb3Vwa2V5IGhhbmRzaGFrZSBmb2xsb3dpbmcuCisgICAgICAgIEluaXRpYWxpemUgMi13YXkgZ3JvdXBrZXkgaGFuZHNoYWtlIGZvbGxvd2luZy4KICAgICBSZXR1cm46CiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX3RpbWVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX3RpbWVyLmMKaW5kZXggNDJlNDdkOS4uYWI1MjA5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF90aW1lci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfdGltZXIuYwpAQCAtMTQzLDggKzE0Myw4IEBACiAJc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqcFRhc2s7CiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwogCi0JcFRhc2sgPSAoc3RydWN0IHJ0X3J0bXBfb3NfdGFzayAqKUNvbnRleHQ7Ci0JcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilwVGFzay0+cHJpdjsKKwlwVGFzayA9IENvbnRleHQ7CisJcEFkID0gcFRhc2stPnByaXY7CiAKIAlSdG1wT1NUYXNrQ3VzdG9taXplKHBUYXNrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaAppbmRleCA5OWM5MzYyLi4wMTQxNGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL21sbWUuaApAQCAtMzEsNyArMzEsNyBAQAogCiAJUmV2aXNpb24gSGlzdG9yeToKIAlXaG8JCQlXaGVuCQkJV2hhdAotCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlKb2huIENoYW5nCTIwMDMtMDgtMjgJCUNyZWF0ZWQKIAlKb2huIENoYW5nICAyMDA0LTA5LTA2ICAgICAgbW9kaWZpZWQgZm9yIFJUMjYwMAogCkBAIC01MCw3ICs1MCw3IEBACiAjZGVmaW5lIE1MTUVfVEFTS19FWEVDX0lOVFYgICAgICAgICAxMDAvKjIwMCovCS8qICovCiAjZGVmaW5lIExFQURfVElNRSAgICAgICAgICAgICAgICAgICA1CiAjZGVmaW5lIE1MTUVfVEFTS19FWEVDX01VTFRJUExFICAgICAgIDEwICAvKjUqLwkvKiBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAqIE1MTUVfVEFTS19FWEVDX0lOVFYgPSAxIHNlYyAqLwotI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UViAgICAgICAgIAkxMDAJLyogMC4xIHNlYyAqLworI2RlZmluZSBSRU9SREVSX0VYRUNfSU5UVgkJMTAwCS8qIDAuMSBzZWMgKi8KIAogLyogVGhlIGRlZmluaXRpb24gb2YgUmFkYXIgZGV0ZWN0aW9uIGR1cmF0aW9uIHJlZ2lvbiAqLwogI2RlZmluZSBDRQkJMApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBKQVBfVzU2CTQKICNkZWZpbmUgTUFYX1JEX1JFR0lPTiA1CiAKLSNkZWZpbmUgQkVBQ09OX0xPU1RfVElNRSAgICAgICAgICAgIDQgKiBPU19IWgkvKiAyMDQ4IG1zZWMgPSAyIHNlYyAqLworI2RlZmluZSBCRUFDT05fTE9TVF9USU1FICAgICAgICAgICAgKDQgKiBPU19IWikJLyogMjA0OCBtc2VjID0gMiBzZWMgKi8KIAogI2RlZmluZSBETFNfVElNRU9VVCAgICAgICAgICAgICAgICAgMTIwMAkvKiB1bml0OiBtc2VjICovCiAjZGVmaW5lIEFVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAzMDAJLyogdW5pdDogbXNlYyAqLwpAQCAtMTE5LDggKzExOSw4IEBACiAjZGVmaW5lIE1BQ19BRERSX0lTX0dST1VQKEFkZHIpICAgICAgICgoKEFkZHJbMF0pICYgMHgwMSkpCiAjZGVmaW5lIE1BQ19BRERSX0hBU0goQWRkcikgICAgICAgICAgICAoQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQogI2RlZmluZSBNQUNfQUREUl9IQVNIX0lOREVYKEFkZHIpICAgICAgKE1BQ19BRERSX0hBU0goQWRkcikgJSBIQVNIX1RBQkxFX1NJWkUpCi0jZGVmaW5lIFRJRF9NQUNfSEFTSChBZGRyLFRJRCkgICAgICAgICAgICAoVElEXkFkZHJbMF0gXiBBZGRyWzFdIF4gQWRkclsyXSBeIEFkZHJbM10gXiBBZGRyWzRdIF4gQWRkcls1XSkKLSNkZWZpbmUgVElEX01BQ19IQVNIX0lOREVYKEFkZHIsVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkcixUSUQpICUgSEFTSF9UQUJMRV9TSVpFKQorI2RlZmluZSBUSURfTUFDX0hBU0goQWRkciwgVElEKSAgICAgICAgICAgIChUSUReQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQorI2RlZmluZSBUSURfTUFDX0hBU0hfSU5ERVgoQWRkciwgVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkciwgVElEKSAlIEhBU0hfVEFCTEVfU0laRSkKIAogLyogTEVEIENvbnRyb2wgKi8KIC8qIGFzc29pYXRpb24gT04uIG9uZSBMRUQgT04uIGFub3RoZXIgYmxpbmtpbmcgd2hlbiBUWCwgT0ZGIHdoZW4gaWRsZSAqLwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAjZGVmaW5lIENBUF9JU19EU1NTX09GRE0oeCkgICAgICAgICAgICAgICgoKHgpICYgMHgyMDAwKSAhPSAwKQogI2RlZmluZSBDQVBfSVNfREVMQVlfQkEoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4NDAwMCkgIT0gMCkJLyogODAyLjExZSBkOSAqLwogCi0jZGVmaW5lIENBUF9HRU5FUkFURShlc3MsaWJzcyxwcml2LHNfcHJlLHNfc2xvdCxzcGVjdHJ1bSkgICgoKGVzcykgPyAweDAwMDEgOiAweDAwMDApIHwgKChpYnNzKSA/IDB4MDAwMiA6IDB4MDAwMCkgfCAoKHByaXYpID8gMHgwMDEwIDogMHgwMDAwKSB8ICgoc19wcmUpID8gMHgwMDIwIDogMHgwMDAwKSB8ICgoc19zbG90KSA/IDB4MDQwMCA6IDB4MDAwMCkgfCAoKHNwZWN0cnVtKSA/IDB4MDEwMCA6IDB4MDAwMCkpCisjZGVmaW5lIENBUF9HRU5FUkFURShlc3MsIGlic3MsIHByaXYsIHNfcHJlLCBzX3Nsb3QsIHNwZWN0cnVtKSAgKCgoZXNzKSA/IDB4MDAwMSA6IDB4MDAwMCkgfCAoKGlic3MpID8gMHgwMDAyIDogMHgwMDAwKSB8ICgocHJpdikgPyAweDAwMTAgOiAweDAwMDApIHwgKChzX3ByZSkgPyAweDAwMjAgOiAweDAwMDApIHwgKChzX3Nsb3QpID8gMHgwNDAwIDogMHgwMDAwKSB8ICgoc3BlY3RydW0pID8gMHgwMTAwIDogMHgwMDAwKSkKIAogI2RlZmluZSBFUlBfSVNfTk9OX0VSUF9QUkVTRU5UKHgpICAgICAgICAoKCh4KSAmIDB4MDEpICE9IDApCS8qIDgwMi4xMWcgKi8KICNkZWZpbmUgRVJQX0lTX1VTRV9QUk9URUNUSU9OKHgpICAgICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKQkvKiA4MDIuMTFnICovCkBAIC0xNTQsOSArMTU0LDkgQEAKICNkZWZpbmUgRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQgICAgICAgOAkvKiAzICAvLyBqdXN0IHRlc3QgYnkgZ2FyeSAqLwogI2RlZmluZSBEUlNfUEVOQUxUWSAgICAgICAgICAgICAgICAgICAgICA4CiAKLSNkZWZpbmUgQkFfTk9UVVNFIAkyCisjZGVmaW5lIEJBX05PVFVTRQkyCiAvKkJBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSAqLwotI2RlZmluZSBJTU1FRF9CQSAJMQorI2RlZmluZSBJTU1FRF9CQQkxCiAjZGVmaW5lIERFTEFZX0JBCTAKIAogLyogQkEgSW5pdGlhdG9yIHN1YmZpZWxkIGluIERFTEJBIGZyYW1lICovCkBAIC0xNzYsOCArMTc2LDcgQEAKIAogLyogcmVzZXQgYWxsIE9uZVNlY1R4IGNvdW50ZXJzICovCiAjZGVmaW5lIFJFU0VUX09ORV9TRUNfVFhfQ05UKF9fcEVudHJ5KSBcCi1pZiAoKChfX3BFbnRyeSkpICE9IE5VTEwpIFwKLXsgXAoraWYgKCgoX19wRW50cnkpKSAhPSBOVUxMKSB7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeEZhaWxDb3VudCA9IDA7IFwKIAkoX19wRW50cnkpLT5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID0gMDsgXApAQCAtODQ2LDcgKzg0NSw3IEBACiAJc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSBFbnRyeVtNQVhfTEVOX09GX01MTUVfUVVFVUVdOwogfTsKIAotdHlwZWRlZiB2b2lkKCpTVEFURV9NQUNISU5FX0ZVTkMpICh2b2lkICogQWRhcHRvciwgc3RydWN0IHJ0X21sbWVfcXVldWVfZWxlbSAqRWxlbSk7Cit0eXBlZGVmIHZvaWQoKlNUQVRFX01BQ0hJTkVfRlVOQykgKHZvaWQgKkFkYXB0b3IsIHN0cnVjdCBydF9tbG1lX3F1ZXVlX2VsZW0gKkVsZW0pOwogCiBzdHJ1Y3QgcnRfc3RhdGVfbWFjaGluZSB7CiAJdW5zaWduZWQgbG9uZyBCYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IDAwMjliMmQuLjY1MzY5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwogCWludCByZXQgPSBORElTX1NUQVRVU19GQUlMVVJFOwogCi0JcEFkID0gKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKilwVGFzay0+cHJpdjsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogI2lmZGVmIEtUSFJFQURfU1VQUE9SVAogCWlmIChwVGFzay0+a3RocmVhZF90YXNrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IDgyYjZlNzguLjI4MjkzNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0yNTExLDcgKzI1MTEsNyBAQAogCQkgICB1OCBUSUQsCiAJCSAgIHU4IFR4UmF0ZSwKIAkJICAgdTggVHhvcG1vZGUsCi0JCSAgIElOIEJPT0xFQU4gQ2ZBY2ssIElOIEhUVFJBTlNNSVRfU0VUVElORyAqIHBUcmFuc21pdCk7CisJCSAgIElOIEJPT0xFQU4gQ2ZBY2ssIElOIEhUVFJBTlNNSVRfU0VUVElORyAqcFRyYW5zbWl0KTsKIAogdm9pZCBSVE1QV3JpdGVUeFdJX0RhdGEoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAogCQkJc3RydWN0IHJ0X3R4d2kgKnBUeFdJLCBzdHJ1Y3QgcnRfdHhfYmxrICpwVHhCbGspOwpAQCAtMzA1OSw3ICszMDU5LDcgQEAKIAkJCQkgICAgdTE2ICpwQmVhY29uUGVyaW9kLAogCQkJCSAgICB1OCAqcENoYW5uZWwsCiAJCQkJICAgIHU4ICpwTmV3Q2hhbm5lbCwKLQkJCQkgICAgT1VUIExBUkdFX0lOVEVHRVIgKiBwVGltZXN0YW1wLAorCQkJCSAgICBPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKIAkJCQkgICAgc3RydWN0IHJ0X2NmX3Bhcm0gKnBDZlBhcm0sCiAJCQkJICAgIHUxNiAqcEF0aW1XaW4sCiAJCQkJICAgIHUxNiAqcENhcGFiaWxpdHlJbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggNjc0NzY5ZC4uYTBmZTMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC02NCw2ICs2NCw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxNEIyLCAweDNDMDcpfSwJLyogQUwgKi8KIAl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODA1Myl9LAkvKiBCZWxraW4gKi8KIAl7VVNCX0RFVklDRSgweDA1MEQsIDB4ODI1Qil9LAkvKiBCZWxraW4gKi8KKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTM1Qil9LAkvKiBCZWxraW4gRjZENDA1MCB2MiAqLwogCXtVU0JfREVWSUNFKDB4MTRCMiwgMHgzQzIzKX0sCS8qIEFpcmxpbmsgKi8KIAl7VVNCX0RFVklDRSgweDE0QjIsIDB4M0MyNyl9LAkvKiBBaXJsaW5rICovCiAJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwMkYpfSwJLyogQ29yZWdhICovCkBAIC00MjIsOCArNDIzLDggQEAKIAlpbnQgc3RhdHVzOwogCXN0YXR1cyA9IDA7CiAKLQlwVGFzayA9IChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICopQ29udGV4dDsKLQlwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKXBUYXNrLT5wcml2OworCXBUYXNrID0gQ29udGV4dDsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogCVJ0bXBPU1Rhc2tDdXN0b21pemUocFRhc2spOwogCkBAIC00OTEsOCArNDkyLDggQEAKIAlpbnQgc3RhdHVzOwogCXN0YXR1cyA9IDA7CiAKLQlwVGFzayA9IChzdHJ1Y3QgcnRfcnRtcF9vc190YXNrICopQ29udGV4dDsKLQlwQWQgPSAoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqKXBUYXNrLT5wcml2OworCXBUYXNrID0gQ29udGV4dDsKKwlwQWQgPSBwVGFzay0+cHJpdjsKIAogCVJ0bXBPU1Rhc2tDdXN0b21pemUocFRhc2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmYjYzNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSYWxpbmsgVGVjaCBJbmMuCi0gKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCi0gKiBIc2luY2h1IENvdW50eSAzMDIsCi0gKiBUYWl3YW4sIFIuTy5DLgotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCi0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotI2lmbmRlZiBfX01ENF9IX18KLSNkZWZpbmUgX19NRDRfSF9fCi0KLS8qIE1ENCBjb250ZXh0LiAqLwotdHlwZWRlZglzdHJ1Y3QJX01ENF9DVFhfCXsKLQl1bnNpZ25lZCBsb25nCXN0YXRlWzRdOyAgICAgICAgLyogc3RhdGUgKEFCQ0QpICovCi0JdW5zaWduZWQgbG9uZwljb3VudFsyXTsgICAgICAgIC8qIG51bWJlciBvZiBiaXRzLCBtb2R1bG8gMl42NCAobHNiIGZpcnN0KSAqLwotCXU4CWJ1ZmZlcls2NF07ICAgICAgLyogaW5wdXQgYnVmZmVyICovCi19CU1ENF9DVFg7Ci0KLXZvaWQgTUQ0SW5pdChNRDRfQ1RYICopOwotdm9pZCBNRDRVcGRhdGUoTUQ0X0NUWCAqLCB1OCAqLCBVSU5UKTsKLXZvaWQgTUQ0RmluYWwodTggWzE2XSwgTUQ0X0NUWCAqKTsKLQotI2VuZGlmIC8qX19NRDRfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwppbmRleCAxNTVhNzhlLi4xYjMxMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCkBAIC00LDYgKzQsNyBAQAogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IEVFUFJPTV85M0NYNgorCXNlbGVjdCBDUllQVE8KIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCiAJICBJZiBidWlsdCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgcjgxODdzZS5rby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKaW5kZXggMmFlMzc0NS4uMmU2NGIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKQEAgLTMsNSArMyw2IEBACiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCisJc2VsZWN0IENSWVBUTwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvZG90MTFkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2RvdDExZC5jCmluZGV4IDkwOGY2MDUuLjZiYmYwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvZG90MTFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9kb3QxMWQuYwpAQCAtMjE4LDIyICsyMTgsNCBAQAogCiAJcmV0dXJuIGRlZmF1bHRfY2huOwogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woRG90MTFkX0luaXQpOwotLy9FWFBPUlRfU1lNQk9MKERvdDExZF9SZXNldCk7Ci0vL0VYUE9SVF9TWU1CT0woRG90MTFkX1VwZGF0ZUNvdW50cnlJZSk7Ci0vL0VYUE9SVF9TWU1CT0woRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOwotLy9FWFBPUlRfU1lNQk9MKERPVDExRF9TY2FuQ29tcGxldGUpOwotLy9FWFBPUlRfU1lNQk9MKElzTGVnYWxDaGFubmVsKTsKLS8vRVhQT1JUX1NZTUJPTChUb0xlZ2FsQ2hhbm5lbCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRG90MTFkX0luaXQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRG90MTFkX1Jlc2V0KTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKERvdDExZF9VcGRhdGVDb3VudHJ5SWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRE9UMTFEX0dldE1heFR4UHdySW5EYm0pOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoRE9UMTFEX1NjYW5Db21wbGV0ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhJc0xlZ2FsQ2hhbm5lbCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhUb0xlZ2FsQ2hhbm5lbCk7Ci0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCA1MDcyOGY2Li5kZGE2NzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTI3LDEyICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ICAgLyogQVJSQVlfU0laRSAqLwogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvamZmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgpAQCAtNDQsMTIgKzM5LDYgQEAKICNpbmNsdWRlICJydGw4MTl4X0JBLmgiCiAjaW5jbHVkZSAicnRsODE5eF9UUy5oIgogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCi0jaWZuZGVmIGJvb2wKLXR5cGVkZWYgZW51bXtmYWxzZSA9IDAsIHRydWV9IGJvb2w7Ci0jZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIElXX01PREVfTU9OSVRPUgogI2RlZmluZSBJV19NT0RFX01PTklUT1IgNgogI2VuZGlmCkBAIC00MjgsNDYgKzQxNyw5IEBACiAjZGVmaW5lIElXX1FVQUxfTk9JU0VfVVBEQVRFRCAgMHg0CiAjZW5kaWYKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi1zdGF0aWMgaW5saW5lIHZvaWQgdHFfaW5pdChzdHJ1Y3QgdHFfc3RydWN0ICogdGFzaywgdm9pZCgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKLXsKLQl0YXNrLT5yb3V0aW5lID0gZnVuYzsKLQl0YXNrLT5kYXRhIAk9IGRhdGE7Ci0JLy90YXNrLT5uZXh0ID0gTlVMTDsKLQlJTklUX0xJU1RfSEVBRCgmdGFzay0+bGlzdCk7Ci0JdGFzay0+c3luYyA9IDA7Ci19Ci0jZW5kaWYKLQogLy8gbGludXggdW5kZXIgMi42LjkgcmVsZWFzZSBtYXkgbm90IHN1cHBvcnQgaXQsIHNvIG1vZGlmeSBpdCBmb3IgY29tbW9uIHVzZQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsOSkpCi0vLyNkZWZpbmUgTVNFQ1ModCkJKDEwMDAgKiAoKHQpIC8gSFopICsgMTAwMCAqICgodCkgJSBIWikgLyBIWikKLSNkZWZpbmUgTVNFQ1ModCkJKEhaICogKCh0KSAvIDEwMDApICsgKEhaICogKCh0KSAlIDEwMDApKSAvIDEwMDApCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbXNsZWVwX2ludGVycnVwdGlibGVfcnNsKHVuc2lnbmVkIGludCBtc2VjcykKLXsKLSAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1TRUNTKG1zZWNzKSArIDE7Ci0KLSAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0gICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotICAgICAgICAgfQotICAgICAgICAgcmV0dXJuIHRpbWVvdXQ7Ci19Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwzMSkpCi1zdGF0aWMgaW5saW5lIHZvaWQgbXNsZWVwKHVuc2lnbmVkIGludCBtc2VjcykKLXsKLSAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IE1TRUNTKG1zZWNzKSArIDE7Ci0KLSAgICAgICAgIHdoaWxlICh0aW1lb3V0KSB7Ci0gICAgICAgICAgICAgICAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLSAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Ci0gICAgICAgICB9Ci19Ci0jZW5kaWYKLSNlbHNlCiAjZGVmaW5lIE1TRUNTKHQpIG1zZWNzX3RvX2ppZmZpZXModCkKICNkZWZpbmUgbXNsZWVwX2ludGVycnVwdGlibGVfcnNsICBtc2xlZXBfaW50ZXJydXB0aWJsZQotI2VuZGlmCiAKICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOCQkyMzA0CiAvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCkBAIC0xNzQ3LDIxICsxNjk5LDYgQEAKICNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTIChJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgLSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMICsgMSkKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDExKSkKLWV4dGVybiBpbmxpbmUgaW50IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbnN0IHU4ICphZGRyKQotewotICAgICAgICByZXR1cm4gKChhZGRyWzBdICE9IDB4ZmYpICYmICgweDAxICYgYWRkclswXSkpOwotfQotI2VuZGlmCi0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDw9IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCi1leHRlcm4gaW5saW5lIGludCBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihjb25zdCB1OCAqYWRkcikKLXsKLQlyZXR1cm4gKChhZGRyWzBdID09IDB4ZmYpICYmIChhZGRyWzFdID09IDB4ZmYpICYmIChhZGRyWzJdID09IDB4ZmYpICYmICAgXAotCQkoYWRkclszXSA9PSAweGZmKSAmJiAoYWRkcls0XSA9PSAweGZmKSAmJiAoYWRkcls1XSA9PSAweGZmKSk7Ci19Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgdHhfcGVuZGluZ190ewogCWludCBmcmFnOwogCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGI7CkBAIC0xODM4LDExICsxNzc1LDcgQEAKIAlib29sCQkJCWJJUFNNb2RlQmFja3VwOwogCWJvb2wJCQkJYlN3UmZQcm9jZXNzaW5nOwogCVJUX1JGX1BPV0VSX1NUQVRFCWVJbmFjdGl2ZVBvd2VyU3RhdGU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJc3RydWN0IHdvcmtfc3RydWN0IAlJbmFjdGl2ZVBzV29ya0l0ZW07Ci0jZWxzZQotCXN0cnVjdCB0cV9zdHJ1Y3QJSW5hY3RpdmVQc1dvcmtJdGVtOwotI2VuZGlmCiAJc3RydWN0IHRpbWVyX2xpc3QJSW5hY3RpdmVQc1RpbWVyOwogCiAJLy8gUmV0dXJuIHBvaW50IGZvciBqb2luIGFjdGlvbgpAQCAtMjMyOSwzNiArMjI2MiwxNiBAQAogCiAJLyogdXNlZCBpZiBJRUVFX1NPRlRNQUNfQkVBQ09OUyBpcyBzZXQgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBiZWFjb25fdGltZXI7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBhc3NvY2lhdGVfY29tcGxldGVfd3E7CiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBhc3NvY2lhdGVfcHJvY2VkdXJlX3dxOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgc29mdG1hY19zY2FuX3dxOwogICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrIGFzc29jaWF0ZV9yZXRyeV93cTsKIAkgc3RydWN0IGRlbGF5ZWRfd29yayBzdGFydF9pYnNzX3dxOwogCSBzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3dha2V1cF93cTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGh3X3NsZWVwX3dxOwotI2Vsc2UKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHNvZnRtYWNfc2Nhbl93cTsKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IGFzc29jaWF0ZV9yZXRyeV93cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhcnRfaWJzc193cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaHdfd2FrZXVwX3dxOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBod19zbGVlcF93cTsKLSNlbmRpZgorCiAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCB3eF9zeW5jX3NjYW5fd3E7CiAgICAgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLSNlbHNlCi0JLyogdXNlZCBmb3IgcGVyaW9kbHkgc2NhbiAqLwotCXN0cnVjdCB0aW1lcl9saXN0IHNjYW5fdGltZXI7Ci0KLQlzdHJ1Y3QgdHFfc3RydWN0IGFzc29jaWF0ZV9jb21wbGV0ZV93cTsKLQlzdHJ1Y3QgdHFfc3RydWN0IGFzc29jaWF0ZV9yZXRyeV93cTsKLQlzdHJ1Y3QgdHFfc3RydWN0IHN0YXJ0X2lic3Nfd3E7Ci0Jc3RydWN0IHRxX3N0cnVjdCBhc3NvY2lhdGVfcHJvY2VkdXJlX3dxOwotCXN0cnVjdCB0cV9zdHJ1Y3Qgc29mdG1hY19zY2FuX3dxOwotCXN0cnVjdCB0cV9zdHJ1Y3Qgd3hfc3luY19zY2FuX3dxOwotCi0jZW5kaWYKICAgICAgICAgLy8gUW9zIHJlbGF0ZWQuIEFkZGVkIGJ5IEFubmllLCAyMDA1LTExLTAxLgogICAgICAgICAvL1NUQV9RT1MgIFN0YVFvczsKIApAQCAtMjU1NywxMSArMjQ3MCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqaWVlZTgwMjExX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKW5ldGRldl9wcml2KGRldikpLT5wcml2OwotI2Vsc2UKLQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKWRldi0+cHJpdiktPnByaXY7Ci0jZW5kaWYKIH0KIAogZXh0ZXJuIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2VtcHR5X2Vzc2lkKGNvbnN0IGNoYXIgKmVzc2lkLCBpbnQgZXNzaWRfbGVuKQpAQCAtMjgxNCwxMSArMjcyMyw3IEBACiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwogCiAvL2V4dGVybiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIGV4dGVybiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLSNlbHNlCi0gZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0jZW5kaWYKIAogCiBleHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfcmF3dHgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwppbmRleCBkNWFhOWFmLi5hZTUwMzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTI0MywyMyArMjQzLDMgQEAKIAlrZnJlZShoY3J5cHQpOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXMpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jcnlwdF9kZWluaXRfaGFuZGxlcik7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KTsKLQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9jcnlwdG9fb3BzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9jcnlwdF9kZWluaXRfZW50cmllcyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfY3J5cHRfZGVpbml0X2hhbmRsZXIpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KTsKLQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMpOwotI2VuZGlmCi0KLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX2NyeXB0b19pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b19kZWluaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmgKaW5kZXggYTg0ZGY0Yi4uY2E3ZGQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5oCkBAIC04MiwxMiArODIsNCBAQAogdm9pZCBpZWVlODAyMTFfY3J5cHRfZGVpbml0X2hhbmRsZXIodW5zaWduZWQgbG9uZyk7CiB2b2lkIGllZWU4MDIxMV9jcnlwdF9kZWxheWVkX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQpOwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jZGVmaW5lIG9mZnNldF9pbl9wYWdlKHApICgodW5zaWduZWQgbG9uZykocCkgJiB+UEFHRV9NQVNLKQotI2VuZGlmCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNCwzMSkpCi0jZGVmaW5lIGNyeXB0b19hbGxvY190Zm0gY3J5cHRvX2FsbG9jX3RmbV9yc2wKLSNkZWZpbmUgY3J5cHRvX2ZyZWVfdGZtIGNyeXB0b19mcmVlX3RmbV9yc2wKLSNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCA3MTY1YzRjLi5hNGUyMWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yNCwxOCArMjQsOSBAQAogCiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotI2luY2x1ZGUgInJ0bF9jcnlwdG8uaCIKLSNlbHNlCiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLSAgICAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jZWxzZQogICAgICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2VuZGlmCi0vLyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KIAogTU9EVUxFX0FVVEhPUigiSm91bmkgTWFsaW5lbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIb3N0IEFQIGNyeXB0OiBDQ01QIik7CkBAIC03NSwyMSArNjYsNyBAQAogdm9pZCBpZWVlODAyMTFfY2NtcF9hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCQkJICAgICBjb25zdCB1OCBwdFsxNl0sIHU4IGN0WzE2XSkKIHsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc3JjLCBkc3Q7Ci0KLQlzcmMucGFnZSA9IHZpcnRfdG9fcGFnZShwdCk7Ci0Jc3JjLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0KTsKLQlzcmMubGVuZ3RoID0gQUVTX0JMT0NLX0xFTjsKLQotCWRzdC5wYWdlID0gdmlydF90b19wYWdlKGN0KTsKLQlkc3Qub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY3QpOwotCWRzdC5sZW5ndGggPSBBRVNfQkxPQ0tfTEVOOwotCi0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgJmRzdCwgJnNyYywgQUVTX0JMT0NLX0xFTik7Ci0jZWxzZQogCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoKHZvaWQqKXRmbSwgY3QsIHB0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCAqIGllZWU4MDIxMV9jY21wX2luaXQoaW50IGtleV9pZHgpCkBAIC0xMDEsMTQgKzc4LDYgQEAKIAkJZ290byBmYWlsOwogCXByaXYtPmtleV9pZHggPSBrZXlfaWR4OwogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JcHJpdi0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbSgiYWVzIiwgMCk7Ci0JaWYgKHByaXYtPnRmbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfY2NtcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJICAgICAgICJjcnlwdG8gQVBJIGFlc1xuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0gICAgICAgI2Vsc2UKICAgICAgICBwcml2LT50Zm0gPSAodm9pZCopY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKElTX0VSUihwcml2LT50Zm0pKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfY2NtcDogY291bGQgbm90IGFsbG9jYXRlICIKQEAgLTExNiwxNyArODUsMTIgQEAKIAkJcHJpdi0+dGZtID0gTlVMTDsKIAkJZ290byBmYWlsOwogCX0KLQkjZW5kaWYKIAlyZXR1cm4gcHJpdjsKIAogZmFpbDoKIAlpZiAocHJpdikgewogCQlpZiAocHJpdi0+dGZtKQotCQkJI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpCi0JCQljcnlwdG9fZnJlZV90Zm0ocHJpdi0+dGZtKTsKLSAgICAgICAgICAgICAgICAgICAgI2Vsc2UKIAkJCWNyeXB0b19mcmVlX2NpcGhlcigodm9pZCopcHJpdi0+dGZtKTsKLQkJICAgICAgI2VuZGlmCiAJCWtmcmVlKHByaXYpOwogCX0KIApAQCAtMTM4LDExICsxMDIsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfY2NtcF9kYXRhICpfcHJpdiA9IHByaXY7CiAJaWYgKF9wcml2ICYmIF9wcml2LT50Zm0pCi0jaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkKLQkJY3J5cHRvX2ZyZWVfdGZtKF9wcml2LT50Zm0pOwotI2Vsc2UKIAkJY3J5cHRvX2ZyZWVfY2lwaGVyKCh2b2lkKilfcHJpdi0+dGZtKTsKLSNlbmRpZgogCWtmcmVlKHByaXYpOwogfQogCkBAIC01MjgsMTEgKzQ4OCwzIEBACiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X2NjbXApOwogfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2NtcF9udWxsKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfY2NtcF9udWxsKTsKLSNlbmRpZgotCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fY2NtcF9pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDY1ZjQ4ODkuLjE0Y2E2MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTI0LDE3ICsyNCw4IEBACiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgotLy8jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotICAgICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLSNlbHNlCi0gICAgICAgICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKQEAgLTY4LDE3ICs1OSwxMCBAQAogCXUzMiBkb3QxMVJTTkFTdGF0c1RLSVBMb2NhbE1JQ0ZhaWx1cmVzOwogCiAJaW50IGtleV9pZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSB8fCAoT1BFTlNVU0VfU0xFRCkpCiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnJ4X3RmbV9hcmM0OwogCXN0cnVjdCBjcnlwdG9faGFzaCAqcnhfdGZtX21pY2hhZWw7CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnR4X3RmbV9hcmM0OwogCXN0cnVjdCBjcnlwdG9faGFzaCAqdHhfdGZtX21pY2hhZWw7Ci0jZWxzZQotCXN0cnVjdCBjcnlwdG9fdGZtICp0eF90Zm1fYXJjNDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdHhfdGZtX21pY2hhZWw7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnJ4X3RmbV9hcmM0OwotCXN0cnVjdCBjcnlwdG9fdGZtICpyeF90Zm1fbWljaGFlbDsKLSNlbmRpZgogCS8qIHNjcmF0Y2ggYnVmZmVycyBmb3IgdmlydF90b19wYWdlKCkgKGNyeXB0byBBUEkpICovCiAJdTggcnhfaGRyWzE2XSwgdHhfaGRyWzE2XTsKIH07CkBAIC05MSwzNSArNzUsNiBAQAogCWlmIChwcml2ID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlwcml2LT5rZXlfaWR4ID0ga2V5X2lkeDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlwcml2LT50eF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY190Zm0oImFyYzQiLCAwKTsKLQlpZiAocHJpdi0+dHhfdGZtX2FyYzQgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJImNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlwcml2LT50eF90Zm1fbWljaGFlbCA9IGNyeXB0b19hbGxvY190Zm0oIm1pY2hhZWxfbWljIiwgMCk7Ci0JaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdF90a2lwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkJCSJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXByaXYtPnJ4X3RmbV9hcmM0ID0gY3J5cHRvX2FsbG9jX3RmbSgiYXJjNCIsIDApOwotCWlmIChwcml2LT5yeF90Zm1fYXJjNCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKLQkJCQkiY3J5cHRvIEFQSSBhcmM0XG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXByaXYtPnJ4X3RmbV9taWNoYWVsID0gY3J5cHRvX2FsbG9jX3RmbSgibWljaGFlbF9taWMiLCAwKTsKLQlpZiAocHJpdi0+cnhfdGZtX21pY2hhZWwgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCQkJImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotI2Vsc2UKIAlwcml2LT50eF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsCiAJCQlDUllQVE9fQUxHX0FTWU5DKTsKIAlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9hcmM0KSkgewpAQCAtMTU1LDIyICsxMTAsMTAgQEAKIAkJcHJpdi0+cnhfdGZtX21pY2hhZWwgPSBOVUxMOwogCQlnb3RvIGZhaWw7CiAJfQotI2VuZGlmCiAJcmV0dXJuIHByaXY7CiAKIGZhaWw6CiAJaWYgKHByaXYpIHsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQkJaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnR4X3RmbV9taWNoYWVsKTsKLQkJaWYgKHByaXYtPnR4X3RmbV9hcmM0KQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnR4X3RmbV9hcmM0KTsKLQkJaWYgKHByaXYtPnJ4X3RmbV9taWNoYWVsKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnJ4X3RmbV9taWNoYWVsKTsKLQkJaWYgKHByaXYtPnJ4X3RmbV9hcmM0KQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnJ4X3RmbV9hcmM0KTsKLQotI2Vsc2UKIAkJaWYgKHByaXYtPnR4X3RmbV9taWNoYWVsKQogCQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT50eF90Zm1fbWljaGFlbCk7CiAJCWlmIChwcml2LT50eF90Zm1fYXJjNCkKQEAgLTE3OSw3ICsxMjIsNiBAQAogCQkJY3J5cHRvX2ZyZWVfaGFzaChwcml2LT5yeF90Zm1fbWljaGFlbCk7CiAJCWlmIChwcml2LT5yeF90Zm1fYXJjNCkKIAkJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihwcml2LT5yeF90Zm1fYXJjNCk7Ci0jZW5kaWYKIAkJa2ZyZWUocHJpdik7CiAJfQogCkBAIC0xOTAsMTYgKzEzMiw2IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdGtpcF9kZWluaXQodm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3RraXBfZGF0YSAqX3ByaXYgPSBwcml2OwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChfcHJpdi0+dHhfdGZtX21pY2hhZWwpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+dHhfdGZtX21pY2hhZWwpOwotCWlmIChfcHJpdi0+dHhfdGZtX2FyYzQpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+dHhfdGZtX2FyYzQpOwotCWlmIChfcHJpdi0+cnhfdGZtX21pY2hhZWwpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+cnhfdGZtX21pY2hhZWwpOwotCWlmIChfcHJpdi0+cnhfdGZtX2FyYzQpCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+cnhfdGZtX2FyYzQpOwotI2Vsc2UKIAlpZiAoX3ByaXYpIHsKIAkJaWYgKF9wcml2LT50eF90Zm1fbWljaGFlbCkKIAkJCWNyeXB0b19mcmVlX2hhc2goX3ByaXYtPnR4X3RmbV9taWNoYWVsKTsKQEAgLTIxMCw3ICsxNDIsNiBAQAogCQlpZiAoX3ByaXYtPnJ4X3RmbV9hcmM0KQogCQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKF9wcml2LT5yeF90Zm1fYXJjNCk7CiAJfQotI2VuZGlmCiAJa2ZyZWUocHJpdik7CiB9CiAKQEAgLTM4MSwxMCArMzEyLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCWNiX2Rlc2MgKnRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKIAotCSNpZigoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpIHx8IChPUEVOU1VTRV9TTEVEKSkKIAlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsudGZtID0gdGtleS0+dHhfdGZtX2FyYzR9OwogCWludCByZXQgPSAwOwotCSNlbmRpZgogCXU4IHJjNGtleVsxNl0sICAqaWN2OwogCXUzMiBjcmM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwpAQCAtNDQ3LDMyICszNzYsMTQgQEAKIAlpZiAoIXRjYl9kZXNjLT5iSHdTZWMpCiAJewogCQlpY3YgPSBza2JfcHV0KHNrYiwgNCk7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAkJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIGxlbik7Ci0jZWxzZQotCQljcmMgPSB+ZXRoZXJfY3JjX2xlKGxlbiwgcG9zKTsKLSNlbmRpZgogCQlpY3ZbMF0gPSBjcmM7CiAJCWljdlsxXSA9IGNyYyA+PiA4OwogCQlpY3ZbMl0gPSBjcmMgPj4gMTY7CiAJCWljdlszXSA9IGNyYyA+PiAyNDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQkJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGtleS0+dHhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh0a2V5LT50eF90Zm1fYXJjNCwgJnNnLCAmc2csIGxlbiArIDQpOwotI2Vsc2UKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGtleS0+dHhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gbGVuICsgNDsKLSNlbHNlCiAJCXNnX2luaXRfb25lKCZzZywgcG9zLCBsZW4rNCk7Ci0jZW5kaWYKIAkJcmV0PSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZywgJnNnLCBsZW4gKyA0KTsKLSNlbmRpZgogCiAJfQogCkBAIC00ODMsMTEgKzM5NCw3IEBACiAJfQogCiAJaWYgKCF0Y2JfZGVzYy0+Ykh3U2VjKQotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCQlyZXR1cm4gMDsKLQkjZWxzZQogCQlyZXR1cm4gcmV0OwotCSNlbmRpZgogCWVsc2UKICAgICAgICAgCXJldHVybiAwOwogCkBAIC01MDIsOSArNDA5LDcgQEAKIAl1MTYgaXYxNjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCWNiX2Rlc2MgKnRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKLQkjaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSB8fCAoT1BFTlNVU0VfU0xFRCkpCiAJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7LnRmbSA9IHRrZXktPnJ4X3RmbV9hcmM0fTsKLQkjZW5kaWYKIAl1OCByYzRrZXlbMTZdOwogCXU4IGljdls0XTsKIAl1MzIgY3JjOwpAQCAtNTYzLDIxICs0NjgsOCBAQAogCiAJCXBsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW4gLSAxMjsKIAotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCQljcnlwdG9fY2lwaGVyX3NldGtleSh0a2V5LT5yeF90Zm1fYXJjNCwgcmM0a2V5LCAxNik7Ci0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gcGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZGVjcnlwdCh0a2V5LT5yeF90Zm1fYXJjNCwgJnNnLCAmc2csIHBsZW4gKyA0KTsKLSNlbHNlCiAJCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRrZXktPnJ4X3RmbV9hcmM0LCByYzRrZXksIDE2KTsKLSNpZihMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpKQotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IHBsZW4gKyA0OwotI2Vsc2UKIAkJc2dfaW5pdF9vbmUoJnNnLCBwb3MsIHBsZW4rNCk7Ci0jZW5kaWYKIAkJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICI6IFRLSVA6IGZhaWxlZCB0byBkZWNyeXB0ICIKQEAgLTU4NiwxMyArNDc4LDggQEAKIAkJCX0KIAkJCXJldHVybiAtNzsKIAkJfQotI2VuZGlmCiAKLQkjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAkJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIHBsZW4pOwotCSNlbHNlCi0JCWNyYyA9IH5ldGhlcl9jcmNfbGUocGxlbiwgcG9zKTsKLQkjZW5kaWYKIAkJaWN2WzBdID0gY3JjOwogCQlpY3ZbMV0gPSBjcmMgPj4gODsKIAkJaWN2WzJdID0gY3JjID4+IDE2OwpAQCAtNjQxLDQ3ICs1MjgsNiBAQAogfQogCiAKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLXN0YXRpYyBpbnQgbWljaGFlbF9taWMoc3RydWN0IGNyeXB0b190Zm0gKiB0Zm1fbWljaGFlbCwgdTggKmtleSwgdTggKmhkciwKLQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0gICAgICAgIHN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLSAgICAgICAgaW50IHJldCA9IDA7Ci0jZW5kaWYKLQotCWlmICh0Zm1fbWljaGFlbCA9PSBOVUxMKXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljaGFlbF9taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXNnWzBdLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaGRyKTsKLQlzZ1swXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShoZHIpOwotCXNnWzBdLmxlbmd0aCA9IDE2OwotCi0Jc2dbMV0ucGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhKTsKLQlzZ1sxXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhKTsKLQlzZ1sxXS5sZW5ndGggPSBkYXRhX2xlbjsKLQotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm1fbWljaGFlbCk7Ci0gICAgICAgIGNyeXB0b19kaWdlc3Rfc2V0a2V5KHRmbV9taWNoYWVsLCBrZXksIDgpOwotICAgICAgICBjcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm1fbWljaGFlbCwgc2csIDIpOwotICAgICAgICBjcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbV9taWNoYWVsLCBtaWMpOwotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi1pZiAoY3J5cHRvX2hhc2hfc2V0a2V5KHRrZXktPnRmbV9taWNoYWVsLCBrZXksIDgpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotLy8gICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgZGVzYy50Zm0gPSB0a2V5LT50Zm1fbWljaGFlbDsKLSAgICAgICAgICAgICAgZGVzYy5mbGFncyA9IDA7Ci0gICAgICAgICAgICAgIHJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgMTYsIG1pYyk7Ci0gICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0jZW5kaWYKLX0KLSNlbHNlCiBzdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICoga2V5LCB1OCAqIGhkciwKICAgICAgICAgICAgICAgICAgICAgICAgdTggKiBkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICogbWljKQogewpAQCAtNjkyLDE5ICs1MzgsOSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm1pY2hhZWxfbWljOiB0Zm1fbWljaGFlbCA9PSBOVUxMXG4iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpCi0gICAgICAgIHNnWzBdLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaGRyKTsKLSAgICAgICAgc2dbMF0ub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoaGRyKTsKLSAgICAgICAgc2dbMF0ubGVuZ3RoID0gMTY7Ci0KLSAgICAgICAgc2dbMV0ucGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhKTsKLSAgICAgICAgc2dbMV0ub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YSk7Ci0gICAgICAgIHNnWzFdLmxlbmd0aCA9IGRhdGFfbGVuOwotI2Vsc2UKICAgICAgICAgc2dfaW5pdF90YWJsZShzZywgMik7CiAgICAgICAgIHNnX3NldF9idWYoJnNnWzBdLCBoZHIsIDE2KTsKICAgICAgICAgc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKLSNlbmRpZgogCiAgICAgICAgIGlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgOCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNzEzLDcgKzU0OSw2IEBACiAgICAgICAgIGRlc2MuZmxhZ3MgPSAwOwogICAgICAgICByZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyAxNiwgbWljKTsKIH0KLSNlbmRpZgogCiAKIApAQCAtNzcyLDEzICs2MDcsOCBAQAogCX0KIAkvLyB9CiAJcG9zID0gc2tiX3B1dChza2IsIDgpOwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQogCWlmIChtaWNoYWVsX21pYyh0a2V5LT50eF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsxNl0sIHRrZXktPnR4X2hkciwKIAkJCQlza2ItPmRhdGEgKyBoZHJfbGVuLCBza2ItPmxlbiAtIDggLSBoZHJfbGVuLCBwb3MpKQotI2Vsc2UKLQlpZiAobWljaGFlbF9taWModGtleS0+dHhfdGZtX21pY2hhZWwsICZ0a2V5LT5rZXlbMTZdLCB0a2V5LT50eF9oZHIsCi0JCQkJc2tiLT5kYXRhICsgaGRyX2xlbiwgc2tiLT5sZW4gLSA4IC0gaGRyX2xlbiwgcG9zKSkKLSNlbmRpZgogCQlyZXR1cm4gLTE7CiAKIAlyZXR1cm4gMDsKQEAgLTg1MCwxMyArNjgwLDggQEAKIAl9CiAJLy8gfQogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCiAJaWYgKG1pY2hhZWxfbWljKHRrZXktPnJ4X3RmbV9taWNoYWVsLCAmdGtleS0+a2V5WzI0XSwgdGtleS0+cnhfaGRyLAogCQkJCXNrYi0+ZGF0YSArIGhkcl9sZW4sIHNrYi0+bGVuIC0gOCAtIGhkcl9sZW4sIG1pYykpCi0jZWxzZQotCWlmIChtaWNoYWVsX21pYyh0a2V5LT5yeF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsyNF0sIHRrZXktPnJ4X2hkciwKLQkJCQlza2ItPmRhdGEgKyBoZHJfbGVuLCBza2ItPmxlbiAtIDggLSBoZHJfbGVuLCBtaWMpKQotI2VuZGlmCiAgICAgICAgICAgICAJcmV0dXJuIC0xOwogCWlmIChtZW1jbXAobWljLCBza2ItPmRhdGEgKyBza2ItPmxlbiAtIDgsIDgpICE9IDApIHsKIAkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKQEAgLTg4NiwzMiArNzExLDE4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OwogCWludCBrZXlpZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IHRrZXktPnR4X3RmbV9taWNoYWVsOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0yID0gdGtleS0+dHhfdGZtX2FyYzQ7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTMgPSB0a2V5LT5yeF90Zm1fbWljaGFlbDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtNCA9IHRrZXktPnJ4X3RmbV9hcmM0OwotI2Vsc2UKIAlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSA9IHRrZXktPnR4X3RmbV9taWNoYWVsOwogCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0yID0gdGtleS0+dHhfdGZtX2FyYzQ7CiAJc3RydWN0IGNyeXB0b19oYXNoICp0Zm0zID0gdGtleS0+cnhfdGZtX21pY2hhZWw7CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTQgPSB0a2V5LT5yeF90Zm1fYXJjNDsKLSNlbmRpZgogCiAJa2V5aWR4ID0gdGtleS0+a2V5X2lkeDsKIAltZW1zZXQodGtleSwgMCwgc2l6ZW9mKCp0a2V5KSk7CiAJdGtleS0+a2V5X2lkeCA9IGtleWlkeDsKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKIAl0a2V5LT50eF90Zm1fbWljaGFlbCA9IHRmbTsKIAl0a2V5LT50eF90Zm1fYXJjNCA9IHRmbTI7CiAJdGtleS0+cnhfdGZtX21pY2hhZWwgPSB0Zm0zOwogCXRrZXktPnJ4X3RmbV9hcmM0ID0gdGZtNDsKLSNlbHNlCi0JdGtleS0+dHhfdGZtX21pY2hhZWwgPSB0Zm07Ci0JdGtleS0+dHhfdGZtX2FyYzQgPSB0Zm0yOwotCXRrZXktPnJ4X3RmbV9taWNoYWVsID0gdGZtMzsKLQl0a2V5LT5yeF90Zm1fYXJjNCA9IHRmbTQ7Ci0jZW5kaWYKIAogCWlmIChsZW4gPT0gVEtJUF9LRVlfTEVOKSB7CiAJCW1lbWNweSh0a2V5LT5rZXksIGtleSwgVEtJUF9LRVlfTEVOKTsKQEAgLTEwMjEsMTEgKzgzMiw0IEBACiAvLyAgICBwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICByZXR1cm47CiB9Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdGtpcF9udWxsKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfdGtpcF9udWxsKTsKLSNlbmRpZgogCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fdGtpcF9pbml0KTsKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX2NyeXB0b190a2lwX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwppbmRleCBjNGJiYzhkLi41ZGM5NzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwpAQCAtMjEsMzAgKzIxLDExIEBACiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotICAgICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KLSNlbHNlCi0gICAgI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jZW5kaWYKLS8vI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLS8vCi0vKgotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0jaW5jbHVkZSAicnRsX2NyeXB0by5oIgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KLSNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSovCiBNT0RVTEVfQVVUSE9SKCJKb3VuaSBNYWxpbmVuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3QgQVAgY3J5cHQ6IFdFUCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNTgsMTIgKzM5LDggQEAKIAl1OCBrZXlbV0VQX0tFWV9MRU4gKyAxXTsKIAl1OCBrZXlfbGVuOwogCXU4IGtleV9pZHg7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKLQkjZWxzZQogICAgICAgICBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdHhfdGZtOwogICAgICAgICBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqcnhfdGZtOwotICAgICAgICAjZW5kaWYKIH07CiAKIApAQCAtNzYsMTQgKzUzLDYgQEAKIAkJZ290byBmYWlsOwogCXByaXYtPmtleV9pZHggPSBrZXlpZHg7CiAKLSNpZigoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgJiYgKCFPUEVOU1VTRV9TTEVEKSkKLQlwcml2LT50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJhcmM0IiwgMCk7Ci0JaWYgKHByaXYtPnRmbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfd2VwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgYXJjNFxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JI2Vsc2UKIAlwcml2LT50eF90Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKICAgICAgICAgaWYgKElTX0VSUihwcml2LT50eF90Zm0pKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMV9jcnlwdF93ZXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCkBAIC05OCw3ICs2Nyw2IEBACiAgICAgICAgICAgICAgICAgcHJpdi0+cnhfdGZtID0gTlVMTDsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgI2VuZGlmCiAKIAkvKiBzdGFydCBXRVAgSVYgZnJvbSBhIHJhbmRvbSB2YWx1ZSAqLwogCWdldF9yYW5kb21fYnl0ZXMoJnByaXYtPml2LCA0KTsKQEAgLTEwNiwxMyArNzQsNiBAQAogCXJldHVybiBwcml2OwogCiBmYWlsOgotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChwcml2KSB7Ci0JCWlmIChwcml2LT50Zm0pCi0JCQljcnlwdG9fZnJlZV90Zm0ocHJpdi0+dGZtKTsKLQkJa2ZyZWUocHJpdik7Ci0JfQotCSNlbHNlCiAJaWYgKHByaXYpIHsKICAgICAgICAgICAgICAgICBpZiAocHJpdi0+dHhfdGZtKQogICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHByaXYtPnR4X3RmbSk7CkBAIC0xMjAsNyArODEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHByaXYtPnJ4X3RmbSk7CiAgICAgICAgICAgICAgICAga2ZyZWUocHJpdik7CiAgICAgICAgIH0KLSAgICAgICAgI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEyOCwxNyArODgsMTIgQEAKIHN0YXRpYyB2b2lkIHByaXNtMl93ZXBfZGVpbml0KHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IHByaXNtMl93ZXBfZGF0YSAqX3ByaXYgPSBwcml2OwotI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjEpKSAmJiAoIU9QRU5TVVNFX1NMRUQpKQotCWlmIChfcHJpdiAmJiBfcHJpdi0+dGZtKQotCQljcnlwdG9fZnJlZV90Zm0oX3ByaXYtPnRmbSk7Ci0JI2Vsc2UKIAlpZiAoX3ByaXYpIHsKICAgICAgICAgICAgICAgICBpZiAoX3ByaXYtPnR4X3RmbSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX2Jsa2NpcGhlcihfcHJpdi0+dHhfdGZtKTsKICAgICAgICAgICAgICAgICBpZiAoX3ByaXYtPnJ4X3RmbSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNyeXB0b19mcmVlX2Jsa2NpcGhlcihfcHJpdi0+cnhfdGZtKTsKICAgICAgICAgfQotICAgICAgICAjZW5kaWYKIAlrZnJlZShwcml2KTsKIH0KIApAQCAtMTU1LDkgKzExMCw3IEBACiAJdTgga2V5W1dFUF9LRVlfTEVOICsgM107CiAJdTggKnBvczsKIAljYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7Ci0JI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgfHwgKE9QRU5TVVNFX1NMRUQpKQogCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0gey50Zm0gPSB3ZXAtPnR4X3RmbX07Ci0JI2VuZGlmCiAJdTMyIGNyYzsKIAl1OCAqaWN2OwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKQEAgLTE5NiwzNSArMTQ5LDE2IEBACiAJewogCiAJCS8qIEFwcGVuZCBsaXR0bGUtZW5kaWFuIENSQzMyIGFuZCBlbmNyeXB0IGl0IHRvIHByb2R1Y2UgSUNWICovCi0JI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWNyYyA9IH5jcmMzMl9sZSh+MCwgcG9zLCBsZW4pOwotCSNlbHNlCi0JCWNyYyA9IH5ldGhlcl9jcmNfbGUobGVuLCBwb3MpOwotCSNlbmRpZgogCQlpY3YgPSBza2JfcHV0KHNrYiwgNCk7CiAJCWljdlswXSA9IGNyYzsKIAkJaWN2WzFdID0gY3JjID4+IDg7CiAJCWljdlsyXSA9IGNyYyA+PiAxNjsKIAkJaWN2WzNdID0gY3JjID4+IDI0OwogCi0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JCWNyeXB0b19jaXBoZXJfc2V0a2V5KHdlcC0+dGZtLCBrZXksIGtsZW4pOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IGxlbiArIDQ7Ci0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh3ZXAtPnRmbSwgJnNnLCAmc2csIGxlbiArIDQpOwotCQlyZXR1cm4gMDsKLQkjZWxzZQogCQljcnlwdG9fYmxrY2lwaGVyX3NldGtleSh3ZXAtPnR4X3RmbSwga2V5LCBrbGVuKTsKLQkjaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KSkKLQkJc2cucGFnZSA9IHZpcnRfdG9fcGFnZShwb3MpOwotCQlzZy5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShwb3MpOwotCQlzZy5sZW5ndGggPSBsZW4gKyA0OwotCSNlbHNlCiAJCXNnX2luaXRfb25lKCZzZywgcG9zLCBsZW4rNCk7Ci0JI2VuZGlmCiAJCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsICZzZywgJnNnLCBsZW4gKyA0KTsKLQkjZW5kaWYKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI0NSw5ICsxNzksNyBAQAogCXU4IGtleVtXRVBfS0VZX0xFTiArIDNdOwogCXU4IGtleWlkeCwgKnBvczsKIAljYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7Ci0JI2lmKChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIxKSkgfHwgKE9QRU5TVVNFX1NMRUQpKQogCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0gey50Zm0gPSB3ZXAtPnJ4X3RmbX07Ci0JI2VuZGlmCiAJdTMyIGNyYzsKIAl1OCBpY3ZbNF07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwpAQCAtMjcyLDI5ICsyMDQsMTEgQEAKIAogCWlmICghdGNiX2Rlc2MtPmJId1NlYykKIAl7Ci0jaWYoKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMSkpICYmICghT1BFTlNVU0VfU0xFRCkpCi0JCWNyeXB0b19jaXBoZXJfc2V0a2V5KHdlcC0+dGZtLCBrZXksIGtsZW4pOwotCQlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7Ci0JCXNnLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHBvcyk7Ci0JCXNnLmxlbmd0aCA9IHBsZW4gKyA0OwotCQljcnlwdG9fY2lwaGVyX2RlY3J5cHQod2VwLT50Zm0sICZzZywgJnNnLCBwbGVuICsgNCk7Ci0JI2Vsc2UKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkod2VwLT5yeF90Zm0sIGtleSwga2xlbik7Ci0JI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKLQkJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKLQkJc2cubGVuZ3RoID0gcGxlbiArIDQ7Ci0JI2Vsc2UKIAkJc2dfaW5pdF9vbmUoJnNnLCBwb3MsIHBsZW4rNCk7Ci0JI2VuZGlmCiAJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpCiAJCQlyZXR1cm4gLTc7Ci0JI2VuZGlmCi0JI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWNyYyA9IH5jcmMzMl9sZSh+MCwgcG9zLCBwbGVuKTsKLQkjZWxzZQotCQljcmMgPSB+ZXRoZXJfY3JjX2xlKHBsZW4sIHBvcyk7Ci0JI2VuZGlmCiAJCWljdlswXSA9IGNyYzsKIAkJaWN2WzFdID0gY3JjID4+IDg7CiAJCWljdlsyXSA9IGNyYyA+PiAxNjsKQEAgLTM3OSwxNCArMjkzLDYgQEAKIAogdm9pZCBpZWVlODAyMTFfd2VwX251bGwodm9pZCkKIHsKLS8vCXByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAgICAgICAgIHJldHVybjsKIH0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93ZXBfbnVsbCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3dlcF9udWxsKTsKLSNlbmRpZgogCi0vL21vZHVsZV9pbml0KGllZWU4MDIxMV9jcnlwdG9fd2VwX2luaXQpOwotLy9tb2R1bGVfZXhpdChpZWVlODAyMTFfY3J5cHRvX3dlcF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKaW5kZXggNjE0YThiNi4uN2VkZjVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTExMCwxNCArMTA5LDcgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0jZWxzZQotCWllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7Ci0jZW5kaWYKLSNpZiAwCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfcnRsX3htaXQ7Ci0jZW5kaWYKIAogCW1lbXNldChpZWVlLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UpK3NpemVvZl9wcml2KTsKIAlpZWVlLT5kZXYgPSBkZXY7CkBAIC0xNjYsMTIgKzE1OCw3IEBACiAKIAlpZWVlODAyMTFfc29mdG1hY19pbml0KGllZWUpOwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwxMykpCiAJaWVlZS0+cEhUSW5mbyA9IGt6YWxsb2Moc2l6ZW9mKFJUX0hJR0hfVEhST1VHSFBVVCksIEdGUF9LRVJORUwpOwotI2Vsc2UKLQlpZWVlLT5wSFRJbmZvID0gKFJUX0hJR0hfVEhST1VHSFBVVCopa21hbGxvYyhzaXplb2YoUlRfSElHSF9USFJPVUdIUFVUKSwgR0ZQX0tFUk5FTCk7Ci0JbWVtc2V0KGllZWUtPnBIVEluZm8sMCxzaXplb2YoUlRfSElHSF9USFJPVUdIUFVUKSk7Ci0jZW5kaWYKIAlpZiAoaWVlZS0+cEhUSW5mbyA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJjYW4ndCBhbGxvYyBtZW1vcnkgZm9yIEhUSW5mb1xuIik7CkBAIC0xODAsMTMgKzE2Nyw2IEBACiAJSFRVcGRhdGVEZWZhdWx0U2V0dGluZyhpZWVlKTsKIAlIVEluaXRpYWxpemVIVEluZm8oaWVlZSk7IC8vbWF5IG1vdmUgdG8gb3RoZXIgcGxhY2UuCiAJVFNJbml0aWFsaXplKGllZWUpOwotI2lmIDAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCi0gCUlOSVRfV09SSygmaWVlZS0+aHRfb25Bc3NSc3AsICh2b2lkKCopKHZvaWQqKSkgSFRPbkFzc29jUnNwX3dxKTsKLSNlbHNlCi0JSU5JVF9XT1JLKCZpZWVlLT5odF9vbkFzc1JzcCwgKHZvaWQoKikodm9pZCopKSBIVE9uQXNzb2NSc3Bfd3EsIGllZWUpOwotI2VuZGlmCi0jZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgSUVFRV9JQlNTX01BQ19IQVNIX1NJWkU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmllZWUtPmlic3NfbWFjX2hhc2hbaV0pOwogCkBAIC0yMDUsMzIgKzE4NSwyMCBAQAogCiAgZmFpbGVkOgogCWlmIChkZXYpCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJCWZyZWVfbmV0ZGV2KGRldik7Ci0jZWxzZQotCQlrZnJlZShkZXYpOwotI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiAKIAogdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSNlbHNlCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilkZXYtPnByaXY7Ci0jZW5kaWYKIAlpbnQgaTsKLQkvL3N0cnVjdCBsaXN0X2hlYWQgKnAsICpxOwotLy8JZGVsX3RpbWVyX3N5bmMoJmllZWUtPlN3QndUaW1lcik7Ci0jaWYgMQogCWlmIChpZWVlLT5wSFRJbmZvICE9IE5VTEwpCiAJewogCQlrZnJlZShpZWVlLT5wSFRJbmZvKTsKIAkJaWVlZS0+cEhUSW5mbyA9IE5VTEw7CiAJfQotI2VuZGlmCiAJUmVtb3ZlQWxsVFMoaWVlZSk7CiAJaWVlZTgwMjExX3NvZnRtYWNfZnJlZShpZWVlKTsKIAlkZWxfdGltZXJfc3luYygmaWVlZS0+Y3J5cHRfZGVpbml0X3RpbWVyKTsKQEAgLTI0NywyMCArMjE1LDcgQEAKIAl9CiAKIAlpZWVlODAyMTFfbmV0d29ya3NfZnJlZShpZWVlKTsKLSNpZiAwCi0JZm9yIChpID0gMDsgaSA8IElFRUVfSUJTU19NQUNfSEFTSF9TSVpFOyBpKyspIHsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZpZWVlLT5pYnNzX21hY19oYXNoW2ldKSB7Ci0JCQlrZnJlZShsaXN0X2VudHJ5KHAsIHN0cnVjdCBpZWVlX2lic3Nfc2VxLCBsaXN0KSk7Ci0JCQlsaXN0X2RlbChwKTsKLQkJfQotCX0KLQotI2VuZGlmCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAJZnJlZV9uZXRkZXYoZGV2KTsKLSNlbHNlCi0Ja2ZyZWUoZGV2KTsKLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwpAQCAtMzU4LDExICszMTMsNyBAQAogCX0KIAogCWllZWU4MDIxMV9kZWJ1Z19sZXZlbCA9IGRlYnVnOwotI2lmKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkpCi0JaWVlZTgwMjExX3Byb2MgPSBjcmVhdGVfcHJvY19lbnRyeShEUlZfTkFNRSwgU19JRkRJUiwgcHJvY19uZXQpOwotI2Vsc2UKIAlpZWVlODAyMTFfcHJvYyA9IGNyZWF0ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBTX0lGRElSLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKIAlpZiAoaWVlZTgwMjExX3Byb2MgPT0gTlVMTCkgewogCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgIiBEUlZfTkFNRQogCQkJCSIgcHJvYyBkaXJlY3RvcnlcbiIpOwpAQCAtMzcxLDExICszMjIsNyBAQAogCWUgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGVidWdfbGV2ZWwiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkgICAgICBpZWVlODAyMTFfcHJvYyk7CiAJaWYgKCFlKSB7Ci0jaWYoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIHByb2NfbmV0KTsKLSNlbHNlCiAJCXJlbW92ZV9wcm9jX2VudHJ5KERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKIAkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0zOTAsMTEgKzMzNyw3IEBACiB7CiAJaWYgKGllZWU4MDIxMV9wcm9jKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKLSNpZihMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjQpKQotCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgcHJvY19uZXQpOwotI2Vsc2UKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAJfQogCWllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQoKTsKQEAgLTQwMywyMSArMzQ2LDEwIEBACiAJaWVlZTgwMjExX2NyeXB0b19kZWluaXQoKTsKIH0KIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwogCiAKLS8vbW9kdWxlX2V4aXQoaWVlZTgwMjExX3J0bF9leGl0KTsKLS8vbW9kdWxlX2luaXQoaWVlZTgwMjExX3J0bF9pbml0KTsKLSNlbmRpZgogI2VuZGlmCiAKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGFsbG9jX2llZWU4MDIxMSk7Ci0vL0VYUE9SVF9TWU1CT0woZnJlZV9pZWVlODAyMTEpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGFsbG9jX2llZWU4MDIxMSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhmcmVlX2llZWU4MDIxMSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IGRhMTAwNjcuLmFhZjliOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtNTUsMTEgKzU1LDcgQEAKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAlza2ItPmRldiA9IGllZWUtPmRldjsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIyKQogICAgICAgICBza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotI2Vsc2UKLSAgICAgICAgc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotI2VuZGlmCiAKIAlza2JfcHVsbChza2IsIGllZWU4MDIxMV9nZXRfaGRybGVuKGZjKSk7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CkBAIC0yNzkzLDggKzI3ODksNiBAQAogI2VuZGlmCiAJCW1lbWNweSh0YXJnZXQsICZuZXR3b3JrLCBzaXplb2YoKnRhcmdldCkpOwogCQlsaXN0X2FkZF90YWlsKCZ0YXJnZXQtPmxpc3QsICZpZWVlLT5uZXR3b3JrX2xpc3QpOwotCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKLQkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCkBAIC0yODIxLDggKzI4MTUsNiBAQAogCQkvL1lKLGFkZCwwODA4MTksZm9yIGhpZGRlbiBhcCxlbmQKIAogCQl1cGRhdGVfbmV0d29yayh0YXJnZXQsICZuZXR3b3JrKTsKLQkJaWYocmVuZXcgJiYgKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFKSkKLQkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwpAQCAtMjg4MCwxMSArMjg3MiwzIEBACiAKIAl9CiB9Ci0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9tZ3QpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeCk7Ci0jZWxzZQotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J4X21ndCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcngpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNDZiNmU4Yy4uYjdlYzFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNTEwLDM0ICs1MTAsMTEgQEAKIH0KIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotLyogY2FsbGVkIGJvdGggYnkgd3Egd2l0aCBpZWVlLT5sb2NrIGhlbGQgKi8KLXZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNpZiAwCi0Jc2hvcnQgd2F0Y2hkb2cgPSAwOwotCWRvewotCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCA9Ci0JCQkoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwgKyAxKSAlIE1BWF9DSEFOTkVMX05VTUJFUjsKLQkJaWYgKHdhdGNoZG9nKysgPiBNQVhfQ0hBTk5FTF9OVU1CRVIpCi0JCQkJcmV0dXJuOyAvKiBubyBnb29kIGNoYW5zICovCiAKLQl9d2hpbGUoIWllZWUtPmNoYW5uZWxfbWFwW2llZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXSk7Ci0jZW5kaWYKLQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPnNvZnRtYWNfc2Nhbl93cSk7Ci19Ci0jZW5kaWYKLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHNvZnRtYWNfc2Nhbl93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCiAJc3RhdGljIHNob3J0IHdhdGNoZG9nID0gMDsKIAl1OCBsYXN0X2NoYW5uZWwgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbDsKICNpZmRlZiBFTkFCTEVfRE9UMTFECkBAIC01NzUsMTMgKzU1Miw3IEBACiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxdWVzdHMoaWVlZSk7CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXF1ZXVlX2RlbGF5ZWRfd29yayhpZWVlLT53cSwgJmllZWUtPnNvZnRtYWNfc2Nhbl93cSwgSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKTsKLSNlbHNlCi0JLy9pZWVlLT5zY2FuX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTVNFQ1MoSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKTsKLQlpZiAoaWVlZS0+c2Nhbm5pbmcgPT0gMSkKLQkJbW9kX3RpbWVyKCZpZWVlLT5zY2FuX3RpbWVyLChqaWZmaWVzICsgTVNFQ1MoSUVFRTgwMjExX1NPRlRNQUNfU0NBTl9USU1FKSkpOwotI2VuZGlmCiAKIAl1cCgmaWVlZS0+c2Nhbl9zZW0pOwogCXJldHVybjsKQEAgLTU5NywxOSArNTY4LDYgQEAKIAl1cCgmaWVlZS0+c2Nhbl9zZW0pOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi12b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fY2IodW5zaWduZWQgbG9uZyBfZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKilfZGV2OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLQlpZWVlODAyMTFfc29mdG1hY19zY2FuKGllZWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLX0KLSNlbmRpZgotCi0KIHZvaWQgaWVlZTgwMjExX2JlYWNvbnNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY2NSwxMSArNjIzLDcgQEAKIAlpZiAoaWVlZS0+c2Nhbm5pbmcgPT0gMSl7CiAJCWllZWUtPnNjYW5uaW5nID0gMDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQljYW5jZWxfZGVsYXllZF93b3JrKCZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EpOwotI2Vsc2UKLQkJZGVsX3RpbWVyX3N5bmMoJmllZWUtPnNjYW5fdGltZXIpOwotI2VuZGlmCiAJfQogCiAvLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CkBAIC03MDQsMTYgKzY1OCw3IEBACiAJaWYgKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfU0NBTil7CiAJCWlmIChpZWVlLT5zY2FubmluZyA9PSAwKXsKIAkJCWllZWUtPnNjYW5uaW5nID0gMTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQogCQkJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+c29mdG1hY19zY2FuX3dxLCAwKTsKLSNlbHNlCi0KLQkJCXF1ZXVlX3dvcmsoaWVlZS0+d3EsICZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EpOwotI2VuZGlmCi0jZWxzZQotCQkJaWVlZTgwMjExX3NvZnRtYWNfc2NhbihpZWVlKTsKLSNlbmRpZgogCQl9CiAJfWVsc2UKIAkJaWVlZS0+c3RhcnRfc2NhbihpZWVlLT5kZXYpOwpAQCAtMTQyOCwxMyArMTM3Myw4IEBACiAKIAlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElOR19SRVRSWTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXF1ZXVlX2RlbGF5ZWRfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExX1NPRlRNQUNfQVNTT0NfUkVUUllfVElNRSk7Ci0jZWxzZQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSk7Ci0jZW5kaWYKLQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTUyNywxNCArMTQ2Nyw5IEBACiAJCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9jb21wbGV0ZV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBhc3NvY2lhdGVfY29tcGxldGVfd3EpOwotI2Vsc2UKLXZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9jb21wbGV0ZV93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIkFzc29jaWF0ZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKIAlpZWVlLT5pc19yb2FtaW5nID0gZmFsc2U7CiAJaWYoaWVlZTgwMjExX2lzXzU0ZyhpZWVlLT5jdXJyZW50X25ldHdvcmspICYmCkBAIC0xNjA2LDIxICsxNTQxLDEyIEBACiAJfQogI2VuZGlmCiAJLy9pZWVlLT5VcGRhdGVIYWxSQVRSVGFibGVIYW5kbGVyKGRldiwgaWVlZS0+ZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldCk7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7Ci0jZWxzZQotCXNjaGVkdWxlX3Rhc2soJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7Ci0jZW5kaWYKIH0KIAotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9wcm9jZWR1cmVfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgYXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3Byb2NlZHVyZV93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLSNlbmRpZgogCWllZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKICNpZmRlZiBFTkFCTEVfSVBTCiAJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZSAhPSBOVUxMKQpAQCAtMTczNCwxMSArMTY2MCw3IEBACiAJCQkJCX0KIAogCQkJCQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElORzsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAkJCQkJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9wcm9jZWR1cmVfd3EpOwotI2Vsc2UKLQkJCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCQl9ZWxzZXsKIAkJCQkJaWYoaWVlZTgwMjExX2lzXzU0ZyhpZWVlLT5jdXJyZW50X25ldHdvcmspICYmCiAJCQkJCQkoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKXsKQEAgLTIzMzIsMTEgKzIyNTQsNyBAQAogCQkJCQkJIkFzc29jaWF0aW9uIHJlc3BvbnNlIHN0YXR1cyBjb2RlIDB4JXhcbiIsCiAJCQkJCQllcnJjb2RlKTsKIAkJCQkJaWYoaWVlZS0+QXNvY1JldHJ5Q291bnQgPCBSVF9BU09DX1JFVFJZX0xJTUlUKSB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJCQkJCQlxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZWxzZQotCQkJCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWllZWU4MDIxMV9hc3NvY2lhdGVfYWJvcnQoaWVlZSk7CiAJCQkJCX0KQEAgLTI0NDYsMTEgKzIzNjQsNyBAQAogCQkJLy8Jbm90aWZ5X3d4X2Fzc29jX2V2ZW50KGllZWUpOwogCQkJCS8vSFRTZXRDb25uZWN0QndNb2RlKGllZWUsIEhUX0NIQU5ORUxfV0lEVEhfMjAsIEhUX0VYVENITkxfT0ZGU0VUX05PX0VYVCk7CiAJCQkJUmVtb3ZlUGVlclRTKGllZWUsIGhlYWRlci0+YWRkcjIpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQkJCXF1ZXVlX3dvcmsoaWVlZS0+d3EsICZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxKTsKLSNlbHNlCi0JCQkJc2NoZWR1bGVfdGFzaygmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7Ci0jZW5kaWYKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUOgpAQCAtMjY4NywxNiArMjYwMSwxMSBAQAogCQluZXRpZl9jYXJyaWVyX29uKGllZWUtPmRldik7CiAJfQogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHN0YXJ0X2lic3Nfd3EpOwotI2Vsc2UKLXZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0jZW5kaWYKIAkvKiBpd2NvbmZpZyBtb2RlIGFkLWhvYyB3aWxsIHNjaGVkdWxlIHRoaXMgYW5kIHJldHVybgogCSAqIG9uIHRoZSBvdGhlciBoYW5kIHRoaXMgd2lsbCBibG9jayBmdXJ0aGVyIGl3Y29uZmlnIFNFVAogCSAqIG9wZXJhdGlvbnMgYmVjYXVzZSBvZiB0aGUgd3hfc2VtIGhvbGQuCkBAIC0yODA3LDExICsyNzE2LDcgQEAKIAogaW5saW5lIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+c3RhcnRfaWJzc193cSwgMTUwKTsKLSNlbHNlCi0Jc2NoZWR1bGVfdGFzaygmaWVlZS0+c3RhcnRfaWJzc193cSk7Ci0jZW5kaWYKIH0KIAogLyogdGhpcyBpcyBjYWxsZWQgb25seSBpbiB1c2VyIGNvbnRleHQsIHdpdGggd3hfc2VtIGhlbGQgKi8KQEAgLTI4NzMsMjIgKzI3NzgsMjIgQEAKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpKQogCQlEb3QxMWRfUmVzZXQoaWVlZSk7CiAjZW5kaWYKLQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7CiAJaWVlZS0+aXNfc2V0X2tleSA9IGZhbHNlOwogCWllZWUtPmxpbmtfY2hhbmdlKGllZWUtPmRldik7CiAJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKLQlub3RpZnlfd3hfYXNzb2NfZXZlbnQoaWVlZSk7CisJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQgfHwKKwkgICAgaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0FTU09DSUFUSU5HKSB7CisJCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKKwkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KGllZWUpOworCX0KKworCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKIAogfQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIGFzc29jaWF0ZV9yZXRyeV93cSk7Ci0jZWxzZQotdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd24oJmllZWUtPnd4X3NlbSk7CkBAIC0yOTkwLDEwICsyODk1LDggQEAKIAogCWllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhpZWVlKTsKIAlkZWxfdGltZXJfc3luYygmaWVlZS0+YXNzb2NpYXRlX3RpbWVyKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAljYW5jZWxfZGVsYXllZF93b3JrKCZpZWVlLT5hc3NvY2lhdGVfcmV0cnlfd3EpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmllZWUtPnN0YXJ0X2lic3Nfd3EpOwotI2VuZGlmCiAJaWVlZTgwMjExX3N0b3Bfc2NhbihpZWVlKTsKIAogCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUoaWVlZSk7CkBAIC0zMTE0LDExICszMDE3LDYgQEAKIAlpZWVlLT5zdGFfZWRjYV9wYXJhbVszXSA9IDB4MDAyRjMyNjI7CiAJaWVlZS0+YWdncmVnYXRpb24gPSB0cnVlOwogCWllZWUtPmVuYWJsZV9yeF9pbW1fQkEgPSAxOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotCWluaXRfdGltZXIoJmllZWUtPnNjYW5fdGltZXIpOwotCWllZWUtPnNjYW5fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWllZWU7Ci0JaWVlZS0+c2Nhbl90aW1lci5mdW5jdGlvbiA9IGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fY2I7Ci0jZW5kaWYKIAlpZWVlLT50eF9wZW5kaW5nLnR4YiA9IE5VTEw7CiAKIAlpbml0X3RpbWVyKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwpAQCAtMzEyOSwxNiArMzAyNywxMiBAQAogCWllZWUtPmJlYWNvbl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGllZWU7CiAJaWVlZS0+YmVhY29uX3RpbWVyLmZ1bmN0aW9uID0gaWVlZTgwMjExX3NlbmRfYmVhY29uX2NiOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaWZkZWYgUEZfU1lOQ1RIUkVBRAogCWllZWUtPndxID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSwwKTsKICNlbHNlCiAJaWVlZS0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKICNlbmRpZgotI2VuZGlmCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQogICAgICAgICBJTklUX0RFTEFZRURfV09SSygmaWVlZS0+c3RhcnRfaWJzc193cSxpZWVlODAyMTFfc3RhcnRfaWJzc193cSk7CiAgICAgICAgIElOSVRfV09SSygmaWVlZS0+YXNzb2NpYXRlX2NvbXBsZXRlX3dxLCBpZWVlODAyMTFfYXNzb2NpYXRlX2NvbXBsZXRlX3dxKTsKICAgICAgICAgSU5JVF9XT1JLKCZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLCBpZWVlODAyMTFfYXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7CkBAIC0zMTQ2LDIzICszMDQwLDYgQEAKICAgICAgICAgSU5JVF9ERUxBWUVEX1dPUksoJmllZWUtPmFzc29jaWF0ZV9yZXRyeV93cSwgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cSk7CiAgICAgICAgIElOSVRfV09SSygmaWVlZS0+d3hfc3luY19zY2FuX3dxLGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3EpOwogCi0jZWxzZQotCUlOSVRfV09SSygmaWVlZS0+c3RhcnRfaWJzc193cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9zdGFydF9pYnNzX3dxLGllZWUpOwotCUlOSVRfV09SSygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX2Fzc29jaWF0ZV9yZXRyeV93cSxpZWVlKTsKLQlJTklUX1dPUksoJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfY29tcGxldGVfd3EsaWVlZSk7Ci0JSU5JVF9XT1JLKCZpZWVlLT5hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX2Fzc29jaWF0ZV9wcm9jZWR1cmVfd3EsaWVlZSk7Ci0JSU5JVF9XT1JLKCZpZWVlLT5zb2Z0bWFjX3NjYW5fd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfc29mdG1hY19zY2FuX3dxLGllZWUpOwotCUlOSVRfV09SSygmaWVlZS0+d3hfc3luY19zY2FuX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cSxpZWVlKTsKLSNlbmRpZgotCi0jZWxzZQotCXRxX2luaXQoJmllZWUtPnN0YXJ0X2lic3Nfd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfc3RhcnRfaWJzc193cSxpZWVlKTsKLQl0cV9pbml0KCZpZWVlLT5hc3NvY2lhdGVfcmV0cnlfd3EsKHZvaWQoKikodm9pZCopKSBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxLGllZWUpOwotCXRxX2luaXQoJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfY29tcGxldGVfd3EsaWVlZSk7Ci0JdHFfaW5pdCgmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9hc3NvY2lhdGVfcHJvY2VkdXJlX3dxLGllZWUpOwotCXRxX2luaXQoJmllZWUtPnNvZnRtYWNfc2Nhbl93cSwodm9pZCgqKSh2b2lkKikpIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3EsaWVlZSk7Ci0JdHFfaW5pdCgmaWVlZS0+d3hfc3luY19zY2FuX3dxLCh2b2lkKCopKHZvaWQqKSkgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cSxpZWVlKTsKLSNlbmRpZgogCXNlbWFfaW5pdCgmaWVlZS0+d3hfc2VtLCAxKTsKIAlzZW1hX2luaXQoJmllZWUtPnNjYW5fc2VtLCAxKTsKICNpZmRlZiBFTkFCTEVfSVBTCkBAIC0zMTg5LDEwICszMDY2LDggQEAKICNlbmRpZgogCWRlbF90aW1lcl9zeW5jKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShpZWVlLT53cSk7Ci0jZW5kaWYKIAogCXVwKCZpZWVlLT53eF9zZW0pOwogfQpAQCAtMzY0Nyw0OSArMzUyMiwzIEBACiAJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoaWVlZS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIH0KLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9iZWFjb24pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcmVzZXRfcXVldWUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfc2hvcnRzbG90KTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfNTRnKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3BhX3N1cHBsaWNhbnRfaW9jdGwpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9wc190eF9hY2spOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zb2Z0bWFjX3htaXQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyk7Ci0vL0VYUE9SVF9TWU1CT0wobm90aWZ5X3d4X2Fzc29jX2V2ZW50KTsKLS8vRVhQT1JUX1NZTUJPTChTZW5kRGlzYXNzb2NpYXRpb24pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9kaXNhc3NvY2lhdGUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3NjYW4pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybyk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKLSNlbHNlCi1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfZ2V0X2JlYWNvbik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfcnRsX3dha2VfcXVldWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9yZXNldF9xdWV1ZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9pc19zaG9ydHNsb3QpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX2lzXzU0Zyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3BhX3N1cHBsaWNhbnRfaW9jdGwpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3BzX3R4X2Fjayk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc29mdG1hY194bWl0KTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhub3RpZnlfd3hfYXNzb2NfZXZlbnQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoU2VuZERpc2Fzc29jaWF0aW9uKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9kaXNhc3NvY2lhdGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RvcF9zY2FuKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fc3luY3JvKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCmluZGV4IDFiYmQ0OWYuLmQwYTEwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKQEAgLTMxMiwxNCArMzEyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCiB2b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd3hfc3luY19zY2FuX3dxKTsKLSNlbHNlCi12b2lkIGllZWU4MDIxMV93eF9zeW5jX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0jZW5kaWYKIAlzaG9ydCBjaGFuOwogCUhUX0VYVENITkxfT0ZGU0VUIGNoYW5fb2Zmc2V0PTA7CiAJSFRfQ0hBTk5FTF9XSURUSCBiYW5kd2lkdGg9MDsKQEAgLTMzNyw4ICszMzIsNiBAQAogCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDEpOwogI2VuZGlmCiAKLQluZXRpZl9jYXJyaWVyX29mZihpZWVlLT5kZXYpOwotCiAJaWYgKGllZWUtPmRhdGFfaGFyZF9zdG9wKQogCQlpZWVlLT5kYXRhX2hhcmRfc3RvcChpZWVlLT5kZXYpOwogCkBAIC0zODksNyArMzgyLDYgQEAKIAlpZihpZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MgfHwgaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikKIAkJaWVlZTgwMjExX3N0YXJ0X3NlbmRfYmVhY29ucyhpZWVlKTsKIAotCW5ldGlmX2NhcnJpZXJfb24oaWVlZS0+ZGV2KTsKIAljb3VudCA9IDA7CiAJdXAoJmllZWUtPnd4X3NlbSk7CiAKQEAgLTQwOCwxMSArNDAwLDcgQEAKIAl9CiAKIAlpZiAoIGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCQlxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+d3hfc3luY19zY2FuX3dxKTsKLSNlbHNlCi0JCXNjaGVkdWxlX3Rhc2soJmllZWUtPnd4X3N5bmNfc2Nhbl93cSk7Ci0jZW5kaWYKIAkJLyogaW50ZW50aW9uYWxseSBmb3JnZXQgdG8gdXAgc2VtICovCiAJCXJldHVybiAwOwogCX0KQEAgLTQ1OSwyOSArNDQ3LDggQEAKIAlpZiAod3JxdS0+ZXNzaWQuZmxhZ3MgJiYgd3JxdS0+ZXNzaWQubGVuZ3RoKSB7CiAJCS8vZmlyc3QgZmx1c2ggY3VycmVudCBuZXR3b3JrLnNzaWQKIAkJbGVuID0gKCh3cnF1LT5lc3NpZC5sZW5ndGgtMSkgPCBJV19FU1NJRF9NQVhfU0laRSkgPyAod3JxdS0+ZXNzaWQubGVuZ3RoLTEpIDogSVdfRVNTSURfTUFYX1NJWkU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgIEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQkJc3RybmNweShpZWVlLT5jdXJyZW50X25ldHdvcmsuc3NpZCwgZXh0cmEsIGxlbik7Ci0JCWllZWUtPmN1cnJlbnRfbmV0d29yay5zc2lkX2xlbiA9IGxlbjsKLSNpZiAwCi0JCXsKLQkJCWludCBpOwotCQkJZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCQkJcHJpbnRrKCIlYyAiLCBleHRyYVtpXSk7Ci0JCQlwcmludGsoIlxuIik7Ci0JCX0KLSNlbmRpZgotI2Vsc2UKIAkJc3RybmNweShpZWVlLT5jdXJyZW50X25ldHdvcmsuc3NpZCwgZXh0cmEsIGxlbisxKTsKIAkJaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRfbGVuID0gbGVuKzE7Ci0jaWYgMAotCQl7Ci0JCQlpbnQgaTsKLQkJCWZvciAoaT0wOyBpPGxlbiArIDE7IGkrKykKLQkJCQlwcmludGsoIiVjICIsIGV4dHJhW2ldKTsKLQkJCXByaW50aygiXG4iKTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKIAkJaWVlZS0+c3NpZF9zZXQgPSAxOwogCX0KIAllbHNlewpAQCAtNjU5LDQyICs2MjYsNCBAQAogCXJldHVybiByZXQ7CiAKIH0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZXNzaWQpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcmF0ZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9yYXRlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3dhcCk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF93YXApOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfbW9kZSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9tb2RlKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3NjYW4pOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZnJlcSk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9mcmVxKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3Jhd3R4KTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfcG93ZXIpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfcG93ZXIpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X3J0cyk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9ydHMpOwotI2Vsc2UKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfZXNzaWQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lc3NpZCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfc2V0X3JhdGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X2dldF9yYXRlKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfd2FwKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfd2FwKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfbW9kZSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X21vZGUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9zY2FuKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfZnJlcSk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfc2V0X2ZyZXEpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9yYXd0eCk7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X25hbWUpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9wb3dlcik7Ci1FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfcnRzKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9nZXRfcnRzKTsKLSNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBhNzVmMzY2Li5kZDhhMjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTI4NiwxMiArMjg2LDcgQEAKIAlpZiAoZXRoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJcmV0dXJuIDA7CiAKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMikpCiAJaXAgPSBpcF9oZHIoc2tiKTsKLSNlbHNlCi0JaXAgPSAoc3RydWN0IGlwaGRyKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBldGhlcl9oZWFkZXIpKTsKLSNlbmRpZgogCXN3aXRjaCAoaXAtPnRvcyAmIDB4ZmMpIHsKIAkJY2FzZSAweDIwOgogCQkJcmV0dXJuIDI7CkBAIC02MTMsMTEgKzYwOCw3IEBACiAKIGludCBpZWVlODAyMTFfcnRsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7Ci0jZWxzZQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICopZGV2LT5wcml2OwotI2VuZGlmCiAJc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmZyYWdfaGRyOwogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggNDk3MWIxYy4uYjc0NDkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC01NCwyNSArNTQsNyBAQAogCXsiTi01RyIsNH0sCiB9OwogCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpICYmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi1zdGF0aWMgaW5saW5lIGNoYXIgKgotaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGNoYXIgKiAgICAgc3RyZWFtLCAgICAgICAgIC8qIFN0cmVhbSBvZiBldmVudHMgKi8KLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiAgICAgZW5kcywgICAgICAgICAgIC8qIEVuZCBvZiBzdHJlYW0gKi8KLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19ldmVudCAqaXdlLCAgICAgIC8qIFBheWxvYWQgKi8KLSAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgZXZlbnRfbGVuKSAgICAgIC8qIFJlYWwgc2l6ZSBvZiBwYXlsb2FkICovCi17Ci0gICAgICAgIC8qIENoZWNrIGlmIGl0J3MgcG9zc2libGUgKi8KLSAgICAgICAgaWYoKHN0cmVhbSArIGV2ZW50X2xlbikgPCBlbmRzKSB7Ci0gICAgICAgICAgICAgICAgaXdlLT5sZW4gPSBldmVudF9sZW47Ci0JCW5kZWxheSgxKTsgICAvL25ldwotICAgICAgICAgICAgICAgIG1lbWNweShzdHJlYW0sIChjaGFyICopIGl3ZSwgZXZlbnRfbGVuKTsKLSAgICAgICAgICAgICAgICBzdHJlYW0gKz0gZXZlbnRfbGVuOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzdHJlYW07Ci19Ci0jZWxzZQogI2RlZmluZSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2wgaXdlX3N0cmVhbV9hZGRfZXZlbnQKLSNlbmRpZgogCiAjZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0CiBzdGF0aWMgaW5saW5lIGNoYXIgKnJ0bDgxOXhfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCkBAIC05MywxMSArNzUsNyBAQAogCWl3ZS5jbWQgPSBTSU9DR0lXQVA7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0jZWxzZQotCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9BRERSX0xFTik7Ci0jZW5kaWYKIAkvKiBSZW1haW5pbmcgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgcHJvdmlkZSB0aGVtICovCiAKIAkvKiBBZGQgdGhlIEVTU0lEICovCkBAIC0xMDYsMjIgKzg0LDE0IEBACiAvLwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSB7CiAJaWYgKG5ldHdvcmstPnNzaWRfbGVuID09IDApIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplb2YoIjxoaWRkZW4+Iik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCAiPGhpZGRlbj4iKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgIjxoaWRkZW4+Iik7Ci0jZW5kaWYKICAgICAgICAgfSBlbHNlIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBtaW4obmV0d29yay0+c3NpZF9sZW4sICh1OCkzMik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBuZXR3b3JrLT5zc2lkKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7Ci0jZW5kaWYKICAgICAgICAgfQogCS8qIEFkZCB0aGUgcHJvdG9jb2wgbmFtZSAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXTkFNRTsKLQlmb3IoaT0wOyBpPChzaXplb2YoaWVlZTgwMjExX21vZGVzKS9zaXplb2YoaWVlZTgwMjExX21vZGVzWzBdKSk7IGkrKykgeworCWZvcihpPTA7IGk8QVJSQVlfU0laRShpZWVlODAyMTFfbW9kZXMpOyBpKyspIHsKIAkJaWYobmV0d29yay0+bW9kZSYoMTw8aSkpIHsKIAkJCXNwcmludGYocG5hbWUsaWVlZTgwMjExX21vZGVzW2ldLm1vZGVfc3RyaW5nLGllZWU4MDIxMV9tb2Rlc1tpXS5tb2RlX3NpemUpOwogCQkJcG5hbWUgKz1pZWVlODAyMTFfbW9kZXNbaV0ubW9kZV9zaXplOwpAQCAtMTI5LDExICs5OSw3IEBACiAJfQogCSpwbmFtZSA9ICdcMCc7CiAJc25wcmludGYoaXdlLnUubmFtZSwgSUZOQU1TSVosICJJRUVFODAyLjExJXMiLCBwcm90b19uYW1lKTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfQ0hBUl9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0NIQVJfTEVOKTsKLSNlbmRpZgogICAgICAgICAvKiBBZGQgbW9kZSAqLwogICAgICAgICBpd2UuY21kID0gU0lPQ0dJV01PREU7CiAgICAgICAgIGlmIChuZXR3b3JrLT5jYXBhYmlsaXR5ICYKQEAgLTE0MiwxMSArMTA4LDcgQEAKIAkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKIAkJZWxzZQogCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICAvKiBBZGQgZnJlcXVlbmN5L2NoYW5uZWwgKi8KQEAgLTE1NiwxMSArMTE4LDcgQEAKIAlpd2UudS5mcmVxLm0gPSBuZXR3b3JrLT5jaGFubmVsOwogCWl3ZS51LmZyZXEuZSA9IDA7CiAJaXdlLnUuZnJlcS5pID0gMDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLSNlbmRpZgogCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKIAlpZiAobmV0d29yay0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQpAQCAtMTY4LDExICsxMjYsNyBAQAogCWVsc2UKIAkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgbmV0d29yay0+c3NpZCk7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBuZXR3b3JrLT5zc2lkKTsKLSNlbmRpZgogCS8qIEFkZCBiYXNpYyBhbmQgZXh0ZW5kZWQgcmF0ZXMgKi8KIAltYXhfcmF0ZSA9IDA7CiAJcCA9IGN1c3RvbTsKQEAgLTIxNiwzMyArMTcwLDE1IEBACiAJCWlmIChyYXRlID4gbWF4X3JhdGUpCiAJCQltYXhfcmF0ZSA9IHJhdGU7CiAJfQotI2lmIDAKLQlwcmludGsoIm1heCByYXRlOiVkID09PWJhc2ljIHJhdGU6XG4iLCBtYXhfcmF0ZSk7Ci0JZm9yIChpPTA7aTxuZXR3b3JrLT5yYXRlc19sZW47aSsrKQotCQlwcmludGsoIiAleCIsIG5ldHdvcmstPnJhdGVzW2ldKTsKLQlwcmludGsoIlxuPT09PT09PWV4dGVuZCByYXRlXG4iKTsKLQlmb3IgKGk9MDsgaTxuZXR3b3JrLT5yYXRlc19leF9sZW47IGkrKykKLQkJcHJpbnRrKCIgJXgiLCBuZXR3b3JrLT5yYXRlc19leFtpXSk7Ci0JcHJpbnRrKCJcbiIpOwotI2VuZGlmCiAJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwogCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKIAlpd2UudS5iaXRyYXRlLnZhbHVlID0gbWF4X3JhdGUgKiA1MDAwMDA7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsCiAJCQkJICAgICBJV19FVl9QQVJBTV9MRU4pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudF9yc2woc3RhcnQsIHN0b3AsICZpd2UsCi0JCQkJICAgICBJV19FVl9QQVJBTV9MRU4pOwotI2VuZGlmCiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJaXdlLnUuZGF0YS5sZW5ndGggPSBwIC0gY3VzdG9tOwogCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwotI2Vsc2UKLSAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKLSNlbmRpZgogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KIAkvKiBUT0RPOiBGaXggdGhlc2UgdmFsdWVzLi4uICovCiAJaXdlLmNtZCA9IElXRVZRVUFMOwpAQCAtMjU3LDIxICsxOTMsMTMgQEAKIAlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkpCiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKIAlpd2UudS5xdWFsLnVwZGF0ZWQgPSA3OwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnRfcnNsKGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0jZWxzZQotICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50X3JzbChzdGFydCwgc3RvcCwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotI2VuZGlmCiAJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJcCA9IGN1c3RvbTsKIAogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7Ci0jZWxzZQotICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgY3VzdG9tKTsKLSNlbmRpZgogI2lmIChXSVJFTEVTU19FWFQgPCAxOCkKIAlpZiAoaWVlZS0+d3BhX2VuYWJsZWQgJiYgbmV0d29yay0+d3BhX2llX2xlbil7CiAJCWNoYXIgYnVmW01BWF9XUEFfSUVfTEVOICogMiArIDMwXTsKQEAgLTI4NSwxMSArMjEzLDcgQEAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2VuZGlmCiAgICAgICAgIH0KIAogCWlmIChpZWVlLT53cGFfZW5hYmxlZCAmJiBuZXR3b3JrLT5yc25faWVfbGVuKXsKQEAgLTMwNCwxMSArMjI4LDcgQEAKIAkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KHN0YXJ0LCBzdG9wLCAmaXdlLCBidWYpOwotI2VuZGlmCiAgICAgICAgIH0KICNlbHNlCiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKQEAgLTMxOCwxMSArMjM4LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+d3BhX2llLCBuZXR3b3JrLT53cGFfaWVfbGVuKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT53cGFfaWVfbGVuOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbmRpZgogICAgICAgICB9CiAJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKIAlpZiAobmV0d29yay0+cnNuX2llX2xlbikKQEAgLTMzMSwxMSArMjQ3LDcgQEAKIAkJbWVtY3B5KGJ1ZiwgbmV0d29yay0+cnNuX2llLCBuZXR3b3JrLT5yc25faWVfbGVuKTsKIAkJaXdlLmNtZCA9IElXRVZHRU5JRTsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBuZXR3b3JrLT5yc25faWVfbGVuOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChzdGFydCwgc3RvcCwgJml3ZSwgYnVmKTsKLSNlbmRpZgogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMzQ4LDExICsyNjAsNyBAQAogCQkgICAgICAiIExhc3QgYmVhY29uOiAlbHVtcyBhZ28iLCAoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyAoSFogLyAxMDApKTsKIAlpd2UudS5kYXRhLmxlbmd0aCA9IHAgLSBjdXN0b207CiAJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpCiAgICAgICAgICAgICBzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBjdXN0b20pOwotI2Vsc2UKLSAgICAgICAgICAgIHN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7Ci0jZW5kaWYKIAogCXJldHVybiBzdGFydDsKIH0KQEAgLTYzMiw3ICs1NDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCWludCByZXQgPSAwOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CiAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKQEAgLTgwNyw3ICs3MTQsNiBAQAogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHJlc2V0X3BvcnQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwogICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtODcwLDcgKzc3Niw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewogICAgICAgICBjYXNlIElXX01MTUVfREVBVVRIOgpAQCAtODgwLDcgKzc4NSw2IEBACiAJIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwogICAgICAgICB9Ci0jZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg4LDcgKzc5Miw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQogewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAgICAgICAgIGNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKIAkgICAgIC8qbmVlZCB0byBzdXBwb3J0IHdwYTIgaGVyZSovCkBAIC05NDYsMjMgKzg0OSwxMiBAQAogCWRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogI2VuZGlmCiAjaWYgMQogaW50IGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqaWUsIHNpemVfdCBsZW4pCiB7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaWYgMAotCXByaW50aygiPT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCXsKLQkJaW50IGk7Ci0JCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQlwcmludGsoIiUyeCAiLCBpZVtpXSYweGZmKTsKLQkJcHJpbnRrKCJcbiIpOwotCX0KLSNlbmRpZgogCXU4ICpidWY7CiAKIAlpZiAobGVuPk1BWF9XUEFfSUVfTEVOIHx8IChsZW4gJiYgaWUgPT0gTlVMTCkpCkBAIC05OTIsMjkgKzg4NCw3IEBACiAJCWllZWUtPndwYV9pZSA9IE5VTEw7CiAJCWllZWUtPndwYV9pZV9sZW4gPSAwOwogCX0KLSNlbmRpZgogCXJldHVybiAwOwogCiB9CiAjZW5kaWYKLQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9nZW5faWUpOwotI2lmIChXSVJFTEVTU19FWFQgPj0gMTgpCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9tbG1lKTsKLS8vRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfc2V0X2F1dGgpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dCk7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfZXh0KTsKLSNlbmRpZgotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfc2Nhbik7Ci0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGUpOwotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKTsKLSNlbHNlCi0vL0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9tbG1lKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9hdXRoKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0KTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X2dldF9zY2FuKTsKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3d4X3NldF9lbmNvZGUpOwotLy9FWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfd3hfZ2V0X2VuY29kZSk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCA0YzRiMWRmLi5iMGM5Yzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC0xMDI0LDE3ICsxMDI0LDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIHZvaWQgSFRTZXRDb25uZWN0QndNb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCBIVF9DSEFOTkVMX1dJRFRICUJhbmR3aWR0aCwgSFRfRVhUQ0hOTF9PRkZTRVQJT2Zmc2V0KTsKLSNpZiAwCi0vL0kgbmVlZCBtb3ZlIHRoaXMgZnVuY3Rpb24gdG8gb3RoZXIgcGxhY2VzLCBzdWNoIGFzIHJ4PwotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKLXZvaWQgSFRPbkFzc29jUnNwX3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgaHRfb25Bc3NSc3ApOwotI2Vsc2UKLXZvaWQgSFRPbkFzc29jUnNwX3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotI2VuZGlmCi0jZW5kaWYKIHZvaWQgSFRPbkFzc29jUnNwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CkBAIC0xNzYwLDkgKzE3NDksMyBAQAogCiAJcEhUSW5mby0+YlN3QndJblByb2dyZXNzID0gZmFsc2U7CiB9Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLS8vRVhQT1JUX1NZTUJPTF9OT1ZFUlMoSFRVcGRhdGVTZWxmQW5kUGVlclNldHRpbmcpOwotI2Vsc2UKLS8vRVhQT1JUX1NZTUJPTChIVFVwZGF0ZVNlbGZBbmRQZWVyU2V0dGluZyk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5jCmluZGV4IDczOTFmNWYuLjhiZDViMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuYwpAQCAtNTAxLDEzICs1MDEsMTMgQEAKIAkJCQlpZigocHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID09IGVSZk9mZikgJiYgUlRfSU5fUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpKQogCQkJCXsgLy8gVGhlIGN1cnJlbnQgUkYgc3RhdGUgaXMgT0ZGIGFuZCB0aGUgUkYgT0ZGIGxldmVsIGlzIGhhbHRpbmcgdGhlIE5JQywgcmUtaW5pdGlhbGl6ZSB0aGUgTklDLgogCQkJCQlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKLQkJCQkJdTMyIEluaXRpbGl6ZUNvdW50ID0gMzsKKwkJCQkJdTMyIEluaXRpYWxpemVDb3VudCA9IDM7CiAJCQkJCWRvCiAJCQkJCXsKLQkJCQkJCUluaXRpbGl6ZUNvdW50LS07CisJCQkJCQlJbml0aWFsaXplQ291bnQtLTsKIAkJCQkJCXByaXYtPlJlZ1JmT2ZmID0gZmFsc2U7CiAJCQkJCQlydHN0YXR1cyA9IE5pY0lGRW5hYmxlTklDKGRldik7Ci0JCQkJCX13aGlsZSggKHJ0c3RhdHVzICE9IHRydWUpICYmKEluaXRpbGl6ZUNvdW50ID4wKSApOworCQkJCQl9d2hpbGUoIChydHN0YXR1cyAhPSB0cnVlKSAmJihJbml0aWFsaXplQ291bnQgPjApICk7CiAKIAkJCQkJaWYocnRzdGF0dXMgIT0gdHJ1ZSkKIAkJCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oCmluZGV4IGY0YmU5Y2MuLjg2NWNkYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFLmgKQEAgLTE0NjgsNyArMTQ2OCw2IEBACiAKICNlbmRpZgogYm9vbCBpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBydGw4MTl4RV90eF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzaG9ydCBydGw4MTkyX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmKiBza2IpOwogdTMyIHJlYWRfY2FtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpOwogdm9pZCB3cml0ZV9jYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpAQCAtMTUwMywxMCArMTUwMiw5IEBACiB2b2lkIHJ0bDgxODVfdHhfYW50ZW5uYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhbnQpOwogdm9pZCBydGw4MTg3X3NldF9yeGNvbmYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvL3Nob3J0IGNoZWNrX25pY19lbm91Z2hfZGVzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBwcmlvcml0eV90IHByaW9yaXR5KTsKLXZvaWQgcnRsODE5Ml9zdGFydF9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIENhbVJlc2V0QWxsRW50cnkoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiB2b2lkIEVuYWJsZUhXU2VjdXJpdHlDb25maWc4MTkyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBzZXRLZXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggRW50cnlObywgdTggS2V5SW5kZXgsIHUxNiBLZXlUeXBlLCB1OCAqTWFjQWRkciwgdTggRGVmYXVsdEtleSwgdTMyICpLZXlDb250ZW50ICk7Cit2b2lkIHNldEtleShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBFbnRyeU5vLCB1OCBLZXlJbmRleCwgdTE2IEtleVR5cGUsIGNvbnN0IHU4ICpNYWNBZGRyLCB1OCBEZWZhdWx0S2V5LCB1MzIgKktleUNvbnRlbnQgKTsKIHZvaWQgQ2FtUHJpbnREYmdSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiBleHRlcm4Jdm9pZAlkbV9jY2tfdHhwb3dlcl9hZGp1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldixib29sICBiaW5jaDE0KTsKIGV4dGVybiB2b2lkIGZpcm13YXJlX2luaXRfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IGViNDE0MDIuLjRjZDA3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC05MiwxMiArOTIsOCBAQAogCQkJLy8JQ09NUF9QT1dFUl9UUkFDS0lORwl8CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAJQ09NUF9JTlRSICAgICAgIHwKIAkJCQlDT01QX0VSUiA7IC8vYWx3YXlzIG9wZW4gZXJyIGZsYWdzIG9uCi0jaWZuZGVmIFBDSV9ERVZJQ0UKLSNkZWZpbmUgUENJX0RFVklDRSh2ZW5kLGRldilcCi0JLnZlbmRvcj0odmVuZCksLmRldmljZT0oZGV2KSxcCi0JLnN1YnZlbmRvcj1QQ0lfQU5ZX0lELC5zdWJkZXZpY2U9UENJX0FOWV9JRAotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE5Ml9wY2lfaWRfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxOTJfcGNpX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAjaWZkZWYgUlRMODE5MFAKIAkvKiBSZWFsdGVrICovCiAJLyogRGxpbmsgKi8KQEAgLTE1NSw2ICsxNTEsMTYgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHZvaWQgcnRsODE5Ml9zdGFydF9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBydGw4MTkyX3N0b3BfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBydGw4MTkyX2lycV9yeF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KTsKK3N0YXRpYyB2b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgcnRsODE5Ml9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdik7CitzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE5Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmV0ZGV2KTsKK3N0YXRpYyB2b2lkIHJ0bDgxOTJfdHJ5X3dha2VfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSk7CitzdGF0aWMgdm9pZCBydGw4MTl4RV90eF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAKIHR5cGVkZWYgc3RydWN0IF9DSEFOTkVMX0xJU1QKQEAgLTE2Myw3ICsxNjksNyBAQAogCXU4CUxlbjsKIH1DSEFOTkVMX0xJU1QsICpQQ0hBTk5FTF9MSVNUOwogCi1zdGF0aWMgQ0hBTk5FTF9MSVNUIENoYW5uZWxQbGFuW10gPSB7CitzdGF0aWMgY29uc3QgQ0hBTk5FTF9MSVNUIENoYW5uZWxQbGFuW10gPSB7CiAJe3sxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwzNiw0MCw0NCw0OCw1Miw1Niw2MCw2NCwxNDksMTUzLDE1NywxNjEsMTY1fSwyNH0sICAJCS8vRkNDCiAJe3sxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMX0sMTF9LCAgICAgICAgICAgICAgICAgICAgCQkJCS8vSUMKIAl7ezEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDM2LDQwLDQ0LDQ4LDUyLDU2LDYwLDY0fSwyMX0sICAJLy9FVFNJCkBAIC0zNDksOCArMzU1LDggQEAKIAkvL3N0cnVjdCByODE5Ml9wcml2KiBwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAkvL3N0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCi0Jc3RhdGljIHU4IGNjbXBfaWVbNF0gPSB7MHgwMCwweDUwLDB4ZjIsMHgwNH07Ci0Jc3RhdGljIHU4IGNjbXBfcnNuX2llWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDR9OworCXN0YXRpYyBjb25zdCB1OCBjY21wX2llWzRdID0gezB4MDAsMHg1MCwweGYyLDB4MDR9OworCXN0YXRpYyBjb25zdCB1OCBjY21wX3Jzbl9pZVs0XSA9IHsweDAwLCAweDBmLCAweGFjLCAweDA0fTsKIAlpbnQgd3BhX2llX2xlbj0gaWVlZS0+d3BhX2llX2xlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEqIGNyeXB0OwogCWludCBlbmNyeXB0OwpAQCAtNDg3LDE1ICs0OTMsMTMgQEAKIC8qIHRoaXMgbWlnaHQgc3RpbGwgY2FsbGVkIGluIHdoYXQgd2FzIHRoZSBQSFkgcnRsODE4NS9ydGw4MTkyIGNvbW1vbiBjb2RlCiAgKiBwbGFucyBhcmUgdG8gcG9zc2liaWx0eSB0dXJuIGl0IGFnYWluIGluIG9uZSBjb21tb24gY29kZS4uLgogICovCi1pbmxpbmUgdm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogfQogCiAKIC8vd2FybmluZyBtZXNzYWdlIFdCCi1pcnFyZXR1cm5fdCBydGw4MTkyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZXRkZXYpOwogLy9zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgxOTJfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIHJ0bDgxOTJfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLy92b2lkIHJ0bDgxOTJfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgcnRsODE5Ml9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAvL3ZvaWQgcnRsODE5Ml9ycV90eF9hY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKQEAgLTk0MCw3ICs5NDQsNyBAQAogICogIEhJR0hfUVVFVUUgICAgID09PT4gICAgICAgICAgICAgICAgICAgICAgICA3CiAgKiAgQkVBQ09OX1FVRVVFICAgPT09PiAgICAgICAgICAgICAgICAgICAgICAgIDgKICAqICAqLwotc3RhdGljIHUzMiBUWF9ERVNDX0JBU0VbXSA9IHtCS1FEQSwgQkVRREEsIFZJUURBLCBWT1FEQSwgSENDQVFEQSwgQ1FEQSwgTVFEQSwgSFFEQSwgQlFEQX07CitzdGF0aWMgY29uc3QgdTMyIFRYX0RFU0NfQkFTRVtdID0ge0JLUURBLCBCRVFEQSwgVklRREEsIFZPUURBLCBIQ0NBUURBLCBDUURBLCBNUURBLCBIUURBLCBCUURBfTsKIHZvaWQgcnRsODE5Ml90eF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xMTE2LDcgKzExMjAsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB1MTYgcnRsX3JhdGVbXSA9IHsxMCwyMCw1NSwxMTAsNjAsOTAsMTIwLDE4MCwyNDAsMzYwLDQ4MCw1NDB9Oworc3RhdGljIGNvbnN0IHUxNiBydGxfcmF0ZVtdID0gezEwLDIwLDU1LDExMCw2MCw5MCwxMjAsMTgwLDI0MCwzNjAsNDgwLDU0MH07CiBpbmxpbmUgdTE2IHJ0bDgxOTJfcmF0ZTJyYXRlKHNob3J0IHJhdGUpCiB7CiAJaWYgKHJhdGUgPjExKSByZXR1cm4gMDsKQEAgLTEyNTIsOCArMTI1Niw2IEBACiB9CiAKIAotdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpOwotCiBzdGF0aWMgdm9pZCBydGw4MTkyX3R4X2lzcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpbykKIHsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xNzMzLDExICsxNzM1LDYgQEAKICAgICBwZGVzYy0+Tm9FbmMgPSAxOwogICAgIHBkZXNjLT5TZWNUeXBlID0gMHgwOwogICAgIGlmICh0Y2JfZGVzYy0+Ykh3U2VjKSB7Ci0gICAgICAgIHN0YXRpYyB1OCB0bXAgPTA7Ci0gICAgICAgIGlmICghdG1wKSB7Ci0gICAgICAgICAgICBwcmludGsoIj09Pj09PT09PT09PT09PT09PT1odyBzZWNcbiIpOwotICAgICAgICAgICAgdG1wID0gMTsKLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKHByaXYtPmllZWU4MDIxMS0+cGFpcndpc2Vfa2V5X3R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgS0VZX1RZUEVfV0VQNDA6CiAgICAgICAgICAgICBjYXNlIEtFWV9UWVBFX1dFUDEwNDoKQEAgLTE5ODgsNyArMTk4NSw3IEBACiAvKgogKiBiYWNrZ3JvdW5kIHN1cHBvcnQgdG8gcnVuIFFvUyBhY3RpdmF0ZSBmdW5jdGlvbmFsaXR5CiAqLwotc3RhdGljIGludCBXRENBUEFSQV9BRERbXSA9IHtFRENBUEFSQV9CRSxFRENBUEFSQV9CSyxFRENBUEFSQV9WSSxFRENBUEFSQV9WT307CitzdGF0aWMgY29uc3QgaW50IFdEQ0FQQVJBX0FERFtdID0ge0VEQ0FQQVJBX0JFLEVEQ0FQQVJBX0JLLEVEQ0FQQVJBX1ZJLEVEQ0FQQVJBX1ZPfTsKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfcW9zX2FjdGl2YXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspCiB7CiAgICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE5Ml9wcml2LCBxb3NfYWN0aXZhdGUpOwpAQCAtMjY0NiwxMSArMjY0Myw2IEBACiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwogfQogCi1leHRlcm4gIHZvaWQgICAgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLXZvaWQgcnRsODE5Ml9pcnFfcnhfdGFza2xldChzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdik7Ci12b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpOwotdm9pZCBydGw4MTkyX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByODE5Ml9wcml2ICpwcml2KTsKIC8vaW5pdCB0YXNrbGV0IGFuZCB3YWl0X3F1ZXVlIGhlcmUuIG9ubHkgMi42IGFib3ZlIGtlcm5lbCBpcyBjb25zaWRlcmVkCiAjZGVmaW5lIERSVl9OQU1FICJ3bGFuMCIKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfaW5pdF9wcml2X3Rhc2soc3RydWN0IG5ldF9kZXZpY2UqIGRldikKQEAgLTM4MDcsNyArMzc5OSw3IEBACiAKIH0KIAotdm9pZCBydGw4MTkyX3ByZXBhcmVfYmVhY29uKHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgcnRsODE5Ml9wcmVwYXJlX2JlYWNvbihzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM4MzcsNyArMzgyOSw3IEBACiAgKiBydGw4MTkyX2JlYWNvbl90eF9lbmFibGUoKS4gcnRsODE5Ml9iZWFjb25fdHhfZGlzYWJsZSgpIG1pZ2h0CiAgKiBiZSB1c2VkIHRvIHN0b3AgYmVhY29uIHRyYW5zbWlzc2lvbgogICovCi12b2lkIHJ0bDgxOTJfc3RhcnRfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBydGw4MTkyX3N0YXJ0X2JlYWNvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldCA9ICZwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yazsKQEAgLTQxMjQsMTQgKzQxMTYsMTQgQEAKIHsKIAl1OCBFbnRyeUlkID0gMDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JdTgqCU1hY0FkZHIgPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5ic3NpZDsKKwljb25zdCB1OCoJTWFjQWRkciA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkOwogCi0Jc3RhdGljIHU4CUNBTV9DT05TVF9BRERSWzRdWzZdID0geworCXN0YXRpYyBjb25zdCB1OAlDQU1fQ09OU1RfQUREUls0XVs2XSA9IHsKIAkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAogCQl7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0sCiAJCXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyfSwKIAkJezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDN9fTsKLQlzdGF0aWMgdTgJQ0FNX0NPTlNUX0JST0FEW10gPQorCXN0YXRpYyBjb25zdCB1OAlDQU1fQ09OU1RfQlJPQURbXSA9CiAJCXsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKIAogCVJUX1RSQUNFKENPTVBfU0VDLCAiQ2FtUmVzdG9yZUFsbEVudHJ5OiBcbiIpOwpAQCAtNDMxOCw3ICs0MzEwLDYgQEAKIAkJCWRlbF90aW1lcl9zeW5jKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsX2RlbGF5ZWRfd29yaygmaWVlZS0+YXNzb2NpYXRlX3JldHJ5X3dxKTsKIAkJCWllZWU4MDIxMV9zdG9wX3NjYW4oaWVlZSk7Ci0JCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQkJdXAoJmllZWUtPnd4X3NlbSk7CiAJCX0KIAkJZWxzZXsKQEAgLTQ2NjksNyArNDY2MCw3IEBACiB9CiAKIAotdm9pZCBydGw4MTl4X3dhdGNoZG9nX3dxY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgcnRsODE5eF93YXRjaGRvZ193cWNhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CiAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IHI4MTkyX3ByaXYsd2F0Y2hfZG9nX3dxKTsKQEAgLTYwNzYsNyArNjA2Nyw3IEBACiAJfQogfQogCi12b2lkIHJ0bDgxOTJfaXJxX3R4X3Rhc2tsZXQoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBydGw4MTkyX2lycV90eF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQogewogICAgICAgIHJ0bDgxOTJfdHhfcmVzdW1lKHByaXYtPmllZWU4MDIxMS0+ZGV2KTsKIH0KQEAgLTYzMDUsNyArNjI5Niw3IEBACiAKIH0KIAotdm9pZCBydGw4MTkyX2lycV9yeF90YXNrbGV0KHN0cnVjdCByODE5Ml9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgcnRsODE5Ml9pcnFfcnhfdGFza2xldChzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdikKIHsKICAgICAgICBydGw4MTkyX3J4KHByaXYtPmllZWU4MDIxMS0+ZGV2KTsKIAkvKiB1bm1hc2sgUkRVICovCkBAIC02NjQwLDcgKzY2MzEsNyBAQAogfQogCiAvL3dhcm5pbmcgbWVzc2FnZSBXQgotaXJxcmV0dXJuX3QgcnRsODE5Ml9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmV0ZGV2KQorc3RhdGljIGlycXJldHVybl90IHJ0bDgxOTJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5ldGRldikKIHsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIG5ldGRldjsKICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CkBAIC02Nzg0LDcgKzY3NzUsNyBAQAogICAgIHJldHVybiBJUlFfSEFORExFRDsKIH0KIAotdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpCitzdGF0aWMgdm9pZCBydGw4MTkyX3RyeV93YWtlX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcmkpCiB7CiAjaWYgMAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02ODQ3LDcgKzY4MzgsNyBAQAogCQl1OCBFbnRyeU5vLAogCQl1OCBLZXlJbmRleCwKIAkJdTE2IEtleVR5cGUsCi0JCXU4ICpNYWNBZGRyLAorCQljb25zdCB1OCAqTWFjQWRkciwKIAkJdTggRGVmYXVsdEtleSwKIAkJdTMyICpLZXlDb250ZW50ICkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYwppbmRleCBhMjQ5ZjAwLi5hNTg4NGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9kbS5jCkBAIC0yNiwyMCArMjYsMjAgQEAKIC8vIEluZGljYXRlIGRpZmZlcmVudCBBUCB2ZW5kb3IgZm9yIElPVCBpc3N1ZS4KIC8vCiAjaWZkZWYgIFJUTDgxOTBQCi1zdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19ETFtIVF9JT1RfUEVFUl9NQVhdID0KK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQogeyAweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwJMHg1ZTQzMjJ9Owotc3RhdGljIHUzMiBlZGNhX3NldHRpbmdfVUxbSFRfSU9UX1BFRVJfTUFYXSA9CitzdGF0aWMgY29uc3QgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KIHsgMHg1ZTQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKICNlbHNlCiAjaWZkZWYgUlRMODE5MkUKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfVUxbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHhhNDRmLAkJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjJ9OwogI2Vsc2UKLXN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQorc3RhdGljIGNvbnN0IHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9CiB7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZWE0NGYsIAkweDVlNDMyMn07Ci1zdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KK3N0YXRpYyBjb25zdCB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQogeyAweDVlNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweDVlYTQ0ZiwgCTB4NWVhNDRmLCAJMHg1ZTQzMjJ9OwogI2VuZGlmCiAjZW5kaWYKQEAgLTU5Miw3ICs1OTIsNyBAQAogCiAvL09GRE0gZGVmYXVsdCBhdCAwZGIsIGluZGV4PTYuCiAjaWZuZGVmIFJUTDgxOTBQCi1zdGF0aWMgdTMyIE9GRE1Td2luZ1RhYmxlW09GRE1fVGFibGVfTGVuZ3RoXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgT0ZETVN3aW5nVGFibGVbT0ZETV9UYWJsZV9MZW5ndGhdID0gewogCTB4N2Y4MDAxZmUsCS8vIDAsICs2ZGIKIAkweDcxYzAwMWM3LAkvLyAxLCArNWRiCiAJMHg2NTQwMDE5NSwJLy8gMiwgKzRkYgpAQCAtNjEzLDcgKzYxMyw3IEBACiAJMHgxMjAwMDA0OCwJLy8gMTcsIC0xMWRiCiAJMHgxMDAwMDA0MAkvLyAxOCwgLTEyZGIKIH07Ci1zdGF0aWMgdTgJQ0NLU3dpbmdUYWJsZV9DaDFfQ2gxM1tDQ0tfVGFibGVfbGVuZ3RoXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBDQ0tTd2luZ1RhYmxlX0NoMV9DaDEzW0NDS19UYWJsZV9sZW5ndGhdWzhdID0gewogCXsweDM2LCAweDM1LCAweDJlLCAweDI1LCAweDFjLCAweDEyLCAweDA5LCAweDA0fSwJLy8gMCwgKzBkYiA9PT0+IENDSzQwTSBkZWZhdWx0CiAJezB4MzAsIDB4MmYsIDB4MjksIDB4MjEsIDB4MTksIDB4MTAsIDB4MDgsIDB4MDN9LAkvLyAxLCAtMWRiCiAJezB4MmIsIDB4MmEsIDB4MjUsIDB4MWUsIDB4MTYsIDB4MGUsIDB4MDcsIDB4MDN9LAkvLyAyLCAtMmRiCkBAIC02MjgsNyArNjI4LDcgQEAKIAl7MHgwZiwgMHgwZiwgMHgwZCwgMHgwYiwgMHgwOCwgMHgwNSwgMHgwMywgMHgwMX0JLy8gMTEsIC0xMWRiCiB9OwogCi1zdGF0aWMgdTgJQ0NLU3dpbmdUYWJsZV9DaDE0W0NDS19UYWJsZV9sZW5ndGhdWzhdID0geworc3RhdGljIGNvbnN0IHU4IENDS1N3aW5nVGFibGVfQ2gxNFtDQ0tfVGFibGVfbGVuZ3RoXVs4XSA9IHsKIAl7MHgzNiwgMHgzNSwgMHgyZSwgMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDAsICswZGIgID09PT4gQ0NLNDBNIGRlZmF1bHQKIAl7MHgzMCwgMHgyZiwgMHgyOSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDEsIC0xZGIKIAl7MHgyYiwgMHgyYSwgMHgyNSwgMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCS8vIDIsIC0yZGIKQEAgLTIwOTQsOCArMjA5NCw2IEBACiAJCWRtX2N0cmxfaW5pdGdhaW5fYnlyc3NpX2J5X2Z3ZmFsc2VfYWxhcm0oZGV2KTsKIAllbHNlIGlmKGRtX2RpZ3RhYmxlLmRpZ19hbGdvcml0aG0gPT0gRElHX0FMR09fQllfUlNTSSkKIAkJZG1fY3RybF9pbml0Z2Fpbl9ieXJzc2lfYnlfZHJpdmVycnNzaShkZXYpOwotCWVsc2UKLQkJcmV0dXJuOwogfQogCiAKQEAgLTI5MzgsOCArMjkzNiw2IEBACiAJUlRfUkZfUE9XRVJfU1RBVEUJZVJmUG93ZXJTdGF0ZVRvU2V0OwogCWJvb2wgYkFjdHVhbGx5U2V0ID0gZmFsc2U7CiAKLQkJYkFjdHVhbGx5U2V0PWZhbHNlOwotCiAJCWlmKCFwcml2LT51cCkKIAkJewogCQlSVF9UUkFDRSgoQ09NUF9JTklUIHwgQ09NUF9QT1dFUiB8IENPTVBfUkYpLCJkbV9ncGlvX2NoYW5nZV9yZl9jYWxsYmFjaygpOiBDYWxsYmFjayBmdW5jdGlvbiBicmVha3Mgb3V0ISFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jCmluZGV4IDBiMGYzOWMuLjU3NDJjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIFJBVEVfQ09VTlQgMTIKLXN0YXRpYyB1MzIgcnRsODE4MF9yYXRlc1tdID0gezEwMDAwMDAsMjAwMDAwMCw1NTAwMDAwLDExMDAwMDAwLAorc3RhdGljIGNvbnN0IHUzMiBydGw4MTgwX3JhdGVzW10gPSB7MTAwMDAwMCwyMDAwMDAwLDU1MDAwMDAsMTEwMDAwMDAsCiAJNjAwMDAwMCw5MDAwMDAwLDEyMDAwMDAwLDE4MDAwMDAwLDI0MDAwMDAwLDM2MDAwMDAwLDQ4MDAwMDAwLDU0MDAwMDAwfTsKIAogCkBAIC0xMzcsMTYxICsxMzcsNiBAQAogCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOwogfQogCi0jaWZkZWYgSk9ITl9JT0NUTAotdTE2IHJlYWRfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKTsKLXZvaWQgd3JpdGVfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUxNiBkYXRhKTsKLXUzMiBqb2huX3JlYWRfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOwotdm9pZCBfd3JpdGVfcnRsODIyNShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUxNiBkYXRhKTsKLQotc3RhdGljIGludCByODE5Ml93eF9yZWFkX3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1OCBhZGRyOwotCXUxNiBkYXRhMTsKLQotCWRvd24oJnByaXYtPnd4X3NlbSk7Ci0KLQotCWdldF91c2VyKGFkZHIsKHU4Kil3cnF1LT5kYXRhLnBvaW50ZXIpOwotCWRhdGExID0gcmVhZF9ydGw4MjI1KGRldiwgYWRkcik7Ci0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhMTsKLQotCXVwKCZwcml2LT53eF9zZW0pOwotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgdTggYWRkcjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0gICAgICAgIGdldF91c2VyKGFkZHIsICh1OCopd3JxdS0+ZGF0YS5wb2ludGVyKTsKLQl3cml0ZV9ydGw4MjI1KGRldiwgYWRkciwgd3JxdS0+ZGF0YS5sZW5ndGgpOwotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotCXJldHVybiAwOwotCi19Ci0KLXZvaWQgcnRsODE4N193cml0ZV9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyLCB1MzIgZGF0YSk7Ci11OCBydGw4MTg3X3JlYWRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTggYWRyLCB1MzIgZGF0YSk7Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfcmVhZF9iYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQl1OCBkYXRhYmI7Ci0jaWYgMAotCWludCBpOwotCWZvcihpPTA7aTwxMjtpKyspIHByaW50aygiJTh4XG4iLCByZWFkX2NhbShkZXYsIGkpICk7Ci0jZW5kaWYKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0JZGF0YWJiID0gcnRsODE4N19yZWFkX3BoeShkZXYsICh1OCl3cnF1LT5kYXRhLmxlbmd0aCwgMHgwMDAwMDAwMCk7Ci0Jd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhYmI7Ci0KLQl1cCgmcHJpdi0+d3hfc2VtKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBydGw4MTg3X3dyaXRlX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIsIHUzMiBkYXRhKTsKLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfYmIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotICAgICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0gICAgICAgIHU4IGRhdGFiYjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0gICAgICAgIGdldF91c2VyKGRhdGFiYiwgKHU4Kil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICBydGw4MTg3X3dyaXRlX3BoeShkZXYsIHdycXUtPmRhdGEubGVuZ3RoLCBkYXRhYmIpOwotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotICAgICAgICByZXR1cm4gMDsKLQotfQotCi0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfd3JpdGVfbmljYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgdTMyIGFkZHI7Ci0KLSAgICAgICAgZG93bigmcHJpdi0+d3hfc2VtKTsKLQotICAgICAgICBnZXRfdXNlcihhZGRyLCAodTMyKil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICB3cml0ZV9uaWNfYnl0ZShkZXYsIGFkZHIsIHdycXUtPmRhdGEubGVuZ3RoKTsKLQotICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0KLX0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfcmVhZF9uaWNiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLSAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotICAgICAgICB1MzIgYWRkcjsKLSAgICAgICAgdTE2IGRhdGExOwotCi0gICAgICAgIGRvd24oJnByaXYtPnd4X3NlbSk7Ci0KLSAgICAgICAgZ2V0X3VzZXIoYWRkciwodTMyKil3cnF1LT5kYXRhLnBvaW50ZXIpOwotICAgICAgICBkYXRhMSA9IHJlYWRfbmljX2J5dGUoZGV2LCBhZGRyKTsKLSAgICAgICAgd3JxdS0+ZGF0YS5sZW5ndGggPSBkYXRhMTsKLQotICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcjgxOTJfd3hfZ2V0X2FwX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0gICAgICAgIHN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwotCWludCBuYW1lX2xlbjsKLQotICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwotCi0JLy9jb3VudCB0aGUgbGVuZ3RoIG9mIGlucHV0IHNzaWQKLQlmb3IobmFtZV9sZW49MCA7ICgoY2hhciopd3JxdS0+ZGF0YS5wb2ludGVyKVtuYW1lX2xlbl0hPSdcMCcgOyBuYW1lX2xlbisrKTsKLQotCS8vc2VhcmNoIGZvciB0aGUgY29ycmVzcG9kaW5nIGluZm8gd2hpY2ggaXMgcmVjZWl2ZWQKLSAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0YXJnZXQsICZpZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAoICh0YXJnZXQtPnNzaWRfbGVuID09IG5hbWVfbGVuKSAmJgotCQkgICAgIChzdHJuY21wKHRhcmdldC0+c3NpZCwgKGNoYXIqKXdycXUtPmRhdGEucG9pbnRlciwgbmFtZV9sZW4pPT0wKSl7Ci0JCQlpZih0YXJnZXQtPndwYV9pZV9sZW4+MCB8fCB0YXJnZXQtPnJzbl9pZV9sZW4+MCApCi0JCQkJLy9zZXQgZmxhZ3M9MSB0byBpbmRpY2F0ZSB0aGlzIGFwIGlzIFdQQQotCQkJCXdycXUtPmRhdGEuZmxhZ3MgPSAxOwotCQkJZWxzZSB3cnF1LT5kYXRhLmZsYWdzID0gMDsKLQotCi0JCWJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwotICAgICAgICByZXR1cm4gMDsKLX0KLQotCi0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHI4MTkyX3d4X3NldF9yYXd0eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwppbmRleCA3YmQ0ZmFlLi5mZmQxZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKQEAgLTcsNyArNyw3IEBACiAjaWZkZWYgRU5BQkxFX0RPVDExRAogI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKICNlbmRpZgotc3RhdGljIHUzMiBSRl9DSEFOTkVMX1RBQkxFX1pFQlJBW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIFJGX0NIQU5ORUxfVEFCTEVfWkVCUkFbXSA9IHsKIAkwLAogCTB4MDg1YywgLy8yNDEyIDEKIAkweDA4ZGMsIC8vMjQxNyAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggYjQyMmVhMS4uMjdiODlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtNCw1ICs0LDYgQEAKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCXNlbGVjdCBFRVBST01fOTNDWDYKKwlzZWxlY3QgQ1JZUFRPCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPCmluZGV4IDNjOGRhMTUuLmIxNTIwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8KQEAgLTEsNCArMSwxMCBAQAogVE9ETzoKKy0gbWVyZ2UgcmVhbHRla3MgYnVnZml4ZXMgYW5kIG5ldyBmZWF0dXJlcyBpbnRvIHRoZSBkcml2ZXI6CisgIC0gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBoZXJlOgorICAgIGh0dHA6Ly93d3cuZ2V0bmV0LmV1L3Byb2R1Y3RzX0dOLTYyMVUuaHRtbAorICAtIG5vdGU6CisgICAgcmVhbHRlayBoYXMgc3RyaXBwZWQgYWxvbW9zdCBhbGwgY29tbWVudHMgZnJvbSB0aGUgc291cmNlLAorICAgIHNvIHBsZWFzZSBsZWF2ZSBhbGwgY29tbWVudHMgdGhhdCBtYXkgaGVscCBpbiBkZXZlbG9wbWVudCBpbiB0aGUgY29kZS4KIC0gcHJlcGFyZSBwcml2YXRlIGllZWU4MDIxMSBzdGFjayBmb3IgbWVyZ2Ugd2l0aCBydGw4MTg3c2UncyB2ZXJzaW9uOgogICAtIHJlbW92ZSBydGw4MTkyc3UncyBzcGVjaWZpYyBkZWFkIGNvZGUKICAgLSBjbGVhbnVwIGllZWU4MDIxMS5oCkBAIC03LDcgKzEzLDYgQEAKIC0gc3dpdGNoIHRvIHVzZSBzaGFyZWQgImxpYnJ0bCIgaW5zdGVhZCBvZiBwcml2YXRlIGllZWU4MDIxMSBzdGFjawogLSBzd2l0Y2ggdG8gdXNlIExJQjgwMjExCiAtIHN3aXRjaCB0byB1c2UgTUFDODAyMTEKLS0gc3dpdGNoIHRvIHVzZSBFRVBST01fOTNDWDYKIC0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKIC0gY2hlY2twYXRjaC5wbCBmaXhlcwogLSBzcGFyc2UgZml4ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2RvdDExZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKaW5kZXggMjI0ODQ2Mi4uNjI3NWNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmMKQEAgLTEsMTEgKzEsMjEgQEAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCUZpbGU6Ci0vLwkJRG90MTFkLmMKLS8vCi0vLwlEZXNjcmlwdGlvbjoKLS8vCQlJbXBsZW1lbnQgODAyLjExZC4KLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZG90MTFkLmgiCiAKQEAgLTUwLDcgKzYwLDYgQEAKIAlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsKIAlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7CiAKLQkvL3ByaW50aygiRG90MTFkX1Jlc2V0KClcbiIpOwogfQogCiAvLwpAQCAtMTA1LDcgKzExNCw2IEBACiAJCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKCh1OCopcFRyaXBsZSArIDMpOwogCX0KICNpZiAxCi0JLy9wcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogQ2hhbm5lbCBMaXN0OlxuIik7CiAJcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7CiAJZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQogCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvZG90MTFkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaAppbmRleCA5MTNhYzVkLi42MmEyYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9kb3QxMWQuaApAQCAtMSwxMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKICNkZWZpbmUgX19JTkNfRE9UMTFEX0gKIAogI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCi0vLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4MwotCiB0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CiAJdTggRmlyc3RDaG5sOwogCXU4ICBOdW1DaG5sczsKQEAgLTE4LDcgKzM0LDYgQEAKIH1ET1QxMURfU1RBVEU7CiAKIHR5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7Ci0JLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CiAKIAlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKIApAQCAtMjgsOCArNDMsNiBAQAogCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsKIAogCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pCi0JLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLgotCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOwogCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOwogCiAJRE9UMTFEX1NUQVRFIFN0YXRlOwpAQCAtOTUsNCArMTA4LDQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKIAl1OCBjaGFubmVsCiApOwotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBiY2IyYjEyLi4xZDY3ODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMTY4LDYgKzE2OCwxMCBAQAogLyogUU9TIGNvbnRyb2wgKi8KICNkZWZpbmUgSUVFRTgwMjExX1FDVExfVElEICAgICAgICAgICAgICAweDAwMEYKIAorI2RlZmluZSBPVUlfU1VCVFlQRV9XTU1fSU5GTwkJMAorI2RlZmluZSBPVUlfU1VCVFlQRV9XTU1fUEFSQU0JMQorI2RlZmluZSBPVUlfU1VCVFlQRV9RT1NfQ0FQQUJJCTUKKwogLyogZGVidWcgbWFjcm9zICovCiAjZGVmaW5lIENPTkZJR19JRUVFODAyMTFfREVCVUcKICNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCkBAIC0xMTIwLDExICsxMTI0LDI3IEBACiAJQ09VTlRSWV9DT0RFX01LSyA9IDUsCiAJQ09VTlRSWV9DT0RFX01LSzEgPSA2LAogCUNPVU5UUllfQ09ERV9JU1JBRUwgPSA3LAotCUNPVU5UUllfQ09ERV9URUxFQywKLQlDT1VOVFJZX0NPREVfTUlDLAotCUNPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOCisJQ09VTlRSWV9DT0RFX1RFTEVDID0gOCwKKwlDT1VOVFJZX0NPREVfTUlDID0gOSwKKwlDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTiA9IDEwLAorCUNPVU5UUllfQ09ERV9XT1JMRF9XSURFXzEzID0gMTEsCisJQ09VTlRSWV9DT0RFX1RFTEVDX05FVEdFQVIgPSAxMiwKKwlDT1VOVFJZX0NPREVfTUFYCiB9OwogCisjZGVmaW5lCU5VTV9QTUtJRF9DQUNIRQkJMTYKKwordHlwZWRlZiBzdHJ1Y3QgX1JUX1BNS0lEX0xJU1QKK3sKKwl1OAkJCQkJCWJVc2VkOworCXU4IAkJCQkJCUJzc2lkWzZdOworCXU4CQkJCQkJUE1LSURbMTZdOworCXU4CQkJCQkJU3NpZEJ1ZlszM107CisJdTgqCQkJCQkJc3NpZF9vY3RldDsKKwl1MTYgCQkJCQlzc2lkX2xlbmd0aDsKK30gUlRfUE1LSURfTElTVCwgKlBSVF9QTUtJRF9MSVNUOworCisKICNpbmNsdWRlICJpZWVlODAyMTFfcjgxOTJzLmgiCiAKIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlIHsKQEAgLTExMzQsNiArMTE1NCw3IEBACiAJLyogaHcgc2VjdXJpdHkgcmVsYXRlZCAqLwogCXU4IGh3c2VjX2FjdGl2ZTsKIAlib29sIGlzX3NpbGVudF9yZXNldDsKKwlib29sIGZvcmNlX21pY19lcnJvcjsKIAlib29sIGlzX3JvYW1pbmc7CiAJYm9vbCBpZWVlX3VwOwogCWJvb2wgYlN1cHBvcnRSZW1vdGVXYWtlVXA7CkBAIC0xMjQ3LDYgKzEyNjgsNyBAQAogCWludCBiY3J4X3N0YV9rZXk7IC8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KIAkJCSAgICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCiAKKwlSVF9QTUtJRF9MSVNUCQlQTUtJRExpc3RbTlVNX1BNS0lEX0NBQ0hFXTsKIAkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KIAkvLyBlYWNoIHN0cmVhbWluZyBjb250YWluIGEgZW50cnkKIAlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgZnJhZ19jYWNoZVsxN11bSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOXTsKQEAgLTEyOTUsNiArMTMxNywxMCBAQAogCSAqLwogCXZvaWQgKnBEb3QxMWRJbmZvOwogCWJvb2wgYkdsb2JhbERvbWFpbjsKKworCXU4ICAgSWJzc1N0YXJ0Q2hubDsKKwl1OCAgIGlic3NfbWF4am9pbl9jaGFsOworCiAJaW50IHJhdGU7ICAgICAgIC8qIGN1cnJlbnQgcmF0ZSAqLwogCWludCBiYXNpY19yYXRlOwogCS8vRklYTUU6IHBsZWFjZSBjYWxsYmFjaywgc2VlIGlmIHJlZHVuZGFudCB3aXRoIHNvZnRtYWNfZmVhdHVyZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggODAxOTQyMy4uMjRlN2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTExLDcgKzExLDYgQEAKICAqCiAgKi8KIAotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIwMSw3ICsyMDAsNyBAQAogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1pbnQgX19pbml0IGllZWU4MDIxMV9jcnlwdG9faW5pdCh2b2lkKQoraW50IGllZWU4MDIxMV9jcnlwdG9faW5pdCh2b2lkKQogewogCWludCByZXQgPSAtRU5PTUVNOwogCkBAIC0yMjEsNyArMjIwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAppbmRleCBiNThhM2JjLi40MmU1MmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuaApAQCAtNDksNyArNDksNyBAQAogCSAqIFRoZXNlIGNhbiBiZSBOVUxMIGlmIGZ1bGwgTVNEVSBvcGVyYXRpb25zIGFyZSBub3QgbmVlZGVkLiAqLwogCWludCAoKmVuY3J5cHRfbXNkdSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpOwogCWludCAoKmRlY3J5cHRfbXNkdSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGtleWlkeCwgaW50IGhkcl9sZW4sCi0JCQkgICAgdm9pZCAqcHJpdik7CisJCQkgICAgdm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUpOwogCiAJaW50ICgqc2V0X2tleSkodm9pZCAqa2V5LCBpbnQgbGVuLCB1OCAqc2VxLCB2b2lkICpwcml2KTsKIAlpbnQgKCpnZXRfa2V5KSh2b2lkICprZXksIGludCBsZW4sIHU4ICpzZXEsIHZvaWQgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggNzdkZTk1Ny4uY2FlZTQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC05LDcgKzksNiBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKLS8vI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMzEsNyArMTMwLDYgQEAKIAlxY19pbmNsdWRlZCA9ICgoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpICYmCiAJCSAgICAgICAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpICYgMHgwOCkpOwogICAgICAgICAqLwotCS8vIGZpeGVkIGJ5IERhdmlkIDoyMDA2LjkuNgogCXFjX2luY2x1ZGVkID0gKChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSkgJiYKIAkJICAgICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgJiAweDgwKSk7CiAJYWFkX2xlbiA9IDIyOwpAQCAtMjEwLDcgKzIwOCw2IEBACiAJcG9zID0gc2tiX3B1c2goc2tiLCBDQ01QX0hEUl9MRU4pOwogCW1lbW1vdmUocG9zLCBwb3MgKyBDQ01QX0hEUl9MRU4sIGhkcl9sZW4pOwogCXBvcyArPSBoZHJfbGVuOwotLy8JbWljID0gc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTik7CiAKIAlpID0gQ0NNUF9QTl9MRU4gLSAxOwogCXdoaWxlIChpID49IDApIHsKQEAgLTI0MCw3ICsyMzcsNiBAQAogCQl1OCAqZSA9IGtleS0+dHhfZTsKIAkJdTggKnMwID0ga2V5LT50eF9zMDsKIAotCQkvL21pYyBpcyBtb3ZlZCB0byBoZXJlIGJ5IGpvaG4KIAkJbWljID0gc2tiX3B1dChza2IsIENDTVBfTUlDX0xFTik7CiAKIAkJY2NtcF9pbml0X2Jsb2NrcyhrZXktPnRmbSwgaGRyLCBrZXktPnR4X3BuLCBkYXRhX2xlbiwgYjAsIGIsIHMwKTsKQEAgLTQ0NSw3ICs0NDEsNiBAQAogCiB2b2lkIGllZWU4MDIxMV9jY21wX251bGwodm9pZCkKIHsKLS8vICAgIHByaW50aygiPT09PT09PT09PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuOwogfQogCkBAIC00NzAsNyArNDY1LDcgQEAKIAlyZXR1cm4gaWVlZTgwMjExX3JlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF9jY21wKTsKIH0KIAotdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b19jY21wX2V4aXQodm9pZCkKIHsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKCZpZWVlODAyMTFfY3J5cHRfY2NtcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwppbmRleCBhZGU1ZjZmLi41YWI5NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTksNyArOSw2IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTQzLDYgKzQyLDcgQEAKIAogCXUzMiByeF9pdjMyOwogCXUxNiByeF9pdjE2OworCWJvb2wgaW5pdGlhbGl6ZWQ7CiAJdTE2IHJ4X3R0YWtbNV07CiAJaW50IHJ4X3BoYXNlMV9kb25lOwogCXUzMiByeF9pdjMyX25ldzsKQEAgLTQzMyw4ICs0MzMsOCBAQAogCiAJaWYgKCF0Y2JfZGVzYy0+Ykh3U2VjKQogCXsKLQkJaWYgKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8Ci0JCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkgeworCQlpZiAoKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8CisJCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkmJnRrZXktPmluaXRpYWxpemVkKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKIAkJCQkiIHByZXZpb3VzIFRTQyAlMDh4JTA0eCByZWNlaXZlZCBUU0MgIgpAQCAtNDQ0LDYgKzQ0NCw3IEBACiAJCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CiAJCQlyZXR1cm4gLTQ7CiAJCX0KKyAgICAgICAgICAgICAgICB0a2V5LT5pbml0aWFsaXplZCA9IHRydWU7CiAKIAkJaWYgKGl2MzIgIT0gdGtleS0+cnhfaXYzMiB8fCAhdGtleS0+cnhfcGhhc2UxX2RvbmUpIHsKIAkJCXRraXBfbWl4aW5nX3BoYXNlMSh0a2V5LT5yeF90dGFrLCB0a2V5LT5rZXksIGhkci0+YWRkcjIsIGl2MzIpOwpAQCAtNDUyLDEwICs0NTMsOCBAQAogCQl0a2lwX21peGluZ19waGFzZTIocmM0a2V5LCB0a2V5LT5rZXksIHRrZXktPnJ4X3R0YWssIGl2MTYpOwogCiAJCXBsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW4gLSAxMjsKLQorCQlzZ19pbml0X29uZSgmc2csIHBvcywgcGxlbis0KTsKIAkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGtleS0+cnhfdGZtX2FyYzQsIHJjNGtleSwgMTYpOwotCQlzZ19pbml0X29uZSgmc2csIHBvcywgcGxlbiArIDQpOwotCiAJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQOiBmYWlsZWQgdG8gZGVjcnlwdCAiCkBAIC01NzEsMTIgKzU3MCw5IEBACiAKIAltaWNoYWVsX21pY19oZHIoc2tiLCB0a2V5LT50eF9oZHIpOwogCi0JLy8geyBkYXZpZCwgMjAwNi45LjEKLQkvLyBmaXggdGhlIHdwYSBwcm9jZXNzIHdpdGggd21tIGVuYWJsZWQuCiAJaWYoSUVFRTgwMjExX1FPU19IQVNfU0VRKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKIAkJdGtleS0+dHhfaGRyWzEyXSA9ICooc2tiLT5kYXRhICsgaGRyX2xlbiAtIDIpICYgMHgwNzsKIAl9Ci0JLy8gfQogCXBvcyA9IHNrYl9wdXQoc2tiLCA4KTsKIAogCWlmIChtaWNoYWVsX21pYyh0a2V5LT50eF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsxNl0sIHRrZXktPnR4X2hkciwKQEAgLTYwOCw3ICs2MDQsNyBAQAogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9taWNoYWVsX21pY192ZXJpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGtleWlkeCwKLQkJCQkgICAgIGludCBoZHJfbGVuLCB2b2lkICpwcml2KQorCQkJCSAgICAgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlKQogewogCXN0cnVjdCBpZWVlODAyMTFfdGtpcF9kYXRhICp0a2V5ID0gcHJpdjsKIAl1OCBtaWNbOF07CkBAIC02MjAsMTIgKzYxNiw5IEBACiAJCXJldHVybiAtMTsKIAogCW1pY2hhZWxfbWljX2hkcihza2IsIHRrZXktPnJ4X2hkcik7Ci0JLy8geyBkYXZpZCwgMjAwNi45LjEKLQkvLyBmaXggdGhlIHdwYSBwcm9jZXNzIHdpdGggd21tIGVuYWJsZWQuCiAJaWYoSUVFRTgwMjExX1FPU19IQVNfU0VRKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKIAkJdGtleS0+cnhfaGRyWzEyXSA9ICooc2tiLT5kYXRhICsgaGRyX2xlbiAtIDIpICYgMHgwNzsKIAl9Ci0JLy8gfQogCiAJaWYgKG1pY2hhZWxfbWljKHRrZXktPnJ4X3RmbV9taWNoYWVsLCAmdGtleS0+a2V5WzI0XSwgdGtleS0+cnhfaGRyLAogCQkJc2tiLT5kYXRhICsgaGRyX2xlbiwgc2tiLT5sZW4gLSA4IC0gaGRyX2xlbiwgbWljKSkKQEAgLTYzNyw5ICs2MzAsMTQgQEAKIAkJICAgICAgICJNU0RVIGZyb20gJXBNIGtleWlkeD0lZFxuIiwKIAkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGtleWlkeCk7Ci0JCWlmIChza2ItPmRldikKKyAgICAgICAgICAgICAgICBwcmludGsoIiVkLCBmb3JjZV9taWNfZXJyb3IgPSAlZFxuIiwgKG1lbWNtcChtaWMsIHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gOCwgOCkgIT0gMCksXAorICAgICAgICAgICAgICAgICAgICAgICAgaWVlZS0+Zm9yY2VfbWljX2Vycm9yKTsKKwkJaWYgKHNrYi0+ZGV2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoInNrYi0+ZGV2ICE9IE5VTExcbiIpOwogCQkJaWVlZTgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc2tiLT5kZXYsIGhkciwga2V5aWR4KTsKKyAgICAgICAgICAgICAgICB9CiAJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUExvY2FsTUlDRmFpbHVyZXMrKzsKKyAgICAgICAgICAgICAgICBpZWVlLT5mb3JjZV9taWNfZXJyb3IgPSBmYWxzZTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNzYyLDE4ICs3NjAsMTcgQEAKIAkub3duZXIJCSAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CiAKLWludCBfX2luaXQgaWVlZTgwMjExX2NyeXB0b190a2lwX2luaXQodm9pZCkKK2ludCBpZWVlODAyMTFfY3J5cHRvX3RraXBfaW5pdCh2b2lkKQogewogCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X3RraXApOwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCh2b2lkKQogewogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF90a2lwKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfdGtpcF9udWxsKHZvaWQpCiB7Ci0vLyAgICBwcmludGsoIj09PT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggYTFjMGE1OS4uNTIxOWJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF93ZXAuYwpAQCAtOSw3ICs5LDYgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqLwogCi0vLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjc5LDE4ICsyNzgsMTcgQEAKIAkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogfTsKIAotaW50IF9faW5pdCBpZWVlODAyMTFfY3J5cHRvX3dlcF9pbml0KHZvaWQpCitpbnQgaWVlZTgwMjExX2NyeXB0b193ZXBfaW5pdCh2b2lkKQogewogCXJldHVybiBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X3dlcCk7CiB9CiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b193ZXBfZXhpdCh2b2lkKQogewogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF93ZXApOwogfQogCiB2b2lkIGllZWU4MDIxMV93ZXBfbnVsbCh2b2lkKQogewotLy8JcHJpbnRrKCI9PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKICAgICAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IGE4NzY1MGEuLjQ5NDViM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTMxLDcgKzMxLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTE0Miw3ICsxNDEsNiBAQAogCXNwaW5fbG9ja19pbml0KCZpZWVlLT53cGF4X3N1aXRsaXN0X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZpZWVlLT5id19zcGlubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmllZWUtPnJlb3JkZXJfc3BpbmxvY2spOwotCS8vYWRkZWQgYnkgV0IKIAlhdG9taWNfc2V0KCYoaWVlZS0+YXRtX2NobmxvcCksIDApOwogCWF0b21pY19zZXQoJihpZWVlLT5hdG1fc3didyksIDApOwogCkBAIC0xNTMsNyArMTUxLDYgQEAKICAJaWVlZS0+cHJpdmFjeV9pbnZva2VkID0gMDsKICAJaWVlZS0+aWVlZTgwMl8xeCA9IDE7CiAJaWVlZS0+cmF3X3R4ID0gMDsKLQkvL2llZWUtPmh3c2VjX3N1cHBvcnQgPSAxOyAvL2RlZmF1bHQgc3VwcG9ydCBodyBzZWN1cml0eS4gLy91c2UgbW9kdWxlX3BhcmFtIGluc3RlYWQuCiAJaWVlZS0+aHdzZWNfYWN0aXZlID0gMDsgLy9kaXNhYmxlIGh3c2VjLCBzd2l0Y2ggaXQgb24gd2hlbiBuZWNlc3NhcnkuCiAKIAlpZWVlODAyMTFfc29mdG1hY19pbml0KGllZWUpOwpAQCAtMTk2LDggKzE5Myw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwotCS8vc3RydWN0IGxpc3RfaGVhZCAqcCwgKnE7Ci0vLwlkZWxfdGltZXJfc3luYygmaWVlZS0+U3dCd1RpbWVyKTsKICNpZiAxCiAJaWYgKGllZWUtPnBIVEluZm8gIT0gTlVMTCkKIAl7CkBAIC0yMjgsMjMgKzIyMyw2IEBACiAKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwogc3RhdGljIGludCBkZWJ1ZyA9IFwKLQkvLwkJICAgIElFRUU4MDIxMV9ETF9JTkZPCXwKLQkvLwkJICAgIElFRUU4MDIxMV9ETF9XWAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfU0NBTgl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfU1RBVEUJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX01HTVQJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0ZSQUcJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0VBUAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfRFJPUAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfVFgJfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX1JYCXwKLQkJCSAgICAvL0lFRUU4MDIxMV9ETF9RT1MgICAgfAotCS8vCQkgICAgSUVFRTgwMjExX0RMX0hUIAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfVFMJfAotLy8JCQkgICAgSUVFRTgwMjExX0RMX0JBIAl8Ci0JLy8JCSAgICBJRUVFODAyMTFfRExfUkVPUkRFUnwKLS8vCQkJICAgIElFRUU4MDIxMV9ETF9UUkFDRSAgfAotCQkJICAgIC8vSUVFRTgwMjExX0RMX0RBVEEJfAogCQkJICAgIElFRUU4MDIxMV9ETF9FUlIJICAvL2F3YXlscyBvcGVuIHRoaXMgZmxhZ3MgdG8gc2hvdyBlcnJvciBvdXQKIAkJCSAgICA7CiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmllZWU4MDIxMV9wcm9jID0gTlVMTDsKQEAgLTI4Miw3ICsyNjAsNyBAQAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1pbnQgX19pbml0IGllZWU4MDIxMV9kZWJ1Z19pbml0KHZvaWQpCitpbnQgaWVlZTgwMjExX2RlYnVnX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmU7CiAKQEAgLTMwOCw3ICsyODYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfZGVidWdfZXhpdCh2b2lkKQordm9pZCBpZWVlODAyMTFfZGVidWdfZXhpdCh2b2lkKQogewogCWlmIChpZWVlODAyMTFfcHJvYykgewogCQlyZW1vdmVfcHJvY19lbnRyeSgiZGVidWdfbGV2ZWwiLCBpZWVlODAyMTFfcHJvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmgKaW5kZXggMTgyNGNkYS4uN2U3ZmJiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3I4MTkycy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yODE5MnMuaApAQCAtMzM5LDI4ICszMzksMzkgQEAKIH07CiAKIC8qIEZpcm13YXJlIHJlbGF0ZWQgQ01EIElPLiAqLwotdHlwZWRlZiBlbnVtIF9GV19DTURfSU9fVFlQRSB7Ci0JRldfQ01EX0RJR19FTkFCTEUgPSAwLAkJLyogZm9yIERJRyBETSAqLwordHlwZWRlZgllbnVtIF9GV19DTURfSU9fVFlQRXsKKwlGV19DTURfRElHX0VOQUJMRSA9IDAsIC8qIGZvciBESUcgRE0gKi8KIAlGV19DTURfRElHX0RJU0FCTEUgPSAxLAogCUZXX0NNRF9ESUdfSEFMVCA9IDIsCiAJRldfQ01EX0RJR19SRVNVTUUgPSAzLAotCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LAkvKiBmb3IgSGlnaCBQb3dlciBETSAqLworCUZXX0NNRF9ISUdIX1BXUl9FTkFCTEUgPSA0LCAvKiBmb3IgRElHIERNICovCiAJRldfQ01EX0hJR0hfUFdSX0RJU0FCTEUgPSA1LAotCUZXX0NNRF9SQV9SRVNFVCA9IDYsCQkvKiBmb3IgUmF0ZSBhZGFwdGl2ZSBETSAqLwotCUZXX0NNRF9SQV9BQ1RJVkUgPSA3LAotCUZXX0NNRF9SQV9SRUZSRVNIX04gPSA4LAotCUZXX0NNRF9SQV9SRUZSRVNIX0JHID0gOSwKLQlGV19DTURfSVFLX0VOQUJMRSA9IDEwLAkJLyogZm9yIEZXIHN1cHBvcnRlZCBJUUsgKi8KLQlGV19DTURfVFhQV1JfVFJBQ0tfRU5BQkxFID0gMTEsCS8qIFR4IHBvd2VyIHRyYWNraW5nIHN3aXRjaCAqLwotCUZXX0NNRF9UWFBXUl9UUkFDS19ESVNBQkxFID0gMTIsLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoICovCi0JRldfQ01EX1BBVVNFX0RNX0JZX1NDQU4gPSAxMywKLQlGV19DTURfUkVTVU1FX0RNX0JZX1NDQU4gPSAxNCwKLQlGV19DTURfTUlEX0hJR0hfUFdSX0VOQUJMRSA9IDE1LAorCUZXX0NNRF9SQV9SRVNFVCA9IDYsIC8qIGZvciBESUcgRE0gKi8KKwlGV19DTURfUkFfQUNUSVZFPSA3LAorCUZXX0NNRF9SQV9SRUZSRVNIX049IDgsCisJRldfQ01EX1JBX1JFRlJFU0hfQkc9IDksCisJRldfQ01EX1JBX0lOSVQ9IDEwLCAvKiBmb3IgRlcgc3VwcG9ydGVkIElRSyAqLworCUZXX0NNRF9JUUtfRU5BQkxFID0gMTEsIC8qIFR4IHBvd2VyIHRyYWNraW5nIHN3aXRjaCAqLworCUZXX0NNRF9UWFBXUl9UUkFDS19FTkFCTEUgPSAxMiwgLyogVHggcG93ZXIgdHJhY2tpbmcgc3dpdGNoICovCisJRldfQ01EX1RYUFdSX1RSQUNLX0RJU0FCTEUgPSAxMywKKwlGV19DTURfVFhQV1JfVFJBQ0tfVEhFUk1BTCA9IDE0LAorCUZXX0NNRF9QQVVTRV9ETV9CWV9TQ0FOID0gMTUsCiAJLyogaW5kaWNhdGUgZmlybXdhcmUgdGhhdCBkcml2ZXIgZW50ZXJzIExQUywgZm9yIFBTLVBvbGwgaGFyZHdhcmUgYnVnICovCi0JRldfQ01EX0xQU19FTlRFUiA9IDE2LAorCUZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTiA9IDE2LAogCS8qIGluZGljYXRlIGZpcm13YXJlIHRoYXQgZHJpdmVyIGxlYXZlIExQUyAqLwotCUZXX0NNRF9MUFNfTEVBVkUgPSAxNywKLX0gRldfQ01EX0lPX1RZUEU7CisJRldfQ01EX1JBX1JFRlJFU0hfTl9DT01CID0gMTcsCisJRldfQ01EX1JBX1JFRlJFU0hfQkdfQ09NQiA9IDE4LAorCUZXX0NNRF9BTlRFTk5BX1NXX0VOQUJMRSA9IDE5LAorCUZXX0NNRF9BTlRFTk5BX1NXX0RJU0FCTEUgPSAyMCwKKwlGV19DTURfVFhfRkVFREJBQ0tfQ0NYX0VOQUJMRSA9IDIxLAorCUZXX0NNRF9MUFNfRU5URVIgPSAyMiwKKwlGV19DTURfTFBTX0xFQVZFID0gMjMsCisJRldfQ01EX0RJR19NT0RFX1NTID0gMjQsCisJRldfQ01EX0RJR19NT0RFX0ZBID0gMjUsCisJRldfQ01EX0FERF9BMl9FTlRSWSA9IDI2LAorCUZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUiA9IDI3LAorCUZXX0NNRF9DVFJMX0RNX0JZX0RSSVZFUl9ORVcgPSAyOCwKK31GV19DTURfSU9fVFlQRSwqUEZXX0NNRF9JT19UWVBFOwogCiAjZGVmaW5lIFJUX01BWF9MRF9TTE9UX05VTQkxMAogc3RydWN0IHJ0X2xpbmtfZGV0ZWN0IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMWYyYmM3YS4uMDlhMDJmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTM2MCw3ICszNjAsNyBAQAogCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CiAKIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKLQlyZXMgPSBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUoc2tiLCBrZXlpZHgsIGhkcmxlbiwgY3J5cHQtPnByaXYpOworCXJlcyA9IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdShza2IsIGtleWlkeCwgaGRybGVuLCBjcnlwdC0+cHJpdixpZWVlKTsKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1TRFUgZGVjcnlwdGlvbi9NSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDRmMWYyZjAuLjAyODUwNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMTYwLDcgKzE2MCw2IEBACiAJaWVlZS0+bWdtdF9xdWV1ZV9oZWFkID0gbmg7CiAJaWVlZS0+bWdtdF9xdWV1ZV9yaW5nW25oXSA9IHNrYjsKIAotCS8vcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBza19idWZmICpkZXF1ZXVlX21nbXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC0xODMsMTkgKzE4Miw1MyBAQAogCWllZWUtPm1nbXRfcXVldWVfdGFpbCA9IGllZWUtPm1nbXRfcXVldWVfaGVhZCA9IDA7CiB9CiAKK3U4CitNZ250UXVlcnlfVHhSYXRlRXhjbHVkZUNDS1JhdGVzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCXUxNglpOworCXU4CVF1ZXJ5UmF0ZSA9IDA7CisJdTgJQmFzaWNSYXRlOworCisKKwlmb3IoIGkgPSAwOyBpIDwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2xlbjsgaSsrKQorCXsKKwkJQmFzaWNSYXRlID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzW2ldJjB4N0Y7CisJCWlmKCFpZWVlODAyMTFfaXNfY2NrX3JhdGUoQmFzaWNSYXRlKSkKKwkJeworCQkJaWYoUXVlcnlSYXRlID09IDApCisJCQl7CisJCQkJUXVlcnlSYXRlID0gQmFzaWNSYXRlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmKEJhc2ljUmF0ZSA8IFF1ZXJ5UmF0ZSkKKwkJCQl7CisJCQkJCVF1ZXJ5UmF0ZSA9IEJhc2ljUmF0ZTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZihRdWVyeVJhdGUgPT0gMCkKKwl7CisJCVF1ZXJ5UmF0ZSA9IDEyOworCQlwcmludGsoIk5vIEJhc2ljUmF0ZSBmb3VuZCEhXG4iKTsKKwl9CisJcmV0dXJuIFF1ZXJ5UmF0ZTsKK30KIHU4IE1nbnRRdWVyeV9NZ250RnJhbWVUeFJhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJUFJUX0hJR0hfVEhST1VHSFBVVCAgICAgIHBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOwogCXU4IHJhdGU7CiAKLQkvLyAyMDA4LzAxLzI1IE1IIEZvciBicm9hZGNvbSwgTUdOVCBmcmFtZSBzZXQgYXMgT0ZETSA2TS4KLQlpZihwSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX01HTlRfVVNFX0NDS182TSkKLQkJcmF0ZSA9IDB4MGM7CisJaWYocEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9XQV9JT1RfQnJvYWRjb20pCisJeworCQlyYXRlID0gTWdudFF1ZXJ5X1R4UmF0ZUV4Y2x1ZGVDQ0tSYXRlcyhpZWVlKTsKKwl9CiAJZWxzZQogCQlyYXRlID0gaWVlZS0+YmFzaWNfcmF0ZSAmIDB4N2Y7CiAKIAlpZihyYXRlID09IDApewotCQkvLyAyMDA1LjAxLjI2LCBieSByY25qa28uCiAJCWlmKGllZWUtPm1vZGUgPT0gSUVFRV9BfHwKIAkJICAgaWVlZS0+bW9kZT09IElFRUVfTl81R3x8CiAJCSAgIChpZWVlLT5tb2RlPT0gSUVFRV9OXzI0RyYmIXBIVEluZm8tPmJDdXJTdXBwQ0NLKSkKQEAgLTIwMywxNyArMjM2LDYgQEAKIAkJZWxzZQogCQkJcmF0ZSA9IDB4MDI7CiAJfQotCi0JLyoKLQkvLyBEYXRhIHJhdGUgb2YgUHJvYmVSZXEgaXMgYWxyZWFkeSBkZWNpZGVkLiBBbm5pZSwgMjAwNS0wMy0zMQotCWlmKCBwTWdudEluZm8tPmJTY2FuSW5Qcm9ncmVzcyB8fCAocE1nbnRJbmZvLT5iRHVhbE1vZGVTY2FuU3RlcCE9MCkgKQotCXsKLQlpZihwTWdudEluZm8tPmRvdDExQ3VycmVudFdpcmVsZXNzTW9kZT09V0lSRUxFU1NfTU9ERV9BKQotCXJhdGUgPSAweDBjOwotCWVsc2UKLQlyYXRlID0gMHgwMjsKLQl9Ci0JICovCiAJcmV0dXJuIHJhdGU7CiB9CiAKQEAgLTI1MSw5ICsyNzMsNyBAQAogCQkJCWllZWUtPnNlcV9jdHJsWzBdKys7CiAKIAkJCS8qIGF2b2lkIHdhdGNoZG9nIHRyaWdnZXJzICovCi0JLy8JCWllZWUtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQkJaWVlZS0+c29mdG1hY19kYXRhX2hhcmRfc3RhcnRfeG1pdChza2IsaWVlZS0+ZGV2LGllZWUtPmJhc2ljX3JhdGUpOwotCQkJLy9kZXZfa2ZyZWVfc2tiX2FueShza2IpOy8vZWRpdCBieSB0aG9tYXMKIAkJfQogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKQEAgLTI3OSw5ICsyOTksNyBAQAogCQkJcHJpbnRrKCIlcygpOmluc2VydCB0byB3YWl0cXVldWUhXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQlza2JfcXVldWVfdGFpbCgmaWVlZS0+c2tiX3dhaXRRW3RjYl9kZXNjLT5xdWV1ZV9pbmRleF0sIHNrYik7CiAJCX0gZWxzZSB7Ci0JCQkvL3ByaW50aygiVFggcGFja2V0IVxuIik7CiAJCQlpZWVlLT5zb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdChza2IsaWVlZS0+ZGV2KTsKLQkJCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtMjkzLDE2ICszMTEsMjQgQEAKIAlzaG9ydCBzaW5nbGUgPSBpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKmhlYWRlciA9CiAJCShzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKikgc2tiLT5kYXRhOworCXUxNiBmYyx0eXBlLHN0eXBlOwogICAgICAgICBjYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyA4KTsKIAorCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKKwlzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKworCisJaWYoc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX1BTUE9MTCkKIAl0Y2JfZGVzYy0+cXVldWVfaW5kZXggPSBNR05UX1FVRVVFOworCWVsc2UKKwkJdGNiX2Rlc2MtPnF1ZXVlX2luZGV4ID0gSElHSF9RVUVVRTsKIAl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gTWdudFF1ZXJ5X01nbnRGcmFtZVR4UmF0ZShpZWVlKTsKIAl0Y2JfZGVzYy0+UkFUUkluZGV4ID0gNzsKIAl0Y2JfZGVzYy0+YlR4RGlzYWJsZVJhdGVGYWxsQmFjayA9IDE7CiAJdGNiX2Rlc2MtPmJUeFVzZURyaXZlckFzc2luZ2VkUmF0ZSA9IDE7Ci0JLy9wcmludGsoIj09PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAlpZihzaW5nbGUpewotCisJCWlmKCEodHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkgewogCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQpAQCAtMzEwLDEyICszMzYsMTIgQEAKIAkJZWxzZQogCQkJaWVlZS0+c2VxX2N0cmxbMF0rKzsKIAorCQl9CiAJCS8qIGF2b2lkIHdhdGNoZG9nIHRyaWdnZXJzICovCi0JLy8JaWVlZS0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCWllZWUtPnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQoc2tiLGllZWUtPmRldixpZWVlLT5iYXNpY19yYXRlKTsKIAogCX1lbHNlewotCisJCWlmKCEodHlwZSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKSkgewogCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQpAQCAtMzIzLDEwICszNDksMTAgQEAKIAkJZWxzZQogCQkJaWVlZS0+c2VxX2N0cmxbMF0rKzsKIAorCQl9CiAJCWllZWUtPnNvZnRtYWNfaGFyZF9zdGFydF94bWl0KHNrYixpZWVlLT5kZXYpOwogCiAJfQotCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiB9CiAKIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTM3MywyNCArMzk5LDE2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpZighaWVlZS0+aWVlZV91cCkKIAkJcmV0dXJuOwotCS8vdW5zaWduZWQgbG9uZyBmbGFnczsKIAlza2IgPSBpZWVlODAyMTFfZ2V0X2JlYWNvbl8oaWVlZSk7CiAKIAlpZiAoc2tiKXsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9iZWFjb25zKys7Ci0JCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQotLy8JaWVlZS0+YmVhY29uX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKLS8vCQkoTVNFQ1MoIGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwgLTUpKTsKIAotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmJlYWNvbl9sb2NrLGZsYWdzKTsKIAlpZihpZWVlLT5iZWFjb25fdHhpbmcgJiYgaWVlZS0+aWVlZV91cCl7Ci0vLwkJaWYoIXRpbWVyX3BlbmRpbmcoJmllZWUtPmJlYWNvbl90aW1lcikpCi0vLwkJCWFkZF90aW1lcigmaWVlZS0+YmVhY29uX3RpbWVyKTsKIAkJbW9kX3RpbWVyKCZpZWVlLT5iZWFjb25fdGltZXIsamlmZmllcysoTVNFQ1MoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbC01KSkpOwogCX0KLQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmJlYWNvbl9sb2NrLGZsYWdzKTsKIH0KIAogCkBAIC00MTQsNyArNDMyLDYgQEAKIAlpZiAoc2tiKXsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9wcm9iZV9ycSsrOwotCQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7Ly9lZGl0IGJ5IHRob21hcwogCX0KIH0KIApAQCAtNTg1LDEyICs2MDIsOCBAQAogCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3Bfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKLS8vCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvL2llZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKIAogCWRvd24oJmllZWUtPnNjYW5fc2VtKTsKLS8vCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJaWVlZS0+c2Nhbl93YXRjaF9kb2cgPSAwOwogCWlmIChpZWVlLT5zY2FubmluZyA9PSAxKXsKIAkJaWVlZS0+c2Nhbm5pbmcgPSAwOwpAQCAtNTk4LDcgKzYxMSw2IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmllZWUtPnNvZnRtYWNfc2Nhbl93cSk7CiAJfQogCi0vLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJdXAoJmllZWUtPnNjYW5fc2VtKTsKIH0KIApAQCAtNjcyLDcgKzY4NCw2IEBACiAJbWVtY3B5KGF1dGgtPmhlYWRlci5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShhdXRoLT5oZWFkZXIuYWRkcjMsIGJlYWNvbi0+YnNzaWQsIEVUSF9BTEVOKTsKIAotCS8vYXV0aC0+YWxnb3JpdGhtID0gaWVlZS0+b3Blbl93ZXAgPyBXTEFOX0FVVEhfT1BFTiA6IFdMQU5fQVVUSF9TSEFSRURfS0VZOwogCWlmKGllZWUtPmF1dGhfbW9kZSA9PSAwKQogCQlhdXRoLT5hbGdvcml0aG0gPSBXTEFOX0FVVEhfT1BFTjsKIAllbHNlIGlmKGllZWUtPmF1dGhfbW9kZSA9PSAxKQpAQCAtNjg5LDYgKzcwMCwyNiBAQAogCiB9CiAKK3ZvaWQgY29uc3RydWN0V01NSUUodTgqIHdtbWllLCB1OCogd21tX2xlbix1OCBvdWlfc3VidHlwZSkKK3sKKwl1OAlzelFvU09VSVtdID17MjIxLCAwLCAweDAwLCAweDUwLCAweGYyLCAweDAyLCAwLCAxfTsKKworCWlmIChvdWlfc3VidHlwZSA9PSBPVUlfU1VCVFlQRV9RT1NfQ0FQQUJJKQorCXsKKwkJc3pRb1NPVUlbMF0gPSA0NjsKKwkJc3pRb1NPVUlbMV0gPSAqd21tX2xlbjsKKwkJbWVtY3B5KHdtbWllLHN6UW9TT1VJLDMpOworCQkqd21tX2xlbiA9IDM7CisJfQorCWVsc2UKKwl7CisJCXN6UW9TT1VJWzFdID0gKndtbV9sZW4gKyA2OworCQlzelFvU09VSVs2XSA9IG91aV9zdWJ0eXBlOworCQltZW1jcHkod21taWUsIHN6UW9TT1VJLCA4KTsKKwkJKih3bW1pZSs4KSA9IDA7CisJCSp3bW1fbGVuID0gOTsKKwl9Cit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiogaWVlZTgwMjExX3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpkZXN0KQogewpAQCAtNzA3LDE0ICs3MzgsMTggQEAKIAlpbnQgd3BhX2llX2xlbiA9IGllZWUtPndwYV9pZV9sZW47CiAJdTggZXJwaW5mb19jb250ZW50ID0gMDsKIAotCXU4KiB0bXBfaHRfY2FwX2J1ZjsKKwl1OCogdG1wX2h0X2NhcF9idWY9TlVMTDsKIAl1OCB0bXBfaHRfY2FwX2xlbj0wOwotCXU4KiB0bXBfaHRfaW5mb19idWY7CisJdTgqIHRtcF9odF9pbmZvX2J1Zj1OVUxMOwogCXU4IHRtcF9odF9pbmZvX2xlbj0wOwogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CiAJdTgqIHRtcF9nZW5lcmljX2llX2J1Zj1OVUxMOwogCXU4IHRtcF9nZW5lcmljX2llX2xlbj0wOwogCisKKwl1OCB3bW1pZVs5XSA9IHswfTsKKwl1OCB3bW1fbGVuID0gMDsKKwogCWlmKHJhdGVfZXhfbGVuID4gMCkgcmF0ZV9leF9sZW4rPTI7CiAKIAlpZihpZWVlLT5jdXJyZW50X25ldHdvcmsuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQpAQCAtNzIyLDcgKzc1Nyw3IEBACiAJZWxzZQogCQlhdGltX2xlbiA9IDA7CiAKLSNpZiAxCisjaWYgMAogCWlmKGllZWU4MDIxMV9pc181NGcoaWVlZS0+Y3VycmVudF9uZXR3b3JrKSkKIAkJZXJwX2xlbiA9IDM7CiAJZWxzZQpAQCAtNzQ3LDIyICs3ODIsMzUgQEAKIAkJKCgwID09IHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiV0VQIikgfHwgd3BhX2llX2xlbikpOwogCS8vSFQgcmFsYXRlZCBlbGVtZW50CiAjaWYgMQotCXRtcF9odF9jYXBfYnVmID0odTgqKSAmKGllZWUtPnBIVEluZm8tPlNlbGZIVENhcCk7Ci0JdG1wX2h0X2NhcF9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKLQl0bXBfaHRfaW5mb19idWYgPSh1OCopICYoaWVlZS0+cEhUSW5mby0+U2VsZkhUSW5mbyk7Ci0JdG1wX2h0X2luZm9fbGVuID0gc2l6ZW9mKGllZWUtPnBIVEluZm8tPlNlbGZIVEluZm8pOwotCUhUQ29uc3RydWN0Q2FwYWJpbGl0eUVsZW1lbnQoaWVlZSwgdG1wX2h0X2NhcF9idWYsICZ0bXBfaHRfY2FwX2xlbixlbmNyeXB0KTsKLQlIVENvbnN0cnVjdEluZm9FbGVtZW50KGllZWUsdG1wX2h0X2luZm9fYnVmLCZ0bXBfaHRfaW5mb19sZW4sIGVuY3J5cHQpOworCWlmKGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0KXsKKwkJdG1wX2h0X2NhcF9idWYgPSh1OCopICYoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKKwkJdG1wX2h0X2NhcF9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUQ2FwKTsKKwkJdG1wX2h0X2luZm9fYnVmID0odTgqKSAmKGllZWUtPnBIVEluZm8tPlNlbGZIVEluZm8pOworCQl0bXBfaHRfaW5mb19sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+U2VsZkhUSW5mbyk7CisKKwkJSFRDb25zdHJ1Y3RDYXBhYmlsaXR5RWxlbWVudChpZWVlLCB0bXBfaHRfY2FwX2J1ZiwgJnRtcF9odF9jYXBfbGVuLGVuY3J5cHQpOworCisJCUhUQ29uc3RydWN0SW5mb0VsZW1lbnQoaWVlZSx0bXBfaHRfaW5mb19idWYsJnRtcF9odF9pbmZvX2xlbiwgZW5jcnlwdCk7CiAKIAotICAgICAgICBpZihwSFRJbmZvLT5iUmVnUlQyUlRBZ2dyZWdhdGlvbikKLSAgICAgICAgewotICAgICAgICAJdG1wX2dlbmVyaWNfaWVfYnVmID0gaWVlZS0+cEhUSW5mby0+c3pSVDJSVEFnZ0J1ZmZlcjsKLQkJdG1wX2dlbmVyaWNfaWVfbGVuID0gc2l6ZW9mKGllZWUtPnBIVEluZm8tPnN6UlQyUlRBZ2dCdWZmZXIpOwotCQlIVENvbnN0cnVjdFJUMlJUQWdnRWxlbWVudChpZWVlLCB0bXBfZ2VuZXJpY19pZV9idWYsICZ0bXBfZ2VuZXJpY19pZV9sZW4pOwotICAgICAgICB9Ci0vLwlwcmludGsoIj09PT09PT09PT09PT09PT50bXBfaHRfY2FwX2xlbiBpcyAlZCx0bXBfaHRfaW5mb19sZW4gaXMgJWQsIHRtcF9nZW5lcmljX2llX2xlbiBpcyAlZFxuIix0bXBfaHRfY2FwX2xlbix0bXBfaHRfaW5mb19sZW4sdG1wX2dlbmVyaWNfaWVfbGVuKTsKKwkJaWYocEhUSW5mby0+YlJlZ1JUMlJUQWdncmVnYXRpb24pCisJCXsKKwkJCXRtcF9nZW5lcmljX2llX2J1ZiA9IGllZWUtPnBIVEluZm8tPnN6UlQyUlRBZ2dCdWZmZXI7CisJCQl0bXBfZ2VuZXJpY19pZV9sZW4gPSBzaXplb2YoaWVlZS0+cEhUSW5mby0+c3pSVDJSVEFnZ0J1ZmZlcik7CisJCQlIVENvbnN0cnVjdFJUMlJUQWdnRWxlbWVudChpZWVlLCB0bXBfZ2VuZXJpY19pZV9idWYsICZ0bXBfZ2VuZXJpY19pZV9sZW4pOworCQl9CisJfQogI2VuZGlmCisKKwlpZihpZWVlLT5xb3Nfc3VwcG9ydCl7CisKKwkJaWYoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQorCQl7CisJCQl3bW1fbGVuID0gMTsKKwkJCWNvbnN0cnVjdFdNTUlFKHdtbWllLCZ3bW1fbGVuLE9VSV9TVUJUWVBFX1dNTV9JTkZPKTsKKwkJfQorCX0KKwogCWJlYWNvbl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UpKzIrCiAJCXNzaWRfbGVuCiAJCSszIC8vY2hhbm5lbApAQCAtODI1LDcgKzg3Myw2IEBACiAJdTE2IHZhbDE2OwogCQkqKHRhZysrKSA9IE1GSUVfVFlQRV9JQlNTX1NFVDsKIAkJKih0YWcrKykgPSAyOwotCQkvLyooKHUxNiopKHRhZykpID0gY3B1X3RvX2xlMTYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmF0aW1fd2luZG93KTsKIAkJIHZhbDE2ID0gY3B1X3RvX2xlMTYoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmF0aW1fd2luZG93KTsKIAkJbWVtY3B5KCh1OCAqKXRhZywgKHU4ICopJnZhbDE2LCAyKTsKIAkJdGFnKz0yOwpAQCAtODU0LDcgKzkwMSw2IEBACiAJCXRhZyArPSB3cGFfaWVfbGVuOwogCX0KIAotCS8vc2tiLT5kZXYgPSBpZWVlLT5kZXY7CiAJcmV0dXJuIHNrYjsKIH0KIApAQCAtOTk2LDE5ICsxMDQyLDM5IEBACiB9CiAKIAoraW5saW5lIGludCBTZWNJc0luUE1LSURMaXN0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqYnNzaWQpCit7CisJaW50IGkgPSAwOworCisJZG8KKwl7CisJCWlmICgoaWVlZS0+UE1LSURMaXN0W2ldLmJVc2VkKSAmJiAobWVtY21wKGllZWUtPlBNS0lETGlzdFtpXS5Cc3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpKys7CisJCX0KKwl9IHdoaWxlIChpIDwgTlVNX1BNS0lEX0NBQ0hFKTsKKworCWlmIChpID09IE5VTV9QTUtJRF9DQUNIRSkKKwl7CisJCWkgPSAtMTsKKwl9CisJZWxzZQorCXsKKwl9CisKKwlyZXR1cm4gKGkpOworCit9CiBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9hc3NvY2lhdGlvbl9yZXEoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpiZWFjb24sc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3RfZnJhbWUgKmhkcjsKIAl1OCAqdGFnOy8vLCpyc25faWU7Ci0JLy9zaG9ydCBpbmZvX2FkZHIgPSAwOwotCS8vaW50IGk7Ci0JLy91MTYgc3VpdGVfY291bnQgPSAwOwotCS8vdTggc3VpdF9zZWxlY3QgPSAwOwotCS8vdW5zaWduZWQgaW50IHdwYV9sZW4gPSBiZWFjb24tPndwYV9pZV9sZW47Ci0JLy9mb3IgSFQKIAl1OCogaHRfY2FwX2J1ZiA9IE5VTEw7CiAJdTggaHRfY2FwX2xlbj0wOwogCXU4KiByZWFsdGVrX2llX2J1Zj1OVUxMOwpAQCAtMTAxOSw2ICsxMDg1LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3h2ZXJudW1faWVfbGVuPTA7CiAJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKiBjcnlwdDsKIAlpbnQgZW5jcnlwdDsKKwlpbnQJUE1LQ2FjaGVJZHg7CiAKIAl1bnNpZ25lZCBpbnQgcmF0ZV9sZW4gPSBpZWVlODAyMTFfTUZJRV9yYXRlX2xlbihpZWVlKTsKIAl1bnNpZ25lZCBpbnQgd21tX2luZm9fbGVuID0gYmVhY29uLT5xb3NfZGF0YS5zdXBwb3J0ZWQ/OTowOwpAQCAtMTA2MCw2ICsxMTI3LDE0IEBACiAJewogCQljeHZlcm51bV9pZV9sZW4gPSA1KzI7CiAJfQorCisJUE1LQ2FjaGVJZHggPSBTZWNJc0luUE1LSURMaXN0KGllZWUsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCk7CisJaWYgKFBNS0NhY2hlSWR4ID49IDApCisJeworCQl3cGFfaWVfbGVuICs9IDE4OworCQlwcmludGsoIltQTUsgY2FjaGVdOiBXUEEyIElFIGxlbmd0aDogJXhcbiIsIHdwYV9pZV9sZW4pOworCX0KKwogCWxlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3RfZnJhbWUpKyAyCiAJCSsgYmVhY29uLT5zc2lkX2xlbi8vZXNzaWQgdGFnZ2VkIHZhbAogCQkrIHJhdGVfbGVuLy9yYXRlcyB0YWdnZWQgdmFsCkBAIC0xMTg3LDYgKzEyNjIsMTMgQEAKIAl0YWcgPSBza2JfcHV0KHNrYiwgd3BhX2llX2xlbik7CiAJaWYgKHdwYV9pZV9sZW4pewogCQltZW1jcHkodGFnLCBpZWVlLT53cGFfaWUsIGllZWUtPndwYV9pZV9sZW4pOworCQlpZiAoUE1LQ2FjaGVJZHggPj0gMCkKKwkJeworCQkJdGFnID0gc2tiX3B1dChza2IsIDE4KTsKKwkJCSp0YWcgPSAxOworCQkJKih0YWcgKyAxKSA9IDA7CisJCQltZW1jcHkoKHRhZyArIDIpLCAmaWVlZS0+UE1LSURMaXN0W1BNS0NhY2hlSWR4XS5QTUtJRCwgMTYpOworCQl9CiAJfQogCiAJdGFnID0gc2tiX3B1dChza2Isd21tX2luZm9fbGVuKTsKQEAgLTEyMTUsOCArMTI5Nyw2IEBACiAJCQltZW1jcHkodGFnLCByZWFsdGVrX2llX2J1ZixyZWFsdGVrX2llX2xlbiAtMiApOwogCQl9CiAJfQotLy8JcHJpbnRrKCI8PT09PT0lcygpLCAlcCwgJXBcbiIsIF9fRlVOQ1RJT05fXywgaWVlZS0+ZGV2LCBpZWVlLT5kZXYtPmRldl9hZGRyKTsKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xMjcxLDcgKzEzNTEsNiBAQAogCWVsc2V7CiAJCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX0FTU09DSUFUSU5HX0FVVEhFTlRJQ0FUSU5HIDsKIAkJSUVFRTgwMjExX0RFQlVHX01HTVQoIlNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdFxuIik7Ci0JCS8vcHJpbnRrKEtFUk5fV0FSTklORyAiU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0XG4iKTsKIAkJc29mdG1hY19tZ210X3htaXQoc2tiLCBpZWVlKTsKIAkJLy9CVUdPTiB3aGVuIHlvdSB0cnkgdG8gYWRkX3RpbWVyIHR3aWNlLCB1c2luZyBtb2RfdGltZXIgbWF5IGJlIGJldHRlciwgam9objA3MDkKIAkJaWYoIXRpbWVyX3BlbmRpbmcoJmllZWUtPmFzc29jaWF0ZV90aW1lcikpewpAQCAtMTI4Nyw3ICsxMzY2LDYgQEAKIAl1OCAqYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqYmVhY29uID0gJmllZWUtPmN1cnJlbnRfbmV0d29yazsKLS8vCWludCBobGVuID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRpb24pOwogCiAJaWVlZS0+YXNzb2NpYXRlX3NlcSsrOwogCWllZWUtPnNvZnRtYWNfc3RhdHMudHhfYXV0aF9ycSsrOwpAQCAtMTMwNyw3ICsxMzg1LDYgQEAKIAogCQlzb2Z0bWFjX21nbXRfeG1pdChza2IsIGllZWUpOwogCQltb2RfdGltZXIoJmllZWUtPmFzc29jaWF0ZV90aW1lciwgamlmZmllcyArIChIWi8yKSk7Ci0JCS8vZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsvL2VkaXQgYnkgdGhvbWFzCiAJfQogCWtmcmVlKGNoYWxsZW5nZSk7CiB9CkBAIC0xMzI4LDcgKzE0MDUsNiBAQAogCWVsc2V7CiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7CiAJCW1vZF90aW1lcigmaWVlZS0+YXNzb2NpYXRlX3RpbWVyLCBqaWZmaWVzICsgKEhaLzIpKTsKLQkJLy9kZXZfa2ZyZWVfc2tiX2FueShza2IpOy8vZWRpdCBieSB0aG9tYXMKIAl9CiB9CiAKQEAgLTEzNTYsNyArMTQzMiw2IEBACiAJewogCQlwcmludGsoIlN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkLCBodCBub3QgZW5hYmxlZCglZCwgJWQpXG4iLCBpZWVlLT5wSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCwgaWVlZS0+cEhUSW5mby0+YkVuYWJsZUhUKTsKIAkJbWVtc2V0KGllZWUtPmRvdDExSFRPcGVyYXRpb25hbFJhdGVTZXQsIDAsIDE2KTsKLQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAl9CiAJaWVlZS0+TGlua0RldGVjdEluZm8uU2xvdE51bSA9IDIgKiAoMSArIGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwvNTAwKTsKIAkvLyBUbyBwcmV2ZW50IHRoZSBpbW1lZGlhdGVseSBjYWxsaW5nIHdhdGNoX2RvZyBhZnRlciBhc3NvY2lhdGlvbi4KQEAgLTEzODgsNyArMTQ2Myw2IEBACiAJZGVsX3RpbWVyX3N5bmMoJmllZWUtPmFzc29jaWF0ZV90aW1lcik7CiAKIAlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9MSU5LRUQ7Ci0JLy9pZWVlLT5VcGRhdGVIYWxSQVRSVGFibGVIYW5kbGVyKGRldiwgaWVlZS0+ZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldCk7CiAJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9jb21wbGV0ZV93cSk7CiB9CiAKQEAgLTE0MDQsOSArMTQ3OCwxNCBAQAogCiAJaWVlZTgwMjExX3N0b3Bfc2NhbihpZWVlKTsKIAlwcmludGsoIj09PT4lcygpLCBjaGFuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKLQkvL2llZWUtPnNldF9jaGFuKGllZWUtPmRldiwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwpOwogCUhUU2V0Q29ubmVjdEJ3TW9kZShpZWVlLCBIVF9DSEFOTkVMX1dJRFRIXzIwLCBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQpOwogCisJaWYoaWVlZS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPZmYpCisJeworICAgICAgICAgICAgcHJpbnRrKCI9PT09PT09PT09PT09PiVzKCk6UmYgc3RhdGUgaXMgZVJmT2ZmLCBzY2hlZHVsZSBpcHNsZWF2ZSB3cSBhZ2FpbixyZXR1cm5cbiIsX19GVU5DVElPTl9fKTsKKwkJdXAoJmllZWUtPnd4X3NlbSk7CisJCXJldHVybjsKKwl9CiAJaWVlZS0+YXNzb2NpYXRlX3NlcSA9IDE7CiAJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMShpZWVlKTsKIApAQCAtMTQzMiwxNCArMTUxMSwxNiBAQAogCWlmICgoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAhKG5ldC0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkKIAkJcmV0dXJuOwogCisJaWYgKChpZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpICYmIChuZXQtPmNoYW5uZWwgPiBpZWVlLT5pYnNzX21heGpvaW5fY2hhbCkpCisJCXJldHVybjsKIAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEgfHwgaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKXsKIAkJLyogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIHRoZSBBUCBNQUMsIHdlIG5lZWQgYWxzbyB0aGUgZXNzaWQKIAkJICogVGhpcyBjb3VsZCBiZSBvYnRhaW5lZCBieSBiZWFjb25zIG9yLCBpZiB0aGUgbmV0d29yayBkb2VzIG5vdAogCQkgKiBicm9hZGNhc3QgaXQsIGl0IGNhbiBiZSBwdXQgbWFudWFsbHkuCiAJCSAqLwotCQlhcHNldCA9IGllZWUtPndhcF9zZXQ7Ly8obWVtY21wKGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgemVybyxFVEhfQUxFTikhPTAgKTsKLQkJc3NpZHNldCA9IGllZWUtPnNzaWRfc2V0Oy8vaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRbMF0gIT0gJ1wwJzsKKwkJYXBzZXQgPSBpZWVlLT53YXBfc2V0OworCQlzc2lkc2V0ID0gaWVlZS0+c3NpZF9zZXQ7CiAJCXNzaWRicm9hZCA9ICAhKG5ldC0+c3NpZF9sZW4gPT0gMCB8fCBuZXQtPnNzaWRbMF09PSAnXDAnKTsKIAkJYXBtYXRjaCA9IChtZW1jbXAoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBuZXQtPmJzc2lkLCBFVEhfQUxFTik9PTApOwogCQlzc2lkbWF0Y2ggPSAoaWVlZS0+Y3VycmVudF9uZXR3b3JrLnNzaWRfbGVuID09IG5ldC0+c3NpZF9sZW4pJiZcCkBAIC0xNDgwLDcgKzE1NjEsNiBAQAogCQkJCQlpZWVlLT5Bc29jUmV0cnlDb3VudCA9IDA7CiAJCQkJCS8vZm9yIEhUIGJ5IGFteSAwODA1MTQKIAkJCQkJaWYoKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5zdXBwb3J0ZWQgPT0gMSkgJiYKLQkJCQkJICAvLyAoaWVlZS0+cEhUSW5mby0+YkVuYWJsZUhUICYmIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NodC5iZFN1cHBvcnRIVCkpCiAJCQkJCSAgIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NodC5iZFN1cHBvcnRIVCkKIC8qV0IsIDIwMDguMDkuMDk6YkN1cnJlbnRIVFN1cHBvcnQgYW5kIGJFbmFibGVIVCB0d28gZmxhZ3MgYXJlIGdvaW5nIHRvIHB1dCB0b2dldGhlciB0byBjaGVjayB3aGV0aGVyIHdlIGFyZSBpbiBIVCBub3csIHNvIG5lZWRuJ3QgdG8gY2hlY2sgYkVuYWJsZUhUIGZsYWdzIGhlcmUuIFRoYXQncyBpcyB0byBzYXkgd2Ugd2lsbCBzZXQgdG8gSFQgc3VwcG9ydCB3aGVuZXZlciBqb2luZWQgQVAgaGFzIHRoZSBhYmlsaXR5IHRvIHN1cHBvcnQgSFQuIEFuZCB3aGV0aGVyIHdlIGFyZSBpbiBIVCBvciBub3QsIHBsZWFzZSBjaGVjayBiQ3VycmVudEhUU3VwcG9ydCYmYkVuYWJsZUhUIG5vdyBwbGVhc2UuKi8KIAkJCQkJewpAQCAtMTUwOCw3ICsxNTg4LDYgQEAKIAkJCQkJCXByaW50ayhLRVJOX0lORk8iVXNpbmcgQiByYXRlc1xuIik7CiAJCQkJCX0KIAkJCQkJbWVtc2V0KGllZWUtPmRvdDExSFRPcGVyYXRpb25hbFJhdGVTZXQsIDAsIDE2KTsKLQkJCQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAkJCQkJaWVlZS0+c3RhdGUgPSBJRUVFODAyMTFfTElOS0VEOwogCQkJCX0KIApAQCAtMTU5OCw2ICsxNjc3LDE2IEBACiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKSkKIAkJcmV0dXJuIC0xOyAvKiBjb3JydXB0ZWQgKi8KIAorICAgICAgICBpZigobWVtY21wKGhlYWRlci0+YWRkcjMsaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLEVUSF9BTEVOKSAhPSAwKSYmCisgICAgICAgICAgICAgICAgKG1lbWNtcChoZWFkZXItPmFkZHIzLCJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLEVUSF9BTEVOKSAhPSAwKSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYobWVtY21wKGhlYWRlci0+YWRkcjMsaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLEVUSF9BTEVOKSA9PSAwKSB7CisgICAgICAgIH0KKworICAgICAgICBpZihtZW1jbXAoaGVhZGVyLT5hZGRyMywiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIixFVEhfQUxFTikgPT0gMCkgeworICAgICAgICB9CiAJbWVtY3B5KHNyYyxoZWFkZXItPmFkZHIyLCBFVEhfQUxFTik7CiAKIAlza2JlbmQgPSAodTgqKXNrYi0+ZGF0YSArIHNrYi0+bGVuOwpAQCAtMTYxNSw3ICsxNzA0LDYgQEAKIAkJdGFnKys7IC8qIHBvaW50IHRvIHRoZSBuZXh0IHRhZyAqLwogCX0KIAotCS8vSUVFRTgwMjExRE1FU0coIkNhcmQgTUFDIGFkZHJlc3MgaXMgIk1BQ1NUUiwgTUFDMlNUUihzcmMpKTsKIAlpZiAoc3NpZGxlbiA9PSAwKSByZXR1cm4gMTsKIAogCWlmICghc3NpZCkgcmV0dXJuIDE7IC8qIHNzaWQgbm90IGZvdW5kIGluIHRhZ2dlZCBwYXJhbSAqLwpAQCAtMTY3MywxMSArMTc2MSw4IEBACiB7CiAJdTggZGVzdFtFVEhfQUxFTl07CiAKLQkvL0lFRUU4MDIxMURNRVNHKCJSeCBwcm9iZSIpOwogCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfcHJvYmVfcnErKzsKLQkvL0RNRVNHKCJEZXN0IGlzICJNQUNTVFIsIE1BQzJTVFIoZGVzdCkpOwogCWlmIChwcm9iZV9ycV9wYXJzZShpZWVlLCBza2IsIGRlc3QpKXsKLQkJLy9JRUVFODAyMTFETUVTRygiV2FzIGZvciBtZSEiKTsKIAkJaWVlZS0+c29mdG1hY19zdGF0cy50eF9wcm9iZV9ycysrOwogCQlpZWVlODAyMTFfcmVzcF90b19wcm9iZShpZWVlLCBkZXN0KTsKIAl9CkBAIC0xNjg4LDE0ICsxNzczLDEyIEBACiB7CiAJdTggZGVzdFtFVEhfQUxFTl07CiAJaW50IHN0YXR1czsKLQkvL0lFRUU4MDIxMURNRVNHKCJSeCBwcm9iZSIpOwogCWllZWUtPnNvZnRtYWNfc3RhdHMucnhfYXV0aF9ycSsrOwogCiAJc3RhdHVzID0gYXV0aF9ycV9wYXJzZShza2IsIGRlc3QpOwogCWlmIChzdGF0dXMgIT0gLTEpIHsKIAkJaWVlZTgwMjExX3Jlc3BfdG9fYXV0aChpZWVlLCBzdGF0dXMsIGRlc3QpOwogCX0KLQkvL0RNRVNHKCJEZXN0IGlzICJNQUNTVFIsIE1BQzJTVFIoZGVzdCkpOwogCiB9CiAKQEAgLTE3MDQsNyArMTc4Nyw2IEBACiB7CiAKIAl1OCBkZXN0W0VUSF9BTEVOXTsKLQkvL3Vuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJ4X2Fzc19ycSsrOwogCWlmIChhc3NvY19ycV9wYXJzZShza2IsZGVzdCkgIT0gLTEpewpAQCAtMTczOSw3ICsxODIxLDYgQEAKIAkJcmV0dXJuIDA7CiAJKi8KIAlkdGltID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmR0aW1fZGF0YTsKLQkvL3ByaW50aygiRFRJTVxuIik7CiAJaWYoIShkdGltICYgSUVFRTgwMjExX0RUSU1fVkFMSUQpKQogCQlyZXR1cm4gMDsKIAl0aW1lb3V0ID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbDsgLy9zaG91bGQgd2UgdXNlIHBzX3RpbWVvdXQgdmFsdWUgb3IgYmVhY29uX2ludGVydmFsCkBAIC0xNzYyLDcgKzE4NDMsNiBAQAogCWlmKHRpbWVfbCl7CiAJCSp0aW1lX2wgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsubGFzdF9kdGltX3N0YV90aW1lWzBdCiAJCQkrIChpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsKTsKLQkJLy8JKiBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2QpICogMTAwMDsKIAl9CiAKIAlpZih0aW1lX2gpewpAQCAtMTc5MCw3ICsxODcwLDYgQEAKIAkJaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBIHx8CiAJCWllZWUtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpKXsKIAotCS8vCSN3YXJuaW5nIENIRUNLX0xPQ0tfSEVSRQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFnczIpOwogCiAJCWllZWU4MDIxMV9zdGFfd2FrZXVwKGllZWUsIDEpOwpAQCAtMTgwOSw3ICsxODg4LDYgQEAKIAkJCWllZWUtPmVudGVyX3NsZWVwX3N0YXRlKGllZWUtPmRldix0aCx0bCk7CiAKIAkJZWxzZSBpZihpZWVlLT5zdGFfc2xlZXAgPT0gMCl7Ci0JCS8vCXByaW50aygic2VuZCBudWxsIDFcbiIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKIAogCQkJaWYoaWVlZS0+cHNfaXNfcXVldWVfZW1wdHkoaWVlZS0+ZGV2KSl7CkBAIC0xOTE4LDggKzE5OTYsNiBAQAogCQkJaWVlZTgwMjExX3J4X0RFTEJBKGllZWUsIHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLS8vCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLS8vCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9CQSwgInVua25vd24gYWN0aW9uIGZyYW1lKCVkKVxuIiwgdG1wKTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm47CkBAIC0xOTM2LDcgKzIwMTIsNiBAQAogCWludCBjaGxlbj0wOwogCWludCBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZV9mcmFtZSAqYXNzb2NfcmVzcDsKLS8vCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQ7CiAJYm9vbCBiU3VwcG9ydE5tb2RlID0gdHJ1ZSwgYkhhbGZTdXBwb3J0Tm1vZGUgPSBmYWxzZTsgLy9kZWZhdWx0IHN1cHBvcnQgTiBtb2RlLCBkaXNhYmxlIGhhbGZObW9kZQogCiAJaWYoIWllZWUtPnByb3RvX3N0YXJ0ZWQpCkBAIC0yMDk1LDggKzIxNzAsNiBAQAogCQkJCWllZWUtPnNvZnRtYWNfc3RhdHMucmVhc3NvYysrOwogCQkJCWllZWUtPmlzX3JvYW1pbmcgPSB0cnVlOwogCQkJCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUoaWVlZSk7Ci0JCQkvLwlub3RpZnlfd3hfYXNzb2NfZXZlbnQoaWVlZSk7Ci0JCQkJLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAkJCQlSZW1vdmVQZWVyVFMoaWVlZSwgaGVhZGVyLT5hZGRyMik7CiAJCQkJaWYoaWVlZS0+TGVkQ29udHJvbEhhbmRsZXIgIT0gTlVMTCkKIAkJCQkgICAgICAgIGllZWUtPkxlZENvbnRyb2xIYW5kbGVyKGllZWUtPmRldiwgTEVEX0NUTF9TVEFSVF9UT19MSU5LKTsgLy9hZGRlZCBieSBhbXkgZm9yIExFRCAwOTAzMTgKQEAgLTIxMTEsNyArMjE4NCw2IEBACiAJCQlicmVhazsKIAl9CiAKLQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNjMsMjIgKzIyMzUsMTYgQEAKIAkJCS8qIGFzIGZvciB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgaXQgZG9lcyBub3QgbmVlZAogCQkJICogdG8gY2hlY2sgaXQgYW55IG1vcmUuCiAJCQkgKiAqLwotCQkJLy9wcmludGsoImVycm9yOm5vIGRlc2NyaXB0b3IgbGVmdEBxdWV1ZV9pbmRleCAlZCwgJWQsICVkXG4iLCBxdWV1ZV9pbmRleCwgc2tiX3F1ZXVlX2xlbigmaWVlZS0+c2tiX3dhaXRRW3F1ZXVlX2luZGV4XSksIGllZWUtPmNoZWNrX25pY19lbm91Z2hfZGVzYyhpZWVlLT5kZXYscXVldWVfaW5kZXgpKTsKLQkJCS8vaWVlZTgwMjExX3J0bF9zdG9wX3F1ZXVlKGllZWUpOwogCQkJc2tiX3F1ZXVlX3RhaWwoJmllZWUtPnNrYl93YWl0UVtxdWV1ZV9pbmRleF0sIHR4Yi0+ZnJhZ21lbnRzW2ldKTsKIAkJfWVsc2V7CiAJCQlpZWVlLT5zb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KAogCQkJCQl0eGItPmZyYWdtZW50c1tpXSwKIAkJCQkJaWVlZS0+ZGV2LGllZWUtPnJhdGUpOwotCQkJLy9pZWVlLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkvL2llZWUtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+ZnJhZ21lbnRzW2ldLT5sZW47Ci0JCQkvL2llZWUtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQl9CiAJfQogI2VuZGlmCiAJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7CiAKLS8vZXhpdDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLGZsYWdzKTsKIAogfQpAQCAtMjE5Nyw5ICsyMjYzLDcgQEAKIAkJCWllZWUtPnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQoCiAJCQkJaWVlZS0+dHhfcGVuZGluZy50eGItPmZyYWdtZW50c1tpXSwKIAkJCQlpZWVlLT5kZXYsaWVlZS0+cmF0ZSk7Ci0JCQkJLy8oaSsxKTxpZWVlLT50eF9wZW5kaW5nLnR4Yi0+bnJfZnJhZ3MpOwogCQkJaWVlZS0+c3RhdHMudHhfcGFja2V0cysrOwotCQkvLwlpZWVlLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJfQogCX0KIApAQCAtMjI0OSw3ICsyMzEzLDYgQEAKIAkJCQlpZWVlLT5zZXFfY3RybFswXSsrOwogCiAJCQlpZWVlLT5zb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0KHNrYixpZWVlLT5kZXYsaWVlZS0+YmFzaWNfcmF0ZSk7Ci0JCQkvL2Rldl9rZnJlZV9za2JfYW55KHNrYik7Ly9lZGl0IGJ5IHRob21hcwogCQl9CiAJfQogCWlmICghaWVlZS0+cXVldWVfc3RvcCAmJiBpZWVlLT50eF9wZW5kaW5nLnR4YikKQEAgLTIyNjcsMTUgKzIzMzAsMTIgQEAKIAogdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOwotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwogCiAJaWYgKCEgbmV0aWZfcXVldWVfc3RvcHBlZChpZWVlLT5kZXYpKXsKIAkJbmV0aWZfc3RvcF9xdWV1ZShpZWVlLT5kZXYpOwogCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnN3dHhzdG9wKys7CiAJfQogCWllZWUtPnF1ZXVlX3N0b3AgPSAxOwotCS8vc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jayxmbGFncyk7CiAKIH0KIApAQCAtMjM2Miw3ICsyNDIyLDcgQEAKIAogLy8JaWYoKElTX0RPVDExRF9FTkFCTEUoaWVlZSkpICYmIChpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTk9MSU5LKSkKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykKLQkJaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwgPSA2OworCQlpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCA9IGllZWUtPklic3NTdGFydENobmw7CiAJLyogaWYgbm90IHRoZW4gdGhlIHN0YXRlIGlzIG5vdCBsaW5rZWQuIE1heWJlIHRoZSB1c2VyIHN3aXRoY2VkIHRvCiAJICogYWQtaG9jIG1vZGUganVzdCBhZnRlciBiZWluZyBpbiBtb25pdG9yIG1vZGUsIG9yIGp1c3QgYWZ0ZXIKIAkgKiBiZWluZyB2ZXJ5IGZldyB0aW1lIGluIG1hbmFnZWQgbW9kZSAoc28gdGhlIGNhcmQgaGF2ZSBoYWQgbm8KQEAgLTI1MDksMTEgKzI1NjksOSBAQAogCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKIAlpZWVlLT5pc19zZXRfa2V5ID0gZmFsc2U7CiAKLQkvL0xaTSBmb3IgdXNiIGRldiBjcmFzaC4KLQkvL2llZWUtPmxpbmtfY2hhbmdlKGllZWUtPmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKGllZWUtPndxLCAmaWVlZS0+bGlua19jaGFuZ2Vfd3EsIDApOwogCi0JLy9IVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKKwogCW5vdGlmeV93eF9hc3NvY19ldmVudChpZWVlKTsKIAogfQpAQCAtMjY1Nyw4ICsyNzE1LDYgQEAKIAogCWlmIChpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsID09IDApCiAJCWllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwgPSAxMDA7Ci0vLwlwcmludGsoIj09PT4lcygpLCBjaGFuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKLS8vCWllZWUtPnNldF9jaGFuKGllZWUtPmRldixpZWVlLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbCk7CiAKICAgICAgICAJZm9yKGkgPSAwOyBpIDwgMTc7IGkrKykgewogCSAgaWVlZS0+bGFzdF9yeHNlcV9udW1baV0gPSAtMTsKQEAgLTI3MjEsNyArMjc3Nyw2IEBACiAJaWVlZS0+UmVnZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFswXT0gMHhmZjsvL3N1cHBvcnQgTUNTIDB+NwogCWllZWUtPlJlZ2RvdDExSFRPcGVyYXRpb25hbFJhdGVTZXRbMV09IDB4ZmY7Ly9zdXBwb3J0IE1DUyA4fjE1CiAJaWVlZS0+UmVnZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFs0XT0gMHgwMTsKLQkvL2FkZGVkIGJ5IGFteQogCWllZWUtPmFjdHNjYW5uaW5nID0gZmFsc2U7CiAJaWVlZS0+YmVpbnJldHJ5ID0gZmFsc2U7CiAJaWVlZS0+aXNfc2V0X2tleSA9IGZhbHNlOwpAQCAtMjg5MSw4ICsyOTQ2LDYgQEAKIAogCWlmIChpZWVlLT5zZXRfc2VjdXJpdHkpCiAJCWllZWUtPnNldF9zZWN1cml0eShpZWVlLT5kZXYsICZzZWMpOwotCS8vZWxzZQotCS8vCXJldCA9IC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxNzMsNyArMzIyNiw2IEBACiAJaW50IHJldD0wOwogCiAJZG93bigmaWVlZS0+d3hfc2VtKTsKLQkvL0lFRUVfREVCVUdfSU5GTygid3BhX3N1cHBsaWNhbnQ6IGxlbj0lZFxuIiwgcC0+bGVuZ3RoKTsKIAogCWlmIChwLT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGllZWVfcGFyYW0pIHx8ICFwLT5wb2ludGVyKXsKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNDg0YzNhYi4uYTZhNWQ2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTMyLDcgKzMyLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0vLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpAQCAtMjA4LDcgKzIwNyw2IEBACiAJLyogVG8gZW5jcnlwdCwgZnJhbWUgZm9ybWF0IGlzOgogCSAqIElWICg0IGJ5dGVzKSwgY2xlYXIgcGF5bG9hZCAoaW5jbHVkaW5nIFNOQVApLCBJQ1YgKDQgYnl0ZXMpICovCiAKLQkvLyBQUjogRklYTUU6IENvcGllZCBmcm9tIGhvc3RhcC4gQ2hlY2sgZnJhZ21lbnRhdGlvbi9NU0RVL01QRFUgZW5jcnlwdGlvbi4KIAkvKiBIb3N0LWJhc2VkIElFRUUgODAyLjExIGZyYWdtZW50YXRpb24gZm9yIFRYIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBzbwogCSAqIGNhbGwgYm90aCBNU0RVIGFuZCBNUERVIGVuY3J5cHRpb24gZnVuY3Rpb25zIGZyb20gaGVyZS4gKi8KIAlhdG9taWNfaW5jKCZjcnlwdC0+cmVmY250KTsKQEAgLTIzMSw3ICsyMjksNiBAQAogCiAKIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIpIHsKLQkvL2ludCBpOwogCWlmICh1bmxpa2VseSghdHhiKSkKIAkJcmV0dXJuOwogCWtmcmVlKHR4Yik7CkBAIC0yODAsNyArMjc3LDYgQEAKIAlpZiAoZXRoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJcmV0dXJuIDA7CiAKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAlpcCA9IGlwX2hkcihza2IpOwogCiAJc3dpdGNoIChpcC0+dG9zICYgMHhmYykgewpAQCAtNjgxLDEwICs2NzcsOCBAQAogCQlpZiAoZW5jcnlwdCkKIAkJCWZjID0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfRkNUTF9XRVA7CiAJCWVsc2UKLQogICAgICAgICAgICAgICAgICAgICAgICAgZmMgPSBJRUVFODAyMTFfRlRZUEVfREFUQTsKIAotCQkvL2lmKGllZWUtPmN1cnJlbnRfbmV0d29yay5Rb1NfRW5hYmxlKQogCQlpZihxb3NfYWN0aXZlZCkKIAkJCWZjIHw9IElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQTsKIAkJZWxzZQpAQCAtNzY1LDcgKzc1OSw2IEBACiAJCXR4Yi0+ZW5jcnlwdGVkID0gZW5jcnlwdDsKIAkJdHhiLT5wYXlsb2FkX3NpemUgPSBieXRlczsKIAotCQkvL2lmIChpZWVlLT5jdXJyZW50X25ldHdvcmsuUW9TX0VuYWJsZSkKIAkJaWYocW9zX2FjdGl2ZWQpCiAJCXsKIAkJCXR4Yi0+cXVldWVfaW5kZXggPSBVUDJBQyhza2ItPnByaW9yaXR5KTsKQEAgLTgxMiw3ICs4MDUsNiBAQAogCQkJCS8qIFRoZSBsYXN0IGZyYWdtZW50IHRha2VzIHRoZSByZW1haW5pbmcgbGVuZ3RoICovCiAJCQkJYnl0ZXMgPSBieXRlc19sYXN0X2ZyYWc7CiAJCQl9Ci0JCQkvL2lmKGllZWUtPmN1cnJlbnRfbmV0d29yay5Rb1NfRW5hYmxlKQogCQkJaWYocW9zX2FjdGl2ZWQpCiAJCQl7CiAJCQkJLy8gYWRkIDEgb25seSBpbmRpY2F0ZSB0byBjb3JyZXNwb25kaW5nIHNlcSBudW1iZXIgY29udHJvbCAyMDA2LzcvMTIKQEAgLTg4OSw3ICs4ODEsNiBAQAogCQlpZiAoIHRjYl9kZXNjLT5iTXVsdGljYXN0IHx8ICB0Y2JfZGVzYy0+YkJyb2FkY2FzdCkKIAkJCXRjYl9kZXNjLT5kYXRhX3JhdGUgPSBpZWVlLT5iYXNpY19yYXRlOwogCQllbHNlCi0JCQkvL3RjYl9kZXNjLT5kYXRhX3JhdGUgPSBDVVJSRU5UX1JBVEUoaWVlZS0+Y3VycmVudF9uZXR3b3JrLm1vZGUsIGllZWUtPnJhdGUsIGllZWUtPkhUQ3VycmVudE9wZXJhUmF0ZSk7CiAJCQl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gQ1VSUkVOVF9SQVRFKGllZWUtPm1vZGUsIGllZWUtPnJhdGUsIGllZWUtPkhUQ3VycmVudE9wZXJhUmF0ZSk7CiAJCWllZWU4MDIxMV9xdXJleV9TaG9ydFByZWFtYmxlTW9kZShpZWVlLCB0Y2JfZGVzYyk7CiAJCWllZWU4MDIxMV90eF9xdWVyeV9hZ2dfY2FwKGllZWUsIHR4Yi0+ZnJhZ21lbnRzWzBdLCB0Y2JfZGVzYyk7CkBAIC04OTcsOCArODg4LDYgQEAKIAkJaWVlZTgwMjExX3F1ZXJ5X0JhbmR3aWR0aE1vZGUoaWVlZSwgdGNiX2Rlc2MpOwogCQlpZWVlODAyMTFfcXVlcnlfcHJvdGVjdGlvbm1vZGUoaWVlZSwgdGNiX2Rlc2MsIHR4Yi0+ZnJhZ21lbnRzWzBdKTsKIAkJaWVlZTgwMjExX3F1ZXJ5X3NlcW51bShpZWVlLCB0eGItPmZyYWdtZW50c1swXSwgaGVhZGVyLmFkZHIxKTsKLS8vCQlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQSwgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGEsIHR4Yi0+ZnJhZ21lbnRzWzBdLT5sZW4pOwotCQkvL0lFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCB0Y2JfZGVzYywgc2l6ZW9mKGNiX2Rlc2MpKTsKICNlbmRpZgogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDJjZTViZDUuLjk4NGEzNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC03Nyw3ICs3Nyw2IEBACiAJLyogQWRkIHRoZSBFU1NJRCAqLwogCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CiAJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0vLwlpZiAobmV0d29yay0+ZmxhZ3MgJiBORVRXT1JLX0VNUFRZX0VTU0lEKSB7CiAJaWYgKG5ldHdvcmstPnNzaWRfbGVuID09IDApIHsKIAkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplb2YoIjxoaWRkZW4+Iik7CiAgICAgICAgICAgICAgICAgc3RhcnQgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBzdGFydCwgc3RvcCwgJml3ZSwgIjxoaWRkZW4+Iik7CkBAIC0yNDAsOSArMjM5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJY2hhciAqZXYgPSBleHRyYTsKLS8vCWNoYXIgKnN0b3AgPSBldiArIElXX1NDQU5fTUFYX0RBVEE7CiAJY2hhciAqc3RvcCA9IGV2ICsgd3JxdS0+ZGF0YS5sZW5ndGg7Ly9JV19TQ0FOX01BWF9EQVRBOwotCS8vY2hhciAqc3RvcCA9IGV2ICsgSVdfU0NBTl9NQVhfREFUQTsKIAlpbnQgaSA9IDA7CiAJaW50IGVyciA9IDA7CiAJSUVFRTgwMjExX0RFQlVHX1dYKCJHZXR0aW5nIHNjYW5cbiIpOwpAQCAtNTExLDcgKzUwOCw2IEBACiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjID0gewogICAgICAgICAgICAgICAgIC5mbGFncyA9IDAsCiAgICAgICAgIH07Ci0JLy9wcmludGsoIj09PT09PT5lbmNvZGluZyBmbGFnOiV4LGV4dCBmbGFnOiV4LCBleHQgYWxnOiVkXG4iLCBlbmNvZGluZy0+ZmxhZ3MsZXh0LT5leHRfZmxhZ3MsIGV4dC0+YWxnKTsKICAgICAgICAgaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogICAgICAgICBpZiAoaWR4KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gV0VQX0tFWVMpCkBAIC01NjIsNyArNTU4LDYgQEAKICAgICAgICAgfQogCiAJc2VjLmVuYWJsZWQgPSAxOwotICAgIC8vICAgIHNlYy5lbmNyeXB0ID0gMTsKIAogICAgICAgICBzd2l0Y2ggKGV4dC0+YWxnKSB7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CkBAIC01ODAsNyArNTc1LDcgQEAKICAgICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQotCXByaW50aygiYWxnIG5hbWU6JXNcbiIsYWxnKTsKKwlJRUVFODAyMTFfREVCVUdfV1goImFsZyBuYW1lOiAlc1xuIiwgYWxnKTsKIAogCSBvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoYWxnKTsKICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKQpAQCAtNjI0LDggKzYxOSw2IEBACiAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAjaWYgMQotIC8vc2tpcF9ob3N0X2NyeXB0OgotCS8vcHJpbnRrKCJza2lwX2hvc3RfY3J5cHQ6ZXh0X2ZsYWdzOiV4XG4iLCBleHQtPmV4dF9mbGFncyk7CiAgICAgICAgIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewogICAgICAgICAgICAgICAgIGllZWUtPnR4X2tleWlkeCA9IGlkeDsKICAgICAgICAgICAgICAgICBzZWMuYWN0aXZlX2tleSA9IGlkeDsKQEAgLTYzMyw3ICs2MjYsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGV4dC0+YWxnICE9IElXX0VOQ09ERV9BTEdfTk9ORSkgewotICAgICAgICAgICAgICAgIC8vbWVtY3B5KHNlYy5rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwogICAgICAgICAgICAgICAgIHNlYy5rZXlfc2l6ZXNbaWR4XSA9IGV4dC0+a2V5X2xlbjsKICAgICAgICAgICAgICAgICBzZWMuZmxhZ3MgfD0gKDEgPDwgaWR4KTsKICAgICAgICAgICAgICAgICBpZiAoZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKQEAgLTY5MCw3ICs2ODIsNiBAQAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAgICAgICAgIGNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKIAkgICAgIC8qbmVlZCB0byBzdXBwb3J0IHdwYTIgaGVyZSovCi0JCS8vcHJpbnRrKCJ3cGEgdmVyc2lvbjoleFxuIiwgZGF0YS0+dmFsdWUpOwogCQlicmVhazsKICAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKICAgICAgICAgY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKQEAgLTcwOCw4ICs2OTksNiBAQAogCQlicmVhazsKIAogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJLy9wcmludGsoIj09PT09PT4lcygpOmRhdGEtPnZhbHVlIGlzICVkXG4iLF9fRlVOQ1RJT05fXyxkYXRhLT52YWx1ZSk7Ci0JLy8JaWVlZS0+b3Blbl93ZXAgPSAoZGF0YS0+dmFsdWUmSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pPzE6MDsKIAkJaWYoZGF0YS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKXsKIAkJCWllZWUtPm9wZW5fd2VwID0gMDsKIAkJCWllZWUtPmF1dGhfbW9kZSA9IDE7CkBAIC03MjEsMTcgKzcxMCwxNCBAQAogCQllbHNlIGlmKGRhdGEtPnZhbHVlICYgSVdfQVVUSF9BTEdfTEVBUCl7CiAJCQlpZWVlLT5vcGVuX3dlcCA9IDE7CiAJCQlpZWVlLT5hdXRoX21vZGUgPSAyOwotCQkJLy9wcmludGsoImhhaGFoYWE6TEVBUFxuIik7CiAJCX0KIAkJZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8vcHJpbnRrKCJvcGVuX3dlcDolZFxuIiwgaWVlZS0+b3Blbl93ZXApOwogCQlicmVhazsKIAogI2lmIDEKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCWllZWUtPndwYV9lbmFibGVkID0gKGRhdGEtPnZhbHVlKT8xOjA7Ci0JCS8vcHJpbnRrKCJlbmFibGUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CiAJCWJyZWFrOwogCiAjZW5kaWYKQEAgLTc1NSw3ICs3NDEsNiBAQAogCiAJaWYgKGxlbj5NQVhfV1BBX0lFX0xFTiB8fCAobGVuICYmIGllID09IE5VTEwpKQogCXsKLQkvLwlwcmludGsoInJldHVybiBlcnJvciBvdXQsIGxlbjolZFxuIiwgbGVuKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaAppbmRleCA4ZGRjOGJmOS4uMWMyYTQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkEuaApAQCAtMSwzICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQkFUWVBFX0hfCiAjZGVmaW5lIF9CQVRZUEVfSF8KIApAQCAtMTgsMTQgKzM2LDcgQEAKICNkZWZpbmUJREVMQkFfUkVBU09OX0VORF9CQQkJCTM3CiAjZGVmaW5lCURFTEJBX1JFQVNPTl9VTktOT1dOX0JBCTM4CiAjZGVmaW5lCURFTEJBX1JFQVNPTl9USU1FT1VUCQkJMzkKLS8qICB3aGV0aGVyIG5lZWQgZGVmaW5lIEJBIEFjdGlvbiBmcmFtZXMgaGVyZT8KLXN0cnVjdCBpZWVlODAyMTFfQUREQkFfUmVxewotCXN0cnVjdCBpZWVlODAyMTFfaGVhZGVyX2RhdGEgaGVhZGVyOwotCXU4CWNhdGVnb3J5OwotCXU4Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLSovCi0vL0lzIHRoaXMgbmVlZD9JIHB1dCBoZXJlIGp1c3QgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVmaW5lIHN0cnVjdHVyZSBCQV9SRUNPUkQgLy9XQgorCiB0eXBlZGVmIHVuaW9uIF9TRVFVRU5DRV9DT05UUk9MewogCXUxNiBTaG9ydERhdGE7CiAJc3RydWN0CkBAIC02NSw1ICs3Niw0IEBACiAJU0VRVUVOQ0VfQ09OVFJPTAlCYVN0YXJ0U2VxQ3RybDsKIH0gQkFfUkVDT1JELCAqUEJBX1JFQ09SRDsKIAotI2VuZGlmIC8vZW5kIF9CQVRZUEVfSF8KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCA4YzM3ZGQxLi5jYTYxMWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTEsOSArMSwyMSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGlzIGZpbGUgaXMgY3JlYXRlZCB0byBwcm9jZXNzIEJBIEFjdGlvbiBGcmFtZS4gQWNjb3JkaW5nIHRvIDgwMi4xMSBzcGVjLCB0aGVyZSBhcmUgMyBCQSBhY3Rpb24gdHlwZXMgYXQgYWxsLiBBbmQgYXMgQkEgaXMKLSAqIHJlbGF0ZWQgdG8gVFMsIHRoaXMgcGFydCBuZWVkIHNvbWUgc3RydXR1cmUgZGVmaW5lZCBpbiBRT1Mgc2lkZSBjb2RlLiBBbHNvIFRYIFJYIGlzIGdvaW5nIHRvIGJlIHJlc3R1cmN0dXJlZCwgc28gaG93IHRvIHNlbmQKLSAqIEFEREJBUkVRIEFEREJBUlNQIGFuZCBERUxCQSBwYWNrZXQgaXMgc3RpbGwgb24gY29uc2lkZXJhdGlvbi4gVGVtcG9yYXJpbHkgdXNlIE1BTkFHRSBRVUVVRSBpbnN0ZWFkIG9mIE5vcm1hbCBRdWV1ZS4KLSAqIFdCIDIwMDgtMDUtMjcKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlICJpZWVlODAyMTEuaCIKICNpbmNsdWRlICJydGw4MTl4X0JBLmgiCiAKQEAgLTExMiw3ICsxMjQsNiBAQAogCXU4KiB0YWcgPSBOVUxMOwogCXUxNiB0bXAgPSAwOwogCXUxNiBsZW4gPSBpZWVlLT50eF9oZWFkcm9vbSArIDk7Ci0JLy9jYXRlZ29yeSgxKSArIGFjdGlvbiBmaWVsZCgxKSArIERpYWxvZyBUb2tlbigxKSArIEJBIFBhcmFtZXRlciBTZXQoMikgKyAgQkEgVGltZW91dCBWYWx1ZSgyKSArICBCQSBTdGFydCBTZXFDdHJsKDIpKG9yIFN0YXR1c0NvZGUoMikpCiAJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIGZyYW1lKCVkKSBzZW50ZCB0bzolcE0sIGllZWUtPmRldjolcFxuIiwgX19GVU5DVElPTl9fLCB0eXBlLCBEc3QsIGllZWUtPmRldik7CiAJaWYgKHBCQSA9PSBOVUxMfHxpZWVlID09IE5VTEwpCiAJewpAQCAtMTM4LDcgKzE0OSw2IEBACiAKIAlCQVJlcS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUKTsgLy9hY3Rpb24gZnJhbWUKIAotCS8vdGFnICs9IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOyAvL21vdmUgdG8gYWN0aW9uIGZpZWxkCiAJdGFnID0gKHU4Kilza2JfcHV0KHNrYiwgOSk7CiAJKnRhZyArKz0gQUNUX0NBVF9CQTsKIAkqdGFnICsrPSB0eXBlOwpAQCAtMTcxLDcgKzE4MSw2IEBACiAKIAlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQXxJRUVFODAyMTFfRExfQkEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCXJldHVybiBza2I7Ci0JLy9yZXR1cm4gTlVMTDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTYsNyArMjA1LDYgQEAKIAkgc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIqIERlbGJhID0gTlVMTDsKIAl1OCogdGFnID0gTlVMTDsKIAl1MTYgdG1wID0gMDsKLQkvL2xlbiA9IGhlYWQgbGVuICsgREVMQkEgUGFyYW1ldGVyIFNldCgyKSArIFJlYXNvbiBDb2RlKDIpCiAJdTE2IGxlbiA9IDYgKyBpZWVlLT50eF9oZWFkcm9vbTsKIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCkBAIC0yMTMsNyArMjIxLDYgQEAKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJjYW4ndCBhbGxvYyBza2IgZm9yIEFEREJBX1JFUVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KLS8vCW1lbXNldChza2ItPmRhdGEsIDAsIGxlbitzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSk7CiAJc2tiX3Jlc2VydmUoc2tiLCBpZWVlLT50eF9oZWFkcm9vbSk7CiAKIAlEZWxiYSA9ICggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikgc2tiX3B1dChza2Isc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikpOwpAQCAtMjU4LDkgKzI2NSw2IEBACiAJaWYgKHNrYikKIAl7CiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7Ci0JCS8vYWRkIHN0YXRpc3RpYyBuZWVkZWQgaGVyZS4KLQkJLy9hbmQgc2tiIHdpbGwgYmUgZnJlZWQgaW4gc29mdG1hY19tZ210X3htaXQoKSwgc28gb21pdCBhbGwgZGV2X2tmcmVlX3NrYl9hbnkoKSBvdXRzaWRlIHNvZnRtYWNfbWdtdF94bWl0KCkKLQkJLy9XQgogCX0KIAllbHNlCiAJewpAQCAtMjg0LDcgKzI4OCw2IEBACiAJaWYgKHNrYikKIAl7CiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7Ci0JCS8vc2FtZSBhYm92ZQogCX0KIAllbHNlCiAJewpAQCAtMzExLDcgKzMxNCw2IEBACiAJaWYgKHNrYikKIAl7CiAJCXNvZnRtYWNfbWdtdF94bWl0KHNrYiwgaWVlZSk7Ci0JCS8vc2FtZSBhYm92ZQogCX0KIAllbHNlCiAJewpAQCAtMzYxLDggKzM2Myw3IEBACiAvL3NvbWUgb3RoZXIgY2FwYWJpbGl0eSBpcyBub3QgcmVhZHkgbm93LgogCWlmKAkoaWVlZS0+Y3VycmVudF9uZXR3b3JrLnFvc19kYXRhLmFjdGl2ZSA9PSAwKSB8fAogCQkoaWVlZS0+cEhUSW5mby0+YkN1cnJlbnRIVFN1cHBvcnQgPT0gZmFsc2UpIHx8Ci0JCShpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX1JFSkVDVF9BRERCQV9SRVEpKSAvL3x8Ci0JLy8JKGllZWUtPnBTdGFRb3MtPmJFbmFibGVSeEltbUJBID09IGZhbHNlKQkpCisJCShpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX1JFSkVDVF9BRERCQV9SRVEpKQogCXsKIAkJcmMgPSBBRERCQV9TVEFUVVNfUkVGVVNFRDsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJGYWlsZWQgdG8gcmVwbHkgb24gQUREQkFfUkVRIGFzIHNvbWUgY2FwYWJpbGl0eSBpcyBub3QgcmVhZHkoJWQsICVkKVxuIiwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLnFvc19kYXRhLmFjdGl2ZSwgaWVlZS0+cEhUSW5mby0+YkN1cnJlbnRIVFN1cHBvcnQpOwpAQCAtMzk0LDcgKzM5NSw2IEBACiAJCWdvdG8gT25BRERCQVJlcV9GYWlsOwogCX0KIAkJLy8gQWRtaXQgdGhlIEFEREJBIFJlcXVlc3QKLQkvLwogCURlQWN0aXZhdGVCQUVudHJ5KGllZWUsIHBCQSk7CiAJcEJBLT5EaWFsb2dUb2tlbiA9ICpwRGlhbG9nVG9rZW47CiAJcEJBLT5CYVBhcmFtU2V0ID0gKnBCYVBhcmFtU2V0OwpAQCAtNDA2LDEwICs0MDYsOSBAQAogCXBCQS0+QmFQYXJhbVNldC5maWVsZC5CdWZmZXJTaXplID0gMTsKIAllbHNlCiAJcEJBLT5CYVBhcmFtU2V0LmZpZWxkLkJ1ZmZlclNpemUgPSAzMjsKLQlBY3RpdmF0ZUJBRW50cnkoaWVlZSwgcEJBLCAwKTsvL3BCQS0+QmFUaW1lb3V0VmFsdWUpOworCUFjdGl2YXRlQkFFbnRyeShpZWVlLCBwQkEsIDApOwogCWllZWU4MDIxMV9zZW5kX0FEREJBUnNwKGllZWUsIGRzdCwgcEJBLCBBRERCQV9TVEFUVVNfU1VDQ0VTUyk7CiAKLQkvLyBFbmQgb2YgcHJvY2VkdXJlLgogCXJldHVybiAwOwogCiBPbkFEREJBUmVxX0ZhaWw6CkBAIC01NDEsMTEgKzU0MCwxMSBAQAogCQlwQWRtaXR0ZWRCQS0+QmFQYXJhbVNldCA9ICpwQmFQYXJhbVNldDsKIAkJRGVBY3RpdmF0ZUJBRW50cnkoaWVlZSwgcEFkbWl0dGVkQkEpOwogCQlBY3RpdmF0ZUJBRW50cnkoaWVlZSwgcEFkbWl0dGVkQkEsICpwQmFUaW1lb3V0VmFsKTsKLQl9Ci0JZWxzZQotCXsKLQkJLy8gRGVsYXkgbmV4dCBBRERCQSBwcm9jZXNzLgorCX0gZWxzZSB7CiAJCXBUUy0+YkFkZEJhUmVxRGVsYXllZCA9IHRydWU7CisJCXBUUy0+YkRpc2FibGVfQWRkQmEgPSB0cnVlOworCQlSZWFzb25Db2RlID0gREVMQkFfUkVBU09OX0VORF9CQTsKKwkJZ290byBPbkFEREJBUnNwX1JlamVjdDsKIAl9CiAKIAkvLyBFbmQgb2YgcHJvY2VkdXJlCkBAIC02MzUsNyArNjM0LDYgQEAKIAkJcFR4VHMtPmJBZGRCYVJlcUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAkJcFR4VHMtPmJBZGRCYVJlcURlbGF5ZWQgPSBmYWxzZTsKIAkJZGVsX3RpbWVyX3N5bmMoJnBUeFRzLT5Uc0FkZEJhVGltZXIpOwotCQkvL1BsYXRmb3JtQ2FuY2VsVGltZXIoQWRhcHRlciwgJnBUeFRzLT5Uc0FkZEJhVGltZXIpOwogCQlUeFRzRGVsZXRlQkEoaWVlZSwgcFR4VHMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFQuaAppbmRleCBhOTdjOTAxLi4xNzEyMTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hULmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVC5oCkBAIC0xLDMgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9SVEw4MTlYVV9IVFRZUEVfSF8KICNkZWZpbmUgX1JUTDgxOVhVX0hUVFlQRV9IXwogCkBAIC0zODEsOCArMzk5LDcgQEAKIAl1MTYJCQkJCWJkSFRJbmZvTGVuOwogCiAJSFRfU1BFQ19WRVIJCQkJYmRIVFNwZWNWZXI7Ci0JLy9IVF9DQVBBQklMSVRZX0VMRQkJCWJkSFRDYXBFbGU7Ci0JLy9IVF9JTkZPUk1BVElPTl9FTEUJCWJkSFRJbmZvRWxlOworCUhUX0NIQU5ORUxfV0lEVEgJCQliZEJhbmRXaWR0aDsKIAogCXU4CQkJCQliZFJUMlJUQWdncmVnYXRpb247CiAJdTgJCQkJCWJkUlQyUlRMb25nU2xvdFRpbWU7CkBAIC00MDYsNyArNDIzLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX0ZBTFNFX0FMQVJNX1NUQVRJU1RJQ1N7CiAJdTMyCUNudF9QYXJpdHlfRmFpbDsKLQl1MzIgICAgQ250X1JhdGVfSWxsZWdhbDsKKwl1MzIJQ250X1JhdGVfSWxsZWdhbDsKIAl1MzIJQ250X0NyYzhfZmFpbDsKIAl1MzIJQ250X2FsbDsKIH1GQUxTRV9BTEFSTV9TVEFUSVNUSUNTLCAqUEZBTFNFX0FMQVJNX1NUQVRJU1RJQ1M7CkBAIC00NzYsMTAgKzQ5Myw5IEBACiAJSFRfSU9UX0FDVF9GT1JDRURfQ1RTMlNFTEYgPSAweDAwMDAwMjAwLAogCUhUX0lPVF9BQ1RfRk9SQ0VEX1JUUyA9IDB4MDAwMDA0MDAsCiAJSFRfSU9UX0FDVF9BTVNEVV9FTkFCTEUgPSAweDAwMDAwODAwLAotCUhUX0lPVF9BQ1RfTUlEX0hJR0hQT1dFUiA9IDB4MDAwMDEwMDAsCi0JSFRfSU9UX0FDVF9SRUpFQ1RfQUREQkFfUkVRID0gMHgwMDAwMjAwMCwKLQlIVF9JT1RfQUNUX0FMTE9XX1BFRVJfQUdHX09ORV9QS1QgPSAweDAwMDA0MDAwLAotCUhUX0lPVF9BQ1RfRURDQV9CSUFTX09OX1JYID0gMHgwMDAwODAwMCwKKwlIVF9JT1RfQUNUX1JFSkVDVF9BRERCQV9SRVEgPSAweDAwMDAxMDAwLAorCUhUX0lPVF9BQ1RfQUxMT1dfUEVFUl9BR0dfT05FX1BLVCA9IDB4MDAwMDIwMDAsCisJSFRfSU9UX0FDVF9FRENBX0JJQVNfT05fUlggPSAweDAwMDA0MDAwLAogCiAJSFRfSU9UX0FDVF9IWUJSSURfQUdHUkVHQVRJT04gPSAweDAwMDEwMDAwLAogCUhUX0lPVF9BQ1RfRElTQUJMRV9TSE9SVF9HSSA9IDB4MDAwMjAwMDAsCkBAIC00ODcsMTIgKzUwMywxOSBAQAogCUhUX0lPVF9BQ1RfRElTQUJMRV9UWF80MF9NSFogPSAweDAwMDgwMDAwLAogCUhUX0lPVF9BQ1RfVFhfTk9fQUdHUkVHQVRJT04gPSAweDAwMTAwMDAwLAogCUhUX0lPVF9BQ1RfRElTQUJMRV9UWF8yU1MgPSAweDAwMjAwMDAwLAorCQorICAgICAgICBIVF9JT1RfQUNUX01JRF9ISUdIUE9XRVIgPSAweDAwNDAwMDAwLAorICAgICAgICBIVF9JT1RfQUNUX05VTExfREFUQV9QT1dFUl9TQVZJTkcgPSAweDAwODAwMDAwLAorICAgICAgICAKKyAgICAgICAgSFRfSU9UX0FDVF9ESVNBQkxFX0NDS19SQVRFID0gMHgwMTAwMDAwMCwKKwlIVF9JT1RfQUNUX0ZPUkNFRF9FTkFCTEVfQkVfVFhPUCA9IDB4MDIwMDAwMDAsCisJSFRfSU9UX0FDVF9XQV9JT1RfQnJvYWRjb20gPSAweDA0MDAwMDAwLAogfUhUX0lPVF9BQ1RJT05fRSwgKlBIVF9JT1RfQUNUSU9OX0U7CiAKIHR5cGVkZWYgZW51bSBfSFRfSU9UX1JBRlVOQ3sKKwlIVF9JT1RfUkFGVU5DX0RJU0FCTEVfQUxMID0gMHgwMCwKIAlIVF9JT1RfUkFGVU5DX1BFRVJfMVIgPSAweDAxLAogCUhUX0lPVF9SQUZVTkNfVFhfQU1TRFUgPSAweDAyLAotCUhUX0lPVF9SQUZVTkNfRElTQUJMRV9BTEwgPSAweDgwLAogfUhUX0lPVF9SQUZVTkMsICpQSFRfSU9UX1JBRlVOQzsKIAogdHlwZWRlZiBlbnVtIF9SVF9IVF9DQVB7CkBAIC01MDQsNSArNTI3LDQgQEAKIAlSVF9IVF9DQVBfVVNFXzkyU0UgPSAweDIwLAogfVJUX0hUX0NBUEJJTElUWSwgKlBSVF9IVF9DQVBCSUxJVFk7CiAKLSNlbmRpZiAvL19SVEw4MTlYVV9IVFRZUEVfSF8KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCAwMTExNGM1Li5jZmQ5YTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKQEAgLTEsNSArMSwyMSBAQAotCi0vL0FzIHRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHBvcnRlZCBmcm9tIFdpbmRvd3MgZHJpdmVyLCBzbyBsZWF2ZSB0aGUgbmFtZSBsaXR0bGUgY2hhbmdlZC4gSWYgYW55IGNvbmZ1c2lvbiBjYXVzZWQsIHRlbGwgbWUuIENyZWF0ZWQgYnkgV0IuIDIwMDguMDUuMDgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAjaW5jbHVkZSAicnRsODE5eF9IVC5oIgogdTggTUNTX0ZJTFRFUl9BTExbMTZdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwpAQCAtOCwzMiArMjQsMzEgQEAKIAogdTE2IE1DU19EQVRBX1JBVEVbMl1bMl1bNzddID0KIAl7CXsJezEzLCAyNiwgMzksIDUyLCA3OCwgMTA0LCAxMTcsIDEzMCwgMjYsIDUyLCA3OCAsMTA0LCAxNTYsIDIwOCwgMjM0LCAyNjAsCi0JCQkzOSwgNzgsIDExNywgMjM0LCAzMTIsIDM1MSwgMzkwLCA1MiwgMTA0LCAxNTYsIDIwOCwgMzEyLCA0MTYsIDQ2OCwgNTIwLAorCQkJMzksIDc4LCAxMTcsIDIzNCwgMzEyLCAzNTEsIDM5MCwgNTIsIDEwNCwgMTU2LCAyMDgsIDMxMiwgNDE2LCA0NjgsIDUyMCwgCiAJCQkwLCA3OCwgMTA0LCAxMzAsIDExNywgMTU2LCAxOTUsIDEwNCwgMTMwLCAxMzAsIDE1NiwgMTgyLCAxODIsIDIwOCwgMTU2LCAxOTUsCi0JCQkxOTUsIDIzNCwgMjczLCAyNzMsIDMxMiwgMTMwLCAxNTYsIDE4MSwgMTU2LCAxODEsIDIwOCwgMjM0LCAyMDgsIDIzNCwgMjYwLCAyNjAsCi0JCQkyODYsIDE5NSwgMjM0LCAyNzMsIDIzNCwgMjczLCAzMTIsIDM1MSwgMzEyLCAzNTEsIDM5MCwgMzkwLCA0Mjl9LAkJCS8vIExvbmcgR0ksIDIwTUh6Ci0JCQl7MTQsIDI5LCA0MywgNTgsIDg3LCAxMTYsIDEzMCwgMTQ0LCAyOSwgNTgsIDg3LCAxMTYsIDE3MywgMjMxLCAyNjAsIDI4OSwKLQkJCTQzLCA4NywgMTMwLCAxNzMsIDI2MCwgMzQ3LCAzOTAsIDQzMywgNTgsIDExNiwgMTczLCAyMzEsIDM0NywgNDYyLCA1MjAsIDU3OCwKLQkJCTAsIDg3LCAxMTYsIDE0NCwgMTMwLCAxNzMsIDIxNywgMTE2LCAxNDQsIDE0NCwgMTczLCAyMDIsIDIwMiwgMjMxLCAxNzMsIDIxNywKLQkJCTIxNywgMjYwLCAzMDMsIDMwMywgMzQ3LCAxNDQsIDE3MywgMjAyLCAxNzMsIDIwMiwgMjMxLCAyNjAsIDIzMSwgMjYwLCAyODksIDI4OSwKLQkJCTMxOCwgMjE3LCAyNjAsIDMwMywgMjYwLCAzMDMsIDM0NywgMzkwLCAzNDcsIDM5MCwgNDMzLCA0MzMsIDQ3N30JfSwJCS8vIFNob3J0IEdJLCAyME1IegotCQl7CXsyNywgNTQsIDgxLCAxMDgsIDE2MiwgMjE2LCAyNDMsIDI3MCwgNTQsIDEwOCwgMTYyLCAyMTYsIDMyNCwgNDMyLCA0ODYsIDU0MCwKLQkJCTgxLCAxNjIsIDI0MywgMzI0LCA0ODYsIDY0OCwgNzI5LCA4MTAsIDEwOCwgMjE2LCAzMjQsIDQzMiwgNjQ4LCA4NjQsIDk3MiwgMTA4MCwKLQkJCTEyLCAxNjIsIDIxNiwgMjcwLCAyNDMsIDMyNCwgNDA1LCAyMTYsIDI3MCwgMjcwLCAzMjQsIDM3OCwgMzc4LCA0MzIsIDMyNCwgNDA1LAotCQkJNDA1LCA0ODYsIDU2NywgNTY3LCA2NDgsIDI3MCwgMzI0LCAzNzgsIDMyNCwgMzc4LCA0MzIsIDQ4NiwgNDMyLCA0ODYsIDU0MCwgNTQwLAotCQkJNTk0LCA0MDUsIDQ4NiwgNTY3LCA0ODYsIDU2NywgNjQ4LCA3MjksIDY0OCwgNzI5LCA4MTAsIDgxMCwgODkxfSwgCS8vIExvbmcgR0ksIDQwTUh6Ci0JCQl7MzAsIDYwLCA5MCwgMTIwLCAxODAsIDI0MCwgMjcwLCAzMDAsIDYwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwLCA2MDAsCi0JCQk5MCwgMTgwLCAyNzAsIDM2MCwgNTQwLCA3MjAsIDgxMCwgOTAwLCAxMjAsIDI0MCwgMzYwLCA0ODAsIDcyMCwgOTYwLCAxMDgwLCAxMjAwLAotCQkJMTMsIDE4MCwgMjQwLCAzMDAsIDI3MCwgMzYwLCA0NTAsIDI0MCwgMzAwLCAzMDAsIDM2MCwgNDIwLCA0MjAsIDQ4MCwgMzYwLCA0NTAsCi0JCQk0NTAsIDU0MCwgNjMwLCA2MzAsIDcyMCwgMzAwLCAzNjAsIDQyMCwgMzYwLCA0MjAsIDQ4MCwgNTQwLCA0ODAsIDU0MCwgNjAwLCA2MDAsCi0JCQk2NjAsIDQ1MCwgNTQwLCA2MzAsIDU0MCwgNjMwLCA3MjAsIDgxMCwgNzIwLCA4MTAsIDkwMCwgOTAwLCA5OTB9CX0JLy8gU2hvcnQgR0ksIDQwTUh6CisJCQkxOTUsIDIzNCwgMjczLCAyNzMsIDMxMiwgMTMwLCAxNTYsIDE4MSwgMTU2LCAxODEsIDIwOCwgMjM0LCAyMDgsIDIzNCwgMjYwLCAyNjAsIAorCQkJMjg2LCAxOTUsIDIzNCwgMjczLCAyMzQsIDI3MywgMzEyLCAzNTEsIDMxMiwgMzUxLCAzOTAsIDM5MCwgNDI5fSwJCQkKKwkJCXsxNCwgMjksIDQzLCA1OCwgODcsIDExNiwgMTMwLCAxNDQsIDI5LCA1OCwgODcsIDExNiwgMTczLCAyMzEsIDI2MCwgMjg5LCAKKwkJCTQzLCA4NywgMTMwLCAxNzMsIDI2MCwgMzQ3LCAzOTAsIDQzMywgNTgsIDExNiwgMTczLCAyMzEsIDM0NywgNDYyLCA1MjAsIDU3OCwgCisJCQkwLCA4NywgMTE2LCAxNDQsIDEzMCwgMTczLCAyMTcsIDExNiwgMTQ0LCAxNDQsIDE3MywgMjAyLCAyMDIsIDIzMSwgMTczLCAyMTcsIAorCQkJMjE3LCAyNjAsIDMwMywgMzAzLCAzNDcsIDE0NCwgMTczLCAyMDIsIDE3MywgMjAyLCAyMzEsIDI2MCwgMjMxLCAyNjAsIDI4OSwgMjg5LCAKKwkJCTMxOCwgMjE3LCAyNjAsIDMwMywgMjYwLCAzMDMsIDM0NywgMzkwLCAzNDcsIDM5MCwgNDMzLCA0MzMsIDQ3N30JfSwJCQorCQl7CXsyNywgNTQsIDgxLCAxMDgsIDE2MiwgMjE2LCAyNDMsIDI3MCwgNTQsIDEwOCwgMTYyLCAyMTYsIDMyNCwgNDMyLCA0ODYsIDU0MCwgCisJCQk4MSwgMTYyLCAyNDMsIDMyNCwgNDg2LCA2NDgsIDcyOSwgODEwLCAxMDgsIDIxNiwgMzI0LCA0MzIsIDY0OCwgODY0LCA5NzIsIDEwODAsIAorCQkJMTIsIDE2MiwgMjE2LCAyNzAsIDI0MywgMzI0LCA0MDUsIDIxNiwgMjcwLCAyNzAsIDMyNCwgMzc4LCAzNzgsIDQzMiwgMzI0LCA0MDUsIAorCQkJNDA1LCA0ODYsIDU2NywgNTY3LCA2NDgsIDI3MCwgMzI0LCAzNzgsIDMyNCwgMzc4LCA0MzIsIDQ4NiwgNDMyLCA0ODYsIDU0MCwgNTQwLCAKKwkJCTU5NCwgNDA1LCA0ODYsIDU2NywgNDg2LCA1NjcsIDY0OCwgNzI5LCA2NDgsIDcyOSwgODEwLCA4MTAsIDg5MX0sIAkKKwkJCXszMCwgNjAsIDkwLCAxMjAsIDE4MCwgMjQwLCAyNzAsIDMwMCwgNjAsIDEyMCwgMTgwLCAyNDAsIDM2MCwgNDgwLCA1NDAsIDYwMCwgCisJCQk5MCwgMTgwLCAyNzAsIDM2MCwgNTQwLCA3MjAsIDgxMCwgOTAwLCAxMjAsIDI0MCwgMzYwLCA0ODAsIDcyMCwgOTYwLCAxMDgwLCAxMjAwLCAKKwkJCTEzLCAxODAsIDI0MCwgMzAwLCAyNzAsIDM2MCwgNDUwLCAyNDAsIDMwMCwgMzAwLCAzNjAsIDQyMCwgNDIwLCA0ODAsIDM2MCwgNDUwLCAKKwkJCTQ1MCwgNTQwLCA2MzAsIDYzMCwgNzIwLCAzMDAsIDM2MCwgNDIwLCAzNjAsIDQyMCwgNDgwLCA1NDAsIDQ4MCwgNTQwLCA2MDAsIDYwMCwgCisJCQk2NjAsIDQ1MCwgNTQwLCA2MzAsIDU0MCwgNjMwLCA3MjAsIDgxMCwgNzIwLCA4MTAsIDkwMCwgOTAwLCA5OTB9CX0JCiAJfTsKIAogc3RhdGljIHU4IFVOS05PV05fQk9SQURDT01bM10gPSB7MHgwMCwgMHgxNCwgMHhiZn07CiBzdGF0aWMgdTggTElOS1NZU1dSVDMzMF9MSU5LU1lTV1JUMzAwX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWEsIDB4NzB9Owogc3RhdGljIHU4IExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTVszXSA9IHsweDAwLCAweDFkLCAweDdlfTsKLXN0YXRpYyB1OCBORVRHRUFSODM0QnYyX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWIsIDB4MmZ9Owotc3RhdGljIHU4IEJFTEtJTkY1RDgyMzNWMV9SQUxJTktbM10gPSB7MHgwMCwgMHgxNywgMHgzZn07CS8vY29zYSAwMzIwMjAwOAorc3RhdGljIHU4IEJFTEtJTkY1RDgyMzNWMV9SQUxJTktbM10gPSB7MHgwMCwgMHgxNywgMHgzZn07CQogc3RhdGljIHU4IEJFTEtJTkY1RDgyMzM0VjNfUkFMSU5LWzNdID0gezB4MDAsIDB4MWMsIDB4ZGZ9Owogc3RhdGljIHU4IFBDSV9SQUxJTktbM10gPSB7MHgwMCwgMHg5MCwgMHhjY307CiBzdGF0aWMgdTggRURJTUFYX1JBTElOS1szXSA9IHsweDAwLCAweDBlLCAweDJlfTsKQEAgLTQxLDEwICs1Niw5IEBACiBzdGF0aWMgdTggRExJTktfQVRIRVJPU18xWzNdID0gezB4MDAsIDB4MWMsIDB4ZjB9Owogc3RhdGljIHU4IERMSU5LX0FUSEVST1NfMlszXSA9IHsweDAwLCAweDIxLCAweDkxfTsKIHN0YXRpYyB1OCBDSVNDT19CUk9BRENPTVszXSA9IHsweDAwLCAweDE3LCAweDk0fTsKK3N0YXRpYyB1OCBORVRHRUFSX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWYsIDB4MzN9Owogc3RhdGljIHU4IExJTktTWVNfTUFSVkVMTF80NDAwTlszXSA9IHsweDAwLCAweDE0LCAweGE0fTsKLS8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWxkIHdlIHB1dCB0aGUKLS8vIGNvZGUgaW4gb3RoZXIgcGxhY2U/PwotLy9zdGF0aWMgdTggV0lGSV9DSVNDT19HX0FQWzNdID0gezB4MDAsIDB4NDAsIDB4OTZ9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqZnVuY3Rpb246ICBUaGlzIGZ1bmN0aW9uIHVwZGF0ZSBkZWZhdWx0IHNldHRpbmdzIGluIHBIVEluZm8gc3RydWN0dXJlCiAgKiAgIGlucHV0OiAgUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvCkBAIC01NSwxMCArNjksNyBAQAogdm9pZCBIVFVwZGF0ZURlZmF1bHRTZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlKQogewogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87Ci0JLy9jb25zdCB0eXBlb2YoICgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKikwKS0+cEhUSW5mbyApICpfX21wdHIgPSAmcEhUSW5mbzsKIAotCS8vcHJpbnRrKCJwSFRpbmZvOiVwLCAmcEhUaW5mbzolcCwgbXB0cjolcCwgIG9mZnNldG9mOiV4XG4iLCBwSFRJbmZvLCAmcEhUSW5mbywgX19tcHRyLCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgcEhUSW5mbykpOwotCS8vcHJpbnRrKCI9PT0+aWVlZTolcCxcbiIsIGllZWUpOwogCS8vIFNob3J0R0kgc3VwcG9ydAogCXBIVEluZm8tPmJSZWdTaG9ydEdJMjBNSHo9IDE7CiAJcEhUSW5mby0+YlJlZ1Nob3J0R0k0ME1Iej0gMTsKQEAgLTI5MSw3ICszMDIsNiBAQAogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1MTYgIFR4Q291bnRUb0RhdGFSYXRlKCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSwgdTggbkRhdGFSYXRlKQogewotCS8vUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gaWVlZS0+cEhUSW5mbzsKIAl1MTYJCUNDS09GRE1SYXRlWzEyXSA9IHsweDAyICwgMHgwNCAsIDB4MGIgLCAweDE2ICwgMHgwYyAsIDB4MTIgLCAweDE4ICwgMHgyNCAsIDB4MzAgLCAweDQ4ICwgMHg2MCAsIDB4NmN9OwogCXU4CWlzNDBNSHogPSAwOwogCXU4CWlzU2hvcnRHSSA9IDA7CkBAIC0zMDcsMjggKzMxNywyNCBAQAogCQkJaXM0ME1IeiA9IDA7CiAJCQlpc1Nob3J0R0kgPSAwOwogCi0JCSAgICAgIC8vIG5EYXRhUmF0ZSA9IG5EYXRhUmF0ZSAtIDEyOwogCQl9CiAJCWVsc2UgaWYobkRhdGFSYXRlID49MHgyMCAgJiYgbkRhdGFSYXRlIDw9IDB4MmYgKSAvLygyNywgNDQpCiAJCXsKIAkJCWlzNDBNSHogPSAxOwogCQkJaXNTaG9ydEdJID0gMDsKIAotCQkJLy9uRGF0YVJhdGUgPSBuRGF0YVJhdGUgLSAyODsKIAkJfQogCQllbHNlIGlmKG5EYXRhUmF0ZSA+PSAweDMwICAmJiBuRGF0YVJhdGUgPD0gMHgzZiApICAvLyg0MywgNjApCiAJCXsKIAkJCWlzNDBNSHogPSAwOwogCQkJaXNTaG9ydEdJID0gMTsKIAotCQkJLy9uRGF0YVJhdGUgPSBuRGF0YVJhdGUgLSA0NDsKIAkJfQogCQllbHNlIGlmKG5EYXRhUmF0ZSA+PSAweDQwICAmJiBuRGF0YVJhdGUgPD0gMHg0ZiApIC8vKDU5LCA3NikKIAkJewogCQkJaXM0ME1IeiA9IDE7CiAJCQlpc1Nob3J0R0kgPSAxOwogCi0JCQkvL25EYXRhUmF0ZSA9IG5EYXRhUmF0ZSAtIDYwOwogCQl9CiAJCXJldHVybiBNQ1NfREFUQV9SQVRFW2lzNDBNSHpdW2lzU2hvcnRHSV1bbkRhdGFSYXRlJjB4Zl07CiAJfQpAQCAtMzUxLDcgKzM1Nyw2IEBACiAJZWxzZSBpZigobWVtY21wKG5ldC0+YnNzaWQsIFVOS05PV05fQk9SQURDT00sIDMpPT0wKSB8fAogICAgIAkJICAgIChtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDMzMF9MSU5LU1lTV1JUMzAwX0JST0FEQ09NLCAzKT09MCl8fAogICAgIAkJICAgIChtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDM1MF9MSU5LU1lTV1JUMTUwX0JST0FEQ09NLCAzKT09MCl8fAotICAgIAkJICAgIChtZW1jbXAobmV0LT5ic3NpZCwgTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTSwgMyk9PTApIHx8CiAgICAgCQkgICAgKG5ldC0+YnJvYWRjb21fY2FwX2V4aXN0KSkKICAgICAJCSAgcmV0VmFsdWUgPSB0cnVlOwogCWVsc2UgaWYobmV0LT5ic3NodC5iZFJUMlJUQWdncmVnYXRpb24pCkBAIC0zNzksMTMgKzM4NCwxNSBAQAogCQlpZihuZXQtPmJzc2h0LlJUMlJUX0hUX01vZGUgJiBSVF9IVF9DQVBfVVNFXzkyU0UpewogCQkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX1JFQUxURUtfOTJTRTsKIAkJfQorCQlpZihuZXQtPmJzc2h0LlJUMlJUX0hUX01vZGUgJiBSVF9IVF9DQVBfVVNFX1NPRlRBUCl7CisJCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfOTJVX1NPRlRBUDsKKwkJfQogCX0KIAllbHNlIGlmKG5ldC0+YnJvYWRjb21fY2FwX2V4aXN0KQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQlJPQURDT007CiAJZWxzZSBpZigobWVtY21wKG5ldC0+YnNzaWQsIFVOS05PV05fQk9SQURDT00sIDMpPT0wKSB8fAogCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzMwX0xJTktTWVNXUlQzMDBfQlJPQURDT00sIDMpPT0wKXx8Ci0JCQkobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTSwgMyk9PTApfHwKLQkJCShtZW1jbXAobmV0LT5ic3NpZCwgTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTSwgMyk9PTApICkKKwkJCShtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDM1MF9MSU5LU1lTV1JUMTUwX0JST0FEQ09NLCAzKT09MCkpCiAJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9CUk9BRENPTTsKIAllbHNlIGlmKChtZW1jbXAobmV0LT5ic3NpZCwgQkVMS0lORjVEODIzM1YxX1JBTElOSywgMyk9PTApIHx8CiAJCQkobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzM0VjNfUkFMSU5LLCAzKT09MCkgfHwKQEAgLTM5OCw3ICs0MDUsNyBAQAogCQkobWVtY21wKG5ldC0+YnNzaWQsIERMSU5LX0FUSEVST1NfMSwgMykgPT0gMCl8fAogCQkobWVtY21wKG5ldC0+YnNzaWQsIERMSU5LX0FUSEVST1NfMiwgMykgPT0gMCkpCiAJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9BVEhFUk9TOwotCWVsc2UgaWYobWVtY21wKG5ldC0+YnNzaWQsIENJU0NPX0JST0FEQ09NLCAzKT09MCkKKwllbHNlIGlmICgobWVtY21wKG5ldC0+YnNzaWQsIENJU0NPX0JST0FEQ09NLCAzKT09MCl8fG5ldC0+Y2lzY29fY2FwX2V4aXN0KQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQ0lTQ087CiAJZWxzZSBpZiAoKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTX01BUlZFTExfNDQwME4sIDMpID09IDApIHx8CiAJCSAgbmV0LT5tYXJ2ZWxsX2NhcF9leGlzdCkKQEAgLTQzOSwyNSArNDQ2LDYgQEAKIGJvb2wgSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSkKIHsKIAlib29sIHJldFZhbHVlID0gZmFsc2U7Ci0KLSNpZmRlZiBUT0RPCi0JLy8gQXBwbHkgZm9yIDgxOXUgb25seQotI2lmIChIQUxfQ09ERV9CQVNFPT1SVEw4MTkyKQotCi0jaWYgKERFVl9CVVNfVFlQRSA9PSBVU0JfSU5URVJGQUNFKQotCS8vIEFsd2F5IGRpc2FibGUgTUNTMTUgYnkgSmVycnkgQ2hhbmcncyByZXF1ZXN0LmJ5IEVtaWx5LCAyMDA4LjA0LjE1Ci0JcmV0VmFsdWUgPSB0cnVlOwotI2VsaWYgKERFVl9CVVNfVFlQRSA9PSBQQ0lfSU5URVJGQUNFKQotCS8vIEVuYWJsZSBNQ1MxNSBpZiB0aGUgcGVlciBpcyBDaXNjbyBBUC4gYnkgRW1pbHksIDIwMDguMDUuMTIKLS8vCWlmKHBCc3NEZXNjLT5iQ2lzY29DYXBFeGlzdCkKLS8vCQlyZXRWYWx1ZSA9IGZhbHNlOwotLy8JZWxzZQotCQlyZXRWYWx1ZSA9IGZhbHNlOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCS8vIEplcnJ5IENoYW5nIHN1Z2dlc3QgdGhhdCA4MTkwIDF4MiBkb2VzIG5vdCBuZWVkIHRvIGRpc2FibGUgTUNTMTUKLQogCXJldHVybiByZXRWYWx1ZTsKIH0KIApAQCAtNjI0LDE3ICs2MTIsMTEgQEAKICAgSFRJT1RBY3RJc0VEQ0FCaWFzUngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQogewogCXU4CXJldFZhbHVlID0gMDsKLQkvL2lmKElTX0hBUkRXQVJFX1RZUEVfODE5MlNVKEFkYXB0ZXIpKQogCVBSVF9ISUdIX1RIUk9VR0hQVVQJcEhUSW5mbyA9IGllZWUtPnBIVEluZm87CiAJewotLy8jaWYgVU5ERVJfVklTVEEKLS8vCQlpZihwQnNzRGVzYy0+VmVuZGVyPT1IVF9JT1RfUEVFUl9BVEhFUk9TIHx8Ci0vLwkJCXBCc3NEZXNjLT5WZW5kZXI9PUhUX0lPVF9QRUVSX1JBTElOSykKLS8vI2Vsc2UKIAkJaWYocEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfQVRIRVJPUyB8fAogCQkgICBwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9CUk9BRENPTSB8fAogCQkgICBwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9SQUxJTkspCi0vLyNlbmRpZgogCQkJcmV0dXJuIDE7CiAKIAl9CkBAIC02NDksNyArNjMxLDYgQEAKIAogCWlmKHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1JBTElOSykKIAl7Ci0JCWlmKG5ldHdvcmstPmJzc2h0LmJkSFQxUikKIAkJCXJldFZhbHVlID0gMTsKIAl9CiAKQEAgLTY2Miw5ICs2NDMsMTAgQEAKIAl1OAlyZXRWYWx1ZSA9IDA7CiAJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gaWVlZS0+cEhUSW5mbzsKIAotCWlmKHBIVEluZm8tPklPVFBlZXI9PUhUX0lPVF9QRUVSX1JBTElOSykKKwlpZihwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9SQUxJTksgfHwKKwkJcEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkVBTFRFSyB8fAorCQlwSFRJbmZvLT5JT1RQZWVyPT1IVF9JT1RfUEVFUl9SRUFMVEVLXzkyU0UpCiAJewotCQlpZihuZXR3b3JrLT5ic3NodC5iZEhUMVIpCiAJCQlyZXRWYWx1ZSA9IDE7CiAJfQogCkBAIC03MTgsOCArNzAwLDcgQEAKIAkJKEtFWV9UWVBFX1dFUDQwID09IGllZWUtPmdyb3VwX2tleV90eXBlKSB8fAogCQkoS0VZX1RZUEVfVEtJUCA9PSBpZWVlLT5wYWlyd2lzZV9rZXlfdHlwZSkgKQogCXsKLQkJaWYocEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkVBTFRFSyB8fAotCQkgICAgcEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfVU5LTk9XTikKKwkJaWYocEhUSW5mby0+SU9UUGVlcj09SFRfSU9UX1BFRVJfUkVBTFRFSykKIAkJCXJldFZhbHVlID0gMTsKIAl9CiAKQEAgLTc1MSwxMCArNzMyLDExIEBACiB7CiAJYm9vbCAJcmV0VmFsdWUgPSBmYWxzZTsKIAlQUlRfSElHSF9USFJPVUdIUFVUCXBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOworCWlmKHBIVEluZm8tPklPVFBlZXIgPT0gSFRfSU9UX1BFRVJfQlJPQURDT00pCiAJewotCQlpZihwSFRJbmZvLT5JT1RQZWVyID09IEhUX0lPVF9QRUVSX01BUlZFTEwpCisJCWlmKChtZW1jbXAobmV0d29yay0+YnNzaWQsIE5FVEdFQVJfQlJPQURDT00sIDMpPT0wKQorCQkJJiYgKG5ldHdvcmstPmJzc2h0LmJkQmFuZFdpZHRoID09IEhUX0NIQU5ORUxfV0lEVEhfMjBfNDApKQogCQkJcmV0dXJuIHRydWU7Ci0KIAl9CiAJcmV0dXJuIHJldFZhbHVlOwogfQpAQCAtNzgzLDcgKzc2NSw2IEBACiB7CiAJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFQgPSBpZWVlLT5wSFRJbmZvOwogCVBIVF9DQVBBQklMSVRZX0VMRSAJcENhcEVMRSA9IE5VTEw7Ci0JLy91OCBiSXNEZWNsYXJlTUNTMTM7CiAKIAlpZiAoKHBvc0hUQ2FwID09IE5VTEwpIHx8IChwSFQgPT0gTlVMTCkpCiAJewpAQCAtODEzLDEzICs3OTQsMTEgQEAKIAkJcENhcEVMRS0+Q2hsV2lkdGggPSAocEhULT5iUmVnQlc0ME1Iej8xOjApOwogCX0KIAotLy8JcENhcEVMRS0+Q2hsV2lkdGggCQk9IChwSFQtPmJSZWdCVzQwTUh6PzE6MCk7CiAJcENhcEVMRS0+TWltb1B3clNhdmUgCQk9IHBIVC0+U2VsZk1pbW9QczsKIAlwQ2FwRUxFLT5HcmVlbkZpZWxkCQk9IDA7IC8vIFRoaXMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIG5vdyEhCiAJcENhcEVMRS0+U2hvcnRHSTIwTWh6CQk9IDE7IC8vIFdlIGNhbiByZWNlaXZlIFNob3J0IEdJISEKIAlwQ2FwRUxFLT5TaG9ydEdJNDBNaHoJCT0gMTsgLy8gV2UgY2FuIHJlY2VpdmUgU2hvcnQgR0khIQotCS8vRGJnUHJpbnQoIlRYIEhUIGNhcC9pbmZvIGVsZSBCVz0lZCBTRzIwPSVkIFNHNDA9JWRcblxyIiwKLQkJLy9wQ2FwRUxFLT5DaGxXaWR0aCwgcENhcEVMRS0+U2hvcnRHSTIwTWh6LCBwQ2FwRUxFLT5TaG9ydEdJNDBNaHopOworCiAJcENhcEVMRS0+VHhTVEJDIAkJPSAxOwogCXBDYXBFTEUtPlJ4U1RCQyAJCT0gMDsKIAlwQ2FwRUxFLT5EZWxheUJBCQk9IDA7CS8vIERvIG5vdCBzdXBwb3J0IG5vdyEhCkBAIC04NzksMTIgKzg1OCw2IEBACiAJZWxzZQogCQkqbGVuID0gMjYgKyAyOwogCi0KLQotLy8JSUVFRTgwMjExX0RFQlVHX0RBVEEoSUVFRTgwMjExX0RMX0RBVEEgfCBJRUVFODAyMTFfRExfSFQsIHBvc0hUQ2FwLCAqbGVuIC0yKTsKLQotCS8vUHJpbnQgZWFjaCBmaWVsZCBpbiBkZXRhaWwuIERyaXZlciBzaG91bGQgbm90IHByaW50IG91dCB0aGlzIG1lc3NhZ2UgYnkgZGVmYXVsdAotLy8JSFREZWJ1Z0hUQ2FwYWJpbGl0eShwb3NIVENhcCwgKHU4KikiSFRDb25zdHJ1Y3RDYXBhYmlsaXR5KCkiKTsKIAlyZXR1cm47CiAKIH0KQEAgLTkzOCw4ICs5MTEsNiBAQAogCQkvL1NUQSBzaG91bGQgbm90IGdlbmVyYXRlIEhpZ2ggVGhyb3VnaHB1dCBJbmZvcm1hdGlvbiBFbGVtZW50CiAJCSpsZW4gPSAwOwogCX0KLQkvL0lFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBIHwgSUVFRTgwMjExX0RMX0hULCBwb3NIVEluZm8sICpsZW4gLSAyKTsKLQkvL0hURGVidWdIVEluZm8ocG9zSFRJbmZvLCAiSFRDb25zdHJ1Y3RJbmZvckVsZW1lbnQiKTsKIAlyZXR1cm47CiB9CiAKQEAgLTEwMDUsNyArOTc2LDYgQEAKIAkqLwogCiAjZWxzZQotCS8vIERvIE5vdGhpbmcKICNlbmRpZgogCiAJcG9zUlQyUlRBZ2ctPkxlbmd0aCA9IDY7CkBAIC0xMTg4LDEyICsxMTU4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0hULCAiPT09PiBIVE9uQXNzb2NSc3Bfd3EoKTogSFRfRU5BQkxFXG4iKTsKLS8vCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBLCBwSFRJbmZvLT5QZWVySFRDYXBCdWYsIHNpemVvZihIVF9DQVBBQklMSVRZX0VMRSkpOwotLy8JSUVFRTgwMjExX0RFQlVHX0RBVEEoSUVFRTgwMjExX0RMX0RBVEEsIHBIVEluZm8tPlBlZXJIVEluZm9CdWYsIHNpemVvZihIVF9JTkZPUk1BVElPTl9FTEUpKTsKIAotLy8JSFREZWJ1Z0hUQ2FwYWJpbGl0eShwSFRJbmZvLT5QZWVySFRDYXBCdWYsIkhUT25Bc3NvY1JzcF93cSIpOwotLy8JSFREZWJ1Z0hUSW5mbyhwSFRJbmZvLT5QZWVySFRJbmZvQnVmLCJIVE9uQXNzb2NSc3Bfd3EiKTsKLQkvLwogCWlmKCFtZW1jbXAocEhUSW5mby0+UGVlckhUQ2FwQnVmLEVXQzExTkhUQ2FwLCBzaXplb2YoRVdDMTFOSFRDYXApKSkKIAkJcFBlZXJIVENhcCA9IChQSFRfQ0FQQUJJTElUWV9FTEUpKCZwSFRJbmZvLT5QZWVySFRDYXBCdWZbNF0pOwogCWVsc2UKQEAgLTEyMDksMTIgKzExNzQsMTAgQEAKIAkvLyBDb25maWd1cmF0aW9uczoKIAkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCUlFRUU4MDIxMV9ERUJVR19EQVRBKElFRUU4MDIxMV9ETF9EQVRBfElFRUU4MDIxMV9ETF9IVCwgcFBlZXJIVENhcCwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfRUxFKSk7Ci0vLwlJRUVFODAyMTFfREVCVUdfREFUQShJRUVFODAyMTFfRExfREFUQXxJRUVFODAyMTFfRExfSFQsIHBQZWVySFRJbmZvLCBzaXplb2YoSFRfSU5GT1JNQVRJT05fRUxFKSk7Ci0JLy8gQ29uZmlnIFN1cHBvcnRlZCBDaGFubmVsIFdpZHRoIHNldHRpbmcKLQkvLworCiAJSFRTZXRDb25uZWN0QndNb2RlKGllZWUsIChIVF9DSEFOTkVMX1dJRFRIKShwUGVlckhUQ2FwLT5DaGxXaWR0aCksIChIVF9FWFRDSE5MX09GRlNFVCkocFBlZXJIVEluZm8tPkV4dENobE9mZnNldCkpOwogCi0vLwlpZihwSFRJbmZvLT5iQ3VyQlc0ME1IeiA9PSB0cnVlKQorCWlmKHBIVEluZm8tPmJDdXJCVzQwTUh6ID09IHRydWUpCiAJCXBIVEluZm8tPmJDdXJUeEJXNDBNSHogPSAoKHBQZWVySFRJbmZvLT5SZWNvbW1lbWRlZFR4V2lkdGggPT0gMSk/dHJ1ZTpmYWxzZSk7CiAKIAkvLwpAQCAtMTI5NSw3ICsxMjU4LDcgQEAKIAogCS8vIDwyPiBTZXQgQU1QRFUgTWluaW11bSBNUERVIFN0YXJ0IFNwYWNpbmcKIAkvLyA4MDIuMTFuIDMuMCBzZWN0aW9uIDkuN2QuMwotI2lmIDEKKyNpZiAwCiAJaWYocEhUSW5mby0+TVBEVV9EZW5zaXR5ID4gcFBlZXJIVENhcC0+TVBEVURlbnNpdHkpCiAJCXBIVEluZm8tPkN1cnJlbnRNUERVRGVuc2l0eSA9IHBIVEluZm8tPk1QRFVfRGVuc2l0eTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1Fvcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9Rb3MuaAppbmRleCBkNDU2NWVjLi45MjgwNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1Fvcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfUW9zLmgKQEAgLTEsMyArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19JTkNfUU9TX1RZUEVfSAogI2RlZmluZSBfX0lOQ19RT1NfVFlQRV9ICiAKQEAgLTM2LDE4ICs1NCw2IEBACiAKICNkZWZpbmUJTUFYX1dNTUVMRV9MRU5HVEgJNjQKIAotLy8KLS8vIFFvUyBtb2RlLgotLy8gZW51bSAwLCAxLCAyLCA0OiBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBPUih8KSBvcGVyYXRpb24uCi0vLwotLy8gUU9TX01PREUgaXMgcmVkZWZpbmVkIGZvciBlbnVtIGNhbid0IGJlICsrLCB8IHVuZGVyIEMrKyBjb21waWxlciwgMjAwNi4wNS4xNywgYnkgcmNuamtvLgotLy90eXBlZGVmCWVudW0gX1FPU19NT0RFewotLy8JUU9TX0RJU0FCTEUJCT0gMCwKLS8vCVFPU19XTU0JCQk9IDEsCi0vLwlRT1NfRURDQQkJCT0gMiwKLS8vCVFPU19IQ0NBCQkJPSA0LAotLy99UU9TX01PREUsKlBRT1NfTU9ERTsKLS8vCiB0eXBlZGVmIHUzMiBRT1NfTU9ERSwgKlBRT1NfTU9ERTsKICNkZWZpbmUgUU9TX0RJU0FCTEUJCTAKICNkZWZpbmUgUU9TX1dNTQkJCTEKQEAgLTIxOSwxOSArMjI1LDYgQEAKIAogfVFPU19JTkZPX0ZJRUxELCAqUFFPU19JTkZPX0ZJRUxEOwogCi0vLwotLy8gQUNJIHRvIEFDIGNvZGluZy4KLS8vIFJlZjogV01NIHNwZWMgMi4yLjI6IFdNRSBQYXJhbWV0ZXIgRWxlbWVudCwgcC4xMy4KLS8vCi0vLyBBQ19DT0RJTkcgaXMgcmVkZWZpbmVkIGZvciBlbnVtIGNhbid0IGJlICsrLCB8IHVuZGVyIEMrKyBjb21waWxlciwgMjAwNi4wNS4xNywgYnkgcmNuamtvLgotLy90eXBlZGVmCWVudW0gX0FDX0NPRElOR3sKLS8vCUFDMF9CRQk9IDAsCQkvLyBBQ0k6IDB4MDAJLy8gQmVzdCBFZmZvcnQKLS8vCUFDMV9CSwk9IDEsCQkvLyBBQ0k6IDB4MDEJLy8gQmFja2dyb3VuZAotLy8JQUMyX1ZJCT0gMiwJCS8vIEFDSTogMHgxMAkvLyBWaWRlbwotLy8JQUMzX1ZPCT0gMywJCS8vIEFDSTogMHgxMQkvLyBWb2ljZQotLy8JQUNfTUFYID0gNCwJCS8vIE1heDogZGVmaW5lIHRvdGFsIG51bWJlcjsgU2hvdWxkIG5vdCB0byBiZSB1c2VkIGFzIGEgcmVhbCBlbnVtLgotLy99QUNfQ09ESU5HLCpQQUNfQ09ESU5HOwotLy8KIHR5cGVkZWYgdTMyIEFDX0NPRElORzsKICNkZWZpbmUgQUMwX0JFCTAJCS8vIEFDSTogMHgwMAkvLyBCZXN0IEVmZm9ydAogI2RlZmluZSBBQzFfQksJMQkJLy8gQUNJOiAweDAxCS8vIEJhY2tncm91bmQKQEAgLTI1Miw3ICsyNDUsNyBAQAogCQl1OAlBQ006MTsKIAkJdTgJQUNJOjI7CiAJCXU4CVJlc2VydmVkOjE7Ci0JfWY7CS8vIEZpZWxkCisJfWY7CiB9QUNJX0FJRlNOLCAqUEFDSV9BSUZTTjsKIAogLy8KQEAgLTI2NSw3ICsyNTgsNyBAQAogCXsKIAkJdTgJRUNXbWluOjQ7CiAJCXU4CUVDV21heDo0OwotCX1mOwkvLyBGaWVsZAorCX1mOwogfUVDVywgKlBFQ1c7CiAKIC8vCkBAIC0yODEsNyArMjc0LDcgQEAKIAkJQUNJX0FJRlNOCUFjaUFpZnNuOwogCQlFQ1cJCUVjdzsKIAkJdTE2CQlUWE9QTGltaXQ7Ci0JfWY7CS8vIEZpZWxkCisJfWY7CiB9QUNfUEFSQU0sICpQQUNfUEFSQU07CiAKIApAQCAtMzU0LDcgKzM0Nyw3IEBACiAJCXUzMglNaW5QaHlSYXRlOwogCQl1MTYJU3VycGx1c0JhbmR3aWR0aEFsbG93YW5jZTsKIAkJdTE2CU1lZGl1bVRpbWU7Ci0JfSBmOwkvLyBGaWVsZAorCX0gZjsKIH1UU1BFQ19CT0RZLCAqUFRTUEVDX0JPRFk7CiAKIApAQCAtMzg0LDcgKzM3Nyw2IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgX0FDTXsKLS8vCXU4CQlSZWdFbmFibGVBQ007CiAJdTY0CQlVc2VkVGltZTsKIAl1NjQJCU1lZGl1bVRpbWU7CiAJdTgJCUh3QWNtQ3RsOwkvLyBUUlVFOiBVc2VkVGltZSBleGNlZWQgPT4gRG8gTk9UIFVTRSB0aGlzIEFDLiBJdCB3bGwgYmUgd3JpdHRlbiB0byBBQ01fQ09OVFJPTCgweEJGIEJJVCAwLzEvMiBpbiA4MTg1QikuCkBAIC00MDQsMTAgKzM5Niw2IEBACiAjZGVmaW5lCUdFVF9CRV9VQVBTRChfYXBzZCkgKChfYXBzZCkgJiBCSVQzKQogI2RlZmluZQlTRVRfQkVfVUFQU0QoX2Fwc2QpICgoX2Fwc2QpIHw9IEJJVDMpCiAKLQotLy90eXBlZGVmIHN0cnVjdCBfVENMQVNTewotLy8gVE9ETwotLy99IFRDTEFTUywgKlBUQ0xBU1M7CiB0eXBlZGVmIHVuaW9uIF9RT1NfVENMQVN7CiAKIAlzdHJ1Y3QgX1RZUEVfR0VORVJBTHsKQEAgLTQ1OSwzMiArNDQ3LDEyIEBACiAJfSBUWVBFMl84MDIxUTsKIH0gUU9TX1RDTEFTLCAqUFFPU19UQ0xBUzsKIAotLy90eXBlZGVmIHN0cnVjdCBfV01NX1RTVFJFQU17Ci0vLwotLy8tIFRTUEVDCi0vLy0gQUMgKHdoaWNoIHRvIG1hcHBpbmcpCi0vL30gV01NX1RTVFJFQU0sICpQV01NX1RTVFJFQU07CiB0eXBlZGVmIHN0cnVjdCBfUU9TX1RTVFJFQU17CiAJdTgJCQlBQzsKIAlXTU1fVFNQRUMJCVRTcGVjOwogCVFPU19UQ0xBUwkJVENsYXNzOwogfSBRT1NfVFNUUkVBTSwgKlBRT1NfVFNUUkVBTTsKIAotLy90eXBlZGVmIHN0cnVjdCBfVV9BUFNEewotLy8tIFRyaWdnZXJFbmFibGUgWzRdCi0vLy0gTWF4U1BMZW5ndGgKLS8vLSBIaWdoZXN0QWNCdWZmZXJlZAotLy99IFVfQVBTRCwgKlBVX0FQU0Q7Ci0KLS8vam9zZXBoIFRPRE86Ci0vLwlVQVBTRCBmdW5jdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgMiBkYXRhIHN0cnVjdHVyZQotLy8JIlFvcyBjb250cm9sIGZpZWxkIiBhbmQgIlFvcyBpbmZvIGZpZWxkIgotLy90eXBlZGVmIHN0cnVjdCBfUU9TX1VBUFNEewotLy8JdTgJCQliVHJpZ2dlckVuYWJsZVs0XTsKLS8vCXU4IAkJCU1heFNQTGVuZ3RoOwotLy8JdTgJCQlIaWdoZXN0QnVmQUM7Ci0vL30gUU9TX1VBUFNELCAqUFFPU19BUFNEOwotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICAgICAgODAyLjExIE1hbmFnZW1lbnQgZnJhbWUgU3RhdHVzIENvZGUgZmllbGQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDk4LDcgKzQ2Niw2IEBACiAvLyBSZWY6IERPVDExX1FPUyBpbiA4MTg1IGNvZGUuIFtkZWYuIGluIFFvU19tcC5oXQogLy8KIHR5cGVkZWYgc3RydWN0IF9TVEFfUU9TewotCS8vREVDTEFSRV9SVF9PQkpFQ1QoU1RBX1FPUyk7CiAJdTgJCQkJV01NSUVCdWZbTUFYX1dNTUVMRV9MRU5HVEhdOwogCXU4KgkJCQlXTU1JRTsKIApAQCAtNTY1LDE4ICs1MzIsOSBAQAogCUFDX1BBUkFNCQlBY1BhcmFtZXRlcls0XTsKIH1CU1NfUU9TLCAqUEJTU19RT1M7CiAKLQotLy8KLS8vIFJlZjogc1FvU0N0bExuZyBhbmQgUW9TQ3RsIGRlZmluaXRpb24gaW4gODE4NSBRb1MgY29kZS4KLS8vI2RlZmluZSBRb1NDdGwgICAoKAkoQWRhcHRlci0+YlJlZ1FvUykgJiYgKEFkYXB0ZXItPmRvdDExUW9TLlFvU01vZGUgJihRT1NfRURDQXxRT1NfSENDQSkpCSAgKSAgP3NRb1NDdGxMbmc6MCkKLS8vCiAjZGVmaW5lIHNRb1NDdGxMbmcJCQkyCiAjZGVmaW5lCVFPU19DVFJMX0xFTihfUW9zTW9kZSkJCSgoX1Fvc01vZGUgPiBRT1NfRElTQUJMRSk/IHNRb1NDdGxMbmcgOiAwKQogCi0KLS8vQWRkZWQgYnkgam9zZXBoCi0vL1VQIE1hcHBpbmcgdG8gQUMsIHVzaW5nIGluIE1nbnRRdWVyeV9TZXF1ZW5jZU51bWJlcigpIGFuZCBtYXliZSBmb3IgRFNDUAotLy8jZGVmaW5lIFVQMkFDKHVwKQkJCSgodXA8Myk/KCh1cD09MCk/MTowKToodXA+PjEpKQogI2RlZmluZSBJc0FDVmFsaWQoYWMpCQkJKChhYzw9NyApP3RydWU6ZmFsc2UgKQogCi0jZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19RT1NfVFlQRV9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFMuaAppbmRleCBiYWFhYzIxLi5hMDdiMjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UUy5oCkBAIC0xLDMgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9UU1RZUEVfSF8KICNkZWZpbmUgX1RTVFlQRV9IXwogI2luY2x1ZGUgInJ0bDgxOXhfUW9zLmgiCkBAIC0zMCwxMCArNDgsMTAgQEAKIAl1MTYJCQkJVHhDdXJTZXE7CiAJQkFfUkVDT1JECQkJVHhQZW5kaW5nQkFSZWNvcmQ7ICAJLy8gRm9yIEJBIE9yaWdpbmF0b3IKIAlCQV9SRUNPUkQJCQlUeEFkbWl0dGVkQkFSZWNvcmQ7CS8vIEZvciBCQSBPcmlnaW5hdG9yCi0vLwlRT1NfRExfUkVDT1JECQlETFJlY29yZDsKIAl1OAkJCQliQWRkQmFSZXFJblByb2dyZXNzOwogCXU4CQkJCWJBZGRCYVJlcURlbGF5ZWQ7CiAJdTgJCQkJYlVzaW5nQmE7CisJdTggCQkJCWJEaXNhYmxlX0FkZEJhOwogCXN0cnVjdCB0aW1lcl9saXN0CQlUc0FkZEJhVGltZXI7CiAJdTgJCQkJbnVtOwogfSBUWF9UU19SRUNPUkQsICpQVFhfVFNfUkVDT1JEOwpAQCAtNDgsOSArNjYsNiBAQAogCXUxNgkJCQlSeExhc3RTZXFOdW07CiAJdTgJCQkJUnhMYXN0RnJhZ051bTsKIAl1OAkJCQludW07Ci0vLwlRT1NfRExfUkVDT1JECQlETFJlY29yZDsKIH0gUlhfVFNfUkVDT1JELCAqUFJYX1RTX1JFQ09SRDsKIAotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKaW5kZXggZGUxNDNlYy4uN2ZmYzA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCkBAIC0xLDMgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yOSw3ICs0Nyw2IEBACiAKIAlQUlhfUkVPUkRFUl9FTlRSWSAJcFJlb3JkZXJFbnRyeSA9IE5VTEw7CiAKLQkvL3UzMiBmbGFncyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9yeGIgKnN0YXRzX0luZGljYXRlQXJyYXlbUkVPUkRFUl9XSU5fU0laRV07CiAJdTggaW5kZXggPSAwOwpAQCAtMzcsNyArNTQsNiBAQAogCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmKGllZWUtPnJlb3JkZXJfc3BpbmxvY2spLCBmbGFncyk7Ci0JLy9QbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhBZGFwdGVyLCBSVF9SWF9TUElOTE9DSyk7CiAJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SRU9SREVSLCI9PT09PT09PT09PT09PT09PT0+JXMoKVxuIixfX0ZVTkNUSU9OX18pOwogCWlmKHBSeFRzLT5SeFRpbWVvdXRJbmRpY2F0ZVNlcSAhPSAweGZmZmYpCiAJewpAQCAtNzIsNyArODgsNiBAQAogCiAJaWYoaW5kZXg+MCkKIAl7Ci0JCS8vIFNldCBSeFRpbWVvdXRJbmRpY2F0ZVNlcSB0byAweGZmZmYgdG8gaW5kaWNhdGUgbm8gcGVuZGluZyBwYWNrZXRzIGluIGJ1ZmZlciBub3cuCiAJCXBSeFRzLT5SeFRpbWVvdXRJbmRpY2F0ZVNlcSA9IDB4ZmZmZjsKIAogCQkvLyBJbmRpY2F0ZSBwYWNrZXRzCkBAIC04Miw2ICs5Nyw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJaWVlZTgwMjExX2luZGljYXRlX3BhY2tldHMoaWVlZSwgc3RhdHNfSW5kaWNhdGVBcnJheSwgaW5kZXgpOworCQkgYlBrdEluQnVmID0gZmFsc2U7CiAJfQogCiAJaWYoYlBrdEluQnVmICYmIChwUnhUcy0+UnhUaW1lb3V0SW5kaWNhdGVTZXE9PTB4ZmZmZikpCkBAIC0xMjYsNiArMTQyLDcgQEAKIAlwVFMtPmJBZGRCYVJlcUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAlwVFMtPmJBZGRCYVJlcURlbGF5ZWQgPSBmYWxzZTsKIAlwVFMtPmJVc2luZ0JhID0gZmFsc2U7CisJcFRTLT5iRGlzYWJsZV9BZGRCYSA9IGZhbHNlOwogCVJlc2V0QmFFbnRyeSgmcFRTLT5UeEFkbWl0dGVkQkFSZWNvcmQpOyAvL0ZvciBCQSBPcmlnaW5hdG9yCiAJUmVzZXRCYUVudHJ5KCZwVFMtPlR4UGVuZGluZ0JBUmVjb3JkKTsKIH0KQEAgLTIxMiw3ICsyMjksNiBAQAogCX0KIAkvLyBJbml0aWFsaXplIHVudXNlZCBSeCBSZW9yZGVyIExpc3QuCiAJSU5JVF9MSVNUX0hFQUQoJmllZWUtPlJ4UmVvcmRlcl9VbnVzZWRfTGlzdCk7Ci0vLyNpZmRlZiBUT19ET19MSVNUCiAJZm9yKGNvdW50ID0gMDsgY291bnQgPCBSRU9SREVSX0VOVFJZX05VTTsgY291bnQrKykKIAl7CiAJCWxpc3RfYWRkX3RhaWwoICZwUnhSZW9yZGVyRW50cnktPkxpc3QsJmllZWUtPlJ4UmVvcmRlcl9VbnVzZWRfTGlzdCk7CkBAIC0yMjAsNyArMjM2LDYgQEAKIAkJCWJyZWFrOwogCQlwUnhSZW9yZGVyRW50cnkgPSAmaWVlZS0+UnhSZW9yZGVyRW50cnlbY291bnQrMV07CiAJfQotLy8jZW5kaWYKIAogfQogCkBAIC0yMzYsNyArMjUxLDYgQEAKIAogUFRTX0NPTU1PTl9JTkZPIFNlYXJjaEFkbWl0VFJTdHJlYW0oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4KglBZGRyLCB1OCBUSUQsIFRSX1NFTEVDVAlUeFJ4U2VsZWN0KQogewotCS8vRElSRUNUSU9OX1ZBTFVFIAlkaXI7CiAJdTggCWRpcjsKIAlib29sCQkJCXNlYXJjaF9kaXJbNF0gPSB7MCwgMCwgMCwgMH07CiAJc3RydWN0IGxpc3RfaGVhZCoJCXBzZWFyY2hfbGlzdDsgLy9GSVhNRQpAQCAtMjgyLDE4ICsyOTYsMTUgQEAKIAllbHNlCiAJCXBzZWFyY2hfbGlzdCA9ICZpZWVlLT5SeF9UU19BZG1pdF9MaXN0OwogCi0JLy9mb3IoZGlyID0gRElSX1VQOyBkaXIgPD0gRElSX0JJX0RJUjsgZGlyKyspCiAJZm9yKGRpciA9IDA7IGRpciA8PSBESVJfQklfRElSOyBkaXIrKykKIAl7CiAJCWlmKHNlYXJjaF9kaXJbZGlyXSA9PWZhbHNlICkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBSZXQsIHBzZWFyY2hfbGlzdCwgTGlzdCl7Ci0JLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJBREQ6JXBNLCBUSUQ6JWQsIGRpcjolZFxuIiwgcFJldC0+QWRkciwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lELCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbik7CiAJCQlpZiAobWVtY21wKHBSZXQtPkFkZHIsIEFkZHIsIDYpID09IDApCiAJCQkJaWYgKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCA9PSBUSUQpCiAJCQkJCWlmKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjRGlyZWN0aW9uID09IGRpcikKIAkJCQkJewotCS8vCQkJCQlwcmludGsoIkJpbmdvISBnb3QgaXRcbiIpOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIApAQCAtMzUyLDEwICszNjMsOSBAQAogCS8vCiAJaWYoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoQWRkcikgfHwgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoQWRkcikpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgImdldCBUUyBmb3IgQnJvYWRjYXN0IG9yIE11bHRpY2FzdFxuIik7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiRVJSISBnZXQgVFMgZm9yIEJyb2FkY2FzdCBvciBNdWx0aWNhc3RcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCiAJaWYgKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5zdXBwb3J0ZWQgPT0gMCkKIAkJVVAgPSAwOwogCWVsc2UKQEAgLTM2Myw3ICszNzMsNyBAQAogCQkvLyBJbiBXTU0gY2FzZTogd2UgdXNlIDQgVElEIG9ubHkKIAkJaWYgKCFJc0FDVmFsaWQoVElEKSkKIAkJewotCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgaW4gJXMoKSwgVElEKCVkKSBpcyBub3QgdmFsaWRcbiIsIF9fRlVOQ1RJT05fXywgVElEKTsKKwkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAiRVJSISBpbiAlcygpLCBUSUQoJWQpIGlzIG5vdCB2YWxpZFxuIiwgX19GVU5DVElPTl9fLCBUSUQpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTQ3OCw3ICs0ODgsNiBAQAogCVRSX1NFTEVDVAkJCVR4UnhTZWxlY3QKIAkpCiB7Ci0JLy91MzIgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWRlbF90aW1lcl9zeW5jKCZwVHMtPlNldHVwVGltZXIpOwogCWRlbF90aW1lcl9zeW5jKCZwVHMtPkluYWN0VGltZXIpOwpAQCAtNDg2LDcgKzQ5NSw2IEBACiAKIAlpZihUeFJ4U2VsZWN0ID09IFJYX0RJUikKIAl7Ci0vLyNpZmRlZiBUT19ET19MSVNUCiAJCVBSWF9SRU9SREVSX0VOVFJZCXBSeFJlb3JkZXJFbnRyeTsKIAkJUFJYX1RTX1JFQ09SRCAJCXBSeFRTID0gKFBSWF9UU19SRUNPUkQpcFRzOwogCQlpZih0aW1lcl9wZW5kaW5nKCZwUnhUUy0+UnhQa3RQZW5kaW5nVGltZXIpKQpAQCAtNDk0LDkgKzUwMiw3IEBACiAKICAgICAgICAgICAgICAgICB3aGlsZSghbGlzdF9lbXB0eSgmcFJ4VFMtPlJ4UGVuZGluZ1BrdExpc3QpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgIFBsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JYX1NQSU5MT0NLKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoaWVlZS0+cmVvcmRlcl9zcGlubG9jayksIGZsYWdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vcFJ4UmVvcmRlckVudHJ5ID0gbGlzdF9lbnRyeSgmcFJ4VFMtPlJ4UGVuZGluZ1BrdExpc3QucHJldixSWF9SRU9SREVSX0VOVFJZLExpc3QpOwogCQkJcFJ4UmVvcmRlckVudHJ5ID0gKFBSWF9SRU9SREVSX0VOVFJZKWxpc3RfZW50cnkocFJ4VFMtPlJ4UGVuZGluZ1BrdExpc3QucHJldixSWF9SRU9SREVSX0VOVFJZLExpc3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9kZWxfaW5pdCgmcFJ4UmVvcmRlckVudHJ5LT5MaXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTUxNCwxMSArNTIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ4YiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZwUnhSZW9yZGVyRW50cnktPkxpc3QsJmllZWUtPlJ4UmVvcmRlcl9VbnVzZWRfTGlzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JYX1NQSU5MT0NLKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihpZWVlLT5yZW9yZGVyX3NwaW5sb2NrKSwgZmxhZ3MpOwogICAgICAgICAgICAgICAgIH0KLQotLy8jZW5kaWYKIAl9CiAJZWxzZQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmMKaW5kZXggYmE4ZTEyYy4uN2M0ZmQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmMKQEAgLTkzLDcgKzkzLDcgQEAKIDB4OTAwLDB4MDAwMDAwMDAsCiAweDkwNCwweDAwMDAwMDIzLAogMHg5MDgsMHgwMDAwMDAwMCwKLTB4OTBjLDB4MDMzMjEzMzMsCisweDkwYywweDAxMTIxMzEzLAogMHhhMDAsMHgwMGQwNDdjOCwKIDB4YTA0LDB4ODBmZjAwMDgsCiAweGEwOCwweDhjY2Q4MzAwLApAQCAtMTM1LDcgKzEzNSw3IEBACiAweGM2OCwweDY5NTQzNDIwLAogMHhjNmMsMHg0MzNjMDA5NCwKIDB4YzcwLDB4MmM3ZjAwMGQsCi0weGM3NCwweDAxODYxNTViLAorMHhjNzQsMHgwMTg2MTc1YiwKIDB4Yzc4LDB4MDAwMDAwMWYsCiAweGM3YywweDAwYjkxNjEyLAogMHhjODAsMHg0MDAwMDEwMCwKQEAgLTI1NiwxMyArMjU2LDM0IEBACiB9OwogCiB1MzIgUnRsODE5MlNVUEhZX1JFR19BcnJheV9QR1tQSFlfUkVHX0FycmF5X1BHTGVuZ3RoXSA9IHsKLTB4ZTAwLDB4ZmZmZmZmZmYsMHgwNjA5MDkwOSwKLTB4ZTA0LDB4ZmZmZmZmZmYsMHgwMDAzMDQwNiwKKzB4ZTAwLDB4ZmZmZmZmZmYsMHgwNDA2MDYwNiwKKzB4ZTA0LDB4ZmZmZmZmZmYsMHgwMDAyMDIwNCwKIDB4ZTA4LDB4MDAwMGZmMDAsMHgwMDAwMDAwMCwKLTB4ZTEwLDB4ZmZmZmZmZmYsMHgwYTBjMGQwZSwKLTB4ZTE0LDB4ZmZmZmZmZmYsMHgwNDA3MDgwOSwKLTB4ZTE4LDB4ZmZmZmZmZmYsMHgwYTBjMGQwZSwKLTB4ZTFjLDB4ZmZmZmZmZmYsMHgwNDA3MDgwOSwKKzB4ZTEwLDB4ZmZmZmZmZmYsMHgwNDA4MDgwYSwKKzB4ZTE0LDB4ZmZmZmZmZmYsMHgwMDAyMDIwNCwKKzB4ZTE4LDB4ZmZmZmZmZmYsMHgwNDA4MDgwYSwKKzB4ZTFjLDB4ZmZmZmZmZmYsMHgwMDAyMDIwNCwKKzB4ZTAwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA4LDB4MDAwMGZmMDAsMHgwMDAwMDAwMCwKKzB4ZTEwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE4LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTFjLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTAwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA4LDB4MDAwMGZmMDAsMHgwMDAwMDAwMCwKKzB4ZTEwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE4LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTFjLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTAwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTA4LDB4MDAwMGZmMDAsMHgwMDAwMDAwMCwKKzB4ZTEwLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE0LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTE4LDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKKzB4ZTFjLDB4ZmZmZmZmZmYsMHgwMDAwMDAwMCwKIH07CiAKIHUzMiBSdGw4MTkyU1VSYWRpb0FfMVRfQXJyYXlbUmFkaW9BXzFUX0FycmF5TGVuZ3RoXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmgKaW5kZXggMzZlODRhZi4uNjlhNjZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmgKQEAgLTEsMyArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19JTkNfSEFMODE5MlNVX0ZXX0lNR19ICiAjZGVmaW5lIF9fSU5DX0hBTDgxOTJTVV9GV19JTUdfSAogCkBAIC0xOSw3ICszNyw3IEBACiBleHRlcm4gdTMyIFJ0bDgxOTJTVVBIWV9DaGFuZ2VUb18xVDJSQXJyYXlbUEhZX0NoYW5nZVRvXzFUMlJBcnJheUxlbmd0aF07CiAjZGVmaW5lIFBIWV9DaGFuZ2VUb18yVDJSQXJyYXlMZW5ndGggNDUKIGV4dGVybiB1MzIgUnRsODE5MlNVUEhZX0NoYW5nZVRvXzJUMlJBcnJheVtQSFlfQ2hhbmdlVG9fMlQyUkFycmF5TGVuZ3RoXTsKLSNkZWZpbmUgUEhZX1JFR19BcnJheV9QR0xlbmd0aCAyMQorI2RlZmluZSBQSFlfUkVHX0FycmF5X1BHTGVuZ3RoIDg0CiBleHRlcm4gdTMyIFJ0bDgxOTJTVVBIWV9SRUdfQXJyYXlfUEdbUEhZX1JFR19BcnJheV9QR0xlbmd0aF07CiAjZGVmaW5lIFJhZGlvQV8xVF9BcnJheUxlbmd0aCAyMDIKIGV4dGVybiB1MzIgUnRsODE5MlNVUmFkaW9BXzFUX0FycmF5W1JhZGlvQV8xVF9BcnJheUxlbmd0aF07CkBAIC0zOCw1ICs1Niw1IEBACiAjZGVmaW5lIEFHQ1RBQl9BcnJheUxlbmd0aCAzMjAKIGV4dGVybiB1MzIgUnRsODE5MlNVQUdDVEFCX0FycmF5W0FHQ1RBQl9BcnJheUxlbmd0aF07CiAKLSNlbmRpZiAvL19fSU5DX0hBTDgxOTJTVV9GV19JTUdfSAorI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9sZWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9sZWQuYwppbmRleCA2MDlkYmE2Li41ZDk2YjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX2xlZC5jCkBAIC0xMDg3LDIyICsxMDg3LDEzIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgCSpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlzY2hlZHVsZV93b3JrKCYocHJpdi0+QmxpbmtXb3JrSXRlbSkpOwotI2VuZGlmCiB9CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApCiB2b2lkIEJsaW5rV29ya0l0ZW1DYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTkyX3ByaXYsIEJsaW5rV29ya0l0ZW0pOwotI2Vsc2UKLXZvaWQgQmxpbmtXb3JrSXRlbUNhbGxiYWNrKHZvaWQgKiBDb250ZXh0KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilDb250ZXh0OwotCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSNlbmRpZgogCiAJUExFRF84MTl4VXNiCSBwTGVkID0gcHJpdi0+cExlZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfRWZ1c2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmMKaW5kZXggZjBjZTY1Ni4uYmJlZmQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfRWZ1c2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19FZnVzZS5jCkBAIC0xLDI3ICsxLDI2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiAgICAgKGMpIENvcHlyaWdodCAgMjAwOCwgUmVhbFRFSyBUZWNobm9sb2dpZXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQmFzZWQgb24gdGhlIHI4MTgwIGRyaXZlciwgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBNb2R1bGU6CUVmdXNlLmMJKCBTb3VyY2UgQyBGaWxlKQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KICAqCi0gKiBOb3RlOgkJQ29weSBmcm9tIFdNQUMgZm9yIHRoZSBmaXJzdCB2ZXJzaW9uISEhIQorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKICAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogRnVuY3Rpb246Ci0gKgotICogRXhwb3J0OgotICoKLSAqIEFiYnJldjoKLSAqCi0gKiBIaXN0b3J5OgotICogRGF0YQkJCVdobwkJUmVtYXJrCi0gKgotICogMDkvMjMvMjAwOAlNSEMJCVBvcnRpbmcgRWZ1c2UgUi9XIEFQSSBmcm9tIFdNQUMuCi0gKiAxMS8xMC8yMDA4CU1IQwkJMS4gUG9ydGluZyBmcm9tIDg3MTIgRUZVU0UuCi0gKgkJCQkJCTIuIEFkZCBkZXNjcmlwdGlvbiBhbmQgcmVvcmdhbml6ZSBjb2RlIGFyY2guCi0gKiAxMS8xNi8yMDA4IAlNSEMJCTEuIFJlb3JnYW5pemUgY29kZSBhcmNoaXRlY3R1cmUuCi0gKgkJCQkJCTIuIFJlbmFtZSBmb3Igc29tZSBBUEkgYW5kIGNoYW5nZSBleHRlcm4gb3Igc3RhdGljIHR5cGUuCi0gKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAicjgxOTJVLmgiCiAjaW5jbHVkZSAicjgxOTJTX2h3LmgiCkBAIC0zMCwyMCArMjksMTQgQEAKICNpbmNsdWRlICJyODE5MlNfRWZ1c2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAotLy90eXBlZGVmICBpbnQJSU5UMzI7Ci0vLwotLy8gSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBhbHdheXMgc3VwcG9ydCBFRlVTRSEhCi0vLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgTG9jYWwgQ29uc3RhbnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSAJX1BPV0VST05fREVMQVlfCiAjZGVmaW5lIAlfUFJFX0VYRUNVVEVfUkVBRF9DTURfCiAKICNkZWZpbmUJCUVGVVNFX1JFUEVBVF9USFJFU0hPTERfCQkzCiAjZGVmaW5lCQlFRlVTRV9FUlJPRV9IQU5ETEUJCTEKIAotCi0vLyBGcm9tIDg3MTIhISEhIQogdHlwZWRlZiBzdHJ1Y3QgX0VGVVNFX01BUF9BewogCXU4IG9mZnNldDsJCS8vMH4xNQogCXU4IHdvcmRfc3RhcnQ7CS8vMH4zCkBAIC05MSwxNCArODQsMTEgQEAKIAl1OAkJdHhfcG93ZXJfZ1sxNF07CiB9OwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBMb2NhbCBDb25zdGFudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgZ2xvYmFsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogY29uc3QgdTggTUFYX1BHUEtUX1NJWkUgPSA5OyAvL2hlYWRlcisgMiogNCB3b3JkcyAoQllURVMpCiBjb25zdCB1OCBQR1BLVF9EQVRBX1NJWkUgPSA4OyAvL0JZVEVTIHNpemVvZih1OCkqOAogY29uc3QgdTMyIEVGVVNFX01BWF9TSVpFID0gNTEyOwogCitjb25zdCB1OCBFRlVTRV9PT0JfUFJPVEVDVF9CWVRFUyA9IDE0OwogCiBjb25zdCBFRlVTRV9NQVAgUlRMODcxMl9TRElPX0VGVVNFX1RBQkxFW109ewogCQkJCS8vb2Zmc2V0CXdvcmRfcwlieXRlX3N0YXJ0CWJ5dGVfY250cwpAQCAtMTE3LDE1ICsxMDcsNiBAQAogLypUeFB3SW5kZXggKi8JezExCQksMAkJLDAJCQksMjgJfSAgLy8gNTh+NzNoICAzLi4uNAogfTsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgZ2xvYmFsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGxvY2FsIHZhcmlhYmxlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgbG9jYWwgdmFyaWFibGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgZnVuY3Rpb24gcHJvdG90eXBlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLy8KIC8vIEZyb20gV01BQyBFZnVzZSBvbmUgYnl0ZSBSL1cKIC8vCkBAIC0xNzYsNyArMTU3LDcgQEAKIC8vCiBzdGF0aWMJdTgKIGVmdXNlX1BnUGFja2V0UmVhZCgJc3RydWN0IG5ldF9kZXZpY2UqIGRldix1OAlvZmZzZXQsdTggKmRhdGEpOwotc3RhdGljCXU4CitzdGF0aWMJdTMyCiBlZnVzZV9QZ1BhY2tldFdyaXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTggb2Zmc2V0LHU4IHdvcmRfZW4sdTgJKmRhdGEpOwogc3RhdGljCXZvaWQKIGVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZCgJdTggd29yZF9lbix1OCAqc291cmRhdGEsdTggKnRhcmdldGRhdGEpOwpAQCAtMTk0LDcgKzE3NSw2IEBACiAjaWZkZWYgVE9fRE9fTElTVAogc3RhdGljIHZvaWQgZWZ1c2VfcmVnX2N0cmwoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggYlBvd2VyT24pOwogI2VuZGlmCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIGZ1bmN0aW9uIHByb3RvdHlwZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCiAKQEAgLTI0Miw4ICsyMjIsNyBAQAogCS8vU2V0IEUtZnVzZSBwcm9ncmFtIHRpbWUgJiByZWFkIHRpbWUgOiAweDMwWzMwOjI0XT0xMTEwMDEwYgogCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ1RSTCszLCAweDcyKTsKIAotfQkvKiBFRlVTRV9Jbml0aWFsaXplICovCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CUVGVVNFX1JlYWQxQnl0ZQpAQCAtMzAyLDcgKzI4MSw3IEBACiAJZWxzZQogCQlyZXR1cm4gMHhGRjsKIAotfQkvKiBFRlVTRV9SZWFkMUJ5dGUgKi8KK30KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjQsMTMgKzMwMywxMCBAQAogZXh0ZXJuCXZvaWQKIEVGVVNFX1dyaXRlMUJ5dGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTE2IEFkZHJlc3MsdTggVmFsdWUpCiB7Ci0JLy91OAlkYXRhOwogCXU4CUJ5dGV0ZW1wID0gezB4MDB9OwogCXU4CXRlbXAgPSB7MHgwMH07CiAJdTMyCWs9MDsKIAotCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwgIkFkZHI9JXggRGF0YSA9JXhcbiIsIEFkZHJlc3MsIFZhbHVlKTsKLQogCWlmKCBBZGRyZXNzIDwgRUZVU0VfTUFDX0xFTikJLy9FLWZ1c2UgNTEyQnl0ZQogCXsKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMLCBWYWx1ZSk7CkBAIC0zNDksNyArMzI1LDYgQEAKIAkJdGVtcCA9IEJ5dGV0ZW1wIHwgMHg4MDsKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMKzMsIHRlbXApOwogCi0JCS8vV2FpdCBXcml0ZS1yZWFkeSAoMHgzMFszMV09MCkKIAkJQnl0ZXRlbXAgPSByZWFkX25pY19ieXRlKGRldiwgRUZVU0VfQ1RSTCszKTsKIAkJd2hpbGUoQnl0ZXRlbXAgJiAweDgwKQogCQl7CkBAIC0zNjMsOCArMzM4LDcgQEAKIAkJfQogCX0KIAotfQkvKiBFRlVTRV9Xcml0ZTFCeXRlICovCi0KK30KIAogI2lmZGVmIEVGVVNFX0ZPUl85MlNVCiAvLwpAQCAtMzgwLDEyICszNTQsMTAgQEAKIC8vCiB2b2lkIGRvXzkzYzQ2KHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsICB1OCBhZGRvcnZhbHVlKQogewotICAgIAkvL3U4ICBjbGVhclsxXSA9IHsweDB9OyAgICAgIC8vIGNzPTAgLCBzaz0wICwgZGk9MCAsIGRvPTAKIAl1OCAgY3NbMV0gPSB7MHg4OH07ICAgICAgICAvLyBjcz0xICwgc2s9MCAsIGRpPTAgLCBkbz0wCiAJdTggIGNzc2tbMV0gPSB7MHg4Y307ICAgICAgLy8gY3M9MSAsIHNrPTEgLCBkaT0wICwgZG89MAogCXU4ICBjc2RpWzFdID0gezB4OGF9OyAgICAgIC8vIGNzPTEgLCBzaz0wICwgZGk9MSAsIGRvPTAKICAgICAJdTggIGNzc2tkaVsxXSA9IHsweDhlfTsgICAgLy8gY3M9MSAsIHNrPTEgLCBkaT0xICwgZG89MAotCS8vdTggIGRpWzFdID0gezB4ODJ9OyAgICAgICAgLy8gY3M9MCAsIHNrPTAgLCBkaT0xICwgZG89MAogICAgIAl1OCAgY291bnQ7CiAKICAgICAJZm9yKGNvdW50PTAgOyBjb3VudDw4IDsgY291bnQrKykKQEAgLTQyNCw3ICszOTYsNiBAQAogCXU4ICAJY3Nza1sxXSA9IHsweDhjfTsgICAgICAvLyBjcz0xICwgc2s9MSAsIGRpPTAgLCBkbz0wCiAJdTggIAljc2RpWzFdID0gezB4OGF9OyAgICAgIC8vIGNzPTEgLCBzaz0wICwgZGk9MSAsIGRvPTAKICAgIAl1OCAgCWNzc2tkaVsxXSA9IHsweDhlfTsgICAgLy8gY3M9MSAsIHNrPTEgLCBkaT0xICwgZG89MAotCS8vdTggIAlkaVsxXSA9IHsweDgyfTsgICAgICAgIC8vIGNzPTAgLCBzaz0wICwgZGk9MSAsIGRvPTAKIAl1OCAgCUVlcHJvbVNFTFsxXT17MHgwMH07CiAJdTggIAlhZGRyZXNzOwogCkBAIC00MzQsNyArNDA1LDYgQEAKIAogCWFkZHJlc3MgPSAodTgpUmVnOwogCi0JLy8gU3VnZ2VzdGVkIGJ5IFNEMSBBbGV4LCAyMDA4LjEwLjIwLiBSZXZpc2VkIGJ5IFJvZ2VyLgogCSpFZXByb21TRUw9IHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpOwogCiAJaWYoKCpFZXByb21TRUwgJiAweDEwKSA9PSAweDEwKSAvLyBzZWxlY3QgOTNjNDYKQEAgLTQ4NiwxMyArNDU2LDEwIEBACiB2b2lkCiBSZWFkRUZ1c2VCeXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTE2IF9vZmZzZXQsIHU4ICpwYnVmKQogewotCi0JLy91MTYgCWluZGV4az0wOwogCXUzMiAgdmFsdWUzMjsKIAl1OCAJcmVhZGJ5dGU7CiAJdTE2IAlyZXRyeTsKIAotCiAJLy9Xcml0ZSBBZGRyZXNzCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DVFJMKzEsIChfb2Zmc2V0ICYgMHhmZikpOwogCXJlYWRieXRlID0gcmVhZF9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwrMik7CkBAIC01MDUsNyArNDcyLDYgQEAKIAkvL0NoZWNrIGJpdCAzMiByZWFkLXJlYWR5CiAJcmV0cnkgPSAwOwogCXZhbHVlMzIgPSByZWFkX25pY19kd29yZChkZXYsIEVGVVNFX0NUUkwpOwotCS8vd2hpbGUoISgoKHZhbHVlMzIgPj4gMjQpICYgMHhmZikgJiAweDgwKSAgJiYgKHJldHJ5PDEwKSkKIAl3aGlsZSghKCgodmFsdWUzMiA+PiAyNCkgJiAweGZmKSAmIDB4ODApICAmJiAocmV0cnk8MTAwMDApKQogCXsKIAkJdmFsdWUzMiA9IHJlYWRfbmljX2R3b3JkKGRldiwgRUZVU0VfQ1RSTCk7CkBAIC01MzIsNzggKzQ5OCwxNDUgQEAKIFJlYWRFRnVzZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MTYJIF9vZmZzZXQsIHUxNiBfc2l6ZV9ieXRlLCB1OCAqcGJ1ZikKIHsKIAotCXU4ICAJZWZ1c2VUYmxbMTI4XTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdTggIAllZnVzZVRibFtFRlVTRV9NQVBfTEVOXTsKIAl1OCAgCXJ0ZW1wOFsxXTsKIAl1MTYgCWVGdXNlX0FkZHIgPSAwOwogCXU4ICAJb2Zmc2V0LCB3cmVuOwogCXUxNiAgCWksIGo7Ci0JdTE2IAllRnVzZVdvcmRbMTZdWzRdOy8vID0gezB4RkZ9Oy8vRklYTFpNCisJdTE2IAllRnVzZVdvcmRbRUZVU0VfTUFYX1NFQ1RJT05dW0VGVVNFX01BWF9XT1JEX1VOSVRdOworCXUxNgllZnVzZV91dGlsaXplZCA9IDA7CisJdTE2CWVmdXNlX3VzYWdlID0gMDsKIAotCWZvcihpPTA7IGk8MTY7IGkrKykKLQkJZm9yKGo9MDsgajw0OyBqKyspCi0JCQllRnVzZVdvcmRbaV1bal09MHhGRjsKLQotCS8vIERvIE5PVCBleGNlc3MgdG90YWwgc2l6ZSBvZiBFRnVzZSB0YWJsZS4gQWRkZWQgYnkgUm9nZXIsIDIwMDguMTEuMTAuCi0JaWYoKF9vZmZzZXQgKyBfc2l6ZV9ieXRlKT4xMjgpCi0Jey8vIHRvdGFsIEUtRnVzZSB0YWJsZSBpcyAxMjhieXRlcwotCQkvL1JUX1RSQUNFKENPTVBfRUZVU0UsICJSZWFkRUZ1c2UoKTogSW52YWxpZCBvZmZzZXQoJSN4KSB3aXRoIHJlYWQgYnl0ZXMoJSN4KSEhXG4iLF9vZmZzZXQsIF9zaXplX2J5dGUpOworCWlmKChfb2Zmc2V0ICsgX3NpemVfYnl0ZSk+RUZVU0VfTUFQX0xFTikKKwl7CiAJCXByaW50aygiUmVhZEVGdXNlKCk6IEludmFsaWQgb2Zmc2V0IHdpdGggcmVhZCBieXRlcyEhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCS8vIFJlZnJlc2ggZWZ1c2UgaW5pdCBtYXAgYXMgYWxsIG94RkYuCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotCQllZnVzZVRibFtpXSA9IDB4RkY7CisJZm9yKGkgPSAwOyBpIDwgRUZVU0VfTUFYX1NFQ1RJT047IGkrKykKKwkJZm9yKGogPSAwOyBqIDwgRUZVU0VfTUFYX1dPUkRfVU5JVDsgaisrKQorCQkJZUZ1c2VXb3JkW2ldW2pdPTB4RkZGRjsKIAogI2lmIChFRlVTRV9SRUFEX1NXSVRDSCA9PSAxKQogCVJlYWRFRnVzZUJ5dGUoZGV2LCBlRnVzZV9BZGRyLCBydGVtcDgpOwogI2Vsc2UKIAlydGVtcDhbMF0gPSBFRlVTRV9SZWFkMUJ5dGUoZGV2LCBlRnVzZV9BZGRyKTsKICNlbmRpZgotCWlmKCpydGVtcDggIT0gMHhGRikJCWVGdXNlX0FkZHIrKzsKLQl3aGlsZSgoKnJ0ZW1wOCAhPSAweEZGKSAmJiAoZUZ1c2VfQWRkciA8IDUxMikpeworCWlmKCpydGVtcDggIT0gMHhGRil7CisJCWVmdXNlX3V0aWxpemVkKys7CisJCVJUX1RSQUNFKENPTVBfRVBST00sICJBZGRyPSVkXG4iLCBlRnVzZV9BZGRyKTsKKwkJZUZ1c2VfQWRkcisrOworCX0KKworCXdoaWxlKCgqcnRlbXA4ICE9IDB4RkYpICYmIChlRnVzZV9BZGRyIDwgRUZVU0VfUkVBTF9DT05URU5UX0xFTikpCisJewogCQlvZmZzZXQgPSAoKCpydGVtcDggPj4gNCkgJiAweDBmKTsKLQkJaWYob2Zmc2V0IDw9IDB4MEYpeworCQlpZihvZmZzZXQgPCBFRlVTRV9NQVhfU0VDVElPTikKKwkJewogCQkJd3JlbiA9ICgqcnRlbXA4ICYgMHgwZik7Ci0JCQlmb3IoaT0wOyBpPDQ7IGkrKyl7Ci0JCQkJaWYoISh3cmVuICYgMHgwMSkpeworCQkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIk9mZnNldC0lZCBXb3JkZW49JXhcbiIsIG9mZnNldCwgd3Jlbik7CisKKwkJCWZvcihpID0gMDsgaSA8IEVGVVNFX01BWF9XT1JEX1VOSVQ7IGkrKykKKwkJCXsKKwkJCQlpZighKHdyZW4gJiAweDAxKSkKKwkJCQl7CisJCQkJCVJUX1RSQUNFKENPTVBfRVBST00sICJBZGRyPSVkXG4iLCBlRnVzZV9BZGRyKTsKICNpZiAoRUZVU0VfUkVBRF9TV0lUQ0ggPT0gMSkKIAkJCQkJUmVhZEVGdXNlQnl0ZShkZXYsIGVGdXNlX0FkZHIsIHJ0ZW1wOCk7CWVGdXNlX0FkZHIrKzsKICNlbHNlCiAJCQkJCXJ0ZW1wOFswXSA9IEVGVVNFX1JlYWQxQnl0ZShkZXYsIGVGdXNlX0FkZHIpOwllRnVzZV9BZGRyKys7CiAjZW5kaWYKKwkJCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKIAkJCQkJZUZ1c2VXb3JkW29mZnNldF1baV0gPSAoKnJ0ZW1wOCAmIDB4ZmYpOwotCQkJCQlpZihlRnVzZV9BZGRyID49IDUxMikgYnJlYWs7CisJCQkJCWlmKGVGdXNlX0FkZHIgPj0gRUZVU0VfUkVBTF9DT05URU5UX0xFTikKKwkJCQkJCWJyZWFrOworCisJCQkJCVJUX1RSQUNFKENPTVBfRVBST00sICJBZGRyPSVkXG4iLCBlRnVzZV9BZGRyKTsKICNpZiAoRUZVU0VfUkVBRF9TV0lUQ0ggPT0gMSkKIAkJCQkJUmVhZEVGdXNlQnl0ZShkZXYsIGVGdXNlX0FkZHIsIHJ0ZW1wOCk7CWVGdXNlX0FkZHIrKzsKICNlbHNlCiAJCQkJCXJ0ZW1wOFswXSA9IEVGVVNFX1JlYWQxQnl0ZShkZXYsIGVGdXNlX0FkZHIpOwllRnVzZV9BZGRyKys7CiAjZW5kaWYKKwkJCQkJZWZ1c2VfdXRpbGl6ZWQrKzsKIAkJCQkJZUZ1c2VXb3JkW29mZnNldF1baV0gfD0gKCgodTE2KSpydGVtcDggPDwgOCkgJiAweGZmMDApOwotCQkJCQlpZihlRnVzZV9BZGRyID49IDUxMikgYnJlYWs7CisJCQkJCWlmKGVGdXNlX0FkZHIgPj0gRUZVU0VfUkVBTF9DT05URU5UX0xFTikKKwkJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQl3cmVuID4+PSAxOwogCQkJfQogCQl9CisKKwkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIkFkZHI9JWRcbiIsIGVGdXNlX0FkZHIpOwogI2lmIChFRlVTRV9SRUFEX1NXSVRDSCA9PSAxKQogCQlSZWFkRUZ1c2VCeXRlKGRldiwgZUZ1c2VfQWRkciwgcnRlbXA4KTsKICNlbHNlCiAJCXJ0ZW1wOFswXSA9IEVGVVNFX1JlYWQxQnl0ZShkZXYsIGVGdXNlX0FkZHIpOwllRnVzZV9BZGRyKys7CiAjZW5kaWYKLQkJaWYoKnJ0ZW1wOCAhPSAweEZGICYmIChlRnVzZV9BZGRyIDwgNTEyKSkJZUZ1c2VfQWRkcisrOworCQlpZigqcnRlbXA4ICE9IDB4RkYgJiYgKGVGdXNlX0FkZHIgPCA1MTIpKQorCQl7CisJCQllZnVzZV91dGlsaXplZCsrOworCQkJZUZ1c2VfQWRkcisrOworCQl9CiAJfQogCi0JZm9yKGk9MDsgaTwxNjsgaSsrKXsKLQkJZm9yKGo9MDsgajw0OyBqKyspeworCWZvcihpPTA7IGk8RUZVU0VfTUFYX1NFQ1RJT047IGkrKykKKwl7CisJCWZvcihqPTA7IGo8RUZVU0VfTUFYX1dPUkRfVU5JVDsgaisrKQorCQl7CiAJCQllZnVzZVRibFsoaSo4KSsoaioyKV09KGVGdXNlV29yZFtpXVtqXSAmIDB4ZmYpOwogCQkJZWZ1c2VUYmxbKGkqOCkrKChqKjIpKzEpXT0oKGVGdXNlV29yZFtpXVtqXSA+PiA4KSAmIDB4ZmYpOwogCQl9CiAJfQogCWZvcihpPTA7IGk8X3NpemVfYnl0ZTsgaSsrKQogCQlwYnVmW2ldID0gZWZ1c2VUYmxbX29mZnNldCtpXTsKLX0KLSNlbmRpZgkvLyAjaWYgKEVGVVNFX0ZPUl85MlNVID09IDEpCiAKKwllZnVzZV91c2FnZSA9ICh1OCkoKGVmdXNlX3V0aWxpemVkKjEwMCkvRUZVU0VfUkVBTF9DT05URU5UX0xFTik7CisJcHJpdi0+RWZ1c2VVc2VkQnl0ZXMgPSBlZnVzZV91dGlsaXplZDsKKwlwcml2LT5FZnVzZVVzZWRQZXJjZW50YWdlID0gKHU4KWVmdXNlX3VzYWdlOworfQorI2VuZGlmCisKK2V4dGVybglib29sCitFRlVTRV9TaGFkb3dVcGRhdGVDaGsoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdTgJU2VjdGlvbklkeCwgaSwgQmFzZTsKKwl1MTYJV29yZHNOZWVkID0gMCwgSGRyTnVtID0gMCwgVG90YWxCeXRlcyA9IDAsIEVmdXNlVXNlZCA9IDA7CisJYm9vbAliV29yZENoYW5nZWQsIGJSZXN1bHQgPSB0cnVlOworCisJZm9yIChTZWN0aW9uSWR4ID0gMDsgU2VjdGlvbklkeCA8IDE2OyBTZWN0aW9uSWR4KyspCisJeworCQlCYXNlID0gU2VjdGlvbklkeCAqIDg7CisJCWJXb3JkQ2hhbmdlZCA9IGZhbHNlOworCisJCWZvciAoaSA9IDA7IGkgPCA4OyBpPWkrMikKKwkJeworCQkJaWYoKHByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtCYXNlK2ldICE9CisJCQkJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bQmFzZStpXSkgfHwKKwkJCQkocHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdW0Jhc2UraSsxXSAhPQorCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW0Jhc2UraSsxXSkpCisJCQl7CisJCQkJV29yZHNOZWVkKys7CisJCQkJYldvcmRDaGFuZ2VkID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCWlmKCBiV29yZENoYW5nZWQ9PXRydWUgKQorCQkJSGRyTnVtKys7CisJfQorCisJVG90YWxCeXRlcyA9IEhkck51bSArIFdvcmRzTmVlZCoyOworCUVmdXNlVXNlZCA9IHByaXYtPkVmdXNlVXNlZEJ5dGVzOworCisJaWYoIChUb3RhbEJ5dGVzICsgRWZ1c2VVc2VkKSA+PSAoRUZVU0VfTUFYX1NJWkUtRUZVU0VfT09CX1BST1RFQ1RfQllURVMpKQorCQliUmVzdWx0ID0gdHJ1ZTsKKworCVJUX1RSQUNFKENPTVBfRVBST00sICJFRlVTRV9TaGFkb3dVcGRhdGVDaGsoKTogVG90YWxCeXRlcygleCksIEhkck51bSgleCksIFdvcmRzTmVlZCgleCksIEVmdXNlVXNlZCglZClcbiIsCisJCVRvdGFsQnl0ZXMsIEhkck51bSwgV29yZHNOZWVkLCBFZnVzZVVzZWQpOworCisJcmV0dXJuIGJSZXN1bHQ7Cit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOglFRlVTRV9TaGFkb3dSZWFkCkBAIC02MjQsOCArNjU3LDYgQEAKIGV4dGVybiB2b2lkCiBFRlVTRV9TaGFkb3dSZWFkKAlzdHJ1Y3QgbmV0X2RldmljZSoJZGV2LAl1OCBUeXBlLCB1MTYgT2Zmc2V0LCB1MzIgKlZhbHVlKQogewotCS8vSEFMX0RBVEFfVFlQRQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocEFkYXB0ZXIpOwotCiAJaWYgKFR5cGUgPT0gMSkKIAkJZWZ1c2VfU2hhZG93UmVhZDFCeXRlKGRldiwgT2Zmc2V0LCAodTggKilWYWx1ZSk7CiAJZWxzZSBpZiAoVHlwZSA9PSAyKQpAQCAtNjMzLDggKzY2NCw3IEBACiAJZWxzZSBpZiAoVHlwZSA9PSA0KQogCQllZnVzZV9TaGFkb3dSZWFkNEJ5dGUoZGV2LCBPZmZzZXQsICh1MzIgKilWYWx1ZSk7CiAKLX0JLy8gRUZVU0VfU2hhZG93UmVhZAotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOglFRlVTRV9TaGFkb3dXcml0ZQpAQCAtNjU1LDggKzY4NSw2IEBACiBleHRlcm4Jdm9pZAogRUZVU0VfU2hhZG93V3JpdGUoCXN0cnVjdCBuZXRfZGV2aWNlKglkZXYsCXU4IFR5cGUsIHUxNiBPZmZzZXQsdTMyCVZhbHVlKQogewotCS8vSEFMX0RBVEFfVFlQRQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEocEFkYXB0ZXIpOwotCiAJaWYgKE9mZnNldCA+PSAweDE4ICYmIE9mZnNldCA8PSAweDFGKQogCQlyZXR1cm47CiAKQEAgLTY2Nyw4ICs2OTUsNyBAQAogCWVsc2UgaWYgKFR5cGUgPT0gNCkKIAkJZWZ1c2VfU2hhZG93V3JpdGU0Qnl0ZShkZXYsIE9mZnNldCwgKHUzMilWYWx1ZSk7CiAKLX0JLy8gRUZVU0VfU2hhZG93V3JpdGUKLQorfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJRUZVU0VfU2hhZG93VXBkYXRlCkBAIC02ODYsMTUgKzcxMywyNSBAQAogICogMTEvMTIvMjAwOCAJTUhDCQlDcmVhdGUgVmVyc2lvbiAwLgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWV4dGVybgl2b2lkCitleHRlcm4gYm9vbAogRUZVU0VfU2hhZG93VXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCiB7Ci0JLy9IQUxfREFUQV9UWVBFCSpwSGFsRGF0YSA9IEdFVF9IQUxfREFUQShwQWRhcHRlcik7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXUxNgkJCWksIG9mZnNldCwgYmFzZSA9IDA7CiAJdTgJCQl3b3JkX2VuID0gMHgwRjsKLQlib29sIGZpcnN0X3BnID0gZmFsc2U7Ci0JLy8gRm9yIEVmdXNlIHdyaXRlIGFjdGlvbiwgd2UgbXVzdCBlbmFibGUgTERPMi41ViBhbmQgNDBNSFogY2xrLgorCWJvb2wJCQlmaXJzdF9wZyA9IGZhbHNlOworCisJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIi0tLT5FRlVTRV9TaGFkb3dVcGRhdGUoKVxuIik7CisKKwlpZighRUZVU0VfU2hhZG93VXBkYXRlQ2hrKGRldikpCisJeworCQllZnVzZV9SZWFkQWxsTWFwKGRldiwgJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSk7CisJCW1lbWNweSgodm9pZCAqKSZwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkJCSh2b2lkICopJnByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVswXSwgSFdTRVRfTUFYX1NJWkVfOTJTKTsKKworCQlSVF9UUkFDRShDT01QX0VQUk9NLCAiPC0tLUVGVVNFX1NoYWRvd1VwZGF0ZSgpOiBFZnVzZSBvdXQgb2YgY2FwYWNpdHkhIVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAJZWZ1c2VfUG93ZXJTd2l0Y2goZGV2LCBUUlVFKTsKIAogCS8vCkBAIC03MTIsMTYgKzc0OSwxMiBAQAogCQkvLwogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQl7Ci0JCQlpZiAob2Zmc2V0ID09IDAgJiYgcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UraV0gPT0gMHhGRikKLQkJCXsKLQkJCQlmaXJzdF9wZyA9IFRSVUU7Ci0JCQl9Ci0KLQkJCS8vIDIwMDgvMTIvMTEgTUggSFcgYXV0b2xvYWQgZmFpbCB3b3JrYXJvdW5kIGZvciBBL0JDVVQuCi0KIAkJCWlmIChmaXJzdF9wZyA9PSBUUlVFKQogCQkJewogCQkJCXdvcmRfZW4gJj0gfigxPDwoaS8yKSk7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwiU2VjdGlvbigleCkgQWRkclsleF0gJXggdXBkYXRlIHRvICV4LCBXb3JkX0VuPSUwMnhcbiIsCisJCQkJb2Zmc2V0LCBiYXNlK2ksIHByaXYtPkVmdXNlTWFwW0VGVVNFX0lOSVRfTUFQXVtiYXNlK2ldLAorCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2UraV0sd29yZF9lbik7CiAJCQkJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UraV0gPQogCQkJCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2UraV07CiAJCQl9ZWxzZQpAQCAtNzMwLDggKzc2Myw5IEBACiAJCQkJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZStpXSkKIAkJCXsKIAkJCQl3b3JkX2VuICY9IH4oRUZVU0VfQklUKGkvMikpOwotCQkJCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwgICJPZmZzZXQ9JWQgQWRkciV4ICV4ID09PiAleCBXb3JkX0VuPSUwMnhcbiIsCi0JCQkJLy9vZmZzZXQsIGJhc2UraSwgcHJpdi0+RWZ1c2VNYXBbMF1bYmFzZStpXSwgcHJpdi0+RWZ1c2VNYXBbMV1bYmFzZStpXSx3b3JkX2VuKTsKKwkJCQlSVF9UUkFDRShDT01QX0VQUk9NLCAiU2VjdGlvbigleCkgQWRkclsleF0gJXggdXBkYXRlIHRvICV4LCBXb3JkX0VuPSUwMnhcbiIsCisJCQkJb2Zmc2V0LCBiYXNlK2ksIHByaXYtPkVmdXNlTWFwWzBdW2Jhc2UraV0sCisJCQkJcHJpdi0+RWZ1c2VNYXBbMV1bYmFzZStpXSx3b3JkX2VuKTsKIAogCQkJCS8vIFVwZGF0ZSBpbml0IHRhYmxlISEhCiAJCQkJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdW2Jhc2UraV0gPQpAQCAtNzQ3LDI1ICs3ODEsMjcgQEAKIAkJewogCQkJdTgJdG1wZGF0YVs4XTsKIAotCQkJLy9GSVhMWk0KLQkJCW1lbWNweSh0bXBkYXRhLCAmKHByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW2Jhc2VdKSwgOCk7Ci0JCQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJVLUVGVVNFXG4iKSwgdG1wZGF0YSwgOCk7Ci0JCQllZnVzZV9QZ1BhY2tldFdyaXRlKGRldiwodTgpb2Zmc2V0LHdvcmRfZW4sdG1wZGF0YSk7CisJCQltZW1jcHkoKHZvaWQgKil0bXBkYXRhLCAodm9pZCAqKSYocHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bYmFzZV0pLCA4KTsKKwkJCVJUX1RSQUNFKENPTVBfSU5JVCwgIlUtRUZVU0VcbiIpOworCisJCQlpZighZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYsKHU4KW9mZnNldCx3b3JkX2VuLHRtcGRhdGEpKQorCQkJeworCQkJCVJUX1RSQUNFKENPTVBfRVBST00sIkVGVVNFX1NoYWRvd1VwZGF0ZSgpOiBQRyBzZWN0aW9uKCV4KSBmYWlsISFcbiIsIG9mZnNldCk7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCX0KLQkvLyAyMDA4LzEyLzAxIE1IIEZvciBFZnVzZSBIVyBsb2FkIGJ1ZyB3b3JrYXJvdW5mIG1ldGhvZCEhISEKLQkvLyBXZSB3aWxsIGZvcmNlIHdyaXRlIDB4MTBFQyBpbnRvIGFkZHJlc3MgMTAmMTEgYWZ0ZXIgYWxsIEVmdXNlIGNvbnRlbnQuCi0JLy8KLQotCiAJLy8gRm9yIHdhcm0gcmVib290LCB3ZSBtdXN0IHJlc3VtZSBFZnVzZSBjbG9jayB0byA1MDBLLgorCiAJZWZ1c2VfUG93ZXJTd2l0Y2goZGV2LCBGQUxTRSk7Ci0JLy8gMjAwOC8xMi8wMSBNSCBXZSB1cGRhdGUgc2hhZG93IGNvbnRlbnQgYWdhaW4hISEhCi0JRUZVU0VfU2hhZG93TWFwVXBkYXRlKGRldik7CiAKLX0JLy8gRUZVU0VfU2hhZG93VXBkYXRlCisJZWZ1c2VfUmVhZEFsbE1hcChkZXYsICZwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bMF0pOworCW1lbWNweSgodm9pZCAqKSZwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkJKHZvaWQgKikmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCBIV1NFVF9NQVhfU0laRV85MlMpOwogCisJcmV0dXJuIHRydWU7Cit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOglFRlVTRV9TaGFkb3dNYXBVcGRhdGUKQEAgLTc5MiwxMiArODI4LDEwIEBACiAJfWVsc2V7CiAJCWVmdXNlX1JlYWRBbGxNYXAoZGV2LCAmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdKTsKIAl9Ci0JLy9QbGF0Zm9ybU1vdmVNZW1vcnkoJnByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdWzBdLAotCQkvLyZwcml2LT5FZnVzZU1hcFtFRlVTRV9JTklUX01BUF1bMF0sIEhXU0VUX01BWF9TSVpFXzkyUyk7Ly9GSVhMWk0KLQltZW1jcHkoJnByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdWzBdLAotCQkmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCBIV1NFVF9NQVhfU0laRV85MlMpOworCW1lbWNweSgodm9pZCAqKSZwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVswXSwKKwkJKHZvaWQgKikmcHJpdi0+RWZ1c2VNYXBbRUZVU0VfSU5JVF9NQVBdWzBdLCBIV1NFVF9NQVhfU0laRV85MlMpOwogCi19CS8vIEVGVVNFX1NoYWRvd01hcFVwZGF0ZQorfQogCiBleHRlcm4Jdm9pZAogRUZVU0VfRm9yY2VXcml0ZVZlbmRvcklkKCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQpAQCAtODEwLDcgKzg0NCw3IEBACiAKIAllZnVzZV9Qb3dlclN3aXRjaChkZXYsIEZBTFNFKTsKIAotfQkvLyBFRlVTRV9Gb3JjZVdyaXRlVmVuZG9ySWQKK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1NoYWRvd1JlYWQxQnl0ZQpAQCAtODM3LDcgKzg3MSw3IEBACiAKIAkqVmFsdWUgPSBwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXRdOwogCi19CS8vIEVGVVNFX1NoYWRvd1JlYWQxQnl0ZQorfQogCiAvLy0tLS0tLS0tLS0tLS0tLVJlYWQgVHdvIEJ5dGVzCiBzdGF0aWMJdm9pZApAQCAtODQ4LDcgKzg4Miw3IEBACiAJKlZhbHVlID0gcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0XTsKIAkqVmFsdWUgfD0gcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0KzFdPDw4OwogCi19CS8vIEVGVVNFX1NoYWRvd1JlYWQyQnl0ZQorfQogCiAvLy0tLS0tLS0tLS0tLS0tLVJlYWQgRm91ciBCeXRlcwogc3RhdGljCXZvaWQKQEAgLTg2MSw3ICs4OTUsNyBAQAogCSpWYWx1ZSB8PSBwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXQrMl08PDE2OwogCSpWYWx1ZSB8PSBwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXQrM108PDI0OwogCi19CS8vIGVmdXNlX1NoYWRvd1JlYWQ0Qnl0ZQorfQogCiAKIApAQCAtODkwLDcgKzkyNCw3IEBACiAKIAlwcml2LT5FZnVzZU1hcFtFRlVTRV9NT0RJRllfTUFQXVtPZmZzZXRdID0gVmFsdWU7CiAKLX0JLy8gZWZ1c2VfU2hhZG93V3JpdGUxQnl0ZQorfQogCiAvLy0tLS0tLS0tLS0tLS0tLVdyaXRlIFR3byBCeXRlcwogc3RhdGljCXZvaWQKQEAgLTkwMSw3ICs5MzUsNyBAQAogCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldF0gPSBWYWx1ZSYweDAwRkY7CiAJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0KzFdID0gVmFsdWU+Pjg7CiAKLX0JLy8gZWZ1c2VfU2hhZG93V3JpdGUxQnl0ZQorfQogCiAvLy0tLS0tLS0tLS0tLS0tLVdyaXRlIEZvdXIgQnl0ZXMKIHN0YXRpYwl2b2lkCkBAIC05MTQsMTAgKzk0OCw4IEBACiAJcHJpdi0+RWZ1c2VNYXBbRUZVU0VfTU9ESUZZX01BUF1bT2Zmc2V0KzJdID0gKHU4KSgoVmFsdWU+PjE2KSYweDAwRkYpOwogCXByaXYtPkVmdXNlTWFwW0VGVVNFX01PRElGWV9NQVBdW09mZnNldCszXSA9ICh1OCkoKFZhbHVlPj4yNCkmMHhGRik7CiAKLX0JLy8gZWZ1c2VfU2hhZG93V3JpdGUxQnl0ZQorfQogCi0KLS8qICAxMS8xNi8yMDA4IE1IIFJlYWQgb25lIGJ5dGUgZnJvbSByZWFsIEVmdXNlLiAqLwogc3RhdGljCXU4CiBlZnVzZV9PbmVCeXRlUmVhZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MTYgYWRkcix1OCAqZGF0YSkKIHsKQEAgLTk0Nyw3ICs5NzksNyBAQAogCQliUmVzdWx0ID0gRkFMU0U7CiAJfQogCXJldHVybiBiUmVzdWx0OwotfQkvLyBlZnVzZV9PbmVCeXRlUmVhZAorfQogCiAvKiAgMTEvMTYvMjAwOCBNSCBXcml0ZSBvbmUgYnl0ZSB0byByZWFsZCBFZnVzZS4gKi8KIHN0YXRpYwl1OApAQCAtOTU2LDEwICs5ODgsNiBAQAogCXU4IHRtcGlkeCA9IDA7CiAJdTggYlJlc3VsdDsKIAotCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwgIkFkZHIgPSAleCBEYXRhPSV4XG4iLCBhZGRyLCBkYXRhKTsKLQotCS8vcmV0dXJuCTA7Ci0KIAkvLyAtLS0tLS0tLS0tLS0tLS0tLWUtZnVzZSByZWcgY3RybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkvL2FkZHJlc3MKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwrMSwgKHU4KShhZGRyJjB4ZmYpKTsKQEAgLTk4Myw4ICsxMDExLDcgQEAKIAl9CiAKIAlyZXR1cm4gYlJlc3VsdDsKLX0JLy8gZWZ1c2VfT25lQnl0ZVdyaXRlCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1JlYWRBbGxNYXAKQEAgLTEwMDUsMTkgKzEwMzIsMTMgQEAKIHN0YXRpYwl2b2lkCiBlZnVzZV9SZWFkQWxsTWFwKHN0cnVjdCBuZXRfZGV2aWNlKglkZXYsIHU4CSpFZnVzZSkKIHsKLQkvL3U4IAlwZ19kYXRhWzhdOwotCS8vdTggCW9mZnNldCA9IDA7Ci0JLy91OCAJdG1waWR4OwotCS8vc3RhdGljCXU4CWluZGV4ID0gMDsKLQogCS8vCiAJLy8gV2UgbXVzdCBlbmFibGUgY2xvY2sgYW5kIExETyAyLjVWIG90aGVyd2lzZSwgcmVhZCBhbGwgbWFwIHdpbGwgYmUgZmFpbCEhISEKIAkvLwogCWVmdXNlX1Bvd2VyU3dpdGNoKGRldiwgVFJVRSk7CiAJUmVhZEVGdXNlKGRldiwgMCwgMTI4LCBFZnVzZSk7CiAJZWZ1c2VfUG93ZXJTd2l0Y2goZGV2LCBGQUxTRSk7Ci19CS8vIGVmdXNlX1JlYWRBbGxNYXAKLQorfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjoJZWZ1c2VfV3JpdGVBbGxNYXAKQEAgLTEwNTcsMTggKzEwNzgsMTEgQEAKIAkJCS8vIDB4MTgtMWYgUmVzZXJ2ZSA+MHg1MCBSZXNlcnZlIGZvciB0eCBwb3dlcgogCQkJaWYgKG9mZnNldCA9PSAzLyogfHwgb2Zmc2V0ID4gOSovKQogCQkJCWNvbnRpbnVlOy8vd29yZF9lbiA9IDB4MEY7Ci0JCQkvL2Vsc2UgaWYgKG9mZnNldCA9PSA5KQkvLyAweDRjLTRmIFJlc2VydmUKLQkJCQkvL3dvcmRfZW4gPSAweDBDOwogCQkJZWxzZQogCQkJCXdvcmRfZW4gPSAweDAwOwogCQl9Ci0JCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwgKCJBZGRyPSVkIHNpemU9JWQgV29yZF9Fbj0lMDJ4XG4iLCBvZmZzZXQsIGVlcHJvbV9zaXplLCB3b3JkX2VuKSk7CiAKLQkJLy9tZW1jcHkodG1wZGF0YSxlZXByb20rKG9mZnNldCpQR1BLVF9EQVRBX1NJWkUpLDgpOwogCQltZW1jcHkodG1wZGF0YSwgKGVlcHJvbSsob2Zmc2V0KlBHUEtUX0RBVEFfU0laRSkpLCA4KTsKLQotCQkvL1JUX1BSSU5UX0RBVEEoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJFRlVTRVx0IiksIHRtcGRhdGEsIDgpOwotCiAJCWVmdXNlX1BnUGFja2V0V3JpdGUoZGV2LG9mZnNldCx3b3JkX2VuLHRtcGRhdGEpOwogCiAKQEAgLTEwNzcsNyArMTA5MSw3IEBACiAJLy8gRm9yIHdhcm0gcmVib290LCB3ZSBtdXN0IHJlc3VtZSBFZnVzZSBjbG9jayB0byA1MDBLLgogCWVmdXNlX1Bvd2VyU3dpdGNoKGRldiwgRkFMU0UpOwogCi19CS8vIGVmdXNlX1dyaXRlQWxsTWFwCit9CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTExNCwxNSArMTEyOCw5IEBACiAJaWYoZGF0YT09TlVMTCkJcmV0dXJuIEZBTFNFOwogCWlmKG9mZnNldD4xNSkJCXJldHVybiBGQUxTRTsKIAotCS8vRklYTFpNCi0JLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKWRhdGEsIHNpemVvZih1OCkqUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKLQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpdG1wZGF0YSwgc2l6ZW9mKHU4KSpQR1BLVF9EQVRBX1NJWkUsIDB4ZmYpOwogCW1lbXNldChkYXRhLCAweGZmLCBzaXplb2YodTgpKlBHUEtUX0RBVEFfU0laRSk7CiAJbWVtc2V0KHRtcGRhdGEsIDB4ZmYsIHNpemVvZih1OCkqUEdQS1RfREFUQV9TSVpFKTsKIAotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJlZnVzZV9QZ1BhY2tldFJlYWQtMVxuIiksIGRhdGEsIDgpOwotCi0JLy9lZnVzZV9yZWdfY3RybChwQWRhcHRlcixUUlVFKTsvL3Bvd2VyIG9uCiAJd2hpbGUoYkNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciAgPCBFRlVTRV9NQVhfU0laRSkgKQogCXsKIAkJLy8tLS0tLS0tICBIZWFkZXIgUmVhZCAtLS0tLS0tLS0tLS0tCkBAIC0xMTY5LDkgKzExNzcsNiBAQAogCQl9CiAKIAl9Ci0JLy9lZnVzZV9yZWdfY3RybChwQWRhcHRlcixGQUxTRSk7Ly9wb3dlciBvZmYKLQotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJlZnVzZV9QZ1BhY2tldFJlYWQtMlxuIiksIGRhdGEsIDgpOwogCiAJaWYoCShkYXRhWzBdPT0weGZmKSAmJihkYXRhWzFdPT0weGZmKSAmJiAoZGF0YVsyXT09MHhmZikgICYmIChkYXRhWzNdPT0weGZmKSAmJgogCQkoZGF0YVs0XT09MHhmZikgJiYoZGF0YVs1XT09MHhmZikgJiYgKGRhdGFbNl09PTB4ZmYpICAmJiAoZGF0YVs3XT09MHhmZikpCkBAIC0xMTc5LDggKzExODQsNyBAQAogCWVsc2UKIAkJcmV0dXJuIFRSVUU7CiAKLX0JLy8gZWZ1c2VfUGdQYWNrZXRSZWFkCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1BnUGFja2V0V3JpdGUKQEAgLTEyMDAsNyArMTIwNCw3IEBACiAgKiAxMS8xNi8yMDA4IAlNSEMJCVJlb3JnYW5pemUgY29kZSBBcmNoIGFuZCBhc3NpZ24gYXMgbG9jYWwgQVBJLgogICoKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB1OCBlZnVzZV9QZ1BhY2tldFdyaXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IG9mZnNldCwgdTggd29yZF9lbix1OCAqZGF0YSkKK3N0YXRpYyB1MzIgZWZ1c2VfUGdQYWNrZXRXcml0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBvZmZzZXQsIHU4IHdvcmRfZW4sdTggKmRhdGEpCiB7CiAJdTggV3JpdGVTdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIApAQCAtMTIxMCwxMiArMTIxNCw5IEBACiAKIAl1OCBwZ19oZWFkZXIgPSAwOwogCi0JLy91MTYgdG1wX2FkZHI9MDsKIAl1OCB0bXBfd29yZF9jbnRzPTAsdGFyZ2V0X3dvcmRfY250cz0wOwogCXU4IHRtcF9oZWFkZXIsbWF0Y2hfd29yZF9lbix0bXBfd29yZF9lbjsKIAotCS8vdTgJZWZ1c2VfY2xrX29yaSxlZnVzZV9jbGtfbmV3OwotCiAJUEdQS1RfU1RSVUNUIHRhcmdldF9wa3Q7CiAJUEdQS1RfU1RSVUNUIHRtcF9wa3Q7CiAKQEAgLTEyNDAsNyArMTI0MSw2IEBACiAJZWZ1c2VfV29yZEVuYWJsZURhdGFSZWFkKHdvcmRfZW4sZGF0YSx0YXJnZXRfcGt0LmRhdGEpOwogCXRhcmdldF93b3JkX2NudHMgPSBlZnVzZV9DYWxjdWxhdGVXb3JkQ250cyh0YXJnZXRfcGt0LndvcmRfZW4pOwogCi0JLy9lZnVzZV9yZWdfY3RybChwQWRhcHRlcixUUlVFKTsvL3Bvd2VyIG9uCiAJcHJpbnRrKCJFRlVTRSBQb3dlciBPTlxuIik7CiAKIAl3aGlsZSggYkNvbnRpbnVhbCAmJiAoZWZ1c2VfYWRkciAgPCBFRlVTRV9NQVhfU0laRSkgKQpAQCAtMTMxMiwxNCArMTMxMiwxMiBAQAogCQkJCQkJCWJhZHdvcmRlbiA9IGVmdXNlX1dvcmRFbmFibGVEYXRhV3JpdGUoZGV2LGVmdXNlX2FkZHIrMSwgdG1wX3BrdC53b3JkX2VuICx0YXJnZXRfcGt0LmRhdGEpOwogCiAJCQkJCQkJLy8qKioqKioqKioqKiogIHNvLTItMi1BLTEgKioqKioqKioqKioqKioqKioqKgotCQkJCQkJCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCQkJCQkJCWlmKDB4MEYgIT0gKGJhZHdvcmRlbiYweDBGKSkKIAkJCQkJCQl7CiAJCQkJCQkJCXU4IHJlb3JnX29mZnNldCA9IG9mZnNldDsKIAkJCQkJCQkJdTggcmVvcmdfd29yZGVuPWJhZHdvcmRlbjsKIAkJCQkJCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYscmVvcmdfb2Zmc2V0LHJlb3JnX3dvcmRlbixvcmlnaW5hbGRhdGEpOwogCQkJCQkJCX0KLQkJCQkJCQkvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogCQkJCQkJCXRtcF93b3JkX2VuID0gMHgwRjsKIAkJCQkJCQlpZiggICh0YXJnZXRfcGt0LndvcmRfZW4mQklUMCleKG1hdGNoX3dvcmRfZW4mQklUMCkgICkKQEAgLTEzNDIsMTMgKzEzNDAsMTMgQEAKIAkJCQkJCQkvLyoqKioqKioqKioqKiAgc28tMi0yLUEtMiAqKioqKioqKioqKioqKioqKioqCiAJCQkJCQkJaWYoKHRtcF93b3JkX2VuJjB4MEYpIT0weDBGKXsKIAkJCQkJCQkJLy9yZW9yZ2FuaXplIG90aGVyIHBnIHBhY2tldAotCQkJCQkJCQkvL2VmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKDIqdG1wX3dvcmRfY250cykgKzE7Ly9uZXh0IHBnIHBhY2tldCBhZGRyCi0JCQkJCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9HZXRDdXJyZW50U2l6ZShkZXYpOwotCQkJCQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQotCQkJCQkJCQl0YXJnZXRfcGt0Lm9mZnNldCA9IG9mZnNldDsKKworCQkJCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9HZXRDdXJyZW50U2l6ZShkZXYpOworCisJCQkJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7CiAJCQkJCQkJCXRhcmdldF9wa3Qud29yZF9lbj0gdG1wX3dvcmRfZW47Ci0JCQkJCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JCQkJCQkJfWVsc2V7CisKKwkJCQkJCX1lbHNlewogCQkJCQkJCQliQ29udGludWFsID0gRkFMU0U7CiAJCQkJCQkJfQogCQkJCQkJCSNpZiAoRUZVU0VfRVJST0VfSEFORExFID09IDEpCkBAIC0xMzYzLDEwICsxMzYxLDggQEAKIAkJCQkJCWVsc2V7Ly8qKioqKioqKioqKiogIHNvLTItMi1CICoqKioqKioqKioqKioqKioqKioKIAkJCQkJCQkvL3Jlb3JnYW5pemUgb3RoZXIgcGcgcGFja2V0CiAJCQkJCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAoMip0bXBfd29yZF9jbnRzKSArMTsvL25leHQgcGcgcGFja2V0IGFkZHIKLQkJCQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwogCQkJCQkJCXRhcmdldF9wa3Qud29yZF9lbj0gdGFyZ2V0X3BrdC53b3JkX2VuOwotCQkJCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJCQkJCQkJI2lmIChFRlVTRV9FUlJPRV9IQU5ETEUgPT0gMSkKIAkJCQkJCQlXcml0ZVN0YXRlPVBHX1NUQVRFX0hFQURFUjsKIAkJCQkJCQkjZW5kaWYKQEAgLTE0MDUsMTMgKzE0MDEsMTAgQEAKIAogCQkJCQkvLyoqKioqKioqKioqKiAgczEtMi1BIDpjb3ZlciB0aGUgZXhpc3QgZGF0YSAqKioqKioqKioqKioqKioqKioqCiAJCQkJCW1lbXNldChvcmlnaW5hbGRhdGEsMHhmZixzaXplb2YodTgpKjgpOwotCQkJCQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpb3JpZ2luYWxkYXRhLCBzaXplb2YodTgpKjgsIDB4ZmYpOwogCiAJCQkJCWlmKGVmdXNlX1BnUGFja2V0UmVhZCggZGV2LCB0bXBfcGt0Lm9mZnNldCxvcmlnaW5hbGRhdGEpKQogCQkJCQl7CS8vY2hlY2sgaWYgZGF0YSBleGlzdAotCQkJCQkJLy9lZnVzZV9yZWdfY3RybChwQWRhcHRlcixUUlVFKTsvL3Bvd2VyIG9uCiAJCQkJCQliYWR3b3JkZW4gPSBlZnVzZV9Xb3JkRW5hYmxlRGF0YVdyaXRlKGRldixlZnVzZV9hZGRyKzEsdG1wX3BrdC53b3JkX2VuLG9yaWdpbmFsZGF0YSk7Ci0JCQkJCQkvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAkJCQkJCWlmKDB4MEYgIT0gKGJhZHdvcmRlbiYweDBGKSkKIAkJCQkJCXsKIAkJCQkJCQl1OCByZW9yZ19vZmZzZXQgPSB0bXBfcGt0Lm9mZnNldDsKQEAgLTE0MTksNyArMTQxMiw2IEBACiAJCQkJCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYscmVvcmdfb2Zmc2V0LHJlb3JnX3dvcmRlbixvcmlnaW5hbGRhdGEpOwogCQkJCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9HZXRDdXJyZW50U2l6ZShkZXYpOwogCQkJCQkJfQotCQkJCQkJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAJCQkJCQllbHNlewogCQkJCQkJCWVmdXNlX2FkZHIgPSBlZnVzZV9hZGRyICsgKHRtcF93b3JkX2NudHMqMikgKzE7IC8vTmV4dCBwZ19wYWNrZXQKIAkJCQkJCX0KQEAgLTE0NTksMTEgKzE0NTEsOSBAQAogCQkJey8vcmVvcmdhbml6ZSBvdGhlciBwZyBwYWNrZXQgLy8qKioqKioqKioqKiogIHMxLTEtQiAqKioqKioqKioqKioqKioqKioqCiAJCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAoMip0YXJnZXRfd29yZF9jbnRzKSArMTsvL25leHQgcGcgcGFja2V0IGFkZHIKIAotCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7CiAJCQkJdGFyZ2V0X3BrdC53b3JkX2VuPSBiYWR3b3JkZW47CiAJCQkJdGFyZ2V0X3dvcmRfY250cyA9ICBlZnVzZV9DYWxjdWxhdGVXb3JkQ250cyh0YXJnZXRfcGt0LndvcmRfZW4pOwotCQkJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJCQkJI2lmIChFRlVTRV9FUlJPRV9IQU5ETEUgPT0gMSkKIAkJCQlXcml0ZVN0YXRlPVBHX1NUQVRFX0hFQURFUjsKIAkJCQlyZXBlYXRfdGltZXMrKzsKQEAgLTE0NzcsMTEgKzE0NjcsMTIgQEAKIAkJfQogCX0KIAotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsRkFMU0UpOy8vcG93ZXIgb2ZmCi0KKwlpZihlZnVzZV9hZGRyICA+PSAoRUZVU0VfTUFYX1NJWkUtRUZVU0VfT09CX1BST1RFQ1RfQllURVMpKQorCXsKKwkJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgImVmdXNlX1BnUGFja2V0V3JpdGUoKTogZWZ1c2VfYWRkcigleCkgT3V0IG9mIHNpemUhIVxuIiwgZWZ1c2VfYWRkcik7CisJfQogCXJldHVybiBUUlVFOwotfQkvLyBlZnVzZV9QZ1BhY2tldFdyaXRlCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZApAQCAtMTUwMywxMiArMTQ5NCw2IEBACiBzdGF0aWMJdm9pZAogZWZ1c2VfV29yZEVuYWJsZURhdGFSZWFkKAl1OCB3b3JkX2VuLHU4ICpzb3VyZGF0YSx1OCAqdGFyZ2V0ZGF0YSkKIHsKLQkvL3U4IHRtcGluZGV4ID0gMDsKLQotCS8vRGJnUHJpbnQoImVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZCB3b3JkX2VuID0gJXhcbiIsIHdvcmRfZW4pOwotCi0JLy9SVF9QUklOVF9EQVRBKENPTVBfRUZVU0UsIERCR19MT1VELCAoInNvdXJkYXRhXG4iKSwgc291cmRhdGEsIDgpOwotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJ0YXJnZXRkYXRhXG4iKSwgdGFyZ2V0ZGF0YSwgOCk7CiAKIAlpZiAoISh3b3JkX2VuJkJJVDApKQogCXsKQEAgLTE1MzAsOCArMTUxNSw3IEBACiAJCXRhcmdldGRhdGFbNl0gPSBzb3VyZGF0YVs2XTsvL3NvdXJkYXRhW3RtcGluZGV4KytdOwogCQl0YXJnZXRkYXRhWzddID0gc291cmRhdGFbN107Ly9zb3VyZGF0YVt0bXBpbmRleCsrXTsKIAl9Ci19CS8vIGVmdXNlX1dvcmRFbmFibGVEYXRhUmVhZAotCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9Xb3JkRW5hYmxlRGF0YVdyaXRlCkBAIC0xNTU1LDE1ICsxNTM5LDkgQEAKIAl1MTYgdG1wYWRkciA9IDA7CiAJdTE2IHN0YXJ0X2FkZHIgPSBlZnVzZV9hZGRyOwogCXU4IGJhZHdvcmRlbiA9IDB4MEY7Ci0JLy91OCBOZXh0U3RhdGU7CiAJdTggdG1wZGF0YVs4XTsKIAogCW1lbXNldCh0bXBkYXRhLDB4ZmYsUEdQS1RfREFUQV9TSVpFKTsKLQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpdG1wZGF0YSwgUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKLQotCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwgIndvcmRfZW4gPSAleCBlZnVzZV9hZGRyPSV4XG4iLCB3b3JkX2VuLCBlZnVzZV9hZGRyKTsKLQotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJVLUVGVVNFXG4iKSwgZGF0YSwgOCk7CiAKIAlpZighKHdvcmRfZW4mQklUMCkpCiAJewpAQCAtMTYxNCw4ICsxNTkyLDcgQEAKIAkJfQogCX0KIAlyZXR1cm4gYmFkd29yZGVuOwotfQkvLyBlZnVzZV9Xb3JkRW5hYmxlRGF0YVdyaXRlCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX1Bvd2VyU3dpdGNoCkBAIC0xNjU4LDggKzE2MzUsNyBAQAogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NMSywgMHgwMik7CiAJfQogCi19CS8qIGVmdXNlX1Bvd2VyU3dpdGNoICovCi0KK30KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb246CWVmdXNlX0dldEN1cnJlbnRTaXplCkBAIC0xNjg2LDggKzE2NjIsNiBAQAogCXU4IGhvZmZzZXQ9MCxod29yZGVuPTA7CiAJdTggZWZ1c2VfZGF0YSx3b3JkX2NudHM9MDsKIAotCS8vZWZ1c2VfcmVnX2N0cmwocEFkYXB0ZXIsVFJVRSk7Ly9wb3dlciBvbgotCiAJd2hpbGUgKAliQ29udGludWFsICYmCiAJCQllZnVzZV9PbmVCeXRlUmVhZChkZXYsIGVmdXNlX2FkZHIgLCZlZnVzZV9kYXRhKSAmJgogCQkJKGVmdXNlX2FkZHIgIDwgRUZVU0VfTUFYX1NJWkUpICkKQEAgLTE3MDYsMTIgKzE2ODAsOSBAQAogCQl9CiAJfQogCi0JLy9lZnVzZV9yZWdfY3RybChwQWRhcHRlcixGQUxTRSk7Ly9wb3dlciBvZmYKLQogCXJldHVybiBlZnVzZV9hZGRyOwogCi19CS8vIGVmdXNlX0dldEN1cnJlbnRTaXplfQotCit9CiAKIC8qICAxMS8xNi8yMDA4IE1IIEFkZCBkZXNjcmlwdGlvbi4gR2V0IGN1cnJlbnQgZWZ1c2UgYXJlYSBlbmFibGVkIHdvcmQhIS4gKi8KIHN0YXRpYyB1OApAQCAtMTcyMyw3ICsxNjk0LDcgQEAKIAlpZighKHdvcmRfZW4gJiBCSVQyKSkJd29yZF9jbnRzKys7CiAJaWYoISh3b3JkX2VuICYgQklUMykpCXdvcmRfY250cysrOwogCXJldHVybiB3b3JkX2NudHM7Ci19CS8vIGVmdXNlX0NhbGN1bGF0ZVdvcmRDbnRzCit9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOglFRlVTRV9Qcm9ncmFtTWFwCkBAIC0xNzg2LDEyICsxNzU3LDEwIEBACiAJCQkJewogCQkJCQl1MzIJajsKIAotCQkJCQkvL0dldEhleFZhbHVlRnJvbVN0cmluZyhzekxpbmUsICZ1NGJSZWdWYWx1ZSwgJnU0Yk1vdmUpOwogCQkJCQllZnVzZV9QYXJzaW5nTWFwKHN6TGluZSwgJnU0YlJlZ1ZhbHVlLCAmdTRiTW92ZSk7CiAKIAkJCQkJLy8gR2V0IG5leHQgaGV4IHZhbHVlIGFzIEVFUFJPTSB2YWx1ZS4KIAkJCQkJc3pMaW5lICs9IHU0Yk1vdmU7Ci0JCQkJCS8vV3JpdGVFRXByb20oZGV2LCAodTE2KShpdGhMaW5lKjgraSksICh1MTYpdTRiUmVnVmFsdWUpOwogCQkJCQllZXByb21baW5kZXgrK10gPSAodTgpKHU0YlJlZ1ZhbHVlJjB4ZmYpOwogCQkJCQllZXByb21baW5kZXgrK10gPSAodTgpKCh1NGJSZWdWYWx1ZT4+OCkmMHhmZik7CiAKQEAgLTE4MDgsOSArMTc3Nyw2IEBACiAJCXJldHVybglSVF9TVEFUVVNfRkFJTFVSRTsKIAl9CiAKLQotCS8vUlRfUFJJTlRfREFUQShDT01QX0VGVVNFLCBEQkdfTE9VRCwgKCJFRlVTRSAiKSwgZWVwcm9tLCBIV1NFVF9NQVhfU0laRV85MlMpOwotCiAJLy8gVXNlIG1hcCBmaWxlIHRvIHVwZGF0ZSByZWFsIEVmdXNlIG9yIHNoYWRvdyBtb2RpZnkgdGFibGUuCiAJaWYgKFRhYmxlVHlwZSA9PSAxKQogCXsKQEAgLTE4MjQsNDYgKzE3OTAsMTAgQEAKIAl9CiAKIAlyZXR1cm4JcnRTdGF0dXM7Ci19CS8qIEVGVVNFX1Byb2dyYW1NYXAgKi8KK30KIAogI2VuZGlmCiAKLS8vCi0vLwlEZXNjcmlwdGlvbjoKLS8vCQlSZXR1cm4gVFJVRSBpZiBjaFRtcCBpcyByZXByZXNlbnQgZm9yIGhleCBkaWdpdCBhbmQKLS8vCQlGQUxTRSBvdGhlcndpc2UuCi0vLwotLy8KLWJvb2wgSXNIZXhEaWdpdCgJY2hhciBjaFRtcCkKLXsKLQlpZiggKGNoVG1wID49ICcwJyAmJiBjaFRtcCA8PSAnOScpIHx8Ci0JCShjaFRtcCA+PSAnYScgJiYgY2hUbXAgPD0gJ2YnKSB8fAotCQkoY2hUbXAgPj0gJ0EnICYmIGNoVG1wIDw9ICdGJykgKQotCXsKLQkJcmV0dXJuIFRSVUU7Ci0JfQotCWVsc2UKLQl7Ci0JCXJldHVybiBGQUxTRTsKLQl9Ci19Ci0KLS8vCi0vLwlEZXNjcmlwdGlvbjoKLS8vCQlUcmFuc2xhdGUgYSBjaGFyYWN0ZXIgdG8gaGV4IGRpZ2l0LgotLy8KLXUzMiBNYXBDaGFyVG9IZXhEaWdpdChjaGFyIGNoVG1wKQotewotCWlmKGNoVG1wID49ICcwJyAmJiBjaFRtcCA8PSAnOScpCi0JCXJldHVybiAoY2hUbXAgLSAnMCcpOwotCWVsc2UgaWYoY2hUbXAgPj0gJ2EnICYmIGNoVG1wIDw9ICdmJykKLQkJcmV0dXJuICgxMCArIChjaFRtcCAtICdhJykpOwotCWVsc2UgaWYoY2hUbXAgPj0gJ0EnICYmIGNoVG1wIDw9ICdGJykKLQkJcmV0dXJuICgxMCArIChjaFRtcCAtICdBJykpOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEZ1bmN0aW9uOgllZnVzZV9QYXJzaW5nTWFwCiAgKgpAQCAtMTg4OSw5ICsxODE5LDYgQEAKIAkvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXIuCiAJaWYoc3pTdHIgPT0gTlVMTCB8fCBwdTRiVmFsID09IE5VTEwgfHwgcHU0Yk1vdmUgPT0gTlVMTCkKIAl7Ci0JCS8vUlRfVFJBQ0UoQ09NUF9FRlVTRSwKLQkJLy8iZWVwcm9tX1BhcnNpbmdNYXAoKTogSW52YWxpZCBJTiBhcmdzISBzelN0cjogJXAsIHB1NGJWYWw6ICVwLCBwdTRiTW92ZTogJXBcbiIsCi0JCS8vc3pTdHIsIHB1NGJWYWwsIHB1NGJNb3ZlKTsKIAkJcmV0dXJuIEZBTFNFOwogCX0KIApAQCAtMTkwOSwzNCArMTgzNiwyNiBAQAogCiAJLy8gQ2hlY2sgaWYgc3pTY2FuIGlzIG5vdyBwb2ludGVyIHRvIGEgY2hhcmFjdGVyIGZvciBoZXggZGlnaXQsCiAJLy8gaWYgbm90LCBpdCBtZWFucyB0aGlzIGlzIG5vdCBhIHZhbGlkIGhleCBudW1iZXIuCi0JaWYoIUlzSGV4RGlnaXQoKnN6U2NhbikpCi0JeworCWlmICghaXN4ZGlnaXQoKnN6U2NhbikpCiAJCXJldHVybiBGQUxTRTsKLQl9CiAKIAkvLyBQYXJzZSBlYWNoIGRpZ2l0LgogCWRvCiAJewotCQkoKnB1NGJWYWwpIDw8PSA0OwotCQkqcHU0YlZhbCArPSBNYXBDaGFyVG9IZXhEaWdpdCgqc3pTY2FuKTsKKwkJKnB1NGJWYWwgPSAoKnB1NGJWYWwgPDwgNCkgKyBoZXhfdG9fYmluKCpzelNjYW4pOwogCiAJCXN6U2NhbisrOwogCQkoKnB1NGJNb3ZlKSsrOwotCX0gd2hpbGUoSXNIZXhEaWdpdCgqc3pTY2FuKSk7CisJfSB3aGlsZSAoaXN4ZGlnaXQoKnN6U2NhbikpOwogCiAJcmV0dXJuIFRSVUU7CiAKLX0JLyogZWZ1c2VfUGFyc2luZ01hcCAqLworfQogI2VuZGlmCiAKLS8vCi0vLyBVc2VsZXNzIFNlY3Rpb24gQ29kZSBOb3chISEhISEKLS8vCi0vLyBQb3J0aW5nIGZyb20gODcxMiBTRElPCiBpbnQgZWZ1c2Vfb25lX2J5dGVfcncoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggYlJlYWQsIHUxNiBhZGRyLCB1OCAqZGF0YSkKIHsKIAl1MzIgYlJlc3VsdDsKLQkvL3U4IGVmdXNlX2N0bHJlZyx0bXBpZHggPSAwOwogCXU4IHRtcGlkeCA9IDA7CiAJdTggdG1wdjg9MDsKIApAQCAtMTk2NSw3ICsxODg0LDYgQEAKIAogCX0KIAllbHNlewotCQkvL3JldHVybgkwOwogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwsICpkYXRhKTsvL2RhdGEKIAogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX0NUUkwrMywgMHhGMik7Ly93cml0ZSBjbWQKQEAgLTE5ODcsMjEgKzE5MDUsMTggQEAKIAl9CiAJcmV0dXJuIGJSZXN1bHQ7CiB9Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiB2b2lkIGVmdXNlX2FjY2VzcyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBiUmVhZCx1MTYgc3RhcnRfYWRkciwgdTggY250cywgdTggKmRhdGEpCiB7CiAJdTgJZWZ1c2VfY2xrX29yaSxlZnVzZV9jbGtfbmV3Oy8vLHRtcDg7CiAJdTMyIGkgPSAwOwogCiAJaWYoc3RhcnRfYWRkcj4weDIwMCkgcmV0dXJuOwotCS8vUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21wX2lvY3RsX2NfLF9kcnZfZXJyXywKLQkvLwkoIlxuID09PT4gZWZ1c2VfYWNjZXNzIFtzdGFydF9hZGRyPTB4JXggY250czolZCBkYXRhYXJyYXk6MHglMDh4ICBRdWVyeSBFZnVzZV0uXG4iLHN0YXJ0X2FkZHIsY250cyxkYXRhKSk7CiAJLy8gLS0tLS0tLS0tLS0tLS0tLS1TWVNfRlVOQ19FTiBEaWdpdGFsIENvcmUgVmRkIGVuYWJsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAllZnVzZV9jbGtfb3JpID0gcmVhZF9uaWNfYnl0ZShkZXYsU1lTX0ZVTkNfRU4rMSk7CiAJZWZ1c2VfY2xrX25ldyA9IGVmdXNlX2Nsa19vcml8MHgyMDsKIAogCWlmKGVmdXNlX2Nsa19uZXchPSBlZnVzZV9jbGtfb3JpKXsKLQkJLy9SVF9UUkFDRShfbW9kdWxlX3J0bDg3MXhfbXBfaW9jdGxfY18sX2Rydl9lcnJfLCgiPT09PXdyaXRlIDB4MTAyNTAwMDM9PT09PVxuIikpOwogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFNZU19GVU5DX0VOKzEsIGVmdXNlX2Nsa19uZXcpOwogCX0KICNpZmRlZiBfUE9XRVJPTl9ERUxBWV8KQEAgLTIwMjEsOSArMTkzNiw4IEBACiAJLy8tLS0tLS0tLS0tLS0tLS0tLWUtZnVzZSBvbmUgYnl0ZSByZWFkIC8gd3JpdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJZm9yKGk9MDtpPGNudHM7aSsrKXsKIAkJZWZ1c2Vfb25lX2J5dGVfcncoZGV2LGJSZWFkLCBzdGFydF9hZGRyK2kgLCBkYXRhK2kpOwotCQkvLy8vUlRfVFJBQ0UoX21vZHVsZV9ydGw4NzF4X21wX2lvY3RsX2NfLF9kcnZfZXJyXywoIj09PmVmdXNlX2FjY2VzcyBhZGRyOjB4JTAyeCB2YWx1ZToweCUwMnhcbiIsZGF0YStpLCooZGF0YStpKSkpOworCiAJfQotCS8vIC0tLS0tLS0tLS0tLS0tLS0tZS1mdXNlIHB3ciAmIGNsayByZWcgY3RybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVGVVNFX1RFU1QrMywgcmVhZF9uaWNfYnl0ZShkZXYsIEVGVVNFX1RFU1QrMykmMHg3Zik7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFRlVTRV9DTEtfQ1RSTCwgcmVhZF9uaWNfYnl0ZShkZXYsIEVGVVNFX0NMS19DVFJMKSYweGZkKTsKIApAQCAtMjAzMSw4ICsxOTQ1LDYgQEAKIAlpZihlZnVzZV9jbGtfbmV3ICE9IGVmdXNlX2Nsa19vcmkpCXdyaXRlX25pY19ieXRlKGRldiwgMHgxMDI1MDAwMywgZWZ1c2VfY2xrX29yaSk7CiAKIH0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWZkZWYgVE9fRE9fTElTVAogc3RhdGljCXZvaWQgZWZ1c2VfcmVnX2N0cmwoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggYlBvd2VyT24pCkBAIC0yMDYwLDE1ICsxOTcyLDEyIEBACiAJCXdyaXRlX25pY19ieXRlKGRldiwgRUZVU0VfQ0xLX0NUUkwsIHJlYWRfbmljX2J5dGUoZGV2LCBFRlVTRV9DTEtfQ1RSTCkmMHhmZCk7CiAJCS8vIC0tLS0tLS0tLS0tLS0tLS0tU1lTX0ZVTkNfRU4gRGlnaXRhbCBDb3JlIFZkZCBkaXNhYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JCS8vd3JpdGVfbmljX2J5dGUocEFkYXB0ZXIsIFNZU19GVU5DX0VOKzEsICByZWFkX25pY19ieXRlKHBBZGFwdGVyLFNZU19GVU5DX0VOKzEpJjB4REYpOwogCX0KIAogCiB9CiAjZW5kaWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB2b2lkIGVmdXNlX3JlYWRfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHU4IGVmdXNlX3JlYWRfaXRlbSx1OCAqZGF0YSx1MzIgZGF0YV9zaXplKQogewogCXU4IG9mZnNldCwgd29yZF9zdGFydCxieXRlX3N0YXJ0LGJ5dGVfY250czsKQEAgLTIwNzksMTAgKzE5ODgsOCBAQAogCiAJdTggdG1waWR4OwogCXU4IHBnX2RhdGFbOF07Ci0JLy91OAl0ZW1wX3ZhbHVlWzhdID0gezB4ZmZ9OwogCiAJaWYoZWZ1c2VfcmVhZF9pdGVtPiAgKHNpemVvZihSVEw4NzEyX1NESU9fRUZVU0VfVEFCTEUpL3NpemVvZihFRlVTRV9NQVApKSl7Ci0JCS8vZXJyb3IgbXNnCiAJCXJldHVybiA7CiAJfQogCkBAIC0yMDkyLDQ4ICsxOTk5LDM5IEBACiAJYnl0ZV9jbnRzICAgCT0gUlRMODcxMl9TRElPX0VGVVNFX1RBQkxFW2VmdXNlX3JlYWRfaXRlbV0uYnl0ZV9jbnRzOwogCiAJaWYoZGF0YV9zaXplIT1ieXRlX2NudHMpewotCQkvL2Vycm9yIG1zZwogCQlyZXR1cm47CiAJfQogCiAJcGdfcGt0X2NudHMgPSAoYnl0ZV9jbnRzIC9QR1BLVF9EQVRBX1NJWkUpICsxOwogCiAJaWYocGdfcGt0X2NudHMgPiAxKXsKLQkJLy90bXBkYXRhID0gX21hbGxvYyhwZ19wa3RfY250cypQR1BLVF9EQVRBX1NJWkUpOwogCQl0bXBkYXRhID0gZWZ1c2VkYXRhOwogCiAJCWlmKHRtcGRhdGEhPU5VTEwpCiAJCXsKIAkJCW1lbXNldCh0bXBkYXRhLDB4ZmYscGdfcGt0X2NudHMqUEdQS1RfREFUQV9TSVpFKTsKLQkJCS8vUGxhdGZvcm1GaWxsTWVtb3J5KChQVk9JRClwZ19kYXRhLCBwZ19wa3RfY250cypQR1BLVF9EQVRBX1NJWkUsIDB4ZmYpOwogCiAJCQlmb3IodG1waWR4PTA7dG1waWR4PHBnX3BrdF9jbnRzO3RtcGlkeCsrKQogCQkJewogCQkJCW1lbXNldChwZ19kYXRhLDB4ZmYsUEdQS1RfREFUQV9TSVpFKTsKLQkJCQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpcGdfZGF0YSwgUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKIAkJCQlpZihUUlVFPT0gZWZ1c2VfUGdQYWNrZXRSZWFkKGRldixvZmZzZXQrdG1waWR4LHBnX2RhdGEpKQogCQkJCXsKIAkJCQkJbWVtY3B5KHRtcGRhdGErKFBHUEtUX0RBVEFfU0laRSp0bXBpZHgpLHBnX2RhdGEsUEdQS1RfREFUQV9TSVpFKTsKLQkJCQkJLy9QbGF0Zm9ybU1vdmVNZW1vcnkoKFBWT0lEKSh0bXBkYXRhKyhQR1BLVF9EQVRBX1NJWkUqdG1waWR4KSksIChQVk9JRClwZ19kYXRhLCBQR1BLVF9EQVRBX1NJWkUpOwogCQkJCX0KIAkJCX0KIAkJCW1lbWNweShkYXRhLCh0bXBkYXRhKyAoMip3b3JkX3N0YXJ0KStieXRlX3N0YXJ0ICksZGF0YV9zaXplKTsKLQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRClkYXRhLCAoUFZPSUQpKHRtcGRhdGErICgyKndvcmRfc3RhcnQpK2J5dGVfc3RhcnQgKSwgZGF0YV9zaXplKTsKLQkJCS8vX21mcmVlKHRtcGRhdGEsIHBnX3BrdF9jbnRzKlBHUEtUX0RBVEFfU0laRSk7CiAJCX0KIAl9CiAJZWxzZQogCXsKIAkJbWVtc2V0KHBnX2RhdGEsMHhmZixQR1BLVF9EQVRBX1NJWkUpOwotCQkvL1BsYXRmb3JtRmlsbE1lbW9yeSgoUFZPSUQpcGdfZGF0YSwgUEdQS1RfREFUQV9TSVpFLCAweGZmKTsKIAkJaWYoVFJVRT09ZWZ1c2VfUGdQYWNrZXRSZWFkKGRldixvZmZzZXQscGdfZGF0YSkpewogCQkJbWVtY3B5KGRhdGEscGdfZGF0YSsgKDIqd29yZF9zdGFydCkrYnl0ZV9zdGFydCAsZGF0YV9zaXplKTsKLQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRClkYXRhLCAoUFZPSUQpKHBnX2RhdGErICgyKndvcmRfc3RhcnQpK2J5dGVfc3RhcnQpLCBkYXRhX3NpemUpOwogCQl9CiAJfQogCiB9Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAvL3BlciBpbnRlcmZhY2UgZG9lc24ndCBhbGlrZQogdm9pZCBlZnVzZV93cml0ZV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTggZWZ1c2Vfd3JpdGVfaXRlbSx1OCAqZGF0YSx1MzIgZGF0YV9zaXplLHUzMiBiV29yZFVuaXQpCiB7CkBAIC0yMTQ1LDcgKzIwNDMsNiBAQAogCXU4IHBnX2RhdGFbOF0sdG1wYnl0ZXM9MDsKIAogCWlmKGVmdXNlX3dyaXRlX2l0ZW0+ICAoc2l6ZW9mKFJUTDg3MTJfU0RJT19FRlVTRV9UQUJMRSkvc2l6ZW9mKEVGVVNFX01BUCkpKXsKLQkJLy9lcnJvciBtc2cKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTIxNTUsNyArMjA1Miw2IEBACiAJYnl0ZV9jbnRzICAgCT0gUlRMODcxMl9TRElPX0VGVVNFX1RBQkxFW2VmdXNlX3dyaXRlX2l0ZW1dLmJ5dGVfY250czsKIAogCWlmKGRhdGFfc2l6ZSA+ICBieXRlX2NudHMpewotCQkvL2Vycm9yIG1zZwogCQlyZXR1cm47CiAJfQogCXBnX3BrdF9jbnRzID0gKGJ5dGVfY250cyAvUEdQS1RfREFUQV9TSVpFKSArMTsKQEAgLTIxNjgsMTMgKzIwNjQsMTEgQEAKIAogCQlpZigoZWZ1c2Vfd3JpdGVfaXRlbT09RUZVU0VfRjBDSVMpfHwoZWZ1c2Vfd3JpdGVfaXRlbT09RUZVU0VfRjFDSVMpKXsKIAkJCW1lbXNldChwZ19kYXRhLDB4ZmYsUEdQS1RfREFUQV9TSVpFKTsKLQkJCS8vUGxhdGZvcm1GaWxsTWVtb3J5KChQVk9JRClwZ19kYXRhLCBQR1BLVF9EQVRBX1NJWkUsIDB4ZmYpOwogCQkJZWZ1c2VfUGdQYWNrZXRSZWFkKGRldixvZmZzZXQscGdfZGF0YSk7CiAKIAkJCWlmKGVmdXNlX3dyaXRlX2l0ZW09PUVGVVNFX0YwQ0lTKXsKIAkJCQl3b3JkX2VuID0gMHgwNzsKIAkJCQltZW1jcHkocGdfZGF0YSt3b3JkX3N0YXJ0KjIrYnl0ZV9zdGFydCxkYXRhLHNpemVvZih1OCkqMik7Ci0JCQkJLy9QbGF0Zm9ybU1vdmVNZW1vcnkoKFBWT0lEKShwZ19kYXRhK3dvcmRfc3RhcnQqMitieXRlX3N0YXJ0KSwgKFBWT0lEKWRhdGEsIHNpemVvZih1OCkqMik7CiAJCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYsb2Zmc2V0LHdvcmRfZW4scGdfZGF0YSsod29yZF9zdGFydCoyKSk7CiAKIAkJCQl3b3JkX2VuID0gMHgwMDsKQEAgLTIxODMsNyArMjA3Nyw2IEBACiAJCQkJd29yZF9lbiA9IDB4MDA7CiAJCQkJZWZ1c2VfUGdQYWNrZXRSZWFkKGRldixvZmZzZXQrMixwZ19kYXRhKTsKIAkJCQltZW1jcHkocGdfZGF0YSxkYXRhKzIrOCxzaXplb2YodTgpKjcpOwotCQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRCkocGdfZGF0YSksIChQVk9JRCkoZGF0YSsyKzgpLCBzaXplb2YodTgpKjcpOwogCiAJCQkJZWZ1c2VfUGdQYWNrZXRXcml0ZShkZXYsKG9mZnNldCsyKSx3b3JkX2VuLHBnX2RhdGEpOwogCQkJfQpAQCAtMjIwMiw3ICsyMDk1LDYgQEAKIAkJfQogCQllbHNlewogCQkJbWVtc2V0KHBnX2RhdGEsMHhmZixQR1BLVF9EQVRBX1NJWkUpOwotCQkJLy9QbGF0Zm9ybUZpbGxNZW1vcnkoKFBWT0lEKXBnX2RhdGEsIFBHUEtUX0RBVEFfU0laRSwgMHhmZik7CiAJCQlpZigoZWZ1c2Vfd3JpdGVfaXRlbT09RUZVU0VfU0RJT19TRVRUSU5HKXx8KGVmdXNlX3dyaXRlX2l0ZW09PUVGVVNFX0NDQ1IpKXsKIAkJCQl3b3JkX2VuID0gMHgwZSA7CiAJCQkJdG1wYnl0ZXMgPSAyOwpAQCAtMjIyMSwxMiArMjExMywxMCBAQAogCQkJfQogCQkJaWYoYldvcmRVbml0PT1UUlVFKXsKIAkJCQltZW1jcHkocGdfZGF0YSt3b3JkX3N0YXJ0KjIgLGRhdGEsc2l6ZW9mKHU4KSp0bXBieXRlcyk7Ci0JCQkJLy9QbGF0Zm9ybU1vdmVNZW1vcnkoKFBWT0lEKShwZ19kYXRhK3dvcmRfc3RhcnQqMiksIChQVk9JRCkoZGF0YSksIHNpemVvZih1OCkqdG1wYnl0ZXMpOwogCQkJfQogCQkJZWxzZXsKIAkJCQllZnVzZV9QZ1BhY2tldFJlYWQoZGV2LG9mZnNldCxwZ19kYXRhKTsKIAkJCQltZW1jcHkocGdfZGF0YSsoMip3b3JkX3N0YXJ0KStieXRlX3N0YXJ0LGRhdGEsc2l6ZW9mKHU4KSpieXRlX2NudHMpOwotCQkJCS8vUGxhdGZvcm1Nb3ZlTWVtb3J5KChQVk9JRCkocGdfZGF0YSsoMip3b3JkX3N0YXJ0KStieXRlX3N0YXJ0KSwgKFBWT0lEKShkYXRhKSwgc2l6ZW9mKHU4KSpieXRlX2NudHMpOwogCQkJfQogCiAJCQllZnVzZV9QZ1BhY2tldFdyaXRlKGRldixvZmZzZXQsd29yZF9lbixwZ19kYXRhKyh3b3JkX3N0YXJ0KjIpKTsKQEAgLTIyMzQsNyArMjEyNCw2IEBACiAJCX0KIAogCX0KLQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCWVsc2UgaWYocGdfcGt0X2NudHM+MSl7Ly9zaXR1YXRpb24gQgogCQlpZih3b3JkX3N0YXJ0PT0wKXsKIAkJCXdvcmRfZW4gPSAweDAwOwpAQCAtMjI1NSw3ICsyMTQ0LDYgQEAKIAogCQl9CiAJfQotCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJZWxzZXsvL3NpdHVhdGlvbiBDCiAJCXdvcmRfZW4gPSAweDBmOwogCQlmb3IodG1waWR4PSAwOyB0bXBpZHg8d29yZF9jbnRzIDsgdG1waWR4KyspCkBAIC0yMjY3LDcgKzIxNTUsNiBAQAogCX0KIAogfQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBlZnVzZXRfdGVzdF9mdW5jX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKQEAgLTIyODgsNyArMjE3NSw2IEBACiAJbWVtc2V0KHR4cG93ZXJ0YWJsZSwwLHNpemVvZih1OCkqMjgpOwogCWVmdXNlX3JlYWRfZGF0YShkZXYsRUZVU0VfVFhQV19UQUIsdHhwb3dlcnRhYmxlLHNpemVvZih0eHBvd2VydGFibGUpKTsKIH0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgZWZ1c2V0X3Rlc3RfZnVuY193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewpAQCAtMjMxMSwxOSArMjE5NywzIEBACiAJZWZ1c2Vfd3JpdGVfZGF0YShkZXYsRUZVU0VfU0RJT19TRVRUSU5HLHRtcGRhdGEsc2l6ZW9mKHRtcGRhdGEpLGJXb3JkVW5pdCk7CiAKIH0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotCi0KLQotCi0KLQotCi0KLS8qIEVuZCBvZiBFZnVzZS5jICovCi0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19FZnVzZS5oCmluZGV4IDFlNTAxNTMuLmM0OGExMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX0VmdXNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfRWZ1c2UuaApAQCAtMSwzOSArMSwzOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogICAgIChjKSBDb3B5cmlnaHQgIDIwMDgsIFJlYWxURUsgVGVjaG5vbG9naWVzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIEJhc2VkIG9uIHRoZSByODE4MCBkcml2ZXIsIHdoaWNoIGlzOgorICogQ29weXJpZ2h0IDIwMDQtMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+LCBldCBhbC4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogTW9kdWxlOglFZnVzZS5oCSggSGVhZGVyIEZpbGUpCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgogICoKLSAqIE5vdGU6CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQogICoKLSAqIEZ1bmN0aW9uOgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIEV4cG9ydDoKLSAqCi0gKiBBYmJyZXY6Ci0gKgotICogSGlzdG9yeToKLSAqIERhdGEJCQlXaG8JCVJlbWFyawotICoKLSAqIDA5LzIzLzIwMDgJTUhDCQlQb3J0aW5nIEVmdXNlIFIvVyBBUEkgZnJvbSBXTUFDLgotICogMTEvMTAvMjAwOAlNSEMJCVBvcnRpbmcgRWZ1c2UuaCBmcm9tIDg3MTIgU0RJTy4KLSAqCQkJCQkJMS4gV2UgbXVzZSByZWRlZmluZSB0aGUgaGVhZGVyIGZpbGUgdG8gZml0IG91ciBjb2RpbmcKLSAqCQkJCQkJICAgc3R5bGUuCi0gKgkJCQkJCTIuIFRIZSBBUEkgd2UgZXhwb3J0IHRvIG90aGVyIG1vZHVsZSwgd2UgbXVzdCByZWRlZmluZQotICoJCQkJCQkgICBmb3IgODE5MlMgc2VyaWVzLgotICoKLSAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlsZSBoYXMgYmVlbiBpbmNsdWRlZCBhbHJlYWR5LiAgKi8KIAogI2lmbmRlZiBfX0lOQ19FRlVTRV9ICiAjZGVmaW5lIF9fSU5DX0VGVVNFX0gKIAotLy8gUm9nZXIgcG9ydGluZyBmb3IgODE5MlNVCiAjZGVmaW5lCQlFRlVTRV9GT1JfOTJTVQkJMQogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIFBhcmFtZXRlcnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUJCUVGVVNFX01BQ19MRU4JCQkJCTB4MjAwCisjZGVmaW5lCQlFRlVTRV9SRUFMX0NPTlRFTlRfTEVOCQk1MTIKKyNkZWZpbmUJCUVGVVNFX01BUF9MRU4JCQkJCTEyOAorI2RlZmluZQkJRUZVU0VfTUFYX1NFQ1RJT04JCQkxNgorI2RlZmluZQkJRUZVU0VfTUFYX1dPUkRfVU5JVAkJCTQKIAogI2RlZmluZQkJRUZVU0VfSU5JVF9NQVAJCQkJMAogI2RlZmluZQkJRUZVU0VfTU9ESUZZX01BUAkJCQkxCkBAIC00MSw3ICs0MCw2IEBACiAjZGVmaW5lCQlFRlVTRV9DTEtfQ1RSTAkJCUVGVVNFX0NUUkwKICNkZWZpbmUgCUVGVVNFX0JJVCh4KSAgKDEgPDwgKHgpKQogCi0vLyBGcm9tIDg3MTIhISEhISEhIQogI2RlZmluZQkJUEdfU1RBVEVfSEVBREVSIAkweDAxCiAjZGVmaW5lCQlQR19TVEFURV9XT1JEXzAJCTB4MDIKICNkZWZpbmUJCVBHX1NUQVRFX1dPUkRfMQkJMHgwNApAQCAtNTIsMjMgKzUwLDYgQEAKICNkZWZpbmUJCVBHX1NXQllURV9ICQkJMHgwMQogI2RlZmluZQkJUEdfU1dCWVRFX0wJCQkweDAyCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgUGFyYW1ldGVycy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIHN0cnVjdHVyZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBzdHJ1Y3R1cmUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydCBnbG9iYWwgdmFyaWFibGUtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRXhwb3J0IGdsb2JhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydCBNYXJjbyBEZWZpbml0aW9uLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FeHBvcnQgTWFyY28gRGVmaW5pdGlvbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUV4cG9ydGVkIEZ1bmN0aW9uIHByb3RvdHlwZS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBleHRlcm4Jdm9pZAogRUZVU0VfSW5pdGlhbGl6ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIGV4dGVybgl1OApAQCAtODEsMjEgKzYyLDE4IEBACiBSZWFkRUZ1c2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1MTYgX29mZnNldCx1MTYgX3NpemVfYnl0ZSx1OCogcGJ1Zik7CiBleHRlcm4Jdm9pZAogUmVhZEVGdXNlQnl0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHUxNiAgX29mZnNldCx1OCAgKnBidWYpOwotI2VuZGlmCS8vICNpZiAoRUZVU0VfRk9SXzkyU1UgPT0gMSkKKyNlbmRpZgogCiBleHRlcm4Jdm9pZAogRUZVU0VfU2hhZG93UmVhZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHVuc2lnbmVkIGNoYXIgVHlwZSx1bnNpZ25lZCBzaG9ydCBPZmZzZXQsdTMyICpWYWx1ZSk7CiBleHRlcm4Jdm9pZAogRUZVU0VfU2hhZG93V3JpdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1bnNpZ25lZCBjaGFyIFR5cGUsdW5zaWduZWQgc2hvcnQgT2Zmc2V0LHUzMiBWYWx1ZSk7Ci1leHRlcm4Jdm9pZAorZXh0ZXJuCWJvb2wKIEVGVVNFX1NoYWRvd1VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKIGV4dGVybgl2b2lkCiBFRlVTRV9TaGFkb3dNYXBVcGRhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiAKIGV4dGVybglib29sCiBFRlVTRV9Qcm9ncmFtTWFwKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsY2hhciogcEZpbGVOYW1lLCB1OCBUYWJsZVR5cGUpOwkJLy8gMD1TaGFkb3cgMT1SZWFsIEVmdXNlCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRXhwb3J0ZWQgRnVuY3Rpb24gcHJvdG90eXBlLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogRW5kIG9mIEVmdXNlLmggKi8KLQotI2VuZGlmIC8vX19JTkNfRUZVU0VfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYwppbmRleCA1MDM2ZDU0Li5kYjBkMmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmMKQEAgLTEsMTYgKzEsMjIgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUHJvY2VkdXJlOiAgICBJbml0IGJvb3QgY29kZS9maXJtd2FyZSBjb2RlL2RhdGEgc2Vzc2lvbgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogRGVzY3JpcHRpb246IFRoaXMgcm91dGluZSB3aWxsIGludGlhbGl6ZSBmaXJtd2FyZS4gSWYgYW55IGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uCi0gKiAJCXByb2Nlc3MsIHRoZSByb3V0aW5lIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgcmV0dXJuIGZhaWwuCi0gKgkJTklDIGRyaXZlciBzaG91bGQgY2FsbCBOZGlzT3BlbkZpbGUgb25seSBmcm9tIE1pbmlwb3J0SW5pdGlhbGl6ZS4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCiAgKgotICogQXJndW1lbnRzOiAgIFRoZSBwb2ludGVyIG9mIHRoZSBhZGFwdGVyCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICogUmV0dXJuczoKLSAqICAgICAgICBORElTX1NUQVRVU19GQUlMVVJFIC0gdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHNob3VsZCBiZSB0ZXJtaW5hdGVkCi0gKiAgICAgICAgTkRJU19TVEFUVVNfU1VDQ0VTUyAtIGlmIGZpcm13YXJlIGluaXRpYWxpemF0aW9uIHByb2Nlc3Mgc3VjY2VzcwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAicjgxOTJVLmgiCiAjaW5jbHVkZSAicjgxOTJTX2Zpcm13YXJlLmgiCiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaAppbmRleCAyYzJjZjgwLi43ZjI2OGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmgKQEAgLTEsNDQgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fSU5DX0ZJUk1XQVJFX0gKICNkZWZpbmUgX19JTkNfRklSTVdBUkVfSAogCiAKLS8vI2RlZmluZSBSVEw4MTkwX0NQVV9TVEFSVF9PRkZTRVQJMHg4MAotLyogVE9ETzogdGhpcyBkZWZpbml0aW9uIGlzIFRCRCAqLwotLy8jZGVmaW5lIFVTQl9IV0RFU0NfSEVBREVSX0xFTgkwCi0KLS8qIEl0IHNob3VsZCBiZSBkb3VibGUgd29yZCBhbGlnbm1lbnQgKi8KLS8vI2lmIERFVl9CVVNfVFlQRT09UENJX0lOVEVSRkFDRQotLy8jZGVmaW5lIEdFVF9DT01NQU5EX1BBQ0tFVF9GUkFHX1RIUkVTSE9MRCh2KQk0Kih2LzQpIC0gOAotLy8jZWxzZQotLy8jZGVmaW5lIEdFVF9DT01NQU5EX1BBQ0tFVF9GUkFHX1RIUkVTSE9MRCh2KQkoNCoodi80KSAtIDggLSBVU0JfSFdERVNDX0hFQURFUl9MRU4pCi0vLyNlbmRpZgotCi0vL3R5cGVkZWYgZW51bSBfZmlybXdhcmVfaW5pdF9zdGVwewotLy8JRldfSU5JVF9TVEVQMF9CT09UID0gMCwKLS8vCUZXX0lOSVRfU1RFUDFfTUFJTiA9IDEsCi0vLwlGV19JTklUX1NURVAyX0RBVEEgPSAyLAotLy99ZmlybXdhcmVfaW5pdF9zdGVwX2U7Ci0KLS8vdHlwZWRlZiBlbnVtIF9ERVNDX1BBQ0tFVF9UWVBFewotLy8JREVTQ19QQUNLRVRfVFlQRV9JTklUID0gMCwKLS8vCURFU0NfUEFDS0VUX1RZUEVfTk9STUFMID0gMSwKLS8vfURFU0NfUEFDS0VUX1RZUEU7Ci0jZGVmaW5lCVJUTDgxOTJTX0ZXX1BLVF9GUkFHX1NJWkUJCTB4RkYwMAkvLyA2NEsKLQotCiAjZGVmaW5lIAlSVEw4MTkwX01BWF9GSVJNV0FSRV9DT0RFX1NJWkUJNjQwMDAJLy82NGsKICNkZWZpbmUJTUFYX0ZJUk1XQVJFX0NPREVfU0laRQkweEZGMDAgLy8gRmlybXdhcmUgTG9jYWwgYnVmZmVyIHNpemUuCiAjZGVmaW5lIAlSVEw4MTkwX0NQVV9TVEFSVF9PRkZTRVQJCQkweDgwCi0KKyNkZWZpbmUJUlRMODE5MlNfRldfUEtUX0ZSQUdfU0laRQkJMHg0MDAwCiAjZGVmaW5lIEdFVF9DT01NQU5EX1BBQ0tFVF9GUkFHX1RIUkVTSE9MRCh2KQkoNCoodi80KSAtIDggLSBVU0JfSFdERVNDX0hFQURFUl9MRU4pCiAKLS8vdHlwZWRlZiBlbnVtIF9ERVNDX1BBQ0tFVF9UWVBFewotLy8JREVTQ19QQUNLRVRfVFlQRV9JTklUID0gMCwKLS8vCURFU0NfUEFDS0VUX1RZUEVfTk9STUFMID0gMSwKLS8vfURFU0NfUEFDS0VUX1RZUEU7CiAKLS8vIEZvcndhcmQgZGVjbGFyYXRpb24uCi0vL3R5cGVkZWYJc3RydWN0IF9BREFQVEVSCUFEQVBURVIsICpQQURBUFRFUjsKICNpZmRlZiBSVEw4MTkyUwogdHlwZWRlZiBlbnVtIF9maXJtd2FyZV9pbml0X3N0ZXB7CiAJRldfSU5JVF9TVEVQMF9JTUVNID0gMCwKQEAgLTY0LDE3ICs1Miw4IEBACiAJT1BUX0ZJUk1XQVJFX1JFU0VUID0gMSwKIH1vcHRfcnN0X3R5cGVfZTsKIAotLyp0eXBlZGVmIGVudW0gX0ZJUk1XQVJFX1NUQVRVU3sKLQlGV19TVEFUVVNfMF9JTklUID0gMCwKLQlGV19TVEFUVVNfMV9NT1ZFX0JPT1RfQ09ERSA9IDEsCi0JRldfU1RBVFVTXzJfTU9WRV9NQUlOX0NPREUgPSAyLAotCUZXX1NUQVRVU18zX1RVUk5PTl9DUFUgPSAzLAotCUZXX1NUQVRVU180X01PVkVfREFUQV9DT0RFID0gNCwKLQlGV19TVEFUVVNfNV9SRUFEWSA9IDUsCi19RklSTVdBUkVfU1RBVFVTOwotKi8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFJUTDgxOTJTIEZpcm13YXJlIHJlbGF0ZWQsIFJldmlzZWQgYnkgUm9nZXIsIDIwMDguMTIuMTguCisvLyBSVEw4MTkyUyBGaXJtd2FyZSByZWxhdGVkCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB0eXBlZGVmICBzdHJ1Y3QgX1JUXzgxOTJTX0ZJUk1XQVJFX1BSSVYgeyAvLzgtYnl0ZXMgYWxpZ25tZW50IHJlcXVpcmVkCiAKQEAgLTE4MSw3ICsxNjAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgX3J0X2Zpcm13YXJlewogCVBSVF84MTkyU19GSVJNV0FSRV9IRFIJcEZ3SGVhZGVyOwogCUZJUk1XQVJFXzgxOTJTX1NUQVRVUwlGV1N0YXR1czsKLQl1MTYgICAgICAgICAgICAgRmlybXdhcmVWZXJzaW9uOwogCXU4CQlGd0lNRU1bUlRMODE5MF9NQVhfRklSTVdBUkVfQ09ERV9TSVpFXTsKIAl1OAkJRndFTUVNW1JUTDgxOTBfTUFYX0ZJUk1XQVJFX0NPREVfU0laRV07CiAJdTMyCQlGd0lNRU1MZW47CkBAIC0xODksMTEgKzE2Nyw0MyBAQAogCXU4CQlzekZ3VG1wQnVmZmVyWzE2NDAwMF07CiAgICAgICAgIHUzMiAgICAgICAgICAgICBzekZ3VG1wQnVmZmVyTGVuOwogCXUxNgkJQ21kUGFja2V0RnJhZ1RocmVzb2xkOworCXUxNgkJRmlybXdhcmVWZXJzaW9uOwogfXJ0X2Zpcm13YXJlLCAqcHJ0X2Zpcm13YXJlOwogCi0vL3R5cGVkZWYgc3RydWN0IF9SVF9GSVJNV0FSRV9JTkZPXzgxOTJTVXsKLS8vCXU4CQlzekluZm9bMTZdOwotLy99UlRfRklSTVdBUkVfSU5GT184MTkyU1UsICpQUlRfRklSTVdBUkVfSU5GT184MTkyU1U7CisjZGVmaW5lCQlGV19ESUdfRU5BQkxFX0NUTAkJCUJJVDAKKyNkZWZpbmUJCUZXX0hJR0hfUFdSX0VOQUJMRV9DVEwJCUJJVDEKKyNkZWZpbmUJCUZXX1NTX0NUTAkJCQkJCUJJVDIKKyNkZWZpbmUJCUZXX1JBX0lOSVRfQ1RMCQkJCUJJVDMKKyNkZWZpbmUJCUZXX1JBX0JHX0NUTAkJCQkJQklUNAorI2RlZmluZQkJRldfUkFfTl9DVEwJCQkJCUJJVDUKKyNkZWZpbmUJCUZXX1BXUl9UUktfQ1RMCQkJCUJJVDYKKyNkZWZpbmUJCUZXX0lRS19DVEwJCQkJCQlCSVQ3CisjZGVmaW5lCQlGV19BTlRFTk5BX1NXCQkJCUJJVDgKKyNkZWZpbmUJCUZXX0RJU0FCTEVfQUxMX0RNCQkJMAorCisjZGVmaW5lCQlGV19QV1JfVFJLX1BBUkFNX0NMUgkJMHgwMDAwZmZmZgorI2RlZmluZQkJRldfUkFfUEFSQU1fQ0xSCQkJCTB4ZmZmZjAwMDAKKworI2RlZmluZQlGV19DTURfSU9fQ0xSKF9wZGV2LCBfQml0KQkJXAorCXVkZWxheSgxMDAwKTsJCVwKKwkoKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoX3BkZXYpKS0+RndDbWRJT01hcCAmPSAofl9CaXQpOworCisjZGVmaW5lCUZXX0NNRF9JT19VUERBVEUoX3BkZXYsIF92YWwpCQlcCisJKChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KF9wZGV2KSktPkZ3Q21kSU9NYXAgPSBfdmFsOworCisjZGVmaW5lCQlGV19DTURfSU9fU0VUKF9wZGV2LCBfdmFsKSAJXAorCXdyaXRlX25pY193b3JkKF9wZGV2LCBMQlVTX01PTl9BRERSLCAodTE2KV92YWwpOwlcCisJRldfQ01EX0lPX1VQREFURShfcGRldiwgX3ZhbCk7CisKKyNkZWZpbmUJCUZXX0NNRF9QQVJBX1NFVChfcGRldiwgX3ZhbCkgCQlcCisJd3JpdGVfbmljX2R3b3JkKF9wZGV2LCBMQlVTX0FERFJfTUFTSywgX3ZhbCk7CVwKKwkoKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoX3BkZXYpKS0+RndDbWRJT1BhcmFtID0gX3ZhbDsKKworI2RlZmluZQkJRldfQ01EX0lPX1FVRVJZKF9wZGV2KQkodTE2KSgoKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoX3BkZXYpKS0+RndDbWRJT01hcCkKKyNkZWZpbmUJRldfQ01EX0lPX1BBUkFfUVVFUlkoX3BkZXYpCSh1MzIpKCgoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihfcGRldikpLT5Gd0NtZElPUGFyYW0pCisKKworCiBib29sIEZpcm13YXJlRG93bmxvYWQ5MlMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2h3LmgKaW5kZXggODJlYTk2Yi4uZTYyYjc5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19ody5oCkBAIC0xLDI1ICsxLDIyIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCUNvcHlyaWdodChjKSAyMDA4LCAgUmVhbFRFSyBUZWNobm9sb2d5IEluYy4gQWxsIFJpZ2h0IFJlc2VydmVkLgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIFJlYWx0ZWsgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgotICogTW9kdWxlOglfX0lOQ19IQUw4MTkyU0VSRUdfSAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQogICoKLSAqIE5vdGU6CTEuIERlZmluZSBNYWMgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgY29ycmVzcG9uZGluZyBiaXQgbWFzayBtYXAKLSAqCQkJMi4gQ0NYIHJlZ2lzdGVyCi0gKgkJCTMuIEJhY2t3YXJkIGNvbXBhdGlibGUgcmVnaXN0ZXIgd2l0aCB1c2VsZXNzIGFkZHJlc3MuCi0gKgkJCTQuIERlZmluZSA5MlNVIHJlcXVpcmVkIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGRlZmluaXRpb24uCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICoKLSAqIEV4cG9ydDoJQ29uc3RhbnRzLCBtYWNybywgZnVuY3Rpb25zKEFQSSksIGdsb2JhbCB2YXJpYWJsZXMoTm9uZSkuCi0gKgotICogQWJicmV2OgotICoKLSAqIEhpc3Rvcnk6Ci0gKgkJRGF0YQkJV2hvCQlSZW1hcmsKLSAqICAgICAgMDgvMDcvMjAwNyAgTUhDICAgIAkxLiBQb3J0aW5nIGZyb20gOXggc2VyaWVzIFBIWUNGRy5oLgotICoJCQkJCQkJMi4gUmVvcmdhbml6ZSBjb2RlIGFyY2hpdGVjdHVyZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogI2lmbmRlZiBSODE5MlNfSFcKICNkZWZpbmUgUjgxOTJTX0hXCiAKQEAgLTI5LDIxICsyNiwxNCBAQAogCVZFUlNJT05fODE5MlNfQ0NVVAogfVZFUlNJT05fODE5MlMsKlBWRVJTSU9OXzgxOTJTOwogCi0vLyNpZmRlZiBSVEw4MTkyU1UKIHR5cGVkZWYgZW51bSBfVkVSU0lPTl84MTkyU1VzYnsKIAlWRVJTSU9OXzgxOTJTVV9BLCAvL0EtQ3V0CiAJVkVSU0lPTl84MTkyU1VfQiwgLy9CLUN1dAogCVZFUlNJT05fODE5MlNVX0MsIC8vQy1DdXQKIH1WRVJTSU9OXzgxOTJTVXNiLCAqUFZFUlNJT05fODE5MlNVc2I7Ci0vLyNlbHNlCi10eXBlZGVmIGVudW0gX1ZFUlNJT05fODE5eFV7Ci0JVkVSU0lPTl84MTl4VV9BLCAvLyBBLWN1dAotCVZFUlNJT05fODE5eFVfQiwgLy8gQi1jdXQKLQlWRVJTSU9OXzgxOXhVX0MsLy8gQy1jdXQKLX1WRVJTSU9OXzgxOXhVLCpQVkVSU0lPTl84MTl4VTsKLS8vI2VuZGlmCiAKLS8qIDIwMDcvMTEvMTUgTUggRGVmaW5lIGRpZmZlcmVudCBSRiB0eXBlLiAqLworCisvKiBSRiB0eXBlLiAqLwogdHlwZWRlZgllbnVtIF9SVF9SRl9UWVBFX0RFRklOSVRJT04KIHsKIAlSRl8xVDJSID0gMCwKQEAgLTUxLDkgKzQxLDYgQEAKIAlSRl8yVDJSLAogCVJGXzFUMVIsCiAJUkZfMlQyUl9HUkVFTiwKLQkvL1JGXzNUM1IsCi0JLy9SRl8zVDRSLAotCS8vUkZfNFQ0UiwKIAlSRl84MTlYX01BWF9UWVBFCiB9UlRfUkZfVFlQRV9ERUZfRTsKIApAQCAtNjgsMTIgKzU1LDEwIEBACiAjZGVmaW5lCVJUTDgxODdfUkVRX1NFVF9SRUdTCTB4MDUKIAogI2RlZmluZSBNQVhfVFhfVVJCIDUKLSNkZWZpbmUgTUFYX1JYX1VSQiAxNgorI2RlZmluZSBNQVhfUlhfVVJCIDgKIAogI2RlZmluZSBSODE4MF9NQVhfUkVUUlkgMjU1Ci0vLyNkZWZpbmUgTUFYX1JYX05PUk1BTF9VUkIgMwotLy8jZGVmaW5lIE1BWF9SWF9DT01NQU5EX1VSQiAyCi0jZGVmaW5lIFJYX1VSQl9TSVpFIAkJOTEwMAorI2RlZmluZSBSWF9VUkJfU0laRSAJCTB4NDAwMAogCiAjZGVmaW5lIEJCX0FOVEFUVEVOX0NIQU4xNAkweDBjCiAjZGVmaW5lIEJCX0FOVEVOTkFfQiAJCTB4NDAKQEAgLTEzNCw3ICsxMTksNiBAQAogI2RlZmluZSBNU1JfTElOS19FTkVEQ0EJICAgCSgxPDw0KQogCiAKLS8vI2RlZmluZSBDbWQ5MzQ2Q1JfOTM1NlNFTAkoMTw8NCkKICNkZWZpbmUgRVBST01fQ01EX1JFU0VSVkVEX01BU0sgCQkJKDE8PDUpCiAjZGVmaW5lIEVQUk9NX0NNRF9PUEVSQVRJTkdfTU9ERV9TSElGVCAJNgogI2RlZmluZSBFUFJPTV9DTURfT1BFUkFUSU5HX01PREVfTUFTSyAJKCgxPDw3KXwoMTw8NikpCkBAIC0xNDcsMTMgKzEzMSw2IEBACiAjZGVmaW5lIEVQUk9NX1dfU0hJRlQgCQkJMQogI2RlZmluZSBFUFJPTV9SX1NISUZUIAkJCTAKIAotLy8jZGVmaW5lCU1BQzAgCQkJIDB4MDAwLAotLy8jZGVmaW5lCU1BQzEgCQkJIDB4MDAxLAotLy8jZGVmaW5lCU1BQzIgCQkJIDB4MDAyLAotLy8jZGVmaW5lCU1BQzMgCQkJIDB4MDAzLAotLy8jZGVmaW5lCU1BQzQgCQkJIDB4MDA0LAotLy8jZGVmaW5lCU1BQzUgCQkJIDB4MDA1LAotCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gICAgICAgODE5MlMgUmVnc2l0ZXIgb2Zmc2V0IGRlZmluaXRpb24KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01MjksMTQgKzUwNiw2IEBACiAvLyBVU0IgUlBXTSByZWdpc3RlcgogI2RlZmluZQlVU0JfUlBXTQkJCTB4RkU1OAogCi0vL0ZJWExaTSBTVk5fQlJBQ0ggTk9UIE1PRCBIRVJFLCBJRiBNT0QgUlggSVMgTElUVExFIExPVwotLy8jaWYgKChIQUxfQ09ERV9CQVNFID09IFJUTDgxOTJfUykgJiYgIChERVZfQlVTX1RZUEU9PVBDSV9JTlRFUkZBQ0UpKQotLy8jZGVmaW5lCVJQV00JCVBDSV9SUFdNCi0vLyNlbGlmICgoSEFMX0NPREVfQkFTRSA9PSBSVEw4MTkyX1MpICYmICAoREVWX0JVU19UWVBFPT1VU0JfSU5URVJGQUNFKSkKLS8vI2RlZmluZQlSUFdNCQlVU0JfUlBXTQotLy8jZW5kaWYKLQotCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vICAgICAgIDgxOTAgUmVnc2l0ZXIgb2Zmc2V0IGRlZmluaXRpb24KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzc3LDEzICs3NDYsMTEgQEAKICNkZWZpbmUJCVJDUl9NWERNQV9PRkZTRVQJCTgKICNkZWZpbmUJCVJDUl9GSUZPX09GRlNFVAkJMTMKIAotLy9pbiA5MlUgRklYTFpNCi0vLyNpZmRlZiBSVEw4MTkyVQogI2RlZmluZSBSQ1JfT05MWUVSTFBLVAkJQklUMzEJCQkvLyBFYXJseSBSZWNlaXZpbmcgYmFzZWQgb24gUGFja2V0IFNpemUuCiAjZGVmaW5lIFJDUl9FTkNTMgkJCUJJVDMwCQkJLy8gRW5hYmxlIENhcnJpZXIgU2Vuc2UgRGV0ZWN0aW9uIE1ldGhvZCAyCiAjZGVmaW5lIFJDUl9FTkNTMQkJCUJJVDI5CQkJLy8gRW5hYmxlIENhcnJpZXIgU2Vuc2UgRGV0ZWN0aW9uIE1ldGhvZCAxCiAjZGVmaW5lIFJDUl9BQ0tUWEJXCQkJKEJJVDI0fEJJVDI1KQkJLy8gVFhCVyBTZXR0aW5nIG9mIEFDSyBmcmFtZXMKLS8vI2VuZGlmCisKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gICAgICAgODE5MlMgKE1TUikgTWVkaWEgU3RhdHVzIFJlZ2lzdGVyCShPZmZzZXQgMHg0QywgOCBiaXRzKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjU5LDE3ICsxMjI2LDE4IEBACiAjZGVmaW5lCQlFRVBST01fQ0hBTk5FTF9QTEFOX0dMT0JBTF9ET01BSU4JMHg5CiAjZGVmaW5lCQlFRVBST01fQ0hBTk5FTF9QTEFOX1dPUkxEX1dJREVfMTMJMHhBCiAjZGVmaW5lCQlFRVBST01fQ0hBTk5FTF9QTEFOX0JZX0hXX01BU0sJMHg4MAorI2RlZmluZSAJRUVQUk9NX0NJRF9ERUZBVUxUCQkJMHgwCisjZGVmaW5lIAlFRVBST01fQ0lEX0FMUEhBCQkJMHgxCisjZGVmaW5lIAlFRVBST01fQ0lEX1NlbmFvCQkJMHgzCisjZGVmaW5lCQlFRVBST01fQ0lEX0NBTUVPCQkJMFg4CisjZGVmaW5lIAlFRVBST01fQ0lEX1NJVEVDT00JCQkweDkKKyNkZWZpbmUgCUVFUFJPTV9DSURfQ09SRUdBCQkJMHhCCisjZGVmaW5lIAlFRVBST01fQ0lEX0VESU1BWF9CRUxLSU4JCTB4QworI2RlZmluZQkJRUVQUk9NX0NJRF9TRVJDT01NX0JFTEtJTgkJMHhFCisjZGVmaW5lCQlFRVBST01fQ0lEX0NBTUVPMQkJCTB4RgorI2RlZmluZSAJRUVQUk9NX0NJRF9XSFFMIAkJCTB4RkUKKyNkZWZpbmUJCUVFUFJPTV9DSURfTmV0Q29yZQkJCTB4NQogCi0jZGVmaW5lIAkJRUVQUk9NX0NJRF9ERUZBVUxUCQkJCTB4MAotI2RlZmluZSAJCUVFUFJPTV9DSURfQUxQSEEJCQkJMHgxCi0jZGVmaW5lCQlFRVBST01fQ0lEX0NBTUVPCQkJCQkwWDgKLSNkZWZpbmUgCQlFRVBST01fQ0lEX1NJVEVDT00JCQkJMHg5Ci0KLS8vI2RlZmluZSBFRVBST01fQ0lEX1JVTlRPUAkJCQkJCTB4MgotLy8jZGVmaW5lIEVFUFJPTV9DSURfU2VuYW8JCQkJCQkweDMKLS8vI2RlZmluZSBFRVBST01fQ0lEX1RPU0hJQkEJCQkJCQkweDQKLS8vI2RlZmluZSBFRVBST01fQ0lEX05ldENvcmUJCQkJCQkweDUKLSNkZWZpbmUgCQlFRVBST01fQ0lEX1dIUUwgCQkJCTB4RkUgLy8gYWRkZWQgYnkgY2hpeW9rbyBmb3IgZHRtLCAyMDA5MDEwOAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAweDJjMCBGVyBDb21tYW5kIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5pdGlvbiwgYWRkZWQgYnkgUm9nZXIsIDIwMDguMTEuMjcuCkBAIC0xMjgyLDE4ICsxMjUwLDMyIEBACiAjZGVmaW5lCQlGV19ISUdIX1BXUl9FTkFCTEUJCQkweGZkMDAwMDA5CiAjZGVmaW5lCQlGV19UWFBXUl9UUkFDS19FTkFCTEUJCTB4ZmQwMDAwMTcKICNkZWZpbmUJCUZXX1RYUFdSX1RSQUNLX0RJU0FCTEUJCTB4ZmQwMDAwMTgKLSNkZWZpbmUJCUZXX1JBX1JFU0VUCQkJCQkweGZkMDAwMGFmCi0jZGVmaW5lCQlGV19SQV9BQ1RJVkUJCQkJCTB4ZmQwMDAwYTYKKyNkZWZpbmUJCUZXX1RYUFdSX1RSQUNLX1RIRVJNQUwJCTB4ZmQwMDAwMTkKKyNkZWZpbmUJCUZXX1JBX0lOSVQJCQkJCQkweGZkMDAwMDI2CisjZGVmaW5lCQlGV19SQV9JT1RfQkdfQ09NQgkJCTB4ZmQwMDAwMzAKKyNkZWZpbmUJCUZXX1JBX0lPVF9OX0NPTUIJCQkJMHhmZDAwMDAzMQogI2RlZmluZQkJRldfUkFfUkVGUkVTSAkJCQkJMHhmZDAwMDBhMAotI2RlZmluZQkJRldfUkFfRU5BQkxFX0JHCQkJCTB4ZmQwMDAwYWMKKyNkZWZpbmUJCUZXX1JBX0RJU0FCTEUJCQkJCTB4ZmQwMDAwYTQKKyNkZWZpbmUJCUZXX1JBX0FDVElWRQkJCQkJMHhmZDAwMDBhNgorI2RlZmluZQkJRldfUkFfRElTQUJMRV9SU1NJX01BU0sJCTB4ZmQwMDAwYWMKKyNkZWZpbmUJCUZXX1JBX0VOQUJMRV9SU1NJX01BU0sJCTB4ZmQwMDAwYWQKKyNkZWZpbmUJCUZXX1JBX1JFU0VUCQkJCQkweGZkMDAwMGFmCisjZGVmaW5lCQlGV19ETV9ESVNBQkxFCQkJCQkweGZkMDBhYTAwCiAjZGVmaW5lCQlGV19JUUtfRU5BQkxFCQkJCQkweGYwMDAwMDIwCiAjZGVmaW5lCQlGV19JUUtfU1VDQ0VTUwkJCQkweDAwMDBkZGRkCiAjZGVmaW5lCQlGV19JUUtfRkFJTAkJCQkJMHgwMDAwZmZmZgogI2RlZmluZQkJRldfT1BfRkFJTFVSRQkJCQkJMHhmZmZmZmZmZgotI2RlZmluZQkJRldfRE1fRElTQUJMRQkJCQkJMHhmZDAwYWEwMAorI2RlZmluZQkJRldfVFhfRkVFREJBQ0tfTk9ORQkJCQkweGZiMDAwMDAwCisjZGVmaW5lCQlGV19UWF9GRUVEQkFDS19EVE1fRU5BQkxFCQkoRldfVFhfRkVFREJBQ0tfTk9ORSB8IDB4MSkKKyNkZWZpbmUJCUZXX1RYX0ZFRURCQUNLX0NDWF9FTkFCTEUJCShGV19UWF9GRUVEQkFDS19OT05FIHwgMHgyKQogI2RlZmluZQkJRldfQkJfUkVTRVRfRU5BQkxFCQkJMHhmZjAwMDAwZAogI2RlZmluZQkJRldfQkJfUkVTRVRfRElTQUJMRQkJCTB4ZmYwMDAwMGUKLQorI2RlZmluZQkJRldfTFBTX0VOVEVSCQkJCQkweGZlMDAwMDEwCisjZGVmaW5lCQlGV19MUFNfTEVBVkUJCQkJCTB4ZmUwMDAwMTEKKyNkZWZpbmUJCUZXX0lORElSRUNUX1JFQUQJCQkJMHhmMjAwMDAwMAorI2RlZmluZQkJRldfSU5ESVJFQ1RfV1JJVEUJCQkJMHhmMjAwMDAwMQorI2RlZmluZQkJRldfVFhBTlRfU1dJVENIX0VOQUJMRQkJMHhmZDAwMDAyMworI2RlZmluZQkJRldfVFhBTlRfU1dJVENIX0RJU0FCTEUJCTB4ZmQwMDAwMjQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tOTJTVSByZXF1aXJlIGRlbGV0ZSBvciBtb3ZlIHRvIG90aGVyIHBsYWNlIGxhdGVyCiAvLwpAQCAtMTQ2MCwzNCArMTQ0Miw0IEBACiAjZGVmaW5lCQlIQUxfODE5MlNfSFdfR1BJT19PRkZfTUFTSwkweEY3CiAjZGVmaW5lCQlIQUxfODE5MlNfSFdfR1BJT19XUFNfQklUCUJJVDQKIAotI2VuZGlmICAvL1I4MTkyU19IVwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCmluZGV4IGI2YzBmMTkuLmE1ZmMyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCkBAIC0xLDM1ICsxLDIwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgICAgKGMpIENvcHlyaWdodCAyMDA4LCBSZWFsVEVLIFRlY2hub2xvZ2llcyBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLSBNb2R1bGU6CWhhbDgxOTJzcGh5LmMKLQotIE5vdGU6CQlNZXJnZSA5MlNFL1NVIFBIWSBjb25maWcgYXMgYmVsb3cKLQkJCTEuIEJCIHJlZ2lzdGVyIFIvVyBBUEkKLSAJCQkyLiBSRiByZWdpc3RlciBSL1cgQVBJCi0gCQkJMy4gSW5pdGlhbCBCQi9SRi9NQUMgY29uZmlnIGJ5IHJlYWRpbmcgQkIvTUFDL1JGIHR4dC4KLSAJCQkzLiBQb3dlciBzZXR0aW5nIEFQSQotIAkJCTQuIENoYW5uZWwgc3dpdGNoIEFQSQotIAkJCTUuIEluaXRpYWwgZ2FpbiBzd2l0Y2ggQVBJLgotIAkJCTYuIE90aGVyIEJCL01BQy9SRiBBUEkuCi0KLSBGdW5jdGlvbjoJUEhZOiBFeHRlcm4gZnVuY3Rpb24sIHBoeTogbG9jYWwgZnVuY3Rpb24KLQotIEV4cG9ydDoJUEhZX0Z1bmN0aW9uTmFtZQotCi0gQWJicmV2OglOT05FCi0KLSBIaXN0b3J5OgotCURhdGEJCVdobwkJUmVtYXJrCi0JMDgvMDgvMjAwOCAgTUhDICAgIAkxLiBQb3J0IGZyb20gOXggc2VyaWVzIHBoeWNmZy5jCi0JCQkJCQkyLiBSZW9yZ2FuaXplIGNvZGUgYXJjaCBhbmQgYWQgZGVzY3JpcHRpb24uCi0JCQkJCQkzLiBDb2xsZWN0IHNpbWlsYXIgZnVuY3Rpb24uCi0JCQkJCQk0LiBTZXBlcmF0ZSBleHRlcm4vbG9jYWwgQVBJLgotCTA4LzEyLzIwMDgJTUhDCQlXZSBtdXN0IG1lcmdlIG9yIG1vdmUgVVNCIFBIWSByZWxhdGl2ZSBmdW5jdGlvbiBsYXRlci4KLQkxMC8wNy8yMDA4CU1IQwkJQWRkIElRIGNhbGlicmF0aW9uIGZvciBQSFkuKE9ubHkgMVQyUiBtb2RlIG5vdyEhISkKLQkxMS8wNi8yMDA4CU1IQwkJQWRkIFRYIFBvd2VyIGluZGV4IFBHIGZpbGUgdG8gY29uZmlnIGluIDB4RXh4IHJlZ2lzdGVyCi0JCQkJCQlhcmVhIHRvIG1hcCB3aXRoIEVFUFJPTS9FRlVTRSB0eCBwd3IgaW5kZXguCi0KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAicjgxOTJVLmgiCiAjaW5jbHVkZSAicjgxOTJVX2RtLmgiCkBAIC00MiwxNiArMjcsMTIgQEAKIAogI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgTG9jYWwgQ29uc3RhbnQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogQ2hhbm5lbCBzd2l0Y2g6VGhlIHNpemUgb2YgY29tbWFuZCB0YWJsZXMgZm9yIHN3aXRjaCBjaGFubmVsKi8KICNkZWZpbmUgTUFYX1BSRUNNRF9DTlQgMTYKICNkZWZpbmUgTUFYX1JGREVQRU5EQ01EX0NOVCAxNgogI2RlZmluZSBNQVhfUE9TVENNRF9DTlQgMTYKICNkZWZpbmUgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCA2NAogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBsb2NhbCB2YXJpYWJsZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vLyAyMDA0LTA1LTExCi0KIHN0YXRpYwl1MzIKIHBoeV9DYWxjdWxhdGVCaXRTaGlmdCh1MzIgQml0TWFzayk7CiBzdGF0aWMJUlRfU1RBVFVTCkBAIC04Niw3ICs2Nyw2IEBACiBzdGF0aWMgdTggcGh5X0RibVRvVHhQd3JJZHgoIHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFdJUkVMRVNTX01PREUgV2lyZWxlc3NNb2RlLCBsb25nIFBvd2VySW5EYm0pOwogdm9pZCBwaHlfU2V0RndDbWRJT0NhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwogCi0vLyNpZiAoKEhBTF9DT0RFX0JBU0UgPT0gUlRMODE5Ml9TKSAmJiAoREVWX0JVU19UWVBFPT1VU0JfSU5URVJGQUNFKSkKIC8vCiAvLyBEZXNjcmlwdGlvbjoKIC8vCUJhc2UgQmFuZCByZWFkIGJ5IDQxODEgdG8gbWFrZSBzdXJlIHRoYXQgb3BlcmF0aW9uIGNvdWxkIGJlIGRvbmUgaW4gdW5saW1pdGVkIGN5Y2xlLgpAQCAtOTUsOCArNzUsNiBAQAogLy8JCS0JT25seSB1c2Ugb24gUlRMODE5MlMgVVNCIGludGVyZmFjZS4KIC8vCQktCVBBU1NJVkUgTEVWRUwKIC8vCi0vLyBDcmVhdGVkIGJ5IFJvZ2VyLCAyMDA4LjA5LjA2LgotLy8KIC8vdXNlIGluIHBoeSBvbmx5CiB1MzIgcGh5X1F1ZXJ5VXNiQkJSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTMyCVJlZ0FkZHIpCiB7CkBAIC0xMTgsNyArOTYsNyBAQAogCQltc2xlZXAoMSk7IC8vIDEgbXMKIAogCQkvLyBXYWl0IHRvbyBsb25nLCByZXR1cm4gRkFMU0UgdG8gYXZvaWQgdG8gYmUgc3R1Y2sgaGVyZS4KLQkJaWYoKEJCV2FpdENvdW50ZXIgPiAxMDApICkvL3x8UlRfVVNCX0NBTk5PVF9JTyhBZGFwdGVyKSkKKwkJaWYoKEJCV2FpdENvdW50ZXIgPiAxMDApICkKIAkJewogCQkJUlRfVFJBQ0UoQ09NUF9SRiwgInBoeV9RdWVyeVVzYkJCUmVnKCk6ICglZCkgV2FpdCB0b28gbG9nbiB0byBxdWVyeSBCQiEhXG4iLCBCQldhaXRDb3VudGVyKTsKIAkJCXJldHVybiBSZXR1cm5WYWx1ZTsKQEAgLTE2MCw5ICsxMzgsNiBAQAogLy8gQXNzdW1wdGlvbjoKIC8vCQktCU9ubHkgdXNlIG9uIFJUTDgxOTJTIFVTQiBpbnRlcmZhY2UuCiAvLwkJLQlQQVNTSVZFIExFVkVMCi0vLwotLy8gQ3JlYXRlZCBieSBSb2dlciwgMjAwOC4wOS4wNi4KLS8vCiAvL3VzZSBpbiBwaHkgb25seQogdm9pZAogcGh5X1NldFVzYkJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTMyCVJlZ0FkZHIsdTMyIERhdGEpCkBAIC0xOTEsNyArMTY2LDYgQEAKIAl9CiAKIAlwcml2LT5iQ2hhbmdlQkJJblByb2dyZXNzID0gdHJ1ZTsKLQkvL3ByaW50aygiKioqKioqKioqKioqKiolczogUmVnQWRkcjoleCBEYXRhOiV4XG4iLCBfX0ZVTkNUSU9OX18sUmVnQWRkciwgRGF0YSk7CiAJd3JpdGVfbmljX2R3b3JkKGRldiwgUmVnQWRkciwgRGF0YSk7CiAKIAlwcml2LT5iQ2hhbmdlQkJJblByb2dyZXNzID0gZmFsc2U7CkBAIC0yMTUsOSArMTg5LDcgQEAKIHsKIAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQkvL3UzMgl2YWx1ZSAgPSAwLCBSZXR1cm5WYWx1ZSA9IDA7CiAJdTMyCVJldHVyblZhbHVlID0gMDsKLQkvL3UzMiAJdG1wbG9uZyx0bXBsb25nMjsKIAl1OAlQb2xsaW5nQ250ID0gNTA7CiAJdTgJUkZXYWl0Q291bnRlciA9IDA7CiAKQEAgLTIyOSw4ICsyMDEsNiBAQAogCS8vCiAJd2hpbGUocHJpdi0+YkNoYW5nZVJGSW5Qcm9ncmVzcykKIAl7Ci0JCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0JCS8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX2xvY2ssIGZsYWdzKTsJLy9MWk0sMDkwMzE4CiAJCWRvd24oJnByaXYtPnJmX3NlbSk7CiAKIAkJUkZXYWl0Q291bnRlciArKzsKQEAgLTI0NCwxNCArMjE0LDEwIEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQkvL1BsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKEFkYXB0ZXIsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwogCQl9CiAJfQogCiAJcHJpdi0+YkNoYW5nZVJGSW5Qcm9ncmVzcyA9IHRydWU7Ci0JLy9QbGF0Zm9ybVJlbGVhc2VTcGluTG9jayhBZGFwdGVyLCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTsKLQotCiAJT2Zmc2V0ICY9IDB4M2Y7IC8vUkZfT2Zmc2V0PSAweDAwfjB4M0YKIAogCXdyaXRlX25pY19kd29yZChkZXYsIFJGX0JCX0NNRF9BRERSLCAweEYwMDAwMDAyfApAQCAtMjY3LDggKzIzMyw2IEBACiAJLy8gRGF0YSBGVyByZWFkIGJhY2suCiAJUmV0dXJuVmFsdWUgPSByZWFkX25pY19kd29yZChkZXYsIFJGX0JCX0NNRF9EQVRBKTsKIAotCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7ICAgLy9MWk0sMDkwMzE4CiAJdXAoJnByaXYtPnJmX3NlbSk7CiAJcHJpdi0+YkNoYW5nZVJGSW5Qcm9ncmVzcyA9IGZhbHNlOwogCkBAIC0zMDYsMjcgKzI3MCwyMyBAQAogCS8vCiAJd2hpbGUocHJpdi0+YkNoYW5nZVJGSW5Qcm9ncmVzcykKIAl7Ci0JCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0JCS8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX2xvY2ssIGZsYWdzKTsJLy9MWk0sMDkwMzE4CiAJCWRvd24oJnByaXYtPnJmX3NlbSk7CiAKIAkJUkZXYWl0Q291bnRlciArKzsKIAkJUlRfVFJBQ0UoQ09NUF9SRiwgInBoeV9TZXRVc2JSRlJlZygpOiBXYWl0IDEgbXMgKCVkIHRpbWVzKS4uLlxuIiwgUkZXYWl0Q291bnRlcik7CiAJCW1zbGVlcCgxKTsgLy8gMSBtcwogCi0JCWlmKChSRldhaXRDb3VudGVyID4gMTAwKSkvLyB8fCBSVF9VU0JfQ0FOTk9UX0lPKEFkYXB0ZXIpKQorCQlpZigoUkZXYWl0Q291bnRlciA+IDEwMCkpCiAJCXsKIAkJCVJUX1RSQUNFKENPTVBfUkYsICJwaHlfU2V0VXNiUkZSZWcoKTogKCVkKSBXYWl0IHRvbyBsb2duIHRvIHF1ZXJ5IEJCISFcbiIsIFJGV2FpdENvdW50ZXIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVsc2UKIAkJewotCQkJLy9QbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhBZGFwdGVyLCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTsKIAkJfQogCX0KIAogCXByaXYtPmJDaGFuZ2VSRkluUHJvZ3Jlc3MgPSB0cnVlOwotCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7CiAKIAogCVJlZ0FkZHIgJj0gMHgzZjsgLy9SRl9PZmZzZXQ9IDB4MDB+MHgzRgpAQCAtMzQ3LDE4ICszMDcsMTEgQEAKIAkJUlRfVFJBQ0UoQ09NUF9SRiwgInBoeV9TZXRVc2JSRlJlZygpOiBTZXQgUmVnQWRkciglI3gpID0gJSN4IEZhaWwhISFcbiIsIFJlZ0FkZHIsIERhdGEpOwogCX0KIAotCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7ICAgLy9MWk0sMDkwMzE4CiAJdXAoJnByaXYtPnJmX3NlbSk7CiAJcHJpdi0+YkNoYW5nZVJGSW5Qcm9ncmVzcyA9IGZhbHNlOwogCiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUZ1bmN0aW9uIEJvZHktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8vCiAvLyAxLiBCQiByZWdpc3RlciBSL1cgQVBJCiAvLwpAQCAtMzc2LDggKzMyOSw2IEBACiAqIFJldHVybjoJCXUzMgkJCURhdGEJCQkvL1RoZSByZWFkYmFjayByZWdpc3RlciB2YWx1ZQogKiBOb3RlOgkJVGhpcyBmdW5jdGlvbiBpcyBlcXVhbCB0byAiR2V0UmVnU2V0dGluZyIgaW4gUEhZIHByb2dyYW1taW5nIGd1aWRlCiAqLwotLy91c2UgcGh5IGRtIGNvcmUgODIyNSA4MjU2IDYwNTIKLS8vdTMyIFBIWV9RdWVyeUJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTMyCQlSZWdBZGRyLAl1MzIJCUJpdE1hc2spCiB1MzIgcnRsODE5Ml9RdWVyeUJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaykKIHsKIApAQCAtMzkyLDEwICszNDMsOCBAQAogCS8vIGluZmluaXRlIGN5Y2xlLgogCS8vIDIwMDguMDkuMDYuCiAJLy8KLS8vI2lmICgoSEFMX0NPREVfQkFTRSA9PSBSVEw4MTkyX1MpICYmIChERVZfQlVTX1RZUEU9PVVTQl9JTlRFUkZBQ0UpKQogCWlmKElTX0JCX1JFR19PRkZTRVRfOTJTKFJlZ0FkZHIpKQogCXsKLQkJLy9pZihSVF9VU0JfQ0FOTk9UX0lPKEFkYXB0ZXIpKQlyZXR1cm4JRkFMU0U7CiAKIAkJaWYoKFJlZ0FkZHIgJiAweDAzKSAhPSAwKQogCQl7CkBAIC00MTMsNyArMzYyLDcgQEAKIAlCaXRTaGlmdCA9IHBoeV9DYWxjdWxhdGVCaXRTaGlmdChCaXRNYXNrKTsKIAlSZXR1cm5WYWx1ZSA9IChPcmlnaW5hbFZhbHVlICYgQml0TWFzaykgPj4gQml0U2hpZnQ7CiAKLQkvL1JUUFJJTlQoRlBIWSwgUEhZX0JCUiwgKCJCQlIgTUFTSz0weCV4IEFkZHJbMHgleF09MHgleFxuIiwgQml0TWFzaywgUmVnQWRkciwgT3JpZ2luYWxWYWx1ZSkpOworCiAJUlRfVFJBQ0UoQ09NUF9SRiwgIjwtLS1QSFlfUXVlcnlCQlJlZygpOiBSZWdBZGRyKCUjeCksIEJpdE1hc2soJSN4KSwgT3JpZ2luYWxWYWx1ZSglI3gpXG4iLCBSZWdBZGRyLCBCaXRNYXNrLCBPcmlnaW5hbFZhbHVlKTsKIAlyZXR1cm4gKFJldHVyblZhbHVlKTsKIH0KQEAgLTQzNSw4ICszODQsNiBAQAogKiBSZXR1cm46CQlOb25lCiAqIE5vdGU6CQlUaGlzIGZ1bmN0aW9uIGlzIGVxdWFsIHRvICJQdXRSZWdTZXR0aW5nIiBpbiBQSFkgcHJvZ3JhbW1pbmcgZ3VpZGUKICovCi0vL3VzZSBwaHkgZG0gY29yZSA4MjI1IDgyNTYKLS8vdm9pZCBQSFlfU2V0QkJSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1MzIJCVJlZ0FkZHIsCXUzMgkJQml0TWFzaywJdTMyCQlEYXRhCSkKIHZvaWQgcnRsODE5Ml9zZXRCQnJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2ssIHUzMiBEYXRhKQogewogCXUzMglPcmlnaW5hbFZhbHVlLCBCaXRTaGlmdCwgTmV3VmFsdWU7CkBAIC00NTAsNyArMzk3LDYgQEAKIAkvLyBpbmZpbml0ZSBjeWNsZS4KIAkvLyAyMDA4LjA5LjA2LgogCS8vCi0vLyNpZiAoKEhBTF9DT0RFX0JBU0UgPT0gUlRMODE5Ml9TKSAmJiAoREVWX0JVU19UWVBFPT1VU0JfSU5URVJGQUNFKSkKIAlpZihJU19CQl9SRUdfT0ZGU0VUXzkyUyhSZWdBZGRyKSkKIAl7CiAJCWlmKChSZWdBZGRyICYgMHgwMykgIT0gMCkKQEAgLTQ4MCw3ICs0MjYsNiBAQAogCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgUmVnQWRkciwgRGF0YSk7CiAJfQogCi0JLy9SVF9UUkFDRShDT01QX1JGLCAiPC0tLVBIWV9TZXRCQlJlZygpOiBSZWdBZGRyKCUjeCksIEJpdE1hc2soJSN4KSwgRGF0YSglI3gpXG4iLCBSZWdBZGRyLCBCaXRNYXNrLCBEYXRhKTsKIAogCXJldHVybjsKIH0KQEAgLTUwNSw4ICs0NTAsNiBAQAogKiBSZXR1cm46CQl1MzIJCQlSZWFkYmFjayB2YWx1ZQogKiBOb3RlOgkJVGhpcyBmdW5jdGlvbiBpcyBlcXVhbCB0byAiR2V0UkZSZWdTZXR0aW5nIiBpbiBQSFkgcHJvZ3JhbW1pbmcgZ3VpZGUKICovCi0vL2luIGRtIDgyNTYgYW5kIHBoeQotLy91MzIgUEhZX1F1ZXJ5UkZSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwJUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrKQogdTMyIHJ0bDgxOTJfcGh5X1F1ZXJ5UkZSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrKQogewogCXUzMiBPcmlnaW5hbF9WYWx1ZSwgUmVhZGJhY2tfVmFsdWUsIEJpdFNoaWZ0Oy8vLCBmbGFnczsKQEAgLTUyNyw5ICs0NzAsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiAyMDA4LzAxLzE3IE1IIFdlIGdldCBhbmQgcmVsZWFzZSBzcGluIGxvY2sgd2hlbiByZWFkaW5nIFJGIHJlZ2lzdGVyLiAqLwotCS8vUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soZGV2LCBSVF9SRl9PUEVSQVRFX1NQSU5MT0NLKTtGSVhMWk0KLQkvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7CS8vWUosdGVzdCwwOTAxMTMKIAlkb3duKCZwcml2LT5yZl9zZW0pOwogCS8vCiAJLy8gPFJvZ2VyX05vdGVzPiBEdWUgdG8gODA1MSBvcGVyYXRpb24gY3ljbGUgKGxpbWl0YXRpb24gY3ljbGU6IDZ1cykgYW5kIDEtQnl0ZSBhY2Nlc3MgaXNzdWUsIHdlIHNob3VsZCB1c2UKQEAgLTUzNywxNyArNDc3LDExIEBACiAJLy8gaW5maW5pdGUgY3ljbGUuCiAJLy8gMjAwOC4wOS4wNi4KIAkvLwotLy8jaWYgKEhBTF9DT0RFX0JBU0UgPT0gUlRMODE5Ml9TICYmIERFVl9CVVNfVFlQRT09VVNCX0lOVEVSRkFDRSkKLQkvL2lmKFJUX1VTQl9DQU5OT1RfSU8oQWRhcHRlcikpCXJldHVybiBGQUxTRTsKIAlPcmlnaW5hbF9WYWx1ZSA9IHBoeV9RdWVyeVVzYlJGUmVnKGRldiwgZVJGUGF0aCwgUmVnQWRkcik7CiAKIAlCaXRTaGlmdCA9ICBwaHlfQ2FsY3VsYXRlQml0U2hpZnQoQml0TWFzayk7CiAJUmVhZGJhY2tfVmFsdWUgPSAoT3JpZ2luYWxfVmFsdWUgJiBCaXRNYXNrKSA+PiBCaXRTaGlmdDsKLQkvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX2xvY2ssIGZsYWdzKTsgICAvL1lKLHRlc3QsMDkwMTEzCiAJdXAoJnByaXYtPnJmX3NlbSk7Ci0JLy9QbGF0Zm9ybVJlbGVhc2VTcGluTG9jayhkZXYsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCi0JLy9SVFBSSU5UKEZQSFksIFBIWV9SRlIsICgiUkZSLSVkIE1BU0s9MHgleCBBZGRyWzB4JXhdPTB4JXhcbiIsIGVSRlBhdGgsIEJpdE1hc2ssIFJlZ0FkZHIsIE9yaWdpbmFsX1ZhbHVlKSk7CiAKIAlyZXR1cm4gKFJlYWRiYWNrX1ZhbHVlKTsKIH0KQEAgLTU3MCw4ICs1MDQsNiBAQAogKiBSZXR1cm46CQlOb25lCiAqIE5vdGU6CQlUaGlzIGZ1bmN0aW9uIGlzIGVxdWFsIHRvICJQdXRSRlJlZ1NldHRpbmciIGluIFBIWSBwcm9ncmFtbWluZyBndWlkZQogKi8KLS8vdXNlIHBoeSAgODIyNSA4MjU2Ci0vL3ZvaWQgUEhZX1NldFJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCwgdTMyCVJlZ0FkZHIsCXUzMiBCaXRNYXNrLHUzMglEYXRhCSkKIHZvaWQgcnRsODE5Ml9waHlfU2V0UkZSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCwgdTMyIFJlZ0FkZHIsIHUzMiBCaXRNYXNrLCB1MzIgRGF0YSkKIHsKIApAQCAtNTkyLDE4ICs1MjQsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIDIwMDgvMDEvMTcgTUggV2UgZ2V0IGFuZCByZWxlYXNlIHNwaW4gbG9jayB3aGVuIHdyaXRpbmcgUkYgcmVnaXN0ZXIuICovCi0JLy9QbGF0Zm9ybUFjcXVpcmVTcGluTG9jayhkZXYsIFJUX1JGX09QRVJBVEVfU1BJTkxPQ0spOwotCS8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX2xvY2ssIGZsYWdzKTsJLy9ZSix0ZXN0LDA5MDExMwogCWRvd24oJnByaXYtPnJmX3NlbSk7CiAJLy8KIAkvLyA8Um9nZXJfTm90ZXM+IER1ZSB0byA4MDUxIG9wZXJhdGlvbiBjeWNsZSAobGltaXRhdGlvbiBjeWNsZTogNnVzKSBhbmQgMS1CeXRlIGFjY2VzcyBpc3N1ZSwgd2Ugc2hvdWxkIHVzZQogCS8vIDQxODEgdG8gYWNjZXNzIEJhc2UgQmFuZCBpbnN0ZWFkIG9mIDgwNTEgb24gVVNCIGludGVyZmFjZSB0byBtYWtlIHN1cmUgdGhhdCBhY2Nlc3MgY291bGQgYmUgZG9uZSBpbgogCS8vIGluZmluaXRlIGN5Y2xlLgotCS8vIDIwMDguMDkuMDYuCi0JLy8KLS8vI2lmIChIQUxfQ09ERV9CQVNFID09IFJUTDgxOTJfUyAmJiBERVZfQlVTX1RZUEU9PVVTQl9JTlRFUkZBQ0UpCi0JCS8vaWYoUlRfVVNCX0NBTk5PVF9JTyhBZGFwdGVyKSkJcmV0dXJuOwogCiAJCWlmIChCaXRNYXNrICE9IGJSRlJlZ09mZnNldE1hc2spIC8vIFJGIGRhdGEgaXMgMTIgYml0cyBvbmx5CiAJCXsKQEAgLTYxNCwxMCArNTM5LDcgQEAKIAkJfQogCQllbHNlCiAJCQlwaHlfU2V0VXNiUkZSZWcoZGV2LCBlUkZQYXRoLCBSZWdBZGRyLCBEYXRhKTsKLQkvL1BsYXRmb3JtUmVsZWFzZVNwaW5Mb2NrKGRldiwgUlRfUkZfT1BFUkFURV9TUElOTE9DSyk7Ci0JLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9sb2NrLCBmbGFncyk7ICAgLy9ZSix0ZXN0LDA5MDExMwogCXVwKCZwcml2LT5yZl9zZW0pOwotCS8vUlRQUklOVChGUEhZLCBQSFlfUkZXLCAoIlJGVy0lZCBNQVNLPTB4JXggQWRkclsweCV4XT0weCV4XG4iLCBlUkZQYXRoLCBCaXRNYXNrLCBSZWdBZGRyLCBEYXRhKSk7CiAJUlRfVFJBQ0UoQ09NUF9SRiwgIjwtLS1QSFlfU2V0UkZSZWcoKTogUmVnQWRkciglI3gpLCBCaXRNYXNrKCUjeCksIERhdGEoJSN4KSwgZVJGUGF0aCglI3gpXG4iLAogCQkJUmVnQWRkciwgQml0TWFzaywgRGF0YSwgZVJGUGF0aCk7CiAKQEAgLTY5MSwyOSArNjEzLDkgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXBoeV9Jbml0QkJSRlJlZ2lzdGVyRGVmaW5pdGlvbihkZXYpOwogCi0JLy8KLQkvLyBDb25maWcgQkIgYW5kIEFHQwotCS8vCi0JLy9zd2l0Y2goIEFkYXB0ZXItPk1nbnRJbmZvLmJSZWdId1BhcmFGaWxlICkKLQkvL3sKLQkvLwljYXNlIDA6Ci0JLy8JCXBoeV9CQjgxOTBfQ29uZmlnX0hhcmRDb2RlKGRldik7Ci0JLy8JCWJyZWFrOwogCi0JLy8JY2FzZSAxOgogCQkJcnRTdGF0dXMgPSBwaHlfQkI4MTkyU19Db25maWdfUGFyYUZpbGUoZGV2KTsKLQkvLwkJYnJlYWs7CiAKLQkvLwljYXNlIDI6Ci0JCQkvLyBQYXJ0aWFsIE1vZGlmeS4KLQkvLwkJcGh5X0JCODE5MF9Db25maWdfSGFyZENvZGUoZGV2KTsKLQkvLwkJcGh5X0JCODE5MlNfQ29uZmlnX1BhcmFGaWxlKGRldik7Ci0JLy8JCWJyZWFrOwotCi0JLy8JZGVmYXVsdDoKLQkvLwkJcGh5X0JCODE5MF9Db25maWdfSGFyZENvZGUoZGV2KTsKLQkvLwkJYnJlYWs7Ci0JLy99CiAJUGF0aE1hcCA9ICh1OCkocnRsODE5Ml9RdWVyeUJCUmVnKGRldiwgckZQR0EwX1R4SW5mbywgMHhmKSB8CiAJCQkJcnRsODE5Ml9RdWVyeUJCUmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZikpOwogCXByaXYtPnJmX3BhdGhtYXAgPSBQYXRoTWFwOwpAQCAtNzc0LDE1ICs2NzYsMTAgQEAKIH0KIAogCi0vLyBKb3NlcGggdGVzdDogbmV3IGluaXRpYWxpemUgb3JkZXIhIQotLy8gVGVzdCBvbmx5ISEgVGhpcyBwYXJ0IG5lZWQgdG8gYmUgcmUtb3JnYW5pemVkLgotLy8gTm93IGl0IGlzIGp1c3QgZm9yIDgyNTYuCi0vL3VzZSBpbiBwaHkgb25seQogI2lmZGVmIFRPX0RPX0xJU1QKIHN0YXRpYyBSVF9TVEFUVVMKIHBoeV9CQjgxOTBfQ29uZmlnX0hhcmRDb2RlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpCiB7Ci0JLy9SVF9BU1NFUlQoRkFMU0UsICgiVGhpcyBmdW5jdGlvbiBpcyBub3QgaW1wbGVtZW50IHlldCEhIFxuIikpOwogCXJldHVybiBSVF9TVEFUVVNfU1VDQ0VTUzsKIH0KICNlbmRpZgpAQCAtODExLDcgKzcwOCw2IEBACiAJdTMyKiAJCQlSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlOwogCXUxNgkJCQlQSFlfUkVHQXJyYXl0b1hUWFJMZW47CiAKLS8vI2lmIChIQUxfQ09ERV9CQVNFICE9IFJUTDgxOTJfUykKIAogCWlmKHByaXYtPnJmX3R5cGUgPT0gUkZfMVQxUikKIAl7CkBAIC04MjMsMTEgKzcxOSw2IEBACiAJCVJ0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGUgPSBSdGw4MTlYUEhZX1JFR190bzFUMlJfQXJyYXk7CiAJCVBIWV9SRUdBcnJheXRvWFRYUkxlbiA9IFBIWV9DaGFuZ2VUb18xVDJSQXJyYXlMZW5ndGg7CiAJfQotCS8vZWxzZSBpZihwcml2LT5yZl90eXBlID09IFJGXzJUMlIgfHwgcHJpdi0+cmZfdHlwZSA9PSBSRl8yVDJSX0dSRUVOKQotCS8vewotCS8vCVJ0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGUgPSBSdGw4MTlYUEhZX1JFR190bzJUMlJfQXJyYXk7Ci0JLy8JUEhZX1JFR0FycmF5dG9YVFhSTGVuID0gUEhZX0NoYW5nZVRvXzJUMlJBcnJheUxlbmd0aDsKLQkvL30KIAllbHNlCiAJewogCQlyZXR1cm4gUlRfU1RBVFVTX0ZBSUxVUkU7CkBAIC04NTAsMTUgKzc0MSwxMSBAQAogCQkJZWxzZSBpZiAoUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVtpXSA9PSAweGY5KQogCQkJCXVkZWxheSgxKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlW2ldLCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlW2krMV0sIFJ0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGVbaSsyXSk7Ci0JCQkvL1JUX1RSQUNFKENPTVBfU0VORCwKLQkJCS8vIlRoZSBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlWzBdIGlzICVseCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlWzFdIGlzICVseCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlWzJdIGlzICVseCBcbiIsCi0JCQkvL1J0bDgxOVhQSFlfUkVHQXJyYXl0b1hUWFJfVGFibGVbaV0sUnRsODE5WFBIWV9SRUdBcnJheXRvWFRYUl9UYWJsZVtpKzFdLCBSdGw4MTlYUEhZX1JFR0FycmF5dG9YVFhSX1RhYmxlW2krMl0pOwogCQl9CiAJfQogCWVsc2UgewogCQlSVF9UUkFDRShDT01QX1NFTkQsICJwaHlfU2V0QkJ0b0RpZmZSRldpdGhIZWFkZXJGaWxlKCk6IENvbmZpZ1R5cGUgIT0gQmFzZUJhbmRfQ29uZmlnX1BIWV9SRUdcbiIpOwogCX0KLS8vI2VuZGlmCS8vICNpZiAoSEFMX0NPREVfQkFTRSAhPSBSVEw4MTkyX1MpCiAJcmV0dXJuIFJUX1NUQVRVU19TVUNDRVNTOwogfQogCkBAIC04NjksMTQgKzc1Niw2IEBACiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlSVF9TVEFUVVMJCQlydFN0YXR1cyA9IFJUX1NUQVRVU19TVUNDRVNTOwotCS8vdTgJCQkJdTJSZWdWYWx1ZTsKLQkvL3UxNgkJCQl1NFJlZ1ZhbHVlOwotCS8vY2hhcgkJCQlzekJCUmVnRmlsZVtdID0gUlRMODE5WF9QSFlfUkVHOwotCS8vY2hhcgkJCQlzekJCUmVnRmlsZTFUMlJbXSA9IFJUTDgxOVhfUEhZX1JFR18xVDJSOwotCS8vY2hhcgkJCQlzekJCUmVnUGdGaWxlW10gPSBSVEw4MTlYX1BIWV9SRUdfUEc7Ci0JLy9jaGFyCQkJCXN6QUdDVGFibGVGaWxlW10gPSBSVEw4MTlYX0FHQ19UQUI7Ci0JLy9jaGFyCQkJCXN6QkJSZWd0bzFUMVJGaWxlW10gPSBSVEw4MTlYX1BIWV9SRUdfdG8xVDFSOwotCS8vY2hhcgkJCQlzekJCUmVndG8xVDJSRmlsZVtdID0gUlRMODE5WF9QSFlfUkVHX3RvMVQyUjsKIAogCVJUX1RSQUNFKENPTVBfSU5JVCwgIj09PnBoeV9CQjgxOTJTX0NvbmZpZ19QYXJhRmlsZVxuIik7CiAKQEAgLTk1Niw0MiArODM1LDE2IEBACiAJdTMyCQkJCQlpID0gMDsKIAl1MzIJCQkJCUFycmF5TGVuZ3RoID0gMDsKIAl1MzIqCQkJCQlwdHJBcnJheTsKLQkvL3N0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKLS8vI2lmIChIQUxfQ09ERV9CQVNFICE9IFJUTDgxOTJfUykKLQkvKmlmKEFkYXB0ZXItPmJJbkhjdFRlc3QpCi0JewotCQlSVF9UUkFDRShDT01QX0lOSVQsIERCR19MT1VELCAoIlJ0bDgxOVhNQUNQSFlfQXJyYXlEVE1cbiIpKTsKLQkJQXJyYXlMZW5ndGggPSBNQUNQSFlfQXJyYXlMZW5ndGhEVE07Ci0JCXB0ckFycmF5ID0gUnRsODE5WE1BQ1BIWV9BcnJheURUTTsKLQl9Ci0JZWxzZSBpZihwSGFsRGF0YS0+YlRYUG93ZXJEYXRhUmVhZEZyb21FRVBPUk0pCi0JewotLy8JCVJUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiUnRsODE5WE1BQ1BIWV9BcnJheV9QR1xuIikpOwotLy8JCUFycmF5TGVuZ3RoID0gTUFDUEhZX0FycmF5X1BHTGVuZ3RoOwotLy8JCXB0ckFycmF5ID0gUnRsODE5WE1BQ1BIWV9BcnJheV9QRzsKLQotCX1lbHNlKi8KIAl7IC8vMjAwOC4xMS4wNiBNb2RpZmllZCBieSB0eW5saS4KIAkJUlRfVFJBQ0UoQ09NUF9JTklULCAiUmVhZCBSdGw4MTlYTUFDUEhZX0FycmF5XG4iKTsKIAkJQXJyYXlMZW5ndGggPSBNQUNfMlRfQXJyYXlMZW5ndGg7CiAJCXB0ckFycmF5ID0gUnRsODE5WE1BQ19BcnJheTsKIAl9CiAKLQkvKmZvcihpID0gMCA7aSA8IEFycmF5TGVuZ3RoO2k9aSszKXsKLQkJUlRfVFJBQ0UoQ09NUF9TRU5ELCBEQkdfTE9VRCwgKCJUaGUgUnRsODE5WE1BQ1BIWV9BcnJheVswXSBpcyAlbHggUnRsODE5WE1BQ1BIWV9BcnJheVsxXSBpcyAlbHggUnRsODE5WE1BQ1BIWV9BcnJheVsyXSBpcyAlbHhcbiIscHRyQXJyYXlbaV0sIHB0ckFycmF5W2krMV0sIHB0ckFycmF5W2krMl0pKTsKLQkJaWYocHRyQXJyYXlbaV0gPT0gMHgzMTgpCi0JCXsKLQkJCXB0ckFycmF5W2krMl0gPSAweDAwMDAwODAwOwotCQkJLy9EYmdQcmludCgicHRyQXJyYXlbaV0sIHB0ckFycmF5W2krMV0sIHB0ckFycmF5W2krMl0gPSAleCwgJXgsICV4XG4iLAotCQkJLy8JcHRyQXJyYXlbaV0sIHB0ckFycmF5W2krMV0sIHB0ckFycmF5W2krMl0pOwotCQl9Ci0JCVBIWV9TZXRCQlJlZyhBZGFwdGVyLCBwdHJBcnJheVtpXSwgcHRyQXJyYXlbaSsxXSwgcHRyQXJyYXlbaSsyXSk7Ci0JfSovCiAJZm9yKGkgPSAwIDtpIDwgQXJyYXlMZW5ndGg7aT1pKzIpeyAvLyBBZGQgYnkgdHlubGkgZm9yIDIgY29sdW1uCiAJCXdyaXRlX25pY19ieXRlKGRldiwgcHRyQXJyYXlbaV0sICh1OClwdHJBcnJheVtpKzFdKTsKIAl9Ci0vLyNlbmRpZgogCXJldHVybiBSVF9TVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtMTAxNSw0MSArODY4LDE0IEBACiBwaHlfQ29uZmlnQkJXaXRoSGVhZGVyRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LHU4IENvbmZpZ1R5cGUpCiB7CiAJaW50IAkJaTsKLQkvL3U4IAkJQXJyYXlMZW5ndGg7CiAJdTMyKglSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlOwogCXUzMioJUnRsODE5WEFHQ1RBQl9BcnJheV9UYWJsZTsKIAl1MTYJCVBIWV9SRUdBcnJheUxlbiwgQUdDVEFCX0FycmF5TGVuOwotCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotLy8jaWYgKEhBTF9DT0RFX0JBU0UgIT0gUlRMODE5Ml9TKQotCS8qaWYoQWRhcHRlci0+YkluSGN0VGVzdCkKLQl7CiAKLQkJQUdDVEFCX0FycmF5TGVuID0gQUdDVEFCX0FycmF5TGVuZ3RoRFRNOwotCQlSdGw4MTlYQUdDVEFCX0FycmF5X1RhYmxlID0gUnRsODE5WEFHQ1RBQl9BcnJheURUTTsKLQotCQlpZihwSGFsRGF0YS0+UkZfVHlwZSA9PSBSRl8yVDRSKQotCQl7Ci0JCQlQSFlfUkVHQXJyYXlMZW4gPSBQSFlfUkVHQXJyYXlMZW5ndGhEVE07Ci0JCQlSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlID0gUnRsODE5WFBIWV9SRUdBcnJheURUTTsKLQkJfQotCQllbHNlIGlmIChwSGFsRGF0YS0+UkZfVHlwZSA9PSBSRl8xVDJSKQotCQl7Ci0JCQlQSFlfUkVHQXJyYXlMZW4gPSBQSFlfUkVHXzFUMlJBcnJheUxlbmd0aERUTTsKLQkJCVJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGUgPSBSdGw4MTlYUEhZX1JFR18xVDJSQXJyYXlEVE07Ci0JCX0KLQotCX0KLQllbHNlCi0JKi8KLQkvL3sKLQkvLwotCS8vIDIwMDguMTEuMDYgTW9kaWZpZWQgYnkgdHlubGkuCi0JLy8KIAlBR0NUQUJfQXJyYXlMZW4gPSBBR0NUQUJfQXJyYXlMZW5ndGg7CiAJUnRsODE5WEFHQ1RBQl9BcnJheV9UYWJsZSA9IFJ0bDgxOVhBR0NUQUJfQXJyYXk7CiAJUEhZX1JFR0FycmF5TGVuID0gUEhZX1JFR18yVDJSQXJyYXlMZW5ndGg7IC8vIERlZmF1bHQgUkZfdHlwZTogMlQyUgogCVJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGUgPSBSdGw4MTlYUEhZX1JFR19BcnJheTsKLQkvL30KIAogCWlmKENvbmZpZ1R5cGUgPT0gQmFzZUJhbmRfQ29uZmlnX1BIWV9SRUcpCiAJewpAQCAtMTA2OCw3ICs4OTQsNiBAQAogCQkJZWxzZSBpZiAoUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZVtpXSA9PSAweGY5KQogCQkJCXVkZWxheSgxKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlW2ldLCBiTWFza0RXb3JkLCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlW2krMV0pOwotCQkJLy9SVF9UUkFDRShDT01QX1NFTkQsICJUaGUgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZVswXSBpcyAlbHggUnRsODE5WFBIWV9SRUdBcnJheVsxXSBpcyAlbHggXG4iLFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVbaV0sIFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVbaSsxXSk7CiAKIAkJfQogCX0KQEAgLTEwNzgsNyArOTAzLDYgQEAKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCBSdGw4MTlYQUdDVEFCX0FycmF5X1RhYmxlW2ldLCBiTWFza0RXb3JkLCBSdGw4MTlYQUdDVEFCX0FycmF5X1RhYmxlW2krMV0pOwogCQl9CiAJfQotLy8jZW5kaWYJLy8gI2lmIChIQUxfQ09ERV9CQVNFICE9IFJUTDgxOTJfUykKIAlyZXR1cm4gUlRfU1RBVFVTX1NVQ0NFU1M7CiB9CiAKQEAgLTExMDMsMTIgKzkyNyw4IEBACiBwaHlfQ29uZmlnQkJXaXRoUGdIZWFkZXJGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsdTggQ29uZmlnVHlwZSkKIHsKIAlpbnQgaTsKLQkvL3U4IEFycmF5TGVuZ3RoOwogCXUzMioJUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QRzsKIAl1MTYJUEhZX1JFR0FycmF5UEdMZW47Ci0JLy9zdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0vLyNpZiAoSEFMX0NPREVfQkFTRSAhPSBSVEw4MTkyX1MpCi0JLy8gRGVmYXVsdDogcEhhbERhdGEtPlJGX1R5cGUgPSBSRl8yVDJSLgogCiAJUEhZX1JFR0FycmF5UEdMZW4gPSBQSFlfUkVHX0FycmF5X1BHTGVuZ3RoOwogCVJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEcgPSBSdGw4MTlYUEhZX1JFR19BcnJheV9QRzsKQEAgLTExMzAsMTUgKzk1MCwxMyBAQAogCQkJZWxzZSBpZiAoUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1tpXSA9PSAweGY5KQogCQkJCXVkZWxheSgxKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHW2ldLCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHW2krMV0sIFJ0bDgxOVhQSFlfUkVHQXJyYXlfVGFibGVfUEdbaSsyXSk7Ci0JCQkvL1JUX1RSQUNFKENPTVBfU0VORCwgIlRoZSBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHWzBdIGlzICVseCBSdGw4MTlYUEhZX1JFR0FycmF5X1RhYmxlX1BHWzFdIGlzICVseCBcbiIsCi0JCQkvLwkJUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1tpXSwgUnRsODE5WFBIWV9SRUdBcnJheV9UYWJsZV9QR1tpKzFdKTsKIAkJfQogCX1lbHNlewogCQlSVF9UUkFDRShDT01QX1NFTkQsICJwaHlfQ29uZmlnQkJXaXRoUGdIZWFkZXJGaWxlKCk6IENvbmZpZ1R5cGUgIT0gQmFzZUJhbmRfQ29uZmlnX1BIWV9SRUdcbiIpOwogCX0KIAlyZXR1cm4gUlRfU1RBVFVTX1NVQ0NFU1M7CiAKLX0JLyogcGh5X0NvbmZpZ0JCV2l0aFBnSGVhZGVyRmlsZSAqLworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBGdW5jdGlvbjogICAgUEhZX0NvbmZpZ1JGV2l0aEhlYWRlckZpbGUoKQpAQCAtMTE1NSwxOSArOTczLDE0IEBACiAgKgogICogTm90ZToJCURlbGF5IG1heSBiZSByZXF1aXJlZCBmb3IgUkYgY29uZmlndXJhdGlvbgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy9pbiA4MjU2IHBoeV9SRjgyNTZfQ29uZmlnX1BhcmFGaWxlIG9ubHkKLS8vUlRfU1RBVFVTIFBIWV9Db25maWdSRldpdGhIZWFkZXJGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCkKIHU4IHJ0bDgxOTJfcGh5X0NvbmZpZ1JGV2l0aEhlYWRlckZpbGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgUkY5MF9SQURJT19QQVRIX0UJZVJGUGF0aCkKIHsKIAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQJCQlpOwotCS8vdTMyKglwUkZBcnJheTsKIAlSVF9TVEFUVVMJcnRTdGF0dXMgPSBSVF9TVEFUVVNfU1VDQ0VTUzsKIAl1MzIJCQkqUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZTsKIAl1MzIJCQkqUnRsODE5WFJhZGlvQl9BcnJheV9UYWJsZTsKLQkvL3UzMioJUnRsODE5WFJhZGlvQ19BcnJheV9UYWJsZTsKLQkvL3UzMioJUnRsODE5WFJhZGlvRF9BcnJheV9UYWJsZTsKIAl1MTYJCQlSYWRpb0FfQXJyYXlMZW4sUmFkaW9CX0FycmF5TGVuOwogCiAJewkvLzIwMDguMTEuMDYgTW9kaWZpZWQgYnkgdHlubGkKQEAgLTExOTAsMTggKzEwMDMsMTIgQEAKIAogCXJ0U3RhdHVzID0gUlRfU1RBVFVTX1NVQ0NFU1M7CiAKLQkvLyBXaGVuIGluaXRpYWxpemF0aW9uLCB3ZSB3YW50IHRoZSBkZWxheSBmdW5jdGlvbihtZGVsYXkoKSwgZGVsYXlfdXMoKQotCS8vID09PiBhY3R1YWxseSB3ZSBjYWxsIFBsYXRmb3JtU3RhbGxFeGVjdXRpb24oKSkgdG8gZG8gTmRpc1N0YWxsRXhlY3V0aW9uKCkKLQkvLyBbYnVzeSB3YWl0XSBpbnN0ZWFkIG9mIE5kaXNNU2xlZXAoKS4gU28gd2UgYWNxdWlyZSBSVF9JTklUSUFMX1NQSU5MT0NLCi0JLy8gdG8gcnVuIGF0IERpc3BhdGNoIGxldmVsIHRvIGFjaGl2ZSBpdC4KLQkvL2Nvc2EgUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfSU5JVElBTF9TUElOTE9DSyk7CiAKIAlzd2l0Y2goZVJGUGF0aCl7CiAJCWNhc2UgUkY5MF9QQVRIX0E6CiAJCQlmb3IoaSA9IDA7aTxSYWRpb0FfQXJyYXlMZW47IGk9aSsyKXsKIAkJCQlpZihSdGw4MTlYUmFkaW9BX0FycmF5X1RhYmxlW2ldID09IDB4ZmUpCiAJCQkJCXsgLy8gRGVheSBzcGVjaWZpYyBtcy4gT25seSBSRiBjb25maWd1cmF0aW9uIHJlcXVpcmUgZGVsYXkuCi0vLyNpZiAoREVWX0JVU19UWVBFID09IFVTQl9JTlRFUkZBQ0UpCiAJCQkJCQltZGVsYXkoMTAwMCk7CiAJCQkJfQogCQkJCQllbHNlIGlmIChSdGw4MTlYUmFkaW9BX0FycmF5X1RhYmxlW2ldID09IDB4ZmQpCkBAIC0xMjEwLDcgKzEwMTcsNiBAQAogCQkJCQkJbWRlbGF5KDEpOwogCQkJCQllbHNlIGlmIChSdGw4MTlYUmFkaW9BX0FycmF5X1RhYmxlW2ldID09IDB4ZmIpCiAJCQkJCQl1ZGVsYXkoNTApOwotCQkJCQkJLy9QbGF0Zm9ybVN0YWxsRXhlY3V0aW9uKDUwKTsKIAkJCQkJZWxzZSBpZiAoUnRsODE5WFJhZGlvQV9BcnJheV9UYWJsZVtpXSA9PSAweGZhKQogCQkJCQkJdWRlbGF5KDUpOwogCQkJCQllbHNlIGlmIChSdGw4MTlYUmFkaW9BX0FycmF5X1RhYmxlW2ldID09IDB4ZjkpCkBAIC0xMjI1LDcgKzEwMzEsNiBAQAogCQkJZm9yKGkgPSAwO2k8UmFkaW9CX0FycmF5TGVuOyBpPWkrMil7CiAJCQkJaWYoUnRsODE5WFJhZGlvQl9BcnJheV9UYWJsZVtpXSA9PSAweGZlKQogCQkJCQl7IC8vIERlYXkgc3BlY2lmaWMgbXMuIE9ubHkgUkYgY29uZmlndXJhdGlvbiByZXF1aXJlIGRlbGF5LgotLy8jaWYgKERFVl9CVVNfVFlQRSA9PSBVU0JfSU5URVJGQUNFKQogCQkJCQkJbWRlbGF5KDEwMDApOwogCQkJCX0KIAkJCQkJZWxzZSBpZiAoUnRsODE5WFJhZGlvQl9BcnJheV9UYWJsZVtpXSA9PSAweGZkKQpAQCAtMTI4MSw3ICsxMDg2LDYgQEAKIAlSRjkwX1JBRElPX1BBVEhfRQllUkZQYXRoCiAJKQogewotCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCVJUX1NUQVRVUwkJCXJ0U3RhdHVzID0gUlRfU1RBVFVTX1NVQ0NFU1M7CiAJdTMyCQkJCWksIENoZWNrVGltZXMgPSA0LHVsUmVnUmVhZCA9IDA7CiAJdTMyCQkJCVdyaXRlQWRkcls0XTsKQEAgLTEzMDIsNyArMTEwNiw2IEBACiAJCXN3aXRjaChDaGVja0Jsb2NrKQogCQl7CiAJCWNhc2UgSFc5MF9CTE9DS19NQUM6Ci0JCQkvL1JUX0FTU0VSVChGQUxTRSwgKCJQSFlfQ2hlY2tCQlJGT0soKTogTmV2ZXIgV3JpdGUgMHgxMDAgaGVyZSEiKSk7CiAJCQlSVF9UUkFDRShDT01QX0lOSVQsICJQSFlfQ2hlY2tCQlJGT0soKTogTmV2ZXIgV3JpdGUgMHgxMDAgaGVyZSFcbiIpOwogCQkJYnJlYWs7CiAKQEAgLTEzMTMsMTggKzExMTYsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFc5MF9CTE9DS19SRjoKLQkJCS8vIFdoZW4gaW5pdGlhbGl6YXRpb24sIHdlIHdhbnQgdGhlIGRlbGF5IGZ1bmN0aW9uKG1kZWxheSgpLCBkZWxheV91cygpCi0JCQkvLyA9PT4gYWN0dWFsbHkgd2UgY2FsbCBQbGF0Zm9ybVN0YWxsRXhlY3V0aW9uKCkpIHRvIGRvIE5kaXNTdGFsbEV4ZWN1dGlvbigpCi0JCQkvLyBbYnVzeSB3YWl0XSBpbnN0ZWFkIG9mIE5kaXNNU2xlZXAoKS4gU28gd2UgYWNxdWlyZSBSVF9JTklUSUFMX1NQSU5MT0NLCi0JCQkvLyB0byBydW4gYXQgRGlzcGF0Y2ggbGV2ZWwgdG8gYWNoaXZlIGl0LgotCQkJLy9jb3NhIFBsYXRmb3JtQWNxdWlyZVNwaW5Mb2NrKGRldiwgUlRfSU5JVElBTF9TUElOTE9DSyk7CiAJCQlXcml0ZURhdGFbaV0gJj0gMHhmZmY7CiAJCQlydGw4MTkyX3BoeV9TZXRSRlJlZyhkZXYsIGVSRlBhdGgsIFdyaXRlQWRkcltIVzkwX0JMT0NLX1JGXSwgYlJGUmVnT2Zmc2V0TWFzaywgV3JpdGVEYXRhW2ldKTsKIAkJCS8vIFRPRE86IHdlIHNob3VsZCBub3QgZGVsYXkgZm9yIHN1Y2ggYSBsb25nIHRpbWUuIEFzayBTRDMKIAkJCW1kZWxheSgxMCk7CiAJCQl1bFJlZ1JlYWQgPSBydGw4MTkyX3BoeV9RdWVyeVJGUmVnKGRldiwgZVJGUGF0aCwgV3JpdGVBZGRyW0hXOTBfQkxPQ0tfUkZdLCBiTWFza0RXb3JkKTsKIAkJCW1kZWxheSgxMCk7Ci0JCQkvL2Nvc2EgUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soZGV2LCBSVF9JTklUSUFMX1NQSU5MT0NLKTsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xMzM4LDcgKzExMzUsNiBAQAogCQkvLwogCQlpZih1bFJlZ1JlYWQgIT0gV3JpdGVEYXRhW2ldKQogCQl7Ci0JCQkvL1JUX1RSQUNFKENPTVBfRlBHQSwgICgidWxSZWdSZWFkOiAleCwgV3JpdGVEYXRhOiAleCBcbiIsIHVsUmVnUmVhZCwgV3JpdGVEYXRhW2ldKSk7CiAJCQlSVF9UUkFDRShDT01QX0VSUiwgInJlYWQgYmFjayBlcnJvcihyZWFkOiV4LCB3cml0ZToleClcbiIsIHVsUmVnUmVhZCwgV3JpdGVEYXRhW2ldKTsKIAkJCXJ0U3RhdHVzID0gUlRfU1RBVFVTX0ZBSUxVUkU7CiAJCQlicmVhazsKQEAgLTEzNDgsNyArMTE0NCw2IEBACiAJcmV0dXJuIHJ0U3RhdHVzOwogfQogCi0vL25vIHVzZSB0ZW1wIGluIHdpbmRvd3MgZHJpdmVyCiAjaWZkZWYgVE9fRE9fTElTVAogdm9pZAogUEhZX1NldFJGUG93ZXJTdGF0ZTgxOTJTVXNiKApAQCAtMTM1OSw3ICsxMTU0LDYgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJYm9vbAkJCVdhaXRTaHV0RG93biA9IEZBTFNFOwogCXUzMgkJCURXb3JkQ29udGVudDsKLQkvL1JGOTBfUkFESU9fUEFUSF9FCWVSRlBhdGg7CiAJdTgJCQkJZVJGUGF0aDsKIAlCQl9SRUdJU1RFUl9ERUZJTklUSU9OX1QJKnBQaHlSZWc7CiAKQEAgLTEzNjgsNyArMTE2Miw2IEBACiAKIAlwcml2LT5TZXRSRlBvd2VyU3RhdGVJblByb2dyZXNzID0gVFJVRTsKIAotCS8vIFRPRE86IEVtaWx5LCAyMDA2LjExLjIxLCB3ZSBzaG91bGQgcmV3cml0ZSB0aGlzIGZ1bmN0aW9uCiAKIAlpZihSRlBvd2VyU3RhdGU9PVJGX1NIVVRfRE9XTikKIAl7CkBAIC0xNDIwLDIyICsxMjEzLDIwIEBACiAKIAljYXNlIFJGXzgyNTg6CiAJCWJyZWFrOwotCX0vLyBzd2l0Y2goIHByaXYtPnJmX2NoaXAgKQorCX0KIAogCXByaXYtPlNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSBGQUxTRTsKIH0KICNlbmRpZgogCiAjaWZkZWYgUlRMODE5MlUKLS8vbm8gdXNlIHRlbXAgaW4gd2luZG93cyBkcml2ZXIKIHZvaWQKIFBIWV9VcGRhdGVJbml0aWFsR2FpbigKIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2CiAJKQogewogCXN0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91bnNpZ25lZCBjaGFyCQkJKklHVGFibGU7Ci0JLy91OAkJCURJR19DdXJyZW50SW5pdGlhbEdhaW4gPSA0OworCiAKIAlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKIAl7CkBAIC0xNDU2LDcgKzEyNDcsNiBAQAogfQogI2VuZGlmCiAKLS8vWUosbW9kaWZpZWQsMDkwMTA3CiB2b2lkIFBIWV9HZXRIV1JlZ09yaWdpbmFsVmFsdWUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xNjI1LDggKzE0MTUsNiBAQAogCS8vIFRyYW5jZWl2ZXIgTFNTSSBSZWFkYmFjayBQSSBtb2RlCiAJcHJpdi0+UEhZUmVnRGVmW1JGOTBfUEFUSF9BXS5yZkxTU0lSZWFkQmFja1BpID0gVHJhbnNjZWl2ZXJBX0hTUElfUmVhZGJhY2s7CiAJcHJpdi0+UEhZUmVnRGVmW1JGOTBfUEFUSF9CXS5yZkxTU0lSZWFkQmFja1BpID0gVHJhbnNjZWl2ZXJCX0hTUElfUmVhZGJhY2s7Ci0JLy9wSGFsRGF0YS0+UEhZUmVnRGVmW1JGOTBfUEFUSF9DXS5yZkxTU0lSZWFkQmFja1BpID0gckZQR0EwX1hDX0xTU0lSZWFkQmFjazsKLQkvL3BIYWxEYXRhLT5QSFlSZWdEZWZbUkY5MF9QQVRIX0RdLnJmTFNTSVJlYWRCYWNrUGkgPSByRlBHQTBfWERfTFNTSVJlYWRCYWNrOwogCiB9CiAKQEAgLTE2MzcsOSArMTQyNSw3IEBACiAvLwlBc3N1bXB0aW9uOiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZXhlY3V0ZWQgaW4gcmUtc2NoZHVsYWJsZSBjb250ZXh0LAogLy8JCWllLiBQQVNTSVZFX0xFVkVMLgogLy8KLS8vCTA1MDgyMywgYnkgcmNuamtvLgotLy9ub3QgdW5kZXJzdGFuZCBpdCBzZWVtJ3MgdXNlIGluIGluaXQKLS8vU2V0SHdSZWc4MTkyU1VzYi0tLT5IYWxGdW5jLlNldEh3UmVnSGFuZGxlcgorCiBib29sIFBIWV9TZXRSRlBvd2VyU3RhdGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgUlRfUkZfUE9XRVJfU1RBVEUgZVJGUG93ZXJTdGF0ZSkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xNjY1LDggKzE0NTEsNiBAQAogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlib29sCQkJYlJlc3VsdCA9IFRSVUU7Ci0JLy91OAkJZVJGUGF0aDsKLQkvL3U4CQlpLCBRdWV1ZUlEOwogCXU4IAkJdTFiVG1wOwogCiAJaWYocHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9PSBUUlVFKQpAQCAtMTY5Nyw5ICsxNDgxLDYgQEAKIAkJCQkJCWJyZWFrOwogCQkJCS8vCiAJCQkJLy9SRiBPZmYvU2xlZXAgc2VxdWVuY2UuIERlc2lnbmVkL3Rlc3RlZCBmcm9tIFNENCBTY290dCwgU0QxIEdyZW50IGFuZCBKb25ib24uCi0JCQkJLy8gQWRkZWQgYnkgQnJ1Y2UsIDIwMDgtMTEtMjIuCi0JCQkJLy8KLQkJCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkJCS8vICgwKSBEaXNhYmxlIEZXIEJCIHJlc2V0IGNoZWNraW5nCiAJCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfQkJfUkVTRVRfRElTQUJMRSk7CiAKQEAgLTE3MjgsNyArMTUwOSw2IEBACiAKIAkJCWRlZmF1bHQ6CiAJCQkJYlJlc3VsdCA9IEZBTFNFOwotCQkJCS8vUlRfQVNTRVJUKEZBTFNFLCAoInBoeV9TZXRSRlBvd2VyU3RhdGU4MTkyU1UoKTogdW5rbm93biBzdGF0ZSB0byBzZXQ6IDB4JVghISFcbiIsIGVSRlBvd2VyU3RhdGUpKTsKIAkJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTE4NjAsNyArMTY0MCw2IEBACiAgdm9pZCBQSFlfU2V0VHhQb3dlckxldmVsODE5MlMoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTgJY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy9IQUxfREFUQV9UWVBFCQkqcEhhbERhdGEgPSBHRVRfSEFMX0RBVEEoZGV2KTsKIAl1OAlwb3dlcmxldmVsID0gKHU4KUVFUFJPTV9EZWZhdWx0X1R4UG93ZXIsIHBvd2VybGV2ZWxPRkRNMjRHID0gMHgxMDsKIAlzOCAJYW50X3B3cl9kaWZmID0gMDsKIAl1MzIJdTRSZWdWYWx1ZTsKQEAgLTE5MDksMTQgKzE2ODgsNiBAQAogCQkJLy8gUkYgQiBIVCBPRkRNIHB3ci1SRkEgSFQgT0ZETSBwd3IKIAkJYW50X3B3cl9kaWZmID0gCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFsxXVtpbmRleF0gLQogCQkJCQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUWzBdW2luZGV4XTsKLQkJCS8vIFJGIEIgKEhUIE9GRE0gcHdyK2xlZ2FjeS1odC1kaWZmKSAtKFJGQSBIVCBPRkRNIHB3citsZWdhY3ktaHQtZGlmZikKLQkJLy8gV2UgY2FuIG5vdCBoYW5kbGUgUGF0aCBCJkEgSFQvTGVnYWN5IHB3ciBkaWZmIGZvciA5MlMgbm93LgotCi0JCS8vUlRQUklOVChGUEhZLCBQSFlfVFhQV1IsICgiQ0gtJWQgSFQ0MCBBL0IgUHdyIGluZGV4ID0gJXgvJXgoJWQvJWQpXG4iLAotCQkvL2NoYW5uZWwsIHByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFswXVtpbmRleF0sCi0JCS8vcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUWzFdW2luZGV4XSwKLQkJLy9wcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbMF1baW5kZXhdLAotCQkvL3ByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFsxXVtpbmRleF0pKTsKIAogCQlodDIwcHdyWzBdID0gaHQ0MHB3clswXSA9IHByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFswXVtpbmRleF07CiAJCWh0MjBwd3JbMV0gPSBodDQwcHdyWzFdID0gcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUWzFdW2luZGV4XTsKQEAgLTE5NDksMTAgKzE3MjAsNiBAQAogCQkJLy8gUkYgQiBIVCBPRkRNIHB3ci1SRkEgSFQgT0ZETSBwd3IKIAkJCWlmIChwcml2LT5yZl90eXBlID09IFJGXzJUMlIpCiAJCQkJYW50X3B3cl9kaWZmID0gaHQyMHB3clsxXSAtIGh0MjBwd3JbMF07Ci0KLQkJCS8vUlRQUklOVChGUEhZLCBQSFlfVFhQV1IsCi0JCQkvLygiSFQyMCB0byBIVDQwIHB3cmRpZmZbQS9CXT0lZC8lZCwgYW50X3B3cl9kaWZmPSVkKEItQT0lZC0lZClcbiIsCi0JCQkvL3B3cmRpZmZbMF0sIHB3cmRpZmZbMV0sIGFudF9wd3JfZGlmZiwgaHQyMHB3clsxXSwgaHQyMHB3clswXSkpOwogCQl9CiAKIAkJLy8gQmFuZCBFZGdlIHNjaGVtZSBpcyBlbmFibGVkIGZvciBGQ0MgbW9kZQpAQCAtMTk5NywxOCArMTc2NCwxMiBAQAogCQkJewogCQkJCWlmIChjaGFubmVsIDw9IDEgfHwgY2hhbm5lbCA+PSAxMSkKIAkJCQl7Ci0JCQkJCS8vUlRQUklOVChGUEhZLCBQSFlfVFhQV1IsCi0JCQkJCS8vKCJIVDIwIEJhbmQtZWRnZSBwd3JkaWZmW0EvQl09JWQvJWQsIGFudF9wd3JfZGlmZj0lZChCLUE9JWQtJWQpXG4iLAotCQkJCQkvL3B3cmRpZmZbMF0sIHB3cmRpZmZbMV0sIGFudF9wd3JfZGlmZiwgaHQyMHB3clsxXSwgaHQyMHB3clswXSkpOwogCQkJCX0KIAkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCQlpZiAoY2hhbm5lbCA8PSAzIHx8IGNoYW5uZWwgPj0gOSkKIAkJCQl7Ci0JCQkJCS8vUlRQUklOVChGUEhZLCBQSFlfVFhQV1IsCi0JCQkJCS8vKCJIVDQwIEJhbmQtZWRnZSBwd3JkaWZmW0EvQl09JWQvJWQsIGFudF9wd3JfZGlmZj0lZChCLUE9JWQtJWQpXG4iLAotCQkJCQkvL3B3cmRpZmZbMF0sIHB3cmRpZmZbMV0sIGFudF9wd3JfZGlmZiwgaHQ0MHB3clsxXSwgaHQ0MHB3clswXSkpOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtMjAyMSwxMCArMTc4Miw2IEBACiAJaWYoYW50X3B3cl9kaWZmIDwgLTgpCiAJCWFudF9wd3JfZGlmZiA9IC04OwogCi0JCS8vUlRQUklOVChGUEhZLCBQSFlfVFhQV1IsCi0JCS8vKCJDQ0svSFQgUG93ZXIgaW5kZXggPSAleC8leCglZC8lZCksIGFudF9wd3JfZGlmZj0lZFxuIiwKLQkJLy9wb3dlcmxldmVsLCBwb3dlcmxldmVsT0ZETTI0RywgcG93ZXJsZXZlbCwgcG93ZXJsZXZlbE9GRE0yNEcsIGFudF9wd3JfZGlmZikpOwotCiAJCWFudF9wd3JfZGlmZiAmPSAweGY7CiAKIAkJLy8gQW50ZW5uYSBUWCBwb3dlciBkaWZmZXJlbmNlCkBAIC0yMDUwLDcgKzE4MDcsNiBAQAogCS8vIFRPRE86CiAJLy8gMS4gODAyLjExaCBwb3dlciBjb250cmFpbnQKIAkvLwotCS8vIDA3MTAxMSwgYnkgcmNuamtvLgogCS8vCiAjaWZkZWYgVE9ETyAvL1dCLCAxMWggaGFzIG5vdCBpbXBsZW1lbnRlZCBub3cuCiAJaWYoCXByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBICYmIHByaXYtPmJXaXRoQ2N4Q2VsbFB3ciAmJgpAQCAtMjA5NSw4ICsxODUxLDYgQEAKIAlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKIAl7CiAJCWNhc2UgUkZfODIyNToKLQkJCS8vUEhZX1NldFJGODIyNUNja1R4UG93ZXIoZGV2LCBwb3dlcmxldmVsKTsKLQkJCS8vUEhZX1NldFJGODIyNU9mZG1UeFBvd2VyKGRldiwgcG93ZXJsZXZlbE9GRE0yNEcpOwogCQlicmVhazsKIAogCQljYXNlIFJGXzgyNTY6CkBAIC0yMTIxLDggKzE4NzUsNiBAQAogLy8KIC8vCVRPRE86CiAvLwkJQSBtb2RlLgotLy8JQnkgQnJ1Y2UsIDIwMDgtMDItMDQuCi0vLyAgICBubyB1c2UgdGVtcAogYm9vbCBQSFlfVXBkYXRlVHhQb3dlckRibTgxOTJTKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIGxvbmcgcG93ZXJJbkRibSkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMjE2NCw4ICsxOTE2LDYgQEAKIAlEZXNjcmlwdGlvbjoKIAkJV2hlbiBiZWFjb24gaW50ZXJ2YWwgaXMgY2hhbmdlZCwgdGhlIHZhbHVlcyBvZiB0aGUKIAkJaHcgcmVnaXN0ZXJzIHNob3VsZCBiZSBtb2RpZmllZC4KLQlCeSB0eW5saSwgMjAwOC4xMC4yNC4KLQogKi8KIAogZXh0ZXJuIHZvaWQgUEhZX1NldEJlYWNvbkh3UmVnKAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MTYgQmVhY29uSW50ZXJ2YWwpCkBAIC0yMTczLDggKzE5MjMsNiBAQAogCXUzMiBOZXdCZWFjb25OdW07CiAKIAlOZXdCZWFjb25OdW0gPSBCZWFjb25JbnRlcnZhbCAqMzIgLSA2NDsKLQkvL1BsYXRmb3JtRUZJT1dyaXRlNEJ5dGUoQWRhcHRlciwgV0ZNMys0LCBOZXdCZWFjb25OdW0pOwotCS8vUGxhdGZvcm1FRklPV3JpdGU0Qnl0ZShBZGFwdGVyLCBXRk0zLCAweEIwMjYwMDdDKTsKIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk0zKzQsIE5ld0JlYWNvbk51bSk7CiAJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNMywgMHhCMDI2MDA3Qyk7CiB9CkBAIC0yMTg0LDcgKzE5MzIsNiBAQAogLy8JCU1hcCBkQm0gaW50byBUeCBwb3dlciBpbmRleCBhY2NvcmRpbmcgdG8KIC8vCQljdXJyZW50IEhXIG1vZGVsLCBmb3IgZXhhbXBsZSwgUkYgYW5kIFBBLCBhbmQKIC8vCQljdXJyZW50IHdpcmVsZXNzIG1vZGUuCi0vLwlCeSBCcnVjZSwgMjAwOC0wMS0yOS4KIC8vICAgIHVzZSBpbiBwaHkgb25seQogc3RhdGljIHU4IHBoeV9EYm1Ub1R4UHdySWR4KAogCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCkBAIC0yMTkyLDcgKzE5MzksNiBAQAogCWxvbmcJCQlQb3dlckluRGJtCiAJKQogewotCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXU4CQkJCVR4UHdySWR4ID0gMDsKIAlsb25nCQkJCU9mZnNldCA9IDA7CiAKQEAgLTIyMDIsNyArMTk0OCw2IEBACiAJLy8gM2RibSwgYW5kIE9GRE0gSFQgZXF1YWxzIHRvIDBkYm0gcmVwZWN0aXZlbHkuCiAJLy8gTm90ZToKIAkvLwlUaGUgbWFwcGluZyBtYXkgYmUgZGlmZmVyZW50IGJ5IGRpZmZlcmVudCBOSUNzLiBEbyBub3QgdXNlIHRoaXMgZm9ybXVsYSBmb3Igd2hhdCBuZWVkcyBhY2N1cmF0ZSByZXN1bHQuCi0JLy8gQnkgQnJ1Y2UsIDIwMDgtMDEtMjkuCiAJLy8KIAlzd2l0Y2goV2lyZWxlc3NNb2RlKQogCXsKQEAgLTIyMzgsNyArMTk4Myw2IEBACiAvLwkJTWFwIFR4IHBvd2VyIGluZGV4IGludG8gZEJtIGFjY29yZGluZyB0bwogLy8JCWN1cnJlbnQgSFcgbW9kZWwsIGZvciBleGFtcGxlLCBSRiBhbmQgUEEsIGFuZAogLy8JCWN1cnJlbnQgd2lyZWxlc3MgbW9kZS4KLS8vCUJ5IEJydWNlLCAyMDA4LTAxLTI5LgogLy8gICAgdXNlIGluIHBoeSBvbmx5CiBzdGF0aWMgbG9uZyBwaHlfVHhQd3JJZHhUb0RibSgKIAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2LApAQCAtMjI1NSw3ICsxOTk5LDYgQEAKIAkvLyAzZGJtLCBhbmQgT0ZETSBIVCBlcXVhbHMgdG8gMGRibSByZXBlY3RpdmVseS4KIAkvLyBOb3RlOgogCS8vCVRoZSBtYXBwaW5nIG1heSBiZSBkaWZmZXJlbnQgYnkgZGlmZmVyZW50IE5JQ3MuIERvIG5vdCB1c2UgdGhpcyBmb3JtdWxhIGZvciB3aGF0IG5lZWRzIGFjY3VyYXRlIHJlc3VsdC4KLQkvLyBCeSBCcnVjZSwgMjAwOC0wMS0yOS4KIAkvLwogCXN3aXRjaChXaXJlbGVzc01vZGUpCiAJewpAQCAtMjMyNyw5ICsyMDcwLDYgQEAKIHZvaWQgUEhZX0luaXRpYWxHYWluODE5MlMoc3RydWN0IG5ldF9kZXZpY2UqIGRldix1OCBPcGVyYXRpb24JKQogewogCi0JLy9zdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91MzIJCQkJCUJpdE1hc2s7Ci0JLy91OAkJCQkJaW5pdGlhbF9nYWluOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzUzLDExICsyMDkzLDYgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdTgJIAkJCXJlZ0J3T3BNb2RlOwogCi0JLy9yZXR1cm47Ci0KLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL3UzMgkJCQlOb3dMLCBOb3dIOwotCS8vdThCeXRlCQkJCUJlZ2luVGltZSwgRW5kVGltZTsKIAl1OAkJCQlyZWdSUlNSX1JTQzsKIAogCVJUX1RSQUNFKENPTVBfU1dCVywgIj09PlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaSgpICBTd2l0Y2ggdG8gJXMgYmFuZHdpZHRoXG4iLCBcCkBAIC0yMzcyLDEwICsyMTA3LDYgQEAKIAlpZighcHJpdi0+dXApCiAJCXJldHVybjsKIAotCS8vIEFkZGVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIHRpbWUgZXZhbHVhdGlvbiBieSBndWFuZ2FuIDA3MDUzMQotCS8vTm93TCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUik7Ci0JLy9Ob3dIID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZSKzQpOwotCS8vQmVnaW5UaW1lID0gKCh1OEJ5dGUpTm93SCA8PCAzMikgKyBOb3dMOwogCiAJLy8zLy8KIAkvLzMvLzwxPlNldCBNQUMgcmVnaXN0ZXIKQEAgLTIzODYsOCArMjExNyw2IEBACiAJc3dpdGNoKHByaXYtPkN1cnJlbnRDaGFubmVsQlcpCiAJewogCQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6Ci0JCQkvL2lmKHByaXYtPmNhcmRfODE5Ml92ZXJzaW9uID49IFZFUlNJT05fODE5MlNfQkNVVCkKLQkJCS8vCXdyaXRlX25pY19ieXRlKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4NTgpOwogCiAJCQlyZWdCd09wTW9kZSB8PSBCV19PUE1PREVfMjBNSFo7CiAJCSAgICAgICAJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwpAQCAtMjM5NSw4ICsyMTI0LDYgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFRfQ0hBTk5FTF9XSURUSF8yMF80MDoKLQkJCS8vaWYocHJpdi0+Y2FyZF84MTkyX3ZlcnNpb24gPj0gVkVSU0lPTl84MTkyU19CQ1VUKQotCQkJLy8Jd3JpdGVfbmljX2J5dGUoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHgxOCk7CiAKIAkJCXJlZ0J3T3BNb2RlICY9IH5CV19PUE1PREVfMjBNSFo7CiAgICAgICAgIAkJLy8gMjAwNy8wMi8wNyBNYXJrIGJ5IEVtaWx5IGJlY2FzdWUgd2UgaGF2ZSBub3QgdmVyaWZ5IHdoZXRoZXIgdGhpcyByZWdpc3RlciB3b3JrcwpAQCAtMjQyMSwxMiArMjE0OCw2IEBACiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1JGTU9ELCBiUkZNT0QsIDB4MCk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0ExX1JGTU9ELCBiUkZNT0QsIDB4MCk7CiAKLQkJCS8vIENvcnJlY3QgdGhlIHR4IHBvd2VyIGZvciBDQ0sgcmF0ZSBpbiA0ME0uIFN1Z2dlc3QgYnkgWU4sIDIwMDcxMjA3Ci0JCQkvLyBJdCBpcyBzZXQgaW4gVHggZGVzY3JpcHRvciBmb3IgODE5Mnggc2VyaWVzCi0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX1R4RmlsdGVyMSwgMHgxYTFiMDAwMCk7Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX1R4RmlsdGVyMiwgMHgwOTBlMTMxNyk7Ci0JCQkvL3dyaXRlX25pY19kd29yZChkZXYsIHJDQ0swX0RlYnVnUG9ydCwgMHgwMDAwMDIwNCk7Ci0KIAkJCWlmIChwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCiAJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHg1OCk7CiAKQEAgLTI0MzgsMTYgKzIxNTksMTEgQEAKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfUkZNT0QsIGJSRk1PRCwgMHgxKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTFfUkZNT0QsIGJSRk1PRCwgMHgxKTsKIAotCQkJLy8gQ29ycmVjdCB0aGUgdHggcG93ZXIgZm9yIENDSyByYXRlIGluIDQwTS4gU3VnZ2VzdCBieSBZTiwgMjAwNzEyMDcKLQkJCS8vd3JpdGVfbmljX2R3b3JkKGRldiwgckNDSzBfVHhGaWx0ZXIxLCAweDM1MzYwMDAwKTsKLQkJCS8vd3JpdGVfbmljX2R3b3JkKGRldiwgckNDSzBfVHhGaWx0ZXIyLCAweDEyMWMyNTJlKTsKLQkJCS8vd3JpdGVfbmljX2R3b3JkKGRldiwgckNDSzBfRGVidWdQb3J0LCAweDAwMDAwNDA5KTsKIAogCQkJLy8gU2V0IENvbnRyb2wgY2hhbm5lbCB0byB1cHBlciBvciBsb3dlci4gVGhlc2Ugc2V0dGluZ3MgYXJlIHJlcXVpcmVkIG9ubHkgZm9yIDQwTUh6CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfU3lzdGVtLCBiQ0NLU2lkZUJhbmQsIChwcml2LT5uQ3VyNDBNaHpQcmltZVNDPj4xKSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX0xTVEYsIDB4QzAwLCBwcml2LT5uQ3VyNDBNaHpQcmltZVNDKTsKIAotCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MDAzMDAwMDAsIDMpOwogCQkJaWYgKHByaXYtPmNhcmRfODE5Ml92ZXJzaW9uID49IFZFUlNJT05fODE5MlNfQkNVVCkKIAkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCAweDE4KTsKIApAQCAtMjQ2MSwxMSArMjE3Nyw2IEBACiAJfQogCS8vU2tpcCBvdmVyIHNldHRpbmcgb2YgSi1tb2RlIGluIEJCIHJlZ2lzdGVyIGhlcmUuIERlZmF1bHQgdmFsdWUgaXMgIk5vbmUgSiBtb2RlIi4gRW1pbHkgMjAwNzAzMTUKIAotCS8vIEFkZGVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIHRpbWUgZXZhbHVhdGlvbiBieSBndWFuZ2FuIDA3MDUzMQotCS8vTm93TCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUik7Ci0JLy9Ob3dIID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZSKzQpOwotCS8vRW5kVGltZSA9ICgodThCeXRlKU5vd0ggPDwgMzIpICsgTm93TDsKLQkvL1JUX1RSQUNFKENPTVBfU0NBTiwgREJHX0xPVUQsICgiU2V0QldNb2RlQ2FsbGJhY2s4MTkwUGNpOiB0aW1lIG9mIFNldEJXTW9kZSA9ICVJNjRkIHVzIVxuIiwgKEVuZFRpbWUgLSBCZWdpblRpbWUpKSk7CiAKIAkvLzM8Mz5TZXQgUkYgcmVsYXRlZCByZWdpc3RlcgogCXN3aXRjaCggcHJpdi0+cmZfY2hpcCApCkBAIC0yNTE2LDM2ICsyMjI3LDExIEBACiAgKgogICogTm90ZToJCVdlIGRvIG5vdCB0YWtlIGogbW9kZSBpbnRvIGNvbnNpZGVyYXRpb24gbm93CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vL2V4dGVybiB2b2lkIFBIWV9TZXRCV01vZGU4MTkyUygJc3RydWN0IG5ldF9kZXZpY2UqIGRldiwKLS8vCUhUX0NIQU5ORUxfV0lEVEgJQmFuZHdpZHRoLAkvLyAyME0gb3IgNDBNCi0vLwlIVF9FWFRDSE5MX09GRlNFVAlPZmZzZXQJCS8vIFVwcGVyLCBMb3dlciwgb3IgRG9uJ3QgY2FyZQogdm9pZCBydGw4MTkyX1NldEJXTW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBIVF9DSEFOTkVMX1dJRFRICUJhbmR3aWR0aCwgSFRfRVhUQ0hOTF9PRkZTRVQgT2Zmc2V0KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlIVF9DSEFOTkVMX1dJRFRIIHRtcEJXID0gcHJpdi0+Q3VycmVudENoYW5uZWxCVzsKIAotCi0JLy8gTW9kaWZpZWQgaXQgZm9yIDIwLzQwIG1oeiBzd2l0Y2ggYnkgZ3VhbmdhbiAwNzA1MzEKLQotCS8vcmV0dXJuOwotCi0JLy9pZihwcml2LT5Td0NobmxJblByb2dyZXNzKQotLy8JaWYocE1nbnRJbmZvLT5iU2NhbkluUHJvZ3Jlc3MpCi0vLwl7Ci0vLwkJUlRfVFJBQ0UoQ09NUF9TQ0FOLCBEQkdfTE9VRCwgKCJTZXRCV01vZGU4MTkwUGNpKCkgJXMgRXhpdCBiZWNhdXNlIGJTY2FuSW5Qcm9ncmVzcyFcbiIsCi0vLwkJCQkJQmFuZHdpZHRoID09IEhUX0NIQU5ORUxfV0lEVEhfMjA/IjIwTUh6IjoiNDBNSHoiKSk7Ci0vLwkJcmV0dXJuOwotLy8JfQotCi0vLwlpZihwcml2LT5TZXRCV01vZGVJblByb2dyZXNzKQotLy8JewotLy8JCS8vIE1vZGlmaWVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIGJ5IGd1YW5nYW4gMDcwNTMxCi0vLwkJUlRfVFJBQ0UoQ09NUF9TQ0FOLCBEQkdfTE9VRCwgKCJTZXRCV01vZGU4MTkwUGNpKCkgJXMgY2FuY2VsIGxhc3QgdGltZXIgYmVjYXVzZSBTZXRCV01vZGVJblByb2dyZXNzIVxuIiwKLS8vCQkJCQlCYW5kd2lkdGggPT0gSFRfQ0hBTk5FTF9XSURUSF8yMD8iMjBNSHoiOiI0ME1IeiIpKTsKLS8vCQlQbGF0Zm9ybUNhbmNlbFRpbWVyKGRldiwgJnByaXYtPlNldEJXTW9kZVRpbWVyKTsKLS8vCQkvL3JldHVybjsKLS8vCX0KLQogCWlmKHByaXYtPlNldEJXTW9kZUluUHJvZ3Jlc3MpCiAJCXJldHVybjsKIApAQCAtMjU2MCw3ICsyMjQ2LDcgQEAKIAllbHNlCiAJCXByaXYtPm5DdXI0ME1oelByaW1lU0MgPSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfRE9OVF9DQVJFOwogCi0JaWYoKHByaXYtPnVwKSApLy8gJiYgIShSVF9DQU5OT1RfSU8oQWRhcHRlcikgJiYgQWRhcHRlci0+YkluU2V0UG93ZXIpICkKKwlpZigocHJpdi0+dXApICkKIAl7CiAJU2V0QldNb2RlQ2FsbGJhY2s4MTkyU1VzYldvcmtJdGVtKGRldik7CiAJfQpAQCAtMjU3OCw3ICsyMjY0LDYgQEAKIAogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIJCWRlbGF5OwotCS8vYm9vbAkJCXJldDsKIAogCVJUX1RSQUNFKENPTVBfQ0gsICI9PT5Td0NobmxDYWxsYmFjazgxOTBQY2koKSwgc3dpdGNoIHRvIGNoYW5uZWwgJWRcbiIsIHByaXYtPmNoYW4pOwogCkBAIC0yNTk1LDE2ICsyMjgwLDExIEBACiAJCWlmKCFwcml2LT5Td0NobmxJblByb2dyZXNzKQogCQkJYnJlYWs7CiAKLQkJLy9pZighcGh5X1N3Q2hubFN0ZXBCeVN0ZXAoZGV2LCBwcml2LT5DdXJyZW50Q2hhbm5lbCwgJnByaXYtPlN3Q2hubFN0YWdlLCAmcHJpdi0+U3dDaG5sU3RlcCwgJmRlbGF5KSkKIAkJaWYoIXBoeV9Td0NobmxTdGVwQnlTdGVwKGRldiwgcHJpdi0+Y2hhbiwgJnByaXYtPlN3Q2hubFN0YWdlLCAmcHJpdi0+U3dDaG5sU3RlcCwgJmRlbGF5KSkKIAkJewogCQkJaWYoZGVsYXk+MCkKIAkJCXsKIAkJCQltZGVsYXkoZGVsYXkpOwotCQkJCS8vUGxhdGZvcm1TZXRUaW1lcihkZXYsICZwcml2LT5Td0NobmxUaW1lciwgZGVsYXkpOwotCQkJCS8vbW9kX3RpbWVyKCZwcml2LT5Td0NobmxUaW1lciwgIGppZmZpZXMgKyBNU0VDUyhkZWxheSkpOwotCQkJCS8vPT0+UEhZX1N3Q2hubENhbGxiYWNrODE5MlMoZGV2KTsgZm9yIDkyc2UKLQkJCQkvLz09PlN3Q2hubENhbGxiYWNrODE5MlNVc2IoZGV2KSBmb3IgOTJzdQogCQkJfQogCQkJZWxzZQogCQkJY29udGludWU7CkBAIC0yNjE4LDEyICsyMjk4LDkgQEAKIH0KIAogLy8gQ2FsbCBhZnRlciBpbml0aWFsaXphdGlvbgotLy9leHRlcm4gdm9pZCBQSFlfU3dDaG5sODE5MlMoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwJdTggY2hhbm5lbCkKIHU4IHJ0bDgxOTJfcGh5X1N3Q2hubChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBjaGFubmVsKQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQkvL3U4IAkJCXRtcGNoYW5uZWwgPWNoYW5uZWw7Ci0JLy9ib29sCQkJYlJlc3VsdCA9IGZhbHNlOwogCiAgICAgICAgIGlmKCFwcml2LT51cCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjYzNCw3ICsyMzExLDYgQEAKIAlpZihwcml2LT5TZXRCV01vZGVJblByb2dyZXNzKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJc3dpdGNoKHByaXYtPmllZWU4MDIxMS0+bW9kZSkKIAl7CiAJY2FzZSBXSVJFTEVTU19NT0RFX0E6CkBAIC0yNjYxLDEwICsyMzM3LDkgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQkJOy8vUlRfVFJBQ0UoQ09NUF9FUlIsICJJbnZhbGlkIFdpcmVsZXNzTW9kZSglI3gpISFcbiIsIHByaXYtPmllZWU4MDIxMS0+bW9kZSk7CisJCQk7CiAJCWJyZWFrOwogCX0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAlwcml2LT5Td0NobmxJblByb2dyZXNzID0gVFJVRTsKIAlpZiggY2hhbm5lbCA9PSAwKQpAQCAtMjY3NSw3ICsyMzUwLDcgQEAKIAlwcml2LT5Td0NobmxTdGFnZT0wOwogCXByaXYtPlN3Q2hubFN0ZXA9MDsKIAotCWlmKChwcml2LT51cCkpLy8gJiYgIShSVF9DQU5OT1RfSU8oQWRhcHRlcikgJiYgQWRhcHRlci0+YkluU2V0UG93ZXIpKQorCWlmKChwcml2LT51cCkpCiAJewogCVN3Q2hubENhbGxiYWNrODE5MlNVc2JXb3JrSXRlbShkZXYpOwogI2lmZGVmIFRPX0RPX0xJU1QKQEAgLTI2OTUsNyArMjM3MCw2IEBACiAJewogCQlSVF9UUkFDRShDT01QX1NDQU4sICJQSFlfU3dDaG5sODE5MlMgU3dDaG5sSW5Qcm9ncmVzcyBGQUxTRSBkcml2ZXIgc2xlZXAgb3IgdW5sb2FkXG4iKTsKIAkJcHJpdi0+U3dDaG5sSW5Qcm9ncmVzcyA9IGZhbHNlOwotCQkvL3ByaXYtPkN1cnJlbnRDaGFubmVsID0gdG1wY2hhbm5lbDsKIAl9CiAgICAgICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjcwOSw4ICsyMzgzLDcgQEAKIC8vIFRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlIGlzIG9wZXJ0ZWQgYWNjb3JkaW5nIHRvIFN3Q2hhbmxDYWxsYmFjazgxOTBQY2koKS4KIC8vIEhvd2V2ZXIsIHRoaXMgcHJvY2VkdXJlIGlzIHBlcmZvcm1lZCBzeW5jaHJvbm91c2x5ICB3aGljaCBzaG91bGQgYmUgcnVubmluZyB1bmRlcgogLy8gcGFzc2l2ZSBsZXZlbC4KLS8vCi0vL25vdCB1bmRlcnN0YW5kIGl0CisKIHZvaWQgUEhZX1N3Q2hubFBoeTgxOTJTKAkvLyBPbmx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6ZQogCXN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsCiAJdTgJCWNoYW5uZWwKQEAgLTI3NjcsMTQgKzI0NDAsMTAgQEAKIAogCWlmKENtZFRhYmxlID09IE5VTEwpCiAJewotCQkvL1JUX0FTU0VSVChGQUxTRSwgKCJwaHlfU2V0U3dDaG5sQ21kQXJyYXkoKTogQ21kVGFibGUgY2Fubm90IGJlIE5VTEwuXG4iKSk7CiAJCXJldHVybiBGQUxTRTsKIAl9CiAJaWYoQ21kVGFibGVJZHggPj0gQ21kVGFibGVTeikKIAl7Ci0JCS8vUlRfQVNTRVJUKEZBTFNFLAotCQkJLy8JKCJwaHlfU2V0U3dDaG5sQ21kQXJyYXkoKTogQWNjZXNzIGludmFsaWQgaW5kZXgsIHBsZWFzZSBjaGVjayBzaXplIG9mIHRoZSB0YWJsZSwgQ21kVGFibGVJZHg6JWQsIENtZFRhYmxlU3o6JWRcbiIsCi0JCQkJLy9DbWRUYWJsZUlkeCwgQ21kVGFibGVTeikpOwogCQlyZXR1cm4gRkFMU0U7CiAJfQogCkBAIC0yNzk4LDcgKzI0NjcsNiBAQAogCSkKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JLy9QQ0hBTk5FTF9BQ0NFU1NfU0VUVElORwlwQ2hubEFjY2Vzc1NldHRpbmc7CiAJU3dDaG5sQ21kCQkJCVByZUNvbW1vbkNtZFtNQVhfUFJFQ01EX0NOVF07CiAJdTMyCQkJCQlQcmVDb21tb25DbWRDbnQ7CiAJU3dDaG5sQ21kCQkJCVBvc3RDb21tb25DbWRbTUFYX1BPU1RDTURfQ05UXTsKQEAgLTI4MDgsMjIgKzI0NzYsMTMgQEAKIAlTd0NobmxDbWQJCQkJKkN1cnJlbnRDbWQgPSBOVUxMOwogCXU4CQkJCQllUkZQYXRoOwogCi0JLy9SVF9BU1NFUlQoKGRldiAhPSBOVUxMKSwgKCJBZGFwdGVyIHNob3VsZCBub3QgYmUgTlVMTFxuIikpOwotCS8vUlRfQVNTRVJUKElzTGVnYWxDaGFubmVsKGRldiwgY2hhbm5lbCksICgiaWxsZWdhbCBjaGFubmVsOiAlZFxuIiwgY2hhbm5lbCkpOwogCVJUX1RSQUNFKENPTVBfQ0gsICI9PT09PT09PT09PT4lcygpLCBjaGFubmVsOiVkLCBzdGFnZTolZCwgc3RlcDolZFxuIiwgX19GVU5DVElPTl9fLCBjaGFubmVsLCAqc3RhZ2UsICpzdGVwKTsKLQkvL1JUX0FTU0VSVCgocEhhbERhdGEgIT0gTlVMTCksICgicEhhbERhdGEgc2hvdWxkIG5vdCBiZSBOVUxMXG4iKSk7CiAJaWYgKCFJc0xlZ2FsQ2hhbm5lbChwcml2LT5pZWVlODAyMTEsIGNoYW5uZWwpKQogCXsKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICI9PT09PT09PT09PT09PnNldCB0byBpbGxlZ2FsIGNoYW5uZWw6JWRcbiIsIGNoYW5uZWwpOwogCQlyZXR1cm4gdHJ1ZTsgLy9yZXR1cm4gdHJ1ZSB0byB0ZWxsIHVwcGVyIGNhbGxlciBmdW5jdGlvbiB0aGlzIGNoYW5uZWwgc2V0dGluZyBpcyBmaW5pc2hlZCEgT3IgaXQgd2lsbCBpbiB3aGlsZSBsb29wLgogCX0KIAotCS8vcENobmxBY2Nlc3NTZXR0aW5nID0gJkFkYXB0ZXItPk1nbnRJbmZvLkluZm84MTg1LkNoYW5uZWxBY2Nlc3NTZXR0aW5nOwotCS8vUlRfQVNTRVJUKChwQ2hubEFjY2Vzc1NldHRpbmcgIT0gTlVMTCksICgicENobmxBY2Nlc3NTZXR0aW5nIHNob3VsZCBub3QgYmUgTlVMTFxuIikpOwotCi0JLy9mb3IoZVJGUGF0aCA9IFJGOTBfUEFUSF9BOyBlUkZQYXRoIDxwcml2LT5OdW1Ub3RhbFJGUGF0aDsgZVJGUGF0aCsrKQotCS8vZm9yKGVSRlBhdGggPSAwOyBlUkZQYXRoIDxwcml2LT5OdW1Ub3RhbFJGUGF0aDsgZVJGUGF0aCsrKQotCS8vewogCQkvLyA8MT4gRmlsbCB1cCBwcmUgY29tbW9uIGNvbW1hbmQuCiAJUHJlQ29tbW9uQ21kQ250ID0gMDsKIAlwaHlfU2V0U3dDaG5sQ21kQXJyYXkoUHJlQ29tbW9uQ21kLCBQcmVDb21tb25DbWRDbnQrKywgTUFYX1BSRUNNRF9DTlQsCkBAIC0yODQ0LDggKzI1MDMsNyBAQAogCQljYXNlIFJGXzgyMjU6CiAJCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gMTQpCiAJCQlSVF9UUkFDRShDT01QX0VSUiwgImlsbGVnYWwgY2hhbm5lbCBmb3IgemVicmE6JWRcbiIsIGNoYW5uZWwpOwotCQkvL1JUX0FTU0VSVCgoY2hhbm5lbCA+PSAxICYmIGNoYW5uZWwgPD0gMTQpLCAoImlsbGVnYWwgY2hhbm5lbCBmb3IgWmVicmE6ICVkXG4iLCBjaGFubmVsKSk7Ci0JCS8vIDIwMDgvMDkvMDQgTUggQ2hhbmdlIGNoYW5uZWwuCisKIAkJcGh5X1NldFN3Q2hubENtZEFycmF5KFJmRGVwZW5kQ21kLCBSZkRlcGVuZENtZENudCsrLCBNQVhfUkZERVBFTkRDTURfQ05ULAogCQkJQ21kSURfUkZfV3JpdGVSZWcsIHJSZkNoYW5uZWwsIGNoYW5uZWwsIDEwKTsKIAkJcGh5X1NldFN3Q2hubENtZEFycmF5KFJmRGVwZW5kQ21kLCBSZkRlcGVuZENtZENudCsrLCBNQVhfUkZERVBFTkRDTURfQ05ULApAQCAtMjg1NSw4ICsyNTEzLDYgQEAKIAljYXNlIFJGXzgyNTY6CiAJCWlmIChjaGFubmVsIDwgMSB8fCBjaGFubmVsID4gMTQpCiAJCQlSVF9UUkFDRShDT01QX0VSUiwgImlsbGVnYWwgY2hhbm5lbCBmb3IgemVicmE6JWRcbiIsIGNoYW5uZWwpOwotCQkvLyBURVNUISEgVGhpcyBpcyBub3QgdGhlIHRhYmxlIGZvciA4MjU2ISEKLQkJLy9SVF9BU1NFUlQoKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KSwgKCJpbGxlZ2FsIGNoYW5uZWwgZm9yIFplYnJhOiAlZFxuIiwgY2hhbm5lbCkpOwogCQlwaHlfU2V0U3dDaG5sQ21kQXJyYXkoUmZEZXBlbmRDbWQsIFJmRGVwZW5kQ21kQ250KyssIE1BWF9SRkRFUEVORENNRF9DTlQsCiAJCQlDbWRJRF9SRl9Xcml0ZVJlZywgclJmQ2hhbm5lbCwgY2hhbm5lbCwgMTApOwogCQlwaHlfU2V0U3dDaG5sQ21kQXJyYXkoUmZEZXBlbmRDbWQsIFJmRGVwZW5kQ21kQ250KyssIE1BWF9SRkRFUEVORENNRF9DTlQsCkBAIC0yODc2LDcgKzI1MzIsNiBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCS8vUlRfQVNTRVJUKEZBTFNFLCAoIlVua25vd24gcmZfY2hpcDogJWRcbiIsIHByaXYtPnJmX2NoaXApKTsKIAkJcmV0dXJuIEZBTFNFOwogCQlicmVhazsKIAl9CkBAIC0yOTEzLDcgKzI1NjgsNiBAQAogCQlzd2l0Y2goQ3VycmVudENtZC0+Q21kSUQpCiAJCXsKIAkJY2FzZSBDbWRJRF9TZXRUeFBvd2VyTGV2ZWw6Ci0JCQkvL2lmKHByaXYtPmNhcmRfODE5Ml92ZXJzaW9uID4gVkVSU0lPTl84MTkwX0JEKQogCQkJCVBIWV9TZXRUeFBvd2VyTGV2ZWw4MTkyUyhkZXYsY2hhbm5lbCk7CiAJCQlicmVhazsKIAkJY2FzZSBDbWRJRF9Xcml0ZVBvcnRVbG9uZzoKQEAgLTI5MzAsNyArMjU4NCw2IEBACiAJCQl7CiAJCQkvLyBGb3IgbmV3IFQ2NSBSRiAwMjIyZCByZWdpc3RlciAweDE4IGJpdCAwLTkgPSBjaGFubmVsIG51bWJlci4KIAkJCQlydGw4MTkyX3BoeV9TZXRSRlJlZyhkZXYsIChSRjkwX1JBRElPX1BBVEhfRSllUkZQYXRoLCBDdXJyZW50Q21kLT5QYXJhMSwgMHgxZiwgKEN1cnJlbnRDbWQtPlBhcmEyKSk7Ci0JCQkJLy9wcmludGsoIj09PT0+JXgsICV4LCByZWFkX2JhY2s6JXhcbiIsIEN1cnJlbnRDbWQtPlBhcmEyLEN1cnJlbnRDbWQtPlBhcmExLCBydGw4MTkyX3BoeV9RdWVyeVJGUmVnKGRldiwgKFJGOTBfUkFESU9fUEFUSF9FKWVSRlBhdGgsIEN1cnJlbnRDbWQtPlBhcmExLCAweDFmKSk7CiAJCQl9CiAJCQlicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjkzOSw3ICsyNTkyLDYgQEAKIAogCQlicmVhazsKIAl9d2hpbGUoVFJVRSk7Ci0JLy9jb3NhIH0vKmZvcihOdW1iZXIgb2YgUkYgcGF0aHMpKi8KIAogCSgqZGVsYXkpPUN1cnJlbnRDbWQtPm1zRGVsYXk7CiAJKCpzdGVwKSsrOwpAQCAtMjk4NSwxNCArMjYzNyw4IEBACiAgKgkxMS8xNS8yMDA3CU1IQwkJQ3JlYXRlIFZlcnNpb24gMC4KICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gLy9jYWxsZWQgYnkgcnRsODE5Ml9waHlfUXVlcnlSRlJlZywgcnRsODE5Ml9waHlfU2V0UkZSZWcsIFBIWV9TZXRSRlBvd2VyU3RhdGU4MTkyU1VzYgotLy9leHRlcm4JYm9vbAotLy9QSFlfQ2hlY2tJc0xlZ2FsUmZQYXRoODE5MlMoCi0vLwlzdHJ1Y3QgbmV0X2RldmljZSogZGV2LAotLy8JdTMyCWVSRlBhdGgpCiB1OCBydGw4MTkyX3BoeV9DaGVja0lzTGVnYWxSRlBhdGgoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTMyIGVSRlBhdGgpCiB7Ci0vLwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJYm9vbAkJCQlydFZhbHVlID0gVFJVRTsKIAogCS8vIE5PdCBjaGVjayBSRiBQYXRoIG5vdy4hCkBAIC0zMDIzLDcgKzI2NjksNiBAQAogdm9pZAogUEhZX0lRQ2FsaWJyYXRlKAlzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCS8vc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIJCQkJaSwgcmVnOwogCXUzMgkJCQlvbGRfdmFsdWU7CiAJbG9uZwkJCQlYLCBZLCBUWDBbNF07CkBAIC0zMDM5LDcgKzI2ODQsNiBAQAogCXsKIAkJLy8gSVFLCiAJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCAweGMwNCwgYk1hc2tEV29yZCwgMHgwMGEwNTQzMCk7Ci0JCS8vUGxhdGZvcm1TdGFsbEV4ZWN1dGlvbig1KTsKIAkJdWRlbGF5KDUpOwogCQlydGw4MTkyX3NldEJCcmVnKGRldiwgMHhjMDgsIGJNYXNrRFdvcmQsIDB4MDAwODAwZTQpOwogCQl1ZGVsYXkoNSk7CkBAIC0zMTY5LDggKzI4MTMsNiBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogZXh0ZXJuIHZvaWQgUEhZX0lRQ2FsaWJyYXRlQmN1dChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCS8vc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQkvL1BNR05UX0lORk8JCXBNZ250SW5mbyA9ICZwQWRhcHRlci0+TWdudEluZm87CiAJdTMyCQkJCWksIHJlZzsKIAl1MzIJCQkJb2xkX3ZhbHVlOwogCWxvbmcJCQkJWCwgWSwgVFgwWzRdOwpAQCAtMzE4NCwyMSArMjgyNiw2IEBACiAJLy8KIAkvLyAxLiBTYXZlIGU3MH5lZTAgcmVnaXN0ZXIgc2V0dGluZywgYW5kIGxvYWQgY2FsaWJyYXRpb24gc2V0dGluZwogCS8vCi0JLyoKLQkweGVlMFszMTowXT0weDNmZWQ5MmZiOwotCTB4ZWRjWzMxOjBdID0weDNmZWQ5MmZiOwotCTB4ZTcwWzMxOjBdID0weDNmZWQ5MmZiOwotCTB4ZTc0WzMxOjBdID0weDNmZWQ5MmZiOwotCTB4ZTc4WzMxOjBdID0weDNmZWQ5MmZiOwotCTB4ZTdjWzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZTgwWzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZTg0WzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZTg4WzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZThjWzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZWQwWzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZWQ0WzMxOjBdPSAweDNmZWQ5MmZiOwotCTB4ZWQ4WzMxOjBdPSAweDNmZWQ5MmZiOwotCSovCiAJY2FsaWJyYXRlX3NldCBbMF0gPSAweGVlMDsKIAljYWxpYnJhdGVfc2V0IFsxXSA9IDB4ZWRjOwogCWNhbGlicmF0ZV9zZXQgWzJdID0gMHhlNzA7CkBAIC0zMjEyLDcgKzI4MzksNiBAQAogCWNhbGlicmF0ZV9zZXQgWzEwXSA9IDB4ZWQwOwogCWNhbGlicmF0ZV9zZXQgWzExXSA9IDB4ZWQ0OwogCWNhbGlicmF0ZV9zZXQgWzEyXSA9IDB4ZWQ4OwotCS8vUlRfVFJBQ0UoQ09NUF9JTklULCBEQkdfTE9VRCwgKCJTYXZlIGU3MH5lZTAgcmVnaXN0ZXIgc2V0dGluZ1xuIikpOwogCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQogCXsKIAkJbG9hZF92YWx1ZVtpXSA9IHJ0bDgxOTJfUXVlcnlCQlJlZyhkZXYsIGNhbGlicmF0ZV9zZXRbaV0sIGJNYXNrRFdvcmQpOwpAQCAtMzIzMiw3ICsyODU4LDYgQEAKIAkJLy9CQiBzd2l0Y2ggdG8gUEkgbW9kZS4gSWYgZGVmYXVsdCBpcyBQSSBtb2RlLCBpZ25vcmluZyAyIGNvbW1hbmRzIGJlbG93LgogCQlpZiAoIVJmUGlFbmFibGUpCS8vaWYgb3JpZ2luYWwgaXMgU0kgbW9kZSwgdGhlbiBzd2l0Y2ggdG8gUEkgbW9kZS4KIAkJewotCQkJLy9EYmdQcmludCgiSVFLIFN3aXRjaCB0byBQSSBtb2RlXG4iKTsKIAkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCAweDgyMCwgYk1hc2tEV29yZCwgMHgwMTAwMDEwMCk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgMHg4MjgsIGJNYXNrRFdvcmQsIDB4MDEwMDAxMDApOwogCQl9CkBAIC0zMjg2LDcgKzI5MTEsNiBAQAogCiAJCWlmICghUmZQaUVuYWJsZSkJLy9pZiBvcmlnaW5hbCBpcyBTSSBtb2RlLCB0aGVuIHN3aXRjaCB0byBQSSBtb2RlLgogCQl7Ci0JCQkvL0RiZ1ByaW50KCJJUUsgU3dpdGNoIGJhY2sgdG8gU0kgbW9kZVxuIik7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgMHg4MjAsIGJNYXNrRFdvcmQsIDB4MDEwMDAwMDApOwogCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIDB4ODI4LCBiTWFza0RXb3JkLCAweDAxMDAwMDAwKTsKIAkJfQpAQCAtMzM2OSw3ICsyOTkzLDYgQEAKIAkvLwogCS8vIDQuIFJlbG9hZCBlNzB+ZWUwIHJlZ2lzdGVyIHNldHRpbmcuCiAJLy8KLQkvL1JUX1RSQUNFKENPTVBfSU5JVCwgREJHX0xPVUQsICgiUmVsb2FkIGU3MH5lZTAgcmVnaXN0ZXIgc2V0dGluZy5cbiIpKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykKIAkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIGNhbGlicmF0ZV9zZXRbaV0sIGJNYXNrRFdvcmQsIGxvYWRfdmFsdWVbaV0pOwogCkBAIC0zMzgwLDE0ICszMDAzLDEyIEBACiAKIAogCi19CS8vIFBIWV9JUUNhbGlicmF0ZUJjdXQKK30KIAogCiAvLwogLy8gTW92ZSBmcm9tIHBoeWNmZy5jIHRvIGdlbi5jIHRvIGJlIGNvZGUgaW5kZXBlbmRlbnQgbGF0ZXIKIC8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Nb3ZlIHRvIG90aGVyIERJUiBsYXRlci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy8jaWYgKERFVl9CVVNfVFlQRSA9PSBVU0JfSU5URVJGQUNFKQogCiAvLyAgICB1c2UgaW4gcGh5IG9ubHkgKGluIHdpbiBpdCdzIHRpbWVyKQogdm9pZCBTd0NobmxDYWxsYmFjazgxOTJTVXNiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzk1LDcgKzMwMTYsNiBAQAogCiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXUzMgkJCWRlbGF5OwotLy8JYm9vbAkJCXJldDsKIAogCVJUX1RSQUNFKENPTVBfU0NBTiwgIj09PlN3Q2hubENhbGxiYWNrODE5MFBjaSgpLCBzd2l0Y2ggdG8gY2hhbm5lbCAlZFxuIiwKIAkJIHByaXYtPmNoYW4pOwpAQCAtMzQxOCw3ICszMDM4LDYgQEAKIAkJewogCQkJaWYoZGVsYXk+MCkKIAkJCXsKLQkJCQkvL1BsYXRmb3JtU2V0VGltZXIoZGV2LCAmcHJpdi0+U3dDaG5sVGltZXIsIGRlbGF5KTsKIAogCQkJfQogCQkJZWxzZQpAQCAtMzQ3MywxNiArMzA5MiwxMiBAQAogICoJCQkoMikgV2lsbCB0d28gd29ya2l0ZW0gb2YgInN3aXRjaCBjaGFubmVsIiBhbmQgInN3aXRjaCBjaGFubmVsIGJhbmR3aWR0aCIgcnVuCiAgKgkJCSAgICAgY29uY3VycmVudGx5PwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLy89PT09Pi8vcnRsODE5Ml9TZXRCV01vZGUKLS8vICAgIHVzZSBpbiBwaHkgb25seSAoaW4gd2luIGl0J3MgdGltZXIpCisvLyAgICB1c2UgaW4gcGh5IG9ubHkKIHZvaWQgU2V0QldNb2RlQ2FsbGJhY2s4MTkyU1VzYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1OAkgCQkJcmVnQndPcE1vZGU7CiAKLQkvLyBBZGRlZCBpdCBmb3IgMjAvNDAgbWh6IHN3aXRjaCB0aW1lIGV2YWx1YXRpb24gYnkgZ3VhbmdhbiAwNzA1MzEKLQkvL3UzMgkJCQlOb3dMLCBOb3dIOwotCS8vdThCeXRlCQkJCUJlZ2luVGltZSwgRW5kVGltZTsKIAl1OAkJCQlyZWdSUlNSX1JTQzsKIAogCVJUX1RSQUNFKENPTVBfU0NBTiwgIj09PlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaSgpICBTd2l0Y2ggdG8gJXMgYmFuZHdpZHRoXG4iLCBcCkBAIC0zNDk3LDEwICszMTEyLDYgQEAKIAlpZighcHJpdi0+dXApCiAJCXJldHVybjsKIAotCS8vIEFkZGVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIHRpbWUgZXZhbHVhdGlvbiBieSBndWFuZ2FuIDA3MDUzMQotCS8vTm93TCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUik7Ci0JLy9Ob3dIID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZSKzQpOwotCS8vQmVnaW5UaW1lID0gKCh1OEJ5dGUpTm93SCA8PCAzMikgKyBOb3dMOwogCiAJLy8zPDE+U2V0IE1BQyByZWdpc3RlcgogCXJlZ0J3T3BNb2RlID0gcmVhZF9uaWNfYnl0ZShkZXYsIEJXX09QTU9ERSk7CkBAIC0zNTEwLDEzICszMTIxLDExIEBACiAJewogCQljYXNlIEhUX0NIQU5ORUxfV0lEVEhfMjA6CiAJCQlyZWdCd09wTW9kZSB8PSBCV19PUE1PREVfMjBNSFo7Ci0JCSAgICAgICAvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXN1ZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCiAJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEJXX09QTU9ERSwgcmVnQndPcE1vZGUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBIVF9DSEFOTkVMX1dJRFRIXzIwXzQwOgogCQkJcmVnQndPcE1vZGUgJj0gfkJXX09QTU9ERV8yME1IWjsKLSAgICAgICAgCQkvLyAyMDA3LzAyLzA3IE1hcmsgYnkgRW1pbHkgYmVjYXN1ZSB3ZSBoYXZlIG5vdCB2ZXJpZnkgd2hldGhlciB0aGlzIHJlZ2lzdGVyIHdvcmtzCiAJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEJXX09QTU9ERSwgcmVnQndPcE1vZGUpOwogCiAJCQlyZWdSUlNSX1JTQyA9IChyZWdSUlNSX1JTQyYweDkwKSB8KHByaXYtPm5DdXI0ME1oelByaW1lU0M8PDUpOwpAQCAtMzU0NiwxMiArMzE1NSw2IEBACiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfU3lzdGVtLCBiQ0NLU2lkZUJhbmQsIChwcml2LT5uQ3VyNDBNaHpQcmltZVNDPj4xKSk7CiAJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX0xTVEYsIDB4QzAwLCBwcml2LT5uQ3VyNDBNaHpQcmltZVNDKTsKIAotCQkJLy8gQ29ycmVjdCB0aGUgdHggcG93ZXIgZm9yIENDSyByYXRlIGluIDQwTS4gU3VnZ2VzdCBieSBZTiwgMjAwNzEyMDcKLQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJDQ0swX1R4RmlsdGVyMSwgYk1hc2tEV29yZCwgMHgzNTM2MDAwMCk7Ci0JCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByQ0NLMF9UeEZpbHRlcjIsIGJNYXNrRFdvcmQsIDB4MTIxYzI1MmUpOwotCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgckNDSzBfRGVidWdQb3J0LCBiTWFza0RXb3JkLCAweDAwMDAwNDA5KTsKLQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCBiQURDbGtQaGFzZSwgMCk7Ci0KIAkJCWlmIChwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+PSBWRVJTSU9OXzgxOTJTX0JDVVQpCiAJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCAweGZmLCAweDE4KTsKIApAQCAtMzU2NCwxMiArMzE2Nyw2IEBACiAJfQogCS8vU2tpcCBvdmVyIHNldHRpbmcgb2YgSi1tb2RlIGluIEJCIHJlZ2lzdGVyIGhlcmUuIERlZmF1bHQgdmFsdWUgaXMgIk5vbmUgSiBtb2RlIi4gRW1pbHkgMjAwNzAzMTUKIAotCS8vIEFkZGVkIGl0IGZvciAyMC80MCBtaHogc3dpdGNoIHRpbWUgZXZhbHVhdGlvbiBieSBndWFuZ2FuIDA3MDUzMQotCS8vTm93TCA9IHJlYWRfbmljX2R3b3JkKGRldiwgVFNGUik7Ci0JLy9Ob3dIID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZSKzQpOwotCS8vRW5kVGltZSA9ICgodThCeXRlKU5vd0ggPDwgMzIpICsgTm93TDsKLQkvL1JUX1RSQUNFKENPTVBfU0NBTiwgREJHX0xPVUQsICgiU2V0QldNb2RlQ2FsbGJhY2s4MTkwUGNpOiB0aW1lIG9mIFNldEJXTW9kZSA9ICVJNjRkIHVzIVxuIiwgKEVuZFRpbWUgLSBCZWdpblRpbWUpKSk7Ci0KICNpZiAxCiAJLy8zPDM+U2V0IFJGIHJlbGF0ZWQgcmVnaXN0ZXIKIAlzd2l0Y2goIHByaXYtPnJmX2NoaXAgKQpAQCAtMzU5Nyw3ICszMTk0LDYgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQkvL1JUX0FTU0VSVChGQUxTRSwgKCJVbmtub3duIHJmX2NoaXA6ICVkXG4iLCBwcml2LT5yZl9jaGlwKSk7CiAJCQlicmVhazsKIAl9CiAjZW5kaWYKQEAgLTM3MDUsNyArMzMwMSw2IEBACiAJcHJpdi0+U2V0QldNb2RlSW5Qcm9ncmVzcz0gRkFMU0U7CiB9CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Nb3ZlIHRvIG90ZXIgRElSIGxhdGVyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIEluaXRpYWxHYWluODE5MlMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJdTggT3BlcmF0aW9uKQogewogI2lmZGVmIFRPX0RPX0xJU1QKQEAgLTM4MTIsNyArMzQwNyw2IEBACiAKIAl1MTYJRndDbWRXYWl0TGltaXQgPSAxMDAwOwogCi0JLy9pZihJU19IQVJEV0FSRV9UWVBFXzgxOTJTVShBZGFwdGVyKSAmJiBBZGFwdGVyLT5iSW5IY3RUZXN0KQogCWlmKHByaXYtPmJJbkhjdFRlc3QpCiAJCXJldHVybiB0cnVlOwogCkBAIC0zODI4LDExICszNDIyLDYgQEAKICNpZiAxCiAJd2hpbGUocHJpdi0+U2V0RndDbWRJblByb2dyZXNzICYmIEZ3Q21kV2FpdENvdW50ZXI8RndDbWRXYWl0TGltaXQpCiAJewotCQkvL2lmKFJUX1VTQl9DQU5OT1RfSU8oQWRhcHRlcikpCi0JCS8vewotCQkvLwlSVF9UUkFDRShDT01QX0NNRCwgREJHX1dBUk5JTkcsICgiSGFsU2V0RndDbWQ4MTkyUygpOiBVU0IgY2FuIE5PVCBJTyEhXG4iKSk7Ci0JCS8vCXJldHVybiBGQUxTRTsKLQkJLy99CiAKIAkJUlRfVFJBQ0UoQ09NUF9DTUQsICJIYWxTZXRGd0NtZDgxOTJTKCk6IHByZXZpb3VzIHdvcmtpdGVtIG5vdCBmaW5pc2ghIVxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTM4NDMsOSArMzQzMiw3IEBACiAKIAlpZihGd0NtZFdhaXRDb3VudGVyID09IEZ3Q21kV2FpdExpbWl0KQogCXsKLQkJLy9SVF9BU1NFUlQoRkFMU0UsICgiU2V0RndDbWRJT1dvcmtJdGVtQ2FsbGJhY2soKTogV2FpdCB0b28gbG9nbiB0byBzZXQgRlcgQ01EXG4iKSk7CiAJCVJUX1RSQUNFKENPTVBfQ01ELCAiSGFsU2V0RndDbWQ4MTkyUygpOiBXYWl0IHRvbyBsb2duIHRvIHNldCBGVyBDTURcbiIpOwotCQkvL3JldHVybiBmYWxzZTsKIAl9CiAjZW5kaWYKIAlpZiAocHJpdi0+U2V0RndDbWRJblByb2dyZXNzKQpAQCAtMzg5OCwxMCArMzQ4NSwxMCBAQAogLy8KIHZvaWQgcGh5X1NldEZ3Q21kSU9DYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotCS8vc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSopIGRhdGE7Ci0JdTMyIAkgCWlucHV0OwotCXN0YXRpYyB1MzIgU2NhblJlZ2lzdGVyOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlQUlRfSElHSF9USFJPVUdIUFVUCXBIVEluZm8gPSBwcml2LT5pZWVlODAyMTEtPnBIVEluZm87CisJcnRfZmlybXdhcmUJCSpwRmlybXdhcmUgPSBwcml2LT5wRmlybXdhcmU7CisJdTMyCWlucHV0LCBDdXJyZW50QUlEID0gMDs7CiAJaWYoIXByaXYtPnVwKQogCXsKIAkJUlRfVFJBQ0UoQ09NUF9DTUQsICJTZXRGd0NtZElPVGltZXJDYWxsYmFjaygpOiBkcml2ZXIgaXMgZ29pbmcgdG8gdW5sb2FkXG4iKTsKQEAgLTM5MTAsNjEgKzM0OTcsMjIgQEAKIAogCVJUX1RSQUNFKENPTVBfQ01ELCAiLS0tPlNldEZ3Q21kSU9UaW1lckNhbGxiYWNrKCk6IENtZCglI3gpLCBTZXRGd0NtZEluUHJvZ3Jlc3MoJWQpXG4iLCBwcml2LT5DdXJyZW50RndDbWRJTywgcHJpdi0+U2V0RndDbWRJblByb2dyZXNzKTsKIAorCWlmKHBGaXJtd2FyZS0+RmlybXdhcmVWZXJzaW9uID49IDB4MzQpCisJeworCQlzd2l0Y2gocHJpdi0+Q3VycmVudEZ3Q21kSU8pCisJCXsKKwkJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTjoKKwkJCQlwcml2LT5DdXJyZW50RndDbWRJTyA9IEZXX0NNRF9SQV9SRUZSRVNIX05fQ09NQjsKKwkJCWJyZWFrOworCQkJY2FzZSBGV19DTURfUkFfUkVGUkVTSF9CRzoKKwkJCQlwcml2LT5DdXJyZW50RndDbWRJTyA9IEZXX0NNRF9SQV9SRUZSRVNIX0JHX0NPTUI7CisJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KIAlzd2l0Y2gocHJpdi0+Q3VycmVudEZ3Q21kSU8pCiAJewotCQljYXNlIEZXX0NNRF9ISUdIX1BXUl9FTkFCTEU6Ci0JCQlpZigocHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX0RJU0FCTEVfSElHSF9QT1dFUik9PTApCi0JCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfSElHSF9QV1JfRU5BQkxFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRldfQ01EX0hJR0hfUFdSX0RJU0FCTEU6Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ISUdIX1BXUl9ESVNBQkxFKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRldfQ01EX0RJR19SRVNVTUU6Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ESUdfUkVTVU1FKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgRldfQ01EX0RJR19IQUxUOgotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfRElHX0hBTFQpOwotCQkJYnJlYWs7Ci0KLQkJLy8KLQkJLy8gPFJvZ2VyX05vdGVzPiBUaGUgZm9sbG93aW5nIEZXIENNRCBJTyB3YXMgY29tYmluZWQgaW50byBzaW5nbGUgb3BlcmF0aW9uCi0JCS8vIChpLmUuLCB0byBwcmV2ZW50IG51bWJlciBvZiBzeXN0ZW0gd29ya2l0ZW0gb3V0IG9mIHJlc291cmNlISEpLgotCQkvLyAyMDA4LjEyLjA0LgotCQkvLwotCQljYXNlIEZXX0NNRF9SRVNVTUVfRE1fQllfU0NBTjoKLQkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IEhJR0hQV1IgZW5hYmxlIGFuZCBESUcgcmVzdW1lISFcbiIpOwotCQkJaWYoKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9ESVNBQkxFX0hJR0hfUE9XRVIpPT0wKQotCQkJewotCQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0hJR0hfUFdSX0VOQUJMRSk7IC8vYnJlYWs7Ci0JCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKLQkJCX0KLQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0RJR19SRVNVTUUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBGV19DTURfUEFVU0VfRE1fQllfU0NBTjoKLQkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IEhJR0hQV1IgZGlzYWJsZSBhbmQgRElHIGhhbHQhIVxuIik7Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ISUdIX1BXUl9ESVNBQkxFKTsgLy9icmVhazsKLQkJCUNoa0Z3Q21kSW9Eb25lKGRldik7Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ESUdfSEFMVCk7Ci0JCQlicmVhazsKLQotCQkvLwotCQkvLyA8Um9nZXJfTm90ZXM+IFRoZSBmb2xsb3dpbmcgRlcgQ01EIElPIHNob3VsZCBiZSBjaGVja2VkCi0JCS8vIChpLmUuLCB3b3JraXRlbSBzY2hlZHVsZSB0aW1pbmcgaXNzdWUhISkuCi0JCS8vIDIwMDguMTIuMDQuCi0JCS8vCi0JCWNhc2UgRldfQ01EX0RJR19ESVNBQkxFOgotCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgRElHIGRpc2FibGUhIVxuIik7Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19ESUdfRElTQUJMRSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEZXX0NNRF9ESUdfRU5BQkxFOgotCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgRElHIGVuYWJsZSEhXG4iKTsKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0RJR19FTkFCTEUpOwotCQkJYnJlYWs7CiAKIAkJY2FzZSBGV19DTURfUkFfUkVTRVQ6CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19SQV9SRVNFVCk7CkBAIC0zOTc1LDgyICszNTIzLDExMSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBGV19DTURfUkFfUkVGUkVTSF9OOgotCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEgcmVmcmVzaCEhIE5cbiIpOwotCQkJaWYocHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvLT5JT1RSYUZ1bmMgJiBIVF9JT1RfUkFGVU5DX0RJU0FCTEVfQUxMKQorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEgbiByZWZyZXNoISFcbiIpOworCQkJaWYocEhUSW5mby0+SU9UUmFGdW5jICYgSFRfSU9UX1JBRlVOQ19ESVNBQkxFX0FMTCkKIAkJCQlpbnB1dCA9IEZXX1JBX1JFRlJFU0g7CiAJCQllbHNlCi0JCQkJaW5wdXQgPSBGV19SQV9SRUZSRVNIIHwgKHByaXYtPmllZWU4MDIxMS0+cEhUSW5mby0+SU9UUmFGdW5jIDw8IDgpOworCQkJCWlucHV0ID0gRldfUkFfUkVGUkVTSCB8IChwSFRJbmZvLT5JT1RSYUZ1bmMgPDwgOCk7CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBpbnB1dCk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfUkFfRU5BQkxFX1JTU0lfTUFTSyk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOwogCQkJYnJlYWs7CiAJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfQkc6Ci0JCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIFNldCBSQSByZWZyZXNoISEgQi9HXG4iKTsKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gU2V0IFJBIEJHIHJlZnJlc2ghIVxuIik7CiAJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19SQV9SRUZSRVNIKTsKIAkJCUNoa0Z3Q21kSW9Eb25lKGRldik7Ci0JCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19SQV9FTkFCTEVfQkcpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZNNSwgRldfUkFfRElTQUJMRV9SU1NJX01BU0spOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKKwkJCWJyZWFrOworCisJCWNhc2UgRldfQ01EX1JBX1JFRlJFU0hfTl9DT01COgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEgbiBDb21ibyByZWZyZXNoISFcbiIpOworCQkJaWYocEhUSW5mby0+SU9UUmFGdW5jICYgSFRfSU9UX1JBRlVOQ19ESVNBQkxFX0FMTCkKKwkJCQlpbnB1dCA9IEZXX1JBX0lPVF9OX0NPTUI7CisJCQllbHNlCisJCQkJaW5wdXQgPSBGV19SQV9JT1RfTl9DT01CIHwgKCgocEhUSW5mby0+SU9UUmFGdW5jKSYweDBmKSA8PCA4KTsKKwkJCWlucHV0ID0gaW5wdXQgfCgocEhUSW5mby0+SU9UUGVlciAmIDB4ZikgPDwxMik7CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIFNldCBSQS9JT1QgQ29tYiBpbiBuIG1vZGUhISBpbnB1dCglI3gpXG4iLCBpbnB1dCk7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBpbnB1dCk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGV19DTURfUkFfUkVGUkVTSF9CR19DT01COgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEgQi9HIENvbWJvIHJlZnJlc2ghIVxuIik7CisJCQlpZihwSFRJbmZvLT5JT1RSYUZ1bmMgJiBIVF9JT1RfUkFGVU5DX0RJU0FCTEVfQUxMKQorCQkJCWlucHV0ID0gRldfUkFfSU9UX0JHX0NPTUI7CisJCQllbHNlCisJCQkJaW5wdXQgPSBGV19SQV9JT1RfQkdfQ09NQiB8ICgoKHBIVEluZm8tPklPVFJhRnVuYykmMHgwZikgPDwgOCk7CisJCQlpbnB1dCA9IGlucHV0IHwoKHBIVEluZm8tPklPVFBlZXIgJiAweGYpIDw8MTIpOworCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBTZXQgUkEvSU9UIENvbWIgaW4gQi9HIG1vZGUhISBpbnB1dCglI3gpXG4iLCBpbnB1dCk7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBpbnB1dCk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBGV19DTURfSVFLX0VOQUJMRToKIAkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX0lRS19FTkFCTEUpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX1RYUFdSX1RSQUNLX0VOQUJMRToKIAkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX1RYUFdSX1RSQUNLX0VOQUJMRSk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBGV19DTURfVFhQV1JfVFJBQ0tfRElTQUJMRToKIAkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGTTUsIEZXX1RYUFdSX1RSQUNLX0RJU0FCTEUpOworCQkJQ2hrRndDbWRJb0RvbmUoZGV2KTsKIAkJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQlSVF9UUkFDRShDT01QX0NNRCwiVW5rbm93biBGVyBDbWQgSU8oJSN4KVxuIiwgcHJpdi0+Q3VycmVudEZ3Q21kSU8pOworCQljYXNlIEZXX0NNRF9QQVVTRV9ETV9CWV9TQ0FOOgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsIltGVyBDTURdIFBhdXNlIERNIGJ5IFNjYW4hIVxuIik7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1hBQUdDQ29yZTEsIGJNYXNrQnl0ZTAsIDB4MTcpOworCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQkFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDE3KTsKKwkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByQ0NLMF9DQ0EsIGJNYXNrQnl0ZTIsIDB4NDApOwogCQkJYnJlYWs7Ci0JfQogCi0JQ2hrRndDbWRJb0RvbmUoZGV2KTsKLQotCXN3aXRjaChwcml2LT5DdXJyZW50RndDbWRJTykKLQl7CisJCWNhc2UgRldfQ01EX1JFU1VNRV9ETV9CWV9TQ0FOOgorCQkJUlRfVFJBQ0UoQ09NUF9DTUQsICJbRlcgQ01EXSBSZXN1bWUgRE0gYnkgU2NhbiEhXG4iKTsKKwkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByQ0NLMF9DQ0EsIGJNYXNrQnl0ZTIsIDB4ODMpOworCQkJUEhZX1NldFR4UG93ZXJMZXZlbDgxOTJTKGRldiwgcHJpdi0+Y2hhbik7CisJCQlicmVhazsKIAkJY2FzZSBGV19DTURfSElHSF9QV1JfRElTQUJMRToKLQkJCS8vaWYocE1nbnRJbmZvLT5iVHVyYm9TY2FuKQotCQkJewotCQkJCS8vTG93ZXIgaW5pdGlhbCBnYWluCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQUFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDE3KTsKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1hCQUdDQ29yZTEsIGJNYXNrQnl0ZTAsIDB4MTcpOwotCQkJCS8vIENDQSB0aHJlc2hvbGQKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDQwKTsKLQkJCQkvLyBEaXNhYmxlIE9GRE0gUGFydAotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfVFJNdXhQYXIsIGJNYXNrQnl0ZTIsIDB4MSk7Ci0JCQkJU2NhblJlZ2lzdGVyID0gcnRsODE5Ml9RdWVyeUJCUmVnKGRldiwgck9GRE0wX1J4RGV0ZWN0b3IxLGJNYXNrRFdvcmQpOwotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfUnhEZXRlY3RvcjEsIDB4ZiwgMHhmKTsKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgwKTsKLQkJCX0KKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gSGlnaCBQd3IgRGlzYWJsZSEhXG4iKTsKKwkJCWlmKHByaXYtPkRNRmxhZyAmIEhBTF9ETV9ISVBXUl9ESVNBQkxFKQorCQkJCWJyZWFrOworCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQUFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDE3KTsKKwkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEJBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgxNyk7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDQwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRldfQ01EX0hJR0hfUFdSX0VOQUJMRToKLQkJCS8vaWYocE1nbnRJbmZvLT5iVHVyYm9TY2FuKQotCQkJewotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfWEFBR0NDb3JlMSwgYk1hc2tCeXRlMCwgMHgzNik7Ci0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9YQkFHQ0NvcmUxLCBiTWFza0J5dGUwLCAweDM2KTsKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gSGlnaCBQd3IgRW5hYmxlISFcbiIpOworCQkJaWYocHJpdi0+RE1GbGFnICYgSEFMX0RNX0hJUFdSX0RJU0FCTEUpCisJCQkJYnJlYWs7CisJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckNDSzBfQ0NBLCBiTWFza0J5dGUyLCAweDgzKTsKKwkJCWJyZWFrOwogCi0JCQkJLy8gQ0NBIHRocmVzaG9sZAotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByQ0NLMF9DQ0EsIGJNYXNrQnl0ZTIsIDB4ODMpOwotCQkJCS8vIEVuYWJsZSBPRkRNIFBhcnQKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSTXV4UGFyLCBiTWFza0J5dGUyLCAweDApOworCQljYXNlIEZXX0NNRF9MUFNfRU5URVI6CisJCQlSVF9UUkFDRShDT01QX0NNRCwgIltGVyBDTURdIEVudGVyIExQUyBtb2RlISFcbiIpOworCQkJQ3VycmVudEFJRCA9IHByaXYtPmllZWU4MDIxMS0+YXNzb2NfaWQ7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCAoRldfTFBTX0VOVEVSfCAoKEN1cnJlbnRBSUR8MHhjMDAwKTw8OCkpICAgICk7CisJCQlDaGtGd0NtZElvRG9uZShkZXYpOworCQkJcEhUSW5mby0+SU9UQWN0aW9uIHw9ICBIVF9JT1RfQUNUX0RJU0FCTEVfRURDQV9UVVJCTzsKKwkJCWJyZWFrOwogCi0JCQkJLy9MWk0gQUREIGJlY2F1c2Ugc29tZXRpbWVzIHRoZXJlIGlzIG5vIEZXX0NNRF9ISUdIX1BXUl9ESVNBQkxFLCB0aGlzIHZhbHVlIHdpbGwgYmUgMC4KLQkJCQlpZihTY2FuUmVnaXN0ZXIgIT0gMCl7Ci0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9SeERldGVjdG9yMSwgYk1hc2tEV29yZCwgU2NhblJlZ2lzdGVyKTsKLQkJCQl9CisJCWNhc2UgRldfQ01EX0xQU19MRUFWRToKKwkJCVJUX1RSQUNFKENPTVBfQ01ELCAiW0ZXIENNRF0gTGVhdmUgTFBTIG1vZGUhIVxuIik7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRk01LCBGV19MUFNfTEVBVkUgKTsKKwkJCUNoa0Z3Q21kSW9Eb25lKGRldik7CisJCQlwSFRJbmZvLT5JT1RBY3Rpb24gJj0gICh+SFRfSU9UX0FDVF9ESVNBQkxFX0VEQ0FfVFVSQk8pOworCQkJYnJlYWs7CiAKLQkJCQlpZihwcml2LT5yZl90eXBlID09IFJGXzFUMlIgfHwgcHJpdi0+cmZfdHlwZSA9PSBSRl8yVDJSKQotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgzKTsKLQkJCQllbHNlCi0JCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHhmLCAweDEpOwotCQkJfQorCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQogCi0JcHJpdi0+U2V0RndDbWRJblByb2dyZXNzID0gZmFsc2U7Ly8gQ2xlYXIgRlcgQ01EIG9wZXJhdGlvbiBmbGFnLgorCXByaXYtPlNldEZ3Q21kSW5Qcm9ncmVzcyA9IGZhbHNlOwogCVJUX1RSQUNFKENPTVBfQ01ELCAiPC0tLVNldEZ3Q21kSU9Xb3JrSXRlbUNhbGxiYWNrKClcbiIpOwogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaAppbmRleCBlY2NmNDQ3Li43NDFjNmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVLmgKQEAgLTEsMzMgKzEsNDAgQEAKLS8qCi0gICBUaGlzIGlzIHBhcnQgb2YgcnRsODE4NyBPcGVuU291cmNlIGRyaXZlci4KLSAgIENvcHlyaWdodCAoQykgQW5kcmVhIE1lcmVsbG8gMjAwNC0yMDA1ICA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Ci0gICBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMIChHZW5lcmFsIFB1YmxpYyBMaWNlbmNlKQotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEdQTCBwYXJ0IG9mIHRoZQotICAgb2ZmaWNpYWwgcmVhbHRlayBkcml2ZXIKLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBydGw4MTkyIGRyaXZlciBza2VsZXRvbgotICAgZnJvbSBQYXRyaWMgU2NoZW5rZSAmIEFuZHJlcyBTYWxvbW9uCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgSW50ZWwgUHJvIFdpcmVsZXNzIDIxMDAgR1BMIGRyaXZlcgotCi0gICBXZSB3YW50IHRvIHRhbmtzIHRoZSBBdXRob3JzIG9mIHRob3NlIHByb2plY3RzIGFuZCB0aGUgTmRpc3dyYXBwZXIKLSAgIHByb2plY3QgQXV0aG9ycy4KLSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIFJUTDgxOTJVCisgKgorICogQmFzZWQgb24gdGhlIHI4MTg3IGRyaXZlciwgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4sIGV0IGFsLgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCisgKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiB3bGFuZmFlIDx3bGFuZmFlQHJlYWx0ZWsuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZuZGVmIFI4MTl4VV9ICiAjZGVmaW5lIFI4MTl4VV9ICiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLS8vI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotLy8jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNTEsOSArNTgsNyBAQAogI2RlZmluZSBSVEw4MTlYX0VFUFJPTV9DTURfQ0sJCSgxIDw8IDIpCiAjZGVmaW5lIFJUTDgxOVhfRUVQUk9NX0NNRF9DUwkJKDEgPDwgMykKIAotLy8jZGVmaW5lIFJUTDgxOTJVCiAjZGVmaW5lIFJUTDgxOXhVX01PRFVMRV9OQU1FICJydGw4MTl4VSIKLS8vYWRkZWQgZm9yIEhXIHNlY3VyaXR5LCBqb2huLjA2MjkKICNkZWZpbmUgRkFMU0UgMAogI2RlZmluZSBUUlVFIDEKICNkZWZpbmUgTUFYX0tFWV9MRU4gICAgIDYxCkBAIC0xMTQsNiArMTE5LDcgQEAKIAogI2RlZmluZSBDT01QX1RSQUNFCQkJCUJJVDAJCS8vIEZvciBmdW5jdGlvbiBjYWxsIHRyYWNpbmcuCiAjZGVmaW5lIENPTVBfREJHCQkJCUJJVDEJCS8vIE9ubHkgZm9yIHRlbXBvcmFyeSBkZWJ1ZyBtZXNzYWdlLgorI2RlZmluZSBDT01QX01MTUUJCQkJQklUMQogI2RlZmluZSBDT01QX0lOSVQJCQkJQklUMgkJLy8gZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiAvIGhhbHQgLyByZXNldC4KIAogCkBAIC0xMzcsMTQgKzE0MywxNCBAQAogI2RlZmluZSBDT01QX1NFQwkJCSAgICAgICAgQklUMjAJLy8gRXZlbnQgaGFuZGxpbmcKICNkZWZpbmUgQ09NUF9MRUQJCQkJQklUMjEJLy8gRm9yIExFRC4KICNkZWZpbmUgQ09NUF9SRgkJCQkJQklUMjIJLy8gRm9yIFJGLgotLy8xISEhISEhISEhISEhISEhISEhISEhISEhISEhCisjZGVmaW5lIENPTVBfUlhERVNDCQkJCUJJVDIzCisKICNkZWZpbmUgQ09NUF9SWERFU0MJCQkJQklUMjMJLy8gU2hvdyBSeCBkZXNjIGluZm9ybWF0aW9uIGZvciBTRDMgZGVidWcuIEFkZGVkIGJ5IEFubmllLCAyMDA2LTA3LTE1LgotLy8xLy8xQXR0ZW50aW9uIFBsZWFzZSEhITwxMW4gb3IgODE5MCBzcGVjaWZpYyBjb2RlIHNob3VsZCBiZSBwdXQgYmVsb3cgdGhpcyBsaW5lPgotLy8xISEhISEhISEhISEhISEhISEhISEhISEhISEhCiAKICNkZWZpbmUgQ09NUF9GSVJNV0FSRQkJCQlCSVQyNAkvL2ZvciBmaXJtd2FyZSBkb3dubG9hZGluZwogI2RlZmluZSBDT01QX0hUCQkJCQlCSVQyNQkvLyBGb3IgODAyLjExbiBIVCByZWxhdGVkIGluZm9ybWF0aW9uLiBieSBFbWlseSAyMDA2LTgtMTEKICNkZWZpbmUgQ09NUF9BTVNEVQkJCQlCSVQyNgkvLyBGb3IgQS1NU0RVIERlYnVnZ2luZworI2RlZmluZSBDT01QX1BTCQkJCQlCSVQyNgogCiAjZGVmaW5lIENPTVBfU0NBTgkJCQlCSVQyNwogI2RlZmluZSBDT01QX0NNRAkJCQlCSVQyOApAQCAtMTU5LDggKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgXAogICAgICAgICAgICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7ICAgICAgICAgIFwKICAgICAgICAgfQotLy93YiBhZGRlZCB0byBkZWJ1ZyBvdXQgZGF0YSBidWYKLS8vaWYgeW91IHdhbnQgcHJpbnQgREFUQSBidWZmZXIgcmVsYXRlZCBCQSwgcGxlYXNlIHNldCBpZWVlODAyMTFfZGVidWdfbGV2ZWwgdG8gREFUQXxCQQorCiAjZGVmaW5lIFJUX0RFQlVHX0RBVEEobGV2ZWwsIGRhdGEsIGRhdGFsZW4pICAgICAgXAogICAgICAgICBkb3sgaWYgKChydF9nbG9iYWxfZGVidWdfY29tcG9uZW50ICYgKGxldmVsKSkgPT0gKGxldmVsKSkgICBcCiAgICAgICAgICAgICAgICAgeyAgICAgICBcCkBAIC0xODAsMjUgKzE4NSwxNyBAQAogI2RlZmluZSBSVF9ERUJVR19EQVRBKGxldmVsLCBkYXRhLCBkYXRhbGVuKSBkbyB7fSB3aGlsZSgwKQogI2VuZGlmIC8qIFJUTDgxNjlfREVCVUcgKi8KIAotLy8jaWZkZWYgUlRMODE5MlNVCiAJLy8yVE9ETzogV2Ugc2hvdWxkIGRlZmluZSA4MTkyUyBmaXJtd2FyZSByZWxhdGVkIG1hY3JvIHNldHRpbmdzIGhlcmUhIQogCSNkZWZpbmUgUlRMODE5WF9ERUZBVUxUX1JGX1RZUEUJCQkJUkZfMVQyUgogCSNkZWZpbmUgUlRMODE5WF9UT1RBTF9SRl9QQVRICQkJCTIKIAotCS8vI2RlZmluZSBSdGw4MTlYRndCb290QXJyYXkJCQkJCVJ0bDgxOTJVc2JGd0Jvb3RBcnJheQotCS8vI2RlZmluZSBSdGw4MTlYRndNYWluQXJyYXkJCQkJCVJ0bDgxOTJVc2JGd01haW5BcnJheQotCS8vI2RlZmluZSBSdGw4MTlYRndEYXRhQXJyYXkJCQkJCVJ0bDgxOTJVc2JGd0RhdGFBcnJheQotCiAJI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5X1BHCQkJCVJ0bDgxOTJVc2JNQUNQSFlfQXJyYXlfUEcKIAkjZGVmaW5lIFJ0bDgxOVhNQUNQSFlfQXJyYXkJCQkJCVJ0bDgxOTJVc2JNQUNQSFlfQXJyYXkKIAkjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHQXJyYXkJCQkJCVJ0bDgxOTJVc2JQSFlfUkVHQXJyYXkKIAkjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHXzFUMlJBcnJheQkJCQlSdGw4MTkyVXNiUEhZX1JFR18xVDJSQXJyYXkKLQkvLyNkZWZpbmUgUnRsODE5WFJhZGlvQV9BcnJheQkJCQkJUnRsODE5MlVzYlJhZGlvQV9BcnJheQotCS8vI2RlZmluZSBSdGw4MTlYUmFkaW9CX0FycmF5CQkJCQlSdGw4MTkyVXNiUmFkaW9CX0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUmFkaW9DX0FycmF5CQkJCQlSdGw4MTkyVXNiUmFkaW9DX0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUmFkaW9EX0FycmF5CQkJCQlSdGw4MTkyVXNiUmFkaW9EX0FycmF5CiAKLQkvLzIwMDguMTEuMDYgQWRkLgogCSNkZWZpbmUgUnRsODE5WEZ3SW1hZ2VBcnJheQkJCQkJUnRsODE5MlNVRndJbWdBcnJheQogCSNkZWZpbmUgUnRsODE5WE1BQ19BcnJheQkJCQkJCVJ0bDgxOTJTVU1BQ18yVF9BcnJheQogCSNkZWZpbmUgUnRsODE5WEFHQ1RBQl9BcnJheQkJCQkJUnRsODE5MlNVQUdDVEFCX0FycmF5CkBAIC0yMTIsOCArMjA5LDYgQEAKIAkjZGVmaW5lIFJ0bDgxOVhSYWRpb0JfR01fQXJyYXkJCQkJUnRsODE5MlNVUmFkaW9CX0dNX0FycmF5CiAJI2RlZmluZSBSdGw4MTlYUmFkaW9BX3RvMVRfQXJyYXkJCQkJUnRsODE5MlNVUmFkaW9BX3RvMVRfQXJyYXkKIAkjZGVmaW5lIFJ0bDgxOVhSYWRpb0FfdG8yVF9BcnJheQkJCQlSdGw4MTkyU1VSYWRpb0FfdG8yVF9BcnJheQotLy8jZW5kaWYKLQogLy8KIC8vIFF1ZXVlIFNlbGVjdCBWYWx1ZSBpbiBUeERlc2MKIC8vCkBAIC0yNTYsNyArMjUxLDYgQEAKICNkZWZpbmUgREVTQzkwX1JBVEVNQ1MxNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MGYKICNkZWZpbmUgREVTQzkwX1JBVEVNQ1MzMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKIAotLy8jaWZkZWYgUlRMODE5MlNVCiAvLyBDQ0sgUmF0ZXMsIFR4SFQgPSAwCiAjZGVmaW5lIERFU0M5MlNfUkFURTFNCQkJCQkweDAwCiAjZGVmaW5lIERFU0M5MlNfUkFURTJNCQkJCQkweDAxCkBAIC0yOTIsMTMgKzI4NiwxMiBAQAogI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MxNQkJCQkweDFiCiAjZGVmaW5lIERFU0M5MlNfUkFURU1DUzE1X1NHCQkJMHgxYwogI2RlZmluZSBERVNDOTJTX1JBVEVNQ1MzMgkJCQkweDIwCi0vLyNlbmRpZgogCiAjZGVmaW5lIFJUTDgxOVhfREVGQVVMVF9SRl9UWVBFIFJGXzFUMlIKIAogI2RlZmluZSBJRUVFODAyMTFfV0FUQ0hfRE9HX1RJTUUgICAgMjAwMAogI2RlZmluZQkJUEhZX0JlYWNvbl9SU1NJX1NMSURfV0lOX01BWAkJMTAKLS8vZm9yIHR4cG93ZXJ0cmFja2luZyBieSBhbXkKKy8vZm9yIHR4cG93ZXJ0cmFja2luZwogI2RlZmluZSAJT0ZETV9UYWJsZV9MZW5ndGgJMTkKICNkZWZpbmUJQ0NLX1RhYmxlX2xlbmd0aAkxMgogCkBAIC01MjIsNyArNTE1LDYgQEAKIAl1OCBvdXRfcGlwZTsKIH1ydGw4MTkyX3J4X2luZm8gOwogCi0vL3R5cGVkZWYgc3RydWN0IF9SWF9ERVNDX1NUQVRVU184MTkyU1V7CiB0eXBlZGVmIHN0cnVjdCByeF9kZXNjXzgxOXhfdXNiewogCS8vRFdPUkQgMAogCXUxNgkJTGVuZ3RoOjE0OwpAQCAtNTgyLDc3ICs1NzQsMzQgQEAKIAogCS8vRFdPUkQgNQogCXUzMgkJVFNGTDsKLS8vfVJYX0RFU0NfU1RBVFVTXzgxOTJTVSwgKlBSWF9ERVNDX1NUQVRVU184MTkyU1U7CiB9cnhfZGVzY184MTl4X3VzYiwgKnByeF9kZXNjXzgxOXhfdXNiOwogCiAKIC8vCiAvLyBEcml2ZXIgaW5mbyBhcmUgd3JpdHRlbiB0byB0aGUgYmVnaW5pbmcgb2YgdGhlIFJ4QnVmZmVyCiAvLwotLy90eXBlZGVmIHN0cnVjdCBfUlhfRFJJVkVSX0lORk9fODE5MlN7CiB0eXBlZGVmIHN0cnVjdCByeF9kcnZpbmZvXzgxOXhfdXNiewotCS8vCi0JLy8gRHJpdmVyIGluZm8gY29udGFpbiBQSFkgc3RhdHVzIGFuZCBvdGhlciB2YXJpYWJlbCBzaXplIGluZm8KLQkvLyBQSFkgU3RhdHVzIGNvbnRlbnQgYXMgYmVsb3cKLQkvLwotCi0JLy9EV09SRCAwCi0JLyp1NEJ5dGUJCQlnYWluXzA6NzsKLQl1NEJ5dGUJCQl0cnN3XzA6MTsKLQl1NEJ5dGUJCQlnYWluXzE6NzsKLQl1NEJ5dGUJCQl0cnN3XzE6MTsKLQl1NEJ5dGUJCQlnYWluXzI6NzsKLQl1NEJ5dGUJCQl0cnN3XzI6MTsKLQl1NEJ5dGUJCQlnYWluXzM6NzsKLQl1NEJ5dGUJCQl0cnN3XzM6MTsJKi8KIAl1OAkJCWdhaW5fdHJzd1s0XTsKIAogCS8vRFdPUkQgMQotCS8qdTRCeXRlCQkJcHdkYl9hbGw6ODsKLQl1NEJ5dGUJCQljZm9zaG9fMDo4OwotCXU0Qnl0ZQkJCWNmb3Nob18xOjg7Ci0JdTRCeXRlCQkJY2Zvc2hvXzI6ODsqLwogCXU4CQkJcHdkYl9hbGw7CiAJdTgJCQljZm9zaG9bNF07CiAKIAkvL0RXT1JEIDIKLQkvKnU0Qnl0ZQkJCWNmb3Nob18zOjg7Ci0JdTRCeXRlCQkJY2ZvdGFpbF8wOjg7Ci0JdTRCeXRlCQkJY2ZvdGFpbF8xOjg7Ci0JdTRCeXRlCQkJY2ZvdGFpbF8yOjg7Ki8KIAl1OAkJCWNmb3RhaWxbNF07CiAKIAkvL0RXT1JEIDMKLQkvKnU0Qnl0ZQkJCWNmb3RhaWxfMzo4OwotCXU0Qnl0ZQkJCXJ4ZXZtXzA6ODsKLQl1NEJ5dGUJCQlyeGV2bV8xOjg7Ci0JdTRCeXRlCQkJcnhzbnJfMDo4OyovCiAJY2hhcgkJCSAgICAgICAgcnhldm1bMl07CiAJY2hhcgkJCSAgICAgICAgcnhzbnJbNF07CiAKIAkvL0RXT1JEIDQKLQkvKnU0Qnl0ZQkJCXJ4c25yXzE6ODsKLQl1NEJ5dGUJCQlyeHNucl8yOjg7Ci0JdTRCeXRlCQkJcnhzbnJfMzo4OwotCXU0Qnl0ZQkJCXBkc25yXzA6ODsqLwogCXU4CQkJcGRzbnJbMl07CiAKIAkvL0RXT1JEIDUKLQkvKnU0Qnl0ZQkJCXBkc25yXzE6ODsKLQl1NEJ5dGUJCQljc2lfY3VycmVudF8wOjg7Ci0JdTRCeXRlCQkJY3NpX2N1cnJlbnRfMTo4OwotCXU0Qnl0ZQkJCWNzaV90YXJnZXRfMDo4OyovCiAJdTgJCQljc2lfY3VycmVudFsyXTsKIAl1OAkJCWNzaV90YXJnZXRbMl07CiAKIAkvL0RXT1JEIDYKLQkvKnU0Qnl0ZQkJCWNzaV90YXJnZXRfMTo4OwotCXU0Qnl0ZQkJCXNpZ2V2bTo4OwotCXU0Qnl0ZQkJCW1heF9leF9wd3I6ODsKLQl1NEJ5dGUJCQlleF9pbnRmX2ZsYWc6MTsKLQl1NEJ5dGUJCQlzZ2lfZW46MTsKLQl1NEJ5dGUJCQlyeHNjOjI7Ci0JdTRCeXRlCQkJcmVzZXJ2ZTo0OyovCiAJdTgJCQlzaWdldm07CiAJdTgJCQltYXhfZXhfcHdyOwogCXU4CQkJZXhfaW50Zl9mbGFnOjE7CkBAIC02NjksMTAgKzYxOCw4IEBACiAKICNkZWZpbmUgTUFYX0RFVl9BRERSX1NJWkUJCTggIC8qIHN1cHBvcnQgdGlsbCA2NCBiaXQgYnVzIHdpZHRoIE9TICovCiAjZGVmaW5lIE1BWF9GSVJNV0FSRV9JTkZPUk1BVElPTl9TSVpFICAgMzIgLyoyMDA2LzA0LzMwIGJ5IEVtaWx5IGZvclJUTDgxOTAqLwotLy8jZGVmaW5lIE1BWF84MDJfMTFfSEVBREVSX0xFTkdUSCAgICAgICAgKDQwICsgTUFYX0ZJUk1XQVJFX0lORk9STUFUSU9OX1NJWkUpCiAjZGVmaW5lIEVOQ1JZUFRJT05fTUFYX09WRVJIRUFECQkxMjgKICNkZWZpbmUJVVNCX0hXREVTQ19IRUFERVJfTEVOCQlzaXplb2YodHhfZGVzY184MTl4X3VzYikKLS8vI2RlZmluZSBUWF9QQUNLRVRfU0hJRlRfQllURVMgCSAgCShVU0JfSFdERVNDX0hFQURFUl9MRU4gKyBzaXplb2YodHhfZndpbmZvXzgxOXhfdXNiKSkKICNkZWZpbmUgTUFYX0ZSQUdNRU5UX0NPVU5UCQk4CiAjaWZkZWYgUlRMODE5MlUKICNkZWZpbmUgTUFYX1RSQU5TTUlUX0JVRkZFUl9TSVpFCQkJODAwMApAQCAtNjgxLDE5ICs2MjgsMTUgQEAKICNlbmRpZgogI2RlZmluZSBzY3JjbG5nCQkJCQk0CQkvLyBvY3RldHMgZm9yIGNyYzMyIChGQ1MsIElDVikKIAorI2RlZmluZQkJSEFMX0RNX0RJR19ESVNBQkxFCQkJCUJJVDAKKyNkZWZpbmUJCUhBTF9ETV9ISVBXUl9ESVNBQkxFCQkJCUJJVDEKKwogdHlwZWRlZiBlbnVtIHJmX29wdHlwZQogewogCVJGX09QX0J5X1NXXzN3aXJlID0gMCwKIAlSRl9PUF9CeV9GVywKIAlSRl9PUF9NQVgKIH1yZl9vcF90eXBlOwotLyogODE5MCBMb29wYmFjayBNb2RlIGRlZmluaXRpb24gKi8KLXR5cGVkZWYgZW51bSBfcnRsODE5eFVzYl9sb29wYmFja3sKLQlSVEw4MTl4VV9OT19MT09QQkFDSyA9IDAsCi0JUlRMODE5eFVfTUFDX0xPT1BCQUNLID0gMSwKLQlSVEw4MTl4VV9ETUFfTE9PUEJBQ0sgPSAyLAotCVJUTDgxOXhVX0NDS19MT09QQkFDSyA9IDMsCi19cnRsODE5eFVzYl9sb29wYmFja19lOwogCiAvKiBmb3IgcnRsODE5eCAqLwogdHlwZWRlZiBlbnVtIF9SVF9TVEFUVVN7CkBAIC03MDMsMTYgKzY0NiwxMyBAQAogCVJUX1NUQVRVU19SRVNPVVJDRSA9IDMKIH1SVF9TVEFUVVMsKlBSVF9TVEFUVVM7CiAKLS8vI2lmZGVmIFJUTDgxOTJTVQogdHlwZWRlZiBlbnVtIF9SVEw4MTkyU1VTQl9MT09QQkFDS3sKIAlSVEw4MTkyU1VfTk9fTE9PUEJBQ0sgPSAwLAogCVJUTDgxOTJTVV9NQUNfTE9PUEJBQ0sgPSAxLAogCVJUTDgxOTJTVV9ETUFfTE9PUEJBQ0sgPSAyLAogCVJUTDgxOTJTVV9DQ0tfTE9PUEJBQ0sgPSAzLAogfVJUTDgxOTJTVVNCX0xPT1BCQUNLX0U7Ci0vLyNlbmRpZgogCi0vLytieSBhbXkgMDgwNTA3CiAjZGVmaW5lIE1BWF9SRUNFSVZFX0JVRkZFUl9TSVpFCTkxMDAJLy8gQWRkIHRoaXMgdG8gOTEwMCBieXRlcyB0byByZWNlaXZlIEEtTVNEVSBmcm9tIFJULUFQCiAKIApAQCAtNzkwLDEwICs3MzAsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgX3J0Xzl4X3R4X3JhdGVfaGlzdG9yeSB7CiAJdTMyICAgICAgICAgICAgIGNja1s0XTsKIAl1MzIgICAgICAgICAgICAgb2ZkbVs4XTsKLQkvLyBIVF9NQ1NbMF1bXTogQlc9MCBTRz0wCi0JLy8gSFRfTUNTWzFdW106IEJXPTEgU0c9MAotCS8vIEhUX01DU1syXVtdOiBCVz0wIFNHPTEKLQkvLyBIVF9NQ1NbM11bXTogQlc9MSBTRz0xCiAJdTMyICAgICAgICAgICAgIGh0X21jc1s0XVsxNl07CiB9cnRfdHhfcmFoaXNfdCwgKnBydF90eF9yYWhpc190OwogdHlwZWRlZiBzdHJ1Y3QgX1JUX1NNT09USF9EQVRBXzRSRiB7CkBAIC04MDgsMTEgKzc0NCw2IEBACiB0eXBlZGVmIHN0cnVjdCBTdGF0cwogewogCXVuc2lnbmVkIGxvbmcgdHhyZHU7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4cmR1OwotCS8vdW5zaWduZWQgbG9uZyByeG5vbGFzdDsKLQkvL3Vuc2lnbmVkIGxvbmcgcnhub2RhdGE7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4cmVzZXQ7Ci0vLwl1bnNpZ25lZCBsb25nIHJ4bm9wb2ludGVyOwogCXVuc2lnbmVkIGxvbmcgcnhvazsKIAl1bnNpZ25lZCBsb25nIHJ4ZnJhbWdtZW50OwogCXVuc2lnbmVkIGxvbmcgcnhjbWRwa3RbNF07CQkvLzA4LzA1LzA4IGFteSByeCBjbWQgZWxlbWVudCB0eGZlZWRiYWNrL2JjbiByZXBvcnQvY2ZnIHNldC9xdWVyeQpAQCAtODMyLDE4ICs3NjMsOCBAQAogCXVuc2lnbmVkIGxvbmcgdHhucGVycjsKIAl1bnNpZ25lZCBsb25nIHR4bnBkcm9wOwogCXVuc2lnbmVkIGxvbmcgdHhyZXN1bWVkOwotLy8JdW5zaWduZWQgbG9uZyByeGVycjsKLS8vCXVuc2lnbmVkIGxvbmcgcnhvdmVyZmxvdzsKLS8vCXVuc2lnbmVkIGxvbmcgcnhpbnQ7CiAJdW5zaWduZWQgbG9uZyB0eG5wb2tpbnQ7Ci0vLwl1bnNpZ25lZCBsb25nIHR4aHBva2ludDsKLS8vCXVuc2lnbmVkIGxvbmcgdHhocGVycjsKLS8vCXVuc2lnbmVkIGxvbmcgaW50czsKLS8vCXVuc2lnbmVkIGxvbmcgc2hpbnRzOwogCXVuc2lnbmVkIGxvbmcgdHhvdmVyZmxvdzsKLS8vCXVuc2lnbmVkIGxvbmcgcnhkbWFmYWlsOwotLy8JdW5zaWduZWQgbG9uZyB0eGJlYWNvbjsKLS8vCXVuc2lnbmVkIGxvbmcgdHhiZWFjb25lcnI7CiAJdW5zaWduZWQgbG9uZyB0eGxwb2tpbnQ7CiAJdW5zaWduZWQgbG9uZyB0eGxwZHJvcDsKIAl1bnNpZ25lZCBsb25nIHR4bHBlcnI7CkBAIC05MDksMTQgKzgzMCwxMSBAQAogCXUzMglDdXJyZW50U2hvd1R4YXRlOwogfSBTdGF0czsKIAotCiAvLyBCYW5kd2lkdGggT2Zmc2V0CiAjZGVmaW5lIEhBTF9QUklNRV9DSE5MX09GRlNFVF9ET05UX0NBUkUJCTAKICNkZWZpbmUgSEFMX1BSSU1FX0NITkxfT0ZGU0VUX0xPV0VSCQkJMQogI2RlZmluZSBIQUxfUFJJTUVfQ0hOTF9PRkZTRVRfVVBQRVIJCQkyCiAKLS8vK2J5IGFteSAwODA1MDcKLQogdHlwZWRlZiBzdHJ1Y3QgCUNobmxBY2Nlc3NTZXR0aW5nIHsKIAl1MTYgU0lGU19UaW1lcjsKIAl1MTYgRElGU19UaW1lcjsKQEAgLTk1NiwxNCArODc0LDEyIEBACiAgICAgICAgIFJGX1BTRVVET18xMU4gPSA1LAogfVJUX1JGX1RZUEVfODE5eFUsICpQUlRfUkZfVFlQRV84MTl4VTsKIAotLy8jaWZkZWYgUlRMODE5MlNVCiB0eXBlZGVmIGVudW0gX1JGX1BPV0VSX1NUQVRFewogCVJGX09OLAogCVJGX1NMRUVQLAogCVJGX09GRiwKIAlSRl9TSFVUX0RPV04sCiB9UkZfUE9XRVJfU1RBVEUsICpQUkZfUE9XRVJfU1RBVEU7Ci0vLyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCBfcmF0ZV9hZGFwdGl2ZQogewpAQCAtMTAxNCw3ICs5MzAsNiBAQAogCXU4CQkJCWNjYTsKIAogfSBpbml0X2dhaW4sICpwaW5pdF9nYWluOwotLy9ieSBhbXkgMDYwNgogCiB0eXBlZGVmIHN0cnVjdCBfcGh5X29mZG1fcnhfc3RhdHVzX3JlcG9ydF84MTl4dXNiCiB7CkBAIC0xMDY2LDggKzk4MSwyNiBAQAogCVJUX0NJRF9OZXR0cm9uaXggPSAxMSwKIAlSVF9DSURfRExJTksgPSAxMiwKIAlSVF9DSURfUFJPTkVUID0gMTMsCisJUlRfQ0lEX0NPUkVHQSA9IDE0LAorCVJUX0NJRF84MTl4X0FMUEhBID0gMTUsCisJUlRfQ0lEXzgxOXhfU2l0ZWNvbSA9IDE2LAorCVJUX0NJRF9DQ1ggPSAxNywKKwlSVF9DSURfODE5eF9MZW5vdm8gPSAxOCwKKwlSVF9DSURfODE5eF9RTUkgPSAxOSwKKwlSVF9DSURfODE5eF9FZGltYXhfQmVsa2luID0gMjAsCisJUlRfQ0lEXzgxOXhfU2VyY29tbV9CZWxraW4gPSAyMSwKKwlSVF9DSURfODE5eF9DQU1FTzEgPSAyMiwKKwlSVF9DSURfODE5eF9NU0kgPSAyMywKKwlSVF9DSURfODE5eF9BY2VyID0gMjQsCiB9UlRfQ1VTVE9NRVJfSUQsICpQUlRfQ1VTVE9NRVJfSUQ7CiAKK3R5cGVkZWYgZW51bSBfUlRfT1BfTU9ERXsKKyAgICBSVF9PUF9NT0RFX0FQLAorICAgIFJUX09QX01PREVfSU5GUkFTVFJVQ1RVUkUsCisgICAgUlRfT1BfTU9ERV9JQlNTLAorICAgIFJUX09QX01PREVfTk9fTElOSywKK31SVF9PUF9NT0RFLCAqUFJUX09QX01PREU7CisKIHR5cGVkZWYgZW51bSBfUkVTRVRfVFlQRSB7CiAJUkVTRVRfVFlQRV9OT1JFU0VUID0gMHgwMCwKIAlSRVNFVF9UWVBFX05PUk1BTCA9IDB4MDEsCkBAIC0xMDkzLDggKzEwMjYsNiBAQAogCU5JQ184MTkyU1UgPSA1LAogCX0gbmljX3Q7CiAKLS8vZGVmaW5kZWQgYnkgV0IuIFJlYWR5IHRvIGZpbGwgaGFuZGxlcnMgZm9yIGRpZmZlcmVudCBOSUMgdHlwZXMuCi0vL2FkZCBoYW5kbGUgaGVyZSB3aGVuIG5lY2Vzc2FyeS4KIHN0cnVjdCBydGw4MTl4X29wc3sKIAluaWNfdCBuaWNfdHlwZTsKIAl2b2lkICgqIHJ0bDgxOXhfcmVhZF9lZXByb21faW5mbykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMTEzLDExICsxMDQ0LDEyIEBACiAJc3RydWN0IHJ0bDgxOXhfb3BzKiBvcHM7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CiAJLyogYWRkZWQgZm9yIG1haW50YWluIGluZm8gZnJvbSBlZXByb20gKi8KKwlzaG9ydCBlcHJvbXR5cGU7CiAJdTE2IGVlcHJvbV92aWQ7CiAJdTE2IGVlcHJvbV9waWQ7CiAJdTggIGVlcHJvbV9DdXN0b21lcklEOwogCXU4ICBlZXByb21fU3ViQ3VzdG9tZXJJRDsKLQl1OCAgZWVwcm9tX0NoYW5uZWxQbGFuOworCXUxNiAgZWVwcm9tX0NoYW5uZWxQbGFuOwogCVJUX0NVU1RPTUVSX0lEIEN1c3RvbWVySUQ7CiAJTEVEX1NUUkFURUdZXzgxOXhVc2IJTGVkU3RyYXRlZ3k7CiAJdTggIHR4cXVldWVfdG9fb3V0cGlwZW1hcFs5XTsKQEAgLTExMjksNzYgKzEwNjEsNTUgQEAKIAlpbnQgaXJxOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlODAyMTE7CiAKKwl1OCBSQVRSVGFibGVCaXRtYXA7CisKKwl1MzIJSUNfQ3V0OwogCXNob3J0IGNhcmRfODE5MjsgLyogTzogcnRsODE5MiwgMTpydGw4MTg1IFYgQi9DLCAyOnJ0bDgxODUgViBEICovCi0JdTggY2FyZF84MTkyX3ZlcnNpb247IC8qIGlmIFRDUiByZXBvcnRzIGNhcmQgViBCL0MgdGhpcyBkaXNjcmltaW5hdGVzICovCi0vLwlzaG9ydCBwaHlfdmVyOyAvKiBtZWFuaW5nZnVsIGZvciBydGw4MjI1IDE6QSAyOkIgMzpDICovCisJdTMyIGNhcmRfODE5Ml92ZXJzaW9uOyAvKiBpZiBUQ1IgcmVwb3J0cyBjYXJkIFYgQi9DIHRoaXMgZGlzY3JpbWluYXRlcyAqLwogCXNob3J0IGVuYWJsZV9ncGlvMDsKIAllbnVtIGNhcmRfdHlwZSB7UENJLE1JTklQQ0ksQ0FSREJVUyxVU0J9Y2FyZF90eXBlOwogCXNob3J0IGh3X3BsY3BfbGVuOwogCXNob3J0IHBsY3BfcHJlYW1ibGVfbW9kZTsKIAogCXNwaW5sb2NrX3QgaXJxX2xvY2s7Ci0vLwlzcGlubG9ja190IGlycV90aF9sb2NrOwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAlzcGlubG9ja190IHBzX2xvY2s7CiAgICAgICAgIHN0cnVjdCBtdXRleCBtdXRleDsKKwlib29sIHBzX2ZvcmNlOwogCXNwaW5sb2NrX3QgcmZfbG9jazsgLy91c2VkIHRvIGxvY2sgcmYgd3JpdGUgb3BlcmF0aW9uIGFkZGVkIGJ5IHdiCisJc3BpbmxvY2tfdCByZl9wc19sb2NrOwogCiAJdTE2IGlycV9tYXNrOwotLy8Jc2hvcnQgaXJxX2VuYWJsZWQ7Ci0vLwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvL2NvbW1lbnQgdGhpcyBvdXQuCiAJc2hvcnQgY2hhbjsKIAlzaG9ydCBzZW5zOwogCXNob3J0IG1heF9zZW5zOwogCi0KLQkvLwl1OCBjaHR4cHdyWzE1XTsgLy9jaGFubmVscyBmcm9tIDEgdG8gMTQsIDAgbm90IHVzZWQKLS8vCXU4IGNodHhwd3Jfb2ZkbVsxNV07IC8vY2hhbm5lbHMgZnJvbSAxIHRvIDE0LCAwIG5vdCB1c2VkCi0vLwl1OCBjY2tfdHhwd3JfYmFzZTsKLS8vCXU4IG9mZG1fdHhwd3JfYmFzZTsKLS8vCXU4IGNoYWxsb3dbMTVdOyAvL2NoYW5uZWxzIGZyb20gMSB0byAxNCwgMCBub3QgdXNlZAogCXNob3J0IHVwOwogCXNob3J0IGNyY21vbjsgLy9pZiAxIGFsbG93IGJhZCBjcmMgZnJhbWUgcmVjZXB0aW9uIGluIG1vbml0b3IgbW9kZQotLy8Jc2hvcnQgcHJpc21faGRyOworCWJvb2wgYlN1cnByaXNlUmVtb3ZlZDsKIAotLy8Jc3RydWN0IHRpbWVyX2xpc3Qgc2Nhbl90aW1lcjsKLQkvKnNob3J0IHNjYW5wZW5kaW5nOwotCXNob3J0IHN0b3BzY2FuOyovCi0vLwlzcGlubG9ja190IHNjYW5fbG9jazsKLS8vCXU4IGFjdGl2ZV9wcm9iZTsKLQkvL3U4IGFjdGl2ZV9zY2FuX251bTsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHd4X3NlbTsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHJmX3NlbTsgLy91c2VkIHRvIGxvY2sgcmYgd3JpdGUgb3BlcmF0aW9uIGFkZGVkIGJ5IHdiLCBtb2RpZmllZCBieSBkYXZpZAotLy8Jc2hvcnQgaHdfd2VwOwogCi0vLwlzaG9ydCBkaWdwaHk7Ci0vLwlzaG9ydCBhbnRiOwotLy8Jc2hvcnQgZGl2ZXJzaXR5OwotLy8JdTggY3NfdHJlc2hvbGQ7Ci0vLwlzaG9ydCByY3JfY3NlbnNlOwogCXU4IHJmX3R5cGU7IC8vMCBtZWFucyAxVDJSLCAxIG1lYW5zIDJUNFIKIAlSVF9SRl9UWVBFXzgxOXhVIHJmX2NoaXA7CiAKLS8vCXUzMiBrZXkwWzRdOwogCXNob3J0ICgqcmZfc2V0X3NlbnMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsc2hvcnQgc2Vucyk7CiAJdTggKCpyZl9zZXRfY2hhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1OCBjaCk7CiAJdm9pZCAoKnJmX2Nsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl2b2lkICgqcmZfaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JLy9zaG9ydCByYXRlOwogCXNob3J0IHByb21pc2M7CisgICAgICAgIHUzMiBtY19maWx0ZXJbMl07CiAJLypzdGF0cyovCiAJc3RydWN0IFN0YXRzIHN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcl9kZXY7CiAKIAkvKlJYIHN0dWZmKi8KLS8vCXUzMiAqcnhyaW5nOwotLy8JdTMyICpyeHJpbmd0YWlsOwotLy8JZG1hX2FkZHJfdCByeHJpbmdkbWE7CiAJc3RydWN0IHVyYiAqKnJ4X3VyYjsKIAlzdHJ1Y3QgdXJiICoqcnhfY21kX3VyYjsKIAotLyogbW9kaWZpZWQgYnkgZGF2YWQgZm9yIFJ4IHByb2Nlc3MgKi8KKy8qIGZvciBSeCBwcm9jZXNzICovCiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKIApAQCAtMTIwOSw2ICsxMTIwLDcgQEAKIAogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGlycV9yeF90YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdHhfdGFza2xldDsKIAlzdHJ1Y3QgdXJiICpyeHVyYl90YXNrOwogCiAJLy8yIFR4IFJlbGF0ZWQgdmFyaWFibGVzCkBAIC0xMjM1LDYgKzExNDcsNyBAQAogCXN0cnVjdCAJQ2hubEFjY2Vzc1NldHRpbmcgIENoYW5uZWxBY2Nlc3NTZXR0aW5nOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dxOworICAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbWNhc3Rfd3E7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8vZm9yIHJ0bDgxOXhVc2IKQEAgLTEyNDQsMjEgKzExNTcsMjggQEAKIAlib29sIAliRGN1dDsKIAlib29sIGJDdXJyZW50UnhBZ2dyRW5hYmxlOwogCXU4IFJmX01vZGU7IC8vYWRkIGZvciBGaXJtd2FyZSBSRiAtUi9XIHN3aXRjaAorCXU4IEZ3UnN2ZFR4UGFnZUNmZzsKIAlwcnRfZmlybXdhcmUJCXBGaXJtd2FyZTsKLQlydGw4MTl4VXNiX2xvb3BiYWNrX2UJTG9vcGJhY2tNb2RlOworCVJUTDgxOTJTVVNCX0xPT1BCQUNLX0UJTG9vcGJhY2tNb2RlOwogCWJvb2wgdXNiX2Vycm9yOwogCiAJdTE2IEVFUFJPTVR4UG93ZXJEaWZmOwogCXU4IEVFUFJPTVRoZXJtYWxNZXRlcjsKIAl1OCBFRVBST01Qd0RpZmY7CiAJdTggRUVQUk9NQ3J5c3RhbENhcDsKKwl1OCBFRVBST01CbHVldG9vdGhDb2V4aXN0OwogCXU4IEVFUFJPTV9EZWZfVmVyOwogCXU4IEVFUFJPTVR4UG93ZXJMZXZlbENDSzsvLyBDQ0sgY2hhbm5lbCAxfjE0CiAJdTggRUVQUk9NVHhQb3dlckxldmVsQ0NLX1YxWzNdOwogCXU4IEVFUFJPTVR4UG93ZXJMZXZlbE9GRE0yNEdbM107IC8vIE9GRE0gMi40RyBjaGFubmVsIDF+MTQKIAl1OCBFRVBST01UeFBvd2VyTGV2ZWxPRkRNNUdbMjRdOwkvLyBPRkRNIDVHCiAKLS8vUlRMODE5MlNVCisJdTggRUVQUk9NT3B0aW9uYWw7CisJdTggU2hvd1JhdGVNb2RlOworCWJvb2wgYkZvcmNlZFNob3dSeFJhdGU7CisKKwl1MzIJUmZSZWdDaG5sVmFsWzJdOworCiAJYm9vbAliRG1EaXNhYmxlUHJvdGVjdDsKIAlib29sCWJJZ25vcmVEaWZmUmF0ZVR4UG93ZXJPZmZzZXQ7CiAKQEAgLTEyNzgsNiArMTE5OCw5IEBACiAJYm9vbAkJRWVwcm9tT3JFZnVzZTsKIAlib29sCQliQm9vdEZyb21FZnVzZTsJLy8gc3lzdGVtIGJvb3QgZm9ybSBFRlVTRQogCXU4ICAJCUVmdXNlTWFwWzJdW0hXU0VUX01BWF9TSVpFXzkyU107CisJdTE2CQlFZnVzZVVzZWRCeXRlczsKKwl1OAkJRWZ1c2VVc2VkUGVyY2VudGFnZTsKKwogCiAJdTggIAkJRUVQUk9NVXNiT3B0aW9uOwogCXU4ICAJCUVFUFJPTVVzYlBoeVBhcmFtWzVdOwpAQCAtMTI5MCw2ICsxMjEzLDggQEAKIAl1OCAgCQlFRVBST01UeFB3clRrTW9kZTsKIAogCXU4ICAJCWJUWFBvd2VyRGF0YVJlYWRGcm9tRUVQT1JNOworCXU4CQlFRVBST01SZWd1bGF0b3J5OworCXU4CQlFRVBST01Qd3JHcm91cFsyXVszXTsKIAogCXU4CQlFRVBST01WZXJzaW9uOwogCXU4CQlFRVBST01Vc2JFbmRQb2ludE51bWJlcjsKQEAgLTEyOTgsNyArMTIyMyw3IEBACiAJdTgJUmZUeFB3ckxldmVsQ2NrWzJdWzE0XTsKIAl1OAlSZlR4UHdyTGV2ZWxPZmRtMVRbMl1bMTRdOwogCXU4CVJmVHhQd3JMZXZlbE9mZG0yVFsyXVsxNF07Ci0JLy8gMjAwOS8wMS8yMCBNSCBBZGQgZm9yIG5ldyBFRVBST00gZm9ybWF0LgorCS8vIG5ldyBFRVBST00gZm9ybWF0LgogCXU4CQkJCQlUeFB3ckh0MjBEaWZmWzJdWzE0XTsJCQkJLy8gSFQgMjA8LT40MCBQd3IgZGlmZgogCXU4CQkJCQlUeFB3ckxlZ2FjeUh0RGlmZlsyXVsxNF07CQkvLyBGb3IgSFQ8LT5sZWdhY3kgcHdyIGRpZmYKIAl1OAkJCQkJVHhQd3JiYW5kRWRnZUh0NDBbMl1bMl07CQkvLyBCYW5kIGVkZ2UgZm9yIEhZIDQwTUhabG93L3VwIGNoYW5uZWwKQEAgLTEzMTAsNyArMTIzNSw2IEBACiAJdTggCQkJCU1pZEhpZ2hQd3JUSFJfTDE7CiAJdTggCQkJCU1pZEhpZ2hQd3JUSFJfTDI7CiAJdTgJCQkJVHhQd3JTYWZldHlGbGFnOwkJCQkvLyBmb3IgVHggcG93ZXIgc2FmZXR5IHNwZWMKLS8vUlRMODE5MlNVCiAKIC8qUEhZIHJlbGF0ZWQqLwogCUJCX1JFR0lTVEVSX0RFRklOSVRJT05fVAlQSFlSZWdEZWZbNF07CS8vUmFkaW8gQS9CL0MvRApAQCAtMTMyMyw4ICsxMjQ3LDExIEBACiAJdTMyCVB3cl9UcmFjazsKIAl1OAlUeFBvd2VyRGlmZjsKIAl1OAlBbnRlbm5hVHhQd0RpZmZbMl07CQkJCS8vIEFudGVubmEgZ2FpbiBvZmZzZXQsIGluZGV4IDAgZm9yIEIsIDEgZm9yIEMsIGFuZCAyIGZvciBECisJdTgJVGhlcm1hbE1ldGVyWzJdOyAvLyBUaGVybWFsTWV0ZXIsIGluZGV4IDAgZm9yIFJGSUMwLCBhbmQgMSBmb3IgUkZJQzEKKwl1OAlUaGVybWFsVmFsdWU7CiAJdTgJQ3J5c3RhbENhcDsJCQkJCQkvLyBDcnlzdGFsQ2FwLgotCXU4CVRoZXJtYWxNZXRlclsyXTsJCQkJLy8gVGhlcm1hbE1ldGVyLCBpbmRleCAwIGZvciBSRklDMCwgYW5kIDEgZm9yIFJGSUMxCisJdTgJQmx1ZXRvb3RoQ29leGlzdDsKKwl1OAlFeHRlcm5hbFBBOwogCiAJdTgJQ2NrUHdFbmw7CiAJLy8gVXNlIHRvIGNhbGN1bGF0ZSBQV0JELgpAQCAtMTMzNywyNCArMTI2NCwyMiBAQAogCXU4CVN3Q2hubFN0ZXA7CiAJdTgJU2V0QldNb2RlSW5Qcm9ncmVzczsKIAlIVF9DSEFOTkVMX1dJRFRICQlDdXJyZW50Q2hhbm5lbEJXOworCWJvb2wgYkNobmxQbGFuRnJvbUhXOwogCXU4ICAgICAgQ2hhbm5lbFBsYW47CisJdTE2CVJlZ0NoYW5uZWxQbGFuOwogCXU4ICAgICAgcHdyR3JvdXBDbnQ7CiAJLy8gODE5MCA0ME1IeiBtb2RlCiAJLy8KIAl1OAluQ3VyNDBNaHpQcmltZVNDOwkvLyBDb250cm9sIGNoYW5uZWwgc3ViLWNhcnJpZXIKLQkvLyBKb3NlcGggdGVzdCBmb3Igc2hvcnRlbiBSRiBjb25maWd1cmF0aW9uIHRpbWUuCi0JLy8gV2Ugc2F2ZSBSRiByZWcwIGluIHRoaXMgdmFyaWFibGUgdG8gcmVkdWNlIFJGIHJlYWRpbmcuCi0JLy8KKwogCXUzMgkJCQkJUmZSZWcwVmFsdWVbNF07CiAJdTggCQkJCQlOdW1Ub3RhbFJGUGF0aDsKIAlib29sIAkJCQlicmZwYXRoX3J4ZW5hYmxlWzRdOwogCS8vUkYgc2V0IHJlbGF0ZWQKIAlib29sCQkJCVNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3M7Ci0vLytieSBhbXkgMDgwNTA3CisKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaF9kb2dfdGltZXI7CiAKLS8vK2J5IGFteSAwODA1MTUgZm9yIGR5bmFtaWMgbWVjaGVuaXNtCi0JLy9BZGQgYnkgYW15IFR4IFBvd2VyIENvbnRyb2wgZm9yIE5lYXIvRmFyIFJhbmdlIDIwMDgvMDUvMTUKIAlib29sCWJkeW5hbWljX3R4cG93ZXI7ICAvL2JEeW5hbWljVHhQb3dlcgogCWJvb2wJYkR5bmFtaWNUeEhpZ2hQb3dlcjsgIC8vIFR4IGhpZ2ggcG93ZXIgc3RhdGUKIAlib29sCWJEeW5hbWljVHhMb3dQb3dlcjsgIC8vIFR4IGxvdyBwb3dlciBzdGF0ZQpAQCAtMTM2MywxNyArMTI4OCwxOCBAQAogCiAJYm9vbAlic3RvcmVfbGFzdF9kdHBmbGFnOwogCWJvb2wJYnN0YXJ0X3R4Y3RybF9ieWR0cDsgICAvL0RlZmluZSB0byBkaXNjcmltaW5hdGUgb24gSGlnaCBwb3dlciBTdGF0ZSBvciBvbiBzaXRlc3V2ZXkgdG8gY2hhbmdlIFR4IGdhaW4gaW5kZXgKLQkvL0FkZCBieSBhbXkgZm9yIFJhdGUgQWRhcHRpdmUKKwogCXJhdGVfYWRhcHRpdmUgcmF0ZV9hZGFwdGl2ZTsKLQkvL0FkZCBieSBhbXkgZm9yIFRYIHBvd2VyIHRyYWNraW5nCi0JLy8yMDA4LzA1LzE1ICBNYXJzIE9QRU4vQ0xPU0UgVFggUE9XRVIgVFJBQ0tJTkcKKwkvLyBUWCBwb3dlciB0cmFja2luZwogICAgICAgIHR4YmJnYWluX3N0cnVjdCB0eGJiZ2Fpbl90YWJsZVtUeEJCR2FpblRhYmxlTGVuZ3RoXTsKICAgICAgICB1OAlFRVBST01UeFBvd2VyVHJhY2tFbmFibGU7CiAJdTgJCQkgICB0eHBvd2VyX2NvdW50Oy8vRm9yIDYgc2VjIGRvIHRyYWNraW5nIGFnYWluCiAJYm9vbAkJCSAgIGJ0eHBvd2VyX3RyYWNraW5nSW5pdDsKIAl1OAkJCSAgIE9GRE1faW5kZXg7CiAJdTgJCQkgICBDQ0tfaW5kZXg7Ci0JLy8yMDA3LzA5LzEwIE1hcnMgQWRkIENDSyBUWCBQb3dlciBUcmFja2luZworCXU4CQkJICAgUmVjb3JkX0NDS18yME1pbmRleDsKKwl1OAkJCSAgIFJlY29yZF9DQ0tfNDBNaW5kZXg7CisJLy8gQ0NLIFRYIFBvd2VyIFRyYWNraW5nCiAJY2NrdHhiYmdhaW5fc3RydWN0CWNja190eGJiZ2Fpbl90YWJsZVtDQ0tUeEJCR2FpblRhYmxlTGVuZ3RoXTsKIAljY2t0eGJiZ2Fpbl9zdHJ1Y3QJY2NrX3R4YmJnYWluX2NoMTRfdGFibGVbQ0NLVHhCQkdhaW5UYWJsZUxlbmd0aF07CiAJdTggcmZhX3R4cG93ZXJ0cmFja2luZ2luZGV4OwpAQCAtMTM5MCwxMCArMTMxNiwxNSBAQAogCWJvb2wgYmNja19pbl9jaDE0OwogCWJvb2wgYnR4cG93ZXJkYXRhX3JlYWRmcm9tRUVQT1JNOwogCXUxNiAJVFNTSV8xM2RCbTsKKwl1OAlDQ0tQcmVzZW50QXR0ZW50dWF0aW9uXzIwTWRlZmF1bHQ7CisJdTgJQ0NLUHJlc2VudEF0dGVudHVhdGlvbl80ME1kZWZhdWx0OworCWNoYXIJQ0NLUHJlc2VudEF0dGVudHVhdGlvbl9kaWZmZXJlbmNlOworCWNoYXIJQ0NLUHJlc2VudEF0dGVudHVhdGlvbjsKKwlib29sIGJETUluaXRpYWxHYWluRW5hYmxlOwogCS8vRm9yIEJhY2t1cCBJbml0aWFsIEdhaW4KIAlpbml0X2dhaW4gaW5pdGdhaW5fYmFja3VwOwogCXU4IERlZmF1bHRJbml0aWFsR2Fpbls0XTsKLQkvLyBGb3IgRURDQSBUdXJibyBtb2RlLCBBZGRlZCBieSBhbXkgMDgwNTE1LgorCS8vIEZvciBFRENBIFR1cmJvIG1vZGUKIAlib29sCQliaXNfYW55X25vbmJlcGt0czsKIAlib29sCQliY3VycmVudF90dXJib19FRENBOwogCWJvb2wJCWJpc19jdXJfcmRsc3RhdGU7CkBAIC0xNDA3LDE3ICsxMzM4LDIzIEBACiAJdTgJZnJhbWVzeW5jOwogCXUzMiAJZnJhbWVzeW5jQzM0OwogCXU4ICAgCWZyYW1lc3luY01vbml0b3I7Ci0gICAgICAgIAkvL0FkZGVkIGJ5IGFteSAwODA1MTYgIGZvciBSWCByZWxhdGVkCisgICAgICAgIAkvLyBSWCByZWxhdGVkCiAJdTE2IAlucnhBTVBEVV9zaXplOwogCXU4IAlucnhBTVBEVV9hZ2dyX251bTsKIAotCS8vYnkgYW15IGZvciBncGlvCisJLy8gZ3BpbwogCSBib29sIGJId1JhZGlvT2ZmOwogCi0JLy9ieSBhbXkgZm9yIHJlc2V0X2NvdW50CisJYm9vbCBpc1JGT2ZmOworCWJvb2wgYkluUG93ZXJTYXZlTW9kZTsKKworCWJvb2wgUkZDaGFuZ2VJblByb2dyZXNzOworCWJvb2wgUmVnUmZPZmY7CisJdTgJYkh3UmZPZmZBY3Rpb247CisKIAl1MzIgcmVzZXRfY291bnQ7CiAJYm9vbCBicGJjX3ByZXNzZWQ7Ci0JLy9ieSBhbXkgZm9yIGRlYnVnCisJLy8gZGVidWcKIAl1MzIgdHhwb3dlcl9jaGVja2NudDsKIAl1MzIgdHhwb3dlcl90cmFja2luZ19jYWxsYmFja19jbnQ7CiAJdTggdGhlcm1hbF9yZWFkX3ZhbFs0MF07CkBAIC0xNDI2LDcgKzEzNjMsNyBAQAogCXUzMiBjY2t0eHBvd2VyX2FkanVzdGNudF9jaDE0OwogCXU4IHR4X2Z3aW5mb19mb3JjZV9zdWJjYXJyaWVybW9kZTsKIAl1OCB0eF9md2luZm9fZm9yY2Vfc3ViY2FycmllcnZhbDsKLQkvL2J5IGFteSBmb3Igc2lsZW50IHJlc2V0CisJLy8gc2lsZW50IHJlc2V0CiAJUkVTRVRfVFlQRQlSZXNldFByb2dyZXNzOwogCWJvb2wJCWJGb3JjZWRTaWxlbnRSZXNldDsKIAlib29sCQliRGlzYWJsZU5vcm1hbFJlc2V0Q2hlY2s7CkBAIC0xNDM1LDExICsxMzcyLDExIEBACiAJaW50CQlJcnBQZW5kaW5nQ291bnQ7CiAJYm9vbAkJYlJlc2V0SW5Qcm9ncmVzczsKIAlib29sCQlmb3JjZV9yZXNldDsKKwlib29sCQlmb3JjZV9scHM7CiAJdTgJCUluaXRpYWxHYWluT3BlcmF0ZVR5cGU7CiAKIAl1MTYJCVNpZnNUaW1lOwogCi0JLy9kZWZpbmUgd29yayBpdGVtIGJ5IGFteSAwODA1MjYKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHVwZGF0ZV9iZWFjb25fd3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3YXRjaF9kb2dfd3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayB0eHBvd2VyX3RyYWNraW5nX3dxOwpAQCAtMTQ0OCw4ICsxMzg1LDcgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRpYWxnYWluX29wZXJhdGVfd3E7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcHJpdl93cTsKLS8vI2lmZGVmIFJUTDgxOTJTVQotCS8vbHptIGFkZCBmb3IgODE5MlMKKwogCSB1MzIgCQkJSW50ck1hc2s7CiAJLy8gUkYgYW5kIEJCIGFjY2VzcyByZWxhdGVkIHN5bmNocm9uaXphdGlvbiBmbGFncy4KIAlib29sCQkJCWJDaGFuZ2VCQkluUHJvZ3Jlc3M7IC8vIEJhc2VCYW5kIFJXIGlzIHN0aWxsIGluIHByb2dyZXNzLgpAQCAtMTQ2NCw3ICsxNDAwLDYgQEAKIAl1OAkJCQlUaGVybWFsUmVhZEJhY2tJbmRleDsJCQkvL2RlYnVnIG9ubHkKIAl1OAkJCQlUaGVybWFsUmVhZFZhbFs0MF07CQkJCS8vZGVidWcgb25seQogCi0JLy8gRm9yIEhDVCB0ZXN0LCAyMDA1LjA3LjE1LCBieSByY25qa28uCiAJLy8gbm90IHJlYWxpemUgdHJ1ZSwganVzdCBkZWZpbmUgaXQsIHNldCBpdCAwIGRlZmF1bHQsIGJlY2F1c2Ugc29tZSBmdW5jIHVzZSBpdAogCWJvb2wJCQkJYkluSGN0VGVzdDsKIApAQCAtMTQ4MSw3ICsxNDE2LDYgQEAKIAljaGFyCQkJCQlSRl9DX1R4UHdEaWZmOwkJCQkJLy8gQW50ZW5uYSBnYWluIG9mZnNldCwgcmYtYyB0byByZi1hCiAKIAlib29sCWJSRlNpT3JQaTsvLzA9c2ksIDE9cGkuCi0JLy9sem0gYWRkIGZvciA4MTkyUwogCiAJYm9vbCBTZXRGd0NtZEluUHJvZ3Jlc3M7IC8vaXMgc2V0IEZXIENNRCBpbiBQcm9ncmVzcz8gOTJTIG9ubHkKIAl1OCBDdXJyZW50RndDbWRJTzsKQEAgLTE0OTUsMjUgKzE0MjksMTcgQEAKIAlMRURfODE5eFVzYgkJCVN3TGVkMDsKIAlMRURfODE5eFVzYgkJCVN3TGVkMTsKICAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUmVnVXNlTGVkOwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJQmxpbmtXb3JrSXRlbTsgCisJc3RydWN0IHdvcmtfc3RydWN0CQlCbGlua1dvcmtJdGVtOwogCS8qIGFkZGVkIGZvciBsZWQgY29udHJvbCAqLwogCXUxNgkJCQlGd0NtZElPTWFwOwogCXUzMgkJCQlGd0NtZElPUGFyYW07Ci0JdTgJCQkJRE1GbGFnOyAKKwl1OAkJCQlETUZsYWc7CiAKIAogCiAKIH1yODE5Ml9wcml2OwogCi0vLyBmb3IgcnRsODE4NwotLy8gbm93IG1pcmdpbmcgdG8gcnRsODE4N0IKLS8qCi10eXBlZGVmIGVudW17Ci0JTE9XX1BSSU9SSVRZID0gMHgwMiwKLQlOT1JNX1BSSU9SSVRZCi0JfSBwcmlvcml0eV90OwotKi8KIC8vZm9yIHJ0bDgxODdCCiB0eXBlZGVmIGVudW17CiAJQlVMS19QUklPUklUWSA9IDB4MDEsCkBAIC0xNTQyLDYgKzE0NjgsOSBAQAogfTsKICNlbmRpZgogCit2b2lkIExlZENvbnRyb2w4MTkyU1VzYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBMRURfQ1RMX01PREUgTGVkQWN0aW9uKTsKK3ZvaWQgSW5pdFN3TGVkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgRGVJbml0U3dMZWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc2hvcnQgcnRsODE5MlNVX3R4X2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHNob3J0IHJ0bDgxOTJTVV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiogc2tiKTsKIGJvb2wgRmlybXdhcmVEb3dubG9hZDkyUyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE1NjcsNyArMTQ5Niw2IEBACiB2b2lkIHJ0bDgxOTJfdHhfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiB2b2lkIHJ0bDgxOTJfZGlzYXNzb2NpYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotLy92b2lkIGZpeF9yeF9maWZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBydGw4MTg1X3NldF9yZl9waW5zX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHUzMiBhKTsKIAogdm9pZCBydGw4MTkyX3NldF9hbmFwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHUzMiBhKTsKQEAgLTE1ODIsNyArMTUxMCw2IEBACiB2b2lkIHdyaXRlX3BoeV9vZmRtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkciwgdTMyIGRhdGEpOwogdm9pZCBydGw4MTg1X3R4X2FudGVubmEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYW50KTsKIHZvaWQgcnRsODE5Ml9zZXRfcnhjb25mKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotLy9zaG9ydCBjaGVja19uaWNfZW5vdWdoX2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcHJpb3JpdHlfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBydGw4MTl4dXNiX2JlYWNvbl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHUxNiAgdHhfcmF0ZSk7CiB2b2lkIENhbVJlc2V0QWxsRW50cnkoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiB2b2lkIEVuYWJsZUhXU2VjdXJpdHlDb25maWc4MTkyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCmluZGV4IDFiNjg5MDYuLjY5NzBjOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKICN1bmRlZiBMT09QX1RFU1QKICN1bmRlZiBEVU1QX1JYCkBAIC0xNjIsNiArMTYzLDggQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHJ0bDgxOTJfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgcnRsODE5Ml91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxOTJfbmV0ZGV2X29wczsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHJvY19uZXRkZXZfbm90aWZpZXI7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBydGw4MTkyX3VzYl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gUlRMODE5eFVfTU9EVUxFX05BTUUsCSAgICAgICAgICAvKiBEcml2ZXIgbmFtZSAgICovCkBAIC0yNTIsNTMgKzI1NSw0OSBAQAogewogCWludCBpLCBtYXhfY2hhbj0tMSwgbWluX2NoYW49LTE7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7Ci0Jc3dpdGNoIChjaGFubmVsX3BsYW4pCi0JewotCQljYXNlIENPVU5UUllfQ09ERV9GQ0M6Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX0lDOgotCQljYXNlIENPVU5UUllfQ09ERV9FVFNJOgotCQljYXNlIENPVU5UUllfQ09ERV9TUEFJTjoKLQkJY2FzZSBDT1VOVFJZX0NPREVfRlJBTkNFOgotCQljYXNlIENPVU5UUllfQ09ERV9NS0s6Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX01LSzE6Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX0lTUkFFTDoKLQkJY2FzZSBDT1VOVFJZX0NPREVfVEVMRUM6Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX01JQzoKLQkJewotCQkJRG90MTFkX0luaXQoaWVlZSk7Ci0JCQlpZWVlLT5iR2xvYmFsRG9tYWluID0gZmFsc2U7Ci0JCQkvL2FjdHVyYWxseSA4MjI1ICYgODI1NiByZiBjaGlwIG9ubHkgc3VwcG9ydCBCLEcsMjROIG1vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJpdi0+cmZfY2hpcCA9PSBSRl84MjI1KSB8fCAocHJpdi0+cmZfY2hpcCA9PSBSRl84MjU2KSB8fCAocHJpdi0+cmZfY2hpcCA9PSBSRl82MDUyKSkKLQkJCXsKLQkJCQltaW5fY2hhbiA9IDE7Ci0JCQkJbWF4X2NoYW4gPSAxNDsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlSVF9UUkFDRShDT01QX0VSUiwgInVua25vd24gcmYgY2hpcCwgY2FuJ3Qgc2V0IGNoYW5uZWwgbWFwIGluIGZ1bmN0aW9uOiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQl9Ci0JCQlpZiAoQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5MZW4gIT0gMCl7Ci0JCQkJLy8gQ2xlYXIgb2xkIGNoYW5uZWwgbWFwCi0JCQkJbWVtc2V0KEdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXAsIDAsIHNpemVvZihHRVRfRE9UMTFEX0lORk8oaWVlZSktPmNoYW5uZWxfbWFwKSk7Ci0JCQkJLy8gU2V0IG5ldyBjaGFubmVsIG1hcAotCQkJCWZvciAoaT0wO2k8Q2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5MZW47aSsrKQotCQkJCXsKLQkJCQkJaWYgKENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uQ2hhbm5lbFtpXSA8IG1pbl9jaGFuIHx8IENoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uQ2hhbm5lbFtpXSA+IG1heF9jaGFuKQotCQkJCQlicmVhazsKLQkJCQkJR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcFtDaGFubmVsUGxhbltjaGFubmVsX3BsYW5dLkNoYW5uZWxbaV1dID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKKworCWllZWUtPmJHbG9iYWxEb21haW4gPSBmYWxzZTsKKwlzd2l0Y2ggKHByaXYtPnJmX2NoaXApIHsKKwljYXNlIFJGXzgyMjU6CisJY2FzZSBSRl84MjU2OgorCWNhc2UgUkZfNjA1MjoKKwkJbWluX2NoYW4gPSAxOworCQltYXhfY2hhbiA9IDE0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoIiVzKCk6IHVua25vd24gcmYgY2hpcCwgY2FuJ3Qgc2V0IGNoYW5uZWwgbWFwXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCWJyZWFrOworCX0KKwlpZiAoQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5MZW4gIT0gMCkgeworCQltZW1zZXQoR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcCwgMCwKKwkJCQlzaXplb2YoR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcCkpOworCisJCWZvciAoaSA9IDA7IGkgPCBDaGFubmVsUGxhbltjaGFubmVsX3BsYW5dLkxlbjsgaSsrKSB7CisJCQlpZiAoQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5DaGFubmVsW2ldIDwgbWluX2NoYW4gfHwgQ2hhbm5lbFBsYW5bY2hhbm5lbF9wbGFuXS5DaGFubmVsW2ldID4gbWF4X2NoYW4pCisJCQkJYnJlYWs7CisJCQlHRVRfRE9UMTFEX0lORk8oaWVlZSktPmNoYW5uZWxfbWFwW0NoYW5uZWxQbGFuW2NoYW5uZWxfcGxhbl0uQ2hhbm5lbFtpXV0gPSAxOwogCQl9Ci0JCWNhc2UgQ09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU46Ci0JCXsKLQkJCUdFVF9ET1QxMURfSU5GTyhpZWVlKS0+YkVuYWJsZWQgPSAwOy8vdGhpcyBmbGFnIGVuYWJsZWQgdG8gZm9sbG93IDExZCBjb3VudHJ5IElFIHNldHRpbmcsIG90aGVyd2lzZSwgaXQgc2hhbGwgZm9sbG93IGdsb2JhbCBkb21haW4gc2V0dGluZ3MuCi0JCQlEb3QxMWRfUmVzZXQoaWVlZSk7Ci0JCQlpZWVlLT5iR2xvYmFsRG9tYWluID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwl9CisJc3dpdGNoIChjaGFubmVsX3BsYW4pIHsKKwljYXNlIENPVU5UUllfQ09ERV9HTE9CQUxfRE9NQUlOOgorCQlpZWVlLT5iR2xvYmFsRG9tYWluID0gdHJ1ZTsKKwkJZm9yIChpID0gMTI7IGkgPD0gMTQ7IGkrKykKKwkJCUdFVF9ET1QxMURfSU5GTyhpZWVlKS0+Y2hhbm5lbF9tYXBbaV0gPSAyOworCQlpZWVlLT5JYnNzU3RhcnRDaG5sID0gMTA7CisJCWllZWUtPmlic3NfbWF4am9pbl9jaGFsID0gMTE7CisJCWJyZWFrOworCWNhc2UgQ09VTlRSWV9DT0RFX1dPUkxEX1dJREVfMTM6CisJCXByaW50ayhLRVJOX0lORk8gIndvcmxkIHdpZGUgMTNcbiIpOworCQlmb3IgKGkgPSAxMjsgaSA8PSAxMzsgaSsrKQorCQkJR0VUX0RPVDExRF9JTkZPKGllZWUpLT5jaGFubmVsX21hcFtpXSA9IDI7CisJCWllZWUtPklic3NTdGFydENobmwgPSAxMDsKKwkJaWVlZS0+aWJzc19tYXhqb2luX2NoYWwgPSAxMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWVlZS0+SWJzc1N0YXJ0Q2hubCA9IDE7CisJCWllZWUtPmlic3NfbWF4am9pbl9jaGFsID0gMTQ7CisJCWJyZWFrOwogCX0KIAlyZXR1cm47CiB9CkBAIC05OTEsMTUgKzk5MCwyNCBAQAogCXJldHVybiBsZW47CiB9CiAKLXZvaWQgcnRsODE5Ml9wcm9jX21vZHVsZV9pbml0KHZvaWQpCitpbnQgcnRsODE5Ml9wcm9jX21vZHVsZV9pbml0KHZvaWQpCiB7CisJaW50IHJldDsKKwogCVJUX1RSQUNFKENPTVBfSU5JVCwgIkluaXRpYWxpemluZyBwcm9jIGZpbGVzeXN0ZW0iKTsKIAlydGw4MTkyX3Byb2M9Y3JlYXRlX3Byb2NfZW50cnkoUlRMODE5eFVfTU9EVUxFX05BTUUsIFNfSUZESVIsIGluaXRfbmV0LnByb2NfbmV0KTsKKwlpZiAoIXJ0bDgxOTJfcHJvYykKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwcm9jX25ldGRldl9ub3RpZmllcik7CisJaWYgKHJldCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoUlRMODE5eFVfTU9EVUxFX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKIHZvaWQgcnRsODE5Ml9wcm9jX21vZHVsZV9yZW1vdmUodm9pZCkKIHsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHJvY19uZXRkZXZfbm90aWZpZXIpOwogCXJlbW92ZV9wcm9jX2VudHJ5KFJUTDgxOXhVX01PRFVMRV9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7CiB9CiAKQEAgLTEwMjcsOCArMTAzNSw3IEBACiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJyZWdpc3RlcnMtZSIsIHByaXYtPmRpcl9kZXYpOwogCS8vCXJlbW92ZV9wcm9jX2VudHJ5KCJjY2stcmVnaXN0ZXJzIixwcml2LT5kaXJfZGV2KTsKIAkvLwlyZW1vdmVfcHJvY19lbnRyeSgib2ZkbS1yZWdpc3RlcnMiLHByaXYtPmRpcl9kZXYpOwotCQkvL3JlbW92ZV9wcm9jX2VudHJ5KGRldi0+bmFtZSwgcnRsODE5Ml9wcm9jKTsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoIndsYW4wIiwgcnRsODE5Ml9wcm9jKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkocHJpdi0+ZGlyX2Rldi0+bmFtZSwgcnRsODE5Ml9wcm9jKTsKIAkJcHJpdi0+ZGlyX2RldiA9IE5VTEw7CiAJfQogfQpAQCAtMTE0NSw2ICsxMTUyLDI1IEBACiAJCSAgICAgIGRldi0+bmFtZSk7CiAJfQogfQorCitzdGF0aWMgaW50IHByb2NfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gcHRyOworCisJaWYgKG5ldF9kZXYtPm5ldGRldl9vcHMgPT0gJnJ0bDgxOTJfbmV0ZGV2X29wcyAmJgorCSAgICBldmVudCA9PSBORVRERVZfQ0hBTkdFTkFNRSkgeworCQlydGw4MTkyX3Byb2NfcmVtb3ZlX29uZShuZXRfZGV2KTsKKwkJcnRsODE5Ml9wcm9jX2luaXRfb25lKG5ldF9kZXYpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcm9jX25ldGRldl9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHByb2NfbmV0ZGV2X2V2ZW50LAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTUlTQyBTVFVGRi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzM1NSw2ICs3MzgxLDggQEAKICAgICAgICAgUlRfVFJBQ0UoQ09NUF9JTklULCAiT29wczogaSdtIGNvbWluZ1xuIik7CiAKIAlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCByODE5Ml9wcml2KSk7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZpbnRmLT5kZXYpOwpAQCAtNzM5Miw3ICs3NDIwLDggQEAKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCXJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKKwkJZ290byBmYWlsOwogCVJUX1RSQUNFKENPTVBfSU5JVCwgImRldiBuYW1lPT09PT09PT4gJXNcbiIsZGV2LT5uYW1lKTsKIAlydGw4MTkyX3Byb2NfaW5pdF9vbmUoZGV2KTsKIApAQCAtNzQ3NCwzNSArNzUwMyw2MyBAQAogCXJldCA9IGllZWU4MDIxMV9jcnlwdG9faW5pdCgpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZWVlODAyMTFfY3J5cHRvX2luaXQoKSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZmFpbF9jcnlwdG87CiAJfQogCiAJcmV0ID0gaWVlZTgwMjExX2NyeXB0b190a2lwX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX2NyeXB0b190a2lwX2luaXQoKSBmYWlsZWQgJWRcbiIsCiAJCQlyZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfY3J5cHRvX3RraXA7CiAJfQogCiAJcmV0ID0gaWVlZTgwMjExX2NyeXB0b19jY21wX2luaXQoKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExX2NyeXB0b19jY21wX2luaXQoKSBmYWlsZWQgJWRcbiIsCiAJCQlyZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfY3J5cHRvX2NjbXA7CiAJfQogCiAJcmV0ID0gaWVlZTgwMjExX2NyeXB0b193ZXBfaW5pdCgpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZWVlODAyMTFfY3J5cHRvX3dlcF9pbml0KCkgZmFpbGVkICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGZhaWxfY3J5cHRvX3dlcDsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJcbkxpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIFJUTDgxOTIgYmFzZWQgV0xBTiBjYXJkc1xuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29weXJpZ2h0IChjKSAyMDA3LTIwMDgsIFJlYWxzaWwgV2xhblxuIik7CiAJUlRfVFJBQ0UoQ09NUF9JTklULCAiSW5pdGlhbGl6aW5nIG1vZHVsZSIpOwogCVJUX1RSQUNFKENPTVBfSU5JVCwgIldpcmVsZXNzIGV4dGVuc2lvbnMgdmVyc2lvbiAlZCIsIFdJUkVMRVNTX0VYVCk7Ci0JcnRsODE5Ml9wcm9jX21vZHVsZV9pbml0KCk7Ci0JcmV0dXJuIHVzYl9yZWdpc3RlcigmcnRsODE5Ml91c2JfZHJpdmVyKTsKKworCXJldCA9IHJ0bDgxOTJfcHJvY19tb2R1bGVfaW5pdCgpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJydGw4MTkyX3Byb2NfbW9kdWxlX2luaXQoKSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbF9wcm9jOworCX0KKworCXJldCA9IHVzYl9yZWdpc3RlcigmcnRsODE5Ml91c2JfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigidXNiX3JlZ2lzdGVyKCkgZmFpbGVkICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWxfdXNiOworCX0KKworCXJldHVybiAwOworCitmYWlsX3VzYjoKKwlydGw4MTkyX3Byb2NfbW9kdWxlX3JlbW92ZSgpOworZmFpbF9wcm9jOgorCWllZWU4MDIxMV9jcnlwdG9fd2VwX2V4aXQoKTsKK2ZhaWxfY3J5cHRvX3dlcDoKKwlpZWVlODAyMTFfY3J5cHRvX2NjbXBfZXhpdCgpOworZmFpbF9jcnlwdG9fY2NtcDoKKwlpZWVlODAyMTFfY3J5cHRvX3RraXBfZXhpdCgpOworZmFpbF9jcnlwdG9fdGtpcDoKKwlpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCgpOworZmFpbF9jcnlwdG86CisjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworCWllZWU4MDIxMV9kZWJ1Z19leGl0KCk7CisjZW5kaWYKKwlyZXR1cm4gcmV0OwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9kbS5jCmluZGV4IGZhNWUyNDQuLmNlN2UxZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYwpAQCAtMjY3Myw3ICsyNjczLDYgQEAKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gcHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvOwotCS8vUFNUQV9RT1MJCQlwU3RhUW9zID0gcE1nbnRJbmZvLT5wU3RhUW9zOwogCiAJLy8gS2VlcCBwYXN0IFR4L1J4IHBhY2tldCBjb3VudCBmb3IgUlQtdG8tUlQgRURDQSB0dXJiby4KIAlzdGF0aWMgdW5zaWduZWQgbG9uZwkJCWxhc3RUeE9rQ250ID0gMDsKQEAgLTI2ODEsMTAgKzI2ODAsOCBAQAogCXVuc2lnbmVkIGxvbmcJCQkJY3VyVHhPa0NudCA9IDA7CiAJdW5zaWduZWQgbG9uZwkJCQljdXJSeE9rQ250ID0gMDsKIAotCS8vCi0JLy8gRG8gbm90IGJlIFR1cmJvIGlmIGl0J3MgdW5kZXIgV2lGaSBjb25maWcgYW5kIFFvcyBFbmFibGVkLCBiZWNhdXNlIHRoZSBFRENBIHBhcmFtZXRlcnMKLQkvLyBzaG91bGQgZm9sbG93IHRoZSBzZXR0aW5ncyBmcm9tIFFBUC4gQnkgQnJ1Y2UsIDIwMDctMTItMDcuCi0JLy8KKwl1MzIJCQkJRURDQV9CRV9VTCA9IGVkY2Ffc2V0dGluZ19VTFtwSFRJbmZvLT5JT1RQZWVyXTsKKwl1MzIJCQkJRURDQV9CRV9ETCA9IGVkY2Ffc2V0dGluZ19ETFtwSFRJbmZvLT5JT1RQZWVyXTsKIAkjaWYgMQogCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKIAkJZ290byBkbV9DaGVja0VkY2FUdXJib19FWElUOwpAQCAtMjY5Myw2ICsyNjkwLDE0IEBACiAJaWYocHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX0RJU0FCTEVfRURDQV9UVVJCTykKIAkJZ290byBkbV9DaGVja0VkY2FUdXJib19FWElUOwogCisJaWYocHJpdi0+aWVlZTgwMjExLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX0ZPUkNFRF9FTkFCTEVfQkVfVFhPUCkKKwl7CisJCWlmKCEoRURDQV9CRV9VTCAmIDB4ZmZmZjAwMDApKQorCQkJRURDQV9CRV9VTCB8PSAweDAwNWUwMDAwOworCQlpZighKEVEQ0FfQkVfREwgJiAweGZmZmYwMDAwKSkKKwkJCUVEQ0FfQkVfREwgfD0gMHgwMDVlMDAwMDsKKwl9CisKIAl7CiAJCXU4KiBwZWVybmFtZVsxMV0gPSB7InVua25vd24iLCAicmVhbHRlayIsICJyZWFsdGVrXzkyc2UiLCAiYnJvYWRjb20iLCAicmFsaW5rIiwgImF0aGVyb3MiLCAiY2lzY28iLCAibWFydmVsbCIsICI5MnVfc29mdGFwIiwgInNlbGZfc29mdGFwIn07CiAJCXN0YXRpYyBpbnQgd2JfdG1wID0gMDsKQEAgLTI3MTQsNyArMjcxOSw3IEBACiAJCQl7CiAJCQkJaWYocHJpdi0+YmlzX2N1cl9yZGxzdGF0ZSB8fCAhcHJpdi0+YmN1cnJlbnRfdHVyYm9fRURDQSkKIAkJCQl7Ci0JCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCBlZGNhX3NldHRpbmdfVUxbcEhUSW5mby0+SU9UUGVlcl0pOworCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgRURDQV9CRV9VTCk7CiAJCQkJCXByaXYtPmJpc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yNzIyLDcgKzI3MjcsNyBAQAogCQkJewogCQkJCWlmKCFwcml2LT5iaXNfY3VyX3JkbHN0YXRlIHx8ICFwcml2LT5iY3VycmVudF90dXJib19FRENBKQogCQkJCXsKLQkJCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgRURDQVBBUkFfQkUsIGVkY2Ffc2V0dGluZ19ETFtwSFRJbmZvLT5JT1RQZWVyXSk7CisJCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCBFRENBX0JFX0RMKTsKIAkJCQkJcHJpdi0+YmlzX2N1cl9yZGxzdGF0ZSA9IHRydWU7CiAJCQkJfQogCQkJfQpAQCAtMjczNCw3ICsyNzM5LDcgQEAKIAkJCXsKIAkJCQlpZighcHJpdi0+YmlzX2N1cl9yZGxzdGF0ZSB8fCAhcHJpdi0+YmN1cnJlbnRfdHVyYm9fRURDQSkKIAkJCQl7Ci0JCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCBlZGNhX3NldHRpbmdfRExbcEhUSW5mby0+SU9UUGVlcl0pOworCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgRURDQV9CRV9ETCk7CiAJCQkJCXByaXYtPmJpc19jdXJfcmRsc3RhdGUgPSB0cnVlOwogCQkJCX0KIAkJCX0KQEAgLTI3NDIsNyArMjc0Nyw3IEBACiAJCQl7CiAJCQkJaWYocHJpdi0+YmlzX2N1cl9yZGxzdGF0ZSB8fCAhcHJpdi0+YmN1cnJlbnRfdHVyYm9fRURDQSkKIAkJCQl7Ci0JCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCBlZGNhX3NldHRpbmdfVUxbcEhUSW5mby0+SU9UUGVlcl0pOworCQkJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBFRENBUEFSQV9CRSwgRURDQV9CRV9VTCk7CiAJCQkJCXByaXYtPmJpc19jdXJfcmRsc3RhdGUgPSBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yNzcxLDcgKzI3NzYsNyBAQAogCQkJCQkoKCh1MzIpKHFvc19wYXJhbWV0ZXJzLT5jd19tYXhbMF0pKTw8IEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUKXwKIAkJCQkJKCgodTMyKShxb3NfcGFyYW1ldGVycy0+Y3dfbWluWzBdKSk8PCBBQ19QQVJBTV9FQ1dfTUlOX09GRlNFVCl8CiAJCQkJCSgodTMyKXUxYkFJRlMgPDwgQUNfUEFSQU1fQUlGU19PRkZTRVQpKTsKLQkJCS8vd3JpdGVfbmljX2R3b3JkKGRldiwgV0RDQVBBUkFfQUREW2ldLCB1NGJBY1BhcmFtKTsKKwogCQkJCXdyaXRlX25pY19kd29yZChkZXYsIEVEQ0FQQVJBX0JFLCAgdTRiQWNQYXJhbSk7CiAKIAkJCS8vIENoZWNrIEFDTSBiaXQuCkBAIC0yNzgwLDcgKzI3ODUsNyBAQAogCQkJLy8gVE9ETzogIE1vZGlmaWVkIHRoaXMgcGFydCBhbmQgdHJ5IHRvIHNldCBhY20gY29udHJvbCBpbiBvbmx5IDEgSU8gcHJvY2Vzc2luZyEhCiAKIAkJCQkJUEFDSV9BSUZTTglwQWNpQWlmc24gPSAoUEFDSV9BSUZTTikmKHFvc19wYXJhbWV0ZXJzLT5haWZzWzBdKTsKLQkJCQkJdTgJCUFjbUN0cmwgPSByZWFkX25pY19ieXRlKCBkZXYsIEFjbUh3Q3RybCApOworCQkJCQl1OAkJQWNtQ3RybCA9IHByaXYtPkFjbUNvbnRyb2wgfCAweDE7CiAJCQkJCWlmKCBwQWNpQWlmc24tPmYuQUNNICkKIAkJCQkJeyAvLyBBQ00gYml0IGlzIDEuCiAJCQkJCQlBY21DdHJsIHw9IEFjbUh3X0JlcUVuOwpAQCAtMjgwNCw3ICsyODA5LDcgQEAKIAlwcml2LT5pZWVlODAyMTEtPmJpc19hbnlfbm9uYmVwa3RzID0gZmFsc2U7CiAJbGFzdFR4T2tDbnQgPSBwcml2LT5zdGF0cy50eGJ5dGVzdW5pY2FzdDsKIAlsYXN0UnhPa0NudCA9IHByaXYtPnN0YXRzLnJ4Ynl0ZXN1bmljYXN0OwotfQkvLyBkbV9DaGVja0VkY2FUdXJibworfQogI2VuZGlmCiAKIGV4dGVybiB2b2lkIERNX0NUU1RvU2VsZlNldHRpbmcoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsdTMyIERNX1R5cGUsIHUzMiBETV9WYWx1ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV93eC5jCmluZGV4IGE3Y2M2ZjkuLjIwMDViODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfd3guYwpAQCAtMSwyMSArMSwyMyBAQAotLyoKLSAgIFRoaXMgZmlsZSBjb250YWlucyB3aXJlbGVzcyBleHRlbnNpb24gaGFuZGxlcnMuCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgUmVhbHRlayBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIExpbnV4IGRldmljZSBkcml2ZXIgZm9yIFJUTDgxOTJVCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogd2xhbmZhZSA8d2xhbmZhZUByZWFsdGVrLmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgVGhpcyBpcyBwYXJ0IG9mIHJ0bDgxODAgT3BlblNvdXJjZSBkcml2ZXIuCi0gICBDb3B5cmlnaHQgKEMpIEFuZHJlYSBNZXJlbGxvIDIwMDQtMjAwNSAgPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICAgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5jZSkKLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBHUEwgcGFydAotICAgb2YgdGhlIG9mZmljaWFsIHJlYWx0ZWsgZHJpdmVyLgotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIHJ0bDgxODAgZHJpdmVyIHNrZWxldG9uCi0gICBmcm9tIFBhdHJpYyBTY2hlbmtlICYgQW5kcmVzIFNhbG9tb24uCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgSW50ZWwgUHJvIFdpcmVsZXNzIDIxMDAgR1BMIGRyaXZlci4KLQotICAgV2Ugd2FudCB0byB0YW5rcyB0aGUgQXV0aG9ycyBvZiB0aG9zZSBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gICBwcm9qZWN0IEF1dGhvcnMuCi0qLwogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSAicjgxOTJVLmgiCkBAIC0yNDgsNiArMjUwLDcgQEAKICAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICp0YXJnZXQ7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpsYXRlc3QgPSBOVUxMOwogCWludCBuYW1lX2xlbjsKIAogICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwpAQCAtMjU5LDEzICsyNjIsMjAgQEAKICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0YXJnZXQsICZpZWVlLT5uZXR3b3JrX2xpc3QsIGxpc3QpIHsKICAgICAgICAgICAgICAgICBpZiAoICh0YXJnZXQtPnNzaWRfbGVuID09IG5hbWVfbGVuKSAmJgogCQkgICAgIChzdHJuY21wKHRhcmdldC0+c3NpZCwgKGNoYXIqKXdycXUtPmRhdGEucG9pbnRlciwgbmFtZV9sZW4pPT0wKSl7Ci0JCQlpZih0YXJnZXQtPndwYV9pZV9sZW4+MCB8fCB0YXJnZXQtPnJzbl9pZV9sZW4+MCApCi0JCQkJLy9zZXQgZmxhZ3M9MSB0byBpbmRpY2F0ZSB0aGlzIGFwIGlzIFdQQQotCQkJCXdycXUtPmRhdGEuZmxhZ3MgPSAxOwotCQkJZWxzZSB3cnF1LT5kYXRhLmZsYWdzID0gMDsKKwkJCWlmICgobGF0ZXN0ID09IE5VTEwpIHx8KHRhcmdldC0+bGFzdF9zY2FubmVkID4gbGF0ZXN0LT5sYXN0X3NjYW5uZWQpKQorCQkJCWxhdGVzdCA9IHRhcmdldDsKIAorCQl9CisgICAgICAgIH0KIAotCQlicmVhazsKKyAgICAgICAgaWYobGF0ZXN0ICE9IE5VTEwpCisgICAgICAgIHsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSBsYXRlc3QtPlNpZ25hbFN0cmVuZ3RoOworCisJCWlmKGxhdGVzdC0+d3BhX2llX2xlbj4wIHx8IGxhdGVzdC0+cnNuX2llX2xlbj4wICkgeworCQkJd3JxdS0+ZGF0YS5mbGFncyA9IDE7CisJCX0gZWxzZSB7CisJCQl3cnF1LT5kYXRhLmZsYWdzID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDYwLDE0ICs0NzAsNiBAQAogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwogCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE2OwogCi0vLwlyYW5nZS0+cmV0cnlfY2FwYTsJLyogV2hhdCByZXRyeSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KLS8vCXJhbmdlLT5yZXRyeV9mbGFnczsJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIHJldHJ5IGxpbWl0ICovCi0vLwlyYW5nZS0+cl90aW1lX2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGlmZSAqLwotLy8JcmFuZ2UtPm1pbl9yZXRyeTsJLyogTWluaW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLwotLy8JcmFuZ2UtPm1heF9yZXRyeTsJLyogTWF4aW1hbCBudW1iZXIgb2YgcmV0cmllcyAqLwotLy8JcmFuZ2UtPm1pbl9yX3RpbWU7CS8qIE1pbmltYWwgcmV0cnkgbGlmZXRpbWUgKi8KLS8vCXJhbmdlLT5tYXhfcl90aW1lOwkvKiBNYXhpbWFsIHJldHJ5IGxpZmV0aW1lICovCi0KIAogCWZvciAoaSA9IDAsIHZhbCA9IDA7IGkgPCAxNDsgaSsrKSB7CiAKQEAgLTEwMTEsNiArMTAxMyw3MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcjgxOTJfd3hfc2V0X3Bta2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7CisJc3RydWN0IGl3X3Bta3NhKiAgcFBNSyA9IChzdHJ1Y3QgaXdfcG1rc2EqKWV4dHJhOworCWludAlpbnRSZXR1cm4gPSBmYWxzZTsKKworCXN3aXRjaCAocFBNSy0+Y21kKQorCXsKKwkJY2FzZSBJV19QTUtTQV9BREQ6CisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BNS0lEX0NBQ0hFOyBpKyspCisJCQl7CisJCQkJaWYgKG1lbWNtcChpZWVlLT5QTUtJRExpc3RbaV0uQnNzaWQsIHBQTUstPmJzc2lkLnNhX2RhdGEsIEVUSF9BTEVOKSA9PSAwKQorCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgCQkJbWVtY3B5KGllZWUtPlBNS0lETGlzdFtpXS5QTUtJRCwgcFBNSy0+cG1raWQsIElXX1BNS0lEX0xFTik7CisJCQkJCW1lbWNweShpZWVlLT5QTUtJRExpc3RbaV0uQnNzaWQsIHBQTUstPmJzc2lkLnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJCQkJaWVlZS0+UE1LSURMaXN0W2ldLmJVc2VkID0gdHJ1ZTsKKwkJCQkJaW50UmV0dXJuID0gdHJ1ZTsKKwkJCQkJZ290byBfX0VYSVRfXzsKKwkJCQl9CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBOVU1fUE1LSURfQ0FDSEU7IGkrKykKKwkJCXsKKwkJCQlpZiAoaWVlZS0+UE1LSURMaXN0W2ldLmJVc2VkID09IGZhbHNlKQorCQkJCXsKKwkJCQkJbWVtY3B5KGllZWUtPlBNS0lETGlzdFtpXS5QTUtJRCwgcFBNSy0+cG1raWQsIElXX1BNS0lEX0xFTik7CisJCQkJCW1lbWNweShpZWVlLT5QTUtJRExpc3RbaV0uQnNzaWQsIHBQTUstPmJzc2lkLnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJCQkJaWVlZS0+UE1LSURMaXN0W2ldLmJVc2VkID0gdHJ1ZTsKKwkJCQkJaW50UmV0dXJuID0gdHJ1ZTsKKwkJCQkJZ290byBfX0VYSVRfXzsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIElXX1BNS1NBX1JFTU9WRToKKwkJCWZvciAoaSA9IDA7IGkgPCBOVU1fUE1LSURfQ0FDSEU7IGkrKykKKwkJCXsKKwkJCQlpZiAobWVtY21wKGllZWUtPlBNS0lETGlzdFtpXS5Cc3NpZCwgcFBNSy0+YnNzaWQuc2FfZGF0YSwgRVRIX0FMRU4pID09IHRydWUpCisJCQkJeworCQkJCQltZW1zZXQoJmllZWUtPlBNS0lETGlzdFtpXSwgMHgwMCwgc2l6ZW9mKFJUX1BNS0lEX0xJU1QpKTsKKwkJCQkJaW50UmV0dXJuID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCSAgICAgICAgfQorCQkJYnJlYWs7CisKKwkJY2FzZSBJV19QTUtTQV9GTFVTSDoKKwkJCW1lbXNldCgmaWVlZS0+UE1LSURMaXN0WzBdLCAweDAwLCAoc2l6ZW9mKFJUX1BNS0lEX0xJU1QpICogTlVNX1BNS0lEX0NBQ0hFKSk7CisgICAgICAgICAgICBpbnRSZXR1cm4gPSB0cnVlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworX19FWElUX186CisJcmV0dXJuIChpbnRSZXR1cm4pOworCit9CisKIHN0YXRpYyBpbnQgcjgxOTJfd3hfc2V0X2dlbl9pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCkBAIC0xMDkzLDcgKzExNTksNyBAQAogCU5VTEwsLy9yODE5Ml93eF9nZXRfYXV0aCwvL05VTEwsIAkJCS8qIFNJT0NTSVdBVVRIICovCiAJcjgxOTJfd3hfc2V0X2VuY19leHQsIAkJCS8qIFNJT0NTSVdFTkNPREVFWFQgKi8KIAlOVUxMLC8vcjgxOTJfd3hfZ2V0X2VuY19leHQsLy9OVUxMLCAJCQkvKiBTSU9DU0lXRU5DT0RFRVhUICovCi0JTlVMTCwgCQkJLyogU0lPQ1NJV1BNS1NBICovCisJcjgxOTJfd3hfc2V0X3Bta2lkLCAvKiBTSU9DU0lXUE1LU0EgKi8KIAlOVUxMLCAJCQkgLyotLS1ob2xlLS0tKi8KIAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmMKaW5kZXggYThlOWQyZC4uN2FiOWUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmMKQEAgLTEsMTMgKzEsMjIgQEAKLS8qCi0gKiAoYykgQ29weXJpZ2h0IDIwMDgsIFJlYWxURUsgVGVjaG5vbG9naWVzIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBSZWFsdGVrIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogTGludXggZGV2aWNlIGRyaXZlciBmb3IgUlRMODE5MlUKICAqCi0gKiBNb2R1bGU6IHI4MTl4dXNiX2NtZHBrdC5jCi0gKiAoUlRMODE5MCBUWC9SWCBjb21tYW5kIHBhY2tldCBoYW5kbGVyIFNvdXJjZSBDIEZpbGUpCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgogICoKLSAqIE5vdGU6IFRoZSBtb2R1bGUgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIFRYIGFuZCBSWCBjb21tYW5kIHBhY2tldC4KLSAqIDEuVFg6IFNlbmQgc2V0IGFuZCBxdWVyeSBjb25maWd1cmF0aW9uIGNvbW1hbmQgcGFja2V0LgotICogMi5SWDogUmVjZWl2ZSB0eCBmZWVkYmFjaywgYmVhY29uIHN0YXRlLCBxdWVyeSBjb25maWd1cmF0aW9uLCBjb21tYW5kIHBhY2tldC4KLSAqLworICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIHdsYW5mYWUgPHdsYW5mYWVAcmVhbHRlay5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSAicjgxOTJVLmgiCiAjaW5jbHVkZSAicjgxOXhVX2NtZHBrdC5oIgogCkBAIC0xOSwxOSArMjgsMTMgQEAKIAljYl9kZXNjCQkgICAgKnRjYl9kZXNjOwogCXVuc2lnbmVkIGNoYXIJICAgICpwdHJfYnVmOwogCi0JLyogUGxhdGZvcm1BY3F1aXJlU3BpbkxvY2soQWRhcHRlciwgUlRfVFhfU1BJTkxPQ0spOyAqLwotCiAJLyoKIAkgKiBHZXQgVENCIGFuZCBsb2NhbCBidWZmZXIgZnJvbSBjb21tb24gcG9vbC4KIAkgKiAoSXQgaXMgc2hhcmVkIGJ5IENtZFEsIE1nbnRRLCBhbmQgVVNCIGNvYWxlc2NlIERhdGFRKQogCSAqLwogCXNrYiAgPSBkZXZfYWxsb2Nfc2tiKFVTQl9IV0RFU0NfSEVBREVSX0xFTiArIERhdGFMZW4gKyA0KTsKLQlpZiAoc2tiID09IE5VTEwpIHsKLQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIoJXMpOiB1bmFibGUgdG8gYWxsb2Mgc2tiIGJ1ZmZlclxuIiwKLQkJCQkJCQkJX19mdW5jX18pOwotCQlydFN0YXR1cyA9IGZhbHNlOwotCQlyZXR1cm4gcnRTdGF0dXM7Ci0JfQorCWlmICghc2tiKQorCQlyZXR1cm4gZmFsc2U7CiAJbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopKHNrYi0+Y2IpLCAmZGV2LCBzaXplb2YoZGV2KSk7CiAJdGNiX2Rlc2MgPSAoY2JfZGVzYyAqKShza2ItPmNiICsgTUFYX0RFVl9BRERSX1NJWkUpOwogCXRjYl9kZXNjLT5xdWV1ZV9pbmRleCA9IFRYQ01EX1FVRVVFOwpAQCAtNTEsNyArNTQsNiBAQAogCQkJcHJpdi0+aWVlZTgwMjExLT5zb2Z0bWFjX2hhcmRfc3RhcnRfeG1pdChza2IsIGRldik7CiAJCX0KIAotCS8vUGxhdGZvcm1SZWxlYXNlU3BpbkxvY2soQWRhcHRlciwgUlRfVFhfU1BJTkxPQ0spOwogCXJldHVybiBydFN0YXR1czsKIH0KIApAQCAtMjI0LDcgKzIyNiw2IEBACiAJaWYgKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CiAJCS8vMiBtYXliZSBuZWVkIGVuZGlhbiB0cmFuc2Zvcm0/CiAJCXJ4X2ludHJfc3RhdHVzLmludGVycnVwdF9zdGF0dXMgPSAqKCh1MzIgKikocG1zZyArIDQpKTsKLQkJLy9yeF9pbnRyX3N0YXR1cy5JbnRlcnJ1cHRTdGF0dXMgPSBOMkg0QllURSgqKChVSU5UMzIgKikocE1zZyArIDQpKSk7CiAKIAkJRE1FU0coImludGVycnVwdCBzdGF0dXMgPSAweCV4XG4iLCByeF9pbnRyX3N0YXR1cy5pbnRlcnJ1cHRfc3RhdHVzKTsKIApAQCAtNDkxLDYgKzQ5MiwxMyBAQAogCQkJY21wa19oYW5kbGVfdHhfcmF0ZV9oaXN0b3J5KGRldiwgcGNtZF9idWZmKTsKIAkJCWNtZF9sZW5ndGggPSBDTVBLX1RYX1JBSElTX1NJWkU7CiAJCQlicmVhazsKKwkJY2FzZSBSWF9UWF9UU1NJX01FQU5fQkFDSzoKKwkJCXsKKwkJCQl1MzIJKnBNc2c7CisJCQkJcE1zZyA9ICh1MzIgKilwY21kX2J1ZmY7CisJCQl9CisJCQljbWRfbGVuZ3RoID0gMzI7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCSBSVF9UUkFDRShDT01QX0VSUiwgIiglcyk6IHVua25vd24gQ01EIEVsZW1lbnRcbiIsCiAJCQkJCQkJCV9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOXhVX2NtZHBrdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmgKaW5kZXggZDNjNTYxNS4uOTU4ODViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5eFVfY21kcGt0LmgKQEAgLTE3Myw2ICsxNzMsNyBAQAogICAgIFJYX0RCR0lORk9fRkVFREJBQ0sgPSA1LAogICAgIFJYX1RYX1BFUl9QS1RfRkVFREJBQ0sgPSA2LAogICAgIFJYX1RYX1JBVEVfSElTVE9SWSA9IDcsCisgICAgUlhfVFhfVFNTSV9NRUFOX0JBQ0sgPSA4LAogICAgIFJYX0NNRF9FTEVfTUFYCiB9IGNtcGtfZWxlbWVudF9lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCmluZGV4IDA0MzljOTAuLjI4OTY5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnCkBAIC0zLDUgKzMsNiBAQAogCWRlcGVuZHMgb24gUENJICYmIFdMQU4gJiYgVVNCCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKKwlzZWxlY3QgQ1JZUFRPCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2RvdDExZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2RvdDExZC5oCmluZGV4IDA4NTFiOWQuLmQ5OWNjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9kb3QxMWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvZG90MTFkLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fSU5DX0RPVDExRF9ICiAKICNpZmRlZiBFTkFCTEVfRE9UMTFECi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExL2llZWU4MDIxMS5oIgogCiAKIHR5cGVkZWYgc3RydWN0IF9DSE5MX1RYUE9XRVJfVFJJUExFIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MjYxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTk1ICswLDAgQEAKLS8qCi0gKiBNZXJnZWQgd2l0aCBtYWlubGluZSBpZWVlODAyMTEuaCBpbiBBdWcgMjAwNC4gIE9yaWdpbmFsIGllZWU4MDJfMTEKLSAqIHJlbWFpbnMgY29weXJpZ2h0IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzCi0gKgotICogUG9ydGlvbnMgb2YgdGhlIG1lcmdlZCBjb2RlIGFyZSBiYXNlZCBvbiBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcwotICogTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyIGZvciBJbnRlcnNpbCBQcmlzbTIvMi41LzMuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIFNTSCBDb21tdW5pY2F0aW9ucyBTZWN1cml0eSBDb3JwIGFuZCBKb3VuaSBNYWxpbmVuCi0gKiA8amttYWxpbmVAY2MuaHV0LmZpPgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsIEpvdW5pIE1hbGluZW4gPGprbWFsaW5lQGNjLmh1dC5maT4KLSAqCi0gKiBBZGFwdGlvbiB0byBhIGdlbmVyaWMgSUVFRSA4MDIuMTEgc3RhY2sgYnkgSmFtZXMgS2V0cmVub3MKLSAqIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogTW9kaWZpZWQgZm9yIFJlYWx0ZWsncyB3aS1maSBjYXJkcyBieSBBbmRyZWEgTWVyZWxsbwotICogPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFNlZSBSRUFETUUgYW5kIENPUFlJTkcgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgSUVFRTgwMjExX0gKLSNkZWZpbmUgSUVFRTgwMjExX0gKLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPiAvKiBFVEhfQUxFTiAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAgIC8qIEFSUkFZX1NJWkUgKi8KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLQotI2luY2x1ZGUgImllZWU4MDIxMS9ydGw4MTl4X0hULmgiCi0jaW5jbHVkZSAiaWVlZTgwMjExL3J0bDgxOXhfQkEuaCIKLSNpbmNsdWRlICJpZWVlODAyMTEvcnRsODE5eF9UUy5oIgotCi0KLSNpZm5kZWYgSVdfTU9ERV9NT05JVE9SCi0jZGVmaW5lIElXX01PREVfTU9OSVRPUiA2Ci0jZW5kaWYKLQotI2lmbmRlZiBJV0VWQ1VTVE9NCi0jZGVmaW5lIElXRVZDVVNUT00gMHg4YzAyCi0jZW5kaWYKLQotCi0jaWZuZGVmIGNvbnRhaW5lcl9vZgotLyoqCi0gKiBjb250YWluZXJfb2YgLSBjYXN0IGEgbWVtYmVyIG9mIGEgc3RydWN0dXJlIG91dCB0byB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUKLSAqCi0gKiBAcHRyOiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4KLSAqIEB0eXBlOiAgICAgICB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgotICogQG1lbWJlcjogICAgIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgd2l0aGluIHRoZSBzdHJ1Y3QuCi0gKgotICovCi0jZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsgICAgICAgICAgICAgICAgICAgICAgXAotCWNvbnN0IHR5cGVvZigoKHR5cGUgKikwKS0+bWVtYmVyKSAoKl9fbXB0ciA9IChwdHIpKTsgICAgXAotCSh0eXBlICopKChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSwgbWVtYmVyKSk7IH0pCi0jZW5kaWYKLQotI2RlZmluZSBLRVlfVFlQRV9OQQkJMHgwCi0jZGVmaW5lIEtFWV9UWVBFX1dFUDQwCQkweDEKLSNkZWZpbmUgS0VZX1RZUEVfVEtJUAkJMHgyCi0jZGVmaW5lIEtFWV9UWVBFX0NDTVAJCTB4NAotI2RlZmluZSBLRVlfVFlQRV9XRVAxMDQJCTB4NQotCi0vKiBhZGRlZCBmb3IgcnRsODE5eCB0eCBwcm9jZWR1cmUgKi8KLSNkZWZpbmUgTUFYX1FVRVVFX1NJWkUJCTB4MTAKLQotLyoKLSAqIDgxOTAgcXVldWUgbWFwcGluZwotICovCi0jZGVmaW5lIEJLX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQkVfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBWSV9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFZPX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgSENDQV9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBUWENNRF9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIE1HTlRfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgSElHSF9RVUVVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNwotI2RlZmluZSBCRUFDT05fUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgTE9XX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVfUVVFVUUKLSNkZWZpbmUgTk9STUFMX1FVRVVFICAgICAgICAgICAgICAgICAgICAgICAgICAgTUdOVF9RVUVVRQotCi0vKiBhZGRlZCBieSBhbXkgZm9yIHBzICovCi0jZGVmaW5lIFNXUkZfVElNRU9VVAkJCQk1MAotCi0vKiBhZGRlZCBieSBhbXkgZm9yIExFQVAgcmVsYXRlZCAqLwotI2RlZmluZSBJRV9DSVNDT19GTEFHX1BPU0lUSU9OCQkweDA4CS8qIEZsYWcgYnl0ZTogYnl0ZSA4LCBudW1iZXJlZCBmcm9tIDAuICovCi0jZGVmaW5lIFNVUFBPUlRfQ0tJUF9NSUMJCQkweDA4CS8qIGJpdDMgKi8KLSNkZWZpbmUgU1VQUE9SVF9DS0lQX1BLCQkJMHgxMAkvKiBiaXQ0ICovCi0vKiBkZWZpbmVkIGZvciBza2IgY2IgZmllbGQgKi8KLS8qIEF0IG1vc3QgMjggYnl0ZSAqLwotdHlwZWRlZiBzdHJ1Y3QgY2JfZGVzYyB7Ci0JLyogVHggRGVzYyBSZWxhdGVkIGZsYWdzICg4LTkpICovCi0JdTggYkxhc3RJbmlQa3Q6MTsKLQl1OCBiQ21kT3JJbml0OjE7Ci0JdTggYkZpcnN0U2VnOjE7Ci0JdTggYkxhc3RTZWc6MTsKLQl1OCBiRW5jcnlwdDoxOwotCXU4IGJUeERpc2FibGVSYXRlRmFsbEJhY2s6MTsKLQl1OCBiVHhVc2VEcml2ZXJBc3NpbmdlZFJhdGU6MTsKLQl1OCBiSHdTZWM6MTsgLyogaW5kaWNhdGUgd2hldGhlciB1c2UgSHcgc2VjdXJpdHkuIFdCICovCi0KLQl1OCByZXNlcnZlZDE7Ci0KLQkvKiBUeCBGaXJtd2FyZSBSZWxhZ2VkIGZsYWdzICgxMC0xMSkqLwotCXU4IGJDVFNFbmFibGU6MTsKLQl1OCBiUlRTRW5hYmxlOjE7Ci0JdTggYlVzZVNob3J0R0k6MTsKLQl1OCBiVXNlU2hvcnRQcmVhbWJsZToxOwotCXU4IGJUeEVuYWJsZUZ3Q2FsY0R1cjoxOwotCXU4IGJBTVBEVUVuYWJsZToxOwotCXU4IGJSVFNTVEJDOjE7Ci0JdTggUlRTU0M6MTsKLQotCXU4IGJSVFNCVzoxOwotCXU4IGJQYWNrZXRCVzoxOwotCXU4IGJSVFNVc2VTaG9ydFByZWFtYmxlOjE7Ci0JdTggYlJUU1VzZVNob3J0R0k6MTsKLQl1OCBiTXVsdGljYXN0OjE7Ci0JdTggYkJyb2FkY2FzdDoxOwotCXU4IGRydl9hZ2dfZW5hYmxlOjE7Ci0JdTggcmVzZXJ2ZWQyOjE7Ci0KLQkvKiBUeCBEZXNjIHJlbGF0ZWQgZWxlbWVudCgxMi0xOSkgKi8KLQl1OCByYXRhX2luZGV4OwotCXU4IHF1ZXVlX2luZGV4OwotCXUxNiB0eGJ1Zl9zaXplOwotCXU4IFJBVFJJbmRleDsKLQl1OCByZXNlcnZlZDY7Ci0JdTggcmVzZXJ2ZWQ3OwotCXU4IHJlc2VydmVkODsKLQotCS8qIFR4IGZpcm13YXJlIHJlbGF0ZWQgZWxlbWVudCgyMC0yNykgKi8KLQl1OCBkYXRhX3JhdGU7Ci0JdTggcnRzX3JhdGU7Ci0JdTggYW1wZHVfZmFjdG9yOwotCXU4IGFtcGR1X2RlbnNpdHk7Ci0JdTggRHJ2QWdnck51bTsKLQl1MTYgcGt0X3NpemU7Ci0JdTggcmVzZXJ2ZWQxMjsKLX0gY2JfZGVzYywgKnBjYl9kZXNjOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBNR05fMU0gICAgICAgICAgICAgICAgICAweDAyCi0jZGVmaW5lIE1HTl8yTSAgICAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgTUdOXzVfNU0gICAgICAgICAgICAgICAgMHgwYgotI2RlZmluZSBNR05fMTFNICAgICAgICAgICAgICAgICAweDE2Ci0KLSNkZWZpbmUgTUdOXzZNICAgICAgICAgICAgICAgICAgMHgwYwotI2RlZmluZSBNR05fOU0gICAgICAgICAgICAgICAgICAweDEyCi0jZGVmaW5lIE1HTl8xMk0gICAgICAgICAgICAgICAgIDB4MTgKLSNkZWZpbmUgTUdOXzE4TSAgICAgICAgICAgICAgICAgMHgyNAotI2RlZmluZSBNR05fMjRNICAgICAgICAgICAgICAgICAweDMwCi0jZGVmaW5lIE1HTl8zNk0gICAgICAgICAgICAgICAgIDB4NDgKLSNkZWZpbmUgTUdOXzQ4TSAgICAgICAgICAgICAgICAgMHg2MAotI2RlZmluZSBNR05fNTRNICAgICAgICAgICAgICAgICAweDZjCi0KLSNkZWZpbmUgTUdOX01DUzAgICAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBNR05fTUNTMSAgICAgICAgICAgICAgICAweDgxCi0jZGVmaW5lIE1HTl9NQ1MyICAgICAgICAgICAgICAgIDB4ODIKLSNkZWZpbmUgTUdOX01DUzMgICAgICAgICAgICAgICAgMHg4MwotI2RlZmluZSBNR05fTUNTNCAgICAgICAgICAgICAgICAweDg0Ci0jZGVmaW5lIE1HTl9NQ1M1ICAgICAgICAgICAgICAgIDB4ODUKLSNkZWZpbmUgTUdOX01DUzYgICAgICAgICAgICAgICAgMHg4NgotI2RlZmluZSBNR05fTUNTNyAgICAgICAgICAgICAgICAweDg3Ci0jZGVmaW5lIE1HTl9NQ1M4ICAgICAgICAgICAgICAgIDB4ODgKLSNkZWZpbmUgTUdOX01DUzkgICAgICAgICAgICAgICAgMHg4OQotI2RlZmluZSBNR05fTUNTMTAgICAgICAgICAgICAgICAweDhhCi0jZGVmaW5lIE1HTl9NQ1MxMSAgICAgICAgICAgICAgIDB4OGIKLSNkZWZpbmUgTUdOX01DUzEyICAgICAgICAgICAgICAgMHg4YwotI2RlZmluZSBNR05fTUNTMTMgICAgICAgICAgICAgICAweDhkCi0jZGVmaW5lIE1HTl9NQ1MxNCAgICAgICAgICAgICAgIDB4OGUKLSNkZWZpbmUgTUdOX01DUzE1ICAgICAgICAgICAgICAgMHg4ZgotCi0vKgotICoJCTgwMi4xMSBNYW5hZ2VtZW50IGZyYW1lIFJlYXNvbiBDb2RlIGZpZWxkCi0gKi8KLWVudW0JX1JlYXNvbkNvZGV7Ci0JdW5zcGVjX3JlYXNvbgk9IDB4MSwKLQlhdXRoX25vdF92YWxpZAk9IDB4MiwKLQlkZWF1dGhfbHZfc3MJPSAweDMsCi0JaW5hY3Rpdml0eQkJPSAweDQsCi0JYXBfb3ZlcmxvYWQgCT0gMHg1LAotCWNsYXNzMl9lcnIJCT0gMHg2LAotCWNsYXNzM19lcnIJCT0gMHg3LAotCWRpc2FzX2x2X3NzIAk9IDB4OCwKLQlhc29jX25vdF9hdXRoCT0gMHg5LAotCi0JLyogLS0tLU1JQ19DSEVDSyAqLwotCW1pY19mYWlsdXJlIAk9IDB4ZSwKLQkvKiAtLS0tRU5EIE1JQ19DSEVDSyAqLwotCi0JLyogUmVhc29uIGNvZGUgZGVmaW5lZCBpbiA4MDIuMTFpIEQxMC4wIHAuMjguICovCi0JaW52YWxpZF9JRQkJPSAweDBkLAotCWZvdXJfd2F5X3Rtb3V0CT0gMHgwZiwKLQl0d29fd2F5X3Rtb3V0CT0gMHgxMCwKLQlJRV9kaXNtYXRjaCAJPSAweDExLAotCWludmFsaWRfR2NpcGhlciA9IDB4MTIsCi0JaW52YWxpZF9QY2lwaGVyID0gMHgxMywKLQlpbnZhbGlkX0FLTVAJPSAweDE0LAotCXVuc3VwX1JTTklFdmVyID0gMHgxNSwKLQlpbnZhbGlkX1JTTklFCT0gMHgxNiwKLQlhdXRoXzgwMl8xeF9mYWlsID0gMHgxNywKLQljaXBlcl9yZWplY3QJCT0gMHgxOCwKLQotCS8qIFJlYXNvbiBjb2RlIGRlZmluZWQgaW4gNy4zLjEuNywgODAyLjFlIEQxMy4wLCBwLjQyLiAqLwotCVFvU191bnNwZWMJCT0gMHgyMCwgLyogMzIgKi8KLQlRQVBfYmFuZHdpZHRoCT0gMHgyMSwgLyogMzMgKi8KLQlwb29yX2NvbmRpdGlvbgk9IDB4MjIsIC8qIDM0ICovCi0Jbm9fZmFjaWxpdHkgCT0gMHgyMywgLyogMzUgKi8KLQkJCQkJCQkvKiBXaGVyZSBpcyAzNj8/PyAqLwotCXJlcV9kZWNsaW5lZAk9IDB4MjUsIC8qIDM3ICovCi0JaW52YWxpZF9wYXJhbQk9IDB4MjYsIC8qIDM4ICovCi0JcmVxX25vdF9ob25vcmVkID0gMHgyNywJLyogMzkgKi8KLQlUU19ub3RfY3JlYXRlZAk9IDB4MkYsIC8qIDQ3ICovCi0JRExfbm90X2FsbG93ZWQJPSAweDMwLCAvKiA0OCAqLwotCWRlc3Rfbm90X2V4aXN0CT0gMHgzMSwgLyogNDkgKi8KLQlkZXN0X25vdF9RU1RBCT0gMHgzMiwgLyogNTAgKi8KLX07Ci0KLQotCi0jZGVmaW5lIGFTaWZzVGltZQkgKChwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5tb2RlID09IElFRUVfQSkgfHwgXAotCQkocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsubW9kZSA9PSBJRUVFX05fMjRHKSB8fCBcCi0JCShwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5tb2RlID09IElFRUVfTl81RykpID8gMTYgOiAxMAotCi0jZGVmaW5lIE1HTVRfUVVFVUVfTlVNIDUKLQotI2RlZmluZSBJRUVFX0NNRF9TRVRfV1BBX1BBUkFNCQkJMQotI2RlZmluZQlJRUVFX0NNRF9TRVRfV1BBX0lFCQkJMgotI2RlZmluZSBJRUVFX0NNRF9TRVRfRU5DUllQVElPTgkJCTMKLSNkZWZpbmUgSUVFRV9DTURfTUxNRQkJCQk0Ci0KLSNkZWZpbmUgSUVFRV9QQVJBTV9XUEFfRU5BQkxFRAkJCTEKLSNkZWZpbmUgSUVFRV9QQVJBTV9US0lQX0NPVU5URVJNRUFTVVJFUwkJMgotI2RlZmluZSBJRUVFX1BBUkFNX0RST1BfVU5FTkNSWVBURUQJCTMKLSNkZWZpbmUgSUVFRV9QQVJBTV9QUklWQUNZX0lOVk9LRUQJCTQKLSNkZWZpbmUgSUVFRV9QQVJBTV9BVVRIX0FMR1MJCQk1Ci0jZGVmaW5lIElFRUVfUEFSQU1fSUVFRV84MDJfMVgJCQk2Ci0vKiBJdCBzaG91bGQgY29uc2lzdGVudCB3aXRoIHRoZSBkcml2ZXJfWFhYLmMgKi8KLSNkZWZpbmUgSUVFRV9QQVJBTV9XUEFYX1NFTEVDVAkJCTcKLS8qIEFkZGVkIGZvciBub3RpZnkgdGhlIGVuY3J5cHRpb24gdHlwZSBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgSUVFRV9QUk9UT19XUEEJCQkJMQotI2RlZmluZSBJRUVFX1BST1RPX1JTTgkJCQkyCi0vKiBBZGRlZCBmb3Igbm90aWZ5IHRoZSBlbmNyeXB0aW9uIHR5cGUgc2VsZWN0aW9uICovCi0jZGVmaW5lIElFRUVfV1BBWF9VU0VHUk9VUAkJCTAKLSNkZWZpbmUgSUVFRV9XUEFYX1dFUDQwCQkJCTEKLSNkZWZpbmUgSUVFRV9XUEFYX1RLSVAJCQkJMgotI2RlZmluZSBJRUVFX1dQQVhfV1JBUCAgIAkJCTMKLSNkZWZpbmUgSUVFRV9XUEFYX0NDTVAJCQkJNAotI2RlZmluZSBJRUVFX1dQQVhfV0VQMTA0CQkJNQotCi0jZGVmaW5lIElFRUVfS0VZX01HTVRfSUVFRTgwMjFYCQkJMQotI2RlZmluZSBJRUVFX0tFWV9NR01UX1BTSwkJCTIKLQotI2RlZmluZSBJRUVFX01MTUVfU1RBX0RFQVVUSAkJCTEKLSNkZWZpbmUgSUVFRV9NTE1FX1NUQV9ESVNBU1NPQwkJCTIKLQotCi0jZGVmaW5lIElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHCQkyCi0jZGVmaW5lIElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUREUgkJMwotI2RlZmluZSBJRUVFX0NSWVBUX0VSUl9DUllQVF9JTklUX0ZBSUxFRAk0Ci0jZGVmaW5lIElFRUVfQ1JZUFRfRVJSX0tFWV9TRVRfRkFJTEVECQk1Ci0jZGVmaW5lIElFRUVfQ1JZUFRfRVJSX1RYX0tFWV9TRVRfRkFJTEVECTYKLSNkZWZpbmUgSUVFRV9DUllQVF9FUlJfQ0FSRF9DT05GX0ZBSUxFRAkJNwotCi0KLSNkZWZpbmUJSUVFRV9DUllQVF9BTEdfTkFNRV9MRU4JCQkxNgotCi0jZGVmaW5lIE1BWF9JRV9MRU4gIDB4ZmYKLQotLyogYWRkZWQgZm9yIGtlcm5lbCBjb25mbGljdCAqLwotI2RlZmluZSBpZWVlODAyMTFfY3J5cHRfZGVpbml0X2VudHJpZXMgCWllZWU4MDIxMV9jcnlwdF9kZWluaXRfZW50cmllc19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX2NyeXB0X2RlaW5pdF9oYW5kbGVyIAlpZWVlODAyMTFfY3J5cHRfZGVpbml0X2hhbmRsZXJfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9jcnlwdF9kZWxheWVkX2RlaW5pdCAJaWVlZTgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0X3JzbAotI2RlZmluZSBpZWVlODAyMTFfcmVnaXN0ZXJfY3J5cHRvX29wcyAgCWllZWU4MDIxMV9yZWdpc3Rlcl9jcnlwdG9fb3BzX3JzbAotI2RlZmluZSBpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzIGllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHNfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyAJaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzX3JzbAotCi0jZGVmaW5lIGllZWU4MDIxMV9jY21wX251bGwJCWllZWU4MDIxMV9jY21wX251bGxfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3RraXBfbnVsbAkJaWVlZTgwMjExX3RraXBfbnVsbF9yc2wKLQotI2RlZmluZSBpZWVlODAyMTFfd2VwX251bGwJCWllZWU4MDIxMV93ZXBfbnVsbF9yc2wKLQotI2RlZmluZSBmcmVlX2llZWU4MDIxMSAgICAgICAgICAJZnJlZV9pZWVlODAyMTFfcnNsCi0jZGVmaW5lIGFsbG9jX2llZWU4MDIxMSAgICAgICAgCQlhbGxvY19pZWVlODAyMTFfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3J4IAkJCWllZWU4MDIxMV9yeF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3J4X21ndAkJaWVlZTgwMjExX3J4X21ndF9yc2wKLQotI2RlZmluZSBpZWVlODAyMTFfZ2V0X2JlYWNvbgkJaWVlZTgwMjExX2dldF9iZWFjb25fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0b3BfcXVldWUJCWllZWU4MDIxMV9zdG9wX3F1ZXVlX3JzbAotI2RlZmluZSBpZWVlODAyMTFfcmVzZXRfcXVldWUJCWllZWU4MDIxMV9yZXNldF9xdWV1ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbAlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sX3JzbAotI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX2lzX3Nob3J0c2xvdAkJaWVlZTgwMjExX2lzX3Nob3J0c2xvdF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX2lzXzU0ZwkJaWVlZTgwMjExX2lzXzU0Z19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3dwYV9zdXBwbGljYW50X2lvY3RsCWllZWU4MDIxMV93cGFfc3VwcGxpY2FudF9pb2N0bF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3BzX3R4X2FjawkJaWVlZTgwMjExX3BzX3R4X2Fja19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3NvZnRtYWNfeG1pdAkJaWVlZTgwMjExX3NvZnRtYWNfeG1pdF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zCWllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29uc19yc2wKLSNkZWZpbmUgbm90aWZ5X3d4X2Fzc29jX2V2ZW50CQlub3RpZnlfd3hfYXNzb2NfZXZlbnRfcnNsCi0jZGVmaW5lIFNlbmREaXNhc3NvY2lhdGlvbgkJU2VuZERpc2Fzc29jaWF0aW9uX3JzbAotI2RlZmluZSBpZWVlODAyMTFfZGlzYXNzb2NpYXRlCQlpZWVlODAyMTFfZGlzYXNzb2NpYXRlX3JzbAotI2RlZmluZSBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zCWllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnNfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zdG9wX3NjYW4JCWllZWU4MDIxMV9zdG9wX3NjYW5fcnNsCi0jZGVmaW5lIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzX3JzbAotI2RlZmluZSBpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybwlpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNyb19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvCWllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNyb19yc2wKLQotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X2Vzc2lkCQlpZWVlODAyMTFfd3hfZ2V0X2Vzc2lkX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X2Vzc2lkCQlpZWVlODAyMTFfd3hfc2V0X2Vzc2lkX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X3JhdGUJCWllZWU4MDIxMV93eF9zZXRfcmF0ZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9yYXRlCQlpZWVlODAyMTFfd3hfZ2V0X3JhdGVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfd2FwCQlpZWVlODAyMTFfd3hfc2V0X3dhcF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF93YXAJCWllZWU4MDIxMV93eF9nZXRfd2FwX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X21vZGUJCWllZWU4MDIxMV93eF9zZXRfbW9kZV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9tb2RlCQlpZWVlODAyMTFfd3hfZ2V0X21vZGVfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfc2NhbgkJaWVlZTgwMjExX3d4X3NldF9zY2FuX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X2ZyZXEJCWllZWU4MDIxMV93eF9nZXRfZnJlcV9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9mcmVxCQlpZWVlODAyMTFfd3hfc2V0X2ZyZXFfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfcmF3dHgJCWllZWU4MDIxMV93eF9zZXRfcmF3dHhfcnNsCi0jZGVmaW5lIGllZWU4MDIxMV93eF9nZXRfbmFtZQkJaWVlZTgwMjExX3d4X2dldF9uYW1lX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X3Bvd2VyCQlpZWVlODAyMTFfd3hfc2V0X3Bvd2VyX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyCQlpZWVlODAyMTFfd3hfZ2V0X3Bvd2VyX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd2xhbl9mcmVxdWVuY2llcwlpZWVlODAyMTFfd2xhbl9mcmVxdWVuY2llc19yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9ydHMJCWllZWU4MDIxMV93eF9zZXRfcnRzX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X3J0cwkJaWVlZTgwMjExX3d4X2dldF9ydHNfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3R4Yl9mcmVlCQlpZWVlODAyMTFfdHhiX2ZyZWVfcnNsCi0KLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9nZW5faWUJCWllZWU4MDIxMV93eF9zZXRfZ2VuX2llX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X3NjYW4JCWllZWU4MDIxMV93eF9nZXRfc2Nhbl9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9lbmNvZGUJCWllZWU4MDIxMV93eF9zZXRfZW5jb2RlX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZQkJaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfcnNsCi0jaWYgV0lSRUxFU1NfRVhUID49IDE4Ci0jZGVmaW5lIGllZWU4MDIxMV93eF9zZXRfbWxtZQkJaWVlZTgwMjExX3d4X3NldF9tbG1lX3JzbAotI2RlZmluZSBpZWVlODAyMTFfd3hfc2V0X2F1dGgJCWllZWU4MDIxMV93eF9zZXRfYXV0aF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0CWllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dF9yc2wKLSNkZWZpbmUgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVfZXh0CWllZWU4MDIxMV93eF9nZXRfZW5jb2RlX2V4dF9yc2wKLSNlbmRpZgotCi0KLXR5cGVkZWYgc3RydWN0IGllZWVfcGFyYW0gewotCXUzMiBjbWQ7Ci0JdTggc3RhX2FkZHJbRVRIX0FMRU5dOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXU4IG5hbWU7Ci0JCQl1MzIgdmFsdWU7Ci0JCX0gd3BhX3BhcmFtOwotCQlzdHJ1Y3QgewotCQkJdTMyIGxlbjsKLQkJCXU4IHJlc2VydmVkWzMyXTsKLQkJCXU4IGRhdGFbMF07Ci0JCX0gd3BhX2llOwotCQlzdHJ1Y3R7Ci0JCQlpbnQgY29tbWFuZDsKLQkJCWludCByZWFzb25fY29kZTsKLQkJfSBtbG1lOwotCQlzdHJ1Y3QgewotCQkJdTggYWxnW0lFRUVfQ1JZUFRfQUxHX05BTUVfTEVOXTsKLQkJCXU4IHNldF90eDsKLQkJCXUzMiBlcnI7Ci0JCQl1OCBpZHg7Ci0JCQl1OCBzZXFbOF07IC8qIHNlcXVlbmNlIGNvdW50ZXIgKHNldDogUlgsIGdldDogVFgpICovCi0JCQl1MTYga2V5X2xlbjsKLQkJCXU4IGtleVswXTsKLQkJfSBjcnlwdDsKLQl9IHU7Ci19IGllZWVfcGFyYW07Ci0KLQotI2lmIFdJUkVMRVNTX0VYVCA8IDE3Ci0jZGVmaW5lIElXX1FVQUxfUVVBTF9JTlZBTElEICAgMHgxMAotI2RlZmluZSBJV19RVUFMX0xFVkVMX0lOVkFMSUQgIDB4MjAKLSNkZWZpbmUgSVdfUVVBTF9OT0lTRV9JTlZBTElEICAweDQwCi0jZGVmaW5lIElXX1FVQUxfUVVBTF9VUERBVEVEICAgMHgxCi0jZGVmaW5lIElXX1FVQUxfTEVWRUxfVVBEQVRFRCAgMHgyCi0jZGVmaW5lIElXX1FVQUxfTk9JU0VfVVBEQVRFRCAgMHg0Ci0jZW5kaWYKLQotCi0vKiBsaW51eCB1bmRlciAyLjYuOSByZWxlYXNlIG1heSBub3Qgc3VwcG9ydCBpdCwgc28gbW9kaWZ5IGl0IGZvciBjb21tb24gdXNlICovCi0jZGVmaW5lIE1TRUNTKHQpIG1zZWNzX3RvX2ppZmZpZXModCkKLSNkZWZpbmUgbXNsZWVwX2ludGVycnVwdGlibGVfcnNsICBtc2xlZXBfaW50ZXJydXB0aWJsZQotCi0jZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTgkJMjMwNAotLyogTWF4aW11bSBzaXplIGZvciB0aGUgTUEtVU5JVERBVEEgcHJpbWl0aXZlLCA4MDIuMTEgc3RhbmRhcmQgc2VjdGlvbgotICAgNi4yLjEuMS4yLgotCi0gICBUaGUgZmlndXJlIGluIHNlY3Rpb24gNy4xLjIgc3VnZ2VzdHMgYSBib2R5IHNpemUgb2YgdXAgdG8gMjMxMgotICAgYnl0ZXMgaXMgYWxsb3dlZCwgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLCBJIHN1c3BlY3QgdGhpcwotICAgcmVwcmVzZW50cyB0aGUgMjMwNCBieXRlcyBvZiByZWFsIGRhdGEsIHBsdXMgYSBwb3NzaWJsZSA4IGJ5dGVzIG9mCi0gICBXRVAgSVYgYW5kIElDVi4gKHRoaXMgaW50ZXJwcmV0YXRpb24gc3VnZ2VzdGVkIGJ5IFJhbWlybyBCYXJyZWlybykgKi8KLSNkZWZpbmUgSUVFRTgwMjExXzFBRERSX0xFTiAxMAotI2RlZmluZSBJRUVFODAyMTFfMkFERFJfTEVOIDE2Ci0jZGVmaW5lIElFRUU4MDIxMV8zQUREUl9MRU4gMjQKLSNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAzMAotI2RlZmluZSBJRUVFODAyMTFfRkNTX0xFTiAgICA0Ci0jZGVmaW5lIElFRUU4MDIxMV9ITEVOICAgICAgICAgICAgICAgICAgKElFRUU4MDIxMV80QUREUl9MRU4pCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4gICAgICAgICAgICAgKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQotI2RlZmluZSBJRUVFODAyMTFfTUdNVF9IRFJfTEVOIDI0Ci0jZGVmaW5lIElFRUU4MDIxMV9EQVRBX0hEUjNfTEVOIDI0Ci0jZGVmaW5lIElFRUU4MDIxMV9EQVRBX0hEUjRfTEVOIDMwCi0KLSNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCi0jZGVmaW5lIE1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKLQotCi0vKiBGcmFtZSBjb250cm9sIGZpZWxkIGNvbnN0YW50cyAqLwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9WRVJTCQkweDAwMDMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfRlRZUEUJCTB4MDAwYwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9TVFlQRQkJMHgwMGYwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZSQU1FVFlQRQkweDAwZmMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVE9EUwkJMHgwMTAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0ZST01EUwkJMHgwMjAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX0RTVE9EUwkJMHgwMzAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUwkweDA0MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUkVUUlkJCTB4MDgwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9QTQkJMHgxMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBCQkweDIwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfV0VQCQkweDQwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfT1JERVIJCTB4ODAwMAotCi0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9NR01UCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0NUTAkJMHgwMDA0Ci0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9EQVRBCQkweDAwMDgKLQotLyogbWFuYWdlbWVudCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCAJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUQkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUAkweDAwMzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUQkweDAwNDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9CRUFDT04JCTB4MDA4MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVRJTQkJMHgwMDkwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQwkweDAwQTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FVVEgJCTB4MDBCMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREVBVVRICQkweDAwQzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX01BTkFHRV9BQ1QJMHgwMEQwCi0KLS8qIGNvbnRyb2wgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BTUE9MTAkJMHgwMEEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SVFMJCTB4MDBCMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ1RTCQkweDAwQzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FDSwkJMHgwMEQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVORAkJMHgwMEUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSwkweDAwRjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0JMT0NLQUNLICAgMHgwMDk0Ci0KLS8qIGRhdGEgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEEJCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDSwkweDAwMTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZQT0xMCTB4MDAyMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRkFDS1BPTEwJMHgwMDMwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQwkweDAwNDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGQUNLCQkweDAwNTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGUE9MTAkJMHgwMDYwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkFDS1BPTEwJMHgwMDcwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQQkweDAwODAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMCTB4MDBDMAotCi0jZGVmaW5lIElFRUU4MDIxMV9TQ1RMX0ZSQUcJCTB4MDAwRgotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9TRVEJCTB4RkZGMAotCi0vKiBRT1MgY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQgICAgICAgICAgICAgIDB4MDAwRgotCi0jZGVmaW5lCUZDX1FPU19CSVQJCQkJCUJJVDcKLSNkZWZpbmUgSXNEYXRhRnJhbWUocGR1KQkJCSgoKHBkdVswXSAmIDB4MEMpID09IDB4MDgpID8gdHJ1ZSA6IGZhbHNlKQotI2RlZmluZQlJc0xlZ2FjeURhdGFGcmFtZShwZHUpCShJc0RhdGFGcmFtZShwZHUpICYmICghKHBkdVswXSZGQ19RT1NfQklUKSkpCi0KLSNkZWZpbmUgSXNRb1NEYXRhRnJhbWUocGZyYW1lKSAgKCgqKHUxNiAqKXBmcmFtZSYoSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBfElFRUU4MDIxMV9GVFlQRV9EQVRBKSkgPT0gKElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQXxJRUVFODAyMTFfRlRZUEVfREFUQSkpCi0jZGVmaW5lIEZyYW1lX09yZGVyKHBmcmFtZSkgICAgICgqKHUxNiAqKXBmcmFtZSZJRUVFODAyMTFfRkNUTF9PUkRFUikKLSNkZWZpbmUgU05fTEVTUyhhLCBiKQkJKCgoYS1iKSYweDgwMCkgIT0gMCkKLSNkZWZpbmUgU05fRVFVQUwoYSwgYikJKGEgPT0gYikKLSNkZWZpbmUgTUFYX0RFVl9BRERSX1NJWkUgOAotdHlwZWRlZiBlbnVtIF9BQ1RfQ0FURUdPUll7Ci0JQUNUX0NBVF9RT1MgPSAxLAotCUFDVF9DQVRfRExTID0gMiwKLQlBQ1RfQ0FUX0JBICA9IDMsCi0JQUNUX0NBVF9IVCAgPSA3LAotCUFDVF9DQVRfV01NID0gMTcsCi19IEFDVF9DQVRFR09SWSwgKlBBQ1RfQ0FURUdPUlk7Ci0KLXR5cGVkZWYgZW51bSBfVFNfQUNUSU9OewotCUFDVF9BRERUU1JFUSA9IDAsCi0JQUNUX0FERFRTUlNQID0gMSwKLQlBQ1RfREVMVFMgICAgPSAyLAotCUFDVF9TQ0hFRFVMRSA9IDMsCi19IFRTX0FDVElPTiwgKlBUU19BQ1RJT047Ci0KLXR5cGVkZWYgZW51bSBfQkFfQUNUSU9OewotCUFDVF9BRERCQVJFUSA9IDAsCi0JQUNUX0FEREJBUlNQID0gMSwKLQlBQ1RfREVMQkEgICAgPSAyLAotfSBCQV9BQ1RJT04sICpQQkFfQUNUSU9OOwotCi10eXBlZGVmIGVudW0gX0luaXRpYWxHYWluT3BUeXBlewotCUlHX0JhY2t1cCA9IDAsCi0JSUdfUmVzdG9yZSwKLQlJR19NYXgKLX0gSW5pdGlhbEdhaW5PcFR5cGU7Ci0KLS8qIGRlYnVnIG1hY3JvcyAqLwotI2RlZmluZSBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotZXh0ZXJuIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWw7Ci0jZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCi0gIHByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICIgZm10LCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKLS8qIHdiIGFkZGVkIHRvIGRlYnVnIG91dCBkYXRhIGJ1ZgotICogaWYgeW91IHdhbnQgcHJpbnQgREFUQSBidWZmZXIgcmVsYXRlZCBCQSwgcGxlYXNlIHNldCBpZWVlODAyMTFfZGVidWdfbGV2ZWwKLSAqIHRvIERBVEF8QkEKLSAqLwotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfREFUQShsZXZlbCwgZGF0YSwgZGF0YWxlbikJXAotCWRvIHsgaWYgKChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSA9PSAobGV2ZWwpKSB7IAlcCi0JCQlpbnQgaTsJCQkJCVwKLQkJCXU4KiBwZGF0YSA9ICh1OCAqKSBkYXRhOwkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CVwKLQkJCWZvciAoaSA9IDA7IGkgPCAoaW50KShkYXRhbGVuKTsgaSsrKSB7CQlcCi0JCQkJcHJpbnRrKCIlMnggIiwgcGRhdGFbaV0pOwkJXAotCQkJCWlmICgoaSsxKSUxNiA9PSAwKSBcCi0JCQkJCXByaW50aygiXG4iKTsJXAotCQkJfQlcCi0JCQlwcmludGsoIlxuIik7CQkJXAotCQl9CQkJCQlcCi0JfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0RBVEEobGV2ZWwsIGRhdGEsIGRhdGFsZW4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KLQotLyogZGVidWcgbWFjcm9zIG5vdCBkZXBlbmRlbnQgb24gQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLwotCi0vKgotICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW07Ci0gKgotICogSWYgeW91IGFyZSBkZWZpbmluZyBhIG5ldyBkZWJ1ZyBjbGFzc2lmaWNhdGlvbiwgc2ltcGx5IGFkZCBpdCB0byB0aGUgI2RlZmluZQotICogbGlzdCBoZXJlIGluIHRoZSBmb3JtIG9mOgotICoKLSAqICNkZWZpbmUgSUVFRTgwMjExX0RMX3h4eHggVkFMVUUKLSAqCi0gKiBzaGlmdGluZyB2YWx1ZSB0byB0aGUgbGVmdCBvbmUgYml0IGZyb20gdGhlIHByZXZpb3VzIGVudHJ5LiAgeHh4eCBzaG91bGQgYmUKLSAqIHRoZSBuYW1lIG9mIHRoZSBjbGFzc2lmaWNhdGlvbiAoZm9yIGV4YW1wbGUsIFdFUCkKLSAqCi0gKiBZb3UgdGhlbiBuZWVkIHRvIGVpdGhlciBhZGQgYSBJRUVFODAyMTFfeHh4eF9ERUJVRygpIG1hY3JvIGRlZmluaXRpb24gZm9yIHlvdXIKLSAqIGNsYXNzaWZpY2F0aW9uLCBvciB1c2UgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF94eHh4LCAuLi4pIHdoZW5ldmVyIHlvdSB3YW50Ci0gKiB0byBzZW5kIG91dHB1dCB0byB0aGF0IGNsYXNzaWZpY2F0aW9uLgotICoKLSAqIFRvIGFkZCB5b3VyIGRlYnVnIGxldmVsIHRvIHRoZSBsaXN0IG9mIGxldmVscyBzZWVuIHdoZW4geW91IHBlcmZvcm0KLSAqCi0gKiAlIGNhdCAvcHJvYy9uZXQvaXB3L2RlYnVnX2xldmVsCi0gKgotICogeW91IHNpbXBseSBuZWVkIHRvIGFkZCB5b3VyIGVudHJ5IHRvIHRoZSBpcHdfZGVidWdfbGV2ZWxzIGFycmF5LgotICoKLSAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pcHcgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JRUVFODAyMTFfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCi0gKgotICovCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RMX0lORk8gICAgICAgICAgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9XWCAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfRExfU0NBTiAgICAgICAgICAoMTw8MikKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1NUQVRFICAgICAgICAgKDE8PDMpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9NR01UICAgICAgICAgICgxPDw0KQotI2RlZmluZSBJRUVFODAyMTFfRExfRlJBRyAgICAgICAgICAoMTw8NSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0VBUCAgICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9EUk9QICAgICAgICAgICgxPDw3KQotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9UWCAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfRExfUlggICAgICAgICAgICAoMTw8OSkKLQotI2RlZmluZSBJRUVFODAyMTFfRExfSFQJCSAgICgxPDwxMCkgIC8qIEhUICovCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9CQQkJICAgKDE8PDExKSAgLyogYmEgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0RMX1RTCQkgICAoMTw8MTIpICAvKiBUUyAqLwotI2RlZmluZSBJRUVFODAyMTFfRExfUU9TICAgICAgICAgICAoMTw8MTMpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9SRU9SREVSCSAgICgxPDwxNCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0lPVAkgICAoMTw8MTUpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JUFMJICAgKDE8PDE2KQotI2RlZmluZSBJRUVFODAyMTFfRExfVFJBQ0UJICAgKDE8PDI5KSAgLyogdHJhY2UgZnVuY3Rpb24sIG5lZWQgdG8gdXNlciBuZXRfcmF0ZWxpbWl0KCkgdG9nZXRoZXIgaW4gb3JkZXIgbm90IHRvIHByaW50IHRvbyBtdWNoIHRvIHRoZSBzY3JlZW4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0RMX0RBVEEJICAgKDE8PDMwKSAgIC8qIHVzZSB0aGlzIGZsYWcgdG8gY29udHJvbCB3aGV0aGVyIHByaW50IGRhdGEgYnVmIG91dC4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0RMX0VSUgkgICAoMTw8MzEpICAgLyogYWx3YXlzIG9wZW4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExOiAiIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgImllZWU4MDIxMTogIiBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfSU5GTyhmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfSU5GTywgZiwgIyMgYSkKLQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfV1goZiwgYS4uLikgICAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfV1gsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU1RBVEUoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU1RBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19NR01UKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX01HTVQsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19GUkFHKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0ZSQUcsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19FQVAoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRUFQLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRFJPUChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfVFgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19SWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1FPUyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9RT1MsIGYsICMjIGEpCi0KLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0vKiBBZGRlZCBieSBBbm5pZSwgMjAwNS0xMS0yMi4gKi8KLSNkZWZpbmUgTUFYX1NUUl9MRU4gICAgIDY0Ci0vKiBJIHdhbnQgdG8gc2VlIEFTQ0lJIDMzIHRvIDEyNiBvbmx5LiBPdGhlcndpc2UsIEkgcHJpbnQgJz8nLiBBbm5pZSwgMjAwNS0xMS0yMi4qLwotI2RlZmluZSBQUklOVEFCTEUoX2NoKSAgKF9jaCA+ICchJyAmJiBfY2ggPCAnficpCi0jZGVmaW5lIElFRUU4MDIxMV9QUklOVF9TVFIoX0NvbXAsIF9UaXRsZVN0cmluZywgX1B0ciwgX0xlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLQkJCWlmICgoX0NvbXApICYgbGV2ZWwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQlpbnQgICAgICAgICAgICAgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJCXU4ICBidWZmZXJbTUFYX1NUUl9MRU5dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0JCQkJaW50IGxlbmd0aCA9IChfTGVuIDwgTUFYX1NUUl9MRU4pID8gX0xlbiA6IChNQVhfU1RSX0xFTiAtIDEpOyAgCVwKLQkJCQltZW1zZXQoYnVmZmVyLCAwLCBNQVhfU1RSX0xFTik7ICAgICAgICAgICAgICAgICAgICAgIAkJXAotCQkJCW1lbWNweShidWZmZXIsICh1OCAqKV9QdHIsIGxlbmd0aCk7ICAgICAgICAgICAgCQlcCi0JCQkJZm9yIChfX2kgPSAwOyBfX2kgPCBNQVhfU1RSX0xFTjsgX19pKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJICAgICBpZiAoIVBSSU5UQUJMRShidWZmZXJbX19pXSkpICAgXAotCQkJCQkJYnVmZmVyW19faV0gPSAnPyc7ICAgICAJXAotCQkJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQkJYnVmZmVyW2xlbmd0aF0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQlwcmludGsoIlJ0bDgxOXg6ICIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLQkJCQlwcmludGsoX1RpdGxlU3RyaW5nKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQlwcmludGsoIjogJWQsIDwlcz5cbiIsIF9MZW4sIGJ1ZmZlcik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCX0KLSNlbHNlCi0jZGVmaW5lIElFRUU4MDIxMV9QUklOVF9TVFIoX0NvbXAsIF9UaXRsZVN0cmluZywgX1B0ciwgX0xlbikgIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4gLyogQVJQSFJEX0VUSEVSICovCi0KLSNpZm5kZWYgV0lSRUxFU1NfU1BZCi0jZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CS8qIG5ldyBkcml2ZXIgQVBJICovCi0KLSNpZm5kZWYgRVRIX1BfUEFFCi0jZGVmaW5lIEVUSF9QX1BBRSAweDg4OEUgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KLSNlbmRpZiAvKiBFVEhfUF9QQUUgKi8KLQotI2RlZmluZSBFVEhfUF9QUkVBVVRIIDB4ODhDNyAvKiBJRUVFIDgwMi4xMWkgcHJlLWF1dGhlbnRpY2F0aW9uICovCi0KLSNpZm5kZWYgRVRIX1BfODAyMTFfUkFXCi0jZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAoRVRIX1BfRUNPTkVUICsgMSkKLSNlbmRpZgotCi0vKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCi0KLSNkZWZpbmUgUDgwMjExX09VSV9MRU4gMwotCi1zdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyIHsKLQotCXU4ICAgIGRzYXA7ICAgLyogYWx3YXlzIDB4QUEgKi8KLQl1OCAgICBzc2FwOyAgIC8qIGFsd2F5cyAweEFBICovCi0JdTggICAgY3RybDsgICAvKiBhbHdheXMgMHgwMyAqLwotCXU4ICAgIG91aVtQODAyMTFfT1VJX0xFTl07ICAgIC8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLwotCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBTTkFQX1NJWkUgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIpCi0KLSNkZWZpbmUgV0xBTl9GQ19HRVRfVkVSUyhmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9WRVJTKQotI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQotI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKLQotI2RlZmluZSBXTEFOX0ZDX0dFVF9GUkFNRVRZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlJBTUVUWVBFKQotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKLQotLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwotI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCi0jZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKLSNkZWZpbmUgV0xBTl9BVVRIX0xFQVAgMgotCi0jZGVmaW5lIFdMQU5fQVVUSF9DSEFMTEVOR0VfTEVOIDEyOAotCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9CU1MgKDE8PDApCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9JQlNTICgxPDwxKQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQ0ZfUE9MTEFCTEUgKDE8PDIpCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9DRl9QT0xMX1JFUVVFU1QgKDE8PDMpCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZICgxPDw0KQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgKDE8PDUpCi0jZGVmaW5lIFdMQU5fQ0FQQUJJTElUWV9QQkNDICgxPDw2KQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfQ0hBTk5FTF9BR0lMSVRZICgxPDw3KQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCAoMTw8OCkKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1FPUyAoMTw8OSkKLSNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1QgKDE8PDEwKQotI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfRFNTU19PRkRNICgxPDwxMykKLQotLyogODAyLjExZyBFUlAgaW5mb3JtYXRpb24gZWxlbWVudCAqLwotI2RlZmluZSBXTEFOX0VSUF9OT05fRVJQX1BSRVNFTlQgKDE8PDApCi0jZGVmaW5lIFdMQU5fRVJQX1VTRV9QUk9URUNUSU9OICgxPDwxKQotI2RlZmluZSBXTEFOX0VSUF9CQVJLRVJfUFJFQU1CTEUgKDE8PDIpCi0KLS8qIFN0YXR1cyBjb2RlcyAqLwotZW51bSBpZWVlODAyMTFfc3RhdHVzY29kZSB7Ci0JV0xBTl9TVEFUVVNfU1VDQ0VTUyA9IDAsCi0JV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSA9IDEsCi0JV0xBTl9TVEFUVVNfQ0FQU19VTlNVUFBPUlRFRCA9IDEwLAotCVdMQU5fU1RBVFVTX1JFQVNTT0NfTk9fQVNTT0MgPSAxMSwKLQlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfVU5TUEVDID0gMTIsCi0JV0xBTl9TVEFUVVNfTk9UX1NVUFBPUlRFRF9BVVRIX0FMRyA9IDEzLAotCVdMQU5fU1RBVFVTX1VOS05PV05fQVVUSF9UUkFOU0FDVElPTiA9IDE0LAotCVdMQU5fU1RBVFVTX0NIQUxMRU5HRV9GQUlMID0gMTUsCi0JV0xBTl9TVEFUVVNfQVVUSF9USU1FT1VUID0gMTYsCi0JV0xBTl9TVEFUVVNfQVBfVU5BQkxFX1RPX0hBTkRMRV9ORVdfU1RBID0gMTcsCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX1JBVEVTID0gMTgsCi0JLyogODAyLjExYiAqLwotCVdMQU5fU1RBVFVTX0FTU09DX0RFTklFRF9OT1NIT1JUUFJFQU1CTEUgPSAxOSwKLQlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9QQkNDID0gMjAsCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PQUdJTElUWSA9IDIxLAotCS8qIDgwMi4xMWggKi8KLQlXTEFOX1NUQVRVU19BU1NPQ19ERU5JRURfTk9TUEVDVFJVTSA9IDIyLAotCVdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX0JBRF9QT1dFUiA9IDIzLAotCVdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX0JBRF9TVVBQX0NIQU4gPSAyNCwKLQkvKiA4MDIuMTFnICovCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlRUSU1FID0gMjUsCi0JV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PRFNTU09GRE0gPSAyNiwKLQkvKiA4MDIuMTFpICovCi0JV0xBTl9TVEFUVVNfSU5WQUxJRF9JRSA9IDQwLAotCVdMQU5fU1RBVFVTX0lOVkFMSURfR1JPVVBfQ0lQSEVSID0gNDEsCi0JV0xBTl9TVEFUVVNfSU5WQUxJRF9QQUlSV0lTRV9DSVBIRVIgPSA0MiwKLQlXTEFOX1NUQVRVU19JTlZBTElEX0FLTVAgPSA0MywKLQlXTEFOX1NUQVRVU19VTlNVUFBfUlNOX1ZFUlNJT04gPSA0NCwKLQlXTEFOX1NUQVRVU19JTlZBTElEX1JTTl9JRV9DQVAgPSA0NSwKLQlXTEFOX1NUQVRVU19DSVBIRVJfU1VJVEVfUkVKRUNURUQgPSA0NiwKLX07Ci0KLS8qIFJlYXNvbiBjb2RlcyAqLwotZW51bSBpZWVlODAyMTFfcmVhc29uY29kZSB7Ci0JV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQgPSAxLAotCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQgPSAyLAotCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HID0gMywKLQlXTEFOX1JFQVNPTl9ESVNBU1NPQ19EVUVfVE9fSU5BQ1RJVklUWSA9IDQsCi0JV0xBTl9SRUFTT05fRElTQVNTT0NfQVBfQlVTWSA9IDUsCi0JV0xBTl9SRUFTT05fQ0xBU1MyX0ZSQU1FX0ZST01fTk9OQVVUSF9TVEEgPSA2LAotCVdMQU5fUkVBU09OX0NMQVNTM19GUkFNRV9GUk9NX05PTkFTU09DX1NUQSA9IDcsCi0JV0xBTl9SRUFTT05fRElTQVNTT0NfU1RBX0hBU19MRUZUID0gOCwKLQlXTEFOX1JFQVNPTl9TVEFfUkVRX0FTU09DX1dJVEhPVVRfQVVUSCA9IDksCi0JLyogODAyLjExaCAqLwotCVdMQU5fUkVBU09OX0RJU0FTU09DX0JBRF9QT1dFUiA9IDEwLAotCVdMQU5fUkVBU09OX0RJU0FTU09DX0JBRF9TVVBQX0NIQU4gPSAxMSwKLQkvKiA4MDIuMTFpICovCi0JV0xBTl9SRUFTT05fSU5WQUxJRF9JRSA9IDEzLAotCVdMQU5fUkVBU09OX01JQ19GQUlMVVJFID0gMTQsCi0JV0xBTl9SRUFTT05fNFdBWV9IQU5EU0hBS0VfVElNRU9VVCA9IDE1LAotCVdMQU5fUkVBU09OX0dST1VQX0tFWV9IQU5EU0hBS0VfVElNRU9VVCA9IDE2LAotCVdMQU5fUkVBU09OX0lFX0RJRkZFUkVOVCA9IDE3LAotCVdMQU5fUkVBU09OX0lOVkFMSURfR1JPVVBfQ0lQSEVSID0gMTgsCi0JV0xBTl9SRUFTT05fSU5WQUxJRF9QQUlSV0lTRV9DSVBIRVIgPSAxOSwKLQlXTEFOX1JFQVNPTl9JTlZBTElEX0FLTVAgPSAyMCwKLQlXTEFOX1JFQVNPTl9VTlNVUFBfUlNOX1ZFUlNJT04gPSAyMSwKLQlXTEFOX1JFQVNPTl9JTlZBTElEX1JTTl9JRV9DQVAgPSAyMiwKLQlXTEFOX1JFQVNPTl9JRUVFODAyMVhfRkFJTEVEID0gMjMsCi0JV0xBTl9SRUFTT05fQ0lQSEVSX1NVSVRFX1JFSkVDVEVEID0gMjQsCi19OwotCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SQVRFICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfV0VNQVNLIDB4NwotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTiAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9CQU5EICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0JBTkQgICAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV9MRU4gIAkJNAotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CCQkJMHgwMgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CCQkJMHgwNAotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CCQkJMHgwQgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQgkJCTB4MTYKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV9MRU4gCQk4Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CCQkJMHgwQwotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQgkJCTB4MTIKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CCQkweDE4Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQgkJMHgyNAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIJCTB4MzAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CCQkweDQ4Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQgkJMHg2MAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUIJCTB4NkMKLSNkZWZpbmUgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSwkJMHg4MAotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSwkJKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSwkJKDE8PDEpCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSwkJKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0sJCSgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLCQkoMTw8NCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSwkJKDE8PDUpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLCQkoMTw8NikKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sJCSgxPDw3KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSwkJKDE8PDgpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLCQkoMTw8OSkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sJCSgxPDwxMCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0sJCSgxPDwxMSkKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVTX01BU0sJCTB4MDAwMDAwMEYKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19CQVNJQ19SQVRFU19NQVNLCShJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sgfCBcCi0JSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX0NDS19CQVNJQ19SQVRFU19NQVNLIHwgXAotCUlFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLKQotCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVTX01BU0sJCTB4MDAwMDBGRjAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sgIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLKQotI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLIChJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sgfCBcCi0JCQkJSUVFRTgwMjExX0NDS19ERUZBVUxUX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSUVFRTgwMjExX05VTV9PRkRNX1JBVEVTCSAgICA4Ci0jZGVmaW5lIElFRUU4MDIxMV9OVU1fQ0NLX1JBVEVTCQkgICAgNAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9TSElGVF9NQVNLX0EgICAgICAgICA0Ci0KLQotLyogdGhpcyBpcyBzdG9sZW4gYW5kIG1vZGlmaWVkIGZyb20gdGhlIG1hZHdpZmkgZHJpdmVyKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZDMF9UWVBFX01BU0sJCTB4MGMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDMF9UWVBFX0RBVEEJCTB4MDgKLSNkZWZpbmUgSUVFRTgwMjExX0ZDMF9TVUJUWVBFX01BU0sJMHhCMAotI2RlZmluZSBJRUVFODAyMTFfRkMwX1NVQlRZUEVfUU9TCTB4ODAKLQotI2RlZmluZSBJRUVFODAyMTFfUU9TX0hBU19TRVEoZmMpIFwKLQkoKChmYykgJiAoSUVFRTgwMjExX0ZDMF9UWVBFX01BU0sgfCBJRUVFODAyMTFfRkMwX1NVQlRZUEVfTUFTSykpID09IFwKLQkgKElFRUU4MDIxMV9GQzBfVFlQRV9EQVRBIHwgSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1FPUykpCi0KLS8qIHRoaXMgaXMgc3RvbGVuIGZyb20gaXB3MjIwMCBkcml2ZXIgKi8KLSNkZWZpbmUgSUVFRV9JQlNTX01BQ19IQVNIX1NJWkUgMzEKLXN0cnVjdCBpZWVlX2lic3Nfc2VxIHsKLQl1OCBtYWNbRVRIX0FMRU5dOwotCXUxNiBzZXFfbnVtWzE3XTsKLQl1MTYgZnJhZ19udW1bMTddOwotCXVuc2lnbmVkIGxvbmcgcGFja2V0X3RpbWVbMTddOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8qIE5PVEU6IFRoaXMgZGF0YSBpcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXM7IG5vdCBhbGwgaGFyZHdhcmUgcHJvdmlkZXMgdGhpcwotICogICAgICAgaW5mb3JtYXRpb24gZm9yIGZyYW1lcyByZWNlaXZlZC4gIE5vdCBzZXR0aW5nIHRoZXNlIHdpbGwgbm90IGNhdXNlCi0gKiAgICAgICBhbnkgYWR2ZXJzZSBhZmZlY3RzLiAqLwotc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyB7Ci0JdTMyIG1hY190aW1lWzJdOwotCXM4IHJzc2k7Ci0JdTggc2lnbmFsOwotCXU4IG5vaXNlOwotCXUxNiByYXRlOyAvKiBpbiAxMDAga2JwcyAqLwotCXU4IHJlY2VpdmVkX2NoYW5uZWw7Ci0JdTggY29udHJvbDsKLQl1OCBtYXNrOwotCXU4IGZyZXE7Ci0JdTE2IGxlbjsKLQl1NjQgdHNmOwotCXUzMiBiZWFjb25fdGltZTsKLQl1OCBuaWNfdHlwZTsKLQl1MTYgICAgICAgTGVuZ3RoOwotCXU4ICAgICAgICBTaWduYWxRdWFsaXR5OyAvKiBpbiAwLTEwMCBpbmRleC4gKi8KLQlzMzIgICAgICAgUmVjdlNpZ25hbFBvd2VyOyAvKiBSZWFsIHBvd2VyIGluIGRCbSBmb3IgdGhpcyBwYWNrZXQsIG5vIGJlYXV0aWZpY2F0aW9uIGFuZCBhZ2dyZWdhdGlvbi4gKi8KLQlzOCAgICAgICAgUnhQb3dlcjsgLyogaW4gZEJtIFRyYW5zbGF0ZSBmcm9tIFBXZEIgKi8KLQl1OCAgICAgICAgU2lnbmFsU3RyZW5ndGg7IC8qIGluIDAtMTAwIGluZGV4LiAqLwotCXUxNiAgICAgICBiSHdFcnJvcjoxOwotCXUxNiAgICAgICBiQ1JDOjE7Ci0JdTE2ICAgICAgIGJJQ1Y6MTsKLQl1MTYgICAgICAgYlNob3J0UHJlYW1ibGU6MTsKLQl1MTYgICAgICAgQW50ZW5uYToxOyAgICAgIC8qIGZvciBydGw4MTg1ICovCi0JdTE2ICAgICAgIERlY3J5cHRlZDoxOyAgICAvKiBmb3IgcnRsODE4NSwgcnRsODE4NyAqLwotCXUxNiAgICAgICBXYWtldXA6MTsgICAgICAgLyogZm9yIHJ0bDgxODUgKi8KLQl1MTYgICAgICAgUmVzZXJ2ZWQwOjE7ICAgIC8qIGZvciBydGw4MTg1ICovCi0JdTggICAgICAgIEFHQzsKLQl1MzIgICAgICAgVGltZVN0YW1wTG93OwotCXUzMiAgICAgICBUaW1lU3RhbXBIaWdoOwotCWJvb2wgICAgICBiU2hpZnQ7Ci0JYm9vbCAgICAgIGJJc1Fvc0RhdGE7Ci0JdTggICAgICAgIFVzZXJQcmlvcml0eTsKLQotCS8qCi0JICogMUF0dGVudGlvbiBQbGVhc2UhISE8MTFuIG9yIDgxOTAgc3BlY2lmaWMgY29kZSBzaG91bGQgYmUgcHV0IGJlbG93IHRoaXMgbGluZT4KLQkgKi8KLQotCXU4ICAgICAgICBSeERydkluZm9TaXplOwotCXU4ICAgICAgICBSeEJ1ZlNoaWZ0OwotCWJvb2wgICAgICBiSXNBTVBEVTsKLQlib29sICAgICAgYkZpcnN0TVBEVTsKLQlib29sICAgICAgYkNvbnRhaW5IVEM7Ci0JYm9vbCAgICAgIFJ4SXM0ME1IelBhY2tldDsKLQl1MzIgICAgICAgUnhQV0RCQWxsOwotCXU4ICAgICAgICBSeE1JTU9TaWduYWxTdHJlbmd0aFs0XTsgICAgICAgIC8qIGluIDB+MTAwIGluZGV4ICovCi0JczggICAgICAgIFJ4TUlNT1NpZ25hbFF1YWxpdHlbMl07Ci0JYm9vbCAgICAgIGJQYWNrZXRNYXRjaEJTU0lEOwotCWJvb2wgICAgICBiSXNDQ0s7Ci0JYm9vbCAgICAgIGJQYWNrZXRUb1NlbGY7Ci0JdTgJKnZpcnR1YWxfYWRkcmVzczsKLQl1MTYgICAgICAgICAgcGFja2V0bGVuZ3RoOyAgICAgICAgICAgICAgLyogVG90YWwgcGFja2V0IGxlbmd0aDogTXVzdCBlcXVhbCB0byBzdW0gb2YgYWxsIEZyYWdMZW5ndGggKi8KLQl1MTYgICAgICAgICAgZnJhZ2xlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBGcmFnTGVuZ3RoIHNob3VsZCBlcXVhbCB0byBQYWNrZXRMZW5ndGggaW4gbm9uLWZyYWdtZW50IGNhc2UgKi8KLQl1MTYgICAgICAgICAgZnJhZ29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRhIG9mZnNldCBmb3IgdGhpcyBmcmFnbWVudCAqLwotCXUxNiAgICAgICAgICBudG90YWxmcmFnOwotCWJvb2wgICAgICAJICBiaXNyeGFnZ3JzdWJmcmFtZTsKLQlib29sCQkgIGJQYWNrZXRCZWFjb247CS8qIGNvc2EgYWRkIGZvciByc3NpICovCi0JYm9vbAkJICBiVG9TZWxmQkE7CQkvKiBjb3NhIGFkZCBmb3IgcnNzaSAqLwotCWNoYXIgCSAgY2NrX2FkY19wd2RiWzRdOwkvKiBjb3NhIGFkZCBmb3IgcnggcGF0aCBzZWxlY3Rpb24gKi8KLQl1MTYJCSAgU2VxX051bTsKLQotfTsKLQotLyogSUVFRSA4MDIuMTEgcmVxdWlyZXMgdGhhdCBTVEEgc3VwcG9ydHMgY29uY3VycmVudCByZWNlcHRpb24gb2YgYXQgbGVhc3QKLSAqIHRocmVlIGZyYWdtZW50ZWQgZnJhbWVzLiBUaGlzIGRlZmluZSBjYW4gYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQgbW9yZQotICogY29uY3VycmVudCBmcmFtZXMsIGJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBlYWNoIGVudHJ5IGNhbiBjb25zdW1lIGFib3V0Ci0gKiAyIGtCIG9mIFJBTSBhbmQgaW5jcmVhc2luZyBjYWNoZSBzaXplIHdpbGwgc2xvdyBkb3duIGZyYW1lIHJlYXNzZW1ibHkuICovCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFHX0NBQ0hFX0xFTiA0Ci0KLXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSB7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7Ci0JdW5zaWduZWQgaW50IHNlcTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9mcmFnOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTggc3JjX2FkZHJbRVRIX0FMRU5dOwotCXU4IGRzdF9hZGRyW0VUSF9BTEVOXTsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgewotCXVuc2lnbmVkIGludCB0eF91bmljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfZnJhZ21lbnRzOwotCXVuc2lnbmVkIGludCB0eF91bmljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgdHhfZGVmZXJyZWRfdHJhbnNtaXNzaW9uczsKLQl1bnNpZ25lZCBpbnQgdHhfc2luZ2xlX3JldHJ5X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGlwbGVfcmV0cnlfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9yZXRyeV9saW1pdF9leGNlZWRlZDsKLQl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHM7Ci0JdW5zaWduZWQgaW50IHJ4X3VuaWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCByeF9mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHJ4X3VuaWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCByeF9mY3NfZXJyb3JzOwotCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc19ub19idWZmZXI7Ci0JdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzX3dyb25nX3NhOwotCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlOwotCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX21zZ19mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2RldmljZTsKLQotI2luY2x1ZGUgImllZWU4MDIxMV9jcnlwdC5oIgotCi0jZGVmaW5lIFNFQ19LRVlfMSAgICAgICAgICgxPDwwKQotI2RlZmluZSBTRUNfS0VZXzIgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgU0VDX0tFWV8zICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIFNFQ19LRVlfNCAgICAgICAgICgxPDwzKQotI2RlZmluZSBTRUNfQUNUSVZFX0tFWSAgICAoMTw8NCkKLSNkZWZpbmUgU0VDX0FVVEhfTU9ERSAgICAgKDE8PDUpCi0jZGVmaW5lIFNFQ19VTklDQVNUX0dST1VQICgxPDw2KQotI2RlZmluZSBTRUNfTEVWRUwgICAgICAgICAoMTw8NykKLSNkZWZpbmUgU0VDX0VOQUJMRUQgICAgICAgKDE8PDgpCi0jZGVmaW5lIFNFQ19FTkNSWVBUICAgICAgICgxPDw5KQotCi0jZGVmaW5lIFNFQ19MRVZFTF8wICAgICAgMCAvKiBOb25lICovCi0jZGVmaW5lIFNFQ19MRVZFTF8xICAgICAgMSAvKiBXRVAgNDAgYW5kIDEwNCBiaXQgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzIgICAgICAyIC8qIExldmVsIDEgKyBUS0lQICovCi0jZGVmaW5lIFNFQ19MRVZFTF8yX0NLSVAgMyAvKiBMZXZlbCAxICsgQ0tJUCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMyAgICAgIDQgLyogTGV2ZWwgMiArIENDTVAgKi8KLQotI2RlZmluZSBTRUNfQUxHX05PTkUgICAgICAgICAgICAwCi0jZGVmaW5lIFNFQ19BTEdfV0VQICAgICAgICAgICAgIDEKLSNkZWZpbmUgU0VDX0FMR19US0lQICAgICAgICAgICAgMgotI2RlZmluZSBTRUNfQUxHX0NDTVAgICAgICAgICAgICAzCi0KLSNkZWZpbmUgV0VQX0tFWVMgCQk0Ci0jZGVmaW5lIFdFUF9LRVlfTEVOCQkxMwotI2RlZmluZSBTQ01fS0VZX0xFTiAgICAgICAgICAgICAzMgotI2RlZmluZSBTQ01fVEVNUE9SQUxfS0VZX0xFTkdUSCAxNgotCi1zdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHsKLQl1MTYgYWN0aXZlX2tleToyLAotCSAgICBlbmFibGVkOjEsCi0JICAgIGF1dGhfbW9kZToyLAotCSAgICBhdXRoX2FsZ286NCwKLQkgICAgdW5pY2FzdF91c2VzX2dyb3VwOjEsCi0JICAgIGVuY3J5cHQ6MTsKLQl1OCBrZXlfc2l6ZXNbV0VQX0tFWVNdOwotCXU4IGtleXNbV0VQX0tFWVNdW1NDTV9LRVlfTEVOXTsKLQl1OCBsZXZlbDsKLQl1MTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKgotIDgwMi4xMSBkYXRhIGZyYW1lIGZyb20gQVAKLSAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotQnl0ZXMgfCAgMiAgIHwgIDIgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAyICAgfCAwLi4yMzEyIHwgICA0ICB8Ci0gICAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwKLURlc2MuIHwgY3RybCB8IGR1cmEgfCAgREEvUkEgIHwgICBUQSAgICB8ICAgIFNBICAgfCBTZXF1IHwgIGZyYW1lICB8ICBmY3MgfAotICAgICAgfCAgICAgIHwgdGlvbiB8IChCU1NJRCkgfCAgICAgICAgIHwgICAgICAgICB8IGVuY2UgfCAgZGF0YSAgIHwgICAgICB8Ci0gICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLVRvdGFsOiAyOC0yMzQwIGJ5dGVzCi0qLwotCi0vKiBNYW5hZ2VtZW50IEZyYW1lIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMgKi8KLWVudW0gaWVlZTgwMjExX21maWUgewotCU1GSUVfVFlQRV9TU0lEID0gMCwKLQlNRklFX1RZUEVfUkFURVMgPSAxLAotCU1GSUVfVFlQRV9GSF9TRVQgPSAyLAotCU1GSUVfVFlQRV9EU19TRVQgPSAzLAotCU1GSUVfVFlQRV9DRl9TRVQgPSA0LAotCU1GSUVfVFlQRV9USU0gPSA1LAotCU1GSUVfVFlQRV9JQlNTX1NFVCA9IDYsCi0JTUZJRV9UWVBFX0NPVU5UUlkgPSA3LAotCU1GSUVfVFlQRV9IT1BfUEFSQU1TID0gOCwKLQlNRklFX1RZUEVfSE9QX1RBQkxFID0gOSwKLQlNRklFX1RZUEVfUkVRVUVTVCA9IDEwLAotCU1GSUVfVFlQRV9DSEFMTEVOR0UgPSAxNiwKLQlNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVCA9IDMyLAotCU1GSUVfVFlQRV9QT1dFUl9DQVBBQklMSVRZID0gMzMsCi0JTUZJRV9UWVBFX1RQQ19SRVFVRVNUID0gMzQsCi0JTUZJRV9UWVBFX1RQQ19SRVBPUlQgPSAzNSwKLQlNRklFX1RZUEVfU1VQUF9DSEFOTkVMUyA9IDM2LAotCU1GSUVfVFlQRV9DU0EgPSAzNywKLQlNRklFX1RZUEVfTUVBU1VSRV9SRVFVRVNUID0gMzgsCi0JTUZJRV9UWVBFX01FQVNVUkVfUkVQT1JUID0gMzksCi0JTUZJRV9UWVBFX1FVSUVUID0gNDAsCi0JTUZJRV9UWVBFX0lCU1NfREZTID0gNDEsCi0JTUZJRV9UWVBFX0VSUCA9IDQyLAotCU1GSUVfVFlQRV9SU04gPSA0OCwKLQlNRklFX1RZUEVfUkFURVNfRVggPSA1MCwKLQlNRklFX1RZUEVfSFRfQ0FQID0gNDUsCi0JTUZJRV9UWVBFX0hUX0lORk8gPSA2MSwKLQlNRklFX1RZUEVfQUlST05FVCA9IDEzMywKLQlNRklFX1RZUEVfR0VORVJJQyA9IDIyMSwKLQlNRklFX1RZUEVfUU9TX1BBUkFNRVRFUiA9IDIyMiwKLX07Ci0KLS8qIE1pbmltYWwgaGVhZGVyOyBjYW4gYmUgdXNlZCBmb3IgcGFzc2luZyA4MDIuMTEgZnJhbWVzIHdpdGggc3VmZmljaWVudAotICogaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiB1bmRlcmx5aW5nIGRhdGEgdHlwZSBpcyBhY3R1YWxseQotICogc3RvcmVkIGluIHRoZSBkYXRhLiAqLwotc3RydWN0IGllZWU4MDIxMV9oZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IGFkZHI0W0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBwYXlsb2FkWzBdOwotCV9fbGUxNiBxb3NfY3RsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRycW9zIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLQlfX2xlMTYgcW9zX2N0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdGlvbiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBhbGdvcml0aG07Ci0JX19sZTE2IHRyYW5zYWN0aW9uOwotCV9fbGUxNiBzdGF0dXM7Ci0JLypjaGFsbGVuZ2UqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCXUzMiB0aW1lX3N0YW1wWzJdOwotCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKLQkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBBbGlhcyBiZWFjb24gZm9yIHByb2JlX3Jlc3BvbnNlICovCi0jZGVmaW5lIGllZWU4MDIxMV9iZWFjb24gaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlCi0KLXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVxdWVzdF9mcmFtZSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBSU04gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9yZWFzc29jX3JlcXVlc3RfZnJhbWUgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2VfZnJhbWUgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgc3RhdHVzOwotCV9fbGUxNiBhaWQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOyAvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3R4YiB7Ci0JdTggbnJfZnJhZ3M7Ci0JdTggZW5jcnlwdGVkOwotCXU4IHF1ZXVlX2luZGV4OwotCXU4IHJ0c19pbmNsdWRlZDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JX19sZTE2IGZyYWdfc2l6ZTsKLQlfX2xlMTYgcGF5bG9hZF9zaXplOwotCXN0cnVjdCBza19idWZmICpmcmFnbWVudHNbMF07Ci19OwotCi0jZGVmaW5lIE1BWF9UWF9BR0dfQ09VTlQJCSAgMTYKLXN0cnVjdCBpZWVlODAyMTFfZHJ2X2FnZ190eGIgewotCXU4IG5yX2Rydl9hZ2dfZnJhbWVzOwotCXN0cnVjdCBza19idWZmICp0eF9hZ2dfZnJhbWVzW01BWF9UWF9BR0dfQ09VTlRdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2RlZmluZSBNQVhfU1VCRlJBTUVfQ09VTlQgCQkgIDY0Ci1zdHJ1Y3QgaWVlZTgwMjExX3J4YiB7Ci0JdTggbnJfc3ViZnJhbWVzOwotCXN0cnVjdCBza19idWZmICpzdWJmcmFtZXNbTUFYX1NVQkZSQU1FX0NPVU5UXTsKLQl1OCBkc3RbRVRIX0FMRU5dOwotCXU4IHNyY1tFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi10eXBlZGVmIHVuaW9uIF9mcmFtZXFvcyB7Ci0JdTE2IHNob3J0ZGF0YTsKLQl1OCAgY2hhcmRhdGFbMl07Ci0Jc3RydWN0IHsKLQkJdTE2IHRpZDo0OwotCQl1MTYgZW9zcDoxOwotCQl1MTYgYWNrX3BvbGljeToyOwotCQl1MTYgcmVzZXJ2ZWQ6MTsKLQkJdTE2IHR4b3A6ODsKLQl9IGZpZWxkOwotfSBmcmFtZXFvcywgKnBmcmFtZXFvczsKLQotLyogU1dFRVAgVEFCTEUgRU5UUklFUyBOVU1CRVIqLwotI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVMJCSAgNDIKLSNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTX1BFUl9QQUNLRVQgIDcKLS8qIE1BWF9SQVRFU19MRU5HVEggbmVlZHMgdG8gYmUgMTIuICBUaGUgc3BlYyBzYXlzIDgsIGFuZCBtYW55IEFQcwotICogb25seSB1c2UgOCwgYW5kIHRoZW4gdXNlIGV4dGVuZGVkIHJhdGVzIGZvciB0aGUgcmVtYWluaW5nIHN1cHBvcnRlZAotICogcmF0ZXMuICBPdGhlciBBUHMsIGhvd2V2ZXIsIHN0aWNrIGFsbCBvZiB0aGVpciBzdXBwb3J0ZWQgcmF0ZXMgb24gdGhlCi0gKiBtYWluIHJhdGVzIGluZm9ybWF0aW9uIGVsZW1lbnQuLi4gKi8KLSNkZWZpbmUgTUFYX1JBVEVTX0xFTkdUSCAgICAgICAgICAgICAgICAgICgodTgpMTIpCi0jZGVmaW5lIE1BWF9SQVRFU19FWF9MRU5HVEggICAgICAgICAgICAgICAoKHU4KTE2KQotI2RlZmluZSBNQVhfTkVUV09SS19DT1VOVCAgICAgICAgICAgICAgICAgIDEyOAotCi0jZGVmaW5lIE1BWF9DSEFOTkVMX05VTUJFUiAgICAgICAgICAgICAgICAgMTYxCi0jZGVmaW5lIElFRUU4MDIxMV9TT0ZUTUFDX1NDQU5fVElNRQkgICAxMDAKLS8qIChIWiAvIDIpICovCi0jZGVmaW5lIElFRUU4MDIxMV9TT0ZUTUFDX0FTU09DX1JFVFJZX1RJTUUgKEhaICogMikKLQotI2RlZmluZSBDUkNfTEVOR1RIICAgICAgICAgICAgICAgICA0VQotCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0Ci0KLSNkZWZpbmUgTkVUV09SS19FTVBUWV9FU1NJRCAoMTw8MCkKLSNkZWZpbmUgTkVUV09SS19IQVNfT0ZETSAgICAoMTw8MSkKLSNkZWZpbmUgTkVUV09SS19IQVNfQ0NLICAgICAoMTw8MikKLQotLyogUW9TIHN0cnVjdHVyZSAqLwotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyAgICAgICgxPDwzKQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04gICAgICgxPDw0KQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfTUFTSyAgICAgICAgICAgIChORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyB8IFwKLQkJCQkJIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTikKLS8qIDgwMi4xMWggKi8KLSNkZWZpbmUgTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVCAgICAoMTw8NSkKLSNkZWZpbmUgTkVUV09SS19IQVNfQ1NBICAgICAgICAgICAgICAgICAoMTw8NikKLSNkZWZpbmUgTkVUV09SS19IQVNfUVVJRVQgICAgICAgICAgICAgICAoMTw8NykKLSNkZWZpbmUgTkVUV09SS19IQVNfSUJTU19ERlMgICAgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgTkVUV09SS19IQVNfVFBDX1JFUE9SVCAgICAgICAgICAoMTw8OSkKLQotI2RlZmluZSBORVRXT1JLX0hBU19FUlBfVkFMVUUgICAgICAgICAgICgxPDwxMCkKLQotI2RlZmluZSBRT1NfUVVFVUVfTlVNICAgICAgICAgICAgICAgICAgIDQKLSNkZWZpbmUgUU9TX09VSV9MRU4gICAgICAgICAgICAgICAgICAgICAzCi0jZGVmaW5lIFFPU19PVUlfVFlQRSAgICAgICAgICAgICAgICAgICAgMgotI2RlZmluZSBRT1NfRUxFTUVOVF9JRCAgICAgICAgICAgICAgICAgIDIyMQotI2RlZmluZSBRT1NfT1VJX0lORk9fU1VCX1RZUEUgICAgICAgICAgIDAKLSNkZWZpbmUgUU9TX09VSV9QQVJBTV9TVUJfVFlQRSAgICAgICAgICAxCi0jZGVmaW5lIFFPU19WRVJTSU9OXzEgICAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBRT1NfQUlGU05fTUlOX1ZBTFVFICAgICAgICAgICAgIDIKLXN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgewotCXU4IGVsZW1lbnRJRDsKLQl1OCBsZW5ndGg7Ci0JdTggcXVpW1FPU19PVUlfTEVOXTsKLQl1OCBxdWlfdHlwZTsKLQl1OCBxdWlfc3VidHlwZTsKLQl1OCB2ZXJzaW9uOwotCXU4IGFjX2luZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIHsKLQl1OCBhY2lfYWlmc247Ci0JdTggZWN3X21pbl9tYXg7Ci0JX19sZTE2IHR4X29wX2xpbWl0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IGluZm9fZWxlbWVudDsKLQl1OCByZXNlcnZlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgYWNfcGFyYW1zX3JlY29yZFtRT1NfUVVFVUVfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHsKLQlfX2xlMTYgY3dfbWluW1FPU19RVUVVRV9OVU1dOwotCV9fbGUxNiBjd19tYXhbUU9TX1FVRVVFX05VTV07Ci0JdTggYWlmc1tRT1NfUVVFVUVfTlVNXTsKLQl1OCBmbGFnW1FPU19RVUVVRV9OVU1dOwotCV9fbGUxNiB0eF9vcF9saW1pdFtRT1NfUVVFVUVfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0JaW50IGFjdGl2ZTsKLQlpbnQgc3VwcG9ydGVkOwotCXU4IHBhcmFtX2NvdW50OwotCXU4IG9sZF9wYXJhbV9jb3VudDsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgewotCXU4IHRpbV9jb3VudDsKLQl1OCB0aW1fcGVyaW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfd21tX2FjX3BhcmFtIHsKLQl1OCBhY19hY2lfYWNtX2FpZnNuOwotCXU4IGFjX2Vjd21pbl9lY3dtYXg7Ci0JdTE2IGFjX3R4b3BfbGltaXQ7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX3dtbV90c19pbmZvIHsKLQl1OCBhY19kaXJfdGlkOwotCXU4IGFjX3VwX3BzYjsKLQl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3dtbV90c3BlY19lbGVtIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3dtbV90c19pbmZvIHRzX2luZm87Ci0JdTE2IG5vcm1fbXNkdV9zaXplOwotCXUxNiBtYXhfbXNkdV9zaXplOwotCXUzMiBtaW5fc2Vydl9pbnRlcjsKLQl1MzIgbWF4X3NlcnZfaW50ZXI7Ci0JdTMyIGluYWN0X2ludGVyOwotCXUzMiBzdXNwZW5faW50ZXI7Ci0JdTMyIHNlcnZfc3RhcnRfdGltZTsKLQl1MzIgbWluX2RhdGFfcmF0ZTsKLQl1MzIgbWVhbl9kYXRhX3JhdGU7Ci0JdTMyIHBlYWtfZGF0YV9yYXRlOwotCXUzMiBtYXhfYnVyc3Rfc2l6ZTsKLQl1MzIgZGVsYXlfYm91bmQ7Ci0JdTMyIG1pbl9waHlfcmF0ZTsKLQl1MTYgc3VycF9iYW5kX2FsbG93OwotCXUxNiBtZWRpdW1fdGltZTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci1lbnVtIGVhcF90eXBlIHsKLQlFQVBfUEFDS0VUID0gMCwKLQlFQVBPTF9TVEFSVCwKLQlFQVBPTF9MT0dPRkYsCi0JRUFQT0xfS0VZLAotCUVBUE9MX0VOQ0FQX0FTRl9BTEVSVAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmVhcF90eXBlc1tdID0gewotCVtFQVBfUEFDS0VUXQkJPSAiRUFQLVBhY2tldCIsCi0JW0VBUE9MX1NUQVJUXQkJPSAiRUFQT0wtU3RhcnQiLAotCVtFQVBPTF9MT0dPRkZdCQk9ICJFQVBPTC1Mb2dvZmYiLAotCVtFQVBPTF9LRVldCQk9ICJFQVBPTC1LZXkiLAotCVtFQVBPTF9FTkNBUF9BU0ZfQUxFUlRdCT0gIkVBUE9MLUVuY2FwLUFTRi1BbGVydCIKLX07Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZWFwX2dldF90eXBlKGludCB0eXBlKQotewotCXJldHVybiAoKHUzMil0eXBlID49IEFSUkFZX1NJWkUoZWFwX3R5cGVzKSkgPyAiVW5rbm93biIgOiBlYXBfdHlwZXNbdHlwZV07Ci19Ci1zdGF0aWMgaW5saW5lIHU4IEZyYW1lX1FvU1RJRCh1OCAqYnVmKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7Ci0JdTE2IGZjOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKWJ1ZjsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQlyZXR1cm4gKHU4KSgoZnJhbWVxb3MgKikoYnVmICsgKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSA/IDMwIDogMjQpKSktPmZpZWxkLnRpZDsKLX0KLQotCi1zdHJ1Y3QgZWFwb2wgewotCXU4IHNuYXBbNl07Ci0JdTE2IGV0aGVydHlwZTsKLQl1OCB2ZXJzaW9uOwotCXU4IHR5cGU7Ci0JdTE2IGxlbmd0aDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3NvZnRtYWNfc3RhdHN7Ci0JdW5zaWduZWQgaW50IHJ4X2Fzc19vazsKLQl1bnNpZ25lZCBpbnQgcnhfYXNzX2VycjsKLQl1bnNpZ25lZCBpbnQgcnhfcHJvYmVfcnE7Ci0JdW5zaWduZWQgaW50IHR4X3Byb2JlX3JzOwotCXVuc2lnbmVkIGludCB0eF9iZWFjb25zOwotCXVuc2lnbmVkIGludCByeF9hdXRoX3JxOwotCXVuc2lnbmVkIGludCByeF9hdXRoX3JzX29rOwotCXVuc2lnbmVkIGludCByeF9hdXRoX3JzX2VycjsKLQl1bnNpZ25lZCBpbnQgdHhfYXV0aF9ycTsKLQl1bnNpZ25lZCBpbnQgbm9fYXV0aF9yczsKLQl1bnNpZ25lZCBpbnQgbm9fYXNzX3JzOwotCXVuc2lnbmVkIGludCB0eF9hc3NfcnE7Ci0JdW5zaWduZWQgaW50IHJ4X2Fzc19ycTsKLQl1bnNpZ25lZCBpbnQgdHhfcHJvYmVfcnE7Ci0JdW5zaWduZWQgaW50IHJlYXNzb2M7Ci0JdW5zaWduZWQgaW50IHN3dHhzdG9wOwotCXVuc2lnbmVkIGludCBzd3R4YXdha2U7Ci0JdW5zaWduZWQgY2hhciBDdXJyZW50U2hvd1R4YXRlOwotCXVuc2lnbmVkIGNoYXIgbGFzdF9wYWNrZXRfcmF0ZTsKLQl1bnNpZ25lZCBpbnQgdHhyZXRyeWNvdW50OwotfTsKLQotI2RlZmluZSBCRUFDT05fUFJPQkVfU1NJRF9JRF9QT1NJVElPTiAxMgotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudF9oZHIgewotCXU4IGlkOwotCXU4IGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkYXRhIHR5cGVzIHRoYXQgY2FuIG1ha2UgdXAgbWFuYWdlbWVudCBwYWNrZXRzCi0gKgotCXUxNiBhdXRoX2FsZ29yaXRobTsKLQl1MTYgYXV0aF9zZXF1ZW5jZTsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBjYXBhYmlsaXR5OwotCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0Jc3RydWN0IHsKLQkJdTE2IGFzc29jaWF0aW9uX2lkOjE0LCByZXNlcnZlZDoyOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCXUzMiB0aW1lX3N0YW1wWzJdOwotCXUxNiByZWFzb247Ci0JdTE2IHN0YXR1czsKLSovCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfVFhfRVNTSUQgIlBlbmd1aW4iCi0jZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX0JBU0lDX1JBVEUgMiAvKiAxTWJwcyAqLwotCi1lbnVtIHtXTU1fYWxsX2ZyYW1lLCBXTU1fdHdvX2ZyYW1lLCBXTU1fZm91cl9mcmFtZSwgV01NX3NpeF9mcmFtZX07Ci0jZGVmaW5lIE1BWF9TUF9MZW4gIChXTU1fYWxsX2ZyYW1lIDw8IDQpCi0jZGVmaW5lIElFRUU4MDIxMV9RT1NfVElEIDB4MGYKLSNkZWZpbmUgUU9TX0NUTF9OT1RDT05UQUlOX0FDSyAoMHgwMSA8PCA1KQotCi0jZGVmaW5lIElFRUU4MDIxMV9EVElNX01CQ0FTVCA0Ci0jZGVmaW5lIElFRUU4MDIxMV9EVElNX1VDQVNUIDIKLSNkZWZpbmUgSUVFRTgwMjExX0RUSU1fVkFMSUQgMQotI2RlZmluZSBJRUVFODAyMTFfRFRJTV9JTlZBTElEIDAKLQotI2RlZmluZSBJRUVFODAyMTFfUFNfRElTQUJMRUQgMAotI2RlZmluZSBJRUVFODAyMTFfUFNfVU5JQ0FTVCBJRUVFODAyMTFfRFRJTV9VQ0FTVAotI2RlZmluZSBJRUVFODAyMTFfUFNfTUJDQVNUIElFRUU4MDIxMV9EVElNX01CQ0FTVAotCi0KLSNpZmRlZiBXTU1fSGFuZ184MTg3Ci0jdW5kZWYgV01NX0hhbmdfODE4NwotI2VuZGlmCi0KLSNkZWZpbmUgV01FX0FDX0JLICAgMHgwMAotI2RlZmluZSBXTUVfQUNfQkUgICAweDAxCi0jZGVmaW5lIFdNRV9BQ19WSSAgIDB4MDIKLSNkZWZpbmUgV01FX0FDX1ZPICAgMHgwMwotI2RlZmluZSBXTUVfQUNJX01BU0sgMHgwMwotI2RlZmluZSBXTUVfQUlGU05fTUFTSyAweDAzCi0jZGVmaW5lIFdNRV9BQ19QUkFNX0xFTiAxNgotCi0jZGVmaW5lIE1BWF9SRUNFSVZFX0JVRkZFUl9TSVpFIDkxMDAKLQotLyogVVAgTWFwcGluZyB0byBBQywgdXNpbmcgaW4gTWdudFF1ZXJ5X1NlcXVlbmNlTnVtYmVyKCkgYW5kIG1heWJlIGZvciBEU0NQICovCi0jZGVmaW5lIFVQMkFDKHVwKSAoCQkgICBcCi0JKCh1cCkgPCAxKSA/IFdNRV9BQ19CRSA6IFwKLQkoKHVwKSA8IDMpID8gV01FX0FDX0JLIDogXAotCSgodXApIDwgNCkgPyBXTUVfQUNfQkUgOiBcCi0JKCh1cCkgPCA2KSA/IFdNRV9BQ19WSSA6IFwKLQlXTUVfQUNfVk8pCi0vKiBBQyBNYXBwaW5nIHRvIFVQLCB1c2luZyBpbiBUeCBwYXJ0IGZvciBzZWxlY3RpbmcgdGhlIGNvcnJlc3BvbmRpbmcgVFggcXVldWUgKi8KLSNkZWZpbmUgQUMyVVAoX2FjKQkoICAgICAgIFwKLQkoKF9hYykgPT0gV01FX0FDX1ZPKSA/IDYgOiBcCi0JKChfYWMpID09IFdNRV9BQ19WSSkgPyA1IDogXAotCSgoX2FjKSA9PSBXTUVfQUNfQkspID8gMSA6IFwKLQkwKQotCi0jZGVmaW5lCUVUSEVSX0FERFJfTEVOCQk2CS8qIGxlbmd0aCBvZiBhbiBFdGhlcm5ldCBhZGRyZXNzICovCi0jZGVmaW5lIEVUSEVSTkVUX0hFQURFUl9TSVpFICAgIDE0ICAgICAgLyogbGVuZ3RoIG9mIHR3byBFdGhlcm5ldCBhZGRyZXNzIHBsdXMgZXRoZXIgdHlwZSovCi0KLXN0cnVjdAlldGhlcl9oZWFkZXIgewotCXU4IGV0aGVyX2Rob3N0W0VUSEVSX0FERFJfTEVOXTsKLQl1OCBldGhlcl9zaG9zdFtFVEhFUl9BRERSX0xFTl07Ci0JdTE2IGV0aGVyX3R5cGU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jaWZuZGVmIEVUSEVSVFlQRV9QQUUKLSNkZWZpbmUJRVRIRVJUWVBFX1BBRQkweDg4OGUJCS8qIEVBUE9MIFBBRS84MDIuMXggKi8KLSNlbmRpZgotI2lmbmRlZiBFVEhFUlRZUEVfSVAKLSNkZWZpbmUJRVRIRVJUWVBFX0lQCTB4MDgwMAkJLyogSVAgcHJvdG9jb2wgKi8KLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBfYnNzX2h0ewotCi0JYm9vbAkJCQlzdXBwb3J0X2h0OwotCi0JLyogSFQgcmVsYXRlZCBlbGVtZW50cyAqLwotCXU4CQkJCQlodF9jYXBfYnVmWzMyXTsKLQl1MTYJCQkJCWh0X2NhcF9sZW47Ci0JdTgJCQkJCWh0X2luZm9fYnVmWzMyXTsKLQl1MTYJCQkJCWh0X2luZm9fbGVuOwotCi0JSFRfU1BFQ19WRVIJCQlodF9zcGVjX3ZlcjsKLQkvKiBIVF9DQVBBQklMSVRZX0VMRQkJCWJkSFRDYXBFbGU7ICovCi0JLyogSFRfSU5GT1JNQVRJT05fRUxFCQliZEhUSW5mb0VsZTsgKi8KLQotCWJvb2wJCQkJYWdncmVnYXRpb247Ci0JYm9vbAkJCQlsb25nX3Nsb3RfdGltZTsKLX0gYnNzX2h0LCAqcGJzc19odDsKLQotdHlwZWRlZiBlbnVtIF9lcnBfdHsKLQlFUlBfTm9uRVJQcHJlc2VudAk9IDB4MDEsCi0JRVJQX1VzZVByb3RlY3Rpb24JPSAweDAyLAotCUVSUF9CYXJrZXJQcmVhbWJsZU1vZGUgPSAweDA0LAotfSBlcnBfdDsKLQotCi1zdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgewotCS8qIFRoZXNlIGVudHJpZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSB1bmlxdWUgbmV0d29yayAqLwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1OCBjaGFubmVsOwotCS8qIEVuc3VyZSBudWxsLXRlcm1pbmF0ZWQgZm9yIGFueSBkZWJ1ZyBtc2dzICovCi0JdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwotCXU4IHNzaWRfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgcW9zX2RhdGE7Ci0JYm9vbAliV2l0aEFpcm9uZXRJRTsKLQlib29sCWJDa2lwU3VwcG9ydGVkOwotCWJvb2wJYkNjeFJtRW5hYmxlOwotCXUxNiAJQ2N4Um1TdGF0ZVsyXTsKLQkvKiBDQ1h2NCBTNTksIE1CU1NJRC4gKi8KLQlib29sCWJNQnNzaWRWYWxpZDsKLQl1OAlNQnNzaWRNYXNrOwotCXU4CU1Cc3NpZFs2XTsKLQkvKiBDQ1ggMiBTMzgsIFdMQU4gRGV2aWNlIFZlcnNpb24gTnVtYmVyIGVsZW1lbnQuICovCi0JYm9vbAliV2l0aENjeFZlck51bTsKLQl1OAlCc3NDY3hWZXJOdW1iZXI7Ci0JLyogVGhlc2UgYXJlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHM7Ci0JdTE2IGNhcGFiaWxpdHk7Ci0JdTggIHJhdGVzW01BWF9SQVRFU19MRU5HVEhdOwotCXU4ICByYXRlc19sZW47Ci0JdTggIHJhdGVzX2V4W01BWF9SQVRFU19FWF9MRU5HVEhdOwotCXU4ICByYXRlc19leF9sZW47Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7Ci0JdTggIG1vZGU7Ci0JdTMyIGZsYWdzOwotCXUzMiBsYXN0X2Fzc29jaWF0ZTsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGF0aW1fd2luZG93OwotCXU4ICBlcnBfdmFsdWU7Ci0JdTggIHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggIHJzbl9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHJzbl9pZV9sZW47Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9wYXJhbWV0ZXJzIHRpbTsKLQl1OCAgZHRpbV9wZXJpb2Q7Ci0JdTggIGR0aW1fZGF0YTsKLQl1MzIgbGFzdF9kdGltX3N0YV90aW1lWzJdOwotCi0JLyogYXBwZWRlZCBmb3IgUW9TICovCi0JdTggd21tX2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMV93bW1fYWNfcGFyYW0gd21tX3BhcmFtWzRdOwotCXU4IFFvU19FbmFibGU7Ci0jaWZkZWYgVEhPTUFTX1RVUkJPCi0JdTggVHVyYm9fRW5hYmxlOy8qIGVuYWJsZSB0dXJibyBtb2RlLCBhZGRlZCBieSB0aG9tYXMgKi8KLSNlbmRpZgotI2lmZGVmIEVOQUJMRV9ET1QxMUQKLQl1MTYgQ291bnRyeUllTGVuOwotCXU4IENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsKLSNlbmRpZgotCS8qIEhUIFJlbGF0ZWQgKi8KLQlCU1NfSFQJYnNzaHQ7Ci0JLyogQWRkIHRvIGhhbmRsZSBicm9hZGNvbSBBUCBtYW5hZ2VtZW50IGZyYW1lIENDSyByYXRlLiAqLwotCWJvb2wgYnJvYWRjb21fY2FwX2V4aXN0OwotCWJvb2wgcmFsaW5rX2NhcF9leGlzdDsKLQlib29sIGF0aGVyb3NfY2FwX2V4aXN0OwotCWJvb2wgY2lzY29fY2FwX2V4aXN0OwotCWJvb2wgdW5rbm93bl9jYXBfZXhpc3Q7Ci0JYm9vbAliZXJwX2luZm9fdmFsaWQ7Ci0JYm9vbCBidXNlcHJvdGVjdGlvbjsKLQkvKiBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLWVudW0gaWVlZTgwMjExX3N0YXRlIHsKLQotCS8qIHRoZSBjYXJkIGlzIG5vdCBsaW5rZWQgYXQgYWxsICovCi0JSUVFRTgwMjExX05PTElOSyA9IDAsCi0KLQkvKiBJRUVFODAyMTFfQVNTT0NJQVRJTkcqIGFyZSBmb3IgQlNTIGNsaWVudCBtb2RlCi0JICogdGhlIGRyaXZlciBzaGFsbCBub3QgcGVyZm9ybSBSWCBmaWx0ZXJpbmcgdW5sZXNzCi0JICogdGhlIHN0YXRlIGlzIExJTktFRC4KLQkgKiBUaGUgZHJpdmVyIHNoYWxsIGp1c3QgY2hlY2sgZm9yIHRoZSBzdGF0ZSBMSU5LRUQgYW5kCi0JICogZGVmYXVsdHMgdG8gTk9MSU5LIGZvciBBTEwgdGhlIG90aGVyIHN0YXRlcyAoaW5jbHVkaW5nCi0JICogTElOS0VEX1NDQU5OSU5HKQotCSAqLwotCi0JLyogdGhlIGFzc29jaWF0aW9uIHByb2NlZHVyZSB3aWxsIHN0YXJ0ICh3cSBzY2hlZHVsaW5nKSovCi0JSUVFRTgwMjExX0FTU09DSUFUSU5HLAotCUlFRUU4MDIxMV9BU1NPQ0lBVElOR19SRVRSWSwKLQotCS8qIHRoZSBhc3NvY2lhdGlvbiBwcm9jZWR1cmUgaXMgc2VuZGluZyBBVVRIIHJlcXVlc3QqLwotCUlFRUU4MDIxMV9BU1NPQ0lBVElOR19BVVRIRU5USUNBVElORywKLQotCS8qIHRoZSBhc3NvY2lhdGlvbiBwcm9jZWR1cmUgaGFzIHN1Y2Nlc3NmdWxseSBhdXRoZW50Y2F0ZWQKLQkgKiBhbmQgaXMgc2VuZGluZyBhc3NvY2lhdGlvbiByZXF1ZXN0Ci0JICovCi0JSUVFRTgwMjExX0FTU09DSUFUSU5HX0FVVEhFTlRJQ0FURUQsCi0KLQkvKiB0aGUgbGluayBpcyBvay4gdGhlIGNhcmQgYXNzb2NpYXRlZCB0byBhIEJTUyBvciBsaW5rZWQKLQkgKiB0byBhIGlic3MgY2VsbCBvciBhY3RpbmcgYXMgYW4gQVAgYW5kIGNyZWF0aW5nIHRoZSBic3MKLQkgKi8KLQlJRUVFODAyMTFfTElOS0VELAotCi0JLyogc2FtZSBhcyBMSU5LRUQsIGJ1dCB0aGUgZHJpdmVyIHNoYWxsIGFwcGx5IFJYIGZpbHRlcgotCSAqIHJ1bGVzIGFzIHdlIGFyZSBpbiBOT19MSU5LIG1vZGUuIEFzIHRoZSBjYXJkIGlzIHN0aWxsCi0JICogbG9naWNhbGx5IGxpbmtlZCwgYnV0IGl0IGlzIGRvaW5nIGEgc3luY3JvIHNpdGUgc3VydmV5Ci0JICogdGhlbiBpdCB3aWxsIGJlIGJhY2sgdG8gTElOS0VEIHN0YXRlLgotCSAqLwotCUlFRUU4MDIxMV9MSU5LRURfU0NBTk5JTkcsCi0KLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0NBTl9BR0UgKDE1ICogSFopCi0jZGVmaW5lIERFRkFVTFRfRlRTIDIzNDYKLQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTICgxPDwwKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX0NPTVBVVEVfRkNTICgxPDwxKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JUUyAoMTw8MikKLQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgMQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgMTQKLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTIChJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgLSBcCi0JCQkJICBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgKyAxKQotCi0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCAzNAotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgMTY1Ci0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9DSEFOTkVMUyAoSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMIC0gXAotCQkJCSAgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMICsgMSkKLQotCi0KLXR5cGVkZWYgc3RydWN0IHR4X3BlbmRpbmdfdHsKLQlpbnQgZnJhZzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOwotfSB0eF9wZW5kaW5nX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9iYW5kd2lkdGhfYXV0b3N3aXRjaCB7Ci0JbG9uZyB0aHJlc2hvbGRfMjBNaHp0bzQwTWh6OwotCWxvbmcJdGhyZXNob2xkXzQwTWh6dG8yME1oejsKLQlib29sIGJmb3JjZWRfdHgyME1oejsKLQlib29sIGJhdXRvc3dpdGNoX2VuYWJsZTsKLX0gYmFuZHdpZHRoX2F1dG9zd2l0Y2gsICpwYmFuZHdpZHRoX2F1dG9zd2l0Y2g7Ci0KLQotCi0jZGVmaW5lIFJFT1JERVJfV0lOX1NJWkUJMTI4Ci0jZGVmaW5lIFJFT1JERVJfRU5UUllfTlVNCTEyOAotdHlwZWRlZiBzdHJ1Y3QgX1JYX1JFT1JERVJfRU5UUlkgewotCXN0cnVjdCBsaXN0X2hlYWQJTGlzdDsKLQl1MTYJCQlTZXFOdW07Ci0Jc3RydWN0IGllZWU4MDIxMV9yeGIgKnByeGI7Ci19IFJYX1JFT1JERVJfRU5UUlksICpQUlhfUkVPUkRFUl9FTlRSWTsKLQotdHlwZWRlZiBlbnVtIF9Gc3luY19TdGF0ZSB7Ci0JRGVmYXVsdF9Gc3luYywKLQlIV19Gc3luYywKLQlTV19Gc3luYwotfSBGc3luY19TdGF0ZTsKLQotLyogUG93ZXIgc2F2ZSBtb2RlIGNvbmZpZ3VyZWQuICovCi10eXBlZGVmCWVudW0gX1JUX1BTX01PREUgewotCWVBY3RpdmUsCS8qIEFjdGl2ZS9Db250aW51b3VzIGFjY2Vzcy4gKi8KLQllTWF4UHMsCQkvKiBNYXggcG93ZXIgc2F2ZSBtb2RlLiAqLwotCWVGYXN0UHMJCS8qIEZhc3QgcG93ZXIgc2F2ZSBtb2RlLiAqLwotfSBSVF9QU19NT0RFOwotCi10eXBlZGVmIGVudW0gX0lQU19DQUxMQkFDS19GVU5DSU9OIHsKLQlJUFNfQ0FMTEJBQ0tfTk9ORSA9IDAsCi0JSVBTX0NBTExCQUNLX01HTlRfTElOS19SRVFVRVNUID0gMSwKLQlJUFNfQ0FMTEJBQ0tfSk9JTl9SRVFVRVNUID0gMiwKLX0gSVBTX0NBTExCQUNLX0ZVTkNJT047Ci0KLXR5cGVkZWYgZW51bSBfUlRfSk9JTl9BQ1RJT04gewotCVJUX0pPSU5fSU5GUkEgICA9IDEsCi0JUlRfSk9JTl9JQlNTICA9IDIsCi0JUlRfU1RBUlRfSUJTUyA9IDMsCi0JUlRfTk9fQUNUSU9OICA9IDQsCi19IFJUX0pPSU5fQUNUSU9OOwotCi10eXBlZGVmIHN0cnVjdCBfSWJzc1Bhcm1zIHsKLQl1MTYgICBhdGltV2luOwotfSBJYnNzUGFybXMsICpQSWJzc1Bhcm1zOwotI2RlZmluZSBNQVhfTlVNX1JBVEVTCTI2NCAvKiBNYXggbnVtIG9mIHN1cHBvcnQgcmF0ZXMgZWxlbWVudDogOCwgIE1heCBudW0gb2YgZXh0LiBzdXBwb3J0IHJhdGU6IDI1NS4gMDYxMTIyLCBieSByY25qa28uICovCi0KLS8qIFJGIHN0YXRlLiAqLwotdHlwZWRlZgllbnVtIF9SVF9SRl9QT1dFUl9TVEFURSB7Ci0JZVJmT24sCi0JZVJmU2xlZXAsCi0JZVJmT2ZmCi19IFJUX1JGX1BPV0VSX1NUQVRFOwotCi10eXBlZGVmIHN0cnVjdCBfUlRfUE9XRVJfU0FWRV9DT05UUk9MIHsKLQotCS8qIEluYWN0aXZlIFBvd2VyIFNhdmUoSVBTKSA6IERpc2FibGUgUkYgd2hlbiBkaXNjb25uZWN0ZWQgKi8KLQlib29sCQkJCWJJbmFjdGl2ZVBzOwotCWJvb2wJCQkJYklQU01vZGVCYWNrdXA7Ci0JYm9vbAkJCQliU3dSZlByb2Nlc3Npbmc7Ci0JUlRfUkZfUE9XRVJfU1RBVEUJZUluYWN0aXZlUG93ZXJTdGF0ZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCUluYWN0aXZlUHNXb3JrSXRlbTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlJbmFjdGl2ZVBzVGltZXI7Ci0KLQkvKiBSZXR1cm4gcG9pbnQgZm9yIGpvaW4gYWN0aW9uICovCi0JSVBTX0NBTExCQUNLX0ZVTkNJT04JUmV0dXJuUG9pbnQ7Ci0KLQkvKiBSZWNvcmVkIFBhcmFtZXRlcnMgZm9yIHJlc2NoZWR1bGVkIEpvaW5SZXF1ZXN0ICovCi0JYm9vbAkJCQliVG1wQnNzRGVzYzsKLQlSVF9KT0lOX0FDVElPTgkJdG1wSm9pbkFjdGlvbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgdG1wQnNzRGVzYzsKLQotCS8qIFJlY29yZWQgUGFyYW1ldGVycyBmb3IgcmVzY2hlZHVsZWQgTWdudExpbmtSZXF1ZXN0ICovCi0JYm9vbAkJCQliVG1wU2Nhbk9ubHk7Ci0JYm9vbAkJCQliVG1wQWN0aXZlU2NhbjsKLQlib29sCQkJCWJUbXBGaWx0ZXJIaWRkZW5BUDsKLQlib29sCQkJCWJUbXBVcGRhdGVQYXJtczsKLQl1OAkJCQkJdG1wU3NpZEJ1ZlszM107Ci0JT0NURVRfU1RSSU5HCQkJdG1wU3NpZDJTY2FuOwotCWJvb2wJCQkJYlRtcFNzaWQyU2NhbjsKLQl1OAkJCQkJdG1wTmV0d29ya1R5cGU7Ci0JdTgJCQkJCXRtcENoYW5uZWxOdW1iZXI7Ci0JdTE2CQkJCQl0bXBCY25QZXJpb2Q7Ci0JdTgJCQkJCXRtcER0aW1QZXJpb2Q7Ci0JdTE2CQkJCQl0bXBtQ2FwOwotCU9DVEVUX1NUUklORwkJCXRtcFN1cHBSYXRlU2V0OwotCXU4CQkJCQl0bXBTdXBwUmF0ZUJ1ZltNQVhfTlVNX1JBVEVTXTsKLQlib29sCQkJCWJUbXBTdXBwUmF0ZTsKLQlJYnNzUGFybXMJCQkJdG1wSWJwbTsKLQlib29sCQkJCWJUbXBJYnBtOwotCi0JLyogTGVpc3JlIFBvc3dlciBTYXZlIDogRGlzYWJsZSBSRiBpZiBjb25uZWN0ZWQgYnV0IHRyYWZmaWMgaXMgbm90IGJ1c3kgKi8KLQlib29sCQkJCWJMZWlzdXJlUHM7Ci0KLX0gUlRfUE9XRVJfU0FWRV9DT05UUk9MLCAqUFJUX1BPV0VSX1NBVkVfQ09OVFJPTDsKLQotdHlwZWRlZiB1MzIgUlRfUkZfQ0hBTkdFX1NPVVJDRTsKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX1NXIEJJVDMxCi0jZGVmaW5lIFJGX0NIQU5HRV9CWV9IVyBCSVQzMAotI2RlZmluZSBSRl9DSEFOR0VfQllfUFMgQklUMjkKLSNkZWZpbmUgUkZfQ0hBTkdFX0JZX0lQUyBCSVQyOAotI2RlZmluZSBSRl9DSEFOR0VfQllfSU5JVAkwCS8qIERvIG5vdCBjaGFuZ2UgdGhlIFJGT2ZmIHJlYXNvbi4gKi8KLQotI2lmZGVmIEVOQUJMRV9ET1QxMUQKLXR5cGVkZWYgZW51bSB7Ci0JQ09VTlRSWV9DT0RFX0ZDQyA9IDAsCi0JQ09VTlRSWV9DT0RFX0lDID0gMSwKLQlDT1VOVFJZX0NPREVfRVRTSSA9IDIsCi0JQ09VTlRSWV9DT0RFX1NQQUlOID0gMywKLQlDT1VOVFJZX0NPREVfRlJBTkNFID0gNCwKLQlDT1VOVFJZX0NPREVfTUtLID0gNSwKLQlDT1VOVFJZX0NPREVfTUtLMSA9IDYsCi0JQ09VTlRSWV9DT0RFX0lTUkFFTCA9IDcsCi0JQ09VTlRSWV9DT0RFX1RFTEVDLAotCUNPVU5UUllfQ09ERV9NSUMsCi0JQ09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU4KLX0gY291bnRyeV9jb2RlX3R5cGVfdDsKLSNlbmRpZgotCi0jZGVmaW5lIFJUX01BWF9MRF9TTE9UX05VTQkxMAotdHlwZWRlZiBzdHJ1Y3QgX1JUX0xJTktfREVURUNUX1QgewotCi0JdTMyCQkJCU51bVJlY3ZCY25JblBlcmlvZDsKLQl1MzIJCQkJTnVtUmVjdkRhdGFJblBlcmlvZDsKLQotCXUzMgkJCQlSeEJjbk51bVtSVF9NQVhfTERfU0xPVF9OVU1dOwkvKiBudW1iZXIgb2YgUnggYmVhY29uIC8gQ2hlY2tGb3JIYW5nX3BlcmlvZCAgdG8gZGV0ZXJtaW5lIGxpbmsgc3RhdHVzICovCi0JdTMyCQkJCVJ4RGF0YU51bVtSVF9NQVhfTERfU0xPVF9OVU1dOwkvKiBudW1iZXIgb2YgUnggZGF0YSAvIENoZWNrRm9ySGFuZ19wZXJpb2QgIHRvIGRldGVybWluZSBsaW5rIHN0YXR1cyAqLwotCXUxNgkJCQlTbG90TnVtOwkvKiBudW1iZXIgb2YgQ2hlY2tGb3JIYW5nIHBlcmlvZCB0byBkZXRlcm1pbmUgbGluayBzdGF0dXMgKi8KLQl1MTYJCQkJU2xvdEluZGV4OwotCi0JdTMyCQkJCU51bVR4T2tJblBlcmlvZDsKLQl1MzIJCQkJTnVtUnhPa0luUGVyaW9kOwotCWJvb2wJCQkJYkJ1c3lUcmFmZmljOwotfSBSVF9MSU5LX0RFVEVDVF9ULCAqUFJUX0xJTktfREVURUNUX1Q7Ci0KLQotc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7Ci0KLQkvKiBodyBzZWN1cml0eSByZWxhdGVkICovCi0JdTggaHdzZWNfYWN0aXZlOyAgLyogaHcgc2VjdXJpdHkgYWN0aXZlLiAqLwotCWJvb2wgaXNfc2lsZW50X3Jlc2V0OwotCWJvb2wgaWVlZV91cDsKLQlib29sIGJTdXBwb3J0UmVtb3RlV2FrZVVwOwotCVJUX1BTX01PREUJZG90MTFQb3dlclNhdmVNb2RlOyAvKiBQb3dlciBzYXZlIG1vZGUgY29uZmlndXJlZC4gKi8KLQlib29sIGFjdHNjYW5uaW5nOwotCWJvb2wgYmVpbnJldHJ5OwotCVJUX1JGX1BPV0VSX1NUQVRFCQllUkZQb3dlclN0YXRlOwotCVJUX1JGX0NIQU5HRV9TT1VSQ0UJUmZPZmZSZWFzb247Ci0JYm9vbCBpc19zZXRfa2V5OwotCS8qIDExbiBzcGVjIHJlbGF0ZWQgSSB3b25kZXIgaWYgVGhlc2UgaW5mbyBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBtb3ZlZCBvdXQgb2YgaWVlZTgwMjExX2RldmljZSAqLwotCi0JLyogMTFuIEhUIGJlbG93ICovCi0JUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvOwotCXNwaW5sb2NrX3QgYndfc3BpbmxvY2s7Ci0KLQlzcGlubG9ja190IHJlb3JkZXJfc3BpbmxvY2s7Ci0JLyogZm9yIEhUIG9wZXJhdGlvbiByYXRlIHNldC4gIHdlIHVzZSB0aGlzIG9uZSBmb3IgSFQgZGF0YSByYXRlIHRvCi0JICogc2VwYXJhdGUgZGlmZmVyZW50IGRlc2NyaXB0b3JzCi0JICogdGhlIHdheSBmaWxsIHRoaXMgaXMgdGhlIHNhbWUgYXMgaW4gdGhlIElFCi0JICovCi0JdTgJUmVnZG90MTFIVE9wZXJhdGlvbmFsUmF0ZVNldFsxNl07CQkvKiB1c2UgUkFUUiBmb3JtYXQgKi8KLQl1OAlkb3QxMUhUT3BlcmF0aW9uYWxSYXRlU2V0WzE2XTsJCS8qIHVzZSBSQVRSIGZvcm1hdCAqLwotCXU4CVJlZ0hUU3VwcFJhdGVTZXRbMTZdOwotCXU4CQkJCUhUQ3VycmVudE9wZXJhUmF0ZTsKLQl1OAkJCQlIVEhpZ2hlc3RPcGVyYVJhdGU7Ci0JLyogd2IgYWRkZWQgZm9yIHJhdGUgb3BlcmF0aW9uIG1vZGUgdG8gZmlybXdhcmUgKi8KLQl1OAliVHhEaXNhYmxlUmF0ZUZhbGxCYWNrOwotCXU4IAliVHhVc2VEcml2ZXJBc3NpbmdlZFJhdGU7Ci0JYXRvbWljX3QJYXRtX2NobmxvcDsKLQlhdG9taWNfdAlhdG1fc3didzsKLQotCS8qIDgwMi4xMWUgYW5kIFdNTSBUcmFmZmljIFN0cmVhbSBJbmZvIChUWCkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCQlUeF9UU19BZG1pdF9MaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJCVR4X1RTX1BlbmRpbmdfTGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlUeF9UU19VbnVzZWRfTGlzdDsKLQlUWF9UU19SRUNPUkQJCVR4VHNSZWNvcmRbVE9UQUxfVFNfTlVNXTsKLQkvKiA4MDIuMTFlIGFuZCBXTU0gVHJhZmZpYyBTdHJlYW0gSW5mbyAoUlgpICovCi0Jc3RydWN0IGxpc3RfaGVhZAkJUnhfVFNfQWRtaXRfTGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlSeF9UU19QZW5kaW5nX0xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJUnhfVFNfVW51c2VkX0xpc3Q7Ci0JUlhfVFNfUkVDT1JECQlSeFRzUmVjb3JkW1RPVEFMX1RTX05VTV07Ci0JUlhfUkVPUkRFUl9FTlRSWQlSeFJlb3JkZXJFbnRyeVsxMjhdOwotCXN0cnVjdCBsaXN0X2hlYWQJCVJ4UmVvcmRlcl9VbnVzZWRfTGlzdDsKLQkvKiBRb3MgcmVsYXRlZC4gKi8KLS8qCVBTVEFfUU9TCQkJcFN0YVFvczsgKi8KLQl1OAkJCQlGb3JjZWRQcmlvcml0eTsJCS8qIEZvcmNlIHBlci1wYWNrZXQgcHJpb3JpdHkgMX43LiAoZGVmYXVsdDogMCwgbm90IHRvIGZvcmNlIGl0LikgKi8KLQotCi0JLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgaWVlZV9zdGF0czsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NvZnRtYWNfc3RhdHMgc29mdG1hY19zdGF0czsKLQotCS8qIFByb2JlIC8gQmVhY29uIG1hbmFnZW1lbnQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29ya3M7Ci0JaW50IHNjYW5zOwotCWludCBzY2FuX2FnZTsKLQotCWludCBpd19tb2RlOyAvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLwotCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsKLQotCXNwaW5sb2NrX3QgbG9jazsKLQlzcGlubG9ja190IHdwYXhfc3VpdGxpc3RfbG9jazsKLQotCWludCB0eF9oZWFkcm9vbTsgLyogU2V0IHRvIHNpemUgb2YgYW55IGFkZGl0aW9uYWwgcm9vbSBuZWVkZWQgYXQgZnJvbnQKLQkJCSAgKiBvZiBhbGxvY2F0ZWQgVHggU0tCcyAqLwotCXUzMiBjb25maWc7Ci0KLQkvKiBXRVAgYW5kIG90aGVyIGVuY3J5cHRpb24gcmVsYXRlZCBzZXR0aW5ncyBhdCB0aGUgZGV2aWNlIGxldmVsICovCi0JaW50IG9wZW5fd2VwOyAvKiBTZXQgdG8gMSB0byBhbGxvdyB1bmVuY3J5cHRlZCBmcmFtZXMgKi8KLQlpbnQgYXV0aF9tb2RlOwotCWludCByZXNldF9vbl9rZXljaGFuZ2U7IC8qIFNldCB0byAxIGlmIHRoZSBIVyBuZWVkcyB0byBiZSByZXNldCBvbgotCQkJCSAqIFdFUCBrZXkgY2hhbmdlcyAqLwotCi0JLyogSWYgdGhlIGhvc3QgcGVyZm9ybXMge2VuLGRlfWNyeXB0aW9uLCB0aGVuIHNldCB0byAxICovCi0JaW50IGhvc3RfZW5jcnlwdDsKLQlpbnQgaG9zdF9lbmNyeXB0X21zZHU7Ci0JaW50IGhvc3RfZGVjcnlwdDsKLQkvKiBob3N0IHBlcmZvcm1zIG11bHRpY2FzdCBkZWNyeXB0aW9uICovCi0JaW50IGhvc3RfbWNfZGVjcnlwdDsKLQotCS8qIGhvc3Qgc2hvdWxkIHN0cmlwIElWIGFuZCBJQ1YgZnJvbSBwcm90ZWN0ZWQgZnJhbWVzICovCi0JLyogbWVhbmluZ2Z1bCBvbmx5IHdoZW4gaGFyZHdhcmUgZGVjcnlwdGlvbiBpcyBiZWluZyB1c2VkICovCi0JaW50IGhvc3Rfc3RyaXBfaXZfaWN2OwotCi0JaW50IGhvc3Rfb3Blbl9mcmFnOwotCWludCBob3N0X2J1aWxkX2l2OwotCWludCBpZWVlODAyXzF4OyAvKiBpcyBJRUVFIDgwMi4xWCB1c2VkICovCi0KLQkvKiBXUEEgZGF0YSAqLwotCWJvb2wgYkhhbGZXaXJlbGVzc04yNEdNb2RlOwotCWludCB3cGFfZW5hYmxlZDsKLQlpbnQgZHJvcF91bmVuY3J5cHRlZDsKLQlpbnQgdGtpcF9jb3VudGVybWVhc3VyZXM7Ci0JaW50IHByaXZhY3lfaW52b2tlZDsKLQlzaXplX3Qgd3BhX2llX2xlbjsKLQl1OCAqd3BhX2llOwotCXU4IGFwX21hY19hZGRyWzZdOwotCXUxNiBwYWlyd2lzZV9rZXlfdHlwZTsKLQl1MTYgZ3JvdXBfa2V5X3R5cGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjcnlwdF9kZWluaXRfbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0W1dFUF9LRVlTXTsKLQlpbnQgdHhfa2V5aWR4OyAvKiBkZWZhdWx0IFRYIGtleSBpbmRleCAoY3J5cHRbdHhfa2V5aWR4XSkgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCBjcnlwdF9kZWluaXRfdGltZXI7Ci0JaW50IGNyeXB0X3F1aWVzY2VkOwotCi0JaW50IGJjcnhfc3RhX2tleTsgLyogdXNlIGluZGl2aWR1YWwga2V5cyB0byBvdmVycmlkZSBkZWZhdWx0IGtleXMgZXZlbgotCQkJICAgKiB3aXRoIFJYIG9mIGJyb2FkL211bHRpY2FzdCBmcmFtZXMgKi8KLQotCS8qIEZyYWdtZW50YXRpb24gc3RydWN0dXJlcyAqLwotCS8qIGVhY2ggc3RyZWFtaW5nIGNvbnRhaW4gYSBlbnRyeSAqLwotCXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSBmcmFnX2NhY2hlWzE3XVtJRUVFODAyMTFfRlJBR19DQUNIRV9MRU5dOwotCXVuc2lnbmVkIGludCBmcmFnX25leHRfaWR4WzE3XTsKLQl1MTYgZnRzOyAvKiBGcmFnbWVudGF0aW9uIFRocmVzaG9sZCAqLwotI2RlZmluZSBERUZBVUxUX1JUU19USFJFU0hPTEQgMjM0NlUKLSNkZWZpbmUgTUlOX1JUU19USFJFU0hPTEQgMQotI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAyMzQ2VQotCXUxNiBydHM7IC8qIFJUUyB0aHJlc2hvbGQgKi8KLQotCS8qIEFzc29jaWF0aW9uIGluZm8gKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0KLQkvKiBUaGlzIHN0b3JlcyBpbmZvcyBmb3IgdGhlIGN1cnJlbnQgbmV0d29yay4KLQkgKiBFaXRoZXIgdGhlIG5ldHdvcmsgd2UgYXJlIGFzc29jaWF0ZWQgaW4gSU5GUkFTVFJVQ1RVUkUKLQkgKiBvciB0aGUgbmV0d29yayB0aGF0IHdlIGFyZSBjcmVhdGluZyBpbiBNQVNURVIgbW9kZS4KLQkgKiBhZC1ob2MgaXMgYSBtaXh0dXJlIDstKS4KLQkgKiBOb3RlIHRoYXQgaW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSwgZXZlbiB3aGVuIG5vdCBhc3NvY2lhdGVkLAotCSAqIGZpZWxkcyBic3NpZCBhbmQgZXNzaWQgbWF5IGJlIHZhbGlkIChpZiB3cGFfc2V0IGFuZCBlc3NpZF9zZXQKLQkgKiBhcmUgdHJ1ZSkgYXMgdGh5IGNhcnJ5IHRoZSB2YWx1ZSBzZXQgYnkgdGhlIHVzZXIgdmlhIGl3Y29uZmlnCi0JICovCi0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIGN1cnJlbnRfbmV0d29yazsKLQotCWVudW0gaWVlZTgwMjExX3N0YXRlIHN0YXRlOwotCi0JaW50IHNob3J0X3Nsb3Q7Ci0JaW50IHJlZ19tb2RlOwotCWludCBtb2RlOyAgICAgICAvKiBBLCBCLCBHICovCi0JaW50IG1vZHVsYXRpb247IC8qIENDSywgT0ZETSAqLwotCWludCBmcmVxX2JhbmQ7ICAvKiAyLjRHaHosIDUuMkdoeiwgTWl4ZWQgKi8KLQlpbnQgYWJnX3RydWU7ICAgLyogQUJHIGZsYWcgICAgICAgICAgICAgICovCi0KLQkvKiB1c2VkIGZvciBmb3JjaW5nIHRoZSBpYnNzIHdvcmtxdWV1ZSB0byB0ZXJtaW5hdGUKLQkgKiB3aXRob3V0IHdhaXQgZm9yIHRoZSBzeW5jcm8gc2NhbiB0byB0ZXJtaW5hdGUKLQkgKi8KLQlzaG9ydCBzeW5jX3NjYW5faHVycnl1cDsKLQotCWludCBwZXJmZWN0X3Jzc2k7Ci0JaW50IHdvcnN0X3Jzc2k7Ci0KLQl1MTYgcHJldl9zZXFfY3RsOyAgICAgICAvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLwotCi0JLyogbWFwIG9mIGFsbG93ZWQgY2hhbm5lbHMuIDAgaXMgZHVtbXkgKi8KLQkvKiBGSVhNRTogcmVtZWJlciB0byBkZWZhdWx0IHRvIGEgYmFzaWMgY2hhbm5lbCBwbGFuIGRlcGVuZGluZyBvZiB0aGUgUEhZIHR5cGUgKi8KLSNpZmRlZiBFTkFCTEVfRE9UMTFECi0Jdm9pZCAqcERvdDExZEluZm87Ci0JYm9vbCBiR2xvYmFsRG9tYWluOwotI2Vsc2UKLQlpbnQgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOwotI2VuZGlmCi0JaW50IHJhdGU7ICAgICAgIC8qIGN1cnJlbnQgcmF0ZSAqLwotCWludCBiYXNpY19yYXRlOwotCS8qIEZJWE1FOiBwbGVhY2UgY2FsbGJhY2ssIHNlZSBpZiByZWR1bmRhbnQgd2l0aCBzb2Z0bWFjX2ZlYXR1cmVzICovCi0Jc2hvcnQgYWN0aXZlX3NjYW47Ci0KLQkvKiB0aGlzIGNvbnRhaW5zIGZsYWdzIGZvciBzZWxlY3RpdmVseSBlbmFibGUgc29mdG1hYyBzdXBwb3J0ICovCi0JdTE2IHNvZnRtYWNfZmVhdHVyZXM7Ci0KLQkvKiBpZiB0aGUgc2VxdWVuY2UgY29udHJvbCBmaWVsZCBpcyBub3QgZmlsbGVkIGJ5IEhXICovCi0JdTE2IHNlcV9jdHJsWzVdOwotCi0JLyogYXNzb2NpYXRpb24gcHJvY2VkdXJlIHRyYW5zYWN0aW9uIHNlcXVlbmNlIG51bWJlciAqLwotCXUxNiBhc3NvY2lhdGVfc2VxOwotCi0JLyogQUlEIGZvciBSVFhlZCBhc3NvY2lhdGlvbiByZXNwb25zZXMgKi8KLQl1MTYgYXNzb2NfaWQ7Ci0KLQkvKiBwb3dlciBzYXZlIG1vZGUgcmVsYXRlZCovCi0Jc2hvcnQgcHM7Ci0Jc2hvcnQgc3RhX3NsZWVwOwotCWludCBwc190aW1lb3V0OwotCWludCBwc19wZXJpb2Q7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHBzX3Rhc2s7Ci0JdTMyIHBzX3RoOwotCXUzMiBwc190bDsKLQotCXNob3J0IHJhd190eDsKLQkvKiB1c2VkIGlmIElFRUVfU09GVE1BQ19UWF9RVUVVRSBpcyBzZXQgKi8KLQlzaG9ydCBxdWV1ZV9zdG9wOwotCXNob3J0IHNjYW5uaW5nOwotCXNob3J0IHByb3RvX3N0YXJ0ZWQ7Ci0KLQlzdHJ1Y3Qgc2VtYXBob3JlIHd4X3NlbTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNjYW5fc2VtOwotCi0Jc3BpbmxvY2tfdCBtZ210X3R4X2xvY2s7Ci0Jc3BpbmxvY2tfdCBiZWFjb25fbG9jazsKLQotCXNob3J0IGJlYWNvbl90eGluZzsKLQotCXNob3J0IHdhcF9zZXQ7Ci0Jc2hvcnQgc3NpZF9zZXQ7Ci0KLQl1OCAgd3BheF90eXBlX3NldDsKLQl1MzIgd3BheF90eXBlX25vdGlmeTsKLQotCS8qIFFvUyByZWxhdGVkIGZsYWcgKi8KLQljaGFyIGluaXRfd21tcGFyYW1fZmxhZzsKLQkvKiBzZXQgb24gaW5pdGlhbGl6YXRpb24gKi8KLQl1OCAgcW9zX3N1cHBvcnQ7Ci0KLQkvKiBmb3IgZGlzY2FyZGluZyBkdXBsaWNhdGVkIHBhY2tldHMgaW4gSUJTUyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaWJzc19tYWNfaGFzaFtJRUVFX0lCU1NfTUFDX0hBU0hfU0laRV07Ci0KLQkvKiBmb3IgZGlzY2FyZGluZyBkdXBsaWNhdGVkIHBhY2tldHMgaW4gQlNTICovCi0JdTE2IGxhc3RfcnhzZXFfbnVtWzE3XTsgLyogcnggc2VxIHByZXZpb3VzIHBlci10aWQgKi8KLQl1MTYgbGFzdF9yeGZyYWdfbnVtWzE3XTsvKiB0eCBmcmFnIHByZXZpb3VzIHBlci10aWQgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfcGFja2V0X3RpbWVbMTddOwotCi0JLyogZm9yIFBTIG1vZGUgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfcnhfcHNfdGltZTsKLQotCS8qIHVzZWQgaWYgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRSBpcyBzZXQgKi8KLQlzdHJ1Y3Qgc2tfYnVmZiAqbWdtdF9xdWV1ZV9yaW5nW01HTVRfUVVFVUVfTlVNXTsKLQlpbnQgbWdtdF9xdWV1ZV9oZWFkOwotCWludCBtZ210X3F1ZXVlX3RhaWw7Ci0vKiBhZGRlZCBmb3IgcnRsODE5eCAqLwotI2RlZmluZSBJRUVFODAyMTFfUVVFVUVfTElNSVQgMTI4Ci0JdTggQXNvY1JldHJ5Q291bnQ7Ci0JdW5zaWduZWQgaW50IGh3X2hlYWRlcjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl93YWl0UVtNQVhfUVVFVUVfU0laRV07Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAgc2tiX2FnZ1FbTUFYX1FVRVVFX1NJWkVdOwotCXN0cnVjdCBza19idWZmX2hlYWQgIHNrYl9kcnZfYWdnUVtNQVhfUVVFVUVfU0laRV07Ci0JdTMyCXN0YV9lZGNhX3BhcmFtWzRdOwotCWJvb2wgYWdncmVnYXRpb247Ci0JLyogRW5hYmxlL0Rpc2FibGUgUnggaW1tZWRpYXRlIEJBIGNhcGFiaWxpdHkuICovCi0JYm9vbCBlbmFibGVfcnhfaW1tX0JBOwotCWJvb2wgYmlic3Njb29yZGluYXRvcjsKLQotCS8qK2J5IGFteSBmb3IgRE0gLDA4MDUxNSAqLwotCS8qIER5bmFtaWMgVHggcG93ZXIgZm9yIG5lYXIvZmFyIHJhbmdlIGVuYWJsZS9EaXNhYmxlICAqLwotCWJvb2wJYmR5bmFtaWNfdHhwb3dlcl9lbmFibGU7Ci0KLQlib29sIGJDVFNUb1NlbGZFbmFibGU7Ci0JdTggCUNUU1RvU2VsZlRIOwotCi0JdTMyIAlmc3luY190aW1lX2ludGVydmFsOwotCXUzMglmc3luY19yYXRlX2JpdG1hcDsKLQl1OAlmc3luY19yc3NpX3RocmVzaG9sZDsKLQlib29sCWJmc3luY19lbmFibGU7Ci0KLQl1OAlmc3luY19tdWx0aXBsZV90aW1laW50ZXJ2YWw7CQkvKiBGc3luY011bHRpcGxlVGltZUludGVydmFsICogRnN5bmNUaW1lSW50ZXJ2YWwgKi8KLQl1MzIJZnN5bmNfZmlyc3RkaWZmX3JhdGV0aHJlc2hvbGQ7CQkvKiBsb3cgdGhyZXNob2xkICovCi0JdTMyCWZzeW5jX3NlY29uZGRpZmZfcmF0ZXRocmVzaG9sZDsJIC8qIGRlY3JlYXNlIHRocmVzaG9sZCAqLwotCUZzeW5jX1N0YXRlCQkJZnN5bmNfc3RhdGU7Ci0JYm9vbAkJYmlzX2FueV9ub25iZXBrdHM7Ci0JLyogMjBNaHogNDBNaHogQXV0b1N3aXRjaCBUaHJlc2hvbGQgKi8KLQliYW5kd2lkdGhfYXV0b3N3aXRjaCBiYW5kd2lkdGhfYXV0b19zd2l0Y2g7Ci0JLyogZm9yIHR4cG93ZXIgdHJhY2tpbmcgKi8KLQlib29sIEZ3UldSRjsKLQotCS8qIGFkZGVkIGJ5IGFteSBmb3IgQVAgcm9hbWluZyAqLwotCVJUX0xJTktfREVURUNUX1QJTGlua0RldGVjdEluZm87Ci0JLyogYWRkZWQgYnkgYW15IGZvciBwcyAqLwotCVJUX1BPV0VSX1NBVkVfQ09OVFJPTAlQb3dlclNhdmVDb250cm9sOwotCS8qIHVzZWQgaWYgSUVFRV9TT0ZUTUFDX1RYX1FVRVVFIGlzIHNldCAqLwotCXN0cnVjdCAgdHhfcGVuZGluZ190IHR4X3BlbmRpbmc7Ci0KLQkvKiB1c2VkIGlmIElFRUVfU09GVE1BQ19BU1NPQ0lBVEUgaXMgc2V0ICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgYXNzb2NpYXRlX3RpbWVyOwotCi0JLyogdXNlZCBpZiBJRUVFX1NPRlRNQUNfQkVBQ09OUyBpcyBzZXQgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCBiZWFjb25fdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGFzc29jaWF0ZV9jb21wbGV0ZV93cTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXNzb2NpYXRlX3Byb2NlZHVyZV93cTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHNvZnRtYWNfc2Nhbl93cTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFzc29jaWF0ZV9yZXRyeV93cTsKLQkgc3RydWN0IGRlbGF5ZWRfd29yayBzdGFydF9pYnNzX3dxOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3eF9zeW5jX3NjYW5fd3E7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwotCS8qIFFvcyByZWxhdGVkLiBBZGRlZCBieSBBbm5pZSwgMjAwNS0xMS0wMS4gKi8KLQkvKiBTVEFfUU9TICBTdGFRb3M7ICovCi0KLQotCS8qIENhbGxiYWNrIGZ1bmN0aW9ucyAqLwotCXZvaWQgKCpzZXRfc2VjdXJpdHkpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgKnNlYyk7Ci0KLQkvKiBVc2VkIHRvIFRYIGRhdGEgZnJhbWUgYnkgdXNpbmcgdHhiIHN0cnVjdHMuCi0JICogdGhpcyBpcyBub3QgdXNlZCBpZiBpbiB0aGUgc29mdG1hY19mZWF0dXJlcwotCSAqIGlzIHNldCB0aGUgZmxhZyBJRUVFX1NPRlRNQUNfVFhfUVVFVUUKLQkgKi8KLQlpbnQgKCpoYXJkX3N0YXJ0X3htaXQpKHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQlpbnQgKCpyZXNldF9wb3J0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQlpbnQgKCppc19xdWV1ZV9mdWxsKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSk7Ci0KLQlpbnQgKCpoYW5kbGVfbWFuYWdlbWVudCkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssIHUxNiB0eXBlKTsKLQlpbnQgKCppc19xb3NfYWN0aXZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLQkvKiBTb2Z0bWFjLWdlbmVyYXRlZCBmcmFtZXMgKG1hbWFnZW1lbnQpIGFyZSBUWGVkIHZpYSB0aGlzCi0JICogY2FsbGJhY2sgaWYgdGhlIGZsYWcgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRSBpcwotCSAqIG5vdCBzZXQuIEFzIHNvbWUgY2FyZHMgbWF5IGhhdmUgZGlmZmVyZW50IEhXIHF1ZXVlcyB0aGF0Ci0JICogb25lIG1pZ2h0IHdhbnQgdG8gdXNlIGZvciBkYXRhIGFuZCBtYW5hZ2VtZW50IGZyYW1lcwotCSAqIHRoZSBvcHRpb24gdG8gaGF2ZSB0d28gY2FsbGJhY2tzIG1pZ2h0IGJlIHVzZWZ1bC4KLQkgKiBUaGlzIGZ1Y250aW9uIGNhbid0IHNsZWVwLgotCSAqLwotCWludCAoKnNvZnRtYWNfaGFyZF9zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JLyogdXNlZCBpbnN0ZWFkIG9mIGhhcmRfc3RhcnRfeG1pdCAobm90IHNvZnRtYWNfaGFyZF9zdGFydF94bWl0KQotCSAqIGlmIHRoZSBJRUVFX1NPRlRNQUNfVFhfUVVFVUUgZmVhdHVyZSBpcyB1c2VkIHRvIFRYIGRhdGEKLQkgKiBmcmFtZXMuIEkgdGhlIG9wdGlvbiBJRUVFX1NPRlRNQUNfU0lOR0xFX1FVRVVFIGlzIGFsc28gc2V0Ci0JICogdGhlbiBhbHNvIG1hbmFnZW1lbnQgZnJhbWVzIGFyZSBzZW50IHZpYSB0aGlzIGNhbGxiYWNrLgotCSAqIFRoaXMgZnVuY3Rpb24gY2FuJ3Qgc2xlZXAuCi0JICovCi0Jdm9pZCAoKnNvZnRtYWNfZGF0YV9oYXJkX3N0YXJ0X3htaXQpKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJhdGUpOwotCi0JLyogc3RvcHMgdGhlIEhXIHF1ZXVlIGZvciBEQVRBIGZyYW1lcy4gVXNlZnVsIHRvIGF2b2lkCi0JICogd2FzdGUgdGltZSB0byBUWCBkYXRhIGZyYW1lIHdoZW4gd2UgYXJlIHJlYXNzb2NpYXRpbmcKLQkgKiBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KLQkgKi8KLQl2b2lkICgqZGF0YV9oYXJkX3N0b3ApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0JLyogT0sgdGhpcyBpcyBjb21wbGVtZW50YXIgdG8gZGF0YV9wb2xsX2hhcmRfc3RvcCAqLwotCXZvaWQgKCpkYXRhX2hhcmRfcmVzdW1lKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCS8qIGFzayB0byB0aGUgZHJpdmVyIHRvIHJldHVuZSB0aGUgcmFkaW8gLgotCSAqIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLiB0aGUgZHJpdmVyIHNob3VsZCBlbnN1cmUKLQkgKiB0aGUgcmFkaW8gaGFzIGJlZW4gc3dpdGhjZWQgYmVmb3JlIHJldHVybi4KLQkgKi8KLQl2b2lkICgqc2V0X2NoYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNob3J0IGNoKTsKLQotCS8qIFRoZXNlIGFyZSBub3QgdXNlZCBpZiB0aGUgaWVlZSBzdGFjayB0YWtlcyBjYXJlIG9mCi0JICogc2Nhbm5pbmcgKElFRUVfU09GVE1BQ19TQ0FOIGZlYXR1cmUgc2V0KS4KLQkgKiBJbiB0aGlzIGNhc2Ugb25seSB0aGUgc2V0X2NoYW4gaXMgdXNlZC4KLQkgKgotCSAqIFRoZSBzeW5jcm8gdmVyc2lvbiBpcyBzaW1pbGFyIHRvIHRoZSBzdGFydF9zY2FuIGJ1dAotCSAqIGRvZXMgbm90IHJldHVybiB1bnRpbCBhbGwgY2hhbm5lbHMgaGFzIGJlZW4gc2Nhbm5lZC4KLQkgKiB0aGlzIGlzIGNhbGxlZCBpbiB1c2VyIGNvbnRleHQgYW5kIHNob3VsZCBzbGVlcCwKLQkgKiBpdCBpcyBjYWxsZWQgaW4gYSB3b3JrX3F1ZXVlIHdoZW4gc3dpdGhjaW5nIHRvIGFkLWhvYyBtb2RlCi0JICogb3IgaW4gYmVoYWxmIG9mIGl3bGlzdCBzY2FuIHdoZW4gdGhlIGNhcmQgaXMgYXNzb2NpYXRlZAotCSAqIGFuZCByb290IHVzZXIgYXNrIGZvciBhIHNjYW4uCi0JICogdGhlIGZ1Y250aW9uIHN0b3Bfc2NhbiBzaG91bGQgc3RvcCBib3RoIHRoZSBzeW5jcm8gYW5kCi0JICogYmFja2dyb3VuZCBzY2FubmluZyBhbmQgY2FuIHNsZWVwLgotCSAqIFRoZSBmdWNudGlvbiBzdGFydF9zY2FuIHNob3VsZCBpbml0aWF0ZSB0aGUgYmFja2dyb3VuZAotCSAqIHNjYW5uaW5nIGFuZCBjYW4ndCBzbGVlcC4KLQkgKi8KLQl2b2lkICgqc2Nhbl9zeW5jcm8pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCXZvaWQgKCpzdGFydF9zY2FuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQl2b2lkICgqc3RvcF9zY2FuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCS8qIGluZGljYXRlIHRoZSBkcml2ZXIgdGhhdCB0aGUgbGluayBzdGF0ZSBpcyBjaGFuZ2VkCi0JICogZm9yIGV4YW1wbGUgaXQgbWF5IGluZGljYXRlIHRoZSBjYXJkIGlzIGFzc29jaWF0ZWQgbm93LgotCSAqIERyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluIHRoaXMgdG8gYXBwbHkgUlggZmlsdGVyCi0JICogcnVsZXMgb3Igc2ltcGx5IGxpZ2h0IHRoZSBMSU5LIGxlZAotCSAqLwotCXZvaWQgKCpsaW5rX2NoYW5nZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLQkvKiB0aGVzZSB0d28gZnVuY3Rpb24gaW5kaWNhdGVzIHRvIHRoZSBIVyB3aGVuIHRvIHN0YXJ0Ci0JICogYW5kIHN0b3AgdG8gc2VuZCBiZWFjb25zLiBUaGlzIGlzIHVzZWQgd2hlbiB0aGUKLQkgKiBJRUVFX1NPRlRNQUNfQkVBQ09OUyBpcyBub3Qgc2V0LiBGb3Igbm93IHRoZQotCSAqIHN0b3Bfc2VuZF9iYWNvbnMgaXMgTk9UIGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIG9ubHkKLQkgKiBhZnRlciBzdGFydF9zZW5kX2JlYWNvbnMuCi0JICovCi0Jdm9pZCAoKnN0YXJ0X3NlbmRfYmVhY29ucykgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB0eF9yYXRlKTsKLQl2b2lkICgqc3RvcF9zZW5kX2JlYWNvbnMpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCS8qIHBvd2VyIHNhdmUgbW9kZSByZWxhdGVkICovCi0Jdm9pZCAoKnN0YV93YWtlX3VwKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKnBzX3JlcXVlc3RfdHhfYWNrKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKmVudGVyX3NsZWVwX3N0YXRlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRoLCB1MzIgdGwpOwotCXNob3J0ICgqcHNfaXNfcXVldWVfZW1wdHkpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9iZWFjb24gKmJlYWNvbiwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQlpbnQgKCpoYW5kbGVfYXNzb2NfcmVzcG9uc2UpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lICpyZXNwLCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspOwotCi0KLQkvKiBjaGVjayB3aGV0aGVyIFR4IGh3IHJlc291Y2UgYXZhaWxhYmxlICovCi0Jc2hvcnQgKCpjaGVja19uaWNfZW5vdWdoX2Rlc2MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBxdWV1ZV9pbmRleCk7Ci0JLyogYWRkZWQgYnkgd2IgZm9yIEhUIHJlbGF0ZWQgKi8KLQl2b2lkICgqU2V0QldNb2RlSGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgSFRfQ0hBTk5FTF9XSURUSCBCYW5kd2lkdGgsIEhUX0VYVENITkxfT0ZGU0VUIE9mZnNldCk7Ci0JYm9vbCAoKkdldE5tb2RlU3VwcG9ydEJ5U2VjQ2ZnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQl2b2lkICgqU2V0V2lyZWxlc3NNb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB3aXJlbGVzc19tb2RlKTsKLQlib29sICgqR2V0SGFsZk5tb2RlU3VwcG9ydEJ5QVBzSGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jdm9pZCAoKkluaXRpYWxHYWluSGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggT3BlcmF0aW9uKTsKLQotCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCi0JICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KLQl1OCBwcml2WzBdOwotfTsKLQotI2RlZmluZSBJRUVFX0EgICAgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRV9CICAgICAgICAgICAgKDE8PDEpCi0jZGVmaW5lIElFRUVfRyAgICAgICAgICAgICgxPDwyKQotI2RlZmluZSBJRUVFX05fMjRHIAkJICAoMTw8NCkKLSNkZWZpbmUJSUVFRV9OXzVHCQkgICgxPDw1KQotI2RlZmluZSBJRUVFX01PREVfTUFTSyAgICAoSUVFRV9BfElFRUVfQnxJRUVFX0cpCi0KLS8qIEdlbmVyYXRlIGEgODAyLjExIGhlYWRlciAqLwotCi0vKiBVc2VzIHRoZSBjaGFubmVsIGNoYW5nZSBjYWxsYmFjayBkaXJlY3RseQotICogaW5zdGVhZCBvZiBbc3RhcnQvc3RvcF0gc2NhbiBjYWxsYmFja3MKLSAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfU0NBTiAoMTw8MikKLQotLyogUGVyZm9ybSBhdXRoZW50aWNhdGlvbiBhbmQgYXNzb2NpYXRpb24gaGFuZHNoYWtlICovCi0jZGVmaW5lIElFRUVfU09GVE1BQ19BU1NPQ0lBVEUgKDE8PDMpCi0KLS8qIEdlbmVyYXRlIHByb2JlIHJlcXVlc3RzICovCi0jZGVmaW5lIElFRUVfU09GVE1BQ19QUk9CRVJRICgxPDw0KQotCi0vKiBHZW5lcmF0ZSByZXNwb25lcyB0byBwcm9iZSByZXF1ZXN0cyAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfUFJPQkVSUyAoMTw8NSkKLQotLyogVGhlIGllZWU4MDIuMTEgc3RhY2sgd2lsbCBtYW5hZ2VzIHRoZSBuZXRpZiBxdWV1ZQotICogd2FrZS9zdG9wIGZvciB0aGUgZHJpdmVyLCB0YWtpbmcgY2FyZSBvZiA4MDIuMTEKLSAqIGZyYWdtZW50YXRpb24uIFNlZSBzb2Z0bWFjLmMgZm9yIGRldGFpbHMuICovCi0jZGVmaW5lIElFRUVfU09GVE1BQ19UWF9RVUVVRSAoMTw8NykKLQotLyogVXNlcyBvbmx5IHRoZSBzb2Z0bWFjX2RhdGFfaGFyZF9zdGFydF94bWl0Ci0gKiBldmVuIGZvciBUWCBtYW5hZ2VtZW50IGZyYW1lcy4KLSAqLwotI2RlZmluZSBJRUVFX1NPRlRNQUNfU0lOR0xFX1FVRVVFICgxPDw4KQotCi0vKiBHZW5lcmF0ZSBiZWFjb25zLiAgVGhlIHN0YWNrIHdpbGwgZW5xdWV1ZSBiZWFjb25zCi0gKiB0byB0aGUgY2FyZAotICovCi0jZGVmaW5lIElFRUVfU09GVE1BQ19CRUFDT05TICgxPDw2KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmllZWU4MDIxMV9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpKS0+cHJpdjsKLX0KLQotZXh0ZXJuIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX2VtcHR5X2Vzc2lkKGNvbnN0IGNoYXIgKmVzc2lkLCBpbnQgZXNzaWRfbGVuKQotewotCS8qIFNpbmdsZSB3aGl0ZSBzcGFjZSBpcyBmb3IgTGlua3N5cyBBUHMgKi8KLQlpZiAoZXNzaWRfbGVuID09IDEgJiYgZXNzaWRbMF0gPT0gJyAnKQotCQlyZXR1cm4gMTsKLQotCS8qIE90aGVyd2lzZSwgaWYgdGhlIGVudGlyZSBlc3NpZCBpcyAwLCB3ZSBhc3N1bWUgaXQgaXMgaGlkZGVuICovCi0Jd2hpbGUgKGVzc2lkX2xlbikgewotCQllc3NpZF9sZW4tLTsKLQkJaWYgKGVzc2lkW2Vzc2lkX2xlbl0gIT0gJ1wwJykKLQkJCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1leHRlcm4gaW5saW5lIGludCBpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgaW50IG1vZGUpCi17Ci0JLyoKLQkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgYm90aCBhY2Nlc3MgcG9pbnRzIGFuZCBvdXIgZGV2aWNlIHRvIHN1cHBvcnQKLQkgKiBjb21iaW5hdGlvbnMgb2YgbW9kZXMsIHNvIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25lIHZhbGlkIGNvbWJpbmF0aW9uCi0JICogb2YgYXAvZGV2aWNlIHN1cHBvcnRlZCBtb2RlcywgdGhlbiByZXR1cm4gc3VjY2VzcwotCSAqCi0JICovCi0JaWYgKChtb2RlICYgSUVFRV9BKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9HKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9CKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikgJiYKLQkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotZXh0ZXJuIGlubGluZSBpbnQgaWVlZTgwMjExX2dldF9oZHJsZW4odTE2IGZjKQotewotCWludCBoZHJsZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwotCi0Jc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQotCQkJaGRybGVuID0gSUVFRTgwMjExXzRBRERSX0xFTjsgLyogQWRkcjQgKi8KLQkJaWYgKElFRUU4MDIxMV9RT1NfSEFTX1NFUShmYykpCi0JCQloZHJsZW4gKz0gMjsgLyogUU9TIGN0cmwqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gSUVFRTgwMjExXzFBRERSX0xFTjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGRybGVuID0gSUVFRTgwMjExXzJBRERSX0xFTjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBoZHJsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggKmllZWU4MDIxMV9nZXRfcGF5bG9hZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQotewotCXN3aXRjaCAoaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKSkgewotCWNhc2UgSUVFRTgwMjExXzFBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzJBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzNBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzRBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKiloZHIpLT5wYXlsb2FkOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX29mZG1fcmF0ZSh1OCByYXRlKQotewotCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19jY2tfcmF0ZSh1OCByYXRlKQotewotCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qIGllZWU4MDIxMS5jICovCi1leHRlcm4gdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLQotLyogaWVlZTgwMjExX3R4LmMgKi8KLQotZXh0ZXJuIGludCBpZWVlODAyMTFfZW5jcnlwdF9mcmFnbWVudCgKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZywKLQlpbnQgaGRyX2xlbik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7Ci0KLQotLyogaWVlZTgwMjExX3J4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwotCi0vKiBpZWVlODAyMTFfd3guYyAqLwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotI2lmIFdJUkVMRVNTX0VYVCA+PSAxOAotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZV9leHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpkYXRhLCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfbWxtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLSNlbmRpZgotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKmllLCBzaXplX3QgbGVuKTsKLQotLyogaWVlZTgwMjExX3NvZnRtYWMuYyAqLwotZXh0ZXJuIHNob3J0IGllZWU4MDIxMV9pc181NGcoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIG5ldCk7Ci1leHRlcm4gc2hvcnQgaWVlZTgwMjExX2lzX3Nob3J0c2xvdChzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4X2ZyYW1lX3NvZnRtYWMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cywgdTE2IHR5cGUsCi0JCQl1MTYgc3R5cGUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfbmV3X25ldChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXQpOwotCi12b2lkIFNlbmREaXNhc3NvY2lhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTgqIGFzU3RhLCB1OCBhc1Jzbik7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY194bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLQotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIG5vdGlmeV93eF9hc3NvY19ldmVudChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19jaGVja19hbGxfbmV0cyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfYnNzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9tYXN0ZXJfYnNzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX2luaXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX2Fib3J0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9kaXNhc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2Nhbl9zeW5jcm8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2NoZWNrX2FsbF9uZXRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9yZXNldF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9nZXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3dwYV9zdXBwbGljYW50X2lvY3RsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaXdfcG9pbnQgKnApOwotZXh0ZXJuIHZvaWQgbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9wc190eF9hY2soc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHNob3J0IHN1Y2Nlc3MpOwotCi1leHRlcm4gdm9pZCBzb2Z0bWFjX21nbXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLS8qIGllZWU4MDIxMV9jcnlwdF9jY21wJnRraXAmd2VwLmMgKi8KLWV4dGVybiB2b2lkIGllZWU4MDIxMV90a2lwX251bGwodm9pZCk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfd2VwX251bGwodm9pZCk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfY2NtcF9udWxsKHZvaWQpOwotCi0vKiBpZWVlODAyMTFfc29mdG1hY193eC5jICovCi0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF93YXAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHQpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfd2FwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgdW5pb24gaXdyZXFfZGF0YSAqYXdycSwKLQkJCSBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICphLAotCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqYik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICphLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpiKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2Vzc2lkKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmEsCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmIpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZnJlcShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqYSwKLQkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqYik7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICphLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpiKTsKLQotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3d4X3N5bmNfc2Nhbl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9yYXd0eChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X25hbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLQotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X3Bvd2VyKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfcnRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci0KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9ydHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKLS8qIEhUICovCi0jZGVmaW5lIE1BWF9SRUNFSVZFX0JVRkZFUl9TSVpFIDkxMDAKLWV4dGVybiB2b2lkIEhURGVidWdIVENhcGFiaWxpdHkodTggKkNhcElFLCB1OCAqVGl0bGVTdHJpbmcpOwotZXh0ZXJuIHZvaWQgSFREZWJ1Z0hUSW5mbyh1OCAqSW5mb0lFLCB1OCAqVGl0bGVTdHJpbmcpOwotCi12b2lkIEhUU2V0Q29ubmVjdEJ3TW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgSFRfQ0hBTk5FTF9XSURUSCBCYW5kd2lkdGgsIEhUX0VYVENITkxfT0ZGU0VUICAgIE9mZnNldCk7Ci1leHRlcm4gdm9pZCBIVFVwZGF0ZURlZmF1bHRTZXR0aW5nKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIEhUQ29uc3RydWN0Q2FwYWJpbGl0eUVsZW1lbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpwb3NIVENhcCwgdTggKmxlbiwgdTggaXNFbmNyeXB0KTsKLWV4dGVybiB2b2lkIEhUQ29uc3RydWN0SW5mb0VsZW1lbnQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpwb3NIVEluZm8sIHU4ICpsZW4sIHU4IGlzRW5jcnlwdCk7Ci1leHRlcm4gdm9pZCBIVENvbnN0cnVjdFJUMlJUQWdnRWxlbWVudChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKnBvc1JUMlJUQWdnLCB1OCAqbGVuKTsKLWV4dGVybiB2b2lkIEhUT25Bc3NvY1JzcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBIVEluaXRpYWxpemVIVEluZm8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotZXh0ZXJuIHZvaWQgSFRJbml0aWFsaXplQnNzRGVzYyhQQlNTX0hUIHBCc3NIVCk7Ci1leHRlcm4gdm9pZCBIVFJlc2V0U2VsZkFuZFNhdmVQZWVyU2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpwTmV0d29yayk7Ci1leHRlcm4gdm9pZCBIVFVwZGF0ZVNlbGZBbmRQZWVyU2V0dGluZyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKnBOZXR3b3JrKTsKLWV4dGVybiB1OCBIVEdldEhpZ2hlc3RNQ1NSYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCAqcE1DU1JhdGVTZXQsIHU4ICpwTUNTRmlsdGVyKTsKLWV4dGVybiB1OCBNQ1NfRklMVEVSX0FMTFtdOwotZXh0ZXJuIHUxNiBNQ1NfREFUQV9SQVRFWzJdWzJdWzc3XSA7Ci1leHRlcm4gdTggSFRDQ2hlY2soc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4ICpwRnJhbWUpOwotZXh0ZXJuIHZvaWQgSFRSZXNldElPVFNldHRpbmcoUFJUX0hJR0hfVEhST1VHSFBVVCAgcEhUSW5mbyk7Ci1leHRlcm4gYm9vbCBJc0hUSGFsZk5tb2RlQVBzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB1MTYgSFRIYWxmTWNzVG9EYXRhUmF0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgIHU4ICAgICAgbk1jc1JhdGUpOwotZXh0ZXJuIHUxNiBIVE1jc1RvRGF0YVJhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IG5NY3NSYXRlKTsKLWV4dGVybiB1MTYgIFR4Q291bnRUb0RhdGFSYXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBuRGF0YVJhdGUpOwotLyogZnVuY3Rpb24gaW4gQkFQUk9DLmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4X0FEREJBUmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4X0FEREJBUnNwKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3J4X0RFTEJBKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiB2b2lkIFRzSW5pdEFkZEJBKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBQVFhfVFNfUkVDT1JEICAgcFRTLCB1OCBQb2xpY3ksIHU4IGJPdmVyd3JpdGVQZW5kaW5nKTsKLWV4dGVybiB2b2lkIFRzSW5pdERlbEJBKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBQVFNfQ09NTU9OX0lORk8gcFRzQ29tbW9uSW5mbywgVFJfU0VMRUNUIFR4UnhTZWxlY3QpOwotZXh0ZXJuIHZvaWQgQmFTZXR1cFRpbWVPdXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLWV4dGVybiB2b2lkIFR4QmFJbmFjdFRpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLWV4dGVybiB2b2lkIFJ4QmFJbmFjdFRpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLWV4dGVybiB2b2lkIFJlc2V0QmFFbnRyeShQQkFfUkVDT1JEIHBCQSk7Ci0vKiBmdW5jdGlvbiBpbiBUUy5jICovCi1leHRlcm4gYm9vbCBHZXRUcygKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQlQVFNfQ09NTU9OX0lORk8gKnBwVFMsCi0JdTgJCQkJKkFkZHIsCi0JdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSUQsCi0JVFJfU0VMRUNUICAgICAgICAgICAgICAgICAgICAgICBUeFJ4U2VsZWN0LCAgLyogUng6MSwgVHg6MCAqLwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYkFkZE5ld1RzCi0JKTsKLWV4dGVybiB2b2lkIFRTSW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gIHZvaWQgVHNTdGFydEFkZEJhUHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgUFRYX1RTX1JFQ09SRCAgIHBUeFRTKTsKLWV4dGVybiB2b2lkIFJlbW92ZVBlZXJUUyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggKkFkZHIpOwotZXh0ZXJuIHZvaWQgUmVtb3ZlQWxsVFMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwotdm9pZCBpZWVlODAyMTFfc29mdG1hY19zY2FuX3N5bmNybyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLWV4dGVybiBjb25zdCBsb25nIGllZWU4MDIxMV93bGFuX2ZyZXF1ZW5jaWVzW107Ci0KLWV4dGVybiBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaW5jcmVtZW50X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCWllZWUtPnNjYW5zKys7Ci19Ci0KLWV4dGVybiBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfc2NhbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCi17Ci0JcmV0dXJuIGllZWUtPnNjYW5zOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmVzY2FwZV9lc3NpZChjb25zdCBjaGFyICplc3NpZCwgdTggZXNzaWRfbGVuKQotewotCXN0YXRpYyBjaGFyIGVzY2FwZWRbSVdfRVNTSURfTUFYX1NJWkUgKiAyICsgMV07Ci0JY29uc3QgY2hhciAqcyA9IGVzc2lkOwotCWNoYXIgKmQgPSBlc2NhcGVkOwotCi0JaWYgKGllZWU4MDIxMV9pc19lbXB0eV9lc3NpZChlc3NpZCwgZXNzaWRfbGVuKSkgewotCQltZW1jcHkoZXNjYXBlZCwgIjxoaWRkZW4+Iiwgc2l6ZW9mKCI8aGlkZGVuPiIpKTsKLQkJcmV0dXJuIGVzY2FwZWQ7Ci0JfQotCi0JZXNzaWRfbGVuID0gbWluKGVzc2lkX2xlbiwgKHU4KUlXX0VTU0lEX01BWF9TSVpFKTsKLQl3aGlsZSAoZXNzaWRfbGVuLS0pIHsKLQkJaWYgKCpzID09ICdcMCcpIHsKLQkJCSpkKysgPSAnXFwnOwotCQkJKmQrKyA9ICcwJzsKLQkJCXMrKzsKLQkJfSBlbHNlIHsKLQkJCSpkKysgPSAqcysrOwotCQl9Ci0JfQotCSpkID0gJ1wwJzsKLQlyZXR1cm4gZXNjYXBlZDsKLX0KLQotLyogRm9yIHRoZSBmdW5jdGlvbiBpcyBtb3JlIHJlbGF0ZWQgdG8gaGFyZHdhcmUgc2V0dGluZywgaXQncyBiZXR0ZXIgdG8gdXNlIHRoZQotICogaWVlZSBoYW5kbGVyIHRvIHJlZmVyIHRvIGl0LgotICovCi1leHRlcm4gc2hvcnQgY2hlY2tfbmljX2Vub3VnaF9kZXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBxdWV1ZV9pbmRleCk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9kYXRhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9wYXJzZV9pbmZvX3BhcmFtKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCAqaW5mb19lbGVtZW50LAotCQl1MTYgbGVuZ3RoLAotCQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCi0JCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKTsKLQotdm9pZCBpZWVlODAyMTFfaW5kaWNhdGVfcGFja2V0cyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9yeGIgKipwcnhiSW5kaWNhdGVBcnJheSwgdTggIGluZGV4KTsKLSNkZWZpbmUgUlRfQVNPQ19SRVRSWV9MSU1JVAk1Ci0jZW5kaWYgLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IGZiNzhlZDIuLmQ2ZjU1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtODUsNyArODUsNyBAQAogCX0KIAkvKiBBZGQgdGhlIHByb3RvY29sIG5hbWUgKi8KIAlpd2UuY21kID0gU0lPQ0dJV05BTUU7Ci0JZm9yKGk9MDsgaTwoc2l6ZW9mKGllZWU4MDIxMV9tb2Rlcykvc2l6ZW9mKGllZWU4MDIxMV9tb2Rlc1swXSkpOyBpKyspIHsKKwlmb3IoaT0wOyBpPEFSUkFZX1NJWkUoaWVlZTgwMjExX21vZGVzKTsgaSsrKSB7CiAJCWlmKG5ldHdvcmstPm1vZGUmKDE8PGkpKSB7CiAJCQlzcHJpbnRmKHBuYW1lLGllZWU4MDIxMV9tb2Rlc1tpXS5tb2RlX3N0cmluZyxpZWVlODAyMTFfbW9kZXNbaV0ubW9kZV9zaXplKTsKIAkJCXBuYW1lICs9aWVlZTgwMjExX21vZGVzW2ldLm1vZGVfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlUuaAppbmRleCA2OWEyNzIxLi42MjA2ZjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVS5oCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgImllZWU4MDIxMS5oIgorI2luY2x1ZGUgImllZWU4MDIxMS9pZWVlODAyMTEuaCIKIAogI2RlZmluZSBSVEw4MTkyVQogI2RlZmluZSBSVEw4MTl4VV9NT0RVTEVfTkFNRSAicnRsODE5eFUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCmluZGV4IGYzODQ3MmMuLjFmZjc4NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfY29yZS5jCkBAIC00MTAsMTQgKzQxMCwxMiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcHJpdi0+dWRldjsKIAogCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkgICAgICAgUlRMODE4N19SRVFfR0VUX1JFR1MsIFJUTDgxODdfUkVRVF9SRUFELAotCQkJICAgICAgIChpbmR4JjB4ZmYpfDB4ZmYwMCwgKGluZHg+PjgpJjB4MGYsICZkYXRhLCAyLCBIWiAvIDIpOworCQkJCSAgICAgICBSVEw4MTg3X1JFUV9HRVRfUkVHUywgUlRMODE4N19SRVFUX1JFQUQsCisJCQkJICAgICAgIChpbmR4JjB4ZmYpfDB4ZmYwMCwgKGluZHg+PjgpJjB4MGYsCisJCQkJCQkJJmRhdGEsIDIsIEhaIC8gMik7CiAKIAlpZiAoc3RhdHVzIDwgMCkKLQl7CiAJCXByaW50aygicmVhZF9uaWNfd29yZCBUaW1lT3V0ISBzdGF0dXM6JWRcbiIsIHN0YXR1cyk7Ci0JfQotCiAKIAlyZXR1cm4gZGF0YTsKIH0KQEAgLTQzMSwxMyArNDI5LDEwIEBACiAKIAlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAogCQkJICAgICAgIFJUTDgxODdfUkVRX0dFVF9SRUdTLCBSVEw4MTg3X1JFUVRfUkVBRCwKLQkJCSAgICAgICBpbmR4fDB4ZmUwMCwgMCwgJmRhdGEsIDIsIEhaIC8gMik7CisJCQkJICAgICAgIGluZHh8MHhmZTAwLCAwLCAmZGF0YSwgMiwgSFogLyAyKTsKIAogCWlmIChzdGF0dXMgPCAwKQotCXsKIAkJcHJpbnRrKCJyZWFkX25pY193b3JkIFRpbWVPdXQhIHN0YXR1czolZFxuIiwgc3RhdHVzKTsKLQl9Ci0KIAogCXJldHVybiBkYXRhOwogfQpAQCAtNDQ2LDMxICs0NDEsMjkgQEAKIHsKIAl1MzIgZGF0YTsKIAlpbnQgc3RhdHVzOwotLy8JaW50IHJlc3VsdDsKKwkvKiBpbnQgcmVzdWx0OyAqLwogCiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gcHJpdi0+dWRldjsKIAogCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkgICAgICAgUlRMODE4N19SRVFfR0VUX1JFR1MsIFJUTDgxODdfUkVRVF9SRUFELAotCQkJICAgICAgIChpbmR4JjB4ZmYpfDB4ZmYwMCwgKGluZHg+PjgpJjB4MGYsICZkYXRhLCA0LCBIWiAvIDIpOwotLy8JaWYoMCAhPSByZXN1bHQpIHsKLS8vCSAgcHJpbnRrKEtFUk5fV0FSTklORyAicmVhZCBzaXplIG9mIGRhdGEgPSAlZFwsIGRhdGUgPSAlZFxuIiwgcmVzdWx0LCBkYXRhKTsKLS8vCX0KKwkJCQkgICAgICAgUlRMODE4N19SRVFfR0VUX1JFR1MsIFJUTDgxODdfUkVRVF9SRUFELAorCQkJCQkoaW5keCYweGZmKXwweGZmMDAsIChpbmR4Pj44KSYweDBmLAorCQkJCQkJCSZkYXRhLCA0LCBIWiAvIDIpOworCS8qIGlmKDAgIT0gcmVzdWx0KSB7CisJICoJcHJpbnRrKEtFUk5fV0FSTklORyAicmVhZCBzaXplIG9mIGRhdGEgPSAlZFwsIGRhdGUgPSAlZFxuIiwKKwkgKgkJCQkJCQkgcmVzdWx0LCBkYXRhKTsKKwkgKiB9CisJICovCiAKIAlpZiAoc3RhdHVzIDwgMCkKLQl7CiAJCXByaW50aygicmVhZF9uaWNfZHdvcmQgVGltZU91dCEgc3RhdHVzOiVkXG4iLCBzdGF0dXMpOwotCX0KLQotCiAKIAlyZXR1cm4gZGF0YTsKIH0KIAotCi0vL3U4IHJlYWRfcGh5X2NjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZHIpOwotLy91OCByZWFkX3BoeV9vZmRtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkcik7CisvKiB1OCByZWFkX3BoeV9jY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyKTsgKi8KKy8qIHU4IHJlYWRfcGh5X29mZG0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyKTsgKi8KIC8qIHRoaXMgbWlnaHQgc3RpbGwgY2FsbGVkIGluIHdoYXQgd2FzIHRoZSBQSFkgcnRsODE4NS9ydGw4MTkyIGNvbW1vbiBjb2RlCiAgKiBwbGFucyBhcmUgdG8gcG9zc2liaWx0eSB0dXJuIGl0IGFnYWluIGluIG9uZSBjb21tb24gY29kZS4uLgogICovCkBAIC00NzgsMjYgKzQ3MSwyMiBAQAogewogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE5Ml9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgcnRsODE5Ml9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0vL3ZvaWQgcnRsODE5Ml9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworLyogdm9pZCBydGw4MTkyX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7ICovCiB2b2lkIHJ0bDgxOTJfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotLy92b2lkIHJ0bDgxOTJfcnFfdHhfYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KKy8qIHZvaWQgcnRsODE5Ml9ycV90eF9hY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsgKi8KIHZvaWQgd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVBST0NGUyBTVFVGRi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVBST0NGUyBTVFVGRi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KIAotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcnRsODE5Ml9wcm9jID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJ0bDgxOTJfcHJvYzsKIAotCi0KLXN0YXRpYyBpbnQgcHJvY19nZXRfc3RhdHNfYXAoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotCQkJICBvZmZfdCBvZmZzZXQsIGludCBjb3VudCwKLQkJCSAgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHByb2NfZ2V0X3N0YXRzX2FwKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgY291bnQsCisJCQkJCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtNTA4LDE4ICs0OTcsMTIgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmaWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIGNvdW50IC0gbGVuLAotCQkiJXMgIiwgdGFyZ2V0LT5zc2lkKTsKKwkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIGNvdW50IC0gbGVuLCAiJXMgIiwgdGFyZ2V0LT5zc2lkKTsKIAotCQlpZih0YXJnZXQtPndwYV9pZV9sZW4+MCB8fCB0YXJnZXQtPnJzbl9pZV9sZW4+MCl7Ci0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgY291bnQgLSBsZW4sCi0JCQkiV1BBXG4iKTsKLQkJfQotCQllbHNlewotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIGNvdW50IC0gbGVuLAotCQkJIm5vbl9XUEFcbiIpOwotCQl9Ci0KKwkJaWYgKHRhcmdldC0+d3BhX2llX2xlbiA+IDAgfHwgdGFyZ2V0LT5yc25faWVfbGVuID4gMCkKKwkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwgIldQQVxuIik7CisJCWVsc2UKKwkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBjb3VudCAtIGxlbiwgIm5vbl9XUEFcbiIpOwogCX0KIAogCSplb2YgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV93eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV93eC5oCmluZGV4IGIyZjdhNTcuLmY0Y2YyODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5MlVfd3guaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX3d4LmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpZm5kZWYgUjgxODBfV1hfSAogI2RlZmluZSBSODE4MF9XWF9ICiAvLyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotLy8jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIGV4dGVybiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcjgxOTJfd3hfaGFuZGxlcnNfZGVmOwogLyogRW5hYmxlICB0aGUgcnRsODE5eF9jb3JlLmMgdG8gc2hhcmUgdGhpcyBmdW5jdGlvbiwgZGF2aWQgMjAwOC45LjIyICovCiBleHRlcm4gc3RydWN0IGl3X3N0YXRpc3RpY3MgKnI4MTkyX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9yODE5eFVfZmlybXdhcmUuYwppbmRleCAzY2MyZDU3Li5iMTM2ZWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOXhVX2Zpcm13YXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTl4VV9maXJtd2FyZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAgKiAgICAgICAgTkRJU19TVEFUVVNfRkFJTFVSRSAtIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBzaG91bGQgYmUgdGVybWluYXRlZAogICogICAgICAgIE5ESVNfU1RBVFVTX1NVQ0NFU1MgLSBpZiBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHN1Y2Nlc3MKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKICNpbmNsdWRlICJyODE5MlUuaCIKICNpbmNsdWRlICJyODE5MlVfaHcuaCIKICNpbmNsdWRlICJyODE5eFVfZmlybXdhcmVfaW1nLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXJfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvc2VwL3NlcF9kcml2ZXJfYXBpLmgKaW5kZXggMzgzNTQzZC4uN2VmMTZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyX2FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlcl9hcGkuaApAQCAtNjUsNyArNjUsNyBAQAogLyogZnJlZSBkeW5hbWljIGRhdGEgYWFsb2NhdGVkIGR1cmluZyB0YWJsZSBjcmVhdGlvbiAqLwogI2RlZmluZSBTRVBfSU9DRlJFRURNQVRBQkxFREFUQSAgICAgICAgICAgICAgICBfSU8oU0VQX0lPQ19NQUdJQ19OVU1CRVIgLCA3KQogCi0vKiBnZXQgdGhlIHN0YXRpYyBwb29sIGFyZWEgYWRkZXJzc2VzIChwaHlzaWNhbCBhbmQgdmlydHVhbCkgKi8KKy8qIGdldCB0aGUgc3RhdGljIHBvb2wgYXJlYSBhZGRyZXNzZXMgKHBoeXNpY2FsIGFuZCB2aXJ0dWFsKSAqLwogI2RlZmluZSBTRVBfSU9DR0VUU1RBVElDUE9PTEFERFIgICAgICAgICAgICAgICBfSU8oU0VQX0lPQ19NQUdJQ19OVU1CRVIgLCA4KQogCiAvKiBzZXQgZmxvdyBpZCBjb21tYW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKaW5kZXggZWIzYTYxOS4uYmVhYjQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaApAQCAtMTY4LDE3ICsxNjgsNiBAQAogCXN0cnVjdCBzbGljX3NwaW5sb2NrIGxvY2s7CiB9OwogCi0jaWZkZWYgU1RBVFVTX1NVQ0NFU1MKLSN1bmRlZiBTVEFUVVNfU1VDQ0VTUwotI2VuZGlmCi0KLSNkZWZpbmUgU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1RBVFVTX1BFTkRJTkcgICAgICAgICAgICAgIDAKLSNkZWZpbmUgU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgLTEKLSNkZWZpbmUgU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgLTIKLSNkZWZpbmUgU1RBVFVTX05PVF9TVVBQT1JURUQgICAgICAgLTMKLSNkZWZpbmUgU1RBVFVTX0JVRkZFUl9UT09fU0hPUlQgICAgLTQKLQogI2RlZmluZSBTTElDX01BWF9DQVJEUyAgICAgICAgICAgICAgMzIKICNkZWZpbmUgU0xJQ19NQVhfUE9SVFMgICAgICAgICAgICAgIDQgICAgICAgIC8qIE1heCAjIG9mIHBvcnRzIHBlciBjYXJkICAgKi8KIApAQCAtNTEwLDcgKzQ5OSw2IEBACiAgICAgc3RydWN0IHNsaWNfaWZldmVudHMgIGlmX2V2ZW50czsKICAgICBzdHJ1Y3Qgc2xpY19zdGF0cyAgICAgICAgaW5pY3N0YXRzX3ByZXY7CiAgICAgc3RydWN0IHNsaWNuZXRfc3RhdHMgICAgIHNsaWNfc3RhdHM7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwppbmRleCBiZWJmMGZkLi5mOGM0YjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCkBAIC05Nyw2NiArOTcsNiBAQAogI2luY2x1ZGUgInNsaWNody5oIgogI2luY2x1ZGUgInNsaWMuaCIKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNsaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgbmV0ZGV2X3R4X3Qgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpOwotc3RhdGljIGludCBzbGljX3JzcHF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfY21kcV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY21kcV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY21kcV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NtZHFfYWRkY21kcGFnZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICpwYWdlKTsKLXN0YXRpYyB2b2lkIHNsaWNfY21kcV9nZXRkb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY21kcV9wdXRkb25lX2lycShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIHN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCk7Ci1zdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2ZpbGwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHUzMiBzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyB2b2lkIHNsaWNfcmN2cXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19pbnRhZ2dfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsdWUpOwotc3RhdGljIGludCBzbGljX2NhcmRfZG93bmxvYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHUzMiBzbGljX2NhcmRfbG9jYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBsaW5rc3BlZWQsCi0JCQkgICAgIHUzMiBsaW5rZHVwbGV4KTsKLXN0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOwotc3RhdGljIHZvaWQgc2xpY19zb2Z0X3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBib29sIHNsaWNfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpldGhlcl9mcmFtZSk7Ci1zdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX21hY19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua2NoYW5nZSk7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCi0JCQkgICAgdTMyIGNvbmZpZ2gpOwotc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNvbnRleHQpOwotc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKTsKLXN0YXRpYyB1c2hvcnQgc2xpY19lZXByb21fY2tzdW0oY2hhciAqbSwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBzbGljX3Vwcl9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX2xpbmtfdXByX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgSXNyKTsKLXN0YXRpYyBpbnQgIHNsaWNfdXByX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB1cHJfcmVxdWVzdCwKLQkJCSAgICAgdTMyIHVwcl9kYXRhLCB1MzIgdXByX2RhdGFfaCwgdTMyIHVwcl9idWZmZXIsCi0JCQkgICAgIHUzMiB1cHJfYnVmZmVyX2gpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCiBzdGF0aWMgdWludCBzbGljX2ZpcnN0X2luaXQgPSAxOwogc3RhdGljIGNoYXIgKnNsaWNfYmFubmVyID0gIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgIlwKIAkJImFuZCBTdG9yYWdlIEFjY2VsZXJhdG9yIChOb24tQWNjZWxlcmF0ZWQpIjsKQEAgLTIwNiw2ICsxNDYsMTcgQEAKICN1bmRlZiBBU1NFUlQKICNlbmRpZgogCitzdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpCit7CisJdTMyIGNwdWlkOworCXUzMiBjdXJyX3BpZDsKKwljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljdXJyX3BpZCA9IGN1cnJlbnQtPnBpZDsKKworCXByaW50ayhLRVJOX0VSUiAiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwKKwkgICAgICAgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7Cit9CisKICNpZm5kZWYgQVNTRVJUCiAjZGVmaW5lIEFTU0VSVChhKSBkbyB7CQkJCQkJCVwKIAlpZiAoIShhKSkgewkJCQkJCQlcCkBAIC0yNDEsMTMgKzE5Miw2IEBACiAJCQlfYWRhcHRlci0+aGFuZGxlX2xvY2suZmxhZ3MpOyAgICAgICAgICAgICAgICAgICBcCiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfaW5pdCh2b2lkKTsKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2xlYW51cCh2b2lkKTsKLXN0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOwotc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLQogc3RhdGljIGlubGluZSB2b2lkIHNsaWNfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKIHsKIAl3cml0ZWwodmFsdWUsIHJlZyk7CkBAIC0yNzIsMTAxNiArMjE2LDYgQEAKIAkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpCi17Ci0JaWYgKHNsaWNfZmlyc3RfaW5pdCkgewotCQlzbGljX2ZpcnN0X2luaXQgPSAwOwotCQlzcGluX2xvY2tfaW5pdCgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jayk7Ci0JCXNsaWNfZGVidWdfaW5pdCgpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2xpY19pbml0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSwKLQkJCSAgICAgIHZvaWQgX19pb21lbSAqbWVtYWRkciwgaW50IGNoaXBfaWR4KQotewotCXVzaG9ydCBpbmRleDsKLQlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLS8qCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsqLwotCWFkYXB0ZXItPnZlbmRpZCA9IHBjaV90YmxfZW50cnktPnZlbmRvcjsKLQlhZGFwdGVyLT5kZXZpZCA9IHBjaV90YmxfZW50cnktPmRldmljZTsKLQlhZGFwdGVyLT5zdWJzeXNpZCA9IHBjaV90YmxfZW50cnktPnN1YmRldmljZTsKLQlhZGFwdGVyLT5idXNudW1iZXIgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOwotCWFkYXB0ZXItPnNsb3RudW1iZXIgPSAoKHBjaWRldi0+ZGV2Zm4gPj4gMykgJiAweDFGKTsKLQlhZGFwdGVyLT5mdW5jdGlvbm51bWJlciA9IChwY2lkZXYtPmRldmZuICYgMHg3KTsKLQlhZGFwdGVyLT5tZW1vcnlsZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7Ci0JYWRhcHRlci0+c2xpY19yZWdzID0gKF9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqKW1lbWFkZHI7Ci0JYWRhcHRlci0+aXJxID0gcGNpZGV2LT5pcnE7Ci0vKglhZGFwdGVyLT5uZXRkZXYgPSBuZXRkZXY7Ki8KLQlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOwotCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OwotCWFkYXB0ZXItPmNoaXBpZCA9IGNoaXBfaWR4OwotCWFkYXB0ZXItPnBvcnQgPSAwOwkvKmFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyOyovCi0JYWRhcHRlci0+Y2FyZGluZGV4ID0gYWRhcHRlci0+cG9ydDsKLQlhZGFwdGVyLT5tZW1vcnliYXNlID0gbWVtYWRkcjsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dXByX2xvY2subG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXNldF9sb2NrLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5oYW5kbGVfbG9jay5sb2NrKTsKLQotCWFkYXB0ZXItPmNhcmRfc2l6ZSA9IDE7Ci0JLyoKLQkgIEluaXRpYWxpemUgc2xpY19oYW5kbGUgYXJyYXkKLQkqLwotCUFTU0VSVChTTElDX0NNRFFfTUFYQ01EUyA8PSAweEZGRkYpOwotCS8qCi0JIFN0YXJ0IHdpdGggMS4gIDAgaXMgYW4gaW52YWxpZCBob3N0IGhhbmRsZS4KLQkqLwotCWZvciAoaW5kZXggPSAxLCBwc2xpY19oYW5kbGUgPSAmYWRhcHRlci0+c2xpY19oYW5kbGVzWzFdOwotCSAgICAgaW5kZXggPCBTTElDX0NNRFFfTUFYQ01EUzsgaW5kZXgrKywgcHNsaWNfaGFuZGxlKyspIHsKLQotCQlwc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV9pbmRleCA9IGluZGV4OwotCQlwc2xpY19oYW5kbGUtPnR5cGUgPSBTTElDX0hBTkRMRV9GUkVFOwotCQlwc2xpY19oYW5kbGUtPm5leHQgPSBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7Ci0JCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZTsKLQl9Ci0JYWRhcHRlci0+cHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopCi0JCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSwKLQkJCQkJJmFkYXB0ZXItPgotCQkJCQlwaHlzX3NobWVtKTsKLQlBU1NFUlQoYWRhcHRlci0+cHNobWVtKTsKLQotCW1lbXNldChhZGFwdGVyLT5wc2htZW0sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSkpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNsaWNfbmV0ZGV2X29wcyA9IHsKLQkubmRvX29wZW4JCT0gc2xpY19lbnRyeV9vcGVuLAotCS5uZG9fc3RvcAkJPSBzbGljX2VudHJ5X2hhbHQsCi0JLm5kb19zdGFydF94bWl0CQk9IHNsaWNfeG1pdF9zdGFydCwKLQkubmRvX2RvX2lvY3RsCQk9IHNsaWNfaW9jdGwsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBzbGljX21hY19zZXRfYWRkcmVzcywKLQkubmRvX2dldF9zdGF0cwkJPSBzbGljX2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNsaWNfbWNhc3Rfc2V0X2xpc3QsCi0JLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotfTsKLQotc3RhdGljIGludCBfX2RldmluaXQgc2xpY19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5KQotewotCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7Ci0Jc3RhdGljIGludCBkaWRfdmVyc2lvbjsKLQlpbnQgZXJyID0gLUVOT0RFVjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7Ci0JdTMyIHN0YXR1cyA9IDA7Ci0JdWxvbmcgbW1pb19zdGFydCA9IDA7Ci0JdWxvbmcgbW1pb19sZW4gPSAwOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IE5VTEw7Ci0JaW50IHBjaV91c2luZ19kYWMgPSAwOwotCi0Jc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cgPSBkeW5hbWljX2ludGFnZzsKLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7Ci0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHNsaWNfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHNsaWNfYmFubmVyKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX3Byb2NfdmVyc2lvbik7Ci0JfQotCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKLQkJcGNpX3VzaW5nX2RhYyA9IDE7Ci0JCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgewotCQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJ1bmFibGUgdG8gb2J0YWluIDY0LWJpdCBETUEgZm9yICIKLQkJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOwotCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwotCQl9Ci0JfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcGNpX3VzaW5nX2RhYyA9IDA7Ci0JCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOwotCX0gZWxzZSB7Ci0JCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKLQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwotCX0KLQotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbid0IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7Ci0KLQluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGFkYXB0ZXIpKTsKLQlpZiAoIW5ldGRldikgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9vdXRfZXhpdF9zbGljX3Byb2JlOwotCX0KLQotCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7Ci0JYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwotCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKLQlpZiAocGNpX3VzaW5nX2RhYykKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7Ci0KLQltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7Ci0KLQotLyoJbWVtbWFwcGVkX2lvYWRkciA9ICAodTMyKWlvcmVtYXBfbm9jYWNoZShtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ki8KLQltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0JaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7Ci0JCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKLQkJCW1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwotCX0KLQotCXNsaWNfY29uZmlnX3BjaShwY2lkZXYpOwotCi0Jc2xpY19pbml0X2RyaXZlcigpOwotCi0Jc2xpY19pbml0X2FkYXB0ZXIobmV0ZGV2LAotCQkJICBwY2lkZXYsIHBjaV90YmxfZW50cnksIG1lbW1hcHBlZF9pb2FkZHIsIGNhcmRzX2ZvdW5kKTsKLQotCXN0YXR1cyA9IHNsaWNfY2FyZF9sb2NhdGUoYWRhcHRlcik7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbm5vdCBsb2NhdGUgY2FyZFxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOwotCX0KLQotCWNhcmQgPSBhZGFwdGVyLT5jYXJkOwotCi0JaWYgKCFhZGFwdGVyLT5hbGxvY2F0ZWQpIHsKLQkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKys7Ci0JCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDE7Ci0JfQotCi0Jc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7Ci0KLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCWNhcmQtPnN0YXRlID0gQ0FSRF9GQUlMOwotCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7Ci0JCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJGQUlMRUQgc3RhdHVzWyV4XVxuIiwgc3RhdHVzKTsKLQl9IGVsc2UgewotCQlzbGljX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKLQl9Ci0KLQluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXItPm1lbW9yeWJhc2U7Ci0JbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5pcnE7Ci0JbmV0ZGV2LT5uZXRkZXZfb3BzID0gJnNsaWNfbmV0ZGV2X29wczsKLQotCXNsaWNfZGVidWdfYWRhcHRlcl9jcmVhdGUoYWRhcHRlcik7Ci0KLQlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKLQllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF91bm1hcDsKLQl9Ci0KLQljYXJkc19mb3VuZCsrOwotCi0JcmV0dXJuIHN0YXR1czsKLQotZXJyX291dF91bm1hcDoKLQlpb3VubWFwKG1lbW1hcHBlZF9pb2FkZHIpOwotZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci1lcnJfb3V0X2ZyZWVfbmV0ZGV2OgotCWZyZWVfbmV0ZGV2KG5ldGRldik7Ci1lcnJfb3V0X2V4aXRfc2xpY19wcm9iZToKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7Ci1lcnJfb3V0X2Rpc2FibGVfcGNpOgotCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0JdTMyIGxvY2tlZCA9IDA7Ci0JaW50IHN0YXR1czsKLQotCUFTU0VSVChhZGFwdGVyKTsKLQlBU1NFUlQoY2FyZCk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKLQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0JbG9ja2VkID0gMTsKLQlpZiAoIWFkYXB0ZXItPmFjdGl2YXRlZCkgewotCQljYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQrKzsKLQkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlKys7Ci0JCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDE7Ci0JfQotCXN0YXR1cyA9IHNsaWNfaWZfaW5pdChhZGFwdGVyKTsKLQotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJaWYgKGFkYXB0ZXItPmFjdGl2YXRlZCkgewotCQkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLS07Ci0JCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKLQkJCWFkYXB0ZXItPmFjdGl2YXRlZCA9IDA7Ci0JCX0KLQkJaWYgKGxvY2tlZCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKLQkJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKLQkJCWxvY2tlZCA9IDA7Ci0JCX0KLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0JaWYgKCFjYXJkLT5tYXN0ZXIpCi0JCWNhcmQtPm1hc3RlciA9IGFkYXB0ZXI7Ci0KLQlpZiAobG9ja2VkKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbGljX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKLQl1MzIgbW1pb19zdGFydCA9IDA7Ci0JdWludCBtbWlvX2xlbiA9IDA7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7Ci0KLQlBU1NFUlQoYWRhcHRlcik7Ci0Jc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7Ci0Jc2xpY191bm1hcF9tbWlvX3NwYWNlKGFkYXB0ZXIpOwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0KLQltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7Ci0KLQlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOwotCi0JaW91bm1hcCgodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIpOwotCS8qIGZyZWUgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKLQl3aGlsZSAobWxpc3QpIHsKLQkJbWNhZGRyID0gbWxpc3Q7Ci0JCW1saXN0ID0gbWxpc3QtPm5leHQ7Ci0JCWtmcmVlKG1jYWRkcik7Ci0JfQotCUFTU0VSVChhZGFwdGVyLT5jYXJkKTsKLQljYXJkID0gYWRhcHRlci0+Y2FyZDsKLQlBU1NFUlQoY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKLQljYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQtLTsKLQlhZGFwdGVyLT5hbGxvY2F0ZWQgPSAwOwotCWlmICghY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKSB7Ci0JCXN0cnVjdCBzbGljY2FyZCAqY3Vycl9jYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwotCQlpZiAoY3Vycl9jYXJkID09IGNhcmQpIHsKLQkJCXNsaWNfZ2xvYmFsLnNsaWNfY2FyZCA9IGNhcmQtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQl3aGlsZSAoY3Vycl9jYXJkLT5uZXh0ICE9IGNhcmQpCi0JCQkJY3Vycl9jYXJkID0gY3Vycl9jYXJkLT5uZXh0OwotCQkJQVNTRVJUKGN1cnJfY2FyZCk7Ci0JCQljdXJyX2NhcmQtPm5leHQgPSBjYXJkLT5uZXh0OwotCQl9Ci0JCUFTU0VSVChzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcyk7Ci0JCXNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzLS07Ci0JCXNsaWNfY2FyZF9jbGVhbnVwKGNhcmQpOwotCX0KLQlrZnJlZShkZXYpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKLX0KLQotc3RhdGljIGludCBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAotCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKLQlBU1NFUlQoY2FyZCk7Ci0JbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRE9XTjsKLQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JYWRhcHRlci0+dXByX2xpc3QgPSBOVUxMOwotCWFkYXB0ZXItPnVwcl9idXN5ID0gMDsKLQlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gMDsKLQlBU1NFUlQoY2FyZC0+YWRhcHRlclthZGFwdGVyLT5jYXJkaW5kZXhdID09IGFkYXB0ZXIpOwotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7Ci0JYWRhcHRlci0+YWxsX3JlZ193cml0ZXMrKzsKLQlhZGFwdGVyLT5pY3JfcmVnX3dyaXRlcysrOwotCXNsaWNfY29uZmlnX2NsZWFyKGFkYXB0ZXIpOwotCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKLQkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLS07Ci0JCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOwotCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOwotCX0KLSNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmVzZXRfaWZhY2UsIDAsIEZMVVNIKTsKLSNlbmRpZgotCS8qCi0JICogIFJlc2V0IHRoZSBhZGFwdGVyJ3MgY21kIHF1ZXVlcwotCSAqLwotCXNsaWNfY21kcV9yZXNldChhZGFwdGVyKTsKLQotI2lmZGVmIEFVVE9NQVRJQ19SRVNFVAotCWlmICghY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkKQotCQlzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKLSNlbmRpZgotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKLQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgaW50IHNsaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGVkYXRhOwotCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwotCXUzMiBkYXRhWzddOwotCXUzMiBpbnRhZ2c7Ci0KLQlBU1NFUlQocnEpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DU0xJQ1NFVElOVEFHRzoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWludGFnZyA9IGRhdGFbMF07Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCi0JCQlfX2Z1bmNfXywgaW50YWdnKTsKLQkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZyk7Ci0JCXJldHVybiAwOwotCi0jaWZkZWYgU0xJQ19UUkFDRV9EVU1QX0VOQUJMRUQKLQljYXNlIFNJT0NTTElDVFJBQ0VEVU1QOgotCQl7Ci0JCQl1MzIgdmFsdWU7Ci0JCQlEQkdfSU9DVEwoInNsaWNfaW9jdGwgIFNJT0NTTElDX1RSQUNFX0RVTVBcbiIpOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgcnEtPmlmcl9kYXRhLCAyOCkpIHsKLQkJCQlQUklOVF9FUlJPUgotCQkJCSAgICAoInNsaWM6IGNvcHlfZnJvbV91c2VyIEZBSUxFRCBnZXR0aW5nIGluaXRpYWwgc2ltYmEgcGFyYW1cbiIpOwotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCi0JCQl2YWx1ZSA9IGRhdGFbMF07Ci0JCQlpZiAodHJhY2Vtb25fcmVxdWVzdCA9PSBTTElDX0RVTVBfRE9ORSkgewotCQkJCVBSSU5UX0VSUk9SCi0JCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWRcbiIpOwotCQkJCXRyYWNlbW9uX3JlcXVlc3QgPSBTTElDX0RVTVBfUkVRVUVTVEVEOwotCQkJCXRyYWNlbW9uX3JlcXVlc3RfdHlwZSA9IHZhbHVlOwotCQkJCXRyYWNlbW9uX3RpbWVzdGFtcCA9IGppZmZpZXM7Ci0JCQl9IGVsc2UgaWYgKCh0cmFjZW1vbl9yZXF1ZXN0ID09IFNMSUNfRFVNUF9SRVFVRVNURUQpIHx8Ci0JCQkJICAgKHRyYWNlbW9uX3JlcXVlc3QgPT0KLQkJCQkgICAgU0xJQ19EVU1QX0lOX1BST0dSRVNTKSkgewotCQkJCVBSSU5UX0VSUk9SCi0JCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWQgYnV0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKLQkJCX0gZWxzZSB7Ci0JCQkJUFJJTlRfRVJST1IKLQkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7Ci0JCQkJdHJhY2Vtb25fcmVxdWVzdCA9IFNMSUNfRFVNUF9SRVFVRVNURUQ7Ci0JCQkJdHJhY2Vtb25fcmVxdWVzdF90eXBlID0gdmFsdWU7Ci0JCQkJdHJhY2Vtb25fdGltZXN0YW1wID0gamlmZmllczsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKLQljYXNlIFNJT0NFVEhUT09MOgotCQlBU1NFUlQoYWRhcHRlcik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmZWNtZCwgcnEtPmlmcl9kYXRhLCBzaXplb2YoZWNtZCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJaWYgKGVjbWQuY21kID09IEVUSFRPT0xfR1NFVCkgewotCQkJZWRhdGEuc3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAotCQkJCQkgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAotCQkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX01JSSk7Ci0JCQllZGF0YS5wb3J0ID0gUE9SVF9NSUk7Ci0JCQllZGF0YS50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7Ci0JCQllZGF0YS5waHlfYWRkcmVzcyA9IDA7Ci0JCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCi0JCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQotCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTA7Ci0JCQllbHNlCi0JCQkJZWRhdGEuc3BlZWQgPSAwOwotCi0JCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQotCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOwotCQkJZWxzZQotCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCQllZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQllZGF0YS5tYXh0eHBrdCA9IDE7Ci0JCQllZGF0YS5tYXhyeHBrdCA9IDE7Ci0JCQlpZiAoY29weV90b191c2VyKHJxLT5pZnJfZGF0YSwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQl9IGVsc2UgaWYgKGVjbWQuY21kID09IEVUSFRPT0xfU1NFVCkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07Ci0KLQkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKLQkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCi0JCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKLQkJCWVsc2UKLQkJCQllZGF0YS5zcGVlZCA9IDA7Ci0KLQkJCWlmIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IExJTktfRlVMTEQpCi0JCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQllbHNlCi0JCQkJZWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0KLQkJCWVkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJCWVkYXRhLm1heHR4cGt0ID0gMTsKLQkJCWVkYXRhLm1heHJ4cGt0ID0gMTsKLQkJCWlmICgoZWNtZC5zcGVlZCAhPSBlZGF0YS5zcGVlZCkgfHwKLQkJCSAgICAoZWNtZC5kdXBsZXggIT0gZWRhdGEuZHVwbGV4KSkgewotCQkJCXUzMiBzcGVlZDsKLQkJCQl1MzIgZHVwbGV4OwotCi0JCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTApCi0JCQkJCXNwZWVkID0gMDsKLQkJCQllbHNlCi0JCQkJCXNwZWVkID0gUENSX1NQRUVEXzEwMDsKLQkJCQlpZiAoZWNtZC5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQkJCWR1cGxleCA9IFBDUl9EVVBMRVhfRlVMTDsKLQkJCQllbHNlCi0JCQkJCWR1cGxleCA9IDA7Ci0JCQkJc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLCBzcGVlZCwgZHVwbGV4KTsKLQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotfQotCi0jZGVmaW5lICBYTUlUX0ZBSUxfTElOS19TVEFURSAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgIFhNSVRfRkFJTF9aRVJPX0xFTkdUSCAgICAgICAgICAgICAgMgotI2RlZmluZSAgWE1JVF9GQUlMX0hPU1RDTURfRkFJTCAgICAgICAgICAgICAzCi0KLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9idWlsZF9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJICAgICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzbGljX2hvc3Q2NF9jbWQgKmloY21kOwotCXVsb25nIHBoeXNfYWRkcjsKLQotCWloY21kID0gJmhjbWQtPmNtZDY0OwotCi0JaWhjbWQtPmZsYWdzID0gKGFkYXB0ZXItPnBvcnQgPDwgSUhGTEdfSUZTSEZUKTsKLQlpaGNtZC0+Y29tbWFuZCA9IElIQ01EX1hNVF9SRVE7Ci0JaWhjbWQtPnUuc2xpY19idWZmZXJzLnRvdGxlbiA9IHNrYi0+bGVuOwotCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCWloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzBdLnBhZGRybCA9IFNMSUNfR0VUX0FERFJfTE9XKHBoeXNfYWRkcik7Ci0JaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ucGFkZHJoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBoeXNfYWRkcik7Ci0JaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ubGVuZ3RoID0gc2tiLT5sZW47Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCWhjbWQtPmNtZHNpemUgPSAodTMyKSAoKCgodTY0KSZpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1sxXSAtCi0JCQkJICAgICAodTY0KSBoY21kKSArIDMxKSA+PiA1KTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKLQloY21kLT5jbWRzaXplID0gKCgoKHUzMikgJmloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzFdIC0KLQkJCSAgICh1MzIpIGhjbWQpICsgMzEpID4+IDUpOwotI2Vsc2UKLQlTdG9wIENvbXBpbGF0aW9uOwotI2VuZGlmCi19Ci0KLSNkZWZpbmUgTk9STUFMX0VUSEZSQU1FICAgICAwCi0KLXN0YXRpYyBuZXRkZXZfdHhfdCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQgPSBOVUxMOwotCXUzMiBzdGF0dXMgPSAwOwotCXUzMiBza2J0eXBlID0gTk9STUFMX0VUSEZSQU1FOwotCXZvaWQgKm9mZmxvYWRjbWQgPSBOVUxMOwotCi0JY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0JQVNTRVJUKGNhcmQpOwotCWlmICgoYWRhcHRlci0+bGlua3N0YXRlICE9IExJTktfVVApIHx8Ci0JICAgIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgfHwgKGNhcmQtPnN0YXRlICE9IENBUkRfVVApKSB7Ci0JCXN0YXR1cyA9IFhNSVRfRkFJTF9MSU5LX1NUQVRFOwotCQlnb3RvIHhtaXRfZmFpbDsKLQotCX0gZWxzZSBpZiAoc2tiLT5sZW4gPT0gMCkgewotCQlzdGF0dXMgPSBYTUlUX0ZBSUxfWkVST19MRU5HVEg7Ci0JCWdvdG8geG1pdF9mYWlsOwotCX0KLQotCWlmIChza2J0eXBlID09IE5PUk1BTF9FVEhGUkFNRSkgewotCQloY21kID0gc2xpY19jbWRxX2dldGZyZWUoYWRhcHRlcik7Ci0JCWlmICghaGNtZCkgewotCQkJYWRhcHRlci0+eG1pdHFfZnVsbCA9IDE7Ci0JCQlzdGF0dXMgPSBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMOwotCQkJZ290byB4bWl0X2ZhaWw7Ci0JCX0KLQkJQVNTRVJUKGhjbWQtPnBzbGljX2hhbmRsZSk7Ci0JCUFTU0VSVChoY21kLT5jbWQ2NC5ob3N0aGFuZGxlID09Ci0JCSAgICAgICBoY21kLT5wc2xpY19oYW5kbGUtPnRva2VuLmhhbmRsZV90b2tlbik7Ci0JCWhjbWQtPnNrYiA9IHNrYjsKLQkJaGNtZC0+YnVzeSA9IDE7Ci0JCWhjbWQtPnR5cGUgPSBTTElDX0NNRF9EVU1COwotCQlpZiAoc2tidHlwZSA9PSBOT1JNQUxfRVRIRlJBTUUpCi0JCQlzbGljX3htaXRfYnVpbGRfcmVxdWVzdChhZGFwdGVyLCBoY21kLCBza2IpOwotCX0KLQlhZGFwdGVyLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYWRhcHRlci0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLSNpZmRlZiBERUJVR19EVU1QCi0JaWYgKGFkYXB0ZXItPmtpbGxfY2FyZCkgewotCQlzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kIGloY21kOwotCi0JCWloY21kID0gJmhjbWQtPmNtZDY0OwotCi0JCWloY21kLT5mbGFncyB8PSAweDQwOwotCQlhZGFwdGVyLT5raWxsX2NhcmQgPSAwOwkvKiBvbmx5IGRvIHRoaXMgb25jZSAqLwotCX0KLSNlbmRpZgotCWlmIChoY21kLT5wYWRkcmggPT0gMCkgewotCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhciwKLQkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLCBET05UX0ZMVVNIKTsKLQl9IGVsc2UgewotCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhcjY0LAotCQkJCSAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksCi0JCQkJICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkgaGNtZC0+cGFkZHJoLCBET05UX0ZMVVNIKTsKLQl9Ci14bWl0X2RvbmU6Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLXhtaXRfZmFpbDoKLQlzbGljX3htaXRfZmFpbChhZGFwdGVyLCBza2IsIG9mZmxvYWRjbWQsIHNrYnR5cGUsIHN0YXR1cyk7Ci0JZ290byB4bWl0X2RvbmU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgIHZvaWQgKmNtZCwgdTMyIHNrYnR5cGUsIHUzMiBzdGF0dXMpCi17Ci0JaWYgKGFkYXB0ZXItPnhtaXRxX2Z1bGwpCi0JCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLQlpZiAoKGNtZCA9PSBOVUxMKSAmJiAoc3RhdHVzIDw9IFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwpKSB7Ci0JCXN3aXRjaCAoc3RhdHVzKSB7Ci0JCWNhc2UgWE1JVF9GQUlMX0xJTktfU1RBVEU6Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCQkicmVqZWN0IHhtaXQgc2tiWyVwOiAleF0gbGlua3N0YXRlWyVzXSAiCi0JCQkJImFkYXB0ZXJbJXM6JWRdIGNhcmRbJXM6JWRdXG4iLAotCQkJCXNrYiwgc2tiLT5wa3RfdHlwZSwKLQkJCQlTTElDX0xJTktTVEFURShhZGFwdGVyLT5saW5rc3RhdGUpLAotCQkJCVNMSUNfQURBUFRFUl9TVEFURShhZGFwdGVyLT5zdGF0ZSksCi0JCQkJYWRhcHRlci0+c3RhdGUsCi0JCQkJU0xJQ19DQVJEX1NUQVRFKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSwKLQkJCQlhZGFwdGVyLT5jYXJkLT5zdGF0ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBYTUlUX0ZBSUxfWkVST19MRU5HVEg6Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCQkieG1pdF9zdGFydCBza2ItPmxlbiA9PSAwIHNrYlslcF0gdHlwZVsleF1cbiIsCi0JCQkJc2tiLCBza2ItPnBrdF90eXBlKTsKLQkJCWJyZWFrOwotCQljYXNlIFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw6Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCQkieG1pdF9zdGFydCBza2JbJXBdIHR5cGVbJXhdIE5vIGhvc3QgY29tbWFuZHMgIgotCQkJCSJhdmFpbGFibGVcbiIsIHNrYiwgc2tiLT5wa3RfdHlwZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUFTU0VSVCgwKTsKLQkJfQotCX0KLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYWRhcHRlci0+c3RhdHMudHhfZHJvcHBlZCsrOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVfZXJyb3Ioc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmKQotewotCXN0cnVjdCBzbGljX2hkZHJfd2RzICpoZHIgPSAoc3RydWN0IHNsaWNfaGRkcl93ZHMgKilyY3ZidWYtPmRhdGE7Ci0KLQlpZiAoYWRhcHRlci0+ZGV2aWQgIT0gU0xJQ18xR0JfREVWSUNFX0lEKSB7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1czE0ICYgVlJIU1RBVF84MDJPRSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXMxNCAmIFZSSFNUQVRfVFBPRkxPKQotCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfODAyVUUpCi0JCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1JDVkUpIHsKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5yY3ZlYXJseSsrOwotCQkJYWRhcHRlci0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJfQotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQlVGRikgewotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkJ1Zm92Kys7Ci0JCQlhZGFwdGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQl9Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DQVJSRSkgewotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNhcnJlKys7Ci0JCQlhZGFwdGVyLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9MT05HRSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Mb25nZSsrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfUFJFQSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JbnZwKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DUkMpIHsKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMrKzsKLQkJCWFkYXB0ZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJfQotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfRFJCTCkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DT0RFKQotCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNvZGUrKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQQ1NVTSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1RQSExFTikKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcEhsZW4rKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQQ1NVTSkKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0lQTEVSUikKLQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOwotCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBIRVJSKQotCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwSGxlbisrOwotCX0gZWxzZSB7Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9YUEVSUikgewotCQkJdTMyIHhlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCID4+IFZHQlNUQVRfWEVSUlNIRlQ7Ci0KLQkJCWlmICh4ZXJyID09IFZHQlNUQVRfWENTRVJSKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcENzdW0rKzsKLQkJCWlmICh4ZXJyID09IFZHQlNUQVRfWFVGTE9XKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5UcHJ0b2Zsb3crKzsKLQkJCWlmICh4ZXJyID09IFZHQlNUQVRfWEhMRU4pCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOwotCQl9Ci0JCWlmIChoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9ORVRFUlIpIHsKLQkJCXUzMiBuZXJyID0KLQkJCSAgICAoaGRyLT4KLQkJCSAgICAgZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9ORVJSU0hGVCkgJgotCQkJICAgIFZHQlNUQVRfTkVSUk1TSzsKLQkJCWlmIChuZXJyID09IFZHQlNUQVRfTkNTRVJSKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcENzdW0rKzsKLQkJCWlmIChuZXJyID09IFZHQlNUQVRfTlVGTE9XKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcExlbisrOwotCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OSExFTikKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7Ci0JCX0KLQkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xOS0VSUikgewotCQkJdTMyIGxlcnIgPSBoZHItPmZyYW1lX3N0YXR1c0dCICYgVkdCU1RBVF9MRVJSTVNLOwotCi0JCQlpZiAobGVyciA9PSBWR0JTVEFUX0xERUFSTFkpCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLnJjdmVhcmx5Kys7Ci0JCQlpZiAobGVyciA9PSBWR0JTVEFUX0xCT0ZMTykKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKLQkJCWlmIChsZXJyID09IFZHQlNUQVRfTENPREVSUikKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOwotCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MREJMTkJMKQotCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5EcmJsKys7Ci0JCQlpZiAobGVyciA9PSBWR0JTVEFUX0xDUkNFUlIpCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLkNyYysrOwotCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MT0ZMTykKLQkJCQlhZGFwdGVyLT5pZl9ldmVudHMub2Zsb3c4MDIrKzsKLQkJCWlmIChsZXJyID09IFZHQlNUQVRfTFVGTE8pCi0JCQkJYWRhcHRlci0+aWZfZXZlbnRzLnVmbG93ODAyKys7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi0jZGVmaW5lIFRDUF9PRkZMT0FEX0ZSQU1FX1BVU0hGTEFHICAweDEwMDAwMDAwCi0jZGVmaW5lIE1fRkFTVF9QQVRIICAgICAgICAgICAgICAgICAweDAwNDAKLQotc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOwotCXUzMiBmcmFtZXMgPSAwOwotCi0Jd2hpbGUgKChza2IgPSBzbGljX3JjdnF1ZXVlX2dldG5leHQoYWRhcHRlcikpKSB7Ci0JCXUzMiByeF9ieXRlczsKLQotCQlBU1NFUlQoc2tiLT5oZWFkKTsKLQkJcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKLQkJYWRhcHRlci0+Y2FyZC0+ZXZlbnRzKys7Ci0JCWlmIChyY3ZidWYtPnN0YXR1cyAmIElSSEREUl9FUlIpIHsKLQkJCWFkYXB0ZXItPnJ4X2Vycm9ycysrOwotCQkJc2xpY19yY3ZfaGFuZGxlX2Vycm9yKGFkYXB0ZXIsIHJjdmJ1Zik7Ci0JCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghc2xpY19tYWNfZmlsdGVyKGFkYXB0ZXIsIChzdHJ1Y3QgZXRoZXJfaGVhZGVyICopCi0JCQkJCXJjdmJ1Zi0+ZGF0YSkpIHsKLQkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNrYl9wdWxsKHNrYiwgU0xJQ19SQ1ZCVUZfSEVBRFNJWkUpOwotCQlyeF9ieXRlcyA9IChyY3ZidWYtPmxlbmd0aCAmIElSSEREUl9GTEVOX01TSyk7Ci0JCXNrYl9wdXQoc2tiLCByeF9ieXRlcyk7Ci0JCWFkYXB0ZXItPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7Ci0jaWYgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCi0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0jZW5kaWYKLQotCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwotCQluZXRpZl9yeChza2IpOwotCi0JCSsrZnJhbWVzOwotI2lmIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQKLQkJaWYgKGZyYW1lcyA+PSBTTElDX1JDVlFfTUFYX1BST0NFU1NfSVNSKSB7Ci0JCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0X3lpZWxkcysrOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCX0KLQlhZGFwdGVyLT5tYXhfaXNyX3JjdnMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl9yY3ZzLCBmcmFtZXMpOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX3htaXRfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKLQlzdHJ1Y3Qgc2xpY19yc3BidWYgKnJzcGJ1ZjsKLQl1MzIgZnJhbWVzID0gMDsKLQlzdHJ1Y3Qgc2xpY19oYW5kbGVfd29yZCBzbGljX2hhbmRsZV93b3JkOwotCi0JZG8gewotCQlyc3BidWYgPSBzbGljX3JzcHF1ZXVlX2dldG5leHQoYWRhcHRlcik7Ci0JCWlmICghcnNwYnVmKQotCQkJYnJlYWs7Ci0JCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzKys7Ci0JCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOwotCQkvKgotCQkgR2V0IHRoZSBjb21wbGV0ZSBob3N0IGNvbW1hbmQgYnVmZmVyCi0JCSovCi0JCXNsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX3Rva2VuID0gcnNwYnVmLT5ob3N0aGFuZGxlOwotCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXgpOwotCQlBU1NFUlQoc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXggPD0gU0xJQ19DTURRX01BWENNRFMpOwotCQloY21kID0KLQkJICAgIChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopCi0JCQlhZGFwdGVyLT5zbGljX2hhbmRsZXNbc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXhdLgotCQkJCQkJCQkJYWRkcmVzczsKLS8qICAgICAgaGNtZCA9IChzdHJ1Y3Qgc2xpY19ob3N0Y21kICopIHJzcGJ1Zi0+aG9zdGhhbmRsZTsgKi8KLQkJQVNTRVJUKGhjbWQpOwotCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlID09Ci0JCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XSk7Ci0JCWlmIChoY21kLT50eXBlID09IFNMSUNfQ01EX0RVTUIpIHsKLQkJCWlmIChoY21kLT5za2IpCi0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoaGNtZC0+c2tiKTsKLQkJCXNsaWNfY21kcV9wdXRkb25lX2lycShhZGFwdGVyLCBoY21kKTsKLQkJfQotCQlyc3BidWYtPnN0YXR1cyA9IDA7Ci0JCXJzcGJ1Zi0+aG9zdGhhbmRsZSA9IDA7Ci0JCWZyYW1lcysrOwotCX0gd2hpbGUgKDEpOwotCWFkYXB0ZXItPm1heF9pc3JfeG1pdHMgPSBtYXgoYWRhcHRlci0+bWF4X2lzcl94bWl0cywgZnJhbWVzKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHNsaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgaXNyOwotCi0JaWYgKChhZGFwdGVyLT5wc2htZW0pICYmIChhZGFwdGVyLT5wc2htZW0tPmlzcikpIHsKLQkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ljciwKLQkJCQkgSUNSX0lOVF9NQVNLLCBGTFVTSCk7Ci0JCWlzciA9IGFkYXB0ZXItPmlzcmNvcHkgPSBhZGFwdGVyLT5wc2htZW0tPmlzcjsKLQkJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOwotCQlhZGFwdGVyLT5udW1faXNycysrOwotCQlzd2l0Y2ggKGFkYXB0ZXItPmNhcmQtPnN0YXRlKSB7Ci0JCWNhc2UgQ0FSRF9VUDoKLQkJCWlmIChpc3IgJiB+SVNSX0lPKSB7Ci0JCQkJaWYgKGlzciAmIElTUl9FUlIpIHsKLQkJCQkJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cysrOwotCQkJCQlpZiAoaXNyICYgSVNSX1JNSVNTKSB7Ci0JCQkJCQlpbnQgY291bnQ7Ci0JCQkJCQlpbnQgcHJlX2NvdW50OwotCQkJCQkJaW50IGVycm9yczsKLQotCQkJCQkJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPQotCQkJCQkJICAgICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQotCQkJCQkJYWRhcHRlci0+Ci0JCQkJCQkgICAgZXJyb3Jfcm1pc3NfaW50ZXJydXB0cysrOwotCQkJCQkJaWYgKCFyY3ZxLT5lcnJvcnMpCi0JCQkJCQkJcmN2X2NvdW50ID0gcmN2cS0+Y291bnQ7Ci0JCQkJCQlwcmVfY291bnQgPSByY3ZxLT5jb3VudDsKLQkJCQkJCWVycm9ycyA9IHJjdnEtPmVycm9yczsKLQotCQkJCQkJd2hpbGUgKHJjdnEtPmNvdW50IDwKLQkJCQkJCSAgICAgICBTTElDX1JDVlFfRklMTFRIUkVTSCkgewotCQkJCQkJCWNvdW50ID0KLQkJCQkJCQkgICAgc2xpY19yY3ZxdWV1ZV9maWxsCi0JCQkJCQkJICAgIChhZGFwdGVyKTsKLQkJCQkJCQlpZiAoIWNvdW50KQotCQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIGlmIChpc3IgJiBJU1JfWERST1ApIHsKLQkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF0gIgotCQkJCQkJCSJJU1JfWERST1AgXG4iLCBpc3IpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkJCQkJImlzciAmIElTUl9FUlIgWyV4XVxuIiwKLQkJCQkJCQlpc3IpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKGlzciAmIElTUl9MRVZFTlQpIHsKLQkJCQkJYWRhcHRlci0+bGlua2V2ZW50X2ludGVycnVwdHMrKzsKLQkJCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7Ci0JCQkJfQotCi0JCQkJaWYgKChpc3IgJiBJU1JfVVBDKSB8fAotCQkJCSAgICAoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7Ci0JCQkJCWFkYXB0ZXItPnVwcl9pbnRlcnJ1cHRzKys7Ci0JCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChpc3IgJiBJU1JfUkNWKSB7Ci0JCQkJYWRhcHRlci0+cmN2X2ludGVycnVwdHMrKzsKLQkJCQlzbGljX3Jjdl9oYW5kbGVyKGFkYXB0ZXIpOwotCQkJfQotCi0JCQlpZiAoaXNyICYgSVNSX0NNRCkgewotCQkJCWFkYXB0ZXItPnhtaXRfaW50ZXJydXB0cysrOwotCQkJCXNsaWNfeG1pdF9jb21wbGV0ZShhZGFwdGVyKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgQ0FSRF9ET1dOOgotCQkJaWYgKChpc3IgJiBJU1JfVVBDKSB8fAotCQkJICAgIChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKLQkJCQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cysrOwotCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgaXNyKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWFkYXB0ZXItPmlzcmNvcHkgPSAwOwotCQlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcyArPSAyOwotCQlhZGFwdGVyLT5pc3JfcmVnX3dyaXRlcysrOwotCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7Ci0JfSBlbHNlIHsKLQkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cysrOwotCX0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLS8qCi0gKiBzbGljX2xpbmtfZXZlbnRfaGFuZGxlciAtCi0gKgotICogSW5pdGlhdGUgYSBsaW5rIGNvbmZpZ3VyYXRpb24gc2VxdWVuY2UuICBUaGUgbGluayBjb25maWd1cmF0aW9uIGJlZ2lucwotICogYnkgaXNzdWluZyBhIFJFQURfTElOS19TVEFUVVMgY29tbWFuZCB0byB0aGUgVXRpbGl0eSBQcm9jZXNzb3Igb24gdGhlCi0gKiBTTElDLiAgU2luY2UgdGhlIGNvbW1hbmQgZmluaXNoZXMgYXN5bmNocm9ub3VzbHksIHRoZSBzbGljX3Vwcl9jb21sZXRlCi0gKiByb3V0aW5lIHdpbGwgZm9sbG93IGl0IHVwIHdpdGhhIFVQIGNvbmZpZ3VyYXRpb24gd3JpdGUgY29tbWFuZCwgd2hpY2gKLSAqIHdpbGwgYWxzbyBjb21wbGV0ZSBhc3luY2hyb25vdXNseS4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIHNsaWNfbGlua19ldmVudF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IHNsaWNfc2htZW0gKnBzaG1lbTsKLQotCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgewotCQkvKiBBZGFwdGVyIGlzIG5vdCBvcGVyYXRpb25hbC4gIElnbm9yZS4gICovCi0JCXJldHVybjsKLQl9Ci0KLQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKLQkJCQkgIFNMSUNfVVBSX1JMU1IsCi0JCQkJICBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5saW5rc3RhdHVzKSwKLQkJCQkgIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5saW5rc3RhdHVzKSwKLQkJCQkgIDAsIDApOwotI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCXN0YXR1cyA9IHNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwgU0xJQ19VUFJfUkxTUiwKLQkJKHUzMikgJnBzaG1lbS0+bGlua3N0YXR1cywJLyogbm8gNEdCIHdyYXAgZ3VhcmFudGVlZCAqLwotCQkJCSAgMCwgMCwgMCk7Ci0jZWxzZQotCVN0b3AgY29tcGlsYXRpb247Ci0jZW5kaWYKLQlBU1NFUlQoKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykgfHwgKHN0YXR1cyA9PSBTVEFUVVNfUEVORElORykpOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQpIHsKLQkJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAwOwotCQlmcmVlX2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwgYWRhcHRlci0+bmV0ZGV2KTsKLQotCX0KLQlpZiAoYWRhcHRlci0+cHNobWVtKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAotCQkJCSAgICBhZGFwdGVyLT5wc2htZW0sIGFkYXB0ZXItPnBoeXNfc2htZW0pOwotCQlhZGFwdGVyLT5wc2htZW0gPSBOVUxMOwotCQlhZGFwdGVyLT5waHlzX3NobWVtID0gKGRtYV9hZGRyX3QpIE5VTEw7Ci0JfQotCi0JaWYgKGFkYXB0ZXItPnBpbmd0aW1lcnNldCkgewotCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAwOwotCQlkZWxfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7Ci0JfQotCi0Jc2xpY19yc3BxdWV1ZV9mcmVlKGFkYXB0ZXIpOwotCXNsaWNfY21kcV9mcmVlKGFkYXB0ZXIpOwotCXNsaWNfcmN2cXVldWVfZnJlZShhZGFwdGVyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCUFTU0VSVChhZGFwdGVyKTsKLQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKLQlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9yczsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG10X2Vycm9yczsKLQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKLQlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOwotCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSAwOwotCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7Ci0JZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyA9IDA7Ci0JZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOwotCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7Ci0KLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19Ci0KLS8qCi0gKiAgQWxsb2NhdGUgYSBtY2FzdF9hZGRyZXNzIHN0cnVjdHVyZSB0byBob2xkIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KLSAqICBMaW5rIGl0IGluLgotICovCi1zdGF0aWMgaW50IHNsaWNfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCi17Ci0Jc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OwotCi0JLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCi0JbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwotCXdoaWxlIChtbGlzdCkgewotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcykpCi0JCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0JCW1saXN0ID0gbWxpc3QtPm5leHQ7Ci0JfQotCi0JLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLwotCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FzdF9hZGRyZXNzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKG1jYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCW1lbWNweShtY2FkZHItPmFkZHJlc3MsIGFkZHJlc3MsIDYpOwotCi0JbWNhZGRyLT5uZXh0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKLQlhZGFwdGVyLT5tY2FzdGFkZHJzID0gbWNhZGRyOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCiAvKgogICogRnVuY3Rpb25zIHRvIG9idGFpbiB0aGUgQ1JDIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzLgogICogVGhpcyBpcyBhIHN0YW5kYXJkIGV0aGVybmV0IENSQyBpbiB0aGF0IGl0IGlzIGEgMzItYml0LCByZWZsZWN0ZWQgQ1JDIHVzaW5nCkBAIC0xMzYyLDQ0ICsyOTYsNiBAQAogCWFkYXB0ZXItPm1jYXN0bWFzayB8PSAodTY0KSAxIDw8IGNyY3BvbHk7CiB9CiAKLXN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwotCWNoYXIgKmFkZHJlc3NlczsKLQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOwotCi0JQVNTRVJUKGFkYXB0ZXIpOwotCi0JbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikgewotCQlhZGRyZXNzZXMgPSAoY2hhciAqKSAmaGEtPmFkZHI7Ci0JCXN0YXR1cyA9IHNsaWNfbWNhc3RfYWRkX2xpc3QoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCWJyZWFrOwotCQlzbGljX21jYXN0X3NldF9iaXQoYWRhcHRlciwgYWRkcmVzc2VzKTsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7Ci0JCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7Ci0JCWlmIChkZXYtPmZsYWdzKSB7Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpCi0JCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQotCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKLQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKLQkJfQotCQlhZGFwdGVyLT5kZXZmbGFnc19wcmV2ID0gZGV2LT5mbGFnczsKLQkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIHRydWUpOwotCX0gZWxzZSB7Ci0JCWlmIChzdGF0dXMgPT0gU1RBVFVTX1NVQ0NFU1MpCi0JCQlzbGljX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOwotCX0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CkBAIC0xNDM5LDEyMyArMzM1LDYgQEAKIAlhZGRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CiB9CiAKLS8qCi0gKiAgc2xpY19pZl9pbml0Ci0gKgotICogIFBlcmZvcm0gaW5pdGlhbGl6YXRpb24gb2Ygb3VyIHNsaWMgaW50ZXJmYWNlLgotICoKLSAqLwotc3RhdGljIGludCBzbGljX2lmX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07Ci0JaW50IHN0YXR1cyA9IDA7Ci0KLQlBU1NFUlQoY2FyZCk7Ci0KLQkvKiBhZGFwdGVyIHNob3VsZCBiZSBkb3duIGF0IHRoaXMgcG9pbnQgKi8KLQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOXG4iLAotCQkJX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JQVNTRVJUKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pOwotCi0JYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7Ci0JYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKLQlpZiAoZGV2LT5mbGFncykgewotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpCi0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQotCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7Ci0JCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwotCX0KLQlzdGF0dXMgPSBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoYWRhcHRlcik7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCSIlczogc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzIEZBSUxFRCAleFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMpOwotCQlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlpZiAoIWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCkgewotCQlpZiAoc2xpY19yc3BxdWV1ZV9pbml0KGFkYXB0ZXIpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChzbGljX2NtZHFfaW5pdChhZGFwdGVyKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoc2xpY19yY3ZxdWV1ZV9pbml0KGFkYXB0ZXIpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWFkYXB0ZXItPnF1ZXVlc19pbml0aWFsaXplZCA9IDE7Ci0JfQotCi0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKLQltZGVsYXkoMSk7Ci0KLQlpZiAoIWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCkgewotCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKLQkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKLQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pc3IpLCBET05UX0ZMVVNIKTsKLQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgMCwgRE9OVF9GTFVTSCk7Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3AsICh1MzIpJnBzaG1lbS0+aXNyLCBGTFVTSCk7Ci0jZWxzZQotCQlTdG9wIENvbXBpbGF0aW9ucwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAotCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwotCQlhZGFwdGVyLT5pc3BfaW5pdGlhbGl6ZWQgPSAxOwotCX0KLQotCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7Ci0JaWYgKCFjYXJkLT5sb2FkdGltZXJzZXQpIHsKLQkJaW5pdF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKLQkJY2FyZC0+bG9hZHRpbWVyLmV4cGlyZXMgPQotCQkgICAgamlmZmllcyArIChTTElDX0xPQURUSU1FUl9QRVJJT0QgKiBIWik7Ci0JCWNhcmQtPmxvYWR0aW1lci5kYXRhID0gKHVsb25nKSBjYXJkOwotCQljYXJkLT5sb2FkdGltZXIuZnVuY3Rpb24gPSAmc2xpY190aW1lcl9sb2FkX2NoZWNrOwotCQlhZGRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7Ci0KLQkJY2FyZC0+bG9hZHRpbWVyc2V0ID0gMTsKLQl9Ci0KLQlpZiAoIWFkYXB0ZXItPnBpbmd0aW1lcnNldCkgewotCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOwotCQlhZGFwdGVyLT5waW5ndGltZXIuZXhwaXJlcyA9Ci0JCSAgICBqaWZmaWVzICsgKFBJTkdfVElNRVJfSU5URVJWQUwgKiBIWik7Ci0JCWFkYXB0ZXItPnBpbmd0aW1lci5kYXRhID0gKHVsb25nKSBkZXY7Ci0JCWFkYXB0ZXItPnBpbmd0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX3Bpbmc7Ci0JCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKLQkJYWRhcHRlci0+cGluZ3RpbWVyc2V0ID0gMTsKLQkJYWRhcHRlci0+Y2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKLQl9Ci0KLQkvKgotCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cwotCSAqLwotCWFkYXB0ZXItPmlzcmNvcHkgPSAwOwotCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7Ci0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PTiwgRkxVU0gpOwotCi0Jc2xpY19saW5rX2NvbmZpZyhhZGFwdGVyLCBMSU5LX0FVVE9TUEVFRCwgTElOS19BVVRPRCk7Ci0Jc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KIHN0YXRpYyB2b2lkIHNsaWNfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+c2xpY19yZWdzKQpAQCAtMTU2Myw2NCArMzQyLDYgQEAKIAlhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOwogfQogCi1zdGF0aWMgaW50IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIWFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7Ci0JCWludCByZXR2YWw7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKLQkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwotCi0JCXJldHZhbCA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLAotCQkJCSAgICAgJnNsaWNfaW50ZXJydXB0LAotCQkJCSAgICAgSVJRRl9TSEFSRUQsCi0JCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXItPm5ldGRldik7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCi0JCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKLQotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKLQkJCQkicmVxdWVzdF9pcnEgKCVzKSBGQUlMRUQgWyV4XVxuIiwKLQkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHJldHZhbCk7Ci0JCQlyZXR1cm4gcmV0dmFsOwotCQl9Ci0JCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKLQl9Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKLXsKLQl1MTYgcGNpX2NvbW1hbmQ7Ci0JdTE2IG5ld19jb21tYW5kOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKLQotCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCBQQ0lfQ09NTUFORF9NQVNURVIKLQkgICAgfCBQQ0lfQ09NTUFORF9NRU1PUlkKLQkgICAgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCi0JICAgIHwgUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUiB8IFBDSV9DT01NQU5EX0ZBU1RfQkFDSzsKLQlpZiAocGNpX2NvbW1hbmQgIT0gbmV3X2NvbW1hbmQpCi0JCXBjaV93cml0ZV9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCBuZXdfY29tbWFuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXNsaWNfaW5pdF9jbGVhbnVwKGFkYXB0ZXIpOwotCW1lbXNldCgmYWRhcHRlci0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwotCWFkYXB0ZXItPmVycm9yX2ludGVycnVwdHMgPSAwOwotCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRzID0gMDsKLQlhZGFwdGVyLT54bWl0X2ludGVycnVwdHMgPSAwOwotCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzID0gMDsKLQlhZGFwdGVyLT51cHJfaW50ZXJydXB0cyA9IDA7Ci0JYWRhcHRlci0+bnVtX2lzcnMgPSAwOwotCWFkYXB0ZXItPnhtaXRfY29tcGxldGVzID0gMDsKLQlhZGFwdGVyLT5yY3ZfYnJvYWRjYXN0cyA9IDA7Ci0JYWRhcHRlci0+cmN2X211bHRpY2FzdHMgPSAwOwotCWFkYXB0ZXItPnJjdl91bmljYXN0cyA9IDA7Ci19Ci0KIC8qCiAgKiAgc2xpY19saW5rX2NvbmZpZwogICoKQEAgLTE3NzQsMTggKzQ5NSw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCi17Ci0JaWYgKGNhcmQtPmxvYWR0aW1lcnNldCkgewotCQljYXJkLT5sb2FkdGltZXJzZXQgPSAwOwotCQlkZWxfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7Ci0JfQotCi0Jc2xpY19kZWJ1Z19jYXJkX2Rlc3Ryb3koY2FyZCk7Ci0KLQlrZnJlZShjYXJkKTsKLX0KLQogc3RhdGljIGludCBzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3Yoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKQEAgLTE5NjcsNyArNjc2LDcgQEAKIAkgICBhbmQgcmVhY2ggbWFpbmxvb3AgKi8KIAltZGVsYXkoMjApOwogCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOworCXJldHVybiAwOwogfQogCiBNT0RVTEVfRklSTVdBUkUoInNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMiKTsKQEAgLTE5OTksMzE3ICs3MDgsNiBAQAogCWFkYXB0ZXItPmNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ID0gdmFsdWU7CiB9CiAKLXN0YXRpYyBpbnQgc2xpY19jYXJkX2luaXQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQlzdHJ1Y3Qgc2xpY19lZXByb20gKnBlZXByb207Ci0Jc3RydWN0IG9zbGljX2VlcHJvbSAqcE9lZXByb207Ci0JZG1hX2FkZHJfdCBwaHlzX2NvbmZpZzsKLQl1MzIgcGh5c19jb25maWdoOwotCXUzMiBwaHlzX2NvbmZpZ2w7Ci0JdTMyIGkgPSAwOwotCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07Ci0JaW50IHN0YXR1czsKLQl1aW50IG1hY2FkZHJzID0gY2FyZC0+Y2FyZF9zaXplOwotCXVzaG9ydCBlZWNvZGVzaXplOwotCXVzaG9ydCBkcmFtc2l6ZTsKLQl1c2hvcnQgZWVfY2hrc3VtOwotCXVzaG9ydCBjYWxjX2Noa3N1bTsKLQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjICpwbWFjOwotCXVuc2lnbmVkIGNoYXIgZnJ1Zm9ybWF0OwotCXVuc2lnbmVkIGNoYXIgb2VtZnJ1Zm9ybWF0OwotCXN0cnVjdCBhdGtfZnJ1ICpwYXRrZnJ1OwotCXVuaW9uIG9lbWZydSAqcG9lbWZydTsKLQotCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgZXhjZXB0IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCi0Jc2xpY19zb2Z0X3Jlc2V0KGFkYXB0ZXIpOwotCi0JLyogRG93bmxvYWQgdGhlIG1pY3JvY29kZSAqLwotCXN0YXR1cyA9IHNsaWNfY2FyZF9kb3dubG9hZChhZGFwdGVyKTsKLQotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkiZG93bmxvYWQgZmFpbGVkIGJ1cyAlZCBzbG90ICVkXG4iLAotCQkJYWRhcHRlci0+YnVzbnVtYmVyLCBhZGFwdGVyLT5zbG90bnVtYmVyKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlpZiAoIWNhcmQtPmNvbmZpZ19zZXQpIHsKLQkJcGVlcHJvbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAotCQkJCQkgICAgICAgJnBoeXNfY29uZmlnKTsKLQotCQlwaHlzX2NvbmZpZ2wgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2NvbmZpZyk7Ci0JCXBoeXNfY29uZmlnaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2NvbmZpZyk7Ci0KLQkJaWYgKCFwZWVwcm9tKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKLQkJCQkiZWVwcm9tIHJlYWQgZmFpbGVkIHRvIGdldCBtZW1vcnkgIgotCQkJCSJidXMgJWQgc2xvdCAlZFxuIiwgYWRhcHRlci0+YnVzbnVtYmVyLAotCQkJCWFkYXB0ZXItPnNsb3RudW1iZXIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0gZWxzZSB7Ci0JCQltZW1zZXQocGVlcHJvbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSkpOwotCQl9Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7Ci0JCW1kZWxheSgxKTsKLQkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCi0JCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7Ci0JCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKLQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKLQkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKLQotCQlzbGljX2NvbmZpZ19nZXQoYWRhcHRlciwgcGh5c19jb25maWdsLCBwaHlzX2NvbmZpZ2gpOwotCi0JCWZvciAoOzspIHsKLQkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzcikgewotCQkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzciAmIElTUl9VUEMpIHsKLQkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOwotCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCi0JCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKLQkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJCTAsIEZMVVNIKTsKLQkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKLQkJCQkJCQkgMCwgRkxVU0gpOwotCi0JCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKLQkJCQkJCQkgMCwgRkxVU0gpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJbWRlbGF5KDEpOwotCQkJCWkrKzsKLQkJCQlpZiAoaSA+IDUwMDApIHsKLQkJCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkJCQkiJWQgY29uZmlnIGRhdGEgZmV0Y2ggdGltZWQgb3V0IVxuIiwKLQkJCQkJCWFkYXB0ZXItPnBvcnQpOwotCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCi0JCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKLQkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJCTAsIEZMVVNIKTsKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewotCQkvKiBPYXNpcyBjYXJkICovCi0JCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgotCQkJLyogZXh0cmFjdCBFRVBST00gZGF0YSBhbmQgcG9pbnRlcnMgdG8gRUVQUk9NIGRhdGEgKi8KLQkJCXBPZWVwcm9tID0gKHN0cnVjdCBvc2xpY19lZXByb20gKikgcGVlcHJvbTsKLQkJCWVlY29kZXNpemUgPSBwT2VlcHJvbS0+RWVjb2RlU2l6ZTsKLQkJCWRyYW1zaXplID0gcE9lZXByb20tPkRyYW1TaXplOwotCQkJcG1hYyA9IHBPZWVwcm9tLT5NYWNJbmZvOwotCQkJZnJ1Zm9ybWF0ID0gcE9lZXByb20tPkZydUZvcm1hdDsKLQkJCXBhdGtmcnUgPSAmcE9lZXByb20tPkF0a0ZydTsKLQkJCW9lbWZydWZvcm1hdCA9IHBPZWVwcm9tLT5PZW1GcnVGb3JtYXQ7Ci0JCQlwb2VtZnJ1ID0gJnBPZWVwcm9tLT5PZW1GcnU7Ci0JCQltYWNhZGRycyA9IDI7Ci0JCQkvKiBNaW5vciBrbHVkZ2UgZm9yIE9hc2lzIGNhcmQKLQkJCSAgICAgZ2V0IDIgTUFDIGFkZHJlc3NlcyBmcm9tIHRoZQotCQkJICAgICBFRVBST00gdG8gZW5zdXJlIHRoYXQgZnVuY3Rpb24gMQotCQkJICAgICBnZXRzIHRoZSBQb3J0IDEgTUFDIGFkZHJlc3MgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogZXh0cmFjdCBFRVBST00gZGF0YSBhbmQgcG9pbnRlcnMgdG8gRUVQUk9NIGRhdGEgKi8KLQkJCWVlY29kZXNpemUgPSBwZWVwcm9tLT5FZWNvZGVTaXplOwotCQkJZHJhbXNpemUgPSBwZWVwcm9tLT5EcmFtU2l6ZTsKLQkJCXBtYWMgPSBwZWVwcm9tLT51Mi5tYWMuTWFjSW5mbzsKLQkJCWZydWZvcm1hdCA9IHBlZXByb20tPkZydUZvcm1hdDsKLQkJCXBhdGtmcnUgPSAmcGVlcHJvbS0+QXRrRnJ1OwotCQkJb2VtZnJ1Zm9ybWF0ID0gcGVlcHJvbS0+T2VtRnJ1Rm9ybWF0OwotCQkJcG9lbWZydSA9ICZwZWVwcm9tLT5PZW1GcnU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IGZhbHNlOwotCi0JCS8qICBzZWUgaWYgdGhlIEVFUFJPTSBpcyB2YWxpZCBieSBjaGVja2luZyBpdCdzIGNoZWNrc3VtICovCi0JCWlmICgoZWVjb2Rlc2l6ZSA8PSBNQVhfRUVDT0RFX1NJWkUpICYmCi0JCSAgICAoZWVjb2Rlc2l6ZSA+PSBNSU5fRUVDT0RFX1NJWkUpKSB7Ci0KLQkJCWVlX2Noa3N1bSA9Ci0JCQkgICAgKih1MTYgKikgKChjaGFyICopIHBlZXByb20gKyAoZWVjb2Rlc2l6ZSAtIDIpKTsKLQkJCS8qCi0JCQkgICAgY2FsY3VsYXRlIHRoZSBFRVBST00gY2hlY2tzdW0KLQkJCSovCi0JCQljYWxjX2Noa3N1bSA9Ci0JCQkgICAgfnNsaWNfZWVwcm9tX2Nrc3VtKChjaGFyICopIHBlZXByb20sCi0JCQkJCSAgICAgICAoZWVjb2Rlc2l6ZSAtIDIpKTsKLQkJCS8qCi0JCQkgICAgaWYgdGhlIHVjZG9lIGNoa3N1bSBmbGFnIGJpdCB3b3JrZWQsCi0JCQkgICAgd2Ugd291bGRuJ3QgbmVlZCB0aGlzIHNoaXQKLQkJCSovCi0JCQlpZiAoZWVfY2hrc3VtID09IGNhbGNfY2hrc3VtKQotCQkJCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IHRydWU7Ci0JCX0KLQkJLyogIGNvcHkgaW4gdGhlIERSQU0gc2l6ZSAqLwotCQljYXJkLT5jb25maWcuRHJhbVNpemUgPSBkcmFtc2l6ZTsKLQotCQkvKiAgY29weSBpbiB0aGUgTUFDIGFkZHJlc3MoZXMpICovCi0JCWZvciAoaSA9IDA7IGkgPCBtYWNhZGRyczsgaSsrKSB7Ci0JCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5NYWNJbmZvW2ldLAotCQkJICAgICAgICZwbWFjW2ldLCBzaXplb2Yoc3RydWN0IHNsaWNfY29uZmlnX21hYykpOwotCQl9Ci0KLQkJLyogIGNvcHkgdGhlIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCi0JCWNhcmQtPmNvbmZpZy5GcnVGb3JtYXQgPSBmcnVmb3JtYXQ7Ci0JCW1lbWNweSgmY2FyZC0+Y29uZmlnLkF0a0ZydSwgcGF0a2ZydSwKLQkJCQkJCXNpemVvZihzdHJ1Y3QgYXRrX2ZydSkpOwotCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAotCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKLQkJCQkgICAgcGVlcHJvbSwgcGh5c19jb25maWcpOwotCi0JCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKLQkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKLQkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCi0JCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCSAwLCBGTFVTSCk7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKLQkJCQkidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiBFRVBST00gaW52YWxpZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNhcmQtPmNvbmZpZ19zZXQgPSAxOwotCX0KLQotCWlmIChzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3YoYWRhcHRlcikpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCi0JCQkidW5hYmxlIHRvIGRvd25sb2FkIEdCIHJlY2VpdmUgbWljcm9jb2RlXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKQotCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7Ci0JZWxzZQotCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnX2RlbGF5KTsKLQotCS8qCi0JICogIEluaXRpYWxpemUgcGluZyBzdGF0dXMgdG8gIm9rIgotCSAqLwotCWNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7Ci0KLQkvKgotCSAqIExhc3RseSwgbWFyayBvdXIgY2FyZCBzdGF0ZSBhcyB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MKLQkgKi8KLQljYXJkLT5zdGF0ZSA9IENBUkRfVVA7Ci0JY2FyZC0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOwotCi0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwotCXN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7Ci0JdXNob3J0IGNhcmRfaG9zdGlkOwotCXUxNiBfX2lvbWVtICpob3N0aWRfcmVnOwotCXVpbnQgaTsKLQl1aW50IHJkaG9zdGlkX29mZnNldCA9IDA7Ci0KLQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMkdCOwotCQlicmVhazsKLQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLQkJcmRob3N0aWRfb2Zmc2V0ID0gU0xJQ19SREhPU1RJRF8xR0I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUFTU0VSVCgwKTsKLQkJYnJlYWs7Ci0JfQotCi0JaG9zdGlkX3JlZyA9Ci0JICAgICh1MTYgX19pb21lbSAqKSAoKCh1OCBfX2lvbWVtICopIChhZGFwdGVyLT5zbGljX3JlZ3MpKSArCi0JICAgIHJkaG9zdGlkX29mZnNldCk7Ci0KLQkvKiByZWFkIHRoZSAxNiBiaXQgaG9zdGlkIGZyb20gU1JBTSAqLwotCWNhcmRfaG9zdGlkID0gKHVzaG9ydCkgcmVhZHcoaG9zdGlkX3JlZyk7Ci0KLQkvKiBJbml0aWFsaXplIGEgbmV3IGNhcmQgc3RydWN0dXJlIGlmIG5lZWQgYmUgKi8KLQlpZiAoY2FyZF9ob3N0aWQgPT0gU0xJQ19IT1NUSURfREVGQVVMVCkgewotCQljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNsaWNjYXJkKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChjYXJkID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQljYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOwotCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkOwotCQljYXJkLT5idXNudW1iZXIgPSBhZGFwdGVyLT5idXNudW1iZXI7Ci0JCWNhcmQtPnNsb3RudW1iZXIgPSBhZGFwdGVyLT5zbG90bnVtYmVyOwotCi0JCS8qIEZpbmQgYW4gYXZhaWxhYmxlIGNhcmRudW0gKi8KLQkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX0NBUkRTOyBpKyspIHsKLQkJCWlmIChzbGljX2dsb2JhbC5jYXJkbnVtaW51c2VbaV0gPT0gMCkgewotCQkJCXNsaWNfZ2xvYmFsLmNhcmRudW1pbnVzZVtpXSA9IDE7Ci0JCQkJY2FyZC0+Y2FyZG51bSA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMrKzsKLQotCQlzbGljX2RlYnVnX2NhcmRfY3JlYXRlKGNhcmQpOwotCX0gZWxzZSB7Ci0JCS8qIENhcmQgZXhpc3RzLCBmaW5kIHRoZSBjYXJkIHRoaXMgYWRhcHRlciBiZWxvbmdzIHRvICovCi0JCXdoaWxlIChjYXJkKSB7Ci0JCQlpZiAoY2FyZC0+Y2FyZG51bSA9PSBjYXJkX2hvc3RpZCkKLQkJCQlicmVhazsKLQkJCWNhcmQgPSBjYXJkLT5uZXh0OwotCQl9Ci0JfQotCi0JQVNTRVJUKGNhcmQpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCS8qIFB1dCB0aGUgYWRhcHRlciBpbiB0aGUgY2FyZCdzIGFkYXB0ZXIgbGlzdCAqLwotCUFTU0VSVChjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID09IE5VTEwpOwotCWlmICghY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSkgewotCQljYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBvcnRdID0gYWRhcHRlcjsKLQkJYWRhcHRlci0+Y2FyZCA9IGNhcmQ7Ci0JfQotCi0JY2FyZC0+Y2FyZF9zaXplID0gMTsJLyogb25lIHBvcnQgcGVyICpsb2dpY2FsKiBjYXJkICovCi0KLQl3aGlsZSAocGh5c2NhcmQpIHsKLQkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX1BPUlRTOyBpKyspIHsKLQkJCWlmICghcGh5c2NhcmQtPmFkYXB0ZXJbaV0pCi0JCQkJY29udGludWU7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCX0KLQkJQVNTRVJUKGkgIT0gU0xJQ19NQVhfUE9SVFMpOwotCQlpZiAocGh5c2NhcmQtPmFkYXB0ZXJbaV0tPnNsb3RudW1iZXIgPT0gYWRhcHRlci0+c2xvdG51bWJlcikKLQkJCWJyZWFrOwotCQlwaHlzY2FyZCA9IHBoeXNjYXJkLT5uZXh0OwotCX0KLQlpZiAoIXBoeXNjYXJkKSB7Ci0JCS8qIG5vIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHRoaXMgcGh5c2ljYWwgY2FyZCB5ZXQgKi8KLQkJcGh5c2NhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQpLCBHRlBfQVRPTUlDKTsKLQkJQVNTRVJUKHBoeXNjYXJkKTsKLQotCQlwaHlzY2FyZC0+bmV4dCA9IHNsaWNfZ2xvYmFsLnBoeXNfY2FyZDsKLQkJc2xpY19nbG9iYWwucGh5c19jYXJkID0gcGh5c2NhcmQ7Ci0JCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgPSAxOwotCX0gZWxzZSB7Ci0JCXBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QrKzsKLQl9Ci0JLyogTm90ZSAtIHRoaXMgaXMgWkVSTyByZWxhdGl2ZSAqLwotCWFkYXB0ZXItPnBoeXNwb3J0ID0gcGh5c2NhcmQtPmFkYXB0ZXJzX2FsbG9jZCAtIDE7Ci0KLQlBU1NFUlQocGh5c2NhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cGh5c3BvcnRdID09IE5VTEwpOwotCXBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9IGFkYXB0ZXI7Ci0JYWRhcHRlci0+cGh5c2NhcmQgPSBwaHlzY2FyZDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPmNhcmQtPnN0YXRlID09IENBUkRfVVApIHsKQEAgLTIzMjIsNiArNzIwLDYyIEBACiAJbWRlbGF5KDEpOwogfQogCitzdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsdWU7CisJdTMyIHZhbHVlMjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCXZhbHVlID0gKih1MzIgKikgJmFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdOworCXZhbHVlID0gbnRvaGwodmFsdWUpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJhbCwgdmFsdWUsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmwsIHZhbHVlLCBGTFVTSCk7CisKKwl2YWx1ZTIgPSAodTMyKSAoKGFkYXB0ZXItPmN1cnJtYWNhZGRyWzBdIDw8IDggfAorCQkJICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSkgJiAweEZGRkYpOworCisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmFoLCB2YWx1ZTIsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmgsIHZhbHVlMiwgRkxVU0gpOworCisJLyogV3JpdGUgb3VyIG11bHRpY2FzdCBtYXNrIG91dCB0byB0aGUgY2FyZC4gIFRoaXMgaXMgZG9uZSAqLworCS8qIGhlcmUgaW4gYWRkaXRpb24gdG8gdGhlIHNsaWNfbWNhc3RfYWRkcl9zZXQgcm91dGluZSAgICAgKi8KKwkvKiBiZWNhdXNlIEFMTF9NQ0FTVCBtYXkgaGF2ZSBiZWVuIGVuYWJsZWQgb3IgZGlzYWJsZWQgICAgICovCisJc2xpY19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQgc2xpY19tYWNfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWx1ZTsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKworCS8qIFNldHVwIEdNQUMgZ2FwcyAqLworCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDAwTUIpIHsKKwkJdmFsdWUgPSAoKEdNQ1JfR0FQQkJfMTAwMCA8PCBHTUNSX0dBUEJCX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjFfMTAwMCA8PCBHTUNSX0dBUFIxX1NISUZUKSB8CisJCQkgKEdNQ1JfR0FQUjJfMTAwMCA8PCBHTUNSX0dBUFIyX1NISUZUKSk7CisJfSBlbHNlIHsKKwkJdmFsdWUgPSAoKEdNQ1JfR0FQQkJfMTAwIDw8IEdNQ1JfR0FQQkJfU0hJRlQpIHwKKwkJCSAoR01DUl9HQVBSMV8xMDAgPDwgR01DUl9HQVBSMV9TSElGVCkgfAorCQkJIChHTUNSX0dBUFIyXzEwMCA8PCBHTUNSX0dBUFIyX1NISUZUKSk7CisJfQorCisJLyogZW5hYmxlIEdNSUkgKi8KKwlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKQorCQl2YWx1ZSB8PSBHTUNSX0dCSVQ7CisKKwkvKiBlbmFibGUgZnVsbGR1cGxleCAqLworCWlmICgoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQorCSAgICB8fCAoYWRhcHRlci0+bWFjb3B0cyAmIE1BQ19MT09QQkFDSykpIHsKKwkJdmFsdWUgfD0gR01DUl9GVUxMRDsKKwl9CisKKwkvKiB3cml0ZSBtYWMgY29uZmlnICovCisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dtY2ZnLCB2YWx1ZSwgRkxVU0gpOworCisJLyogc2V0dXAgbWFjIGFkZHJlc3NlcyAqLworCXNsaWNfbWFjX2FkZHJlc3NfY29uZmlnKGFkYXB0ZXIpOworfQorCiBzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19zZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua2NoYW5nZSkKIHsKIAl1MzIgdmFsdWU7CkBAIC0yNDAzLDc2ICs4NTcsMTAgQEAKIAlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogfQogCi1zdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCi0JCQkJCQkJdTMyIGNvbmZpZ19oKQotewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJICBTTElDX1VQUl9SQ09ORklHLAotCQkJCSAgKHUzMikgY29uZmlnLCAodTMyKSBjb25maWdfaCwgMCwgMCk7Ci0JQVNTRVJUKHN0YXR1cyA9PSAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIHZhbHVlOwotCXUzMiB2YWx1ZTI7Ci0JX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0KLQl2YWx1ZSA9ICoodTMyICopICZhZGFwdGVyLT5jdXJybWFjYWRkclsyXTsKLQl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKLQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7Ci0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJsLCB2YWx1ZSwgRkxVU0gpOwotCi0JdmFsdWUyID0gKHUzMikgKChhZGFwdGVyLT5jdXJybWFjYWRkclswXSA8PCA4IHwKLQkJCSAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0pICYgMHhGRkZGKTsKLQotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJhaCwgdmFsdWUyLCBGTFVTSCk7Ci0Jc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKLQotCS8qIFdyaXRlIG91ciBtdWx0aWNhc3QgbWFzayBvdXQgdG8gdGhlIGNhcmQuICBUaGlzIGlzIGRvbmUgKi8KLQkvKiBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBzbGljX21jYXN0X2FkZHJfc2V0IHJvdXRpbmUgICAgICovCi0JLyogYmVjYXVzZSBBTExfTUNBU1QgbWF5IGhhdmUgYmVlbiBlbmFibGVkIG9yIGRpc2FibGVkICAgICAqLwotCXNsaWNfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfbWFjX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgdmFsdWU7Ci0JX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0KLQkvKiBTZXR1cCBHTUFDIGdhcHMgKi8KLQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwME1CKSB7Ci0JCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMDAgPDwgR01DUl9HQVBCQl9TSElGVCkgfAotCQkJIChHTUNSX0dBUFIxXzEwMDAgPDwgR01DUl9HQVBSMV9TSElGVCkgfAotCQkJIChHTUNSX0dBUFIyXzEwMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOwotCX0gZWxzZSB7Ci0JCXZhbHVlID0gKChHTUNSX0dBUEJCXzEwMCA8PCBHTUNSX0dBUEJCX1NISUZUKSB8Ci0JCQkgKEdNQ1JfR0FQUjFfMTAwIDw8IEdNQ1JfR0FQUjFfU0hJRlQpIHwKLQkJCSAoR01DUl9HQVBSMl8xMDAgPDwgR01DUl9HQVBSMl9TSElGVCkpOwotCX0KLQotCS8qIGVuYWJsZSBHTUlJICovCi0JaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwMDBNQikKLQkJdmFsdWUgfD0gR01DUl9HQklUOwotCi0JLyogZW5hYmxlIGZ1bGxkdXBsZXggKi8KLQlpZiAoKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKLQkgICAgfHwgKGFkYXB0ZXItPm1hY29wdHMgJiBNQUNfTE9PUEJBQ0spKSB7Ci0JCXZhbHVlIHw9IEdNQ1JfRlVMTEQ7Ci0JfQotCi0JLyogd3JpdGUgbWFjIGNvbmZpZyAqLwotCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193bWNmZywgdmFsdWUsIEZMVVNIKTsKLQotCS8qIHNldHVwIG1hYyBhZGRyZXNzZXMgKi8KLQlzbGljX21hY19hZGRyZXNzX2NvbmZpZyhhZGFwdGVyKTsKLX0KLQogc3RhdGljIGJvb2wgc2xpY19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGV0aGVyX2hlYWRlciAqZXRoZXJfZnJhbWUpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAl1MzIgb3B0cyA9IGFkYXB0ZXItPm1hY29wdHM7CiAJdTMyICpkaG9zdDQgPSAodTMyICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFswXTsKIAl1MTYgKmRob3N0MiA9ICh1MTYgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzRdOwpAQCAtMjQ5Miw3ICs4ODAsNyBAQAogCWlmIChldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbMF0gJiAweDAxKSB7CiAJCWlmIChvcHRzICYgTUFDX0FMTE1DQVNUKSB7CiAJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOwotCQkJYWRhcHRlci0+c3RhdHMubXVsdGljYXN0Kys7CisJCQluZXRkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIAkJaWYgKG9wdHMgJiBNQUNfTUNBU1QpIHsKQEAgLTI1MDIsNyArODkwLDcgQEAKIAkJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtY2FkZHItPmFkZHJlc3MsCiAJCQkJCQkJZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0KSkgewogCQkJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOwotCQkJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKKwkJCQkJbmV0ZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJfQogCQkJCW1jYWRkciA9IG1jYWRkci0+bmV4dDsKQEAgLTI1OTcsMTcgKzk4NSw2IEBACiAJYWRkX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzbGljX2Fzc2VydF9mYWlsKHZvaWQpCi17Ci0JdTMyIGNwdWlkOwotCXUzMiBjdXJyX3BpZDsKLQljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQljdXJyX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQotCXByaW50ayhLRVJOX0VSUiAiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwKLQkgICAgICAgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7Ci19Ci0KIHN0YXRpYyBpbnQgc2xpY191cHJfcXVldWVfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgIHUzMiB1cHJfcmVxdWVzdCwKIAkJCSAgIHUzMiB1cHJfZGF0YSwKQEAgLTI2MzcsNyArMTAxNCw1NSBAQAogCX0gZWxzZSB7CiAJCWFkYXB0ZXItPnVwcl9saXN0ID0gdXByOwogCX0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX3VwciAqdXByOworCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOworLyoKKyAgICBjaGFyICogcHRyMTsKKyAgICBjaGFyICogcHRyMjsKKyAgICB1aW50IGNtZG9mZnNldDsKKyovCisJdXByID0gYWRhcHRlci0+dXByX2xpc3Q7CisJaWYgKCF1cHIpCisJCXJldHVybjsKKwlpZiAoYWRhcHRlci0+dXByX2J1c3kpCisJCXJldHVybjsKKwlhZGFwdGVyLT51cHJfYnVzeSA9IDE7CisKKwlzd2l0Y2ggKHVwci0+dXByX3JlcXVlc3QpIHsKKwljYXNlIFNMSUNfVVBSX1NUQVRTOgorCQlpZiAodXByLT51cHJfZGF0YV9oID09IDApIHsKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19zdGF0cywgdXByLT51cHJfZGF0YSwKKwkJCQkJIEZMVVNIKTsKKwkJfSBlbHNlIHsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19zdGF0czY0LAorCQkJCQkgdXByLT51cHJfZGF0YSwKKwkJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBTTElDX1VQUl9STFNSOgorCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZzbGljX3JlZ3MtPnNsaWNfcmxzciwgdXByLT51cHJfZGF0YSwKKwkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsCisJCQkJIEZMVVNIKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSUNfVVBSX1JDT05GSUc6CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19yY29uZmlnLAorCQkJCSB1cHItPnVwcl9kYXRhLCAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQlicmVhazsKKwljYXNlIFNMSUNfVVBSX1BJTkc6CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19waW5nLCAxLCBGTFVTSCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc2xpY191cHJfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKQEAgLTI2NDYsMjIgKzEwNzEsOTcgQEAKIAkJICAgICB1MzIgdXByX2RhdGFfaCwKIAkJICAgICB1MzIgdXByX2J1ZmZlciwgdTMyIHVwcl9idWZmZXJfaCkKIHsKLQlpbnQgc3RhdHVzOworCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLCBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0Jc3RhdHVzID0gc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAorCXJjID0gc2xpY191cHJfcXVldWVfcmVxdWVzdChhZGFwdGVyLAogCQkJCQl1cHJfcmVxdWVzdCwKIAkJCQkJdXByX2RhdGEsCiAJCQkJCXVwcl9kYXRhX2gsIHVwcl9idWZmZXIsIHVwcl9idWZmZXJfaCk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAotCQkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCWlmIChyYykKKwkJZ290byBlcnJfdW5sb2NrX2lycTsKKwogCXNsaWNfdXByX3N0YXJ0KGFkYXB0ZXIpOworZXJyX3VubG9ja19pcnE6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+dXByX2xvY2subG9jaywKIAkJCQlhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0JcmV0dXJuIFNUQVRVU19QRU5ESU5HOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcikKK3sKKwl1MzIgbGlua3N0YXR1cyA9IGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1czsKKwl1aW50IGxpbmt1cDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKKwl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7CisKKwlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+bGlua3N0YXR1cyksCisJCQkJICAgICAgIDAsIDApOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCisJCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCisJCQkJICAgICAgICh1MzIpICZwc2htZW0tPmxpbmtzdGF0dXMsCisJCQkJICAgICAgIFNMSUNfR0VUX0FERFJfSElHSChwc2htZW0pLCAwLCAwKTsKKyNlbHNlCisJCVN0b3AgQ29tcGlsYXRpb247CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApCisJCXJldHVybjsKKworCUFTU0VSVCgoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKQorCSAgICAgICB8fCAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSk7CisKKwlsaW5rdXAgPSBsaW5rc3RhdHVzICYgR0lHX0xJTktVUCA/IExJTktfVVAgOiBMSU5LX0RPV047CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkKKwkJbGlua3NwZWVkID0gTElOS18xMDAwTUI7CisJZWxzZSBpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDApCisJCWxpbmtzcGVlZCA9IExJTktfMTAwTUI7CisJZWxzZQorCQlsaW5rc3BlZWQgPSBMSU5LXzEwTUI7CisKKwlpZiAobGlua3N0YXR1cyAmIEdJR19GVUxMRFVQTEVYKQorCQlsaW5rZHVwbGV4ID0gTElOS19GVUxMRDsKKwllbHNlCisJCWxpbmtkdXBsZXggPSBMSU5LX0hBTEZEOworCisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKSAmJiAobGlua3VwID09IExJTktfRE9XTikpCisJCXJldHVybjsKKworCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKKwkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgorCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKKwkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpCisJCXJldHVybjsKKworCS8qIGxpbmsgaGFzIGNoYW5nZWQgYXQgdGhpcyBwb2ludCAqLworCisJLyogbGluayBoYXMgZ29uZSBmcm9tIHVwIHRvIGRvd24gKi8KKwlpZiAobGlua3VwID09IExJTktfRE9XTikgeworCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047CisJCXJldHVybjsKKwl9CisKKwkvKiBsaW5rIGhhcyBnb25lIGZyb20gZG93biB0byB1cCAqLworCWFkYXB0ZXItPmxpbmtzcGVlZCA9IGxpbmtzcGVlZDsKKwlhZGFwdGVyLT5saW5rZHVwbGV4ID0gbGlua2R1cGxleDsKKworCWlmIChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgeworCQkvKiBzZXR1cCB0aGUgbWFjICovCisJCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCB0cnVlKTsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19VUDsKKwkJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpCkBAIC0yNzg2LDEyOCArMTI4NiwxNSBAQAogCQkJCWFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19nZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjb25maWcsCisJCQkJCQkJdTMyIGNvbmZpZ19oKQogewotCXN0cnVjdCBzbGljX3VwciAqdXByOwotCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotLyoKLSAgICBjaGFyICogcHRyMTsKLSAgICBjaGFyICogcHRyMjsKLSAgICB1aW50IGNtZG9mZnNldDsKLSovCi0JdXByID0gYWRhcHRlci0+dXByX2xpc3Q7Ci0JaWYgKCF1cHIpCi0JCXJldHVybjsKLQlpZiAoYWRhcHRlci0+dXByX2J1c3kpCi0JCXJldHVybjsKLQlhZGFwdGVyLT51cHJfYnVzeSA9IDE7CisJaW50IHN0YXR1czsKIAotCXN3aXRjaCAodXByLT51cHJfcmVxdWVzdCkgewotCWNhc2UgU0xJQ19VUFJfU1RBVFM6Ci0JCWlmICh1cHItPnVwcl9kYXRhX2ggPT0gMCkgewotCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLAotCQkJCQkgRkxVU0gpOwotCQl9IGVsc2UgewotCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX3N0YXRzNjQsCi0JCQkJCSB1cHItPnVwcl9kYXRhLAotCQkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCQkgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFNMSUNfVVBSX1JMU1I6Ci0JCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19ybHNyLCB1cHItPnVwcl9kYXRhLAotCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwKLQkJCQkgRkxVU0gpOwotCQlicmVhazsKLQotCWNhc2UgU0xJQ19VUFJfUkNPTkZJRzoKLQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX3Jjb25maWcsCi0JCQkJIHVwci0+dXByX2RhdGEsICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7Ci0JCWJyZWFrOwotCWNhc2UgU0xJQ19VUFJfUElORzoKLQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3BpbmcsIDEsIEZMVVNIKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGlzcikKLXsKLQl1MzIgbGlua3N0YXR1cyA9IGFkYXB0ZXItPnBzaG1lbS0+bGlua3N0YXR1czsKLQl1aW50IGxpbmt1cDsKLQl1bnNpZ25lZCBjaGFyIGxpbmtzcGVlZDsKLQl1bnNpZ25lZCBjaGFyIGxpbmtkdXBsZXg7Ci0KLQlpZiAoKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgewotCQlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOwotCi0JCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCi0JCQkJICAgICAgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAotCQkJCSAgICAgICBTTElDX0dFVF9BRERSX0hJR0goJnBzaG1lbS0+bGlua3N0YXR1cyksCi0JCQkJICAgICAgIDAsIDApOwotI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCQlzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KGFkYXB0ZXIsCi0JCQkJICAgICAgIFNMSUNfVVBSX1JMU1IsCi0JCQkJICAgICAgICh1MzIpICZwc2htZW0tPmxpbmtzdGF0dXMsCi0JCQkJICAgICAgIFNMSUNfR0VUX0FERFJfSElHSChwc2htZW0pLCAwLCAwKTsKLSNlbHNlCi0JCVN0b3AgQ29tcGlsYXRpb247Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApCi0JCXJldHVybjsKLQotCUFTU0VSVCgoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKQotCSAgICAgICB8fCAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18yR0JfREVWSUNFX0lEKSk7Ci0KLQlsaW5rdXAgPSBsaW5rc3RhdHVzICYgR0lHX0xJTktVUCA/IExJTktfVVAgOiBMSU5LX0RPV047Ci0JaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwMCkKLQkJbGlua3NwZWVkID0gTElOS18xMDAwTUI7Ci0JZWxzZSBpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDApCi0JCWxpbmtzcGVlZCA9IExJTktfMTAwTUI7Ci0JZWxzZQotCQlsaW5rc3BlZWQgPSBMSU5LXzEwTUI7Ci0KLQlpZiAobGlua3N0YXR1cyAmIEdJR19GVUxMRFVQTEVYKQotCQlsaW5rZHVwbGV4ID0gTElOS19GVUxMRDsKLQllbHNlCi0JCWxpbmtkdXBsZXggPSBMSU5LX0hBTEZEOwotCi0JaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKSAmJiAobGlua3VwID09IExJTktfRE9XTikpCi0JCXJldHVybjsKLQotCS8qIGxpbmsgdXAgZXZlbnQsIGJ1dCBub3RoaW5nIGhhcyBjaGFuZ2VkICovCi0JaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkgJiYKLQkgICAgKGxpbmt1cCA9PSBMSU5LX1VQKSAmJgotCSAgICAoYWRhcHRlci0+bGlua3NwZWVkID09IGxpbmtzcGVlZCkgJiYKLQkgICAgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gbGlua2R1cGxleCkpCi0JCXJldHVybjsKLQotCS8qIGxpbmsgaGFzIGNoYW5nZWQgYXQgdGhpcyBwb2ludCAqLwotCi0JLyogbGluayBoYXMgZ29uZSBmcm9tIHVwIHRvIGRvd24gKi8KLQlpZiAobGlua3VwID09IExJTktfRE9XTikgewotCQlhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX0RPV047Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBsaW5rIGhhcyBnb25lIGZyb20gZG93biB0byB1cCAqLwotCWFkYXB0ZXItPmxpbmtzcGVlZCA9IGxpbmtzcGVlZDsKLQlhZGFwdGVyLT5saW5rZHVwbGV4ID0gbGlua2R1cGxleDsKLQotCWlmIChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgewotCQkvKiBzZXR1cCB0aGUgbWFjICovCi0JCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCB0cnVlKTsKLQkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19VUDsKLQkJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLQl9CisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgU0xJQ19VUFJfUkNPTkZJRywKKwkJCQkgICh1MzIpIGNvbmZpZywgKHUzMikgY29uZmlnX2gsIDAsIDApOworCUFTU0VSVChzdGF0dXMgPT0gMCk7CiB9CiAKIC8qCkBAIC0zMDEyLDYgKzEzOTksMjQgQEAKIAlyZXR1cm4gKHVzaG9ydCkgc3VtOwogfQogCitzdGF0aWMgdm9pZCBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKKwkJaWYgKHJzcHEtPnZhZGRyW2ldKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgUEFHRV9TSVpFLAorCQkJCQkgICAgcnNwcS0+dmFkZHJbaV0sIHJzcHEtPnBhZGRyW2ldKTsKKwkJfQorCQlyc3BxLT52YWRkcltpXSA9IE5VTEw7CisJCXJzcHEtPnBhZGRyW2ldID0gMDsKKwl9CisJcnNwcS0+b2Zmc2V0ID0gMDsKKwlyc3BxLT5wYWdlaW5kZXggPSAwOworCXJzcHEtPnJzcGJ1ZiA9IE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwpAQCAtMzAzMiw3ICsxNDM3LDcgQEAKIAkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAogCQkJCSJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWRcbiIpOwogCQkJc2xpY19yc3BxdWV1ZV9mcmVlKGFkYXB0ZXIpOwotCQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KICNpZm5kZWYgQ09ORklHX1g4Nl82NAogCQlBU1NFUlQoKCh1MzIpIHJzcHEtPnZhZGRyW2ldICYgMHhGRkZGRjAwMCkgPT0KQEAgLTMwNTYsMjUgKzE0NjEsNyBAQAogCXJzcHEtPm9mZnNldCA9IDA7CiAJcnNwcS0+cGFnZWluZGV4ID0gMDsKIAlyc3BxLT5yc3BidWYgPSAoc3RydWN0IHNsaWNfcnNwYnVmICopcnNwcS0+dmFkZHJbMF07Ci0JcmV0dXJuIFNUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgdm9pZCBzbGljX3JzcHF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcnNwcS0+bnVtX3BhZ2VzOyBpKyspIHsKLQkJaWYgKHJzcHEtPnZhZGRyW2ldKSB7Ci0JCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgUEFHRV9TSVpFLAotCQkJCQkgICAgcnNwcS0+dmFkZHJbaV0sIHJzcHEtPnBhZGRyW2ldKTsKLQkJfQotCQlyc3BxLT52YWRkcltpXSA9IE5VTEw7Ci0JCXJzcHEtPnBhZGRyW2ldID0gMDsKLQl9Ci0JcnNwcS0+b2Zmc2V0ID0gMDsKLQlyc3BxLT5wYWdlaW5kZXggPSAwOwotCXJzcHEtPnJzcGJ1ZiA9IE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKQEAgLTMxNTksMzYgKzE1NDYsNiBAQAogCXJldHVybiBwYWdlYWRkcjsKIH0KIAotc3RhdGljIGludCBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaTsKLQl1MzIgKnBhZ2VhZGRyOwotCi0JQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwotCW1lbXNldCgmYWRhcHRlci0+Y21kcV9hbGwsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOwotCW1lbXNldCgmYWRhcHRlci0+Y21kcV9mcmVlLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKLQltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZG9uZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZHFfYWxsLmxvY2subG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrKTsKLQlzbGljX2NtZHFtZW1faW5pdChhZGFwdGVyKTsKLQlhZGFwdGVyLT5zbGljX2hhbmRsZV9peCA9IDE7Ci0JZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9JTklUUEFHRVM7IGkrKykgewotCQlwYWdlYWRkciA9IHNsaWNfY21kcW1lbV9hZGRwYWdlKGFkYXB0ZXIpOwotI2lmbmRlZiBDT05GSUdfWDg2XzY0Ci0JCUFTU0VSVCgoKHUzMikgcGFnZWFkZHIgJiAweEZGRkZGMDAwKSA9PSAodTMyKSBwYWdlYWRkcik7Ci0jZW5kaWYKLQkJaWYgKCFwYWdlYWRkcikgewotCQkJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7Ci0JCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JCX0KLQkJc2xpY19jbWRxX2FkZGNtZHBhZ2UoYWRhcHRlciwgcGFnZWFkZHIpOwotCX0KLQlhZGFwdGVyLT5zbGljX2hhbmRsZV9peCA9IDE7Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KIHN0YXRpYyB2b2lkIHNsaWNfY21kcV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZDsKQEAgLTMyMTIsNTMgKzE1NjksNiBAQAogCXNsaWNfY21kcW1lbV9mcmVlKGFkYXB0ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUzMiBvdXRzdGFuZGluZzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAotCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLAotCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOwotCW91dHN0YW5kaW5nID0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQgLSBhZGFwdGVyLT5jbWRxX2RvbmUuY291bnQ7Ci0Jb3V0c3RhbmRpbmcgLT0gYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50OwotCWhjbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOwotCXdoaWxlIChoY21kKSB7Ci0JCWlmIChoY21kLT5idXN5KSB7Ci0JCQlza2IgPSBoY21kLT5za2I7Ci0JCQlBU1NFUlQoc2tiKTsKLQkJCWhjbWQtPmJ1c3kgPSAwOwotCQkJaGNtZC0+c2tiID0gTlVMTDsKLQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JCX0KLQkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOwotCX0KLQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgPSAwOwotCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gTlVMTDsKLQlhZGFwdGVyLT5jbWRxX2ZyZWUudGFpbCA9IE5VTEw7Ci0JYWRhcHRlci0+Y21kcV9kb25lLmNvdW50ID0gMDsKLQlhZGFwdGVyLT5jbWRxX2RvbmUuaGVhZCA9IE5VTEw7Ci0JYWRhcHRlci0+Y21kcV9kb25lLnRhaWwgPSBOVUxMOwotCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKLQloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKLQl3aGlsZSAoaGNtZCkgewotCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQrKzsKLQkJaGNtZC0+bmV4dCA9IGhjbWQtPm5leHRfYWxsOwotCQloY21kID0gaGNtZC0+bmV4dF9hbGw7Ci0JfQotCWlmIChhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgIT0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQpIHsKLQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCi0JCQkiZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsCi0JCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKLQkJCQlhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5mbGFncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKLQkJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpCiB7CiAJc3RydWN0IHNsaWNfaG9zdGNtZCAqY21kOwpAQCAtMzMyNCw2ICsxNjM0LDk5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kcS0+bG9jay5sb2NrLCBjbWRxLT5sb2NrLmZsYWdzKTsKIH0KIAorc3RhdGljIGludCBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwl1MzIgKnBhZ2VhZGRyOworCisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCW1lbXNldCgmYWRhcHRlci0+Y21kcV9hbGwsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOworCW1lbXNldCgmYWRhcHRlci0+Y21kcV9mcmVlLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKKwltZW1zZXQoJmFkYXB0ZXItPmNtZHFfZG9uZSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2NtZHF1ZXVlKSk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZHFfYWxsLmxvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrKTsKKwlzbGljX2NtZHFtZW1faW5pdChhZGFwdGVyKTsKKwlhZGFwdGVyLT5zbGljX2hhbmRsZV9peCA9IDE7CisJZm9yIChpID0gMDsgaSA8IFNMSUNfQ01EUV9JTklUUEFHRVM7IGkrKykgeworCQlwYWdlYWRkciA9IHNsaWNfY21kcW1lbV9hZGRwYWdlKGFkYXB0ZXIpOworI2lmbmRlZiBDT05GSUdfWDg2XzY0CisJCUFTU0VSVCgoKHUzMikgcGFnZWFkZHIgJiAweEZGRkZGMDAwKSA9PSAodTMyKSBwYWdlYWRkcik7CisjZW5kaWYKKwkJaWYgKCFwYWdlYWRkcikgeworCQkJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzbGljX2NtZHFfYWRkY21kcGFnZShhZGFwdGVyLCBwYWdlYWRkcik7CisJfQorCWFkYXB0ZXItPnNsaWNfaGFuZGxlX2l4ID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBvdXRzdGFuZGluZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAorCQkJYWRhcHRlci0+Y21kcV9mcmVlLmxvY2suZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLAorCQkJYWRhcHRlci0+Y21kcV9kb25lLmxvY2suZmxhZ3MpOworCW91dHN0YW5kaW5nID0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQgLSBhZGFwdGVyLT5jbWRxX2RvbmUuY291bnQ7CisJb3V0c3RhbmRpbmcgLT0gYWRhcHRlci0+Y21kcV9mcmVlLmNvdW50OworCWhjbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOworCXdoaWxlIChoY21kKSB7CisJCWlmIChoY21kLT5idXN5KSB7CisJCQlza2IgPSBoY21kLT5za2I7CisJCQlBU1NFUlQoc2tiKTsKKwkJCWhjbWQtPmJ1c3kgPSAwOworCQkJaGNtZC0+c2tiID0gTlVMTDsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCX0KKwkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOworCX0KKwlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgPSAwOworCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gTlVMTDsKKwlhZGFwdGVyLT5jbWRxX2ZyZWUudGFpbCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9kb25lLmNvdW50ID0gMDsKKwlhZGFwdGVyLT5jbWRxX2RvbmUuaGVhZCA9IE5VTEw7CisJYWRhcHRlci0+Y21kcV9kb25lLnRhaWwgPSBOVUxMOworCWFkYXB0ZXItPmNtZHFfZnJlZS5oZWFkID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwloY21kID0gYWRhcHRlci0+Y21kcV9hbGwuaGVhZDsKKwl3aGlsZSAoaGNtZCkgeworCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQrKzsKKwkJaGNtZC0+bmV4dCA9IGhjbWQtPm5leHRfYWxsOworCQloY21kID0gaGNtZC0+bmV4dF9hbGw7CisJfQorCWlmIChhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgIT0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiZnJlZV9jb3VudCAlZCAhPSBhbGwgY291bnQgJWRcbiIsCisJCQlhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQsIGFkYXB0ZXItPmNtZHFfYWxsLmNvdW50KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9kb25lLmxvY2subG9jaywKKwkJCQlhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kcV9mcmVlLmxvY2subG9jaywKKwkJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY21kcV9nZXRkb25lKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpkb25lX2NtZHEgPSAmYWRhcHRlci0+Y21kcV9kb25lOworCXN0cnVjdCBzbGljX2NtZHF1ZXVlICpmcmVlX2NtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOworCisJQVNTRVJUKGZyZWVfY21kcS0+aGVhZCA9PSBOVUxMKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZG9uZV9jbWRxLT5sb2NrLmxvY2ssIGRvbmVfY21kcS0+bG9jay5mbGFncyk7CisKKwlmcmVlX2NtZHEtPmhlYWQgPSBkb25lX2NtZHEtPmhlYWQ7CisJZnJlZV9jbWRxLT5jb3VudCA9IGRvbmVfY21kcS0+Y291bnQ7CisJZG9uZV9jbWRxLT5oZWFkID0gTlVMTDsKKwlkb25lX2NtZHEtPnRhaWwgPSBOVUxMOworCWRvbmVfY21kcS0+Y291bnQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbmVfY21kcS0+bG9jay5sb2NrLCBkb25lX2NtZHEtPmxvY2suZmxhZ3MpOworfQorCiBzdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHNsaWNfY21kcXVldWUgKmNtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOwpAQCAtMzM1NywyMiArMTc2MCw2IEBACiAJcmV0dXJuIGNtZDsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0Jc3RydWN0IHNsaWNfY21kcXVldWUgKmRvbmVfY21kcSA9ICZhZGFwdGVyLT5jbWRxX2RvbmU7Ci0Jc3RydWN0IHNsaWNfY21kcXVldWUgKmZyZWVfY21kcSA9ICZhZGFwdGVyLT5jbWRxX2ZyZWU7Ci0KLQlBU1NFUlQoZnJlZV9jbWRxLT5oZWFkID09IE5VTEwpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZkb25lX2NtZHEtPmxvY2subG9jaywgZG9uZV9jbWRxLT5sb2NrLmZsYWdzKTsKLQotCWZyZWVfY21kcS0+aGVhZCA9IGRvbmVfY21kcS0+aGVhZDsKLQlmcmVlX2NtZHEtPmNvdW50ID0gZG9uZV9jbWRxLT5jb3VudDsKLQlkb25lX2NtZHEtPmhlYWQgPSBOVUxMOwotCWRvbmVfY21kcS0+dGFpbCA9IE5VTEw7Ci0JZG9uZV9jbWRxLT5jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9uZV9jbWRxLT5sb2NrLmxvY2ssIGRvbmVfY21kcS0+bG9jay5mbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNsaWNfY21kcV9wdXRkb25lX2lycShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpCiB7CkBAIC0zMzg4LDc5ICsxNzc1LDYgQEAKIAlzcGluX3VubG9jaygmY21kcS0+bG9jay5sb2NrKTsKIH0KIAotc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGksIGNvdW50OwotCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwotCi0JQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwotCXJjdnEtPnRhaWwgPSBOVUxMOwotCXJjdnEtPmhlYWQgPSBOVUxMOwotCXJjdnEtPnNpemUgPSBTTElDX1JDVlFfRU5UUklFUzsKLQlyY3ZxLT5lcnJvcnMgPSAwOwotCXJjdnEtPmNvdW50ID0gMDsKLQlpID0gKFNMSUNfUkNWUV9FTlRSSUVTIC8gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKTsKLQljb3VudCA9IDA7Ci0Jd2hpbGUgKGkpIHsKLQkJY291bnQgKz0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOwotCQlpLS07Ci0JfQotCWlmIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9NSU5FTlRSSUVTKSB7Ci0JCXNsaWNfcmN2cXVldWVfZnJlZShhZGFwdGVyKTsKLQkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOwotCX0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyB2b2lkIHNsaWNfcmN2cXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jd2hpbGUgKHJjdnEtPmhlYWQpIHsKLQkJc2tiID0gcmN2cS0+aGVhZDsKLQkJcmN2cS0+aGVhZCA9IHJjdnEtPmhlYWQtPm5leHQ7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQl9Ci0JcmN2cS0+dGFpbCA9IE5VTEw7Ci0JcmN2cS0+aGVhZCA9IE5VTEw7Ci0JcmN2cS0+Y291bnQgPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOwotCWludCBjb3VudDsKLQotCWlmIChyY3ZxLT5jb3VudCkgewotCQlza2IgPSByY3ZxLT5oZWFkOwotCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOwotCQlBU1NFUlQocmN2YnVmKTsKLQotCQlpZiAocmN2YnVmLT5zdGF0dXMgJiBJUkhERFJfU1ZBTElEKSB7Ci0JCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKLQkJCXNrYi0+bmV4dCA9IE5VTEw7Ci0JCQlyY3ZxLT5jb3VudC0tOwotCQl9IGVsc2UgewotCQkJc2tiID0gTlVMTDsKLQkJfQotCX0gZWxzZSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAotCQkJIlJjdlEgRW1wdHkhISByY3ZxWyVwXSBjb3VudFsleF1cbiIsIHJjdnEsIHJjdnEtPmNvdW50KTsKLQkJc2tiID0gTlVMTDsKLQl9Ci0Jd2hpbGUgKHJjdnEtPmNvdW50IDwgU0xJQ19SQ1ZRX0ZJTExUSFJFU0gpIHsKLQkJY291bnQgPSBzbGljX3JjdnF1ZXVlX2ZpbGwoYWRhcHRlcik7Ci0JCWlmICghY291bnQpCi0JCQlicmVhazsKLQl9Ci0JaWYgKHNrYikKLQkJcmN2cS0+ZXJyb3JzID0gMDsKLQlyZXR1cm4gc2tiOwotfQotCiBzdGF0aWMgaW50IHNsaWNfcmN2cXVldWVfZmlsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAl2b2lkICpwYWRkcjsKQEAgLTM1NDgsNiArMTg2Miw3OSBAQAogCXJldHVybiBpOwogfQogCitzdGF0aWMgdm9pZCBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXdoaWxlIChyY3ZxLT5oZWFkKSB7CisJCXNrYiA9IHJjdnEtPmhlYWQ7CisJCXJjdnEtPmhlYWQgPSByY3ZxLT5oZWFkLT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorCXJjdnEtPnRhaWwgPSBOVUxMOworCXJjdnEtPmhlYWQgPSBOVUxMOworCXJjdnEtPmNvdW50ID0gMDsKK30KKworc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGNvdW50OworCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOworCisJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOworCXJjdnEtPnRhaWwgPSBOVUxMOworCXJjdnEtPmhlYWQgPSBOVUxMOworCXJjdnEtPnNpemUgPSBTTElDX1JDVlFfRU5UUklFUzsKKwlyY3ZxLT5lcnJvcnMgPSAwOworCXJjdnEtPmNvdW50ID0gMDsKKwlpID0gKFNMSUNfUkNWUV9FTlRSSUVTIC8gU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKTsKKwljb3VudCA9IDA7CisJd2hpbGUgKGkpIHsKKwkJY291bnQgKz0gc2xpY19yY3ZxdWV1ZV9maWxsKGFkYXB0ZXIpOworCQlpLS07CisJfQorCWlmIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9NSU5FTlRSSUVTKSB7CisJCXNsaWNfcmN2cXVldWVfZnJlZShhZGFwdGVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9ICZhZGFwdGVyLT5yY3ZxdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOworCWludCBjb3VudDsKKworCWlmIChyY3ZxLT5jb3VudCkgeworCQlza2IgPSByY3ZxLT5oZWFkOworCQlyY3ZidWYgPSAoc3RydWN0IHNsaWNfcmN2YnVmICopc2tiLT5oZWFkOworCQlBU1NFUlQocmN2YnVmKTsKKworCQlpZiAocmN2YnVmLT5zdGF0dXMgJiBJUkhERFJfU1ZBTElEKSB7CisJCQlyY3ZxLT5oZWFkID0gcmN2cS0+aGVhZC0+bmV4dDsKKwkJCXNrYi0+bmV4dCA9IE5VTEw7CisJCQlyY3ZxLT5jb3VudC0tOworCQl9IGVsc2UgeworCQkJc2tiID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJIlJjdlEgRW1wdHkhISByY3ZxWyVwXSBjb3VudFsleF1cbiIsIHJjdnEsIHJjdnEtPmNvdW50KTsKKwkJc2tiID0gTlVMTDsKKwl9CisJd2hpbGUgKHJjdnEtPmNvdW50IDwgU0xJQ19SQ1ZRX0ZJTExUSFJFU0gpIHsKKwkJY291bnQgPSBzbGljX3JjdnF1ZXVlX2ZpbGwoYWRhcHRlcik7CisJCWlmICghY291bnQpCisJCQlicmVhazsKKwl9CisJaWYgKHNrYikKKwkJcmN2cS0+ZXJyb3JzID0gMDsKKwlyZXR1cm4gc2tiOworfQorCiBzdGF0aWMgdTMyIHNsaWNfcmN2cXVldWVfcmVpbnNlcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CkBAIC0zODEzLDExICsyMjAwLDEwIEBACiBzdGF0aWMgaW50IHNsaWNfZGVidWdfYWRhcHRlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gc2VxLT5wcml2YXRlOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKLQlpZiAoKGFkYXB0ZXItPm5ldGRldikgJiYgKGFkYXB0ZXItPm5ldGRldi0+bmFtZSkpIHsKLQkJc2VxX3ByaW50ZihzZXEsICJpbmZvOiBpbnRlcmZhY2UgICAgICAgICAgOiAlc1xuIiwKKwlzZXFfcHJpbnRmKHNlcSwgImluZm86IGludGVyZmFjZSAgICAgICAgICA6ICVzXG4iLAogCQkJICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0JfQogCXNlcV9wcmludGYoc2VxLCAiaW5mbzogc3RhdHVzICAgICAgICAgICAgIDogJXNcbiIsCiAJCVNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSkpOwogCXNlcV9wcmludGYoc2VxLCAiaW5mbzogcG9ydCAgICAgICAgICAgICAgIDogJWRcbiIsCkBAIC0zODM1LDkgKzIyMjEsOSBAQAogCXNlcV9wcmludGYoc2VxLCAiaW5mbzogUmN2USBjdXJyZW50ICAgICAgIDogJTQuNFhcbiIsCiAJCSAgICBhZGFwdGVyLT5yY3ZxdWV1ZS5jb3VudCk7CiAJc2VxX3ByaW50ZihzZXEsICJyeCBzdGF0czogcGFja2V0cyAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAotCQkgICAgYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cyk7CisJCSAgICBuZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMpOwogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGJ5dGVzICAgICAgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJICAgIGFkYXB0ZXItPnN0YXRzLnJ4X2J5dGVzKTsKKwkJICAgIG5ldGRldi0+c3RhdHMucnhfYnl0ZXMpOwogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGJyb2FkY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAogCQkgICAgYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMpOwogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IG11bHRpY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhYXG4iLApAQCAtMzg1MSwxMyArMjIzNywxMyBAQAogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IGRyb3BzICAgICAgICAgICAgICAgICAgICA6ICU4LjhYXG4iLAogCQkJKHUzMikgYWRhcHRlci0+cmN2X2Ryb3BzKTsKIAlzZXFfcHJpbnRmKHNlcSwgInR4IHN0YXRzOiBwYWNrZXRzICAgICAgICAgICAgICAgICAgOiAlOC44bFhcbiIsCi0JCQlhZGFwdGVyLT5zdGF0cy50eF9wYWNrZXRzKTsKKwkJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cyk7CiAJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogYnl0ZXMgICAgICAgICAgICAgICAgICAgIDogJTguOGxYXG4iLAotCQkJYWRhcHRlci0+c3RhdHMudHhfYnl0ZXMpOworCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyk7CiAJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogZXJyb3JzICAgICAgICAgICAgICAgICAgIDogJTguOFhcbiIsCiAJCQkodTMyKSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnMpOwogCXNlcV9wcmludGYoc2VxLCAicnggc3RhdHM6IG11bHRpY2FzdHMgICAgICAgICAgICAgICA6ICU4LjhsWFxuIiwKLQkJCWFkYXB0ZXItPnN0YXRzLm11bHRpY2FzdCk7CisJCQluZXRkZXYtPnN0YXRzLm11bHRpY2FzdCk7CiAJc2VxX3ByaW50ZihzZXEsICJ0eCBzdGF0czogY29sbGlzaW9uIGVycm9ycyAgICAgICAgIDogJTguOFhcbiIsCiAJCQkodTMyKSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9ucyk7CiAJc2VxX3ByaW50ZihzZXEsICJwZXJmOiBNYXggcmN2IGZyYW1lcy9pc3IgICAgICAgICAgIDogJTguOFhcbiIsCkBAIC00MDM5LDkgKzI0MjUsMTU1NSBAQAogCX0KIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqICAgTU9EVUxFIElOSVRJQVRJT04gLyBURVJNSU5BVElPTiBGVU5DVElPTlMgICAqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHNsaWNfbGlua19ldmVudF9oYW5kbGVyIC0KKyAqCisgKiBJbml0aWF0ZSBhIGxpbmsgY29uZmlndXJhdGlvbiBzZXF1ZW5jZS4gIFRoZSBsaW5rIGNvbmZpZ3VyYXRpb24gYmVnaW5zCisgKiBieSBpc3N1aW5nIGEgUkVBRF9MSU5LX1NUQVRVUyBjb21tYW5kIHRvIHRoZSBVdGlsaXR5IFByb2Nlc3NvciBvbiB0aGUKKyAqIFNMSUMuICBTaW5jZSB0aGUgY29tbWFuZCBmaW5pc2hlcyBhc3luY2hyb25vdXNseSwgdGhlIHNsaWNfdXByX2NvbWxldGUKKyAqIHJvdXRpbmUgd2lsbCBmb2xsb3cgaXQgdXAgd2l0aGEgVVAgY29uZmlndXJhdGlvbiB3cml0ZSBjb21tYW5kLCB3aGljaAorICogd2lsbCBhbHNvIGNvbXBsZXRlIGFzeW5jaHJvbm91c2x5LgorICoKKyAqLworc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB7CisJCS8qIEFkYXB0ZXIgaXMgbm90IG9wZXJhdGlvbmFsLiAgSWdub3JlLiAgKi8KKwkJcmV0dXJuOworCX0KKworCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAorCQkJCSAgU0xJQ19VUFJfUkxTUiwKKwkJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmxpbmtzdGF0dXMpLAorCQkJCSAgMCwgMCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9STFNSLAorCQkodTMyKSAmcHNobWVtLT5saW5rc3RhdHVzLAkvKiBubyA0R0Igd3JhcCBndWFyYW50ZWVkICovCisJCQkJICAwLCAwLCAwKTsKKyNlbHNlCisJU3RvcCBjb21waWxhdGlvbjsKKyNlbmRpZgorCUFTU0VSVChzdGF0dXMgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9jbGVhbnVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDA7CisJCWZyZWVfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLCBhZGFwdGVyLT5uZXRkZXYpOworCisJfQorCWlmIChhZGFwdGVyLT5wc2htZW0pIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSksCisJCQkJICAgIGFkYXB0ZXItPnBzaG1lbSwgYWRhcHRlci0+cGh5c19zaG1lbSk7CisJCWFkYXB0ZXItPnBzaG1lbSA9IE5VTEw7CisJCWFkYXB0ZXItPnBoeXNfc2htZW0gPSAoZG1hX2FkZHJfdCkgTlVMTDsKKwl9CisKKwlpZiAoYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7CisJCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDA7CisJCWRlbF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKKwl9CisKKwlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CisJc2xpY19jbWRxX2ZyZWUoYWRhcHRlcik7CisJc2xpY19yY3ZxdWV1ZV9mcmVlKGFkYXB0ZXIpOworfQorCisvKgorICogIEFsbG9jYXRlIGEgbWNhc3RfYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MuCisgKiAgTGluayBpdCBpbi4KKyAqLworc3RhdGljIGludCBzbGljX21jYXN0X2FkZF9saXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQoreworCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBhbHJlYWR5IGV4aXN0cyAqLworCW1saXN0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwl3aGlsZSAobWxpc3QpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWxpc3QtPmFkZHJlc3MsIGFkZHJlc3MpKQorCQkJcmV0dXJuIDA7CisJCW1saXN0ID0gbWxpc3QtPm5leHQ7CisJfQorCisJLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLworCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtY2FzdF9hZGRyZXNzKSwgR0ZQX0FUT01JQyk7CisJaWYgKG1jYWRkciA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShtY2FkZHItPmFkZHJlc3MsIGFkZHJlc3MsIDYpOworCisJbWNhZGRyLT5uZXh0ID0gYWRhcHRlci0+bWNhc3RhZGRyczsKKwlhZGFwdGVyLT5tY2FzdGFkZHJzID0gbWNhZGRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IDA7CisJY2hhciAqYWRkcmVzc2VzOworCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisKKwlBU1NFUlQoYWRhcHRlcik7CisKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7CisJCWFkZHJlc3NlcyA9IChjaGFyICopICZoYS0+YWRkcjsKKwkJc3RhdHVzID0gc2xpY19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwkJc2xpY19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7CisJfQorCisJaWYgKGFkYXB0ZXItPmRldmZsYWdzX3ByZXYgIT0gZGV2LT5mbGFncykgeworCQlhZGFwdGVyLT5tYWNvcHRzID0gTUFDX0RJUkVDVEVEOworCQlpZiAoZGV2LT5mbGFncykgeworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQUxMTUNBU1Q7CisJCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCisJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCX0KKwkJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7CisJCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCB0cnVlKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdHVzID09IDApCisJCQlzbGljX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOworCX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgIFhNSVRfRkFJTF9MSU5LX1NUQVRFICAgICAgICAgICAgICAgMQorI2RlZmluZSAgWE1JVF9GQUlMX1pFUk9fTEVOR1RIICAgICAgICAgICAgICAyCisjZGVmaW5lICBYTUlUX0ZBSUxfSE9TVENNRF9GQUlMICAgICAgICAgICAgIDMKKworc3RhdGljIHZvaWQgc2xpY194bWl0X2J1aWxkX3JlcXVlc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIHN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNsaWNfaG9zdDY0X2NtZCAqaWhjbWQ7CisJdWxvbmcgcGh5c19hZGRyOworCisJaWhjbWQgPSAmaGNtZC0+Y21kNjQ7CisKKwlpaGNtZC0+ZmxhZ3MgPSAoYWRhcHRlci0+cG9ydCA8PCBJSEZMR19JRlNIRlQpOworCWloY21kLT5jb21tYW5kID0gSUhDTURfWE1UX1JFUTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMudG90bGVuID0gc2tiLT5sZW47CisJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJUENJX0RNQV9UT0RFVklDRSk7CisJaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMF0ucGFkZHJsID0gU0xJQ19HRVRfQUREUl9MT1cocGh5c19hZGRyKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5wYWRkcmggPSBTTElDX0dFVF9BRERSX0hJR0gocGh5c19hZGRyKTsKKwlpaGNtZC0+dS5zbGljX2J1ZmZlcnMuYnVmc1swXS5sZW5ndGggPSBza2ItPmxlbjsKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCisJaGNtZC0+Y21kc2l6ZSA9ICh1MzIpICgoKCh1NjQpJmloY21kLT51LnNsaWNfYnVmZmVycy5idWZzWzFdIC0KKwkJCQkgICAgICh1NjQpIGhjbWQpICsgMzEpID4+IDUpOworI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQorCWhjbWQtPmNtZHNpemUgPSAoKCgodTMyKSAmaWhjbWQtPnUuc2xpY19idWZmZXJzLmJ1ZnNbMV0gLQorCQkJICAgKHUzMikgaGNtZCkgKyAzMSkgPj4gNSk7CisjZWxzZQorCVN0b3AgQ29tcGlsYXRpb247CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cykKK3sKKwlpZiAoYWRhcHRlci0+eG1pdHFfZnVsbCkKKwkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCWlmICgoY21kID09IE5VTEwpICYmIChzdGF0dXMgPD0gWE1JVF9GQUlMX0hPU1RDTURfRkFJTCkpIHsKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBYTUlUX0ZBSUxfTElOS19TVEFURToKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJyZWplY3QgeG1pdCBza2JbJXA6ICV4XSBsaW5rc3RhdGVbJXNdICIKKwkJCQkiYWRhcHRlclslczolZF0gY2FyZFslczolZF1cbiIsCisJCQkJc2tiLCBza2ItPnBrdF90eXBlLAorCQkJCVNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCisJCQkJU0xJQ19BREFQVEVSX1NUQVRFKGFkYXB0ZXItPnN0YXRlKSwKKwkJCQlhZGFwdGVyLT5zdGF0ZSwKKwkJCQlTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAorCQkJCWFkYXB0ZXItPmNhcmQtPnN0YXRlKTsKKwkJCWJyZWFrOworCQljYXNlIFhNSVRfRkFJTF9aRVJPX0xFTkdUSDoKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJ4bWl0X3N0YXJ0IHNrYi0+bGVuID09IDAgc2tiWyVwXSB0eXBlWyV4XVxuIiwKKwkJCQlza2IsIHNrYi0+cGt0X3R5cGUpOworCQkJYnJlYWs7CisJCWNhc2UgWE1JVF9GQUlMX0hPU1RDTURfRkFJTDoKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJ4bWl0X3N0YXJ0IHNrYlslcF0gdHlwZVsleF0gTm8gaG9zdCBjb21tYW5kcyAiCisJCQkJImF2YWlsYWJsZVxuIiwgc2tiLCBza2ItPnBrdF90eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQVNTRVJUKDApOworCQl9CisJfQorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhZGFwdGVyLT5uZXRkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKK30KKworc3RhdGljIHZvaWQgc2xpY19yY3ZfaGFuZGxlX2Vycm9yKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAorCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZikKK3sKKwlzdHJ1Y3Qgc2xpY19oZGRyX3dkcyAqaGRyID0gKHN0cnVjdCBzbGljX2hkZHJfd2RzICopcmN2YnVmLT5kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAoYWRhcHRlci0+ZGV2aWQgIT0gU0xJQ18xR0JfREVWSUNFX0lEKSB7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1czE0ICYgVlJIU1RBVF84MDJPRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXMxNCAmIFZSSFNUQVRfVFBPRkxPKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfODAyVUUpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX1JDVkUpIHsKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5yY3ZlYXJseSsrOworCQkJbmV0ZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9CVUZGKSB7CisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQnVmb3YrKzsKKwkJCW5ldGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfQ0FSUkUpIHsKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DYXJyZSsrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9MT05HRSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Mb25nZSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfUFJFQSkKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JbnZwKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9DUkMpIHsKKwkJCWFkYXB0ZXItPmlmX2V2ZW50cy5DcmMrKzsKKwkJCW5ldGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQl9CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9EUkJMKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzX2IxNCAmIFZSSFNUQVRCX0NPREUpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ29kZSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfVFBITEVOKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwSGxlbisrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBDU1VNKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNfYjE0ICYgVlJIU1RBVEJfSVBMRVJSKQorCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCWlmIChoZHItPmZyYW1lX3N0YXR1c19iMTQgJiBWUkhTVEFUQl9JUEhFUlIpCisJCQlhZGFwdGVyLT5pZl9ldmVudHMuSXBIbGVuKys7CisJfSBlbHNlIHsKKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX1hQRVJSKSB7CisJCQl1MzIgeGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgPj4gVkdCU1RBVF9YRVJSU0hGVDsKKworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwQ3N1bSsrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLlRwcnRvZmxvdysrOworCQkJaWYgKHhlcnIgPT0gVkdCU1RBVF9YSExFTikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuVHBIbGVuKys7CisJCX0KKwkJaWYgKGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX05FVEVSUikgeworCQkJdTMyIG5lcnIgPQorCQkJICAgIChoZHItPgorCQkJICAgICBmcmFtZV9zdGF0dXNHQiA+PiBWR0JTVEFUX05FUlJTSEZUKSAmCisJCQkgICAgVkdCU1RBVF9ORVJSTVNLOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OQ1NFUlIpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwQ3N1bSsrOworCQkJaWYgKG5lcnIgPT0gVkdCU1RBVF9OVUZMT1cpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLklwTGVuKys7CisJCQlpZiAobmVyciA9PSBWR0JTVEFUX05ITEVOKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5JcEhsZW4rKzsKKwkJfQorCQlpZiAoaGRyLT5mcmFtZV9zdGF0dXNHQiAmIFZHQlNUQVRfTE5LRVJSKSB7CisJCQl1MzIgbGVyciA9IGhkci0+ZnJhbWVfc3RhdHVzR0IgJiBWR0JTVEFUX0xFUlJNU0s7CisKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTERFQVJMWSkKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMucmN2ZWFybHkrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTEJPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5CdWZvdisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MQ09ERVJSKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5Db2RlKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xEQkxOQkwpCisJCQkJYWRhcHRlci0+aWZfZXZlbnRzLkRyYmwrKzsKKwkJCWlmIChsZXJyID09IFZHQlNUQVRfTENSQ0VSUikKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMuQ3JjKys7CisJCQlpZiAobGVyciA9PSBWR0JTVEFUX0xPRkxPKQorCQkJCWFkYXB0ZXItPmlmX2V2ZW50cy5vZmxvdzgwMisrOworCQkJaWYgKGxlcnIgPT0gVkdCU1RBVF9MVUZMTykKKwkJCQlhZGFwdGVyLT5pZl9ldmVudHMudWZsb3c4MDIrKzsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgVENQX09GRkxPQURfRlJBTUVfUFVTSEZMQUcgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTV9GQVNUX1BBVEggICAgICAgICAgICAgICAgIDB4MDA0MAorCitzdGF0aWMgdm9pZCBzbGljX3Jjdl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2xpY19yY3ZidWYgKnJjdmJ1ZjsKKwl1MzIgZnJhbWVzID0gMDsKKworCXdoaWxlICgoc2tiID0gc2xpY19yY3ZxdWV1ZV9nZXRuZXh0KGFkYXB0ZXIpKSkgeworCQl1MzIgcnhfYnl0ZXM7CisKKwkJQVNTRVJUKHNrYi0+aGVhZCk7CisJCXJjdmJ1ZiA9IChzdHJ1Y3Qgc2xpY19yY3ZidWYgKilza2ItPmhlYWQ7CisJCWFkYXB0ZXItPmNhcmQtPmV2ZW50cysrOworCQlpZiAocmN2YnVmLT5zdGF0dXMgJiBJUkhERFJfRVJSKSB7CisJCQlhZGFwdGVyLT5yeF9lcnJvcnMrKzsKKwkJCXNsaWNfcmN2X2hhbmRsZV9lcnJvcihhZGFwdGVyLCByY3ZidWYpOworCQkJc2xpY19yY3ZxdWV1ZV9yZWluc2VydChhZGFwdGVyLCBza2IpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXNsaWNfbWFjX2ZpbHRlcihhZGFwdGVyLCAoc3RydWN0IGV0aGVyX2hlYWRlciAqKQorCQkJCQlyY3ZidWYtPmRhdGEpKSB7CisJCQlzbGljX3JjdnF1ZXVlX3JlaW5zZXJ0KGFkYXB0ZXIsIHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCQlza2JfcHVsbChza2IsIFNMSUNfUkNWQlVGX0hFQURTSVpFKTsKKwkJcnhfYnl0ZXMgPSAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOworCQlza2JfcHV0KHNrYiwgcnhfYnl0ZXMpOworCQluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByeF9ieXRlczsKKyNpZiBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0KKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKyNlbmRpZgorCisJCXNrYi0+ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7CisJCW5ldGlmX3J4KHNrYik7CisKKwkJKytmcmFtZXM7CisjaWYgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAorCQlpZiAoZnJhbWVzID49IFNMSUNfUkNWUV9NQVhfUFJPQ0VTU19JU1IpIHsKKwkJCWFkYXB0ZXItPnJjdl9pbnRlcnJ1cHRfeWllbGRzKys7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJfQorCWFkYXB0ZXItPm1heF9pc3JfcmN2cyA9IG1heChhZGFwdGVyLT5tYXhfaXNyX3JjdnMsIGZyYW1lcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfeG1pdF9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpoY21kOworCXN0cnVjdCBzbGljX3JzcGJ1ZiAqcnNwYnVmOworCXUzMiBmcmFtZXMgPSAwOworCXN0cnVjdCBzbGljX2hhbmRsZV93b3JkIHNsaWNfaGFuZGxlX3dvcmQ7CisKKwlkbyB7CisJCXJzcGJ1ZiA9IHNsaWNfcnNwcXVldWVfZ2V0bmV4dChhZGFwdGVyKTsKKwkJaWYgKCFyc3BidWYpCisJCQlicmVhazsKKwkJYWRhcHRlci0+eG1pdF9jb21wbGV0ZXMrKzsKKwkJYWRhcHRlci0+Y2FyZC0+ZXZlbnRzKys7CisJCS8qCisJCSBHZXQgdGhlIGNvbXBsZXRlIGhvc3QgY29tbWFuZCBidWZmZXIKKwkJKi8KKwkJc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfdG9rZW4gPSByc3BidWYtPmhvc3RoYW5kbGU7CisJCUFTU0VSVChzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleCk7CisJCUFTU0VSVChzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleCA8PSBTTElDX0NNRFFfTUFYQ01EUyk7CisJCWhjbWQgPQorCQkgICAgKHN0cnVjdCBzbGljX2hvc3RjbWQgKikKKwkJCWFkYXB0ZXItPnNsaWNfaGFuZGxlc1tzbGljX2hhbmRsZV93b3JkLmhhbmRsZV9pbmRleF0uCisJCQkJCQkJCQlhZGRyZXNzOworLyogICAgICBoY21kID0gKHN0cnVjdCBzbGljX2hvc3RjbWQgKikgcnNwYnVmLT5ob3N0aGFuZGxlOyAqLworCQlBU1NFUlQoaGNtZCk7CisJCUFTU0VSVChoY21kLT5wc2xpY19oYW5kbGUgPT0KKwkJICAgICAgICZhZGFwdGVyLT5zbGljX2hhbmRsZXNbc2xpY19oYW5kbGVfd29yZC5oYW5kbGVfaW5kZXhdKTsKKwkJaWYgKGhjbWQtPnR5cGUgPT0gU0xJQ19DTURfRFVNQikgeworCQkJaWYgKGhjbWQtPnNrYikKKwkJCQlkZXZfa2ZyZWVfc2tiX2lycShoY21kLT5za2IpOworCQkJc2xpY19jbWRxX3B1dGRvbmVfaXJxKGFkYXB0ZXIsIGhjbWQpOworCQl9CisJCXJzcGJ1Zi0+c3RhdHVzID0gMDsKKwkJcnNwYnVmLT5ob3N0aGFuZGxlID0gMDsKKwkJZnJhbWVzKys7CisJfSB3aGlsZSAoMSk7CisJYWRhcHRlci0+bWF4X2lzcl94bWl0cyA9IG1heChhZGFwdGVyLT5tYXhfaXNyX3htaXRzLCBmcmFtZXMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2xpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBpc3I7CisKKwlpZiAoKGFkYXB0ZXItPnBzaG1lbSkgJiYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSkgeworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaWNyLAorCQkJCSBJQ1JfSU5UX01BU0ssIEZMVVNIKTsKKwkJaXNyID0gYWRhcHRlci0+aXNyY29weSA9IGFkYXB0ZXItPnBzaG1lbS0+aXNyOworCQlhZGFwdGVyLT5wc2htZW0tPmlzciA9IDA7CisJCWFkYXB0ZXItPm51bV9pc3JzKys7CisJCXN3aXRjaCAoYWRhcHRlci0+Y2FyZC0+c3RhdGUpIHsKKwkJY2FzZSBDQVJEX1VQOgorCQkJaWYgKGlzciAmIH5JU1JfSU8pIHsKKwkJCQlpZiAoaXNyICYgSVNSX0VSUikgeworCQkJCQlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzKys7CisJCQkJCWlmIChpc3IgJiBJU1JfUk1JU1MpIHsKKwkJCQkJCWludCBjb3VudDsKKwkJCQkJCWludCBwcmVfY291bnQ7CisJCQkJCQlpbnQgZXJyb3JzOworCisJCQkJCQlzdHJ1Y3Qgc2xpY19yY3ZxdWV1ZSAqcmN2cSA9CisJCQkJCQkgICAgJmFkYXB0ZXItPnJjdnF1ZXVlOworCisJCQkJCQlhZGFwdGVyLT4KKwkJCQkJCSAgICBlcnJvcl9ybWlzc19pbnRlcnJ1cHRzKys7CisJCQkJCQlpZiAoIXJjdnEtPmVycm9ycykKKwkJCQkJCQlyY3ZfY291bnQgPSByY3ZxLT5jb3VudDsKKwkJCQkJCXByZV9jb3VudCA9IHJjdnEtPmNvdW50OworCQkJCQkJZXJyb3JzID0gcmN2cS0+ZXJyb3JzOworCisJCQkJCQl3aGlsZSAocmN2cS0+Y291bnQgPAorCQkJCQkJICAgICAgIFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CisJCQkJCQkJY291bnQgPQorCQkJCQkJCSAgICBzbGljX3JjdnF1ZXVlX2ZpbGwKKwkJCQkJCQkgICAgKGFkYXB0ZXIpOworCQkJCQkJCWlmICghY291bnQpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9IGVsc2UgaWYgKGlzciAmIElTUl9YRFJPUCkgeworCQkJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkJImlzciAmIElTUl9FUlIgWyV4XSAiCisJCQkJCQkJIklTUl9YRFJPUCBcbiIsIGlzcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJCQkiaXNyICYgSVNSX0VSUiBbJXhdXG4iLAorCQkJCQkJCWlzcik7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoaXNyICYgSVNSX0xFVkVOVCkgeworCQkJCQlhZGFwdGVyLT5saW5rZXZlbnRfaW50ZXJydXB0cysrOworCQkJCQlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKKwkJCQl9CisKKwkJCQlpZiAoKGlzciAmIElTUl9VUEMpIHx8CisJCQkJICAgIChpc3IgJiBJU1JfVVBDRVJSKSB8fCAoaXNyICYgSVNSX1VQQ0JTWSkpIHsKKwkJCQkJYWRhcHRlci0+dXByX2ludGVycnVwdHMrKzsKKwkJCQkJc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShhZGFwdGVyLCBpc3IpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGlzciAmIElTUl9SQ1YpIHsKKwkJCQlhZGFwdGVyLT5yY3ZfaW50ZXJydXB0cysrOworCQkJCXNsaWNfcmN2X2hhbmRsZXIoYWRhcHRlcik7CisJCQl9CisKKwkJCWlmIChpc3IgJiBJU1JfQ01EKSB7CisJCQkJYWRhcHRlci0+eG1pdF9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY194bWl0X2NvbXBsZXRlKGFkYXB0ZXIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBDQVJEX0RPV046CisJCQlpZiAoKGlzciAmIElTUl9VUEMpIHx8CisJCQkgICAgKGlzciAmIElTUl9VUENFUlIpIHx8IChpc3IgJiBJU1JfVVBDQlNZKSkgeworCQkJCWFkYXB0ZXItPnVwcl9pbnRlcnJ1cHRzKys7CisJCQkJc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShhZGFwdGVyLCBpc3IpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYWRhcHRlci0+aXNyY29weSA9IDA7CisJCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzICs9IDI7CisJCWFkYXB0ZXItPmlzcl9yZWdfd3JpdGVzKys7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5mYWxzZV9pbnRlcnJ1cHRzKys7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2RlZmluZSBOT1JNQUxfRVRIRlJBTUUgICAgIDAKKworc3RhdGljIG5ldGRldl90eF90IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNfaG9zdGNtZCAqaGNtZCA9IE5VTEw7CisJdTMyIHN0YXR1cyA9IDA7CisJdTMyIHNrYnR5cGUgPSBOT1JNQUxfRVRIRlJBTUU7CisJdm9pZCAqb2ZmbG9hZGNtZCA9IE5VTEw7CisKKwljYXJkID0gYWRhcHRlci0+Y2FyZDsKKwlBU1NFUlQoY2FyZCk7CisJaWYgKChhZGFwdGVyLT5saW5rc3RhdGUgIT0gTElOS19VUCkgfHwKKwkgICAgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKSB8fCAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9VUCkpIHsKKwkJc3RhdHVzID0gWE1JVF9GQUlMX0xJTktfU1RBVEU7CisJCWdvdG8geG1pdF9mYWlsOworCisJfSBlbHNlIGlmIChza2ItPmxlbiA9PSAwKSB7CisJCXN0YXR1cyA9IFhNSVRfRkFJTF9aRVJPX0xFTkdUSDsKKwkJZ290byB4bWl0X2ZhaWw7CisJfQorCisJaWYgKHNrYnR5cGUgPT0gTk9STUFMX0VUSEZSQU1FKSB7CisJCWhjbWQgPSBzbGljX2NtZHFfZ2V0ZnJlZShhZGFwdGVyKTsKKwkJaWYgKCFoY21kKSB7CisJCQlhZGFwdGVyLT54bWl0cV9mdWxsID0gMTsKKwkJCXN0YXR1cyA9IFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUw7CisJCQlnb3RvIHhtaXRfZmFpbDsKKwkJfQorCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlKTsKKwkJQVNTRVJUKGhjbWQtPmNtZDY0Lmhvc3RoYW5kbGUgPT0KKwkJICAgICAgIGhjbWQtPnBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX3Rva2VuKTsKKwkJaGNtZC0+c2tiID0gc2tiOworCQloY21kLT5idXN5ID0gMTsKKwkJaGNtZC0+dHlwZSA9IFNMSUNfQ01EX0RVTUI7CisJCWlmIChza2J0eXBlID09IE5PUk1BTF9FVEhGUkFNRSkKKwkJCXNsaWNfeG1pdF9idWlsZF9yZXF1ZXN0KGFkYXB0ZXIsIGhjbWQsIHNrYik7CisJfQorCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKyNpZmRlZiBERUJVR19EVU1QCisJaWYgKGFkYXB0ZXItPmtpbGxfY2FyZCkgeworCQlzdHJ1Y3Qgc2xpY19ob3N0NjRfY21kIGloY21kOworCisJCWloY21kID0gJmhjbWQtPmNtZDY0OworCisJCWloY21kLT5mbGFncyB8PSAweDQwOworCQlhZGFwdGVyLT5raWxsX2NhcmQgPSAwOwkvKiBvbmx5IGRvIHRoaXMgb25jZSAqLworCX0KKyNlbmRpZgorCWlmIChoY21kLT5wYWRkcmggPT0gMCkgeworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhciwKKwkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLCBET05UX0ZMVVNIKTsKKwl9IGVsc2UgeworCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfY2JhcjY0LAorCQkJCSAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksCisJCQkJICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgaGNtZC0+cGFkZHJoLCBET05UX0ZMVVNIKTsKKwl9Cit4bWl0X2RvbmU6CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK3htaXRfZmFpbDoKKwlzbGljX3htaXRfZmFpbChhZGFwdGVyLCBza2IsIG9mZmxvYWRjbWQsIHNrYnR5cGUsIHN0YXR1cyk7CisJZ290byB4bWl0X2RvbmU7Cit9CisKKworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc2xpY19pbml0X2NsZWFudXAoYWRhcHRlcik7CisJYWRhcHRlci0+ZXJyb3JfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+cmN2X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnhtaXRfaW50ZXJydXB0cyA9IDA7CisJYWRhcHRlci0+bGlua2V2ZW50X2ludGVycnVwdHMgPSAwOworCWFkYXB0ZXItPnVwcl9pbnRlcnJ1cHRzID0gMDsKKwlhZGFwdGVyLT5udW1faXNycyA9IDA7CisJYWRhcHRlci0+eG1pdF9jb21wbGV0ZXMgPSAwOworCWFkYXB0ZXItPnJjdl9icm9hZGNhc3RzID0gMDsKKwlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cyA9IDA7CisJYWRhcHRlci0+cmN2X3VuaWNhc3RzID0gMDsKK30KKworc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCFhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCkgeworCQlpbnQgcmV0dmFsOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKworCQlyZXR2YWwgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5uZXRkZXYtPmlycSwKKwkJCQkgICAgICZzbGljX2ludGVycnVwdCwKKwkJCQkgICAgIElSUUZfU0hBUkVELAorCQkJCSAgICAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5uZXRkZXYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisKKwkJaWYgKHJldHZhbCkgeworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJInJlcXVlc3RfaXJxICglcykgRkFJTEVEIFsleF1cbiIsCisJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXR2YWwpOworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogIHNsaWNfaWZfaW5pdAorICoKKyAqICBQZXJmb3JtIGluaXRpYWxpemF0aW9uIG9mIG91ciBzbGljIGludGVyZmFjZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgc2xpY19pZl9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCByYzsKKworCUFTU0VSVChjYXJkKTsKKworCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV05cbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnI7CisJfQorCUFTU0VSVChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19ET1dOKTsKKworCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOworCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CisJaWYgKGRldi0+ZmxhZ3MpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfQkNBU1Q7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCisJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19NQ0FTVDsKKwl9CisJcmMgPSBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIiVzOiBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMgRkFJTEVEICV4XG4iLAorCQkJX19mdW5jX18sIHJjKTsKKwkJc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoYWRhcHRlcik7CisJCWdvdG8gZXJyOworCX0KKworCWlmICghYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkKSB7CisJCWlmICgocmMgPSBzbGljX3JzcHF1ZXVlX2luaXQoYWRhcHRlcikpKQorCQkJZ290byBlcnI7CisJCWlmICgocmMgPSBzbGljX2NtZHFfaW5pdChhZGFwdGVyKSkpCisJCQlnb3RvIGVycjsKKwkJaWYgKChyYyA9IHNsaWNfcmN2cXVldWVfaW5pdChhZGFwdGVyKSkpCisJCQlnb3RvIGVycjsKKwkJYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkID0gMTsKKwl9CisKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCW1kZWxheSgxKTsKKworCWlmICghYWRhcHRlci0+aXNwX2luaXRpYWxpemVkKSB7CisJCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAorCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmlzciksIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CisjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwgKHUzMikmcHNobWVtLT5pc3IsIEZMVVNIKTsKKyNlbHNlCisJCVN0b3AgQ29tcGlsYXRpb25zCisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJCWFkYXB0ZXItPmlzcF9pbml0aWFsaXplZCA9IDE7CisJfQorCisJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9VUDsKKwlpZiAoIWNhcmQtPmxvYWR0aW1lcnNldCkgeworCQlpbml0X3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOworCQljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9CisJCSAgICBqaWZmaWVzICsgKFNMSUNfTE9BRFRJTUVSX1BFUklPRCAqIEhaKTsKKwkJY2FyZC0+bG9hZHRpbWVyLmRhdGEgPSAodWxvbmcpIGNhcmQ7CisJCWNhcmQtPmxvYWR0aW1lci5mdW5jdGlvbiA9ICZzbGljX3RpbWVyX2xvYWRfY2hlY2s7CisJCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKKworCQljYXJkLT5sb2FkdGltZXJzZXQgPSAxOworCX0KKworCWlmICghYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7CisJCWluaXRfdGltZXIoJmFkYXB0ZXItPnBpbmd0aW1lcik7CisJCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0KKwkJICAgIGppZmZpZXMgKyAoUElOR19USU1FUl9JTlRFUlZBTCAqIEhaKTsKKwkJYWRhcHRlci0+cGluZ3RpbWVyLmRhdGEgPSAodWxvbmcpIGRldjsKKwkJYWRhcHRlci0+cGluZ3RpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfcGluZzsKKwkJYWRkX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOworCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAxOworCQlhZGFwdGVyLT5jYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOworCX0KKworCS8qCisJICogICAgY2xlYXIgYW55IHBlbmRpbmcgZXZlbnRzLCB0aGVuIGVuYWJsZSBpbnRlcnJ1cHRzCisJICovCisJYWRhcHRlci0+aXNyY29weSA9IDA7CisJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pc3IsIDAsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09OLCBGTFVTSCk7CisKKwlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIExJTktfQVVUT1NQRUVELCBMSU5LX0FVVE9EKTsKKwlzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihhZGFwdGVyKTsKKworZXJyOgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKKwl1MzIgbG9ja2VkID0gMDsKKwlpbnQgc3RhdHVzOworCisJQVNTRVJUKGFkYXB0ZXIpOworCUFTU0VSVChjYXJkKTsKKworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKKwlsb2NrZWQgPSAxOworCWlmICghYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCsrOworCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUrKzsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMTsKKwl9CisJc3RhdHVzID0gc2xpY19pZl9pbml0KGFkYXB0ZXIpOworCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKKwkJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOworCQkJc2xpY19nbG9iYWwubnVtX3NsaWNfcG9ydHNfYWN0aXZlLS07CisJCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOworCQl9CisJCWlmIChsb2NrZWQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJCQlsb2NrZWQgPSAwOworCQl9CisJCXJldHVybiBzdGF0dXM7CisJfQorCWlmICghY2FyZC0+bWFzdGVyKQorCQljYXJkLT5tYXN0ZXIgPSBhZGFwdGVyOworCisJaWYgKGxvY2tlZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAorCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJCWxvY2tlZCA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfY2FyZF9jbGVhbnVwKHN0cnVjdCBzbGljY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+bG9hZHRpbWVyc2V0KSB7CisJCWNhcmQtPmxvYWR0aW1lcnNldCA9IDA7CisJCWRlbF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKKwl9CisKKwlzbGljX2RlYnVnX2NhcmRfZGVzdHJveShjYXJkKTsKKworCWtmcmVlKGNhcmQpOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2xpY19lbnRyeV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJdTMyIG1taW9fc3RhcnQgPSAwOworCXVpbnQgbW1pb19sZW4gPSAwOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQ7CisJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OworCisJQVNTRVJUKGFkYXB0ZXIpOworCXNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKGFkYXB0ZXIpOworCXNsaWNfdW5tYXBfbW1pb19zcGFjZShhZGFwdGVyKTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCisJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKKwkvKiBmcmVlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KKwltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CisJd2hpbGUgKG1saXN0KSB7CisJCW1jYWRkciA9IG1saXN0OworCQltbGlzdCA9IG1saXN0LT5uZXh0OworCQlrZnJlZShtY2FkZHIpOworCX0KKwlBU1NFUlQoYWRhcHRlci0+Y2FyZCk7CisJY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJQVNTRVJUKGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CisJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLS07CisJYWRhcHRlci0+YWxsb2NhdGVkID0gMDsKKwlpZiAoIWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCkgeworCQlzdHJ1Y3Qgc2xpY2NhcmQgKmN1cnJfY2FyZCA9IHNsaWNfZ2xvYmFsLnNsaWNfY2FyZDsKKwkJaWYgKGN1cnJfY2FyZCA9PSBjYXJkKSB7CisJCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkLT5uZXh0OworCQl9IGVsc2UgeworCQkJd2hpbGUgKGN1cnJfY2FyZC0+bmV4dCAhPSBjYXJkKQorCQkJCWN1cnJfY2FyZCA9IGN1cnJfY2FyZC0+bmV4dDsKKwkJCUFTU0VSVChjdXJyX2NhcmQpOworCQkJY3Vycl9jYXJkLT5uZXh0ID0gY2FyZC0+bmV4dDsKKwkJfQorCQlBU1NFUlQoc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMpOworCQlzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcy0tOworCQlzbGljX2NhcmRfY2xlYW51cChjYXJkKTsKKwl9CisJa2ZyZWUoZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaWRldik7Cit9CisKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKKwkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CisJQVNTRVJUKGNhcmQpOworCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKKwlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0RPV047CisJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCWFkYXB0ZXItPnVwcl9saXN0ID0gTlVMTDsKKwlhZGFwdGVyLT51cHJfYnVzeSA9IDA7CisJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IDA7CisJQVNTRVJUKGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+Y2FyZGluZGV4XSA9PSBhZGFwdGVyKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOworCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKys7CisJYWRhcHRlci0+aWNyX3JlZ193cml0ZXMrKzsKKwlzbGljX2NvbmZpZ19jbGVhcihhZGFwdGVyKTsKKwlpZiAoYWRhcHRlci0+YWN0aXZhdGVkKSB7CisJCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZC0tOworCQlzbGljX2dsb2JhbC5udW1fc2xpY19wb3J0c19hY3RpdmUtLTsKKwkJYWRhcHRlci0+YWN0aXZhdGVkID0gMDsKKwl9CisjaWZkZWYgQVVUT01BVElDX1JFU0VUCisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jlc2V0X2lmYWNlLCAwLCBGTFVTSCk7CisjZW5kaWYKKwkvKgorCSAqICBSZXNldCB0aGUgYWRhcHRlcidzIGNtZCBxdWV1ZXMKKwkgKi8KKwlzbGljX2NtZHFfcmVzZXQoYWRhcHRlcik7CisKKyNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKKwlpZiAoIWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCkKKwkJc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CisjZW5kaWYKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCisJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNsaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJQVNTRVJUKGFkYXB0ZXIpOworCWRldi0+c3RhdHMuY29sbGlzaW9ucyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG1pdF9jb2xsaXNpb25zOworCWRldi0+c3RhdHMucnhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzOworCWRldi0+c3RhdHMudHhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS54bXRfZXJyb3JzOworCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Rpc2NhcmRzOworCWRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gMDsKKwlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gMDsKKwlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gMDsKKworCXJldHVybiAmZGV2LT5zdGF0czsKK30KKworc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0b29sX2NtZCBlZGF0YTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwl1MzIgZGF0YVs3XTsKKwl1MzIgaW50YWdnOworCisJQVNTRVJUKHJxKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ1NMSUNTRVRJTlRBR0c6CisJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpbnRhZ2cgPSBkYXRhWzBdOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBzZXQgaW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRvICVkXG4iLAorCQkJX19mdW5jX18sIGludGFnZyk7CisJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOworCQlyZXR1cm4gMDsKKworI2lmZGVmIFNMSUNfVFJBQ0VfRFVNUF9FTkFCTEVECisJY2FzZSBTSU9DU0xJQ1RSQUNFRFVNUDoKKwkJeworCQkJdTMyIHZhbHVlOworCQkJREJHX0lPQ1RMKCJzbGljX2lvY3RsICBTSU9DU0xJQ19UUkFDRV9EVU1QXG4iKTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKSB7CisJCQkJUFJJTlRfRVJST1IKKwkJCQkgICAgKCJzbGljOiBjb3B5X2Zyb21fdXNlciBGQUlMRUQgZ2V0dGluZyBpbml0aWFsIHNpbWJhIHBhcmFtXG4iKTsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKworCQkJdmFsdWUgPSBkYXRhWzBdOworCQkJaWYgKHRyYWNlbW9uX3JlcXVlc3QgPT0gU0xJQ19EVU1QX0RPTkUpIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkXG4iKTsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0ID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKKwkJCQl0cmFjZW1vbl9yZXF1ZXN0X3R5cGUgPSB2YWx1ZTsKKwkJCQl0cmFjZW1vbl90aW1lc3RhbXAgPSBqaWZmaWVzOworCQkJfSBlbHNlIGlmICgodHJhY2Vtb25fcmVxdWVzdCA9PSBTTElDX0RVTVBfUkVRVUVTVEVEKSB8fAorCQkJCSAgICh0cmFjZW1vbl9yZXF1ZXN0ID09CisJCQkJICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKKwkJCQlQUklOVF9FUlJPUgorCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkIGJ1dCBhbHJlYWR5IGluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7CisJCQl9IGVsc2UgeworCQkJCVBSSU5UX0VSUk9SCisJCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWRcbiIpOworCQkJCXRyYWNlbW9uX3JlcXVlc3QgPSBTTElDX0RVTVBfUkVRVUVTVEVEOworCQkJCXRyYWNlbW9uX3JlcXVlc3RfdHlwZSA9IHZhbHVlOworCQkJCXRyYWNlbW9uX3RpbWVzdGFtcCA9IGppZmZpZXM7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorI2VuZGlmCisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJQVNTRVJUKGFkYXB0ZXIpOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChlY21kLmNtZCA9PSBFVEhUT09MX0dTRVQpIHsKKwkJCWVkYXRhLnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOworCQkJZWRhdGEucG9ydCA9IFBPUlRfTUlJOworCQkJZWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOworCQkJZWRhdGEucGh5X2FkZHJlc3MgPSAwOworCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJZWxzZQorCQkJCWVkYXRhLnNwZWVkID0gMDsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWRhdGEubWF4dHhwa3QgPSAxOworCQkJZWRhdGEubWF4cnhwa3QgPSAxOworCQkJaWYgKGNvcHlfdG9fdXNlcihycS0+aWZyX2RhdGEsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJfSBlbHNlIGlmIChlY21kLmNtZCA9PSBFVEhUT09MX1NTRVQpIHsKKwkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCisJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCisJCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7CisJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTA7CisJCQllbHNlCisJCQkJZWRhdGEuc3BlZWQgPSAwOworCisJCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQorCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJZWxzZQorCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCQllZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCQllZGF0YS5tYXh0eHBrdCA9IDE7CisJCQllZGF0YS5tYXhyeHBrdCA9IDE7CisJCQlpZiAoKGVjbWQuc3BlZWQgIT0gZWRhdGEuc3BlZWQpIHx8CisJCQkgICAgKGVjbWQuZHVwbGV4ICE9IGVkYXRhLmR1cGxleCkpIHsKKwkJCQl1MzIgc3BlZWQ7CisJCQkJdTMyIGR1cGxleDsKKworCQkJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwKQorCQkJCQlzcGVlZCA9IDA7CisJCQkJZWxzZQorCQkJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7CisJCQkJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7CisJCQkJZWxzZQorCQkJCQlkdXBsZXggPSAwOworCQkJCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgc3BlZWQsIGR1cGxleCk7CisJCQkJc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoYWRhcHRlcik7CisJCQl9CisJCX0KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJdTE2IHBjaV9jb21tYW5kOworCXUxNiBuZXdfY29tbWFuZDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaWRldiwgUENJX0NPTU1BTkQsICZwY2lfY29tbWFuZCk7CisKKwluZXdfY29tbWFuZCA9IHBjaV9jb21tYW5kIHwgUENJX0NPTU1BTkRfTUFTVEVSCisJICAgIHwgUENJX0NPTU1BTkRfTUVNT1JZCisJICAgIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURQorCSAgICB8IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIgfCBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7CisJaWYgKHBjaV9jb21tYW5kICE9IG5ld19jb21tYW5kKQorCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgbmV3X2NvbW1hbmQpOworfQorCitzdGF0aWMgaW50IHNsaWNfY2FyZF9pbml0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CisJc3RydWN0IHNsaWNfZWVwcm9tICpwZWVwcm9tOworCXN0cnVjdCBvc2xpY19lZXByb20gKnBPZWVwcm9tOworCWRtYV9hZGRyX3QgcGh5c19jb25maWc7CisJdTMyIHBoeXNfY29uZmlnaDsKKwl1MzIgcGh5c19jb25maWdsOworCXUzMiBpID0gMDsKKwlzdHJ1Y3Qgc2xpY19zaG1lbSAqcHNobWVtOworCWludCBzdGF0dXM7CisJdWludCBtYWNhZGRycyA9IGNhcmQtPmNhcmRfc2l6ZTsKKwl1c2hvcnQgZWVjb2Rlc2l6ZTsKKwl1c2hvcnQgZHJhbXNpemU7CisJdXNob3J0IGVlX2Noa3N1bTsKKwl1c2hvcnQgY2FsY19jaGtzdW07CisJc3RydWN0IHNsaWNfY29uZmlnX21hYyAqcG1hYzsKKwl1bnNpZ25lZCBjaGFyIGZydWZvcm1hdDsKKwl1bnNpZ25lZCBjaGFyIG9lbWZydWZvcm1hdDsKKwlzdHJ1Y3QgYXRrX2ZydSAqcGF0a2ZydTsKKwl1bmlvbiBvZW1mcnUgKnBvZW1mcnU7CisKKwkvKiBSZXNldCBldmVyeXRoaW5nIGV4Y2VwdCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSAqLworCXNsaWNfc29mdF9yZXNldChhZGFwdGVyKTsKKworCS8qIERvd25sb2FkIHRoZSBtaWNyb2NvZGUgKi8KKwlzdGF0dXMgPSBzbGljX2NhcmRfZG93bmxvYWQoYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkiZG93bmxvYWQgZmFpbGVkIGJ1cyAlZCBzbG90ICVkXG4iLAorCQkJYWRhcHRlci0+YnVzbnVtYmVyLCBhZGFwdGVyLT5zbG90bnVtYmVyKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpZiAoIWNhcmQtPmNvbmZpZ19zZXQpIHsKKwkJcGVlcHJvbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAorCQkJCQkgICAgICAgJnBoeXNfY29uZmlnKTsKKworCQlwaHlzX2NvbmZpZ2wgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2NvbmZpZyk7CisJCXBoeXNfY29uZmlnaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2NvbmZpZyk7CisKKwkJaWYgKCFwZWVwcm9tKSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCQkiZWVwcm9tIHJlYWQgZmFpbGVkIHRvIGdldCBtZW1vcnkgIgorCQkJCSJidXMgJWQgc2xvdCAlZFxuIiwgYWRhcHRlci0+YnVzbnVtYmVyLAorCQkJCWFkYXB0ZXItPnNsb3RudW1iZXIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQltZW1zZXQocGVlcHJvbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSkpOworCQl9CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT0ZGLCBGTFVTSCk7CisJCW1kZWxheSgxKTsKKwkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2ssCisJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzcCwKKwkJCQkgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKKwkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKKworCQlzbGljX2NvbmZpZ19nZXQoYWRhcHRlciwgcGh5c19jb25maWdsLCBwaHlzX2NvbmZpZ2gpOworCisJCWZvciAoOzspIHsKKwkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzcikgeworCQkJCWlmIChhZGFwdGVyLT5wc2htZW0tPmlzciAmIElTUl9VUEMpIHsKKwkJCQkJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOworCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCTAsIEZMVVNIKTsKKwkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKKwkJCQkJCQkgMCwgRkxVU0gpOworCisJCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKKwkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKKwkJCQkJCQkgMCwgRkxVU0gpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJbWRlbGF5KDEpOworCQkJCWkrKzsKKwkJCQlpZiAoaSA+IDUwMDApIHsKKwkJCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJCQkiJWQgY29uZmlnIGRhdGEgZmV0Y2ggdGltZWQgb3V0IVxuIiwKKwkJCQkJCWFkYXB0ZXItPnBvcnQpOworCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCTAsIEZMVVNIKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJfQorCQl9CisKKwkJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgeworCQkvKiBPYXNpcyBjYXJkICovCisJCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgorCQkJLyogZXh0cmFjdCBFRVBST00gZGF0YSBhbmQgcG9pbnRlcnMgdG8gRUVQUk9NIGRhdGEgKi8KKwkJCXBPZWVwcm9tID0gKHN0cnVjdCBvc2xpY19lZXByb20gKikgcGVlcHJvbTsKKwkJCWVlY29kZXNpemUgPSBwT2VlcHJvbS0+RWVjb2RlU2l6ZTsKKwkJCWRyYW1zaXplID0gcE9lZXByb20tPkRyYW1TaXplOworCQkJcG1hYyA9IHBPZWVwcm9tLT5NYWNJbmZvOworCQkJZnJ1Zm9ybWF0ID0gcE9lZXByb20tPkZydUZvcm1hdDsKKwkJCXBhdGtmcnUgPSAmcE9lZXByb20tPkF0a0ZydTsKKwkJCW9lbWZydWZvcm1hdCA9IHBPZWVwcm9tLT5PZW1GcnVGb3JtYXQ7CisJCQlwb2VtZnJ1ID0gJnBPZWVwcm9tLT5PZW1GcnU7CisJCQltYWNhZGRycyA9IDI7CisJCQkvKiBNaW5vciBrbHVkZ2UgZm9yIE9hc2lzIGNhcmQKKwkJCSAgICAgZ2V0IDIgTUFDIGFkZHJlc3NlcyBmcm9tIHRoZQorCQkJICAgICBFRVBST00gdG8gZW5zdXJlIHRoYXQgZnVuY3Rpb24gMQorCQkJICAgICBnZXRzIHRoZSBQb3J0IDEgTUFDIGFkZHJlc3MgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogZXh0cmFjdCBFRVBST00gZGF0YSBhbmQgcG9pbnRlcnMgdG8gRUVQUk9NIGRhdGEgKi8KKwkJCWVlY29kZXNpemUgPSBwZWVwcm9tLT5FZWNvZGVTaXplOworCQkJZHJhbXNpemUgPSBwZWVwcm9tLT5EcmFtU2l6ZTsKKwkJCXBtYWMgPSBwZWVwcm9tLT51Mi5tYWMuTWFjSW5mbzsKKwkJCWZydWZvcm1hdCA9IHBlZXByb20tPkZydUZvcm1hdDsKKwkJCXBhdGtmcnUgPSAmcGVlcHJvbS0+QXRrRnJ1OworCQkJb2VtZnJ1Zm9ybWF0ID0gcGVlcHJvbS0+T2VtRnJ1Rm9ybWF0OworCQkJcG9lbWZydSA9ICZwZWVwcm9tLT5PZW1GcnU7CisJCQlicmVhazsKKwkJfQorCisJCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IGZhbHNlOworCisJCS8qICBzZWUgaWYgdGhlIEVFUFJPTSBpcyB2YWxpZCBieSBjaGVja2luZyBpdCdzIGNoZWNrc3VtICovCisJCWlmICgoZWVjb2Rlc2l6ZSA8PSBNQVhfRUVDT0RFX1NJWkUpICYmCisJCSAgICAoZWVjb2Rlc2l6ZSA+PSBNSU5fRUVDT0RFX1NJWkUpKSB7CisKKwkJCWVlX2Noa3N1bSA9CisJCQkgICAgKih1MTYgKikgKChjaGFyICopIHBlZXByb20gKyAoZWVjb2Rlc2l6ZSAtIDIpKTsKKwkJCS8qCisJCQkgICAgY2FsY3VsYXRlIHRoZSBFRVBST00gY2hlY2tzdW0KKwkJCSovCisJCQljYWxjX2Noa3N1bSA9CisJCQkgICAgfnNsaWNfZWVwcm9tX2Nrc3VtKChjaGFyICopIHBlZXByb20sCisJCQkJCSAgICAgICAoZWVjb2Rlc2l6ZSAtIDIpKTsKKwkJCS8qCisJCQkgICAgaWYgdGhlIHVjZG9lIGNoa3N1bSBmbGFnIGJpdCB3b3JrZWQsCisJCQkgICAgd2Ugd291bGRuJ3QgbmVlZCB0aGlzIHNoaXQKKwkJCSovCisJCQlpZiAoZWVfY2hrc3VtID09IGNhbGNfY2hrc3VtKQorCQkJCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IHRydWU7CisJCX0KKwkJLyogIGNvcHkgaW4gdGhlIERSQU0gc2l6ZSAqLworCQljYXJkLT5jb25maWcuRHJhbVNpemUgPSBkcmFtc2l6ZTsKKworCQkvKiAgY29weSBpbiB0aGUgTUFDIGFkZHJlc3MoZXMpICovCisJCWZvciAoaSA9IDA7IGkgPCBtYWNhZGRyczsgaSsrKSB7CisJCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5NYWNJbmZvW2ldLAorCQkJICAgICAgICZwbWFjW2ldLCBzaXplb2Yoc3RydWN0IHNsaWNfY29uZmlnX21hYykpOworCQl9CisKKwkJLyogIGNvcHkgdGhlIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCisJCWNhcmQtPmNvbmZpZy5GcnVGb3JtYXQgPSBmcnVmb3JtYXQ7CisJCW1lbWNweSgmY2FyZC0+Y29uZmlnLkF0a0ZydSwgcGF0a2ZydSwKKwkJCQkJCXNpemVvZihzdHJ1Y3QgYXRrX2ZydSkpOworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKKwkJCQkgICAgcGVlcHJvbSwgcGh5c19jb25maWcpOworCisJCWlmICgoIWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCkgJiYKKwkJICAgIChhZGFwdGVyLT5yZWdfcGFyYW1zLmZhaWxfb25fYmFkX2VlcHJvbSkpIHsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19pc3AsIDAsCisJCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCSAwLCBGTFVTSCk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCQkidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiBFRVBST00gaW52YWxpZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWNhcmQtPmNvbmZpZ19zZXQgPSAxOworCX0KKworCWlmIChzbGljX2NhcmRfZG93bmxvYWRfZ2JyY3YoYWRhcHRlcikpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkidW5hYmxlIHRvIGRvd25sb2FkIEdCIHJlY2VpdmUgbWljcm9jb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKQorCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7CisJZWxzZQorCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgaW50YWdnX2RlbGF5KTsKKworCS8qCisJICogIEluaXRpYWxpemUgcGluZyBzdGF0dXMgdG8gIm9rIgorCSAqLworCWNhcmQtPnBpbmdzdGF0dXMgPSBJU1JfUElOR01BU0s7CisKKwkvKgorCSAqIExhc3RseSwgbWFyayBvdXIgY2FyZCBzdGF0ZSBhcyB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MKKwkgKi8KKwljYXJkLT5zdGF0ZSA9IENBUkRfVVA7CisJY2FyZC0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlpZiAoc2xpY19maXJzdF9pbml0KSB7CisJCXNsaWNfZmlyc3RfaW5pdCA9IDA7CisJCXNwaW5fbG9ja19pbml0KCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrKTsKKwkJc2xpY19kZWJ1Z19pbml0KCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzbGljX2luaXRfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5LAorCQkJICAgICAgdm9pZCBfX2lvbWVtICptZW1hZGRyLCBpbnQgY2hpcF9pZHgpCit7CisJdXNob3J0IGluZGV4OworCXN0cnVjdCBzbGljX2hhbmRsZSAqcHNsaWNfaGFuZGxlOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworLyoJYWRhcHRlci0+cGNpZGV2ID0gcGNpZGV2OyovCisJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOworCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOworCWFkYXB0ZXItPnN1YnN5c2lkID0gcGNpX3RibF9lbnRyeS0+c3ViZGV2aWNlOworCWFkYXB0ZXItPmJ1c251bWJlciA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJYWRhcHRlci0+c2xvdG51bWJlciA9ICgocGNpZGV2LT5kZXZmbiA+PiAzKSAmIDB4MUYpOworCWFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyID0gKHBjaWRldi0+ZGV2Zm4gJiAweDcpOworCWFkYXB0ZXItPm1lbW9yeWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKKwlhZGFwdGVyLT5zbGljX3JlZ3MgPSAoX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICopbWVtYWRkcjsKKwlhZGFwdGVyLT5pcnEgPSBwY2lkZXYtPmlycTsKKy8qCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsqLworCWFkYXB0ZXItPm5leHRfbmV0ZGV2aWNlID0gaGVhZF9uZXRkZXZpY2U7CisJaGVhZF9uZXRkZXZpY2UgPSBuZXRkZXY7CisJYWRhcHRlci0+Y2hpcGlkID0gY2hpcF9pZHg7CisJYWRhcHRlci0+cG9ydCA9IDA7CS8qYWRhcHRlci0+ZnVuY3Rpb25udW1iZXI7Ki8KKwlhZGFwdGVyLT5jYXJkaW5kZXggPSBhZGFwdGVyLT5wb3J0OworCWFkYXB0ZXItPm1lbW9yeWJhc2UgPSBtZW1hZGRyOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT51cHJfbG9jay5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Yml0NjRyZWdsb2NrLmxvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5hZGFwdGVyX2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlc2V0X2xvY2subG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmhhbmRsZV9sb2NrLmxvY2spOworCisJYWRhcHRlci0+Y2FyZF9zaXplID0gMTsKKwkvKgorCSAgSW5pdGlhbGl6ZSBzbGljX2hhbmRsZSBhcnJheQorCSovCisJQVNTRVJUKFNMSUNfQ01EUV9NQVhDTURTIDw9IDB4RkZGRik7CisJLyoKKwkgU3RhcnQgd2l0aCAxLiAgMCBpcyBhbiBpbnZhbGlkIGhvc3QgaGFuZGxlLgorCSovCisJZm9yIChpbmRleCA9IDEsIHBzbGljX2hhbmRsZSA9ICZhZGFwdGVyLT5zbGljX2hhbmRsZXNbMV07CisJICAgICBpbmRleCA8IFNMSUNfQ01EUV9NQVhDTURTOyBpbmRleCsrLCBwc2xpY19oYW5kbGUrKykgeworCisJCXBzbGljX2hhbmRsZS0+dG9rZW4uaGFuZGxlX2luZGV4ID0gaW5kZXg7CisJCXBzbGljX2hhbmRsZS0+dHlwZSA9IFNMSUNfSEFORExFX0ZSRUU7CisJCXBzbGljX2hhbmRsZS0+bmV4dCA9IGFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlczsKKwkJYWRhcHRlci0+cGZyZWVfc2xpY19oYW5kbGVzID0gcHNsaWNfaGFuZGxlOworCX0KKwlhZGFwdGVyLT5wc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKikKKwkJCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAorCQkJCQkmYWRhcHRlci0+CisJCQkJCXBoeXNfc2htZW0pOworCUFTU0VSVChhZGFwdGVyLT5wc2htZW0pOworCisJbWVtc2V0KGFkYXB0ZXItPnBzaG1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBzbGljX3NobWVtKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2xpY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzbGljX2VudHJ5X29wZW4sCisJLm5kb19zdG9wCQk9IHNsaWNfZW50cnlfaGFsdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2xpY194bWl0X3N0YXJ0LAorCS5uZG9fZG9faW9jdGwJCT0gc2xpY19pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNsaWNfbWFjX3NldF9hZGRyZXNzLAorCS5uZG9fZ2V0X3N0YXRzCQk9IHNsaWNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2xpY19tY2FzdF9zZXRfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCit9OworCitzdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOworCXN0cnVjdCBwaHlzY2FyZCAqcGh5c2NhcmQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7CisJdXNob3J0IGNhcmRfaG9zdGlkOworCXUxNiBfX2lvbWVtICpob3N0aWRfcmVnOworCXVpbnQgaTsKKwl1aW50IHJkaG9zdGlkX29mZnNldCA9IDA7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7CisJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6CisJCXJkaG9zdGlkX29mZnNldCA9IFNMSUNfUkRIT1NUSURfMkdCOworCQlicmVhazsKKwljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKKwkJcmRob3N0aWRfb2Zmc2V0ID0gU0xJQ19SREhPU1RJRF8xR0I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVCgwKTsKKwkJYnJlYWs7CisJfQorCisJaG9zdGlkX3JlZyA9CisJICAgICh1MTYgX19pb21lbSAqKSAoKCh1OCBfX2lvbWVtICopIChhZGFwdGVyLT5zbGljX3JlZ3MpKSArCisJICAgIHJkaG9zdGlkX29mZnNldCk7CisKKwkvKiByZWFkIHRoZSAxNiBiaXQgaG9zdGlkIGZyb20gU1JBTSAqLworCWNhcmRfaG9zdGlkID0gKHVzaG9ydCkgcmVhZHcoaG9zdGlkX3JlZyk7CisKKwkvKiBJbml0aWFsaXplIGEgbmV3IGNhcmQgc3RydWN0dXJlIGlmIG5lZWQgYmUgKi8KKwlpZiAoY2FyZF9ob3N0aWQgPT0gU0xJQ19IT1NUSURfREVGQVVMVCkgeworCQljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNsaWNjYXJkKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChjYXJkID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQljYXJkLT5uZXh0ID0gc2xpY19nbG9iYWwuc2xpY19jYXJkOworCQlzbGljX2dsb2JhbC5zbGljX2NhcmQgPSBjYXJkOworCQljYXJkLT5idXNudW1iZXIgPSBhZGFwdGVyLT5idXNudW1iZXI7CisJCWNhcmQtPnNsb3RudW1iZXIgPSBhZGFwdGVyLT5zbG90bnVtYmVyOworCisJCS8qIEZpbmQgYW4gYXZhaWxhYmxlIGNhcmRudW0gKi8KKwkJZm9yIChpID0gMDsgaSA8IFNMSUNfTUFYX0NBUkRTOyBpKyspIHsKKwkJCWlmIChzbGljX2dsb2JhbC5jYXJkbnVtaW51c2VbaV0gPT0gMCkgeworCQkJCXNsaWNfZ2xvYmFsLmNhcmRudW1pbnVzZVtpXSA9IDE7CisJCQkJY2FyZC0+Y2FyZG51bSA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMrKzsKKworCQlzbGljX2RlYnVnX2NhcmRfY3JlYXRlKGNhcmQpOworCX0gZWxzZSB7CisJCS8qIENhcmQgZXhpc3RzLCBmaW5kIHRoZSBjYXJkIHRoaXMgYWRhcHRlciBiZWxvbmdzIHRvICovCisJCXdoaWxlIChjYXJkKSB7CisJCQlpZiAoY2FyZC0+Y2FyZG51bSA9PSBjYXJkX2hvc3RpZCkKKwkJCQlicmVhazsKKwkJCWNhcmQgPSBjYXJkLT5uZXh0OworCQl9CisJfQorCisJQVNTRVJUKGNhcmQpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTlhJTzsKKwkvKiBQdXQgdGhlIGFkYXB0ZXIgaW4gdGhlIGNhcmQncyBhZGFwdGVyIGxpc3QgKi8KKwlBU1NFUlQoY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9PSBOVUxMKTsKKwlpZiAoIWNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0pIHsKKwkJY2FyZC0+YWRhcHRlclthZGFwdGVyLT5wb3J0XSA9IGFkYXB0ZXI7CisJCWFkYXB0ZXItPmNhcmQgPSBjYXJkOworCX0KKworCWNhcmQtPmNhcmRfc2l6ZSA9IDE7CS8qIG9uZSBwb3J0IHBlciAqbG9naWNhbCogY2FyZCAqLworCisJd2hpbGUgKHBoeXNjYXJkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBTTElDX01BWF9QT1JUUzsgaSsrKSB7CisJCQlpZiAoIXBoeXNjYXJkLT5hZGFwdGVyW2ldKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJCUFTU0VSVChpICE9IFNMSUNfTUFYX1BPUlRTKTsKKwkJaWYgKHBoeXNjYXJkLT5hZGFwdGVyW2ldLT5zbG90bnVtYmVyID09IGFkYXB0ZXItPnNsb3RudW1iZXIpCisJCQlicmVhazsKKwkJcGh5c2NhcmQgPSBwaHlzY2FyZC0+bmV4dDsKKwl9CisJaWYgKCFwaHlzY2FyZCkgeworCQkvKiBubyBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciB0aGlzIHBoeXNpY2FsIGNhcmQgeWV0ICovCisJCXBoeXNjYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNjYXJkKSwgR0ZQX0FUT01JQyk7CisJCUFTU0VSVChwaHlzY2FyZCk7CisKKwkJcGh5c2NhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7CisJCXNsaWNfZ2xvYmFsLnBoeXNfY2FyZCA9IHBoeXNjYXJkOworCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkID0gMTsKKwl9IGVsc2UgeworCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkKys7CisJfQorCS8qIE5vdGUgLSB0aGlzIGlzIFpFUk8gcmVsYXRpdmUgKi8KKwlhZGFwdGVyLT5waHlzcG9ydCA9IHBoeXNjYXJkLT5hZGFwdGVyc19hbGxvY2QgLSAxOworCisJQVNTRVJUKHBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9PSBOVUxMKTsKKwlwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPSBhZGFwdGVyOworCWFkYXB0ZXItPnBoeXNjYXJkID0gcGh5c2NhcmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc2xpY19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5KQoreworCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CisJc3RhdGljIGludCBkaWRfdmVyc2lvbjsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCXZvaWQgX19pb21lbSAqbWVtbWFwcGVkX2lvYWRkciA9IE5VTEw7CisJdTMyIHN0YXR1cyA9IDA7CisJdWxvbmcgbW1pb19zdGFydCA9IDA7CisJdWxvbmcgbW1pb19sZW4gPSAwOworCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IE5VTEw7CisJaW50IHBjaV91c2luZ19kYWMgPSAwOworCisJc2xpY19nbG9iYWwuZHluYW1pY19pbnRhZ2cgPSBkeW5hbWljX2ludGFnZzsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaWRldik7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHNsaWNfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHNsaWNfYmFubmVyKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX3Byb2NfdmVyc2lvbik7CisJfQorCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgeworCQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJ1bmFibGUgdG8gb2J0YWluIDY0LWJpdCBETUEgZm9yICIKKwkJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOworCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOworCQl9CisJfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbid0IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGFkYXB0ZXIpKTsKKwlpZiAoIW5ldGRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdF9zbGljX3Byb2JlOworCX0KKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKwlpZiAocGNpX3VzaW5nX2RhYykKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKKworLyoJbWVtbWFwcGVkX2lvYWRkciA9ICAodTMyKWlvcmVtYXBfbm9jYWNoZShtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ki8KKwltZW1tYXBwZWRfaW9hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKKwkJCW1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCX0KKworCXNsaWNfY29uZmlnX3BjaShwY2lkZXYpOworCisJc2xpY19pbml0X2RyaXZlcigpOworCisJc2xpY19pbml0X2FkYXB0ZXIobmV0ZGV2LAorCQkJICBwY2lkZXYsIHBjaV90YmxfZW50cnksIG1lbW1hcHBlZF9pb2FkZHIsIGNhcmRzX2ZvdW5kKTsKKworCXN0YXR1cyA9IHNsaWNfY2FyZF9sb2NhdGUoYWRhcHRlcik7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbm5vdCBsb2NhdGUgY2FyZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCX0KKworCWNhcmQgPSBhZGFwdGVyLT5jYXJkOworCisJaWYgKCFhZGFwdGVyLT5hbGxvY2F0ZWQpIHsKKwkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKys7CisJCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDE7CisJfQorCisJc3RhdHVzID0gc2xpY19jYXJkX2luaXQoY2FyZCwgYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJY2FyZC0+c3RhdGUgPSBDQVJEX0ZBSUw7CisJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRkFJTDsKKwkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkZBSUxFRCBzdGF0dXNbJXhdXG4iLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOworCX0KKworCW5ldGRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlci0+bWVtb3J5YmFzZTsKKwluZXRkZXYtPmlycSA9IGFkYXB0ZXItPmlycTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc2xpY19uZXRkZXZfb3BzOworCisJc2xpY19kZWJ1Z19hZGFwdGVyX2NyZWF0ZShhZGFwdGVyKTsKKworCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X3VubWFwOworCX0KKworCWNhcmRzX2ZvdW5kKys7CisKKwlyZXR1cm4gc3RhdHVzOworCitlcnJfb3V0X3VubWFwOgorCWlvdW5tYXAobWVtbWFwcGVkX2lvYWRkcik7CitlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKK2Vycl9vdXRfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKK2Vycl9vdXRfZXhpdF9zbGljX3Byb2JlOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKK2Vycl9vdXRfZGlzYWJsZV9wY2k6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNsaWNfZHJpdmVyID0gewogCS5uYW1lID0gRFJWX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKaW5kZXggOWZmZWIzNi4uZjZiNDAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtODM1LDcgKzgzNSw3IEBACiAgKiBPcmlnaW5hbCBpbml0IGZ1bmN0aW9uIGNoYW5nZWQgdG8gcHJvYmUgbWV0aG9kIHRvIGJlIHVzZWQgYnkgcGNpX2RydgogICogcHJvY2VzcyB1c2VkIHRvIGRldGVjdCBjaGlwcyByZXBsYWNlZCB3aXRoIGtlcm5lbCBwcm9jZXNzIGluIHBjaV9kcnYKICAqLwotc3RhdGljIGludCBfX2luaXQgc210Y2ZiX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtdGNmYl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2Mzk4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9LY29uZmlnCkBAIC0wLDAgKzEsNyBAQAorY29uZmlnIFNPTE82WDEwCisJdHJpc3RhdGUgIlNvZnRsb2dpYyA2eDEwIE1QRUcgY29kZWMgY2FyZHMiCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fREVWICYmIFNORAorCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNvZnRsb2dpYyBiYXNlZCBNUEVHLTQgYW5kIGguMjY0IGNvZGVjCisJICBjb2RlYyBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTcwMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorc29sbzZ4MTAtb2Jqcwk6PSBzb2xvNjAxMC1jb3JlLm8gc29sbzYwMTAtaTJjLm8gc29sbzYwMTAtcDJtLm8gXAorCQkgICBzb2xvNjAxMC12NGwyLm8gc29sbzYwMTAtdHcyOC5vIHNvbG82MDEwLWdwaW8ubyBcCisJCSAgIHNvbG82MDEwLWRpc3AubyBzb2xvNjAxMC1lbmMubyBzb2xvNjAxMC12NGwyLWVuYy5vIFwKKwkJICAgc29sbzYwMTAtZzcyMy5vCisKK29iai0kKENPTkZJR19TT0xPNlgxMCkgOj0gc29sbzZ4MTAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmEyZWUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL1RPRE8KQEAgLTAsMCArMSwyOCBAQAorVE9ETyAoc3RhZ2luZyA9PiBtYWluKToKKworCSogY2hlY2twYXRjaC5wbCAoaGF2ZW4ndCBydW4gaXQgeWV0KQorCSogTGluZGVudCAoc2hvdWxkIGJlIGNsZWFuLCBidXQgY2hlY2spCisJKiBNb3Rpb24gZGV0ZWN0aW9uIGZsYWdzIG5lZWQgdG8gYmUgbW92ZWQgdG8gdjRsMgorCSogU29tZSBwcml2YXRlIENJRHMgbmVlZCB0byBiZSBtb3ZlZCB0byB2NGwyCisKK1RPRE8gKGdlbmVyYWwpOgorCisJKiBlbmNvZGVyIG9uL29mZiBjb250cm9scworCSogbXBlZyBjaWQgYml0cmF0ZSBtb2RlICh2YnIvY2JyKQorCSogbXBlZyBjaWQgYml0cmF0ZS9iaXRyYXRlLXBlYWsKKwkqIG1wZWcgZW5jb2RlIG9mIHVzZXIgZGF0YQorCSogbXBlZyBkZWNvZGUgb2YgdXNlciBkYXRhCisJKiBzd2l0Y2ggYmV0d2VlbiA0IGZyYW1lcy9pcnEgdG8gMSB3aGVuIHVzaW5nIG1qcGVnIChhbmQgdGhlbiBiYWNrCisJICB3aGVuIG5vdCkKKwkqIGltcGxlbWVudCBhIENJRCBjb250cm9sIGZvciBtb3Rpb24gYXJlYXMvdGhyZXNob2xkcworCSogaW1wbGVtZW50IENJRCBjb250cm9scyBmb3IgbW96YWljIGFyZWFzCisJKiBhbGxvdyBmb3IgaGlnaGVyIGxldmVsIG9mIGludGVydmFsIChmb3IgPCAxIGZwcykKKwkqIHNvdW5kOgorCSAgLSBpbXBsZW1lbnQgcGxheWJhY2sgdmlhIGV4dGVybmFsIHNvdW5kIGphY2sKKwkgIC0gaW1wbGVtZW50IGxvb3BiYWNrIG9mIGV4dGVybmFsIHNvdW5kIGphY2sgd2l0aCBpbmNvbWluZyBhdWRpbz8KKwkgIC0gaW1wbGVtZW50IHBhdXNlL3Jlc3VtZQorCSAgLSBjaGVjayBpbnRvIGphY2tpbmcgc291bmQgZnJvbSB0eDI4eHggY2hpcHMgZGlyZWN0bHkgKHRvIGF2b2lkCisJICAgIGcuNzIzLzhraHogbGltaXRhdGlvbnMpCisKK1BsYXNlIHNlbmQgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQgQ2MgQmVuIENvbGxpbnMKKzxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YzY3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtY29yZS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorI2luY2x1ZGUgInNvbG82MDEwLXR3MjguaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0bG9naWMgNjAxMCBNUDQgRW5jb2Rlci9EZWNvZGVyIFY0TDIvQUxTQSBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4iKTsKK01PRFVMRV9WRVJTSU9OKFNPTE82MDEwX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCit2b2lkIHNvbG82MDEwX2lycV9vbihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIG1hc2spCit7CisJc29sb19kZXYtPmlycV9tYXNrIHw9IG1hc2s7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX0VOQUJMRSwgc29sb19kZXYtPmlycV9tYXNrKTsKK30KKwordm9pZCBzb2xvNjAxMF9pcnFfb2ZmKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgbWFzaykKK3sKKwlzb2xvX2Rldi0+aXJxX21hc2sgJj0gfm1hc2s7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX0VOQUJMRSwgc29sb19kZXYtPmlycV9tYXNrKTsKK30KKworLyogWFhYIFdlIHNob3VsZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBzdWItZGV2aWNlIElTUidzICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29sbzYwMTBfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBkYXRhOworCXUzMiBzdGF0dXM7CisJaW50IGk7CisKKwlzdGF0dXMgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFUKTsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXR1cyAmIH5zb2xvX2Rldi0+aXJxX21hc2spIHsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsCisJCQkgICAgICAgc3RhdHVzICYgfnNvbG9fZGV2LT5pcnFfbWFzayk7CisJCXN0YXR1cyAmPSBzb2xvX2Rldi0+aXJxX21hc2s7CisJfQorCisJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX1BDSV9FUlIpIHsKKwkJdTMyIGVyciA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fUENJX0VSUik7CisJCXNvbG9fcDJtX2Vycm9yX2lzcihzb2xvX2RldiwgZXJyKTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX1BDSV9FUlIpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBTT0xPX05SX1AyTTsgaSsrKQorCQlpZiAoc3RhdHVzICYgU09MT19JUlFfUDJNKGkpKQorCQkJc29sb19wMm1faXNyKHNvbG9fZGV2LCBpKTsKKworCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9JSUMpCisJCXNvbG9faTJjX2lzcihzb2xvX2Rldik7CisKKwlpZiAoc3RhdHVzICYgU09MT19JUlFfVklERU9fSU4pCisJCXNvbG9fdmlkZW9faW5faXNyKHNvbG9fZGV2KTsKKworCS8qIENhbGwgdGhpcyBmaXJzdCBzbyBlbmMgZ2V0cyBkZXRlY3RlZCBmbGFnIHNldCAqLworCWlmIChzdGF0dXMgJiBTT0xPX0lSUV9NT1RJT04pCisJCXNvbG9fbW90aW9uX2lzcihzb2xvX2Rldik7CisKKwlpZiAoc3RhdHVzICYgU09MT19JUlFfRU5DT0RFUikKKwkJc29sb19lbmNfdjRsMl9pc3Ioc29sb19kZXYpOworCisJaWYgKHN0YXR1cyAmIFNPTE9fSVJRX0c3MjMpCisJCXNvbG9fZzcyM19pc3Ioc29sb19kZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3NvbG9fZGV2KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJaWYgKCFzb2xvX2RldikKKwkJcmV0dXJuOworCisJcGRldiA9IHNvbG9fZGV2LT5wZGV2OworCisJLyogSWYgd2UgbmV2ZXIgaW5pdGlhbGl6ZWQgdGhlIFBDSSBkZXZpY2UsIHRoZW4gbm90aGluZyBlbHNlCisJICogYmVsb3cgaGVyZSBuZWVkcyBjbGVhbnVwICovCisJaWYgKCFwZGV2KSB7CisJCWtmcmVlKHNvbG9fZGV2KTsKKwkJcmV0dXJuOworCX0KKworCS8qIEJyaW5nIGRvd24gdGhlIHN1Yi1kZXZpY2VzIGZpcnN0ICovCisJc29sb19nNzIzX2V4aXQoc29sb19kZXYpOworCXNvbG9fZW5jX3Y0bDJfZXhpdChzb2xvX2Rldik7CisJc29sb19lbmNfZXhpdChzb2xvX2Rldik7CisJc29sb192NGwyX2V4aXQoc29sb19kZXYpOworCXNvbG9fZGlzcF9leGl0KHNvbG9fZGV2KTsKKwlzb2xvX2dwaW9fZXhpdChzb2xvX2Rldik7CisJc29sb19wMm1fZXhpdChzb2xvX2Rldik7CisJc29sb19pMmNfZXhpdChzb2xvX2Rldik7CisKKwkvKiBOb3cgY2xlYW51cCB0aGUgUENJIGRldmljZSAqLworCWlmIChzb2xvX2Rldi0+cmVnX2Jhc2UpIHsKKwkJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgfjApOworCQlwY2lfaW91bm1hcChwZGV2LCBzb2xvX2Rldi0+cmVnX2Jhc2UpOworCQlmcmVlX2lycShwZGV2LT5pcnEsIHNvbG9fZGV2KTsKKwl9CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlrZnJlZShzb2xvX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNvbG82MDEwX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2OworCWludCByZXQ7CisJaW50IHNkcmFtOworCXU4IGNoaXBfaWQ7CisKKwlpZiAoKHNvbG9fZGV2ID0ga3phbGxvYyhzaXplb2YoKnNvbG9fZGV2KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc29sb19kZXYtPnBkZXYgPSBwZGV2OworCXNwaW5fbG9ja19pbml0KCZzb2xvX2Rldi0+cmVnX2lvX2xvY2spOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBzb2xvX2Rldik7CisKKwlpZiAoKHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlpZiAoKHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgU09MTzYwMTBfTkFNRSkpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHNvbG9fZGV2LT5yZWdfYmFzZSA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKSkgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfcHJvYmU7CisJfQorCisJY2hpcF9pZCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fQ0hJUF9PUFRJT04pICYKKwkJCQkJU09MT19DSElQX0lEX01BU0s7CisJc3dpdGNoIChjaGlwX2lkKSB7CisJCWNhc2UgNzoKKwkJCXNvbG9fZGV2LT5ucl9jaGFucyA9IDE2OworCQkJc29sb19kZXYtPm5yX2V4dCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJc29sb19kZXYtPm5yX2NoYW5zID0gODsKKwkJCXNvbG9fZGV2LT5ucl9leHQgPSAyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiSW52YWxpZCBjaGlwX2lkIDB4JTAyeCwgIgorCQkJCSAiZGVmYXVsdGluZyB0byA0IGNoYW5uZWxzXG4iLAorCQkJCSBjaGlwX2lkKTsKKwkJY2FzZSA1OgorCQkJc29sb19kZXYtPm5yX2NoYW5zID0gNDsKKwkJCXNvbG9fZGV2LT5ucl9leHQgPSAxOworCX0KKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgdG8gc3RhcnQgKi8KKwlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCB+MCk7CisKKwkvKiBJbml0aWFsIGdsb2JhbCBzZXR0aW5ncyAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1NZU19DRkcsIFNPTE9fU1lTX0NGR19TRFJBTTY0QklUIHwKKwkJICAgICAgIFNPTE9fU1lTX0NGR19JTlBVVERJVigyNSkgfAorCQkgICAgICAgU09MT19TWVNfQ0ZHX0ZFRURCQUNLRElWKChTT0xPX0NMT0NLX01IWiAqIDIpIC0gMikgfAorCQkgICAgICAgU09MT19TWVNfQ0ZHX09VVERJVigzKSk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVElNRVJfQ0xPQ0tfTlVNLCBTT0xPX0NMT0NLX01IWiAtIDEpOworCisJLyogUExMIGxvY2tpbmcgdGltZSBvZiAxbXMgKi8KKwltZGVsYXkoMSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNvbG82MDEwX2lzciwgSVJRRl9TSEFSRUQsIFNPTE82MDEwX05BTUUsCisJCQkgIHNvbG9fZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwkvKiBIYW5kbGUgdGhpcyBmcm9tIHRoZSBzdGFydCAqLworCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfUENJX0VSUik7CisKKwlpZiAoKHJldCA9IHNvbG9faTJjX2luaXQoc29sb19kZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJLyogU2V0dXAgdGhlIERNQSBlbmdpbmUgKi8KKwlzZHJhbSA9IChzb2xvX2Rldi0+bnJfY2hhbnMgPj0gOCkgPyAyIDogMTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19ETUFfQ1RSTCwKKwkJICAgICAgIFNPTE9fRE1BX0NUUkxfUkVGUkVTSF9DWUNMRSgxKSB8CisJCSAgICAgICBTT0xPX0RNQV9DVFJMX1NEUkFNX1NJWkUoc2RyYW0pIHwKKwkJICAgICAgIFNPTE9fRE1BX0NUUkxfU0RSQU1fQ0xLX0lOVkVSVCB8CisJCSAgICAgICBTT0xPX0RNQV9DVFJMX1JFQURfQ0xLX1NFTEVDVCB8CisJCSAgICAgICBTT0xPX0RNQV9DVFJMX0xBVEVOQ1koMSkpOworCisJaWYgKChyZXQgPSBzb2xvX3AybV9pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb19kaXNwX2luaXQoc29sb19kZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJaWYgKChyZXQgPSBzb2xvX2dwaW9faW5pdChzb2xvX2RldikpKQorCQlnb3RvIGZhaWxfcHJvYmU7CisKKwlpZiAoKHJldCA9IHNvbG9fdHcyOF9pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb192NGwyX2luaXQoc29sb19kZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJaWYgKChyZXQgPSBzb2xvX2VuY19pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb19lbmNfdjRsMl9pbml0KHNvbG9fZGV2KSkpCisJCWdvdG8gZmFpbF9wcm9iZTsKKworCWlmICgocmV0ID0gc29sb19nNzIzX2luaXQoc29sb19kZXYpKSkKKwkJZ290byBmYWlsX3Byb2JlOworCisJcmV0dXJuIDA7CisKK2ZhaWxfcHJvYmU6CisJZnJlZV9zb2xvX2Rldihzb2xvX2Rldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHNvbG82MDEwX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlmcmVlX3NvbG9fZGV2KHNvbG9fZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNvbG82MDEwX2lkX3RhYmxlW10gPSB7CisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TT0ZUTE9HSUMsIFBDSV9ERVZJQ0VfSURfU09MTzYwMTApfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JMVUVDSEVSUlksIFBDSV9ERVZJQ0VfSURfTkVVU09MT180KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CTFVFQ0hFUlJZLCBQQ0lfREVWSUNFX0lEX05FVVNPTE9fOSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWSwgUENJX0RFVklDRV9JRF9ORVVTT0xPXzE2KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CTFVFQ0hFUlJZLCBQQ0lfREVWSUNFX0lEX0NPTU1TT0xPXzQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JMVUVDSEVSUlksIFBDSV9ERVZJQ0VfSURfQ09NTVNPTE9fOSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWSwgUENJX0RFVklDRV9JRF9DT01NU09MT18xNil9LAorCXswLH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzb2xvNjAxMF9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzb2xvNjAxMF9wY2lfZHJpdmVyID0geworCS5uYW1lID0gU09MTzYwMTBfTkFNRSwKKwkuaWRfdGFibGUgPSBzb2xvNjAxMF9pZF90YWJsZSwKKwkucHJvYmUgPSBzb2xvNjAxMF9wY2lfcHJvYmUsCisJLnJlbW92ZSA9IHNvbG82MDEwX3BjaV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzb2xvNjAxMF9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzb2xvNjAxMF9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNvbG82MDEwX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzb2xvNjAxMF9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc29sbzYwMTBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc29sbzYwMTBfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWRpc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1kaXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1ZjAyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1kaXNwLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorCisjZGVmaW5lIFNPTE9fVkNMS19ERUxBWQkJCTMKKyNkZWZpbmUgU09MT19QUk9HUkVTU0lWRV9WU0laRQkJMTAyNAorCisjZGVmaW5lIFNPTE9fTU9UX1RIUkVTSF9XCQk2NAorI2RlZmluZSBTT0xPX01PVF9USFJFU0hfSAkJNjQKKyNkZWZpbmUgU09MT19NT1RfVEhSRVNIX1NJWkUJCTgxOTIKKyNkZWZpbmUgU09MT19NT1RfVEhSRVNIX1JFQUwJCShTT0xPX01PVF9USFJFU0hfVyAqIFNPTE9fTU9UX1RIUkVTSF9IKQorI2RlZmluZSBTT0xPX01PVF9GTEFHX1NJWkUJCTUxMgorI2RlZmluZSBTT0xPX01PVF9GTEFHX0FSRUEJCShTT0xPX01PVF9GTEFHX1NJWkUgKiAzMikKKworc3RhdGljIHVuc2lnbmVkIHZpZGVvX3R5cGU7Cittb2R1bGVfcGFyYW0odmlkZW9fdHlwZSwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX3R5cGUsICJ2aWRlb190eXBlICgwID0gTlRTQy9EZWZhdWx0LCAxID0gUEFMKSIpOworCitzdGF0aWMgdm9pZCBzb2xvX3Zpbl9jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19kZXYtPnZpbl9oc3RhcnQgPSA4OworCXNvbG9fZGV2LT52aW5fdnN0YXJ0ID0gMjsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1NZU19WQ0xLLAorCQkgICAgICAgU09MT19WQ0xLX1NFTEVDVCgyKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMTQxNV9ERUxBWShTT0xPX1ZDTEtfREVMQVkpIHwKKwkJICAgICAgIFNPTE9fVkNMS19WSU4xMjEzX0RFTEFZKFNPTE9fVkNMS19ERUxBWSkgfAorCQkgICAgICAgU09MT19WQ0xLX1ZJTjEwMTFfREVMQVkoU09MT19WQ0xLX0RFTEFZKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMDgwOV9ERUxBWShTT0xPX1ZDTEtfREVMQVkpIHwKKwkJICAgICAgIFNPTE9fVkNMS19WSU4wNjA3X0RFTEFZKFNPTE9fVkNMS19ERUxBWSkgfAorCQkgICAgICAgU09MT19WQ0xLX1ZJTjA0MDVfREVMQVkoU09MT19WQ0xLX0RFTEFZKSB8CisJCSAgICAgICBTT0xPX1ZDTEtfVklOMDIwM19ERUxBWShTT0xPX1ZDTEtfREVMQVkpIHwKKwkJICAgICAgIFNPTE9fVkNMS19WSU4wMDAxX0RFTEFZKFNPTE9fVkNMS19ERUxBWSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfQUNUX0lfUCwKKwkJICAgICAgIFNPTE9fVklfSF9TVEFSVChzb2xvX2Rldi0+dmluX2hzdGFydCkgfAorCQkgICAgICAgU09MT19WSV9WX1NUQVJUKHNvbG9fZGV2LT52aW5fdnN0YXJ0KSB8CisJCSAgICAgICBTT0xPX1ZJX1ZfU1RPUChzb2xvX2Rldi0+dmluX3ZzdGFydCArCisJCQkJICAgICAgc29sb19kZXYtPnZpZGVvX3ZzaXplKSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9BQ1RfSV9TLAorCQkgICAgICAgU09MT19WSV9IX1NUQVJUKHNvbG9fZGV2LT52b3V0X2hzdGFydCkgfAorCQkgICAgICAgU09MT19WSV9WX1NUQVJUKHNvbG9fZGV2LT52b3V0X3ZzdGFydCkgfAorCQkgICAgICAgU09MT19WSV9WX1NUT1Aoc29sb19kZXYtPnZvdXRfdnN0YXJ0ICsKKwkJCQkgICAgICBzb2xvX2Rldi0+dmlkZW9fdnNpemUpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX0FDVF9QLAorCQkgICAgICAgU09MT19WSV9IX1NUQVJUKDApIHwKKwkJICAgICAgIFNPTE9fVklfVl9TVEFSVCgxKSB8CisJCSAgICAgICBTT0xPX1ZJX1ZfU1RPUChTT0xPX1BST0dSRVNTSVZFX1ZTSVpFKSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9DSF9GT1JNQVQsCisJCSAgICAgICBTT0xPX1ZJX0ZEX1NFTF9NQVNLKDApIHwgU09MT19WSV9QUk9HX01BU0soMCkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfRk1UX0NGRywgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfUEFHRV9TVywgMik7CisKKwlpZiAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9OVFNDKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX0NPTkZJRywKKwkJCSAgICAgICBTT0xPX1ZJX1BCX1VTRVJfTU9ERSk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX1JBTkdFX0hWLAorCQkJICAgICAgIFNPTE9fVklfUEJfSFNJWkUoODU4KSB8IFNPTE9fVklfUEJfVlNJWkUoMjQ2KSk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX0FDVF9WLAorCQkJICAgICAgIFNPTE9fVklfUEJfVlNUQVJUKDQpIHwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX1ZTVE9QKDQgKyAyNDApKTsKKwl9IGVsc2UgeworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9QQl9DT05GSUcsCisJCQkgICAgICAgU09MT19WSV9QQl9VU0VSX01PREUgfCBTT0xPX1ZJX1BCX1BBTCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX1JBTkdFX0hWLAorCQkJICAgICAgIFNPTE9fVklfUEJfSFNJWkUoODY0KSB8IFNPTE9fVklfUEJfVlNJWkUoMjk0KSk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1BCX0FDVF9WLAorCQkJICAgICAgIFNPTE9fVklfUEJfVlNUQVJUKDQpIHwKKwkJCSAgICAgICBTT0xPX1ZJX1BCX1ZTVE9QKDQgKyAyODgpKTsKKwl9CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfUEJfQUNUX0gsIFNPTE9fVklfUEJfSFNUQVJUKDE2KSB8CisJCSAgICAgICBTT0xPX1ZJX1BCX0hTVE9QKDE2ICsgNzIwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZGlzcF9jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19kZXYtPnZvdXRfaHN0YXJ0ID0gNjsKKwlzb2xvX2Rldi0+dm91dF92c3RhcnQgPSA4OworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQk9SREVSX0xJTkVfQ09MT1IsCisJCSAgICAgICAoMHhhMCA8PCAyNCkgfCAoMHg4OCA8PCAxNikgfCAoMHhhMCA8PCA4KSB8IDB4ODgpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX0JPUkRFUl9GSUxMX0NPTE9SLAorCQkgICAgICAgKDB4MTAgPDwgMjQpIHwgKDB4OGYgPDwgMTYpIHwgKDB4MTAgPDwgOCkgfCAweDhmKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19CS0dfQ09MT1IsCisJCSAgICAgICAoMTYgPDwgMjQpIHwgKDEyOCA8PCAxNikgfCAoMTYgPDwgOCkgfCAxMjgpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRk1UX0VOQywKKwkJICAgICAgIHNvbG9fZGV2LT52aWRlb190eXBlIHwKKwkJICAgICAgIFNPTE9fVk9fVVNFUl9DT0xPUl9TRVRfTkFWIHwKKwkJICAgICAgIFNPTE9fVk9fTkFfQ09MT1JfWSgwKSB8CisJCSAgICAgICBTT0xPX1ZPX05BX0NPTE9SX0NCKDApIHwKKwkJICAgICAgIFNPTE9fVk9fTkFfQ09MT1JfQ1IoMCkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQUNUX0gsCisJCSAgICAgICBTT0xPX1ZPX0hfU1RBUlQoc29sb19kZXYtPnZvdXRfaHN0YXJ0KSB8CisJCSAgICAgICBTT0xPX1ZPX0hfU1RPUChzb2xvX2Rldi0+dm91dF9oc3RhcnQgKworCQkJCSAgICAgIHNvbG9fZGV2LT52aWRlb19oc2l6ZSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQUNUX1YsCisJCSAgICAgICBTT0xPX1ZPX1ZfU1RBUlQoc29sb19kZXYtPnZvdXRfdnN0YXJ0KSB8CisJCSAgICAgICBTT0xPX1ZPX1ZfU1RPUChzb2xvX2Rldi0+dm91dF92c3RhcnQgKworCQkJCSAgICAgIHNvbG9fZGV2LT52aWRlb192c2l6ZSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkFOR0VfSFYsCisJCSAgICAgICBTT0xPX1ZPX0hfTEVOKHNvbG9fZGV2LT52aWRlb19oc2l6ZSkgfAorCQkgICAgICAgU09MT19WT19WX0xFTihzb2xvX2Rldi0+dmlkZW9fdnNpemUpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9TVywgNSk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19ESVNQX0NUUkwsIFNPTE9fVk9fRElTUF9PTiB8CisJCSAgICAgICBTT0xPX1ZPX0RJU1BfRVJBU0VfQ09VTlQoOCkgfAorCQkgICAgICAgU09MT19WT19ESVNQX0JBU0UoU09MT19ESVNQX0VYVF9BRERSKHNvbG9fZGV2KSkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRElTUF9FUkFTRSwgU09MT19WT19ESVNQX0VSQVNFX09OKTsKKworCS8qIEVuYWJsZSBjaGFubmVscyB3ZSBzdXBwb3J0ICovCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfQ0hfRU5BLCAoMSA8PCBzb2xvX2Rldi0+bnJfY2hhbnMpIC0gMSk7CisKKwkvKiBEaXNhYmxlIHRoZSB3YXRjaGRvZyAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1dBVENIRE9HLCAwKTsKK30KKworc3RhdGljIGludCBzb2xvX2RtYV92aW5fcmVnaW9uKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgb2ZmLAorCQkJICAgICAgIHUxNiB2YWwsIGludCByZWdfc2l6ZSkKK3sKKwl1MTYgYnVmWzY0XTsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYnVmKSA+PiAxOyBpKyspCisJCWJ1ZltpXSA9IHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCByZWdfc2l6ZTsgaSArPSBzaXplb2YoYnVmKSkKKwkJcmV0IHw9IHNvbG9fcDJtX2RtYShzb2xvX2RldiwgU09MT19QMk1fRE1BX0lEX1ZJTiwgMSwgYnVmLAorCQkJCSAgICBTT0xPX01PVElPTl9FWFRfQUREUihzb2xvX2RldikgKyBvZmYgKyBpLAorCQkJCSAgICBzaXplb2YoYnVmKSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHNvbG9fc2V0X21vdGlvbl90aHJlc2hvbGQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCB1MTYgdmFsKQoreworCWlmIChjaCA+IHNvbG9fZGV2LT5ucl9jaGFucykKKwkJcmV0dXJuOworCisJc29sb19kbWFfdmluX3JlZ2lvbihzb2xvX2RldiwgU09MT19NT1RfRkxBR19BUkVBICsKKwkJCSAgICAoY2ggKiBTT0xPX01PVF9USFJFU0hfU0laRSAqIDIpLAorCQkJICAgIHZhbCwgU09MT19NT1RfVEhSRVNIX1JFQUwpOworfQorCisvKiBGaXJzdCA4ayBpcyBtb3Rpb24gZmxhZyAoNTEyIGJ5dGVzICogMTYpLiBGb2xsb3dpbmcgdGhhdCBpcyBhbiA4ays4aworICogdGhyZXNob2xkIGFuZCB3b3JraW5nIHRhYmxlIGZvciBlYWNoIGNoYW5uZWwuIEF0bGVhc3QgdGhhdCdzIHdoYXQgdGhlCisgKiBzcGVjIHNheXMuIEhvd2V2ZXIsIHRoaXMgY29kZSAodGFrZSBmcm9tIHJkaykgaGFzIHNvbWUgbXlzdGVyeSA4aworICogYmxvY2sgcmlnaHQgYWZ0ZXIgdGhlIGZsYWcgYXJlYSwgYmVmb3JlIHRoZSBmaXJzdCB0aHJlc2ggdGFibGUuICovCitzdGF0aWMgdm9pZCBzb2xvX21vdGlvbl9jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspIHsKKwkJLyogQ2xlYXIgbW90aW9uIGZsYWcgYXJlYSAqLworCQlzb2xvX2RtYV92aW5fcmVnaW9uKHNvbG9fZGV2LCBpICogU09MT19NT1RfRkxBR19TSVpFLCAweDAwMDAsCisJCQkJICAgIFNPTE9fTU9UX0ZMQUdfU0laRSk7CisKKwkJLyogQ2xlYXIgd29ya2luZyBjYWNoZSB0YWJsZSAqLworCQlzb2xvX2RtYV92aW5fcmVnaW9uKHNvbG9fZGV2LCBTT0xPX01PVF9GTEFHX0FSRUEgKworCQkJCSAgICBTT0xPX01PVF9USFJFU0hfU0laRSArCisJCQkJICAgIChpICogU09MT19NT1RfVEhSRVNIX1NJWkUgKiAyKSwKKwkJCQkgICAgMHgwMDAwLCBTT0xPX01PVF9USFJFU0hfUkVBTCk7CisKKwkJLyogU2V0IGRlZmF1bHQgdGhyZXNob2xkIHRhYmxlICovCisJCXNvbG9fc2V0X21vdGlvbl90aHJlc2hvbGQoc29sb19kZXYsIGksIFNPTE9fREVGX01PVF9USFJFU0gpOworCX0KKworCS8qIERlZmF1bHQgbW90aW9uIHNldHRpbmdzICovCisgICAgICAgIHNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVF9BRFIsIFNPTE9fVklfTU9USU9OX0VOKDApIHwKKwkJICAgICAgIChTT0xPX01PVElPTl9FWFRfQUREUihzb2xvX2RldikgPj4gMTYpKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RfQ1RSTCwKKwkJICAgICAgIFNPTE9fVklfTU9USU9OX0ZSQU1FX0NPVU5UKDMpIHwKKwkJICAgICAgIFNPTE9fVklfTU9USU9OX1NBTVBMRV9MRU5HVEgoc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMTYpCisJCSAgICAgICB8IC8vU09MT19WSV9NT1RJT05fSU5UUl9TVEFSVF9TVE9QIHwKKwkJICAgICAgIFNPTE9fVklfTU9USU9OX1NBTVBMRV9DT1VOVCgxMCkpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JPUkRFUiwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JBUiwgMCk7Cit9CisKK2ludCBzb2xvX2Rpc3BfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaTsKKworCXNvbG9fZGV2LT52aWRlb19oc2l6ZSA9IDcwNDsKKwlpZiAodmlkZW9fdHlwZSA9PSAwKSB7CisJCXNvbG9fZGV2LT52aWRlb190eXBlID0gU09MT19WT19GTVRfVFlQRV9OVFNDOworCQlzb2xvX2Rldi0+dmlkZW9fdnNpemUgPSAyNDA7CisJCXNvbG9fZGV2LT5mcHMgPSAzMDsKKwl9IGVsc2UgeworCQlzb2xvX2Rldi0+dmlkZW9fdHlwZSA9IFNPTE9fVk9fRk1UX1RZUEVfUEFMOworCQlzb2xvX2Rldi0+dmlkZW9fdnNpemUgPSAyODg7CisJCXNvbG9fZGV2LT5mcHMgPSAyNTsKKwl9CisKKwlzb2xvX3Zpbl9jb25maWcoc29sb19kZXYpOworCXNvbG9fbW90aW9uX2NvbmZpZyhzb2xvX2Rldik7CisJc29sb19kaXNwX2NvbmZpZyhzb2xvX2Rldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspCisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9PTihpKSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX2Rpc3BfZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlpbnQgaTsKKworCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX01PVElPTik7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19ESVNQX0NUUkwsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1pPT01fQ1RSTCwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRlJFRVpFX0NUUkwsIDApOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9DVFJMMChpKSwgMCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9DVFJMMShpKSwgMCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX1dJTl9PTihpKSwgMCk7CisJfQorCisJLyogU2V0IGRlZmF1bHQgYm9yZGVyICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQk9SREVSX1goaSksIDApOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQk9SREVSX1koaSksIDApOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQk9SREVSX0xJTkVfTUFTSywgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fQk9SREVSX0ZJTExfTUFTSywgMCk7CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19SRUNUQU5HTEVfQ1RSTCgwKSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkVDVEFOR0xFX1NUQVJUKDApLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19SRUNUQU5HTEVfU1RPUCgwKSwgMCk7CisJCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkVDVEFOR0xFX0NUUkwoMSksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZPX1JFQ1RBTkdMRV9TVEFSVCgxKSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fUkVDVEFOR0xFX1NUT1AoMSksIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWVuYy5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2Y2YwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZW5jLmMKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInNvbG82MDEwLmgiCisjaW5jbHVkZSAic29sbzYwMTAtb3NkLWZvbnQuaCIKKworI2RlZmluZSBDQVBUVVJFX01BWF9CQU5EV0lEVEgJCTMyCS8vIEQxIDRjaGFubmVsIChEMSA9PSA0KQorI2RlZmluZSBPU0dfQlVGRkVSX1NJWkUJCQkxMDI0CisKKyNkZWZpbmUgVklfUFJPR19IU0laRQkJCSgxMjgwIC0gMTYpCisjZGVmaW5lIFZJX1BST0dfVlNJWkUJCQkoMTAyNCAtIDE2KQorCitzdGF0aWMgdm9pZCBzb2xvX2NhcHR1cmVfY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpLCBqOworCXVuc2lnbmVkIGxvbmcgaGVpZ2h0OworCXVuc2lnbmVkIGxvbmcgd2lkdGg7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0JBU0UsCisJCSAgICAgICBTT0xPX0NBUF9NQVhfUEFHRShTT0xPX0NBUF9FWFRfTUFYX1BBR0UgKgorCQkJCQkgc29sb19kZXYtPm5yX2NoYW5zKSB8CisJCSAgICAgICBTT0xPX0NBUF9CQVNFX0FERFIoU09MT19DQVBfRVhUX0FERFIoc29sb19kZXYpID4+IDE2KSk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0JUVywKKwkJICAgICAgICgxIDw8IDE3KSB8IFNPTE9fQ0FQX1BST0dfQkFORFdJRFRIKDIpIHwKKwkJICAgICAgIFNPTE9fQ0FQX01BWF9CQU5EV0lEVEgoQ0FQVFVSRV9NQVhfQkFORFdJRFRIKSk7CisKKwkvKiBTZXQgc2NhbGUgMSwgOSBkaW1lbnNpb24gKi8KKwl3aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZTsKKwloZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemU7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1NDQUxFMSwKKwkJICAgICAgIFNPTE9fRElNX0hfTUJfTlVNKHdpZHRoIC8gMTYpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZSQU1FKGhlaWdodCAvIDgpIHwKKwkJICAgICAgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKGhlaWdodCAvIDE2KSk7CisKKwkvKiBTZXQgc2NhbGUgMiwgMTAgZGltZW5zaW9uICovCisJd2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyAyOworCWhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19ESU1fU0NBTEUyLAorCQkgICAgICAgU09MT19ESU1fSF9NQl9OVU0od2lkdGggLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUoaGVpZ2h0IC8gOCkgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRklFTEQoaGVpZ2h0IC8gMTYpKTsKKworCS8qIFNldCBzY2FsZSAzLCAxMSBkaW1lbnNpb24gKi8KKwl3aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDI7CisJaGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplIC8gMjsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19ESU1fU0NBTEUzLAorCQkgICAgICAgU09MT19ESU1fSF9NQl9OVU0od2lkdGggLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUoaGVpZ2h0IC8gOCkgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRklFTEQoaGVpZ2h0IC8gMTYpKTsKKworCS8qIFNldCBzY2FsZSA0LCAxMiBkaW1lbnNpb24gKi8KKwl3aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDM7CisJaGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplIC8gMzsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19ESU1fU0NBTEU0LAorCQkgICAgICAgU09MT19ESU1fSF9NQl9OVU0od2lkdGggLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUoaGVpZ2h0IC8gOCkgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRklFTEQoaGVpZ2h0IC8gMTYpKTsKKworCS8qIFNldCBzY2FsZSA1LCAxMyBkaW1lbnNpb24gKi8KKwl3aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZSAvIDQ7CisJaGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplIC8gMjsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19ESU1fU0NBTEU1LAorCQkgICAgICAgU09MT19ESU1fSF9NQl9OVU0od2lkdGggLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUoaGVpZ2h0IC8gOCkgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRklFTEQoaGVpZ2h0IC8gMTYpKTsKKworCS8qIFByb2dyZXNzaXZlICovCisJd2lkdGggPSBWSV9QUk9HX0hTSVpFOworCWhlaWdodCA9IFZJX1BST0dfVlNJWkU7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fRElNX1BST0csCisJCSAgICAgICBTT0xPX0RJTV9IX01CX05VTSh3aWR0aCAvIDE2KSB8CisJCSAgICAgICBTT0xPX0RJTV9WX01CX05VTV9GUkFNRShoZWlnaHQgLyAxNikgfAorCQkgICAgICAgU09MT19ESU1fVl9NQl9OVU1fRklFTEQoaGVpZ2h0IC8gMTYpKTsKKworCS8qIENsZWFyIE9TRCAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX09TRF9DSCwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfT1NEX0JBU0UsCisJCSAgICAgICBTT0xPX0VPU0RfRVhUX0FERFIoc29sb19kZXYpID4+IDE2KTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9PU0RfQ0xSLAorCQkgICAgICAgMHhGMCA8PCAxNiB8IDB4ODAgPDwgOCB8IDB4ODApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX09TRF9PUFQsIDApOworCisJLyogQ2xlYXIgT1NHIGJ1ZmZlciAqLworCWJ1ZiA9IGt6YWxsb2MoT1NHX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBTT0xPX0VPU0RfRVhUX1NJWkU7IGogKz0gT1NHX0JVRkZFUl9TSVpFKSB7CisJCQlzb2xvX3AybV9kbWEoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9NUDRFLCAxLCBidWYsCisJCQkJICAgICBTT0xPX0VPU0RfRVhUX0FERFIoc29sb19kZXYpICsKKwkJCQkgICAgIChpICogU09MT19FT1NEX0VYVF9TSVpFKSArIGosCisJCQkJICAgICBPU0dfQlVGRkVSX1NJWkUpOworCQl9CisJfQorCWtmcmVlKGJ1Zik7Cit9CisKK2ludCBzb2xvX29zZF9wcmludChzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYykKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKwljaGFyICpzdHIgPSBzb2xvX2VuYy0+b3NkX3RleHQ7CisJdTggKmJ1ZjsKKwl1MzIgcmVnID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19WRV9PU0RfQ0gpOworCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKKwlpbnQgaSwgajsKKwlpbnQgeCA9IDEsIHkgPSAxOworCisJaWYgKGxlbiA9PSAwKSB7CisJCXJlZyAmPSB+KDEgPDwgc29sb19lbmMtPmNoKTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfT1NEX0NILCByZWcpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWYgPSBremFsbG9jKFNPTE9fRU9TRF9FWFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CisJCQlidWZbKGoqMikgKyAoaSUyKSArICgoeCArIChpLzIpKSAqIDMyKSArICh5ICogMjA0OCldID0KKwkJCQkoc29sb19vc2RfZm9udFsoc3RyW2ldICogNCkgKyAoaiAvIDQpXQorCQkJCQk+PiAoKDMgLSAoaiAlIDQpKSAqIDgpKSAmIDB4ZmY7CisJCX0KKwl9CisKKwlzb2xvX3AybV9kbWEoc29sb19kZXYsIDAsIDEsIGJ1ZiwgU09MT19FT1NEX0VYVF9BRERSKHNvbG9fZGV2KSArCisJCSAgICAgKHNvbG9fZW5jLT5jaCAqIFNPTE9fRU9TRF9FWFRfU0laRSksIFNPTE9fRU9TRF9FWFRfU0laRSk7CisgICAgICAgIHJlZyB8PSAoMSA8PCBzb2xvX2VuYy0+Y2gpOworICAgICAgICBzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9PU0RfQ0gsIHJlZyk7CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fanBlZ19jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfSlBFR19RUF9UQkwsCisJCSAgICAgICAoMiA8PCAyNCkgfCAoMiA8PCAxNikgfCAoMiA8PCA4KSB8ICgyIDw8IDApKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9KUEVHX1FQX0NIX0wsIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0pQRUdfUVBfQ0hfSCwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfSlBFR19DRkcsCisJCShTT0xPX0pQRUdfRVhUX1NJWkUoc29sb19kZXYpICYgMHhmZmZmMDAwMCkgfAorCQkoKFNPTE9fSlBFR19FWFRfQUREUihzb2xvX2RldikgPj4gMTYpICYgMHgwMDAwZmZmZikpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0pQRUdfQ1RSTCwgMHhmZmZmZmZmZik7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fbXA0ZV9jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwkvKiBXZSBjYW4gb25seSB1c2UgVkVfSU5UUl9DVFJMKDApIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBtanBlZyAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NGRzAsCisJCSAgICAgICBTT0xPX1ZFX0lOVFJfQ1RSTCgwKSB8CisJCSAgICAgICBTT0xPX1ZFX0JMT0NLX1NJWkUoU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSA+PiAxNikgfAorCQkgICAgICAgU09MT19WRV9CTE9DS19CQVNFKFNPTE9fTVA0RV9FWFRfQUREUihzb2xvX2RldikgPj4gMTYpKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NGRzEsCisJCSAgICAgICBTT0xPX1ZFX0JZVEVfQUxJR04oMikgfAorCQkgICAgICAgU09MT19WRV9JTlNFUlRfSU5ERVggfCBTT0xPX1ZFX01PVElPTl9NT0RFKDApKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX1dNUktfUE9MWSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfVk1SS19JTklUX0tFWSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfV01SS19TVFJMLCAwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9FTkNSWVBfUE9MWSwgMCk7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfRU5DUllQX0lOSVQsIDApOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQVRUUiwKKwkJICAgICAgIFNPTE9fVkVfTElUVExFX0VORElBTiB8CisJCSAgICAgICBTT0xPX0NPTVBfQVRUUl9GQ09ERSgxKSB8CisJCSAgICAgICBTT0xPX0NPTVBfVElNRV9JTkMoMCkgfAorCQkgICAgICAgU09MT19DT01QX1RJTUVfV0lEVEgoMTUpIHwKKwkJICAgICAgIFNPTE9fRENUX0lOVEVSVkFMKDM2IC8gNCkpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKQorCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9SRUZfQkFTRShpKSwKKwkJCSAgICAgICAoU09MT19FUkVGX0VYVF9BRERSKHNvbG9fZGV2KSArCisJCQkgICAgICAgKGkgKiBTT0xPX0VSRUZfRVhUX1NJWkUpKSA+PiAxNik7Cit9CisKK2ludCBzb2xvX2VuY19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJc29sb19jYXB0dXJlX2NvbmZpZyhzb2xvX2Rldik7CisJc29sb19tcDRlX2NvbmZpZyhzb2xvX2Rldik7CisJc29sb19qcGVnX2NvbmZpZyhzb2xvX2Rldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspIHsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX1NDQUxFKGkpLCAwKTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX0NPTVBfRU5BX0UoaSksIDApOworCX0KKworCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfRU5DT0RFUik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX2VuY19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfRU5DT0RFUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspIHsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX1NDQUxFKGkpLCAwKTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX0NPTVBfRU5BX0UoaSksIDApOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1nNzIzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZzcyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4Mjg0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZzcyMy5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorI2luY2x1ZGUgInNvbG82MDEwLXR3MjguaCIKKworI2RlZmluZSBHNzIzX0lOVFJfT1JERVIJCTAKKyNkZWZpbmUgRzcyM19GRE1BX1BBR0VTCQkzMgorI2RlZmluZSBHNzIzX1BFUklPRF9CWVRFUwk0OAorI2RlZmluZSBHNzIzX1BFUklPRF9CTE9DSwkxMDI0CisjZGVmaW5lIEc3MjNfRlJBTUVTX1BFUl9QQUdFCTQ4CisKKy8qIFNldHMgdXAgY2hhbm5lbHMgMTYtMTkgZm9yIGRlY29kaW5nIGFuZCAwLTE1IGZvciBlbmNvZGluZyAqLworI2RlZmluZSBPVVRNT0RFX01BU0sJCTB4MzAwCisKKyNkZWZpbmUgU0FNUExFUkFURQkJODAwMAorI2RlZmluZSBCSVRSQVRFCQkJMjUKKworLyogVGhlIHNvbG8gd3JpdGVzIHRvIDFrIGJ5dGUgcGFnZXMsIDMyIHBhZ2VzLCBpbiB0aGUgZG1hLiBFYWNoIDFrIHBhZ2UKKyAqIGlzIGJyb2tlbiBkb3duIHRvIDIwICogNDggYnl0ZSByZWdpb25zIChvbmUgZm9yIGVhY2ggY2hhbm5lbCBwb3NzaWJsZSkKKyAqIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgYmVpbmcgZHVtbXkgZGF0YS4gKi8KKyNkZWZpbmUgTUFYX0JVRkZFUgkJKEc3MjNfUEVSSU9EX0JZVEVTICogUEVSSU9EU19NQVgpCisjZGVmaW5lIElSUV9QQUdFUwkJNCAvLyAwIC0gNAorI2RlZmluZSBQRVJJT0RTX01JTgkJKDEgPDwgSVJRX1BBR0VTKQorI2RlZmluZSBQRVJJT0RTX01BWAkJRzcyM19GRE1BX1BBR0VTCisKK3N0cnVjdCBzb2xvX3NuZF9wY20geworCWludAkJCQlvbjsKKwlzcGlubG9ja190CQkJbG9jazsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2CQkqc29sb19kZXY7CisJdW5zaWduZWQgY2hhcgkJCWc3MjNfYnVmW0c3MjNfUEVSSU9EX0JZVEVTXTsKK307CisKK3N0YXRpYyB2b2lkIHNvbG9fZzcyM19jb25maWcoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGNsa19kaXY7CisKKwljbGtfZGl2ID0gU09MT19DTE9DS19NSFogLyAoU0FNUExFUkFURSAqIChCSVRSQVRFICogMikgKiAyKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0FVRElPX1NBTVBMRSwKKwkJICAgICAgIFNPTE9fQVVESU9fQklUUkFURShCSVRSQVRFKSB8CisJCSAgICAgICBTT0xPX0FVRElPX0NMS19ESVYoY2xrX2RpdikpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQVVESU9fRkRNQV9JTlRSLAorCQkgICAgICBTT0xPX0FVRElPX0ZETUFfSU5URVJWQUwoSVJRX1BBR0VTKSB8CisJCSAgICAgIFNPTE9fQVVESU9fSU5UUl9PUkRFUihHNzIzX0lOVFJfT1JERVIpIHwKKwkJICAgICAgU09MT19BVURJT19GRE1BX0JBU0UoU09MT19HNzIzX0VYVF9BRERSKHNvbG9fZGV2KSA+PiAxNikpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQVVESU9fQ09OVFJPTCwKKwkJICAgICAgIFNPTE9fQVVESU9fRU5BQkxFIHwgU09MT19BVURJT19JMlNfTU9ERSB8CisJCSAgICAgICBTT0xPX0FVRElPX0kyU19NVUxUSSgzKSB8IFNPTE9fQVVESU9fTU9ERShPVVRNT0RFX01BU0spKTsKK30KKwordm9pZCBzb2xvX2c3MjNfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCXN0cnVjdCBzbmRfcGNtX3N0ciAqcHN0ciA9CisJCSZzb2xvX2Rldi0+c25kX3BjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3M7CisJc3RydWN0IHNvbG9fc25kX3BjbSAqc29sb19wY207CisKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19JUlFfU1RBVCwgU09MT19JUlFfRzcyMyk7CisKKwlmb3IgKHNzID0gcHN0ci0+c3Vic3RyZWFtOyBzcyAhPSBOVUxMOyBzcyA9IHNzLT5uZXh0KSB7CisJCWlmIChzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogVGhpcyBtZWFucyBvcGVuKCkgaGFzbid0IGJlZW4gY2FsbGVkIG9uIHRoaXMgb25lICovCisJCWlmIChzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKSA9PSBzb2xvX2RldikKKwkJCWNvbnRpbnVlOworCisJCS8qIEhhdmVuJ3QgdHJpZ2dlcmVkIGEgc3RhcnQgeWV0ICovCisJCXNvbG9fcGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJCWlmICghc29sb19wY20tPm9uKQorCQkJY29udGludWU7CisKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzcyk7CisJfQorfQorCitzdGF0aWMgaW50IHNuZF9zb2xvX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzLAorCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzcywgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKK30KKworc3RhdGljIGludCBzbmRfc29sb19od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3MpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3NvbG9fcGNtX2h3ID0geworCS5pbmZvCQkJPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKwkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1U4LAorCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMCwKKwkucmF0ZV9taW4JCT0gODAwMCwKKwkucmF0ZV9tYXgJCT0gODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDEsCisJLmNoYW5uZWxzX21heAkJPSAxLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gTUFYX0JVRkZFUiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IEc3MjNfUEVSSU9EX0JZVEVTLAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRzcyM19QRVJJT0RfQllURVMsCisJLnBlcmlvZHNfbWluCQk9IFBFUklPRFNfTUlOLAorCS5wZXJpb2RzX21heAkJPSBQRVJJT0RTX01BWCwKK307CisKK3N0YXRpYyBpbnQgc25kX3NvbG9fcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCXN0cnVjdCBzb2xvX3NuZF9wY20gKnNvbG9fcGNtOworCisJc29sb19wY20gPSBremFsbG9jKHNpemVvZigqc29sb19wY20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoc29sb19wY20gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmc29sb19wY20tPmxvY2spOworCXNvbG9fcGNtLT5zb2xvX2RldiA9IHNvbG9fZGV2OworCXNzLT5ydW50aW1lLT5odyA9IHNuZF9zb2xvX3BjbV9odzsKKworCXNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpID0gc29sb19wY207CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29sb19wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzcykKK3sKKwlzdHJ1Y3Qgc29sb19zbmRfcGNtICpzb2xvX3BjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3MpOworCisJc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcykgPSBzb2xvX3BjbS0+c29sb19kZXY7CisJa2ZyZWUoc29sb19wY20pOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2xvX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MsIGludCBjbWQpCit7CisJc3RydWN0IHNvbG9fc25kX3BjbSAqc29sb19wY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fcGNtLT5zb2xvX2RldjsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmc29sb19wY20tPmxvY2spOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoc29sb19wY20tPm9uID09IDApIHsKKwkJCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHVzZXIsIHN3aXRjaCBvbiBpbnRlcnJ1cHRzICovCisJCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnNvbG9fZGV2LT5zbmRfdXNlcnMpID09IDEpCisJCQkJc29sbzYwMTBfaXJxX29uKHNvbG9fZGV2LCBTT0xPX0lSUV9HNzIzKTsKKwkJCXNvbG9fcGNtLT5vbiA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlpZiAoc29sb19wY20tPm9uKSB7CisJCQkvKiBJZiB0aGlzIHdhcyBvdXIgbGFzdCB1c2VyLCBzd2l0Y2ggdGhlbSBvZmYgKi8KKwkJCWlmIChhdG9taWNfZGVjX3JldHVybigmc29sb19kZXYtPnNuZF91c2VycykgPT0gMCkKKwkJCQlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCBTT0xPX0lSUV9HNzIzKTsKKwkJCXNvbG9fcGNtLT5vbiA9IDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlzcGluX3VubG9jaygmc29sb19wY20tPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzbmRfc29sb19wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzKQoreworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF9zb2xvX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MpCit7CisJc3RydWN0IHNvbG9fc25kX3BjbSAqc29sb19wY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHNzKTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fcGNtLT5zb2xvX2RldjsKKwlzbmRfcGNtX3VmcmFtZXNfdCBpZHggPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX0FVRElPX1NUQSkgJiAweDFmOworCisJcmV0dXJuIGlkeCAqIEc3MjNfRlJBTUVTX1BFUl9QQUdFOworfQorCitzdGF0aWMgaW50IHNuZF9zb2xvX3BjbV9jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3MsIGludCBjaGFubmVsLAorCQkJICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgX191c2VyICpkc3QsCisJCQkgICAgIHNuZF9wY21fdWZyYW1lc190IGNvdW50KQoreworCXN0cnVjdCBzb2xvX3NuZF9wY20gKnNvbG9fcGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzcyk7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX3BjbS0+c29sb19kZXY7CisJaW50IGVyciwgaTsKKworCWZvciAoaSA9IDA7IGkgPCAoY291bnQgLyBHNzIzX0ZSQU1FU19QRVJfUEFHRSk7IGkrKykgeworCQlpbnQgcGFnZSA9IChwb3MgLyBHNzIzX0ZSQU1FU19QRVJfUEFHRSkgKyBpOworCisJCWVyciA9IHNvbG9fcDJtX2RtYShzb2xvX2RldiwgU09MT19QMk1fRE1BX0lEX0c3MjNFLCAwLAorCQkJCSAgIHNvbG9fcGNtLT5nNzIzX2J1ZiwKKwkJCQkgICBTT0xPX0c3MjNfRVhUX0FERFIoc29sb19kZXYpICsKKwkJCQkgICAocGFnZSAqIEc3MjNfUEVSSU9EX0JMT0NLKSArCisJCQkJICAgKHNzLT5udW1iZXIgKiBHNzIzX1BFUklPRF9CWVRFUyksCisJCQkJICAgRzcyM19QRVJJT0RfQllURVMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBjb3B5X3RvX3VzZXIoZHN0ICsgKGkgKiBHNzIzX1BFUklPRF9CWVRFUyksCisJCQkJICAgc29sb19wY20tPmc3MjNfYnVmLCBHNzIzX1BFUklPRF9CWVRFUyk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7IAorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9zb2xvX3BjbV9vcHMgPSB7CisJLm9wZW4gPSBzbmRfc29sb19wY21fb3BlbiwKKwkuY2xvc2UgPSBzbmRfc29sb19wY21fY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9zb2xvX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNuZF9zb2xvX2h3X2ZyZWUsCisJLnByZXBhcmUgPSBzbmRfc29sb19wY21fcHJlcGFyZSwKKwkudHJpZ2dlciA9IHNuZF9zb2xvX3BjbV90cmlnZ2VyLAorCS5wb2ludGVyID0gc25kX3NvbG9fcGNtX3BvaW50ZXIsCisJLmNvcHkgPSBzbmRfc29sb19wY21fY29weSwKK307CisKK3N0YXRpYyBpbnQgc25kX3NvbG9fY2FwdHVyZV92b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICppbmZvKQoreworCWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJaW5mby0+Y291bnQgPSAxOworCWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwlpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE1OworCWluZm8tPnZhbHVlLmludGVnZXIuc3RlcCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfc29sb19jYXB0dXJlX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXU4IGNoID0gdmFsdWUtPmlkLm51bWlkIC0gMTsKKworCXZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdHcyOF9nZXRfYXVkaW9fZ2Fpbihzb2xvX2RldiwgY2gpOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdmFsdWUpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdTggY2ggPSB2YWx1ZS0+aWQubnVtaWQgLSAxOworICAgICAgICB1OCBvbGRfdmFsOworCisgICAgICAgIG9sZF92YWwgPSB0dzI4X2dldF9hdWRpb19nYWluKHNvbG9fZGV2LCBjaCk7CisJaWYgKG9sZF92YWwgPT0gdmFsdWUtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCXJldHVybiAwOworCisJdHcyOF9zZXRfYXVkaW9fZ2Fpbihzb2xvX2RldiwgY2gsIHZhbHVlLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKKworICAgICAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIkNhcHR1cmUgVm9sdW1lIiwKKwkuaW5mbyA9IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lX2luZm8sCisJLmdldCA9IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lX2dldCwKKwkucHV0ID0gc25kX3NvbG9fY2FwdHVyZV92b2x1bWVfcHV0LAorfTsKKworc3RhdGljIGludCBzb2xvX3NuZF9wY21faW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBzb2xvX2Rldi0+c25kX2NhcmQ7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnNzOworCWludCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSBzbmRfcGNtX25ldyhjYXJkLCBjYXJkLT5kcml2ZXIsIDAsIDAsIHNvbG9fZGV2LT5ucl9jaGFucywKKwkJCSAgJnBjbSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkmc25kX3NvbG9fcGNtX29wcyk7CisKKwlzbmRfcGNtX2NoaXAocGNtKSA9IHNvbG9fZGV2OworCXBjbS0+aW5mb19mbGFncyA9IDA7CisJc3RyY3B5KHBjbS0+bmFtZSwgY2FyZC0+c2hvcnRuYW1lKTsKKworCWZvciAoaSA9IDAsIHNzID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOworCSAgICAgc3M7IHNzID0gc3MtPm5leHQsIGkrKykKKwkJc3ByaW50Zihzcy0+bmFtZSwgIkNhbWVyYSAjJWQgQXVkaW8iLCBpKTsKKworCXJldCA9IHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLAorCQkJCQlTTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTLAorCQkJCQlzbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKSwKKwkJCQkJTUFYX0JVRkZFUiwgTUFYX0JVRkZFUik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzb2xvX2Rldi0+c25kX3BjbSA9IHBjbTsKKworCXJldHVybiAwOworfQorCitpbnQgc29sb19nNzIzX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7IE5VTEwgfTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcga2N0bDsKKwljaGFyIG5hbWVbMzJdOworCWludCByZXQ7CisKKwlhdG9taWNfc2V0KCZzb2xvX2Rldi0+c25kX3VzZXJzLCAwKTsKKworCS8qIEFsbG93cyBmb3IgZWFzaWVyIG1hcHBpbmcgYmV0d2VlbiB2aWRlbyBhbmQgYXVkaW8gKi8KKwlzcHJpbnRmKG5hbWUsICJTb2Z0bG9naWMlZCIsIHNvbG9fZGV2LT52ZmQtPm51bSk7CisKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBuYW1lLCBUSElTX01PRFVMRSwgMCwKKwkJCSAgICAgICZzb2xvX2Rldi0+c25kX2NhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2FyZCA9IHNvbG9fZGV2LT5zbmRfY2FyZDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsIFNPTE82MDEwX05BTUUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTT0xPLTYwMTAgQXVkaW8iKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgb24gJXMgSVJRICVkIiwgY2FyZC0+c2hvcnRuYW1lLAorCQlwY2lfbmFtZShzb2xvX2Rldi0+cGRldiksIHNvbG9fZGV2LT5wZGV2LT5pcnEpOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnNvbG9fZGV2LT5wZGV2LT5kZXYpOworCisJcmV0ID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBzb2xvX2RldiwgJm9wcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gc25kX2Vycm9yOworCisJLyogTWl4ZXIgY29udHJvbHMgKi8KKwlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiU09MTy02MDEwIik7CisJa2N0bCA9IHNuZF9zb2xvX2NhcHR1cmVfdm9sdW1lOworCWtjdGwuY291bnQgPSBzb2xvX2Rldi0+bnJfY2hhbnM7CisgICAgICAgIHJldCA9IHNuZF9jdGxfYWRkKGNhcmQsIHNuZF9jdGxfbmV3MSgma2N0bCwgc29sb19kZXYpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgocmV0ID0gc29sb19zbmRfcGNtX2luaXQoc29sb19kZXYpKSA8IDApCisJCWdvdG8gc25kX2Vycm9yOworCisJaWYgKChyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPCAwKQorCQlnb3RvIHNuZF9lcnJvcjsKKworCXNvbG9fZzcyM19jb25maWcoc29sb19kZXYpOworCisJZGV2X2luZm8oJnNvbG9fZGV2LT5wZGV2LT5kZXYsICJBbHNhIHNvdW5kIGNhcmQgYXMgJXNcbiIsIG5hbWUpOworCisJcmV0dXJuIDA7CisKK3NuZF9lcnJvcjoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgc29sb19nNzIzX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQVVESU9fQ09OVFJPTCwgMCk7CisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfRzcyMyk7CisKKwlzbmRfY2FyZF9mcmVlKHNvbG9fZGV2LT5zbmRfY2FyZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtZ3Bpby5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY3YTcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWdwaW8uYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInNvbG82MDEwLmgiCisKK3N0YXRpYyB2b2lkIHNvbG9fZ3Bpb19tb2RlKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LAorCQkJICAgdW5zaWduZWQgaW50IHBvcnRfbWFzaywgdW5zaWduZWQgaW50IG1vZGUpCit7CisJaW50IHBvcnQ7CisJdW5zaWduZWQgaW50IHJldDsKKworCXJldCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fR1BJT19DT05GSUdfMCk7CisKKwkvKiBUbyBzZXQgZ3BpbyAqLworCWZvciAocG9ydCA9IDA7IHBvcnQgPCAxNjsgcG9ydCsrKSB7CisJCWlmICghKCgxIDw8IHBvcnQpICYgcG9ydF9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCXJldCAmPSAofigzIDw8IChwb3J0IDw8IDEpKSk7CisJCXJldCB8PSAoKG1vZGUgJiAzKSA8PCAocG9ydCA8PCAxKSk7CisJfQorCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fR1BJT19DT05GSUdfMCwgcmV0KTsKKworCS8qIFRvIHNldCBleHRlbmRlZCBncGlvIC0gc2Vuc29yICovCisJcmV0ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19HUElPX0NPTkZJR18xKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCAxNjsgcG9ydCsrKSB7CisJCWlmICghKCgxIDw8IChwb3J0ICsgMTYpKSAmIHBvcnRfbWFzaykpCisJCQljb250aW51ZTsKKworCQlpZiAoIW1vZGUpCisJCQlyZXQgJj0gfigxIDw8IHBvcnQpOworCQllbHNlCisJCQlyZXQgfD0gMSA8PCBwb3J0OworCX0KKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0dQSU9fQ09ORklHXzEsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZ3Bpb19zZXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19HUElPX0RBVEFfT1VULAorCQkgICAgICAgc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19HUElPX0RBVEFfT1VUKSB8IHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc29sb19ncGlvX2NsZWFyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fR1BJT19EQVRBX09VVCwKKwkJICAgICAgIHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fR1BJT19EQVRBX09VVCkgJiB+dmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2dwaW9fY29uZmlnKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCS8qIFZpZGVvIHJlc2V0ICovCisJc29sb19ncGlvX21vZGUoc29sb19kZXYsIDB4MzAsIDEpOworCXNvbG9fZ3Bpb19jbGVhcihzb2xvX2RldiwgMHgzMCk7CisJdWRlbGF5KDEwMCk7CisJc29sb19ncGlvX3NldChzb2xvX2RldiwgMHgzMCk7CisJdWRlbGF5KDEwMCk7CisKKwkvKiBXYXJuaW5nOiBEb24ndCB0b3VjaCB0aGUgbmV4dCBsaW5lIHVubGVzcyB5b3UncmUgc3VyZSBvZiB3aGF0CisJICogeW91J3JlIGRvaW5nOiBmaXJzdCBmb3VyIGdwaW8gWzAtM10gYXJlIHVzZWQgZm9yIHZpZGVvLiAqLworCXNvbG9fZ3Bpb19tb2RlKHNvbG9fZGV2LCAweDBmLCAyKTsKKworCS8qIFdlIHVzZSBiaXQgOC0xNSBvZiBTT0xPX0dQSU9fQ09ORklHXzAgZm9yIHJlbGF5IHB1cnBvc2VzICovCisJc29sb19ncGlvX21vZGUoc29sb19kZXYsIDB4ZmYwMCwgMSk7CisKKwkvKiBJbml0aWFsbHkgc2V0IHJlbGF5IHN0YXR1cyB0byAwICovCisJc29sb19ncGlvX2NsZWFyKHNvbG9fZGV2LCAweGZmMDApOworfQorCitpbnQgc29sb19ncGlvX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisgICAgICAgIHNvbG9fZ3Bpb19jb25maWcoc29sb19kZXYpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX2dwaW9fZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlzb2xvX2dwaW9fY2xlYXIoc29sb19kZXYsIDB4MzApOworCXNvbG9fZ3Bpb19jb25maWcoc29sb19kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWkyYy5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjg2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtaTJjLmMKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIFhYWDogVGhlIFNPTE82MDEwIGkyYyBkb2VzIG5vdCBoYXZlIHNlcGFyYXRlIGludGVycnVwdHMgZm9yIGVhY2ggaTJjCisgKiBjaGFubmVsLiBUaGUgYnVzIGNhbiBvbmx5IGhhbmRsZSBvbmUgaTJjIGV2ZW50IGF0IGEgdGltZS4gVGhlIGJlbG93IGhhbmRsZXMKKyAqIHRoaXMgYWxsIHdyb25nLiBXZSBzaG91bGQgYmUgdXNpbmcgdGhlIHN0YXR1cyByZWdpc3RlcnMgdG8gc2VlIGlmIHRoZSBidXMKKyAqIGlzIGluIHVzZSwgYW5kIGhhdmUgYSBnbG9iYWwgbG9jayB0byBjaGVjayB0aGUgc3RhdHVzIHJlZ2lzdGVyLiBBbHNvLAorICogdGhlIGJ1bGsgb2YgdGhlIHdvcmsgc2hvdWxkIGJlIGhhbmRsZWQgb3V0LW9mLWludGVycnVwdC4gVGhlIHVnbHkgbG9vcHMKKyAqIHRoYXQgb2NjdXIgZHVyaW5nIGludGVycnVwdCBzY2FyZSBtZS4gVGhlIElTUiBzaG91bGQgbWVyZWx5IHNpZ25hbAorICogdGhyZWFkIGNvbnRleHQsIEFDSyB0aGUgaW50ZXJydXB0LCBhbmQgbW92ZSBvbi4gLS0gQmVuQyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorCit1OCBzb2xvX2kyY19yZWFkYnl0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGlkLCB1OCBhZGRyLCB1OCBvZmYpCit7CisJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKwl1OCBkYXRhOworCisJbXNnc1swXS5mbGFncyA9IDA7CisJbXNnc1swXS5hZGRyID0gYWRkcjsKKwltc2dzWzBdLmxlbiA9IDE7CisJbXNnc1swXS5idWYgPSAmb2ZmOworCisJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworCW1zZ3NbMV0uYWRkciA9IGFkZHI7CisJbXNnc1sxXS5sZW4gPSAxOworCW1zZ3NbMV0uYnVmID0gJmRhdGE7CisKKwlpMmNfdHJhbnNmZXIoJnNvbG9fZGV2LT5pMmNfYWRhcFtpZF0sIG1zZ3MsIDIpOworCisgICAgICAgIHJldHVybiBkYXRhOworfQorCit2b2lkIHNvbG9faTJjX3dyaXRlYnl0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGlkLCB1OCBhZGRyLAorCQkJdTggb2ZmLCB1OCBkYXRhKQoreworCXN0cnVjdCBpMmNfbXNnIG1zZ3M7CisJdTggYnVmWzJdOworCisJYnVmWzBdID0gb2ZmOworCWJ1ZlsxXSA9IGRhdGE7CisJbXNncy5mbGFncyA9IDA7CisJbXNncy5hZGRyID0gYWRkcjsKKwltc2dzLmxlbiA9IDI7CisJbXNncy5idWYgPSBidWY7CisKKwlpMmNfdHJhbnNmZXIoJnNvbG9fZGV2LT5pMmNfYWRhcFtpZF0sICZtc2dzLCAxKTsKK30KKworc3RhdGljIHZvaWQgc29sb19pMmNfZmx1c2goc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCB3cikKK3sKKwl1MzIgY3RybDsKKworCWN0cmwgPSBTT0xPX0lJQ19DSF9TRVQoc29sb19kZXYtPmkyY19pZCk7CisKKwlpZiAoc29sb19kZXYtPmkyY19zdGF0ZSA9PSBJSUNfU1RBVEVfU1RBUlQpCisJCWN0cmwgfD0gU09MT19JSUNfU1RBUlQ7CisKKwlpZiAod3IpIHsKKwkJY3RybCB8PSBTT0xPX0lJQ19XUklURTsKKwl9IGVsc2UgeworCQljdHJsIHw9IFNPTE9fSUlDX1JFQUQ7CisJCWlmICghKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX05PX1JEX0FDSykpCisJCQljdHJsIHw9IFNPTE9fSUlDX0FDS19FTjsKKwl9CisKKwlpZiAoc29sb19kZXYtPmkyY19tc2dfcHRyID09IHNvbG9fZGV2LT5pMmNfbXNnLT5sZW4pCisJCWN0cmwgfD0gU09MT19JSUNfU1RPUDsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19DVFJMLCBjdHJsKTsKK30KKworc3RhdGljIHZvaWQgc29sb19pMmNfc3RhcnQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJdTMyIGFkZHIgPSBzb2xvX2Rldi0+aTJjX21zZy0+YWRkciA8PCAxOworCisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX1JEKQorCQlhZGRyIHw9IDE7CisKKwlzb2xvX2Rldi0+aTJjX3N0YXRlID0gSUlDX1NUQVRFX1NUQVJUOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19UWEQsIGFkZHIpOworCXNvbG9faTJjX2ZsdXNoKHNvbG9fZGV2LCAxKTsKK30KKworc3RhdGljIHZvaWQgc29sb19pMmNfc3RvcChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCBTT0xPX0lSUV9JSUMpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19DVFJMLCAwKTsKKwlzb2xvX2Rldi0+aTJjX3N0YXRlID0gSUlDX1NUQVRFX1NUT1A7CisJd2FrZV91cCgmc29sb19kZXYtPmkyY193YWl0KTsKK30KKworc3RhdGljIGludCBzb2xvX2kyY19oYW5kbGVfcmVhZChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKK3ByZXBhcmVfcmVhZDoKKwlpZiAoc29sb19kZXYtPmkyY19tc2dfcHRyICE9IHNvbG9fZGV2LT5pMmNfbXNnLT5sZW4pIHsKKwkJc29sb19pMmNfZmx1c2goc29sb19kZXYsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlzb2xvX2Rldi0+aTJjX21zZ19wdHIgPSAwOworCXNvbG9fZGV2LT5pMmNfbXNnKys7CisJc29sb19kZXYtPmkyY19tc2dfbnVtLS07CisKKwlpZiAoc29sb19kZXYtPmkyY19tc2dfbnVtID09IDApIHsKKwkJc29sb19pMmNfc3RvcChzb2xvX2Rldik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX05PU1RBUlQpKSB7CisJCXNvbG9faTJjX3N0YXJ0KHNvbG9fZGV2KTsKKwl9IGVsc2UgeworCQlpZiAoc29sb19kZXYtPmkyY19tc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlnb3RvIHByZXBhcmVfcmVhZDsKKwkJZWxzZQorCQkJc29sb19pMmNfc3RvcChzb2xvX2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19pMmNfaGFuZGxlX3dyaXRlKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworcmV0cnlfd3JpdGU6CisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnX3B0ciAhPSBzb2xvX2Rldi0+aTJjX21zZy0+bGVuKSB7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19UWEQsCisJCQkgICAgICAgc29sb19kZXYtPmkyY19tc2ctPmJ1Zltzb2xvX2Rldi0+aTJjX21zZ19wdHJdKTsKKwkJc29sb19kZXYtPmkyY19tc2dfcHRyKys7CisJCXNvbG9faTJjX2ZsdXNoKHNvbG9fZGV2LCAxKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc29sb19kZXYtPmkyY19tc2dfcHRyID0gMDsKKwlzb2xvX2Rldi0+aTJjX21zZysrOworCXNvbG9fZGV2LT5pMmNfbXNnX251bS0tOworCisJaWYgKHNvbG9fZGV2LT5pMmNfbXNnX251bSA9PSAwKSB7CisJCXNvbG9faTJjX3N0b3Aoc29sb19kZXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShzb2xvX2Rldi0+aTJjX21zZy0+ZmxhZ3MgJiBJMkNfTV9OT1NUQVJUKSkgeworCQlzb2xvX2kyY19zdGFydChzb2xvX2Rldik7CisJfSBlbHNlIHsKKwkJaWYgKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX1JEKQorCQkJc29sb19pMmNfc3RvcChzb2xvX2Rldik7CisJCWVsc2UKKwkJCWdvdG8gcmV0cnlfd3JpdGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBzb2xvX2kyY19pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJdTMyIHN0YXR1cyA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fSUlDX0NUUkwpOworCWludCByZXQgPSAtRUlOVkFMOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX0lJQyk7CisKKwlpZiAoc3RhdHVzICYgKFNPTE9fSUlDX1NUQVRFX1RSTlMgJiBTT0xPX0lJQ19TVEFURV9TSUdfRVJSKSB8fAorCSAgICBzb2xvX2Rldi0+aTJjX2lkIDwgMCkgeworCQlzb2xvX2kyY19zdG9wKHNvbG9fZGV2KTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlzd2l0Y2ggKHNvbG9fZGV2LT5pMmNfc3RhdGUpIHsKKwljYXNlIElJQ19TVEFURV9TVEFSVDoKKwkJaWYgKHNvbG9fZGV2LT5pMmNfbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlzb2xvX2Rldi0+aTJjX3N0YXRlID0gSUlDX1NUQVRFX1JFQUQ7CisJCQlyZXQgPSBzb2xvX2kyY19oYW5kbGVfcmVhZChzb2xvX2Rldik7CisJCQlicmVhazsKKwkJfQorCisJCXNvbG9fZGV2LT5pMmNfc3RhdGUgPSBJSUNfU1RBVEVfV1JJVEU7CisJY2FzZSBJSUNfU1RBVEVfV1JJVEU6CisJCXJldCA9IHNvbG9faTJjX2hhbmRsZV93cml0ZShzb2xvX2Rldik7CisJCWJyZWFrOworCisJY2FzZSBJSUNfU1RBVEVfUkVBRDoKKwkJc29sb19kZXYtPmkyY19tc2ctPmJ1Zltzb2xvX2Rldi0+aTJjX21zZ19wdHJdID0KKwkJCXNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fSUlDX1JYRCk7CisJCXNvbG9fZGV2LT5pMmNfbXNnX3B0cisrOworCisJCXJldCA9IHNvbG9faTJjX2hhbmRsZV9yZWFkKHNvbG9fZGV2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzb2xvX2kyY19zdG9wKHNvbG9fZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvbG9faTJjX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBhZGFwLT5hbGdvX2RhdGE7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXQ7CisJaW50IGk7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19JMkNfQURBUFRFUlM7IGkrKykgeworCQlpZiAoJnNvbG9fZGV2LT5pMmNfYWRhcFtpXSA9PSBhZGFwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gU09MT19JMkNfQURBUFRFUlMpCisJCXJldHVybiBudW07IC8vIFhYWCBSaWdodCByZXR1cm4gdmFsdWUgZm9yIGZhaWx1cmU/CisKKwlkb3duKCZzb2xvX2Rldi0+aTJjX3NlbSk7CisJc29sb19kZXYtPmkyY19pZCA9IGk7CisJc29sb19kZXYtPmkyY19tc2cgPSBtc2dzOworCXNvbG9fZGV2LT5pMmNfbXNnX251bSA9IG51bTsKKwlzb2xvX2Rldi0+aTJjX21zZ19wdHIgPSAwOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSUlDX0NUUkwsIDApOworCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfSUlDKTsKKwlzb2xvX2kyY19zdGFydChzb2xvX2Rldik7CisKKwl0aW1lb3V0ID0gSFogLyAyOworCisJZm9yICg7OykgeworCQlwcmVwYXJlX3RvX3dhaXQoJnNvbG9fZGV2LT5pMmNfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJaWYgKHNvbG9fZGV2LT5pMmNfc3RhdGUgPT0gSUlDX1NUQVRFX1NUT1ApCisJCQlicmVhazsKKworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKKwkJaWYgKCF0aW1lb3V0KQorCQkJYnJlYWs7CisKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisJfQorCisJZmluaXNoX3dhaXQoJnNvbG9fZGV2LT5pMmNfd2FpdCwgJndhaXQpOworCXJldCA9IG51bSAtIHNvbG9fZGV2LT5pMmNfbXNnX251bTsKKwlzb2xvX2Rldi0+aTJjX3N0YXRlID0gSUlDX1NUQVRFX0lETEU7CisJc29sb19kZXYtPmkyY19pZCA9IC0xOworCisJdXAoJnNvbG9fZGV2LT5pMmNfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgc29sb19pMmNfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNvbG9faTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gc29sb19pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBzb2xvX2kyY19mdW5jdGlvbmFsaXR5LAorfTsKKworaW50IHNvbG9faTJjX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lJQ19DRkcsCisJCSAgICAgICBTT0xPX0lJQ19QUkVTQ0FMRSg4KSB8IFNPTE9fSUlDX0VOQUJMRSk7CisKKwlzb2xvX2Rldi0+aTJjX2lkID0gLTE7CisJc29sb19kZXYtPmkyY19zdGF0ZSA9IElJQ19TVEFURV9JRExFOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvbG9fZGV2LT5pMmNfd2FpdCk7CisJaW5pdF9NVVRFWCgmc29sb19kZXYtPmkyY19zZW0pOworCisJZm9yIChpID0gMDsgaSA8IFNPTE9fSTJDX0FEQVBURVJTOyBpKyspIHsKKwkJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gJnNvbG9fZGV2LT5pMmNfYWRhcFtpXTsKKworCQlzbnByaW50ZihhZGFwLT5uYW1lLCBJMkNfTkFNRV9TSVpFLCAiJXMgSTJDICVkIiwKKwkJCSBTT0xPNjAxMF9OQU1FLCBpKTsKKwkJYWRhcC0+YWxnbyA9ICZzb2xvX2kyY19hbGdvOworCQlhZGFwLT5hbGdvX2RhdGEgPSBzb2xvX2RldjsKKwkJYWRhcC0+cmV0cmllcyA9IDE7CisJCWFkYXAtPmRldi5wYXJlbnQgPSAmc29sb19kZXYtPnBkZXYtPmRldjsKKworCQlpZiAoKHJldCA9IGkyY19hZGRfYWRhcHRlcihhZGFwKSkpIHsKKwkJCWFkYXAtPmFsZ29fZGF0YSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQpIHsKKwkJZm9yIChpID0gMDsgaSA8IFNPTE9fSTJDX0FEQVBURVJTOyBpKyspIHsKKwkJCWlmICghc29sb19kZXYtPmkyY19hZGFwW2ldLmFsZ29fZGF0YSkKKwkJCQlicmVhazsKKwkJCWkyY19kZWxfYWRhcHRlcigmc29sb19kZXYtPmkyY19hZGFwW2ldKTsKKwkJCXNvbG9fZGV2LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEgPSBOVUxMOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oJnNvbG9fZGV2LT5wZGV2LT5kZXYsICJFbmFibGVkICVkIGkyYyBhZGFwdGVyc1xuIiwKKwkJIFNPTE9fSTJDX0FEQVBURVJTKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHNvbG9faTJjX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19JMkNfQURBUFRFUlM7IGkrKykgeworCQlpZiAoIXNvbG9fZGV2LT5pMmNfYWRhcFtpXS5hbGdvX2RhdGEpCisJCQljb250aW51ZTsKKwkJaTJjX2RlbF9hZGFwdGVyKCZzb2xvX2Rldi0+aTJjX2FkYXBbaV0pOworCQlzb2xvX2Rldi0+aTJjX2FkYXBbaV0uYWxnb19kYXRhID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtanBlZy5oIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWpwZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA1MDdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLWpwZWcuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPTE82MDEwX0pQRUdfSAorI2RlZmluZSBfX1NPTE82MDEwX0pQRUdfSAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBqcGVnX2hlYWRlcltdID0geworCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4NmMsCisJMHg3NSwgMHg2NSwgMHg2MywgMHg2OCwgMHg2NSwgMHg3MiwgMHg3MiwgMHg3OSwKKwkweDIwLCAweGZmLCAweGRiLCAweDAwLCAweDQzLCAweDAwLCAweDIwLCAweDE2LAorCTB4MTgsIDB4MWMsIDB4MTgsIDB4MTQsIDB4MjAsIDB4MWMsIDB4MWEsIDB4MWMsCisJMHgyNCwgMHgyMiwgMHgyMCwgMHgyNiwgMHgzMCwgMHg1MCwgMHgzNCwgMHgzMCwKKwkweDJjLCAweDJjLCAweDMwLCAweDYyLCAweDQ2LCAweDRhLCAweDNhLCAweDUwLAorCTB4NzQsIDB4NjYsIDB4N2EsIDB4NzgsIDB4NzIsIDB4NjYsIDB4NzAsIDB4NmUsCisJMHg4MCwgMHg5MCwgMHhiOCwgMHg5YywgMHg4MCwgMHg4OCwgMHhhZSwgMHg4YSwKKwkweDZlLCAweDcwLCAweGEwLCAweGRhLCAweGEyLCAweGFlLCAweGJlLCAweGM0LAorCTB4Y2UsIDB4ZDAsIDB4Y2UsIDB4N2MsIDB4OWEsIDB4ZTIsIDB4ZjIsIDB4ZTAsCisJMHhjOCwgMHhmMCwgMHhiOCwgMHhjYSwgMHhjZSwgMHhjNiwgMHhmZiwgMHhkYiwKKwkweDAwLCAweDQzLCAweDAxLCAweDIyLCAweDI0LCAweDI0LCAweDMwLCAweDJhLAorCTB4MzAsIDB4NWUsIDB4MzQsIDB4MzQsIDB4NWUsIDB4YzYsIDB4ODQsIDB4NzAsCisJMHg4NCwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwKKwkweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LAorCTB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsCisJMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwgMHhjNiwKKwkweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LCAweGM2LAorCTB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsIDB4YzYsCisJMHhjNiwgMHhjNiwgMHhjNiwgMHhmZiwgMHhjNCwgMHgwMSwgMHhhMiwgMHgwMCwKKwkweDAwLCAweDAxLCAweDA1LCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDEwLCAweDAwLCAweDAyLCAweDAxLAorCTB4MDMsIDB4MDMsIDB4MDIsIDB4MDQsIDB4MDMsIDB4MDUsIDB4MDUsIDB4MDQsCisJMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZCwgMHgwMSwgMHgwMiwgMHgwMywKKwkweDAwLCAweDA0LCAweDExLCAweDA1LCAweDEyLCAweDIxLCAweDMxLCAweDQxLAorCTB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsIDB4MjIsIDB4NzEsIDB4MTQsCisJMHgzMiwgMHg4MSwgMHg5MSwgMHhhMSwgMHgwOCwgMHgyMywgMHg0MiwgMHhiMSwKKwkweGMxLCAweDE1LCAweDUyLCAweGQxLCAweGYwLCAweDI0LCAweDMzLCAweDYyLAorCTB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisJMHgxYSwgMHgyNSwgMHgyNiwgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgzNCwKKwkweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDNhLCAweDQzLCAweDQ0LAorCTB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksIDB4NGEsIDB4NTMsIDB4NTQsCisJMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwgMHg1OSwgMHg1YSwgMHg2MywgMHg2NCwKKwkweDY1LCAweDY2LCAweDY3LCAweDY4LCAweDY5LCAweDZhLCAweDczLCAweDc0LAorCTB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksIDB4N2EsIDB4ODMsIDB4ODQsCisJMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwgMHg4OSwgMHg4YSwgMHg5MiwgMHg5MywKKwkweDk0LCAweDk1LCAweDk2LCAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweGEyLAorCTB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsCisJMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwKKwkweGJhLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LAorCTB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCisJMHhkOCwgMHhkOSwgMHhkYSwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwKKwkweGU2LCAweGU3LCAweGU4LCAweGU5LCAweGVhLCAweGYxLCAweGYyLCAweGYzLAorCTB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsIDB4ZjksIDB4ZmEsIDB4MDEsCisJMHgwMCwgMHgwMywgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKwkweDAxLCAweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgxMSwgMHgwMCwgMHgwMiwgMHgwMSwKKwkweDAyLCAweDA0LCAweDA0LCAweDAzLCAweDA0LCAweDA3LCAweDA1LCAweDA0LAorCTB4MDQsIDB4MDAsIDB4MDEsIDB4MDIsIDB4NzcsIDB4MDAsIDB4MDEsIDB4MDIsCisJMHgwMywgMHgxMSwgMHgwNCwgMHgwNSwgMHgyMSwgMHgzMSwgMHgwNiwgMHgxMiwKKwkweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLCAweDEzLCAweDIyLCAweDMyLAorCTB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsIDB4YTEsIDB4YjEsIDB4YzEsCisJMHgwOSwgMHgyMywgMHgzMywgMHg1MiwgMHhmMCwgMHgxNSwgMHg2MiwgMHg3MiwKKwkweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LCAweGUxLCAweDI1LCAweGYxLAorCTB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsIDB4MjcsIDB4MjgsIDB4MjksCisJMHgyYSwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHgzYSwgMHg0MywKKwkweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LCAweDQ5LCAweDRhLCAweDUzLAorCTB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsIDB4NTksIDB4NWEsIDB4NjMsCisJMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwgMHg2YSwgMHg3MywKKwkweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LCAweDc5LCAweDdhLCAweDgyLAorCTB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksIDB4OGEsCisJMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwgMHg5OSwKKwkweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LAorCTB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsCisJMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwKKwkweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LAorCTB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZTIsIDB4ZTMsIDB4ZTQsCisJMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwgMHhmMiwgMHhmMywKKwkweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LCAweGY5LCAweGZhLCAweGZmLAorCTB4YzAsIDB4MDAsIDB4MTEsIDB4MDgsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4YzAsCisJMHgwMywgMHgwMSwgMHgyMiwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwMSwgMHgwMywKKwkweDExLCAweDAxLCAweGZmLCAweGRhLCAweDAwLCAweDBjLCAweDAzLCAweDAxLAorCTB4MDAsIDB4MDIsIDB4MTEsIDB4MDMsIDB4MTEsIDB4MDAsIDB4M2YsIDB4MDAKK307CisKKy8qIFRoaXMgaXMgdGhlIGJ5dGUgbWFya2VyIGZvciB0aGUgc3RhcnQgb2YgU09GMDogMHhmZmMwIG1hcmtlciAqLworI2RlZmluZSBTT0YwX1NUQVJUCTU3NQorCisjZW5kaWYgLyogX19TT0xPNjAxMF9KUEVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1vZmZzZXRzLmggYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtb2Zmc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzFkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtb2Zmc2V0cy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT0xPNjAxMF9PRkZTRVRTX0gKKyNkZWZpbmUgX19TT0xPNjAxMF9PRkZTRVRTX0gKKworLyogT2Zmc2V0cyBhbmQgc2l6ZXMgb2YgdGhlIGV4dGVybmFsIGFkZHJlc3MgKi8KKyNkZWZpbmUgU09MT19ESVNQX0VYVF9BRERSKF9fc29sbykJCTB4MDAwMDAwMDAKKyNkZWZpbmUgU09MT19ESVNQX0VYVF9TSVpFCQkJMHgwMDQ4MDAwMAorCisjZGVmaW5lIFNPTE9fREVDMkxJVkVfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX0RJU1BfRVhUX0FERFIoX19zb2xvKSArIFNPTE9fRElTUF9FWFRfU0laRSkKKyNkZWZpbmUgU09MT19ERUMyTElWRV9FWFRfU0laRQkJCTB4MDAyNDAwMDAKKworI2RlZmluZSBTT0xPX09TR19FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fREVDMkxJVkVfRVhUX0FERFIoX19zb2xvKSArIFNPTE9fREVDMkxJVkVfRVhUX1NJWkUpCisjZGVmaW5lIFNPTE9fT1NHX0VYVF9TSVpFCQkJMHgwMDEyMDAwMAorCisjZGVmaW5lIFNPTE9fRU9TRF9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fT1NHX0VYVF9BRERSKF9fc29sbykgKyBTT0xPX09TR19FWFRfU0laRSkKKyNkZWZpbmUgU09MT19FT1NEX0VYVF9TSVpFCQkJMHgwMDAxMDAwMAorCisjZGVmaW5lIFNPTE9fTU9USU9OX0VYVF9BRERSKF9fc29sbykgXAorCQkoU09MT19FT1NEX0VYVF9BRERSKF9fc29sbykgKyBcCisJCSAoU09MT19FT1NEX0VYVF9TSVpFICogX19zb2xvLT5ucl9jaGFucykpCisjZGVmaW5lIFNPTE9fTU9USU9OX0VYVF9TSVpFCQkJMHgwMDA4MDAwMAorCisjZGVmaW5lIFNPTE9fRzcyM19FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fTU9USU9OX0VYVF9BRERSKF9fc29sbykgKyBTT0xPX01PVElPTl9FWFRfU0laRSkKKyNkZWZpbmUgU09MT19HNzIzX0VYVF9TSVpFCQkJMHgwMDAxMDAwMAorCisjZGVmaW5lIFNPTE9fQ0FQX0VYVF9BRERSKF9fc29sbykgXAorCQkoU09MT19HNzIzX0VYVF9BRERSKF9fc29sbykgKyBTT0xPX0c3MjNfRVhUX1NJWkUpCisjZGVmaW5lIFNPTE9fQ0FQX0VYVF9NQVhfUEFHRQkJCSgxOCArIDE1KQorI2RlZmluZSBTT0xPX0NBUF9FWFRfU0laRQkJCShTT0xPX0NBUF9FWFRfTUFYX1BBR0UgKiA2NTUzNikKKworLyogVGhpcyArMSBpcyB2ZXJ5IGltcG9ydGFudCAtLSBXaHk/ISAtLSBCZW5DICovCisjZGVmaW5lIFNPTE9fRVJFRl9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fQ0FQX0VYVF9BRERSKF9fc29sbykgKyBcCisJCSAoU09MT19DQVBfRVhUX1NJWkUgKiAoX19zb2xvLT5ucl9jaGFucyArIDEpKSkKKyNkZWZpbmUgU09MT19FUkVGX0VYVF9TSVpFCQkJMHgwMDE0MDAwMAorCisjZGVmaW5lIFNPTE9fTVA0RV9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fRVJFRl9FWFRfQUREUihfX3NvbG8pICsgXAorCQkgKFNPTE9fRVJFRl9FWFRfU0laRSAqIF9fc29sby0+bnJfY2hhbnMpKQorI2RlZmluZSBTT0xPX01QNEVfRVhUX1NJWkUoX19zb2xvKQkJKDB4MDAwODAwMDAgKiBfX3NvbG8tPm5yX2NoYW5zKQorCisjZGVmaW5lIFNPTE9fRFJFRl9FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fTVA0RV9FWFRfQUREUihfX3NvbG8pICsgU09MT19NUDRFX0VYVF9TSVpFKF9fc29sbykpCisjZGVmaW5lIFNPTE9fRFJFRl9FWFRfU0laRQkJCTB4MDAxNDAwMDAKKworI2RlZmluZSBTT0xPX01QNERfRVhUX0FERFIoX19zb2xvKSBcCisJCShTT0xPX0RSRUZfRVhUX0FERFIoX19zb2xvKSArIFwKKwkJIChTT0xPX0RSRUZfRVhUX1NJWkUgKiBfX3NvbG8tPm5yX2NoYW5zKSkKKyNkZWZpbmUgU09MT19NUDREX0VYVF9TSVpFCQkJMHgwMDA4MDAwMAorCisjZGVmaW5lIFNPTE9fSlBFR19FWFRfQUREUihfX3NvbG8pIFwKKwkJKFNPTE9fTVA0RF9FWFRfQUREUihfX3NvbG8pICsgXAorCQkgKFNPTE9fTVA0RF9FWFRfU0laRSAqIF9fc29sby0+bnJfY2hhbnMpKQorI2RlZmluZSBTT0xPX0pQRUdfRVhUX1NJWkUoX19zb2xvKQkJKDB4MDAwODAwMDAgKiBfX3NvbG8tPm5yX2NoYW5zKQorCisjZW5kaWYgLyogX19TT0xPNjAxMF9PRkZTRVRTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1vc2QtZm9udC5oIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLW9zZC1mb250LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZmNTY1YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1vc2QtZm9udC5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU09MTzYwMTBfT1NEX0ZPTlRfSAorI2RlZmluZSBfX1NPTE82MDEwX09TRF9GT05UX0gKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzb2xvX29zZF9mb250W10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAwYzBjOCwgMHhjY2ZlZmUwYywgMHgwODAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDEwMTAzODM4LCAweDdjN2NmZWZlLCAweDAwMDAwMDAwLAkvLyAwCisJMHgwMDAwMDAwMCwgMHhmZWZlN2M3YywgMHgzODM4MTAxMCwgMHgxMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDdjODJmZWZlLCAweGZlZmVmZTdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDEwMzgsIDB4MTAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDEwMzg3YywgMHhmZTdjMzgxMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMzg0NDQ0LCAweDQ0MzgwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4Mzg0NDgyODIsIDB4ODI0NDM4MDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDdjN2M3YywgMHg3YzdjMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDZjNmM2YzZjLCAweDZjNmM2YzZjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDYxZTdlZmUsIDB4ZmU3ZTFlMDYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHhjMGYwZmNmZSwgMHhmZWZjZjBjMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweGM2Y2VkZWZlLCAweGZlZGVjZWM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4YzZlNmY2ZmUsIDB4ZmVmNmU2YzYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgxMjM2N2VmZSwgMHhmZTdlMzYxMiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDkwZDhmY2ZlLCAweGZlZmNkODkwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzgsIDB4N2NjNjkyYmEsIDB4OTJjNjdjMzgsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzOCwgMHg3Y2M2YWE5MiwgMHhhYWM2N2MzOCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDc4MzAxMDdjLCAweGJhYTg2ODBjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzgsIDB4M2MxODEyN2MsIDB4YjgzODJjNjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA0NCwgMHhhYTZjODI1NCwgMHgzOGVlYzY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDgyLCAweDQ0Mjg4MjQ0LCAweDM4YzY4MjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzgsIDB4NDQ0NDQ0ZmUsIDB4ZmVlZWM2ZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAxOCwgMHg3ODE4NzgxOCwgMHgzYzdlN2UzYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDM4NTQ5MjlhLCAweDgyNDQzODAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDBjMGM4Y2MsIDB4ZmVmZTBjMDgsIDB4MDAwMDAwMDAsCisJMHgwMDAwZTBhMCwgMHhlMDQwZTAwZSwgMHg4YTBlYTQwZSwgMHgwMDAwMDAwMCwKKwkweDAwMDBlMGEwLCAweGUwNDBlMDBlLCAweDBhOGU0NDBlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwN2MsIDB4ODI4MjkyOTIsIDB4OTI5MjgyZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBmOCwgMHhmYzA0NjQ5NCwgMHg5NDY0MDRmYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDNmLCAweDdmNDA0YzUyLCAweDUyNGM0MDdmLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwN2MsIDB4ODJiYTgyYmEsIDB4ODJiYTgyZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDE4M2MzYzNjLCAweDE4MTgwMDE4LCAweDE4MDAwMDAwLAkvLyAzMiAgICEKKwkweDAwMDAwMDY2LCAweDY2MjQwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4NmM2Y2ZlNmMsIDB4NmM2Y2ZlNmMsIDB4NmMwMDAwMDAsCS8vIDM0ICIgIworCTB4MDAwMDEwMTAsIDB4N2NkNmQ2MTYsIDB4N2NkMGQ2ZDYsIDB4N2MxMDEwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDg2YzY2MCwgMHgzMDE4MGNjNiwgMHhjMjAwMDAwMCwJLy8gMzYgJCAlCisJMHgwMDAwMDAwMCwgMHgzODZjNmMzOCwgMHhkYzc2NjY2NiwgMHhkYzAwMDAwMCwKKwkweDAwMDAwMDBjLCAweDBjMGMwNjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAkvLyAzOCAmICcKKwkweDAwMDAwMDAwLCAweDMwMTgwYzBjLCAweDBjMGMwYzE4LCAweDMwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MGMxODMwMzAsIDB4MzAzMDMwMTgsIDB4MGMwMDAwMDAsCS8vIDQwICggKQorCTB4MDAwMDAwMDAsIDB4MDAwMDY2M2MsIDB4ZmYzYzY2MDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMTgxOCwgMHg3ZTE4MTgwMCwgMHgwMDAwMDAwMCwJLy8gNDIgKiArCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMGUwZSwgMHgwYzA2MDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDdlMDAwMDAwLCAweDAwMDAwMDAwLAkvLyA0NCAsIC0KKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA2LCAweDA2MDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4ODBjMDYwMzAsIDB4MTgwYzA2MDIsIDB4MDAwMDAwMDAsCS8vIDQ2IC4gLworCTB4MDAwMDAwN2MsIDB4YzZlNmY2ZGUsIDB4Y2VjNmM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAzMCwgMHgzODNjMzAzMCwgMHgzMDMwMzBmYywgMHgwMDAwMDAwMCwJLy8gNDggMCAxCisJMHgwMDAwMDA3YywgMHhjNmMwNjAzMCwgMHgxODBjYzZmZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDdjLCAweGM2YzBjMDdjLCAweGMwYzBjNjdjLCAweDAwMDAwMDAwLAkvLyA1MCAyIDMKKwkweDAwMDAwMDYwLCAweDcwNzg2YzY2LCAweGZlNjA2MGYwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwZmUsIDB4MDYwNjA2N2UsIDB4YzBjMGM2N2MsIDB4MDAwMDAwMDAsCS8vIDUyIDQgNQorCTB4MDAwMDAwMzgsIDB4MGMwNjA2N2UsIDB4YzZjNmM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBmZSwgMHhjNmMwNjAzMCwgMHgxODE4MTgxOCwgMHgwMDAwMDAwMCwJLy8gNTQgNiA3CisJMHgwMDAwMDA3YywgMHhjNmM2YzY3YywgMHhjNmM2YzY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDdjLCAweGM2YzZjNmZjLCAweGMwYzA2MDM4LCAweDAwMDAwMDAwLAkvLyA1NiA4IDkKKwkweDAwMDAwMDAwLCAweDE4MTgwMDAwLCAweDAwMTgxODAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MTgxODAwMDAsIDB4MDAxODE4MGMsIDB4MDAwMDAwMDAsCS8vIDU4IDogOworCTB4MDAwMDAwNjAsIDB4MzAxODBjMDYsIDB4MGMxODMwNjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDdlMDAwMCwgMHgwMDdlMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDA2LCAweDBjMTgzMDYwLCAweDMwMTgwYzA2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwN2MsIDB4YzZjNjYwMzAsIDB4MzAwMDMwMzAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3YywgMHhjNmY2ZDZkNiwgMHg3NjA2MDY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDEwLCAweDM4NmNjNmM2LCAweGZlYzZjNmM2LCAweDAwMDAwMDAwLAkvLyA2NCBAIEEKKwkweDAwMDAwMDdlLCAweGM2YzZjNjdlLCAweGM2YzZjNjdlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwNzgsIDB4Y2MwNjA2MDYsIDB4MDYwNmNjNzgsIDB4MDAwMDAwMDAsCS8vIDY2CisJMHgwMDAwMDAzZSwgMHg2NmM2YzZjNiwgMHhjNmM2NjYzZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGZlLCAweDA2MDYwNjNlLCAweDA2MDYwNmZlLCAweDAwMDAwMDAwLAkvLyA2OAorCTB4MDAwMDAwZmUsIDB4MDYwNjA2M2UsIDB4MDYwNjA2MDYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3OCwgMHhjYzA2MDYwNiwgMHhmNmM2Y2NiOCwgMHgwMDAwMDAwMCwJLy8gNzAKKwkweDAwMDAwMGM2LCAweGM2YzZjNmZlLCAweGM2YzZjNmM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwM2MsIDB4MTgxODE4MTgsIDB4MTgxODE4M2MsIDB4MDAwMDAwMDAsCS8vIDcyCisJMHgwMDAwMDA2MCwgMHg2MDYwNjA2MCwgMHg2MDY2NjYzYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGM2LCAweGM2NjYzNjFlLCAweDM2NjZjNmM2LCAweDAwMDAwMDAwLAkvLyA3NAorCTB4MDAwMDAwMDYsIDB4MDYwNjA2MDYsIDB4MDYwNjA2ZmUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDBjNiwgMHhlZWZlZDZjNiwgMHhjNmM2YzZjNiwgMHgwMDAwMDAwMCwJLy8gNzYKKwkweDAwMDAwMGM2LCAweGNlZGVmZWY2LCAweGU2YzZjNmM2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzgsIDB4NmNjNmM2YzYsIDB4YzZjNjZjMzgsIDB4MDAwMDAwMDAsCS8vIDc4CisJMHgwMDAwMDA3ZSwgMHhjNmM2YzY3ZSwgMHgwNjA2MDYwNiwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDM4LCAweDZjYzZjNmM2LCAweGM2ZDY3YzM4LCAweDYwMDAwMDAwLAkvLyA4MAorCTB4MDAwMDAwN2UsIDB4YzZjNmM2N2UsIDB4NjZjNmM2YzYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA3YywgMHhjNmM2MGMzOCwgMHg2MGM2YzY3YywgMHgwMDAwMDAwMCwJLy8gODIKKwkweDAwMDAwMDdlLCAweDE4MTgxODE4LCAweDE4MTgxODE4LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwYzYsIDB4YzZjNmM2YzYsIDB4YzZjNmM2N2MsIDB4MDAwMDAwMDAsCS8vIDg0CisJMHgwMDAwMDBjNiwgMHhjNmM2YzZjNiwgMHhjNjZjMzgxMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGM2LCAweGM2YzZjNmM2LCAweGQ2ZDZmZTZjLCAweDAwMDAwMDAwLAkvLyA4NgorCTB4MDAwMDAwYzYsIDB4YzZjNjZjMzgsIDB4NmNjNmM2YzYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDA2NiwgMHg2NjY2NjY2NiwgMHgzYzE4MTgxOCwgMHgwMDAwMDAwMCwJLy8gODgKKwkweDAwMDAwMGZlLCAweGMwNjAzMDE4LCAweDBjMDYwNmZlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwM2MsIDB4MGMwYzBjMGMsIDB4MGMwYzBjM2MsIDB4MDAwMDAwMDAsCS8vIDkwCisJMHgwMDAwMDAwMiwgMHgwNjBjMTgzMCwgMHg2MGMwODAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDNjLCAweDMwMzAzMDMwLCAweDMwMzAzMDNjLCAweDAwMDAwMDAwLAkvLyA5MgorCTB4MDAwMDEwMzgsIDB4NmNjNjAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMGZlMDAwMCwKKwkweDAwMDAxODE4LCAweDMwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDNjNjAsIDB4N2M2NjY2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwYywgMHgwYzBjN2NjYywgMHhjY2NjY2M3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3Y2M2LCAweDA2MDZjNjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwNjAsIDB4NjA2MDdjNjYsIDB4NjY2NjY2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2NjNiwgMHhmZTA2YzY3YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDc4LCAweDBjMGMwYzNlLCAweDBjMGMwYzBjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdjNjYsIDB4NjY2NjY2N2MsIDB4NjA2MDNlMDAsCisJMHgwMDAwMDAwYywgMHgwYzBjN2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDMwLCAweDMwMDAzODMwLCAweDMwMzAzMDc4LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMzAsIDB4MzAwMDNjMzAsIDB4MzAzMDMwMzAsIDB4MzAzMDFmMDAsCisJMHgwMDAwMDAwYywgMHgwYzBjY2M2YywgMHgzYzZjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDMwLCAweDMwMzAzMDMwLCAweDMwMzAzMDMwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDY2ZmUsIDB4ZDZkNmQ2ZDYsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwNzhjYywgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3Y2M2LCAweGM2YzZjNjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdjY2MsIDB4Y2NjY2NjN2MsIDB4MGMwYzBjMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2M2NiwgMHg2NjY2NjY3YywgMHg2MDYwNjAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3NmRjLCAweDBjMGMwYzBjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDdjYzYsIDB4MWM3MGM2N2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgxODE4ZmUxOCwgMHgxODE4MTg3MCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA2NjY2LCAweDY2NjY2NjNjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMGM2YzYsIDB4YzY2YzM4MTAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwYzZkNiwgMHhkNmQ2ZmU2YywgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDBjNjZjLCAweDM4Mzg2Y2M2LCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDY2NjYsIDB4NjY2NjY2N2MsIDB4NjA2MDNlMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmU2MCwgMHgzMDE4MGNmZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDcwLCAweDE4MTgxODBlLCAweDE4MTgxODcwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMTgsIDB4MTgxODE4MDAsIDB4MTgxODE4MTgsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwZSwgMHgxODE4MTg3MCwgMHgxODE4MTgwZSwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMGRjLCAweDc2MDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDM4NmMsIDB4YzZjNmZlMDAsIDB4MDAwMDAwMDAKK307CisKKyNlbmRpZiAvKiBfX1NPTE82MDEwX09TRF9GT05UX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1wMm0uYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC1wMm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjgxZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXAybS5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEJsdWVjaGVycnksIExMQyB3d3cuYmx1ZWNoZXJyeWR2ci5jb20KKyAqIENvcHlyaWdodCAoQykgMjAxMCBCZW4gQ29sbGlucyA8YmNvbGxpbnNAYmx1ZWNoZXJyeS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorCisvLyAjZGVmaW5lIFNPTE9fVEVTVF9QMk0KKworaW50IHNvbG9fcDJtX2RtYShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggaWQsIGludCB3ciwKKwkJIHZvaWQgKnN5c19hZGRyLCB1MzIgZXh0X2FkZHIsIHUzMiBzaXplKQoreworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IHJldDsKKworCVdBUk5fT04oIXNpemUpOworCVdBUk5fT04oaWQgPj0gU09MT19OUl9QMk0pOworCWlmICghc2l6ZSB8fCBpZCA+PSBTT0xPX05SX1AyTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNvbG9fZGV2LT5wZGV2LCBzeXNfYWRkciwgc2l6ZSwKKwkJCQkgIHdyID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlyZXQgPSBzb2xvX3AybV9kbWFfdChzb2xvX2RldiwgaWQsIHdyLCBkbWFfYWRkciwgZXh0X2FkZHIsIHNpemUpOworCisJcGNpX3VubWFwX3NpbmdsZShzb2xvX2Rldi0+cGRldiwgZG1hX2FkZHIsIHNpemUsCisJCQkgd3IgPyBQQ0lfRE1BX1RPREVWSUNFIDogUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2xvX3AybV9kbWFfdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggaWQsIGludCB3ciwKKwkJICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGV4dF9hZGRyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc29sb19wMm1fZGV2ICpwMm1fZGV2OworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gMDsKKworCVdBUk5fT04oIXNpemUpOworCVdBUk5fT04oaWQgPj0gU09MT19OUl9QMk0pOworCWlmICghc2l6ZSB8fCBpZCA+PSBTT0xPX05SX1AyTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwMm1fZGV2ID0gJnNvbG9fZGV2LT5wMm1fZGV2W2lkXTsKKworCWRvd24oJnAybV9kZXYtPnNlbSk7CisKK3N0YXJ0X2RtYToKKwlJTklUX0NPTVBMRVRJT04ocDJtX2Rldi0+Y29tcGxldGlvbik7CisJcDJtX2Rldi0+ZXJyb3IgPSAwOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9UQVJfQURSKGlkKSwgZG1hX2FkZHIpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9FWFRfQURSKGlkKSwgZXh0X2FkZHIpOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9FWFRfQ0ZHKGlkKSwKKwkJICAgICAgIFNPTE9fUDJNX0NPUFlfU0laRShzaXplID4+IDIpKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fQ09OVFJPTChpZCksCisJCSAgICAgICBTT0xPX1AyTV9CVVJTVF9TSVpFKFNPTE9fUDJNX0JVUlNUXzI1NikgfAorCQkgICAgICAgKHdyID8gU09MT19QMk1fV1JJVEUgOiAwKSB8IFNPTE9fUDJNX1RSQU5TX09OKTsKKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnAybV9kZXYtPmNvbXBsZXRpb24sIEhaKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9DT05UUk9MKGlkKSwgMCk7CisKKwkvKiBYWFggUmVhbGx5IGxvb2tzIHRvIG1lIGxpa2Ugd2Ugd2lsbCBnZXQgc3R1Y2sgaGVyZSBpZiBhCisJICogcmVhbCBQQ0kgUDJNIGVycm9yIG9jY3VycyAqLworCWlmIChwMm1fZGV2LT5lcnJvcikKKwkJZ290byBzdGFydF9kbWE7CisKKwl1cCgmcDJtX2Rldi0+c2VtKTsKKworCXJldHVybiAodGltZW91dCA9PSAwKSA/IC1FQUdBSU4gOiAwOworfQorCisjaWZkZWYgU09MT19URVNUX1AyTQorCisjZGVmaW5lIFAyTV9URVNUX0NIQVIJCTB4YmUKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBwMm1fdGVzdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggaWQsCisJCQkJICAgdTMyIGJhc2UsIGludCBzaXplKQoreworCXU4ICp3cl9idWY7CisJdTggKnJkX2J1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXJyX2NudCA9IDA7CisKKwl3cl9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghd3JfYnVmKSB7CisJCXByaW50ayhTT0xPNjAxMF9OQU1FICI6IEZhaWxlZCB0byBtYWxsb2MgZm9yIHAybV90ZXN0XG4iKTsKKwkJcmV0dXJuIHNpemU7CisJfQorCisJcmRfYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJkX2J1ZikgeworCQlwcmludGsoU09MTzYwMTBfTkFNRSAiOiBGYWlsZWQgdG8gbWFsbG9jIGZvciBwMm1fdGVzdFxuIik7CisJCWtmcmVlKHdyX2J1Zik7CisJCXJldHVybiBzaXplOworCX0KKworCW1lbXNldCh3cl9idWYsIFAyTV9URVNUX0NIQVIsIHNpemUpOworCW1lbXNldChyZF9idWYsIFAyTV9URVNUX0NIQVIgKyAxLCBzaXplKTsKKworCXNvbG9fcDJtX2RtYShzb2xvX2RldiwgaWQsIDEsIHdyX2J1ZiwgYmFzZSwgc2l6ZSk7CisJc29sb19wMm1fZG1hKHNvbG9fZGV2LCBpZCwgMCwgcmRfYnVmLCBiYXNlLCBzaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCWlmICh3cl9idWZbaV0gIT0gcmRfYnVmW2ldKQorCQkJZXJyX2NudCsrOworCisJa2ZyZWUod3JfYnVmKTsKKwlrZnJlZShyZF9idWYpOworCisJcmV0dXJuIGVycl9jbnQ7Cit9CisKKyNkZWZpbmUgVEVTVF9DSFVOS19TSVpFCQkoOCAqIDEwMjQpCisKK3N0YXRpYyB2b2lkIHJ1bl9wMm1fdGVzdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgZXJycyA9IDA7CisJdTMyIHNpemUgPSBTT0xPX0pQRUdfRVhUX0FERFIoc29sb19kZXYpICsgU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KTsKKwlpbnQgaSwgZDsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUZXN0aW5nICV1IGJ5dGVzIG9mIGV4dGVybmFsIHJhbVxuIiwKKwkgICAgICAgU09MTzYwMTBfTkFNRSwgc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBURVNUX0NIVU5LX1NJWkUpCisJCWZvciAoZCA9IDA7IGQgPCA0OyBkKyspCisJCQllcnJzICs9IHAybV90ZXN0KHNvbG9fZGV2LCBkLCBpLCBURVNUX0NIVU5LX1NJWkUpOworCisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZvdW5kICVsbHUgZXJyb3JzIGR1cmluZyBwMm0gdGVzdFxuIiwKKwkgICAgICAgU09MTzYwMTBfTkFNRSwgZXJycyk7CisKKwlyZXR1cm47Cit9CisjZWxzZQorI2RlZmluZSBydW5fcDJtX3Rlc3QoX19zb2xvKQlkb3t9d2hpbGUoMCkKKyNlbmRpZgorCit2b2lkIHNvbG9fcDJtX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGlkKQoreworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0lSUV9TVEFULCBTT0xPX0lSUV9QMk0oaWQpKTsKKwljb21wbGV0ZSgmc29sb19kZXYtPnAybV9kZXZbaWRdLmNvbXBsZXRpb24pOworfQorCit2b2lkIHNvbG9fcDJtX2Vycm9yX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc29sb19wMm1fZGV2ICpwMm1fZGV2OworCWludCBpOworCisJaWYgKCEoc3RhdHVzICYgU09MT19QQ0lfRVJSX1AyTSkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBTT0xPX05SX1AyTTsgaSsrKSB7CisJCXAybV9kZXYgPSAmc29sb19kZXYtPnAybV9kZXZbaV07CisJCXAybV9kZXYtPmVycm9yID0gMTsKKwkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fUDJNX0NPTlRST0woaSksIDApOworCQljb21wbGV0ZSgmcDJtX2Rldi0+Y29tcGxldGlvbik7CisJfQorfQorCit2b2lkIHNvbG9fcDJtX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU09MT19OUl9QMk07IGkrKykKKwkJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfUDJNKGkpKTsKK30KKworaW50IHNvbG9fcDJtX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc3RydWN0IHNvbG9fcDJtX2RldiAqcDJtX2RldjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTT0xPX05SX1AyTTsgaSsrKSB7CisJCXAybV9kZXYgPSAmc29sb19kZXYtPnAybV9kZXZbaV07CisKKwkJaW5pdF9NVVRFWCgmcDJtX2Rldi0+c2VtKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZwMm1fZGV2LT5jb21wbGV0aW9uKTsKKworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fREVTX0FEUihpKSwKKwkJCSAgICAgICBfX3BhKHAybV9kZXYtPmRlc2MpKTsKKworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19QMk1fQ09OVFJPTChpKSwgMCk7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1AyTV9DT05GSUcoaSksCisJCQkgICAgICAgU09MT19QMk1fQ1NDXzE2QklUXzU2NSB8CisJCQkgICAgICAgU09MT19QMk1fRE1BX0lOVEVSVkFMKDApIHwKKwkJCSAgICAgICBTT0xPX1AyTV9QQ0lfTUFTVEVSX01PREUpOworCQlzb2xvNjAxMF9pcnFfb24oc29sb19kZXYsIFNPTE9fSVJRX1AyTShpKSk7CisJfQorCisJcnVuX3AybV90ZXN0KHNvbG9fZGV2KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXJlZ2lzdGVycy5oIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXJlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOWQzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtcmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw2NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT0xPNjAxMF9SRUdJU1RFUlNfSAorI2RlZmluZSBfX1NPTE82MDEwX1JFR0lTVEVSU19ICisKKyNpbmNsdWRlICJzb2xvNjAxMC1vZmZzZXRzLmgiCisKKy8qIEdsb2JhbCA2MDEwIHN5c3RlbSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFNPTE9fU1lTX0NGRwkJCQkweDAwMDAKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfRk9VVF9FTgkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfUExMX0JZUEFTUwkJMHgwMDAwMDAwMgorI2RlZmluZSAgIFNPTE9fU1lTX0NGR19QTExfUFdETgkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfT1VURElWKF9fbikJCSgoKF9fbikgJiAweDAwMykgPDwgMykKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfRkVFREJBQ0tESVYoX19uKQkJKCgoX19uKSAmIDB4MWZmKSA8PCA1KQorI2RlZmluZSAgIFNPTE9fU1lTX0NGR19JTlBVVERJVihfX24pCQkoKChfX24pICYgMHgwMWYpIDw8IDE0KQorI2RlZmluZSAgIFNPTE9fU1lTX0NGR19DTE9DS19ESVYJCTB4MDAwODAwMDAKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfTkNMS19ERUxBWShfX24pCQkoKChfX24pICYgMHgwMDMpIDw8IDI0KQorI2RlZmluZSAgIFNPTE9fU1lTX0NGR19QQ0xLX0RFTEFZKF9fbikJCSgoKF9fbikgJiAweDAwZikgPDwgMjYpCisjZGVmaW5lICAgU09MT19TWVNfQ0ZHX1NEUkFNNjRCSVQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgICBTT0xPX1NZU19DRkdfUkVTRVQJCQkweDgwMDAwMDAwCisKKyNkZWZpbmUJU09MT19ETUFfQ1RSTAkJCQkweDAwMDQKKyNkZWZpbmUJICBTT0xPX0RNQV9DVFJMX1JFRlJFU0hfQ1lDTEUobikJKChuKTw8OCkKKy8qIDA9MTYvMzJNQiwgMT0zMi82NE1CLCAyPTY0LzEyOE1CLCAzPTEyOC8yNTZNQiAqLworI2RlZmluZQkgIFNPTE9fRE1BX0NUUkxfU0RSQU1fU0laRShuKQkJKChuKTw8NikKKyNkZWZpbmUJICBTT0xPX0RNQV9DVFJMX1NEUkFNX0NMS19JTlZFUlQJKDE8PDUpCisjZGVmaW5lCSAgU09MT19ETUFfQ1RSTF9TVFJPQkVfU0VMRUNUCQkoMTw8NCkKKyNkZWZpbmUJICBTT0xPX0RNQV9DVFJMX1JFQURfREFUQV9TRUxFQ1QJKDE8PDMpCisjZGVmaW5lCSAgU09MT19ETUFfQ1RSTF9SRUFEX0NMS19TRUxFQ1QJCSgxPDwyKQorI2RlZmluZQkgIFNPTE9fRE1BX0NUUkxfTEFURU5DWShuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1NZU19WQ0xLCQkJCTB4MDAwQworI2RlZmluZQkgIFNPTE9fVkNMS19JTlZFUlQJCQkoMTw8MjIpCisvKiAwPXN5c19jbGsvNCwgMT1zeXNfY2xrLzIsIDI9Y2xrX2luLzIgb2Ygc3lzdGVtIGlucHV0ICovCisjZGVmaW5lCSAgU09MT19WQ0xLX1NFTEVDVChuKQkJCSgobik8PDIwKQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4xNDE1X0RFTEFZKG4pCQkoKG4pPDwxNCkKKyNkZWZpbmUJICBTT0xPX1ZDTEtfVklOMTIxM19ERUxBWShuKQkJKChuKTw8MTIpCisjZGVmaW5lCSAgU09MT19WQ0xLX1ZJTjEwMTFfREVMQVkobikJCSgobik8PDEwKQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4wODA5X0RFTEFZKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4wNjA3X0RFTEFZKG4pCQkoKG4pPDw2KQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4wNDA1X0RFTEFZKG4pCQkoKG4pPDw0KQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4wMjAzX0RFTEFZKG4pCQkoKG4pPDwyKQorI2RlZmluZQkgIFNPTE9fVkNMS19WSU4wMDAxX0RFTEFZKG4pCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fSVJRX1NUQVQJCQkJMHgwMDEwCisjZGVmaW5lIFNPTE9fSVJRX0VOQUJMRQkJCQkweDAwMTQKKyNkZWZpbmUJICBTT0xPX0lSUV9QMk0obikJCQkoMTw8KChuKSsxNykpCisjZGVmaW5lCSAgU09MT19JUlFfR1BJTwkJCQkoMTw8MTYpCisjZGVmaW5lCSAgU09MT19JUlFfVklERU9fTE9TUwkJCSgxPDwxNSkKKyNkZWZpbmUJICBTT0xPX0lSUV9WSURFT19JTgkJCSgxPDwxNCkKKyNkZWZpbmUJICBTT0xPX0lSUV9NT1RJT04JCQkoMTw8MTMpCisjZGVmaW5lCSAgU09MT19JUlFfQVRBX0NNRAkJCSgxPDwxMikKKyNkZWZpbmUJICBTT0xPX0lSUV9BVEFfRElSCQkJKDE8PDExKQorI2RlZmluZQkgIFNPTE9fSVJRX1BDSV9FUlIJCQkoMTw8MTApCisjZGVmaW5lCSAgU09MT19JUlFfUFMyXzEJCQkoMTw8OSkKKyNkZWZpbmUJICBTT0xPX0lSUV9QUzJfMAkJCSgxPDw4KQorI2RlZmluZQkgIFNPTE9fSVJRX1NQSQkJCQkoMTw8NykKKyNkZWZpbmUJICBTT0xPX0lSUV9JSUMJCQkJKDE8PDYpCisjZGVmaW5lCSAgU09MT19JUlFfVUFSVChuKQkJCSgxPDwoKG4pICsgNCkpCisjZGVmaW5lCSAgU09MT19JUlFfRzcyMwkJCQkoMTw8MykKKyNkZWZpbmUJICBTT0xPX0lSUV9ERUNPREVSCQkJKDE8PDEpCisjZGVmaW5lCSAgU09MT19JUlFfRU5DT0RFUgkJCSgxPDwwKQorCisjZGVmaW5lIFNPTE9fQ0hJUF9PUFRJT04JCQkweDAwMUMKKyNkZWZpbmUgICBTT0xPX0NISVBfSURfTUFTSwkJCTB4MDAwMDAwMDcKKworI2RlZmluZSBTT0xPX0VFUFJPTV9DVFJMCQkJMHgwMDYwCisjZGVmaW5lCSAgU09MT19FRVBST01fQUNDRVNTX0VOCQkJKDE8PDcpCisjZGVmaW5lCSAgU09MT19FRVBST01fQ1MJCQkoMTw8MykKKyNkZWZpbmUJICBTT0xPX0VFUFJPTV9DTEsJCQkoMTw8MikKKyNkZWZpbmUJICBTT0xPX0VFUFJPTV9ETwkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fRUVQUk9NX0RJCQkJKDE8PDApCisjZGVmaW5lCSAgU09MT19FRVBST01fRU5BQkxFCQkJKEVFUFJPTV9BQ0NFU1NfRU4gfCBFRVBST01fQ1MpCisKKyNkZWZpbmUgU09MT19QQ0lfRVJSCQkJCTB4MDA3MAorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9GQVRBTAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfUEFSSVRZCQkJMHgwMDAwMDAwMgorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9UQVJHRVQJCQkweDAwMDAwMDA0CisjZGVmaW5lICAgU09MT19QQ0lfRVJSX1RJTUVPVVQJCQkweDAwMDAwMDA4CisjZGVmaW5lICAgU09MT19QQ0lfRVJSX1AyTQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfQVRBCQkJMHgwMDAwMDAyMAorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9QMk1fREVTQwkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgICBTT0xPX1BDSV9FUlJfRlNNMChfX3MpCQkoKChfX3MpID4+IDE2KSAmIDB4MGYpCisjZGVmaW5lICAgU09MT19QQ0lfRVJSX0ZTTTEoX19zKQkJKCgoX19zKSA+PiAyMCkgJiAweDBmKQorI2RlZmluZSAgIFNPTE9fUENJX0VSUl9GU00yKF9fcykJCSgoKF9fcykgPj4gMjQpICYgMHgxZikKKworI2RlZmluZSBTT0xPX1AyTV9CQVNFCQkJCTB4MDA4MAorCisjZGVmaW5lIFNPTE9fUDJNX0NPTkZJRyhuKQkJCSgweDAwODAgKyAoKG4pKjB4MjApKQorI2RlZmluZQkgIFNPTE9fUDJNX0RNQV9JTlRFUlZBTChuKQkJKChuKTw8NikvKiBOKjMyIGNsb2NrcyAqLworI2RlZmluZQkgIFNPTE9fUDJNX0NTQ19CWVRFX1JFT1JERVIJCSgxPDw1KQkvKiBCR1IgLT4gUkdCICovCisvKiAwOnI9WzE0OjEwXSBnPVs5OjVdIGI9WzQ6MF0sIDE6cj1bMTU6MTFdIGc9WzEwOjVdIGI9WzQ6MF0gKi8KKyNkZWZpbmUJICBTT0xPX1AyTV9DU0NfMTZCSVRfNTY1CQkoMTw8NCkKKyNkZWZpbmUJICBTT0xPX1AyTV9VVl9TV0FQCQkJKDE8PDMpCisjZGVmaW5lCSAgU09MT19QMk1fUENJX01BU1RFUl9NT0RFCQkoMTw8MikKKyNkZWZpbmUJICBTT0xPX1AyTV9ERVNDX0lOVFJfT1BUCQkoMTw8MSkJLyogMTpFbXB0eSwgMDpFYWNoICovCisjZGVmaW5lCSAgU09MT19QMk1fREVTQ19NT0RFCQkJKDE8PDApCisKKyNkZWZpbmUgU09MT19QMk1fREVTX0FEUihuKQkJCSgweDAwODQgKyAoKG4pKjB4MjApKQorCisjZGVmaW5lIFNPTE9fUDJNX0RFU0NfSUQobikJCQkoMHgwMDg4ICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1AyTV9VUERBVEVfSUQobikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fUDJNX1NUQVRVUyhuKQkJCSgweDAwOEMgKyAoKG4pKjB4MjApKQorI2RlZmluZQkgIFNPTE9fUDJNX0NPTU1BTkRfRE9ORQkJCSgxPDw4KQorI2RlZmluZQkgIFNPTE9fUDJNX0NVUlJFTlRfSUQoc3RhdCkJCSgweGZmICYgKHN0YXQpKQorCisjZGVmaW5lIFNPTE9fUDJNX0NPTlRST0wobikJCQkoMHgwMDkwICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1AyTV9QQ0lfSU5DKG4pCQkJKChuKTw8MjApCisjZGVmaW5lCSAgU09MT19QMk1fUkVQRUFUKG4pCQkJKChuKTw8MTApCisvKiAwOjUxMiwgMToyNTYsIDI6MTI4LCAzOjY0LCA0OjMyLCA1OjEyOCgycGFnZSkgKi8KKyNkZWZpbmUJICBTT0xPX1AyTV9CVVJTVF9TSVpFKG4pCQkoKG4pPDw3KQorI2RlZmluZQkgICAgU09MT19QMk1fQlVSU1RfNTEyCQkJMAorI2RlZmluZQkgICAgU09MT19QMk1fQlVSU1RfMjU2CQkJMQorI2RlZmluZQkgICAgU09MT19QMk1fQlVSU1RfMTI4CQkJMgorI2RlZmluZQkgICAgU09MT19QMk1fQlVSU1RfNjQJCQkzCisjZGVmaW5lCSAgICBTT0xPX1AyTV9CVVJTVF8zMgkJCTQKKyNkZWZpbmUJICBTT0xPX1AyTV9DU0NfMTZCSVQJCQkoMTw8NikJLyogMDoyNGJpdCwgMToxNmJpdCAqLworLyogMDpZWzBdPC0wKE9GRiksIDE6WVswXTwtMShPTiksIDI6WVswXTwtR1swXSwgMzpZWzBdPC1CaXRbMTVdICovCisjZGVmaW5lCSAgU09MT19QMk1fQUxQSEFfTU9ERShuKQkJKChuKTw8NCkKKyNkZWZpbmUJICBTT0xPX1AyTV9DU0NfT04JCQkoMTw8MykKKyNkZWZpbmUJICBTT0xPX1AyTV9JTlRFUlJVUFRfUkVRCQkoMTw8MikKKyNkZWZpbmUJICBTT0xPX1AyTV9XUklURQkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fUDJNX1RSQU5TX09OCQkJKDE8PDApCisKKyNkZWZpbmUgU09MT19QMk1fRVhUX0NGRyhuKQkJCSgweDAwOTQgKyAoKG4pKjB4MjApKQorI2RlZmluZQkgIFNPTE9fUDJNX0VYVF9JTkMobikJCQkoKG4pPDwyMCkKKyNkZWZpbmUJICBTT0xPX1AyTV9DT1BZX1NJWkUobikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fUDJNX1RBUl9BRFIobikJCQkoMHgwMDk4ICsgKChuKSoweDIwKSkKKworI2RlZmluZSBTT0xPX1AyTV9FWFRfQURSKG4pCQkJKDB4MDA5QyArICgobikqMHgyMCkpCisKKyNkZWZpbmUgU09MT19QMk1fQlVGRkVSKGkpCQkJKDB4MjAwMCArICgoaSkqNCkpCisKKyNkZWZpbmUgU09MT19WSV9DSF9TV0lUQ0hfMAkJCTB4MDEwMAorI2RlZmluZSBTT0xPX1ZJX0NIX1NXSVRDSF8xCQkJMHgwMTA0CisjZGVmaW5lIFNPTE9fVklfQ0hfU1dJVENIXzIJCQkweDAxMDgKKworI2RlZmluZQlTT0xPX1ZJX0NIX0VOQQkJCQkweDAxMEMKKyNkZWZpbmUJU09MT19WSV9DSF9GT1JNQVQJCQkweDAxMTAKKyNkZWZpbmUJICBTT0xPX1ZJX0ZEX1NFTF9NQVNLKG4pCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZJX1BST0dfTUFTSyhuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WSV9GTVRfQ0ZHCQkJCTB4MDExNAorI2RlZmluZQkgIFNPTE9fVklfRk1UX0NIRUNLX1ZDT1VOVAkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVklfRk1UX0NIRUNLX0hDT1VOVAkJKDE8PDMwKQorI2RlZmluZSAgIFNPTE9fVklfRk1UX1RFU1RfU0lHTkFMCQkoMTw8MjgpCisKKyNkZWZpbmUJU09MT19WSV9QQUdFX1NXCQkJCTB4MDExOAorI2RlZmluZQkgIFNPTE9fRklfSU5WX0RJU1BfTElWRShuKQkJKChuKTw8OCkKKyNkZWZpbmUJICBTT0xPX0ZJX0lOVl9ESVNQX09VVChuKQkJKChuKTw8NykKKyNkZWZpbmUJICBTT0xPX0RJU1BfU1lOQ19GSShuKQkJCSgobik8PDYpCisjZGVmaW5lCSAgU09MT19QSVBfUEFHRV9BREQobikJCQkoKG4pPDwzKQorI2RlZmluZQkgIFNPTE9fTk9STUFMX1BBR0VfQUREKG4pCQkoKG4pPDwwKQorCisjZGVmaW5lCVNPTE9fVklfQUNUX0lfUAkJCQkweDAxMUMKKyNkZWZpbmUJU09MT19WSV9BQ1RfSV9TCQkJCTB4MDEyMAorI2RlZmluZQlTT0xPX1ZJX0FDVF9QCQkJCTB4MDEyNAorI2RlZmluZQkgIFNPTE9fVklfRklfSU5WRVJUCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVklfSF9TVEFSVChuKQkJCSgobik8PDIxKQorI2RlZmluZQkgIFNPTE9fVklfVl9TVEFSVChuKQkJCSgobik8PDExKQorI2RlZmluZQkgIFNPTE9fVklfVl9TVE9QKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZJX1NUQVRVUzAJCQkJMHgwMTI4CisjZGVmaW5lICAgU09MT19WSV9TVEFUVVMwX1BBR0UoX19uKQkJKChfX24pICYgMHgwNykKKyNkZWZpbmUgU09MT19WSV9TVEFUVVMxCQkJCTB4MDEyQworCisvKiBYWFg6IE1pZ2h0IGJlIGJldHRlciBvZmYgaW4ga2VybmVsIGxldmVsIGRpc3AuaCAqLworI2RlZmluZSBESVNQX1BBR0Uoc3RhdCkJCQkJKChzdGF0KSAmIDB4MDcpCisKKyNkZWZpbmUgU09MT19WSV9QQl9DT05GSUcJCQkweDAxMzAKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX1VTRVJfTU9ERQkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fVklfUEJfUEFMCQkJKDE8PDApCisjZGVmaW5lIFNPTE9fVklfUEJfUkFOR0VfSFYJCQkweDAxMzQKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX0hTSVpFKGgpCQkJKChoKTw8MTIpCisjZGVmaW5lCSAgU09MT19WSV9QQl9WU0laRSh2KQkJCSgodik8PDApCisjZGVmaW5lIFNPTE9fVklfUEJfQUNUX0gJCQkweDAxMzgKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX0hTVEFSVChuKQkJCSgobik8PDEyKQorI2RlZmluZQkgIFNPTE9fVklfUEJfSFNUT1AobikJCQkoKG4pPDwwKQorI2RlZmluZSBTT0xPX1ZJX1BCX0FDVF9WCQkJMHgwMTNDCisjZGVmaW5lCSAgU09MT19WSV9QQl9WU1RBUlQobikJCQkoKG4pPDwxMikKKyNkZWZpbmUJICBTT0xPX1ZJX1BCX1ZTVE9QKG4pCQkJKChuKTw8MCkKKworI2RlZmluZQlTT0xPX1ZJX01PU0FJQyhjaCkJCQkoMHgwMTQwICsgKChjaCkqNCkpCisjZGVmaW5lCSAgU09MT19WSV9NT1NBSUNfU1goeCkJCQkoKHgpPDwyNCkKKyNkZWZpbmUJICBTT0xPX1ZJX01PU0FJQ19FWCh4KQkJCSgoeCk8PDE2KQorI2RlZmluZQkgIFNPTE9fVklfTU9TQUlDX1NZKHgpCQkJKCh4KTw8OCkKKyNkZWZpbmUJICBTT0xPX1ZJX01PU0FJQ19FWSh4KQkJCSgoeCk8PDApCisKKyNkZWZpbmUJU09MT19WSV9XSU5fQ1RSTDAoY2gpCQkJKDB4MDE4MCArICgoY2gpKjQpKQorI2RlZmluZQlTT0xPX1ZJX1dJTl9DVFJMMShjaCkJCQkoMHgwMUMwICsgKChjaCkqNCkpCisKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9DSEFOTkVMKG4pCQkoKG4pPDwyOCkKKworI2RlZmluZQkgIFNPTE9fVklfV0lOX1BJUChuKQkJCSgobik8PDI3KQorI2RlZmluZQkgIFNPTE9fVklfV0lOX1NDQUxFKG4pCQkJKChuKTw8MjQpCisKKyNkZWZpbmUJICBTT0xPX1ZJX1dJTl9TWCh4KQkJCSgoeCk8PDEyKQorI2RlZmluZQkgIFNPTE9fVklfV0lOX0VYKHgpCQkJKCh4KTw8MCkKKworI2RlZmluZQkgIFNPTE9fVklfV0lOX1NZKHgpCQkJKCh4KTw8MTIpCisjZGVmaW5lCSAgU09MT19WSV9XSU5fRVkoeCkJCQkoKHgpPDwwKQorCisjZGVmaW5lCVNPTE9fVklfV0lOX09OKGNoKQkJCSgweDAyMDAgKyAoKGNoKSo0KSkKKworI2RlZmluZSBTT0xPX1ZJX1dJTl9TVwkJCQkweDAyNDAKKyNkZWZpbmUgU09MT19WSV9XSU5fTElWRV9BVVRPX01VVEUJCTB4MDI0NAorCisjZGVmaW5lCVNPTE9fVklfTU9UX0FEUgkJCQkweDAyNjAKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9FTihtYXNrKQkJKChtYXNrKTw8MTYpCisjZGVmaW5lCVNPTE9fVklfTU9UX0NUUkwJCQkweDAyNjQKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9GUkFNRV9DT1VOVChuKQkJKChuKTw8MjQpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fU0FNUExFX0xFTkdUSChuKQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9JTlRSX1NUQVJUX1NUT1AJKDE8PDE1KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0ZSRUVaRV9EQVRBCQkoMTw8MTQpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fU0FNUExFX0NPVU5UKG4pCSgobik8PDApCisjZGVmaW5lIFNPTE9fVklfTU9UX0NMRUFSCQkJMHgwMjY4CisjZGVmaW5lIFNPTE9fVklfTU9UX1NUQVRVUwkJCTB4MDI2QworI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0NOVChuKQkJCSgobik8PDApCisjZGVmaW5lIFNPTE9fVklfTU9USU9OX0JPUkRFUgkJCTB4MDI3MAorI2RlZmluZSBTT0xPX1ZJX01PVElPTl9CQVIJCQkweDAyNzQKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9ZX1NFVAkJCSgxPDwyOSkKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9ZX0FERAkJCSgxPDwyOCkKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9DQl9TRVQJCQkoMTw8MjcpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fQ0JfQURECQkJKDE8PDI2KQorI2RlZmluZQkgIFNPTE9fVklfTU9USU9OX0NSX1NFVAkJCSgxPDwyNSkKKyNkZWZpbmUJICBTT0xPX1ZJX01PVElPTl9DUl9BREQJCQkoMTw8MjQpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fWV9WQUxVRSh2KQkJKCh2KTw8MTYpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fQ0JfVkFMVUUodikJCSgodik8PDgpCisjZGVmaW5lCSAgU09MT19WSV9NT1RJT05fQ1JfVkFMVUUodikJCSgodik8PDApCisKKyNkZWZpbmUJU09MT19WT19GTVRfRU5DCQkJCTB4MDMwMAorI2RlZmluZQkgIFNPTE9fVk9fU0NBTl9NT0RFX1BST0dSRVNTSVZFCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19WT19GTVRfVFlQRV9QQUwJCQkoMTw8MzApCisjZGVmaW5lICAgU09MT19WT19GTVRfVFlQRV9OVFNDCQkJMAorI2RlZmluZQkgIFNPTE9fVk9fVVNFUl9TRVQJCQkoMTw8MjkpCisKKyNkZWZpbmUJICBTT0xPX1ZPX0ZJX0NIQU5HRQkJCSgxPDwyMCkKKyNkZWZpbmUJICBTT0xPX1ZPX1VTRVJfQ09MT1JfU0VUX1ZTWU5DCQkoMTw8MTkpCisjZGVmaW5lCSAgU09MT19WT19VU0VSX0NPTE9SX1NFVF9IU1lOQwkJKDE8PDE4KQorI2RlZmluZQkgIFNPTE9fVk9fVVNFUl9DT0xPUl9TRVRfTkFWCQkoMTw8MTcpCisjZGVmaW5lCSAgU09MT19WT19VU0VSX0NPTE9SX1NFVF9OQUgJCSgxPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZPX05BX0NPTE9SX1koWSkJCQkoKFkpPDw4KQorI2RlZmluZQkgIFNPTE9fVk9fTkFfQ09MT1JfQ0IoQ0IpCQkoKChDQikvMTYpPDw0KQorI2RlZmluZQkgIFNPTE9fVk9fTkFfQ09MT1JfQ1IoQ1IpCQkoKChDUikvMTYpPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fQUNUX0gJCQkJMHgwMzA0CisjZGVmaW5lCSAgU09MT19WT19IX0JMQU5LKG4pCQkJKChuKTw8MjIpCisjZGVmaW5lCSAgU09MT19WT19IX1NUQVJUKG4pCQkJKChuKTw8MTEpCisjZGVmaW5lCSAgU09MT19WT19IX1NUT1AobikJCQkoKG4pPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fQUNUX1YJCQkJMHgwMzA4CisjZGVmaW5lCSAgU09MT19WT19WX0JMQU5LKG4pCQkJKChuKTw8MjIpCisjZGVmaW5lCSAgU09MT19WT19WX1NUQVJUKG4pCQkJKChuKTw8MTEpCisjZGVmaW5lCSAgU09MT19WT19WX1NUT1AobikJCQkoKG4pPDwwKQorCisjZGVmaW5lCVNPTE9fVk9fUkFOR0VfSFYJCQkweDAzMEMKKyNkZWZpbmUJICBTT0xPX1ZPX1NZTkNfSU5WRVJUCQkJKDE8PDI0KQorI2RlZmluZQkgIFNPTE9fVk9fSFNZTkNfSU5WRVJUCQkJKDE8PDIzKQorI2RlZmluZQkgIFNPTE9fVk9fVlNZTkNfSU5WRVJUCQkJKDE8PDIyKQorI2RlZmluZQkgIFNPTE9fVk9fSF9MRU4obikJCQkoKG4pPDwxMSkKKyNkZWZpbmUJICBTT0xPX1ZPX1ZfTEVOKG4pCQkJKChuKTw8MCkKKworI2RlZmluZQlTT0xPX1ZPX0RJU1BfQ1RSTAkJCTB4MDMxMAorI2RlZmluZQkgIFNPTE9fVk9fRElTUF9PTgkJCSgxPDwzMSkKKyNkZWZpbmUJICBTT0xPX1ZPX0RJU1BfRVJBU0VfQ09VTlQobikJCSgobiYweGYpPDwyNCkKKyNkZWZpbmUJICBTT0xPX1ZPX0RJU1BfRE9VQkxFX1NDQU4JCSgxPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZPX0RJU1BfU0lOR0xFX1BBR0UJCSgxPDwyMSkKKyNkZWZpbmUJICBTT0xPX1ZPX0RJU1BfQkFTRShuKQkJCSgoKG4pPj4xNikgJiAweGZmZmYpCisKKyNkZWZpbmUgU09MT19WT19ESVNQX0VSQVNFCQkJMHgwMzE0CisjZGVmaW5lCSAgU09MT19WT19ESVNQX0VSQVNFX09OCQkJKDE8PDApCisKKyNkZWZpbmUJU09MT19WT19aT09NX0NUUkwJCQkweDAzMTgKKyNkZWZpbmUJICBTT0xPX1ZPX1pPT01fVkVSX09OCQkJKDE8PDI0KQorI2RlZmluZQkgIFNPTE9fVk9fWk9PTV9IT1JfT04JCQkoMTw8MjMpCisjZGVmaW5lCSAgU09MT19WT19aT09NX1ZfQ09NUAkJCSgxPDwyMikKKyNkZWZpbmUJICBTT0xPX1ZPX1pPT01fU1goaCkJCQkoKChoKS8yKTw8MTEpCisjZGVmaW5lCSAgU09MT19WT19aT09NX1NZKHYpCQkJKCgodikvMik8PDApCisKKyNkZWZpbmUgU09MT19WT19GUkVFWkVfQ1RSTAkJCTB4MDMxQworI2RlZmluZQkgIFNPTE9fVk9fRlJFRVpFX09OCQkJKDE8PDEpCisjZGVmaW5lCSAgU09MT19WT19GUkVFWkVfSU5URVJQT0xBVElPTgkJKDE8PDApCisKKyNkZWZpbmUJU09MT19WT19CS0dfQ09MT1IJCQkweDAzMjAKKyNkZWZpbmUJICBTT0xPX0JHX1koeSkJCQkJKCh5KTw8MTYpCisjZGVmaW5lCSAgU09MT19CR19VKHUpCQkJCSgodSk8PDgpCisjZGVmaW5lCSAgU09MT19CR19WKHYpCQkJCSgodik8PDApCisKKyNkZWZpbmUJU09MT19WT19ERUlOVEVSTEFDRQkJCTB4MDMyNAorI2RlZmluZQkgIFNPTE9fVk9fREVJTlRFUkxBQ0VfVEhSRVNIT0xEKG4pCSgobik8PDgpCisjZGVmaW5lCSAgU09MT19WT19ERUlOVEVSTEFDRV9FREdFX1ZBTFVFKG4pCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WT19CT1JERVJfTElORV9DT0xPUgkJMHgwMzMwCisjZGVmaW5lIFNPTE9fVk9fQk9SREVSX0ZJTExfQ09MT1IJCTB4MDMzNAorI2RlZmluZSBTT0xPX1ZPX0JPUkRFUl9MSU5FX01BU0sJCTB4MDMzOAorI2RlZmluZSBTT0xPX1ZPX0JPUkRFUl9GSUxMX01BU0sJCTB4MDMzYworCisjZGVmaW5lIFNPTE9fVk9fQk9SREVSX1gobikJCQkoMHgwMzQwKygobikqNCkpCisjZGVmaW5lIFNPTE9fVk9fQk9SREVSX1kobikJCQkoMHgwMzU0KygobikqNCkpCisKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TRVQJCQkweDAzNjgKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TVEFSVAkJCTB4MDM2YworI2RlZmluZSBTT0xPX1ZPX0NFTExfRVhUX1NUT1AJCQkweDAzNzAKKworI2RlZmluZSBTT0xPX1ZPX0NFTExfRVhUX1NFVDIJCQkweDAzNzQKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TVEFSVDIJCQkweDAzNzgKKyNkZWZpbmUgU09MT19WT19DRUxMX0VYVF9TVE9QMgkJCTB4MDM3YworCisjZGVmaW5lIFNPTE9fVk9fUkVDVEFOR0xFX0NUUkwobikJCSgweDAzNjgrKChuKSoxMikpCisjZGVmaW5lIFNPTE9fVk9fUkVDVEFOR0xFX1NUQVJUKG4pCQkoMHgwMzZjKygobikqMTIpKQorI2RlZmluZSBTT0xPX1ZPX1JFQ1RBTkdMRV9TVE9QKG4pCQkoMHgwMzcwKygobikqMTIpKQorCisjZGVmaW5lIFNPTE9fVk9fQ1VSU09SX1BPUwkJCSgweDAzODApCisjZGVmaW5lIFNPTE9fVk9fQ1VSU09SX0NMUgkJCSgweDAzODQpCisjZGVmaW5lIFNPTE9fVk9fQ1VSU09SX0NMUjIJCQkoMHgwMzg4KQorI2RlZmluZSBTT0xPX1ZPX0NVUlNPUl9NQVNLKGlkKQkJCSgweDAzOTArKChpZCkqNCkpCisKKyNkZWZpbmUgU09MT19WT19FWFBBTlNJT04oaWQpCQkJKDB4MDI1MCsoKGlkKSo0KSkKKworI2RlZmluZQlTT0xPX09TR19DT05GSUcJCQkJMHgwM0UwCisjZGVmaW5lCSAgU09MT19WT19PU0dfT04JCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19WT19PU0dfQ09MT1JfTVVURQkJKDE8PDI4KQorI2RlZmluZQkgIFNPTE9fVk9fT1NHX0FMUEhBX1JBVEUobikJCSgobik8PDIyKQorI2RlZmluZQkgIFNPTE9fVk9fT1NHX0FMUEhBX0JHX1JBVEUobikJCSgobik8PDE2KQorI2RlZmluZQkgIFNPTE9fVk9fT1NHX0JBU0Uob2Zmc2V0KQkJKCgob2Zmc2V0KT4+MTYpJjB4ZmZmZikKKworI2RlZmluZSBTT0xPX09TR19FUkFTRQkJCQkweDAzRTQKKyNkZWZpbmUJICBTT0xPX09TR19FUkFTRV9PTgkJCSgweDgwKQorI2RlZmluZQkgIFNPTE9fT1NHX0VSQVNFX09GRgkJCSgweDAwKQorCisjZGVmaW5lIFNPTE9fVk9fT1NHX0JMSU5LCQkJMHgwM0U4CisjZGVmaW5lCSAgU09MT19WT19PU0dfQkxJTktfT04JCQkoMTw8MSkKKyNkZWZpbmUJICBTT0xPX1ZPX09TR19CTElOS19JTlRSRVZBTDE4CQkoMTw8MCkKKworI2RlZmluZSBTT0xPX0NBUF9CQVNFCQkJCTB4MDQwMAorI2RlZmluZQkgIFNPTE9fQ0FQX01BWF9QQUdFKG4pCQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19DQVBfQkFTRV9BRERSKG4pCQkJKChuKTw8MCkKKyNkZWZpbmUgU09MT19DQVBfQlRXCQkJCTB4MDQwNAorI2RlZmluZQkgIFNPTE9fQ0FQX1BST0dfQkFORFdJRFRIKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fQ0FQX01BWF9CQU5EV0lEVEgobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19ESU1fU0NBTEUxCQkJCTB4MDQwOAorI2RlZmluZSBTT0xPX0RJTV9TQ0FMRTIJCQkJMHgwNDBDCisjZGVmaW5lIFNPTE9fRElNX1NDQUxFMwkJCQkweDA0MTAKKyNkZWZpbmUgU09MT19ESU1fU0NBTEU0CQkJCTB4MDQxNAorI2RlZmluZSBTT0xPX0RJTV9TQ0FMRTUJCQkJMHgwNDE4CisjZGVmaW5lCSAgU09MT19ESU1fVl9NQl9OVU1fRlJBTUUobikJCSgobik8PDE2KQorI2RlZmluZQkgIFNPTE9fRElNX1ZfTUJfTlVNX0ZJRUxEKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fRElNX0hfTUJfTlVNKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX0RJTV9QUk9HCQkJCTB4MDQxQworI2RlZmluZSBTT0xPX0NBUF9TVEFUVVMJCQkJMHgwNDIwCisKKyNkZWZpbmUgU09MT19DQVBfQ0hfU0NBTEUoY2gpCQkJKDB4MDQ0MCsoKGNoKSo0KSkKKyNkZWZpbmUgU09MT19DQVBfQ0hfQ09NUF9FTkFfRShjaCkJCSgweDA0ODArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fQ0FQX0NIX0lOVFYoY2gpCQkJKDB4MDRDMCsoKGNoKSo0KSkKKyNkZWZpbmUgU09MT19DQVBfQ0hfSU5UVl9FKGNoKQkJCSgweDA1MDArKChjaCkqNCkpCisKKworI2RlZmluZSBTT0xPX1ZFX0NGRzAJCQkJMHgwNjEwCisjZGVmaW5lCSAgU09MT19WRV9UV09fUEFHRV9NT0RFCQkJKDE8PDMxKQorI2RlZmluZQkgIFNPTE9fVkVfSU5UUl9DVFJMKG4pCQkJKChuKTw8MjQpCisjZGVmaW5lCSAgU09MT19WRV9CTE9DS19TSVpFKG4pCQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19WRV9CTE9DS19CQVNFKG4pCQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZFX0NGRzEJCQkJMHgwNjE0CisjZGVmaW5lCSAgU09MT19WRV9CWVRFX0FMSUdOKG4pCQkJKChuKTw8MjQpCisjZGVmaW5lCSAgU09MT19WRV9JTlNFUlRfSU5ERVgJCQkoMTw8MTgpCisjZGVmaW5lCSAgU09MT19WRV9NT1RJT05fTU9ERShuKQkJKChuKTw8MTYpCisjZGVmaW5lCSAgU09MT19WRV9NT1RJT05fQkFTRShuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZFX1dNUktfUE9MWQkJCTB4MDYxQworI2RlZmluZSBTT0xPX1ZFX1ZNUktfSU5JVF9LRVkJCQkweDA2MjAKKyNkZWZpbmUgU09MT19WRV9XTVJLX1NUUkwJCQkweDA2MjQKKyNkZWZpbmUgU09MT19WRV9FTkNSWVBfUE9MWQkJCTB4MDYyOAorI2RlZmluZSBTT0xPX1ZFX0VOQ1JZUF9JTklUCQkJMHgwNjJDCisjZGVmaW5lIFNPTE9fVkVfQVRUUgkJCQkweDA2MzAKKyNkZWZpbmUJICBTT0xPX1ZFX0xJVFRMRV9FTkRJQU4JCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19DT01QX0FUVFJfUk4JCQkoMTw8MzApCisjZGVmaW5lCSAgU09MT19DT01QX0FUVFJfRkNPREUobikJCSgobik8PDI3KQorI2RlZmluZQkgIFNPTE9fQ09NUF9USU1FX0lOQyhuKQkJCSgobik8PDI1KQorI2RlZmluZQkgIFNPTE9fQ09NUF9USU1FX1dJRFRIKG4pCQkoKG4pPDwyMSkKKyNkZWZpbmUJICBTT0xPX0RDVF9JTlRFUlZBTChuKQkJCSgobik8PDE2KQorCisjZGVmaW5lIFNPTE9fVkVfU1RBVEUobikJCQkoMHgwNjQwKygobikqNCkpCitzdHJ1Y3QgdmlkZW5jX3N0YXR1cyB7CisJdW5pb24geworCQl1MzIgc3RhdHVzMDsKKwkJc3RydWN0IHsKKwkJCXUzMiBtcDRfZW5jX2NvZGVfc2l6ZToyMCwgc2FkX21vdGlvbjoxLCB2aWRfbW90aW9uOjEsCisJCQkgICAgdm9wX3R5cGU6MiwgdmlkZW9fY2hhbm5lbDo1LCBzb3VyY2VfZmllbGRfaWR4OjEsCisJCQkgICAgaW50ZXJsYWNlOjEsIHByb2dyZXNzaXZlOjE7CisJCX0gc3RhdHVzMF9zdDsKKwl9OworCXVuaW9uIHsKKwkJdTMyIHN0YXR1czE7CisJCXN0cnVjdCB7CisJCQl1MzIgdnNpemU6OCwgaHNpemU6OCwgbGFzdF9xdWV1ZTo0LCBmb28xOjgsIHNjYWxlOjQ7CisJCX0gc3RhdHVzMV9zdDsKKwl9OworCXVuaW9uIHsKKwkJdTMyIHN0YXR1czQ7CisJCXN0cnVjdCB7CisJCQl1MzIganBlZ19jb2RlX3NpemU6MjAsIGludGVydmFsOjEwLCBmb28xOjI7CisJCX0gc3RhdHVzNF9zdDsKKwl9OworCXVuaW9uIHsKKwkJdTMyIHN0YXR1czk7CisJCXN0cnVjdCB7CisJCQl1MzIgY2hhbm5lbDo1LCBmb28xOjI3OworCQl9IHN0YXR1czlfc3Q7CisJfTsKKwl1bmlvbiB7CisJCXUzMiBzdGF0dXMxMDsKKwkJc3RydWN0IHsKKwkJCXUzMiBtcDRfY29kZV9zaXplOjIwLCBmb286MTI7CisJCX0gc3RhdHVzMTBfc3Q7CisJfTsKKwl1bmlvbiB7CisJCXUzMiBzdGF0dXMxMTsKKwkJc3RydWN0IHsKKwkJCXUzMiBsYXN0X3F1ZXVlOjgsIGZvbzE6MjQ7CisJCX0gc3RhdHVzMTFfc3Q7CisJfTsKK307CisKKyNkZWZpbmUgU09MT19WRV9KUEVHX1FQX1RCTAkJCTB4MDY3MAorI2RlZmluZSBTT0xPX1ZFX0pQRUdfUVBfQ0hfTAkJCTB4MDY3NAorI2RlZmluZSBTT0xPX1ZFX0pQRUdfUVBfQ0hfSAkJCTB4MDY3OAorI2RlZmluZSBTT0xPX1ZFX0pQRUdfQ0ZHCQkJMHgwNjdDCisjZGVmaW5lIFNPTE9fVkVfSlBFR19DVFJMCQkJMHgwNjgwCisKKyNkZWZpbmUgU09MT19WRV9PU0RfQ0gJCQkJMHgwNjkwCisjZGVmaW5lIFNPTE9fVkVfT1NEX0JBU0UJCQkweDA2OTQKKyNkZWZpbmUgU09MT19WRV9PU0RfQ0xSCQkJCTB4MDY5OAorI2RlZmluZSBTT0xPX1ZFX09TRF9PUFQJCQkJMHgwNjlDCisKKyNkZWZpbmUgU09MT19WRV9DSF9JTlRMKGNoKQkJCSgweDA3MDArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfTU9UKGNoKQkJCSgweDA3NDArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfUVAoY2gpCQkJKDB4MDc4MCsoKGNoKSo0KSkKKyNkZWZpbmUgU09MT19WRV9DSF9RUF9FKGNoKQkJCSgweDA3QzArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfR09QKGNoKQkJCSgweDA4MDArKChjaCkqNCkpCisjZGVmaW5lIFNPTE9fVkVfQ0hfR09QX0UoY2gpCQkJKDB4MDg0MCsoKGNoKSo0KSkKKyNkZWZpbmUgU09MT19WRV9DSF9SRUZfQkFTRShjaCkJCQkoMHgwODgwKygoY2gpKjQpKQorI2RlZmluZSBTT0xPX1ZFX0NIX1JFRl9CQVNFX0UoY2gpCQkoMHgwOEMwKygoY2gpKjQpKQorCisjZGVmaW5lIFNPTE9fVkVfTVBFRzRfUVVFKG4pCQkJKDB4MEEwMCsoKG4pKjgpKQorI2RlZmluZSBTT0xPX1ZFX0pQRUdfUVVFKG4pCQkJKDB4MEEwNCsoKG4pKjgpKQorCisjZGVmaW5lIFNPTE9fVkRfQ0ZHMAkJCQkweDA5MDAKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19OT19XUklURV9OT19XSU5ET1cJKDE8PDI0KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0JVU1lfV0lBVF9DT0RFCQkoMTw8MjMpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfQlVTWV9XSUFUX1JFRgkJKDE8PDIyKQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0JVU1lfV0lBVF9SRVMJCSgxPDwyMSkKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19CVVNZX1dJQVRfTVMJCSgxPDwyMCkKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19TSU5HTEVfTU9ERQkJKDE8PDE4KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX1NDQUxfTUFOVUFMCQkoMTw8MTcpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfVVNFUl9QQUdFX0NUUkwJCSgxPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19MSVRUTEVfRU5ESUFOCQkoMTw8MTUpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfU1RBUlRfRkkJCQkoMTw8MTQpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfRVJSX0xPQ0sJCQkoMTw8MTMpCisjZGVmaW5lCSAgU09MT19WRF9DRkdfRVJSX0lOVF9FTkEJCSgxPDwxMikKKyNkZWZpbmUJICBTT0xPX1ZEX0NGR19USU1FX1dJRFRIKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVkRfQ0ZHX0RDVF9JTlRFUlZBTChuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZEX0NGRzEJCQkJMHgwOTA0CisKKyNkZWZpbmUJU09MT19WRF9ERUlOVEVSTEFDRQkJCTB4MDkwOAorI2RlZmluZQkgIFNPTE9fVkRfREVJTlRFUkxBQ0VfVEhSRVNIT0xEKG4pCSgobik8PDgpCisjZGVmaW5lCSAgU09MT19WRF9ERUlOVEVSTEFDRV9FREdFX1ZBTFVFKG4pCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9DT0RFX0FEUgkJCTB4MDkwQworCisjZGVmaW5lIFNPTE9fVkRfQ1RSTAkJCQkweDA5MTAKKyNkZWZpbmUJICBTT0xPX1ZEX09QRVJfT04JCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19WRF9NQVhfSVRFTShuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9TVEFUVVMwCQkJCTB4MDkyMAorI2RlZmluZQkgIFNPTE9fVkRfU1RBVFVTMF9JTlRSX0FDSwkJKDE8PDIyKQorI2RlZmluZQkgIFNPTE9fVkRfU1RBVFVTMF9JTlRSX0VNUFRZCQkoMTw8MjEpCisjZGVmaW5lCSAgU09MT19WRF9TVEFUVVMwX0lOVFJfRVJSCQkoMTw8MjApCisKKyNkZWZpbmUgU09MT19WRF9TVEFUVVMxCQkJCTB4MDkyNAorCisjZGVmaW5lIFNPTE9fVkRfSURYMAkJCQkweDA5MzAKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9JTlRFUkxBQ0UJCQkoMTw8MzApCisjZGVmaW5lCSAgU09MT19WRF9JRFhfQ0hBTk5FTChuKQkJKChuKTw8MjQpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfU0laRShuKQkJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9JRFgxCQkJCTB4MDkzNAorI2RlZmluZQkgIFNPTE9fVkRfSURYX1NSQ19TQ0FMRShuKQkJKChuKTw8MjgpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfV0lORE9XKG4pCQkJKChuKTw8MjQpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfREVJTlRFUkxBQ0UJCSgxPDwxNikKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9IX0JMT0NLKG4pCQkoKG4pPDw4KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX1ZfQkxPQ0sobikJCSgobik8PDApCisKKyNkZWZpbmUgU09MT19WRF9JRFgyCQkJCTB4MDkzOAorI2RlZmluZQkgIFNPTE9fVkRfSURYX1JFRl9CQVNFX1NJREUJCSgxPDwzMSkKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9SRUZfQkFTRShuKQkJKCgobik+PjE2KSYweGZmZmYpCisKKyNkZWZpbmUgU09MT19WRF9JRFgzCQkJCTB4MDkzQworI2RlZmluZQkgIFNPTE9fVkRfSURYX0RJU1BfU0NBTEUobikJCSgobik8PDI4KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0lOVEVSTEFDRV9XUgkJKDE8PDI3KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0lOVEVSUE9MCQkJKDE8PDI2KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX0hPUjJYCQkJKDE8PDI1KQorI2RlZmluZQkgIFNPTE9fVkRfSURYX09GRlNFVF9YKG4pCQkoKG4pPDwxMikKKyNkZWZpbmUJICBTT0xPX1ZEX0lEWF9PRkZTRVRfWShuKQkJKChuKTw8MCkKKworI2RlZmluZSBTT0xPX1ZEX0lEWDQJCQkJMHgwOTQwCisjZGVmaW5lCSAgU09MT19WRF9JRFhfREVDX1dSX1BBR0UobikJCSgobik8PDgpCisjZGVmaW5lCSAgU09MT19WRF9JRFhfRElTUF9SRF9QQUdFKG4pCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fVkRfV1JfUEFHRShuKQkJCSgweDAzRjAgKyAoKG4pICogNCkpCisKKworI2RlZmluZSBTT0xPX0dQSU9fQ09ORklHXzAJCQkweDBCMDAKKyNkZWZpbmUgU09MT19HUElPX0NPTkZJR18xCQkJMHgwQjA0CisjZGVmaW5lIFNPTE9fR1BJT19EQVRBX09VVAkJCTB4MEIwOAorI2RlZmluZSBTT0xPX0dQSU9fREFUQV9JTgkJCTB4MEIwQworI2RlZmluZSBTT0xPX0dQSU9fSU5UX0FDS19TVEEJCQkweDBCMTAKKyNkZWZpbmUgU09MT19HUElPX0lOVF9FTkEJCQkweDBCMTQKKyNkZWZpbmUgU09MT19HUElPX0lOVF9DRkdfMAkJCTB4MEIxOAorI2RlZmluZSBTT0xPX0dQSU9fSU5UX0NGR18xCQkJMHgwQjFDCisKKworI2RlZmluZSBTT0xPX0lJQ19DRkcJCQkJMHgwQjIwCisjZGVmaW5lCSAgU09MT19JSUNfRU5BQkxFCQkJKDE8PDgpCisjZGVmaW5lCSAgU09MT19JSUNfUFJFU0NBTEUobikJCQkoKG4pPDwwKQorCisjZGVmaW5lIFNPTE9fSUlDX0NUUkwJCQkJMHgwQjI0CisjZGVmaW5lCSAgU09MT19JSUNfQVVUT19DTEVBUgkJCSgxPDwyMCkKKyNkZWZpbmUJICBTT0xPX0lJQ19TVEFURV9SWF9BQ0sJCQkoMTw8MTkpCisjZGVmaW5lCSAgU09MT19JSUNfU1RBVEVfQlVTWQkJCSgxPDwxOCkKKyNkZWZpbmUJICBTT0xPX0lJQ19TVEFURV9TSUdfRVJSCQkoMTw8MTcpCisjZGVmaW5lCSAgU09MT19JSUNfU1RBVEVfVFJOUwkJCSgxPDwxNikKKyNkZWZpbmUJICBTT0xPX0lJQ19DSF9TRVQobikJCQkoKG4pPDw1KQorI2RlZmluZQkgIFNPTE9fSUlDX0FDS19FTgkJCSgxPDw0KQorI2RlZmluZQkgIFNPTE9fSUlDX1NUQVJUCQkJKDE8PDMpCisjZGVmaW5lCSAgU09MT19JSUNfU1RPUAkJCQkoMTw8MikKKyNkZWZpbmUJICBTT0xPX0lJQ19SRUFECQkJCSgxPDwxKQorI2RlZmluZQkgIFNPTE9fSUlDX1dSSVRFCQkJKDE8PDApCisKKyNkZWZpbmUgU09MT19JSUNfVFhECQkJCTB4MEIyOAorI2RlZmluZSBTT0xPX0lJQ19SWEQJCQkJMHgwQjJDCisKKy8qCisgKglVQVJUIFJFR0lTVEVSCisgKi8KKyNkZWZpbmUgU09MT19VQVJUX0NPTlRST0wobikJCQkoMHgwQkEwICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfQ0xLX0RJVihuKQkJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fTU9ERU1fQ1RSTF9FTgkJCSgxPDwyMCkKKyNkZWZpbmUJICBTT0xPX1BBUklUWV9FUlJPUl9EUk9QCQkoMTw8MTgpCisjZGVmaW5lCSAgU09MT19JUlFfRVJSX0VOCQkJKDE8PDE3KQorI2RlZmluZQkgIFNPTE9fSVJRX1JYX0VOCQkJKDE8PDE2KQorI2RlZmluZQkgIFNPTE9fSVJRX1RYX0VOCQkJKDE8PDE1KQorI2RlZmluZQkgIFNPTE9fUlhfRU4JCQkJKDE8PDE0KQorI2RlZmluZQkgIFNPTE9fVFhfRU4JCQkJKDE8PDEzKQorI2RlZmluZQkgIFNPTE9fVUFSVF9IQUxGX0RVUExFWAkJCSgxPDwxMikKKyNkZWZpbmUJICBTT0xPX1VBUlRfTE9PUEJBQ0sJCQkoMTw8MTEpCisKKyNkZWZpbmUJICBTT0xPX0JBVURSQVRFXzIzMDQwMAkJCSgoMDw8OSl8KDA8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfMTE1MjAwCQkJKCgwPDw5KXwoMTw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV81NzYwMAkJCSgoMDw8OSl8KDI8PDYpKQorI2RlZmluZQkgIFNPTE9fQkFVRFJBVEVfMzg0MDAJCQkoKDA8PDkpfCgzPDw2KSkKKyNkZWZpbmUJICBTT0xPX0JBVURSQVRFXzE5MjAwCQkJKCgwPDw5KXwoNDw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV85NjAwCQkJKCgwPDw5KXwoNTw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV80ODAwCQkJKCgwPDw5KXwoNjw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV8yNDAwCQkJKCgxPDw5KXwoNjw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV8xMjAwCQkJKCgyPDw5KXwoNjw8NikpCisjZGVmaW5lCSAgU09MT19CQVVEUkFURV8zMDAJCQkoKDM8PDkpfCg2PDw2KSkKKworI2RlZmluZQkgIFNPTE9fVUFSVF9EQVRBX0JJVF84CQkJKDM8PDQpCisjZGVmaW5lCSAgU09MT19VQVJUX0RBVEFfQklUXzcJCQkoMjw8NCkKKyNkZWZpbmUJICBTT0xPX1VBUlRfREFUQV9CSVRfNgkJCSgxPDw0KQorI2RlZmluZQkgIFNPTE9fVUFSVF9EQVRBX0JJVF81CQkJKDA8PDQpCisKKyNkZWZpbmUJICBTT0xPX1VBUlRfU1RPUF9CSVRfMQkJCSgwPDwyKQorI2RlZmluZQkgIFNPTE9fVUFSVF9TVE9QX0JJVF8yCQkJKDE8PDIpCisKKyNkZWZpbmUJICBTT0xPX1VBUlRfUEFSSVRZX05PTkUJCQkoMDw8MCkKKyNkZWZpbmUJICBTT0xPX1VBUlRfUEFSSVRZX0VWRU4JCQkoMjw8MCkKKyNkZWZpbmUJICBTT0xPX1VBUlRfUEFSSVRZX09ERAkJCSgzPDwwKQorCisjZGVmaW5lIFNPTE9fVUFSVF9TVEFUVVMobikJCQkoMHgwQkE0ICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfQ1RTCQkJCSgxPDwxNSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfUlhfQlVTWQkJCSgxPDwxNCkKKyNkZWZpbmUJICBTT0xPX1VBUlRfT1ZFUlJVTgkJCSgxPDwxMykKKyNkZWZpbmUJICBTT0xPX1VBUlRfRlJBTUVfRVJSCQkJKDE8PDEyKQorI2RlZmluZQkgIFNPTE9fVUFSVF9QQVJJVFlfRVJSCQkJKDE8PDExKQorI2RlZmluZQkgIFNPTE9fVUFSVF9UWF9CVVNZCQkJKDE8PDUpCisKKyNkZWZpbmUJICBTT0xPX1VBUlRfUlhfQlVGRl9DTlQoc3RhdCkJCSgoKHN0YXQpPj42KSAmIDB4MWYpCisjZGVmaW5lCSAgU09MT19VQVJUX1JYX0JVRkZfU0laRQkJOAorI2RlZmluZQkgIFNPTE9fVUFSVF9UWF9CVUZGX0NOVChzdGF0KQkJKCgoc3RhdCk+PjApICYgMHgxZikKKyNkZWZpbmUJICBTT0xPX1VBUlRfVFhfQlVGRl9TSVpFCQk4CisKKyNkZWZpbmUgU09MT19VQVJUX1RYX0RBVEEobikJCQkoMHgwQkE4ICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfVFhfREFUQV9QVVNICQkoMTw8OCkKKyNkZWZpbmUgU09MT19VQVJUX1JYX0RBVEEobikJCQkoMHgwQkFDICsgKChuKSoweDIwKSkKKyNkZWZpbmUJICBTT0xPX1VBUlRfUlhfREFUQV9QT1AJCQkoMTw8OCkKKworI2RlZmluZSBTT0xPX1RJTUVSX0NMT0NLX05VTQkJCTB4MGJlMAorI2RlZmluZSBTT0xPX1RJTUVSX1dBVENIRE9HCQkJMHgwYmU0CisjZGVmaW5lIFNPTE9fVElNRVJfVVNFQwkJCQkweDBiZTgKKyNkZWZpbmUgU09MT19USU1FUl9TRUMJCQkJMHgwYmVjCisKKyNkZWZpbmUgU09MT19BVURJT19DT05UUk9MCQkJMHgwRDAwCisjZGVmaW5lCSAgU09MT19BVURJT19FTkFCTEUJCQkoMTw8MzEpCisjZGVmaW5lCSAgU09MT19BVURJT19NQVNURVJfTU9ERQkJKDE8PDMwKQorI2RlZmluZQkgIFNPTE9fQVVESU9fSTJTX01PREUJCQkoMTw8MjkpCisjZGVmaW5lCSAgU09MT19BVURJT19JMlNfTFJfU1dBUAkJKDE8PDI3KQorI2RlZmluZQkgIFNPTE9fQVVESU9fSTJTXzhCSVQJCQkoMTw8MjYpCisjZGVmaW5lCSAgU09MT19BVURJT19JMlNfTVVMVEkobikJCSgobik8PDI0KQorI2RlZmluZQkgIFNPTE9fQVVESU9fTUlYXzlUTzAJCQkoMTw8MjMpCisjZGVmaW5lCSAgU09MT19BVURJT19ERUNfOVRPMF9WT0wobikJCSgobik8PDIwKQorI2RlZmluZQkgIFNPTE9fQVVESU9fTUlYXzE5VE8xMAkJCSgxPDwxOSkKKyNkZWZpbmUJICBTT0xPX0FVRElPX0RFQ18xOVRPMTBfVk9MKG4pCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX0FVRElPX01PREUobikJCQkoKG4pPDwwKQorI2RlZmluZSBTT0xPX0FVRElPX1NBTVBMRQkJCTB4MEQwNAorI2RlZmluZQkgIFNPTE9fQVVESU9fRUVfTU9ERV9PTgkJCSgxPDwzMCkKKyNkZWZpbmUJICBTT0xPX0FVRElPX0VFX0VOQ19DSChjaCkJCSgoY2gpPDwyNSkKKyNkZWZpbmUJICBTT0xPX0FVRElPX0JJVFJBVEUobikJCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX0FVRElPX0NMS19ESVYobikJCQkoKG4pPDwwKQorI2RlZmluZSBTT0xPX0FVRElPX0ZETUFfSU5UUgkJCTB4MEQwOAorI2RlZmluZQkgIFNPTE9fQVVESU9fRkRNQV9JTlRFUlZBTChuKQkJKChuKTw8MTkpCisjZGVmaW5lCSAgU09MT19BVURJT19JTlRSX09SREVSKG4pCQkoKG4pPDwxNikKKyNkZWZpbmUJICBTT0xPX0FVRElPX0ZETUFfQkFTRShuKQkJKChuKTw8MCkKKyNkZWZpbmUgU09MT19BVURJT19FVk9MXzAJCQkweDBEMEMKKyNkZWZpbmUgU09MT19BVURJT19FVk9MXzEJCQkweDBEMTAKKyNkZWZpbmUJICBTT0xPX0FVRElPX0VWT0woY2gsIHZhbHVlKQkJKCh2YWx1ZSk8PCgoY2gpJTEwKSkKKyNkZWZpbmUgU09MT19BVURJT19TVEEJCQkJMHgwRDE0CisKKworI2RlZmluZSBTT0xPX1dBVENIRE9HCQkJCTB4MEJFNAorI2RlZmluZSBXQVRDSERPR19TVEFUKHN0YXR1cykJCQkoc3RhdHVzPDw4KQorI2RlZmluZSBXQVRDSERPR19USU1FKHNlYykJCQkoc2VjJjB4ZmYpCisKKyNlbmRpZiAvKiBfX1NPTE82MDEwX1JFR0lTVEVSU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdHcyOC5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXR3MjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTU5YzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXR3MjguYwpAQCAtMCwwICsxLDgyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKyNpbmNsdWRlICJzb2xvNjAxMC10dzI4LmgiCisKKy8qIFhYWDogU29tZSBvZiB0aGVzZSB2YWx1ZXMgYXJlIG1hc2tlZCBpbnRvIGFuIDgtYml0IHJlZ3MsIGFuZCBzaGlmdGVkCisgKiBhcm91bmQgZm9yIG90aGVyIDgtYml0IHJlZ3MuIFdoYXQgYXJlIHRoZSBtYWdpYyBiaXRzIGluIHRoZXNlIHZhbHVlcz8gKi8KKyNkZWZpbmUgREVGQVVMVF9IREVMQVlfTlRTQwkJKDMyIC0gNCkKKyNkZWZpbmUgREVGQVVMVF9IQUNUSVZFX05UU0MJCSg3MjAgKyAxNikKKyNkZWZpbmUgREVGQVVMVF9WREVMQVlfTlRTQwkJKDcgLSAyKQorI2RlZmluZSBERUZBVUxUX1ZBQ1RJVkVfTlRTQwkJKDI0MCArIDQpCisKKyNkZWZpbmUgREVGQVVMVF9IREVMQVlfUEFMCQkoMzIgKyA0KQorI2RlZmluZSBERUZBVUxUX0hBQ1RJVkVfUEFMCQkoODY0LURFRkFVTFRfSERFTEFZX1BBTCkKKyNkZWZpbmUgREVGQVVMVF9WREVMQVlfUEFMCQkoNikKKyNkZWZpbmUgREVGQVVMVF9WQUNUSVZFX1BBTAkJKDMxMi1ERUZBVUxUX1ZERUxBWV9QQUwpCisKK3N0YXRpYyB1OCB0YmxfdHcyODY0X3RlbXBsYXRlW10gPSB7CisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgwMAorCTB4MTIsIDB4ZjUsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgxMAorCTB4MTIsIDB4ZjUsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgyMAorCTB4MTIsIDB4ZjUsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHg4MCwgMHgxMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgzMAorCTB4MTIsIDB4ZjUsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg0MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg1MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg2MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg3MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4QTMsIDB4MDAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhjYywgMHgwMCwgMHg4MCwgMHg0NCwgMHg1MCwgLy8gMHg4MAorCTB4MjIsIDB4MDEsIDB4ZDgsIDB4YmMsIDB4YjgsIDB4NDQsIDB4MzgsIDB4MDAsCisJMHgwMCwgMHg3OCwgMHg3MiwgMHgzZSwgMHgxNCwgMHhhNSwgMHhlNCwgMHgwNSwgLy8gMHg5MAorCTB4MDAsIDB4MjgsIDB4NDQsIDB4NDQsIDB4YTAsIDB4ODgsIDB4NWEsIDB4MDEsCisJMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgxYSwgMHgxYSwgMHgxYSwgMHgxYSwgLy8gMHhhMAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4ZjAsIDB4NDQsCisJMHg0NCwgMHgwYSwgMHgwMCwgMHhmZiwgMHhlZiwgMHhlZiwgMHhlZiwgMHhlZiwgLy8gMHhiMAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHhjMAorCTB4MDAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4YjEsIDB4ZTQsIDB4NDAsIDB4MDAsCisJMHg3NywgMHg3NywgMHgwMSwgMHgxMywgMHg1NywgMHg5YiwgMHhkZiwgMHgyMCwgLy8gMHhkMAorCTB4NjQsIDB4YTgsIDB4ZWMsIDB4ZDEsIDB4MGYsIDB4MTEsIDB4MTEsIDB4ODEsCisJMHgxMCwgMHhlMCwgMHhiYiwgMHhiYiwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgLy8gMHhlMAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsCisJMHg4MywgMHhiNSwgMHgwOSwgMHg3OCwgMHg4NSwgMHgwMCwgMHgwMSwgMHgyMCwgLy8gMHhmMAorCTB4NjQsIDB4MTEsIDB4NDAsIDB4YWYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCit9OworCitzdGF0aWMgdTggdGJsX3R3Mjg2NV9udHNjX3RlbXBsYXRlW10gPSB7CisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgwMAorCTB4MTIsIDB4ZmYsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgxMAorCTB4MTIsIDB4ZmYsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHgzMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgyMAorCTB4MTIsIDB4ZmYsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHhmMCwgMHg3MCwgMHg0OCwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMiwgLy8gMHgzMAorCTB4MTIsIDB4ZmYsIDB4MDksIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsCisJMHgwMCwgMHgwMCwgMHg5MCwgMHg2OCwgMHgwMCwgMHgzOCwgMHg4MCwgMHg4MCwgLy8gMHg0MAorCTB4ODAsIDB4ODAsIDB4NzcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg1MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0NSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHg2MAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4NDMsCisJMHgwOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMSwgMHgwMywgMHhFRiwgMHgwMywgLy8gMHg3MAorCTB4RTksIDB4MDMsIDB4RDksIDB4MTUsIDB4MTUsIDB4RTQsIDB4QTMsIDB4ODAsCisJMHgwMCwgMHgwMiwgMHgwMCwgMHhDQywgMHgwMCwgMHg4MCwgMHg0NCwgMHg1MCwgLy8gMHg4MAorCTB4MjIsIDB4MDEsIDB4RDgsIDB4QkMsIDB4QjgsIDB4NDQsIDB4MzgsIDB4MDAsCisJMHgwMCwgMHg3OCwgMHg0NCwgMHgzRCwgMHgxNCwgMHhBNSwgMHhFMCwgMHgwNSwgLy8gMHg5MAorCTB4MDAsIDB4MjgsIDB4NDQsIDB4NDQsIDB4QTAsIDB4OTAsIDB4NTIsIDB4MTMsCisJMHgwOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgxQSwgMHgxQSwgMHgxQiwgMHgxQSwgLy8gMHhhMAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4RjAsIDB4NDQsCisJMHg0NCwgMHg0QSwgMHgwMCwgMHhGRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhFRiwgLy8gMHhiMAorCTB4RkYsIDB4RTcsIDB4RTksIDB4RTksIDB4RUIsIDB4RkYsIDB4RDYsIDB4RDgsCisJMHhEOCwgMHhENywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gMHhjMAorCTB4MDAsIDB4MDAsIDB4NTUsIDB4MDAsIDB4RTQsIDB4MzksIDB4MDAsIDB4ODAsCisJMHg3NywgMHg3NywgMHgwMywgMHgyMCwgMHg1NywgMHg5YiwgMHhkZiwgMHgzMSwgLy8gMHhkMAorCTB4NjQsIDB4YTgsIDB4ZWMsIDB4ZDEsIDB4MGYsIDB4MTEsIDB4MTEsIDB4ODEsCisJMHgxMCwgMHhDMCwgMHhBQSwgMHhBQSwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgLy8gMHhlMAorCTB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsCisJMHg4MywgMHhCNSwgMHgwOSwgMHg3OCwgMHg4NSwgMHgwMCwgMHgwMSwgMHgyMCwgLy8gMHhmMAorCTB4NjQsIDB4NTEsIDB4NDAsIDB4YWYsIDB4RkYsIDB4RjAsIDB4MDAsIDB4QzAsCit9OworCitzdGF0aWMgdTggdGJsX3R3Mjg2NV9wYWxfdGVtcGxhdGVbXSA9IHsKKwkweDAwLCAweGYwLCAweDcwLCAweDMwLCAweDgwLCAweDgwLCAweDAwLCAweDEyLCAvLyAweDAwCisJMHgxMSwgMHhmZiwgMHgwMSwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZiwKKwkweDAwLCAweGYwLCAweDcwLCAweDMwLCAweDgwLCAweDgwLCAweDAwLCAweDEyLCAvLyAweDEwCisJMHgxMSwgMHhmZiwgMHgwMSwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZiwKKwkweDAwLCAweGYwLCAweDcwLCAweDMwLCAweDgwLCAweDgwLCAweDAwLCAweDEyLCAvLyAweDIwCisJMHgxMSwgMHhmZiwgMHgwMSwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZiwKKwkweDAwLCAweGYwLCAweDcwLCAweDMwLCAweDgwLCAweDgwLCAweDAwLCAweDEyLCAvLyAweDMwCisJMHgxMSwgMHhmZiwgMHgwMSwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMSwgMHg3ZiwKKwkweDAwLCAweDk0LCAweDkwLCAweDQ4LCAweDAwLCAweDM4LCAweDdGLCAweDgwLCAvLyAweDQwCisJMHg4MCwgMHg4MCwgMHg3NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyAweDUwCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDQ1LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyAweDYwCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg0MywKKwkweDA4LCAweDAwLCAweDAwLCAweDAxLCAweGYxLCAweDAzLCAweEVGLCAweDAzLCAvLyAweDcwCisJMHhFQSwgMHgwMywgMHhEOSwgMHgxNSwgMHgxNSwgMHhFNCwgMHhBMywgMHg4MCwKKwkweDAwLCAweDAyLCAweDAwLCAweENDLCAweDAwLCAweDgwLCAweDQ0LCAweDUwLCAvLyAweDgwCisJMHgyMiwgMHgwMSwgMHhEOCwgMHhCQywgMHhCOCwgMHg0NCwgMHgzOCwgMHgwMCwKKwkweDAwLCAweDc4LCAweDQ0LCAweDNELCAweDE0LCAweEE1LCAweEUwLCAweDA1LCAvLyAweDkwCisJMHgwMCwgMHgyOCwgMHg0NCwgMHg0NCwgMHhBMCwgMHg5MCwgMHg1MiwgMHgxMywKKwkweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAvLyAweGEwCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHhGMCwgMHg0NCwKKwkweDQ0LCAweDRBLCAweDAwLCAweEZGLCAweEVGLCAweEVGLCAweEVGLCAweEVGLCAvLyAweGIwCisJMHhGRiwgMHhFNywgMHhFOSwgMHhFOSwgMHhFOSwgMHhGRiwgMHhENywgMHhEOCwKKwkweEQ5LCAweEQ4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyAweGMwCisJMHgwMCwgMHgwMCwgMHg1NSwgMHgwMCwgMHhFNCwgMHgzOSwgMHgwMCwgMHg4MCwKKwkweDc3LCAweDc3LCAweDAzLCAweDIwLCAweDU3LCAweDliLCAweGRmLCAweDMxLCAvLyAweGQwCisJMHg2NCwgMHhhOCwgMHhlYywgMHhkMSwgMHgwZiwgMHgxMSwgMHgxMSwgMHg4MSwKKwkweDEwLCAweEMwLCAweEFBLCAweEFBLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAvLyAweGUwCisJMHgxMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwKKwkweDgzLCAweEI1LCAweDA5LCAweDAwLCAweEEwLCAweDAwLCAweDAxLCAweDIwLCAvLyAweGYwCisJMHg2NCwgMHg1MSwgMHg0MCwgMHhhZiwgMHhGRiwgMHhGMCwgMHgwMCwgMHhDMCwKK307CisKKyNkZWZpbmUgaXNfdHcyODZ4KF9fc29sbywgX19pZCkgKCEoX19zb2xvLT50dzI4MTUgJiAoMSA8PCBfX2lkKSkpCisKK3N0YXRpYyB1OCB0d19yZWFkYnl0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGNoaXBfaWQsIHU4IHR3Nnhfb2ZmLAorCQkgICAgICB1OCB0d19vZmYpCit7CisJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9pZCkpCisJCXJldHVybiBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfaWQpLAorCQkJCQkgdHc2eF9vZmYpOworCWVsc2UKKwkJcmV0dXJuIHNvbG9faTJjX3JlYWRieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkJIFRXX0NISVBfT0ZGU0VUX0FERFIoY2hpcF9pZCksCisJCQkJCSB0d19vZmYpOworfQorCitzdGF0aWMgdm9pZCB0d193cml0ZWJ5dGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBjaGlwX2lkLAorCQkJIHU4IHR3Nnhfb2ZmLCB1OCB0d19vZmYsIHU4IHZhbCkKK3sKKwlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX2lkKSkKKwkJc29sb19pMmNfd3JpdGVieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkgICBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfaWQpLAorCQkJCSAgIHR3Nnhfb2ZmLCB2YWwpOworCWVsc2UKKwkJc29sb19pMmNfd3JpdGVieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkgICBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfaWQpLAorCQkJCSAgIHR3X29mZiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgdHdfd3JpdGVfYW5kX3ZlcmlmeShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggYWRkciwgdTggb2ZmLAorCQkJCXU4IHZhbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJdTggcnZhbCA9IHNvbG9faTJjX3JlYWRieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywgYWRkciwgb2ZmKTsKKwkJaWYgKHJ2YWwgPT0gdmFsKQorCQkJcmV0dXJuOworCisJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsIGFkZHIsIG9mZiwgdmFsKTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMSk7CisJfQorCisvLwlwcmludGsoInNvbG82MDEwL3R3Mjg6IEVycm9yIHdyaXRpbmcgcmVnaXN0ZXI6ICUwMngtPiUwMnggWyUwMnhdXG4iLAorLy8JCWFkZHIsIG9mZiwgdmFsKTsKK30KKworc3RhdGljIGludCB0dzI4NjVfc2V0dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGRldl9hZGRyKQoreworCXU4IHRibF90dzI4NjVfY29tbW9uWzI1Nl07CisJaW50IGk7CisKKwlpZiAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9QQUwpCisJCW1lbWNweSh0YmxfdHcyODY1X2NvbW1vbiwgdGJsX3R3Mjg2NV9wYWxfdGVtcGxhdGUsCisJCSAgICAgICBzaXplb2YodGJsX3R3Mjg2NV9jb21tb24pKTsKKwllbHNlCisJCW1lbWNweSh0YmxfdHcyODY1X2NvbW1vbiwgdGJsX3R3Mjg2NV9udHNjX3RlbXBsYXRlLAorCQkgICAgICAgc2l6ZW9mKHRibF90dzI4NjVfY29tbW9uKSk7CisKKwkvKiBBTElOSyBNb2RlICovCisJaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSA0KSB7CisJCXRibF90dzI4NjVfY29tbW9uWzB4ZDJdID0gMHgwMTsKKwkJdGJsX3R3Mjg2NV9jb21tb25bMHhjZl0gPSAweDAwOworCX0gZWxzZSBpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDgpIHsKKwkJdGJsX3R3Mjg2NV9jb21tb25bMHhkMl0gPSAweDAyOworCQlpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCXRibF90dzI4NjVfY29tbW9uWzB4Y2ZdID0gMHg4MDsKKwl9IGVsc2UgaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSAxNikgeworCQl0YmxfdHcyODY1X2NvbW1vblsweGQyXSA9IDB4MDM7CisJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJdGJsX3R3Mjg2NV9jb21tb25bMHhjZl0gPSAweDgzOworCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDIpKQorCQkJdGJsX3R3Mjg2NV9jb21tb25bMHhjZl0gPSAweDgzOworCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDMpKQorCQkJdGJsX3R3Mjg2NV9jb21tb25bMHhjZl0gPSAweDgwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAweGZmOyBpKyspIHsKKwkJLyogU2tpcCByZWFkIG9ubHkgcmVnaXN0ZXJzICovCisJCWlmIChpID49IDB4YjggJiYgaSA8PSAweGMxICkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGkgJiB+MHgzMCkgPT0gMHgwMCB8fAorCQkgICAgKGkgJiB+MHgzMCkgPT0gMHgwYyB8fAorCQkgICAgKGkgJiB+MHgzMCkgPT0gMHgwZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA+PSAweGM0ICYmIGkgPD0gMHhjNykKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA9PSAweGZkKQorCQkJY29udGludWU7CisKKwkJdHdfd3JpdGVfYW5kX3ZlcmlmeShzb2xvX2RldiwgZGV2X2FkZHIsIGksCisJCQkJICAgIHRibF90dzI4NjVfY29tbW9uW2ldKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dzI4NjRfc2V0dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGRldl9hZGRyKQoreworCXU4IHRibF90dzI4NjRfY29tbW9uW3NpemVvZih0YmxfdHcyODY0X3RlbXBsYXRlKV07CisJaW50IGk7CisKKwltZW1jcHkodGJsX3R3Mjg2NF9jb21tb24sIHRibF90dzI4NjRfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZih0YmxfdHcyODY0X2NvbW1vbikpOworCisJaWYgKHNvbG9fZGV2LT50dzI4NjUgPT0gMCkgeworCQkvKiBJUlEgTW9kZSAqLworCQlpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDQpIHsKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4ZDJdID0gMHgwMTsKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHgwMDsKKwkJfSBlbHNlIGlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gOCkgeworCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhkMl0gPSAweDAyOworCQkJaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMCkpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDQzOworCQkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigxKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4NDA7CisJCX0gZWxzZSBpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDE2KSB7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweGQyXSA9IDB4MDM7CisJCQlpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigwKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4NDM7CisJCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg0MzsKKwkJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMikpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDQzOworCQkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigzKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4NDA7CisJCX0KKwl9IGVsc2UgeworCQkvKiBBTElOSyBNb2RlLiBBc3N1bWVzIHRoYXQgdGhlIGZpcnN0IHR3Mjh4eCBpcyBhCisJCSAqIDI4NjUgYW5kIHRoZXNlIGFyZSBpbiBjYXNjYWRlLiAqLworCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4MDggfCBpIDw8IDRdID0gMHgxMjsKKworCQlpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDgpIHsKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4ZDJdID0gMHgwMjsKKwkJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg4MDsKKwkJfSBlbHNlIGlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gMTYpIHsKKwkJCXRibF90dzI4NjRfY29tbW9uWzB4ZDJdID0gMHgwMzsKKwkJCWlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJCXRibF90dzI4NjRfY29tbW9uWzB4Y2ZdID0gMHg4MzsKKwkJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMikpCisJCQkJdGJsX3R3Mjg2NF9jb21tb25bMHhjZl0gPSAweDgzOworCQkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigzKSkKKwkJCQl0YmxfdHcyODY0X2NvbW1vblsweGNmXSA9IDB4ODA7CisJCX0KKwl9CisKKwkvKiBOVFNDIG9yIFBBTCAqLworCWlmIChzb2xvX2Rldi0+dmlkZW9fdHlwZSA9PSBTT0xPX1ZPX0ZNVF9UWVBFX1BBTCkgeworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweDA3IHwgKGkgPDwgNCldIHw9IDB4MTA7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweDA4IHwgKGkgPDwgNCldIHw9IDB4MDY7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweDBhIHwgKGkgPDwgNCldIHw9IDB4MDg7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweDBiIHwgKGkgPDwgNCldIHw9IDB4MTM7CisJCQl0YmxfdHcyODY0X2NvbW1vblsweDBlIHwgKGkgPDwgNCldIHw9IDB4MDE7CisJCX0KKwkJdGJsX3R3Mjg2NF9jb21tb25bMHg5ZF0gPSAweDkwOworCQl0YmxfdHcyODY0X2NvbW1vblsweGYzXSA9IDB4MDA7CisJCXRibF90dzI4NjRfY29tbW9uWzB4ZjRdID0gMHhhMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMHhmZjsgaSsrKSB7CisJCS8qIFNraXAgcmVhZCBvbmx5IHJlZ2lzdGVycyAqLworCQlpZiAoaSA+PSAweGI4ICYmIGkgPD0gMHhjMSApCisJCQljb250aW51ZTsKKwkJaWYgKChpICYgfjB4MzApID09IDB4MDAgfHwKKwkJICAgIChpICYgfjB4MzApID09IDB4MGMgfHwKKwkJICAgIChpICYgfjB4MzApID09IDB4MGQpCisJCQljb250aW51ZTsKKwkJaWYgKGkgPT0gMHg3NCB8fCBpID09IDB4NzcgfHwgaSA9PSAweDc4IHx8CisJCSAgICBpID09IDB4NzkgfHwgaSA9PSAweDdhKQorCQkJY29udGludWU7CisJCWlmIChpID09IDB4ZmQpCisJCQljb250aW51ZTsKKworCQl0d193cml0ZV9hbmRfdmVyaWZ5KHNvbG9fZGV2LCBkZXZfYWRkciwgaSwKKwkJCQkgICAgdGJsX3R3Mjg2NF9jb21tb25baV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR3MjgxNV9zZXR1cChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggZGV2X2FkZHIpCit7CisJdTggdGJsX250c2NfdHcyODE1X2NvbW1vbltdID0geworCQkweDAwLCAweGM4LCAweDIwLCAweGQwLCAweDA2LCAweGYwLCAweDA4LCAweDgwLAorCQkweDgwLCAweDgwLCAweDgwLCAweDAyLCAweDA2LCAweDAwLCAweDExLAorCX07CisKKwl1OCB0YmxfcGFsX3R3MjgxNV9jb21tb25bXSA9IHsKKwkJMHgwMCwgMHg4OCwgMHgyMCwgMHhkMCwgMHgwNSwgMHgyMCwgMHgyOCwgMHg4MCwKKwkJMHg4MCwgMHg4MCwgMHg4MCwgMHg4MiwgMHgwNiwgMHgwMCwgMHgxMSwKKwl9OworCisJdTggdGJsX3R3MjgxNV9zZnJbXSA9IHsKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg0NSwgMHhhMCwgMHhkMCwgMHgyZiwgLy8gMHgwMAorCQkweDY0LCAweDgwLCAweDgwLCAweDgyLCAweDgyLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDBmLCAweDA1LCAweDAwLCAweDAwLCAweDgwLCAweDA2LCAweDAwLCAvLyAweDEwCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OGYsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4ODgsIDB4ODgsIDB4YzAsIDB4MDAsIDB4MjAsIDB4NjQsIDB4YTgsIDB4ZWMsIC8vIDB4MjAKKwkJMHgzMSwgMHg3NSwgMHhiOSwgMHhmZCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4OCwKKwkJMHg4OCwgMHgxMSwgMHgwMCwgMHg4OCwgMHg4OCwgMHgwMCwJCS8vIDB4MzAKKwl9OworCXU4ICp0YmxfdHcyODE1X2NvbW1vbjsKKwlpbnQgaTsKKwlpbnQgY2g7CisKKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDZdID0gMDsKKworCS8qIEhvcml6b250YWwgRGVsYXkgQ29udHJvbCAqLworCXRibF9udHNjX3R3MjgxNV9jb21tb25bMHgwMl0gPSBERUZBVUxUX0hERUxBWV9OVFNDICYgMHhmZjsKKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDZdIHw9IDB4MDMgJiAoREVGQVVMVF9IREVMQVlfTlRTQyA+PiA4KTsKKworCS8qIEhvcml6b250YWwgQWN0aXZlIENvbnRyb2wgKi8KKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDNdID0gREVGQVVMVF9IQUNUSVZFX05UU0MgJiAweGZmOworCXRibF9udHNjX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAzICYgKERFRkFVTFRfSEFDVElWRV9OVFNDID4+IDgpKSA8PCAyKTsKKworCS8qIFZlcnRpY2FsIERlbGF5IENvbnRyb2wgKi8KKwl0YmxfbnRzY190dzI4MTVfY29tbW9uWzB4MDRdID0gREVGQVVMVF9WREVMQVlfTlRTQyAmIDB4ZmY7CisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDA2XSB8PQorCQkoKDB4MDEgJiAoREVGQVVMVF9WREVMQVlfTlRTQyA+PiA4KSkgPDwgNCk7CisKKwkvKiBWZXJ0aWNhbCBBY3RpdmUgQ29udHJvbCAqLworCXRibF9udHNjX3R3MjgxNV9jb21tb25bMHgwNV0gPSBERUZBVUxUX1ZBQ1RJVkVfTlRTQyAmIDB4ZmY7CisJdGJsX250c2NfdHcyODE1X2NvbW1vblsweDA2XSB8PQorCQkoKDB4MDEgJiAoREVGQVVMVF9WQUNUSVZFX05UU0MgPj4gOCkpIDw8IDUpOworCisJdGJsX3BhbF90dzI4MTVfY29tbW9uWzB4MDZdID0gMDsKKworCS8qIEhvcml6b250YWwgRGVsYXkgQ29udHJvbCAqLworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDAyXSA9IERFRkFVTFRfSERFTEFZX1BBTCAmIDB4ZmY7CisJdGJsX3BhbF90dzI4MTVfY29tbW9uWzB4MDZdIHw9IDB4MDMgJiAoREVGQVVMVF9IREVMQVlfUEFMID4+IDgpOworCisJLyogSG9yaXpvbnRhbCBBY3RpdmUgQ29udHJvbCAqLworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDAzXSA9IERFRkFVTFRfSEFDVElWRV9QQUwgJiAweGZmOworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA2XSB8PQorCQkoKDB4MDMgJiAoREVGQVVMVF9IQUNUSVZFX1BBTCA+PiA4KSkgPDwgMik7CisKKwkvKiBWZXJ0aWNhbCBEZWxheSBDb250cm9sICovCisJdGJsX3BhbF90dzI4MTVfY29tbW9uWzB4MDRdID0gREVGQVVMVF9WREVMQVlfUEFMICYgMHhmZjsKKwl0YmxfcGFsX3R3MjgxNV9jb21tb25bMHgwNl0gfD0KKwkJKCgweDAxICYgKERFRkFVTFRfVkRFTEFZX1BBTCA+PiA4KSkgPDwgNCk7CisKKwkvKiBWZXJ0aWNhbCBBY3RpdmUgQ29udHJvbCAqLworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA1XSA9IERFRkFVTFRfVkFDVElWRV9QQUwgJiAweGZmOworCXRibF9wYWxfdHcyODE1X2NvbW1vblsweDA2XSB8PQorCQkoKDB4MDEgJiAoREVGQVVMVF9WQUNUSVZFX1BBTCA+PiA4KSkgPDwgNSk7CisKKwl0YmxfdHcyODE1X2NvbW1vbiA9CisJICAgIChzb2xvX2Rldi0+dmlkZW9fdHlwZSA9PSBTT0xPX1ZPX0ZNVF9UWVBFX05UU0MpID8KKwkgICAgIHRibF9udHNjX3R3MjgxNV9jb21tb24gOiB0YmxfcGFsX3R3MjgxNV9jb21tb247CisKKwkvKiBEdWFsIElUVS1SIEJULjY1NiBmb3JtYXQgKi8KKwl0YmxfdHcyODE1X2NvbW1vblsweDBkXSB8PSAweDA0OworCisJLyogQXVkaW8gY29uZmlndXJhdGlvbiAqLworCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSAmPSB+KDMgPDwgNik7CisKKwlpZiAoc29sb19kZXYtPm5yX2NoYW5zID09IDQpIHsKKwkJdGJsX3R3MjgxNV9zZnJbMHg2MyAtIDB4NDBdIHw9IDE7CisJCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSB8PSAzIDw8IDY7CisJfSBlbHNlIGlmIChzb2xvX2Rldi0+bnJfY2hhbnMgPT0gOCkgeworCQl0YmxfdHcyODE1X3NmclsweDYzIC0gMHg0MF0gfD0gMjsKKwkJaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMCkpCisJCQl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMSA8PCA2OworCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJdGJsX3R3MjgxNV9zZnJbMHg2MiAtIDB4NDBdIHw9IDIgPDwgNjsKKwl9IGVsc2UgaWYgKHNvbG9fZGV2LT5ucl9jaGFucyA9PSAxNikgeworCQl0YmxfdHcyODE1X3NmclsweDYzIC0gMHg0MF0gfD0gMzsKKwkJaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMCkpCisJCQl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMSA8PCA2OworCQllbHNlIGlmIChkZXZfYWRkciA9PSBUV19DSElQX09GRlNFVF9BRERSKDEpKQorCQkJdGJsX3R3MjgxNV9zZnJbMHg2MiAtIDB4NDBdIHw9IDAgPDwgNjsKKwkJZWxzZSBpZiAoZGV2X2FkZHIgPT0gVFdfQ0hJUF9PRkZTRVRfQUREUigyKSkKKwkJCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSB8PSAwIDw8IDY7CisJCWVsc2UgaWYgKGRldl9hZGRyID09IFRXX0NISVBfT0ZGU0VUX0FERFIoMykpCisJCQl0YmxfdHcyODE1X3NmclsweDYyIC0gMHg0MF0gfD0gMiA8PCA2OworCX0KKworCS8qIE91dHB1dCBtb2RlIG9mIFJfQURBVE0gcGluICgwIG1peGluZywgMSByZWNvcmQpICovCisJLyogdGJsX3R3MjgxNV9zZnJbMHg2MyAtIDB4NDBdIHw9IDAgPDwgMjsgKi8KKworCS8qIDhLSHosIHVzZWQgdG8gYmUgMTZLSHosIGJ1dCBjaGFuZ2VkIGZvciByZW1vdGUgY2xpZW50IGNvbXBhdCAqLworCXRibF90dzI4MTVfc2ZyWzB4NjIgLSAweDQwXSB8PSAwIDw8IDI7CisJdGJsX3R3MjgxNV9zZnJbMHg2YyAtIDB4NDBdIHw9IDAgPDwgMjsKKworCS8qIFBsYXliYWNrIG9mIHJpZ2h0IGNoYW5uZWwgKi8KKwl0YmxfdHcyODE1X3NmclsweDZjIC0gMHg0MF0gfD0gMSA8PCA1OworCisJLyogUmVzZXJ2ZWQgdmFsdWUgKFhYWCA/PykgKi8KKwl0YmxfdHcyODE1X3NmclsweDVjIC0gMHg0MF0gfD0gMSA8PCA1OworCisJLyogQW5hbG9nIG91dHB1dCBnYWluIGFuZCBtaXggcmF0aW8gcGxheWJhY2sgb24gZnVsbCAqLworCXRibF90dzI4MTVfc2ZyWzB4NzAgLSAweDQwXSB8PSAweGZmOworCS8qIFNlbGVjdCBwbGF5YmFjayBhdWRpbyBhbmQgbXV0ZSBhbGwgZXhjZXB0ICovCisJdGJsX3R3MjgxNV9zZnJbMHg3MSAtIDB4NDBdIHw9IDB4MTA7CisJdGJsX3R3MjgxNV9zZnJbMHg2ZCAtIDB4NDBdIHw9IDB4MGY7CisKKwkvKiBFbmQgb2YgYXVkaW8gY29uZmlndXJhdGlvbiAqLworCisJZm9yIChjaCA9IDA7IGNoIDwgNDsgY2grKykgeworCQl0YmxfdHcyODE1X2NvbW1vblsweDBkXSAmPSB+MzsKKwkJc3dpdGNoIChjaCkgeworCQljYXNlIDA6CisJCQl0YmxfdHcyODE1X2NvbW1vblsweDBkXSB8PSAweDIxOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXRibF90dzI4MTVfY29tbW9uWzB4MGRdIHw9IDB4MjA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdGJsX3R3MjgxNV9jb21tb25bMHgwZF0gfD0gMHgyMzsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl0YmxfdHcyODE1X2NvbW1vblsweDBkXSB8PSAweDIyOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgMHgwZjsgaSsrKSB7CisJCQlpZiAoaSA9PSAweDAwKQorCQkJCWNvbnRpbnVlOwkvLyByZWFkLW9ubHkKKwkJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSAgIGRldl9hZGRyLCAoY2ggKiAweDEwKSArIGksCisJCQkJCSAgIHRibF90dzI4MTVfY29tbW9uW2ldKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDB4NDA7IGkgPCAweDc2OyBpKyspIHsKKwkJLyogU2tpcCByZWFkLW9ubHkgYW5kIG5vcCByZWdpc3RlcnMgKi8KKwkJaWYgKGkgPT0gMHg0MCB8fCBpID09IDB4NTkgfHwgaSA9PSAweDVhIHx8CisJCSAgICBpID09IDB4NWQgfHwgaSA9PSAweDVlIHx8IGkgPT0gMHg1ZikKKwkJCWNvbnRpbnVlOworCisJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsIGRldl9hZGRyLCBpLAorCQkJCSAgICAgICB0YmxfdHcyODE1X3NmcltpIC0gMHg0MF0pOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEZJUlNUX0FDVElWRV9MSU5FCTB4MDAwOAorI2RlZmluZSBMQVNUX0FDVElWRV9MSU5FCTB4MDEwMgorCitzdGF0aWMgdm9pZCBzYWE3MTI4X3NldHVwKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgcmVnc1sxMjhdID0geworCQkweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDFDLCAweDJCLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAwLAorCQkweDU5LCAweDFkLCAweDc1LCAweDNmLCAweDA2LCAweDNmLCAweDAwLCAweDAwLAorCQkweDFjLCAweDMzLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweDNmLCAweDAwLAorCQkweDFhLCAweDFhLCAweDEzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEwLCAweDk3LCAweDRjLCAweDE4LAorCQkweDliLCAweDkzLCAweDlmLCAweGZmLCAweDdjLCAweDM0LCAweDNmLCAweDNmLAorCQkweDNmLCAweDgzLCAweDgzLCAweDgwLCAweDBkLCAweDBmLCAweGMzLCAweDA2LAorCQkweDAyLCAweDgwLCAweDcxLCAweDc3LCAweGE3LCAweDY3LCAweDY2LCAweDJlLAorCQkweDdiLCAweDExLCAweDRmLCAweDFmLCAweDdjLCAweGYwLCAweDIxLCAweDc3LAorCQkweDQxLCAweDg4LCAweDQxLCAweDEyLCAweGVkLCAweDEwLCAweDEwLCAweDAwLAorCQkweDQxLCAweGMzLCAweDAwLCAweDNlLCAweGI4LCAweDAyLCAweDAwLCAweDAwLAorCQkweDAwLCAweDAwLCAweDA4LCAweGZmLCAweDgwLCAweDAwLCAweGZmLCAweGZmLAorCX07CisKKwlyZWdzWzB4N0FdID0gRklSU1RfQUNUSVZFX0xJTkUgJiAweGZmOworCXJlZ3NbMHg3Ql0gPSBMQVNUX0FDVElWRV9MSU5FICYgMHhmZjsKKwlyZWdzWzB4N0NdID0gKCgxIDw8IDcpIHwKKwkJCSgoKExBU1RfQUNUSVZFX0xJTkUgPj4gOCkgJiAxKSA8PCA2KSB8CisJCQkoKChGSVJTVF9BQ1RJVkVfTElORSA+PiA4KSAmIDEpIDw8IDQpKTsKKworCS8qIFBBTDogWFhYOiBXZSBjb3VsZCBkbyBhIHNlY29uZCBzZXQgb2YgcmVncyB0byBhdm9pZCB0aGlzICovCisJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlICE9IFNPTE9fVk9fRk1UX1RZUEVfTlRTQykgeworCQlyZWdzWzB4MjhdID0gMHhFMTsKKworCQlyZWdzWzB4NUFdID0gMHgwRjsKKwkJcmVnc1sweDYxXSA9IDB4MDI7CisJCXJlZ3NbMHg2Ml0gPSAweDM1OworCQlyZWdzWzB4NjNdID0gMHhDQjsKKwkJcmVnc1sweDY0XSA9IDB4OEE7CisJCXJlZ3NbMHg2NV0gPSAweDA5OworCQlyZWdzWzB4NjZdID0gMHgyQTsKKworCQlyZWdzWzB4NkNdID0gMHhmMTsKKwkJcmVnc1sweDZFXSA9IDB4MjA7CisKKwkJcmVnc1sweDdBXSA9IDB4MDYgKyAxMjsKKwkJcmVnc1sweDdiXSA9IDB4MjQgKyAxMjsKKwkJcmVnc1sweDdjXSB8PSAxIDw8IDY7CisJfQorCisJLyogRmlyc3QgMHgyNSBieXRlcyBhcmUgcmVhZC1vbmx5PyAqLworCWZvciAoaSA9IDB4MjY7IGkgPCAxMjg7IGkrKykgeworCQlpZiAoaSA9PSAweDYwIHx8IGkgPT0gMHg3RCkKKwkJCWNvbnRpbnVlOworCQlzb2xvX2kyY193cml0ZWJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1NBQSwgMHg0NiwgaSwgcmVnc1tpXSk7CisJfQorCisJcmV0dXJuOworfQorCitpbnQgc29sb190dzI4X2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisJdTggdmFsdWU7CisKKwkvKiBEZXRlY3QgdGVjaHdlbGwgY2hpcCB0eXBlICovCisJZm9yIChpID0gMDsgaSA8IFRXX05VTV9DSElQOyBpKyspIHsKKwkJdmFsdWUgPSBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSAgVFdfQ0hJUF9PRkZTRVRfQUREUihpKSwgMHhGRik7CisKKwkJc3dpdGNoICh2YWx1ZSA+PiAzKSB7CisJCWNhc2UgMHgxODoKKwkJCXNvbG9fZGV2LT50dzI4NjUgfD0gMSA8PCBpOworCQkJc29sb19kZXYtPnR3MjhfY250Kys7CisJCQlicmVhazsKKwkJY2FzZSAweDBjOgorCQkJc29sb19kZXYtPnR3Mjg2NCB8PSAxIDw8IGk7CisJCQlzb2xvX2Rldi0+dHcyOF9jbnQrKzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdmFsdWUgPSBzb2xvX2kyY19yZWFkYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCQkgIFRXX0NISVBfT0ZGU0VUX0FERFIoaSksIDB4NTkpOworCQkJaWYgKCh2YWx1ZSA+PiAzKSA9PSAweDA0KSB7CisJCQkJc29sb19kZXYtPnR3MjgxNSB8PSAxIDw8IGk7CisJCQkJc29sb19kZXYtPnR3MjhfY250Kys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXNvbG9fZGV2LT50dzI4X2NudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzYWE3MTI4X3NldHVwKHNvbG9fZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+dHcyOF9jbnQ7IGkrKykgeworCQlpZiAoKHNvbG9fZGV2LT50dzI4NjUgJiAoMSA8PCBpKSkpCisJCQl0dzI4NjVfc2V0dXAoc29sb19kZXYsIFRXX0NISVBfT0ZGU0VUX0FERFIoaSkpOworCQllbHNlIGlmICgoc29sb19kZXYtPnR3Mjg2NCAmICgxIDw8IGkpKSkKKwkJCXR3Mjg2NF9zZXR1cChzb2xvX2RldiwgVFdfQ0hJUF9PRkZTRVRfQUREUihpKSk7CisJCWVsc2UKKwkJCXR3MjgxNV9zZXR1cChzb2xvX2RldiwgVFdfQ0hJUF9PRkZTRVRfQUREUihpKSk7CisJfQorCisJZGV2X2luZm8oJnNvbG9fZGV2LT5wZGV2LT5kZXYsICJJbml0aWFsaXplZCAlZCB0dzI4eHggY2hpcCVzOiIsCisJCSBzb2xvX2Rldi0+dHcyOF9jbnQsIHNvbG9fZGV2LT50dzI4X2NudCA9PSAxID8gIiIgOiAicyIpOworCisJaWYgKHNvbG9fZGV2LT50dzI4NjUpCisJCXByaW50aygiIHR3Mjg2NVslZF0iLCBod2VpZ2h0MzIoc29sb19kZXYtPnR3Mjg2NSkpOworCWlmIChzb2xvX2Rldi0+dHcyODY0KQorCQlwcmludGsoIiB0dzI4NjRbJWRdIiwgaHdlaWdodDMyKHNvbG9fZGV2LT50dzI4NjQpKTsKKwlpZiAoc29sb19kZXYtPnR3MjgxNSkKKwkJcHJpbnRrKCIgdHcyODE1WyVkXSIsIGh3ZWlnaHQzMihzb2xvX2Rldi0+dHcyODE1KSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIAorICogV2UgYWNjZXNzZWQgdGhlIHZpZGVvIHN0YXR1cyBzaWduYWwgaW4gdGhlIFRlY2h3ZWxsIGNoaXAgdGhyb3VnaAorICogaWljL2kyYyBiZWNhdXNlIHRoZSB2aWRlbyBzdGF0dXMgcmVwb3J0ZWQgYnkgcmVnaXN0ZXIgUkVHX1ZJX1NUQVRVUzEKKyAqIChhZGRyZXNzIDB4MDEyQykgb2YgdGhlIFNPTE82MDEwIGNoaXAgZG9lc24ndCBnaXZlIHRoZSBjb3JyZWN0IHZpZGVvCisgKiBzdGF0dXMgc2lnbmFsIHZhbHVlcy4KKyAqLworaW50IHR3MjhfZ2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpCit7CisJdTggdmFsLCBjaGlwX251bTsKKworCS8qIEdldCB0aGUgcmlnaHQgY2hpcCBhbmQgb24tY2hpcCBjaGFubmVsICovCisJY2hpcF9udW0gPSBjaCAvIDQ7CisJY2ggJT0gNDsKKworCXZhbCA9IHR3X3JlYWRieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZYX0FWX1NUQVRfQUREUiwKKwkJCSAgVFdfQVZfU1RBVF9BRERSKSAmIDB4MGY7CisKKwlyZXR1cm4gdmFsICYgKDEgPDwgY2gpID8gMSA6IDA7Cit9CisKKyNpZiAwCisvKiBTdGF0dXMgb2YgYXVkaW8gZnJvbSB1cCB0byA0IHRlY2h3ZWxsIGNoaXBzIGFyZSBjb21iaW5lZCBpbnRvIDEgdmFyaWFibGUuCisgKiBTZWUgdGVjaHdlbGwgZGF0YXNoZWV0IGZvciBkZXRhaWxzLiAqLwordTE2IHR3MjhfZ2V0X2F1ZGlvX3N0YXR1cyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwl1OCB2YWw7CisJdTE2IHN0YXR1cyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPnR3MjhfY250OyBpKyspIHsKKwkJdmFsID0gKHR3X3JlYWRieXRlKHNvbG9fZGV2LCBpLCBUVzI4NlhfQVZfU1RBVF9BRERSLAorCQkJCSAgIFRXX0FWX1NUQVRfQUREUikgJiAweGYwKSA+PiA0OworCQlzdGF0dXMgfD0gdmFsIDw8IChpICogNCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZgorCitpbnQgdHcyOF9zZXRfY3RybF92YWwoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBjdHJsLCB1OCBjaCwKKwkJICAgICAgczMyIHZhbCkKK3sKKwljaGFyIHN2YWw7CisJdTggY2hpcF9udW07CisKKwkvKiBHZXQgdGhlIHJpZ2h0IGNoaXAgYW5kIG9uLWNoaXAgY2hhbm5lbCAqLworCWNoaXBfbnVtID0gY2ggLyA0OworCWNoICU9IDQ7CisKKwlpZiAodmFsID4gMjU1IHx8IHZhbCA8IDApCisJCXJldHVybiAtRVJBTkdFOworCisJc3dpdGNoIChjdHJsKSB7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCS8qIE9ubHkgMjg2eCBoYXMgc2hhcnBuZXNzICovCisJCWlmICh2YWwgPiAweDBmIHx8IHZhbCA8IDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKGlzX3R3Mjg2eChzb2xvX2RldiwgY2hpcF9udW0pKSB7CisJCQl1OCB2ID0gc29sb19pMmNfcmVhZGJ5dGUoc29sb19kZXYsIFNPTE9fSTJDX1RXLAorCQkJCQkJIFRXX0NISVBfT0ZGU0VUX0FERFIoY2hpcF9udW0pLAorCQkJCQkJIFRXMjg2eF9TSEFSUE5FU1MoY2hpcF9udW0pKTsKKwkJCXYgJj0gMHhmMDsKKwkJCXYgfD0gdmFsOworCQkJc29sb19pMmNfd3JpdGVieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkJICAgVFdfQ0hJUF9PRkZTRVRfQUREUihjaGlwX251bSksCisJCQkJCSAgIFRXMjg2eF9TSEFSUE5FU1MoY2hpcF9udW0pLCB2KTsKKwkJfSBlbHNlIGlmICh2YWwgIT0gMCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpCisJCQlzdmFsID0gdmFsIC0gMTI4OworCQllbHNlCisJCQlzdmFsID0gKGNoYXIpdmFsOworCQl0d193cml0ZWJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfSFVFX0FERFIoY2gpLAorCQkJICAgICBUV19IVUVfQUREUihjaCksIHN2YWwpOworCisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpIHsKKwkJCXNvbG9faTJjX3dyaXRlYnl0ZShzb2xvX2RldiwgU09MT19JMkNfVFcsCisJCQkJCSAgIFRXX0NISVBfT0ZGU0VUX0FERFIoY2hpcF9udW0pLAorCQkJCQkgICBUVzI4NnhfU0FUVVJBVElPTlVfQUREUihjaCksIHZhbCk7CisJCX0KKwkJdHdfd3JpdGVieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZ4X1NBVFVSQVRJT05WX0FERFIoY2gpLAorCQkJICAgICBUV19TQVRVUkFUSU9OX0FERFIoY2gpLCB2YWwpOworCisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdHdfd3JpdGVieXRlKHNvbG9fZGV2LCBjaGlwX251bSwgVFcyODZ4X0NPTlRSQVNUX0FERFIoY2gpLAorCQkJICAgICBUV19DT05UUkFTVF9BRERSKGNoKSwgdmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWlmIChpc190dzI4Nngoc29sb19kZXYsIGNoaXBfbnVtKSkKKwkJCXN2YWwgPSB2YWwgLSAxMjg7CisJCWVsc2UKKwkJCXN2YWwgPSAoY2hhcil2YWw7CisJCXR3X3dyaXRlYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2eF9CUklHSFRORVNTX0FERFIoY2gpLAorCQkJICAgICBUV19CUklHSFRORVNTX0FERFIoY2gpLCBzdmFsKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHR3MjhfZ2V0X2N0cmxfdmFsKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgY3RybCwgdTggY2gsCisJCSAgICAgIHMzMiAqdmFsKQoreworCXU4IHJ2YWwsIGNoaXBfbnVtOworCisJLyogR2V0IHRoZSByaWdodCBjaGlwIGFuZCBvbi1jaGlwIGNoYW5uZWwgKi8KKwljaGlwX251bSA9IGNoIC8gNDsKKwljaCAlPSA0OworCisJc3dpdGNoIChjdHJsKSB7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCS8qIE9ubHkgMjg2eCBoYXMgc2hhcnBuZXNzICovCisJCWlmIChpc190dzI4Nngoc29sb19kZXYsIGNoaXBfbnVtKSkgeworCQkJcnZhbCA9IHNvbG9faTJjX3JlYWRieXRlKHNvbG9fZGV2LCBTT0xPX0kyQ19UVywKKwkJCQkJCSBUV19DSElQX09GRlNFVF9BRERSKGNoaXBfbnVtKSwKKwkJCQkJCSBUVzI4NnhfU0hBUlBORVNTKGNoaXBfbnVtKSk7CisJCQkqdmFsID0gcnZhbCAmIDB4MGY7CisJCX0gZWxzZQorCQkJKnZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlydmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfSFVFX0FERFIoY2gpLAorCQkJCSAgIFRXX0hVRV9BRERSKGNoKSk7CisJCWlmIChpc190dzI4Nngoc29sb19kZXYsIGNoaXBfbnVtKSkKKwkJCSp2YWwgPSAoczMyKSgoY2hhcilydmFsKSArIDEyODsKKwkJZWxzZQorCQkJKnZhbCA9IHJ2YWw7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJKnZhbCA9IHR3X3JlYWRieXRlKHNvbG9fZGV2LCBjaGlwX251bSwKKwkJCQkgICBUVzI4NnhfU0FUVVJBVElPTlVfQUREUihjaCksCisJCQkJICAgVFdfU0FUVVJBVElPTl9BRERSKGNoKSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCSp2YWwgPSB0d19yZWFkYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sCisJCQkJICAgVFcyODZ4X0NPTlRSQVNUX0FERFIoY2gpLAorCQkJCSAgIFRXX0NPTlRSQVNUX0FERFIoY2gpKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlydmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLAorCQkJCSAgIFRXMjg2eF9CUklHSFRORVNTX0FERFIoY2gpLAorCQkJCSAgIFRXX0JSSUdIVE5FU1NfQUREUihjaCkpOworCQlpZiAoaXNfdHcyODZ4KHNvbG9fZGV2LCBjaGlwX251bSkpIAorCQkJKnZhbCA9IChzMzIpKChjaGFyKXJ2YWwpICsgMTI4OworCQllbHNlCisJCQkqdmFsID0gcnZhbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCisvKgorICogRm9yIGF1ZGlvIG91dHB1dCB2b2x1bWUsIHRoZSBvdXRwdXQgY2hhbm5lbCBpcyBvbmx5IDEuIEluIHRoaXMgY2FzZSB3ZQorICogZG9uJ3QgbmVlZCB0byBvZmZzZXQgVFdfQ0hJUF9PRkZTRVRfQUREUi4gVGhlIFRXX0NISVBfT0ZGU0VUX0FERFIgdXNlZAorICogaXMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgdGVjaHdlbGwgY2hpcC4KKyAqLwordm9pZCB0dzI4MTVfU2V0X0F1ZGlvT3V0Vm9sKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1bnNpZ25lZCBpbnQgdV92YWwpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwl1bnNpZ25lZCBpbnQgY2hpcF9udW07CisKKwljaGlwX251bSA9IChzb2xvX2Rldi0+bnJfY2hhbnMgLSAxKSAvIDQ7CisKKwl2YWwgPSB0d19yZWFkYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2eF9BVURJT19PVVRQVVRfVk9MX0FERFIsCisJCQkgIFRXX0FVRElPX09VVFBVVF9WT0xfQUREUik7CisKKwl1X3ZhbCA9ICh2YWwgJiAweDBmKSB8ICh1X3ZhbCA8PCA0KTsKKworCXR3X3dyaXRlYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sIFRXMjg2eF9BVURJT19PVVRQVVRfVk9MX0FERFIsCisJCSAgICAgVFdfQVVESU9fT1VUUFVUX1ZPTF9BRERSLCB1X3ZhbCk7Cit9CisjZW5kaWYKKwordTggdHcyOF9nZXRfYXVkaW9fZ2FpbihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpCit7CisJdTggdmFsOworCXU4IGNoaXBfbnVtOworCisJLyogR2V0IHRoZSByaWdodCBjaGlwIGFuZCBvbi1jaGlwIGNoYW5uZWwgKi8KKwljaGlwX251bSA9IGNoIC8gNDsKKwljaCAlPSA0OworCisJdmFsID0gdHdfcmVhZGJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLAorCQkJICBUVzI4NnhfQVVESU9fSU5QVVRfR0FJTl9BRERSKGNoKSwKKwkJCSAgVFdfQVVESU9fSU5QVVRfR0FJTl9BRERSKGNoKSk7CisKKwlyZXR1cm4gKGNoICUgMikgPyAodmFsID4+IDQpIDogKHZhbCAmIDB4MGYpOworfQorCit2b2lkIHR3Mjhfc2V0X2F1ZGlvX2dhaW4oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCB1OCB2YWwpCit7CisJdTggb2xkX3ZhbDsKKwl1OCBjaGlwX251bTsKKworCS8qIEdldCB0aGUgcmlnaHQgY2hpcCBhbmQgb24tY2hpcCBjaGFubmVsICovCisJY2hpcF9udW0gPSBjaCAvIDQ7CisJY2ggJT0gNDsKKworCW9sZF92YWwgPSB0d19yZWFkYnl0ZShzb2xvX2RldiwgY2hpcF9udW0sCisJCQkgICAgICBUVzI4NnhfQVVESU9fSU5QVVRfR0FJTl9BRERSKGNoKSwKKwkJCSAgICAgIFRXX0FVRElPX0lOUFVUX0dBSU5fQUREUihjaCkpOworCisJdmFsID0gKG9sZF92YWwgJiAoKGNoICUgMikgPyAweDBmIDogMHhmMCkpIHwKKwkJKChjaCAlIDIpID8gKHZhbCA8PCA0KSA6IHZhbCk7CisKKwl0d193cml0ZWJ5dGUoc29sb19kZXYsIGNoaXBfbnVtLCBUVzI4NnhfQVVESU9fSU5QVVRfR0FJTl9BRERSKGNoKSwKKwkJICAgICBUV19BVURJT19JTlBVVF9HQUlOX0FERFIoY2gpLCB2YWwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXR3MjguaCBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC10dzI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlZWNmYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC10dzI4LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPTE82MDEwX1RXMjhfSAorI2RlZmluZSBfX1NPTE82MDEwX1RXMjhfSAorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKworI2RlZmluZSBUV19OVU1fQ0hJUAkJCQk0CisjZGVmaW5lIFRXX0JBU0VfQUREUgkJCQkweDI4CisjZGVmaW5lIFRXX0NISVBfT0ZGU0VUX0FERFIobikJCQkoVFdfQkFTRV9BRERSICsgKG4pKQorCisvKiB0dzI4MTUgKi8KKyNkZWZpbmUgVFdfQVZfU1RBVF9BRERSCQkJCTB4NWEKKyNkZWZpbmUgVFdfSFVFX0FERFIobikJCQkJKDB4MDcgfCAoKG4pIDw8IDQpKQorI2RlZmluZSBUV19TQVRVUkFUSU9OX0FERFIobikJCQkoMHgwOCB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXX0NPTlRSQVNUX0FERFIobikJCQkoMHgwOSB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXX0JSSUdIVE5FU1NfQUREUihuKQkJCSgweDBhIHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFdfQVVESU9fT1VUUFVUX1ZPTF9BRERSCQkweDcwCisjZGVmaW5lIFRXX0FVRElPX0lOUFVUX0dBSU5fQUREUihuKQkJKDB4NjAgKyAoKG4gPiAxKSA/IDEgOiAwKSkKKworLyogdHcyODZ4ICovCisjZGVmaW5lIFRXMjg2WF9BVl9TVEFUX0FERFIJCQkweGZkCisjZGVmaW5lIFRXMjg2eF9IVUVfQUREUihuKQkJCSgweDA2IHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFcyODZ4X1NBVFVSQVRJT05VX0FERFIobikJCSgweDA0IHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFcyODZ4X1NBVFVSQVRJT05WX0FERFIobikJCSgweDA1IHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFcyODZ4X0NPTlRSQVNUX0FERFIobikJCQkoMHgwMiB8ICgobikgPDwgNCkpCisjZGVmaW5lIFRXMjg2eF9CUklHSFRORVNTX0FERFIobikJCSgweDAxIHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFcyODZ4X1NIQVJQTkVTUyhuKQkJCSgweDAzIHwgKChuKSA8PCA0KSkKKyNkZWZpbmUgVFcyODZ4X0FVRElPX09VVFBVVF9WT0xfQUREUgkJMHhkZgorI2RlZmluZSBUVzI4NnhfQVVESU9fSU5QVVRfR0FJTl9BRERSKG4pCQkoMHhEMCArICgobiA+IDEpID8gMSA6IDApKQorCitpbnQgc29sb190dzI4X2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCitpbnQgdHcyOF9zZXRfY3RybF92YWwoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBjdHJsLCB1OCBjaCwKKwkJICAgICAgczMyIHZhbCk7CitpbnQgdHcyOF9nZXRfY3RybF92YWwoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBjdHJsLCB1OCBjaCwKKwkJICAgICAgczMyICp2YWwpOworCit1OCB0dzI4X2dldF9hdWRpb19nYWluKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCk7Cit2b2lkIHR3Mjhfc2V0X2F1ZGlvX2dhaW4oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCB1OCB2YWwpOworaW50IHR3MjhfZ2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gpOworCisjaWYgMAordW5zaWduZWQgaW50IHR3MjgxNV9nZXRfYXVkaW9fc3RhdHVzKHN0cnVjdCBTT0xPNjAxMCAqc29sbzYwMTApOwordm9pZCB0dzI4MTVfU2V0X0F1ZGlvT3V0Vm9sKHN0cnVjdCBTT0xPNjAxMCAqc29sbzYwMTAsIHVuc2lnbmVkIGludCB1X3ZhbCk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fU09MTzYwMTBfVFcyOF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdjRsMi1lbmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC12NGwyLWVuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMTRiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdjRsMi1lbmMuYwpAQCAtMCwwICsxLDE1NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmx1ZWNoZXJyeSwgTExDIHd3dy5ibHVlY2hlcnJ5ZHZyLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDEwIEJlbiBDb2xsaW5zIDxiY29sbGluc0BibHVlY2hlcnJ5Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtZG1hLWNvbnRpZy5oPgorCisjaW5jbHVkZSAic29sbzYwMTAuaCIKKyNpbmNsdWRlICJzb2xvNjAxMC10dzI4LmgiCisjaW5jbHVkZSAic29sbzYwMTAtanBlZy5oIgorCisjZGVmaW5lIE1JTl9WSURfQlVGRkVSUwkJNAorI2RlZmluZSBGUkFNRV9CVUZfU0laRQkJKDEyOCAqIDEwMjQpCisjZGVmaW5lIE1QNF9RUwkJCTE2CisKK3N0YXRpYyBpbnQgc29sb19lbmNfdGhyZWFkKHZvaWQgKmRhdGEpOworCitleHRlcm4gdW5zaWduZWQgdmlkZW9fbnI7CisKK3N0cnVjdCBzb2xvX2VuY19maCB7CisJc3RydWN0CQkJc29sb19lbmNfZGV2ICplbmM7CisJdTMyCQkJZm10OworCXUxNgkJCXJkX2lkeDsKKwl1OAkJCWVuY19vbjsKKwllbnVtIHNvbG9fZW5jX3R5cGVzCXR5cGU7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlCXZpZHE7CisJc3RydWN0IGxpc3RfaGVhZAl2aWRxX2FjdGl2ZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKmt0aHJlYWQ7Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciB2aWRfdm9wX2hlYWRlcltdID0geworCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MjAsCisJMHgwMiwgMHg0OCwgMHgwNSwgMHhjMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwKKwkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweDAwLCAweDk3LCAweDUzLCAweDA0LAorCTB4MWYsIDB4NGMsIDB4NTgsIDB4MTAsIDB4NzgsIDB4NTEsIDB4MTgsIDB4M2UsCit9OworCisvKgorICogVGhpbmdzIHdlIGNhbiBjaGFuZ2UgYXJvdW5kOgorICoKKyAqIGJ5dGUgIDEwLCAgICAgICAgNC1iaXRzIDAxMTExMDAwICAgICAgICAgICAgICAgICAgIGFzcGVjdAorICogYnl0ZXMgMjEsMjIsMjMgIDE2LWJpdHMgMDAweDExMTEgMTExMTExMTEgMTExMXgwMDAgZnBzL3JlcworICogYnl0ZXMgMjMsMjQsMjUgIDE1LWJpdHMgMDAwMDBuMTEgMTExMTExMTEgMTExMTF4MDAgaW50ZXJ2YWwKKyAqIGJ5dGVzIDI1LDI2LDI3ICAxMy1iaXRzIDAwMDAweDExIDExMTExMTExIDExMXgwMDAwIHdpZHRoCisgKiBieXRlcyAyNywyOCwyOSAgMTMtYml0cyAwMDB4MTExMSAxMTExMTExMSAxeDAwMDAwMCBoZWlnaHQKKyAqIGJ5dGUgIDI5ICAgICAgICAgMS1iaXQgIDB4MTAwMDAwICAgICAgICAgICAgICAgICAgIGludGVybGFjZQorICovCisKKy8qIEZvciBhc3BlY3QgKi8KKyNkZWZpbmUgWFZJRF9QQVJfNDNfUEFMCQkyCisjZGVmaW5lIFhWSURfUEFSXzQzX05UU0MJMworCitzdGF0aWMgY29uc3QgdTMyIHNvbG9fdXNlcl9jdHJsc1tdID0geworCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJVjRMMl9DSURfQ09OVFJBU1QsCisJVjRMMl9DSURfU0FUVVJBVElPTiwKKwlWNEwyX0NJRF9IVUUsCisJVjRMMl9DSURfU0hBUlBORVNTLAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc29sb19tcGVnX2N0cmxzW10gPSB7CisJVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORywKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFLAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc29sb19wcml2YXRlX2N0cmxzW10gPSB7CisJVjRMMl9DSURfTU9USU9OX0VOQUJMRSwKKwlWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xELAorCTAKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc29sb19mbXR4X2N0cmxzW10gPSB7CisJVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQsCisJMAorfTsKKworc3RhdGljIGNvbnN0IHUzMiAqc29sb19jdHJsX2NsYXNzZXNbXSA9IHsKKwlzb2xvX3VzZXJfY3RybHMsCisJc29sb19tcGVnX2N0cmxzLAorCXNvbG9fZm10eF9jdHJscywKKwlzb2xvX3ByaXZhdGVfY3RybHMsCisJTlVMTAorfTsKKworc3RydWN0IHZvcF9oZWFkZXIgeworCS8qIFZEX0lEWDAgKi8KKwl1MzIgc2l6ZToyMCwgc3luY19zdGFydDoxLCBwYWdlX3N0b3A6MSwgdm9wX3R5cGU6MiwgY2hhbm5lbDo0LAorCQlub3AwOjEsIHNvdXJjZV9mbDoxLCBpbnRlcmxhY2U6MSwgcHJvZ3Jlc3NpdmU6MTsKKworCS8qIFZEX0lEWDEgKi8KKwl1MzIgdnNpemU6OCwgaHNpemU6OCwgZnJhbWVfaW50ZXJvcDoxLCBub3AxOjcsIHdpbl9pZDo0LCBzY2FsZTo0OworCisJLyogVkRfSURYMiAqLworCXUzMiBiYXNlX2FkZHI6MTYsIG5vcDI6MTUsIGhvZmY6MTsKKworCS8qIFZEX0lEWDMgLSBVc2VyIHNldCBtYWNyb3MgKi8KKwl1MzIgc3k6MTIsIHN4OjEyLCBub3AzOjEsIGh6b29tOjEsIHJlYWRfaW50ZXJvcDoxLCB3cml0ZV9pbnRlcmxhY2U6MSwKKwkJc2NhbGVfbW9kZTo0OworCisJLyogVkRfSURYNCAtIFVzZXIgc2V0IG1hY3JvcyBjb250aW51ZWQgKi8KKwl1MzIgd3JpdGVfcGFnZTo4LCBub3A0OjI0OworCisJLyogVkRfSURYNSAqLworCXUzMiBuZXh0X2NvZGVfYWRkcjsKKworCXUzMiBlbmRfbm9wc1sxMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IHNvbG9faXNfbW90aW9uX29uKHN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXU4IGNoID0gc29sb19lbmMtPmNoOworCisJaWYgKHNvbG9fZGV2LT5tb3Rpb25fbWFzayAmICgxIDw8IGNoKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fbW90aW9uX3RvZ2dsZShzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYywgaW50IG9uKQoreworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXU4IGNoID0gc29sb19lbmMtPmNoOworCisJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwlpZiAob24pCisJCXNvbG9fZGV2LT5tb3Rpb25fbWFzayB8PSAoMSA8PCBjaCk7CisJZWxzZQorCQlzb2xvX2Rldi0+bW90aW9uX21hc2sgJj0gfigxIDw8IGNoKTsKKworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVF9BRFIsCisJCSAgICAgICBTT0xPX1ZJX01PVElPTl9FTihzb2xvX2Rldi0+bW90aW9uX21hc2spIHwKKwkJICAgICAgIChTT0xPX01PVElPTl9FWFRfQUREUihzb2xvX2RldikgPj4gMTYpKTsKKworCWlmIChzb2xvX2Rldi0+bW90aW9uX21hc2spCisJCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfTU9USU9OKTsKKwllbHNlCisJCXNvbG82MDEwX2lycV9vZmYoc29sb19kZXYsIFNPTE9fSVJRX01PVElPTik7CisKKwlzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworfQorCisvKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggc29sb19lbmMtPmxvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgc29sb191cGRhdGVfbW9kZShzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYykKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmc29sb19lbmMtPmxvY2spOworCisJc29sb19lbmMtPmludGVybGFjZWQgPSAoc29sb19lbmMtPm1vZGUgJiAweDA4KSA/IDEgOiAwOworCXNvbG9fZW5jLT5id193ZWlnaHQgPSBtYXgoc29sb19kZXYtPmZwcyAvIHNvbG9fZW5jLT5pbnRlcnZhbCwgMSk7CisKKwlzd2l0Y2ggKHNvbG9fZW5jLT5tb2RlKSB7CisJY2FzZSBTT0xPX0VOQ19NT0RFX0NJRjoKKwkJc29sb19lbmMtPndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplID4+IDE7CisJCXNvbG9fZW5jLT5oZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemU7CisJCWJyZWFrOworCWNhc2UgU09MT19FTkNfTU9ERV9EMToKKwkJc29sb19lbmMtPndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplOworCQlzb2xvX2VuYy0+aGVpZ2h0ID0gc29sb19kZXYtPnZpZGVvX3ZzaXplIDw8IDE7CisJCXNvbG9fZW5jLT5id193ZWlnaHQgPDw9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgIm1vZGUgaXMgdW5rbm93biIpOworCX0KK30KKworLyogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHNvbG9fZW5jLT5sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgc29sb19lbmNfb24oc3RydWN0IHNvbG9fZW5jX2ZoICpmaCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJdTggY2ggPSBzb2xvX2VuYy0+Y2g7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJdTggaW50ZXJ2YWw7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnNvbG9fZW5jLT5sb2NrKTsKKworCWlmIChmaC0+ZW5jX29uKQorCQlyZXR1cm4gMDsKKworCXNvbG9fdXBkYXRlX21vZGUoc29sb19lbmMpOworCisJLyogTWFrZSBzdXJlIHRvIGJ3IGNoZWNrIG9uIGZpcnN0IHJlYWRlciAqLworCWlmICghYXRvbWljX3JlYWQoJnNvbG9fZW5jLT5yZWFkZXJzKSkgeworCQlpZiAoc29sb19lbmMtPmJ3X3dlaWdodCA+IHNvbG9fZGV2LT5lbmNfYndfcmVtYWluKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZWxzZQorCQkJc29sb19kZXYtPmVuY19id19yZW1haW4gLT0gc29sb19lbmMtPmJ3X3dlaWdodDsKKwl9CisKKwlmaC0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKHNvbG9fZW5jX3RocmVhZCwgZmgsIFNPTE82MDEwX05BTUUgIl9lbmMiKTsKKworCWlmIChJU19FUlIoZmgtPmt0aHJlYWQpKQorCQlyZXR1cm4gUFRSX0VSUihmaC0+a3RocmVhZCk7CisKKwlmaC0+ZW5jX29uID0gMTsKKwlmaC0+cmRfaWR4ID0gc29sb19lbmMtPnNvbG9fZGV2LT5lbmNfd3JfaWR4OworCisJaWYgKGZoLT50eXBlID09IFNPTE9fRU5DX1RZUEVfRVhUKQorCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19DQVBfQ0hfQ09NUF9FTkFfRShjaCksIDEpOworCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzb2xvX2VuYy0+cmVhZGVycykgPiAxKQorCQlyZXR1cm4gMDsKKworCS8qIERpc2FibGUgYWxsIGVuY29kaW5nIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19DQVBfQ0hfU0NBTEUoY2gpLCAwKTsKKworCS8qIENvbW1vbiBmb3IgYm90aCBzdGQgYW5kIGV4dCBlbmNvZGluZyAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX0lOVEwoY2gpLAorCQkgICAgICAgc29sb19lbmMtPmludGVybGFjZWQgPyAxIDogMCk7CisKKwlpZiAoc29sb19lbmMtPmludGVybGFjZWQpCisJCWludGVydmFsID0gc29sb19lbmMtPmludGVydmFsIC0gMTsKKwllbHNlCisJCWludGVydmFsID0gc29sb19lbmMtPmludGVydmFsOworCisJLyogU3RhbmRhcmQgZW5jb2Rpbmcgb25seSAqLworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX0dPUChjaCksIHNvbG9fZW5jLT5nb3ApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX1FQKGNoKSwgc29sb19lbmMtPnFwKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19DQVBfQ0hfSU5UVihjaCksIGludGVydmFsKTsKKworCS8qIEV4dGVuZGVkIGVuY29kaW5nIG9ubHkgKi8KKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9HT1BfRShjaCksIHNvbG9fZW5jLT5nb3ApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX1FQX0UoY2gpLCBzb2xvX2VuYy0+cXApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9JTlRWX0UoY2gpLCBpbnRlcnZhbCk7CisKKwkvKiBFbmFibGVzIHRoZSBzdGFuZGFyZCBlbmNvZGVyICovCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX1NDQUxFKGNoKSwgc29sb19lbmMtPm1vZGUpOworCisJLyogU2V0dGxlIGRvd24gQmVhdmlzLi4uICovCisJbWRlbGF5KDEwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2VuY19vZmYoc3RydWN0IHNvbG9fZW5jX2ZoICpmaCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisKKwlpZiAoIWZoLT5lbmNfb24pCisJCXJldHVybjsKKworCWlmIChmaC0+a3RocmVhZCkgeworCQlrdGhyZWFkX3N0b3AoZmgtPmt0aHJlYWQpOworCQlmaC0+a3RocmVhZCA9IE5VTEw7CisJfQorCisJc29sb19kZXYtPmVuY19id19yZW1haW4gKz0gc29sb19lbmMtPmJ3X3dlaWdodDsKKwlmaC0+ZW5jX29uID0gMDsKKworCWlmIChhdG9taWNfZGVjX3JldHVybigmc29sb19lbmMtPnJlYWRlcnMpID4gMCkKKwkJcmV0dXJuOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fQ0FQX0NIX1NDQUxFKHNvbG9fZW5jLT5jaCksIDApOworCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX0NBUF9DSF9DT01QX0VOQV9FKHNvbG9fZW5jLT5jaCksIDApOworfQorCitzdGF0aWMgdm9pZCBlbmNfcmVzZXRfZ29wKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCkKK3sKKwlCVUdfT04oY2ggPj0gc29sb19kZXYtPm5yX2NoYW5zKTsKKwlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9HT1AoY2gpLCAxKTsKKwlzb2xvX2Rldi0+djRsMl9lbmNbY2hdLT5yZXNldF9nb3AgPSAxOworfQorCitzdGF0aWMgaW50IGVuY19nb3BfcmVzZXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLCB1OCB2b3ApCit7CisJQlVHX09OKGNoID49IHNvbG9fZGV2LT5ucl9jaGFucyk7CisJaWYgKCFzb2xvX2Rldi0+djRsMl9lbmNbY2hdLT5yZXNldF9nb3ApCisJCXJldHVybiAwOworCWlmICh2b3ApCisJCXJldHVybiAxOworCXNvbG9fZGV2LT52NGwyX2VuY1tjaF0tPnJlc2V0X2dvcCA9IDA7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVkVfQ0hfR09QKGNoKSwKKwkJICAgICAgIHNvbG9fZGV2LT52NGwyX2VuY1tjaF0tPmdvcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5jX2dldF9tcGVnX2RtYV90KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBkbWFfYWRkcl90IGJ1ZiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCByZXQ7CisKKwlpZiAob2ZmID4gU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob2ZmICsgc2l6ZSA8PSBTT0xPX01QNEVfRVhUX1NJWkUoc29sb19kZXYpKQorCQlyZXR1cm4gc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9NUDRFLCAwLCBidWYsCisJCQkJICAgICAgU09MT19NUDRFX0VYVF9BRERSKHNvbG9fZGV2KSArIG9mZiwgc2l6ZSk7CisKKwkvKiBCdWZmZXIgd3JhcCAqLworCXJldCA9IHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfTVA0RSwgMCwgYnVmLAorCQkJICAgIFNPTE9fTVA0RV9FWFRfQUREUihzb2xvX2RldikgKyBvZmYsCisJCQkgICAgU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSAtIG9mZik7CisKKwlyZXQgfD0gc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9NUDRFLCAwLAorCQkJICAgICAgYnVmICsgU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSAtIG9mZiwKKwkJCSAgICAgIFNPTE9fTVA0RV9FWFRfQUREUihzb2xvX2RldiksCisJCQkgICAgICBzaXplICsgb2ZmIC0gU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVuY19nZXRfbXBlZ19kbWEoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHZvaWQgKmJ1ZiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJZG1hX2FkZHJfdCBkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNvbG9fZGV2LT5wZGV2LCBidWYsIHNpemUsCisJCQkJCSAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyZXQgPSBlbmNfZ2V0X21wZWdfZG1hX3Qoc29sb19kZXYsIGRtYV9hZGRyLCBvZmYsIHNpemUpOworCXBjaV91bm1hcF9zaW5nbGUoc29sb19kZXYtPnBkZXYsIGRtYV9hZGRyLCBzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlbmNfZ2V0X2pwZWdfZG1hKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBkbWFfYWRkcl90IGJ1ZiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKG9mZiA+IFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2RldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9mZiArIHNpemUgPD0gU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSkKKwkJcmV0dXJuIHNvbG9fcDJtX2RtYV90KHNvbG9fZGV2LCBTT0xPX1AyTV9ETUFfSURfSlBFRywgMCwgYnVmLAorCQkJCSAgICAgIFNPTE9fSlBFR19FWFRfQUREUihzb2xvX2RldikgKyBvZmYsIHNpemUpOworCisJLyogQnVmZmVyIHdyYXAgKi8KKwlyZXQgPSBzb2xvX3AybV9kbWFfdChzb2xvX2RldiwgU09MT19QMk1fRE1BX0lEX0pQRUcsIDAsIGJ1ZiwKKwkJCSAgICAgU09MT19KUEVHX0VYVF9BRERSKHNvbG9fZGV2KSArIG9mZiwKKwkJCSAgICAgU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSAtIG9mZik7CisKKwlyZXQgfD0gc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9KUEVHLCAwLAorCQkJICAgICAgYnVmICsgU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSAtIG9mZiwKKwkJCSAgICAgIFNPTE9fSlBFR19FWFRfQUREUihzb2xvX2RldiksCisJCQkgICAgICBzaXplICsgb2ZmIC0gU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvbG9fZmlsbF9qcGVnKHN0cnVjdCBzb2xvX2VuY19maCAqZmgsIHN0cnVjdCBzb2xvX2VuY19idWYgKmVuY19idWYsCisJCQkgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBkbWFfYWRkcl90IHZidWYpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXU4ICpwID0gdmlkZW9idWZfcXVldWVfdG9fdmFkZHIoJmZoLT52aWRxLCB2Yik7CisKKwltZW1jcHkocCwganBlZ19oZWFkZXIsIHNpemVvZihqcGVnX2hlYWRlcikpOworCXBbU09GMF9TVEFSVCArIDVdID0gMHhmZiAmIChzb2xvX2VuYy0+aGVpZ2h0ID4+IDgpOworCXBbU09GMF9TVEFSVCArIDZdID0gMHhmZiAmIHNvbG9fZW5jLT5oZWlnaHQ7CisJcFtTT0YwX1NUQVJUICsgN10gPSAweGZmICYgKHNvbG9fZW5jLT53aWR0aCA+PiA4KTsKKwlwW1NPRjBfU1RBUlQgKyA4XSA9IDB4ZmYgJiBzb2xvX2VuYy0+d2lkdGg7CisKKwl2YnVmICs9IHNpemVvZihqcGVnX2hlYWRlcik7CisJdmItPnNpemUgPSBlbmNfYnVmLT5qcGVnX3NpemUgKyBzaXplb2YoanBlZ19oZWFkZXIpOworCisJcmV0dXJuIGVuY19nZXRfanBlZ19kbWEoc29sb19kZXYsIHZidWYsIGVuY19idWYtPmpwZWdfb2ZmLAorCQkJCWVuY19idWYtPmpwZWdfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19maWxsX21wZWcoc3RydWN0IHNvbG9fZW5jX2ZoICpmaCwgc3RydWN0IHNvbG9fZW5jX2J1ZiAqZW5jX2J1ZiwKKwkJCSAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGRtYV9hZGRyX3QgdmJ1ZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJc3RydWN0IHZvcF9oZWFkZXIgdmg7CisJaW50IHJldDsKKwlpbnQgZnJhbWVfc2l6ZSwgZnJhbWVfb2ZmOworCisJaWYgKFdBUk5fT05fT05DRShlbmNfYnVmLT5zaXplIDw9IHNpemVvZih2aCkpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBGaXJzdCBnZXQgdGhlIGhhcmR3YXJlIHZvcCBoZWFkZXIgKG5vdCByZWFsIG1wZWcpICovCisJcmV0ID0gZW5jX2dldF9tcGVnX2RtYShzb2xvX2RldiwgJnZoLCBlbmNfYnVmLT5vZmYsIHNpemVvZih2aCkpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKKworCWlmIChXQVJOX09OX09OQ0Uodmguc2l6ZSA+IGVuY19idWYtPnNpemUpKQorCQlyZXR1cm4gLTE7CisKKwl2Yi0+d2lkdGggPSB2aC5oc2l6ZSA8PCA0OworCXZiLT5oZWlnaHQgPSB2aC52c2l6ZSA8PCA0OworCXZiLT5zaXplID0gdmguc2l6ZTsKKworCS8qIElmIHRoaXMgaXMgYSBrZXkgZnJhbWUsIGFkZCBleHRyYSBtNHYgaGVhZGVyICovCisJaWYgKCFlbmNfYnVmLT52b3ApIHsKKwkJdTE2IGZwcyA9IHNvbG9fZGV2LT5mcHMgKiAxMDAwOworCQl1MTYgaW50ZXJ2YWwgPSBzb2xvX2VuYy0+aW50ZXJ2YWwgKiAxMDAwOworCQl1OCAqcCA9IHZpZGVvYnVmX3F1ZXVlX3RvX3ZhZGRyKCZmaC0+dmlkcSwgdmIpOworCisJCW1lbWNweShwLCB2aWRfdm9wX2hlYWRlciwgc2l6ZW9mKHZpZF92b3BfaGVhZGVyKSk7CisKKwkJaWYgKHNvbG9fZGV2LT52aWRlb190eXBlID09IFNPTE9fVk9fRk1UX1RZUEVfTlRTQykKKwkJCXBbMTBdIHw9ICgoWFZJRF9QQVJfNDNfTlRTQyA8PCAzKSAmIDB4NzgpOworCQllbHNlCisJCQlwWzEwXSB8PSAoKFhWSURfUEFSXzQzX1BBTCA8PCAzKSAmIDB4NzgpOworCisJCS8qIEZyYW1lIHJhdGUgYW5kIGludGVydmFsICovCisJCXBbMjJdID0gZnBzID4+IDQ7CisJCXBbMjNdID0gKChmcHMgPDwgNCkgJiAweGYwKSB8IDB4MGMgfCAoKGludGVydmFsID4+IDEzKSAmIDB4Myk7CisJCXBbMjRdID0gKGludGVydmFsID4+IDUpICYgMHhmZjsKKwkJcFsyNV0gPSAoKGludGVydmFsIDw8IDMpICYgMHhmOCkgfCAweDA0OworCisJCS8qIFdpZHRoIGFuZCBoZWlnaHQgKi8KKwkJcFsyNl0gPSAodmItPndpZHRoID4+IDMpICYgMHhmZjsKKwkJcFsyN10gPSAoKHZiLT5oZWlnaHQgPj4gOSkgJiAweDBmKSB8IDB4MTA7CisJCXBbMjhdID0gKHZiLT5oZWlnaHQgPj4gMSkgJiAweGZmOworCisJCS8qIEludGVybGFjZSAqLworCQlpZiAodmguaW50ZXJsYWNlKQorCQkJcFsyOV0gfD0gMHgyMDsKKworCQkvKiBBZGp1c3QgdGhlIGRtYSBidWZmZXIgcGFzdCB0aGlzIGhlYWRlciAqLworCQl2Yi0+c2l6ZSArPSBzaXplb2YodmlkX3ZvcF9oZWFkZXIpOworCQl2YnVmICs9IHNpemVvZih2aWRfdm9wX2hlYWRlcik7CisJfQorCisJLyogTm93IGdldCB0aGUgYWN0dWFsIG1wZWcgcGF5bG9hZCAqLworCWZyYW1lX29mZiA9IChlbmNfYnVmLT5vZmYgKyBzaXplb2YodmgpKSAlIFNPTE9fTVA0RV9FWFRfU0laRShzb2xvX2Rldik7CisJZnJhbWVfc2l6ZSA9IGVuY19idWYtPnNpemUgLSBzaXplb2YodmgpOworCXJldCA9IGVuY19nZXRfbXBlZ19kbWFfdChzb2xvX2RldiwgdmJ1ZiwgZnJhbWVfb2ZmLCBmcmFtZV9zaXplKTsKKwlpZiAoV0FSTl9PTl9PTkNFKHJldCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKiBPbiBzdWNjZXNzZnVsIHJldHVybiAoMCksIGxlYXZlcyBzb2xvX2VuYy0+bG9jayB1bmxvY2tlZCAqLworc3RhdGljIGludCBzb2xvX2VuY19maWxsYnVmKHN0cnVjdCBzb2xvX2VuY19maCAqZmgsCisJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCBzb2xvX2VuY19idWYgKmVuY19idWYgPSBOVUxMOworCWRtYV9hZGRyX3QgdmJ1ZjsKKwlpbnQgcmV0OworCXUxNiBpZHggPSBmaC0+cmRfaWR4OworCisJd2hpbGUgKGlkeCAhPSBzb2xvX2Rldi0+ZW5jX3dyX2lkeCkgeworCQlzdHJ1Y3Qgc29sb19lbmNfYnVmICplYnVmID0gJnNvbG9fZGV2LT5lbmNfYnVmW2lkeF07CisJCWlkeCA9IChpZHggKyAxKSAlIFNPTE9fTlJfUklOR19CVUZTOworCQlpZiAoZmgtPmZtdCA9PSBWNEwyX1BJWF9GTVRfTVBFRykgeworCQkJaWYgKGZoLT50eXBlICE9IGVidWYtPnR5cGUpCisJCQkJY29udGludWU7CisJCQlpZiAoZWJ1Zi0+Y2ggPT0gc29sb19lbmMtPmNoKSB7CisJCQkJZW5jX2J1ZiA9IGVidWY7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoZWJ1Zi0+Y2ggPT0gc29sb19lbmMtPmNoKSB7CisJCQkvKiBGb3IgbWpwZWcsIGtlZXAgcmVhZGluZyB0byB0aGUgbmV3ZXN0IGZyYW1lICovCisJCQllbmNfYnVmID0gZWJ1ZjsKKwkJfQorCX0KKworCWZoLT5yZF9pZHggPSBpZHg7CisKKwlpZiAoIWVuY19idWYpCisJCXJldHVybiAtMTsKKworCWlmICgoZmgtPmZtdCA9PSBWNEwyX1BJWF9GTVRfTVBFRyAmJgorCSAgICAgdmItPmJzaXplIDwgZW5jX2J1Zi0+c2l6ZSkgfHwKKwkgICAgKGZoLT5mbXQgPT0gVjRMMl9QSVhfRk1UX01KUEVHICYmCisJICAgICB2Yi0+YnNpemUgPCAoZW5jX2J1Zi0+anBlZ19zaXplICsgc2l6ZW9mKGpwZWdfaGVhZGVyKSkpKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoISh2YnVmID0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyh2YikpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBJcyBpdCBvayB0aGF0IHdlIG1lc3Mgd2l0aCB0aGlzIGJ1ZmZlciBvdXQgb2YgbG9jaz8gKi8KKwlzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworCisJaWYgKGZoLT5mbXQgPT0gVjRMMl9QSVhfRk1UX01QRUcpCisJCXJldCA9IHNvbG9fZmlsbF9tcGVnKGZoLCBlbmNfYnVmLCB2YiwgdmJ1Zik7CisJZWxzZQorCQlyZXQgPSBzb2xvX2ZpbGxfanBlZyhmaCwgZW5jX2J1ZiwgdmIsIHZidWYpOworCisJaWYgKHJldCkgLy8gSWdub3JlIGZhaWx1cmVzCisJCXJldHVybiAwOworCisJbGlzdF9kZWwoJnZiLT5xdWV1ZSk7CisJdmItPmZpZWxkX2NvdW50Kys7CisJdmItPnRzID0gZW5jX2J1Zi0+dHM7CisJdmItPnN0YXRlID0gVklERU9CVUZfRE9ORTsKKworCXdha2VfdXAoJnZiLT5kb25lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2VuY190aHJlYWRfdHJ5KHN0cnVjdCBzb2xvX2VuY19maCAqZmgpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiOworCisJZm9yICg7OykgeworCQlzcGluX2xvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCQlpZiAobGlzdF9lbXB0eSgmZmgtPnZpZHFfYWN0aXZlKSkKKwkJCWJyZWFrOworCisJCXZiID0gbGlzdF9maXJzdF9lbnRyeSgmZmgtPnZpZHFfYWN0aXZlLAorCQkJCSAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsIHF1ZXVlKTsKKworCQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnZiLT5kb25lKSkKKwkJCWJyZWFrOworCisJCS8qIE9uIHN1Y2Nlc3MsIHJldHVybnMgd2l0aCBzb2xvX2VuYy0+bG9jayB1bmxvY2tlZCAqLworCQlpZiAoc29sb19lbmNfZmlsbGJ1ZihmaCwgdmIpKQorCQkJYnJlYWs7CisJfQorCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZzb2xvX2VuYy0+bG9jayk7CisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY190aHJlYWQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gZGF0YTsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlzZXRfZnJlZXphYmxlKCk7CisJYWRkX3dhaXRfcXVldWUoJnNvbG9fZW5jLT50aHJlYWRfd2FpdCwgJndhaXQpOworCisJZm9yICg7OykgeworCQlsb25nIHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFopOworCQlpZiAodGltZW91dCA9PSAtRVJFU1RBUlRTWVMgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisJCXNvbG9fZW5jX3RocmVhZF90cnkoZmgpOworCQl0cnlfdG9fZnJlZXplKCk7CisJfQorCisJcmVtb3ZlX3dhaXRfcXVldWUoJnNvbG9fZW5jLT50aHJlYWRfd2FpdCwgJndhaXQpOworCisgICAgICAgIHJldHVybiAwOworfQorCit2b2lkIHNvbG9fbW90aW9uX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldikKK3sKKwl1MzIgc3RhdHVzOworCWludCBpOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX01PVElPTik7CisKKwlzdGF0dXMgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LCBTT0xPX1ZJX01PVF9TVEFUVVMpOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKSB7CisJCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gc29sb19kZXYtPnY0bDJfZW5jW2ldOworCisJCUJVR19PTihzb2xvX2VuYyA9PSBOVUxMKTsKKworCQlpZiAoc29sb19lbmMtPm1vdGlvbl9kZXRlY3RlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShzdGF0dXMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQlzb2xvX2VuYy0+bW90aW9uX2RldGVjdGVkID0gMTsKKwl9Cit9CisKK3ZvaWQgc29sb19lbmNfdjRsMl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc3RydWN0IHNvbG9fZW5jX2J1ZiAqZW5jX2J1ZjsKKwlzdHJ1Y3QgdmlkZW5jX3N0YXR1cyB2c3RhdHVzOworCXUzMiBtcGVnX2N1cnJlbnQsIG1wZWdfbmV4dCwgbXBlZ19zaXplOworCXUzMiBqcGVnX2N1cnJlbnQsIGpwZWdfbmV4dCwganBlZ19zaXplOworCXUzMiByZWdfbXBlZ19zaXplOworCXU4IGN1cl9xLCB2b3BfdHlwZTsKKwl1OCBjaDsKKwllbnVtIHNvbG9fZW5jX3R5cGVzIGVuY190eXBlOworCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX0VOQ09ERVIpOworCisJdnN0YXR1cy5zdGF0dXMxMSA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fVkVfU1RBVEUoMTEpKTsKKwljdXJfcSA9ICh2c3RhdHVzLnN0YXR1czExX3N0Lmxhc3RfcXVldWUgKyAxKSAlIE1QNF9RUzsKKworCXZzdGF0dXMuc3RhdHVzMCA9IHNvbG9fcmVnX3JlYWQoc29sb19kZXYsIFNPTE9fVkVfU1RBVEUoMCkpOworCXJlZ19tcGVnX3NpemUgPSAodnN0YXR1cy5zdGF0dXMwX3N0Lm1wNF9lbmNfY29kZV9zaXplICsgNjQgKyAzMikgJgorCQkJKH4zMSk7CisKKwl3aGlsZSAoc29sb19kZXYtPmVuY19pZHggIT0gY3VyX3EpIHsKKwkJbXBlZ19jdXJyZW50ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwKKwkJCQkJU09MT19WRV9NUEVHNF9RVUUoc29sb19kZXYtPmVuY19pZHgpKTsKKwkJanBlZ19jdXJyZW50ID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwKKwkJCQkJU09MT19WRV9KUEVHX1FVRShzb2xvX2Rldi0+ZW5jX2lkeCkpOworCQlzb2xvX2Rldi0+ZW5jX2lkeCA9IChzb2xvX2Rldi0+ZW5jX2lkeCArIDEpICUgTVA0X1FTOworCQltcGVnX25leHQgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LAorCQkJCQlTT0xPX1ZFX01QRUc0X1FVRShzb2xvX2Rldi0+ZW5jX2lkeCkpOworCQlqcGVnX25leHQgPSBzb2xvX3JlZ19yZWFkKHNvbG9fZGV2LAorCQkJCQlTT0xPX1ZFX0pQRUdfUVVFKHNvbG9fZGV2LT5lbmNfaWR4KSk7CisKKwkJaWYgKChjaCA9IChtcGVnX2N1cnJlbnQgPj4gMjQpICYgMHgxZikgPj0gU09MT19NQVhfQ0hBTk5FTFMpIHsKKwkJCWNoIC09IFNPTE9fTUFYX0NIQU5ORUxTOworCQkJZW5jX3R5cGUgPSBTT0xPX0VOQ19UWVBFX0VYVDsKKwkJfSBlbHNlCisJCQllbmNfdHlwZSA9IFNPTE9fRU5DX1RZUEVfU1REOworCisJCXZvcF90eXBlID0gKG1wZWdfY3VycmVudCA+PiAyOSkgJiAzOworCisJCW1wZWdfY3VycmVudCAmPSAweDAwZmZmZmZmOworCQltcGVnX25leHQgICAgJj0gMHgwMGZmZmZmZjsKKwkJanBlZ19jdXJyZW50ICY9IDB4MDBmZmZmZmY7CisJCWpwZWdfbmV4dCAgICAmPSAweDAwZmZmZmZmOworCisJCW1wZWdfc2l6ZSA9IChTT0xPX01QNEVfRVhUX1NJWkUoc29sb19kZXYpICsKKwkJCSAgICAgbXBlZ19uZXh0IC0gbXBlZ19jdXJyZW50KSAlCisJCQkgICAgU09MT19NUDRFX0VYVF9TSVpFKHNvbG9fZGV2KTsKKworCQlqcGVnX3NpemUgPSAoU09MT19KUEVHX0VYVF9TSVpFKHNvbG9fZGV2KSArCisJCQkgICAgIGpwZWdfbmV4dCAtIGpwZWdfY3VycmVudCkgJQorCQkJICAgIFNPTE9fSlBFR19FWFRfU0laRShzb2xvX2Rldik7CisKKwkJLyogWFhYIEkgdGhpbmsgdGhpcyBtZWFucyB3ZSBoYWQgYSByaW5nIG92ZXJmbG93PyAqLworCQlpZiAobXBlZ19jdXJyZW50ID4gbXBlZ19uZXh0ICYmIG1wZWdfc2l6ZSAhPSByZWdfbXBlZ19zaXplKSB7CisJCQllbmNfcmVzZXRfZ29wKHNvbG9fZGV2LCBjaCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdoZW4gcmVzZXR0aW5nIHRoZSBHT1AsIHNraXAgZnJhbWVzIHVudGlsIEktZnJhbWUgKi8KKwkJaWYgKGVuY19nb3BfcmVzZXQoc29sb19kZXYsIGNoLCB2b3BfdHlwZSkpCisJCQljb250aW51ZTsKKworCQllbmNfYnVmID0gJnNvbG9fZGV2LT5lbmNfYnVmW3NvbG9fZGV2LT5lbmNfd3JfaWR4XTsKKworCQllbmNfYnVmLT52b3AgPSB2b3BfdHlwZTsKKwkJZW5jX2J1Zi0+Y2ggPSBjaDsKKwkJZW5jX2J1Zi0+b2ZmID0gbXBlZ19jdXJyZW50OworCQllbmNfYnVmLT5zaXplID0gbXBlZ19zaXplOworCQllbmNfYnVmLT5qcGVnX29mZiA9IGpwZWdfY3VycmVudDsKKwkJZW5jX2J1Zi0+anBlZ19zaXplID0ganBlZ19zaXplOworCQllbmNfYnVmLT50eXBlID0gZW5jX3R5cGU7CisKKwkJZG9fZ2V0dGltZW9mZGF5KCZlbmNfYnVmLT50cyk7CisKKwkJc29sb19kZXYtPmVuY193cl9pZHggPSAoc29sb19kZXYtPmVuY193cl9pZHggKyAxKSAlCisJCQkJCVNPTE9fTlJfUklOR19CVUZTOworCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc29sb19kZXYtPnY0bDJfZW5jW2NoXS0+dGhyZWFkX3dhaXQpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSkKK3sKKyAgICAgICAgKnNpemUgPSBGUkFNRV9CVUZfU0laRTsKKworICAgICAgICBpZiAoKmNvdW50IDwgTUlOX1ZJRF9CVUZGRVJTKQorCQkqY291bnQgPSBNSU5fVklEX0JVRkZFUlM7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfYnVmX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKKwkJCQllbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCisJdmItPnNpemUgPSBGUkFNRV9CVUZfU0laRTsKKwlpZiAodmItPmJhZGRyICE9IDAgJiYgdmItPmJzaXplIDwgdmItPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlc2UgcHJvcGVydGllcyBvbmx5IGNoYW5nZSB3aGVuIHF1ZXVlIGlzIGlkbGUgKi8KKwl2Yi0+d2lkdGggPSBzb2xvX2VuYy0+d2lkdGg7CisJdmItPmhlaWdodCA9IHNvbG9fZW5jLT5oZWlnaHQ7CisJdmItPmZpZWxkICA9IGZpZWxkOworCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCWludCByYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgdmIsIE5VTEwpOworCQlpZiAocmMgPCAwKSB7CisJCQl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsIHZiKTsKKwkJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29sb19lbmNfYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHZxLT5wcml2X2RhdGE7CisKKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmdmItPnF1ZXVlLCAmZmgtPnZpZHFfYWN0aXZlKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZoLT5lbmMtPnRocmVhZF93YWl0KTsKK30KKworc3RhdGljIHZvaWQgc29sb19lbmNfYnVmX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCQkgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJdmlkZW9idWZfZG1hX2NvbnRpZ19mcmVlKHZxLCB2Yik7CisJdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgc29sb19lbmNfdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwCT0gc29sb19lbmNfYnVmX3NldHVwLAorCS5idWZfcHJlcGFyZQk9IHNvbG9fZW5jX2J1Zl9wcmVwYXJlLAorCS5idWZfcXVldWUJPSBzb2xvX2VuY19idWZfcXVldWUsCisJLmJ1Zl9yZWxlYXNlCT0gc29sb19lbmNfYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHNvbG9fZW5jX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmZmgtPnZpZHEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfbW1hcF9tYXBwZXIoJmZoLT52aWRxLCB2bWEpOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBzb2xvX2VuY19maCAqZmg7CisKKwlpZiAoKGZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwlmaC0+ZW5jID0gc29sb19lbmM7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisJSU5JVF9MSVNUX0hFQUQoJmZoLT52aWRxX2FjdGl2ZSk7CisJZmgtPmZtdCA9IFY0TDJfUElYX0ZNVF9NUEVHOworCWZoLT50eXBlID0gU09MT19FTkNfVFlQRV9TVEQ7CisKKwl2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQoJmZoLT52aWRxLCAmc29sb19lbmNfdmlkZW9fcW9wcywKKwkJCQkgICAgJnNvbG9fZW5jLT5zb2xvX2Rldi0+cGRldi0+ZGV2LAorCQkJCSAgICAmc29sb19lbmMtPmxvY2ssCisJCQkJICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKKwkJCQkgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VELAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHZpZGVvYnVmX2J1ZmZlciksIGZoKTsKKworCXNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc29sb19lbmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCisJLyogTWFrZSBzdXJlIHRoZSBlbmNvZGVyIGlzIG9uICovCisJaWYgKCFmaC0+ZW5jX29uKSB7CisJCWludCByZXQ7CisKKwkJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJCXJldCA9IHNvbG9fZW5jX29uKGZoKTsKKwkgICAgICAgIHNwaW5fdW5sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZpZHEsIGRhdGEsIGNvdW50LCBwcG9zLCAwLAorCQkJCSAgICBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJdmlkZW9idWZfc3RvcCgmZmgtPnZpZHEpOworCXZpZGVvYnVmX21tYXBfZnJlZSgmZmgtPnZpZHEpOworCXNvbG9fZW5jX29mZihmaCk7CisJa2ZyZWUoZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCisJc3RyY3B5KGNhcC0+ZHJpdmVyLCBTT0xPNjAxMF9OQU1FKTsKKwlzbnByaW50ZihjYXAtPmNhcmQsIHNpemVvZihjYXAtPmNhcmQpLCAiU29mdGxvZ2ljIDYwMTAgRW5jICVkIiwKKwkJIHNvbG9fZW5jLT5jaCk7CisJc25wcmludGYoY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pLCAiUENJICVzIiwKKwkJIHBjaV9uYW1lKHNvbG9fZGV2LT5wZGV2KSk7CisJY2FwLT52ZXJzaW9uID0gU09MTzYwMTBfVkVSX05VTTsKKwljYXAtPmNhcGFiaWxpdGllcyA9ICAgICBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKwkJCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAorCQkJCVY0TDJfQ0FQX1NUUkVBTUlORzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2lucHV0ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisKKwlpZiAoaW5wdXQtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKGlucHV0LT5uYW1lLCBzaXplb2YoaW5wdXQtPm5hbWUpLCAiRW5jb2RlciAlZCIsCisJCSBzb2xvX2VuYy0+Y2ggKyAxKTsKKwlpbnB1dC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisKKwlpZiAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9OVFNDKQorCQlpbnB1dC0+c3RkID0gVjRMMl9TVERfTlRTQ19NOworCWVsc2UKKwkJaW5wdXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9NOworCisJaWYgKCF0dzI4X2dldF92aWRlb19zdGF0dXMoc29sb19kZXYsIHNvbG9fZW5jLT5jaCkpCisJCWlucHV0LT5zdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3NldF9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGluZGV4KQoreworCWlmIChpbmRleCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19nZXRfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCSppbmRleCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3dpdGNoIChmLT5pbmRleCkgeworCWNhc2UgMDoKKwkJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwkJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiTVBFRy00IEFWQyIpOworCQlicmVhazsKKwljYXNlIDE6CisJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOworCQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sICJNSlBFRyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3RyeV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRyAmJgorCSAgICBwaXgtPnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBjYW5ub3QgY2hhbmdlIHdpZHRoL2hlaWdodCBpbiBtaWQgcmVhZCAqLworCWlmIChhdG9taWNfcmVhZCgmc29sb19lbmMtPnJlYWRlcnMpID4gMCkgeworCQlpZiAocGl4LT53aWR0aCAhPSBzb2xvX2VuYy0+d2lkdGggfHwKKwkJICAgIHBpeC0+aGVpZ2h0ICE9IHNvbG9fZW5jLT5oZWlnaHQpCisJCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZSBpZiAoIShwaXgtPndpZHRoID09IHNvbG9fZGV2LT52aWRlb19oc2l6ZSAmJgorCSAgICAgIHBpeC0+aGVpZ2h0ID09IHNvbG9fZGV2LT52aWRlb192c2l6ZSA8PCAxKSAmJgorCSAgICAhKHBpeC0+d2lkdGggPT0gc29sb19kZXYtPnZpZGVvX2hzaXplID4+IDEgJiYKKwkgICAgICBwaXgtPmhlaWdodCA9PSBzb2xvX2Rldi0+dmlkZW9fdnNpemUpKSB7CisJCS8qIERlZmF1bHQgdG8gQ0lGIDEvMiBzaXplICovCisJCXBpeC0+d2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgPj4gMTsKKwkJcGl4LT5oZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemU7CisJfQorCisJaWYgKHBpeC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpCisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZSBpZiAocGl4LT5maWVsZCAhPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQpIHsKKwkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwl9CisKKwkvKiBKdXN0IHNldCB0aGVzZSAqLworCXBpeC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJcGl4LT5zaXplaW1hZ2UgPSBGUkFNRV9CVUZfU0laRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3NldF9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmc29sb19lbmMtPmxvY2spOworCisJaWYgKChyZXQgPSBzb2xvX2VuY190cnlfZm10X2NhcChmaWxlLCBwcml2LCBmKSkpIHsKKwkJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGl4LT53aWR0aCA9PSBzb2xvX2Rldi0+dmlkZW9faHNpemUpCisJCXNvbG9fZW5jLT5tb2RlID0gU09MT19FTkNfTU9ERV9EMTsKKwllbHNlCisJCXNvbG9fZW5jLT5tb2RlID0gU09MT19FTkNfTU9ERV9DSUY7CisKKwkvKiBUaGlzIGRvZXMgbm90IGNoYW5nZSB0aGUgZW5jb2RlciBhdCBhbGwgKi8KKwlmaC0+Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKKworCWlmIChwaXgtPnByaXYpCisJCWZoLT50eXBlID0gU09MT19FTkNfVFlQRV9FWFQ7CisJcmV0ID0gc29sb19lbmNfb24oZmgpOworCisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfZ2V0X2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKworCXBpeC0+d2lkdGggPSBzb2xvX2VuYy0+d2lkdGg7CisJcGl4LT5oZWlnaHQgPSBzb2xvX2VuYy0+aGVpZ2h0OworCXBpeC0+cGl4ZWxmb3JtYXQgPSBmaC0+Zm10OworCXBpeC0+ZmllbGQgPSBzb2xvX2VuYy0+aW50ZXJsYWNlZCA/IFY0TDJfRklFTERfSU5URVJMQUNFRCA6CisJCSAgICAgVjRMMl9GSUVMRF9OT05FOworCXBpeC0+c2l6ZWltYWdlID0gRlJBTUVfQlVGX1NJWkU7CisJcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIAorCQkJICAgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZpZHEsIHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmlkcSwgYnVmKTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmlkcSwgYnVmKTsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGVuY29kZXIgaXMgb24gKi8KKwlpZiAoIWZoLT5lbmNfb24pIHsKKwkJc3Bpbl9sb2NrKCZzb2xvX2VuYy0+bG9jayk7CisJCXJldCA9IHNvbG9fZW5jX29uKGZoKTsKKwkJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdmlkZW9idWZfZHFidWYoJmZoLT52aWRxLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2lnbmFsIG1vdGlvbiBkZXRlY3Rpb24gKi8KKwlpZiAoc29sb19pc19tb3Rpb25fb24oc29sb19lbmMpKSB7CisJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19NT1RJT05fT047CisJCWlmIChzb2xvX2VuYy0+bW90aW9uX2RldGVjdGVkKSB7CisJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTU9USU9OX0RFVEVDVEVEOworCQkJc29sb19yZWdfd3JpdGUoc29sb19lbmMtPnNvbG9fZGV2LCBTT0xPX1ZJX01PVF9DTEVBUiwKKwkJCQkgICAgICAgMSA8PCBzb2xvX2VuYy0+Y2gpOworCQkJc29sb19lbmMtPm1vdGlvbl9kZXRlY3RlZCA9IDA7CisJCX0KKwl9CisKKwkvKiBDaGVjayBmb3Iga2V5IGZyYW1lIG9uIG1wZWcgZGF0YSAqLworCWlmIChmaC0+Zm10ID09IFY0TDJfUElYX0ZNVF9NUEVHKSB7CisJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gZmgtPnZpZHEuYnVmc1tidWYtPmluZGV4XTsKKwkJdTggKnAgPSB2aWRlb2J1Zl9xdWV1ZV90b192YWRkcigmZmgtPnZpZHEsIHZiKTsKKwkJaWYgKHBbM10gPT0gMHgwMCkKKwkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19LRVlGUkFNRTsKKwkJZWxzZQorCQkJYnVmLT5mbGFncyB8PSBWNEwyX0JVRl9GTEFHX1BGUkFNRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VuY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisKKwlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmlkcSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbmNfc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgZW51bSB2NGwyX2J1Zl90eXBlIGkpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisKKwlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZpZHEpOworfQorCitzdGF0aWMgaW50IHNvbG9fZW5jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+ZW5jLT5zb2xvX2RldjsKKworCWlmIChmc2l6ZS0+cGl4ZWxfZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZnNpemUtPmluZGV4KSB7CisJY2FzZSAwOgorCQlmc2l6ZS0+ZGlzY3JldGUud2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgPj4gMTsKKwkJZnNpemUtPmRpc2NyZXRlLmhlaWdodCA9IHNvbG9fZGV2LT52aWRlb192c2l6ZTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmc2l6ZS0+ZGlzY3JldGUud2lkdGggPSBzb2xvX2Rldi0+dmlkZW9faHNpemU7CisJCWZzaXplLT5kaXNjcmV0ZS5oZWlnaHQgPSBzb2xvX2Rldi0+dmlkZW9fdnNpemUgPDwgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZnNpemUtPnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQRV9ESVNDUkVURTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgICAgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpbnR2KQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPmVuYy0+c29sb19kZXY7CisKKwlpZiAoZmludHYtPnBpeGVsX2Zvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTVBFRyB8fCBmaW50di0+aW5kZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJZmludHYtPnR5cGUgPSBWNEwyX0ZSTUlWQUxfVFlQRV9TVEVQV0lTRTsKKworCWZpbnR2LT5zdGVwd2lzZS5taW4ubnVtZXJhdG9yID0gc29sb19kZXYtPmZwczsKKwlmaW50di0+c3RlcHdpc2UubWluLmRlbm9taW5hdG9yID0gMTsKKworCWZpbnR2LT5zdGVwd2lzZS5tYXgubnVtZXJhdG9yID0gc29sb19kZXYtPmZwczsKKwlmaW50di0+c3RlcHdpc2UubWF4LmRlbm9taW5hdG9yID0gMTU7CisKKwlmaW50di0+c3RlcHdpc2Uuc3RlcC5udW1lcmF0b3IgPSAxOworCWZpbnR2LT5zdGVwd2lzZS5zdGVwLmRlbm9taW5hdG9yID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fZ19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkgICAgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOworCisJY3AtPmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSBzb2xvX2VuYy0+aW50ZXJ2YWw7CisJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHNvbG9fZGV2LT5mcHM7CisJY3AtPmNhcHR1cmVtb2RlID0gMDsKKwkvKiBYWFg6IFNob3VsZG4ndCB3ZSBiZSBhYmxlIHRvIGdldC9zZXQgdGhpcyBmcm9tIHZpZGVvYnVmPyAqLworCWNwLT5yZWFkYnVmZmVycyA9IDI7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7CisKKwlzcGluX2xvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworCWlmIChhdG9taWNfcmVhZCgmc29sb19lbmMtPnJlYWRlcnMpID4gMCkgeworCQlzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKKwkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKKwkJLyogcmVzZXQgZnJhbWVyYXRlICovCisJCWNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKKwkJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHNvbG9fZGV2LT5mcHM7CisJfQorCisJaWYgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgIT0gc29sb19kZXYtPmZwcykKKwkJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHNvbG9fZGV2LT5mcHM7CisKKwlpZiAoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPiAxNSkKKwkJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxNTsKKworCXNvbG9fZW5jLT5pbnRlcnZhbCA9IGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yOworCisJY3AtPmNhcGFiaWxpdHkgPSBWNEwyX0NBUF9USU1FUEVSRlJBTUU7CisKKwlzb2xvX2VuYy0+Z29wID0gbWF4KHNvbG9fZGV2LT5mcHMgLyBzb2xvX2VuYy0+aW50ZXJ2YWwsIDEpOworCXNvbG9fdXBkYXRlX21vZGUoc29sb19lbmMpOworCisJc3Bpbl91bmxvY2soJnNvbG9fZW5jLT5sb2NrKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBzb2xvX2VuYy0+c29sb19kZXY7CisKKwlxYy0+aWQgPSB2NGwyX2N0cmxfbmV4dChzb2xvX2N0cmxfY2xhc3NlcywgcWMtPmlkKTsKKwlpZiAoIXFjLT5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAwLCAweGZmLCAxLCAweDgwKTsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAwLCAweDBmLCAxLCAweDAwKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xLAorCQkJVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMsIDEsCisJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQyk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDEsIDI1NSwgMSwgc29sb19kZXYtPmZwcyk7CisjaWZkZWYgUFJJVkFURV9DSURTCisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xEOgorCQlxYy0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSOworCQlxYy0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI7CisJCXFjLT5taW5pbXVtID0gMDsKKwkJcWMtPm1heGltdW0gPSAweGZmZmY7CisJCXFjLT5zdGVwID0gMTsKKwkJcWMtPmRlZmF1bHRfdmFsdWUgPSBTT0xPX0RFRl9NT1RfVEhSRVNIOworCQlzdHJsY3B5KHFjLT5uYW1lLCAiTW90aW9uIERldGVjdGlvbiBUaHJlc2hvbGQiLAorCQkJc2l6ZW9mKHFjLT5uYW1lKSk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfTU9USU9OX0VOQUJMRToKKwkJcWMtPnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOOworCQlxYy0+bWluaW11bSA9IDA7CisJCXFjLT5tYXhpbXVtID0gcWMtPnN0ZXAgPSAxOworCQlxYy0+ZGVmYXVsdF92YWx1ZSA9IDA7CisJCXN0cmxjcHkocWMtPm5hbWUsICJNb3Rpb24gRGV0ZWN0aW9uIEVuYWJsZSIsIHNpemVvZihxYy0+bmFtZSkpOworCQlyZXR1cm4gMDsKKyNlbHNlCisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xEOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmZmZiwgMSwKKwkJCQkJICAgIFNPTE9fREVGX01PVF9USFJFU0gpOworCWNhc2UgVjRMMl9DSURfTU9USU9OX0VOQUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKKyNlbmRpZgorCWNhc2UgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQ6CisJCXFjLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfU1RSSU5HOworCQlxYy0+bWluaW11bSA9IDA7CisJCXFjLT5tYXhpbXVtID0gT1NEX1RFWFRfTUFYOworCQlxYy0+c3RlcCA9IDE7CisJCXFjLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJc3RybGNweShxYy0+bmFtZSwgIk9TRCBUZXh0Iiwgc2l6ZW9mKHFjLT5uYW1lKSk7CisJCXJldHVybiAwOworCX0KKworICAgICAgICByZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzb2xvX3F1ZXJ5bWVudShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3sKKwlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7CisJaW50IGVycjsKKworCXFjdHJsLmlkID0gcW1lbnUtPmlkOworCWlmICgoZXJyID0gc29sb19xdWVyeWN0cmwoZmlsZSwgcHJpdiwgJnFjdHJsKSkpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X21lbnUocW1lbnUsICZxY3RybCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCSAgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IHNvbG9fZW5jLT5zb2xvX2RldjsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXJldHVybiB0dzI4X2dldF9jdHJsX3ZhbChzb2xvX2RldiwgY3RybC0+aWQsIHNvbG9fZW5jLT5jaCwKKwkJCQkJICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6CisJCWN0cmwtPnZhbHVlID0gc29sb19lbmMtPmdvcDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVEhSRVNIT0xEOgorCQljdHJsLT52YWx1ZSA9IHNvbG9fZW5jLT5tb3Rpb25fdGhyZXNoOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9FTkFCTEU6CisJCWN0cmwtPnZhbHVlID0gc29sb19pc19tb3Rpb25fb24oc29sb19lbmMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHNvbG9fZW5jX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG9fZW5jX2RldiAqc29sb19lbmMgPSBmaC0+ZW5jOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dXJuIHR3Mjhfc2V0X2N0cmxfdmFsKHNvbG9fZGV2LCBjdHJsLT5pZCwgc29sb19lbmMtPmNoLAorCQkJCQkgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJaWYgKGN0cmwtPnZhbHVlICE9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRToKKwkJaWYgKGN0cmwtPnZhbHVlIDwgMSB8fCBjdHJsLT52YWx1ZSA+IDI1NSkKKwkJCXJldHVybiAtRVJBTkdFOworCQlzb2xvX2VuYy0+Z29wID0gY3RybC0+dmFsdWU7CisJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZFX0NIX0dPUChzb2xvX2VuYy0+Y2gpLAorCQkJICAgICAgIHNvbG9fZW5jLT5nb3ApOworCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WRV9DSF9HT1BfRShzb2xvX2VuYy0+Y2gpLAorCQkJICAgICAgIHNvbG9fZW5jLT5nb3ApOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01PVElPTl9USFJFU0hPTEQ6CisJCS8qIFRPRE8gYWNjZXB0IHZhbHVlIG9uIGxvd2VyIDE2LWJpdHMgYW5kIHVzZSBoaWdoCisJCSAqIDE2LWJpdHMgdG8gYXNzaWduIHRoZSB2YWx1ZSB0byBhIHNwZWNpZmljIGJsb2NrICovCisJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAweGZmZmYpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJc29sb19lbmMtPm1vdGlvbl90aHJlc2ggPSBjdHJsLT52YWx1ZTsKKwkJc29sb19zZXRfbW90aW9uX3RocmVzaG9sZChzb2xvX2Rldiwgc29sb19lbmMtPmNoLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTU9USU9OX0VOQUJMRToKKwkJc29sb19tb3Rpb25fdG9nZ2xlKHNvbG9fZW5jLCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fc19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyA9IGZoLT5lbmM7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSAoY3RybHMtPmNvbnRyb2xzICsgaSk7CisJCWludCBlcnI7CisKKwkJc3dpdGNoIChjdHJsLT5pZCkgeworCQljYXNlIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUOgorCQkJaWYgKGN0cmwtPnNpemUgLSAxID4gT1NEX1RFWFRfTUFYKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtRVJBTkdFOworCQkJZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAJZXJyID0gY29weV9mcm9tX3VzZXIoc29sb19lbmMtPm9zZF90ZXh0LAorCQkJCQkJICAgICBjdHJsLT5zdHJpbmcsCisJCQkJCQkgICAgIE9TRF9URVhUX01BWCk7CisJCQkJc29sb19lbmMtPm9zZF90ZXh0W09TRF9URVhUX01BWF0gPSAnXDAnOworCQkJCWlmICghZXJyKQorCQkJCQllcnIgPSBzb2xvX29zZF9wcmludChzb2xvX2VuYyk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKworCQlpZiAoZXJyIDwgMCkgeworCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19nX2V4dF9jdHJscyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBzb2xvX2VuY19maCAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jID0gZmgtPmVuYzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IChjdHJscy0+Y29udHJvbHMgKyBpKTsKKwkJaW50IGVycjsKKworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCWNhc2UgVjRMMl9DSURfUkRTX1RYX1JBRElPX1RFWFQ6CisJCQlpZiAoY3RybC0+c2l6ZSA8IE9TRF9URVhUX01BWCkgeworCQkJCWN0cmwtPnNpemUgPSBPU0RfVEVYVF9NQVg7CisJCQkJZXJyID0gLUVOT1NQQzsKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0gY29weV90b191c2VyKGN0cmwtPnN0cmluZywKKwkJCQkJCSAgIHNvbG9fZW5jLT5vc2RfdGV4dCwKKwkJCQkJCSAgIE9TRF9URVhUX01BWCk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CisJCX0KKworCQlpZiAoZXJyIDwgMCkgeworCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgc29sb19lbmNfZm9wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQkJPSBzb2xvX2VuY19vcGVuLAorCS5yZWxlYXNlCQk9IHNvbG9fZW5jX3JlbGVhc2UsCisJLnJlYWQJCQk9IHNvbG9fZW5jX3JlYWQsCisJLnBvbGwJCQk9IHNvbG9fZW5jX3BvbGwsCisJLm1tYXAJCQk9IHNvbG9fZW5jX21tYXAsCisJLmlvY3RsCQkJPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNvbG9fZW5jX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCQk9IHNvbG9fZW5jX3F1ZXJ5Y2FwLAorCS52aWRpb2Nfc19zdGQJCQk9IHNvbG9fZW5jX3Nfc3RkLAorCS8qIElucHV0IGNhbGxiYWNrcyAqLworCS52aWRpb2NfZW51bV9pbnB1dAkJPSBzb2xvX2VuY19lbnVtX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJCT0gc29sb19lbmNfc2V0X2lucHV0LAorCS52aWRpb2NfZ19pbnB1dAkJCT0gc29sb19lbmNfZ2V0X2lucHV0LAorCS8qIFZpZGVvIGNhcHR1cmUgZm9ybWF0IGNhbGxiYWNrcyAqLworCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IHNvbG9fZW5jX2VudW1fZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBzb2xvX2VuY190cnlfZm10X2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAJCT0gc29sb19lbmNfc2V0X2ZtdF9jYXAsCisJLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IHNvbG9fZW5jX2dldF9mbXRfY2FwLAorCS8qIFN0cmVhbWluZyBJL08gKi8KKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHNvbG9fZW5jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZgkJPSBzb2xvX2VuY19xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYJCQk9IHNvbG9fZW5jX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCT0gc29sb19lbmNfZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbgkJPSBzb2xvX2VuY19zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZgkJPSBzb2xvX2VuY19zdHJlYW1vZmYsCisJLyogRnJhbWUgc2l6ZSBhbmQgaW50ZXJ2YWwgKi8KKwkudmlkaW9jX2VudW1fZnJhbWVzaXplcwkJPSBzb2xvX2VudW1fZnJhbWVzaXplcywKKwkudmlkaW9jX2VudW1fZnJhbWVpbnRlcnZhbHMJPSBzb2xvX2VudW1fZnJhbWVpbnRlcnZhbHMsCisJLyogVmlkZW8gY2FwdHVyZSBwYXJhbWV0ZXJzICovCisJLnZpZGlvY19zX3Bhcm0JCQk9IHNvbG9fc19wYXJtLAorCS52aWRpb2NfZ19wYXJtCQkJPSBzb2xvX2dfcGFybSwKKwkvKiBDb250cm9scyAqLworCS52aWRpb2NfcXVlcnljdHJsCQk9IHNvbG9fcXVlcnljdHJsLAorCS52aWRpb2NfcXVlcnltZW51CQk9IHNvbG9fcXVlcnltZW51LAorCS52aWRpb2NfZ19jdHJsCQkJPSBzb2xvX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybAkJCT0gc29sb19zX2N0cmwsCisJLnZpZGlvY19nX2V4dF9jdHJscwkJPSBzb2xvX2dfZXh0X2N0cmxzLAorCS52aWRpb2Nfc19leHRfY3RybHMJCT0gc29sb19zX2V4dF9jdHJscywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNvbG9fZW5jX3RlbXBsYXRlID0geworCS5uYW1lCQkJPSBTT0xPNjAxMF9OQU1FLAorCS5mb3BzCQkJPSAmc29sb19lbmNfZm9wcywKKwkuaW9jdGxfb3BzCQk9ICZzb2xvX2VuY19pb2N0bF9vcHMsCisJLm1pbm9yCQkJPSAtMSwKKwkucmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKworCS50dm5vcm1zCQk9IFY0TDJfU1REX05UU0NfTSB8IFY0TDJfU1REX1BBTF9NLAorCS5jdXJyZW50X25vcm0JCT0gVjRMMl9TVERfTlRTQ19NLAorfTsKKworc3RhdGljIHN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jX2FsbG9jKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1OCBjaCkKK3sKKwlzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYzsKKwlpbnQgcmV0OworCisJc29sb19lbmMgPSBremFsbG9jKHNpemVvZigqc29sb19lbmMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNvbG9fZW5jKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXNvbG9fZW5jLT52ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXNvbG9fZW5jLT52ZmQpIHsKKwkJa2ZyZWUoc29sb19lbmMpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlzb2xvX2VuYy0+c29sb19kZXYgPSBzb2xvX2RldjsKKwlzb2xvX2VuYy0+Y2ggPSBjaDsKKworCSpzb2xvX2VuYy0+dmZkID0gc29sb19lbmNfdGVtcGxhdGU7CisJc29sb19lbmMtPnZmZC0+cGFyZW50ID0gJnNvbG9fZGV2LT5wZGV2LT5kZXY7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHNvbG9fZW5jLT52ZmQsIFZGTF9UWVBFX0dSQUJCRVIsCisJCQkJICAgIHZpZGVvX25yKTsKKwlpZiAocmV0IDwgMCkgeworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzb2xvX2VuYy0+dmZkKTsKKwkJa2ZyZWUoc29sb19lbmMpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXZpZGVvX3NldF9kcnZkYXRhKHNvbG9fZW5jLT52ZmQsIHNvbG9fZW5jKTsKKworCXNucHJpbnRmKHNvbG9fZW5jLT52ZmQtPm5hbWUsIHNpemVvZihzb2xvX2VuYy0+dmZkLT5uYW1lKSwKKwkJICIlcy1lbmMgKCVpLyVpKSIsIFNPTE82MDEwX05BTUUsIHNvbG9fZGV2LT52ZmQtPm51bSwKKwkJIHNvbG9fZW5jLT52ZmQtPm51bSk7CisKKwlpZiAodmlkZW9fbnIgPj0gMCkKKwkJdmlkZW9fbnIrKzsKKworCXNwaW5fbG9ja19pbml0KCZzb2xvX2VuYy0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc29sb19lbmMtPnRocmVhZF93YWl0KTsKKwlhdG9taWNfc2V0KCZzb2xvX2VuYy0+cmVhZGVycywgMCk7CisKKwlzb2xvX2VuYy0+cXAgPSBTT0xPX0RFRkFVTFRfUVA7CisgICAgICAgIHNvbG9fZW5jLT5nb3AgPSBzb2xvX2Rldi0+ZnBzOworCXNvbG9fZW5jLT5pbnRlcnZhbCA9IDE7CisJc29sb19lbmMtPm1vZGUgPSBTT0xPX0VOQ19NT0RFX0NJRjsKKwlzb2xvX2VuYy0+bW90aW9uX3RocmVzaCA9IFNPTE9fREVGX01PVF9USFJFU0g7CisKKwlzcGluX2xvY2soJnNvbG9fZW5jLT5sb2NrKTsKKwlzb2xvX3VwZGF0ZV9tb2RlKHNvbG9fZW5jKTsKKwlzcGluX3VubG9jaygmc29sb19lbmMtPmxvY2spOworCisJcmV0dXJuIHNvbG9fZW5jOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2VuY19mcmVlKHN0cnVjdCBzb2xvX2VuY19kZXYgKnNvbG9fZW5jKQoreworCWlmIChzb2xvX2VuYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZShzb2xvX2VuYy0+dmZkKTsKKwlrZnJlZShzb2xvX2VuYyk7Cit9CisKK2ludCBzb2xvX2VuY192NGwyX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc29sb19kZXYtPm5yX2NoYW5zOyBpKyspIHsKKwkJc29sb19kZXYtPnY0bDJfZW5jW2ldID0gc29sb19lbmNfYWxsb2Moc29sb19kZXYsIGkpOworCQlpZiAoSVNfRVJSKHNvbG9fZGV2LT52NGwyX2VuY1tpXSkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSAhPSBzb2xvX2Rldi0+bnJfY2hhbnMpIHsKKwkJaW50IHJldCA9IFBUUl9FUlIoc29sb19kZXYtPnY0bDJfZW5jW2ldKTsKKwkJd2hpbGUgKGktLSkKKwkJCXNvbG9fZW5jX2ZyZWUoc29sb19kZXYtPnY0bDJfZW5jW2ldKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEMUBNQVgtRlBTICogNCAqLworCXNvbG9fZGV2LT5lbmNfYndfcmVtYWluID0gc29sb19kZXYtPmZwcyAqIDQgKiA0OworCisJZGV2X2luZm8oJnNvbG9fZGV2LT5wZGV2LT5kZXYsICJFbmNvZGVycyBhcyAvZGV2L3ZpZGVvJWQtJWRcbiIsCisJCSBzb2xvX2Rldi0+djRsMl9lbmNbMF0tPnZmZC0+bnVtLAorCQkgc29sb19kZXYtPnY0bDJfZW5jW3NvbG9fZGV2LT5ucl9jaGFucyAtIDFdLT52ZmQtPm51bSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzb2xvX2VuY192NGwyX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IGk7CisKKwlzb2xvNjAxMF9pcnFfb2ZmKHNvbG9fZGV2LCBTT0xPX0lSUV9NT1RJT04pOworCisJZm9yIChpID0gMDsgaSA8IHNvbG9fZGV2LT5ucl9jaGFuczsgaSsrKQorCQlzb2xvX2VuY19mcmVlKHNvbG9fZGV2LT52NGwyX2VuY1tpXSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAtdjRsMi5jIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXY0bDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM3Y2M2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL3NvbG82MDEwLXY0bDIuYwpAQCAtMCwwICsxLDg1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtY29udGlnLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC5oIgorI2luY2x1ZGUgInNvbG82MDEwLXR3MjguaCIKKworI2RlZmluZSBTT0xPX0hXX0JQTAkJMjA0OAorI2RlZmluZSBTT0xPX0RJU1BfUElYX0ZJRUxECVY0TDJfRklFTERfSU5URVJMQUNFRAorI2RlZmluZSBTT0xPX0RJU1BfQlVGX1NJWkUJKDY0ICogMTAyNCkgLy8gNjRrCisKKy8qIEltYWdlIHNpemUgaXMgdHdvIGZpZWxkcywgU09MT19IV19CUEwgaXMgb25lIGhvcml6b250YWwgbGluZSAqLworI2RlZmluZSBzb2xvX3ZsaW5lcyhfX3NvbG8pCShfX3NvbG8tPnZpZGVvX3ZzaXplICogMikKKyNkZWZpbmUgc29sb19pbWFnZV9zaXplKF9fc29sbykgKHNvbG9fYnl0ZXNwZXJsaW5lKF9fc29sbykgKiBcCisJCQkJIHNvbG9fdmxpbmVzKF9fc29sbykpCisjZGVmaW5lIHNvbG9fYnl0ZXNwZXJsaW5lKF9fc29sbykgKF9fc29sby0+dmlkZW9faHNpemUgKiAyKQorCisjZGVmaW5lIE1JTl9WSURfQlVGRkVSUwkJNAorCisvKiBTaW1wbGUgZmlsZSBoYW5kbGUgKi8KK3N0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgeworCXN0cnVjdCBzb2xvNjAxMF9kZXYJKnNvbG9fZGV2OworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZQl2aWRxOworCXN0cnVjdCB0YXNrX3N0cnVjdCAgICAgICprdGhyZWFkOworCXNwaW5sb2NrX3QJCXNsb2NrOworCWludAkJCW9sZF93cml0ZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXZpZHFfYWN0aXZlOworfTsKKwordW5zaWduZWQgdmlkZW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW9YIHN0YXJ0IG51bWJlciwgLTEgaXMgYXV0b2RldGVjdCAoZGVmYXVsdCkiKTsKKworc3RhdGljIHZvaWQgZXJhc2Vfb24oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVk9fRElTUF9FUkFTRSwgU09MT19WT19ESVNQX0VSQVNFX09OKTsKKwlzb2xvX2Rldi0+ZXJhc2luZyA9IDE7CisJc29sb19kZXYtPmZyYW1lX2JsYW5rID0gMDsKK30KKworc3RhdGljIGludCBlcmFzZV9vZmYoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaWYgKCFzb2xvX2Rldi0+ZXJhc2luZykKKwkJcmV0dXJuIDA7CisKKwkvKiBGaXJzdCB0aW1lIGFyb3VuZCwgYXNzZXJ0IGVyYXNlIG9mZiAqLworCWlmICghc29sb19kZXYtPmZyYW1lX2JsYW5rKQorCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WT19ESVNQX0VSQVNFLCAwKTsKKwkvKiBLZWVwIHRoZSBlcmFzaW5nIGZsYWcgb24gZm9yIDggZnJhbWVzIG1pbmltdW0gKi8KKwlpZiAoc29sb19kZXYtPmZyYW1lX2JsYW5rKysgPj0gOCkKKwkJc29sb19kZXYtPmVyYXNpbmcgPSAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgc29sb192aWRlb19pbl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fSVJRX1NUQVQsIFNPTE9fSVJRX1ZJREVPX0lOKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNvbG9fZGV2LT5kaXNwX3RocmVhZF93YWl0KTsKK30KKworc3RhdGljIHZvaWQgc29sb193aW5fc2V0dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoLAorCQkJICAgaW50IHN4LCBpbnQgc3ksIGludCBleCwgaW50IGV5LCBpbnQgc2NhbGUpCit7CisJaWYgKGNoID49IHNvbG9fZGV2LT5ucl9jaGFucykKKwkJcmV0dXJuOworCisJLyogSGVyZSwgd2UganVzdCBrZWVwIHdpbmRvdy9jaGFubmVsIHRoZSBzYW1lICovCisJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfV0lOX0NUUkwwKGNoKSwKKwkJICAgICAgIFNPTE9fVklfV0lOX0NIQU5ORUwoY2gpIHwKKwkJICAgICAgIFNPTE9fVklfV0lOX1NYKHN4KSB8CisJCSAgICAgICBTT0xPX1ZJX1dJTl9FWChleCkgfAorCQkgICAgICAgU09MT19WSV9XSU5fU0NBTEUoc2NhbGUpKTsKKworICAgICAgICBzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9XSU5fQ1RSTDEoY2gpLAorCQkgICAgICAgU09MT19WSV9XSU5fU1koc3kpIHwKKwkJICAgICAgIFNPTE9fVklfV0lOX0VZKGV5KSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb192NGwyX2NoX2V4dF80dXAoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkeCwgaW50IG9uKQoreworCXU4IGNoID0gaWR4ICogNDsKKworCWlmIChjaCA+PSBzb2xvX2Rldi0+bnJfY2hhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFvbikgeworCQl1OCBpOworCQlmb3IgKGkgPSBjaDsgaSA8IGNoICsgNDsgaSsrKQorCQkJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGksIHNvbG9fZGV2LT52aWRlb19oc2l6ZSwKKwkJCQkgICAgICAgc29sb192bGluZXMoc29sb19kZXYpLAorCQkJCSAgICAgICBzb2xvX2Rldi0+dmlkZW9faHNpemUsCisJCQkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwgMCk7CisJCXJldHVybiAwOworCX0KKworCS8qIFJvdyAxICovCisJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGNoLCAwLCAwLCBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyAyLAorCQkgICAgICAgc29sb192bGluZXMoc29sb19kZXYpIC8gMiwgMyk7CisJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGNoICsgMSwgc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMiwgMCwKKwkJICAgICAgIHNvbG9fZGV2LT52aWRlb19oc2l6ZSwgc29sb192bGluZXMoc29sb19kZXYpIC8gMiwgMyk7CisJLyogUm93IDIgKi8KKwlzb2xvX3dpbl9zZXR1cChzb2xvX2RldiwgY2ggKyAyLCAwLCBzb2xvX3ZsaW5lcyhzb2xvX2RldikgLyAyLAorCQkgICAgICAgc29sb19kZXYtPnZpZGVvX2hzaXplIC8gMiwgc29sb192bGluZXMoc29sb19kZXYpLCAzKTsKKwlzb2xvX3dpbl9zZXR1cChzb2xvX2RldiwgY2ggKyAzLCBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyAyLAorCQkgICAgICAgc29sb192bGluZXMoc29sb19kZXYpIC8gMiwgc29sb19kZXYtPnZpZGVvX2hzaXplLAorCQkgICAgICAgc29sb192bGluZXMoc29sb19kZXYpLCAzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9jaF9leHRfMTZ1cChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IG9uKQoreworCWludCBzeSwgeXNpemUsIGhzaXplLCBpOworCisJaWYgKCFvbikgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCBpLCBzb2xvX2Rldi0+dmlkZW9faHNpemUsCisJCQkJICAgICAgIHNvbG9fdmxpbmVzKHNvbG9fZGV2KSwKKwkJCQkgICAgICAgc29sb19kZXYtPnZpZGVvX2hzaXplLAorCQkJCSAgICAgICBzb2xvX3ZsaW5lcyhzb2xvX2RldiksIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwl5c2l6ZSA9IHNvbG9fdmxpbmVzKHNvbG9fZGV2KSAvIDQ7CisJaHNpemUgPSBzb2xvX2Rldi0+dmlkZW9faHNpemUgLyA0OworCisJZm9yIChzeSA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrLCBzeSArPSB5c2l6ZSkgeworCQlzb2xvX3dpbl9zZXR1cChzb2xvX2RldiwgaSAqIDQsIDAsIHN5LCBoc2l6ZSwKKwkJCSAgICAgICBzeSArIHlzaXplLCA1KTsKKwkJc29sb193aW5fc2V0dXAoc29sb19kZXYsIChpICogNCkgKyAxLCBoc2l6ZSwgc3ksCisJCQkgICAgICAgaHNpemUgKiAyLCBzeSArIHlzaXplLCA1KTsKKwkJc29sb193aW5fc2V0dXAoc29sb19kZXYsIChpICogNCkgKyAyLCBoc2l6ZSAqIDIsIHN5LAorCQkJICAgICAgIGhzaXplICogMywgc3kgKyB5c2l6ZSwgNSk7CisJCXNvbG9fd2luX3NldHVwKHNvbG9fZGV2LCAoaSAqIDQpICsgMywgaHNpemUgKiAzLCBzeSwKKwkJCSAgICAgICBzb2xvX2Rldi0+dmlkZW9faHNpemUsIHN5ICsgeXNpemUsIDUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9jaChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gsIGludCBvbikKK3sKKwl1OCBleHRfY2g7CisKKwlpZiAoY2ggPCBzb2xvX2Rldi0+bnJfY2hhbnMpIHsKKwkJc29sb193aW5fc2V0dXAoc29sb19kZXYsIGNoLCBvbiA/IDAgOiBzb2xvX2Rldi0+dmlkZW9faHNpemUsCisJCQkgICAgICAgb24gPyAwIDogc29sb192bGluZXMoc29sb19kZXYpLAorCQkJICAgICAgIHNvbG9fZGV2LT52aWRlb19oc2l6ZSwgc29sb192bGluZXMoc29sb19kZXYpLAorCQkJICAgICAgIG9uID8gMSA6IDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY2ggPj0gc29sb19kZXYtPm5yX2NoYW5zICsgc29sb19kZXYtPm5yX2V4dCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlleHRfY2ggPSBjaCAtIHNvbG9fZGV2LT5ucl9jaGFuczsKKworCS8qIDR1cCdzIGZpcnN0ICovCisJaWYgKGV4dF9jaCA8IDQpCisJCXJldHVybiBzb2xvX3Y0bDJfY2hfZXh0XzR1cChzb2xvX2RldiwgZXh0X2NoLCBvbik7CisKKwkvKiBSZW1haW5pbmcgY2FzZSBpcyAxNnVwIGZvciAxNi1wb3J0ICovCisJcmV0dXJuIHNvbG9fdjRsMl9jaF9leHRfMTZ1cChzb2xvX2Rldiwgb24pOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9zZXRfY2goc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGNoKQoreworCWlmIChjaCA+PSBzb2xvX2Rldi0+bnJfY2hhbnMgKyBzb2xvX2Rldi0+bnJfZXh0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyYXNlX29uKHNvbG9fZGV2KTsKKworCXNvbG9fdjRsMl9jaChzb2xvX2Rldiwgc29sb19kZXYtPmN1cl9kaXNwX2NoLCAwKTsKKwlzb2xvX3Y0bDJfY2goc29sb19kZXYsIGNoLCAxKTsKKworCXNvbG9fZGV2LT5jdXJfZGlzcF9jaCA9IGNoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fZmlsbGJ1ZihzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCwKKwkJCSBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKwlkbWFfYWRkcl90IHZidWY7CisJdW5zaWduZWQgaW50IGZkbWFfYWRkcjsKKwlpbnQgZnJhbWVfc2l6ZTsKKwlpbnQgZXJyb3IgPSAxOworCWludCBpOworCisJaWYgKCEodmJ1ZiA9IHZpZGVvYnVmX3RvX2RtYV9jb250aWcodmIpKSkKKwkJZ290byBmaW5pc2hfYnVmOworCisJaWYgKGVyYXNlX29mZihzb2xvX2RldikpIHsKKwkJdm9pZCAqcCA9IHZpZGVvYnVmX3F1ZXVlX3RvX3ZhZGRyKCZmaC0+dmlkcSwgdmIpOworCQlpbnQgaW1hZ2Vfc2l6ZSA9IHNvbG9faW1hZ2Vfc2l6ZShzb2xvX2Rldik7CisJCWZvciAoaSA9IDA7IGkgPCBpbWFnZV9zaXplOyBpICs9IDIpIHsKKwkJCSgodTggKilwKVtpXSA9IDB4ODA7CisJCQkoKHU4ICopcClbaSArIDFdID0gMHgwMDsKKwkJfQorCQllcnJvciA9IDA7CisJCWdvdG8gZmluaXNoX2J1ZjsKKwl9CisKKwlmcmFtZV9zaXplID0gU09MT19IV19CUEwgKiBzb2xvX3ZsaW5lcyhzb2xvX2Rldik7CisJZmRtYV9hZGRyID0gU09MT19ESVNQX0VYVF9BRERSKHNvbG9fZGV2KSArIChmaC0+b2xkX3dyaXRlICogZnJhbWVfc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWVfc2l6ZSAvIFNPTE9fRElTUF9CVUZfU0laRTsgaSsrKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgKFNPTE9fRElTUF9CVUZfU0laRSAvIFNPTE9fSFdfQlBMKTsgaisrKSB7CisJCQlpZiAoc29sb19wMm1fZG1hX3Qoc29sb19kZXYsIFNPTE9fUDJNX0RNQV9JRF9ESVNQLCAwLAorCQkJCQkgICB2YnVmLCBmZG1hX2FkZHIgKyAoaiAqIFNPTE9fSFdfQlBMKSwKKwkJCQkJICAgc29sb19ieXRlc3BlcmxpbmUoc29sb19kZXYpKSkKKwkJCQlnb3RvIGZpbmlzaF9idWY7CisJCQl2YnVmICs9IHNvbG9fYnl0ZXNwZXJsaW5lKHNvbG9fZGV2KTsKKwkJfQorCQlmZG1hX2FkZHIgKz0gU09MT19ESVNQX0JVRl9TSVpFOworCX0KKwllcnJvciA9IDA7CisKK2ZpbmlzaF9idWY6CisJaWYgKGVycm9yKSB7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCX0gZWxzZSB7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7CisJCXZiLT5maWVsZF9jb3VudCsrOworCQlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisJfQorCisJd2FrZV91cCgmdmItPmRvbmUpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzb2xvX3RocmVhZF90cnkoc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmgpCit7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CisJdW5zaWduZWQgaW50IGN1cl93cml0ZTsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrKCZmaC0+c2xvY2spOworCisJCWlmIChsaXN0X2VtcHR5KCZmaC0+dmlkcV9hY3RpdmUpKQorCQkJYnJlYWs7CisKKwkJdmIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZmaC0+dmlkcV9hY3RpdmUsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIsCisJCQkJICAgICAgcXVldWUpOworCisJCWlmICghd2FpdHF1ZXVlX2FjdGl2ZSgmdmItPmRvbmUpKQorCQkJYnJlYWs7CisKKwkJY3VyX3dyaXRlID0gU09MT19WSV9TVEFUVVMwX1BBR0Uoc29sb19yZWdfcmVhZChmaC0+c29sb19kZXYsCisJCQkJCQkJU09MT19WSV9TVEFUVVMwKSk7CisJCWlmIChjdXJfd3JpdGUgPT0gZmgtPm9sZF93cml0ZSkKKwkJCWJyZWFrOworCisJCWZoLT5vbGRfd3JpdGUgPSBjdXJfd3JpdGU7CisJCWxpc3RfZGVsKCZ2Yi0+cXVldWUpOworCisJCXNwaW5fdW5sb2NrKCZmaC0+c2xvY2spOworCisJCXNvbG9fZmlsbGJ1ZihmaCwgdmIpOworCX0KKworCWFzc2VydF9zcGluX2xvY2tlZCgmZmgtPnNsb2NrKTsKKwlzcGluX3VubG9jaygmZmgtPnNsb2NrKTsKK30KKworc3RhdGljIGludCBzb2xvX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gZGF0YTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKworCXNldF9mcmVlemFibGUoKTsKKwlhZGRfd2FpdF9xdWV1ZSgmc29sb19kZXYtPmRpc3BfdGhyZWFkX3dhaXQsICZ3YWl0KTsKKworCWZvciAoOzspIHsKKwkJbG9uZyB0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaKTsKKwkJaWYgKHRpbWVvdXQgPT0gLUVSRVNUQVJUU1lTIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWJyZWFrOworCQlzb2xvX3RocmVhZF90cnkoZmgpOworCQl0cnlfdG9fZnJlZXplKCk7CisJfQorCisJcmVtb3ZlX3dhaXRfcXVldWUoJnNvbG9fZGV2LT5kaXNwX3RocmVhZF93YWl0LCAmd2FpdCk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zdGFydF90aHJlYWQoc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmgpCit7CisJZmgtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bihzb2xvX3RocmVhZCwgZmgsIFNPTE82MDEwX05BTUUgIl9kaXNwIik7CisKKwlpZiAoSVNfRVJSKGZoLT5rdGhyZWFkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZmgtPmt0aHJlYWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNvbG9fc3RvcF90aHJlYWQoc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmgpCit7CisJaWYgKGZoLT5rdGhyZWFkKSB7CisJCWt0aHJlYWRfc3RvcChmaC0+a3RocmVhZCk7CisJCWZoLT5rdGhyZWFkID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc29sb19idWZfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50ICpjb3VudCwKKwkJCSAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiAgPSBmaC0+c29sb19kZXY7CisKKyAgICAgICAgKnNpemUgPSBzb2xvX2ltYWdlX3NpemUoc29sb19kZXYpOworCisgICAgICAgIGlmICgqY291bnQgPCBNSU5fVklEX0JVRkZFUlMpCisJCSpjb3VudCA9IE1JTl9WSURfQlVGRkVSUzsKKworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCisJdmItPnNpemUgPSBzb2xvX2ltYWdlX3NpemUoc29sb19kZXYpOworCWlmICh2Yi0+YmFkZHIgIT0gMCAmJiB2Yi0+YnNpemUgPCB2Yi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBYWFg6IFRoZXNlIHByb3BlcnRpZXMgb25seSBjaGFuZ2Ugd2hlbiBxdWV1ZSBpcyBpZGxlICovCisJdmItPndpZHRoICA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZTsKKwl2Yi0+aGVpZ2h0ID0gc29sb192bGluZXMoc29sb19kZXYpOworCXZiLT5ieXRlc3BlcmxpbmUgPSBzb2xvX2J5dGVzcGVybGluZShzb2xvX2Rldik7CisJdmItPmZpZWxkICA9IGZpZWxkOworCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCWludCByYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgdmIsIE5VTEwpOworCQlpZiAocmMgPCAwKSB7CisJCQl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsIHZiKTsKKwkJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJdmItPnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29sb19idWZfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwKKwkJCSAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZmaC0+dmlkcV9hY3RpdmUpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc29sb19kZXYtPmRpc3BfdGhyZWFkX3dhaXQpOworfQorCitzdGF0aWMgdm9pZCBzb2xvX2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9idWZfcXVldWVfb3BzIHNvbG9fdmlkZW9fcW9wcyA9IHsKKwkuYnVmX3NldHVwCT0gc29sb19idWZfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlCT0gc29sb19idWZfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlCT0gc29sb19idWZfcXVldWUsCisJLmJ1Zl9yZWxlYXNlCT0gc29sb19idWZfcmVsZWFzZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc29sb192NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisgICAgICAgIHJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmZmgtPnZpZHEsIHdhaXQpOworfQorCitzdGF0aWMgaW50IHNvbG9fdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZmgtPnZpZHEsIHZtYSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb192NGwyX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoOworCWludCByZXQ7CisKKwlpZiAoKGZoID0ga3phbGxvYyhzaXplb2YoKmZoKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmZoLT5zbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmZoLT52aWRxX2FjdGl2ZSk7CisJZmgtPnNvbG9fZGV2ID0gc29sb19kZXY7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisKKwlpZiAoKHJldCA9IHNvbG9fc3RhcnRfdGhyZWFkKGZoKSkpIHsKKwkJa2ZyZWUoZmgpOworCQlyZXR1cm4gcmV0OworCX0KKworCXZpZGVvYnVmX3F1ZXVlX2RtYV9jb250aWdfaW5pdCgmZmgtPnZpZHEsICZzb2xvX3ZpZGVvX3FvcHMsCisJCQkJICAgICZzb2xvX2Rldi0+cGRldi0+ZGV2LCAmZmgtPnNsb2NrLAorCQkJCSAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJICAgIFNPTE9fRElTUF9QSVhfRklFTEQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwgZmgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNvbG9fdjRsMl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmaC0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsIDAsCisJCQkJICAgIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworc3RhdGljIGludCBzb2xvX3Y0bDJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXZpZGVvYnVmX3N0b3AoJmZoLT52aWRxKTsKKwl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52aWRxKTsKKwlzb2xvX3N0b3BfdGhyZWFkKGZoKTsKKwlrZnJlZShmaCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAgKmZoICA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisKKwlzdHJjcHkoY2FwLT5kcml2ZXIsIFNPTE82MDEwX05BTUUpOworCXN0cmNweShjYXAtPmNhcmQsICJTb2Z0bG9naWMgNjAxMCIpOworCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwgIlBDSSAlcyIsCisJCSBwY2lfbmFtZShzb2xvX2Rldi0+cGRldikpOworCWNhcC0+dmVyc2lvbiA9IFNPTE82MDEwX1ZFUl9OVU07CisJY2FwLT5jYXBhYmlsaXRpZXMgPSAgICAgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CisJCQkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJCQlWNEwyX0NBUF9TVFJFQU1JTkc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbnVtX2V4dF9pbnB1dChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmRpc3BuYW1lc18xW10gPSB7ICI0VVAiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKmRpc3BuYW1lc18yW10gPSB7ICI0VVAtMSIsICI0VVAtMiIgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqZGlzcG5hbWVzXzVbXSA9IHsKKwkJIjRVUC0xIiwgIjRVUC0yIiwgIjRVUC0zIiwgIjRVUC00IiwgIjE2VVAiCisJfTsKKwljb25zdCBjaGFyICoqZGlzcG5hbWVzOworCisJaWYgKGlucHV0LT5pbmRleCA+PSAoc29sb19kZXYtPm5yX2NoYW5zICsgc29sb19kZXYtPm5yX2V4dCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNvbG9fZGV2LT5ucl9leHQgPT0gNSkKKwkJZGlzcG5hbWVzID0gZGlzcG5hbWVzXzU7CisJZWxzZSBpZiAoc29sb19kZXYtPm5yX2V4dCA9PSAyKQorCQlkaXNwbmFtZXMgPSBkaXNwbmFtZXNfMjsKKwllbHNlCisJCWRpc3BuYW1lcyA9IGRpc3BuYW1lc18xOworCisJc25wcmludGYoaW5wdXQtPm5hbWUsIHNpemVvZihpbnB1dC0+bmFtZSksICJNdWx0aSAlcyIsCisJCSBkaXNwbmFtZXNbaW5wdXQtPmluZGV4IC0gc29sb19kZXYtPm5yX2NoYW5zXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggID0gcHJpdjsKKwlzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiA9IGZoLT5zb2xvX2RldjsKKworCWlmIChpbnB1dC0+aW5kZXggPj0gc29sb19kZXYtPm5yX2NoYW5zKSB7CisJCWludCByZXQgPSBzb2xvX2VudW1fZXh0X2lucHV0KHNvbG9fZGV2LCBpbnB1dCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlzbnByaW50ZihpbnB1dC0+bmFtZSwgc2l6ZW9mKGlucHV0LT5uYW1lKSwgIkNhbWVyYSAlZCIsCisJCQkgaW5wdXQtPmluZGV4ICsgMSk7CisKKwkJLyogV2UgY2FuIG9ubHkgY2hlY2sgdGhpcyBmb3Igbm9ybWFsIGlucHV0cyAqLworCQlpZiAoIXR3MjhfZ2V0X3ZpZGVvX3N0YXR1cyhzb2xvX2RldiwgaW5wdXQtPmluZGV4KSkKKwkJCWlucHV0LT5zdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwl9CisKKwlpbnB1dC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CisKKwlpZiAoc29sb19kZXYtPnZpZGVvX3R5cGUgPT0gU09MT19WT19GTVRfVFlQRV9OVFNDKQorCQlpbnB1dC0+c3RkID0gVjRMMl9TVERfTlRTQ19NOworCWVsc2UKKwkJaW5wdXQtPnN0ZCA9IFY0TDJfU1REX1BBTF9NOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zZXRfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlyZXR1cm4gc29sb192NGwyX3NldF9jaChmaC0+c29sb19kZXYsIGluZGV4KTsKK30KKworc3RhdGljIGludCBzb2xvX2dldF9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwkqaW5kZXggPSBmaC0+c29sb19kZXYtPmN1cl9kaXNwX2NoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc29sb19lbnVtX2ZtdF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKGYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgIlVZVVYgNDoyOjIgUGFja2VkIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3RyeV9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IGltYWdlX3NpemUgPSBzb2xvX2ltYWdlX3NpemUoc29sb19kZXYpOworCisJLyogQ2hlY2sgc3VwcG9ydGVkIHNpemVzICovCisJaWYgKHBpeC0+d2lkdGggIT0gc29sb19kZXYtPnZpZGVvX2hzaXplKQorCQlwaXgtPndpZHRoID0gc29sb19kZXYtPnZpZGVvX2hzaXplOworCWlmIChwaXgtPmhlaWdodCAhPSBzb2xvX3ZsaW5lcyhzb2xvX2RldikpCisJCXBpeC0+aGVpZ2h0ID0gc29sb192bGluZXMoc29sb19kZXYpOworCWlmIChwaXgtPnNpemVpbWFnZSAhPSBpbWFnZV9zaXplKQorCQlwaXgtPnNpemVpbWFnZSA9IGltYWdlX3NpemU7CisKKwkvKiBDaGVjayBmb3JtYXRzICovCisJaWYgKHBpeC0+ZmllbGQgPT0gVjRMMl9GSUVMRF9BTlkpCisJCXBpeC0+ZmllbGQgPSBTT0xPX0RJU1BfUElYX0ZJRUxEOworCisJaWYgKHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1VZVlkgfHwKKwkgICAgcGl4LT5maWVsZCAgICAgICAhPSBTT0xPX0RJU1BfUElYX0ZJRUxEIHx8CisJICAgIHBpeC0+Y29sb3JzcGFjZSAgIT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3NldF9mbXRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZpZHEpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRm9yIHJpZ2h0IG5vdywgaWYgaXQgZG9lc24ndCBtYXRjaCBvdXIgcnVubmluZyBjb25maWcsCisJICogdGhlbiBmYWlsICovCisJcmV0dXJuIHNvbG9fdHJ5X2ZtdF9jYXAoZmlsZSwgcHJpdiwgZik7Cit9CisKK3N0YXRpYyBpbnQgc29sb19nZXRfZm10X2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCXN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2ID0gZmgtPnNvbG9fZGV2OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCisJcGl4LT53aWR0aCA9IHNvbG9fZGV2LT52aWRlb19oc2l6ZTsKKwlwaXgtPmhlaWdodCA9IHNvbG9fdmxpbmVzKHNvbG9fZGV2KTsKKwlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJcGl4LT5maWVsZCA9IFNPTE9fRElTUF9QSVhfRklFTEQ7CisJcGl4LT5zaXplaW1hZ2UgPSBzb2xvX2ltYWdlX3NpemUoc29sb19kZXYpOworCXBpeC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJcGl4LT5ieXRlc3BlcmxpbmUgPSBzb2xvX2J5dGVzcGVybGluZShzb2xvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2xvX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIAorCQkJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJlcSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZpZHEsIHJlcSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvbG9fZmlsZWhhbmRsZSAqZmggPSBwcml2OworCisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmlkcSwgYnVmKTsKK30KKworc3RhdGljIGludCBzb2xvX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmlkcSwgYnVmKTsKK30KKworc3RhdGljIGludCBzb2xvX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52aWRxLCBidWYsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKK30KKworc3RhdGljIGludCBzb2xvX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisKKwlpZiAoaSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmlkcSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQoreworCXN0cnVjdCBzb2xvX2ZpbGVoYW5kbGUgKmZoID0gcHJpdjsKKworCWlmIChpICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmlkcSk7Cit9CisKK3N0YXRpYyBpbnQgc29sb19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKmkpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgc29sb19tb3Rpb25fY3RybHNbXSA9IHsKKwlWNEwyX0NJRF9NT1RJT05fVFJBQ0UsCisJMAorfTsKKworc3RhdGljIGNvbnN0IHUzMiAqc29sb19jdHJsX2NsYXNzZXNbXSA9IHsKKwlzb2xvX21vdGlvbl9jdHJscywKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNvbG9fZGlzcF9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlxYy0+aWQgPSB2NGwyX2N0cmxfbmV4dChzb2xvX2N0cmxfY2xhc3NlcywgcWMtPmlkKTsKKwlpZiAoIXFjLT5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHFjLT5pZCkgeworI2lmZGVmIFBSSVZBVEVfQ0lEUworCWNhc2UgVjRMMl9DSURfTU9USU9OX1RSQUNFOgorCQlxYy0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CisJCXFjLT5taW5pbXVtID0gMDsKKwkJcWMtPm1heGltdW0gPSBxYy0+c3RlcCA9IDE7CisJCXFjLT5kZWZhdWx0X3ZhbHVlID0gMDsKKwkJc3RybGNweShxYy0+bmFtZSwgIk1vdGlvbiBEZXRlY3Rpb24gVHJhY2UiLCBzaXplb2YocWMtPm5hbWUpKTsKKwkJcmV0dXJuIDA7CisjZWxzZQorCWNhc2UgVjRMMl9DSURfTU9USU9OX1RSQUNFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworI2VuZGlmCisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNvbG9fZGlzcF9nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVFJBQ0U6CisJCWN0cmwtPnZhbHVlID0gc29sb19yZWdfcmVhZChzb2xvX2RldiwgU09MT19WSV9NT1RJT05fQkFSKQorCQkJPyAxIDogMDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHNvbG9fZGlzcF9zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc29sb19maWxlaGFuZGxlICpmaCA9IHByaXY7CisJc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYgPSBmaC0+c29sb19kZXY7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NT1RJT05fVFJBQ0U6CisJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJc29sb19yZWdfd3JpdGUoc29sb19kZXYsIFNPTE9fVklfTU9USU9OX0JPUkRFUiwKKwkJCQkJU09MT19WSV9NT1RJT05fWV9BREQgfAorCQkJCQlTT0xPX1ZJX01PVElPTl9ZX1ZBTFVFKDB4MjApIHwKKwkJCQkJU09MT19WSV9NT1RJT05fQ0JfVkFMVUUoMHgxMCkgfAorCQkJCQlTT0xPX1ZJX01PVElPTl9DUl9WQUxVRSgweDEwKSk7CisJCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RJT05fQkFSLAorCQkJCQlTT0xPX1ZJX01PVElPTl9DUl9BREQgfAorCQkJCQlTT0xPX1ZJX01PVElPTl9ZX1ZBTFVFKDB4MTApIHwKKwkJCQkJU09MT19WSV9NT1RJT05fQ0JfVkFMVUUoMHg4MCkgfAorCQkJCQlTT0xPX1ZJX01PVElPTl9DUl9WQUxVRSgweDEwKSk7CisJCX0gZWxzZSB7CisJCQlzb2xvX3JlZ193cml0ZShzb2xvX2RldiwgU09MT19WSV9NT1RJT05fQk9SREVSLCAwKTsKKwkJCXNvbG9fcmVnX3dyaXRlKHNvbG9fZGV2LCBTT0xPX1ZJX01PVElPTl9CQVIsIDApOworCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzb2xvX3Y0bDJfZm9wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQkJPSBzb2xvX3Y0bDJfb3BlbiwKKwkucmVsZWFzZQkJPSBzb2xvX3Y0bDJfcmVsZWFzZSwKKwkucmVhZAkJCT0gc29sb192NGwyX3JlYWQsCisJLnBvbGwJCQk9IHNvbG9fdjRsMl9wb2xsLAorCS5tbWFwCQkJPSBzb2xvX3Y0bDJfbW1hcCwKKwkuaW9jdGwJCQk9IHZpZGVvX2lvY3RsMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc29sb192NGwyX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwCQk9IHNvbG9fcXVlcnljYXAsCisJLnZpZGlvY19zX3N0ZAkJCT0gc29sb19zX3N0ZCwKKwkvKiBJbnB1dCBjYWxsYmFja3MgKi8KKwkudmlkaW9jX2VudW1faW5wdXQJCT0gc29sb19lbnVtX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dAkJCT0gc29sb19zZXRfaW5wdXQsCisJLnZpZGlvY19nX2lucHV0CQkJPSBzb2xvX2dldF9pbnB1dCwKKwkvKiBWaWRlbyBjYXB0dXJlIGZvcm1hdCBjYWxsYmFja3MgKi8KKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBzb2xvX2VudW1fZm10X2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBzb2xvX3RyeV9mbXRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBzb2xvX3NldF9mbXRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBzb2xvX2dldF9mbXRfY2FwLAorCS8qIFN0cmVhbWluZyBJL08gKi8KKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHNvbG9fcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCQk9IHNvbG9fcXVlcnlidWYsCisJLnZpZGlvY19xYnVmCQkJPSBzb2xvX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCT0gc29sb19kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uCQk9IHNvbG9fc3RyZWFtb24sCisgICAgICAgIC52aWRpb2Nfc3RyZWFtb2ZmCQk9IHNvbG9fc3RyZWFtb2ZmLAorCS8qIENvbnRyb2xzICovCisJLnZpZGlvY19xdWVyeWN0cmwJCT0gc29sb19kaXNwX3F1ZXJ5Y3RybCwKKyAgICAgICAgLnZpZGlvY19nX2N0cmwJCQk9IHNvbG9fZGlzcF9nX2N0cmwsCisgICAgICAgIC52aWRpb2Nfc19jdHJsCQkJPSBzb2xvX2Rpc3Bfc19jdHJsLAorfTsKKworc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2Ugc29sb192NGwyX3RlbXBsYXRlID0geworCS5uYW1lCQkJPSBTT0xPNjAxMF9OQU1FLAorCS5mb3BzCQkJPSAmc29sb192NGwyX2ZvcHMsCisJLmlvY3RsX29wcwkJPSAmc29sb192NGwyX2lvY3RsX29wcywKKwkubWlub3IJCQk9IC0xLAorCS5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlLAorCisJLnR2bm9ybXMJCT0gVjRMMl9TVERfTlRTQ19NIHwgVjRMMl9TVERfUEFMX00sCisJLmN1cnJlbnRfbm9ybQkJPSBWNEwyX1NURF9OVFNDX00sCit9OworCitpbnQgc29sb192NGwyX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNvbG9fZGV2LT5kaXNwX3RocmVhZF93YWl0KTsKKworCXNvbG9fZGV2LT52ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIXNvbG9fZGV2LT52ZmQpCisJCXJldHVybiAtRU5PTUVNOworCisJKnNvbG9fZGV2LT52ZmQgPSBzb2xvX3Y0bDJfdGVtcGxhdGU7CisJc29sb19kZXYtPnZmZC0+cGFyZW50ID0gJnNvbG9fZGV2LT5wZGV2LT5kZXY7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uoc29sb19kZXYtPnZmZCwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOworCWlmIChyZXQgPCAwKSB7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHNvbG9fZGV2LT52ZmQpOworCQlzb2xvX2Rldi0+dmZkID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2aWRlb19zZXRfZHJ2ZGF0YShzb2xvX2Rldi0+dmZkLCBzb2xvX2Rldik7CisKKwlzbnByaW50Zihzb2xvX2Rldi0+dmZkLT5uYW1lLCBzaXplb2Yoc29sb19kZXYtPnZmZC0+bmFtZSksICIlcyAoJWkpIiwKKwkJIFNPTE82MDEwX05BTUUsIHNvbG9fZGV2LT52ZmQtPm51bSk7CisKKwlpZiAodmlkZW9fbnIgPj0gMCkKKwkJdmlkZW9fbnIrKzsKKworCWRldl9pbmZvKCZzb2xvX2Rldi0+cGRldi0+ZGV2LCAiRGlzcGxheSBhcyAvZGV2L3ZpZGVvJWQgd2l0aCAiCisJCSAiJWQgaW5wdXRzICglZCBleHRlbmRlZClcbiIsIHNvbG9fZGV2LT52ZmQtPm51bSwKKwkJIHNvbG9fZGV2LT5ucl9jaGFucywgc29sb19kZXYtPm5yX2V4dCk7CisKKwkvKiBDeWNsZSBhbGwgdGhlIGNoYW5uZWxzIGFuZCBjbGVhciAqLworCWZvciAoaSA9IDA7IGkgPCBzb2xvX2Rldi0+bnJfY2hhbnM7IGkrKykgeworCQlzb2xvX3Y0bDJfc2V0X2NoKHNvbG9fZGV2LCBpKTsKKwkJd2hpbGUgKGVyYXNlX29mZihzb2xvX2RldikpCisJCQk7Ly8gRG8gbm90aGluZworCX0KKworCS8qIFNldCB0aGUgZGVmYXVsdCBkaXNwbGF5IGNoYW5uZWwgKi8KKwlzb2xvX3Y0bDJfc2V0X2NoKHNvbG9fZGV2LCAwKTsKKwl3aGlsZSAoZXJhc2Vfb2ZmKHNvbG9fZGV2KSkKKwkJOy8vIERvIG5vdGhpbmcKKworCXNvbG82MDEwX2lycV9vbihzb2xvX2RldiwgU09MT19JUlFfVklERU9fSU4pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc29sb192NGwyX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpCit7CisJc29sbzYwMTBfaXJxX29mZihzb2xvX2RldiwgU09MT19JUlFfVklERU9fSU4pOworCWlmIChzb2xvX2Rldi0+dmZkKSB7CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHNvbG9fZGV2LT52ZmQpOworCQlzb2xvX2Rldi0+dmZkID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9zb2xvNngxMC9zb2xvNjAxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYThlM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvc29sbzYwMTAuaApAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCbHVlY2hlcnJ5LCBMTEMgd3d3LmJsdWVjaGVycnlkdnIuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQmVuIENvbGxpbnMgPGJjb2xsaW5zQGJsdWVjaGVycnkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPTE82MDEwX0gKKyNkZWZpbmUgX19TT0xPNjAxMF9ICisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1jb3JlLmg+CisKKyNpbmNsdWRlICJzb2xvNjAxMC1yZWdpc3RlcnMuaCIKKworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1NPRlRMT0dJQworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NPRlRMT0dJQwkJMHg5NDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU09MTzYwMTAJCTB4NjAxMAorI2VuZGlmCisKKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9CTFVFQ0hFUlJZCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQkxVRUNIRVJSWQkweDFCQjMKKy8qIE5ldWdlbnQgU29mdGxvZ2ljIDYwMTAgYmFzZWQgY2FyZHMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVVTT0xPXzQJCTB4NDMwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVVNPTE9fOQkJMHg0MzA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVVU09MT18xNgkweDQzMTAKKy8qIENvbW1lbGwgU29mdGxvZ2ljIDYwMTAgYmFzZWQgY2FyZHMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01NU09MT180CTB4NEUwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTU1TT0xPXzkJMHg0RTA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NTVNPTE9fMTYJMHg0RTEwCisjZW5kaWYgLyogQmx1ZWNoZXJyeSAqLworCisjZGVmaW5lIFNPTE82MDEwX05BTUUJCQkic29sbzYwMTAiCisKKyNkZWZpbmUgU09MT19NQVhfQ0hBTk5FTFMJCTE2CisKKy8qIE1ha2Ugc3VyZSB0aGVzZSB0d28gbWF0Y2ggKi8KKyNkZWZpbmUgU09MTzYwMTBfVkVSU0lPTgkJIjIuMC4wIgorI2RlZmluZSBTT0xPNjAxMF9WRVJfTUFKT1IJCTIKKyNkZWZpbmUgU09MTzYwMTBfVkVSX01JTk9SCQkwCisjZGVmaW5lIFNPTE82MDEwX1ZFUl9TVUIJCTAKKyNkZWZpbmUgU09MTzYwMTBfVkVSX05VTSBcCisgICAgS0VSTkVMX1ZFUlNJT04oU09MTzYwMTBfVkVSX01BSk9SLCBTT0xPNjAxMF9WRVJfTUlOT1IsIFNPTE82MDEwX1ZFUl9TVUIpCisKKy8qCisgKiBUaGUgU09MTzYwMTAgYWN0dWFsbHkgaGFzIDggaTJjIGNoYW5uZWxzLCBidXQgd2Ugb25seSB1c2UgMi4KKyAqIDAgLSBUZWNod2VsbCBjaGlwKHMpCisgKiAxIC0gU0FBNzEyOAorICovCisjZGVmaW5lIFNPTE9fSTJDX0FEQVBURVJTCQkyCisjZGVmaW5lIFNPTE9fSTJDX1RXCQkJMAorI2RlZmluZSBTT0xPX0kyQ19TQUEJCQkxCisKKy8qIERNQSBFbmdpbmUgc2V0dXAgKi8KKyNkZWZpbmUgU09MT19OUl9QMk0JCQk0CisjZGVmaW5lIFNPTE9fTlJfUDJNX0RFU0MJCTI1NgorI2RlZmluZSBTT0xPX1AyTV9ERVNDX1NJWkUJCShTT0xPX05SX1AyTV9ERVNDICogMTYpCisvKiBNUEVHIGFuZCBKUEVHIHNoYXJlIHRoZSBzYW1lIGludGVycnVwdCBhbmQgbG9ja3Mgc28gdGhleSBtdXN0IGJlIHRvZ2V0aGVyCisgKiBpbiB0aGUgc2FtZSBkbWEgY2hhbm5lbC4gKi8KKyNkZWZpbmUgU09MT19QMk1fRE1BX0lEX01QNEUJCTAKKyNkZWZpbmUgU09MT19QMk1fRE1BX0lEX0pQRUcJCTAKKyNkZWZpbmUgU09MT19QMk1fRE1BX0lEX01QNEQJCTEKKyNkZWZpbmUgU09MT19QMk1fRE1BX0lEX0c3MjNECQkxCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9ESVNQCQkyCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9PU0cJCTIKKyNkZWZpbmUgU09MT19QMk1fRE1BX0lEX0c3MjNFCQkzCisjZGVmaW5lIFNPTE9fUDJNX0RNQV9JRF9WSU4JCTMKKworLyogRW5jb2RlciBzdGFuZGFyZCBtb2RlcyAqLworI2RlZmluZSBTT0xPX0VOQ19NT0RFX0NJRgkJMgorI2RlZmluZSBTT0xPX0VOQ19NT0RFX0hEMQkJMQorI2RlZmluZSBTT0xPX0VOQ19NT0RFX0QxCQk5CisKKyNkZWZpbmUgU09MT19ERUZBVUxUX0dPUAkJMzAKKyNkZWZpbmUgU09MT19ERUZBVUxUX1FQCQkJMworCisvKiBUaGVyZSBpcyA4TUIgbWVtb3J5IGF2YWlsYWJsZSBmb3Igc29sbyB0byBidWZmZXIgTVBFRzQgZnJhbWVzLgorICogVGhpcyBnaXZlcyB1cyA1MTIgKiAxNmtieXRlIHF1ZXVlcy4gKi8KKyNkZWZpbmUgU09MT19OUl9SSU5HX0JVRlMJCTUxMgorCisjZGVmaW5lIFNPTE9fQ0xPQ0tfTUhaCQkJMTA4CisKKyNpZm5kZWYgVjRMMl9CVUZfRkxBR19NT1RJT05fT04KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19NT1RJT05fT04JCTB4MDQwMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX01PVElPTl9ERVRFQ1RFRAkweDA4MDAKKyNlbmRpZgorI2lmbmRlZiBWNEwyX0NJRF9NT1RJT05fRU5BQkxFCisjZGVmaW5lIFBSSVZBVEVfQ0lEUworI2RlZmluZSBWNEwyX0NJRF9NT1RJT05fRU5BQkxFCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFKzApCisjZGVmaW5lIFY0TDJfQ0lEX01PVElPTl9USFJFU0hPTEQJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9NT1RJT05fVFJBQ0UJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UrMikKKyNlbmRpZgorCitlbnVtIFNPTE9fSTJDX1NUQVRFIHsKKwlJSUNfU1RBVEVfSURMRSwKKwlJSUNfU1RBVEVfU1RBUlQsCisJSUlDX1NUQVRFX1JFQUQsCisJSUlDX1NUQVRFX1dSSVRFLAorCUlJQ19TVEFURV9TVE9QCit9OworCitzdHJ1Y3Qgc29sb19wMm1fZGV2IHsKKwlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOworCWludAkJCWVycm9yOworCXU4CQkJZGVzY1tTT0xPX1AyTV9ERVNDX1NJWkVdOworfTsKKworI2RlZmluZSBPU0RfVEVYVF9NQVgJCTMwCisKK2VudW0gc29sb19lbmNfdHlwZXMgeworCVNPTE9fRU5DX1RZUEVfU1RELAorCVNPTE9fRU5DX1RZUEVfRVhULAorfTsKKworc3RydWN0IHNvbG9fZW5jX2RldiB7CisJc3RydWN0IHNvbG82MDEwX2Rldgkqc29sb19kZXY7CisJLyogVjRMMiBJdGVtcyAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZmZDsKKwkvKiBHZW5lcmFsIGFjY291bnRpbmcgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd2FpdDsKKwlzcGlubG9ja190CQlsb2NrOworCWF0b21pY190CQlyZWFkZXJzOworCXU4CQkJY2g7CisJdTgJCQltb2RlLCBnb3AsIHFwLCBpbnRlcmxhY2VkLCBpbnRlcnZhbDsKKwl1OAkJCXJlc2V0X2dvcDsKKwl1OAkJCWJ3X3dlaWdodDsKKwl1OAkJCW1vdGlvbl9kZXRlY3RlZDsKKwl1MTYJCQltb3Rpb25fdGhyZXNoOworCXUxNgkJCXdpZHRoOworCXUxNgkJCWhlaWdodDsKKwljaGFyCQkJb3NkX3RleHRbT1NEX1RFWFRfTUFYICsgMV07Cit9OworCitzdHJ1Y3Qgc29sb19lbmNfYnVmIHsKKwl1OAkJCXZvcDsKKwl1OAkJCWNoOworCWVudW0gc29sb19lbmNfdHlwZXMJdHlwZTsKKwl1MzIJCQlvZmY7CisJdTMyCQkJc2l6ZTsKKwl1MzIJCQlqcGVnX29mZjsKKwl1MzIJCQlqcGVnX3NpemU7CisJc3RydWN0IHRpbWV2YWwJCXRzOworfTsKKworLyogVGhlIFNPTE82MDEwIFBDSSBEZXZpY2UgKi8KK3N0cnVjdCBzb2xvNjAxMF9kZXYgeworCS8qIEdlbmVyYWwgc3R1ZmYgKi8KKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJdTggX19pb21lbQkJKnJlZ19iYXNlOworCWludAkJCW5yX2NoYW5zOworCWludAkJCW5yX2V4dDsKKwl1MzIJCQlpcnFfbWFzazsKKwl1MzIJCQltb3Rpb25fbWFzazsKKwlzcGlubG9ja190CQlyZWdfaW9fbG9jazsKKworCS8qIHR3Mjh4eCBhY2NvdW50aW5nICovCisJdTgJCQl0dzI4NjUsIHR3Mjg2NCwgdHcyODE1OworCXU4CQkJdHcyOF9jbnQ7CisKKwkvKiBpMmMgcmVsYXRlZCBpdGVtcyAqLworCXN0cnVjdCBpMmNfYWRhcHRlcglpMmNfYWRhcFtTT0xPX0kyQ19BREFQVEVSU107CisJZW51bSBTT0xPX0kyQ19TVEFURQlpMmNfc3RhdGU7CisJc3RydWN0IHNlbWFwaG9yZQlpMmNfc2VtOworCWludAkJCWkyY19pZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlpMmNfd2FpdDsKKwlzdHJ1Y3QgaTJjX21zZwkJKmkyY19tc2c7CisJdW5zaWduZWQgaW50CQlpMmNfbXNnX251bTsKKwl1bnNpZ25lZCBpbnQJCWkyY19tc2dfcHRyOworCisJLyogUDJNIERNQSBFbmdpbmUgKi8KKwlzdHJ1Y3Qgc29sb19wMm1fZGV2CXAybV9kZXZbU09MT19OUl9QMk1dOworCisJLyogVjRMMiBEaXNwbGF5IGl0ZW1zICovCisJc3RydWN0IHZpZGVvX2RldmljZQkqdmZkOworCXVuc2lnbmVkIGludAkJZXJhc2luZzsKKwl1bnNpZ25lZCBpbnQJCWZyYW1lX2JsYW5rOworCXU4CQkJY3VyX2Rpc3BfY2g7CisJd2FpdF9xdWV1ZV9oZWFkX3QJZGlzcF90aHJlYWRfd2FpdDsKKworCS8qIFY0TDIgRW5jb2RlciBpdGVtcyAqLworCXN0cnVjdCBzb2xvX2VuY19kZXYJKnY0bDJfZW5jW1NPTE9fTUFYX0NIQU5ORUxTXTsKKwl1MTYJCQllbmNfYndfcmVtYWluOworCS8qIElEWCBpbnRvIGh3IG1wNCBlbmNvZGVyICovCisJdTgJCQllbmNfaWR4OworCS8qIE91ciBzb2Z0d2FyZSByaW5nIG9mIGVuYyBidWYgcmVmZXJlbmNlcyAqLworCXUxNgkJCWVuY193cl9pZHg7CisJc3RydWN0IHNvbG9fZW5jX2J1ZgllbmNfYnVmW1NPTE9fTlJfUklOR19CVUZTXTsKKworCS8qIEN1cnJlbnQgdmlkZW8gc2V0dGluZ3MgKi8KKwl1MzIgCQkJdmlkZW9fdHlwZTsKKwl1MTYJCQl2aWRlb19oc2l6ZSwgdmlkZW9fdnNpemU7CisJdTE2CQkJdm91dF9oc3RhcnQsIHZvdXRfdnN0YXJ0OworCXUxNgkJCXZpbl9oc3RhcnQsIHZpbl92c3RhcnQ7CisJdTgJCQlmcHM7CisKKwkvKiBBdWRpbyBjb21wb25lbnRzICovCisJc3RydWN0IHNuZF9jYXJkCQkqc25kX2NhcmQ7CisJc3RydWN0IHNuZF9wY20JCSpzbmRfcGNtOworCWF0b21pY190CQlzbmRfdXNlcnM7CisJaW50CQkJZzcyM19od19pZHg7Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiBzb2xvX3JlZ19yZWFkKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJldDsKKwl1MTYgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvbG9fZGV2LT5yZWdfaW9fbG9jaywgZmxhZ3MpOworCisJcmV0ID0gcmVhZGwoc29sb19kZXYtPnJlZ19iYXNlICsgcmVnKTsKKwlybWIoKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChzb2xvX2Rldi0+cGRldiwgUENJX1NUQVRVUywgJnZhbCk7CisJcm1iKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2xvX2Rldi0+cmVnX2lvX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2xvX3JlZ193cml0ZShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IHJlZywKKwkJCQkgICAgICB1MzIgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29sb19kZXYtPnJlZ19pb19sb2NrLCBmbGFncyk7CisKKwl3cml0ZWwoZGF0YSwgc29sb19kZXYtPnJlZ19iYXNlICsgcmVnKTsKKwl3bWIoKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChzb2xvX2Rldi0+cGRldiwgUENJX1NUQVRVUywgJnZhbCk7CisJcm1iKCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2xvX2Rldi0+cmVnX2lvX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBzb2xvNjAxMF9pcnFfb24oc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHUzMiBtYXNrKTsKK3ZvaWQgc29sbzYwMTBfaXJxX29mZihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTMyIG1hc2spOworCisvKiBJbml0L2V4aXQgcm91dGVpbmVzIGZvciBzdWJzeXN0ZW1zICovCitpbnQgc29sb19kaXNwX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX2Rpc3BfZXhpdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7CisKK2ludCBzb2xvX2dwaW9faW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fZ3Bpb19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9faTJjX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX2kyY19leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9fcDJtX2luaXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX3AybV9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9fdjRsMl9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb192NGwyX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCitpbnQgc29sb19lbmNfaW5pdChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fZW5jX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCitpbnQgc29sb19lbmNfdjRsMl9pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19lbmNfdjRsMl9leGl0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKKworaW50IHNvbG9fZzcyM19pbml0KHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19nNzIzX2V4aXQoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCisvKiBJU1IncyAqLworaW50IHNvbG9faTJjX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2Rldik7Cit2b2lkIHNvbG9fcDJtX2lzcihzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgaW50IGlkKTsKK3ZvaWQgc29sb19wMm1fZXJyb3JfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCB1MzIgc3RhdHVzKTsKK3ZvaWQgc29sb19lbmNfdjRsMl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOwordm9pZCBzb2xvX2c3MjNfaXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb19tb3Rpb25faXNyKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2KTsKK3ZvaWQgc29sb192aWRlb19pbl9pc3Ioc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYpOworCisvKiBpMmMgcmVhZC93cml0ZSAqLwordTggc29sb19pMmNfcmVhZGJ5dGUoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIGludCBpZCwgdTggYWRkciwgdTggb2ZmKTsKK3ZvaWQgc29sb19pMmNfd3JpdGVieXRlKHN0cnVjdCBzb2xvNjAxMF9kZXYgKnNvbG9fZGV2LCBpbnQgaWQsIHU4IGFkZHIsIHU4IG9mZiwKKwkJCXU4IGRhdGEpOworCisvKiBQMk0gRE1BICovCitpbnQgc29sb19wMm1fZG1hX3Qoc3RydWN0IHNvbG82MDEwX2RldiAqc29sb19kZXYsIHU4IGlkLCBpbnQgd3IsCisJCSAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBleHRfYWRkciwgdTMyIHNpemUpOworaW50IHNvbG9fcDJtX2RtYShzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggaWQsIGludCB3ciwKKwkJIHZvaWQgKnN5c19hZGRyLCB1MzIgZXh0X2FkZHIsIHUzMiBzaXplKTsKKworLyogU2V0IHRoZSB0aHJlc2hvbGQgZm9yIG1vdGlvbiBkZXRlY3Rpb24gKi8KK3ZvaWQgc29sb19zZXRfbW90aW9uX3RocmVzaG9sZChzdHJ1Y3Qgc29sbzYwMTBfZGV2ICpzb2xvX2RldiwgdTggY2gsIHUxNiB2YWwpOworI2RlZmluZSBTT0xPX0RFRl9NT1RfVEhSRVNICQkweDAzMDAKKworLyogV3JpdGUgdGV4dCBvbiBPU0QgKi8KK2ludCBzb2xvX29zZF9wcmludChzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYyk7CisKKyNlbmRpZiAvKiBfX1NPTE82MDEwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMmZmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9LY29uZmlnCkBAIC0wLDAgKzEsNDAgQEAKKworbWVudWNvbmZpZyBTUEVDVFJBCisJdHJpc3RhdGUgIkRlbmFsaSBTcGVjdHJhIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyIgorCWRlcGVuZHMgb24gQkxPQ0sKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBFbmFibGUgdGhlIEZUTCBwc2V1ZG8tZmlsZXN5c3RlbSB1c2VkIHdpdGggdGhlIE5BTkQgRmxhc2gKKwkgIGNvbnRyb2xsZXIgb24gSW50ZWwgTW9vcmVzdG93biBQbGF0Zm9ybSB0byBwcmV0ZW5kIHRvIGJlIGEgZGlzaworCitjaG9pY2UKKwlwcm9tcHQgIkNvbXBpbGUgZm9yIgorCWRlcGVuZHMgb24gU1BFQ1RSQQorCWRlZmF1bHQgU1BFQ1RSQV9NUlNUX0hXCisKK2NvbmZpZyBTUEVDVFJBX01SU1RfSFcKKwlib29sICJNb29yZXN0b3duIGhhcmR3YXJlIG1vZGUiCisJaGVscAorCSAgRHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBNb29yZXN0b3duIGhhcmR3YXJlJ3MgcmVnaXN0ZXIgaW50ZXJmYWNlLgorCSAgaW4gRE1BIG1vZGUuCisKK2NvbmZpZyBTUEVDVFJBX01URAorCWJvb2wgIkxpbnV4IE1URCBtb2RlIgorCWRlcGVuZHMgb24gTVRECisJaGVscAorCSAgRHJpdmVyIGNvbW11bmljYXRlcyB3aXRoIHRoZSBrZXJuZWwgTVREIHN1YnN5c3RlbSBpbnN0ZWFkIG9mIGl0cyBvd24KKwkgIGJ1aWx0LWluIGhhcmR3YXJlIGRyaXZlci4KKworY29uZmlnIFNQRUNUUkFfRU1VCisJYm9vbCAiUkFNIGVtdWxhdG9yIHRlc3RpbmciCisJaGVscAorCSAgRHJpdmVyIGVtdWxhdGVzIEZsYXNoIG9uIGEgUkFNIGJ1ZmZlciBhbmQgLyBvciBkaXNrIGZpbGUuICBVc2VmdWwgdG8gdGVzdCB0aGUgYmVoYXZpb3Igb2YgRlRMIGxheWVyLgorCitlbmRjaG9pY2UKKworY29uZmlnIFNQRUNUUkFfTVJTVF9IV19ETUEKKyAgICAgICBib29sCisgICAgICAgZGVmYXVsdCBuCisgICAgICAgZGVwZW5kcyBvbiBTUEVDVFJBX01SU1RfSFcKKyAgICAgICBoZWxwCisgICAgICAgICBVc2UgRE1BIGZvciBuYXRpdmUgaGFyZHdhcmUgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzc3ZGZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBvZiBJbnRlbCBNb29yZXN0b3duIE5BTkQgY29udHJvbGxlciBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX1NQRUNUUkEpICs9IHNwZWN0cmEubworc3BlY3RyYS15IDo9IGZmc3BvcnQubyBmbGFzaC5vIGxsZC5vCitzcGVjdHJhLSQoQ09ORklHX1NQRUNUUkFfTVJTVF9IVykgKz0gbGxkX25hbmQubyAKK3NwZWN0cmEtJChDT05GSUdfU1BFQ1RSQV9NUlNUX0hXX0RNQSkgKz0gbGxkX2NkbWEubworc3BlY3RyYS0kKENPTkZJR19TUEVDVFJBX0VNVSkgKz0gbGxkX2VtdS5vCitzcGVjdHJhLSQoQ09ORklHX1NQRUNUUkFfTVREKSArPSBsbGRfbXRkLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYmE1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9SRUFETUUKQEAgLTAsMCArMSwyOSBAQAorVGhpcyBpcyBhIGRyaXZlciBmb3IgTkFORCBjb250cm9sbGVyIG9mIEludGVsIE1vb3Jlc3Rvd24gcGxhdGZvcm0uCisKK1RoaXMgZHJpdmVyIGlzIGEgc3RhbmRhbG9uZSBsaW51eCBibG9jayBkZXZpY2UgZHJpdmVyLCBpdCBhY3RzIGFzIGlmIGl0J3MgYSBub3JtYWwgaGFyZCBkaXNrLgorSXQgaW5jbHVkZXMgdGhyZWUgbGF5ZXI6CisJYmxvY2sgbGF5ZXIgaW50ZXJmYWNlIC0gZmlsZSBmZnNwb3J0LmMKKwlGbGFzaCBUcmFuc2xhdGlvbiBMYXllciAoRlRMKSAtIGZpbGUgZmxhc2guYyAoaW1wbGVtZW50IHRoZSBOQU5EIGZsYXNoIFRyYW5zbGF0aW9uIExheWVyLCBpbmNsdWRzIGFkZHJlc3MgbWFwcGluZywgZ2FyYmFnZSBjb2xsZWN0aW9uLCB3ZWFyLWxldmVsaW5nIGFuZCBzbyBvbikKKwlMb3cgbGV2ZWwgbGF5ZXIgLSBmaWxlIGxsZF9uYW5kLmMvbGxkX2NkbWEuYy9sbGRfZW11LmMgKHdoaWNoIGltcGxlbWVudHMgYWN0dWFsIGNvbnRyb2xsZXIgaGFyZHdhcmUgcmVnaXN0ZXJzIGFjY2VzcykKKworVGhpcyBkcml2ZXIgY2FuIGJlIGJ1aWxkIGFzIG1vZHVsZXMgb3IgYnVpbGQtaW4uCisKK0RlcGVuZGVuY3k6CitUaGlzIGRyaXZlciBoYXMgZGVwZW5kZW5jeSBvbiBJQSBGaXJtd2FyZSBvZiBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtLgorSXQgbmVlZCB0aGUgSUEgRmlybXdhcmUgdG8gY3JlYXRlIHRoZSBibG9jayB0YWJsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCitBbmQgdG8gdmFsaWRhdGUgdGhpcyBkcml2ZXIgY29kZSB3aXRob3V0IElBIEZpcm13YXJlLCB5b3UgY2FuIGNoYW5nZSB0aGUKK21hY3JvIEFVVE9fRk9STUFUX0ZMQVNIIGZyb20gMCB0byAxIGluIGZpbGUgc3BlY3RyYXN3Y29uZmlnLmguIFRodXMgdGhlCitkcml2ZXIgd2lsbCBlcmFzZSB0aGUgd2hvbGUgbmFuZCBmbGFzaCBhbmQgY3JlYXRlIGEgbmV3IGJsb2NrIHRhYmxlLgorCitUT0RPOgorCS0gRW5hYmxlIENvbW1hbmQgRE1BIGZlYXR1cmUgc3VwcG9ydAorCS0gbG93ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQKKwktIFJlbW92ZSBtb3N0IG9mIHRoZSB1bm5lY2Vzc2FyeSBnbG9iYWwgdmFyaWFibGVzCisJLSBDaGFuZ2UgYWxsIHRoZSB1cGNhc2UgdmFyaWFibGUgLyBmdW5jdGlvbnMgbmFtZSB0byBsb3dlcmNhc2UKKwktIFNvbWUgb3RoZXIgbWlzYyBidWdzCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CisJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKworQW5kIENjIHRvOiBHYW8gWXVucGVuZyA8eXVucGVuZy5nYW9AaW50ZWwuY29tPgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTllOWNkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc2RlZnMuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfRkZTREVGU18KKyNkZWZpbmUgX0ZGU0RFRlNfCisKKyNkZWZpbmUgQ0xFQVIgMAkJCS8qdXNlIHRoaXMgdG8gY2xlYXIgYSBmaWVsZCBpbnN0ZWFkIG9mICJmYWlsIiovCisjZGVmaW5lIFNFVCAgIDEJCQkvKnVzZSB0aGlzIHRvIHNldCBhIGZpZWxkIGluc3RlYWQgb2YgInBhc3MiKi8KKyNkZWZpbmUgRkFJTCAxCQkJLypmYWlsZWQgZmxhZyovCisjZGVmaW5lIFBBU1MgMAkJCS8qc3VjY2VzcyBmbGFnKi8KKyNkZWZpbmUgRVJSIC0xCQkJLyplcnJvciBmbGFnKi8KKworI2RlZmluZSAgIEVSQVNFX0NNRCAgICAgICAgICAgICAxMAorI2RlZmluZSAgIFdSSVRFX01BSU5fQ01EICAgICAgICAxMQorI2RlZmluZSAgIFJFQURfTUFJTl9DTUQgICAgICAgICAxMgorI2RlZmluZSAgIFdSSVRFX1NQQVJFX0NNRCAgICAgICAxMworI2RlZmluZSAgIFJFQURfU1BBUkVfQ01EICAgICAgICAxNAorI2RlZmluZSAgIFdSSVRFX01BSU5fU1BBUkVfQ01EICAxNQorI2RlZmluZSAgIFJFQURfTUFJTl9TUEFSRV9DTUQgICAxNgorI2RlZmluZSAgIE1FTUNPUFlfQ01EICAgICAgICAgICAxNworI2RlZmluZSAgIERVTU1ZX0NNRCAgICAgICAgICAgICA5OQorCisjZGVmaW5lICAgICBFVkVOVF9QQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgICAgIEVWRU5UX0NPUlJFQ1RBQkxFX0RBVEFfRVJST1JfRklYRUQgICAgICAgICAweDAxCisjZGVmaW5lICAgICBFVkVOVF9VTkNPUlJFQ1RBQkxFX0RBVEFfRVJST1IgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgICAgIEVWRU5UX1RJTUVfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSAgICAgRVZFTlRfUFJPR1JBTV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lICAgICBFVkVOVF9FUkFTRV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgICAgIEVWRU5UX01FTUNPUFlfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSAgICAgRVZFTlRfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3CisKKyNkZWZpbmUgICAgIEVWRU5UX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSAgICAgRVZFTlRfRE1BX0NNRF9DT01QICAgICAgICAgICAgICAgICAgICAgICAgICAweDc3CisjZGVmaW5lICAgICBFVkVOVF9FQ0NfVFJBTlNBQ1RJT05fRE9ORSAgICAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgICAgIEVWRU5UX0RNQV9DTURfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OQorCisjZGVmaW5lIENNRF9QQVNTICAgICAgICAwCisjZGVmaW5lIENNRF9GQUlMICAgICAgICAxCisjZGVmaW5lIENNRF9BQk9SVCAgICAgICAyCisjZGVmaW5lIENNRF9OT1RfRE9ORSAgICAzCisKKyNlbmRpZiAvKiBfRkZTREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGM1Yzk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jCkBAIC0wLDAgKzEsODI3IEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImZmc3BvcnQuaCIKKyNpbmNsdWRlICJmbGFzaC5oIgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKy8qKioqIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBmb3IgRGl2LCBSZW1haW5kZXIgb3BlcmF0aW9uIG9uIHU2NCAqKioqLworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0NhbGNfVXNlZF9CaXRzCisqIElucHV0czogICAgICAgUG93ZXIgb2YgMiBudW1iZXIKKyogT3V0cHV0czogICAgICBOdW1iZXIgb2YgVXNlZCBCaXRzCisqICAgICAgICAgICAgICAgMCwgaWYgdGhlIGFyZ3VtZW50IGlzIDAKKyogRGVzY3JpcHRpb246ICBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgYnkgYSBnaXZlbiBwb3dlciBvZiAyIG51bWJlcgorKiAgICAgICAgICAgICAgIE51bWJlciBjYW4gYmUgdXB0byAzMiBiaXQKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9DYWxjX1VzZWRfQml0cyh1MzIgbikKK3sKKwlpbnQgdG90X2JpdHMgPSAwOworCisJaWYgKG4gPj0gMSA8PCAxNikgeworCQluID4+PSAxNjsKKwkJdG90X2JpdHMgKz0gMTY7CisJfQorCisJaWYgKG4gPj0gMSA8PCA4KSB7CisJCW4gPj49ICA4OworCQl0b3RfYml0cyArPSAgODsKKwl9CisKKwlpZiAobiA+PSAxIDw8IDQpIHsKKwkJbiA+Pj0gIDQ7CisJCXRvdF9iaXRzICs9ICA0OworCX0KKworCWlmIChuID49IDEgPDwgMikgeworCQluID4+PSAgMjsKKwkJdG90X2JpdHMgKz0gIDI7CisJfQorCisJaWYgKG4gPj0gMSA8PCAxKQorCQl0b3RfYml0cyArPSAgMTsKKworCXJldHVybiAoKG4gPT0gMCkgPyAoMCkgOiB0b3RfYml0cyk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfdTY0X0RpdgorKiBJbnB1dHM6ICAgICAgIE51bWJlciBvZiB1NjQKKyogICAgICAgICAgICAgICBBIHBvd2VyIG9mIDIgbnVtYmVyIGFzIERpdmlzaW9uCisqIE91dHB1dHM6ICAgICAgUXVvdGllbnQgb2YgdGhlIERpdmlzb3Igb3BlcmF0aW9uCisqIERlc2NyaXB0aW9uOiAgSXQgZGl2aWRlcyB0aGUgYWRkcmVzcyBieSBkaXZpc29yIGJ5IHVzaW5nIGJpdCBzaGlmdCBvcGVyYXRpb24KKyogICAgICAgICAgICAgICAoZXNzZW50aWFsbHkgd2l0aG91dCBleHBsaWNpdGVseSB1c2luZyAiLyIpLgorKiAgICAgICAgICAgICAgIERpdmlzb3IgaXMgYSBwb3dlciBvZiAyIG51bWJlciBhbmQgRGl2aWRlZCBpcyBvZiB1NjQKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1NjQgR0xPQl91NjRfRGl2KHU2NCBhZGRyLCB1MzIgZGl2aXNvcikKK3sKKwlyZXR1cm4gICh1NjQpKGFkZHIgPj4gR0xPQl9DYWxjX1VzZWRfQml0cyhkaXZpc29yKSk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfdTY0X1JlbWFpbmRlcgorKiBJbnB1dHM6ICAgICAgIE51bWJlciBvZiB1NjQKKyogICAgICAgICAgICAgICBEaXZpc29yIFR5cGUgKDEgLVBhZ2VBZGRyZXNzLCAyLSBCbG9ja0FkZHJlc3MpCisqIE91dHB1dHM6ICAgICAgUmVtYWluZGVyIG9mIHRoZSBEaXZpc2lvbiBvcGVyYXRpb24KKyogRGVzY3JpcHRpb246ICBJdCBjYWxjdWxhdGVzIHRoZSByZW1haW5kZXIgb2YgYSBudW1iZXIgKG9mIHU2NCkgYnkKKyogICAgICAgICAgICAgICBkaXZpc29yKHBvd2VyIG9mIDIgbnVtYmVyICkgYnkgdXNpbmcgYml0IHNoaWZ0aW5nIGFuZCBtdWx0aXBseQorKiAgICAgICAgICAgICAgIG9wZXJhdGlvbihlc3NlbnRpYWxseSB3aXRob3V0IGV4cGxpY2l0ZWx5IHVzaW5nICIvIikuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTY0IEdMT0JfdTY0X1JlbWFpbmRlcih1NjQgYWRkciwgdTMyIGRpdmlzb3JfdHlwZSkKK3sKKwl1NjQgcmVzdWx0ID0gMDsKKworCWlmIChkaXZpc29yX3R5cGUgPT0gMSkgeyAvKiBSZW1haW5kZXIgLS0gUGFnZSAqLworCQlyZXN1bHQgPSAoYWRkciA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpOworCQlyZXN1bHQgPSByZXN1bHQgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJfSBlbHNlIGlmIChkaXZpc29yX3R5cGUgPT0gMikgeyAvKiBSZW1haW5kZXIgLS0gQmxvY2sgKi8KKwkJcmVzdWx0ID0gKGFkZHIgPj4gRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSk7CisJCXJlc3VsdCA9IHJlc3VsdCAqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemU7CisJfQorCisJcmVzdWx0ID0gYWRkciAtIHJlc3VsdDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKyNkZWZpbmUgTlVNX0RFVklDRVMgICAgICAgICAgICAgMQorI2RlZmluZSBQQVJUSVRJT05TICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgR0xPQl9TQkRfTkFNRSAgICAgICAgICAibmQiCisjZGVmaW5lIEdMT0JfU0JEX0lSUV9OVU0gICAgICAgKDI5KQorI2RlZmluZSBHTE9CX1ZFUlNJT04JCSJkcml2ZXIgdmVyc2lvbiAyMDA5MTExMCIKKworI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9HQyAgICAgICAgICAgICAgICAgICAgICAgICgweDc3MDEpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX1dMICAgICAgICAgICAgICAgICAgICAgICAgKDB4NzcwMikKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfRk9STUFUICAgICAgICAgICAgICAgICAgICAoMHg3NzAzKQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9FUkFTRV9GTEFTSCAgICAgICAgICAgICAgICgweDc3MDQpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX0ZMVVNIX0NBQ0hFICAgICAgICAgICAgICAgKDB4NzcwNSkKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfQ09QWV9CTEtfVEFCTEUgICAgICAgICAgICAoMHg3NzA2KQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9DT1BZX1dFQVJfTEVWRUxJTkdfVEFCTEUgICgweDc3MDcpCisjZGVmaW5lIEdMT0JfU0JEX0lPQ1RMX0dFVF9OQU5EX0lORk8gICAgICAgICAgICAgKDB4NzcwOCkKKyNkZWZpbmUgR0xPQl9TQkRfSU9DVExfV1JJVEVfREFUQSAgICAgICAgICAgICAgICAoMHg3NzA5KQorI2RlZmluZSBHTE9CX1NCRF9JT0NUTF9SRUFEX0RBVEEgICAgICAgICAgICAgICAgICgweDc3MEEpCisKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfbWIgPSAwOworbW9kdWxlX3BhcmFtKHJlc2VydmVkX21iLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhyZXNlcnZlZF9tYiwgIlJlc2VydmVkIHNwYWNlIGZvciBPUyBpbWFnZSwgaW4gTWlCIChkZWZhdWx0IDI1IE1pQikiKTsKKworaW50IG5hbmRfZGVidWdfbGV2ZWw7Cittb2R1bGVfcGFyYW0obmFuZF9kZWJ1Z19sZXZlbCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobmFuZF9kZWJ1Z19sZXZlbCwgImRlYnVnIGxldmVsIHZhbHVlOiAxLTMiKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl1NjQgc2l6ZTsKKwl1MTYgdXNlcnM7CisJc3BpbmxvY2tfdCBxbG9jazsKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsgIC8qIE1hcHBlZCBhZGRyZXNzICovCisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCXN0cnVjdCBnZW5kaXNrICpnZDsKKwl1OCAqdG1wX2J1ZjsKK307CisKKworc3RhdGljIGludCBHTE9CX1NCRF9tYWpvcm51bTsKKworc3RhdGljIGNoYXIgKkdMT0JfdmVyc2lvbiA9IEdMT0JfVkVSU0lPTjsKKworc3RhdGljIHN0cnVjdCBzcGVjdHJhX25hbmRfZGV2IG5hbmRfZGV2aWNlW05VTV9ERVZJQ0VTXTsKKworc3RhdGljIHN0cnVjdCBtdXRleCBzcGVjdHJhX2xvY2s7CisKK3N0YXRpYyBpbnQgcmVzX2Jsa3Nfb3MgPSAxOworCitzdHJ1Y3Qgc3BlY3RyYV9pbmRlbnRmeV9kZXZfdGFnIElkZW50aWZ5RGV2aWNlRGF0YTsKKworc3RhdGljIGludCBmb3JjZV9mbHVzaF9jYWNoZSh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoRVJSID09IEdMT0JfRlRMX0ZsdXNoX0NhY2hlKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsIHRvIEZsdXNoIEZUTCBDYWNoZSFcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisjaWYgQ01EX0RNQQorCQlpZiAoZ2xvYl9mdGxfZXhlY3V0ZV9jbWRzKCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGlvY3RsX3J3X3BhZ2VfaW5mbyB7CisJdTggKmRhdGE7CisJdW5zaWduZWQgaW50IHBhZ2U7Cit9OworCitzdGF0aWMgaW50IGlvY3RsX3JlYWRfcGFnZV9kYXRhKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXU4ICpidWY7CisJc3RydWN0IGlvY3RsX3J3X3BhZ2VfaW5mbyBpbmZvOworCWludCByZXN1bHQgPSBQQVNTOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpbmZvLCAodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmID0ga21hbGxvYyhJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZikgeworCQlwcmludGsoS0VSTl9FUlIgImlvY3RsX3JlYWRfcGFnZV9kYXRhOiAiCisJCSAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW11dGV4X2xvY2soJnNwZWN0cmFfbG9jayk7CisJcmVzdWx0ID0gR0xPQl9GVExfUGFnZV9SZWFkKGJ1ZiwKKwkJKHU2NClpbmZvLnBhZ2UgKiBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplKTsKKwltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWluZm8uZGF0YSwgYnVmLAorCQkJICAgSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpb2N0bF9yZWFkX3BhZ2VfZGF0YTogIgorCQkgICAgICAgImZhaWxlZCB0byBjb3B5IHVzZXIgZGF0YVxuIik7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpb2N0bF93cml0ZV9wYWdlX2RhdGEodW5zaWduZWQgbG9uZyBhcmcpCit7CisJdTggKmJ1ZjsKKwlzdHJ1Y3QgaW9jdGxfcndfcGFnZV9pbmZvIGluZm87CisJaW50IHJlc3VsdCA9IFBBU1M7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWYgPSBrbWFsbG9jKElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW9jdGxfd3JpdGVfcGFnZV9kYXRhOiAiCisJCSAgICAgICAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICh2b2lkIF9fdXNlciAqKWluZm8uZGF0YSwKKwkJCSAgIElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW9jdGxfd3JpdGVfcGFnZV9kYXRhOiAiCisJCSAgICAgICAiZmFpbGVkIHRvIGNvcHkgdXNlciBkYXRhXG4iKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJbXV0ZXhfbG9jaygmc3BlY3RyYV9sb2NrKTsKKwlyZXN1bHQgPSBHTE9CX0ZUTF9QYWdlX1dyaXRlKGJ1ZiwKKwkJKHU2NClpbmZvLnBhZ2UgKiBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplKTsKKwltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisKKwlrZnJlZShidWYpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJldHVybiBob3cgbWFueSBibG9ja3Mgc2hvdWxkIGJlIHJlc2VydmVkIGZvciBiYWQgYmxvY2sgcmVwbGFjZW1lbnQgKi8KK3N0YXRpYyBpbnQgZ2V0X3Jlc19ibGtfbnVtX2JhZF9ibGsodm9pZCkKK3sKKwlyZXR1cm4gSWRlbnRpZnlEZXZpY2VEYXRhLndEYXRhQmxvY2tOdW0gLyAxMDsKK30KKworLyogUmV0dXJuIGhvdyBtYW55IGJsb2NrcyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIE9TIGltYWdlICovCitzdGF0aWMgaW50IGdldF9yZXNfYmxrX251bV9vcyh2b2lkKQoreworCXUzMiByZXNfYmxrcywgYmxrX3NpemU7CisKKwlibGtfc2l6ZSA9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemUgKgorCQlJZGVudGlmeURldmljZURhdGEuUGFnZXNQZXJCbG9jazsKKworCXJlc19ibGtzID0gKHJlc2VydmVkX21iICogMTAyNCAqIDEwMjQpIC8gYmxrX3NpemU7CisKKwlpZiAoKHJlc19ibGtzIDwgMSkgfHwgKHJlc19ibGtzID49IElkZW50aWZ5RGV2aWNlRGF0YS53RGF0YUJsb2NrTnVtKSkKKwkJcmVzX2Jsa3MgPSAxOyAvKiBSZXNlcnZlZCAxIGJsb2NrIGZvciBibG9jayB0YWJsZSAqLworCisJcmV0dXJuIHJlc19ibGtzOworfQorCitzdGF0aWMgdm9pZCBTQkRfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0xJTlVYX0JMT0NLOworCS8qIHJxLT50aW1lb3V0ID0gNSAqIEhaOyAqLworCXJxLT5jbWRbMF0gPSBSRVFfTEJfT1BfRkxVU0g7Cit9CisKKy8qIFRyYW5zZmVyIGEgZnVsbCByZXF1ZXN0LiAqLworc3RhdGljIGludCBkb190cmFuc2ZlcihzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiAqdHIsIHN0cnVjdCByZXF1ZXN0ICpyZXEpCit7CisJdTY0IHN0YXJ0X2FkZHIsIGFkZHI7CisJdTMyIGxvZ2ljYWxfc3RhcnRfc2VjdCwgaGRfc3RhcnRfc2VjdDsKKwl1MzIgbnNlY3QsIGhkX3NlY3RzOworCXUzMiByc2VjdCwgdHNlY3QgPSAwOworCWNoYXIgKmJ1ZjsKKwl1MzIgcmF0aW8gPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplID4+IDk7CisKKwlzdGFydF9hZGRyID0gKHU2NCkoYmxrX3JxX3BvcyhyZXEpKSA8PCA5OworCS8qIEFkZCBhIGJpZyBlbm91Z2ggb2Zmc2V0IHRvIHByZXZlbnQgdGhlIE9TIEltYWdlIGZyb20KKwkqICBiZWluZyBhY2Nlc3NlZCBvciBkYW1hZ2VkIGJ5IGZpbGUgc3lzdGVtICovCisJc3RhcnRfYWRkciArPSBJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplICoKKwkJCUlkZW50aWZ5RGV2aWNlRGF0YS5QYWdlc1BlckJsb2NrICoKKwkJCXJlc19ibGtzX29zOworCisJaWYgKHJlcS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfTElOVVhfQkxPQ0sgJiYKKwkJCXJlcS0+Y21kWzBdID09IFJFUV9MQl9PUF9GTFVTSCkgeworCQlpZiAoZm9yY2VfZmx1c2hfY2FjaGUoKSkgLyogRmFpbCB0byBmbHVzaCBjYWNoZSAqLworCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKworCWlmIChyZXEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0ZTKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChibGtfcnFfcG9zKHJlcSkgKyBibGtfcnFfY3VyX3NlY3RvcnMocmVxKSA+IGdldF9jYXBhY2l0eSh0ci0+Z2QpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYSBlcnJvcjogcmVxdWVzdCBvdmVyIHRoZSBOQU5EICIKKwkJCSJjYXBhY2l0eSFzZWN0b3IgJWQsIGN1cnJlbnRfbnJfc2VjdG9ycyAlZCwgIgorCQkJIndoaWxlIGNhcGFjaXR5IGlzICVkXG4iLAorCQkJKGludClibGtfcnFfcG9zKHJlcSksCisJCQlibGtfcnFfY3VyX3NlY3RvcnMocmVxKSwKKwkJCShpbnQpZ2V0X2NhcGFjaXR5KHRyLT5nZCkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlsb2dpY2FsX3N0YXJ0X3NlY3QgPSBzdGFydF9hZGRyID4+IDk7CisJaGRfc3RhcnRfc2VjdCA9IGxvZ2ljYWxfc3RhcnRfc2VjdCAvIHJhdGlvOworCXJzZWN0ID0gbG9naWNhbF9zdGFydF9zZWN0IC0gaGRfc3RhcnRfc2VjdCAqIHJhdGlvOworCisJYWRkciA9ICh1NjQpaGRfc3RhcnRfc2VjdCAqIHJhdGlvICogNTEyOworCWJ1ZiA9IHJlcS0+YnVmZmVyOworCW5zZWN0ID0gYmxrX3JxX2N1cl9zZWN0b3JzKHJlcSk7CisKKwlpZiAocnNlY3QpCisJCXRzZWN0ID0gIChyYXRpbyAtIHJzZWN0KSA8IG5zZWN0ID8gKHJhdGlvIC0gcnNlY3QpIDogbnNlY3Q7CisKKwlzd2l0Y2ggKHJxX2RhdGFfZGlyKHJlcSkpIHsKKwljYXNlIFJFQUQ6CisJCS8qIFJlYWQgdGhlIGZpcnN0IE5BTkQgcGFnZSAqLworCQlpZiAocnNlY3QpIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1JlYWQodHItPnRtcF9idWYsIGFkZHIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcywgTGluZSAlZFxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCW1lbWNweShidWYsIHRyLT50bXBfYnVmICsgKHJzZWN0IDw8IDkpLCB0c2VjdCA8PCA5KTsKKwkJCWFkZHIgKz0gSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZTsKKwkJCWJ1ZiArPSB0c2VjdCA8PCA5OworCQkJbnNlY3QgLT0gdHNlY3Q7CisJCX0KKworCQkvKiBSZWFkIHRoZSBvdGhlciBOQU5EIHBhZ2VzICovCisJCWZvciAoaGRfc2VjdHMgPSBuc2VjdCAvIHJhdGlvOyBoZF9zZWN0cyA+IDA7IGhkX3NlY3RzLS0pIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1JlYWQoYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlhZGRyICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCQlidWYgKz0gSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZTsKKwkJfQorCisJCS8qIFJlYWQgdGhlIGxhc3QgTkFORCBwYWdlcyAqLworCQlpZiAobnNlY3QgJSByYXRpbykgeworCQkJaWYgKEdMT0JfRlRMX1BhZ2VfUmVhZCh0ci0+dG1wX2J1ZiwgYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJbWVtY3B5KGJ1ZiwgdHItPnRtcF9idWYsIChuc2VjdCAlIHJhdGlvKSA8PCA5KTsKKwkJfQorI2lmIENNRF9ETUEKKwkJaWYgKGdsb2JfZnRsX2V4ZWN1dGVfY21kcygpKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXJldHVybiAwOworI2VuZGlmCisJCXJldHVybiAwOworCisJY2FzZSBXUklURToKKwkJLyogV3JpdGUgdGhlIGZpcnN0IE5BTkQgcGFnZSAqLworCQlpZiAocnNlY3QpIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1JlYWQodHItPnRtcF9idWYsIGFkZHIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcywgTGluZSAlZFxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCW1lbWNweSh0ci0+dG1wX2J1ZiArIChyc2VjdCA8PCA5KSwgYnVmLCB0c2VjdCA8PCA5KTsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1dyaXRlKHRyLT50bXBfYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlhZGRyICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCQlidWYgKz0gdHNlY3QgPDwgOTsKKwkJCW5zZWN0IC09IHRzZWN0OworCQl9CisKKwkJLyogV3JpdGUgdGhlIG90aGVyIE5BTkQgcGFnZXMgKi8KKwkJZm9yIChoZF9zZWN0cyA9IG5zZWN0IC8gcmF0aW87IGhkX3NlY3RzID4gMDsgaGRfc2VjdHMtLSkgeworCQkJaWYgKEdMT0JfRlRMX1BhZ2VfV3JpdGUoYnVmLCBhZGRyKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCQlhZGRyICs9IElkZW50aWZ5RGV2aWNlRGF0YS5QYWdlRGF0YVNpemU7CisJCQlidWYgKz0gSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZTsKKwkJfQorCisJCS8qIFdyaXRlIHRoZSBsYXN0IE5BTkQgcGFnZXMgKi8KKwkJaWYgKG5zZWN0ICUgcmF0aW8pIHsKKwkJCWlmIChHTE9CX0ZUTF9QYWdlX1JlYWQodHItPnRtcF9idWYsIGFkZHIpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBpbiAlcywgTGluZSAlZFxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCW1lbWNweSh0ci0+dG1wX2J1ZiwgYnVmLCAobnNlY3QgJSByYXRpbykgPDwgOSk7CisJCQlpZiAoR0xPQl9GVExfUGFnZV9Xcml0ZSh0ci0+dG1wX2J1ZiwgYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluICVzLCBMaW5lICVkXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9CisjaWYgQ01EX0RNQQorCQlpZiAoZ2xvYl9mdGxfZXhlY3V0ZV9jbWRzKCkpCisJCQlyZXR1cm4gLUVJTzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVua25vd24gcmVxdWVzdCAldVxuIiwgcnFfZGF0YV9kaXIocmVxKSk7CisJCXJldHVybiAtRUlPOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjb3BpZWQgZnJvbSBkcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jICovCitzdGF0aWMgaW50IHNwZWN0cmFfdHJhbnNfdGhyZWFkKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiAqdHIgPSBhcmc7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJxID0gdHItPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBOVUxMOworCisJLyogd2UgbWlnaHQgZ2V0IGludm9sdmVkIHdoZW4gbWVtb3J5IGdldHMgbG93LCBzbyB1c2UgUEZfTUVNQUxMT0MgKi8KKwljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKKworCXNwaW5fbG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCByZXM7CisKKwkJaWYgKCFyZXEpIHsKKwkJCXJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KHJxKTsKKwkJCWlmICghcmVxKSB7CisJCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQlzcGluX3VubG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCQkJCXNjaGVkdWxlKCk7CisJCQkJc3Bpbl9sb2NrX2lycShycS0+cXVldWVfbG9jayk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlzcGluX3VubG9ja19pcnEocnEtPnF1ZXVlX2xvY2spOworCisJCW11dGV4X2xvY2soJnNwZWN0cmFfbG9jayk7CisJCXJlcyA9IGRvX3RyYW5zZmVyKHRyLCByZXEpOworCQltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisKKwkJc3Bpbl9sb2NrX2lycShycS0+cXVldWVfbG9jayk7CisKKwkJaWYgKCFfX2Jsa19lbmRfcmVxdWVzdF9jdXIocmVxLCByZXMpKQorCQkJcmVxID0gTlVMTDsKKwl9CisKKwlpZiAocmVxKQorCQlfX2Jsa19lbmRfcmVxdWVzdF9hbGwocmVxLCAtRUlPKTsKKworCXNwaW5fdW5sb2NrX2lycShycS0+cXVldWVfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBSZXF1ZXN0IGZ1bmN0aW9uIHRoYXQgImhhbmRsZXMgY2x1c3RlcmluZyIuICovCitzdGF0aWMgdm9pZCBHTE9CX1NCRF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpycSkKK3sKKwlzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiAqcGRldiA9IHJxLT5xdWV1ZWRhdGE7CisJd2FrZV91cF9wcm9jZXNzKHBkZXYtPnRocmVhZCk7Cit9CisKK3N0YXRpYyBpbnQgR0xPQl9TQkRfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCisKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEdMT0JfU0JEX3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnNwZWN0cmFfbG9jayk7CisJcmV0ID0gZm9yY2VfZmx1c2hfY2FjaGUoKTsKKwltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBHTE9CX1NCRF9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJZ2VvLT5oZWFkcyA9IDQ7CisJZ2VvLT5zZWN0b3JzID0gMTY7CisJZ2VvLT5jeWxpbmRlcnMgPSBnZXRfY2FwYWNpdHkoYmRldi0+YmRfZGlzaykgLyAoNCAqIDE2KTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkiaGVhZHM6ICVkLCBzZWN0b3JzOiAlZCwgY3lsaW5kZXJzOiAlZFxuIiwKKwkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzLCBnZW8tPmN5bGluZGVycyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IEdMT0JfU0JEX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0dDOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSAgICAgICAiU3BlY3RyYSBJT0NUTDogR2FyYmFnZSBDb2xsZWN0aW9uICIKKwkJCSAgICAgICAiYmVpbmcgcGVyZm9ybWVkXG4iKTsKKwkJaWYgKFBBU1MgIT0gR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX1dMOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSAgICAgICAiU3BlY3RyYSBJT0NUTDogU3RhdGljIFdlYXIgTGV2ZWxpbmcgIgorCQkJICAgICAgICJiZWluZyBwZXJmb3JtZWRcbiIpOworCQlpZiAoUEFTUyAhPSBHTE9CX0ZUTF9XZWFyX0xldmVsaW5nKCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0ZPUk1BVDoKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTcGVjdHJhIElPQ1RMOiBGbGFzaCBmb3JtYXQgIgorCQkJICAgICAgICJiZWluZyBwZXJmb3JtZWRcbiIpOworCQlpZiAoUEFTUyAhPSBHTE9CX0ZUTF9GbGFzaF9Gb3JtYXQoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgR0xPQl9TQkRfSU9DVExfRkxVU0hfQ0FDSEU6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYSBJT0NUTDogQ2FjaGUgZmx1c2ggIgorCQkJICAgICAgICJiZWluZyBwZXJmb3JtZWRcbiIpOworCQltdXRleF9sb2NrKCZzcGVjdHJhX2xvY2spOworCQlyZXQgPSBmb3JjZV9mbHVzaF9jYWNoZSgpOworCQltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisJCXJldHVybiByZXQ7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0NPUFlfQkxLX1RBQkxFOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6ICIKKwkJCSAgICAgICAiQ29weSBibG9jayB0YWJsZVxuIik7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAorCQkJZ2V0X2Jsa190YWJsZV9zdGFydF9hZGRyKCksCisJCQlnZXRfYmxrX3RhYmxlX2xlbigpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWNhc2UgR0xPQl9TQkRfSU9DVExfQ09QWV9XRUFSX0xFVkVMSU5HX1RBQkxFOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmEgSU9DVEw6ICIKKwkJCSAgICAgICAiQ29weSB3ZWFyIGxldmVsaW5nIHRhYmxlXG4iKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQlnZXRfd2Vhcl9sZXZlbGluZ190YWJsZV9zdGFydF9hZGRyKCksCisJCQlnZXRfd2Vhcl9sZXZlbGluZ190YWJsZV9sZW4oKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX0dFVF9OQU5EX0lORk86CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYSBJT0NUTDogIgorCQkJICAgICAgICJHZXQgTkFORCBpbmZvXG4iKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZJZGVudGlmeURldmljZURhdGEsCisJCQlzaXplb2YoSWRlbnRpZnlEZXZpY2VEYXRhKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIEdMT0JfU0JEX0lPQ1RMX1dSSVRFX0RBVEE6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYSBJT0NUTDogIgorCQkJICAgICAgICJXcml0ZSBvbmUgcGFnZSBkYXRhXG4iKTsKKwkJcmV0dXJuIGlvY3RsX3dyaXRlX3BhZ2VfZGF0YShhcmcpOworCisJY2FzZSBHTE9CX1NCRF9JT0NUTF9SRUFEX0RBVEE6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYSBJT0NUTDogIgorCQkJICAgICAgICJSZWFkIG9uZSBwYWdlIGRhdGFcbiIpOworCQlyZXR1cm4gaW9jdGxfcmVhZF9wYWdlX2RhdGEoYXJnKTsKKwl9CisKKwlyZXR1cm4gLUVOT1RUWTsKK30KKworc3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBHTE9CX1NCRF9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBHTE9CX1NCRF9vcGVuLAorCS5yZWxlYXNlID0gR0xPQl9TQkRfcmVsZWFzZSwKKwkubG9ja2VkX2lvY3RsID0gR0xPQl9TQkRfaW9jdGwsCisJLmdldGdlbyA9IEdMT0JfU0JEX2dldGdlbywKK307CisKK3N0YXRpYyBpbnQgU0JEX3NldHVwX2RldmljZShzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiAqZGV2LCBpbnQgd2hpY2gpCit7CisJaW50IHJlc19ibGtzOworCXUzMiBzZWN0czsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBzcGVjdHJhX25hbmRfZGV2KSk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiUmVzZXJ2ZWQgJWQgYmxvY2tzICIKKwkJImZvciBPUyBpbWFnZSwgJWQgYmxvY2tzIGZvciBiYWQgYmxvY2sgcmVwbGFjZW1lbnQuXG4iLAorCQlnZXRfcmVzX2Jsa19udW1fb3MoKSwKKwkJZ2V0X3Jlc19ibGtfbnVtX2JhZF9ibGsoKSk7CisKKwlyZXNfYmxrcyA9IGdldF9yZXNfYmxrX251bV9iYWRfYmxrKCkgKyBnZXRfcmVzX2Jsa19udW1fb3MoKTsKKworCWRldi0+c2l6ZSA9ICh1NjQpSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSAqCisJCUlkZW50aWZ5RGV2aWNlRGF0YS5QYWdlc1BlckJsb2NrICoKKwkJKElkZW50aWZ5RGV2aWNlRGF0YS53RGF0YUJsb2NrTnVtIC0gcmVzX2Jsa3MpOworCisJcmVzX2Jsa3Nfb3MgPSBnZXRfcmVzX2Jsa19udW1fb3MoKTsKKworCXNwaW5fbG9ja19pbml0KCZkZXYtPnFsb2NrKTsKKworCWRldi0+dG1wX2J1ZiA9IGttYWxsb2MoSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnRtcF9idWYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8ga21hbGxvYyBtZW1vcnkgaW4gJXMgTGluZSAlZCwgZXhpdC5cbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQlnb3RvIG91dF92ZnJlZTsKKwl9CisKKwlkZXYtPnF1ZXVlID0gYmxrX2luaXRfcXVldWUoR0xPQl9TQkRfcmVxdWVzdCwgJmRldi0+cWxvY2spOworCWlmIChkZXYtPnF1ZXVlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiU3BlY3RyYTogUmVxdWVzdCBxdWV1ZSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuIgorCQkJIiBBYm9ydGluZ1xuICIpOworCQlnb3RvIG91dF92ZnJlZTsKKwl9CisJZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gZGV2OworCisJLyogQXMgTGludXggYmxvY2sgbGF5ZXIgZG9lbnMndCBzdXBwb3J0ID40S0IgaGFyZHdhcmUgc2VjdG9yLCAgKi8KKwkvKiBIZXJlIHdlIGZvcmNlIHJlcG9ydCA1MTIgYnl0ZSBoYXJkd2FyZSBzZWN0b3Igc2l6ZSB0byBLZXJuZWwgKi8KKwlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKGRldi0+cXVldWUsIDUxMik7CisKKwlibGtfcXVldWVfb3JkZXJlZChkZXYtPnF1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOX0ZMVVNILAorCQkJCQlTQkRfcHJlcGFyZV9mbHVzaCk7CisKKwlkZXYtPnRocmVhZCA9IGt0aHJlYWRfcnVuKHNwZWN0cmFfdHJhbnNfdGhyZWFkLCBkZXYsICJuYW5kX3RoZCIpOworCWlmIChJU19FUlIoZGV2LT50aHJlYWQpKSB7CisJCWJsa19jbGVhbnVwX3F1ZXVlKGRldi0+cXVldWUpOworCQl1bnJlZ2lzdGVyX2Jsa2RldihHTE9CX1NCRF9tYWpvcm51bSwgR0xPQl9TQkRfTkFNRSk7CisJCXJldHVybiBQVFJfRVJSKGRldi0+dGhyZWFkKTsKKwl9CisKKwlkZXYtPmdkID0gYWxsb2NfZGlzayhQQVJUSVRJT05TKTsKKwlpZiAoIWRldi0+Z2QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiU3BlY3RyYTogQ291bGQgbm90IGFsbG9jYXRlIGRpc2suIEFib3J0aW5nIFxuICIpOworCQlnb3RvIG91dF92ZnJlZTsKKwl9CisJZGV2LT5nZC0+bWFqb3IgPSBHTE9CX1NCRF9tYWpvcm51bTsKKwlkZXYtPmdkLT5maXJzdF9taW5vciA9IHdoaWNoICogUEFSVElUSU9OUzsKKwlkZXYtPmdkLT5mb3BzID0gJkdMT0JfU0JEX29wczsKKwlkZXYtPmdkLT5xdWV1ZSA9IGRldi0+cXVldWU7CisJZGV2LT5nZC0+cHJpdmF0ZV9kYXRhID0gZGV2OworCXNucHJpbnRmKGRldi0+Z2QtPmRpc2tfbmFtZSwgMzIsICIlcyVjIiwgR0xPQl9TQkRfTkFNRSwgd2hpY2ggKyAnYScpOworCisJc2VjdHMgPSBkZXYtPnNpemUgPj4gOTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiQ2FwYWNpdHkgc2VjdHM6ICVkXG4iLCBzZWN0cyk7CisJc2V0X2NhcGFjaXR5KGRldi0+Z2QsIHNlY3RzKTsKKworCWFkZF9kaXNrKGRldi0+Z2QpOworCisJcmV0dXJuIDA7CitvdXRfdmZyZWU6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCitzdGF0aWMgc3NpemVfdCBzaG93X25hbmRfYmxvY2tfbnVtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkoaW50KUlkZW50aWZ5RGV2aWNlRGF0YS53RGF0YUJsb2NrTnVtKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19uYW5kX3BhZ2VzX3Blcl9ibG9jayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJKGludClJZGVudGlmeURldmljZURhdGEuUGFnZXNQZXJCbG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFuZF9wYWdlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCShpbnQpSWRlbnRpZnlEZXZpY2VEYXRhLlBhZ2VEYXRhU2l6ZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW5kX2Jsb2NrX251bSwgMDQ0NCwgc2hvd19uYW5kX2Jsb2NrX251bSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobmFuZF9wYWdlc19wZXJfYmxvY2ssIDA0NDQsIHNob3dfbmFuZF9wYWdlc19wZXJfYmxvY2ssIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG5hbmRfcGFnZV9zaXplLCAwNDQ0LCBzaG93X25hbmRfcGFnZV9zaXplLCBOVUxMKTsKKworc3RhdGljIHZvaWQgY3JlYXRlX3N5c2ZzX2VudHJ5KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbmRfYmxvY2tfbnVtKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiAiCisJCQkiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBlbnRyeSBuYW5kX2Jsb2NrX251bS5cbiIpOworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFuZF9wYWdlc19wZXJfYmxvY2spKQorCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6ICIKKwkJImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZW50cnkgbmFuZF9wYWdlc19wZXJfYmxvY2suXG4iKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbmRfcGFnZV9zaXplKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiAiCisJCSJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJ5IG5hbmRfcGFnZV9zaXplLlxuIik7Cit9CisqLworCitzdGF0aWMgaW50IEdMT0JfU0JEX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCS8qIFNldCBkZWJ1ZyBvdXRwdXQgbGV2ZWwgKDB+MykgaGVyZS4gMyBpcyBtb3N0IHZlcmJvc2UgKi8KKwlwcmludGsoS0VSTl9BTEVSVCAiU3BlY3RyYTogJXNcbiIsIEdMT0JfdmVyc2lvbik7CisKKwltdXRleF9pbml0KCZzcGVjdHJhX2xvY2spOworCisJR0xPQl9TQkRfbWFqb3JudW0gPSByZWdpc3Rlcl9ibGtkZXYoMCwgR0xPQl9TQkRfTkFNRSk7CisJaWYgKEdMT0JfU0JEX21ham9ybnVtIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gZ2V0IHRoZSBtYWpvciAlZCBmb3IgU3BlY3RyYSIsCisJCSAgICAgICBHTE9CX1NCRF9tYWpvcm51bSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKFBBU1MgIT0gR0xPQl9GVExfRmxhc2hfSW5pdCgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogVW5hYmxlIHRvIEluaXRpYWxpemUgRmxhc2ggRGV2aWNlLiAiCisJCSAgICAgICAiQWJvcnRpbmdcbiIpOworCQlnb3RvIG91dF9mbGFzaF9yZWdpc3RlcjsKKwl9CisKKwkvKiBjcmVhdGVfc3lzZnNfZW50cnkoJmRldi0+ZGV2KTsgKi8KKworCWlmIChQQVNTICE9IEdMT0JfRlRMX0lkZW50aWZ5RGV2aWNlKCZJZGVudGlmeURldmljZURhdGEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogVW5hYmxlIHRvIFJlYWQgRmxhc2ggRGV2aWNlLiAiCisJCSAgICAgICAiQWJvcnRpbmdcbiIpOworCQlnb3RvIG91dF9mbGFzaF9yZWdpc3RlcjsKKwl9IGVsc2UgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiSW4gR0xPQl9TQkRfaW5pdDogIgorCQkJICAgICAgICJOdW0gYmxvY2tzPSVkLCBwYWdlc3BlcmJsb2NrPSVkLCAiCisJCQkgICAgICAgInBhZ2VkYXRhc2l6ZT0lZCwgRUNDQnl0ZXNQZXJTZWN0b3I9JWRcbiIsCisJCSAgICAgICAoaW50KUlkZW50aWZ5RGV2aWNlRGF0YS5OdW1CbG9ja3MsCisJCSAgICAgICAoaW50KUlkZW50aWZ5RGV2aWNlRGF0YS5QYWdlc1BlckJsb2NrLAorCQkgICAgICAgKGludClJZGVudGlmeURldmljZURhdGEuUGFnZURhdGFTaXplLAorCQkgICAgICAgKGludClJZGVudGlmeURldmljZURhdGEud0VDQ0J5dGVzUGVyU2VjdG9yKTsKKwl9CisKKwlwcmludGsoS0VSTl9BTEVSVCAiU3BlY3RyYTogc2VhcmNoaW5nIGJsb2NrIHRhYmxlLCBwbGVhc2Ugd2FpdCAuLi5cbiIpOworCWlmIChHTE9CX0ZUTF9Jbml0KCkgIT0gUEFTUykgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IFVuYWJsZSB0byBJbml0aWFsaXplIEZUTCBMYXllci4gIgorCQkgICAgICAgIkFib3J0aW5nXG4iKTsKKwkJZ290byBvdXRfZnRsX2ZsYXNoX3JlZ2lzdGVyOworCX0KKwlwcmludGsoS0VSTl9BTEVSVCAiU3BlY3RyYTogYmxvY2sgdGFibGUgaGFzIGJlZW4gZm91bmQuXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fREVWSUNFUzsgaSsrKQorCQlpZiAoU0JEX3NldHVwX2RldmljZSgmbmFuZF9kZXZpY2VbaV0sIGkpID09IC1FTk9NRU0pCisJCQlnb3RvIG91dF9mdGxfZmxhc2hfcmVnaXN0ZXI7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJICAgICAgICJTcGVjdHJhOiBtb2R1bGUgbG9hZGVkIHdpdGggbWFqb3IgbnVtYmVyICVkXG4iLAorCQkgICAgICAgR0xPQl9TQkRfbWFqb3JudW0pOworCisJcmV0dXJuIDA7CisKK291dF9mdGxfZmxhc2hfcmVnaXN0ZXI6CisJR0xPQl9GVExfQ2FjaGVfUmVsZWFzZSgpOworb3V0X2ZsYXNoX3JlZ2lzdGVyOgorCUdMT0JfRlRMX0ZsYXNoX1JlbGVhc2UoKTsKKwl1bnJlZ2lzdGVyX2Jsa2RldihHTE9CX1NCRF9tYWpvcm51bSwgR0xPQl9TQkRfTkFNRSk7CisJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBNb2R1bGUgbG9hZCBmYWlsZWQuXG4iKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgR0xPQl9TQkRfZXhpdCh2b2lkKQoreworCWludCBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RFVklDRVM7IGkrKykgeworCQlzdHJ1Y3Qgc3BlY3RyYV9uYW5kX2RldiAqZGV2ID0gJm5hbmRfZGV2aWNlW2ldOworCQlpZiAoZGV2LT5nZCkgeworCQkJZGVsX2dlbmRpc2soZGV2LT5nZCk7CisJCQlwdXRfZGlzayhkZXYtPmdkKTsKKwkJfQorCQlpZiAoZGV2LT5xdWV1ZSkKKwkJCWJsa19jbGVhbnVwX3F1ZXVlKGRldi0+cXVldWUpOworCQlrZnJlZShkZXYtPnRtcF9idWYpOworCX0KKworCXVucmVnaXN0ZXJfYmxrZGV2KEdMT0JfU0JEX21ham9ybnVtLCBHTE9CX1NCRF9OQU1FKTsKKworCW11dGV4X2xvY2soJnNwZWN0cmFfbG9jayk7CisJZm9yY2VfZmx1c2hfY2FjaGUoKTsKKwltdXRleF91bmxvY2soJnNwZWN0cmFfbG9jayk7CisKKwlHTE9CX0ZUTF9DYWNoZV9SZWxlYXNlKCk7CisKKwlHTE9CX0ZUTF9GbGFzaF9SZWxlYXNlKCk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJICAgICAgICJTcGVjdHJhIEZUTCBtb2R1bGUgKG1ham9yIG51bWJlciAlZCkgdW5sb2FkZWQuXG4iLAorCQkgICAgICAgR0xPQl9TQkRfbWFqb3JudW0pOworfQorCittb2R1bGVfaW5pdChHTE9CX1NCRF9pbml0KTsKK21vZHVsZV9leGl0KEdMT0JfU0JEX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWQ5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0ZGU1BPUlRfCisjZGVmaW5lIF9GRlNQT1JUXworCisjaW5jbHVkZSAiZmZzZGVmcy5oIgorCisjaWYgZGVmaW5lZCBfX0dOVUNfXworI2RlZmluZSBQQUNLRUQKKyNkZWZpbmUgUEFDS0VEX0dOVSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKKyNkZWZpbmUgVU5BTElHTkVECisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBmb3Igc3RyY3B5KCksIHN0cmljbXAoKSwgZXRjICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciBrbWFsbG9jKCksIGtmcmVlKCkgKi8KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogcHJpbnRrKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogZXZlcnl0aGluZy4uLiAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGVycm9yIGNvZGVzICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JLyogc2l6ZV90ICovCisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImZsYXNoLmgiCisKKyNkZWZpbmUgVkVSQk9TRSAgICAxCisKKyNkZWZpbmUgTkFORF9EQkdfV0FSTiAgMQorI2RlZmluZSBOQU5EX0RCR19ERUJVRyAyCisjZGVmaW5lIE5BTkRfREJHX1RSQUNFIDMKKworZXh0ZXJuIGludCBuYW5kX2RlYnVnX2xldmVsOworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBuYW5kX2RiZ19wcmludChsZXZlbCwgYXJncy4uLikJCQlcCisJZG8gewkJCQkJCVwKKwkJaWYgKGxldmVsIDw9IG5hbmRfZGVidWdfbGV2ZWwpCQlcCisJCQlwcmludGsoS0VSTl9BTEVSVCBhcmdzKTsJXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBuYW5kX2RiZ19wcmludChsZXZlbCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9CSUdfRU5ESUFOCisjZGVmaW5lIElOVkVSVFVJTlQxNih3KSAgICgodTE2KSgoKHUxNikodykpIDw8IDgpIHwgXAorCQkJICAgKHUxNikoKHUxNikodykgPj4gOCkpCisKKyNkZWZpbmUgSU5WRVJUVUlOVDMyKGR3KSAgKCgodTMyKShkdykgPDwgMjQpIHwgXAorCQkJICAgKCgodTMyKShkdykgPDwgOCkgJiAweDAwZmYwMDAwKSB8IFwKKwkJCSAgICgoKHUzMikoZHcpID4+IDgpICYgMHgwMDAwZmYwMCkgfCBcCisJCQkgICAoKHUzMikoZHcpID4+IDI0KSkKKyNlbHNlCisjZGVmaW5lIElOVkVSVFVJTlQxNih3KSAgIHcKKyNkZWZpbmUgSU5WRVJUVUlOVDMyKGR3KSAgZHcKKyNlbmRpZgorCitleHRlcm4gaW50IEdMT0JfQ2FsY19Vc2VkX0JpdHModTMyIG4pOworZXh0ZXJuIHU2NCBHTE9CX3U2NF9EaXYodTY0IGFkZHIsIHUzMiBkaXZpc29yKTsKK2V4dGVybiB1NjQgR0xPQl91NjRfUmVtYWluZGVyKHU2NCBhZGRyLCB1MzIgZGl2aXNvcl90eXBlKTsKKworI2VuZGlmIC8qIF9GRlNQT1JUXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0YWE1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmMKQEAgLTAsMCArMSw0NzMxIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZmxhc2guaCIKKyNpbmNsdWRlICJmZnNkZWZzLmgiCisjaW5jbHVkZSAibGxkLmgiCisjaW5jbHVkZSAibGxkX25hbmQuaCIKKyNpZiBDTURfRE1BCisjaW5jbHVkZSAibGxkX2NkbWEuaCIKKyNlbmRpZgorCisjZGVmaW5lIEJMS19GUk9NX0FERFIoYWRkcikgICgodTMyKShhZGRyID4+IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpKQorI2RlZmluZSBQQUdFX0ZST01fQUREUihhZGRyLCBCbG9jaykgICgodTE2KSgoYWRkciAtICh1NjQpQmxvY2sgKiBcCisJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSkgPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSkKKworI2RlZmluZSBJU19TUEFSRV9CTE9DSyhibGspICAgICAoQkFEX0JMT0NLICE9IChwYnRbYmxrXSAmXAorCUJBRF9CTE9DSykgJiYgU1BBUkVfQkxPQ0sgPT0gKHBidFtibGtdICYgU1BBUkVfQkxPQ0spKQorCisjZGVmaW5lIElTX0RBVEFfQkxPQ0soYmxrKSAgICAgICgwID09IChwYnRbYmxrXSAmIEJBRF9CTE9DSykpCisKKyNkZWZpbmUgSVNfRElTQ0FSREVEX0JMT0NLKGJsaykgKEJBRF9CTE9DSyAhPSAocGJ0W2Jsa10gJlwKKwlCQURfQkxPQ0spICYmIERJU0NBUkRfQkxPQ0sgPT0gKHBidFtibGtdICYgRElTQ0FSRF9CTE9DSykpCisKKyNkZWZpbmUgSVNfQkFEX0JMT0NLKGJsaykgICAgICAgKEJBRF9CTE9DSyA9PSAocGJ0W2Jsa10gJiBCQURfQkxPQ0spKQorCisjaWYgREVCVUdfQk5EUlkKK3ZvaWQgZGVidWdfYm91bmRhcnlfbGluZW5vX2Vycm9yKGludCBjaG5sLCBpbnQgbGltaXQsIGludCBubywKKwkJCQlpbnQgbGluZW5vLCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpZiAoY2hubCA+PSBsaW1pdCkKKwkJcHJpbnRrKEtFUk5fRVJSICJCb3VuZGFyeSBDaGVjayBGYWlsIHZhbHVlICVkID49IGxpbWl0ICVkLCAiCisJCSJhdCAgJXM6JWQuIE90aGVyIGluZm86JWQuIEFib3J0aW5nLi4uXG4iLAorCQljaG5sLCBsaW1pdCwgZmlsZW5hbWUsIGxpbmVubywgbm8pOworfQorLyogc3RhdGljIGludCBnbG9iYWxtZW1zaXplOyAqLworI2VuZGlmCisKK3N0YXRpYyB1MTYgRlRMX0NhY2hlX0lmX0hpdCh1NjQgZHdQYWdlQWRkcik7CitzdGF0aWMgaW50IEZUTF9DYWNoZV9SZWFkKHU2NCBkd1BhZ2VBZGRyKTsKK3N0YXRpYyB2b2lkIEZUTF9DYWNoZV9SZWFkX1BhZ2UodTggKnBEYXRhLCB1NjQgZHdQYWdlQWRkciwKKwkJCQl1MTYgY2FjaGVfYmxrKTsKK3N0YXRpYyB2b2lkIEZUTF9DYWNoZV9Xcml0ZV9QYWdlKHU4ICpwRGF0YSwgdTY0IGR3UGFnZUFkZHIsCisJCQkJIHU4IGNhY2hlX2JsaywgdTE2IGZsYWcpOworc3RhdGljIGludCBGVExfQ2FjaGVfV3JpdGUodm9pZCk7CitzdGF0aWMgaW50IEZUTF9DYWNoZV9Xcml0ZV9CYWNrKHU4ICpwRGF0YSwgdTY0IGJsa19hZGRyKTsKK3N0YXRpYyB2b2lkIEZUTF9DYWxjdWxhdGVfTFJVKHZvaWQpOworc3RhdGljIHUzMiBGVExfR2V0X0Jsb2NrX0luZGV4KHUzMiB3QmxvY2tOdW0pOworCitzdGF0aWMgaW50IEZUTF9TZWFyY2hfQmxvY2tfVGFibGVfSU5fQmxvY2sodTMyIEJUX0Jsb2NrLAorCQkJCQkgICB1OCBCVF9UYWcsIHUxNiAqUGFnZSk7CitzdGF0aWMgaW50IEZUTF9SZWFkX0Jsb2NrX1RhYmxlKHZvaWQpOworc3RhdGljIGludCBGVExfV3JpdGVfQmxvY2tfVGFibGUoaW50IHdGb3JjZSk7CitzdGF0aWMgaW50IEZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhKHZvaWQpOworc3RhdGljIGludCBGVExfQ2hlY2tfQmxvY2tfVGFibGUoaW50IHdPbGRUYWJsZSk7CitzdGF0aWMgaW50IEZUTF9TdGF0aWNfV2Vhcl9MZXZlbGluZyh2b2lkKTsKK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfQmxvY2tfVGFibGUodm9pZCk7CitzdGF0aWMgaW50IEZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKHZvaWQpOworCitzdGF0aWMgdTMyIEZUTF9HZXRfUGFnZV9OdW0odTY0IGxlbmd0aCk7CitzdGF0aWMgdTY0IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcih1NjQgYmxrX2FkZHIpOworCitzdGF0aWMgdTMyIEZUTF9SZXBsYWNlX09uZUJsb2NrKHUzMiB3QmxvY2tOdW0sCisJCQkJICAgICAgdTMyIHdSZXBsYWNlTnVtKTsKK3N0YXRpYyB1MzIgRlRMX1JlcGxhY2VfTFdCbG9jayh1MzIgd0Jsb2NrTnVtLAorCQkJCSAgICAgaW50ICpwR2FyYmFnZUNvbGxlY3QpOworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9NV0Jsb2NrKHZvaWQpOworc3RhdGljIGludCBGVExfUmVwbGFjZV9CbG9jayh1NjQgYmxrX2FkZHIpOworc3RhdGljIGludCBGVExfQWRqdXN0X1JlbGF0aXZlX0VyYXNlX0NvdW50KHUzMiBJbmRleF9vZl9NQVgpOworCitzdGF0aWMgaW50IEZUTF9GbGFzaF9FcnJvcl9IYW5kbGUodTggKnBEYXRhLCB1NjQgb2xkX3BhZ2VfYWRkciwgdTY0IGJsa19hZGRyKTsKKworc3RydWN0IGRldmljZV9pbmZvX3RhZyBEZXZpY2VJbmZvOworc3RydWN0IGZsYXNoX2NhY2hlX3RhZyBDYWNoZTsKK3N0YXRpYyBzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9pbmZvIGNhY2hlX2wyOworCitzdGF0aWMgdTggKmNhY2hlX2wyX3BhZ2VfYnVmOworc3RhdGljIHU4ICpjYWNoZV9sMl9ibGtfYnVmOworCit1OCAqZ19wQmxvY2tUYWJsZTsKK3U4ICpnX3BXZWFyQ291bnRlcjsKK3UxNiAqZ19wUmVhZENvdW50ZXI7Cit1MzIgKmdfcEJUQmxvY2tzOworc3RhdGljIHUxNiBnX3dCbG9ja1RhYmxlT2Zmc2V0Oworc3RhdGljIHUzMiBnX3dCbG9ja1RhYmxlSW5kZXg7CitzdGF0aWMgdTggZ19jQmxvY2tUYWJsZVN0YXR1czsKKworc3RhdGljIHU4ICpnX3BUZW1wQnVmOworc3RhdGljIHU4ICpmbGFnX2NoZWNrX2Jsa190YWJsZTsKK3N0YXRpYyB1OCAqdG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2s7CitzdGF0aWMgdTggKnNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2s7CitzdGF0aWMgdTggKnNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2s7CitzdGF0aWMgdTggKnRtcF9idWYxX3JlYWRfYmxrX3RhYmxlOworc3RhdGljIHU4ICp0bXBfYnVmMl9yZWFkX2Jsa190YWJsZTsKK3N0YXRpYyB1OCAqZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmc7CitzdGF0aWMgdTggKnRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGE7CitzdGF0aWMgdTggKnRtcF9idWZfcmVhZF9kaXN0dXJiYW5jZTsKKwordTggKmJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZTsKK3U4ICpidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlOwordTggKmJ1Zl9yZWFkX3BhZ2Vfc3BhcmU7Cit1OCAqYnVmX2dldF9iYWRfYmxvY2s7CisKKyNpZiAoUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUgJiYgQ01EX0RNQSkKK3N0cnVjdCBmbGFzaF9jYWNoZV9kZWx0YV9saXN0X3RhZyBpbnRfY2FjaGVbTUFYX0NIQU5TICsgTUFYX0RFU0NTXTsKK3N0cnVjdCBmbGFzaF9jYWNoZV90YWcgY2FjaGVfc3RhcnRfY29weTsKKyNlbmRpZgorCitpbnQgZ193TnVtRnJlZUJsb2NrczsKK3U4IGdfU0JEQ21kSW5kZXg7CisKK3N0YXRpYyB1OCAqZ19wSVBGOworc3RhdGljIHU4IGJ0X2ZsYWcgPSBGSVJTVF9CVF9JRDsKK3N0YXRpYyB1OCBidF9ibG9ja19jaGFuZ2VkOworCitzdGF0aWMgdTE2IGNhY2hlX2Jsb2NrX3RvX3dyaXRlOworc3RhdGljIHU4IGxhc3RfZXJhc2VkID0gRklSU1RfQlRfSUQ7CisKK3N0YXRpYyB1OCBHQ19DYWxsZWQ7CitzdGF0aWMgdTggQlRfR0NfQ2FsbGVkOworCisjaWYgQ01EX0RNQQorI2RlZmluZSBDT1BZX0JBQ0tfQlVGX05VTSAxMAorCitzdGF0aWMgdTggZnRsX2NtZF9jbnQ7ICAvKiBJbml0IHZhbHVlIGlzIDAgKi8KK3U4ICpnX3BCVERlbHRhOwordTggKmdfcEJURGVsdGFfRnJlZTsKK3U4ICpnX3BCVFN0YXJ0aW5nQ29weTsKK3U4ICpnX3BXZWFyQ291bnRlckNvcHk7Cit1MTYgKmdfcFJlYWRDb3VudGVyQ29weTsKK3U4ICpnX3BCbG9ja1RhYmxlQ29waWVzOwordTggKmdfcE5leHRCbG9ja1RhYmxlOworc3RhdGljIHU4ICpjcF9iYWNrX2J1Zl9jb3BpZXNbQ09QWV9CQUNLX0JVRl9OVU1dOworc3RhdGljIGludCBjcF9iYWNrX2J1Zl9pZHg7CisKK3N0YXRpYyB1OCAqZ190ZW1wX2J1ZjsKKworI3ByYWdtYSBwYWNrKHB1c2gsIDEpCisjcHJhZ21hIHBhY2soMSkKK3N0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgeworCXU4IGZ0bF9jbWRfY250OworCXU4IFZhbGlkRmllbGRzOworCXUxNiBnX3dCbG9ja1RhYmxlT2Zmc2V0OworCXUzMiBnX3dCbG9ja1RhYmxlSW5kZXg7CisJdTMyIEJUX0luZGV4OworCXUzMiBCVF9FbnRyeV9WYWx1ZTsKKwl1MzIgV0NfSW5kZXg7CisJdTggV0NfRW50cnlfVmFsdWU7CisJdTMyIFJDX0luZGV4OworCXUxNiBSQ19FbnRyeV9WYWx1ZTsKK307CisKKyNwcmFnbWEgcGFjayhwb3ApCisKK3N0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKnBfQlRhYmxlQ2hhbmdlc0RlbHRhOworI2VuZGlmCisKKworI2RlZmluZSBNQVJLX0JMT0NLX0FTX0JBRChibG9ja25vZGUpICAgICAgKGJsb2Nrbm9kZSB8PSBCQURfQkxPQ0spCisjZGVmaW5lIE1BUktfQkxLX0FTX0RJU0NBUkQoYmxrKSAgKGJsayA9IChibGsgJiB+U1BBUkVfQkxPQ0spIHwgRElTQ0FSRF9CTE9DSykKKworI2RlZmluZSBGVExfR2V0X0xCQVBCQV9UYWJsZV9NZW1fU2l6ZV9CeXRlcygpIChEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKlwKKwkJCQkJCXNpemVvZih1MzIpKQorI2RlZmluZSBGVExfR2V0X1dlYXJDb3VudGVyX1RhYmxlX01lbV9TaXplX0J5dGVzKCkgKERldmljZUluZm8ud0RhdGFCbG9ja051bSAqXAorCQkJCQkJc2l6ZW9mKHU4KSkKKyNkZWZpbmUgRlRMX0dldF9SZWFkQ291bnRlcl9UYWJsZV9NZW1fU2l6ZV9CeXRlcygpIChEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKlwKKwkJCQkJCXNpemVvZih1MTYpKQorI2lmIFNVUFBPUlRfTEFSR0VfQkxPQ0tOVU0KKyNkZWZpbmUgRlRMX0dldF9MQkFQQkFfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpIChEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKlwKKwkJCQkJCXNpemVvZih1OCkgKiAzKQorI2Vsc2UKKyNkZWZpbmUgRlRMX0dldF9MQkFQQkFfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpIChEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKlwKKwkJCQkJCXNpemVvZih1MTYpKQorI2VuZGlmCisjZGVmaW5lIEZUTF9HZXRfV2VhckNvdW50ZXJfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcyBcCisJRlRMX0dldF9XZWFyQ291bnRlcl9UYWJsZV9NZW1fU2l6ZV9CeXRlcworI2RlZmluZSBGVExfR2V0X1JlYWRDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMgXAorCUZUTF9HZXRfUmVhZENvdW50ZXJfVGFibGVfTWVtX1NpemVfQnl0ZXMKKworc3RhdGljIHUzMiBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXModm9pZCkKK3sKKwl1MzIgYnl0ZV9udW07CisKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpIHsKKwkJYnl0ZV9udW0gPSBGVExfR2V0X0xCQVBCQV9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCkgKworCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSArCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KTsKKwl9IGVsc2UgeworCQlieXRlX251bSA9IEZUTF9HZXRfTEJBUEJBX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKSArCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTgpOworCX0KKworCWJ5dGVfbnVtICs9IDQgKiBzaXplb2YodTgpOworCisJcmV0dXJuIGJ5dGVfbnVtOworfQorCitzdGF0aWMgdTE2ICBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXModm9pZCkKK3sKKwlyZXR1cm4gKHUxNilGVExfR2V0X1BhZ2VfTnVtKEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpKTsKK30KKworc3RhdGljIGludCBGVExfQ29weV9CbG9ja19UYWJsZV9Ub19GbGFzaCh1OCAqZmxhc2hCdWYsIHUzMiBzaXplVG9UeCwKKwkJCQkJdTMyIHNpemVUeGVkKQoreworCXUzMiB3Qnl0ZXNDb3BpZWQsIGJsa190Ymxfc2l6ZSwgd0J5dGVzOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwlibGtfdGJsX3NpemUgPSBGVExfR2V0X0xCQVBCQV9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCk7CisJZm9yICh3Qnl0ZXMgPSAwOworCSh3Qnl0ZXMgPCBzaXplVG9UeCkgJiYgKCh3Qnl0ZXMgKyBzaXplVHhlZCkgPCBibGtfdGJsX3NpemUpOworCXdCeXRlcysrKSB7CisjaWYgU1VQUE9SVF9MQVJHRV9CTE9DS05VTQorCQlmbGFzaEJ1Zlt3Qnl0ZXNdID0gKHU4KShwYnRbKHdCeXRlcyArIHNpemVUeGVkKSAvIDNdCisJCT4+ICgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDMpID8KKwkJKCgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDMpID09IDIpID8gMCA6IDgpIDogMTYpKSAmIDB4RkY7CisjZWxzZQorCQlmbGFzaEJ1Zlt3Qnl0ZXNdID0gKHU4KShwYnRbKHdCeXRlcyArIHNpemVUeGVkKSAvIDJdCisJCT4+ICgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpID8gMCA6IDgpKSAmIDB4RkY7CisjZW5kaWYKKwl9CisKKwlzaXplVHhlZCA9IChzaXplVHhlZCA+IGJsa190Ymxfc2l6ZSkgPyAoc2l6ZVR4ZWQgLSBibGtfdGJsX3NpemUpIDogMDsKKwlibGtfdGJsX3NpemUgPSBGVExfR2V0X1dlYXJDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKTsKKwl3Qnl0ZXNDb3BpZWQgPSB3Qnl0ZXM7CisJd0J5dGVzID0gKChibGtfdGJsX3NpemUgLSBzaXplVHhlZCkgPiAoc2l6ZVRvVHggLSB3Qnl0ZXNDb3BpZWQpKSA/CisJCShzaXplVG9UeCAtIHdCeXRlc0NvcGllZCkgOiAoYmxrX3RibF9zaXplIC0gc2l6ZVR4ZWQpOworCW1lbWNweShmbGFzaEJ1ZiArIHdCeXRlc0NvcGllZCwgZ19wV2VhckNvdW50ZXIgKyBzaXplVHhlZCwgd0J5dGVzKTsKKworCXNpemVUeGVkID0gKHNpemVUeGVkID4gYmxrX3RibF9zaXplKSA/IChzaXplVHhlZCAtIGJsa190Ymxfc2l6ZSkgOiAwOworCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKSB7CisJCWJsa190Ymxfc2l6ZSA9IEZUTF9HZXRfUmVhZENvdW50ZXJfVGFibGVfRmxhc2hfU2l6ZV9CeXRlcygpOworCQl3Qnl0ZXNDb3BpZWQgKz0gd0J5dGVzOworCQlmb3IgKHdCeXRlcyA9IDA7ICgod0J5dGVzICsgd0J5dGVzQ29waWVkKSA8IHNpemVUb1R4KSAmJgorCQkJKCh3Qnl0ZXMgKyBzaXplVHhlZCkgPCBibGtfdGJsX3NpemUpOyB3Qnl0ZXMrKykKKwkJCWZsYXNoQnVmW3dCeXRlcyArIHdCeXRlc0NvcGllZF0gPQorCQkJKGdfcFJlYWRDb3VudGVyWyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAyXSA+PgorCQkJKCgod0J5dGVzICsgc2l6ZVR4ZWQpICUgMikgPyAwIDogOCkpICYgMHhGRjsKKwl9CisKKwlyZXR1cm4gd0J5dGVzQ29waWVkICsgd0J5dGVzOworfQorCitzdGF0aWMgaW50IEZUTF9Db3B5X0Jsb2NrX1RhYmxlX0Zyb21fRmxhc2godTggKmZsYXNoQnVmLAorCQkJCXUzMiBzaXplVG9UeCwgdTMyIHNpemVUeGVkKQoreworCXUzMiB3Qnl0ZXNDb3BpZWQsIGJsa190Ymxfc2l6ZSwgd0J5dGVzOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwlibGtfdGJsX3NpemUgPSBGVExfR2V0X0xCQVBCQV9UYWJsZV9GbGFzaF9TaXplX0J5dGVzKCk7CisJZm9yICh3Qnl0ZXMgPSAwOyAod0J5dGVzIDwgc2l6ZVRvVHgpICYmCisJCSgod0J5dGVzICsgc2l6ZVR4ZWQpIDwgYmxrX3RibF9zaXplKTsgd0J5dGVzKyspIHsKKyNpZiBTVVBQT1JUX0xBUkdFX0JMT0NLTlVNCisJCWlmICghKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAzKSkKKwkJCXBidFsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gM10gPSAwOworCQlwYnRbKHdCeXRlcyArIHNpemVUeGVkKSAvIDNdIHw9CisJCQkoZmxhc2hCdWZbd0J5dGVzXSA8PCAoKCh3Qnl0ZXMgKyBzaXplVHhlZCkgJSAzKSA/CisJCQkoKCgod0J5dGVzICsgc2l6ZVR4ZWQpICUgMykgPT0gMikgPyAwIDogOCkgOiAxNikpOworI2Vsc2UKKwkJaWYgKCEoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpKQorCQkJcGJ0Wyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAyXSA9IDA7CisJCXBidFsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gMl0gfD0KKwkJCShmbGFzaEJ1Zlt3Qnl0ZXNdIDw8ICgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpID8KKwkJCTAgOiA4KSk7CisjZW5kaWYKKwl9CisKKwlzaXplVHhlZCA9IChzaXplVHhlZCA+IGJsa190Ymxfc2l6ZSkgPyAoc2l6ZVR4ZWQgLSBibGtfdGJsX3NpemUpIDogMDsKKwlibGtfdGJsX3NpemUgPSBGVExfR2V0X1dlYXJDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKTsKKwl3Qnl0ZXNDb3BpZWQgPSB3Qnl0ZXM7CisJd0J5dGVzID0gKChibGtfdGJsX3NpemUgLSBzaXplVHhlZCkgPiAoc2l6ZVRvVHggLSB3Qnl0ZXNDb3BpZWQpKSA/CisJCShzaXplVG9UeCAtIHdCeXRlc0NvcGllZCkgOiAoYmxrX3RibF9zaXplIC0gc2l6ZVR4ZWQpOworCW1lbWNweShnX3BXZWFyQ291bnRlciArIHNpemVUeGVkLCBmbGFzaEJ1ZiArIHdCeXRlc0NvcGllZCwgd0J5dGVzKTsKKwlzaXplVHhlZCA9IChzaXplVHhlZCA+IGJsa190Ymxfc2l6ZSkgPyAoc2l6ZVR4ZWQgLSBibGtfdGJsX3NpemUpIDogMDsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQl3Qnl0ZXNDb3BpZWQgKz0gd0J5dGVzOworCQlibGtfdGJsX3NpemUgPSBGVExfR2V0X1JlYWRDb3VudGVyX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKTsKKwkJZm9yICh3Qnl0ZXMgPSAwOyAoKHdCeXRlcyArIHdCeXRlc0NvcGllZCkgPCBzaXplVG9UeCkgJiYKKwkJCSgod0J5dGVzICsgc2l6ZVR4ZWQpIDwgYmxrX3RibF9zaXplKTsgd0J5dGVzKyspIHsKKwkJCWlmICgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpKQorCQkJCWdfcFJlYWRDb3VudGVyWyh3Qnl0ZXMgKyBzaXplVHhlZCkgLyAyXSA9IDA7CisJCQlnX3BSZWFkQ291bnRlclsod0J5dGVzICsgc2l6ZVR4ZWQpIC8gMl0gfD0KKwkJCQkoZmxhc2hCdWZbd0J5dGVzXSA8PAorCQkJCSgoKHdCeXRlcyArIHNpemVUeGVkKSAlIDIpID8gMCA6IDgpKTsKKwkJfQorCX0KKworCXJldHVybiB3Qnl0ZXNDb3BpZWQrd0J5dGVzOworfQorCitzdGF0aWMgaW50IEZUTF9JbnNlcnRfQmxvY2tfVGFibGVfU2lnbmF0dXJlKHU4ICpidWYsIHU4IHRhZykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBCVFNJR19CWVRFUzsgaSsrKQorCQlidWZbQlRTSUdfT0ZGU0VUICsgaV0gPQorCQkoKHRhZyArIChpICogQlRTSUdfREVMVEEpIC0gRklSU1RfQlRfSUQpICUKKwkJKDEgKyBMQVNUX0JUX0lELUZJUlNUX0JUX0lEKSkgKyBGSVJTVF9CVF9JRDsKKworCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgaW50IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZyh1OCAqYnVmLCB1OCAqKnRhZ2FycmF5KQoreworCXN0YXRpYyB1OCB0YWdbQlRTSUdfQllURVMgPj4gMV07CisJaW50IGksIGosIGssIHRhZ2ksIHRhZ3RlbXAsIHN0YXR1czsKKworCSp0YWdhcnJheSA9ICh1OCAqKXRhZzsKKwl0YWdpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAoQlRTSUdfQllURVMgLSAxKTsgaSsrKSB7CisJCWZvciAoaiA9IGkgKyAxOyAoaiA8IEJUU0lHX0JZVEVTKSAmJgorCQkJKHRhZ2kgPCAoQlRTSUdfQllURVMgPj4gMSkpOyBqKyspIHsKKwkJCXRhZ3RlbXAgPSBidWZbQlRTSUdfT0ZGU0VUICsgal0gLQorCQkJCWJ1ZltCVFNJR19PRkZTRVQgKyBpXTsKKwkJCWlmICh0YWd0ZW1wICYmICEodGFndGVtcCAlIEJUU0lHX0RFTFRBKSkgeworCQkJCXRhZ3RlbXAgPSAoYnVmW0JUU0lHX09GRlNFVCArIGldICsKKwkJCQkJKDEgKyBMQVNUX0JUX0lEIC0gRklSU1RfQlRfSUQpIC0KKwkJCQkJKGkgKiBCVFNJR19ERUxUQSkpICUKKwkJCQkJKDEgKyBMQVNUX0JUX0lEIC0gRklSU1RfQlRfSUQpOworCQkJCXN0YXR1cyA9IEZBSUw7CisJCQkJZm9yIChrID0gMDsgayA8IHRhZ2k7IGsrKykgeworCQkJCQlpZiAodGFndGVtcCA9PSB0YWdba10pCisJCQkJCQlzdGF0dXMgPSBQQVNTOworCQkJCX0KKworCQkJCWlmIChzdGF0dXMgPT0gRkFJTCkgeworCQkJCQl0YWdbdGFnaSsrXSA9IHRhZ3RlbXA7CisJCQkJCWkgPSAoaiA9PSAoaSArIDEpKSA/IGkgKyAxIDogaTsKKwkJCQkJaiA9IChqID09IChpICsgMSkpID8gaSArIDEgOiBpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB0YWdpOworfQorCisKK3N0YXRpYyBpbnQgRlRMX0V4ZWN1dGVfU1BMX1JlY292ZXJ5KHZvaWQpCit7CisJdTMyIGosIGJsb2NrLCBibGtzOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJaW50IHJldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWJsa3MgPSBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwlmb3IgKGogPSAwOyBqIDw9IGJsa3M7IGorKykgeworCQlibG9jayA9IChwYnRbal0pOworCQlpZiAoKChibG9jayAmIEJBRF9CTE9DSykgIT0gQkFEX0JMT0NLKSAmJgorCQkJKChibG9jayAmIFNQQVJFX0JMT0NLKSA9PSBTUEFSRV9CTE9DSykpIHsKKwkJCXJldCA9ICBHTE9CX0xMRF9FcmFzZV9CbG9jayhibG9jayAmIH5CQURfQkxPQ0spOworCQkJaWYgKEZBSUwgPT0gcmV0KSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkJCSJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgIgorCQkJCQkiZ2VuZXJhdGVkIVxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCQkJKGludCkoYmxvY2sgJiB+QkFEX0JMT0NLKSk7CisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2pdKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0lkZW50aWZ5RGV2aWNlCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBpZGVudGlmeSBkYXRhIHN0cnVjdHVyZQorKiBPdXRwdXRzOiAgICAgIFBBU1MgLyBGQUlMCisqIERlc2NyaXB0aW9uOiAgdGhlIGlkZW50aWZ5IGRhdGEgc3RydWN0dXJlIGlzIGZpbGxlZCBpbiB3aXRoCisqICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGZvciB0aGUgYmxvY2sgZHJpdmVyLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9JZGVudGlmeURldmljZShzdHJ1Y3Qgc3BlY3RyYV9pbmRlbnRmeV9kZXZfdGFnICpkZXZfZGF0YSkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlkZXZfZGF0YS0+TnVtQmxvY2tzID0gRGV2aWNlSW5mby53VG90YWxCbG9ja3M7CisJZGV2X2RhdGEtPlBhZ2VzUGVyQmxvY2sgPSBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOworCWRldl9kYXRhLT5QYWdlRGF0YVNpemUgPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJZGV2X2RhdGEtPndFQ0NCeXRlc1BlclNlY3RvciA9IERldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yOworCWRldl9kYXRhLT53RGF0YUJsb2NrTnVtID0gRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOworCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qIC4uLi4uICovCitzdGF0aWMgaW50IGFsbG9jYXRlX21lbW9yeSh2b2lkKQoreworCXUzMiBibG9ja190YWJsZV9zaXplLCBwYWdlX3NpemUsIGJsb2NrX3NpemUsIG1lbV9zaXplOworCXUzMiB0b3RhbF9ieXRlcyA9IDA7CisJaW50IGk7CisjaWYgQ01EX0RNQQorCWludCBqOworI2VuZGlmCisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcGFnZV9zaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJYmxvY2tfc2l6ZSA9IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2sgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlibG9ja190YWJsZV9zaXplID0gRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICoKKwkJKHNpemVvZih1MzIpICsgc2l6ZW9mKHU4KSArIHNpemVvZih1MTYpKTsKKwlibG9ja190YWJsZV9zaXplICs9IChEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLQorCQkoYmxvY2tfdGFibGVfc2l6ZSAlIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSkpICUKKwkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgYmxvY2sgdGFibGVzICovCisJZ19wQmxvY2tUYWJsZSA9IGttYWxsb2MoYmxvY2tfdGFibGVfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BCbG9ja1RhYmxlKQorCQlnb3RvIGJsb2NrX3RhYmxlX2ZhaWw7CisJbWVtc2V0KGdfcEJsb2NrVGFibGUsIDAsIGJsb2NrX3RhYmxlX3NpemUpOworCXRvdGFsX2J5dGVzICs9IGJsb2NrX3RhYmxlX3NpemU7CisKKwlnX3BXZWFyQ291bnRlciA9ICh1OCAqKShnX3BCbG9ja1RhYmxlICsKKwkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikpOworCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKQorCQlnX3BSZWFkQ291bnRlciA9ICh1MTYgKikoZ19wQmxvY2tUYWJsZSArCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKgorCQkJKHNpemVvZih1MzIpICsgc2l6ZW9mKHU4KSkpOworCisJLyogTWFsbG9jIG1lbW9yeSBhbmQgaW5pdCBmb3IgY2FjaGUgaXRlbXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0FDSEVfSVRFTV9OVU07IGkrKykgeworCQlDYWNoZS5hcnJheVtpXS5hZGRyZXNzID0gTkFORF9DQUNIRV9JTklUX0FERFI7CisJCUNhY2hlLmFycmF5W2ldLnVzZV9jbnQgPSAwOworCQlDYWNoZS5hcnJheVtpXS5jaGFuZ2VkID0gQ0xFQVI7CisJCUNhY2hlLmFycmF5W2ldLmJ1ZiA9IGttYWxsb2MoQ2FjaGUuY2FjaGVfaXRlbV9zaXplLAorCQkJR0ZQX0FUT01JQyk7CisJCWlmICghQ2FjaGUuYXJyYXlbaV0uYnVmKQorCQkJZ290byBjYWNoZV9pdGVtX2ZhaWw7CisJCW1lbXNldChDYWNoZS5hcnJheVtpXS5idWYsIDAsIENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSk7CisJCXRvdGFsX2J5dGVzICs9IENhY2hlLmNhY2hlX2l0ZW1fc2l6ZTsKKwl9CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBJUEYgKi8KKwlnX3BJUEYgPSBrbWFsbG9jKHBhZ2Vfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BJUEYpCisJCWdvdG8gaXBmX2ZhaWw7CisJbWVtc2V0KGdfcElQRiwgMCwgcGFnZV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBwYWdlX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBkYXRhIG1lcmdpbmcgZHVyaW5nIExldmVsMiBDYWNoZSBmbHVzaCAqLworCWNhY2hlX2wyX3BhZ2VfYnVmID0ga21hbGxvYyhwYWdlX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghY2FjaGVfbDJfcGFnZV9idWYpCisJCWdvdG8gY2FjaGVfbDJfcGFnZV9idWZfZmFpbDsKKwltZW1zZXQoY2FjaGVfbDJfcGFnZV9idWYsIDB4ZmYsIHBhZ2Vfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gcGFnZV9zaXplOworCisJY2FjaGVfbDJfYmxrX2J1ZiA9IGttYWxsb2MoYmxvY2tfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjYWNoZV9sMl9ibGtfYnVmKQorCQlnb3RvIGNhY2hlX2wyX2Jsa19idWZfZmFpbDsKKwltZW1zZXQoY2FjaGVfbDJfYmxrX2J1ZiwgMHhmZiwgYmxvY2tfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gYmxvY2tfc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIHRlbXAgYnVmZmVyICovCisJZ19wVGVtcEJ1ZiA9IGttYWxsb2MoQ2FjaGUuY2FjaGVfaXRlbV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWdfcFRlbXBCdWYpCisJCWdvdG8gVGVtcF9idWZfZmFpbDsKKwltZW1zZXQoZ19wVGVtcEJ1ZiwgMCwgQ2FjaGUuY2FjaGVfaXRlbV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBDYWNoZS5jYWNoZV9pdGVtX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBibG9jayB0YWJsZSBibG9ja3MgKi8KKwltZW1fc2l6ZSA9ICgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKSAqIHNpemVvZih1MzIpOworCWdfcEJUQmxvY2tzID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BCVEJsb2NrcykKKwkJZ290byBidF9ibG9ja3NfZmFpbDsKKwltZW1zZXQoZ19wQlRCbG9ja3MsIDB4ZmYsIG1lbV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBtZW1fc2l6ZTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGZ1bmN0aW9uIEZUTF9DaGVja19CbG9ja19UYWJsZSAqLworCWZsYWdfY2hlY2tfYmxrX3RhYmxlID0ga21hbGxvYyhEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0sIEdGUF9BVE9NSUMpOworCWlmICghZmxhZ19jaGVja19ibGtfdGFibGUpCisJCWdvdG8gZmxhZ19jaGVja19ibGtfdGFibGVfZmFpbDsKKwl0b3RhbF9ieXRlcyArPSBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBmdW5jdGlvbiBGVExfU2VhcmNoX0Jsb2NrX1RhYmxlX0lOX0Jsb2NrICovCisJdG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2sgPSBrbWFsbG9jKHBhZ2Vfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0bXBfYnVmX3NlYXJjaF9idF9pbl9ibG9jaykKKwkJZ290byB0bXBfYnVmX3NlYXJjaF9idF9pbl9ibG9ja19mYWlsOworCW1lbXNldCh0bXBfYnVmX3NlYXJjaF9idF9pbl9ibG9jaywgMHhmZiwgcGFnZV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBwYWdlX3NpemU7CisKKwltZW1fc2l6ZSA9IERldmljZUluZm8ud1BhZ2VTaXplIC0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCXNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2sgPSBrbWFsbG9jKG1lbV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNwYXJlX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spCisJCWdvdG8gc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9ja19mYWlsOworCW1lbXNldChzcGFyZV9idWZfc2VhcmNoX2J0X2luX2Jsb2NrLCAweGZmLCBtZW1fc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gbWVtX3NpemU7CisKKwlzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrKQorCQlnb3RvIHNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2tfZmFpbDsKKwltZW1zZXQoc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9jaywgMHhmZiwgbWVtX3NpemUpOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgZnVuY3Rpb24gRlRMX1JlYWRfQmxvY2tfVGFibGUgKi8KKwl0bXBfYnVmMV9yZWFkX2Jsa190YWJsZSA9IGttYWxsb2MocGFnZV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXRtcF9idWYxX3JlYWRfYmxrX3RhYmxlKQorCQlnb3RvIHRtcF9idWYxX3JlYWRfYmxrX3RhYmxlX2ZhaWw7CisJbWVtc2V0KHRtcF9idWYxX3JlYWRfYmxrX3RhYmxlLCAweGZmLCBwYWdlX3NpemUpOworCXRvdGFsX2J5dGVzICs9IHBhZ2Vfc2l6ZTsKKworCXRtcF9idWYyX3JlYWRfYmxrX3RhYmxlID0ga21hbGxvYyhwYWdlX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghdG1wX2J1ZjJfcmVhZF9ibGtfdGFibGUpCisJCWdvdG8gdG1wX2J1ZjJfcmVhZF9ibGtfdGFibGVfZmFpbDsKKwltZW1zZXQodG1wX2J1ZjJfcmVhZF9ibGtfdGFibGUsIDB4ZmYsIHBhZ2Vfc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gcGFnZV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgZnVuY3Rpb24gRlRMX1N0YXRpY19XZWFyX0xldmVsaW5nICovCisJZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmcgPSBrbWFsbG9jKERldmljZUluZm8ud0RhdGFCbG9ja051bSwKKwkJCQkJR0ZQX0FUT01JQyk7CisJaWYgKCFmbGFnc19zdGF0aWNfd2Vhcl9sZXZlbGluZykKKwkJZ290byBmbGFnc19zdGF0aWNfd2Vhcl9sZXZlbGluZ19mYWlsOworCXRvdGFsX2J5dGVzICs9IERldmljZUluZm8ud0RhdGFCbG9ja051bTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIGZ1bmN0aW9uIEZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhICovCisJaWYgKEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9QYWdlcygpID4gMykKKwkJbWVtX3NpemUgPSBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfQnl0ZXMoKSAtCisJCQkJMiAqIERldmljZUluZm8ud1BhZ2VTaXplOworCWVsc2UKKwkJbWVtX3NpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwl0bXBfYnVmX3dyaXRlX2Jsa190YWJsZV9kYXRhID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0bXBfYnVmX3dyaXRlX2Jsa190YWJsZV9kYXRhKQorCQlnb3RvIHRtcF9idWZfd3JpdGVfYmxrX3RhYmxlX2RhdGFfZmFpbDsKKwltZW1zZXQodG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YSwgMHhmZiwgbWVtX3NpemUpOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgZnVuY3Rpb24gRlRMX1JlYWRfRGlzdHVyYmFuY2UgKi8KKwl0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2UgPSBrbWFsbG9jKGJsb2NrX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghdG1wX2J1Zl9yZWFkX2Rpc3R1cmJhbmNlKQorCQlnb3RvIHRtcF9idWZfcmVhZF9kaXN0dXJiYW5jZV9mYWlsOworCW1lbXNldCh0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2UsIDB4ZmYsIGJsb2NrX3NpemUpOworCXRvdGFsX2J5dGVzICs9IGJsb2NrX3NpemU7CisKKwkvKiBBbGxvYyBtZW0gZm9yIGZ1bmN0aW9uIE5BTkRfUmVhZF9QYWdlX01haW5fU3BhcmUgb2YgbGxkX25hbmQuYyAqLworCWJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZSA9IGttYWxsb2MoRGV2aWNlSW5mby53UGFnZVNpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmX3JlYWRfcGFnZV9tYWluX3NwYXJlKQorCQlnb3RvIGJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZV9mYWlsOworCXRvdGFsX2J5dGVzICs9IERldmljZUluZm8ud1BhZ2VTaXplOworCisJLyogQWxsb2MgbWVtIGZvciBmdW5jdGlvbiBOQU5EX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSBvZiBsbGRfbmFuZC5jICovCisJYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZSA9IGttYWxsb2MoRGV2aWNlSW5mby53UGFnZVNpemUsIEdGUF9BVE9NSUMpOworCWlmICghYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZSkKKwkJZ290byBidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlX2ZhaWw7CisJdG90YWxfYnl0ZXMgKz0gRGV2aWNlSW5mby53UGFnZVNpemU7CisKKwkvKiBBbGxvYyBtZW0gZm9yIGZ1bmN0aW9uIE5BTkRfUmVhZF9QYWdlX1NwYXJlIG9mIGxsZF9uYW5kLmMgKi8KKwlidWZfcmVhZF9wYWdlX3NwYXJlID0ga21hbGxvYyhEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1Zl9yZWFkX3BhZ2Vfc3BhcmUpCisJCWdvdG8gYnVmX3JlYWRfcGFnZV9zcGFyZV9mYWlsOworCW1lbXNldChidWZfcmVhZF9wYWdlX3NwYXJlLCAweGZmLCBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplKTsKKwl0b3RhbF9ieXRlcyArPSBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplOworCisJLyogQWxsb2MgbWVtIGZvciBmdW5jdGlvbiBOQU5EX0dldF9CYWRfQmxvY2sgb2YgbGxkX25hbmQuYyAqLworCWJ1Zl9nZXRfYmFkX2Jsb2NrID0ga21hbGxvYyhEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1Zl9nZXRfYmFkX2Jsb2NrKQorCQlnb3RvIGJ1Zl9nZXRfYmFkX2Jsb2NrX2ZhaWw7CisJbWVtc2V0KGJ1Zl9nZXRfYmFkX2Jsb2NrLCAweGZmLCBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplKTsKKwl0b3RhbF9ieXRlcyArPSBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplOworCisjaWYgQ01EX0RNQQorCWdfdGVtcF9idWYgPSBrbWFsbG9jKGJsb2NrX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ190ZW1wX2J1ZikKKwkJZ290byB0ZW1wX2J1Zl9mYWlsOworCW1lbXNldChnX3RlbXBfYnVmLCAweGZmLCBibG9ja19zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBibG9ja19zaXplOworCisJLyogTWFsbG9jIG1lbW9yeSBmb3IgY29weSBvZiBibG9jayB0YWJsZSB1c2VkIGluIENETUEgbW9kZSAqLworCWdfcEJUU3RhcnRpbmdDb3B5ID0ga21hbGxvYyhibG9ja190YWJsZV9zaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWdfcEJUU3RhcnRpbmdDb3B5KQorCQlnb3RvIGJ0X3N0YXJ0aW5nX2NvcHk7CisJbWVtc2V0KGdfcEJUU3RhcnRpbmdDb3B5LCAwLCBibG9ja190YWJsZV9zaXplKTsKKwl0b3RhbF9ieXRlcyArPSBibG9ja190YWJsZV9zaXplOworCisJZ19wV2VhckNvdW50ZXJDb3B5ID0gKHU4ICopKGdfcEJUU3RhcnRpbmdDb3B5ICsKKwkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUzMikpOworCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKQorCQlnX3BSZWFkQ291bnRlckNvcHkgPSAodTE2ICopKGdfcEJUU3RhcnRpbmdDb3B5ICsKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqCisJCQkoc2l6ZW9mKHUzMikgKyBzaXplb2YodTgpKSk7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBibG9jayB0YWJsZSBjb3BpZXMgKi8KKwltZW1fc2l6ZSA9IDUgKiBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKSArCisJCQk1ICogRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KTsKKwlpZiAoRGV2aWNlSW5mby5NTENEZXZpY2UpCisJCW1lbV9zaXplICs9IDUgKiBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KTsKKwlnX3BCbG9ja1RhYmxlQ29waWVzID0ga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFnX3BCbG9ja1RhYmxlQ29waWVzKQorCQlnb3RvIGJsa190YWJsZV9jb3BpZXNfZmFpbDsKKwltZW1zZXQoZ19wQmxvY2tUYWJsZUNvcGllcywgMCwgbWVtX3NpemUpOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworCWdfcE5leHRCbG9ja1RhYmxlID0gZ19wQmxvY2tUYWJsZUNvcGllczsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIEJsb2NrIFRhYmxlIERlbHRhICovCisJbWVtX3NpemUgPSBNQVhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisJZ19wQlREZWx0YSA9IGttYWxsb2MobWVtX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICghZ19wQlREZWx0YSkKKwkJZ290byBidF9kZWx0YV9mYWlsOworCW1lbXNldChnX3BCVERlbHRhLCAwLCBtZW1fc2l6ZSk7CisJdG90YWxfYnl0ZXMgKz0gbWVtX3NpemU7CisJZ19wQlREZWx0YV9GcmVlID0gZ19wQlREZWx0YTsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIENvcHkgQmFjayBCdWZmZXJzICovCisJZm9yIChqID0gMDsgaiA8IENPUFlfQkFDS19CVUZfTlVNOyBqKyspIHsKKwkJY3BfYmFja19idWZfY29waWVzW2pdID0ga21hbGxvYyhibG9ja19zaXplLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFjcF9iYWNrX2J1Zl9jb3BpZXNbal0pCisJCQlnb3RvIGNwX2JhY2tfYnVmX2NvcGllc19mYWlsOworCQltZW1zZXQoY3BfYmFja19idWZfY29waWVzW2pdLCAwLCBibG9ja19zaXplKTsKKwkJdG90YWxfYnl0ZXMgKz0gYmxvY2tfc2l6ZTsKKwl9CisJY3BfYmFja19idWZfaWR4ID0gMDsKKworCS8qIE1hbGxvYyBtZW1vcnkgZm9yIHBlbmRpbmcgY29tbWFuZHMgbGlzdCAqLworCW1lbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwZW5kaW5nX2NtZCkgKiBNQVhfREVTQ1M7CisJaW5mby5wY21kcyA9IGt6YWxsb2MobWVtX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghaW5mby5wY21kcykKKwkJZ290byBwZW5kaW5nX2NtZHNfYnVmX2ZhaWw7CisJdG90YWxfYnl0ZXMgKz0gbWVtX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBDRE1BIGRlc2NyaXB0ZXIgdGFibGUgKi8KKwltZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yKSAqIE1BWF9ERVNDUzsKKwlpbmZvLmNkbWFfZGVzY19idWYgPSBremFsbG9jKG1lbV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8uY2RtYV9kZXNjX2J1ZikKKwkJZ290byBjZG1hX2Rlc2NfYnVmX2ZhaWw7CisJdG90YWxfYnl0ZXMgKz0gbWVtX3NpemU7CisKKwkvKiBNYWxsb2MgbWVtb3J5IGZvciBNZW1jcHkgZGVzY3JpcHRlciB0YWJsZSAqLworCW1lbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtZW1jcHlfZGVzY3JpcHRvcikgKiBNQVhfREVTQ1M7CisJaW5mby5tZW1jcF9kZXNjX2J1ZiA9IGt6YWxsb2MobWVtX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghaW5mby5tZW1jcF9kZXNjX2J1ZikKKwkJZ290byBtZW1jcF9kZXNjX2J1Zl9mYWlsOworCXRvdGFsX2J5dGVzICs9IG1lbV9zaXplOworI2VuZGlmCisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkiVG90YWwgbWVtb3J5IGFsbG9jYXRlZCBpbiBGVEwgbGF5ZXI6ICVkXG4iLCB0b3RhbF9ieXRlcyk7CisKKwlyZXR1cm4gUEFTUzsKKworI2lmIENNRF9ETUEKK21lbWNwX2Rlc2NfYnVmX2ZhaWw6CisJa2ZyZWUoaW5mby5jZG1hX2Rlc2NfYnVmKTsKK2NkbWFfZGVzY19idWZfZmFpbDoKKwlrZnJlZShpbmZvLnBjbWRzKTsKK3BlbmRpbmdfY21kc19idWZfZmFpbDoKK2NwX2JhY2tfYnVmX2NvcGllc19mYWlsOgorCWotLTsKKwlmb3IgKDsgaiA+PSAwOyBqLS0pCisJCWtmcmVlKGNwX2JhY2tfYnVmX2NvcGllc1tqXSk7CisJa2ZyZWUoZ19wQlREZWx0YSk7CitidF9kZWx0YV9mYWlsOgorCWtmcmVlKGdfcEJsb2NrVGFibGVDb3BpZXMpOworYmxrX3RhYmxlX2NvcGllc19mYWlsOgorCWtmcmVlKGdfcEJUU3RhcnRpbmdDb3B5KTsKK2J0X3N0YXJ0aW5nX2NvcHk6CisJa2ZyZWUoZ190ZW1wX2J1Zik7Cit0ZW1wX2J1Zl9mYWlsOgorCWtmcmVlKGJ1Zl9nZXRfYmFkX2Jsb2NrKTsKKyNlbmRpZgorCitidWZfZ2V0X2JhZF9ibG9ja19mYWlsOgorCWtmcmVlKGJ1Zl9yZWFkX3BhZ2Vfc3BhcmUpOworYnVmX3JlYWRfcGFnZV9zcGFyZV9mYWlsOgorCWtmcmVlKGJ1Zl93cml0ZV9wYWdlX21haW5fc3BhcmUpOworYnVmX3dyaXRlX3BhZ2VfbWFpbl9zcGFyZV9mYWlsOgorCWtmcmVlKGJ1Zl9yZWFkX3BhZ2VfbWFpbl9zcGFyZSk7CitidWZfcmVhZF9wYWdlX21haW5fc3BhcmVfZmFpbDoKKwlrZnJlZSh0bXBfYnVmX3JlYWRfZGlzdHVyYmFuY2UpOwordG1wX2J1Zl9yZWFkX2Rpc3R1cmJhbmNlX2ZhaWw6CisJa2ZyZWUodG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YSk7Cit0bXBfYnVmX3dyaXRlX2Jsa190YWJsZV9kYXRhX2ZhaWw6CisJa2ZyZWUoZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmcpOworZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmdfZmFpbDoKKwlrZnJlZSh0bXBfYnVmMl9yZWFkX2Jsa190YWJsZSk7Cit0bXBfYnVmMl9yZWFkX2Jsa190YWJsZV9mYWlsOgorCWtmcmVlKHRtcF9idWYxX3JlYWRfYmxrX3RhYmxlKTsKK3RtcF9idWYxX3JlYWRfYmxrX3RhYmxlX2ZhaWw6CisJa2ZyZWUoc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9jayk7CitzcGFyZV9idWZfYnRfc2VhcmNoX2J0X2luX2Jsb2NrX2ZhaWw6CisJa2ZyZWUoc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9jayk7CitzcGFyZV9idWZfc2VhcmNoX2J0X2luX2Jsb2NrX2ZhaWw6CisJa2ZyZWUodG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spOwordG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2tfZmFpbDoKKwlrZnJlZShmbGFnX2NoZWNrX2Jsa190YWJsZSk7CitmbGFnX2NoZWNrX2Jsa190YWJsZV9mYWlsOgorCWtmcmVlKGdfcEJUQmxvY2tzKTsKK2J0X2Jsb2Nrc19mYWlsOgorCWtmcmVlKGdfcFRlbXBCdWYpOworVGVtcF9idWZfZmFpbDoKKwlrZnJlZShjYWNoZV9sMl9ibGtfYnVmKTsKK2NhY2hlX2wyX2Jsa19idWZfZmFpbDoKKwlrZnJlZShjYWNoZV9sMl9wYWdlX2J1Zik7CitjYWNoZV9sMl9wYWdlX2J1Zl9mYWlsOgorCWtmcmVlKGdfcElQRik7CitpcGZfZmFpbDoKK2NhY2hlX2l0ZW1fZmFpbDoKKwlpLS07CisJZm9yICg7IGkgPj0gMDsgaS0tKQorCQlrZnJlZShDYWNoZS5hcnJheVtpXS5idWYpOworCWtmcmVlKGdfcEJsb2NrVGFibGUpOworYmxvY2tfdGFibGVfZmFpbDoKKwlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBrbWFsbG9jIG1lbW9yeSBpbiAlcyBMaW5lICVkLlxuIiwKKwkJX19GSUxFX18sIF9fTElORV9fKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCisvKiAuLi4uICovCitzdGF0aWMgaW50IGZyZWVfbWVtb3J5KHZvaWQpCit7CisJaW50IGk7CisKKyNpZiBDTURfRE1BCisJa2ZyZWUoaW5mby5tZW1jcF9kZXNjX2J1Zik7CisJa2ZyZWUoaW5mby5jZG1hX2Rlc2NfYnVmKTsKKwlrZnJlZShpbmZvLnBjbWRzKTsKKwlmb3IgKGkgPSBDT1BZX0JBQ0tfQlVGX05VTSAtIDE7IGkgPj0gMDsgaS0tKQorCQlrZnJlZShjcF9iYWNrX2J1Zl9jb3BpZXNbaV0pOworCWtmcmVlKGdfcEJURGVsdGEpOworCWtmcmVlKGdfcEJsb2NrVGFibGVDb3BpZXMpOworCWtmcmVlKGdfcEJUU3RhcnRpbmdDb3B5KTsKKwlrZnJlZShnX3RlbXBfYnVmKTsKKwlrZnJlZShidWZfZ2V0X2JhZF9ibG9jayk7CisjZW5kaWYKKwlrZnJlZShidWZfcmVhZF9wYWdlX3NwYXJlKTsKKwlrZnJlZShidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlKTsKKwlrZnJlZShidWZfcmVhZF9wYWdlX21haW5fc3BhcmUpOworCWtmcmVlKHRtcF9idWZfcmVhZF9kaXN0dXJiYW5jZSk7CisJa2ZyZWUodG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YSk7CisJa2ZyZWUoZmxhZ3Nfc3RhdGljX3dlYXJfbGV2ZWxpbmcpOworCWtmcmVlKHRtcF9idWYyX3JlYWRfYmxrX3RhYmxlKTsKKwlrZnJlZSh0bXBfYnVmMV9yZWFkX2Jsa190YWJsZSk7CisJa2ZyZWUoc3BhcmVfYnVmX2J0X3NlYXJjaF9idF9pbl9ibG9jayk7CisJa2ZyZWUoc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9jayk7CisJa2ZyZWUodG1wX2J1Zl9zZWFyY2hfYnRfaW5fYmxvY2spOworCWtmcmVlKGZsYWdfY2hlY2tfYmxrX3RhYmxlKTsKKwlrZnJlZShnX3BCVEJsb2Nrcyk7CisJa2ZyZWUoZ19wVGVtcEJ1Zik7CisJa2ZyZWUoZ19wSVBGKTsKKwlmb3IgKGkgPSBDQUNIRV9JVEVNX05VTSAtIDE7IGkgPj0gMDsgaS0tKQorCQlrZnJlZShDYWNoZS5hcnJheVtpXS5idWYpOworCWtmcmVlKGdfcEJsb2NrVGFibGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfY2FjaGVfbDJfdGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QgKnBuZDsKKwlpbnQgbiwgaTsKKworCW4gPSAwOworCWxpc3RfZm9yX2VhY2gocCwgJmNhY2hlX2wyLnRhYmxlLmxpc3QpIHsKKwkJcG5kID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0LCBsaXN0KTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgImR1bXBfY2FjaGVfbDJfdGFibGUgbm9kZTogJWQsIGxvZ2ljYWxfYmxrX251bTogJWRcbiIsIG4sIHBuZC0+bG9naWNhbF9ibGtfbnVtKTsKKy8qCisJCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOyBpKyspIHsKKwkJCWlmIChwbmQtPnBhZ2VzX2FycmF5W2ldICE9IE1BWF9VMzJfVkFMVUUpCisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiAgICBwYWdlc19hcnJheVslZF06IDB4JXhcbiIsIGksIHBuZC0+cGFnZXNfYXJyYXlbaV0pOworCQl9CisqLworCQluKys7CisJfQorfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9Jbml0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIGFsbG9jYXRlcyB0aGUgbWVtb3J5IGZvciBjYWNoZSBhcnJheSwKKyogICAgICAgICAgICAgICBpbXBvcnRhbnQgZGF0YSBzdHJ1Y3R1cmVzCisqICAgICAgICAgICAgICAgY2xlYXJzIHRoZSBjYWNoZSBhcnJheQorKiAgICAgICAgICAgICAgIHJlYWRzIHRoZSBibG9jayB0YWJsZSBmcm9tIGZsYXNoIGludG8gYXJyYXkKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlDYWNoZS5wYWdlc19wZXJfaXRlbSA9IDE7CisJQ2FjaGUuY2FjaGVfaXRlbV9zaXplID0gMSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCWlmIChhbGxvY2F0ZV9tZW1vcnkoKSAhPSBQQVNTKQorCQlyZXR1cm4gRkFJTDsKKworI2lmIENNRF9ETUEKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCW1lbWNweSgodm9pZCAqKSZjYWNoZV9zdGFydF9jb3B5LCAodm9pZCAqKSZDYWNoZSwKKwkJc2l6ZW9mKHN0cnVjdCBmbGFzaF9jYWNoZV90YWcpKTsKKwltZW1zZXQoKHZvaWQgKikmaW50X2NhY2hlLCAtMSwKKwkJc2l6ZW9mKHN0cnVjdCBmbGFzaF9jYWNoZV9kZWx0YV9saXN0X3RhZykgKgorCQkoTUFYX0NIQU5TICsgTUFYX0RFU0NTKSk7CisjZW5kaWYKKwlmdGxfY21kX2NudCA9IDA7CisjZW5kaWYKKworCWlmIChGVExfUmVhZF9CbG9ja19UYWJsZSgpICE9IFBBU1MpCisJCXJldHVybiBGQUlMOworCisJLyogSW5pdCB0aGUgTGV2ZWwyIENhY2hlIGRhdGEgc3RydWN0dXJlICovCisJZm9yIChpID0gMDsgaSA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFOyBpKyspCisJCWNhY2hlX2wyLmJsa19hcnJheVtpXSA9IE1BWF9VMzJfVkFMVUU7CisJY2FjaGVfbDIuY3VyX2Jsa19pZHggPSAwOworCWNhY2hlX2wyLmN1cl9wYWdlX251bSA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlX2wyLnRhYmxlLmxpc3QpOworCWNhY2hlX2wyLnRhYmxlLmxvZ2ljYWxfYmxrX251bSA9IE1BWF9VMzJfVkFMVUU7CisKKwlkdW1wX2NhY2hlX2wyX3RhYmxlKCk7CisKKwlyZXR1cm4gMDsKK30KKworCisjaWYgQ01EX0RNQQorI2lmIDAKK3N0YXRpYyB2b2lkIHNhdmVfYmxrX3RhYmxlX2NoYW5nZXModTE2IGlkeCkKK3sKKwl1OCBmdGxfY21kOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJUU3RhcnRpbmdDb3B5OworCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwl1MTYgaWQ7CisJdTggY2FjaGVfYmxrczsKKworCWlkID0gaWR4IC0gTUFYX0NIQU5TOworCWlmIChpbnRfY2FjaGVbaWRdLml0ZW0gIT0gLTEpIHsKKwkJY2FjaGVfYmxrcyA9IGludF9jYWNoZVtpZF0uaXRlbTsKKwkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5hZGRyZXNzID0KKwkJCWludF9jYWNoZVtpZF0uY2FjaGUuYWRkcmVzczsKKwkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5jaGFuZ2VkID0KKwkJCWludF9jYWNoZVtpZF0uY2FjaGUuY2hhbmdlZDsKKwl9CisjZW5kaWYKKworCWZ0bF9jbWQgPSBwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQ7CisKKwl3aGlsZSAoZnRsX2NtZCA8PSBQZW5kaW5nQ01EW2lkeF0uVGFnKSB7CisJCWlmIChwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPT0gMHgwMSkgeworCQkJZ193QmxvY2tUYWJsZU9mZnNldCA9CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmdfd0Jsb2NrVGFibGVPZmZzZXQ7CisJCX0gZWxzZSBpZiAocF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID09IDB4MEMpIHsKKwkJCXBidFtwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXhdID0KKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWU7CisJCQlkZWJ1Z19ib3VuZGFyeV9lcnJvcigoKAorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCkpLAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSwgMCk7CisJCX0gZWxzZSBpZiAocF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID09IDB4MDMpIHsKKwkJCWdfd0Jsb2NrVGFibGVPZmZzZXQgPQorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlT2Zmc2V0OworCQkJZ193QmxvY2tUYWJsZUluZGV4ID0KKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+Z193QmxvY2tUYWJsZUluZGV4OworCQl9IGVsc2UgaWYgKHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9PSAweDMwKSB7CisJCQlnX3BXZWFyQ291bnRlckNvcHlbcF9CVGFibGVDaGFuZ2VzRGVsdGEtPldDX0luZGV4XSA9CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPldDX0VudHJ5X1ZhbHVlOworCQl9IGVsc2UgaWYgKChEZXZpY2VJbmZvLk1MQ0RldmljZSkgJiYKKwkJCShwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPT0gMHhDMCkpIHsKKwkJCWdfcFJlYWRDb3VudGVyQ29weVtwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfSW5kZXhdID0KKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+UkNfRW50cnlfVmFsdWU7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiSW4gZXZlbnQgc3RhdHVzIHNldHRpbmcgcmVhZCBjb3VudGVyICIKKwkJCQkiR0xPQl9mdGxfY21kX2NudCAldSBDb3VudCAldSBJbmRleCAldVxuIiwKKwkJCQlmdGxfY21kLAorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19FbnRyeV9WYWx1ZSwKKwkJCQkodW5zaWduZWQgaW50KXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19JbmRleCk7CisJCX0gZWxzZSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgXG4iKTsKKwkJfQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSArPSAxOworCQlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCX0KK30KKworc3RhdGljIHZvaWQgZGlzY2FyZF9jbWRzKHUxNiBuKQoreworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJUU3RhcnRpbmdDb3B5OworCXU4IGZ0bF9jbWQ7CisJdW5zaWduZWQgbG9uZyBrOworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJdTggY2FjaGVfYmxrczsKKwl1MTYgaWQ7CisjZW5kaWYKKworCWlmICgoUGVuZGluZ0NNRFtuXS5DTUQgPT0gV1JJVEVfTUFJTl9DTUQpIHx8CisJCShQZW5kaW5nQ01EW25dLkNNRCA9PSBXUklURV9NQUlOX1NQQVJFX0NNRCkpIHsKKwkJZm9yIChrID0gMDsgayA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaysrKSB7CisJCQlpZiAoUGVuZGluZ0NNRFtuXS5CbG9jayA9PSAocGJ0W2tdICYgKH5CQURfQkxPQ0spKSkKKwkJCQlNQVJLX0JMS19BU19ESVNDQVJEKHBidFtrXSk7CisJCX0KKwl9CisKKwlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCXdoaWxlIChmdGxfY21kIDw9IFBlbmRpbmdDTURbbl0uVGFnKSB7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhICs9IDE7CisJCWZ0bF9jbWQgPSBwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQ7CisJfQorCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwlpZCA9IG4gLSBNQVhfQ0hBTlM7CisKKwlpZiAoaW50X2NhY2hlW2lkXS5pdGVtICE9IC0xKSB7CisJCWNhY2hlX2Jsa3MgPSBpbnRfY2FjaGVbaWRdLml0ZW07CisJCWlmIChQZW5kaW5nQ01EW25dLkNNRCA9PSBNRU1DT1BZX0NNRCkgeworCQkJaWYgKChjYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLmJ1ZiA8PQorCQkJCVBlbmRpbmdDTURbbl0uRGF0YURlc3RBZGRyKSAmJgorCQkJCSgoY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5idWYgKworCQkJCUNhY2hlLmNhY2hlX2l0ZW1fc2l6ZSkgPgorCQkJCVBlbmRpbmdDTURbbl0uRGF0YURlc3RBZGRyKSkgeworCQkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uYWRkcmVzcyA9CisJCQkJCQlOQU5EX0NBQ0hFX0lOSVRfQUREUjsKKwkJCQljYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLnVzZV9jbnQgPQorCQkJCQkJCQkwOworCQkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uY2hhbmdlZCA9CisJCQkJCQkJCUNMRUFSOworCQkJfQorCQl9IGVsc2UgeworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5hZGRyZXNzID0KKwkJCQkJaW50X2NhY2hlW2lkXS5jYWNoZS5hZGRyZXNzOworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5jaGFuZ2VkID0KKwkJCQkJaW50X2NhY2hlW2lkXS5jYWNoZS5jaGFuZ2VkOworCQl9CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfY21kX3Bhc3MoaW50ICpmaXJzdF9mYWlsZWRfY21kLCB1MTYgaWR4KQoreworCWlmICgwID09ICpmaXJzdF9mYWlsZWRfY21kKQorCQlzYXZlX2Jsa190YWJsZV9jaGFuZ2VzKGlkeCk7CisJZWxzZQorCQlkaXNjYXJkX2NtZHMoaWR4KTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19jbWRfZmFpbF9hYm9ydChpbnQgKmZpcnN0X2ZhaWxlZF9jbWQsCisJCQkJdTE2IGlkeCwgaW50IGV2ZW50KQoreworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJUU3RhcnRpbmdDb3B5OworCXU4IGZ0bF9jbWQ7CisJdW5zaWduZWQgbG9uZyBpOworCWludCBlcmFzZV9mYWlsLCBwcm9ncmFtX2ZhaWw7CisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwl1OCBjYWNoZV9ibGtzOworCXUxNiBpZDsKKyNlbmRpZgorCisJaWYgKDAgPT0gKmZpcnN0X2ZhaWxlZF9jbWQpCisJCSpmaXJzdF9mYWlsZWRfY21kID0gUGVuZGluZ0NNRFtpZHhdLlNCRENtZEluZGV4OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJVbmNvcnJlY3RhYmxlIGVycm9yIGhhcyBvY2N1cmVkICIKKwkJIndoaWxlIGV4ZWN1dGluZyAldSBDb21tYW5kICV1IGFjY2VzaW5nIEJsb2NrICV1XG4iLAorCQkodW5zaWduZWQgaW50KXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCwKKwkJUGVuZGluZ0NNRFtpZHhdLkNNRCwKKwkJKHVuc2lnbmVkIGludClQZW5kaW5nQ01EW2lkeF0uQmxvY2spOworCisJZnRsX2NtZCA9IHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudDsKKwl3aGlsZSAoZnRsX2NtZCA8PSBQZW5kaW5nQ01EW2lkeF0uVGFnKSB7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhICs9IDE7CisJCWZ0bF9jbWQgPSBwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQ7CisJfQorCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwlpZCA9IGlkeCAtIE1BWF9DSEFOUzsKKworCWlmIChpbnRfY2FjaGVbaWRdLml0ZW0gIT0gLTEpIHsKKwkJY2FjaGVfYmxrcyA9IGludF9jYWNoZVtpZF0uaXRlbTsKKwkJaWYgKChQZW5kaW5nQ01EW2lkeF0uQ01EID09IFdSSVRFX01BSU5fQ01EKSkgeworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5hZGRyZXNzID0KKwkJCQkJaW50X2NhY2hlW2lkXS5jYWNoZS5hZGRyZXNzOworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS5jaGFuZ2VkID0gU0VUOworCQl9IGVsc2UgaWYgKChQZW5kaW5nQ01EW2lkeF0uQ01EID09IFJFQURfTUFJTl9DTUQpKSB7CisJCQljYWNoZV9zdGFydF9jb3B5LmFycmF5W2NhY2hlX2Jsa3NdLmFkZHJlc3MgPQorCQkJCU5BTkRfQ0FDSEVfSU5JVF9BRERSOworCQkJY2FjaGVfc3RhcnRfY29weS5hcnJheVtjYWNoZV9ibGtzXS51c2VfY250ID0gMDsKKwkJCWNhY2hlX3N0YXJ0X2NvcHkuYXJyYXlbY2FjaGVfYmxrc10uY2hhbmdlZCA9CisJCQkJCQkJQ0xFQVI7CisJCX0gZWxzZSBpZiAoUGVuZGluZ0NNRFtpZHhdLkNNRCA9PSBFUkFTRV9DTUQpIHsKKwkJCS8qID8gKi8KKwkJfSBlbHNlIGlmIChQZW5kaW5nQ01EW2lkeF0uQ01EID09IE1FTUNPUFlfQ01EKSB7CisJCQkvKiA/ICovCisJCX0KKwl9CisjZW5kaWYKKworCWVyYXNlX2ZhaWwgPSAoZXZlbnQgPT0gRVZFTlRfRVJBU0VfRkFJTFVSRSkgJiYKKwkJCShQZW5kaW5nQ01EW2lkeF0uQ01EID09IEVSQVNFX0NNRCk7CisKKwlwcm9ncmFtX2ZhaWwgPSAoZXZlbnQgPT0gRVZFTlRfUFJPR1JBTV9GQUlMVVJFKSAmJgorCQkJKChQZW5kaW5nQ01EW2lkeF0uQ01EID09IFdSSVRFX01BSU5fQ01EKSB8fAorCQkJKFBlbmRpbmdDTURbaWR4XS5DTUQgPT0gV1JJVEVfTUFJTl9TUEFSRV9DTUQpKTsKKworCWlmIChlcmFzZV9mYWlsIHx8IHByb2dyYW1fZmFpbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJCWlmIChQZW5kaW5nQ01EW2lkeF0uQmxvY2sgPT0KKwkJCQkocGJ0W2ldICYgKH5CQURfQkxPQ0spKSkKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbaV0pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NtZChpbnQgKmZpcnN0X2ZhaWxlZF9jbWQsIHUxNiBpZHgsIGludCBldmVudCkKK3sKKwl1OCBmdGxfY21kOworCWludCBjbWRfbWF0Y2ggPSAwOworCisJaWYgKHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9PSBQZW5kaW5nQ01EW2lkeF0uVGFnKQorCQljbWRfbWF0Y2ggPSAxOworCisJaWYgKFBlbmRpbmdDTURbaWR4XS5TdGF0dXMgPT0gQ01EX1BBU1MpIHsKKwkJcHJvY2Vzc19jbWRfcGFzcyhmaXJzdF9mYWlsZWRfY21kLCBpZHgpOworCX0gZWxzZSBpZiAoKFBlbmRpbmdDTURbaWR4XS5TdGF0dXMgPT0gQ01EX0ZBSUwpIHx8CisJCQkoUGVuZGluZ0NNRFtpZHhdLlN0YXR1cyA9PSBDTURfQUJPUlQpKSB7CisJCXByb2Nlc3NfY21kX2ZhaWxfYWJvcnQoZmlyc3RfZmFpbGVkX2NtZCwgaWR4LCBldmVudCk7CisJfSBlbHNlIGlmICgoUGVuZGluZ0NNRFtpZHhdLlN0YXR1cyA9PSBDTURfTk9UX0RPTkUpICYmCisJCQkJCVBlbmRpbmdDTURbaWR4XS5UYWcpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiIENvbW1hbmQgbm8uICVodSBpcyBub3QgZXhlY3V0ZWRcbiIsCisJCQkodW5zaWduZWQgaW50KVBlbmRpbmdDTURbaWR4XS5UYWcpOworCQlmdGxfY21kID0gcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250OworCQl3aGlsZSAoZnRsX2NtZCA8PSBQZW5kaW5nQ01EW2lkeF0uVGFnKSB7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSArPSAxOworCQkJZnRsX2NtZCA9IHBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudDsKKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2NtZChpbnQgKmZpcnN0X2ZhaWxlZF9jbWQsIHUxNiBpZHgsIGludCBldmVudCkKK3sKKwlwcmludGsoS0VSTl9FUlIgInRlbXBvcmFyeSB3b3JrYXJvdW5kIGZ1bmN0aW9uLiAiCisJCSJTaG91bGQgbm90IGJlIGNhbGxlZCEgXG4iKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgIAlHTE9CX0ZUTF9FdmVudF9TdGF0dXMKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgRXZlbnQgQ29kZQorKiBEZXNjcmlwdGlvbjoJSXQgaXMgY2FsbGVkIGJ5IFNCRCBhZnRlciBoYXJkd2FyZSBpbnRlcnJ1cHQgc2lnbmFsbGluZworKiAgICAgICAgICAgICAgIGNvbXBsZXRpb24gb2YgY29tbWFuZHMgY2hhaW4KKyogICAgICAgICAgICAgICBJdCBkb2VzIGZvbGxvd2luZyB0aGluZ3MKKyogICAgICAgICAgICAgICBnZXQgZXZlbnQgc3RhdHVzIGZyb20gTExECisqICAgICAgICAgICAgICAgYW5hbHl6ZSBjb21tYW5kIGNoYWluIHN0YXR1cworKiAgICAgICAgICAgICAgIGRldGVybWluZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQKKyogICAgICAgICAgICAgICBhbmFseXplIHJlc3VsdHMKKyogICAgICAgICAgICAgICByZWJ1aWxkIHRoZSBibG9jayB0YWJsZSBpbiBjYXNlIG9mIHVuY29ycmVjdGFibGUgZXJyb3IKKyogICAgICAgICAgICAgICByZXR1cm4gZXZlbnQgY29kZQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9FdmVudF9TdGF0dXMoaW50ICpmaXJzdF9mYWlsZWRfY21kKQoreworCWludCBldmVudF9jb2RlID0gUEFTUzsKKwl1MTYgaV9QOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCSpmaXJzdF9mYWlsZWRfY21kID0gMDsKKworCWV2ZW50X2NvZGUgPSBHTE9CX0xMRF9FdmVudF9TdGF0dXMoKTsKKworCXN3aXRjaCAoZXZlbnRfY29kZSkgeworCWNhc2UgRVZFTlRfUEFTUzoKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJIYW5kbGluZyBFVkVOVF9QQVNTXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9VTkNPUlJFQ1RBQkxFX0RBVEFfRVJST1I6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiSGFuZGxpbmcgVW5jb3JyZWN0YWJsZSBFQ0MhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBFVkVOVF9QUk9HUkFNX0ZBSUxVUkU6CisJY2FzZSBFVkVOVF9FUkFTRV9GQUlMVVJFOgorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiSGFuZGxpbmcgVWdseSBjYXNlLiAiCisJCQkiRXZlbnQgY29kZTogMHgleFxuIiwgZXZlbnRfY29kZSk7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YTsKKwkJZm9yIChpX1AgPSBNQVhfQ0hBTlM7IGlfUCA8IChmdGxfY21kX2NudCArIE1BWF9DSEFOUyk7CisJCQkJaV9QKyspCisJCQlwcm9jZXNzX2NtZChmaXJzdF9mYWlsZWRfY21kLCBpX1AsIGV2ZW50X2NvZGUpOworCQltZW1jcHkoZ19wQmxvY2tUYWJsZSwgZ19wQlRTdGFydGluZ0NvcHksCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKSk7CisJCW1lbWNweShnX3BXZWFyQ291bnRlciwgZ19wV2VhckNvdW50ZXJDb3B5LAorCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSk7CisJCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJCW1lbWNweShnX3BSZWFkQ291bnRlciwgZ19wUmVhZENvdW50ZXJDb3B5LAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MTYpKTsKKworI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJCW1lbWNweSgodm9pZCAqKSZDYWNoZSwgKHZvaWQgKikmY2FjaGVfc3RhcnRfY29weSwKKwkJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfdGFnKSk7CisJCW1lbXNldCgodm9pZCAqKSZpbnRfY2FjaGUsIC0xLAorCQkJc2l6ZW9mKHN0cnVjdCBmbGFzaF9jYWNoZV9kZWx0YV9saXN0X3RhZykgKgorCQkJKE1BWF9ERVNDUyArIE1BWF9DSEFOUykpOworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiSGFuZGxpbmcgdW5leHBlY3RlZCBldmVudCBjb2RlIC0gMHgleFxuIiwKKwkJCWV2ZW50X2NvZGUpOworCQlldmVudF9jb2RlID0gRVJSOworCQlicmVhazsKKwl9CisKKwltZW1jcHkoZ19wQlRTdGFydGluZ0NvcHksIGdfcEJsb2NrVGFibGUsCisJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MzIpKTsKKwltZW1jcHkoZ19wV2VhckNvdW50ZXJDb3B5LCBnX3BXZWFyQ291bnRlciwKKwkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSk7CisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKQorCQltZW1jcHkoZ19wUmVhZENvdW50ZXJDb3B5LCBnX3BSZWFkQ291bnRlciwKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MTYpKTsKKworCWdfcEJURGVsdGFfRnJlZSA9IGdfcEJURGVsdGE7CisJZnRsX2NtZF9jbnQgPSAwOworCWdfcE5leHRCbG9ja1RhYmxlID0gZ19wQmxvY2tUYWJsZUNvcGllczsKKwljcF9iYWNrX2J1Zl9pZHggPSAwOworCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwltZW1jcHkoKHZvaWQgKikmY2FjaGVfc3RhcnRfY29weSwgKHZvaWQgKikmQ2FjaGUsCisJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfdGFnKSk7CisJbWVtc2V0KCh2b2lkICopJmludF9jYWNoZSwgLTEsCisJCXNpemVvZihzdHJ1Y3QgZmxhc2hfY2FjaGVfZGVsdGFfbGlzdF90YWcpICoKKwkJKE1BWF9ERVNDUyArIE1BWF9DSEFOUykpOworI2VuZGlmCisKKwlyZXR1cm4gZXZlbnRfY29kZTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGdsb2JfZnRsX2V4ZWN1dGVfY21kcworKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBub25lCisqIERlc2NyaXB0aW9uOiAgcGFzcyB0aHJ1IHRvIExMRAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2IGdsb2JfZnRsX2V4ZWN1dGVfY21kcyh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLAorCQkiZ2xvYl9mdGxfZXhlY3V0ZV9jbWRzOiBmdGxfY21kX2NudCAldVxuIiwKKwkJKHVuc2lnbmVkIGludClmdGxfY21kX2NudCk7CisJZ19TQkRDbWRJbmRleCA9IDA7CisJcmV0dXJuIGdsb2JfbGxkX2V4ZWN1dGVfY21kcygpOworfQorCisjZW5kaWYKKworI2lmICFDTURfRE1BCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX1JlYWQgSW1tZWRpYXRlCisqIElucHV0czogICAgICAgICBwb2ludGVyIHRvIGRhdGEKKyogICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIG9mIGRhdGEKKyogT3V0cHV0czogICAgICBQQVNTIC8gRkFJTAorKiBEZXNjcmlwdGlvbjogIFJlYWRzIG9uZSBwYWdlIG9mIGRhdGEgaW50byBSQU0gZGlyZWN0bHkgZnJvbSBmbGFzaCB3aXRob3V0CisqICAgICAgIHVzaW5nIG9yIGRpc3R1cmJpbmcgY2FjaGUuSXQgaXMgYXNzdW1lZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorKiAgICAgICB3aXRoIENNRC1ETUEgZGlzYWJsZWQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBHTE9CX0ZUTF9SZWFkX0ltbWVkaWF0ZSh1OCAqcmVhZF9kYXRhLCB1NjQgYWRkcikKK3sKKwlpbnQgd1Jlc3VsdCA9IEZBSUw7CisJdTMyIEJsb2NrOworCXUxNiBQYWdlOworCXUzMiBwaHlfYmxrOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJQmxvY2sgPSBCTEtfRlJPTV9BRERSKGFkZHIpOworCVBhZ2UgPSBQQUdFX0ZST01fQUREUihhZGRyLCBCbG9jayk7CisKKwlpZiAoIUlTX1NQQVJFX0JMT0NLKEJsb2NrKSkKKwkJcmV0dXJuIEZBSUw7CisKKwlwaHlfYmxrID0gcGJ0W0Jsb2NrXTsKKwl3UmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW4ocmVhZF9kYXRhLCBwaHlfYmxrLCBQYWdlLCAxKTsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlnX3BSZWFkQ291bnRlcltwaHlfYmxrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdKys7CisJCWlmIChnX3BSZWFkQ291bnRlcltwaHlfYmxrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdCisJCQk+PSBNQVhfUkVBRF9DT1VOVEVSKQorCQkJRlRMX1JlYWRfRGlzdHVyYmFuY2UocGh5X2Jsayk7CisJCWlmIChnX2NCbG9ja1RhYmxlU3RhdHVzICE9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFKSB7CisJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQl9CisJfQorCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfQklHX0VORElBTgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGdW5jdGlvbjogICAgIEZUTF9JbnZlcnRfQmxvY2tfVGFibGUKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgbm9uZQorKiBEZXNjcmlwdGlvbjogIFJlLWZvcm1hdCB0aGUgYmxvY2sgdGFibGUgaW4gcmFtIGJhc2VkIG9uIEJJR19FTkRJQU4gYW5kCisqICAgICAgICAgICAgICAgICAgICAgTEFSR0VfQkxPQ0tOVU0gaWYgbmVjZXNzYXJ5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgRlRMX0ludmVydF9CbG9ja19UYWJsZSh2b2lkKQoreworCXUzMiBpOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisjaWZkZWYgU1VQUE9SVF9MQVJHRV9CTE9DS05VTQorCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlwYnRbaV0gPSBJTlZFUlRVSU5UMzIocGJ0W2ldKTsKKwkJZ19wV2VhckNvdW50ZXJbaV0gPSBJTlZFUlRVSU5UMzIoZ19wV2VhckNvdW50ZXJbaV0pOworCX0KKyNlbHNlCisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCXBidFtpXSA9IElOVkVSVFVJTlQxNihwYnRbaV0pOworCQlnX3BXZWFyQ291bnRlcltpXSA9IElOVkVSVFVJTlQxNihnX3BXZWFyQ291bnRlcltpXSk7CisJfQorI2VuZGlmCit9CisjZW5kaWYKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9GbGFzaF9Jbml0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MHgwMSAoYmFzZWQgb24gcmVhZCBJRCkKKyogRGVzY3JpcHRpb246ICBUaGUgZmxhc2ggY29udHJvbGxlciBpcyBpbml0aWFsaXplZAorKiAgICAgICAgICAgICAgIFRoZSBmbGFzaCBkZXZpY2UgaXMgcmVzZXQKKyogICAgICAgICAgICAgICBQZXJmb3JtIGEgZmxhc2ggUkVBRCBJRCBjb21tYW5kIHRvIGNvbmZpcm0gdGhhdCBhCisqICAgICAgICAgICAgICAgICAgIHZhbGlkIGRldmljZSBpcyBhdHRhY2hlZCBhbmQgYWN0aXZlLgorKiAgICAgICAgICAgICAgICAgICBUaGUgRGV2aWNlSW5mbyBzdHJ1Y3R1cmUgZ2V0cyBmaWxsZWQgaW4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfRmxhc2hfSW5pdCh2b2lkKQoreworCWludCBzdGF0dXMgPSBGQUlMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWdfU0JEQ21kSW5kZXggPSAwOworCisJR0xPQl9MTERfRmxhc2hfSW5pdCgpOworCisJc3RhdHVzID0gR0xPQl9MTERfUmVhZF9EZXZpY2VfSUQoKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTB4MDEgKGJhc2VkIG9uIHJlYWQgSUQpCisqIERlc2NyaXB0aW9uOiAgVGhlIGZsYXNoIGNvbnRyb2xsZXIgaXMgcmVsZWFzZWQKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfRmxhc2hfUmVsZWFzZSh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gR0xPQl9MTERfRmxhc2hfUmVsZWFzZSgpOworfQorCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfQ2FjaGVfUmVsZWFzZQorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBub25lCisqIERlc2NyaXB0aW9uOiAgcmVsZWFzZSBhbGwgYWxsb2NhdGVkIG1lbW9yeSBpbiBHTE9CX0ZUTF9Jbml0CisqICAgICAgICAgICAgICAgKGFsbG9jYXRlZCBpbiBHTE9CX0ZUTF9Jbml0KQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3ZvaWQgR0xPQl9GVExfQ2FjaGVfUmVsZWFzZSh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZyZWVfbWVtb3J5KCk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX0lmX0hpdAorKiBJbnB1dHM6ICAgICAgIFBhZ2UgQWRkcmVzcworKiBPdXRwdXRzOiAgICAgIEJsb2NrIG51bWJlci9VTkhJVCBCTE9DSworKiBEZXNjcmlwdGlvbjogIERldGVybWluZXMgaWYgdGhlIGFkZHJlc3NlZCBwYWdlIGlzIGluIGNhY2hlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUxNiBGVExfQ2FjaGVfSWZfSGl0KHU2NCBwYWdlX2FkZHIpCit7CisJdTE2IGl0ZW07CisJdTY0IGFkZHI7CisJaW50IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaXRlbSA9IFVOSElUX0NBQ0hFX0lURU07CisJZm9yIChpID0gMDsgaSA8IENBQ0hFX0lURU1fTlVNOyBpKyspIHsKKwkJYWRkciA9IENhY2hlLmFycmF5W2ldLmFkZHJlc3M7CisJCWlmICgocGFnZV9hZGRyID49IGFkZHIpICYmCisJCQkocGFnZV9hZGRyIDwgKGFkZHIgKyBDYWNoZS5jYWNoZV9pdGVtX3NpemUpKSkgeworCQkJaXRlbSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBpdGVtOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWxjdWxhdGVfTFJVCisqIElucHV0czogICAgICAgTm9uZQorKiBPdXRwdXRzOiAgICAgIE5vbmUKKyogRGVzY3JpcHRpb246ICBDYWxjdWxhdGUgdGhlIGxlYXN0IHJlY2VudGx5IGJsb2NrIGluIGEgY2FjaGUgYW5kIHJlY29yZCBpdHMKKyogICAgICAgICAgICAgICBpbmRleCBpbiBMUlUgZmllbGQuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHZvaWQgRlRMX0NhbGN1bGF0ZV9MUlUodm9pZCkKK3sKKwl1MTYgaSwgYkN1cnJlbnRMUlUsIGJUZW1wQ291bnQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJYkN1cnJlbnRMUlUgPSAwOworCWJUZW1wQ291bnQgPSBNQVhfV09SRF9WQUxVRTsKKworCWZvciAoaSA9IDA7IGkgPCBDQUNIRV9JVEVNX05VTTsgaSsrKSB7CisJCWlmIChDYWNoZS5hcnJheVtpXS51c2VfY250IDwgYlRlbXBDb3VudCkgeworCQkJYkN1cnJlbnRMUlUgPSBpOworCQkJYlRlbXBDb3VudCA9IENhY2hlLmFycmF5W2ldLnVzZV9jbnQ7CisJCX0KKwl9CisKKwlDYWNoZS5MUlUgPSBiQ3VycmVudExSVTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfUmVhZF9QYWdlCisqIElucHV0czogICAgICAgcG9pbnRlciB0byByZWFkIGJ1ZmZlciwgbG9naWNhbCBhZGRyZXNzIGFuZCBjYWNoZSBpdGVtIG51bWJlcgorKiBPdXRwdXRzOiAgICAgIE5vbmUKKyogRGVzY3JpcHRpb246ICBSZWFkIHRoZSBwYWdlIGZyb20gdGhlIGNhY2hlZCBibG9jayBhZGRyZXNzZWQgYnkgYmxvY2tudW1iZXIKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgdm9pZCBGVExfQ2FjaGVfUmVhZF9QYWdlKHU4ICpkYXRhX2J1ZiwgdTY0IGxvZ2ljX2FkZHIsIHUxNiBjYWNoZV9pdGVtKQoreworCXU4ICpzdGFydF9hZGRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXJ0X2FkZHIgPSBDYWNoZS5hcnJheVtjYWNoZV9pdGVtXS5idWY7CisJc3RhcnRfYWRkciArPSAodTMyKSgoKGxvZ2ljX2FkZHIgLSBDYWNoZS5hcnJheVtjYWNoZV9pdGVtXS5hZGRyZXNzKSA+PgorCQlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKworI2lmIENNRF9ETUEKKwlHTE9CX0xMRF9NZW1Db3B5X0NNRChkYXRhX2J1Ziwgc3RhcnRfYWRkciwKKwkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSwgMCk7CisJZnRsX2NtZF9jbnQrKzsKKyNlbHNlCisJbWVtY3B5KGRhdGFfYnVmLCBzdGFydF9hZGRyLCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworI2VuZGlmCisKKwlpZiAoQ2FjaGUuYXJyYXlbY2FjaGVfaXRlbV0udXNlX2NudCA8IE1BWF9XT1JEX1ZBTFVFKQorCQlDYWNoZS5hcnJheVtjYWNoZV9pdGVtXS51c2VfY250Kys7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1JlYWRfQWxsCisqIElucHV0czogICAgICAgcG9pbnRlciB0byByZWFkIGJ1ZmZlcixibG9jayBhZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTCA9MQorKiBEZXNjcmlwdGlvbjogIEl0IHJlYWRzIHBhZ2VzIGluIGNhY2hlCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQ2FjaGVfUmVhZF9BbGwodTggKnBEYXRhLCB1NjQgcGh5X2FkZHIpCit7CisJaW50IHdSZXN1bHQgPSBQQVNTOworCXUzMiBCbG9jazsKKwl1MzIgbGJhOworCXUxNiBQYWdlOworCXUxNiBQYWdlQ291bnQ7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgaTsKKworCUJsb2NrID0gQkxLX0ZST01fQUREUihwaHlfYWRkcik7CisJUGFnZSA9IFBBR0VfRlJPTV9BRERSKHBoeV9hZGRyLCBCbG9jayk7CisJUGFnZUNvdW50ID0gQ2FjaGUucGFnZXNfcGVyX2l0ZW07CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzLCBCbG9jazogMHgleFxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKworCWxiYSA9IDB4ZmZmZmZmZmY7CisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCWlmICgocGJ0W2ldICYgKH5CQURfQkxPQ0spKSA9PSBCbG9jaykgeworCQkJbGJhID0gaTsKKwkJCWlmIChJU19TUEFSRV9CTE9DSyhpKSB8fCBJU19CQURfQkxPQ0soaSkgfHwKKwkJCQlJU19ESVNDQVJERURfQkxPQ0soaSkpIHsKKwkJCQkvKiBBZGQgYnkgeXVucGVuZyAtMjAwOC4xMi4zICovCisjaWYgQ01EX0RNQQorCQkJCUdMT0JfTExEX01lbUNvcHlfQ01EKHBEYXRhLCBnX3RlbXBfYnVmLAorCQkJCVBhZ2VDb3VudCAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSwgMCk7CisJCQkJZnRsX2NtZF9jbnQrKzsKKyNlbHNlCisJCQkJbWVtc2V0KHBEYXRhLCAweEZGLAorCQkJCQlQYWdlQ291bnQgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworI2VuZGlmCisJCQkJcmV0dXJuIHdSZXN1bHQ7CisJCQl9IGVsc2UgeworCQkJCWNvbnRpbnVlOyAvKiBicmVhayA/PyAqLworCQkJfQorCQl9CisJfQorCisJaWYgKDB4ZmZmZmZmZmYgPT0gbGJhKQorCQlwcmludGsoS0VSTl9FUlIgIkZUTF9DYWNoZV9SZWFkX0FsbDogQmxvY2sgaXMgbm90IGZvdW5kIGluIEJUXG4iKTsKKworI2lmIENNRF9ETUEKKwl3UmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW5fY2RtYShwRGF0YSwgQmxvY2ssIFBhZ2UsCisJCQlQYWdlQ291bnQsIExMRF9DTURfRkxBR19NT0RFX0NETUEpOworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlnX3BSZWFkQ291bnRlcltCbG9jayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSsrOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSAgICAgICAiUmVhZCBDb3VudGVyIG1vZGlmaWVkIGluIGZ0bF9jbWRfY250ICV1IgorCQkJCSIgQmxvY2sgJXUgQ291bnRlciV1XG4iLAorCQkJICAgICAgIGZ0bF9jbWRfY250LCAodW5zaWduZWQgaW50KUJsb2NrLAorCQkJICAgICAgIGdfcFJlYWRDb3VudGVyW0Jsb2NrIC0KKwkJCSAgICAgICBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10pOworCisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlJDX0luZGV4ID0KKwkJCUJsb2NrIC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19FbnRyeV9WYWx1ZSA9CisJCQlnX3BSZWFkQ291bnRlcltCbG9jayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHhDMDsKKworCQlmdGxfY21kX2NudCsrOworCisJCWlmIChnX3BSZWFkQ291bnRlcltCbG9jayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA+PQorCQkgICAgTUFYX1JFQURfQ09VTlRFUikKKwkJCUZUTF9SZWFkX0Rpc3R1cmJhbmNlKEJsb2NrKTsKKwkJaWYgKGdfY0Jsb2NrVGFibGVTdGF0dXMgIT0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUpIHsKKwkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJCX0KKwl9IGVsc2UgeworCQlmdGxfY21kX2NudCsrOworCX0KKyNlbHNlCisJd1Jlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKHBEYXRhLCBCbG9jaywgUGFnZSwgUGFnZUNvdW50KTsKKwlpZiAod1Jlc3VsdCA9PSBGQUlMKQorCQlyZXR1cm4gd1Jlc3VsdDsKKworCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkgeworCQlnX3BSZWFkQ291bnRlcltCbG9jayAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSsrOworCQlpZiAoZ19wUmVhZENvdW50ZXJbQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPj0KKwkJCQkJCU1BWF9SRUFEX0NPVU5URVIpCisJCQlGVExfUmVhZF9EaXN0dXJiYW5jZShCbG9jayk7CisJCWlmIChnX2NCbG9ja1RhYmxlU3RhdHVzICE9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFKSB7CisJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQl9CisJfQorI2VuZGlmCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfV3JpdGVfQWxsCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBjYWNoZSBpbiBzeXMgbWVtb3J5CisqICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBmcmVlIGJsb2NrIGluIGZsYXNoCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgd3JpdGVzIGFsbCB0aGUgcGFnZXMgb2YgdGhlIGJsb2NrIGluIGNhY2hlIHRvIGZsYXNoCisqCisqICAgICAgICAgICAgICAgTk9URTpuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHdvcmtzIG9rIHdoZW4gY2FjaGUgaXMgbGltaXRlZAorKiAgICAgICAgICAgICAgIHRvIGEgcGFydGlhbCBibG9jay4gVGhpcyBpcyB3aGVyZSBjb3B5LWJhY2sgd291bGQgYmUKKyogICAgICAgICAgICAgICBhY3RpdmF0ZWQuICBUaGlzIHdvdWxkIHJlcXVpcmUga25vd2luZyB3aGljaCBwYWdlcyBpbiB0aGUKKyogICAgICAgICAgICAgICBjYWNoZWQgYmxvY2sgYXJlIGNsZWFuL2RpcnR5LlJpZ2h0IG5vdyB3ZSBvbmx5IGtub3cgaWYKKyogICAgICAgICAgICAgICB0aGUgd2hvbGUgYmxvY2sgaXMgY2xlYW4vZGlydHkuCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1dyaXRlX0FsbCh1OCAqcERhdGEsIHU2NCBibGtfYWRkcikKK3sKKwl1MTYgd1Jlc3VsdCA9IFBBU1M7CisJdTMyIEJsb2NrOworCXUxNiBQYWdlOworCXUxNiBQYWdlQ291bnQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlRoaXMgYmxvY2sgJWQgZ29pbmcgdG8gYmUgd3JpdHRlbiAiCisJCSJvbiAlZFxuIiwgY2FjaGVfYmxvY2tfdG9fd3JpdGUsCisJCSh1MzIpKGJsa19hZGRyID4+IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpKTsKKworCUJsb2NrID0gQkxLX0ZST01fQUREUihibGtfYWRkcik7CisJUGFnZSA9IFBBR0VfRlJPTV9BRERSKGJsa19hZGRyLCBCbG9jayk7CisJUGFnZUNvdW50ID0gQ2FjaGUucGFnZXNfcGVyX2l0ZW07CisKKyNpZiBDTURfRE1BCisJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX2NkbWEocERhdGEsCisJCQkJCUJsb2NrLCBQYWdlLCBQYWdlQ291bnQpKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkISAiCisJCQkiTmVlZCBCYWQgQmxvY2sgcmVwbGFjaW5nLlxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKwkJd1Jlc3VsdCA9IEZBSUw7CisJfQorCWZ0bF9jbWRfY250Kys7CisjZWxzZQorCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbihwRGF0YSwgQmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCkpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCIKKwkJCSIgTGluZSAlZCwgRnVuY3Rpb24gJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkISIKKwkJCSJOZWVkIEJhZCBCbG9jayByZXBsYWNpbmcuXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgQmxvY2spOworCQl3UmVzdWx0ID0gRkFJTDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfVXBkYXRlX0Jsb2NrCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBidWZmZXIscGFnZSBhZGRyZXNzLGJsb2NrIGFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJdCB1cGRhdGVzIHRoZSBjYWNoZQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQ2FjaGVfVXBkYXRlX0Jsb2NrKHU4ICpwRGF0YSwKKwkJCXU2NCBvbGRfcGFnZV9hZGRyLCB1NjQgYmxrX2FkZHIpCit7CisJaW50IGksIGo7CisJdTggKmJ1ZiA9IHBEYXRhOworCWludCB3UmVzdWx0ID0gUEFTUzsKKwlpbnQgd0ZvdW5kSW5DYWNoZTsKKwl1NjQgcGFnZV9hZGRyOworCXU2NCBhZGRyOworCXU2NCBvbGRfYmxrX2FkZHI7CisJdTE2IHBhZ2Vfb2Zmc2V0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJb2xkX2Jsa19hZGRyID0gKHU2NCkob2xkX3BhZ2VfYWRkciA+PgorCQlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKSAqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemU7CisJcGFnZV9vZmZzZXQgPSAodTE2KShHTE9CX3U2NF9SZW1haW5kZXIob2xkX3BhZ2VfYWRkciwgMikgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKTsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOyBpICs9IENhY2hlLnBhZ2VzX3Blcl9pdGVtKSB7CisJCXBhZ2VfYWRkciA9IG9sZF9ibGtfYWRkciArIGkgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCWlmIChpICE9IHBhZ2Vfb2Zmc2V0KSB7CisJCQl3Rm91bmRJbkNhY2hlID0gRkFJTDsKKwkJCWZvciAoaiA9IDA7IGogPCBDQUNIRV9JVEVNX05VTTsgaisrKSB7CisJCQkJYWRkciA9IENhY2hlLmFycmF5W2pdLmFkZHJlc3M7CisJCQkJYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcihhZGRyKSArCisJCQkJCUdMT0JfdTY0X1JlbWFpbmRlcihhZGRyLCAyKTsKKwkJCQlpZiAoKGFkZHIgPj0gcGFnZV9hZGRyKSAmJiBhZGRyIDwKKwkJCQkJKHBhZ2VfYWRkciArIENhY2hlLmNhY2hlX2l0ZW1fc2l6ZSkpIHsKKwkJCQkJd0ZvdW5kSW5DYWNoZSA9IFBBU1M7CisJCQkJCWJ1ZiA9IENhY2hlLmFycmF5W2pdLmJ1ZjsKKwkJCQkJQ2FjaGUuYXJyYXlbal0uY2hhbmdlZCA9IFNFVDsKKyNpZiBDTURfRE1BCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKKwkJCQkJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5pdGVtID0gajsKKwkJCQkJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5jYWNoZS5hZGRyZXNzID0KKwkJCQkJCUNhY2hlLmFycmF5W2pdLmFkZHJlc3M7CisJCQkJCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuY2hhbmdlZCA9CisJCQkJCQlDYWNoZS5hcnJheVtqXS5jaGFuZ2VkOworI2VuZGlmCisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKEZBSUwgPT0gd0ZvdW5kSW5DYWNoZSkgeworCQkJCWlmIChFUlIgPT0gRlRMX0NhY2hlX1JlYWRfQWxsKGdfcFRlbXBCdWYsCisJCQkJCXBhZ2VfYWRkcikpIHsKKwkJCQkJd1Jlc3VsdCA9IEZBSUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlidWYgPSBnX3BUZW1wQnVmOworCQkJfQorCQl9IGVsc2UgeworCQkJYnVmID0gcERhdGE7CisJCX0KKworCQlpZiAoRkFJTCA9PSBGVExfQ2FjaGVfV3JpdGVfQWxsKGJ1ZiwKKwkJCWJsa19hZGRyICsgKHBhZ2VfYWRkciAtIG9sZF9ibGtfYWRkcikpKSB7CisJCQl3UmVzdWx0ID0gRkFJTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NvcHlfQmxvY2sKKyogSW5wdXRzOiAgICAgICBzb3VyY2UgYmxvY2sgYWRkcmVzcworKiAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGJsb2NrIGFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICB1c2VkIG9ubHkgZm9yIHN0YXRpYyB3ZWFyIGxldmVsaW5nIHRvIG1vdmUgdGhlIGJsb2NrCisqICAgICAgICAgICAgICAgY29udGFpbmluZyBzdGF0aWMgZGF0YSB0byBuZXcgYmxvY2tzKG1vcmUgd29ybikKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgRlRMX0NvcHlfQmxvY2sodTY0IG9sZF9ibGtfYWRkciwgdTY0IGJsa19hZGRyKQoreworCWludCBpLCByMSwgcjIsIHdSZXN1bHQgPSBQQVNTOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOyBpICs9IENhY2hlLnBhZ2VzX3Blcl9pdGVtKSB7CisJCXIxID0gRlRMX0NhY2hlX1JlYWRfQWxsKGdfcFRlbXBCdWYsIG9sZF9ibGtfYWRkciArCisJCQkJCWkgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCQlyMiA9IEZUTF9DYWNoZV9Xcml0ZV9BbGwoZ19wVGVtcEJ1ZiwgYmxrX2FkZHIgKworCQkJCQlpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJaWYgKChFUlIgPT0gcjEpIHx8IChGQUlMID09IHIyKSkgeworCQkJd1Jlc3VsdCA9IEZBSUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiBTZWFyY2ggdGhlIGJsb2NrIHRhYmxlIHRvIGZpbmQgb3V0IHRoZSBsZWFzdCB3ZWFyIGJsb2NrIGFuZCB0aGVuIHJldHVybiBpdCAqLworc3RhdGljIHUzMiBmaW5kX2xlYXN0X3dvcm5fYmxrX2Zvcl9sMl9jYWNoZSh2b2lkKQoreworCWludCBpOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTggbGVhc3Rfd2Vhcl9jbnQgPSBNQVhfQllURV9WQUxVRTsKKwl1MzIgbGVhc3Rfd2Vhcl9ibGtfaWR4ID0gTUFYX1UzMl9WQUxVRTsKKwl1MzIgcGh5X2lkeDsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlpZiAoSVNfU1BBUkVfQkxPQ0soaSkpIHsKKwkJCXBoeV9pZHggPSAodTMyKSgofkJBRF9CTE9DSykgJiBwYnRbaV0pOworCQkJaWYgKHBoeV9pZHggPiBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spCisJCQkJcHJpbnRrKEtFUk5fRVJSICJmaW5kX2xlYXN0X3dvcm5fYmxrX2Zvcl9sMl9jYWNoZTogIgorCQkJCQkiVG9vIGJpZyBwaHkgYmxvY2sgbnVtICglZClcbiIsIHBoeV9pZHgpOworCQkJaWYgKGdfcFdlYXJDb3VudGVyW3BoeV9pZHggLURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA8IGxlYXN0X3dlYXJfY250KSB7CisJCQkJbGVhc3Rfd2Vhcl9jbnQgPSBnX3BXZWFyQ291bnRlcltwaHlfaWR4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQkJCWxlYXN0X3dlYXJfYmxrX2lkeCA9IGk7CisJCQl9CisJCX0KKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkiZmluZF9sZWFzdF93b3JuX2Jsa19mb3JfbDJfY2FjaGU6ICIKKwkJImZpbmQgYmxvY2sgJWQgd2l0aCBsZWFzdCB3b3JuIGNvdW50ZXIgKCVkKVxuIiwKKwkJbGVhc3Rfd2Vhcl9ibGtfaWR4LCBsZWFzdF93ZWFyX2NudCk7CisKKwlyZXR1cm4gbGVhc3Rfd2Vhcl9ibGtfaWR4OworfQorCisKKworLyogR2V0IGJsb2NrcyBmb3IgTGV2ZWwyIENhY2hlICovCitzdGF0aWMgaW50IGdldF9sMl9jYWNoZV9ibGtzKHZvaWQpCit7CisJaW50IG47CisJdTMyIGJsazsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCisJZm9yIChuID0gMDsgbiA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFOyBuKyspIHsKKwkJYmxrID0gZmluZF9sZWFzdF93b3JuX2Jsa19mb3JfbDJfY2FjaGUoKTsKKwkJaWYgKGJsayA+IERldmljZUluZm8ud0RhdGFCbG9ja051bSkgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkiZmluZF9sZWFzdF93b3JuX2Jsa19mb3JfbDJfY2FjaGU6ICIKKwkJCQkiTm8gZW5vdWdoIGZyZWUgTkFORCBibG9ja3MgKG46ICVkKSBmb3IgTDIgQ2FjaGUhXG4iLCBuKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCS8qIFRhZyB0aGUgZnJlZSBibG9jayBhcyBkaXNjYXJkIGluIGJsb2NrIHRhYmxlICovCisJCXBidFtibGtdID0gKHBidFtibGtdICYgKH5CQURfQkxPQ0spKSB8IERJU0NBUkRfQkxPQ0s7CisJCS8qIEFkZCB0aGUgZnJlZSBibG9jayB0byB0aGUgTDIgQ2FjaGUgYmxvY2sgYXJyYXkgKi8KKwkJY2FjaGVfbDIuYmxrX2FycmF5W25dID0gcGJ0W2Jsa10gJiAofkJBRF9CTE9DSyk7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKK3N0YXRpYyBpbnQgZXJhc2VfbDJfY2FjaGVfYmxvY2tzKHZvaWQpCit7CisJaW50IGksIHJldCA9IFBBU1M7CisJdTMyIHBibGssIGxibGs7CisJdTY0IGFkZHI7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFOyBpKyspIHsKKwkJcGJsayA9IGNhY2hlX2wyLmJsa19hcnJheVtpXTsKKworCQkvKiBJZiB0aGUgTDIgY2FjaGUgYmxvY2sgaXMgaW52YWxpZCwgdGhlbiBqdXN0IHNraXAgaXQgKi8KKwkJaWYgKE1BWF9VMzJfVkFMVUUgPT0gcGJsaykKKwkJCWNvbnRpbnVlOworCisJCUJVR19PTihwYmxrID4gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKTsKKworCQlhZGRyID0gKHU2NClwYmxrIDw8IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemU7CisJCWlmIChQQVNTID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKGFkZHIpKSB7CisJCQkvKiBHZXQgbG9naWNhbCBibG9jayBudW1iZXIgb2YgdGhlIGVyYXNlZCBibG9jayAqLworCQkJbGJsayA9IEZUTF9HZXRfQmxvY2tfSW5kZXgocGJsayk7CisJCQlCVUdfT04oQkFEX0JMT0NLID09IGxibGspOworCQkJLyogVGFnIGl0IGFzIGZyZWUgaW4gdGhlIGJsb2NrIHRhYmxlICovCisJCQlwYnRbbGJsa10gJj0gKHUzMikofkRJU0NBUkRfQkxPQ0spOworCQkJcGJ0W2xibGtdIHw9ICh1MzIpKFNQQVJFX0JMT0NLKTsKKwkJfSBlbHNlIHsKKwkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtsYmxrXSk7CisJCQlyZXQgPSBFUlI7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogTWVyZ2UgdGhlIHZhbGlkIGRhdGEgcGFnZSBpbiB0aGUgTDIgY2FjaGUgYmxvY2tzIGludG8gTkFORC4KKyovCitzdGF0aWMgaW50IGZsdXNoX2wyX2NhY2hlKHZvaWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0ICpwbmQsICp0bXBfcG5kOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIHBoeV9ibGssIGwyX2JsazsKKwl1NjQgYWRkcjsKKwl1MTYgbDJfcGFnZTsKKwlpbnQgaSwgcmV0ID0gUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKGxpc3RfZW1wdHkoJmNhY2hlX2wyLnRhYmxlLmxpc3QpKSAvKiBObyBkYXRhIHRvIGZsdXNoICovCisJCXJldHVybiByZXQ7CisKKwkvL2R1bXBfY2FjaGVfbDJfdGFibGUoKTsKKworCWlmIChJTl9QUk9HUkVTU19CTE9DS19UQUJMRSAhPSBnX2NCbG9ja1RhYmxlU3RhdHVzKSB7CisJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZV9sMi50YWJsZS5saXN0KSB7CisJCXBuZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCwgbGlzdCk7CisJCWlmIChJU19TUEFSRV9CTE9DSyhwbmQtPmxvZ2ljYWxfYmxrX251bSkgfHwKKwkJCUlTX0JBRF9CTE9DSyhwbmQtPmxvZ2ljYWxfYmxrX251bSkgfHwKKwkJCUlTX0RJU0NBUkRFRF9CTE9DSyhwbmQtPmxvZ2ljYWxfYmxrX251bSkpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCW1lbXNldChjYWNoZV9sMl9ibGtfYnVmLCAweGZmLCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsJCQkKKwkJfSBlbHNlIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCXBoeV9ibGsgPSBwYnRbcG5kLT5sb2dpY2FsX2Jsa19udW1dICYgKH5CQURfQkxPQ0spOworCQkJcmV0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW4oY2FjaGVfbDJfYmxrX2J1ZiwKKwkJCQlwaHlfYmxrLCAwLCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKTsKKwkJCWlmIChyZXQgPT0gRkFJTCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBOQU5EIHBhZ2UgZmFpbCBpbiAlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOyBpKyspIHsKKwkJCWlmIChwbmQtPnBhZ2VzX2FycmF5W2ldICE9IE1BWF9VMzJfVkFMVUUpIHsKKwkJCQlsMl9ibGsgPSBjYWNoZV9sMi5ibGtfYXJyYXlbKHBuZC0+cGFnZXNfYXJyYXlbaV0gPj4gMTYpICYgMHhmZmZmXTsKKwkJCQlsMl9wYWdlID0gcG5kLT5wYWdlc19hcnJheVtpXSAmIDB4ZmZmZjsKKwkJCQlyZXQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbihjYWNoZV9sMl9wYWdlX2J1ZiwgbDJfYmxrLCBsMl9wYWdlLCAxKTsKKwkJCQlpZiAocmV0ID09IEZBSUwpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIE5BTkQgcGFnZSBmYWlsIGluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCQkJCX0KKwkJCQltZW1jcHkoY2FjaGVfbDJfYmxrX2J1ZiArIGkgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsIGNhY2hlX2wyX3BhZ2VfYnVmLCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCQkJfQorCQl9CisKKwkJLyogRmluZCBhIGZyZWUgYmxvY2sgYW5kIHRhZyB0aGUgb3JpZ2luYWwgYmxvY2sgYXMgZGlzY2FyZGVkICovCisJCWFkZHIgPSAodTY0KXBuZC0+bG9naWNhbF9ibGtfbnVtIDw8IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemU7CisJCXJldCA9IEZUTF9SZXBsYWNlX0Jsb2NrKGFkZHIpOworCQlpZiAocmV0ID09IEZBSUwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRlRMX1JlcGxhY2VfQmxvY2sgZmFpbCBpbiAlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJfQorCisJCS8qIFdyaXRlIGJhY2sgdGhlIHVwZGF0ZWQgZGF0YSBpbnRvIE5BTkQgKi8KKwkJcGh5X2JsayA9IHBidFtwbmQtPmxvZ2ljYWxfYmxrX251bV0gJiAofkJBRF9CTE9DSyk7CisJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbihjYWNoZV9sMl9ibGtfYnVmLCBwaHlfYmxrLCAwLCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSkgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkiUHJvZ3JhbSBOQU5EIGJsb2NrICVkIGZhaWwgaW4gJXMsIExpbmUgJWRcbiIsCisJCQkJcGh5X2JsaywgX19GSUxFX18sIF9fTElORV9fKTsKKwkJCS8qIFRoaXMgbWF5IG5vdCBiZSByZWFsbHkgYSBiYWQgYmxvY2suIFNvIGp1c3QgdGFnIGl0IGFzIGRpc2NhcmRlZC4gKi8KKwkJCS8qIFRoZW4gaXQgaGFzIGEgY2hhbmNlIHRvIGJlIGVyYXNlZCB3aGVuIGdhcmJhZ2UgY29sbGVjdGlvbi4gKi8KKwkJCS8qIElmIGl0IGlzIHJlYWxseSBiYWQsIHRoZW4gdGhlIGVyYXNlIHdpbGwgZmFpbCBhbmQgaXQgd2lsbCBiZSBtYXJrZWQgKi8KKwkJCS8qIGFzIGJhZCB0aGVuLiBPdGhlcndpc2UgaXQgd2lsbCBiZSBtYXJrZWQgYXMgZnJlZSBhbmQgY2FuIGJlIHVzZWQgYWdhaW4gKi8KKwkJCU1BUktfQkxLX0FTX0RJU0NBUkQocGJ0W3BuZC0+bG9naWNhbF9ibGtfbnVtXSk7CisJCQkvKiBGaW5kIGFub3RoZXIgZnJlZSBibG9jayBhbmQgd3JpdGUgaXQgYWdhaW4gKi8KKwkJCUZUTF9SZXBsYWNlX0Jsb2NrKGFkZHIpOworCQkJcGh5X2JsayA9IHBidFtwbmQtPmxvZ2ljYWxfYmxrX251bV0gJiAofkJBRF9CTE9DSyk7CisJCQlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4oY2FjaGVfbDJfYmxrX2J1ZiwgcGh5X2JsaywgMCwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byB3cml0ZSBiYWNrIGJsb2NrICVkIHdoZW4gZmx1c2ggTDIgY2FjaGUuIgorCQkJCQkiU29tZSBkYXRhIHdpbGwgYmUgbG9zdCFcbiIsIHBoeV9ibGspOworCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtwbmQtPmxvZ2ljYWxfYmxrX251bV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogdGFnIHRoZSBuZXcgZnJlZSBibG9jayBhcyB1c2VkIGJsb2NrICovCisJCQlwYnRbcG5kLT5sb2dpY2FsX2Jsa19udW1dICY9ICh+U1BBUkVfQkxPQ0spOworCQl9CisJfQorCisJLyogRGVzdHJveSB0aGUgTDIgQ2FjaGUgdGFibGUgYW5kIGZyZWUgdGhlIG1lbW9yeSBvZiBhbGwgbm9kZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG5kLCB0bXBfcG5kLCAmY2FjaGVfbDIudGFibGUubGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmcG5kLT5saXN0KTsKKwkJa2ZyZWUocG5kKTsKKwl9CisKKwkvKiBFcmFzZSBkaXNjYXJkIEwyIGNhY2hlIGJsb2NrcyAqLworCWlmIChlcmFzZV9sMl9jYWNoZV9ibG9ja3MoKSAhPSBQQVNTKQorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIiBFcmFzZSBMMiBjYWNoZSBibG9ja3MgZXJyb3IgaW4gJXMsIExpbmUgJWRcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCisJLyogSW5pdCB0aGUgTGV2ZWwyIENhY2hlIGRhdGEgc3RydWN0dXJlICovCisJZm9yIChpID0gMDsgaSA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFOyBpKyspCisJCWNhY2hlX2wyLmJsa19hcnJheVtpXSA9IE1BWF9VMzJfVkFMVUU7CisJY2FjaGVfbDIuY3VyX2Jsa19pZHggPSAwOworCWNhY2hlX2wyLmN1cl9wYWdlX251bSA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlX2wyLnRhYmxlLmxpc3QpOworCWNhY2hlX2wyLnRhYmxlLmxvZ2ljYWxfYmxrX251bSA9IE1BWF9VMzJfVkFMVUU7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV3JpdGUgYmFjayBhIGNoYW5nZWQgdmljdGltIGNhY2hlIGl0ZW0gdG8gdGhlIExldmVsMiBDYWNoZQorICogYW5kIHVwZGF0ZSB0aGUgTDIgQ2FjaGUgdGFibGUgdG8gbWFwIHRoZSBjaGFuZ2UuCisgKiBJZiB0aGUgTDIgQ2FjaGUgaXMgZnVsbCwgdGhlbiBzdGFydCB0byBkbyB0aGUgTDIgQ2FjaGUgZmx1c2guCisqLworc3RhdGljIGludCB3cml0ZV9iYWNrX3RvX2wyX2NhY2hlKHU4ICpidWYsIHU2NCBsb2dpY2FsX2FkZHIpCit7CisJdTMyIGxvZ2ljYWxfYmxrX251bTsKKwl1MTYgbG9naWNhbF9wYWdlX251bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBzcGVjdHJhX2wyX2NhY2hlX2xpc3QgKnBuZCwgKnBuZF9uZXc7CisJdTMyIG5vZGVfc2l6ZTsKKwlpbnQgaSwgZm91bmQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwkvKgorCSAqIElmIExldmVsMiBDYWNoZSB0YWJsZSBpcyBlbXB0eSwgdGhlbiBpdCBtZWFucyBlaXRoZXI6CisJICogMS4gVGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgRlRMX2luaXQKKwkgKiBvcgorCSAqIDIuIFRoZSBMZXZlbDIgQ2FjaGUgaGFzIGp1c3QgYmVlbiBmbHVzaGVkCisJICoKKwkgKiBTbywgJ3N0ZWFsJyBzb21lIGZyZWUgYmxvY2tzIGZyb20gTkFORCBmb3IgTDIgQ2FjaGUgdXNpbmcKKwkgKiBieSBqdXN0IG1hc2sgdGhlbSBhcyBkaXNjYXJkIGluIHRoZSBibG9jayB0YWJsZQorCSovCisJaWYgKGxpc3RfZW1wdHkoJmNhY2hlX2wyLnRhYmxlLmxpc3QpKSB7CisJCUJVR19PTihjYWNoZV9sMi5jdXJfYmxrX2lkeCAhPSAwKTsKKwkJQlVHX09OKGNhY2hlX2wyLmN1cl9wYWdlX251bSE9IDApOworCQlCVUdfT04oY2FjaGVfbDIudGFibGUubG9naWNhbF9ibGtfbnVtICE9IE1BWF9VMzJfVkFMVUUpOworCQlpZiAoRkFJTCA9PSBnZXRfbDJfY2FjaGVfYmxrcygpKSB7CisJCQlHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKwkJCWlmIChGQUlMID09IGdldF9sMl9jYWNoZV9ibGtzKCkpIHsKKwkJCQlwcmludGsoS0VSTl9BTEVSVCAiRmFpbCB0byBnZXQgTDIgY2FjaGUgYmxrcyFcbiIpOworCQkJCXJldHVybiBGQUlMOworCQkJfQorCQl9CisJfQorCisJbG9naWNhbF9ibGtfbnVtID0gQkxLX0ZST01fQUREUihsb2dpY2FsX2FkZHIpOworCWxvZ2ljYWxfcGFnZV9udW0gPSBQQUdFX0ZST01fQUREUihsb2dpY2FsX2FkZHIsIGxvZ2ljYWxfYmxrX251bSk7CisJQlVHX09OKGxvZ2ljYWxfYmxrX251bSA9PSBNQVhfVTMyX1ZBTFVFKTsKKworCS8qIFdyaXRlIHRoZSBjYWNoZSBpdGVtIGRhdGEgaW50byB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBMMiBDYWNoZSAqLworI2lmIENNRF9ETUEKKwkvKgorCSAqIFRPRE8KKwkgKi8KKyNlbHNlCisJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKGJ1ZiwKKwkJY2FjaGVfbDIuYmxrX2FycmF5W2NhY2hlX2wyLmN1cl9ibGtfaWR4XSwKKwkJY2FjaGVfbDIuY3VyX3BhZ2VfbnVtLCAxKSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiTkFORCBQcm9ncmFtIGZhaWwgaW4gIgorCQkJIiVzLCBMaW5lICVkLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sCisJCQljYWNoZV9sMi5ibGtfYXJyYXlbY2FjaGVfbDIuY3VyX2Jsa19pZHhdKTsKKworCQkvKiBUT0RPOiB0YWcgdGhlIGN1cnJlbnQgYmxvY2sgYXMgYmFkIGFuZCB0cnkgYWdhaW4gKi8KKworCQlyZXR1cm4gRkFJTDsKKwl9CisjZW5kaWYKKworCS8qIAorCSAqIFVwZGF0ZSB0aGUgTDIgQ2FjaGUgdGFibGUuCisJICoKKwkgKiBGaXJzdCBzZWFjaGluZyBpbiB0aGUgdGFibGUgdG8gc2VlIHdoZXRoZXIgdGhlIGxvZ2ljYWwgYmxvY2sKKwkgKiBoYXMgYmVlbiBtYXBwZWQuIElmIG5vdCwgdGhlbiBrbWFsbG9jIGEgbmV3IG5vZGUgZm9yIHRoZQorCSAqIGxvZ2ljYWwgYmxvY2ssIGZpbGwgZGF0YSwgYW5kIHRoZW4gaW5zZXJ0IGl0IHRvIHRoZSBsaXN0LgorCSAqIE90aGVyd2lzZSwganVzdCB1cGRhdGUgdGhlIG1hcHBlZCBub2RlIGRpcmVjdGx5LgorCSAqLworCWZvdW5kID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZV9sMi50YWJsZS5saXN0KSB7CisJCXBuZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCwgbGlzdCk7CisJCWlmIChwbmQtPmxvZ2ljYWxfYmxrX251bSA9PSBsb2dpY2FsX2Jsa19udW0pIHsKKwkJCXBuZC0+cGFnZXNfYXJyYXlbbG9naWNhbF9wYWdlX251bV0gPQorCQkJCShjYWNoZV9sMi5jdXJfYmxrX2lkeCA8PCAxNikgfAorCQkJCWNhY2hlX2wyLmN1cl9wYWdlX251bTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQpIHsgLyogQ3JlYXRlIG5ldyBub2RlIGZvciB0aGUgbG9naWNhbCBibG9jayBoZXJlICovCisKKwkJLyogVGhlIGxvZ2ljYWwgcGFnZXMgdG8gcGh5c2ljYWwgcGFnZXMgbWFwIGFycmF5IGlzCisJCSAqIGxvY2F0ZWQgYXQgdGhlIGVuZCBvZiBzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0LgorCQkgKi8gCisJCW5vZGVfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0KSArCisJCQlzaXplb2YodTMyKSAqIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2s7CisJCXBuZF9uZXcgPSBrbWFsbG9jKG5vZGVfc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmICghcG5kX25ldykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8ga21hbGxvYyBpbiAlcyBMaW5lICVkXG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQkvKiAKKwkJCSAqIFRPRE86IE5lZWQgdG8gZmx1c2ggYWxsIHRoZSBMMiBjYWNoZSBpbnRvIE5BTkQgQVNBUAorCQkJICogc2luY2Ugbm8gbWVtb3J5IGF2YWlsYWJsZSBoZXJlCisJCQkgKi8KKwkJfQorCQlwbmRfbmV3LT5sb2dpY2FsX2Jsa19udW0gPSBsb2dpY2FsX2Jsa19udW07CisJCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOyBpKyspCisJCQlwbmRfbmV3LT5wYWdlc19hcnJheVtpXSA9IE1BWF9VMzJfVkFMVUU7CisJCXBuZF9uZXctPnBhZ2VzX2FycmF5W2xvZ2ljYWxfcGFnZV9udW1dID0KKwkJCShjYWNoZV9sMi5jdXJfYmxrX2lkeCA8PCAxNikgfCBjYWNoZV9sMi5jdXJfcGFnZV9udW07CisJCWxpc3RfYWRkKCZwbmRfbmV3LT5saXN0LCAmY2FjaGVfbDIudGFibGUubGlzdCk7CisJfQorCisJLyogSW5jcmVhc2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiBwb2ludGVyIG9mIHRoZSBMMiBDYWNoZSAqLworCWNhY2hlX2wyLmN1cl9wYWdlX251bSsrOworCWlmIChjYWNoZV9sMi5jdXJfcGFnZV9udW0gPj0gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykgeworCQljYWNoZV9sMi5jdXJfYmxrX2lkeCsrOworCQlpZiAoY2FjaGVfbDIuY3VyX2Jsa19pZHggPj0gQkxLX05VTV9GT1JfTDJfQ0FDSEUpIHsKKwkJCS8qIFRoZSBMMiBDYWNoZSBpcyBmdWxsLiBOZWVkIHRvIGZsdXNoIGl0IG5vdyAqLworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkiTDIgQ2FjaGUgaXMgZnVsbCwgd2lsbCBzdGFydCB0byBmbHVzaCBpdFxuIik7CisJCQlmbHVzaF9sMl9jYWNoZSgpOworCQl9IGVsc2UgeworCQkJY2FjaGVfbDIuY3VyX3BhZ2VfbnVtID0gMDsKKwkJfQorCX0KKworCXJldHVybiBQQVNTOworfQorCisvKgorICogU2VhY2ggaW4gdGhlIExldmVsMiBDYWNoZSB0YWJsZSB0byBmaW5kIHRoZSBjYWNoZSBpdGVtLgorICogSWYgZmluZCwgcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBOQU5EIHBhZ2Ugb2YgTDIgQ2FjaGUsCisgKiBPdGhlcndpc2UsIHJldHVybiBGQUlMLgorICovCitzdGF0aWMgaW50IHNlYXJjaF9sMl9jYWNoZSh1OCAqYnVmLCB1NjQgbG9naWNhbF9hZGRyKQoreworCXUzMiBsb2dpY2FsX2Jsa19udW07CisJdTE2IGxvZ2ljYWxfcGFnZV9udW07CisJc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3Qgc3BlY3RyYV9sMl9jYWNoZV9saXN0ICpwbmQ7CisJdTMyIHRtcCA9IE1BWF9VMzJfVkFMVUU7CisJdTMyIHBoeV9ibGs7CisJdTE2IHBoeV9wYWdlOworCWludCByZXQgPSBGQUlMOworCisJbG9naWNhbF9ibGtfbnVtID0gQkxLX0ZST01fQUREUihsb2dpY2FsX2FkZHIpOworCWxvZ2ljYWxfcGFnZV9udW0gPSBQQUdFX0ZST01fQUREUihsb2dpY2FsX2FkZHIsIGxvZ2ljYWxfYmxrX251bSk7CisKKwlsaXN0X2Zvcl9lYWNoKHAsICZjYWNoZV9sMi50YWJsZS5saXN0KSB7CisJCXBuZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCwgbGlzdCk7CisJCWlmIChwbmQtPmxvZ2ljYWxfYmxrX251bSA9PSBsb2dpY2FsX2Jsa19udW0pIHsKKwkJCXRtcCA9IHBuZC0+cGFnZXNfYXJyYXlbbG9naWNhbF9wYWdlX251bV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh0bXAgIT0gTUFYX1UzMl9WQUxVRSkgeyAvKiBGb3VuZCB2YWxpZCBtYXAgKi8KKwkJcGh5X2JsayA9IGNhY2hlX2wyLmJsa19hcnJheVsodG1wID4+IDE2KSAmIDB4RkZGRl07CisJCXBoeV9wYWdlID0gdG1wICYgMHhGRkZGOworI2lmIENNRF9ETUEKKwkJLyogVE9ETyAqLworI2Vsc2UKKwkJcmV0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW4oYnVmLCBwaHlfYmxrLCBwaHlfcGFnZSwgMSk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWNoZV9Xcml0ZV9CYWNrCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBkYXRhIGNhY2hlZCBpbiBzeXMgbWVtb3J5CisqICAgICAgICAgICAgICAgYWRkcmVzcyBvZiBmcmVlIGJsb2NrIGluIGZsYXNoCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgd3JpdGVzIGFsbCB0aGUgcGFnZXMgb2YgQ2FjaGUgQmxvY2sgdG8gZmxhc2gKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfQ2FjaGVfV3JpdGVfQmFjayh1OCAqcERhdGEsIHU2NCBibGtfYWRkcikKK3sKKwlpbnQgaSwgaiwgaUVyYXNlOworCXU2NCBvbGRfcGFnZV9hZGRyLCBhZGRyLCBwaHlfYWRkcjsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiBsYmE7CisJCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJb2xkX3BhZ2VfYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcihibGtfYWRkcikgKworCQlHTE9CX3U2NF9SZW1haW5kZXIoYmxrX2FkZHIsIDIpOworCisJaUVyYXNlID0gKEZBSUwgPT0gRlRMX1JlcGxhY2VfQmxvY2soYmxrX2FkZHIpKSA/IFBBU1MgOiBGQUlMOworCisJcGJ0W0JMS19GUk9NX0FERFIoYmxrX2FkZHIpXSAmPSAoflNQQVJFX0JMT0NLKTsKKworI2lmIENNRF9ETUEKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9IChzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSAodTMyKShibGtfYWRkciA+PgorCQlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKTsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQlwYnRbKHUzMikoYmxrX2FkZHIgPj4gRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSldOworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKworCWlmIChJTl9QUk9HUkVTU19CTE9DS19UQUJMRSAhPSBnX2NCbG9ja1RhYmxlU3RhdHVzKSB7CisJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVUUllfVElNRVM7IGkrKykgeworCQlpZiAoUEFTUyA9PSBpRXJhc2UpIHsKKwkJCXBoeV9hZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKGJsa19hZGRyKTsKKwkJCWlmIChGQUlMID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKHBoeV9hZGRyKSkgeworCQkJCWxiYSA9IEJMS19GUk9NX0FERFIoYmxrX2FkZHIpOworCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtsYmFdKTsKKwkJCQlpID0gUkVUUllfVElNRVM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgQ0FDSEVfSVRFTV9OVU07IGorKykgeworCQkJYWRkciA9IENhY2hlLmFycmF5W2pdLmFkZHJlc3M7CisJCQlpZiAoKGFkZHIgPD0gYmxrX2FkZHIpICYmCisJCQkJKChhZGRyICsgQ2FjaGUuY2FjaGVfaXRlbV9zaXplKSA+IGJsa19hZGRyKSkKKwkJCQljYWNoZV9ibG9ja190b193cml0ZSA9IGo7CisJCX0KKworCQlwaHlfYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcihibGtfYWRkcik7CisJCWlmIChQQVNTID09IEZUTF9DYWNoZV9VcGRhdGVfQmxvY2socERhdGEsCisJCQkJCW9sZF9wYWdlX2FkZHIsIHBoeV9hZGRyKSkgeworCQkJY2FjaGVfYmxvY2tfdG9fd3JpdGUgPSBVTkhJVF9DQUNIRV9JVEVNOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpRXJhc2UgPSBQQVNTOworCQl9CisJfQorCisJaWYgKGkgPj0gUkVUUllfVElNRVMpIHsKKwkJaWYgKEVSUiA9PSBGVExfRmxhc2hfRXJyb3JfSGFuZGxlKHBEYXRhLAorCQkJCQlvbGRfcGFnZV9hZGRyLCBibGtfYWRkcikpCisJCQlyZXR1cm4gRVJSOworCQllbHNlCisJCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfQ2FjaGVfV3JpdGVfUGFnZQorKiBJbnB1dHM6ICAgICAgIFBvaW50ZXIgdG8gYnVmZmVyLCBwYWdlIGFkZHJlc3MsIGNhY2hlIGJsb2NrIG51bWJlcgorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIEl0IHdyaXRlcyB0aGUgZGF0YSBpbiBDYWNoZSBCbG9jaworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHZvaWQgRlRMX0NhY2hlX1dyaXRlX1BhZ2UodTggKnBEYXRhLCB1NjQgcGFnZV9hZGRyLAorCQkJCXU4IGNhY2hlX2JsaywgdTE2IGZsYWcpCit7CisJdTggKnBEZXN0OworCXU2NCBhZGRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWFkZHIgPSBDYWNoZS5hcnJheVtjYWNoZV9ibGtdLmFkZHJlc3M7CisJcERlc3QgPSBDYWNoZS5hcnJheVtjYWNoZV9ibGtdLmJ1ZjsKKworCXBEZXN0ICs9ICh1bnNpZ25lZCBsb25nKShwYWdlX2FkZHIgLSBhZGRyKTsKKwlDYWNoZS5hcnJheVtjYWNoZV9ibGtdLmNoYW5nZWQgPSBTRVQ7CisjaWYgQ01EX0RNQQorI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5pdGVtID0gY2FjaGVfYmxrOworCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuYWRkcmVzcyA9CisJCQlDYWNoZS5hcnJheVtjYWNoZV9ibGtdLmFkZHJlc3M7CisJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5jYWNoZS5jaGFuZ2VkID0KKwkJCUNhY2hlLmFycmF5W2NhY2hlX2Jsa10uY2hhbmdlZDsKKyNlbmRpZgorCUdMT0JfTExEX01lbUNvcHlfQ01EKHBEZXN0LCBwRGF0YSwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplLCBmbGFnKTsKKwlmdGxfY21kX2NudCsrOworI2Vsc2UKKwltZW1jcHkocERlc3QsIHBEYXRhLCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworI2VuZGlmCisJaWYgKENhY2hlLmFycmF5W2NhY2hlX2Jsa10udXNlX2NudCA8IE1BWF9XT1JEX1ZBTFVFKQorCQlDYWNoZS5hcnJheVtjYWNoZV9ibGtdLnVzZV9jbnQrKzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DYWNoZV9Xcml0ZQorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJdCB3cml0ZXMgbGVhc3QgZnJlcXVlbnRseSB1c2VkIENhY2hlIGJsb2NrIHRvIGZsYXNoIGlmIGl0CisqICAgICAgICAgICAgICAgaGFzIGJlZW4gY2hhbmdlZAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX0NhY2hlX1dyaXRlKHZvaWQpCit7CisJaW50IGksIGJSZXN1bHQgPSBQQVNTOworCXUxNiBiTk8sIGxlYXN0X2NvdW50ID0gMHhGRkZGOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCUZUTF9DYWxjdWxhdGVfTFJVKCk7CisKKwliTk8gPSBDYWNoZS5MUlU7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJGVExfQ2FjaGVfV3JpdGU6ICIKKwkJIkxlYXN0IHVzZWQgY2FjaGUgYmxvY2sgaXMgJWRcbiIsIGJOTyk7CisKKwlpZiAoQ2FjaGUuYXJyYXlbYk5PXS5jaGFuZ2VkICE9IFNFVCkKKwkJcmV0dXJuIGJSZXN1bHQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkZUTF9DYWNoZV9Xcml0ZTogQ2FjaGUiCisJCSIgQmxvY2sgJWQgY29udGFpbmluZyBsb2dpY2FsIGJsb2NrICVkIGlzIGRpcnR5XG4iLAorCQliTk8sCisJCSh1MzIpKENhY2hlLmFycmF5W2JOT10uYWRkcmVzcyA+PgorCQlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKSk7CisjaWYgQ01EX0RNQQorI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5pdGVtID0gYk5POworCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuYWRkcmVzcyA9CisJCQkJQ2FjaGUuYXJyYXlbYk5PXS5hZGRyZXNzOworCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuY2hhbmdlZCA9IENMRUFSOworI2VuZGlmCisjZW5kaWYKKwliUmVzdWx0ID0gd3JpdGVfYmFja190b19sMl9jYWNoZShDYWNoZS5hcnJheVtiTk9dLmJ1ZiwKKwkJCUNhY2hlLmFycmF5W2JOT10uYWRkcmVzcyk7CisJaWYgKGJSZXN1bHQgIT0gRVJSKQorCQlDYWNoZS5hcnJheVtiTk9dLmNoYW5nZWQgPSBDTEVBUjsKKworCWxlYXN0X2NvdW50ID0gQ2FjaGUuYXJyYXlbYk5PXS51c2VfY250OworCisJZm9yIChpID0gMDsgaSA8IENBQ0hFX0lURU1fTlVNOyBpKyspIHsKKwkJaWYgKGkgPT0gYk5PKQorCQkJY29udGludWU7CisJCWlmIChDYWNoZS5hcnJheVtpXS51c2VfY250ID4gMCkKKwkJCUNhY2hlLmFycmF5W2ldLnVzZV9jbnQgLT0gbGVhc3RfY291bnQ7CisJfQorCisJcmV0dXJuIGJSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0NhY2hlX1JlYWQKKyogSW5wdXRzOiAgICAgICBQYWdlIGFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJdCByZWFkcyB0aGUgYmxvY2sgZnJvbSBkZXZpY2UgaW4gQ2FjaGUgQmxvY2sKKyogICAgICAgICAgICAgICBTZXQgdGhlIExSVSBjb3VudCB0byAxCisqICAgICAgICAgICAgICAgTWFyayB0aGUgQ2FjaGUgQmxvY2sgYXMgY2xlYW4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9DYWNoZV9SZWFkKHU2NCBsb2dpY2FsX2FkZHIpCit7CisJdTY0IGl0ZW1fYWRkciwgcGh5X2FkZHI7CisJdTE2IG51bTsKKwlpbnQgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW51bSA9IENhY2hlLkxSVTsgLyogVGhlIExSVSBjYWNoZSBpdGVtIHdpbGwgYmUgb3ZlcndyaXR0ZW4gKi8KKworCWl0ZW1fYWRkciA9ICh1NjQpR0xPQl91NjRfRGl2KGxvZ2ljYWxfYWRkciwgQ2FjaGUuY2FjaGVfaXRlbV9zaXplKSAqCisJCUNhY2hlLmNhY2hlX2l0ZW1fc2l6ZTsKKwlDYWNoZS5hcnJheVtudW1dLmFkZHJlc3MgPSBpdGVtX2FkZHI7CisJQ2FjaGUuYXJyYXlbbnVtXS51c2VfY250ID0gMTsKKwlDYWNoZS5hcnJheVtudW1dLmNoYW5nZWQgPSBDTEVBUjsKKworI2lmIENNRF9ETUEKKyNpZiBSRVNUT1JFX0NBQ0hFX09OX0NETUFfQ0hBSU5fRkFJTFVSRQorCWludF9jYWNoZVtmdGxfY21kX2NudF0uaXRlbSA9IG51bTsKKwlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLmNhY2hlLmFkZHJlc3MgPQorCQkJQ2FjaGUuYXJyYXlbbnVtXS5hZGRyZXNzOworCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuY2hhbmdlZCA9CisJCQlDYWNoZS5hcnJheVtudW1dLmNoYW5nZWQ7CisjZW5kaWYKKyNlbmRpZgorCS8qCisJICogU2VhcmNoIGluIEwyIENhY2hlLiBJZiBoaXQsIGZpbGwgZGF0YSBpbnRvIEwxIENhY2hlIGl0ZW0gYnVmZmVyLAorCSAqIE90aGVyd2lzZSwgcmVhZCBpdCBmcm9tIE5BTkQKKwkgKi8KKwlyZXQgPSBzZWFyY2hfbDJfY2FjaGUoQ2FjaGUuYXJyYXlbbnVtXS5idWYsIGxvZ2ljYWxfYWRkcik7CisJaWYgKFBBU1MgPT0gcmV0KSAvKiBIaXQgaW4gTDIgQ2FjaGUgKi8KKwkJcmV0dXJuIHJldDsKKworCS8qIENvbXB1dGUgdGhlIHBoeXNpY2FsIHN0YXJ0IGFkZHJlc3Mgb2YgTkFORCBkZXZpY2UgYWNjb3JkaW5nIHRvICovCisJLyogdGhlIGxvZ2ljYWwgc3RhcnQgYWRkcmVzcyBvZiB0aGUgY2FjaGUgaXRlbSAoTFJVIGNhY2hlIGl0ZW0pICovCisJcGh5X2FkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoaXRlbV9hZGRyKSArCisJCUdMT0JfdTY0X1JlbWFpbmRlcihpdGVtX2FkZHIsIDIpOworCisJcmV0dXJuIEZUTF9DYWNoZV9SZWFkX0FsbChDYWNoZS5hcnJheVtudW1dLmJ1ZiwgcGh5X2FkZHIpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9DaGVja19CbG9ja19UYWJsZQorKiBJbnB1dHM6ICAgICAgID8KKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJdCBjaGVja3MgdGhlIGNvcnJlY3RuZXNzIG9mIGVhY2ggYmxvY2sgdGFibGUgZW50cnkKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9DaGVja19CbG9ja19UYWJsZShpbnQgd09sZFRhYmxlKQoreworCXUzMiBpOworCWludCB3UmVzdWx0ID0gUEFTUzsKKwl1MzIgYmxrX2lkeDsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXU4ICpwRmxhZyA9IGZsYWdfY2hlY2tfYmxrX3RhYmxlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoTlVMTCAhPSBwRmxhZykgeworCQltZW1zZXQocEZsYWcsIEZBSUwsIERldmljZUluZm8ud0RhdGFCbG9ja051bSk7CisJCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQkJYmxrX2lkeCA9ICh1MzIpKHBidFtpXSAmICh+QkFEX0JMT0NLKSk7CisKKwkJCS8qCisJCQkgKiAyMDA4MTAwNi9LQlYgLSBDaGFuZ2VkIHRvIHBGbGFnW2ldIHJlZmVyZW5jZQorCQkJICogdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93CisJCQkgKi8KKworCQkJLyoKKwkJCSAqIDIwMDgtMTAtMjAgWXVucGVuZyBOb3RlOiBUaGlzIGNoYW5nZSBhdm9pZAorCQkJICogYnVmZmVyIG92ZXJmbG93LCBidXQgY2hhbmdlZCBmdW5jdGlvbiBvZgorCQkJICogdGhlIGNvZGUsIHNvIGl0IHNob3VsZCBiZSByZS13cml0ZSBsYXRlcgorCQkJICovCisJCQlpZiAoKGJsa19pZHggPiBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spIHx8CisJCQkJUEFTUyA9PSBwRmxhZ1tpXSkgeworCQkJCXdSZXN1bHQgPSBGQUlMOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlwRmxhZ1tpXSA9IFBBU1M7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1dyaXRlX0Jsb2NrX1RhYmxlCisqIElucHV0czogICAgICAgZmxhc2cKKyogT3V0cHV0czogICAgICAwPUJsb2NrIFRhYmxlIHdhcyB1cGRhdGVkLiBObyB3cml0ZSBkb25lLiAxPUJsb2NrIHdyaXRlIG5lZWRzIHRvCisqIGhhcHBlbi4gLTEgRXJyb3IKKyogRGVzY3JpcHRpb246ICBJdCB3cml0ZXMgdGhlIGJsb2NrIHRhYmxlCisqICAgICAgICAgICAgICAgQmxvY2sgdGFibGUgYWx3YXlzIG1hcHBlZCB0byBMQkEgMCB3aGljaCBpbnR1cm4gbWFwcGVkCisqICAgICAgICAgICAgICAgdG8gYW55IHBoeXNpY2FsIGJsb2NrCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfV3JpdGVfQmxvY2tfVGFibGUoaW50IHdGb3JjZSkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCWludCB3U3VjY2VzcyA9IFBBU1M7CisJdTMyIHdUZW1wQmxvY2tUYWJsZUluZGV4OworCXUxNiBidF9wYWdlcywgbmV3X2J0X29mZnNldDsKKwl1OCBibG9ja2NoYW5nZW9jY3VyZWQgPSAwOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJYnRfcGFnZXMgPSBGVExfR2V0X0Jsb2NrX1RhYmxlX0ZsYXNoX1NpemVfUGFnZXMoKTsKKworCWlmIChJTl9QUk9HUkVTU19CTE9DS19UQUJMRSAhPSBnX2NCbG9ja1RhYmxlU3RhdHVzKQorCQlyZXR1cm4gMDsKKworCWlmIChQQVNTID09IHdGb3JjZSkgeworCQlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0KKwkJCSh1MTYpKERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2sgLSBidF9wYWdlcyk7CisjaWYgQ01EX0RNQQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmdfd0Jsb2NrVGFibGVPZmZzZXQgPQorCQkJZ193QmxvY2tUYWJsZU9mZnNldDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwMTsKKyNlbmRpZgorCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkiSW5zaWRlIEZUTF9Xcml0ZV9CbG9ja19UYWJsZTogYmxvY2sgJWQgUGFnZTolZFxuIiwKKwkJZ193QmxvY2tUYWJsZUluZGV4LCBnX3dCbG9ja1RhYmxlT2Zmc2V0KTsKKworCWRvIHsKKwkJbmV3X2J0X29mZnNldCA9IGdfd0Jsb2NrVGFibGVPZmZzZXQgKyBidF9wYWdlcyArIDE7CisJCWlmICgoMCA9PSAobmV3X2J0X29mZnNldCAlIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spKSB8fAorCQkJKG5ld19idF9vZmZzZXQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB8fAorCQkJKEZBSUwgPT0gd1N1Y2Nlc3MpKSB7CisJCQl3VGVtcEJsb2NrVGFibGVJbmRleCA9IEZUTF9SZXBsYWNlX0Jsb2NrX1RhYmxlKCk7CisJCQlpZiAoQkFEX0JMT0NLID09IHdUZW1wQmxvY2tUYWJsZUluZGV4KQorCQkJCXJldHVybiBFUlI7CisJCQlpZiAoIWJsb2NrY2hhbmdlb2NjdXJlZCkgeworCQkJCWJ0X2Jsb2NrX2NoYW5nZWQgPSAxOworCQkJCWJsb2NrY2hhbmdlb2NjdXJlZCA9IDE7CisJCQl9CisKKwkJCWdfd0Jsb2NrVGFibGVJbmRleCA9IHdUZW1wQmxvY2tUYWJsZUluZGV4OworCQkJZ193QmxvY2tUYWJsZU9mZnNldCA9IDA7CisJCQlwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdID0gZ193QmxvY2tUYWJsZUluZGV4OworI2lmIENNRF9ETUEKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9CisJCQkJICAgIGZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmdfd0Jsb2NrVGFibGVPZmZzZXQgPQorCQkJCSAgICBnX3dCbG9ja1RhYmxlT2Zmc2V0OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmdfd0Jsb2NrVGFibGVJbmRleCA9CisJCQkJICAgIGdfd0Jsb2NrVGFibGVJbmRleDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MDM7CisKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPQorCQkJCXNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkgICAgZnRsX2NtZF9jbnQ7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPQorCQkJCSAgICBCTE9DS19UQUJMRV9JTkRFWDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9FbnRyeV9WYWx1ZSA9CisJCQkJICAgIHBidFtCTE9DS19UQUJMRV9JTkRFWF07CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworI2VuZGlmCisJCX0KKworCQl3U3VjY2VzcyA9IEZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhKCk7CisJCWlmIChGQUlMID09IHdTdWNjZXNzKQorCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W0JMT0NLX1RBQkxFX0lOREVYXSk7CisJfSB3aGlsZSAoRkFJTCA9PSB3U3VjY2Vzcyk7CisKKwlnX2NCbG9ja1RhYmxlU3RhdHVzID0gQ1VSUkVOVF9CTE9DS19UQUJMRTsKKworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfRmxhc2hfRm9ybWF0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1MKKyogRGVzY3JpcHRpb246ICBUaGUgYmxvY2sgdGFibGUgc3RvcmVzIGJhZCBibG9jayBpbmZvLCBpbmNsdWRpbmcgTURGKworKiAgICAgICAgICAgICAgIGJsb2NrcyBnb25lIGJhZCBvdmVyIHRoZSBhZ2VzLiBUaGVyZWZvcmUsIGlmIHdlIGhhdmUgYQorKiAgICAgICAgICAgICAgIGJsb2NrIHRhYmxlIGluIHBsYWNlLCB0aGVuIHVzZSBpdCB0byBzY2FuIGZvciBiYWQgYmxvY2tzCisqICAgICAgICAgICAgICAgSWYgbm90LCB0aGVuIHNjYW4gZm9yIE1ERi4KKyogICAgICAgICAgICAgICBOb3csIGEgYmxvY2sgdGFibGUgd2lsbCBvbmx5IGJlIGZvdW5kIGlmIHNwZWN0cmEgd2FzIGFscmVhZHkKKyogICAgICAgICAgICAgICBiZWluZyB1c2VkLiBGb3IgYSBmcmVzaCBmbGFzaCwgd2UnbGwgZ28gdGhydSBzY2FubmluZyBmb3IKKyogICAgICAgICAgICAgICBNREYuIElmIHNwZWN0cmEgd2FzIGJlaW5nIHVzZWQsIHRoZW4gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdAorKiAgICAgICAgICAgICAgIHRoZSBNREYgaGFzIGJlZW4gY29ycnVwdGVkLiBTcGVjdHJhIGF2b2lkcyB3cml0aW5nIHRvIHRoZQorKiAgICAgICAgICAgICAgIGZpcnN0IDIgYnl0ZXMgb2YgdGhlIHNwYXJlIGFyZWEgdG8gYWxsIHBhZ2VzIGluIGEgYmxvY2suIFRoaXMKKyogICAgICAgICAgICAgICBjb3ZlcnMgYWxsIGtub3duIGZsYXNoIGRldmljZXMuIEhvd2V2ZXIsIHNpbmNlIGZsYXNoCisqICAgICAgICAgICAgICAgbWFudWZhY3R1cmVycyBoYXZlIG5vIHN0YW5kYXJkIG9mIHdoZXJlIHRoZSBNREYgaXMgc3RvcmVkLAorKiAgICAgICAgICAgICAgIHRoaXMgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBNREYgaXMgcHJvdGVjdGVkIGZvciBmdXR1cmUKKyogICAgICAgICAgICAgICBkZXZpY2VzIHRvby4gVGhlIGluaXRpYWwgc2Nhbm5pbmcgZm9yIHRoZSBibG9jayB0YWJsZSBhc3N1cmVzCisqICAgICAgICAgICAgICAgdGhpcy4gSXQgaXMgb2sgZXZlbiBpZiB0aGUgYmxvY2sgdGFibGUgaXMgb3V0ZGF0ZWQsIGFzIGFsbAorKiAgICAgICAgICAgICAgIHdlJ3JlIGxvb2tpbmcgZm9yIGFyZSBiYWQgYmxvY2sgbWFya2Vycy4KKyogICAgICAgICAgICAgICBVc2UgdGhpcyB3aGVuIG1vdW50aW5nIGEgZmlsZSBzeXN0ZW0gb3Igc3RhcnRpbmcgYQorKiAgICAgICAgICAgICAgIG5ldyBmbGFzaC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgIEZUTF9Gb3JtYXRfRmxhc2godTggdmFsaWRfYmxvY2tfdGFibGUpCit7CisJdTMyIGksIGo7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgdGVtcE5vZGU7CisJaW50IHJldDsKKworI2lmIENNRF9ETUEKKwl1MzIgKnBidFN0YXJ0aW5nQ29weSA9ICh1MzIgKilnX3BCVFN0YXJ0aW5nQ29weTsKKwlpZiAoZnRsX2NtZF9jbnQpCisJCXJldHVybiBGQUlMOworI2VuZGlmCisKKwlpZiAoRkFJTCA9PSBGVExfQ2hlY2tfQmxvY2tfVGFibGUoRkFJTCkpCisJCXZhbGlkX2Jsb2NrX3RhYmxlID0gMDsKKworCWlmICh2YWxpZF9ibG9ja190YWJsZSkgeworCQl1OCBzd2l0Y2hlZCA9IDE7CisJCXUzMiBibG9jaywgazsKKworCQlrID0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJCXdoaWxlIChzd2l0Y2hlZCAmJiAoayA8IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jaykpIHsKKwkJCXN3aXRjaGVkID0gMDsKKwkJCWsrKzsKKwkJCWZvciAoaiA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrLCBpID0gMDsKKwkJCWogPD0gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrOworCQkJaisrLCBpKyspIHsKKwkJCQlibG9jayA9IChwYnRbaV0gJiB+QkFEX0JMT0NLKSAtCisJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQkJCWlmIChibG9jayAhPSBpKSB7CisJCQkJCXN3aXRjaGVkID0gMTsKKwkJCQkJdGVtcE5vZGUgPSBwYnRbaV07CisJCQkJCXBidFtpXSA9IHBidFtibG9ja107CisJCQkJCXBidFtibG9ja10gPSB0ZW1wTm9kZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKChrID09IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jaykgJiYgc3dpdGNoZWQpCisJCQl2YWxpZF9ibG9ja190YWJsZSA9IDA7CisJfQorCisJaWYgKCF2YWxpZF9ibG9ja190YWJsZSkgeworCQltZW1zZXQoZ19wQmxvY2tUYWJsZSwgMCwKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MzIpKTsKKwkJbWVtc2V0KGdfcFdlYXJDb3VudGVyLCAwLAorCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSk7CisJCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJCW1lbXNldChnX3BSZWFkQ291bnRlciwgMCwKKwkJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KSk7CisjaWYgQ01EX0RNQQorCQltZW1zZXQoZ19wQlRTdGFydGluZ0NvcHksIDAsCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKSk7CisJCW1lbXNldChnX3BXZWFyQ291bnRlckNvcHksIDAsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSk7CisJCWlmIChEZXZpY2VJbmZvLk1MQ0RldmljZSkKKwkJCW1lbXNldChnX3BSZWFkQ291bnRlckNvcHksIDAsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHUxNikpOworI2VuZGlmCisJCWZvciAoaiA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrLCBpID0gMDsKKwkJCWogPD0gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrOworCQkJaisrLCBpKyspIHsKKwkJCWlmIChHTE9CX0xMRF9HZXRfQmFkX0Jsb2NrKCh1MzIpaikpCisJCQkJcGJ0W2ldID0gKHUzMikoQkFEX0JMT0NLIHwgaik7CisJCX0KKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiRXJhc2luZyBhbGwgYmxvY2tzIGluIHRoZSBOQU5EXG4iKTsKKworCWZvciAoaiA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrLCBpID0gMDsKKwkJaiA8PSBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2s7CisJCWorKywgaSsrKSB7CisJCWlmICgocGJ0W2ldICYgQkFEX0JMT0NLKSAhPSBCQURfQkxPQ0spIHsKKwkJCXJldCA9IEdMT0JfTExEX0VyYXNlX0Jsb2NrKGopOworCQkJaWYgKEZBSUwgPT0gcmV0KSB7CisJCQkJcGJ0W2ldID0gKHUzMikoaik7CisJCQkJTUFSS19CTE9DS19BU19CQUQocGJ0W2ldKTsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJICAgICAgICJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJICAgICAgICJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAoaW50KWopOworCQkJfSBlbHNlIHsKKwkJCQlwYnRbaV0gPSAodTMyKShTUEFSRV9CTE9DSyB8IGopOworCQkJfQorCQl9CisjaWYgQ01EX0RNQQorCQlwYnRTdGFydGluZ0NvcHlbaV0gPSBwYnRbaV07CisjZW5kaWYKKwl9CisKKwlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSAwOyAoaSA8PSAoRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0KKwkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrKSkKKwkJCSYmICgocGJ0W2ldICYgQkFEX0JMT0NLKSA9PSBCQURfQkxPQ0spOyBpKyspCisJCTsKKwlpZiAoaSA+IChEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBbGwgYmxvY2tzIGJhZCFcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9IGVsc2UgeworCQlnX3dCbG9ja1RhYmxlSW5kZXggPSBwYnRbaV0gJiB+QkFEX0JMT0NLOworCQlpZiAoaSAhPSBCTE9DS19UQUJMRV9JTkRFWCkgeworCQkJdGVtcE5vZGUgPSBwYnRbaV07CisJCQlwYnRbaV0gPSBwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdOworCQkJcGJ0W0JMT0NLX1RBQkxFX0lOREVYXSA9IHRlbXBOb2RlOworCQl9CisJfQorCXBidFtCTE9DS19UQUJMRV9JTkRFWF0gJj0gKH5TUEFSRV9CTE9DSyk7CisKKyNpZiBDTURfRE1BCisJcGJ0U3RhcnRpbmdDb3B5W0JMT0NLX1RBQkxFX0lOREVYXSAmPSAoflNQQVJFX0JMT0NLKTsKKyNlbmRpZgorCisJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCW1lbXNldChnX3BCVEJsb2NrcywgMHhGRiwKKwkJCSgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKSAqIHNpemVvZih1MzIpKTsKKwlnX3BCVEJsb2Nrc1tGSVJTVF9CVF9JRC1GSVJTVF9CVF9JRF0gPSBnX3dCbG9ja1RhYmxlSW5kZXg7CisJRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKEZBSUwpOworCisJZm9yIChpID0gMDsgaSA8IENBQ0hFX0lURU1fTlVNOyBpKyspIHsKKwkJQ2FjaGUuYXJyYXlbaV0uYWRkcmVzcyA9IE5BTkRfQ0FDSEVfSU5JVF9BRERSOworCQlDYWNoZS5hcnJheVtpXS51c2VfY250ID0gMDsKKwkJQ2FjaGUuYXJyYXlbaV0uY2hhbmdlZCAgPSBDTEVBUjsKKwl9CisKKyNpZiAoUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUgJiYgQ01EX0RNQSkKKwltZW1jcHkoKHZvaWQgKikmY2FjaGVfc3RhcnRfY29weSwgKHZvaWQgKikmQ2FjaGUsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX2NhY2hlX3RhZykpOworI2VuZGlmCisJcmV0dXJuIFBBU1M7Cit9CisKK3N0YXRpYyBpbnQgIGZvcmNlX2Zvcm1hdF9uYW5kKHZvaWQpCit7CisJdTMyIGk7CisKKwkvKiBGb3JjZSBlcmFzZSB0aGUgd2hvbGUgdW5wcm90ZWN0ZWQgcGh5c2ljYWwgcGFydGl0b24gb2YgTkFORCAqLworCXByaW50ayhLRVJOX0FMRVJUICJTdGFydCB0byBmb3JjZSBlcmFzZSB3aG9sZSBOQU5EIGRldmljZSAuLi5cbiIpOworCXByaW50ayhLRVJOX0FMRVJUICJGcm9tIHBoeWljYWwgYmxvY2sgJWQgdG8gJWRcbiIsCisJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrLCBEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2spOworCWZvciAoaSA9IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOyBpIDw9IERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jazsgaSsrKSB7CisJCWlmIChHTE9CX0xMRF9FcmFzZV9CbG9jayhpKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGZvcmNlIGVyYXNlIE5BTkQgYmxvY2sgJWRcbiIsIGkpOworCX0KKwlwcmludGsoS0VSTl9BTEVSVCAiRm9yY2UgRXJhc2UgZW5kcy4gUGxlYXNlIHJlYm9vdCB0aGUgc3lzdGVtIC4uLlxuIik7CisJd2hpbGUoMSk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworaW50IEdMT0JfRlRMX0ZsYXNoX0Zvcm1hdCh2b2lkKQoreworCS8vcmV0dXJuIEZUTF9Gb3JtYXRfRmxhc2goMSk7CisJcmV0dXJuIGZvcmNlX2Zvcm1hdF9uYW5kKCk7CisKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfU2VhcmNoX0Jsb2NrX1RhYmxlX0lOX0Jsb2NrCisqIElucHV0czogICAgICAgQmxvY2sgTnVtYmVyCisqICAgICAgICAgICAgICAgUG9pbnRlciB0byBwYWdlCisqIE91dHB1dHM6ICAgICAgUEFTUyAvIEZBSUwKKyogICAgICAgICAgICAgICBQYWdlIGNvbnRhdGluaW5nIHRoZSBibG9jayB0YWJsZQorKiBEZXNjcmlwdGlvbjogIEl0IHNlYXJjaGVzIHRoZSBibG9jayB0YWJsZSBpbiB0aGUgYmxvY2sKKyogICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfU2VhcmNoX0Jsb2NrX1RhYmxlX0lOX0Jsb2NrKHUzMiBCVF9CbG9jaywKKwkJCQkJCXU4IEJUX1RhZywgdTE2ICpQYWdlKQoreworCXUxNiBpLCBqLCBrOworCXUxNiBSZXN1bHQgPSBQQVNTOworCXUxNiBMYXN0X0lQRiA9IDA7CisJdTggIEJUX0ZvdW5kID0gMDsKKwl1OCAqdGFnYXJyYXk7CisJdTggKnRlbXBidWYgPSB0bXBfYnVmX3NlYXJjaF9idF9pbl9ibG9jazsKKwl1OCAqcFNwYXJlQnVmID0gc3BhcmVfYnVmX3NlYXJjaF9idF9pbl9ibG9jazsKKwl1OCAqcFNwYXJlQnVmQlRMYXN0UGFnZSA9IHNwYXJlX2J1Zl9idF9zZWFyY2hfYnRfaW5fYmxvY2s7CisJdTggYnRfZmxhZ19sYXN0X3BhZ2UgPSAweEZGOworCXU4IHNlYXJjaF9pbl9wcmV2aW91c19wYWdlcyA9IDA7CisJdTE2IGJ0X3BhZ2VzOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCSAgICAgICAiU2VhcmNoaW5nIGJsb2NrIHRhYmxlIGluICV1IGJsb2NrXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClCVF9CbG9jayk7CisKKwlidF9wYWdlcyA9IEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9QYWdlcygpOworCisJZm9yIChpID0gYnRfcGFnZXM7IGkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOworCQkJCWkgKz0gKGJ0X3BhZ2VzICsgMSkpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkgICAgICAgIlNlYXJjaGluZyBsYXN0IElQRjogJWRcbiIsIGkpOworCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHRlbXBidWYsCisJCQkJCQkJQlRfQmxvY2ssIGksIDEpOworCisJCWlmICgwID09IG1lbWNtcCh0ZW1wYnVmLCBnX3BJUEYsIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSkpIHsKKwkJCWlmICgoaSArIGJ0X3BhZ2VzICsgMSkgPCBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXNlYXJjaF9pbl9wcmV2aW91c19wYWdlcyA9IDE7CisJCQkJTGFzdF9JUEYgPSBpOworCQkJfQorCQl9CisKKwkJaWYgKCFzZWFyY2hfaW5fcHJldmlvdXNfcGFnZXMpIHsKKwkJCWlmIChpICE9IGJ0X3BhZ2VzKSB7CisJCQkJaSAtPSAoYnRfcGFnZXMgKyAxKTsKKwkJCQlMYXN0X0lQRiA9IGk7CisJCQl9CisJCX0KKworCQlpZiAoMCA9PSBMYXN0X0lQRikKKwkJCWJyZWFrOworCisJCWlmICghc2VhcmNoX2luX3ByZXZpb3VzX3BhZ2VzKSB7CisJCQlpID0gaSArIDE7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiUmVhZGluZyB0aGUgc3BhcmUgYXJlYSBvZiBCbG9jayAldSBQYWdlICV1IiwKKwkJCQkodW5zaWduZWQgaW50KUJUX0Jsb2NrLCBpKTsKKwkJCVJlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZShwU3BhcmVCdWYsCisJCQkJCQkJQlRfQmxvY2ssIGksIDEpOworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgQmxvY2sgJXUgUGFnZSAldSIsCisJCQkJKHVuc2lnbmVkIGludClCVF9CbG9jaywgaSArIGJ0X3BhZ2VzIC0gMSk7CisJCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmQlRMYXN0UGFnZSwKKwkJCQlCVF9CbG9jaywgaSArIGJ0X3BhZ2VzIC0gMSwgMSk7CisKKwkJCWsgPSAwOworCQkJaiA9IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZyhwU3BhcmVCdWYsICZ0YWdhcnJheSk7CisJCQlpZiAoaikgeworCQkJCWZvciAoOyBrIDwgajsgaysrKSB7CisJCQkJCWlmICh0YWdhcnJheVtrXSA9PSBCVF9UYWcpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChrIDwgaikKKwkJCQlidF9mbGFnID0gdGFnYXJyYXlba107CisJCQllbHNlCisJCQkJUmVzdWx0ID0gRkFJTDsKKworCQkJaWYgKFJlc3VsdCA9PSBQQVNTKSB7CisJCQkJayA9IDA7CisJCQkJaiA9IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZygKKwkJCQkJcFNwYXJlQnVmQlRMYXN0UGFnZSwgJnRhZ2FycmF5KTsKKwkJCQlpZiAoaikgeworCQkJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCQkJaWYgKHRhZ2FycmF5W2tdID09IEJUX1RhZykKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChrIDwgaikKKwkJCQkJYnRfZmxhZ19sYXN0X3BhZ2UgPSB0YWdhcnJheVtrXTsKKwkJCQllbHNlCisJCQkJCVJlc3VsdCA9IEZBSUw7CisKKwkJCQlpZiAoUmVzdWx0ID09IFBBU1MpIHsKKwkJCQkJaWYgKGJ0X2ZsYWcgPT0gYnRfZmxhZ19sYXN0X3BhZ2UpIHsKKwkJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkJCSJCbG9jayB0YWJsZSBpcyBmb3VuZCIKKwkJCQkJCQkiIGluIHBhZ2UgYWZ0ZXIgSVBGICIKKwkJCQkJCQkiYXQgYmxvY2sgJWQgIgorCQkJCQkJCSJwYWdlICVkXG4iLAorCQkJCQkJCShpbnQpQlRfQmxvY2ssIGkpOworCQkJCQkJQlRfRm91bmQgPSAxOworCQkJCQkJKlBhZ2UgID0gaTsKKwkJCQkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPQorCQkJCQkJCUNVUlJFTlRfQkxPQ0tfVEFCTEU7CisJCQkJCQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCVJlc3VsdCA9IEZBSUw7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoc2VhcmNoX2luX3ByZXZpb3VzX3BhZ2VzKQorCQkJaSA9IGkgLSBidF9wYWdlczsKKwkJZWxzZQorCQkJaSA9IGkgLSAoYnRfcGFnZXMgKyAxKTsKKworCQlSZXN1bHQgPSBQQVNTOworCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgQmxvY2sgJWQgUGFnZSAlZCIsCisJCQkoaW50KUJUX0Jsb2NrLCBpKTsKKworCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmLCBCVF9CbG9jaywgaSwgMSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlJlYWRpbmcgdGhlIHNwYXJlIGFyZWEgb2YgQmxvY2sgJXUgUGFnZSAldSIsCisJCQkodW5zaWduZWQgaW50KUJUX0Jsb2NrLCBpICsgYnRfcGFnZXMgLSAxKTsKKworCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmQlRMYXN0UGFnZSwKKwkJCQkJQlRfQmxvY2ssIGkgKyBidF9wYWdlcyAtIDEsIDEpOworCisJCWsgPSAwOworCQlqID0gRlRMX0V4dHJhY3RfQmxvY2tfVGFibGVfVGFnKHBTcGFyZUJ1ZiwgJnRhZ2FycmF5KTsKKwkJaWYgKGopIHsKKwkJCWZvciAoOyBrIDwgajsgaysrKSB7CisJCQkJaWYgKHRhZ2FycmF5W2tdID09IEJUX1RhZykKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoayA8IGopCisJCQlidF9mbGFnID0gdGFnYXJyYXlba107CisJCWVsc2UKKwkJCVJlc3VsdCA9IEZBSUw7CisKKwkJaWYgKFJlc3VsdCA9PSBQQVNTKSB7CisJCQlrID0gMDsKKwkJCWogPSBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcocFNwYXJlQnVmQlRMYXN0UGFnZSwKKwkJCQkJCSZ0YWdhcnJheSk7CisJCQlpZiAoaikgeworCQkJCWZvciAoOyBrIDwgajsgaysrKSB7CisJCQkJCWlmICh0YWdhcnJheVtrXSA9PSBCVF9UYWcpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChrIDwgaikgeworCQkJCWJ0X2ZsYWdfbGFzdF9wYWdlID0gdGFnYXJyYXlba107CisJCQl9IGVsc2UgeworCQkJCVJlc3VsdCA9IEZBSUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChSZXN1bHQgPT0gUEFTUykgeworCQkJCWlmIChidF9mbGFnID09IGJ0X2ZsYWdfbGFzdF9wYWdlKSB7CisJCQkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCQkJIkJsb2NrIHRhYmxlIGlzIGZvdW5kICIKKwkJCQkJCSJpbiBwYWdlIHByaW9yIHRvIElQRiAiCisJCQkJCQkiYXQgYmxvY2sgJXUgcGFnZSAlZFxuIiwKKwkJCQkJCSh1bnNpZ25lZCBpbnQpQlRfQmxvY2ssIGkpOworCQkJCQlCVF9Gb3VuZCA9IDE7CisJCQkJCSpQYWdlICA9IGk7CisJCQkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPQorCQkJCQkJSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCVJlc3VsdCA9IEZBSUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChSZXN1bHQgPT0gRkFJTCkgeworCQlpZiAoKExhc3RfSVBGID4gYnRfcGFnZXMpICYmIChpIDwgTGFzdF9JUEYpICYmICghQlRfRm91bmQpKSB7CisJCQlCVF9Gb3VuZCA9IDE7CisJCQkqUGFnZSA9IGkgLSAoYnRfcGFnZXMgKyAxKTsKKwkJfQorCQlpZiAoKExhc3RfSVBGID09IGJ0X3BhZ2VzKSAmJiAoaSA8IExhc3RfSVBGKSAmJiAoIUJUX0ZvdW5kKSkKKwkJCWdvdG8gZnVuY19yZXR1cm47CisJfQorCisJaWYgKExhc3RfSVBGID09IDApIHsKKwkJaSA9IDA7CisJCVJlc3VsdCA9IFBBU1M7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUmVhZGluZyB0aGUgc3BhcmUgYXJlYSBvZiAiCisJCQkiQmxvY2sgJXUgUGFnZSAldSIsICh1bnNpZ25lZCBpbnQpQlRfQmxvY2ssIGkpOworCisJCVJlc3VsdCA9IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZShwU3BhcmVCdWYsIEJUX0Jsb2NrLCBpLCAxKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiUmVhZGluZyB0aGUgc3BhcmUgYXJlYSBvZiBCbG9jayAldSBQYWdlICV1IiwKKwkJCSh1bnNpZ25lZCBpbnQpQlRfQmxvY2ssIGkgKyBidF9wYWdlcyAtIDEpOworCQlSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUocFNwYXJlQnVmQlRMYXN0UGFnZSwKKwkJCQkJQlRfQmxvY2ssIGkgKyBidF9wYWdlcyAtIDEsIDEpOworCisJCWsgPSAwOworCQlqID0gRlRMX0V4dHJhY3RfQmxvY2tfVGFibGVfVGFnKHBTcGFyZUJ1ZiwgJnRhZ2FycmF5KTsKKwkJaWYgKGopIHsKKwkJCWZvciAoOyBrIDwgajsgaysrKSB7CisJCQkJaWYgKHRhZ2FycmF5W2tdID09IEJUX1RhZykKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoayA8IGopCisJCQlidF9mbGFnID0gdGFnYXJyYXlba107CisJCWVsc2UKKwkJCVJlc3VsdCA9IEZBSUw7CisKKwkJaWYgKFJlc3VsdCA9PSBQQVNTKSB7CisJCQlrID0gMDsKKwkJCWogPSBGVExfRXh0cmFjdF9CbG9ja19UYWJsZV9UYWcocFNwYXJlQnVmQlRMYXN0UGFnZSwKKwkJCQkJCQkmdGFnYXJyYXkpOworCQkJaWYgKGopIHsKKwkJCQlmb3IgKDsgayA8IGo7IGsrKykgeworCQkJCQlpZiAodGFnYXJyYXlba10gPT0gQlRfVGFnKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoayA8IGopCisJCQkJYnRfZmxhZ19sYXN0X3BhZ2UgPSB0YWdhcnJheVtrXTsKKwkJCWVsc2UKKwkJCQlSZXN1bHQgPSBGQUlMOworCisJCQlpZiAoUmVzdWx0ID09IFBBU1MpIHsKKwkJCQlpZiAoYnRfZmxhZyA9PSBidF9mbGFnX2xhc3RfcGFnZSkgeworCQkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkJCSJCbG9jayB0YWJsZSBpcyBmb3VuZCAiCisJCQkJCQkiaW4gcGFnZSBhZnRlciBJUEYgYXQgIgorCQkJCQkJImJsb2NrICV1IHBhZ2UgJXVcbiIsCisJCQkJCQkodW5zaWduZWQgaW50KUJUX0Jsb2NrLAorCQkJCQkJKHVuc2lnbmVkIGludClpKTsKKwkJCQkJQlRfRm91bmQgPSAxOworCQkJCQkqUGFnZSAgPSBpOworCQkJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0KKwkJCQkJCUNVUlJFTlRfQkxPQ0tfVEFCTEU7CisJCQkJCWdvdG8gZnVuY19yZXR1cm47CisJCQkJfSBlbHNlIHsKKwkJCQkJUmVzdWx0ID0gRkFJTDsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoUmVzdWx0ID09IEZBSUwpCisJCQlnb3RvIGZ1bmNfcmV0dXJuOworCX0KK2Z1bmNfcmV0dXJuOgorCXJldHVybiBSZXN1bHQ7Cit9CisKK3U4ICpnZXRfYmxrX3RhYmxlX3N0YXJ0X2FkZHIodm9pZCkKK3sKKwlyZXR1cm4gZ19wQmxvY2tUYWJsZTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfYmxrX3RhYmxlX2xlbih2b2lkKQoreworCXJldHVybiBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKTsKK30KKwordTggKmdldF93ZWFyX2xldmVsaW5nX3RhYmxlX3N0YXJ0X2FkZHIodm9pZCkKK3sKKwlyZXR1cm4gZ19wV2VhckNvdW50ZXI7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X3dlYXJfbGV2ZWxpbmdfdGFibGVfbGVuKHZvaWQpCit7CisJcmV0dXJuIERldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1OCk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1JlYWRfQmxvY2tfVGFibGUKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUyAvIEZBSUwKKyogRGVzY3JpcHRpb246ICByZWFkIHRoZSBmbGFzaCBzcGFyZSBhcmVhIGFuZCBmaW5kIGEgYmxvY2sgY29udGFpbmluZyB0aGUKKyogICAgICAgICAgICAgICBtb3N0IHJlY2VudCBibG9jayB0YWJsZShoYXZpbmcgbGFyZ2VzdCBibG9ja190YWJsZV9jb3VudGVyKS4KKyogICAgICAgICAgICAgICBGaW5kIHRoZSBsYXN0IHdyaXR0ZW4gQmxvY2sgdGFibGUgaW4gdGhpcyBibG9jay4KKyogICAgICAgICAgICAgICBDaGVjayB0aGUgY29ycmVjdG5lc3Mgb2YgQmxvY2sgVGFibGUKKyogICAgICAgICAgICAgICBJZiBDRE1BIGlzIGVuYWJsZWQsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluCisqICAgICAgICAgICAgICAgcG9sbGluZyBtb2RlLgorKiAgICAgICAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gc3RvcmUgY2hhbmdlcyBpbiBCbG9jayB0YWJsZSBpbiB0aGlzCisqICAgICAgICAgICAgICAgZnVuY3Rpb24gYXMgaXQgaXMgY2FsbGVkIG9ubHkgYXQgaW5pdGlhbGl6YXRpb24KKyoKKyogICAgICAgICAgICAgICBOb3RlOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgaW5pdGlhbGl6YXRpb24KKyogICAgICAgICAgICAgICBiZWZvcmUgYW55IHJlYWQvZXJhc2Uvd3JpdGUgY29tbWFuZCBpc3N1ZWQgdG8gZmxhc2ggc28sCisqICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0IGZvciBDRE1BIGxpc3QgdG8gY29tcGxldGUgYXMgb2Ygbm93CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIGludCBGVExfUmVhZF9CbG9ja19UYWJsZSh2b2lkKQoreworCXUxNiBpID0gMDsKKwlpbnQgaywgajsKKwl1OCAqdGVtcEJ1ZiwgKnRhZ2FycmF5OworCWludCB3UmVzdWx0ID0gRkFJTDsKKwlpbnQgc3RhdHVzID0gRkFJTDsKKwl1OCBibG9ja190YWJsZV9mb3VuZCA9IDA7CisJaW50IHNlYXJjaF9yZXN1bHQ7CisJdTMyIEJsb2NrOworCXUxNiBQYWdlID0gMDsKKwl1MTYgUGFnZUNvdW50OworCXUxNiBidF9wYWdlczsKKwlpbnQgd0J5dGVzQ29waWVkID0gMCwgdGVtcHZhcjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXRlbXBCdWYgPSB0bXBfYnVmMV9yZWFkX2Jsa190YWJsZTsKKwlidF9wYWdlcyA9IEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9QYWdlcygpOworCisJZm9yIChqID0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2s7CisJCWogPD0gKGludClEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2s7CisJCQlqKyspIHsKKwkJc3RhdHVzID0gR0xPQl9MTERfUmVhZF9QYWdlX1NwYXJlKHRlbXBCdWYsIGosIDAsIDEpOworCQlrID0gMDsKKwkJaSA9IEZUTF9FeHRyYWN0X0Jsb2NrX1RhYmxlX1RhZyh0ZW1wQnVmLCAmdGFnYXJyYXkpOworCQlpZiAoaSkgeworCQkJc3RhdHVzICA9IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1BvbGxpbmcodGVtcEJ1ZiwKKwkJCQkJCQkJaiwgMCwgMSk7CisJCQlmb3IgKDsgayA8IGk7IGsrKykgeworCQkJCWlmICh0YWdhcnJheVtrXSA9PSB0ZW1wQnVmWzNdKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChrIDwgaSkKKwkJCWsgPSB0YWdhcnJheVtrXTsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIkJsb2NrIHRhYmxlIGlzIGNvbnRhaW5lZCBpbiBCbG9jayAlZCAlZFxuIiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGludClqLCAodW5zaWduZWQgaW50KWspOworCisJCWlmIChnX3BCVEJsb2Nrc1trLUZJUlNUX0JUX0lEXSA9PSBCVEJMT0NLX0lOVkFMKSB7CisJCQlnX3BCVEJsb2Nrc1trLUZJUlNUX0JUX0lEXSA9IGo7CisJCQlibG9ja190YWJsZV9mb3VuZCA9IDE7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZUTF9SZWFkX0Jsb2NrX1RhYmxlIC0iCisJCQkJIlRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbnMuICIKKwkJCQkiVHdvIGJsb2NrIHRhYmxlIGhhdmUgc2FtZSBjb3VudGVyICV1IVxuIiwgayk7CisJCX0KKwl9CisKKwlpZiAoYmxvY2tfdGFibGVfZm91bmQpIHsKKwkJaWYgKGdfcEJUQmxvY2tzW0ZJUlNUX0JUX0lEIC0gRklSU1RfQlRfSURdICE9IEJUQkxPQ0tfSU5WQUwgJiYKKwkJZ19wQlRCbG9ja3NbTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEXSAhPSBCVEJMT0NLX0lOVkFMKSB7CisJCQlqID0gTEFTVF9CVF9JRDsKKwkJCXdoaWxlICgoaiA+IEZJUlNUX0JUX0lEKSAmJgorCQkJKGdfcEJUQmxvY2tzW2ogLSBGSVJTVF9CVF9JRF0gIT0gQlRCTE9DS19JTlZBTCkpCisJCQkJai0tOworCQkJaWYgKGogPT0gRklSU1RfQlRfSUQpIHsKKwkJCQlqID0gTEFTVF9CVF9JRDsKKwkJCQlsYXN0X2VyYXNlZCA9IExBU1RfQlRfSUQ7CisJCQl9IGVsc2UgeworCQkJCWxhc3RfZXJhc2VkID0gKHU4KWogKyAxOworCQkJCXdoaWxlICgoaiA+IEZJUlNUX0JUX0lEKSAmJiAoQlRCTE9DS19JTlZBTCA9PQorCQkJCQlnX3BCVEJsb2Nrc1tqIC0gRklSU1RfQlRfSURdKSkKKwkJCQkJai0tOworCQkJfQorCQl9IGVsc2UgeworCQkJaiA9IEZJUlNUX0JUX0lEOworCQkJd2hpbGUgKGdfcEJUQmxvY2tzW2ogLSBGSVJTVF9CVF9JRF0gPT0gQlRCTE9DS19JTlZBTCkKKwkJCQlqKys7CisJCQlsYXN0X2VyYXNlZCA9ICh1OClqOworCQkJd2hpbGUgKChqIDwgTEFTVF9CVF9JRCkgJiYgKEJUQkxPQ0tfSU5WQUwgIT0KKwkJCQlnX3BCVEJsb2Nrc1tqIC0gRklSU1RfQlRfSURdKSkKKwkJCQlqKys7CisJCQlpZiAoZ19wQlRCbG9ja3Nbai1GSVJTVF9CVF9JRF0gPT0gQlRCTE9DS19JTlZBTCkKKwkJCQlqLS07CisJCX0KKworCQlpZiAobGFzdF9lcmFzZWQgPiBqKQorCQkJaiArPSAoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCk7CisKKwkJZm9yICg7IChqID49IGxhc3RfZXJhc2VkKSAmJiAoRkFJTCA9PSB3UmVzdWx0KTsgai0tKSB7CisJCQlpID0gKGogLSBGSVJTVF9CVF9JRCkgJQorCQkJCSgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKTsKKwkJCXNlYXJjaF9yZXN1bHQgPQorCQkJRlRMX1NlYXJjaF9CbG9ja19UYWJsZV9JTl9CbG9jayhnX3BCVEJsb2Nrc1tpXSwKKwkJCQkJCWkgKyBGSVJTVF9CVF9JRCwgJlBhZ2UpOworCQkJaWYgKGdfY0Jsb2NrVGFibGVTdGF0dXMgPT0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUpCisJCQkJYmxvY2tfdGFibGVfZm91bmQgPSAwOworCisJCQl3aGlsZSAoKHNlYXJjaF9yZXN1bHQgPT0gUEFTUykgJiYgKEZBSUwgPT0gd1Jlc3VsdCkpIHsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkJIkZUTF9SZWFkX0Jsb2NrX1RhYmxlOiIKKwkJCQkJIkJsb2NrOiAldSBQYWdlOiAldSAiCisJCQkJCSJjb250YWlucyBibG9jayB0YWJsZVxuIiwKKwkJCQkJKHVuc2lnbmVkIGludClnX3BCVEJsb2Nrc1tpXSwKKwkJCQkJKHVuc2lnbmVkIGludClQYWdlKTsKKworCQkJCXRlbXBCdWYgPSB0bXBfYnVmMl9yZWFkX2Jsa190YWJsZTsKKworCQkJCWZvciAoayA9IDA7IGsgPCBidF9wYWdlczsgaysrKSB7CisJCQkJCUJsb2NrID0gZ19wQlRCbG9ja3NbaV07CisJCQkJCVBhZ2VDb3VudCA9IDE7CisKKwkJCQkJc3RhdHVzICA9CisJCQkJCUdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1BvbGxpbmcoCisJCQkJCXRlbXBCdWYsIEJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworCisJCQkJCXRlbXB2YXIgPSBrID8gMCA6IDQ7CisKKwkJCQkJd0J5dGVzQ29waWVkICs9CisJCQkJCUZUTF9Db3B5X0Jsb2NrX1RhYmxlX0Zyb21fRmxhc2goCisJCQkJCXRlbXBCdWYgKyB0ZW1wdmFyLAorCQkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLSB0ZW1wdmFyLAorCQkJCQl3Qnl0ZXNDb3BpZWQpOworCisJCQkJCVBhZ2UrKzsKKwkJCQl9CisKKwkJCQl3UmVzdWx0ID0gRlRMX0NoZWNrX0Jsb2NrX1RhYmxlKEZBSUwpOworCQkJCWlmIChGQUlMID09IHdSZXN1bHQpIHsKKwkJCQkJYmxvY2tfdGFibGVfZm91bmQgPSAwOworCQkJCQlpZiAoUGFnZSA+IGJ0X3BhZ2VzKQorCQkJCQkJUGFnZSAtPSAoKGJ0X3BhZ2VzPDwxKSArIDEpOworCQkJCQllbHNlCisJCQkJCQlzZWFyY2hfcmVzdWx0ID0gRkFJTDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoUEFTUyA9PSB3UmVzdWx0KSB7CisJCWlmICghYmxvY2tfdGFibGVfZm91bmQpCisJCQlGVExfRXhlY3V0ZV9TUExfUmVjb3ZlcnkoKTsKKworCQlpZiAoZ19jQmxvY2tUYWJsZVN0YXR1cyA9PSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRSkKKwkJCWdfd0Jsb2NrVGFibGVPZmZzZXQgPSAodTE2KVBhZ2UgKyAxOworCQllbHNlCisJCQlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0gKHUxNilQYWdlIC0gYnRfcGFnZXM7CisKKwkJZ193QmxvY2tUYWJsZUluZGV4ID0gKHUzMilnX3BCVEJsb2Nrc1tpXTsKKworI2lmIENNRF9ETUEKKwkJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKQorCQkJbWVtY3B5KGdfcEJUU3RhcnRpbmdDb3B5LCBnX3BCbG9ja1RhYmxlLAorCQkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSAqIHNpemVvZih1MzIpCisJCQkJKyBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTgpCisJCQkJKyBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTE2KSk7CisJCWVsc2UKKwkJCW1lbWNweShnX3BCVFN0YXJ0aW5nQ29weSwgZ19wQmxvY2tUYWJsZSwKKwkJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gKiBzaXplb2YodTMyKQorCQkJCSsgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtICogc2l6ZW9mKHU4KSk7CisjZW5kaWYKKwl9CisKKwlpZiAoRkFJTCA9PSB3UmVzdWx0KQorCQlwcmludGsoS0VSTl9FUlIgIll1bnBlbmcgLSAiCisJCSJDYW4gbm90IGZpbmQgdmFsaWQgc3BlY3RyYSBibG9jayB0YWJsZSFcbiIpOworCisjaWYgQVVUT19GT1JNQVRfRkxBU0gKKwlpZiAoRkFJTCA9PSB3UmVzdWx0KSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiZG9pbmcgYXV0by1mb3JtYXRcbiIpOworCQl3UmVzdWx0ID0gRlRMX0Zvcm1hdF9GbGFzaCgwKTsKKwl9CisjZW5kaWYKKworCXJldHVybiB3UmVzdWx0OworfQorCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9GbGFzaF9FcnJvcl9IYW5kbGUKKyogSW5wdXRzOiAgICAgICBQb2ludGVyIHRvIGRhdGEKKyogICAgICAgICAgICAgICBQYWdlIGFkZHJlc3MKKyogICAgICAgICAgICAgICBCbG9jayBhZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSXQgaGFuZGxlcyBhbnkgZXJyb3Igb2NjdXJlZCBkdXJpbmcgU3BlY3RyYSBvcGVyYXRpb24KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9GbGFzaF9FcnJvcl9IYW5kbGUodTggKnBEYXRhLCB1NjQgb2xkX3BhZ2VfYWRkciwKKwkJCQl1NjQgYmxrX2FkZHIpCit7CisJdTMyIGk7CisJaW50IGo7CisJdTMyIHRtcF9ub2RlLCBibGtfbm9kZSA9IEJMS19GUk9NX0FERFIoYmxrX2FkZHIpOworCXU2NCBwaHlfYWRkcjsKKwlpbnQgd0VyYXNlID0gRkFJTDsKKwlpbnQgd1Jlc3VsdCA9IEZBSUw7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEVSUiA9PSBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKSkKKwkJcmV0dXJuIEVSUjsKKworCWRvIHsKKwkJZm9yIChpID0gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0KKwkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQkJCQlpID4gMDsgaS0tKSB7CisJCQlpZiAoSVNfU1BBUkVfQkxPQ0soaSkpIHsKKwkJCQl0bXBfbm9kZSA9ICh1MzIpKEJBRF9CTE9DSyB8CisJCQkJCXBidFtibGtfbm9kZV0pOworCQkJCXBidFtibGtfbm9kZV0gPSAodTMyKShwYnRbaV0gJgorCQkJCQkoflNQQVJFX0JMT0NLKSk7CisJCQkJcGJ0W2ldID0gdG1wX25vZGU7CisjaWYgQ01EX0RNQQorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkgICAgKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKikKKwkJCQkgICAgZ19wQlREZWx0YV9GcmVlOworCQkJCWdfcEJURGVsdGFfRnJlZSArPQorCQkJCSAgICBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJCSAgICBmdGxfY21kX2NudDsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPQorCQkJCSAgICBibGtfbm9kZTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQkJCSAgICBwYnRbYmxrX25vZGVdOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJICAgIChzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopCisJCQkJICAgIGdfcEJURGVsdGFfRnJlZTsKKwkJCQlnX3BCVERlbHRhX0ZyZWUgKz0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkgICAgZnRsX2NtZF9jbnQ7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gaTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbaV07CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKyNlbmRpZgorCQkJCXdSZXN1bHQgPSBQQVNTOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKEZBSUwgPT0gd1Jlc3VsdCkgeworCQkJaWYgKEZBSUwgPT0gR0xPQl9GVExfR2FyYmFnZV9Db2xsZWN0aW9uKCkpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJfQorCisJCXBoeV9hZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKGJsa19hZGRyKTsKKworCQlmb3IgKGogPSAwOyBqIDwgUkVUUllfVElNRVM7IGorKykgeworCQkJaWYgKFBBU1MgPT0gd0VyYXNlKSB7CisJCQkJaWYgKEZBSUwgPT0gR0xPQl9GVExfQmxvY2tfRXJhc2UocGh5X2FkZHIpKSB7CisJCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtibGtfbm9kZV0pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoUEFTUyA9PSBGVExfQ2FjaGVfVXBkYXRlX0Jsb2NrKHBEYXRhLAorCQkJCQkJCSAgIG9sZF9wYWdlX2FkZHIsCisJCQkJCQkJICAgcGh5X2FkZHIpKSB7CisJCQkJd1Jlc3VsdCA9IFBBU1M7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCXdSZXN1bHQgPSBGQUlMOworCQkJCXdFcmFzZSA9IFBBU1M7CisJCQl9CisJCX0KKwl9IHdoaWxlIChGQUlMID09IHdSZXN1bHQpOworCisJRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKEZBSUwpOworCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX0dldF9QYWdlX051bQorKiBJbnB1dHM6ICAgICAgIFNpemUgaW4gYnl0ZXMKKyogT3V0cHV0czogICAgICBTaXplIGluIHBhZ2VzCisqIERlc2NyaXB0aW9uOiAgSXQgY2FsY3VsYXRlcyB0aGUgcGFnZXMgcmVxdWlyZWQgZm9yIHRoZSBsZW5ndGggcGFzc2VkCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfR2V0X1BhZ2VfTnVtKHU2NCBsZW5ndGgpCit7CisJcmV0dXJuICh1MzIpKChsZW5ndGggPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSArCisJCShHTE9CX3U2NF9SZW1haW5kZXIobGVuZ3RoICwgMSkgPiAwID8gMSA6IDApKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIKKyogSW5wdXRzOiAgICAgICBCbG9jayBBZGRyZXNzIChieXRlIGZvcm1hdCkKKyogT3V0cHV0czogICAgICBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBibG9jay4KKyogRGVzY3JpcHRpb246ICBJdCB0cmFuc2xhdGVzIExCQSB0byBQQkEgYnkgcmV0dXJuaW5nIGFkZHJlc3Mgc3RvcmVkCisqICAgICAgICAgICAgICAgYXQgdGhlIExCQSBsb2NhdGlvbiBpbiB0aGUgYmxvY2sgdGFibGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgdTY0IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcih1NjQgbG9naWNhbF9hZGRyKQoreworCXUzMiAqcGJ0OworCXU2NCBwaHlzaWNhbF9hZGRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXBoeXNpY2FsX2FkZHIgPSAodTY0KSBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICoKKwkJKHBidFtCTEtfRlJPTV9BRERSKGxvZ2ljYWxfYWRkcildICYgKH5CQURfQkxPQ0spKTsKKworCXJldHVybiBwaHlzaWNhbF9hZGRyOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfR2V0X0Jsb2NrX0luZGV4CisqIElucHV0czogICAgICAgUGh5c2ljYWwgQmxvY2sgbm8uCisqIE91dHB1dHM6ICAgICAgTG9naWNhbCBibG9jayBuby4gL0JBRF9CTE9DSworKiBEZXNjcmlwdGlvbjogIEl0IHJldHVybnMgdGhlIGxvZ2ljYWwgYmxvY2sgbm8uIGZvciB0aGUgUEJBIHBhc3NlZAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfR2V0X0Jsb2NrX0luZGV4KHUzMiB3QmxvY2tOdW0pCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1MzIgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKQorCQlpZiAod0Jsb2NrTnVtID09IChwYnRbaV0gJiAofkJBRF9CTE9DSykpKQorCQkJcmV0dXJuIGk7CisKKwlyZXR1cm4gQkFEX0JMT0NLOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX1dlYXJfTGV2ZWxpbmcKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wCisqIERlc2NyaXB0aW9uOiAgVGhpcyBpcyBzdGF0aWMgd2VhciBsZXZlbGluZyAoZG9uZSBieSBleHBsaWNpdCBjYWxsKQorKiAgICAgICAgICAgICAgIGRvIGNvbXBsZXRlIHN0YXRpYyB3ZWFyIGxldmVsaW5nCisqICAgICAgICAgICAgICAgZG8gY29tcGxldGUgZ2FyYmFnZSBjb2xsZWN0aW9uCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX1dlYXJfTGV2ZWxpbmcodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlGVExfU3RhdGljX1dlYXJfTGV2ZWxpbmcoKTsKKwlHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKworCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgdm9pZCBmaW5kX2xlYXN0X21vc3Rfd29ybih1OCAqY2hnLAorCXUzMiAqbGVhc3RfaWR4LCB1OCAqbGVhc3RfY250LAorCXUzMiAqbW9zdF9pZHgsIHU4ICptb3N0X2NudCkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiBpZHg7CisJdTggY250OworCWludCBpOworCisJZm9yIChpID0gQkxPQ0tfVEFCTEVfSU5ERVggKyAxOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJaWYgKElTX0JBRF9CTE9DSyhpKSB8fCBQQVNTID09IGNoZ1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWlkeCA9ICh1MzIpICgofkJBRF9CTE9DSykgJiBwYnRbaV0pOworCQljbnQgPSBnX3BXZWFyQ291bnRlcltpZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisKKwkJaWYgKElTX1NQQVJFX0JMT0NLKGkpKSB7CisJCQlpZiAoY250ID4gKm1vc3RfY250KSB7CisJCQkJKm1vc3RfY250ID0gY250OworCQkJCSptb3N0X2lkeCA9IGlkeDsKKwkJCX0KKwkJfQorCisJCWlmIChJU19EQVRBX0JMT0NLKGkpKSB7CisJCQlpZiAoY250IDwgKmxlYXN0X2NudCkgeworCQkJCSpsZWFzdF9jbnQgPSBjbnQ7CisJCQkJKmxlYXN0X2lkeCA9IGlkeDsKKwkJCX0KKwkJfQorCisJCWlmIChQQVNTID09IGNoZ1sqbW9zdF9pZHhdIHx8IFBBU1MgPT0gY2hnWypsZWFzdF9pZHhdKSB7CisJCQlkZWJ1Z19ib3VuZGFyeV9lcnJvcigqbW9zdF9pZHgsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtLCAwKTsKKwkJCWRlYnVnX2JvdW5kYXJ5X2Vycm9yKCpsZWFzdF9pZHgsCisJCQkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG1vdmVfYmxrc19mb3Jfd2Vhcl9sZXZlbGluZyh1OCAqY2hnLAorCXUzMiAqbGVhc3RfaWR4LCB1MzIgKnJlcF9ibGtfbnVtLCBpbnQgKnJlc3VsdCkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiByZXBfYmxrOworCWludCBqLCByZXRfY3BfYmxrLCByZXRfZXJhc2U7CisJaW50IHJldCA9IFBBU1M7CisKKwljaGdbKmxlYXN0X2lkeF0gPSBQQVNTOworCWRlYnVnX2JvdW5kYXJ5X2Vycm9yKCpsZWFzdF9pZHgsIERldmljZUluZm8ud0RhdGFCbG9ja051bSwgMCk7CisKKwlyZXBfYmxrID0gRlRMX1JlcGxhY2VfTVdCbG9jaygpOworCWlmIChyZXBfYmxrICE9IEJBRF9CTE9DSykgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJNb3JlIHRoYW4gdHdvIHNwYXJlIGJsb2NrcyBleGlzdCBzbyBkbyBpdFxuIik7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQmxvY2sgUmVwbGFjZWQgaXMgJWRcbiIsCisJCQkJcmVwX2Jsayk7CisKKwkJY2hnW3JlcF9ibGtdID0gUEFTUzsKKworCQlpZiAoSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgIT0gZ19jQmxvY2tUYWJsZVN0YXR1cykgeworCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJRlRMX1dyaXRlX0lOX1Byb2dyZXNzX0Jsb2NrX1RhYmxlX1BhZ2UoKTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBSRVRSWV9USU1FUzsgaisrKSB7CisJCQlyZXRfY3BfYmxrID0gRlRMX0NvcHlfQmxvY2soKHU2NCkoKmxlYXN0X2lkeCkgKgorCQkJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUsCisJCQkJKHU2NClyZXBfYmxrICogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisJCQlpZiAoRkFJTCA9PSByZXRfY3BfYmxrKSB7CisJCQkJcmV0X2VyYXNlID0gR0xPQl9GVExfQmxvY2tfRXJhc2UoKHU2NClyZXBfYmxrCisJCQkJCSogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisJCQkJaWYgKEZBSUwgPT0gcmV0X2VyYXNlKQorCQkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbcmVwX2Jsa10pOworCQkJfSBlbHNlIHsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkJIkZUTF9Db3B5X0Jsb2NrID09IE9LXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChqIDwgUkVUUllfVElNRVMpIHsKKwkJCXUzMiB0bXA7CisJCQl1MzIgb2xkX2lkeCA9IEZUTF9HZXRfQmxvY2tfSW5kZXgoKmxlYXN0X2lkeCk7CisJCQl1MzIgcmVwX2lkeCA9IEZUTF9HZXRfQmxvY2tfSW5kZXgocmVwX2Jsayk7CisJCQl0bXAgPSAodTMyKShESVNDQVJEX0JMT0NLIHwgcGJ0W29sZF9pZHhdKTsKKwkJCXBidFtvbGRfaWR4XSA9ICh1MzIpKCh+U1BBUkVfQkxPQ0spICYKKwkJCQkJCQlwYnRbcmVwX2lkeF0pOworCQkJcGJ0W3JlcF9pZHhdID0gdG1wOworI2lmIENNRF9ETUEKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0gKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKikKKwkJCQkJCWdfcEJURGVsdGFfRnJlZTsKKwkJCWdfcEJURGVsdGFfRnJlZSArPSBzaXplb2Yoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSk7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJCQkJZnRsX2NtZF9jbnQ7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSBvbGRfaWR4OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0VudHJ5X1ZhbHVlID0gcGJ0W29sZF9pZHhdOworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPSAoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKQorCQkJCQkJZ19wQlREZWx0YV9GcmVlOworCQkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJCWZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gcmVwX2lkeDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9FbnRyeV9WYWx1ZSA9IHBidFtyZXBfaWR4XTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXBidFtGVExfR2V0X0Jsb2NrX0luZGV4KHJlcF9ibGspXSB8PSBCQURfQkxPQ0s7CisjaWYgQ01EX0RNQQorCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPSAoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKQorCQkJCQkJZ19wQlREZWx0YV9GcmVlOworCQkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJCWZ0bF9jbWRfY250OworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0KKwkJCQkJRlRMX0dldF9CbG9ja19JbmRleChyZXBfYmxrKTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9FbnRyeV9WYWx1ZSA9CisJCQkJCXBidFtGVExfR2V0X0Jsb2NrX0luZGV4KHJlcF9ibGspXTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKwkJCSpyZXN1bHQgPSBGQUlMOworCQkJcmV0ID0gRkFJTDsKKwkJfQorCisJCWlmICgoKCpyZXBfYmxrX251bSkrKykgPiBXRUFSX0xFVkVMSU5HX0JMT0NLX05VTSkKKwkJCXJldCA9IEZBSUw7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJMZXNzIHRoYW4gMyBzcGFyZSBibG9ja3MgZXhpc3Qgc28gcXVpdFxuIik7CisJCXJldCA9IEZBSUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfU3RhdGljX1dlYXJfTGV2ZWxpbmcKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgVGhpcyBpcyBzdGF0aWMgd2VhciBsZXZlbGluZyAoZG9uZSBieSBleHBsaWNpdCBjYWxsKQorKiAgICAgICAgICAgICAgIHNlYXJjaCBmb3IgbW9zdCZsZWFzdCB1c2VkCisqICAgICAgICAgICAgICAgaWYgZGlmZmVyZW5jZSA8IEdBVEU6CisqICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0aGUgYmxvY2sgdGFibGUgd2l0aCBleGhhbmdlCisqICAgICAgICAgICAgICAgICAgIG1hcmsgYmxvY2sgdGFibGUgaW4gZmxhc2ggYXMgSU5fUFJPR1JFU1MKKyogICAgICAgICAgICAgICAgICAgY29weSBmbGFzaCBibG9jaworKiAgICAgICAgICAgICAgIHRoZSBjYWxsZXIgc2hvdWxkIGhhbmRsZSBHQyBjbGVhbiB1cCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgRlRMX1N0YXRpY19XZWFyX0xldmVsaW5nKHZvaWQpCit7CisJdTggbW9zdF93b3JuX2NudDsKKwl1OCBsZWFzdF93b3JuX2NudDsKKwl1MzIgbW9zdF93b3JuX2lkeDsKKwl1MzIgbGVhc3Rfd29ybl9pZHg7CisJaW50IHJlc3VsdCA9IFBBU1M7CisJaW50IGdvX29uID0gUEFTUzsKKwl1MzIgcmVwbGFjZWRfYmxrcyA9IDA7CisJdTggKmNoYW5nX2ZsYWcgPSBmbGFnc19zdGF0aWNfd2Vhcl9sZXZlbGluZzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoIWNoYW5nX2ZsYWcpCisJCXJldHVybiBGQUlMOworCisJbWVtc2V0KGNoYW5nX2ZsYWcsIEZBSUwsIERldmljZUluZm8ud0RhdGFCbG9ja051bSk7CisJd2hpbGUgKGdvX29uID09IFBBU1MpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkic3RhcnRpbmcgc3RhdGljIHdlYXIgbGV2ZWxpbmdcbiIpOworCQltb3N0X3dvcm5fY250ID0gMDsKKwkJbGVhc3Rfd29ybl9jbnQgPSAweEZGOworCQlsZWFzdF93b3JuX2lkeCA9IEJMT0NLX1RBQkxFX0lOREVYOworCQltb3N0X3dvcm5faWR4ID0gQkxPQ0tfVEFCTEVfSU5ERVg7CisKKwkJZmluZF9sZWFzdF9tb3N0X3dvcm4oY2hhbmdfZmxhZywgJmxlYXN0X3dvcm5faWR4LAorCQkJJmxlYXN0X3dvcm5fY250LCAmbW9zdF93b3JuX2lkeCwgJm1vc3Rfd29ybl9jbnQpOworCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlVzZWQgYW5kIGxlYXN0IHdvcm4gaXMgYmxvY2sgJXUsIHdob3MgY291bnQgaXMgJXVcbiIsCisJCQkodW5zaWduZWQgaW50KWxlYXN0X3dvcm5faWR4LAorCQkJKHVuc2lnbmVkIGludClsZWFzdF93b3JuX2NudCk7CisKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiRnJlZSBhbmQgIG1vc3Qgd29ybiBpcyBibG9jayAldSwgd2hvcyBjb3VudCBpcyAldVxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpbW9zdF93b3JuX2lkeCwKKwkJCSh1bnNpZ25lZCBpbnQpbW9zdF93b3JuX2NudCk7CisKKwkJaWYgKChtb3N0X3dvcm5fY250ID4gbGVhc3Rfd29ybl9jbnQpICYmCisJCQkobW9zdF93b3JuX2NudCAtIGxlYXN0X3dvcm5fY250ID4gV0VBUl9MRVZFTElOR19HQVRFKSkKKwkJCWdvX29uID0gbW92ZV9ibGtzX2Zvcl93ZWFyX2xldmVsaW5nKGNoYW5nX2ZsYWcsCisJCQkJJmxlYXN0X3dvcm5faWR4LCAmcmVwbGFjZWRfYmxrcywgJnJlc3VsdCk7CisJCWVsc2UKKwkJCWdvX29uID0gRkFJTDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWYgQ01EX0RNQQorc3RhdGljIGludCBkb19nYXJiYWdlX2NvbGxlY3Rpb24odTMyIGRpc2NhcmRfY250KQoreworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIHBiYTsKKwl1OCBidF9ibG9ja19lcmFzZWQgPSAwOworCWludCBpLCBjbnQsIHJldCA9IEZBSUw7CisJdTY0IGFkZHI7CisKKwlpID0gMDsKKwl3aGlsZSAoKGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0pICYmIChkaXNjYXJkX2NudCA+IDApICYmCisJCQkoKGZ0bF9jbWRfY250ICsgMjgpIDwgMjU2KSkgeworCQlpZiAoKChwYnRbaV0gJiBCQURfQkxPQ0spICE9IEJBRF9CTE9DSykgJiYKKwkJCQkocGJ0W2ldICYgRElTQ0FSRF9CTE9DSykpIHsKKwkJCWlmIChJTl9QUk9HUkVTU19CTE9DS19UQUJMRSAhPSBnX2NCbG9ja1RhYmxlU3RhdHVzKSB7CisJCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJCQl9CisKKwkJCWFkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoKHU2NClpICoKKwkJCQkJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCQkJcGJhID0gQkxLX0ZST01fQUREUihhZGRyKTsKKworCQkJZm9yIChjbnQgPSBGSVJTVF9CVF9JRDsgY250IDw9IExBU1RfQlRfSUQ7IGNudCsrKSB7CisJCQkJaWYgKHBiYSA9PSBnX3BCVEJsb2Nrc1tjbnQgLSBGSVJTVF9CVF9JRF0pIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCQkiR0Mgd2lsbCBlcmFzZSBCVCBibG9jayAldVxuIiwKKwkJCQkJCSh1bnNpZ25lZCBpbnQpcGJhKTsKKwkJCQkJZGlzY2FyZF9jbnQtLTsKKwkJCQkJaSsrOworCQkJCQlidF9ibG9ja19lcmFzZWQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChidF9ibG9ja19lcmFzZWQpIHsKKwkJCQlidF9ibG9ja19lcmFzZWQgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlhZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKCh1NjQpaSAqCisJCQkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKworCQkJaWYgKFBBU1MgPT0gR0xPQl9GVExfQmxvY2tfRXJhc2UoYWRkcikpIHsKKwkJCQlwYnRbaV0gJj0gKHUzMikofkRJU0NBUkRfQkxPQ0spOworCQkJCXBidFtpXSB8PSAodTMyKShTUEFSRV9CTE9DSyk7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKQorCQkJCQlnX3BCVERlbHRhX0ZyZWU7CisJCQkJZ19wQlREZWx0YV9GcmVlICs9CisJCQkJCXNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJCQlmdGxfY21kX2NudCAtIDE7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gaTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbaV07CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKwkJCQlkaXNjYXJkX2NudC0tOworCQkJCXJldCA9IFBBU1M7CisJCQl9IGVsc2UgeworCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtpXSk7CisJCQl9CisJCX0KKworCQlpKys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbnQgZG9fZ2FyYmFnZV9jb2xsZWN0aW9uKHUzMiBkaXNjYXJkX2NudCkKK3sKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiBwYmE7CisJdTggYnRfYmxvY2tfZXJhc2VkID0gMDsKKwlpbnQgaSwgY250LCByZXQgPSBGQUlMOworCXU2NCBhZGRyOworCisJaSA9IDA7CisJd2hpbGUgKChpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtKSAmJiAoZGlzY2FyZF9jbnQgPiAwKSkgeworCQlpZiAoKChwYnRbaV0gJiBCQURfQkxPQ0spICE9IEJBRF9CTE9DSykgJiYKKwkJCQkocGJ0W2ldICYgRElTQ0FSRF9CTE9DSykpIHsKKwkJCWlmIChJTl9QUk9HUkVTU19CTE9DS19UQUJMRSAhPSBnX2NCbG9ja1RhYmxlU3RhdHVzKSB7CisJCQkJZ19jQmxvY2tUYWJsZVN0YXR1cyA9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFOworCQkJCUZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKCk7CisJCQl9CisKKwkJCWFkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoKHU2NClpICoKKwkJCQkJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCQkJcGJhID0gQkxLX0ZST01fQUREUihhZGRyKTsKKworCQkJZm9yIChjbnQgPSBGSVJTVF9CVF9JRDsgY250IDw9IExBU1RfQlRfSUQ7IGNudCsrKSB7CisJCQkJaWYgKHBiYSA9PSBnX3BCVEJsb2Nrc1tjbnQgLSBGSVJTVF9CVF9JRF0pIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCQkiR0Mgd2lsbCBlcmFzZSBCVCBibG9jayAlZFxuIiwKKwkJCQkJCXBiYSk7CisJCQkJCWRpc2NhcmRfY250LS07CisJCQkJCWkrKzsKKwkJCQkJYnRfYmxvY2tfZXJhc2VkID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoYnRfYmxvY2tfZXJhc2VkKSB7CisJCQkJYnRfYmxvY2tfZXJhc2VkID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogSWYgdGhlIGRpc2NhcmQgYmxvY2sgaXMgTDIgY2FjaGUgYmxvY2ssIHRoZW4ganVzdCBza2lwIGl0ICovCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IEJMS19OVU1fRk9SX0wyX0NBQ0hFOyBjbnQrKykgeworCQkJCWlmIChjYWNoZV9sMi5ibGtfYXJyYXlbY250XSA9PSBwYmEpIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCQkiR0Mgd2lsbCBlcmFzZSBMMiBjYWNoZSBibGsgJWRcbiIsCisJCQkJCQlwYmEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoY250IDwgQkxLX05VTV9GT1JfTDJfQ0FDSEUpIHsgLyogU2tpcCBpdCAqLworCQkJCWRpc2NhcmRfY250LS07CisJCQkJaSsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlhZGRyID0gRlRMX0dldF9QaHlzaWNhbF9CbG9ja19BZGRyKCh1NjQpaSAqCisJCQkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKworCQkJaWYgKFBBU1MgPT0gR0xPQl9GVExfQmxvY2tfRXJhc2UoYWRkcikpIHsKKwkJCQlwYnRbaV0gJj0gKHUzMikofkRJU0NBUkRfQkxPQ0spOworCQkJCXBidFtpXSB8PSAodTMyKShTUEFSRV9CTE9DSyk7CisJCQkJZGlzY2FyZF9jbnQtLTsKKwkJCQlyZXQgPSBQQVNTOworCQkJfSBlbHNlIHsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbaV0pOworCQkJfQorCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24KKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUyAvIEZBSUwgKHJldHVybnMgdGhlIG51bWJlciBvZiB1bi1lcmFzZWQgYmxvY2tzCisqIERlc2NyaXB0aW9uOiAgc2VhcmNoIHRoZSBibG9jayB0YWJsZSBmb3IgYWxsIGRpc2NhcmRlZCBibG9ja3MgdG8gZXJhc2UKKyogICAgICAgICAgICAgICBmb3IgZWFjaCBkaXNjYXJkZWQgYmxvY2s6CisqICAgICAgICAgICAgICAgICAgIHNldCB0aGUgZmxhc2ggYmxvY2sgdG8gSU5fUFJPR1JFU1MKKyogICAgICAgICAgICAgICAgICAgZXJhc2UgdGhlIGJsb2NrCisqICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0aGUgYmxvY2sgdGFibGUKKyogICAgICAgICAgICAgICAgICAgd3JpdGUgdGhlIGJsb2NrIHRhYmxlIHRvIGZsYXNoCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbih2b2lkKQoreworCXUzMiBpOworCXUzMiB3RGlzY2FyZCA9IDA7CisJaW50IHdSZXN1bHQgPSBGQUlMOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChHQ19DYWxsZWQpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbigpICIKKwkJCSJoYXMgYmVlbiByZS1lbnRlcmVkISBFeGl0LlxuIik7CisJCXJldHVybiBQQVNTOworCX0KKworCUdDX0NhbGxlZCA9IDE7CisKKwlHTE9CX0ZUTF9CVF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKworCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQlpZiAoSVNfRElTQ0FSREVEX0JMT0NLKGkpKQorCQkJd0Rpc2NhcmQrKzsKKwl9CisKKwlpZiAod0Rpc2NhcmQgPD0gMCkgeworCQlHQ19DYWxsZWQgPSAwOworCQlyZXR1cm4gd1Jlc3VsdDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIkZvdW5kICVkIGRpc2NhcmRlZCBibG9ja3NcbiIsIHdEaXNjYXJkKTsKKworCUZUTF9Xcml0ZV9CbG9ja19UYWJsZShGQUlMKTsKKworCXdSZXN1bHQgPSBkb19nYXJiYWdlX2NvbGxlY3Rpb24od0Rpc2NhcmQpOworCisJRlRMX1dyaXRlX0Jsb2NrX1RhYmxlKEZBSUwpOworCisJR0NfQ2FsbGVkID0gMDsKKworCXJldHVybiB3UmVzdWx0OworfQorCisKKyNpZiBDTURfRE1BCitzdGF0aWMgaW50IGRvX2J0X2dhcmJhZ2VfY29sbGVjdGlvbih2b2lkKQoreworCXUzMiBwYmEsIGxiYTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCXUzMiAqcEJUQmxvY2tzTm9kZSA9ICh1MzIgKilnX3BCVEJsb2NrczsKKwl1NjQgYWRkcjsKKwlpbnQgaSwgcmV0ID0gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCVF9HQ19DYWxsZWQpCisJCXJldHVybiBQQVNTOworCisJQlRfR0NfQ2FsbGVkID0gMTsKKworCWZvciAoaSA9IGxhc3RfZXJhc2VkOyAoaSA8PSBMQVNUX0JUX0lEKSAmJgorCQkoZ19wQlRCbG9ja3NbKChpICsgMikgJSAoMSArIExBU1RfQlRfSUQgLSBGSVJTVF9CVF9JRCkpICsKKwkJRklSU1RfQlRfSUQgLSBGSVJTVF9CVF9JRF0gIT0gQlRCTE9DS19JTlZBTCkgJiYKKwkJKChmdGxfY21kX2NudCArIDI4KSkgPCAyNTY7IGkrKykgeworCQlwYmEgPSBwQlRCbG9ja3NOb2RlW2kgLSBGSVJTVF9CVF9JRF07CisJCWxiYSA9IEZUTF9HZXRfQmxvY2tfSW5kZXgocGJhKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiZG9fYnRfZ2FyYmFnZV9jb2xsZWN0aW9uOiBwYmEgJWQsIGxiYSAlZFxuIiwKKwkJCXBiYSwgbGJhKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiQmxvY2sgVGFibGUgRW50cnk6ICVkIiwgcGJ0W2xiYV0pOworCisJCWlmICgoKHBidFtsYmFdICYgQkFEX0JMT0NLKSAhPSBCQURfQkxPQ0spICYmCisJCQkocGJ0W2xiYV0gJiBESVNDQVJEX0JMT0NLKSkgeworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJImRvX2J0X2dhcmJhZ2VfY29sbGVjdGlvbl9jZG1hOiAiCisJCQkJIkVyYXNpbmcgQmxvY2sgdGFibGVzIHByZXNlbnQgaW4gYmxvY2sgJWRcbiIsCisJCQkJcGJhKTsKKwkJCWFkZHIgPSBGVExfR2V0X1BoeXNpY2FsX0Jsb2NrX0FkZHIoKHU2NClsYmEgKgorCQkJCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisJCQlpZiAoUEFTUyA9PSBHTE9CX0ZUTF9CbG9ja19FcmFzZShhZGRyKSkgeworCQkJCXBidFtsYmFdICY9ICh1MzIpKH5ESVNDQVJEX0JMT0NLKTsKKwkJCQlwYnRbbGJhXSB8PSAodTMyKShTUEFSRV9CTE9DSyk7CisKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopCisJCQkJCWdfcEJURGVsdGFfRnJlZTsKKwkJCQlnX3BCVERlbHRhX0ZyZWUgKz0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJZnRsX2NtZF9jbnQgLSAxOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IGxiYTsKKwkJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQkJCQkJCQlwYnRbbGJhXTsKKworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisKKwkJCQlyZXQgPSBQQVNTOworCQkJCXBCVEJsb2Nrc05vZGVbbGFzdF9lcmFzZWQgLSBGSVJTVF9CVF9JRF0gPQorCQkJCQkJCUJUQkxPQ0tfSU5WQUw7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCSJyZXNldHRpbmcgYnQgZW50cnkgYXQgaW5kZXggJWQgIgorCQkJCQkidmFsdWUgJWRcbiIsIGksCisJCQkJCXBCVEJsb2Nrc05vZGVbaSAtIEZJUlNUX0JUX0lEXSk7CisJCQkJaWYgKGxhc3RfZXJhc2VkID09IExBU1RfQlRfSUQpCisJCQkJCWxhc3RfZXJhc2VkID0gRklSU1RfQlRfSUQ7CisJCQkJZWxzZQorCQkJCQlsYXN0X2VyYXNlZCsrOworCQkJfSBlbHNlIHsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbbGJhXSk7CisJCQl9CisJCX0KKwl9CisKKwlCVF9HQ19DYWxsZWQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworI2Vsc2UKK3N0YXRpYyBpbnQgZG9fYnRfZ2FyYmFnZV9jb2xsZWN0aW9uKHZvaWQpCit7CisJdTMyIHBiYSwgbGJhOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyICpwQlRCbG9ja3NOb2RlID0gKHUzMiAqKWdfcEJUQmxvY2tzOworCXU2NCBhZGRyOworCWludCBpLCByZXQgPSBGQUlMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJUX0dDX0NhbGxlZCkKKwkJcmV0dXJuIFBBU1M7CisKKwlCVF9HQ19DYWxsZWQgPSAxOworCisJZm9yIChpID0gbGFzdF9lcmFzZWQ7IChpIDw9IExBU1RfQlRfSUQpICYmCisJCShnX3BCVEJsb2Nrc1soKGkgKyAyKSAlICgxICsgTEFTVF9CVF9JRCAtIEZJUlNUX0JUX0lEKSkgKworCQlGSVJTVF9CVF9JRCAtIEZJUlNUX0JUX0lEXSAhPSBCVEJMT0NLX0lOVkFMKTsgaSsrKSB7CisJCXBiYSA9IHBCVEJsb2Nrc05vZGVbaSAtIEZJUlNUX0JUX0lEXTsKKwkJbGJhID0gRlRMX0dldF9CbG9ja19JbmRleChwYmEpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJkb19idF9nYXJiYWdlX2NvbGxlY3Rpb25fY2RtYTogcGJhICVkLCBsYmEgJWRcbiIsCisJCQlwYmEsIGxiYSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIkJsb2NrIFRhYmxlIEVudHJ5OiAlZCIsIHBidFtsYmFdKTsKKworCQlpZiAoKChwYnRbbGJhXSAmIEJBRF9CTE9DSykgIT0gQkFEX0JMT0NLKSAmJgorCQkJKHBidFtsYmFdICYgRElTQ0FSRF9CTE9DSykpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJkb19idF9nYXJiYWdlX2NvbGxlY3Rpb246ICIKKwkJCQkiRXJhc2luZyBCbG9jayB0YWJsZXMgcHJlc2VudCBpbiBibG9jayAlZFxuIiwKKwkJCQlwYmEpOworCQkJYWRkciA9IEZUTF9HZXRfUGh5c2ljYWxfQmxvY2tfQWRkcigodTY0KWxiYSAqCisJCQkJCQlEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplKTsKKwkJCWlmIChQQVNTID09IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKGFkZHIpKSB7CisJCQkJcGJ0W2xiYV0gJj0gKHUzMikofkRJU0NBUkRfQkxPQ0spOworCQkJCXBidFtsYmFdIHw9ICh1MzIpKFNQQVJFX0JMT0NLKTsKKwkJCQlyZXQgPSBQQVNTOworCQkJCXBCVEJsb2Nrc05vZGVbbGFzdF9lcmFzZWQgLSBGSVJTVF9CVF9JRF0gPQorCQkJCQkJCUJUQkxPQ0tfSU5WQUw7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJCSJyZXNldHRpbmcgYnQgZW50cnkgYXQgaW5kZXggJWQgIgorCQkJCQkidmFsdWUgJWRcbiIsIGksCisJCQkJCXBCVEJsb2Nrc05vZGVbaSAtIEZJUlNUX0JUX0lEXSk7CisJCQkJaWYgKGxhc3RfZXJhc2VkID09IExBU1RfQlRfSUQpCisJCQkJCWxhc3RfZXJhc2VkID0gRklSU1RfQlRfSUQ7CisJCQkJZWxzZQorCQkJCQlsYXN0X2VyYXNlZCsrOworCQkJfSBlbHNlIHsKKwkJCQlNQVJLX0JMT0NLX0FTX0JBRChwYnRbbGJhXSk7CisJCQl9CisJCX0KKwl9CisKKwlCVF9HQ19DYWxsZWQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworI2VuZGlmCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0JUX0dhcmJhZ2VfQ29sbGVjdGlvbgorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTIC8gRkFJTCAocmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuLWVyYXNlZCBibG9ja3MKKyogRGVzY3JpcHRpb246ICBFcmFzZXMgZGlzY2FyZGVkIGJsb2NrcyBjb250YWluaW5nIEJsb2NrIHRhYmxlCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfQlRfR2FyYmFnZV9Db2xsZWN0aW9uKHZvaWQpCit7CisJcmV0dXJuIGRvX2J0X2dhcmJhZ2VfY29sbGVjdGlvbigpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9SZXBsYWNlX09uZUJsb2NrCisqIElucHV0czogICAgICAgQmxvY2sgbnVtYmVyIDEKKyogICAgICAgICAgICAgICBCbG9jayBudW1iZXIgMgorKiBPdXRwdXRzOiAgICAgIFJlcGxhY2VkIEJsb2NrIE51bWJlcgorKiBEZXNjcmlwdGlvbjogIEludGVyY2hhbmdlIGJsb2NrIHRhYmxlIGVudHJpZXMgYXQgd0Jsb2NrTnVtIGFuZCB3UmVwbGFjZU51bQorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9PbmVCbG9jayh1MzIgYmxrLCB1MzIgcmVwX2JsaykKK3sKKwl1MzIgdG1wX2JsazsKKwl1MzIgcmVwbGFjZV9ub2RlID0gQkFEX0JMT0NLOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKHJlcF9ibGsgIT0gQkFEX0JMT0NLKSB7CisJCWlmIChJU19CQURfQkxPQ0soYmxrKSkKKwkJCXRtcF9ibGsgPSBwYnRbYmxrXTsKKwkJZWxzZQorCQkJdG1wX2JsayA9IERJU0NBUkRfQkxPQ0sgfCAoflNQQVJFX0JMT0NLICYgcGJ0W2Jsa10pOworCisJCXJlcGxhY2Vfbm9kZSA9ICh1MzIpICgoflNQQVJFX0JMT0NLKSAmIHBidFtyZXBfYmxrXSk7CisJCXBidFtibGtdID0gcmVwbGFjZV9ub2RlOworCQlwYnRbcmVwX2Jsa10gPSB0bXBfYmxrOworCisjaWYgQ01EX0RNQQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPSBmdGxfY21kX2NudDsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPkJUX0luZGV4ID0gYmxrOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbYmxrXTsKKworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDOworCisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9IGZ0bF9jbWRfY250OworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSByZXBfYmxrOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbcmVwX2Jsa107CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gcmVwbGFjZV9ub2RlOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9Xcml0ZV9CbG9ja19UYWJsZV9EYXRhCisqIElucHV0czogICAgICAgQmxvY2sgdGFibGUgc2l6ZSBpbiBwYWdlcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIFdyaXRlIGJsb2NrIHRhYmxlIGRhdGEgaW4gZmxhc2gKKyogICAgICAgICAgICAgICBJZiBmaXJzdCBwYWdlIGFuZCBsYXN0IHBhZ2UKKyogICAgICAgICAgICAgICAgICBXcml0ZSBkYXRhK0JUIGZsYWcKKyogICAgICAgICAgICAgICBlbHNlCisqICAgICAgICAgICAgICAgICAgV3JpdGUgZGF0YQorKiAgICAgICAgICAgICAgIEJUIGZsYWcgaXMgYSBjb3VudGVyLiBJdHMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgZm9yIGJsb2NrIHRhYmxlCisqICAgICAgICAgICAgICAgd3JpdGUgaW4gYSBuZXcgQmxvY2sKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3N0YXRpYyBpbnQgRlRMX1dyaXRlX0Jsb2NrX1RhYmxlX0RhdGEodm9pZCkKK3sKKwl1NjQgZHdCbG9ja1RhYmxlQWRkciwgcFRlbXBBZGRyOworCXUzMiBCbG9jazsKKwl1MTYgUGFnZSwgUGFnZUNvdW50OworCXU4ICp0ZW1wQnVmID0gdG1wX2J1Zl93cml0ZV9ibGtfdGFibGVfZGF0YTsKKwlpbnQgd0J5dGVzQ29waWVkOworCXUxNiBidF9wYWdlczsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWR3QmxvY2tUYWJsZUFkZHIgPQorCQkodTY0KSgodTY0KWdfd0Jsb2NrVGFibGVJbmRleCAqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KWdfd0Jsb2NrVGFibGVPZmZzZXQgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCXBUZW1wQWRkciA9IGR3QmxvY2tUYWJsZUFkZHI7CisKKwlidF9wYWdlcyA9IEZUTF9HZXRfQmxvY2tfVGFibGVfRmxhc2hfU2l6ZV9QYWdlcygpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJGVExfV3JpdGVfQmxvY2tfVGFibGVfRGF0YTogIgorCQkJICAgICAgICJwYWdlPSAlZCBCbG9ja1RhYmxlSW5kZXg9ICVkICIKKwkJCSAgICAgICAiQmxvY2tUYWJsZU9mZnNldD0lZFxuIiwgYnRfcGFnZXMsCisJCQkgICAgICAgZ193QmxvY2tUYWJsZUluZGV4LCBnX3dCbG9ja1RhYmxlT2Zmc2V0KTsKKworCUJsb2NrID0gQkxLX0ZST01fQUREUihwVGVtcEFkZHIpOworCVBhZ2UgPSBQQUdFX0ZST01fQUREUihwVGVtcEFkZHIsIEJsb2NrKTsKKwlQYWdlQ291bnQgPSAxOworCisJaWYgKGJ0X2Jsb2NrX2NoYW5nZWQpIHsKKwkJaWYgKGJ0X2ZsYWcgPT0gTEFTVF9CVF9JRCkgeworCQkJYnRfZmxhZyA9IEZJUlNUX0JUX0lEOworCQkJZ19wQlRCbG9ja3NbYnRfZmxhZyAtIEZJUlNUX0JUX0lEXSA9IEJsb2NrOworCQl9IGVsc2UgaWYgKGJ0X2ZsYWcgPCBMQVNUX0JUX0lEKSB7CisJCQlidF9mbGFnKys7CisJCQlnX3BCVEJsb2Nrc1tidF9mbGFnIC0gRklSU1RfQlRfSURdID0gQmxvY2s7CisJCX0KKworCQlpZiAoKGJ0X2ZsYWcgPiAoTEFTVF9CVF9JRC00KSkgJiYKKwkJCWdfcEJUQmxvY2tzW0ZJUlNUX0JUX0lEIC0gRklSU1RfQlRfSURdICE9CisJCQkJCQlCVEJMT0NLX0lOVkFMKSB7CisJCQlidF9ibG9ja19jaGFuZ2VkID0gMDsKKwkJCUdMT0JfRlRMX0JUX0dhcmJhZ2VfQ29sbGVjdGlvbigpOworCQl9CisKKwkJYnRfYmxvY2tfY2hhbmdlZCA9IDA7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIkJsb2NrIFRhYmxlIENvdW50ZXIgaXMgJXUgQmxvY2sgJXVcbiIsCisJCQlidF9mbGFnLCAodW5zaWduZWQgaW50KUJsb2NrKTsKKwl9CisKKwltZW1zZXQodGVtcEJ1ZiwgMCwgMyk7CisJdGVtcEJ1ZlszXSA9IGJ0X2ZsYWc7CisJd0J5dGVzQ29waWVkID0gRlRMX0NvcHlfQmxvY2tfVGFibGVfVG9fRmxhc2godGVtcEJ1ZiArIDQsCisJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLSA0LCAwKTsKKwltZW1zZXQoJnRlbXBCdWZbd0J5dGVzQ29waWVkICsgNF0sIDB4ZmYsCisJCURldmljZUluZm8ud1BhZ2VTaXplIC0gKHdCeXRlc0NvcGllZCArIDQpKTsKKwlGVExfSW5zZXJ0X0Jsb2NrX1RhYmxlX1NpZ25hdHVyZSgmdGVtcEJ1ZltEZXZpY2VJbmZvLndQYWdlRGF0YVNpemVdLAorCQkJCQlidF9mbGFnKTsKKworI2lmIENNRF9ETUEKKwltZW1jcHkoZ19wTmV4dEJsb2NrVGFibGUsIHRlbXBCdWYsCisJCURldmljZUluZm8ud1BhZ2VTaXplICogc2l6ZW9mKHU4KSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJXcml0aW5nIEZpcnN0IFBhZ2Ugb2YgQmxvY2sgVGFibGUgIgorCQkiQmxvY2sgJXUgUGFnZSAldVxuIiwgKHVuc2lnbmVkIGludClCbG9jaywgUGFnZSk7CisJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlX2NkbWEoZ19wTmV4dEJsb2NrVGFibGUsCisJCUJsb2NrLCBQYWdlLCAxLAorCQlMTERfQ01EX0ZMQUdfTU9ERV9DRE1BIHwgTExEX0NNRF9GTEFHX09SREVSX0JFRk9SRV9SRVNUKSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiTkFORCBQcm9ncmFtIGZhaWwgaW4gIgorCQkJIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXMsICIKKwkJCSJuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbG9jayk7CisJCWdvdG8gZnVuY19yZXR1cm47CisJfQorCisJZnRsX2NtZF9jbnQrKzsKKwlnX3BOZXh0QmxvY2tUYWJsZSArPSAoKERldmljZUluZm8ud1BhZ2VTaXplICogc2l6ZW9mKHU4KSkpOworI2Vsc2UKKwlpZiAoRkFJTCA9PSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodGVtcEJ1ZiwgQmxvY2ssIFBhZ2UsIDEpKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlcywgIgorCQkJIm5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKwkJZ290byBmdW5jX3JldHVybjsKKwl9CisjZW5kaWYKKworCWlmIChidF9wYWdlcyA+IDEpIHsKKwkJUGFnZUNvdW50ID0gYnRfcGFnZXMgLSAxOworCQlpZiAoUGFnZUNvdW50ID4gMSkgeworCQkJd0J5dGVzQ29waWVkICs9IEZUTF9Db3B5X0Jsb2NrX1RhYmxlX1RvX0ZsYXNoKHRlbXBCdWYsCisJCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplICogKFBhZ2VDb3VudCAtIDEpLAorCQkJCXdCeXRlc0NvcGllZCk7CisKKyNpZiBDTURfRE1BCisJCQltZW1jcHkoZ19wTmV4dEJsb2NrVGFibGUsIHRlbXBCdWYsCisJCQkJKFBhZ2VDb3VudCAtIDEpICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwkJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9jZG1hKAorCQkJCWdfcE5leHRCbG9ja1RhYmxlLCBCbG9jaywgUGFnZSArIDEsCisJCQkJUGFnZUNvdW50IC0gMSkpIHsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCQkiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCQkJIkZ1bmN0aW9uOiAlcywgIgorCQkJCQkibmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLAorCQkJCQkoaW50KUJsb2NrKTsKKwkJCQlnb3RvIGZ1bmNfcmV0dXJuOworCQkJfQorCisJCQlmdGxfY21kX2NudCsrOworCQkJZ19wTmV4dEJsb2NrVGFibGUgKz0gKFBhZ2VDb3VudCAtIDEpICoKKwkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKiBzaXplb2YodTgpOworI2Vsc2UKKwkJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbih0ZW1wQnVmLAorCQkJCQlCbG9jaywgUGFnZSArIDEsIFBhZ2VDb3VudCAtIDEpKSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkJCSJGdW5jdGlvbjogJXMsICIKKwkJCQkJIm5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCQkJKGludClCbG9jayk7CisJCQkJZ290byBmdW5jX3JldHVybjsKKwkJCX0KKyNlbmRpZgorCQl9CisKKwkJd0J5dGVzQ29waWVkID0gRlRMX0NvcHlfQmxvY2tfVGFibGVfVG9fRmxhc2godGVtcEJ1ZiwKKwkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsIHdCeXRlc0NvcGllZCk7CisJCW1lbXNldCgmdGVtcEJ1Zlt3Qnl0ZXNDb3BpZWRdLCAweGZmLAorCQkJRGV2aWNlSW5mby53UGFnZVNpemUtd0J5dGVzQ29waWVkKTsKKwkJRlRMX0luc2VydF9CbG9ja19UYWJsZV9TaWduYXR1cmUoCisJCQkmdGVtcEJ1ZltEZXZpY2VJbmZvLndQYWdlRGF0YVNpemVdLCBidF9mbGFnKTsKKyNpZiBDTURfRE1BCisJCW1lbWNweShnX3BOZXh0QmxvY2tUYWJsZSwgdGVtcEJ1ZiwKKwkJCQlEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIHNpemVvZih1OCkpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJXcml0aW5nIHRoZSBsYXN0IFBhZ2Ugb2YgQmxvY2sgVGFibGUgIgorCQkJIkJsb2NrICV1IFBhZ2UgJXVcbiIsCisJCQkodW5zaWduZWQgaW50KUJsb2NrLCBQYWdlICsgYnRfcGFnZXMgLSAxKTsKKwkJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlX2NkbWEoCisJCQlnX3BOZXh0QmxvY2tUYWJsZSwgQmxvY2ssIFBhZ2UgKyBidF9wYWdlcyAtIDEsIDEsCisJCQlMTERfQ01EX0ZMQUdfTU9ERV9DRE1BIHwKKwkJCUxMRF9DTURfRkxBR19PUkRFUl9CRUZPUkVfUkVTVCkpIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICVzLCBMaW5lICVkLCAiCisJCQkJIkZ1bmN0aW9uOiAlcywgbmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKwkJCWdvdG8gZnVuY19yZXR1cm47CisJCX0KKwkJZnRsX2NtZF9jbnQrKzsKKyNlbHNlCisJCWlmIChGQUlMID09IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh0ZW1wQnVmLAorCQkJCQlCbG9jaywgUGFnZStidF9wYWdlcyAtIDEsIDEpKSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJCSJGdW5jdGlvbjogJXMsICIKKwkJCQkibmV3IEJhZCBCbG9jayAlZCBnZW5lcmF0ZWQhXG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sIEJsb2NrKTsKKwkJCWdvdG8gZnVuY19yZXR1cm47CisJCX0KKyNlbmRpZgorCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRlRMX1dyaXRlX0Jsb2NrX1RhYmxlX0RhdGE6IGRvbmVcbiIpOworCitmdW5jX3JldHVybjoKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfUmVwbGFjZV9CbG9ja19UYWJsZQorKiBJbnB1dHM6ICAgICAgIE5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBHZXQgYSBuZXcgYmxvY2sgdG8gd3JpdGUgYmxvY2sgdGFibGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgdTMyIEZUTF9SZXBsYWNlX0Jsb2NrX1RhYmxlKHZvaWQpCit7CisJdTMyIGJsazsKKwlpbnQgZ2M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJYmxrID0gRlRMX1JlcGxhY2VfTFdCbG9jayhCTE9DS19UQUJMRV9JTkRFWCwgJmdjKTsKKworCWlmICgoQkFEX0JMT0NLID09IGJsaykgJiYgKFBBU1MgPT0gZ2MpKSB7CisJCUdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbigpOworCQlibGsgPSBGVExfUmVwbGFjZV9MV0Jsb2NrKEJMT0NLX1RBQkxFX0lOREVYLCAmZ2MpOworCX0KKwlpZiAoQkFEX0JMT0NLID09IGJsaykKKwkJcHJpbnRrKEtFUk5fRVJSICIlcywgJXM6IFRoZXJlIGlzIG5vIHNwYXJlIGJsb2NrLiAiCisJCQkiSXQgc2hvdWxkIG5ldmVyIGhhcHBlblxuIiwKKwkJCV9fRklMRV9fLCBfX2Z1bmNfXyk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk5ldyBCbG9jayB0YWJsZSBCbG9jayBpcyAlZFxuIiwgYmxrKTsKKworCXJldHVybiBibGs7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgRlRMX1JlcGxhY2VfTFdCbG9jaworKiBJbnB1dHM6ICAgICAgIEJsb2NrIG51bWJlcgorKiAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gR2FyYmFnZSBDb2xsZWN0IGZsYWcKKyogT3V0cHV0czoKKyogRGVzY3JpcHRpb246ICBEZXRlcm1pbmUgdGhlIGxlYXN0IHdlYXJlZCBibG9jayBieSB0cmF2ZXJzaW5nCisqICAgICAgICAgICAgICAgYmxvY2sgdGFibGUKKyogICAgICAgICAgICAgICBTZXQgR2FyYmFnZSBjb2xsZWN0aW9uIHRvIGJlIGNhbGxlZCBpZiBudW1iZXIgb2Ygc3BhcmUKKyogICAgICAgICAgICAgICBibG9jayBpcyBsZXNzIHRoYW4gRnJlZSBCbG9jayBHYXRlIGNvdW50CisqICAgICAgICAgICAgICAgQ2hhbmdlIEJsb2NrIHRhYmxlIGVudHJ5IHRvIG1hcCBsZWFzdCB3b3JuIGJsb2NrIGZvciBjdXJyZW50CisqICAgICAgICAgICAgICAgb3BlcmF0aW9uCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9MV0Jsb2NrKHUzMiB3QmxvY2tOdW0sIGludCAqcEdhcmJhZ2VDb2xsZWN0KQoreworCXUzMiBpOworCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTggd0xlYXN0V29ybkNvdW50ZXIgPSAweEZGOworCXUzMiB3TGVhc3RXb3JuSW5kZXggPSBCQURfQkxPQ0s7CisJdTMyIHdTcGFyZUJsb2NrTnVtID0gMDsKKwl1MzIgd0Rpc2NhcmRCbG9ja051bSA9IDA7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKElTX1NQQVJFX0JMT0NLKHdCbG9ja051bSkpIHsKKwkJKnBHYXJiYWdlQ29sbGVjdCA9IEZBSUw7CisJCXBidFt3QmxvY2tOdW1dID0gKHUzMikocGJ0W3dCbG9ja051bV0gJiAoflNQQVJFX0JMT0NLKSk7CisjaWYgQ01EX0RNQQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJCWZ0bF9jbWRfY250OworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSAodTMyKSh3QmxvY2tOdW0pOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbd0Jsb2NrTnVtXTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKyNlbmRpZgorCQlyZXR1cm4gcGJ0W3dCbG9ja051bV07CisJfQorCisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCWlmIChJU19ESVNDQVJERURfQkxPQ0soaSkpCisJCQl3RGlzY2FyZEJsb2NrTnVtKys7CisKKwkJaWYgKElTX1NQQVJFX0JMT0NLKGkpKSB7CisJCQl1MzIgd1BoeXNpY2FsSW5kZXggPSAodTMyKSgofkJBRF9CTE9DSykgJiBwYnRbaV0pOworCQkJaWYgKHdQaHlzaWNhbEluZGV4ID4gRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKQorCQkJCXByaW50ayhLRVJOX0VSUiAiRlRMX1JlcGxhY2VfTFdCbG9jazogIgorCQkJCQkiVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIhXG4iKTsKKwkJCWlmIChnX3BXZWFyQ291bnRlclt3UGh5c2ljYWxJbmRleCAtCisJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdIDwKKwkJCQl3TGVhc3RXb3JuQ291bnRlcikgeworCQkJCXdMZWFzdFdvcm5Db3VudGVyID0KKwkJCQkJZ19wV2VhckNvdW50ZXJbd1BoeXNpY2FsSW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCQkJd0xlYXN0V29ybkluZGV4ID0gaTsKKwkJCX0KKwkJCXdTcGFyZUJsb2NrTnVtKys7CisJCX0KKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkiRlRMX1JlcGxhY2VfTFdCbG9jazogTGVhc3QgV29ybiBDb3VudGVyICVkXG4iLAorCQkoaW50KXdMZWFzdFdvcm5Db3VudGVyKTsKKworCWlmICgod0Rpc2NhcmRCbG9ja051bSA+PSBOVU1fRlJFRV9CTE9DS1NfR0FURSkgfHwKKwkJKHdTcGFyZUJsb2NrTnVtIDw9IE5VTV9GUkVFX0JMT0NLU19HQVRFKSkKKwkJKnBHYXJiYWdlQ29sbGVjdCA9IFBBU1M7CisJZWxzZQorCQkqcEdhcmJhZ2VDb2xsZWN0ID0gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkiRlRMX1JlcGxhY2VfTFdCbG9jazogRGlzY2FyZGVkIEJsb2NrcyAldSBTcGFyZSIKKwkJIiBCbG9ja3MgJXVcbiIsCisJCSh1bnNpZ25lZCBpbnQpd0Rpc2NhcmRCbG9ja051bSwKKwkJKHVuc2lnbmVkIGludCl3U3BhcmVCbG9ja051bSk7CisKKwlyZXR1cm4gRlRMX1JlcGxhY2VfT25lQmxvY2sod0Jsb2NrTnVtLCB3TGVhc3RXb3JuSW5kZXgpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9SZXBsYWNlX01XQmxvY2sKKyogSW5wdXRzOiAgICAgICBOb25lCisqIE91dHB1dHM6ICAgICAgbW9zdCB3b3JuIHNwYXJlIGJsb2NrIG5vLi9CQURfQkxPQ0sKKyogRGVzY3JpcHRpb246ICBJdCBmaW5kcyBtb3N0IHdvcm4gc3BhcmUgYmxvY2suCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworc3RhdGljIHUzMiBGVExfUmVwbGFjZV9NV0Jsb2NrKHZvaWQpCit7CisJdTMyIGk7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwl1OCB3TW9zdFdvcm5Db3VudGVyID0gMDsKKwl1MzIgd01vc3RXb3JuSW5kZXggPSBCQURfQkxPQ0s7CisJdTMyIHdTcGFyZUJsb2NrTnVtID0gMDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IERldmljZUluZm8ud0RhdGFCbG9ja051bTsgaSsrKSB7CisJCWlmIChJU19TUEFSRV9CTE9DSyhpKSkgeworCQkJdTMyIHdQaHlzaWNhbEluZGV4ID0gKHUzMikoKH5TUEFSRV9CTE9DSykgJiBwYnRbaV0pOworCQkJaWYgKGdfcFdlYXJDb3VudGVyW3dQaHlzaWNhbEluZGV4IC0KKwkJCSAgICBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPgorCQkJICAgIHdNb3N0V29ybkNvdW50ZXIpIHsKKwkJCQl3TW9zdFdvcm5Db3VudGVyID0KKwkJCQkgICAgZ19wV2VhckNvdW50ZXJbd1BoeXNpY2FsSW5kZXggLQorCQkJCSAgICBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCQkJd01vc3RXb3JuSW5kZXggPSB3UGh5c2ljYWxJbmRleDsKKwkJCX0KKwkJCXdTcGFyZUJsb2NrTnVtKys7CisJCX0KKwl9CisKKwlpZiAod1NwYXJlQmxvY2tOdW0gPD0gMikKKwkJcmV0dXJuIEJBRF9CTE9DSzsKKworCXJldHVybiB3TW9zdFdvcm5JbmRleDsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBGVExfUmVwbGFjZV9CbG9jaworKiBJbnB1dHM6ICAgICAgIEJsb2NrIEFkZHJlc3MKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBJZiBibG9jayBzcGVjaWZpZWQgYnkgYmxrX2FkZHIgcGFyYW1ldGVyIGlzIG5vdCBmcmVlLAorKiAgICAgICAgICAgICAgIHJlcGxhY2UgaXQgd2l0aCB0aGUgbGVhc3Qgd29ybiBibG9jay4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9SZXBsYWNlX0Jsb2NrKHU2NCBibGtfYWRkcikKK3sKKwl1MzIgY3VycmVudF9ibGsgPSBCTEtfRlJPTV9BRERSKGJsa19hZGRyKTsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCWludCB3UmVzdWx0ID0gUEFTUzsKKwlpbnQgR2FyYmFnZUNvbGxlY3QgPSBGQUlMOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChJU19TUEFSRV9CTE9DSyhjdXJyZW50X2JsaykpIHsKKwkJcGJ0W2N1cnJlbnRfYmxrXSA9ICh+U1BBUkVfQkxPQ0spICYgcGJ0W2N1cnJlbnRfYmxrXTsKKyNpZiBDTURfRE1BCisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IGN1cnJlbnRfYmxrOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPSBwYnRbY3VycmVudF9ibGtdOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDBDIDsKKyNlbmRpZgorCQlyZXR1cm4gd1Jlc3VsdDsKKwl9CisKKwlGVExfUmVwbGFjZV9MV0Jsb2NrKGN1cnJlbnRfYmxrLCAmR2FyYmFnZUNvbGxlY3QpOworCisJaWYgKFBBU1MgPT0gR2FyYmFnZUNvbGxlY3QpCisJCXdSZXN1bHQgPSBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24oKTsKKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0lzX0JhZEJsb2NrCisqIElucHV0czogICAgICAgYmxvY2sgbnVtYmVyIHRvIHRlc3QKKyogT3V0cHV0czogICAgICBQQVNTIChibG9jayBpcyBCQUQpIC8gRkFJTCAoYmxvY2sgaXMgbm90IGJhZCkKKyogRGVzY3JpcHRpb246ICB0ZXN0IGlmIHRoaXMgYmxvY2sgbnVtYmVyIGlzIGZsYWdnZWQgYXMgYmFkCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworaW50IEdMT0JfRlRMX0lzX0JhZEJsb2NrKHUzMiB3QmxvY2tOdW0pCit7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAod0Jsb2NrTnVtID49IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrCisJCSYmIEJBRF9CTE9DSyA9PSAocGJ0W3dCbG9ja051bV0gJiBCQURfQkxPQ0spKQorCQlyZXR1cm4gUEFTUzsKKwllbHNlCisJCXJldHVybiBGQUlMOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0ZsdXNoX0NhY2hlCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIGZsdXNoIGFsbCB0aGUgY2FjaGUgYmxvY2tzIHRvIGZsYXNoCisqICAgICAgICAgICAgICAgaWYgYSBjYWNoZSBibG9jayBpcyBub3QgZGlydHksIGRvbid0IGRvIGFueXRoaW5nIHdpdGggaXQKKyogICAgICAgICAgICAgICBlbHNlLCB3cml0ZSB0aGUgYmxvY2sgYW5kIHVwZGF0ZSB0aGUgYmxvY2sgdGFibGUKKyogTm90ZTogICAgICAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYXQgc2h1dGRvd24vcG93ZXIgZG93bi4KKyogICAgICAgICAgICAgICB0byB3cml0ZSBpbXBvcnRhbnQgZGF0YSBpbnRvIGRldmljZQorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBHTE9CX0ZUTF9GbHVzaF9DYWNoZSh2b2lkKQoreworCWludCBpLCByZXQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IENBQ0hFX0lURU1fTlVNOyBpKyspIHsKKwkJaWYgKFNFVCA9PSBDYWNoZS5hcnJheVtpXS5jaGFuZ2VkKSB7CisjaWYgQ01EX0RNQQorI2lmIFJFU1RPUkVfQ0FDSEVfT05fQ0RNQV9DSEFJTl9GQUlMVVJFCisJCQlpbnRfY2FjaGVbZnRsX2NtZF9jbnRdLml0ZW0gPSBpOworCQkJaW50X2NhY2hlW2Z0bF9jbWRfY250XS5jYWNoZS5hZGRyZXNzID0KKwkJCQkJQ2FjaGUuYXJyYXlbaV0uYWRkcmVzczsKKwkJCWludF9jYWNoZVtmdGxfY21kX2NudF0uY2FjaGUuY2hhbmdlZCA9IENMRUFSOworI2VuZGlmCisjZW5kaWYKKwkJCXJldCA9IHdyaXRlX2JhY2tfdG9fbDJfY2FjaGUoQ2FjaGUuYXJyYXlbaV0uYnVmLCBDYWNoZS5hcnJheVtpXS5hZGRyZXNzKTsKKwkJCWlmIChQQVNTID09IHJldCkgeworCQkJCUNhY2hlLmFycmF5W2ldLmNoYW5nZWQgPSBDTEVBUjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWxlZCB3aGVuIHdyaXRlIGJhY2sgdG8gTDIgY2FjaGUhXG4iKTsKKwkJCQkvKiBUT0RPIC0gSG93IHRvIGhhbmRsZSB0aGlzPyAqLworCQkJfQorCQl9CisJfQorCisJZmx1c2hfbDJfY2FjaGUoKTsKKworCXJldHVybiBGVExfV3JpdGVfQmxvY2tfVGFibGUoRkFJTCk7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgR0xPQl9GVExfUGFnZV9SZWFkCisqIElucHV0czogICAgICAgcG9pbnRlciB0byBkYXRhCisqICAgICAgICAgICAgICAgICAgIGxvZ2ljYWwgYWRkcmVzcyBvZiBkYXRhICh1NjQgaXMgTEJBICogQnl0ZXMvUGFnZSkKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICByZWFkcyBhIHBhZ2Ugb2YgZGF0YSBpbnRvIFJBTSBmcm9tIHRoZSBjYWNoZQorKiAgICAgICAgICAgICAgIGlmIHRoZSBkYXRhIGlzIG5vdCBhbHJlYWR5IGluIGNhY2hlLCByZWFkIGZyb20gZmxhc2ggdG8gY2FjaGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfUGFnZV9SZWFkKHU4ICpkYXRhLCB1NjQgbG9naWNhbF9hZGRyKQoreworCXUxNiBjYWNoZV9pdGVtOworCWludCByZXMgPSBQQVNTOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJHTE9CX0ZUTF9QYWdlX1JlYWQgLSAiCisJCSJwYWdlX2FkZHI6ICVsbHVcbiIsIGxvZ2ljYWxfYWRkcik7CisKKwljYWNoZV9pdGVtID0gRlRMX0NhY2hlX0lmX0hpdChsb2dpY2FsX2FkZHIpOworCisJaWYgKFVOSElUX0NBQ0hFX0lURU0gPT0gY2FjaGVfaXRlbSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSAgICAgICAiR0xPQl9GVExfUGFnZV9SZWFkOiBDYWNoZSBub3QgaGl0XG4iKTsKKwkJcmVzID0gRlRMX0NhY2hlX1dyaXRlKCk7CisJCWlmIChFUlIgPT0gRlRMX0NhY2hlX1JlYWQobG9naWNhbF9hZGRyKSkKKwkJCXJlcyA9IEVSUjsKKwkJY2FjaGVfaXRlbSA9IENhY2hlLkxSVTsKKwl9CisKKwlGVExfQ2FjaGVfUmVhZF9QYWdlKGRhdGEsIGxvZ2ljYWxfYWRkciwgY2FjaGVfaXRlbSk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX1BhZ2VfV3JpdGUKKyogSW5wdXRzOiAgICAgICBwb2ludGVyIHRvIGRhdGEKKyogICAgICAgICAgICAgICBhZGRyZXNzIG9mIGRhdGEgKEFERFJFU1NUWVBFIGlzIExCQSAqIEJ5dGVzL1BhZ2UpCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgd3JpdGVzIGEgcGFnZSBvZiBkYXRhIGZyb20gUkFNIHRvIHRoZSBjYWNoZQorKiAgICAgICAgICAgICAgIGlmIHRoZSBkYXRhIGlzIG5vdCBhbHJlYWR5IGluIGNhY2hlLCB3cml0ZSBiYWNrIHRoZQorKiAgICAgICAgICAgICAgIGxlYXN0IHJlY2VudGx5IHVzZWQgYmxvY2sgYW5kIHJlYWQgdGhlIGFkZHJlc3NlZCBibG9jaworKiAgICAgICAgICAgICAgIGZyb20gZmxhc2ggdG8gY2FjaGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfUGFnZV9Xcml0ZSh1OCAqcERhdGEsIHU2NCBkd1BhZ2VBZGRyKQoreworCXUxNiBjYWNoZV9ibGs7CisJdTMyICpwYnQgPSAodTMyICopZ19wQmxvY2tUYWJsZTsKKwlpbnQgd1Jlc3VsdCA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIkdMT0JfRlRMX1BhZ2VfV3JpdGUgLSAiCisJCSJkd1BhZ2VBZGRyOiAlbGx1XG4iLCBkd1BhZ2VBZGRyKTsKKworCWNhY2hlX2JsayA9IEZUTF9DYWNoZV9JZl9IaXQoZHdQYWdlQWRkcik7CisKKwlpZiAoVU5ISVRfQ0FDSEVfSVRFTSA9PSBjYWNoZV9ibGspIHsKKwkJd1Jlc3VsdCA9IEZUTF9DYWNoZV9Xcml0ZSgpOworCQlpZiAoSVNfQkFEX0JMT0NLKEJMS19GUk9NX0FERFIoZHdQYWdlQWRkcikpKSB7CisJCQl3UmVzdWx0ID0gRlRMX1JlcGxhY2VfQmxvY2soZHdQYWdlQWRkcik7CisJCQlwYnRbQkxLX0ZST01fQUREUihkd1BhZ2VBZGRyKV0gfD0gU1BBUkVfQkxPQ0s7CisJCQlpZiAod1Jlc3VsdCA9PSBGQUlMKQorCQkJCXJldHVybiBGQUlMOworCQl9CisJCWlmIChFUlIgPT0gRlRMX0NhY2hlX1JlYWQoZHdQYWdlQWRkcikpCisJCQl3UmVzdWx0ID0gRVJSOworCQljYWNoZV9ibGsgPSBDYWNoZS5MUlU7CisJCUZUTF9DYWNoZV9Xcml0ZV9QYWdlKHBEYXRhLCBkd1BhZ2VBZGRyLCBjYWNoZV9ibGssIDApOworCX0gZWxzZSB7CisjaWYgQ01EX0RNQQorCQlGVExfQ2FjaGVfV3JpdGVfUGFnZShwRGF0YSwgZHdQYWdlQWRkciwgY2FjaGVfYmxrLAorCQkJCUxMRF9DTURfRkxBR19PUkRFUl9CRUZPUkVfUkVTVCk7CisjZWxzZQorCQlGVExfQ2FjaGVfV3JpdGVfUGFnZShwRGF0YSwgZHdQYWdlQWRkciwgY2FjaGVfYmxrLCAwKTsKKyNlbmRpZgorCX0KKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEdMT0JfRlRMX0Jsb2NrX0VyYXNlCisqIElucHV0czogICAgICAgYWRkcmVzcyBvZiBibG9jayB0byBlcmFzZSAobm93IGluIGJ5dGUgZm9ybWF0LCBzaG91bGQgY2hhbmdlIHRvCisqIGJsb2NrIGZvcm1hdCkKKyogT3V0cHV0czogICAgICBQQVNTPTAgLyBGQUlMPTEKKyogRGVzY3JpcHRpb246ICBlcmFzZXMgdGhlIHNwZWNpZmllZCBibG9jaworKiAgICAgICAgICAgICAgIGluY3JlbWVudHMgdGhlIGVyYXNlIGNvdW50CisqICAgICAgICAgICAgICAgSWYgZXJhc2UgY291bnQgcmVhY2hlcyBpdHMgdXBwZXIgbGltaXQsY2FsbCBmdW5jdGlvbiB0bworKiAgICAgICAgICAgICAgIGRvIHRoZSBhanVzdG1lbnQgYXMgcGVyIHRoZSByZWxhdGl2ZSBlcmFzZSBjb3VudCB2YWx1ZXMKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgR0xPQl9GVExfQmxvY2tfRXJhc2UodTY0IGJsa19hZGRyKQoreworCWludCBzdGF0dXM7CisJdTMyIEJsa0lkeDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCUJsa0lkeCA9ICh1MzIpKGJsa19hZGRyID4+IERldmljZUluZm8ubkJpdHNJbkJsb2NrRGF0YVNpemUpOworCisJaWYgKEJsa0lkeCA8IERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiR0xPQl9GVExfQmxvY2tfRXJhc2U6ICIKKwkJCSJUaGlzIHNob3VsZCBuZXZlciBvY2N1clxuIik7CisJCXJldHVybiBGQUlMOworCX0KKworI2lmIENNRF9ETUEKKwlzdGF0dXMgPSBHTE9CX0xMRF9FcmFzZV9CbG9ja19jZG1hKEJsa0lkeCwgTExEX0NNRF9GTEFHX01PREVfQ0RNQSk7CisJaWYgKHN0YXR1cyA9PSBGQUlMKQorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJICAgICAgICJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJICAgICAgICJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbGtJZHgpOworI2Vsc2UKKwlzdGF0dXMgPSBHTE9CX0xMRF9FcmFzZV9CbG9jayhCbGtJZHgpOworCWlmIChzdGF0dXMgPT0gRkFJTCkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJICAgICAgICJOQU5EIFByb2dyYW0gZmFpbCBpbiAlcywgTGluZSAlZCwgIgorCQkJICAgICAgICJGdW5jdGlvbjogJXMsIG5ldyBCYWQgQmxvY2sgJWQgZ2VuZXJhdGVkIVxuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCBCbGtJZHgpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKyNlbmRpZgorCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKSB7CisJCWdfcFJlYWRDb3VudGVyW0Jsa0lkeCAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA9IDA7CisJCWlmIChnX2NCbG9ja1RhYmxlU3RhdHVzICE9IElOX1BST0dSRVNTX0JMT0NLX1RBQkxFKSB7CisJCQlnX2NCbG9ja1RhYmxlU3RhdHVzID0gSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEU7CisJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQl9CisJfQorCisJZ19wV2VhckNvdW50ZXJbQmxrSWR4IC0gRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdKys7CisKKyNpZiBDTURfRE1BCisJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9IGZ0bF9jbWRfY250OworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19JbmRleCA9CisJCUJsa0lkeCAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19FbnRyeV9WYWx1ZSA9CisJCWdfcFdlYXJDb3VudGVyW0Jsa0lkeCAtIERldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDMwOworCisJaWYgKERldmljZUluZm8uTUxDRGV2aWNlKSB7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5SQ19JbmRleCA9CisJCQlCbGtJZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlJDX0VudHJ5X1ZhbHVlID0KKwkJCWdfcFJlYWRDb3VudGVyW0Jsa0lkeCAtCisJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweEMwOworCX0KKworCWZ0bF9jbWRfY250Kys7CisjZW5kaWYKKworCWlmIChnX3BXZWFyQ291bnRlcltCbGtJZHggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gPT0gMHhGRSkKKwkJRlRMX0FkanVzdF9SZWxhdGl2ZV9FcmFzZV9Db3VudChCbGtJZHgpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9BZGp1c3RfUmVsYXRpdmVfRXJhc2VfQ291bnQKKyogSW5wdXRzOiAgICAgICBpbmRleCB0byBibG9jayB0aGF0IHdhcyBqdXN0IGluY3JlbWVudGVkIGFuZCBpcyBhdCB0aGUgbWF4CisqIE91dHB1dHM6ICAgICAgUEFTUz0wIC8gRkFJTD0xCisqIERlc2NyaXB0aW9uOiAgSWYgYW55IGVyYXNlIGNvdW50cyBhdCBNQVgsIGFkanVzdHMgZXJhc2UgY291bnQgb2YgZXZlcnkKKyogICAgICAgICAgICAgICBibG9jayBieSBzdWJzdHJhY3RpbmcgbGVhc3Qgd29ybgorKiAgICAgICAgICAgICAgIGNvdW50ZXIgZnJvbSBjb3VudGVyIHZhbHVlIG9mIGV2ZXJ5IGVudHJ5IGluIHdlYXIgdGFibGUKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitzdGF0aWMgaW50IEZUTF9BZGp1c3RfUmVsYXRpdmVfRXJhc2VfQ291bnQodTMyIEluZGV4X29mX01BWCkKK3sKKwl1OCB3TGVhc3RXb3JuQ291bnRlciA9IE1BWF9CWVRFX1ZBTFVFOworCXU4IHdXZWFyQ291bnRlcjsKKwl1MzIgaSwgd1dlYXJJbmRleDsKKwl1MzIgKnBidCA9ICh1MzIgKilnX3BCbG9ja1RhYmxlOworCWludCB3UmVzdWx0ID0gUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtOyBpKyspIHsKKwkJaWYgKElTX0JBRF9CTE9DSyhpKSkKKwkJCWNvbnRpbnVlOworCQl3V2VhckluZGV4ID0gKHUzMikocGJ0W2ldICYgKH5CQURfQkxPQ0spKTsKKworCQlpZiAoKHdXZWFySW5kZXggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jaykgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJGVExfQWRqdXN0X1JlbGF0aXZlX0VyYXNlX0NvdW50OiIKKwkJCQkJIlRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyXG4iKTsKKwkJd1dlYXJDb3VudGVyID0gZ19wV2VhckNvdW50ZXJbd1dlYXJJbmRleCAtCisJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCWlmICh3V2VhckNvdW50ZXIgPCB3TGVhc3RXb3JuQ291bnRlcikKKwkJCXdMZWFzdFdvcm5Db3VudGVyID0gd1dlYXJDb3VudGVyOworCX0KKworCWlmICh3TGVhc3RXb3JuQ291bnRlciA9PSAwKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiQWRqdXN0aW5nIFdlYXIgTGV2ZWxsaW5nIENvdW50ZXJzOiBTcGVjaWFsIENhc2VcbiIpOworCQlnX3BXZWFyQ291bnRlcltJbmRleF9vZl9NQVggLQorCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdLS07CisjaWYgQ01EX0RNQQorCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0gZnRsX2NtZF9jbnQ7CisJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19JbmRleCA9CisJCQlJbmRleF9vZl9NQVggLSBEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jazsKKwkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPldDX0VudHJ5X1ZhbHVlID0KKwkJCWdfcFdlYXJDb3VudGVyW0luZGV4X29mX01BWCAtCisJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2tdOworCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDMwOworI2VuZGlmCisJCUZUTF9TdGF0aWNfV2Vhcl9MZXZlbGluZygpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykKKwkJCWlmICghSVNfQkFEX0JMT0NLKGkpKSB7CisJCQkJd1dlYXJJbmRleCA9ICh1MzIpKHBidFtpXSAmICh+QkFEX0JMT0NLKSk7CisJCQkJZ19wV2VhckNvdW50ZXJbd1dlYXJJbmRleCAtCisJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA9CisJCQkJCSh1OCkoZ19wV2VhckNvdW50ZXIKKwkJCQkJW3dXZWFySW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja10gLQorCQkJCQl3TGVhc3RXb3JuQ291bnRlcik7CisjaWYgQ01EX0RNQQorCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhID0KKwkJCQkoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwkJCQlnX3BCVERlbHRhX0ZyZWUgKz0KKwkJCQkJc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJZnRsX2NtZF9jbnQ7CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPldDX0luZGV4ID0gd1dlYXJJbmRleCAtCisJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrOworCQkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5XQ19FbnRyeV9WYWx1ZSA9CisJCQkJCWdfcFdlYXJDb3VudGVyW3dXZWFySW5kZXggLQorCQkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9ja107CisJCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgzMDsKKyNlbmRpZgorCQkJfQorCX0KKworCXJldHVybiB3UmVzdWx0OworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlCisqIElucHV0czogICAgICAgTm9uZQorKiBPdXRwdXRzOiAgICAgIE5vbmUKKyogRGVzY3JpcHRpb246ICBJdCB3cml0ZXMgaW4tcHJvZ3Jlc3MgZmxhZyBwYWdlIHRvIHRoZSBwYWdlIG5leHQgdG8KKyogICAgICAgICAgICAgICBibG9jayB0YWJsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEZUTF9Xcml0ZV9JTl9Qcm9ncmVzc19CbG9ja19UYWJsZV9QYWdlKHZvaWQpCit7CisJaW50IHdSZXN1bHQgPSBQQVNTOworCXUxNiBidF9wYWdlczsKKwl1MTYgZHdJUEZQYWdlQWRkcjsKKyNpZiBDTURfRE1BCisjZWxzZQorCXUzMiAqcGJ0ID0gKHUzMiAqKWdfcEJsb2NrVGFibGU7CisJdTMyIHdUZW1wQmxvY2tUYWJsZUluZGV4OworI2VuZGlmCisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWJ0X3BhZ2VzID0gRlRMX0dldF9CbG9ja19UYWJsZV9GbGFzaF9TaXplX1BhZ2VzKCk7CisKKwlkd0lQRlBhZ2VBZGRyID0gZ193QmxvY2tUYWJsZU9mZnNldCArIGJ0X3BhZ2VzOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJXcml0aW5nIElQRiBhdCAiCisJCQkgICAgICAgIkJsb2NrICVkIFBhZ2UgJWRcbiIsCisJCQkgICAgICAgZ193QmxvY2tUYWJsZUluZGV4LCBkd0lQRlBhZ2VBZGRyKTsKKworI2lmIENNRF9ETUEKKwl3UmVzdWx0ID0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlX2NkbWEoZ19wSVBGLAorCQlnX3dCbG9ja1RhYmxlSW5kZXgsIGR3SVBGUGFnZUFkZHIsIDEsCisJCUxMRF9DTURfRkxBR19NT0RFX0NETUEgfCBMTERfQ01EX0ZMQUdfT1JERVJfQkVGT1JFX1JFU1QpOworCWlmICh3UmVzdWx0ID09IEZBSUwpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSAgICAgICAiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSAgICAgICAiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCSAgICAgICBnX3dCbG9ja1RhYmxlSW5kZXgpOworCX0KKwlnX3dCbG9ja1RhYmxlT2Zmc2V0ID0gZHdJUEZQYWdlQWRkciArIDE7CisJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPSAoc3RydWN0IEJUYWJsZUNoYW5nZXNEZWx0YSAqKWdfcEJURGVsdGFfRnJlZTsKKwlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5mdGxfY21kX2NudCA9IGZ0bF9jbWRfY250OworCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5nX3dCbG9ja1RhYmxlT2Zmc2V0ID0gZ193QmxvY2tUYWJsZU9mZnNldDsKKwlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+VmFsaWRGaWVsZHMgPSAweDAxOworCWZ0bF9jbWRfY250Kys7CisjZWxzZQorCXdSZXN1bHQgPSBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmUoZ19wSVBGLAorCQlnX3dCbG9ja1RhYmxlSW5kZXgsIGR3SVBGUGFnZUFkZHIsIDEpOworCWlmICh3UmVzdWx0ID09IEZBSUwpIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSAgICAgICAiTkFORCBQcm9ncmFtIGZhaWwgaW4gJXMsIExpbmUgJWQsICIKKwkJCSAgICAgICAiRnVuY3Rpb246ICVzLCBuZXcgQmFkIEJsb2NrICVkIGdlbmVyYXRlZCFcbiIsCisJCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywKKwkJCSAgICAgICAoaW50KWdfd0Jsb2NrVGFibGVJbmRleCk7CisJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFtCTE9DS19UQUJMRV9JTkRFWF0pOworCQl3VGVtcEJsb2NrVGFibGVJbmRleCA9IEZUTF9SZXBsYWNlX0Jsb2NrX1RhYmxlKCk7CisJCWJ0X2Jsb2NrX2NoYW5nZWQgPSAxOworCQlpZiAoQkFEX0JMT0NLID09IHdUZW1wQmxvY2tUYWJsZUluZGV4KQorCQkJcmV0dXJuIEVSUjsKKwkJZ193QmxvY2tUYWJsZUluZGV4ID0gd1RlbXBCbG9ja1RhYmxlSW5kZXg7CisJCWdfd0Jsb2NrVGFibGVPZmZzZXQgPSAwOworCQkvKiBCbG9jayB0YWJsZSB0YWcgaXMgJzAwJy4gTWVhbnMgaXQncyB1c2VkIG9uZSAqLworCQlwYnRbQkxPQ0tfVEFCTEVfSU5ERVhdID0gZ193QmxvY2tUYWJsZUluZGV4OworCQlyZXR1cm4gRkFJTDsKKwl9CisJZ193QmxvY2tUYWJsZU9mZnNldCA9IGR3SVBGUGFnZUFkZHIgKyAxOworI2VuZGlmCisJcmV0dXJuIHdSZXN1bHQ7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIEZUTF9SZWFkX0Rpc3R1cmJhbmNlCisqIElucHV0czogICAgICAgYmxvY2sgYWRkcmVzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAvIEZBSUw9MQorKiBEZXNjcmlwdGlvbjogIHVzZWQgdG8gaGFuZGxlIHJlYWQgZGlzdHVyYmFuY2UuIERhdGEgaW4gYmxvY2sgdGhhdAorKiAgICAgICAgICAgICAgIHJlYWNoZXMgaXRzIHJlYWQgbGltaXQgaXMgbW92ZWQgdG8gbmV3IGJsb2NrCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgRlRMX1JlYWRfRGlzdHVyYmFuY2UodTMyIGJsa19hZGRyKQoreworCWludCB3UmVzdWx0ID0gRkFJTDsKKwl1MzIgKnBidCA9ICh1MzIgKikgZ19wQmxvY2tUYWJsZTsKKwl1MzIgZHdPbGRCbG9ja0FkZHIgPSBibGtfYWRkcjsKKwl1MzIgd0Jsb2NrTnVtOworCXUzMiBpOworCXUzMiB3TGVhc3RSZWFkQ291bnRlciA9IDB4RkZGRjsKKwl1MzIgd0xlYXN0UmVhZEluZGV4ID0gQkFEX0JMT0NLOworCXUzMiB3U3BhcmVCbG9ja051bSA9IDA7CisJdTMyIHdUZW1wTm9kZTsKKwl1MzIgd1JlcGxhY2VkTm9kZTsKKwl1OCAqZ19wVGVtcEJ1ZjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworI2lmIENNRF9ETUEKKwlnX3BUZW1wQnVmID0gY3BfYmFja19idWZfY29waWVzW2NwX2JhY2tfYnVmX2lkeF07CisJY3BfYmFja19idWZfaWR4Kys7CisJaWYgKGNwX2JhY2tfYnVmX2lkeCA+IENPUFlfQkFDS19CVUZfTlVNKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3BfYmFja19idWZfY29waWVzIG92ZXJmbG93ISBFeGl0LiIKKwkJIk1heWJlIHRvbyBtYW55IHBlbmRpbmcgY29tbWFuZHMgaW4geW91ciBDRE1BIGNoYWluLlxuIik7CisJCXJldHVybiBGQUlMOworCX0KKyNlbHNlCisJZ19wVGVtcEJ1ZiA9IHRtcF9idWZfcmVhZF9kaXN0dXJiYW5jZTsKKyNlbmRpZgorCisJd0Jsb2NrTnVtID0gRlRMX0dldF9CbG9ja19JbmRleChibGtfYWRkcik7CisKKwlkbyB7CisJCS8qIFRoaXMgaXMgYSBidWcuSGVyZSAnaScgc2hvdWxkIGJlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyCisJCSAqIGFuZCBzdGFydCBmcm9tIDEgKDAgaXMgcmVzZXJ2ZWQgZm9yIGJsb2NrIHRhYmxlKS4KKwkJICogSGF2ZSBmaXhlZCBpdC4gICAgICAgIC0gWXVucGVuZyAyMDA4LiAxMi4gMTkKKwkJICovCisJCWZvciAoaSA9IDE7IGkgPCBEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW07IGkrKykgeworCQkJaWYgKElTX1NQQVJFX0JMT0NLKGkpKSB7CisJCQkJdTMyIHdQaHlzaWNhbEluZGV4ID0KKwkJCQkJKHUzMikoKH5TUEFSRV9CTE9DSykgJiBwYnRbaV0pOworCQkJCWlmIChnX3BSZWFkQ291bnRlclt3UGh5c2ljYWxJbmRleCAtCisJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXSA8CisJCQkJCXdMZWFzdFJlYWRDb3VudGVyKSB7CisJCQkJCXdMZWFzdFJlYWRDb3VudGVyID0KKwkJCQkJCWdfcFJlYWRDb3VudGVyW3dQaHlzaWNhbEluZGV4IC0KKwkJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrXTsKKwkJCQkJd0xlYXN0UmVhZEluZGV4ID0gaTsKKwkJCQl9CisJCQkJd1NwYXJlQmxvY2tOdW0rKzsKKwkJCX0KKwkJfQorCisJCWlmICh3U3BhcmVCbG9ja051bSA8PSBOVU1fRlJFRV9CTE9DS1NfR0FURSkgeworCQkJd1Jlc3VsdCA9IEdMT0JfRlRMX0dhcmJhZ2VfQ29sbGVjdGlvbigpOworCQkJaWYgKFBBU1MgPT0gd1Jlc3VsdCkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXdUZW1wTm9kZSA9ICh1MzIpKERJU0NBUkRfQkxPQ0sgfCBwYnRbd0Jsb2NrTnVtXSk7CisJCQl3UmVwbGFjZWROb2RlID0gKHUzMikoKH5TUEFSRV9CTE9DSykgJgorCQkJCQlwYnRbd0xlYXN0UmVhZEluZGV4XSk7CisjaWYgQ01EX0RNQQorCQkJcGJ0W3dCbG9ja051bV0gPSB3UmVwbGFjZWROb2RlOworCQkJcGJ0W3dMZWFzdFJlYWRJbmRleF0gPSB3VGVtcE5vZGU7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YSA9CisJCQkJKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEgKilnX3BCVERlbHRhX0ZyZWU7CisJCQlnX3BCVERlbHRhX0ZyZWUgKz0gc2l6ZW9mKHN0cnVjdCBCVGFibGVDaGFuZ2VzRGVsdGEpOworCisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+ZnRsX2NtZF9jbnQgPQorCQkJCQlmdGxfY21kX2NudDsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9JbmRleCA9IHdCbG9ja051bTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5CVF9FbnRyeV9WYWx1ZSA9IHBidFt3QmxvY2tOdW1dOworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPlZhbGlkRmllbGRzID0gMHgwQzsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEgPQorCQkJCShzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhICopZ19wQlREZWx0YV9GcmVlOworCQkJZ19wQlREZWx0YV9GcmVlICs9IHNpemVvZihzdHJ1Y3QgQlRhYmxlQ2hhbmdlc0RlbHRhKTsKKworCQkJcF9CVGFibGVDaGFuZ2VzRGVsdGEtPmZ0bF9jbWRfY250ID0KKwkJCQkJZnRsX2NtZF9jbnQ7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfSW5kZXggPSB3TGVhc3RSZWFkSW5kZXg7CisJCQlwX0JUYWJsZUNoYW5nZXNEZWx0YS0+QlRfRW50cnlfVmFsdWUgPQorCQkJCQlwYnRbd0xlYXN0UmVhZEluZGV4XTsKKwkJCXBfQlRhYmxlQ2hhbmdlc0RlbHRhLT5WYWxpZEZpZWxkcyA9IDB4MEM7CisKKwkJCXdSZXN1bHQgPSBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9jZG1hKGdfcFRlbXBCdWYsCisJCQkJZHdPbGRCbG9ja0FkZHIsIDAsIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2ssCisJCQkJTExEX0NNRF9GTEFHX01PREVfQ0RNQSk7CisJCQlpZiAod1Jlc3VsdCA9PSBGQUlMKQorCQkJCXJldHVybiB3UmVzdWx0OworCisJCQlmdGxfY21kX2NudCsrOworCisJCQlpZiAod1Jlc3VsdCAhPSBGQUlMKSB7CisJCQkJaWYgKEZBSUwgPT0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX2NkbWEoCisJCQkJCWdfcFRlbXBCdWYsIHBidFt3QmxvY2tOdW1dLCAwLAorCQkJCQlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSkgeworCQkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCQkJIk5BTkQgUHJvZ3JhbSBmYWlsIGluICIKKwkJCQkJCSIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzLCAiCisJCQkJCQkibmV3IEJhZCBCbG9jayAlZCAiCisJCQkJCQkiZ2VuZXJhdGVkIVxuIiwKKwkJCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sCisJCQkJCQkoaW50KXBidFt3QmxvY2tOdW1dKTsKKwkJCQkJd1Jlc3VsdCA9IEZBSUw7CisJCQkJCU1BUktfQkxPQ0tfQVNfQkFEKHBidFt3QmxvY2tOdW1dKTsKKwkJCQl9CisJCQkJZnRsX2NtZF9jbnQrKzsKKwkJCX0KKyNlbHNlCisJCQl3UmVzdWx0ID0gR0xPQl9MTERfUmVhZF9QYWdlX01haW4oZ19wVGVtcEJ1ZiwKKwkJCQlkd09sZEJsb2NrQWRkciwgMCwgRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJCQlpZiAod1Jlc3VsdCA9PSBGQUlMKQorCQkJCXJldHVybiB3UmVzdWx0OworCisJCQlpZiAod1Jlc3VsdCAhPSBGQUlMKSB7CisJCQkJLyogVGhpcyBpcyBhIGJ1Zy4gQXQgdGhpcyB0aW1lLCBwYnRbd0Jsb2NrTnVtXQorCQkJCWlzIHN0aWxsIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mCisJCQkJZGlzY2FyZCBibG9jaywgYW5kIHNob3VsZCBub3QgYmUgd3JpdGUuCisJCQkJSGF2ZSBmaXhlZCBpdCBhcyBiZWxvdy4KKwkJCQkJLS0gWXVucGVuZyAyMDA4LjEyLjE5CisJCQkJKi8KKwkJCQl3UmVzdWx0ID0gR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKGdfcFRlbXBCdWYsCisJCQkJCXdSZXBsYWNlZE5vZGUsIDAsCisJCQkJCURldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spOworCQkJCWlmICh3UmVzdWx0ID09IEZBSUwpIHsKKwkJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkJCSJOQU5EIFByb2dyYW0gZmFpbCBpbiAiCisJCQkJCQkiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlcywgIgorCQkJCQkJIm5ldyBCYWQgQmxvY2sgJWQgIgorCQkJCQkJImdlbmVyYXRlZCFcbiIsCisJCQkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLAorCQkJCQkJKGludCl3UmVwbGFjZWROb2RlKTsKKwkJCQkJTUFSS19CTE9DS19BU19CQUQod1JlcGxhY2VkTm9kZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGJ0W3dCbG9ja051bV0gPSB3UmVwbGFjZWROb2RlOworCQkJCQlwYnRbd0xlYXN0UmVhZEluZGV4XSA9IHdUZW1wTm9kZTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgod1Jlc3VsdCA9PSBQQVNTKSAmJiAoZ19jQmxvY2tUYWJsZVN0YXR1cyAhPQorCQkJCUlOX1BST0dSRVNTX0JMT0NLX1RBQkxFKSkgeworCQkJCWdfY0Jsb2NrVGFibGVTdGF0dXMgPSBJTl9QUk9HUkVTU19CTE9DS19UQUJMRTsKKwkJCQlGVExfV3JpdGVfSU5fUHJvZ3Jlc3NfQmxvY2tfVGFibGVfUGFnZSgpOworCQkJfQorI2VuZGlmCisJCX0KKwl9IHdoaWxlICh3UmVzdWx0ICE9IFBBU1MpCisJOworCisjaWYgQ01EX0RNQQorCS8qIC4uLiAqLworI2VuZGlmCisKKwlyZXR1cm4gd1Jlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmxhc2guaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkMDU4MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2ZsYXNoLmgKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9GTEFTSF9JTlRFUkZBQ0VfCisjZGVmaW5lIF9GTEFTSF9JTlRFUkZBQ0VfCisKKyNpbmNsdWRlICJmZnNwb3J0LmgiCisjaW5jbHVkZSAic3BlY3RyYXN3Y29uZmlnLmgiCisKKyNkZWZpbmUgTUFYX0JZVEVfVkFMVUUgICAgICAgIDB4RkYKKyNkZWZpbmUgTUFYX1dPUkRfVkFMVUUgICAgICAgIDB4RkZGRgorI2RlZmluZSBNQVhfVTMyX1ZBTFVFICAgICAgICAweEZGRkZGRkZGCisKKyNkZWZpbmUgTUFYX0JMT0NLTk9ERV9WQUxVRSAgICAgMHhGRkZGRkYKKyNkZWZpbmUgRElTQ0FSRF9CTE9DSyAgICAgICAgICAgMHg4MDAwMDAKKyNkZWZpbmUgU1BBUkVfQkxPQ0sgICAgICAgICAgICAgMHg0MDAwMDAKKyNkZWZpbmUgQkFEX0JMT0NLICAgICAgICAgICAgICAgMHhDMDAwMDAKKworI2RlZmluZSBVTkhJVF9DQUNIRV9JVEVNICAgICAgICAgMHhGRkZGCisKKyNkZWZpbmUgTkFORF9DQUNIRV9JTklUX0FERFIgICAgMHhmZmZmZmZmZmZmZmZmZmZmVUxMCisKKyNkZWZpbmUgSU5fUFJPR1JFU1NfQkxPQ0tfVEFCTEUgICAweDAwCisjZGVmaW5lIENVUlJFTlRfQkxPQ0tfVEFCTEUgICAgICAgMHgwMQorCisjZGVmaW5lIEJUU0lHX09GRlNFVCAgICgwKQorI2RlZmluZSBCVFNJR19CWVRFUyAgICAoNSkKKyNkZWZpbmUgQlRTSUdfREVMVEEgICAgKDMpCisKKyNkZWZpbmUgTUFYX1JFQURfQ09VTlRFUiAgMHgyNzEwCisKKyNkZWZpbmUgRklSU1RfQlRfSUQJCSgxKQorI2RlZmluZSBMQVNUX0JUX0lEICAgICgyNTQpCisjZGVmaW5lIEJUQkxPQ0tfSU5WQUwgICh1MzIpKDB4RkZGRkZGRkYpCisKK3N0cnVjdCBkZXZpY2VfaW5mb190YWcgeworCXUxNiB3RGV2aWNlTWFrZXI7CisJdTE2IHdEZXZpY2VJRDsKKwl1MzIgd0RldmljZVR5cGU7CisJdTMyIHdTcGVjdHJhU3RhcnRCbG9jazsKKwl1MzIgd1NwZWN0cmFFbmRCbG9jazsKKwl1MzIgd1RvdGFsQmxvY2tzOworCXUxNiB3UGFnZXNQZXJCbG9jazsKKwl1MTYgd1BhZ2VTaXplOworCXUxNiB3UGFnZURhdGFTaXplOworCXUxNiB3UGFnZVNwYXJlU2l6ZTsKKwl1MTYgd051bVBhZ2VTcGFyZUZsYWc7CisJdTE2IHdFQ0NCeXRlc1BlclNlY3RvcjsKKwl1MzIgd0Jsb2NrU2l6ZTsKKwl1MzIgd0Jsb2NrRGF0YVNpemU7CisJdTMyIHdEYXRhQmxvY2tOdW07CisJdTggYlBsYW5lTnVtOworCXUxNiB3RGV2aWNlTWFpbkFyZWFTaXplOworCXUxNiB3RGV2aWNlU3BhcmVBcmVhU2l6ZTsKKwl1MTYgd0RldmljZXNDb25uZWN0ZWQ7CisJdTE2IHdEZXZpY2VXaWR0aDsKKwl1MTYgd0hXUmV2aXNpb247CisJdTE2IHdIV0ZlYXR1cmVzOworCisJdTE2IHdPTkZJRGV2RmVhdHVyZXM7CisJdTE2IHdPTkZJT3B0Q29tbWFuZHM7CisJdTE2IHdPTkZJVGltaW5nTW9kZTsKKwl1MTYgd09ORklQZ21DYWNoZVRpbWluZ01vZGU7CisKKwl1MTYgTUxDRGV2aWNlOworCXUxNiB3U3BhcmVTa2lwQnl0ZXM7CisKKwl1OCBuQml0c0luUGFnZU51bWJlcjsKKwl1OCBuQml0c0luUGFnZURhdGFTaXplOworCXU4IG5CaXRzSW5CbG9ja0RhdGFTaXplOworfTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfaW5mb190YWcgRGV2aWNlSW5mbzsKKworLyogQ2FjaGUgaXRlbSBmb3JtYXQgKi8KK3N0cnVjdCBmbGFzaF9jYWNoZV9pdGVtX3RhZyB7CisJdTY0IGFkZHJlc3M7CisJdTE2IHVzZV9jbnQ7CisJdTE2IGNoYW5nZWQ7CisJdTggKmJ1ZjsKK307CisKK3N0cnVjdCBmbGFzaF9jYWNoZV90YWcgeworCXUzMiBjYWNoZV9pdGVtX3NpemU7IC8qIFNpemUgaW4gYnl0ZXMgb2YgZWFjaCBjYWNoZSBpdGVtICovCisJdTE2IHBhZ2VzX3Blcl9pdGVtOyAvKiBIb3cgbWFueSBOQU5EIHBhZ2VzIGluIGVhY2ggY2FjaGUgaXRlbSAqLworCXUxNiBMUlU7IC8qIE5vLiBvZiB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBjYWNoZSBpdGVtICovCisJc3RydWN0IGZsYXNoX2NhY2hlX2l0ZW1fdGFnIGFycmF5W0NBQ0hFX0lURU1fTlVNXTsKK307CisKKy8qCisgKkRhdGEgc3RydWN0dXJlIGZvciBlYWNoIGxpc3Qgbm9kZSBvZiB0aGUgbWFuYWdtZW50IHRhYmxlCisgKiB1c2VkIGZvciB0aGUgTGV2ZWwgMiBDYWNoZS4gRWFjaCBub2RlIG1hcHMgb25lIGxvZ2ljYWwgTkFORCBibG9jay4KKyAqLworc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXUzMiBsb2dpY2FsX2Jsa19udW07IC8qIExvZ2ljYWwgYmxvY2sgbnVtYmVyICovCisJdTMyIHBhZ2VzX2FycmF5W107IC8qIFBhZ2UgbWFwIGFycmF5IG9mIHRoaXMgbG9naWNhbCBibG9jay4KKwkJCSAgICogQXJyYXkgaW5kZXggaXMgdGhlIGxvZ2ljYWwgYmxvY2sgbnVtYmVyLAorCQkJICAgKiBhbmQgZm9yIGV2ZXJ5IGl0ZW0gb2YgdGhpcyBhcnJ5OgorCQkJICAgKiBoaWdoIDE2IGJpdCBpcyBpbmRleCBvZiB0aGUgTDIgY2FjaGUgYmxvY2sgbnVtLAorCQkJICAgKiBsb3cgMTYgYml0IGlzIHRoZSBwaHkgcGFnZSBudW0KKwkJCSAgICogb2YgdGhlIGFib3ZlIEwyIGNhY2hlIGJsb2NrLgorCQkJICAgKiBUaGlzIGFycmF5IHdpbGwgYmUga21hbGxvYyBkdXJpbmcgcnVuIHRpbWUuCisJCQkgICAqLworfTsKKworc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfaW5mbyB7CisJdTMyIGJsa19hcnJheVtCTEtfTlVNX0ZPUl9MMl9DQUNIRV07CisJdTE2IGN1cl9ibGtfaWR4OyAvKiBpZHggdG8gdGhlIHBoeSBibG9jayBudW1iZXIgb2YgY3VycmVudCB1c2luZyAqLworCXUxNiBjdXJfcGFnZV9udW07IC8qIHBhZ2VzIG51bWJlciBvZiBjdXJyZW50IHVzaW5nICovCisJc3RydWN0IHNwZWN0cmFfbDJfY2FjaGVfbGlzdCB0YWJsZTsgLyogRmlyc3Qgbm9kZSBvZiB0aGUgdGFibGUgKi8KK307CisKKyNkZWZpbmUgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUgICAgMQorCisjaWYgUkVTVE9SRV9DQUNIRV9PTl9DRE1BX0NIQUlOX0ZBSUxVUkUKK3N0cnVjdCBmbGFzaF9jYWNoZV9tb2RfaXRlbV90YWcgeworCXU2NCBhZGRyZXNzOworCXU4IGNoYW5nZWQ7Cit9OworCitzdHJ1Y3QgZmxhc2hfY2FjaGVfZGVsdGFfbGlzdF90YWcgeworCXU4IGl0ZW07ICAvKiB1c2VkIGNhY2hlIGl0ZW0gKi8KKwlzdHJ1Y3QgZmxhc2hfY2FjaGVfbW9kX2l0ZW1fdGFnIGNhY2hlOworfTsKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IGZsYXNoX2NhY2hlX3RhZyBDYWNoZTsKKworZXh0ZXJuIHU4ICpidWZfcmVhZF9wYWdlX21haW5fc3BhcmU7CitleHRlcm4gdTggKmJ1Zl93cml0ZV9wYWdlX21haW5fc3BhcmU7CitleHRlcm4gdTggKmJ1Zl9yZWFkX3BhZ2Vfc3BhcmU7CitleHRlcm4gdTggKmJ1Zl9nZXRfYmFkX2Jsb2NrOworZXh0ZXJuIHU4ICpjZG1hX2Rlc2NfYnVmOworZXh0ZXJuIHU4ICptZW1jcF9kZXNjX2J1ZjsKKworLyogc3RydXR1cmUgdXNlZCBmb3IgSW5kZW50ZnlEZXZpY2UgZnVuY3Rpb24gKi8KK3N0cnVjdCBzcGVjdHJhX2luZGVudGZ5X2Rldl90YWcgeworCXUzMiBOdW1CbG9ja3M7CisJdTE2IFBhZ2VzUGVyQmxvY2s7CisJdTE2IFBhZ2VEYXRhU2l6ZTsKKwl1MTYgd0VDQ0J5dGVzUGVyU2VjdG9yOworCXUzMiB3RGF0YUJsb2NrTnVtOworfTsKKworaW50IEdMT0JfRlRMX0ZsYXNoX0luaXQodm9pZCk7CitpbnQgR0xPQl9GVExfRmxhc2hfUmVsZWFzZSh2b2lkKTsKKy8qdm9pZCBHTE9CX0ZUTF9FcmFzZV9GbGFzaCh2b2lkKTsqLworaW50IEdMT0JfRlRMX0Jsb2NrX0VyYXNlKHU2NCBibG9ja19hZGRyKTsKK2ludCBHTE9CX0ZUTF9Jc19CYWRCbG9jayh1MzIgYmxvY2tfbnVtKTsKK2ludCBHTE9CX0ZUTF9JZGVudGlmeURldmljZShzdHJ1Y3Qgc3BlY3RyYV9pbmRlbnRmeV9kZXZfdGFnICpkZXZfZGF0YSk7CitpbnQgR0xPQl9GVExfRXZlbnRfU3RhdHVzKGludCAqKTsKK3UxNiBnbG9iX2Z0bF9leGVjdXRlX2NtZHModm9pZCk7CisKKy8qaW50IEZUTF9SZWFkX0Rpc3R1cmJhbmNlKEFERFJFU1NUWVBFIGR3QmxvY2tBZGRyKTsqLworaW50IEZUTF9SZWFkX0Rpc3R1cmJhbmNlKHUzMiBkd0Jsb2NrQWRkcik7CisKKy8qRmxhc2ggci93IGJhc2VkIG9uIGNhY2hlKi8KK2ludCBHTE9CX0ZUTF9QYWdlX1JlYWQodTggKnJlYWRfZGF0YSwgdTY0IHBhZ2VfYWRkcik7CitpbnQgR0xPQl9GVExfUGFnZV9Xcml0ZSh1OCAqd3JpdGVfZGF0YSwgdTY0IHBhZ2VfYWRkcik7CitpbnQgR0xPQl9GVExfV2Vhcl9MZXZlbGluZyh2b2lkKTsKK2ludCBHTE9CX0ZUTF9GbGFzaF9Gb3JtYXQodm9pZCk7CitpbnQgR0xPQl9GVExfSW5pdCh2b2lkKTsKK2ludCBHTE9CX0ZUTF9GbHVzaF9DYWNoZSh2b2lkKTsKK2ludCBHTE9CX0ZUTF9HYXJiYWdlX0NvbGxlY3Rpb24odm9pZCk7CitpbnQgR0xPQl9GVExfQlRfR2FyYmFnZV9Db2xsZWN0aW9uKHZvaWQpOwordm9pZCBHTE9CX0ZUTF9DYWNoZV9SZWxlYXNlKHZvaWQpOwordTggKmdldF9ibGtfdGFibGVfc3RhcnRfYWRkcih2b2lkKTsKK3U4ICpnZXRfd2Vhcl9sZXZlbGluZ190YWJsZV9zdGFydF9hZGRyKHZvaWQpOwordW5zaWduZWQgbG9uZyBnZXRfYmxrX3RhYmxlX2xlbih2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgZ2V0X3dlYXJfbGV2ZWxpbmdfdGFibGVfbGVuKHZvaWQpOworCisjaWYgREVCVUdfQk5EUlkKK3ZvaWQgZGVidWdfYm91bmRhcnlfbGluZW5vX2Vycm9yKGludCBjaG5sLCBpbnQgbGltaXQsIGludCBubywgaW50IGxpbmVubywKKwkJCQljaGFyICpmaWxlbmFtZSk7CisjZGVmaW5lIGRlYnVnX2JvdW5kYXJ5X2Vycm9yKGNobmwsIGxpbWl0LCBubykgZGVidWdfYm91bmRhcnlfbGluZW5vX2Vycm9yKGNobmwsXAorCQkJCQkJbGltaXQsIG5vLCBfX0xJTkVfXywgX19GSUxFX18pCisjZWxzZQorI2RlZmluZSBkZWJ1Z19ib3VuZGFyeV9lcnJvcihjaG5sLCBsaW1pdCwgbm8pIDsKKyNlbmRpZgorCisjZW5kaWYgLypfRkxBU0hfSU5URVJGQUNFXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2I5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGQuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJzcGVjdHJhc3djb25maWcuaCIKKyNpbmNsdWRlICJmZnNwb3J0LmgiCisjaW5jbHVkZSAiZmZzZGVmcy5oIgorI2luY2x1ZGUgImxsZC5oIgorI2luY2x1ZGUgImxsZF9uYW5kLmgiCisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworI2lmIEZMQVNIX0VNVQkJLyogdmVjdG9yIGFsbCB0aGUgTExEIGNhbGxzIHRvIHRoZSBMTERfRU1VIGNvZGUgKi8KKyNpbmNsdWRlICJsbGRfZW11LmgiCisjaW5jbHVkZSAibGxkX2NkbWEuaCIKKworLyogY29tbW9uIGZ1bmN0aW9uczogKi8KK3UxNiBHTE9CX0xMRF9GbGFzaF9SZXNldCh2b2lkKQoreworCXJldHVybiBlbXVfRmxhc2hfUmVzZXQoKTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfRGV2aWNlX0lEKHZvaWQpCit7CisJcmV0dXJuIGVtdV9SZWFkX0RldmljZV9JRCgpOworfQorCitpbnQgR0xPQl9MTERfRmxhc2hfUmVsZWFzZSh2b2lkKQoreworCXJldHVybiBlbXVfRmxhc2hfUmVsZWFzZSgpOworfQorCit1MTYgR0xPQl9MTERfRmxhc2hfSW5pdCh2b2lkKQoreworCXJldHVybiBlbXVfRmxhc2hfSW5pdCgpOworfQorCit1MTYgR0xPQl9MTERfRXJhc2VfQmxvY2sodTMyIGJsb2NrX2FkZCkKK3sKKwlyZXR1cm4gZW11X0VyYXNlX0Jsb2NrKGJsb2NrX2FkZCk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IFBhZ2UsCisJCQkJdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gZW11X1dyaXRlX1BhZ2VfTWFpbih3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IFBhZ2UsCisJCQkgICAgICAgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gZW11X1JlYWRfUGFnZV9NYWluKHJlYWRfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHU4ICpyZWFkX2RhdGEsCisJCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwlyZXR1cm4gZW11X1JlYWRfUGFnZV9NYWluKHJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssCisJCQkJICAgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIGVtdV9Xcml0ZV9QYWdlX01haW5fU3BhcmUod3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssCisJCQkJICAgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gZW11X1JlYWRfUGFnZV9NYWluX1NwYXJlKHJlYWRfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCSB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBlbXVfV3JpdGVfUGFnZV9TcGFyZSh3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCXUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIGVtdV9SZWFkX1BhZ2VfU3BhcmUocmVhZF9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2ICBHTE9CX0xMRF9HZXRfQmFkX0Jsb2NrKHUzMiBibG9jaykKK3sKKyAgICByZXR1cm4gIGVtdV9HZXRfQmFkX0Jsb2NrKGJsb2NrKTsKK30KKworI2VuZGlmIC8qIEZMQVNIX0VNVSAqLworCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KKyNpZiBGTEFTSF9NVEQJCS8qIHZlY3RvciBhbGwgdGhlIExMRCBjYWxscyB0byB0aGUgTExEX01URCBjb2RlICovCisjaW5jbHVkZSAibGxkX210ZC5oIgorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisKKy8qIGNvbW1vbiBmdW5jdGlvbnM6ICovCit1MTYgR0xPQl9MTERfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwlyZXR1cm4gbXRkX0ZsYXNoX1Jlc2V0KCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX0RldmljZV9JRCh2b2lkKQoreworCXJldHVybiBtdGRfUmVhZF9EZXZpY2VfSUQoKTsKK30KKworaW50IEdMT0JfTExEX0ZsYXNoX1JlbGVhc2Uodm9pZCkKK3sKKwlyZXR1cm4gbXRkX0ZsYXNoX1JlbGVhc2UoKTsKK30KKwordTE2IEdMT0JfTExEX0ZsYXNoX0luaXQodm9pZCkKK3sKKwlyZXR1cm4gbXRkX0ZsYXNoX0luaXQoKTsKK30KKwordTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGQpCit7CisJcmV0dXJuIG10ZF9FcmFzZV9CbG9jayhibG9ja19hZGQpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCXUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIG10ZF9Xcml0ZV9QYWdlX01haW4od3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJICAgICAgIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIG10ZF9SZWFkX1BhZ2VfTWFpbihyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fUG9sbGluZyh1OCAqcmVhZF9kYXRhLAorCQkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIG10ZF9SZWFkX1BhZ2VfTWFpbihyZWFkX2RhdGEsIGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJCSAgICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBtdGRfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHdyaXRlX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLAorCQkJCSAgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIG10ZF9SZWFkX1BhZ2VfTWFpbl9TcGFyZShyZWFkX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQkgdTE2IFBhZ2VDb3VudCkKK3sKKwlyZXR1cm4gbXRkX1dyaXRlX1BhZ2VfU3BhcmUod3JpdGVfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgUGFnZSwKKwkJCQl1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBtdGRfUmVhZF9QYWdlX1NwYXJlKHJlYWRfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiAgR0xPQl9MTERfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisgICAgcmV0dXJuICBtdGRfR2V0X0JhZF9CbG9jayhibG9jayk7Cit9CisKKyNlbmRpZiAvKiBGTEFTSF9NVEQgKi8KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KKyNpZiBGTEFTSF9OQU5ECS8qIHZlY3RvciBhbGwgdGhlIExMRCBjYWxscyB0byB0aGUgTkFORCBjb250cm9sbGVyIGNvZGUgKi8KKyNpbmNsdWRlICJsbGRfbmFuZC5oIgorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisjaW5jbHVkZSAiZmxhc2guaCIKKworLyogY29tbW9uIGZ1bmN0aW9ucyBmb3IgTExEX05BTkQgKi8KK3ZvaWQgR0xPQl9MTERfRUNDX0NvbnRyb2woaW50IGVuYWJsZSkKK3sKKwlOQU5EX0VDQ19DdHJsKGVuYWJsZSk7Cit9CisKKy8qIGNvbW1vbiBmdW5jdGlvbnMgZm9yIExMRF9OQU5EICovCit1MTYgR0xPQl9MTERfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwlyZXR1cm4gTkFORF9GbGFzaF9SZXNldCgpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9EZXZpY2VfSUQodm9pZCkKK3sKKwlyZXR1cm4gTkFORF9SZWFkX0RldmljZV9JRCgpOworfQorCit1MTYgR0xPQl9MTERfVW5sb2NrQXJyYXlBbGwodm9pZCkKK3sKKwlyZXR1cm4gTkFORF9VbmxvY2tBcnJheUFsbCgpOworfQorCit1MTYgR0xPQl9MTERfRmxhc2hfSW5pdCh2b2lkKQoreworCXJldHVybiBOQU5EX0ZsYXNoX0luaXQoKTsKK30KKworaW50IEdMT0JfTExEX0ZsYXNoX1JlbGVhc2Uodm9pZCkKK3sKKwlyZXR1cm4gbmFuZF9yZWxlYXNlX3NwZWN0cmEoKTsKK30KKwordTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGQpCit7CisJcmV0dXJuIE5BTkRfRXJhc2VfQmxvY2soYmxvY2tfYWRkKTsKK30KKworCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCXUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIE5BTkRfV3JpdGVfUGFnZV9NYWluKHdyaXRlX2RhdGEsIGJsb2NrLCBQYWdlLCBQYWdlQ291bnQpOworfQorCit1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCSAgICAgICB1MTYgcGFnZV9jb3VudCkKK3sKKwlpZiAocGFnZV9jb3VudCA9PSAxKSAvKiBVc2luZyBwb2xsaW5nIHRvIGltcHJvdmUgcmVhZCBzcGVlZCAqLworCQlyZXR1cm4gTkFORF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UsIDEpOworCWVsc2UKKwkJcmV0dXJuIE5BTkRfUmVhZF9QYWdlX01haW4ocmVhZF9kYXRhLCBibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7Cit9CisKK3UxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHU4ICpyZWFkX2RhdGEsCisJCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwlyZXR1cm4gTkFORF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHJlYWRfZGF0YSwKKwkJCWJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJCSAgICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCXJldHVybiBOQU5EX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywgdTE2IFBhZ2UsCisJCQkJIHUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIE5BTkRfV3JpdGVfUGFnZV9TcGFyZSh3cml0ZV9kYXRhLCBibG9jaywgUGFnZSwgUGFnZUNvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywKKwkJCQkgICAgIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwlyZXR1cm4gTkFORF9SZWFkX1BhZ2VfTWFpbl9TcGFyZShyZWFkX2RhdGEsIGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBQYWdlLAorCQkJCXUxNiBQYWdlQ291bnQpCit7CisJcmV0dXJuIE5BTkRfUmVhZF9QYWdlX1NwYXJlKHJlYWRfZGF0YSwgYmxvY2ssIFBhZ2UsIFBhZ2VDb3VudCk7Cit9CisKK3UxNiAgR0xPQl9MTERfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisJcmV0dXJuICBOQU5EX0dldF9CYWRfQmxvY2soYmxvY2spOworfQorCisjaWYgQ01EX0RNQQordTE2IEdMT0JfTExEX0V2ZW50X1N0YXR1cyh2b2lkKQoreworCXJldHVybiBDRE1BX0V2ZW50X1N0YXR1cygpOworfQorCit1MTYgZ2xvYl9sbGRfZXhlY3V0ZV9jbWRzKHZvaWQpCit7CisJcmV0dXJuIENETUFfRXhlY3V0ZV9DTURzKCk7Cit9CisKK3UxNiBHTE9CX0xMRF9NZW1Db3B5X0NNRCh1OCAqZGVzdCwgdTggKnNyYywKKwkJCXUzMiBCeXRlQ291bnQsIHUxNiBmbGFnKQoreworCS8qIFJlcGxhY2UgdGhlIGhhcmR3YXJlIG1lbWNvcHkgd2l0aCBzb2Z0d2FyZSBtZW1jcHkgZnVuY3Rpb24gKi8KKwlpZiAoQ0RNQV9FeGVjdXRlX0NNRHMoKSkKKwkJcmV0dXJuIEZBSUw7CisJbWVtY3B5KGRlc3QsIHNyYywgQnl0ZUNvdW50KTsKKwlyZXR1cm4gUEFTUzsKKworCS8qIHJldHVybiBDRE1BX01lbUNvcHlfQ01EKGRlc3QsIHNyYywgQnl0ZUNvdW50LCBmbGFnKTsgKi8KK30KKwordTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrX2NkbWEodTMyIGJsb2NrLCB1MTYgZmxhZ3MpCit7CisJcmV0dXJuIENETUFfRGF0YV9DTUQoRVJBU0VfQ01ELCAwLCBibG9jaywgMCwgMCwgZmxhZ3MpOworfQorCit1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX2NkbWEodTggKmRhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBjb3VudCkKK3sKKwlyZXR1cm4gQ0RNQV9EYXRhX0NNRChXUklURV9NQUlOX0NNRCwgZGF0YSwgYmxvY2ssIHBhZ2UsIGNvdW50LCAwKTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX2NkbWEodTggKmRhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IGNvdW50LCB1MTYgZmxhZ3MpCit7CisJcmV0dXJuIENETUFfRGF0YV9DTUQoUkVBRF9NQUlOX0NNRCwgZGF0YSwgYmxvY2ssIHBhZ2UsIGNvdW50LCBmbGFncyk7Cit9CisKK3UxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX01haW5fU3BhcmVfY2RtYSh1OCAqZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQkJdTE2IGNvdW50LCB1MTYgZmxhZ3MpCit7CisJcmV0dXJuIENETUFfRGF0YV9DTUQoV1JJVEVfTUFJTl9TUEFSRV9DTUQsCisJCQlkYXRhLCBibG9jaywgcGFnZSwgY291bnQsIGZsYWdzKTsKK30KKwordTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1NwYXJlX2NkbWEodTggKmRhdGEsCisJCQkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IGNvdW50KQoreworCXJldHVybiBDRE1BX0RhdGFfQ01EKFJFQURfTUFJTl9TUEFSRV9DTUQsIGRhdGEsIGJsb2NrLCBwYWdlLCBjb3VudCwKKwkJCUxMRF9DTURfRkxBR19NT0RFX0NETUEpOworfQorCisjZW5kaWYgLyogQ01EX0RNQSAqLworI2VuZGlmIC8qIEZMQVNIX05BTkQgKi8KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCisKKy8qIGVuZCBvZiBMTEQuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzczOGUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkLmgKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisKKworI2lmbmRlZiBfTExEXworI2RlZmluZSBfTExEXworCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2luY2x1ZGUgInNwZWN0cmFzd2NvbmZpZy5oIgorI2luY2x1ZGUgImZsYXNoLmgiCisKKyNkZWZpbmUgR09PRF9CTE9DSyAwCisjZGVmaW5lIERFRkVDVElWRV9CTE9DSyAxCisjZGVmaW5lIFJFQURfRVJST1IgMgorCisjZGVmaW5lIENMS19YICA1CisjZGVmaW5lIENMS19NVUxUSSA0CisKKy8qIFR5cGVkZWZzICovCisKKy8qICBwcm90b3R5cGVzOiBBUEkgZm9yIExMRCAqLworLyogQ3VycmVudGx5LCBXcml0ZV9QYWdlX01haW4KKyAqIAkJCSAgTWVtQ29weQorICogCQkJICBSZWFkX1BhZ2VfTWFpbl9TcGFyZQorICogZG8gbm90IGhhdmUgZmxhZyBiZWNhdXNlIHRoZXkgd2VyZSBub3QgaW1wbGVtZW50ZWQgcHJpb3IgdG8gdGhpcworICogVGhleSBhcmUgbm90IGJlaW5nIGFkZGVkIHRvIGtlZXAgY2hhbmdlcyB0byBhIG1pbmltdW0gZm9yIG5vdy4KKyAqIEN1cnJlbnRseSwgdGhleSBhcmUgbm90IHJlcXVpcmVkIChvbmx5IHJlcWQgZm9yIFdyX1BfTV9TLikKKyAqIExhdGVyIG9uLCB0aGVzZSBORUVEIHRvIGJlIGNoYW5nZWQuCisgKi8KKworZXh0ZXJuIHZvaWQgR0xPQl9MTERfRUNDX0NvbnRyb2woaW50IGVuYWJsZSk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfRmxhc2hfUmVzZXQodm9pZCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfUmVhZF9EZXZpY2VfSUQodm9pZCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfVW5sb2NrQXJyYXlBbGwodm9pZCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfRmxhc2hfSW5pdCh2b2lkKTsKKworZXh0ZXJuIGludCBHTE9CX0xMRF9GbGFzaF9SZWxlYXNlKHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9SZWFkX1BhZ2VfTWFpbl9Qb2xsaW5nKHU4ICpyZWFkX2RhdGEsCisJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKKworZXh0ZXJuIHUxNiBHTE9CX0xMRF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLAorCXUzMiBibG9jaywgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsCisJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLAorCXUzMiBibG9jaywgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworCitleHRlcm4gdTE2ICBHTE9CX0xMRF9HZXRfQmFkX0Jsb2NrKHUzMiBibG9jayk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfRXZlbnRfU3RhdHVzKHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX01lbUNvcHlfQ01EKHU4ICpkZXN0LCB1OCAqc3JjLCB1MzIgQnl0ZUNvdW50LCB1MTYgZmxhZyk7CisKK2V4dGVybiB1MTYgZ2xvYl9sbGRfZXhlY3V0ZV9jbWRzKHZvaWQpOworCitleHRlcm4gdTE2IEdMT0JfTExEX0VyYXNlX0Jsb2NrX2NkbWEodTMyIGJsb2NrLCB1MTYgZmxhZ3MpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1dyaXRlX1BhZ2VfTWFpbl9jZG1hKHU4ICpkYXRhLAorCXUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBjb3VudCk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfUmVhZF9QYWdlX01haW5fY2RtYSh1OCAqZGF0YSwKKwl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgY291bnQsIHUxNiBmbGFncyk7CisKK2V4dGVybiB1MTYgR0xPQl9MTERfV3JpdGVfUGFnZV9NYWluX1NwYXJlX2NkbWEodTggKmRhdGEsCisJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IGNvdW50LCB1MTYgZmxhZ3MpOworCitleHRlcm4gdTE2IEdMT0JfTExEX1JlYWRfUGFnZV9NYWluX1NwYXJlX2NkbWEodTggKmRhdGEsCisJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IGNvdW50KTsKKworI2RlZmluZSBMTERfQ01EX0ZMQUdfT1JERVJfQkVGT1JFX1JFU1QJCSgweDEpCisjZGVmaW5lIExMRF9DTURfRkxBR19NT0RFX0NETUEJCQkoMHg4KQorCisKKyNlbmRpZiAvKl9MTERfICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2NkbWEuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9jZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlNzYxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9jZG1hLmMKQEAgLTAsMCArMSw5MTAgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJzcGVjdHJhc3djb25maWcuaCIKKyNpbmNsdWRlICJsbGQuaCIKKyNpbmNsdWRlICJsbGRfbmFuZC5oIgorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisjaW5jbHVkZSAibGxkX2VtdS5oIgorI2luY2x1ZGUgImZsYXNoLmgiCisjaW5jbHVkZSAibmFuZF9yZWdzLmgiCisKKyNkZWZpbmUgTUFYX1BFTkRJTkdfQ01EUyAgICA0CisjZGVmaW5lIE1PREVfMDIgICAgICAgICAgICAgKDB4MiA8PCAyNikKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfRGF0YV9DbWQKKyogSW5wdXRzOiAgIGNtZCBjb2RlIChhbGlnbmVkIGZvciBodykKKyogICAgICAgICAgICAgICBkYXRhOiBwb2ludGVyIHRvIHNvdXJjZSBvciBkZXN0aW5hdGlvbgorKiAgICAgICAgICAgICAgIGJsb2NrOiBibG9jayBhZGRyZXNzCisqICAgICAgICAgICAgICAgcGFnZTogcGFnZSBhZGRyZXNzCisqICAgICAgICAgICAgICAgbnVtOiBudW0gcGFnZXMgdG8gdHJhbnNmZXIKKyogT3V0cHV0czogICAgICBQQVNTCisqIERlc2NyaXB0aW9uOiAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgcGFyYW1ldGVycyBhbmQgcHV0cyB0aGVtCisqICAgICAgICAgICAgICAgICAgIGludG8gdGhlICJwZW5kaW5nIGNvbW1hbmRzIiBhcnJheS4KKyogICAgICAgICAgICAgICBJdCBkb2VzIG5vdCBwYXJzZSBvciB2YWxpZGF0ZSB0aGUgcGFyYW1ldGVycy4KKyogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXggaXMgc2FtZSBhcyB0aGUgdGFnLgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBDRE1BX0RhdGFfQ01EKHU4IGNtZCwgdTggKmRhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBudW0sIHUxNiBmbGFncykKK3sKKwl1OCBiYW5rOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoMCA9PSBjbWQpCisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkiJXMsIExpbmUgJWQsIElsbGVnYWwgY21kICgwKVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKworCS8qIElmIGEgY29tbWFuZCBvZiBhbm90aGVyIGJhbmsgY29tZXMsIHRoZW4gZmlyc3QgZXhlY3V0ZSAqLworCS8qIHBlbmRpbmcgY29tbWFuZHMgb2YgdGhlIGN1cnJlbnQgYmFuaywgdGhlbiBzZXQgdGhlIG5ldyAqLworCS8qIGJhbmsgYXMgY3VycmVudCBiYW5rICovCisJYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCWlmIChiYW5rICE9IGluZm8uZmxhc2hfYmFuaykgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIldpbGwgYWNjZXNzIG5ldyBiYW5rLiBvbGQgYmFuazogJWQsIG5ldyBiYW5rOiAlZFxuIiwKKwkJCWluZm8uZmxhc2hfYmFuaywgYmFuayk7CisJCWlmIChDRE1BX0V4ZWN1dGVfQ01EcygpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNETUFfRXhlY3V0ZV9DTURzIGZhaWwhXG4iKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCWluZm8uZmxhc2hfYmFuayA9IGJhbms7CisJfQorCisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uQ01EID0gY21kOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkRhdGFBZGRyID0gZGF0YTsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5CbG9jayA9IGJsb2NrOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLlBhZ2UgPSBwYWdlOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLlBhZ2VDb3VudCA9IG51bTsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5EYXRhRGVzdEFkZHIgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkRhdGFTcmNBZGRyID0gMDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5NZW1Db3B5Qnl0ZUNudCA9IDA7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uRmxhZ3MgPSBmbGFnczsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5TdGF0dXMgPSAweEIwQjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXUklURV9NQUlOX1NQQVJFX0NNRDoKKwkJQ29udl9NYWluX1NwYXJlX0RhdGFfTG9nMlBoeV9Gb3JtYXQoZGF0YSwgbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9TUEFSRV9DTUQ6CisJCUNvbnZfU3BhcmVfRGF0YV9Mb2cyUGh5X0Zvcm1hdChkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaW5mby5wY21kc19udW0rKzsKKworCWlmIChpbmZvLnBjbWRzX251bSA+PSBNQVhfUEVORElOR19DTURTKSB7CisJCWlmIChDRE1BX0V4ZWN1dGVfQ01EcygpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNETUFfRXhlY3V0ZV9DTURzIGZhaWwhXG4iKTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfTWVtQ29weV9DTUQKKyogSW5wdXRzOiAgICAgICBkZXN0OiBwb2ludGVyIHRvIGRlc3RpbmF0aW9uCisqICAgICAgICAgICAgICAgc3JjOiAgcG9pbnRlciB0byBzb3VyY2UKKyogICAgICAgICAgICAgICBjb3VudDogbnVtIGJ5dGVzIHRvIHRyYW5zZmVyCisqIE91dHB1dHM6ICAgICAgUEFTUworKiBEZXNjcmlwdGlvbjogIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIHBhcmFtZXRlcnMgYW5kIHB1dHMgdGhlbQorKiAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSAicGVuZGluZyBjb21tYW5kcyIgYXJyYXkuCisqICAgICAgICAgICAgICAgSXQgZG9lcyBub3QgcGFyc2Ugb3IgdmFsaWRhdGUgdGhlIHBhcmFtZXRlcnMuCisqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4IGlzIHNhbWUgYXMgdGhlIHRhZy4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgQ0RNQV9NZW1Db3B5X0NNRCh1OCAqZGVzdCwgdTggKnNyYywgdTMyIGJ5dGVfY250LCB1MTYgZmxhZ3MpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5DTUQgPSBNRU1DT1BZX0NNRDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5EYXRhQWRkciA9IDA7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uQmxvY2sgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLlBhZ2UgPSAwOworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLlBhZ2VDb3VudCA9IDA7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uRGF0YURlc3RBZGRyID0gZGVzdDsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5EYXRhU3JjQWRkciA9IHNyYzsKKwlpbmZvLnBjbWRzW2luZm8ucGNtZHNfbnVtXS5NZW1Db3B5Qnl0ZUNudCA9IGJ5dGVfY250OworCWluZm8ucGNtZHNbaW5mby5wY21kc19udW1dLkZsYWdzID0gZmxhZ3M7CisJaW5mby5wY21kc1tpbmZvLnBjbWRzX251bV0uU3RhdHVzID0gMHhCMEI7CisKKwlpbmZvLnBjbWRzX251bSsrOworCisJaWYgKGluZm8ucGNtZHNfbnVtID49IE1BWF9QRU5ESU5HX0NNRFMpIHsKKwkJaWYgKENETUFfRXhlY3V0ZV9DTURzKCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ0RNQV9FeGVjdXRlX0NNRHMgZmFpbCFcbiIpOworCQkJcmV0dXJuIEZBSUw7CisJCX0KKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworI2lmIDAKKy8qIFByaW50cyB0aGUgUGVuZGluZ0NNRHMgYXJyYXkgKi8KK3ZvaWQgcHJpbnRfcGVuZGluZ19jbWRzKHZvaWQpCit7CisJdTE2IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLnBjbWRzX251bTsgaSsrKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiXG5pOiAlZFxuIiwgaSk7CisJCXN3aXRjaCAoaW5mby5wY21kc1tpXS5DTUQpIHsKKwkJY2FzZSBFUkFTRV9DTUQ6CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiRXJhc2UgQ29tbWFuZCAoMHgleClcbiIsCisJCQkJaW5mby5wY21kc1tpXS5DTUQpOworCQkJYnJlYWs7CisJCWNhc2UgV1JJVEVfTUFJTl9DTUQ6CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiV3JpdGUgTWFpbiBDb21tYW5kICgweCV4KVxuIiwKKwkJCQlpbmZvLnBjbWRzW2ldLkNNRCk7CisJCQlicmVhazsKKwkJY2FzZSBXUklURV9NQUlOX1NQQVJFX0NNRDoKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJCSJXcml0ZSBNYWluIFNwYXJlIENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQljYXNlIFJFQURfTUFJTl9TUEFSRV9DTUQ6CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiUmVhZCBNYWluIFNwYXJlIENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQljYXNlIFJFQURfTUFJTl9DTUQ6CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCQkiUmVhZCBNYWluIENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQljYXNlIE1FTUNPUFlfQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIk1lbWNvcHkgQ29tbWFuZCAoMHgleClcbiIsCisJCQkJaW5mby5wY21kc1tpXS5DTUQpOworCQkJYnJlYWs7CisJCWNhc2UgRFVNTVlfQ01EOgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIkR1bW15IENvbW1hbmQgKDB4JXgpXG4iLAorCQkJCWluZm8ucGNtZHNbaV0uQ01EKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkJIklsbGVnYWwgQ29tbWFuZCAoMHgleClcbiIsCisJCQkJaW5mby5wY21kc1tpXS5DTUQpOworCQkJYnJlYWs7CisJCX0KKworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRhdGFBZGRyOiAweCV4XG4iLAorCQkJKHUzMilpbmZvLnBjbWRzW2ldLkRhdGFBZGRyKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCbG9jazogJWRcbiIsCisJCQlpbmZvLnBjbWRzW2ldLkJsb2NrKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQYWdlOiAlZFxuIiwKKwkJCWluZm8ucGNtZHNbaV0uUGFnZSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZUNvdW50OiAlZFxuIiwKKwkJCWluZm8ucGNtZHNbaV0uUGFnZUNvdW50KTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEYXRhRGVzdEFkZHI6IDB4JXhcbiIsCisJCQkodTMyKWluZm8ucGNtZHNbaV0uRGF0YURlc3RBZGRyKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEYXRhU3JjQWRkcjogMHgleFxuIiwKKwkJCSh1MzIpaW5mby5wY21kc1tpXS5EYXRhU3JjQWRkcik7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiTWVtQ29weUJ5dGVDbnQ6ICVkXG4iLAorCQkJaW5mby5wY21kc1tpXS5NZW1Db3B5Qnl0ZUNudCk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRmxhZ3M6IDB4JXhcbiIsCisJCQlpbmZvLnBjbWRzW2ldLkZsYWdzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJTdGF0dXM6IDB4JXhcbiIsCisJCQlpbmZvLnBjbWRzW2ldLlN0YXR1cyk7CisJfQorfQorCisvKiBQcmludCB0aGUgQ0RNQSBkZXNjcmlwdG9ycyAqLwordm9pZCBwcmludF9jZG1hX2Rlc2NyaXB0b3JzKHZvaWQpCit7CisJc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqcGM7CisJaW50IGk7CisKKwlwYyA9IChzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICopaW5mby5jZG1hX2Rlc2NfYnVmOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJcbldpbGwgZHVtcCBjZG1hIGRlc2NyaXB0b3JzOlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5jZG1hX251bTsgaSsrKSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiXG5pOiAlZFxuIiwgaSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIk54dFBvaW50ZXJIaTogMHgleCwgTnh0UG9pbnRlckxvOiAweCV4XG4iLAorCQkJcGNbaV0uTnh0UG9pbnRlckhpLCBwY1tpXS5OeHRQb2ludGVyTG8pOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJGbGFzaFBvaW50ZXJIaTogMHgleCwgRmxhc2hQb2ludGVyTG86IDB4JXhcbiIsCisJCQlwY1tpXS5GbGFzaFBvaW50ZXJIaSwgcGNbaV0uRmxhc2hQb2ludGVyTG8pOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkNvbW1hbmRUeXBlOiAweCV4XG4iLAorCQkJcGNbaV0uQ29tbWFuZFR5cGUpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJNZW1BZGRySGk6IDB4JXgsIE1lbUFkZHJMbzogMHgleFxuIiwKKwkJCXBjW2ldLk1lbUFkZHJIaSwgcGNbaV0uTWVtQWRkckxvKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJDb21tYW5kRmxhZ3M6IDB4JXhcbiIsCisJCQlwY1tpXS5Db21tYW5kRmxhZ3MpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkNoYW5uZWw6ICVkLCBTdGF0dXM6IDB4JXhcbiIsCisJCQlwY1tpXS5DaGFubmVsLCBwY1tpXS5TdGF0dXMpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJNZW1Db3B5UG9pbnRlckhpOiAweCV4LCBNZW1Db3B5UG9pbnRlckxvOiAweCV4XG4iLAorCQkJcGNbaV0uTWVtQ29weVBvaW50ZXJIaSwgcGNbaV0uTWVtQ29weVBvaW50ZXJMbyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIlJlc2VydmVkMTI6IDB4JXgsIFJlc2VydmVkMTM6IDB4JXgsICIKKwkJCSJSZXNlcnZlZDE0OiAweCV4LCBwY21kOiAlZFxuIiwKKwkJCXBjW2ldLlJlc2VydmVkMTIsIHBjW2ldLlJlc2VydmVkMTMsCisJCQlwY1tpXS5SZXNlcnZlZDE0LCBwY1tpXS5wY21kKTsKKwl9Cit9CisKKy8qIFByaW50IHRoZSBNZW1vcnkgY29weSBkZXNjcmlwdG9ycyAqLworc3RhdGljIHZvaWQgcHJpbnRfbWVtY3BfZGVzY3JpcHRvcnModm9pZCkKK3sKKwlzdHJ1Y3QgbWVtY3B5X2Rlc2NyaXB0b3IgKnBtOworCWludCBpOworCisJcG0gPSAoc3RydWN0IG1lbWNweV9kZXNjcmlwdG9yICopaW5mby5tZW1jcF9kZXNjX2J1ZjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiXG5XaWxsIGR1bXAgbWVtX2NweSBkZXNjcmlwdG9yczpcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGluZm8uY2RtYV9udW07IGkrKykgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlxuaTogJWRcbiIsIGkpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJOeHRQb2ludGVySGk6IDB4JXgsIE54dFBvaW50ZXJMbzogMHgleFxuIiwKKwkJCXBtW2ldLk54dFBvaW50ZXJIaSwgcG1baV0uTnh0UG9pbnRlckxvKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCQkiU3JjQWRkckhpOiAweCV4LCBTcmNBZGRyTG86IDB4JXhcbiIsCisJCQlwbVtpXS5TcmNBZGRySGksIHBtW2ldLlNyY0FkZHJMbyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIkRlc3RBZGRySGk6IDB4JXgsIERlc3RBZGRyTG86IDB4JXhcbiIsCisJCQlwbVtpXS5EZXN0QWRkckhpLCBwbVtpXS5EZXN0QWRkckxvKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJYZmVyU2l6ZTogJWRcbiIsCisJCQlwbVtpXS5YZmVyU2l6ZSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiTWVtQ29weUZsYWdzOiAweCV4XG4iLAorCQkJcG1baV0uTWVtQ29weUZsYWdzKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJNZW1Db3B5U3RhdHVzOiAlZFxuIiwKKwkJCXBtW2ldLk1lbUNvcHlTdGF0dXMpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgInJlc2VydmVkOTogMHgleFxuIiwKKwkJCXBtW2ldLnJlc2VydmVkOSk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAicmVzZXJ2ZWQxMDogMHgleFxuIiwKKwkJCXBtW2ldLnJlc2VydmVkMTApOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgInJlc2VydmVkMTE6IDB4JXhcbiIsCisJCQlwbVtpXS5yZXNlcnZlZDExKTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJyZXNlcnZlZDEyOiAweCV4XG4iLAorCQkJcG1baV0ucmVzZXJ2ZWQxMik7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAicmVzZXJ2ZWQxMzogMHgleFxuIiwKKwkJCXBtW2ldLnJlc2VydmVkMTMpOworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgInJlc2VydmVkMTQ6IDB4JXhcbiIsCisJCQlwbVtpXS5yZXNlcnZlZDE0KTsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJyZXNlcnZlZDE1OiAweCV4XG4iLAorCQkJcG1baV0ucmVzZXJ2ZWQxNSk7CisJfQorfQorI2VuZGlmCisKKy8qIFJlc2V0IGNkbWFfZGVzY3JpcHRvciBjaGFpbiB0byAwICovCitzdGF0aWMgdm9pZCByZXNldF9jZG1hX2Rlc2MoaW50IGkpCit7CisJc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqcHRyOworCisJQlVHX09OKGkgPj0gTUFYX0RFU0NTKTsKKworCXB0ciA9IChzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICopaW5mby5jZG1hX2Rlc2NfYnVmOworCisJcHRyW2ldLk54dFBvaW50ZXJIaSA9IDA7CisJcHRyW2ldLk54dFBvaW50ZXJMbyA9IDA7CisJcHRyW2ldLkZsYXNoUG9pbnRlckhpID0gMDsKKwlwdHJbaV0uRmxhc2hQb2ludGVyTG8gPSAwOworCXB0cltpXS5Db21tYW5kVHlwZSA9IDA7CisJcHRyW2ldLk1lbUFkZHJIaSA9IDA7CisJcHRyW2ldLk1lbUFkZHJMbyA9IDA7CisJcHRyW2ldLkNvbW1hbmRGbGFncyA9IDA7CisJcHRyW2ldLkNoYW5uZWwgPSAwOworCXB0cltpXS5TdGF0dXMgPSAwOworCXB0cltpXS5NZW1Db3B5UG9pbnRlckhpID0gMDsKKwlwdHJbaV0uTWVtQ29weVBvaW50ZXJMbyA9IDA7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBDRE1BX1VwZGF0ZUV2ZW50U3RhdHVzCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIG5vbmUKKyogRGVzY3JpcHRpb246ICBUaGlzIGZ1bmN0aW9uIHVwZGF0ZSB0aGUgZXZlbnQgc3RhdHVzIG9mIGFsbCB0aGUgY2hhbm5lbHMKKyogICAgICAgICAgICAgICB3aGVuIGFuIGVycm9yIGNvbmRpdGlvbiBpcyByZXBvcnRlZC4KKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordm9pZCBDRE1BX1VwZGF0ZUV2ZW50U3RhdHVzKHZvaWQpCit7CisJaW50IGksIGosIGFjdGl2ZV9jaGFuOworCXN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKnB0cjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJcHRyID0gKHN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKilpbmZvLmNkbWFfZGVzY19idWY7CisKKwlmb3IgKGogPSAwOyBqIDwgaW5mby5jZG1hX251bTsgaisrKSB7CisJCS8qIENoZWNrIGZvciB0aGUgZGVzY3JpcHRvciB3aXRoIGZhaWx1cmUgKi8KKwkJaWYgKChwdHJbal0uU3RhdHVzICYgQ01EX0RNQV9ERVNDX0ZBSUwpKQorCQkJYnJlYWs7CisKKwl9CisKKwkvKiBBbGwgdGhlIHByZXZpb3VzIGNtZCdzIHN0YXR1cyBmb3IgdGhpcyBjaGFubmVsIG11c3QgYmUgZ29vZCAqLworCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKKwkJaWYgKHB0cltpXS5wY21kICE9IDB4ZmYpCisJCQlpbmZvLnBjbWRzW3B0cltpXS5wY21kXS5TdGF0dXMgPSBDTURfUEFTUzsKKwl9CisKKwkvKiBBYm9ydCB0aGUgY2hhbm5lbCB3aXRoIHR5cGUgMCByZXNldCBjb21tYW5kLiBJdCByZXNldHMgdGhlICovCisJLyogc2VsZWN0ZWQgY2hhbm5lbCBhZnRlciB0aGUgZGVzY3JpcHRvciBjb21wbGV0ZXMgdGhlIGZsYXNoICovCisJLyogb3BlcmF0aW9uIGFuZCBzdGF0dXMgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIGRlc2NyaXB0b3IuICovCisJLyogTWVtb3J5IENvcHkgYW5kIFN5bmMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGVzY3JpcHRvciB3aWxsICovCisJLyogbm90IGJlIGV4ZWN1dGVkICovCisJYWN0aXZlX2NoYW4gPSBpb3JlYWQzMihGbGFzaFJlZyArIENITkxfQUNUSVZFKTsKKwlpZiAoKGFjdGl2ZV9jaGFuICYgKDEgPDwgaW5mby5mbGFzaF9iYW5rKSkgPT0gKDEgPDwgaW5mby5mbGFzaF9iYW5rKSkgeworCQlpb3dyaXRlMzIoTU9ERV8wMiB8ICgwIDw8IDQpLCBGbGFzaE1lbSk7IC8qIFR5cGUgMCByZXNldCAqLworCQlpb3dyaXRlMzIoKDB4RiA8PCA0KSB8IGluZm8uZmxhc2hfYmFuaywgRmxhc2hNZW0gKyAweDEwKTsKKwl9IGVsc2UgeyAvKiBTaG91bGQgbm90IHJlYWNoZWQgaGVyZSAqLworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yISBVc2VkIGJhbmsgaXMgbm90IHNldCBpbiIKKwkJCSIgcmVnIENITkxfQUNUSVZFXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNkbWFfdHJhbnModTE2IGNoYW4pCit7CisJdTMyIGFkZHI7CisKKwlhZGRyID0gaW5mby5jZG1hX2Rlc2M7CisKKwlpb3dyaXRlMzIoTU9ERV8xMCB8IChjaGFuIDw8IDI0KSwgRmxhc2hNZW0pOworCWlvd3JpdGUzMigoMSA8PCA3KSB8IGNoYW4sIEZsYXNoTWVtICsgMHgxMCk7CisKKwlpb3dyaXRlMzIoTU9ERV8xMCB8IChjaGFuIDw8IDI0KSB8ICgoMHgwRkZGRiAmIChhZGRyID4+IDE2KSkgPDwgOCksCisJCUZsYXNoTWVtKTsKKwlpb3dyaXRlMzIoKDEgPDwgNykgfCAoMSA8PCA0KSB8IDAsIEZsYXNoTWVtICsgMHgxMCk7CisKKwlpb3dyaXRlMzIoTU9ERV8xMCB8IChjaGFuIDw8IDI0KSB8ICgoMHgwRkZGRiAmIGFkZHIpIDw8IDgpLCBGbGFzaE1lbSk7CisJaW93cml0ZTMyKCgxIDw8IDcpIHwgKDEgPDwgNSkgfCAwLCBGbGFzaE1lbSArIDB4MTApOworCisJaW93cml0ZTMyKE1PREVfMTAgfCAoY2hhbiA8PCAyNCksIEZsYXNoTWVtKTsKKwlpb3dyaXRlMzIoKDEgPDwgNykgfCAoMSA8PCA1KSB8ICgxIDw8IDQpIHwgMCwgRmxhc2hNZW0gKyAweDEwKTsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfRXhlY3V0ZV9DTURzIChmb3IgdXNlIHdpdGggQ01EX0RNQSkKKyogSW5wdXRzOiAgICAgICB0YWdfY291bnQ6ICB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgY21kcyB0byBkbworKiBPdXRwdXRzOiAgICAgIFBBU1MvRkFJTAorKiBEZXNjcmlwdGlvbjogIEJ1aWxkIHRoZSBTRE1BIGNoYWluKHMpIGJ5IG1ha2luZyBvbmUgQ01ELURNQSBkZXNjcmlwdG9yCisqICAgICAgICAgICAgICAgZm9yIGVhY2ggcGVuZGluZyBjb21tYW5kLCBzdGFydCB0aGUgQ0RNQSBlbmdpbmUsIGFuZCByZXR1cm4uCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IENETUFfRXhlY3V0ZV9DTURzKHZvaWQpCit7CisJaW50IGksIHJldDsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBwdHI7CisJZG1hX2FkZHJfdCBtYXBfYWRkciwgbmV4dF9wdHI7CisJdTE2IHN0YXR1cyA9IFBBU1M7CisJdTE2IHRtcF9jOworCXN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgKnBjOworCXN0cnVjdCBtZW1jcHlfZGVzY3JpcHRvciAqcG07CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCS8qIE5vIHBlbmRpbmcgY21kcyB0byBleGVjdXRlLCBqdXN0IGV4aXQgKi8KKwlpZiAoMCA9PSBpbmZvLnBjbWRzX251bSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwKKwkJCSJObyBwZW5kaW5nIGNtZHMgdG8gZXhlY3V0ZS4gSnVzdCBleGl0LlxuIik7CisJCXJldHVybiBQQVNTOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfREVTQ1M7IGkrKykKKwkJcmVzZXRfY2RtYV9kZXNjKGkpOworCisJcGMgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKwlwbSA9IChzdHJ1Y3QgbWVtY3B5X2Rlc2NyaXB0b3IgKilpbmZvLm1lbWNwX2Rlc2NfYnVmOworCisJaW5mby5jZG1hX2Rlc2MgPSB2aXJ0X3RvX2J1cyhpbmZvLmNkbWFfZGVzY19idWYpOworCWluZm8ubWVtY3BfZGVzYyA9IHZpcnRfdG9fYnVzKGluZm8ubWVtY3BfZGVzY19idWYpOworCW5leHRfcHRyID0gaW5mby5jZG1hX2Rlc2M7CisJaW5mby5jZG1hX251bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby5wY21kc19udW07IGkrKykgeworCQlpZiAoaW5mby5wY21kc1tpXS5CbG9jayA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykgeworCQkJaW5mby5wY21kc1tpXS5TdGF0dXMgPSBDTURfTk9UX0RPTkU7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5leHRfcHRyICs9IHNpemVvZihzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yKTsKKwkJcGNbaW5mby5jZG1hX251bV0uTnh0UG9pbnRlckhpID0gbmV4dF9wdHIgPj4gMTY7CisJCXBjW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJMbyA9IG5leHRfcHRyICYgMHhmZmZmOworCisJCS8qIFVzZSB0aGUgQmxvY2sgb2Zmc2V0IHdpdGhpbiBhIGJhbmsgKi8KKwkJdG1wX2MgPSBpbmZvLnBjbWRzW2ldLkJsb2NrIC8KKwkJCShEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKwkJZmxhc2hfYWRkID0gKHU2NCkoaW5mby5wY21kc1tpXS5CbG9jayAtIHRtcF9jICoKKwkJCShEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkgKgorCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCQkodTY0KShpbmZvLnBjbWRzW2ldLlBhZ2UpICoKKwkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKworCQlwdHIgPSBNT0RFXzEwIHwgKGluZm8uZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKHUzMilHTE9CX3U2NF9EaXYoZmxhc2hfYWRkLAorCQkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckhpID0gcHRyID4+IDE2OworCQlwY1tpbmZvLmNkbWFfbnVtXS5GbGFzaFBvaW50ZXJMbyA9IHB0ciAmIDB4ZmZmZjsKKworCQlpZiAoKGluZm8ucGNtZHNbaV0uQ01EID09IFdSSVRFX01BSU5fU1BBUkVfQ01EKSB8fAorCQkJKGluZm8ucGNtZHNbaV0uQ01EID09IFJFQURfTUFJTl9TUEFSRV9DTUQpKSB7CisJCQkvKiBEZXNjcmlwdG9yIHRvIHNldCBNYWluK1NwYXJlIEFjY2VzcyBNb2RlICovCisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9IDB4NDM7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckhpID0gMDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJMbyA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5DaGFubmVsID0gMDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLlN0YXR1cyA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5wY21kID0gaTsKKworCQkJaW5mby5jZG1hX251bSsrOworCQkJQlVHX09OKGluZm8uY2RtYV9udW0gPj0gTUFYX0RFU0NTKTsKKworCQkJcmVzZXRfY2RtYV9kZXNjKGluZm8uY2RtYV9udW0pOworCQkJbmV4dF9wdHIgKz0gc2l6ZW9mKHN0cnVjdCBjZG1hX2Rlc2NyaXB0b3IpOworCQkJcGNbaW5mby5jZG1hX251bV0uTnh0UG9pbnRlckhpID0gbmV4dF9wdHIgPj4gMTY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5OeHRQb2ludGVyTG8gPSBuZXh0X3B0ciAmIDB4ZmZmZjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckhpID0gcHRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uRmxhc2hQb2ludGVyTG8gPSBwdHIgJiAweGZmZmY7CisJCX0KKworCQlzd2l0Y2ggKGluZm8ucGNtZHNbaV0uQ01EKSB7CisJCWNhc2UgRVJBU0VfQ01EOgorCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPSAxOworCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZEZsYWdzID0KKwkJCQkoMCA8PCAxMCkgfCAoMSA8PCA5KSB8ICgwIDw8IDgpIHwgMHg0MDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRyTG8gPSAwOworCQkJYnJlYWs7CisKKwkJY2FzZSBXUklURV9NQUlOX0NNRDoKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0KKwkJCQkweDIxMDAgfCBpbmZvLnBjbWRzW2ldLlBhZ2VDb3VudDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRGbGFncyA9CisJCQkJKDAgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8IDB4NDA7CisJCQltYXBfYWRkciA9IHZpcnRfdG9fYnVzKGluZm8ucGNtZHNbaV0uRGF0YUFkZHIpOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckhpID0gbWFwX2FkZHIgPj4gMTY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRyTG8gPSBtYXBfYWRkciAmIDB4ZmZmZjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVBRF9NQUlOX0NNRDoKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0KKwkJCQkweDIwMDAgfCBpbmZvLnBjbWRzW2ldLlBhZ2VDb3VudDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRGbGFncyA9CisJCQkJKDAgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8IDB4NDA7CisJCQltYXBfYWRkciA9IHZpcnRfdG9fYnVzKGluZm8ucGNtZHNbaV0uRGF0YUFkZHIpOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckhpID0gbWFwX2FkZHIgPj4gMTY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRyTG8gPSBtYXBfYWRkciAmIDB4ZmZmZjsKKwkJCWJyZWFrOworCisJCWNhc2UgV1JJVEVfTUFJTl9TUEFSRV9DTUQ6CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9CisJCQkJMHgyMTAwIHwgaW5mby5wY21kc1tpXS5QYWdlQ291bnQ7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJbWFwX2FkZHIgPSB2aXJ0X3RvX2J1cyhpbmZvLnBjbWRzW2ldLkRhdGFBZGRyKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IG1hcF9hZGRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisJCQlicmVhazsKKworCQljYXNlIFJFQURfTUFJTl9TUEFSRV9DTUQ6CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kVHlwZSA9CisJCQkJMHgyMDAwIHwgaW5mby5wY21kc1tpXS5QYWdlQ291bnQ7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJbWFwX2FkZHIgPSB2aXJ0X3RvX2J1cyhpbmZvLnBjbWRzW2ldLkRhdGFBZGRyKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJIaSA9IG1hcF9hZGRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisJCQlicmVhazsKKworCQljYXNlIE1FTUNPUFlfQ01EOgorCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPSAweEZGRkY7IC8qIE5PUCBjbWQgKi8KKwkJCS8qIFNldCBiaXQgMTEgdG8gbGV0IHRoZSBDRE1BIGVuZ2luZSBjb250aW51ZSB0byAqLworCQkJLyogZXhlY3V0ZSBvbmx5IGFmdGVyIGl0IGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nICAgKi8KKwkJCS8qIHRoZSBtZW1jb3B5IGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCS8qIEFsc28gc2V0IGJpdCAxMCBhbmQgYml0IDkgdG8gMSAgICAgICAgICAgICAgICAgICovCisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPSAweDBFNDA7CisJCQltYXBfYWRkciA9IGluZm8ubWVtY3BfZGVzYyArIGluZm8uY2RtYV9udW0gKgorCQkJCQlzaXplb2Yoc3RydWN0IG1lbWNweV9kZXNjcmlwdG9yKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUNvcHlQb2ludGVySGkgPSBtYXBfYWRkciA+PiAxNjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUNvcHlQb2ludGVyTG8gPSBtYXBfYWRkciAmIDB4ZmZmZjsKKworCQkJcG1baW5mby5jZG1hX251bV0uTnh0UG9pbnRlckhpID0gMDsKKwkJCXBtW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJMbyA9IDA7CisKKwkJCW1hcF9hZGRyID0gdmlydF90b19idXMoaW5mby5wY21kc1tpXS5EYXRhU3JjQWRkcik7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5TcmNBZGRySGkgPSBtYXBfYWRkciA+PiAxNjsKKwkJCXBtW2luZm8uY2RtYV9udW1dLlNyY0FkZHJMbyA9IG1hcF9hZGRyICYgMHhmZmZmOworCQkJbWFwX2FkZHIgPSB2aXJ0X3RvX2J1cyhpbmZvLnBjbWRzW2ldLkRhdGFEZXN0QWRkcik7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5EZXN0QWRkckhpID0gbWFwX2FkZHIgPj4gMTY7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5EZXN0QWRkckxvID0gbWFwX2FkZHIgJiAweGZmZmY7CisKKwkJCXBtW2luZm8uY2RtYV9udW1dLlhmZXJTaXplID0KKwkJCQlpbmZvLnBjbWRzW2ldLk1lbUNvcHlCeXRlQ250OworCQkJcG1baW5mby5jZG1hX251bV0uTWVtQ29weUZsYWdzID0KKwkJCQkoMCA8PCAxNSB8IDAgPDwgMTQgfCAyNyA8PCA4IHwgMHg0MCk7CisJCQlwbVtpbmZvLmNkbWFfbnVtXS5NZW1Db3B5U3RhdHVzID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgRFVNTVlfQ01EOgorCQlkZWZhdWx0OgorCQkJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPSAwWEZGRkY7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkJCSgwIDw8IDEwKSB8ICgxIDw8IDkpIHwgKDAgPDwgOCkgfCAweDQwOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckhpID0gMDsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk1lbUFkZHJMbyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXBjW2luZm8uY2RtYV9udW1dLkNoYW5uZWwgPSAwOworCQlwY1tpbmZvLmNkbWFfbnVtXS5TdGF0dXMgPSAwOworCQlwY1tpbmZvLmNkbWFfbnVtXS5wY21kID0gaTsKKworCQlpbmZvLmNkbWFfbnVtKys7CisJCUJVR19PTihpbmZvLmNkbWFfbnVtID49IE1BWF9ERVNDUyk7CisKKwkJaWYgKChpbmZvLnBjbWRzW2ldLkNNRCA9PSBXUklURV9NQUlOX1NQQVJFX0NNRCkgfHwKKwkJCShpbmZvLnBjbWRzW2ldLkNNRCA9PSBSRUFEX01BSU5fU1BBUkVfQ01EKSkgeworCQkJLyogRGVzY3JpcHRvciB0byBzZXQgYmFjayBNYWluIEFyZWEgQWNjZXNzIE1vZGUgKi8KKwkJCXJlc2V0X2NkbWFfZGVzYyhpbmZvLmNkbWFfbnVtKTsKKwkJCW5leHRfcHRyICs9IHNpemVvZihzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yKTsKKwkJCXBjW2luZm8uY2RtYV9udW1dLk54dFBvaW50ZXJIaSA9IG5leHRfcHRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uTnh0UG9pbnRlckxvID0gbmV4dF9wdHIgJiAweGZmZmY7CisKKwkJCXBjW2luZm8uY2RtYV9udW1dLkZsYXNoUG9pbnRlckhpID0gcHRyID4+IDE2OworCQkJcGNbaW5mby5jZG1hX251bV0uRmxhc2hQb2ludGVyTG8gPSBwdHIgJiAweGZmZmY7CisKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRUeXBlID0gMHg0MjsKKwkJCXBjW2luZm8uY2RtYV9udW1dLkNvbW1hbmRGbGFncyA9CisJCQkJKDAgPDwgMTApIHwgKDEgPDwgOSkgfCAoMCA8PCA4KSB8IDB4NDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5NZW1BZGRySGkgPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0uTWVtQWRkckxvID0gMDsKKworCQkJcGNbaW5mby5jZG1hX251bV0uQ2hhbm5lbCA9IDA7CisJCQlwY1tpbmZvLmNkbWFfbnVtXS5TdGF0dXMgPSAwOworCQkJcGNbaW5mby5jZG1hX251bV0ucGNtZCA9IGk7CisKKwkJCWluZm8uY2RtYV9udW0rKzsKKwkJCUJVR19PTihpbmZvLmNkbWFfbnVtID49IE1BWF9ERVNDUyk7CisJCX0KKwl9CisKKwkvKiBBZGQgYSBkdW1teSBkZXNjcmlwdG9yIGF0IGVuZCBvZiB0aGUgQ0RNQSBjaGFpbiAqLworCXJlc2V0X2NkbWFfZGVzYyhpbmZvLmNkbWFfbnVtKTsKKwlwdHIgPSBNT0RFXzEwIHwgKGluZm8uZmxhc2hfYmFuayA8PCAyNCk7CisJcGNbaW5mby5jZG1hX251bV0uRmxhc2hQb2ludGVySGkgPSBwdHIgPj4gMTY7CisJcGNbaW5mby5jZG1hX251bV0uRmxhc2hQb2ludGVyTG8gPSBwdHIgJiAweGZmZmY7CisJcGNbaW5mby5jZG1hX251bV0uQ29tbWFuZFR5cGUgPSAweEZGRkY7IC8qIE5PUCBjb21tYW5kICovCisJLyogU2V0IENvbW1hbmQgRmxhZ3MgZm9yIHRoZSBsYXN0IENETUEgZGVzY3JpcHRvcjogKi8KKwkvKiBzZXQgQ29udGludWUgYml0IChiaXQgOSkgdG8gMCBhbmQgSW50ZXJydXB0IGJpdCAoYml0IDgpIHRvIDEgKi8KKwlwY1tpbmZvLmNkbWFfbnVtXS5Db21tYW5kRmxhZ3MgPQorCQkoMCA8PCAxMCkgfCAoMCA8PCA5KSB8ICgxIDw8IDgpIHwgMHg0MDsKKwlwY1tpbmZvLmNkbWFfbnVtXS5wY21kID0gMHhmZjsgLyogU2V0IGl0IHRvIGFuIGlsbGVnYWwgdmFsdWUgKi8KKwlpbmZvLmNkbWFfbnVtKys7CisJQlVHX09OKGluZm8uY2RtYV9udW0gPj0gTUFYX0RFU0NTKTsKKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsgIC8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KKworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCS8qIFdhaXQgZm9yIERNQSB0byBiZSBlbmFibGVkIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQgKi8KKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKwljZG1hX3RyYW5zKGluZm8uZmxhc2hfYmFuayk7CisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmluZm8uY29tcGxldGUsIDUwICogSFopOworCWlmICghcmV0KQorCQlwcmludGsoS0VSTl9FUlIgIldhaXQgZm9yIGNvbXBsZXRpb24gdGltZW91dCAiCisJCQkiaW4gJXMsIExpbmUgJWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJc3RhdHVzID0gaW5mby5yZXQ7CisKKwlpbmZvLnBjbWRzX251bSA9IDA7IC8qIENsZWFyIHRoZSBwZW5kaW5nIGNtZHMgbnVtYmVyIHRvIDAgKi8KKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBpc19jZG1hX2ludGVycnVwdCh2b2lkKQoreworCXUzMiBpbnRzX2IwLCBpbnRzX2IxLCBpbnRzX2IyLCBpbnRzX2IzLCBpbnRzX2NkbWE7CisJdTMyIGludF9lbl9tYXNrOworCXUzMiBjZG1hX2ludF9lbl9tYXNrOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwkvKiBTZXQgdGhlIGdsb2JhbCBFbmFibGUgbWFza3MgZm9yIG9ubHkgdGhvc2UgaW50ZXJydXB0cworCSAqIHRoYXQgYXJlIHN1cHBvcnRlZCAqLworCWNkbWFfaW50X2VuX21hc2sgPSAoRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMCB8CisJCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwxIHwKKwkJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDIgfAorCQkJRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMyB8CisJCQlETUFfSU5UUl9fTUVNQ09QWV9ERVNDX0NPTVApOworCisJaW50X2VuX21hc2sgPSAoSU5UUl9TVEFUVVMwX19FQ0NfRVJSIHwKKwkJSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwgfAorCQlJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwpOworCisJaW50c19iMCA9IGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKSAmIGludF9lbl9tYXNrOworCWludHNfYjEgPSBpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMSkgJiBpbnRfZW5fbWFzazsKKwlpbnRzX2IyID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpICYgaW50X2VuX21hc2s7CisJaW50c19iMyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMzKSAmIGludF9lbl9tYXNrOworCWludHNfY2RtYSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0lOVFIpICYgY2RtYV9pbnRfZW5fbWFzazsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICJpbnRzX2JhbmswIHRvIGludHNfYmFuazM6ICIKKwkJCSIweCV4LCAweCV4LCAweCV4LCAweCV4LCBpbnRzX2NkbWE6IDB4JXhcbiIsCisJCQlpbnRzX2IwLCBpbnRzX2IxLCBpbnRzX2IyLCBpbnRzX2IzLCBpbnRzX2NkbWEpOworCisJaWYgKGludHNfYjAgfHwgaW50c19iMSB8fCBpbnRzX2IyIHx8IGludHNfYjMgfHwgaW50c19jZG1hKSB7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlvd3JpdGUzMihpbnRzX2IwLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMCk7CisJCWlvd3JpdGUzMihpbnRzX2IxLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMSk7CisJCWlvd3JpdGUzMihpbnRzX2IyLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMik7CisJCWlvd3JpdGUzMihpbnRzX2IzLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLAorCQkJIk5vdCBhIE5BTkQgY29udHJvbGxlciBpbnRlcnJ1cHQhIElnbm9yZSBpdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ldmVudF9zdGF0dXModm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICpwdHI7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXB0ciA9IChzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICopaW5mby5jZG1hX2Rlc2NfYnVmOworCisJZm9yIChpID0gMDsgaSA8IGluZm8uY2RtYV9udW07IGkrKykgeworCQlpZiAocHRyW2ldLnBjbWQgIT0gMHhmZikKKwkJCWluZm8ucGNtZHNbcHRyW2ldLnBjbWRdLlN0YXR1cyA9IENNRF9QQVNTOworCQlpZiAoKHB0cltpXS5Db21tYW5kVHlwZSA9PSAweDQxKSB8fAorCQkJKHB0cltpXS5Db21tYW5kVHlwZSA9PSAweDQyKSB8fAorCQkJKHB0cltpXS5Db21tYW5kVHlwZSA9PSAweDQzKSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoaW5mby5wY21kc1twdHJbaV0ucGNtZF0uQ01EKSB7CisJCWNhc2UgUkVBRF9NQUlOX1NQQVJFX0NNRDoKKwkJCUNvbnZfTWFpbl9TcGFyZV9EYXRhX1BoeTJMb2dfRm9ybWF0KAorCQkJCWluZm8ucGNtZHNbcHRyW2ldLnBjbWRdLkRhdGFBZGRyLAorCQkJCWluZm8ucGNtZHNbcHRyW2ldLnBjbWRdLlBhZ2VDb3VudCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEX1NQQVJFX0NNRDoKKwkJCUNvbnZfU3BhcmVfRGF0YV9QaHkyTG9nX0Zvcm1hdCgKKwkJCQlpbmZvLnBjbWRzW3B0cltpXS5wY21kXS5EYXRhQWRkcik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHUxNiBkb19lY2NfZm9yX2Rlc2ModTMyIGNoLCB1OCAqYnVmLCB1MTYgcGFnZSkKK3sKKwl1MTYgZXZlbnQgPSBFVkVOVF9OT05FOworCXUxNiBlcnJfYnl0ZTsKKwl1MTYgZXJyX3BhZ2UgPSAwOworCXU4IGVycl9zZWN0b3I7CisJdTggZXJyX2RldmljZTsKKwl1MTYgZWNjX2NvcnJlY3Rpb25faW5mbzsKKwl1MTYgZXJyX2FkZHJlc3M7CisJdTMyIGVjY1NlY3RvclNpemU7CisJdTggKmVycl9wb3M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZWNjU2VjdG9yU2l6ZSA9IEVDQ19TRUNUT1JfU0laRSAqIChEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKTsKKworCWRvIHsKKwkJaWYgKDAgPT0gY2gpCisJCQllcnJfcGFnZSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRVJSX1BBR0VfQUREUjApOworCQllbHNlIGlmICgxID09IGNoKQorCQkJZXJyX3BhZ2UgPSBpb3JlYWQzMihGbGFzaFJlZyArIEVSUl9QQUdFX0FERFIxKTsKKwkJZWxzZSBpZiAoMiA9PSBjaCkKKwkJCWVycl9wYWdlID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBFUlJfUEFHRV9BRERSMik7CisJCWVsc2UgaWYgKDMgPT0gY2gpCisJCQllcnJfcGFnZSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRVJSX1BBR0VfQUREUjMpOworCisJCWVycl9hZGRyZXNzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBFQ0NfRVJST1JfQUREUkVTUyk7CisJCWVycl9ieXRlID0gZXJyX2FkZHJlc3MgJiBFQ0NfRVJST1JfQUREUkVTU19fT0ZGU0VUOworCQllcnJfc2VjdG9yID0gKChlcnJfYWRkcmVzcyAmCisJCQlFQ0NfRVJST1JfQUREUkVTU19fU0VDVE9SX05SKSA+PiAxMik7CisKKwkJZWNjX2NvcnJlY3Rpb25faW5mbyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRVJSX0NPUlJFQ1RJT05fSU5GTyk7CisJCWVycl9kZXZpY2UgPSAoKGVjY19jb3JyZWN0aW9uX2luZm8gJgorCQkJRVJSX0NPUlJFQ1RJT05fSU5GT19fREVWSUNFX05SKSA+PiA4KTsKKworCQlpZiAoZWNjX2NvcnJlY3Rpb25faW5mbyAmIEVSUl9DT1JSRUNUSU9OX0lORk9fX0VSUk9SX1RZUEUpIHsKKwkJCWV2ZW50ID0gRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SOworCQl9IGVsc2UgeworCQkJZXZlbnQgPSBFVkVOVF9DT1JSRUNUQUJMRV9EQVRBX0VSUk9SX0ZJWEVEOworCQkJaWYgKGVycl9ieXRlIDwgRUNDX1NFQ1RPUl9TSVpFKSB7CisJCQkJZXJyX3BvcyA9IGJ1ZiArCisJCQkJCShlcnJfcGFnZSAtIHBhZ2UpICoKKwkJCQkJRGV2aWNlSW5mby53UGFnZURhdGFTaXplICsKKwkJCQkJZXJyX3NlY3RvciAqIGVjY1NlY3RvclNpemUgKworCQkJCQllcnJfYnl0ZSAqCisJCQkJCURldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQgKworCQkJCQllcnJfZGV2aWNlOworCQkJCSplcnJfcG9zIF49IGVjY19jb3JyZWN0aW9uX2luZm8gJgorCQkJCQlFUlJfQ09SUkVDVElPTl9JTkZPX19CWVRFTUFTSzsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKCEoZWNjX2NvcnJlY3Rpb25faW5mbyAmIEVSUl9DT1JSRUNUSU9OX0lORk9fX0xBU1RfRVJSX0lORk8pKTsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHUxNiBwcm9jZXNzX2VjY19pbnQodTMyIGMsIHUxNiAqcF9kZXNjX251bSkKK3sKKwlzdHJ1Y3QgY2RtYV9kZXNjcmlwdG9yICpwdHI7CisJdTE2IGo7CisJaW50IGV2ZW50ID0gRVZFTlRfUEFTUzsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoYyAhPSBpbmZvLmZsYXNoX2JhbmspCisJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IhaW5mby5mbGFzaF9iYW5rIGlzICVkLCB3aGlsZSBjIGlzICVkXG4iLAorCQkJCWluZm8uZmxhc2hfYmFuaywgYyk7CisKKwlwdHIgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKworCWZvciAoaiA9IDA7IGogPCBpbmZvLmNkbWFfbnVtOyBqKyspCisJCWlmICgocHRyW2pdLlN0YXR1cyAmIENNRF9ETUFfREVTQ19DT01QKSAhPSBDTURfRE1BX0RFU0NfQ09NUCkKKwkJCWJyZWFrOworCisJKnBfZGVzY19udW0gPSBqOyAvKiBQYXNzIHRoZSBkZXNjcmlwdGVyIG51bWJlciBmb3VuZCBoZXJlICovCisKKwlpZiAoaiA+PSBpbmZvLmNkbWFfbnVtKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuIG5vdCBmaW5kIHRoZSBjb3JyZWN0IGRlc2NyaXB0b3IgbnVtYmVyICIKKwkJCSJ3aGVuIGVjYyBpbnRlcnJ1cHQgdHJpZ2dlcmVkISIKKwkJCSJpbmZvLmNkbWFfbnVtOiAlZCwgajogJWRcbiIsIGluZm8uY2RtYV9udW0sIGopOworCQlyZXR1cm4gRVZFTlRfVU5DT1JSRUNUQUJMRV9EQVRBX0VSUk9SOworCX0KKworCWV2ZW50ID0gZG9fZWNjX2Zvcl9kZXNjKGMsIGluZm8ucGNtZHNbcHRyW2pdLnBjbWRdLkRhdGFBZGRyLAorCQlpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5QYWdlKTsKKworCWlmIChFVkVOVF9VTkNPUlJFQ1RBQkxFX0RBVEFfRVJST1IgPT0gZXZlbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciEiCisJCQkiaW5mby5jZG1hX251bTogJWQsIGo6ICVkLCAiCisJCQkicGVuZGluZyBjbWQgQ01EOiAweCV4LCAiCisJCQkiQmxvY2s6IDB4JXgsIFBhZ2U6IDB4JXgsIFBhZ2VDb3VudDogMHgleFxuIiwKKwkJCWluZm8uY2RtYV9udW0sIGosCisJCQlpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5DTUQsCisJCQlpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5CbG9jaywKKwkJCWluZm8ucGNtZHNbcHRyW2pdLnBjbWRdLlBhZ2UsCisJCQlpbmZvLnBjbWRzW3B0cltqXS5wY21kXS5QYWdlQ291bnQpOworCisJCWlmIChwdHJbal0ucGNtZCAhPSAweGZmKQorCQkJaW5mby5wY21kc1twdHJbal0ucGNtZF0uU3RhdHVzID0gQ01EX0ZBSUw7CisJCUNETUFfVXBkYXRlRXZlbnRTdGF0dXMoKTsKKwl9CisKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfcHJvZ19lcmFzZV9mYWlsX2ludCh1MTYgZGVzY19udW0pCit7CisJc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqcHRyOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlwdHIgPSAoc3RydWN0IGNkbWFfZGVzY3JpcHRvciAqKWluZm8uY2RtYV9kZXNjX2J1ZjsKKworCWlmIChwdHJbZGVzY19udW1dLnBjbWQgIT0gMHhGRikKKwkJaW5mby5wY21kc1twdHJbZGVzY19udW1dLnBjbWRdLlN0YXR1cyA9IENNRF9GQUlMOworCisJQ0RNQV9VcGRhdGVFdmVudFN0YXR1cygpOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgQ0RNQV9FdmVudF9TdGF0dXMgKGZvciB1c2Ugd2l0aCBDTURfRE1BKQorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBFdmVudF9TdGF0dXMgY29kZQorKiBEZXNjcmlwdGlvbjogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGFuIGludGVycnVwdCBoYXMgaGFwcGVuZWQKKyogICAgICAgICAgICAgICBJdCByZWFkcyB0aGUgSFcgc3RhdHVzIHJlZ2lzdGVyIGFuZCAuLi50YmQKKyogICAgICAgICAgICAgICBJdCByZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBldmVudCBzdGF0dXMKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2ICBDRE1BX0V2ZW50X1N0YXR1cyh2b2lkKQoreworCXUzMiBpbnRzX2FkZHJbNF0gPSB7SU5UUl9TVEFUVVMwLCBJTlRSX1NUQVRVUzEsCisJCUlOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1MzIgZG1hX2ludHJfYml0WzRdID0ge0RNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDAsCisJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDEsCisJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDIsCisJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDN9OworCXUzMiBjZG1hX2ludF9zdGF0dXMsIGludF9zdGF0dXM7CisJdTMyIGVjY19lbmFibGUgPSAwOworCXUxNiBldmVudCA9IEVWRU5UX1BBU1M7CisJdTE2IGN1cl9kZXNjID0gMDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZWNjX2VuYWJsZSA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRUNDX0VOQUJMRSk7CisKKwl3aGlsZSAoMSkgeworCQlpbnRfc3RhdHVzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRzX2FkZHJbaW5mby5mbGFzaF9iYW5rXSk7CisJCWlmIChlY2NfZW5hYmxlICYmIChpbnRfc3RhdHVzICYgSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSkgeworCQkJZXZlbnQgPSBwcm9jZXNzX2VjY19pbnQoaW5mby5mbGFzaF9iYW5rLCAmY3VyX2Rlc2MpOworCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQlGbGFzaFJlZyArIGludHNfYWRkcltpbmZvLmZsYXNoX2JhbmtdKTsKKwkJCWlmIChFVkVOVF9VTkNPUlJFQ1RBQkxFX0RBVEFfRVJST1IgPT0gZXZlbnQpIHsKKwkJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCQkiaW50c19iYW5rMCB0byBpbnRzX2JhbmszOiAiCisJCQkJCSIweCV4LCAweCV4LCAweCV4LCAweCV4LCAiCisJCQkJCSJpbnRzX2NkbWE6IDB4JXhcbiIsCisJCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKSwKKwkJCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpLAorCQkJCQlpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMiksCisJCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMzKSwKKwkJCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfSU5UUikpOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGludF9zdGF0dXMgJiBJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJOQU5EIHByb2dyYW0gZmFpbCBpbnRlcnJ1cHQhXG4iKTsKKwkJCXByb2Nlc3NfcHJvZ19lcmFzZV9mYWlsX2ludChjdXJfZGVzYyk7CisJCQlldmVudCA9IEVWRU5UX1BST0dSQU1fRkFJTFVSRTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGludF9zdGF0dXMgJiBJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTkFORCBlcmFzZSBmYWlsIGludGVycnVwdCFcbiIpOworCQkJcHJvY2Vzc19wcm9nX2VyYXNlX2ZhaWxfaW50KGN1cl9kZXNjKTsKKwkJCWV2ZW50ID0gRVZFTlRfRVJBU0VfRkFJTFVSRTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJY2RtYV9pbnRfc3RhdHVzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfSU5UUik7CisJCQlpZiAoY2RtYV9pbnRfc3RhdHVzICYgZG1hX2ludHJfYml0W2luZm8uZmxhc2hfYmFua10pIHsKKwkJCQlpb3dyaXRlMzIoZG1hX2ludHJfYml0W2luZm8uZmxhc2hfYmFua10sCisJCQkJCUZsYXNoUmVnICsgRE1BX0lOVFIpOworCQkJCXVwZGF0ZV9ldmVudF9zdGF0dXMoKTsKKwkJCQlldmVudCA9IEVWRU5UX1BBU1M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpbnRfc3RhdHVzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRzX2FkZHJbaW5mby5mbGFzaF9iYW5rXSk7CisJaW93cml0ZTMyKGludF9zdGF0dXMsIEZsYXNoUmVnICsgaW50c19hZGRyW2luZm8uZmxhc2hfYmFua10pOworCWNkbWFfaW50X3N0YXR1cyA9IGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0lOVFIpOworCWlvd3JpdGUzMihjZG1hX2ludF9zdGF0dXMsIEZsYXNoUmVnICsgRE1BX0lOVFIpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCXJldHVybiBldmVudDsKK30KKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9jZG1hLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfY2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NGVhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfY2RtYS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworLyogaGVhZGVyIGZvciBMTERfQ0RNQS5jIG1vZHVsZSAqLworCisjaWZuZGVmIF9MTERfQ0RNQV8KKyNkZWZpbmUgX0xMRF9DRE1BXworCisjaW5jbHVkZSAiZmxhc2guaCIKKworI2RlZmluZSAgREVCVUdfU1lOQyAgICAxCisKKy8qLy8vLy8vLy8vLy8gICBDRE1BIHNwZWNpZmljIE1BQ1JPIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTUFYX0RFU0NTICAgICAgICAgKDI1NSkKKyNkZWZpbmUgTUFYX0NIQU5TICAoNCkKKyNkZWZpbmUgTUFYX1NZTkNfUE9JTlRTICAgICAgICAgKDE2KQorI2RlZmluZSBNQVhfREVTQ19QRVJfQ0hBTiAgICAgKE1BWF9ERVNDUyAqIDMgKyBNQVhfU1lOQ19QT0lOVFMgKyAyKQorCisjZGVmaW5lIENIQU5ORUxfU1lOQ19NQVNLICAgICAgICgweDAwMEYpCisjZGVmaW5lIENIQU5ORUxfRE1BX01BU0sgICAgICAgICgweDAwRjApCisjZGVmaW5lIENIQU5ORUxfSURfTUFTSyAgICAgICAgICgweDAzMDApCisjZGVmaW5lIENIQU5ORUxfQ09OVF9NQVNLICAgICAgICgweDQwMDApCisjZGVmaW5lIENIQU5ORUxfSU5UUl9NQVNLICAgICAgICgweDgwMDApCisKKyNkZWZpbmUgQ0hBTk5FTF9TWU5DX09GRlNFVCAgICAgKDApCisjZGVmaW5lIENIQU5ORUxfRE1BX09GRlNFVCAgICAgICg0KQorI2RlZmluZSBDSEFOTkVMX0lEX09GRlNFVCAgICAgICAoOCkKKyNkZWZpbmUgQ0hBTk5FTF9DT05UX09GRlNFVCAgICAgKDE0KQorI2RlZmluZSBDSEFOTkVMX0lOVFJfT0ZGU0VUICAgICAoMTUpCisKK3UxNiBDRE1BX0RhdGFfQ01EKHU4IGNtZCwgdTggKmRhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsIHUxNiBudW0sIHUxNiBmbGFncyk7Cit1MTYgQ0RNQV9NZW1Db3B5X0NNRCh1OCAqZGVzdCwgdTggKnNyYywgdTMyIGJ5dGVfY250LCB1MTYgZmxhZ3MpOwordTE2IENETUFfRXhlY3V0ZV9DTURzKHZvaWQpOwordm9pZCBwcmludF9wZW5kaW5nX2NtZHModm9pZCk7Cit2b2lkIHByaW50X2NkbWFfZGVzY3JpcHRvcnModm9pZCk7CisKK2V4dGVybiB1OCBnX1NCRENtZEluZGV4OworZXh0ZXJuIHN0cnVjdCBtcnN0X25hbmRfaW5mbyBpbmZvOworCisKKy8qLy8vLy8vLy8vLy8gICBwcm90b3R5cGVzOiBBUElzIGZvciBMTERfQ0RNQSAqLworaW50IGlzX2NkbWFfaW50ZXJydXB0KHZvaWQpOwordTE2IENETUFfRXZlbnRfU3RhdHVzKHZvaWQpOworCisvKiBDTUQtRE1BIERlc2NyaXB0b3IgU3RydWN0LiAgVGhlc2UgYXJlIGRlZmluZWQgYnkgdGhlIENNRF9ETUEgSFcgKi8KK3N0cnVjdCBjZG1hX2Rlc2NyaXB0b3IgeworCXUzMiBOeHRQb2ludGVySGk7CisJdTMyIE54dFBvaW50ZXJMbzsKKwl1MzIgRmxhc2hQb2ludGVySGk7CisJdTMyIEZsYXNoUG9pbnRlckxvOworCXUzMiBDb21tYW5kVHlwZTsKKwl1MzIgTWVtQWRkckhpOworCXUzMiBNZW1BZGRyTG87CisJdTMyIENvbW1hbmRGbGFnczsKKwl1MzIgQ2hhbm5lbDsKKwl1MzIgU3RhdHVzOworCXUzMiBNZW1Db3B5UG9pbnRlckhpOworCXUzMiBNZW1Db3B5UG9pbnRlckxvOworCXUzMiBSZXNlcnZlZDEyOworCXUzMiBSZXNlcnZlZDEzOworCXUzMiBSZXNlcnZlZDE0OworCXUzMiBwY21kOyAvKiBwZW5kaW5nIGNtZCBudW0gcmVsYXRlZCB0byB0aGlzIGRlc2NyaXB0b3IgKi8KK307CisKKy8qIFRoaXMgc3RydWN0IGhvbGRzIG9uZSBNZW1Db3B5IGRlc2NyaXB0b3IgYXMgZGVmaW5lZCBieSB0aGUgSFcgKi8KK3N0cnVjdCBtZW1jcHlfZGVzY3JpcHRvciB7CisJdTMyIE54dFBvaW50ZXJIaTsKKwl1MzIgTnh0UG9pbnRlckxvOworCXUzMiBTcmNBZGRySGk7CisJdTMyIFNyY0FkZHJMbzsKKwl1MzIgRGVzdEFkZHJIaTsKKwl1MzIgRGVzdEFkZHJMbzsKKwl1MzIgWGZlclNpemU7CisJdTMyIE1lbUNvcHlGbGFnczsKKwl1MzIgTWVtQ29weVN0YXR1czsKKwl1MzIgcmVzZXJ2ZWQ5OworCXUzMiByZXNlcnZlZDEwOworCXUzMiByZXNlcnZlZDExOworCXUzMiByZXNlcnZlZDEyOworCXUzMiByZXNlcnZlZDEzOworCXUzMiByZXNlcnZlZDE0OworCXUzMiByZXNlcnZlZDE1OworfTsKKworLyogUGVuZGluZyBDTUQgdGFibGUgZW50cmllcyAoaW5jbHVkZXMgTWVtQ29weSBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgcGVuZGluZ19jbWQgeworCXU4IENNRDsKKwl1OCAqRGF0YUFkZHI7CisJdTMyIEJsb2NrOworCXUxNiBQYWdlOworCXUxNiBQYWdlQ291bnQ7CisJdTggKkRhdGFEZXN0QWRkcjsKKwl1OCAqRGF0YVNyY0FkZHI7CisJdTMyIE1lbUNvcHlCeXRlQ250OworCXUxNiBGbGFnczsKKwl1MTYgU3RhdHVzOworfTsKKworI2lmIERFQlVHX1NZTkMKK2V4dGVybiB1MzIgZGVidWdfc3luY19jbnQ7CisjZW5kaWYKKworLyogRGVmaW5pdGlvbnMgZm9yIENNRCBETUEgZGVzY3JpcHRvciBjaGFpbiBmaWVsZHMgKi8KKyNkZWZpbmUgICAgIENNRF9ETUFfREVTQ19DT01QICAgMHg4MDAwCisjZGVmaW5lICAgICBDTURfRE1BX0RFU0NfRkFJTCAgIDB4NDAwMAorCisjZW5kaWYgLypfTExEX0NETUFfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9lbXUuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9lbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGViMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2VtdS5jCkBAIC0wLDAgKzEsNzgwIEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImZsYXNoLmgiCisjaW5jbHVkZSAiZmZzZGVmcy5oIgorI2luY2x1ZGUgImxsZF9lbXUuaCIKKyNpbmNsdWRlICJsbGQuaCIKKyNpZiBDTURfRE1BCisjaW5jbHVkZSAibGxkX2NkbWEuaCIKKyNlbmRpZgorCisjZGVmaW5lIEdMT0JfTExEX1BBR0VTICAgICAgICAgICA2NAorI2RlZmluZSBHTE9CX0xMRF9QQUdFX1NJWkUgICAgICAgKDUxMisxNikKKyNkZWZpbmUgR0xPQl9MTERfUEFHRV9EQVRBX1NJWkUgIDUxMgorI2RlZmluZSBHTE9CX0xMRF9CTE9DS1MgICAgICAgICAgMjA0OAorCisjaWYgKENNRF9ETUEgICYmIEZMQVNIX0VNVSkKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgordTMyIHRvdGFsVXNlZEJhbmtzOwordTMyIHZhbGlkX2JhbmtzW01BWF9DSEFOU107CisjZW5kaWYKKworI2lmIEZMQVNIX0VNVQkJCS8qIFRoaXMgaXMgZm9yIGVudGlyZSBtb2R1bGUgKi8KKworc3RhdGljIHU4ICpmbGFzaF9tZW1vcnlbR0xPQl9MTERfQkxPQ0tTICogR0xPQl9MTERfUEFHRVNdOworCisvKiBSZWFkIG5hbmQgZW11IGZpbGUgYW5kIHRoZW4gZmlsbCBpdCdzIGNvbnRlbnQgdG8gZmxhc2hfbWVtb3J5ICovCitpbnQgZW11X2xvYWRfZmlsZV90b19tZW0odm9pZCkKK3sKKwltbV9zZWdtZW50X3QgZnM7CisJc3RydWN0IGZpbGUgKm5lZl9maWxwID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlsb2ZmX3QgbmVmX3NpemUgPSAwOworCWxvZmZfdCB0bXBfZmlsZV9vZmZzZXQsIGZpbGVfb2Zmc2V0OworCXNzaXplX3QgbnJlYWQ7CisJaW50IGksIHJjID0gLUVJTlZBTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJbmVmX2ZpbHAgPSBmaWxwX29wZW4oIi9yb290L25hbmRfZW11X2ZpbGUiLCBPX1JEV1IgfCBPX0xBUkdFRklMRSwgMCk7CisJaWYgKElTX0VSUihuZWZfZmlscCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmaWxwX29wZW4gZXJyb3I6ICIKKwkJICAgICAgICJVbmFibGUgdG8gb3BlbiBuYW5kIGVtdSBmaWxlIVxuIik7CisJCXJldHVybiBQVFJfRVJSKG5lZl9maWxwKTsKKwl9CisKKwlpZiAobmVmX2ZpbHAtPmZfcGF0aC5kZW50cnkpIHsKKwkJaW5vZGUgPSBuZWZfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbiBub3QgZ2V0IHZhbGlkIGlub2RlIVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW5lZl9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUtPmlfbWFwcGluZy0+aG9zdCk7CisJaWYgKG5lZl9zaXplIDw9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIG5hbmQgZW11IGZpbGUgc2l6ZTogIgorCQkgICAgICAgIjB4JWxseFxuIiwgbmVmX3NpemUpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIm5hbmQgZW11IGZpbGUgc2l6ZTogJWxsZFxuIiwKKwkJCSAgICAgICBuZWZfc2l6ZSk7CisJfQorCisJZmlsZV9vZmZzZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBHTE9CX0xMRF9CTE9DS1MgKiBHTE9CX0xMRF9QQUdFUzsgaSsrKSB7CisJCXRtcF9maWxlX29mZnNldCA9IGZpbGVfb2Zmc2V0OworCQlucmVhZCA9IHZmc19yZWFkKG5lZl9maWxwLAorCQkJCSAoY2hhciBfX3VzZXIgKilmbGFzaF9tZW1vcnlbaV0sCisJCQkJIEdMT0JfTExEX1BBR0VfU0laRSwgJnRtcF9maWxlX29mZnNldCk7CisJCWlmIChucmVhZCA8IEdMT0JfTExEX1BBR0VfU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcywgTGluZSAlZCAtICIKKwkJCSAgICAgICAibmFuZCBlbXUgZmlsZSBwYXJ0aWFsIHJlYWQ6ICIKKwkJCSAgICAgICAiJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGludClucmVhZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlmaWxlX29mZnNldCArPSBHTE9CX0xMRF9QQUdFX1NJWkU7CisJfQorCXJjID0gMDsKKworb3V0OgorCWZpbHBfY2xvc2UobmVmX2ZpbHAsIGN1cnJlbnQtPmZpbGVzKTsKKwlzZXRfZnMoZnMpOworCXJldHVybiByYzsKK30KKworLyogV3JpdGUgY29udGVudHMgb2YgZmxhc2hfbWVtb3J5IHRvIG5hbmQgZW11IGZpbGUgKi8KK2ludCBlbXVfd3JpdGVfbWVtX3RvX2ZpbGUodm9pZCkKK3sKKwltbV9zZWdtZW50X3QgZnM7CisJc3RydWN0IGZpbGUgKm5lZl9maWxwID0gTlVMTDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwlsb2ZmX3QgbmVmX3NpemUgPSAwOworCWxvZmZfdCB0bXBfZmlsZV9vZmZzZXQsIGZpbGVfb2Zmc2V0OworCXNzaXplX3QgbndyaXR0ZW47CisJaW50IGksIHJjID0gLUVJTlZBTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJbmVmX2ZpbHAgPSBmaWxwX29wZW4oIi9yb290L25hbmRfZW11X2ZpbGUiLCBPX1JEV1IgfCBPX0xBUkdFRklMRSwgMCk7CisJaWYgKElTX0VSUihuZWZfZmlscCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmaWxwX29wZW4gZXJyb3I6ICIKKwkJICAgICAgICJVbmFibGUgdG8gb3BlbiBuYW5kIGVtdSBmaWxlIVxuIik7CisJCXJldHVybiBQVFJfRVJSKG5lZl9maWxwKTsKKwl9CisKKwlpZiAobmVmX2ZpbHAtPmZfcGF0aC5kZW50cnkpIHsKKwkJaW5vZGUgPSBuZWZfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgIiAibmVmX2ZpbHAtPmZfcGF0aC5kZW50cnkgdmFsdWUhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbmVmX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZS0+aV9tYXBwaW5nLT5ob3N0KTsKKwlpZiAobmVmX3NpemUgPD0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgIgorCQkgICAgICAgIm5hbmQgZW11IGZpbGUgc2l6ZTogMHglbGx4XG4iLCBuZWZfc2l6ZSk7CisJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAibmFuZCBlbXUgZmlsZSBzaXplOiAiCisJCQkgICAgICAgIiVsbGRcbiIsIG5lZl9zaXplKTsKKwl9CisKKwlmaWxlX29mZnNldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEdMT0JfTExEX0JMT0NLUyAqIEdMT0JfTExEX1BBR0VTOyBpKyspIHsKKwkJdG1wX2ZpbGVfb2Zmc2V0ID0gZmlsZV9vZmZzZXQ7CisJCW53cml0dGVuID0gdmZzX3dyaXRlKG5lZl9maWxwLAorCQkJCSAgICAgKGNoYXIgX191c2VyICopZmxhc2hfbWVtb3J5W2ldLAorCQkJCSAgICAgR0xPQl9MTERfUEFHRV9TSVpFLCAmdG1wX2ZpbGVfb2Zmc2V0KTsKKwkJaWYgKG53cml0dGVuIDwgR0xPQl9MTERfUEFHRV9TSVpFKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzLCBMaW5lICVkIC0gIgorCQkJICAgICAgICJuYW5kIGVtdSBmaWxlIHBhcnRpYWwgd3JpdGU6ICIKKwkJCSAgICAgICAiJWQgYnl0ZXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGludClud3JpdHRlbik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlmaWxlX29mZnNldCArPSBHTE9CX0xMRF9QQUdFX1NJWkU7CisJfQorCXJjID0gMDsKKworb3V0OgorCWZpbHBfY2xvc2UobmVmX2ZpbHAsIGN1cnJlbnQtPmZpbGVzKTsKKwlzZXRfZnMoZnMpOworCXJldHVybiByYzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9GbGFzaF9Jbml0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICBDcmVhdGVzICYgaW5pdGlhbGl6ZXMgdGhlIGZsYXNoIFJBTSBhcnJheS4KKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X0ZsYXNoX0luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZmxhc2hfbWVtb3J5WzBdID0gKHU4ICopdm1hbGxvYyhHTE9CX0xMRF9QQUdFX1NJWkUgKgorCQkJCQkJICAgR0xPQl9MTERfQkxPQ0tTICoKKwkJCQkJCSAgIEdMT0JfTExEX1BBR0VTICoKKwkJCQkJCSAgIHNpemVvZih1OCkpOworCWlmICghZmxhc2hfbWVtb3J5WzBdKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgIgorCQkgICAgICAgImZvciBuYW5kIGVtdWxhdG9yIVxuIik7CisJCXJldHVybiBFUlI7CisJfQorCisJbWVtc2V0KChjaGFyICopKGZsYXNoX21lbW9yeVswXSksIDB4RkYsCisJICAgICAgIEdMT0JfTExEX1BBR0VfU0laRSAqIEdMT0JfTExEX0JMT0NLUyAqIEdMT0JfTExEX1BBR0VTICoKKwkgICAgICAgc2l6ZW9mKHU4KSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgR0xPQl9MTERfQkxPQ0tTICogR0xPQl9MTERfUEFHRVM7IGkrKykKKwkJZmxhc2hfbWVtb3J5W2ldID0gZmxhc2hfbWVtb3J5W2kgLSAxXSArIEdMT0JfTExEX1BBR0VfU0laRTsKKworCWVtdV9sb2FkX2ZpbGVfdG9fbWVtKCk7IC8qIExvYWQgbmFuZCBlbXUgZmlsZSB0byBtZW0gKi8KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X0ZsYXNoX1JlbGVhc2UKKyogSW5wdXRzOiAgICAgICBub25lCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVsZWFzZXMgdGhlIGZsYXNoLgorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK2ludCBlbXVfRmxhc2hfUmVsZWFzZSh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZW11X3dyaXRlX21lbV90b19maWxlKCk7ICAvKiBXcml0ZSBiYWNrIG1lbSB0byBuYW5kIGVtdSBmaWxlICovCisKKwl2ZnJlZShmbGFzaF9tZW1vcnlbMF0pOworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X1JlYWRfRGV2aWNlX0lECisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MSBGQUlMPTAKKyogRGVzY3JpcHRpb246ICBSZWFkcyB0aGUgaW5mbyBmcm9tIHRoZSBjb250cm9sbGVyIHJlZ2lzdGVycy4KKyogICAgICAgICAgICAgICBTZXRzIHVwIERldmljZUluZm8gc3RydWN0dXJlIHdpdGggZGV2aWNlIHBhcmFtZXRlcnMKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCisKK3UxNiBlbXVfUmVhZF9EZXZpY2VfSUQodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCURldmljZUluZm8ud0RldmljZU1ha2VyID0gMDsKKwlEZXZpY2VJbmZvLndEZXZpY2VUeXBlID0gODsKKwlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9IDM2OworCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayA9IEdMT0JfTExEX0JMT0NLUyAtIDE7CisJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0xMRF9CTE9DS1M7CisJRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayA9IEdMT0JfTExEX1BBR0VTOworCURldmljZUluZm8ud1BhZ2VTaXplID0gR0xPQl9MTERfUEFHRV9TSVpFOworCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSA9IEdMT0JfTExEX1BBR0VfREFUQV9TSVpFOworCURldmljZUluZm8ud1BhZ2VTcGFyZVNpemUgPSBHTE9CX0xMRF9QQUdFX1NJWkUgLQorCSAgICBHTE9CX0xMRF9QQUdFX0RBVEFfU0laRTsKKwlEZXZpY2VJbmZvLndCbG9ja1NpemUgPSBEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIEdMT0JfTExEX1BBR0VTOworCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKiBHTE9CX0xMRF9QQUdFUzsKKwlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gPSAodTMyKSAoRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0KKwkJCQkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrCisJCQkJCQkrIDEpOworCURldmljZUluZm8uTUxDRGV2aWNlID0gMTsgLyogRW11bGF0ZSBNTEMgZGV2aWNlICovCisJRGV2aWNlSW5mby5uQml0c0luUGFnZU51bWJlciA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spOworCURldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCisjaWYgQ01EX0RNQQorCXRvdGFsVXNlZEJhbmtzID0gNDsKKwl2YWxpZF9iYW5rc1swXSA9IDE7CisJdmFsaWRfYmFua3NbMV0gPSAxOworCXZhbGlkX2JhbmtzWzJdID0gMTsKKwl2YWxpZF9iYW5rc1szXSA9IDE7CisjZW5kaWYKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X0ZsYXNoX1Jlc2V0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlc2V0IHRoZSBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X0VyYXNlX0Jsb2NrCisqIElucHV0czogICAgICAgQWRkcmVzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIEVyYXNlIGEgYmxvY2sKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGQpCit7CisJaW50IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChibG9ja19hZGQgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlbXVfRXJhc2VfQmxvY2sgZXJyb3IhICIKKwkJICAgICAgICJUb28gYmlnIGJsb2NrIGFkZHJlc3M6ICVkXG4iLCBibG9ja19hZGQpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkVyYXNpbmcgYmxvY2sgJWRcbiIsCisJCShpbnQpYmxvY2tfYWRkKTsKKworCWZvciAoaSA9IGJsb2NrX2FkZCAqIEdMT0JfTExEX1BBR0VTOworCSAgICAgaSA8ICgoYmxvY2tfYWRkICsgMSkgKiBHTE9CX0xMRF9QQUdFUyk7IGkrKykgeworCQlpZiAoZmxhc2hfbWVtb3J5W2ldKSB7CisJCQltZW1zZXQoKHU4ICopKGZsYXNoX21lbW9yeVtpXSksIDB4RkYsCisJCQkgICAgICAgRGV2aWNlSW5mby53UGFnZVNpemUgKiBzaXplb2YodTgpKTsKKwkJfQorCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X1dyaXRlX1BhZ2VfTWFpbgorKiBJbnB1dHM6ICAgICAgIFdyaXRlIGJ1ZmZlciBhZGRyZXNzIHBvaW50ZXIKKyogICAgICAgICAgICAgICBCbG9jayBudW1iZXIKKyogICAgICAgICAgICAgICBQYWdlICBudW1iZXIKKyogICAgICAgICAgICAgICBOdW1iZXIgb2YgcGFnZXMgdG8gcHJvY2VzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICBXcml0ZSB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIHRvIG1haW4gYXJlYSBvZiBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlpbnQgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQlyZXR1cm4gRkFJTDsKKworCWlmIChQYWdlICsgUGFnZUNvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykKKwkJcmV0dXJuIEZBSUw7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgImVtdV9Xcml0ZV9QYWdlX01haW46ICIKKwkJICAgICAgICJsYmEgJXUgUGFnZSAldSBQYWdlQ291bnQgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLAorCQkgICAgICAgKHVuc2lnbmVkIGludClQYWdlLCAodW5zaWduZWQgaW50KVBhZ2VDb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUGFnZUNvdW50OyBpKyspIHsKKwkJaWYgKE5VTEwgPT0gZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJSdW4gb3V0IG9mIG1lbW9yeVxuIik7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQltZW1jcHkoKHU4ICopIChmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSwKKwkJICAgICAgIHdyaXRlX2RhdGEsIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCXdyaXRlX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCQlQYWdlKys7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfUmVhZF9QYWdlX01haW4KKyogSW5wdXRzOiAgICAgICBSZWFkIGJ1ZmZlciBhZGRyZXNzIHBvaW50ZXIKKyogICAgICAgICAgICAgICBCbG9jayBudW1iZXIKKyogICAgICAgICAgICAgICBQYWdlICBudW1iZXIKKyogICAgICAgICAgICAgICBOdW1iZXIgb2YgcGFnZXMgdG8gcHJvY2VzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIGZsYXNoIG1haW4gYXJlYSB0byB0aGUgYnVmZmVyCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssCisJCQkgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCWludCBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCXJldHVybiBGQUlMOworCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKQorCQlyZXR1cm4gRkFJTDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiZW11X1JlYWRfUGFnZV9NYWluOiAiCisJCSAgICAgICAibGJhICV1IFBhZ2UgJXUgUGFnZUNvdW50ICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClCbG9jaywKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpUGFnZSwgKHVuc2lnbmVkIGludClQYWdlQ291bnQpOworCisJZm9yIChpID0gMDsgaSA8IFBhZ2VDb3VudDsgaSsrKSB7CisJCWlmIChOVUxMID09IGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pIHsKKwkJCW1lbXNldChyZWFkX2RhdGEsIDB4RkYsIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkocmVhZF9kYXRhLAorCQkJICAgICAgICh1OCAqKSAoZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMKKwkJCQkJCSAgICAgICsgUGFnZV0pLAorCQkJICAgICAgIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJCX0KKwkJcmVhZF9kYXRhICs9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwkJUGFnZSsrOworCX0KKworCXJldHVybiBQQVNTOworfQorCisjaWZuZGVmIEVMRE9SQQorLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9SZWFkX1BhZ2VfTWFpbl9TcGFyZQorKiBJbnB1dHM6ICAgICAgIFdyaXRlIEJ1ZmZlcgorKiAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcworKiAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIHNpemUKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBSZWFkIGZyb20gZmxhc2ggbWFpbitzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9SZWFkX1BhZ2VfTWFpbl9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssCisJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJaW50IGk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChCbG9jayA+PSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIlJlYWQgUGFnZSBNYWluK1NwYXJlICIKKwkJICAgICAgICJFcnJvcjogQmxvY2sgQWRkcmVzcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIE1haW4rU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBQYWdlIG51bWJlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJSZWFkIFBhZ2UgTWFpbiArIFNwYXJlIC0gIgorCQkgICAgICAgIk5vLiBvZiBwYWdlcyAldSBibG9jayAldSBzdGFydCBwYWdlICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClQYWdlQ291bnQsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UpOworCisJZm9yIChpID0gMDsgaSA8IFBhZ2VDb3VudDsgaSsrKSB7CisJCWlmIChOVUxMID09IGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0pIHsKKwkJCW1lbXNldChyZWFkX2RhdGEsIDB4RkYsIERldmljZUluZm8ud1BhZ2VTaXplKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShyZWFkX2RhdGEsICh1OCAqKSAoZmxhc2hfbWVtb3J5W0Jsb2NrICoKKwkJCQkJCQkJIEdMT0JfTExEX1BBR0VTCisJCQkJCQkJCSArIFBhZ2VdKSwKKwkJCSAgICAgICBEZXZpY2VJbmZvLndQYWdlU2l6ZSk7CisJCX0KKworCQlyZWFkX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJCVBhZ2UrKzsKKwl9CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIGVtdV9Xcml0ZV9QYWdlX01haW5fU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBidWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBsZW5ndGgKKyogT3V0cHV0czogICAgICBQQVNTPTAgKG5vdGljZSAwPW9rIGhlcmUpCisqIERlc2NyaXB0aW9uOiAgICAgICAgICBXcml0ZSB0aGUgYnVmZmVyIHRvIG1haW4rc3BhcmUgYXJlYSBvZiBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJIHUxNiBQYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MTYgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiV3JpdGUgUGFnZSBNYWluICsgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIHBhZ2VfY291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiV3JpdGUgUGFnZSBNYWluICsgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBQYWdlIG51bWJlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJXcml0ZSBQYWdlIE1haW4rU3BhcmUgLSAiCisJCSAgICAgICAiTm8uIG9mIHBhZ2VzICV1IGJsb2NrICV1IHN0YXJ0IHBhZ2UgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KXBhZ2VfY291bnQsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UpOworCisJZm9yIChpID0gMDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgeworCQlpZiAoTlVMTCA9PSBmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJ1biBvdXQgb2YgbWVtb3J5IVxuIik7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQltZW1jcHkoKHU4ICopIChmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSwKKwkJICAgICAgIHdyaXRlX2RhdGEsIERldmljZUluZm8ud1BhZ2VTaXplKTsKKwkJd3JpdGVfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlU2l6ZTsKKwkJUGFnZSsrOworCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgZW11X1dyaXRlX1BhZ2VfU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBidWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzaXplCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgV3JpdGUgdGhlIGJ1ZmZlciBpbiB0aGUgc3BhcmUgYXJlYQorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIFNwYXJlIEVycm9yOiAiCisJCSAgICAgICAiQmxvY2sgQWRkcmVzcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIFNwYXJlIEVycm9yOiAiCisJCSAgICAgICAiUGFnZSBudW1iZXIgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiV3JpdGUgUGFnZSBTcGFyZS0gIgorCQkgICAgICAgImJsb2NrICV1IHBhZ2UgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UpOworCisJaWYgKE5VTEwgPT0gZmxhc2hfbWVtb3J5W0Jsb2NrICogR0xPQl9MTERfUEFHRVMgKyBQYWdlXSkgeworCQlwcmludGsoS0VSTl9FUlIgIlJ1biBvdXQgb2YgbWVtb3J5IVxuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCW1lbWNweSgodTggKikgKGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0gKworCQkJIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSksIHdyaXRlX2RhdGEsCisJICAgICAgIChEZXZpY2VJbmZvLndQYWdlU2l6ZSAtIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSkpOworCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfUmVhZF9QYWdlX1NwYXJlCisqIElucHV0czogICAgICAgV3JpdGUgQnVmZmVyCisqICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzCisqICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgc2l6ZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlYWQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IGVtdV9SZWFkX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCSAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIFNwYXJlICIKKwkJICAgICAgICJFcnJvcjogQmxvY2sgQWRkcmVzcyB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJaWYgKFBhZ2UgKyBQYWdlQ291bnQgPiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIFNwYXJlICIKKwkJICAgICAgICJFcnJvcjogUGFnZSBudW1iZXIgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUmVhZCBQYWdlIFNwYXJlLSAiCisJCSAgICAgICAiYmxvY2sgJXUgcGFnZSAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssICh1bnNpZ25lZCBpbnQpUGFnZSk7CisKKwlpZiAoTlVMTCA9PSBmbGFzaF9tZW1vcnlbQmxvY2sgKiBHTE9CX0xMRF9QQUdFUyArIFBhZ2VdKSB7CisJCW1lbXNldCh3cml0ZV9kYXRhLCAweEZGLAorCQkgICAgICAgKERldmljZUluZm8ud1BhZ2VTaXplIC0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplKSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KHdyaXRlX2RhdGEsCisJCSAgICAgICAodTggKikgKGZsYXNoX21lbW9yeVtCbG9jayAqIEdMT0JfTExEX1BBR0VTICsgUGFnZV0KKwkJCQkgKyBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpLAorCQkgICAgICAgKERldmljZUluZm8ud1BhZ2VTaXplIC0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplKSk7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cworKiBJbnB1dHM6ICAgICAgIGVuYWJsZSBvciBkaXNhYmxlCisqIE91dHB1dHM6ICAgICAgbm9uZQorKiBEZXNjcmlwdGlvbjogIE5PUAorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3ZvaWQgZW11X0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHModTE2IElOVF9FTkFCTEUpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Cit9CisKK3UxNiBlbXVfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spCit7CisJcmV0dXJuIDA7Cit9CisKKyNpZiBDTURfRE1BCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIFN1cHBvcnQgZm9yIENETUEgZnVuY3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgZW11X0NETUFfRmxhc2hfSW5pdAorKiAgICAgICAgICAgQ0RNQV9wcm9jZXNzX2RhdGEgY29tbWFuZCAgICh1c2UgTExEX0NETUEpCisqICAgICAgICAgICBDRE1BX01lbUNvcHlfQ01EICAgICAgICAgICAgKHVzZSBMTERfQ0RNQSkKKyogICAgICAgZW11X0NETUFfZXhlY3V0ZSBhbGwgY29tbWFuZHMKKyogICAgICAgZW11X0NETUFfRXZlbnRfU3RhdHVzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X0NETUFfRmxhc2hfSW5pdCh2b2lkKQoreworCXUxNiBpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RFU0NTICsgTUFYX0NIQU5TOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSAwOworCQlQZW5kaW5nQ01EW2ldLlRhZyA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YUFkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLkJsb2NrID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlQ291bnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YVNyY0FkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250ID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1swXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMV0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzJdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1szXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbNF0gPSAwOworCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IDM7CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKK3N0YXRpYyB2b2lkIGVtdV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCS8qIFRPRE86ICAuLi4gKi8KK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIENETUFfRXhlY3V0ZV9DTURzCisqIElucHV0czogICAgICAgdGFnX2NvdW50OiAgdGhlIG51bWJlciBvZiBwZW5kaW5nIGNtZHMgdG8gZG8KKyogT3V0cHV0czogICAgICBQQVNTL0ZBSUwKKyogRGVzY3JpcHRpb246ICBleGVjdXRlIGVhY2ggY29tbWFuZCBpbiB0aGUgcGVuZGluZyBDTUQgYXJyYXkKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgZW11X0NETUFfRXhlY3V0ZV9DTURzKHUxNiB0YWdfY291bnQpCit7CisJdTE2IGksIGo7CisJdTggQ01EOwkJLyogY21kIHBhcmFtZXRlciAqLworCXU4ICpkYXRhOworCXUzMiBibG9jazsKKwl1MTYgcGFnZTsKKwl1MTYgY291bnQ7CisJdTE2IHN0YXR1cyA9IFBBU1M7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiQXQgc3RhcnQgb2YgRXhlY3V0ZSBDTURzOiAiCisJCSAgICAgICAiVGFnIENvdW50ICV1XG4iLCB0YWdfY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IHRvdGFsVXNlZEJhbmtzOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSBEVU1NWV9DTUQ7CisJCVBlbmRpbmdDTURbaV0uVGFnID0gMHhGRjsKKwkJUGVuZGluZ0NNRFtpXS5CbG9jayA9CisJCSAgICAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykgKiBpOworCisJCWZvciAoaiA9IDA7IGogPD0gTUFYX0NIQU5TOyBqKyspCisJCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jW2pdID0gMDsKKwl9CisKKwlDRE1BX0V4ZWN1dGVfQ01Ecyh0YWdfY291bnQpOworCisJcHJpbnRfcGVuZGluZ19jbWRzKHRhZ19jb3VudCk7CisKKyNpZiBERUJVR19TWU5DCisJfQorCWRlYnVnX3N5bmNfY250Kys7CisjZW5kaWYKKworCWZvciAoaSA9IE1BWF9DSEFOUzsKKwkgICAgIGkgPCB0YWdfY291bnQgKyBNQVhfQ0hBTlM7IGkrKykgeworCQlDTUQgPSBQZW5kaW5nQ01EW2ldLkNNRDsKKwkJZGF0YSA9IFBlbmRpbmdDTURbaV0uRGF0YUFkZHI7CisJCWJsb2NrID0gUGVuZGluZ0NNRFtpXS5CbG9jazsKKwkJcGFnZSA9IFBlbmRpbmdDTURbaV0uUGFnZTsKKwkJY291bnQgPSBQZW5kaW5nQ01EW2ldLlBhZ2VDb3VudDsKKworCQlzd2l0Y2ggKENNRCkgeworCQljYXNlIEVSQVNFX0NNRDoKKwkJCWVtdV9FcmFzZV9CbG9jayhibG9jayk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBXUklURV9NQUlOX0NNRDoKKwkJCWVtdV9Xcml0ZV9QYWdlX01haW4oZGF0YSwgYmxvY2ssIHBhZ2UsIGNvdW50KTsKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX01BSU5fU1BBUkVfQ01EOgorCQkJZW11X1dyaXRlX1BhZ2VfTWFpbl9TcGFyZShkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgUkVBRF9NQUlOX0NNRDoKKwkJCWVtdV9SZWFkX1BhZ2VfTWFpbihkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgTUVNQ09QWV9DTUQ6CisJCQltZW1jcHkoUGVuZGluZ0NNRFtpXS5EYXRhRGVzdEFkZHIsCisJCQkgICAgICAgUGVuZGluZ0NNRFtpXS5EYXRhU3JjQWRkciwKKwkJCSAgICAgICBQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250KTsKKwkJY2FzZSBEVU1NWV9DTUQ6CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gRkFJTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBUZW1wZXJvcnkgYWRkaW5nIGNvZGUgdG8gcmVzZXQgUGVuZGluZ0NNRCBhcnJheSBmb3IgYmFzaWMgdGVzdGluZy4KKwkgKiBJdCBzaG91bGQgYmUgZG9uZSBhdCB0aGUgZW5kIG9mICBldmVudCBzdGF0dXMgZnVuY3Rpb24uCisJICovCisJZm9yIChpID0gdGFnX2NvdW50ICsgTUFYX0NIQU5TOyBpIDwgTUFYX0RFU0NTOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSAwOworCQlQZW5kaW5nQ01EW2ldLlRhZyA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YUFkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLkJsb2NrID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlQ291bnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YVNyY0FkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250ID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1swXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMV0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzJdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1szXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbNF0gPSAwOworCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IENNRF9OT1RfRE9ORTsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIkF0IGVuZCBvZiBFeGVjdXRlIENNRHMuXG4iKTsKKworCWVtdV9pc3IoMCwgMCk7IC8qIFRoaXMgaXMgYSBudWxsIGlzciBub3cuIE5lZWQgZmlsbCBpdCBpbiBmdXR1cmUgKi8KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBlbXVfRXZlbnRfU3RhdHVzCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIEV2ZW50X1N0YXR1cyBjb2RlCisqIERlc2NyaXB0aW9uOiAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGZvcmNlIGVycm9ycworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBlbXVfQ0RNQV9FdmVudF9TdGF0dXModm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBFVkVOVF9QQVNTOworfQorCisjZW5kaWYgLyogQ01EX0RNQSAqLworI2VuZGlmIC8qICFFTERPUkEgKi8KKyNlbmRpZiAvKiBGTEFTSF9FTVUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9lbXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9lbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y4NGMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX2VtdS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9MTERfRU1VXworI2RlZmluZSBfTExEX0VNVV8KKworI2luY2x1ZGUgImZmc3BvcnQuaCIKKyNpbmNsdWRlICJmZnNkZWZzLmgiCisKKy8qIHByb3RvdHlwZXM6IGVtdWxhdG9yIEFQSSBmdW5jdGlvbnMgKi8KK2V4dGVybiB1MTYgZW11X0ZsYXNoX1Jlc2V0KHZvaWQpOworZXh0ZXJuIHUxNiBlbXVfRmxhc2hfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgZW11X0ZsYXNoX1JlbGVhc2Uodm9pZCk7CitleHRlcm4gdTE2IGVtdV9SZWFkX0RldmljZV9JRCh2b2lkKTsKK2V4dGVybiB1MTYgZW11X0VyYXNlX0Jsb2NrKHUzMiBibG9ja19hZGRyKTsKK2V4dGVybiB1MTYgZW11X1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgZW11X1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywgdTE2IFBhZ2UsCisJCQkJIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBlbXVfRXZlbnRfU3RhdHVzKHZvaWQpOworZXh0ZXJuIHZvaWQgZW11X0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHModTE2IElOVF9FTkFCTEUpOworZXh0ZXJuIHUxNiBlbXVfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgZW11X1dyaXRlX1BhZ2VfU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCQkJdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBlbXVfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLAorCQkJCSAgICAgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IGVtdV9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLCB1MTYgUGFnZSwKKwkJCQkgIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBlbXVfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spOworCit1MTYgZW11X0NETUFfRmxhc2hfSW5pdCh2b2lkKTsKK3UxNiBlbXVfQ0RNQV9FeGVjdXRlX0NNRHModTE2IHRhZ19jb3VudCk7Cit1MTYgZW11X0NETUFfRXZlbnRfU3RhdHVzKHZvaWQpOworI2VuZGlmIC8qX0xMRF9FTVVfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9tdGQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9tdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGUwNWIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5jCkBAIC0wLDAgKzEsNjg3IEBACisvKgorICogTkFORCBGbGFzaCBDb250cm9sbGVyIERldmljZSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29ycG9yYXRpb24gYW5kIGl0cyBzdXBwbGllcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJmbGFzaC5oIgorI2luY2x1ZGUgImZmc2RlZnMuaCIKKyNpbmNsdWRlICJsbGRfZW11LmgiCisjaW5jbHVkZSAibGxkLmgiCisjaWYgQ01EX0RNQQorI2luY2x1ZGUgImxsZF9jZG1hLmgiCisjZW5kaWYKKworI2RlZmluZSBHTE9CX0xMRF9QQUdFUyAgICAgICAgICAgNjQKKyNkZWZpbmUgR0xPQl9MTERfUEFHRV9TSVpFICAgICAgICg1MTIrMTYpCisjZGVmaW5lIEdMT0JfTExEX1BBR0VfREFUQV9TSVpFICA1MTIKKyNkZWZpbmUgR0xPQl9MTERfQkxPQ0tTICAgICAgICAgIDIwNDgKKworI2lmIENNRF9ETUEKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgordTMyIHRvdGFsVXNlZEJhbmtzOwordTMyIHZhbGlkX2JhbmtzW01BWF9DSEFOU107CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqc3BlY3RyYV9tdGQ7CitzdGF0aWMgaW50IG10ZGRldiA9IC0xOworbW9kdWxlX3BhcmFtKG10ZGRldiwgaW50LCAwKTsKKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9GbGFzaF9Jbml0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICBDcmVhdGVzICYgaW5pdGlhbGl6ZXMgdGhlIGZsYXNoIFJBTSBhcnJheS4KKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX0ZsYXNoX0luaXQodm9pZCkKK3sKKwlpZiAobXRkZGV2ID09IC0xKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gTVREIGRldmljZSBzcGVjaWZpZWQuIEdpdmUgbXRkZGV2IHBhcmFtZXRlclxuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCXNwZWN0cmFfbXRkID0gZ2V0X210ZF9kZXZpY2UoTlVMTCwgbXRkZGV2KTsKKwlpZiAoIXNwZWN0cmFfbXRkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG9idGFpbiBNVEQgZGV2aWNlICMlZFxuIiwgbXRkZGV2KTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9GbGFzaF9SZWxlYXNlCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlbGVhc2VzIHRoZSBmbGFzaC4KKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCitpbnQgbXRkX0ZsYXNoX1JlbGVhc2Uodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwlpZiAoIXNwZWN0cmFfbXRkKQorCQlyZXR1cm4gUEFTUzsKKworCXB1dF9tdGRfZGV2aWNlKHNwZWN0cmFfbXRkKTsKKwlzcGVjdHJhX210ZCA9IE5VTEw7CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9SZWFkX0RldmljZV9JRAorKiBJbnB1dHM6ICAgICAgIG5vbmUKKyogT3V0cHV0czogICAgICBQQVNTPTEgRkFJTD0wCisqIERlc2NyaXB0aW9uOiAgUmVhZHMgdGhlIGluZm8gZnJvbSB0aGUgY29udHJvbGxlciByZWdpc3RlcnMuCisqICAgICAgICAgICAgICAgU2V0cyB1cCBEZXZpY2VJbmZvIHN0cnVjdHVyZSB3aXRoIGRldmljZSBwYXJhbWV0ZXJzCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLworCit1MTYgbXRkX1JlYWRfRGV2aWNlX0lEKHZvaWQpCit7CisJdWludDY0X3QgdG1wOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKCFzcGVjdHJhX210ZCkKKwkJcmV0dXJuIEZBSUw7CisKKwlEZXZpY2VJbmZvLndEZXZpY2VNYWtlciA9IDA7CisJRGV2aWNlSW5mby53RGV2aWNlVHlwZSA9IDg7CisJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sgPSBTUEVDVFJBX1NUQVJUX0JMT0NLOworCXRtcCA9IHNwZWN0cmFfbXRkLT5zaXplOworCWRvX2Rpdih0bXAsIHNwZWN0cmFfbXRkLT5lcmFzZXNpemUpOworCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gdG1wOworCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayA9IERldmljZUluZm8ud1RvdGFsQmxvY2tzIC0gMTsKKwlEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrID0gc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSAvIHNwZWN0cmFfbXRkLT53cml0ZXNpemU7CisJRGV2aWNlSW5mby53UGFnZVNpemUgPSBzcGVjdHJhX210ZC0+d3JpdGVzaXplICsgc3BlY3RyYV9tdGQtPm9vYnNpemU7CisJRGV2aWNlSW5mby53UGFnZURhdGFTaXplID0gc3BlY3RyYV9tdGQtPndyaXRlc2l6ZTsKKwlEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplID0gc3BlY3RyYV9tdGQtPm9vYnNpemU7CisJRGV2aWNlSW5mby53QmxvY2tTaXplID0gRGV2aWNlSW5mby53UGFnZVNpemUgKiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOworCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKiBEZXZpY2VJbmZvLndQYWdlc1BlckJsb2NrOworCURldmljZUluZm8ud0RhdGFCbG9ja051bSA9ICh1MzIpIChEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLQorCQkJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sKKwkJCQkJCSsgMSk7CisJRGV2aWNlSW5mby5NTENEZXZpY2UgPSAwOy8vc3BlY3RyYV9tdGQtPmNlbGx0eXBlICYgTkFORF9DSV9DRUxMVFlQRV9NU0s7CisJRGV2aWNlSW5mby5uQml0c0luUGFnZU51bWJlciA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spOworCURldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSk7CisJRGV2aWNlSW5mby5uQml0c0luQmxvY2tEYXRhU2l6ZSA9CisJCSh1OClHTE9CX0NhbGNfVXNlZF9CaXRzKERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCisjaWYgQ01EX0RNQQorCXRvdGFsVXNlZEJhbmtzID0gNDsKKwl2YWxpZF9iYW5rc1swXSA9IDE7CisJdmFsaWRfYmFua3NbMV0gPSAxOworCXZhbGlkX2JhbmtzWzJdID0gMTsKKwl2YWxpZF9iYW5rc1szXSA9IDE7CisjZW5kaWYKKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX0ZsYXNoX1Jlc2V0CisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlc2V0IHRoZSBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBQQVNTOworfQorCit2b2lkIGVyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICplKQoreworCWNvbXBsZXRlKCh2b2lkICopZS0+cHJpdik7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfRXJhc2VfQmxvY2sKKyogSW5wdXRzOiAgICAgICBBZGRyZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgRXJhc2UgYSBibG9jaworKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfRXJhc2VfQmxvY2sodTMyIGJsb2NrX2FkZCkKK3sKKwlzdHJ1Y3QgZXJhc2VfaW5mbyBlcmFzZTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wKTsKKwlpbnQgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoYmxvY2tfYWRkID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXRkX0VyYXNlX0Jsb2NrIGVycm9yISAiCisJCSAgICAgICAiVG9vIGJpZyBibG9jayBhZGRyZXNzOiAlZFxuIiwgYmxvY2tfYWRkKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJFcmFzaW5nIGJsb2NrICVkXG4iLAorCQkoaW50KWJsb2NrX2FkZCk7CisKKwllcmFzZS5tdGQgPSBzcGVjdHJhX210ZDsKKwllcmFzZS5jYWxsYmFjayA9IGVyYXNlX2NhbGxiYWNrOworCWVyYXNlLmFkZHIgPSBibG9ja19hZGQgKiBzcGVjdHJhX210ZC0+ZXJhc2VzaXplOworCWVyYXNlLmxlbiA9IHNwZWN0cmFfbXRkLT5lcmFzZXNpemU7CisJZXJhc2UucHJpdiA9ICh1bnNpZ25lZCBsb25nKSZjb21wOworCisJcmV0ID0gc3BlY3RyYV9tdGQtPmVyYXNlKHNwZWN0cmFfbXRkLCAmZXJhc2UpOworCWlmICghcmV0KSB7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXApOworCQlpZiAoZXJhc2Uuc3RhdGUgIT0gTVREX0VSQVNFX0RPTkUpCisJCQlyZXQgPSAtRUlPOworCX0KKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10ZF9FcmFzZV9CbG9jayBlcnJvciEgIgorCQkgICAgICAgImVyYXNlIG9mIHJlZ2lvbiBbMHglbGx4LCAweCVsbHhdIGZhaWxlZFxuIiwKKwkJICAgICAgIGVyYXNlLmFkZHIsIGVyYXNlLmxlbik7CisJCXJldHVybiBGQUlMOworCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX1dyaXRlX1BhZ2VfTWFpbgorKiBJbnB1dHM6ICAgICAgIFdyaXRlIGJ1ZmZlciBhZGRyZXNzIHBvaW50ZXIKKyogICAgICAgICAgICAgICBCbG9jayBudW1iZXIKKyogICAgICAgICAgICAgICBQYWdlICBudW1iZXIKKyogICAgICAgICAgICAgICBOdW1iZXIgb2YgcGFnZXMgdG8gcHJvY2VzcworKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICBXcml0ZSB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyIHRvIG1haW4gYXJlYSBvZiBmbGFzaAorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkgICB1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCkKK3sKKwlzaXplX3QgcmV0bGVuOworCWludCByZXQgPSAwOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQlyZXR1cm4gRkFJTDsKKworCWlmIChQYWdlICsgUGFnZUNvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykKKwkJcmV0dXJuIEZBSUw7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIm10ZF9Xcml0ZV9QYWdlX01haW46ICIKKwkJICAgICAgICJsYmEgJXUgUGFnZSAldSBQYWdlQ291bnQgJXVcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLAorCQkgICAgICAgKHVuc2lnbmVkIGludClQYWdlLCAodW5zaWduZWQgaW50KVBhZ2VDb3VudCk7CisKKworCXdoaWxlIChQYWdlQ291bnQpIHsKKwkJcmV0ID0gc3BlY3RyYV9tdGQtPndyaXRlKHNwZWN0cmFfbXRkLAorCQkJCQkgKEJsb2NrICogc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSkgKyAoUGFnZSAqIHNwZWN0cmFfbXRkLT53cml0ZXNpemUpLAorCQkJCQkgRGV2aWNlSW5mby53UGFnZURhdGFTaXplLCAmcmV0bGVuLCB3cml0ZV9kYXRhKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQkJcmV0dXJuIEZBSUw7CisJCX0KKwkJd3JpdGVfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCVBhZ2UrKzsKKwkJUGFnZUNvdW50LS07CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBGdW5jdGlvbjogICAgIG10ZF9SZWFkX1BhZ2VfTWFpbgorKiBJbnB1dHM6ICAgICAgIFJlYWQgYnVmZmVyIGFkZHJlc3MgcG9pbnRlcgorKiAgICAgICAgICAgICAgIEJsb2NrIG51bWJlcgorKiAgICAgICAgICAgICAgIFBhZ2UgIG51bWJlcgorKiAgICAgICAgICAgICAgIE51bWJlciBvZiBwYWdlcyB0byBwcm9jZXNzCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogIFJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgZmxhc2ggbWFpbiBhcmVhIHRvIHRoZSBidWZmZXIKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywKKwkJCSAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0ID0gMDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQlyZXR1cm4gRkFJTDsKKworCWlmIChQYWdlICsgUGFnZUNvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykKKwkJcmV0dXJuIEZBSUw7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIm10ZF9SZWFkX1BhZ2VfTWFpbjogIgorCQkgICAgICAgImxiYSAldSBQYWdlICV1IFBhZ2VDb3VudCAldVxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBpbnQpQmxvY2ssCisJCSAgICAgICAodW5zaWduZWQgaW50KVBhZ2UsICh1bnNpZ25lZCBpbnQpUGFnZUNvdW50KTsKKworCisJd2hpbGUgKFBhZ2VDb3VudCkgeworCQlyZXQgPSBzcGVjdHJhX210ZC0+cmVhZChzcGVjdHJhX210ZCwKKwkJCQkJKEJsb2NrICogc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSkgKyAoUGFnZSAqIHNwZWN0cmFfbXRkLT53cml0ZXNpemUpLAorCQkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUsICZyZXRsZW4sIHJlYWRfZGF0YSk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCXJlYWRfZGF0YSArPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCVBhZ2UrKzsKKwkJUGFnZUNvdW50LS07CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworI2lmbmRlZiBFTERPUkEKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfUmVhZF9QYWdlX01haW5fU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBCdWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBzaXplCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgUmVhZCBmcm9tIGZsYXNoIG1haW4rc3BhcmUgYXJlYQorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLAorCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKEJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBQYWdlIE1haW4rU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgTWFpbitTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IFBhZ2UgbnVtYmVyICVkKyVkIHRvbyBiaWcgaW4gYmxvY2sgJWRcbiIsCisJCSAgICAgICBQYWdlLCBQYWdlQ291bnQsIEJsb2NrKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJSZWFkIFBhZ2UgTWFpbiArIFNwYXJlIC0gIgorCQkgICAgICAgIk5vLiBvZiBwYWdlcyAldSBibG9jayAldSBzdGFydCBwYWdlICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClQYWdlQ291bnQsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UpOworCisKKwl3aGlsZSAoUGFnZUNvdW50KSB7CisJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJCWludCByZXQ7CisKKwkJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJCW9wcy5kYXRidWYgPSByZWFkX2RhdGE7CisJCW9wcy5sZW4gPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJCW9wcy5vb2JidWYgPSByZWFkX2RhdGEgKyBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKyBCVFNJR19PRkZTRVQ7CisJCW9wcy5vb2JsZW4gPSBCVFNJR19CWVRFUzsKKwkJb3BzLm9vYm9mZnMgPSAwOworCisJCXJldCA9IHNwZWN0cmFfbXRkLT5yZWFkX29vYihzcGVjdHJhX210ZCwKKwkJCQkJICAgIChCbG9jayAqIHNwZWN0cmFfbXRkLT5lcmFzZXNpemUpICsgKFBhZ2UgKiBzcGVjdHJhX210ZC0+d3JpdGVzaXplKSwKKwkJCQkJICAgICZvcHMpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIHJldCk7CisJCQlyZXR1cm4gRkFJTDsKKwkJfQorCQlyZWFkX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJCVBhZ2UrKzsKKwkJUGFnZUNvdW50LS07CisJfQorCisJcmV0dXJuIFBBU1M7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfV3JpdGVfUGFnZV9NYWluX1NwYXJlCisqIElucHV0czogICAgICAgV3JpdGUgYnVmZmVyCisqICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzCisqICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgbGVuZ3RoCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgV3JpdGUgdGhlIGJ1ZmZlciB0byBtYWluK3NwYXJlIGFyZWEgb2YgZmxhc2gKKyoKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit1MTYgbXRkX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJCSB1MTYgUGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXcml0ZSBQYWdlIE1haW4gKyBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IEJsb2NrIEFkZHJlc3MgdG9vIGJpZ1xuIik7CisJCXJldHVybiBGQUlMOworCX0KKworCWlmIChQYWdlICsgcGFnZV9jb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXcml0ZSBQYWdlIE1haW4gKyBTcGFyZSAiCisJCSAgICAgICAiRXJyb3I6IFBhZ2UgbnVtYmVyICVkKyVkIHRvbyBiaWcgaW4gYmxvY2sgJWRcbiIsCisJCSAgICAgICBQYWdlLCBwYWdlX2NvdW50LCBCbG9jayk7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiBGQUlMOworCX0KKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiV3JpdGUgUGFnZSBNYWluK1NwYXJlIC0gIgorCQkgICAgICAgIk5vLiBvZiBwYWdlcyAldSBibG9jayAldSBzdGFydCBwYWdlICV1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGludClwYWdlX2NvdW50LAorCQkgICAgICAgKHVuc2lnbmVkIGludClCbG9jaywgKHVuc2lnbmVkIGludClQYWdlKTsKKworCXdoaWxlIChwYWdlX2NvdW50KSB7CisJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJCWludCByZXQ7CisKKwkJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJCW9wcy5kYXRidWYgPSB3cml0ZV9kYXRhOworCQlvcHMubGVuID0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCQlvcHMub29iYnVmID0gd3JpdGVfZGF0YSArIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSArIEJUU0lHX09GRlNFVDsKKwkJb3BzLm9vYmxlbiA9IEJUU0lHX0JZVEVTOworCQlvcHMub29ib2ZmcyA9IDA7CisKKwkJcmV0ID0gc3BlY3RyYV9tdGQtPndyaXRlX29vYihzcGVjdHJhX210ZCwKKwkJCQkJICAgICAoQmxvY2sgKiBzcGVjdHJhX210ZC0+ZXJhc2VzaXplKSArIChQYWdlICogc3BlY3RyYV9tdGQtPndyaXRlc2l6ZSksCisJCQkJCSAgICAgJm9wcyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJCXJldHVybiBGQUlMOworCQl9CisJCXdyaXRlX2RhdGEgKz0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJCVBhZ2UrKzsKKwkJcGFnZV9jb3VudC0tOworCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX1dyaXRlX1BhZ2VfU3BhcmUKKyogSW5wdXRzOiAgICAgICBXcml0ZSBidWZmZXIKKyogICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MKKyogICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciBzaXplCisqIE91dHB1dHM6ICAgICAgUEFTUz0wIChub3RpY2UgMD1vayBoZXJlKQorKiBEZXNjcmlwdGlvbjogICAgICAgICAgV3JpdGUgdGhlIGJ1ZmZlciBpbiB0aGUgc3BhcmUgYXJlYQorKgorKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfV3JpdGVfUGFnZV9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJICAgIHUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KQoreworCVdBUk5fT04oMSk7CisJcmV0dXJuIEZBSUw7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfUmVhZF9QYWdlX1NwYXJlCisqIElucHV0czogICAgICAgV3JpdGUgQnVmZmVyCisqICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzCisqICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgc2l6ZQorKiBPdXRwdXRzOiAgICAgIFBBU1M9MCAobm90aWNlIDA9b2sgaGVyZSkKKyogRGVzY3JpcHRpb246ICAgICAgICAgIFJlYWQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCisqCisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9SZWFkX1BhZ2VfU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIEJsb2NrLAorCQkJICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpCit7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlpZiAoQmxvY2sgPj0gRGV2aWNlSW5mby53VG90YWxCbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBCbG9jayBBZGRyZXNzIHRvbyBiaWdcbiIpOworCQlyZXR1cm4gRkFJTDsKKwl9CisKKwlpZiAoUGFnZSArIFBhZ2VDb3VudCA+IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJSZWFkIFBhZ2UgU3BhcmUgIgorCQkgICAgICAgIkVycm9yOiBQYWdlIG51bWJlciB0b28gYmlnXG4iKTsKKwkJcmV0dXJuIEZBSUw7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJSZWFkIFBhZ2UgU3BhcmUtICIKKwkJICAgICAgICJibG9jayAldSBwYWdlICV1ICgldSBwYWdlcylcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KUJsb2NrLCAodW5zaWduZWQgaW50KVBhZ2UsIFBhZ2VDb3VudCk7CisKKwl3aGlsZSAoUGFnZUNvdW50KSB7CisJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJCWludCByZXQ7CisKKwkJb3BzLm1vZGUgPSBNVERfT09CX0FVVE87CisJCW9wcy5kYXRidWYgPSBOVUxMOworCQlvcHMubGVuID0gMDsKKwkJb3BzLm9vYmJ1ZiA9IHJlYWRfZGF0YTsKKwkJb3BzLm9vYmxlbiA9IEJUU0lHX0JZVEVTOworCQlvcHMub29ib2ZmcyA9IDA7CisKKwkJcmV0ID0gc3BlY3RyYV9tdGQtPnJlYWRfb29iKHNwZWN0cmFfbXRkLAorCQkJCQkgICAgKEJsb2NrICogc3BlY3RyYV9tdGQtPmVyYXNlc2l6ZSkgKyAoUGFnZSAqIHNwZWN0cmFfbXRkLT53cml0ZXNpemUpLAorCQkJCQkgICAgJm9wcyk7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJCXJldHVybiBGQUlMOworCQl9CisKKwkJcmVhZF9kYXRhICs9IERldmljZUluZm8ud1BhZ2VTaXplOworCQlQYWdlKys7CisJCVBhZ2VDb3VudC0tOworCX0KKworCXJldHVybiBQQVNTOworfQorCisvKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmCisqIEZ1bmN0aW9uOiAgICAgbXRkX0VuYWJsZV9EaXNhYmxlX0ludGVycnVwdHMKKyogSW5wdXRzOiAgICAgICBlbmFibGUgb3IgZGlzYWJsZQorKiBPdXRwdXRzOiAgICAgIG5vbmUKKyogRGVzY3JpcHRpb246ICBOT1AKKyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiovCit2b2lkIG10ZF9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzKHUxNiBJTlRfRU5BQkxFKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworfQorCit1MTYgbXRkX0dldF9CYWRfQmxvY2sodTMyIGJsb2NrKQoreworCXJldHVybiAwOworfQorCisjaWYgQ01EX0RNQQorLyomJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgorKiBTdXBwb3J0IGZvciBDRE1BIGZ1bmN0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgIG10ZF9DRE1BX0ZsYXNoX0luaXQKKyogICAgICAgICAgIENETUFfcHJvY2Vzc19kYXRhIGNvbW1hbmQgICAodXNlIExMRF9DRE1BKQorKiAgICAgICAgICAgQ0RNQV9NZW1Db3B5X0NNRCAgICAgICAgICAgICh1c2UgTExEX0NETUEpCisqICAgICAgIG10ZF9DRE1BX2V4ZWN1dGUgYWxsIGNvbW1hbmRzCisqICAgICAgIG10ZF9DRE1BX0V2ZW50X1N0YXR1cworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9DRE1BX0ZsYXNoX0luaXQodm9pZCkKK3sKKwl1MTYgaTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERVNDUyArIE1BWF9DSEFOUzsgaSsrKSB7CisJCVBlbmRpbmdDTURbaV0uQ01EID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5UYWcgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFBZGRyID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5CbG9jayA9IDA7CisJCVBlbmRpbmdDTURbaV0uUGFnZSA9IDA7CisJCVBlbmRpbmdDTURbaV0uUGFnZUNvdW50ID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5EYXRhRGVzdEFkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFTcmNBZGRyID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5NZW1Db3B5Qnl0ZUNudCA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMF0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzFdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1syXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbM10gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzRdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSAzOworCX0KKworCXJldHVybiBQQVNTOworfQorCitzdGF0aWMgdm9pZCBtdGRfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBUT0RPOiAgLi4uICovCit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBDRE1BX0V4ZWN1dGVfQ01EcworKiBJbnB1dHM6ICAgICAgIHRhZ19jb3VudDogIHRoZSBudW1iZXIgb2YgcGVuZGluZyBjbWRzIHRvIGRvCisqIE91dHB1dHM6ICAgICAgUEFTUy9GQUlMCisqIERlc2NyaXB0aW9uOiAgZXhlY3V0ZSBlYWNoIGNvbW1hbmQgaW4gdGhlIHBlbmRpbmcgQ01EIGFycmF5CisqJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYqLwordTE2IG10ZF9DRE1BX0V4ZWN1dGVfQ01Ecyh1MTYgdGFnX2NvdW50KQoreworCXUxNiBpLCBqOworCXU4IENNRDsJCS8qIGNtZCBwYXJhbWV0ZXIgKi8KKwl1OCAqZGF0YTsKKwl1MzIgYmxvY2s7CisJdTE2IHBhZ2U7CisJdTE2IGNvdW50OworCXUxNiBzdGF0dXMgPSBQQVNTOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIkF0IHN0YXJ0IG9mIEV4ZWN1dGUgQ01EczogIgorCQkgICAgICAgIlRhZyBDb3VudCAldVxuIiwgdGFnX2NvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCB0b3RhbFVzZWRCYW5rczsgaSsrKSB7CisJCVBlbmRpbmdDTURbaV0uQ01EID0gRFVNTVlfQ01EOworCQlQZW5kaW5nQ01EW2ldLlRhZyA9IDB4RkY7CisJCVBlbmRpbmdDTURbaV0uQmxvY2sgPQorCQkgICAgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpICogaTsKKworCQlmb3IgKGogPSAwOyBqIDw9IE1BWF9DSEFOUzsgaisrKQorCQkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1tqXSA9IDA7CisJfQorCisJQ0RNQV9FeGVjdXRlX0NNRHModGFnX2NvdW50KTsKKworI2lmZGVmIFZFUkJPU0UKKwkJcHJpbnRfcGVuZGluZ19jbWRzKHRhZ19jb3VudCk7CisjZW5kaWYKKyNpZiBERUJVR19TWU5DCisJfQorCWRlYnVnX3N5bmNfY250Kys7CisjZW5kaWYKKworCWZvciAoaSA9IE1BWF9DSEFOUzsKKwkgICAgIGkgPCB0YWdfY291bnQgKyBNQVhfQ0hBTlM7IGkrKykgeworCQlDTUQgPSBQZW5kaW5nQ01EW2ldLkNNRDsKKwkJZGF0YSA9IFBlbmRpbmdDTURbaV0uRGF0YUFkZHI7CisJCWJsb2NrID0gUGVuZGluZ0NNRFtpXS5CbG9jazsKKwkJcGFnZSA9IFBlbmRpbmdDTURbaV0uUGFnZTsKKwkJY291bnQgPSBQZW5kaW5nQ01EW2ldLlBhZ2VDb3VudDsKKworCQlzd2l0Y2ggKENNRCkgeworCQljYXNlIEVSQVNFX0NNRDoKKwkJCW10ZF9FcmFzZV9CbG9jayhibG9jayk7CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJY2FzZSBXUklURV9NQUlOX0NNRDoKKwkJCW10ZF9Xcml0ZV9QYWdlX01haW4oZGF0YSwgYmxvY2ssIHBhZ2UsIGNvdW50KTsKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gUEFTUzsKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX01BSU5fU1BBUkVfQ01EOgorCQkJbXRkX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZShkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgUkVBRF9NQUlOX0NNRDoKKwkJCW10ZF9SZWFkX1BhZ2VfTWFpbihkYXRhLCBibG9jaywgcGFnZSwgY291bnQpOworCQkJUGVuZGluZ0NNRFtpXS5TdGF0dXMgPSBQQVNTOworCQkJYnJlYWs7CisJCWNhc2UgTUVNQ09QWV9DTUQ6CisJCQltZW1jcHkoUGVuZGluZ0NNRFtpXS5EYXRhRGVzdEFkZHIsCisJCQkgICAgICAgUGVuZGluZ0NNRFtpXS5EYXRhU3JjQWRkciwKKwkJCSAgICAgICBQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250KTsKKwkJY2FzZSBEVU1NWV9DTUQ6CisJCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IFBBU1M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVBlbmRpbmdDTURbaV0uU3RhdHVzID0gRkFJTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBUZW1wZXJvcnkgYWRkaW5nIGNvZGUgdG8gcmVzZXQgUGVuZGluZ0NNRCBhcnJheSBmb3IgYmFzaWMgdGVzdGluZy4KKwkgKiBJdCBzaG91bGQgYmUgZG9uZSBhdCB0aGUgZW5kIG9mICBldmVudCBzdGF0dXMgZnVuY3Rpb24uCisJICovCisJZm9yIChpID0gdGFnX2NvdW50ICsgTUFYX0NIQU5TOyBpIDwgTUFYX0RFU0NTOyBpKyspIHsKKwkJUGVuZGluZ0NNRFtpXS5DTUQgPSAwOworCQlQZW5kaW5nQ01EW2ldLlRhZyA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YUFkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLkJsb2NrID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5QYWdlQ291bnQgPSAwOworCQlQZW5kaW5nQ01EW2ldLkRhdGFEZXN0QWRkciA9IDA7CisJCVBlbmRpbmdDTURbaV0uRGF0YVNyY0FkZHIgPSAwOworCQlQZW5kaW5nQ01EW2ldLk1lbUNvcHlCeXRlQ250ID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1swXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbMV0gPSAwOworCQlQZW5kaW5nQ01EW2ldLkNoYW5TeW5jWzJdID0gMDsKKwkJUGVuZGluZ0NNRFtpXS5DaGFuU3luY1szXSA9IDA7CisJCVBlbmRpbmdDTURbaV0uQ2hhblN5bmNbNF0gPSAwOworCQlQZW5kaW5nQ01EW2ldLlN0YXR1cyA9IENNRF9OT1RfRE9ORTsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIkF0IGVuZCBvZiBFeGVjdXRlIENNRHMuXG4iKTsKKworCW10ZF9pc3IoMCwgMCk7IC8qIFRoaXMgaXMgYSBudWxsIGlzciBub3cuIE5lZWQgZmlsbCBpdCBpbiBmdXR1cmUgKi8KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYKKyogRnVuY3Rpb246ICAgICBtdGRfRXZlbnRfU3RhdHVzCisqIElucHV0czogICAgICAgbm9uZQorKiBPdXRwdXRzOiAgICAgIEV2ZW50X1N0YXR1cyBjb2RlCisqIERlc2NyaXB0aW9uOiAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGZvcmNlIGVycm9ycworKiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmKi8KK3UxNiBtdGRfQ0RNQV9FdmVudF9TdGF0dXModm9pZCkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldHVybiBFVkVOVF9QQVNTOworfQorCisjZW5kaWYgLyogQ01EX0RNQSAqLworI2VuZGlmIC8qICFFTERPUkEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9tdGQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2xsZF9tdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgxZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX210ZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9MTERfTVREXworI2RlZmluZSBfTExEX01URF8KKworI2luY2x1ZGUgImZmc3BvcnQuaCIKKyNpbmNsdWRlICJmZnNkZWZzLmgiCisKKy8qIHByb3RvdHlwZXM6IE1URCBBUEkgZnVuY3Rpb25zICovCitleHRlcm4gdTE2IG10ZF9GbGFzaF9SZXNldCh2b2lkKTsKK2V4dGVybiB1MTYgbXRkX0ZsYXNoX0luaXQodm9pZCk7CitleHRlcm4gaW50IG10ZF9GbGFzaF9SZWxlYXNlKHZvaWQpOworZXh0ZXJuIHUxNiBtdGRfUmVhZF9EZXZpY2VfSUQodm9pZCk7CitleHRlcm4gdTE2IG10ZF9FcmFzZV9CbG9jayh1MzIgYmxvY2tfYWRkcik7CitleHRlcm4gdTE2IG10ZF9Xcml0ZV9QYWdlX01haW4odTggKndyaXRlX2RhdGEsIHUzMiBCbG9jaywKKwkJCQl1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IG10ZF9SZWFkX1BhZ2VfTWFpbih1OCAqcmVhZF9kYXRhLCB1MzIgQmxvY2ssIHUxNiBQYWdlLAorCQkJCSB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgbXRkX0V2ZW50X1N0YXR1cyh2b2lkKTsKK2V4dGVybiB2b2lkIG10ZF9FbmFibGVfRGlzYWJsZV9JbnRlcnJ1cHRzKHUxNiBJTlRfRU5BQkxFKTsKK2V4dGVybiB1MTYgbXRkX1dyaXRlX1BhZ2VfTWFpbl9TcGFyZSh1OCAqd3JpdGVfZGF0YSwgdTMyIEJsb2NrLAorCQkJCQl1MTYgUGFnZSwgdTE2IFBhZ2VDb3VudCk7CitleHRlcm4gdTE2IG10ZF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgQmxvY2ssCisJCQkJCXUxNiBQYWdlLCB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgbXRkX1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywKKwkJCQkgICAgICAgdTE2IFBhZ2UsIHUxNiBQYWdlQ291bnQpOworZXh0ZXJuIHUxNiBtdGRfUmVhZF9QYWdlX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBCbG9jaywgdTE2IFBhZ2UsCisJCQkJICB1MTYgUGFnZUNvdW50KTsKK2V4dGVybiB1MTYgbXRkX0dldF9CYWRfQmxvY2sodTMyIGJsb2NrKTsKKwordTE2IG10ZF9DRE1BX0ZsYXNoX0luaXQodm9pZCk7Cit1MTYgbXRkX0NETUFfRXhlY3V0ZV9DTURzKHUxNiB0YWdfY291bnQpOwordTE2IG10ZF9DRE1BX0V2ZW50X1N0YXR1cyh2b2lkKTsKKyNlbmRpZiAvKl9MTERfTVREXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2MzYWQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX25hbmQuYwpAQCAtMCwwICsxLDI2MDEgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAibGxkLmgiCisjaW5jbHVkZSAibGxkX25hbmQuaCIKKyNpbmNsdWRlICJsbGRfY2RtYS5oIgorCisjaW5jbHVkZSAic3BlY3RyYXN3Y29uZmlnLmgiCisjaW5jbHVkZSAiZmxhc2guaCIKKyNpbmNsdWRlICJmZnNkZWZzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSAibmFuZF9yZWdzLmgiCisKKyNkZWZpbmUgU1BFQ1RSQV9OQU5EX05BTUUgICAgIm5kIgorCisjZGVmaW5lIENFSUxfRElWKFgsIFkpICgoKFgpJShZKSkgPyAoKFgpLyhZKSsxKSA6ICgoWCkvKFkpKSkKKyNkZWZpbmUgTUFYX1BBR0VTX1BFUl9SVyAgICAgICAgMTI4CisKKyNkZWZpbmUgSU5UX0lETEVfU1RBVEUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UX1JFQURfUEFHRV9NQUlOICAgIDB4MDEKKyNkZWZpbmUgSU5UX1dSSVRFX1BBR0VfTUFJTiAgICAweDAyCisjZGVmaW5lIElOVF9QSVBFTElORV9SRUFEX0FIRUFEICAgIDB4MDQKKyNkZWZpbmUgSU5UX1BJUEVMSU5FX1dSSVRFX0FIRUFEICAgIDB4MDgKKyNkZWZpbmUgSU5UX01VTFRJX1BMQU5FX1JFQUQgICAgMHgxMAorI2RlZmluZSBJTlRfTVVMVElfUExBTkVfV1JJVEUgICAgMHgxMQorCitzdGF0aWMgdTMyIGVuYWJsZV9lY2M7CisKK3N0cnVjdCBtcnN0X25hbmRfaW5mbyBpbmZvOworCitpbnQgdG90YWxVc2VkQmFua3M7Cit1MzIgR0xPQl92YWxpZF9iYW5rc1tMTERfTUFYX0ZMQVNIX0JBTktTXTsKKwordm9pZCBfX2lvbWVtICpGbGFzaFJlZzsKK3ZvaWQgX19pb21lbSAqRmxhc2hNZW07CisKK3UxNiBjb25mX3BhcmFtZXRlcnNbXSA9IHsKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDFGNCwKKwkweDAxRjQsCisJMHgwMUY0LAorCTB4MDFGNCwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMSwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwMCwKKwkweDAwMDAsCisJMHgwMDQwLAorCTB4MDAwMSwKKwkweDAwMEEsCisJMHgwMDBBLAorCTB4MDAwQSwKKwkweDAwMDAsCisJMHgwMDAwLAorCTB4MDAwNSwKKwkweDAwMTIsCisJMHgwMDBDCit9OworCit1MTYgICBOQU5EX0dldF9CYWRfQmxvY2sodTMyIGJsb2NrKQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXUzMiBmbGFnX2J5dGVzICA9IDA7CisJdTMyIHNraXBfYnl0ZXMgID0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJdTMyIHBhZ2UsIGk7CisJdTggKnBSZWFkU3BhcmVCdWYgPSBidWZfZ2V0X2JhZF9ibG9jazsKKworCWlmIChlbmFibGVfZWNjKQorCQlmbGFnX2J5dGVzID0gRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZzsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCAyOyBwYWdlKyspIHsKKwkJc3RhdHVzID0gTkFORF9SZWFkX1BhZ2VfU3BhcmUocFJlYWRTcGFyZUJ1ZiwgYmxvY2ssIHBhZ2UsIDEpOworCQlpZiAoc3RhdHVzICE9IFBBU1MpCisJCQlyZXR1cm4gUkVBRF9FUlJPUjsKKwkJZm9yIChpID0gZmxhZ19ieXRlczsgaSA8IChmbGFnX2J5dGVzICsgc2tpcF9ieXRlcyk7IGkrKykKKwkJCWlmIChwUmVhZFNwYXJlQnVmW2ldICE9IDB4ZmYpCisJCQkJcmV0dXJuIERFRkVDVElWRV9CTE9DSzsKKwl9CisKKwlmb3IgKHBhZ2UgPSAxOyBwYWdlIDwgMzsgcGFnZSsrKSB7CisJCXN0YXR1cyA9IE5BTkRfUmVhZF9QYWdlX1NwYXJlKHBSZWFkU3BhcmVCdWYsIGJsb2NrLAorCQkJRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayAtIHBhZ2UgLCAxKTsKKwkJaWYgKHN0YXR1cyAhPSBQQVNTKQorCQkJcmV0dXJuIFJFQURfRVJST1I7CisJCWZvciAoaSA9IGZsYWdfYnl0ZXM7IGkgPCAoZmxhZ19ieXRlcyArIHNraXBfYnl0ZXMpOyBpKyspCisJCQlpZiAocFJlYWRTcGFyZUJ1ZltpXSAhPSAweGZmKQorCQkJCXJldHVybiBERUZFQ1RJVkVfQkxPQ0s7CisJfQorCisJcmV0dXJuIEdPT0RfQkxPQ0s7Cit9CisKKwordTE2IE5BTkRfRmxhc2hfUmVzZXQodm9pZCkKK3sKKwl1MzIgaTsKKwl1MzIgaW50cl9zdGF0dXNfcnN0X2NvbXBbNF0gPSB7SU5UUl9TVEFUVVMwX19SU1RfQ09NUCwKKwkJSU5UUl9TVEFUVVMxX19SU1RfQ09NUCwKKwkJSU5UUl9TVEFUVVMyX19SU1RfQ09NUCwKKwkJSU5UUl9TVEFUVVMzX19SU1RfQ09NUH07CisJdTMyIGludHJfc3RhdHVzX3RpbWVfb3V0WzRdID0ge0lOVFJfU1RBVFVTMF9fVElNRV9PVVQsCisJCUlOVFJfU1RBVFVTMV9fVElNRV9PVVQsCisJCUlOVFJfU1RBVFVTMl9fVElNRV9PVVQsCisJCUlOVFJfU1RBVFVTM19fVElNRV9PVVR9OworCXUzMiBpbnRyX3N0YXR1c1s0XSA9IHtJTlRSX1NUQVRVUzAsIElOVFJfU1RBVFVTMSwKKwkJSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCXUzMiBkZXZpY2VfcmVzZXRfYmFua3NbNF0gPSB7REVWSUNFX1JFU0VUX19CQU5LMCwKKwkJREVWSUNFX1JFU0VUX19CQU5LMSwKKwkJREVWSUNFX1JFU0VUX19CQU5LMiwKKwkJREVWSUNFX1JFU0VUX19CQU5LM307CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDAgOyBpIDwgTExEX01BWF9GTEFTSF9CQU5LUzsgaSsrKQorCQlpb3dyaXRlMzIoaW50cl9zdGF0dXNfcnN0X2NvbXBbaV0gfCBpbnRyX3N0YXR1c190aW1lX291dFtpXSwKKwkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1c1tpXSk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IExMRF9NQVhfRkxBU0hfQkFOS1M7IGkrKykgeworCQlpb3dyaXRlMzIoZGV2aWNlX3Jlc2V0X2JhbmtzW2ldLCBGbGFzaFJlZyArIERFVklDRV9SRVNFVCk7CisJCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXNbaV0pICYKKwkJCShpbnRyX3N0YXR1c19yc3RfY29tcFtpXSB8IGludHJfc3RhdHVzX3RpbWVfb3V0W2ldKSkpCisJCQk7CisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzW2ldKSAmCisJCQlpbnRyX3N0YXR1c190aW1lX291dFtpXSkKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiTkFORCBSZXNldCBvcGVyYXRpb24gdGltZWQgb3V0IG9uIGJhbmsgJWRcbiIsIGkpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBMTERfTUFYX0ZMQVNIX0JBTktTOyBpKyspCisJCWlvd3JpdGUzMihpbnRyX3N0YXR1c19yc3RfY29tcFtpXSB8IGludHJfc3RhdHVzX3RpbWVfb3V0W2ldLAorCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1c1tpXSk7CisKKwlyZXR1cm4gUEFTUzsKK30KKworc3RhdGljIHZvaWQgTkFORF9PTkZpX1RpbWluZ19Nb2RlKHUxNiBtb2RlKQoreworCXUxNiBUcmVhWzZdID0gezQwLCAzMCwgMjUsIDIwLCAyMCwgMTZ9OworCXUxNiBUcnBbNl0gPSB7NTAsIDI1LCAxNywgMTUsIDEyLCAxMH07CisJdTE2IFRyZWhbNl0gPSB7MzAsIDE1LCAxNSwgMTAsIDEwLCA3fTsKKwl1MTYgVHJjWzZdID0gezEwMCwgNTAsIDM1LCAzMCwgMjUsIDIwfTsKKwl1MTYgVHJob2hbNl0gPSB7MCwgMTUsIDE1LCAxNSwgMTUsIDE1fTsKKwl1MTYgVHJsb2hbNl0gPSB7MCwgMCwgMCwgMCwgNSwgNX07CisJdTE2IFRjZWFbNl0gPSB7MTAwLCA0NSwgMzAsIDI1LCAyNSwgMjV9OworCXUxNiBUYWRsWzZdID0gezIwMCwgMTAwLCAxMDAsIDEwMCwgNzAsIDcwfTsKKwl1MTYgVHJod1s2XSA9IHsyMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwfTsKKwl1MTYgVHJoels2XSA9IHsyMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwfTsKKwl1MTYgVHdocls2XSA9IHsxMjAsIDgwLCA4MCwgNjAsIDYwLCA2MH07CisJdTE2IFRjc1s2XSA9IHs3MCwgMzUsIDI1LCAyNSwgMjAsIDE1fTsKKworCXUxNiBUY2xzUmlzaW5nID0gMTsKKwl1MTYgZGF0YV9pbnZhbGlkX3Job2gsIGRhdGFfaW52YWxpZF9ybG9oLCBkYXRhX2ludmFsaWQ7CisJdTE2IGR2X3dpbmRvdyA9IDA7CisJdTE2IGVuX2xvLCBlbl9oaTsKKwl1MTYgYWNjX2Nsa3M7CisJdTE2IGFkZHJfMl9kYXRhLCByZV8yX3dlLCByZV8yX3JlLCB3ZV8yX3JlLCBjc19jbnQ7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWVuX2xvID0gQ0VJTF9ESVYoVHJwW21vZGVdLCBDTEtfWCk7CisJZW5faGkgPSBDRUlMX0RJVihUcmVoW21vZGVdLCBDTEtfWCk7CisKKyNpZiBPTkZJX0JMT09NX1RJTUUKKwlpZiAoKGVuX2hpICogQ0xLX1gpIDwgKFRyZWhbbW9kZV0gKyAyKSkKKwkJZW5faGkrKzsKKyNlbmRpZgorCisJaWYgKChlbl9sbyArIGVuX2hpKSAqIENMS19YIDwgVHJjW21vZGVdKQorCQllbl9sbyArPSBDRUlMX0RJVigoVHJjW21vZGVdIC0gKGVuX2xvICsgZW5faGkpICogQ0xLX1gpLCBDTEtfWCk7CisKKwlpZiAoKGVuX2xvICsgZW5faGkpIDwgQ0xLX01VTFRJKQorCQllbl9sbyArPSBDTEtfTVVMVEkgLSBlbl9sbyAtIGVuX2hpOworCisJd2hpbGUgKGR2X3dpbmRvdyA8IDgpIHsKKwkJZGF0YV9pbnZhbGlkX3Job2ggPSBlbl9sbyAqIENMS19YICsgVHJob2hbbW9kZV07CisKKwkJZGF0YV9pbnZhbGlkX3Jsb2ggPSAoZW5fbG8gKyBlbl9oaSkgKiBDTEtfWCArIFRybG9oW21vZGVdOworCisJCWRhdGFfaW52YWxpZCA9CisJCSAgICBkYXRhX2ludmFsaWRfcmhvaCA8CisJCSAgICBkYXRhX2ludmFsaWRfcmxvaCA/IGRhdGFfaW52YWxpZF9yaG9oIDogZGF0YV9pbnZhbGlkX3Jsb2g7CisKKwkJZHZfd2luZG93ID0gZGF0YV9pbnZhbGlkIC0gVHJlYVttb2RlXTsKKworCQlpZiAoZHZfd2luZG93IDwgOCkKKwkJCWVuX2xvKys7CisJfQorCisJYWNjX2Nsa3MgPSBDRUlMX0RJVihUcmVhW21vZGVdLCBDTEtfWCk7CisKKwl3aGlsZSAoKChhY2NfY2xrcyAqIENMS19YKSAtIFRyZWFbbW9kZV0pIDwgMykKKwkJYWNjX2Nsa3MrKzsKKworCWlmICgoZGF0YV9pbnZhbGlkIC0gYWNjX2Nsa3MgKiBDTEtfWCkgPCAyKQorCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQ6IFdhcm5pbmchXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fKTsKKworCWFkZHJfMl9kYXRhID0gQ0VJTF9ESVYoVGFkbFttb2RlXSwgQ0xLX1gpOworCXJlXzJfd2UgPSBDRUlMX0RJVihUcmh3W21vZGVdLCBDTEtfWCk7CisJcmVfMl9yZSA9IENFSUxfRElWKFRyaHpbbW9kZV0sIENMS19YKTsKKwl3ZV8yX3JlID0gQ0VJTF9ESVYoVHdoclttb2RlXSwgQ0xLX1gpOworCWNzX2NudCA9IENFSUxfRElWKChUY3NbbW9kZV0gLSBUcnBbbW9kZV0pLCBDTEtfWCk7CisJaWYgKCFUY2xzUmlzaW5nKQorCQljc19jbnQgPSBDRUlMX0RJVihUY3NbbW9kZV0sIENMS19YKTsKKwlpZiAoY3NfY250ID09IDApCisJCWNzX2NudCA9IDE7CisKKwlpZiAoVGNlYVttb2RlXSkgeworCQl3aGlsZSAoKChjc19jbnQgKiBDTEtfWCkgKyBUcmVhW21vZGVdKSA8IFRjZWFbbW9kZV0pCisJCQljc19jbnQrKzsKKwl9CisKKyNpZiBNT0RFNV9XT1JLQVJPVU5ECisJaWYgKG1vZGUgPT0gNSkKKwkJYWNjX2Nsa3MgPSA1OworI2VuZGlmCisKKwkvKiBTaWdodGluZyAzNDYyNDMwOiBUZW1wb3JhcnkgaGFjayBmb3IgTVQyOUYxMjhHMDhDSkFCQVdQOkIgKi8KKwlpZiAoKGlvcmVhZDMyKEZsYXNoUmVnICsgTUFOVUZBQ1RVUkVSX0lEKSA9PSAwKSAmJgorCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfSUQpID09IDB4ODgpKQorCQlhY2NfY2xrcyA9IDY7CisKKwlpb3dyaXRlMzIoYWNjX2Nsa3MsIEZsYXNoUmVnICsgQUNDX0NMS1MpOworCWlvd3JpdGUzMihyZV8yX3dlLCBGbGFzaFJlZyArIFJFXzJfV0UpOworCWlvd3JpdGUzMihyZV8yX3JlLCBGbGFzaFJlZyArIFJFXzJfUkUpOworCWlvd3JpdGUzMih3ZV8yX3JlLCBGbGFzaFJlZyArIFdFXzJfUkUpOworCWlvd3JpdGUzMihhZGRyXzJfZGF0YSwgRmxhc2hSZWcgKyBBRERSXzJfREFUQSk7CisJaW93cml0ZTMyKGVuX2xvLCBGbGFzaFJlZyArIFJEV1JfRU5fTE9fQ05UKTsKKwlpb3dyaXRlMzIoZW5faGksIEZsYXNoUmVnICsgUkRXUl9FTl9ISV9DTlQpOworCWlvd3JpdGUzMihjc19jbnQsIEZsYXNoUmVnICsgQ1NfU0VUVVBfQ05UKTsKK30KKworc3RhdGljIHZvaWQgaW5kZXhfYWRkcih1MzIgYWRkcmVzcywgdTMyIGRhdGEpCit7CisJaW93cml0ZTMyKGFkZHJlc3MsIEZsYXNoTWVtKTsKKwlpb3dyaXRlMzIoZGF0YSwgRmxhc2hNZW0gKyAweDEwKTsKK30KKworc3RhdGljIHZvaWQgaW5kZXhfYWRkcl9yZWFkX2RhdGEodTMyIGFkZHJlc3MsIHUzMiAqcGRhdGEpCit7CisJaW93cml0ZTMyKGFkZHJlc3MsIEZsYXNoTWVtKTsKKwkqcGRhdGEgPSBpb3JlYWQzMihGbGFzaE1lbSArIDB4MTApOworfQorCitzdGF0aWMgdm9pZCBzZXRfZWNjX2NvbmZpZyh2b2lkKQoreworI2lmIFNVUFBPUlRfOEJJVEVDQworCWlmICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfTUFJTl9BUkVBX1NJWkUpIDwgNDA5NikgfHwKKwkJKGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1NQQVJFX0FSRUFfU0laRSkgPD0gMTI4KSkKKwkJaW93cml0ZTMyKDgsIEZsYXNoUmVnICsgRUNDX0NPUlJFQ1RJT04pOworI2VuZGlmCisKKwlpZiAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRUNDX0NPUlJFQ1RJT04pICYgRUNDX0NPUlJFQ1RJT05fX1ZBTFVFKQorCQk9PSAxKSB7CisJCURldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yID0gNDsKKwkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgKj0gRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZDsKKwkJRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZyA9CisJCQlEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplIC0KKwkJCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAvCisJCQkoRUNDX1NFQ1RPUl9TSVpFICogRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCkgKgorCQkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IKKwkJCS0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJfSBlbHNlIHsKKwkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgPQorCQkJKGlvcmVhZDMyKEZsYXNoUmVnICsgRUNDX0NPUlJFQ1RJT04pICYKKwkJCUVDQ19DT1JSRUNUSU9OX19WQUxVRSkgKiAxMyAvIDg7CisJCWlmICgoRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IpICUgMiA9PSAwKQorCQkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgKz0gMjsKKwkJZWxzZQorCQkJRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3IgKz0gMTsKKworCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvciAqPSBEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkOworCQlEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnID0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSAtCisJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLworCQkJKEVDQ19TRUNUT1JfU0laRSAqIERldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQpICoKKwkJCURldmljZUluZm8ud0VDQ0J5dGVzUGVyU2VjdG9yCisJCQktIERldmljZUluZm8ud1NwYXJlU2tpcEJ5dGVzOworCX0KK30KKworc3RhdGljIHUxNiBnZXRfb25maV9uYW5kX3BhcmEodm9pZCkKK3sKKwlpbnQgaTsKKwl1MTYgYmxrc19sdW5fbCwgYmxrc19sdW5faCwgbl9vZl9sdW5zOworCXUzMiBibG9ja3Blcmx1biwgaWQ7CisKKwlpb3dyaXRlMzIoREVWSUNFX1JFU0VUX19CQU5LMCwgRmxhc2hSZWcgKyBERVZJQ0VfUkVTRVQpOworCisJd2hpbGUgKCEoKGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKSAmCisJCUlOVFJfU1RBVFVTMF9fUlNUX0NPTVApIHwKKwkJKGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKSAmCisJCUlOVFJfU1RBVFVTMF9fVElNRV9PVVQpKSkKKwkJOworCisJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMwKSAmIElOVFJfU1RBVFVTMF9fUlNUX0NPTVApIHsKKwkJaW93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzEsIEZsYXNoUmVnICsgREVWSUNFX1JFU0VUKTsKKwkJd2hpbGUgKCEoKGlvcmVhZDMyKEZsYXNoUmVnICsgSU5UUl9TVEFUVVMxKSAmCisJCQlJTlRSX1NUQVRVUzFfX1JTVF9DT01QKSB8CisJCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpICYKKwkJCUlOVFJfU1RBVFVTMV9fVElNRV9PVVQpKSkKKwkJCTsKKworCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpICYKKwkJCUlOVFJfU1RBVFVTMV9fUlNUX0NPTVApIHsKKwkJCWlvd3JpdGUzMihERVZJQ0VfUkVTRVRfX0JBTksyLAorCQkJCUZsYXNoUmVnICsgREVWSUNFX1JFU0VUKTsKKwkJCXdoaWxlICghKChpb3JlYWQzMihGbGFzaFJlZyArIElOVFJfU1RBVFVTMikgJgorCQkJCUlOVFJfU1RBVFVTMl9fUlNUX0NPTVApIHwKKwkJCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpICYKKwkJCQlJTlRSX1NUQVRVUzJfX1RJTUVfT1VUKSkpCisJCQkJOworCisJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpICYKKwkJCQlJTlRSX1NUQVRVUzJfX1JTVF9DT01QKSB7CisJCQkJaW93cml0ZTMyKERFVklDRV9SRVNFVF9fQkFOSzMsCisJCQkJCUZsYXNoUmVnICsgREVWSUNFX1JFU0VUKTsKKwkJCQl3aGlsZSAoISgoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzMpICYKKwkJCQkJSU5UUl9TVEFUVVMzX19SU1RfQ09NUCkgfAorCQkJCQkoaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzMpICYKKwkJCQkJSU5UUl9TVEFUVVMzX19USU1FX09VVCkpKQorCQkJCQk7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiR2V0dGluZyBhIHRpbWUgb3V0IGZvciBiYW5rIDIhXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiR2V0dGluZyBhIHRpbWUgb3V0IGZvciBiYW5rIDEhXG4iKTsKKwkJfQorCX0KKworCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX1RJTUVfT1VULCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMCk7CisJaW93cml0ZTMyKElOVFJfU1RBVFVTMV9fVElNRV9PVVQsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMxKTsKKwlpb3dyaXRlMzIoSU5UUl9TVEFUVVMyX19USU1FX09VVCwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpOworCWlvd3JpdGUzMihJTlRSX1NUQVRVUzNfX1RJTUVfT1VULCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMyk7CisKKwlEZXZpY2VJbmZvLndPTkZJRGV2RmVhdHVyZXMgPQorCQlpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfREVWSUNFX0ZFQVRVUkVTKTsKKwlEZXZpY2VJbmZvLndPTkZJT3B0Q29tbWFuZHMgPQorCQlpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfT1BUSU9OQUxfQ09NTUFORFMpOworCURldmljZUluZm8ud09ORklUaW1pbmdNb2RlID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX1RJTUlOR19NT0RFKTsKKwlEZXZpY2VJbmZvLndPTkZJUGdtQ2FjaGVUaW1pbmdNb2RlID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX1BHTV9DQUNIRV9USU1JTkdfTU9ERSk7CisKKwluX29mX2x1bnMgPSBpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfREVWSUNFX05PX09GX0xVTlMpICYKKwkJT05GSV9ERVZJQ0VfTk9fT0ZfTFVOU19fTk9fT0ZfTFVOUzsKKwlibGtzX2x1bl9sID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9MKTsKKwlibGtzX2x1bl9oID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9VKTsKKworCWJsb2NrcGVybHVuID0gKGJsa3NfbHVuX2ggPDwgMTYpIHwgYmxrc19sdW5fbDsKKworCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gbl9vZl9sdW5zICogYmxvY2twZXJsdW47CisKKwlpZiAoIShpb3JlYWQzMihGbGFzaFJlZyArIE9ORklfVElNSU5HX01PREUpICYKKwkJT05GSV9USU1JTkdfTU9ERV9fVkFMVUUpKQorCQlyZXR1cm4gRkFJTDsKKworCWZvciAoaSA9IDU7IGkgPiAwOyBpLS0pIHsKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgT05GSV9USU1JTkdfTU9ERSkgJiAoMHgwMSA8PCBpKSkKKwkJCWJyZWFrOworCX0KKworCU5BTkRfT05GaV9UaW1pbmdfTW9kZShpKTsKKworCWluZGV4X2FkZHIoTU9ERV8xMSB8IDAsIDB4OTApOworCWluZGV4X2FkZHIoTU9ERV8xMSB8IDEsIDApOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoTU9ERV8xMSB8IDIsICZpZCk7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIjNyZCBJRDogMHgleFxuIiwgaWQpOworCisJRGV2aWNlSW5mby5NTENEZXZpY2UgPSBpZCAmIDB4MEM7CisKKwkvKiBCeSBub3csIGFsbCB0aGUgT05GSSBkZXZpY2VzIHdlIGtub3cgc3VwcG9ydCB0aGUgcGFnZSBjYWNoZSAqLworCS8qIHJ3IGZlYXR1cmUuIFNvIGhlcmUgd2UgZW5hYmxlIHRoZSBwaXBlbGluZV9yd19haGVhZCBmZWF0dXJlICovCisJLyogaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgQ0FDSEVfV1JJVEVfRU5BQkxFKTsgKi8KKwkvKiBpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBDQUNIRV9SRUFEX0VOQUJMRSk7ICAqLworCisJcmV0dXJuIFBBU1M7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zYW1zdW5nX25hbmRfcGFyYSh2b2lkKQoreworCXU4IG5vX29mX3BsYW5lczsKKwl1MzIgYmxrX3NpemU7CisJdTY0IHBsYW5lX3NpemUsIGNhcGFjaXR5OworCXUzMiBpZF9ieXRlc1s1XTsKKwlpbnQgaTsKKworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMSB8IDApLCAweDkwKTsKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTEgfCAxKSwgMCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJaW5kZXhfYWRkcl9yZWFkX2RhdGEoKHUzMikoTU9ERV8xMSB8IDIpLCAmaWRfYnl0ZXNbaV0pOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsCisJCSJJRCBieXRlczogMHgleCwgMHgleCwgMHgleCwgMHgleCwgMHgleFxuIiwKKwkJaWRfYnl0ZXNbMF0sIGlkX2J5dGVzWzFdLCBpZF9ieXRlc1syXSwKKwkJaWRfYnl0ZXNbM10sIGlkX2J5dGVzWzRdKTsKKworCWlmICgoaWRfYnl0ZXNbMV0gJiAweGZmKSA9PSAweGQzKSB7IC8qIFNhbXN1bmcgSzlXQUcwOFUxQSAqLworCQkvKiBTZXQgdGltaW5nIHJlZ2lzdGVyIHZhbHVlcyBhY2NvcmRpbmcgdG8gZGF0YXNoZWV0ICovCisJCWlvd3JpdGUzMig1LCBGbGFzaFJlZyArIEFDQ19DTEtTKTsKKwkJaW93cml0ZTMyKDIwLCBGbGFzaFJlZyArIFJFXzJfV0UpOworCQlpb3dyaXRlMzIoMTIsIEZsYXNoUmVnICsgV0VfMl9SRSk7CisJCWlvd3JpdGUzMigxNCwgRmxhc2hSZWcgKyBBRERSXzJfREFUQSk7CisJCWlvd3JpdGUzMigzLCBGbGFzaFJlZyArIFJEV1JfRU5fTE9fQ05UKTsKKwkJaW93cml0ZTMyKDIsIEZsYXNoUmVnICsgUkRXUl9FTl9ISV9DTlQpOworCQlpb3dyaXRlMzIoMiwgRmxhc2hSZWcgKyBDU19TRVRVUF9DTlQpOworCX0KKworCW5vX29mX3BsYW5lcyA9IDEgPDwgKChpZF9ieXRlc1s0XSAmIDB4MGMpID4+IDIpOworCXBsYW5lX3NpemUgID0gKHU2NCk2NCA8PCAoKGlkX2J5dGVzWzRdICYgMHg3MCkgPj4gNCk7CisJYmxrX3NpemUgPSA2NCA8PCAoKGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1BBUkFNXzEpICYgMHgzMCkgPj4gNCk7CisJY2FwYWNpdHkgPSAodTY0KTEyOCAqIHBsYW5lX3NpemUgKiBub19vZl9wbGFuZXM7CisKKwlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA9ICh1MzIpR0xPQl91NjRfRGl2KGNhcGFjaXR5LCBibGtfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF90b3NoaWJhX25hbmRfcGFyYSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqc2NyYXRjaF9yZWc7CisJdTMyIHRtcDsKKworCS8qIFdvcmthcm91bmQgdG8gZml4IGEgY29udHJvbGxlciBidWcgd2hpY2ggcmVwb3J0cyBhIHdyb25nICovCisJLyogc3BhcmUgYXJlYSBzaXplIGZvciBzb21lIGtpbmQgb2YgVG9zaGliYSBOQU5EIGRldmljZSAqLworCWlmICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfTUFJTl9BUkVBX1NJWkUpID09IDQwOTYpICYmCisJCShpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9TUEFSRV9BUkVBX1NJWkUpID09IDY0KSkgeworCQlpb3dyaXRlMzIoMjE2LCBGbGFzaFJlZyArIERFVklDRV9TUEFSRV9BUkVBX1NJWkUpOworCQl0bXAgPSBpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRVNfQ09OTkVDVEVEKSAqCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9TUEFSRV9BUkVBX1NJWkUpOworCQlpb3dyaXRlMzIodG1wLCBGbGFzaFJlZyArIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFKTsKKyNpZiBTVVBQT1JUXzE1QklURUNDCisJCWlvd3JpdGUzMigxNSwgRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTik7CisjZWxpZiBTVVBQT1JUXzhCSVRFQ0MKKwkJaW93cml0ZTMyKDgsIEZsYXNoUmVnICsgRUNDX0NPUlJFQ1RJT04pOworI2VuZGlmCisJfQorCisJLyogQXMgVG9zaGliYSBOQU5EIGNhbiBub3QgcHJvdmlkZSBpdCdzIGJsb2NrIG51bWJlciwgKi8KKwkvKiBzbyBoZXJlIHdlIG5lZWQgdXNlciB0byBwcm92aWRlIHRoZSBjb3JyZWN0IGJsb2NrICovCisJLyogbnVtYmVyIGluIGEgc2NyYXRjaCByZWdpc3RlciBiZWZvcmUgdGhlIExpbnV4IE5BTkQgKi8KKwkvKiBkcml2ZXIgaXMgbG9hZGVkLiBJZiBubyB2YWxpZCB2YWx1ZSBmb3VuZCBpbiB0aGUgc2NyYXRjaCAqLworCS8qIHJlZ2lzdGVyLCB0aGVuIHdlIHVzZSBkZWZhdWx0IGJsb2NrIG51bWJlciB2YWx1ZSAqLworCXNjcmF0Y2hfcmVnID0gaW9yZW1hcF9ub2NhY2hlKFNDUkFUQ0hfUkVHX0FERFIsIFNDUkFUQ0hfUkVHX1NJWkUpOworCWlmICghc2NyYXRjaF9yZWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBpb3JlbWFwIGZhaWxlZCBpbiAlcywgTGluZSAlZCIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA9IEdMT0JfSFdDVExfREVGQVVMVF9CTEtTOworCX0gZWxzZSB7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiU3BlY3RyYTogaW9yZW1hcCByZWcgYWRkcmVzczogMHglcFxuIiwgc2NyYXRjaF9yZWcpOworCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA9IDEgPDwgaW9yZWFkOChzY3JhdGNoX3JlZyk7CisJCWlmIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyA8IDUxMikKKwkJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7CisJCWlvdW5tYXAoc2NyYXRjaF9yZWcpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2h5bml4X25hbmRfcGFyYSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqc2NyYXRjaF9yZWc7CisJdTMyIG1haW5fc2l6ZSwgc3BhcmVfc2l6ZTsKKworCXN3aXRjaCAoRGV2aWNlSW5mby53RGV2aWNlSUQpIHsKKwljYXNlIDB4RDU6IC8qIEh5bml4IEgyN1VBRzhUMkEsIEgyN1VCRzhVNUEgb3IgSDI3VUNHOFZGQSAqLworCWNhc2UgMHhENzogLyogSHluaXggSDI3VURHOFZFTSwgSDI3VUNHOFVETSBvciBIMjdVQ0c4VjVBICovCisJCWlvd3JpdGUzMigxMjgsIEZsYXNoUmVnICsgUEFHRVNfUEVSX0JMT0NLKTsKKwkJaW93cml0ZTMyKDQwOTYsIEZsYXNoUmVnICsgREVWSUNFX01BSU5fQVJFQV9TSVpFKTsKKwkJaW93cml0ZTMyKDIyNCwgRmxhc2hSZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKTsKKwkJbWFpbl9zaXplID0gNDA5NiAqIGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFU19DT05ORUNURUQpOworCQlzcGFyZV9zaXplID0gMjI0ICogaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VTX0NPTk5FQ1RFRCk7CisJCWlvd3JpdGUzMihtYWluX3NpemUsIEZsYXNoUmVnICsgTE9HSUNBTF9QQUdFX0RBVEFfU0laRSk7CisJCWlvd3JpdGUzMihzcGFyZV9zaXplLCBGbGFzaFJlZyArIExPR0lDQUxfUEFHRV9TUEFSRV9TSVpFKTsKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgREVWSUNFX1dJRFRIKTsKKyNpZiBTVVBQT1JUXzE1QklURUNDCisJCWlvd3JpdGUzMigxNSwgRmxhc2hSZWcgKyBFQ0NfQ09SUkVDVElPTik7CisjZWxpZiBTVVBQT1JUXzhCSVRFQ0MKKwkJaW93cml0ZTMyKDgsIEZsYXNoUmVnICsgRUNDX0NPUlJFQ1RJT04pOworI2VuZGlmCisJCURldmljZUluZm8uTUxDRGV2aWNlICA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiU3BlY3RyYTogVW5rbm93biBIeW5peCBOQU5EIChEZXZpY2UgSUQ6IDB4JXgpLiIKKwkJCSJXaWxsIHVzZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgaW5zdGVhZC5cbiIsCisJCQlEZXZpY2VJbmZvLndEZXZpY2VJRCk7CisJfQorCisJc2NyYXRjaF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoU0NSQVRDSF9SRUdfQUREUiwgU0NSQVRDSF9SRUdfU0laRSk7CisJaWYgKCFzY3JhdGNoX3JlZykgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGlvcmVtYXAgZmFpbGVkIGluICVzLCBMaW5lICVkIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXyk7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7CisJfSBlbHNlIHsKKwkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCSJTcGVjdHJhOiBpb3JlbWFwIHJlZyBhZGRyZXNzOiAweCVwXG4iLCBzY3JhdGNoX3JlZyk7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gMSA8PCBpb3JlYWQ4KHNjcmF0Y2hfcmVnKTsKKwkJaWYgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIDwgNTEyKQorCQkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgPSBHTE9CX0hXQ1RMX0RFRkFVTFRfQkxLUzsKKwkJaW91bm1hcChzY3JhdGNoX3JlZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3ZhbGlkX2JhbmtzKHZvaWQpCit7CisJdTMyIGlkW0xMRF9NQVhfRkxBU0hfQkFOS1NdOworCWludCBpOworCisJdG90YWxVc2VkQmFua3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBMTERfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKKwkJaW5kZXhfYWRkcigodTMyKShNT0RFXzExIHwgKGkgPDwgMjQpIHwgMCksIDB4OTApOworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTEgfCAoaSA8PCAyNCkgfCAxKSwgMCk7CisJCWluZGV4X2FkZHJfcmVhZF9kYXRhKCh1MzIpKE1PREVfMTEgfCAoaSA8PCAyNCkgfCAyKSwgJmlkW2ldKTsKKworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJCSJSZXR1cm4gMXN0IElEIGZvciBiYW5rWyVkXTogJXhcbiIsIGksIGlkW2ldKTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoaWRbaV0gJiAweDBmZikKKwkJCQlHTE9CX3ZhbGlkX2JhbmtzW2ldID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaWRbaV0gJiAweDBmZikgPT0gKGlkWzBdICYgMHgwZmYpKQorCQkJCUdMT0JfdmFsaWRfYmFua3NbaV0gPSAxOworCQl9CisKKwkJdG90YWxVc2VkQmFua3MgKz0gR0xPQl92YWxpZF9iYW5rc1tpXTsKKwl9CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJInRvdGFsVXNlZEJhbmtzOiAlZFxuIiwgdG90YWxVc2VkQmFua3MpOworfQorCitzdGF0aWMgdm9pZCBkZXRlY3RfcGFydGl0aW9uX2ZlYXR1cmUodm9pZCkKK3sKKwlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBGRUFUVVJFUykgJiBGRUFUVVJFU19fUEFSVElUSU9OKSB7CisJCWlmICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBQRVJNX1NSQ19JRF8xKSAmCisJCQlQRVJNX1NSQ19JRF8xX19TUkNJRCkgPT0gU1BFQ1RSQV9QQVJUSVRJT05fSUQpIHsKKwkJCURldmljZUluZm8ud1NwZWN0cmFTdGFydEJsb2NrID0KKwkJCSAgICAoKGlvcmVhZDMyKEZsYXNoUmVnICsgTUlOX01BWF9CQU5LXzEpICYKKwkJCSAgICAgIE1JTl9NQVhfQkFOS18xX19NSU5fVkFMVUUpICoKKwkJCSAgICAgRGV2aWNlSW5mby53VG90YWxCbG9ja3MpCisJCQkgICAgKworCQkJICAgIChpb3JlYWQzMihGbGFzaFJlZyArIE1JTl9CTEtfQUREUl8xKSAmCisJCQkgICAgTUlOX0JMS19BRERSXzFfX1ZBTFVFKTsKKworCQkJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrID0KKwkJCSAgICAoKChpb3JlYWQzMihGbGFzaFJlZyArIE1JTl9NQVhfQkFOS18xKSAmCisJCQkgICAgICAgTUlOX01BWF9CQU5LXzFfX01BWF9WQUxVRSkgPj4gMikgKgorCQkJICAgICBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcykKKwkJCSAgICArCisJCQkgICAgKGlvcmVhZDMyKEZsYXNoUmVnICsgTUFYX0JMS19BRERSXzEpICYKKwkJCSAgICBNQVhfQkxLX0FERFJfMV9fVkFMVUUpOworCisJCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAqPSB0b3RhbFVzZWRCYW5rczsKKworCQkJaWYgKERldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayA+PQorCQkJICAgIERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCQkJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrID0KKwkJCQkgICAgRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLSAxOworCQkJfQorCisJCQlEZXZpY2VJbmZvLndEYXRhQmxvY2tOdW0gPQorCQkJCURldmljZUluZm8ud1NwZWN0cmFFbmRCbG9jayAtCisJCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sgKyAxOworCQl9IGVsc2UgeworCQkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MgKj0gdG90YWxVc2VkQmFua3M7CisJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayA9IFNQRUNUUkFfU1RBUlRfQkxPQ0s7CisJCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgPQorCQkJCURldmljZUluZm8ud1RvdGFsQmxvY2tzIC0gMTsKKwkJCURldmljZUluZm8ud0RhdGFCbG9ja051bSA9CisJCQkJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrIC0KKwkJCQlEZXZpY2VJbmZvLndTcGVjdHJhU3RhcnRCbG9jayArIDE7CisJCX0KKwl9IGVsc2UgeworCQlEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAqPSB0b3RhbFVzZWRCYW5rczsKKwkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sgPSBTUEVDVFJBX1NUQVJUX0JMT0NLOworCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgPSBEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAtIDE7CisJCURldmljZUluZm8ud0RhdGFCbG9ja051bSA9CisJCQlEZXZpY2VJbmZvLndTcGVjdHJhRW5kQmxvY2sgLQorCQkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2sgKyAxOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9kZXZpY2VfaW5mbyh2b2lkKQoreworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlSW5mbzpcbiIpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlTWFrZXI6IDB4JXhcbiIsCisJCURldmljZUluZm8ud0RldmljZU1ha2VyKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZUlEOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VJRCk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEZXZpY2VUeXBlOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VUeXBlKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwZWN0cmFTdGFydEJsb2NrOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53U3BlY3RyYVN0YXJ0QmxvY2spOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYUVuZEJsb2NrOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53U3BlY3RyYUVuZEJsb2NrKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlRvdGFsQmxvY2tzOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53VG90YWxCbG9ja3MpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZXNQZXJCbG9jazogJWRcbiIsCisJCURldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndQYWdlU2l6ZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJQYWdlRGF0YVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiUGFnZVNwYXJlU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud1BhZ2VTcGFyZVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiTnVtUGFnZVNwYXJlRmxhZzogJWRcbiIsCisJCURldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWcpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRUNDQnl0ZXNQZXJTZWN0b3I6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3Rvcik7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJCbG9ja1NpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndCbG9ja1NpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQmxvY2tEYXRhU2l6ZTogJWRcbiIsCisJCURldmljZUluZm8ud0Jsb2NrRGF0YVNpemUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGF0YUJsb2NrTnVtOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53RGF0YUJsb2NrTnVtKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlBsYW5lTnVtOiAlZFxuIiwKKwkJRGV2aWNlSW5mby5iUGxhbmVOdW0pOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiRGV2aWNlTWFpbkFyZWFTaXplOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53RGV2aWNlTWFpbkFyZWFTaXplKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZVNwYXJlQXJlYVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VTcGFyZUFyZWFTaXplKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZXNDb25uZWN0ZWQ6ICVkXG4iLAorCQlEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkRldmljZVdpZHRoOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53RGV2aWNlV2lkdGgpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiSFdSZXZpc2lvbjogMHgleFxuIiwKKwkJRGV2aWNlSW5mby53SFdSZXZpc2lvbik7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJIV0ZlYXR1cmVzOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndIV0ZlYXR1cmVzKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk9ORklEZXZGZWF0dXJlczogMHgleFxuIiwKKwkJRGV2aWNlSW5mby53T05GSURldkZlYXR1cmVzKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk9ORklPcHRDb21tYW5kczogMHgleFxuIiwKKwkJRGV2aWNlSW5mby53T05GSU9wdENvbW1hbmRzKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk9ORklUaW1pbmdNb2RlOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndPTkZJVGltaW5nTW9kZSk7CisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJPTkZJUGdtQ2FjaGVUaW1pbmdNb2RlOiAweCV4XG4iLAorCQlEZXZpY2VJbmZvLndPTkZJUGdtQ2FjaGVUaW1pbmdNb2RlKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIk1MQ0RldmljZTogJXNcbiIsCisJCURldmljZUluZm8uTUxDRGV2aWNlID8gIlllcyIgOiAiTm8iKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIlNwYXJlU2tpcEJ5dGVzOiAlZFxuIiwKKwkJRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXMpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQml0c0luUGFnZU51bWJlcjogJWRcbiIsCisJCURldmljZUluZm8ubkJpdHNJblBhZ2VOdW1iZXIpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiQml0c0luUGFnZURhdGFTaXplOiAlZFxuIiwKKwkJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKTsKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIkJpdHNJbkJsb2NrRGF0YVNpemU6ICVkXG4iLAorCQlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplKTsKK30KKwordTE2IE5BTkRfUmVhZF9EZXZpY2VfSUQodm9pZCkKK3sKKwl1MTYgc3RhdHVzID0gUEFTUzsKKwl1OCBub19vZl9wbGFuZXM7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlvd3JpdGUzMigweDAyLCBGbGFzaFJlZyArIFNQQVJFX0FSRUFfU0tJUF9CWVRFUyk7CisJaW93cml0ZTMyKDB4ZmZmZiwgRmxhc2hSZWcgKyBTUEFSRV9BUkVBX01BUktFUik7CisJRGV2aWNlSW5mby53RGV2aWNlTWFrZXIgPSBpb3JlYWQzMihGbGFzaFJlZyArIE1BTlVGQUNUVVJFUl9JRCk7CisJRGV2aWNlSW5mby53RGV2aWNlSUQgPSBpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9JRCk7CisJRGV2aWNlSW5mby5NTENEZXZpY2UgPSBpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9QQVJBTV8wKSAmIDB4MGM7CisKKwlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBPTkZJX0RFVklDRV9OT19PRl9MVU5TKSAmCisJCU9ORklfREVWSUNFX05PX09GX0xVTlNfX09ORklfREVWSUNFKSB7IC8qIE9ORkkgMS4wIE5BTkQgKi8KKwkJaWYgKEZBSUwgPT0gZ2V0X29uZmlfbmFuZF9wYXJhKCkpCisJCQlyZXR1cm4gRkFJTDsKKwl9IGVsc2UgaWYgKERldmljZUluZm8ud0RldmljZU1ha2VyID09IDB4RUMpIHsgLyogU2Ftc3VuZyBOQU5EICovCisJCWdldF9zYW1zdW5nX25hbmRfcGFyYSgpOworCX0gZWxzZSBpZiAoRGV2aWNlSW5mby53RGV2aWNlTWFrZXIgPT0gMHg5OCkgeyAvKiBUb3NoaWJhIE5BTkQgKi8KKwkJZ2V0X3Rvc2hpYmFfbmFuZF9wYXJhKCk7CisJfSBlbHNlIGlmIChEZXZpY2VJbmZvLndEZXZpY2VNYWtlciA9PSAweEFEKSB7IC8qIEh5bml4IE5BTkQgKi8KKwkJZ2V0X2h5bml4X25hbmRfcGFyYSgpOworCX0gZWxzZSB7CisJCURldmljZUluZm8ud1RvdGFsQmxvY2tzID0gR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1M7CisJfQorCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEdW1wIHRpbWluZyByZWdpc3RlciB2YWx1ZXM6IgorCQkJImFjY19jbGtzOiAlZCwgcmVfMl93ZTogJWQsIHdlXzJfcmU6ICVkLCIKKwkJCSJhZGRyXzJfZGF0YTogJWQsIHJkd3JfZW5fbG9fY250OiAlZCwgIgorCQkJInJkd3JfZW5faGlfY250OiAlZCwgY3Nfc2V0dXBfY250OiAlZFxuIiwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQUNDX0NMS1MpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRV8yX1dFKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgV0VfMl9SRSksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIEFERFJfMl9EQVRBKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgUkRXUl9FTl9MT19DTlQpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRFdSX0VOX0hJX0NOVCksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIENTX1NFVFVQX0NOVCkpOworCisJRGV2aWNlSW5mby53SFdSZXZpc2lvbiA9IGlvcmVhZDMyKEZsYXNoUmVnICsgUkVWSVNJT04pOworCURldmljZUluZm8ud0hXRmVhdHVyZXMgPSBpb3JlYWQzMihGbGFzaFJlZyArIEZFQVRVUkVTKTsKKworCURldmljZUluZm8ud0RldmljZU1haW5BcmVhU2l6ZSA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX01BSU5fQVJFQV9TSVpFKTsKKwlEZXZpY2VJbmZvLndEZXZpY2VTcGFyZUFyZWFTaXplID0KKwkJaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFKTsKKworCURldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgTE9HSUNBTF9QQUdFX0RBVEFfU0laRSk7CisKKwkvKiBOb3RlOiBXaGVuIHVzaW5nIHRoZSBNaWNvbiA0SyBOQU5EIGRldmljZSwgdGhlIGNvbnRyb2xsZXIgd2lsbCByZXBvcnQKKwkgKiBQYWdlIFNwYXJlIFNpemUgYXMgMjE2IGJ5dGVzLiBCdXQgTWljcm9uJ3MgU3BlYyBzYXkgaXQncyAyMTggYnl0ZXMuCisJICogQW5kIGlmIGZvcmNlIHNldCBpdCB0byAyMTggYnl0ZXMsIHRoZSBjb250cm9sbGVyIGNhbiBub3Qgd29yaworCSAqIGNvcnJlY3RseS4gU28ganVzdCBsZXQgaXQgYmUuIEJ1dCBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGJ1ZyBtYXkKKwkgKiBjYXVzZQorCSAqIG90aGVyIHByb2JsZW1zIGluIGZ1dHVyZS4gICAgICAgLSBZdW5wZW5nICAyMDA4LTEwLTEwCisJICovCisJRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZSA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUpOworCisJRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayA9IGlvcmVhZDMyKEZsYXNoUmVnICsgUEFHRVNfUEVSX0JMT0NLKTsKKworCURldmljZUluZm8ud1BhZ2VTaXplID0KKwkgICAgRGV2aWNlSW5mby53UGFnZURhdGFTaXplICsgRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKwlEZXZpY2VJbmZvLndCbG9ja1NpemUgPQorCSAgICBEZXZpY2VJbmZvLndQYWdlU2l6ZSAqIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2s7CisJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSA9CisJICAgIERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2sgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlEZXZpY2VJbmZvLndEZXZpY2VXaWR0aCA9IGlvcmVhZDMyKEZsYXNoUmVnICsgREVWSUNFX1dJRFRIKTsKKwlEZXZpY2VJbmZvLndEZXZpY2VUeXBlID0KKwkJKChpb3JlYWQzMihGbGFzaFJlZyArIERFVklDRV9XSURUSCkgPiAwKSA/IDE2IDogOCk7CisKKwlEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBERVZJQ0VTX0NPTk5FQ1RFRCk7CisKKwlEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlcyA9CisJCWlvcmVhZDMyKEZsYXNoUmVnICsgU1BBUkVfQVJFQV9TS0lQX0JZVEVTKSAqCisJCURldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQ7CisKKwlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlTnVtYmVyID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jayk7CisJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53UGFnZURhdGFTaXplKTsKKwlEZXZpY2VJbmZvLm5CaXRzSW5CbG9ja0RhdGFTaXplID0KKwkJKHU4KUdMT0JfQ2FsY19Vc2VkX0JpdHMoRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSk7CisKKwlzZXRfZWNjX2NvbmZpZygpOworCisJbm9fb2ZfcGxhbmVzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBOVU1CRVJfT0ZfUExBTkVTKSAmCisJCU5VTUJFUl9PRl9QTEFORVNfX1ZBTFVFOworCisJc3dpdGNoIChub19vZl9wbGFuZXMpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMzoKKwljYXNlIDc6CisJCURldmljZUluZm8uYlBsYW5lTnVtID0gbm9fb2ZfcGxhbmVzICsgMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gRkFJTDsKKwkJYnJlYWs7CisJfQorCisJZmluZF92YWxpZF9iYW5rcygpOworCisJZGV0ZWN0X3BhcnRpdGlvbl9mZWF0dXJlKCk7CisKKwlkdW1wX2RldmljZV9pbmZvKCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MTYgTkFORF9VbmxvY2tBcnJheUFsbCh2b2lkKQoreworCXU2NCBzdGFydF9hZGRyLCBlbmRfYWRkcjsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1RSQUNFLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3RhcnRfYWRkciA9IDA7CisJZW5kX2FkZHIgPSAoKHU2NClEZXZpY2VJbmZvLndCbG9ja1NpemUgKgorCQkoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLSAxKSkgPj4KKwkJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKHUzMilzdGFydF9hZGRyKSwgMHgxMCk7CisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKHUzMillbmRfYWRkciksIDB4MTEpOworCisJcmV0dXJuIFBBU1M7Cit9CisKK3ZvaWQgTkFORF9MTERfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyh1MTYgSU5UX0VOQUJMRSkKK3sKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19UUkFDRSwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWlmIChJTlRfRU5BQkxFKQorCQlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7CisJZWxzZQorCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7Cit9CisKK3UxNiBOQU5EX0VyYXNlX0Jsb2NrKHUzMiBibG9jaykKK3sKKwl1MTYgc3RhdHVzID0gUEFTUzsKKwl1NjQgZmxhc2hfYWRkOworCXUxNiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaWYgKGJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQlzdGF0dXMgPSBGQUlMOworCisJaWYgKHN0YXR1cyA9PSBQQVNTKSB7CisJCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCisJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VSQVNFX0NPTVAgfCBJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwsCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMSk7CisKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJKElOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUCB8IElOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCkpKQorCQkJOworCisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwpCisJCQlzdGF0dXMgPSBGQUlMOworCisJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VSQVNFX0NPTVAgfCBJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUwsCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UodTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQkJCXUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCisJaWYgKGJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKQorCQlzdGF0dXMgPSBGQUlMOworCisJaWYgKHBhZ2UgKyBwYWdlX2NvdW50ID4gRGV2aWNlSW5mby53UGFnZXNQZXJCbG9jaykKKwkJc3RhdHVzID0gRkFJTDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJICAgIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXUzMiBpOworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIFBhZ2VTcGFyZVNpemUgPSBEZXZpY2VJbmZvLndQYWdlU3BhcmVTaXplOworCXUzMiBzcGFyZUZsYWdCeXRlcyA9IERldmljZUluZm8ud051bVBhZ2VTcGFyZUZsYWc7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTggKnBhZ2Vfc3BhcmUgPSBidWZfcmVhZF9wYWdlX3NwYXJlOworCisJaWYgKGJsb2NrID49IERldmljZUluZm8ud1RvdGFsQmxvY2tzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYmxvY2sgdG9vIGJpZzogJWRcbiIsIChpbnQpYmxvY2spOworCQlzdGF0dXMgPSBGQUlMOworCX0KKworCWlmIChwYWdlID49IERldmljZUluZm8ud1BhZ2VzUGVyQmxvY2spIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWdlIHRvbyBiaWc6ICVkXG4iLCBwYWdlKTsKKwkJc3RhdHVzID0gRkFJTDsKKwl9CisKKwlpZiAocGFnZV9jb3VudCA+IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWdlIGNvdW50IHRvbyBiaWc6ICVkXG4iLCBwYWdlX2NvdW50KTsKKwkJc3RhdHVzID0gRkFJTDsKKwl9CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClwYWdlICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaWYgKHN0YXR1cyA9PSBQQVNTKSB7CisJCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCTB4NDEpOworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCTB4MjAwMCB8IHBhZ2VfY291bnQpOworCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0xPQURfQ09NUCkpCisJCQk7CisKKwkJaW93cml0ZTMyKCh1MzIpKE1PREVfMDEgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCUZsYXNoTWVtKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgKFBhZ2VTcGFyZVNpemUgLyA0KTsgaSsrKQorCQkJKigodTMyICopcGFnZV9zcGFyZSArIGkpID0KKwkJCQkJaW9yZWFkMzIoRmxhc2hNZW0gKyAweDEwKTsKKworCQlpZiAoZW5hYmxlX2VjYykgeworCQkJZm9yIChpID0gMDsgaSA8IHNwYXJlRmxhZ0J5dGVzOyBpKyspCisJCQkJcmVhZF9kYXRhW2ldID0KKwkJCQkJcGFnZV9zcGFyZVtQYWdlU3BhcmVTaXplIC0KKwkJCQkJCXNwYXJlRmxhZ0J5dGVzICsgaV07CisJCQlmb3IgKGkgPSAwOyBpIDwgKFBhZ2VTcGFyZVNpemUgLSBzcGFyZUZsYWdCeXRlcyk7IGkrKykKKwkJCQlyZWFkX2RhdGFbc3BhcmVGbGFnQnl0ZXMgKyBpXSA9CisJCQkJCQkJcGFnZV9zcGFyZVtpXTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBQYWdlU3BhcmVTaXplOyBpKyspCisJCQkJcmVhZF9kYXRhW2ldID0gcGFnZV9zcGFyZVtpXTsKKwkJfQorCisJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBObyB1c2UgZnVuY3Rpb24uIFNob3VsZCBiZSByZW1vdmVkIGxhdGVyICovCit1MTYgTkFORF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJICAgICB1MTYgcGFnZV9jb3VudCkKK3sKKwlwcmludGsoS0VSTl9FUlIKKwkgICAgICAgIkVycm9yISBUaGlzIGZ1bmN0aW9uIChOQU5EX1dyaXRlX1BhZ2VfU3BhcmUpIHNob3VsZCBuZXZlciIKKwkJIiBiZSBjYWxsZWQhXG4iKTsKKwlyZXR1cm4gRVJSOworfQorCisvKiBvcCB2YWx1ZTogIDAgLSBERE1BIHJlYWQ7ICAxIC0gRERNQSB3cml0ZSAqLworc3RhdGljIHZvaWQgZGRtYV90cmFucyh1OCAqZGF0YSwgdTY0IGZsYXNoX2FkZCwKKwkJCXUzMiBmbGFzaF9iYW5rLCBpbnQgb3AsIHUzMiBudW1QYWdlcykKK3sKKwl1MzIgZGF0YV9hZGRyOworCisJLyogTWFwIHZpcnR1YWwgYWRkcmVzcyB0byBidXMgYWRkcmVzcyBmb3IgRERNQSAqLworCWRhdGFfYWRkciA9IHZpcnRfdG9fYnVzKGRhdGEpOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJKHUxNikoMiA8PCAxMikgfCAob3AgPDwgOCkgfCBudW1QYWdlcyk7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoKHUxNikoMHgwRkZGRiAmIChkYXRhX2FkZHIgPj4gMTYpKSA8PCA4KSksCisJCSh1MTYpKDIgPDwgMTIpIHwgKDIgPDwgOCkgfCAwKTsKKworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCSgodTE2KSgweDBGRkZGICYgZGF0YV9hZGRyKSA8PCA4KSksCisJCSh1MTYpKDIgPDwgMTIpIHwgKDMgPDwgOCkgfCAwKTsKKworCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCSgxIDw8IDE2KSB8ICgweDQwIDw8IDgpKSwKKwkJKHUxNikoMiA8PCAxMikgfCAoNCA8PCA4KSB8IDApOworfQorCisvKiBJZiBkYXRhIGluIGJ1ZiBhcmUgYWxsIDB4ZmYsIHRoZW4gcmV0dXJuIDE7IG90aGVyd2lzZSByZXR1cm4gMCAqLworc3RhdGljIGludCBjaGVja19hbGxfMSh1OCAqYnVmKQoreworCWludCBpLCBqLCBjbnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgRGV2aWNlSW5mby53UGFnZURhdGFTaXplOyBpKyspIHsKKwkJaWYgKGJ1ZltpXSAhPSAweGZmKSB7CisJCQljbnQgPSAwOworCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwKKwkJCQkidGhlIGZpcnN0IG5vbi0weGZmIGRhdGEgYnl0ZSBpczogJWRcbiIsIGkpOworCQkJZm9yIChqID0gaTsgaiA8IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsgaisrKSB7CisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIjB4JXggIiwgYnVmW2pdKTsKKwkJCQljbnQrKzsKKwkJCQlpZiAoY250ID4gOCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9fZWNjX25ldyh1bnNpZ25lZCBsb25nIGJhbmssIHU4ICpidWYsCisJCQkJdTMyIGJsb2NrLCB1MTYgcGFnZSkKK3sKKwlpbnQgc3RhdHVzID0gUEFTUzsKKwl1MTYgZXJyX3BhZ2UgPSAwOworCXUxNiBlcnJfYnl0ZTsKKwl1OCBlcnJfc2VjdDsKKwl1OCBlcnJfZGV2OworCXUxNiBlcnJfZml4X2luZm87CisJdTE2IGVycl9hZGRyOworCXUzMiBlY2Nfc2VjdF9zaXplOworCXU4ICplcnJfcG9zOworCXUzMiBlcnJfcGFnZV9hZGRyWzRdID0ge0VSUl9QQUdFX0FERFIwLAorCQlFUlJfUEFHRV9BRERSMSwgRVJSX1BBR0VfQUREUjIsIEVSUl9QQUdFX0FERFIzfTsKKworCWVjY19zZWN0X3NpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiAoRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7CisKKwlkbyB7CisJCWVycl9wYWdlID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBlcnJfcGFnZV9hZGRyW2JhbmtdKTsKKwkJZXJyX2FkZHIgPSBpb3JlYWQzMihGbGFzaFJlZyArIEVDQ19FUlJPUl9BRERSRVNTKTsKKwkJZXJyX2J5dGUgPSBlcnJfYWRkciAmIEVDQ19FUlJPUl9BRERSRVNTX19PRkZTRVQ7CisJCWVycl9zZWN0ID0gKChlcnJfYWRkciAmIEVDQ19FUlJPUl9BRERSRVNTX19TRUNUT1JfTlIpID4+IDEyKTsKKwkJZXJyX2ZpeF9pbmZvID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBFUlJfQ09SUkVDVElPTl9JTkZPKTsKKwkJZXJyX2RldiA9ICgoZXJyX2ZpeF9pbmZvICYgRVJSX0NPUlJFQ1RJT05fSU5GT19fREVWSUNFX05SKQorCQkJPj4gOCk7CisJCWlmIChlcnJfZml4X2luZm8gJiBFUlJfQ09SUkVDVElPTl9JTkZPX19FUlJPUl9UWVBFKSB7CisJCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJCSIlcywgTGluZSAlZCBVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciAiCisJCQkJIndoZW4gcmVhZCBibG9jayAlZCBwYWdlICVkLiIKKwkJCQkiUFROX0lOVFIgcmVnaXN0ZXI6IDB4JXggIgorCQkJCSJlcnJfcGFnZTogJWQsIGVycl9zZWN0OiAlZCwgZXJyX2J5dGU6ICVkLCAiCisJCQkJImVycl9kZXY6ICVkLCBlY2Nfc2VjdF9zaXplOiAlZCwgIgorCQkJCSJlcnJfZml4X2luZm86IDB4JXhcbiIsCisJCQkJX19GSUxFX18sIF9fTElORV9fLCBibG9jaywgcGFnZSwKKwkJCQlpb3JlYWQzMihGbGFzaFJlZyArIFBUTl9JTlRSKSwKKwkJCQllcnJfcGFnZSwgZXJyX3NlY3QsIGVycl9ieXRlLCBlcnJfZGV2LAorCQkJCWVjY19zZWN0X3NpemUsICh1MzIpZXJyX2ZpeF9pbmZvKTsKKworCQkJaWYgKGNoZWNrX2FsbF8xKGJ1ZikpCisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkIgorCQkJCQkgICAgICAgIkFsbCAweGZmIVxuIiwKKwkJCQkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJCQllbHNlCisJCQkJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkIgorCQkJCQkgICAgICAgIk5vdCBhbGwgMHhmZiFcbiIsCisJCQkJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18pOworCQkJc3RhdHVzID0gRkFJTDsKKwkJfSBlbHNlIHsKKwkJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkJIiVzLCBMaW5lICVkIEZvdW5kIEVDQyBlcnJvciAiCisJCQkJIndoZW4gcmVhZCBibG9jayAlZCBwYWdlICVkLiIKKwkJCQkiZXJyX3BhZ2U6ICVkLCBlcnJfc2VjdDogJWQsIGVycl9ieXRlOiAlZCwgIgorCQkJCSJlcnJfZGV2OiAlZCwgZWNjX3NlY3Rfc2l6ZTogJWQsICIKKwkJCQkiZXJyX2ZpeF9pbmZvOiAweCV4XG4iLAorCQkJCV9fRklMRV9fLCBfX0xJTkVfXywgYmxvY2ssIHBhZ2UsCisJCQkJZXJyX3BhZ2UsIGVycl9zZWN0LCBlcnJfYnl0ZSwgZXJyX2RldiwKKwkJCQllY2Nfc2VjdF9zaXplLCAodTMyKWVycl9maXhfaW5mbyk7CisJCQlpZiAoZXJyX2J5dGUgPCBFQ0NfU0VDVE9SX1NJWkUpIHsKKwkJCQllcnJfcG9zID0gYnVmICsKKwkJCQkJKGVycl9wYWdlIC0gcGFnZSkgKgorCQkJCQlEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgKworCQkJCQllcnJfc2VjdCAqIGVjY19zZWN0X3NpemUgKworCQkJCQllcnJfYnl0ZSAqCisJCQkJCURldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQgKworCQkJCQllcnJfZGV2OworCisJCQkJKmVycl9wb3MgXj0gZXJyX2ZpeF9pbmZvICYKKwkJCQkJRVJSX0NPUlJFQ1RJT05fSU5GT19fQllURU1BU0s7CisJCQl9CisJCX0KKwl9IHdoaWxlICghKGVycl9maXhfaW5mbyAmIEVSUl9DT1JSRUNUSU9OX0lORk9fX0xBU1RfRVJSX0lORk8pKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1JlYWRfUGFnZV9NYWluX1BvbGxpbmcodTggKnJlYWRfZGF0YSwKKwkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwl1OCAqcmVhZF9kYXRhX2w7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3RhdHVzID0gQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZShibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisJaWYgKHN0YXR1cyAhPSBQQVNTKQorCQlyZXR1cm4gc3RhdHVzOworCisJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJSAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCSogRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCSh1NjQpcGFnZSAqIERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlmIChwYWdlX2NvdW50ID4gMSkgeworCQlyZWFkX2RhdGFfbCA9IHJlYWRfZGF0YTsKKwkJd2hpbGUgKHBhZ2VfY291bnQgPiBNQVhfUEFHRVNfUEVSX1JXKSB7CisJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTikpCisJCQkJc3RhdHVzID0gTkFORF9NdWx0aXBsYW5lX1JlYWQocmVhZF9kYXRhX2wsCisJCQkJCWJsb2NrLCBwYWdlLCBNQVhfUEFHRVNfUEVSX1JXKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBOQU5EX1BpcGVsaW5lX1JlYWRfQWhlYWRfUG9sbGluZygKKwkJCQkJcmVhZF9kYXRhX2wsIGJsb2NrLCBwYWdlLAorCQkJCQlNQVhfUEFHRVNfUEVSX1JXKTsKKworCQkJaWYgKHN0YXR1cyA9PSBGQUlMKQorCQkJCXJldHVybiBzdGF0dXM7CisKKwkJCXJlYWRfZGF0YV9sICs9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAqCisJCQkJCU1BWF9QQUdFU19QRVJfUlc7CisJCQlwYWdlX2NvdW50IC09IE1BWF9QQUdFU19QRVJfUlc7CisJCQlwYWdlICs9IE1BWF9QQUdFU19QRVJfUlc7CisJCX0KKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pKQorCQkJc3RhdHVzID0gTkFORF9NdWx0aXBsYW5lX1JlYWQocmVhZF9kYXRhX2wsCisJCQkJCWJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwkJZWxzZQorCQkJc3RhdHVzID0gTkFORF9QaXBlbGluZV9SZWFkX0FoZWFkX1BvbGxpbmcoCisJCQkJCXJlYWRfZGF0YV9sLCBibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWRkbWFfdHJhbnMocmVhZF9kYXRhLCBmbGFzaF9hZGQsIGZsYXNoX2JhbmssIDAsIDEpOworCisJaWYgKGVuYWJsZV9lY2MpIHsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJKElOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgfAorCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSkpCisJCQk7CisKKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikgeworCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCXN0YXR1cyA9IGRvX2VjY19uZXcoZmxhc2hfYmFuaywgcmVhZF9kYXRhLAorCQkJCQlibG9jaywgcGFnZSk7CisJCX0KKworCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSAmCisJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpCisJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSB8CisJCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQllbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FKQorCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCWVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikKKwkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19FUlIsCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApKQorCQkJOworCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCX0KKworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZF9Qb2xsaW5nKHU4ICpyZWFkX2RhdGEsCisJCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1MzIgTnVtUGFnZXMgPSBwYWdlX2NvdW50OworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTMyIGVjY19kb25lX09SX2RtYV9jb21wOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJaWYgKHBhZ2VfY291bnQgPCAyKQorCQlzdGF0dXMgPSBGQUlMOworCisJZmxhc2hfYWRkID0gKHU2NCkoYmxvY2sgJSAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCSpEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClwYWdlICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaWYgKHN0YXR1cyA9PSBQQVNTKSB7CisJCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQkJOworCisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwkJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCShmbGFzaF9hZGQgPj4gRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSksIDB4NDIpOworCQlkZG1hX3RyYW5zKHJlYWRfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAwLCBOdW1QYWdlcyk7CisKKwkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAwOworCQl3aGlsZSAoMSkgeworCQkJaWYgKGVuYWJsZV9lY2MpIHsKKwkJCQl3aGlsZSAoIWlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpKQorCQkJCQk7CisKKwkJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpIHsKKwkJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCQlzdGF0dXMgPSBkb19lY2NfbmV3KGZsYXNoX2JhbmssCisJCQkJCQlyZWFkX2RhdGEsIGJsb2NrLCBwYWdlKTsKKwkJCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApIHsKKwkJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QLAorCQkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJCQkJaWYgKDEgPT0gZWNjX2RvbmVfT1JfZG1hX2NvbXApCisJCQkJCQlicmVhazsKKworCQkJCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDE7CisJCQkJfSBlbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUpIHsKKwkJCQkJaW93cml0ZTMyKAorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQkJCQlpZiAoMSA9PSBlY2NfZG9uZV9PUl9kbWFfY29tcCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWVjY19kb25lX09SX2RtYV9jb21wID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdoaWxlICghKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVApKQorCQkJCQk7CisKKwkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpb3dyaXRlMzIoKH5JTlRSX1NUQVRVUzBfX0VDQ19FUlIpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQl9CisKKwkJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLAorCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisKKwkJd2hpbGUgKChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCQk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1JlYWRfUGFnZV9NYWluKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCWludCByZXQ7CisJdTggKnJlYWRfZGF0YV9sOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwlpZiAoc3RhdHVzICE9IFBBU1MpCisJCXJldHVybiBzdGF0dXM7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClwYWdlICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaWYgKHBhZ2VfY291bnQgPiAxKSB7CisJCXJlYWRfZGF0YV9sID0gcmVhZF9kYXRhOworCQl3aGlsZSAocGFnZV9jb3VudCA+IE1BWF9QQUdFU19QRVJfUlcpIHsKKwkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIE1VTFRJUExBTkVfT1BFUkFUSU9OKSkKKwkJCQlzdGF0dXMgPSBOQU5EX011bHRpcGxhbmVfUmVhZChyZWFkX2RhdGFfbCwKKwkJCQkJYmxvY2ssIHBhZ2UsIE1BWF9QQUdFU19QRVJfUlcpOworCQkJZWxzZQorCQkJCXN0YXR1cyA9IE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZCgKKwkJCQkJcmVhZF9kYXRhX2wsIGJsb2NrLCBwYWdlLAorCQkJCQlNQVhfUEFHRVNfUEVSX1JXKTsKKworCQkJaWYgKHN0YXR1cyA9PSBGQUlMKQorCQkJCXJldHVybiBzdGF0dXM7CisKKwkJCXJlYWRfZGF0YV9sICs9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAqCisJCQkJCU1BWF9QQUdFU19QRVJfUlc7CisJCQlwYWdlX2NvdW50IC09IE1BWF9QQUdFU19QRVJfUlc7CisJCQlwYWdlICs9IE1BWF9QQUdFU19QRVJfUlc7CisJCX0KKwkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pKQorCQkJc3RhdHVzID0gTkFORF9NdWx0aXBsYW5lX1JlYWQocmVhZF9kYXRhX2wsCisJCQkJCWJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwkJZWxzZQorCQkJc3RhdHVzID0gTkFORF9QaXBlbGluZV9SZWFkX0FoZWFkKAorCQkJCQlyZWFkX2RhdGFfbCwgYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkvKiBGaWxsIHRoZSBtcnN0X25hbmRfaW5mbyBzdHJ1Y3R1cmUgKi8KKwlpbmZvLnN0YXRlID0gSU5UX1JFQURfUEFHRV9NQUlOOworCWluZm8ucmVhZF9kYXRhID0gcmVhZF9kYXRhOworCWluZm8uZmxhc2hfYmFuayA9IGZsYXNoX2Jhbms7CisJaW5mby5ibG9jayA9IGJsb2NrOworCWluZm8ucGFnZSA9IHBhZ2U7CisJaW5mby5yZXQgPSBQQVNTOworCisJZGRtYV90cmFucyhyZWFkX2RhdGEsIGZsYXNoX2FkZCwgZmxhc2hfYmFuaywgMCwgMSk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7IC8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW5mby5jb21wbGV0ZSwgMTAgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXYWl0IGZvciBjb21wbGV0aW9uIHRpbWVvdXQgIgorCQkJImluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCQlzdGF0dXMgPSBFUlI7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gaW5mby5yZXQ7CisJfQorCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlICgoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIENvbnZfU3BhcmVfRGF0YV9Mb2cyUGh5X0Zvcm1hdCh1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwljb25zdCB1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCWNvbnN0IHUzMiBQYWdlU3BhcmVTaXplICA9IERldmljZUluZm8ud1BhZ2VTcGFyZVNpemU7CisKKwlpZiAoZW5hYmxlX2VjYykgeworCQlmb3IgKGkgPSBzcGFyZUZsYWdCeXRlcyAtIDE7IGkgPj0gMDsgaSsrKQorCQkJZGF0YVtQYWdlU3BhcmVTaXplIC0gc3BhcmVGbGFnQnl0ZXMgKyBpXSA9IGRhdGFbaV07CisJfQorfQorCit2b2lkIENvbnZfU3BhcmVfRGF0YV9QaHkyTG9nX0Zvcm1hdCh1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwljb25zdCB1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCWNvbnN0IHUzMiBQYWdlU3BhcmVTaXplID0gRGV2aWNlSW5mby53UGFnZVNwYXJlU2l6ZTsKKworCWlmIChlbmFibGVfZWNjKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzcGFyZUZsYWdCeXRlczsgaSsrKQorCQkJZGF0YVtpXSA9IGRhdGFbUGFnZVNwYXJlU2l6ZSAtIHNwYXJlRmxhZ0J5dGVzICsgaV07CisJfQorfQorCisKK3ZvaWQgQ29udl9NYWluX1NwYXJlX0RhdGFfTG9nMlBoeV9Gb3JtYXQodTggKmRhdGEsIHUxNiBwYWdlX2NvdW50KQoreworCWNvbnN0IHUzMiBQYWdlU2l6ZSA9IERldmljZUluZm8ud1BhZ2VTaXplOworCWNvbnN0IHUzMiBQYWdlRGF0YVNpemUgPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJY29uc3QgdTMyIGVjY0J5dGVzID0gRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3I7CisJY29uc3QgdTMyIHNwYXJlU2tpcEJ5dGVzID0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJY29uc3QgdTMyIHNwYXJlRmxhZ0J5dGVzID0gRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZzsKKwl1MzIgZWNjU2VjdG9yU2l6ZTsKKwl1MzIgcGFnZV9vZmZzZXQ7CisJaW50IGksIGo7CisKKwllY2NTZWN0b3JTaXplID0gRUNDX1NFQ1RPUl9TSVpFICogKERldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQpOworCWlmIChlbmFibGVfZWNjKSB7CisJCXdoaWxlIChwYWdlX2NvdW50ID4gMCkgeworCQkJcGFnZV9vZmZzZXQgPSAocGFnZV9jb3VudCAtIDEpICogUGFnZVNpemU7CisJCQlqID0gKERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAvIGVjY1NlY3RvclNpemUpOworCQkJZm9yIChpID0gc3BhcmVGbGFnQnl0ZXMgLSAxOyBpID49IDA7IGktLSkKKwkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsKKwkJCQkJKGVjY1NlY3RvclNpemUgKyBlY2NCeXRlcykgKiBqICsgaV0gPQorCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsgUGFnZURhdGFTaXplICsgaV07CisJCQlmb3IgKGotLTsgaiA+PSAxOyBqLS0pIHsKKwkJCQlmb3IgKGkgPSBlY2NTZWN0b3JTaXplIC0gMTsgaSA+PSAwOyBpLS0pCisJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKworCQkJCQkoZWNjU2VjdG9yU2l6ZSArIGVjY0J5dGVzKSAqIGogKyBpXSA9CisJCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsKKwkJCQkJCWVjY1NlY3RvclNpemUgKiBqICsgaV07CisJCQl9CisJCQlmb3IgKGkgPSAoUGFnZVNpemUgLSBzcGFyZVNraXBCeXRlcykgLSAxOworCQkJCWkgPj0gUGFnZURhdGFTaXplOyBpLS0pCisJCQkJZGF0YVtwYWdlX29mZnNldCArIGkgKyBzcGFyZVNraXBCeXRlc10gPQorCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsgaV07CisJCQlwYWdlX2NvdW50LS07CisJCX0KKwl9Cit9CisKK3ZvaWQgQ29udl9NYWluX1NwYXJlX0RhdGFfUGh5MkxvZ19Gb3JtYXQodTggKmRhdGEsIHUxNiBwYWdlX2NvdW50KQoreworCWNvbnN0IHUzMiBQYWdlU2l6ZSA9IERldmljZUluZm8ud1BhZ2VTaXplOworCWNvbnN0IHUzMiBQYWdlRGF0YVNpemUgPSBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisJY29uc3QgdTMyIGVjY0J5dGVzID0gRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3I7CisJY29uc3QgdTMyIHNwYXJlU2tpcEJ5dGVzID0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJY29uc3QgdTMyIHNwYXJlRmxhZ0J5dGVzID0gRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZzsKKwl1MzIgZWNjU2VjdG9yU2l6ZTsKKwl1MzIgcGFnZV9vZmZzZXQ7CisJaW50IGksIGo7CisKKwllY2NTZWN0b3JTaXplID0gRUNDX1NFQ1RPUl9TSVpFICogKERldmljZUluZm8ud0RldmljZXNDb25uZWN0ZWQpOworCWlmIChlbmFibGVfZWNjKSB7CisJCXdoaWxlIChwYWdlX2NvdW50ID4gMCkgeworCQkJcGFnZV9vZmZzZXQgPSAocGFnZV9jb3VudCAtIDEpICogUGFnZVNpemU7CisJCQlmb3IgKGkgPSBQYWdlRGF0YVNpemU7CisJCQkJaSA8IFBhZ2VTaXplIC0gc3BhcmVTa2lwQnl0ZXM7CisJCQkJaSsrKQorCQkJCWRhdGFbcGFnZV9vZmZzZXQgKyBpXSA9CisJCQkJCWRhdGFbcGFnZV9vZmZzZXQgKyBpICsKKwkJCQkJc3BhcmVTa2lwQnl0ZXNdOworCQkJZm9yIChqID0gMTsKKwkJCWogPCBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemUgLyBlY2NTZWN0b3JTaXplOworCQkJaisrKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IGVjY1NlY3RvclNpemU7IGkrKykKKwkJCQkJZGF0YVtwYWdlX29mZnNldCArCisJCQkJCWVjY1NlY3RvclNpemUgKiBqICsgaV0gPQorCQkJCQkJZGF0YVtwYWdlX29mZnNldCArCisJCQkJCQkoZWNjU2VjdG9yU2l6ZSArIGVjY0J5dGVzKSAqIGoKKwkJCQkJCSsgaV07CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgc3BhcmVGbGFnQnl0ZXM7IGkrKykKKwkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsgUGFnZURhdGFTaXplICsgaV0gPQorCQkJCQlkYXRhW3BhZ2Vfb2Zmc2V0ICsKKwkJCQkJKGVjY1NlY3RvclNpemUgKyBlY2NCeXRlcykgKiBqICsgaV07CisJCQlwYWdlX2NvdW50LS07CisJCX0KKwl9Cit9CisKKy8qIFVuLXRlc3RlZCBmdW5jdGlvbiAqLwordTE2IE5BTkRfTXVsdGlwbGFuZV9SZWFkKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkgICAgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTMyIE51bVBhZ2VzID0gcGFnZV9jb3VudDsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCXUzMiBlY2NfZG9uZV9PUl9kbWFfY29tcDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpZiAoc3RhdHVzID09IFBBU1MpIHsKKwkJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisJCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwKKwkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisJCWlvd3JpdGUzMigweDAxLCBGbGFzaFJlZyArIE1VTFRJUExBTkVfT1BFUkFUSU9OKTsKKworCQlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQkJOworCQlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMHg0Mik7CisJCWRkbWFfdHJhbnMocmVhZF9kYXRhLCBmbGFzaF9hZGQsIGZsYXNoX2JhbmssIDAsIE51bVBhZ2VzKTsKKworCQllY2NfZG9uZV9PUl9kbWFfY29tcCA9IDA7CisJCXdoaWxlICgxKSB7CisJCQlpZiAoZW5hYmxlX2VjYykgeworCQkJCXdoaWxlICghaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykpCisJCQkJCTsKKworCQkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19FQ0NfRVJSLAorCQkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJCXN0YXR1cyA9IGRvX2VjY19uZXcoZmxhc2hfYmFuaywKKwkJCQkJCXJlYWRfZGF0YSwgYmxvY2ssIHBhZ2UpOworCQkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkgeworCQkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQkJCQlpZiAoMSA9PSBlY2NfZG9uZV9PUl9kbWFfY29tcCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWVjY19kb25lX09SX2RtYV9jb21wID0gMTsKKwkJCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgeworCQkJCQlpb3dyaXRlMzIoCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCQkJCWlmICgxID09IGVjY19kb25lX09SX2RtYV9jb21wKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAxOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkpCisJCQkJCTsKKwkJCQlpb3dyaXRlMzIoSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpb3dyaXRlMzIoKH5JTlRSX1NUQVRVUzBfX0VDQ19FUlIpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQl9CisKKwkJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLAorCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisKKwkJd2hpbGUgKChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCQk7CisKKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3UxNiBOQU5EX1BpcGVsaW5lX1JlYWRfQWhlYWQodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLAorCQkJCXUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MzIgc3RhdHVzID0gUEFTUzsKKwl1MzIgTnVtUGFnZXMgPSBwYWdlX2NvdW50OworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJaW50IHJldDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJc3RhdHVzID0gQm91bmRhcnlfQ2hlY2tfQmxvY2tfUGFnZShibG9jaywgcGFnZSwgcGFnZV9jb3VudCk7CisKKwlpZiAocGFnZV9jb3VudCA8IDIpCisJCXN0YXR1cyA9IEZBSUw7CisKKwlpZiAoc3RhdHVzICE9IFBBU1MpCisJCXJldHVybiBzdGF0dXM7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKkRldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJLyogRmlsbCB0aGUgbXJzdF9uYW5kX2luZm8gc3RydWN0dXJlICovCisJaW5mby5zdGF0ZSA9IElOVF9QSVBFTElORV9SRUFEX0FIRUFEOworCWluZm8ucmVhZF9kYXRhID0gcmVhZF9kYXRhOworCWluZm8uZmxhc2hfYmFuayA9IGZsYXNoX2Jhbms7CisJaW5mby5ibG9jayA9IGJsb2NrOworCWluZm8ucGFnZSA9IHBhZ2U7CisJaW5mby5yZXQgPSBQQVNTOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMHg0Mik7CisKKwlkZG1hX3RyYW5zKHJlYWRfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAwLCBOdW1QYWdlcyk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7IC8qIEVuYWJsZSBJbnRlcnJ1cHQgKi8KKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW5mby5jb21wbGV0ZSwgMTAgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXYWl0IGZvciBjb21wbGV0aW9uIHRpbWVvdXQgIgorCQkJImluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCQlzdGF0dXMgPSBFUlI7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gaW5mby5yZXQ7CisJfQorCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCisJd2hpbGUgKChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKwordTE2IE5BTkRfV3JpdGVfUGFnZV9NYWluKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJICAgIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJaW50IHJldDsKKwl1OCAqd3JpdGVfZGF0YV9sOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwlpZiAoc3RhdHVzICE9IFBBU1MpCisJCXJldHVybiBzdGF0dXM7CisKKwlmbGFzaF9hZGQgPSAodTY0KShibG9jayAlIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkKKwkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJKHU2NClwYWdlICogRGV2aWNlSW5mby53UGFnZURhdGFTaXplOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaW50cl9zdGF0dXMgPSBpbnRyX3N0YXR1c19hZGRyZXNzZXNbZmxhc2hfYmFua107CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fUFJPR1JBTV9DT01QIHwKKwkJSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwsIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaWYgKHBhZ2VfY291bnQgPiAxKSB7CisJCXdyaXRlX2RhdGFfbCA9IHdyaXRlX2RhdGE7CisJCXdoaWxlIChwYWdlX2NvdW50ID4gTUFYX1BBR0VTX1BFUl9SVykgeworCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pKQorCQkJCXN0YXR1cyA9IE5BTkRfTXVsdGlwbGFuZV9Xcml0ZSh3cml0ZV9kYXRhX2wsCisJCQkJCWJsb2NrLCBwYWdlLCBNQVhfUEFHRVNfUEVSX1JXKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBOQU5EX1BpcGVsaW5lX1dyaXRlX0FoZWFkKAorCQkJCQl3cml0ZV9kYXRhX2wsIGJsb2NrLCBwYWdlLAorCQkJCQlNQVhfUEFHRVNfUEVSX1JXKTsKKwkJCWlmIChzdGF0dXMgPT0gRkFJTCkKKwkJCQlyZXR1cm4gc3RhdHVzOworCisJCQl3cml0ZV9kYXRhX2wgKz0gRGV2aWNlSW5mby53UGFnZURhdGFTaXplICoKKwkJCQkJTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2VfY291bnQgLT0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJCXBhZ2UgKz0gTUFYX1BBR0VTX1BFUl9SVzsKKwkJfQorCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTikpCisJCQlzdGF0dXMgPSBOQU5EX011bHRpcGxhbmVfV3JpdGUod3JpdGVfZGF0YV9sLAorCQkJCWJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKwkJZWxzZQorCQkJc3RhdHVzID0gTkFORF9QaXBlbGluZV9Xcml0ZV9BaGVhZCh3cml0ZV9kYXRhX2wsCisJCQkJYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCS8qIEZpbGwgdGhlIG1yc3RfbmFuZF9pbmZvIHN0cnVjdHVyZSAqLworCWluZm8uc3RhdGUgPSBJTlRfV1JJVEVfUEFHRV9NQUlOOworCWluZm8ud3JpdGVfZGF0YSA9IHdyaXRlX2RhdGE7CisJaW5mby5mbGFzaF9iYW5rID0gZmxhc2hfYmFuazsKKwlpbmZvLmJsb2NrID0gYmxvY2s7CisJaW5mby5wYWdlID0gcGFnZTsKKwlpbmZvLnJldCA9IFBBU1M7CisKKwlkZG1hX3RyYW5zKHdyaXRlX2RhdGEsIGZsYXNoX2FkZCwgZmxhc2hfYmFuaywgMSwgMSk7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBHTE9CQUxfSU5UX0VOQUJMRSk7IC8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW5mby5jb21wbGV0ZSwgMTAgKiBIWik7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXYWl0IGZvciBjb21wbGV0aW9uIHRpbWVvdXQgIgorCQkJImluICVzLCBMaW5lICVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworCQlzdGF0dXMgPSBFUlI7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gaW5mby5yZXQ7CisJfQorCisJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIERNQV9FTkFCTEUpOworCXdoaWxlIChpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykKKwkJOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBOQU5EX0VDQ19DdHJsKGludCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIldpbGwgZW5hYmxlIEVDQyBpbiAlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEVDQ19FTkFCTEUpOworCQllbmFibGVfZWNjID0gMTsKKwl9IGVsc2UgeworCQluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkJIldpbGwgZGlzYWJsZSBFQ0MgaW4gJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBFQ0NfRU5BQkxFKTsKKwkJZW5hYmxlX2VjYyA9IDA7CisJfQorfQorCit1MTYgTkFORF9Xcml0ZV9QYWdlX01haW5fU3BhcmUodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywKKwkJCQkJdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXUzMiBzdGF0dXMgPSBQQVNTOworCXUzMiBpLCBqLCBwYWdlX251bSA9IDA7CisJdTMyIFBhZ2VTaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJdTMyIFBhZ2VEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwl1MzIgZWNjQnl0ZXMgPSBEZXZpY2VJbmZvLndFQ0NCeXRlc1BlclNlY3RvcjsKKwl1MzIgc3BhcmVGbGFnQnl0ZXMgPSBEZXZpY2VJbmZvLndOdW1QYWdlU3BhcmVGbGFnOworCXUzMiBzcGFyZVNraXBCeXRlcyAgPSBEZXZpY2VJbmZvLndTcGFyZVNraXBCeXRlczsKKwl1NjQgZmxhc2hfYWRkOworCXUzMiBlY2NTZWN0b3JTaXplOworCXUzMiBmbGFzaF9iYW5rOworCXUzMiBpbnRyX3N0YXR1cyA9IDA7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCXU4ICpwYWdlX21haW5fc3BhcmUgPSBidWZfd3JpdGVfcGFnZV9tYWluX3NwYXJlOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWVjY1NlY3RvclNpemUgPSBFQ0NfU0VDVE9SX1NJWkUgKiAoRGV2aWNlSW5mby53RGV2aWNlc0Nvbm5lY3RlZCk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKworCWZsYXNoX2JhbmsgPSBibG9jayAvIChEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKTsKKworCWlmIChzdGF0dXMgPT0gUEFTUykgeworCQlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKworCQlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJCXdoaWxlICgoc3RhdHVzICE9IEZBSUwpICYmIChwYWdlX2NvdW50ID4gMCkpIHsKKwkJCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUKKwkJCShEZXZpY2VJbmZvLndUb3RhbEJsb2NrcyAvIHRvdGFsVXNlZEJhbmtzKSkgKgorCQkJRGV2aWNlSW5mby53QmxvY2tEYXRhU2l6ZSArCisJCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwkJCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKworCQkJaW93cml0ZTMyKCh1MzIpKE1PREVfMDEgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkJCShmbGFzaF9hZGQgPj4KKwkJCQlEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCQlGbGFzaE1lbSk7CisKKwkJCWlmIChlbmFibGVfZWNjKSB7CisJCQkJZm9yIChqID0gMDsKKwkJCQkgICAgIGogPAorCQkJCSAgICAgRGV2aWNlSW5mby53UGFnZURhdGFTaXplIC8gZWNjU2VjdG9yU2l6ZTsKKwkJCQkgICAgIGorKykgeworCQkJCQlmb3IgKGkgPSAwOyBpIDwgZWNjU2VjdG9yU2l6ZTsgaSsrKQorCQkJCQkJcGFnZV9tYWluX3NwYXJlWyhlY2NTZWN0b3JTaXplICsKKwkJCQkJCQkJIGVjY0J5dGVzKSAqIGogKworCQkJCQkJCQlpXSA9CisJCQkJCQkgICAgd3JpdGVfZGF0YVtlY2NTZWN0b3JTaXplICoKKwkJCQkJCQkgICAgICAgaiArIGldOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBlY2NCeXRlczsgaSsrKQorCQkJCQkJcGFnZV9tYWluX3NwYXJlWyhlY2NTZWN0b3JTaXplICsKKwkJCQkJCQkJIGVjY0J5dGVzKSAqIGogKworCQkJCQkJCQllY2NTZWN0b3JTaXplICsKKwkJCQkJCQkJaV0gPQorCQkJCQkJICAgIHdyaXRlX2RhdGFbUGFnZURhdGFTaXplICsKKwkJCQkJCQkgICAgICAgc3BhcmVGbGFnQnl0ZXMgKworCQkJCQkJCSAgICAgICBlY2NCeXRlcyAqIGogKworCQkJCQkJCSAgICAgICBpXTsKKwkJCQl9CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgc3BhcmVGbGFnQnl0ZXM7IGkrKykKKwkJCQkJcGFnZV9tYWluX3NwYXJlWyhlY2NTZWN0b3JTaXplICsKKwkJCQkJCQkgZWNjQnl0ZXMpICogaiArIGldID0KKwkJCQkJICAgIHdyaXRlX2RhdGFbUGFnZURhdGFTaXplICsgaV07CisKKwkJCQlmb3IgKGkgPSBQYWdlU2l6ZSAtIDE7IGkgPj0gUGFnZURhdGFTaXplICsKKwkJCQkJCQlzcGFyZVNraXBCeXRlczsgaS0tKQorCQkJCQlwYWdlX21haW5fc3BhcmVbaV0gPSBwYWdlX21haW5fc3BhcmVbaSAtCisJCQkJCQkJCXNwYXJlU2tpcEJ5dGVzXTsKKworCQkJCWZvciAoaSA9IFBhZ2VEYXRhU2l6ZTsgaSA8IFBhZ2VEYXRhU2l6ZSArCisJCQkJCQkJc3BhcmVTa2lwQnl0ZXM7IGkrKykKKwkJCQkJcGFnZV9tYWluX3NwYXJlW2ldID0gMHhmZjsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBQYWdlU2l6ZSAvIDQ7IGkrKykKKwkJCQkJaW93cml0ZTMyKAorCQkJCQkqKCh1MzIgKilwYWdlX21haW5fc3BhcmUgKyBpKSwKKwkJCQkJRmxhc2hNZW0gKyAweDEwKTsKKwkJCX0gZWxzZSB7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgUGFnZVNpemUgLyA0OyBpKyspCisJCQkJCWlvd3JpdGUzMigqKCh1MzIgKil3cml0ZV9kYXRhICsgaSksCisJCQkJCQlGbGFzaE1lbSArIDB4MTApOworCQkJfQorCisJCQl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJKElOVFJfU1RBVFVTMF9fUFJPR1JBTV9DT01QIHwKKwkJCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkpKQorCQkJCTsKKworCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkKKwkJCQlzdGF0dXMgPSBGQUlMOworCisJCQlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCQlwYWdlX251bSsrOworCQkJcGFnZV9jb3VudC0tOworCQkJd3JpdGVfZGF0YSArPSBQYWdlU2l6ZTsKKwkJfQorCisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IE5BTkRfUmVhZF9QYWdlX01haW5fU3BhcmUodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQkgdTE2IHBhZ2VfY291bnQpCit7CisJdTMyIHN0YXR1cyA9IFBBU1M7CisJdTMyIGksIGo7CisJdTY0IGZsYXNoX2FkZCA9IDA7CisJdTMyIFBhZ2VTaXplID0gRGV2aWNlSW5mby53UGFnZVNpemU7CisJdTMyIFBhZ2VEYXRhU2l6ZSA9IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZTsKKwl1MzIgUGFnZVNwYXJlU2l6ZSA9IERldmljZUluZm8ud1BhZ2VTcGFyZVNpemU7CisJdTMyIGVjY0J5dGVzID0gRGV2aWNlSW5mby53RUNDQnl0ZXNQZXJTZWN0b3I7CisJdTMyIHNwYXJlRmxhZ0J5dGVzID0gRGV2aWNlSW5mby53TnVtUGFnZVNwYXJlRmxhZzsKKwl1MzIgc3BhcmVTa2lwQnl0ZXMgID0gRGV2aWNlSW5mby53U3BhcmVTa2lwQnl0ZXM7CisJdTMyIGVjY1NlY3RvclNpemU7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1OCAqcmVhZF9kYXRhX2wgPSByZWFkX2RhdGE7CisJdTMyIGludHJfc3RhdHVzX2FkZHJlc3Nlc1s0XSA9IHtJTlRSX1NUQVRVUzAsCisJCUlOVFJfU1RBVFVTMSwgSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCXU4ICpwYWdlX21haW5fc3BhcmUgPSBidWZfcmVhZF9wYWdlX21haW5fc3BhcmU7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJZWNjU2VjdG9yU2l6ZSA9IEVDQ19TRUNUT1JfU0laRSAqIChEZXZpY2VJbmZvLndEZXZpY2VzQ29ubmVjdGVkKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCisJZmxhc2hfYmFuayA9IGJsb2NrIC8gKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpOworCisJaWYgKHN0YXR1cyA9PSBQQVNTKSB7CisJCWludHJfc3RhdHVzID0gaW50cl9zdGF0dXNfYWRkcmVzc2VzW2ZsYXNoX2JhbmtdOworCisJCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwkJaW93cml0ZTMyKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJCXdoaWxlICgoc3RhdHVzICE9IEZBSUwpICYmIChwYWdlX2NvdW50ID4gMCkpIHsKKwkJCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUKKwkJCQkoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcykpCisJCQkJKiBEZXZpY2VJbmZvLndCbG9ja0RhdGFTaXplICsKKwkJCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwkJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCQkweDQzKTsKKwkJCWluZGV4X2FkZHIoKHUzMikoTU9ERV8xMCB8IChmbGFzaF9iYW5rIDw8IDI0KSB8CisJCQkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwKKwkJCQkweDIwMDAgfCBwYWdlX2NvdW50KTsKKworCQkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fTE9BRF9DT01QKSkKKwkJCQk7CisKKwkJCWlvd3JpdGUzMigodTMyKShNT0RFXzAxIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJCQkoZmxhc2hfYWRkID4+CisJCQkJRGV2aWNlSW5mby5uQml0c0luUGFnZURhdGFTaXplKSksCisJCQkJRmxhc2hNZW0pOworCisJCQlmb3IgKGkgPSAwOyBpIDwgUGFnZVNpemUgLyA0OyBpKyspCisJCQkJKigoKHUzMiAqKXBhZ2VfbWFpbl9zcGFyZSkgKyBpKSA9CisJCQkJCWlvcmVhZDMyKEZsYXNoTWVtICsgMHgxMCk7CisKKwkJCWlmIChlbmFibGVfZWNjKSB7CisJCQkJZm9yIChpID0gUGFnZURhdGFTaXplOyAgaSA8IFBhZ2VTaXplIC0KKwkJCQkJCQlzcGFyZVNraXBCeXRlczsgaSsrKQorCQkJCQlwYWdlX21haW5fc3BhcmVbaV0gPSBwYWdlX21haW5fc3BhcmVbaSArCisJCQkJCQkJCXNwYXJlU2tpcEJ5dGVzXTsKKworCQkJCWZvciAoaiA9IDA7CisJCQkJaiA8IERldmljZUluZm8ud1BhZ2VEYXRhU2l6ZSAvIGVjY1NlY3RvclNpemU7CisJCQkJaisrKSB7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IGVjY1NlY3RvclNpemU7IGkrKykKKwkJCQkJCXJlYWRfZGF0YV9sW2VjY1NlY3RvclNpemUgKiBqICsKKwkJCQkJCQkgICAgaV0gPQorCQkJCQkJICAgIHBhZ2VfbWFpbl9zcGFyZVsKKwkJCQkJCQkoZWNjU2VjdG9yU2l6ZSArCisJCQkJCQkJZWNjQnl0ZXMpICogaiArIGldOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBlY2NCeXRlczsgaSsrKQorCQkJCQkJcmVhZF9kYXRhX2xbUGFnZURhdGFTaXplICsKKwkJCQkJCQkgICAgc3BhcmVGbGFnQnl0ZXMgKworCQkJCQkJCSAgICBlY2NCeXRlcyAqIGogKyBpXSA9CisJCQkJCQkgICAgcGFnZV9tYWluX3NwYXJlWworCQkJCQkJCShlY2NTZWN0b3JTaXplICsKKwkJCQkJCQllY2NCeXRlcykgKiBqICsKKwkJCQkJCQllY2NTZWN0b3JTaXplICsgaV07CisJCQkJfQorCisJCQkJZm9yIChpID0gMDsgaSA8IHNwYXJlRmxhZ0J5dGVzOyBpKyspCisJCQkJCXJlYWRfZGF0YV9sW1BhZ2VEYXRhU2l6ZSArIGldID0KKwkJCQkJICAgIHBhZ2VfbWFpbl9zcGFyZVsoZWNjU2VjdG9yU2l6ZSArCisJCQkJCQkJICAgICBlY2NCeXRlcykgKiBqICsgaV07CisJCQl9IGVsc2UgeworCQkJCWZvciAoaSA9IDA7IGkgPCAoUGFnZURhdGFTaXplICsgUGFnZVNwYXJlU2l6ZSk7CisJCQkJICAgICBpKyspCisJCQkJCXJlYWRfZGF0YV9sW2ldID0gcGFnZV9tYWluX3NwYXJlW2ldOworCisJCQl9CisKKwkJCWlmIChlbmFibGVfZWNjKSB7CisJCQkJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQkoSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSB8CisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX0VSUikpKQorCQkJCQk7CisKKwkJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpIHsKKwkJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCQlzdGF0dXMgPSBkb19lY2NfbmV3KGZsYXNoX2JhbmssCisJCQkJCQlyZWFkX2RhdGEsIGJsb2NrLCBwYWdlKTsKKwkJCQl9CisKKwkJCQlpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FICYKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSB7CisJCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19FUlIgfAorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgeworCQkJCQlpb3dyaXRlMzIoCisJCQkJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUsCisJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIpIHsKKwkJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJCX0KKwkJCX0KKworCQkJcGFnZSsrOworCQkJcGFnZV9jb3VudC0tOworCQkJcmVhZF9kYXRhX2wgKz0gUGFnZVNpemU7CisJCX0KKwl9CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMHg0Mik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1MTYgTkFORF9QaXBlbGluZV9Xcml0ZV9BaGVhZCh1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLAorCQkJdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KQoreworCXUxNiBzdGF0dXMgPSBQQVNTOworCXUzMiBOdW1QYWdlcyA9IHBhZ2VfY291bnQ7CisJdTY0IGZsYXNoX2FkZDsKKwl1MzIgZmxhc2hfYmFuazsKKwl1MzIgaW50cl9zdGF0dXMgPSAwOworCXUzMiBpbnRyX3N0YXR1c19hZGRyZXNzZXNbNF0gPSB7SU5UUl9TVEFUVVMwLAorCQlJTlRSX1NUQVRVUzEsIElOVFJfU1RBVFVTMiwgSU5UUl9TVEFUVVMzfTsKKwlpbnQgcmV0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlzdGF0dXMgPSBCb3VuZGFyeV9DaGVja19CbG9ja19QYWdlKGJsb2NrLCBwYWdlLCBwYWdlX2NvdW50KTsKKworCWlmIChwYWdlX2NvdW50IDwgMikKKwkJc3RhdHVzID0gRkFJTDsKKworCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisJd2hpbGUgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBETUFfRU5BQkxFKSAmIERNQV9FTkFCTEVfX0ZMQUcpKQorCQk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBUUkFOU0ZFUl9TUEFSRV9SRUcpOworCisJLyogRmlsbCB0aGUgbXJzdF9uYW5kX2luZm8gc3RydWN0dXJlICovCisJaW5mby5zdGF0ZSA9IElOVF9QSVBFTElORV9XUklURV9BSEVBRDsKKwlpbmZvLndyaXRlX2RhdGEgPSB3cml0ZV9kYXRhOworCWluZm8uZmxhc2hfYmFuayA9IGZsYXNoX2Jhbms7CisJaW5mby5ibG9jayA9IGJsb2NrOworCWluZm8ucGFnZSA9IHBhZ2U7CisJaW5mby5yZXQgPSBQQVNTOworCisJaW5kZXhfYWRkcigodTMyKShNT0RFXzEwIHwgKGZsYXNoX2JhbmsgPDwgMjQpIHwKKwkJKGZsYXNoX2FkZCA+PiBEZXZpY2VJbmZvLm5CaXRzSW5QYWdlRGF0YVNpemUpKSwgMHg0Mik7CisKKwlkZG1hX3RyYW5zKHdyaXRlX2RhdGEsIGZsYXNoX2FkZCwgZmxhc2hfYmFuaywgMSwgTnVtUGFnZXMpOworCisJaW93cml0ZTMyKDEsIEZsYXNoUmVnICsgR0xPQkFMX0lOVF9FTkFCTEUpOyAvKiBFbmFibGUgaW50ZXJydXB0ICovCisKKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmluZm8uY29tcGxldGUsIDEwICogSFopOworCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiV2FpdCBmb3IgY29tcGxldGlvbiB0aW1lb3V0ICIKKwkJCSJpbiAlcywgTGluZSAlZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKwkJc3RhdHVzID0gRVJSOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGluZm8ucmV0OworCX0KKworCWlvd3JpdGUzMihpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSwgRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisKKwlpb3dyaXRlMzIoMCwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVW4tdGVzdGVkIGZ1bmN0aW9uICovCit1MTYgTkFORF9NdWx0aXBsYW5lX1dyaXRlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJICAgICB1MTYgcGFnZV9jb3VudCkKK3sKKwl1MTYgc3RhdHVzID0gUEFTUzsKKwl1MzIgTnVtUGFnZXMgPSBwYWdlX2NvdW50OworCXU2NCBmbGFzaF9hZGQ7CisJdTMyIGZsYXNoX2Jhbms7CisJdTMyIGludHJfc3RhdHVzID0gMDsKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTE2IHN0YXR1czIgPSBQQVNTOworCXUzMiB0OworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXN0YXR1cyA9IEJvdW5kYXJ5X0NoZWNrX0Jsb2NrX1BhZ2UoYmxvY2ssIHBhZ2UsIHBhZ2VfY291bnQpOworCWlmIChzdGF0dXMgIT0gUEFTUykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZsYXNoX2FkZCA9ICh1NjQpKGJsb2NrICUgKERldmljZUluZm8ud1RvdGFsQmxvY2tzIC8gdG90YWxVc2VkQmFua3MpKQorCQkqIERldmljZUluZm8ud0Jsb2NrRGF0YVNpemUgKworCQkodTY0KXBhZ2UgKiBEZXZpY2VJbmZvLndQYWdlRGF0YVNpemU7CisKKwlmbGFzaF9iYW5rID0gYmxvY2sgLyAoRGV2aWNlSW5mby53VG90YWxCbG9ja3MgLyB0b3RhbFVzZWRCYW5rcyk7CisKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tmbGFzaF9iYW5rXTsKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgVFJBTlNGRVJfU1BBUkVfUkVHKTsKKwlpb3dyaXRlMzIoMHgwMSwgRmxhc2hSZWcgKyBNVUxUSVBMQU5FX09QRVJBVElPTik7CisKKwlpb3dyaXRlMzIoMSwgRmxhc2hSZWcgKyBETUFfRU5BQkxFKTsKKwl3aGlsZSAoIShpb3JlYWQzMihGbGFzaFJlZyArIERNQV9FTkFCTEUpICYgRE1BX0VOQUJMRV9fRkxBRykpCisJCTsKKworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRSQU5TRkVSX1NQQVJFX1JFRyk7CisKKwlpbmRleF9hZGRyKCh1MzIpKE1PREVfMTAgfCAoZmxhc2hfYmFuayA8PCAyNCkgfAorCQkoZmxhc2hfYWRkID4+IERldmljZUluZm8ubkJpdHNJblBhZ2VEYXRhU2l6ZSkpLCAweDQyKTsKKworCWRkbWFfdHJhbnMod3JpdGVfZGF0YSwgZmxhc2hfYWRkLCBmbGFzaF9iYW5rLCAxLCBOdW1QYWdlcyk7CisKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAoIWlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpKQorCQkJOworCisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkgeworCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJc3RhdHVzID0gUEFTUzsKKwkJCWlmIChzdGF0dXMyID09IEZBSUwpCisJCQkJc3RhdHVzID0gRkFJTDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCkgeworCQkJc3RhdHVzMiA9IEZBSUw7CisJCQlzdGF0dXMgPSBGQUlMOworCQkJdCA9IGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTDsKKwkJCWlvd3JpdGUzMih0LCBGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJfSBlbHNlIHsKKwkJCWlvd3JpdGUzMigofklOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKSAmCisJCQkJKH5JTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCksCisJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCX0KKwl9CisKKwlpb3dyaXRlMzIoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyksIEZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgRE1BX0VOQUJMRSk7CisKKwl3aGlsZSAoKGlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0VOQUJMRSkgJiBETUFfRU5BQkxFX19GTEFHKSkKKwkJOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgTVVMVElQTEFORV9PUEVSQVRJT04pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworCisjaWYgQ01EX0RNQQorc3RhdGljIGlycXJldHVybl90IGNkbWFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXJzdF9uYW5kX2luZm8gKmRldiA9IGRldl9pZDsKKwlpbnQgZmlyc3RfZmFpbGVkX2NtZDsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiJXMsIExpbmUgJWQsIEZ1bmN0aW9uOiAlc1xuIiwKKwkJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCisJaWYgKCFpc19jZG1hX2ludGVycnVwdCgpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBEaXNhYmxlIGNvbnRyb2xsZXIgaW50ZXJydXB0cyAqLworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsKKwlHTE9CX0ZUTF9FdmVudF9TdGF0dXMoJmZpcnN0X2ZhaWxlZF9jbWQpOworCWNvbXBsZXRlKCZkZXYtPmNvbXBsZXRlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBoYW5kbGVfbmFuZF9pbnRfcmVhZChzdHJ1Y3QgbXJzdF9uYW5kX2luZm8gKmRldikKK3sKKwl1MzIgaW50cl9zdGF0dXNfYWRkcmVzc2VzWzRdID0ge0lOVFJfU1RBVFVTMCwKKwkJSU5UUl9TVEFUVVMxLCBJTlRSX1NUQVRVUzIsIElOVFJfU1RBVFVTM307CisJdTMyIGludHJfc3RhdHVzOworCXUzMiBlY2NfZG9uZV9PUl9kbWFfY29tcCA9IDA7CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCWRldi0+cmV0ID0gUEFTUzsKKwlpbnRyX3N0YXR1cyA9IGludHJfc3RhdHVzX2FkZHJlc3Nlc1tkZXYtPmZsYXNoX2JhbmtdOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKGVuYWJsZV9lY2MpIHsKKwkJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSKSB7CisJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRUNDX0VSUiwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJZGV2LT5yZXQgPSBkb19lY2NfbmV3KGRldi0+Zmxhc2hfYmFuaywKKwkJCQkJCWRldi0+cmVhZF9kYXRhLAorCQkJCQkJZGV2LT5ibG9jaywgZGV2LT5wYWdlKTsKKwkJCX0gZWxzZSBpZiAoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRyX3N0YXR1cykgJgorCQkJCUlOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSB7CisJCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQlpZiAoMSA9PSBlY2NfZG9uZV9PUl9kbWFfY29tcCkKKwkJCQkJYnJlYWs7CisJCQkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAxOworCQkJfSBlbHNlIGlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQkJSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORSkgeworCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FLAorCQkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJCQlpZiAoMSA9PSBlY2NfZG9uZV9PUl9kbWFfY29tcCkKKwkJCQkJYnJlYWs7CisJCQkJZWNjX2RvbmVfT1JfZG1hX2NvbXAgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkgeworCQkJCWlvd3JpdGUzMihJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCwKKwkJCQkJRmxhc2hSZWcgKyBpbnRyX3N0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBJTlRTICIKKwkJCQkJIihvZmZzZXQgYWRkciAweCV4KSB2YWx1ZTogMHgleFxuIiwKKwkJCQkJaW50cl9zdGF0dXMsCisJCQkJCWlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpKTsKKwkJCX0KKwkJfQorCisJCWlvd3JpdGUzMigofklOVFJfU1RBVFVTMF9fRUNDX0VSUikgJgorCQkofklOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUpICYKKwkJKH5JTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCksCisJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX25hbmRfaW50X3dyaXRlKHN0cnVjdCBtcnN0X25hbmRfaW5mbyAqZGV2KQoreworCXUzMiBpbnRyX3N0YXR1czsKKwl1MzIgaW50cls0XSA9IHtJTlRSX1NUQVRVUzAsIElOVFJfU1RBVFVTMSwKKwkJSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCWludCBzdGF0dXMgPSBQQVNTOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlkZXYtPnJldCA9IFBBU1M7CisJaW50cl9zdGF0dXMgPSBpbnRyW2Rldi0+Zmxhc2hfYmFua107CisKKwl3aGlsZSAoMSkgeworCQl3aGlsZSAoIWlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpKQorCQkJOworCisJCWlmIChpb3JlYWQzMihGbGFzaFJlZyArIGludHJfc3RhdHVzKSAmCisJCQlJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCkgeworCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQkJaWYgKEZBSUwgPT0gc3RhdHVzKQorCQkJCWRldi0+cmV0ID0gRkFJTDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGlvcmVhZDMyKEZsYXNoUmVnICsgaW50cl9zdGF0dXMpICYKKwkJCUlOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMKSB7CisJCQlzdGF0dXMgPSBGQUlMOworCQkJaW93cml0ZTMyKElOVFJfU1RBVFVTMF9fUFJPR1JBTV9GQUlMLAorCQkJCUZsYXNoUmVnICsgaW50cl9zdGF0dXMpOworCQl9IGVsc2UgeworCQkJaW93cml0ZTMyKCh+SU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwpICYKKwkJCQkofklOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QKSwKKwkJCQlGbGFzaFJlZyArIGludHJfc3RhdHVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGRkbWFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbXJzdF9uYW5kX2luZm8gKmRldiA9IGRldl9pZDsKKwl1MzIgaW50X21hc2ssIGludHMwLCBpbnRzMSwgaW50czIsIGludHMzLCBpbnRzX29mZnNldDsKKwl1MzIgaW50cls0XSA9IHtJTlRSX1NUQVRVUzAsIElOVFJfU1RBVFVTMSwKKwkJSU5UUl9TVEFUVVMyLCBJTlRSX1NUQVRVUzN9OworCisJaW50X21hc2sgPSBJTlRSX1NUQVRVUzBfX0RNQV9DTURfQ09NUCB8CisJCUlOVFJfU1RBVFVTMF9fRUNDX1RSQU5TQUNUSU9OX0RPTkUgfAorCQlJTlRSX1NUQVRVUzBfX0VDQ19FUlIgfAorCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCB8CisJCUlOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTDsKKworCWludHMwID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApOworCWludHMxID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpOworCWludHMyID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzIpOworCWludHMzID0gaW9yZWFkMzIoRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzMpOworCisJaW50c19vZmZzZXQgPSBpbnRyW2Rldi0+Zmxhc2hfYmFua107CisKKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19ERUJVRywKKwkJIklOVFIwOiAweCV4LCBJTlRSMTogMHgleCwgSU5UUjI6IDB4JXgsIElOVFIzOiAweCV4LCAiCisJCSJETUFfSU5UUjogMHgleCwgIgorCQkiZGV2LT5zdGF0ZTogMHgleCwgZGV2LT5mbGFzaF9iYW5rOiAlZFxuIiwKKwkJaW50czAsIGludHMxLCBpbnRzMiwgaW50czMsCisJCWlvcmVhZDMyKEZsYXNoUmVnICsgRE1BX0lOVFIpLAorCQlkZXYtPnN0YXRlLCBkZXYtPmZsYXNoX2JhbmspOworCisJaWYgKCEoaW9yZWFkMzIoRmxhc2hSZWcgKyBpbnRzX29mZnNldCkgJiBpbnRfbWFzaykpIHsKKwkJaW93cml0ZTMyKGludHMwLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMCk7CisJCWlvd3JpdGUzMihpbnRzMSwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzEpOworCQlpb3dyaXRlMzIoaW50czIsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMyKTsKKwkJaW93cml0ZTMyKGludHMzLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMyk7CisJCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCQkiZGRtYV9pc3I6IEludmFsaWQgaW50ZXJydXB0IGZvciBOQU5EIGNvbnRyb2xsZXIuICIKKwkJCSJJZ25vcmUgaXRcbiIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJc3dpdGNoIChkZXYtPnN0YXRlKSB7CisJY2FzZSBJTlRfUkVBRF9QQUdFX01BSU46CisJY2FzZSBJTlRfUElQRUxJTkVfUkVBRF9BSEVBRDoKKwkJLyogRGlzYWJsZSBjb250cm9sbGVyIGludGVycnVwdHMgKi8KKwkJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgR0xPQkFMX0lOVF9FTkFCTEUpOworCQloYW5kbGVfbmFuZF9pbnRfcmVhZChkZXYpOworCQlicmVhazsKKwljYXNlIElOVF9XUklURV9QQUdFX01BSU46CisJY2FzZSBJTlRfUElQRUxJTkVfV1JJVEVfQUhFQUQ6CisJCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIEdMT0JBTF9JTlRfRU5BQkxFKTsKKwkJaGFuZGxlX25hbmRfaW50X3dyaXRlKGRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiZGRtYV9pc3IgLSBJbGxlZ2FsIHN0YXRlOiAweCV4XG4iLAorCQkJZGV2LT5zdGF0ZSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlkZXYtPnN0YXRlID0gSU5UX0lETEVfU1RBVEU7CisJY29tcGxldGUoJmRldi0+Y29tcGxldGUpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmFuZF9wY2lfaWRzW10gPSB7CisJeworCSAudmVuZG9yID0gMHg4MDg2LAorCSAuZGV2aWNlID0gMHgwODA5LAorCSAuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkgLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCisJIH0sCisJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQorfTsKKworc3RhdGljIGludCBuYW5kX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IC1FTk9ERVY7CisJdW5zaWduZWQgbG9uZyBjc3JfYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNzcl9sZW47CisJc3RydWN0IG1yc3RfbmFuZF9pbmZvICpwbmRldiA9ICZpbmZvOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfV0FSTiwgIiVzLCBMaW5lICVkLCBGdW5jdGlvbjogJXNcbiIsCisJCSAgICAgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZC5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBjaV9zZXRfbWFzdGVyKGRldik7CisJcG5kZXYtPmRldiA9IGRldjsKKworCWNzcl9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJaWYgKCFjc3JfYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IHBjaV9yZXNvdXJjZV9zdGFydCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY3NyX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKKwlpZiAoIWNzcl9sZW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBwY2lfcmVzb3VyY2VfbGVuIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGRldiwgU1BFQ1RSQV9OQU5EX05BTUUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBVbmFibGUgdG8gcmVxdWVzdCAiCisJCSAgICAgICAibWVtb3J5IHJlZ2lvblxuIik7CisJCWdvdG8gZmFpbGVkX3JlcV9jc3I7CisJfQorCisJcG5kZXYtPmlvYWRkciA9IGlvcmVtYXBfbm9jYWNoZShjc3JfYmFzZSwgY3NyX2xlbik7CisJaWYgKCFwbmRldi0+aW9hZGRyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogVW5hYmxlIHRvIHJlbWFwIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxlZF9yZW1hcF9jc3I7CisJfQorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYTogQ1NSIDB4JTA4bHggLT4gMHglcCAoMHglbHgpXG4iLAorCQkgICAgICAgY3NyX2Jhc2UsIHBuZGV2LT5pb2FkZHIsIGNzcl9sZW4pOworCisJaW5pdF9jb21wbGV0aW9uKCZwbmRldi0+Y29tcGxldGUpOworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX0RFQlVHLCAiU3BlY3RyYTogSVJRICVkXG4iLCBkZXYtPmlycSk7CisKKyNpZiBDTURfRE1BCisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBjZG1hX2lzciwgSVJRRl9TSEFSRUQsCisJCQlTUEVDVFJBX05BTkRfTkFNRSwgJmluZm8pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3BlY3RyYTogVW5hYmxlIHRvIGFsbG9jYXRlIElSUVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWlvdW5tYXAocG5kZXYtPmlvYWRkcik7CisJCWdvdG8gZmFpbGVkX3JlbWFwX2NzcjsKKwl9CisjZWxzZQorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgZGRtYV9pc3IsIElSUUZfU0hBUkVELAorCQkJU1BFQ1RSQV9OQU5EX05BTUUsICZpbmZvKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IFVuYWJsZSB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlpb3VubWFwKHBuZGV2LT5pb2FkZHIpOworCQlnb3RvIGZhaWxlZF9yZW1hcF9jc3I7CisJfQorI2VuZGlmCisKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBwbmRldik7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3JlbWFwX2NzcjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitmYWlsZWRfcmVxX2NzcjoKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG5hbmRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBtcnN0X25hbmRfaW5mbyAqcG5kZXYgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKyNpZiBDTURfRE1BCisJZnJlZV9pcnEoZGV2LT5pcnEsIHBuZGV2KTsKKyNlbmRpZgorCWlvdW5tYXAocG5kZXYtPmlvYWRkcik7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworfQorCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmFuZF9wY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5hbmRfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IFNQRUNUUkFfTkFORF9OQU1FLAorCS5pZF90YWJsZSA9IG5hbmRfcGNpX2lkcywKKwkucHJvYmUgPSBuYW5kX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gbmFuZF9wY2lfcmVtb3ZlLAorfTsKKworaW50IE5BTkRfRmxhc2hfSW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisJdTMyIGludF9tYXNrOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfVFJBQ0UsICIlcywgTGluZSAlZCwgRnVuY3Rpb246ICVzXG4iLAorCQkgICAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisKKwlGbGFzaFJlZyA9IGlvcmVtYXBfbm9jYWNoZShHTE9CX0hXQ1RMX1JFR19CQVNFLAorCQkJR0xPQl9IV0NUTF9SRUdfU0laRSk7CisJaWYgKCFGbGFzaFJlZykgeworCQlwcmludGsoS0VSTl9FUlIgIlNwZWN0cmE6IGlvcmVtYXBfbm9jYWNoZSBmYWlsZWQhIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwluYW5kX2RiZ19wcmludChOQU5EX0RCR19XQVJOLAorCQkiU3BlY3RyYTogUmVtYXBwZWQgcmVnIGJhc2UgYWRkcmVzczogIgorCQkiMHglcCwgbGVuOiAlZFxuIiwKKwkJRmxhc2hSZWcsIEdMT0JfSFdDVExfUkVHX1NJWkUpOworCisJRmxhc2hNZW0gPSBpb3JlbWFwX25vY2FjaGUoR0xPQl9IV0NUTF9NRU1fQkFTRSwKKwkJCUdMT0JfSFdDVExfTUVNX1NJWkUpOworCWlmICghRmxhc2hNZW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTcGVjdHJhOiBpb3JlbWFwX25vY2FjaGUgZmFpbGVkISIpOworCQlpb3VubWFwKEZsYXNoUmVnKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW5hbmRfZGJnX3ByaW50KE5BTkRfREJHX1dBUk4sCisJCSJTcGVjdHJhOiBSZW1hcHBlZCBmbGFzaCBiYXNlIGFkZHJlc3M6ICIKKwkJIjB4JXAsIGxlbjogJWRcbiIsCisJCSh2b2lkICopRmxhc2hNZW0sIEdMT0JfSFdDVExfTUVNX1NJWkUpOworCisJbmFuZF9kYmdfcHJpbnQoTkFORF9EQkdfREVCVUcsICJEdW1wIHRpbWluZyByZWdpc3RlciB2YWx1ZXM6IgorCQkJImFjY19jbGtzOiAlZCwgcmVfMl93ZTogJWQsIHdlXzJfcmU6ICVkLCIKKwkJCSJhZGRyXzJfZGF0YTogJWQsIHJkd3JfZW5fbG9fY250OiAlZCwgIgorCQkJInJkd3JfZW5faGlfY250OiAlZCwgY3Nfc2V0dXBfY250OiAlZFxuIiwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgQUNDX0NMS1MpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRV8yX1dFKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgV0VfMl9SRSksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIEFERFJfMl9EQVRBKSwKKwkJCWlvcmVhZDMyKEZsYXNoUmVnICsgUkRXUl9FTl9MT19DTlQpLAorCQkJaW9yZWFkMzIoRmxhc2hSZWcgKyBSRFdSX0VOX0hJX0NOVCksCisJCQlpb3JlYWQzMihGbGFzaFJlZyArIENTX1NFVFVQX0NOVCkpOworCisJTkFORF9GbGFzaF9SZXNldCgpOworCisJaW93cml0ZTMyKDAsIEZsYXNoUmVnICsgR0xPQkFMX0lOVF9FTkFCTEUpOworCisjaWYgQ01EX0RNQQorCWluZm8ucGNtZHNfbnVtID0gMDsKKwlpbmZvLmZsYXNoX2JhbmsgPSAwOworCWluZm8uY2RtYV9udW0gPSAwOworCWludF9tYXNrID0gKERNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDAgfAorCQlETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwxIHwKKwkJRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMiB8CisJCURNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDMgfAorCQlETUFfSU5UUl9fTUVNQ09QWV9ERVNDX0NPTVApOworCWlvd3JpdGUzMihpbnRfbWFzaywgRmxhc2hSZWcgKyBETUFfSU5UUl9FTik7CisJaW93cml0ZTMyKDB4RkZGRiwgRmxhc2hSZWcgKyBETUFfSU5UUik7CisKKwlpbnRfbWFzayA9IChJTlRSX1NUQVRVUzBfX0VDQ19FUlIgfAorCQlJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTCB8CisJCUlOVFJfU1RBVFVTMF9fRVJBU0VfRkFJTCk7CisjZWxzZQorCWludF9tYXNrID0gSU5UUl9TVEFUVVMwX19ETUFfQ01EX0NPTVAgfAorCQlJTlRSX1NUQVRVUzBfX0VDQ19UUkFOU0FDVElPTl9ET05FIHwKKwkJSU5UUl9TVEFUVVMwX19FQ0NfRVJSIHwKKwkJSU5UUl9TVEFUVVMwX19QUk9HUkFNX0ZBSUwgfAorCQlJTlRSX1NUQVRVUzBfX0VSQVNFX0ZBSUw7CisjZW5kaWYKKwlpb3dyaXRlMzIoaW50X21hc2ssIEZsYXNoUmVnICsgSU5UUl9FTjApOworCWlvd3JpdGUzMihpbnRfbWFzaywgRmxhc2hSZWcgKyBJTlRSX0VOMSk7CisJaW93cml0ZTMyKGludF9tYXNrLCBGbGFzaFJlZyArIElOVFJfRU4yKTsKKwlpb3dyaXRlMzIoaW50X21hc2ssIEZsYXNoUmVnICsgSU5UUl9FTjMpOworCisJLyogQ2xlYXIgYWxsIHN0YXR1cyBiaXRzICovCisJaW93cml0ZTMyKDB4RkZGRiwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzApOworCWlvd3JpdGUzMigweEZGRkYsIEZsYXNoUmVnICsgSU5UUl9TVEFUVVMxKTsKKwlpb3dyaXRlMzIoMHhGRkZGLCBGbGFzaFJlZyArIElOVFJfU1RBVFVTMik7CisJaW93cml0ZTMyKDB4RkZGRiwgRmxhc2hSZWcgKyBJTlRSX1NUQVRVUzMpOworCisJaW93cml0ZTMyKDB4MEYsIEZsYXNoUmVnICsgUkJfUElOX0VOQUJMRUQpOworCWlvd3JpdGUzMihDSElQX0VOX0RPTlRfQ0FSRV9fRkxBRywgRmxhc2hSZWcgKyBDSElQX0VOQUJMRV9ET05UX0NBUkUpOworCisJLyogU2hvdWxkIHNldCB2YWx1ZSBmb3IgdGhlc2UgcmVnaXN0ZXJzIHdoZW4gaW5pdCAqLworCWlvd3JpdGUzMigwLCBGbGFzaFJlZyArIFRXT19ST1dfQUREUl9DWUNMRVMpOworCWlvd3JpdGUzMigxLCBGbGFzaFJlZyArIEVDQ19FTkFCTEUpOworCWVuYWJsZV9lY2MgPSAxOworCisJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmFuZF9wY2lfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBQQVNTOworfQorCisvKiBGcmVlIG1lbW9yeSAqLworaW50IG5hbmRfcmVsZWFzZV9zcGVjdHJhKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuYW5kX3BjaV9kcml2ZXIpOworCWlvdW5tYXAoRmxhc2hNZW0pOworCWlvdW5tYXAoRmxhc2hSZWcpOworCisJcmV0dXJuIDA7Cit9CisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9sbGRfbmFuZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX25hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDgzODgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbGxkX25hbmQuaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0xMRF9OQU5EXworI2RlZmluZSBfTExEX05BTkRfCisKKyNpZmRlZiBFTERPUkEKKyNpbmNsdWRlICJkZWZzLmgiCisjZWxzZQorI2luY2x1ZGUgImZsYXNoLmgiCisjaW5jbHVkZSAiZmZzcG9ydC5oIgorI2VuZGlmCisKKyNkZWZpbmUgTU9ERV8wMCAgICAweDAwMDAwMDAwCisjZGVmaW5lIE1PREVfMDEgICAgMHgwNDAwMDAwMAorI2RlZmluZSBNT0RFXzEwICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgTU9ERV8xMSAgICAweDBDMDAwMDAwCisKKworI2RlZmluZSBEQVRBX1RSQU5TRkVSX01PREUgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJPVEVDVElPTl9QRVJfQkxPQ0sgICAgICAgICAgICAxCisjZGVmaW5lIExPQURfV0FJVF9DT1VOVCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBQUk9HUkFNX1dBSVRfQ09VTlQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRVJBU0VfV0FJVF9DT1VOVCAgICAgICAgICAgICAgICA0CisjZGVmaW5lIElOVF9NT05JVE9SX0NZQ0xFX0NPVU5UICAgICAgICAgNQorI2RlZmluZSBSRUFEX0JVU1lfUElOX0VOQUJMRUQgICAgICAgICAgIDYKKyNkZWZpbmUgTVVMVElQTEFORV9PUEVSQVRJT05fU1VQUE9SVCAgICA3CisjZGVmaW5lIFBSRV9GRVRDSF9NT0RFICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBDRV9ET05UX0NBUkVfU1VQUE9SVCAgICAgICAgICAgIDkKKyNkZWZpbmUgQ09QWUJBQ0tfU1VQUE9SVCAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBDQUNIRV9XUklURV9TVVBQT1JUICAgICAgICAgICAgIDExCisjZGVmaW5lIENBQ0hFX1JFQURfU1VQUE9SVCAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgTlVNX1BBR0VTX0lOX0JMT0NLICAgICAgICAgICAgICAxMworI2RlZmluZSBFQ0NfRU5BQkxFX1NFTEVDVCAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFdSSVRFX0VOQUJMRV8yX1JFQURfRU5BQkxFICAgICAgMTUKKyNkZWZpbmUgQUREUkVTU18yX0RBVEEgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBSRUFEX0VOQUJMRV8yX1dSSVRFX0VOQUJMRSAgICAgIDE3CisjZGVmaW5lIFRXT19ST1dfQUREUkVTU19DWUNMRVMgICAgICAgICAgMTgKKyNkZWZpbmUgTVVMVElQTEFORV9BRERSRVNTX1JFU1RSSUNUICAgICAxOQorI2RlZmluZSBBQ0NfQ0xPQ0tTICAgICAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIFJFQURfV1JJVEVfRU5BQkxFX0xPV19DT1VOVCAgICAgMjEKKyNkZWZpbmUgUkVBRF9XUklURV9FTkFCTEVfSElHSF9DT1VOVCAgICAyMgorCisjZGVmaW5lIEVDQ19TRUNUT1JfU0laRSAgICAgNTEyCisjZGVmaW5lIExMRF9NQVhfRkxBU0hfQkFOS1MgICAgIDQKKworc3RydWN0IG1yc3RfbmFuZF9pbmZvIHsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXUzMiBzdGF0ZTsKKwl1MzIgZmxhc2hfYmFuazsKKwl1OCAqcmVhZF9kYXRhOworCXU4ICp3cml0ZV9kYXRhOworCXUzMiBibG9jazsKKwl1MTYgcGFnZTsKKwl1MzIgdXNlX2RtYTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkcjsgIC8qIE1hcHBlZCBpbyByZWcgYmFzZSBhZGRyZXNzICovCisJaW50IHJldDsKKwl1MzIgcGNtZHNfbnVtOworCXN0cnVjdCBwZW5kaW5nX2NtZCAqcGNtZHM7CisJaW50IGNkbWFfbnVtOyAgICAgICAgICAgLyogQ0RNQSBkZXNjcmlwdG9yIG51bWJlciBpbiB0aGlzIGNoYW4gKi8KKwl1OCAqY2RtYV9kZXNjX2J1ZjsJLyogQ0RNQSBkZXNjcmlwdG9yIHRhYmxlICovCisJdTggKm1lbWNwX2Rlc2NfYnVmOwkvKiBNZW1vcnkgY29weSBkZXNjcmlwdG9yIHRhYmxlICovCisJZG1hX2FkZHJfdCBjZG1hX2Rlc2M7CS8qIE1hcHBlZCBDRE1BIGRlc2NyaXB0b3IgdGFibGUgKi8KKwlkbWFfYWRkcl90IG1lbWNwX2Rlc2M7CS8qIE1hcHBlZCBtZW1vcnkgY29weSBkZXNjcmlwdG9yIHRhYmxlICovCisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7Cit9OworCitpbnQgTkFORF9GbGFzaF9Jbml0KHZvaWQpOworaW50IG5hbmRfcmVsZWFzZV9zcGVjdHJhKHZvaWQpOwordTE2ICBOQU5EX0ZsYXNoX1Jlc2V0KHZvaWQpOwordTE2ICBOQU5EX1JlYWRfRGV2aWNlX0lEKHZvaWQpOwordTE2ICBOQU5EX0VyYXNlX0Jsb2NrKHUzMiBmbGFzaF9hZGQpOwordTE2ICBOQU5EX1dyaXRlX1BhZ2VfTWFpbih1OCAqd3JpdGVfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQl1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfUmVhZF9QYWdlX01haW4odTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQl1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfVW5sb2NrQXJyYXlBbGwodm9pZCk7Cit1MTYgIE5BTkRfV3JpdGVfUGFnZV9NYWluX1NwYXJlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssCisJCQkJdTE2IHBhZ2UsIHUxNiBwYWdlX2NvdW50KTsKK3UxNiAgTkFORF9Xcml0ZV9QYWdlX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IHBhZ2VfY291bnQpOwordTE2ICBOQU5EX1JlYWRfUGFnZV9NYWluX1NwYXJlKHU4ICpyZWFkX2RhdGEsIHUzMiBibG9jaywgdTE2IHBhZ2UsCisJCQkJdTE2IHBhZ2VfY291bnQpOwordTE2ICBOQU5EX1JlYWRfUGFnZV9TcGFyZSh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3ZvaWQgTkFORF9MTERfRW5hYmxlX0Rpc2FibGVfSW50ZXJydXB0cyh1MTYgSU5UX0VOQUJMRSk7Cit1MTYgIE5BTkRfR2V0X0JhZF9CbG9jayh1MzIgYmxvY2spOwordTE2ICBOQU5EX1BpcGVsaW5lX1JlYWRfQWhlYWQodTggKnJlYWRfZGF0YSwgdTMyIGJsb2NrLCB1MTYgcGFnZSwKKwkJCQl1MTYgcGFnZV9jb3VudCk7Cit1MTYgIE5BTkRfUGlwZWxpbmVfV3JpdGVfQWhlYWQodTggKndyaXRlX2RhdGEsIHUzMiBibG9jaywKKwkJCQl1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpOwordTE2ICBOQU5EX011bHRpcGxhbmVfUmVhZCh1OCAqcmVhZF9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3UxNiAgTkFORF9NdWx0aXBsYW5lX1dyaXRlKHU4ICp3cml0ZV9kYXRhLCB1MzIgYmxvY2ssIHUxNiBwYWdlLAorCQkJCXUxNiBwYWdlX2NvdW50KTsKK3ZvaWQgTkFORF9FQ0NfQ3RybChpbnQgZW5hYmxlKTsKK3UxNiBOQU5EX1JlYWRfUGFnZV9NYWluX1BvbGxpbmcodTggKnJlYWRfZGF0YSwKKwkJdTMyIGJsb2NrLCB1MTYgcGFnZSwgdTE2IHBhZ2VfY291bnQpOwordTE2IE5BTkRfUGlwZWxpbmVfUmVhZF9BaGVhZF9Qb2xsaW5nKHU4ICpyZWFkX2RhdGEsCisJCQl1MzIgYmxvY2ssIHUxNiBwYWdlLCB1MTYgcGFnZV9jb3VudCk7Cit2b2lkIENvbnZfU3BhcmVfRGF0YV9Mb2cyUGh5X0Zvcm1hdCh1OCAqZGF0YSk7Cit2b2lkIENvbnZfU3BhcmVfRGF0YV9QaHkyTG9nX0Zvcm1hdCh1OCAqZGF0YSk7Cit2b2lkIENvbnZfTWFpbl9TcGFyZV9EYXRhX0xvZzJQaHlfRm9ybWF0KHU4ICpkYXRhLCB1MTYgcGFnZV9jb3VudCk7Cit2b2lkIENvbnZfTWFpbl9TcGFyZV9EYXRhX1BoeTJMb2dfRm9ybWF0KHU4ICpkYXRhLCB1MTYgcGFnZV9jb3VudCk7CisKK2V4dGVybiB2b2lkIF9faW9tZW0gKkZsYXNoUmVnOworZXh0ZXJuIHZvaWQgX19pb21lbSAqRmxhc2hNZW07CisKK2V4dGVybiBpbnQgdG90YWxVc2VkQmFua3M7CitleHRlcm4gdTMyIEdMT0JfdmFsaWRfYmFua3NbTExEX01BWF9GTEFTSF9CQU5LU107CisKKyNlbmRpZiAvKl9MTERfTkFORF8qLworCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbmFuZF9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9uYW5kX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTkyZTRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvbmFuZF9yZWdzLmgKQEAgLTAsMCArMSw2MTkgQEAKKy8qCisgKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRGV2aWNlIERyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1cHBsaWVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjZGVmaW5lIERFVklDRV9SRVNFVAkJCQkweDAKKyNkZWZpbmUgICAgIERFVklDRV9SRVNFVF9fQkFOSzAJCQkJMHgwMDAxCisjZGVmaW5lICAgICBERVZJQ0VfUkVTRVRfX0JBTksxCQkJCTB4MDAwMgorI2RlZmluZSAgICAgREVWSUNFX1JFU0VUX19CQU5LMgkJCQkweDAwMDQKKyNkZWZpbmUgICAgIERFVklDRV9SRVNFVF9fQkFOSzMJCQkJMHgwMDA4CisKKyNkZWZpbmUgVFJBTlNGRVJfU1BBUkVfUkVHCQkJMHgxMAorI2RlZmluZSAgICAgVFJBTlNGRVJfU1BBUkVfUkVHX19GTEFHCQkJMHgwMDAxCisKKyNkZWZpbmUgTE9BRF9XQUlUX0NOVAkJCQkweDIwCisjZGVmaW5lICAgICBMT0FEX1dBSVRfQ05UX19WQUxVRQkJCQkweGZmZmYKKworI2RlZmluZSBQUk9HUkFNX1dBSVRfQ05UCQkJMHgzMAorI2RlZmluZSAgICAgUFJPR1JBTV9XQUlUX0NOVF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBFUkFTRV9XQUlUX0NOVAkJCQkweDQwCisjZGVmaW5lICAgICBFUkFTRV9XQUlUX0NOVF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBJTlRfTU9OX0NZQ0NOVAkJCQkweDUwCisjZGVmaW5lICAgICBJTlRfTU9OX0NZQ0NOVF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBSQl9QSU5fRU5BQkxFRAkJCQkweDYwCisjZGVmaW5lICAgICBSQl9QSU5fRU5BQkxFRF9fQkFOSzAJCQkweDAwMDEKKyNkZWZpbmUgICAgIFJCX1BJTl9FTkFCTEVEX19CQU5LMQkJCTB4MDAwMgorI2RlZmluZSAgICAgUkJfUElOX0VOQUJMRURfX0JBTksyCQkJMHgwMDA0CisjZGVmaW5lICAgICBSQl9QSU5fRU5BQkxFRF9fQkFOSzMJCQkweDAwMDgKKworI2RlZmluZSBNVUxUSVBMQU5FX09QRVJBVElPTgkJCTB4NzAKKyNkZWZpbmUgICAgIE1VTFRJUExBTkVfT1BFUkFUSU9OX19GTEFHCQkJMHgwMDAxCisKKyNkZWZpbmUgTVVMVElQTEFORV9SRUFEX0VOQUJMRQkJCTB4ODAKKyNkZWZpbmUgICAgIE1VTFRJUExBTkVfUkVBRF9FTkFCTEVfX0ZMQUcJCTB4MDAwMQorCisjZGVmaW5lIENPUFlCQUNLX0RJU0FCTEUJCQkweDkwCisjZGVmaW5lICAgICBDT1BZQkFDS19ESVNBQkxFX19GTEFHCQkJMHgwMDAxCisKKyNkZWZpbmUgQ0FDSEVfV1JJVEVfRU5BQkxFCQkJMHhhMAorI2RlZmluZSAgICAgQ0FDSEVfV1JJVEVfRU5BQkxFX19GTEFHCQkJMHgwMDAxCisKKyNkZWZpbmUgQ0FDSEVfUkVBRF9FTkFCTEUJCQkweGIwCisjZGVmaW5lICAgICBDQUNIRV9SRUFEX0VOQUJMRV9fRkxBRwkJCTB4MDAwMQorCisjZGVmaW5lIFBSRUZFVENIX01PREUJCQkJMHhjMAorI2RlZmluZSAgICAgUFJFRkVUQ0hfTU9ERV9fUFJFRkVUQ0hfRU4JCQkweDAwMDEKKyNkZWZpbmUgICAgIFBSRUZFVENIX01PREVfX1BSRUZFVENIX0JVUlNUX0xFTkdUSAkweGZmZjAKKworI2RlZmluZSBDSElQX0VOQUJMRV9ET05UX0NBUkUJCQkweGQwCisjZGVmaW5lICAgICBDSElQX0VOX0RPTlRfQ0FSRV9fRkxBRwkJCTB4MDEKKworI2RlZmluZSBFQ0NfRU5BQkxFCQkJCTB4ZTAKKyNkZWZpbmUgICAgIEVDQ19FTkFCTEVfX0ZMQUcJCQkJMHgwMDAxCisKKyNkZWZpbmUgR0xPQkFMX0lOVF9FTkFCTEUJCQkweGYwCisjZGVmaW5lICAgICBHTE9CQUxfSU5UX0VOX0ZMQUcJCQkJMHgwMQorCisjZGVmaW5lIFdFXzJfUkUJCQkJCTB4MTAwCisjZGVmaW5lICAgICBXRV8yX1JFX19WQUxVRQkJCQkweDAwM2YKKworI2RlZmluZSBBRERSXzJfREFUQQkJCQkweDExMAorI2RlZmluZSAgICAgQUREUl8yX0RBVEFfX1ZBTFVFCQkJCTB4MDAzZgorCisjZGVmaW5lIFJFXzJfV0UJCQkJCTB4MTIwCisjZGVmaW5lICAgICBSRV8yX1dFX19WQUxVRQkJCQkweDAwM2YKKworI2RlZmluZSBBQ0NfQ0xLUyAgICAJCQkJMHgxMzAKKyNkZWZpbmUgICAgIEFDQ19DTEtTX19WQUxVRQkJCQkweDAwMGYKKworI2RlZmluZSBOVU1CRVJfT0ZfUExBTkVTCQkJMHgxNDAKKyNkZWZpbmUgICAgIE5VTUJFUl9PRl9QTEFORVNfX1ZBTFVFCQkJMHgwMDA3CisKKyNkZWZpbmUgUEFHRVNfUEVSX0JMT0NLCQkJCTB4MTUwCisjZGVmaW5lICAgICBQQUdFU19QRVJfQkxPQ0tfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgREVWSUNFX1dJRFRICQkJCTB4MTYwCisjZGVmaW5lICAgICBERVZJQ0VfV0lEVEhfX1ZBTFVFCQkJCTB4MDAwMworCisjZGVmaW5lIERFVklDRV9NQUlOX0FSRUFfU0laRQkJCTB4MTcwCisjZGVmaW5lICAgICBERVZJQ0VfTUFJTl9BUkVBX1NJWkVfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBERVZJQ0VfU1BBUkVfQVJFQV9TSVpFCQkJMHgxODAKKyNkZWZpbmUgICAgIERFVklDRV9TUEFSRV9BUkVBX1NJWkVfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBUV09fUk9XX0FERFJfQ1lDTEVTCQkJMHgxOTAKKyNkZWZpbmUgICAgIFRXT19ST1dfQUREUl9DWUNMRVNfX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBNVUxUSVBMQU5FX0FERFJfUkVTVFJJQ1QJCTB4MWEwCisjZGVmaW5lICAgICBNVUxUSVBMQU5FX0FERFJfUkVTVFJJQ1RfX0ZMQUcJCTB4MDAwMQorCisjZGVmaW5lIEVDQ19DT1JSRUNUSU9OCQkJCTB4MWIwCisjZGVmaW5lICAgICBFQ0NfQ09SUkVDVElPTl9fVkFMVUUJCQkweDAwMWYKKworI2RlZmluZSBSRUFEX01PREUJCQkJMHgxYzAKKyNkZWZpbmUgICAgIFJFQURfTU9ERV9fVkFMVUUJCQkJMHgwMDBmCisKKyNkZWZpbmUgV1JJVEVfTU9ERQkJCQkweDFkMAorI2RlZmluZSAgICAgV1JJVEVfTU9ERV9fVkFMVUUJCQkJMHgwMDBmCisKKyNkZWZpbmUgQ09QWUJBQ0tfTU9ERQkJCQkweDFlMAorI2RlZmluZSAgICAgQ09QWUJBQ0tfTU9ERV9fVkFMVUUJCQkweDAwMGYKKworI2RlZmluZSBSRFdSX0VOX0xPX0NOVAkJCQkweDFmMAorI2RlZmluZSAgICAgUkRXUl9FTl9MT19DTlRfX1ZBTFVFCQkJMHgwMDFmCisKKyNkZWZpbmUgUkRXUl9FTl9ISV9DTlQJCQkJMHgyMDAKKyNkZWZpbmUgICAgIFJEV1JfRU5fSElfQ05UX19WQUxVRQkJCTB4MDAxZgorCisjZGVmaW5lIE1BWF9SRF9ERUxBWQkJCQkweDIxMAorI2RlZmluZSAgICAgTUFYX1JEX0RFTEFZX19WQUxVRQkJCQkweDAwMGYKKworI2RlZmluZSBDU19TRVRVUF9DTlQJCQkJMHgyMjAKKyNkZWZpbmUgICAgIENTX1NFVFVQX0NOVF9fVkFMVUUJCQkJMHgwMDFmCisKKyNkZWZpbmUgU1BBUkVfQVJFQV9TS0lQX0JZVEVTCQkJMHgyMzAKKyNkZWZpbmUgICAgIFNQQVJFX0FSRUFfU0tJUF9CWVRFU19fVkFMVUUJCTB4MDAzZgorCisjZGVmaW5lIFNQQVJFX0FSRUFfTUFSS0VSCQkJMHgyNDAKKyNkZWZpbmUgICAgIFNQQVJFX0FSRUFfTUFSS0VSX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIERFVklDRVNfQ09OTkVDVEVECQkJMHgyNTAKKyNkZWZpbmUgICAgIERFVklDRVNfQ09OTkVDVEVEX19WQUxVRQkJCTB4MDAwNworCisjZGVmaW5lIERJRV9NQVNLCQkJCQkweDI2MAorI2RlZmluZSAgICAgRElFX01BU0tfX1ZBTFVFCQkJCTB4MDBmZgorCisjZGVmaW5lIEZJUlNUX0JMT0NLX09GX05FWFRfUExBTkUJCTB4MjcwCisjZGVmaW5lICAgICBGSVJTVF9CTE9DS19PRl9ORVhUX1BMQU5FX19WQUxVRQkJMHhmZmZmCisKKyNkZWZpbmUgV1JJVEVfUFJPVEVDVAkJCQkweDI4MAorI2RlZmluZSAgICAgV1JJVEVfUFJPVEVDVF9fRkxBRwkJCQkweDAwMDEKKworI2RlZmluZSBSRV8yX1JFCQkJCQkweDI5MAorI2RlZmluZSAgICAgUkVfMl9SRV9fVkFMVUUJCQkJMHgwMDNmCisKKyNkZWZpbmUgTUFOVUZBQ1RVUkVSX0lECQkJMHgzMDAKKyNkZWZpbmUgICAgIE1BTlVGQUNUVVJFUl9JRF9fVkFMVUUJCQkweDAwZmYKKworI2RlZmluZSBERVZJQ0VfSUQJCQkJMHgzMTAKKyNkZWZpbmUgICAgIERFVklDRV9JRF9fVkFMVUUJCQkJMHgwMGZmCisKKyNkZWZpbmUgREVWSUNFX1BBUkFNXzAJCQkJMHgzMjAKKyNkZWZpbmUgICAgIERFVklDRV9QQVJBTV8wX19WQUxVRQkJCTB4MDBmZgorCisjZGVmaW5lIERFVklDRV9QQVJBTV8xCQkJCTB4MzMwCisjZGVmaW5lICAgICBERVZJQ0VfUEFSQU1fMV9fVkFMVUUJCQkweDAwZmYKKworI2RlZmluZSBERVZJQ0VfUEFSQU1fMgkJCQkweDM0MAorI2RlZmluZSAgICAgREVWSUNFX1BBUkFNXzJfX1ZBTFVFCQkJMHgwMGZmCisKKyNkZWZpbmUgTE9HSUNBTF9QQUdFX0RBVEFfU0laRQkJCTB4MzUwCisjZGVmaW5lICAgICBMT0dJQ0FMX1BBR0VfREFUQV9TSVpFX19WQUxVRQkJMHhmZmZmCisKKyNkZWZpbmUgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkUJCQkweDM2MAorI2RlZmluZSAgICAgTE9HSUNBTF9QQUdFX1NQQVJFX1NJWkVfX1ZBTFVFCQkweGZmZmYKKworI2RlZmluZSBSRVZJU0lPTgkJCQkJMHgzNzAKKyNkZWZpbmUgICAgIFJFVklTSU9OX19WQUxVRQkJCQkweGZmZmYKKworI2RlZmluZSBPTkZJX0RFVklDRV9GRUFUVVJFUwkJCTB4MzgwCisjZGVmaW5lICAgICBPTkZJX0RFVklDRV9GRUFUVVJFU19fVkFMVUUJCQkweDAwM2YKKworI2RlZmluZSBPTkZJX09QVElPTkFMX0NPTU1BTkRTCQkweDM5MAorI2RlZmluZSAgICAgT05GSV9PUFRJT05BTF9DT01NQU5EU19fVkFMVUUJCTB4MDAzZgorCisjZGVmaW5lIE9ORklfVElNSU5HX01PREUJCQkweDNhMAorI2RlZmluZSAgICAgT05GSV9USU1JTkdfTU9ERV9fVkFMVUUJCQkweDAwM2YKKworI2RlZmluZSBPTkZJX1BHTV9DQUNIRV9USU1JTkdfTU9ERQkJMHgzYjAKKyNkZWZpbmUgICAgIE9ORklfUEdNX0NBQ0hFX1RJTUlOR19NT0RFX19WQUxVRQkJMHgwMDNmCisKKyNkZWZpbmUgT05GSV9ERVZJQ0VfTk9fT0ZfTFVOUwkJCTB4M2MwCisjZGVmaW5lICAgICBPTkZJX0RFVklDRV9OT19PRl9MVU5TX19OT19PRl9MVU5TCQkweDAwZmYKKyNkZWZpbmUgICAgIE9ORklfREVWSUNFX05PX09GX0xVTlNfX09ORklfREVWSUNFCQkweDAxMDAKKworI2RlZmluZSBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9MCTB4M2QwCisjZGVmaW5lICAgICBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9MX19WQUxVRQkweGZmZmYKKworI2RlZmluZSBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9VCTB4M2UwCisjZGVmaW5lICAgICBPTkZJX0RFVklDRV9OT19PRl9CTE9DS1NfUEVSX0xVTl9VX19WQUxVRQkweGZmZmYKKworI2RlZmluZSBGRUFUVVJFUwkJCQkJMHgzZjAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19OX0JBTktTCQkJCTB4MDAwMworI2RlZmluZSAgICAgRkVBVFVSRVNfX0VDQ19NQVhfRVJSCQkJMHgwMDNjCisjZGVmaW5lICAgICBGRUFUVVJFU19fRE1BCQkJCQkweDAwNDAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19DTURfRE1BCQkJCTB4MDA4MAorI2RlZmluZSAgICAgRkVBVFVSRVNfX1BBUlRJVElPTgkJCQkweDAxMDAKKyNkZWZpbmUgICAgIEZFQVRVUkVTX19YRE1BX1NJREVCQU5ECQkJMHgwMjAwCisjZGVmaW5lICAgICBGRUFUVVJFU19fR1BSRUcJCQkJMHgwNDAwCisjZGVmaW5lICAgICBGRUFUVVJFU19fSU5ERVhfQUREUgkJCQkweDA4MDAKKworI2RlZmluZSBUUkFOU0ZFUl9NT0RFCQkJCTB4NDAwCisjZGVmaW5lICAgICBUUkFOU0ZFUl9NT0RFX19WQUxVRQkJCTB4MDAwMworCisjZGVmaW5lIElOVFJfU1RBVFVTMAkJCQkweDQxMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0VDQ19FUlIJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fRE1BX0NNRF9DT01QCQkJMHgwMDA0CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX1RJTUVfT1VUCQkJMHgwMDA4CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19FUkFTRV9GQUlMCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0xPQURfQ09NUAkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fRVJBU0VfQ09NUAkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMwX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0xPQ0tFRF9CTEsJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fVU5TVVBfQ01ECQkJMHgwODAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX0lOVF9BQ1QJCQkweDEwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fUlNUX0NPTVAJCQkweDIwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMF9fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzBfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBJTlRSX0VOMAkJCQkJMHg0MjAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX0VOMF9fRUNDX0VSUgkJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfRU4wX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfRU4wX19USU1FX09VVAkJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfRU4wX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19FUkFTRV9GQUlMCQkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX0xPQURfQ09NUAkJCQkweDAwNDAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19FUkFTRV9DT01QCQkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19MT0NLRURfQkxLCQkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1VOU1VQX0NNRAkJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfRU4wX19JTlRfQUNUCQkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1JTVF9DT01QCQkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1BJUEVfQ01EX0VSUgkJCTB4NDAwMAorI2RlZmluZSAgICAgSU5UUl9FTjBfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBQQUdFX0NOVDAJCQkJMHg0MzAKKyNkZWZpbmUgICAgIFBBR0VfQ05UMF9fVkFMVUUJCQkJMHgwMGZmCisKKyNkZWZpbmUgRVJSX1BBR0VfQUREUjAJCQkJMHg0NDAKKyNkZWZpbmUgICAgIEVSUl9QQUdFX0FERFIwX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIEVSUl9CTE9DS19BRERSMAkJCTB4NDUwCisjZGVmaW5lICAgICBFUlJfQkxPQ0tfQUREUjBfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgSU5UUl9TVEFUVVMxCQkJCTB4NDYwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fRUNDX0VSUgkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fVElNRV9PVVQJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX0VSQVNFX0ZBSUwJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fTE9BRF9DT01QCQkJMHgwMDQwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19FUkFTRV9DT01QCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzFfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fTE9DS0VEX0JMSwkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19VTlNVUF9DTUQJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fSU5UX0FDVAkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19SU1RfQ09NUAkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMxX19QSVBFX0NNRF9FUlIJCQkweDQwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMV9fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIElOVFJfRU4xCQkJCQkweDQ3MAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0VDQ19UUkFOU0FDVElPTl9ET05FCQkweDAwMDEKKyNkZWZpbmUgICAgIElOVFJfRU4xX19FQ0NfRVJSCQkJCTB4MDAwMgorI2RlZmluZSAgICAgSU5UUl9FTjFfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAorI2RlZmluZSAgICAgSU5UUl9FTjFfX1RJTUVfT1VUCQkJCTB4MDAwOAorI2RlZmluZSAgICAgSU5UUl9FTjFfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0VSQVNFX0ZBSUwJCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fTE9BRF9DT01QCQkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9FTjFfX1BST0dSQU1fQ09NUAkJCTB4MDA4MAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0VSQVNFX0NPTVAJCQkJMHgwMTAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0xPQ0tFRF9CTEsJCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fVU5TVVBfQ01ECQkJCTB4MDgwMAorI2RlZmluZSAgICAgSU5UUl9FTjFfX0lOVF9BQ1QJCQkJMHgxMDAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fUlNUX0NPTVAJCQkJMHgyMDAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX0VOMV9fUEFHRV9YRkVSX0lOQwkJCTB4ODAwMAorCisjZGVmaW5lIFBBR0VfQ05UMQkJCQkweDQ4MAorI2RlZmluZSAgICAgUEFHRV9DTlQxX19WQUxVRQkJCQkweDAwZmYKKworI2RlZmluZSBFUlJfUEFHRV9BRERSMQkJCQkweDQ5MAorI2RlZmluZSAgICAgRVJSX1BBR0VfQUREUjFfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgRVJSX0JMT0NLX0FERFIxCQkJMHg0YTAKKyNkZWZpbmUgICAgIEVSUl9CTE9DS19BRERSMV9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBJTlRSX1NUQVRVUzIJCQkJMHg0YjAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fRUNDX1RSQU5TQUNUSU9OX0RPTkUJCTB4MDAwMQorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19FQ0NfRVJSCQkJMHgwMDAyCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0RNQV9DTURfQ09NUAkJCTB4MDAwNAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19USU1FX09VVAkJCTB4MDAwOAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fRVJBU0VfRkFJTAkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19MT0FEX0NPTVAJCQkweDAwNDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fUFJPR1JBTV9DT01QCQkJMHgwMDgwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX0VSQVNFX0NPTVAJCQkweDAxMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTMl9fUElQRV9DUFlCQ0tfQ01EX0NPTVAJCTB4MDIwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19MT0NLRURfQkxLCQkJMHgwNDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1VOU1VQX0NNRAkJCTB4MDgwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19JTlRfQUNUCQkJMHgxMDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1JTVF9DT01QCQkJMHgyMDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzJfX1BJUEVfQ01EX0VSUgkJCTB4NDAwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMyX19QQUdFX1hGRVJfSU5DCQkJMHg4MDAwCisKKyNkZWZpbmUgSU5UUl9FTjIJCQkJCTB4NGMwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRUNDX1RSQU5TQUNUSU9OX0RPTkUJCTB4MDAwMQorI2RlZmluZSAgICAgSU5UUl9FTjJfX0VDQ19FUlIJCQkJMHgwMDAyCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRE1BX0NNRF9DT01QCQkJMHgwMDA0CisjZGVmaW5lICAgICBJTlRSX0VOMl9fVElNRV9PVVQJCQkJMHgwMDA4CisjZGVmaW5lICAgICBJTlRSX0VOMl9fUFJPR1JBTV9GQUlMCQkJMHgwMDEwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRVJBU0VfRkFJTAkJCQkweDAwMjAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19MT0FEX0NPTVAJCQkJMHgwMDQwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fUFJPR1JBTV9DT01QCQkJMHgwMDgwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fRVJBU0VfQ09NUAkJCQkweDAxMDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fTE9DS0VEX0JMSwkJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19VTlNVUF9DTUQJCQkJMHgwODAwCisjZGVmaW5lICAgICBJTlRSX0VOMl9fSU5UX0FDVAkJCQkweDEwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19SU1RfQ09NUAkJCQkweDIwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19QSVBFX0NNRF9FUlIJCQkweDQwMDAKKyNkZWZpbmUgICAgIElOVFJfRU4yX19QQUdFX1hGRVJfSU5DCQkJMHg4MDAwCisKKyNkZWZpbmUgUEFHRV9DTlQyCQkJCTB4NGQwCisjZGVmaW5lICAgICBQQUdFX0NOVDJfX1ZBTFVFCQkJCTB4MDBmZgorCisjZGVmaW5lIEVSUl9QQUdFX0FERFIyCQkJCTB4NGUwCisjZGVmaW5lICAgICBFUlJfUEFHRV9BRERSMl9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBFUlJfQkxPQ0tfQUREUjIJCQkweDRmMAorI2RlZmluZSAgICAgRVJSX0JMT0NLX0FERFIyX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIElOVFJfU1RBVFVTMwkJCQkweDUwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0VDQ19FUlIJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fRE1BX0NNRF9DT01QCQkJMHgwMDA0CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX1RJTUVfT1VUCQkJMHgwMDA4CisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX1BST0dSQU1fRkFJTAkJCTB4MDAxMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19FUkFTRV9GQUlMCQkJMHgwMDIwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0xPQURfQ09NUAkJCTB4MDA0MAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fRVJBU0VfQ09NUAkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9TVEFUVVMzX19QSVBFX0NQWUJDS19DTURfQ09NUAkJMHgwMjAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0xPQ0tFRF9CTEsJCQkweDA0MDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fVU5TVVBfQ01ECQkJMHgwODAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX0lOVF9BQ1QJCQkweDEwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fUlNUX0NPTVAJCQkweDIwMDAKKyNkZWZpbmUgICAgIElOVFJfU1RBVFVTM19fUElQRV9DTURfRVJSCQkJMHg0MDAwCisjZGVmaW5lICAgICBJTlRSX1NUQVRVUzNfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBJTlRSX0VOMwkJCQkJMHg1MTAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19FQ0NfVFJBTlNBQ1RJT05fRE9ORQkJMHgwMDAxCisjZGVmaW5lICAgICBJTlRSX0VOM19fRUNDX0VSUgkJCQkweDAwMDIKKyNkZWZpbmUgICAgIElOVFJfRU4zX19ETUFfQ01EX0NPTVAJCQkweDAwMDQKKyNkZWZpbmUgICAgIElOVFJfRU4zX19USU1FX09VVAkJCQkweDAwMDgKKyNkZWZpbmUgICAgIElOVFJfRU4zX19QUk9HUkFNX0ZBSUwJCQkweDAwMTAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19FUkFTRV9GQUlMCQkJCTB4MDAyMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX0xPQURfQ09NUAkJCQkweDAwNDAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19QUk9HUkFNX0NPTVAJCQkweDAwODAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19FUkFTRV9DT01QCQkJCTB4MDEwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1BJUEVfQ1BZQkNLX0NNRF9DT01QCQkweDAyMDAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19MT0NLRURfQkxLCQkJCTB4MDQwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1VOU1VQX0NNRAkJCQkweDA4MDAKKyNkZWZpbmUgICAgIElOVFJfRU4zX19JTlRfQUNUCQkJCTB4MTAwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1JTVF9DT01QCQkJCTB4MjAwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1BJUEVfQ01EX0VSUgkJCTB4NDAwMAorI2RlZmluZSAgICAgSU5UUl9FTjNfX1BBR0VfWEZFUl9JTkMJCQkweDgwMDAKKworI2RlZmluZSBQQUdFX0NOVDMJCQkJMHg1MjAKKyNkZWZpbmUgICAgIFBBR0VfQ05UM19fVkFMVUUJCQkJMHgwMGZmCisKKyNkZWZpbmUgRVJSX1BBR0VfQUREUjMJCQkJMHg1MzAKKyNkZWZpbmUgICAgIEVSUl9QQUdFX0FERFIzX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIEVSUl9CTE9DS19BRERSMwkJCTB4NTQwCisjZGVmaW5lICAgICBFUlJfQkxPQ0tfQUREUjNfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgREFUQV9JTlRSCQkJCTB4NTUwCisjZGVmaW5lICAgICBEQVRBX0lOVFJfX1dSSVRFX1NQQUNFX0FWCQkJMHgwMDAxCisjZGVmaW5lICAgICBEQVRBX0lOVFJfX1JFQURfREFUQV9BVgkJCTB4MDAwMgorCisjZGVmaW5lIERBVEFfSU5UUl9FTgkJCQkweDU2MAorI2RlZmluZSAgICAgREFUQV9JTlRSX0VOX19XUklURV9TUEFDRV9BVgkJMHgwMDAxCisjZGVmaW5lICAgICBEQVRBX0lOVFJfRU5fX1JFQURfREFUQV9BVgkJCTB4MDAwMgorCisjZGVmaW5lIEdQUkVHXzAJCQkJCTB4NTcwCisjZGVmaW5lICAgICBHUFJFR18wX19WQUxVRQkJCQkweGZmZmYKKworI2RlZmluZSBHUFJFR18xCQkJCQkweDU4MAorI2RlZmluZSAgICAgR1BSRUdfMV9fVkFMVUUJCQkJMHhmZmZmCisKKyNkZWZpbmUgR1BSRUdfMgkJCQkJMHg1OTAKKyNkZWZpbmUgICAgIEdQUkVHXzJfX1ZBTFVFCQkJCTB4ZmZmZgorCisjZGVmaW5lIEdQUkVHXzMJCQkJCTB4NWEwCisjZGVmaW5lICAgICBHUFJFR18zX19WQUxVRQkJCQkweGZmZmYKKworI2RlZmluZSBFQ0NfVEhSRVNIT0xECQkJCTB4NjAwCisjZGVmaW5lICAgICBFQ0NfVEhSRVNIT0xEX19WQUxVRQkJCQkweDAzZmYKKworI2RlZmluZSBFQ0NfRVJST1JfQkxPQ0tfQUREUkVTUwkJMHg2MTAKKyNkZWZpbmUgICAgIEVDQ19FUlJPUl9CTE9DS19BRERSRVNTX19WQUxVRQkJMHhmZmZmCisKKyNkZWZpbmUgRUNDX0VSUk9SX1BBR0VfQUREUkVTUwkJCTB4NjIwCisjZGVmaW5lICAgICBFQ0NfRVJST1JfUEFHRV9BRERSRVNTX19WQUxVRQkJMHgwZmZmCisjZGVmaW5lICAgICBFQ0NfRVJST1JfUEFHRV9BRERSRVNTX19CQU5LCQkweGYwMDAKKworI2RlZmluZSBFQ0NfRVJST1JfQUREUkVTUwkJCTB4NjMwCisjZGVmaW5lICAgICBFQ0NfRVJST1JfQUREUkVTU19fT0ZGU0VUCQkJMHgwZmZmCisjZGVmaW5lICAgICBFQ0NfRVJST1JfQUREUkVTU19fU0VDVE9SX05SCQkweGYwMDAKKworI2RlZmluZSBFUlJfQ09SUkVDVElPTl9JTkZPCQkJMHg2NDAKKyNkZWZpbmUgICAgIEVSUl9DT1JSRUNUSU9OX0lORk9fX0JZVEVNQVNLCQkweDAwZmYKKyNkZWZpbmUgICAgIEVSUl9DT1JSRUNUSU9OX0lORk9fX0RFVklDRV9OUgkJMHgwZjAwCisjZGVmaW5lICAgICBFUlJfQ09SUkVDVElPTl9JTkZPX19FUlJPUl9UWVBFCQkweDQwMDAKKyNkZWZpbmUgICAgIEVSUl9DT1JSRUNUSU9OX0lORk9fX0xBU1RfRVJSX0lORk8JCTB4ODAwMAorCisjZGVmaW5lIERNQV9FTkFCTEUJCQkJMHg3MDAKKyNkZWZpbmUgICAgIERNQV9FTkFCTEVfX0ZMQUcJCQkJMHgwMDAxCisKKyNkZWZpbmUgSUdOT1JFX0VDQ19ET05FCQkJCTB4NzEwCisjZGVmaW5lICAgICBJR05PUkVfRUNDX0RPTkVfX0ZMQUcJCQkweDAwMDEKKworI2RlZmluZSBETUFfSU5UUgkJCQkweDcyMAorI2RlZmluZSAgICAgRE1BX0lOVFJfX1RBUkdFVF9FUlJPUgkJCTB4MDAwMQorI2RlZmluZSAgICAgRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMAkJMHgwMDAyCisjZGVmaW5lICAgICBETUFfSU5UUl9fREVTQ19DT01QX0NIQU5ORUwxCQkweDAwMDQKKyNkZWZpbmUgICAgIERNQV9JTlRSX19ERVNDX0NPTVBfQ0hBTk5FTDIJCTB4MDAwOAorI2RlZmluZSAgICAgRE1BX0lOVFJfX0RFU0NfQ09NUF9DSEFOTkVMMwkJMHgwMDEwCisjZGVmaW5lICAgICBETUFfSU5UUl9fTUVNQ09QWV9ERVNDX0NPTVAJCTB4MDAyMAorCisjZGVmaW5lIERNQV9JTlRSX0VOCQkJCTB4NzMwCisjZGVmaW5lICAgICBETUFfSU5UUl9FTl9fVEFSR0VUX0VSUk9SCQkJMHgwMDAxCisjZGVmaW5lICAgICBETUFfSU5UUl9FTl9fREVTQ19DT01QX0NIQU5ORUwwCQkweDAwMDIKKyNkZWZpbmUgICAgIERNQV9JTlRSX0VOX19ERVNDX0NPTVBfQ0hBTk5FTDEJCTB4MDAwNAorI2RlZmluZSAgICAgRE1BX0lOVFJfRU5fX0RFU0NfQ09NUF9DSEFOTkVMMgkJMHgwMDA4CisjZGVmaW5lICAgICBETUFfSU5UUl9FTl9fREVTQ19DT01QX0NIQU5ORUwzCQkweDAwMTAKKyNkZWZpbmUgICAgIERNQV9JTlRSX0VOX19NRU1DT1BZX0RFU0NfQ09NUAkJMHgwMDIwCisKKyNkZWZpbmUgVEFSR0VUX0VSUl9BRERSX0xPCQkJMHg3NDAKKyNkZWZpbmUgICAgIFRBUkdFVF9FUlJfQUREUl9MT19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBUQVJHRVRfRVJSX0FERFJfSEkJCQkweDc1MAorI2RlZmluZSAgICAgVEFSR0VUX0VSUl9BRERSX0hJX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIENITkxfQUNUSVZFCQkJCTB4NzYwCisjZGVmaW5lICAgICBDSE5MX0FDVElWRV9fQ0hBTk5FTDAJCQkweDAwMDEKKyNkZWZpbmUgICAgIENITkxfQUNUSVZFX19DSEFOTkVMMQkJCTB4MDAwMgorI2RlZmluZSAgICAgQ0hOTF9BQ1RJVkVfX0NIQU5ORUwyCQkJMHgwMDA0CisjZGVmaW5lICAgICBDSE5MX0FDVElWRV9fQ0hBTk5FTDMJCQkweDAwMDgKKworI2RlZmluZSBBQ1RJVkVfU1JDX0lECQkJCTB4ODAwCisjZGVmaW5lICAgICBBQ1RJVkVfU1JDX0lEX19WQUxVRQkJCQkweDAwZmYKKworI2RlZmluZSBQVE5fSU5UUgkJCQkJMHg4MTAKKyNkZWZpbmUgICAgIFBUTl9JTlRSX19DT05GSUdfRVJST1IJCQkweDAwMDEKKyNkZWZpbmUgICAgIFBUTl9JTlRSX19BQ0NFU1NfRVJST1JfQkFOSzAJCTB4MDAwMgorI2RlZmluZSAgICAgUFROX0lOVFJfX0FDQ0VTU19FUlJPUl9CQU5LMQkJMHgwMDA0CisjZGVmaW5lICAgICBQVE5fSU5UUl9fQUNDRVNTX0VSUk9SX0JBTksyCQkweDAwMDgKKyNkZWZpbmUgICAgIFBUTl9JTlRSX19BQ0NFU1NfRVJST1JfQkFOSzMJCTB4MDAxMAorI2RlZmluZSAgICAgUFROX0lOVFJfX1JFR19BQ0NFU1NfRVJST1IJCQkweDAwMjAKKworI2RlZmluZSBQVE5fSU5UUl9FTgkJCQkweDgyMAorI2RlZmluZSAgICAgUFROX0lOVFJfRU5fX0NPTkZJR19FUlJPUgkJCTB4MDAwMQorI2RlZmluZSAgICAgUFROX0lOVFJfRU5fX0FDQ0VTU19FUlJPUl9CQU5LMAkJMHgwMDAyCisjZGVmaW5lICAgICBQVE5fSU5UUl9FTl9fQUNDRVNTX0VSUk9SX0JBTksxCQkweDAwMDQKKyNkZWZpbmUgICAgIFBUTl9JTlRSX0VOX19BQ0NFU1NfRVJST1JfQkFOSzIJCTB4MDAwOAorI2RlZmluZSAgICAgUFROX0lOVFJfRU5fX0FDQ0VTU19FUlJPUl9CQU5LMwkJMHgwMDEwCisjZGVmaW5lICAgICBQVE5fSU5UUl9FTl9fUkVHX0FDQ0VTU19FUlJPUgkJMHgwMDIwCisKKyNkZWZpbmUgUEVSTV9TUkNfSURfMAkJCQkweDgzMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMF9fU1JDSUQJCQkJMHgwMGZmCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8wX19ESVJFQ1RfQUNDRVNTX0FDVElWRQkJMHgwODAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8wX19XUklURV9BQ1RJVkUJCQkweDIwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzBfX1JFQURfQUNUSVZFCQkJMHg0MDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8wX19QQVJUSVRJT05fVkFMSUQJCTB4ODAwMAorCisjZGVmaW5lIE1JTl9CTEtfQUREUl8wCQkJCTB4ODQwCisjZGVmaW5lICAgICBNSU5fQkxLX0FERFJfMF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNQVhfQkxLX0FERFJfMAkJCQkweDg1MAorI2RlZmluZSAgICAgTUFYX0JMS19BRERSXzBfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUlOX01BWF9CQU5LXzAJCQkJMHg4NjAKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18wX19NSU5fVkFMVUUJCQkweDAwMDMKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18wX19NQVhfVkFMVUUJCQkweDAwMGMKKworI2RlZmluZSBQRVJNX1NSQ19JRF8xCQkJCTB4ODcwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8xX19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMV9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzFfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzEJCQkJMHg4ODAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl8xX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl8xCQkJCTB4ODkwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfMV9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfMQkJCQkweDhhMAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzFfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzFfX01BWF9WQUxVRQkJCTB4MDAwYworCisjZGVmaW5lIFBFUk1fU1JDX0lEXzIJCQkJMHg4YjAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzJfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fRElSRUNUX0FDQ0VTU19BQ1RJVkUJCTB4MDgwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fV1JJVEVfQUNUSVZFCQkJMHgyMDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8yX19SRUFEX0FDVElWRQkJCTB4NDAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfMl9fUEFSVElUSU9OX1ZBTElECQkweDgwMDAKKworI2RlZmluZSBNSU5fQkxLX0FERFJfMgkJCQkweDhjMAorI2RlZmluZSAgICAgTUlOX0JMS19BRERSXzJfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUFYX0JMS19BRERSXzIJCQkJMHg4ZDAKKyNkZWZpbmUgICAgIE1BWF9CTEtfQUREUl8yX19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1JTl9NQVhfQkFOS18yCQkJCTB4OGUwCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfMl9fTUlOX1ZBTFVFCQkJMHgwMDAzCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfMl9fTUFYX1ZBTFVFCQkJMHgwMDBjCisKKyNkZWZpbmUgUEVSTV9TUkNfSURfMwkJCQkweDhmMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfM19fU1JDSUQJCQkJMHgwMGZmCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8zX19ESVJFQ1RfQUNDRVNTX0FDVElWRQkJMHgwODAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8zX19XUklURV9BQ1RJVkUJCQkweDIwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzNfX1JFQURfQUNUSVZFCQkJMHg0MDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF8zX19QQVJUSVRJT05fVkFMSUQJCTB4ODAwMAorCisjZGVmaW5lIE1JTl9CTEtfQUREUl8zCQkJCTB4OTAwCisjZGVmaW5lICAgICBNSU5fQkxLX0FERFJfM19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNQVhfQkxLX0FERFJfMwkJCQkweDkxMAorI2RlZmluZSAgICAgTUFYX0JMS19BRERSXzNfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUlOX01BWF9CQU5LXzMJCQkJMHg5MjAKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18zX19NSU5fVkFMVUUJCQkweDAwMDMKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS18zX19NQVhfVkFMVUUJCQkweDAwMGMKKworI2RlZmluZSBQRVJNX1NSQ19JRF80CQkJCTB4OTMwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF80X19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNF9fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzRfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzQJCQkJMHg5NDAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl80X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl80CQkJCTB4OTUwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfNF9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfNAkJCQkweDk2MAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzRfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzRfX01BWF9WQUxVRQkJCTB4MDAwYworCisjZGVmaW5lIFBFUk1fU1JDX0lEXzUJCQkJMHg5NzAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzVfX1NSQ0lECQkJCTB4MDBmZgorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fRElSRUNUX0FDQ0VTU19BQ1RJVkUJCTB4MDgwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fV1JJVEVfQUNUSVZFCQkJMHgyMDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF81X19SRUFEX0FDVElWRQkJCTB4NDAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNV9fUEFSVElUSU9OX1ZBTElECQkweDgwMDAKKworI2RlZmluZSBNSU5fQkxLX0FERFJfNQkJCQkweDk4MAorI2RlZmluZSAgICAgTUlOX0JMS19BRERSXzVfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUFYX0JMS19BRERSXzUJCQkJMHg5OTAKKyNkZWZpbmUgICAgIE1BWF9CTEtfQUREUl81X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1JTl9NQVhfQkFOS181CQkJCTB4OWEwCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfNV9fTUlOX1ZBTFVFCQkJMHgwMDAzCisjZGVmaW5lICAgICBNSU5fTUFYX0JBTktfNV9fTUFYX1ZBTFVFCQkJMHgwMDBjCisKKyNkZWZpbmUgUEVSTV9TUkNfSURfNgkJCQkweDliMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfNl9fU1JDSUQJCQkJMHgwMGZmCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF82X19ESVJFQ1RfQUNDRVNTX0FDVElWRQkJMHgwODAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF82X19XUklURV9BQ1RJVkUJCQkweDIwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzZfX1JFQURfQUNUSVZFCQkJMHg0MDAwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF82X19QQVJUSVRJT05fVkFMSUQJCTB4ODAwMAorCisjZGVmaW5lIE1JTl9CTEtfQUREUl82CQkJCTB4OWMwCisjZGVmaW5lICAgICBNSU5fQkxLX0FERFJfNl9fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNQVhfQkxLX0FERFJfNgkJCQkweDlkMAorI2RlZmluZSAgICAgTUFYX0JMS19BRERSXzZfX1ZBTFVFCQkJMHhmZmZmCisKKyNkZWZpbmUgTUlOX01BWF9CQU5LXzYJCQkJMHg5ZTAKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS182X19NSU5fVkFMVUUJCQkweDAwMDMKKyNkZWZpbmUgICAgIE1JTl9NQVhfQkFOS182X19NQVhfVkFMVUUJCQkweDAwMGMKKworI2RlZmluZSBQRVJNX1NSQ19JRF83CQkJCTB4OWYwCisjZGVmaW5lICAgICBQRVJNX1NSQ19JRF83X19TUkNJRAkJCQkweDAwZmYKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX0RJUkVDVF9BQ0NFU1NfQUNUSVZFCQkweDA4MDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX1dSSVRFX0FDVElWRQkJCTB4MjAwMAorI2RlZmluZSAgICAgUEVSTV9TUkNfSURfN19fUkVBRF9BQ1RJVkUJCQkweDQwMDAKKyNkZWZpbmUgICAgIFBFUk1fU1JDX0lEXzdfX1BBUlRJVElPTl9WQUxJRAkJMHg4MDAwCisKKyNkZWZpbmUgTUlOX0JMS19BRERSXzcJCQkJMHhhMDAKKyNkZWZpbmUgICAgIE1JTl9CTEtfQUREUl83X19WQUxVRQkJCTB4ZmZmZgorCisjZGVmaW5lIE1BWF9CTEtfQUREUl83CQkJCTB4YTEwCisjZGVmaW5lICAgICBNQVhfQkxLX0FERFJfN19fVkFMVUUJCQkweGZmZmYKKworI2RlZmluZSBNSU5fTUFYX0JBTktfNwkJCQkweGEyMAorI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzdfX01JTl9WQUxVRQkJCTB4MDAwMworI2RlZmluZSAgICAgTUlOX01BWF9CQU5LXzdfX01BWF9WQUxVRQkJCTB4MDAwYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvc3BlY3RyYXN3Y29uZmlnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9zcGVjdHJhc3djb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI1OTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvc3BlY3RyYXN3Y29uZmlnLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIE5BTkQgRmxhc2ggQ29udHJvbGxlciBEZXZpY2UgRHJpdmVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEludGVsIENvcnBvcmF0aW9uIGFuZCBpdHMgc3VwcGxpZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX1NQRUNUUkFTV0NPTkZJR18KKyNkZWZpbmUgX1NQRUNUUkFTV0NPTkZJR18KKworLyogTkFORCBkcml2ZXIgdmVyc2lvbiAqLworI2RlZmluZSBHTE9CX1ZFUlNJT04gICAgICAgICAgImRyaXZlciB2ZXJzaW9uIDIwMTAwMzExIgorCisKKy8qKioqKiBDb21tb24gUGFyYW1ldGVycyAqKioqKi8KKyNkZWZpbmUgUkVUUllfVElNRVMgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIFJFQURfQkFEQkxPQ0tfSU5GTyAgICAgICAgICAgIDEKKyNkZWZpbmUgUkVBREJBQ0tfVkVSSUZZICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVRPX0ZPUk1BVF9GTEFTSCAgICAgICAgICAgICAwCisKKy8qKioqKiBDYWNoZSBQYXJhbWV0ZXJzICoqKioqLworI2RlZmluZSBDQUNIRV9JVEVNX05VTSAgICAgICAgICAgIDEyOAorI2RlZmluZSBCTEtfTlVNX0ZPUl9MMl9DQUNIRSAgICAgICAgMTYKKworLyoqKioqIEJsb2NrIFRhYmxlIFBhcmFtZXRlcnMgKioqKiovCisjZGVmaW5lIEJMT0NLX1RBQkxFX0lOREVYICAgICAgICAgICAgIDAKKworLyoqKioqIFdlYXIgTGV2ZWxpbmcgUGFyYW1ldGVycyAqKioqKi8KKyNkZWZpbmUgV0VBUl9MRVZFTElOR19HQVRFICAgICAgICAgMHgxMAorI2RlZmluZSBXRUFSX0xFVkVMSU5HX0JMT0NLX05VTSAgICAgIDEwCisKKyNkZWZpbmUgREVCVUdfQk5EUlkgICAgICAgICAgICAgMAorCisvKioqKiogUHJvZHVjdCBGZWF0dXJlIFN1cHBvcnQgKioqKiovCisjZGVmaW5lIEZMQVNIX0VNVSAgICAgICAgICAgICAgIGRlZmluZWQoQ09ORklHX1NQRUNUUkFfRU1VKQorI2RlZmluZSBGTEFTSF9OQU5EICAgICAgICAgICAgICBkZWZpbmVkKENPTkZJR19TUEVDVFJBX01SU1RfSFcpCisjZGVmaW5lIEZMQVNIX01URCAgICAgICAgICAgICAgIGRlZmluZWQoQ09ORklHX1NQRUNUUkFfTVREKQorI2RlZmluZSBDTURfRE1BICAgICAgICAgICAgICAgICBkZWZpbmVkKENPTkZJR19TUEVDVFJBX01SU1RfSFdfRE1BKQorCisjZGVmaW5lIFNQRUNUUkFfUEFSVElUSU9OX0lEICAgIDAKKworLyogRW5hYmxlIHRoaXMgbWFjcm8gaWYgdGhlIG51bWJlciBvZiBmbGFzaCBibG9ja3MgaXMgbGFyZ2VyIHRoYW4gMTZLLiAqLworI2RlZmluZSBTVVBQT1JUX0xBUkdFX0JMT0NLTlVNICAxCisKKy8qKioqIEJsb2NrIFRhYmxlIGFuZCBSZXNlcnZlZCBCbG9jayBQYXJhbWV0ZXJzICoqKioqLworI2RlZmluZSBTUEVDVFJBX1NUQVJUX0JMT0NLICAgICAzCisvLyNkZWZpbmUgTlVNX0ZSRUVfQkxPQ0tTX0dBVEUgICAgMzAKKyNkZWZpbmUgTlVNX0ZSRUVfQkxPQ0tTX0dBVEUgICAgNjAKKworLyoqKiogSGFyZHdhcmUgUGFyYW1ldGVycyAqKioqLworI2RlZmluZSBHTE9CX0hXQ1RMX1JFR19CQVNFICAgICAweEZGQTQwMDAwCisjZGVmaW5lIEdMT0JfSFdDVExfUkVHX1NJWkUgICAgIDQwOTYKKworI2RlZmluZSBHTE9CX0hXQ1RMX01FTV9CQVNFICAgICAweEZGQTQ4MDAwCisjZGVmaW5lIEdMT0JfSFdDVExfTUVNX1NJWkUgICAgIDQwOTYKKworLyogS0JWIC0gVXBkYXRlZCB0byBMTlcgc2NyYXRjaCByZWdpc3RlciBhZGRyZXNzICovCisjZGVmaW5lIFNDUkFUQ0hfUkVHX0FERFIgICAgMHhGRjEwODAxOAorI2RlZmluZSBTQ1JBVENIX1JFR19TSVpFICAgIDY0CisKKyNkZWZpbmUgR0xPQl9IV0NUTF9ERUZBVUxUX0JMS1MgICAgMjA0OAorCisjZGVmaW5lIFNVUFBPUlRfMTVCSVRFQ0MgICAgICAgIDEKKyNkZWZpbmUgU1VQUE9SVF84QklURUNDICAgICAgICAgMQorCisjZGVmaW5lIE9ORklfQkxPT01fVElNRSAgICAgICAgIDAKKyNkZWZpbmUgTU9ERTVfV09SS0FST1VORCAgICAgICAgMQorCisjZW5kaWYgLypfU1BFQ1RSQVNXQ09ORklHXyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3QvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9LY29uZmlnCmluZGV4IDNhYjIwNGQuLjY4YWQzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogIwogbWVudSAiVGV4YXMgSW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiBjb25maWcgVElfU1QKLQl0cmlzdGF0ZSAic2hhcmVkIHRyYW5zcG9ydCBjb3JlIGRyaXZlciIKKwl0cmlzdGF0ZSAiU2hhcmVkIHRyYW5zcG9ydCBjb3JlIGRyaXZlciIKIAlkZXBlbmRzIG9uIFJGS0lMTAogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3QvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9UT0RPCmluZGV4IDJjNGZlNTguLmViZmQ2YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9UT0RPCkBAIC0xLDE3ICsxLDYgQEAKIFRPRE86CiAKLTEuIEEgcGVyLWRldmljZS90dHkgcG9ydCBjb250ZXh0IHJlcXVpcmVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZGV2aWNlcwotb24gc2FtZSBwbGF0Zm9ybS4KLQotMi4gUkVNT1ZFIHRoZSBzeXNmcyBlbnRyeSBQSUQgcGFzc2luZyBtZWNoYW5pc20sIHNpbmNlIHRoZXJlIHNob3VsZAotYmUgYSBiZXR0ZXIgd2F5IHRvIHJlcXVlc3QgdXNlci1zcGFjZSB0byBpbnN0YWxsIGxpbmUgZGlzY2lwbGluZS4KLQotMy4gUmUtdmlldy9SZS13b3JrIG9uIHRoZSBsb2NraW5nLgotCi00LiBSZS1zdHJ1Y3R1cmUgdG8gbWFrZSB0aGUgbGRpc2MgZHJpdmVyIG1vcmUgZ2VuZXJpYyBmb3IgY2hpcHNldHMgd2hpY2ggbXV4Ci1tdWx0aXBsZSBjb25uZWN0aXZpdHkgKEJULCBGTSwgR1BTKSB1cG9uIDEgVFRZIHBvcnQuCi0KLTUuIFN0ZXAgdXAgYW5kIG1haW50YWluIHRoaXMgZHJpdmVyIHRvIGVuc3VyZSB0aGF0IGl0IGNvbnRpbnVlcworMS4gU3RlcCB1cCBhbmQgbWFpbnRhaW4gdGhpcyBkcml2ZXIgdG8gZW5zdXJlIHRoYXQgaXQgY29udGludWVzCiB0byB3b3JrLiAgSGF2aW5nIHRoZSBoYXJkd2FyZSBmb3IgdGhpcyBpcyBwcmV0dHkgbXVjaCBhCiByZXF1aXJlbWVudC4gIElmIHRoaXMgZG9lcyBub3QgaGFwcGVuLCB0aGUgd2lsbCBiZSByZW1vdmVkIGluCiB0aGUgMi42LjM1IGtlcm5lbCByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L2J0X2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L2J0X2Rydi5jCmluZGV4IGQ4NDIwYjUuLjYxYWU5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9idF9kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3QvYnRfZHJ2LmMKQEAgLTgwLDMxICs4MCwzMyBAQAogICogc3RhdHVzLmhjaV9zdF9vcGVuKCkgZnVuY3Rpb24gd2lsbCB3YWl0IGZvciBzaWduYWwgZnJvbSB0aGlzCiAgKiBBUEkgd2hlbiBzdF9yZWdpc3RlcigpIGZ1bmN0aW9uIHJldHVybnMgU1RfUEVORElORy4KICAqLwotc3RhdGljIHZvaWQgaGNpX3N0X3JlZ2lzdHJhdGlvbl9jb21wbGV0aW9uX2NiKGNoYXIgZGF0YSkKK3N0YXRpYyB2b2lkIGhjaV9zdF9yZWdpc3RyYXRpb25fY29tcGxldGlvbl9jYih2b2lkICpwcml2X2RhdGEsIGNoYXIgZGF0YSkKIHsKKwlzdHJ1Y3QgaGNpX3N0ICpsaHN0ID0gKHN0cnVjdCBoY2lfc3QgKilwcml2X2RhdGE7CiAJQlREUlZfQVBJX1NUQVJUKCk7CiAKIAkvKiBoY2lfc3Rfb3BlbigpIGZ1bmN0aW9uIG5lZWRzIHZhbHVlIG9mICdkYXRhJyB0byBrbm93CiAJICogdGhlIHJlZ2lzdHJhdGlvbiBzdGF0dXMoc3VjY2Vzcy9mYWlsKSxTbyBoYXZlIGEgYmFjawogCSAqIHVwIG9mIGl0LgogCSAqLwotCWhzdC0+c3RyZWdfY2JkYXRhID0gZGF0YTsKKwlsaHN0LT5zdHJlZ19jYmRhdGEgPSBkYXRhOwogCiAJLyogR290IGEgZmVlZGJhY2sgZnJvbSBTVCBmb3IgQlQgZHJpdmVyIHJlZ2lzdHJhdGlvbgogCSAqIHJlcXVlc3QuV2Fja3VwIGhjaV9zdF9vcGVuKCkgZnVuY3Rpb24gdG8gY29udGludWUKIAkgKiBpdCdzIG9wZW4gb3BlcmF0aW9uLgogCSAqLwotCWNvbXBsZXRlKCZoc3QtPndhaXRfZm9yX2J0ZHJ2X3JlZ19jb21wbGV0aW9uKTsKKwljb21wbGV0ZSgmbGhzdC0+d2FpdF9mb3JfYnRkcnZfcmVnX2NvbXBsZXRpb24pOwogCiAJQlREUlZfQVBJX0VYSVQoMCk7CiB9CiAKIC8qIENhbGxlZCBieSBTaGFyZWQgVHJhbnNwb3J0IGxheWVyIHdoZW4gcmVjZWl2ZSBkYXRhIGlzCiAgKiBhdmFpbGFibGUgKi8KLXN0YXRpYyBsb25nIGhjaV9zdF9yZWNlaXZlKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgbG9uZyBoY2lfc3RfcmVjZWl2ZSh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGVycjsKIAlpbnQgbGVuOworCXN0cnVjdCBoY2lfc3QgKmxoc3QgPSAoc3RydWN0IGhjaV9zdCAqKXByaXZfZGF0YTsKIAogCUJURFJWX0FQSV9TVEFSVCgpOwogCkBAIC0xMTYsMTMgKzExOCwxMyBAQAogCQlCVERSVl9BUElfRVhJVCgtRUZBVUxUKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWlmICghaHN0KSB7CisJaWYgKCFsaHN0KSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlCVF9EUlZfRVJSKCJJbnZhbGlkIGhjaV9zdCBtZW1vcnksZnJlZWluZyBTS0IiKTsKIAkJQlREUlZfQVBJX0VYSVQoLUVGQVVMVCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlpZiAoIXRlc3RfYml0KEJUX0RSVl9SVU5OSU5HLCAmaHN0LT5mbGFncykpIHsKKwlpZiAoIXRlc3RfYml0KEJUX0RSVl9SVU5OSU5HLCAmbGhzdC0+ZmxhZ3MpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlCVF9EUlZfRVJSKCJEZXZpY2UgaXMgbm90IHJ1bm5pbmcsZnJlZWluZyBTS0IiKTsKIAkJQlREUlZfQVBJX0VYSVQoLUVJTlZBTCk7CkBAIC0xMzAsNyArMTMyLDcgQEAKIAl9CiAKIAlsZW4gPSBza2ItPmxlbjsKLQlza2ItPmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWhzdC0+aGRldjsKKwlza2ItPmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxoc3QtPmhkZXY7CiAKIAkvKiBGb3J3YXJkIHNrYiB0byBIQ0kgQ09SRSBsYXllciAqLwogCWVyciA9IGhjaV9yZWN2X2ZyYW1lKHNrYik7CkBAIC0xNDEsNyArMTQzLDcgQEAKIAkJQlREUlZfQVBJX0VYSVQoZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaHN0LT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gbGVuOworCWxoc3QtPmhkZXYtPnN0YXQuYnl0ZV9yeCArPSBsZW47CiAKIAlCVERSVl9BUElfRVhJVCgwKTsKIAlyZXR1cm4gMDsKQEAgLTE4OSw5ICsxOTEsMTQgQEAKIAkgKiBtYWtlIGl0IGFzIE5VTEwgKi8KIAloY2lfc3RfcHJvdG8ud3JpdGUgPSBOVUxMOwogCisJLyogc2VuZCBpbiB0aGUgaHN0IHRvIGJlIHJlY2VpdmVkIGF0IHJlZ2lzdHJhdGlvbiBjb21wbGV0ZSBjYWxsYmFjaworCSAqIGFuZCBkdXJpbmcgc3QncyByZWNlaXZlCisJICovCisJaGNpX3N0X3Byb3RvLnByaXZfZGF0YSA9IGhzdDsKKwogCS8qIFJlZ2lzdGVyIHdpdGggU1QgbGF5ZXIgKi8KIAllcnIgPSBzdF9yZWdpc3RlcigmaGNpX3N0X3Byb3RvKTsKLQlpZiAoZXJyID09IFNUX0VSUl9QRU5ESU5HKSB7CisJaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHsKIAkJLyogUHJlcGFyZSB3YWl0LWZvci1jb21wbGV0aW9uIGhhbmRsZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCQkgKiBOZWVkZWQgdG8gc3luY3Jvbml6ZSB0aGlzIGFuZCBzdF9yZWdpc3RyYXRpb25fY29tcGxldGlvbl9jYigpCiAJCSAqIGZ1bmN0aW9ucy4KQEAgLTIzMiw3ICsyMzksNyBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAkJZXJyID0gMDsKLQl9IGVsc2UgaWYgKGVyciA9PSBTVF9FUlJfRkFJTFVSRSkgeworCX0gZWxzZSBpZiAoZXJyID09IC0xKSB7CiAJCUJUX0RSVl9FUlIoInN0X3JlZ2lzdGVyIGZhaWxlZCAlZCIsIGVycik7CiAJCUJURFJWX0FQSV9FWElUKC1FQUdBSU4pOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTI4MCw3ICsyODcsNyBAQAogCS8qIFVucmVnaXN0ZXIgZnJvbSBTVCBsYXllciAqLwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlRfU1RfUkVHSVNURVJFRCwgJmhzdC0+ZmxhZ3MpKSB7CiAJCWVyciA9IHN0X3VucmVnaXN0ZXIoU1RfQlQpOwotCQlpZiAoZXJyICE9IFNUX1NVQ0NFU1MpIHsKKwkJaWYgKGVyciAhPSAwKSB7CiAJCQlCVF9EUlZfRVJSKCJzdF91bnJlZ2lzdGVyIGZhaWxlZCAlZCIsIGVycik7CiAJCQlCVERSVl9BUElfRVhJVCgtRUJVU1kpOwogCQkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0LmgKaW5kZXggZThmYzk3ZS4uOTk1MjU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0LmgKQEAgLTI0LDI0ICsyNCwyNCBAQAogI2RlZmluZSBTVF9ICiAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLS8qCi0gKiBzdC5oCi0gKi8KIAogLyogVE9ETzoKICAqIE1vdmUgdGhlIGZvbGxvd2luZyB0byB0dHkuaCB1cG9uIGFjY2VwdGFuY2UKICAqLwogI2RlZmluZSBOX1RJX1dMCTIwCS8qIExkaXNjIGZvciBUSSdzIFdMIEJULCBGTSwgR1BTIGNvbWJvIGNoaXBzICovCiAKLS8qIHNvbWUgZ3Bpb3MgaGF2ZSBhY3RpdmUgaGlnaCwgb3RoZXJzIGxpa2UgZm0gaGF2ZQotICogYWN0aXZlIGxvdworLyoqCisgKiBlbnVtIGtpbV9ncGlvX3N0YXRlIC0gRmV3IHByb3RvY29scyBzdWNoIGFzIEZNIGhhdmUgQUNUSVZFIExPVworICoJZ3BpbyBzdGF0ZXMgZm9yIHRoZWlyIGNoaXAvY29yZSBlbmFibGUgZ3Bpb3MKICAqLwogZW51bSBraW1fZ3Bpb19zdGF0ZSB7CiAJS0lNX0dQSU9fSU5BQ1RJVkUsCiAJS0lNX0dQSU9fQUNUSVZFLAogfTsKLS8qCi0gKiB0aGUgbGlzdCBvZiBwcm90b2NvbHMgb24gY2hpcAorCisvKioKKyAqIGVudW0gcHJvdG8tdHlwZSAtIFRoZSBwcm90b2NvbCBvbiBXaUxpbmsgY2hpcHMgd2hpY2ggc2hhcmUgYQorICoJY29tbW9uIHBoeXNpY2FsIGludGVyZmFjZSBsaWtlIFVBUlQuCiAgKi8KIGVudW0gcHJvdG9fdHlwZSB7CiAJU1RfQlQsCkBAIC01MCw0MSArNTAsMzUgQEAKIAlTVF9NQVgsCiB9OwogCi1lbnVtIHsKLQlTVF9FUlJfRkFJTFVSRSA9IC0xLAkvKiBjaGVjayBzdHJ1Y3QgKi8KLQlTVF9TVUNDRVNTLAotCVNUX0VSUl9QRU5ESU5HID0gLTUsCS8qIHRvIGNhbGwgcmVnX2NvbXBsZXRlX2NiICovCi0JU1RfRVJSX0FMUkVBRFksCQkvKiBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KLQlTVF9FUlJfSU5QUk9HUkVTUywKLQlTVF9FUlJfTk9QUk9UTywJCS8qIHByb3RvY29sIG5vdCBzdXBwb3J0ZWQgKi8KLX07Ci0KLS8qIHBlciBwcm90b2NvbCBzdHJ1Y3R1cmUKLSAqIGZvciBCVC9GTSBhbmQgR1BTCisvKioKKyAqIHN0cnVjdCBzdF9wcm90b19zIC0gUGVyIFByb3RvY29sIHN0cnVjdHVyZSBmcm9tIEJUL0ZNL0dQUyB0byBTVAorICogQHR5cGU6IHR5cGUgb2YgdGhlIHByb3RvY29sIGJlaW5nIHJlZ2lzdGVyZWQgYW1vbmcgdGhlCisgKglhdmFpbGFibGUgcHJvdG9fdHlwZShCVCwgRk0sIEdQUyB0aGUgcHJvdG9jb2wgd2hpY2ggc2hhcmUgVFRZKS4KKyAqIEByZWN2OiB0aGUgcmVjZWl2ZXIgY2FsbGJhY2sgcG9pbnRpbmcgdG8gYSBmdW5jdGlvbiBpbiB0aGUKKyAqCXByb3RvY29sIGRyaXZlcnMgY2FsbGVkIGJ5IHRoZSBTVCBkcml2ZXIgdXBvbiByZWNlaXZpbmcKKyAqCXJlbGV2YW50IGRhdGEuCisgKiBAbWF0Y2hfcGFja2V0OiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgdG8gbWFrZSBTVCBtb3JlIGdlbmVyaWMKKyAqIEByZWdfY29tcGxldGVfY2I6IGNhbGxiYWNrIGhhbmRsZXIgcG9pbnRpbmcgdG8gYSBmdW5jdGlvbiBpbiBwcm90b2NvbAorICoJaGFuZGxlciBjYWxsZWQgYnkgU1Qgd2hlbiB0aGUgcGVuZGluZyByZWdpc3RyYXRpb25zIGFyZSBjb21wbGV0ZS4KKyAqCVRoZSByZWdpc3RyYXRpb25zIGFyZSBtYXJrZWQgcGVuZGluZywgaW4gc2l0dWF0aW9ucyB3aGVuIGZ3CisgKglkb3dubG9hZCBpcyBpbiBwcm9ncmVzcy4KKyAqIEB3cml0ZTogcG9pbnRlciB0byBmdW5jdGlvbiBpbiBTVCBwcm92aWRlZCB0byBwcm90b2NvbCBkcml2ZXJzIGZyb20gU1QsCisgKgl0byBiZSBtYWRlIHVzZSB3aGVuIHByb3RvY29sIGRyaXZlcnMgaGF2ZSBkYXRhIHRvIHNlbmQgdG8gVFRZLgorICogQHByaXZfZGF0YTogcHJpdmRhdGUgZGF0YSBob2xkZXIgZm9yIHRoZSBwcm90b2NvbCBkcml2ZXJzLCBzZW50CisgKglmcm9tIHRoZSBwcm90b2NvbCBkcml2ZXJzIGR1cmluZyByZWdpc3RyYXRpb24sIGFuZCBzZW50IGJhY2sgb24KKyAqCXJlZ19jb21wbGV0ZV9jYiBhbmQgcmVjdi4KICAqLwogc3RydWN0IHN0X3Byb3RvX3MgewogCWVudW0gcHJvdG9fdHlwZSB0eXBlOwotLyoKLSAqIHRvIGJlIGNhbGxlZCBieSBTVCB3aGVuIGRhdGEgYXJyaXZlcwotICovCi0JbG9uZyAoKnJlY3YpIChzdHJ1Y3Qgc2tfYnVmZiAqKTsKLS8qCi0gKiBmb3IgZnV0dXJlIHVzZSwgbG9naWMgbm93IHRvIGJlIGluIFNUCi0gKi8KKwlsb25nICgqcmVjdikgKHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKik7CiAJdW5zaWduZWQgY2hhciAoKm1hdGNoX3BhY2tldCkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotLyoKLSAqIHN1YnNlcXVlbnQgcmVnaXN0cmF0aW9uIHJldHVybiBQRU5ESU5HLAotICogc2lnbmFsbGVkIGNvbXBsZXRlIGJ5IHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24KLSAqLwotCXZvaWQgKCpyZWdfY29tcGxldGVfY2IpIChjaGFyIGRhdGEpOwotLyoKLSAqIHdyaXRlIGZ1bmN0aW9uLCBzZW50IGluIGFzIE5VTEwgYW5kIHRvIGJlIHJldHVybmVkIHRvCi0gKiBwcm90b2NvbCBkcml2ZXJzCi0gKi8KKwl2b2lkICgqcmVnX2NvbXBsZXRlX2NiKSAodm9pZCAqLCBjaGFyIGRhdGEpOwogCWxvbmcgKCp3cml0ZSkgKHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQgKnByaXZfZGF0YTsKIH07CiAKLWV4dGVybiBsb25nIHN0X3JlZ2lzdGVyKHN0cnVjdCBzdF9wcm90b19zICpuZXdfcHJvdG8pOwotZXh0ZXJuIGxvbmcgc3RfdW5yZWdpc3RlcihlbnVtIHByb3RvX3R5cGUgdHlwZSk7CitleHRlcm4gbG9uZyBzdF9yZWdpc3RlcihzdHJ1Y3Qgc3RfcHJvdG9fcyAqKTsKK2V4dGVybiBsb25nIHN0X3VucmVnaXN0ZXIoZW51bSBwcm90b190eXBlKTsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnN0X2dldF9wbGF0X2RldmljZSh2b2lkKTsKICNlbmRpZiAvKiBTVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2NvcmUuYwppbmRleCA0ZTkzNjk0Li4wNjNjOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJzdF9sbC5oIgogI2luY2x1ZGUgInN0LmgiCiAKLSNpZmRlZiBERUJVRworI2RlZmluZSBWRVJCT1NFCiAvKiBzdHJpbmdzIHRvIGJlIHVzZWQgZm9yIHJma2lsbCBlbnRyaWVzIGFuZCBieQogICogU1QgQ29yZSB0byBiZSB1c2VkIGZvciBzeXNmcyBkZWJ1ZyBlbnRyeQogICovCkBAIC00OCw3ICs0OCw2IEBACiAJUFJPVE9fRU5UUlkoU1RfRk0sICJGTSIpLAogCVBST1RPX0VOVFJZKFNUX0dQUywgIkdQUyIpLAogfTsKLSNlbmRpZgogLyogZnVuY3Rpb24gcG9pbnRlciBwb2ludGluZyB0byBlaXRoZXIsCiAgKiBzdF9raW1fcmVjdiBkdXJpbmcgcmVnaXN0cmF0aW9uIHRvIHJlY2VpdmUgZncgZG93bmxvYWQgcmVzcG9uc2VzCiAgKiBzdF9pbnRfcmVjdiBhZnRlciByZWdpc3RyYXRpb24gdG8gcmVjZWl2ZSBwcm90byBzdGFjayByZXNwb25zZXMKQEAgLTYxLDcgKzYwLDcgQEAKIGJvb2wgaXNfcHJvdG9jb2xfbGlzdF9lbXB0eSh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgaSA9IDA7Ci0JcHJfaW5mbygiICVzICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiICVzICIsIF9fZnVuY19fKTsKIAlmb3IgKGkgPSAwOyBpIDwgU1RfTUFYOyBpKyspIHsKIAkJaWYgKHN0X2dkYXRhLT5saXN0W2ldICE9IE5VTEwpCiAJCQlyZXR1cm4gU1RfTk9URU1QVFk7CkBAIC03MSw2ICs3MCw3IEBACiAJcmV0dXJuIFNUX0VNUFRZOwogfQogI2VuZGlmCisKIC8qIGNhbiBiZSBjYWxsZWQgaW4gZnJvbQogICogLS0gS0lNIChkdXJpbmcgZncgZG93bmxvYWQpCiAgKiAtLSBTVCBDb3JlIChkdXJpbmcgc3Rfd3JpdGUpCkBAIC04MSwyMCArODEsMTUgQEAKIGludCBzdF9pbnRfd3JpdGUoc3RydWN0IHN0X2RhdGFfcyAqc3RfZ2RhdGEsCiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQogewotI2lmZGVmIFZFUkJPU0UJCQkvKiBmb3IgZGVidWcgKi8KLQlpbnQgaTsKLSNlbmRpZgogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaWYgKHVubGlrZWx5KHN0X2dkYXRhID09IE5VTEwgfHwgc3RfZ2RhdGEtPnR0eSA9PSBOVUxMKSkgewogCQlwcl9lcnIoInR0eSB1bmF2YWlsYWJsZSB0byBwZXJmb3JtIHdyaXRlIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KIAl0dHkgPSBzdF9nZGF0YS0+dHR5OwogI2lmZGVmIFZFUkJPU0UKLQlwcmludGsoS0VSTl9FUlIgInN0YXJ0IGRhdGEuLlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCS8qIG5vIG5ld2xpbmVzIGZvciBlYWNoIGRhdHVtICovCi0JCXByaW50aygiICV4IiwgZGF0YVtpXSk7Ci0JcHJpbnRrKEtFUk5fRVJSICJcbiAuLmVuZCBkYXRhXG4iKTsKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiPG91dDwiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkxNiwgMSwgZGF0YSwgY291bnQsIDApOwogI2VuZGlmCiAJcmV0dXJuIHR0eS0+b3BzLT53cml0ZSh0dHksIGRhdGEsIGNvdW50KTsKIApAQCAtMTIyLDggKzExNywxMCBAQAogCSAqICAgcHJvdG9jb2wgc3RhY2sgZHJpdmVyCiAJICovCiAJaWYgKGxpa2VseShzdF9nZGF0YS0+bGlzdFtwcm90b2lkXS0+cmVjdiAhPSBOVUxMKSkgewotCQlpZiAodW5saWtlbHkoc3RfZ2RhdGEtPmxpc3RbcHJvdG9pZF0tPnJlY3Yoc3RfZ2RhdGEtPnJ4X3NrYikKLQkJCSAgICAgIT0gU1RfU1VDQ0VTUykpIHsKKwkJaWYgKHVubGlrZWx5CisJCQkoc3RfZ2RhdGEtPmxpc3RbcHJvdG9pZF0tPnJlY3YKKwkJCShzdF9nZGF0YS0+bGlzdFtwcm90b2lkXS0+cHJpdl9kYXRhLCBzdF9nZGF0YS0+cnhfc2tiKQorCQkJICAgICAhPSAwKSkgewogCQkJcHJfZXJyKCIgcHJvdG8gc3RhY2sgJWQncyAtPnJlY3YgZmFpbGVkIiwgcHJvdG9pZCk7CiAJCQlrZnJlZV9za2Ioc3RfZ2RhdGEtPnJ4X3NrYik7CiAJCQlyZXR1cm47CkBAIC0xMzIsMTEgKzEyOSwxMSBAQAogCQlwcl9lcnIoIiBwcm90byBzdGFjayAlZCdzIC0+cmVjdiBudWxsIiwgcHJvdG9pZCk7CiAJCWtmcmVlX3NrYihzdF9nZGF0YS0+cnhfc2tiKTsKIAl9Ci0JcHJfaW5mbygiIGRvbmUgJXMiLCBfX2Z1bmNfXyk7CiAJcmV0dXJuOwogfQogCi0vKgorLyoqCisgKiBzdF9yZWdfY29tcGxldGUgLQogICogdG8gY2FsbCByZWdpc3RyYXRpb24gY29tcGxldGUgY2FsbGJhY2tzCiAgKiBvZiBhbGwgcHJvdG9jb2wgc3RhY2sgZHJpdmVycwogICovCkBAIC0xNDcsNyArMTQ0LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgU1RfTUFYOyBpKyspIHsKIAkJaWYgKGxpa2VseShzdF9nZGF0YSAhPSBOVUxMICYmIHN0X2dkYXRhLT5saXN0W2ldICE9IE5VTEwgJiYKIAkJCSAgIHN0X2dkYXRhLT5saXN0W2ldLT5yZWdfY29tcGxldGVfY2IgIT0gTlVMTCkpCi0JCQlzdF9nZGF0YS0+bGlzdFtpXS0+cmVnX2NvbXBsZXRlX2NiKGVycik7CisJCQlzdF9nZGF0YS0+bGlzdFtpXS0+cmVnX2NvbXBsZXRlX2NiCisJCQkJKHN0X2dkYXRhLT5saXN0W2ldLT5wcml2X2RhdGEsIGVycik7CiAJfQogfQogCkBAIC0xNTYsNyArMTU0LDcgQEAKIHsKIAlyZWdpc3RlciBpbnQgcm9vbSA9IHNrYl90YWlscm9vbShzdF9nZGF0YS0+cnhfc2tiKTsKIAotCXByX2luZm8oImxlbiAlZCByb29tICVkIiwgbGVuLCByb29tKTsKKwlwcl9kZWJ1ZygibGVuICVkIHJvb20gJWQiLCBsZW4sIHJvb20pOwogCiAJaWYgKCFsZW4pIHsKIAkJLyogUmVjZWl2ZWQgcGFja2V0IGhhcyBvbmx5IHBhY2tldCBoZWFkZXIgYW5kCkBAIC0xOTAsOCArMTg4LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGFjdGlvbiB3aGVuIHdha2UtdXAgYWNrCi0gKiByZWNlaXZlZAorLyoqCisgKiBzdF93YWtldXBfYWNrIC0gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGFjdGlvbiB3aGVuIHdha2UtdXAgYWNrCisgKglyZWNlaXZlZAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgc3Rfd2FrZXVwX2FjayhzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSwKIAl1bnNpZ25lZCBjaGFyIGNtZCkKQEAgLTIxNCw5ICsyMTMsMTMgQEAKIAlzdF90eF93YWtldXAoc3RfZ2RhdGEpOwogfQogCi0vKiBEZWNvZGVzIHJlY2VpdmVkIFJBVyBkYXRhIGFuZCBmb3J3YXJkcyB0byBjb3JyZXNwb25kaW5nCi0gKiBjbGllbnQgZHJpdmVycyAoQmx1ZXRvb3RoLEZNLEdQUy4uZXRjKS4KLSAqCisvKioKKyAqIHN0X2ludF9yZWN2IC0gU1QncyBpbnRlcm5hbCByZWNlaXZlIGZ1bmN0aW9uLgorICoJRGVjb2RlcyByZWNlaXZlZCBSQVcgZGF0YSBhbmQgZm9yd2FyZHMgdG8gY29ycmVzcG9uZGluZworICoJY2xpZW50IGRyaXZlcnMgKEJsdWV0b290aCxGTSxHUFMuLmV0YykuCisgKglUaGlzIGNhbiByZWNlaXZlIHZhcmlvdXMgdHlwZXMgb2YgcGFja2V0cywKKyAqCUhDSS1FdmVudHMsIEFDTCwgU0NPLCA0IHR5cGVzIG9mIEhDSS1MTCBQTSBwYWNrZXRzCisgKglDSC04IHBhY2tldHMgZnJvbSBGTSwgQ0gtOSBwYWNrZXRzIGZyb20gR1BTIGNvcmVzLgogICovCiB2b2lkIHN0X2ludF9yZWN2KHZvaWQgKmRpc2NfZGF0YSwKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBsb25nIGNvdW50KQpAQCAtMjU5LDcgKzI2Miw3IEBACiAKIAkJCQkvKiBXYWl0aW5nIGZvciBjb21wbGV0ZSBwYWNrZXQgPyAqLwogCQkJY2FzZSBTVF9CVF9XNF9EQVRBOgotCQkJCXByX2luZm8oIkNvbXBsZXRlIHBrdCByZWNlaXZlZCIpOworCQkJCXByX2RlYnVnKCJDb21wbGV0ZSBwa3QgcmVjZWl2ZWQiKTsKIAogCQkJCS8qIEFzayBTVCBDT1JFIHRvIGZvcndhcmQKIAkJCQkgKiB0aGUgcGFja2V0IHRvIHByb3RvY29sIGRyaXZlciAqLwpAQCAtMjc1LDcgKzI3OCw3IEBACiAJCQkJZWggPSAoc3RydWN0IGhjaV9ldmVudF9oZHIgKilzdF9nZGF0YS0+cnhfc2tiLT4KIAkJCQkgICAgZGF0YTsKIAotCQkJCXByX2luZm8oIkV2ZW50IGhlYWRlcjogZXZ0IDB4JTIuMngiCisJCQkJcHJfZGVidWcoIkV2ZW50IGhlYWRlcjogZXZ0IDB4JTIuMngiCiAJCQkJCSAgICJwbGVuICVkIiwgZWgtPmV2dCwgZWgtPnBsZW4pOwogCiAJCQkJc3RfY2hlY2tfZGF0YV9sZW4oc3RfZ2RhdGEsIHByb3RvaWQsIGVoLT5wbGVuKTsKQEAgLTQzOSw0NSArNDQyLDQzIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlwcl9pbmZvKCJkb25lICVzIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJkb25lICVzIiwgX19mdW5jX18pOwogCXJldHVybjsKIH0KIAotLyogaW50ZXJuYWwgZGUtUSBmdW5jdGlvbgotICogLS0gcmV0dXJuIHByZXZpb3VzIGluLWNvbXBsZXRlbHkgd3JpdHRlbiBza2IKLSAqICBvciByZXR1cm4gdGhlIHNrYiBpbiB0aGUgdHhRCisvKioKKyAqIHN0X2ludF9kZXF1ZXVlIC0gaW50ZXJuYWwgZGUtUSBmdW5jdGlvbi4KKyAqCUlmIHRoZSBwcmV2aW91cyBkYXRhIHNldCB3YXMgbm90IHdyaXR0ZW4KKyAqCWNvbXBsZXRlbHksIHJldHVybiB0aGF0IHNrYiB3aGljaCBoYXMgdGhlIHBlbmRpbmcgZGF0YS4KKyAqCUluIG5vcm1hbCBjYXNlcywgcmV0dXJuIHRvcCBvZiB0eHEuCiAgKi8KIHN0cnVjdCBza19idWZmICpzdF9pbnRfZGVxdWV1ZShzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmV0dXJuaW5nX3NrYjsKIAotCXByX2luZm8oIiVzIiwgX19mdW5jX18pOwotCS8qIGlmIHRoZSBwcmV2aW91cyBza2Igd2Fzbid0IHdyaXR0ZW4gY29tcGxldGVseQotCSAqLworCXByX2RlYnVnKCIlcyIsIF9fZnVuY19fKTsKIAlpZiAoc3RfZ2RhdGEtPnR4X3NrYiAhPSBOVUxMKSB7CiAJCXJldHVybmluZ19za2IgPSBzdF9nZGF0YS0+dHhfc2tiOwogCQlzdF9nZGF0YS0+dHhfc2tiID0gTlVMTDsKIAkJcmV0dXJuIHJldHVybmluZ19za2I7CiAJfQotCi0JLyogZGUtUSBmcm9tIHRoZSB0eFEgYWx3YXlzIGlmIHByZXZpb3VzIHdyaXRlIGlzIGNvbXBsZXRlICovCiAJcmV0dXJuIHNrYl9kZXF1ZXVlKCZzdF9nZGF0YS0+dHhxKTsKIH0KIAotLyogaW50ZXJuYWwgUS1pbmcgZnVuY3Rpb24KLSAqIHdpbGwgZWl0aGVyIFEgdGhlIHNrYiB0byB0eHEgb3IgdGhlIHR4X3dhaXRxCi0gKiBkZXBlbmRpbmcgb24gdGhlIFNUIExMIHN0YXRlCi0gKgotICogbG9jayB0aGUgd2hvbGUgZnVuYyAtIHNpbmNlIGxsX2dldHN0YXRlIGFuZCBRLWluZyBzaG91bGQgaGFwcGVuCi0gKiBpbiBvbmUtc2hvdAorLyoqCisgKiBzdF9pbnRfZW5xdWV1ZSAtIGludGVybmFsIFEtaW5nIGZ1bmN0aW9uLgorICoJV2lsbCBlaXRoZXIgUSB0aGUgc2tiIHRvIHR4cSBvciB0aGUgdHhfd2FpdHEKKyAqCWRlcGVuZGluZyBvbiB0aGUgU1QgTEwgc3RhdGUuCisgKglJZiB0aGUgY2hpcCBpcyBhc2xlZXAsIHRoZW4gUSBpdCBvbnRvIHdhaXRxIGFuZAorICoJd2FrZXVwIHRoZSBjaGlwLgorICoJdHhxIGFuZCB3YWl0cSBuZWVkcyBwcm90ZWN0aW9uIHNpbmNlIHRoZSBvdGhlciBjb250ZXh0cworICoJbWF5IGJlIHNlbmRpbmcgZGF0YSwgd2FraW5nIHVwIGNoaXAuCiAgKi8KIHZvaWQgc3RfaW50X2VucXVldWUoc3RydWN0IHN0X2RhdGFfcyAqc3RfZ2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKLQkvKiB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIGluIG1vcmUgdGhlbiBvbmUgY29udGV4dC4KLQkgKiBzbyBoYXZlIGEgbG9jayAqLworCXByX2RlYnVnKCIlcyIsIF9fZnVuY19fKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAogCXN3aXRjaCAoc3RfbGxfZ2V0c3RhdGUoc3RfZ2RhdGEpKSB7CkBAIC00ODgsMTYgKzQ4OSwxMiBAQAogCWNhc2UgU1RfTExfQVNMRUVQX1RPX0FXQUtFOgogCQlza2JfcXVldWVfdGFpbCgmc3RfZ2RhdGEtPnR4X3dhaXRxLCBza2IpOwogCQlicmVhazsKLQljYXNlIFNUX0xMX0FXQUtFX1RPX0FTTEVFUDoJLyogaG9zdCBjYW5ub3QgYmUgaW4gdGhpcyBzdGF0ZSAqLworCWNhc2UgU1RfTExfQVdBS0VfVE9fQVNMRUVQOgogCQlwcl9lcnIoIlNUIExMIGlzIGlsbGVnYWwgc3RhdGUoJWxkKSwiCiAJCQkgICAicHVyZ2luZyByZWNlaXZlZCBza2IuIiwgc3RfbGxfZ2V0c3RhdGUoc3RfZ2RhdGEpKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwotCiAJY2FzZSBTVF9MTF9BU0xFRVA6Ci0JCS8qIGNhbGwgYSBmdW5jdGlvbiBvZiBTVCBMTCB0byBwdXQgZGF0YQotCQkgKiBpbiB0eF93YWl0USBhbmQgd2FrZV9pbmQgaW4gdHhRCi0JCSAqLwogCQlza2JfcXVldWVfdGFpbCgmc3RfZ2RhdGEtPnR4X3dhaXRxLCBza2IpOwogCQlzdF9sbF93YWtldXAoc3RfZ2RhdGEpOwogCQlicmVhazsKQEAgLTUwNyw4ICs1MDQsOSBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJYnJlYWs7CiAJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKLQlwcl9pbmZvKCJkb25lICVzIiwgX19mdW5jX18pOworCXByX2RlYnVnKCJkb25lICVzIiwgX19mdW5jX18pOwogCXJldHVybjsKIH0KIApAQCAtNTIyLDcgKzUyMCw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkvKiBmb3IgaXJxIHNhdmUgZmxhZ3MgKi8KLQlwcl9pbmZvKCIlcyIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXMiLCBfX2Z1bmNfXyk7CiAJLyogY2hlY2sgZm9yIHNlbmRpbmcgJiBzZXQgZmxhZyBzZW5kaW5nIGhlcmUgKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVF9UWF9TRU5ESU5HLCAmc3RfZGF0YS0+dHhfc3RhdGUpKSB7CiAJCXByX2luZm8oIlNUIGFscmVhZHkgc2VuZGluZyIpOwpAQCAtNTYzLDMzICs1NjEsMTMgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBTVCBLSU0KICovCi12b2lkIGtpbV9zdF9saXN0X3Byb3RvY29scyhzdHJ1Y3Qgc3RfZGF0YV9zICpzdF9nZGF0YSwgY2hhciAqYnVmKQordm9pZCBraW1fc3RfbGlzdF9wcm90b2NvbHMoc3RydWN0IHN0X2RhdGFfcyAqc3RfZ2RhdGEsIHZvaWQgKmJ1ZikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLSNpZmRlZiBERUJVRwotCXVuc2lnbmVkIGNoYXIgaSA9IFNUX01BWDsKLSNlbmRpZgotCXNwaW5fbG9ja19pcnFzYXZlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwotI2lmZGVmIERFQlVHCQkJLyogbW9yZSBkZXRhaWxlZCBsb2cgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1RfTUFYOyBpKyspIHsKLQkJaWYgKGkgPT0gMCkgewotCQkJc3ByaW50ZihidWYsICIlcyBpcyAlcyIsIHByb3RvY29sX3N0cm5nc1tpXSwKLQkJCQlzdF9nZGF0YS0+bGlzdFtpXSAhPQotCQkJCU5VTEwgPyAiUmVnaXN0ZXJlZCIgOiAiVW5yZWdpc3RlcmVkIik7Ci0JCX0gZWxzZSB7Ci0JCQlzcHJpbnRmKGJ1ZiwgIiVzXG4lcyBpcyAlcyIsIGJ1ZiwgcHJvdG9jb2xfc3RybmdzW2ldLAotCQkJCXN0X2dkYXRhLT5saXN0W2ldICE9Ci0JCQkJTlVMTCA/ICJSZWdpc3RlcmVkIiA6ICJVbnJlZ2lzdGVyZWQiKTsKLQkJfQotCX0KLQlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBidWYpOwotI2Vsc2UgLyogbGltaXRlZCBpbmZvICovCi0Jc3ByaW50ZihidWYsICJCVD0lY1xuRk09JWNcbkdQUz0lY1xuIiwKLQkJc3RfZ2RhdGEtPmxpc3RbU1RfQlRdICE9IE5VTEwgPyAnUicgOiAnVScsCi0JCXN0X2dkYXRhLT5saXN0W1NUX0ZNXSAhPSBOVUxMID8gJ1InIDogJ1UnLAotCQlzdF9nZGF0YS0+bGlzdFtTVF9HUFNdICE9IE5VTEwgPyAnUicgOiAnVScpOwotI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKKwlzZXFfcHJpbnRmKGJ1ZiwgIlslZF1cbkJUPSVjXG5GTT0lY1xuR1BTPSVjXG4iLAorCQkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkLAorCQkJc3RfZ2RhdGEtPmxpc3RbU1RfQlRdICE9IE5VTEwgPyAnUicgOiAnVScsCisJCQlzdF9nZGF0YS0+bGlzdFtTVF9GTV0gIT0gTlVMTCA/ICdSJyA6ICdVJywKKwkJCXN0X2dkYXRhLT5saXN0W1NUX0dQU10gIT0gTlVMTCA/ICdSJyA6ICdVJyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTYwMCw3ICs1NzgsNyBAQAogbG9uZyBzdF9yZWdpc3RlcihzdHJ1Y3Qgc3RfcHJvdG9fcyAqbmV3X3Byb3RvKQogewogCXN0cnVjdCBzdF9kYXRhX3MJKnN0X2dkYXRhOwotCWxvbmcgZXJyID0gU1RfU1VDQ0VTUzsKKwlsb25nIGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKIAlzdF9raW1fcmVmKCZzdF9nZGF0YSk7CkBAIC02MDgsMTcgKzU4NiwxNyBAQAogCWlmIChzdF9nZGF0YSA9PSBOVUxMIHx8IG5ld19wcm90byA9PSBOVUxMIHx8IG5ld19wcm90by0+cmVjdiA9PSBOVUxMCiAJICAgIHx8IG5ld19wcm90by0+cmVnX2NvbXBsZXRlX2NiID09IE5VTEwpIHsKIAkJcHJfZXJyKCJnZGF0YS9uZXdfcHJvdG8vcmVjdiBvciByZWdfY29tcGxldGVfY2Igbm90IHJlYWR5Iik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChuZXdfcHJvdG8tPnR5cGUgPCBTVF9CVCB8fCBuZXdfcHJvdG8tPnR5cGUgPj0gU1RfTUFYKSB7CiAJCXByX2VycigicHJvdG9jb2wgJWQgbm90IHN1cHBvcnRlZCIsIG5ld19wcm90by0+dHlwZSk7Ci0JCXJldHVybiBTVF9FUlJfTk9QUk9UTzsKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAJfQogCiAJaWYgKHN0X2dkYXRhLT5saXN0W25ld19wcm90by0+dHlwZV0gIT0gTlVMTCkgewogCQlwcl9lcnIoInByb3RvY29sICVkIGFscmVhZHkgcmVnaXN0ZXJlZCIsIG5ld19wcm90by0+dHlwZSk7Ci0JCXJldHVybiBTVF9FUlJfQUxSRUFEWTsKKwkJcmV0dXJuIC1FQUxSRUFEWTsKIAl9CiAKIAkvKiBjYW4gYmUgZnJvbSBwcm9jZXNzIGNvbnRleHQgb25seSAqLwpAQCAtNjMwLDExICs2MDgsMTIgQEAKIAkJc3Rfa2ltX2NoaXBfdG9nZ2xlKG5ld19wcm90by0+dHlwZSwgS0lNX0dQSU9fQUNUSVZFKTsKIAogCQlzdF9nZGF0YS0+bGlzdFtuZXdfcHJvdG8tPnR5cGVdID0gbmV3X3Byb3RvOworCQlzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQrKzsKIAkJbmV3X3Byb3RvLT53cml0ZSA9IHN0X3dyaXRlOwogCiAJCXNldF9iaXQoU1RfUkVHX1BFTkRJTkcsICZzdF9nZGF0YS0+c3Rfc3RhdGUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gU1RfRVJSX1BFTkRJTkc7CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CiAJfSBlbHNlIGlmIChzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQgPT0gU1RfRU1QVFkpIHsKIAkJcHJfaW5mbygiIHByb3RvY29sIGxpc3QgZW1wdHkgOiVkICIsIG5ld19wcm90by0+dHlwZSk7CiAJCXNldF9iaXQoU1RfUkVHX0lOX1BST0dSRVNTLCAmc3RfZ2RhdGEtPnN0X3N0YXRlKTsKQEAgLTY0OCwxNiArNjI3LDE2IEBACiAJCS8qIHRoaXMgbWF5IHRha2UgYSB3aGlsZSB0byBjb21wbGV0ZQogCQkgKiBzaW5jZSBpdCBpbnZvbHZlcyBCVCBmdyBkb3dubG9hZAogCQkgKi8KLQkJZXJyID0gc3Rfa2ltX3N0YXJ0KCk7Ci0JCWlmIChlcnIgIT0gU1RfU1VDQ0VTUykgeworCQllcnIgPSBzdF9raW1fc3RhcnQoc3RfZ2RhdGEtPmtpbV9kYXRhKTsKKwkJaWYgKGVyciAhPSAwKSB7CiAJCQljbGVhcl9iaXQoU1RfUkVHX0lOX1BST0dSRVNTLCAmc3RfZ2RhdGEtPnN0X3N0YXRlKTsKIAkJCWlmICgoc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkICE9IFNUX0VNUFRZKSAmJgogCQkJICAgICh0ZXN0X2JpdChTVF9SRUdfUEVORElORywgJnN0X2dkYXRhLT5zdF9zdGF0ZSkpKSB7CiAJCQkJcHJfZXJyKCIgS0lNIGZhaWx1cmUgY29tcGxldGUgY2FsbGJhY2sgIik7Ci0JCQkJc3RfcmVnX2NvbXBsZXRlKHN0X2dkYXRhLCBTVF9FUlJfRkFJTFVSRSk7CisJCQkJc3RfcmVnX2NvbXBsZXRlKHN0X2dkYXRhLCAtMSk7CiAJCQl9CiAKLQkJCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJCXJldHVybiAtMTsKIAkJfQogCiAJCS8qIHRoZSBwcm90b2NvbCBtaWdodCByZXF1aXJlIG90aGVyIGdwaW9zIHRvIGJlIHRvZ2dsZWQKQEAgLTY3Miw5ICs2NTEsOCBAQAogCQkgKi8KIAkJaWYgKChzdF9nZGF0YS0+cHJvdG9zX3JlZ2lzdGVyZWQgIT0gU1RfRU1QVFkpICYmCiAJCSAgICAodGVzdF9iaXQoU1RfUkVHX1BFTkRJTkcsICZzdF9nZGF0YS0+c3Rfc3RhdGUpKSkgewotCQkJcHJfaW5mbygiIGNhbGwgcmVnIGNvbXBsZXRlIGNhbGxiYWNrICIpOwotCQkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkKys7Ci0JCQlzdF9yZWdfY29tcGxldGUoc3RfZ2RhdGEsIFNUX1NVQ0NFU1MpOworCQkJcHJfZGVidWcoIiBjYWxsIHJlZyBjb21wbGV0ZSBjYWxsYmFjayAiKTsKKwkJCXN0X3JlZ19jb21wbGV0ZShzdF9nZGF0YSwgMCk7CiAJCX0KIAkJY2xlYXJfYml0KFNUX1JFR19QRU5ESU5HLCAmc3RfZ2RhdGEtPnN0X3N0YXRlKTsKIApAQCAtNjg0LDExICs2NjIsMTIgQEAKIAkJaWYgKHN0X2dkYXRhLT5saXN0W25ld19wcm90by0+dHlwZV0gIT0gTlVMTCkgewogCQkJcHJfZXJyKCIgcHJvdG8gJWQgYWxyZWFkeSByZWdpc3RlcmVkICIsCiAJCQkJICAgbmV3X3Byb3RvLT50eXBlKTsKLQkJCXJldHVybiBTVF9FUlJfQUxSRUFEWTsKKwkJCXJldHVybiAtRUFMUkVBRFk7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAkJc3RfZ2RhdGEtPmxpc3RbbmV3X3Byb3RvLT50eXBlXSA9IG5ld19wcm90bzsKKwkJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkKys7CiAJCW5ld19wcm90by0+d3JpdGUgPSBzdF93cml0ZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGVycjsKQEAgLTcwNywxOCArNjg2LDE5IEBACiAJCWRlZmF1bHQ6CiAJCQlwcl9lcnIoIiVkIHByb3RvY29sIG5vdCBzdXBwb3J0ZWQiLAogCQkJCSAgIG5ld19wcm90by0+dHlwZSk7Ci0JCQllcnIgPSBTVF9FUlJfTk9QUk9UTzsKKwkJCWVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7CiAJCQkvKiBzb21ldGhpbmcgd3JvbmcgKi8KIAkJCWJyZWFrOwogCQl9CiAJCXN0X2dkYXRhLT5saXN0W25ld19wcm90by0+dHlwZV0gPSBuZXdfcHJvdG87CisJCXN0X2dkYXRhLT5wcm90b3NfcmVnaXN0ZXJlZCsrOwogCQluZXdfcHJvdG8tPndyaXRlID0gc3Rfd3JpdGU7CiAKIAkJLyogbG9jayBhbHJlYWR5IGhlbGQgYmVmb3JlIGVudGVyaW5nIGVsc2UgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcHJfaW5mbygiZG9uZSAlcyglZCkgIiwgX19mdW5jX18sIG5ld19wcm90by0+dHlwZSk7CisJcHJfZGVidWcoImRvbmUgJXMoJWQpICIsIF9fZnVuY19fLCBuZXdfcHJvdG8tPnR5cGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3RfcmVnaXN0ZXIpOwogCkBAIC03MjcsMTYgKzcwNywxNiBAQAogICovCiBsb25nIHN0X3VucmVnaXN0ZXIoZW51bSBwcm90b190eXBlIHR5cGUpCiB7Ci0JbG9uZyBlcnIgPSBTVF9TVUNDRVNTOworCWxvbmcgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlzdHJ1Y3Qgc3RfZGF0YV9zCSpzdF9nZGF0YTsKIAotCXByX2luZm8oIiVzOiAlZCAiLCBfX2Z1bmNfXywgdHlwZSk7CisJcHJfZGVidWcoIiVzOiAlZCAiLCBfX2Z1bmNfXywgdHlwZSk7CiAKIAlzdF9raW1fcmVmKCZzdF9nZGF0YSk7CiAJaWYgKHR5cGUgPCBTVF9CVCB8fCB0eXBlID49IFNUX01BWCkgewogCQlwcl9lcnIoIiBwcm90b2NvbCAlZCBub3Qgc3VwcG9ydGVkIiwgdHlwZSk7Ci0JCXJldHVybiBTVF9FUlJfTk9QUk9UTzsKKwkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN0X2dkYXRhLT5sb2NrLCBmbGFncyk7CkBAIC03NDQsNyArNzI0LDcgQEAKIAlpZiAoc3RfZ2RhdGEtPmxpc3RbdHlwZV0gPT0gTlVMTCkgewogCQlwcl9lcnIoIiBwcm90b2NvbCAlZCBub3QgcmVnaXN0ZXJlZCIsIHR5cGUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gU1RfRVJSX05PUFJPVE87CisJCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogCX0KIAogCXN0X2dkYXRhLT5wcm90b3NfcmVnaXN0ZXJlZC0tOwpAQCAtNzY4LDcgKzc0OCw3IEBACiAJCX0KIAogCQkvKiBhbGwgcHJvdG9jb2xzIG5vdyB1bnJlZ2lzdGVyZWQgKi8KLQkJc3Rfa2ltX3N0b3AoKTsKKwkJc3Rfa2ltX3N0b3Aoc3RfZ2RhdGEtPmtpbV9kYXRhKTsKIAkJLyogZGlzYWJsZSBTVCBMTCAqLwogCQlzdF9sbF9kaXNhYmxlKHN0X2dkYXRhKTsKIAl9CkBAIC03OTEsNyArNzcxLDcgQEAKIAlpZiAodW5saWtlbHkoc2tiID09IE5VTEwgfHwgc3RfZ2RhdGEgPT0gTlVMTAogCQl8fCBzdF9nZGF0YS0+dHR5ID09IE5VTEwpKSB7CiAJCXByX2VycigiZGF0YS90dHkgdW5hdmFpbGFibGUgdG8gcGVyZm9ybSB3cml0ZSIpOwotCQlyZXR1cm4gU1RfRVJSX0ZBSUxVUkU7CisJCXJldHVybiAtMTsKIAl9CiAjaWZkZWYgREVCVUcJCQkvKiBvcGVuLXVwIHNrYiB0byByZWFkIHRoZSAxc3QgYnl0ZSAqLwogCXN3aXRjaCAoc2tiLT5kYXRhWzBdKSB7CkBAIC04MTAsMTAgKzc5MCwxMCBAQAogCWlmICh1bmxpa2VseShzdF9nZGF0YS0+bGlzdFtwcm90b2lkXSA9PSBOVUxMKSkgewogCQlwcl9lcnIoIiBwcm90b2NvbCAlZCBub3QgcmVnaXN0ZXJlZCwgYW5kIHdyaXRpbmc/ICIsCiAJCQkgICBwcm90b2lkKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCi0JcHJfaW5mbygiJWQgdG8gYmUgd3JpdHRlbiIsIHNrYi0+bGVuKTsKKwlwcl9kZWJ1ZygiJWQgdG8gYmUgd3JpdHRlbiIsIHNrYi0+bGVuKTsKIAlsZW4gPSBza2ItPmxlbjsKIAogCS8qIHN0X2xsIHRvIGRlY2lkZSB3aGVyZSB0byBlbnF1ZXVlIHRoZSBza2IgKi8KQEAgLTgzNCw3ICs4MTQsNyBAQAogICovCiBzdGF0aWMgaW50IHN0X3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0JaW50IGVyciA9IFNUX1NVQ0NFU1M7CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHN0X2RhdGFfcyAqc3RfZ2RhdGE7CiAJcHJfaW5mbygiJXMgIiwgX19mdW5jX18pOwogCkBAIC04NTUsOCArODM1LDggQEAKIAkgKiBzaWduYWwgdG8gVUlNIHZpYSBLSU0gdGhhdCAtCiAJICogaW5zdGFsbGF0aW9uIG9mIE5fVElfV0wgbGRpc2MgaXMgY29tcGxldGUKIAkgKi8KLQlzdF9raW1fY29tcGxldGUoKTsKLQlwcl9pbmZvKCJkb25lICVzIiwgX19mdW5jX18pOworCXN0X2tpbV9jb21wbGV0ZShzdF9nZGF0YS0+a2ltX2RhdGEpOworCXByX2RlYnVnKCJkb25lICVzIiwgX19mdW5jX18pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg3OCwxMiArODU4LDEzIEBACiAJCQlwcl9lcnIoIiVkIG5vdCB1bi1yZWdpc3RlcmVkIiwgaSk7CiAJCXN0X2dkYXRhLT5saXN0W2ldID0gTlVMTDsKIAl9CisJc3RfZ2RhdGEtPnByb3Rvc19yZWdpc3RlcmVkID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdF9nZGF0YS0+bG9jaywgZmxhZ3MpOwogCS8qCiAJICogc2lnbmFsIHRvIFVJTSB2aWEgS0lNIHRoYXQgLQogCSAqIE5fVElfV0wgbGRpc2MgaXMgdW4taW5zdGFsbGVkCiAJICovCi0Jc3Rfa2ltX2NvbXBsZXRlKCk7CisJc3Rfa2ltX2NvbXBsZXRlKHN0X2dkYXRhLT5raW1fZGF0YSk7CiAJc3RfZ2RhdGEtPnR0eSA9IE5VTEw7CiAJLyogRmx1c2ggYW55IHBlbmRpbmcgY2hhcmFjdGVycyBpbiB0aGUgZHJpdmVyIGFuZCBkaXNjaXBsaW5lLiAqLwogCXR0eV9sZGlzY19mbHVzaCh0dHkpOwpAQCAtOTAwLDcgKzg4MSw3IEBACiAJc3RfZ2RhdGEtPnJ4X3NrYiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RfZ2RhdGEtPmxvY2ssIGZsYWdzKTsKIAotCXByX2luZm8oIiVzOiBkb25lICIsIF9fZnVuY19fKTsKKwlwcl9kZWJ1ZygiJXM6IGRvbmUgIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCBzdF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLApAQCAtOTA4LDExICs4ODksOCBAQAogewogCiAjaWZkZWYgVkVSQk9TRQotCWxvbmcgaTsKLQlwcmludGsoS0VSTl9FUlIgImluY29taW5nIGRhdGEuLi5cbiIpOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQlwcmludGsoIiAleCIsIGRhdGFbaV0pOwotCXByaW50ayhLRVJOX0VSUiAiXG4uLiBkYXRhIGVuZFxuIik7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIj5pbj4iLCBEVU1QX1BSRUZJWF9OT05FLAorCQkxNiwgMSwgZGF0YSwgY291bnQsIDApOwogI2VuZGlmCiAKIAkvKgpAQCAtOTIwLDcgKzg5OCw3IEBACiAJICogdG8gS0lNIGZvciB2YWxpZGF0aW9uCiAJICovCiAJc3RfcmVjdih0dHktPmRpc2NfZGF0YSwgZGF0YSwgY291bnQpOwotCXByX2luZm8oImRvbmUgJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoImRvbmUgJXMiLCBfX2Z1bmNfXyk7CiB9CiAKIC8qIHdha2UtdXAgZnVuY3Rpb24gY2FsbGVkIGluIGZyb20gdGhlIFRUWSBsYXllcgpAQCAtOTI5LDcgKzkwNyw3IEBACiBzdGF0aWMgdm9pZCBzdF90dHlfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0CXN0X2RhdGFfcyAqc3RfZ2RhdGEgPSB0dHktPmRpc2NfZGF0YTsKLQlwcl9pbmZvKCIlcyAiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzICIsIF9fZnVuY19fKTsKIAkvKiBkb24ndCBkbyBhbiB3YWtldXAgZm9yIG5vdyAqLwogCWNsZWFyX2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmdHR5LT5mbGFncyk7CiAKQEAgLTk0MCw3ICs5MTgsNyBAQAogc3RhdGljIHZvaWQgc3RfdHR5X2ZsdXNoX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdAlzdF9kYXRhX3MgKnN0X2dkYXRhID0gdHR5LT5kaXNjX2RhdGE7Ci0JcHJfaW5mbygiJXMgIiwgX19mdW5jX18pOworCXByX2RlYnVnKCIlcyAiLCBfX2Z1bmNfXyk7CiAKIAlrZnJlZV9za2Ioc3RfZ2RhdGEtPnR4X3NrYik7CiAJc3RfZ2RhdGEtPnR4X3NrYiA9IE5VTEw7CkBAIC05NzksNyArOTU3LDcgQEAKIAkJa2ZyZWUoc3RfbGRpc2Nfb3BzKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JcHJfaW5mbygicmVnaXN0ZXJlZCBuX3NoYXJlZCBsaW5lIGRpc2NpcGxpbmUiKTsKKwlwcl9kZWJ1ZygicmVnaXN0ZXJlZCBuX3NoYXJlZCBsaW5lIGRpc2NpcGxpbmUiKTsKIAogCXN0X2dkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0X2RhdGFfcyksIEdGUF9LRVJORUwpOwogCWlmICghc3RfZ2RhdGEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmggYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfY29yZS5oCmluZGV4IGYyNzFjODguLmUwYzMyZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9jb3JlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2NvcmUuaApAQCAtMzYsNTcgKzM2LDg3IEBACiAjZGVmaW5lIFNUX1JFR19QRU5ESU5HCQkzCiAjZGVmaW5lIFNUX1dBSVRJTkdfRk9SX1JFU1AJNAogCi0vKgotICogbG9jYWwgZGF0YSByZXF1aXJlZCBmb3IgU1QvS0lNL1NULUhDSS1MTAorLyoqCisgKiBzdHJ1Y3Qgc3RfZGF0YV9zIC0gU1QgY29yZSBpbnRlcm5hbCBzdHJ1Y3R1cmUKKyAqIEBzdF9zdGF0ZTogZGlmZmVyZW50IHN0YXRlcyBvZiBTVCBsaWtlIGluaXRpYWxpemluZywgcmVnaXN0cmF0aW9uCisgKglpbiBwcm9ncmVzcywgdGhpcyBpcyBtYWlubHkgdXNlZCB0byByZXR1cm4gcmVsZXZhbnQgZXJyIGNvZGVzCisgKgl3aGVuIHByb3RvY29sIGRyaXZlcnMgYXJlIHJlZ2lzdGVyaW5nLiBJdCBpcyBhbHNvIHVzZWQgdG8gdHJhY2sKKyAqCXRoZSByZWN2IGZ1bmN0aW9uLCBhcyBpbiBkdXJpbmcgZncgZG93bmxvYWQgb25seSBIQ0kgZXZlbnRzCisgKgljYW4gb2NjdXIgLCB3aGVyZSBhcyBkdXJpbmcgb3RoZXIgdGltZXMgb3RoZXIgZXZlbnRzIENIOCwgQ0g5CisgKgljYW4gb2NjdXIuCisgKiBAdHR5OiB0dHkgcHJvdmlkZWQgYnkgdGhlIFRUWSBjb3JlIGZvciBsaW5lIGRpc2NpcGxpbmVzLgorICogQGxkaXNjX29wczogdGhlIHByb2NlZHVyZXMgdGhhdCB0aGlzIGxpbmUgZGlzY2lwbGluZSByZWdpc3RlcnMgd2l0aCBUVFkuCisgKiBAdHhfc2tiOiBJZiBmb3Igc29tZSByZWFzb24gdGhlIHR0eSdzIHdyaXRlIHJldHVybnMgbGVzc2VyIGJ5dGVzIHdyaXR0ZW4KKyAqCXRoZW4gdG8gbWFpbnRhaW4gdGhlIHJlc3Qgb2YgZGF0YSB0byBiZSB3cml0dGVuIG9uIG5leHQgaW5zdGFuY2UuCisgKglUaGlzIG5lZWRzIHRvIGJlIHByb3RlY3RlZCwgaGVuY2UgdGhlIGxvY2sgaW5zaWRlIHdha2V1cCBmdW5jLgorICogQHR4X3N0YXRlOiBpZiB0aGUgZGF0YSBpcyBiZWluZyB3cml0dGVuIG9udG8gdGhlIFRUWSBhbmQgcHJvdG9jb2wgZHJpdmVyCisgKgl3YW50cyB0byBzZW5kIG1vcmUsIHF1ZXVlIHVwIGRhdGEgYW5kIG1hcmsgdGhhdCB0aGVyZSBpcworICoJbW9yZSBkYXRhIHRvIHNlbmQuCisgKiBAbGlzdDogdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIHJlZ2lzdGVyZWQsIG9ubHkgTUFYIGNhbiBleGlzdCwgb25lIHByb3RvY29sCisgKgljYW4gcmVnaXN0ZXIgb25seSBvbmNlLgorICogQHJ4X3N0YXRlOiBzdGF0ZXMgdG8gYmUgbWFpbnRhaW5lZCBpbnNpZGUgc3QncyB0dHkgcmVjZWl2ZQorICogQHJ4X2NvdW50OiBjb3VudCB0byBiZSBtYWludGFpbmVkIGluc2lkZSBzdCdzIHR0eSByZWNlaWV2ZQorICogQHJ4X3NrYjogdGhlIHNrYiB3aGVyZSBhbGwgZGF0YSBmb3IgYSBwcm90b2NvbCBnZXRzIGFjY3VtdWxhdGVkLAorICoJc2luY2UgdHR5IG1pZ2h0IG5vdCBjYWxsIHJlY2VpdmUgd2hlbiBhIGNvbXBsZXRlIGV2ZW50IHBhY2tldAorICoJaXMgcmVjZWl2ZWQsIHRoZSBzdGF0ZXMsIGNvdW50IGFuZCB0aGUgc2tiIG5lZWRzIHRvIGJlIG1haW50YWluZWQuCisgKiBAdHhxOiB0aGUgbGlzdCBvZiBza2JzIHdoaWNoIG5lZWRzIHRvIGJlIHNlbnQgb250byB0aGUgVFRZLgorICogQHR4X3dhaXRxOiBpZiB0aGUgY2hpcCBpcyBub3QgaW4gQVdBS0Ugc3RhdGUsIHRoZSBza2JzIG5lZWRzIHRvIGJlIHF1ZXVlZAorICoJdXAgaW4gaGVyZSwgUE0oV0FLRVVQX0lORCkgZGF0YSBuZWVkcyB0byBiZSBzZW50IGFuZCB0aGVuIHRoZSBza2JzCisgKglmcm9tIHdhaXRxIGNhbiBiZSBtb3ZlZCBvbnRvIHRoZSB0eHEuCisgKglOZWVkcyBsb2NraW5nIHRvby4KKyAqIEBsb2NrOiB0aGUgbG9jayB0byBwcm90ZWN0IHNrYnMsIHF1ZXVlcywgYW5kIFNUIHN0YXRlcy4KKyAqIEBwcm90b3NfcmVnaXN0ZXJlZDogY291bnQgb2YgdGhlIHByb3RvY29scyByZWdpc3RlcmVkLCBhbHNvIHdoZW4gMCB0aGUKKyAqCWNoaXAgZW5hYmxlIGdwaW8gY2FuIGJlIHRvZ2dsZWQsIGFuZCB3aGVuIGl0IGNoYW5nZXMgdG8gMSB0aGUgZncKKyAqCW5lZWRzIHRvIGJlIGRvd25sb2FkZWQgdG8gaW5pdGlhbGl6ZSBjaGlwIHNpZGUgU1QuCisgKiBAbGxfc3RhdGU6IHRoZSB2YXJpb3VzIFBNIHN0YXRlcyB0aGUgY2hpcCBjYW4gYmUsIHRoZSBzdGF0ZXMgYXJlIG5vdGlmaWVkCisgKgl0byB1cywgd2hlbiB0aGUgY2hpcCBzZW5kcyByZWxldmFudCBQTSBwYWNrZXRzKFNMRUVQX0lORCwgV0FLRV9JTkQpLgorICogQGtpbV9kYXRhOiByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBlbmNhcHN1bGF0aW5nIHN0cnVjdHVyZS4KKyAqCiAgKi8KIHN0cnVjdCBzdF9kYXRhX3MgewogCXVuc2lnbmVkIGxvbmcgc3Rfc3RhdGU7Ci0vKgotICogYW4gaW5zdGFuY2Ugb2YgdHR5X3N0cnVjdCAmIGxkaXNjIG9wcyB0byBtb3ZlIGFyb3VuZAotICovCiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3QgdHR5X2xkaXNjX29wcyAqbGRpc2Nfb3BzOwotLyoKLSAqIHRoZSB0eCBza2IgLQotICogaWYgdGhlIHNrYiBpcyBhbHJlYWR5IGRlcXVldWVkIGFuZCB0aGUgdHR5IGZhaWxlZCB0byB3cml0ZSB0aGUgc2FtZQotICogbWFpbnRhaW4gdGhlIHNrYiB0byB3cml0ZSBpbiB0aGUgbmV4dCB0cmFuc2FjdGlvbgotICovCiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKICNkZWZpbmUgU1RfVFhfU0VORElORwkxCiAjZGVmaW5lIFNUX1RYX1dBS0VVUAkyCiAJdW5zaWduZWQgbG9uZyB0eF9zdGF0ZTsKLS8qCi0gKiBsaXN0IG9mIHByb3RvY29sIHJlZ2lzdGVyZWQKLSAqLwogCXN0cnVjdCBzdF9wcm90b19zICpsaXN0W1NUX01BWF07Ci0vKgotICogbG9jawotICovCiAJdW5zaWduZWQgbG9uZyByeF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHJ4X2NvdW50OwogCXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eHEsIHR4X3dhaXRxOwotCXNwaW5sb2NrX3QgbG9jazsJLyogU1QgTEwgc3RhdGUgbG9jayAgKi8KKwlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgY2hhcglwcm90b3NfcmVnaXN0ZXJlZDsKLQl1bnNpZ25lZCBsb25nIGxsX3N0YXRlOwkvKiBTVCBMTCBwb3dlciBzdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcgbGxfc3RhdGU7CisJdm9pZCAqa2ltX2RhdGE7CiB9OwogCi0vKiBwb2ludCB0aGlzIHRvIHR0eS0+ZHJpdmVyLT53cml0ZSBvciB0dHktPm9wcy0+d3JpdGUKKy8qKgorICogc3RfaW50X3dyaXRlIC0KKyAqIHBvaW50IHRoaXMgdG8gdHR5LT5kcml2ZXItPndyaXRlIG9yIHR0eS0+b3BzLT53cml0ZQogICogZGVwZW5kaW5nIHVwb24gdGhlIGtlcm5lbCB2ZXJzaW9uCiAgKi8KIGludCBzdF9pbnRfd3JpdGUoc3RydWN0IHN0X2RhdGFfcyosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQpOwotLyogaW50ZXJuYWwgd3JpdGUgZnVuY3Rpb24sIHBhc3NlZCBvbnRvIHByb3RvY29sIGRyaXZlcnMKKworLyoqCisgKiBzdF93cml0ZSAtCisgKiBpbnRlcm5hbCB3cml0ZSBmdW5jdGlvbiwgcGFzc2VkIG9udG8gcHJvdG9jb2wgZHJpdmVycwogICogdmlhIHRoZSB3cml0ZSBmdW5jdGlvbiBwdHIgb2YgcHJvdG9jb2wgc3RydWN0CiAgKi8KIGxvbmcgc3Rfd3JpdGUoc3RydWN0IHNrX2J1ZmYgKik7Ci0vKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSBTVC1MTAotICovCisKKy8qIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmcm9tIFNULUxMICovCiB2b2lkIHN0X2xsX3NlbmRfZnJhbWUoZW51bSBwcm90b190eXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKKwogLyogaW50ZXJuYWwgd2FrZSB1cCBmdW5jdGlvbiAqLwogdm9pZCBzdF90eF93YWtldXAoc3RydWN0IHN0X2RhdGFfcyAqc3RfZGF0YSk7CiAKKy8qIGluaXQsIGV4aXQgZW50cnkgZnVuY3MgY2FsbGVkIGZyb20gS0lNICovCiBpbnQgc3RfY29yZV9pbml0KHN0cnVjdCBzdF9kYXRhX3MgKiopOwogdm9pZCBzdF9jb3JlX2V4aXQoc3RydWN0IHN0X2RhdGFfcyAqKTsKKworLyogYXNrIGZvciByZWZlcmVuY2UgZnJvbSBLSU0gKi8KIHZvaWQgc3Rfa2ltX3JlZihzdHJ1Y3Qgc3RfZGF0YV9zICoqKTsKIAogI2RlZmluZSBHUFNfU1RVQl9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmMKaW5kZXggOThjYmFiYi4uYjRhNmM3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2tpbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9raW0uYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKQEAgLTU1LDM3ICs1NywxMCBAQAogCQkgICB9LAogfTsKIAotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKLXN0YXRpYyBzc2l6ZV90IHNob3dfcGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKLQkJCSphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3Qgc3RvcmVfcGlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKLQkJCSAqZGV2YXR0ciwgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3Qgc2hvd19saXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKLQkJCSAqYXR0ciwgY2hhciAqYnVmKTsKLQotLyogc3RydWN0dXJlcyBzcGVjaWZpYyBmb3Igc3lzZnMgZW50cmllcyAqLwotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBwaWRfYXR0ciA9Ci1fX0FUVFIocGlkLCAwNjQ0LCAodm9pZCAqKXNob3dfcGlkLCAodm9pZCAqKXN0b3JlX3BpZCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbGlzdF9wcm90b2NvbHMgPQotX19BVFRSKHByb3RvY29scywgMDQ0NCwgKHZvaWQgKilzaG93X2xpc3QsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdWltX2F0dHJzW10gPSB7Ci0JJnBpZF9hdHRyLmF0dHIsCi0JLyogYWRkIG1vcmUgZGVidWcgc3lzZnMgZW50cmllcyAqLwotCSZsaXN0X3Byb3RvY29scy5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB1aW1fYXR0cl9ncnAgPSB7Ci0JLmF0dHJzID0gdWltX2F0dHJzLAotfTsKLSNlbHNlCiBzdGF0aWMgaW50IGtpbV90b2dnbGVfcmFkaW8odm9pZCosIGJvb2wpOwogc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGtpbV9yZmtpbGxfb3BzID0gewogCS5zZXRfYmxvY2sgPSBraW1fdG9nZ2xlX3JhZGlvLAogfTsKLSNlbmRpZgkvKiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQgKi8KIAogLyogc3RyaW5ncyB0byBiZSB1c2VkIGZvciByZmtpbGwgZW50cmllcyBhbmQgYnkKICAqIFNUIENvcmUgdG8gYmUgdXNlZCBmb3Igc3lzZnMgZGVidWcgZW50cnkKQEAgLTk3LDE4ICs3MiwxOSBAQAogCVBST1RPX0VOVFJZKFNUX0dQUywgIkdQUyIpLAogfTsKIAotc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9nZGF0YTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KIAotLyoKLSAqIGZ1bmN0aW9uIHRvIHJldHVybiB3aGV0aGVyIHRoZSBmaXJtd2FyZSByZXNwb25zZSB3YXMgcHJvcGVyCi0gKiBpbiBjYXNlIG9mIGVycm9yIGRvbid0IGNvbXBsZXRlIHNvIHRoYXQgd2FpdGluZyBmb3IgcHJvcGVyCi0gKiByZXNwb25zZSB0aW1lcyBvdXQKKy8qKgorICogdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2UgLQorICoJZnVuY3Rpb24gdG8gcmV0dXJuIHdoZXRoZXIgdGhlIGZpcm13YXJlIHJlc3BvbnNlIHdhcyBwcm9wZXIKKyAqCWluIGNhc2Ugb2YgZXJyb3IgZG9uJ3QgY29tcGxldGUgc28gdGhhdCB3YWl0aW5nIGZvciBwcm9wZXIKKyAqCXJlc3BvbnNlIHRpbWVzIG91dAogICovCi12b2lkIHZhbGlkYXRlX2Zpcm13YXJlX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIHZhbGlkYXRlX2Zpcm13YXJlX3Jlc3BvbnNlKHN0cnVjdCBraW1fZGF0YV9zICpraW1fZ2RhdGEpCiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGtpbV9nZGF0YS0+cnhfc2tiOwogCWlmICh1bmxpa2VseShza2ItPmRhdGFbNV0gIT0gMCkpIHsKIAkJcHJfZXJyKCJubyBwcm9wZXIgcmVzcG9uc2UgZHVyaW5nIGZ3IGRvd25sb2FkIik7CiAJCXByX2VycigiZGF0YTYgJXgiLCBza2ItPmRhdGFbNV0pOwpAQCAtMTIyLDE0ICs5OCwxNCBAQAogLyogY2hlY2sgZm9yIGRhdGEgbGVuIHJlY2VpdmVkIGluc2lkZSBraW1faW50X3JlY3YKICAqIG1vc3Qgb2Z0ZW4gaGl0IHRoZSBsYXN0IGNhc2UgdG8gdXBkYXRlIHN0YXRlIHRvIHdhaXRpbmcgZm9yIGRhdGEKICAqLwotc3RhdGljIGlubGluZSBpbnQga2ltX2NoZWNrX2RhdGFfbGVuKGludCBsZW4pCitzdGF0aWMgaW5saW5lIGludCBraW1fY2hlY2tfZGF0YV9sZW4oc3RydWN0IGtpbV9kYXRhX3MgKmtpbV9nZGF0YSwgaW50IGxlbikKIHsKIAlyZWdpc3RlciBpbnQgcm9vbSA9IHNrYl90YWlscm9vbShraW1fZ2RhdGEtPnJ4X3NrYik7CiAKLQlwcl9pbmZvKCJsZW4gJWQgcm9vbSAlZCIsIGxlbiwgcm9vbSk7CisJcHJfZGVidWcoImxlbiAlZCByb29tICVkIiwgbGVuLCByb29tKTsKIAogCWlmICghbGVuKSB7Ci0JCXZhbGlkYXRlX2Zpcm13YXJlX3Jlc3BvbnNlKGtpbV9nZGF0YS0+cnhfc2tiKTsKKwkJdmFsaWRhdGVfZmlybXdhcmVfcmVzcG9uc2Uoa2ltX2dkYXRhKTsKIAl9IGVsc2UgaWYgKGxlbiA+IHJvb20pIHsKIAkJLyogUmVjZWl2ZWQgcGFja2V0J3MgcGF5bG9hZCBsZW5ndGggaXMgbGFyZ2VyLgogCQkgKiBXZSBjYW4ndCBhY2NvbW1vZGF0ZSBpdCBpbiBjcmVhdGVkIHNrYi4KQEAgLTE1NSwxOCArMTMxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIHJlY2VpdmUgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBmaXJtd2FyZSBkb3dubG9hZAotICogLSBmaXJtd2FyZSBkb3dubG9hZCByZXNwb25zZXMgb24gZGlmZmVyZW50IFVBUlQgZHJpdmVycwotICogICBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gY29tZSBpbiBidXJzdHMgb2YgZGlmZmVyZW50Ci0gKiAgIHR0eV9yZWNlaXZlIGFuZCBoZW5jZSB0aGUgbG9naWMKKy8qKgorICoga2ltX2ludF9yZWN2IC0gcmVjZWl2ZSBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIGZpcm13YXJlIGRvd25sb2FkCisgKglmaXJtd2FyZSBkb3dubG9hZCByZXNwb25zZXMgb24gZGlmZmVyZW50IFVBUlQgZHJpdmVycworICoJaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGNvbWUgaW4gYnVyc3RzIG9mIGRpZmZlcmVudAorICoJdHR5X3JlY2VpdmUgYW5kIGhlbmNlIHRoZSBsb2dpYwogICovCi12b2lkIGtpbV9pbnRfcmVjdihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBsb25nIGNvdW50KQordm9pZCBraW1faW50X3JlY3Yoc3RydWN0IGtpbV9kYXRhX3MgKmtpbV9nZGF0YSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBsb25nIGNvdW50KQogewogCXJlZ2lzdGVyIGNoYXIgKnB0cjsKIAlzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqZWg7CiAJcmVnaXN0ZXIgaW50IGxlbiA9IDAsIHR5cGUgPSAwOwogCi0JcHJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCS8qIERlY29kZSByZWNlaXZlZCBieXRlcyBoZXJlICovCiAJcHRyID0gKGNoYXIgKilkYXRhOwogCWlmICh1bmxpa2VseShwdHIgPT0gTlVMTCkpIHsKQEAgLTE4OCw4ICsxNjYsOCBAQAogCQkJc3dpdGNoIChraW1fZ2RhdGEtPnJ4X3N0YXRlKSB7CiAJCQkJLyogV2FpdGluZyBmb3IgY29tcGxldGUgcGFja2V0ID8gKi8KIAkJCWNhc2UgU1RfQlRfVzRfREFUQToKLQkJCQlwcl9pbmZvKCJDb21wbGV0ZSBwa3QgcmVjZWl2ZWQiKTsKLQkJCQl2YWxpZGF0ZV9maXJtd2FyZV9yZXNwb25zZShraW1fZ2RhdGEtPnJ4X3NrYik7CisJCQkJcHJfZGVidWcoIkNvbXBsZXRlIHBrdCByZWNlaXZlZCIpOworCQkJCXZhbGlkYXRlX2Zpcm13YXJlX3Jlc3BvbnNlKGtpbV9nZGF0YSk7CiAJCQkJa2ltX2dkYXRhLT5yeF9zdGF0ZSA9IFNUX1c0X1BBQ0tFVF9UWVBFOwogCQkJCWtpbV9nZGF0YS0+cnhfc2tiID0gTlVMTDsKIAkJCQljb250aW51ZTsKQEAgLTE5Nyw5ICsxNzUsOSBAQAogCQkJY2FzZSBTVF9CVF9XNF9FVkVOVF9IRFI6CiAJCQkJZWggPSAoc3RydWN0IGhjaV9ldmVudF9oZHIgKilraW1fZ2RhdGEtPgogCQkJCSAgICByeF9za2ItPmRhdGE7Ci0JCQkJcHJfaW5mbygiRXZlbnQgaGVhZGVyOiBldnQgMHglMi4yeCIKKwkJCQlwcl9kZWJ1ZygiRXZlbnQgaGVhZGVyOiBldnQgMHglMi4yeCIKIAkJCQkJICAgInBsZW4gJWQiLCBlaC0+ZXZ0LCBlaC0+cGxlbik7Ci0JCQkJa2ltX2NoZWNrX2RhdGFfbGVuKGVoLT5wbGVuKTsKKwkJCQlraW1fY2hlY2tfZGF0YV9sZW4oa2ltX2dkYXRhLCBlaC0+cGxlbik7CiAJCQkJY29udGludWU7CiAJCQl9CS8qIGVuZCBvZiBzd2l0Y2ggKi8KIAkJfQkJLyogZW5kIG9mIGlmIHJ4X3N0YXRlICovCkBAIC0yMTYsNyArMTk0LDcgQEAKIAkJCXB0cisrOwogCQkJY291bnQtLTsKIAkJCWNvbnRpbnVlOwotCQl9CQkvKiBlbmQgb2Ygc3dpdGNoICpwdHIgKi8KKwkJfQogCQlwdHIrKzsKIAkJY291bnQtLTsKIAkJa2ltX2dkYXRhLT5yeF9za2IgPQpAQCAtMjI2LDM0ICsyMDQsMzUgQEAKIAkJCWtpbV9nZGF0YS0+cnhfc3RhdGUgPSBTVF9XNF9QQUNLRVRfVFlQRTsKIAkJCWtpbV9nZGF0YS0+cnhfY291bnQgPSAwOwogCQkJcmV0dXJuOwotCQl9IC8qIG5vdCBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlICovCisJCX0KIAkJYnRfY2Ioa2ltX2dkYXRhLT5yeF9za2IpLT5wa3RfdHlwZSA9IHR5cGU7Ci0JfQkJCS8qIGVuZCBvZiB3aGlsZSBjb3VudCAqLworCX0KIAlwcl9pbmZvKCJkb25lICVzIiwgX19mdW5jX18pOwogCXJldHVybjsKIH0KIAotc3RhdGljIGxvbmcgcmVhZF9sb2NhbF92ZXJzaW9uKGNoYXIgKmJ0c19zY3JfbmFtZSkKK3N0YXRpYyBsb25nIHJlYWRfbG9jYWxfdmVyc2lvbihzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhLCBjaGFyICpidHNfc2NyX25hbWUpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmVyc2lvbiA9IDAsIGNoaXAgPSAwLCBtaW5fdmVyID0gMCwgbWFqX3ZlciA9IDA7CiAJY2hhciByZWFkX3Zlcl9jbWRbXSA9IHsgMHgwMSwgMHgwMSwgMHgxMCwgMHgwMCB9OwogCi0JcHJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCiAJSU5JVF9DT01QTEVUSU9OKGtpbV9nZGF0YS0+a2ltX3JjdmQpOwogCWlmICg0ICE9IHN0X2ludF93cml0ZShraW1fZ2RhdGEtPmNvcmVfZGF0YSwgcmVhZF92ZXJfY21kLCA0KSkgewogCQlwcl9lcnIoImtpbTogY291bGRuJ3Qgd3JpdGUgNCBieXRlcyIpOwotCQlyZXR1cm4gU1RfRVJSX0ZBSUxVUkU7CisJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dAogCSAgICAoJmtpbV9nZGF0YS0+a2ltX3JjdmQsIG1zZWNzX3RvX2ppZmZpZXMoQ01EX1JFU1BfVElNRSkpKSB7CiAJCXByX2VycigiIHdhaXRpbmcgZm9yIHZlciBpbmZvLSB0aW1lZCBvdXQgIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCXZlcnNpb24gPQotCSAgICBNQUtFV09SRChraW1fZ2RhdGEtPnJlc3BfYnVmZmVyWzEzXSwga2ltX2dkYXRhLT5yZXNwX2J1ZmZlclsxNF0pOworCQlNQUtFV09SRChraW1fZ2RhdGEtPnJlc3BfYnVmZmVyWzEzXSwKKwkJCQlraW1fZ2RhdGEtPnJlc3BfYnVmZmVyWzE0XSk7CiAJY2hpcCA9ICh2ZXJzaW9uICYgMHg3QzAwKSA+PiAxMDsKIAltaW5fdmVyID0gKHZlcnNpb24gJiAweDAwN0YpOwogCW1hal92ZXIgPSAodmVyc2lvbiAmIDB4MDM4MCkgPj4gNzsKQEAgLTI2MiwyNSArMjQxLDMyIEBACiAJCW1hal92ZXIgfD0gMHgwMDA4OwogCiAJc3ByaW50ZihidHNfc2NyX25hbWUsICJUSUluaXRfJWQuJWQuJWQuYnRzIiwgY2hpcCwgbWFqX3ZlciwgbWluX3Zlcik7CisKKwkvKiB0byBiZSBhY2Nlc3NlZCBsYXRlciB2aWEgc3lzZnMgZW50cnkgKi8KKwlraW1fZ2RhdGEtPnZlcnNpb24uZnVsbCA9IHZlcnNpb247CisJa2ltX2dkYXRhLT52ZXJzaW9uLmNoaXAgPSBjaGlwOworCWtpbV9nZGF0YS0+dmVyc2lvbi5tYWpfdmVyID0gbWFqX3ZlcjsKKwlraW1fZ2RhdGEtPnZlcnNpb24ubWluX3ZlciA9IG1pbl92ZXI7CisKIAlwcl9pbmZvKCIlcyIsIGJ0c19zY3JfbmFtZSk7Ci0JcmV0dXJuIFNUX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKLS8qIGludGVybmFsIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyB0aHJvdWdoIHRoZSAuYnRzIGZpcm13YXJlIHNjcmlwdCBmaWxlCi0gKiBpbnRyZXByZXRzIFNFTkQsIERFTEFZIGFjdGlvbnMgb25seSBhcyBvZiBub3cKKy8qKgorICogZG93bmxvYWRfZmlybXdhcmUgLQorICoJaW50ZXJuYWwgZnVuY3Rpb24gd2hpY2ggcGFyc2VzIHRocm91Z2ggdGhlIC5idHMgZmlybXdhcmUKKyAqCXNjcmlwdCBmaWxlIGludHJlcHJldHMgU0VORCwgREVMQVkgYWN0aW9ucyBvbmx5IGFzIG9mIG5vdwogICovCi1zdGF0aWMgbG9uZyBkb3dubG9hZF9maXJtd2FyZSh2b2lkKQorc3RhdGljIGxvbmcgZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IGtpbV9kYXRhX3MgKmtpbV9nZGF0YSkKIHsKLQlsb25nIGVyciA9IFNUX1NVQ0NFU1M7CisJbG9uZyBlcnIgPSAwOwogCWxvbmcgbGVuID0gMDsKIAlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwdHIgPSBOVUxMOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKmFjdGlvbl9wdHIgPSBOVUxMOwogCXVuc2lnbmVkIGNoYXIgYnRzX3Njcl9uYW1lWzMwXSA9IHsgMCB9OwkvKiAzMCBjaGFyIGxvbmcgYnRzIHNjciBuYW1lPyAqLwogCi0JcHJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7Ci0KLQllcnIgPSByZWFkX2xvY2FsX3ZlcnNpb24oYnRzX3Njcl9uYW1lKTsKLQlpZiAoZXJyICE9IFNUX1NVQ0NFU1MpIHsKKwllcnIgPSByZWFkX2xvY2FsX3ZlcnNpb24oa2ltX2dkYXRhLCBidHNfc2NyX25hbWUpOworCWlmIChlcnIgIT0gMCkgewogCQlwcl9lcnIoImtpbTogZmFpbGVkIHRvIHJlYWQgbG9jYWwgdmVyIik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjkxLDcgKzI3Nyw3IEBACiAJCSAgICAgKGtpbV9nZGF0YS0+ZndfZW50cnktPnNpemUgPT0gMCkpKSB7CiAJCXByX2VycigiIHJlcXVlc3RfZmlybXdhcmUgZmFpbGVkKGVycm5vICVsZCkgZm9yICVzIiwgZXJyLAogCQkJICAgYnRzX3Njcl9uYW1lKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQogCXB0ciA9ICh2b2lkICopa2ltX2dkYXRhLT5md19lbnRyeS0+ZGF0YTsKIAlsZW4gPSBraW1fZ2RhdGEtPmZ3X2VudHJ5LT5zaXplOwpAQCAtMzAyLDcgKzI4OCw3IEBACiAJbGVuIC09IHNpemVvZihzdHJ1Y3QgYnRzX2hlYWRlcik7CiAKIAl3aGlsZSAobGVuID4gMCAmJiBwdHIpIHsKLQkJcHJfaW5mbygiIGFjdGlvbiBzaXplICVkLCB0eXBlICVkICIsCisJCXByX2RlYnVnKCIgYWN0aW9uIHNpemUgJWQsIHR5cGUgJWQgIiwKIAkJCSAgICgoc3RydWN0IGJ0c19hY3Rpb24gKilwdHIpLT5zaXplLAogCQkJICAgKChzdHJ1Y3QgYnRzX2FjdGlvbiAqKXB0ciktPnR5cGUpOwogCkBAIC0zMTUsOCArMzAxLDggQEAKIAkJCQkvKiBpZ25vcmUgcmVtb3RlIGNoYW5nZQogCQkJCSAqIGJhdWQgcmF0ZSBIQ0kgVlMgY29tbWFuZCAqLwogCQkJCXByX2VycgotCQkJCSAgICAoIiBjaGFuZ2UgcmVtb3RlIGJhdWRcCi0JCQkJICAgIHJhdGUgY29tbWFuZCBpbiBmaXJtd2FyZSIpOworCQkJCSAgICAoIiBjaGFuZ2UgcmVtb3RlIGJhdWQiCisJCQkJICAgICIgcmF0ZSBjb21tYW5kIGluIGZpcm13YXJlIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTMyNiw3ICszMTIsNyBAQAogCQkJCQkgICAoKHN0cnVjdCBidHNfYWN0aW9uICopcHRyKS0+c2l6ZSk7CiAJCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpIHsKIAkJCQlyZWxlYXNlX2Zpcm13YXJlKGtpbV9nZGF0YS0+ZndfZW50cnkpOwotCQkJCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dAogCQkJICAgICgma2ltX2dkYXRhLT5raW1fcmN2ZCwKQEAgLTMzNSw3ICszMjEsNyBAQAogCQkJCSAgICAoIiByZXNwb25zZSB0aW1lb3V0IGR1cmluZyBmdyBkb3dubG9hZCAiKTsKIAkJCQkvKiB0aW1lZCBvdXQgKi8KIAkJCQlyZWxlYXNlX2Zpcm13YXJlKGtpbV9nZGF0YS0+ZndfZW50cnkpOwotCQkJCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBQ1RJT05fREVMQVk6CS8qIHNsZWVwICovCkBAIC0zNTMsMTkgKzMzOSwyMyBAQAogCX0KIAkvKiBmdyBkb3dubG9hZCBjb21wbGV0ZSAqLwogCXJlbGVhc2VfZmlybXdhcmUoa2ltX2dkYXRhLT5md19lbnRyeSk7Ci0JcmV0dXJuIFNUX1NVQ0NFU1M7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZnVuY3Rpb25zIGNhbGxlZCBmcm9tIFNUIGNvcmUgKi8KLQogLyogZnVuY3Rpb24gdG8gdG9nZ2xlIHRoZSBHUElPCiAgKiBuZWVkcyB0byBrbm93IHdoZXRoZXIgdGhlIEdQSU8gaXMgYWN0aXZlIGhpZ2ggb3IgYWN0aXZlIGxvdwogICovCiB2b2lkIHN0X2tpbV9jaGlwX3RvZ2dsZShlbnVtIHByb3RvX3R5cGUgdHlwZSwgZW51bSBraW1fZ3Bpb19zdGF0ZSBzdGF0ZSkKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpraW1fcGRldjsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhOwogCXByX2luZm8oIiAlcyAiLCBfX2Z1bmNfXyk7CiAKKwlraW1fcGRldiA9IHN0X2dldF9wbGF0X2RldmljZSgpOworCWtpbV9nZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgma2ltX3BkZXYtPmRldik7CisKIAlpZiAoa2ltX2dkYXRhLT5ncGlvc1t0eXBlXSA9PSAtMSkgewogCQlwcl9pbmZvKCIgZ3BpbyBub3QgcmVxdWVzdGVkIGZvciBwcm90b2NvbCAlcyIsCiAJCQkgICBwcm90b2NvbF9uYW1lc1t0eXBlXSk7CkBAIC00MDUsNiArMzk1LDkgQEAKICAqLwogdm9pZCBzdF9raW1fcmVjdih2b2lkICpkaXNjX2RhdGEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGxvbmcgY291bnQpCiB7CisJc3RydWN0IHN0X2RhdGFfcwkqc3RfZ2RhdGEgPSAoc3RydWN0IHN0X2RhdGFfcyAqKWRpc2NfZGF0YTsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhID0gc3RfZ2RhdGEtPmtpbV9kYXRhOworCiAJcHJfaW5mbygiICVzICIsIF9fZnVuY19fKTsKIAkvKiBjb3B5IHRvIGxvY2FsIGJ1ZmZlciAqLwogCWlmICh1bmxpa2VseShkYXRhWzRdID09IDB4MDEgJiYgZGF0YVs1XSA9PSAweDEwICYmIGRhdGFbMF0gPT0gMHgwNCkpIHsKQEAgLTQxMyw3ICs0MDYsNyBAQAogCQljb21wbGV0ZV9hbGwoJmtpbV9nZGF0YS0+a2ltX3JjdmQpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkJa2ltX2ludF9yZWN2KGRhdGEsIGNvdW50KTsKKwkJa2ltX2ludF9yZWN2KGtpbV9nZGF0YSwgZGF0YSwgY291bnQpOwogCQkvKiBlaXRoZXIgY29tcGxldGVzIG9yIHRpbWVzIG91dCAqLwogCX0KIAlyZXR1cm47CkBAIC00MjIsMjcgKzQxNSwzMyBAQAogLyogdG8gc2lnbmFsIGNvbXBsZXRpb24gb2YgbGluZSBkaXNjaXBsaW5lIGluc3RhbGxhdGlvbgogICogY2FsbGVkIGZyb20gU1QgQ29yZSwgdXBvbiB0dHlfb3BlbgogICovCi12b2lkIHN0X2tpbV9jb21wbGV0ZSh2b2lkKQordm9pZCBzdF9raW1fY29tcGxldGUodm9pZCAqa2ltX2RhdGEpCiB7CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9nZGF0YSA9IChzdHJ1Y3Qga2ltX2RhdGFfcyAqKWtpbV9kYXRhOwogCWNvbXBsZXRlKCZraW1fZ2RhdGEtPmxkaXNjX2luc3RhbGxlZCk7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIFNUIENvcmUgdXBvbiAxc3QgcmVnaXN0cmF0aW9uCi0qLwotbG9uZyBzdF9raW1fc3RhcnQodm9pZCkKKy8qKgorICogc3Rfa2ltX3N0YXJ0IC0gY2FsbGVkIGZyb20gU1QgQ29yZSB1cG9uIDFzdCByZWdpc3RyYXRpb24KKyAqCVRoaXMgaW52b2x2ZXMgdG9nZ2xpbmcgdGhlIGNoaXAgZW5hYmxlIGdwaW8sIHJlYWRpbmcKKyAqCXRoZSBmaXJtd2FyZSB2ZXJzaW9uIGZyb20gY2hpcCwgZm9ybWluZyB0aGUgZncgZmlsZSBuYW1lCisgKgliYXNlZCBvbiB0aGUgY2hpcCB2ZXJzaW9uLCByZXF1ZXN0aW5nIHRoZSBmdywgcGFyc2luZyBpdAorICoJYW5kIHBlcmZvcm0gZG93bmxvYWQoc2VuZC9yZWN2KS4KKyAqLworbG9uZyBzdF9raW1fc3RhcnQodm9pZCAqa2ltX2RhdGEpCiB7Ci0JbG9uZyBlcnIgPSBTVF9TVUNDRVNTOworCWxvbmcgZXJyID0gMDsKIAlsb25nIHJldHJ5ID0gUE9SX1JFVFJZX0NPVU5UOworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGEgPSAoc3RydWN0IGtpbV9kYXRhX3MgKilraW1fZGF0YTsKKwogCXByX2luZm8oIiAlcyIsIF9fZnVuY19fKTsKIAogCWRvIHsKLSNpZmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKIAkJLyogVE9ETzogdGhpcyBpcyBvbmx5IGJlY2F1c2UgcmZraWxsIHN1Yi1zeXN0ZW0KIAkJICogZG9lc24ndCBzZW5kIGV2ZW50cyB0byB1c2VyLXNwYWNlIGlmIHRoZSBzdGF0ZQogCQkgKiBpc24ndCBjaGFuZ2VkCiAJCSAqLwogCQlyZmtpbGxfc2V0X2h3X3N0YXRlKGtpbV9nZGF0YS0+cmZraWxsW1NUX0JUXSwgMSk7Ci0jZW5kaWYKIAkJLyogQ29uZmlndXJlIEJUIG5TaHV0ZG93biB0byBISUdIIHN0YXRlICovCiAJCWdwaW9fc2V0X3ZhbHVlKGtpbV9nZGF0YS0+Z3Bpb3NbU1RfQlRdLCBHUElPX0xPVyk7CiAJCW1kZWxheSg1KTsJLyogRklYTUU6IGEgcHJvcGVyIHRvZ2dsZSAqLwpAQCAtNDUwLDMwICs0NDksMjkgQEAKIAkJbWRlbGF5KDEwMCk7CiAJCS8qIHJlLWluaXRpYWxpemUgdGhlIGNvbXBsZXRpb24gKi8KIAkJSU5JVF9DT01QTEVUSU9OKGtpbV9nZGF0YS0+bGRpc2NfaW5zdGFsbGVkKTsKLSNpZm5kZWYgTEVHQUNZX1JGS0lMTF9TVVBQT1JUCisjaWYgMCAvKiBvbGRlciB3YXkgb2Ygc2lnbmFsbGluZyB1c2VyLXNwYWNlIFVJTSAqLwogCQkvKiBzZW5kIHNpZ25hbCB0byBVSU0gKi8KIAkJZXJyID0ga2lsbF9waWQoZmluZF9nZXRfcGlkKGtpbV9nZGF0YS0+dWltX3BpZCksIFNJR1VTUjIsIDApOwogCQlpZiAoZXJyICE9IDApIHsKIAkJCXByX2luZm8oIiBzZW5kaW5nIFNJR1VTUjIgdG8gdWltIGZhaWxlZCAlbGQiLCBlcnIpOwotCQkJZXJyID0gU1RfRVJSX0ZBSUxVUkU7CisJCQllcnIgPSAtMTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0jZWxzZQorI2VuZGlmCiAJCS8qIHVuYmxvY2sgYW5kIHNlbmQgZXZlbnQgdG8gVUlNIHZpYSAvZGV2L3Jma2lsbCAqLwogCQlyZmtpbGxfc2V0X2h3X3N0YXRlKGtpbV9nZGF0YS0+cmZraWxsW1NUX0JUXSwgMCk7Ci0jZW5kaWYKIAkJLyogd2FpdCBmb3IgbGRpc2MgdG8gYmUgaW5zdGFsbGVkICovCiAJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgma2ltX2dkYXRhLT5sZGlzY19pbnN0YWxsZWQsCiAJCQkJbXNlY3NfdG9famlmZmllcyhMRElTQ19USU1FKSk7CiAJCWlmICghZXJyKSB7CS8qIHRpbWVvdXQgKi8KIAkJCXByX2VycigibGluZSBkaXNjIGluc3RhbGxhdGlvbiB0aW1lZCBvdXQgIik7Ci0JCQllcnIgPSBTVF9FUlJfRkFJTFVSRTsKKwkJCWVyciA9IC0xOwogCQkJY29udGludWU7CiAJCX0gZWxzZSB7CiAJCQkvKiBsZGlzYyBpbnN0YWxsZWQgbm93ICovCiAJCQlwcl9pbmZvKCIgbGluZSBkaXNjaXBsaW5lIGluc3RhbGxlZCAiKTsKLQkJCWVyciA9IGRvd25sb2FkX2Zpcm13YXJlKCk7Ci0JCQlpZiAoZXJyICE9IFNUX1NVQ0NFU1MpIHsKKwkJCWVyciA9IGRvd25sb2FkX2Zpcm13YXJlKGtpbV9nZGF0YSk7CisJCQlpZiAoZXJyICE9IDApIHsKIAkJCQlwcl9lcnIoImRvd25sb2FkIGZpcm13YXJlIGZhaWxlZCIpOwogCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIHsJLyogb24gc3VjY2VzcyBkb24ndCByZXRyeSAqLwpAQCAtNDg0LDMxICs0ODIsMzMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBjYWxsZWQgZnJvbSBTVCBDb3JlLCBvbiB0aGUgbGFzdCB1bi1yZWdpc3RyYXRpb24KLSovCi1sb25nIHN0X2tpbV9zdG9wKHZvaWQpCisvKioKKyAqIHN0X2tpbV9zdG9wIC0gY2FsbGVkIGZyb20gU1QgQ29yZSwgb24gdGhlIGxhc3QgdW4tcmVnaXN0cmF0aW9uCisgKgl0b2dnbGUgbG93IHRoZSBjaGlwIGVuYWJsZSBncGlvCisgKi8KK2xvbmcgc3Rfa2ltX3N0b3Aodm9pZCAqa2ltX2RhdGEpCiB7Ci0JbG9uZyBlcnIgPSBTVF9TVUNDRVNTOworCWxvbmcgZXJyID0gMDsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhID0gKHN0cnVjdCBraW1fZGF0YV9zICopa2ltX2RhdGE7CiAKIAlJTklUX0NPTVBMRVRJT04oa2ltX2dkYXRhLT5sZGlzY19pbnN0YWxsZWQpOwotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKKyNpZiAwIC8qIG9sZGVyIHdheSBvZiBzaWduYWxsaW5nIHVzZXItc3BhY2UgVUlNICovCiAJLyogc2VuZCBzaWduYWwgdG8gVUlNICovCiAJZXJyID0ga2lsbF9waWQoZmluZF9nZXRfcGlkKGtpbV9nZGF0YS0+dWltX3BpZCksIFNJR1VTUjIsIDEpOwogCWlmIChlcnIgIT0gMCkgewogCQlwcl9lcnIoInNlbmRpbmcgU0lHVVNSMiB0byB1aW0gZmFpbGVkICVsZCIsIGVycik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KLSNlbHNlCisjZW5kaWYKIAkvKiBzZXQgQlQgcmZraWxsIHRvIGJlIGJsb2NrZWQgKi8KIAllcnIgPSByZmtpbGxfc2V0X2h3X3N0YXRlKGtpbV9nZGF0YS0+cmZraWxsW1NUX0JUXSwgMSk7Ci0jZW5kaWYKIAogCS8qIHdhaXQgZm9yIGxkaXNjIHRvIGJlIHVuLWluc3RhbGxlZCAqLwogCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgma2ltX2dkYXRhLT5sZGlzY19pbnN0YWxsZWQsCiAJCQltc2Vjc190b19qaWZmaWVzKExESVNDX1RJTUUpKTsKIAlpZiAoIWVycikgewkJLyogdGltZW91dCAqLwogCQlwcl9lcnIoIiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgbGRpc2MgdG8gYmUgdW4taW5zdGFsbGVkIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KIAogCS8qIEJ5IGRlZmF1bHQgY29uZmlndXJlIEJUIG5TaHV0ZG93biB0byBMT1cgc3RhdGUgKi8KQEAgLTUyMiwzNyArNTIyLDI0IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHN1YnN5c3RlbXMgKi8KKy8qIGNhbGxlZCB3aGVuIGRlYnVnZnMgZW50cnkgaXMgcmVhZCBmcm9tICovCiAKLSNpZm5kZWYgTEVHQUNZX1JGS0lMTF9TVVBQT1JUCi0vKiBjYWxsZWQgd2hlbiBzeXNmcyBlbnRyeSBpcyB3cml0dGVuIHRvICovCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9waWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQotCQkJICpkZXZhdHRyLCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbnQgc2hvd192ZXJzaW9uKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQogewotCXByX2luZm8oIiVzOiBwaWQgJXMgIiwgX19mdW5jX18sIGJ1Zik7Ci0Jc3NjYW5mKGJ1ZiwgIiVsZCIsICZraW1fZ2RhdGEtPnVpbV9waWQpOwotCS8qIHRvIGJlIG1hZGUgdXNlIGJ5IGtpbV9zdGFydCB0byBzaWduYWwgU0lHVVNSMgotCSAqLwotCXJldHVybiBzdHJsZW4oYnVmKTsKKwlzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhID0gKHN0cnVjdCBraW1fZGF0YV9zICopcy0+cHJpdmF0ZTsKKwlzZXFfcHJpbnRmKHMsICIlMDRYICVkLiVkLiVkXG4iLCBraW1fZ2RhdGEtPnZlcnNpb24uZnVsbCwKKwkJCWtpbV9nZGF0YS0+dmVyc2lvbi5jaGlwLCBraW1fZ2RhdGEtPnZlcnNpb24ubWFqX3ZlciwKKwkJCWtpbV9nZGF0YS0+dmVyc2lvbi5taW5fdmVyKTsKKwlyZXR1cm4gMDsKIH0KIAotLyogY2FsbGVkIHdoZW4gc3lzZnMgZW50cnkgaXMgcmVhZCBmcm9tICovCi1zdGF0aWMgc3NpemVfdCBzaG93X3BpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIGludCBzaG93X2xpc3Qoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp1bnVzZWQpCiB7Ci0Jc3ByaW50ZihidWYsICIlbGQiLCBraW1fZ2RhdGEtPnVpbV9waWQpOwotCXJldHVybiBzdHJsZW4oYnVmKTsKKwlzdHJ1Y3Qga2ltX2RhdGFfcyAqa2ltX2dkYXRhID0gKHN0cnVjdCBraW1fZGF0YV9zICopcy0+cHJpdmF0ZTsKKwlraW1fc3RfbGlzdF9wcm90b2NvbHMoa2ltX2dkYXRhLT5jb3JlX2RhdGEsIHMpOworCXJldHVybiAwOwogfQogCi0vKiBjYWxsZWQgd2hlbiBzeXNmcyBlbnRyeSBpcyByZWFkIGZyb20gKi8KLXN0YXRpYyBzc2l6ZV90IHNob3dfbGlzdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlCi0JCQkgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlraW1fc3RfbGlzdF9wcm90b2NvbHMoa2ltX2dkYXRhLT5jb3JlX2RhdGEsIGJ1Zik7Ci0JcmV0dXJuIHN0cmxlbihidWYpOwotfQotCi0jZWxzZSAvKiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQgKi8KLQogLyogZnVuY3Rpb24gY2FsbGVkIGZyb20gcmZraWxsIHN1YnN5c3RlbSwgd2hlbiBzb21lb25lIGZyb20KICAqIHVzZXIgc3BhY2Ugd291bGQgd3JpdGUgMC8xIG9uIHRoZSBzeXNmcyBlbnRyeQogICogL3N5cy9jbGFzcy9yZmtpbGwvcmZraWxsMCwxLDMvc3RhdGUKQEAgLTU2MCw3ICs1NDcsNyBAQAogc3RhdGljIGludCBraW1fdG9nZ2xlX3JhZGlvKHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKIHsKIAllbnVtIHByb3RvX3R5cGUgdHlwZSA9ICooKGVudW0gcHJvdG9fdHlwZSAqKWRhdGEpOwotCXByX2luZm8oIiAlczogJWQgIiwgX19mdW5jX18sIHR5cGUpOworCXByX2RlYnVnKCIgJXM6ICVkICIsIF9fZnVuY19fLCB0eXBlKTsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RfQlQ6CkBAIC01NzcsMzMgKzU2NCw3OSBAQAogCQlwcl9lcnIoIiB3cm9uZyBwcm90byB0eXBlICIpOwogCWJyZWFrOwogCX0KLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAotI2VuZGlmCS8qIExFR0FDWV9SRktJTExfU1VQUE9SVCAqLwotCisvKioKKyAqIHN0X2tpbV9yZWYgLSByZWZlcmVuY2UgdGhlIGNvcmUncyBkYXRhCisgKglUaGlzIHJlZmVyZW5jZXMgdGhlIHBlci1TVCBwbGF0Zm9ybSBkZXZpY2UgaW4gdGhlIGFyY2gveHgvCisgKglib2FyZC14eC5jIGZpbGUuCisgKglUaGlzIHdvdWxkIGVuYWJsZSBtdWx0aXBsZSBzdWNoIHBsYXRmb3JtIGRldmljZXMgdG8gZXhpc3QKKyAqCW9uIGEgZ2l2ZW4gcGxhdGZvcm0KKyAqLwogdm9pZCBzdF9raW1fcmVmKHN0cnVjdCBzdF9kYXRhX3MgKipjb3JlX2RhdGEpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3Qga2ltX2RhdGFfcwkqa2ltX2dkYXRhOworCS8qIGdldCBraW1fZ2RhdGEgcmVmZXJlbmNlIGZyb20gcGxhdGZvcm0gZGV2aWNlICovCisJcGRldiA9IHN0X2dldF9wbGF0X2RldmljZSgpOworCWtpbV9nZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAkqY29yZV9kYXRhID0ga2ltX2dkYXRhLT5jb3JlX2RhdGE7CiB9CiAKK3N0YXRpYyBpbnQga2ltX3ZlcnNpb25fb3BlbihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmLCBzaG93X3ZlcnNpb24sIGktPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQga2ltX2xpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmksIHN0cnVjdCBmaWxlICpmKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmLCBzaG93X2xpc3QsIGktPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZlcnNpb25fZGVidWdmc19mb3BzID0geworCS8qIHZlcnNpb24gaW5mbyAqLworCS5vcGVuID0ga2ltX3ZlcnNpb25fb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXN0X2RlYnVnZnNfZm9wcyA9IHsKKwkvKiBwcm90b2NvbHMgaW5mbyAqLworCS5vcGVuID0ga2ltX2xpc3Rfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZnVuY3Rpb25zIGNhbGxlZCBmcm9tIHBsYXRmb3JtIGRldmljZSBkcml2ZXIgc3Vic3lzdGVtCiAgKiBuZWVkIHRvIGhhdmUgYSByZWxldmFudCBwbGF0Zm9ybSBkZXZpY2UgZW50cnkgaW4gdGhlIHBsYXRmb3JtJ3MKICAqIGJvYXJkLSouYyBmaWxlCiAgKi8KIAorc3RydWN0IGRlbnRyeSAqa2ltX2RlYnVnZnNfZGlyOwogc3RhdGljIGludCBraW1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlsb25nIHN0YXR1czsKIAlsb25nIHByb3RvOwogCWxvbmcgKmdwaW9zID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGtpbV9kYXRhX3MJKmtpbV9nZGF0YTsKKworCWtpbV9nZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBraW1fZGF0YV9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFraW1fZ2RhdGEpIHsKKwkJcHJfZXJyKCJubyBtZW0gdG8gYWxsb2NhdGUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBraW1fZ2RhdGEpOwogCiAJc3RhdHVzID0gc3RfY29yZV9pbml0KCZraW1fZ2RhdGEtPmNvcmVfZGF0YSk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCXByX2VycigiIFNUIGNvcmUgaW5pdCBmYWlsZWQiKTsKLQkJcmV0dXJuIFNUX0VSUl9GQUlMVVJFOworCQlyZXR1cm4gLTE7CiAJfQorCS8qIHJlZmVyIHRvIGl0c2VsZiAqLworCWtpbV9nZGF0YS0+Y29yZV9kYXRhLT5raW1fZGF0YSA9IGtpbV9nZGF0YTsKIAogCWZvciAocHJvdG8gPSAwOyBwcm90byA8IFNUX01BWDsgcHJvdG8rKykgewogCQlraW1fZ2RhdGEtPmdwaW9zW3Byb3RvXSA9IGdwaW9zW3Byb3RvXTsKQEAgLTYzOSwzMCArNjcyLDEyIEBACiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQotI2lmbmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKLQkvKiBwZGV2IHRvIGNvbnRhaW4gQlQsIEZNIGFuZCBHUFMgZW5hYmxlL04tU2h1dGRvd24gR1BJT3MKLQkgKiBleGVjdXRlIHJlcXVlc3RfZ3Bpbywgc2V0IG91dHB1dCBkaXJlY3Rpb24KLQkgKi8KLQlraW1fZ2RhdGEtPmtpbV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgidWltIiwgTlVMTCk7Ci0JLyogY3JlYXRlIHRoZSBzeXNmcyBlbnRyeSBmb3IgVUlNIHRvIHB1dCBpbiBwaWQgKi8KLQlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKGtpbV9nZGF0YS0+a2ltX2tvYmosICZ1aW1fYXR0cl9ncnApKSB7Ci0JCXByX2VycigiIHN5c2ZzIGVudHJ5IGNyZWF0aW9uIGZhaWxlZCIpOwotCQlrb2JqZWN0X3B1dChraW1fZ2RhdGEtPmtpbV9rb2JqKTsKLQkJLyogZnJlZSByZXF1ZXN0ZWQgR1BJT3MgYW5kIGZhaWwgcHJvYmUgKi8KLQkJZm9yIChwcm90byA9IFNUX0JUOyBwcm90byA8IFNUX01BWDsgcHJvdG8rKykgewotCQkJaWYgKGdwaW9zW3Byb3RvXSAhPSAtMSkKLQkJCQlncGlvX2ZyZWUoZ3Bpb3NbcHJvdG9dKTsKLQkJfQotCQlyZXR1cm4gLTE7CS8qIGZhaWwgaW5zbW9kICovCi0JfQotCXByX2luZm8oIiBzeXNmcyBlbnRyeSBjcmVhdGVkICIpOwotI2VuZGlmCiAJLyogZ2V0IHJlZmVyZW5jZSBvZiBwZGV2IGZvciByZXF1ZXN0X2Zpcm13YXJlCiAJICovCiAJa2ltX2dkYXRhLT5raW1fcGRldiA9IHBkZXY7CiAJaW5pdF9jb21wbGV0aW9uKCZraW1fZ2RhdGEtPmtpbV9yY3ZkKTsKIAlpbml0X2NvbXBsZXRpb24oJmtpbV9nZGF0YS0+bGRpc2NfaW5zdGFsbGVkKTsKLSNpZmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKKwogCWZvciAocHJvdG8gPSAwOyAocHJvdG8gPCBTVF9NQVgpICYmIChncGlvc1twcm90b10gIT0gLTEpOyBwcm90bysrKSB7CiAJCS8qIFRPRE86IHNob3VsZCBhbGwgdHlwZXMgYmUgcmZraWxsX3R5cGVfYnQgPyAqLwogCQlraW1fZ2RhdGEtPnJmX3Byb3Rvc1twcm90b10gPSBwcm90bzsKQEAgLTY4NSw4ICs3MDAsMjAgQEAKIAkJfQogCQlwcl9pbmZvKCJyZmtpbGwgZW50cnkgY3JlYXRlZCBmb3IgJWxkIiwgZ3Bpb3NbcHJvdG9dKTsKIAl9Ci0jZW5kaWYKLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKworCWtpbV9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidGktc3QiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGtpbV9kZWJ1Z2ZzX2RpcikpIHsKKwkJcHJfZXJyKCIgZGVidWdmcyBlbnRyaWVzIGNyZWF0aW9uIGZhaWxlZCAiKTsKKwkJa2ltX2RlYnVnZnNfZGlyID0gTlVMTDsKKwkJcmV0dXJuIC0xOworCX0KKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInZlcnNpb24iLCBTX0lSVUdPLCBraW1fZGVidWdmc19kaXIsCisJCQkJa2ltX2dkYXRhLCAmdmVyc2lvbl9kZWJ1Z2ZzX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInByb3RvY29scyIsIFNfSVJVR08sIGtpbV9kZWJ1Z2ZzX2RpciwKKwkJCQlraW1fZ2RhdGEsICZsaXN0X2RlYnVnZnNfZm9wcyk7CisJcHJfaW5mbygiIGRlYnVnZnMgZW50cmllcyBjcmVhdGVkICIpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGtpbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTY5NSwyNyArNzIyLDI3IEBACiAJICovCiAJbG9uZyAqZ3Bpb3MgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlsb25nIHByb3RvOworCXN0cnVjdCBraW1fZGF0YV9zCSpraW1fZ2RhdGE7CisKKwlraW1fZ2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKIAlmb3IgKHByb3RvID0gMDsgKHByb3RvIDwgU1RfTUFYKSAmJiAoZ3Bpb3NbcHJvdG9dICE9IC0xKTsgcHJvdG8rKykgewogCQkvKiBDbGFpbSB0aGUgQmx1ZXRvb3RoL0ZNL0dQSU8KIAkJICogblNodXRkb3duIGdwaW8gZnJvbSB0aGUgc3lzdGVtCiAJCSAqLwogCQlncGlvX2ZyZWUoZ3Bpb3NbcHJvdG9dKTsKLSNpZmRlZiBMRUdBQ1lfUkZLSUxMX1NVUFBPUlQKIAkJcmZraWxsX3VucmVnaXN0ZXIoa2ltX2dkYXRhLT5yZmtpbGxbcHJvdG9dKTsKIAkJcmZraWxsX2Rlc3Ryb3koa2ltX2dkYXRhLT5yZmtpbGxbcHJvdG9dKTsKIAkJa2ltX2dkYXRhLT5yZmtpbGxbcHJvdG9dID0gTlVMTDsKLSNlbmRpZgogCX0KIAlwcl9pbmZvKCJraW06IEdQSU8gRnJlZWQiKTsKLSNpZm5kZWYgTEVHQUNZX1JGS0lMTF9TVVBQT1JUCi0JLyogZGVsZXRlIHRoZSBzeXNmcyBlbnRyaWVzICovCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKGtpbV9nZGF0YS0+a2ltX2tvYmosICZ1aW1fYXR0cl9ncnApOwotCWtvYmplY3RfcHV0KGtpbV9nZGF0YS0+a2ltX2tvYmopOwotI2VuZGlmCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGtpbV9kZWJ1Z2ZzX2Rpcik7CiAJa2ltX2dkYXRhLT5raW1fcGRldiA9IE5VTEw7CiAJc3RfY29yZV9leGl0KGtpbV9nZGF0YS0+Y29yZV9kYXRhKTsKLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKworCWtmcmVlKGtpbV9nZGF0YSk7CisJa2ltX2dkYXRhID0gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03MjMsMjcgKzc1MCwxOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzdF9raW1faW5pdCh2b2lkKQogewotCWxvbmcgcmV0ID0gU1RfU1VDQ0VTUzsKLQlraW1fZ2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2ltX2RhdGFfcyksIEdGUF9BVE9NSUMpOwotCWlmICgha2ltX2dkYXRhKSB7Ci0JCXByX2Vycigibm8gbWVtIHRvIGFsbG9jYXRlIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQorCWxvbmcgcmV0ID0gMDsKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmtpbV9wbGF0Zm9ybV9kcml2ZXIpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcl9lcnIoInBsYXRmb3JtIGRydiByZWdpc3RyYXRpb24gZmFpbGVkIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHN0X2tpbV9kZWluaXQodm9pZCkKIHsKIAkvKiB0aGUgZm9sbG93aW5nIHJldHVybnMgdm9pZCAqLwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZraW1fcGxhdGZvcm1fZHJpdmVyKTsKLQlrZnJlZShraW1fZ2RhdGEpOwotCWtpbV9nZGF0YSA9IE5VTEw7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2tpbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N0X2tpbS5oCmluZGV4IGZmMzI3MGUuLjdkZTI1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9raW0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3Rfa2ltLmgKQEAgLTQzLDUwICs0Myw3MiBAQAogICogc2luY2UgdGhlIHNlbGYtdGVzdCBmb3IgY2hpcCB0YWtlcyBhIHdoaWxlCiAgKi8KICNkZWZpbmUgUE9SX1JFVFJZX0NPVU5UIDUKLS8qCi0gKiBsZWdhY3kgcmZraWxsIHN1cHBvcnQgd2hlcmUtaW4gMyByZmtpbGwKLSAqIGRldmljZXMgYXJlIGNyZWF0ZWQgZm9yIHRoZSAzIGdwaW9zCi0gKiB0aGF0IFNUIGhhcyByZXF1ZXN0ZWQKKworLyoqCisgKiBzdHJ1Y3QgY2hpcF92ZXJzaW9uIC0gc2F2ZSB0aGUgY2hpcCB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgTEVHQUNZX1JGS0lMTF9TVVBQT1JUCi0vKgotICogaGVhZGVyIGZpbGUgZm9yIFNUIHByb3ZpZGVkIGJ5IEtJTQorc3RydWN0IGNoaXBfdmVyc2lvbiB7CisJdW5zaWduZWQgc2hvcnQgZnVsbDsKKwl1bnNpZ25lZCBzaG9ydCBjaGlwOworCXVuc2lnbmVkIHNob3J0IG1pbl92ZXI7CisJdW5zaWduZWQgc2hvcnQgbWFqX3ZlcjsKK307CisKKy8qKgorICogc3RydWN0IGtpbV9kYXRhX3MgLSB0aGUgS0lNIGludGVybmFsIGRhdGEsIGVtYmVkZGVkIGFzIHRoZQorICoJcGxhdGZvcm0ncyBkcnYgZGF0YS4gT25lIGZvciBlYWNoIFNUIGRldmljZSBpbiB0aGUgc3lzdGVtLgorICogQHVpbV9waWQ6IEtJTSBuZWVkcyB0byBjb21tdW5pY2F0ZSB3aXRoIFVJTSB0byByZXF1ZXN0IHRvIGluc3RhbGwKKyAqCXRoZSBsZGlzYyBieSBvcGVuaW5nIFVBUlQgd2hlbiBwcm90b2NvbCBkcml2ZXJzIHJlZ2lzdGVyLgorICogQGtpbV9wZGV2OiB0aGUgcGxhdGZvcm0gZGV2aWNlIGFkZGVkIGluIG9uZSBvZiB0aGUgYm9hcmQtWFguYyBmaWxlCisgKglpbiBhcmNoL1hYLyBkaXJlY3RvcnksIDEgZm9yIGVhY2ggU1QgZGV2aWNlLgorICogQGtpbV9yY3ZkOiBjb21wbGV0aW9uIGhhbmRsZXIgdG8gbm90aWZ5IHdoZW4gZGF0YSB3YXMgcmVjZWl2ZWQsCisgKgltYWlubHkgdXNlZCBkdXJpbmcgZncgZG93bmxvYWQsIHdoaWNoIGludm9sdmVzIG11bHRpcGxlIHNlbmQvd2FpdAorICoJZm9yIGVhY2ggb2YgdGhlIEhDSS1WUyBjb21tYW5kcy4KKyAqIEBsZGlzY19pbnN0YWxsZWQ6IGNvbXBsZXRpb24gaGFuZGxlciB0byBub3RpZnkgdGhhdCB0aGUgVUlNIGFjY2VwdGVkCisgKgl0aGUgcmVxdWVzdCB0byBpbnN0YWxsIGxkaXNjLCBub3RpZnkgZnJvbSB0dHlfb3BlbiB3aGljaCBzdWdnZXN0cworICoJdGhlIGxkaXNjIHdhcyBwcm9wZXJseSBpbnN0YWxsZWQuCisgKiBAcmVzcF9idWZmZXI6IGRhdGEgYnVmZmVyIGZvciB0aGUgLmJ0cyBmdyBmaWxlIG5hbWUuCisgKiBAZndfZW50cnk6IGZpcm13YXJlIGNsYXNzIHN0cnVjdCB0byByZXF1ZXN0L3JlbGVhc2UgdGhlIGZ3LgorICogQGdwaW9zOiB0aGUgbGlzdCBvZiBjb3JlL2NoaXAgZW5hYmxlIGdwaW9zIGZvciBCVCwgRk0gYW5kIEdQUyBjb3Jlcy4KKyAqIEByeF9zdGF0ZTogdGhlIHJ4IHN0YXRlIGZvciBraW0ncyByZWNlaXZlIGZ1bmMgZHVyaW5nIGZ3IGRvd25sb2FkLgorICogQHJ4X2NvdW50OiB0aGUgcnggY291bnQgZm9yIHRoZSBraW0ncyByZWNlaXZlIGZ1bmMgZHVyaW5nIGZ3IGRvd25sb2FkLgorICogQHJ4X3NrYjogYWxsIG9mIGZ3IGRhdGEgbWlnaHQgbm90IGNvbWUgYXQgb25jZSwgYW5kIGhlbmNlIGRhdGEgc3RvcmFnZSBmb3IKKyAqCXdob2xlIG9mIHRoZSBmdyByZXNwb25zZSwgb25seSBIQ0lfRVZFTlRzIGFuZCBoZW5jZSBkaWZmIGZyb20gU1QncworICoJcmVzcG9uc2UuCisgKiBAcmZraWxsOiByZmtpbGwgZGF0YSBmb3IgZWFjaCBvZiB0aGUgY29yZXMgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIHJma2lsbC4KKyAqIEByZl9wcm90b3M6IHByb3RvIHR5cGVzIG9mIHRoZSBkYXRhIHJlZ2lzdGVyZWQgd2l0aCByZmtpbGwgc3ViLXN5c3RlbS4KKyAqIEBjb3JlX2RhdGE6IFNUIGNvcmUncyBkYXRhLCB3aGljaCBtYWlubHkgaXMgdGhlIHR0eSdzIGRpc2NfZGF0YQorICogQHZlcnNpb246IGNoaXAgdmVyc2lvbiBhdmFpbGFibGUgdmlhIGEgc3lzZnMgZW50cnkuCisgKgogICovCiBzdHJ1Y3Qga2ltX2RhdGFfcyB7CiAJbG9uZyB1aW1fcGlkOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmtpbV9wZGV2OwogCXN0cnVjdCBjb21wbGV0aW9uIGtpbV9yY3ZkLCBsZGlzY19pbnN0YWxsZWQ7Ci0JLyogTUFYIGxlbiBvZiB0aGUgLmJ0cyBmaXJtd2FyZSBzY3JpcHQgbmFtZSAqLwogCWNoYXIgcmVzcF9idWZmZXJbMzBdOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CiAJbG9uZyBncGlvc1tTVF9NQVhdOwotCXN0cnVjdCBrb2JqZWN0ICpraW1fa29iajsKLS8qIHVzZWQgYnkga2ltX2ludF9yZWN2IHRvIHZhbGlkYXRlIGZ3IHJlc3BvbnNlICovCiAJdW5zaWduZWQgbG9uZyByeF9zdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHJ4X2NvdW50OwogCXN0cnVjdCBza19idWZmICpyeF9za2I7Ci0jaWZkZWYgTEVHQUNZX1JGS0lMTF9TVVBQT1JUCiAJc3RydWN0IHJma2lsbCAqcmZraWxsW1NUX01BWF07CiAJZW51bSBwcm90b190eXBlIHJmX3Byb3Rvc1tTVF9NQVhdOwotI2VuZGlmCiAJc3RydWN0IHN0X2RhdGFfcyAqY29yZV9kYXRhOworCXN0cnVjdCBjaGlwX3ZlcnNpb24gdmVyc2lvbjsKIH07CiAKLWxvbmcgc3Rfa2ltX3N0YXJ0KHZvaWQpOwotbG9uZyBzdF9raW1fc3RvcCh2b2lkKTsKLS8qCi0gKiBjYWxsZWQgZnJvbSBzdF90dHlfcmVjZWl2ZSB0byBhdXRoZW50aWNhdGUgZndfZG93bmxvYWQKKy8qKgorICogZnVuY3Rpb25zIGNhbGxlZCB3aGVuIDEgb2YgdGhlIHByb3RvY29sIGRyaXZlcnMgZ2V0cworICogcmVnaXN0ZXJlZCwgdGhlc2UgbmVlZCB0byBjb21tdW5pY2F0ZSB3aXRoIFVJTSB0byByZXF1ZXN0CisgKiBsZGlzYyBpbnN0YWxsZWQsIHJlYWQgY2hpcF92ZXJzaW9uLCBkb3dubG9hZCByZWxldmFudCBmdwogICovCitsb25nIHN0X2tpbV9zdGFydCh2b2lkICopOworbG9uZyBzdF9raW1fc3RvcCh2b2lkICopOworCiB2b2lkIHN0X2tpbV9yZWN2KHZvaWQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBsb25nIGNvdW50KTsKLQogdm9pZCBzdF9raW1fY2hpcF90b2dnbGUoZW51bSBwcm90b190eXBlLCBlbnVtIGtpbV9ncGlvX3N0YXRlKTsKLQotdm9pZCBzdF9raW1fY29tcGxldGUodm9pZCk7Ci0KLS8qIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIFNUIEtJTSB0byBTVCBDb3JlLCB0bwotICogbGlzdCBvdXQgdGhlIHByb3RvY29scyByZWdpc3RlcmVkCi0gKi8KLXZvaWQga2ltX3N0X2xpc3RfcHJvdG9jb2xzKHN0cnVjdCBzdF9kYXRhX3MgKiwgY2hhciAqKTsKK3ZvaWQgc3Rfa2ltX2NvbXBsZXRlKHZvaWQgKik7Cit2b2lkIGtpbV9zdF9saXN0X3Byb3RvY29scyhzdHJ1Y3Qgc3RfZGF0YV9zICosIHZvaWQgKik7CiAKIC8qCiAgKiBCVFMgaGVhZGVycwpAQCAtOTgsOSArMTIwLDEzIEBACiAjZGVmaW5lIEFDVElPTl9SVU5fU0NSSVBUICAgICAgIDUKICNkZWZpbmUgQUNUSU9OX1JFTUFSS1MgICAgICAgICAgNgogCi0vKgotICogICogQlJGIEZpcm13YXJlIGhlYWRlcgotICogICAqLworLyoqCisgKiBzdHJ1Y3QgYnRzX2hlYWRlciAtIHRoZSBmdyBmaWxlIGlzIE5PVCBiaW5hcnkgd2hpY2ggY2FuCisgKgliZSBzZW50IG9udG8gVFRZIGFzIGlzLiBUaGUgLmJ0cyBpcyBtb3JlIGEgc2NyaXB0CisgKglmaWxlIHdoaWNoIGhhcyBkaWZmZXJlbnQgdHlwZXMgb2YgYWN0aW9ucy4KKyAqCUVhY2ggc3VjaCBhY3Rpb24gbmVlZHMgdG8gYmUgcGFyc2VkIGJ5IHRoZSBLSU0gYW5kCisgKglyZWxldmFudCBwcm9jZWR1cmUgdG8gYmUgY2FsbGVkLgorICovCiBzdHJ1Y3QgYnRzX2hlYWRlciB7CiAJdWludDMyX3QgbWFnaWM7CiAJdWludDMyX3QgdmVyc2lvbjsKQEAgLTEwOCw5ICsxMzQsMTAgQEAKIAl1aW50OF90IGFjdGlvbnNbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqICAqIEJSRiBBY3Rpb25zIHN0cnVjdHVyZQotICogICAqLworLyoqCisgKiBzdHJ1Y3QgYnRzX2FjdGlvbiAtIEVhY2ggLmJ0cyBhY3Rpb24gaGFzIGl0cyBvd24gdHlwZSBvZgorICoJZGF0YS4KKyAqLwogc3RydWN0IGJ0c19hY3Rpb24gewogCXVpbnQxNl90IHR5cGU7CiAJdWludDE2X3Qgc2l6ZTsKQEAgLTEzNiw4ICsxNjMsMTEgQEAKIAl1aW50MzJfdCBmbG93X2NvbnRyb2w7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyogZm9yIGlkZW50aWZ5aW5nIHRoZSBjaGFuZ2Ugc3BlZWQgSENJIFZTCi0gKiBjb21tYW5kCisvKioKKyAqIHN0cnVjdCBoY2lfY29tbWFuZCAtIHRoZSBIQ0ktVlMgZm9yIGludHJlcHJldGluZworICoJdGhlIGNoYW5nZSBiYXVkIHJhdGUgb2YgaG9zdC1zaWRlIFVBUlQsIHdoaWNoCisgKgluZWVkcyB0byBiZSBpZ25vcmVkLCBzaW5jZSBVSU0gd291bGQgZG8gdGhhdAorICoJd2hlbiBpdCByZWNlaXZlcyByZXF1ZXN0IGZyb20gS0lNIGZvciBsZGlzYyBpbnN0YWxsYXRpb24uCiAgKi8KIHN0cnVjdCBoY2lfY29tbWFuZCB7CiAJdWludDhfdCBwcmVmaXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfbGwuYyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5jCmluZGV4IDA2ODVhMTAuLjdhMWZiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIGxsX2RldmljZV93YW50X3RvX3NsZWVwKHN0cnVjdCBzdF9kYXRhX3MgKnN0X2RhdGEpCiB7Ci0JcHJfaW5mbygiJXMiLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzIiwgX19mdW5jX18pOwogCS8qIHNhbml0eSBjaGVjayAqLwogCWlmIChzdF9kYXRhLT5sbF9zdGF0ZSAhPSBTVF9MTF9BV0FLRSkKIAkJcHJfZXJyKCJFUlIgaGNpbGw6IFNUX0xMX0dPX1RPX1NMRUVQX0lORCIKQEAgLTEwMSw3ICsxMDEsNyBAQAogLyogY2FsbGVkIHdoZW4gU1QgQ29yZSB3YW50cyB0aGUgc3RhdGUgKi8KIHVuc2lnbmVkIGxvbmcgc3RfbGxfZ2V0c3RhdGUoc3RydWN0IHN0X2RhdGFfcyAqbGwpCiB7Ci0JcHJfaW5mbygiIHJldHVybmluZyBzdGF0ZSAlbGQiLCBsbC0+bGxfc3RhdGUpOworCXByX2RlYnVnKCIgcmV0dXJuaW5nIHN0YXRlICVsZCIsIGxsLT5sbF9zdGF0ZSk7CiAJcmV0dXJuIGxsLT5sbF9zdGF0ZTsKIH0KIApAQCAtMTI3LDkgKzEyNyw5IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiIHVua25vd24gaW5wdXQvc3RhdGUgIik7Ci0JCXJldHVybiBTVF9FUlJfRkFJTFVSRTsKKwkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gU1RfU1VDQ0VTUzsKKwlyZXR1cm4gMDsKIH0KIAogLyogQ2FsbGVkIGZyb20gU1QgQ09SRSB0byBpbml0aWFsaXplIFNUIExMICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3RfbGwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5oCmluZGV4IDc3ZGZiZjAuLmU0ZGZhY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zdF9sbC5oCkBAIC00MSw2ICs0MSw3IEBACiAjZGVmaW5lIFNUX0xMX0FXQUtFX1RPX0FTTEVFUCAgICAgIDMKICNkZWZpbmUgU1RfTExfSU5WQUxJRAkJICAgNAogCisvKiBkaWZmZXJlbnQgUE0gbm90aWZpY2F0aW9ucyBjb21pbmcgZnJvbSBjaGlwICovCiAjZGVmaW5lIExMX1NMRUVQX0lORAkweDMwCiAjZGVmaW5lIExMX1NMRUVQX0FDSwkweDMxCiAjZGVmaW5lIExMX1dBS0VfVVBfSU5ECTB4MzIKQEAgLTUwLDEzICs1MSwxOSBAQAogbG9uZyBzdF9sbF9pbml0KHN0cnVjdCBzdF9kYXRhX3MgKik7CiBsb25nIHN0X2xsX2RlaW5pdChzdHJ1Y3Qgc3RfZGF0YV9zICopOwogCi0vKiBlbmFibGUvZGlzYWJsZSBTVCBMTCBhbG9uZyB3aXRoIEtJTSBzdGFydC9zdG9wCisvKioKKyAqIGVuYWJsZS9kaXNhYmxlIFNUIExMIGFsb25nIHdpdGggS0lNIHN0YXJ0L3N0b3AKICAqIGNhbGxlZCBieSBTVCBDb3JlCiAgKi8KIHZvaWQgc3RfbGxfZW5hYmxlKHN0cnVjdCBzdF9kYXRhX3MgKik7CiB2b2lkIHN0X2xsX2Rpc2FibGUoc3RydWN0IHN0X2RhdGFfcyAqKTsKIAorLyoqCisgKiB2YXJpb3VzIGZ1bmNzIHVzZWQgYnkgU1QgY29yZSB0byBzZXQvZ2V0IHRoZSB2YXJpb3VzIFBNIHN0YXRlcworICogb2YgdGhlIGNoaXAuCisgKi8KIHVuc2lnbmVkIGxvbmcgc3RfbGxfZ2V0c3RhdGUoc3RydWN0IHN0X2RhdGFfcyAqKTsKIHVuc2lnbmVkIGxvbmcgc3RfbGxfc2xlZXBfc3RhdGUoc3RydWN0IHN0X2RhdGFfcyAqLCB1bnNpZ25lZCBjaGFyKTsKIHZvaWQgc3RfbGxfd2FrZXVwKHN0cnVjdCBzdF9kYXRhX3MgKik7CisKICNlbmRpZiAvKiBTVF9MTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3lzZnMtdWltIGIvZHJpdmVycy9zdGFnaW5nL3RpLXN0L3N5c2ZzLXVpbQppbmRleCAxMDMxMWFmLi42MjZiZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGktc3Qvc3lzZnMtdWltCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aS1zdC9zeXNmcy11aW0KQEAgLTE0LDMgKzE0LDE1IEBACiAJCXVuaW5zdGFsbGF0aW9uIHdvdWxkIGJlIHBwb2xsaW5nIG9uIHRoaXMgZGV2aWNlIGFuZCBsaXN0ZW5pbmcKIAkJb24gZXZlbnRzIHdoaWNoIHdvdWxkIHN1Z2dlc3QgZWl0aGVyIHRvIGluc3RhbGwgb3IgdW4taW5zdGFsbAogCQlsaW5lIGRpc2NpcGxpbmUKKworV2hhdDogICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RpLXN0L3ZlcnNpb24KK0NvbnRhY3Q6ICAgICAgICBQYXZhbiBTYXZveSA8cGF2YW5fc2F2b3lAdGkuY29tPgorRGVzY3JpcHRpb246CisJCVdpTGluayBjaGlwJ3MgUk9NIHZlcnNpb24gZXhwb3NlZCB0byB1c2VyLXNwYWNlIGZvciBzb21lCisJCXByb3ByaWV0YXJ5IHByb3RvY29sIHN0YWNrcyB0byBtYWtlIHVzZSBvZi4KKworV2hhdDogICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL3RpLXN0L3Byb3RvY29scworQ29udGFjdDogICAgICAgIFBhdmFuIFNhdm95IDxwYXZhbl9zYXZveUB0aS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIHJlYXNvbiBmb3IgY2hpcCBiZWluZyBPTiwgdGhlIGxpc3Qgb2YgcHJvdG9jb2xzIHJlZ2lzdGVyZWQuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL0NPTlRSSUJVVE9SUyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL0NPTlRSSUJVVE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmY1Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vQ09OVFJJQlVUT1JTCkBAIC0wLDAgKzEsNDUgQEAKK1RJIERTUC9CcmlkZ2UgRHJpdmVyIC0gQ29udHJpYnV0b3JzIEZpbGUKKworVGhlIERTUC9CcmlkZ2UgcHJvamVjdCB3aXNoIHRvIHRoYW5rIGFsbCBvZiBpdHMgY29udHJpYnV0b3JzLCBjdXJyZW50IGJyaWRnZQorZHJpdmVyIGlzIHRoZSByZXN1bHQgb2YgdGhlIHdvcmsgb2YgYWxsIG9mIHRoZW0uIElmIGFueSBuYW1lIGlzIGFjY2lkZW50YWxseQorb21pdHRlZCwgbGV0IHVzIGtub3cgYnkgc2VuZGluZyBhIG1haWwgdG8gb21hci5yYW1pcmV6QHRpLmNvbSBvcgoreDA5NTg0MEB0aS5jb20uCisKK1BsZWFzZSBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIuCisKKwlTdW1hbiBBbm5hCisJU3JpcGFsIEJhZ2FkaWEKKwlGZWxpcGUgQmFsYmkKKwlPaGFkIEJlbi1Db2hlbgorCVBoaWwgQ2FybW9keQorCURlZXBhayBDaGl0cmlraQorCUZlbGlwZSBDb250cmVyYXMKKwlIaXJvc2hpIERveXUKKwlTZXRoIEZvcnNoZWUKKwlJdmFuIEdvbWV6IENhc3RlbGxhbm9zCisJTWFyayBHcm9zZW4KKwlSYW1lc2ggR3VwdGEgRworCUZlcm5hbmRvIEd1em1hbiBMdWdvCisJQXhlbCBIYXNsYW0KKwlKYW5ldCBIZWFkCisJU2hpdmFuYW5kYSBIZWJiYXIKKwlIYXJpIEthbmlnZXJpCisJVG9ueSBMaW5kZ3JlbgorCUFudG9uaW8gTHVuYQorCUhhcmkgTmFnYWxsYQorCU5pc2hhbnRoIE1lbm9uCisJQW1leWEgUGFsYW5kZQorCVZpamF5IFBhc2FtCisJR2lsYmVydCBQaXRuZXkKKwlPbWFyIFJhbWlyZXogTHVuYQorCUVybmVzdG8gUmFtb3MKKwlDaHJpcyBSaW5nCisJTGFycnkgU2NoaWVmZXIKKwlSZWJlY2NhIFNjaHVsdHogWmF2aW4KKwlCaGF2aW4gU2hhaAorCUFuZHkgU2hldmNoZW5rbworCUplZmYgVGF5bG9yCisJUm9tYW4gVGVyZXNob25rb3YKKwlBcm1hbmRvIFVyaWJlIGRlIExlb24KKwlOaXNjaGFsIFZhcmlkZQorCVdlbmJpYW8gV2FuZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL0RvY3VtZW50YXRpb24vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmQzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9SRUFETUUKQEAgLTAsMCArMSw3MCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgTGludXggRFNQL0JJT1MgQnJpZGdlIHJlbGVhc2UKKworRFNQL0JJT1MgQnJpZGdlIG92ZXJ2aWV3Cis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRFNQL0JJT1MgQnJpZGdlIGlzIGRlc2lnbmVkIGZvciBwbGF0Zm9ybXMgdGhhdCBjb250YWluIGEgR1BQIGFuZCBvbmUgb3IgbW9yZQorYXR0YWNoZWQgRFNQcy4gIFRoZSBHUFAgaXMgY29uc2lkZXJlZCB0aGUgbWFzdGVyIG9yICJob3N0IiBwcm9jZXNzb3IsIGFuZCB0aGUKK2F0dGFjaGVkIERTUHMgYXJlIHByb2Nlc3NpbmcgcmVzb3VyY2VzIHRoYXQgY2FuIGJlIHV0aWxpemVkIGJ5IGFwcGxpY2F0aW9ucworYW5kIGRyaXZlcnMgcnVubmluZyBvbiB0aGUgR1BQLgorCitUaGUgYWJzdHJhY3Rpb24gdGhhdCBEU1AvQklPUyBCcmlkZ2Ugc3VwcGxpZXMsIGlzIGEgZGlyZWN0IGxpbmsgYmV0d2VlbiBhIEdQUAorcHJvZ3JhbSBhbmQgYSBEU1AgdGFzay4gIFRoaXMgY29tbXVuaWNhdGlvbiBsaW5rIGlzIHBhcnRpdGlvbmVkIGludG8gdHdvCit0eXBlcyBvZiBzdWItbGlua3M6ICBtZXNzYWdpbmcgKHNob3J0LCBmaXhlZC1sZW5ndGggcGFja2V0cykgYW5kIGRhdGEKK3N0cmVhbWluZyAobXVsdGlwbGUsIGxhcmdlIGJ1ZmZlcnMpLiAgRWFjaCBzdWItbGluayBvcGVyYXRlcyBpbmRlcGVuZGVudGx5LAorYW5kIGZlYXR1cmVzIGluLW9yZGVyIGRlbGl2ZXJ5IG9mIGRhdGEsIG1lYW5pbmcgdGhhdCBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkCitpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHN1Ym1pdHRlZCB0byB0aGUgbWVzc2FnZSBsaW5rLCBhbmQgc3RyZWFtIGJ1ZmZlcnMgYXJlCitkZWxpdmVyZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBzdWJtaXR0ZWQgdG8gdGhlIHN0cmVhbSBsaW5rLgorCitJbiBhZGRpdGlvbiwgYSBHUFAgY2xpZW50IGNhbiBzcGVjaWZ5IHdoYXQgaW5wdXRzIGFuZCBvdXRwdXRzIGEgRFNQIHRhc2sKK3VzZXMuIERTUCB0YXNrcyB0eXBpY2FsbHkgdXNlIG1lc3NhZ2Ugb2JqZWN0cyBmb3IgcGFzc2luZyBjb250cm9sIGFuZCBzdGF0dXMKK2luZm9ybWF0aW9uIGFuZCBzdHJlYW0gb2JqZWN0cyBmb3IgZWZmaWNpZW50IHN0cmVhbWluZyBvZiByZWFsLXRpbWUgZGF0YS4KKworR1BQIFNvZnR3YXJlIEFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIEdQUCBhcHBsaWNhdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCBpdHMgYXNzb2NpYXRlZCBEU1AgdGFzayBydW5uaW5nIG9uIHRoZQorRFNQIHN1YnN5c3RlbSB1c2luZyB0aGUgRFNQL0JJT1MgQnJpZGdlIEFQSS4gRm9yIGV4YW1wbGUsIGEgR1BQIGF1ZGlvCithcHBsaWNhdGlvbiBjYW4gdXNlIHRoZSBBUEkgdG8gcGFzcyBtZXNzYWdlcyB0byBhIERTUCB0YXNrIHRoYXQgaXMgbWFuYWdpbmcKK2RhdGEgZmxvd2luZyBmcm9tIGFuYWxvZy10by1kaWdpdGFsIGNvbnZlcnRlcnMgKEFEQ3MpIHRvIGRpZ2l0YWwtdG8tYW5hbG9nCitjb252ZXJ0ZXJzIChEQUNzKS4KKworRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIEdQUCBPUywgdGhlIERTUCBpcyB0cmVhdGVkIGFzIGp1c3QgYW5vdGhlcgorcGVyaXBoZXJhbCBkZXZpY2UuICAgTW9zdCBoaWdoIGxldmVsIEdQUCBPUyB0eXBpY2FsbHkgc3VwcG9ydCBhIGRldmljZSBkcml2ZXIKK21vZGVsLCB3aGVyZWJ5IGFwcGxpY2F0aW9ucyBjYW4gc2FmZWx5IGFjY2VzcyBhbmQgc2hhcmUgYSBoYXJkd2FyZSBwZXJpcGhlcmFsCit0aHJvdWdoIHN0YW5kYXJkIGRyaXZlciBpbnRlcmZhY2VzLiAgVGhlcmVmb3JlLCB0byBhbGxvdyBtdWx0aXBsZSBHUFAKK2FwcGxpY2F0aW9ucyB0byBzaGFyZSBhY2Nlc3MgdG8gdGhlIERTUCwgdGhlIEdQUCBzaWRlIG9mIERTUC9CSU9TIEJyaWRnZQoraW1wbGVtZW50cyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBEU1AuCisKK1NpbmNlIGRyaXZlciBpbnRlcmZhY2VzIGFyZSBub3QgYWx3YXlzIHN0YW5kYXJkIGFjcm9zcyBHUFAgT1MsIGFuZCB0byBwcm92aWRlCitzb21lIGxldmVsIG9mIGludGVyb3BlcmFiaWxpdHkgb2YgYXBwbGljYXRpb24gY29kZSB1c2luZyBEU1AvQklPUyBCcmlkZ2UKK2JldHdlZW4gR1BQIE9TLCBEU1AvQklPUyBCcmlkZ2UgcHJvdmlkZXMgYSBzdGFuZGFyZCBsaWJyYXJ5IG9mIEFQSXMgd2hpY2gKK3dyYXAgY2FsbHMgaW50byB0aGUgZGV2aWNlIGRyaXZlci4gICBTbywgcmF0aGVyIHRoYW4gY2FsbGluZyBHUFAgT1Mgc3BlY2lmaWMKK2RyaXZlciBpbnRlcmZhY2VzLCBhcHBsaWNhdGlvbnMgKGFuZCBldmVuIG90aGVyIGRldmljZSBkcml2ZXJzKSBjYW4gdXNlIHRoZQorc3RhbmRhcmQgQVBJIGxpYnJhcnkgZGlyZWN0bHkuCisKK0RTUCBTb2Z0d2FyZSBBcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIERTUC9CSU9TLCBEU1AvQklPUyBCcmlkZ2UgYWRkcyBhIGRldmljZS1pbmRlcGVuZGVudCBzdHJlYW1pbmcgSS9PIChTVFJNKQoraW50ZXJmYWNlLCBhIG1lc3NhZ2luZyBpbnRlcmZhY2UgKE5PREUpLCBhbmQgYSBSZXNvdXJjZSBNYW5hZ2VyIChSTSkgU2VydmVyLgorVGhlIFJNIFNlcnZlciBydW5zIGFzIGEgdGFzayBvZiBEU1AvQklPUyBhbmQgaXMgc3Vic2VydmllbnQgdG8gY29tbWFuZHMKK2FuZCBxdWVyaWVzIGZyb20gdGhlIEdQUC4gIEl0IGV4ZWN1dGVzIGNvbW1hbmRzIHRvIHN0YXJ0IGFuZCBzdG9wIERTUCBzaWduYWwKK3Byb2Nlc3Npbmcgbm9kZXMgaW4gcmVzcG9uc2UgdG8gR1BQIHByb2dyYW1zIG1ha2luZyByZXF1ZXN0cyB0aHJvdWdoIHRoZQorKEdQUC1zaWRlKSBBUEkuCisKK0RTUCB0YXNrcyBzdGFydGVkIGJ5IHRoZSBSTSBTZXJ2ZXIgYXJlIHNpbWlsYXIgdG8gYW55IG90aGVyIERTUCB0YXNrIHdpdGggdHdvCitpbXBvcnRhbnQgZGlmZmVyZW5jZXM6ICB0aGV5IG11c3QgZm9sbG93IGEgc3BlY2lmaWMgdGFzayBtb2RlbCBjb25zaXN0aW5nIG9mCit0aHJlZSBDLWNhbGxhYmxlIGZ1bmN0aW9ucyAobm9kZSBjcmVhdGUsIGV4ZWN1dGUsIGFuZCBkZWxldGUpLCB3aXRoIHNwZWNpZmljCitzZXRzIG9mIGFyZ3VtZW50cywgYW5kIHRoZXkgaGF2ZSBhIHByZS1kZWZpbmVkIHRhc2sgZW52aXJvbm1lbnQgZXN0YWJsaXNoZWQKK2J5IHRoZSBSTSBTZXJ2ZXIuCisKK1Rhc2tzIHN0YXJ0ZWQgYnkgdGhlIFJNIFNlcnZlciBjb21tdW5pY2F0ZSB1c2luZyB0aGUgU1RSTSBhbmQgTk9ERSBpbnRlcmZhY2VzCithbmQgYWN0IGFzIHNlcnZlcnMgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcgR1BQIGNsaWVudHMsIHBlcmZvcm1pbmcgc2lnbmFsCitwcm9jZXNzaW5nIGZ1bmN0aW9ucyBhcyByZXF1ZXN0ZWQgYnkgbWVzc2FnZXMgc2VudCBieSB0aGVpciBHUFAgY2xpZW50LgorVHlwaWNhbGx5LCBhIERTUCB0YXNrIG1vdmVzIGRhdGEgZnJvbSBzb3VyY2UgZGV2aWNlcyB0byBzaW5rIGRldmljZXMgdXNpbmcKK2RldmljZSBpbmRlcGVuZGVudCBJL08gc3RyZWFtcywgcGVyZm9ybWluZyBhcHBsaWNhdGlvbi1zcGVjaWZpYyBwcm9jZXNzaW5nCithbmQgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBkYXRhIHdoaWxlIGl0IGlzIG1vdmVkLiAgRm9yIGV4YW1wbGUsIGFuIGF1ZGlvCit0YXNrIG1pZ2h0IHBlcmZvcm0gYXVkaW8gZGVjb21wcmVzc2lvbiAoQURQQ00sIE1QRUcsIENFTFApIG9uIGRhdGEgcmVjZWl2ZWQKK2Zyb20gYSBHUFAgYXVkaW8gZHJpdmVyIGFuZCB0aGVuIHNlbmQgdGhlIGRlY29tcHJlc3NlZCBsaW5lYXIgc2FtcGxlcyB0byBhCitkaWdpdGFsLXRvLWFuYWxvZyBjb252ZXJ0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9lcnJvci1jb2RlcyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9Eb2N1bWVudGF0aW9uL2Vycm9yLWNvZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyODI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvRG9jdW1lbnRhdGlvbi9lcnJvci1jb2RlcwpAQCAtMCwwICsxLDE1NyBAQAorCQkJRFNQL0JyaWRnZSBFcnJvciBDb2RlIEd1aWRlCisKKworU3VjY2VzcyBjb2RlIGlzIGFsd2F5cyB0YWtlbiBhcyAwLCBleGNlcHQgZm9yIG9uZSBjYXNlIHdoZXJlIGEgc3VjY2VzcyBzdGF0dXMKK2RpZmZlcmVudCB0aGFuIDAgY2FuIGJlIHBvc3NpYmxlLCB0aGlzIGlzIHdoZW4gZW51bWVyYXRpbmcgYSBzZXJpZXMgb2YgZHNwCitvYmplY3RzLCBpZiB0aGUgZW51bWVyYXRpb24gZG9lc24ndCBoYXZlIGFueSBtb3JlIG9iamVjdHMgaXQgaXMgY29uc2lkZXJlZCBhcyBhCitzdWNjZXNzZnVsIGNhc2UuIEluIHRoaXMgY2FzZSBhIHBvc2l0aXZlIEVOT0RBVEEgaXMgcmV0dXJuZWQgKFRPRE86IENoYW5nZSB0bworYXZvaWQgdGhpcyBjYXNlKS4KKworRXJyb3IgY29kZXMgYXJlIHJldHVybmVkIGFzIGEgbmVnYXRpdmUgMSwgaWYgYW4gc3BlY2lmaWMgY29kZSBpcyBleHBlY3RlZCwgaXQKK2NhbiBiZSBwcm9wYWdhdGVkIHRvIHVzZXIgc3BhY2UgYnkgcmVhZGluZyBlcnJubyBzeW1ib2wgZGVmaW5lZCBpbiBlcnJuby5oLCBmb3IKK3NwZWNpZmljIGRldGFpbHMgb24gdGhlIGltcGxlbWVudGF0aW9uIGEgY29weSBvZiB0aGUgc3RhbmRhcmQgdXNlZCBzaG91bGQgYmUKK3JlYWQgZmlyc3QuCisKK1RoZSBlcnJvciBjb2RlcyB1c2VkIGJ5IHRoaXMgZHJpdmVyIGFyZToKKworW0VQRVJNXQorICAgIEdlbmVyYWwgZHJpdmVyIGZhaWx1cmUuCisKKyAgICBBY2NvcmRpbmcgdG8gdGhlIHVzZSBjYXNlIHRoZSBmb2xsb3dpbmcgbWlnaHQgYXBwbHk6CisgICAgLSBEZXZpY2UgaXMgaW4gJ3NsZWVwL3N1c3BlbmQnIG1vZGUgZHVlIHRvIERQTS4KKyAgICAtIFVzZXIgY2Fubm90IG1hcmsgZW5kIG9mIHN0cmVhbSBvbiBhbiBpbnB1dCBjaGFubmVsLgorICAgIC0gUmVxdWVzdGVkIG9wZXJhdGlvbiBpcyBpbnZhbGlkIGZvciB0aGUgbm9kZSB0eXBlLgorICAgIC0gSW52YWxpZCBhbGlnbm1lbnQgZm9yIHRoZSBub2RlIG1lc3NhZ2luZyBidWZmZXIuCisgICAgLSBUaGUgc3BlY2lmaWVkIGRpcmVjdGlvbiBpcyBpbnZhbGlkIGZvciB0aGUgc3RyZWFtLgorICAgIC0gSW52YWxpZCBzdHJlYW0gbW9kZS4KKworW0VOT0VOVF0KKyAgICBUaGUgc3BlY2lmaWVkIG9iamVjdCBvciBmaWxlIHdhcyBub3QgZm91bmQuCisKK1tFU1JDSF0KKyAgICBBIHNoYXJlZCBtZW1vcnkgYnVmZmVyIGNvbnRhaW5lZCBpbiBhIG1lc3NhZ2Ugb3Igc3RyZWFtIGNvdWxkIG5vdCBiZSBtYXBwZWQKKyAgICB0byB0aGUgR1BQIGNsaWVudCBwcm9jZXNzJ3MgdmlydHVhbCBzcGFjZS4KKworW0VJT10KKyAgICBEcml2ZXIgaW50ZXJmYWNlIEkvTyBlcnJvci4KKworICAgIG9yOgorICAgIC0gVW5hYmxlIHRvIHBsdWcgY2hhbm5lbCBJU1IgZm9yIGNvbmZpZ3VyZWQgSVJRLgorICAgIC0gTm8gZnJlZSBJL08gcmVxdWVzdCBwYWNrZXRzIGFyZSBhdmFpbGFibGUuCisKK1tFTlhJT10KKyAgICBVbmFibGUgdG8gZmluZCBhIG5hbWVkIHNlY3Rpb24gaW4gRFNQIGV4ZWN1dGFibGUgb3IgYSBub24tZXhpc3RlbnQgbWVtb3J5CisgICAgc2VnbWVudCBpZGVudGlmaWVyIHdhcyBzcGVjaWZpZWQuCisKK1tFQkFERl0KKyAgICBHZW5lcmFsIGVycm9yIGZvciBmaWxlIGhhbmRsaW5nOgorCisgICAgLSBVbmFibGUgdG8gb3BlbiBmaWxlLgorICAgIC0gVW5hYmxlIHRvIHJlYWQgZmlsZS4KKyAgICAtIEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIERTUCBleGVjdXRhYmxlIGZpbGUuCisKK1tFTk9NRU1dCisgICAgQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIG9jY3VycmVkLgorCitbRUFDQ0VTXQorICAgIC0gVW5hYmxlIHRvIHJlYWQgY29udGVudCBvZiBEQ0QgZGF0YSBzZWN0aW9uOyB0aGlzIGlzIHR5cGljYWxseSBjYXVzZWQgYnkKKyAgICBpbXByb3Blcmx5IGNvbmZpZ3VyZWQgbm9kZXMuCisgICAgLSBVbmFibGUgdG8gZGVjb2RlIERDRCBkYXRhIHNlY3Rpb24gY29udGVudDsgdGhpcyBpcyB0eXBpY2FsbHkgY2F1c2VkIGJ5CisgICAgY2hhbmdlcyB0byBEU1AvQklPUyBCcmlkZ2UgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC0gVW5hYmxlIHRvIGdldCBwb2ludGVyIHRvIERDRCBkYXRhIHNlY3Rpb247IHRoaXMgaXMgdHlwaWNhbGx5IGNhdXNlZCBieQorICAgIGltcHJvcGVybHkgY29uZmlndXJlZCBVVUlEcy4KKyAgICAtIFVuYWJsZSB0byBsb2FkIGZpbGUgY29udGFpbmluZyBEQ0QgZGF0YSBzZWN0aW9uOyB0aGlzIGlzIHR5cGljYWxseQorICAgIGNhdXNlZCBieSBhIG1pc3NpbmcgQ09GRiBmaWxlLgorICAgIC0gVGhlIHNwZWNpZmllZCBDT0ZGIGZpbGUgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIG5vZGUgcmVnaXN0cmF0aW9uCisgICAgc2VjdGlvbi4KKworW0VGQVVMVF0KKyAgICBJbnZhbGlkIHBvaW50ZXIgb3IgaGFuZGxlci4KKworW0VFWElTVF0KKyAgICBBdHRlbXB0ZWQgdG8gY3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyICB3aGVuIG9uZSBhbHJlYWR5IGV4aXN0cy4KKworW0VJTlZBTF0KKyAgICBJbnZhbGlkIGFyZ3VtZW50LgorCitbRVNQSVBFXQorICAgIFN5bWJvbCBub3QgZm91bmQgaW4gdGhlIENPRkYgZmlsZS4gIERTUE5vZGVfQ3JlYXRlIHdpbGwgcmV0dXJuIHRoaXMgaWYKKyAgICB0aGUgaUFsZyBmdW5jdGlvbiB0YWJsZSBmb3IgYW4geERBSVMgc29ja2V0IGlzIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICAgIEluIHRoaXMgY2FzZSwgZm9yY2UgdGhlIHN5bWJvbCB0byBiZSBsaW5rZWQgaW50byB0aGUgQ09GRiBmaWxlLgorICAgIERTUE5vZGVfQ3JlYXRlLCBEU1BOb2RlX0V4ZWN1dGUsIGFuZCBEU1BOb2RlX0RlbGV0ZSB3aWxsIHJldHVybiB0aGlzIGlmCisgICAgdGhlIGNyZWF0ZSwgZXhlY3V0ZSwgb3IgZGVsZXRlIHBoYXNlIGZ1bmN0aW9uLCByZXNwZWN0aXZlbHksIGNvdWxkIG5vdCBiZQorICAgIGZvdW5kIGluIHRoZSBDT0ZGIGZpbGUuCisKKyAgICAtIE5vIHN5bWJvbCB0YWJsZSBpcyBsb2FkZWQvZm91bmQgZm9yIHRoaXMgYm9hcmQuCisgICAgLSBVbmFibGUgdG8gaW5pdGlhbGl6ZSB0aGUgWkwgQ09GRiBwYXJzaW5nIG1vZHVsZS4KKworW0VQSVBFXQorICAgIEkvTyBpcyBjdXJyZW50bHkgcGVuZGluZy4KKworICAgIC0gRW5kIG9mIHN0cmVhbSB3YXMgYWxyZWFkeSByZXF1ZXN0ZWQgb24gdGhpcyBvdXRwdXQgY2hhbm5lbC4KKworW0VET01dCisgICAgQSBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIG91dHNpZGUgaXRzIHZhbGlkIHJhbmdlLgorCitbRU5PU1lTXQorICAgIFRoZSBpbmRpY2F0ZWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCisKK1tFSURSTV0KKyAgICBEdXJpbmcgZW51bWVyYXRpb24gYSBjaGFuZ2UgaW4gdGhlIG51bWJlciBvciBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3RzCisgICAgaGFzIG9jY3VycmVkLgorCitbRUNIUk5HXQorICAgIEF0dGVtcHQgdG8gY3JlYXRlZCBjaGFubmVsIG1hbmFnZXIgd2l0aCB0b28gbWFueSBjaGFubmVscyBvciBjaGFubmVsIElEIG91dAorICAgIG9mIHJhbmdlLgorCitbRUJBRFJdCisgICAgVGhlIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGluY29ycmVjdCBmb3IgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24uCisKKyAgICAtIEludmFsaWQgc2VnbWVudCBJRC4KKworW0VOT0RBVEFdCisgICAgVW5hYmxlIHRvIHJldHJpZXZlIHJlc291cmNlIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlZ2lzdHJ5LgorCisgICAgLSBObyBtb3JlIHJlZ2lzdHJ5IHZhbHVlcy4KKworW0VUSU1FXQorICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24gY291bGQgY29tcGxldGUuCisKK1tFTk9TUl0KKyAgICBBIHN0cmVhbSBoYXMgYmVlbiBpc3N1ZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb3dlZCBpbiB0aGUKKyAgICBzdHJlYW0gYXQgb25jZTsgYnVmZmVycyBtdXN0IGJlIHJlY2xhaW1lZCBmcm9tIHRoZSBzdHJlYW0gYmVmb3JlIGFueSBtb3JlCisgICAgY2FuIGJlIGlzc3VlZC4KKworICAgIC0gTm8gZnJlZSBjaGFubmVscyBhcmUgYXZhaWxhYmxlLgorCitbRUlMU0VRXQorICAgIEVycm9yIG9jY3VycmVkIGluIGEgZHluYW1pYyBsb2FkZXIgbGlicmFyeSBmdW5jdGlvbi4KKworW0VJU0NPTk5dCisgICAgVGhlIFNwZWNpZmllZCBDb25uZWN0aW9uIGFscmVhZHkgZXhpc3RzLgorCitbRU5PVENPTk5dCisgICAgTm9kZXMgbm90IGNvbm5lY3RlZC4KKworW0VUSU1FRE9VVF0KKyAgICBUaW1lb3V0IG9jY3VycmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgaGFyZHdhcmUuCisKKyAgICAtIFdhaXQgZm9yIGZsdXNoIG9wZXJhdGlvbiBvbiBhbiBvdXRwdXQgY2hhbm5lbCB0aW1lZCBvdXQuCisKK1tFQ09OTlJFRlVTRURdCisgICAgTm8gbW9yZSBjb25uZWN0aW9ucyBjYW4gYmUgbWFkZSBmb3IgdGhpcyBub2RlLgorCitbRUFMUkVBRFldCisgICAgQ2hhbm5lbCBpcyBhbHJlYWR5IGluIHVzZS4KKworW0VSRU1PVEVJT10KKyAgICBkd1RpbWVPdXQgcGFyYW1ldGVyIHdhcyBDSE5MX0lPQ05PV0FJVCwgeWV0IG5vIEkvTyBjb21wbGV0aW9ucyB3ZXJlCisgICAgcXVldWVkLgorCitbRUNBTkNFTEVEXQorICAgIEkvTyBoYXMgYmVlbiBjYW5jZWxsZWQgb24gdGhpcyBjaGFubmVsLgorCitbRU5PS0VZXQorICAgIEludmFsaWQgc3Via2V5IHBhcmFtZXRlci4KKworICAgIC0gVVVJRCBub3QgZm91bmQgaW4gcmVnaXN0cnkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGU0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvS2NvbmZpZwpAQCAtMCwwICsxLDkwIEBACisjCisjIERTUCBCcmlkZ2UgRHJpdmVyIFN1cHBvcnQKKyMKKworbWVudWNvbmZpZyBUSURTUEJSSURHRQorCXRyaXN0YXRlICJEU1AgQnJpZGdlIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwlzZWxlY3QgT01BUF9NQk9YX0ZXSworCWhlbHAKKwkgIERTUC9CSU9TIEJyaWRnZSBpcyBkZXNpZ25lZCBmb3IgcGxhdGZvcm1zIHRoYXQgY29udGFpbiBhIEdQUCBhbmQKKwkgIG9uZSBvciBtb3JlIGF0dGFjaGVkIERTUHMuICBUaGUgR1BQIGlzIGNvbnNpZGVyZWQgdGhlIG1hc3RlciBvcgorCSAgImhvc3QiIHByb2Nlc3NvciwgYW5kIHRoZSBhdHRhY2hlZCBEU1BzIGFyZSBwcm9jZXNzaW5nIHJlc291cmNlcworCSAgdGhhdCBjYW4gYmUgdXRpbGl6ZWQgYnkgYXBwbGljYXRpb25zIGFuZCBkcml2ZXJzIHJ1bm5pbmcgb24gdGhlIEdQUC4KKworCSAgVGhpcyBkcml2ZXIgZGVwZW5kcyBvbiBPTUFQIE1haWxib3ggKE9NQVBfTUJPWF9GV0spLgorCitjb25maWcgVElEU1BCUklER0VfRFZGUworCWJvb2wgIkVuYWJsZSBCcmlkZ2UgRHluYW1pYyBWb2x0YWdlIGFuZCBGcmVxdWVuY3kgU2NhbGluZyAoRFZGUykiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRSAmJiBPTUFQX1BNX1NSRiAmJiBDUFVfRlJFUQorCWhlbHAKKwkgIERWRlMgYWxsb3dzIERTUCBCcmlkZ2UgdG8gaW5pdGlhdGUgdGhlIG9wZXJhdGluZyBwb2ludCBjaGFuZ2UgdG8KKwkgIHNjYWxlIHRoZSBjaGlwIHZvbHRhZ2UgYW5kIGZyZXF1ZW5jeSBpbiBvcmRlciB0byBtYXRjaCB0aGUKKwkgIHBlcmZvcm1hbmNlIGFuZCBwb3dlciBjb25zdW1wdGlvbiB0byB0aGUgY3VycmVudCBwcm9jZXNzaW5nCisJICByZXF1aXJlbWVudHMuCisKK2NvbmZpZyBUSURTUEJSSURHRV9NRU1QT09MX1NJWkUKKwloZXggIlBoeXNpY2FsIG1lbW9yeSBwb29sIHNpemUgKEJ5dGUpIgorCWRlcGVuZHMgb24gVElEU1BCUklER0UKKwlkZWZhdWx0IDB4NjAwMDAwCisJaGVscAorCSAgQWxsb2NhdGUgc3BlY2lmaWVkIHNpemUgb2YgbWVtb3J5IGF0IGJvb3RpbmcgdGltZSB0byBhdm9pZCBhbGxvY2F0aW9uCisJICBmYWlsdXJlIHVuZGVyIGhlYXZ5IG1lbW9yeSBmcmFnbWVudGF0aW9uIGFmdGVyIHNvbWUgdXNlIHRpbWUuCisKK2NvbmZpZyBUSURTUEJSSURHRV9ERUJVRworCWJvb2wgIkRlYnVnIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRQorCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSBCcmlkZ2UgZGVidWdnaW5nIGNhcGFiaWxpdGllcworCitjb25maWcgVElEU1BCUklER0VfUkVDT1ZFUlkKKwlib29sICJSZWNvdmVyeSBTdXBwb3J0IgorCWRlcGVuZHMgb24gVElEU1BCUklER0UKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJbiBjYXNlIG9mIERTUCBmYXRhbCBlcnJvciwgQlJJREdFIGRyaXZlciB3aWxsIHRyeSB0bworCSAgcmVjb3ZlciBpdHNlbGYuCisKK2NvbmZpZyBUSURTUEJSSURHRV9DQUNIRV9MSU5FX0NIRUNLCisJYm9vbCAiQ2hlY2sgYnVmZmVycyB0byBiZSAxMjggYnl0ZSBhbGlnbmVkIgorCWRlcGVuZHMgb24gVElEU1BCUklER0UKKwloZWxwCisJICBXaGVuIHRoZSBEU1AgcHJvY2Vzc2VzIGRhdGEsIHRoZSBEU1AgY2FjaGUgY29udHJvbGxlciBsb2FkcyAxMjgtQnl0ZQorCSAgY2h1bmtzIChsaW5lcykgZnJvbSBTRFJBTSBhbmQgd3JpdGVzIHRoZSBkYXRhIGJhY2sgaW4gMTI4LUJ5dGUgY2h1bmtzLgorCSAgSWYgYSBETU0gYnVmZmVyIGRvZXMgbm90IHN0YXJ0IGFuZCBlbmQgb24gYSAxMjgtQnl0ZSBib3VuZGFyeSwgdGhlIGRhdGEKKwkgIHByZWNlZGluZyB0aGUgc3RhcnQgYWRkcmVzcyAoU0EpIGZyb20gdGhlIDEyOC1CeXRlIGJvdW5kYXJ5IHRvIHRoZSBTQQorCSAgYW5kIHRoZSBkYXRhIGF0IGFkZHJlc3NlcyB0cmFpbGluZyB0aGUgZW5kIGFkZHJlc3MgKEVBKSBmcm9tIHRoZSBFQSB0bworCSAgdGhlIG5leHQgMTI4LUJ5dGUgYm91bmRhcnkgd2lsbCBiZSBsb2FkZWQgYW5kIHdyaXR0ZW4gYmFjayBhcyB3ZWxsLgorCSAgVGhpcyBjYW4gbGVhZCB0byBoZWFwIGNvcnJ1cHRpb24uIFNheSBZLCB0byBlbmZvcmNlIHRoZSBjaGVjayBmb3IgMTI4CisJICBieXRlIGFsaWdubWVudCwgYnVmZmVycyBmYWlsaW5nIHRoaXMgY2hlY2sgd2lsbCBiZSByZWplY3RlZC4KKworY29uZmlnIFRJRFNQQlJJREdFX1dEVDMKKwlib29sICJFbmFibGUgd2F0Y2hkb2cgdGltZXIiCisJZGVwZW5kcyBvbiBUSURTUEJSSURHRQorCWhlbHAKKwkgIFdURDMgaXMgbWFuYWdlZCBieSBEU1AgYW5kIG9uY2UgaXQgaXMgZW5hYmxlZCwgRFNQIHNpZGUgYnJpZGdlIGlzIGluCisJICBjaGFyZ2Ugb2YgcmVmcmVzaGluZyB0aGUgdGltZXIgYmVmb3JlIG92ZXJmbG93LCBpZiB0aGUgRFNQIGhhbmdzIE1QVQorCSAgd2lsbCBjYXVnaHQgdGhlIGludGVycnVwdCBhbmQgdHJ5IHRvIHJlY292ZXIgRFNQLgorCitjb25maWcgVElEU1BCUklER0VfV0RUX1RJTUVPVVQKKwlpbnQgIldhdGNoZG9nIHRpbWVyIHRpbWVvdXQgKGluIHNlY3MpIgorCWRlcGVuZHMgb24gVElEU1BCUklER0UgJiYgVElEU1BCUklER0VfV0RUMworCWRlZmF1bHQgNQorCWhlbHAKKwkgICBXYXRjaGRvZyB0aW1lciB0aW1lb3V0IHZhbHVlLCBhZnRlciB0aGF0IHRpbWUgaWYgdGhlIHdhdGNoZG9nIHRpbWVyCisJICAgY291bnRlciBpcyBub3QgcmVzZXQgdGhlIHdkdCBvdmVyZmxvdyBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQKKworY29uZmlnIFRJRFNQQlJJREdFX05URllfUFdSRVJSCisJYm9vbCAiTm90aWZ5IHBvd2VyIGVycm9ycyIKKwlkZXBlbmRzIG9uIFRJRFNQQlJJREdFCisJaGVscAorCSAgRW5hYmxlIG5vdGlmaWNhdGlvbnMgdG8gcmVnaXN0ZXJlZCBjbGllbnRzIG9uIHRoZSBldmVudCBvZiBwb3dlciBlcnJyb3IKKwkgIHRyeWluZyB0byBzdXNwZW5kIGJyaWRnZSBkcml2ZXIuIFNheSBZLCB0byBzaWduYWwgdGhpcyBldmVudCBhcyBhIGZhdGFsCisJICBlcnJvciwgdGhpcyB3aWxsIHJlcXVpcmUgYSBicmlkZ2UgcmVzdGFydCB0byByZWNvdmVyLgorCitjb25maWcgVElEU1BCUklER0VfQkFDS1RSQUNFCisJYm9vbCAiRHVtcCBiYWNrdHJhY2VzIG9uIGZhdGFsIGVycm9ycyIKKwlkZXBlbmRzIG9uIFRJRFNQQlJJREdFCisJaGVscAorCSAgRW5hYmxlIHVzZWZ1bCBpbmZvcm1hdGlvbiB0byBiYWNrdHJhY2UgZmF0YWwgZXJyb3JzLiBTYXkgWSBpZiB5b3UKKwkgIHdhbnQgdG8gZHVtcCBpbmZvcm1hdGlvbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTY3MTcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL01ha2VmaWxlCkBAIC0wLDAgKzEsMzQgQEAKK29iai0kKENPTkZJR19USURTUEJSSURHRSkJKz0gYnJpZGdlZHJpdmVyLm8KKworbGliZ2VuID0gZ2VuL2diLm8gZ2VuL2dzLm8gZ2VuL2doLm8gZ2VuL3V1aWR1dGlsLm8KK2xpYnNlcnZpY2VzID0gc2VydmljZXMvc3luYy5vIHNlcnZpY2VzL2NmZy5vIFwKKwkJc2VydmljZXMvbnRmeS5vIHNlcnZpY2VzL3NlcnZpY2VzLm8KK2xpYmNvcmUgPSBjb3JlL2Nobmxfc20ubyBjb3JlL21zZ19zbS5vIGNvcmUvaW9fc20ubyBjb3JlL3Rpb21hcDM0MzAubyBcCisJCWNvcmUvdGlvbWFwMzQzMF9wd3IubyBjb3JlL3Rpb21hcF9pby5vIFwKKwkJY29yZS91ZV9kZWgubyBjb3JlL3dkdC5vIGNvcmUvZHNwLWNsb2NrLm8KK2xpYnBtZ3IgPSBwbWdyL2NobmwubyBwbWdyL2lvLm8gcG1nci9tc2cubyBwbWdyL2NvZC5vIHBtZ3IvZGV2Lm8gcG1nci9kc3BhcGkubyBcCisJCXBtZ3IvZG1tLm8gcG1nci9jbW0ubyBwbWdyL2RibGwubworbGlicm1nciA9IHJtZ3IvZGJkY2QubyBybWdyL2Rpc3AubyBybWdyL2Rydi5vIHJtZ3IvbWdyLm8gcm1nci9ub2RlLm8gXAorCQlybWdyL3Byb2MubyBybWdyL3B3ci5vIHJtZ3Ivcm1tLm8gcm1nci9zdHJtLm8gcm1nci9kc3BkcnYubyBcCisJCXJtZ3Ivbmxkci5vIHJtZ3IvZHJ2X2ludGVyZmFjZS5vCitsaWJkbG9hZCA9IGR5bmxvYWQvY2xvYWQubyBkeW5sb2FkL2dldHNlY3Rpb24ubyBkeW5sb2FkL3JlbG9jLm8gXAorCQkgZHlubG9hZC90cmFtcC5vCitsaWJodyA9IGh3L2h3X21tdS5vCisKK2JyaWRnZWRyaXZlci1vYmpzID0gJChsaWJnZW4pICQobGlic2VydmljZXMpICQobGliY29yZSkgJChsaWJwbWdyKSAkKGxpYnJtZ3IpIFwKKwkJCSQobGliZGxvYWQpICQobGliaHcpCisKKyNNYWNoaW5lIGRlcGVuZGVudAorY2NmbGFncy15ICs9IC1EX1RJXyAtRF9EQl9USU9NQVAgLURUTVMzMjA2MCBcCisJCS1EVElDRkdfUFJPQ19WRVIgLURUSUNGR19FVk1fVFlQRSAtRENITkxfU01DTEFTUyBcCisJCS1EQ0hOTF9NRVNTQUdFUyAtRFVTRV9MRVZFTF8xX01BQ1JPUworCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZQorY2NmbGFncy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZQorY2NmbGFncy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IKK2NjZmxhZ3MteSArPSAtSWRyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyCitjY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZAorY2NmbGFncy15ICs9IC1JZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3CitjY2ZsYWdzLXkgKz0gLUlhcmNoL2FybQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjRhMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvVE9ETwpAQCAtMCwwICsxLDE4IEBACisqIE1pZ3JhdGUgdG8gKGFuZCBpZiBuZWNlc3NhcnksIGV4dGVuZCkgZXhpc3RpbmcgdXBzdHJlYW0gY29kZSBzdWNoIGFzIAorICBpb21tdSwgd2R0LCBtY2JzcCwgZ3B0aW1lcnMKKyogRGVjb3VwbGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZSAoZS5nLiBicmlkZ2VfYnJkX3N0YXJ0L3N0b3AvZGVsZXRlL21vbml0b3IpCisqIERPRkYgYmluYXJ5IGxvYWRlcjogY29uc2lkZXIgcHVzaGluZyB0byB1c2VyIHNwYWNlLiBhdCB0aGUgdmVyeSBsZWFzdAorICBlbGltaW5hdGUgdGhlIGRpcmVjdCBmaWxlc3lzdGVtIGFjY2VzcworKiBFbGltaW5hdGUgZ2VuZXJhbCBzZXJ2aWNlcyBhbmQgbGlicmFyaWVzIC0gdXNlIG9yIGV4dGVuZCBleGlzdGluZyBrZXJuZWwKKyAgbGlicmFyaWVzIGluc3RlYWQgKGUuZy4gZ2NmL2xjbSBpbiBubGRyLmMsIGdsb2JhbCBoZWxwZXJzIGluIGdlbi8pCisqIEVsaW1pbmF0ZSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIE9NQVBfU1lTQ19CQVNFCisqIEVsaW1pbmF0ZSBsaXN0LmggOiBzZWVtIGxpa2UgYSByZWR1bmRhbnQgd3JhcHBlciB0byBleGlzdGluZyBrZXJuZWwgbGlzdHMKKyogRWxpbWluYXRlIERTUF9TVUNDRUVERUQgbWFjcm9zIGFuZCB0aGVpciBpbXBvc2VkIHJlZHVuZGFudCBpbmRlbnRhdGlvbnMKKyAgKGFkb3B0IHRoZSBrZXJuZWwgd2F5IG9mIGNoZWNraW5nIGZvciByZXR1cm4gdmFsdWVzKQorKiBBdWRpdCBpbnRlcmZhY2VzIGV4cG9zZWQgdG8gdXNlciBzcGFjZQorKiBBdWRpdCBhbmQgY2xlYW4gdXAgaGVhZGVyIGZpbGVzIGZvbGRlcgorKiBVc2Uga2VybmVsIGNvZGluZyBzdHlsZQorKiBjaGVja3BhdGNoLnBsIGZpeGVzCisKK1BsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CithbmQgT21hciBSYW1pcmV6IEx1bmEgPG9tYXIucmFtaXJlekB0aS5jb20+LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX2NtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX2NtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjBiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fY21tLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIF9jbW0uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcml2YXRlIGhlYWRlciBmaWxlIGRlZmluaW5nIENNTSBtYW5hZ2VyIG9iamVjdHMgYW5kIGRlZmluZXMgbmVlZGVkCisgKiBieSBJTyBtYW5hZ2VyIHRvIHJlZ2lzdGVyIHNoYXJlZCBtZW1vcnkgcmVnaW9ucyB3aGVuIERTUCBiYXNlIGltYWdlCisgKiBpcyBsb2FkZWQoYnJpZGdlX2lvX29uX2xvYWRlZCkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfQ01NXworI2RlZmluZSBfQ01NXworCisvKgorICogIFRoZXNlIHRhcmdldCBzaWRlIHN5bWJvbHMgZGVmaW5lIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMKKyAqICBvZiB0aGUgc2VjdGlvbiBvZiBzaGFyZWQgbWVtb3J5IHVzZWQgZm9yIHNoYXJlZCBtZW1vcnkgbWFuYWdlciBDTU0uCisgKiAgVGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgKmNmZy5jbWQgZmlsZSBieSBjZGIgY29kZS4KKyAqLworI2RlZmluZSBTSE0wX1NIQVJFRF9CQVNFX1NZTSAgICAgICAgICAgICAiX1NITTBfQkVHIgorI2RlZmluZSBTSE0wX1NIQVJFRF9FTkRfU1lNICAgICAgICAgICAgICAiX1NITTBfRU5EIgorI2RlZmluZSBTSE0wX1NIQVJFRF9SRVNFUlZFRF9CQVNFX1NZTSAgICAiX1NITTBfUlNWRFNUUlQiCisKKy8qCisgKiAgU2hhcmVkIE1lbW9yeSBSZWdpb24gIzAoU0hNU0VHMCkgaXMgdXNlZCBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAqCisgKiAgfChfU0hNMF9CRUcpICAgICAgICAgICAgICAgICAgfCAoX1NITTBfUlNWRFNUUlQpICAgICAgICAgICB8IChfU0hNMF9FTkQpCisgKiAgViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgViAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCAgICAgRFNQLXNpZGUgYWxsb2NhdGlvbnMgICAgfCAgICBHUFAtc2lkZSBhbGxvY2F0aW9ucyAgICB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICoKKyAqLworCisjZW5kaWYgLyogX0NNTV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19kZWguaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19kZWguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjcyM2NkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX2RlaC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBfZGVoLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBoZWFkZXIgZm9yIERFSCBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGZWxpcGUgQ29udHJlcmFzCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0RFSF8KKyNkZWZpbmUgX0RFSF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKworLyogREVIIE1hbmFnZXI6IG9ubHkgb25lIGNyZWF0ZWQgcGVyIGJvYXJkOiAqLworc3RydWN0IGRlaF9tZ3IgeworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsJLyogQnJpZGdlIGNvbnRleHQuICovCisJc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyogTlRGWSBvYmplY3QgKi8KKworCS8qIE1NVSBGYXVsdCBEUEMgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZHBjX3Rhc2tsZXQ7Cit9OworCisjZW5kaWYgLyogX0RFSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19tc2dfc20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL19tc2dfc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTZkZTVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX21zZ19zbS5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogX21zZ19zbS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByaXZhdGUgaGVhZGVyIGZpbGUgZGVmaW5pbmcgbXNnX2N0cmwgbWFuYWdlciBvYmplY3RzIGFuZCBkZWZpbmVzIG5lZWRlZAorICogYnkgSU8gbWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9NU0dfU01fCisjZGVmaW5lIF9NU0dfU01fCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2dkZWZzLmg+CisKKy8qCisgKiAgVGhlc2UgdGFyZ2V0IHNpZGUgc3ltYm9scyBkZWZpbmUgdGhlIGJlZ2lubmluZyBhbmQgZW5kaW5nIGFkZHJlc3NlcworICogIG9mIHRoZSBzZWN0aW9uIG9mIHNoYXJlZCBtZW1vcnkgdXNlZCBmb3IgbWVzc2FnZXMuIFRoZXkgYXJlCisgKiAgZGVmaW5lZCBpbiB0aGUgKmNmZy5jbWQgZmlsZSBieSBjZGIgY29kZS4KKyAqLworI2RlZmluZSBNU0dfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSAgICAgICJfTVNHX0JFRyIKKyNkZWZpbmUgTVNHX1NIQVJFRF9CVUZGRVJfTElNSVRfU1lNICAgICAiX01TR19FTkQiCisKKyNpZm5kZWYgX0NITkxfV09SRFNJWkUKKyNkZWZpbmUgX0NITkxfV09SRFNJWkUgNAkvKiBkZWZhdWx0IF9DSE5MX1dPUkRTSVpFIGlzIDIgYnl0ZXMvd29yZCAqLworI2VuZGlmCisKKy8qCisgKiAgPT09PT09PT0gbXNnX2N0cmwgPT09PT09PT0KKyAqICBUaGVyZSBpcyBhIGNvbnRyb2wgc3RydWN0dXJlIGZvciBtZXNzYWdlcyB0byB0aGUgRFNQLCBhbmQgYSBjb250cm9sCisgKiAgc3RydWN0dXJlIGZvciBtZXNzYWdlcyBmcm9tIHRoZSBEU1AuIFRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBmb3IKKyAqICB0cmFuc2ZlcnJpbmcgbWVzc2FnZXMgaXMgcGFydGl0aW9uZWQgYXMgZm9sbG93czoKKyAqCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIHxDb250cm9sIHwgTWVzc2FnZXMgZnJvbSBEU1AgfCBDb250cm9sIHwgTWVzc2FnZXMgdG8gRFNQIHwKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIG1zZ19jdHJsIGNvbnRyb2wgc3RydWN0dXJlIGZvciBtZXNzYWdlcyB0byB0aGUgRFNQIGlzIHVzZWQgaW4gdGhlIGZvbGxvd2luZworICogIHdheToKKyAqCisgKiAgYnVmX2VtcHR5IC0gICAgICBUaGlzIGZsYWcgaXMgc2V0IHRvIEZBTFNFIGJ5IHRoZSBHUFAgYWZ0ZXIgaXQgaGFzIG91dHB1dAorICogICAgICAgICAgICAgICAgICBtZXNzYWdlcyBmb3IgdGhlIERTUC4gVGhlIERTUCBob3N0IGRyaXZlciBzZXRzIGl0IHRvCisgKiAgICAgICAgICAgICAgICAgIFRSVUUgYWZ0ZXIgaXQgaGFzIGNvcGllZCB0aGUgbWVzc2FnZXMuCisgKiAgcG9zdF9zd2kgLSAgICAgICBTZXQgdG8gMSBieSB0aGUgR1BQIGFmdGVyIGl0IGhhcyB3cml0dGVuIHRoZSBtZXNzYWdlcywKKyAqICAgICAgICAgICAgICAgICAgc2V0IHRoZSBzaXplLCBhbmQgc2V0IGJ1Zl9lbXB0eSB0byBGQUxTRS4KKyAqICAgICAgICAgICAgICAgICAgVGhlIERTUCBIb3N0IGRyaXZlciB1c2VzIFNXSV9hbmRuIG9mIHRoZSBwb3N0X3N3aSBmaWVsZAorICogICAgICAgICAgICAgICAgICB3aGVuIGEgaG9zdCBpbnRlcnJ1cHQgb2NjdXJzLiBUaGUgaG9zdCBkcml2ZXIgY2xlYXJzCisgKiAgICAgICAgICAgICAgICAgIHRoaXMgYWZ0ZXIgcG9zdGluZyB0aGUgU1dJLgorICogIHNpemUgLSAgICAgICAgICBOdW1iZXIgb2YgbWVzc2FnZXMgdG8gYmUgcmVhZCBieSB0aGUgRFNQLgorICoKKyAqICBGb3IgbWVzc2FnZXMgZnJvbSB0aGUgRFNQOgorICogIGJ1Zl9lbXB0eSAtICAgICAgVGhpcyBmbGFnIGlzIHNldCB0byBGQUxTRSBieSB0aGUgRFNQIGFmdGVyIGl0IGhhcyBvdXRwdXQKKyAqICAgICAgICAgICAgICAgICAgbWVzc2FnZXMgZm9yIHRoZSBHUFAuIFRoZSBEUEMgb24gdGhlIEdQUCBzZXRzIGl0IHRvCisgKiAgICAgICAgICAgICAgICAgIFRSVUUgYWZ0ZXIgaXQgaGFzIGNvcGllZCB0aGUgbWVzc2FnZXMuCisgKiAgcG9zdF9zd2kgLSAgICAgICBTZXQgdG8gMSB0aGUgRFBDIG9uIHRoZSBHUFAgYWZ0ZXIgY29weWluZyB0aGUgbWVzc2FnZXMuCisgKiAgc2l6ZSAtICAgICAgICAgIE51bWJlciBvZiBtZXNzYWdlcyB0byBiZSByZWFkIGJ5IHRoZSBHUFAuCisgKi8KK3N0cnVjdCBtc2dfY3RybCB7CisJdTMyIGJ1Zl9lbXB0eTsJCS8qIHRvL2Zyb20gRFNQIGJ1ZmZlciBpcyBlbXB0eSAqLworCXUzMiBwb3N0X3N3aTsJCS8qIFNldCB0byAiMSIgdG8gcG9zdCBtc2dfY3RybCBTV0kgKi8KKwl1MzIgc2l6ZTsJCS8qIE51bWJlciBvZiBtZXNzYWdlcyB0by9mcm9tIHRoZSBEU1AgKi8KKwl1MzIgcmVzdmQ7Cit9OworCisvKgorICogID09PT09PT09IG1zZ19tZ3IgPT09PT09PT0KKyAqICBUaGUgbXNnX21nciBtYWludGFpbnMgYSBsaXN0IG9mIGFsbCBNU0dfUVVFVUVzLiBFYWNoIE5PREUgb2JqZWN0IGNhbgorICogIGhhdmUgbXNnX3F1ZXVlIHRvIGhvbGQgYWxsIG1lc3NhZ2VzIHRoYXQgY29tZSB1cCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisgKiAgbm9kZSBvbiB0aGUgRFNQLiBUaGUgbXNnX21nciBhbHNvIGhhcyBhIHNoYXJlZCBxdWV1ZSBvZiBtZXNzYWdlcworICogIHJlYWR5IHRvIGdvIHRvIHRoZSBEU1AuCisgKi8KK3N0cnVjdCBtc2dfbWdyIHsKKwkvKiBUaGUgZmlyc3QgZmllbGQgbXVzdCBtYXRjaCB0aGF0IGluIG1zZ29iai5oICovCisKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCisJc3RydWN0IGlvX21nciAqaGlvX21ncjsJLyogSU8gbWFuYWdlciAqLworCXN0cnVjdCBsc3RfbGlzdCAqcXVldWVfbGlzdDsJLyogTGlzdCBvZiBNU0dfUVVFVUVzICovCisJc3BpbmxvY2tfdCBtc2dfbWdyX2xvY2s7CS8qIEZvciBjcml0aWNhbCBzZWN0aW9ucyAqLworCS8qIFNpZ25hbGxlZCB3aGVuIE1zZ0ZyYW1lIGlzIGF2YWlsYWJsZSAqLworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVudDsKKwlzdHJ1Y3QgbHN0X2xpc3QgKm1zZ19mcmVlX2xpc3Q7CS8qIEZyZWUgTXNnRnJhbWVzIHJlYWR5IHRvIGJlIGZpbGxlZCAqLworCXN0cnVjdCBsc3RfbGlzdCAqbXNnX3VzZWRfbGlzdDsJLyogTXNnRnJhbWVzIHJlYWR5IHRvIGdvIHRvIERTUCAqLworCXUzMiBtc2dzX3BlbmRpbmc7CS8qICMgb2YgcXVldWVkIG1lc3NhZ2VzIHRvIGdvIHRvIERTUCAqLworCXUzMiBtYXhfbXNnczsJCS8qIE1heCAjIG9mIG1zZ3MgdGhhdCBmaXQgaW4gYnVmZmVyICovCisJbXNnX29uZXhpdCBvbl9leGl0OwkvKiBjYWxsZWQgd2hlbiBSTVNfRVhJVCBpcyByZWNlaXZlZCAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBtc2dfcXVldWUgPT09PT09PT0KKyAqICBFYWNoIE5PREUgaGFzIGEgbXNnX3F1ZXVlIGZvciByZWNlaXZpbmcgbWVzc2FnZXMgZnJvbSB0aGUKKyAqICBjb3JyZXNwb25kaW5nIG5vZGUgb24gdGhlIERTUC4gVGhlIG1zZ19xdWV1ZSBvYmplY3QgbWFpbnRhaW5zIGEgbGlzdAorICogIG9mIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIGhvc3QsIGJ1dCBub3QgeWV0IHJlYWQgKE1TR19HZXQpLAorICogIGFuZCBhIGxpc3Qgb2YgZnJlZSBmcmFtZXMgdGhhdCBjYW4gYmUgZmlsbGVkIHdoZW4gbmV3IG1lc3NhZ2VzIGFycml2ZQorICogIGZyb20gdGhlIERTUC4KKyAqICBUaGUgbXNnX3F1ZXVlJ3MgaFN5bkV2ZW50IGdldHMgcG9zdGVkIHdoZW4gYSBtZXNzYWdlIGlzIHJlYWR5LgorICovCitzdHJ1Y3QgbXNnX3F1ZXVlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZWxlbTsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJdTMyIG1heF9tc2dzOwkJLyogTm9kZSBtZXNzYWdlIGRlcHRoICovCisJdTMyIG1zZ3FfaWQ7CQkvKiBOb2RlIGVudmlyb25tZW50IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKm1zZ19mcmVlX2xpc3Q7CS8qIEZyZWUgTXNnRnJhbWVzIHJlYWR5IHRvIGJlIGZpbGxlZCAqLworCS8qIEZpbGxlZCBNc2dGcmFtZXNzIHdhaXRpbmcgdG8gYmUgcmVhZCAqLworCXN0cnVjdCBsc3RfbGlzdCAqbXNnX3VzZWRfbGlzdDsKKwl2b2lkICphcmc7CQkvKiBIYW5kbGUgcGFzc2VkIHRvIG1nciBvbl9leGl0IGNhbGxiYWNrICovCisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OwkvKiBTaWduYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHJlYWR5ICovCisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2RvbmU7CS8qIEZvciBzeW5jaHJvbml6aW5nIGNsZWFudXAgKi8KKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZG9uZV9hY2s7CS8qIEZvciBzeW5jaHJvbml6aW5nIGNsZWFudXAgKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOwkvKiBGb3Igbm90aWZpY2F0aW9uIG9mIG1lc3NhZ2UgcmVhZHkgKi8KKwlib29sIGRvbmU7CQkvKiBUUlVFIDw9PT4gZGVsZXRpbmcgdGhlIG9iamVjdCAqLworCXUzMiBpb19tc2dfcGVuZDsJLyogTnVtYmVyIG9mIHBlbmRpbmcgTVNHX2dldC9wdXQgY2FsbHMgKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gbXNnX2RzcG1zZyA9PT09PT09PQorICovCitzdHJ1Y3QgbXNnX2RzcG1zZyB7CisJc3RydWN0IGRzcF9tc2cgbXNnOworCXUzMiBtc2dxX2lkOwkJLyogSWRlbnRpZmllcyB0aGUgbm9kZSB0aGUgbWVzc2FnZSBnb2VzIHRvICovCit9OworCisvKgorICogID09PT09PT09IG1zZ19mcmFtZSA9PT09PT09PQorICovCitzdHJ1Y3QgbXNnX2ZyYW1lIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZWxlbTsKKwlzdHJ1Y3QgbXNnX2RzcG1zZyBtc2dfZGF0YTsKK307CisKKyNlbmRpZiAvKiBfTVNHX1NNXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvX3Rpb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMWYxNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwLmgKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBfdGlvbWFwLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5pdGlvbnMgYW5kIHR5cGVzIHByaXZhdGUgdG8gdGhpcyBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1RJT01BUF8KKyNkZWZpbmUgX1RJT01BUF8KKworI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisjaW5jbHVkZSA8bWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4Lmg+CisjaW5jbHVkZSA8bWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorI2luY2x1ZGUgPGh3X2RlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4JLyogZm9yIGJyaWRnZV9pb2N0bF9leHRwcm9jIGRlZm4gKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jbGsuaD4KKworc3RydWN0IG1hcF9sNF9wZXJpcGhlcmFsIHsKKwl1MzIgcGh5c19hZGRyOworCXUzMiBkc3BfdmlydF9hZGRyOworfTsKKworI2RlZmluZSBBUk1fTUFJTEJPWF9TVEFSVCAgICAgICAgICAgICAgIDB4ZmZmY2YwMDAKKyNkZWZpbmUgQVJNX01BSUxCT1hfTEVOR1RIICAgICAgICAgICAgICAweDgwMAorCisvKiBOZXcgUmVnaXN0ZXJzIGluIE9NQVAzLjEgKi8KKworI2RlZmluZSBURVNUQkxPQ0tfSURfU1RBUlQgICAgICAgICAgICAgIDB4ZmZmZWQ0MDAKKyNkZWZpbmUgVEVTVEJMT0NLX0lEX0xFTkdUSCAgICAgICAgICAgICAweGZmCisKKy8qIElEIFJldHVybmVkIGJ5IE9NQVAxNTEwICovCisjZGVmaW5lIFRCQ19JRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgMHhCNDcwMDJGCisKKyNkZWZpbmUgU1BBQ0VfTEVOR1RIICAgICAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgQVBJX0NMS01fRFBMTF9ETUEgICAgICAgICAgICAgICAweGZmZmVjMDAwCisjZGVmaW5lIEFSTV9JTlRFUlJVUFRfT0ZGU0VUICAgICAgICAgICAgMHhiMDAKKworI2RlZmluZSBCSU9TMjRYWAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfTlVMTCAgICAgICAgICAweDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9OVUxMICAgICAgIDB4MAorCisjZGVmaW5lIE1BWF9MT0NLX1RMQl9FTlRSSUVTIDE1CisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9QUk0gICAgICAgIDB4NDgzMDYwMDAJLypQUk0gTDQgUGVyaXBoZXJhbCAqLworI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1BSTSAgICAgMHgxMTgxZTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NDTSAgICAgICAgMHg0ODAwMjAwMAkvKlNDTSBMNCBQZXJpcGhlcmFsICovCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU0NNICAgICAweDExODFmMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfTU1VICAgICAgICAweDVEMDAwMDAwCS8qTU1VIEw0IFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NTVUgICAgIDB4MTE4MjAwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9DTSAgICAgICAgMHg0ODAwNDAwMAkvKiBDb3JlIEw0LCBDbG9jayBNYW5hZ2VtZW50ICovCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfQ00gICAgIDB4MTE4MWMwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9QRVIgICAgICAgIDB4NDgwMDUwMDAJLyogIFBFUiAqLworI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1BFUiAgICAgMHgxMTgxZDAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BJTzEgICAgICAgMHg0ODMxMDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQSU8xICAgIDB4MTE4MDkwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUElPMiAgICAgICAweDQ5MDUwMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzIgICAgMHgxMTgwYTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQSU8zICAgICAgIDB4NDkwNTIwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUElPMyAgICAweDExODBiMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BJTzQgICAgICAgMHg0OTA1NDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQSU80ICAgIDB4MTE4MGMwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUElPNSAgICAgICAweDQ5MDU2MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BJTzUgICAgMHgxMTgwZDAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfSVZBMldEVCAgICAgIDB4NDkwMzAwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9JVkEyV0RUICAgMHgxMTgwZTAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfRElTUExBWSAgICAgMHg0ODA1MDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0RJU1BMQVkgIDB4MTE4MGYwMDAKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NTSSAgICAgICAgIDB4NDgwNTgwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TU0kgICAgICAweDExODA0MDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR0REICAgICAgICAgMHg0ODA1OTAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dERCAgICAgIDB4MTE4MDUwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TUzEgICAgICAgICAweDQ4MDVhMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU1MxICAgICAgMHgxMTgwNjAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NTMiAgICAgICAgIDB4NDgwNWIwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TUzIgICAgICAweDExODA3MDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9DQU1FUkEgICAgICAweDQ4MEJDMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfQ0FNRVJBICAgMHgxMTgxOTAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfU0RNQSAgICAgICAgMHg0ODA1NjAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NETUEgICAgIDB4MTE4MTAwMDAJLyogMHgxMTgxZDAwMCBjb25mbGljdCB3LyBQRVIgKi8KKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX1VBUlQxICAgICAgICAgICAgIDB4NDgwNmEwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMSAgICAgICAgICAweDExODExMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfVUFSVDIgICAgICAgICAgICAgMHg0ODA2YzAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1VBUlQyICAgICAgICAgIDB4MTE4MTIwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9VQVJUMyAgICAgICAgICAgICAweDQ5MDIwMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfVUFSVDMgICAgMHgxMTgxMzAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfTUNCU1AxICAgICAgMHg0ODA3NDAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX01DQlNQMSAgIDB4MTE4MTQwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NQ0JTUDIgICAgICAweDQ5MDIyMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUNCU1AyICAgMHgxMTgxNTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX01DQlNQMyAgICAgIDB4NDkwMjQwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9NQ0JTUDMgICAweDExODE2MDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfTUNCU1A0ICAgICAgMHg0OTAyNjAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX01DQlNQNCAgIDB4MTE4MTcwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NQ0JTUDUgICAgICAweDQ4MDk2MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUNCU1A1ICAgMHgxMTgxODAwMAorCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BUSU1FUjUgICAgMHg0OTAzODAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI1IDB4MTE4MDAwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9HUFRJTUVSNiAgICAweDQ5MDNhMDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjYgMHgxMTgwMTAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX0dQVElNRVI3ICAgIDB4NDkwM2MwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSNyAweDExODAyMDAwCisjZGVmaW5lIEw0X1BFUklQSEVSQUxfR1BUSU1FUjggICAgMHg0OTAzZTAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI4IDB4MTE4MDMwMDAKKworI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NQSTEgICAgICAweDQ4MDk4MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfU1BJMSAgIDB4MTE4MWEwMDAKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TUEkyICAgICAgMHg0ODA5YTAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NQSTIgICAweDExODFiMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9NQk9YICAgICAgICAweDQ4MDk0MDAwCisjZGVmaW5lIERTUFZBX1BFUklQSEVSQUxfTUJPWCAgICAgMHgxMTgwODAwMAorCisjZGVmaW5lIFBNX0dSUFNFTF9CQVNFIAkJCTB4NDgzMDcwMDAKKyNkZWZpbmUgRFNQVkFfR1JQU0VMX0JBU0UgCQkweDExODIxMDAwCisKKyNkZWZpbmUgTDRfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDIgICAgICAgIDB4NDkwMjgwMDAKKyNkZWZpbmUgRFNQVkFfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDIgMHgxMTgyNDAwMAorI2RlZmluZSBMNF9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMyAgICAgICAgMHg0OTAyYTAwMAorI2RlZmluZSBEU1BWQV9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMyAweDExODI1MDAwCisKKy8qIGRlZmluZSBhIHN0YXRpYyBhcnJheSB3aXRoIEw0IG1hcHBpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hcF9sNF9wZXJpcGhlcmFsIGw0X3BlcmlwaGVyYWxfdGFibGVbXSA9IHsKKwl7TDRfUEVSSVBIRVJBTF9NQk9YLCBEU1BWQV9QRVJJUEhFUkFMX01CT1h9LAorCXtMNF9QRVJJUEhFUkFMX1NDTSwgRFNQVkFfUEVSSVBIRVJBTF9TQ019LAorCXtMNF9QRVJJUEhFUkFMX01NVSwgRFNQVkFfUEVSSVBIRVJBTF9NTVV9LAorCXtMNF9QRVJJUEhFUkFMX0dQVElNRVI1LCBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI1fSwKKwl7TDRfUEVSSVBIRVJBTF9HUFRJTUVSNiwgRFNQVkFfUEVSSVBIRVJBTF9HUFRJTUVSNn0sCisJe0w0X1BFUklQSEVSQUxfR1BUSU1FUjcsIERTUFZBX1BFUklQSEVSQUxfR1BUSU1FUjd9LAorCXtMNF9QRVJJUEhFUkFMX0dQVElNRVI4LCBEU1BWQV9QRVJJUEhFUkFMX0dQVElNRVI4fSwKKwl7TDRfUEVSSVBIRVJBTF9HUElPMSwgRFNQVkFfUEVSSVBIRVJBTF9HUElPMX0sCisJe0w0X1BFUklQSEVSQUxfR1BJTzIsIERTUFZBX1BFUklQSEVSQUxfR1BJTzJ9LAorCXtMNF9QRVJJUEhFUkFMX0dQSU8zLCBEU1BWQV9QRVJJUEhFUkFMX0dQSU8zfSwKKwl7TDRfUEVSSVBIRVJBTF9HUElPNCwgRFNQVkFfUEVSSVBIRVJBTF9HUElPNH0sCisJe0w0X1BFUklQSEVSQUxfR1BJTzUsIERTUFZBX1BFUklQSEVSQUxfR1BJTzV9LAorCXtMNF9QRVJJUEhFUkFMX0lWQTJXRFQsIERTUFZBX1BFUklQSEVSQUxfSVZBMldEVH0sCisJe0w0X1BFUklQSEVSQUxfRElTUExBWSwgRFNQVkFfUEVSSVBIRVJBTF9ESVNQTEFZfSwKKwl7TDRfUEVSSVBIRVJBTF9TU0ksIERTUFZBX1BFUklQSEVSQUxfU1NJfSwKKwl7TDRfUEVSSVBIRVJBTF9HREQsIERTUFZBX1BFUklQSEVSQUxfR0REfSwKKwl7TDRfUEVSSVBIRVJBTF9TUzEsIERTUFZBX1BFUklQSEVSQUxfU1MxfSwKKwl7TDRfUEVSSVBIRVJBTF9TUzIsIERTUFZBX1BFUklQSEVSQUxfU1MyfSwKKwl7TDRfUEVSSVBIRVJBTF9VQVJUMSwgRFNQVkFfUEVSSVBIRVJBTF9VQVJUMX0sCisJe0w0X1BFUklQSEVSQUxfVUFSVDIsIERTUFZBX1BFUklQSEVSQUxfVUFSVDJ9LAorCXtMNF9QRVJJUEhFUkFMX1VBUlQzLCBEU1BWQV9QRVJJUEhFUkFMX1VBUlQzfSwKKwl7TDRfUEVSSVBIRVJBTF9NQ0JTUDEsIERTUFZBX1BFUklQSEVSQUxfTUNCU1AxfSwKKwl7TDRfUEVSSVBIRVJBTF9NQ0JTUDIsIERTUFZBX1BFUklQSEVSQUxfTUNCU1AyfSwKKwl7TDRfUEVSSVBIRVJBTF9NQ0JTUDMsIERTUFZBX1BFUklQSEVSQUxfTUNCU1AzfSwKKwl7TDRfUEVSSVBIRVJBTF9NQ0JTUDQsIERTUFZBX1BFUklQSEVSQUxfTUNCU1A0fSwKKwl7TDRfUEVSSVBIRVJBTF9NQ0JTUDUsIERTUFZBX1BFUklQSEVSQUxfTUNCU1A1fSwKKwl7TDRfUEVSSVBIRVJBTF9DQU1FUkEsIERTUFZBX1BFUklQSEVSQUxfQ0FNRVJBfSwKKwl7TDRfUEVSSVBIRVJBTF9TUEkxLCBEU1BWQV9QRVJJUEhFUkFMX1NQSTF9LAorCXtMNF9QRVJJUEhFUkFMX1NQSTIsIERTUFZBX1BFUklQSEVSQUxfU1BJMn0sCisJe0w0X1BFUklQSEVSQUxfUFJNLCBEU1BWQV9QRVJJUEhFUkFMX1BSTX0sCisJe0w0X1BFUklQSEVSQUxfQ00sIERTUFZBX1BFUklQSEVSQUxfQ019LAorCXtMNF9QRVJJUEhFUkFMX1BFUiwgRFNQVkFfUEVSSVBIRVJBTF9QRVJ9LAorCXtQTV9HUlBTRUxfQkFTRSwgRFNQVkFfR1JQU0VMX0JBU0V9LAorCXtMNF9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMiwgRFNQVkFfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDJ9LAorCXtMNF9QRVJJUEhFUkFMX1NJREVUT05FX01DQlNQMywgRFNQVkFfUEVSSVBIRVJBTF9TSURFVE9ORV9NQ0JTUDN9LAorCXtMNF9QRVJJUEhFUkFMX05VTEwsIERTUFZBX1BFUklQSEVSQUxfTlVMTH0KK307CisKKy8qCisgKiAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIHwwfDB8MXwwfDB8MHxjfGN8Y3xpfGl8aXxpfGl8aXxpfAorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZpYykgfAorICoKKyAqICB3aGVyZSAgYyAtPiBFeHRlcm5lbCBDbG9jayBDb21tYW5kOiBDbGsgJiBBdXRvaWRsZSBEaXNhYmxlL0VuYWJsZQorICogIGkgLT4gRXh0ZXJuYWwgQ2xvY2sgSUQgVGltZXJzIDUsNiw3LDgsIE1jQlNQMSwyIGFuZCBXRFQzCisgKi8KKworLyogTUJYX1BNX0NMS19JRE1BU0s6IERTUCBFeHRlcm5hbCBjbG9jayBpZCBtYXNrLiAqLworI2RlZmluZSBNQlhfUE1fQ0xLX0lETUFTSyAgIDB4N0YKKworLyogTUJYX1BNX0NMS19DTURTSElGVDogRFNQIEV4dGVybmFsIGNsb2NrIGNvbW1hbmQgc2hpZnQuICovCisjZGVmaW5lIE1CWF9QTV9DTEtfQ01EU0hJRlQgNworCisvKiBNQlhfUE1fQ0xLX0NNRE1BU0s6IERTUCBFeHRlcm5hbCBjbG9jayBjb21tYW5kIG1hc2suICovCisjZGVmaW5lIE1CWF9QTV9DTEtfQ01ETUFTSyA3CisKKy8qIE1CWF9QTV9NQVhfUkVTT1VSQ0VTOiBDT1JFIDEgQ2xvY2sgcmVzb3VyY2VzLiAqLworI2RlZmluZSBNQlhfQ09SRTFfUkVTT1VSQ0VTIDcKKworLyogTUJYX1BNX01BWF9SRVNPVVJDRVM6IENPUkUgMiBDbG9jayBSZXNvdXJjZXMuICovCisjZGVmaW5lIE1CWF9DT1JFMl9SRVNPVVJDRVMgMQorCisvKiBNQlhfUE1fTUFYX1JFU09VUkNFUzogVE9UQUwgQ2xvY2sgUmVvc3VyY2VzLiAqLworI2RlZmluZSBNQlhfUE1fTUFYX1JFU09VUkNFUyAxMQorCisvKiAgUG93ZXIgTWFuYWdlbWVudCBDb21tYW5kcyAqLworI2RlZmluZSBCUFdSX0RJU0FCTEVfQ0xPQ0sJMAorI2RlZmluZSBCUFdSX0VOQUJMRV9DTE9DSwkxCisKKy8qIE9NQVAyNDJ4IHNwZWNpZmljIHJlc291cmNlcyAqLworZW51bSBicHdyX2V4dF9jbG9ja19pZCB7CisJQlBXUl9HUF9USU1FUjUgPSAweDEwLAorCUJQV1JfR1BfVElNRVI2LAorCUJQV1JfR1BfVElNRVI3LAorCUJQV1JfR1BfVElNRVI4LAorCUJQV1JfV0RfVElNRVIzLAorCUJQV1JfTUNCU1AxLAorCUJQV1JfTUNCU1AyLAorCUJQV1JfTUNCU1AzLAorCUJQV1JfTUNCU1A0LAorCUJQV1JfTUNCU1A1LAorCUJQV1JfU1NJID0gMHgyMAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBicHdyX2Nsa2lkW10gPSB7CisJKHUzMikgQlBXUl9HUF9USU1FUjUsCisJKHUzMikgQlBXUl9HUF9USU1FUjYsCisJKHUzMikgQlBXUl9HUF9USU1FUjcsCisJKHUzMikgQlBXUl9HUF9USU1FUjgsCisJKHUzMikgQlBXUl9XRF9USU1FUjMsCisJKHUzMikgQlBXUl9NQ0JTUDEsCisJKHUzMikgQlBXUl9NQ0JTUDIsCisJKHUzMikgQlBXUl9NQ0JTUDMsCisJKHUzMikgQlBXUl9NQ0JTUDQsCisJKHUzMikgQlBXUl9NQ0JTUDUsCisJKHUzMikgQlBXUl9TU0kKK307CisKK3N0cnVjdCBicHdyX2Nsa190IHsKKwl1MzIgY2xrX2lkOworCWVudW0gZHNwX2Nsa19pZCBjbGs7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJwd3JfY2xrX3QgYnB3cl9jbGtzW10gPSB7CisJeyh1MzIpIEJQV1JfR1BfVElNRVI1LCBEU1BfQ0xLX0dQVDV9LAorCXsodTMyKSBCUFdSX0dQX1RJTUVSNiwgRFNQX0NMS19HUFQ2fSwKKwl7KHUzMikgQlBXUl9HUF9USU1FUjcsIERTUF9DTEtfR1BUN30sCisJeyh1MzIpIEJQV1JfR1BfVElNRVI4LCBEU1BfQ0xLX0dQVDh9LAorCXsodTMyKSBCUFdSX1dEX1RJTUVSMywgRFNQX0NMS19XRFQzfSwKKwl7KHUzMikgQlBXUl9NQ0JTUDEsIERTUF9DTEtfTUNCU1AxfSwKKwl7KHUzMikgQlBXUl9NQ0JTUDIsIERTUF9DTEtfTUNCU1AyfSwKKwl7KHUzMikgQlBXUl9NQ0JTUDMsIERTUF9DTEtfTUNCU1AzfSwKKwl7KHUzMikgQlBXUl9NQ0JTUDQsIERTUF9DTEtfTUNCU1A0fSwKKwl7KHUzMikgQlBXUl9NQ0JTUDUsIERTUF9DTEtfTUNCU1A1fSwKKwl7KHUzMikgQlBXUl9TU0ksIERTUF9DTEtfU1NJfQorfTsKKworLyogSW50ZXJydXB0IFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgSU5USF9JVF9SRUdfT0ZGU0VUICAgICAgICAgICAgICAweDAwCS8qIEludGVycnVwdCByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgSU5USF9NQVNLX0lUX1JFR19PRkZTRVQgICAgICAgICAweDA0CS8qIE1hc2sgSW50ZXJydXB0IHJlZyBvZmZzZXQgKi8KKworI2RlZmluZSAgIERTUF9NQUlMQk9YMV9JTlQgICAgICAgICAgICAgIDEwCisvKgorICogIEJpdCBkZWZpbml0aW9uIG9mICBJbnRlcnJ1cHQgIExldmVsICBSZWdpc3RlcnMKKyAqLworCisvKiBNYWlsIEJveCBkZWZpbmVzICovCisjZGVmaW5lIE1CX0FSTTJEU1AxX1JFR19PRkZTRVQgICAgICAgICAgMHgwMAorCisjZGVmaW5lIE1CX0FSTTJEU1AxQl9SRUdfT0ZGU0VUICAgICAgICAgMHgwNAorCisjZGVmaW5lIE1CX0RTUDJBUk0xQl9SRUdfT0ZGU0VUICAgICAgICAgMHgwQworCisjZGVmaW5lIE1CX0FSTTJEU1AxX0ZMQUdfUkVHX09GRlNFVCAgICAgMHgxOAorCisjZGVmaW5lIE1CX0FSTTJEU1BfRkxBRyAgICAgICAgICAgICAgICAgMHgwMDAxCisKKyNkZWZpbmUgTUJPWF9BUk0yRFNQIEhXX01CT1hfSUQwCisjZGVmaW5lIE1CT1hfRFNQMkFSTSBIV19NQk9YX0lEMQorI2RlZmluZSBNQk9YX0FSTSBIV19NQk9YX1UwX0FSTQorI2RlZmluZSBNQk9YX0RTUCBIV19NQk9YX1UxX0RTUDEKKworI2RlZmluZSBFTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyNkZWZpbmUgRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorCisjZGVmaW5lIEhJR0hfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorI2RlZmluZSBMT1dfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisKKy8qIE1hY3JvJ3MgKi8KKyNkZWZpbmUgQ0xFQVJfQklUKHJlZywgbWFzaykgICAgICAgICAgICAgKHJlZyAmPSB+bWFzaykKKyNkZWZpbmUgU0VUX0JJVChyZWcsIG1hc2spICAgICAgICAgICAgICAgKHJlZyB8PSBtYXNrKQorCisjZGVmaW5lIFNFVF9HUk9VUF9CSVRTMTYocmVnLCBwb3NpdGlvbiwgd2lkdGgsIHZhbHVlKSBcCisJZG8ge1wKKwkJcmVnICY9IH4oKDB4RkZGRiA+PiAoMTYgLSAod2lkdGgpKSkgPDwgKHBvc2l0aW9uKSkgOyBcCisJCXJlZyB8PSAoKHZhbHVlICYgKDB4RkZGRiA+PiAoMTYgLSAod2lkdGgpKSkpIDw8IChwb3NpdGlvbikpOyBcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgQ0xFQVJfQklUX0lOREVYKHJlZywgaW5kZXgpICAgKHJlZyAmPSB+KDEgPDwgKGluZGV4KSkpCisKKy8qIFRoaXMgQnJpZGdlIGRyaXZlcidzIGRldmljZSBjb250ZXh0OiAqLworc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCB7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBIYW5kbGUgdG8gQnJpZGdlIGRldmljZSBvYmplY3QuICovCisJdTMyIGR3X2RzcF9iYXNlX2FkZHI7CS8qIEFybSdzIEFQSSB0byBEU1AgdmlydCBiYXNlIGFkZHIgKi8KKwkvKgorCSAqIERTUCBFeHRlcm5hbCBtZW1vcnkgcHJvZyBhZGRyZXNzIGFzIHNlZW4gdmlydHVhbGx5IGJ5IHRoZSBPUyBvbgorCSAqIHRoZSBob3N0IHNpZGUuCisJICovCisJdTMyIGR3X2RzcF9leHRfYmFzZV9hZGRyOwkvKiBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgKi8KKwl1MzIgZHdfYXBpX3JlZ19iYXNlOwkvKiBBUEkgbWVtIG1hcCdkIHJlZ2lzdGVycyAqLworCXZvaWQgX19pb21lbSAqZHdfZHNwX21tdV9iYXNlOwkvKiBEU1AgTU1VIE1hcHBlZCByZWdpc3RlcnMgKi8KKwl1MzIgZHdfYXBpX2Nsa19iYXNlOwkvKiBDTEsgUmVnaXN0ZXJzICovCisJdTMyIGR3X2RzcF9jbGtfbTJfYmFzZTsJLyogRFNQIENsb2NrIE1vZHVsZSBtMiAqLworCXUzMiBkd19wdWJsaWNfcmhlYTsJLyogUHViIFJoZWEgKi8KKwl1MzIgZHdfaW50X2FkZHI7CS8qIE1CIElOVFIgcmVnICovCisJdTMyIGR3X3RjX2VuZGlhbmlzbTsJLyogVEMgRW5kaWFuaXNtIHJlZ2lzdGVyICovCisJdTMyIGR3X3Rlc3RfYmFzZTsJLyogRFNQIE1NVSBNYXBwZWQgcmVnaXN0ZXJzICovCisJdTMyIGR3X3NlbGZfbG9vcDsJLyogUG9pbnRlciB0byB0aGUgc2VsZmxvb3AgKi8KKwl1MzIgZHdfZHNwX3N0YXJ0X2FkZDsJLyogQVBJIEJvb3QgdmVjdG9yICovCisJdTMyIGR3X2ludGVybmFsX3NpemU7CS8qIEludGVybmFsIG1lbW9yeSBzaXplICovCisKKwlzdHJ1Y3Qgb21hcF9tYm94ICptYm94OwkJLyogTWFpbCBib3ggaGFuZGxlICovCisKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsJLyogSG9zdCBSZXNvdXJjZXMgKi8KKworCS8qCisJICogUHJvY2Vzc29yIHNwZWNpZmljIGluZm8gaXMgc2V0IHdoZW4gcHJvZyBsb2FkZWQgYW5kIHJlYWQgZnJvbSBEQ0QuCisJICogW1NlZSBicmlkZ2VfZGV2X2N0cmwoKV0gIFBST0MgaW5mbyBjb250YWlucyBEU1AtTU1VIFRMQiBlbnRyaWVzLgorCSAqLworCS8qIERNTVUgVExCIGVudHJpZXMgKi8KKwlzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgYXRsYl9lbnRyeVtCUkRJT0NUTF9OVU1PRk1NVVRMQl07CisJdTMyIGR3X2JyZF9zdGF0ZTsgICAgICAgLyogTGFzdCBrbm93biBib2FyZCBzdGF0ZS4gKi8KKworCS8qIFRDIFNldHRpbmdzICovCisJYm9vbCB0Y193b3JkX3N3YXBfb247CS8qIFRyYWZmaWMgQ29udHJvbGxlciBXb3JkIFN3YXAgKi8KKwlzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgKnB0X2F0dHJzOworCXUzMiBkc3BfcGVyX2Nsa3M7Cit9OworCisvKgorICogSWYgZHNwX2RlYnVnIGlzIHRydWUsIGRvIG5vdCBicmFuY2ggdG8gdGhlIERTUCBlbnRyeQorICogcG9pbnQgYW5kIHdhaXQgZm9yIERTUCB0byBib290LgorICovCitleHRlcm4gczMyIGRzcF9kZWJ1ZzsKKworLyoKKyAqICA9PT09PT09PSBzbV9pbnRlcnJ1cHRfZHNwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0IGludGVycnVwdCB2YWx1ZSAmIHNlbmQgYW4gaW50ZXJydXB0IHRvIHRoZSBEU1AgcHJvY2Vzc29yKHMpLgorICogICAgICBUaGlzIGlzIHR5cGljYWx5IHVzZWQgd2hlbiBtYWlsYm94IGludGVycnVwdCBtZWNoYW5pc21zIGFsbG93IGRhdGEKKyAqICAgICAgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGludGVycnVwdCBzdWNoIGFzIGZvciBPTUFQJ3MgQ01EL0RBVEEgcmVncy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY29udGV4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgbWJfdmFsOiAgICAgICAgIFZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpbnRlcnJ1cHQoZS5nLiBtYWlsYm94IHZhbHVlKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgSW50ZXJydXB0IHNlbnQ7CisgKiAgICAgIGVsc2U6ICAgICAgICAgICBVbmFibGUgdG8gc2VuZCBpbnRlcnJ1cHQuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworaW50IHNtX2ludGVycnVwdF9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHUxNiBtYl92YWwpOworCisjZW5kaWYgLyogX1RJT01BUF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL190aW9tYXBfcHdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwX3B3ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMDM1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9fdGlvbWFwX3B3ci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBfdGlvbWFwX3B3ci5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluaXRpb25zIGFuZCB0eXBlcyBmb3IgdGhlIERTUCB3YWtlL3NsZWVwIHJvdXRpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1RJT01BUF9QV1JfCisjZGVmaW5lIF9USU9NQVBfUFdSXworCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gczMyIGRzcF90ZXN0X3NsZWVwc3RhdGU7CisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCBtYWlsYm94X2NvbnRleHQgbWJveHNldHRpbmc7CisKKy8qCisgKiA9PT09PT09PSB3YWtlX2RzcCA9PT09PT09PT0KKyAqIFdha2VzIHVwIHRoZSBEU1AgZnJvbSBEZWVwU2xlZXAKKyAqLworZXh0ZXJuIGludCB3YWtlX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkJCQl2b2lkICpwYXJncyk7CisKKy8qCisgKiA9PT09PT09PSBzbGVlcF9kc3AgPT09PT09PT09CisgKiBQbGFjZXMgdGhlIERTUCBpbiBEZWVwU2xlZXAuCisgKi8KK2V4dGVybiBpbnQgc2xlZXBfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJICAgIHUzMiBkd19jbWQsIHZvaWQgKnBhcmdzKTsKKy8qCisgKiAgPT09PT09PT1pbnRlcnJ1cHRfZHNwPT09PT09PT0KKyAqICAJICBTZW5kcyBhbiBpbnRlcnJ1cHQgdG8gRFNQIHVuY29uZGl0aW9uYWxseS4KKyAqLworZXh0ZXJuIHZvaWQgaW50ZXJydXB0X2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkJCQl1MTYgbWJfdmFsKTsKKworLyoKKyAqID09PT09PT09IHdha2VfZHNwID09PT09PT09PQorICogV2FrZXMgdXAgdGhlIERTUCBmcm9tIERlZXBTbGVlcAorICovCitleHRlcm4gaW50IGRzcF9wZXJpcGhlcmFsX2Nsa19jdHJsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJKmRldl9jb250ZXh0LCB2b2lkICpwYXJncyk7CisvKgorICogID09PT09PT09IGhhbmRsZV9oaWJlcm5hdGlvbl9mcm9tX2RzcCA9PT09PT09PQorICogIAlIYW5kbGUgSGliZXJuYXRpb24gcmVxdWVzdGVkIGZyb20gRFNQCisgKi8KK2ludCBoYW5kbGVfaGliZXJuYXRpb25fZnJvbV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpOworLyoKKyAqICA9PT09PT09PSBwb3N0X3NjYWxlX2RzcCA9PT09PT09PQorICogIAlIYW5kbGUgUG9zdCBTY2FsZSBub3RpZmljYXRpb24gdG8gRFNQCisgKi8KK2ludCBwb3N0X3NjYWxlX2RzcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkJCQl2b2lkICpwYXJncyk7CisvKgorICogID09PT09PT09IHByZV9zY2FsZV9kc3AgPT09PT09PT0KKyAqICAJSGFuZGxlIFByZSBTY2FsZSBub3RpZmljYXRpb24gdG8gRFNQCisgKi8KK2ludCBwcmVfc2NhbGVfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQkJCXZvaWQgKnBhcmdzKTsKKy8qCisgKiAgPT09PT09PT0gaGFuZGxlX2NvbnN0cmFpbnRzX3NldCA9PT09PT09PQorICogIAlIYW5kbGUgY29uc3RyYWludHMgcmVxdWVzdCBmcm9tIERTUAorICovCitpbnQgaGFuZGxlX2NvbnN0cmFpbnRzX3NldChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgIHZvaWQgKnBhcmdzKTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX3dha2V1cF9ldmVudF9jdHJsID09PT09PT09CisgKiAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBncm91cCBzZWxjdGlvbiBiaXRzIGZvciB3aGlsZQorICogICAgIGVuYWJsaW5nL2Rpc2FibGluZy4KKyAqLwordm9pZCBkc3BfY2xrX3dha2V1cF9ldmVudF9jdHJsKHUzMiBjbG9ja19pZCwgYm9vbCBlbmFibGUpOworCisjZW5kaWYgLyogX1RJT01BUF9QV1JfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9jaG5sX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlMmIyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2Nobmxfc20uYwpAQCAtMCwwICsxLDEwMTQgQEAKKy8qCisgKiBjaG5sX3NtLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50cyB1cHBlciBlZGdlIGZ1bmN0aW9ucyBmb3IgQnJpZGdlIGRyaXZlciBjaGFubmVsIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKgorICogICAgICBUaGUgbG93ZXIgZWRnZSBmdW5jdGlvbnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSB0aGUgQnJpZGdlIGRyaXZlcgorICogICAgICB3cml0ZXIsIGFuZCBhcmUgZGVjbGFyZWQgaW4gY2hubF9zbS5oLgorICoKKyAqICAgICAgQ2FyZSBpcyB0YWtlbiBpbiB0aGlzIGNvZGUgdG8gcHJldmVudCBzaW11bGF0YW5lb3VzIGFjY2VzcyB0byBjaGFubmVsCisgKiAgICAgIHF1ZXVlcyBmcm9tCisgKiAgICAgIDEuIFRocmVhZHMuCisgKiAgICAgIDIuIGlvX2RwYygpLCBzY2hlZHVsZWQgZnJvbSB0aGUgaW9faXNyKCkgYXMgYW4gZXZlbnQuCisgKgorICogICAgICBUaGlzIGlzIGRvbmUgcHJpbWFyaWx5IGJ5OgorICogICAgICAtIFNlbWFwaG9yZXMuCisgKiAgICAgIC0gc3RhdGUgZmxhZ3MgaW4gdGhlIGNoYW5uZWwgb2JqZWN0OyBhbmQKKyAqICAgICAgLSBlbnN1cmluZyB0aGUgSU9fRGlzcGF0Y2goKSByb3V0aW5lLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBib3RoCisgKiAgICAgICAgQ0hOTF9BZGRJT1JlcSgpIGFuZCB0aGUgRFBDKGlmIGltcGxlbWVudGVkKSwgaXMgbm90IHJlLWVudGVyZWQuCisgKgorICogIENoYW5uZWwgSW52YXJpYW50OgorICogICAgICBUaGVyZSBpcyBhbiBpbXBvcnRhbnQgaW52YXJpYW50IGNvbmRpdGlvbiB3aGljaCBtdXN0IGJlIG1haW50YWluZWQgcGVyCisgKiAgICAgIGNoYW5uZWwgb3V0c2lkZSBvZiBicmlkZ2VfY2hubF9nZXRfaW9jKCkgYW5kIElPX0Rpc3BhdGNoKCksIHZpb2xhdGlvbiBvZgorICogICAgICB3aGljaCBtYXkgY2F1c2UgdGltZW91dHMgYW5kL29yIGZhaWx1cmUgb2ZmdW5jdGlvbiBzeW5jX3dhaXRfb25fZXZlbnQuCisgKiAgICAgIFRoaXMgaW52YXJpYW50IGNvbmRpdGlvbiBpczoKKyAqCisgKiAgICAgICAgICBMU1RfRW1wdHkocGNobmwtPnBpb19jb21wbGV0aW9ucykgPT0+IHBjaG5sLT5zeW5jX2V2ZW50IGlzIHJlc2V0CisgKiAgICAgIGFuZAorICogICAgICAgICAgIUxTVF9FbXB0eShwY2hubC0+cGlvX2NvbXBsZXRpb25zKSA9PT4gcGNobmwtPnN5bmNfZXZlbnQgaXMgc2V0LgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BjaG5sLmg+CisjaW5jbHVkZSAiX3Rpb21hcC5oIgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9pb19zbS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lIGZvciBUaGlzICovCisjZGVmaW5lIFVTRVJNT0RFX0FERFIgICBQQUdFX09GRlNFVAorCisjZGVmaW5lIE1BSUxCT1hfSVJRIElOVF9NQUlMX01QVV9JUlEKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgbHN0X2xpc3QgKmNyZWF0ZV9jaGlycF9saXN0KHUzMiBjaGlycHMpOworCitzdGF0aWMgdm9pZCBmcmVlX2NoaXJwX2xpc3Qoc3RydWN0IGxzdF9saXN0ICpjaGlycF9saXN0KTsKKworc3RhdGljIHN0cnVjdCBjaG5sX2lycCAqbWFrZV9uZXdfY2hpcnAodm9pZCk7CisKK3N0YXRpYyBpbnQgc2VhcmNoX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiwKKwkJCQkgICAgICB1MzIgKmNobmwpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2FkZF9pb19yZXEgPT09PT09PT0KKyAqICAgICAgRW5xdWV1ZSBhbiBJL08gcmVxdWVzdCBmb3IgZGF0YSB0cmFuc2ZlciBvbiBhIGNoYW5uZWwgdG8gdGhlIERTUC4KKyAqICAgICAgVGhlIGRpcmVjdGlvbiAobW9kZSkgaXMgc3BlY2lmaWVkIGluIHRoZSBjaGFubmVsIG9iamVjdC4gTm90ZSB0aGUgRFNQCisgKiAgICAgIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGZvciBjaGFubmVscyBvcGVuZWQgaW4gZGlyZWN0IEkvTyBtb2RlLgorICovCitpbnQgYnJpZGdlX2NobmxfYWRkX2lvX3JlcShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLCB2b2lkICpob3N0X2J1ZiwKKwkJCSAgICAgICB1MzIgYnl0ZV9zaXplLCB1MzIgYnVmX3NpemUsCisJCQkgICAgICAgdTMyIGR3X2RzcF9hZGRyLCB1MzIgZHdfYXJnKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7CisJc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmogPSBOVUxMOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0OworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOworCXU4IGR3X3N0YXRlOworCWJvb2wgaXNfZW9zOworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqID0gcGNobmwtPmNobmxfbWdyX29iajsKKwl1OCAqaG9zdF9zeXNfYnVmID0gTlVMTDsKKwlib29sIHNjaGVkX2RwYyA9IGZhbHNlOworCXUxNiBtYl92YWwgPSAwOworCisJaXNfZW9zID0gKGJ5dGVfc2l6ZSA9PSAwKTsKKworCS8qIFZhbGlkYXRlIGFyZ3MgKi8KKwlpZiAoIWhvc3RfYnVmIHx8ICFwY2hubCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSBpZiAoaXNfZW9zICYmIENITkxfSVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENoZWNrIHRoZSBjaGFubmVsIHN0YXRlOiBvbmx5IHF1ZXVlIGNoaXJwIGlmIGNoYW5uZWwgc3RhdGUKKwkJICogYWxsb3dzIGl0LgorCQkgKi8KKwkJZHdfc3RhdGUgPSBwY2hubC0+ZHdfc3RhdGU7CisJCWlmIChkd19zdGF0ZSAhPSBDSE5MX1NUQVRFUkVBRFkpIHsKKwkJCWlmIChkd19zdGF0ZSAmIENITkxfU1RBVEVDQU5DRUwpCisJCQkJc3RhdHVzID0gLUVDQU5DRUxFRDsKKwkJCWVsc2UgaWYgKChkd19zdGF0ZSAmIENITkxfU1RBVEVFT1MpICYmCisJCQkJIENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKQorCQkJCXN0YXR1cyA9IC1FUElQRTsKKwkJCWVsc2UKKwkJCQkvKiBObyBvdGhlciBwb3NzaWJsZSBzdGF0ZXMgbGVmdCAqLworCQkJCURCQ19BU1NFUlQoMCk7CisJCX0KKwl9CisKKwlkZXZfb2JqID0gZGV2X2dldF9maXJzdCgpOworCWRldl9nZXRfYnJpZGdlX2NvbnRleHQoZGV2X29iaiwgJmRldl9jdHh0KTsKKwlpZiAoIWRldl9jdHh0KQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCWlmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSAmJiBwY2hubC0+Y2hubF9pZCA+IDEgJiYgaG9zdF9idWYpIHsKKwkJaWYgKCEoaG9zdF9idWYgPCAodm9pZCAqKVVTRVJNT0RFX0FERFIpKSB7CisJCQlob3N0X3N5c19idWYgPSBob3N0X2J1ZjsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisJCS8qIGlmIGFkZHIgaW4gdXNlciBtb2RlLCB0aGVuIGNvcHkgdG8ga2VybmVsIHNwYWNlICovCisJCWhvc3Rfc3lzX2J1ZiA9IGttYWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOworCQlpZiAoaG9zdF9zeXNfYnVmID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisJCWlmIChDSE5MX0lTX09VVFBVVChwY2hubC0+Y2hubF9tb2RlKSkgeworCQkJc3RhdHVzID0gY29weV9mcm9tX3VzZXIoaG9zdF9zeXNfYnVmLCBob3N0X2J1ZiwKKwkJCQkJCWJ1Zl9zaXplKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlrZnJlZShob3N0X3N5c19idWYpOworCQkJCWhvc3Rfc3lzX2J1ZiA9IE5VTEw7CisJCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCQlnb3RvIGZ1bmNfZW5kOworCQkJfQorCQl9CisJfQorZnVuY19jb250OgorCS8qIE1haWxib3ggSVJRIGlzIGRpc2FibGVkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIHdpdGggRE1BL1pDUFkKKwkgKiBjaGFubmVscy4gRFBDQ1MgaXMgaGVsZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBQQ1BZIGNoYW5uZWxzLgorCSAqIElmIERQQyBpcyBzY2hlZHVsZWQgaW4gcHJvY2VzcyBjb250ZXh0IChpb3NtX3NjaGVkdWxlKSBhbmQgYW55CisJICogbm9uLW1haWxib3ggaW50ZXJydXB0IG9jY3VycywgdGhhdCBEUEMgd2lsbCBydW4gYW5kIGJyZWFrIENTLiBIZW5jZQorCSAqIHdlIGRpc2FibGUgQUxMIERQQ3MuIFdlIHdpbGwgdHJ5IHRvIGRpc2FibGUgT05MWSBJTyBEUEMgbGF0ZXIuICovCisJc3Bpbl9sb2NrX2JoKCZjaG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOworCW9tYXBfbWJveF9kaXNhYmxlX2lycShkZXZfY3R4dC0+bWJveCwgSVJRX1JYKTsKKwlpZiAocGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkpIHsKKwkJLyogVGhpcyBpcyBhIHByb2Nlc3Nvci1jb3B5IGNoYW5uZWwuICovCisJCWlmICghc3RhdHVzICYmIENITkxfSVNfT1VUUFVUKHBjaG5sLT5jaG5sX21vZGUpKSB7CisJCQkvKiBDaGVjayBidWZmZXIgc2l6ZSBvbiBvdXRwdXQgY2hhbm5lbHMgZm9yIGZpdC4gKi8KKwkJCWlmIChieXRlX3NpemUgPgorCQkJICAgIGlvX2J1Zl9zaXplKHBjaG5sLT5jaG5sX21ncl9vYmotPmhpb19tZ3IpKQorCQkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBHZXQgYSBmcmVlIGNoaXJwOiAqLworCQljaG5sX3BhY2tldF9vYmogPQorCQkgICAgKHN0cnVjdCBjaG5sX2lycCAqKWxzdF9nZXRfaGVhZChwY2hubC0+ZnJlZV9wYWNrZXRzX2xpc3QpOworCQlpZiAoY2hubF9wYWNrZXRfb2JqID09IE5VTEwpCisJCQlzdGF0dXMgPSAtRUlPOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIEVucXVldWUgdGhlIGNoaXJwIG9uIHRoZSBjaG5sJ3MgSU9SZXF1ZXN0IHF1ZXVlOiAqLworCQljaG5sX3BhY2tldF9vYmotPmhvc3RfdXNlcl9idWYgPSBjaG5sX3BhY2tldF9vYmotPmhvc3Rfc3lzX2J1ZiA9CisJCSAgICBob3N0X2J1ZjsKKwkJaWYgKHBjaG5sLT5jaG5sX3R5cGUgPT0gQ0hOTF9QQ1BZICYmIHBjaG5sLT5jaG5sX2lkID4gMSkKKwkJCWNobmxfcGFja2V0X29iai0+aG9zdF9zeXNfYnVmID0gaG9zdF9zeXNfYnVmOworCisJCS8qCisJCSAqIE5vdGU6IGZvciBkbWEgY2hhbnMgZHdfZHNwX2FkZHIgY29udGFpbnMgZHNwIGFkZHJlc3MKKwkJICogb2YgU00gYnVmZmVyLgorCQkgKi8KKwkJREJDX0FTU0VSVChjaG5sX21ncl9vYmotPndvcmRfc2l6ZSAhPSAwKTsKKwkJLyogRFNQIGFkZHJlc3MgKi8KKwkJY2hubF9wYWNrZXRfb2JqLT5kc3BfdHhfYWRkciA9CisJCSAgICBkd19kc3BfYWRkciAvIGNobmxfbWdyX29iai0+d29yZF9zaXplOworCQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IGJ5dGVfc2l6ZTsKKwkJY2hubF9wYWNrZXRfb2JqLT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCQkvKiBPbmx5IHZhbGlkIGZvciBvdXRwdXQgY2hhbm5lbCAqLworCQljaG5sX3BhY2tldF9vYmotPmR3X2FyZyA9IGR3X2FyZzsKKwkJY2hubF9wYWNrZXRfb2JqLT5zdGF0dXMgPSAoaXNfZW9zID8gQ0hOTF9JT0NTVEFURU9TIDoKKwkJCQkJICAgQ0hOTF9JT0NTVEFUQ09NUExFVEUpOworCQlsc3RfcHV0X3RhaWwocGNobmwtPnBpb19yZXF1ZXN0cywKKwkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiljaG5sX3BhY2tldF9vYmopOworCQlwY2hubC0+Y2lvX3JlcXMrKzsKKwkJREJDX0FTU0VSVChwY2hubC0+Y2lvX3JlcXMgPD0gcGNobmwtPmNobmxfcGFja2V0cyk7CisJCS8qCisJCSAqIElmIGVuZCBvZiBzdHJlYW0sIHVwZGF0ZSB0aGUgY2hhbm5lbCBzdGF0ZSB0byBwcmV2ZW50CisJCSAqIG1vcmUgSU9SJ3MuCisJCSAqLworCQlpZiAoaXNfZW9zKQorCQkJcGNobmwtPmR3X3N0YXRlIHw9IENITkxfU1RBVEVFT1M7CisKKwkJLyogTGVnYWN5IERTTSBQcm9jZXNzb3ItQ29weSAqLworCQlEQkNfQVNTRVJUKHBjaG5sLT5jaG5sX3R5cGUgPT0gQ0hOTF9QQ1BZKTsKKwkJLyogUmVxdWVzdCBJTyBmcm9tIHRoZSBEU1AgKi8KKwkJaW9fcmVxdWVzdF9jaG5sKGNobmxfbWdyX29iai0+aGlvX21nciwgcGNobmwsCisJCQkJKENITkxfSVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkgPyBJT19JTlBVVCA6CisJCQkJIElPX09VVFBVVCksICZtYl92YWwpOworCQlzY2hlZF9kcGMgPSB0cnVlOworCisJfQorCW9tYXBfbWJveF9lbmFibGVfaXJxKGRldl9jdHh0LT5tYm94LCBJUlFfUlgpOworCXNwaW5fdW5sb2NrX2JoKCZjaG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOworCWlmIChtYl92YWwgIT0gMCkKKwkJc21faW50ZXJydXB0X2RzcChkZXZfY3R4dCwgbWJfdmFsKTsKKworCS8qIFNjaGVkdWxlIGEgRFBDLCB0byBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KKwlpZiAoc2NoZWRfZHBjKQorCQlpb3NtX3NjaGVkdWxlKGNobmxfbWdyX29iai0+aGlvX21ncik7CisKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2FuY2VsX2lvID09PT09PT09CisgKiAgICAgIFJldHVybiBhbGwgSS9PIHJlcXVlc3RzIHRvIHRoZSBjbGllbnQgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4KKyAqICAgICAgdHJhbnNmZXJyZWQuICBUaGUgY2hhbm5lbCdzIEkvTyBjb21wbGV0aW9uIG9iamVjdCBpcworICogICAgICBzaWduYWxsZWQsIGFuZCBhbGwgdGhlIEkvTyByZXF1ZXN0cyBhcmUgcXVldWVkIGFzIElPQydzLCB3aXRoIHRoZQorICogICAgICBzdGF0dXMgZmllbGQgc2V0IHRvIENITkxfSU9DU1RBVENBTkNFTC4KKyAqICAgICAgVGhpcyBjYWxsIGlzIHR5cGljYWxseSB1c2VkIGluIGFib3J0IHNpdHVhdGlvbnMsIGFuZCBpcyBhIHByZWx1ZGUgdG8KKyAqICAgICAgY2hubF9jbG9zZSgpOworICovCitpbnQgYnJpZGdlX2NobmxfY2FuY2VsX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCA9IChzdHJ1Y3QgY2hubF9vYmplY3QgKiljaG5sX29iajsKKwl1MzIgY2hubF9pZCA9IC0xOworCXM4IGNobmxfbW9kZTsKKwlzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iajsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiA9IE5VTEw7CisKKwkvKiBDaGVjayBhcmdzOiAqLworCWlmIChwY2hubCAmJiBwY2hubC0+Y2hubF9tZ3Jfb2JqKSB7CisJCWNobmxfaWQgPSBwY2hubC0+Y2hubF9pZDsKKwkJY2hubF9tb2RlID0gcGNobmwtPmNobmxfbW9kZTsKKwkJY2hubF9tZ3Jfb2JqID0gcGNobmwtPmNobmxfbWdyX29iajsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogIE1hcmsgdGhpcyBjaGFubmVsIGFzIGNhbmNlbGxlZCwgdG8gcHJldmVudCBmdXJ0aGVyIElPUmVxdWVzdHMgb3IKKwkgKiAgSU9SZXF1ZXN0cyBvciBkaXNwYXRjaGluZy4gKi8KKwlzcGluX2xvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJcGNobmwtPmR3X3N0YXRlIHw9IENITkxfU1RBVEVDQU5DRUw7CisJaWYgKExTVF9JU19FTVBUWShwY2hubC0+cGlvX3JlcXVlc3RzKSkKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlpZiAocGNobmwtPmNobmxfdHlwZSA9PSBDSE5MX1BDUFkpIHsKKwkJLyogSW5kaWNhdGUgd2UgaGF2ZSBubyBtb3JlIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciB0cmFuc2ZlcjogKi8KKwkJaWYgKENITkxfSVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkpIHsKKwkJCWlvX2NhbmNlbF9jaG5sKGNobmxfbWdyX29iai0+aGlvX21nciwgY2hubF9pZCk7CisJCX0gZWxzZSB7CisJCQkvKiBSZWNvcmQgdGhhdCB3ZSBubyBsb25nZXIgaGF2ZSBvdXRwdXQgYnVmZmVycworCQkJICogYXZhaWxhYmxlOiAqLworCQkJY2hubF9tZ3Jfb2JqLT5kd19vdXRwdXRfbWFzayAmPSB+KDEgPDwgY2hubF9pZCk7CisJCX0KKwl9CisJLyogTW92ZSBhbGwgSU9SJ3MgdG8gSU9DIHF1ZXVlOiAqLworCXdoaWxlICghTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fcmVxdWVzdHMpKSB7CisJCWNobmxfcGFja2V0X29iaiA9CisJCSAgICAoc3RydWN0IGNobmxfaXJwICopbHN0X2dldF9oZWFkKHBjaG5sLT5waW9fcmVxdWVzdHMpOworCQlpZiAoY2hubF9wYWNrZXRfb2JqKSB7CisJCQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSA9IDA7CisJCQljaG5sX3BhY2tldF9vYmotPnN0YXR1cyB8PSBDSE5MX0lPQ1NUQVRDQU5DRUw7CisJCQlsc3RfcHV0X3RhaWwocGNobmwtPnBpb19jb21wbGV0aW9ucywKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopY2hubF9wYWNrZXRfb2JqKTsKKwkJCXBjaG5sLT5jaW9fY3MrKzsKKwkJCXBjaG5sLT5jaW9fcmVxcy0tOworCQkJREJDX0FTU0VSVChwY2hubC0+Y2lvX3JlcXMgPj0gMCk7CisJCX0KKwl9CitmdW5jX2NvbnQ6CisJc3Bpbl91bmxvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2Nsb3NlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5zdXJlcyBhbGwgcGVuZGluZyBJL08gb24gdGhpcyBjaGFubmVsIGlzIGNhbmNlbGxlZCwgZGlzY2FyZHMgYWxsCisgKiAgICAgIHF1ZXVlZCBJL08gY29tcGxldGlvbiBub3RpZmljYXRpb25zLCB0aGVuIGZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkCisgKiAgICAgIGZvciB0aGlzIGNoYW5uZWwsIGFuZCBtYWtlcyB0aGUgY29ycmVzcG9uZGluZyBsb2dpY2FsIGNoYW5uZWwgaWQKKyAqICAgICAgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IHVzZS4KKyAqLworaW50IGJyaWRnZV9jaG5sX2Nsb3NlKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sID0gKHN0cnVjdCBjaG5sX29iamVjdCAqKWNobmxfb2JqOworCisJLyogQ2hlY2sgYXJnczogKi8KKwlpZiAoIXBjaG5sKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19jb250OworCX0KKwl7CisJCS8qIENhbmNlbCBJTzogdGhpcyBlbnN1cmVzIG5vIGZ1cnRoZXIgSU8gcmVxdWVzdHMgb3IKKwkJICogbm90aWZpY2F0aW9ucy4gKi8KKwkJc3RhdHVzID0gYnJpZGdlX2NobmxfY2FuY2VsX2lvKGNobmxfb2JqKTsKKwl9CitmdW5jX2NvbnQ6CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQXNzZXJ0IEkvTyBvbiB0aGlzIGNoYW5uZWwgaXMgbm93IGNhbmNlbGxlZDogUHJvdGVjdHMKKwkJICogZnJvbSBpb19kcGMuICovCisJCURCQ19BU1NFUlQoKHBjaG5sLT5kd19zdGF0ZSAmIENITkxfU1RBVEVDQU5DRUwpKTsKKwkJLyogSW52YWxpZGF0ZSBjaGFubmVsIG9iamVjdDogUHJvdGVjdHMgZnJvbQorCQkgKiBDSE5MX0dldElPQ29tcGxldGlvbigpLiAqLworCQkvKiBGcmVlIHRoZSBzbG90IGluIHRoZSBjaGFubmVsIG1hbmFnZXI6ICovCisJCXBjaG5sLT5jaG5sX21ncl9vYmotPmFwX2NoYW5uZWxbcGNobmwtPmNobmxfaWRdID0gTlVMTDsKKwkJc3Bpbl9sb2NrX2JoKCZwY2hubC0+Y2hubF9tZ3Jfb2JqLT5jaG5sX21ncl9sb2NrKTsKKwkJcGNobmwtPmNobmxfbWdyX29iai0+b3Blbl9jaGFubmVscyAtPSAxOworCQlzcGluX3VubG9ja19iaCgmcGNobmwtPmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJCWlmIChwY2hubC0+bnRmeV9vYmopIHsKKwkJCW50ZnlfZGVsZXRlKHBjaG5sLT5udGZ5X29iaik7CisJCQlrZnJlZShwY2hubC0+bnRmeV9vYmopOworCQkJcGNobmwtPm50Znlfb2JqID0gTlVMTDsKKwkJfQorCQkvKiBSZXNldCBjaGFubmVsIGV2ZW50OiAoTk9URTogdXNlcl9ldmVudCBmcmVlZCBpbiB1c2VyCisJCSAqIGNvbnRleHQuKS4gKi8KKwkJaWYgKHBjaG5sLT5zeW5jX2V2ZW50KSB7CisJCQlzeW5jX3Jlc2V0X2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50KTsKKwkJCWtmcmVlKHBjaG5sLT5zeW5jX2V2ZW50KTsKKwkJCXBjaG5sLT5zeW5jX2V2ZW50ID0gTlVMTDsKKwkJfQorCQkvKiBGcmVlIEkvTyByZXF1ZXN0IGFuZCBJL08gY29tcGxldGlvbiBxdWV1ZXM6ICovCisJCWlmIChwY2hubC0+cGlvX2NvbXBsZXRpb25zKSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPnBpb19jb21wbGV0aW9ucyk7CisJCQlwY2hubC0+cGlvX2NvbXBsZXRpb25zID0gTlVMTDsKKwkJCXBjaG5sLT5jaW9fY3MgPSAwOworCQl9CisJCWlmIChwY2hubC0+cGlvX3JlcXVlc3RzKSB7CisJCQlmcmVlX2NoaXJwX2xpc3QocGNobmwtPnBpb19yZXF1ZXN0cyk7CisJCQlwY2hubC0+cGlvX3JlcXVlc3RzID0gTlVMTDsKKwkJCXBjaG5sLT5jaW9fcmVxcyA9IDA7CisJCX0KKwkJaWYgKHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCkgeworCQkJZnJlZV9jaGlycF9saXN0KHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCk7CisJCQlwY2hubC0+ZnJlZV9wYWNrZXRzX2xpc3QgPSBOVUxMOworCQl9CisJCS8qIFJlbGVhc2UgY2hhbm5lbCBvYmplY3QuICovCisJCWtmcmVlKHBjaG5sKTsKKwkJcGNobmwgPSBOVUxMOworCX0KKwlEQkNfRU5TVVJFKHN0YXR1cyB8fCAhcGNobmwpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY3JlYXRlID09PT09PT09CisgKiAgICAgIENyZWF0ZSBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3QsIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIG5ldyBjaGFubmVscworICogICAgICBhbmQgY2xvc2luZyBvbGQgb25lcyBmb3IgYSBnaXZlbiBib2FyZC4KKyAqLworaW50IGJyaWRnZV9jaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3JfYXR0cnRzKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqID0gTlVMTDsKKwl1OCBtYXhfY2hhbm5lbHM7CisKKwkvKiBDaGVjayBEQkMgcmVxdWlyZW1lbnRzOiAqLworCURCQ19SRVFVSVJFKGNoYW5uZWxfbWdyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG1ncl9hdHRydHMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzID4gMCk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzIDw9IENITkxfTUFYQ0hBTk5FTFMpOworCURCQ19SRVFVSVJFKG1ncl9hdHRydHMtPndvcmRfc2l6ZSAhPSAwKTsKKworCS8qIEFsbG9jYXRlIGNoYW5uZWwgbWFuYWdlciBvYmplY3QgKi8KKwljaG5sX21ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hubF9tZ3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hubF9tZ3Jfb2JqKSB7CisJCS8qCisJCSAqIFRoZSBtYXhfY2hhbm5lbHMgYXR0ciBtdXN0IGVxdWFsIHRoZSAjIG9mIHN1cHBvcnRlZCBjaG5scyBmb3IKKwkJICogZWFjaCB0cmFuc3BvcnQoIyBjaG5scyBmb3IgUENQWSA9IERETUEgPSBaQ1BZKTogaS5lLgorCQkgKiAgICAgIG1ncl9hdHRydHMtPm1heF9jaGFubmVscyA9IENITkxfTUFYQ0hBTk5FTFMgPQorCQkgKiAgICAgICAgICAgICAgICAgICAgICAgRERNQV9NQVhERE1BQ0hOTFMgPSBERE1BX01BWFpDUFlDSE5MUy4KKwkJICovCisJCURCQ19BU1NFUlQobWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzID09IENITkxfTUFYQ0hBTk5FTFMpOworCQltYXhfY2hhbm5lbHMgPSBDSE5MX01BWENIQU5ORUxTICsgQ0hOTF9NQVhDSEFOTkVMUyAqIENITkxfUENQWTsKKwkJLyogQ3JlYXRlIGFycmF5IG9mIGNoYW5uZWxzICovCisJCWNobmxfbWdyX29iai0+YXBfY2hhbm5lbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaG5sX29iamVjdCAqKQorCQkJCQkJKiBtYXhfY2hhbm5lbHMsIEdGUF9LRVJORUwpOworCQlpZiAoY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsKSB7CisJCQkvKiBJbml0aWFsaXplIGNobmxfbWdyIG9iamVjdCAqLworCQkJY2hubF9tZ3Jfb2JqLT5kd190eXBlID0gQ0hOTF9UWVBFU007CisJCQljaG5sX21ncl9vYmotPndvcmRfc2l6ZSA9IG1ncl9hdHRydHMtPndvcmRfc2l6ZTsKKwkJCS8qIFRvdGFsICMgY2hubHMgc3VwcG9ydGVkICovCisJCQljaG5sX21ncl9vYmotPm1heF9jaGFubmVscyA9IG1heF9jaGFubmVsczsKKwkJCWNobmxfbWdyX29iai0+b3Blbl9jaGFubmVscyA9IDA7CisJCQljaG5sX21ncl9vYmotPmR3X291dHB1dF9tYXNrID0gMDsKKwkJCWNobmxfbWdyX29iai0+ZHdfbGFzdF9vdXRwdXQgPSAwOworCQkJY2hubF9tZ3Jfb2JqLT5oZGV2X29iaiA9IGhkZXZfb2JqOworCQkJc3Bpbl9sb2NrX2luaXQoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlpZiAoc3RhdHVzKSB7CisJCWJyaWRnZV9jaG5sX2Rlc3Ryb3koY2hubF9tZ3Jfb2JqKTsKKwkJKmNoYW5uZWxfbWdyID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBSZXR1cm4gY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCB0byBjYWxsZXIuLi4gKi8KKwkJKmNoYW5uZWxfbWdyID0gY2hubF9tZ3Jfb2JqOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhbGwgb3BlbiBjaGFubmVscywgYW5kIGRlc3Ryb3kgdGhlIGNoYW5uZWwgbWFuYWdlci4KKyAqLworaW50IGJyaWRnZV9jaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSBoY2hubF9tZ3I7CisJdTMyIGNobmxfaWQ7CisKKwlpZiAoaGNobmxfbWdyKSB7CisJCS8qIENsb3NlIGFsbCBvcGVuIGNoYW5uZWxzOiAqLworCQlmb3IgKGNobmxfaWQgPSAwOyBjaG5sX2lkIDwgY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHM7CisJCSAgICAgY2hubF9pZCsrKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGJyaWRnZV9jaG5sX2Nsb3NlKGNobmxfbWdyX29iai0+YXBfY2hhbm5lbAorCQkJCQkgICAgICBbY2hubF9pZF0pOworCQkJaWYgKHN0YXR1cykKKwkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBFcnJvciBzdGF0dXMgMHgleFxuIiwKKwkJCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCX0KKworCQkvKiBGcmVlIGNoYW5uZWwgbWFuYWdlciBvYmplY3Q6ICovCisJCWtmcmVlKGNobmxfbWdyX29iai0+YXBfY2hhbm5lbCk7CisKKwkJLyogU2V0IGhjaG5sX21nciB0byBOVUxMIGluIGRldmljZSBvYmplY3QuICovCisJCWRldl9zZXRfY2hubF9tZ3IoY2hubF9tZ3Jfb2JqLT5oZGV2X29iaiwgTlVMTCk7CisJCS8qIEZyZWUgdGhpcyBDaG5sIE1nciBvYmplY3Q6ICovCisJCWtmcmVlKGhjaG5sX21ncik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9mbHVzaF9pbyA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZsdXNoZXMgYWxsIHRoZSBvdXRzdGFuZGluZyBkYXRhIHJlcXVlc3RzIG9uIGEgY2hhbm5lbC4KKyAqLworaW50IGJyaWRnZV9jaG5sX2ZsdXNoX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosIHUzMiB0aW1lb3V0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7CisJczggY2hubF9tb2RlID0gLTE7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7CisJc3RydWN0IGNobmxfaW9jIGNobmxfaW9jX29iajsKKwkvKiBDaGVjayBhcmdzOiAqLworCWlmIChwY2hubCkgeworCQlpZiAoKHRpbWVvdXQgPT0gQ0hOTF9JT0NOT1dBSVQpCisJCSAgICAmJiBDSE5MX0lTX09VVFBVVChwY2hubC0+Y2hubF9tb2RlKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWNobmxfbW9kZSA9IHBjaG5sLT5jaG5sX21vZGU7CisJCQljaG5sX21ncl9vYmogPSBwY2hubC0+Y2hubF9tZ3Jfb2JqOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogTm90ZTogQ3VycmVudGx5LCBpZiBhbm90aGVyIHRocmVhZCBjb250aW51ZXMgdG8gYWRkIElPCisJCSAqIHJlcXVlc3RzIHRvIHRoaXMgY2hhbm5lbCwgdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnRpbnVlIHRvCisJCSAqIGZsdXNoIGFsbCBzdWNoIHF1ZXVlZCBJTyByZXF1ZXN0cy4gKi8KKwkJaWYgKENITkxfSVNfT1VUUFVUKGNobmxfbW9kZSkKKwkJICAgICYmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSkpIHsKKwkJCS8qIFdhaXQgZm9yIElPIGNvbXBsZXRpb25zLCB1cCB0byB0aGUgc3BlY2lmaWVkCisJCQkgKiB0aW1lb3V0OiAqLworCQkJd2hpbGUgKCFMU1RfSVNfRU1QVFkocGNobmwtPnBpb19yZXF1ZXN0cykgJiYgIXN0YXR1cykgeworCQkJCXN0YXR1cyA9IGJyaWRnZV9jaG5sX2dldF9pb2MoY2hubF9vYmosCisJCQkJCQl0aW1lb3V0LCAmY2hubF9pb2Nfb2JqKTsKKwkJCQlpZiAoc3RhdHVzKQorCQkJCQljb250aW51ZTsKKworCQkJCWlmIChjaG5sX2lvY19vYmouc3RhdHVzICYgQ0hOTF9JT0NTVEFUVElNRU9VVCkKKwkJCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gYnJpZGdlX2NobmxfY2FuY2VsX2lvKGNobmxfb2JqKTsKKwkJCS8qIE5vdywgbGVhdmUgdGhlIGNoYW5uZWwgaW4gdGhlIHJlYWR5IHN0YXRlOiAqLworCQkJcGNobmwtPmR3X3N0YXRlICY9IH5DSE5MX1NUQVRFQ0FOQ0VMOworCQl9CisJfQorCURCQ19FTlNVUkUoc3RhdHVzIHx8IExTVF9JU19FTVBUWShwY2hubC0+cGlvX3JlcXVlc3RzKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYSBjaGFubmVsLgorICovCitpbnQgYnJpZGdlX2NobmxfZ2V0X2luZm8oc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCSAgICAgc3RydWN0IGNobmxfaW5mbyAqY2hhbm5lbF9pbmZvKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSAoc3RydWN0IGNobmxfb2JqZWN0ICopY2hubF9vYmo7CisJaWYgKGNoYW5uZWxfaW5mbyAhPSBOVUxMKSB7CisJCWlmIChwY2hubCkgeworCQkJLyogUmV0dXJuIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb246ICovCisJCQljaGFubmVsX2luZm8tPmhjaG5sX21nciA9IHBjaG5sLT5jaG5sX21ncl9vYmo7CisJCQljaGFubmVsX2luZm8tPmV2ZW50X29iaiA9IHBjaG5sLT51c2VyX2V2ZW50OworCQkJY2hhbm5lbF9pbmZvLT5jbmhsX2lkID0gcGNobmwtPmNobmxfaWQ7CisJCQljaGFubmVsX2luZm8tPmR3X21vZGUgPSBwY2hubC0+Y2hubF9tb2RlOworCQkJY2hhbm5lbF9pbmZvLT5ieXRlc190eCA9IHBjaG5sLT5ieXRlc19tb3ZlZDsKKwkJCWNoYW5uZWxfaW5mby0+cHJvY2VzcyA9IHBjaG5sLT5wcm9jZXNzOworCQkJY2hhbm5lbF9pbmZvLT5zeW5jX2V2ZW50ID0gcGNobmwtPnN5bmNfZXZlbnQ7CisJCQljaGFubmVsX2luZm8tPmNpb19jcyA9IHBjaG5sLT5jaW9fY3M7CisJCQljaGFubmVsX2luZm8tPmNpb19yZXFzID0gcGNobmwtPmNpb19yZXFzOworCQkJY2hhbm5lbF9pbmZvLT5kd19zdGF0ZSA9IHBjaG5sLT5kd19zdGF0ZTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2dldF9pb2MgPT09PT09PT0KKyAqICAgICAgT3B0aW9uYWxseSB3YWl0IGZvciBJL08gY29tcGxldGlvbiBvbiBhIGNoYW5uZWwuICBEZXF1ZXVlIGFuIEkvTworICogICAgICBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBsZXRlZAorICogICAgICBJL08gcmVxdWVzdC4KKyAqICAgICAgTm90ZTogRW5zdXJlcyBDaGFubmVsIEludmFyaWFudCAoc2VlIG5vdGVzIGFib3ZlKS4KKyAqLworaW50IGJyaWRnZV9jaG5sX2dldF9pb2Moc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwgdTMyIHRpbWVvdXQsCisJCQkgICAgc3RydWN0IGNobmxfaW9jICpjaGFuX2lvYykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sID0gKHN0cnVjdCBjaG5sX29iamVjdCAqKWNobmxfb2JqOworCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqOworCWludCBzdGF0X3N5bmM7CisJYm9vbCBkZXF1ZXVlX2lvYyA9IHRydWU7CisJc3RydWN0IGNobmxfaW9jIGlvYyA9IHsgTlVMTCwgMCwgMCwgMCwgMCB9OworCXU4ICpob3N0X3N5c19idWYgPSBOVUxMOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0OworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOworCisJLyogQ2hlY2sgYXJnczogKi8KKwlpZiAoIWNoYW5faW9jIHx8ICFwY2hubCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSBpZiAodGltZW91dCA9PSBDSE5MX0lPQ05PV0FJVCkgeworCQlpZiAoTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fY29tcGxldGlvbnMpKQorCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKKworCX0KKworCWRldl9vYmogPSBkZXZfZ2V0X2ZpcnN0KCk7CisJZGV2X2dldF9icmlkZ2VfY29udGV4dChkZXZfb2JqLCAmZGV2X2N0eHQpOworCWlmICghZGV2X2N0eHQpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaW9jLnN0YXR1cyA9IENITkxfSU9DU1RBVENPTVBMRVRFOworCWlmICh0aW1lb3V0ICE9CisJICAgIENITkxfSU9DTk9XQUlUICYmIExTVF9JU19FTVBUWShwY2hubC0+cGlvX2NvbXBsZXRpb25zKSkgeworCQlpZiAodGltZW91dCA9PSBDSE5MX0lPQ0lORklOSVRFKQorCQkJdGltZW91dCA9IFNZTkNfSU5GSU5JVEU7CisKKwkJc3RhdF9zeW5jID0gc3luY193YWl0X29uX2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50LCB0aW1lb3V0KTsKKwkJaWYgKHN0YXRfc3luYyA9PSAtRVRJTUUpIHsKKwkJCS8qIE5vIHJlc3BvbnNlIGZyb20gRFNQICovCisJCQlpb2Muc3RhdHVzIHw9IENITkxfSU9DU1RBVFRJTUVPVVQ7CisJCQlkZXF1ZXVlX2lvYyA9IGZhbHNlOworCQl9IGVsc2UgaWYgKHN0YXRfc3luYyA9PSAtRVBFUk0pIHsKKwkJCS8qIFRoaXMgY2FuIG9jY3VyIHdoZW4gdGhlIHVzZXIgbW9kZSB0aHJlYWQgaXMKKwkJCSAqIGFib3J0ZWQgKF5DKSwgb3Igd2hlbiBfVldJTjMyX1dhaXRTaW5nbGVPYmplY3QoKQorCQkJICogZmFpbHMgZHVlIHRvIHVua293biBjYXVzZXMuICovCisJCQkvKiBFdmVuIHRob3VnaCBXYWl0IGZhaWxlZCwgdGhlcmUgbWF5IGJlIHNvbWV0aGluZyBpbgorCQkJICogdGhlIFE6ICovCisJCQlpZiAoTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fY29tcGxldGlvbnMpKSB7CisJCQkJaW9jLnN0YXR1cyB8PSBDSE5MX0lPQ1NUQVRDQU5DRUw7CisJCQkJZGVxdWV1ZV9pb2MgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKwkvKiBTZWUgY29tbWVudCBpbiBBZGRJT1JlcSAqLworCXNwaW5fbG9ja19iaCgmcGNobmwtPmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJb21hcF9tYm94X2Rpc2FibGVfaXJxKGRldl9jdHh0LT5tYm94LCBJUlFfUlgpOworCWlmIChkZXF1ZXVlX2lvYykgeworCQkvKiBEZXF1ZXVlIElPQyBhbmQgc2V0IGNoYW5faW9jOyAqLworCQlEQkNfQVNTRVJUKCFMU1RfSVNfRU1QVFkocGNobmwtPnBpb19jb21wbGV0aW9ucykpOworCQljaG5sX3BhY2tldF9vYmogPQorCQkgICAgKHN0cnVjdCBjaG5sX2lycCAqKWxzdF9nZXRfaGVhZChwY2hubC0+cGlvX2NvbXBsZXRpb25zKTsKKwkJLyogVXBkYXRlIGNoYW5faW9jIGZyb20gY2hhbm5lbCBzdGF0ZSBhbmQgY2hpcnA6ICovCisJCWlmIChjaG5sX3BhY2tldF9vYmopIHsKKwkJCXBjaG5sLT5jaW9fY3MtLTsKKwkJCS8qICBJZiB0aGlzIGlzIGEgemVyby1jb3B5IGNoYW5uZWwsIHRoZW4gc2V0IElPQydzIHBidWYKKwkJCSAqICB0byB0aGUgRFNQJ3MgYWRkcmVzcy4gVGhpcyBEU1AgYWRkcmVzcyB3aWxsIGdldAorCQkJICogIHRyYW5zbGF0ZWQgdG8gdXNlcidzIHZpcnR1YWwgYWRkciBsYXRlci4gKi8KKwkJCXsKKwkJCQlob3N0X3N5c19idWYgPSBjaG5sX3BhY2tldF9vYmotPmhvc3Rfc3lzX2J1ZjsKKwkJCQlpb2MucGJ1ZiA9IGNobmxfcGFja2V0X29iai0+aG9zdF91c2VyX2J1ZjsKKwkJCX0KKwkJCWlvYy5ieXRlX3NpemUgPSBjaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZTsKKwkJCWlvYy5idWZfc2l6ZSA9IGNobmxfcGFja2V0X29iai0+YnVmX3NpemU7CisJCQlpb2MuZHdfYXJnID0gY2hubF9wYWNrZXRfb2JqLT5kd19hcmc7CisJCQlpb2Muc3RhdHVzIHw9IGNobmxfcGFja2V0X29iai0+c3RhdHVzOworCQkJLyogUGxhY2UgdGhlIHVzZWQgY2hpcnAgb24gdGhlIGZyZWUgbGlzdDogKi8KKwkJCWxzdF9wdXRfdGFpbChwY2hubC0+ZnJlZV9wYWNrZXRzX2xpc3QsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKWNobmxfcGFja2V0X29iaik7CisJCX0gZWxzZSB7CisJCQlpb2MucGJ1ZiA9IE5VTEw7CisJCQlpb2MuYnl0ZV9zaXplID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlvYy5wYnVmID0gTlVMTDsKKwkJaW9jLmJ5dGVfc2l6ZSA9IDA7CisJCWlvYy5kd19hcmcgPSAwOworCQlpb2MuYnVmX3NpemUgPSAwOworCX0KKwkvKiBFbnN1cmUgaW52YXJpYW50OiBJZiBhbnkgSU9DJ3MgYXJlIHF1ZXVlZCBmb3IgdGhpcyBjaGFubmVsLi4uICovCisJaWYgKCFMU1RfSVNfRU1QVFkocGNobmwtPnBpb19jb21wbGV0aW9ucykpIHsKKwkJLyogIFNpbmNlIERTUFN0cmVhbV9SZWNsYWltKCkgZG9lcyBub3QgdGFrZSBhIHRpbWVvdXQKKwkJICogIHBhcmFtZXRlciwgd2UgcGFzcyB0aGUgc3RyZWFtJ3MgdGltZW91dCB2YWx1ZSB0bworCQkgKiAgYnJpZGdlX2NobmxfZ2V0X2lvYy4gV2UgY2Fubm90IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdAorCQkgKiAgd2UgaGF2ZSB3YWl0ZWQgaW4gVXNlciBtb2RlLiBTaW5jZSB0aGUgc3RyZWFtJ3MgdGltZW91dAorCQkgKiAgdmFsdWUgbWF5IGJlIG5vbi16ZXJvLCB3ZSBzdGlsbCBoYXZlIHRvIHNldCB0aGUgZXZlbnQuCisJCSAqICBUaGVyZWZvcmUsIHRoaXMgb3B0aW1pemF0aW9uIGlzIHRha2VuIG91dC4KKwkJICoKKwkJICogIGlmICh0aW1lb3V0ID09IENITkxfSU9DTk9XQUlUKSB7CisJCSAqICAgIC4uLiBlbnN1cmUgZXZlbnQgaXMgc2V0Li4KKwkJICogICAgICBzeW5jX3NldF9ldmVudChwY2hubC0+c3luY19ldmVudCk7CisJCSAqICB9ICovCisJCXN5bmNfc2V0X2V2ZW50KHBjaG5sLT5zeW5jX2V2ZW50KTsKKwl9IGVsc2UgeworCQkvKiBlbHNlLCBpZiBsaXN0IGlzIGVtcHR5LCBlbnN1cmUgZXZlbnQgaXMgcmVzZXQuICovCisJCXN5bmNfcmVzZXRfZXZlbnQocGNobmwtPnN5bmNfZXZlbnQpOworCX0KKwlvbWFwX21ib3hfZW5hYmxlX2lycShkZXZfY3R4dC0+bWJveCwgSVJRX1JYKTsKKwlzcGluX3VubG9ja19iaCgmcGNobmwtPmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJaWYgKGRlcXVldWVfaW9jCisJICAgICYmIChwY2hubC0+Y2hubF90eXBlID09IENITkxfUENQWSAmJiBwY2hubC0+Y2hubF9pZCA+IDEpKSB7CisJCWlmICghKGlvYy5wYnVmIDwgKHZvaWQgKilVU0VSTU9ERV9BRERSKSkKKwkJCWdvdG8gZnVuY19jb250OworCisJCS8qIElmIHRoZSBhZGRyIGlzIGluIHVzZXIgbW9kZSwgdGhlbiBjb3B5IGl0ICovCisJCWlmICghaG9zdF9zeXNfYnVmIHx8ICFpb2MucGJ1ZikgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisJCWlmICghQ0hOTF9JU19JTlBVVChwY2hubC0+Y2hubF9tb2RlKSkKKwkJCWdvdG8gZnVuY19jb250MTsKKworCQkvKmhvc3RfdXNlcl9idWYgKi8KKwkJc3RhdHVzID0gY29weV90b191c2VyKGlvYy5wYnVmLCBob3N0X3N5c19idWYsIGlvYy5ieXRlX3NpemUpOworCQlpZiAoc3RhdHVzKSB7CisJCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9FWElUSU5HKQorCQkJCXN0YXR1cyA9IDA7CisJCX0KKwkJaWYgKHN0YXR1cykKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CitmdW5jX2NvbnQxOgorCQlrZnJlZShob3N0X3N5c19idWYpOworCX0KK2Z1bmNfY29udDoKKwkvKiBVcGRhdGUgVXNlcidzIElPQyBibG9jazogKi8KKwkqY2hhbl9pb2MgPSBpb2M7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbyA9PT09PT09PQorICogICAgICBSZXRyaWV2ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKi8KK2ludCBicmlkZ2VfY2hubF9nZXRfbWdyX2luZm8oc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IsIHUzMiBjaF9pZCwKKwkJCQkgc3RydWN0IGNobmxfbWdyaW5mbyAqbWdyX2luZm8pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmogPSAoc3RydWN0IGNobmxfbWdyICopaGNobmxfbWdyOworCisJaWYgKG1ncl9pbmZvICE9IE5VTEwpIHsKKwkJaWYgKGNoX2lkIDw9IENITkxfTUFYQ0hBTk5FTFMpIHsKKwkJCWlmIChoY2hubF9tZ3IpIHsKKwkJCQkvKiBSZXR1cm4gdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbjogKi8KKwkJCQltZ3JfaW5mby0+Y2hubF9vYmogPQorCQkJCSAgICBjaG5sX21ncl9vYmotPmFwX2NoYW5uZWxbY2hfaWRdOworCQkJCW1ncl9pbmZvLT5vcGVuX2NoYW5uZWxzID0KKwkJCQkgICAgY2hubF9tZ3Jfb2JqLT5vcGVuX2NoYW5uZWxzOworCQkJCW1ncl9pbmZvLT5kd190eXBlID0gY2hubF9tZ3Jfb2JqLT5kd190eXBlOworCQkJCS8qIHRvdGFsICMgb2YgY2hubHMgKi8KKwkJCQltZ3JfaW5mby0+bWF4X2NoYW5uZWxzID0KKwkJCQkgICAgY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHM7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRUNIUk5HOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX2lkbGUgPT09PT09PT0KKyAqICAgICAgSWRsZXMgYSBwYXJ0aWN1bGFyIGNoYW5uZWwuCisgKi8KK2ludCBicmlkZ2VfY2hubF9pZGxlKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosIHUzMiB0aW1lb3V0LAorCQkJICAgIGJvb2wgZmx1c2hfZGF0YSkKK3sKKwlzOCBjaG5sX21vZGU7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShjaG5sX29iaik7CisKKwljaG5sX21vZGUgPSBjaG5sX29iai0+Y2hubF9tb2RlOworCWNobmxfbWdyX29iaiA9IGNobmxfb2JqLT5jaG5sX21ncl9vYmo7CisKKwlpZiAoQ0hOTF9JU19PVVRQVVQoY2hubF9tb2RlKSAmJiAhZmx1c2hfZGF0YSkgeworCQkvKiBXYWl0IGZvciBJTyBjb21wbGV0aW9ucywgdXAgdG8gdGhlIHNwZWNpZmllZCB0aW1lb3V0OiAqLworCQlzdGF0dXMgPSBicmlkZ2VfY2hubF9mbHVzaF9pbyhjaG5sX29iaiwgdGltZW91dCk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gYnJpZGdlX2NobmxfY2FuY2VsX2lvKGNobmxfb2JqKTsKKworCQkvKiBSZXNldCB0aGUgYnl0ZSBjb3VudCBhbmQgcHV0IGNoYW5uZWwgYmFjayBpbiByZWFkeSBzdGF0ZS4gKi8KKwkJY2hubF9vYmotPmJ5dGVzX21vdmVkID0gMDsKKwkJY2hubF9vYmotPmR3X3N0YXRlICY9IH5DSE5MX1NUQVRFQ0FOQ0VMOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Nobmxfb3BlbiA9PT09PT09PQorICogICAgICBPcGVuIGEgbmV3IGhhbGYtZHVwbGV4IGNoYW5uZWwgdG8gdGhlIERTUCBib2FyZC4KKyAqLworaW50IGJyaWRnZV9jaG5sX29wZW4oc3RydWN0IGNobmxfb2JqZWN0ICoqY2hubCwKKwkJCSAgICBzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwgczggY2hubF9tb2RlLAorCQkJICAgIHUzMiBjaF9pZCwgY29uc3Qgc3RydWN0IGNobmxfYXR0ciAqcGF0dHJzKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqID0gaGNobmxfbWdyOworCXN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwgPSBOVUxMOworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVudCA9IE5VTEw7CisJLyogRW5zdXJlIERCQyByZXF1aXJlbWVudHM6ICovCisJREJDX1JFUVVJUkUoY2hubCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwYXR0cnMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGNobmxfbWdyICE9IE5VTEwpOworCSpjaG5sID0gTlVMTDsKKwkvKiBWYWxpZGF0ZSBBcmdzOiAqLworCWlmIChwYXR0cnMtPnVpb19yZXFzID09IDApIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoIWhjaG5sX21ncikgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjaF9pZCAhPSBDSE5MX1BJQ0tGUkVFKSB7CisJCQkJaWYgKGNoX2lkID49IGNobmxfbWdyX29iai0+bWF4X2NoYW5uZWxzKQorCQkJCQlzdGF0dXMgPSAtRUNIUk5HOworCQkJCWVsc2UgaWYgKGNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtjaF9pZF0gIT0KKwkJCQkJIE5VTEwpCisJCQkJCXN0YXR1cyA9IC1FQUxSRUFEWTsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ2hlY2sgZm9yIGZyZWUgY2hhbm5lbCAqLworCQkJCXN0YXR1cyA9CisJCQkJICAgIHNlYXJjaF9mcmVlX2NoYW5uZWwoY2hubF9tZ3Jfb2JqLCAmY2hfaWQpOworCQkJfQorCQl9CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlEQkNfQVNTRVJUKGNoX2lkIDwgY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHMpOworCS8qIENyZWF0ZSBjaGFubmVsIG9iamVjdDogKi8KKwlwY2hubCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaG5sX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmICghcGNobmwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogUHJvdGVjdCBxdWV1ZXMgZnJvbSBpb19kcGM6ICovCisJcGNobmwtPmR3X3N0YXRlID0gQ0hOTF9TVEFURUNBTkNFTDsKKwkvKiBBbGxvY2F0ZSBpbml0aWFsIElPUiBhbmQgSU9DIHF1ZXVlczogKi8KKwlwY2hubC0+ZnJlZV9wYWNrZXRzX2xpc3QgPSBjcmVhdGVfY2hpcnBfbGlzdChwYXR0cnMtPnVpb19yZXFzKTsKKwlwY2hubC0+cGlvX3JlcXVlc3RzID0gY3JlYXRlX2NoaXJwX2xpc3QoMCk7CisJcGNobmwtPnBpb19jb21wbGV0aW9ucyA9IGNyZWF0ZV9jaGlycF9saXN0KDApOworCXBjaG5sLT5jaG5sX3BhY2tldHMgPSBwYXR0cnMtPnVpb19yZXFzOworCXBjaG5sLT5jaW9fY3MgPSAwOworCXBjaG5sLT5jaW9fcmVxcyA9IDA7CisJc3luY19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChzeW5jX2V2ZW50KQorCQlzeW5jX2luaXRfZXZlbnQoc3luY19ldmVudCk7CisJZWxzZQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJcGNobmwtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBjaG5sLT5udGZ5X29iaikKKwkJCW50ZnlfaW5pdChwY2hubC0+bnRmeV9vYmopOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCWlmIChwY2hubC0+cGlvX2NvbXBsZXRpb25zICYmIHBjaG5sLT5waW9fcmVxdWVzdHMgJiYKKwkJICAgIHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCkgeworCQkJLyogSW5pdGlhbGl6ZSBDSE5MIG9iamVjdCBmaWVsZHM6ICovCisJCQlwY2hubC0+Y2hubF9tZ3Jfb2JqID0gY2hubF9tZ3Jfb2JqOworCQkJcGNobmwtPmNobmxfaWQgPSBjaF9pZDsKKwkJCXBjaG5sLT5jaG5sX21vZGUgPSBjaG5sX21vZGU7CisJCQlwY2hubC0+dXNlcl9ldmVudCA9IHN5bmNfZXZlbnQ7CisJCQlwY2hubC0+c3luY19ldmVudCA9IHN5bmNfZXZlbnQ7CisJCQkvKiBHZXQgdGhlIHByb2Nlc3MgaGFuZGxlICovCisJCQlwY2hubC0+cHJvY2VzcyA9IGN1cnJlbnQtPnRnaWQ7CisJCQlwY2hubC0+cGNiX2FyZyA9IDA7CisJCQlwY2hubC0+Ynl0ZXNfbW92ZWQgPSAwOworCQkJLyogRGVmYXVsdCB0byBwcm9jLWNvcHkgKi8KKwkJCXBjaG5sLT5jaG5sX3R5cGUgPSBDSE5MX1BDUFk7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9CisJfQorCisJaWYgKHN0YXR1cykgeworCQkvKiBGcmVlIG1lbW9yeSAqLworCQlpZiAocGNobmwtPnBpb19jb21wbGV0aW9ucykgeworCQkJZnJlZV9jaGlycF9saXN0KHBjaG5sLT5waW9fY29tcGxldGlvbnMpOworCQkJcGNobmwtPnBpb19jb21wbGV0aW9ucyA9IE5VTEw7CisJCQlwY2hubC0+Y2lvX2NzID0gMDsKKwkJfQorCQlpZiAocGNobmwtPnBpb19yZXF1ZXN0cykgeworCQkJZnJlZV9jaGlycF9saXN0KHBjaG5sLT5waW9fcmVxdWVzdHMpOworCQkJcGNobmwtPnBpb19yZXF1ZXN0cyA9IE5VTEw7CisJCX0KKwkJaWYgKHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCkgeworCQkJZnJlZV9jaGlycF9saXN0KHBjaG5sLT5mcmVlX3BhY2tldHNfbGlzdCk7CisJCQlwY2hubC0+ZnJlZV9wYWNrZXRzX2xpc3QgPSBOVUxMOworCQl9CisJCWtmcmVlKHN5bmNfZXZlbnQpOworCQlzeW5jX2V2ZW50ID0gTlVMTDsKKworCQlpZiAocGNobmwtPm50Znlfb2JqKSB7CisJCQludGZ5X2RlbGV0ZShwY2hubC0+bnRmeV9vYmopOworCQkJa2ZyZWUocGNobmwtPm50Znlfb2JqKTsKKwkJCXBjaG5sLT5udGZ5X29iaiA9IE5VTEw7CisJCX0KKwkJa2ZyZWUocGNobmwpOworCX0gZWxzZSB7CisJCS8qIEluc2VydCBjaGFubmVsIG9iamVjdCBpbiBjaGFubmVsIG1hbmFnZXI6ICovCisJCWNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtwY2hubC0+Y2hubF9pZF0gPSBwY2hubDsKKwkJc3Bpbl9sb2NrX2JoKCZjaG5sX21ncl9vYmotPmNobmxfbWdyX2xvY2spOworCQljaG5sX21ncl9vYmotPm9wZW5fY2hhbm5lbHMrKzsKKwkJc3Bpbl91bmxvY2tfYmgoJmNobmxfbWdyX29iai0+Y2hubF9tZ3JfbG9jayk7CisJCS8qIFJldHVybiByZXN1bHQuLi4gKi8KKwkJcGNobmwtPmR3X3N0YXRlID0gQ0hOTF9TVEFURVJFQURZOworCQkqY2hubCA9IHBjaG5sOworCX0KK2Z1bmNfZW5kOgorCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgcGNobmwpIHx8ICgqY2hubCA9PSBOVUxMKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICAgICAgUmVnaXN0ZXJzIGZvciBldmVudHMgb24gYSBwYXJ0aWN1bGFyIGNoYW5uZWwuCisgKi8KK2ludCBicmlkZ2VfY2hubF9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICAgdTMyIGV2ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwKKwkJCQkgICAgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfQVNTRVJUKCEoZXZlbnRfbWFzayAmIH4oRFNQX1NUUkVBTURPTkUgfCBEU1BfU1RSRUFNSU9DT01QTEVUSU9OKSkpOworCisJaWYgKGV2ZW50X21hc2spCisJCXN0YXR1cyA9IG50ZnlfcmVnaXN0ZXIoY2hubF9vYmotPm50Znlfb2JqLCBobm90aWZpY2F0aW9uLAorCQkJCQkJZXZlbnRfbWFzaywgbm90aWZ5X3R5cGUpOworCWVsc2UKKwkJc3RhdHVzID0gbnRmeV91bnJlZ2lzdGVyKGNobmxfb2JqLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNyZWF0ZV9jaGlycF9saXN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBhIHF1ZXVlIG9mIGNoYW5uZWwgSS9PIFJlcXVlc3QvQ29tcGxldGlvbiBwYWNrZXRzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNoaXJwczogICAgIE51bWJlciBvZiBDaGlycHMgdG8gYWxsb2NhdGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBxdWV1ZSBvZiBJUlBzLCBvciBOVUxMLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbHN0X2xpc3QgKmNyZWF0ZV9jaGlycF9saXN0KHUzMiBjaGlycHMpCit7CisJc3RydWN0IGxzdF9saXN0ICpjaGlycF9saXN0OworCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqOworCXUzMiBpOworCisJY2hpcnBfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCisJaWYgKGNoaXJwX2xpc3QpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmNoaXJwX2xpc3QtPmhlYWQpOworCQkvKiBNYWtlIE4gY2hpcnBzIGFuZCBwbGFjZSBvbiBxdWV1ZS4gKi8KKwkJZm9yIChpID0gMDsgKGkgPCBjaGlycHMpCisJCSAgICAgJiYgKChjaG5sX3BhY2tldF9vYmogPSBtYWtlX25ld19jaGlycCgpKSAhPSBOVUxMKTsgaSsrKSB7CisJCQlsc3RfcHV0X3RhaWwoY2hpcnBfbGlzdCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopY2hubF9wYWNrZXRfb2JqKTsKKwkJfQorCisJCS8qIElmIHdlIGNvdWxkbid0IGFsbG9jYXRlIGFsbCBjaGlycHMsIGZyZWUgdGhvc2UgYWxsb2NhdGVkOiAqLworCQlpZiAoaSAhPSBjaGlycHMpIHsKKwkJCWZyZWVfY2hpcnBfbGlzdChjaGlycF9saXN0KTsKKwkJCWNoaXJwX2xpc3QgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIGNoaXJwX2xpc3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9jaGlycF9saXN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgcXVldWUgb2YgQ2hpcnBzLgorICovCitzdGF0aWMgdm9pZCBmcmVlX2NoaXJwX2xpc3Qoc3RydWN0IGxzdF9saXN0ICpjaGlycF9saXN0KQoreworCURCQ19SRVFVSVJFKGNoaXJwX2xpc3QgIT0gTlVMTCk7CisKKwl3aGlsZSAoIUxTVF9JU19FTVBUWShjaGlycF9saXN0KSkKKwkJa2ZyZWUobHN0X2dldF9oZWFkKGNoaXJwX2xpc3QpKTsKKworCWtmcmVlKGNoaXJwX2xpc3QpOworfQorCisvKgorICogID09PT09PT09IG1ha2VfbmV3X2NoaXJwID09PT09PT09CisgKiAgICAgIEFsbG9jYXRlIHRoZSBtZW1vcnkgZm9yIGEgbmV3IGNoYW5uZWwgSVJQLgorICovCitzdGF0aWMgc3RydWN0IGNobmxfaXJwICptYWtlX25ld19jaGlycCh2b2lkKQoreworCXN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqOworCisJY2hubF9wYWNrZXRfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNobmxfaXJwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNobmxfcGFja2V0X29iaiAhPSBOVUxMKSB7CisJCS8qIGxzdF9pbml0X2VsZW0gb25seSByZXNldHMgdGhlIGxpc3QncyBtZW1iZXIgdmFsdWVzLiAqLworCQlsc3RfaW5pdF9lbGVtKCZjaG5sX3BhY2tldF9vYmotPmxpbmspOworCX0KKworCXJldHVybiBjaG5sX3BhY2tldF9vYmo7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc2VhcmNoX2ZyZWVfY2hhbm5lbCA9PT09PT09PQorICogICAgICBTZWFyY2ggZm9yIGEgZnJlZSBjaGFubmVsIHNsb3QgaW4gdGhlIGFycmF5IG9mIGNoYW5uZWwgcG9pbnRlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2VhcmNoX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iaiwKKwkJCQkgICAgICB1MzIgKmNobmwpCit7CisJaW50IHN0YXR1cyA9IC1FTk9TUjsKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKGNobmxfbWdyX29iaik7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2hubF9tZ3Jfb2JqLT5tYXhfY2hhbm5lbHM7IGkrKykgeworCQlpZiAoY2hubF9tZ3Jfb2JqLT5hcF9jaGFubmVsW2ldID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQkqY2hubCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2RzcC1jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMWEwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9kc3AtY2xvY2suYwpAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIGNsay5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENsb2NrIGFuZCBUaW1lciBzZXJ2aWNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jbGsuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMsIERhdGEgU3RydWN0dXJlcywgVHlwZWRlZnMgKi8KKworI2RlZmluZSBPTUFQX1NTSV9PRkZTRVQJCQkweDU4MDAwCisjZGVmaW5lIE9NQVBfU1NJX1NJWkUJCQkweDEwMDAKKyNkZWZpbmUgT01BUF9TU0lfU1lTQ09ORklHX09GRlNFVAkweDEwCisKKyNkZWZpbmUgU1NJX0FVVE9JRExFCQkJKDEgPDwgMCkKKyNkZWZpbmUgU1NJX1NJRExFX1NNQVJUSURMRQkJKDIgPDwgMykKKyNkZWZpbmUgU1NJX01JRExFX05PSURMRQkJKDEgPDwgMTIpCisKKy8qIENsayB0eXBlcyByZXF1ZXN0ZWQgYnkgdGhlIGRzcCAqLworI2RlZmluZSBJVkEyX0NMSwkwCisjZGVmaW5lIEdQVF9DTEsJCTEKKyNkZWZpbmUgV0RUX0NMSwkJMgorI2RlZmluZSBNQ0JTUF9DTEsJMworI2RlZmluZSBTU0lfQ0xLCQk0CisKKy8qIEJyaWRnZSBHUFQgaWQgKDEgLSA0KSwgRE0gVGltZXIgaWQgKDUgLSA4KSAqLworI2RlZmluZSBETVRfSUQoaWQpICgoaWQpICsgNCkKKworLyogQnJpZGdlIE1DQlNQIGlkICg2IC0gMTApLCBPTUFQIE1jYnNwIGlkICgwIC0gNCkgKi8KKyNkZWZpbmUgTUNCU1BfSUQoaWQpICgoaWQpIC0gNikKKworc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcls0XTsKKworc3RydWN0IGNsayAqaXZhMl9jbGs7CisKK3N0cnVjdCBkc3Bfc3NpIHsKKwlzdHJ1Y3QgY2xrICpzc3RfZmNrOworCXN0cnVjdCBjbGsgKnNzcl9mY2s7CisJc3RydWN0IGNsayAqaWNrOworfTsKKworc3RhdGljIHN0cnVjdCBkc3Bfc3NpIHNzaTsKKworc3RhdGljIHUzMiBkc3BfY2xvY2tzOworCitzdGF0aWMgaW5saW5lIHUzMiBpc19kc3BfY2xrX2FjdGl2ZSh1MzIgY2xrLCB1OCBpZCkKK3sKKwlyZXR1cm4gY2xrICYgKDEgPDwgaWQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RzcF9jbGtfYWN0aXZlKHUzMiAqY2xrLCB1OCBpZCkKK3sKKwkqY2xrIHw9ICgxIDw8IGlkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kc3BfY2xrX2luYWN0aXZlKHUzMiAqY2xrLCB1OCBpZCkKK3sKKwkqY2xrICY9IH4oMSA8PCBpZCk7Cit9CisKK3N0YXRpYyBzOCBnZXRfY2xrX3R5cGUodTggaWQpCit7CisJczggdHlwZTsKKworCWlmIChpZCA9PSBEU1BfQ0xLX0lWQTIpCisJCXR5cGUgPSBJVkEyX0NMSzsKKwllbHNlIGlmIChpZCA8PSBEU1BfQ0xLX0dQVDgpCisJCXR5cGUgPSBHUFRfQ0xLOworCWVsc2UgaWYgKGlkID09IERTUF9DTEtfV0RUMykKKwkJdHlwZSA9IFdEVF9DTEs7CisJZWxzZSBpZiAoaWQgPD0gRFNQX0NMS19NQ0JTUDUpCisJCXR5cGUgPSBNQ0JTUF9DTEs7CisJZWxzZSBpZiAoaWQgPT0gRFNQX0NMS19TU0kpCisJCXR5cGUgPSBTU0lfQ0xLOworCWVsc2UKKwkJdHlwZSA9IC0xOworCisJcmV0dXJuIHR5cGU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2xlYW51cCBDTEsgbW9kdWxlLgorICovCit2b2lkIGRzcF9jbGtfZXhpdCh2b2lkKQoreworCWRzcF9jbG9ja19kaXNhYmxlX2FsbChkc3BfY2xvY2tzKTsKKworCWNsa19wdXQoaXZhMl9jbGspOworCWNsa19wdXQoc3NpLnNzdF9mY2spOworCWNsa19wdXQoc3NpLnNzcl9mY2spOworCWNsa19wdXQoc3NpLmljayk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBDTEsgbW9kdWxlLgorICovCit2b2lkIGRzcF9jbGtfaW5pdCh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRzcGJyaWRnZV9kZXZpY2U7CisKKwlkc3BicmlkZ2VfZGV2aWNlLmRldi5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGU7CisKKwlpdmEyX2NsayA9IGNsa19nZXQoJmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAiaXZhMl9jayIpOworCWlmIChJU19FUlIoaXZhMl9jbGspKQorCQlkZXZfZXJyKGJyaWRnZSwgImZhaWxlZCB0byBnZXQgaXZhMiBjbG9jayAlcFxuIiwgaXZhMl9jbGspOworCisJc3NpLnNzdF9mY2sgPSBjbGtfZ2V0KCZkc3BicmlkZ2VfZGV2aWNlLmRldiwgInNzaV9zc3RfZmNrIik7CisJc3NpLnNzcl9mY2sgPSBjbGtfZ2V0KCZkc3BicmlkZ2VfZGV2aWNlLmRldiwgInNzaV9zc3JfZmNrIik7CisJc3NpLmljayA9IGNsa19nZXQoJmRzcGJyaWRnZV9kZXZpY2UuZGV2LCAic3NpX2ljayIpOworCisJaWYgKElTX0VSUihzc2kuc3N0X2ZjaykgfHwgSVNfRVJSKHNzaS5zc3JfZmNrKSB8fCBJU19FUlIoc3NpLmljaykpCisJCWRldl9lcnIoYnJpZGdlLCAiZmFpbGVkIHRvIGdldCBzc2k6IHNzdCAlcCwgc3NyICVwLCBpY2sgJXBcbiIsCisJCQkJCXNzaS5zc3RfZmNrLCBzc2kuc3NyX2Zjaywgc3NpLmljayk7Cit9CisKKyNpZmRlZiBDT05GSUdfT01BUF9NQ0JTUAorc3RhdGljIHZvaWQgbWNic3BfY2xrX3ByZXBhcmUoYm9vbCBmbGFnLCB1OCBpZCkKK3sKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmplY3QgPSBOVUxMOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0ID0gTlVMTDsKKwl1MzIgdmFsOworCisJaGRldl9vYmplY3QgPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKwlpZiAoIWhkZXZfb2JqZWN0KQorCQlyZXR1cm47CisKKwlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqZWN0LCAmYnJpZGdlX2NvbnRleHQpOworCWlmICghYnJpZGdlX2NvbnRleHQpCisJCXJldHVybjsKKworCXJlc291cmNlcyA9IGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7CisJaWYgKCFyZXNvdXJjZXMpCisJCXJldHVybjsKKworCWlmIChmbGFnKSB7CisJCWlmIChpZCA9PSBEU1BfQ0xLX01DQlNQMSkgeworCQkJLyogc2V0IE1DQlNQMV9DTEtTLCBvbiBNY0JTUDEgT04gKi8KKwkJCXZhbCA9IF9fcmF3X3JlYWRsKHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJCXZhbCB8PSAxIDw8IDI7CisJCQlfX3Jhd193cml0ZWwodmFsLCByZXNvdXJjZXMtPmR3X3N5c19jdHJsX2Jhc2UgKyAweDI3NCk7CisJCX0gZWxzZSBpZiAoaWQgPT0gRFNQX0NMS19NQ0JTUDIpIHsKKwkJCS8qIHNldCBNQ0JTUDJfQ0xLUywgb24gTWNCU1AyIE9OICovCisJCQl2YWwgPSBfX3Jhd19yZWFkbChyZXNvdXJjZXMtPmR3X3N5c19jdHJsX2Jhc2UgKyAweDI3NCk7CisJCQl2YWwgfD0gMSA8PCA2OworCQkJX19yYXdfd3JpdGVsKHZhbCwgcmVzb3VyY2VzLT5kd19zeXNfY3RybF9iYXNlICsgMHgyNzQpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGlkID09IERTUF9DTEtfTUNCU1AxKSB7CisJCQkvKiBjbGVhciBNQ0JTUDFfQ0xLUywgb24gTWNCU1AxIE9GRiAqLworCQkJdmFsID0gX19yYXdfcmVhZGwocmVzb3VyY2VzLT5kd19zeXNfY3RybF9iYXNlICsgMHgyNzQpOworCQkJdmFsICY9IH4oMSA8PCAyKTsKKwkJCV9fcmF3X3dyaXRlbCh2YWwsIHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJfSBlbHNlIGlmIChpZCA9PSBEU1BfQ0xLX01DQlNQMikgeworCQkJLyogY2xlYXIgTUNCU1AyX0NMS1MsIG9uIE1jQlNQMiBPRkYgKi8KKwkJCXZhbCA9IF9fcmF3X3JlYWRsKHJlc291cmNlcy0+ZHdfc3lzX2N0cmxfYmFzZSArIDB4Mjc0KTsKKwkJCXZhbCAmPSB+KDEgPDwgNik7CisJCQlfX3Jhd193cml0ZWwodmFsLCByZXNvdXJjZXMtPmR3X3N5c19jdHJsX2Jhc2UgKyAweDI3NCk7CisJCX0KKwl9Cit9CisjZW5kaWYKKworLyoqCisgKiBkc3BfZ3B0X3dhaXRfb3ZlcmZsb3cgLSBzZXQgZ3B0IG92ZXJmbG93IGFuZCB3YWl0IGZvciBmaXhlZCB0aW1lb3V0CisgKiBAY2xrX2lkOiAgICAgIEdQIFRpbWVyIGNsb2NrIGlkLgorICogQGxvYWQ6ICAgICAgICBPdmVyZmxvdyB2YWx1ZS4KKyAqCisgKiBTZXRzIGFuIG92ZXJmbG93IGludGVycnVwdCBmb3IgdGhlIGRlc2lyZWQgR1BUIHdhaXRpbmcgZm9yIGEgdGltZW91dAorICogb2YgNSBtc2VjcyBmb3IgdGhlIGludGVycnVwdCB0byBvY2N1ci4KKyAqLwordm9pZCBkc3BfZ3B0X3dhaXRfb3ZlcmZsb3coc2hvcnQgaW50IGNsa19pZCwgdW5zaWduZWQgaW50IGxvYWQpCit7CisJc3RydWN0IG9tYXBfZG1fdGltZXIgKmdwdCA9IHRpbWVyW2Nsa19pZCAtIDFdOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWlmICghZ3B0KQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgb3ZlcmZsb3cgaW50ZXJydXB0ICovCisJb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShncHQsIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKTsKKworCS8qCisJICogU2V0IGNvdW50ZXIgdmFsdWUgdG8gb3ZlcmZsb3cgY291bnRlciBhZnRlcgorCSAqIG9uZSB0aWNrIGFuZCBzdGFydCB0aW1lci4KKwkgKi8KKwlvbWFwX2RtX3RpbWVyX3NldF9sb2FkX3N0YXJ0KGdwdCwgMCwgbG9hZCk7CisKKwkvKiBXYWl0IDgwdXMgZm9yIHRpbWVyIHRvIG92ZXJmbG93ICovCisJdWRlbGF5KDgwKTsKKworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUpOworCS8qIENoZWNrIGludGVycnVwdCBzdGF0dXMgYW5kIHdhaXQgZm9yIGludGVycnVwdCAqLworCXdoaWxlICghKG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMoZ3B0KSAmIE9NQVBfVElNRVJfSU5UX09WRVJGTE9XKSkgeworCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKHRpbWVvdXQpKSB7CisJCQlwcl9lcnIoIiVzOiBHUFRpbWVyIGludGVycnVwdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogID09PT09PT09IGRzcF9jbGtfZW5hYmxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5hYmxlIENsb2NrIC4KKyAqCisgKi8KK2ludCBkc3BfY2xrX2VuYWJsZShlbnVtIGRzcF9jbGtfaWQgY2xrX2lkKQoreworCWludCBzdGF0dXMgPSAwOworCisJaWYgKGlzX2RzcF9jbGtfYWN0aXZlKGRzcF9jbG9ja3MsIGNsa19pZCkpIHsKKwkJZGV2X2VycihicmlkZ2UsICJXQVJOOiBjbG9jayBpZCAlZCBhbHJlYWR5IGVuYWJsZWRcbiIsIGNsa19pZCk7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoZ2V0X2Nsa190eXBlKGNsa19pZCkpIHsKKwljYXNlIElWQTJfQ0xLOgorCQljbGtfZW5hYmxlKGl2YTJfY2xrKTsKKwkJYnJlYWs7CisJY2FzZSBHUFRfQ0xLOgorCQl0aW1lcltjbGtfaWQgLSAxXSA9CisJCQkJb21hcF9kbV90aW1lcl9yZXF1ZXN0X3NwZWNpZmljKERNVF9JRChjbGtfaWQpKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX09NQVBfTUNCU1AKKwljYXNlIE1DQlNQX0NMSzoKKwkJbWNic3BfY2xrX3ByZXBhcmUodHJ1ZSwgY2xrX2lkKTsKKwkJb21hcF9tY2JzcF9zZXRfaW9fdHlwZShNQ0JTUF9JRChjbGtfaWQpLCBPTUFQX01DQlNQX1BPTExfSU8pOworCQlvbWFwX21jYnNwX3JlcXVlc3QoTUNCU1BfSUQoY2xrX2lkKSk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBXRFRfQ0xLOgorCQlkZXZfZXJyKGJyaWRnZSwgIkVSUk9SOiBEU1AgcmVxdWVzdGVkIHRvIGVuYWJsZSBXRFQzIGNsa1xuIik7CisJCWJyZWFrOworCWNhc2UgU1NJX0NMSzoKKwkJY2xrX2VuYWJsZShzc2kuc3N0X2Zjayk7CisJCWNsa19lbmFibGUoc3NpLnNzcl9mY2spOworCQljbGtfZW5hYmxlKHNzaS5pY2spOworCisJCS8qCisJCSAqIFRoZSBTU0kgbW9kdWxlIG5lZWQgdG8gY29uZmlndXJlZCBub3QgdG8gaGF2ZSB0aGUgRm9yY2VkCisJCSAqIGlkbGUgZm9yIG1hc3RlciBpbnRlcmZhY2UuIElmIGl0IGlzIHNldCB0byBmb3JjZWQgaWRsZSwKKwkJICogdGhlIFNTSSBtb2R1bGUgaXMgdHJhbnNpdGlvbmluZyB0byBzdGFuZGJ5IHRoZXJlYnkgY2F1c2luZworCQkgKiB0aGUgY2xpZW50IGluIHRoZSBEU1AgaGFuZyB3YWl0aW5nIGZvciB0aGUgU1NJIG1vZHVsZSB0bworCQkgKiBiZSBhY3RpdmUgYWZ0ZXIgZW5hYmxpbmcgdGhlIGNsb2NrcworCQkgKi8KKwkJc3NpX2Nsa19wcmVwYXJlKHRydWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGJyaWRnZSwgIkludmFsaWQgY2xvY2sgaWQgZm9yIGVuYWJsZVxuIik7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisKKwlpZiAoIXN0YXR1cykKKwkJc2V0X2RzcF9jbGtfYWN0aXZlKCZkc3BfY2xvY2tzLCBjbGtfaWQpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBkc3BfY2xvY2tfZW5hYmxlX2FsbCAtIEVuYWJsZSBjbG9ja3MgdXNlZCBieSB0aGUgRFNQCisgKiBAZGV2X2NvbnRleHQJCURyaXZlcidzIGRldmljZSBjb250ZXh0IHN0cnVjdXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIGFsbCB0aGUgcGVyaXBoZXJhbCBjbG9ja3MgdGhhdCB3ZXJlIHJlcXVlc3RlZCBieSBEU1AuCisgKi8KK3UzMiBkc3BfY2xvY2tfZW5hYmxlX2FsbCh1MzIgZHNwX3Blcl9jbG9ja3MpCit7CisJdTMyIGNsa19pZDsKKwl1MzIgc3RhdHVzID0gLUVQRVJNOworCisJZm9yIChjbGtfaWQgPSAwOyBjbGtfaWQgPCBEU1BfQ0xLX05PVF9ERUZJTkVEOyBjbGtfaWQrKykgeworCQlpZiAoaXNfZHNwX2Nsa19hY3RpdmUoZHNwX3Blcl9jbG9ja3MsIGNsa19pZCkpCisJCQlzdGF0dXMgPSBkc3BfY2xrX2VuYWJsZShjbGtfaWQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19kaXNhYmxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzYWJsZSB0aGUgY2xvY2suCisgKgorICovCitpbnQgZHNwX2Nsa19kaXNhYmxlKGVudW0gZHNwX2Nsa19pZCBjbGtfaWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoIWlzX2RzcF9jbGtfYWN0aXZlKGRzcF9jbG9ja3MsIGNsa19pZCkpIHsKKwkJZGV2X2VycihicmlkZ2UsICJFUlI6IGNsb2NrIGlkICVkIGFscmVhZHkgZGlzYWJsZWRcbiIsIGNsa19pZCk7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAoZ2V0X2Nsa190eXBlKGNsa19pZCkpIHsKKwljYXNlIElWQTJfQ0xLOgorCQljbGtfZGlzYWJsZShpdmEyX2Nsayk7CisJCWJyZWFrOworCWNhc2UgR1BUX0NMSzoKKwkJb21hcF9kbV90aW1lcl9mcmVlKHRpbWVyW2Nsa19pZCAtIDFdKTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX09NQVBfTUNCU1AKKwljYXNlIE1DQlNQX0NMSzoKKwkJbWNic3BfY2xrX3ByZXBhcmUoZmFsc2UsIGNsa19pZCk7CisJCW9tYXBfbWNic3BfZnJlZShNQ0JTUF9JRChjbGtfaWQpKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIFdEVF9DTEs6CisJCWRldl9lcnIoYnJpZGdlLCAiRVJST1I6IERTUCByZXF1ZXN0ZWQgdG8gZGlzYWJsZSBXRFQzIGNsa1xuIik7CisJCWJyZWFrOworCWNhc2UgU1NJX0NMSzoKKwkJc3NpX2Nsa19wcmVwYXJlKGZhbHNlKTsKKwkJc3NpX2Nsa19wcmVwYXJlKGZhbHNlKTsKKwkJY2xrX2Rpc2FibGUoc3NpLnNzdF9mY2spOworCQljbGtfZGlzYWJsZShzc2kuc3NyX2Zjayk7CisJCWNsa19kaXNhYmxlKHNzaS5pY2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGJyaWRnZSwgIkludmFsaWQgY2xvY2sgaWQgZm9yIGRpc2FibGVcbiIpOworCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJaWYgKCFzdGF0dXMpCisJCXNldF9kc3BfY2xrX2luYWN0aXZlKCZkc3BfY2xvY2tzLCBjbGtfaWQpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBkc3BfY2xvY2tfZGlzYWJsZV9hbGwgLSBEaXNhYmxlIGFsbCBhY3RpdmUgY2xvY2tzCisgKiBAZGV2X2NvbnRleHQJCURyaXZlcidzIGRldmljZSBjb250ZXh0IHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYWxsIHRoZSBwZXJpcGhlcmFsIGNsb2NrcyB0aGF0IHdlcmUgZW5hYmxlZCBieSBEU1AuCisgKiBJdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgb25seSB3aGVuIERTUCBpcyBlbnRlcmluZyBoaWJlcm5hdGlvbiBvciB3aGVuIERTUAorICogaXMgaW4gZXJyb3Igc3RhdGUuCisgKi8KK3UzMiBkc3BfY2xvY2tfZGlzYWJsZV9hbGwodTMyIGRzcF9wZXJfY2xvY2tzKQoreworCXUzMiBjbGtfaWQ7CisJdTMyIHN0YXR1cyA9IC1FUEVSTTsKKworCWZvciAoY2xrX2lkID0gMDsgY2xrX2lkIDwgRFNQX0NMS19OT1RfREVGSU5FRDsgY2xrX2lkKyspIHsKKwkJaWYgKGlzX2RzcF9jbGtfYWN0aXZlKGRzcF9wZXJfY2xvY2tzLCBjbGtfaWQpKQorCQkJc3RhdHVzID0gZHNwX2Nsa19kaXNhYmxlKGNsa19pZCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKwordTMyIGRzcF9jbGtfZ2V0X2l2YTJfcmF0ZSh2b2lkKQoreworCXUzMiBjbGtfc3BlZWRfa2h6OworCisJY2xrX3NwZWVkX2toeiA9IGNsa19nZXRfcmF0ZShpdmEyX2Nsayk7CisJY2xrX3NwZWVkX2toeiAvPSAxMDAwOworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGNsayBzcGVlZCBLaHogPSAlZFxuIiwgX19mdW5jX18sIGNsa19zcGVlZF9raHopOworCisJcmV0dXJuIGNsa19zcGVlZF9raHo7Cit9CisKK3ZvaWQgc3NpX2Nsa19wcmVwYXJlKGJvb2wgRkxBRykKK3sKKwl2b2lkIF9faW9tZW0gKnNzaV9iYXNlOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXNzaV9iYXNlID0gaW9yZW1hcChMNF8zNFhYX0JBU0UgKyBPTUFQX1NTSV9PRkZTRVQsIE9NQVBfU1NJX1NJWkUpOworCWlmICghc3NpX2Jhc2UpIHsKKwkJcHJfZXJyKCIlczogZXJyb3IsIFNTSSBub3QgY29uZmlndXJlZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKEZMQUcpIHsKKwkJLyogU2V0IEF1dG9pZGxlLCBTSURMRU1vZGUgdG8gc21hcnQgaWRsZSwgYW5kIE1JRExFbW9kZSB0bworCQkgKiBubyBpZGxlCisJCSAqLworCQl2YWx1ZSA9IFNTSV9BVVRPSURMRSB8IFNTSV9TSURMRV9TTUFSVElETEUgfCBTU0lfTUlETEVfTk9JRExFOworCX0gZWxzZSB7CisJCS8qIFNldCBBdXRvaWRsZSwgU0lETEVNb2RlIHRvIGZvcmNlZCBpZGxlLCBhbmQgTUlETEVtb2RlIHRvCisJCSAqIGZvcmNlZCBpZGxlCisJCSAqLworCQl2YWx1ZSA9IFNTSV9BVVRPSURMRTsKKwl9CisKKwlfX3Jhd193cml0ZWwodmFsdWUsIHNzaV9iYXNlICsgT01BUF9TU0lfU1lTQ09ORklHX09GRlNFVCk7CisJaW91bm1hcChzc2lfYmFzZSk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzY2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCkBAIC0wLDAgKzEsMjMzMyBAQAorLyoKKyAqIGlvX3NtLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSU8gZGlzcGF0Y2hlciBmb3IgYSBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qCisgKiBDaGFubmVsIEludmFyaWFudDoKKyAqIFRoZXJlIGlzIGFuIGltcG9ydGFudCBpbnZhcmlhbnQgY29uZGl0aW9uIHdoaWNoIG11c3QgYmUgbWFpbnRhaW5lZCBwZXIKKyAqIGNoYW5uZWwgb3V0c2lkZSBvZiBicmlkZ2VfY2hubF9nZXRfaW9jKCkgYW5kIElPX0Rpc3BhdGNoKCksIHZpb2xhdGlvbiBvZgorICogd2hpY2ggbWF5IGNhdXNlIHRpbWVvdXRzIGFuZC9vciBmYWlsdXJlIG9mIHRoZSBzeW5jX3dhaXRfb25fZXZlbnQKKyAqIGZ1bmN0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qIFNlcnZpY2VzIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxod19kZWZzLmg+CisjaW5jbHVkZSA8aHdfbW11Lmg+CisKKy8qIEJyaWRnZSBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvY3RsLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorI2luY2x1ZGUgPF90aW9tYXAuaD4KKyNpbmNsdWRlIDx0aW9tYXBfaW8uaD4KKyNpbmNsdWRlIDxfdGlvbWFwX3B3ci5oPgorCisvKiBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NvZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorCisvKiBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1zX3NoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21nci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlICJfY21tLmgiCisjaW5jbHVkZSAibW9kdWxlX2xpc3QuaCIKKworLyogVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9pb19zbS5oPgorI2luY2x1ZGUgIl9tc2dfc20uaCIKKworLyogRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBPVVRQVVROT1RSRUFEWSAgMHhmZmZmCisjZGVmaW5lIE5PVEVOQUJMRUQgICAgICAweGZmZmYJLyogQ2hhbm5lbChzKSBub3QgZW5hYmxlZCAqLworCisjZGVmaW5lIEVYVEVORCAgICAgICJfRVhUX0VORCIKKworI2RlZmluZSBTV0FQX1dPUkQoeCkgICAgICh4KQorI2RlZmluZSBVTF9QQUdFX0FMSUdOX1NJWkUgMHgxMDAwMAkvKiBQYWdlIEFsaWduIFNpemUgKi8KKworI2RlZmluZSBNQVhfUE1fUkVRUyAzMgorCisjZGVmaW5lIE1NVV9GQVVMVF9IRUFEMSAweGE1YTVhNWE1CisjZGVmaW5lIE1NVV9GQVVMVF9IRUFEMiAweDk2OTY5Njk2CisjZGVmaW5lIFBPTExfTUFYIDEwMDAKKyNkZWZpbmUgTUFYX01NVV9EQkdCVUZGIDEwMjQwCisKKy8qIElPIE1hbmFnZXI6IG9ubHkgb25lIGNyZWF0ZWQgcGVyIGJvYXJkICovCitzdHJ1Y3QgaW9fbWdyIHsKKwkvKiBUaGVzZSBmb3VyIGZpZWxkcyBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBpb19tZ3JfIHN0cnVjdCAqLworCS8qIEJyaWRnZSBkZXZpY2UgY29udGV4dCAqLworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsJLyogRGV2aWNlIHRoaXMgYm9hcmQgcmVwcmVzZW50cyAqLworCisJLyogVGhlc2UgZmllbGRzIGluaXRpYWxpemVkIGluIGJyaWRnZV9pb19jcmVhdGUoKSAqLworCXN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyOworCXN0cnVjdCBzaG0gKnNoYXJlZF9tZW07CS8qIFNoYXJlZCBNZW1vcnkgY29udHJvbCAqLworCXU4ICppbnB1dDsJCS8qIEFkZHJlc3Mgb2YgaW5wdXQgY2hhbm5lbCAqLworCXU4ICpvdXRwdXQ7CQkvKiBBZGRyZXNzIG9mIG91dHB1dCBjaGFubmVsICovCisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwkvKiBNZXNzYWdlIG1hbmFnZXIgKi8KKwkvKiBNc2cgY29udHJvbCBmb3IgZnJvbSBEU1AgbWVzc2FnZXMgKi8KKwlzdHJ1Y3QgbXNnX2N0cmwgKm1zZ19pbnB1dF9jdHJsOworCS8qIE1zZyBjb250cm9sIGZvciB0byBEU1AgbWVzc2FnZXMgKi8KKwlzdHJ1Y3QgbXNnX2N0cmwgKm1zZ19vdXRwdXRfY3RybDsKKwl1OCAqbXNnX2lucHV0OwkJLyogQWRkcmVzcyBvZiBpbnB1dCBtZXNzYWdlcyAqLworCXU4ICptc2dfb3V0cHV0OwkJLyogQWRkcmVzcyBvZiBvdXRwdXQgbWVzc2FnZXMgKi8KKwl1MzIgdXNtX2J1Zl9zaXplOwkvKiBTaXplIG9mIGEgc2hhcmVkIG1lbW9yeSBJL08gY2hhbm5lbCAqLworCWJvb2wgc2hhcmVkX2lycTsJLyogSXMgdGhpcyBJUlEgc2hhcmVkPyAqLworCXUzMiB3b3JkX3NpemU7CQkvKiBTaXplIGluIGJ5dGVzIG9mIERTUCB3b3JkICovCisJdTE2IGludHJfdmFsOwkJLyogSW50ZXJydXB0IHZhbHVlICovCisJLyogUHJpdmF0ZSBleHRuZCBwcm9jIGluZm87IG1tdSBzZXR1cCAqLworCXN0cnVjdCBtZ3JfcHJvY2Vzc29yZXh0aW5mbyBleHRfcHJvY19pbmZvOworCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsJLyogU2hhcmVkIE1lbSBNbmdyICovCisJc3RydWN0IHdvcmtfc3RydWN0IGlvX3dvcmtxOwkvKiB3b3JrcXVldWUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHKQorCXUzMiB1bF90cmFjZV9idWZmZXJfYmVnaW47CS8qIFRyYWNlIG1lc3NhZ2Ugc3RhcnQgYWRkcmVzcyAqLworCXUzMiB1bF90cmFjZV9idWZmZXJfZW5kOwkvKiBUcmFjZSBtZXNzYWdlIGVuZCBhZGRyZXNzICovCisJdTMyIHVsX3RyYWNlX2J1ZmZlcl9jdXJyZW50OwkvKiBUcmFjZSBtZXNzYWdlIGN1cnJlbnQgYWRkcmVzcyAqLworCXUzMiB1bF9ncHBfcmVhZF9wb2ludGVyOwkvKiBHUFAgUmVhZCBwb2ludGVyIHRvIFRyYWNlIGJ1ZmZlciAqLworCXU4ICpwbXNnOworCXUzMiB1bF9ncHBfdmE7CisJdTMyIHVsX2RzcF92YTsKKyNlbmRpZgorCS8qIElPIERwYyAqLworCXUzMiBkcGNfcmVxOwkJLyogTnVtYmVyIG9mIHJlcXVlc3RlZCBEUEMncy4gKi8KKwl1MzIgZHBjX3NjaGVkOwkJLyogTnVtYmVyIG9mIGV4ZWN1dGVkIERQQydzLiAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBkcGNfdGFza2xldDsKKwlzcGlubG9ja190IGRwY19sb2NrOworCit9OworCisvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCitzdGF0aWMgdm9pZCBpb19kaXNwYXRjaF9wbShzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyKTsKK3N0YXRpYyB2b2lkIG5vdGlmeV9jaG5sX2NvbXBsZXRlKHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkJIHN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqKTsKK3N0YXRpYyB2b2lkIGlucHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCXU4IGlvX21vZGUpOworc3RhdGljIHZvaWQgb3V0cHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCXU4IGlvX21vZGUpOworc3RhdGljIHZvaWQgaW5wdXRfbXNnKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CitzdGF0aWMgdm9pZCBvdXRwdXRfbXNnKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CitzdGF0aWMgdTMyIGZpbmRfcmVhZHlfb3V0cHV0KHN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqLAorCQkJICAgICBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLCB1MzIgbWFzayk7CisKKy8qIEJ1cyBBZGRyIChjYWNoZWQga2VybmVsKSAqLworc3RhdGljIGludCByZWdpc3Rlcl9zaG1fc2VncyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAorCQkJCSAgICBzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tYW4sCisJCQkJICAgIHUzMiBkd19ncHBfYmFzZV9wYSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY2hubF9mcmVlKHN0cnVjdCBzaG0gKnNtLCB1MzIgY2hubCkKK3sKKwlzbS0+aG9zdF9mcmVlX21hc2sgJj0gfigxIDw8IGNobmwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NobmxfYnVzeShzdHJ1Y3Qgc2htICpzbSwgdTMyIGNobmwpCit7CisJc20tPmhvc3RfZnJlZV9tYXNrIHw9IDEgPDwgY2hubDsKK30KKworCisvKgorICogID09PT09PT09IGJyaWRnZV9pb19jcmVhdGUgPT09PT09PT0KKyAqICAgICAgQ3JlYXRlIGFuIElPIG1hbmFnZXIgb2JqZWN0LgorICovCitpbnQgYnJpZGdlX2lvX2NyZWF0ZShzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLAorCQkJICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW9fYXR0cnMgKm1ncl9hdHRydHMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGlvX21nciAqcGlvX21nciA9IE5VTEw7CisJc3RydWN0IHNobSAqc2hhcmVkX21lbSA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iajsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsKKwl1OCBkZXZfdHlwZTsKKworCS8qIENoZWNrIHJlcXVpcmVtZW50cyAqLworCWlmICghaW9fbWFuIHx8ICFtZ3JfYXR0cnRzIHx8IG1ncl9hdHRydHMtPndvcmRfc2l6ZSA9PSAwKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWRldl9nZXRfY2hubF9tZ3IoaGRldl9vYmosICZoY2hubF9tZ3IpOworCWlmICghaGNobmxfbWdyIHx8IGhjaG5sX21nci0+aGlvX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKgorCSAqIE1lc3NhZ2UgbWFuYWdlciB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBhIGZpbGUgaXMgbG9hZGVkLCBzaW5jZQorCSAqIHNpemUgb2YgbWVzc2FnZSBidWZmZXIgaW4gc2hhcmVkIG1lbW9yeSBpcyBjb25maWd1cmFibGUgaW4KKwkgKiB0aGUgYmFzZSBpbWFnZS4KKwkgKi8KKwlkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIWhicmlkZ2VfY29udGV4dCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpOworCS8qCisJICogRFNQIHNoYXJlZCBtZW1vcnkgYXJlYSB3aWxsIGdldCBzZXQgcHJvcGVybHkgd2hlbgorCSAqIGEgcHJvZ3JhbSBpcyBsb2FkZWQuIFRoZXkgYXJlIHVua25vd24gdW50aWwgYSBDT0ZGIGZpbGUgaXMKKwkgKiBsb2FkZWQuIEkgY2hvc2UgdGhlIHZhbHVlIC0xIGJlY2F1c2UgaXQgd2FzIGxlc3MgbGlrZWx5IHRvIGJlCisJICogYSB2YWxpZCBhZGRyZXNzIHRoYW4gMC4KKwkgKi8KKwlzaGFyZWRfbWVtID0gKHN0cnVjdCBzaG0gKiktMTsKKworCS8qIEFsbG9jYXRlIElPIG1hbmFnZXIgb2JqZWN0ICovCisJcGlvX21nciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpb19tZ3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGlvX21nciA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJLyogSW5pdGlhbGl6ZSBjaG5sX21nciBvYmplY3QgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHKQorCXBpb19tZ3ItPnBtc2cgPSBOVUxMOworI2VuZGlmCisJcGlvX21nci0+aGNobmxfbWdyID0gaGNobmxfbWdyOworCXBpb19tZ3ItPndvcmRfc2l6ZSA9IG1ncl9hdHRydHMtPndvcmRfc2l6ZTsKKwlwaW9fbWdyLT5zaGFyZWRfbWVtID0gc2hhcmVkX21lbTsKKworCWlmIChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgeworCQkvKiBDcmVhdGUgYW4gSU8gRFBDICovCisJCXRhc2tsZXRfaW5pdCgmcGlvX21nci0+ZHBjX3Rhc2tsZXQsIGlvX2RwYywgKHUzMikgcGlvX21ncik7CisKKwkJLyogSW5pdGlhbGl6ZSBEUEMgY291bnRlcnMgKi8KKwkJcGlvX21nci0+ZHBjX3JlcSA9IDA7CisJCXBpb19tZ3ItPmRwY19zY2hlZCA9IDA7CisKKwkJc3Bpbl9sb2NrX2luaXQoJnBpb19tZ3ItPmRwY19sb2NrKTsKKworCQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl9ub2RlKGhkZXZfb2JqLCAmZGV2X25vZGVfb2JqKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQgPSBoYnJpZGdlX2NvbnRleHQ7CisJCXBpb19tZ3ItPnNoYXJlZF9pcnEgPSBtZ3JfYXR0cnRzLT5pcnFfc2hhcmVkOworCQlpZiAoZHNwX3dkdF9pbml0KCkpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVJTzsKKwl9CitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKSB7CisJCS8qIENsZWFudXAgKi8KKwkJYnJpZGdlX2lvX2Rlc3Ryb3kocGlvX21ncik7CisJCWlmIChpb19tYW4pCisJCQkqaW9fbWFuID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBSZXR1cm4gSU8gbWFuYWdlciBvYmplY3QgdG8gY2FsbGVyLi4uICovCisJCWhjaG5sX21nci0+aGlvX21nciA9IHBpb19tZ3I7CisJCSppb19tYW4gPSBwaW9fbWdyOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9pb19kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzYWJsZSBpbnRlcnJ1cHRzLCBkZXN0cm95IHRoZSBJTyBtYW5hZ2VyLgorICovCitpbnQgYnJpZGdlX2lvX2Rlc3Ryb3koc3RydWN0IGlvX21nciAqaGlvX21ncikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpZiAoaGlvX21ncikgeworCQkvKiBGcmVlIElPIERQQyBvYmplY3QgKi8KKwkJdGFza2xldF9raWxsKCZoaW9fbWdyLT5kcGNfdGFza2xldCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHKQorCQlrZnJlZShoaW9fbWdyLT5wbXNnKTsKKyNlbmRpZgorCQlkc3Bfd2R0X2V4aXQoKTsKKwkJLyogRnJlZSB0aGlzIElPIG1hbmFnZXIgb2JqZWN0ICovCisJCWtmcmVlKGhpb19tZ3IpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfaW9fb25fbG9hZGVkID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIHdoZW4gYSBuZXcgcHJvZ3JhbSBpcyBsb2FkZWQgdG8gZ2V0IHNoYXJlZCBtZW1vcnkgYnVmZmVyCisgKiAgICAgIHBhcmFtZXRlcnMgZnJvbSBDT0ZGIGZpbGUuIHVsU2hhcmVkQnVmZmVyQmFzZSBhbmQgdWxTaGFyZWRCdWZmZXJMaW1pdAorICogICAgICBhcmUgaW4gRFNQIGFkZHJlc3MgdW5pdHMuCisgKi8KK2ludCBicmlkZ2VfaW9fb25fbG9hZGVkKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWFuOworCXN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyOworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwl1MzIgdWxfc2htX2Jhc2U7CisJdTMyIHVsX3NobV9iYXNlX29mZnNldDsKKwl1MzIgdWxfc2htX2xpbWl0OworCXUzMiB1bF9zaG1fbGVuZ3RoID0gLTE7CisJdTMyIHVsX21lbV9sZW5ndGggPSAtMTsKKwl1MzIgdWxfbXNnX2Jhc2U7CisJdTMyIHVsX21zZ19saW1pdDsKKwl1MzIgdWxfbXNnX2xlbmd0aCA9IC0xOworCXUzMiB1bF9leHRfZW5kOworCXUzMiB1bF9ncHBfcGEgPSAwOworCXUzMiB1bF9ncHBfdmEgPSAwOworCXUzMiB1bF9kc3BfdmEgPSAwOworCXUzMiB1bF9zZWdfc2l6ZSA9IDA7CisJdTMyIHVsX3BhZF9zaXplID0gMDsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzID0gMDsKKwl1OCBudW1fcHJvY3MgPSAwOworCXMzMiBuZHggPSAwOworCS8qIERTUCBNTVUgc2V0dXAgdGFibGUgKi8KKwlzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgYWVfcHJvY1tCUkRJT0NUTF9OVU1PRk1NVVRMQl07CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7CisJdTMyIG1hcF9hdHRyczsKKwl1MzIgc2htMF9lbmQ7CisJdTMyIHVsX2R5bl9leHRfYmFzZTsKKwl1MzIgdWxfc2VnMV9zaXplID0gMDsKKwl1MzIgcGFfY3VyciA9IDA7CisJdTMyIHZhX2N1cnIgPSAwOworCXUzMiBncHBfdmFfY3VyciA9IDA7CisJdTMyIG51bV9ieXRlcyA9IDA7CisJdTMyIGFsbF9iaXRzID0gMDsKKwl1MzIgcGFnZV9zaXplW10gPSB7IEhXX1BBR0VfU0laRTE2TUIsIEhXX1BBR0VfU0laRTFNQiwKKwkJSFdfUEFHRV9TSVpFNjRLQiwgSFdfUEFHRV9TSVpFNEtCCisJfTsKKworCXN0YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGlvX21nci0+aGRldl9vYmosICZwYnJpZGdlX2NvbnRleHQpOworCWlmICghcGJyaWRnZV9jb250ZXh0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaG9zdF9yZXMgPSBwYnJpZGdlX2NvbnRleHQtPnJlc291cmNlczsKKwlpZiAoIWhvc3RfcmVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihoaW9fbWdyLT5oZGV2X29iaiwgJmNvZF9tYW4pOworCWlmICghY29kX21hbikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwloY2hubF9tZ3IgPSBoaW9fbWdyLT5oY2hubF9tZ3I7CisJLyogVGhlIG1lc3NhZ2UgbWFuYWdlciBpcyBkZXN0cm95ZWQgd2hlbiB0aGUgYm9hcmQgaXMgc3RvcHBlZC4gKi8KKwlkZXZfZ2V0X21zZ19tZ3IoaGlvX21nci0+aGRldl9vYmosICZoaW9fbWdyLT5obXNnX21ncik7CisJaG1zZ19tZ3IgPSBoaW9fbWdyLT5obXNnX21ncjsKKwlpZiAoIWhjaG5sX21nciB8fCAhaG1zZ19tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaWYgKGhpb19tZ3ItPnNoYXJlZF9tZW0pCisJCWhpb19tZ3ItPnNoYXJlZF9tZW0gPSBOVUxMOworCisJLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgY2hhbm5lbCBwYXJ0IG9mIHNoYXJlZCBtZW1vcnkgKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBDSE5MX1NIQVJFRF9CVUZGRVJfQkFTRV9TWU0sCisJCQkJICAgJnVsX3NobV9iYXNlKTsKKwlpZiAoc3RhdHVzKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIENITkxfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0sCisJCQkJICAgJnVsX3NobV9saW1pdCk7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlpZiAodWxfc2htX2xpbWl0IDw9IHVsX3NobV9iYXNlKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIEdldCB0b3RhbCBsZW5ndGggaW4gYnl0ZXMgKi8KKwl1bF9zaG1fbGVuZ3RoID0gKHVsX3NobV9saW1pdCAtIHVsX3NobV9iYXNlICsgMSkgKiBoaW9fbWdyLT53b3JkX3NpemU7CisJLyogQ2FsY3VsYXRlIHNpemUgb2YgYSBQUk9DQ09QWSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiAqLworCWRldl9kYmcoYnJpZGdlLCAiJXM6IChwcm9jKXByb2Njb3B5IHNobW1lbSBzaXplOiAweCV4IGJ5dGVzXG4iLAorCQlfX2Z1bmNfXywgKHVsX3NobV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNobSkpKTsKKworCS8qIEdldCBzdGFydCBhbmQgbGVuZ3RoIG9mIG1lc3NhZ2UgcGFydCBvZiBzaGFyZWQgbWVtb3J5ICovCisJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgTVNHX1NIQVJFRF9CVUZGRVJfQkFTRV9TWU0sCisJCQkJCSAgICZ1bF9tc2dfYmFzZSk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgTVNHX1NIQVJFRF9CVUZGRVJfTElNSVRfU1lNLAorCQkJCQkgICAmdWxfbXNnX2xpbWl0KTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICh1bF9tc2dfbGltaXQgPD0gdWxfbXNnX2Jhc2UpIHsKKwkJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIExlbmd0aCAoYnl0ZXMpIG9mIG1lc3NhZ2luZyBwYXJ0IG9mIHNoYXJlZAorCQkJCSAqIG1lbW9yeS4KKwkJCQkgKi8KKwkJCQl1bF9tc2dfbGVuZ3RoID0KKwkJCQkgICAgKHVsX21zZ19saW1pdCAtIHVsX21zZ19iYXNlICsKKwkJCQkgICAgIDEpICogaGlvX21nci0+d29yZF9zaXplOworCQkJCS8qCisJCQkJICogVG90YWwgbGVuZ3RoIChieXRlcykgb2Ygc2hhcmVkIG1lbW9yeToKKwkJCQkgKiBjaG5sICsgbXNnLgorCQkJCSAqLworCQkJCXVsX21lbV9sZW5ndGggPSB1bF9zaG1fbGVuZ3RoICsgdWxfbXNnX2xlbmd0aDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoIXN0YXR1cykgeworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBEU1BfVFJBQ0VTRUNfRU5ELCAmc2htMF9lbmQpOworI2Vsc2UKKwkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgU0hNMF9TSEFSRURfRU5EX1NZTSwKKwkJCQkJICAgJnNobTBfZW5kKTsKKyNlbmRpZgorCQlpZiAoc3RhdHVzKQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0KKwkJICAgIGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIERZTkVYVEJBU0UsICZ1bF9keW5fZXh0X2Jhc2UpOworCQlpZiAoc3RhdHVzKQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgRVhURU5ELCAmdWxfZXh0X2VuZCk7CisJCWlmIChzdGF0dXMpCisJCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBHZXQgbWVtb3J5IHJlc2VydmVkIGluIGhvc3QgcmVzb3VyY2VzICovCisJCSh2b2lkKW1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvKDAsIChzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gKikKKwkJCQkJICAgICAgJmhpb19tZ3ItPmV4dF9wcm9jX2luZm8sCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QKKwkJCQkJCSAgICAgbWdyX3Byb2Nlc3NvcmV4dGluZm8pLAorCQkJCQkgICAgICAmbnVtX3Byb2NzKTsKKworCQkvKiBUaGUgZmlyc3QgTU1VIFRMQiBlbnRyeShUTEJfMCkgaW4gRENEIGlzIFNobUJhc2UuICovCisJCW5keCA9IDA7CisJCXVsX2dwcF9wYSA9IGhvc3RfcmVzLT5kd19tZW1fcGh5c1sxXTsKKwkJdWxfZ3BwX3ZhID0gaG9zdF9yZXMtPmR3X21lbV9iYXNlWzFdOworCQkvKiBUaGlzIGlzIHRoZSB2aXJ0dWFsIHVuY2FjaGVkIGlvcmVtYXBwZWQgYWRkcmVzcyEhISAqLworCQkvKiBXaHkgY2FuJ3Qgd2UgZGlyZWN0bHkgdGFrZSB0aGUgRFNQVkEgZnJvbSB0aGUgc3ltYm9scz8gKi8KKwkJdWxfZHNwX3ZhID0gaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbMF0udWxfZHNwX3ZpcnQ7CisJCXVsX3NlZ19zaXplID0gKHNobTBfZW5kIC0gdWxfZHNwX3ZhKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwkJdWxfc2VnMV9zaXplID0KKwkJICAgICh1bF9leHRfZW5kIC0gdWxfZHluX2V4dF9iYXNlKSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwkJLyogNEsgYWxpZ24gKi8KKwkJdWxfc2VnMV9zaXplID0gKHVsX3NlZzFfc2l6ZSArIDB4RkZGKSAmICh+MHhGRkZVTCk7CisJCS8qIDY0SyBhbGlnbiAqLworCQl1bF9zZWdfc2l6ZSA9ICh1bF9zZWdfc2l6ZSArIDB4RkZGRikgJiAofjB4RkZGRlVMKTsKKwkJdWxfcGFkX3NpemUgPSBVTF9QQUdFX0FMSUdOX1NJWkUgLSAoKHVsX2dwcF9wYSArIHVsX3NlZzFfc2l6ZSkgJQorCQkJCQkJICAgIFVMX1BBR0VfQUxJR05fU0laRSk7CisJCWlmICh1bF9wYWRfc2l6ZSA9PSBVTF9QQUdFX0FMSUdOX1NJWkUpCisJCQl1bF9wYWRfc2l6ZSA9IDB4MDsKKworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiB1bF9ncHBfcGEgJXgsIHVsX2dwcF92YSAleCwgdWxfZHNwX3ZhICV4LCAiCisJCQkic2htMF9lbmQgJXgsIHVsX2R5bl9leHRfYmFzZSAleCwgdWxfZXh0X2VuZCAleCwgIgorCQkJInVsX3NlZ19zaXplICV4IHVsX3NlZzFfc2l6ZSAleCBcbiIsIF9fZnVuY19fLAorCQkJdWxfZ3BwX3BhLCB1bF9ncHBfdmEsIHVsX2RzcF92YSwgc2htMF9lbmQsCisJCQl1bF9keW5fZXh0X2Jhc2UsIHVsX2V4dF9lbmQsIHVsX3NlZ19zaXplLCB1bF9zZWcxX3NpemUpOworCisJCWlmICgodWxfc2VnX3NpemUgKyB1bF9zZWcxX3NpemUgKyB1bF9wYWRfc2l6ZSkgPgorCQkgICAgaG9zdF9yZXMtPmR3X21lbV9sZW5ndGhbMV0pIHsKKwkJCXByX2VycigiJXM6IHNobSBFcnJvciwgcmVzZXJ2ZWQgMHgleCByZXF1aXJlZCAweCV4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBob3N0X3Jlcy0+ZHdfbWVtX2xlbmd0aFsxXSwKKwkJCSAgICAgICB1bF9zZWdfc2l6ZSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0KKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCXBhX2N1cnIgPSB1bF9ncHBfcGE7CisJdmFfY3VyciA9IHVsX2R5bl9leHRfYmFzZSAqIGhpb19tZ3ItPndvcmRfc2l6ZTsKKwlncHBfdmFfY3VyciA9IHVsX2dwcF92YTsKKwludW1fYnl0ZXMgPSB1bF9zZWcxX3NpemU7CisKKwkvKgorCSAqIFRyeSB0byBmaXQgaW50byBUTEIgZW50cmllcy4gSWYgbm90IHBvc3NpYmxlLCBwdXNoIHRoZW0gdG8gcGFnZQorCSAqIHRhYmxlcy4gSXQgaXMgcXVpdGUgcG9zc2libGUgdGhhdCBpZiBzZWN0aW9ucyBhcmUgbm90IG9uCisJICogYmlnZ2VyIHBhZ2UgYm91bmRhcnksIHdlIG1heSBlbmQgdXAgbWFraW5nIHNldmVyYWwgc21hbGwgcGFnZXMuCisJICogU28sIHB1c2ggdGhlbSBvbnRvIHBhZ2UgdGFibGVzLCBpZiB0aGF0IGlzIHRoZSBjYXNlLgorCSAqLworCW1hcF9hdHRycyA9IDB4MDAwMDAwMDA7CisJbWFwX2F0dHJzID0gRFNQX01BUExJVFRMRUVORElBTjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUFBIWVNJQ0FMQUREUjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUEVMRU1TSVpFMzI7CisJbWFwX2F0dHJzIHw9IERTUF9NQVBET05PVExPQ0s7CisKKwl3aGlsZSAobnVtX2J5dGVzKSB7CisJCS8qCisJCSAqIFRvIGZpbmQgdGhlIG1heC4gcGFnZSBzaXplIHdpdGggd2hpY2ggYm90aCBQQSAmIFZBIGFyZQorCQkgKiBhbGlnbmVkLgorCQkgKi8KKwkJYWxsX2JpdHMgPSBwYV9jdXJyIHwgdmFfY3VycjsKKwkJZGV2X2RiZyhicmlkZ2UsICJhbGxfYml0cyAleCwgcGFfY3VyciAleCwgdmFfY3VyciAleCwgIgorCQkJIm51bV9ieXRlcyAleFxuIiwgYWxsX2JpdHMsIHBhX2N1cnIsIHZhX2N1cnIsCisJCQludW1fYnl0ZXMpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoKG51bV9ieXRlcyA+PSBwYWdlX3NpemVbaV0pICYmICgoYWxsX2JpdHMgJgorCQkJCQkJCSAgICAgKHBhZ2Vfc2l6ZVtpXSAtCisJCQkJCQkJICAgICAgMSkpID09IDApKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgaGlvX21nci0+aW50Zl9meG5zLT4KKwkJCQkgICAgcGZuX2JyZF9tZW1fbWFwKGhpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwKKwkJCQkJCSAgICBwYV9jdXJyLCB2YV9jdXJyLAorCQkJCQkJICAgIHBhZ2Vfc2l6ZVtpXSwgbWFwX2F0dHJzLAorCQkJCQkJICAgIE5VTEwpOworCQkJCWlmIChzdGF0dXMpCisJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJcGFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQkJdmFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQkJZ3BwX3ZhX2N1cnIgKz0gcGFnZV9zaXplW2ldOworCQkJCW51bV9ieXRlcyAtPSBwYWdlX3NpemVbaV07CisJCQkJLyoKKwkJCQkgKiBEb24ndCB0cnkgc21hbGxlciBzaXplcy4gSG9wZWZ1bGx5IHdlIGhhdmUKKwkJCQkgKiByZWFjaGVkIGFuIGFkZHJlc3MgYWxpZ25lZCB0byBhIGJpZ2dlciBwYWdlCisJCQkJICogc2l6ZS4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlwYV9jdXJyICs9IHVsX3BhZF9zaXplOworCXZhX2N1cnIgKz0gdWxfcGFkX3NpemU7CisJZ3BwX3ZhX2N1cnIgKz0gdWxfcGFkX3NpemU7CisKKwkvKiBDb25maWd1cmUgdGhlIFRMQiBlbnRyaWVzIGZvciB0aGUgbmV4dCBjYWNoZWFibGUgc2VnbWVudCAqLworCW51bV9ieXRlcyA9IHVsX3NlZ19zaXplOworCXZhX2N1cnIgPSB1bF9kc3BfdmEgKiBoaW9fbWdyLT53b3JkX3NpemU7CisJd2hpbGUgKG51bV9ieXRlcykgeworCQkvKgorCQkgKiBUbyBmaW5kIHRoZSBtYXguIHBhZ2Ugc2l6ZSB3aXRoIHdoaWNoIGJvdGggUEEgJiBWQSBhcmUKKwkJICogYWxpZ25lZC4KKwkJICovCisJCWFsbF9iaXRzID0gcGFfY3VyciB8IHZhX2N1cnI7CisJCWRldl9kYmcoYnJpZGdlLCAiYWxsX2JpdHMgZm9yIFNlZzEgJXgsIHBhX2N1cnIgJXgsICIKKwkJCSJ2YV9jdXJyICV4LCBudW1fYnl0ZXMgJXhcbiIsIGFsbF9iaXRzLCBwYV9jdXJyLAorCQkJdmFfY3VyciwgbnVtX2J5dGVzKTsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKCEobnVtX2J5dGVzID49IHBhZ2Vfc2l6ZVtpXSkgfHwKKwkJCSAgICAhKChhbGxfYml0cyAmIChwYWdlX3NpemVbaV0gLSAxKSkgPT0gMCkpCisJCQkJY29udGludWU7CisJCQlpZiAobmR4IDwgTUFYX0xPQ0tfVExCX0VOVFJJRVMpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgd3JpdHRlbiB0bworCQkJCSAqIERTUCBNTVUuCisJCQkJICovCisJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF9wYSA9IHBhX2N1cnI7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGlzIHRoZSB2aXJ0dWFsIHVuY2FjaGVkIGlvcmVtYXBwZWQKKwkJCQkgKiBhZGRyZXNzISEhCisJCQkJICovCisJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF92YSA9IGdwcF92YV9jdXJyOworCQkJCWFlX3Byb2NbbmR4XS51bF9kc3BfdmEgPQorCQkJCSAgICB2YV9jdXJyIC8gaGlvX21nci0+d29yZF9zaXplOworCQkJCWFlX3Byb2NbbmR4XS51bF9zaXplID0gcGFnZV9zaXplW2ldOworCQkJCWFlX3Byb2NbbmR4XS5lbmRpYW5pc20gPSBIV19MSVRUTEVfRU5ESUFOOworCQkJCWFlX3Byb2NbbmR4XS5lbGVtX3NpemUgPSBIV19FTEVNX1NJWkUxNkJJVDsKKwkJCQlhZV9wcm9jW25keF0ubWl4ZWRfbW9kZSA9IEhXX01NVV9DUFVFUzsKKwkJCQlkZXZfZGJnKGJyaWRnZSwgInNobSBNTVUgVExCIGVudHJ5IFBBICV4IgorCQkJCQkiIFZBICV4IERTUF9WQSAleCBTaXplICV4XG4iLAorCQkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3BhLAorCQkJCQlhZV9wcm9jW25keF0udWxfZ3BwX3ZhLAorCQkJCQlhZV9wcm9jW25keF0udWxfZHNwX3ZhICoKKwkJCQkJaGlvX21nci0+d29yZF9zaXplLCBwYWdlX3NpemVbaV0pOworCQkJCW5keCsrOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBoaW9fbWdyLT5pbnRmX2Z4bnMtPgorCQkJCSAgICBwZm5fYnJkX21lbV9tYXAoaGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCQkJICAgIHBhX2N1cnIsIHZhX2N1cnIsCisJCQkJCQkgICAgcGFnZV9zaXplW2ldLCBtYXBfYXR0cnMsCisJCQkJCQkgICAgTlVMTCk7CisJCQkJZGV2X2RiZyhicmlkZ2UsCisJCQkJCSJzaG0gTU1VIFBURSBlbnRyeSBQQSAleCIKKwkJCQkJIiBWQSAleCBEU1BfVkEgJXggU2l6ZSAleFxuIiwKKwkJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF9wYSwKKwkJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF92YSwKKwkJCQkJYWVfcHJvY1tuZHhdLnVsX2RzcF92YSAqCisJCQkJCWhpb19tZ3ItPndvcmRfc2l6ZSwgcGFnZV9zaXplW2ldKTsKKwkJCQlpZiAoc3RhdHVzKQorCQkJCQlnb3RvIGZ1bmNfZW5kOworCQkJfQorCQkJcGFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQl2YV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCWdwcF92YV9jdXJyICs9IHBhZ2Vfc2l6ZVtpXTsKKwkJCW51bV9ieXRlcyAtPSBwYWdlX3NpemVbaV07CisJCQkvKgorCQkJICogRG9uJ3QgdHJ5IHNtYWxsZXIgc2l6ZXMuIEhvcGVmdWxseSB3ZSBoYXZlIHJlYWNoZWQKKwkJCSAqIGFuIGFkZHJlc3MgYWxpZ25lZCB0byBhIGJpZ2dlciBwYWdlIHNpemUuCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBDb3B5IHJlbWFpbmluZyBlbnRyaWVzIGZyb20gQ0RCLiBBbGwgZW50cmllcyBhcmUgMSBNQiBhbmQKKwkgKiBzaG91bGQgbm90IGNvbmZsaWN0IHdpdGggc2htIGVudHJpZXMgb24gTVBVIG9yIERTUCBzaWRlLgorCSAqLworCWZvciAoaSA9IDM7IGkgPCA3ICYmIG5keCA8IEJSRElPQ1RMX05VTU9GTU1VVExCOyBpKyspIHsKKwkJaWYgKGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2dwcF9waHlzID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoKGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2dwcF9waHlzID4KKwkJICAgICB1bF9ncHBfcGEgLSAweDEwMDAwMAorCQkgICAgICYmIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2dwcF9waHlzIDw9CisJCSAgICAgdWxfZ3BwX3BhICsgdWxfc2VnX3NpemUpCisJCSAgICB8fCAoaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0udWxfZHNwX3ZpcnQgPgorCQkJdWxfZHNwX3ZhIC0gMHgxMDAwMDAgLyBoaW9fbWdyLT53b3JkX3NpemUKKwkJCSYmIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2RzcF92aXJ0IDw9CisJCQl1bF9kc3BfdmEgKyB1bF9zZWdfc2l6ZSAvIGhpb19tZ3ItPndvcmRfc2l6ZSkpIHsKKwkJCWRldl9kYmcoYnJpZGdlLAorCQkJCSJDREIgTU1VIGVudHJ5ICVkIGNvbmZsaWN0cyB3aXRoICIKKwkJCQkic2htLlxuXHRDREI6IEdwcFBhICV4LCBEc3BWYSAleC5cblx0U0hNOiAiCisJCQkJIkdwcFBhICV4LCBEc3BWYSAleCwgQnl0ZXMgJXguXG4iLCBpLAorCQkJCWhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2dwcF9waHlzLAorCQkJCWhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLnVsX2RzcF92aXJ0LAorCQkJCXVsX2dwcF9wYSwgdWxfZHNwX3ZhLCB1bF9zZWdfc2l6ZSk7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlpZiAobmR4IDwgTUFYX0xPQ0tfVExCX0VOVFJJRVMpIHsKKwkJCQlhZV9wcm9jW25keF0udWxfZHNwX3ZhID0KKwkJCQkgICAgaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbaV0uCisJCQkJICAgIHVsX2RzcF92aXJ0OworCQkJCWFlX3Byb2NbbmR4XS51bF9ncHBfcGEgPQorCQkJCSAgICBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYltpXS4KKwkJCQkgICAgdWxfZ3BwX3BoeXM7CisJCQkJYWVfcHJvY1tuZHhdLnVsX2dwcF92YSA9IDA7CisJCQkJLyogMSBNQiAqLworCQkJCWFlX3Byb2NbbmR4XS51bF9zaXplID0gMHgxMDAwMDA7CisJCQkJZGV2X2RiZyhicmlkZ2UsICJzaG0gTU1VIGVudHJ5IFBBICV4ICIKKwkJCQkJIkRTUF9WQSAweCV4XG4iLCBhZV9wcm9jW25keF0udWxfZ3BwX3BhLAorCQkJCQlhZV9wcm9jW25keF0udWxfZHNwX3ZhKTsKKwkJCQluZHgrKzsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gaGlvX21nci0+aW50Zl9meG5zLT5wZm5fYnJkX21lbV9tYXAKKwkJCQkgICAgKGhpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwKKwkJCQkgICAgIGhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiW2ldLgorCQkJCSAgICAgdWxfZ3BwX3BoeXMsCisJCQkJICAgICBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYltpXS4KKwkJCQkgICAgIHVsX2RzcF92aXJ0LCAweDEwMDAwMCwgbWFwX2F0dHJzLAorCQkJCSAgICAgTlVMTCk7CisJCQl9CisJCX0KKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJbWFwX2F0dHJzID0gMHgwMDAwMDAwMDsKKwltYXBfYXR0cnMgPSBEU1BfTUFQTElUVExFRU5ESUFOOworCW1hcF9hdHRycyB8PSBEU1BfTUFQUEhZU0lDQUxBRERSOworCW1hcF9hdHRycyB8PSBEU1BfTUFQRUxFTVNJWkUzMjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUERPTk9UTE9DSzsKKworCS8qIE1hcCB0aGUgTDQgcGVyaXBoZXJhbHMgKi8KKwlpID0gMDsKKwl3aGlsZSAobDRfcGVyaXBoZXJhbF90YWJsZVtpXS5waHlzX2FkZHIpIHsKKwkJc3RhdHVzID0gaGlvX21nci0+aW50Zl9meG5zLT5wZm5fYnJkX21lbV9tYXAKKwkJICAgIChoaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIGw0X3BlcmlwaGVyYWxfdGFibGVbaV0ucGh5c19hZGRyLAorCQkgICAgIGw0X3BlcmlwaGVyYWxfdGFibGVbaV0uZHNwX3ZpcnRfYWRkciwgSFdfUEFHRV9TSVpFNEtCLAorCQkgICAgIG1hcF9hdHRycywgTlVMTCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfZW5kOworCQlpKys7CisJfQorCisJZm9yIChpID0gbmR4OyBpIDwgQlJESU9DVExfTlVNT0ZNTVVUTEI7IGkrKykgeworCQlhZV9wcm9jW2ldLnVsX2RzcF92YSA9IDA7CisJCWFlX3Byb2NbaV0udWxfZ3BwX3BhID0gMDsKKwkJYWVfcHJvY1tpXS51bF9ncHBfdmEgPSAwOworCQlhZV9wcm9jW2ldLnVsX3NpemUgPSAwOworCX0KKwkvKgorCSAqIFNldCB0aGUgc2htIHBoeXNpY2FsIGFkZHJlc3MgZW50cnkgKGdyYXllZCBvdXQgaW4gQ0RCIGZpbGUpCisJICogdG8gdGhlIHZpcnR1YWwgdW5jYWNoZWQgaW9yZW1hcHBlZCBhZGRyZXNzIG9mIHNobSByZXNlcnZlZAorCSAqIG9uIE1QVS4KKwkgKi8KKwloaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS51bF9ncHBfcGh5cyA9CisJICAgICh1bF9ncHBfdmEgKyB1bF9zZWcxX3NpemUgKyB1bF9wYWRfc2l6ZSk7CisKKwkvKgorCSAqIE5lZWQgc2htIFBoeXMgYWRkci4gSU8gc3VwcG9ydHMgb25seSBvbmUgRFNQIGZvciBub3c6CisJICogbnVtX3Byb2NzID0gMS4KKwkgKi8KKwlpZiAoIWhpb19tZ3ItPmV4dF9wcm9jX2luZm8udHlfdGxiWzBdLnVsX2dwcF9waHlzIHx8IG51bV9wcm9jcyAhPSAxKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfSBlbHNlIHsKKwkJaWYgKGFlX3Byb2NbMF0udWxfZHNwX3ZhID4gdWxfc2htX2Jhc2UpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyogdWxfc2htX2Jhc2UgbWF5IG5vdCBiZSBhdCB1bF9kc3BfdmEgYWRkcmVzcyAqLworCQl1bF9zaG1fYmFzZV9vZmZzZXQgPSAodWxfc2htX2Jhc2UgLSBhZV9wcm9jWzBdLnVsX2RzcF92YSkgKgorCQkgICAgaGlvX21nci0+d29yZF9zaXplOworCQkvKgorCQkgKiBicmlkZ2VfZGV2X2N0cmwoKSB3aWxsIHNldCBkZXYgY29udGV4dCBkc3AtbW11IGluZm8uIEluCisJCSAqIGJyaWRnZV9icmRfc3RhcnQoKSB0aGUgTU1VIHdpbGwgYmUgcmUtcHJvZ3JhbWVkIHdpdGggTU1VCisJCSAqIERTUFZhLUdQUFBhIHBhaXIgaW5mbyB3aGlsZSBEU1AgaXMgaW4gYSBrbm93bgorCQkgKiAocmVzZXQpIHN0YXRlLgorCQkgKi8KKworCQlzdGF0dXMgPQorCQkgICAgaGlvX21nci0+aW50Zl9meG5zLT5wZm5fZGV2X2NudHJsKGhpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwKKwkJCQkJCSAgICAgIEJSRElPQ1RMX1NFVE1NVUNPTkZJRywKKwkJCQkJCSAgICAgIGFlX3Byb2MpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2VuZDsKKwkJdWxfc2htX2Jhc2UgPSBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS51bF9ncHBfcGh5czsKKwkJdWxfc2htX2Jhc2UgKz0gdWxfc2htX2Jhc2Vfb2Zmc2V0OworCQl1bF9zaG1fYmFzZSA9ICh1MzIpIE1FTV9MSU5FQVJfQUREUkVTUygodm9pZCAqKXVsX3NobV9iYXNlLAorCQkJCQkJICAgICAgIHVsX21lbV9sZW5ndGgpOworCQlpZiAodWxfc2htX2Jhc2UgPT0gMCkgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyogUmVnaXN0ZXIgU00gKi8KKwkJc3RhdHVzID0KKwkJICAgIHJlZ2lzdGVyX3NobV9zZWdzKGhpb19tZ3IsIGNvZF9tYW4sIGFlX3Byb2NbMF0udWxfZ3BwX3BhKTsKKwl9CisKKwloaW9fbWdyLT5zaGFyZWRfbWVtID0gKHN0cnVjdCBzaG0gKil1bF9zaG1fYmFzZTsKKwloaW9fbWdyLT5pbnB1dCA9ICh1OCAqKSBoaW9fbWdyLT5zaGFyZWRfbWVtICsgc2l6ZW9mKHN0cnVjdCBzaG0pOworCWhpb19tZ3ItPm91dHB1dCA9IGhpb19tZ3ItPmlucHV0ICsgKHVsX3NobV9sZW5ndGggLQorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzaG0pKSAvIDI7CisJaGlvX21nci0+dXNtX2J1Zl9zaXplID0gaGlvX21nci0+b3V0cHV0IC0gaGlvX21nci0+aW5wdXQ7CisKKwkvKiAgU2V0IHVwIFNoYXJlZCBtZW1vcnkgYWRkcmVzc2VzIGZvciBtZXNzYWdpbmcuICovCisJaGlvX21nci0+bXNnX2lucHV0X2N0cmwgPSAoc3RydWN0IG1zZ19jdHJsICopKCh1OCAqKSBoaW9fbWdyLT5zaGFyZWRfbWVtCisJCQkJCQkgICAgICArIHVsX3NobV9sZW5ndGgpOworCWhpb19tZ3ItPm1zZ19pbnB1dCA9CisJICAgICh1OCAqKSBoaW9fbWdyLT5tc2dfaW5wdXRfY3RybCArIHNpemVvZihzdHJ1Y3QgbXNnX2N0cmwpOworCWhpb19tZ3ItPm1zZ19vdXRwdXRfY3RybCA9CisJICAgIChzdHJ1Y3QgbXNnX2N0cmwgKikoKHU4ICopIGhpb19tZ3ItPm1zZ19pbnB1dF9jdHJsICsKKwkJCQl1bF9tc2dfbGVuZ3RoIC8gMik7CisJaGlvX21nci0+bXNnX291dHB1dCA9CisJICAgICh1OCAqKSBoaW9fbWdyLT5tc2dfb3V0cHV0X2N0cmwgKyBzaXplb2Yoc3RydWN0IG1zZ19jdHJsKTsKKwlobXNnX21nci0+bWF4X21zZ3MgPQorCSAgICAoKHU4ICopIGhpb19tZ3ItPm1zZ19vdXRwdXRfY3RybCAtIGhpb19tZ3ItPm1zZ19pbnB1dCkKKwkgICAgLyBzaXplb2Yoc3RydWN0IG1zZ19kc3Btc2cpOworCWRldl9kYmcoYnJpZGdlLCAiSU8gTUdSIHNobSBkZXRhaWxzOiBzaGFyZWRfbWVtICVwLCBpbnB1dCAlcCwgIgorCQkib3V0cHV0ICVwLCBtc2dfaW5wdXRfY3RybCAlcCwgbXNnX2lucHV0ICVwLCAiCisJCSJtc2dfb3V0cHV0X2N0cmwgJXAsIG1zZ19vdXRwdXQgJXBcbiIsCisJCSh1OCAqKSBoaW9fbWdyLT5zaGFyZWRfbWVtLCBoaW9fbWdyLT5pbnB1dCwKKwkJaGlvX21nci0+b3V0cHV0LCAodTggKikgaGlvX21nci0+bXNnX2lucHV0X2N0cmwsCisJCWhpb19tZ3ItPm1zZ19pbnB1dCwgKHU4ICopIGhpb19tZ3ItPm1zZ19vdXRwdXRfY3RybCwKKwkJaGlvX21nci0+bXNnX291dHB1dCk7CisJZGV2X2RiZyhicmlkZ2UsICIocHJvYykgTWFzIG1zZ3MgaW4gc2hhcmVkIG1lbW9yeTogMHgleFxuIiwKKwkJaG1zZ19tZ3ItPm1heF9tc2dzKTsKKwltZW1zZXQoKHZvaWQgKiloaW9fbWdyLT5zaGFyZWRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHNobSkpOworCisjaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9ERUJVRykKKwkvKiBHZXQgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgdHJhY2UgYnVmZmVyICovCisJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgU1lTX1BVVENCRUcsCisJCQkJICAgJmhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbik7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCWhpb19tZ3ItPnVsX2dwcF9yZWFkX3BvaW50ZXIgPSBoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfYmVnaW4gPQorCSAgICAodWxfZ3BwX3ZhICsgdWxfc2VnMV9zaXplICsgdWxfcGFkX3NpemUpICsKKwkgICAgKGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbiAtIHVsX2RzcF92YSk7CisJLyogR2V0IHRoZSBlbmQgYWRkcmVzcyBvZiB0cmFjZSBidWZmZXIgKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTWVNfUFVUQ0VORCwKKwkJCQkgICAmaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2VuZCk7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwloaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kID0KKwkgICAgKHVsX2dwcF92YSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKSArCisJICAgIChoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kIC0gdWxfZHNwX3ZhKTsKKwkvKiBHZXQgdGhlIGN1cnJlbnQgYWRkcmVzcyBvZiBEU1Agd3JpdGUgcG9pbnRlciAqLworCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tYW4sIEJSSURHRV9TWVNfUFVUQ19DVVJSRU5ULAorCQkJCSAgICZoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfY3VycmVudCk7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwloaW9fbWdyLT51bF90cmFjZV9idWZmZXJfY3VycmVudCA9CisJICAgICh1bF9ncHBfdmEgKyB1bF9zZWcxX3NpemUgKyB1bF9wYWRfc2l6ZSkgKworCSAgICAoaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2N1cnJlbnQgLSB1bF9kc3BfdmEpOworCS8qIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0cmFjZSBidWZmZXIgKi8KKwlrZnJlZShoaW9fbWdyLT5wbXNnKTsKKwloaW9fbWdyLT5wbXNnID0ga21hbGxvYygoKGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9lbmQgLQorCQkJCWhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbikgKgorCQkJCWhpb19tZ3ItPndvcmRfc2l6ZSkgKyAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhpb19tZ3ItPnBtc2cpCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwloaW9fbWdyLT51bF9kc3BfdmEgPSB1bF9kc3BfdmE7CisJaGlvX21nci0+dWxfZ3BwX3ZhID0gKHVsX2dwcF92YSArIHVsX3NlZzFfc2l6ZSArIHVsX3BhZF9zaXplKTsKKworI2VuZGlmCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGlvX2J1Zl9zaXplID09PT09PT09CisgKiAgICAgIFNpemUgb2Ygc2hhcmVkIG1lbW9yeSBJL08gY2hhbm5lbC4KKyAqLwordTMyIGlvX2J1Zl9zaXplKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpCit7CisJaWYgKGhpb19tZ3IpCisJCXJldHVybiBoaW9fbWdyLT51c21fYnVmX3NpemU7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBpb19jYW5jZWxfY2hubCA9PT09PT09PQorICogICAgICBDYW5jZWwgSU8gb24gYSBnaXZlbiBQQ1BZIGNoYW5uZWwuCisgKi8KK3ZvaWQgaW9fY2FuY2VsX2Nobmwoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTMyIGNobmwpCit7CisJc3RydWN0IGlvX21nciAqcGlvX21nciA9IChzdHJ1Y3QgaW9fbWdyICopaGlvX21ncjsKKwlzdHJ1Y3Qgc2htICpzbTsKKworCWlmICghaGlvX21ncikKKwkJZ290byBmdW5jX2VuZDsKKwlzbSA9IGhpb19tZ3ItPnNoYXJlZF9tZW07CisKKwkvKiBJbmZvcm0gRFNQIHRoYXQgd2UgaGF2ZSBubyBtb3JlIGJ1ZmZlcnMgb24gdGhpcyBjaGFubmVsICovCisJc2V0X2NobmxfZnJlZShzbSwgY2hubCk7CisKKwlzbV9pbnRlcnJ1cHRfZHNwKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgTUJYX1BDUFlfQ0xBU1MpOworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisKKy8qCisgKiAgPT09PT09PT0gaW9fZGlzcGF0Y2hfcG0gPT09PT09PT0KKyAqICAgICAgUGVyZm9ybXMgSS9PIGRpc3BhdGNoIG9uIFBNIHJlbGF0ZWQgbWVzc2FnZXMgZnJvbSBEU1AKKyAqLworc3RhdGljIHZvaWQgaW9fZGlzcGF0Y2hfcG0oc3RydWN0IGlvX21nciAqcGlvX21ncikKK3sKKwlpbnQgc3RhdHVzOworCXUzMiBwYXJnWzJdOworCisJLyogUGVyZm9ybSBQb3dlciBtZXNzYWdlIHByb2Nlc3NpbmcgaGVyZSAqLworCXBhcmdbMF0gPSBwaW9fbWdyLT5pbnRyX3ZhbDsKKworCS8qIFNlbmQgdGhlIGNvbW1hbmQgdG8gdGhlIEJyaWRnZSBjbGsvcHdyIG1hbmFnZXIgdG8gaGFuZGxlICovCisJaWYgKHBhcmdbMF0gPT0gTUJYX1BNX0hJQkVSTkFURV9FTikgeworCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiBIaWJlcm5hdGUgY29tbWFuZFxuIik7CisJCXN0YXR1cyA9IHBpb19tZ3ItPmludGZfZnhucy0+CisJCQkJcGZuX2Rldl9jbnRybChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsCisJCQkJCSAgICAgIEJSRElPQ1RMX1BXUl9ISUJFUk5BVEUsIHBhcmcpOworCQlpZiAoc3RhdHVzKQorCQkJcHJfZXJyKCIlczogaGliZXJuYXRlIGNtZCBmYWlsZWQgMHgleFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CisJfSBlbHNlIGlmIChwYXJnWzBdID09IE1CWF9QTV9PUFBfUkVRKSB7CisJCXBhcmdbMV0gPSBwaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfcmVxdWVzdC5ycXN0X29wcF9wdDsKKwkJZGV2X2RiZyhicmlkZ2UsICJQTTogUmVxdWVzdGVkIE9QUCA9IDB4JXhcbiIsIHBhcmdbMV0pOworCQlzdGF0dXMgPSBwaW9fbWdyLT5pbnRmX2Z4bnMtPgorCQkJCXBmbl9kZXZfY250cmwocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCQlCUkRJT0NUTF9DT05TVFJBSU5UX1JFUVVFU1QsIHBhcmcpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2RiZyhicmlkZ2UsICJQTTogRmFpbGVkIHRvIHNldCBjb25zdHJhaW50ICIKKwkJCQkiPSAweCV4XG4iLCBwYXJnWzFdKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIlBNOiBjbGsgY29udHJvbCB2YWx1ZSBvZiBtc2cgPSAweCV4XG4iLAorCQkJcGFyZ1swXSk7CisJCXN0YXR1cyA9IHBpb19tZ3ItPmludGZfZnhucy0+CisJCQkJcGZuX2Rldl9jbnRybChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsCisJCQkJCSAgICAgIEJSRElPQ1RMX0NMS19DVFJMLCBwYXJnKTsKKwkJaWYgKHN0YXR1cykKKwkJCWRldl9kYmcoYnJpZGdlLCAiUE06IEZhaWxlZCB0byBjdHJsIHRoZSBEU1AgY2xrIgorCQkJCSI9IDB4JXhcbiIsICpwYXJnKTsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9fZHBjID09PT09PT09CisgKiAgICAgIERlZmVycmVkIHByb2NlZHVyZSBjYWxsIGZvciBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyIElTUi4gIENhcnJpZXMKKyAqICAgICAgb3V0IHRoZSBkaXNwYXRjaCBvZiBJL08gYXMgYSBub24tcHJlZW1wdGlibGUgZXZlbnQuSXQgY2FuIG9ubHkgYmUKKyAqICAgICAgcHJlLWVtcHRlZCAgICAgIGJ5IGFuIElTUi4KKyAqLwordm9pZCBpb19kcGModW5zaWduZWQgbG9uZyByZWZfZGF0YSkKK3sKKwlzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3IgKilyZWZfZGF0YTsKKwlzdHJ1Y3QgY2hubF9tZ3IgKmNobmxfbWdyX29iajsKKwlzdHJ1Y3QgbXNnX21nciAqbXNnX21ncl9vYmo7CisJc3RydWN0IGRlaF9tZ3IgKmhkZWhfbWdyOworCXUzMiByZXF1ZXN0ZWQ7CisJdTMyIHNlcnZpY2VkOworCisJaWYgKCFwaW9fbWdyKQorCQlnb3RvIGZ1bmNfZW5kOworCWNobmxfbWdyX29iaiA9IHBpb19tZ3ItPmhjaG5sX21ncjsKKwlkZXZfZ2V0X21zZ19tZ3IocGlvX21nci0+aGRldl9vYmosICZtc2dfbWdyX29iaik7CisJZGV2X2dldF9kZWhfbWdyKHBpb19tZ3ItPmhkZXZfb2JqLCAmaGRlaF9tZ3IpOworCWlmICghY2hubF9tZ3Jfb2JqKQorCQlnb3RvIGZ1bmNfZW5kOworCisJcmVxdWVzdGVkID0gcGlvX21nci0+ZHBjX3JlcTsKKwlzZXJ2aWNlZCA9IHBpb19tZ3ItPmRwY19zY2hlZDsKKworCWlmIChzZXJ2aWNlZCA9PSByZXF1ZXN0ZWQpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiBQcm9jZXNzIHBlbmRpbmcgRFBDJ3MgKi8KKwlkbyB7CisJCS8qIENoZWNrIHZhbHVlIG9mIGludGVycnVwdCByZWcgdG8gZW5zdXJlIGl0J3MgYSB2YWxpZCBlcnJvciAqLworCQlpZiAoKHBpb19tZ3ItPmludHJfdmFsID4gREVIX0JBU0UpICYmCisJCSAgICAocGlvX21nci0+aW50cl92YWwgPCBERUhfTElNSVQpKSB7CisJCQkvKiBOb3RpZnkgRFNQL0JJT1MgZXhjZXB0aW9uICovCisJCQlpZiAoaGRlaF9tZ3IpIHsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCisJCQkJcHJpbnRfZHNwX2RlYnVnX3RyYWNlKHBpb19tZ3IpOworI2VuZGlmCisJCQkJYnJpZGdlX2RlaF9ub3RpZnkoaGRlaF9tZ3IsIERTUF9TWVNFUlJPUiwKKwkJCQkJCSAgcGlvX21nci0+aW50cl92YWwpOworCQkJfQorCQl9CisJCS8qIFByb2MtY29weSBjaGFuZWwgZGlzcGF0Y2ggKi8KKwkJaW5wdXRfY2hubChwaW9fbWdyLCBOVUxMLCBJT19TRVJWSUNFKTsKKwkJb3V0cHV0X2NobmwocGlvX21nciwgTlVMTCwgSU9fU0VSVklDRSk7CisKKyNpZmRlZiBDSE5MX01FU1NBR0VTCisJCWlmIChtc2dfbWdyX29iaikgeworCQkJLyogUGVyZm9ybSBJL08gZGlzcGF0Y2ggb24gbWVzc2FnZSBxdWV1ZXMgKi8KKwkJCWlucHV0X21zZyhwaW9fbWdyLCBtc2dfbWdyX29iaik7CisJCQlvdXRwdXRfbXNnKHBpb19tZ3IsIG1zZ19tZ3Jfb2JqKTsKKwkJfQorCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfREVCVUcKKwkJaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJYX0RCR19TWVNQUklOVEYpIHsKKwkJCS8qIE5vdGlmeSBEU1AgVHJhY2UgbWVzc2FnZSAqLworCQkJcHJpbnRfZHNwX2RlYnVnX3RyYWNlKHBpb19tZ3IpOworCQl9CisjZW5kaWYKKwkJc2VydmljZWQrKzsKKwl9IHdoaWxlIChzZXJ2aWNlZCAhPSByZXF1ZXN0ZWQpOworCXBpb19tZ3ItPmRwY19zY2hlZCA9IHJlcXVlc3RlZDsKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBpb19tYm94X21zZyA9PT09PT09PQorICogICAgICBNYWluIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBJTyBtYW5hZ2VyLgorICogICAgICBDYWxscyB0aGUgQnJpZGdlJ3MgQ0hOTF9JU1IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsIHRoZW4KKyAqICAgICAgc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqLwordm9pZCBpb19tYm94X21zZyh1MzIgbXNnKQoreworCXN0cnVjdCBpb19tZ3IgKnBpb19tZ3I7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldl9vYmogPSBkZXZfZ2V0X2ZpcnN0KCk7CisJZGV2X2dldF9pb19tZ3IoZGV2X29iaiwgJnBpb19tZ3IpOworCisJaWYgKCFwaW9fbWdyKQorCQlyZXR1cm47CisKKwlwaW9fbWdyLT5pbnRyX3ZhbCA9ICh1MTYpbXNnOworCWlmIChwaW9fbWdyLT5pbnRyX3ZhbCAmIE1CWF9QTV9DTEFTUykKKwkJaW9fZGlzcGF0Y2hfcG0ocGlvX21ncik7CisKKwlpZiAocGlvX21nci0+aW50cl92YWwgPT0gTUJYX0RFSF9SRVNFVCkgeworCQlwaW9fbWdyLT5pbnRyX3ZhbCA9IDA7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBpb19tZ3ItPmRwY19sb2NrLCBmbGFncyk7CisJCXBpb19tZ3ItPmRwY19yZXErKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlvX21nci0+ZHBjX2xvY2ssIGZsYWdzKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmcGlvX21nci0+ZHBjX3Rhc2tsZXQpOworCX0KKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9fcmVxdWVzdF9jaG5sID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVxdWVzdCBjaGFuZW5lbCBJL08gZnJvbSB0aGUgRFNQLiBTZXRzIGZsYWdzIGluIHNoYXJlZCBtZW1vcnksIHRoZW4KKyAqICAgICAgaW50ZXJydXB0cyB0aGUgRFNQLgorICovCit2b2lkIGlvX3JlcXVlc3RfY2hubChzdHJ1Y3QgaW9fbWdyICppb19tYW5hZ2VyLCBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJdTggaW9fbW9kZSwgdTE2ICptYnhfdmFsKQoreworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOworCXN0cnVjdCBzaG0gKnNtOworCisJaWYgKCFwY2hubCB8fCAhbWJ4X3ZhbCkKKwkJZ290byBmdW5jX2VuZDsKKwljaG5sX21ncl9vYmogPSBpb19tYW5hZ2VyLT5oY2hubF9tZ3I7CisJc20gPSBpb19tYW5hZ2VyLT5zaGFyZWRfbWVtOworCWlmIChpb19tb2RlID09IElPX0lOUFVUKSB7CisJCS8qCisJCSAqIEFzc2VydGlvbiBmaXJlcyBpZiBDSE5MX0FkZElPUmVxKCkgY2FsbGVkIG9uIGEgc3RyZWFtCisJCSAqIHdoaWNoIHdhcyBjYW5jZWxsZWQsIG9yIGF0dGFjaGVkIHRvIGEgZGVhZCBib2FyZC4KKwkJICovCisJCURCQ19BU1NFUlQoKHBjaG5sLT5kd19zdGF0ZSA9PSBDSE5MX1NUQVRFUkVBRFkpIHx8CisJCQkgICAocGNobmwtPmR3X3N0YXRlID09IENITkxfU1RBVEVFT1MpKTsKKwkJLyogSW5kaWNhdGUgdG8gdGhlIERTUCB3ZSBoYXZlIGEgYnVmZmVyIGF2YWlsYWJsZSBmb3IgaW5wdXQgKi8KKwkJc2V0X2NobmxfYnVzeShzbSwgcGNobmwtPmNobmxfaWQpOworCQkqbWJ4X3ZhbCA9IE1CWF9QQ1BZX0NMQVNTOworCX0gZWxzZSBpZiAoaW9fbW9kZSA9PSBJT19PVVRQVVQpIHsKKwkJLyoKKwkJICogVGhpcyBhc3NlcnRpb24gZmFpbHMgaWYgQ0hOTF9BZGRJT1JlcSgpIHdhcyBjYWxsZWQgb24gYQorCQkgKiBzdHJlYW0gd2hpY2ggd2FzIGNhbmNlbGxlZCwgb3IgYXR0YWNoZWQgdG8gYSBkZWFkIGJvYXJkLgorCQkgKi8KKwkJREJDX0FTU0VSVCgocGNobmwtPmR3X3N0YXRlICYgfkNITkxfU1RBVEVFT1MpID09CisJCQkgICBDSE5MX1NUQVRFUkVBRFkpOworCQkvKgorCQkgKiBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGEgYnVmZmVyIGF2YWlsYWJsZSBmb3IKKwkJICogb3V0cHV0LgorCQkgKi8KKwkJY2hubF9tZ3Jfb2JqLT5kd19vdXRwdXRfbWFzayB8PSAoMSA8PCBwY2hubC0+Y2hubF9pZCk7CisJfSBlbHNlIHsKKwkJREJDX0FTU0VSVChpb19tb2RlKTsJLyogU2hvdWxkbid0IGdldCBoZXJlLiAqLworCX0KK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBpb3NtX3NjaGVkdWxlID09PT09PT09CisgKiAgICAgIFNjaGVkdWxlIERQQyBmb3IgSU8uCisgKi8KK3ZvaWQgaW9zbV9zY2hlZHVsZShzdHJ1Y3QgaW9fbWdyICppb19tYW5hZ2VyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWlvX21hbmFnZXIpCisJCXJldHVybjsKKworCS8qIEluY3JlbWVudCBjb3VudCBvZiBEUEMncyBwZW5kaW5nLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZpb19tYW5hZ2VyLT5kcGNfbG9jaywgZmxhZ3MpOworCWlvX21hbmFnZXItPmRwY19yZXErKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19tYW5hZ2VyLT5kcGNfbG9jaywgZmxhZ3MpOworCisJLyogU2NoZWR1bGUgRFBDICovCisJdGFza2xldF9zY2hlZHVsZSgmaW9fbWFuYWdlci0+ZHBjX3Rhc2tsZXQpOworfQorCisvKgorICogID09PT09PT09IGZpbmRfcmVhZHlfb3V0cHV0ID09PT09PT09CisgKiAgICAgIFNlYXJjaCBmb3IgYSBob3N0IG91dHB1dCBjaGFubmVsIHdoaWNoIGlzIHJlYWR5IHRvIHNlbmQuICBJZiB0aGlzIGlzCisgKiAgICAgIGNhbGxlZCBhcyBhIHJlc3VsdCBvZiBzZXJ2aWNpbmcgdGhlIERQQywgdGhlbiBpbXBsZW1lbnQgYSByb3VuZAorICogICAgICByb2JpbiBzZWFyY2g7IG90aGVyd2lzZSwgdGhpcyB3YXMgY2FsbGVkIGJ5IGEgY2xpZW50IHRocmVhZCAodmlhCisgKiAgICAgIElPX0Rpc3BhdGNoKCkpLCBzbyBqdXN0IHN0YXJ0IHNlYXJjaGluZyBmcm9tIHRoZSBjdXJyZW50IGNoYW5uZWwgaWQuCisgKi8KK3N0YXRpYyB1MzIgZmluZF9yZWFkeV9vdXRwdXQoc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmosCisJCQkgICAgIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsIHUzMiBtYXNrKQoreworCXUzMiByZXQgPSBPVVRQVVROT1RSRUFEWTsKKwl1MzIgaWQsIHN0YXJ0X2lkOworCXUzMiBzaGlmdDsKKworCWlkID0gKHBjaG5sICE9CisJICAgICAgTlVMTCA/IHBjaG5sLT5jaG5sX2lkIDogKGNobmxfbWdyX29iai0+ZHdfbGFzdF9vdXRwdXQgKyAxKSk7CisJaWQgPSAoKGlkID09IENITkxfTUFYQ0hBTk5FTFMpID8gMCA6IGlkKTsKKwlpZiAoaWQgPj0gQ0hOTF9NQVhDSEFOTkVMUykKKwkJZ290byBmdW5jX2VuZDsKKwlpZiAobWFzaykgeworCQlzaGlmdCA9ICgxIDw8IGlkKTsKKwkJc3RhcnRfaWQgPSBpZDsKKwkJZG8geworCQkJaWYgKG1hc2sgJiBzaGlmdCkgeworCQkJCXJldCA9IGlkOworCQkJCWlmIChwY2hubCA9PSBOVUxMKQorCQkJCQljaG5sX21ncl9vYmotPmR3X2xhc3Rfb3V0cHV0ID0gaWQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZCA9IGlkICsgMTsKKwkJCWlkID0gKChpZCA9PSBDSE5MX01BWENIQU5ORUxTKSA/IDAgOiBpZCk7CisJCQlzaGlmdCA9ICgxIDw8IGlkKTsKKwkJfSB3aGlsZSAoaWQgIT0gc3RhcnRfaWQpOworCX0KK2Z1bmNfZW5kOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW5wdXRfY2hubCA9PT09PT09PQorICogICAgICBEaXNwYXRjaCBhIGJ1ZmZlciBvbiBhbiBpbnB1dCBjaGFubmVsLgorICovCitzdGF0aWMgdm9pZCBpbnB1dF9jaG5sKHN0cnVjdCBpb19tZ3IgKnBpb19tZ3IsIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQl1OCBpb19tb2RlKQoreworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOworCXN0cnVjdCBzaG0gKnNtOworCXUzMiBjaG5sX2lkOworCXUzMiBieXRlczsKKwlzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iaiA9IE5VTEw7CisJdTMyIGR3X2FyZzsKKwlib29sIGNsZWFyX2NobmwgPSBmYWxzZTsKKwlib29sIG5vdGlmeV9jbGllbnQgPSBmYWxzZTsKKworCXNtID0gcGlvX21nci0+c2hhcmVkX21lbTsKKwljaG5sX21ncl9vYmogPSBwaW9fbWdyLT5oY2hubF9tZ3I7CisKKwkvKiBBdHRlbXB0IHRvIHBlcmZvcm0gaW5wdXQgKi8KKwlpZiAoIXNtLT5pbnB1dF9mdWxsKQorCQlnb3RvIGZ1bmNfZW5kOworCisJYnl0ZXMgPSBzbS0+aW5wdXRfc2l6ZSAqIGNobmxfbWdyX29iai0+d29yZF9zaXplOworCWNobmxfaWQgPSBzbS0+aW5wdXRfaWQ7CisJZHdfYXJnID0gc20tPmFyZzsKKwlpZiAoY2hubF9pZCA+PSBDSE5MX01BWENIQU5ORUxTKSB7CisJCS8qIFNob3VsZG4ndCBiZSBoZXJlOiB3b3VsZCBpbmRpY2F0ZSBjb3JydXB0ZWQgc2htLiAqLworCQlEQkNfQVNTRVJUKGNobmxfaWQpOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlwY2hubCA9IGNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtjaG5sX2lkXTsKKwlpZiAoKHBjaG5sICE9IE5VTEwpICYmIENITkxfSVNfSU5QVVQocGNobmwtPmNobmxfbW9kZSkpIHsKKwkJaWYgKChwY2hubC0+ZHdfc3RhdGUgJiB+Q0hOTF9TVEFURUVPUykgPT0gQ0hOTF9TVEFURVJFQURZKSB7CisJCQlpZiAoIXBjaG5sLT5waW9fcmVxdWVzdHMpCisJCQkJZ290byBmdW5jX2VuZDsKKwkJCS8qIEdldCB0aGUgSS9PIHJlcXVlc3QsIGFuZCBhdHRlbXB0IGEgdHJhbnNmZXIgKi8KKwkJCWNobmxfcGFja2V0X29iaiA9IChzdHJ1Y3QgY2hubF9pcnAgKikKKwkJCSAgICBsc3RfZ2V0X2hlYWQocGNobmwtPnBpb19yZXF1ZXN0cyk7CisJCQlpZiAoY2hubF9wYWNrZXRfb2JqKSB7CisJCQkJcGNobmwtPmNpb19yZXFzLS07CisJCQkJaWYgKHBjaG5sLT5jaW9fcmVxcyA8IDApCisJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJLyoKKwkJCQkgKiBFbnN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGNsaWVudCdzCisJCQkJICogYnVmZmVyLgorCQkJCSAqLworCQkJCWJ5dGVzID0gbWluKGJ5dGVzLCBjaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSk7CisJCQkJbWVtY3B5KGNobmxfcGFja2V0X29iai0+aG9zdF9zeXNfYnVmLAorCQkJCQkJcGlvX21nci0+aW5wdXQsIGJ5dGVzKTsKKwkJCQlwY2hubC0+Ynl0ZXNfbW92ZWQgKz0gYnl0ZXM7CisJCQkJY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUgPSBieXRlczsKKwkJCQljaG5sX3BhY2tldF9vYmotPmR3X2FyZyA9IGR3X2FyZzsKKwkJCQljaG5sX3BhY2tldF9vYmotPnN0YXR1cyA9IENITkxfSU9DU1RBVENPTVBMRVRFOworCisJCQkJaWYgKGJ5dGVzID09IDApIHsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBhc3NlcnRpb24gZmFpbHMgaWYgdGhlIERTUAorCQkJCQkgKiBzZW5kcyBFT1MgbW9yZSB0aGFuIG9uY2Ugb24gdGhpcworCQkJCQkgKiBjaGFubmVsLgorCQkJCQkgKi8KKwkJCQkJaWYgKHBjaG5sLT5kd19zdGF0ZSAmIENITkxfU1RBVEVFT1MpCisJCQkJCQlnb3RvIGZ1bmNfZW5kOworCQkJCQkvKgorCQkJCQkgKiBaZXJvIGJ5dGVzIGluZGljYXRlcyBFT1MuIFVwZGF0ZQorCQkJCQkgKiBJT0Mgc3RhdHVzIGZvciB0aGlzIGNoaXJwLCBhbmQgYWxzbworCQkJCQkgKiB0aGUgY2hhbm5lbCBzdGF0ZS4KKwkJCQkJICovCisJCQkJCWNobmxfcGFja2V0X29iai0+c3RhdHVzIHw9CisJCQkJCSAgICBDSE5MX0lPQ1NUQVRFT1M7CisJCQkJCXBjaG5sLT5kd19zdGF0ZSB8PSBDSE5MX1NUQVRFRU9TOworCQkJCQkvKgorCQkJCQkgKiBOb3RpZnkgdGhhdCBlbmQgb2Ygc3RyZWFtIGhhcworCQkJCQkgKiBvY2N1cnJlZC4KKwkJCQkJICovCisJCQkJCW50Znlfbm90aWZ5KHBjaG5sLT5udGZ5X29iaiwKKwkJCQkJCSAgICBEU1BfU1RSRUFNRE9ORSk7CisJCQkJfQorCQkJCS8qIFRlbGwgRFNQIGlmIG5vIG1vcmUgSS9PIGJ1ZmZlcnMgYXZhaWxhYmxlICovCisJCQkJaWYgKCFwY2hubC0+cGlvX3JlcXVlc3RzKQorCQkJCQlnb3RvIGZ1bmNfZW5kOworCQkJCWlmIChMU1RfSVNfRU1QVFkocGNobmwtPnBpb19yZXF1ZXN0cykpIHsKKwkJCQkJc2V0X2NobmxfZnJlZShzbSwgcGNobmwtPmNobmxfaWQpOworCQkJCX0KKwkJCQljbGVhcl9jaG5sID0gdHJ1ZTsKKwkJCQlub3RpZnlfY2xpZW50ID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBJbnB1dCBmdWxsIGZvciB0aGlzIGNoYW5uZWwsIGJ1dCB3ZSBoYXZlIG5vCisJCQkJICogYnVmZmVycyBhdmFpbGFibGUuICBUaGUgY2hhbm5lbCBtdXN0IGJlCisJCQkJICogImlkbGluZyIuIENsZWFyIG91dCB0aGUgcGh5c2ljYWwgaW5wdXQKKwkJCQkgKiBjaGFubmVsLgorCQkJCSAqLworCQkJCWNsZWFyX2NobmwgPSB0cnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSW5wdXQgY2hhbm5lbCBjYW5jZWxsZWQ6IGNsZWFyIGlucHV0IGNoYW5uZWwgKi8KKwkJCWNsZWFyX2NobmwgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJLyogRFBDIGZpcmVkIGFmdGVyIGhvc3QgY2xvc2VkIGNoYW5uZWw6IGNsZWFyIGlucHV0IGNoYW5uZWwgKi8KKwkJY2xlYXJfY2hubCA9IHRydWU7CisJfQorCWlmIChjbGVhcl9jaG5sKSB7CisJCS8qIEluZGljYXRlIHRvIHRoZSBEU1Agd2UgaGF2ZSByZWFkIHRoZSBpbnB1dCAqLworCQlzbS0+aW5wdXRfZnVsbCA9IDA7CisJCXNtX2ludGVycnVwdF9kc3AocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBNQlhfUENQWV9DTEFTUyk7CisJfQorCWlmIChub3RpZnlfY2xpZW50KSB7CisJCS8qIE5vdGlmeSBjbGllbnQgd2l0aCBJTyBjb21wbGV0aW9uIHJlY29yZCAqLworCQlub3RpZnlfY2hubF9jb21wbGV0ZShwY2hubCwgY2hubF9wYWNrZXRfb2JqKTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW5wdXRfbXNnID09PT09PT09CisgKiAgICAgIENvcGllcyBtZXNzYWdlcyBmcm9tIHNoYXJlZCBtZW1vcnkgdG8gdGhlIG1lc3NhZ2UgcXVldWVzLgorICovCitzdGF0aWMgdm9pZCBpbnB1dF9tc2coc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKQoreworCXUzMiBudW1fbXNnczsKKwl1MzIgaTsKKwl1OCAqbXNnX2lucHV0OworCXN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmo7CisJc3RydWN0IG1zZ19mcmFtZSAqcG1zZzsKKwlzdHJ1Y3QgbXNnX2RzcG1zZyBtc2c7CisJc3RydWN0IG1zZ19jdHJsICptc2dfY3RyX29iajsKKwl1MzIgaW5wdXRfZW1wdHk7CisJdTMyIGFkZHI7CisKKwltc2dfY3RyX29iaiA9IHBpb19tZ3ItPm1zZ19pbnB1dF9jdHJsOworCS8qIEdldCB0aGUgbnVtYmVyIG9mIGlucHV0IG1lc3NhZ2VzIHRvIGJlIHJlYWQgKi8KKwlpbnB1dF9lbXB0eSA9IG1zZ19jdHJfb2JqLT5idWZfZW1wdHk7CisJbnVtX21zZ3MgPSBtc2dfY3RyX29iai0+c2l6ZTsKKwlpZiAoaW5wdXRfZW1wdHkpCisJCWdvdG8gZnVuY19lbmQ7CisKKwltc2dfaW5wdXQgPSBwaW9fbWdyLT5tc2dfaW5wdXQ7CisJZm9yIChpID0gMDsgaSA8IG51bV9tc2dzOyBpKyspIHsKKwkJLyogUmVhZCB0aGUgbmV4dCBtZXNzYWdlICovCisJCWFkZHIgPSAodTMyKSAmKCgoc3RydWN0IG1zZ19kc3Btc2cgKiltc2dfaW5wdXQpLT5tc2cuZHdfY21kKTsKKwkJbXNnLm1zZy5kd19jbWQgPQorCQkgICAgcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyKTsKKwkJYWRkciA9ICh1MzIpICYoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKW1zZ19pbnB1dCktPm1zZy5kd19hcmcxKTsKKwkJbXNnLm1zZy5kd19hcmcxID0KKwkJICAgIHJlYWRfZXh0MzJfYml0X2RzcF9kYXRhKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkcik7CisJCWFkZHIgPSAodTMyKSAmKCgoc3RydWN0IG1zZ19kc3Btc2cgKiltc2dfaW5wdXQpLT5tc2cuZHdfYXJnMik7CisJCW1zZy5tc2cuZHdfYXJnMiA9CisJCSAgICByZWFkX2V4dDMyX2JpdF9kc3BfZGF0YShwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIGFkZHIpOworCQlhZGRyID0gKHUzMikgJigoKHN0cnVjdCBtc2dfZHNwbXNnICopbXNnX2lucHV0KS0+bXNncV9pZCk7CisJCW1zZy5tc2dxX2lkID0KKwkJICAgIHJlYWRfZXh0MzJfYml0X2RzcF9kYXRhKHBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkcik7CisJCW1zZ19pbnB1dCArPSBzaXplb2Yoc3RydWN0IG1zZ19kc3Btc2cpOworCQlpZiAoIWhtc2dfbWdyLT5xdWV1ZV9saXN0KQorCQkJZ290byBmdW5jX2VuZDsKKworCQkvKiBEZXRlcm1pbmUgd2hpY2ggcXVldWUgdG8gcHV0IHRoZSBtZXNzYWdlIGluICovCisJCW1zZ19xdWV1ZV9vYmogPQorCQkgICAgKHN0cnVjdCBtc2dfcXVldWUgKilsc3RfZmlyc3QoaG1zZ19tZ3ItPnF1ZXVlX2xpc3QpOworCQlkZXZfZGJnKGJyaWRnZSwJImlucHV0IG1zZzogZHdfY21kPTB4JXggZHdfYXJnMT0weCV4ICIKKwkJCSJkd19hcmcyPTB4JXggbXNncV9pZD0weCV4IFxuIiwgbXNnLm1zZy5kd19jbWQsCisJCQltc2cubXNnLmR3X2FyZzEsIG1zZy5tc2cuZHdfYXJnMiwgbXNnLm1zZ3FfaWQpOworCQkvKgorCQkgKiBJbnRlcnJ1cHQgbWF5IG9jY3VyIGJlZm9yZSBzaGFyZWQgbWVtb3J5IGFuZCBtZXNzYWdlCisJCSAqIGlucHV0IGxvY2F0aW9ucyBoYXZlIGJlZW4gc2V0IHVwLiBJZiBhbGwgbm9kZXMgd2VyZQorCQkgKiBjbGVhbmVkIHVwLCBobXNnX21nci0+bWF4X21zZ3Mgc2hvdWxkIGJlIDAuCisJCSAqLworCQl3aGlsZSAobXNnX3F1ZXVlX29iaiAhPSBOVUxMKSB7CisJCQlpZiAobXNnLm1zZ3FfaWQgPT0gbXNnX3F1ZXVlX29iai0+bXNncV9pZCkgeworCQkJCS8qIEZvdW5kIGl0ICovCisJCQkJaWYgKG1zZy5tc2cuZHdfY21kID09IFJNU19FWElUQUNLKSB7CisJCQkJCS8qCisJCQkJCSAqIENhbGwgdGhlIG5vZGUgZXhpdCBub3RpZmljYXRpb24uCisJCQkJCSAqIFRoZSBleGl0IG1lc3NhZ2UgZG9lcyBub3QgZ2V0CisJCQkJCSAqIHF1ZXVlZC4KKwkJCQkJICovCisJCQkJCSgqaG1zZ19tZ3ItPm9uX2V4aXQpICgodm9pZCAqKQorCQkJCQkJCSAgIG1zZ19xdWV1ZV9vYmotPmFyZywKKwkJCQkJCQkgICBtc2cubXNnLmR3X2FyZzEpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIE5vdCBhbiBleGl0IGFja25vd2xlZGdlbWVudCwgcXVldWUKKwkJCQkJICogdGhlIG1lc3NhZ2UuCisJCQkJCSAqLworCQkJCQlpZiAoIW1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QpCisJCQkJCQlnb3RvIGZ1bmNfZW5kOworCQkJCQlwbXNnID0gKHN0cnVjdCBtc2dfZnJhbWUgKilsc3RfZ2V0X2hlYWQKKwkJCQkJICAgIChtc2dfcXVldWVfb2JqLT5tc2dfZnJlZV9saXN0KTsKKwkJCQkJaWYgKG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QKKwkJCQkJICAgICYmIHBtc2cpIHsKKwkJCQkJCXBtc2ctPm1zZ19kYXRhID0gbXNnOworCQkJCQkJbHN0X3B1dF90YWlsCisJCQkJCQkgKG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QsCisJCQkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopcG1zZyk7CisJCQkJCQludGZ5X25vdGlmeQorCQkJCQkJICAgIChtc2dfcXVldWVfb2JqLT5udGZ5X29iaiwKKwkJCQkJCSAgICAgRFNQX05PREVNRVNTQUdFUkVBRFkpOworCQkJCQkJc3luY19zZXRfZXZlbnQKKwkJCQkJCSAgICAobXNnX3F1ZXVlX29iai0+c3luY19ldmVudCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKgorCQkJCQkJICogTm8gZnJlZSBmcmFtZSB0byBjb3B5IHRoZQorCQkJCQkJICogbWVzc2FnZSBpbnRvLgorCQkJCQkJICovCisJCQkJCQlwcl9lcnIoIiVzOiBubyBmcmVlIG1zZyBmcmFtZXMsIgorCQkJCQkJICAgICAgICIgZGlzY2FyZGluZyBtc2dcbiIsCisJCQkJCQkgICAgICAgX19mdW5jX18pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoIWhtc2dfbWdyLT5xdWV1ZV9saXN0IHx8ICFtc2dfcXVldWVfb2JqKQorCQkJCWdvdG8gZnVuY19lbmQ7CisJCQltc2dfcXVldWVfb2JqID0KKwkJCSAgICAoc3RydWN0IG1zZ19xdWV1ZSAqKWxzdF9uZXh0KGhtc2dfbWdyLT5xdWV1ZV9saXN0LAorCQkJCQkJCSAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJCQkJCSBtc2dfcXVldWVfb2JqKTsKKwkJfQorCX0KKwkvKiBTZXQgdGhlIHBvc3QgU1dJIGZsYWcgKi8KKwlpZiAobnVtX21zZ3MgPiAwKSB7CisJCS8qIFRlbGwgdGhlIERTUCB3ZSd2ZSByZWFkIHRoZSBtZXNzYWdlcyAqLworCQltc2dfY3RyX29iai0+YnVmX2VtcHR5ID0gdHJ1ZTsKKwkJbXNnX2N0cl9vYmotPnBvc3Rfc3dpID0gdHJ1ZTsKKwkJc21faW50ZXJydXB0X2RzcChwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIE1CWF9QQ1BZX0NMQVNTKTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm90aWZ5X2NobmxfY29tcGxldGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTaWduYWwgdGhlIGNoYW5uZWwgZXZlbnQsIG5vdGlmeWluZyB0aGUgY2xpZW50IHRoYXQgSS9PIGhhcyBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIG5vdGlmeV9jaG5sX2NvbXBsZXRlKHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkJIHN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqKQoreworCWJvb2wgc2lnbmFsX2V2ZW50OworCisJaWYgKCFwY2hubCB8fCAhcGNobmwtPnN5bmNfZXZlbnQgfHwKKwkgICAgIXBjaG5sLT5waW9fY29tcGxldGlvbnMgfHwgIWNobmxfcGFja2V0X29iaikKKwkJZ290byBmdW5jX2VuZDsKKworCS8qCisJICogTm90ZTogd2Ugc2lnbmFsIHRoZSBjaGFubmVsIGV2ZW50IG9ubHkgaWYgdGhlIHF1ZXVlIG9mIElPCisJICogY29tcGxldGlvbnMgaXMgZW1wdHkuICBJZiBpdCBpcyBub3QgZW1wdHksIHRoZSBldmVudCBpcyBzdXJlIHRvIGJlCisJICogc2lnbmFsbGVkIGJ5IHRoZSBvbmx5IElPIGNvbXBsZXRpb24gbGlzdCBjb25zdW1lcjoKKwkgKiBicmlkZ2VfY2hubF9nZXRfaW9jKCkuCisJICovCisJc2lnbmFsX2V2ZW50ID0gTFNUX0lTX0VNUFRZKHBjaG5sLT5waW9fY29tcGxldGlvbnMpOworCS8qIEVucXVldWUgdGhlIElPIGNvbXBsZXRpb24gaW5mbyBmb3IgdGhlIGNsaWVudCAqLworCWxzdF9wdXRfdGFpbChwY2hubC0+cGlvX2NvbXBsZXRpb25zLAorCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopY2hubF9wYWNrZXRfb2JqKTsKKwlwY2hubC0+Y2lvX2NzKys7CisKKwlpZiAocGNobmwtPmNpb19jcyA+IHBjaG5sLT5jaG5sX3BhY2tldHMpCisJCWdvdG8gZnVuY19lbmQ7CisJLyogU2lnbmFsIHRoZSBjaGFubmVsIGV2ZW50IChpZiBub3QgYWxyZWFkeSBzZXQpIHRoYXQgSU8gaXMgY29tcGxldGUgKi8KKwlpZiAoc2lnbmFsX2V2ZW50KQorCQlzeW5jX3NldF9ldmVudChwY2hubC0+c3luY19ldmVudCk7CisKKwkvKiBOb3RpZnkgdGhhdCBJTyBpcyBjb21wbGV0ZSAqLworCW50Znlfbm90aWZ5KHBjaG5sLT5udGZ5X29iaiwgRFNQX1NUUkVBTUlPQ09NUExFVElPTik7CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gb3V0cHV0X2NobmwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNwYXRjaCBhIGJ1ZmZlciBvbiBhbiBvdXRwdXQgY2hhbm5lbC4KKyAqLworc3RhdGljIHZvaWQgb3V0cHV0X2Nobmwoc3RydWN0IGlvX21nciAqcGlvX21nciwgc3RydWN0IGNobmxfb2JqZWN0ICpwY2hubCwKKwkJCXU4IGlvX21vZGUpCit7CisJc3RydWN0IGNobmxfbWdyICpjaG5sX21ncl9vYmo7CisJc3RydWN0IHNobSAqc207CisJdTMyIGNobmxfaWQ7CisJc3RydWN0IGNobmxfaXJwICpjaG5sX3BhY2tldF9vYmo7CisJdTMyIGR3X2RzcF9mX21hc2s7CisKKwljaG5sX21ncl9vYmogPSBwaW9fbWdyLT5oY2hubF9tZ3I7CisJc20gPSBwaW9fbWdyLT5zaGFyZWRfbWVtOworCS8qIEF0dGVtcHQgdG8gcGVyZm9ybSBvdXRwdXQgKi8KKwlpZiAoc20tPm91dHB1dF9mdWxsKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKHBjaG5sICYmICEoKHBjaG5sLT5kd19zdGF0ZSAmIH5DSE5MX1NUQVRFRU9TKSA9PSBDSE5MX1NUQVRFUkVBRFkpKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogTG9vayB0byBzZWUgaWYgYm90aCBhIFBDIGFuZCBEU1Agb3V0cHV0IGNoYW5uZWwgYXJlIHJlYWR5ICovCisJZHdfZHNwX2ZfbWFzayA9IHNtLT5kc3BfZnJlZV9tYXNrOworCWNobmxfaWQgPQorCSAgICBmaW5kX3JlYWR5X291dHB1dChjaG5sX21ncl9vYmosIHBjaG5sLAorCQkJICAgICAgKGNobmxfbWdyX29iai0+ZHdfb3V0cHV0X21hc2sgJiBkd19kc3BfZl9tYXNrKSk7CisJaWYgKGNobmxfaWQgPT0gT1VUUFVUTk9UUkVBRFkpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlwY2hubCA9IGNobmxfbWdyX29iai0+YXBfY2hhbm5lbFtjaG5sX2lkXTsKKwlpZiAoIXBjaG5sIHx8ICFwY2hubC0+cGlvX3JlcXVlc3RzKSB7CisJCS8qIFNob3VsZG4ndCBnZXQgaGVyZSAqLworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBHZXQgdGhlIEkvTyByZXF1ZXN0LCBhbmQgYXR0ZW1wdCBhIHRyYW5zZmVyICovCisJY2hubF9wYWNrZXRfb2JqID0gKHN0cnVjdCBjaG5sX2lycCAqKWxzdF9nZXRfaGVhZChwY2hubC0+cGlvX3JlcXVlc3RzKTsKKwlpZiAoIWNobmxfcGFja2V0X29iaikKKwkJZ290byBmdW5jX2VuZDsKKworCXBjaG5sLT5jaW9fcmVxcy0tOworCWlmIChwY2hubC0+Y2lvX3JlcXMgPCAwIHx8ICFwY2hubC0+cGlvX3JlcXVlc3RzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogUmVjb3JkIGZhY3QgdGhhdCBubyBtb3JlIEkvTyBidWZmZXJzIGF2YWlsYWJsZSAqLworCWlmIChMU1RfSVNfRU1QVFkocGNobmwtPnBpb19yZXF1ZXN0cykpCisJCWNobmxfbWdyX29iai0+ZHdfb3V0cHV0X21hc2sgJj0gfigxIDw8IGNobmxfaWQpOworCisJLyogVHJhbnNmZXIgYnVmZmVyIHRvIERTUCBzaWRlICovCisJY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUgPSBtaW4ocGlvX21nci0+dXNtX2J1Zl9zaXplLAorCQkJCQljaG5sX3BhY2tldF9vYmotPmJ5dGVfc2l6ZSk7CisJbWVtY3B5KHBpb19tZ3ItPm91dHB1dCwJY2hubF9wYWNrZXRfb2JqLT5ob3N0X3N5c19idWYsCisJCQkJCWNobmxfcGFja2V0X29iai0+Ynl0ZV9zaXplKTsKKwlwY2hubC0+Ynl0ZXNfbW92ZWQgKz0gY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemU7CisJLyogV3JpdGUgYWxsIDMyIGJpdHMgb2YgYXJnICovCisJc20tPmFyZyA9IGNobmxfcGFja2V0X29iai0+ZHdfYXJnOworI2lmIF9DSE5MX1dPUkRTSVpFID09IDIKKwkvKiBBY2Nlc3MgY2FuIGJlIGRpZmZlcmVudCBTTSBhY2Nlc3Mgd29yZCBzaXplIChlLmcuIDE2LzMyIGJpdCB3b3JkcykgKi8KKwlzbS0+b3V0cHV0X2lkID0gKHUxNikgY2hubF9pZDsKKwlzbS0+b3V0cHV0X3NpemUgPSAodTE2KSAoY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUgKworCQkJCWNobmxfbWdyX29iai0+d29yZF9zaXplIC0gMSkgLworCQkJCSh1MTYpIGNobmxfbWdyX29iai0+d29yZF9zaXplOworI2Vsc2UKKwlzbS0+b3V0cHV0X2lkID0gY2hubF9pZDsKKwlzbS0+b3V0cHV0X3NpemUgPSAoY2hubF9wYWNrZXRfb2JqLT5ieXRlX3NpemUgKworCQkJY2hubF9tZ3Jfb2JqLT53b3JkX3NpemUgLSAxKSAvIGNobmxfbWdyX29iai0+d29yZF9zaXplOworI2VuZGlmCisJc20tPm91dHB1dF9mdWxsID0gIDE7CisJLyogSW5kaWNhdGUgdG8gdGhlIERTUCB3ZSBoYXZlIHdyaXR0ZW4gdGhlIG91dHB1dCAqLworCXNtX2ludGVycnVwdF9kc3AocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBNQlhfUENQWV9DTEFTUyk7CisJLyogTm90aWZ5IGNsaWVudCB3aXRoIElPIGNvbXBsZXRpb24gcmVjb3JkIChrZWVwIEVPUykgKi8KKwljaG5sX3BhY2tldF9vYmotPnN0YXR1cyAmPSBDSE5MX0lPQ1NUQVRFT1M7CisJbm90aWZ5X2NobmxfY29tcGxldGUocGNobmwsIGNobmxfcGFja2V0X29iaik7CisJLyogTm90aWZ5IGlmIHN0cmVhbSBpcyBkb25lLiAqLworCWlmIChjaG5sX3BhY2tldF9vYmotPnN0YXR1cyAmIENITkxfSU9DU1RBVEVPUykKKwkJbnRmeV9ub3RpZnkocGNobmwtPm50Znlfb2JqLCBEU1BfU1RSRUFNRE9ORSk7CisKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBvdXRwdXRfbXNnID09PT09PT09CisgKiAgICAgIENvcGllcyBtZXNzYWdlcyBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlcyB0byB0aGUgc2hhcmVkIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgb3V0cHV0X21zZyhzdHJ1Y3QgaW9fbWdyICpwaW9fbWdyLCBzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCit7CisJdTMyIG51bV9tc2dzID0gMDsKKwl1MzIgaTsKKwl1OCAqbXNnX291dHB1dDsKKwlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOworCXN0cnVjdCBtc2dfY3RybCAqbXNnX2N0cl9vYmo7CisJdTMyIG91dHB1dF9lbXB0eTsKKwl1MzIgdmFsOworCXUzMiBhZGRyOworCisJbXNnX2N0cl9vYmogPSBwaW9fbWdyLT5tc2dfb3V0cHV0X2N0cmw7CisKKwkvKiBDaGVjayBpZiBvdXRwdXQgaGFzIGJlZW4gY2xlYXJlZCAqLworCW91dHB1dF9lbXB0eSA9IG1zZ19jdHJfb2JqLT5idWZfZW1wdHk7CisJaWYgKG91dHB1dF9lbXB0eSkgeworCQludW1fbXNncyA9IChobXNnX21nci0+bXNnc19wZW5kaW5nID4gaG1zZ19tZ3ItPm1heF9tc2dzKSA/CisJCSAgICBobXNnX21nci0+bWF4X21zZ3MgOiBobXNnX21nci0+bXNnc19wZW5kaW5nOworCQltc2dfb3V0cHV0ID0gcGlvX21nci0+bXNnX291dHB1dDsKKwkJLyogQ29weSBudW1fbXNncyBtZXNzYWdlcyBpbnRvIHNoYXJlZCBtZW1vcnkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bV9tc2dzOyBpKyspIHsKKwkJCWlmICghaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QpIHsKKwkJCQlwbXNnID0gTlVMTDsKKwkJCQlnb3RvIGZ1bmNfZW5kOworCQkJfSBlbHNlIHsKKwkJCQlwbXNnID0gKHN0cnVjdCBtc2dfZnJhbWUgKikKKwkJCQkgICAgbHN0X2dldF9oZWFkKGhtc2dfbWdyLT5tc2dfdXNlZF9saXN0KTsKKwkJCX0KKwkJCWlmIChwbXNnICE9IE5VTEwpIHsKKwkJCQl2YWwgPSAocG1zZy0+bXNnX2RhdGEpLm1zZ3FfaWQ7CisJCQkJYWRkciA9ICh1MzIpICYoKChzdHJ1Y3QgbXNnX2RzcG1zZyAqKQorCQkJCQkJIG1zZ19vdXRwdXQpLT5tc2dxX2lkKTsKKwkJCQl3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEoCisJCQkJCXBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkciwgdmFsKTsKKwkJCQl2YWwgPSAocG1zZy0+bXNnX2RhdGEpLm1zZy5kd19jbWQ7CisJCQkJYWRkciA9ICh1MzIpICYoKCgoc3RydWN0IG1zZ19kc3Btc2cgKikKKwkJCQkJCSAgbXNnX291dHB1dCktPm1zZykuZHdfY21kKTsKKwkJCQl3cml0ZV9leHQzMl9iaXRfZHNwX2RhdGEoCisJCQkJCXBpb19tZ3ItPmhicmlkZ2VfY29udGV4dCwgYWRkciwgdmFsKTsKKwkJCQl2YWwgPSAocG1zZy0+bXNnX2RhdGEpLm1zZy5kd19hcmcxOworCQkJCWFkZHIgPSAodTMyKSAmKCgoKHN0cnVjdCBtc2dfZHNwbXNnICopCisJCQkJCQkgIG1zZ19vdXRwdXQpLT5tc2cpLmR3X2FyZzEpOworCQkJCXdyaXRlX2V4dDMyX2JpdF9kc3BfZGF0YSgKKwkJCQkJcGlvX21nci0+aGJyaWRnZV9jb250ZXh0LCBhZGRyLCB2YWwpOworCQkJCXZhbCA9IChwbXNnLT5tc2dfZGF0YSkubXNnLmR3X2FyZzI7CisJCQkJYWRkciA9ICh1MzIpICYoKCgoc3RydWN0IG1zZ19kc3Btc2cgKikKKwkJCQkJCSAgbXNnX291dHB1dCktPm1zZykuZHdfYXJnMik7CisJCQkJd3JpdGVfZXh0MzJfYml0X2RzcF9kYXRhKAorCQkJCQlwaW9fbWdyLT5oYnJpZGdlX2NvbnRleHQsIGFkZHIsIHZhbCk7CisJCQkJbXNnX291dHB1dCArPSBzaXplb2Yoc3RydWN0IG1zZ19kc3Btc2cpOworCQkJCWlmICghaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpCisJCQkJCWdvdG8gZnVuY19lbmQ7CisJCQkJbHN0X3B1dF90YWlsKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0LAorCQkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopcG1zZyk7CisJCQkJc3luY19zZXRfZXZlbnQoaG1zZ19tZ3ItPnN5bmNfZXZlbnQpOworCQkJfQorCQl9CisKKwkJaWYgKG51bV9tc2dzID4gMCkgeworCQkJaG1zZ19tZ3ItPm1zZ3NfcGVuZGluZyAtPSBudW1fbXNnczsKKyNpZiBfQ0hOTF9XT1JEU0laRSA9PSAyCisJCQkvKgorCQkJICogQWNjZXNzIGNhbiBiZSBkaWZmZXJlbnQgU00gYWNjZXNzIHdvcmQgc2l6ZQorCQkJICogKGUuZy4gMTYvMzIgYml0IHdvcmRzKQorCQkJICovCisJCQltc2dfY3RyX29iai0+c2l6ZSA9ICh1MTYpIG51bV9tc2dzOworI2Vsc2UKKwkJCW1zZ19jdHJfb2JqLT5zaXplID0gbnVtX21zZ3M7CisjZW5kaWYKKwkJCW1zZ19jdHJfb2JqLT5idWZfZW1wdHkgPSBmYWxzZTsKKwkJCS8qIFNldCB0aGUgcG9zdCBTV0kgZmxhZyAqLworCQkJbXNnX2N0cl9vYmotPnBvc3Rfc3dpID0gdHJ1ZTsKKwkJCS8qIFRlbGwgdGhlIERTUCB3ZSBoYXZlIHdyaXR0ZW4gdGhlIG91dHB1dC4gKi8KKwkJCXNtX2ludGVycnVwdF9kc3AocGlvX21nci0+aGJyaWRnZV9jb250ZXh0LAorCQkJCQkJTUJYX1BDUFlfQ0xBU1MpOworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IHJlZ2lzdGVyX3NobV9zZWdzID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgUmVnaXN0ZXJzIEdQUCBTTSBzZWdtZW50IHdpdGggQ01NLgorICovCitzdGF0aWMgaW50IHJlZ2lzdGVyX3NobV9zZWdzKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJICAgIHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21hbiwKKwkJCQkgICAgdTMyIGR3X2dwcF9iYXNlX3BhKQoreworCWludCBzdGF0dXMgPSAwOworCXUzMiB1bF9zaG0wX2Jhc2UgPSAwOworCXUzMiBzaG0wX2VuZCA9IDA7CisJdTMyIHVsX3NobTBfcnNydmRfc3RhcnQgPSAwOworCXUzMiB1bF9yc3J2ZF9zaXplID0gMDsKKwl1MzIgdWxfZ3BwX3BoeXM7CisJdTMyIHVsX2RzcF92aXJ0OworCXUzMiB1bF9zaG1fc2VnX2lkMCA9IDA7CisJdTMyIGR3X29mZnNldCwgZHdfZ3BwX2Jhc2VfdmEsIHVsX2RzcF9zaXplOworCisJLyoKKwkgKiBSZWFkIGFkZHJlc3MgYW5kIHNpemUgaW5mbyBmb3IgZmlyc3QgU00gcmVnaW9uLgorCSAqIEdldCBzdGFydCBvZiAxc3QgU00gSGVhcCByZWdpb24uCisJICovCisJc3RhdHVzID0KKwkgICAgY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgU0hNMF9TSEFSRURfQkFTRV9TWU0sICZ1bF9zaG0wX2Jhc2UpOworCWlmICh1bF9zaG0wX2Jhc2UgPT0gMCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIEdldCBlbmQgb2YgMXN0IFNNIEhlYXAgcmVnaW9uICovCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogR2V0IHN0YXJ0IGFuZCBsZW5ndGggb2YgbWVzc2FnZSBwYXJ0IG9mIHNoYXJlZCBtZW1vcnkgKi8KKwkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21hbiwgU0hNMF9TSEFSRURfRU5EX1NZTSwKKwkJCQkJICAgJnNobTBfZW5kKTsKKwkJaWYgKHNobTBfZW5kID09IDApIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisJLyogU3RhcnQgb2YgR3BwIHJlc2VydmVkIHJlZ2lvbiAqLworCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCBzdGFydCBhbmQgbGVuZ3RoIG9mIG1lc3NhZ2UgcGFydCBvZiBzaGFyZWQgbWVtb3J5ICovCisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWFuLCBTSE0wX1NIQVJFRF9SRVNFUlZFRF9CQVNFX1NZTSwKKwkJCQkgICAgICAmdWxfc2htMF9yc3J2ZF9zdGFydCk7CisJCWlmICh1bF9zaG0wX3JzcnZkX3N0YXJ0ID09IDApIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisJLyogUmVnaXN0ZXIgd2l0aCBDTU0gKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NtbV9tZ3IoaGlvX21nci0+aGRldl9vYmosICZoaW9fbWdyLT5oY21tX21ncik7CisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPSBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnKGhpb19tZ3ItPmhjbW1fbWdyLAorCQkJCQkJCSAgIENNTV9BTExTRUdNRU5UUyk7CisJCX0KKwl9CisJLyogUmVnaXN0ZXIgbmV3IFNNIHJlZ2lvbihzKSAqLworCWlmICghc3RhdHVzICYmIChzaG0wX2VuZCAtIHVsX3NobTBfYmFzZSkgPiAwKSB7CisJCS8qIENhbGMgc2l6ZSAoYnl0ZXMpIG9mIFNNIHRoZSBHUFAgY2FuIGFsbG9jIGZyb20gKi8KKwkJdWxfcnNydmRfc2l6ZSA9CisJCSAgICAoc2htMF9lbmQgLSB1bF9zaG0wX3JzcnZkX3N0YXJ0ICsgMSkgKiBoaW9fbWdyLT53b3JkX3NpemU7CisJCWlmICh1bF9yc3J2ZF9zaXplIDw9IDApIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyogQ2FsYyBzaXplIG9mIFNNIERTUCBjYW4gYWxsb2MgZnJvbSAqLworCQl1bF9kc3Bfc2l6ZSA9CisJCSAgICAodWxfc2htMF9yc3J2ZF9zdGFydCAtIHVsX3NobTBfYmFzZSkgKiBoaW9fbWdyLT53b3JkX3NpemU7CisJCWlmICh1bF9kc3Bfc2l6ZSA8PSAwKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisJCS8qIEZpcnN0IFRMQiBlbnRyeSByZXNlcnZlZCBmb3IgQnJpZGdlIFNNIHVzZS4gKi8KKwkJdWxfZ3BwX3BoeXMgPSBoaW9fbWdyLT5leHRfcHJvY19pbmZvLnR5X3RsYlswXS51bF9ncHBfcGh5czsKKwkJLyogR2V0IHNpemUgaW4gYnl0ZXMgKi8KKwkJdWxfZHNwX3ZpcnQgPQorCQkgICAgaGlvX21nci0+ZXh0X3Byb2NfaW5mby50eV90bGJbMF0udWxfZHNwX3ZpcnQgKgorCQkgICAgaGlvX21nci0+d29yZF9zaXplOworCQkvKgorCQkgKiBDYWxjIGJ5dGUgb2Zmc2V0IHVzZWQgdG8gY29udmVydCBHUFAgcGh5cyA8LT4gRFNQIGJ5dGUKKwkJICogYWRkcmVzcy4KKwkJICovCisJCWlmIChkd19ncHBfYmFzZV9wYSA+IHVsX2RzcF92aXJ0KQorCQkJZHdfb2Zmc2V0ID0gZHdfZ3BwX2Jhc2VfcGEgLSB1bF9kc3BfdmlydDsKKwkJZWxzZQorCQkJZHdfb2Zmc2V0ID0gdWxfZHNwX3ZpcnQgLSBkd19ncHBfYmFzZV9wYTsKKworCQlpZiAodWxfc2htMF9yc3J2ZF9zdGFydCAqIGhpb19tZ3ItPndvcmRfc2l6ZSA8IHVsX2RzcF92aXJ0KSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisJCS8qCisJCSAqIENhbGMgR3BwIHBoeXMgYmFzZSBvZiBTTSByZWdpb24uCisJCSAqIFRoaXMgaXMgYWN0dWFsbHkgdW5jYWNoZWQga2VybmVsIHZpcnR1YWwgYWRkcmVzcy4KKwkJICovCisJCWR3X2dwcF9iYXNlX3ZhID0KKwkJICAgIHVsX2dwcF9waHlzICsgdWxfc2htMF9yc3J2ZF9zdGFydCAqIGhpb19tZ3ItPndvcmRfc2l6ZSAtCisJCSAgICB1bF9kc3BfdmlydDsKKwkJLyoKKwkJICogQ2FsYyBHcHAgcGh5cyBiYXNlIG9mIFNNIHJlZ2lvbi4KKwkJICogVGhpcyBpcyB0aGUgcGh5c2ljYWwgYWRkcmVzcy4KKwkJICovCisJCWR3X2dwcF9iYXNlX3BhID0KKwkJICAgIGR3X2dwcF9iYXNlX3BhICsgdWxfc2htMF9yc3J2ZF9zdGFydCAqIGhpb19tZ3ItPndvcmRfc2l6ZSAtCisJCSAgICB1bF9kc3BfdmlydDsKKwkJLyogUmVnaXN0ZXIgU00gU2VnbWVudCAwLiAqLworCQlzdGF0dXMgPQorCQkgICAgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZyhoaW9fbWdyLT5oY21tX21nciwgZHdfZ3BwX2Jhc2VfcGEsCisJCQkJCSAgIHVsX3JzcnZkX3NpemUsIGR3X29mZnNldCwKKwkJCQkJICAgKGR3X2dwcF9iYXNlX3BhID4KKwkJCQkJICAgIHVsX2RzcF92aXJ0KSA/IENNTV9BRERUT0RTUFBBIDoKKwkJCQkJICAgQ01NX1NVQkZST01EU1BQQSwKKwkJCQkJICAgKHUzMikgKHVsX3NobTBfYmFzZSAqCisJCQkJCQkgIGhpb19tZ3ItPndvcmRfc2l6ZSksCisJCQkJCSAgIHVsX2RzcF9zaXplLCAmdWxfc2htX3NlZ19pZDAsCisJCQkJCSAgIGR3X2dwcF9iYXNlX3ZhKTsKKwkJLyogRmlyc3QgU00gcmVnaW9uIGlzIHNlZ19pZCA9IDEgKi8KKwkJaWYgKHVsX3NobV9zZWdfaWQwICE9IDEpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogWkNQWSBJTyByb3V0aW5lcy4gKi8KKy8qCisgKiAgPT09PT09PT0gSU9fU0hNY29udHJvbCA9PT09PT09PQorICogICAgICBTZXRzIHRoZSByZXF1ZXN0ZWQgc2htIHNldHRpbmcuCisgKi8KK2ludCBpb19zaF9tc2V0dGluZyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1OCBkZXNjLCB2b2lkICpwYXJncykKK3sKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCXUzMiBpOworCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCSAgICBvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJc3dpdGNoIChkZXNjKSB7CisJY2FzZSBTSE1fQ1VSUk9QUDoKKwkJLyogVXBkYXRlIHRoZSBzaGFyZWQgbWVtb3J5IHdpdGggcmVxdWVzdGVkIE9QUCBpbmZvcm1hdGlvbiAqLworCQlpZiAocGFyZ3MgIT0gTlVMTCkKKwkJCWhpb19tZ3ItPnNoYXJlZF9tZW0tPm9wcF90YWJsZV9zdHJ1Y3QuY3Vycl9vcHBfcHQgPQorCQkJICAgICoodTMyICopIHBhcmdzOworCQllbHNlCisJCQlyZXR1cm4gLUVQRVJNOworCQlicmVhazsKKwljYXNlIFNITV9PUFBJTkZPOgorCQkvKgorCQkgKiBVcGRhdGUgdGhlIHNoYXJlZCBtZW1vcnkgd2l0aCB0aGUgdm9sdGFnZSwgZnJlcXVlbmN5LAorCQkgKiBtaW4gYW5kIG1heCBmcmVxdWVuY3kgdmFsdWVzIGZvciBhbiBPUFAuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDw9IGRzcF9tYXhfb3BwczsgaSsrKSB7CisJCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm9wcF9wb2ludFtpXS4KKwkJCSAgICB2b2x0YWdlID0gdmRkMV9kc3BfZnJlcVtpXVswXTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiT1BQLXNobTogdm9sdGFnZTogJWRcbiIsCisJCQkJdmRkMV9kc3BfZnJlcVtpXVswXSk7CisJCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0LgorCQkJICAgIG9wcF9wb2ludFtpXS5mcmVxdWVuY3kgPSB2ZGQxX2RzcF9mcmVxW2ldWzFdOworCQkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiBmcmVxdWVuY3k6ICVkXG4iLAorCQkJCXZkZDFfZHNwX2ZyZXFbaV1bMV0pOworCQkJaGlvX21nci0+c2hhcmVkX21lbS0+b3BwX3RhYmxlX3N0cnVjdC5vcHBfcG9pbnRbaV0uCisJCQkgICAgbWluX2ZyZXEgPSB2ZGQxX2RzcF9mcmVxW2ldWzJdOworCQkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiBtaW4gZnJlcTogJWRcbiIsCisJCQkJdmRkMV9kc3BfZnJlcVtpXVsyXSk7CisJCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm9wcF9wb2ludFtpXS4KKwkJCSAgICBtYXhfZnJlcSA9IHZkZDFfZHNwX2ZyZXFbaV1bM107CisJCQlkZXZfZGJnKGJyaWRnZSwgIk9QUC1zaG06IG1heCBmcmVxOiAlZFxuIiwKKwkJCQl2ZGQxX2RzcF9mcmVxW2ldWzNdKTsKKwkJfQorCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0Lm51bV9vcHBfcHRzID0KKwkJICAgIGRzcF9tYXhfb3BwczsKKwkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiBtYXggT1BQIG51bWJlcjogJWRcbiIsIGRzcF9tYXhfb3Bwcyk7CisJCS8qIFVwZGF0ZSB0aGUgY3VycmVudCBPUFAgbnVtYmVyICovCisJCWlmIChwZGF0YS0+ZHNwX2dldF9vcHApCisJCQlpID0gKCpwZGF0YS0+ZHNwX2dldF9vcHApICgpOworCQloaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfdGFibGVfc3RydWN0LmN1cnJfb3BwX3B0ID0gaTsKKwkJZGV2X2RiZyhicmlkZ2UsICJPUFAtc2htOiB2YWx1ZSBwcm9ncmFtbWVkID0gJWRcbiIsIGkpOworCQlicmVhazsKKwljYXNlIFNITV9HRVRPUFA6CisJCS8qIEdldCB0aGUgT1BQIHRoYXQgRFNQIGhhcyByZXF1ZXN0ZWQgKi8KKwkJKih1MzIgKikgcGFyZ3MgPSBoaW9fbWdyLT5zaGFyZWRfbWVtLT5vcHBfcmVxdWVzdC5ycXN0X29wcF9wdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2dldF9wcm9jX2xvYWQgPT09PT09PT0KKyAqICAgICAgR2V0cyB0aGUgUHJvY2Vzc29yJ3MgTG9hZCBpbmZvcm1hdGlvbgorICovCitpbnQgYnJpZGdlX2lvX2dldF9wcm9jX2xvYWQoc3RydWN0IGlvX21nciAqaGlvX21nciwKKwkJCQlzdHJ1Y3QgZHNwX3Byb2Nsb2Fkc3RhdCAqcHJvY19sc3RhdCkKK3sKKwlwcm9jX2xzdGF0LT5jdXJyX2xvYWQgPQorCQkJaGlvX21nci0+c2hhcmVkX21lbS0+bG9hZF9tb25faW5mby5jdXJyX2RzcF9sb2FkOworCXByb2NfbHN0YXQtPnByZWRpY3RlZF9sb2FkID0KKwkgICAgaGlvX21nci0+c2hhcmVkX21lbS0+bG9hZF9tb25faW5mby5wcmVkX2RzcF9sb2FkOworCXByb2NfbHN0YXQtPmN1cnJfZHNwX2ZyZXEgPQorCSAgICBoaW9fbWdyLT5zaGFyZWRfbWVtLT5sb2FkX21vbl9pbmZvLmN1cnJfZHNwX2ZyZXE7CisJcHJvY19sc3RhdC0+cHJlZGljdGVkX2ZyZXEgPQorCSAgICBoaW9fbWdyLT5zaGFyZWRfbWVtLT5sb2FkX21vbl9pbmZvLnByZWRfZHNwX2ZyZXE7CisKKwlkZXZfZGJnKGJyaWRnZSwgIkN1cnIgTG9hZCA9ICVkLCBQcmVkIExvYWQgPSAlZCwgQ3VyciBGcmVxID0gJWQsICIKKwkJIlByZWQgRnJlcSA9ICVkXG4iLCBwcm9jX2xzdGF0LT5jdXJyX2xvYWQsCisJCXByb2NfbHN0YXQtPnByZWRpY3RlZF9sb2FkLCBwcm9jX2xzdGF0LT5jdXJyX2RzcF9mcmVxLAorCQlwcm9jX2xzdGF0LT5wcmVkaWN0ZWRfZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaW9fc21faW5pdCh2b2lkKQoreworCS8qIERvIG5vdGhpbmcgKi8KK30KKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCit2b2lkIHByaW50X2RzcF9kZWJ1Z190cmFjZShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKQoreworCXUzMiB1bF9uZXdfbWVzc2FnZV9sZW5ndGggPSAwLCB1bF9ncHBfY3VyX3BvaW50ZXI7CisKKwl3aGlsZSAodHJ1ZSkgeworCQkvKiBHZXQgdGhlIERTUCBjdXJyZW50IHBvaW50ZXIgKi8KKwkJdWxfZ3BwX2N1cl9wb2ludGVyID0KKwkJICAgICoodTMyICopIChoaW9fbWdyLT51bF90cmFjZV9idWZmZXJfY3VycmVudCk7CisJCXVsX2dwcF9jdXJfcG9pbnRlciA9CisJCSAgICBoaW9fbWdyLT51bF9ncHBfdmEgKyAodWxfZ3BwX2N1cl9wb2ludGVyIC0KKwkJCQkJICBoaW9fbWdyLT51bF9kc3BfdmEpOworCisJCS8qIE5vIG5ldyBkZWJ1ZyBtZXNzYWdlcyBhdmFpbGFibGUgeWV0ICovCisJCWlmICh1bF9ncHBfY3VyX3BvaW50ZXIgPT0gaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcikgeworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodWxfZ3BwX2N1cl9wb2ludGVyID4gaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcikgeworCQkJLyogQ29udGludW91cyBkYXRhICovCisJCQl1bF9uZXdfbWVzc2FnZV9sZW5ndGggPQorCQkJICAgIHVsX2dwcF9jdXJfcG9pbnRlciAtIGhpb19tZ3ItPnVsX2dwcF9yZWFkX3BvaW50ZXI7CisKKwkJCW1lbWNweShoaW9fbWdyLT5wbXNnLAorCQkJICAgICAgIChjaGFyICopaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciwKKwkJCSAgICAgICB1bF9uZXdfbWVzc2FnZV9sZW5ndGgpOworCQkJaGlvX21nci0+cG1zZ1t1bF9uZXdfbWVzc2FnZV9sZW5ndGhdID0gJ1wwJzsKKwkJCS8qCisJCQkgKiBBZHZhbmNlIHRoZSBHUFAgdHJhY2UgcG9pbnRlciB0byBEU1AgY3VycmVudAorCQkJICogcG9pbnRlci4KKwkJCSAqLworCQkJaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciArPSB1bF9uZXdfbWVzc2FnZV9sZW5ndGg7CisJCQkvKiBQcmludCB0aGUgdHJhY2UgbWVzc2FnZXMgKi8KKwkJCXByX2luZm8oIkRTUFRyYWNlOiAlc1xuIiwgaGlvX21nci0+cG1zZyk7CisJCX0gZWxzZSBpZiAodWxfZ3BwX2N1cl9wb2ludGVyIDwgaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcikgeworCQkJLyogSGFuZGxlIHRyYWNlIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCQltZW1jcHkoaGlvX21nci0+cG1zZywKKwkJCSAgICAgICAoY2hhciAqKWhpb19tZ3ItPnVsX2dwcF9yZWFkX3BvaW50ZXIsCisJCQkgICAgICAgaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2VuZCAtCisJCQkgICAgICAgaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcik7CisJCQl1bF9uZXdfbWVzc2FnZV9sZW5ndGggPQorCQkJICAgIHVsX2dwcF9jdXJfcG9pbnRlciAtIGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbjsKKwkJCW1lbWNweSgmaGlvX21nci0+cG1zZ1toaW9fbWdyLT51bF90cmFjZV9idWZmZXJfZW5kIC0KKwkJCQkJICAgICAgaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlcl0sCisJCQkgICAgICAgKGNoYXIgKiloaW9fbWdyLT51bF90cmFjZV9idWZmZXJfYmVnaW4sCisJCQkgICAgICAgdWxfbmV3X21lc3NhZ2VfbGVuZ3RoKTsKKwkJCWhpb19tZ3ItPnBtc2dbaGlvX21nci0+dWxfdHJhY2VfYnVmZmVyX2VuZCAtCisJCQkJICAgICAgaGlvX21nci0+dWxfZ3BwX3JlYWRfcG9pbnRlciArCisJCQkJICAgICAgdWxfbmV3X21lc3NhZ2VfbGVuZ3RoXSA9ICdcMCc7CisJCQkvKgorCQkJICogQWR2YW5jZSB0aGUgR1BQIHRyYWNlIHBvaW50ZXIgdG8gRFNQIGN1cnJlbnQKKwkJCSAqIHBvaW50ZXIuCisJCQkgKi8KKwkJCWhpb19tZ3ItPnVsX2dwcF9yZWFkX3BvaW50ZXIgPQorCQkJICAgIGhpb19tZ3ItPnVsX3RyYWNlX2J1ZmZlcl9iZWdpbiArCisJCQkgICAgdWxfbmV3X21lc3NhZ2VfbGVuZ3RoOworCQkJLyogUHJpbnQgdGhlIHRyYWNlIG1lc3NhZ2VzICovCisJCQlwcl9pbmZvKCJEU1BUcmFjZTogJXNcbiIsIGhpb19tZ3ItPnBtc2cpOworCQl9CisJfQorfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCisvKgorICogID09PT09PT09IHByaW50X2RzcF90cmFjZV9idWZmZXIgPT09PT09PT0KKyAqICAgICAgUHJpbnRzIHRoZSB0cmFjZSBidWZmZXIgcmV0dXJuZWQgZnJvbSB0aGUgRFNQIChpZiBEQkdfVHJhY2UgaXMgZW5hYmxlZCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgIGhkZWhfbWdyOiAgICAgICAgICBIYW5kbGUgdG8gREVIIG1hbmFnZXIgb2JqZWN0CisgKiAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgZXh0cmEgY2FycmlhZ2UgcmV0dXJucyB0byBnZW5lcmF0ZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgaGRlaF9tZ3IgbXVzZSBiZSB2YWxpZC4gQ2hlY2tlZCBpbiBicmlkZ2VfZGVoX25vdGlmeS4KKyAqLworaW50IHByaW50X2RzcF90cmFjZV9idWZmZXIoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsKKwl1MzIgdWxfdHJhY2VfZW5kOworCXUzMiB1bF90cmFjZV9iZWdpbjsKKwl1MzIgdHJhY2VfY3VyX3BvczsKKwl1MzIgdWxfbnVtX2J5dGVzID0gMDsKKwl1MzIgdWxfbnVtX3dvcmRzID0gMDsKKwl1MzIgdWxfd29yZF9zaXplID0gMjsKKwljaGFyICpwc3pfYnVmOworCWNoYXIgKnN0cl9iZWc7CisJY2hhciAqdHJhY2VfZW5kOworCWNoYXIgKmJ1Zl9lbmQ7CisJY2hhciAqbmV3X2xpbmU7CisKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQgPSBoYnJpZGdlX2NvbnRleHQ7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKikKKwkgICAgcGJyaWRnZV9jb250ZXh0LT5oZGV2X29iajsKKworCXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihkZXZfb2JqLCAmY29kX21ncik7CisKKwlpZiAoY29kX21ncikgeworCQkvKiBMb29rIGZvciBTWVNfUFVUQ0JFRy9TWVNfUFVUQ0VORCAqLworCQlzdGF0dXMgPQorCQkgICAgY29kX2dldF9zeW1fdmFsdWUoY29kX21nciwgQ09EX1RSQUNFQkVHLCAmdWxfdHJhY2VfYmVnaW4pOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPQorCQkgICAgY29kX2dldF9zeW1fdmFsdWUoY29kX21nciwgQ09EX1RSQUNFRU5ELCAmdWxfdHJhY2VfZW5kKTsKKworCWlmICghc3RhdHVzKQorCQkvKiB0cmFjZV9jdXJfcG9zIHdpbGwgaG9sZCB0aGUgYWRkcmVzcyBvZiBhIERTUCBwb2ludGVyICovCisJCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZF9tZ3IsIENPRF9UUkFDRUNVUlBPUywKKwkJCQkJCQkmdHJhY2VfY3VyX3Bvcyk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJdWxfbnVtX2J5dGVzID0gKHVsX3RyYWNlX2VuZCAtIHVsX3RyYWNlX2JlZ2luKTsKKworCXVsX251bV93b3JkcyA9IHVsX251bV9ieXRlcyAqIHVsX3dvcmRfc2l6ZTsKKwlzdGF0dXMgPSBkZXZfZ2V0X2ludGZfZnhucyhkZXZfb2JqLCAmaW50Zl9meG5zKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlwc3pfYnVmID0ga3phbGxvYyh1bF9udW1fYnl0ZXMgKyAyLCBHRlBfQVRPTUlDKTsKKwlpZiAocHN6X2J1ZiAhPSBOVUxMKSB7CisJCS8qIFJlYWQgdHJhY2UgYnVmZmVyIGRhdGEgKi8KKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9icmRfcmVhZCkocGJyaWRnZV9jb250ZXh0LAorCQkJKHU4ICopcHN6X2J1ZiwgKHUzMil1bF90cmFjZV9iZWdpbiwKKwkJCXVsX251bV9ieXRlcywgMCk7CisKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19lbmQ7CisKKwkJLyogUGFjayBhbmQgZG8gbmV3bGluZSBjb252ZXJzaW9uICovCisJCXByX2RlYnVnKCJQcmludERzcFRyYWNlQnVmZmVyOiAiCisJCQkiYmVmb3JlIHBhY2sgYW5kIHVucGFjay5cbiIpOworCQlwcl9kZWJ1ZygiJXM6IERTUCBUcmFjZSBCdWZmZXIgQmVnaW46XG4iCisJCQkiPT09PT09PT09PT09PT09PT09PT09PT1cbiVzXG4iLAorCQkJX19mdW5jX18sIHBzel9idWYpOworCisJCS8qIFJlYWQgdGhlIHZhbHVlIGF0IHRoZSBEU1AgYWRkcmVzcyBpbiB0cmFjZV9jdXJfcG9zLiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9yZWFkKShwYnJpZGdlX2NvbnRleHQsCisJCQkJKHU4ICopJnRyYWNlX2N1cl9wb3MsICh1MzIpdHJhY2VfY3VyX3BvcywKKwkJCQk0LCAwKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19lbmQ7CisJCS8qIFBhY2sgYW5kIGRvIG5ld2xpbmUgY29udmVyc2lvbiAqLworCQlwcl9pbmZvKCJEU1AgVHJhY2UgQnVmZmVyIEJlZ2luOlxuIgorCQkJIj09PT09PT09PT09PT09PT09PT09PT09XG4lc1xuIiwKKwkJCXBzel9idWYpOworCisKKwkJLyogY29udmVydCB0byBvZmZzZXQgKi8KKwkJdHJhY2VfY3VyX3BvcyA9IHRyYWNlX2N1cl9wb3MgLSB1bF90cmFjZV9iZWdpbjsKKworCQlpZiAodWxfbnVtX2J5dGVzKSB7CisJCQkvKgorCQkJICogVGhlIGJ1ZmZlciBpcyBub3QgZnVsbCwgZmluZCB0aGUgZW5kIG9mIHRoZQorCQkJICogZGF0YSAtLSBidWZfZW5kIHdpbGwgYmUgPj0gcHN6QnVmIGFmdGVyCisJCQkgKiB3aGlsZS4KKwkJCSAqLworCQkJYnVmX2VuZCA9ICZwc3pfYnVmW3VsX251bV9ieXRlcysxXTsKKwkJCS8qIERTUCBwcmludCBwb3NpdGlvbiAqLworCQkJdHJhY2VfZW5kID0gJnBzel9idWZbdHJhY2VfY3VyX3Bvc107CisKKwkJCS8qCisJCQkgKiBTZWFyY2ggYnVmZmVyIGZvciBhIG5ld19saW5lIGFuZCByZXBsYWNlIGl0CisJCQkgKiB3aXRoICdcMCcsIHRoZW4gcHJpbnQgYXMgc3RyaW5nLgorCQkJICogQ29udGludWUgdW50aWwgZW5kIG9mIGJ1ZmZlciBpcyByZWFjaGVkLgorCQkJICovCisJCQlzdHJfYmVnID0gdHJhY2VfZW5kOworCQkJdWxfbnVtX2J5dGVzID0gYnVmX2VuZCAtIHN0cl9iZWc7CisKKwkJCXdoaWxlIChzdHJfYmVnIDwgYnVmX2VuZCkgeworCQkJCW5ld19saW5lID0gc3RybmNocihzdHJfYmVnLCB1bF9udW1fYnl0ZXMsCisJCQkJCQkJCSdcbicpOworCQkJCWlmIChuZXdfbGluZSAmJiBuZXdfbGluZSA8IGJ1Zl9lbmQpIHsKKwkJCQkJKm5ld19saW5lID0gMDsKKwkJCQkJcHJfZGVidWcoIiVzXG4iLCBzdHJfYmVnKTsKKwkJCQkJc3RyX2JlZyA9ICsrbmV3X2xpbmU7CisJCQkJCXVsX251bV9ieXRlcyA9IGJ1Zl9lbmQgLSBzdHJfYmVnOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIEFzc3VtZSBidWZmZXIgZW1wdHkgaWYgaXQgY29udGFpbnMKKwkJCQkJICogYSB6ZXJvCisJCQkJCSAqLworCQkJCQlpZiAoKnN0cl9iZWcgIT0gJ1wwJykgeworCQkJCQkJc3RyX2JlZ1t1bF9udW1fYnl0ZXNdID0gMDsKKwkJCQkJCXByX2RlYnVnKCIlc1xuIiwgc3RyX2JlZyk7CisJCQkJCX0KKwkJCQkJc3RyX2JlZyA9IGJ1Zl9lbmQ7CisJCQkJCXVsX251bV9ieXRlcyA9IDA7CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIFNlYXJjaCBidWZmZXIgZm9yIGEgbk5ld0xpbmUgYW5kIHJlcGxhY2UgaXQKKwkJCSAqIHdpdGggJ1wwJywgdGhlbiBwcmludCBhcyBzdHJpbmcuCisJCQkgKiBDb250aW51ZSB1bnRpbCBidWZmZXIgaXMgZXhoYXVzdGVkLgorCQkJICovCisJCQlzdHJfYmVnID0gcHN6X2J1ZjsKKwkJCXVsX251bV9ieXRlcyA9IHRyYWNlX2VuZCAtIHN0cl9iZWc7CisKKwkJCXdoaWxlIChzdHJfYmVnIDwgdHJhY2VfZW5kKSB7CisJCQkJbmV3X2xpbmUgPSBzdHJuY2hyKHN0cl9iZWcsIHVsX251bV9ieXRlcywgJ1xuJyk7CisJCQkJaWYgKG5ld19saW5lICE9IE5VTEwgJiYgbmV3X2xpbmUgPCB0cmFjZV9lbmQpIHsKKwkJCQkJKm5ld19saW5lID0gMDsKKwkJCQkJcHJfZGVidWcoIiVzXG4iLCBzdHJfYmVnKTsKKwkJCQkJc3RyX2JlZyA9ICsrbmV3X2xpbmU7CisJCQkJCXVsX251bV9ieXRlcyA9IHRyYWNlX2VuZCAtIHN0cl9iZWc7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogQXNzdW1lIGJ1ZmZlciBlbXB0eSBpZiBpdCBjb250YWlucworCQkJCQkgKiBhIHplcm8KKwkJCQkJICovCisJCQkJCWlmICgqc3RyX2JlZyAhPSAnXDAnKSB7CisJCQkJCQlzdHJfYmVnW3VsX251bV9ieXRlc10gPSAwOworCQkJCQkJcHJfZGVidWcoIiVzXG4iLCBzdHJfYmVnKTsKKwkJCQkJfQorCQkJCQlzdHJfYmVnID0gdHJhY2VfZW5kOworCQkJCQl1bF9udW1fYnl0ZXMgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlwcl9pbmZvKCJcbj09PT09PT09PT09PT09PT09PT09PT09XG4iCisJCQkiRFNQIFRyYWNlIEJ1ZmZlciBFbmQ6XG4iKTsKKwkJa2ZyZWUocHN6X2J1Zik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKQorCQlkZXZfZGJnKGJyaWRnZSwgIiVzIEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogZHVtcF9kc3Bfc3RhY2soKSAtIFRoaXMgZnVuY3Rpb24gZHVtcHMgdGhlIGRhdGEgb24gdGhlIERTUCBzdGFjay4KKyAqIEBicmlkZ2VfY29udGV4dDoJQnJpZGdlIGRyaXZlcidzIGRldmljZSBjb250ZXh0IHBvaW50ZXIuCisgKgorICovCitpbnQgZHVtcF9kc3Bfc3RhY2soc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2NvbnRleHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RlX21ncjsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKm5vZGVfbWdyOworCXUzMiB0cmFjZV9iZWdpbjsKKwljaGFyIG5hbWVbMjU2XTsKKwlzdHJ1Y3QgeworCQl1MzIgaGVhZFsyXTsKKwkJdTMyIHNpemU7CisJfSBtbXVfZmF1bHRfZGJnX2luZm87CisJdTMyICpidWZmZXI7CisJdTMyICpidWZmZXJfYmVnOworCXUzMiAqYnVmZmVyX2VuZDsKKwl1MzIgZXhjX3R5cGU7CisJdTMyIGR5bl9leHRfYmFzZTsKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0X291dHB1dDsKKwl1MzIgdG90YWxfc2l6ZTsKKwl1MzIgcG9sbF9jbnQ7CisJY29uc3QgY2hhciAqZHNwX3JlZ3NbXSA9IHsiRUZSIiwgIklFUlIiLCAiSVRTUiIsICJOVFNSIiwKKwkJCQkiSVJQIiwgIk5SUCIsICJBTVIiLCAiU1NSIiwKKwkJCQkiSUxDIiwgIlJJTEMiLCAiSUVSIiwgIkNTUiJ9OworCWNvbnN0IGNoYXIgKmV4ZWNfY3R4dFtdID0geyJUYXNrIiwgIlNXSSIsICJIV0kiLCAiVW5rbm93biJ9OworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqZWN0ID0gYnJpZGdlX2NvbnRleHQtPmhkZXZfb2JqOworCisJc3RhdHVzID0gZGV2X2dldF9jb2RfbWdyKGRldl9vYmplY3QsICZjb2RlX21ncik7CisJaWYgKCFjb2RlX21ncikgeworCQlwcl9kZWJ1ZygiJXM6IEZhaWxlZCBvbiBkZXZfZ2V0X2NvZF9tZ3IuXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIoZGV2X29iamVjdCwgJm5vZGVfbWdyKTsKKwkJaWYgKCFub2RlX21ncikgeworCQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gZGV2X2dldF9ub2RlX21hbmFnZXIuXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQl9CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogTG9vayBmb3IgU1lTX1BVVENCRUcvU1lTX1BVVENFTkQ6ICovCisJCXN0YXR1cyA9CisJCQljb2RfZ2V0X3N5bV92YWx1ZShjb2RlX21nciwgQ09EX1RSQUNFQkVHLCAmdHJhY2VfYmVnaW4pOworCQlwcl9kZWJ1ZygiJXM6IHRyYWNlX2JlZ2luIFZhbHVlIDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgdHJhY2VfYmVnaW4pOworCQlpZiAoc3RhdHVzKQorCQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gY29kX2dldF9zeW1fdmFsdWUuXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJfQorCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2ludGZfZnhucyhkZXZfb2JqZWN0LCAmaW50Zl9meG5zKTsKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgIm1hZ2ljIG51bWJlciIgaW4gdGhlIHRyYWNlIGJ1ZmZlci4gIElmIGl0IGhhcworCSAqIHlldCB0byBhcHBlYXIgdGhlbiBwb2xsIHRoZSB0cmFjZSBidWZmZXIgdG8gd2FpdCBmb3IgaXQuICBJdHMKKwkgKiBhcHBlYXJhbmNlIHNpZ25hbHMgdGhhdCB0aGUgRFNQIGhhcyBmaW5pc2hlZCBkdW1waW5nIGl0cyBzdGF0ZS4KKwkgKi8KKwltbXVfZmF1bHRfZGJnX2luZm8uaGVhZFswXSA9IDA7CisJbW11X2ZhdWx0X2RiZ19pbmZvLmhlYWRbMV0gPSAwOworCWlmICghc3RhdHVzKSB7CisJCXBvbGxfY250ID0gMDsKKwkJd2hpbGUgKChtbXVfZmF1bHRfZGJnX2luZm8uaGVhZFswXSAhPSBNTVVfRkFVTFRfSEVBRDEgfHwKKwkJCW1tdV9mYXVsdF9kYmdfaW5mby5oZWFkWzFdICE9IE1NVV9GQVVMVF9IRUFEMikgJiYKKwkJCXBvbGxfY250IDwgUE9MTF9NQVgpIHsKKworCQkJLyogUmVhZCBEU1AgZHVtcCBzaXplIGZyb20gdGhlIERTUCB0cmFjZSBidWZmZXIuLi4gKi8KKwkJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fYnJkX3JlYWQpKGJyaWRnZV9jb250ZXh0LAorCQkJCSh1OCAqKSZtbXVfZmF1bHRfZGJnX2luZm8sICh1MzIpdHJhY2VfYmVnaW4sCisJCQkJc2l6ZW9mKG1tdV9mYXVsdF9kYmdfaW5mbyksIDApOworCisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCisJCQlwb2xsX2NudCsrOworCQl9CisKKwkJaWYgKG1tdV9mYXVsdF9kYmdfaW5mby5oZWFkWzBdICE9IE1NVV9GQVVMVF9IRUFEMSAmJgorCQkJbW11X2ZhdWx0X2RiZ19pbmZvLmhlYWRbMV0gIT0gTU1VX0ZBVUxUX0hFQUQyKSB7CisJCQlzdGF0dXMgPSAtRVRJTUU7CisJCQlwcl9lcnIoIiVzOk5vIERTUCBNTVUtRmF1bHQgaW5mb3JtYXRpb24gYXZhaWxhYmxlLlxuIiwKKwkJCQkJCQlfX2Z1bmNfXyk7CisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQl0b3RhbF9zaXplID0gbW11X2ZhdWx0X2RiZ19pbmZvLnNpemU7CisJCS8qIExpbWl0IHRoZSBzaXplIGluIGNhc2UgRFNQIHdlbnQgY3JhenkgKi8KKwkJaWYgKHRvdGFsX3NpemUgPiBNQVhfTU1VX0RCR0JVRkYpCisJCQl0b3RhbF9zaXplID0gTUFYX01NVV9EQkdCVUZGOworCisJCWJ1ZmZlciA9IGt6YWxsb2ModG90YWxfc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmICghYnVmZmVyKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJcHJfZGVidWcoIiVzOiBGYWlsZWQgdG8gIgorCQkJCSJhbGxvY2F0ZSBzdGFjayBkdW1wIGJ1ZmZlci5cbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQlidWZmZXJfYmVnID0gYnVmZmVyOworCQlidWZmZXJfZW5kID0gIGJ1ZmZlciArIHRvdGFsX3NpemUgLyA0OworCisJCS8qIFJlYWQgYnl0ZXMgZnJvbSB0aGUgRFNQIHRyYWNlIGJ1ZmZlci4uLiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9yZWFkKShicmlkZ2VfY29udGV4dCwKKwkJCQkodTggKilidWZmZXIsICh1MzIpdHJhY2VfYmVnaW4sCisJCQkJdG90YWxfc2l6ZSwgMCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCXByX2RlYnVnKCIlczogRmFpbGVkIHRvIFJlYWQgVHJhY2UgQnVmZmVyLlxuIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCisJCXByX2VycigiXG5BcHJveGltYXRlIENyYXNoIFBvc2l0aW9uOlxuIgorCQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCQlleGNfdHlwZSA9IGJ1ZmZlclszXTsKKwkJaWYgKCFleGNfdHlwZSkKKwkJCWkgPSBidWZmZXJbNzldOyAgICAgICAgIC8qIElSUCAqLworCQllbHNlCisJCQlpID0gYnVmZmVyWzgwXTsgICAgICAgICAvKiBOUlAgKi8KKworCQlzdGF0dXMgPQorCQkgICAgY29kX2dldF9zeW1fdmFsdWUoY29kZV9tZ3IsIERZTkVYVEJBU0UsICZkeW5fZXh0X2Jhc2UpOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCisJCWlmICgoaSA+IGR5bl9leHRfYmFzZSkgJiYgKG5vZGVfZmluZF9hZGRyKG5vZGVfbWdyLCBpLAorCQkJMHgxMDAwLCAmb2Zmc2V0X291dHB1dCwgbmFtZSkgPT0gMCkpCisJCQlwcl9lcnIoIjB4JS04eCBbXCIlc1wiICsgMHgleF1cbiIsIGksIG5hbWUsCisJCQkJCQkJaSAtIG9mZnNldF9vdXRwdXQpOworCQllbHNlCisJCQlwcl9lcnIoIjB4JS04eCBbVW5hYmxlIHRvIG1hdGNoIHRvIGEgc3ltYm9sLl1cbiIsIGkpOworCisJCWJ1ZmZlciArPSA0OworCisJCXByX2VycigiXG5FeGVjdXRpb24gSW5mbzpcbiIKKwkJCSItLS0tLS0tLS0tLS0tLS1cbiIpOworCisJCWlmICgqYnVmZmVyIDwgQVJSQVlfU0laRShleGVjX2N0eHQpKSB7CisJCQlwcl9lcnIoIkV4ZWN1dGlvbiBjb250ZXh0IFx0JXNcbiIsCisJCQkJZXhlY19jdHh0WypidWZmZXIrK10pOworCQl9IGVsc2UgeworCQkJcHJfZXJyKCJFeGVjdXRpb24gY29udGV4dCBjb3JydXB0XG4iKTsKKwkJCWtmcmVlKGJ1ZmZlcl9iZWcpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJcHJfZXJyKCJUYXNrIEhhbmRsZVx0XHQweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIlN0YWNrIFBvaW50ZXJcdFx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKKwkJcHJfZXJyKCJTdGFjayBUb3BcdFx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKKwkJcHJfZXJyKCJTdGFjayBCb3R0b21cdFx0MHgleFxuIiwgKmJ1ZmZlcisrKTsKKwkJcHJfZXJyKCJTdGFjayBTaXplXHRcdDB4JXhcbiIsICpidWZmZXIrKyk7CisJCXByX2VycigiU3RhY2sgU2l6ZSBJbiBVc2VcdDB4JXhcbiIsICpidWZmZXIrKyk7CisKKwkJcHJfZXJyKCJcbkNQVSBSZWdpc3RlcnNcbiIKKwkJCSItLS0tLS0tLS0tLS0tLS1cbiIpOworCisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQlpZiAoaSA9PSA0IHx8IGkgPT0gNiB8fCBpID09IDgpCisJCQkJcHJfZXJyKCJBJWQgMHglLTh4IFtGdW5jdGlvbiBBcmd1bWVudCAlZF1cbiIsCisJCQkJCQkJaSwgKmJ1ZmZlcisrLCBpLTMpOworCQkJZWxzZSBpZiAoaSA9PSAxNSkKKwkJCQlwcl9lcnIoIkExNSAweCUtOHggW0ZyYW1lIFBvaW50ZXJdXG4iLAorCQkJCQkJCQkqYnVmZmVyKyspOworCQkJZWxzZQorCQkJCXByX2VycigiQSVkIDB4JXhcbiIsIGksICpidWZmZXIrKyk7CisJCX0KKworCQlwcl9lcnIoIlxuQjAgMHgleFxuIiwgKmJ1ZmZlcisrKTsKKwkJcHJfZXJyKCJCMSAweCV4XG4iLCAqYnVmZmVyKyspOworCQlwcl9lcnIoIkIyIDB4JXhcbiIsICpidWZmZXIrKyk7CisKKwkJaWYgKCgqYnVmZmVyID4gZHluX2V4dF9iYXNlKSAmJiAobm9kZV9maW5kX2FkZHIobm9kZV9tZ3IsCisJCQkqYnVmZmVyLCAweDEwMDAsICZvZmZzZXRfb3V0cHV0LCBuYW1lKSA9PSAwKSkKKworCQkJcHJfZXJyKCJCMyAweCUtOHggW0Z1bmN0aW9uIFJldHVybiBQb2ludGVyOiIKKwkJCQkiIFwiJXNcIiArIDB4JXhdXG4iLCAqYnVmZmVyLCBuYW1lLAorCQkJCSpidWZmZXIgLSBvZmZzZXRfb3V0cHV0KTsKKwkJZWxzZQorCQkJcHJfZXJyKCJCMyAweCUtOHggW0Z1bmN0aW9uIFJldHVybiBQb2ludGVyOiIKKwkJCQkiVW5hYmxlIHRvIG1hdGNoIHRvIGEgc3ltYm9sLl1cbiIsICpidWZmZXIpOworCisJCWJ1ZmZlcisrOworCisJCWZvciAoaSA9IDQ7IGkgPCAzMjsgaSsrKSB7CisJCQlpZiAoaSA9PSA0IHx8IGkgPT0gNiB8fCBpID09IDgpCisJCQkJcHJfZXJyKCJCJWQgMHglLTh4IFtGdW5jdGlvbiBBcmd1bWVudCAlZF1cbiIsCisJCQkJCQkJaSwgKmJ1ZmZlcisrLCBpLTIpOworCQkJZWxzZSBpZiAoaSA9PSAxNCkKKwkJCQlwcl9lcnIoIkIxNCAweCUtOHggW0RhdGEgUGFnZSBQb2ludGVyXVxuIiwKKwkJCQkJCQkJKmJ1ZmZlcisrKTsKKwkJCWVsc2UKKwkJCQlwcl9lcnIoIkIlZCAweCV4XG4iLCBpLCAqYnVmZmVyKyspOworCQl9CisKKwkJcHJfZXJyKCJcbiIpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRzcF9yZWdzKTsgaSsrKQorCQkJcHJfZXJyKCIlcyAweCV4XG4iLCBkc3BfcmVnc1tpXSwgKmJ1ZmZlcisrKTsKKworCQlwcl9lcnIoIlxuU3RhY2s6XG4iCisJCQkiLS0tLS0tXG4iKTsKKworCQlmb3IgKGkgPSAwOyBidWZmZXIgPCBidWZmZXJfZW5kOyBpKyssIGJ1ZmZlcisrKSB7CisJCQlpZiAoKCpidWZmZXIgPiBkeW5fZXh0X2Jhc2UpICYmICgKKwkJCQlub2RlX2ZpbmRfYWRkcihub2RlX21nciwgKmJ1ZmZlciAsIDB4NjAwLAorCQkJCSZvZmZzZXRfb3V0cHV0LCBuYW1lKSA9PSAwKSkKKwkJCQlwcl9lcnIoIlslZF0gMHglLTh4IFtcIiVzXCIgKyAweCV4XVxuIiwKKwkJCQkJaSwgKmJ1ZmZlciwgbmFtZSwKKwkJCQkJKmJ1ZmZlciAtIG9mZnNldF9vdXRwdXQpOworCQkJZWxzZQorCQkJCXByX2VycigiWyVkXSAweCV4XG4iLCBpLCAqYnVmZmVyKTsKKwkJfQorCQlrZnJlZShidWZmZXJfYmVnKTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGR1bXBfZGxfbW9kdWxlcygpIC0gVGhpcyBmdW5jdGlvbnMgZHVtcHMgdGhlIF9ETE1vZHVsZXMgbG9hZGVkIGluIERTUCBzaWRlCisgKiBAYnJpZGdlX2NvbnRleHQ6CQlCcmlkZ2UgZHJpdmVyJ3MgZGV2aWNlIGNvbnRleHQgcG9pbnRlci4KKyAqCisgKi8KK3ZvaWQgZHVtcF9kbF9tb2R1bGVzKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmJyaWRnZV9jb250ZXh0KQoreworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kZV9tZ3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2N0eHQgPSBicmlkZ2VfY29udGV4dDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iamVjdCA9IGJyaWRnZV9jdHh0LT5oZGV2X29iajsKKwlzdHJ1Y3QgbW9kdWxlc19oZWFkZXIgbW9kdWxlc19oZHI7CisJc3RydWN0IGRsbF9tb2R1bGUgKm1vZHVsZV9zdHJ1Y3QgPSBOVUxMOworCXUzMiBtb2R1bGVfZHNwX2FkZHI7CisJdTMyIG1vZHVsZV9zaXplOworCXUzMiBtb2R1bGVfc3RydWN0X3NpemUgPSAwOworCXUzMiBzZWN0X25keDsKKwljaGFyICpzZWN0X3N0ciA7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0dXMgPSBkZXZfZ2V0X2ludGZfZnhucyhkZXZfb2JqZWN0LCAmaW50Zl9meG5zKTsKKwlpZiAoc3RhdHVzKSB7CisJCXByX2RlYnVnKCIlczogRmFpbGVkIG9uIGRldl9nZXRfaW50Zl9meG5zLlxuIiwgX19mdW5jX18pOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRldl9nZXRfY29kX21ncihkZXZfb2JqZWN0LCAmY29kZV9tZ3IpOworCWlmICghY29kZV9tZ3IpIHsKKwkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gZGV2X2dldF9jb2RfbWdyLlxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIExvb2t1cCAgdGhlIGFkZHJlc3Mgb2YgdGhlIG1vZHVsZXNfaGVhZGVyIHN0cnVjdHVyZSAqLworCXN0YXR1cyA9IGNvZF9nZXRfc3ltX3ZhbHVlKGNvZGVfbWdyLCAiX0RMTW9kdWxlcyIsICZtb2R1bGVfZHNwX2FkZHIpOworCWlmIChzdGF0dXMpIHsKKwkJcHJfZGVidWcoIiVzOiBGYWlsZWQgb24gY29kX2dldF9zeW1fdmFsdWUgZm9yIF9ETE1vZHVsZXMuXG4iLAorCQkJX19mdW5jX18pOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXByX2RlYnVnKCIlczogX0RMTW9kdWxlcyBhdCAweCV4XG4iLCBfX2Z1bmNfXywgbW9kdWxlX2RzcF9hZGRyKTsKKworCS8qIENvcHkgdGhlIG1vZHVsZXNfaGVhZGVyIHN0cnVjdHVyZSBmcm9tIERTUCBtZW1vcnkuICovCisJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9icmRfcmVhZCkoYnJpZGdlX2NvbnRleHQsICh1OCAqKSAmbW9kdWxlc19oZHIsCisJCQkJKHUzMikgbW9kdWxlX2RzcF9hZGRyLCBzaXplb2YobW9kdWxlc19oZHIpLCAwKTsKKworCWlmIChzdGF0dXMpIHsKKwkJcHJfZGVidWcoIiVzOiBGYWlsZWQgZmFpbGVkIHRvIHJlYWQgbW9kdWxlcyBoZWFkZXIuXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJbW9kdWxlX2RzcF9hZGRyID0gbW9kdWxlc19oZHIuZmlyc3RfbW9kdWxlOworCW1vZHVsZV9zaXplID0gbW9kdWxlc19oZHIuZmlyc3RfbW9kdWxlX3NpemU7CisKKwlwcl9kZWJ1ZygiJXM6IGRsbF9tb2R1bGVfaGVhZGVyIDB4JXggJWRcbiIsIF9fZnVuY19fLCBtb2R1bGVfZHNwX2FkZHIsCisJCQkJCQkJCW1vZHVsZV9zaXplKTsKKworCXByX2VycigiXG5EeW5hbWljYWxseSBMb2FkZWQgTW9kdWxlczpcbiIKKwkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisKKwkvKiBGb3IgZWFjaCBkbGxfbW9kdWxlIHN0cnVjdHVyZSBpbiB0aGUgbGlzdC4uLiAqLworCXdoaWxlIChtb2R1bGVfc2l6ZSkgeworCQkvKgorCQkgKiBBbGxvY2F0ZS9yZS1hbGxvY2F0ZSBtZW1vcnkgdG8gaG9sZCB0aGUgZGxsX21vZHVsZQorCQkgKiBzdHJ1Y3R1cmUuIFRoZSBtZW1vcnkgaXMgcmUtYWxsb2NhdGVkIG9ubHkgaWYgdGhlIGV4aXN0aW5nCisJCSAqIGFsbG9jYXRpb24gaXMgdG9vIHNtYWxsLgorCQkgKi8KKwkJaWYgKG1vZHVsZV9zaXplID4gbW9kdWxlX3N0cnVjdF9zaXplKSB7CisJCQlrZnJlZShtb2R1bGVfc3RydWN0KTsKKwkJCW1vZHVsZV9zdHJ1Y3QgPSBremFsbG9jKG1vZHVsZV9zaXplKzEyOCwgR0ZQX0FUT01JQyk7CisJCQltb2R1bGVfc3RydWN0X3NpemUgPSBtb2R1bGVfc2l6ZSsxMjg7CisJCQlwcl9kZWJ1ZygiJXM6IGFsbG9jYXRlZCBtb2R1bGUgc3RydWN0ICVwICVkXG4iLAorCQkJCV9fZnVuY19fLCBtb2R1bGVfc3RydWN0LCBtb2R1bGVfc3RydWN0X3NpemUpOworCQkJaWYgKCFtb2R1bGVfc3RydWN0KQorCQkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJLyogQ29weSB0aGUgZGxsX21vZHVsZSBzdHJ1Y3R1cmUgZnJvbSBEU1AgbWVtb3J5ICovCisJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fYnJkX3JlYWQpKGJyaWRnZV9jb250ZXh0LAorCQkJKHU4ICopbW9kdWxlX3N0cnVjdCwgbW9kdWxlX2RzcF9hZGRyLCBtb2R1bGVfc2l6ZSwgMCk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJcHJfZGVidWcoCisJCQkiJXM6IEZhaWxlZCB0byByZWFkIGRsbF9tb2R1bGUgc3R1Y3QgZm9yIDB4JXguXG4iLAorCQkJX19mdW5jX18sIG1vZHVsZV9kc3BfYWRkcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFVwZGF0ZSBpbmZvIHJlZ2FyZGluZyB0aGUgX25leHRfIG1vZHVsZSBpbiB0aGUgbGlzdC4gKi8KKwkJbW9kdWxlX2RzcF9hZGRyID0gbW9kdWxlX3N0cnVjdC0+bmV4dF9tb2R1bGU7CisJCW1vZHVsZV9zaXplID0gbW9kdWxlX3N0cnVjdC0+bmV4dF9tb2R1bGVfc2l6ZTsKKworCQlwcl9kZWJ1ZygiJXM6IG5leHQgbW9kdWxlIDB4JXggJWQsIHRoaXMgbW9kdWxlIG51bSBzZWN0cyAlZFxuIiwKKwkJCV9fZnVuY19fLCBtb2R1bGVfZHNwX2FkZHIsIG1vZHVsZV9zaXplLAorCQkJbW9kdWxlX3N0cnVjdC0+bnVtX3NlY3RzKTsKKworCQkvKgorCQkgKiBUaGUgc2VjdGlvbiBuYW1lIHN0cmluZ3Mgc3RhcnQgaW1tZWRpYWx0eSBmb2xsb3dpbmcKKwkJICogdGhlIGFycmF5IG9mIGRsbF9zZWN0IHN0cnVjdHVyZXMuCisJCSAqLworCQlzZWN0X3N0ciA9IChjaGFyICopICZtb2R1bGVfc3RydWN0LT4KKwkJCQkJc2VjdHNbbW9kdWxlX3N0cnVjdC0+bnVtX3NlY3RzXTsKKwkJcHJfZXJyKCIlc1xuIiwgc2VjdF9zdHIpOworCisJCS8qCisJCSAqIEFkdmFuY2UgdG8gdGhlIGZpcnN0IHNlY3Rpb24gbmFtZSBzdHJpbmcuCisJCSAqIEVhY2ggc3RyaW5nIGZvbGxvd3MgdGhlIG9uZSBiZWZvcmUuCisJCSAqLworCQlzZWN0X3N0ciArPSBzdHJsZW4oc2VjdF9zdHIpICsgMTsKKworCQkvKiBBY2Nlc3MgZWFjaCBkbGxfc2VjdCBzdHJ1Y3R1cmUgYW5kIGl0cyBuYW1lIHN0cmluZy4gKi8KKwkJZm9yIChzZWN0X25keCA9IDA7CisJCQlzZWN0X25keCA8IG1vZHVsZV9zdHJ1Y3QtPm51bV9zZWN0czsgc2VjdF9uZHgrKykgeworCQkJcHJfZXJyKCIgICAgU2VjdGlvbjogMHgleCAiLAorCQkJCW1vZHVsZV9zdHJ1Y3QtPnNlY3RzW3NlY3RfbmR4XS5zZWN0X2xvYWRfYWRyKTsKKworCQkJaWYgKCgodTMyKSBzZWN0X3N0ciAtICh1MzIpIG1vZHVsZV9zdHJ1Y3QpIDwKKwkJCQltb2R1bGVfc3RydWN0X3NpemUpIHsKKwkJCQlwcl9lcnIoIiVzXG4iLCBzZWN0X3N0cik7CisJCQkJLyogRWFjaCBzdHJpbmcgZm9sbG93cyB0aGUgb25lIGJlZm9yZS4gKi8KKwkJCQlzZWN0X3N0ciArPSBzdHJsZW4oc2VjdF9zdHIpKzE7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiPHN0cmluZyBlcnJvcj5cbiIpOworCQkJCXByX2RlYnVnKCIlczogc2VjdGlvbiBuYW1lIHN0aW5nIGFkZHJlc3MgIgorCQkJCQkiaXMgaW52YWxpZCAlcFxuIiwgX19mdW5jX18sIHNlY3Rfc3RyKTsKKwkJCX0KKwkJfQorCX0KK2Z1bmNfZW5kOgorCWtmcmVlKG1vZHVsZV9zdHJ1Y3QpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9tc2dfc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL21zZ19zbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzEyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9tc2dfc20uYwpAQCAtMCwwICsxLDY3MyBAQAorLyoKKyAqIG1zZ19zbS5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEltcGxlbWVudHMgdXBwZXIgZWRnZSBmdW5jdGlvbnMgZm9yIEJyaWRnZSBtZXNzYWdlIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxfbXNnX3NtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcG1zZy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIGludCBhZGRfbmV3X21zZyhzdHJ1Y3QgbHN0X2xpc3QgKm1zZ19saXN0KTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfbWdyKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CitzdGF0aWMgdm9pZCBkZWxldGVfbXNnX3F1ZXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosIHUzMiBudW1fdG9fZHNwKTsKK3N0YXRpYyB2b2lkIGZyZWVfbXNnX2xpc3Qoc3RydWN0IGxzdF9saXN0ICptc2dfbGlzdCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19jcmVhdGUgPT09PT09PT0KKyAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgbWVzc2FnZSBxdWV1ZXMuIE9ubHkgb25lIG9mIHRoZXNlIG9iamVjdHMKKyAqICAgICAgY2FuIGV4aXN0IHBlciBkZXZpY2Ugb2JqZWN0LgorICovCitpbnQgYnJpZGdlX21zZ19jcmVhdGUoc3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAorCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKQoreworCXN0cnVjdCBtc2dfbWdyICptc2dfbWdyX29iajsKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFtc2dfbWFuIHx8ICFtc2dfY2FsbGJhY2sgfHwgIWhkZXZfb2JqKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWRldl9nZXRfaW9fbWdyKGhkZXZfb2JqLCAmaGlvX21ncik7CisJaWYgKCFoaW9fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCSptc2dfbWFuID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBtc2dfY3RybCBtYW5hZ2VyIG9iamVjdCAqLworCW1zZ19tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zZ19tZ3IpLCBHRlBfS0VSTkVMKTsKKworCWlmIChtc2dfbWdyX29iaikgeworCQltc2dfbWdyX29iai0+b25fZXhpdCA9IG1zZ19jYWxsYmFjazsKKwkJbXNnX21ncl9vYmotPmhpb19tZ3IgPSBoaW9fbWdyOworCQkvKiBMaXN0IG9mIE1TR19RVUVVRXMgKi8KKwkJbXNnX21ncl9vYmotPnF1ZXVlX2xpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQkvKiAgUXVldWVzIG9mIG1lc3NhZ2UgZnJhbWVzIGZvciBtZXNzYWdlcyB0byB0aGUgRFNQLiBNZXNzYWdlCisJCSAqIGZyYW1lcyB3aWxsIG9ubHkgYmUgYWRkZWQgdG8gdGhlIGZyZWUgcXVldWUgd2hlbiBhCisJCSAqIG1zZ19xdWV1ZSBvYmplY3QgaXMgY3JlYXRlZC4gKi8KKwkJbXNnX21ncl9vYmotPm1zZ19mcmVlX2xpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQltc2dfbWdyX29iai0+bXNnX3VzZWRfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChtc2dfbWdyX29iai0+cXVldWVfbGlzdCA9PSBOVUxMIHx8CisJCSAgICBtc2dfbWdyX29iai0+bXNnX2ZyZWVfbGlzdCA9PSBOVUxMIHx8CisJCSAgICBtc2dfbWdyX29iai0+bXNnX3VzZWRfbGlzdCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJSU5JVF9MSVNUX0hFQUQoJm1zZ19tZ3Jfb2JqLT5xdWV1ZV9saXN0LT5oZWFkKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtc2dfbWdyX29iai0+bXNnX2ZyZWVfbGlzdC0+aGVhZCk7CisJCQlJTklUX0xJU1RfSEVBRCgmbXNnX21ncl9vYmotPm1zZ191c2VkX2xpc3QtPmhlYWQpOworCQkJc3Bpbl9sb2NrX2luaXQoJm1zZ19tZ3Jfb2JqLT5tc2dfbWdyX2xvY2spOworCQl9CisKKwkJLyogIENyZWF0ZSBhbiBldmVudCB0byBiZSB1c2VkIGJ5IGJyaWRnZV9tc2dfcHV0KCkgaW4gd2FpdGluZworCQkgKiAgZm9yIGFuIGF2YWlsYWJsZSBmcmVlIGZyYW1lIGZyb20gdGhlIG1lc3NhZ2UgbWFuYWdlci4gKi8KKwkJbXNnX21ncl9vYmotPnN5bmNfZXZlbnQgPQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksIEdGUF9LRVJORUwpOworCQlpZiAoIW1zZ19tZ3Jfb2JqLT5zeW5jX2V2ZW50KQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJZWxzZQorCQkJc3luY19pbml0X2V2ZW50KG1zZ19tZ3Jfb2JqLT5zeW5jX2V2ZW50KTsKKworCQlpZiAoIXN0YXR1cykKKwkJCSptc2dfbWFuID0gbXNnX21ncl9vYmo7CisJCWVsc2UKKwkJCWRlbGV0ZV9tc2dfbWdyKG1zZ19tZ3Jfb2JqKTsKKworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSA9PT09PT09PQorICogICAgICBDcmVhdGUgYSBtc2dfcXVldWUgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIG1lc3NhZ2VzIHRvL2Zyb20gYSBub2RlCisgKiAgICAgIG9uIHRoZSBEU1AuCisgKi8KK2ludCBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IsCisJCQkJc3RydWN0IG1zZ19xdWV1ZSAqKm1zZ3EsCisJCQkJdTMyIG1zZ3FfaWQsIHUzMiBtYXhfbXNncywgdm9pZCAqYXJnKQoreworCXUzMiBpOworCXUzMiBudW1fYWxsb2NhdGVkID0gMDsKKwlzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghaG1zZ19tZ3IgfHwgbXNncSA9PSBOVUxMIHx8ICFobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCSptc2dxID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBtc2dfcXVldWUgb2JqZWN0ICovCisJbXNnX3EgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXNnX3F1ZXVlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2dfcSkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlsc3RfaW5pdF9lbGVtKChzdHJ1Y3QgbGlzdF9oZWFkICopbXNnX3EpOworCW1zZ19xLT5tYXhfbXNncyA9IG1heF9tc2dzOworCW1zZ19xLT5obXNnX21nciA9IGhtc2dfbWdyOworCW1zZ19xLT5hcmcgPSBhcmc7CS8qIE5vZGUgaGFuZGxlICovCisJbXNnX3EtPm1zZ3FfaWQgPSBtc2dxX2lkOwkvKiBOb2RlIGVudiAobm90IHZhbGlkIHlldCkgKi8KKwkvKiBRdWV1ZXMgb2YgTWVzc2FnZSBmcmFtZXMgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIERTUCAqLworCW1zZ19xLT5tc2dfZnJlZV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwgR0ZQX0tFUk5FTCk7CisJbXNnX3EtPm1zZ191c2VkX2xpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAobXNnX3EtPm1zZ19mcmVlX2xpc3QgPT0gTlVMTCB8fCBtc2dfcS0+bXNnX3VzZWRfbGlzdCA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCWVsc2UgeworCQlJTklUX0xJU1RfSEVBRCgmbXNnX3EtPm1zZ19mcmVlX2xpc3QtPmhlYWQpOworCQlJTklUX0xJU1RfSEVBRCgmbXNnX3EtPm1zZ191c2VkX2xpc3QtPmhlYWQpOworCX0KKworCS8qICBDcmVhdGUgZXZlbnQgdGhhdCB3aWxsIGJlIHNpZ25hbGxlZCB3aGVuIGEgbWVzc2FnZSBmcm9tCisJICogIHRoZSBEU1AgaXMgYXZhaWxhYmxlLiAqLworCWlmICghc3RhdHVzKSB7CisJCW1zZ19xLT5zeW5jX2V2ZW50ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5bmNfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKG1zZ19xLT5zeW5jX2V2ZW50KQorCQkJc3luY19pbml0X2V2ZW50KG1zZ19xLT5zeW5jX2V2ZW50KTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwkvKiBDcmVhdGUgYSBub3RpZmljYXRpb24gbGlzdCBmb3IgbWVzc2FnZSByZWFkeSBub3RpZmljYXRpb24uICovCisJaWYgKCFzdGF0dXMpIHsKKwkJbXNnX3EtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKG1zZ19xLT5udGZ5X29iaikKKwkJCW50ZnlfaW5pdChtc2dfcS0+bnRmeV9vYmopOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCS8qICBDcmVhdGUgZXZlbnRzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN5bmNocm9uaXplIGNsZWFudXAKKwkgKiAgd2hlbiB0aGUgb2JqZWN0IGlzIGRlbGV0ZWQuIHN5bmNfZG9uZSB3aWxsIGJlIHNldCB0bworCSAqICB1bmJsb2NrIHRocmVhZHMgaW4gTVNHX1B1dCgpIG9yIE1TR19HZXQoKS4gc3luY19kb25lX2FjaworCSAqICB3aWxsIGJlIHNldCBieSB0aGUgdW5ibG9ja2VkIHRocmVhZCB0byBzaWduYWwgdGhhdCBpdAorCSAqICBpcyB1bmJsb2NrZWQgYW5kIHdpbGwgbm8gbG9uZ2VyIHJlZmVyZW5jZSB0aGUgb2JqZWN0LiAqLworCWlmICghc3RhdHVzKSB7CisJCW1zZ19xLT5zeW5jX2RvbmUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3luY19vYmplY3QpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAobXNnX3EtPnN5bmNfZG9uZSkKKwkJCXN5bmNfaW5pdF9ldmVudChtc2dfcS0+c3luY19kb25lKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQltc2dfcS0+c3luY19kb25lX2FjayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChtc2dfcS0+c3luY19kb25lX2FjaykKKwkJCXN5bmNfaW5pdF9ldmVudChtc2dfcS0+c3luY19kb25lX2Fjayk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLworCQlzcGluX2xvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCQkvKiBJbml0aWFsaXplIG1lc3NhZ2UgZnJhbWVzIGFuZCBwdXQgaW4gYXBwcm9wcmlhdGUgcXVldWVzICovCisJCWZvciAoaSA9IDA7IGkgPCBtYXhfbXNncyAmJiAhc3RhdHVzOyBpKyspIHsKKwkJCXN0YXR1cyA9IGFkZF9uZXdfbXNnKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJbnVtX2FsbG9jYXRlZCsrOworCQkJCXN0YXR1cyA9IGFkZF9uZXdfbXNnKG1zZ19xLT5tc2dfZnJlZV9saXN0KTsKKwkJCX0KKwkJfQorCQlpZiAoc3RhdHVzKSB7CisJCQkvKiAgU3RheSBpbnNpZGUgQ1MgdG8gcHJldmVudCBvdGhlcnMgZnJvbSB0YWtpbmcgYW55CisJCQkgKiAgb2YgdGhlIG5ld2x5IGFsbG9jYXRlZCBtZXNzYWdlIGZyYW1lcy4gKi8KKwkJCWRlbGV0ZV9tc2dfcXVldWUobXNnX3EsIG51bV9hbGxvY2F0ZWQpOworCQl9IGVsc2UgeworCQkJbHN0X3B1dF90YWlsKGhtc2dfbWdyLT5xdWV1ZV9saXN0LAorCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltc2dfcSk7CisJCQkqbXNncSA9IG1zZ19xOworCQkJLyogU2lnbmFsIHRoYXQgZnJlZSBmcmFtZXMgYXJlIG5vdyBhdmFpbGFibGUgKi8KKwkJCWlmICghTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkKKwkJCQlzeW5jX3NldF9ldmVudChobXNnX21nci0+c3luY19ldmVudCk7CisKKwkJfQorCQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCX0gZWxzZSB7CisJCWRlbGV0ZV9tc2dfcXVldWUobXNnX3EsIDApOworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19kZWxldGUgPT09PT09PT0KKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGUoKS4KKyAqLwordm9pZCBicmlkZ2VfbXNnX2RlbGV0ZShzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3IpCit7CisJaWYgKGhtc2dfbWdyKQorCQlkZWxldGVfbXNnX21ncihobXNnX21ncik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19kZWxldGVfcXVldWUgPT09PT09PT0KKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgcXVldWUgYWxsb2NhdGVkIGluIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICovCit2b2lkIGJyaWRnZV9tc2dfZGVsZXRlX3F1ZXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmopCit7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCXUzMiBpb19tc2dfcGVuZDsKKworCWlmICghbXNnX3F1ZXVlX29iaiB8fCAhbXNnX3F1ZXVlX29iai0+aG1zZ19tZ3IpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlobXNnX21nciA9IG1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyOworCW1zZ19xdWV1ZV9vYmotPmRvbmUgPSB0cnVlOworCS8qICBVbmJsb2NrIGFsbCB0aHJlYWRzIGJsb2NrZWQgaW4gTVNHX0dldCgpIG9yIE1TR19QdXQoKS4gKi8KKwlpb19tc2dfcGVuZCA9IG1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kOworCXdoaWxlIChpb19tc2dfcGVuZCkgeworCQkvKiBVbmJsb2NrIHRocmVhZCAqLworCQlzeW5jX3NldF9ldmVudChtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmUpOworCQkvKiBXYWl0IGZvciBhY2tub3dsZWRnZW1lbnQgKi8KKwkJc3luY193YWl0X29uX2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZV9hY2ssIFNZTkNfSU5GSU5JVEUpOworCQlpb19tc2dfcGVuZCA9IG1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kOworCX0KKwkvKiBSZW1vdmUgbWVzc2FnZSBxdWV1ZSBmcm9tIGhtc2dfbWdyLT5xdWV1ZV9saXN0ICovCisJc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwlsc3RfcmVtb3ZlX2VsZW0oaG1zZ19tZ3ItPnF1ZXVlX2xpc3QsCisJCQkoc3RydWN0IGxpc3RfaGVhZCAqKW1zZ19xdWV1ZV9vYmopOworCS8qIEZyZWUgdGhlIG1lc3NhZ2UgcXVldWUgb2JqZWN0ICovCisJZGVsZXRlX21zZ19xdWV1ZShtc2dfcXVldWVfb2JqLCBtc2dfcXVldWVfb2JqLT5tYXhfbXNncyk7CisJaWYgKCFobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkKKwkJZ290byBmdW5jX2NvbnQ7CisJaWYgKExTVF9JU19FTVBUWShobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkpCisJCXN5bmNfcmVzZXRfZXZlbnQoaG1zZ19tZ3ItPnN5bmNfZXZlbnQpOworZnVuY19jb250OgorCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2dldCA9PT09PT09PQorICogICAgICBHZXQgYSBtZXNzYWdlIGZyb20gYSBtc2dfY3RybCBxdWV1ZS4KKyAqLworaW50IGJyaWRnZV9tc2dfZ2V0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkgIHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG1zZ19mcmFtZSAqbXNnX2ZyYW1lX29iajsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJYm9vbCBnb3RfbXNnID0gZmFsc2U7CisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jc1syXTsKKwl1MzIgaW5kZXg7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAoIW1zZ19xdWV1ZV9vYmogfHwgcG1zZyA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaG1zZ19tZ3IgPSBtc2dfcXVldWVfb2JqLT5obXNnX21ncjsKKwlpZiAoIW1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkvKiBJZiBhIG1lc3NhZ2UgaXMgYWxyZWFkeSB0aGVyZSwgZ2V0IGl0ICovCisJaWYgKCFMU1RfSVNfRU1QVFkobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCkpIHsKKwkJbXNnX2ZyYW1lX29iaiA9IChzdHJ1Y3QgbXNnX2ZyYW1lICopCisJCSAgICBsc3RfZ2V0X2hlYWQobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCk7CisJCWlmIChtc2dfZnJhbWVfb2JqICE9IE5VTEwpIHsKKwkJCSpwbXNnID0gbXNnX2ZyYW1lX29iai0+bXNnX2RhdGEubXNnOworCQkJbHN0X3B1dF90YWlsKG1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKW1zZ19mcmFtZV9vYmopOworCQkJaWYgKExTVF9JU19FTVBUWShtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KSkKKwkJCQlzeW5jX3Jlc2V0X2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZXZlbnQpOworCisJCQlnb3RfbXNnID0gdHJ1ZTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtc2dfcXVldWVfb2JqLT5kb25lKQorCQkJc3RhdHVzID0gLUVQRVJNOworCQllbHNlCisJCQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZCsrOworCisJfQorCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwlpZiAoIXN0YXR1cyAmJiAhZ290X21zZykgeworCQkvKiAgV2FpdCB0aWwgbWVzc2FnZSBpcyBhdmFpbGFibGUsIHRpbWVvdXQsIG9yIGRvbmUuIFdlIGRvbid0CisJCSAqICBoYXZlIHRvIHNjaGVkdWxlIHRoZSBEUEMsIHNpbmNlIHRoZSBEU1Agd2lsbCBzZW5kIG1lc3NhZ2VzCisJCSAqICB3aGVuIHRoZXkgYXJlIGF2YWlsYWJsZS4gKi8KKwkJc3luY3NbMF0gPSBtc2dfcXVldWVfb2JqLT5zeW5jX2V2ZW50OworCQlzeW5jc1sxXSA9IG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZTsKKwkJc3RhdHVzID0gc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzeW5jcywgMiwgdXRpbWVvdXQsCisJCQkJCQkgICAgICAmaW5kZXgpOworCQkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJCXNwaW5fbG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisJCWlmIChtc2dfcXVldWVfb2JqLT5kb25lKSB7CisJCQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZC0tOworCQkJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJCQlzcGluX3VubG9ja19iaCgmaG1zZ19tZ3ItPm1zZ19tZ3JfbG9jayk7CisJCQkvKiAgU2lnbmFsIHRoYXQgd2UncmUgbm90IGdvaW5nIHRvIGFjY2VzcyBtc2dfcXVldWVfb2JqCisJCQkgKiAgYW55bW9yZSwgc28gaXQgY2FuIGJlIGRlbGV0ZWQuICovCisJCQkodm9pZClzeW5jX3NldF9ldmVudChtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmVfYWNrKTsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJREJDX0FTU0VSVCghTFNUX0lTX0VNUFRZCisJCQkJCSAgIChtc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0KSk7CisJCQkJLyogR2V0IG1zZyBmcm9tIHVzZWQgbGlzdCAqLworCQkJCW1zZ19mcmFtZV9vYmogPSAoc3RydWN0IG1zZ19mcmFtZSAqKQorCQkJCSAgICBsc3RfZ2V0X2hlYWQobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCk7CisJCQkJLyogQ29weSBtZXNzYWdlIGludG8gcG1zZyBhbmQgcHV0IGZyYW1lIG9uIHRoZQorCQkJCSAqIGZyZWUgbGlzdCAqLworCQkJCWlmIChtc2dfZnJhbWVfb2JqICE9IE5VTEwpIHsKKwkJCQkJKnBtc2cgPSBtc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2c7CisJCQkJCWxzdF9wdXRfdGFpbAorCQkJCQkgICAgKG1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJICAgICBtc2dfZnJhbWVfb2JqKTsKKwkJCQl9CisJCQl9CisJCQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZC0tOworCQkJLyogUmVzZXQgdGhlIGV2ZW50IGlmIHRoZXJlIGFyZSBzdGlsbCBxdWV1ZWQgbWVzc2FnZXMgKi8KKwkJCWlmICghTFNUX0lTX0VNUFRZKG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpKQorCQkJCXN5bmNfc2V0X2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZXZlbnQpOworCisJCQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJfQorCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19wdXQgPT09PT09PT0KKyAqICAgICAgUHV0IGEgbWVzc2FnZSBvbnRvIGEgbXNnX2N0cmwgcXVldWUuCisgKi8KK2ludCBicmlkZ2VfbXNnX3B1dChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorCQkJICBjb25zdCBzdHJ1Y3QgZHNwX21zZyAqcG1zZywgdTMyIHV0aW1lb3V0KQoreworCXN0cnVjdCBtc2dfZnJhbWUgKm1zZ19mcmFtZV9vYmo7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCWJvb2wgcHV0X21zZyA9IGZhbHNlOworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY3NbMl07CisJdTMyIGluZGV4OworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFtc2dfcXVldWVfb2JqIHx8ICFwbXNnIHx8ICFtc2dfcXVldWVfb2JqLT5obXNnX21ncikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlobXNnX21nciA9IG1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyOworCWlmICghaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCisJLyogSWYgYSBtZXNzYWdlIGZyYW1lIGlzIGF2YWlsYWJsZSwgdXNlIGl0ICovCisJaWYgKCFMU1RfSVNfRU1QVFkoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpKSB7CisJCW1zZ19mcmFtZV9vYmogPQorCQkgICAgKHN0cnVjdCBtc2dfZnJhbWUgKilsc3RfZ2V0X2hlYWQoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpOworCQlpZiAobXNnX2ZyYW1lX29iaiAhPSBOVUxMKSB7CisJCQltc2dfZnJhbWVfb2JqLT5tc2dfZGF0YS5tc2cgPSAqcG1zZzsKKwkJCW1zZ19mcmFtZV9vYmotPm1zZ19kYXRhLm1zZ3FfaWQgPQorCQkJICAgIG1zZ19xdWV1ZV9vYmotPm1zZ3FfaWQ7CisJCQlsc3RfcHV0X3RhaWwoaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKW1zZ19mcmFtZV9vYmopOworCQkJaG1zZ19tZ3ItPm1zZ3NfcGVuZGluZysrOworCQkJcHV0X21zZyA9IHRydWU7CisJCX0KKwkJaWYgKExTVF9JU19FTVBUWShobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkpCisJCQlzeW5jX3Jlc2V0X2V2ZW50KGhtc2dfbWdyLT5zeW5jX2V2ZW50KTsKKworCQkvKiBSZWxlYXNlIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIHNjaGVkdWxpbmcgRFBDICovCisJCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJLyogU2NoZWR1bGUgYSBEUEMsIHRvIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlcjogKi8KKwkJaW9zbV9zY2hlZHVsZShobXNnX21nci0+aGlvX21ncik7CisJfSBlbHNlIHsKKwkJaWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCWVsc2UKKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kKys7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmhtc2dfbWdyLT5tc2dfbWdyX2xvY2spOworCX0KKwlpZiAoIXN0YXR1cyAmJiAhcHV0X21zZykgeworCQkvKiBXYWl0IHRpbCBhIGZyZWUgbWVzc2FnZSBmcmFtZSBpcyBhdmFpbGFibGUsIHRpbWVvdXQsCisJCSAqIG9yIGRvbmUgKi8KKwkJc3luY3NbMF0gPSBobXNnX21nci0+c3luY19ldmVudDsKKwkJc3luY3NbMV0gPSBtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmU7CisJCXN0YXR1cyA9IHN5bmNfd2FpdF9vbl9tdWx0aXBsZV9ldmVudHMoc3luY3MsIDIsIHV0aW1lb3V0LAorCQkJCQkJICAgICAgJmluZGV4KTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19lbmQ7CisJCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJc3Bpbl9sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJaWYgKG1zZ19xdWV1ZV9vYmotPmRvbmUpIHsKKwkJCW1zZ19xdWV1ZV9vYmotPmlvX21zZ19wZW5kLS07CisJCQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJCS8qICBTaWduYWwgdGhhdCB3ZSdyZSBub3QgZ29pbmcgdG8gYWNjZXNzIG1zZ19xdWV1ZV9vYmoKKwkJCSAqICBhbnltb3JlLCBzbyBpdCBjYW4gYmUgZGVsZXRlZC4gKi8KKwkJCSh2b2lkKXN5bmNfc2V0X2V2ZW50KG1zZ19xdWV1ZV9vYmotPnN5bmNfZG9uZV9hY2spOworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJaWYgKExTVF9JU19FTVBUWShobXNnX21nci0+bXNnX2ZyZWVfbGlzdCkpIHsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJCWdvdG8gZnVuY19jb250OworCQkJfQorCQkJLyogR2V0IG1zZyBmcm9tIGZyZWUgbGlzdCAqLworCQkJbXNnX2ZyYW1lX29iaiA9IChzdHJ1Y3QgbXNnX2ZyYW1lICopCisJCQkgICAgbHN0X2dldF9oZWFkKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKKwkJCS8qCisJCQkgKiBDb3B5IG1lc3NhZ2UgaW50byBwbXNnIGFuZCBwdXQgZnJhbWUgb24gdGhlCisJCQkgKiB1c2VkIGxpc3QuCisJCQkgKi8KKwkJCWlmIChtc2dfZnJhbWVfb2JqKSB7CisJCQkJbXNnX2ZyYW1lX29iai0+bXNnX2RhdGEubXNnID0gKnBtc2c7CisJCQkJbXNnX2ZyYW1lX29iai0+bXNnX2RhdGEubXNncV9pZCA9CisJCQkJICAgIG1zZ19xdWV1ZV9vYmotPm1zZ3FfaWQ7CisJCQkJbHN0X3B1dF90YWlsKGhtc2dfbWdyLT5tc2dfdXNlZF9saXN0LAorCQkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbXNnX2ZyYW1lX29iaik7CisJCQkJaG1zZ19tZ3ItPm1zZ3NfcGVuZGluZysrOworCQkJCS8qCisJCQkJICogU2NoZWR1bGUgYSBEUEMsIHRvIGRvIHRoZSBhY3R1YWwKKwkJCQkgKiBkYXRhIHRyYW5zZmVyLgorCQkJCSAqLworCQkJCWlvc21fc2NoZWR1bGUoaG1zZ19tZ3ItPmhpb19tZ3IpOworCQkJfQorCisJCQltc2dfcXVldWVfb2JqLT5pb19tc2dfcGVuZC0tOworCQkJLyogUmVzZXQgZXZlbnQgaWYgdGhlcmUgYXJlIHN0aWxsIGZyYW1lcyBhdmFpbGFibGUgKi8KKwkJCWlmICghTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkKKwkJCQlzeW5jX3NldF9ldmVudChobXNnX21nci0+c3luY19ldmVudCk7CitmdW5jX2NvbnQ6CisJCQkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwkJCXNwaW5fdW5sb2NrX2JoKCZobXNnX21nci0+bXNnX21ncl9sb2NrKTsKKwkJfQorCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqLworaW50IGJyaWRnZV9tc2dfcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJICAgdTMyIGV2ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwKKwkJCQkgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghbXNnX3F1ZXVlX29iaiB8fCAhaG5vdGlmaWNhdGlvbikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCWlmICghKGV2ZW50X21hc2sgPT0gRFNQX05PREVNRVNTQUdFUkVBRFkgfHwgZXZlbnRfbWFzayA9PSAwKSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkgeworCQlzdGF0dXMgPSAtRUJBRFI7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaWYgKGV2ZW50X21hc2spCisJCXN0YXR1cyA9IG50ZnlfcmVnaXN0ZXIobXNnX3F1ZXVlX29iai0+bnRmeV9vYmosIGhub3RpZmljYXRpb24sCisJCQkJCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSk7CisJZWxzZQorCQlzdGF0dXMgPSBudGZ5X3VucmVnaXN0ZXIobXNnX3F1ZXVlX29iai0+bnRmeV9vYmosCisJCQkJCQkJaG5vdGlmaWNhdGlvbik7CisKKwlpZiAoc3RhdHVzID09IC1FSU5WQUwpIHsKKwkJLyogIE5vdCByZWdpc3RlcmVkLiBPaywgc2luY2Ugd2UgY291bGRuJ3QgaGF2ZSBrbm93bi4gTm9kZQorCQkgKiAgbm90aWZpY2F0aW9ucyBhcmUgc3BsaXQgYmV0d2VlbiBub2RlIHN0YXRlIGNoYW5nZSBoYW5kbGVkCisJCSAqICBieSBOT0RFLCBhbmQgbWVzc2FnZSByZWFkeSBoYW5kbGVkIGJ5IG1zZ19jdHJsLiAqLworCQlzdGF0dXMgPSAwOworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19zZXRfcXVldWVfaWQgPT09PT09PT0KKyAqLwordm9pZCBicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLCB1MzIgbXNncV9pZCkKK3sKKwkvKgorCSAqICBBIG1lc3NhZ2UgcXVldWUgbXVzdCBiZSBjcmVhdGVkIHdoZW4gYSBub2RlIGlzIGFsbG9jYXRlZCwKKwkgKiAgc28gdGhhdCBub2RlX3JlZ2lzdGVyX25vdGlmeSgpIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBub2RlCisJICogIGlzIGNyZWF0ZWQuIFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIG5vZGUgZW52aXJvbm1lbnQgdW50aWwgdGhlCisJICogIG5vZGUgaXMgY3JlYXRlZCwgd2UgbmVlZCB0aGlzIGZ1bmN0aW9uIHRvIHNldCBtc2dfcXVldWVfb2JqLT5tc2dxX2lkCisJICogIHRvIHRoZSBub2RlIGVudmlyb25tZW50LCBhZnRlciB0aGUgbm9kZSBpcyBjcmVhdGVkLgorCSAqLworCWlmIChtc2dfcXVldWVfb2JqKQorCQltc2dfcXVldWVfb2JqLT5tc2dxX2lkID0gbXNncV9pZDsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfbmV3X21zZyA9PT09PT09PQorICogICAgICBNdXN0IGJlIGNhbGxlZCBpbiBtZXNzYWdlIG1hbmFnZXIgY3JpdGljYWwgc2VjdGlvbi4KKyAqLworc3RhdGljIGludCBhZGRfbmV3X21zZyhzdHJ1Y3QgbHN0X2xpc3QgKm1zZ19saXN0KQoreworCXN0cnVjdCBtc2dfZnJhbWUgKnBtc2c7CisJaW50IHN0YXR1cyA9IDA7CisKKwlwbXNnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zZ19mcmFtZSksIEdGUF9BVE9NSUMpOworCWlmIChwbXNnICE9IE5VTEwpIHsKKwkJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKXBtc2cpOworCQlsc3RfcHV0X3RhaWwobXNnX2xpc3QsIChzdHJ1Y3QgbGlzdF9oZWFkICopcG1zZyk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9tc2dfbWdyID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9tc2dfbWdyKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncikKK3sKKwlpZiAoIWhtc2dfbWdyKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKGhtc2dfbWdyLT5xdWV1ZV9saXN0KSB7CisJCWlmIChMU1RfSVNfRU1QVFkoaG1zZ19tZ3ItPnF1ZXVlX2xpc3QpKSB7CisJCQlrZnJlZShobXNnX21nci0+cXVldWVfbGlzdCk7CisJCQlobXNnX21nci0+cXVldWVfbGlzdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoaG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpIHsKKwkJZnJlZV9tc2dfbGlzdChobXNnX21nci0+bXNnX2ZyZWVfbGlzdCk7CisJCWhtc2dfbWdyLT5tc2dfZnJlZV9saXN0ID0gTlVMTDsKKwl9CisKKwlpZiAoaG1zZ19tZ3ItPm1zZ191c2VkX2xpc3QpIHsKKwkJZnJlZV9tc2dfbGlzdChobXNnX21nci0+bXNnX3VzZWRfbGlzdCk7CisJCWhtc2dfbWdyLT5tc2dfdXNlZF9saXN0ID0gTlVMTDsKKwl9CisKKwlrZnJlZShobXNnX21nci0+c3luY19ldmVudCk7CisKKwlrZnJlZShobXNnX21ncik7CitmdW5jX2VuZDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGVsZXRlX21zZ19xdWV1ZSA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCBkZWxldGVfbXNnX3F1ZXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosIHUzMiBudW1fdG9fZHNwKQoreworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwlzdHJ1Y3QgbXNnX2ZyYW1lICpwbXNnOworCXUzMiBpOworCisJaWYgKCFtc2dfcXVldWVfb2JqIHx8CisJICAgICFtc2dfcXVldWVfb2JqLT5obXNnX21nciB8fCAhbXNnX3F1ZXVlX29iai0+aG1zZ19tZ3ItPm1zZ19mcmVlX2xpc3QpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlobXNnX21nciA9IG1zZ19xdWV1ZV9vYmotPmhtc2dfbWdyOworCisJLyogUHVsbCBvZmYgbnVtX3RvX2RzcCBtZXNzYWdlIGZyYW1lcyBmcm9tIE1zZyBtYW5hZ2VyIGFuZCBmcmVlICovCisJZm9yIChpID0gMDsgaSA8IG51bV90b19kc3A7IGkrKykgeworCisJCWlmICghTFNUX0lTX0VNUFRZKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KSkgeworCQkJcG1zZyA9IChzdHJ1Y3QgbXNnX2ZyYW1lICopCisJCQkgICAgbHN0X2dldF9oZWFkKGhtc2dfbWdyLT5tc2dfZnJlZV9saXN0KTsKKwkJCWtmcmVlKHBtc2cpOworCQl9IGVsc2UgeworCQkJLyogQ2Fubm90IGZyZWUgYWxsIG9mIHRoZSBtZXNzYWdlIGZyYW1lcyAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobXNnX3F1ZXVlX29iai0+bXNnX2ZyZWVfbGlzdCkgeworCQlmcmVlX21zZ19saXN0KG1zZ19xdWV1ZV9vYmotPm1zZ19mcmVlX2xpc3QpOworCQltc2dfcXVldWVfb2JqLT5tc2dfZnJlZV9saXN0ID0gTlVMTDsKKwl9CisKKwlpZiAobXNnX3F1ZXVlX29iai0+bXNnX3VzZWRfbGlzdCkgeworCQlmcmVlX21zZ19saXN0KG1zZ19xdWV1ZV9vYmotPm1zZ191c2VkX2xpc3QpOworCQltc2dfcXVldWVfb2JqLT5tc2dfdXNlZF9saXN0ID0gTlVMTDsKKwl9CisKKwlpZiAobXNnX3F1ZXVlX29iai0+bnRmeV9vYmopIHsKKwkJbnRmeV9kZWxldGUobXNnX3F1ZXVlX29iai0+bnRmeV9vYmopOworCQlrZnJlZShtc2dfcXVldWVfb2JqLT5udGZ5X29iaik7CisJfQorCisJa2ZyZWUobXNnX3F1ZXVlX29iai0+c3luY19ldmVudCk7CisJa2ZyZWUobXNnX3F1ZXVlX29iai0+c3luY19kb25lKTsKKwlrZnJlZShtc2dfcXVldWVfb2JqLT5zeW5jX2RvbmVfYWNrKTsKKworCWtmcmVlKG1zZ19xdWV1ZV9vYmopOworZnVuY19lbmQ6CisJcmV0dXJuOworCit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9tc2dfbGlzdCA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCBmcmVlX21zZ19saXN0KHN0cnVjdCBsc3RfbGlzdCAqbXNnX2xpc3QpCit7CisJc3RydWN0IG1zZ19mcmFtZSAqcG1zZzsKKworCWlmICghbXNnX2xpc3QpCisJCWdvdG8gZnVuY19lbmQ7CisKKwl3aGlsZSAoKHBtc2cgPSAoc3RydWN0IG1zZ19mcmFtZSAqKWxzdF9nZXRfaGVhZChtc2dfbGlzdCkpICE9IE5VTEwpCisJCWtmcmVlKHBtc2cpOworCisJREJDX0FTU0VSVChMU1RfSVNfRU1QVFkobXNnX2xpc3QpKTsKKworCWtmcmVlKG1zZ19saXN0KTsKK2Z1bmNfZW5kOgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTE0ODI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCkBAIC0wLDAgKzEsMTgwMiBAQAorLyoKKyAqIHRpb21hcC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByb2Nlc3NvciBNYW5hZ2VyIERyaXZlciBmb3IgVEkgT01BUDM0MzAgRVZNLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCisjaW5jbHVkZSA8aHdfZGVmcy5oPgorI2luY2x1ZGUgPGh3X21tdS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGluayBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BjaG5sLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Bpby5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3Btc2cuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvX3NtLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9jYWwgKi8KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisjaW5jbHVkZSAiX3Rpb21hcF9wd3IuaCIKKyNpbmNsdWRlICJ0aW9tYXBfaW8uaCIKKworLyogT2Zmc2V0IGluIHNoYXJlZCBtZW0gdG8gd3JpdGUgdG8gaW4gb3JkZXIgdG8gc3luY2hyb25pemUgc3RhcnQgd2l0aCBEU1AgKi8KKyNkZWZpbmUgU0hNU1lOQ09GRlNFVCA0CQkvKiBHUFAgYnl0ZSBvZmZzZXQgKi8KKworI2RlZmluZSBCVUZGRVJTSVpFIDEwMjQKKworI2RlZmluZSBUSUhFTEVOX0FDS1RJTUVPVVQgIDEwMDAwCisKKyNkZWZpbmUgTU1VX1NFQ1RJT05fQUREUl9NQVNLICAgIDB4RkZGMDAwMDAKKyNkZWZpbmUgTU1VX1NTRUNUSU9OX0FERFJfTUFTSyAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgTU1VX0xBUkdFX1BBR0VfTUFTSyAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgTU1VX1NNQUxMX1BBR0VfTUFTSyAgICAgIDB4RkZGRkYwMDAKKyNkZWZpbmUgT01BUDNfSVZBMl9CT09UQUREUl9NQVNLIDB4RkZGRkZDMDAKKyNkZWZpbmUgUEFHRVNfSUlfTFZMX1RBQkxFICAgNTEyCisjZGVmaW5lIFBIWVNfVE9fUEFHRShwaHlzKSAgICAgIHBmbl90b19wYWdlKChwaHlzKSA+PiBQQUdFX1NISUZUKQorCisvKiBGb3J3YXJkIERlY2xhcmF0aW9uczogKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tb25pdG9yKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9yZWFkKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgdTggKmhvc3RfYnVmZiwKKwkJCQkgIHUzMiBkc3BfYWRkciwgdTMyIHVsX251bV9ieXRlcywKKwkJCQkgIHUzMiBtZW1fdHlwZSk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfc3RhcnQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgdTMyIGRzcF9hZGRyKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zdGF0dXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgIGludCAqYm9hcmRfc3RhdGUpOworc3RhdGljIGludCBicmlkZ2VfYnJkX3N0b3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOworc3RhdGljIGludCBicmlkZ2VfYnJkX3dyaXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHU4ICpob3N0X2J1ZmYsCisJCQkJICAgdTMyIGRzcF9hZGRyLCB1MzIgdWxfbnVtX2J5dGVzLAorCQkJCSAgIHUzMiBtZW1fdHlwZSk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfc2V0X3N0YXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICB1MzIgYnJkX3N0YXRlKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fY29weShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICB1MzIgZHNwX2Rlc3RfYWRkciwgdTMyIGRzcF9zcmNfYWRkciwKKwkJCQkgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpOworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV93cml0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpOworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV9tYXAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICB1MzIgdWxfbXB1X2FkZHIsIHUzMiB2aXJ0X2FkZHIsCisJCQkJICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgdWxfbWFwX2F0dHIsCisJCQkJICBzdHJ1Y3QgcGFnZSAqKm1hcHBlZF9wYWdlcyk7CitzdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX3VuX21hcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgIHUzMiB2aXJ0X2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMpOworc3RhdGljIGludCBicmlkZ2VfZGV2X2NyZWF0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0CisJCQkJCSoqZGV2X2NudHh0LAorCQkJCQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJCXN0cnVjdCBjZmdfaG9zdHJlcyAqY29uZmlnX3BhcmFtKTsKK3N0YXRpYyBpbnQgYnJpZGdlX2Rldl9jdHJsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdTMyIGR3X2NtZCwgdm9pZCAqcGFyZ3MpOworc3RhdGljIGludCBicmlkZ2VfZGV2X2Rlc3Ryb3koc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOworc3RhdGljIHUzMiB1c2VyX3ZhMl9wYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHJlc3MpOworc3RhdGljIGludCBwdGVfdXBkYXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LCB1MzIgcGEsCisJCQkgICAgIHUzMiB2YSwgdTMyIHNpemUsCisJCQkgICAgIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycyk7CitzdGF0aWMgaW50IHB0ZV9zZXQoc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdCwgdTMyIHBhLCB1MzIgdmEsCisJCQkgIHUzMiBzaXplLCBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICphdHRycyk7CitzdGF0aWMgaW50IG1lbV9tYXBfdm1hbGxvYyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgIHUzMiB1bF9tcHVfYWRkciwgdTMyIHZpcnRfYWRkciwKKwkJCQkgIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICpod19hdHRycyk7CisKK2Jvb2wgd2FpdF9mb3Jfc3RhcnQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHUzMiBkd19zeW5jX2FkZHIpOworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworCisvKiBBdHRyaWJ1dGVzIG9mIEwyIHBhZ2UgdGFibGVzIGZvciBEU1AgTU1VICovCitzdHJ1Y3QgcGFnZV9pbmZvIHsKKwl1MzIgbnVtX2VudHJpZXM7CS8qIE51bWJlciBvZiB2YWxpZCBQVEVzIGluIHRoZSBMMiBQVCAqLworfTsKKworLyogQXR0cmlidXRlcyB1c2VkIHRvIG1hbmFnZSB0aGUgRFNQIE1NVSBwYWdlIHRhYmxlcyAqLworc3RydWN0IHBnX3RhYmxlX2F0dHJzIHsKKwlzcGlubG9ja190IHBnX2xvY2s7CS8qIENyaXRpY2FsIHNlY3Rpb24gb2JqZWN0IGhhbmRsZSAqLworCisJdTMyIGwxX2Jhc2VfcGE7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBMMSBQVCAqLworCXUzMiBsMV9iYXNlX3ZhOwkJLyogVmlydHVhbCAgYWRkcmVzcyBvZiB0aGUgTDEgUFQgKi8KKwl1MzIgbDFfc2l6ZTsJCS8qIFNpemUgb2YgdGhlIEwxIFBUICovCisJdTMyIGwxX3RibF9hbGxvY19wYTsKKwkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIEFsbG9jYXRlZCBtZW0gZm9yIEwxIHRhYmxlLiBNYXkgbm90IGJlIGFsaWduZWQgKi8KKwl1MzIgbDFfdGJsX2FsbG9jX3ZhOworCS8qIFZpcnR1YWwgYWRkcmVzcyBvZiBBbGxvY2F0ZWQgbWVtIGZvciBMMSB0YWJsZS4gTWF5IG5vdCBiZSBhbGlnbmVkICovCisJdTMyIGwxX3RibF9hbGxvY19zejsKKwkvKiBTaXplIG9mIGNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRlZCBmb3IgTDEgdGFibGUuCisJICogTWF5IG5vdCBiZSBhbGlnbmVkICovCisKKwl1MzIgbDJfYmFzZV9wYTsJCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEwyIFBUICovCisJdTMyIGwyX2Jhc2VfdmE7CQkvKiBWaXJ0dWFsICBhZGRyZXNzIG9mIHRoZSBMMiBQVCAqLworCXUzMiBsMl9zaXplOwkJLyogU2l6ZSBvZiB0aGUgTDIgUFQgKi8KKwl1MzIgbDJfdGJsX2FsbG9jX3BhOworCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgQWxsb2NhdGVkIG1lbSBmb3IgTDIgdGFibGUuIE1heSBub3QgYmUgYWxpZ25lZCAqLworCXUzMiBsMl90YmxfYWxsb2NfdmE7CisJLyogVmlydHVhbCBhZGRyZXNzIG9mIEFsbG9jYXRlZCBtZW0gZm9yIEwyIHRhYmxlLiBNYXkgbm90IGJlIGFsaWduZWQgKi8KKwl1MzIgbDJfdGJsX2FsbG9jX3N6OworCS8qIFNpemUgb2YgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGVkIGZvciBMMiB0YWJsZS4KKwkgKiBNYXkgbm90IGJlIGFsaWduZWQgKi8KKworCXUzMiBsMl9udW1fcGFnZXM7CS8qIE51bWJlciBvZiBhbGxvY2F0ZWQgTDIgUFQgKi8KKwkvKiBBcnJheSBbbDJfbnVtX3BhZ2VzXSBvZiBMMiBQVCBpbmZvIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgcGFnZV9pbmZvICpwZ19pbmZvOworfTsKKworLyoKKyAqICBUaGlzIEJyaWRnZSBkcml2ZXIncyBmdW5jdGlvbiBpbnRlcmZhY2UgdGFibGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgZHJ2X2ludGVyZmFjZV9meG5zID0geworCS8qIEJyaWRnZSBBUEkgdmVyLiBmb3Igd2hpY2ggdGhpcyBicmlkZ2UgZHJpdmVyIGlzIGJ1aWx0LiAqLworCUJSRF9BUElfTUFKT1JfVkVSU0lPTiwKKwlCUkRfQVBJX01JTk9SX1ZFUlNJT04sCisJYnJpZGdlX2Rldl9jcmVhdGUsCisJYnJpZGdlX2Rldl9kZXN0cm95LAorCWJyaWRnZV9kZXZfY3RybCwKKwlicmlkZ2VfYnJkX21vbml0b3IsCisJYnJpZGdlX2JyZF9zdGFydCwKKwlicmlkZ2VfYnJkX3N0b3AsCisJYnJpZGdlX2JyZF9zdGF0dXMsCisJYnJpZGdlX2JyZF9yZWFkLAorCWJyaWRnZV9icmRfd3JpdGUsCisJYnJpZGdlX2JyZF9zZXRfc3RhdGUsCisJYnJpZGdlX2JyZF9tZW1fY29weSwKKwlicmlkZ2VfYnJkX21lbV93cml0ZSwKKwlicmlkZ2VfYnJkX21lbV9tYXAsCisJYnJpZGdlX2JyZF9tZW1fdW5fbWFwLAorCS8qIFRoZSBmb2xsb3dpbmcgQ0hOTCBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IGNobmxfaW8ubGliOiAqLworCWJyaWRnZV9jaG5sX2NyZWF0ZSwKKwlicmlkZ2VfY2hubF9kZXN0cm95LAorCWJyaWRnZV9jaG5sX29wZW4sCisJYnJpZGdlX2NobmxfY2xvc2UsCisJYnJpZGdlX2NobmxfYWRkX2lvX3JlcSwKKwlicmlkZ2VfY2hubF9nZXRfaW9jLAorCWJyaWRnZV9jaG5sX2NhbmNlbF9pbywKKwlicmlkZ2VfY2hubF9mbHVzaF9pbywKKwlicmlkZ2VfY2hubF9nZXRfaW5mbywKKwlicmlkZ2VfY2hubF9nZXRfbWdyX2luZm8sCisJYnJpZGdlX2NobmxfaWRsZSwKKwlicmlkZ2VfY2hubF9yZWdpc3Rlcl9ub3RpZnksCisJLyogVGhlIGZvbGxvd2luZyBJTyBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGJ5IGNobmxfaW8ubGliOiAqLworCWJyaWRnZV9pb19jcmVhdGUsCisJYnJpZGdlX2lvX2Rlc3Ryb3ksCisJYnJpZGdlX2lvX29uX2xvYWRlZCwKKwlicmlkZ2VfaW9fZ2V0X3Byb2NfbG9hZCwKKwkvKiBUaGUgZm9sbG93aW5nIG1zZ19jdHJsIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYnkgY2hubF9pby5saWI6ICovCisJYnJpZGdlX21zZ19jcmVhdGUsCisJYnJpZGdlX21zZ19jcmVhdGVfcXVldWUsCisJYnJpZGdlX21zZ19kZWxldGUsCisJYnJpZGdlX21zZ19kZWxldGVfcXVldWUsCisJYnJpZGdlX21zZ19nZXQsCisJYnJpZGdlX21zZ19wdXQsCisJYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnksCisJYnJpZGdlX21zZ19zZXRfcXVldWVfaWQsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfYWxsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0KQoreworCWlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9EU1BfSElCRVJOQVRJT04gfHwKKwkgICAgZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfSElCRVJOQVRJT04pCisJCXdha2VfZHNwKGRldl9jb250ZXh0LCBOVUxMKTsKKworCWh3X21tdV90bGJfZmx1c2hfYWxsKGRldl9jb250ZXh0LT5kd19kc3BfbW11X2Jhc2UpOworfQorCitzdGF0aWMgdm9pZCBiYWRfcGFnZV9kdW1wKHUzMiBwYSwgc3RydWN0IHBhZ2UgKnBnKQoreworCXByX2VtZXJnKCJEU1BCUklER0U6IE1BUCBmdW5jdGlvbjogQ09VTlQgMCBGT1IgUEEgMHgleFxuIiwgcGEpOworCXByX2VtZXJnKCJCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICclcydcbiIKKwkJICJwYWdlOiVwIGZsYWdzOjB4JTAqbHggbWFwcGluZzolcCBtYXBjb3VudDolZCBjb3VudDolZFxuIgorCQkgIkJhY2t0cmFjZTpcbiIsCisJCSBjdXJyZW50LT5jb21tLCBwZywgKGludCkoMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSksCisJCSAodW5zaWduZWQgbG9uZylwZy0+ZmxhZ3MsIHBnLT5tYXBwaW5nLAorCQkgcGFnZV9tYXBjb3VudChwZyksIHBhZ2VfY291bnQocGcpKTsKKwlkdW1wX3N0YWNrKCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Rydl9lbnRyeSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEJyaWRnZSBEcml2ZXIgZW50cnkgcG9pbnQuCisgKi8KK3ZvaWQgYnJpZGdlX2Rydl9lbnRyeShzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKipkcnZfaW50ZiwKKwkJICAgY29uc3QgY2hhciAqZHJpdmVyX2ZpbGVfbmFtZSkKK3sKKworCURCQ19SRVFVSVJFKGRyaXZlcl9maWxlX25hbWUgIT0gTlVMTCk7CisKKwlpb19zbV9pbml0KCk7CQkvKiBJbml0aWFsaXphdGlvbiBvZiBpb19zbSBtb2R1bGUgKi8KKworCWlmIChzdHJjbXAoZHJpdmVyX2ZpbGVfbmFtZSwgIlVNQSIpID09IDApCisJCSpkcnZfaW50ZiA9ICZkcnZfaW50ZXJmYWNlX2Z4bnM7CisJZWxzZQorCQlkZXZfZGJnKGJyaWRnZSwgIiVzIFVua25vd24gQnJpZGdlIGZpbGUgbmFtZSIsIF9fZnVuY19fKTsKKworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfbW9uaXRvciA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFRoaXMgYnJpZGdlX2JyZF9tb25pdG9yIHB1dHMgRFNQIGludG8gYSBMb2FkYWJsZSBzdGF0ZS4KKyAqICAgICAgaS5lIEFwcGxpY2F0aW9uIGNhbiBsb2FkIGFuZCBzdGFydCB0aGUgZGV2aWNlLgorICoKKyAqICBQcmVjb25kaXRpb25zOgorICogICAgICBEZXZpY2UgaW4gJ09GRicgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tb25pdG9yKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KQoreworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJdTMyIHRlbXA7CisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkJICAgIG9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwl0ZW1wID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVFNUKSAmCisJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0s7CisJaWYgKCEodGVtcCAmIDB4MDIpKSB7CisJCS8qIElWQTIgaXMgbm90IGluIE9OIHN0YXRlICovCisJCS8qIFJlYWQgYW5kIHNldCBQTV9QV1NUQ1RSTF9JVkEyICB0byBPTiAqLworCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQX1BPV0VSU1RBVEVTVF9NQVNLLAorCQkJUFdSRE1fUE9XRVJfT04sIE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUQ1RSTCk7CisJCS8qIFNldCB0aGUgU1cgc3VwZXJ2aXNlZCBzdGF0ZSB0cmFuc2l0aW9uICovCisJCSgqcGRhdGEtPmRzcF9jbV93cml0ZSkoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1dBS0VVUCwKKwkJCQkJT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisKKwkJLyogV2FpdCB1bnRpbCB0aGUgc3RhdGUgaGFzIG1vdmVkIHRvIE9OICovCisJCXdoaWxlICgoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUU1QpICYKKwkJCQkJCU9NQVBfSU5UUkFOU0lUSU9OX01BU0spCisJCQk7CisJCS8qIERpc2FibGUgQXV0b21hdGljIHRyYW5zaXRpb24gKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKShPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPLAorCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKKwl9CisJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMl9JVkEyX01BU0ssIDAsCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKwlkc3BfY2xrX2VuYWJsZShEU1BfQ0xLX0lWQTIpOworCisJLyogc2V0IHRoZSBkZXZpY2Ugc3RhdGUgdG8gSURMRSAqLworCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfSURMRTsKKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfcmVhZCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFJlYWRzIGJ1ZmZlcnMgZm9yIERTUCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9yZWFkKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJdTMyIG9mZnNldDsKKwl1MzIgZHNwX2Jhc2VfYWRkciA9IGRldl9jdHh0LT5kd19kc3BfYmFzZV9hZGRyOworCisJaWYgKGRzcF9hZGRyIDwgZGV2X2NvbnRleHQtPmR3X2RzcF9zdGFydF9hZGQpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwkvKiBjaGFuZ2UgaGVyZSB0byBhY2NvdW50IGZvciB0aGUgMyBiYW5kcyBvZiB0aGUgRFNQIGludGVybmFsIG1lbW9yeSAqLworCWlmICgoZHNwX2FkZHIgLSBkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCkgPAorCSAgICBkZXZfY29udGV4dC0+ZHdfaW50ZXJuYWxfc2l6ZSkgeworCQlvZmZzZXQgPSBkc3BfYWRkciAtIGRldl9jb250ZXh0LT5kd19kc3Bfc3RhcnRfYWRkOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHJlYWRfZXh0X2RzcF9kYXRhKGRldl9jb250ZXh0LCBob3N0X2J1ZmYsIGRzcF9hZGRyLAorCQkJCQkgICB1bF9udW1fYnl0ZXMsIG1lbV90eXBlKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogY29weSB0aGUgZGF0YSBmcm9tICBEU1AgbWVtb3J5LCAqLworCW1lbWNweShob3N0X2J1ZmYsICh2b2lkICopKGRzcF9iYXNlX2FkZHIgKyBvZmZzZXQpLCB1bF9udW1fYnl0ZXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zZXRfc3RhdGUgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBUaGlzIHJvdXRpbmUgdXBkYXRlcyB0aGUgQm9hcmQgc3RhdHVzLgorICovCitzdGF0aWMgaW50IGJyaWRnZV9icmRfc2V0X3N0YXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICB1MzIgYnJkX3N0YXRlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisKKwlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gYnJkX3N0YXRlOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zdGFydCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemVzIERTUCBNTVUgYW5kIFN0YXJ0cyBEU1AuCisgKgorICogIFByZWNvbmRpdGlvbnM6CisgKiAgYSkgRFNQIGRvbWFpbiBpcyAnQUNUSVZFJy4KKyAqICBiKSBEU1BfUlNUMSBpcyBhc3NlcnRlZC4KKyAqICBiKSBEU1BfUlNUMiBpcyByZWxlYXNlZC4KKyAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX3N0YXJ0KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHUzMiBkc3BfYWRkcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXUzMiBkd19zeW5jX2FkZHIgPSAwOworCXUzMiB1bF9zaG1fYmFzZTsJLyogR3BwIFBoeXMgU00gYmFzZSBhZGRyKGJ5dGUpICovCisJdTMyIHVsX3NobV9iYXNlX3ZpcnQ7CS8qIERzcCBWaXJ0IFNNIGJhc2UgYWRkciAqLworCXUzMiB1bF90bGJfYmFzZV92aXJ0OwkvKiBCYXNlIG9mIE1NVSBUTEIgZW50cnkgKi8KKwkvKiBPZmZzZXQgb2Ygc2htX2Jhc2VfdmlydCBmcm9tIHRsYl9iYXNlX3ZpcnQgKi8KKwl1MzIgdWxfc2htX29mZnNldF92aXJ0OworCXMzMiBlbnRyeV9uZHg7CisJczMyIGl0bXBfZW50cnlfbmR4ID0gMDsJLyogRFNQLU1NVSBUTEIgZW50cnkgYmFzZSBhZGRyZXNzICovCisJc3RydWN0IGNmZ19ob3N0cmVzICpyZXNvdXJjZXMgPSBOVUxMOworCXUzMiB0ZW1wOworCXUzMiB1bF9kc3BfY2xrX3JhdGU7CisJdTMyIHVsX2RzcF9jbGtfYWRkcjsKKwl1MzIgdWxfYmlvc19ncF90aW1lcjsKKwl1MzIgY2xrX2NtZDsKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOworCXUzMiB1bF9sb2FkX21vbml0b3JfdGltZXI7CisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkJb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIFRoZSBkZXZpY2UgY29udGV4dCBjb250YWlucyBhbGwgdGhlIG1tdSBzZXR1cCBpbmZvIGZyb20gd2hlbiB0aGUKKwkgKiBsYXN0IGRzcCBiYXNlIGltYWdlIHdhcyBsb2FkZWQuIFRoZSBmaXJzdCBlbnRyeSBpcyBhbHdheXMKKwkgKiBTSE1NRU0gYmFzZS4gKi8KKwkvKiBHZXQgU0hNX0JFRyAtIGNvbnZlcnQgdG8gYnl0ZSBhZGRyZXNzICovCisJKHZvaWQpZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLCBTSE1CQVNFTkFNRSwKKwkJCSAgICAgJnVsX3NobV9iYXNlX3ZpcnQpOworCXVsX3NobV9iYXNlX3ZpcnQgKj0gRFNQV09SRFNJWkU7CisJREJDX0FTU0VSVCh1bF9zaG1fYmFzZV92aXJ0ICE9IDApOworCS8qIERTUCBWaXJ0dWFsIGFkZHJlc3MgKi8KKwl1bF90bGJfYmFzZV92aXJ0ID0gZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbMF0udWxfZHNwX3ZhOworCURCQ19BU1NFUlQodWxfdGxiX2Jhc2VfdmlydCA8PSB1bF9zaG1fYmFzZV92aXJ0KTsKKwl1bF9zaG1fb2Zmc2V0X3ZpcnQgPQorCSAgICB1bF9zaG1fYmFzZV92aXJ0IC0gKHVsX3RsYl9iYXNlX3ZpcnQgKiBEU1BXT1JEU0laRSk7CisJLyogS2VybmVsIGxvZ2ljYWwgYWRkcmVzcyAqLworCXVsX3NobV9iYXNlID0gZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbMF0udWxfZ3BwX3ZhICsgdWxfc2htX29mZnNldF92aXJ0OworCisJREJDX0FTU0VSVCh1bF9zaG1fYmFzZSAhPSAwKTsKKwkvKiAybmQgd2QgaXMgdXNlZCBhcyBzeW5jIGZpZWxkICovCisJZHdfc3luY19hZGRyID0gdWxfc2htX2Jhc2UgKyBTSE1TWU5DT0ZGU0VUOworCS8qIFdyaXRlIGEgc2lnbmF0dXJlIGludG8gdGhlIHNobSBiYXNlICsgb2Zmc2V0OyB0aGlzIHdpbGwKKwkgKiBnZXQgY2xlYXJlZCB3aGVuIHRoZSBEU1AgcHJvZ3JhbSBzdGFydHMuICovCisJaWYgKCh1bF9zaG1fYmFzZV92aXJ0ID09IDApIHx8ICh1bF9zaG1fYmFzZSA9PSAwKSkgeworCQlwcl9lcnIoIiVzOiBJbGxlZ2FsIFNNIGJhc2VcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0gZWxzZQorCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgZHdfc3luY19hZGRyKTsKKworCWlmICghc3RhdHVzKSB7CisJCXJlc291cmNlcyA9IGRldl9jb250ZXh0LT5yZXNvdXJjZXM7CisJCWlmICghcmVzb3VyY2VzKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCS8qIEFzc2VydCBSU1QxIGkuZSBvbmx5IHRoZSBSU1Qgb25seSBmb3IgRFNQIG1lZ2FjZWxsICovCisJCWlmICghc3RhdHVzKSB7CisJCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQMzQzMF9SU1QxX0lWQTJfTUFTSywKKwkJCQkJT01BUDM0MzBfUlNUMV9JVkEyX01BU0ssIE9NQVAzNDMwX0lWQTJfTU9ELAorCQkJCQlPTUFQMl9STV9SU1RDVFJMKTsKKwkJCS8qIE1hc2sgYWRkcmVzcyB3aXRoIDFLIGZvciBjb21wYXRpYmlsaXR5ICovCisJCQlfX3Jhd193cml0ZWwoZHNwX2FkZHIgJiBPTUFQM19JVkEyX0JPT1RBRERSX01BU0ssCisJCQkJCU9NQVAzNDNYX0NUUkxfUkVHQUREUigKKwkJCQkJT01BUDM0M1hfQ09OVFJPTF9JVkEyX0JPT1RBRERSKSk7CisJCQkvKgorCQkJICogU2V0IGJvb3Rtb2RlIHRvIHNlbGYgbG9vcCBpZiBkc3BfZGVidWcgZmxhZyBpcyB0cnVlCisJCQkgKi8KKwkJCV9fcmF3X3dyaXRlbCgoZHNwX2RlYnVnKSA/IE9NQVAzX0lWQTJfQk9PVE1PRF9JRExFIDogMCwKKwkJCQkJT01BUDM0M1hfQ1RSTF9SRUdBRERSKAorCQkJCQlPTUFQMzQzWF9DT05UUk9MX0lWQTJfQk9PVE1PRCkpOworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIFJlc2V0IGFuZCBVbnJlc2V0IHRoZSBSU1QyLCBzbyB0aGF0IEJPT1RBRERSIGlzIGNvcGllZCB0bworCQkgKiBJVkEyIFNZU0MgcmVnaXN0ZXIgKi8KKwkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMl9JVkEyX01BU0ssCisJCQlPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSywgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOworCQl1ZGVsYXkoMTAwKTsKKwkJKCpwZGF0YS0+ZHNwX3BybV9ybXdfYml0cykoT01BUDM0MzBfUlNUMl9JVkEyX01BU0ssIDAsCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKwkJdWRlbGF5KDEwMCk7CisKKwkJLyogRGlzYmFsZSB0aGUgRFNQIE1NVSAqLworCQlod19tbXVfZGlzYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisJCS8qIERpc2FibGUgVFdMICovCisJCWh3X21tdV90d2xfZGlzYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisKKwkJLyogT25seSBtYWtlIFRMQiBlbnRyeSBpZiBib3RoIGFkZHJlc3NlcyBhcmUgbm9uLXplcm8gKi8KKwkJZm9yIChlbnRyeV9uZHggPSAwOyBlbnRyeV9uZHggPCBCUkRJT0NUTF9OVU1PRk1NVVRMQjsKKwkJICAgICBlbnRyeV9uZHgrKykgeworCQkJc3RydWN0IGJyaWRnZV9pb2N0bF9leHRwcm9jICplID0gJmRldl9jb250ZXh0LT5hdGxiX2VudHJ5W2VudHJ5X25keF07CisJCQlzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190IG1hcF9hdHRycyA9IHsKKwkJCQkuZW5kaWFuaXNtID0gZS0+ZW5kaWFuaXNtLAorCQkJCS5lbGVtZW50X3NpemUgPSBlLT5lbGVtX3NpemUsCisJCQkJLm1peGVkX3NpemUgPSBlLT5taXhlZF9tb2RlLAorCQkJfTsKKworCQkJaWYgKCFlLT51bF9ncHBfcGEgfHwgIWUtPnVsX2RzcF92YSkKKwkJCQljb250aW51ZTsKKworCQkJZGV2X2RiZyhicmlkZ2UsCisJCQkJCSJNTVUgJWQsIHBhOiAweCV4LCB2YTogMHgleCwgc2l6ZTogMHgleCIsCisJCQkJCWl0bXBfZW50cnlfbmR4LAorCQkJCQllLT51bF9ncHBfcGEsCisJCQkJCWUtPnVsX2RzcF92YSwKKwkJCQkJZS0+dWxfc2l6ZSk7CisKKwkJCWh3X21tdV90bGJfYWRkKGRldl9jb250ZXh0LT5kd19kc3BfbW11X2Jhc2UsCisJCQkJCWUtPnVsX2dwcF9wYSwKKwkJCQkJZS0+dWxfZHNwX3ZhLAorCQkJCQllLT51bF9zaXplLAorCQkJCQlpdG1wX2VudHJ5X25keCwKKwkJCQkJJm1hcF9hdHRycywgMSwgMSk7CisKKwkJCWl0bXBfZW50cnlfbmR4Kys7CisJCX0KKwl9CisKKwkvKiBMb2NrIHRoZSBhYm92ZSBUTEIgZW50cmllcyBhbmQgZ2V0IHRoZSBCSU9TIGFuZCBsb2FkIG1vbml0b3IgdGltZXIKKwkgKiBpbmZvcm1hdGlvbiAqLworCWlmICghc3RhdHVzKSB7CisJCWh3X21tdV9udW1fbG9ja2VkX3NldChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwgaXRtcF9lbnRyeV9uZHgpOworCQlod19tbXVfdmljdGltX251bV9zZXQocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsIGl0bXBfZW50cnlfbmR4KTsKKwkJaHdfbW11X3R0Yl9zZXQocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsCisJCQkgICAgICAgZGV2X2NvbnRleHQtPnB0X2F0dHJzLT5sMV9iYXNlX3BhKTsKKwkJaHdfbW11X3R3bF9lbmFibGUocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UpOworCQkvKiBFbmFibGUgdGhlIFNtYXJ0SWRsZSBhbmQgQXV0b0lkbGUgYml0IGZvciBNTVVfU1lTQ09ORklHICovCisKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSkgKyAweDEwKTsKKwkJdGVtcCA9ICh0ZW1wICYgMHhGRkZGRkZFRikgfCAweDExOworCQlfX3Jhd193cml0ZWwodGVtcCwgKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKSArIDB4MTApOworCisJCS8qIExldCB0aGUgRFNQIE1NVSBydW4gKi8KKwkJaHdfbW11X2VuYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisKKwkJLyogRW5hYmxlIHRoZSBCSU9TIGNsb2NrICovCisJCSh2b2lkKWRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkgICAgIEJSSURHRUlOSVRfQklPU0dQVElNRVIsICZ1bF9iaW9zX2dwX3RpbWVyKTsKKwkJKHZvaWQpZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCSAgICAgQlJJREdFSU5JVF9MT0FETU9OX0dQVElNRVIsCisJCQkJICAgICAmdWxfbG9hZF9tb25pdG9yX3RpbWVyKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlpZiAodWxfbG9hZF9tb25pdG9yX3RpbWVyICE9IDB4RkZGRikgeworCQkJY2xrX2NtZCA9IChCUFdSX0VOQUJMRV9DTE9DSyA8PCBNQlhfUE1fQ0xLX0NNRFNISUZUKSB8CisJCQkgICAgdWxfbG9hZF9tb25pdG9yX3RpbWVyOworCQkJZHNwX3BlcmlwaGVyYWxfY2xrX2N0cmwoZGV2X2NvbnRleHQsICZjbGtfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoYnJpZGdlLCAiTm90IGFibGUgdG8gZ2V0IHRoZSBzeW1ib2wgZm9yIExvYWQgIgorCQkJCSJNb25pdG9yIFRpbWVyXG4iKTsKKwkJfQorCX0KKworCWlmICghc3RhdHVzKSB7CisJCWlmICh1bF9iaW9zX2dwX3RpbWVyICE9IDB4RkZGRikgeworCQkJY2xrX2NtZCA9IChCUFdSX0VOQUJMRV9DTE9DSyA8PCBNQlhfUE1fQ0xLX0NNRFNISUZUKSB8CisJCQkgICAgdWxfYmlvc19ncF90aW1lcjsKKwkJCWRzcF9wZXJpcGhlcmFsX2Nsa19jdHJsKGRldl9jb250ZXh0LCAmY2xrX2NtZCk7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGJyaWRnZSwKKwkJCQkiTm90IGFibGUgdG8gZ2V0IHRoZSBzeW1ib2wgZm9yIEJJT1MgVGltZXJcbiIpOworCQl9CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogU2V0IHRoZSBEU1AgY2xvY2sgcmF0ZSAqLworCQkodm9pZClkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJICAgICAiX0JSSURHRUlOSVRfRFNQX0ZSRVEiLCAmdWxfZHNwX2Nsa19hZGRyKTsKKwkJLypTZXQgQXV0b2lkbGUgTW9kZSBmb3IgSVZBMiBQTEwgKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKSgxIDw8IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX1NISUZULAorCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpOworCisJCWlmICgodW5zaWduZWQgaW50ICopdWxfZHNwX2Nsa19hZGRyICE9IE5VTEwpIHsKKwkJCS8qIEdldCB0aGUgY2xvY2sgcmF0ZSAqLworCQkJdWxfZHNwX2Nsa19yYXRlID0gZHNwX2Nsa19nZXRfaXZhMl9yYXRlKCk7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1AgY2xvY2sgcmF0ZSAoS0haKTogMHgleCBcbiIsCisJCQkJX19mdW5jX18sIHVsX2RzcF9jbGtfcmF0ZSk7CisJCQkodm9pZClicmlkZ2VfYnJkX3dyaXRlKGRldl9jb250ZXh0LAorCQkJCQkgICAgICAgKHU4ICopICZ1bF9kc3BfY2xrX3JhdGUsCisJCQkJCSAgICAgICB1bF9kc3BfY2xrX2FkZHIsIHNpemVvZih1MzIpLCAwKTsKKwkJfQorCQkvKgorCQkgKiBFbmFibGUgTWFpbGJveCBldmVudHMgYW5kIGFsc28gZHJhaW4gYW55IHBlbmRpbmcKKwkJICogc3RhbGUgbWVzc2FnZXMuCisJCSAqLworCQlkZXZfY29udGV4dC0+bWJveCA9IG9tYXBfbWJveF9nZXQoImRzcCIpOworCQlpZiAoSVNfRVJSKGRldl9jb250ZXh0LT5tYm94KSkgeworCQkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOworCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBkc3AgbWFpbGJveCBoYW5kbGVcbiIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCisJfQorCWlmICghc3RhdHVzKSB7CisJCWRldl9jb250ZXh0LT5tYm94LT5yeHEtPmNhbGxiYWNrID0gKGludCAoKikodm9pZCAqKSlpb19tYm94X21zZzsKKworLypQTV9JVkEyR1JQU0VMX1BFUiA9IDB4QzA7Ki8KKwkJdGVtcCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJdGVtcCA9ICh0ZW1wICYgMHhGRkZGRkYzMCkgfCAweEMwOworCQl3cml0ZWwodGVtcCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCisvKlBNX01QVUdSUFNFTF9QRVIgJj0gMHhGRkZGRkYzRjsgKi8KKwkJdGVtcCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJdGVtcCA9ICh0ZW1wICYgMHhGRkZGRkYzRik7CisJCXdyaXRlbCh0ZW1wLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisvKkNNX1NMRUVQREVQX1BFUiB8PSAweDA0OyAqLworCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfYmFzZSArIDB4NDQpOworCQl0ZW1wID0gKHRlbXAgJiAweEZGRkZGRkZCKSB8IDB4MDQ7CisJCXdyaXRlbCh0ZW1wLCByZXNvdXJjZXMtPmR3X3Blcl9iYXNlICsgMHg0NCk7CisKKy8qQ01fQ0xLU1RDVFJMX0lWQTIgPSAweDAwMDAwMDAzIC1UbyBBbGxvdyBhdXRvbWF0aWMgdHJhbnNpdGlvbnMgKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKShPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8sCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCisJCS8qIExldCBEU1AgZ28gKi8KKwkJZGV2X2RiZyhicmlkZ2UsICIlcyBVbnJlc2V0XG4iLCBfX2Z1bmNfXyk7CisJCS8qIEVuYWJsZSBEU1AgTU1VIEludGVycnVwdHMgKi8KKwkJaHdfbW11X2V2ZW50X2VuYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwKKwkJCQkgICAgSFdfTU1VX0FMTF9JTlRFUlJVUFRTKTsKKwkJLyogcmVsZWFzZSB0aGUgUlNUMSwgRFNQIHN0YXJ0cyBleGVjdXRpbmcgbm93IC4uICovCisJCSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVAzNDMwX1JTVDFfSVZBMl9NQVNLLCAwLAorCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisKKwkJZGV2X2RiZyhicmlkZ2UsICJXYWl0aW5nIGZvciBTeW5jIEAgMHgleFxuIiwgZHdfc3luY19hZGRyKTsKKwkJZGV2X2RiZyhicmlkZ2UsICJEU1AgY19pbnQwMCBBZGRyZXNzID0gIDB4JXhcbiIsIGRzcF9hZGRyKTsKKwkJaWYgKGRzcF9kZWJ1ZykKKwkJCXdoaWxlIChfX3Jhd19yZWFkdyhkd19zeW5jX2FkZHIpKQorCQkJCTs7CisKKwkJLyogV2FpdCBmb3IgRFNQIHRvIGNsZWFyIHdvcmQgaW4gc2hhcmVkIG1lbW9yeSAqLworCQkvKiBSZWFkIHRoZSBMb2NhdGlvbiAqLworCQlpZiAoIXdhaXRfZm9yX3N0YXJ0KGRldl9jb250ZXh0LCBkd19zeW5jX2FkZHIpKQorCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKworCQkvKiBTdGFydCB3ZHQgKi8KKwkJZHNwX3dkdF9zbV9zZXQoKHZvaWQgKil1bF9zaG1fYmFzZSk7CisJCWRzcF93ZHRfZW5hYmxlKHRydWUpOworCisJCXN0YXR1cyA9IGRldl9nZXRfaW9fbWdyKGRldl9jb250ZXh0LT5oZGV2X29iaiwgJmhpb19tZ3IpOworCQlpZiAoaGlvX21ncikgeworCQkJaW9fc2hfbXNldHRpbmcoaGlvX21nciwgU0hNX09QUElORk8sIE5VTEwpOworCQkJLyogV3JpdGUgdGhlIHN5bmNocm9uaXphdGlvbiBiaXQgdG8gaW5kaWNhdGUgdGhlCisJCQkgKiBjb21wbGV0aW9uIG9mIE9QUCB0YWJsZSB1cGRhdGUgdG8gRFNQCisJCQkgKi8KKwkJCV9fcmF3X3dyaXRlbCgwWENBRkVDQUZFLCBkd19zeW5jX2FkZHIpOworCisJCQkvKiB1cGRhdGUgYm9hcmQgc3RhdGUgKi8KKwkJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfUlVOTklORzsKKwkJCS8qICh2b2lkKWNobmxzbV9lbmFibGVfaW50ZXJydXB0KGRldl9jb250ZXh0KTsgKi8KKwkJfSBlbHNlIHsKKwkJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfVU5LTk9XTjsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfc3RvcCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFB1dHMgRFNQIGluIHNlbGYgbG9vcC4KKyAqCisgKiAgUHJlY29uZGl0aW9ucyA6CisgKiAgYSkgTm9uZQorICovCitzdGF0aWMgaW50IGJyaWRnZV9icmRfc3RvcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXN0cnVjdCBwZ190YWJsZV9hdHRycyAqcHRfYXR0cnM7CisJdTMyIGRzcF9wd3Jfc3RhdGU7CisJaW50IGNsa19zdGF0dXM7CisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkJb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9TVE9QUEVEKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogYXMgcGVyIFRSTSwgaXQgaXMgYWR2aXNlZCB0byBmaXJzdCBkcml2ZSB0aGUgSVZBMiB0byAnU3RhbmRieScgbW9kZSwKKwkgKiBiZWZvcmUgdHVybmluZyBvZmYgdGhlIGNsb2Nrcy4uIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vCisJICogcGVuZGluZyBMMyBvciBvdGhlciB0cmFuc2FjdG9ucyBmcm9tIElWQTIgKi8KKwlkc3BfcHdyX3N0YXRlID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVFNUKSAmCisJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0s7CisJaWYgKGRzcF9wd3Jfc3RhdGUgIT0gUFdSRE1fUE9XRVJfT0ZGKSB7CisJCSgqcGRhdGEtPmRzcF9wcm1fcm13X2JpdHMpKE9NQVAzNDMwX1JTVDJfSVZBMl9NQVNLLCAwLAorCQkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9EU1BJRExFKTsKKwkJbWRlbGF5KDEwKTsKKworCQkvKiBJVkEyIGlzIG5vdCBpbiBPRkYgc3RhdGUgKi8KKwkJLyogU2V0IFBNX1BXU1RDVFJMX0lWQTIgIHRvIE9GRiAqLworCQkoKnBkYXRhLT5kc3BfcHJtX3Jtd19iaXRzKShPTUFQX1BPV0VSU1RBVEVTVF9NQVNLLAorCQkJUFdSRE1fUE9XRVJfT0ZGLCBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUE1fUFdTVENUUkwpOworCQkvKiBTZXQgdGhlIFNXIHN1cGVydmlzZWQgc3RhdGUgdHJhbnNpdGlvbiBmb3IgU2xlZXAgKi8KKwkJKCpwZGF0YS0+ZHNwX2NtX3dyaXRlKShPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfU0xFRVAsCisJCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCX0KKwl1ZGVsYXkoMTApOworCS8qIFJlbGVhc2UgdGhlIEV4dCBCYXNlIHZpcnR1YWwgQWRkcmVzcyBhcyB0aGUgbmV4dCBEU1AgUHJvZ3JhbQorCSAqIG1heSBoYXZlIGEgZGlmZmVyZW50IGxvYWQgYWRkcmVzcyAqLworCWlmIChkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIpCisJCWRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkciA9IDA7CisKKwlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gQlJEX1NUT1BQRUQ7CS8qIHVwZGF0ZSBib2FyZCBzdGF0ZSAqLworCisJZHNwX3dkdF9lbmFibGUoZmFsc2UpOworCisJLyogVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gY2xlYXIgdGhlIE1NVSBwYWdlIHRhYmxlcyBhcyB3ZWxsICovCisJaWYgKGRldl9jb250ZXh0LT5wdF9hdHRycykgeworCQlwdF9hdHRycyA9IGRldl9jb250ZXh0LT5wdF9hdHRyczsKKwkJbWVtc2V0KCh1OCAqKSBwdF9hdHRycy0+bDFfYmFzZV92YSwgMHgwMCwgcHRfYXR0cnMtPmwxX3NpemUpOworCQltZW1zZXQoKHU4ICopIHB0X2F0dHJzLT5sMl9iYXNlX3ZhLCAweDAwLCBwdF9hdHRycy0+bDJfc2l6ZSk7CisJCW1lbXNldCgodTggKikgcHRfYXR0cnMtPnBnX2luZm8sIDB4MDAsCisJCSAgICAgICAocHRfYXR0cnMtPmwyX251bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZV9pbmZvKSkpOworCX0KKwkvKiBEaXNhYmxlIHRoZSBtYWlsYm94IGludGVycnVwdHMgKi8KKwlpZiAoZGV2X2NvbnRleHQtPm1ib3gpIHsKKwkJb21hcF9tYm94X2Rpc2FibGVfaXJxKGRldl9jb250ZXh0LT5tYm94LCBJUlFfUlgpOworCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94KTsKKwkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOworCX0KKwkvKiBSZXNldCBJVkEyIGNsb2NrcyovCisJKCpwZGF0YS0+ZHNwX3BybV93cml0ZSkoT01BUDM0MzBfUlNUMV9JVkEyX01BU0sgfCBPTUFQMzQzMF9SU1QyX0lWQTJfTUFTSyB8CisJCQlPTUFQMzQzMF9SU1QzX0lWQTJfTUFTSywgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOworCisJY2xrX3N0YXR1cyA9IGRzcF9jbGtfZGlzYWJsZShEU1BfQ0xLX0lWQTIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3N0YXR1cyA9PT09PT09PQorICogICAgICBSZXR1cm5zIHRoZSBib2FyZCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9zdGF0dXMoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkJICAgIGludCAqYm9hcmRfc3RhdGUpCit7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwkqYm9hcmRfc3RhdGUgPSBkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlOworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfd3JpdGUgPT09PT09PT0KKyAqICAgICAgQ29waWVzIHRoZSBidWZmZXJzIHRvIERTUCBpbnRlcm5hbCBvciBleHRlcm5hbCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF93cml0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkJICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisKKwlpZiAoZHNwX2FkZHIgPCBkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCXJldHVybiBzdGF0dXM7CisJfQorCWlmICgoZHNwX2FkZHIgLSBkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCkgPAorCSAgICBkZXZfY29udGV4dC0+ZHdfaW50ZXJuYWxfc2l6ZSkgeworCQlzdGF0dXMgPSB3cml0ZV9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWZmLCBkc3BfYWRkciwKKwkJCQkJdWxfbnVtX2J5dGVzLCBtZW1fdHlwZSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gd3JpdGVfZXh0X2RzcF9kYXRhKGRldl9jb250ZXh0LCBob3N0X2J1ZmYsIGRzcF9hZGRyLAorCQkJCQkgICAgdWxfbnVtX2J5dGVzLCBtZW1fdHlwZSwgZmFsc2UpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Rldl9jcmVhdGUgPT09PT09PT0KKyAqICAgICAgQ3JlYXRlcyBhIGRyaXZlciBvYmplY3QuIFB1dHMgRFNQIGluIHNlbGYgbG9vcC4KKyAqLworc3RhdGljIGludCBicmlkZ2VfZGV2X2NyZWF0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0CisJCQkJCSoqZGV2X2NudHh0LAorCQkJCQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJCXN0cnVjdCBjZmdfaG9zdHJlcyAqY29uZmlnX3BhcmFtKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gTlVMTDsKKwlzMzIgZW50cnlfbmR4OworCXN0cnVjdCBjZmdfaG9zdHJlcyAqcmVzb3VyY2VzID0gY29uZmlnX3BhcmFtOworCXN0cnVjdCBwZ190YWJsZV9hdHRycyAqcHRfYXR0cnM7CisJdTMyIHBnX3RibF9wYTsKKwl1MzIgcGdfdGJsX3ZhOworCXUzMiBhbGlnbl9zaXplOworCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGRhdGEgc3RydWN0dXJlIHRvIGNvbnRhaW4gdGhlIGJyaWRnZSBkcml2ZXIKKwkgKiAgc3RhdGUsIHdoaWNoIGJlY29tZXMgdGhlIGNvbnRleHQgZm9yIGxhdGVyIGNhbGxzIGludG8gdGhpcyBkcml2ZXIgKi8KKwlkZXZfY29udGV4dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9jb250ZXh0KSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJZGV2X2NvbnRleHQtPmR3X2RzcF9zdGFydF9hZGQgPSAodTMyKSBPTUFQX0dFTV9CQVNFOworCWRldl9jb250ZXh0LT5kd19zZWxmX2xvb3AgPSAodTMyKSBOVUxMOworCWRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MgPSAwOworCWRldl9jb250ZXh0LT5kd19pbnRlcm5hbF9zaXplID0gT01BUF9EU1BfU0laRTsKKwkvKiAgQ2xlYXIgZGV2IGNvbnRleHQgTU1VIHRhYmxlIGVudHJpZXMuCisJICogIFRoZXNlIGdldCBzZXQgb24gYnJpZGdlX2lvX29uX2xvYWRlZCgpIGNhbGwgYWZ0ZXIgcHJvZ3JhbSBsb2FkZWQuICovCisJZm9yIChlbnRyeV9uZHggPSAwOyBlbnRyeV9uZHggPCBCUkRJT0NUTF9OVU1PRk1NVVRMQjsgZW50cnlfbmR4KyspIHsKKwkJZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbZW50cnlfbmR4XS51bF9ncHBfcGEgPQorCQkgICAgZGV2X2NvbnRleHQtPmF0bGJfZW50cnlbZW50cnlfbmR4XS51bF9kc3BfdmEgPSAwOworCX0KKwlkZXZfY29udGV4dC0+ZHdfZHNwX2Jhc2VfYWRkciA9ICh1MzIpIE1FTV9MSU5FQVJfQUREUkVTUygodm9pZCAqKQorCQkJCQkJCQkgKGNvbmZpZ19wYXJhbS0+CisJCQkJCQkJCSAgZHdfbWVtX2Jhc2UKKwkJCQkJCQkJICBbM10pLAorCQkJCQkJCQkgY29uZmlnX3BhcmFtLT4KKwkJCQkJCQkJIGR3X21lbV9sZW5ndGgKKwkJCQkJCQkJIFszXSk7CisJaWYgKCFkZXZfY29udGV4dC0+ZHdfZHNwX2Jhc2VfYWRkcikKKwkJc3RhdHVzID0gLUVQRVJNOworCisJcHRfYXR0cnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGdfdGFibGVfYXR0cnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHRfYXR0cnMgIT0gTlVMTCkgeworCQkvKiBBc3N1bWluZyB0aGF0IHdlIHVzZSBvbmx5IERTUCdzIG1lbW9yeSBtYXAKKwkJICogdW50aWwgMHg0MDAwOjAwMDAgLCB3ZSB3b3VsZCBuZWVkIG9ubHkgMTAyNAorCQkgKiBMMSBlbnRpZXMgaS5lIEwxIHNpemUgPSA0SyAqLworCQlwdF9hdHRycy0+bDFfc2l6ZSA9IDB4MTAwMDsKKwkJYWxpZ25fc2l6ZSA9IHB0X2F0dHJzLT5sMV9zaXplOworCQkvKiBBbGlnbiBzaXplcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcG93ZXIgb2YgMiAqLworCQkvKiB3ZSBsaWtlIHRvIGdldCBhbGlnbmVkIG9uIEwxIHRhYmxlIHNpemUgKi8KKwkJcGdfdGJsX3ZhID0gKHUzMikgbWVtX2FsbG9jX3BoeXNfbWVtKHB0X2F0dHJzLT5sMV9zaXplLAorCQkJCQkJICAgICBhbGlnbl9zaXplLCAmcGdfdGJsX3BhKTsKKworCQkvKiBDaGVjayBpZiB0aGUgUEEgaXMgYWxpZ25lZCBmb3IgdXMgKi8KKwkJaWYgKChwZ190YmxfcGEpICYgKGFsaWduX3NpemUgLSAxKSkgeworCQkJLyogUEEgbm90IGFsaWduZWQgdG8gcGFnZSB0YWJsZSBzaXplICwKKwkJCSAqIHRyeSB3aXRoIG1vcmUgYWxsb2NhdGlvbiBhbmQgYWxpZ24gKi8KKwkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopcGdfdGJsX3ZhLCBwZ190YmxfcGEsCisJCQkJCSAgcHRfYXR0cnMtPmwxX3NpemUpOworCQkJLyogd2UgbGlrZSB0byBnZXQgYWxpZ25lZCBvbiBMMSB0YWJsZSBzaXplICovCisJCQlwZ190YmxfdmEgPQorCQkJICAgICh1MzIpIG1lbV9hbGxvY19waHlzX21lbSgocHRfYXR0cnMtPmwxX3NpemUpICogMiwKKwkJCQkJCSAgICAgYWxpZ25fc2l6ZSwgJnBnX3RibF9wYSk7CisJCQkvKiBXZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYWxpZ25lZCB0YWJsZSBub3cgKi8KKwkJCXB0X2F0dHJzLT5sMV90YmxfYWxsb2NfcGEgPSBwZ190YmxfcGE7CisJCQlwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhID0gcGdfdGJsX3ZhOworCQkJcHRfYXR0cnMtPmwxX3RibF9hbGxvY19zeiA9IHB0X2F0dHJzLT5sMV9zaXplICogMjsKKwkJCS8qIEFsaWduIHRoZSBQQSB0byB0aGUgbmV4dCAnYWxpZ24nICBib3VuZGFyeSAqLworCQkJcHRfYXR0cnMtPmwxX2Jhc2VfcGEgPQorCQkJICAgICgocGdfdGJsX3BhKSArCisJCQkgICAgIChhbGlnbl9zaXplIC0gMSkpICYgKH4oYWxpZ25fc2l6ZSAtIDEpKTsKKwkJCXB0X2F0dHJzLT5sMV9iYXNlX3ZhID0KKwkJCSAgICBwZ190YmxfdmEgKyAocHRfYXR0cnMtPmwxX2Jhc2VfcGEgLSBwZ190YmxfcGEpOworCQl9IGVsc2UgeworCQkJLyogV2UgZ290IGFsaWduZWQgUEEsIGNvb2wgKi8KKwkJCXB0X2F0dHJzLT5sMV90YmxfYWxsb2NfcGEgPSBwZ190YmxfcGE7CisJCQlwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhID0gcGdfdGJsX3ZhOworCQkJcHRfYXR0cnMtPmwxX3RibF9hbGxvY19zeiA9IHB0X2F0dHJzLT5sMV9zaXplOworCQkJcHRfYXR0cnMtPmwxX2Jhc2VfcGEgPSBwZ190YmxfcGE7CisJCQlwdF9hdHRycy0+bDFfYmFzZV92YSA9IHBnX3RibF92YTsKKwkJfQorCQlpZiAocHRfYXR0cnMtPmwxX2Jhc2VfdmEpCisJCQltZW1zZXQoKHU4ICopIHB0X2F0dHJzLT5sMV9iYXNlX3ZhLCAweDAwLAorCQkJICAgICAgIHB0X2F0dHJzLT5sMV9zaXplKTsKKworCQkvKiBudW1iZXIgb2YgTDIgcGFnZSB0YWJsZXMgPSBETU0gcG9vbCB1c2VkICsgU0hNTUVNICtFWFRNRU0gKworCQkgKiBMNCBwYWdlcyAqLworCQlwdF9hdHRycy0+bDJfbnVtX3BhZ2VzID0gKChETU1QT09MU0laRSA+PiAyMCkgKyA2KTsKKwkJcHRfYXR0cnMtPmwyX3NpemUgPSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAqCisJCSAgICBwdF9hdHRycy0+bDJfbnVtX3BhZ2VzOworCQlhbGlnbl9zaXplID0gNDsJLyogTWFrZSBpdCB1MzIgYWxpZ25lZCAqLworCQkvKiB3ZSBsaWtlIHRvIGdldCBhbGlnbmVkIG9uIEwxIHRhYmxlIHNpemUgKi8KKwkJcGdfdGJsX3ZhID0gKHUzMikgbWVtX2FsbG9jX3BoeXNfbWVtKHB0X2F0dHJzLT5sMl9zaXplLAorCQkJCQkJICAgICBhbGlnbl9zaXplLCAmcGdfdGJsX3BhKTsKKwkJcHRfYXR0cnMtPmwyX3RibF9hbGxvY19wYSA9IHBnX3RibF9wYTsKKwkJcHRfYXR0cnMtPmwyX3RibF9hbGxvY192YSA9IHBnX3RibF92YTsKKwkJcHRfYXR0cnMtPmwyX3RibF9hbGxvY19zeiA9IHB0X2F0dHJzLT5sMl9zaXplOworCQlwdF9hdHRycy0+bDJfYmFzZV9wYSA9IHBnX3RibF9wYTsKKwkJcHRfYXR0cnMtPmwyX2Jhc2VfdmEgPSBwZ190YmxfdmE7CisKKwkJaWYgKHB0X2F0dHJzLT5sMl9iYXNlX3ZhKQorCQkJbWVtc2V0KCh1OCAqKSBwdF9hdHRycy0+bDJfYmFzZV92YSwgMHgwMCwKKwkJCSAgICAgICBwdF9hdHRycy0+bDJfc2l6ZSk7CisKKwkJcHRfYXR0cnMtPnBnX2luZm8gPSBremFsbG9jKHB0X2F0dHJzLT5sMl9udW1fcGFnZXMgKgorCQkJCQlzaXplb2Yoc3RydWN0IHBhZ2VfaW5mbyksIEdGUF9LRVJORUwpOworCQlkZXZfZGJnKGJyaWRnZSwKKwkJCSJMMSBwYSAleCwgdmEgJXgsIHNpemUgJXhcbiBMMiBwYSAleCwgdmEgIgorCQkJIiV4LCBzaXplICV4XG4iLCBwdF9hdHRycy0+bDFfYmFzZV9wYSwKKwkJCXB0X2F0dHJzLT5sMV9iYXNlX3ZhLCBwdF9hdHRycy0+bDFfc2l6ZSwKKwkJCXB0X2F0dHJzLT5sMl9iYXNlX3BhLCBwdF9hdHRycy0+bDJfYmFzZV92YSwKKwkJCXB0X2F0dHJzLT5sMl9zaXplKTsKKwkJZGV2X2RiZyhicmlkZ2UsICJwdF9hdHRycyAlcCBMMiBOdW1QYWdlcyAleCBwZ19pbmZvICVwXG4iLAorCQkJcHRfYXR0cnMsIHB0X2F0dHJzLT5sMl9udW1fcGFnZXMsIHB0X2F0dHJzLT5wZ19pbmZvKTsKKwl9CisJaWYgKChwdF9hdHRycyAhPSBOVUxMKSAmJiAocHRfYXR0cnMtPmwxX2Jhc2VfdmEgIT0gMCkgJiYKKwkgICAgKHB0X2F0dHJzLT5sMl9iYXNlX3ZhICE9IDApICYmIChwdF9hdHRycy0+cGdfaW5mbyAhPSBOVUxMKSkKKwkJZGV2X2NvbnRleHQtPnB0X2F0dHJzID0gcHRfYXR0cnM7CisJZWxzZQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJnB0X2F0dHJzLT5wZ19sb2NrKTsKKwkJZGV2X2NvbnRleHQtPnRjX3dvcmRfc3dhcF9vbiA9IGRydl9kYXRhcC0+dGNfd29yZHN3YXBvbjsKKworCQkvKiBTZXQgdGhlIENsb2NrIERpdmlzb3IgZm9yIHRoZSBEU1AgbW9kdWxlICovCisJCXVkZWxheSg1KTsKKwkJLyogTU1VIGFkZHJlc3MgaXMgb2J0YWluZWQgZnJvbSB0aGUgaG9zdAorCQkgKiByZXNvdXJjZXMgc3RydWN0ICovCisJCWRldl9jb250ZXh0LT5kd19kc3BfbW11X2Jhc2UgPSByZXNvdXJjZXMtPmR3X2RtbXVfYmFzZTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJZGV2X2NvbnRleHQtPmhkZXZfb2JqID0gaGRldl9vYmo7CisJCS8qIFN0b3JlIGN1cnJlbnQgYm9hcmQgc3RhdGUuICovCisJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfVU5LTk9XTjsKKwkJZGV2X2NvbnRleHQtPnJlc291cmNlcyA9IHJlc291cmNlczsKKwkJZHNwX2Nsa19lbmFibGUoRFNQX0NMS19JVkEyKTsKKwkJYnJpZGdlX2JyZF9zdG9wKGRldl9jb250ZXh0KTsKKwkJLyogUmV0dXJuIHB0ciB0byBvdXIgZGV2aWNlIHN0YXRlIHRvIHRoZSBEU1AgQVBJIGZvciBzdG9yYWdlICovCisJCSpkZXZfY250eHQgPSBkZXZfY29udGV4dDsKKwl9IGVsc2UgeworCQlpZiAocHRfYXR0cnMgIT0gTlVMTCkgeworCQkJa2ZyZWUocHRfYXR0cnMtPnBnX2luZm8pOworCisJCQlpZiAocHRfYXR0cnMtPmwyX3RibF9hbGxvY192YSkgeworCQkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopCisJCQkJCQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2NfdmEsCisJCQkJCQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2NfcGEsCisJCQkJCQkgIHB0X2F0dHJzLT5sMl90YmxfYWxsb2Nfc3opOworCQkJfQorCQkJaWYgKHB0X2F0dHJzLT5sMV90YmxfYWxsb2NfdmEpIHsKKwkJCQltZW1fZnJlZV9waHlzX21lbSgodm9pZCAqKQorCQkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhLAorCQkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3BhLAorCQkJCQkJICBwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3N6KTsKKwkJCX0KKwkJfQorCQlrZnJlZShwdF9hdHRycyk7CisJCWtmcmVlKGRldl9jb250ZXh0KTsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9kZXZfY3RybCA9PT09PT09PQorICogICAgICBSZWNlaXZlcyBkZXZpY2Ugc3BlY2lmaWMgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2Rldl9jdHJsKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgdTMyIGR3X2NtZCwgdm9pZCAqcGFyZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9pb2N0bF9leHRwcm9jICpwYV9leHRfcHJvYyA9CisJCQkJCShzdHJ1Y3QgYnJpZGdlX2lvY3RsX2V4dHByb2MgKilwYXJnczsKKwlzMzIgbmR4OworCisJc3dpdGNoIChkd19jbWQpIHsKKwljYXNlIEJSRElPQ1RMX0NITkxSRUFEOgorCQlicmVhazsKKwljYXNlIEJSRElPQ1RMX0NITkxXUklURToKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9TRVRNTVVDT05GSUc6CisJCS8qIHN0b3JlIGF3YXkgZHNwLW1tdSBzZXR1cCB2YWx1ZXMgZm9yIGxhdGVyIHVzZSAqLworCQlmb3IgKG5keCA9IDA7IG5keCA8IEJSRElPQ1RMX05VTU9GTU1VVExCOyBuZHgrKywgcGFfZXh0X3Byb2MrKykKKwkJCWRldl9jb250ZXh0LT5hdGxiX2VudHJ5W25keF0gPSAqcGFfZXh0X3Byb2M7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfREVFUFNMRUVQOgorCWNhc2UgQlJESU9DVExfRU1FUkdFTkNZU0xFRVA6CisJCS8qIEN1cnJlbnRseSBvbmx5IERTUCBJZGxlIGlzIHN1cHBvcnRlZCBOZWVkIHRvIHVwZGF0ZSBmb3IKKwkJICogbGF0ZXIgcmVsZWFzZXMgKi8KKwkJc3RhdHVzID0gc2xlZXBfZHNwKGRldl9jb250ZXh0LCBQV1JfREVFUFNMRUVQLCBwYXJncyk7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfV0FLRVVQOgorCQlzdGF0dXMgPSB3YWtlX2RzcChkZXZfY29udGV4dCwgcGFyZ3MpOworCQlicmVhazsKKwljYXNlIEJSRElPQ1RMX0NMS19DVFJMOgorCQlzdGF0dXMgPSAwOworCQkvKiBMb29raW5nIEZvciBCYXNlcG9ydCBGaXggZm9yIENsb2NrcyAqLworCQlzdGF0dXMgPSBkc3BfcGVyaXBoZXJhbF9jbGtfY3RybChkZXZfY29udGV4dCwgcGFyZ3MpOworCQlicmVhazsKKwljYXNlIEJSRElPQ1RMX1BXUl9ISUJFUk5BVEU6CisJCXN0YXR1cyA9IGhhbmRsZV9oaWJlcm5hdGlvbl9mcm9tX2RzcChkZXZfY29udGV4dCk7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfUFJFU0NBTEVfTk9USUZZOgorCQlzdGF0dXMgPSBwcmVfc2NhbGVfZHNwKGRldl9jb250ZXh0LCBwYXJncyk7CisJCWJyZWFrOworCWNhc2UgQlJESU9DVExfUE9TVFNDQUxFX05PVElGWToKKwkJc3RhdHVzID0gcG9zdF9zY2FsZV9kc3AoZGV2X2NvbnRleHQsIHBhcmdzKTsKKwkJYnJlYWs7CisJY2FzZSBCUkRJT0NUTF9DT05TVFJBSU5UX1JFUVVFU1Q6CisJCXN0YXR1cyA9IGhhbmRsZV9jb25zdHJhaW50c19zZXQoZGV2X2NvbnRleHQsIHBhcmdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVQRVJNOworCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2Rlc3Ryb3kgPT09PT09PT0KKyAqICAgICAgRGVzdHJveXMgdGhlIGRyaXZlciBvYmplY3QuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2Rldl9kZXN0cm95KHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KQoreworCXN0cnVjdCBwZ190YWJsZV9hdHRycyAqcHRfYXR0cnM7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqKQorCSAgICBkZXZfY3R4dDsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKmhvc3RfcmVzOworCXUzMiBzaG1fc2l6ZTsKKwlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2UpOworCisJLyogSXQgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlmICghZGV2X2N0eHQpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogZmlyc3QgcHV0IHRoZSBkZXZpY2UgdG8gc3RvcCBzdGF0ZSAqLworCWJyaWRnZV9icmRfc3RvcChkZXZfY29udGV4dCk7CisJaWYgKGRldl9jb250ZXh0LT5wdF9hdHRycykgeworCQlwdF9hdHRycyA9IGRldl9jb250ZXh0LT5wdF9hdHRyczsKKwkJa2ZyZWUocHRfYXR0cnMtPnBnX2luZm8pOworCisJCWlmIChwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3ZhKSB7CisJCQltZW1fZnJlZV9waHlzX21lbSgodm9pZCAqKXB0X2F0dHJzLT5sMl90YmxfYWxsb2NfdmEsCisJCQkJCSAgcHRfYXR0cnMtPmwyX3RibF9hbGxvY19wYSwKKwkJCQkJICBwdF9hdHRycy0+bDJfdGJsX2FsbG9jX3N6KTsKKwkJfQorCQlpZiAocHRfYXR0cnMtPmwxX3RibF9hbGxvY192YSkgeworCQkJbWVtX2ZyZWVfcGh5c19tZW0oKHZvaWQgKilwdF9hdHRycy0+bDFfdGJsX2FsbG9jX3ZhLAorCQkJCQkgIHB0X2F0dHJzLT5sMV90YmxfYWxsb2NfcGEsCisJCQkJCSAgcHRfYXR0cnMtPmwxX3RibF9hbGxvY19zeik7CisJCX0KKwkJa2ZyZWUocHRfYXR0cnMpOworCisJfQorCisJaWYgKGRldl9jb250ZXh0LT5yZXNvdXJjZXMpIHsKKwkJaG9zdF9yZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOworCQlzaG1fc2l6ZSA9IGRydl9kYXRhcC0+c2htX3NpemU7CisJCWlmIChzaG1fc2l6ZSA+PSAweDEwMDAwKSB7CisJCQlpZiAoKGhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSkgJiYKKwkJCSAgICAoaG9zdF9yZXMtPmR3X21lbV9waHlzWzFdKSkgeworCQkJCW1lbV9mcmVlX3BoeXNfbWVtKCh2b2lkICopCisJCQkJCQkgIGhvc3RfcmVzLT5kd19tZW1fYmFzZQorCQkJCQkJICBbMV0sCisJCQkJCQkgIGhvc3RfcmVzLT5kd19tZW1fcGh5cworCQkJCQkJICBbMV0sIHNobV9zaXplKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEVycm9yIGdldHRpbmcgc2htIHNpemUgIgorCQkJCSJmcm9tIHJlZ2lzdHJ5OiAleC4gTm90IGNhbGxpbmcgIgorCQkJCSJtZW1fZnJlZV9waHlzX21lbVxuIiwgX19mdW5jX18sCisJCQkJc3RhdHVzKTsKKwkJfQorCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0gPSAwOworCQlob3N0X3Jlcy0+ZHdfbWVtX3BoeXNbMV0gPSAwOworCisJCWlmIChob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMF0pCisJCQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPmR3X21lbV9iYXNlWzBdKTsKKwkJaWYgKGhvc3RfcmVzLT5kd19tZW1fYmFzZVsyXSkKKwkJCWlvdW5tYXAoKHZvaWQgKilob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMl0pOworCQlpZiAoaG9zdF9yZXMtPmR3X21lbV9iYXNlWzNdKQorCQkJaW91bm1hcCgodm9pZCAqKWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbNF0pCisJCQlpb3VubWFwKCh2b2lkICopaG9zdF9yZXMtPmR3X21lbV9iYXNlWzRdKTsKKwkJaWYgKGhvc3RfcmVzLT5kd19kbW11X2Jhc2UpCisJCQlpb3VubWFwKGhvc3RfcmVzLT5kd19kbW11X2Jhc2UpOworCQlpZiAoaG9zdF9yZXMtPmR3X3Blcl9iYXNlKQorCQkJaW91bm1hcChob3N0X3Jlcy0+ZHdfcGVyX2Jhc2UpOworCQlpZiAoaG9zdF9yZXMtPmR3X3Blcl9wbV9iYXNlKQorCQkJaW91bm1hcCgodm9pZCAqKWhvc3RfcmVzLT5kd19wZXJfcG1fYmFzZSk7CisJCWlmIChob3N0X3Jlcy0+ZHdfY29yZV9wbV9iYXNlKQorCQkJaW91bm1hcCgodm9pZCAqKWhvc3RfcmVzLT5kd19jb3JlX3BtX2Jhc2UpOworCQlpZiAoaG9zdF9yZXMtPmR3X3N5c19jdHJsX2Jhc2UpCisJCQlpb3VubWFwKGhvc3RfcmVzLT5kd19zeXNfY3RybF9iYXNlKTsKKworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMF0gPSAodTMyKSBOVUxMOworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMl0gPSAodTMyKSBOVUxMOworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbM10gPSAodTMyKSBOVUxMOworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbNF0gPSAodTMyKSBOVUxMOworCQlob3N0X3Jlcy0+ZHdfZG1tdV9iYXNlID0gTlVMTDsKKwkJaG9zdF9yZXMtPmR3X3N5c19jdHJsX2Jhc2UgPSBOVUxMOworCisJCWtmcmVlKGhvc3RfcmVzKTsKKwl9CisKKwkvKiBGcmVlIHRoZSBkcml2ZXIncyBkZXZpY2UgY29udGV4dDogKi8KKwlrZnJlZShkcnZfZGF0YXAtPmJhc2VfaW1nKTsKKwlrZnJlZShkcnZfZGF0YXApOworCWRldl9zZXRfZHJ2ZGF0YShicmlkZ2UsIE5VTEwpOworCWtmcmVlKCh2b2lkICopZGV2X2N0eHQpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fY29weShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICB1MzIgZHNwX2Rlc3RfYWRkciwgdTMyIGRzcF9zcmNfYWRkciwKKwkJCQkgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHNyY19hZGRyID0gZHNwX3NyY19hZGRyOworCXUzMiBkZXN0X2FkZHIgPSBkc3BfZGVzdF9hZGRyOworCXUzMiBjb3B5X2J5dGVzID0gMDsKKwl1MzIgdG90YWxfYnl0ZXMgPSB1bF9udW1fYnl0ZXM7CisJdTggaG9zdF9idWZbQlVGRkVSU0laRV07CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwl3aGlsZSAodG90YWxfYnl0ZXMgPiAwICYmICFzdGF0dXMpIHsKKwkJY29weV9ieXRlcyA9CisJCSAgICB0b3RhbF9ieXRlcyA+IEJVRkZFUlNJWkUgPyBCVUZGRVJTSVpFIDogdG90YWxfYnl0ZXM7CisJCS8qIFJlYWQgZnJvbSBFeHRlcm5hbCBtZW1vcnkgKi8KKwkJc3RhdHVzID0gcmVhZF9leHRfZHNwX2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmLCBzcmNfYWRkciwKKwkJCQkJICAgY29weV9ieXRlcywgbWVtX3R5cGUpOworCQlpZiAoIXN0YXR1cykgeworCQkJaWYgKGRlc3RfYWRkciA8IChkZXZfY29udGV4dC0+ZHdfZHNwX3N0YXJ0X2FkZCArCisJCQkJCSBkZXZfY29udGV4dC0+ZHdfaW50ZXJuYWxfc2l6ZSkpIHsKKwkJCQkvKiBXcml0ZSB0byBJbnRlcm5hbCBtZW1vcnkgKi8KKwkJCQlzdGF0dXMgPSB3cml0ZV9kc3BfZGF0YShkZXZfY3R4dCwgaG9zdF9idWYsCisJCQkJCQkJZGVzdF9hZGRyLCBjb3B5X2J5dGVzLAorCQkJCQkJCW1lbV90eXBlKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogV3JpdGUgdG8gRXh0ZXJuYWwgbWVtb3J5ICovCisJCQkJc3RhdHVzID0KKwkJCQkgICAgd3JpdGVfZXh0X2RzcF9kYXRhKGRldl9jdHh0LCBob3N0X2J1ZiwKKwkJCQkJCSAgICAgICBkZXN0X2FkZHIsIGNvcHlfYnl0ZXMsCisJCQkJCQkgICAgICAgbWVtX3R5cGUsIGZhbHNlKTsKKwkJCX0KKwkJfQorCQl0b3RhbF9ieXRlcyAtPSBjb3B5X2J5dGVzOworCQlzcmNfYWRkciArPSBjb3B5X2J5dGVzOworCQlkZXN0X2FkZHIgKz0gY29weV9ieXRlczsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogTWVtIFdyaXRlIGRvZXMgbm90IGhhbHQgdGhlIERTUCB0byB3cml0ZSB1bmxpa2UgYnJpZGdlX2JyZF93cml0ZSAqLworc3RhdGljIGludCBicmlkZ2VfYnJkX21lbV93cml0ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwl1MzIgdWxfcmVtYWluX2J5dGVzID0gMDsKKwl1MzIgdWxfYnl0ZXMgPSAwOworCXVsX3JlbWFpbl9ieXRlcyA9IHVsX251bV9ieXRlczsKKwl3aGlsZSAodWxfcmVtYWluX2J5dGVzID4gMCAmJiAhc3RhdHVzKSB7CisJCXVsX2J5dGVzID0KKwkJICAgIHVsX3JlbWFpbl9ieXRlcyA+IEJVRkZFUlNJWkUgPyBCVUZGRVJTSVpFIDogdWxfcmVtYWluX2J5dGVzOworCQlpZiAoZHNwX2FkZHIgPCAoZGV2X2NvbnRleHQtPmR3X2RzcF9zdGFydF9hZGQgKworCQkJCSBkZXZfY29udGV4dC0+ZHdfaW50ZXJuYWxfc2l6ZSkpIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgd3JpdGVfZHNwX2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmZiwgZHNwX2FkZHIsCisJCQkJCSAgIHVsX2J5dGVzLCBtZW1fdHlwZSk7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSB3cml0ZV9leHRfZHNwX2RhdGEoZGV2X2N0eHQsIGhvc3RfYnVmZiwKKwkJCQkJCSAgICBkc3BfYWRkciwgdWxfYnl0ZXMsCisJCQkJCQkgICAgbWVtX3R5cGUsIHRydWUpOworCQl9CisJCXVsX3JlbWFpbl9ieXRlcyAtPSB1bF9ieXRlczsKKwkJZHNwX2FkZHIgKz0gdWxfYnl0ZXM7CisJCWhvc3RfYnVmZiA9IGhvc3RfYnVmZiArIHVsX2J5dGVzOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX21hcCA9PT09PT09PQorICogICAgICBUaGlzIGZ1bmN0aW9uIG1hcHMgTVBVIGJ1ZmZlciB0byB0aGUgRFNQIGFkZHJlc3Mgc3BhY2UuIEl0IHBlcmZvcm1zCisgKiAgbGluZWFyIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gaWYgcmVxdWlyZWQuIEl0IHRyYW5zbGF0ZXMgZWFjaAorICogIHBhZ2Ugc2luY2UgbGluZWFyIGFkZHJlc3NlcyBjYW4gYmUgcGh5c2ljYWxseSBub24tY29udGlndW91cworICogIEFsbCBhZGRyZXNzICYgc2l6ZSBhcmd1bWVudHMgYXJlIGFzc3VtZWQgdG8gYmUgcGFnZSBhbGlnbmVkIChpbiBwcm9jLmMpCisgKgorICogIFRPRE86IERpc2FibGUgTU1VIHdoaWxlIHVwZGF0aW5nIHRoZSBwYWdlIHRhYmxlcyAoYnV0IHRoYXQnbGwgc3RhbGwgRFNQKQorICovCitzdGF0aWMgaW50IGJyaWRnZV9icmRfbWVtX21hcChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgIHUzMiB1bF9tcHVfYWRkciwgdTMyIHZpcnRfYWRkciwKKwkJCQkgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiB1bF9tYXBfYXR0ciwKKwkJCQkgIHN0cnVjdCBwYWdlICoqbWFwcGVkX3BhZ2VzKQoreworCXUzMiBhdHRyczsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgaHdfYXR0cnM7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1MzIgd3JpdGUgPSAwOworCXUzMiBudW1fdXNyX3BncyA9IDA7CisJc3RydWN0IHBhZ2UgKm1hcHBlZF9wYWdlLCAqcGc7CisJczMyIHBnX251bTsKKwl1MzIgdmEgPSB2aXJ0X2FkZHI7CisJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyX3Rhc2sgPSBjdXJyZW50OworCXUzMiBwZ19pID0gMDsKKwl1MzIgbXB1X2FkZHIsIHBhOworCisJZGV2X2RiZyhicmlkZ2UsCisJCSIlcyBoRGV2Q3R4dCAlcCwgcGEgJXgsIHZhICV4LCBzaXplICV4LCB1bF9tYXBfYXR0ciAleFxuIiwKKwkJX19mdW5jX18sIGRldl9jdHh0LCB1bF9tcHVfYWRkciwgdmlydF9hZGRyLCB1bF9udW1fYnl0ZXMsCisJCXVsX21hcF9hdHRyKTsKKwlpZiAodWxfbnVtX2J5dGVzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVsX21hcF9hdHRyICYgRFNQX01BUF9ESVJfTUFTSykgeworCQlhdHRycyA9IHVsX21hcF9hdHRyOworCX0gZWxzZSB7CisJCS8qIEFzc2lnbiBkZWZhdWx0IGF0dHJpYnV0ZXMgKi8KKwkJYXR0cnMgPSB1bF9tYXBfYXR0ciB8IChEU1BfTUFQVklSVFVBTEFERFIgfCBEU1BfTUFQRUxFTVNJWkUxNik7CisJfQorCS8qIFRha2UgbWFwcGluZyBwcm9wZXJ0aWVzICovCisJaWYgKGF0dHJzICYgRFNQX01BUEJJR0VORElBTikKKwkJaHdfYXR0cnMuZW5kaWFuaXNtID0gSFdfQklHX0VORElBTjsKKwllbHNlCisJCWh3X2F0dHJzLmVuZGlhbmlzbSA9IEhXX0xJVFRMRV9FTkRJQU47CisKKwlod19hdHRycy5taXhlZF9zaXplID0gKGVudW0gaHdfbW11X21peGVkX3NpemVfdCkKKwkgICAgKChhdHRycyAmIERTUF9NQVBNSVhFREVMRU1TSVpFKSA+PiAyKTsKKwkvKiBJZ25vcmUgZWxlbWVudF9zaXplIGlmIG1peGVkX3NpemUgaXMgZW5hYmxlZCAqLworCWlmIChod19hdHRycy5taXhlZF9zaXplID09IDApIHsKKwkJaWYgKGF0dHJzICYgRFNQX01BUEVMRU1TSVpFOCkgeworCQkJLyogU2l6ZSBpcyA4IGJpdCAqLworCQkJaHdfYXR0cnMuZWxlbWVudF9zaXplID0gSFdfRUxFTV9TSVpFOEJJVDsKKwkJfSBlbHNlIGlmIChhdHRycyAmIERTUF9NQVBFTEVNU0laRTE2KSB7CisJCQkvKiBTaXplIGlzIDE2IGJpdCAqLworCQkJaHdfYXR0cnMuZWxlbWVudF9zaXplID0gSFdfRUxFTV9TSVpFMTZCSVQ7CisJCX0gZWxzZSBpZiAoYXR0cnMgJiBEU1BfTUFQRUxFTVNJWkUzMikgeworCQkJLyogU2l6ZSBpcyAzMiBiaXQgKi8KKwkJCWh3X2F0dHJzLmVsZW1lbnRfc2l6ZSA9IEhXX0VMRU1fU0laRTMyQklUOworCQl9IGVsc2UgaWYgKGF0dHJzICYgRFNQX01BUEVMRU1TSVpFNjQpIHsKKwkJCS8qIFNpemUgaXMgNjQgYml0ICovCisJCQlod19hdHRycy5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkU2NEJJVDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBNaXhlZHNpemUgaXNuJ3QgZW5hYmxlZCwgc28gc2l6ZSBjYW4ndCBiZQorCQkJICogemVybyBoZXJlCisJCQkgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWlmIChhdHRycyAmIERTUF9NQVBET05PVExPQ0spCisJCWh3X2F0dHJzLmRvbm90bG9ja21wdXBhZ2UgPSAxOworCWVsc2UKKwkJaHdfYXR0cnMuZG9ub3Rsb2NrbXB1cGFnZSA9IDA7CisKKwlpZiAoYXR0cnMgJiBEU1BfTUFQVk1BTExPQ0FERFIpIHsKKwkJcmV0dXJuIG1lbV9tYXBfdm1hbGxvYyhkZXZfY3R4dCwgdWxfbXB1X2FkZHIsIHZpcnRfYWRkciwKKwkJCQkgICAgICAgdWxfbnVtX2J5dGVzLCAmaHdfYXR0cnMpOworCX0KKwkvKgorCSAqIERvIE9TLXNwZWNpZmljIHVzZXItdmEgdG8gcGEgdHJhbnNsYXRpb24uCisJICogQ29tYmluZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgcmVnaW9ucyB0byByZWR1Y2UgVExCcy4KKwkgKiBQYXNzIHRoZSB0cmFuc2xhdGVkIHBhIHRvIHB0ZV91cGRhdGUuCisJICovCisJaWYgKChhdHRycyAmIERTUF9NQVBQSFlTSUNBTEFERFIpKSB7CisJCXN0YXR1cyA9IHB0ZV91cGRhdGUoZGV2X2NvbnRleHQsIHVsX21wdV9hZGRyLCB2aXJ0X2FkZHIsCisJCQkJICAgIHVsX251bV9ieXRlcywgJmh3X2F0dHJzKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJLyoKKwkgKiBJbXBvcnRhbnQgTm90ZTogdWxfbXB1X2FkZHIgaXMgbWFwcGVkIGZyb20gdXNlciBhcHBsaWNhdGlvbiBwcm9jZXNzCisJICogdG8gY3VycmVudCBwcm9jZXNzIC0gaXQgbXVzdCBsaWUgY29tcGxldGVseSB3aXRoaW4gdGhlIGN1cnJlbnQKKwkgKiB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHNwYWNlIGluIG9yZGVyIHRvIGJlIG9mIHVzZSB0byB1cyBoZXJlIQorCSAqLworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl2bWEgPSBmaW5kX3ZtYShtbSwgdWxfbXB1X2FkZHIpOworCWlmICh2bWEpCisJCWRldl9kYmcoYnJpZGdlLAorCQkJIlZNQWZvciBVc2VyQnVmOiB1bF9tcHVfYWRkcj0leCwgdWxfbnVtX2J5dGVzPSV4LCAiCisJCQkidm1fc3RhcnQ9JWx4LCB2bV9lbmQ9JWx4LCB2bV9mbGFncz0lbHhcbiIsIHVsX21wdV9hZGRyLAorCQkJdWxfbnVtX2J5dGVzLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCXZtYS0+dm1fZmxhZ3MpOworCisJLyoKKwkgKiBJdCBpcyBvYnNlcnZlZCB0aGF0IHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgdGhlIHVzZXIgYnVmZmVyIGlzCisJICogc3ByZWFkIGFjcm9zcyBzZXZlcmFsIFZNQXMuIFNvIGxvb3AgdGhyb3VnaCBhbmQgY2hlY2sgaWYgdGhlIGVudGlyZQorCSAqIHVzZXIgYnVmZmVyIGlzIGNvdmVyZWQKKwkgKi8KKwl3aGlsZSAoKHZtYSkgJiYgKHVsX21wdV9hZGRyICsgdWxfbnVtX2J5dGVzID4gdm1hLT52bV9lbmQpKSB7CisJCS8qIGp1bXAgdG8gdGhlIG5leHQgVk1BIHJlZ2lvbiAqLworCQl2bWEgPSBmaW5kX3ZtYShtbSwgdm1hLT52bV9lbmQgKyAxKTsKKwkJZGV2X2RiZyhicmlkZ2UsCisJCQkiVk1BIGZvciBVc2VyQnVmIHVsX21wdV9hZGRyPSV4IHVsX251bV9ieXRlcz0leCwgIgorCQkJInZtX3N0YXJ0PSVseCwgdm1fZW5kPSVseCwgdm1fZmxhZ3M9JWx4XG4iLCB1bF9tcHVfYWRkciwKKwkJCXVsX251bV9ieXRlcywgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQl2bWEtPnZtX2ZsYWdzKTsKKwl9CisJaWYgKCF2bWEpIHsKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBWTUEgcmVnaW9uIGZvciAweCV4ICglZClcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdWxfbXB1X2FkZHIsIHVsX251bV9ieXRlcyk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCWdvdG8gZnVuY19jb250OworCX0KKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fSU8pIHsKKwkJbnVtX3Vzcl9wZ3MgPSB1bF9udW1fYnl0ZXMgLyBQR19TSVpFNEs7CisJCW1wdV9hZGRyID0gdWxfbXB1X2FkZHI7CisKKwkJLyogR2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMgZm9yIHVzZXIgYnVmZmVyICovCisJCWZvciAocGdfaSA9IDA7IHBnX2kgPCBudW1fdXNyX3BnczsgcGdfaSsrKSB7CisJCQlwYSA9IHVzZXJfdmEyX3BhKG1tLCBtcHVfYWRkcik7CisJCQlpZiAoIXBhKSB7CisJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJCXByX2VycigiRFNQQlJJREdFOiBWTV9JTyBtYXBwaW5nIHBoeXNpY2FsIgorCQkJCSAgICAgICAiYWRkcmVzcyBpcyBpbnZhbGlkXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwZm5fdmFsaWQoX19waHlzX3RvX3BmbihwYSkpKSB7CisJCQkJcGcgPSBQSFlTX1RPX1BBR0UocGEpOworCQkJCWdldF9wYWdlKHBnKTsKKwkJCQlpZiAocGFnZV9jb3VudChwZykgPCAxKSB7CisJCQkJCXByX2VycigiQmFkIHBhZ2UgaW4gVk1fSU8gYnVmZmVyXG4iKTsKKwkJCQkJYmFkX3BhZ2VfZHVtcChwYSwgcGcpOworCQkJCX0KKwkJCX0KKwkJCXN0YXR1cyA9IHB0ZV9zZXQoZGV2X2NvbnRleHQtPnB0X2F0dHJzLCBwYSwKKwkJCQkJIHZhLCBIV19QQUdFX1NJWkU0S0IsICZod19hdHRycyk7CisJCQlpZiAoc3RhdHVzKQorCQkJCWJyZWFrOworCisJCQl2YSArPSBIV19QQUdFX1NJWkU0S0I7CisJCQltcHVfYWRkciArPSBIV19QQUdFX1NJWkU0S0I7CisJCQlwYSArPSBIV19QQUdFX1NJWkU0S0I7CisJCX0KKwl9IGVsc2UgeworCQludW1fdXNyX3BncyA9IHVsX251bV9ieXRlcyAvIFBHX1NJWkU0SzsKKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEUgfCBWTV9NQVlXUklURSkpCisJCQl3cml0ZSA9IDE7CisKKwkJZm9yIChwZ19pID0gMDsgcGdfaSA8IG51bV91c3JfcGdzOyBwZ19pKyspIHsKKwkJCXBnX251bSA9IGdldF91c2VyX3BhZ2VzKGN1cnJfdGFzaywgbW0sIHVsX21wdV9hZGRyLCAxLAorCQkJCQkJd3JpdGUsIDEsICZtYXBwZWRfcGFnZSwgTlVMTCk7CisJCQlpZiAocGdfbnVtID4gMCkgeworCQkJCWlmIChwYWdlX2NvdW50KG1hcHBlZF9wYWdlKSA8IDEpIHsKKwkJCQkJcHJfZXJyKCJCYWQgcGFnZSBjb3VudCBhZnRlciBkb2luZyIKKwkJCQkJICAgICAgICJnZXRfdXNlcl9wYWdlcyBvbiIKKwkJCQkJICAgICAgICJ1c2VyIGJ1ZmZlclxuIik7CisJCQkJCWJhZF9wYWdlX2R1bXAocGFnZV90b19waHlzKG1hcHBlZF9wYWdlKSwKKwkJCQkJCSAgICAgIG1hcHBlZF9wYWdlKTsKKwkJCQl9CisJCQkJc3RhdHVzID0gcHRlX3NldChkZXZfY29udGV4dC0+cHRfYXR0cnMsCisJCQkJCQkgcGFnZV90b19waHlzKG1hcHBlZF9wYWdlKSwgdmEsCisJCQkJCQkgSFdfUEFHRV9TSVpFNEtCLCAmaHdfYXR0cnMpOworCQkJCWlmIChzdGF0dXMpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKG1hcHBlZF9wYWdlcykKKwkJCQkJbWFwcGVkX3BhZ2VzW3BnX2ldID0gbWFwcGVkX3BhZ2U7CisKKwkJCQl2YSArPSBIV19QQUdFX1NJWkU0S0I7CisJCQkJdWxfbXB1X2FkZHIgKz0gSFdfUEFHRV9TSVpFNEtCOworCQkJfSBlbHNlIHsKKwkJCQlwcl9lcnIoIkRTUEJSSURHRTogZ2V0X3VzZXJfcGFnZXMgRkFJTEVELCIKKwkJCQkgICAgICAgIk1QVSBhZGRyID0gMHgleCwiCisJCQkJICAgICAgICJ2bWEtPnZtX2ZsYWdzID0gMHglbHgsIgorCQkJCSAgICAgICAiZ2V0X3VzZXJfcGFnZXMgRXJyIgorCQkJCSAgICAgICAiVmFsdWUgPSAlZCwgQnVmZmVyIgorCQkJCSAgICAgICAic2l6ZT0weCV4XG4iLCB1bF9tcHVfYWRkciwKKwkJCQkgICAgICAgdm1hLT52bV9mbGFncywgcGdfbnVtLCB1bF9udW1fYnl0ZXMpOworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworZnVuY19jb250OgorCWlmIChzdGF0dXMpIHsKKwkJLyoKKwkJICogUm9sbCBvdXQgdGhlIG1hcHBlZCBwYWdlcyBpbmNhc2UgaXQgZmFpbGVkIGluIG1pZGRsZSBvZgorCQkgKiBtYXBwaW5nCisJCSAqLworCQlpZiAocGdfaSkgeworCQkJYnJpZGdlX2JyZF9tZW1fdW5fbWFwKGRldl9jb250ZXh0LCB2aXJ0X2FkZHIsCisJCQkJCSAgIChwZ19pICogUEdfU0laRTRLKSk7CisJCX0KKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKwkvKgorCSAqIEluIGFueSBjYXNlLCBmbHVzaCB0aGUgVExCCisJICogVGhpcyBpcyBjYWxsZWQgZnJvbSBoZXJlIGluc3RlYWQgZnJvbSBwdGVfdXBkYXRlIHRvIGF2b2lkIHVubmVjZXNzYXJ5CisJICogcmVwZXRpdGlvbiB3aGlsZSBtYXBwaW5nIG5vbi1jb250aWd1b3VzIHBoeXNpY2FsIHJlZ2lvbnMgb2YgYSB2aXJ0dWFsCisJICogcmVnaW9uCisJICovCisJZmx1c2hfYWxsKGRldl9jb250ZXh0KTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIHN0YXR1cyAleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX21lbV91bl9tYXAgPT09PT09PT0KKyAqICAgICAgSW52YWxpZGF0ZSB0aGUgUFRFcyBmb3IgdGhlIERTUCBWQSBibG9jayB0byBiZSB1bm1hcHBlZC4KKyAqCisgKiAgICAgIFBURXMgb2YgYSBtYXBwZWQgbWVtb3J5IGJsb2NrIGFyZSBjb250aWd1b3VzIGluIGFueSBwYWdlIHRhYmxlCisgKiAgICAgIFNvLCBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgdGhlIFBURSBhZGRyZXNzIGZvciBldmVyeSA0SyBibG9jaywKKyAqICAgICAgd2UgY2xlYXIgY29uc2VjdXRpdmUgUFRFcyB1bnRpbCB3ZSB1bm1hcCBhbGwgdGhlIGJ5dGVzCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX2JyZF9tZW1fdW5fbWFwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgICAgdTMyIHZpcnRfYWRkciwgdTMyIHVsX251bV9ieXRlcykKK3sKKwl1MzIgbDFfYmFzZV92YTsKKwl1MzIgbDJfYmFzZV92YTsKKwl1MzIgbDJfYmFzZV9wYTsKKwl1MzIgbDJfcGFnZV9udW07CisJdTMyIHB0ZV92YWw7CisJdTMyIHB0ZV9zaXplOworCXUzMiBwdGVfY291bnQ7CisJdTMyIHB0ZV9hZGRyX2wxOworCXUzMiBwdGVfYWRkcl9sMiA9IDA7CisJdTMyIHJlbV9ieXRlczsKKwl1MzIgcmVtX2J5dGVzX2wyOworCXUzMiB2YV9jdXJyOworCXN0cnVjdCBwYWdlICpwZyA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQgPSBkZXZfY3R4dDsKKwlzdHJ1Y3QgcGdfdGFibGVfYXR0cnMgKnB0ID0gZGV2X2NvbnRleHQtPnB0X2F0dHJzOworCXUzMiB0ZW1wOworCXUzMiBwYWRkcjsKKwl1MzIgbnVtb2Y0a19wYWdlcyA9IDA7CisKKwl2YV9jdXJyID0gdmlydF9hZGRyOworCXJlbV9ieXRlcyA9IHVsX251bV9ieXRlczsKKwlyZW1fYnl0ZXNfbDIgPSAwOworCWwxX2Jhc2VfdmEgPSBwdC0+bDFfYmFzZV92YTsKKwlwdGVfYWRkcl9sMSA9IGh3X21tdV9wdGVfYWRkcl9sMShsMV9iYXNlX3ZhLCB2YV9jdXJyKTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIGRldl9jdHh0ICVwLCB2YSAleCwgTnVtQnl0ZXMgJXggbDFfYmFzZV92YSAleCwgIgorCQkicHRlX2FkZHJfbDEgJXhcbiIsIF9fZnVuY19fLCBkZXZfY3R4dCwgdmlydF9hZGRyLAorCQl1bF9udW1fYnl0ZXMsIGwxX2Jhc2VfdmEsIHB0ZV9hZGRyX2wxKTsKKworCXdoaWxlIChyZW1fYnl0ZXMgJiYgIXN0YXR1cykgeworCQl1MzIgdmFfY3Vycl9vcmlnID0gdmFfY3VycjsKKwkJLyogRmluZCB3aGV0aGVyIHRoZSBMMSBQVEUgcG9pbnRzIHRvIGEgdmFsaWQgTDIgUFQgKi8KKwkJcHRlX2FkZHJfbDEgPSBod19tbXVfcHRlX2FkZHJfbDEobDFfYmFzZV92YSwgdmFfY3Vycik7CisJCXB0ZV92YWwgPSAqKHUzMiAqKSBwdGVfYWRkcl9sMTsKKwkJcHRlX3NpemUgPSBod19tbXVfcHRlX3NpemVfbDEocHRlX3ZhbCk7CisKKwkJaWYgKHB0ZV9zaXplICE9IEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKQorCQkJZ290byBza2lwX2NvYXJzZV9wYWdlOworCisJCS8qCisJCSAqIEdldCB0aGUgTDIgUEEgZnJvbSB0aGUgTDEgUFRFLCBhbmQgZmluZAorCQkgKiBjb3JyZXNwb25kaW5nIEwyIFZBCisJCSAqLworCQlsMl9iYXNlX3BhID0gaHdfbW11X3B0ZV9jb2Fyc2VfbDEocHRlX3ZhbCk7CisJCWwyX2Jhc2VfdmEgPSBsMl9iYXNlX3BhIC0gcHQtPmwyX2Jhc2VfcGEgKyBwdC0+bDJfYmFzZV92YTsKKwkJbDJfcGFnZV9udW0gPQorCQkgICAgKGwyX2Jhc2VfcGEgLSBwdC0+bDJfYmFzZV9wYSkgLyBIV19NTVVfQ09BUlNFX1BBR0VfU0laRTsKKwkJLyoKKwkJICogRmluZCB0aGUgTDIgUFRFIGFkZHJlc3MgZnJvbSB3aGljaCB3ZSB3aWxsIHN0YXJ0CisJCSAqIGNsZWFyaW5nLCB0aGUgbnVtYmVyIG9mIFBURXMgdG8gYmUgY2xlYXJlZCBvbiB0aGlzCisJCSAqIHBhZ2UsIGFuZCB0aGUgc2l6ZSBvZiBWQSBzcGFjZSB0aGF0IG5lZWRzIHRvIGJlCisJCSAqIGNsZWFyZWQgb24gdGhpcyBMMiBwYWdlCisJCSAqLworCQlwdGVfYWRkcl9sMiA9IGh3X21tdV9wdGVfYWRkcl9sMihsMl9iYXNlX3ZhLCB2YV9jdXJyKTsKKwkJcHRlX2NvdW50ID0gcHRlX2FkZHJfbDIgJiAoSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUgLSAxKTsKKwkJcHRlX2NvdW50ID0gKEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFIC0gcHRlX2NvdW50KSAvIHNpemVvZih1MzIpOworCQlpZiAocmVtX2J5dGVzIDwgKHB0ZV9jb3VudCAqIFBHX1NJWkU0SykpCisJCQlwdGVfY291bnQgPSByZW1fYnl0ZXMgLyBQR19TSVpFNEs7CisJCXJlbV9ieXRlc19sMiA9IHB0ZV9jb3VudCAqIFBHX1NJWkU0SzsKKworCQkvKgorCQkgKiBVbm1hcCB0aGUgVkEgc3BhY2Ugb24gdGhpcyBMMiBQVC4gQSBxdWlja2VyIHdheQorCQkgKiB3b3VsZCBiZSB0byBjbGVhciBwdGVfY291bnQgZW50cmllcyBzdGFydGluZyBmcm9tCisJCSAqIHB0ZV9hZGRyX2wyLiBIb3dldmVyLCBiZWxvdyBjb2RlIGNoZWNrcyB0aGF0IHdlIGRvbid0CisJCSAqIGNsZWFyIGludmFsaWQgZW50cmllcyBvciBsZXNzIHRoYW4gNjRLQiBmb3IgYSA2NEtCCisJCSAqIGVudHJ5LiBTaW1pbGFyIGNoZWNraW5nIGlzIGRvbmUgZm9yIEwxIFBURXMgdG9vCisJCSAqIGJlbG93CisJCSAqLworCQl3aGlsZSAocmVtX2J5dGVzX2wyICYmICFzdGF0dXMpIHsKKwkJCXB0ZV92YWwgPSAqKHUzMiAqKSBwdGVfYWRkcl9sMjsKKwkJCXB0ZV9zaXplID0gaHdfbW11X3B0ZV9zaXplX2wyKHB0ZV92YWwpOworCQkJLyogdmFfY3VyciBhbGlnbmVkIHRvIHB0ZV9zaXplPyAqLworCQkJaWYgKHB0ZV9zaXplID09IDAgfHwgcmVtX2J5dGVzX2wyIDwgcHRlX3NpemUgfHwKKwkJCSAgICB2YV9jdXJyICYgKHB0ZV9zaXplIC0gMSkpIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIENvbGxlY3QgUGh5c2ljYWwgYWRkcmVzc2VzIGZyb20gVkEgKi8KKwkJCXBhZGRyID0gKHB0ZV92YWwgJiB+KHB0ZV9zaXplIC0gMSkpOworCQkJaWYgKHB0ZV9zaXplID09IEhXX1BBR0VfU0laRTY0S0IpCisJCQkJbnVtb2Y0a19wYWdlcyA9IDE2OworCQkJZWxzZQorCQkJCW51bW9mNGtfcGFnZXMgPSAxOworCQkJdGVtcCA9IDA7CisJCQl3aGlsZSAodGVtcCsrIDwgbnVtb2Y0a19wYWdlcykgeworCQkJCWlmICghcGZuX3ZhbGlkKF9fcGh5c190b19wZm4ocGFkZHIpKSkgeworCQkJCQlwYWRkciArPSBIV19QQUdFX1NJWkU0S0I7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlwZyA9IFBIWVNfVE9fUEFHRShwYWRkcik7CisJCQkJaWYgKHBhZ2VfY291bnQocGcpIDwgMSkgeworCQkJCQlwcl9pbmZvKCJEU1BCUklER0U6IFVOTUFQIGZ1bmN0aW9uOiAiCisJCQkJCQkiQ09VTlQgMCBGT1IgUEEgMHgleCwgc2l6ZSA9ICIKKwkJCQkJCSIweCV4XG4iLCBwYWRkciwgdWxfbnVtX2J5dGVzKTsKKwkJCQkJYmFkX3BhZ2VfZHVtcChwYWRkciwgcGcpOworCQkJCX0gZWxzZSB7CisJCQkJCXNldF9wYWdlX2RpcnR5KHBnKTsKKwkJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBnKTsKKwkJCQl9CisJCQkJcGFkZHIgKz0gSFdfUEFHRV9TSVpFNEtCOworCQkJfQorCQkJaWYgKGh3X21tdV9wdGVfY2xlYXIocHRlX2FkZHJfbDIsIHZhX2N1cnIsIHB0ZV9zaXplKSkgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQlnb3RvIEVYSVRfTE9PUDsKKwkJCX0KKworCQkJc3RhdHVzID0gMDsKKwkJCXJlbV9ieXRlc19sMiAtPSBwdGVfc2l6ZTsKKwkJCXZhX2N1cnIgKz0gcHRlX3NpemU7CisJCQlwdGVfYWRkcl9sMiArPSAocHRlX3NpemUgPj4gMTIpICogc2l6ZW9mKHUzMik7CisJCX0KKwkJc3Bpbl9sb2NrKCZwdC0+cGdfbG9jayk7CisJCWlmIChyZW1fYnl0ZXNfbDIgPT0gMCkgeworCQkJcHQtPnBnX2luZm9bbDJfcGFnZV9udW1dLm51bV9lbnRyaWVzIC09IHB0ZV9jb3VudDsKKwkJCWlmIChwdC0+cGdfaW5mb1tsMl9wYWdlX251bV0ubnVtX2VudHJpZXMgPT0gMCkgeworCQkJCS8qCisJCQkJICogQ2xlYXIgdGhlIEwxIFBURSBwb2ludGluZyB0byB0aGUgTDIgUFQKKwkJCQkgKi8KKwkJCQlpZiAoIWh3X21tdV9wdGVfY2xlYXIobDFfYmFzZV92YSwgdmFfY3Vycl9vcmlnLAorCQkJCQkJICAgICBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSkpCisJCQkJCXN0YXR1cyA9IDA7CisJCQkJZWxzZSB7CisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQkJc3Bpbl91bmxvY2soJnB0LT5wZ19sb2NrKTsKKwkJCQkJZ290byBFWElUX0xPT1A7CisJCQkJfQorCQkJfQorCQkJcmVtX2J5dGVzIC09IHB0ZV9jb3VudCAqIFBHX1NJWkU0SzsKKwkJfSBlbHNlCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJc3Bpbl91bmxvY2soJnB0LT5wZ19sb2NrKTsKKwkJY29udGludWU7Citza2lwX2NvYXJzZV9wYWdlOgorCQkvKiB2YV9jdXJyIGFsaWduZWQgdG8gcHRlX3NpemU/ICovCisJCS8qIHB0ZV9zaXplID0gMSBNQiBvciAxNiBNQiAqLworCQlpZiAocHRlX3NpemUgPT0gMCB8fCByZW1fYnl0ZXMgPCBwdGVfc2l6ZSB8fAorCQkgICAgdmFfY3VyciAmIChwdGVfc2l6ZSAtIDEpKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChwdGVfc2l6ZSA9PSBIV19QQUdFX1NJWkUxTUIpCisJCQludW1vZjRrX3BhZ2VzID0gMjU2OworCQllbHNlCisJCQludW1vZjRrX3BhZ2VzID0gNDA5NjsKKwkJdGVtcCA9IDA7CisJCS8qIENvbGxlY3QgUGh5c2ljYWwgYWRkcmVzc2VzIGZyb20gVkEgKi8KKwkJcGFkZHIgPSAocHRlX3ZhbCAmIH4ocHRlX3NpemUgLSAxKSk7CisJCXdoaWxlICh0ZW1wKysgPCBudW1vZjRrX3BhZ2VzKSB7CisJCQlpZiAocGZuX3ZhbGlkKF9fcGh5c190b19wZm4ocGFkZHIpKSkgeworCQkJCXBnID0gUEhZU19UT19QQUdFKHBhZGRyKTsKKwkJCQlpZiAocGFnZV9jb3VudChwZykgPCAxKSB7CisJCQkJCXByX2luZm8oIkRTUEJSSURHRTogVU5NQVAgZnVuY3Rpb246ICIKKwkJCQkJCSJDT1VOVCAwIEZPUiBQQSAweCV4LCBzaXplID0gIgorCQkJCQkJIjB4JXhcbiIsIHBhZGRyLCB1bF9udW1fYnl0ZXMpOworCQkJCQliYWRfcGFnZV9kdW1wKHBhZGRyLCBwZyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0X3BhZ2VfZGlydHkocGcpOworCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGcpOworCQkJCX0KKwkJCX0KKwkJCXBhZGRyICs9IEhXX1BBR0VfU0laRTRLQjsKKwkJfQorCQlpZiAoIWh3X21tdV9wdGVfY2xlYXIobDFfYmFzZV92YSwgdmFfY3VyciwgcHRlX3NpemUpKSB7CisJCQlzdGF0dXMgPSAwOworCQkJcmVtX2J5dGVzIC09IHB0ZV9zaXplOworCQkJdmFfY3VyciArPSBwdGVfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gRVhJVF9MT09QOworCQl9CisJfQorCS8qCisJICogSXQgaXMgYmV0dGVyIHRvIGZsdXNoIHRoZSBUTEIgaGVyZSwgc28gdGhhdCBhbnkgc3RhbGUgb2xkIGVudHJpZXMKKwkgKiBnZXQgZmx1c2hlZAorCSAqLworRVhJVF9MT09QOgorCWZsdXNoX2FsbChkZXZfY29udGV4dCk7CisJZGV2X2RiZyhicmlkZ2UsCisJCSIlczogdmFfY3VyciAleCwgcHRlX2FkZHJfbDEgJXggcHRlX2FkZHJfbDIgJXggcmVtX2J5dGVzICV4LCIKKwkJIiByZW1fYnl0ZXNfbDIgJXggc3RhdHVzICV4XG4iLCBfX2Z1bmNfXywgdmFfY3VyciwgcHRlX2FkZHJfbDEsCisJCXB0ZV9hZGRyX2wyLCByZW1fYnl0ZXMsIHJlbV9ieXRlc19sMiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHVzZXJfdmEyX3BhID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiB3YWxrcyB0aHJvdWdoIHRoZSBwYWdlIHRhYmxlcyB0byBjb252ZXJ0IGEgdXNlcmxhbmQKKyAqICAgICAgdmlydHVhbCBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MKKyAqLworc3RhdGljIHUzMiB1c2VyX3ZhMl9wYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdTMyIGFkZHJlc3MpCit7CisJcGdkX3QgKnBnZDsKKwlwbWRfdCAqcG1kOworCXB0ZV90ICpwdGVwLCBwdGU7CisKKwlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyZXNzKTsKKwlpZiAoIShwZ2Rfbm9uZSgqcGdkKSB8fCBwZ2RfYmFkKCpwZ2QpKSkgeworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7CisJCWlmICghKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9iYWQoKnBtZCkpKSB7CisJCQlwdGVwID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyZXNzKTsKKwkJCWlmIChwdGVwKSB7CisJCQkJcHRlID0gKnB0ZXA7CisJCQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCisJCQkJCXJldHVybiBwdGUgJiBQQUdFX01BU0s7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBwdGVfdXBkYXRlID09PT09PT09CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgb3B0aW11bSBwYWdlLWFsaWduZWQgYWRkcmVzc2VzIGFuZCBzaXplcworICogICAgICBDYWxsZXIgbXVzdCBwYXNzIHBhZ2UtYWxpZ25lZCB2YWx1ZXMKKyAqLworc3RhdGljIGludCBwdGVfdXBkYXRlKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LCB1MzIgcGEsCisJCQkgICAgIHUzMiB2YSwgdTMyIHNpemUsCisJCQkgICAgIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycykKK3sKKwl1MzIgaTsKKwl1MzIgYWxsX2JpdHM7CisJdTMyIHBhX2N1cnIgPSBwYTsKKwl1MzIgdmFfY3VyciA9IHZhOworCXUzMiBudW1fYnl0ZXMgPSBzaXplOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0ID0gZGV2X2N0eHQ7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHBhZ2Vfc2l6ZVtdID0geyBIV19QQUdFX1NJWkUxNk1CLCBIV19QQUdFX1NJWkUxTUIsCisJCUhXX1BBR0VfU0laRTY0S0IsIEhXX1BBR0VfU0laRTRLQgorCX07CisKKwl3aGlsZSAobnVtX2J5dGVzICYmICFzdGF0dXMpIHsKKwkJLyogVG8gZmluZCB0aGUgbWF4LiBwYWdlIHNpemUgd2l0aCB3aGljaCBib3RoIFBBICYgVkEgYXJlCisJCSAqIGFsaWduZWQgKi8KKwkJYWxsX2JpdHMgPSBwYV9jdXJyIHwgdmFfY3VycjsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlpZiAoKG51bV9ieXRlcyA+PSBwYWdlX3NpemVbaV0pICYmICgoYWxsX2JpdHMgJgorCQkJCQkJCSAgICAgKHBhZ2Vfc2l6ZVtpXSAtCisJCQkJCQkJICAgICAgMSkpID09IDApKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgcHRlX3NldChkZXZfY29udGV4dC0+cHRfYXR0cnMsIHBhX2N1cnIsCisJCQkJCSAgICB2YV9jdXJyLCBwYWdlX3NpemVbaV0sIG1hcF9hdHRycyk7CisJCQkJcGFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQkJdmFfY3VyciArPSBwYWdlX3NpemVbaV07CisJCQkJbnVtX2J5dGVzIC09IHBhZ2Vfc2l6ZVtpXTsKKwkJCQkvKiBEb24ndCB0cnkgc21hbGxlciBzaXplcy4gSG9wZWZ1bGx5IHdlIGhhdmUKKwkJCQkgKiByZWFjaGVkIGFuIGFkZHJlc3MgYWxpZ25lZCB0byBhIGJpZ2dlciBwYWdlCisJCQkJICogc2l6ZSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwdGVfc2V0ID09PT09PT09CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBQVEUgYWRkcmVzcyAoTVBVIHZpcnR1YWwpIHRvIGJlIHVwZGF0ZWQKKyAqICAgICAgSXQgYWxzbyBtYW5hZ2VzIHRoZSBMMiBwYWdlIHRhYmxlcworICovCitzdGF0aWMgaW50IHB0ZV9zZXQoc3RydWN0IHBnX3RhYmxlX2F0dHJzICpwdCwgdTMyIHBhLCB1MzIgdmEsCisJCQkgIHUzMiBzaXplLCBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICphdHRycykKK3sKKwl1MzIgaTsKKwl1MzIgcHRlX3ZhbDsKKwl1MzIgcHRlX2FkZHJfbDE7CisJdTMyIHB0ZV9zaXplOworCS8qIEJhc2UgYWRkcmVzcyBvZiB0aGUgUFQgdGhhdCB3aWxsIGJlIHVwZGF0ZWQgKi8KKwl1MzIgcGdfdGJsX3ZhOworCXUzMiBsMV9iYXNlX3ZhOworCS8qIENvbXBpbGVyIHdhcm5zIHRoYXQgdGhlIG5leHQgdGhyZWUgdmFyaWFibGVzIG1pZ2h0IGJlIHVzZWQKKwkgKiB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24uIERvZXNuJ3Qgc2VlbSBzby4gV29ya2luZyBhcm91bmQsCisJICogYW55d2F5cy4gKi8KKwl1MzIgbDJfYmFzZV92YSA9IDA7CisJdTMyIGwyX2Jhc2VfcGEgPSAwOworCXUzMiBsMl9wYWdlX251bSA9IDA7CisJaW50IHN0YXR1cyA9IDA7CisKKwlsMV9iYXNlX3ZhID0gcHQtPmwxX2Jhc2VfdmE7CisJcGdfdGJsX3ZhID0gbDFfYmFzZV92YTsKKwlpZiAoKHNpemUgPT0gSFdfUEFHRV9TSVpFNjRLQikgfHwgKHNpemUgPT0gSFdfUEFHRV9TSVpFNEtCKSkgeworCQkvKiBGaW5kIHdoZXRoZXIgdGhlIEwxIFBURSBwb2ludHMgdG8gYSB2YWxpZCBMMiBQVCAqLworCQlwdGVfYWRkcl9sMSA9IGh3X21tdV9wdGVfYWRkcl9sMShsMV9iYXNlX3ZhLCB2YSk7CisJCWlmIChwdGVfYWRkcl9sMSA8PSAocHQtPmwxX2Jhc2VfdmEgKyBwdC0+bDFfc2l6ZSkpIHsKKwkJCXB0ZV92YWwgPSAqKHUzMiAqKSBwdGVfYWRkcl9sMTsKKwkJCXB0ZV9zaXplID0gaHdfbW11X3B0ZV9zaXplX2wxKHB0ZV92YWwpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCQlzcGluX2xvY2soJnB0LT5wZ19sb2NrKTsKKwkJaWYgKHB0ZV9zaXplID09IEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFKSB7CisJCQkvKiBHZXQgdGhlIEwyIFBBIGZyb20gdGhlIEwxIFBURSwgYW5kIGZpbmQKKwkJCSAqIGNvcnJlc3BvbmRpbmcgTDIgVkEgKi8KKwkJCWwyX2Jhc2VfcGEgPSBod19tbXVfcHRlX2NvYXJzZV9sMShwdGVfdmFsKTsKKwkJCWwyX2Jhc2VfdmEgPQorCQkJICAgIGwyX2Jhc2VfcGEgLSBwdC0+bDJfYmFzZV9wYSArIHB0LT5sMl9iYXNlX3ZhOworCQkJbDJfcGFnZV9udW0gPQorCQkJICAgIChsMl9iYXNlX3BhIC0KKwkJCSAgICAgcHQtPmwyX2Jhc2VfcGEpIC8gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkU7CisJCX0gZWxzZSBpZiAocHRlX3NpemUgPT0gMCkgeworCQkJLyogTDEgUFRFIGlzIGludmFsaWQuIEFsbG9jYXRlIGEgTDIgUFQgYW5kCisJCQkgKiBwb2ludCB0aGUgTDEgUFRFIHRvIGl0ICovCisJCQkvKiBGaW5kIGEgZnJlZSBMMiBQVC4gKi8KKwkJCWZvciAoaSA9IDA7IChpIDwgcHQtPmwyX251bV9wYWdlcykgJiYKKwkJCSAgICAgKHB0LT5wZ19pbmZvW2ldLm51bV9lbnRyaWVzICE9IDApOyBpKyspCisJCQkJOzsKKwkJCWlmIChpIDwgcHQtPmwyX251bV9wYWdlcykgeworCQkJCWwyX3BhZ2VfbnVtID0gaTsKKwkJCQlsMl9iYXNlX3BhID0gcHQtPmwyX2Jhc2VfcGEgKyAobDJfcGFnZV9udW0gKgorCQkJCQkJSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkUpOworCQkJCWwyX2Jhc2VfdmEgPSBwdC0+bDJfYmFzZV92YSArIChsMl9wYWdlX251bSAqCisJCQkJCQlIV19NTVVfQ09BUlNFX1BBR0VfU0laRSk7CisJCQkJLyogRW5kaWFubmVzcyBhdHRyaWJ1dGVzIGFyZSBpZ25vcmVkIGZvcgorCQkJCSAqIEhXX01NVV9DT0FSU0VfUEFHRV9TSVpFICovCisJCQkJc3RhdHVzID0KKwkJCQkgICAgaHdfbW11X3B0ZV9zZXQobDFfYmFzZV92YSwgbDJfYmFzZV9wYSwgdmEsCisJCQkJCQkgICBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSwKKwkJCQkJCSAgIGF0dHJzKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEZvdW5kIHZhbGlkIEwxIFBURSBvZiBhbm90aGVyIHNpemUuCisJCQkgKiBTaG91bGQgbm90IG92ZXJ3cml0ZSBpdC4gKi8KKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCQlpZiAoIXN0YXR1cykgeworCQkJcGdfdGJsX3ZhID0gbDJfYmFzZV92YTsKKwkJCWlmIChzaXplID09IEhXX1BBR0VfU0laRTY0S0IpCisJCQkJcHQtPnBnX2luZm9bbDJfcGFnZV9udW1dLm51bV9lbnRyaWVzICs9IDE2OworCQkJZWxzZQorCQkJCXB0LT5wZ19pbmZvW2wyX3BhZ2VfbnVtXS5udW1fZW50cmllcysrOworCQkJZGV2X2RiZyhicmlkZ2UsICJQVEU6IEwyIEJhc2VWYSAleCwgQmFzZVBhICV4LCBQYWdlTnVtICIKKwkJCQkiJXgsIG51bV9lbnRyaWVzICV4XG4iLCBsMl9iYXNlX3ZhLAorCQkJCWwyX2Jhc2VfcGEsIGwyX3BhZ2VfbnVtLAorCQkJCXB0LT5wZ19pbmZvW2wyX3BhZ2VfbnVtXS5udW1fZW50cmllcyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnB0LT5wZ19sb2NrKTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJZGV2X2RiZyhicmlkZ2UsICJQVEU6IHBnX3RibF92YSAleCwgcGEgJXgsIHZhICV4LCBzaXplICV4XG4iLAorCQkJcGdfdGJsX3ZhLCBwYSwgdmEsIHNpemUpOworCQlkZXZfZGJnKGJyaWRnZSwgIlBURTogZW5kaWFuaXNtICV4LCBlbGVtZW50X3NpemUgJXgsICIKKwkJCSJtaXhlZF9zaXplICV4XG4iLCBhdHRycy0+ZW5kaWFuaXNtLAorCQkJYXR0cnMtPmVsZW1lbnRfc2l6ZSwgYXR0cnMtPm1peGVkX3NpemUpOworCQlzdGF0dXMgPSBod19tbXVfcHRlX3NldChwZ190YmxfdmEsIHBhLCB2YSwgc2l6ZSwgYXR0cnMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIE1lbW9yeSBtYXAga2VybmVsIFZBIC0tIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB2bWFsbG9jICovCitzdGF0aWMgaW50IG1lbV9tYXBfdm1hbGxvYyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgIHUzMiB1bF9tcHVfYWRkciwgdTMyIHZpcnRfYWRkciwKKwkJCQkgIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICBzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190ICpod19hdHRycykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZVsxXTsKKwl1MzIgaTsKKwl1MzIgcGFfY3VycjsKKwl1MzIgcGFfbmV4dDsKKwl1MzIgdmFfY3VycjsKKwl1MzIgc2l6ZV9jdXJyOworCXUzMiBudW1fcGFnZXM7CisJdTMyIHBhOworCXUzMiBudW1fb2Y0a19wYWdlczsKKwl1MzIgdGVtcCA9IDA7CisKKwkvKgorCSAqIERvIEtlcm5lbCB2YSB0byBwYSB0cmFuc2xhdGlvbi4KKwkgKiBDb21iaW5lIHBoeXNpY2FsbHkgY29udGlndW91cyByZWdpb25zIHRvIHJlZHVjZSBUTEJzLgorCSAqIFBhc3MgdGhlIHRyYW5zbGF0ZWQgcGEgdG8gcHRlX3VwZGF0ZS4KKwkgKi8KKwludW1fcGFnZXMgPSB1bF9udW1fYnl0ZXMgLyBQQUdFX1NJWkU7CS8qIFBBR0VfU0laRSA9IE9TIHBhZ2Ugc2l6ZSAqLworCWkgPSAwOworCXZhX2N1cnIgPSB1bF9tcHVfYWRkcjsKKwlwYWdlWzBdID0gdm1hbGxvY190b19wYWdlKCh2b2lkICopdmFfY3Vycik7CisJcGFfbmV4dCA9IHBhZ2VfdG9fcGh5cyhwYWdlWzBdKTsKKwl3aGlsZSAoIXN0YXR1cyAmJiAoaSA8IG51bV9wYWdlcykpIHsKKwkJLyoKKwkJICogUmV1c2UgcGFfbmV4dCBmcm9tIHRoZSBwcmV2aW91cyBpdGVyYWlvbiB0byBhdm9pZAorCQkgKiBhbiBleHRyYSB2YTJwYSBjYWxsCisJCSAqLworCQlwYV9jdXJyID0gcGFfbmV4dDsKKwkJc2l6ZV9jdXJyID0gUEFHRV9TSVpFOworCQkvKgorCQkgKiBJZiB0aGUgbmV4dCBwYWdlIGlzIHBoeXNpY2FsbHkgY29udGlndW91cywKKwkJICogbWFwIGl0IHdpdGggdGhlIGN1cnJlbnQgb25lIGJ5IGluY3JlYXNpbmcKKwkJICogdGhlIHNpemUgb2YgdGhlIHJlZ2lvbiB0byBiZSBtYXBwZWQKKwkJICovCisJCXdoaWxlICgrK2kgPCBudW1fcGFnZXMpIHsKKwkJCXBhZ2VbMF0gPQorCQkJICAgIHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKSh2YV9jdXJyICsgc2l6ZV9jdXJyKSk7CisJCQlwYV9uZXh0ID0gcGFnZV90b19waHlzKHBhZ2VbMF0pOworCisJCQlpZiAocGFfbmV4dCA9PSAocGFfY3VyciArIHNpemVfY3VycikpCisJCQkJc2l6ZV9jdXJyICs9IFBBR0VfU0laRTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKworCQl9CisJCWlmIChwYV9uZXh0ID09IDApIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCQlwYSA9IHBhX2N1cnI7CisJCW51bV9vZjRrX3BhZ2VzID0gc2l6ZV9jdXJyIC8gSFdfUEFHRV9TSVpFNEtCOworCQl3aGlsZSAodGVtcCsrIDwgbnVtX29mNGtfcGFnZXMpIHsKKwkJCWdldF9wYWdlKFBIWVNfVE9fUEFHRShwYSkpOworCQkJcGEgKz0gSFdfUEFHRV9TSVpFNEtCOworCQl9CisJCXN0YXR1cyA9IHB0ZV91cGRhdGUoZGV2X2NvbnRleHQsIHBhX2N1cnIsIHZpcnRfYWRkciArCisJCQkJICAgICh2YV9jdXJyIC0gdWxfbXB1X2FkZHIpLCBzaXplX2N1cnIsCisJCQkJICAgIGh3X2F0dHJzKTsKKwkJdmFfY3VyciArPSBzaXplX2N1cnI7CisJfQorCS8qCisJICogSW4gYW55IGNhc2UsIGZsdXNoIHRoZSBUTEIKKwkgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGhlcmUgaW5zdGVhZCBmcm9tIHB0ZV91cGRhdGUgdG8gYXZvaWQgdW5uZWNlc3NhcnkKKwkgKiByZXBldGl0aW9uIHdoaWxlIG1hcHBpbmcgbm9uLWNvbnRpZ3VvdXMgcGh5c2ljYWwgcmVnaW9ucyBvZiBhIHZpcnR1YWwKKwkgKiByZWdpb24KKwkgKi8KKwlmbHVzaF9hbGwoZGV2X2NvbnRleHQpOworCWRldl9kYmcoYnJpZGdlLCAiJXMgc3RhdHVzICV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHdhaXRfZm9yX3N0YXJ0ID09PT09PT09CisgKiAgICAgIFdhaXQgZm9yIHRoZSBzaW5nYWwgZnJvbSBEU1AgdGhhdCBpdCBoYXMgc3RhcnRlZCwgb3IgdGltZSBvdXQuCisgKi8KK2Jvb2wgd2FpdF9mb3Jfc3RhcnQoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHUzMiBkd19zeW5jX2FkZHIpCit7CisJdTE2IHRpbWVvdXQgPSBUSUhFTEVOX0FDS1RJTUVPVVQ7CisKKwkvKiAgV2FpdCBmb3IgcmVzcG9uc2UgZnJvbSBib2FyZCAqLworCXdoaWxlIChfX3Jhd19yZWFkdyhkd19zeW5jX2FkZHIpICYmIC0tdGltZW91dCkKKwkJdWRlbGF5KDEwKTsKKworCS8qICBJZiB0aW1lZCBvdXQ6IHJldHVybiBmYWxzZSAqLworCWlmICghdGltZW91dCkgeworCQlwcl9lcnIoIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBEU1AgdG8gU3RhcnRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzBfcHdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwX3B3ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODlmOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwX3B3ci5jCkBAIC0wLDAgKzEsNTUwIEBACisvKgorICogdGlvbWFwX3B3ci5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIERTUCB3YWtlL3NsZWVwIHJvdXRpbmVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9fc20uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvYnJkZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9kZWZzLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGh3X2RlZnMuaD4KKyNpbmNsdWRlIDxod19tbXUuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9wd3Jfc2guaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3BlY2lmaWMgdG8gdGhpcyBmaWxlICovCisjaW5jbHVkZSAiX3Rpb21hcC5oIgorI2luY2x1ZGUgIl90aW9tYXBfcHdyLmgiCisjaW5jbHVkZSA8bWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4Lmg+CisjaW5jbHVkZSA8bWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaD4KKworI2RlZmluZSBQV1JTVFNUX1RJTUVPVVQgICAgICAgICAgMjAwCisKKy8qCisgKiAgPT09PT09PT0gaGFuZGxlX2NvbnN0cmFpbnRzX3NldCA9PT09PT09PQorICogIAlTZXRzIG5ldyBEU1AgY29uc3RyYWludAorICovCitpbnQgaGFuZGxlX2NvbnN0cmFpbnRzX3NldChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgIHZvaWQgKnBhcmdzKQoreworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJdTMyICpjb25zdHJhaW50X3ZhbDsKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkgICAgb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWNvbnN0cmFpbnRfdmFsID0gKHUzMiAqKSAocGFyZ3MpOworCS8qIFJlYWQgdGhlIHRhcmdldCB2YWx1ZSByZXF1ZXN0ZWQgYnkgRFNQICovCisJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIG9wcCByZXF1ZXN0ZWQgPSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJKHUzMikgKihjb25zdHJhaW50X3ZhbCArIDEpKTsKKworCS8qIFNldCB0aGUgbmV3IG9wcCB2YWx1ZSAqLworCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQorCQkoKnBkYXRhLT5kc3Bfc2V0X21pbl9vcHApICgodTMyKSAqKGNvbnN0cmFpbnRfdmFsICsgMSkpOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUyAqLworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGhhbmRsZV9oaWJlcm5hdGlvbl9mcm9tX2RzcCA9PT09PT09PQorICogIAlIYW5kbGUgSGliZXJuYXRpb24gcmVxdWVzdGVkIGZyb20gRFNQCisgKi8KK2ludCBoYW5kbGVfaGliZXJuYXRpb25fZnJvbV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisjaWZkZWYgQ09ORklHX1BNCisJdTE2IHRpbWVvdXQgPSBQV1JTVFNUX1RJTUVPVVQgLyAxMDsKKwl1MzIgcHdyX3N0YXRlOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJdTMyIG9wcGxldmVsOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3I7CisjZW5kaWYKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkgICAgb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCXB3cl9zdGF0ZSA9ICgqcGRhdGEtPmRzcF9wcm1fcmVhZCkoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1BNX1BXU1RTVCkgJgorCQkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSzsKKwkvKiBXYWl0IGZvciBEU1AgdG8gbW92ZSBpbnRvIE9GRiBzdGF0ZSAqLworCXdoaWxlICgocHdyX3N0YXRlICE9IFBXUkRNX1BPV0VSX09GRikgJiYgLS10aW1lb3V0KSB7CisJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMCkpIHsKKwkJCXByX2VycigiV2FpdGluZyBmb3IgRFNQIE9GRiBtb2RlIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0KKwkJcHdyX3N0YXRlID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwKKwkJCQkJT01BUDJfUE1fUFdTVFNUKSAmIE9NQVBfUE9XRVJTVEFURVNUX01BU0s7CisJfQorCWlmICh0aW1lb3V0ID09IDApIHsKKwkJcHJfZXJyKCIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIERTUCBvZmYgbW9kZVxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQlyZXR1cm4gc3RhdHVzOworCX0gZWxzZSB7CisKKwkJLyogU2F2ZSBtYWlsYm94IHNldHRpbmdzICovCisJCW9tYXBfbWJveF9zYXZlX2N0eChkZXZfY29udGV4dC0+bWJveCk7CisKKwkJLyogVHVybiBvZmYgRFNQIFBlcmlwaGVyYWwgY2xvY2tzIGFuZCBEU1AgTG9hZCBtb25pdG9yIHRpbWVyICovCisJCXN0YXR1cyA9IGRzcF9jbG9ja19kaXNhYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKKworCQkvKiBEaXNhYmxlIHdkdCBvbiBoaWJlcm5hdGlvbi4gKi8KKwkJZHNwX3dkdF9lbmFibGUoZmFsc2UpOworCisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBVcGRhdGUgdGhlIEJyaWRnZXIgRHJpdmVyIHN0YXRlICovCisJCQlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gQlJEX0RTUF9ISUJFUk5BVElPTjsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCQkJc3RhdHVzID0KKwkJCSAgICBkZXZfZ2V0X2lvX21ncihkZXZfY29udGV4dC0+aGRldl9vYmosICZoaW9fbWdyKTsKKwkJCWlmICghaGlvX21ncikgeworCQkJCXN0YXR1cyA9IERTUF9FSEFORExFOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQlpb19zaF9tc2V0dGluZyhoaW9fbWdyLCBTSE1fR0VUT1BQLCAmb3BwbGV2ZWwpOworCisJCQkvKgorCQkJICogU2V0IHRoZSBPUFAgdG8gbG93IGxldmVsIGJlZm9yZSBtb3ZpbmcgdG8gT0ZGCisJCQkgKiBtb2RlCisJCQkgKi8KKwkJCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQorCQkJCSgqcGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKFZERDFfT1BQMSk7CisJCQlzdGF0dXMgPSAwOworI2VuZGlmIC8qIENPTkZJR19USURTUEJSSURHRV9EVkZTICovCisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHNsZWVwX2RzcCA9PT09PT09PQorICogIAlQdXQgRFNQIGluIGxvdyBwb3dlciBjb25zdW1pbmcgc3RhdGUuCisgKi8KK2ludCBzbGVlcF9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHUzMiBkd19jbWQsCisJCSAgICAgdm9pZCAqcGFyZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisjaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJSCisJc3RydWN0IGRlaF9tZ3IgKmhkZWhfbWdyOworI2VuZGlmIC8qIENPTkZJR19USURTUEJSSURHRV9OVEZZX1BXUkVSUiAqLworCXUxNiB0aW1lb3V0ID0gUFdSU1RTVF9USU1FT1VUIC8gMTA7CisJdTMyIHB3cl9zdGF0ZSwgdGFyZ2V0X3B3cl9zdGF0ZTsKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJLyogQ2hlY2sgaWYgc2xlZXAgY29kZSBpcyB2YWxpZCAqLworCWlmICgoZHdfY21kICE9IFBXUl9ERUVQU0xFRVApICYmIChkd19jbWQgIT0gUFdSX0VNRVJHRU5DWURFRVBTTEVFUCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlKSB7CisJY2FzZSBCUkRfUlVOTklORzoKKwkJb21hcF9tYm94X3NhdmVfY3R4KGRldl9jb250ZXh0LT5tYm94KTsKKwkJaWYgKGRzcF90ZXN0X3NsZWVwc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSB7CisJCQlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jb250ZXh0LCBNQlhfUE1fRFNQSElCRVJOQVRFKTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiUE06ICVzIC0gc2VudCBoaWJlcm5hdGUgY21kIHRvIERTUFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQl0YXJnZXRfcHdyX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOworCQl9IGVsc2UgeworCQkJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX0RTUFJFVEVOVElPTik7CisJCQl0YXJnZXRfcHdyX3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOworCQl9CisJCWJyZWFrOworCWNhc2UgQlJEX1JFVEVOVElPTjoKKwkJb21hcF9tYm94X3NhdmVfY3R4KGRldl9jb250ZXh0LT5tYm94KTsKKwkJaWYgKGRzcF90ZXN0X3NsZWVwc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSB7CisJCQlzbV9pbnRlcnJ1cHRfZHNwKGRldl9jb250ZXh0LCBNQlhfUE1fRFNQSElCRVJOQVRFKTsKKwkJCXRhcmdldF9wd3Jfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgQlJEX0hJQkVSTkFUSU9OOgorCWNhc2UgQlJEX0RTUF9ISUJFUk5BVElPTjoKKwkJLyogQWxyZWFkeSBpbiBIaWJlcm5hdGlvbiwgc28ganVzdCByZXR1cm4gKi8KKwkJZGV2X2RiZyhicmlkZ2UsICJQTTogJXMgLSBEU1AgYWxyZWFkeSBpbiBoaWJlcm5hdGlvblxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBCUkRfU1RPUFBFRDoKKwkJZGV2X2RiZyhicmlkZ2UsICJQTTogJXMgLSBCb2FyZCBpbiBTVE9QIHN0YXRlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWRldl9kYmcoYnJpZGdlLCAiUE06ICVzIC0gQnJpZGdlIGluIElsbGVnYWwgc3RhdGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKiBHZXQgdGhlIFBSQ00gRFNQIHBvd2VyIGRvbWFpbiBzdGF0dXMgKi8KKwlwd3Jfc3RhdGUgPSAoKnBkYXRhLT5kc3BfcHJtX3JlYWQpKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMl9QTV9QV1NUU1QpICYKKwkJCQkJCU9NQVBfUE9XRVJTVEFURVNUX01BU0s7CisKKwkvKiBXYWl0IGZvciBEU1AgdG8gbW92ZSBpbnRvIHRhcmdldCBwb3dlciBzdGF0ZSAqLworCXdoaWxlICgocHdyX3N0YXRlICE9IHRhcmdldF9wd3Jfc3RhdGUpICYmIC0tdGltZW91dCkgeworCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMTApKSB7CisJCQlwcl9lcnIoIldhaXRpbmcgZm9yIERTUCB0byBTdXNwZW5kIGludGVycnVwdGVkXG4iKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0KKwkJcHdyX3N0YXRlID0gKCpwZGF0YS0+ZHNwX3BybV9yZWFkKShPTUFQMzQzMF9JVkEyX01PRCwKKwkJCQkJT01BUDJfUE1fUFdTVFNUKSAmIE9NQVBfUE9XRVJTVEFURVNUX01BU0s7CisJfQorCisJaWYgKCF0aW1lb3V0KSB7CisJCXByX2VycigiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBEU1Agb2ZmIG1vZGUsIHN0YXRlICV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIHB3cl9zdGF0ZSk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX05URllfUFdSRVJSCisJCWRldl9nZXRfZGVoX21ncihkZXZfY29udGV4dC0+aGRldl9vYmosICZoZGVoX21ncik7CisJCWJyaWRnZV9kZWhfbm90aWZ5KGhkZWhfbWdyLCBEU1BfUFdSRVJST1IsIDApOworI2VuZGlmIC8qIENPTkZJR19USURTUEJSSURHRV9OVEZZX1BXUkVSUiAqLworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9IGVsc2UgeworCQkvKiBVcGRhdGUgdGhlIEJyaWRnZXIgRHJpdmVyIHN0YXRlICovCisJCWlmIChkc3BfdGVzdF9zbGVlcHN0YXRlID09IFBXUkRNX1BPV0VSX09GRikKKwkJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfSElCRVJOQVRJT047CisJCWVsc2UKKwkJCWRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPSBCUkRfUkVURU5USU9OOworCisJCS8qIERpc2FibGUgd2R0IG9uIGhpYmVybmF0aW9uLiAqLworCQlkc3Bfd2R0X2VuYWJsZShmYWxzZSk7CisKKwkJLyogVHVybiBvZmYgRFNQIFBlcmlwaGVyYWwgY2xvY2tzICovCisJCXN0YXR1cyA9IGRzcF9jbG9ja19kaXNhYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwkJZWxzZSBpZiAodGFyZ2V0X3B3cl9zdGF0ZSA9PSBQV1JETV9QT1dFUl9PRkYpIHsKKwkJCS8qCisJCQkgKiBTZXQgdGhlIE9QUCB0byBsb3cgbGV2ZWwgYmVmb3JlIG1vdmluZyB0byBPRkYgbW9kZQorCQkJICovCisJCQlpZiAocGRhdGEtPmRzcF9zZXRfbWluX29wcCkKKwkJCQkoKnBkYXRhLT5kc3Bfc2V0X21pbl9vcHApIChWREQxX09QUDEpOworCQl9CisjZW5kaWYgLyogQ09ORklHX1RJRFNQQlJJREdFX0RWRlMgKi8KKwl9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSB3YWtlX2RzcCA9PT09PT09PQorICogIAlXYWtlIHVwIERTUCBmcm9tIHNsZWVwLgorICovCitpbnQgd2FrZV9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHZvaWQgKnBhcmdzKQoreworCWludCBzdGF0dXMgPSAwOworI2lmZGVmIENPTkZJR19QTQorCisJLyogQ2hlY2sgdGhlIGJvYXJkIHN0YXRlLCBpZiBpdCBpcyBub3QgJ1NMRUVQJyB0aGVuIHJldHVybiAqLworCWlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SVU5OSU5HIHx8CisJICAgIGRldl9jb250ZXh0LT5kd19icmRfc3RhdGUgPT0gQlJEX1NUT1BQRUQpIHsKKwkJLyogVGhlIERldmljZSBpcyBpbiAnUkVUJyBvciAnT0ZGJyBzdGF0ZSBhbmQgQnJpZGdlIHN0YXRlIGlzIG5vdAorCQkgKiAnU0xFRVAnLCB0aGlzIG1lYW5zIHN0YXRlIGluY29uc2lzdGVuY3ksIHNvIHJldHVybiAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTZW5kIGEgd2FrZXVwIG1lc3NhZ2UgdG8gRFNQICovCisJc21faW50ZXJydXB0X2RzcChkZXZfY29udGV4dCwgTUJYX1BNX0RTUFdBS0VVUCk7CisKKwkvKiBTZXQgdGhlIGRldmljZSBzdGF0ZSB0byBSVU5OSUcgKi8KKwlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gQlJEX1JVTk5JTkc7CisjZW5kaWYgLyogQ09ORklHX1BNICovCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkc3BfcGVyaXBoZXJhbF9jbGtfY3RybCA9PT09PT09PQorICogIAlFbmFibGUvRGlzYWJsZSB0aGUgRFNQIHBlcmlwaGVyYWwgY2xvY2tzIGFzIG5lZWRlZC4uCisgKi8KK2ludCBkc3BfcGVyaXBoZXJhbF9jbGtfY3RybChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCwKKwkJCQkgICB2b2lkICpwYXJncykKK3sKKwl1MzIgZXh0X2NsayA9IDA7CisJdTMyIGV4dF9jbGtfaWQgPSAwOworCXUzMiBleHRfY2xrX2NtZCA9IDA7CisJdTMyIGNsa19pZF9pbmRleCA9IE1CWF9QTV9NQVhfUkVTT1VSQ0VTOworCXUzMiB0bXBfaW5kZXg7CisJdTMyIGRzcF9wZXJfY2xrc19iZWZvcmU7CisJaW50IHN0YXR1cyA9IDA7CisKKwlkc3BfcGVyX2Nsa3NfYmVmb3JlID0gZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrczsKKworCWV4dF9jbGsgPSAodTMyKSAqKCh1MzIgKikgcGFyZ3MpOworCWV4dF9jbGtfaWQgPSBleHRfY2xrICYgTUJYX1BNX0NMS19JRE1BU0s7CisKKwkvKiBwcm9jZXNzIHRoZSBwb3dlciBtZXNzYWdlIC0tIFRPRE8sIGtlZXAgaXQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiAqLworCWZvciAodG1wX2luZGV4ID0gMDsgdG1wX2luZGV4IDwgTUJYX1BNX01BWF9SRVNPVVJDRVM7IHRtcF9pbmRleCsrKSB7CisJCWlmIChleHRfY2xrX2lkID09IGJwd3JfY2xraWRbdG1wX2luZGV4XSkgeworCQkJY2xrX2lkX2luZGV4ID0gdG1wX2luZGV4OworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogVE9ETyAtLSBBc3NlcnQgbWF5IGJlIGEgdG9vIGhhcmQgcmVzdHJpY3Rpb24gaGVyZS4uIE1heSBiZSB3ZSBzaG91bGQKKwkgKiBqdXN0IHJldHVybiB3aXRoIGZhaWx1cmUgd2hlbiB0aGUgQ0xLIElEIGRvZXMgbm90IG1hdGNoICovCisJLyogREJDX0FTU0VSVChjbGtfaWRfaW5kZXggPCBNQlhfUE1fTUFYX1JFU09VUkNFUyk7ICovCisJaWYgKGNsa19pZF9pbmRleCA9PSBNQlhfUE1fTUFYX1JFU09VUkNFUykgeworCQkvKiByZXR1cm4gd2l0aCBhIG1vcmUgbWVhbmluZ2Z1bGwgZXJyb3IgY29kZSAqLworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlleHRfY2xrX2NtZCA9IChleHRfY2xrID4+IE1CWF9QTV9DTEtfQ01EU0hJRlQpICYgTUJYX1BNX0NMS19DTURNQVNLOworCXN3aXRjaCAoZXh0X2Nsa19jbWQpIHsKKwljYXNlIEJQV1JfRElTQUJMRV9DTE9DSzoKKwkJc3RhdHVzID0gZHNwX2Nsa19kaXNhYmxlKGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsayk7CisJCWRzcF9jbGtfd2FrZXVwX2V2ZW50X2N0cmwoYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrX2lkLAorCQkJCQkgIGZhbHNlKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCShkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKSAmPQorCQkJCSh+KCh1MzIpICgxIDw8IGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsaykpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEJQV1JfRU5BQkxFX0NMT0NLOgorCQlzdGF0dXMgPSBkc3BfY2xrX2VuYWJsZShicHdyX2Nsa3NbY2xrX2lkX2luZGV4XS5jbGspOworCQlkc3BfY2xrX3dha2V1cF9ldmVudF9jdHJsKGJwd3JfY2xrc1tjbGtfaWRfaW5kZXhdLmNsa19pZCwgdHJ1ZSk7CisJCWlmICghc3RhdHVzKQorCQkJKGRldl9jb250ZXh0LT5kc3BfcGVyX2Nsa3MpIHw9CisJCQkJKDEgPDwgYnB3cl9jbGtzW2Nsa19pZF9pbmRleF0uY2xrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogVW5zdXBwb3J0ZWQgQ01EXG4iLCBfX2Z1bmNfXyk7CisJCS8qIHVuc3VwcG9ydGVkIGNtZCAqLworCQkvKiBUT0RPIC0tIHByb3ZpZGUgc3VwcG9ydCBmb3IgQVVUT0lETEUgRW5hYmxlL0Rpc2FibGUKKwkJICogY29tbWFuZHMgKi8KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PXByZV9zY2FsZV9kc3A9PT09PT09PQorICogIFNlbmRzIHByZXNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AKKyAqCisgKi8KK2ludCBwcmVfc2NhbGVfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LCB2b2lkICpwYXJncykKK3sKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCXUzMiBsZXZlbDsKKwl1MzIgdm9sdGFnZV9kb21haW47CisKKwl2b2x0YWdlX2RvbWFpbiA9ICooKHUzMiAqKSBwYXJncyk7CisJbGV2ZWwgPSAqKCh1MzIgKikgcGFyZ3MgKyAxKTsKKworCWRldl9kYmcoYnJpZGdlLCAiT1BQOiAlcyB2b2x0YWdlX2RvbWFpbiA9ICV4LCBsZXZlbCA9IDB4JXhcbiIsCisJCV9fZnVuY19fLCB2b2x0YWdlX2RvbWFpbiwgbGV2ZWwpOworCWlmICgoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfSElCRVJOQVRJT04pIHx8CisJICAgIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SRVRFTlRJT04pIHx8CisJICAgIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9EU1BfSElCRVJOQVRJT04pKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiT1BQOiAlcyBJVkEgaW4gc2xlZXAuIE5vIG1lc3NhZ2UgdG8gRFNQXG4iKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICgoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfUlVOTklORykpIHsKKwkJLyogU2VuZCBhIHByZW5vdGlmaWNhdGlvIHRvIERTUCAqLworCQlkZXZfZGJnKGJyaWRnZSwgIk9QUDogJXMgc2VudCBub3RpZmljYXRpb24gdG8gRFNQXG4iLCBfX2Z1bmNfXyk7CisJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9TRVRQT0lOVF9QUkVOT1RJRlkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVQRVJNOworCX0KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PXBvc3Rfc2NhbGVfZHNwPT09PT09PT0KKyAqICBTZW5kcyBwb3N0c2NhbGUgbm90aWZpY2F0aW9uIHRvIERTUAorICoKKyAqLworaW50IHBvc3Rfc2NhbGVfZHNwKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQkJCXZvaWQgKnBhcmdzKQoreworCWludCBzdGF0dXMgPSAwOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJdTMyIGxldmVsOworCXUzMiB2b2x0YWdlX2RvbWFpbjsKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOworCisJc3RhdHVzID0gZGV2X2dldF9pb19tZ3IoZGV2X2NvbnRleHQtPmhkZXZfb2JqLCAmaGlvX21ncik7CisJaWYgKCFoaW9fbWdyKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXZvbHRhZ2VfZG9tYWluID0gKigodTMyICopIHBhcmdzKTsKKwlsZXZlbCA9ICooKHUzMiAqKSBwYXJncyArIDEpOworCWRldl9kYmcoYnJpZGdlLCAiT1BQOiAlcyB2b2x0YWdlX2RvbWFpbiA9ICV4LCBsZXZlbCA9IDB4JXhcbiIsCisJCV9fZnVuY19fLCB2b2x0YWdlX2RvbWFpbiwgbGV2ZWwpOworCWlmICgoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfSElCRVJOQVRJT04pIHx8CisJICAgIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SRVRFTlRJT04pIHx8CisJICAgIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9EU1BfSElCRVJOQVRJT04pKSB7CisJCS8qIFVwZGF0ZSB0aGUgT1BQIHZhbHVlIGluIHNoYXJlZCBtZW1vcnkgKi8KKwkJaW9fc2hfbXNldHRpbmcoaGlvX21nciwgU0hNX0NVUlJPUFAsICZsZXZlbCk7CisJCWRldl9kYmcoYnJpZGdlLCAiT1BQOiAlcyBJVkEgaW4gc2xlZXAuIFdyb3RlIHRvIHNobVxuIiwKKwkJCV9fZnVuY19fKTsKKwl9IGVsc2UgaWYgKChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SVU5OSU5HKSkgeworCQkvKiBVcGRhdGUgdGhlIE9QUCB2YWx1ZSBpbiBzaGFyZWQgbWVtb3J5ICovCisJCWlvX3NoX21zZXR0aW5nKGhpb19tZ3IsIFNITV9DVVJST1BQLCAmbGV2ZWwpOworCQkvKiBTZW5kIGEgcG9zdCBub3RpZmljYXRpb24gdG8gRFNQICovCisJCXNtX2ludGVycnVwdF9kc3AoZGV2X2NvbnRleHQsIE1CWF9QTV9TRVRQT0lOVF9QT1NUTk9USUZZKTsKKwkJZGV2X2RiZyhicmlkZ2UsICJPUFA6ICVzIHdyb3RlIHRvIHNobS4gU2VudCBwb3N0IG5vdGlmaWNhdGlvbiAiCisJCQkidG8gRFNQXG4iLCBfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMgKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGRzcF9jbGtfd2FrZXVwX2V2ZW50X2N0cmwodTMyIGNsb2NrX2lkLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgaXZhMl9ncnBzZWw7CisJdTMyIG1wdV9ncnBzZWw7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqZWN0ID0gTlVMTDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY29udGV4dCA9IE5VTEw7CisKKwloZGV2X29iamVjdCA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfZmlyc3RfZGV2X29iamVjdCgpOworCWlmICghaGRldl9vYmplY3QpCisJCXJldHVybjsKKworCXN0YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmplY3QsICZicmlkZ2VfY29udGV4dCk7CisJaWYgKCFicmlkZ2VfY29udGV4dCkKKwkJcmV0dXJuOworCisJcmVzb3VyY2VzID0gYnJpZGdlX2NvbnRleHQtPnJlc291cmNlczsKKwlpZiAoIXJlc291cmNlcykKKwkJcmV0dXJuOworCisJc3dpdGNoIChjbG9ja19pZCkgeworCWNhc2UgQlBXUl9HUF9USU1FUjU6CisJCWl2YTJfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQltcHVfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlpZiAoZW5hYmxlKSB7CisJCQlpdmEyX2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUNV9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDVfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDVfTUFTSzsKKwkJCWl2YTJfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUNV9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfR1BfVElNRVI2OgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJbXB1X2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJaWYgKGVuYWJsZSkgeworCQkJaXZhMl9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ2X01BU0s7CisJCX0gZWxzZSB7CisJCQltcHVfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ2X01BU0s7CisJCQlpdmEyX2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDZfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX0dQX1RJTUVSNzoKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7CisJCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUN19NQVNLOworCQl9IGVsc2UgeworCQkJbXB1X2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUN19NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9HUFQ3X01BU0s7CisJCX0KKwkJd3JpdGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCXdyaXRlbChtcHVfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWJyZWFrOworCWNhc2UgQlBXUl9HUF9USU1FUjg6CisJCWl2YTJfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQltcHVfZ3Jwc2VsID0gcmVhZGwocmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlpZiAoZW5hYmxlKSB7CisJCQlpdmEyX2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOworCQkJbXB1X2dycHNlbCAmPSB+T01BUDM0MzBfR1JQU0VMX0dQVDhfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX0dQVDhfTUFTSzsKKwkJCWl2YTJfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfR1BUOF9NQVNLOworCQl9CisJCXdyaXRlbChpdmEyX2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19wZXJfcG1fYmFzZSArIDB4QTQpOworCQlicmVhazsKKwljYXNlIEJQV1JfTUNCU1AxOgorCQlpdmEyX2dycHNlbCA9IHJlYWRsKHJlc291cmNlcy0+ZHdfY29yZV9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X2NvcmVfcG1fYmFzZSArIDB4QTQpOworCQlpZiAoZW5hYmxlKSB7CisJCQlpdmEyX2dycHNlbCB8PSBPTUFQMzQzMF9HUlBTRUxfTUNCU1AxX01BU0s7CisJCQltcHVfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfTUNCU1AxX01BU0s7CisJCX0gZWxzZSB7CisJCQltcHVfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDFfTUFTSzsKKwkJCWl2YTJfZ3Jwc2VsICY9IH5PTUFQMzQzMF9HUlBTRUxfTUNCU1AxX01BU0s7CisJCX0KKwkJd3JpdGVsKGl2YTJfZ3Jwc2VsLCByZXNvdXJjZXMtPmR3X2NvcmVfcG1fYmFzZSArIDB4QTgpOworCQl3cml0ZWwobXB1X2dycHNlbCwgcmVzb3VyY2VzLT5kd19jb3JlX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX01DQlNQMjoKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDJfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDJfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQMl9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDJfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX01DQlNQMzoKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDNfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDNfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQM19NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDNfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX01DQlNQNDoKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDRfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDRfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQNF9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDRfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJY2FzZSBCUFdSX01DQlNQNToKKwkJaXZhMl9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CisJCW1wdV9ncnBzZWwgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBNCk7CisJCWlmIChlbmFibGUpIHsKKwkJCWl2YTJfZ3Jwc2VsIHw9IE9NQVAzNDMwX0dSUFNFTF9NQ0JTUDVfTUFTSzsKKwkJCW1wdV9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDVfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCW1wdV9ncnBzZWwgfD0gT01BUDM0MzBfR1JQU0VMX01DQlNQNV9NQVNLOworCQkJaXZhMl9ncnBzZWwgJj0gfk9NQVAzNDMwX0dSUFNFTF9NQ0JTUDVfTUFTSzsKKwkJfQorCQl3cml0ZWwoaXZhMl9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE4KTsKKwkJd3JpdGVsKG1wdV9ncnBzZWwsIHJlc291cmNlcy0+ZHdfcGVyX3BtX2Jhc2UgKyAweEE0KTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTBjMDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiB0aW9tYXBfaW8uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGlvIHJlYWQvd3JpdGUgcm91dGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3dkdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3BlY2lmaWMgdG8gdGhpcyBmaWxlICovCisjaW5jbHVkZSAiX3Rpb21hcC5oIgorI2luY2x1ZGUgIl90aW9tYXBfcHdyLmgiCisjaW5jbHVkZSAidGlvbWFwX2lvLmgiCisKK3N0YXRpYyB1MzIgdWxfZXh0X2Jhc2U7CitzdGF0aWMgdTMyIHVsX2V4dF9lbmQ7CisKK3N0YXRpYyB1MzIgc2htMF9lbmQ7CitzdGF0aWMgdTMyIHVsX2R5bl9leHRfYmFzZTsKK3N0YXRpYyB1MzIgdWxfdHJhY2Vfc2VjX2JlZzsKK3N0YXRpYyB1MzIgdWxfdHJhY2Vfc2VjX2VuZDsKK3N0YXRpYyB1MzIgdWxfc2htX2Jhc2VfdmlydDsKKworYm9vbCBzeW1ib2xzX3JlbG9hZGVkID0gdHJ1ZTsKKworLyoKKyAqICA9PT09PT09PSByZWFkX2V4dF9kc3BfZGF0YSA9PT09PT09PQorICogICAgICBDb3BpZXMgRFNQIGV4dGVybmFsIG1lbW9yeSBidWZmZXJzIHRvIHRoZSBob3N0IHNpZGUgYnVmZmVycy4KKyAqLworaW50IHJlYWRfZXh0X2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJICAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkgICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCA9IGRldl9jdHh0OworCXUzMiBvZmZzZXQ7CisJdTMyIHVsX3RsYl9iYXNlX3ZpcnQgPSAwOworCXUzMiB1bF9zaG1fb2Zmc2V0X3ZpcnQgPSAwOworCXUzMiBkd19leHRfcHJvZ192aXJ0X21lbTsKKwl1MzIgZHdfYmFzZV9hZGRyID0gZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyOworCWJvb2wgdHJhY2VfcmVhZCA9IGZhbHNlOworCisJaWYgKCF1bF9zaG1fYmFzZV92aXJ0KSB7CisJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJU0hNQkFTRU5BTUUsICZ1bF9zaG1fYmFzZV92aXJ0KTsKKwl9CisJREJDX0FTU0VSVCh1bF9zaG1fYmFzZV92aXJ0ICE9IDApOworCisJLyogQ2hlY2sgaWYgaXQgaXMgYSByZWFkIG9mIFRyYWNlIHNlY3Rpb24gKi8KKwlpZiAoIXN0YXR1cyAmJiAhdWxfdHJhY2Vfc2VjX2JlZykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJCURTUF9UUkFDRVNFQ19CRUcsICZ1bF90cmFjZV9zZWNfYmVnKTsKKwl9CisJREJDX0FTU0VSVCh1bF90cmFjZV9zZWNfYmVnICE9IDApOworCisJaWYgKCFzdGF0dXMgJiYgIXVsX3RyYWNlX3NlY19lbmQpIHsKKwkJc3RhdHVzID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQlEU1BfVFJBQ0VTRUNfRU5ELCAmdWxfdHJhY2Vfc2VjX2VuZCk7CisJfQorCURCQ19BU1NFUlQodWxfdHJhY2Vfc2VjX2VuZCAhPSAwKTsKKworCWlmICghc3RhdHVzKSB7CisJCWlmICgoZHNwX2FkZHIgPD0gdWxfdHJhY2Vfc2VjX2VuZCkgJiYKKwkJICAgIChkc3BfYWRkciA+PSB1bF90cmFjZV9zZWNfYmVnKSkKKwkJCXRyYWNlX3JlYWQgPSB0cnVlOworCX0KKworCS8qIElmIHJlYWRpbmcgZnJvbSBUUkFDRSwgZm9yY2UgcmVtYXAvdW5tYXAgKi8KKwlpZiAodHJhY2VfcmVhZCAmJiBkd19iYXNlX2FkZHIpIHsKKwkJZHdfYmFzZV9hZGRyID0gMDsKKwkJZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyID0gMDsKKwl9CisKKwlpZiAoIWR3X2Jhc2VfYWRkcikgeworCQkvKiBJbml0aWFsaXplIHVsX2V4dF9iYXNlIGFuZCB1bF9leHRfZW5kICovCisJCXVsX2V4dF9iYXNlID0gMDsKKwkJdWxfZXh0X2VuZCA9IDA7CisKKwkJLyogR2V0IERZTkVYVF9CRUcsIEVYVF9CRUcgYW5kIEVYVF9FTkQuICovCisJCWlmICghc3RhdHVzICYmICF1bF9keW5fZXh0X2Jhc2UpIHsKKwkJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJCURZTkVYVEJBU0UsICZ1bF9keW5fZXh0X2Jhc2UpOworCQl9CisJCURCQ19BU1NFUlQodWxfZHluX2V4dF9iYXNlICE9IDApOworCisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJCQlFWFRCQVNFLCAmdWxfZXh0X2Jhc2UpOworCQl9CisJCURCQ19BU1NFUlQodWxfZXh0X2Jhc2UgIT0gMCk7CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJCUVYVEVORCwgJnVsX2V4dF9lbmQpOworCQl9CisJCURCQ19BU1NFUlQodWxfZXh0X2VuZCAhPSAwKTsKKworCQkvKiBUcmFjZSBidWZmZXIgaXMgcmlnaHQgYWZ0ZXIgdGhlIHNobSBTRUcwLAorCQkgKiAgc28gc2V0IHRoZSBiYXNlIGFkZHJlc3MgdG8gU0hNQkFTRSAqLworCQlpZiAodHJhY2VfcmVhZCkgeworCQkJdWxfZXh0X2Jhc2UgPSB1bF9zaG1fYmFzZV92aXJ0OworCQkJdWxfZXh0X2VuZCA9IHVsX3RyYWNlX3NlY19lbmQ7CisJCX0KKworCQlEQkNfQVNTRVJUKHVsX2V4dF9lbmQgIT0gMCk7CisJCURCQ19BU1NFUlQodWxfZXh0X2VuZCA+IHVsX2V4dF9iYXNlKTsKKworCQlpZiAodWxfZXh0X2VuZCA8IHVsX2V4dF9iYXNlKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCWlmICghc3RhdHVzKSB7CisJCQl1bF90bGJfYmFzZV92aXJ0ID0KKwkJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS51bF9kc3BfdmEgKiBEU1BXT1JEU0laRTsKKwkJCURCQ19BU1NFUlQodWxfdGxiX2Jhc2VfdmlydCA8PSB1bF9zaG1fYmFzZV92aXJ0KTsKKwkJCWR3X2V4dF9wcm9nX3ZpcnRfbWVtID0KKwkJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS51bF9ncHBfdmE7CisKKwkJCWlmICghdHJhY2VfcmVhZCkgeworCQkJCXVsX3NobV9vZmZzZXRfdmlydCA9CisJCQkJICAgIHVsX3NobV9iYXNlX3ZpcnQgLSB1bF90bGJfYmFzZV92aXJ0OworCQkJCXVsX3NobV9vZmZzZXRfdmlydCArPQorCQkJCSAgICBQR19BTElHTl9ISUdIKHVsX2V4dF9lbmQgLSB1bF9keW5fZXh0X2Jhc2UgKworCQkJCQkJICAxLCBIV19QQUdFX1NJWkU2NEtCKTsKKwkJCQlkd19leHRfcHJvZ192aXJ0X21lbSAtPSB1bF9zaG1fb2Zmc2V0X3ZpcnQ7CisJCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0gKz0KKwkJCQkgICAgKHVsX2V4dF9iYXNlIC0gdWxfZHluX2V4dF9iYXNlKTsKKwkJCQlkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIgPQorCQkJCSAgICBkd19leHRfcHJvZ192aXJ0X21lbTsKKworCQkJCS8qCisJCQkJICogVGhpcyBkd19kc3BfZXh0X2Jhc2VfYWRkciB3aWxsIGdldCBjbGVhcmVkCisJCQkJICogb25seSB3aGVuIHRoZSBib2FyZCBpcyBzdG9wcGVkLgorCQkJCSovCisJCQkJaWYgKCFkZXZfY29udGV4dC0+ZHdfZHNwX2V4dF9iYXNlX2FkZHIpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0KKworCQkJZHdfYmFzZV9hZGRyID0gZHdfZXh0X3Byb2dfdmlydF9tZW07CisJCX0KKwl9CisKKwlpZiAoIWR3X2Jhc2VfYWRkciB8fCAhdWxfZXh0X2Jhc2UgfHwgIXVsX2V4dF9lbmQpCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCW9mZnNldCA9IGRzcF9hZGRyIC0gdWxfZXh0X2Jhc2U7CisKKwlpZiAoIXN0YXR1cykKKwkJbWVtY3B5KGhvc3RfYnVmZiwgKHU4ICopIGR3X2Jhc2VfYWRkciArIG9mZnNldCwgdWxfbnVtX2J5dGVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gd3JpdGVfZHNwX2RhdGEgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBDb3BpZXMgYnVmZmVycyB0byB0aGUgRFNQIGludGVybmFsL2V4dGVybmFsIG1lbW9yeS4KKyAqLworaW50IHdyaXRlX2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkgIHUzMiBtZW1fdHlwZSkKK3sKKwl1MzIgb2Zmc2V0OworCXUzMiBkd19iYXNlX2FkZHIgPSBkZXZfY29udGV4dC0+ZHdfZHNwX2Jhc2VfYWRkcjsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlcyA9IGRldl9jb250ZXh0LT5yZXNvdXJjZXM7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGJhc2UxLCBiYXNlMiwgYmFzZTM7CisJYmFzZTEgPSBPTUFQX0RTUF9NRU0xX1NJWkU7CisJYmFzZTIgPSBPTUFQX0RTUF9NRU0yX0JBU0UgLSBPTUFQX0RTUF9NRU0xX0JBU0U7CisJYmFzZTMgPSBPTUFQX0RTUF9NRU0zX0JBU0UgLSBPTUFQX0RTUF9NRU0xX0JBU0U7CisKKwlpZiAoIXJlc291cmNlcykKKwkJcmV0dXJuIC1FUEVSTTsKKworCW9mZnNldCA9IGRzcF9hZGRyIC0gZGV2X2NvbnRleHQtPmR3X2RzcF9zdGFydF9hZGQ7CisJaWYgKG9mZnNldCA8IGJhc2UxKSB7CisJCWR3X2Jhc2VfYWRkciA9IE1FTV9MSU5FQVJfQUREUkVTUyhyZXNvdXJjZXMtPmR3X21lbV9iYXNlWzJdLAorCQkJCQkJICByZXNvdXJjZXMtPmR3X21lbV9sZW5ndGhbMl0pOworCX0gZWxzZSBpZiAob2Zmc2V0ID4gYmFzZTEgJiYgb2Zmc2V0IDwgYmFzZTIgKyBPTUFQX0RTUF9NRU0yX1NJWkUpIHsKKwkJZHdfYmFzZV9hZGRyID0gTUVNX0xJTkVBUl9BRERSRVNTKHJlc291cmNlcy0+ZHdfbWVtX2Jhc2VbM10sCisJCQkJCQkgIHJlc291cmNlcy0+ZHdfbWVtX2xlbmd0aFszXSk7CisJCW9mZnNldCA9IG9mZnNldCAtIGJhc2UyOworCX0gZWxzZSBpZiAob2Zmc2V0ID49IGJhc2UyICsgT01BUF9EU1BfTUVNMl9TSVpFICYmCisJCSAgIG9mZnNldCA8IGJhc2UzICsgT01BUF9EU1BfTUVNM19TSVpFKSB7CisJCWR3X2Jhc2VfYWRkciA9IE1FTV9MSU5FQVJfQUREUkVTUyhyZXNvdXJjZXMtPmR3X21lbV9iYXNlWzRdLAorCQkJCQkJICByZXNvdXJjZXMtPmR3X21lbV9sZW5ndGhbNF0pOworCQlvZmZzZXQgPSBvZmZzZXQgLSBiYXNlMzsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlpZiAodWxfbnVtX2J5dGVzKQorCQltZW1jcHkoKHU4ICopIChkd19iYXNlX2FkZHIgKyBvZmZzZXQpLCBob3N0X2J1ZmYsIHVsX251bV9ieXRlcyk7CisJZWxzZQorCQkqKCh1MzIgKikgaG9zdF9idWZmKSA9IGR3X2Jhc2VfYWRkciArIG9mZnNldDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gd3JpdGVfZXh0X2RzcF9kYXRhID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgQ29waWVzIGJ1ZmZlcnMgdG8gdGhlIGV4dGVybmFsIG1lbW9yeS4KKyAqCisgKi8KK2ludCB3cml0ZV9leHRfZHNwX2RhdGEoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkgICAgICB1OCAqaG9zdF9idWZmLCB1MzIgZHNwX2FkZHIsCisJCQkgICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUsCisJCQkgICAgICBib29sIGR5bmFtaWNfbG9hZCkKK3sKKwl1MzIgZHdfYmFzZV9hZGRyID0gZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyOworCXUzMiBkd19vZmZzZXQgPSAwOworCXU4IHRlbXBfYnl0ZTEsIHRlbXBfYnl0ZTI7CisJdTggcmVtYWluX2J5dGVbNF07CisJczMyIGk7CisJaW50IHJldCA9IDA7CisJdTMyIGR3X2V4dF9wcm9nX3ZpcnRfbWVtOworCXUzMiB1bF90bGJfYmFzZV92aXJ0ID0gMDsKKwl1MzIgdWxfc2htX29mZnNldF92aXJ0ID0gMDsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKmhvc3RfcmVzID0gZGV2X2NvbnRleHQtPnJlc291cmNlczsKKwlib29sIHRyYWNlX2xvYWQgPSBmYWxzZTsKKwl0ZW1wX2J5dGUxID0gMHgwOworCXRlbXBfYnl0ZTIgPSAweDA7CisKKwlpZiAoc3ltYm9sc19yZWxvYWRlZCkgeworCQkvKiBDaGVjayBpZiBpdCBpcyBhIGxvYWQgdG8gVHJhY2Ugc2VjdGlvbiAqLworCQlyZXQgPSBkZXZfZ2V0X3N5bWJvbChkZXZfY29udGV4dC0+aGRldl9vYmosCisJCQkJICAgICBEU1BfVFJBQ0VTRUNfQkVHLCAmdWxfdHJhY2Vfc2VjX2JlZyk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gZGV2X2dldF9zeW1ib2woZGV2X2NvbnRleHQtPmhkZXZfb2JqLAorCQkJCQkgICAgIERTUF9UUkFDRVNFQ19FTkQsCisJCQkJCSAgICAgJnVsX3RyYWNlX3NlY19lbmQpOworCX0KKwlpZiAoIXJldCkgeworCQlpZiAoKGRzcF9hZGRyIDw9IHVsX3RyYWNlX3NlY19lbmQpICYmCisJCSAgICAoZHNwX2FkZHIgPj0gdWxfdHJhY2Vfc2VjX2JlZykpCisJCQl0cmFjZV9sb2FkID0gdHJ1ZTsKKwl9CisKKwkvKiBJZiBkeW5hbWljLCBmb3JjZSByZW1hcC91bm1hcCAqLworCWlmICgoZHluYW1pY19sb2FkIHx8IHRyYWNlX2xvYWQpICYmIGR3X2Jhc2VfYWRkcikgeworCQlkd19iYXNlX2FkZHIgPSAwOworCQlNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoKHZvaWQgKikKKwkJCQkJIGRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkcik7CisJCWRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkciA9IDB4MDsKKwl9CisJaWYgKCFkd19iYXNlX2FkZHIpIHsKKwkJaWYgKHN5bWJvbHNfcmVsb2FkZWQpCisJCQkvKiBHZXQgU0hNX0JFRyAgRVhUX0JFRyBhbmQgRVhUX0VORC4gKi8KKwkJCXJldCA9IGRldl9nZXRfc3ltYm9sKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJICAgICBTSE1CQVNFTkFNRSwgJnVsX3NobV9iYXNlX3ZpcnQpOworCQlEQkNfQVNTRVJUKHVsX3NobV9iYXNlX3ZpcnQgIT0gMCk7CisJCWlmIChkeW5hbWljX2xvYWQpIHsKKwkJCWlmICghcmV0KSB7CisJCQkJaWYgKHN5bWJvbHNfcmVsb2FkZWQpCisJCQkJCXJldCA9CisJCQkJCSAgICBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwgRFlORVhUQkFTRSwKKwkJCQkJICAgICAmdWxfZXh0X2Jhc2UpOworCQkJfQorCQkJREJDX0FTU0VSVCh1bF9leHRfYmFzZSAhPSAwKTsKKwkJCWlmICghcmV0KSB7CisJCQkJLyogRFIgIE9NQVBTMDAwMTMyMzUgOiBETE1vZHVsZXMgYXJyYXkgbWF5IGJlCisJCQkJICogaW4gRVhUTUVNLiBJdCBpcyBleHBlY3RlZCB0aGF0IERZTkVYVE1FTSBhbmQKKwkJCQkgKiBFWFRNRU0gYXJlIGNvbnRpZ3VvdXMsIHNvIGNoZWNraW5nIGZvciB0aGUKKwkJCQkgKiB1cHBlciBib3VuZCBhdCBFWFRFTkQgc2hvdWxkIGJlIE9rLiAqLworCQkJCWlmIChzeW1ib2xzX3JlbG9hZGVkKQorCQkJCQlyZXQgPQorCQkJCQkgICAgZGV2X2dldF9zeW1ib2wKKwkJCQkJICAgIChkZXZfY29udGV4dC0+aGRldl9vYmosIEVYVEVORCwKKwkJCQkJICAgICAmdWxfZXh0X2VuZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3ltYm9sc19yZWxvYWRlZCkgeworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPQorCQkJCQkgICAgZGV2X2dldF9zeW1ib2wKKwkJCQkJICAgIChkZXZfY29udGV4dC0+aGRldl9vYmosIEVYVEJBU0UsCisJCQkJCSAgICAgJnVsX2V4dF9iYXNlKTsKKwkJCQlEQkNfQVNTRVJUKHVsX2V4dF9iYXNlICE9IDApOworCQkJCWlmICghcmV0KQorCQkJCQlyZXQgPQorCQkJCQkgICAgZGV2X2dldF9zeW1ib2wKKwkJCQkJICAgIChkZXZfY29udGV4dC0+aGRldl9vYmosIEVYVEVORCwKKwkJCQkJICAgICAmdWxfZXh0X2VuZCk7CisJCQl9CisJCX0KKwkJLyogVHJhY2UgYnVmZmVyIGl0IHJpZ2h0IGFmdGVyIHRoZSBzaG0gU0VHMCwgc28gc2V0IHRoZQorCQkgKiAgICAgIGJhc2UgYWRkcmVzcyB0byBTSE1CQVNFICovCisJCWlmICh0cmFjZV9sb2FkKQorCQkJdWxfZXh0X2Jhc2UgPSB1bF9zaG1fYmFzZV92aXJ0OworCisJCURCQ19BU1NFUlQodWxfZXh0X2VuZCAhPSAwKTsKKwkJREJDX0FTU0VSVCh1bF9leHRfZW5kID4gdWxfZXh0X2Jhc2UpOworCQlpZiAodWxfZXh0X2VuZCA8IHVsX2V4dF9iYXNlKQorCQkJcmV0ID0gLUVQRVJNOworCisJCWlmICghcmV0KSB7CisJCQl1bF90bGJfYmFzZV92aXJ0ID0KKwkJCSAgICBkZXZfY29udGV4dC0+YXRsYl9lbnRyeVswXS51bF9kc3BfdmEgKiBEU1BXT1JEU0laRTsKKwkJCURCQ19BU1NFUlQodWxfdGxiX2Jhc2VfdmlydCA8PSB1bF9zaG1fYmFzZV92aXJ0KTsKKworCQkJaWYgKHN5bWJvbHNfcmVsb2FkZWQpIHsKKwkJCQlyZXQgPSBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwKKwkJCQkJICAgICBEU1BfVFJBQ0VTRUNfRU5ELCAmc2htMF9lbmQpOworCQkJCWlmICghcmV0KSB7CisJCQkJCXJldCA9CisJCQkJCSAgICBkZXZfZ2V0X3N5bWJvbAorCQkJCQkgICAgKGRldl9jb250ZXh0LT5oZGV2X29iaiwgRFlORVhUQkFTRSwKKwkJCQkJICAgICAmdWxfZHluX2V4dF9iYXNlKTsKKwkJCQl9CisJCQl9CisJCQl1bF9zaG1fb2Zmc2V0X3ZpcnQgPQorCQkJICAgIHVsX3NobV9iYXNlX3ZpcnQgLSB1bF90bGJfYmFzZV92aXJ0OworCQkJaWYgKHRyYWNlX2xvYWQpIHsKKwkJCQlkd19leHRfcHJvZ192aXJ0X21lbSA9CisJCQkJICAgIGRldl9jb250ZXh0LT5hdGxiX2VudHJ5WzBdLnVsX2dwcF92YTsKKwkJCX0gZWxzZSB7CisJCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0gPSBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV07CisJCQkJZHdfZXh0X3Byb2dfdmlydF9tZW0gKz0KKwkJCQkgICAgKHVsX2V4dF9iYXNlIC0gdWxfZHluX2V4dF9iYXNlKTsKKwkJCX0KKworCQkJZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyID0KKwkJCSAgICAodTMyKSBNRU1fTElORUFSX0FERFJFU1MoKHZvaWQgKikKKwkJCQkJCSAgICAgZHdfZXh0X3Byb2dfdmlydF9tZW0sCisJCQkJCQkgICAgIHVsX2V4dF9lbmQgLSB1bF9leHRfYmFzZSk7CisJCQlkd19iYXNlX2FkZHIgKz0gZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyOworCQkJLyogVGhpcyBkd19kc3BfZXh0X2Jhc2VfYWRkciB3aWxsIGdldCBjbGVhcmVkIG9ubHkgd2hlbgorCQkJICogdGhlIGJvYXJkIGlzIHN0b3BwZWQuICovCisJCQlpZiAoIWRldl9jb250ZXh0LT5kd19kc3BfZXh0X2Jhc2VfYWRkcikKKwkJCQlyZXQgPSAtRVBFUk07CisJCX0KKwl9CisJaWYgKCFkd19iYXNlX2FkZHIgfHwgIXVsX2V4dF9iYXNlIHx8ICF1bF9leHRfZW5kKQorCQlyZXQgPSAtRVBFUk07CisKKwlpZiAoIXJldCkgeworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJcmVtYWluX2J5dGVbaV0gPSAweDA7CisKKwkJZHdfb2Zmc2V0ID0gZHNwX2FkZHIgLSB1bF9leHRfYmFzZTsKKwkJLyogQWxzbyBtYWtlIHN1cmUgdGhlIGRzcF9hZGRyIGlzIDwgdWxfZXh0X2VuZCAqLworCQlpZiAoZHNwX2FkZHIgPiB1bF9leHRfZW5kIHx8IGR3X29mZnNldCA+IGRzcF9hZGRyKQorCQkJcmV0ID0gLUVQRVJNOworCX0KKwlpZiAoIXJldCkgeworCQlpZiAodWxfbnVtX2J5dGVzKQorCQkJbWVtY3B5KCh1OCAqKSBkd19iYXNlX2FkZHIgKyBkd19vZmZzZXQsIGhvc3RfYnVmZiwKKwkJCSAgICAgICB1bF9udW1fYnl0ZXMpOworCQllbHNlCisJCQkqKCh1MzIgKikgaG9zdF9idWZmKSA9IGR3X2Jhc2VfYWRkciArIGR3X29mZnNldDsKKwl9CisJLyogVW5tYXAgaGVyZSB0byBmb3JjZSByZW1hcCBmb3Igb3RoZXIgRXh0IGxvYWRzICovCisJaWYgKChkeW5hbWljX2xvYWQgfHwgdHJhY2VfbG9hZCkgJiYgZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyKSB7CisJCU1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUygodm9pZCAqKQorCQkJCQkgZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyKTsKKwkJZGV2X2NvbnRleHQtPmR3X2RzcF9leHRfYmFzZV9hZGRyID0gMHgwOworCX0KKwlzeW1ib2xzX3JlbG9hZGVkID0gZmFsc2U7CisJcmV0dXJuIHJldDsKK30KKworaW50IHNtX2ludGVycnVwdF9kc3Aoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsIHUxNiBtYl92YWwpCit7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwl1MzIgb3BwbGV2ZWwgPSAwOworI2VuZGlmCisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCW9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNmZ19ob3N0cmVzICpyZXNvdXJjZXMgPSBkZXZfY29udGV4dC0+cmVzb3VyY2VzOworCWludCBzdGF0dXMgPSAwOworCXUzMiB0ZW1wOworCisJaWYgKCFkZXZfY29udGV4dC0+bWJveCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJlc291cmNlcykKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9EU1BfSElCRVJOQVRJT04gfHwKKwkgICAgZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfSElCRVJOQVRJT04pIHsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCQlpZiAocGRhdGEtPmRzcF9nZXRfb3BwKQorCQkJb3BwbGV2ZWwgPSAoKnBkYXRhLT5kc3BfZ2V0X29wcCkgKCk7CisJCWlmIChvcHBsZXZlbCA9PSBWREQxX09QUDEpIHsKKwkJCWlmIChwZGF0YS0+ZHNwX3NldF9taW5fb3BwKQorCQkJCSgqcGRhdGEtPmRzcF9zZXRfbWluX29wcCkgKFZERDFfT1BQMik7CisJCX0KKyNlbmRpZgorCQkvKiBSZXN0YXJ0IHRoZSBwZXJpcGhlcmFsIGNsb2NrcyAqLworCQlkc3BfY2xvY2tfZW5hYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKKwkJZHNwX3dkdF9lbmFibGUodHJ1ZSk7CisKKwkJLyoKKwkJICogMjowIEFVVE9fSVZBMl9EUExMIC0gRW5hYmxpbmcgSVZBMiBEUExMIGF1dG8gY29udHJvbAorCQkgKiAgICAgaW4gQ01fQVVUT0lETEVfUExMX0lWQTIgcmVnaXN0ZXIKKwkJICovCisJCSgqcGRhdGEtPmRzcF9jbV93cml0ZSkoMSA8PCBPTUFQMzQzMF9BVVRPX0lWQTJfRFBMTF9TSElGVCwKKwkJCQlPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKTsKKworCQkvKgorCQkgKiA3OjQgSVZBMl9EUExMX0ZSRVFTRUwgLSBJVkEyIGludGVybmFsIGZycSBzZXQgdG8KKwkJICogICAgIDAuNzUgTUh6IC0gMS4wIE1IegorCQkgKiAyOjAgRU5fSVZBMl9EUExMIC0gRW5hYmxlIElWQTIgRFBMTCBpbiBsb2NrIG1vZGUKKwkJICovCisJCSgqcGRhdGEtPmRzcF9jbV9ybXdfYml0cykoT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSyB8CisJCQkJT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCisJCQkJMHgzIDw8IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX1NISUZUIHwKKwkJCQkweDcgPDwgT01BUDM0MzBfRU5fSVZBMl9EUExMX1NISUZULAorCQkJCU9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpOworCisJCS8qIFJlc3RvcmUgbWFpbGJveCBzZXR0aW5ncyAqLworCQlvbWFwX21ib3hfcmVzdG9yZV9jdHgoZGV2X2NvbnRleHQtPm1ib3gpOworCisJCS8qIEFjY2VzcyBNTVUgU1lTIENPTkZJRyByZWdpc3RlciB0byBnZW5lcmF0ZSBhIHNob3J0IHdha2V1cCAqLworCQl0ZW1wID0gcmVhZGwocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UgKyAweDEwKTsKKworCQlkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID0gQlJEX1JVTk5JTkc7CisJfSBlbHNlIGlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlID09IEJSRF9SRVRFTlRJT04pIHsKKwkJLyogUmVzdGFydCB0aGUgcGVyaXBoZXJhbCBjbG9ja3MgKi8KKwkJZHNwX2Nsb2NrX2VuYWJsZV9hbGwoZGV2X2NvbnRleHQtPmRzcF9wZXJfY2xrcyk7CisJfQorCisJc3RhdHVzID0gb21hcF9tYm94X21zZ19zZW5kKGRldl9jb250ZXh0LT5tYm94LCBtYl92YWwpOworCisJaWYgKHN0YXR1cykgeworCQlwcl9lcnIoIm9tYXBfbWJveF9tc2dfc2VuZCBGYWlsIGFuZCBzdGF0dXMgPSAlZFxuIiwgc3RhdHVzKTsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXBfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2YxOWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwX2lvLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiB0aW9tYXBfaW8uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9ucywgdHlwZXMgYW5kIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBpbyAoci93IGV4dGVybmFsIG1lbSkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfVElPTUFQX0lPXworI2RlZmluZSBfVElPTUFQX0lPXworCisvKgorICogU3ltYm9sIHRoYXQgZGVmaW5lcyBiZWdpbm5pbmcgb2Ygc2hhcmVkIG1lbW9yeS4KKyAqIEZvciBPTUFQIChIZWxlbikgdGhpcyBpcyB0aGUgRFNQIFZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mIFNEUkFNLgorICogVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJvZ3JhbSBEU1AgTU1VIHRvIG1hcCBEU1AgVmlydCB0byBHUFAgcGh5cy4KKyAqIChzZWUgZHNwTW11VGxiRW50cnkoKSkuCisgKi8KKyNkZWZpbmUgU0hNQkFTRU5BTUUgIlNITV9CRUciCisjZGVmaW5lIEVYVEJBU0UgICAgICJFWFRfQkVHIgorI2RlZmluZSBFWFRFTkQgICAgICAiX0VYVF9FTkQiCisjZGVmaW5lIERZTkVYVEJBU0UgICJfRFlORVhUX0JFRyIKKyNkZWZpbmUgRFlORVhURU5EICAgIl9EWU5FWFRfRU5EIgorI2RlZmluZSBJVkFFWFRNRU1CQVNFICAgIl9JVkFFWFRNRU1fQkVHIgorI2RlZmluZSBJVkFFWFRNRU1FTkQgICAiX0lWQUVYVE1FTV9FTkQiCisKKyNkZWZpbmUgRFNQX1RSQUNFU0VDX0JFRyAgIl9CUklER0VfVFJBQ0VfQkVHIgorI2RlZmluZSBEU1BfVFJBQ0VTRUNfRU5EICAiX0JSSURHRV9UUkFDRV9FTkQiCisKKyNkZWZpbmUgU1lTX1BVVENCRUcgICAgICAgICAgICAgICAiX1NZU19QVVRDQkVHIgorI2RlZmluZSBTWVNfUFVUQ0VORCAgICAgICAgICAgICAgICJfU1lTX1BVVENFTkQiCisjZGVmaW5lIEJSSURHRV9TWVNfUFVUQ19DVVJSRU5UICAgIl9CUklER0VfU1lTX1BVVENfY3VycmVudCIKKworI2RlZmluZSBXT1JEU1dBUF9FTkFCTEUgMHgzCS8qIEVuYWJsZSB3b3JkIHN3YXAgKi8KKworLyoKKyAqICA9PT09PT09PSByZWFkX2V4dF9kc3BfZGF0YSA9PT09PT09PQorICogIFJlYWRzIGl0IGZyb20gRFNQIEV4dGVybmFsIG1lbW9yeS4gVGhlIGV4dGVybmFsIG1lbW9yeSBmb3IgdGhlIERTUAorICogaXMgY29uZmlndXJlZCBieSB0aGUgY29tYmluYXRpb24gb2YgRFNQIE1NVSBhbmQgc2htIE1lbW9yeSBtYW5hZ2VyIGluIHRoZSBDREIKKyAqLworZXh0ZXJuIGludCByZWFkX2V4dF9kc3BfZGF0YShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3R5cGUpOworCisvKgorICogID09PT09PT09IHdyaXRlX2RzcF9kYXRhID09PT09PT09CisgKi8KK2V4dGVybiBpbnQgd3JpdGVfZHNwX2RhdGEoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2NvbnRleHQsCisJCQkJIHU4ICpob3N0X2J1ZmYsIHUzMiBkc3BfYWRkciwKKwkJCQkgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKKworLyoKKyAqICA9PT09PT09PSB3cml0ZV9leHRfZHNwX2RhdGEgPT09PT09PT0KKyAqICBXcml0ZXMgdG8gdGhlIERTUCBFeHRlcm5hbCBtZW1vcnkgZm9yIGV4dGVybmFsIHByb2dyYW0uCisgKiAgVGhlIGV4dCBtZW0gZm9yIHByb2dyYSBpcyBjb25maWd1cmVkIGJ5IHRoZSBjb21iaW5hdGlvbiBvZiBEU1AgTU1VIGFuZAorICogIHNobSBNZW1vcnkgbWFuYWdlciBpbiB0aGUgQ0RCCisgKi8KK2V4dGVybiBpbnQgd3JpdGVfZXh0X2RzcF9kYXRhKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCSAgICAgdTggKmhvc3RfYnVmZiwgdTMyIGRzcF9hZGRyLAorCQkJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlLAorCQkJCSAgICAgYm9vbCBkeW5hbWljX2xvYWQpOworCisvKgorICogPT09PT09PT0gd3JpdGVfZXh0MzJfYml0X2RzcF9kYXRhID09PT09PT09CisgKiBXcml0ZXMgMzIgYml0IGRhdGEgdG8gdGhlIGV4dGVybmFsIG1lbW9yeQorICovCitleHRlcm4gaW5saW5lIHZvaWQgd3JpdGVfZXh0MzJfYml0X2RzcF9kYXRhKGNvbnN0CisJCQkJCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jb250ZXh0LAorCQkJCQl1MzIgZHNwX2FkZHIsIHUzMiB2YWwpCit7CisJKih1MzIgKikgZHNwX2FkZHIgPSAoKGRldl9jb250ZXh0LT50Y193b3JkX3N3YXBfb24pID8gKCgodmFsIDw8IDE2KSAmCisJCQkJCQkJCSAweEZGRkYwMDAwKSB8CisJCQkJCQkJCSgodmFsID4+IDE2KSAmCisJCQkJCQkJCSAweDAwMDBGRkZGKSkgOgorCQkJICAgICAgdmFsKTsKK30KKworLyoKKyAqID09PT09PT09IHJlYWRfZXh0MzJfYml0X2RzcF9kYXRhID09PT09PT09CisgKiBSZWFkcyAzMiBiaXQgZGF0YSBmcm9tIHRoZSBleHRlcm5hbCBtZW1vcnkKKyAqLworZXh0ZXJuIGlubGluZSB1MzIgcmVhZF9leHQzMl9iaXRfZHNwX2RhdGEoY29uc3Qgc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkgICpkZXZfY29udGV4dCwgdTMyIGRzcF9hZGRyKQoreworCXUzMiByZXQ7CisJcmV0ID0gKih1MzIgKikgZHNwX2FkZHI7CisKKwlyZXQgPSAoKGRldl9jb250ZXh0LT50Y193b3JkX3N3YXBfb24pID8gKCgocmV0IDw8IDE2KQorCQkJCQkJICAmIDB4RkZGRjAwMDApIHwgKChyZXQgPj4gMTYpICYKKwkJCQkJCQkJICAgMHgwMDAwRkZGRikpCisJICAgICAgIDogcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogX1RJT01BUF9JT18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdWVfZGVoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzMDQxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3VlX2RlaC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogdWVfZGVoLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50cyB1cHBlciBlZGdlIERTUCBleGNlcHRpb24gaGFuZGxpbmcgKERFSCkgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVsaXBlIENvbnRyZXJhcworICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8cGxhdC9kbXRpbWVyLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlICJfdGlvbWFwLmgiCisjaW5jbHVkZSAiX2RlaC5oIgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvX3NtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS93ZHQuaD4KKworc3RhdGljIHUzMiBmYXVsdF9hZGRyOworCitzdGF0aWMgdm9pZCBtbXVfZmF1bHRfZHBjKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGVoX21nciAqZGVoID0gKHZvaWQgKilkYXRhOworCisJaWYgKCFkZWgpCisJCXJldHVybjsKKworCWJyaWRnZV9kZWhfbm90aWZ5KGRlaCwgRFNQX01NVUZBVUxULCAwKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG1tdV9mYXVsdF9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGVoX21nciAqZGVoID0gZGF0YTsKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsKKwl1MzIgZXZlbnQ7CisKKwlpZiAoIWRlaCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJcmVzb3VyY2VzID0gZGVoLT5oYnJpZGdlX2NvbnRleHQtPnJlc291cmNlczsKKwlpZiAoIXJlc291cmNlcykgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IEhvc3QgUmVzb3VyY2VzXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWh3X21tdV9ldmVudF9zdGF0dXMocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsICZldmVudCk7CisJaWYgKGV2ZW50ID09IEhXX01NVV9UUkFOU0xBVElPTl9GQVVMVCkgeworCQlod19tbXVfZmF1bHRfYWRkcl9yZWFkKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLCAmZmF1bHRfYWRkcik7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGV2ZW50PTB4JXgsIGZhdWx0X2FkZHI9MHgleFxuIiwgX19mdW5jX18sCisJCQkJZXZlbnQsIGZhdWx0X2FkZHIpOworCQkvKgorCQkgKiBTY2hlZHVsZSBhIERQQyBkaXJlY3RseS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlCisJCSAqIG5lY2Vzc2FyeSB0byBjaGVjayBpZiBEU1AgTU1VIGZhdWx0IGlzIGludGVuZGVkIGZvcgorCQkgKiBCcmlkZ2UuCisJCSAqLworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZWgtPmRwY190YXNrbGV0KTsKKworCQkvKiBEaXNhYmxlIHRoZSBNTVUgZXZlbnRzLCBlbHNlIG9uY2Ugd2UgY2xlYXIgaXQgd2lsbAorCQkgKiBzdGFydCB0byByYWlzZSBJTlRzIGFnYWluICovCisJCWh3X21tdV9ldmVudF9kaXNhYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLAorCQkJCUhXX01NVV9UUkFOU0xBVElPTl9GQVVMVCk7CisJfSBlbHNlIHsKKwkJaHdfbW11X2V2ZW50X2Rpc2FibGUocmVzb3VyY2VzLT5kd19kbW11X2Jhc2UsCisJCQkJSFdfTU1VX0FMTF9JTlRFUlJVUFRTKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgYnJpZGdlX2RlaF9jcmVhdGUoc3RydWN0IGRlaF9tZ3IgKipyZXRfZGVoLAorCQlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZGVoX21nciAqZGVoOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dCA9IE5VTEw7CisKKwkvKiAgTWVzc2FnZSBtYW5hZ2VyIHdpbGwgYmUgY3JlYXRlZCB3aGVuIGEgZmlsZSBpcyBsb2FkZWQsIHNpbmNlCisJICogIHNpemUgb2YgbWVzc2FnZSBidWZmZXIgaW4gc2hhcmVkIG1lbW9yeSBpcyBjb25maWd1cmFibGUgaW4KKwkgKiAgdGhlIGJhc2UgaW1hZ2UuICovCisJLyogR2V0IEJyaWRnZSBjb250ZXh0IGluZm8uICovCisJZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iaiwgJmhicmlkZ2VfY29udGV4dCk7CisJLyogQWxsb2NhdGUgSU8gbWFuYWdlciBvYmplY3Q6ICovCisJZGVoID0ga3phbGxvYyhzaXplb2YoKmRlaCksIEdGUF9LRVJORUwpOworCWlmICghZGVoKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIENyZWF0ZSBhbiBOVEZZIG9iamVjdCB0byBtYW5hZ2Ugbm90aWZpY2F0aW9ucyAqLworCWRlaC0+bnRmeV9vYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlaC0+bnRmeV9vYmopIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCW50ZnlfaW5pdChkZWgtPm50Znlfb2JqKTsKKworCS8qIENyZWF0ZSBhIE1NVWZhdWx0IERQQyAqLworCXRhc2tsZXRfaW5pdCgmZGVoLT5kcGNfdGFza2xldCwgbW11X2ZhdWx0X2RwYywgKHUzMikgZGVoKTsKKworCS8qIEZpbGwgaW4gY29udGV4dCBzdHJ1Y3R1cmUgKi8KKwlkZWgtPmhicmlkZ2VfY29udGV4dCA9IGhicmlkZ2VfY29udGV4dDsKKworCS8qIEluc3RhbGwgSVNSIGZ1bmN0aW9uIGZvciBEU1AgTU1VIGZhdWx0ICovCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoSU5UX0RTUF9NTVVfSVJRLCBtbXVfZmF1bHRfaXNyLCAwLAorCQkJIkRzcEJyaWRnZVx0aW9tbXUgZmF1bHQiLCBkZWgpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycjsKKworCSpyZXRfZGVoID0gZGVoOworCXJldHVybiAwOworCitlcnI6CisJYnJpZGdlX2RlaF9kZXN0cm95KGRlaCk7CisJKnJldF9kZWggPSBOVUxMOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBicmlkZ2VfZGVoX2Rlc3Ryb3koc3RydWN0IGRlaF9tZ3IgKmRlaCkKK3sKKwlpZiAoIWRlaCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBJZiBub3RpZmljYXRpb24gb2JqZWN0IGV4aXN0cywgZGVsZXRlIGl0ICovCisJaWYgKGRlaC0+bnRmeV9vYmopIHsKKwkJbnRmeV9kZWxldGUoZGVoLT5udGZ5X29iaik7CisJCWtmcmVlKGRlaC0+bnRmeV9vYmopOworCX0KKwkvKiBEaXNhYmxlIERTUCBNTVUgZmF1bHQgKi8KKwlmcmVlX2lycShJTlRfRFNQX01NVV9JUlEsIGRlaCk7CisKKwkvKiBGcmVlIERQQyBvYmplY3QgKi8KKwl0YXNrbGV0X2tpbGwoJmRlaC0+ZHBjX3Rhc2tsZXQpOworCisJLyogRGVhbGxvY2F0ZSB0aGUgREVIIG1hbmFnZXIgb2JqZWN0ICovCisJa2ZyZWUoZGVoKTsKKworCXJldHVybiAwOworfQorCitpbnQgYnJpZGdlX2RlaF9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IGRlaF9tZ3IgKmRlaCwgdTMyIGV2ZW50X21hc2ssCisJCXUzMiBub3RpZnlfdHlwZSwKKwkJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pCit7CisJaWYgKCFkZWgpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGV2ZW50X21hc2spCisJCXJldHVybiBudGZ5X3JlZ2lzdGVyKGRlaC0+bnRmeV9vYmosIGhub3RpZmljYXRpb24sCisJCQkJZXZlbnRfbWFzaywgbm90aWZ5X3R5cGUpOworCWVsc2UKKwkJcmV0dXJuIG50ZnlfdW5yZWdpc3RlcihkZWgtPm50Znlfb2JqLCBobm90aWZpY2F0aW9uKTsKK30KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKK3N0YXRpYyB2b2lkIG1tdV9mYXVsdF9wcmludF9zdGFjayhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCkKK3sKKwlzdHJ1Y3QgY2ZnX2hvc3RyZXMgKnJlc291cmNlczsKKwlzdHJ1Y3QgaHdfbW11X21hcF9hdHRyc190IG1hcF9hdHRycyA9IHsKKwkJLmVuZGlhbmlzbSA9IEhXX0xJVFRMRV9FTkRJQU4sCisJCS5lbGVtZW50X3NpemUgPSBIV19FTEVNX1NJWkUxNkJJVCwKKwkJLm1peGVkX3NpemUgPSBIV19NTVVfQ1BVRVMsCisJfTsKKwl2b2lkICpkdW1teV92YV9hZGRyOworCisJcmVzb3VyY2VzID0gZGV2X2NvbnRleHQtPnJlc291cmNlczsKKwlkdW1teV92YV9hZGRyID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKKworCS8qCisJICogQmVmb3JlIGFja2luZyB0aGUgTU1VIGZhdWx0LCBsZXQncyBtYWtlIHN1cmUgTU1VIGNhbiBvbmx5CisJICogYWNjZXNzIGVudHJ5ICMwLiBUaGVuIGFkZCBhIG5ldyBlbnRyeSBzbyB0aGF0IHRoZSBEU1AgT1MKKwkgKiBjYW4gY29udGludWUgaW4gb3JkZXIgdG8gZHVtcCB0aGUgc3RhY2suCisJICovCisJaHdfbW11X3R3bF9kaXNhYmxlKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlKTsKKwlod19tbXVfdGxiX2ZsdXNoX2FsbChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisKKwlod19tbXVfdGxiX2FkZChyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSwKKwkJCXZpcnRfdG9fcGh5cyhkdW1teV92YV9hZGRyKSwgZmF1bHRfYWRkciwKKwkJCUhXX1BBR0VfU0laRTRLQiwgMSwKKwkJCSZtYXBfYXR0cnMsIEhXX1NFVCwgSFdfU0VUKTsKKworCWRzcF9jbGtfZW5hYmxlKERTUF9DTEtfR1BUOCk7CisKKwlkc3BfZ3B0X3dhaXRfb3ZlcmZsb3coRFNQX0NMS19HUFQ4LCAweGZmZmZmZmZlKTsKKworCS8qIENsZWFyIE1NVSBpbnRlcnJ1cHQgKi8KKwlod19tbXVfZXZlbnRfYWNrKHJlc291cmNlcy0+ZHdfZG1tdV9iYXNlLAorCQkJSFdfTU1VX1RSQU5TTEFUSU9OX0ZBVUxUKTsKKwlkdW1wX2RzcF9zdGFjayhkZXZfY29udGV4dCk7CisJZHNwX2Nsa19kaXNhYmxlKERTUF9DTEtfR1BUOCk7CisKKwlod19tbXVfZGlzYWJsZShyZXNvdXJjZXMtPmR3X2RtbXVfYmFzZSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWR1bW15X3ZhX2FkZHIpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZXZlbnRfdG9fc3RyaW5nKGludCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBEU1BfU1lTRVJST1I6IHJldHVybiAiRFNQX1NZU0VSUk9SIjsgYnJlYWs7CisJY2FzZSBEU1BfTU1VRkFVTFQ6IHJldHVybiAiRFNQX01NVUZBVUxUIjsgYnJlYWs7CisJY2FzZSBEU1BfUFdSRVJST1I6IHJldHVybiAiRFNQX1BXUkVSUk9SIjsgYnJlYWs7CisJY2FzZSBEU1BfV0RUT1ZFUkZMT1c6IHJldHVybiAiRFNQX1dEVE9WRVJGTE9XIjsgYnJlYWs7CisJZGVmYXVsdDogcmV0dXJuICJ1bmtvd24gZXZlbnQiOyBicmVhazsKKwl9Cit9CisKK3ZvaWQgYnJpZGdlX2RlaF9ub3RpZnkoc3RydWN0IGRlaF9tZ3IgKmRlaCwgaW50IGV2ZW50LCBpbnQgaW5mbykKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dDsKKwljb25zdCBjaGFyICpzdHIgPSBldmVudF90b19zdHJpbmcoZXZlbnQpOworCisJaWYgKCFkZWgpCisJCXJldHVybjsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGRldmljZSBleGNlcHRpb24iLCBfX2Z1bmNfXyk7CisJZGV2X2NvbnRleHQgPSBkZWgtPmhicmlkZ2VfY29udGV4dDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIERTUF9TWVNFUlJPUjoKKwkJZGV2X2VycihicmlkZ2UsICIlczogJXMsIGluZm89MHgleCIsIF9fZnVuY19fLAorCQkJCXN0ciwgaW5mbyk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorCQlkdW1wX2RsX21vZHVsZXMoZGV2X2NvbnRleHQpOworCQlkdW1wX2RzcF9zdGFjayhkZXZfY29udGV4dCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBEU1BfTU1VRkFVTFQ6CisJCWRldl9lcnIoYnJpZGdlLCAiJXM6ICVzLCBhZGRyPTB4JXgiLCBfX2Z1bmNfXywKKwkJCQlzdHIsIGZhdWx0X2FkZHIpOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKwkJcHJpbnRfZHNwX3RyYWNlX2J1ZmZlcihkZXZfY29udGV4dCk7CisJCWR1bXBfZGxfbW9kdWxlcyhkZXZfY29udGV4dCk7CisJCW1tdV9mYXVsdF9wcmludF9zdGFjayhkZXZfY29udGV4dCk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihicmlkZ2UsICIlczogJXMiLCBfX2Z1bmNfXywgc3RyKTsKKwkJYnJlYWs7CisJfQorCisJLyogRmlsdGVyIHN1YnNlcXVlbnQgbm90aWZpY2F0aW9ucyB3aGVuIGFuIGVycm9yIG9jY3VycyAqLworCWlmIChkZXZfY29udGV4dC0+ZHdfYnJkX3N0YXRlICE9IEJSRF9FUlJPUikgeworCQludGZ5X25vdGlmeShkZWgtPm50Znlfb2JqLCBldmVudCk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCisJCWJyaWRnZV9yZWNvdmVyX3NjaGVkdWxlKCk7CisjZW5kaWYKKwl9CisKKwkvKiBTZXQgdGhlIEJvYXJkIHN0YXRlIGFzIEVSUk9SICovCisJZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9IEJSRF9FUlJPUjsKKwkvKiBEaXNhYmxlIGFsbCB0aGUgY2xvY2tzIHRoYXQgd2VyZSBlbmFibGVkIGJ5IERTUCAqLworCWRzcF9jbG9ja19kaXNhYmxlX2FsbChkZXZfY29udGV4dC0+ZHNwX3Blcl9jbGtzKTsKKwkvKgorCSAqIEF2b2lkIHRoZSBzdWJzZXF1ZW50IFdEVCBpZiBpdCBoYXBwZW5zIG9uY2UsCisJICogYWxzbyBpZiBmYXRhbCBlcnJvciBvY2N1cnMuCisJICovCisJZHNwX3dkdF9lbmFibGUoZmFsc2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvd2R0LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTI2ZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvd2R0LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiB3ZHQuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJTyBkaXNwYXRjaGVyIGZvciBhIHNoYXJlZCBtZW1vcnkgY2hhbm5lbCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVoLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9fY2hubF9zbS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS93ZHQuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfV0RUMworCisjZGVmaW5lIE9NQVAzNFhYX1dEVDNfQkFTRSAJCShMNF9QRVJfMzRYWF9CQVNFICsgMHgzMDAwMCkKKworc3RhdGljIHN0cnVjdCBkc3Bfd2R0X3NldHRpbmcgZHNwX3dkdDsKKwordm9pZCBkc3Bfd2R0X2RwYyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGRlaF9tZ3IgKmRlaF9tZ3I7CisJZGV2X2dldF9kZWhfbWdyKGRldl9nZXRfZmlyc3QoKSwgJmRlaF9tZ3IpOworCWlmIChkZWhfbWdyKQorCQlicmlkZ2VfZGVoX25vdGlmeShkZWhfbWdyLCBEU1BfV0RUT1ZFUkZMT1csIDApOworfQorCitpcnFyZXR1cm5fdCBkc3Bfd2R0X2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXUzMiB2YWx1ZTsKKwkvKiBhY2sgd2R0MyBpbnRlcnJ1cHQgKi8KKwl2YWx1ZSA9IF9fcmF3X3JlYWRsKGRzcF93ZHQucmVnX2Jhc2UgKyBPTUFQM19XRFQzX0lTUl9PRkZTRVQpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZHNwX3dkdC5yZWdfYmFzZSArIE9NQVAzX1dEVDNfSVNSX09GRlNFVCk7CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZkc3Bfd2R0LndkdDNfdGFza2xldCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgZHNwX3dkdF9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwlkc3Bfd2R0LnNtX3dkdCA9IE5VTEw7CisJZHNwX3dkdC5yZWdfYmFzZSA9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0WFhfV0RUM19CQVNFKTsKKwl0YXNrbGV0X2luaXQoJmRzcF93ZHQud2R0M190YXNrbGV0LCBkc3Bfd2R0X2RwYywgMCk7CisKKwlkc3Bfd2R0LmZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ3ZHQzX2ZjayIpOworCisJaWYgKGRzcF93ZHQuZmNsaykgeworCQlkc3Bfd2R0LmljbGsgPSBjbGtfZ2V0KE5VTEwsICJ3ZHQzX2ljayIpOworCQlpZiAoIWRzcF93ZHQuaWNsaykgeworCQkJY2xrX3B1dChkc3Bfd2R0LmZjbGspOworCQkJZHNwX3dkdC5mY2xrID0gTlVMTDsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gLUVGQVVMVDsKKworCWlmICghcmV0KQorCQlyZXQgPSByZXF1ZXN0X2lycShJTlRfMzRYWF9XRFQzX0lSUSwgZHNwX3dkdF9pc3IsIDAsCisJCQkJCQkJImRzcF93ZHQiLCAmZHNwX3dkdCk7CisKKwkvKiBEaXNhYmxlIGF0IHRoaXMgbW9tZW50LCBpdCB3aWxsIGJlIGVuYWJsZWQgd2hlbiBEU1Agc3RhcnRzICovCisJaWYgKCFyZXQpCisJCWRpc2FibGVfaXJxKElOVF8zNFhYX1dEVDNfSVJRKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZHNwX3dkdF9zbV9zZXQodm9pZCAqZGF0YSkKK3sKKwlkc3Bfd2R0LnNtX3dkdCA9IGRhdGE7CisJZHNwX3dkdC5zbV93ZHQtPndkdF9vdmVyZmxvdyA9IENPTkZJR19USURTUEJSSURHRV9XRFRfVElNRU9VVDsKK30KKworCit2b2lkIGRzcF93ZHRfZXhpdCh2b2lkKQoreworCWZyZWVfaXJxKElOVF8zNFhYX1dEVDNfSVJRLCAmZHNwX3dkdCk7CisJdGFza2xldF9raWxsKCZkc3Bfd2R0LndkdDNfdGFza2xldCk7CisKKwlpZiAoZHNwX3dkdC5mY2xrKQorCQljbGtfcHV0KGRzcF93ZHQuZmNsayk7CisJaWYgKGRzcF93ZHQuaWNsaykKKwkJY2xrX3B1dChkc3Bfd2R0LmljbGspOworCisJZHNwX3dkdC5mY2xrID0gTlVMTDsKKwlkc3Bfd2R0LmljbGsgPSBOVUxMOworCWRzcF93ZHQuc21fd2R0ID0gTlVMTDsKKwlkc3Bfd2R0LnJlZ19iYXNlID0gTlVMTDsKK30KKwordm9pZCBkc3Bfd2R0X2VuYWJsZShib29sIGVuYWJsZSkKK3sKKwl1MzIgdG1wOworCXN0YXRpYyBib29sIHdkdF9lbmFibGU7CisKKwlpZiAod2R0X2VuYWJsZSA9PSBlbmFibGUgfHwgIWRzcF93ZHQuZmNsayB8fCAhZHNwX3dkdC5pY2xrKQorCQlyZXR1cm47CisKKwl3ZHRfZW5hYmxlID0gZW5hYmxlOworCisJaWYgKGVuYWJsZSkgeworCQljbGtfZW5hYmxlKGRzcF93ZHQuZmNsayk7CisJCWNsa19lbmFibGUoZHNwX3dkdC5pY2xrKTsKKwkJZHNwX3dkdC5zbV93ZHQtPndkdF9zZXRjbG9ja3MgPSAxOworCQl0bXAgPSBfX3Jhd19yZWFkbChkc3Bfd2R0LnJlZ19iYXNlICsgT01BUDNfV0RUM19JU1JfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKHRtcCwgZHNwX3dkdC5yZWdfYmFzZSArIE9NQVAzX1dEVDNfSVNSX09GRlNFVCk7CisJCWVuYWJsZV9pcnEoSU5UXzM0WFhfV0RUM19JUlEpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxKElOVF8zNFhYX1dEVDNfSVJRKTsKKwkJZHNwX3dkdC5zbV93ZHQtPndkdF9zZXRjbG9ja3MgPSAwOworCQljbGtfZGlzYWJsZShkc3Bfd2R0LmljbGspOworCQljbGtfZGlzYWJsZShkc3Bfd2R0LmZjbGspOworCX0KK30KKworI2Vsc2UKK3ZvaWQgZHNwX3dkdF9lbmFibGUoYm9vbCBlbmFibGUpCit7Cit9CisKK3ZvaWQgZHNwX3dkdF9zbV9zZXQodm9pZCAqZGF0YSkKK3sKK30KKworaW50IGRzcF93ZHRfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCit2b2lkIGRzcF93ZHRfZXhpdCh2b2lkKQoreworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWE1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCkBAIC0wLDAgKzEsMTk1MyBAQAorLyoKKyAqIGNsb2FkLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgImhlYWRlci5oIgorCisjaW5jbHVkZSAibW9kdWxlX2xpc3QuaCIKKyNkZWZpbmUgTElOS0VSX01PRFVMRVNfSEVBREVSICgiXyIgTU9EVUxFU19IRUFERVIpCisKKy8qCisgKiBmb3J3YXJkIHJlZmVyZW5jZXMKKyAqLworc3RhdGljIHZvaWQgZGxvYWRfc3ltYm9scyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CitzdGF0aWMgdm9pZCBkbG9hZF9kYXRhKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIGFsbG9jYXRlX3NlY3Rpb25zKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIHN0cmluZ190YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIHN5bWJvbF90YWJsZV9mcmVlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKK3N0YXRpYyB2b2lkIHNlY3Rpb25fdGFibGVfZnJlZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CitzdGF0aWMgdm9pZCBpbml0X21vZHVsZV9oYW5kbGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorc3RhdGljIGNoYXIgKnVucGFja19uYW1lKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB1MzIgc29mZnNldCk7CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgY2luaXRuYW1lW10gPSB7ICIuY2luaXQiIH07CitzdGF0aWMgY29uc3QgY2hhciBsb2FkZXJfZGxsdmlld19yb290W10gPSB7ICI/RExNb2R1bGVzPyIgfTsKKworLyoKKyAqIEVycm9yIHN0cmluZ3MKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgcmVhZHN0cm1bXSA9IHsgIkVycm9yIHJlYWRpbmcgJXMgZnJvbSBpbnB1dCBzdHJlYW0iIH07CitzdGF0aWMgY29uc3QgY2hhciBlcnJfYWxsb2NbXSA9IHsgIlN5bXMtPmRsb2FkX2FsbG9jYXRlKCAlZCApIGZhaWxlZCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHRndGFsbG9jW10gPSB7CisJIlRhcmdldCBtZW1vcnkgYWxsb2NhdGUgZmFpbGVkLCBzZWN0aW9uICVzIHNpemUgIiBGTVRfVUkzMiB9Oworc3RhdGljIGNvbnN0IGNoYXIgaW5pdGZhaWxbXSA9IHsgIiVzIHRvIHRhcmdldCBhZGRyZXNzICIgRk1UX1VJMzIgIiBmYWlsZWQiIH07CitzdGF0aWMgY29uc3QgY2hhciBkbHZ3cml0ZVtdID0geyAiV3JpdGUgdG8gRExMdmlldyBsaXN0IGZhaWxlZCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGljb25uZWN0W10gPSB7ICJDb25uZWN0IGNhbGwgdG8gaW5pdCBpbnRlcmZhY2UgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgZXJyX2NoZWNrc3VtW10gPSB7ICJDaGVja3N1bSBmYWlsZWQgb24gJXMiIH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfZXJyb3IKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZXJydHh0CWRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvciwgcHJpbnRmIHN0eWxlCisgKgkuLi4JCWFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqCisgKiBFZmZlY3Q6CisgKglSZXBvcnRzIG9yIHJlY29yZHMgdGhlIGVycm9yIGFzIGFwcHJvcHJpYXRlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCit2b2lkIGRsb2FkX2Vycm9yKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBjb25zdCBjaGFyICplcnJ0eHQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisKKwl2YV9zdGFydChhcmdzLCBlcnJ0eHQpOworCWRsdGhpcy0+bXlzeW0tPmVycm9yX3JlcG9ydChkbHRoaXMtPm15c3ltLCBlcnJ0eHQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlkbHRoaXMtPmRsb2FkX2VycmNvdW50ICs9IDE7CisKK30JCQkJLyogZGxvYWRfZXJyb3IgKi8KKworI2RlZmluZSBETF9FUlJPUih6emEsIHp6YikgZGxvYWRfZXJyb3IoZGx0aGlzLCB6emEsIHp6YikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9zeW1zX2Vycm9yCisgKgorICogUGFyYW1ldGVyczoKKyAqCWVycnR4dAlkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IsIHByaW50ZiBzdHlsZQorICoJLi4uCQlhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKgorICogRWZmZWN0OgorICoJUmVwb3J0cyBvciByZWNvcmRzIHRoZSBlcnJvciBhcyBhcHByb3ByaWF0ZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCBkbG9hZF9zeW1zX2Vycm9yKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsIGNvbnN0IGNoYXIgKmVycnR4dCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKworCXZhX3N0YXJ0KGFyZ3MsIGVycnR4dCk7CisJc3ltcy0+ZXJyb3JfcmVwb3J0KHN5bXMsIGVycnR4dCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGR5bmFtaWNfbG9hZF9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbW9kdWxlCVRoZSBpbnB1dCBzdHJlYW0gdGhhdCBzdXBwbGllcyB0aGUgbW9kdWxlIGltYWdlCisgKglzeW1zCUhvc3Qtc2lkZSBzeW1ib2wgdGFibGUgYW5kIG1hbGxvYy9mcmVlIGZ1bmN0aW9ucworICoJYWxsb2MJVGFyZ2V0LXNpZGUgbWVtb3J5IGFsbG9jYXRpb24KKyAqCWluaXQJVGFyZ2V0LXNpZGUgbWVtb3J5IGluaXRpYWxpemF0aW9uCisgKglvcHRpb25zCU9wdGlvbiBmbGFncyBETE9BRF8qCisgKgltaGFuZGxlCUEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlIHdpdGggRHluYW1pY19VbmxvYWQKKyAqCisgKiBFZmZlY3Q6CisgKglUaGUgbW9kdWxlIGltYWdlIGlzIHJlYWQgdXNpbmcgKm1vZHVsZS4gIFRhcmdldCBzdG9yYWdlIGZvciB0aGUgbmV3CisgKglpbWFnZSBpcworICogb2J0YWluZWQgZnJvbSAqYWxsb2MuICBTeW1ib2xzIGRlZmluZWQgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIG1vZHVsZSBhcmUKKyAqIG1hbmFnZWQgdXNpbmcgKnN5bXMuICBUaGUgaW1hZ2UgaXMgdGhlbiByZWxvY2F0ZWQgYW5kIHJlZmVyZW5jZXMKKyAqCXJlc29sdmVkIGFzIG5lY2Vzc2FyeSwgYW5kIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSBiaXRzIGFyZSBwbGFjZWQKKyAqCWludG8gdGFyZ2V0IG1lbW9yeSB1c2luZyAqaW5pdC4KKyAqCisgKiBSZXR1cm5zOgorICoJT24gYSBzdWNjZXNzZnVsIGxvYWQsIGEgbW9kdWxlIGhhbmRsZSBpcyBwbGFjZWQgaW4gKm1oYW5kbGUsCisgKglhbmQgemVybyBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcworICoJcmV0dXJuZWQuICBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MKKyAqCXVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2ludCBkeW5hbWljX2xvYWRfbW9kdWxlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKm1vZHVsZSwKKwkJCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCisJCQlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKmFsbG9jLAorCQkJc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQsCisJCQl1bnNpZ25lZCBvcHRpb25zLCB2b2lkICoqbWhhbmRsZSkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCAqZHAsIHN6OworCXN0cnVjdCBkbG9hZF9zdGF0ZSBkbF9zdGF0ZTsJLyogaW50ZXJuYWwgc3RhdGUgZm9yIHRoaXMgY2FsbCAqLworCisJLyogYmxhc3Qgb3VyIGludGVybmFsIHN0YXRlICovCisJZHAgPSAodW5zaWduZWQgKikmZGxfc3RhdGU7CisJZm9yIChzeiA9IHNpemVvZihkbF9zdGF0ZSkgLyBzaXplb2YodW5zaWduZWQpOyBzeiA+IDA7IHN6IC09IDEpCisJCSpkcCsrID0gMDsKKworCS8qIEVuYWJsZSBfb25seV8gQlNTIGluaXRpYWxpemF0aW9uIGlmIGVuYWJsZWQgYnkgdXNlciAqLworCWlmICgob3B0aW9ucyAmIERMT0FEX0lOSVRCU1MpID09IERMT0FEX0lOSVRCU1MpCisJCWRsX3N0YXRlLm15b3B0aW9ucyA9IERMT0FEX0lOSVRCU1M7CisKKwkvKiBDaGVjayB0aGF0IG1hbmRhdG9yeSBhcmd1bWVudHMgYXJlIHByZXNlbnQgKi8KKwlpZiAoIW1vZHVsZSB8fCAhc3ltcykgeworCQlkbG9hZF9lcnJvcigmZGxfc3RhdGUsICJSZXF1aXJlZCBwYXJhbWV0ZXIgaXMgTlVMTCIpOworCX0gZWxzZSB7CisJCWRsX3N0YXRlLnN0cm0gPSBtb2R1bGU7CisJCWRsX3N0YXRlLm15c3ltID0gc3ltczsKKwkJZGxvYWRfaGVhZGVycygmZGxfc3RhdGUpOworCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KQorCQkJZGxvYWRfc3RyaW5ncygmZGxfc3RhdGUsIGZhbHNlKTsKKwkJaWYgKCFkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkKKwkJCWRsb2FkX3NlY3Rpb25zKCZkbF9zdGF0ZSk7CisKKwkJaWYgKGluaXQgJiYgIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSB7CisJCQlpZiAoaW5pdC0+Y29ubmVjdChpbml0KSkgeworCQkJCWRsX3N0YXRlLm15aW8gPSBpbml0OworCQkJCWRsX3N0YXRlLm15YWxsb2MgPSBhbGxvYzsKKwkJCQkvKiBkbyBub3csIGJlZm9yZSByZWR1Y2luZyBzeW1ib2xzICovCisJCQkJYWxsb2NhdGVfc2VjdGlvbnMoJmRsX3N0YXRlKTsKKwkJCX0gZWxzZQorCQkJCWRsb2FkX2Vycm9yKCZkbF9zdGF0ZSwgaWNvbm5lY3QpOworCQl9CisKKwkJaWYgKCFkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkgeworCQkJLyogZml4IHVwIGVudHJ5IHBvaW50IGFkZHJlc3MgKi8KKwkJCXVuc2lnbmVkIHNyZWYgPSBkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlfc2VjbiAtIDE7CisJCQlpZiAoc3JlZiA8IGRsX3N0YXRlLmFsbG9jYXRlZF9zZWNuX2NvdW50KQorCQkJCWRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeXB0ICs9CisJCQkJICAgIGRsX3N0YXRlLmxkcl9zZWN0aW9uc1tzcmVmXS5ydW5fYWRkcjsKKworCQkJZGxvYWRfc3ltYm9scygmZGxfc3RhdGUpOworCQl9CisKKwkJaWYgKGluaXQgJiYgIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KQorCQkJZGxvYWRfZGF0YSgmZGxfc3RhdGUpOworCisJCWluaXRfbW9kdWxlX2hhbmRsZSgmZGxfc3RhdGUpOworCisJCS8qIGRsX3N0YXRlLm15aW8gaXMgaW5pdCBvciAwIGF0IHRoaXMgcG9pbnQuICovCisJCWlmIChkbF9zdGF0ZS5teWlvKSB7CisJCQlpZiAoKCFkbF9zdGF0ZS5kbG9hZF9lcnJjb3VudCkgJiYKKwkJCSAgICAoZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5X3NlY24gIT0gRE5fVU5ERUYpICYmCisJCQkgICAgKCFpbml0LT5leGVjdXRlKGluaXQsCisJCQkJCSAgICBkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlwdCkpKQorCQkJCWRsb2FkX2Vycm9yKCZkbF9zdGF0ZSwgIkluaXQtPkV4ZWN1dGUgRmFpbGVkIik7CisJCQlpbml0LT5yZWxlYXNlKGluaXQpOworCQl9CisKKwkJc3ltYm9sX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKKwkJc2VjdGlvbl90YWJsZV9mcmVlKCZkbF9zdGF0ZSk7CisJCXN0cmluZ190YWJsZV9mcmVlKCZkbF9zdGF0ZSk7CisJCWRsb2FkX3RyYW1wX2NsZWFudXAoJmRsX3N0YXRlKTsKKworCQlpZiAoZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKKwkJCWR5bmFtaWNfdW5sb2FkX21vZHVsZShkbF9zdGF0ZS5teWhhbmRsZSwgc3ltcywgYWxsb2MsCisJCQkJCSAgICAgIGluaXQpOworCQkJZGxfc3RhdGUubXloYW5kbGUgPSBOVUxMOworCQl9CisJfQorCisJaWYgKG1oYW5kbGUpCisJCSptaGFuZGxlID0gZGxfc3RhdGUubXloYW5kbGU7CS8qIGdpdmUgYmFjayB0aGUgaGFuZGxlICovCisKKwlyZXR1cm4gZGxfc3RhdGUuZGxvYWRfZXJyY291bnQ7Cit9CQkJCS8qIERMT0FEX0ZpbGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkeW5hbWljX29wZW5fbW9kdWxlCisgKgorICogUGFyYW1ldGVyczoKKyAqICAgICAgbW9kdWxlICBUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICogICAgICBzeW1zICAgIEhvc3Qtc2lkZSBzeW1ib2wgdGFibGUgYW5kIG1hbGxvYy9mcmVlIGZ1bmN0aW9ucworICogICAgICBhbGxvYyAgIFRhcmdldC1zaWRlIG1lbW9yeSBhbGxvY2F0aW9uCisgKiAgICAgIGluaXQgICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGluaXRpYWxpemF0aW9uCisgKiAgICAgIG9wdGlvbnMgT3B0aW9uIGZsYWdzIERMT0FEXyoKKyAqICAgICAgbWhhbmRsZSBBIG1vZHVsZSBoYW5kbGUgZm9yIHVzZSB3aXRoIER5bmFtaWNfVW5sb2FkCisgKgorICogRWZmZWN0OgorICogICAgICBUaGUgbW9kdWxlIGltYWdlIGlzIHJlYWQgdXNpbmcgKm1vZHVsZS4gIFRhcmdldCBzdG9yYWdlIGZvciB0aGUgbmV3CisgKiAgICAgIGltYWdlIGlzCisgKiAJb2J0YWluZWQgZnJvbSAqYWxsb2MuICBTeW1ib2xzIGRlZmluZWQgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIG1vZHVsZSBhcmUKKyAqIAltYW5hZ2VkIHVzaW5nICpzeW1zLiAgVGhlIGltYWdlIGlzIHRoZW4gcmVsb2NhdGVkIGFuZCByZWZlcmVuY2VzCisgKiAgICAgIHJlc29sdmVkIGFzIG5lY2Vzc2FyeSwgYW5kIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSBiaXRzIGFyZSBwbGFjZWQKKyAqICAgICAgaW50byB0YXJnZXQgbWVtb3J5IHVzaW5nICppbml0LgorICoKKyAqIFJldHVybnM6CisgKiAgICAgIE9uIGEgc3VjY2Vzc2Z1bCBsb2FkLCBhIG1vZHVsZSBoYW5kbGUgaXMgcGxhY2VkIGluICptaGFuZGxlLAorICogICAgICBhbmQgemVybyBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcworICogICAgICByZXR1cm5lZC4gIEluZGl2aWR1YWwgZXJyb3JzIGFyZSByZXBvcnRlZCBkdXJpbmcgdGhlIGxvYWQgcHJvY2VzcworICogICAgICB1c2luZyBzeW1zLT5lcnJvcl9yZXBvcnQoKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitpbnQKK2R5bmFtaWNfb3Blbl9tb2R1bGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCisJCSAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqaW5pdCwKKwkJICAgIHVuc2lnbmVkIG9wdGlvbnMsIHZvaWQgKiptaGFuZGxlKQoreworCXJlZ2lzdGVyIHVuc2lnbmVkICpkcCwgc3o7CisJc3RydWN0IGRsb2FkX3N0YXRlIGRsX3N0YXRlOwkvKiBpbnRlcm5hbCBzdGF0ZSBmb3IgdGhpcyBjYWxsICovCisKKwkvKiBibGFzdCBvdXIgaW50ZXJuYWwgc3RhdGUgKi8KKwlkcCA9ICh1bnNpZ25lZCAqKSZkbF9zdGF0ZTsKKwlmb3IgKHN6ID0gc2l6ZW9mKGRsX3N0YXRlKSAvIHNpemVvZih1bnNpZ25lZCk7IHN6ID4gMDsgc3ogLT0gMSkKKwkJKmRwKysgPSAwOworCisJLyogRW5hYmxlIF9vbmx5XyBCU1MgaW5pdGlhbGl6YXRpb24gaWYgZW5hYmxlZCBieSB1c2VyICovCisJaWYgKChvcHRpb25zICYgRExPQURfSU5JVEJTUykgPT0gRExPQURfSU5JVEJTUykKKwkJZGxfc3RhdGUubXlvcHRpb25zID0gRExPQURfSU5JVEJTUzsKKworCS8qIENoZWNrIHRoYXQgbWFuZGF0b3J5IGFyZ3VtZW50cyBhcmUgcHJlc2VudCAqLworCWlmICghbW9kdWxlIHx8ICFzeW1zKSB7CisJCWRsb2FkX2Vycm9yKCZkbF9zdGF0ZSwgIlJlcXVpcmVkIHBhcmFtZXRlciBpcyBOVUxMIik7CisJfSBlbHNlIHsKKwkJZGxfc3RhdGUuc3RybSA9IG1vZHVsZTsKKwkJZGxfc3RhdGUubXlzeW0gPSBzeW1zOworCQlkbG9hZF9oZWFkZXJzKCZkbF9zdGF0ZSk7CisJCWlmICghZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpCisJCQlkbG9hZF9zdHJpbmdzKCZkbF9zdGF0ZSwgZmFsc2UpOworCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KQorCQkJZGxvYWRfc2VjdGlvbnMoJmRsX3N0YXRlKTsKKworCQlpZiAoaW5pdCAmJiAhZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKKwkJCWlmIChpbml0LT5jb25uZWN0KGluaXQpKSB7CisJCQkJZGxfc3RhdGUubXlpbyA9IGluaXQ7CisJCQkJZGxfc3RhdGUubXlhbGxvYyA9IGFsbG9jOworCQkJCS8qIGRvIG5vdywgYmVmb3JlIHJlZHVjaW5nIHN5bWJvbHMgKi8KKwkJCQlhbGxvY2F0ZV9zZWN0aW9ucygmZGxfc3RhdGUpOworCQkJfSBlbHNlCisJCQkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCBpY29ubmVjdCk7CisJCX0KKworCQlpZiAoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSB7CisJCQkvKiBmaXggdXAgZW50cnkgcG9pbnQgYWRkcmVzcyAqLworCQkJdW5zaWduZWQgc3JlZiA9IGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeV9zZWNuIC0gMTsKKwkJCWlmIChzcmVmIDwgZGxfc3RhdGUuYWxsb2NhdGVkX3NlY25fY291bnQpCisJCQkJZGxfc3RhdGUuZGZpbGVfaGRyLmRmX2VudHJ5cHQgKz0KKwkJCQkgICAgZGxfc3RhdGUubGRyX3NlY3Rpb25zW3NyZWZdLnJ1bl9hZGRyOworCisJCQlkbG9hZF9zeW1ib2xzKCZkbF9zdGF0ZSk7CisJCX0KKworCQlpbml0X21vZHVsZV9oYW5kbGUoJmRsX3N0YXRlKTsKKworCQkvKiBkbF9zdGF0ZS5teWlvIGlzIGVpdGhlciAwIG9yIGluaXQgYXQgdGhpcyBwb2ludC4gKi8KKwkJaWYgKGRsX3N0YXRlLm15aW8pIHsKKwkJCWlmICgoIWRsX3N0YXRlLmRsb2FkX2VycmNvdW50KSAmJgorCQkJICAgIChkbF9zdGF0ZS5kZmlsZV9oZHIuZGZfZW50cnlfc2VjbiAhPSBETl9VTkRFRikgJiYKKwkJCSAgICAoIWluaXQtPmV4ZWN1dGUoaW5pdCwKKwkJCQkJICAgIGRsX3N0YXRlLmRmaWxlX2hkci5kZl9lbnRyeXB0KSkpCisJCQkJZGxvYWRfZXJyb3IoJmRsX3N0YXRlLCAiSW5pdC0+RXhlY3V0ZSBGYWlsZWQiKTsKKwkJCWluaXQtPnJlbGVhc2UoaW5pdCk7CisJCX0KKworCQlzeW1ib2xfdGFibGVfZnJlZSgmZGxfc3RhdGUpOworCQlzZWN0aW9uX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKKwkJc3RyaW5nX3RhYmxlX2ZyZWUoJmRsX3N0YXRlKTsKKworCQlpZiAoZGxfc3RhdGUuZGxvYWRfZXJyY291bnQpIHsKKwkJCWR5bmFtaWNfdW5sb2FkX21vZHVsZShkbF9zdGF0ZS5teWhhbmRsZSwgc3ltcywgYWxsb2MsCisJCQkJCSAgICAgIGluaXQpOworCQkJZGxfc3RhdGUubXloYW5kbGUgPSBOVUxMOworCQl9CisJfQorCisJaWYgKG1oYW5kbGUpCisJCSptaGFuZGxlID0gZGxfc3RhdGUubXloYW5kbGU7CS8qIGdpdmUgYmFjayB0aGUgaGFuZGxlICovCisKKwlyZXR1cm4gZGxfc3RhdGUuZGxvYWRfZXJyY291bnQ7Cit9CQkJCS8qIERMT0FEX0ZpbGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9oZWFkZXJzCisgKgorICogUGFyYW1ldGVyczoKKyAqCW5vbmUKKyAqCisgKiBFZmZlY3Q6CisgKglMb2FkcyB0aGUgRE9GRiBoZWFkZXIgYW5kIHZlcmlmeSByZWNvcmQuICBEZWFscyB3aXRoIGFueSBieXRlLW9yZGVyCisgKiBpc3N1ZXMgYW5kIGNoZWNrcyB0aGVtIGZvciB2YWxpZGl0eS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSBDT01CSU5FRF9IRUFERVJfU0laRSAoc2l6ZW9mKHN0cnVjdCBkb2ZmX2ZpbGVoZHJfdCkrIFwKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCkpCisKK3ZvaWQgZGxvYWRfaGVhZGVycyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwl1MzIgbWFwOworCisJLyogUmVhZCB0aGUgaGVhZGVyIGFuZCB0aGUgdmVyaWZ5IHJlY29yZCBhcyBvbmUuICBJZiB3ZSBkb24ndCBnZXQgaXQKKwkgICBhbGwsIHdlJ3JlIGRvbmUgKi8KKwlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sICZkbHRoaXMtPmRmaWxlX2hkciwKKwkJCQkgICAgICBDT01CSU5FRF9IRUFERVJfU0laRSkgIT0KKwkgICAgQ09NQklORURfSEVBREVSX1NJWkUpIHsKKwkJRExfRVJST1IocmVhZHN0cm0sICJGaWxlIEhlYWRlcnMiKTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIFZlcmlmeSB0aGF0IHdlIGhhdmUgdGhlIGJ5dGUgb3JkZXIgb2YgdGhlIGZpbGUgY29ycmVjdC4KKwkgKiBJZiBub3QsIG11c3QgZml4IGl0IGJlZm9yZSB3ZSBjYW4gY29udGludWUKKwkgKi8KKwltYXAgPSBSRU9SREVSX01BUChkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSk7CisJaWYgKG1hcCAhPSBSRU9SREVSX01BUChCWVRFX1JFU0hVRkZMRV9WQUxVRSkpIHsKKwkJLyogaW5wdXQgaXMgZWl0aGVyIGJ5dGUtc2h1ZmZsZWQgb3IgYmFkICovCisJCWlmICgobWFwICYgMHhGQ0ZDRkNGQykgPT0gMCkgewkvKiBubyBvYnZpb3VzbHkgYm9ndXMgYml0cyAqLworCQkJZGxvYWRfcmVvcmRlcigmZGx0aGlzLT5kZmlsZV9oZHIsIENPTUJJTkVEX0hFQURFUl9TSVpFLAorCQkJCSAgICAgIG1hcCk7CisJCX0KKwkJaWYgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlICE9CisJCSAgICBCWVRFX1JFU0hVRkZMRV9WQUxVRSkgeworCQkJLyogZGlkbid0IGZpeCB0aGUgcHJvYmxlbSwgdGhlIGJ5dGUgc3dhcCBtYXAgaXMgYmFkICovCisJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJICAgICJCYWQgYnl0ZSBzd2FwIG1hcCAiIEZNVF9VSTMyICIgaW4gaGVhZGVyIiwKKwkJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUpOworCQkJcmV0dXJuOworCQl9CisJCWRsdGhpcy0+cmVvcmRlcl9tYXAgPSBtYXA7CS8qIGtlZXAgbWFwIGZvciBmdXR1cmUgdXNlICovCisJfQorCisJLyoKKwkgKiBWZXJpZnkgY2hlY2tzdW0gb2YgaGVhZGVyIGFuZCB2ZXJpZnkgcmVjb3JkCisJICovCisJaWYgKH5kbG9hZF9jaGVja3N1bSgmZGx0aGlzLT5kZmlsZV9oZHIsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBkb2ZmX2ZpbGVoZHJfdCkpIHx8CisJICAgIH5kbG9hZF9jaGVja3N1bSgmZGx0aGlzLT52ZXJpZnksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBkb2ZmX3ZlcmlmeV9yZWNfdCkpKSB7CisJCURMX0VSUk9SKGVycl9jaGVja3N1bSwgImhlYWRlciBvciB2ZXJpZnkgcmVjb3JkIik7CisJCXJldHVybjsKKwl9CisjaWYgSE9TVF9FTkRJQU5ORVNTCisJZGx0aGlzLT5kZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUgPSBtYXA7CS8qIHB1dCBiYWNrIGZvciBsYXRlciAqLworI2VuZGlmCisKKwkvKiBDaGVjayBmb3IgdmFsaWQgdGFyZ2V0IElEICovCisJaWYgKChkbHRoaXMtPmRmaWxlX2hkci5kZl90YXJnZXRfaWQgIT0gVEFSR0VUX0lEKSAmJgorCSAgICAtKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9pZCAhPSBUTVM0NzBfSUQpKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCB0YXJnZXQgSUQgMHgleCBhbmQgVEFSR0VUX0lEIDB4JXgiLAorCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9pZCwgVEFSR0VUX0lEKTsKKwkJcmV0dXJuOworCX0KKwkvKiBDaGVjayBmb3IgdmFsaWQgZmlsZSBmb3JtYXQgKi8KKwlpZiAoKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2RvZmZfdmVyc2lvbiAhPSBET0ZGMCkpIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIERPRkYgdmVyc2lvbiAweCV4IiwKKwkJCSAgICBkbHRoaXMtPmRmaWxlX2hkci5kZl9kb2ZmX3ZlcnNpb24pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBcHBseSByZWFzb25hYmxlbmVzcyBjaGVja3MgdG8gY291bnQgZmllbGRzCisJICovCisJaWYgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplID4gTUFYX1JFQVNPTkFCTEVfU1RSSU5HVEFCKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkV4Y2Vzc2l2ZSBzdHJpbmcgdGFibGUgc2l6ZSAiIEZNVF9VSTMyLAorCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2NucyA+IE1BWF9SRUFTT05BQkxFX1NFQ1RJT05TKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkV4Y2Vzc2l2ZSBzZWN0aW9uIGNvdW50IDB4JXgiLAorCQkJICAgIGRsdGhpcy0+ZGZpbGVfaGRyLmRmX25vX3NjbnMpOworCQlyZXR1cm47CisJfQorI2lmbmRlZiBUQVJHRVRfRU5ESUFOTkVTUworCS8qCisJICogQ2hlY2sgdGhhdCBlbmRpYW5uZXNzIGRvZXMgbm90IGRpc2FncmVlIHdpdGggZXhwbGljaXQgc3BlY2lmaWNhdGlvbgorCSAqLworCWlmICgoZGx0aGlzLT5kZmlsZV9oZHIuZGZfZmxhZ3MgPj4gQUxJR05fQ09GRl9FTkRJQU5ORVNTKSAmCisJICAgIGRsdGhpcy0+bXlvcHRpb25zICYgRU5ESUFOTkVTU19NQVNLKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCSAgICAiSW5wdXQgZW5kaWFubmVzcyBkaXNhZ3JlZXMgd2l0aCBzcGVjaWZpZWQgb3B0aW9uIik7CisJCXJldHVybjsKKwl9CisJZGx0aGlzLT5iaWdfZV90YXJnZXQgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9mbGFncyAmIERGX0JJRzsKKyNlbmRpZgorCit9CQkJCS8qIGRsb2FkX2hlYWRlcnMgKi8KKworLyoJQ09GRiBTZWN0aW9uIFByb2Nlc3NpbmcKKyAqCisgKglDT0ZGIHNlY3Rpb25zIGFyZSByZWFkIGluIGFuZCByZXRhaW5lZCBpbnRhY3QuICBFYWNoIHJlY29yZCBpcyBlbWJlZGRlZAorICogCWluIGEgbmV3IHN0cnVjdHVyZSB0aGF0IHJlY29yZHMgdGhlIHVwZGF0ZWQgbG9hZCBhbmQKKyAqIAlydW4gYWRkcmVzc2VzIG9mIHRoZSBzZWN0aW9uICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHNlY25fZXJyaWRbXSA9IHsgInNlY3Rpb24iIH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfc2VjdGlvbnMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCUxvYWRzIHRoZSBzZWN0aW9uIHJlY29yZHMgaW50byBhbiBpbnRlcm5hbCB0YWJsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCBkbG9hZF9zZWN0aW9ucyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlzMTYgc2l6OworCXN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzaHA7CisJdW5zaWduZWQgbnNlY3MgPSBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOworCisJLyogYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBET0ZGIHNlY3Rpb24gcmVjb3JkcyAqLworCXNpeiA9IG5zZWNzICogc2l6ZW9mKHN0cnVjdCBkb2ZmX3Njbmhkcl90KTsKKwlzaHAgPQorCSAgICAoc3RydWN0IGRvZmZfc2NuaGRyX3QgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCQkgIHNpeik7CisJaWYgKCFzaHApIHsJCS8qIG5vdCBlbm91Z2ggc3RvcmFnZSAqLworCQlETF9FUlJPUihlcnJfYWxsb2MsIHNpeik7CisJCXJldHVybjsKKwl9CisJZGx0aGlzLT5zZWN0X2hkcnMgPSBzaHA7CisKKwkvKiByZWFkIGluIHRoZSBzZWN0aW9uIHJlY29yZHMgKi8KKwlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sIHNocCwgc2l6KSAhPSBzaXopIHsKKwkJRExfRVJST1IocmVhZHN0cm0sIHNlY25fZXJyaWQpOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgbmVlZCB0byBmaXggdXAgYnl0ZSBvcmRlciwgZG8gaXQgbm93ICovCisJaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXApCisJCWRsb2FkX3Jlb3JkZXIoc2hwLCBzaXosIGRsdGhpcy0+cmVvcmRlcl9tYXApOworCisJLyogY2hlY2sgZm9yIHZhbGlkaXR5ICovCisJaWYgKH5kbG9hZF9jaGVja3N1bShkbHRoaXMtPnNlY3RfaGRycywgc2l6KSAhPQorCSAgICBkbHRoaXMtPnZlcmlmeS5kdl9zY25fcmVjX2NoZWNrc3VtKSB7CisJCURMX0VSUk9SKGVycl9jaGVja3N1bSwgc2Vjbl9lcnJpZCk7CisJCXJldHVybjsKKwl9CisKK30JCQkJLyogZGxvYWRfc2VjdGlvbnMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgYWxsb2NhdGVfc2VjdGlvbnMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJYWxsb2MJdGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3IgY2xhc3MKKyAqCisgKiBFZmZlY3Q6CisgKglBc3NpZ25zIG5ldyAodGFyZ2V0KSBhZGRyZXNzZXMgZm9yIHNlY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIHZvaWQgYWxsb2NhdGVfc2VjdGlvbnMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJdTE2IGN1cnJfc2VjdCwgbnNlY3MsIHNpejsKKwlzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc2hwOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICphc2VjczsKKwlzdHJ1Y3QgbXlfaGFuZGxlICpobmRsOworCW5zZWNzID0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2NuczsKKwlpZiAoIW5zZWNzKQorCQlyZXR1cm47CisJaWYgKChkbHRoaXMtPm15YWxsb2MgPT0gTlVMTCkgJiYKKwkgICAgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3RhcmdldF9zY25zID4gMCkpIHsKKwkJRExfRVJST1IoIkFyZyAzIChhbGxvYykgcmVxdWlyZWQgYnV0IE5VTEwiLCAwKTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbW9kdWxlIGhhbmRsZSwgd2hpY2ggd2Ugd2lsbCBrZWVwIGZvciB1bmxvYWQKKwkgKiBwdXJwb3NlcyBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgc2VjdGlvbiBzdG9yZSBmb3IgYW4gYXV0by1nZW5lcmF0ZWQKKwkgKiB0cmFtcG9saW5lIHNlY3Rpb24gaW4gY2FzZSB3ZSBuZWVkIGl0LgorCSAqLworCXNpeiA9IChkbHRoaXMtPmRmaWxlX2hkci5kZl90YXJnZXRfc2NucyArIDEpICoKKwkgICAgc2l6ZW9mKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvKSArIE1ZX0hBTkRMRV9TSVpFOworCisJaG5kbCA9CisJICAgIChzdHJ1Y3QgbXlfaGFuZGxlICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCQkgICAgICBzaXopOworCWlmICghaG5kbCkgewkJLyogbm90IGVub3VnaCBzdG9yYWdlICovCisJCURMX0VSUk9SKGVycl9hbGxvYywgc2l6KTsKKwkJcmV0dXJuOworCX0KKwkvKiBpbml0aWFsaXplIHRoZSBoYW5kbGUgaGVhZGVyICovCisJaG5kbC0+ZG0uaG5leHQgPSBobmRsLT5kbS5ocHJldiA9IGhuZGw7CS8qIGNpcmN1bGFyIGxpc3QgKi8KKwlobmRsLT5kbS5ocm9vdCA9IE5VTEw7CisJaG5kbC0+ZG0uZGJ0aGlzID0gMDsKKwlkbHRoaXMtPm15aGFuZGxlID0gaG5kbDsJLyogc2F2ZSBhd2F5IGZvciByZXR1cm4gKi8KKwkvKiBwb2ludGVyIHRvIHRoZSBzZWN0aW9uIGxpc3Qgb2YgYWxsb2NhdGVkIHNlY3Rpb25zICovCisJZGx0aGlzLT5sZHJfc2VjdGlvbnMgPSBhc2VjcyA9IGhuZGwtPnNlY25zOworCS8qICogSW5zZXJ0IG5hbWVzIGludG8gYWxsIHNlY3Rpb25zLCBtYWtlIGNvcGllcyBvZgorCSAgIHRoZSBzZWN0aW9ucyB3ZSBhbGxvY2F0ZSAqLworCXNocCA9IGRsdGhpcy0+c2VjdF9oZHJzOworCWZvciAoY3Vycl9zZWN0ID0gMDsgY3Vycl9zZWN0IDwgbnNlY3M7IGN1cnJfc2VjdCsrKSB7CisJCXUzMiBzb2Zmc2V0ID0gc2hwLT5kc19vZmZzZXQ7CisjaWYgQklUU19QRVJfQVUgPD0gQklUU19QRVJfQllURQorCQkvKiBhdHRlbXB0IHRvIGluc2VydCB0aGUgbmFtZSBvZiB0aGlzIHNlY3Rpb24gKi8KKwkJaWYgKHNvZmZzZXQgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9zdHJ0YWJfc2l6ZSkKKwkJCSgoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzaHApLT5uYW1lID0KKwkJCQlkbHRoaXMtPnN0cl9oZWFkICsgc29mZnNldDsKKwkJZWxzZSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJCYWQgbmFtZSBvZmZzZXQgaW4gc2VjdGlvbiAlZCIsCisJCQkJICAgIGN1cnJfc2VjdCk7CisJCQkoKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopc2hwKS0+bmFtZSA9IE5VTEw7CisJCX0KKyNlbmRpZgorCQkvKiBhbGxvY2F0ZSB0YXJnZXQgc3RvcmFnZSBmb3Igc2VjdGlvbnMgdGhhdCByZXF1aXJlIGl0ICovCisJCWlmIChkc19uZWVkc19hbGxvY2F0aW9uKHNocCkpIHsKKwkJCSphc2VjcyA9ICooc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKilzaHA7CisJCQlhc2Vjcy0+Y29udGV4dCA9IDA7CS8qIHplcm8gdGhlIGNvbnRleHQgZmllbGQgKi8KKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKKwkJCWFzZWNzLT5uYW1lID0gdW5wYWNrX25hbWUoZGx0aGlzLCBzb2Zmc2V0KTsKKwkJCWRsdGhpcy0+ZGVidWdfc3RyaW5nX3NpemUgPSBzb2Zmc2V0ICsgZGx0aGlzLT50ZW1wX2xlbjsKKyNlbHNlCisJCQlkbHRoaXMtPmRlYnVnX3N0cmluZ19zaXplID0gc29mZnNldDsKKyNlbmRpZgorCQkJaWYgKGRsdGhpcy0+bXlhbGxvYyAhPSBOVUxMKSB7CisJCQkJaWYgKCFkbHRoaXMtPm15YWxsb2MtPgorCQkJCSAgICBkbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15YWxsb2MsIGFzZWNzLAorCQkJCQkJICAgZHNfYWxpZ25tZW50KGFzZWNzLT50eXBlKSkpIHsKKwkJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCB0Z3RhbGxvYywKKwkJCQkJCSAgICBhc2Vjcy0+bmFtZSwgYXNlY3MtPnNpemUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQkJLyoga2VlcCBhZGRyZXNzIGRlbHRhcyBpbiBvcmlnaW5hbCBzZWN0aW9uIHRhYmxlICovCisJCQlzaHAtPmRzX3ZhZGRyID0gYXNlY3MtPmxvYWRfYWRkciAtIHNocC0+ZHNfdmFkZHI7CisJCQlzaHAtPmRzX3BhZGRyID0gYXNlY3MtPnJ1bl9hZGRyIC0gc2hwLT5kc19wYWRkcjsKKwkJCWRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQgKz0gMTsKKwkJfQkJLyogYWxsb2NhdGUgdGFyZ2V0IHN0b3JhZ2UgKi8KKwkJc2hwICs9IDE7CisJCWFzZWNzICs9IDE7CisJfQorI2lmIEJJVFNfUEVSX0FVIDw9IEJJVFNfUEVSX0JZVEUKKwlkbHRoaXMtPmRlYnVnX3N0cmluZ19zaXplICs9CisJICAgIHN0cmxlbihkbHRoaXMtPnN0cl9oZWFkICsgZGx0aGlzLT5kZWJ1Z19zdHJpbmdfc2l6ZSkgKyAxOworI2VuZGlmCit9CQkJCS8qIGFsbG9jYXRlIHNlY3Rpb25zICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgc2VjdGlvbl90YWJsZV9mcmVlCisgKgorICogUGFyYW1ldGVyczoKKyAqCW5vbmUKKyAqCisgKiBFZmZlY3Q6CisgKglGcmVlcyBhbnkgc3RhdGUgdXNlZCBieSB0aGUgc3ltYm9sIHRhYmxlLgorICoKKyAqIFdBUk5JTkc6CisgKglUaGlzIHJvdXRpbmUgaXMgbm90IGFsbG93ZWQgdG8gZGVjbGFyZSBlcnJvcnMhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIHNlY3Rpb25fdGFibGVfZnJlZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc2hwOworCisJc2hwID0gZGx0aGlzLT5zZWN0X2hkcnM7CisJaWYgKHNocCkKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBzaHApOworCit9CQkJCS8qIHNlY3Rpb25fdGFibGVfZnJlZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3N0cmluZ3MKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIHNlY19uYW1lc19vbmx5ICAgSWYgdHJ1ZSBvbmx5IHJlYWQgaW4gdGhlICJzZWN0aW9uIG5hbWVzIgorICoJCSAgICAgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRhYmxlCisgKgorICogRWZmZWN0OgorICoJTG9hZHMgdGhlIERPRkYgc3RyaW5nIHRhYmxlIGludG8gbWVtb3J5LiBET0ZGIGtlZXBzIGFsbCBzdHJpbmdzIGluIGEKKyAqIGJpZyB1bnNvcnRlZCBhcnJheS4gIFdlIGp1c3QgcmVhZCB0aGF0IGFycmF5IGludG8gbWVtb3J5IGluIGJ1bGsuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyBjb25zdCBjaGFyIHN0cmluZ3RibFtdID0geyAic3RyaW5nIHRhYmxlIiB9OworCit2b2lkIGRsb2FkX3N0cmluZ3Moc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIGJvb2wgc2VjX25hbWVzX29ubHkpCit7CisJdTMyIHNzaXo7CisJY2hhciAqc3RyYnVmOworCisJaWYgKHNlY19uYW1lc19vbmx5KSB7CisJCXNzaXogPSBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTgorCQkJCSAgICAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfc2NuX25hbWVfc2l6ZSkpOworCX0gZWxzZSB7CisJCXNzaXogPSBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTgorCQkJCSAgICAoZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpKTsKKwl9CisJaWYgKHNzaXogPT0gMCkKKwkJcmV0dXJuOworCisJLyogZ2V0IHNvbWUgbWVtb3J5IGZvciB0aGUgc3RyaW5nIHRhYmxlICovCisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCisJc3RyYnVmID0gKGNoYXIgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBzc2l6ICsKKwkJCQkJCSAgICAgICBkbHRoaXMtPmRmaWxlX2hkci4KKwkJCQkJCSAgICAgICBkZl9tYXhfc3RyX2xlbik7CisjZWxzZQorCXN0cmJ1ZiA9IChjaGFyICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgc3Npeik7CisjZW5kaWYKKwlpZiAoc3RyYnVmID09IE5VTEwpIHsKKwkJRExfRVJST1IoZXJyX2FsbG9jLCBzc2l6KTsKKwkJcmV0dXJuOworCX0KKwlkbHRoaXMtPnN0cl9oZWFkID0gc3RyYnVmOworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCWRsdGhpcy0+c3RyX3RlbXAgPSBzdHJidWYgKyBzc2l6OworI2VuZGlmCisJLyogcmVhZCBpbiB0aGUgc3RyaW5ncyBhbmQgdmVyaWZ5IHRoZW0gKi8KKwlpZiAoKHVuc2lnbmVkKShkbHRoaXMtPnN0cm0tPnJlYWRfYnVmZmVyKGRsdGhpcy0+c3RybSwgc3RyYnVmLAorCQkJCQkJIHNzaXopKSAhPSBzc2l6KSB7CisJCURMX0VSUk9SKHJlYWRzdHJtLCBzdHJpbmd0YmwpOworCX0KKwkvKiBpZiB3ZSBuZWVkIHRvIGZpeCB1cCBieXRlIG9yZGVyLCBkbyBpdCBub3cgKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KKwlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJZGxvYWRfcmVvcmRlcihzdHJidWYsIHNzaXosIGRsdGhpcy0+cmVvcmRlcl9tYXApOworCisJaWYgKCghc2VjX25hbWVzX29ubHkpICYmICh+ZGxvYWRfY2hlY2tzdW0oc3RyYnVmLCBzc2l6KSAhPQorCQkJCSAgZGx0aGlzLT52ZXJpZnkuZHZfc3RyX3RhYl9jaGVja3N1bSkpIHsKKwkJRExfRVJST1IoZXJyX2NoZWNrc3VtLCBzdHJpbmd0YmwpOworCX0KKyNlbHNlCisJaWYgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlICE9CisJICAgIEhPU1RfQllURV9PUkRFUihSRU9SREVSX01BUChCWVRFX1JFU0hVRkZMRV9WQUxVRSkpKSB7CisJCS8qIHB1dCBzdHJpbmdzIGluIGJpZy1lbmRpYW4gb3JkZXIsIG5vdCBpbiBQQyBvcmRlciAqLworCQlkbG9hZF9yZW9yZGVyKHN0cmJ1Ziwgc3NpeiwKKwkJCSAgICAgIEhPU1RfQllURV9PUkRFUihkbHRoaXMtPgorCQkJCQkgICAgICBkZmlsZV9oZHIuZGZfYnl0ZV9yZXNodWZmbGUpKTsKKwl9CisJaWYgKCghc2VjX25hbWVzX29ubHkpICYmICh+ZGxvYWRfcmV2ZXJzZV9jaGVja3N1bShzdHJidWYsIHNzaXopICE9CisJCQkJICBkbHRoaXMtPnZlcmlmeS5kdl9zdHJfdGFiX2NoZWNrc3VtKSkgeworCQlETF9FUlJPUihlcnJfY2hlY2tzdW0sIHN0cmluZ3RibCk7CisJfQorI2VuZGlmCit9CQkJCS8qIGRsb2FkX3N0cmluZ3MgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBzdHJpbmdfdGFibGVfZnJlZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglub25lCisgKgorICogRWZmZWN0OgorICoJRnJlZXMgYW55IHN0YXRlIHVzZWQgYnkgdGhlIHN0cmluZyB0YWJsZS4KKyAqCisgKiBXQVJOSU5HOgorICoJVGhpcyByb3V0aW5lIGlzIG5vdCBhbGxvd2VkIHRvIGRlY2xhcmUgZXJyb3JzIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIHZvaWQgc3RyaW5nX3RhYmxlX2ZyZWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJaWYgKGRsdGhpcy0+c3RyX2hlYWQpCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCWRsdGhpcy0+c3RyX2hlYWQpOworCit9CQkJCS8qIHN0cmluZ190YWJsZV9mcmVlICovCisKKy8qCisgKiBTeW1ib2wgVGFibGUgTWFpbnRlbmFuY2UgRnVuY3Rpb25zCisgKgorICogQ09GRiBzeW1ib2xzIGFyZSByZWFkIGJ5IGRsb2FkX3N5bWJvbHMoKSwgd2hpY2ggaXMgY2FsbGVkIGFmdGVyCisgKiBzZWN0aW9ucyBoYXZlIGJlZW4gYWxsb2NhdGVkLiAgU3ltYm9scyB3aGljaCBtaWdodCBiZSB1c2VkIGluCisgKiByZWxvY2F0aW9uIChpZSwgbm90IGRlYnVnIGluZm8pIGFyZSByZXRhaW5lZCBpbiBhbiBpbnRlcm5hbCB0ZW1wb3JhcnkKKyAqIGNvbXByZXNzZWQgdGFibGUgKHR5cGUgbG9jYWxfc3ltYm9sKS4gQSBwYXJ0aWN1bGFyIHN5bWJvbCBpcyByZWNvdmVyZWQKKyAqIGJ5IGluZGV4IGJ5IGNhbGxpbmcgZGxvYWRfZmluZF9zeW1ib2woKS4gIGRsb2FkX2ZpbmRfc3ltYm9sCisgKiByZWNvbnN0cnVjdHMgYSBtb3JlIGV4cGxpY2l0IHJlcHJlc2VudGF0aW9uICh0eXBlIFNMT1RWRUMpIHdoaWNoIGlzCisgKiB1c2VkIGJ5IHJlbG9jLmMKKyAqLworLyogcmVhbCBzaXplIG9mIGRlYnVnIGhlYWRlciAqLworI2RlZmluZSBEQkdfSERSX1NJWkUgKHNpemVvZihzdHJ1Y3QgZGxsX21vZHVsZSkgLSBzaXplb2Yoc3RydWN0IGRsbF9zZWN0KSkKKworc3RhdGljIGNvbnN0IGNoYXIgc3ltX2VycmlkW10gPSB7ICJzeW1ib2wiIH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3N5bWJvbHMKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCVJlYWRzIGluIHN5bWJvbHMgYW5kIHJldGFpbnMgb25lcyB0aGF0IG1pZ2h0IGJlIG5lZWRlZCBmb3IgcmVsb2NhdGlvbgorICogcHVycG9zZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIHNpemUgb2Ygc3ltYm9sIGJ1ZmZlciBubyBiaWdnZXIgdGhhbiB0YXJnZXQgZGF0YSBidWZmZXIsIHRvIGxpbWl0IHN0YWNrCisgKiB1c2FnZSAqLworI2RlZmluZSBNWV9TWU1fQlVGX1NJWiAoQllURV9UT19IT1NUKElNQUdFX1BBQ0tFVF9TSVpFKS9cCisJCQlzaXplb2Yoc3RydWN0IGRvZmZfc3ltZW50X3QpKQorCitzdGF0aWMgdm9pZCBkbG9hZF9zeW1ib2xzKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXUzMiBzeW1fY291bnQsIHNpeiwgZHNpeiwgc3ltYm9sc19sZWZ0OworCXUzMiBjaGVja3M7CisJc3RydWN0IGxvY2FsX3N5bWJvbCAqc3A7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpzeW1wOworCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqbmV3c3ltOworCisJc3ltX2NvdW50ID0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc3ltczsKKwlpZiAoc3ltX2NvdW50ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogV2Uga2VlcCBhIGxvY2FsIHN5bWJvbCB0YWJsZSBmb3IgYWxsIG9mIHRoZSBzeW1ib2xzIGluIHRoZSBpbnB1dC4KKwkgKiBUaGlzIHRhYmxlIGNvbnRhaW5zIG9ubHkgc2VjdGlvbiAmIHZhbHVlIGluZm8sIGFzIHdlIGRvIG5vdCBoYXZlCisJICogdG8gZG8gYW55IG5hbWUgcHJvY2Vzc2luZyBmb3IgbG9jYWxzLiAgV2UgcmV1c2UgdGhpcyBzdG9yYWdlCisJICogYXMgYSB0ZW1wb3JhcnkgZm9yIC5kbGx2aWV3IHJlY29yZCBjb25zdHJ1Y3Rpb24uCisJICogQWxsb2NhdGUgc3RvcmFnZSBmb3IgdGhlIHdob2xlIHRhYmxlLiAgQWRkIDEgdG8gdGhlIHNlY3Rpb24gY291bnQKKwkgKiBpbiBjYXNlIGEgdHJhbXBvbGluZSBzZWN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGFzIHdlbGwgYXMgdGhlCisJICogc2l6ZSBvZiB0aGUgdHJhbXBvbGluZSBzZWN0aW9uIG5hbWUgc28gRExMVmlldyBkb2Vucyd0IGdldCBsb3N0LgorCSAqLworCisJc2l6ID0gc3ltX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBsb2NhbF9zeW1ib2wpOworCWRzaXogPSBEQkdfSERSX1NJWkUgKworCSAgICAoc2l6ZW9mKHN0cnVjdCBkbGxfc2VjdCkgKiBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50KSArCisJICAgIEJZVEVfVE9fSE9TVF9ST1VORChkbHRoaXMtPmRlYnVnX3N0cmluZ19zaXplICsgMSk7CisJaWYgKGRzaXogPiBzaXopCisJCXNpeiA9IGRzaXo7CS8qIGxhcmdlciBvZiBzeW1ib2xzIGFuZCAuZGxsdmlldyB0ZW1wICovCisJc3AgPSAoc3RydWN0IGxvY2FsX3N5bWJvbCAqKWRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkJCSAgc2l6KTsKKwlpZiAoIXNwKSB7CisJCURMX0VSUk9SKGVycl9hbGxvYywgc2l6KTsKKwkJcmV0dXJuOworCX0KKwlkbHRoaXMtPmxvY2FsX3N5bXRhYiA9IHNwOworCS8qIFJlYWQgdGhlIHN5bWJvbHMgaW4gdGhlIGlucHV0LCBzdG9yZSB0aGVtIGluIHRoZSB0YWJsZSwgYW5kIHBvc3QgYW55CisJICogZ2xvYmFscyB0byB0aGUgZ2xvYmFsIHN5bWJvbCB0YWJsZS4gIEluIHRoZSBwcm9jZXNzLCBleHRlcm5hbHMKKwkgYmVjb21lIGRlZmluZWQgZnJvbSB0aGUgZ2xvYmFsIHN5bWJvbCB0YWJsZSAqLworCWNoZWNrcyA9IGRsdGhpcy0+dmVyaWZ5LmR2X3N5bV90YWJfY2hlY2tzdW07CisJc3ltYm9sc19sZWZ0ID0gc3ltX2NvdW50OworCWRvIHsJCQkvKiByZWFkIGFsbCBzeW1ib2xzICovCisJCWNoYXIgKnNuYW1lOworCQl1MzIgdmFsOworCQlzMzIgZGVsdGE7CisJCXN0cnVjdCBkb2ZmX3N5bWVudF90ICppbnB1dF9zeW07CisJCXVuc2lnbmVkIHN5bXNfaW5fYnVmOworCQlzdHJ1Y3QgZG9mZl9zeW1lbnRfdCBteV9zeW1fYnVmW01ZX1NZTV9CVUZfU0laXTsKKwkJaW5wdXRfc3ltID0gbXlfc3ltX2J1ZjsKKwkJc3ltc19pbl9idWYgPSBzeW1ib2xzX2xlZnQgPiBNWV9TWU1fQlVGX1NJWiA/CisJCSAgICBNWV9TWU1fQlVGX1NJWiA6IHN5bWJvbHNfbGVmdDsKKwkJc2l6ID0gc3ltc19pbl9idWYgKiBzaXplb2Yoc3RydWN0IGRvZmZfc3ltZW50X3QpOworCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sIGlucHV0X3N5bSwgc2l6KSAhPQorCQkgICAgc2l6KSB7CisJCQlETF9FUlJPUihyZWFkc3RybSwgc3ltX2VycmlkKTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJCWRsb2FkX3Jlb3JkZXIoaW5wdXRfc3ltLCBzaXosIGRsdGhpcy0+cmVvcmRlcl9tYXApOworCisJCWNoZWNrcyArPSBkbG9hZF9jaGVja3N1bShpbnB1dF9zeW0sIHNpeik7CisJCWRvIHsJCS8qIHByb2Nlc3Mgc3ltYm9scyBpbiBidWZmZXIgKi8KKwkJCXN5bWJvbHNfbGVmdCAtPSAxOworCQkJLyogYXR0ZW1wdCB0byBkZXJpdmUgdGhlIG5hbWUgb2YgdGhpcyBzeW1ib2wgKi8KKwkJCXNuYW1lID0gTlVMTDsKKwkJCWlmIChpbnB1dF9zeW0tPmRuX29mZnNldCA+IDApIHsKKyNpZiBCSVRTX1BFUl9BVSA8PSBCSVRTX1BFUl9CWVRFCisJCQkJaWYgKCh1MzIpIGlucHV0X3N5bS0+ZG5fb2Zmc2V0IDwKKwkJCQkgICAgZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpCisJCQkJCXNuYW1lID0gZGx0aGlzLT5zdHJfaGVhZCArCisJCQkJCSAgICBCWVRFX1RPX0hPU1QoaW5wdXRfc3ltLT5kbl9vZmZzZXQpOworCQkJCWVsc2UKKwkJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJCQkJICAgICJCYWQgbmFtZSBvZmZzZXQgaW4gc3ltYm9sICIKKwkJCQkJCSAgICAiICVkIiwgc3ltYm9sc19sZWZ0KTsKKyNlbHNlCisJCQkJc25hbWUgPSB1bnBhY2tfbmFtZShkbHRoaXMsCisJCQkJCQkgICAgaW5wdXRfc3ltLT5kbl9vZmZzZXQpOworI2VuZGlmCisJCQl9CisJCQl2YWwgPSBpbnB1dF9zeW0tPmRuX3ZhbHVlOworCQkJZGVsdGEgPSAwOworCQkJc3AtPnNjbGFzcyA9IGlucHV0X3N5bS0+ZG5fc2NsYXNzOworCQkJc3AtPnNlY25uID0gaW5wdXRfc3ltLT5kbl9zY251bTsKKwkJCS8qIGlmIHRoaXMgaXMgYW4gdW5kZWZpbmVkIHN5bWJvbCwKKwkJCSAqIGRlZmluZSBpdCAob3IgZmFpbCkgbm93ICovCisJCQlpZiAoc3AtPnNlY25uID09IEROX1VOREVGKSB7CisJCQkJLyogcG9pbnRsZXNzIGZvciBzdGF0aWMgdW5kZWZpbmVkICovCisJCQkJaWYgKGlucHV0X3N5bS0+ZG5fc2NsYXNzICE9IEROX0VYVCkKKwkJCQkJZ290byBsb29wX2NvbnQ7CisKKwkJCQkvKiB0cnkgdG8gZGVmaW5lIHN5bWJvbCBmcm9tIHByZXZpb3VzbHkKKwkJCQkgKiBsb2FkZWQgaW1hZ2VzICovCisJCQkJc3ltcCA9IGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdfc3ltYm9sCisJCQkJICAgIChkbHRoaXMtPm15c3ltLCBzbmFtZSk7CisJCQkJaWYgKCFzeW1wKSB7CisJCQkJCURMX0VSUk9SCisJCQkJCSAgICAoIlVuZGVmaW5lZCBleHRlcm5hbCBzeW1ib2wgJXMiLAorCQkJCQkgICAgIHNuYW1lKTsKKwkJCQkJZ290byBsb29wX2NvbnQ7CisJCQkJfQorCQkJCXZhbCA9IGRlbHRhID0gc3ltcC0+dmFsdWU7CisjaWZkZWYgRU5BQkxFX1RSQU1QX0RFQlVHCisJCQkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLAorCQkJCQkJICI9PT0+IGV4dCBzeW0gWyVzXSBhdCAleCIsCisJCQkJCQkgc25hbWUsIHZhbCk7CisjZW5kaWYKKworCQkJCWdvdG8gbG9vcF9jb250OworCQkJfQorCQkJLyogc3ltYm9sIGRlZmluZWQgYnkgdGhpcyBtb2R1bGUgKi8KKwkJCWlmIChzcC0+c2Vjbm4gPiAwKSB7CisJCQkJLyogc3ltYm9sIHJlZmVyZW5jZXMgYSBzZWN0aW9uICovCisJCQkJaWYgKCh1bnNpZ25lZClzcC0+c2Vjbm4gPD0KKwkJCQkgICAgZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudCkgeworCQkJCQkvKiBzZWN0aW9uIHdhcyBhbGxvY2F0ZWQgKi8KKwkJCQkJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNyZWZwID0KKwkJCQkJICAgICZkbHRoaXMtPnNlY3RfaGRyc1tzcC0+c2Vjbm4gLSAxXTsKKworCQkJCQlpZiAoaW5wdXRfc3ltLT5kbl9zY2xhc3MgPT0KKwkJCQkJICAgIEROX1NUQVRMQUIgfHwKKwkJCQkJICAgIGlucHV0X3N5bS0+ZG5fc2NsYXNzID09IEROX0VYVExBQikgeworCQkJCQkJLyogbG9hZCAqLworCQkJCQkJZGVsdGEgPSBzcmVmcC0+ZHNfdmFkZHI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBydW4gKi8KKwkJCQkJCWRlbHRhID0gc3JlZnAtPmRzX3BhZGRyOworCQkJCQl9CisJCQkJCXZhbCArPSBkZWx0YTsKKwkJCQl9CisJCQkJZ290byBsb29wX2l0cjsKKwkJCX0KKwkJCS8qIFRoaXMgc3ltYm9sIGlzIGFuIGFic29sdXRlIHN5bWJvbCAqLworCQkJaWYgKHNwLT5zZWNubiA9PSBETl9BQlMgJiYgKChzcC0+c2NsYXNzID09IEROX0VYVCkgfHwKKwkJCQkJCSAgICAoc3AtPnNjbGFzcyA9PQorCQkJCQkJICAgICBETl9FWFRMQUIpKSkgeworCQkJCXN5bXAgPQorCQkJCSAgICBkbHRoaXMtPm15c3ltLT5maW5kX21hdGNoaW5nX3N5bWJvbChkbHRoaXMtPgorCQkJCQkJCQkJbXlzeW0sCisJCQkJCQkJCQlzbmFtZSk7CisJCQkJaWYgKCFzeW1wKQorCQkJCQlnb3RvIGxvb3BfaXRyOworCQkJCS8qIFRoaXMgYWJzb2x1dGUgc3ltYm9sIGlzIGFscmVhZHkgZGVmaW5lZC4gKi8KKwkJCQlpZiAoc3ltcC0+dmFsdWUgPT0gaW5wdXRfc3ltLT5kbl92YWx1ZSkgeworCQkJCQkvKiBJZiBzeW1ib2wgdmFsdWVzIGFyZSBlcXVhbCwgY29udGludWUKKwkJCQkJICogYnV0IGRvbid0IGFkZCB0byB0aGUgZ2xvYmFsIHN5bWJvbAorCQkJCQkgKiB0YWJsZSAqLworCQkJCQlzcC0+dmFsdWUgPSB2YWw7CisJCQkJCXNwLT5kZWx0YSA9IGRlbHRhOworCQkJCQlzcCArPSAxOworCQkJCQlpbnB1dF9zeW0gKz0gMTsKKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogSWYgc3ltYm9sIHZhbHVlcyBhcmUgbm90IGVxdWFsLAorCQkJCQkgKiByZXR1cm4gd2l0aCByZWRlZmluaXRpb24gZXJyb3IgKi8KKwkJCQkJRExfRVJST1IoIkFic29sdXRlIHN5bWJvbCAlcyBpcyAiCisJCQkJCQkgImRlZmluZWQgbXVsdGlwbGUgdGltZXMgd2l0aCAiCisJCQkJCQkgImRpZmZlcmVudCB2YWx1ZXMiLCBzbmFtZSk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9Citsb29wX2l0cjoKKwkJCS8qIGlmIHRoaXMgaXMgYSBnbG9iYWwgc3ltYm9sLCBwb3N0IGl0IHRvIHRoZQorCQkJICogZ2xvYmFsIHRhYmxlICovCisJCQlpZiAoaW5wdXRfc3ltLT5kbl9zY2xhc3MgPT0gRE5fRVhUIHx8CisJCQkgICAgaW5wdXRfc3ltLT5kbl9zY2xhc3MgPT0gRE5fRVhUTEFCKSB7CisJCQkJLyogS2VlcCB0aGlzIGdsb2JhbCBzeW1ib2wgZm9yIHN1YnNlcXVlbnQKKwkJCQkgKiBtb2R1bGVzLiBEb24ndCBjb21wbGFpbiBvbiBlcnJvciwgdG8gYWxsb3cKKwkJCQkgKiBzeW1ib2wgQVBJIHRvIHN1cHByZXNzIGdsb2JhbCBzeW1ib2xzICovCisJCQkJaWYgKCFzbmFtZSkKKwkJCQkJZ290byBsb29wX2NvbnQ7CisKKwkJCQluZXdzeW0gPSBkbHRoaXMtPm15c3ltLT5hZGRfdG9fc3ltYm9sX3RhYmxlCisJCQkJICAgIChkbHRoaXMtPm15c3ltLCBzbmFtZSwKKwkJCQkgICAgICh1bnNpZ25lZClkbHRoaXMtPm15aGFuZGxlKTsKKwkJCQlpZiAobmV3c3ltKQorCQkJCQluZXdzeW0tPnZhbHVlID0gdmFsOworCisJCQl9CS8qIGdsb2JhbCAqLworbG9vcF9jb250OgorCQkJc3AtPnZhbHVlID0gdmFsOworCQkJc3AtPmRlbHRhID0gZGVsdGE7CisJCQlzcCArPSAxOworCQkJaW5wdXRfc3ltICs9IDE7CisJCX0gd2hpbGUgKChzeW1zX2luX2J1ZiAtPSAxKSA+IDApOwkvKiBwcm9jZXNzIHN5bSBpbiBidWYgKi8KKwl9IHdoaWxlIChzeW1ib2xzX2xlZnQgPiAwKTsJLyogcmVhZCBhbGwgc3ltYm9scyAqLworCWlmICh+Y2hlY2tzKQorCQlkbG9hZF9lcnJvcihkbHRoaXMsICJDaGVja3N1bSBvZiBzeW1ib2xzIGZhaWxlZCIpOworCit9CQkJCS8qIGRsb2FkX3N5bWJvbHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgc3ltYm9sX3RhYmxlX2ZyZWUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJbm9uZQorICoKKyAqIEVmZmVjdDoKKyAqCUZyZWVzIGFueSBzdGF0ZSB1c2VkIGJ5IHRoZSBzeW1ib2wgdGFibGUuCisgKgorICogV0FSTklORzoKKyAqCVRoaXMgcm91dGluZSBpcyBub3QgYWxsb3dlZCB0byBkZWNsYXJlIGVycm9ycyEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBzeW1ib2xfdGFibGVfZnJlZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpZiAoZGx0aGlzLT5sb2NhbF9zeW10YWIpIHsKKwkJaWYgKGRsdGhpcy0+ZGxvYWRfZXJyY291bnQpIHsJLyogYmxvdyBvZmYgb3VyIHN5bWJvbHMgKi8KKwkJCWRsdGhpcy0+bXlzeW0tPnB1cmdlX3N5bWJvbF90YWJsZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCSAgKHVuc2lnbmVkKQorCQkJCQkJCSAgZGx0aGlzLT5teWhhbmRsZSk7CisJCX0KKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJZGx0aGlzLT5sb2NhbF9zeW10YWIpOworCX0KK30JCQkJLyogc3ltYm9sX3RhYmxlX2ZyZWUgKi8KKworLyogLmNpbml0IFByb2Nlc3NpbmcKKyAqCisgKiBUaGUgZHluYW1pYyBsb2FkZXIgZG9lcyAuY2luaXQgaW50ZXJwcmV0YXRpb24uICBjbG9hZF9jaW5pdCgpCisgKiBhY3RzIGFzIGEgc3BlY2lhbCB3cml0ZS10by10YXJnZXQgZnVuY3Rpb24sIGluIHRoYXQgaXQgdGFrZXMgcmVsb2NhdGVkCisgKiBkYXRhIGZyb20gdGhlIG5vcm1hbCBkYXRhIGZsb3csIGFuZCBpbnRlcnByZXRzIGl0IGFzIC5jaW5pdCBhY3Rpb25zLgorICogQmVjYXVzZSB0aGUgbm9ybWFsIGRhdGEgZmxvdyBkb2VzIG5vdCAgbmVjZXNzYXJpbHkgcHJvY2VzcyB0aGUgd2hvbGUKKyAqIC5jaW5pdCBzZWN0aW9uIGluIG9uZSBidWZmZXIsIGNsb2FkX2Npbml0KCkgbXVzdCBiZSBwcmVwYXJlZCB0bworICogaW50ZXJwcmV0IHRoZSBkYXRhIHBpZWNlbWVhbC4gIEEgc3RhdGUgbWFjaGluZSBpcyB1c2VkIGZvciB0aGlzCisgKiBwdXJwb3NlLgorICovCisKKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG9ubHkgZm9yIHVzZSBieSByZWxvYy5jIGFuZCB0aGluZ3MgaXQgY2FsbHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBjaW5pdF9pbmZvX2luaXQgPSB7IGNpbml0bmFtZSwgMCwgMCwKKwkobGRyX2FkZHIpLTEsIDAsIERMT0FEX0JTUywgMAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBjbG9hZF9jaW5pdAorICoKKyAqIFBhcmFtZXRlcnM6CisgKglpcGFja2V0CQlQb2ludGVyIHRvIGRhdGEgcGFja2V0IHRvIGJlIGxvYWRlZAorICoKKyAqIEVmZmVjdDoKKyAqCUludGVycHJldHMgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBhcyAuY2luaXQgZGF0YSwgYW5kIHBlcmZvcm1zIHRoZQorICogYXBwcm9wcmlhdGUgaW5pdGlhbGl6YXRpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBjbG9hZF9jaW5pdChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKKwkJCXN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCkKK3sKKyNpZiBUREFUQV9UT19IT1NUKENJTklUX0NPVU5UKSpCSVRTX1BFUl9BVSA+IDE2CisJczMyIGluaXRfY291bnQsIGxlZnQ7CisjZWxzZQorCXMxNiBpbml0X2NvdW50LCBsZWZ0OworI2VuZGlmCisJdW5zaWduZWQgY2hhciAqcGt0cCA9IGlwYWNrZXQtPmltZ19kYXRhOworCXVuc2lnbmVkIGNoYXIgKnBrdGVuZCA9IHBrdHAgKyBCWVRFX1RPX0hPU1RfUk9VTkQoaXBhY2tldC0+cGFja2V0X3NpemUpOworCWludCB0ZW1wOworCWxkcl9hZGRyIGF0bXA7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gY2luaXRfaW5mbzsKKworCS8qICBQUk9DRVNTIEFMTCBUSEUgSU5JVElBTElaQVRJT04gUkVDT1JEUyBUSEUgQlVGRkVSLiAqLworCXdoaWxlICh0cnVlKSB7CisJCWxlZnQgPSBwa3RlbmQgLSBwa3RwOworCQlzd2l0Y2ggKGRsdGhpcy0+Y2luaXRfc3RhdGUpIHsKKwkJY2FzZSBDSV9DT1VOVDoJLyogY291bnQgZmllbGQgKi8KKwkJCWlmIChsZWZ0IDwgVERBVEFfVE9fSE9TVChDSU5JVF9DT1VOVCkpCisJCQkJZ290byBsb29wZXhpdDsKKwkJCXRlbXAgPSBkbG9hZF91bnBhY2soZGx0aGlzLCAodGd0X2F1X3QgKikgcGt0cCwKKwkJCQkJICAgIENJTklUX0NPVU5UICogVERBVEFfQVVfQklUUywgMCwKKwkJCQkJICAgIFJPUF9TR04pOworCQkJcGt0cCArPSBUREFUQV9UT19IT1NUKENJTklUX0NPVU5UKTsKKwkJCS8qIG5lZ2F0aXZlIHNpZ25pZmllcyBCU1MgdGFibGUsIHplcm8gbWVhbnMgZG9uZSAqLworCQkJaWYgKHRlbXAgPD0gMCkgeworCQkJCWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9ET05FOworCQkJCWJyZWFrOworCQkJfQorCQkJZGx0aGlzLT5jaW5pdF9jb3VudCA9IHRlbXA7CisJCQlkbHRoaXMtPmNpbml0X3N0YXRlID0gQ0lfQUREUkVTUzsKKwkJCWJyZWFrOworI2lmIENJTklUX0FMSUdOIDwgQ0lOSVRfQUREUkVTUworCQljYXNlIENJX1BBUlRBRERSRVNTOgorCQkJcGt0cCAtPSBUREFUQV9UT19IT1NUKENJTklUX0FMSUdOKTsKKwkJCS8qIGJhY2sgdXAgcG9pbnRlciBpbnRvIHNwYWNlIGNvdXJ0ZXN5IG9mIGNhbGxlciAqLworCQkJKih1aW50MTZfdCAqKSBwa3RwID0gZGx0aGlzLT5jaW5pdF9hZGRyOworCQkJLyogc3R1ZmYgaW4gc2F2ZWQgYml0cyAgISEgRkFMTCBUSFJVICEhICovCisjZW5kaWYKKwkJY2FzZSBDSV9BRERSRVNTOgkvKiBBZGRyZXNzIGZpZWxkIGZvciBhIGNvcHkgcGFja2V0ICovCisJCQlpZiAobGVmdCA8IFREQVRBX1RPX0hPU1QoQ0lOSVRfQUREUkVTUykpIHsKKyNpZiBDSU5JVF9BTElHTiA8IENJTklUX0FERFJFU1MKKwkJCQlpZiAobGVmdCA9PSBUREFUQV9UT19IT1NUKENJTklUX0FMSUdOKSkgeworCQkJCQkvKiBhZGRyZXNzIGJyb2tlbiBpbnRvIGhhbHZlcyAqLworCQkJCQlkbHRoaXMtPmNpbml0X2FkZHIgPSAqKHVpbnQxNl90ICopIHBrdHA7CisJCQkJCS8qIHJlbWVtYmVyIDFzdCBoYWxmICovCisJCQkJCWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9QQVJUQUREUkVTUzsKKwkJCQkJbGVmdCA9IDA7CisJCQkJfQorI2VuZGlmCisJCQkJZ290byBsb29wZXhpdDsKKwkJCX0KKwkJCWF0bXAgPSBkbG9hZF91bnBhY2soZGx0aGlzLCAodGd0X2F1X3QgKikgcGt0cCwKKwkJCQkJICAgIENJTklUX0FERFJFU1MgKiBUREFUQV9BVV9CSVRTLCAwLAorCQkJCQkgICAgUk9QX1VOUyk7CisJCQlwa3RwICs9IFREQVRBX1RPX0hPU1QoQ0lOSVRfQUREUkVTUyk7CisjaWYgQ0lOSVRfUEFHRV9CSVRTID4gMAorCQkJZGx0aGlzLT5jaW5pdF9wYWdlID0gYXRtcCAmCisJCQkgICAgKCgxIDw8IENJTklUX1BBR0VfQklUUykgLSAxKTsKKwkJCWF0bXAgPj49IENJTklUX1BBR0VfQklUUzsKKyNlbHNlCisJCQlkbHRoaXMtPmNpbml0X3BhZ2UgPSBDSU5JVF9ERUZBVUxUX1BBR0U7CisjZW5kaWYKKwkJCWRsdGhpcy0+Y2luaXRfYWRkciA9IGF0bXA7CisJCQlkbHRoaXMtPmNpbml0X3N0YXRlID0gQ0lfQ09QWTsKKwkJCWJyZWFrOworCQljYXNlIENJX0NPUFk6CS8qIGNvcHkgYml0cyB0byB0aGUgdGFyZ2V0ICovCisJCQlpbml0X2NvdW50ID0gSE9TVF9UT19UREFUQShsZWZ0KTsKKwkJCWlmIChpbml0X2NvdW50ID4gZGx0aGlzLT5jaW5pdF9jb3VudCkKKwkJCQlpbml0X2NvdW50ID0gZGx0aGlzLT5jaW5pdF9jb3VudDsKKwkJCWlmIChpbml0X2NvdW50ID09IDApCisJCQkJZ290byBsb29wZXhpdDsJLyogZ2V0IG1vcmUgYml0cyAqLworCQkJY2luaXRfaW5mbyA9IGNpbml0X2luZm9faW5pdDsKKwkJCWNpbml0X2luZm8ucGFnZSA9IGRsdGhpcy0+Y2luaXRfcGFnZTsKKwkJCWlmICghZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sIHBrdHAsCisJCQkJCQkgICBUREFUQV9UT19UQUREUgorCQkJCQkJICAgKGRsdGhpcy0+Y2luaXRfYWRkciksCisJCQkJCQkgICAmY2luaXRfaW5mbywKKwkJCQkJCSAgIFREQVRBX1RPX0hPU1QoaW5pdF9jb3VudCkpKSB7CisJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCBpbml0ZmFpbCwgIndyaXRlIiwKKwkJCQkJICAgIGRsdGhpcy0+Y2luaXRfYWRkcik7CisJCQl9CisJCQlkbHRoaXMtPmNpbml0X2NvdW50IC09IGluaXRfY291bnQ7CisJCQlpZiAoZGx0aGlzLT5jaW5pdF9jb3VudCA8PSAwKSB7CisJCQkJZGx0aGlzLT5jaW5pdF9zdGF0ZSA9IENJX0NPVU5UOworCQkJCWluaXRfY291bnQgPSAoaW5pdF9jb3VudCArIENJTklUX0FMSUdOIC0gMSkgJgorCQkJCSAgICAtQ0lOSVRfQUxJR047CisJCQkJLyogYWxpZ24gdG8gbmV4dCBpbml0ICovCisJCQl9CisJCQlwa3RwICs9IFREQVRBX1RPX0hPU1QoaW5pdF9jb3VudCk7CisJCQlkbHRoaXMtPmNpbml0X2FkZHIgKz0gaW5pdF9jb3VudDsKKwkJCWJyZWFrOworCQljYXNlIENJX0RPTkU6CS8qIG5vIG1vcmUgLmNpbml0IHRvIGRvICovCisJCQlyZXR1cm47CisJCX0JCS8qIHN3aXRjaCAoY2luaXRfc3RhdGUpICovCisJfQkJCS8qIHdoaWxlICovCisKK2xvb3BleGl0OgorCWlmIChsZWZ0ID4gMCkgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsICIlZCBieXRlcyBsZWZ0IG92ZXIgaW4gY2luaXQgcGFja2V0IiwgbGVmdCk7CisJCWRsdGhpcy0+Y2luaXRfc3RhdGUgPSBDSV9ET05FOwkvKiBsZWZ0IG92ZXIgYnl0ZXMgYXJlIGJhZCAqLworCX0KK30JCQkJLyogY2xvYWRfY2luaXQgKi8KKworLyoJRnVuY3Rpb25zIHRvIGludGVyZmFjZSB0byByZWxvYy5jCisgKgorICogcmVsb2MuYyBpcyB0aGUgcmVsb2NhdGlvbiBtb2R1bGUgYm9ycm93ZWQgZnJvbSB0aGUgbGlua2VyLCB3aXRoCisgKiBtaW5pbWFsICh3ZSBob3BlKSBjaGFuZ2VzIGZvciBvdXIgcHVycG9zZXMuICBjbG9hZF9zZWN0X2RhdGEoKSBpbnZva2VzCisgKiB0aGlzIG1vZHVsZSBvbiBhIHNlY3Rpb24gdG8gcmVsb2NhdGUgYW5kIGxvYWQgdGhlIGltYWdlIGRhdGEgZm9yIHRoYXQKKyAqIHNlY3Rpb24uICBUaGUgYWN0dWFsIHJlYWQgYW5kIHdyaXRlIGFjdGlvbnMgYXJlIHN1cHBsaWVkIGJ5IHRoZSBnbG9iYWwKKyAqIHJvdXRpbmVzIGJlbG93LgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSByZWxvY2F0ZV9wYWNrZXQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJaXBhY2tldAkJUG9pbnRlciB0byBhbiBpbWFnZSBwYWNrZXQgdG8gcmVsb2NhdGUKKyAqCisgKiBFZmZlY3Q6CisgKglQZXJmb3JtcyB0aGUgcmVxdWlyZWQgcmVsb2NhdGlvbnMgb24gdGhlIHBhY2tldC4gIFJldHVybnMgYSBjaGVja3N1bQorICogb2YgdGhlIHJlbG9jYXRpb24gb3BlcmF0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworI2RlZmluZSBNWV9SRUxPQ19CVUZfU0laIDgKKy8qIGNhcmVmdWwhIGV4aXN0cyBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBpbWFnZSBidWZmZXIgKi8KK3N0YXRpYyBpbnQgcmVsb2NhdGVfcGFja2V0KHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJICAgc3RydWN0IGltYWdlX3BhY2tldF90ICppcGFja2V0LAorCQkJICAgdTMyICpjaGVja3MsIGJvb2wgKnRyYW1wc19nZW5lcmF0ZWQpCit7CisJdTMyIHJudW07CisJKnRyYW1wc19nZW5lcmF0ZWQgPSBmYWxzZTsKKworCXJudW0gPSBpcGFja2V0LT5udW1fcmVsb2NzOworCWRvIHsJCQkvKiBhbGwgcmVsb2NzICovCisJCXVuc2lnbmVkIHJpbmJ1ZjsKKwkJaW50IHNpejsKKwkJc3RydWN0IHJlbG9jX3JlY29yZF90ICpycCwgcnJlY1tNWV9SRUxPQ19CVUZfU0laXTsKKwkJcnAgPSBycmVjOworCQlyaW5idWYgPSBybnVtID4gTVlfUkVMT0NfQlVGX1NJWiA/IE1ZX1JFTE9DX0JVRl9TSVogOiBybnVtOworCQlzaXogPSByaW5idWYgKiBzaXplb2Yoc3RydWN0IHJlbG9jX3JlY29yZF90KTsKKwkJaWYgKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIoZGx0aGlzLT5zdHJtLCBycCwgc2l6KSAhPSBzaXopIHsKKwkJCURMX0VSUk9SKHJlYWRzdHJtLCAicmVsb2NhdGlvbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyogcmVvcmRlciB0aGUgYnl0ZXMgaWYgbmVlZCBiZSAqLworCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJCWRsb2FkX3Jlb3JkZXIocnAsIHNpeiwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwkJKmNoZWNrcyArPSBkbG9hZF9jaGVja3N1bShycCwgc2l6KTsKKwkJZG8geworCQkJLyogcGVyZm9ybSB0aGUgcmVsb2NhdGlvbiBvcGVyYXRpb24gKi8KKwkJCWRsb2FkX3JlbG9jYXRlKGRsdGhpcywgKHRndF9hdV90ICopIGlwYWNrZXQtPmltZ19kYXRhLAorCQkJCSAgICAgICBycCwgdHJhbXBzX2dlbmVyYXRlZCwgZmFsc2UpOworCQkJcnAgKz0gMTsKKwkJCXJudW0gLT0gMTsKKwkJfSB3aGlsZSAoKHJpbmJ1ZiAtPSAxKSA+IDApOworCX0gd2hpbGUgKHJudW0gPiAwKTsJLyogYWxsIHJlbG9jcyAqLworCS8qIElmIHRyYW1wb2xpbmUocykgd2VyZSBnZW5lcmF0ZWQsIHdlIG5lZWQgdG8gZG8gYW4gdXBkYXRlIG9mIHRoZQorCSAqIHRyYW1wb2xpbmUgY29weSBvZiB0aGUgcGFja2V0IHNpbmNlIGEgMm5kIHBoYXNlIHJlbG8gd2lsbCBiZSBkb25lCisJICogbGF0ZXIuICovCisJaWYgKCp0cmFtcHNfZ2VuZXJhdGVkID09IHRydWUpIHsKKwkJZGxvYWRfdHJhbXBfcGt0X3VkcGF0ZShkbHRoaXMsCisJCQkJICAgICAgIChkbHRoaXMtPmltYWdlX3NlY24gLQorCQkJCQlkbHRoaXMtPmxkcl9zZWN0aW9ucyksCisJCQkJICAgICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0LCBpcGFja2V0KTsKKwl9CisKKwlyZXR1cm4gMTsKK30JCQkJLyogZGxvYWRfcmVhZF9yZWxvYyAqLworCisjZGVmaW5lIElQSF9TSVpFIChzaXplb2Yoc3RydWN0IGltYWdlX3BhY2tldF90KSAtIHNpemVvZih1MzIpKQorCisvKiBWRVJZIGRhbmdlcm91cyAqLworc3RhdGljIGNvbnN0IGNoYXIgaW1hZ2VwYWtbXSA9IHsgImltYWdlIHBhY2tldCIgfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9kYXRhCisgKgorICogUGFyYW1ldGVyczoKKyAqCW5vbmUKKyAqCisgKiBFZmZlY3Q6CisgKglSZWFkIGltYWdlIGRhdGEgZnJvbSBpbnB1dCBmaWxlLCByZWxvY2F0ZSBpdCwgYW5kIGRvd25sb2FkIGl0IHRvIHRoZQorICoJdGFyZ2V0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgdm9pZCBkbG9hZF9kYXRhKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXUxNiBjdXJyX3NlY3Q7CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIgPSBkbHRoaXMtPnNlY3RfaGRyczsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqbHB0ciA9IGRsdGhpcy0+bGRyX3NlY3Rpb25zOworI2lmZGVmIE9QVF9aRVJPX0NPUFlfTE9BREVSCisJYm9vbCB6ZXJvX2NvcHkgPSBmYWxzZTsKKyNlbmRpZgorCXU4ICpkZXN0OworCisJc3RydWN0IHsKKwkJc3RydWN0IGltYWdlX3BhY2tldF90IGlwYWNrZXQ7CisJCXU4IGJ1ZnJbQllURV9UT19IT1NUKElNQUdFX1BBQ0tFVF9TSVpFKV07CisJfSBpYnVmOworCisJLyogSW5kaWNhdGVzIHdoZXRoZXIgQ0lOSVQgcHJvY2Vzc2luZyBoYXMgb2NjdXJyZWQgKi8KKwlib29sIGNpbml0X3Byb2Nlc3NlZCA9IGZhbHNlOworCisJLyogTG9vcCB0aHJvdWdoIHRoZSBzZWN0aW9ucyBhbmQgbG9hZCB0aGVtIG9uZSBhdCBhIHRpbWUuCisJICovCisJZm9yIChjdXJyX3NlY3QgPSAwOyBjdXJyX3NlY3QgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOworCSAgICAgY3Vycl9zZWN0ICs9IDEpIHsKKwkJaWYgKGRzX25lZWRzX2Rvd25sb2FkKHNwdHIpKSB7CisJCQlzMzIgbmlwOworCQkJbGRyX2FkZHIgaW1hZ2Vfb2Zmc2V0ID0gMDsKKwkJCS8qIHNldCByZWxvY2F0aW9uIGluZm8gZm9yIHRoaXMgc2VjdGlvbiAqLworCQkJaWYgKGN1cnJfc2VjdCA8IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQpCisJCQkJZGx0aGlzLT5kZWx0YV9ydW5hZGRyID0gc3B0ci0+ZHNfcGFkZHI7CisJCQllbHNlIHsKKwkJCQlscHRyID0gKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopc3B0cjsKKwkJCQlkbHRoaXMtPmRlbHRhX3J1bmFkZHIgPSAwOworCQkJfQorCQkJZGx0aGlzLT5pbWFnZV9zZWNuID0gbHB0cjsKKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKKwkJCWxwdHItPm5hbWUgPSB1bnBhY2tfbmFtZShkbHRoaXMsIHNwdHItPmRzX29mZnNldCk7CisjZW5kaWYKKwkJCW5pcCA9IHNwdHItPmRzX25pcGFja3M7CisJCQl3aGlsZSAoKG5pcCAtPSAxKSA+PSAwKSB7CS8qIHByb2Nlc3MgcGFja2V0cyAqLworCisJCQkJczMyIGlwc2l6ZTsKKwkJCQl1MzIgY2hlY2tzOworCQkJCWJvb2wgdHJhbXBfZ2VuZXJhdGVkID0gZmFsc2U7CisKKwkJCQkvKiBnZXQgdGhlIGZpeGVkIGhlYWRlciBiaXRzICovCisJCQkJaWYgKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIoZGx0aGlzLT5zdHJtLAorCQkJCQkJCSAgICAgICZpYnVmLmlwYWNrZXQsCisJCQkJCQkJICAgICAgSVBIX1NJWkUpICE9CisJCQkJICAgIElQSF9TSVpFKSB7CisJCQkJCURMX0VSUk9SKHJlYWRzdHJtLCBpbWFnZXBhayk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJLyogcmVvcmRlciB0aGUgaGVhZGVyIGlmIG5lZWQgYmUgKi8KKwkJCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkgeworCQkJCQlkbG9hZF9yZW9yZGVyKCZpYnVmLmlwYWNrZXQsIElQSF9TSVpFLAorCQkJCQkJICAgICAgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisJCQkJfQorCQkJCS8qIG5vdyByZWFkIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KKwkJCQlpcHNpemUgPQorCQkJCSAgICBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTgorCQkJCQkJIChpYnVmLmlwYWNrZXQucGFja2V0X3NpemUpKTsKKwkJCQlpZiAoaXBzaXplID4gQllURV9UT19IT1NUKElNQUdFX1BBQ0tFVF9TSVpFKSkgeworCQkJCQlETF9FUlJPUigiQmFkIGltYWdlIHBhY2tldCBzaXplICVkIiwKKwkJCQkJCSBpcHNpemUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWRlc3QgPSBpYnVmLmJ1ZnI7CisjaWZkZWYgT1BUX1pFUk9fQ09QWV9MT0FERVIKKwkJCQl6ZXJvX2NvcHkgPSBmYWxzZTsKKwkJCQlpZiAoIWRsb2FkX2NoZWNrX3R5cGUoc3B0ciwgRExPQURfQ0lOSVQpIHsKKwkJCQkJZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sCisJCQkJCQkJICAgICAgICZkZXN0LAorCQkJCQkJCSAgICAgICBscHRyLT5sb2FkX2FkZHIgKworCQkJCQkJCSAgICAgICBpbWFnZV9vZmZzZXQsCisJCQkJCQkJICAgICAgIGxwdHIsIDApOworCQkJCQl6ZXJvX2NvcHkgPSAoZGVzdCAhPSBpYnVmLmJ1ZnIpOworCQkJCX0KKyNlbmRpZgorCQkJCS8qIEVuZCBvZiBkZXRlcm1pbmF0aW9uICovCisKKwkJCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sCisJCQkJCQkJICAgICAgaWJ1Zi5idWZyLAorCQkJCQkJCSAgICAgIGlwc2l6ZSkgIT0KKwkJCQkgICAgaXBzaXplKSB7CisJCQkJCURMX0VSUk9SKHJlYWRzdHJtLCBpbWFnZXBhayk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQkJaWJ1Zi5pcGFja2V0LmltZ19kYXRhID0gZGVzdDsKKworCQkJCS8qIHJlb3JkZXIgdGhlIGJ5dGVzIGlmIG5lZWQgYmUgKi8KKyNpZiAhZGVmaW5lZChfQklHX0VORElBTikgfHwgKFRBUkdFVF9BVV9CSVRTID4gMTYpCisJCQkJaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXApIHsKKwkJCQkJZGxvYWRfcmVvcmRlcihkZXN0LCBpcHNpemUsCisJCQkJCQkgICAgICBkbHRoaXMtPnJlb3JkZXJfbWFwKTsKKwkJCQl9CisJCQkJY2hlY2tzID0gZGxvYWRfY2hlY2tzdW0oZGVzdCwgaXBzaXplKTsKKyNlbHNlCisJCQkJaWYgKGRsdGhpcy0+ZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlICE9CisJCQkJICAgIFRBUkdFVF9PUkRFUihSRU9SREVSX01BUAorCQkJCQkJIChCWVRFX1JFU0hVRkZMRV9WQUxVRSkpKSB7CisJCQkJCS8qIHB1dCBpbWFnZSBieXRlcyBpbiBiaWctZW5kaWFuIG9yZGVyLAorCQkJCQkgKiBub3QgUEMgb3JkZXIgKi8KKwkJCQkJZGxvYWRfcmVvcmRlcihkZXN0LCBpcHNpemUsCisJCQkJCQkgICAgICBUQVJHRVRfT1JERVIKKwkJCQkJCSAgICAgIChkbHRoaXMtPmRmaWxlX2hkci4KKwkJCQkJCSAgICAgICBkZl9ieXRlX3Jlc2h1ZmZsZSkpOworCQkJCX0KKyNpZiBUQVJHRVRfQVVfQklUUyA+IDgKKwkJCQljaGVja3MgPSBkbG9hZF9yZXZlcnNlX2NoZWNrc3VtMTYoZGVzdCwgaXBzaXplKTsKKyNlbHNlCisJCQkJY2hlY2tzID0gZGxvYWRfcmV2ZXJzZV9jaGVja3N1bShkZXN0LCBpcHNpemUpOworI2VuZGlmCisjZW5kaWYKKworCQkJCWNoZWNrcyArPSBkbG9hZF9jaGVja3N1bSgmaWJ1Zi5pcGFja2V0LAorCQkJCQkJCSBJUEhfU0laRSk7CisJCQkJLyogcmVsb2NhdGUgdGhlIGltYWdlIGJpdHMgYXMgbmVlZGVkICovCisJCQkJaWYgKGlidWYuaXBhY2tldC5udW1fcmVsb2NzKSB7CisJCQkJCWRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ID0gaW1hZ2Vfb2Zmc2V0OworCQkJCQlpZiAoIXJlbG9jYXRlX3BhY2tldChkbHRoaXMsCisJCQkJCQkJICAgICAmaWJ1Zi5pcGFja2V0LAorCQkJCQkJCSAgICAgJmNoZWNrcywKKwkJCQkJCQkgICAgICZ0cmFtcF9nZW5lcmF0ZWQpKQorCQkJCQkJcmV0dXJuOwkvKiBzZXJpb3VzIGVycm9yICovCisJCQkJfQorCQkJCWlmICh+Y2hlY2tzKQorCQkJCQlETF9FUlJPUihlcnJfY2hlY2tzdW0sIGltYWdlcGFrKTsKKwkJCQkvKiBPbmx5IHdyaXRlIHRoZSByZXN1bHQgdG8gdGhlIHRhcmdldCBpZiBubworCQkJCSAqIHRyYW1wb2xpbmUgd2FzIGdlbmVyYXRlZC4gIE90aGVyd2lzZSBpdAorCQkJCSAqd2lsbCBiZSBkb25lIGR1cmluZyB0cmFtcG9saW5lIGZpbmFsaXplLiAqLworCisJCQkJaWYgKHRyYW1wX2dlbmVyYXRlZCA9PSBmYWxzZSkgeworCisJCQkJCS8qIHN0dWZmIHRoZSByZXN1bHQgaW50byB0YXJnZXQKKwkJCQkJICogbWVtb3J5ICovCisJCQkJCWlmIChkbG9hZF9jaGVja190eXBlKHNwdHIsCisJCQkJCQlETE9BRF9DSU5JVCkpIHsKKwkJCQkJCWNsb2FkX2Npbml0KGRsdGhpcywKKwkJCQkJCQkgICAgJmlidWYuaXBhY2tldCk7CisJCQkJCQljaW5pdF9wcm9jZXNzZWQgPSB0cnVlOworCQkJCQl9IGVsc2UgeworI2lmZGVmIE9QVF9aRVJPX0NPUFlfTE9BREVSCisJCQkJCQlpZiAoIXplcm9fY29weSkgeworI2VuZGlmCisJCQkJCQkJLyogRklYTUUgKi8KKwkJCQkJCQlpZiAoIWRsdGhpcy0+bXlpby0+CisJCQkJCQkJICAgIHdyaXRlbWVtKGRsdGhpcy0+CisJCQkJCQkJCW15aW8sCisJCQkJCQkJCWlidWYuYnVmciwKKwkJCQkJCQkJbHB0ci0+CisJCQkJCQkJCWxvYWRfYWRkciArCisJCQkJCQkJCWltYWdlX29mZnNldCwKKwkJCQkJCQkJbHB0ciwKKwkJCQkJCQkJQllURV9UT19IT1NUCisJCQkJCQkJCShpYnVmLgorCQkJCQkJCQlpcGFja2V0LgorCQkJCQkJCQlwYWNrZXRfc2l6ZSkpKSB7CisJCQkJCQkJCURMX0VSUk9SCisJCQkJCQkJCSAgKCJXcml0ZSB0byAiCisJCQkJCQkJCSAgRk1UX1VJMzIKKwkJCQkJCQkJICAiIGZhaWxlZCIsCisJCQkJCQkJCSAgbHB0ci0+CisJCQkJCQkJCSAgbG9hZF9hZGRyICsKKwkJCQkJCQkJICBpbWFnZV9vZmZzZXQpOworCQkJCQkJCX0KKyNpZmRlZiBPUFRfWkVST19DT1BZX0xPQURFUgorCQkJCQkJfQorI2VuZGlmCisJCQkJCX0KKwkJCQl9CisJCQkJaW1hZ2Vfb2Zmc2V0ICs9CisJCQkJICAgIEJZVEVfVE9fVEFERFIoaWJ1Zi5pcGFja2V0LnBhY2tldF9zaXplKTsKKwkJCX0JLyogcHJvY2VzcyBwYWNrZXRzICovCisJCQkvKiBpZiB0aGlzIGlzIGEgQlNTIHNlY3Rpb24sIHdlIG1heSB3YW50IHRvIGZpbGwgaXQgKi8KKwkJCWlmICghZGxvYWRfY2hlY2tfdHlwZShzcHRyLCBETE9BRF9CU1MpKQorCQkJCWdvdG8gbG9vcF9jb250OworCisJCQlpZiAoIShkbHRoaXMtPm15b3B0aW9ucyAmIERMT0FEX0lOSVRCU1MpKQorCQkJCWdvdG8gbG9vcF9jb250OworCisJCQlpZiAoY2luaXRfcHJvY2Vzc2VkKSB7CisJCQkJLyogRG9uJ3QgY2xlYXIgQlNTIGFmdGVyIGxvYWQtdGltZQorCQkJCSAqIGluaXRpYWxpemF0aW9uICovCisJCQkJRExfRVJST1IKKwkJCQkgICAgKCJaZXJvLWluaXRpYWxpemF0aW9uIGF0ICIgRk1UX1VJMzIKKwkJCQkgICAgICIgYWZ0ZXIgIiAibG9hZC10aW1lIGluaXRpYWxpemF0aW9uISIsCisJCQkJICAgICBscHRyLT5sb2FkX2FkZHIpOworCQkJCWdvdG8gbG9vcF9jb250OworCQkJfQorCQkJLyogZmlsbCB0aGUgLmJzcyBhcmVhICovCisJCQlkbHRoaXMtPm15aW8tPmZpbGxtZW0oZGx0aGlzLT5teWlvLAorCQkJCQkgICAgICBUQUREUl9UT19IT1NUKGxwdHItPmxvYWRfYWRkciksCisJCQkJCSAgICAgIGxwdHIsIFRBRERSX1RPX0hPU1QobHB0ci0+c2l6ZSksCisJCQkJCSAgICAgIERMT0FEX0ZJTExfQlNTKTsKKwkJCWdvdG8gbG9vcF9jb250OworCQl9CisJCS8qIGlmIERTX0RPV05MT0FEX01BU0sgKi8KKwkJLyogSWYgbm90IGxvYWRpbmcsIGJ1dCBCU1MsIHplcm8gaW5pdGlhbGl6ZSAqLworCQlpZiAoIWRsb2FkX2NoZWNrX3R5cGUoc3B0ciwgRExPQURfQlNTKSkKKwkJCWdvdG8gbG9vcF9jb250OworCisJCWlmICghKGRsdGhpcy0+bXlvcHRpb25zICYgRExPQURfSU5JVEJTUykpCisJCQlnb3RvIGxvb3BfY29udDsKKworCQlpZiAoY3Vycl9zZWN0ID49IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQpCisJCQlscHRyID0gKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopc3B0cjsKKworCQlpZiAoY2luaXRfcHJvY2Vzc2VkKSB7CisJCQkvKkRvbid0IGNsZWFyIEJTUyBhZnRlciBsb2FkLXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKwkJCURMX0VSUk9SKCJaZXJvLWluaXRpYWxpemF0aW9uIGF0ICIgRk1UX1VJMzIKKwkJCQkgIiBhdHRlbXB0ZWQgYWZ0ZXIgIgorCQkJCSAibG9hZC10aW1lIGluaXRpYWxpemF0aW9uISIsIGxwdHItPmxvYWRfYWRkcik7CisJCQlnb3RvIGxvb3BfY29udDsKKwkJfQorCQkvKiBmaWxsIHRoZSAuYnNzIGFyZWEgKi8KKwkJZGx0aGlzLT5teWlvLT5maWxsbWVtKGRsdGhpcy0+bXlpbywKKwkJCQkgICAgICBUQUREUl9UT19IT1NUKGxwdHItPmxvYWRfYWRkciksIGxwdHIsCisJCQkJICAgICAgVEFERFJfVE9fSE9TVChscHRyLT5zaXplKSwKKwkJCQkgICAgICBETE9BRF9GSUxMX0JTUyk7Citsb29wX2NvbnQ6CisJCXNwdHIgKz0gMTsKKwkJbHB0ciArPSAxOworCX0JCQkvKiBsb2FkIHNlY3Rpb25zICovCisKKwkvKiAgRmluYWxpemUgYW55IHRyYW1wb2xpbmVzIHRoYXQgd2VyZSBjcmVhdGVkIGR1cmluZyB0aGUgbG9hZCAqLworCWlmIChkbG9hZF90cmFtcF9maW5hbGl6ZShkbHRoaXMpID09IDApIHsKKwkJRExfRVJST1IoIkZpbmFsaXphdGlvbiBvZiBhdXRvLXRyYW1wb2xpbmVzIChzaXplID0gIiBGTVRfVUkzMgorCQkJICIpIGZhaWxlZCIsIGRsdGhpcy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHIpOworCX0KK30JCQkJLyogZGxvYWRfZGF0YSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3Jlb3JkZXIKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZGF0YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgYnl0ZS1zd2FwcGVkCisgKglkc2l6CXNpemUgb2YgdGhlIGRhdGEgdG8gYmUgcmVvcmRlcmVkIGluIHNpemVvZigpIHVuaXRzLgorICoJbWFwCQkzMi1iaXQgbWFwIGRlZmluaW5nIGhvdyB0byByZW9yZGVyIHRoZSBkYXRhLiAgVmFsdWUKKyAqCQkJbXVzdCBiZSBSRU9SREVSX01BUCgpIG9mIHNvbWUgcGVybXV0YXRpb24KKyAqCQkJb2YgMHgwMCAwMSAwMiAwMworICoKKyAqIEVmZmVjdDoKKyAqCVJlLWFycmFuZ2VzIHRoZSBieXRlcyBpbiBlYWNoIHdvcmQgYWNjb3JkaW5nIHRvIHRoZSBtYXAgc3BlY2lmaWVkLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbWFzayBmb3IgYnl0ZSBzaGlmdCBjb3VudCAqLworI2RlZmluZSBTSElGVF9DT1VOVF9NQVNLICgzIDw8IExPR19CSVRTX1BFUl9CWVRFKQorCit2b2lkIGRsb2FkX3Jlb3JkZXIodm9pZCAqZGF0YSwgaW50IGRzaXosIHVuc2lnbmVkIGludCBtYXApCit7CisJcmVnaXN0ZXIgdTMyIHRtcCwgdG1hcCwgZGF0djsKKwl1MzIgKmRwID0gKHUzMiAqKSBkYXRhOworCisJbWFwIDw8PSBMT0dfQklUU19QRVJfQllURTsJLyogYWxpZ24gbWFwIHdpdGggU0hJRlRfQ09VTlRfTUFTSyAqLworCWRvIHsKKwkJdG1wID0gMDsKKwkJZGF0diA9ICpkcDsKKwkJdG1hcCA9IG1hcDsKKwkJZG8geworCQkJdG1wIHw9IChkYXR2ICYgQllURV9NQVNLKSA8PCAodG1hcCAmIFNISUZUX0NPVU5UX01BU0spOworCQkJdG1hcCA+Pj0gQklUU19QRVJfQllURTsKKwkJfSB3aGlsZSAoZGF0diA+Pj0gQklUU19QRVJfQllURSk7CisJCSpkcCsrID0gdG1wOworCX0gd2hpbGUgKChkc2l6IC09IHNpemVvZih1MzIpKSA+IDApOworfQkJCQkvKiBkbG9hZF9yZW9yZGVyICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZGxvYWRfY2hlY2tzdW0KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZGF0YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgY2hlY2tzdW1tZWQKKyAqCXNpegkJc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBjaGVja3N1bW1lZCBpbiBzaXplb2YoKSB1bml0cy4KKyAqCisgKiBFZmZlY3Q6CisgKglSZXR1cm5zIGEgY2hlY2tzdW0gb2YgdGhlIHNwZWNpZmllZCBibG9jaworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordTMyIGRsb2FkX2NoZWNrc3VtKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHNpeikKK3sKKwl1MzIgc3VtOworCXUzMiAqZHA7CisJaW50IGxlZnQ7CisKKwlzdW0gPSAwOworCWRwID0gKHUzMiAqKSBkYXRhOworCWZvciAobGVmdCA9IHNpejsgbGVmdCA+IDA7IGxlZnQgLT0gc2l6ZW9mKHUzMikpCisJCXN1bSArPSAqZHArKzsKKwlyZXR1cm4gc3VtOworfQkJCQkvKiBkbG9hZF9jaGVja3N1bSAqLworCisjaWYgSE9TVF9FTkRJQU5ORVNTCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0KKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJZGF0YQkzMi1iaXQgYWxpZ25lZCBwb2ludGVyIHRvIGRhdGEgdG8gYmUgY2hlY2tzdW1tZWQKKyAqCXNpegkJc2l6ZSBvZiB0aGUgZGF0YSB0byBiZSBjaGVja3N1bW1lZCBpbiBzaXplb2YoKSB1bml0cy4KKyAqCisgKiBFZmZlY3Q6CisgKglSZXR1cm5zIGEgY2hlY2tzdW0gb2YgdGhlIHNwZWNpZmllZCBibG9jaywgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBieXRlcworICogaW4gYmlnLWVuZGlhbiBvcmRlci4KKyAqCisgKiBOb3RlczoKKyAqCUluIGEgYmlnLWVuZGlhbiBob3N0LCB0aGluZ3MgbGlrZSB0aGUgc3RyaW5nIHRhYmxlIGFyZSBzdG9yZWQgYXMgYnl0ZXMKKyAqIGluIGhvc3Qgb3JkZXIuIEJ1dCBkbGxjcmVhdGUgYWx3YXlzIGNoZWNrc3VtcyBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyLgorICogSXQgaXMgbW9zdCBlZmZpY2llbnQgdG8ganVzdCBoYW5kbGUgdGhlIGRpZmZlcmVuY2UgYSB3b3JkIGF0IGEgdGltZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordTMyIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0odm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KQoreworCXUzMiBzdW0sIHRlbXA7CisJdTMyICpkcDsKKwlpbnQgbGVmdDsKKworCXN1bSA9IDA7CisJZHAgPSAodTMyICopIGRhdGE7CisKKwlmb3IgKGxlZnQgPSBzaXo7IGxlZnQgPiAwOyBsZWZ0IC09IHNpemVvZih1MzIpKSB7CisJCXRlbXAgPSAqZHArKzsKKwkJc3VtICs9IHRlbXAgPDwgQklUU19QRVJfQllURSAqIDM7CisJCXN1bSArPSB0ZW1wID4+IEJJVFNfUEVSX0JZVEUgKiAzOworCQlzdW0gKz0gKHRlbXAgPj4gQklUU19QRVJfQllURSkgJiAoQllURV9NQVNLIDw8IEJJVFNfUEVSX0JZVEUpOworCQlzdW0gKz0gKHRlbXAgJiAoQllURV9NQVNLIDw8IEJJVFNfUEVSX0JZVEUpKSA8PCBCSVRTX1BFUl9CWVRFOworCX0KKworCXJldHVybiBzdW07Cit9CQkJCS8qIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0gKi8KKworI2lmIChUQVJHRVRfQVVfQklUUyA+IDgpICYmIChUQVJHRVRfQVVfQklUUyA8IDMyKQordTMyIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNih2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXopCit7CisJdWludF9mYXN0MzJfdCBzdW0sIHRlbXA7CisJdTMyICpkcDsKKwlpbnQgbGVmdDsKKworCXN1bSA9IDA7CisJZHAgPSAodTMyICopIGRhdGE7CisKKwlmb3IgKGxlZnQgPSBzaXo7IGxlZnQgPiAwOyBsZWZ0IC09IHNpemVvZih1MzIpKSB7CisJCXRlbXAgPSAqZHArKzsKKwkJc3VtICs9IHRlbXAgPDwgQklUU19QRVJfQllURSAqIDI7CisJCXN1bSArPSB0ZW1wID4+IEJJVFNfUEVSX0JZVEUgKiAyOworCX0KKworCXJldHVybiBzdW07Cit9CQkJCS8qIGRsb2FkX3JldmVyc2VfY2hlY2tzdW0xNiAqLworI2VuZGlmCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBzd2FwX3dvcmRzCisgKgorICogUGFyYW1ldGVyczoKKyAqCWRhdGEJMzItYml0IGFsaWduZWQgcG9pbnRlciB0byBkYXRhIHRvIGJlIHN3YXBwZWQKKyAqCXNpeglzaXplIG9mIHRoZSBkYXRhIHRvIGJlIHN3YXBwZWQuCisgKgliaXRtYXAJQml0IG1hcCBvZiBob3cgdG8gc3dhcCBlYWNoIDMyLWJpdCB3b3JkOyAxID0+IDIgc2hvcnRzLAorICoJCTAgPT4gMSBsb25nCisgKgorICogRWZmZWN0OgorICoJU3dhcHMgdGhlIHNwZWNpZmllZCBkYXRhIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIG1hcAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIHZvaWQgc3dhcF93b3Jkcyh2b2lkICpkYXRhLCB1bnNpZ25lZCBzaXosIHVuc2lnbmVkIGJpdG1hcCkKK3sKKwlyZWdpc3RlciBpbnQgaTsKKyNpZiBUQVJHRVRfQVVfQklUUyA8IDE2CisJcmVnaXN0ZXIgdTE2ICpzcDsKKyNlbmRpZgorCXJlZ2lzdGVyIHUzMiAqbHA7CisKKwlzaXogLz0gc2l6ZW9mKHUxNik7CisKKyNpZiBUQVJHRVRfQVVfQklUUyA8IDE2CisJLyogcGFzcyAxOiBkbyBhbGwgdGhlIGJ5dGVzICovCisJaSA9IHNpejsKKwlzcCA9ICh1MTYgKikgZGF0YTsKKwlkbyB7CisJCXJlZ2lzdGVyIHUxNiB0bXA7CisJCXRtcCA9ICpzcDsKKwkJKnNwKysgPSBTV0FQMTZCWTgodG1wKTsKKwl9IHdoaWxlICgoaSAtPSAxKSA+IDApOworI2VuZGlmCisKKyNpZiBUQVJHRVRfQVVfQklUUyA8IDMyCisJLyogcGFzcyAyOiBmaXh1cCB0aGUgMzItYml0IHdvcmRzICovCisJaSA9IHNpeiA+PiAxOworCWxwID0gKHUzMiAqKSBkYXRhOworCWRvIHsKKwkJaWYgKChiaXRtYXAgJiAxKSA9PSAwKSB7CisJCQlyZWdpc3RlciB1MzIgdG1wOworCQkJdG1wID0gKmxwOworCQkJKmxwID0gU1dBUDMyQlkxNih0bXApOworCQl9CisJCWxwICs9IDE7CisJCWJpdG1hcCA+Pj0gMTsKKwl9IHdoaWxlICgoaSAtPSAxKSA+IDApOworI2VuZGlmCit9CQkJCS8qIHN3YXBfd29yZHMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBjb3B5X3RndF9zdHJpbmdzCisgKgorICogUGFyYW1ldGVyczoKKyAqCWRzdHAJCURlc3RpbmF0aW9uIGFkZHJlc3MuICBBc3N1bWVkIHRvIGJlIDMyLWJpdCBhbGlnbmVkCisgKglzcmNwCQlTb3VyY2UgYWRkcmVzcy4gIEFzc3VtZWQgdG8gYmUgMzItYml0IGFsaWduZWQKKyAqCWNoYXJjb3VudAlOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICoKKyAqIEVmZmVjdDoKKyAqCUNvcGllcyBzdHJpbmdzIGZyb20gdGhlIHNvdXJjZSAod2hpY2ggaXMgaW4gdXN1YWwgLmRvZiBmaWxlIG9yZGVyIG9uCisgKiB0aGUgbG9hZGluZyBwcm9jZXNzb3IpIHRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgKHdoaWNoIHNob3VsZCBiZSBpbiBwcm9wZXIKKyAqIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0IG9yZGVyKS4gIE1ha2VzIHN1cmUgdGhlIGxhc3Qgc3RyaW5nIGluIHRoZQorICogYnVmZmVyIGlzIE5VTEwgdGVybWluYXRlZCAoZm9yIHNhZmV0eSkuCisgKiBSZXR1cm5zIHRoZSBmaXJzdCB1bnVzZWQgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworc3RhdGljIGNoYXIgKmNvcHlfdGd0X3N0cmluZ3Modm9pZCAqZHN0cCwgdm9pZCAqc3JjcCwgdW5zaWduZWQgY2hhcmNvdW50KQoreworCXJlZ2lzdGVyIHRndF9hdV90ICpzcmMgPSAodGd0X2F1X3QgKikgc3JjcDsKKwlyZWdpc3RlciB0Z3RfYXVfdCAqZHN0ID0gKHRndF9hdV90ICopIGRzdHA7CisJcmVnaXN0ZXIgaW50IGNudCA9IGNoYXJjb3VudDsKKwlkbyB7CisjaWYgVEFSR0VUX0FVX0JJVFMgPD0gQklUU19QRVJfQVUKKwkJLyogYnl0ZS1zd2FwcGluZyBpc3N1ZXMgbWF5IGV4aXN0IGZvciBzdHJpbmdzIG9uIHRhcmdldCAqLworCQkqZHN0KysgPSAqc3JjKys7CisjZWxzZQorCQkqZHN0KysgPSAqc3JjKys7CisjZW5kaWYKKwl9IHdoaWxlICgoY250IC09IChzaXplb2YodGd0X2F1X3QpICogQklUU19QRVJfQVUgLyBCSVRTX1BFUl9CWVRFKSkgPiAwKTsKKwkvKmFwcGx5IGZvcmNlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdHJpbmcgdGFibGUgaGFzIG51bGwgdGVybWluYXRvciAqLworI2lmIChCSVRTX1BFUl9BVSA9PSBCSVRTX1BFUl9CWVRFKSAmJiAoVEFSR0VUX0FVX0JJVFMgPT0gQklUU19QRVJfQllURSkKKwlkc3RbLTFdID0gMDsKKyNlbHNlCisJLyogbGl0dGxlIGVuZGlhbiAqLworCWRzdFstMV0gJj0gKDEgPDwgKEJJVFNfUEVSX0FVIC0gQklUU19QRVJfQllURSkpIC0gMTsKKyNlbmRpZgorCXJldHVybiAoY2hhciAqKWRzdDsKK30JCQkJLyogY29weV90Z3Rfc3RyaW5ncyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGluaXRfbW9kdWxlX2hhbmRsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglub25lCisgKgorICogRWZmZWN0OgorICoJSW5pdGlhbGl6ZXMgdGhlIG1vZHVsZSBoYW5kbGUgd2UgdXNlIHRvIGVuYWJsZSB1bmxvYWRpbmcsIGFuZCBpbnN0YWxscworICogdGhlIGRlYnVnIGluZm9ybWF0aW9uIHJlcXVpcmVkIGJ5IHRoZSB0YXJnZXQuCisgKgorICogTm90ZXM6CisgKiBUaGUgaGFuZGxlIHJldHVybmVkIGZyb20gZHluYW1pY19sb2FkX21vZHVsZSBuZWVkcyB0byBlbmNhcHN1bGF0ZSBhbGwgdGhlCisgKiBhbGxvY2F0aW9ucyBkb25lIGZvciB0aGUgbW9kdWxlLCBhbmQgZW5hYmxlIHRoZW0gcGx1cyB0aGUgbW9kdWxlcyBzeW1ib2xzIHRvCisgKiBiZSBkZWFsbG9jYXRlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyBkbGx2aWV3X2luZm9faW5pdCA9IHsgIi5kbGx2aWV3IiwgMCwgMCwKKwkobGRyX2FkZHIpLTEsIERCR19MSVNUX1BBR0UsIERMT0FEX0RBVEEsIDAKK307CisjZWxzZQorc3RhdGljIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIGRsbHZpZXdfaW5mb19pbml0ID0geyAiLmRsbHZpZXciLCAwLCAwLAorCShsZHJfYWRkciktMSwgRExPQURfREFUQSwgREJHX0xJU1RfUEFHRSwgMAorfTsKKyNlbmRpZgorc3RhdGljIHZvaWQgaW5pdF9tb2R1bGVfaGFuZGxlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCXN0cnVjdCBteV9oYW5kbGUgKmhuZGw7CisJdTE2IGN1cnJfc2VjdDsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqYXNlY3M7CisJc3RydWN0IGRsbF9tb2R1bGUgKmRibW9kOworCXN0cnVjdCBkbGxfc2VjdCAqZGJzZWM7CisJc3RydWN0IGRiZ19taXJyb3Jfcm9vdCAqbWxpc3Q7CisJcmVnaXN0ZXIgY2hhciAqY3A7CisJc3RydWN0IG1vZHVsZXNfaGVhZGVyIG1oZHI7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gZGxsdmlld19pbmZvOworCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGVidWdfbWlycm9yX3N5bTsKKwlobmRsID0gZGx0aGlzLT5teWhhbmRsZTsKKwlpZiAoIWhuZGwpCisJCXJldHVybjsJCS8qIG11c3QgYmUgZXJyb3JzIGRldGVjdGVkLCBzbyBmb3JnZXQgaXQgKi8KKworCS8qICBTdG9yZSB0aGUgc2VjdGlvbiBjb3VudCAqLworCWhuZGwtPnNlY25fY291bnQgPSBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50OworCisJLyogIElmIGEgdHJhbXBvbGluZSBzZWN0aW9uIHdhcyBjcmVhdGVkLCBhZGQgaXQgaW4gKi8KKwlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKQorCQlobmRsLT5zZWNuX2NvdW50ICs9IDE7CisKKwlobmRsLT5zZWNuX2NvdW50ID0gaG5kbC0+c2Vjbl9jb3VudCA8PCAxOworCisJaG5kbC0+c2Vjbl9jb3VudCA9IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQgPDwgMTsKKyNpZm5kZWYgVEFSR0VUX0VORElBTk5FU1MKKwlpZiAoZGx0aGlzLT5iaWdfZV90YXJnZXQpCisJCWhuZGwtPnNlY25fY291bnQgKz0gMTsJLyogZmxhZyBmb3IgYmlnLWVuZGlhbiAqLworI2VuZGlmCisJaWYgKGRsdGhpcy0+ZGxvYWRfZXJyY291bnQpCisJCXJldHVybjsJCS8qIGFiYW5kb24gaWYgZXJyb3JzIGRldGVjdGVkICovCisJLyogTG9jYXRlIHRoZSBzeW1ib2wgdGhhdCBuYW1lcyB0aGUgaGVhZGVyIGZvciB0aGUgQ0NTIGRlYnVnIGxpc3QKKwkgICBvZiBtb2R1bGVzLiBJZiBub3QgZm91bmQsIHdlIGp1c3QgZG9uJ3QgZ2VuZXJhdGUgdGhlIGRlYnVnIHJlY29yZC4KKwkgICBJZiBmb3VuZCwgd2UgY3JlYXRlIG91ciBtb2R1bGVzIGxpc3QuICBXZSBtYWtlIHN1cmUgdG8gY3JlYXRlIHRoZQorCSAgIGxvYWRlcl9kbGx2aWV3X3Jvb3QgZXZlbiBpZiB0aGVyZSBpcyBubyByZWxvY2F0aW9uIGluZm8gdG8gcmVjb3JkLAorCSAgIGp1c3QgdG8gdHJ5IHRvIHB1dCBib3RoIHN5bWJvbHMgaW4gdGhlIHNhbWUgc3ltYm9sIHRhYmxlIGFuZAorCSAgIG1vZHVsZS4gKi8KKwlkZWJ1Z19taXJyb3Jfc3ltID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2woZGx0aGlzLT5teXN5bSwKKwkJCQkJCQlsb2FkZXJfZGxsdmlld19yb290KTsKKwlpZiAoIWRlYnVnX21pcnJvcl9zeW0pIHsKKwkJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkbG1vZHN5bTsKKwkJc3RydWN0IGRiZ19taXJyb3Jfcm9vdCAqbWxzdDsKKworCQkvKiBvdXIgcm9vdCBzeW1ib2wgaXMgbm90IHlldCBwcmVzZW50OworCQkgICBjaGVjayBpZiB3ZSBoYXZlIERMTW9kdWxlcyBkZWZpbmVkICovCisJCWRsbW9kc3ltID0gZGx0aGlzLT5teXN5bS0+ZmluZF9tYXRjaGluZ19zeW1ib2woZGx0aGlzLT5teXN5bSwKKwkJCQkJCQlMSU5LRVJfTU9EVUxFU19IRUFERVIpOworCQlpZiAoIWRsbW9kc3ltKQorCQkJcmV0dXJuOwkvKiBubyBETE1vZHVsZXMgbGlzdCBzbyBubyBkZWJ1ZyBpbmZvICovCisJCS8qIGlmIHdlIGhhdmUgRExNb2R1bGVzIGRlZmluZWQsIGNvbnN0cnVjdCBvdXIgaGVhZGVyICovCisJCW1sc3QgPSAoc3RydWN0IGRiZ19taXJyb3Jfcm9vdCAqKQorCQkgICAgZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCSAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJCSBkYmdfbWlycm9yX3Jvb3QpKTsKKwkJaWYgKCFtbHN0KSB7CisJCQlETF9FUlJPUihlcnJfYWxsb2MsIHNpemVvZihzdHJ1Y3QgZGJnX21pcnJvcl9yb290KSk7CisJCQlyZXR1cm47CisJCX0KKwkJbWxzdC0+aG5leHQgPSBOVUxMOworCQltbHN0LT5jaGFuZ2VzID0gMDsKKwkJbWxzdC0+cmVmY291bnQgPSAwOworCQltbHN0LT5kYnRoaXMgPSBUREFUQV9UT19UQUREUihkbG1vZHN5bS0+dmFsdWUpOworCQkvKiBhZGQgb3VyIHJvb3Qgc3ltYm9sICovCisJCWRlYnVnX21pcnJvcl9zeW0gPSBkbHRoaXMtPm15c3ltLT5hZGRfdG9fc3ltYm9sX3RhYmxlCisJCSAgICAoZGx0aGlzLT5teXN5bSwgbG9hZGVyX2RsbHZpZXdfcm9vdCwKKwkJICAgICAodW5zaWduZWQpZGx0aGlzLT5teWhhbmRsZSk7CisJCWlmICghZGVidWdfbWlycm9yX3N5bSkgeworCQkJLyogZmFpbGVkLCByZWNvdmVyIG1lbW9yeSAqLworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBtbHN0KTsKKwkJCXJldHVybjsKKwkJfQorCQlkZWJ1Z19taXJyb3Jfc3ltLT52YWx1ZSA9ICh1MzIpIG1sc3Q7CisJfQorCS8qIEZpcnN0IGNyZWF0ZSB0aGUgRExMdmlldyByZWNvcmQgYW5kIHN0dWZmIGl0IGludG8gdGhlIGJ1ZmZlci4KKwkgICBUaGVuIHdyaXRlIGl0IHRvIHRoZSBEU1AuICBSZWNvcmQgcGVydGluZW50IGxvY2F0aW9ucyBpbiBvdXIgaG5kbCwKKwkgICBhbmQgYWRkIGl0IHRvIHRoZSBwZXItcHJvY2Vzc29yIGxpc3Qgb2YgaGFuZGxlcyB3aXRoIGRlYnVnIGluZm8uICovCisjaWZuZGVmIERFQlVHX0hFQURFUl9JTl9MT0FERVIKKwltbGlzdCA9IChzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICopZGVidWdfbWlycm9yX3N5bS0+dmFsdWU7CisJaWYgKCFtbGlzdCkKKwkJcmV0dXJuOworI2Vsc2UKKwltbGlzdCA9IChzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICopJmRlYnVnX2xpc3RfaGVhZGVyOworI2VuZGlmCisJaG5kbC0+ZG0uaHJvb3QgPSBtbGlzdDsJLyogc2V0IHBvaW50ZXIgdG8gcm9vdCBpbnRvIG91ciBoYW5kbGUgKi8KKwlpZiAoIWRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQpCisJCXJldHVybjsJCS8qIG5vIGxvYWQgYWRkcmVzc2VzIHRvIGJlIHJlY29yZGVkICovCisJLyogcmV1c2UgdGVtcG9yYXJ5IHN5bWJvbCBzdG9yYWdlICovCisJZGJtb2QgPSAoc3RydWN0IGRsbF9tb2R1bGUgKilkbHRoaXMtPmxvY2FsX3N5bXRhYjsKKwkvKiBDcmVhdGUgdGhlIERMTHZpZXcgcmVjb3JkIGluIHRoZSBtZW1vcnkgd2UgcmV0YWluIGZvciBvdXIgaGFuZGxlICovCisJZGJtb2QtPm51bV9zZWN0cyA9IGRsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnQ7CisJZGJtb2QtPnRpbWVzdGFtcCA9IGRsdGhpcy0+dmVyaWZ5LmR2X3RpbWRhdDsKKwlkYm1vZC0+dmVyc2lvbiA9IElOSVRfVkVSU0lPTjsKKwlkYm1vZC0+dmVyaWZpY2F0aW9uID0gVkVSSUZJQ0FUSU9OOworCWFzZWNzID0gZGx0aGlzLT5sZHJfc2VjdGlvbnM7CisJZGJzZWMgPSBkYm1vZC0+c2VjdHM7CisJZm9yIChjdXJyX3NlY3QgPSBkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50OworCSAgICAgY3Vycl9zZWN0ID4gMDsgY3Vycl9zZWN0IC09IDEpIHsKKwkJZGJzZWMtPnNlY3RfbG9hZF9hZHIgPSBhc2Vjcy0+bG9hZF9hZGRyOworCQlkYnNlYy0+c2VjdF9ydW5fYWRyID0gYXNlY3MtPnJ1bl9hZGRyOworCQlkYnNlYyArPSAxOworCQlhc2VjcyArPSAxOworCX0KKworCS8qICBJZiBhIHRyYW1wb2xpbmUgc2VjdGlvbiB3YXMgY3JlYXRlZCBnbyBhaGVhZCBhbmQgYWRkIGl0cyBpbmZvICovCisJaWYgKGRsdGhpcy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHIgIT0gMCkgeworCQlkYm1vZC0+bnVtX3NlY3RzKys7CisJCWRic2VjLT5zZWN0X2xvYWRfYWRyID0gYXNlY3MtPmxvYWRfYWRkcjsKKwkJZGJzZWMtPnNlY3RfcnVuX2FkciA9IGFzZWNzLT5ydW5fYWRkcjsKKwkJZGJzZWMrKzsKKwkJYXNlY3MrKzsKKwl9CisKKwkvKiBub3cgY3JhbSBpbiB0aGUgbmFtZXMgKi8KKwljcCA9IGNvcHlfdGd0X3N0cmluZ3MoZGJzZWMsIGRsdGhpcy0+c3RyX2hlYWQsCisJCQkgICAgICBkbHRoaXMtPmRlYnVnX3N0cmluZ19zaXplKTsKKworCS8qIElmIGEgdHJhbXBvbGluZSBzZWN0aW9uIHdhcyBjcmVhdGVkLCBhZGQgaXRzIG5hbWUgc28gRExMVmlldworCSAqIGNhbiBzaG93IHRoZSB1c2VyIHRoZSBzZWN0aW9uIGluZm8uICovCisJaWYgKGRsdGhpcy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHIgIT0gMCkgeworCQljcCA9IGNvcHlfdGd0X3N0cmluZ3MoY3AsCisJCQkJICAgICAgZGx0aGlzLT50cmFtcC5maW5hbF9zdHJpbmdfdGFibGUsCisJCQkJICAgICAgc3RybGVuKGRsdGhpcy0+dHJhbXAuZmluYWxfc3RyaW5nX3RhYmxlKSArCisJCQkJICAgICAgMSk7CisJfQorCisJLyogcm91bmQgb2ZmIHRoZSBzaXplIG9mIHRoZSBkZWJ1ZyByZWNvcmQsIGFuZCByZW1lbWJlciBzYW1lICovCisJaG5kbC0+ZG0uZGJzaXogPSBIT1NUX1RPX1REQVRBX1JPVU5EKGNwIC0gKGNoYXIgKilkYm1vZCk7CisJKmNwID0gMDsJCS8qIHN0cmljdGx5IHRvIG1ha2Ugb3VyIHRlc3QgaGFybmVzcyBoYXBweSAqLworCWRsbHZpZXdfaW5mbyA9IGRsbHZpZXdfaW5mb19pbml0OworCWRsbHZpZXdfaW5mby5zaXplID0gVERBVEFfVE9fVEFERFIoaG5kbC0+ZG0uZGJzaXopOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRleHQgdG8gZGVmYXVsdCBoZWFwICovCisJZGxsdmlld19pbmZvLmNvbnRleHQgPSAwOworCWhuZGwtPmRtLmNvbnRleHQgPSAwOworCS8qIGZpbGwgaW4gbmV4dCBwb2ludGVyIGFuZCBzaXplICovCisJaWYgKG1saXN0LT5obmV4dCkgeworCQlkYm1vZC0+bmV4dF9tb2R1bGUgPSBUQUREUl9UT19UREFUQShtbGlzdC0+aG5leHQtPmRtLmRidGhpcyk7CisJCWRibW9kLT5uZXh0X21vZHVsZV9zaXplID0gbWxpc3QtPmhuZXh0LT5kbS5kYnNpejsKKwl9IGVsc2UgeworCQlkYm1vZC0+bmV4dF9tb2R1bGVfc2l6ZSA9IDA7CisJCWRibW9kLT5uZXh0X21vZHVsZSA9IDA7CisJfQorCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb24tRFNQIERMTHZpZXcgZGVidWcgcmVjb3JkICovCisJaWYgKCFkbHRoaXMtPm15YWxsb2MpCisJCXJldHVybjsKKwlpZiAoIWRsdGhpcy0+bXlhbGxvYy0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teWFsbG9jLCAmZGxsdmlld19pbmZvLAorCQkJCQkgICAgIEhPU1RfVE9fVEFERFIoc2l6ZW9mKHUzMikpKSkgeworCQlyZXR1cm47CisJfQorCS8qIFN0b3JlIGxvYWQgYWRkcmVzcyBvZiAuZGxsdmlldyBzZWN0aW9uICovCisJaG5kbC0+ZG0uZGJ0aGlzID0gZGxsdmlld19pbmZvLmxvYWRfYWRkcjsKKwkvKiBTdG9yZSBtZW1vcnkgY29udGV4dCAoc2VnaWQpIGluIHdoaWNoIC5kbGx2aWV3IHNlY3Rpb24KKwkgKiB3YXMgIGFsbG9jYXRlZCAqLworCWhuZGwtPmRtLmNvbnRleHQgPSBkbGx2aWV3X2luZm8uY29udGV4dDsKKwltbGlzdC0+cmVmY291bnQgKz0gMTsKKwkvKiBzd2FwIGJ5dGVzIGluIHRoZSBlbnRpcmUgZGVidWcgcmVjb3JkLCBidXQgbm90IHRoZSBzdHJpbmcgdGFibGUgKi8KKwlpZiAoVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhUQVJHRVRfQklHX0VORElBTikpIHsKKwkJc3dhcF93b3JkcyhkYm1vZCwgKGNoYXIgKilkYnNlYyAtIChjaGFyICopZGJtb2QsCisJCQkgICBETExfTU9EVUxFX0JJVE1BUCk7CisJfQorCS8qIFVwZGF0ZSB0aGUgRExMdmlldyBsaXN0IG9uIHRoZSBEU1Agd3JpdGUgbmV3IHJlY29yZCAqLworCWlmICghZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sIGRibW9kLAorCQkJCSAgICBkbGx2aWV3X2luZm8ubG9hZF9hZGRyLCAmZGxsdmlld19pbmZvLAorCQkJCSAgICBUQUREUl9UT19IT1NUKGRsbHZpZXdfaW5mby5zaXplKSkpIHsKKwkJcmV0dXJuOworCX0KKwkvKiB3cml0ZSBuZXcgaGVhZGVyICovCisJbWhkci5maXJzdF9tb2R1bGVfc2l6ZSA9IGhuZGwtPmRtLmRic2l6OworCW1oZHIuZmlyc3RfbW9kdWxlID0gVEFERFJfVE9fVERBVEEoZGxsdmlld19pbmZvLmxvYWRfYWRkcik7CisJLyogc3dhcCBieXRlcyBpbiB0aGUgbW9kdWxlIGhlYWRlciwgaWYgbmVlZGVkICovCisJaWYgKFRBUkdFVF9FTkRJQU5ORVNTX0RJRkZFUlMoVEFSR0VUX0JJR19FTkRJQU4pKSB7CisJCXN3YXBfd29yZHMoJm1oZHIsIHNpemVvZihzdHJ1Y3QgbW9kdWxlc19oZWFkZXIpIC0gc2l6ZW9mKHUxNiksCisJCQkgICBNT0RVTEVTX0hFQURFUl9CSVRNQVApOworCX0KKwlkbGx2aWV3X2luZm8gPSBkbGx2aWV3X2luZm9faW5pdDsKKwlpZiAoIWRsdGhpcy0+bXlpby0+d3JpdGVtZW0oZGx0aGlzLT5teWlvLCAmbWhkciwgbWxpc3QtPmRidGhpcywKKwkJCQkgICAgJmRsbHZpZXdfaW5mbywKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtb2R1bGVzX2hlYWRlcikgLQorCQkJCSAgICBzaXplb2YodTE2KSkpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBBZGQgdGhlIG1vZHVsZSBoYW5kbGUgdG8gdGhpcyBwcm9jZXNzb3IncyBsaXN0CisJICAgb2YgaGFuZGxlcyB3aXRoIGRlYnVnIGluZm8gKi8KKwlobmRsLT5kbS5obmV4dCA9IG1saXN0LT5obmV4dDsKKwlpZiAoaG5kbC0+ZG0uaG5leHQpCisJCWhuZGwtPmRtLmhuZXh0LT5kbS5ocHJldiA9IGhuZGw7CisJaG5kbC0+ZG0uaHByZXYgPSAoc3RydWN0IG15X2hhbmRsZSAqKW1saXN0OworCW1saXN0LT5obmV4dCA9IGhuZGw7CS8qIGluc2VydCBhZnRlciByb290ICovCit9CQkJCS8qIGluaXRfbW9kdWxlX2hhbmRsZSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGR5bmFtaWNfdW5sb2FkX21vZHVsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKgltaGFuZGxlCUEgbW9kdWxlIGhhbmRsZSBmcm9tIGR5bmFtaWNfbG9hZF9tb2R1bGUKKyAqCXN5bXMJSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKglhbGxvYwlUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIEVmZmVjdDoKKyAqCVRoZSBtb2R1bGUgc3BlY2lmaWVkIGJ5IG1oYW5kbGUgaXMgdW5sb2FkZWQuICBVbmxvYWRpbmcgY2F1c2VzIGFsbAorICogdGFyZ2V0IG1lbW9yeSB0byBiZSBkZWFsbG9jYXRlZCwgYWxsIHN5bWJvbHMgZGVmaW5lZCBieSB0aGUgbW9kdWxlIHRvCisgKiBiZSBwdXJnZWQsIGFuZCBhbnkgaG9zdC1zaWRlIHN0b3JhZ2UgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yCisgKiB0aGlzIG1vZHVsZSB0byBiZSByZWxlYXNlZC4KKyAqCisgKiBSZXR1cm5zOgorICoJWmVybyBmb3Igc3VjY2Vzcy4gT24gZXJyb3IsIHRoZSBudW1iZXIgb2YgZXJyb3JzIGRldGVjdGVkIGlzIHJldHVybmVkLgorICogSW5kaXZpZHVhbCBlcnJvcnMgYXJlIHJlcG9ydGVkIHVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitpbnQgZHluYW1pY191bmxvYWRfbW9kdWxlKHZvaWQgKm1oYW5kbGUsCisJCQkgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCisJCQkgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCisJCQkgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0KQoreworCXMxNiBjdXJyX3NlY3Q7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmFzZWNzOworCXN0cnVjdCBteV9oYW5kbGUgKmhuZGw7CisJc3RydWN0IGRiZ19taXJyb3Jfcm9vdCAqcm9vdDsKKwl1bnNpZ25lZCBlcnJjb3VudCA9IDA7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gZGxsdmlld19pbmZvID0gZGxsdmlld19pbmZvX2luaXQ7CisJc3RydWN0IG1vZHVsZXNfaGVhZGVyIG1oZHI7CisKKwlobmRsID0gKHN0cnVjdCBteV9oYW5kbGUgKiltaGFuZGxlOworCWlmICghaG5kbCkKKwkJcmV0dXJuIDA7CS8qIGlmIGhhbmRsZSBpcyBudWxsLCBub3RoaW5nIHRvIGRvICovCisJLyogQ2xlYXIgb3V0IHRoZSBtb2R1bGUgc3ltYm9scworCSAqIE5vdGUgdGhhdCBpZiB0aGlzIGlzIHRoZSBtb2R1bGUgdGhhdCBkZWZpbmVkIE1PRFVMRVNfSEVBREVSCisJICh0aGUgaGVhZCBvZiB0aGUgdGFyZ2V0IGRlYnVnIGxpc3QpCisJICogdGhlbiB0aGlzIG9wZXJhdGlvbiB3aWxsIGJsb3cgYXdheSB0aGF0IHN5bWJvbC4KKwkgSXQgd2lsbCB0aGVyZWZvcmUgYmUgaW1wb3NzaWJsZSBmb3Igc3Vic2VxdWVudAorCSAqIG9wZXJhdGlvbnMgdG8gYWRkIGVudHJpZXMgdG8gdGhpcyB1bi1yZWZlcmVuY2VhYmxlIGxpc3QuICovCisJaWYgKCFzeW1zKQorCQlyZXR1cm4gMTsKKwlzeW1zLT5wdXJnZV9zeW1ib2xfdGFibGUoc3ltcywgKHVuc2lnbmVkKWhuZGwpOworCS8qIERlYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBmb3Igc2VjdGlvbnMKKwkgKiBOT1RFOiBUaGUgdHJhbXBvbGluZSBzZWN0aW9uLCBpZiBjcmVhdGVkLCBnZXRzIGRlbGV0ZWQgaGVyZSwgdG9vICovCisKKwlhc2VjcyA9IGhuZGwtPnNlY25zOworCWlmIChhbGxvYykKKwkJZm9yIChjdXJyX3NlY3QgPSAoaG5kbC0+c2Vjbl9jb3VudCA+PiAxKTsgY3Vycl9zZWN0ID4gMDsKKwkJICAgICBjdXJyX3NlY3QgLT0gMSkgeworCQkJYXNlY3MtPm5hbWUgPSBOVUxMOworCQkJYWxsb2MtPmRsb2FkX2RlYWxsb2NhdGUoYWxsb2MsIGFzZWNzKyspOworCQl9CisJcm9vdCA9IGhuZGwtPmRtLmhyb290OworCWlmICghcm9vdCkgeworCQkvKiB0aGVyZSBpcyBhIGRlYnVnIGxpc3QgY29udGFpbmluZyB0aGlzIG1vZHVsZSAqLworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlpZiAoIWhuZGwtPmRtLmRidGhpcykgewkvKiB0YXJnZXQtc2lkZSBkbGx2aWV3IHJlY29yZCBleGlzdHMgKi8KKwkJZ290byBsb29wX2VuZDsKKwl9CisJLyogUmV0cmlldmUgbWVtb3J5IGNvbnRleHQgaW4gd2hpY2ggLmRsbHZpZXcgd2FzIGFsbG9jYXRlZCAqLworCWRsbHZpZXdfaW5mby5jb250ZXh0ID0gaG5kbC0+ZG0uY29udGV4dDsKKwlpZiAoaG5kbC0+ZG0uaHByZXYgPT0gaG5kbCkKKwkJZ290byBleGl0dW5sdGd0OworCisJLyogdGFyZ2V0LXNpZGUgZGxsdmlldyByZWNvcmQgaXMgaW4gbGlzdCAqLworCS8qIGRlcXVldWUgdGhpcyByZWNvcmQgZnJvbSBvdXIgR1BQLXNpZGUgbWlycm9yIGxpc3QgKi8KKwlobmRsLT5kbS5ocHJldi0+ZG0uaG5leHQgPSBobmRsLT5kbS5obmV4dDsKKwlpZiAoaG5kbC0+ZG0uaG5leHQpCisJCWhuZGwtPmRtLmhuZXh0LT5kbS5ocHJldiA9IGhuZGwtPmRtLmhwcmV2OworCS8qIFVwZGF0ZSBuZXh0X21vZHVsZSBvZiBwcmV2aW91cyBlbnRyeSBpbiB0YXJnZXQgbGlzdAorCSAqIFdlIGFyZSB1c2luZyBtaGRyIGhlcmUgYXMgYSBzdXJyb2dhdGUgZm9yIGVpdGhlciBhCisJIHN0cnVjdCBtb2R1bGVzX2hlYWRlciBvciBhIGRsbF9tb2R1bGUgKi8KKwlpZiAoaG5kbC0+ZG0uaG5leHQpIHsKKwkJbWhkci5maXJzdF9tb2R1bGUgPSBUQUREUl9UT19UREFUQShobmRsLT5kbS5obmV4dC0+ZG0uZGJ0aGlzKTsKKwkJbWhkci5maXJzdF9tb2R1bGVfc2l6ZSA9IGhuZGwtPmRtLmhuZXh0LT5kbS5kYnNpejsKKwl9IGVsc2UgeworCQltaGRyLmZpcnN0X21vZHVsZSA9IDA7CisJCW1oZHIuZmlyc3RfbW9kdWxlX3NpemUgPSAwOworCX0KKwlpZiAoIWluaXQpCisJCWdvdG8gZXhpdHVubHRndDsKKworCWlmICghaW5pdC0+Y29ubmVjdChpbml0KSkgeworCQlkbG9hZF9zeW1zX2Vycm9yKHN5bXMsIGljb25uZWN0KTsKKwkJZXJyY291bnQgKz0gMTsKKwkJZ290byBleGl0dW5sdGd0OworCX0KKwkvKiBzd2FwIGJ5dGVzIGluIHRoZSBtb2R1bGUgaGVhZGVyLCBpZiBuZWVkZWQgKi8KKwlpZiAoVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhobmRsLT5zZWNuX2NvdW50ICYgMHgxKSkgeworCQlzd2FwX3dvcmRzKCZtaGRyLCBzaXplb2Yoc3RydWN0IG1vZHVsZXNfaGVhZGVyKSAtIHNpemVvZih1MTYpLAorCQkJICAgTU9EVUxFU19IRUFERVJfQklUTUFQKTsKKwl9CisJaWYgKCFpbml0LT53cml0ZW1lbShpbml0LCAmbWhkciwgaG5kbC0+ZG0uaHByZXYtPmRtLmRidGhpcywKKwkJCSAgICAmZGxsdmlld19pbmZvLCBzaXplb2Yoc3RydWN0IG1vZHVsZXNfaGVhZGVyKSAtCisJCQkgICAgc2l6ZW9mKG1oZHIudXBkYXRlX2ZsYWcpKSkgeworCQlkbG9hZF9zeW1zX2Vycm9yKHN5bXMsIGRsdndyaXRlKTsKKwkJZXJyY291bnQgKz0gMTsKKwl9CisJLyogdXBkYXRlIGNoYW5nZSBjb3VudGVyICovCisJcm9vdC0+Y2hhbmdlcyArPSAxOworCWlmICghaW5pdC0+d3JpdGVtZW0oaW5pdCwgJihyb290LT5jaGFuZ2VzKSwKKwkJCSAgICByb290LT5kYnRoaXMgKyBIT1NUX1RPX1RBRERSCisJCQkgICAgKHNpemVvZihtaGRyLmZpcnN0X21vZHVsZSkgKworCQkJICAgICBzaXplb2YobWhkci5maXJzdF9tb2R1bGVfc2l6ZSkpLAorCQkJICAgICZkbGx2aWV3X2luZm8sIHNpemVvZihtaGRyLnVwZGF0ZV9mbGFnKSkpIHsKKwkJZGxvYWRfc3ltc19lcnJvcihzeW1zLCBkbHZ3cml0ZSk7CisJCWVycmNvdW50ICs9IDE7CisJfQorCWluaXQtPnJlbGVhc2UoaW5pdCk7CitleGl0dW5sdGd0OgorCS8qIHJlbGVhc2UgdGFyZ2V0IHN0b3JhZ2UgKi8KKwlkbGx2aWV3X2luZm8uc2l6ZSA9IFREQVRBX1RPX1RBRERSKGhuZGwtPmRtLmRic2l6KTsKKwlkbGx2aWV3X2luZm8ubG9hZF9hZGRyID0gaG5kbC0+ZG0uZGJ0aGlzOworCWlmIChhbGxvYykKKwkJYWxsb2MtPmRsb2FkX2RlYWxsb2NhdGUoYWxsb2MsICZkbGx2aWV3X2luZm8pOworCXJvb3QtPnJlZmNvdW50IC09IDE7CisJLyogdGFyZ2V0LXNpZGUgZGxsdmlldyByZWNvcmQgZXhpc3RzICovCitsb29wX2VuZDoKKyNpZm5kZWYgREVCVUdfSEVBREVSX0lOX0xPQURFUgorCWlmIChyb290LT5yZWZjb3VudCA8PSAwKSB7CisJCS8qIGlmIGFsbCByZWZlcmVuY2VzIGdvbmUsIGJsb3cgb2ZmIHRoZSBoZWFkZXIgKi8KKwkJLyogb3VyIHJvb3Qgc3ltYm9sIG1heSBiZSBnb25lIGR1ZSB0byB0aGUgUHVyZ2UgYWJvdmUsCisJCSAgIGJ1dCBpZiBub3QsIGRvIG5vdCBkZXN0cm95IHRoZSByb290ICovCisJCWlmIChzeW1zLT5maW5kX21hdGNoaW5nX3N5bWJvbAorCQkgICAgKHN5bXMsIGxvYWRlcl9kbGx2aWV3X3Jvb3QpID09IE5VTEwpCisJCQlzeW1zLT5kbG9hZF9kZWFsbG9jYXRlKHN5bXMsIHJvb3QpOworCX0KKyNlbmRpZgorZnVuY19lbmQ6CisJLyogdGhlcmUgaXMgYSBkZWJ1ZyBsaXN0IGNvbnRhaW5pbmcgdGhpcyBtb2R1bGUgKi8KKwlzeW1zLT5kbG9hZF9kZWFsbG9jYXRlKHN5bXMsIG1oYW5kbGUpOwkvKiByZWxlYXNlIG91ciBzdG9yYWdlICovCisJcmV0dXJuIGVycmNvdW50OworfQkJCQkvKiBkeW5hbWljX3VubG9hZF9tb2R1bGUgKi8KKworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSB1bnBhY2tfbmFtZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKglzb2Zmc2V0CUJ5dGUgb2Zmc2V0IGludG8gdGhlIHN0cmluZyB0YWJsZQorICoKKyAqIEVmZmVjdDoKKyAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvZmZzZXQgc3VwcGxpZWQsIG9yCisgKiBOVUxMIGZvciBlcnJvci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyBjaGFyICp1bnBhY2tfbmFtZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgdTMyIHNvZmZzZXQpCit7CisJdTggdG1wLCAqc3JjOworCWNoYXIgKmRzdDsKKworCWlmIChzb2Zmc2V0ID49IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX3N0cnRhYl9zaXplKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkJhZCBzdHJpbmcgdGFibGUgb2Zmc2V0ICIgRk1UX1VJMzIsCisJCQkgICAgc29mZnNldCk7CisJCXJldHVybiBOVUxMOworCX0KKwlzcmMgPSAodWludF9sZWFzdDhfdCAqKSBkbHRoaXMtPnN0cl9oZWFkICsKKwkgICAgKHNvZmZzZXQgPj4gKExPR19CSVRTX1BFUl9BVSAtIExPR19CSVRTX1BFUl9CWVRFKSk7CisJZHN0ID0gZGx0aGlzLT5zdHJfdGVtcDsKKwlpZiAoc29mZnNldCAmIDEpCisJCSpkc3QrKyA9ICpzcmMrKzsJLyogb25seSAxIGNoYXJhY3RlciBpbiBmaXJzdCB3b3JkICovCisJZG8geworCQl0bXAgPSAqc3JjKys7CisJCSpkc3QgPSAodG1wID4+IEJJVFNfUEVSX0JZVEUpOworCQlpZiAoISgqZHN0KyspKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKCpkc3QrKyA9IHRtcCAmIEJZVEVfTUFTSykpOworCWRsdGhpcy0+dGVtcF9sZW4gPSBkc3QgLSBkbHRoaXMtPnN0cl90ZW1wOworCS8qIHNxdWlycmVsIGF3YXkgbGVuZ3RoIGluY2x1ZGluZyB0ZXJtaW5hdGluZyBudWxsICovCisJcmV0dXJuIGRsdGhpcy0+c3RyX3RlbXA7Cit9CQkJCS8qIHVucGFja19uYW1lICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Rsb2FkX2ludGVybmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kbG9hZF9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMmE3YzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kbG9hZF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogZGxvYWRfaW50ZXJuYWwuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9ETE9BRF9JTlRFUk5BTF8KKyNkZWZpbmUgX0RMT0FEX0lOVEVSTkFMXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIEludGVybmFsIHN0YXRlIGRlZmluaXRpb25zIGZvciB0aGUgZHluYW1pYyBsb2FkZXIKKyAqLworCisvKiB0eXBlIHVzZWQgZm9yIHJlbG9jYXRpb24gaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8KK3R5cGVkZWYgczMyIHJ2YWx1ZTsKKworLyogdW5zaWduZWQgdmVyc2lvbiBvZiBzYW1lOyBtdXN0IGhhdmUgYXQgbGVhc3QgYXMgbWFueSBiaXRzICovCit0eXBlZGVmIHUzMiB1cnZhbHVlOworCisvKgorICogRHluYW1pYyBsb2FkZXIgY29uZmlndXJhdGlvbiBjb25zdGFudHMKKyAqLworLyogZXJyb3IgaXNzdWVkIGlmIGlucHV0IGhhcyBtb3JlIHNlY3Rpb25zIHRoYW4gdGhpcyBsaW1pdCAqLworI2RlZmluZSBSRUFTT05BQkxFX1NFQ1RJT05fTElNSVQgMTAwCisKKy8qIChBZGRyZXNzYWJsZSB1bml0KSB2YWx1ZSB1c2VkIHRvIGNsZWFyIEJTUyBzZWN0aW9uICovCisjZGVmaW5lIERMT0FEX0ZJTExfQlNTIDAKKworLyoKKyAqIFJlb3JkZXIgbWFwcyBleHBsYWluZWQgKD8pCisgKgorICogVGhlIGRvZmYgZmlsZSBmb3JtYXQgZGVmaW5lcyBhIDMyLWJpdCBwYXR0ZXJuIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQorICogYnl0ZSBvcmRlciBvZiBhbiBpbWFnZSBiZWluZyByZWFkLiAgVGhhdCB2YWx1ZSBpcworICogQllURV9SRVNIVUZGTEVfVkFMVUUgPT0gMHgwMDAxMDIwMworICogRm9yIHB1cnBvc2VzIG9mIHRoZSByZW9yZGVyIHJvdXRpbmUsIHdlIHdvdWxkIHJhdGhlciBoYXZlIHRoZSBhbGwtaXMtT0sKKyAqIGZvciAzMi1iaXRzIHBhdHRlcm4gYmUgMHgwMzAyMDEwMC4gIFRoaXMgZmlyc3QgbWFjcm8gbWFrZXMgdGhlCisgKiB0cmFuc2xhdGlvbiBmcm9tIGRvZmYgZmlsZSBoZWFkZXIgdmFsdWUgdG8gTUFQIHZhbHVlOiAqLworI2RlZmluZSBSRU9SREVSX01BUChyYXdtYXApICgocmF3bWFwKSBeIDB4MzAzMDMwMykKKy8qIFRoaXMgdHJhbnNsYXRpb24gaXMgbWFkZSBpbiBkbG9hZF9oZWFkZXJzLiAgVGhlcmVhZnRlciwgdGhlIGFsbC1pcy1PSworICogdmFsdWUgZm9yIHRoZSBtYXBzIHN0b3JlZCBpbiBkbHRoaXMgaXMgUkVPUkRFUl9NQVAoQllURV9SRVNIVUZGTEVfVkFMVUUpLgorICogQnV0IHNhZGx5LCBub3QgYWxsIGJpdHMgb2YgdGhlIGRvZmYgZmlsZSBhcmUgMzItYml0IGludGVnZXJzLgorICogVGhlIG5vdGFibGUgZXhjZXB0aW9ucyBhcmUgc3RyaW5ncyBhbmQgaW1hZ2UgYml0cy4KKyAqIFN0cmluZ3Mgb2JleSBob3N0IGJ5dGUgb3JkZXI6ICovCisjaWYgZGVmaW5lZChfQklHX0VORElBTikKKyNkZWZpbmUgSE9TVF9CWVRFX09SREVSKGNvb2tlZG1hcCkgKChjb29rZWRtYXApIF4gMHgzMDMwMzAzKQorI2Vsc2UKKyNkZWZpbmUgSE9TVF9CWVRFX09SREVSKGNvb2tlZG1hcCkgKGNvb2tlZG1hcCkKKyNlbmRpZgorLyogVGFyZ2V0IGJpdHMgY29uc2lzdCBvZiB0YXJnZXQgQVVzIChjb3VsZCBiZSBieXRlcywgb3IgMTYtYml0cywKKyAqIG9yIDMyLWJpdHMpIHN0b3JlZCBhcyBhbiBhcnJheSBpbiBob3N0IG9yZGVyLiAgQSB0YXJnZXQgb3JkZXIKKyAqIG1hcCBpcyBkZWZpbmVkIGJ5OiAqLworI2lmICFkZWZpbmVkKF9CSUdfRU5ESUFOKSB8fCBUQVJHRVRfQVVfQklUUyA+IDE2CisjZGVmaW5lIFRBUkdFVF9PUkRFUihjb29rZWRtYXApIChjb29rZWRtYXApCisjZWxpZiBUQVJHRVRfQVVfQklUUyA+IDgKKyNkZWZpbmUgVEFSR0VUX09SREVSKGNvb2tlZG1hcCkgKChjb29rZWRtYXApIF4gMHgyMDIwMjAyKQorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX09SREVSKGNvb2tlZG1hcCkgKChjb29rZWRtYXApIF4gMHgzMDMwMzAzKQorI2VuZGlmCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gZm9yIGhhbmRsZSByZXR1cm5lZCBieSBkeW5hbWljIGxvYWRlciAqLworc3RydWN0IG15X2hhbmRsZTsKKworLyoKKyAqIGEgbGlzdCBvZiBtb2R1bGUgaGFuZGxlcywgd2hpY2ggbWlycm9ycyB0aGUgZGVidWcgbGlzdCBvbiB0aGUgdGFyZ2V0CisgKi8KK3N0cnVjdCBkYmdfbWlycm9yX3Jvb3QgeworCS8qIG11c3QgYmUgc2FtZSBhcyBkYmdfbWlycm9yX2xpc3Q7IF9fRExNb2R1bGVzIGFkZHJlc3Mgb24gdGFyZ2V0ICovCisJdTMyIGRidGhpczsKKwlzdHJ1Y3QgbXlfaGFuZGxlICpobmV4dDsJLyogbXVzdCBiZSBzYW1lIGFzIGRiZ19taXJyb3JfbGlzdCAqLworCXUxNiBjaGFuZ2VzOwkJLyogY2hhbmdlIGNvdW50ZXIgKi8KKwl1MTYgcmVmY291bnQ7CQkvKiBudW1iZXIgb2YgbW9kdWxlcyByZWZlcmVuY2luZyB0aGlzIHJvb3QgKi8KK307CisKK3N0cnVjdCBkYmdfbWlycm9yX2xpc3QgeworCXUzMiBkYnRoaXM7CisJc3RydWN0IG15X2hhbmRsZSAqaG5leHQsICpocHJldjsKKwlzdHJ1Y3QgZGJnX21pcnJvcl9yb290ICpocm9vdDsKKwl1MTYgZGJzaXo7CisJdTMyIGNvbnRleHQ7CS8qIFNhdmUgY29udGV4dCBmb3IgLmRsbHZpZXcgbWVtb3J5IGFsbG9jYXRpb24gKi8KK307CisKKyNkZWZpbmUgVkFSSUFCTEVfU0laRSAxCisvKgorICogdGhlIHN0cnVjdHVyZSB3ZSBhY3R1YWxseSByZXR1cm4gYXMgYW4gb3BhcXVlIG1vZHVsZSBoYW5kbGUKKyAqLworc3RydWN0IG15X2hhbmRsZSB7CisJc3RydWN0IGRiZ19taXJyb3JfbGlzdCBkbTsJLyogISEhIG11c3QgYmUgZmlyc3QgISEhICovCisJLyogc2VjdGlvbnMgZm9sbG93aW5nIDw8IDEsIExTQiBpcyBzZXQgZm9yIGJpZy1lbmRpYW4gdGFyZ2V0ICovCisJdTE2IHNlY25fY291bnQ7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gc2VjbnNbVkFSSUFCTEVfU0laRV07Cit9OworI2RlZmluZSBNWV9IQU5ETEVfU0laRSAoc2l6ZW9mKHN0cnVjdCBteV9oYW5kbGUpIC1cCisJCQlzaXplb2Yoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8pKQorLyogcmVhbCBzaXplIG9mIG15X2hhbmRsZSAqLworCisvKgorICogcmVkdWNlZCBzeW1ib2wgc3RydWN0dXJlIHVzZWQgZm9yIHN5bWJvbHMgZHVyaW5nIHJlbG9jYXRpb24KKyAqLworc3RydWN0IGxvY2FsX3N5bWJvbCB7CisJczMyIHZhbHVlOwkJLyogUmVsb2NhdGVkIHN5bWJvbCB2YWx1ZSAqLworCXMzMiBkZWx0YTsJCS8qIE9yaWdpbmFsIHZhbHVlIGluIGlucHV0IGZpbGUgKi8KKwlzMTYgc2Vjbm47CQkvKiBzZWN0aW9uIG51bWJlciAqLworCXMxNiBzY2xhc3M7CQkvKiBzeW1ib2wgY2xhc3MgKi8KK307CisKKy8qCisgKiBUcmFtcG9saW5lIGRhdGEgc3RydWN0dXJlcworICovCisjZGVmaW5lIFRSQU1QX05PX0dFTl9BVkFJTCAgICAgICAgICAgICAgNjU1MzUKKyNkZWZpbmUgVFJBTVBfU1lNX1BSRUZJWCAgICAgICAgICAgICAgICAiX18kZGJUUl9fIgorI2RlZmluZSBUUkFNUF9TRUNUX05BTUUgICAgICAgICAgICAgICAgICIuZGJUUiIKKy8qIE1VU1QgTUFUQ0ggVEhFIExFTkdUSCBBQk9WRSEhICovCisjZGVmaW5lIFRSQU1QX1NZTV9QUkVGSVhfTEVOICAgICAgICAgICAgOQorLyogSW5jbHVkZXMgTlVMTCB0ZXJtaW5hdGlvbiAqLworI2RlZmluZSBUUkFNUF9TWU1fSEVYX0FTQ0lJX0xFTiAgICAgICAgIDkKKworI2RlZmluZSBHRVRfQ09OVEFJTkVSKHB0ciwgdHlwZSwgZmllbGQpICgodHlwZSAqKSgodW5zaWduZWQgbG9uZylwdHIgLVwKKwkJCQkodW5zaWduZWQgbG9uZykoJigodHlwZSAqKTApLT5maWVsZCkpKQorI2lmbmRlZiBGSUVMRF9PRkZTRVQKKyNkZWZpbmUgRklFTERfT0ZGU0VUKHR5cGUsIGZpZWxkKSAgICAgICAoKHVuc2lnbmVkIGxvbmcpKCYoKHR5cGUgKikwKS0+ZmllbGQpKQorI2VuZGlmCisKKy8qCisgICAgVGhlIHRyYW1wb2xpbmUgY29kZSBmb3IgdGhlIHRhcmdldCBpcyBsb2NhdGVkIGluIGEgdGFibGUgY2FsbGVkCisgICAgInRyYW1wX2dlbl9pbmZvIiB3aXRoIGlzIGluZGV4ZWQgYnkgbG9va2luZyB1cCB0aGUgaW5kZXggaW4gdGhlIHRhYmxlCisgICAgInRyYW1wX21hcCIuICBUaGUgdHJhbXBfbWFwIGluZGV4IGlzIGFjcXVpcmVkIHVzaW5nIHRoZSB0YXJnZXQKKyAgICBIQVNIX0ZVTkMgb24gdGhlIHJlbG9jYXRpb24gdHlwZSB0aGF0IGNhdXNlZCB0aGUgdHJhbXBvbGluZS4gIEVhY2gKKyAgICB0cmFtcG9saW5lIGNvZGUgdGFibGUgZW50cnkgTVVTVCBmb2xsb3cgdGhpcyBmb3JtYXQ6CisKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICB8ICB0cmFtcF9nZW5fY29kZV9oZHIgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICB8ICBUcmFtcG9saW5lIGltYWdlIGNvZGUgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAodGhlIHJhdyBpbnN0cnVjdGlvbiBjb2RlIGZvciB0aGUgdGFyZ2V0KSAgIHwKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICB8ICBSZWxvY2F0aW9uIGVudHJpZXMgZm9yIHRoZSBpbWFnZSBjb2RlICAgICAgIHwKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKworICAgIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIGhvdyBpbWFnZSBkYXRhIGlzIGxhaWQgb3V0IGluIHRoZSBET0ZGIGZpbGUKKyAgICBpdHNlbGYuCisgKi8KK3N0cnVjdCB0cmFtcF9nZW5fY29kZV9oZHIgeworCXUzMiB0cmFtcF9jb2RlX3NpemU7CS8qICBpbiBCWVRFUyAqLworCXUzMiBudW1fcmVsb3M7CisJdTMyIHJlbG9fb2Zmc2V0OwkvKiAgaW4gQllURVMgKi8KK307CisKK3N0cnVjdCB0cmFtcF9pbWdfcGt0IHsKKwlzdHJ1Y3QgdHJhbXBfaW1nX3BrdCAqbmV4dDsJLyogIE1VU1QgQkUgRklSU1QgKi8KKwl1MzIgYmFzZTsKKwlzdHJ1Y3QgdHJhbXBfZ2VuX2NvZGVfaGRyIGhkcjsKKwl1OCBwYXlsb2FkW1ZBUklBQkxFX1NJWkVdOworfTsKKworc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbyB7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbyAqbmV4dDsKKwlzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgcmVsbzsKK307CisKK3N0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCB7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpuZXh0OwkvKiAgTVVTVCBCRSBGSVJTVCAqLworCXMxNiBzZWNubjsKKwl1MzIgb2Zmc2V0OworCXN0cnVjdCBpbWFnZV9wYWNrZXRfdCBpbWdfcGt0OworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3JlbG8gKnJlbG9fY2hhaW47CisKKwkvKiAgUEFZTE9BRCBPRiBJTUcgUEtUIEZPTExPV1MgKi8KK307CisKK3N0cnVjdCB0cmFtcF9zeW0geworCXN0cnVjdCB0cmFtcF9zeW0gKm5leHQ7CS8qICBNVVNUIEJFIEZJUlNUICovCisJdTMyIGluZGV4OworCXUzMiBzdHJfaW5kZXg7CisJc3RydWN0IGxvY2FsX3N5bWJvbCBzeW1faW5mbzsKK307CisKK3N0cnVjdCB0cmFtcF9zdHJpbmcgeworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKm5leHQ7CS8qICBNVVNUIEJFIEZJUlNUICovCisJdTMyIGluZGV4OworCWNoYXIgc3RyW1ZBUklBQkxFX1NJWkVdOwkvKiAgTlVMTCB0ZXJtaW5hdGVkICovCit9OworCitzdHJ1Y3QgdHJhbXBfaW5mbyB7CisJdTMyIHRyYW1wX3NlY3RfbmV4dF9hZGRyOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvIHNlY3RfaW5mbzsKKworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bWJvbF9oZWFkOworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bWJvbF90YWlsOworCXUzMiB0cmFtcF9zeW1fbmV4dF9pbmRleDsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpmaW5hbF9zeW1fdGFibGU7CisKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpzdHJpbmdfaGVhZDsKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpzdHJpbmdfdGFpbDsKKwl1MzIgdHJhbXBfc3RyaW5nX25leHRfaW5kZXg7CisJdTMyIHRyYW1wX3N0cmluZ19zaXplOworCWNoYXIgKmZpbmFsX3N0cmluZ190YWJsZTsKKworCXN0cnVjdCB0cmFtcF9pbWdfcGt0ICp0cmFtcF9wa3RzOworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqZHVwX3BrdHM7Cit9OworCisvKgorICogU3RhdGVzIG9mIHRoZSAuY2luaXQgc3RhdGUgbWFjaGluZQorICovCitlbnVtIGNpbml0X21vZGUgeworCUNJX0NPVU5UID0gMCwJCS8qIGV4cGVjdGluZyBhIGNvdW50ICovCisJQ0lfQUREUkVTUywJCS8qIGV4cGVjdGluZyBhbiBhZGRyZXNzICovCisjaWYgQ0lOSVRfQUxJR04gPCBDSU5JVF9BRERSRVNTCS8qIGhhbmRsZSBjYXNlIG9mIHBhcnRpYWwgYWRkcmVzcyBmaWVsZCAqLworCUNJX1BBUlRBRERSRVNTLAkJLyogaGF2ZSBvbmx5IHBhcnQgb2YgdGhlIGFkZHJlc3MgKi8KKyNlbmRpZgorCUNJX0NPUFksCQkvKiBpbiB0aGUgbWlkZGxlIG9mIGNvcHlpbmcgZGF0YSAqLworCUNJX0RPTkUJCQkvKiBlbmQgb2YgLmNpbml0IHRhYmxlICovCit9OworCisvKgorICogVGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBkeW5hbWljIGxvYWRlciwgd2hpY2ggaXMgcGFzc2VkIGFyb3VuZCBhcworICogYW4gb2JqZWN0CisgKi8KK3N0cnVjdCBkbG9hZF9zdGF0ZSB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqc3RybTsJLyogVGhlIG1vZHVsZSBpbnB1dCBzdHJlYW0gKi8KKwlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICpteXN5bTsJLyogU3ltYm9scyBmb3IgdGhpcyBzZXNzaW9uICovCisJLyogdGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3IgKi8KKwlzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKm15YWxsb2M7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKm15aW87CS8qIHRhcmdldCBtZW1vcnkgaW5pdGlhbGl6ZXIgKi8KKwl1bnNpZ25lZCBteW9wdGlvbnM7CS8qIE9wdGlvbnMgcGFyYW1ldGVyIGR5bmFtaWNfbG9hZF9tb2R1bGUgKi8KKworCWNoYXIgKnN0cl9oZWFkOwkJLyogUG9pbnRlciB0byBzdHJpbmcgdGFibGUgKi8KKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKKwljaGFyICpzdHJfdGVtcDsJCS8qIFBvaW50ZXIgdG8gdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igc3RyaW5ncyAqLworCS8qIGJpZyBlbm91Z2ggdG8gaG9sZCBsb25nZXN0IHN0cmluZyAqLworCXVuc2lnbmVkIHRlbXBfbGVuOwkvKiBsZW5ndGggb2YgbGFzdCB0ZW1wb3Jhcnkgc3RyaW5nICovCisJY2hhciAqeHN0cmluZ3M7CQkvKiBQb2ludGVyIHRvIGJ1ZmZlciBmb3IgZXhwYW5kZWQgKi8KKwkvKiBzdHJpbmdzIGZvciBzZWMgbmFtZXMgKi8KKyNlbmRpZgorCS8qIFRvdGFsIHNpemUgb2Ygc3RyaW5ncyBmb3IgRExMVmlldyBzZWN0aW9uIG5hbWVzICovCisJdW5zaWduZWQgZGVidWdfc3RyaW5nX3NpemU7CisJLyogUG9pbnRlciB0byBwYXJhbGxlbCBzZWN0aW9uIGluZm8gZm9yIGFsbG9jYXRlZCBzZWN0aW9ucyBvbmx5ICovCisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNlY3RfaGRyczsJLyogUG9pbnRlciB0byBzZWN0aW9uIHRhYmxlICovCisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmxkcl9zZWN0aW9uczsKKyNpZiBUTVMzMjA2MAorCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZiB0aGUgLmJzcyBzZWN0aW9uICovCisJbGRyX2FkZHIgYnNzX3J1bl9iYXNlOworI2VuZGlmCisJc3RydWN0IGxvY2FsX3N5bWJvbCAqbG9jYWxfc3ltdGFiOwkvKiBSZWxvY2F0aW9uIHN5bWJvbCB0YWJsZSAqLworCisJLyogcG9pbnRlciB0byBETCBzZWN0aW9uIGluZm8gZm9yIHRoZSBzZWN0aW9uIGJlaW5nIHJlbG9jYXRlZCAqLworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbWFnZV9zZWNuOworCS8qIGNoYW5nZSBpbiBydW4gYWRkcmVzcyBmb3IgY3VycmVudCBzZWN0aW9uIGR1cmluZyByZWxvY2F0aW9uICovCisJbGRyX2FkZHIgZGVsdGFfcnVuYWRkcjsKKwlsZHJfYWRkciBpbWFnZV9vZmZzZXQ7CS8qIG9mZnNldCBvZiBjdXJyZW50IHBhY2tldCBpbiBzZWN0aW9uICovCisJZW51bSBjaW5pdF9tb2RlIGNpbml0X3N0YXRlOwkvKiBjdXJyZW50IHN0YXRlIG9mIGNsb2FkX2Npbml0KCkgKi8KKwlpbnQgY2luaXRfY291bnQ7CS8qIHRoZSBjdXJyZW50IGNvdW50ICovCisJbGRyX2FkZHIgY2luaXRfYWRkcjsJLyogdGhlIGN1cnJlbnQgYWRkcmVzcyAqLworCXMxNiBjaW5pdF9wYWdlOwkJLyogdGhlIGN1cnJlbnQgcGFnZSAqLworCS8qIEhhbmRsZSB0byBiZSByZXR1cm5lZCBieSBkeW5hbWljX2xvYWRfbW9kdWxlICovCisJc3RydWN0IG15X2hhbmRsZSAqbXloYW5kbGU7CisJdW5zaWduZWQgZGxvYWRfZXJyY291bnQ7CS8qIFRvdGFsICMgb2YgZXJyb3JzIHJlcG9ydGVkIHNvIGZhciAqLworCS8qIE51bWJlciBvZiB0YXJnZXQgc2VjdGlvbnMgdGhhdCByZXF1aXJlIGFsbG9jYXRpb24gYW5kIHJlbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBhbGxvY2F0ZWRfc2Vjbl9jb3VudDsKKyNpZm5kZWYgVEFSR0VUX0VORElBTk5FU1MKKwlpbnQgYmlnX2VfdGFyZ2V0OwkvKiBUYXJnZXQgZGF0YSBpbiBiaWctZW5kaWFuIGZvcm1hdCAqLworI2VuZGlmCisJLyogbWFwIGZvciByZW9yZGVyaW5nIGJ5dGVzLCAwIGlmIG5vdCBuZWVkZWQgKi8KKwl1MzIgcmVvcmRlcl9tYXA7CisJc3RydWN0IGRvZmZfZmlsZWhkcl90IGRmaWxlX2hkcjsJLyogRE9GRiBmaWxlIGhlYWRlciBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgZG9mZl92ZXJpZnlfcmVjX3QgdmVyaWZ5OwkvKiBWZXJpZnkgcmVjb3JkICovCisKKwlzdHJ1Y3QgdHJhbXBfaW5mbyB0cmFtcDsJLyogVHJhbXBvbGluZSBkYXRhLCBpZiBuZWVkZWQgKi8KKworCWludCByZWxzdGtpZHg7CQkvKiBpbmRleCBpbnRvIHJlbG9jYXRpb24gdmFsdWUgc3RhY2sgKi8KKwkvKiByZWxvY2F0aW9uIHZhbHVlIHN0YWNrIHVzZWQgaW4gcmVsZXhwLmMgKi8KKwlydmFsdWUgcmVsc3RrW1NUQVRJQ19FWFBSX1NUS19TSVpFXTsKKworfTsKKworI2lmZGVmIFRBUkdFVF9FTkRJQU5ORVNTCisjZGVmaW5lIFRBUkdFVF9CSUdfRU5ESUFOIFRBUkdFVF9FTkRJQU5ORVNTCisjZWxzZQorI2RlZmluZSBUQVJHRVRfQklHX0VORElBTiAoZGx0aGlzLT5iaWdfZV90YXJnZXQpCisjZW5kaWYKKworLyoKKyAqIEV4cG9ydHMgZnJvbSBjbG9hZC5jIHRvIHJlc3Qgb2YgdGhlIHdvcmxkCisgKi8KK2V4dGVybiB2b2lkIGRsb2FkX2Vycm9yKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBjb25zdCBjaGFyICplcnJ0eHQsIC4uLik7CitleHRlcm4gdm9pZCBkbG9hZF9zeW1zX2Vycm9yKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCisJCQkgICAgIGNvbnN0IGNoYXIgKmVycnR4dCwgLi4uKTsKK2V4dGVybiB2b2lkIGRsb2FkX2hlYWRlcnMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpOworZXh0ZXJuIHZvaWQgZGxvYWRfc3RyaW5ncyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgYm9vbCBzZWNfbmFtZXNfb25seSk7CitleHRlcm4gdm9pZCBkbG9hZF9zZWN0aW9ucyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CitleHRlcm4gdm9pZCBkbG9hZF9yZW9yZGVyKHZvaWQgKmRhdGEsIGludCBkc2l6LCB1MzIgbWFwKTsKK2V4dGVybiB1MzIgZGxvYWRfY2hlY2tzdW0odm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KTsKKworI2lmIEhPU1RfRU5ESUFOTkVTUworZXh0ZXJuIHVpbnQzMl90IGRsb2FkX3JldmVyc2VfY2hlY2tzdW0odm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KTsKKyNpZiAoVEFSR0VUX0FVX0JJVFMgPiA4KSAmJiAoVEFSR0VUX0FVX0JJVFMgPCAzMikKK2V4dGVybiB1aW50MzJfdCBkbG9hZF9yZXZlcnNlX2NoZWNrc3VtMTYodm9pZCAqZGF0YSwgdW5zaWduZWQgc2l6KTsKKyNlbmRpZgorI2VuZGlmCisKKy8qCisgKiBleHBvcnRlZCBieSByZWxvYy5jCisgKi8KK2V4dGVybiB2b2lkIGRsb2FkX3JlbG9jYXRlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB0Z3RfYXVfdCAqIGRhdGEsCisJCQkgICBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwLCBib29sICogdHJhbXBzX2dlbmVyYXRlZCwKKwkJCSAgIGJvb2wgc2Vjb25kX3Bhc3MpOworCitleHRlcm4gcnZhbHVlIGRsb2FkX3VucGFjayhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgdGd0X2F1X3QgKiBkYXRhLAorCQkJICAgaW50IGZpZWxkc3osIGludCBvZmZzZXQsIHVuc2lnbmVkIHNnbik7CisKK2V4dGVybiBpbnQgZGxvYWRfcmVwYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBydmFsdWUgdmFsLCB0Z3RfYXVfdCAqIGRhdGEsCisJCQlpbnQgZmllbGRzeiwgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKTsKKworLyoKKyAqIGV4cG9ydGVkIGJ5IHRyYW1wLmMKKyAqLworZXh0ZXJuIGJvb2wgZGxvYWRfdHJhbXBfYXZhaWwoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkgICAgICBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwKTsKKworaW50IGRsb2FkX3RyYW1wX2dlbmVyYXRlKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBzMTYgc2Vjbm4sCisJCQkgdTMyIGltYWdlX29mZnNldCwgc3RydWN0IGltYWdlX3BhY2tldF90ICppcGFja2V0LAorCQkJIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnApOworCitleHRlcm4gaW50IGRsb2FkX3RyYW1wX3BrdF91ZHBhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJICBzMTYgc2Vjbm4sIHUzMiBpbWFnZV9vZmZzZXQsCisJCQkJICBzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgKmlwYWNrZXQpOworCitleHRlcm4gaW50IGRsb2FkX3RyYW1wX2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKTsKKworZXh0ZXJuIHZvaWQgZGxvYWRfdHJhbXBfY2xlYW51cChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcyk7CisKKyNlbmRpZiAvKiBfRExPQURfSU5URVJOQUxfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kb2ZmLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9kb2ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMzE0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2RvZmYuaApAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIGRvZmYuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTdHJ1Y3R1cmVzICYgZGVmaW5pdGlvbnMgdXNlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgZmlsZSBmb3JtYXQuCisgKiBUaGlzIGZvcm1hdCBpcyBhIHJlZm9ybWF0dGVkIHZlcnNpb24gb2YgQ09GRi4gSXQgb3B0aW1pemVzIHRoZSBsYXlvdXQgZm9yCisgKiB0aGUgZHluYW1pYyBsb2FkZXIuCisgKgorICogLmRvZiBmaWxlcywgd2hlbiB2aWV3ZWQgYXMgYSBzZXF1ZW5jZSBvZiAzMi1iaXQgaW50ZWdlcnMsIGxvb2sgdGhlIHNhbWUKKyAqIG9uIGJpZy1lbmRpYW4gYW5kIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfRE9GRl9ICisjZGVmaW5lIF9ET0ZGX0gKKworCisjZGVmaW5lIEJZVEVfUkVTSFVGRkxFX1ZBTFVFIDB4MDAwMTAyMDMKKworLyogRE9GRiBmaWxlIGhlYWRlciBjb250YWluaW5nIGZpZWxkcyBjYXRlZ29yaXppbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlsZSAqLworc3RydWN0IGRvZmZfZmlsZWhkcl90IHsKKworCS8qIHN0cmluZyB0YWJsZSBzaXplLCBpbmNsdWRpbmcgZmlsZW5hbWUsIGluIGJ5dGVzICovCisJdTMyIGRmX3N0cnRhYl9zaXplOworCisJLyogZW50cnkgcG9pbnQgaWYgb25lIGV4aXN0cyAqLworCXUzMiBkZl9lbnRyeXB0OworCisJLyogaWRlbnRpZmllcyBieXRlIG9yZGVyaW5nIG9mIGZpbGU7CisJICogYWx3YXlzIHNldCB0byBCWVRFX1JFU0hVRkZMRV9WQUxVRSAqLworCXUzMiBkZl9ieXRlX3Jlc2h1ZmZsZTsKKworCS8qIFNpemUgb2YgdGhlIHN0cmluZyB0YWJsZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0IHNlY3Rpb24gbmFtZSAqLworCS8qIFNpemUgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIENPRkYgZmlsZSBhbHNvICovCisJdTMyIGRmX3Njbl9uYW1lX3NpemU7CisKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkvKiBudW1iZXIgb2Ygc3ltYm9scyAqLworCXUxNiBkZl9ub19zeW1zOworCisJLyogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBsb25nZXN0IHN0cmluZywgaW5jbHVkaW5nIHRlcm1pbmF0aW5nIE5VTEwgKi8KKwkvKiBleGNsdWRlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSAqLworCXUxNiBkZl9tYXhfc3RyX2xlbjsKKworCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8tbG9hZCBvbmVzICovCisJdTE2IGRmX25vX3NjbnM7CisKKwkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29udGFpbmluZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLworCXUxNiBkZl90YXJnZXRfc2NuczsKKworCS8qIHVuaXF1ZSBpZCBmb3IgZGxsIGZpbGUgZm9ybWF0ICYgdmVyc2lvbiAqLworCXUxNiBkZl9kb2ZmX3ZlcnNpb247CisKKwkvKiBpZGVudGlmaWVzIElTQSAqLworCXUxNiBkZl90YXJnZXRfaWQ7CisKKwkvKiB1c2VmdWwgZmlsZSBmbGFncyAqLworCXUxNiBkZl9mbGFnczsKKworCS8qIHNlY3Rpb24gcmVmZXJlbmNlIGZvciBlbnRyeSBwb2ludCwgTl9VTkRFRiBmb3Igbm9uZSwgKi8KKwkvKiBOX0FCUyBmb3IgYWJzb2x1dGUgYWRkcmVzcyAqLworCXMxNiBkZl9lbnRyeV9zZWNuOworI2Vsc2UKKwkvKiBsZW5ndGggb2YgdGhlIGxvbmdlc3Qgc3RyaW5nLCBpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMTCAqLworCXUxNiBkZl9tYXhfc3RyX2xlbjsKKworCS8qIG51bWJlciBvZiBzeW1ib2xzICovCisJdTE2IGRmX25vX3N5bXM7CisKKwkvKiBudW1iZXIgb2Ygc2VjdGlvbnMgY29udGFpbmluZyB0YXJnZXQgY29kZSBhbGxvY2F0ZWQgb3IgZG93bmxvYWRlZCAqLworCXUxNiBkZl90YXJnZXRfc2NuczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBzZWN0aW9ucyBpbmNsdWRpbmcgbm8tbG9hZCBvbmVzICovCisJdTE2IGRmX25vX3NjbnM7CisKKwkvKiBpZGVudGlmaWVzIElTQSAqLworCXUxNiBkZl90YXJnZXRfaWQ7CisKKwkvKiB1bmlxdWUgaWQgZm9yIGRsbCBmaWxlIGZvcm1hdCAmIHZlcnNpb24gKi8KKwl1MTYgZGZfZG9mZl92ZXJzaW9uOworCisJLyogc2VjdGlvbiByZWZlcmVuY2UgZm9yIGVudHJ5IHBvaW50LCBOX1VOREVGIGZvciBub25lLCAqLworCS8qIE5fQUJTIGZvciBhYnNvbHV0ZSBhZGRyZXNzICovCisJczE2IGRmX2VudHJ5X3NlY247CisKKwkvKiB1c2VmdWwgZmlsZSBmbGFncyAqLworCXUxNiBkZl9mbGFnczsKKyNlbmRpZgorCS8qIGNoZWNrc3VtIGZvciBmaWxlIGhlYWRlciByZWNvcmQgKi8KKwl1MzIgZGZfY2hlY2tzdW07CisKK307CisKKy8qIGZsYWdzIGluIHRoZSBkZl9mbGFncyBmaWVsZCAqLworI2RlZmluZSAgREZfTElUVExFICAgMHgxMDAKKyNkZWZpbmUgIERGX0JJRyAgICAgIDB4MjAwCisjZGVmaW5lICBERl9CWVRFX09SREVSIChERl9MSVRUTEUgfCBERl9CSUcpCisKKy8qIFN1cHBvcnRlZCBwcm9jZXNzb3JzICovCisjZGVmaW5lIFRNUzQ3MF9JRCAgIDB4OTcKKyNkZWZpbmUgTEVBRF9JRCAgICAgMHg5OAorI2RlZmluZSBUTVMzMjA2MF9JRCAweDk5CisjZGVmaW5lIExFQUQzX0lEICAgIDB4OWMKKworLyogUHJpbWFyeSBwcm9jZXNzb3IgZm9yIGxvYWRpbmcgKi8KKyNpZiBUTVMzMjA2MAorI2RlZmluZSBUQVJHRVRfSUQgICBUTVMzMjA2MF9JRAorI2VuZGlmCisKKy8qIFZlcmlmaWNhdGlvbiByZWNvcmQgY29udGFpbmluZyB2YWx1ZXMgdXNlZCB0byB0ZXN0IGludGVncml0eSBvZiB0aGUgYml0cyAqLworc3RydWN0IGRvZmZfdmVyaWZ5X3JlY190IHsKKworCS8qIHRpbWUgYW5kIGRhdGUgc3RhbXAgKi8KKwl1MzIgZHZfdGltZGF0OworCisJLyogY2hlY2tzdW0gZm9yIGFsbCBzZWN0aW9uIHJlY29yZHMgKi8KKwl1MzIgZHZfc2NuX3JlY19jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciBzdHJpbmcgdGFibGUgKi8KKwl1MzIgZHZfc3RyX3RhYl9jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciBzeW1ib2wgdGFibGUgKi8KKwl1MzIgZHZfc3ltX3RhYl9jaGVja3N1bTsKKworCS8qIGNoZWNrc3VtIGZvciB2ZXJpZmljYXRpb24gcmVjb3JkICovCisJdTMyIGR2X3ZlcmlmeV9yZWNfY2hlY2tzdW07CisKK307CisKKy8qIFN0cmluZyB0YWJsZSBpcyBhbiBhcnJheSBvZiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncy4gIFRoZSBmaXJzdCBlbnRyeSBpcworICogdGhlIGZpbGVuYW1lLCB3aGljaCBpcyBhZGRlZCBieSBETExjcmVhdGUuICBObyBuZXcgc3RydWN0dXJlIGRlZmluaXRpb25zCisgKiBhcmUgcmVxdWlyZWQuCisgKi8KKworLyogU2VjdGlvbiBSZWNvcmRzIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBpbWFnZSBwYWNrZXRzICovCisvKgorICogICAgICAhIVdBUk5JTkchIQorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGV4cGVjdGVkIHRvIG1hdGNoIGluIGZvcm0gbGRyX3NlY3Rpb25faW5mbyBpbgorICogZHluYW1pY19sb2FkZXIuaAorICovCisKK3N0cnVjdCBkb2ZmX3Njbmhkcl90IHsKKworCXMzMiBkc19vZmZzZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLworCXMzMiBkc19wYWRkcjsJCS8qIFJVTiBhZGRyZXNzLCBpbiB0YXJnZXQgQVUgKi8KKwlzMzIgZHNfdmFkZHI7CQkvKiBMT0FEIGFkZHJlc3MsIGluIHRhcmdldCBBVSAqLworCXMzMiBkc19zaXplOwkJLyogc2VjdGlvbiBzaXplLCBpbiB0YXJnZXQgQVUgKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgZHNfcGFnZTsJCS8qIG1lbW9yeSBwYWdlIGlkICovCisJdTE2IGRzX2ZsYWdzOwkJLyogc2VjdGlvbiBmbGFncyAqLworI2Vsc2UKKwl1MTYgZHNfZmxhZ3M7CQkvKiBzZWN0aW9uIGZsYWdzICovCisJdTE2IGRzX3BhZ2U7CQkvKiBtZW1vcnkgcGFnZSBpZCAqLworI2VuZGlmCisJdTMyIGRzX2ZpcnN0X3BrdF9vZmZzZXQ7CisJLyogQWJzb2x1dGUgYnl0ZSBvZmZzZXQgaW50byB0aGUgZmlsZSAqLworCS8qIHdoZXJlIHRoZSBmaXJzdCBpbWFnZSByZWNvcmQgcmVzaWRlcyAqLworCisJczMyIGRzX25pcGFja3M7CQkvKiBudW1iZXIgb2YgaW1hZ2UgcGFja2V0cyAqLworCit9OworCisvKiBTeW1ib2wgdGFibGUgZW50cnkgKi8KK3N0cnVjdCBkb2ZmX3N5bWVudF90IHsKKworCXMzMiBkbl9vZmZzZXQ7CQkvKiBvZmZzZXQgaW50byBzdHJpbmcgdGFibGUgb2YgbmFtZSAqLworCXMzMiBkbl92YWx1ZTsJCS8qIHZhbHVlIG9mIHN5bWJvbCAqLworI2lmbmRlZiBfQklHX0VORElBTgorCXMxNiBkbl9zY251bTsJCS8qIHNlY3Rpb24gbnVtYmVyICovCisJczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2UgY2xhc3MgKi8KKyNlbHNlCisJczE2IGRuX3NjbGFzczsJCS8qIHN0b3JhZ2UgY2xhc3MgKi8KKwlzMTYgZG5fc2NudW07CQkvKiBzZWN0aW9uIG51bWJlciwgMS1iYXNlZCAqLworI2VuZGlmCisKK307CisKKy8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9zY251bSAqLworI2RlZmluZSAgRE5fVU5ERUYgIDAJCS8qIHVuZGVmaW5lZCBzeW1ib2wgKi8KKyNkZWZpbmUgIEROX0FCUyAgICAoLTEpCQkvKiB2YWx1ZSBvZiBzeW1ib2wgaXMgYWJzb2x1dGUgKi8KKy8qIHNwZWNpYWwgdmFsdWVzIGZvciBkbl9zY2xhc3MgKi8KKyNkZWZpbmUgRE5fRVhUICAgICAyCisjZGVmaW5lIEROX1NUQVRMQUIgMjAKKyNkZWZpbmUgRE5fRVhUTEFCICAyMQorCisvKiBEZWZhdWx0IHZhbHVlIG9mIGltYWdlIGJpdHMgaW4gcGFja2V0ICovCisvKiBDb25maWd1cmFibGUgYnkgdXNlciBvbiB0aGUgY29tbWFuZCBsaW5lICovCisjZGVmaW5lIElNQUdFX1BBQ0tFVF9TSVpFIDEwMjQKKworLyogQW4gaW1hZ2UgcGFja2V0IGNvbnRhaW5zIGEgY2h1bmsgb2YgZGF0YSBmcm9tIGEgc2VjdGlvbiBhbG9uZyB3aXRoICovCisvKiBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGl0cyBwcm9jZXNzaW5nLiAqLworc3RydWN0IGltYWdlX3BhY2tldF90IHsKKworCXMzMiBudW1fcmVsb2NzOwkJLyogbnVtYmVyIG9mIHJlbG9jYXRpb25zIGZvciAqLworCS8qIHRoaXMgcGFja2V0ICovCisKKwlzMzIgcGFja2V0X3NpemU7CS8qIG51bWJlciBvZiBieXRlcyBpbiBhcnJheSAqLworCS8qICJiaXRzIiBvY2N1cGllZCAgYnkgKi8KKwkvKiB2YWxpZCBkYXRhLiAgQ291bGQgYmUgKi8KKwkvKiA8IElNQUdFX1BBQ0tFVF9TSVpFIHRvICovCisJLyogcHJldmVudCBzcGxpdHRpbmcgYSAqLworCS8qIHJlbG9jYXRpb24gYWNyb3NzIHBhY2tldHMuICovCisJLyogTGFzdCBwYWNrZXQgb2YgYSBzZWN0aW9uICovCisJLyogd2lsbCBtb3N0IGxpa2VseSBjb250YWluICovCisJLyogPCBJTUFHRV9QQUNLRVRfU0laRSBieXRlcyAqLworCS8qIG9mIHZhbGlkIGRhdGEgKi8KKworCXMzMiBpbWdfY2hrc3VtOwkJLyogQ2hlY2tzdW0gZm9yIGltYWdlIHBhY2tldCAqLworCS8qIGFuZCB0aGUgY29ycmVzcG9uZGluZyAqLworCS8qIHJlbG9jYXRpb24gcmVjb3JkcyAqLworCisJdTggKmltZ19kYXRhOwkJLyogQWN0dWFsIGRhdGEgaW4gc2VjdGlvbiAqLworCit9OworCisvKiBUaGUgcmVsb2NhdGlvbiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBtYXRjaGVzIHRoZSBDT0ZGIHZlcnNpb24uICBPZmZzZXRzICovCisvKiBob3dldmVyIGFyZSByZWxhdGl2ZSB0byB0aGUgaW1hZ2UgcGFja2V0IGJhc2Ugbm90IHRoZSBzZWN0aW9uIGJhc2UuICovCitzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgeworCisJczMyIHZhZGRyOworCisJLyogZXhwcmVzc2VkIGluIHRhcmdldCBBVXMgKi8KKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJCXU4IF9vZmZzZXQ7CS8qIGJpdCBvZmZzZXQgb2YgcmVsIGZsZCAqLworCQkJdTggX2ZpZWxkc3o7CS8qIHNpemUgb2YgcmVsIGZsZCAqLworCQkJdTggX3dvcmRzejsJLyogIyBieXRlcyBjb250YWluaW5nIHJlbCBmbGQgKi8KKwkJCXU4IF9kdW0xOworCQkJdTE2IF9kdW0yOworCQkJdTE2IF90eXBlOworI2Vsc2UKKwkJCXVuc2lnbmVkIF9kdW0xOjg7CisJCQl1bnNpZ25lZCBfd29yZHN6Ojg7CS8qICMgYnl0ZXMgY29udGFpbmluZyByZWwgZmxkICovCisJCQl1bnNpZ25lZCBfZmllbGRzejo4OwkvKiBzaXplIG9mIHJlbCBmbGQgKi8KKwkJCXVuc2lnbmVkIF9vZmZzZXQ6ODsJLyogYml0IG9mZnNldCBvZiByZWwgZmxkICovCisJCQl1MTYgX3R5cGU7CisJCQl1MTYgX2R1bTI7CisjZW5kaWYKKwkJfSBfcl9maWVsZDsKKworCQlzdHJ1Y3QgeworCQkJdTMyIF9zcGM7CS8qIGltYWdlIHBhY2tldCByZWxhdGl2ZSBQQyAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kdW07CisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2R1bTsKKyNlbmRpZgorCQl9IF9yX3NwYzsKKworCQlzdHJ1Y3QgeworCQkJdTMyIF91dmFsOwkvKiBjb25zdGFudCB2YWx1ZSAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kdW07CisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2R1bTsKKyNlbmRpZgorCQl9IF9yX3V2YWw7CisKKwkJc3RydWN0IHsKKwkJCXMzMiBfc3ltbmR4OwkvKiAzMi1iaXQgc3ltIHRibCBpbmRleCAqLworI2lmbmRlZiBfQklHX0VORElBTgorCQkJdTE2IF9kaXNwOwkvKiBleHRyYSBhZGRyIGVuY29kZSBkYXRhICovCisJCQl1MTYgX3R5cGU7CS8qIHJlbG9jYXRpb24gdHlwZSAqLworI2Vsc2UKKwkJCXUxNiBfdHlwZTsJLyogcmVsb2NhdGlvbiB0eXBlICovCisJCQl1MTYgX2Rpc3A7CS8qIGV4dHJhIGFkZHIgZW5jb2RlIGRhdGEgKi8KKyNlbmRpZgorCQl9IF9yX3N5bTsKKwl9IF91X3JlbG9jOworCit9OworCisvKiBhYmJyZXZpYXRpb25zIGZvciBjb252ZW5pZW5jZSAqLworI2lmbmRlZiBUWVBFCisjZGVmaW5lIFRZUEUgICAgICBfdV9yZWxvYy5fcl9zeW0uX3R5cGUKKyNkZWZpbmUgVVZBTCAgICAgIF91X3JlbG9jLl9yX3V2YWwuX3V2YWwKKyNkZWZpbmUgU1lNTkRYICAgIF91X3JlbG9jLl9yX3N5bS5fc3ltbmR4CisjZGVmaW5lIE9GRlNFVCAgICBfdV9yZWxvYy5fcl9maWVsZC5fb2Zmc2V0CisjZGVmaW5lIEZJRUxEU1ogICBfdV9yZWxvYy5fcl9maWVsZC5fZmllbGRzegorI2RlZmluZSBXT1JEU1ogICAgX3VfcmVsb2MuX3JfZmllbGQuX3dvcmRzegorI2RlZmluZSBSX0RJU1AgICAgICBfdV9yZWxvYy5fcl9zeW0uX2Rpc3AKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogKi8KKy8qIEltcG9ydGFudCBET0ZGIG1hY3JvcyB1c2VkIGZvciBmaWxlIHByb2Nlc3NpbmcgKi8KKy8qICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisvKiBET0ZGIFZlcnNpb25zICovCisjZGVmaW5lICAgICAgICAgRE9GRjAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLyogUmV0dXJuIHRoZSBhZGRyZXNzL3NpemUgPj0gdG8gYWRkciB0aGF0IGlzIGF0IGEgMzItYml0IGJvdW5kYXJ5ICovCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhIGJ5dGUgaXMgOCBiaXRzICovCisjZGVmaW5lICAgICAgICAgRE9GRl9BTElHTihhZGRyKSAgICAgICAgICAgICgoKGFkZHIpICsgMykgJiB+M1VMKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogKi8KKy8qIFRoZSBET0ZGIHNlY3Rpb24gaGVhZGVyIGZsYWdzIGZpZWxkIGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6ICovCisvKiAqLworLyogIEJpdHMgMC0zIDogU2VjdGlvbiBUeXBlICovCisvKiAgQml0ICAgIDQgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVzIHRhcmdldCBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGJ5IERMICovCisvKiAgQml0ICAgIDUgOiBTZXQgd2hlbiBzZWN0aW9uIHJlcXVpcmVzIGRvd25sb2FkaW5nICovCisvKiAgQml0cyA4LTExOiBBbGlnbm1lbnQsIHNhbWUgYXMgQ09GRiAqLworLyogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qIEVudW0gZm9yIERPRkYgc2VjdGlvbiB0eXBlcyAoYml0cyAwLTMgb2YgZmxhZyk6IFNlZSBkeW5hbWljX2xvYWRlci5oICovCisjZGVmaW5lIERTX1NFQ1RJT05fVFlQRV9NQVNLCTB4RgorLyogRFNfQUxMT0NBVEUgaW5kaWNhdGVzIHdoZXRoZXIgYSBzZWN0aW9uIG5lZWRzIHNwYWNlIG9uIHRoZSB0YXJnZXQgKi8KKyNkZWZpbmUgRFNfQUxMT0NBVEVfTUFTSyAgICAgICAgICAgIDB4MTAKKy8qIERTX0RPV05MT0FEIGluZGljYXRlcyB0aGF0IHRoZSBsb2FkZXIgbmVlZHMgdG8gY29weSBiaXRzICovCisjZGVmaW5lIERTX0RPV05MT0FEX01BU0sgICAgICAgICAgICAweDIwCisvKiBTZWN0aW9uIGFsaWdubWVudCByZXF1aXJlbWVudCBpbiBBVXMgKi8KKyNkZWZpbmUgRFNfQUxJR05NRU5UX1NISUZUCTgKKworc3RhdGljIGlubGluZSBib29sIGRsb2FkX2NoZWNrX3R5cGUoc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIsIHUzMiBmbGFnKQoreworCXJldHVybiAoc3B0ci0+ZHNfZmxhZ3MgJiBEU19TRUNUSU9OX1RZUEVfTUFTSykgPT0gZmxhZzsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19hbGxvY2F0aW9uKHN0cnVjdCBkb2ZmX3Njbmhkcl90ICpzcHRyKQoreworCXJldHVybiBzcHRyLT5kc19mbGFncyAmIERTX0FMTE9DQVRFX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkc19uZWVkc19kb3dubG9hZChzdHJ1Y3QgZG9mZl9zY25oZHJfdCAqc3B0cikKK3sKKwlyZXR1cm4gc3B0ci0+ZHNfZmxhZ3MgJiBEU19ET1dOTE9BRF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIGludCBkc19hbGlnbm1lbnQodTE2IGRzX2ZsYWdzKQoreworCXJldHVybiAxIDw8ICgoZHNfZmxhZ3MgPj4gRFNfQUxJR05NRU5UX1NISUZUKSAmIERTX1NFQ1RJT05fVFlQRV9NQVNLKTsKK30KKworCisjZW5kaWYgLyogX0RPRkZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2VjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvZ2V0c2VjdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjM3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9nZXRzZWN0aW9uLmMKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiBnZXRzZWN0aW9uLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9nZXRzZWN0aW9uLmg+CisjaW5jbHVkZSAiaGVhZGVyLmgiCisKKy8qCisgKiBFcnJvciBzdHJpbmdzCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHJlYWRzdHJtW10gPSB7ICJFcnJvciByZWFkaW5nICVzIGZyb20gaW5wdXQgc3RyZWFtIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgc2Vla1tdID0geyAiU2V0IGZpbGUgcG9zaXRpb24gdG8gJWQgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgaXNpeltdID0geyAiQmFkIGltYWdlIHBhY2tldCBzaXplICVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgZXJyX2NoZWNrc3VtW10gPSB7ICJDaGVja3N1bSBmYWlsZWQgb24gJXMiIH07CisKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9yZWxvY1tdID0geyAiZGxvYWRfZ2V0X3NlY3Rpb24gdW5hYmxlIHRvIHJlYWQiCisJICAgICJzZWN0aW9ucyBjb250YWluaW5nIHJlbG9jYXRpb24gZW50cmllcyIKK307CisKKyNpZiBCSVRTX1BFUl9BVSA+IEJJVFNfUEVSX0JZVEUKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9hbGxvY1tdID0geyAiU3ltcy0+ZGxvYWRfYWxsb2NhdGUoICVkICkgZmFpbGVkIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgc3RibFtdID0geyAiQmFkIHN0cmluZyB0YWJsZSBvZmZzZXQgIiBGTVRfVUkzMiB9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyoqKioqKioqKioqKioqKioqKioqKiBTVVBQT1JUIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgdW5wYWNrX3NlY19uYW1lCisgKgorICogUGFyYW1ldGVyczoKKyAqICBkbHRoaXMJCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoJc29mZnNldAkgICAgQnl0ZSBvZmZzZXQgaW50byB0aGUgc3RyaW5nIHRhYmxlCisgKiAgZHN0ICAgICAgICAgUGxhY2UgdG8gc3RvcmUgdGhlIGV4cGFuZGVkIHN0cmluZworICoKKyAqIEVmZmVjdDoKKyAqCVN0b3JlcyBhIHN0cmluZyBmcm9tIHRoZSBzdHJpbmcgdGFibGUgaW50byB0aGUgZGVzdGluYXRpb24sIGV4cGFuZGluZworICogaXQgaW4gdGhlIHByb2Nlc3MuICBSZXR1cm5zIGEgcG9pbnRlciBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RvcmVkCisgKiBzdHJpbmcgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyBjaGFyICp1bnBhY2tfc2VjX25hbWUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiBzb2Zmc2V0LCBjaGFyICpkc3QpCit7CisJdTggdG1wLCAqc3JjOworCisJaWYgKHNvZmZzZXQgPj0gZGx0aGlzLT5kZmlsZV9oZHIuZGZfc2NuX25hbWVfc2l6ZSkgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsIHN0YmwsIHNvZmZzZXQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc3JjID0gKHU4ICopIGRsdGhpcy0+c3RyX2hlYWQgKworCSAgICAoc29mZnNldCA+PiAoTE9HX0JJVFNfUEVSX0FVIC0gTE9HX0JJVFNfUEVSX0JZVEUpKTsKKwlpZiAoc29mZnNldCAmIDEpCisJCSpkc3QrKyA9ICpzcmMrKzsJLyogb25seSAxIGNoYXJhY3RlciBpbiBmaXJzdCB3b3JkICovCisJZG8geworCQl0bXAgPSAqc3JjKys7CisJCSpkc3QgPSAodG1wID4+IEJJVFNfUEVSX0JZVEUpCisJCSAgICBpZiAoISgqZHN0KyspKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoKCpkc3QrKyA9IHRtcCAmIEJZVEVfTUFTSykpOworCisJcmV0dXJuIGRzdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZXhwYW5kX3NlY19uYW1lcworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgZGx0aGlzCQlIYW5kbGUgZnJvbSBkbG9hZF9tb2R1bGVfb3BlbiBmb3IgdGhpcyBtb2R1bGUKKyAqCisgKiBFZmZlY3Q6CisgKiAgICBBbGxvY2F0ZXMgYSBidWZmZXIsIHVucGFja3MgYW5kIGNvcGllcyBzdHJpbmdzIGZyb20gc3RyaW5nIHRhYmxlIGludG8gaXQuCisgKiBTdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW50byBhIHN0YXRlIHZhcmlhYmxlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0YXRpYyB2b2lkIGV4cGFuZF9zZWNfbmFtZXMoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJY2hhciAqeHN0cmluZ3MsICpjdXJyLCAqbmV4dDsKKwl1MzIgeHNpemU7CisJdTE2IHNlYzsKKwlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2hwOworCS8qIGFzc3VtZSB3b3JzdC1jYXNlIHNpemUgcmVxdWlyZW1lbnQgKi8KKwl4c2l6ZSA9IGRsdGhpcy0+ZGZpbGVfaGRyLmRmX21heF9zdHJfbGVuICogZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2NuczsKKwl4c3RyaW5ncyA9IChjaGFyICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgeHNpemUpOworCWlmICh4c3RyaW5ncyA9PSBOVUxMKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgZXJyX2FsbG9jLCB4c2l6ZSk7CisJCXJldHVybjsKKwl9CisJZGx0aGlzLT54c3RyaW5ncyA9IHhzdHJpbmdzOworCS8qIEZvciBlYWNoIHNlYywgY29weSBhbmQgZXhwYW5kIGl0cyBuYW1lICovCisJY3VyciA9IHhzdHJpbmdzOworCWZvciAoc2VjID0gMDsgc2VjIDwgZGx0aGlzLT5kZmlsZV9oZHIuZGZfbm9fc2Nuczsgc2VjKyspIHsKKwkJc2hwID0gKHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICopJmRsdGhpcy0+c2VjdF9oZHJzW3NlY107CisJCW5leHQgPSB1bnBhY2tfc2VjX25hbWUoZGx0aGlzLCAqKHUzMiAqKSAmc2hwLT5uYW1lLCBjdXJyKTsKKwkJaWYgKG5leHQgPT0gTlVMTCkKKwkJCWJyZWFrOwkvKiBlcnJvciAqLworCQlzaHAtPm5hbWUgPSBjdXJyOworCQljdXJyID0gbmV4dDsKKwl9Cit9CisKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qKioqKioqKioqKioqKioqKioqKiogRVhQT1JURUQgRlVOQ1RJT05TICoqKioqKioqKioqKioqKioqKioqKiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9vcGVuCisgKgorICogUGFyYW1ldGVyczoKKyAqCW1vZHVsZQlUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICoJc3ltcwlIb3N0LXNpZGUgbWFsbG9jL2ZyZWUgYW5kIGVycm9yIHJlcG9ydGluZyBmdW5jdGlvbnMuCisgKgkJCU90aGVyIG1ldGhvZHMgYXJlIHVudXNlZC4KKyAqCisgKiBFZmZlY3Q6CisgKglSZWFkcyBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGR5bmFtaWMgbG9hZGVyIG1vZHVsZSB1c2luZyB0aGUKKyAgICBzcGVjaWZpZWQKKyAqIHN0cmVhbSBvYmplY3QsIGFuZCByZXR1cm5zIGEgaGFuZGxlIGZvciB0aGUgbW9kdWxlIGluZm9ybWF0aW9uLiAgVGhpcworICogaGFuZGxlIG1heSBiZSB1c2VkIGluIHN1YnNlcXVlbnQgcXVlcnkgY2FsbHMgdG8gb2J0YWluIGluZm9ybWF0aW9uCisgKiBjb250YWluZWQgaW4gdGhlIG1vZHVsZS4KKyAqCisgKiBSZXR1cm5zOgorICoJTlVMTCBpZiBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZCwgb3RoZXJ3aXNlIGEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlCisgKiBpbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCAqZGxvYWRfbW9kdWxlX29wZW4oc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkJCSAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICpzeW1zKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOwkvKiBpbnRlcm5hbCBzdGF0ZSBmb3IgdGhpcyBjYWxsICovCisJdW5zaWduZWQgKmRwLCBzejsKKwl1MzIgc2VjX3N0YXJ0OworI2lmIEJJVFNfUEVSX0FVIDw9IEJJVFNfUEVSX0JZVEUKKwl1MTYgc2VjOworI2VuZGlmCisKKwkvKiBDaGVjayB0aGF0IG1hbmRhdG9yeSBhcmd1bWVudHMgYXJlIHByZXNlbnQgKi8KKwlpZiAoIW1vZHVsZSB8fCAhc3ltcykgeworCQlpZiAoc3ltcyAhPSBOVUxMKQorCQkJZGxvYWRfc3ltc19lcnJvcihzeW1zLCAiUmVxdWlyZWQgcGFyYW1ldGVyIGlzIE5VTEwiKTsKKworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkbHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopCisJICAgIHN5bXMtPmRsb2FkX2FsbG9jYXRlKHN5bXMsIHNpemVvZihzdHJ1Y3QgZGxvYWRfc3RhdGUpKTsKKwlpZiAoIWRsdGhpcykgeworCQkvKiBub3QgZW5vdWdoIHN0b3JhZ2UgKi8KKwkJZGxvYWRfc3ltc19lcnJvcihzeW1zLCAiQ2FuJ3QgYWxsb2NhdGUgbW9kdWxlIGluZm8iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogY2xlYXIgb3VyIGludGVybmFsIHN0YXRlICovCisJZHAgPSAodW5zaWduZWQgKilkbHRoaXM7CisJZm9yIChzeiA9IHNpemVvZihzdHJ1Y3QgZGxvYWRfc3RhdGUpIC8gc2l6ZW9mKHVuc2lnbmVkKTsKKwkgICAgIHN6ID4gMDsgc3ogLT0gMSkKKwkJKmRwKysgPSAwOworCisJZGx0aGlzLT5zdHJtID0gbW9kdWxlOworCWRsdGhpcy0+bXlzeW0gPSBzeW1zOworCisJLyogcmVhZCBpbiB0aGUgZG9mZiBpbWFnZSBhbmQgc3RvcmUgaW4gb3VyIHN0YXRlIHZhcmlhYmxlICovCisJZGxvYWRfaGVhZGVycyhkbHRoaXMpOworCisJaWYgKCFkbHRoaXMtPmRsb2FkX2VycmNvdW50KQorCQlkbG9hZF9zdHJpbmdzKGRsdGhpcywgdHJ1ZSk7CisKKwkvKiBza2lwIGFoZWFkIHBhc3QgdGhlIHVucmVhZCBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGFibGUgKi8KKwlzZWNfc3RhcnQgPSBzaXplb2Yoc3RydWN0IGRvZmZfZmlsZWhkcl90KSArCisJICAgIHNpemVvZihzdHJ1Y3QgZG9mZl92ZXJpZnlfcmVjX3QpICsKKwkgICAgQllURV9UT19IT1NUKERPRkZfQUxJR04oZGx0aGlzLT5kZmlsZV9oZHIuZGZfc3RydGFiX3NpemUpKTsKKworCWlmIChkbHRoaXMtPnN0cm0tPnNldF9maWxlX3Bvc24oZGx0aGlzLT5zdHJtLCBzZWNfc3RhcnQpICE9IDApIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCBzZWVrLCBzZWNfc3RhcnQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWRsdGhpcy0+ZGxvYWRfZXJyY291bnQpCisJCWRsb2FkX3NlY3Rpb25zKGRsdGhpcyk7CisKKwlpZiAoZGx0aGlzLT5kbG9hZF9lcnJjb3VudCkgeworCQlkbG9hZF9tb2R1bGVfY2xvc2UoZGx0aGlzKTsJLyogZXJyb3JzLCBibG93IG9mZiBvdXIgc3RhdGUgKi8KKwkJZGx0aGlzID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorI2lmIEJJVFNfUEVSX0FVID4gQklUU19QRVJfQllURQorCS8qIEV4cGFuZCBhbGwgc2VjdGlvbiBuYW1lcyBmcm9tIHRoZSBzdHJpbmcgdGFibGUgaW50byB0aGUgKi8KKwkvKiBzdGF0ZSB2YXJpYWJsZSwgYW5kIGNvbnZlcnQgc2VjdGlvbiBuYW1lcyBmcm9tIGEgcmVsYXRpdmUgKi8KKwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IHRvIGEgcG9pbnRlcnMgdG8gdGhlIGV4cGFuZGVkIHN0cmluZy4gKi8KKwlleHBhbmRfc2VjX25hbWVzKGRsdGhpcyk7CisjZWxzZQorCS8qIENvbnZlcnQgc2VjdGlvbiBuYW1lcyBmcm9tIGEgcmVsYXRpdmUgc3RyaW5nIHRhYmxlIG9mZnNldCAqLworCS8qIHRvIGEgcG9pbnRlciBpbnRvIHRoZSBzdHJpbmcgdGFibGUuICovCisJZm9yIChzZWMgPSAwOyBzZWMgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOyBzZWMrKykgeworCQlzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2hwID0KKwkJICAgIChzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqKSZkbHRoaXMtPnNlY3RfaGRyc1tzZWNdOworCQlzaHAtPm5hbWUgPSBkbHRoaXMtPnN0cl9oZWFkICsgKih1MzIgKikgJnNocC0+bmFtZTsKKwl9CisjZW5kaWYKKworCXJldHVybiBkbHRoaXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvCisgKgorICogUGFyYW1ldGVyczoKKyAqICBtaW5mbwkJSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKglzZWN0aW9uX25hbWUJUG9pbnRlciB0byB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIHNlY3Rpb24gZGVzaXJlZAorICoJc2VjdGlvbl9pbmZvCUFkZHJlc3Mgb2YgYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIHBvaW50ZXIgdG8gYmUKKyAqCQkJaW5pdGlhbGl6ZWQKKyAqCisgKiBFZmZlY3Q6CisgKglGaW5kcyB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW4gdGhlIG1vZHVsZSBpbmZvcm1hdGlvbiwgYW5kIGluaXRpYWxpemVzCisgKiB0aGUgcHJvdmlkZWQgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gcG9pbnRlci4KKyAqCisgKiBSZXR1cm5zOgorICoJdHJ1ZSBmb3Igc3VjY2VzcywgZmFsc2UgZm9yIHNlY3Rpb24gbm90IGZvdW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworaW50IGRsb2FkX2dldF9zZWN0aW9uX2luZm8odm9pZCAqbWluZm8sIGNvbnN0IGNoYXIgKnNlY3Rpb25fbmFtZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICoqY29uc3Qgc2VjdGlvbl9pbmZvKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICpzaHA7CisJdTE2IHNlYzsKKworCWRsdGhpcyA9IChzdHJ1Y3QgZGxvYWRfc3RhdGUgKiltaW5mbzsKKwlpZiAoIWRsdGhpcykKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChzZWMgPSAwOyBzZWMgPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zY25zOyBzZWMrKykgeworCQlzaHAgPSAoc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKikmZGx0aGlzLT5zZWN0X2hkcnNbc2VjXTsKKwkJaWYgKHN0cmNtcChzZWN0aW9uX25hbWUsIHNocC0+bmFtZSkgPT0gMCkgeworCQkJKnNlY3Rpb25faW5mbyA9IHNocDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElQSF9TSVpFIChzaXplb2Yoc3RydWN0IGltYWdlX3BhY2tldF90KSAtIHNpemVvZih1MzIpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8JCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoJc2VjdGlvbl9pbmZvCVBvaW50ZXIgdG8gYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIGZvciB0aGUgZGVzaXJlZAorICoJCQlzZWN0aW9uCisgKglzZWN0aW9uX2RhdGEJQnVmZmVyIHRvIGNvbnRhaW4gdGhlIHNlY3Rpb24gaW5pdGlhbGl6ZWQgZGF0YQorICoKKyAqIEVmZmVjdDoKKyAqCUNvcGllcyB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBzZWN0aW9uIGludG8gdGhlCisgKiBzdXBwbGllZCBidWZmZXIuCisgKgorICogUmV0dXJuczoKKyAqCXRydWUgZm9yIHN1Y2Nlc3MsIGZhbHNlIGZvciBzZWN0aW9uIG5vdCBmb3VuZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2ludCBkbG9hZF9nZXRfc2VjdGlvbih2b2lkICptaW5mbywKKwkJICAgICAgY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3Rpb25faW5mbywKKwkJICAgICAgdm9pZCAqc2VjdGlvbl9kYXRhKQoreworCXN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzOworCXUzMiBwb3M7CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNwdHIgPSBOVUxMOworCXMzMiBuaXA7CisJc3RydWN0IGltYWdlX3BhY2tldF90IGlwYWNrZXQ7CisJczMyIGlwc2l6ZTsKKwl1MzIgY2hlY2tzOworCXM4ICpkZXN0ID0gKHM4ICopIHNlY3Rpb25fZGF0YTsKKworCWRsdGhpcyA9IChzdHJ1Y3QgZGxvYWRfc3RhdGUgKiltaW5mbzsKKwlpZiAoIWRsdGhpcykKKwkJcmV0dXJuIGZhbHNlOworCXNwdHIgPSAoc3RydWN0IGRvZmZfc2NuaGRyX3QgKilzZWN0aW9uX2luZm87CisJaWYgKHNwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogc2tpcCBhaGVhZCB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IHBhY2tldCAqLworCXBvcyA9IEJZVEVfVE9fSE9TVChET0ZGX0FMSUdOKCh1MzIpIHNwdHItPmRzX2ZpcnN0X3BrdF9vZmZzZXQpKTsKKwlpZiAoZGx0aGlzLT5zdHJtLT5zZXRfZmlsZV9wb3NuKGRsdGhpcy0+c3RybSwgcG9zKSAhPSAwKSB7CisJCWRsb2FkX2Vycm9yKGRsdGhpcywgc2VlaywgcG9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5pcCA9IHNwdHItPmRzX25pcGFja3M7CisJd2hpbGUgKChuaXAgLT0gMSkgPj0gMCkgewkvKiBmb3IgZWFjaCBwYWNrZXQgKi8KKwkJLyogZ2V0IHRoZSBmaXhlZCBoZWFkZXIgYml0cyAqLworCQlpZiAoZGx0aGlzLT5zdHJtLT5yZWFkX2J1ZmZlcihkbHRoaXMtPnN0cm0sICZpcGFja2V0LAorCQkJCQkgICAgICBJUEhfU0laRSkgIT0gSVBIX1NJWkUpIHsKKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywgcmVhZHN0cm0sICJpbWFnZSBwYWNrZXQiKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkvKiByZW9yZGVyIHRoZSBoZWFkZXIgaWYgbmVlZCBiZSAqLworCQlpZiAoZGx0aGlzLT5yZW9yZGVyX21hcCkKKwkJCWRsb2FkX3Jlb3JkZXIoJmlwYWNrZXQsIElQSF9TSVpFLCBkbHRoaXMtPnJlb3JkZXJfbWFwKTsKKworCQkvKiBOb3cgcmVhZCB0aGUgcGFja2V0IGltYWdlIGJpdHMuIE5vdGU6IHJvdW5kIHRoZSBzaXplIHVwIHRvCisJCSAqIHRoZSBuZXh0IG11bHRpcGxlIG9mIDQgYnl0ZXM7IHRoaXMgaXMgd2hhdCBjaGVja3N1bQorCQkgKiByb3V0aW5lcyB3YW50LiAqLworCQlpcHNpemUgPSBCWVRFX1RPX0hPU1QoRE9GRl9BTElHTihpcGFja2V0LnBhY2tldF9zaXplKSk7CisJCWlmIChpcHNpemUgPiBCWVRFX1RPX0hPU1QoSU1BR0VfUEFDS0VUX1NJWkUpKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGlzaXosIGlwc2l6ZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKGRsdGhpcy0+c3RybS0+cmVhZF9idWZmZXIKKwkJICAgIChkbHRoaXMtPnN0cm0sIGRlc3QsIGlwc2l6ZSkgIT0gaXBzaXplKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIHJlYWRzdHJtLCAiaW1hZ2UgcGFja2V0Iik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJLyogcmVvcmRlciB0aGUgYnl0ZXMgaWYgbmVlZCBiZSAqLworI2lmICFkZWZpbmVkKF9CSUdfRU5ESUFOKSB8fCAoVEFSR0VUX0FVX0JJVFMgPiAxNikKKwkJaWYgKGRsdGhpcy0+cmVvcmRlcl9tYXApCisJCQlkbG9hZF9yZW9yZGVyKGRlc3QsIGlwc2l6ZSwgZGx0aGlzLT5yZW9yZGVyX21hcCk7CisKKwkJY2hlY2tzID0gZGxvYWRfY2hlY2tzdW0oZGVzdCwgaXBzaXplKTsKKyNlbHNlCisJCWlmIChkbHRoaXMtPmRmaWxlX2hkci5kZl9ieXRlX3Jlc2h1ZmZsZSAhPQorCQkgICAgVEFSR0VUX09SREVSKFJFT1JERVJfTUFQKEJZVEVfUkVTSFVGRkxFX1ZBTFVFKSkpIHsKKwkJCS8qIHB1dCBpbWFnZSBieXRlcyBpbiBiaWctZW5kaWFuIG9yZGVyLCBub3QgUEMgb3JkZXIgKi8KKwkJCWRsb2FkX3Jlb3JkZXIoZGVzdCwgaXBzaXplLAorCQkJCSAgICAgIFRBUkdFVF9PUkRFUihkbHRoaXMtPgorCQkJCQkJZGZpbGVfaGRyLmRmX2J5dGVfcmVzaHVmZmxlKSk7CisJCX0KKyNpZiBUQVJHRVRfQVVfQklUUyA+IDgKKwkJY2hlY2tzID0gZGxvYWRfcmV2ZXJzZV9jaGVja3N1bTE2KGRlc3QsIGlwc2l6ZSk7CisjZWxzZQorCQljaGVja3MgPSBkbG9hZF9yZXZlcnNlX2NoZWNrc3VtKGRlc3QsIGlwc2l6ZSk7CisjZW5kaWYKKyNlbmRpZgorCQljaGVja3MgKz0gZGxvYWRfY2hlY2tzdW0oJmlwYWNrZXQsIElQSF9TSVpFKTsKKworCQkvKiBOWUk6IHVuYWJsZSB0byBoYW5kbGUgcmVsb2NhdGlvbiBlbnRyaWVzIGhlcmUuICBSZWxvYworCQkgKiBlbnRyaWVzIHJlZmVycmluZyB0byBmaWVsZHMgdGhhdCBzcGFuIHRoZSBwYWNrZXQgYm91bmRhcmllcworCQkgKiBtYXkgcmVzdWx0IGluIHBhY2tldHMgb2Ygc2l6ZXMgdGhhdCBhcmUgbm90IG11bHRpcGxlIG9mCisJCSAqIDQgYnl0ZXMuIE91ciBjaGVja3N1bSBpbXBsZW1lbnRhdGlvbiB3b3JrcyBvbiAzMi1iaXQgd29yZHMKKwkJICogb25seS4gKi8KKwkJaWYgKGlwYWNrZXQubnVtX3JlbG9jcyAhPSAwKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGVycl9yZWxvYywgaXBzaXplKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCWlmICh+Y2hlY2tzKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsIGVycl9jaGVja3N1bSwgImltYWdlIHBhY2tldCIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLypBZHZhbmNlIGRlc3RpbmF0aW9uIHB0ciBieSB0aGUgc2l6ZSBvZiB0aGUganVzdC1yZWFkIHBhY2tldCAqLworCQlkZXN0ICs9IGlwc2l6ZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9jbG9zZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8JCUhhbmRsZSBmcm9tIGRsb2FkX21vZHVsZV9vcGVuIGZvciB0aGlzIG1vZHVsZQorICoKKyAqIEVmZmVjdDoKKyAqCVJlbGVhc2VzIGFueSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlIGhhbmRsZS4gIE9uIHJldHVybiwKKyAqIHRoZSBtb2R1bGUgaGFuZGxlIGlzIGludmFsaWQuCisgKgorICogUmV0dXJuczoKKyAqCVplcm8gZm9yIHN1Y2Nlc3MuIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4KKyAqIEluZGl2aWR1YWwgZXJyb3JzIGFyZSByZXBvcnRlZCB1c2luZyBzeW1zLT5lcnJvcl9yZXBvcnQoKSwgd2hlcmUgc3ltcyB3YXMKKyAqIGFuIGFyZ3VtZW50IHRvIGRsb2FkX21vZHVsZV9vcGVuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwordm9pZCBkbG9hZF9tb2R1bGVfY2xvc2Uodm9pZCAqbWluZm8pCit7CisJc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXM7CisKKwlkbHRoaXMgPSAoc3RydWN0IGRsb2FkX3N0YXRlICopbWluZm87CisJaWYgKCFkbHRoaXMpCisJCXJldHVybjsKKworCWlmIChkbHRoaXMtPnN0cl9oZWFkKQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQlkbHRoaXMtPnN0cl9oZWFkKTsKKworCWlmIChkbHRoaXMtPnNlY3RfaGRycykKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJZGx0aGlzLT5zZWN0X2hkcnMpOworCisjaWYgQklUU19QRVJfQVUgPiBCSVRTX1BFUl9CWVRFCisJaWYgKGRsdGhpcy0+eHN0cmluZ3MpCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCWRsdGhpcy0+eHN0cmluZ3MpOworCisjZW5kaWYKKworCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgZGx0aGlzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2hlYWRlci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvaGVhZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1MGExNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9oZWFkZXIuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogaGVhZGVyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2RlZmluZSBETF9TVFJDTVAgIHN0cmNtcAorCisvKiBtYXhpbXVtIHBhcmVudGhlc2lzIG5lc3RpbmcgaW4gcmVsb2NhdGlvbiBzdGFjayBleHByZXNzaW9ucyAqLworI2RlZmluZSBTVEFUSUNfRVhQUl9TVEtfU0laRSAxMAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImRvZmYuaCIKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaD4KKyNpbmNsdWRlICJwYXJhbXMuaCIKKyNpbmNsdWRlICJkbG9hZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInJlbG9jX3RhYmxlLmgiCisKKy8qCisgKiBQbGF1c2liaWxpdHkgbGltaXRzCisgKgorICogVGhlc2UgbGltaXRzIGFyZSBpbXBvc2VkIHVwb24gdGhlIGlucHV0IERPRkYgZmlsZSBhcyBhIGNoZWNrIGZvciB2YWxpZGl0eS4KKyAqIFRoZXkgYXJlIGhhcmQgbGltaXRzLCBpbiB0aGF0IHRoZSBsb2FkIHdpbGwgZmFpbCBpZiB0aGV5IGFyZSBleGNlZWRlZC4KKyAqIFRoZSBudW1iZXJzIHNlbGVjdGVkIGFyZSBhcmJpdHJhcnksIGluIHRoYXQgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBkb2VzCisgKiBub3QgcmVxdWlyZSB0aGVzZSBsaW1pdHMuCisgKi8KKworLyogbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gc3RyaW5nIHRhYmxlICovCisjZGVmaW5lIE1BWF9SRUFTT05BQkxFX1NUUklOR1RBQiAoMHgxMDAwMDApCisvKiBtYXhpbXVtIG51bWJlciBvZiBjb2RlLGRhdGEsZXRjLiBzZWN0aW9ucyAqLworI2RlZmluZSBNQVhfUkVBU09OQUJMRV9TRUNUSU9OUyAoMjAwKQorLyogbWF4aW11bSBudW1iZXIgb2YgbGlua2VyIHN5bWJvbHMgKi8KKyNkZWZpbmUgTUFYX1JFQVNPTkFCTEVfU1lNQk9MUyAoMTAwMDAwKQorCisvKiBzaGlmdCBjb3VudCB0byBhbGlnbiBGX0JJRyB3aXRoIERMT0FEX0xJVFRMRSAqLworI2RlZmluZSBBTElHTl9DT0ZGX0VORElBTk5FU1MgNworI2RlZmluZSBFTkRJQU5ORVNTX01BU0sgKERGX0JZVEVfT1JERVIgPj4gQUxJR05fQ09GRl9FTkRJQU5ORVNTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvbW9kdWxlX2xpc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL21vZHVsZV9saXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNmJiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL21vZHVsZV9saXN0LmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBkc3BicmlkZ2UvbXB1X2RyaXZlci9zcmMvZHlubG9hZC9tb2R1bGVfbGlzdC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKgorICogVGhpcyBDIGhlYWRlciBmaWxlIGdpdmVzIHRoZSBsYXlvdXQgb2YgdGhlIGRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYnkgdGhlCisgKiBkeW5hbWljIGxvYWRlciB0byBkZXNjcmliZSB0aGUgc2V0IG9mIG1vZHVsZXMgbG9hZGVkIGludG8gdGhlIERTUC4KKyAqCisgKiBMaW5rZWQgTGlzdCBTdHJ1Y3R1cmU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5lZCBoZXJlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0LiAgVGhlIGxpc3QKKyAqIHJlcHJlc2VudHMgdGhlIHNldCBvZiBtb2R1bGVzIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSBEU1AgbWVtb3J5LgorICogVGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0IGlzIGEgaGVhZGVyIHJlY29yZCB3aGljaCBjb250YWlucyBhIGZsYWcKKyAqIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGxpc3QuICBUaGUgcmVzdCBvZiB0aGUgZW50cmllcyBpbiB0aGUgbGlzdAorICogYXJlIG1vZHVsZSByZWNvcmRzLgorICoKKyAqIEdsb2JhbCBzeW1ib2wgIF9ETE1vZHVsZXMgZGVzaWduYXRlcyB0aGUgZmlyc3QgcmVjb3JkIGluIHRoZSBsaXN0IChpLmUuIHRoZQorICogaGVhZGVyIHJlY29yZCkuICBUaGlzIHN5bWJvbCBtdXN0IGJlIGRlZmluZWQgaW4gYW55IHByb2dyYW0gdGhhdCB3aXNoZXMgdG8KKyAqIHVzZSBETEx2aWV3IHBsdWctaW4uCisgKgorICogU3RyaW5nIFJlcHJlc2VudGF0aW9uOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlIHN0cmluZyBuYW1lcyBvZiB0aGUgbW9kdWxlIGFuZCBpdHMgc2VjdGlvbnMgYXJlIHN0b3JlZCBpbiBhIGJsb2NrIG9mCisgKiBtZW1vcnkgd2hpY2ggZm9sbG93cyB0aGUgbW9kdWxlIHJlY29yZCBpdHNlbGYuICBUaGUgc3RyaW5ncyBhcmUgb3JkZXJlZDoKKyAqIG1vZHVsZSBuYW1lIGZpcnN0LCBmb2xsb3dlZCBieSBzZWN0aW9uIG5hbWVzIGluIG9yZGVyIGZyb20gdGhlIGZpcnN0CisgKiBzZWN0aW9uIHRvIHRoZSBsYXN0LiAgU3RyaW5nIG5hbWVzIGFyZSB0aWdodGx5IHBhY2tlZCBhcnJheXMgb2YgOC1iaXQKKyAqIGNoYXJhY3RlcnMgKHR3byBjaGFyYWN0ZXJzIHBlciAxNi1iaXQgd29yZCBvbiB0aGUgQzU1eCkuICBTdHJpbmdzIGFyZQorICogemVyby1ieXRlLXRlcm1pbmF0ZWQuCisgKgorICogQ3JlYXRpbmcgYW5kIHVwZGF0aW5nIHRoZSBsaXN0OgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBvbiBsb2FkaW5nIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBEU1AgbWVtb3J5IHRoZSBkeW5hbWljIGxvYWRlciBpbnNlcnRzIGEKKyAqIG5ldyBtb2R1bGUgcmVjb3JkIGFzIHRoZSBmaXJzdCBtb2R1bGUgcmVjb3JkIGluIHRoZSBsaXN0LiAgVGhlIGZpZWxkcyBvZgorICogdGhpcyBtb2R1bGUgcmVjb3JkIGFyZSBpbml0aWFsaXplZCB0byByZWZsZWN0IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBtb2R1bGUuCisgKiBUaGUgZHluYW1pYyBsb2FkZXIgZG9lcyBOT1QgaW5jcmVtZW50IHRoZSBmbGFnL2NvdW50ZXIgaW4gdGhlIGxpc3QncyBoZWFkZXIKKyAqIHJlY29yZC4KKyAqCisgKiBVcG9uIHVubG9hZGluZyBhIG1vZHVsZSBmcm9tIHRoZSBEU1AgbWVtb3J5IHRoZSBkeW5hbWljIGxvYWRlciByZW1vdmVzIHRoZQorICogbW9kdWxlJ3MgcmVjb3JkIGZyb20gdGhpcyBsaXN0LiAgVGhlIGR5bmFtaWMgbG9hZGVyIGFsc28gaW5jcmVtZW50cyB0aGUKKyAqIGZsYWcvY291bnRlciBpbiB0aGUgbGlzdCdzIGhlYWRlciByZWNvcmQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbgorICogY2hhbmdlZC4KKyAqLworCisjaWZuZGVmIF9NT0RVTEVfTElTVF9IXworI2RlZmluZSBfTU9EVUxFX0xJU1RfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEdsb2JhbCBwb2ludGVyIHRvIHRoZSBtb2R1bGVzX2hlYWRlciBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTU9EVUxFU19IRUFERVIgIl9ETE1vZHVsZXMiCisjZGVmaW5lIE1PRFVMRVNfSEVBREVSX05PX1VOREVSU0NPUkUgIkRMTW9kdWxlcyIKKworLyogSW5pdGlhbCB2ZXJzaW9uIG51bWJlciAqLworI2RlZmluZSBJTklUX1ZFUlNJT04gMQorCisvKiBWZXJpZmljYXRpb24gbnVtYmVyIC0tIHRvIGJlIHJlY29yZGVkIGluIGVhY2ggbW9kdWxlIHJlY29yZCAqLworI2RlZmluZSBWRVJJRklDQVRJT04gMHg3OQorCisvKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IGRsbF9tb2R1bGU7CitzdHJ1Y3QgZGxsX3NlY3Q7CisKKy8qIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCBpcyB0aGUgbW9kdWxlc19oZWFkZXIgcmVjb3JkOworICogaXRzIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBnbG9iYWwgX0RMTW9kdWxlcyBwb2ludGVyICovCitzdHJ1Y3QgbW9kdWxlc19oZWFkZXIgeworCisJLyoKKwkgKiBBZGRyZXNzIG9mIHRoZSBmaXJzdCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUgbGlzdCBvciBOVUxMLgorCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMgaXMgYSB3b3JkIGFkZHJlc3MgKEM1NXggZGF0YSBpcworCSAqIHdvcmQtYWRkcmVzc2FibGUpCisJICovCisJdTMyIGZpcnN0X21vZHVsZTsKKworCS8qIENvbWJpbmVkIHN0b3JhZ2Ugc2l6ZSAoaW4gdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXRzKSBvZiB0aGUKKwkgKiBkbGxfbW9kdWxlIHJlY29yZCB3aGljaCBmb2xsb3dzIHRoaXMgaGVhZGVyIHJlY29yZCwgb3IgemVybworCSAqIGlmIHRoZSBsaXN0IGlzIGVtcHR5LiAgVGhpcyBzaXplIGluY2x1ZGVzIHRoZSBtb2R1bGUncyBzdHJpbmcgdGFibGUuCisJICogTm90ZTogZm9yIEM1NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZCAqLworCXUxNiBmaXJzdF9tb2R1bGVfc2l6ZTsKKworCS8qIENvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgYSBtb2R1bGUgcmVjb3JkIGlzIHJlbW92ZWQgZnJvbQorCSAqIHRoZSBsaXN0ICovCisJdTE2IHVwZGF0ZV9mbGFnOworCit9OworCisvKiBmb3IgZWFjaCAzMi1iaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBmaXJzdCwgd2hvc2UgYml0cyBhcmU6CisgKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYtYml0IHZhbHVlcyAqLworLyogc3dhcHBpbmcgYml0bWFwIGZvciB0eXBlIG1vZHVsZXNfaGVhZGVyICovCisjZGVmaW5lIE1PRFVMRVNfSEVBREVSX0JJVE1BUCAweDIKKworLyogaW5mb3JtYXRpb24gcmVjb3JkZWQgYWJvdXQgZWFjaCBzZWN0aW9uIGluIGEgbW9kdWxlICovCitzdHJ1Y3QgZGxsX3NlY3QgeworCisJLyogTG9hZC10aW1lIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uCisJICogTm90ZTogZm9yIEM1NXggdGhpcyBpcyBhIGJ5dGUgYWRkcmVzcyBmb3IgcHJvZ3JhbSBzZWN0aW9ucywgYW5kCisJICogYSB3b3JkIGFkZHJlc3MgZm9yIGRhdGEgc2VjdGlvbnMuICBDNTV4IHByb2dyYW0gbWVtb3J5IGlzCisJICogYnl0ZS1hZGRyZXNzYWJsZSwgd2hpbGUgZGF0YSBtZW1vcnkgaXMgd29yZC1hZGRyZXNzYWJsZS4gKi8KKwl1MzIgc2VjdF9sb2FkX2FkcjsKKworCS8qIFJ1bi10aW1lIGFkZHJlc3Mgb2YgdGhlIHNlY3Rpb24uCisJICogTm90ZSAxOiBmb3IgQzU1eCB0aGlzIGlzIGEgYnl0ZSBhZGRyZXNzIGZvciBwcm9ncmFtIHNlY3Rpb25zLCBhbmQKKwkgKiBhIHdvcmQgYWRkcmVzcyBmb3IgZGF0YSBzZWN0aW9ucy4KKwkgKiBOb3RlIDI6IGZvciBDNTV4IHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhpcyBmaWVsZCBpbmRpY2F0ZQorCSAqIHRoZSBzZWN0aW9uIHR5cGU6ICcwMCcgZm9yIGEgY29kZSBzZWN0aW9uLCAnMTEnIGZvciBhIGRhdGEgc2VjdGlvbgorCSAqIChDNTUgYWRkcmVzc2VzIGFyZSByZWFsbHkgb25seSAyNC1iaXRzIHdpZGUpLiAqLworCXUzMiBzZWN0X3J1bl9hZHI7CisKK307CisKKy8qIHRoZSByZXN0IG9mIHRoZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBtb2R1bGUgcmVjb3JkcyAqLworc3RydWN0IGRsbF9tb2R1bGUgeworCisJLyogQWRkcmVzcyBvZiB0aGUgbmV4dCBkbGxfbW9kdWxlIHJlY29yZCBpbiB0aGUgbGlzdCwgb3IgMCBpZiB0aGlzIGlzCisJICogdGhlIGxhc3QgcmVjb3JkIGluIHRoZSBsaXN0LgorCSAqIE5vdGU6IGZvciBDNTV4IHRoaXMgaXMgYSB3b3JkIGFkZHJlc3MgKEM1NXggZGF0YSBpcworCSAqIHdvcmQtYWRkcmVzc2FibGUpICovCisJdTMyIG5leHRfbW9kdWxlOworCisJLyogQ29tYmluZWQgc3RvcmFnZSBzaXplIChpbiB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdHMpIG9mIHRoZQorCSAqIGRsbF9tb2R1bGUgcmVjb3JkIHdoaWNoIGZvbGxvd3MgdGhpcyBvbmUsIG9yIHplcm8gaWYgdGhpcyBpcyB0aGUKKwkgKiBsYXN0IHJlY29yZCBpbiB0aGUgbGlzdC4gIFRoaXMgc2l6ZSBpbmNsdWRlcyB0aGUgbW9kdWxlJ3Mgc3RyaW5nCisJICogdGFibGUuCisJICogTm90ZTogZm9yIEM1NXggdGhlIHVuaXQgaXMgYSAxNi1iaXQgd29yZC4gKi8KKwl1MTYgbmV4dF9tb2R1bGVfc2l6ZTsKKworCS8qIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB0b29saW5nOyBzZXQgdG8gSU5JVF9WRVJTSU9OIGZvciBQaGFzZSAxICovCisJdTE2IHZlcnNpb247CisKKwkvKiB0aGUgdmVyaWZpY2F0aW9uIHdvcmQ7IHNldCB0byBWRVJJRklDQVRJT04gKi8KKwl1MTYgdmVyaWZpY2F0aW9uOworCisJLyogTnVtYmVyIG9mIHNlY3Rpb25zIGluIHRoZSBzZWN0cyBhcnJheSAqLworCXUxNiBudW1fc2VjdHM7CisKKwkvKiBNb2R1bGUncyAidW5pcXVlIiBpZDsgY29weSBvZiB0aGUgdGltZXN0YW1wIGZyb20gdGhlIGhvc3QKKwkgKiBDT0ZGIGZpbGUgKi8KKwl1MzIgdGltZXN0YW1wOworCisJLyogQXJyYXkgb2YgbnVtX3NlY3RzIGVsZW1lbnRzIG9mIHRoZSBtb2R1bGUncyBzZWN0aW9uIHJlY29yZHMgKi8KKwlzdHJ1Y3QgZGxsX3NlY3Qgc2VjdHNbMV07Cit9OworCisvKiBmb3IgZWFjaCAzMiBiaXRzIGluIGFib3ZlIHN0cnVjdHVyZSwgYSBiaXRtYXAsIExTQiBmaXJzdCwgd2hvc2UgYml0cyBhcmU6CisgKiAwID0+IGEgMzItYml0IHZhbHVlLCAxID0+IDIgMTYtYml0IHZhbHVlcyAqLworI2RlZmluZSBETExfTU9EVUxFX0JJVE1BUCAweDYJLyogc3dhcHBpbmcgYml0bWFwIGZvciB0eXBlIGRsbF9tb2R1bGUgKi8KKworI2VuZGlmIC8qIF9NT0RVTEVfTElTVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcGFyYW1zLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9wYXJhbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk3ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcGFyYW1zLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBwYXJhbXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBob3N0IGFuZCB0YXJnZXQgcHJvcGVydGllcyBmb3IgYWxsIG1hY2hpbmVzCisgKiBzdXBwb3J0ZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyLiAgVG8gYmUgdGVkaW91cy4uLgorICoKKyAqIGhvc3Q6IHRoZSBtYWNoaW5lIG9uIHdoaWNoIHRoZSBkeW5hbWljIGxvYWRlciBydW5zCisgKiB0YXJnZXQ6IHRoZSBtYWNoaW5lIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIGxvYWRpbmcKKyAqCisgKiBIb3N0IGFuZCB0YXJnZXQgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUsIGRlcGVuZGluZyB1cG9uIHRoZSBwYXJ0aWN1bGFyCisgKiB1c2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCQkJCQkJCUhvc3QgUHJvcGVydGllcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKyNkZWZpbmUgQklUU19QRVJfQllURSA4CQkvKiBiaXRzIGluIHRoZSBzdGFuZGFyZCBQQy9TVU4gYnl0ZSAqLworI2RlZmluZSBMT0dfQklUU19QRVJfQllURSAzCS8qIGxvZyBiYXNlIDIgb2Ygc2FtZSAqLworI2RlZmluZSBCWVRFX01BU0sgKCgxVTw8QklUU19QRVJfQllURSktMSkKKworI2lmIGRlZmluZWQoX19UTVMzMjBDNTVYX18pIHx8IGRlZmluZWQoX1RNUzMyMEM1WFgpCisjZGVmaW5lIEJJVFNfUEVSX0FVIDE2CisjZGVmaW5lIExPR19CSVRTX1BFUl9BVSA0CisgLyogdXNlIHRoaXMgcHJpbnQgc3RyaW5nIGluIGVycm9yIG1lc3NhZ2VzIGZvciB1aW50MzJfdCAqLworI2RlZmluZSBGTVRfVUkzMiAiMHglbHgiCisjZGVmaW5lIEZNVDhfVUkzMiAiJTA4bHgiCS8qIHNhbWUgYnV0IG5vIDB4LCBmaXhlZCB3aWR0aCBmaWVsZCAqLworI2Vsc2UKKy8qIGJpdHMgaW4gdGhlIHNtYWxsZXN0IGFkZHJlc3NhYmxlIGRhdGEgc3RvcmFnZSB1bml0ICovCisjZGVmaW5lIEJJVFNfUEVSX0FVIDgKKy8qIGxvZyBiYXNlIDIgb2YgdGhlIHNhbWU7IHVzZWZ1bCBmb3Igc2hpZnQgY291bnRzICovCisjZGVmaW5lIExPR19CSVRTX1BFUl9BVSAzCisjZGVmaW5lIEZNVF9VSTMyICIweCV4IgorI2RlZmluZSBGTVQ4X1VJMzIgIiUwOHgiCisjZW5kaWYKKworLyogZ2VuZXJpYyBmYXN0ZXN0IG1ldGhvZCBmb3Igc3dhcHBpbmcgYnl0ZXMgYW5kIHNob3J0cyAqLworI2RlZmluZSBTV0FQMzJCWTE2KHp6KSAoKCh6eikgPDwgMTYpIHwgKCh6eikgPj4gMTYpKQorI2RlZmluZSBTV0FQMTZCWTgoenopICgoKHp6KSA8PCA4KSB8ICgoenopID4+IDgpKQorCisvKiAhISBkb24ndCBiZSB0ZW1wdGVkIHRvIGluc2VydCB0eXBlIGRlZmluaXRpb25zIGhlcmU7IHVzZSA8c3RkaW50Lmg+ICEhICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJCQkJCQlUYXJnZXQgUHJvcGVydGllcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRNUzMyMEM2eCBUYXJnZXQgU3BlY2lmaWMgUGFyYW1ldGVycyAoYnl0ZS1hZGRyZXNzYWJsZSkgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZiBUTVMzMjA2MAorI2RlZmluZSBNRU1PUkcgICAgICAgICAgMHgwTAkvKiBTaXplIG9mIGNvbmZpZ3VyZWQgbWVtb3J5ICovCisjZGVmaW5lIE1FTVNJWkUgICAgICAgICAweDBMCS8qIChmdWxsIGFkZHJlc3Mgc3BhY2UpICovCisKKyNkZWZpbmUgQ0lOSVRfQUxJR04gICAgIDgJLyogYWxpZ25tZW50IG9mIGNpbml0IHJlY29yZCBpbiBUREFUQSBBVXMgKi8KKyNkZWZpbmUgQ0lOSVRfQ09VTlQJNAkvKiB3aWR0aCBvZiBjb3VudCBmaWVsZCBpbiBUREFUQSBBVXMgKi8KKyNkZWZpbmUgQ0lOSVRfQUREUkVTUwk0CS8qIHdpZHRoIG9mIGFkZHJlc3MgZmllbGQgaW4gVERBVEEgQVVzICovCisjZGVmaW5lIENJTklUX1BBR0VfQklUUwkwCS8qIE51bWJlciBvZiBMU0JzIG9mIGFkZHJlc3MgdGhhdAorCQkJCSAqIGFyZSBwYWdlIG51bWJlciAqLworCisjZGVmaW5lIExFTklFTlRfU0lHTkVEX1JFTEVYUFMgMAkvKiBET0VTIFNJR05FRCBBTExPVyBNQVggVU5TSUdORUQgKi8KKworI3VuZGVmIFRBUkdFVF9FTkRJQU5ORVNTCS8qIG1heSBiZSBiaWcgb3IgbGl0dGxlIGVuZGlhbiAqLworCisvKiBhbGlnbiBhIHRhcmdldCBhZGRyZXNzIHRvIGEgd29yZCBib3VuZGFyeSAqLworI2RlZmluZSBUQVJHRVRfV09SRF9BTElHTih6eikgKCgoenopICsgMHgzKSAmIC0weDQpCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqCQkJREVGQVVMVCBTRVRUSU5HUyBhbmQgREVSSVZFRCBQUk9QRVJUSUVTCisgKgorICogVGhpcyBzZWN0aW9uIGVzdGFibGlzaGVzIGRlZmF1bHRzIGZvciB2YWx1ZXMgbm90IHNwZWNpZmllZCBhYm92ZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmbmRlZiBUQVJHRVRfQVVfQklUUworI2RlZmluZSBUQVJHRVRfQVVfQklUUyA4CS8qIHdpZHRoIG9mIHRoZSB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCAqLworI2RlZmluZSBMT0dfVEFSR0VUX0FVX0JJVFMgMwkvKiBsb2cyIG9mIHNhbWUgKi8KKyNlbmRpZgorCisjaWZuZGVmIENJTklUX0RFRkFVTFRfUEFHRQorI2RlZmluZSBDSU5JVF9ERUZBVUxUX1BBR0UgMAkvKiBkZWZhdWx0IC5jaW5pdCBwYWdlIG51bWJlciAqLworI2VuZGlmCisKKyNpZm5kZWYgREFUQV9SVU4yTE9BRAorI2RlZmluZSBEQVRBX1JVTjJMT0FEKHp6KSAoenopCS8qIHRyYW5zbGF0ZSBkYXRhIHJ1biBhZGRyZXNzIHRvIGxvYWQgYWRkcmVzcyAqLworI2VuZGlmCisKKyNpZm5kZWYgREJHX0xJU1RfUEFHRQorI2RlZmluZSBEQkdfTElTVF9QQUdFIDAJCS8qIHBhZ2UgbnVtYmVyIGZvciAuZGxsdmlldyBzZWN0aW9uICovCisjZW5kaWYKKworI2lmbmRlZiBUQVJHRVRfV09SRF9BTElHTgorLyogYWxpZ24gYSB0YXJnZXQgYWRkcmVzcyB0byBhIHdvcmQgYm91bmRhcnkgKi8KKyNkZWZpbmUgVEFSR0VUX1dPUkRfQUxJR04oenopICh6eikKKyNlbmRpZgorCisjaWZuZGVmIFREQVRBX1RPX1RBRERSCisjZGVmaW5lIFREQVRBX1RPX1RBRERSKHp6KSAoenopCS8qIHRhcmdldCBkYXRhIGFkZHJlc3MgdG8gdGFyZ2V0IEFVIGFkZHJlc3MgKi8KKyNkZWZpbmUgVEFERFJfVE9fVERBVEEoenopICh6eikJLyogdGFyZ2V0IEFVIGFkZHJlc3MgdG8gdGFyZ2V0IGRhdGEgYWRkcmVzcyAqLworI2RlZmluZSBUREFUQV9BVV9CSVRTCVRBUkdFVF9BVV9CSVRTCS8qIGJpdHMgcGVyIGRhdGEgQVUgKi8KKyNkZWZpbmUgTE9HX1REQVRBX0FVX0JJVFMJTE9HX1RBUkdFVF9BVV9CSVRTCisjZW5kaWYKKworLyoKKyAqCisgKiBVc2VmdWwgcHJvcGVydGllcyBhbmQgY29udmVyc2lvbnMgZGVyaXZlZCBmcm9tIHRoZSBhYm92ZQorICoKKyAqLworCisvKgorICogQ29udmVyc2lvbnMgYmV0d2VlbiBob3N0IGFuZCB0YXJnZXQgYWRkcmVzc2VzCisgKi8KKyNpZiBMT0dfQklUU19QRVJfQVUgPT0gTE9HX1RBUkdFVF9BVV9CSVRTCisvKiB0cmFuc2xhdGUgdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgdG8gaG9zdCBhZGRyZXNzICovCisjZGVmaW5lIFRBRERSX1RPX0hPU1QoeCkgKHgpCisvKiB0cmFuc2xhdGUgaG9zdCBhZGRyZXNzIHRvIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0ICovCisjZGVmaW5lIEhPU1RfVE9fVEFERFIoeCkgKHgpCisjZWxpZiBMT0dfQklUU19QRVJfQVUgPiBMT0dfVEFSR0VUX0FVX0JJVFMKKyNkZWZpbmUgVEFERFJfVE9fSE9TVCh4KSAoKHgpID4+IChMT0dfQklUU19QRVJfQVUtTE9HX1RBUkdFVF9BVV9CSVRTKSkKKyNkZWZpbmUgSE9TVF9UT19UQUREUih4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUtTE9HX1RBUkdFVF9BVV9CSVRTKSkKKyNlbHNlCisjZGVmaW5lIFRBRERSX1RPX0hPU1QoeCkgKCh4KSA8PCAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkpCisjZGVmaW5lIEhPU1RfVE9fVEFERFIoeCkgKCh4KSA+PiAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9BVSkpCisjZW5kaWYKKworI2lmIExPR19CSVRTX1BFUl9BVSA9PSBMT0dfVERBVEFfQVVfQklUUworLyogdHJhbnNsYXRlIHRhcmdldCBhZGRyZXNzYWJsZSB1bml0IHRvIGhvc3QgYWRkcmVzcyAqLworI2RlZmluZSBUREFUQV9UT19IT1NUKHgpICh4KQorLyogdHJhbnNsYXRlIGhvc3QgYWRkcmVzcyB0byB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCAqLworI2RlZmluZSBIT1NUX1RPX1REQVRBKHgpICh4KQorLyogdHJhbnNsYXRlIGhvc3QgYWRkcmVzcyB0byB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCwgcm91bmQgdXAgKi8KKyNkZWZpbmUgSE9TVF9UT19UREFUQV9ST1VORCh4KSAoeCkKKy8qIGJ5dGUgb2Zmc2V0IHRvIGhvc3Qgb2Zmc2V0LCByb3VuZGVkIHVwIGZvciBUREFUQSBzaXplICovCisjZGVmaW5lIEJZVEVfVE9fSE9TVF9UREFUQV9ST1VORCh4KSBCWVRFX1RPX0hPU1RfUk9VTkQoeCkKKyNlbGlmIExPR19CSVRTX1BFUl9BVSA+IExPR19UREFUQV9BVV9CSVRTCisjZGVmaW5lIFREQVRBX1RPX0hPU1QoeCkgKCh4KSA+PiAoTE9HX0JJVFNfUEVSX0FVLUxPR19UREFUQV9BVV9CSVRTKSkKKyNkZWZpbmUgSE9TVF9UT19UREFUQSh4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUtTE9HX1REQVRBX0FVX0JJVFMpKQorI2RlZmluZSBIT1NUX1RPX1REQVRBX1JPVU5EKHgpICgoeCkgPDwgKExPR19CSVRTX1BFUl9BVS1MT0dfVERBVEFfQVVfQklUUykpCisjZGVmaW5lIEJZVEVfVE9fSE9TVF9UREFUQV9ST1VORCh4KSBCWVRFX1RPX0hPU1RfUk9VTkQoeCkKKyNlbHNlCisjZGVmaW5lIFREQVRBX1RPX0hPU1QoeCkgKCh4KSA8PCAoTE9HX1REQVRBX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0FVKSkKKyNkZWZpbmUgSE9TVF9UT19UREFUQSh4KSAoKHgpID4+IChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQVUpKQorI2RlZmluZSBIT1NUX1RPX1REQVRBX1JPVU5EKHgpICgoKHgpICtcCisJCQkJKDE8PChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQVUpKS0xKSA+PlwKKwkJCQkoTE9HX1REQVRBX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0FVKSkKKyNkZWZpbmUgQllURV9UT19IT1NUX1REQVRBX1JPVU5EKHgpIChCWVRFX1RPX0hPU1QoKHgpICtcCisJKDE8PChMT0dfVERBVEFfQVVfQklUUy1MT0dfQklUU19QRVJfQllURSkpLTEpICZcCisJLShUREFUQV9BVV9CSVRTL0JJVFNfUEVSX0FVKSkKKyNlbmRpZgorCisvKgorICogSW5wdXQgaW4gRE9GRiBmb3JtYXQgaXMgYWx3YXlzIGV4cHJlc2VkIGluIGJ5dGVzLCByZWdhcmRsZXNzIG9mIGxvYWRpbmcgaG9zdAorICogc28gd2Ugd2luZCB1cCBjb252ZXJ0aW5nIGZyb20gYnl0ZXMgdG8gdGFyZ2V0IGFuZCBob3N0IHVuaXRzIGV2ZW4gd2hlbiB0aGUKKyAqIGhvc3QgaXMgbm90IGEgYnl0ZSBtYWNoaW5lLgorICovCisjaWYgTE9HX0JJVFNfUEVSX0FVID09IExPR19CSVRTX1BFUl9CWVRFCisjZGVmaW5lIEJZVEVfVE9fSE9TVCh4KSAoeCkKKyNkZWZpbmUgQllURV9UT19IT1NUX1JPVU5EKHgpICh4KQorI2RlZmluZSBIT1NUX1RPX0JZVEUoeCkgKHgpCisjZWxpZiBMT0dfQklUU19QRVJfQVUgPj0gTE9HX0JJVFNfUEVSX0JZVEUKKyNkZWZpbmUgQllURV9UT19IT1NUKHgpICgoeCkgPj4gKExPR19CSVRTX1BFUl9BVSAtIExPR19CSVRTX1BFUl9CWVRFKSkKKyNkZWZpbmUgQllURV9UT19IT1NUX1JPVU5EKHgpICgoeCArIChCSVRTX1BFUl9BVS9CSVRTX1BFUl9CWVRFLTEpKSA+PlwKKwkJCSAgICAgIChMT0dfQklUU19QRVJfQVUgLSBMT0dfQklUU19QRVJfQllURSkpCisjZGVmaW5lIEhPU1RfVE9fQllURSh4KSAoKHgpIDw8IChMT0dfQklUU19QRVJfQVUgLSBMT0dfQklUU19QRVJfQllURSkpCisjZWxzZQorLyogbGV0cyBub3QgdHJ5IHRvIGRlYWwgd2l0aCBzdWItOC1iaXQgYnl0ZSBtYWNoaW5lcyAqLworI2VuZGlmCisKKyNpZiBMT0dfVEFSR0VUX0FVX0JJVFMgPT0gTE9HX0JJVFNfUEVSX0JZVEUKKy8qIHRyYW5zbGF0ZSB0YXJnZXQgYWRkcmVzc2FibGUgdW5pdCB0byBieXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgVEFERFJfVE9fQllURSh4KSAoeCkKKy8qIHRyYW5zbGF0ZSBieXRlIGFkZHJlc3MgdG8gdGFyZ2V0IGFkZHJlc3NhYmxlIHVuaXQgKi8KKyNkZWZpbmUgQllURV9UT19UQUREUih4KSAoeCkKKyNlbGlmIExPR19UQVJHRVRfQVVfQklUUyA+IExPR19CSVRTX1BFUl9CWVRFCisjZGVmaW5lIFRBRERSX1RPX0JZVEUoeCkgKCh4KSA8PCAoTE9HX1RBUkdFVF9BVV9CSVRTLUxPR19CSVRTX1BFUl9CWVRFKSkKKyNkZWZpbmUgQllURV9UT19UQUREUih4KSAoKHgpID4+IChMT0dfVEFSR0VUX0FVX0JJVFMtTE9HX0JJVFNfUEVSX0JZVEUpKQorI2Vsc2UKKy8qIGxldHMgbm90IHRyeSB0byBkZWFsIHdpdGggc3ViLTgtYml0IGJ5dGUgbWFjaGluZXMgKi8KKyNlbmRpZgorCisjaWZkZWYgX0JJR19FTkRJQU4KKyNkZWZpbmUgSE9TVF9FTkRJQU5ORVNTIDEKKyNlbHNlCisjZGVmaW5lIEhPU1RfRU5ESUFOTkVTUyAwCisjZW5kaWYKKworI2lmZGVmIFRBUkdFVF9FTkRJQU5ORVNTCisjZGVmaW5lIFRBUkdFVF9FTkRJQU5ORVNTX0RJRkZFUlMocnRlbmQpIChIT1NUX0VORElBTk5FU1NeVEFSR0VUX0VORElBTk5FU1MpCisjZWxpZiBIT1NUX0VORElBTk5FU1MKKyNkZWZpbmUgVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhydGVuZCkgKCEocnRlbmQpKQorI2Vsc2UKKyNkZWZpbmUgVEFSR0VUX0VORElBTk5FU1NfRElGRkVSUyhydGVuZCkgKHJ0ZW5kKQorI2VuZGlmCisKKy8qIHRoZSB1bml0IGluIHdoaWNoIHdlIHByb2Nlc3MgdGFyZ2V0IGltYWdlIGRhdGEgKi8KKyNpZiBUQVJHRVRfQVVfQklUUyA8PSA4Cit0eXBlZGVmIHU4IHRndF9hdV90OworI2VsaWYgVEFSR0VUX0FVX0JJVFMgPD0gMTYKK3R5cGVkZWYgdTE2IHRndF9hdV90OworI2Vsc2UKK3R5cGVkZWYgdTMyIHRndF9hdV90OworI2VuZGlmCisKKy8qIHNpemUgb2YgdGhhdCB1bml0ICovCisjaWYgVEFSR0VUX0FVX0JJVFMgPCBCSVRTX1BFUl9BVQorI2RlZmluZSBUR1RBVV9CSVRTIEJJVFNfUEVSX0FVCisjZGVmaW5lIExPR19UR1RBVV9CSVRTIExPR19CSVRTX1BFUl9BVQorI2Vsc2UKKyNkZWZpbmUgVEdUQVVfQklUUyBUQVJHRVRfQVVfQklUUworI2RlZmluZSBMT0dfVEdUQVVfQklUUyBMT0dfVEFSR0VUX0FVX0JJVFMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyOGMwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jLmMKQEAgLTAsMCArMSw0ODQgQEAKKy8qCisgKiByZWxvYy5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlICJoZWFkZXIuaCIKKworI2lmIFRNUzMyMDYwCisvKiB0aGUgbWFnaWMgc3ltYm9sIGZvciB0aGUgc3RhcnQgb2YgQlNTICovCitzdGF0aWMgY29uc3QgY2hhciBic3NzeW1ib2xbXSA9IHsgIi5ic3MiIH07CisjZW5kaWYKKworI2lmIFRNUzMyMDYwCisjaW5jbHVkZSAicmVsb2NfdGFibGVfYzYwMDAuYyIKKyNlbmRpZgorCisjaWYgVE1TMzIwNjAKKy8qIEZyb20gY29mZi5oIC0gaWdub3JlIHRoZXNlIHJlbG9jYXRpb24gb3BlcmF0aW9ucyAqLworI2RlZmluZSBSX0M2MEFMSUdOICAgICAweDc2CS8qIEM2MDogQWxpZ25tZW50IGluZm8gZm9yIGNvbXByZXNzb3IgKi8KKyNkZWZpbmUgUl9DNjBGUEhFQUQgICAgMHg3NwkvKiBDNjA6IEV4cGxpY2l0IGFzc2VtYmx5IGRpcmVjdGl2ZSAqLworI2RlZmluZSBSX0M2ME5PQ01QICAgIDB4MTAwCS8qIEM2MDogRG9uJ3QgY29tcHJlc3MgdGhpcyBjb2RlIHNjbiAqLworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3VucGFjaworICoKKyAqIFBhcmFtZXRlcnM6CisgKglkYXRhCXBvaW50ZXIgdG8gc3RvcmFnZSB1bml0IGNvbnRhaW5pbmcgbG93ZXN0IGhvc3QgYWRkcmVzcyBvZgorICoJCWltYWdlIGRhdGEKKyAqCWZpZWxkc3oJU2l6ZSBvZiBiaXQgZmllbGQsIDAgPCBmaWVsZHN6IDw9IHNpemVvZihydmFsdWUpKkJJVFNfUEVSX0FVCisgKglvZmZzZXQJT2Zmc2V0IGZyb20gTFNCLCAwIDw9IG9mZnNldCA8IEJJVFNfUEVSX0FVCisgKglzZ24JU2lnbmVkbmVzcyBvZiB0aGUgZmllbGQgKFJPUF9TR04sIFJPUF9VTlMsIFJPUF9NQVgsIFJPUF9BTlkpCisgKgorICogRWZmZWN0OgorICoJRXh0cmFjdHMgdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgcmV0dXJucyBpdC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitydmFsdWUgZGxvYWRfdW5wYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCB0Z3RfYXVfdCAqIGRhdGEsIGludCBmaWVsZHN6LAorCQkgICAgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKQoreworCXJlZ2lzdGVyIHJ2YWx1ZSBvYmp2YWw7CisJcmVnaXN0ZXIgaW50IHNoaWZ0LCBkaXJlY3Rpb247CisJcmVnaXN0ZXIgdGd0X2F1X3QgKmRwID0gZGF0YTsKKworCWZpZWxkc3ogLT0gMTsJLyogYXZvaWQgbmFzdGluZXNzIHdpdGggMzItYml0IHNoaWZ0IG9mIDMyLWJpdCB2YWx1ZSAqLworCS8qICogY29sbGVjdCB1cCBlbm91Z2ggYml0cyB0byBjb250YWluIHRoZSBkZXNpcmVkIGZpZWxkICovCisJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKSB7CisJCWRwICs9IChmaWVsZHN6ICsgb2Zmc2V0KSA+PiBMT0dfVEdUQVVfQklUUzsKKwkJZGlyZWN0aW9uID0gLTE7CisJfSBlbHNlCisJCWRpcmVjdGlvbiA9IDE7CisJb2JqdmFsID0gKmRwID4+IG9mZnNldDsKKwlzaGlmdCA9IFRHVEFVX0JJVFMgLSBvZmZzZXQ7CisJd2hpbGUgKHNoaWZ0IDw9IGZpZWxkc3opIHsKKwkJZHAgKz0gZGlyZWN0aW9uOworCQlvYmp2YWwgKz0gKHJ2YWx1ZSkgKmRwIDw8IHNoaWZ0OworCQlzaGlmdCArPSBUR1RBVV9CSVRTOworCX0KKworCS8qICogc2lnbiBvciB6ZXJvIGV4dGVuZCB0aGUgdmFsdWUgYXBwcm9wcmlhdGVseSAqLworCWlmIChzZ24gPT0gUk9QX1VOUykKKwkJb2JqdmFsICY9ICgyIDw8IGZpZWxkc3opIC0gMTsKKwllbHNlIHsKKwkJc2hpZnQgPSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVIC0gMSAtIGZpZWxkc3o7CisJCW9ianZhbCA9IChvYmp2YWwgPDwgc2hpZnQpID4+IHNoaWZ0OworCX0KKworCXJldHVybiBvYmp2YWw7CisKK30JCQkJLyogZGxvYWRfdW5wYWNrICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3JlcGFjaworICoKKyAqIFBhcmFtZXRlcnM6CisgKgl2YWwJCVZhbHVlIHRvIGluc2VydAorICoJZGF0YQlQb2ludGVyIHRvIHN0b3JhZ2UgdW5pdCBjb250YWluaW5nIGxvd2VzdCBob3N0IGFkZHJlc3Mgb2YKKyAqIAkJaW1hZ2UgZGF0YQorICoJZmllbGRzeglTaXplIG9mIGJpdCBmaWVsZCwgMCA8IGZpZWxkc3ogPD0gc2l6ZW9mKHJ2YWx1ZSkqQklUU19QRVJfQVUKKyAqCW9mZnNldAlPZmZzZXQgZnJvbSBMU0IsIDAgPD0gb2Zmc2V0IDwgQklUU19QRVJfQVUKKyAqCXNnbglTaWduZWRuZXNzIG9mIHRoZSBmaWVsZCAoUk9QX1NHTiwgUk9QX1VOUywgUk9QX01BWCwgUk9QX0FOWSkKKyAqCisgKiBFZmZlY3Q6CisgKglTdHVmZnMgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgc3BlY2lmaWVkIGZpZWxkLiAgUmV0dXJucyAwIGZvcgorICoJc3VjY2VzcworICogb3IgMSBpZiB0aGUgdmFsdWUgd2lsbCBub3QgZml0IGluIHRoZSBzcGVjaWZpZWQgZmllbGQgYWNjb3JkaW5nIHRvIHRoZQorICogc3BlY2lmaWVkIHNpZ25lZG5lc3MgcnVsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvdmZfbGltaXRbXSA9IHsgMSwgMiwgMiB9OworCitpbnQgZGxvYWRfcmVwYWNrKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLCBydmFsdWUgdmFsLCB0Z3RfYXVfdCAqIGRhdGEsCisJCSBpbnQgZmllbGRzeiwgaW50IG9mZnNldCwgdW5zaWduZWQgc2duKQoreworCXJlZ2lzdGVyIHVydmFsdWUgb2JqdmFsLCBtYXNrOworCXJlZ2lzdGVyIGludCBzaGlmdCwgZGlyZWN0aW9uOworCXJlZ2lzdGVyIHRndF9hdV90ICpkcCA9IGRhdGE7CisKKwlmaWVsZHN6IC09IDE7CS8qIGF2b2lkIG5hc3RpbmVzcyB3aXRoIDMyLWJpdCBzaGlmdCBvZiAzMi1iaXQgdmFsdWUgKi8KKwkvKiBjbGlwIHRoZSBiaXRzICovCisJbWFzayA9ICgyVUwgPDwgZmllbGRzeikgLSAxOworCW9ianZhbCA9ICh2YWwgJiBtYXNrKTsKKwkvKiAqIHN0b3JlIHRoZSBiaXRzIHRocm91Z2ggdGhlIHNwZWNpZmllZCBtYXNrICovCisJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKSB7CisJCWRwICs9IChmaWVsZHN6ICsgb2Zmc2V0KSA+PiBMT0dfVEdUQVVfQklUUzsKKwkJZGlyZWN0aW9uID0gLTE7CisJfSBlbHNlCisJCWRpcmVjdGlvbiA9IDE7CisKKwkvKiBpbnNlcnQgTFNCcyAqLworCSpkcCA9ICgqZHAgJiB+KG1hc2sgPDwgb2Zmc2V0KSkgKyAob2JqdmFsIDw8IG9mZnNldCk7CisJc2hpZnQgPSBUR1RBVV9CSVRTIC0gb2Zmc2V0OworCS8qIGFsaWduIG1hc2sgYW5kIG9ianZhbCB3aXRoIEFVIGJvdW5kYXJ5ICovCisJb2JqdmFsID4+PSBzaGlmdDsKKwltYXNrID4+PSBzaGlmdDsKKworCXdoaWxlIChtYXNrKSB7CisJCWRwICs9IGRpcmVjdGlvbjsKKwkJKmRwID0gKCpkcCAmIH5tYXNrKSArIG9ianZhbDsKKwkJb2JqdmFsID4+PSBUR1RBVV9CSVRTOworCQltYXNrID4+PSBUR1RBVV9CSVRTOworCX0KKworCS8qCisJICogY2hlY2sgZm9yIG92ZXJmbG93CisJICovCisJaWYgKHNnbikgeworCQl1bnNpZ25lZCB0bXAgPSAodmFsID4+IGZpZWxkc3opICsgKHNnbiAmIDB4MSk7CisJCWlmICh0bXAgPiBvdmZfbGltaXRbc2duIC0gMV0pCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7CisKK30JCQkJLyogZGxvYWRfcmVwYWNrICovCisKKy8qIGxvb2t1cCB0YWJsZSBmb3IgdGhlIHNjYWxpbmcgYW1vdW50IGluIGEgQzZ4IGluc3RydWN0aW9uICovCisjaWYgVE1TMzIwNjAKKyNkZWZpbmUgU0NBTEVfQklUUyA0CQkvKiB0aGVyZSBhcmUgNCBiaXRzIGluIHRoZSBzY2FsZSBmaWVsZCAqLworI2RlZmluZSBTQ0FMRV9NQVNLIDB4NwkJLyogd2UgcmVhbGx5IG9ubHkgdXNlIHRoZSBib3R0b20gMyBiaXRzICovCitzdGF0aWMgY29uc3QgdTggYzYwX3NjYWxlW1NDQUxFX01BU0sgKyAxXSA9IHsKKwkxLCAwLCAwLCAwLCAxLCAxLCAyLCAyCit9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGRsb2FkX3JlbG9jYXRlCisgKgorICogUGFyYW1ldGVyczoKKyAqCWRhdGEJUG9pbnRlciB0byBiYXNlIG9mIGltYWdlIGRhdGEKKyAqCXJwCQlQb2ludGVyIHRvIHJlbG9jYXRpb24gb3BlcmF0aW9uCisgKgorICogRWZmZWN0OgorICoJUGVyZm9ybXMgdGhlIHNwZWNpZmllZCByZWxvY2F0aW9uIG9wZXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3ZvaWQgZGxvYWRfcmVsb2NhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICogZGF0YSwKKwkJICAgIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnAsIGJvb2wgKnRyYW1wc19nZW5lcmF0ZWQsCisJCSAgICBib29sIHNlY29uZF9wYXNzKQoreworCXJ2YWx1ZSB2YWwsIHJlbG9jX2FtdCwgb3JpZ192YWwgPSAwOworCXVuc2lnbmVkIGludCBmaWVsZHN6ID0gMDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQgcmVsb2NfaW5mbyA9IDA7CisJdW5zaWduZWQgaW50IHJlbG9jX2FjdGlvbiA9IDA7CisJcmVnaXN0ZXIgaW50IHJ4ID0gMDsKKwlydmFsdWUgKnN0YWNrcCA9IE5VTEw7CisJaW50IHRvcDsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sICpzdnAgPSBOVUxMOworI2lmZGVmIFJGVl9TQ0FMRQorCXVuc2lnbmVkIGludCBzY2FsZSA9IDA7CisjZW5kaWYKKwlzdHJ1Y3QgaW1hZ2VfcGFja2V0X3QgKmltZ19wa3QgPSBOVUxMOworCisJLyogVGhlIGltYWdlIHBhY2tldCBkYXRhIHN0cnVjdCBpcyBvbmx5IHVzZWQgZHVyaW5nIGZpcnN0IHBhc3MKKwkgKiByZWxvY2F0aW9uIGluIHRoZSBldmVudCB0aGF0IGEgdHJhbXBvbGluZSBpcyBuZWVkZWQuICAybmQgcGFzcworCSAqIHJlbG9jYXRpb24gZG9lc24ndCBndWFyYW50ZWUgdGhhdCBkYXRhIGlzIGNvbWluZyBmcm9tIGFuCisJICogaW1hZ2VfcGFja2V0X3Qgc3RydWN0dXJlLiBTZWUgY2xvYWQuYywgZGxvYWRfZGF0YSBmb3IgaG93IGltZ19kYXRhIGlzCisJICogc2V0LiBJZiB0aGF0IGNoYW5nZXMgdGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkISEhICovCisJaWYgKHNlY29uZF9wYXNzID09IGZhbHNlKQorCQlpbWdfcGt0ID0gKHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqKSgodTggKikgZGF0YSAtCisJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdAorCQkJCQkJCSAgIGltYWdlX3BhY2tldF90KSk7CisKKwlyeCA9IEhBU0hfRlVOQyhycC0+VFlQRSk7CisJd2hpbGUgKHJvcF9tYXAxW3J4XSAhPSBycC0+VFlQRSkgeworCQlyeCA9IEhBU0hfTChyb3BfbWFwMltyeF0pOworCQlpZiAocnggPCAwKSB7CisjaWYgVE1TMzIwNjAKKwkJCXN3aXRjaCAocnAtPlRZUEUpIHsKKwkJCWNhc2UgUl9DNjBBTElHTjoKKwkJCWNhc2UgUl9DNjBOT0NNUDoKKwkJCWNhc2UgUl9DNjBGUEhFQUQ6CisJCQkJLyogSWdub3JlIHRoZXNlIHJlbG9jIHR5cGVzIGFuZCByZXR1cm4gKi8KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogVW5rbm93biByZWxvYyB0eXBlLCBwcmludCBlcnJvciBhbmQgcmV0dXJuICovCisJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIGNvZmYgb3BlcmF0b3IgMHgleCIsCisJCQkJCSAgICBycC0+VFlQRSk7CisJCQl9CisjZWxzZQorCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiQmFkIGNvZmYgb3BlcmF0b3IgMHgleCIsIHJwLT5UWVBFKTsKKyNlbmRpZgorCQkJcmV0dXJuOworCQl9CisJfQorCXJ4ID0gSEFTSF9JKHJvcF9tYXAyW3J4XSk7CisJaWYgKChyeCA8IChzaXplb2Yocm9wX2FjdGlvbikgLyBzaXplb2YodTE2KSkpCisJICAgICYmIChyeCA8IChzaXplb2Yocm9wX2luZm8pIC8gc2l6ZW9mKHUxNikpKSAmJiAocnggPiAwKSkgeworCQlyZWxvY19hY3Rpb24gPSByb3BfYWN0aW9uW3J4XTsKKwkJcmVsb2NfaW5mbyA9IHJvcF9pbmZvW3J4XTsKKwl9IGVsc2UgeworCQlkbG9hZF9lcnJvcihkbHRoaXMsICJCdWZmZXIgT3ZlcmZsb3cgLSBBcnJheSBJbmRleCBPdXQgIgorCQkJICAgICJvZiBCb3VuZHMiKTsKKwl9CisKKwkvKiBDb21wdXRlIHRoZSByZWxvY2F0aW9uIGFtb3VudCBmb3IgdGhlIHJlZmVyZW5jZWQgc3ltYm9sLCBpZiBhbnkgKi8KKwlyZWxvY19hbXQgPSBycC0+VVZBTDsKKwlpZiAoUkZWX1NZTShyZWxvY19pbmZvKSkgewkvKiByZWxvY2F0aW9uIHVzZXMgYSBzeW1ib2wgcmVmZXJlbmNlICovCisJCS8qIElmIHRoaXMgaXMgZmlyc3QgcGFzcywgdXNlIHRoZSBtb2R1bGUgbG9jYWwgc3ltYm9sIHRhYmxlLAorCQkgKiBlbHNlIHVzZSB0aGUgdHJhbXBvbGluZSBzeW1ib2wgdGFibGUuICovCisJCWlmIChzZWNvbmRfcGFzcyA9PSBmYWxzZSkgeworCQkJaWYgKCh1MzIpIHJwLT5TWU1ORFggPCBkbHRoaXMtPmRmaWxlX2hkci5kZl9ub19zeW1zKSB7CisJCQkJLyogcmVhbCBzeW1ib2wgcmVmZXJlbmNlICovCisJCQkJc3ZwID0gJmRsdGhpcy0+bG9jYWxfc3ltdGFiW3JwLT5TWU1ORFhdOworCQkJCXJlbG9jX2FtdCA9IChSRlZfU1lNKHJlbG9jX2luZm8pID09IFJPUF9TWU1EKSA/CisJCQkJICAgIHN2cC0+ZGVsdGEgOiBzdnAtPnZhbHVlOworCQkJfQorCQkJLyogcmVsb2MgcmVmZXJlbmNlcyBjdXJyZW50IHNlY3Rpb24gKi8KKwkJCWVsc2UgaWYgKHJwLT5TWU1ORFggPT0gLTEpIHsKKwkJCQlyZWxvY19hbXQgPSAoUkZWX1NZTShyZWxvY19pbmZvKSA9PSBST1BfU1lNRCkgPworCQkJCSAgICBkbHRoaXMtPmRlbHRhX3J1bmFkZHIgOgorCQkJCSAgICBkbHRoaXMtPmltYWdlX3NlY24tPnJ1bl9hZGRyOworCQkJfQorCQl9CisJfQorCS8qIHJlbG9jYXRpb24gdXNlcyBhIHN5bWJvbCByZWZlcmVuY2UgKi8KKwkvKiBIYW5kbGUgc3RhY2sgYWRqdXN0bWVudCAqLworCXZhbCA9IDA7CisJdG9wID0gUkZWX1NUSyhyZWxvY19pbmZvKTsKKwlpZiAodG9wKSB7CisJCXRvcCArPSBkbHRoaXMtPnJlbHN0a2lkeCAtIFJTVEtfVU9QOworCQlpZiAodG9wID49IFNUQVRJQ19FWFBSX1NUS19TSVpFKSB7CisJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJICAgICJFeHByZXNzaW9uIHN0YWNrIG92ZXJmbG93IGluICVzIGF0IG9mZnNldCAiCisJCQkJICAgIEZNVF9VSTMyLCBkbHRoaXMtPmltYWdlX3NlY24tPm5hbWUsCisJCQkJICAgIHJwLT52YWRkciArIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0KTsKKwkJCXJldHVybjsKKwkJfQorCQl2YWwgPSBkbHRoaXMtPnJlbHN0a1tkbHRoaXMtPnJlbHN0a2lkeF07CisJCWRsdGhpcy0+cmVsc3RraWR4ID0gdG9wOworCQlzdGFja3AgPSAmZGx0aGlzLT5yZWxzdGtbdG9wXTsKKwl9CisJLyogRGVyaXZlIGZpZWxkIHBvc2l0aW9uIGFuZCBzaXplLCBpZiB3ZSBuZWVkIHRoZW0gKi8KKwlpZiAocmVsb2NfaW5mbyAmIFJPUF9SVykgewkvKiByZWFkIG9yIHdyaXRlIGFjdGlvbiBpbiBvdXIgZnV0dXJlICovCisJCWZpZWxkc3ogPSBSRlZfV0lEVEgocmVsb2NfYWN0aW9uKTsKKwkJaWYgKGZpZWxkc3opIHsJLyogZmllbGQgaW5mbyBmcm9tIHRhYmxlICovCisJCQlvZmZzZXQgPSBSRlZfUE9TTihyZWxvY19hY3Rpb24pOworCQkJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKQorCQkJCS8qIG1ha2Ugc3VyZSB2YWRkciBpcyB0aGUgbG93ZXN0IHRhcmdldAorCQkJCSAqIGFkZHJlc3MgY29udGFpbmluZyBiaXRzICovCisJCQkJcnAtPnZhZGRyICs9IFJGVl9CSUdPRkYocmVsb2NfaW5mbyk7CisJCX0gZWxzZSB7CS8qIGZpZWxkIGluZm8gZnJvbSByZWxvY2F0aW9uIG9wICovCisJCQlmaWVsZHN6ID0gcnAtPkZJRUxEU1o7CisJCQlvZmZzZXQgPSBycC0+T0ZGU0VUOworCQkJaWYgKFRBUkdFVF9CSUdfRU5ESUFOKQorCQkJCS8qIG1ha2Ugc3VyZSB2YWRkciBpcyB0aGUgbG93ZXN0IHRhcmdldAorCQkJCSAgIGFkZHJlc3MgY29udGFpbmluZyBiaXRzICovCisJCQkJcnAtPnZhZGRyICs9IChycC0+V09SRFNaIC0gb2Zmc2V0IC0gZmllbGRzeikKKwkJCQkgICAgPj4gTE9HX1RBUkdFVF9BVV9CSVRTOworCQl9CisJCWRhdGEgPSAodGd0X2F1X3QgKikgKChjaGFyICopZGF0YSArIFRBRERSX1RPX0hPU1QocnAtPnZhZGRyKSk7CisJCS8qIGNvbXB1dGUgbG93ZXN0IGhvc3QgbG9jYXRpb24gb2YgcmVmZXJlbmNlZCBkYXRhICovCisjaWYgQklUU19QRVJfQVUgPiBUQVJHRVRfQVVfQklUUworCQkvKiBjb252ZXJzaW9uIGZyb20gdGFyZ2V0IGFkZHJlc3MgdG8gaG9zdCBhZGRyZXNzIG1heSBsb3NlCisJCSAgIGFkZHJlc3MgYml0czsgYWRkIGxvc3MgdG8gb2Zmc2V0ICovCisJCWlmIChUQVJHRVRfQklHX0VORElBTikgeworCQkJb2Zmc2V0ICs9IC0oKHJwLT52YWRkciA8PCBMT0dfVEFSR0VUX0FVX0JJVFMpICsKKwkJCQkgICAgb2Zmc2V0ICsgZmllbGRzeikgJgorCQkJICAgIChCSVRTX1BFUl9BVSAtIFRBUkdFVF9BVV9CSVRTKTsKKwkJfSBlbHNlIHsKKwkJCW9mZnNldCArPSAocnAtPnZhZGRyIDw8IExPR19UQVJHRVRfQVVfQklUUykgJgorCQkJICAgIChCSVRTX1BFUl9BVSAtIDEpOworCQl9CisjZW5kaWYKKyNpZmRlZiBSRlZfU0NBTEUKKwkJc2NhbGUgPSBSRlZfU0NBTEUocmVsb2NfaW5mbyk7CisjZW5kaWYKKwl9CisJLyogcmVhZCB0aGUgb2JqZWN0IHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgaW1hZ2UsIGlmIHNvIG9yZGVyZWQgKi8KKwlpZiAocmVsb2NfaW5mbyAmIFJPUF9SKSB7CisJCS8qIHJlbG9jYXRpb24gcmVhZHMgY3VycmVudCBpbWFnZSB2YWx1ZSAqLworCQl2YWwgPSBkbG9hZF91bnBhY2soZGx0aGlzLCBkYXRhLCBmaWVsZHN6LCBvZmZzZXQsCisJCQkJICAgUkZWX1NJR04ocmVsb2NfaW5mbykpOworCQkvKiBTYXZlIG9mZiB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gY2FzZSB0aGUgcmVsbyBvdmVyZmxvd3MgYW5kCisJCSAqIHdlIGNhbiB0cmFtcG9saW5lIGl0LiAqLworCQlvcmlnX3ZhbCA9IHZhbDsKKworI2lmZGVmIFJGVl9TQ0FMRQorCQl2YWwgPDw9IHNjYWxlOworI2VuZGlmCisJfQorCS8qIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBhcml0aG1ldGljICovCisJc3dpdGNoIChSRlZfQUNUSU9OKHJlbG9jX2FjdGlvbikpIHsJLyogcmVsb2NhdGlvbiBhY3Rpb25zICovCisJY2FzZSBSQUNUX1ZBTDoKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FTR046CisJCXZhbCA9IHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FERDoKKwkJdmFsICs9IHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1BDUjoKKwkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlcyBvZiBqdW1waW5nIGZyb20gYWJzb2x1dGUgc2VjdGlvbnMKKwkJICogKHNwZWNpYWwgcmVsb2MgdHlwZSkgb3IgdG8gYWJzb2x1dGUgZGVzdGluYXRpb24KKwkJICogKHN5bW5keCA9PSAtMSkuICBJbiBlaXRoZXIgY2FzZSwgc2V0IHRoZSBhcHByb3ByaWF0ZQorCQkgKiByZWxvY2F0aW9uIGFtb3VudCB0byAwLgorCQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJCWlmIChycC0+U1lNTkRYID09IC0xKQorCQkJcmVsb2NfYW10ID0gMDsKKwkJdmFsICs9IHJlbG9jX2FtdCAtIGRsdGhpcy0+ZGVsdGFfcnVuYWRkcjsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FERElTUDoKKwkJdmFsICs9IHJwLT5SX0RJU1AgKyByZWxvY19hbXQ7CisJCWJyZWFrOworCWNhc2UgUkFDVF9BU0dQQzoKKwkJdmFsID0gZGx0aGlzLT5pbWFnZV9zZWNuLT5ydW5fYWRkciArIHJlbG9jX2FtdDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1BMVVM6CisJCWlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCArPSAqc3RhY2twOworCQlicmVhazsKKwljYXNlIFJBQ1RfU1VCOgorCQlpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgPSAqc3RhY2twIC0gdmFsOworCQlicmVhazsKKwljYXNlIFJBQ1RfTkVHOgorCQl2YWwgPSAtdmFsOworCQlicmVhazsKKwljYXNlIFJBQ1RfTVBZOgorCQlpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgKj0gKnN0YWNrcDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0RJVjoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCAvIHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX01PRDoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCAlIHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX1NSOgorCQlpZiAodmFsID49IHNpemVvZihydmFsdWUpICogQklUU19QRVJfQVUpCisJCQl2YWwgPSAwOworCQllbHNlIGlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCA9ICh1cnZhbHVlKSAqc3RhY2twID4+IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FTUjoKKwkJaWYgKHZhbCA+PSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVKQorCQkJdmFsID0gc2l6ZW9mKHJ2YWx1ZSkgKiBCSVRTX1BFUl9BVSAtIDE7CisJCWVsc2UgaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsID0gKnN0YWNrcCA+PiB2YWw7CisJCWJyZWFrOworCWNhc2UgUkFDVF9TTDoKKwkJaWYgKHZhbCA+PSBzaXplb2YocnZhbHVlKSAqIEJJVFNfUEVSX0FVKQorCQkJdmFsID0gMDsKKwkJZWxzZSBpZiAoc3RhY2twICE9IE5VTEwpCisJCQl2YWwgPSAqc3RhY2twIDw8IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBSQUNUX0FORDoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsICY9ICpzdGFja3A7CisJCWJyZWFrOworCWNhc2UgUkFDVF9PUjoKKwkJaWYgKHN0YWNrcCAhPSBOVUxMKQorCQkJdmFsIHw9ICpzdGFja3A7CisJCWJyZWFrOworCWNhc2UgUkFDVF9YT1I6CisJCWlmIChzdGFja3AgIT0gTlVMTCkKKwkJCXZhbCBePSAqc3RhY2twOworCQlicmVhazsKKwljYXNlIFJBQ1RfTk9UOgorCQl2YWwgPSB+dmFsOworCQlicmVhazsKKyNpZiBUTVMzMjA2MAorCWNhc2UgUkFDVF9DNlNFQ1Q6CisJCS8qIGFjdHVhbGx5IG5lZWRlZCBhZGRyZXNzIG9mIHNlY24gY29udGFpbmluZyBzeW1ib2wgKi8KKwkJaWYgKHN2cCAhPSBOVUxMKSB7CisJCQlpZiAocnAtPlNZTU5EWCA+PSAwKQorCQkJCWlmIChzdnAtPnNlY25uID4gMCkKKwkJCQkJcmVsb2NfYW10ID0gZGx0aGlzLT5sZHJfc2VjdGlvbnMKKwkJCQkJICAgIFtzdnAtPnNlY25uIC0gMV0ucnVuX2FkZHI7CisJCX0KKwkJLyogISEhIEZBTEwgVEhSVSAhISEgKi8KKwljYXNlIFJBQ1RfQzZCQVNFOgorCQlpZiAoZGx0aGlzLT5ic3NfcnVuX2Jhc2UgPT0gMCkgeworCQkJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpzeW1wOworCQkJc3ltcCA9IGRsdGhpcy0+bXlzeW0tPmZpbmRfbWF0Y2hpbmdfc3ltYm9sCisJCQkgICAgKGRsdGhpcy0+bXlzeW0sIGJzc3N5bWJvbCk7CisJCQkvKiBsb29rdXAgdmFsdWUgb2YgZ2xvYmFsIEJTUyBiYXNlICovCisJCQlpZiAoc3ltcCkKKwkJCQlkbHRoaXMtPmJzc19ydW5fYmFzZSA9IHN5bXAtPnZhbHVlOworCQkJZWxzZQorCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJHbG9iYWwgQlNTIGJhc2UgcmVmZXJlbmNlZCBpbiAlcyAiCisJCQkJCSAgICAib2Zmc2V0IiBGTVRfVUkzMiAiIGJ1dCBub3QgIgorCQkJCQkgICAgImRlZmluZWQiLAorCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAorCQkJCQkgICAgcnAtPnZhZGRyICsgZGx0aGlzLT5pbWFnZV9vZmZzZXQpOworCQl9CisJCXJlbG9jX2FtdCAtPSBkbHRoaXMtPmJzc19ydW5fYmFzZTsKKwkJLyogISEhIEZBTEwgVEhSVSAhISEgKi8KKwljYXNlIFJBQ1RfQzZEU1BMOgorCQkvKiBzY2FsZSBmYWN0b3IgZGV0ZXJtaW5lZCBieSAzIExTQnMgb2YgZmllbGQgKi8KKwkJc2NhbGUgPSBjNjBfc2NhbGVbdmFsICYgU0NBTEVfTUFTS107CisJCW9mZnNldCArPSBTQ0FMRV9CSVRTOworCQlmaWVsZHN6IC09IFNDQUxFX0JJVFM7CisJCXZhbCA+Pj0gU0NBTEVfQklUUzsJLyogaWdub3JlIHRoZSBzY2FsZSBmaWVsZCBoZXJlYWZ0ZXIgKi8KKwkJdmFsIDw8PSBzY2FsZTsKKwkJdmFsICs9IHJlbG9jX2FtdDsJLyogZG8gdGhlIHVzdWFsIHJlbG9jYXRpb24gKi8KKwkJaWYgKCgoMSA8PCBzY2FsZSkgLSAxKSAmIHZhbCkKKwkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkgICAgIlVuYWxpZ25lZCByZWZlcmVuY2UgaW4gJXMgb2Zmc2V0ICIKKwkJCQkgICAgRk1UX1VJMzIsIGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+bmFtZSwKKwkJCQkgICAgcnAtPnZhZGRyICsgZGx0aGlzLT5pbWFnZV9vZmZzZXQpOworCQlicmVhazsKKyNlbmRpZgorCX0JCQkvKiByZWxvY2F0aW9uIGFjdGlvbnMgKi8KKwkvKiAqIFB1dCBiYWNrIHJlc3VsdCBhcyByZXF1aXJlZCAqLworCWlmIChyZWxvY19pbmZvICYgUk9QX1cpIHsJLyogcmVsb2NhdGlvbiB3cml0ZXMgaW1hZ2UgdmFsdWUgKi8KKyNpZmRlZiBSRlZfU0NBTEUKKwkJdmFsID4+PSBzY2FsZTsKKyNlbmRpZgorCQlpZiAoZGxvYWRfcmVwYWNrKGRsdGhpcywgdmFsLCBkYXRhLCBmaWVsZHN6LCBvZmZzZXQsCisJCQkJIFJGVl9TSUdOKHJlbG9jX2luZm8pKSkgeworCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcmVsbyBjYW4gYmUgdHJhbXBvbGluZWQsCisJCQkgKiBidXQgb25seSBpbiBmaXJzdCBwaGFzZSByZWxvY2F0aW9uLiAgMm5kIHBoYXNlCisJCQkgKiByZWxvY2F0aW9uIGNhbm5vdCB0cmFtcG9saW5lLiAqLworCQkJaWYgKChzZWNvbmRfcGFzcyA9PSBmYWxzZSkgJiYKKwkJCSAgICAoZGxvYWRfdHJhbXBfYXZhaWwoZGx0aGlzLCBycCkgPT0gdHJ1ZSkpIHsKKworCQkJCS8qIEJlZm9yZSBnZW5lcmF0aW5nIHRoZSB0cmFtcG9saW5lLCByZXN0b3JlCisJCQkJICogdGhlIHZhbHVlIHRvIGl0cyBvcmlnaW5hbCBzbyB0aGUgMm5kIHBhc3MKKwkJCQkgKiAgcmVsbyB3aWxsIHdvcmsuICovCisJCQkJZGxvYWRfcmVwYWNrKGRsdGhpcywgb3JpZ192YWwsIGRhdGEsIGZpZWxkc3osCisJCQkJCSAgICAgb2Zmc2V0LCBSRlZfU0lHTihyZWxvY19pbmZvKSk7CisJCQkJaWYgKCFkbG9hZF90cmFtcF9nZW5lcmF0ZShkbHRoaXMsCisJCQkJCQkJKGRsdGhpcy0+aW1hZ2Vfc2VjbiAtCisJCQkJCQkJIGRsdGhpcy0+bGRyX3NlY3Rpb25zKSwKKwkJCQkJCQkgZGx0aGlzLT5pbWFnZV9vZmZzZXQsCisJCQkJCQkJIGltZ19wa3QsIHJwKSkgeworCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJCQkgICAgIkZhaWxlZCB0byAiCisJCQkJCQkgICAgImdlbmVyYXRlIHRyYW1wb2xpbmUgZm9yICIKKwkJCQkJCSAgICAiYml0IG92ZXJmbG93Iik7CisJCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJCSAgICAiUmVsb2NhdGlvbiB2YWwgIiBGTVRfVUkzMgorCQkJCQkJICAgICIgb3ZlcmZsb3dzICVkIGJpdHMgaW4gJXMgIgorCQkJCQkJICAgICJvZmZzZXQgIiBGTVRfVUkzMiwgdmFsLAorCQkJCQkJICAgIGZpZWxkc3osCisJCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5uYW1lLAorCQkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsKKwkJCQkJCSAgICBycC0+dmFkZHIpOworCQkJCX0gZWxzZQorCQkJCQkqdHJhbXBzX2dlbmVyYXRlZCA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIlJlbG9jYXRpb24gdmFsdWUgIgorCQkJCQkgICAgRk1UX1VJMzIgIiBvdmVyZmxvd3MgJWQgYml0cyBpbiAlcyIKKwkJCQkJICAgICIgb2Zmc2V0ICIgRk1UX1VJMzIsIHZhbCwgZmllbGRzeiwKKwkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfc2Vjbi0+bmFtZSwKKwkJCQkJICAgIGRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRyKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAodG9wKQorCQkqc3RhY2twID0gdmFsOworfQkJCQkvKiByZWxvY192YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2NfdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhYjAzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiByZWxvY190YWJsZS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1JFTE9DX1RBQkxFX0hfCisjZGVmaW5lIF9SRUxPQ19UQUJMRV9IXworLyoKKyAqIFRhYmxlIG9mIHJlbG9jYXRpb24gb3BlcmF0b3IgcHJvcGVydGllcworICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogSG93IGRvZXMgdGhpcyByZWxvY2F0aW9uIG9wZXJhdGlvbiBhY2Nlc3MgdGhlIHByb2dyYW0gaW1hZ2U/ICovCisjZGVmaW5lIFJPUF9OCTAJCS8qIGRvZXMgbm90IGFjY2VzcyBpbWFnZSAqLworI2RlZmluZSBST1BfUgkxCQkvKiByZWFkIGZyb20gaW1hZ2UgKi8KKyNkZWZpbmUgUk9QX1cJMgkJLyogd3JpdGUgdG8gaW1hZ2UgKi8KKyNkZWZpbmUgUk9QX1JXCTMJCS8qIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gaW1hZ2UgKi8KKworLyogRm9yIHByb2dyYW0gaW1hZ2UgYWNjZXNzLCB3aGF0IGFyZSB0aGUgb3ZlcmZsb3cgcnVsZXMgZm9yIHRoZSBiaXQgZmllbGQ/ICovCisvKiBCZXdhcmUhIFByb2NlZHVyZSByZXBhY2sgZGVwZW5kcyBvbiB0aGlzIGVuY29kaW5nICovCisjZGVmaW5lIFJPUF9BTlkJMAkJLyogbm8gb3ZlcmZsb3cgZXZlciwganVzdCB0cnVuY2F0ZSB0aGUgdmFsdWUgKi8KKyNkZWZpbmUgUk9QX1NHTgkxCQkvKiBzaWduZWQgZmllbGQgKi8KKyNkZWZpbmUgUk9QX1VOUwkyCQkvKiB1bnNpZ25lZCBmaWVsZCAqLworI2RlZmluZSBST1BfTUFYIDMJLyogYWxsb3cgbWF4aW11bSByYW5nZSBvZiBlaXRoZXIgc2lnbmVkIG9yIHVuc2lnbmVkICovCisKKy8qIEhvdyBkb2VzIHRoZSByZWxvY2F0aW9uIG9wZXJhdGlvbiB1c2UgdGhlIHN5bWJvbCByZWZlcmVuY2UgKi8KKyNkZWZpbmUgUk9QX0lHTgkwCQkvKiBubyBzeW1ib2wgaXMgcmVmZXJlbmNlZCAqLworI2RlZmluZSBST1BfTElUIDAJCS8qIHVzZSBycC0+VVZBTCBsaXRlcmFsIGZpZWxkICovCisjZGVmaW5lIFJPUF9TWU0JMQkJLyogc3ltYm9sIHZhbHVlIGlzIHVzZWQgaW4gcmVsb2NhdGlvbiAqLworI2RlZmluZSBST1BfU1lNRCAyCQkvKiBkZWx0YSB2YWx1ZSB2cyBsYXN0IGxpbmsgaXMgdXNlZCAqLworCisvKiBIb3cgZG9lcyB0aGUgcmVsb2Mgb3AgdXNlIHRoZSBzdGFjaz8gKi8KKyNkZWZpbmUgUlNUS19OIDAJCS8qIERvZXMgbm90IHVzZSAqLworI2RlZmluZSBSU1RLX1BPUCAxCQkvKiBEb2VzIGEgUE9QICovCisjZGVmaW5lIFJTVEtfVU9QIDIJCS8qIFVuYXJ5IG9wLCBzdGFjayBwb3NpdGlvbiB1bmFmZmVjdGVkICovCisjZGVmaW5lIFJTVEtfUFNIIDMJCS8qIERvZXMgYSBwdXNoICovCisKKy8qCisgKiBDb21wdXRhdGlvbmFsIGFjdGlvbnMgcGVyZm9ybWVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlcgorICovCitlbnVtIGRsb2FkX2FjdGlvbnMgeworCS8qIGRvbid0IGFsdGVyIHRoZSBjdXJyZW50IHZhbCAoZnJvbSBzdGFjayBvciBtZW0gZmV0Y2gpICovCisJUkFDVF9WQUwsCisJLyogc2V0IHZhbHVlIHRvIHJlZmVyZW5jZSBhbW91bnQgKGZyb20gc3ltYm9sIHJlZmVyZW5jZSkgKi8KKwlSQUNUX0FTR04sCisJUkFDVF9BREQsCQkvKiBhZGQgcmVmZXJlbmNlIHRvIHZhbHVlICovCisJUkFDVF9QQ1IsCQkvKiBhZGQgcmVmZXJlbmNlIG1pbnVzIFBDIGRlbHRhIHRvIHZhbHVlICovCisJUkFDVF9BRERJU1AsCQkvKiBhZGQgcmVmZXJlbmNlIHBsdXMgUl9ESVNQICovCisJUkFDVF9BU0dQQywJCS8qIHNldCB2YWx1ZSB0byBzZWN0aW9uIGFkZHIgcGx1cyByZWZlcmVuY2UgKi8KKworCVJBQ1RfUExVUywJCS8qIHN0YWNrICsgKi8KKwlSQUNUX1NVQiwJCS8qIHN0YWNrIC0gKi8KKwlSQUNUX05FRywJCS8qIHN0YWNrIHVuYXJ5IC0gKi8KKworCVJBQ1RfTVBZLAkJLyogc3RhY2sgKiAqLworCVJBQ1RfRElWLAkJLyogc3RhY2sgLyAqLworCVJBQ1RfTU9ELAkJLyogc3RhY2sgJSAqLworCisJUkFDVF9TUiwJCS8qIHN0YWNrIHVuc2lnbmVkID4+ICovCisJUkFDVF9BU1IsCQkvKiBzdGFjayBzaWduZWQgPj4gKi8KKwlSQUNUX1NMLAkJLyogc3RhY2sgPDwgKi8KKwlSQUNUX0FORCwJCS8qIHN0YWNrICYgKi8KKwlSQUNUX09SLAkJLyogc3RhY2sgfCAqLworCVJBQ1RfWE9SLAkJLyogc3RhY2sgXiAqLworCVJBQ1RfTk9ULAkJLyogc3RhY2sgfiAqLworCVJBQ1RfQzZTRUNULAkJLyogZm9yIEM2MCBSX1NFQ1Qgb3AgKi8KKwlSQUNUX0M2QkFTRSwJCS8qIGZvciBDNjAgUl9CQVNFIG9wICovCisJUkFDVF9DNkRTUEwsCQkvKiBmb3IgQzYwIHNjYWxlZCAxNS1iaXQgZGlzcGxhY2VtZW50ICovCisJUkFDVF9QQ1IyM1QJCS8qIGZvciBBUk0gVGh1bWIgbG9uZyBicmFuY2ggKi8KK307CisKKy8qCisgKiBtYWNyb3MgdXNlZCB0byBleHRyYWN0IHZhbHVlcworICovCisjZGVmaW5lIFJGVl9QT1NOKGFhYSkgKChhYWEpICYgMHhGKQorI2RlZmluZSBSRlZfV0lEVEgoYWFhKSAoKChhYWEpID4+IDQpICYgMHgzRikKKyNkZWZpbmUgUkZWX0FDVElPTihhYWEpICgoYWFhKSA+PiAxMCkKKworI2RlZmluZSBSRlZfU0lHTihpaWkpICgoKGlpaSkgPj4gMikgJiAweDMpCisjZGVmaW5lIFJGVl9TWU0oaWlpKSAoKChpaWkpID4+IDQpICYgMHgzKQorI2RlZmluZSBSRlZfU1RLKGlpaSkgKCgoaWlpKSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgUkZWX0FDQ1MoaWlpKSAoKGlpaSkgJiAweDMpCisKKyNpZiAoVE1TMzIwNjApCisjZGVmaW5lIFJGVl9TQ0FMRShpaWkpICgoaWlpKSA+PiAxMSkKKyNkZWZpbmUgUkZWX0JJR09GRihpaWkpICgoKGlpaSkgPj4gOCkgJiAweDcpCisjZWxzZQorI2RlZmluZSBSRlZfQklHT0ZGKGlpaSkgKChpaWkpID4+IDgpCisjZW5kaWYKKworI2VuZGlmIC8qIF9SRUxPQ19UQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvcmVsb2NfdGFibGVfYzYwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4YmMwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3JlbG9jX3RhYmxlX2M2MDAwLmMKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiByZWxvY190YWJsZV9jNjAwMC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qIFRhYmxlcyBnZW5lcmF0ZWQgZm9yIGM2MDAwICovCisKKyNkZWZpbmUgSEFTSF9GVU5DKHp6KSAoKCgoKHp6KSArIDEpICogMTg0NVVMKSA+PiAxMSkgJiA2MykKKyNkZWZpbmUgSEFTSF9MKHp6KSAoKHp6KSA+PiA4KQorI2RlZmluZSBIQVNIX0koenopICgoenopICYgMHhGRikKKworc3RhdGljIGNvbnN0IHUxNiByb3BfbWFwMVtdID0geworCTAsCisJMSwKKwkyLAorCTIwLAorCTQsCisJNSwKKwk2LAorCTE1LAorCTgwLAorCTgxLAorCTgyLAorCTgzLAorCTg0LAorCTg1LAorCTg2LAorCTg3LAorCTE3LAorCTE4LAorCTE5LAorCTIxLAorCTE2LAorCTE2Mzk0LAorCTE2NDA0LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTMyLAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTQwLAorCTExMiwKKwkxMTMsCisJNjU1MzUsCisJMTYzODQsCisJMTYzODUsCisJMTYzODYsCisJMTYzODcsCisJMTYzODgsCisJMTYzODksCisJMTYzOTAsCisJMTYzOTEsCisJMTYzOTIsCisJMTYzOTMsCisJMTYzOTUsCisJMTYzOTYsCisJMTYzOTcsCisJMTYzOTgsCisJMTYzOTksCisJMTY0MDAsCisJMTY0MDEsCisJMTY0MDIsCisJMTY0MDMsCisJMTY0MDUsCisJMTY0MDYsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUKK307CisKK3N0YXRpYyBjb25zdCBzMTYgcm9wX21hcDJbXSA9IHsKKwktMjU2LAorCS0yNTUsCisJLTI1NCwKKwktMjQ1LAorCS0yNTMsCisJLTI1MiwKKwktMjUxLAorCS0yNTAsCisJLTI0MSwKKwktMjQwLAorCS0yMzksCisJLTIzOCwKKwktMjM3LAorCS0yMzYsCisJMTgxMywKKwk1MTQyLAorCS0yNDgsCisJLTI0NywKKwk3NzgsCisJLTI0NCwKKwktMjQ5LAorCS0yMjEsCisJLTIxMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMSwKKwktMjQzLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0xLAorCS0yNDIsCisJLTIzMywKKwktMjMyLAorCS0xLAorCS0yMzEsCisJLTIzMCwKKwktMjI5LAorCS0yMjgsCisJLTIyNywKKwktMjI2LAorCS0yMjUsCisJLTIyNCwKKwktMjIzLAorCTU0MTAsCisJLTIyMCwKKwktMjE5LAorCS0yMTgsCisJLTIxNywKKwktMjE2LAorCS0yMTUsCisJLTIxNCwKKwktMjEzLAorCTU2NzYsCisJLTIxMCwKKwktMjA5LAorCS0xLAorCS0xLAorCS0xCit9OworCitzdGF0aWMgY29uc3QgdTE2IHJvcF9hY3Rpb25bXSA9IHsKKwkyNTYwLAorCTIzMDQsCisJMjMwNCwKKwkyNDMyLAorCTI0MzIsCisJMjU2MCwKKwkyMTc2LAorCTIzMDQsCisJMjU2MCwKKwkzMjAwLAorCTMzMjgsCisJMzU4NCwKKwkzNDU2LAorCTIzMDQsCisJNDIwOCwKKwkyMDc4OCwKKwkyMTgxMiwKKwkzNDE1LAorCTMyNDUsCisJMjMxMSwKKwk0MzU5LAorCTE5NzY0LAorCTIzMTEsCisJMzE5MSwKKwkzMjgwLAorCTY2NTYsCisJNzY4MCwKKwk4NzA0LAorCTk3MjgsCisJMTA3NTIsCisJMTE3NzYsCisJMTI4MDAsCisJMTM4MjQsCisJMTQ4NDgsCisJMTU4NzIsCisJMTY4OTYsCisJMTc5MjAsCisJMTg5NDQsCisJMCwKKwkwLAorCTAsCisJMCwKKwkxNTM2LAorCTE1MzYsCisJMTUzNiwKKwk1NjMyLAorCTUxMiwKKwkwCit9OworCitzdGF0aWMgY29uc3QgdTE2IHJvcF9pbmZvW10gPSB7CisJMCwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzNSwKKwkzOSwKKwkzOSwKKwkzOSwKKwkzOSwKKwkzNSwKKwkzNCwKKwkyODMsCisJMjk5LAorCTQxMzUsCisJNDM5MSwKKwkyOTEsCisJMzMwNTksCisJMjgzLAorCTI5NSwKKwk0NjQ3LAorCTQxMzUsCisJNjQsCisJNjQsCisJMTI4LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTY0LAorCTEyOCwKKwkyMDEsCisJMTk3LAorCTc0LAorCTcwLAorCTIwOCwKKwkxOTYsCisJMjAwLAorCTE5MiwKKwkxOTIsCisJNjYKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvdHJhbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQyMmVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvdHJhbXAuYwpAQCAtMCwwICsxLDExNDMgQEAKKy8qCisgKiB0cmFtcC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSAiaGVhZGVyLmgiCisKKyNpZiBUTVMzMjA2MAorI2luY2x1ZGUgInRyYW1wX3RhYmxlX2M2MDAwLmMiCisjZW5kaWYKKworI2RlZmluZSBNQVhfUkVMT1NfUEVSX1BBU1MJNAorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc2VjdF90Z3RfYWxsb2MKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IGZvciB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLiAgVGhlCisgKgkgIHRhcmdldCBtZW0gc2l6ZSBpcyBlYXNpbHkgb2J0YWluZWQgYXMgdGhlIG5leHQgYXZhaWxhYmxlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl90cmFtcF9zZWN0X3RndF9hbGxvYyhzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpbnQgcmV0X3ZhbCA9IDA7CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3RfaW5mbzsKKworCS8qICBQb3B1bGF0ZSB0aGUgdHJhbXBvbGluZSBsb2FkZXIgc2VjdGlvbiBhbmQgYWxsb2NhdGUgaXQgb24gdGhlCisJICogdGFyZ2V0LiAgVGhlIHNlY3Rpb24gbmFtZSBpcyBBTFdBWVMgdGhlIGZpcnN0IHN0cmluZyBpbiB0aGUgZmluYWwKKwkgKiBzdHJpbmcgdGFibGUgZm9yIHRyYW1wb2xpbmVzLiAgVGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBpcyBhbHdheXMKKwkgKiAxIGJleW9uZCB0aGUgdG90YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBzZWN0aW9ucy4gKi8KKwlzZWN0X2luZm8gPSAmZGx0aGlzLT5sZHJfc2VjdGlvbnNbZGx0aGlzLT5hbGxvY2F0ZWRfc2Vjbl9jb3VudF07CisKKwlzZWN0X2luZm8tPm5hbWUgPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZTsKKwlzZWN0X2luZm8tPnNpemUgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyOworCXNlY3RfaW5mby0+Y29udGV4dCA9IDA7CisJc2VjdF9pbmZvLT50eXBlID0KKwkgICAgKDQgPDwgOCkgfCBETE9BRF9URVhUIHwgRFNfQUxMT0NBVEVfTUFTSyB8IERTX0RPV05MT0FEX01BU0s7CisJc2VjdF9pbmZvLT5wYWdlID0gMDsKKwlzZWN0X2luZm8tPnJ1bl9hZGRyID0gMDsKKwlzZWN0X2luZm8tPmxvYWRfYWRkciA9IDA7CisJcmV0X3ZhbCA9IGRsdGhpcy0+bXlhbGxvYy0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teWFsbG9jLAorCQkJCQkJICBzZWN0X2luZm8sCisJCQkJCQkgIGRzX2FsaWdubWVudAorCQkJCQkJICAoc2VjdF9pbmZvLT50eXBlKSk7CisKKwlpZiAocmV0X3ZhbCA9PSAwKQorCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBmb3IiCisJCQkgICAgIiB0cmFtcG9saW5lIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X2gyYQorICogRGVzY3JpcHRpb246IEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgaGV4IHZhbHVlIHRvIGl0cyBBU0NJSQorICoJICByZXByZXNlbnRhdGlvbi4gIFVzZWQgZm9yIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgZ2VuZXJhdGlvbi4KKyAqLworc3RhdGljIHU4IHByaXZfaDJhKHU4IHZhbHVlKQoreworCWlmICh2YWx1ZSA+IDB4RikKKwkJcmV0dXJuIDB4RkY7CisKKwlpZiAodmFsdWUgPD0gOSkKKwkJdmFsdWUgKz0gMHgzMDsKKwllbHNlCisJCXZhbHVlICs9IDB4Mzc7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUKKyAqIERlc2NyaXB0aW9uOiBHZW5lcmF0ZSBhIHRyYW1wb2xpbmUgc3ltYm9sIG5hbWUgKEFTQ0lJKSB1c2luZyB0aGUgdmFsdWUKKyAqCSAgb2YgdGhlIHN5bWJvbC4gIFRoaXMgcGxhY2VzIHRoZSBuZXcgbmFtZSBpbnRvIHRoZSB1c2VyIGJ1ZmZlci4KKyAqCSAgVGhlIG5hbWUgaXMgZml4ZWQgaW4gbGVuZ3RoIGFuZCBvZiB0aGUgZm9ybTogX18kZGJUUl9feHh4eHh4eHgKKyAqCSAgKHdoZXJlICJ4eHh4eHh4eCIgaXMgdGhlIGhleCB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUodTMyIHZhbHVlLCBjaGFyICpkc3QpCit7CisJdTMyIGk7CisJY2hhciAqcHJlZml4ID0gVFJBTVBfU1lNX1BSRUZJWDsKKwljaGFyICpkc3RfbG9jYWwgPSBkc3Q7CisJdTggdG1wOworCisJLyogIENsZWFyIG91dCB0aGUgZGVzdGluYXRpb24sIGluY2x1ZGluZyB0aGUgZW5kaW5nIE5VTEwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKFRSQU1QX1NZTV9QUkVGSVhfTEVOICsgVFJBTVBfU1lNX0hFWF9BU0NJSV9MRU4pOyBpKyspCisJCSooZHN0X2xvY2FsICsgaSkgPSAwOworCisJLyogIENvcHkgdGhlIHByZWZpeCB0byBzdGFydCAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oVFJBTVBfU1lNX1BSRUZJWCk7IGkrKykgeworCQkqZHN0X2xvY2FsID0gKihwcmVmaXggKyBpKTsKKwkJZHN0X2xvY2FsKys7CisJfQorCisJLyogIE5vdyBjb252ZXJ0IHRoZSB2YWx1ZSBwYXNzZWQgaW4gdG8gYSBzdHJpbmcgZXF1aXYgb2YgdGhlIGhleCAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YodmFsdWUpOyBpKyspIHsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwkJdG1wID0gKigoKHU4ICopICZ2YWx1ZSkgKyAoc2l6ZW9mKHZhbHVlKSAtIDEpIC0gaSk7CisJCSpkc3RfbG9jYWwgPSBwcml2X2gyYSgodG1wICYgMHhGMCkgPj4gNCk7CisJCWRzdF9sb2NhbCsrOworCQkqZHN0X2xvY2FsID0gcHJpdl9oMmEodG1wICYgMHgwRik7CisJCWRzdF9sb2NhbCsrOworI2Vsc2UKKwkJdG1wID0gKigoKHU4ICopICZ2YWx1ZSkgKyBpKTsKKwkJKmRzdF9sb2NhbCA9IHByaXZfaDJhKCh0bXAgJiAweEYwKSA+PiA0KTsKKwkJZHN0X2xvY2FsKys7CisJCSpkc3RfbG9jYWwgPSBwcml2X2gyYSh0bXAgJiAweDBGKTsKKwkJZHN0X2xvY2FsKys7CisjZW5kaWYKKwl9CisKKwkvKiAgTlVMTCB0ZXJtaW5hdGUgKi8KKwkqZHN0X2xvY2FsID0gMDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3N0cmluZ19jcmVhdGUKKyAqIERlc2NyaXB0aW9uOiBDcmVhdGUgYSBuZXcgc3RyaW5nIHNwZWNpZmljIHRvIHRoZSB0cmFtcG9saW5lIGxvYWRpbmcgYW5kIGFkZAorICoJICBpdCB0byB0aGUgdHJhbXBvbGluZSBzdHJpbmcgbGlzdC4gIFRoaXMgbGlzdCBjb250YWlucyB0aGUKKyAqCSAgdHJhbXBvbGluZSBzZWN0aW9uIG5hbWUgYW5kIHRyYW1wb2xpbmUgcG9pbnQgc3ltYm9scy4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFtcF9zdHJpbmcgKnByaXZfdHJhbXBfc3RyaW5nX2NyZWF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywKKwkJCQkJCSAgICAgdTMyIHN0cl9sZW4sIGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpuZXdfc3RyaW5nID0gTlVMTDsKKwl1MzIgaTsKKworCS8qICBDcmVhdGUgYSBuZXcgc3RyaW5nIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZS4gKi8KKwluZXdfc3RyaW5nID0KKwkgICAgKHN0cnVjdCB0cmFtcF9zdHJpbmcgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCQkgKHNpemVvZgorCQkJCQkJCQkgIChzdHJ1Y3QKKwkJCQkJCQkJICAgdHJhbXBfc3RyaW5nKQorCQkJCQkJCQkgICsgc3RyX2xlbiArCisJCQkJCQkJCSAgMSkpOworCWlmIChuZXdfc3RyaW5nICE9IE5VTEwpIHsKKwkJLyogIENsZWFyIHRoZSBzdHJpbmcgZmlyc3QuICBUaGlzIGVuc3VyZXMgdGhlIGVuZGluZyBOVUxMIGlzCisJCSAqIHByZXNlbnQgYW5kIHRoZSBvcHRpbWl6ZXIgd29uJ3QgdG91Y2ggaXQuICovCisJCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHN0cnVjdCB0cmFtcF9zdHJpbmcpICsgc3RyX2xlbiArIDEpOworCQkgICAgIGkrKykKKwkJCSooKHU4ICopIG5ld19zdHJpbmcgKyBpKSA9IDA7CisKKwkJLyogIEFkZCB0aGlzIHN0cmluZyB0byBvdXIgdmlydHVhbCB0YWJsZSBieSBhc3NpZ25pbmcgaXQgdGhlCisJCSAqIG5leHQgaW5kZXggYW5kIHB1c2hpbmcgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuICovCisJCW5ld19zdHJpbmctPmluZGV4ID0gZGx0aGlzLT50cmFtcC50cmFtcF9zdHJpbmdfbmV4dF9pbmRleDsKKwkJZGx0aGlzLT50cmFtcC50cmFtcF9zdHJpbmdfbmV4dF9pbmRleCsrOworCQlkbHRoaXMtPnRyYW1wLnRyYW1wX3N0cmluZ19zaXplICs9IHN0cl9sZW4gKyAxOworCisJCW5ld19zdHJpbmctPm5leHQgPSBOVUxMOworCQlpZiAoZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9PSBOVUxMKQorCQkJZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9IG5ld19zdHJpbmc7CisJCWVsc2UKKwkJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwtPm5leHQgPSBuZXdfc3RyaW5nOworCisJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwgPSBuZXdfc3RyaW5nOworCisJCS8qICBDb3B5IHRoZSBzdHJpbmcgb3ZlciB0byB0aGUgbmV3IG9iamVjdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKQorCQkJbmV3X3N0cmluZy0+c3RyW2ldID0gc3RyW2ldOworCX0KKworCXJldHVybiBuZXdfc3RyaW5nOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3RyaW5nX2ZpbmQKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSB0cmFtcG9saW5lIHN0cmluZyBsaXN0IGFuZCBmaW5kIGEgbWF0Y2ggZm9yIHRoZQorICoJICBwcm92aWRlZCBzdHJpbmcuICBJZiBub3QgbWF0Y2ggaXMgZm91bmQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3RyaW5nICpwcml2X3RyYW1wX3N0cmluZ19maW5kKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJCQkJICAgY2hhciAqc3RyKQoreworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKmN1cl9zdHIgPSBOVUxMOworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKnJldF92YWwgPSBOVUxMOworCXUzMiBpOworCXUzMiBzdHJfbGVuID0gc3RybGVuKHN0cik7CisKKwlmb3IgKGN1cl9zdHIgPSBkbHRoaXMtPnRyYW1wLnN0cmluZ19oZWFkOworCSAgICAgKHJldF92YWwgPT0gTlVMTCkgJiYgKGN1cl9zdHIgIT0gTlVMTCk7IGN1cl9zdHIgPSBjdXJfc3RyLT5uZXh0KSB7CisJCS8qICBJZiB0aGUgc3RyaW5nIGxlbmd0aHMgYXJlbid0IGVxdWFsLCBkb24ndCBib3RoZXIKKwkJICogY29tcGFyaW5nICovCisJCWlmIChzdHJfbGVuICE9IHN0cmxlbihjdXJfc3RyLT5zdHIpKQorCQkJY29udGludWU7CisKKwkJLyogIFdhbGsgdGhlIHN0cmluZ3MgdW50aWwgb25lIG9mIHRoZW0gZW5kcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSsrKSB7CisJCQkvKiAgSWYgdGhleSBkb24ndCBtYXRjaCBpbiB0aGUgY3VycmVudCBwb3NpdGlvbiB0aGVuCisJCQkgKiBicmVhayBvdXQgbm93LCBubyBzZW5zZSBpbiBjb250aW51aW5nIHRvIGxvb2sgYXQKKwkJCSAqIHRoaXMgc3RyaW5nLiAqLworCQkJaWYgKHN0cltpXSAhPSBjdXJfc3RyLT5zdHJbaV0pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBzdHJfbGVuKQorCQkJcmV0X3ZhbCA9IGN1cl9zdHI7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl9zdHJpbmdfdGJsX2ZpbmFsaXplCisgKiBEZXNjcmlwdGlvbjogRmxhdHRlbiB0aGUgdHJhbXBvbGluZSBzdHJpbmcgbGlzdCBpbnRvIGEgdGFibGUgb2YgTlVMTAorICoJICB0ZXJtaW5hdGVkIHN0cmluZ3MuICBUaGlzIGlzIHRoZSBzYW1lIGZvcm1hdCBvZiBzdHJpbmcgdGFibGUKKyAqCSAgYXMgdXNlZCBieSB0aGUgQ09GRi9ET0ZGIGZpbGUuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl9zdHJpbmdfdGJsX2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpjdXJfc3RyaW5nOworCWNoYXIgKmN1cl9sb2M7CisJY2hhciAqdG1wOworCisJLyogIEFsbG9jYXRlIGVub3VnaCBzcGFjZSBmb3IgYWxsIHN0cmluZ3MgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gIFRoZQorCSAqIHRhYmxlIGlzIHNpbXBseSBhbGwgc3RyaW5ncyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgd2lsbCBOVUxMCisJICogZW5kaW5ncy4gKi8KKwlkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSA9CisJICAgIChjaGFyICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCSAgZGx0aGlzLT50cmFtcC4KKwkJCQkJCSAgdHJhbXBfc3RyaW5nX3NpemUpOworCWlmIChkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZSAhPSBOVUxMKSB7CisJCS8qICBXZSBnb3Qgb3VyIGJ1ZmZlciwgd2FsayB0aGUgbGlzdCBhbmQgcmVsZWFzZSB0aGUgbm9kZXMgYXMqCisJCSAqIHdlIGdvICovCisJCWN1cl9sb2MgPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N0cmluZ190YWJsZTsKKwkJY3VyX3N0cmluZyA9IGRsdGhpcy0+dHJhbXAuc3RyaW5nX2hlYWQ7CisJCXdoaWxlIChjdXJfc3RyaW5nICE9IE5VTEwpIHsKKwkJCS8qICBNb3ZlIHRoZSBoZWFkL3RhaWwgcG9pbnRlcnMgKi8KKwkJCWRsdGhpcy0+dHJhbXAuc3RyaW5nX2hlYWQgPSBjdXJfc3RyaW5nLT5uZXh0OworCQkJaWYgKGRsdGhpcy0+dHJhbXAuc3RyaW5nX3RhaWwgPT0gY3VyX3N0cmluZykKKwkJCQlkbHRoaXMtPnRyYW1wLnN0cmluZ190YWlsID0gTlVMTDsKKworCQkJLyogIENvcHkgdGhlIHN0cmluZyBjb250ZW50cyAqLworCQkJZm9yICh0bXAgPSBjdXJfc3RyaW5nLT5zdHI7CisJCQkgICAgICp0bXAgIT0gJ1wwJzsgdG1wKyssIGN1cl9sb2MrKykKKwkJCQkqY3VyX2xvYyA9ICp0bXA7CisKKwkJCS8qICBQaWNrIHVwIHRoZSBOVUxMIHRlcm1pbmF0aW9uIHNpbmNlIGl0IHdhcyBtaXNzZWQgYnkKKwkJCSAqIGJyZWFraW5nIHVzaW5nIGl0IHRvIGVuZCB0aGUgYWJvdmUgbG9vcC4gKi8KKwkJCSpjdXJfbG9jID0gJ1wwJzsKKwkJCWN1cl9sb2MrKzsKKworCQkJLyogIEZyZWUgdGhlIHN0cmluZyBub2RlLCB3ZSBkb24ndCBuZWVkIGl0IGFueSBtb3JlLiAqLworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJCWN1cl9zdHJpbmcpOworCisJCQkvKiAgTW92ZSBvdXIgcG9pbnRlciB0byB0aGUgbmV4dCBvbmUgKi8KKwkJCWN1cl9zdHJpbmcgPSBkbHRoaXMtPnRyYW1wLnN0cmluZ19oZWFkOworCQl9CisKKwkJLyogIFVwZGF0ZSBvdXIgcmV0dXJuIHZhbHVlIHRvIHN1Y2Nlc3MgKi8KKwkJcmV0X3ZhbCA9IDE7CisJfSBlbHNlCisJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkZhaWxlZCB0byBhbGxvY2F0ZSB0cmFtcG9saW5lICIKKwkJCSAgICAic3RyaW5nIHRhYmxlIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3NlY3RfYWxsb2MKKyAqIERlc2NyaXB0aW9uOiBWaXJ0dWFsbHkgYWxsb2NhdGUgc3BhY2UgZnJvbSB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLiAgVGhpcworICoJICBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IG9mZnNldCB3aXRoaW4gdGhlIHRyYW1wb2xpbmUgc2VjdGlvbgorICoJICB0aGF0IGlzIGF2YWlsYWJsZSBhbmQgbW92ZWQgdGhlIG5leHQgYXZhaWxhYmxlIG9mZnNldCBieSB0aGUKKyAqCSAgcmVxdWVzdGVkIHNpemUuICBOTyBUQVJHRVQgQUxMT0NBVElPTiBJUyBET05FIEFUIFRISVMgVElNRS4KKyAqLworc3RhdGljIHUzMiBwcml2X3RyYW1wX3NlY3RfYWxsb2Moc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHUzMiB0cmFtcF9zaXplKQoreworCXUzMiByZXRfdmFsOworCisJLyogIElmIHRoZSBuZXh0IGF2YWlsYWJsZSBhZGRyZXNzIGlzIDAsIHRoaXMgaXMgb3VyIGZpcnN0IGFsbG9jYXRpb24uCisJICogQ3JlYXRlIGEgc2VjdGlvbiBuYW1lIHN0cmluZyB0byBnbyBpbnRvIHRoZSBzdHJpbmcgdGFibGUgLiAqLworCWlmIChkbHRoaXMtPnRyYW1wLnRyYW1wX3NlY3RfbmV4dF9hZGRyID09IDApIHsKKwkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLCAiKioqIFdBUk5JTkcgKioqICBjcmVhdGVkICIKKwkJCQkgImR5bmFtaWMgVFJBTVBPTElORSBzZWN0aW9uIGZvciBtb2R1bGUgJXMiLAorCQkJCSBkbHRoaXMtPnN0cl9oZWFkKTsKKwl9CisKKwkvKiAgUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIG5ldyB0cmFtcG9saW5lICovCisJcmV0X3ZhbCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfc2VjdF9uZXh0X2FkZHI7CisJZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciArPSB0cmFtcF9zaXplOworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfdHJhbXBfc3ltX2NyZWF0ZQorICogRGVzY3JpcHRpb246IEFsbG9jYXRlIGFuZCBjcmVhdGUgYSBuZXcgdHJhbXBvbGluZSBzcGVjaWZpYyBzeW1ib2wgYW5kIGFkZAorICoJICBpdCB0byB0aGUgdHJhbXBvbGluZSBzeW1ib2wgbGlzdC4gIFRoZXNlIHN5bWJvbHMgd2lsbCBpbmNsdWRlCisgKgkgIHRyYW1wb2xpbmUgcG9pbnRzIGFzIHdlbGwgYXMgdGhlIGV4dGVybmFsIHN5bWJvbHMgdGhleQorICoJICByZWZlcmVuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3ltICpwcml2X3RyYW1wX3N5bV9jcmVhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICAgICB1MzIgc3RyX2luZGV4LAorCQkJCQkgICAgICAgc3RydWN0IGxvY2FsX3N5bWJvbCAqdG1wX3N5bSkKK3sKKwlzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfc3ltID0gTlVMTDsKKwl1MzIgaTsKKworCS8qICBBbGxvY2F0ZSBuZXcgc3BhY2UgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIHN5bWJvbCB0YWJsZS4gKi8KKwluZXdfc3ltID0KKwkgICAgKHN0cnVjdCB0cmFtcF9zeW0gKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHRyYW1wX3N5bSkpOworCWlmIChuZXdfc3ltICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSAhPSBzaXplb2Yoc3RydWN0IHRyYW1wX3N5bSk7IGkrKykKKwkJCSooKGNoYXIgKiluZXdfc3ltICsgaSkgPSAwOworCisJCS8qICBBc3NpZ24gdGhpcyBzeW1ib2wgdGhlIG5leHQgc3ltYm9sIGluZGV4IGZvciBlYXNpZXIKKwkJICogcmVmZXJlbmNlIGxhdGVyIGR1cmluZyByZWxvY2F0aW9uLiAqLworCQluZXdfc3ltLT5pbmRleCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfc3ltX25leHRfaW5kZXg7CisJCWRsdGhpcy0+dHJhbXAudHJhbXBfc3ltX25leHRfaW5kZXgrKzsKKworCQkvKiAgUG9wdWxhdGUgdGhlIHN5bWJvbCBpbmZvcm1hdGlvbi4gIEF0IHRoaXMgcG9pbnQgYW55CisJCSAqIHRyYW1wb2xpbmUgc3ltYm9scyB3aWxsIGJlIHRoZSBvZmZzZXQgbG9jYXRpb24sIG5vdCB0aGUKKwkJICogZmluYWwuICBDb3B5IG92ZXIgdGhlIHN5bWJvbCBpbmZvIHRvIHN0YXJ0LCB0aGVuIGJlIHN1cmUgdG8KKwkJICogZ2V0IHRoZSBzdHJpbmcgaW5kZXggZnJvbSB0aGUgdHJhbXBvbGluZSBzdHJpbmcgdGFibGUuICovCisJCW5ld19zeW0tPnN5bV9pbmZvID0gKnRtcF9zeW07CisJCW5ld19zeW0tPnN0cl9pbmRleCA9IHN0cl9pbmRleDsKKworCQkvKiAgUHVzaCB0aGUgbmV3IHN5bWJvbCB0byB0aGUgdGFpbCBvZiB0aGUgc3ltYm9sIHRhYmxlIGxpc3QgKi8KKwkJbmV3X3N5bS0+bmV4dCA9IE5VTEw7CisJCWlmIChkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID09IE5VTEwpCisJCQlkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID0gbmV3X3N5bTsKKwkJZWxzZQorCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbC0+bmV4dCA9IG5ld19zeW07CisKKwkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbCA9IG5ld19zeW07CisJfQorCisJcmV0dXJuIG5ld19zeW07Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZ2V0CisgKiBEZXNjcmlwdGlvbjogU2VhcmNoIGZvciB0aGUgc3ltYm9sIHdpdGggdGhlIG1hdGNoaW5nIHN0cmluZyBpbmRleCAoZnJvbQorICoJICB0aGUgdHJhbXBvbGluZSBzdHJpbmcgdGFibGUpIGFuZCByZXR1cm4gdGhlIHRyYW1wb2xpbmUKKyAqCSAgc3ltYm9sIG9iamVjdCwgaWYgZm91bmQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHJhbXBfc3ltICpwcml2X3RyYW1wX3N5bV9nZXQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICB1MzIgc3RyaW5nX2luZGV4KQoreworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bV9mb3VuZCA9IE5VTEw7CisKKwkvKiAgV2FsayB0aGUgc3ltYm9sIHRhYmxlIGxpc3QgYW5kIHNlYXJjaCB2cy4gdGhlIHN0cmluZyBpbmRleCAqLworCWZvciAoc3ltX2ZvdW5kID0gZGx0aGlzLT50cmFtcC5zeW1ib2xfaGVhZDsKKwkgICAgIHN5bV9mb3VuZCAhPSBOVUxMOyBzeW1fZm91bmQgPSBzeW1fZm91bmQtPm5leHQpIHsKKwkJaWYgKHN5bV9mb3VuZC0+c3RyX2luZGV4ID09IHN0cmluZ19pbmRleCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1fZm91bmQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZmluZAorICogRGVzY3JpcHRpb246IFNlYXJjaCBmb3IgYSB0cmFtcG9saW5lIHN5bWJvbCBiYXNlZCBvbiB0aGUgc3RyaW5nIG5hbWUgb2YKKyAqCSAgdGhlIHN5bWJvbC4gIFJldHVybiB0aGUgc3ltYm9sIG9iamVjdCwgaWYgZm91bmQsIG90aGVyd2lzZQorICoJICByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCB0cmFtcF9zeW0gKnByaXZfdHJhbXBfc3ltX2ZpbmQoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkJCSAgICAgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCB0cmFtcF9zeW0gKnN5bV9mb3VuZCA9IE5VTEw7CisJc3RydWN0IHRyYW1wX3N0cmluZyAqc3RyX2ZvdW5kID0gTlVMTDsKKworCS8qICBGaXJzdCwgc2VhcmNoIGZvciB0aGUgc3RyaW5nLCB0aGVuIHNlYXJjaCBmb3IgdGhlIHN5bSBiYXNlZCBvbiB0aGUKKwkgICBzdHJpbmcgaW5kZXguICovCisJc3RyX2ZvdW5kID0gcHJpdl90cmFtcF9zdHJpbmdfZmluZChkbHRoaXMsIHN0cmluZyk7CisJaWYgKHN0cl9mb3VuZCAhPSBOVUxMKQorCQlzeW1fZm91bmQgPSBwcml2X3RyYW1wX3N5bV9nZXQoZGx0aGlzLCBzdHJfZm91bmQtPmluZGV4KTsKKworCXJldHVybiBzeW1fZm91bmQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbjoJcHJpdl90cmFtcF9zeW1fZmluYWxpemUKKyAqIERlc2NyaXB0aW9uOiBBbGxvY2F0ZSBhIGZsYXQgc3ltYm9sIHRhYmxlIGZvciB0aGUgdHJhbXBvbGluZSBzZWN0aW9uLAorICoJICBwdXQgZWFjaCB0cmFtcG9saW5lIHN5bWJvbCBpbnRvIHRoZSB0YWJsZSwgYWRqdXN0IHRoZQorICoJICBzeW1ib2wgdmFsdWUgYmFzZWQgb24gdGhlIHNlY3Rpb24gYWRkcmVzcyBvbiB0aGUgdGFyZ2V0IGFuZAorICoJICBmcmVlIHRoZSB0cmFtcG9saW5lIHN5bWJvbCBsaXN0IG5vZGVzLgorICovCitzdGF0aWMgaW50IHByaXZfdHJhbXBfc3ltX2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpjdXJfc3ltOworCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICp0cmFtcF9zZWN0ID0KKwkgICAgJmRsdGhpcy0+bGRyX3NlY3Rpb25zW2RsdGhpcy0+YWxsb2NhdGVkX3NlY25fY291bnRdOworCXN0cnVjdCBsb2NhbF9zeW1ib2wgKm5ld19zeW07CisKKwkvKiAgQWxsb2NhdGUgYSB0YWJsZSB0byBob2xkIGEgZmxhdHRlbmVkIHZlcnNpb24gb2YgYWxsIHN5bWJvbHMKKwkgKiBjcmVhdGVkLiAqLworCWRsdGhpcy0+dHJhbXAuZmluYWxfc3ltX3RhYmxlID0KKwkgICAgKHN0cnVjdCBsb2NhbF9zeW1ib2wgKilkbHRoaXMtPm15c3ltLT5kbG9hZF9hbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCSAoc2l6ZW9mKHN0cnVjdCBsb2NhbF9zeW1ib2wpICogZGx0aGlzLT50cmFtcC4KKwkJCQkJCSAgdHJhbXBfc3ltX25leHRfaW5kZXgpKTsKKwlpZiAoZGx0aGlzLT50cmFtcC5maW5hbF9zeW1fdGFibGUgIT0gTlVMTCkgeworCQkvKiAgV2FsayB0aGUgbGlzdCBvZiBhbGwgc3ltYm9scywgY29weSBpdCBvdmVyIHRvIHRoZSBmbGF0dGVuZWQKKwkJICogdGFibGUuIEFmdGVyIGl0IGhhcyBiZWVuIGNvcGllZCwgdGhlIG5vZGUgY2FuIGJlIGZyZWVkIGFzCisJCSAqIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuICovCisJCW5ld19zeW0gPSBkbHRoaXMtPnRyYW1wLmZpbmFsX3N5bV90YWJsZTsKKwkJY3VyX3N5bSA9IGRsdGhpcy0+dHJhbXAuc3ltYm9sX2hlYWQ7CisJCXdoaWxlIChjdXJfc3ltICE9IE5VTEwpIHsKKwkJCS8qICBQb3AgaXQgb2ZmIHRoZSBsaXN0ICovCisJCQlkbHRoaXMtPnRyYW1wLnN5bWJvbF9oZWFkID0gY3VyX3N5bS0+bmV4dDsKKwkJCWlmIChjdXJfc3ltID09IGRsdGhpcy0+dHJhbXAuc3ltYm9sX3RhaWwpCisJCQkJZGx0aGlzLT50cmFtcC5zeW1ib2xfdGFpbCA9IE5VTEw7CisKKwkJCS8qICBDb3B5IHRoZSBzeW1ib2wgY29udGVudHMgaW50byB0aGUgZmxhdCB0YWJsZSAqLworCQkJKm5ld19zeW0gPSBjdXJfc3ltLT5zeW1faW5mbzsKKworCQkJLyogIE5vdyBmaW5haXplIHRoZSBzeW1ib2wuICBJZiBpdCBpcyBpbiB0aGUgdHJhbXAKKwkJCSAqIHNlY3Rpb24sIHdlIG5lZWQgdG8gYWRqdXN0IGZvciB0aGUgc2VjdGlvbiBzdGFydC4KKwkJCSAqIElmIGl0IGlzIGV4dGVybmFsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhZGp1c3QgYXQKKwkJCSAqIGFsbC4KKwkJCSAqIE5PVEU6IFRISVMgQ09ERSBBU1NVTUVTIFRIQVQgVEhFIFRSQU1QT0xJTkUgSVMKKwkJCSAqIFJFRkVSRU5DRUQgTElLRSBBIENBTEwgVE8gQU4gRVhURVJOQUwgU08gVkFMVUUgQU5ECisJCQkgKiBERUxUQSBBUkUgVEhFIFNBTUUuICBTRUUgVEhFIEZVTkNUSU9OIGRsb2FkX3N5bWJvbHMKKwkJCSAqIFdIRVJFIEROX1VOREVGIElTIEhBTkRMRUQgRk9SIE1PUkUgUkVGRVJFTkNFLiAqLworCQkJaWYgKG5ld19zeW0tPnNlY25uIDwgMCkgeworCQkJCW5ld19zeW0tPnZhbHVlICs9IHRyYW1wX3NlY3QtPmxvYWRfYWRkcjsKKwkJCQluZXdfc3ltLT5kZWx0YSA9IG5ld19zeW0tPnZhbHVlOworCQkJfQorCisJCQkvKiAgTGV0IGdvIG9mIHRoZSBzeW1ib2wgbm9kZSAqLworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfc3ltKTsKKworCQkJLyogIE1vdmUgdG8gdGhlIG5leHQgbm9kZSAqLworCQkJY3VyX3N5bSA9IGRsdGhpcy0+dHJhbXAuc3ltYm9sX2hlYWQ7CisJCQluZXdfc3ltKys7CisJCX0KKworCQlyZXRfdmFsID0gMTsKKwl9IGVsc2UKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRmFpbGVkIHRvIGFsbG9jIHRyYW1wb2xpbmUgc3ltIHRhYmxlIik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RndF9pbWdfZ2VuCisgKiBEZXNjcmlwdGlvbjogQWxsb2NhdGUgc3RvcmFnZSBmb3IgYW5kIGNvcHkgdGhlIHRhcmdldCBzcGVjaWZpYyBpbWFnZSBkYXRhCisgKglhbmQgZml4IHVwIGl0cyByZWxvY2F0aW9ucyBmb3IgdGhlIG5ldyBleHRlcm5hbCBzeW1ib2wuICBJZgorICoJYSB0cmFtcG9saW5lIGltYWdlIHBhY2tldCB3YXMgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgaXQgaXMgYWRkZWQKKyAqCXRvIHRoZSB0cmFtcG9saW5lIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgcHJpdl90Z3RfaW1nX2dlbihzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgdTMyIGJhc2UsCisJCQkgICAgdTMyIGdlbl9pbmRleCwgc3RydWN0IHRyYW1wX3N5bSAqbmV3X2V4dF9zeW0pCit7CisJc3RydWN0IHRyYW1wX2ltZ19wa3QgKm5ld19pbWdfcGt0ID0gTlVMTDsKKwl1MzIgaTsKKwl1MzIgcGt0X3NpemUgPSB0cmFtcF9pbWdfcGt0X3NpemVfZ2V0KCk7CisJdTggKmdlbl90YmxfZW50cnk7CisJdTggKnBrdF9kYXRhOworCXN0cnVjdCByZWxvY19yZWNvcmRfdCAqY3VyX3JlbG87CisJaW50IHJldF92YWwgPSAwOworCisJLyogIEFsbG9jYXRlIGEgbmV3IGltYWdlIHBhY2tldCBhbmQgc2V0IGl0IHVwLiAqLworCW5ld19pbWdfcGt0ID0KKwkgICAgKHN0cnVjdCB0cmFtcF9pbWdfcGt0ICopZGx0aGlzLT5teXN5bS0+ZGxvYWRfYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwKKwkJCQkJCQkJICBwa3Rfc2l6ZSk7CisJaWYgKG5ld19pbWdfcGt0ICE9IE5VTEwpIHsKKwkJLyogIFNhdmUgdGhlIGJhc2UsIHRoaXMgaXMgd2hlcmUgaXQgZ29lcyBpbiB0aGUgc2VjdGlvbiAqLworCQluZXdfaW1nX3BrdC0+YmFzZSA9IGJhc2U7CisKKwkJLyogIENvcHkgb3ZlciB0aGUgaW1hZ2UgZGF0YSBhbmQgcmVsb3MgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlICovCisJCXBrdF9kYXRhID0gKHU4ICopICZuZXdfaW1nX3BrdC0+aGRyOworCQlnZW5fdGJsX2VudHJ5ID0gKHU4ICopICZ0cmFtcF9nZW5faW5mb1tnZW5faW5kZXhdOworCQlmb3IgKGkgPSAwOyBpIDwgcGt0X3NpemU7IGkrKykgeworCQkJKnBrdF9kYXRhID0gKmdlbl90YmxfZW50cnk7CisJCQlwa3RfZGF0YSsrOworCQkJZ2VuX3RibF9lbnRyeSsrOworCQl9CisKKwkJLyogIFVwZGF0ZSB0aGUgcmVsb2NhdGlvbnMgdG8gcG9pbnQgdG8gdGhlIGV4dGVybmFsIHN5bWJvbCAqLworCQljdXJfcmVsbyA9CisJCSAgICAoc3RydWN0IHJlbG9jX3JlY29yZF90ICopKCh1OCAqKSAmbmV3X2ltZ19wa3QtPmhkciArCisJCQkJCSAgICAgIG5ld19pbWdfcGt0LT5oZHIucmVsb19vZmZzZXQpOworCQlmb3IgKGkgPSAwOyBpIDwgbmV3X2ltZ19wa3QtPmhkci5udW1fcmVsb3M7IGkrKykKKwkJCWN1cl9yZWxvW2ldLlNZTU5EWCA9IG5ld19leHRfc3ltLT5pbmRleDsKKworCQkvKiAgQWRkIGl0IHRvIHRoZSB0cmFtcG9saW5lIGxpc3QuICovCisJCW5ld19pbWdfcGt0LT5uZXh0ID0gZGx0aGlzLT50cmFtcC50cmFtcF9wa3RzOworCQlkbHRoaXMtPnRyYW1wLnRyYW1wX3BrdHMgPSBuZXdfaW1nX3BrdDsKKworCQlyZXRfdmFsID0gMTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3BrdF9yZWxvCisgKiBEZXNjcmlwdGlvbjogVGFrZSB0aGUgcHJvdmlkZWQgaW1hZ2UgZGF0YSBhbmQgdGhlIGNvbGxlY3Rpb24gb2YgcmVsb2NhdGlvbnMKKyAqCSAgZm9yIGl0IGFuZCBwZXJmb3JtIHRoZSByZWxvY2F0aW9ucy4gIE5vdGUgdGhhdCBhbGwgcmVsb2NhdGlvbnMKKyAqCSAgYXQgdGhpcyBzdGFnZSBhcmUgY29uc2lkZXJlZCBTRUNPTkQgUEFTUyBzaW5jZSB0aGUgb3JpZ2luYWwKKyAqCSAgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgaW4gdGhlIGZpcnN0IHBhc3MuICBUaGlzIG1lYW5zCisgKgkgIFRSQU1QT0xJTkVTIEFSRSBUUkVBVEVEIEFTIDJORCBQQVNTIGV2ZW4gdGhvdWdoIHRoaXMgaXMgcmVhbGx5CisgKgkgIHRoZSBmaXJzdCAoYW5kIG9ubHkpIHJlbG9jYXRpb24gdGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvbiB0aGVtLgorICovCitzdGF0aWMgaW50IHByaXZfcGt0X3JlbG8oc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHRndF9hdV90ICogZGF0YSwKKwkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwW10sIHUzMiByZWxvX2NvdW50KQoreworCWludCByZXRfdmFsID0gMTsKKwl1MzIgaTsKKwlib29sIHRtcDsKKworCS8qICBXYWxrIHRocm91Z2ggYWxsIG9mIHRoZSByZWxvcyBhbmQgcHJvY2VzcyB0aGVtLiAgVGhpcyBmdW5jdGlvbiBpcworCSAqIHRoZSBlcXVpdmFsZW50IG9mIHJlbG9jYXRlX3BhY2tldCgpIGZyb20gY2xvYWQuYywgYnV0IHNwZWNpYWxpemVkCisJICogZm9yIHRyYW1wb2xpbmVzIGFuZCAybmQgcGhhc2UgcmVsb2NhdGlvbnMuICovCisJZm9yIChpID0gMDsgaSA8IHJlbG9fY291bnQ7IGkrKykKKwkJZGxvYWRfcmVsb2NhdGUoZGx0aGlzLCBkYXRhLCBycFtpXSwgJnRtcCwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X3RyYW1wX3BrdF9maW5hbGl6ZQorICogRGVzY3JpcHRpb246IFdhbGsgdGhlIGxpc3Qgb2YgYWxsIHRyYW1wb2xpbmUgcGFja2V0cyBhbmQgZmluYWxpemUgdGhlbS4KKyAqCSAgRWFjaCB0cmFtcG9saW5lIGltYWdlIHBhY2tldCB3aWxsIGJlIHJlbG9jYXRlZCBub3cgdGhhdCB0aGUKKyAqCSAgdHJhbXBvbGluZSBzZWN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBvbiB0aGUgdGFyZ2V0LiAgT25jZQorICoJICBhbGwgb2YgdGhlIHJlbG9jYXRpb25zIGFyZSBkb25lIHRoZSB0cmFtcG9saW5lIGltYWdlIGRhdGEKKyAqCSAgaXMgd3JpdHRlbiBpbnRvIHRhcmdldCBtZW1vcnkgYW5kIHRoZSB0cmFtcG9saW5lIHBhY2tldAorICoJICBpcyBmcmVlZDogaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhZnRlciB0aGlzIHBvaW50LgorICovCitzdGF0aWMgaW50IHByaXZfdHJhbXBfcGt0X2ZpbmFsaXplKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzKQoreworCWludCByZXRfdmFsID0gMTsKKwlzdHJ1Y3QgdHJhbXBfaW1nX3BrdCAqY3VyX3BrdCA9IE5VTEw7CisJc3RydWN0IHJlbG9jX3JlY29yZF90ICpyZWxvc1tNQVhfUkVMT1NfUEVSX1BBU1NdOworCXUzMiByZWxvc19kb25lOworCXUzMiBpOworCXN0cnVjdCByZWxvY19yZWNvcmRfdCAqY3VyX3JlbG87CisJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3RfaW5mbyA9CisJICAgICZkbHRoaXMtPmxkcl9zZWN0aW9uc1tkbHRoaXMtPmFsbG9jYXRlZF9zZWNuX2NvdW50XTsKKworCS8qICBXYWxrIHRoZSBsaXN0IG9mIHRyYW1wb2xpbmUgcGFja2V0cyBhbmQgcmVsb2NhdGUgZWFjaCBwYWNrZXQuICBUaGlzCisJICogZnVuY3Rpb24gaXMgdGhlIHRyYW1wb2xpbmUgZXF1aXZhbGVudCBvZiBkbG9hZF9kYXRhKCkgZnJvbQorCSAqIGNsb2FkLmMuICovCisJY3VyX3BrdCA9IGRsdGhpcy0+dHJhbXAudHJhbXBfcGt0czsKKwl3aGlsZSAoKHJldF92YWwgIT0gMCkgJiYgKGN1cl9wa3QgIT0gTlVMTCkpIHsKKwkJLyogIFJlbW92ZSB0aGUgcGt0IGZyb20gdGhlIGxpc3QgKi8KKwkJZGx0aGlzLT50cmFtcC50cmFtcF9wa3RzID0gY3VyX3BrdC0+bmV4dDsKKworCQkvKiAgU2V0dXAgc2VjdGlvbiBhbmQgaW1hZ2Ugb2Zmc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgcmVsbyAqLworCQlkbHRoaXMtPmltYWdlX3NlY24gPSBzZWN0X2luZm87CisJCWRsdGhpcy0+aW1hZ2Vfb2Zmc2V0ID0gY3VyX3BrdC0+YmFzZTsKKwkJZGx0aGlzLT5kZWx0YV9ydW5hZGRyID0gc2VjdF9pbmZvLT5ydW5fYWRkcjsKKworCQkvKiAgV2FsayB0aHJvdWdoIGFsbCByZWxvcyBmb3IgdGhlIHBhY2tldCAqLworCQlyZWxvc19kb25lID0gMDsKKwkJY3VyX3JlbG8gPSAoc3RydWN0IHJlbG9jX3JlY29yZF90ICopKCh1OCAqKSAmY3VyX3BrdC0+aGRyICsKKwkJCQkJCSAgICAgY3VyX3BrdC0+aGRyLnJlbG9fb2Zmc2V0KTsKKwkJd2hpbGUgKHJlbG9zX2RvbmUgPCBjdXJfcGt0LT5oZHIubnVtX3JlbG9zKSB7CisjaWZkZWYgRU5BQkxFX1RSQU1QX0RFQlVHCisJCQlkbG9hZF9zeW1zX2Vycm9yKGRsdGhpcy0+bXlzeW0sCisJCQkJCSAiPT09PiBUcmFtcG9saW5lICV4IGJyYW5jaGVzIHRvICV4IiwKKwkJCQkJIHNlY3RfaW5mby0+cnVuX2FkZHIgKworCQkJCQkgZGx0aGlzLT5pbWFnZV9vZmZzZXQsCisJCQkJCSBkbHRoaXMtPgorCQkJCQkgdHJhbXAuZmluYWxfc3ltX3RhYmxlW2N1cl9yZWxvLT4KKwkJCQkJCQkgICAgICAgU1lNTkRYXS52YWx1ZSk7CisjZW5kaWYKKworCQkJZm9yIChpID0gMDsKKwkJCSAgICAgKChpIDwgTUFYX1JFTE9TX1BFUl9QQVNTKSAmJgorCQkJICAgICAgKChpICsgcmVsb3NfZG9uZSkgPCBjdXJfcGt0LT5oZHIubnVtX3JlbG9zKSk7IGkrKykKKwkJCQlyZWxvc1tpXSA9IGN1cl9yZWxvICsgaTsKKworCQkJLyogIERvIHRoZSBhY3R1YWwgcmVsbyAqLworCQkJcmV0X3ZhbCA9IHByaXZfcGt0X3JlbG8oZGx0aGlzLAorCQkJCQkJKHRndF9hdV90ICopICZjdXJfcGt0LT5wYXlsb2FkLAorCQkJCQkJcmVsb3MsIGkpOworCQkJaWYgKHJldF92YWwgPT0gMCkgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJSZWxvY2F0aW9uIG9mIHRyYW1wb2xpbmUgcGt0IGF0ICV4IgorCQkJCQkgICAgIiBmYWlsZWQiLCBjdXJfcGt0LT5iYXNlICsKKwkJCQkJICAgIHNlY3RfaW5mby0+cnVuX2FkZHIpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlyZWxvc19kb25lICs9IGk7CisJCQljdXJfcmVsbyArPSBpOworCQl9CisKKwkJLyogIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgaGl0IGEgcHJvYmxlbSAqLworCQlpZiAocmV0X3ZhbCAhPSAwKSB7CisJCQkvKiAgUmVsb3MgYXJlIGRvbmUgZm9yIHRoZSBwYWNrZXQsIHdyaXRlIGl0IHRvIHRoZQorCQkJICogdGFyZ2V0ICovCisJCQlyZXRfdmFsID0gZGx0aGlzLT5teWlvLT53cml0ZW1lbShkbHRoaXMtPm15aW8sCisJCQkJCQkJICZjdXJfcGt0LT5wYXlsb2FkLAorCQkJCQkJCSBzZWN0X2luZm8tPmxvYWRfYWRkciArCisJCQkJCQkJIGN1cl9wa3QtPmJhc2UsCisJCQkJCQkJIHNlY3RfaW5mbywKKwkJCQkJCQkgQllURV9UT19IT1NUCisJCQkJCQkJIChjdXJfcGt0LT5oZHIuCisJCQkJCQkJICB0cmFtcF9jb2RlX3NpemUpKTsKKwkJCWlmIChyZXRfdmFsID09IDApIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsCisJCQkJCSAgICAiV3JpdGUgdG8gIiBGTVRfVUkzMiAiIGZhaWxlZCIsCisJCQkJCSAgICBzZWN0X2luZm8tPmxvYWRfYWRkciArCisJCQkJCSAgICBjdXJfcGt0LT5iYXNlKTsKKwkJCX0KKworCQkJLyogIERvbmUgd2l0aCB0aGUgcGt0LCBsZXQgaXQgZ28gKi8KKwkJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX3BrdCk7CisKKwkJCS8qICBHZXQgdGhlIG5leHQgcGFja2V0IHRvIHByb2Nlc3MgKi8KKwkJCWN1cl9wa3QgPSBkbHRoaXMtPnRyYW1wLnRyYW1wX3BrdHM7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglwcml2X2R1cF9wa3RfZmluYWxpemUKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSBsaXN0IG9mIGR1cGxpY2F0ZSBpbWFnZSBwYWNrZXRzIGFuZCBmaW5hbGl6ZSB0aGVtLgorICoJICBFYWNoIGR1cGxpY2F0ZSBwYWNrZXQgd2lsbCBiZSByZWxvY2F0ZWQgYWdhaW4gZm9yIHRoZQorICoJICByZWxvY2F0aW9ucyB0aGF0IHByZXZpb3VzbHkgZmFpbGVkIGFuZCBoYXZlIGJlZW4gYWRqdXN0ZWQKKyAqCSAgdG8gcG9pbnQgYXQgYSB0cmFtcG9saW5lLiAgT25jZSBhbGwgcmVsb2NhdGlvbnMgZm9yIGEgcGFja2V0CisgKgkgIGhhdmUgYmVlbiBkb25lLCB3cml0ZSB0aGUgcGFja2V0IGludG8gdGFyZ2V0IG1lbW9yeS4gIFRoZQorICoJICBkdXBsaWNhdGUgcGFja2V0IGFuZCBpdHMgcmVsb2NhdGlvbiBjaGFpbiBhcmUgYWxsIGZyZWVkCisgKgkgIGFmdGVyIHVzZSBoZXJlIGFzIHRoZXkgYXJlIG5vIGxvbmdlciBuZWVkZWQgYWZ0ZXIgdGhpcy4KKyAqLworc3RhdGljIGludCBwcml2X2R1cF9wa3RfZmluYWxpemUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMpCit7CisJaW50IHJldF92YWwgPSAxOworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqY3VyX3BrdDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpjdXJfcmVsbzsKKwlzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJlbG9zW01BWF9SRUxPU19QRVJfUEFTU107CisJc3RydWN0IGRvZmZfc2NuaGRyX3QgKnNlY3RfaGRyID0gTlVMTDsKKwlzMzIgaTsKKworCS8qIFNpbWlsYXIgdG8gdGhlIHRyYW1wb2xpbmUgcGt0IGZpbmFsaXplLCB0aGlzIGZ1bmN0aW9uIHdhbGtzIGVhY2ggZHVwCisJICogcGt0IHRoYXQgd2FzIGdlbmVyYXRlZCBhbmQgcGVyZm9ybXMgYWxsIHJlbG9jYXRpb25zIHRoYXQgd2VyZQorCSAqIGRlZmVycmVkIHRvIGEgMm5kIHBhc3MuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGRsb2FkX2RhdGEoKSBmcm9tCisJICogY2xvYWQuYywgYnV0IGRvZXMgbm90IG5lZWQgdGhlIGFkZGl0aW9uYWwgcmVvcmRlciBhbmQgY2hlY2tzdW0KKwkgKiBwcm9jZXNzaW5nIGFzIGl0IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4gKi8KKwljdXJfcGt0ID0gZGx0aGlzLT50cmFtcC5kdXBfcGt0czsKKwl3aGlsZSAoKHJldF92YWwgIT0gMCkgJiYgKGN1cl9wa3QgIT0gTlVMTCkpIHsKKwkJLyogIFJlbW92ZSB0aGUgbm9kZSBmcm9tIHRoZSBsaXN0LCB3ZSdsbCBiZSBmcmVlaW5nIGl0CisJCSAqIHNob3J0bHkgKi8KKwkJZGx0aGlzLT50cmFtcC5kdXBfcGt0cyA9IGN1cl9wa3QtPm5leHQ7CisKKwkJLyogIFNldHVwIHRoZSBzZWN0aW9uIGFuZCBpbWFnZSBvZmZzZXQgZm9yIHJlbG9jYXRpb24gKi8KKwkJZGx0aGlzLT5pbWFnZV9zZWNuID0gJmRsdGhpcy0+bGRyX3NlY3Rpb25zW2N1cl9wa3QtPnNlY25uXTsKKwkJZGx0aGlzLT5pbWFnZV9vZmZzZXQgPSBjdXJfcGt0LT5vZmZzZXQ7CisKKwkJLyogIEluIG9yZGVyIHRvIGdldCB0aGUgZGVsdGEgcnVuIGFkZHJlc3MsIHdlIG5lZWQgdG8gcmVmZXJlbmNlCisJCSAqIHRoZSBvcmlnaW5hbCBzZWN0aW9uIGhlYWRlci4gIEl0J3MgYSBiaXQgdWdseSwgYnV0IG5lZWRlZAorCQkgKiBmb3IgcmVsby4gKi8KKwkJaSA9IChzMzIpIChkbHRoaXMtPmltYWdlX3NlY24gLSBkbHRoaXMtPmxkcl9zZWN0aW9ucyk7CisJCXNlY3RfaGRyID0gZGx0aGlzLT5zZWN0X2hkcnMgKyBpOworCQlkbHRoaXMtPmRlbHRhX3J1bmFkZHIgPSBzZWN0X2hkci0+ZHNfcGFkZHI7CisKKwkJLyogIFdhbGsgYWxsIHJlbG9zIGluIHRoZSBjaGFpbiBhbmQgcHJvY2VzcyBlYWNoLiAqLworCQljdXJfcmVsbyA9IGN1cl9wa3QtPnJlbG9fY2hhaW47CisJCXdoaWxlIChjdXJfcmVsbyAhPSBOVUxMKSB7CisJCQkvKiAgUHJvY2VzcyB0aGVtIGEgY2h1bmsgYXQgYSB0aW1lIHRvIGJlIGVmZmljaWVudCAqLworCQkJZm9yIChpID0gMDsgKGkgPCBNQVhfUkVMT1NfUEVSX1BBU1MpCisJCQkgICAgICYmIChjdXJfcmVsbyAhPSBOVUxMKTsKKwkJCSAgICAgaSsrLCBjdXJfcmVsbyA9IGN1cl9yZWxvLT5uZXh0KSB7CisJCQkJcmVsb3NbaV0gPSAmY3VyX3JlbG8tPnJlbG87CisJCQkJY3VyX3BrdC0+cmVsb19jaGFpbiA9IGN1cl9yZWxvLT5uZXh0OworCQkJfQorCisJCQkvKiAgRG8gdGhlIGFjdHVhbCByZWxvICovCisJCQlyZXRfdmFsID0gcHJpdl9wa3RfcmVsbyhkbHRoaXMsCisJCQkJCQljdXJfcGt0LT5pbWdfcGt0LmltZ19kYXRhLAorCQkJCQkJcmVsb3MsIGkpOworCQkJaWYgKHJldF92YWwgPT0gMCkgeworCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywKKwkJCQkJICAgICJSZWxvY2F0aW9uIG9mIGR1cCBwa3QgYXQgJXgiCisJCQkJCSAgICAiIGZhaWxlZCIsIGN1cl9wa3QtPm9mZnNldCArCisJCQkJCSAgICBkbHRoaXMtPmltYWdlX3NlY24tPnJ1bl9hZGRyKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogIFJlbGVhc2UgYWxsIG9mIHRoZXNlIHJlbG9zLCB3ZSdyZSBkb25lIHdpdGggdGhlbSAqLworCQkJd2hpbGUgKGkgPiAwKSB7CisJCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJR0VUX0NPTlRBSU5FUgorCQkJCQkJKHJlbG9zW2kgLSAxXSwKKwkJCQkJCSBzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvLAorCQkJCQkJIHJlbG8pKTsKKwkJCQlpLS07CisJCQl9CisKKwkJCS8qICBETyBOT1QgQURWQU5DRSBjdXJfcmVsbywgSVQgSVMgQUxSRUFEWSBSRUFEWSBUTworCQkJICogR08hICovCisJCX0KKworCQkvKiBEb25lIHdpdGggYWxsIHJlbG9zLiAgTWFrZSBzdXJlIHdlIGRpZG4ndCBoYXZlIGEgcHJvYmxlbSBhbmQKKwkJICogd3JpdGUgaXQgb3V0IHRvIHRoZSB0YXJnZXQgKi8KKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJcmV0X3ZhbCA9IGRsdGhpcy0+bXlpby0+d3JpdGVtZW0oZGx0aGlzLT5teWlvLAorCQkJCQkJCSBjdXJfcGt0LT5pbWdfcGt0LgorCQkJCQkJCSBpbWdfZGF0YSwKKwkJCQkJCQkgZGx0aGlzLT5pbWFnZV9zZWNuLT4KKwkJCQkJCQkgbG9hZF9hZGRyICsKKwkJCQkJCQkgY3VyX3BrdC0+b2Zmc2V0LAorCQkJCQkJCSBkbHRoaXMtPmltYWdlX3NlY24sCisJCQkJCQkJIEJZVEVfVE9fSE9TVAorCQkJCQkJCSAoY3VyX3BrdC0+aW1nX3BrdC4KKwkJCQkJCQkgIHBhY2tldF9zaXplKSk7CisJCQlpZiAocmV0X3ZhbCA9PSAwKSB7CisJCQkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJCQkgICAgIldyaXRlIHRvICIgRk1UX1VJMzIgIiBmYWlsZWQiLAorCQkJCQkgICAgZGx0aGlzLT5pbWFnZV9zZWNuLT5sb2FkX2FkZHIgKworCQkJCQkgICAgY3VyX3BrdC0+b2Zmc2V0KTsKKwkJCX0KKworCQkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfcGt0KTsKKworCQkJLyogIEFkdmFuY2UgdG8gdGhlIG5leHQgcGFja2V0ICovCisJCQljdXJfcGt0ID0gZGx0aGlzLT50cmFtcC5kdXBfcGt0czsKKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfZHVwX2ZpbmQKKyAqIERlc2NyaXB0aW9uOiBXYWxrIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGR1cGxpY2F0ZSBwYWNrZXRzIGFuZCBmaW5kIGEKKyAqCSAgbWF0Y2ggYmFzZWQgb24gdGhlIHNlY3Rpb24gbnVtYmVyIGFuZCBpbWFnZSBvZmZzZXQuICBSZXR1cm4KKyAqCSAgdGhlIGR1cGxpY2F0ZSBwYWNrZXQgaWYgZm91bmQsIG90aGVyd2lzZSBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpwcml2X2R1cF9maW5kKHN0cnVjdCBkbG9hZF9zdGF0ZSAqZGx0aGlzLAorCQkJCQkgICAgICAgczE2IHNlY25uLCB1MzIgaW1hZ2Vfb2Zmc2V0KQoreworCXN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCAqY3VyX3BrdCA9IE5VTEw7CisKKwlmb3IgKGN1cl9wa3QgPSBkbHRoaXMtPnRyYW1wLmR1cF9wa3RzOworCSAgICAgY3VyX3BrdCAhPSBOVUxMOyBjdXJfcGt0ID0gY3VyX3BrdC0+bmV4dCkgeworCQlpZiAoKGN1cl9wa3QtPnNlY25uID09IHNlY25uKSAmJgorCQkgICAgKGN1cl9wa3QtPm9mZnNldCA9PSBpbWFnZV9vZmZzZXQpKSB7CisJCQkvKiAgRm91bmQgYSBtYXRjaCwgYnJlYWsgb3V0ICovCisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBjdXJfcGt0OworfQorCisvKgorICogRnVuY3Rpb246CXByaXZfaW1nX3BrdF9kdXAKKyAqIERlc2NyaXB0aW9uOiBEdXBsaWNhdGUgdGhlIG9yaWdpbmFsIGltYWdlIHBhY2tldC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0CisgKgkgIHRpbWUgdGhpcyBpbWFnZSBwYWNrZXQgaGFzIGJlZW4gc2VlbiAoYmFzZWQgb24gc2VjdGlvbiBudW1iZXIKKyAqCSAgYW5kIGltYWdlIG9mZnNldCksIGNyZWF0ZSBhIG5ldyBkdXBsaWNhdGUgcGFja2V0IGFuZCBhZGQgaXQKKyAqCSAgdG8gdGhlIGR1cCBwYWNrZXQgbGlzdC4gIElmIG5vdCwganVzdCBnZXQgdGhlIGV4aXN0aW5nIG9uZSBhbmQKKyAqCSAgdXBkYXRlIGl0IHdpdGggdGhlIGN1cnJlbnQgcGFja2V0IGNvbnRlbnRzIChzaW5jZSByZWxvY2F0aW9uCisgKgkgIG9uIHRoZSBwYWNrZXQgaXMgc3RpbGwgb25nb2luZyBpbiBmaXJzdCBwYXNzLikgIENyZWF0ZSBhCisgKgkgIGR1cGxpY2F0ZSBvZiB0aGUgcHJvdmlkZWQgcmVsb2NhdGlvbiwgYnV0IHVwZGF0ZSBpdCB0byBwb2ludAorICoJICB0byB0aGUgbmV3IHRyYW1wb2xpbmUgc3ltYm9sLiAgQWRkIHRoZSBuZXcgcmVsb2NhdGlvbiBkdXAgdG8KKyAqCSAgdGhlIGR1cCBwYWNrZXQncyByZWxvIGNoYWluIGZvciAybmQgcGFzcyByZWxvY2F0aW9uIGxhdGVyLgorICovCitzdGF0aWMgaW50IHByaXZfaW1nX3BrdF9kdXAoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsCisJCQkgICAgczE2IHNlY25uLCB1MzIgaW1hZ2Vfb2Zmc2V0LAorCQkJICAgIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCwKKwkJCSAgICBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwLAorCQkJICAgIHN0cnVjdCB0cmFtcF9zeW0gKm5ld190cmFtcF9zeW0pCit7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpkdXBfcGt0ID0gTlVMTDsKKwl1MzIgbmV3X2R1cF9zaXplOworCXMzMiBpOworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpkdXBfcmVsbyA9IE5VTEw7CisKKwkvKiAgRGV0ZXJtaW5uZSBpZiB0aGlzIGltYWdlIHBhY2tldCBpcyBhbHJlYWR5IGJlaW5nIHRyYWNrZWQgaW4gdGhlCisJICAgZHVwIGxpc3QgZm9yIG90aGVyIHRyYW1wb2xpbmVzLiAqLworCWR1cF9wa3QgPSBwcml2X2R1cF9maW5kKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCk7CisKKwlpZiAoZHVwX3BrdCA9PSBOVUxMKSB7CisJCS8qICBUaGlzIGltYWdlIHBhY2tldCBkb2VzIG5vdCBleGlzdCBpbiBvdXIgdHJhY2tpbmcsIHNvIGNyZWF0ZQorCQkgKiBhIG5ldyBvbmUgYW5kIGFkZCBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gKi8KKwkJbmV3X2R1cF9zaXplID0gc2l6ZW9mKHN0cnVjdCB0cmFtcF9pbWdfZHVwX3BrdCkgKworCQkgICAgaXBhY2tldC0+cGFja2V0X3NpemU7CisKKwkJZHVwX3BrdCA9IChzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKikKKwkJICAgIGRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sIG5ld19kdXBfc2l6ZSk7CisJCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJCS8qICBTYXZlIG9mZiB0aGUgc2VjdGlvbiBhbmQgb2Zmc2V0IGluZm9ybWF0aW9uICovCisJCQlkdXBfcGt0LT5zZWNubiA9IHNlY25uOworCQkJZHVwX3BrdC0+b2Zmc2V0ID0gaW1hZ2Vfb2Zmc2V0OworCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IE5VTEw7CisKKwkJCS8qICBDb3B5IHRoZSBvcmlnaW5hbCBwYWNrZXQgY29udGVudCAqLworCQkJZHVwX3BrdC0+aW1nX3BrdCA9ICppcGFja2V0OworCQkJZHVwX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSA9ICh1OCAqKSAoZHVwX3BrdCArIDEpOworCQkJZm9yIChpID0gMDsgaSA8IGlwYWNrZXQtPnBhY2tldF9zaXplOyBpKyspCisJCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQorCQkJCSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7CisKKwkJCS8qICBBZGQgdGhlIHBhY2tldCB0byB0aGUgZHVwIGxpc3QgKi8KKwkJCWR1cF9wa3QtPm5leHQgPSBkbHRoaXMtPnRyYW1wLmR1cF9wa3RzOworCQkJZGx0aGlzLT50cmFtcC5kdXBfcGt0cyA9IGR1cF9wa3Q7CisJCX0gZWxzZQorCQkJZGxvYWRfZXJyb3IoZGx0aGlzLCAiRmFpbGVkIHRvIGNyZWF0ZSBkdXAgcGFja2V0ISIpOworCX0gZWxzZSB7CisJCS8qICBUaGUgaW1hZ2UgcGFja2V0IGNvbnRlbnRzIGNvdWxkIGhhdmUgY2hhbmdlZCBzaW5jZQorCQkgKiB0cmFtcG9saW5lIGRldGVjdGlvbiBoYXBwZW5zIGR1cmluZyByZWxvY2F0aW9uIG9mIHRoZSBpbWFnZQorCQkgKiBwYWNrZXRzLiAgU28sIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbWFnZSBwYWNrZXQgY29udGVudHMKKwkJICogYmVmb3JlIGFkZGluZyByZWxvIGluZm9ybWF0aW9uLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgZHVwX3BrdC0+aW1nX3BrdC5wYWNrZXRfc2l6ZTsgaSsrKQorCQkJKihkdXBfcGt0LT5pbWdfcGt0LmltZ19kYXRhICsgaSkgPQorCQkJICAgICooaXBhY2tldC0+aW1nX2RhdGEgKyBpKTsKKwl9CisKKwkvKiAgU2luY2UgdGhlIHByZXZpb3VzIGNvZGUgbWF5IGhhdmUgYWxsb2NhdGVkIGEgbmV3IGR1cCBwYWNrZXQgZm9yIHVzLAorCSAgIGRvdWJsZSBjaGVjayB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgb25lLiAqLworCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJLyogIEFsbG9jYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSByZWxvIGNoYWluLiAgRWFjaCBpbWFnZSBwYWNrZXQKKwkJICogY2FuIHBvdGVudGlhbGx5IGhhdmUgbXVsdGlwbGUgcmVsb2NhdGlvbnMgdGhhdCBjYXVzZSBhCisJCSAqIHRyYW1wb2xpbmUgdG8gYmUgZ2VuZXJhdGVkLiAgU28sIHdlIGtlZXAgdGhlbSBpbiBhIGNoYWluLAorCQkgKiBvcmRlciBpcyBub3QgaW1wb3J0YW50LiAqLworCQlkdXBfcmVsbyA9IGRsdGhpcy0+bXlzeW0tPmRsb2FkX2FsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCSBzaXplb2Yoc3RydWN0IHRyYW1wX2ltZ19kdXBfcmVsbykpOworCQlpZiAoZHVwX3JlbG8gIT0gTlVMTCkgeworCQkJLyogIENvcHkgdGhlIHJlbG8gY29udGVudHMsIGFkanVzdCBmb3IgdGhlIG5ldworCQkJICogdHJhbXBvbGluZSBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0LiAqLworCQkJZHVwX3JlbG8tPnJlbG8gPSAqcnA7CisJCQlkdXBfcmVsby0+cmVsby5TWU1ORFggPSBuZXdfdHJhbXBfc3ltLT5pbmRleDsKKworCQkJZHVwX3JlbG8tPm5leHQgPSBkdXBfcGt0LT5yZWxvX2NoYWluOworCQkJZHVwX3BrdC0+cmVsb19jaGFpbiA9IGR1cF9yZWxvOworCisJCQkvKiAgVGhhdCdzIGl0LCB3ZSdyZSBkb25lLiAgTWFrZSBzdXJlIHdlIHVwZGF0ZSBvdXIKKwkJCSAqIHJldHVybiB2YWx1ZSB0byBiZSBzdWNjZXNzIHNpbmNlIGV2ZXJ5dGhpbmcgZmluaXNoZWQKKwkJCSAqIG9rICovCisJCQlyZXRfdmFsID0gMTsKKwkJfSBlbHNlCisJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJVbmFibGUgdG8gYWxsb2MgZHVwIHJlbG8iKTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9hdmFpbAorICogRGVzY3JpcHRpb246IENoZWNrIHRvIHNlZSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGEgdHJhbXBvbGluZSBmb3IgdGhpcyB0eXBlCisgKgkgIG9mIHJlbG9jYXRpb24uICBSZXR1cm4gdHJ1ZSBpZiBpdCBkb2VzLCBvdGhlcndpc2UgZmFsc2UuCisgKi8KK2Jvb2wgZGxvYWRfdHJhbXBfYXZhaWwoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHN0cnVjdCByZWxvY19yZWNvcmRfdCAqcnApCit7CisJYm9vbCByZXRfdmFsID0gZmFsc2U7CisJdTE2IG1hcF9pbmRleDsKKwl1MTYgZ2VuX2luZGV4OworCisJLyogIENoZWNrIHR5cGUgaGFzaCB2cy4gdGFyZ2V0IHRyYW1wIHRhYmxlICovCisJbWFwX2luZGV4ID0gSEFTSF9GVU5DKHJwLT5UWVBFKTsKKwlnZW5faW5kZXggPSB0cmFtcF9tYXBbbWFwX2luZGV4XTsKKwlpZiAoZ2VuX2luZGV4ICE9IFRSQU1QX05PX0dFTl9BVkFJTCkKKwkJcmV0X3ZhbCA9IHRydWU7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9nZW5lcmF0ZQorICogRGVzY3JpcHRpb246IENyZWF0ZSBhIG5ldyB0cmFtcG9saW5lIGZvciB0aGUgcHJvdmlkZWQgaW1hZ2UgcGFja2V0IGFuZAorICoJICByZWxvY2F0aW9uIGNhdXNpbmcgcHJvYmxlbXMuICBUaGlzIHdpbGwgY3JlYXRlIHRoZSB0cmFtcG9saW5lCisgKgkgIGFzIHdlbGwgYXMgZHVwbGljYXRlL3VwZGF0ZSB0aGUgaW1hZ2UgcGFja2V0IGFuZCByZWxvY2F0aW9uCisgKgkgIGNhdXNpbmcgdGhlIHByb2JsZW0sIHdoaWNoIHdpbGwgYmUgcmVsbydkIGFnYWluIGR1cmluZworICoJICBmaW5hbGl6YXRpb24uCisgKi8KK2ludCBkbG9hZF90cmFtcF9nZW5lcmF0ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcywgczE2IHNlY25uLAorCQkJIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCwKKwkJCSBzdHJ1Y3QgcmVsb2NfcmVjb3JkX3QgKnJwKQoreworCXUxNiBtYXBfaW5kZXg7CisJdTE2IGdlbl9pbmRleDsKKwlpbnQgcmV0X3ZhbCA9IDE7CisJY2hhciB0cmFtcF9zeW1fc3RyW1RSQU1QX1NZTV9QUkVGSVhfTEVOICsgVFJBTVBfU1lNX0hFWF9BU0NJSV9MRU5dOworCXN0cnVjdCBsb2NhbF9zeW1ib2wgKnJlZl9zeW07CisJc3RydWN0IHRyYW1wX3N5bSAqbmV3X3RyYW1wX3N5bTsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpuZXdfZXh0X3N5bTsKKwlzdHJ1Y3QgdHJhbXBfc3RyaW5nICpuZXdfdHJhbXBfc3RyOworCXUzMiBuZXdfdHJhbXBfYmFzZTsKKwlzdHJ1Y3QgbG9jYWxfc3ltYm9sIHRtcF9zeW07CisJc3RydWN0IGxvY2FsX3N5bWJvbCBleHRfdG1wX3N5bTsKKworCS8qICBIYXNoIHRoZSByZWxvIHR5cGUgdG8gZ2V0IG91ciBnZW5lcmF0b3IgaW5mb3JtYXRpb24gKi8KKwltYXBfaW5kZXggPSBIQVNIX0ZVTkMocnAtPlRZUEUpOworCWdlbl9pbmRleCA9IHRyYW1wX21hcFttYXBfaW5kZXhdOworCWlmIChnZW5faW5kZXggIT0gVFJBTVBfTk9fR0VOX0FWQUlMKSB7CisJCS8qICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0cmFtcG9saW5lLCBjcmVhdGUgdGhlIHNlY3Rpb24gbmFtZSBpbgorCQkgKiBvdXIgc3RyaW5nIHRhYmxlIGZvciBkZWJ1ZyBoZWxwIGxhdGVyLiAqLworCQlpZiAoZGx0aGlzLT50cmFtcC5zdHJpbmdfaGVhZCA9PSBOVUxMKSB7CisJCQlwcml2X3RyYW1wX3N0cmluZ19jcmVhdGUoZGx0aGlzLAorCQkJCQkJIHN0cmxlbihUUkFNUF9TRUNUX05BTUUpLAorCQkJCQkJIFRSQU1QX1NFQ1RfTkFNRSk7CisJCX0KKyNpZmRlZiBFTkFCTEVfVFJBTVBfREVCVUcKKwkJZGxvYWRfc3ltc19lcnJvcihkbHRoaXMtPm15c3ltLAorCQkJCSAiVHJhbXBvbGluZSBhdCBpbWcgbG9jICV4LCByZWZlcmVuY2VzICV4IiwKKwkJCQkgZGx0aGlzLT5sZHJfc2VjdGlvbnNbc2Vjbm5dLnJ1bl9hZGRyICsKKwkJCQkgaW1hZ2Vfb2Zmc2V0ICsgcnAtPnZhZGRyLAorCQkJCSBkbHRoaXMtPmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXS52YWx1ZSk7CisjZW5kaWYKKworCQkvKiAgR2VuZXJhdGUgdGhlIHRyYW1wb2xpbmUgc3RyaW5nLCBjaGVjayBpZiBhbHJlYWR5IGRlZmluZWQuCisJCSAqIElmIHRoZSByZWxvIHN5bWJvbCBpbmRleCBpcyAtMSwgaXQgbWVhbnMgd2UgbmVlZCB0aGUgc2VjdGlvbgorCQkgKiBpbmZvIGZvciByZWxvIGxhdGVyLiAgVG8gZG8gdGhpcyB3ZSdsbCBkdW1teSB1cCBhIHN5bWJvbAorCQkgKiB3aXRoIHRoZSBzZWN0aW9uIGRlbHRhIGFuZCBydW4gYWRkcmVzc2VzLiAqLworCQlpZiAocnAtPlNZTU5EWCA9PSAtMSkgeworCQkJZXh0X3RtcF9zeW0udmFsdWUgPQorCQkJICAgIGRsdGhpcy0+bGRyX3NlY3Rpb25zW3NlY25uXS5ydW5fYWRkcjsKKwkJCWV4dF90bXBfc3ltLmRlbHRhID0gZGx0aGlzLT5zZWN0X2hkcnNbc2Vjbm5dLmRzX3BhZGRyOworCQkJcmVmX3N5bSA9ICZleHRfdG1wX3N5bTsKKwkJfSBlbHNlCisJCQlyZWZfc3ltID0gJihkbHRoaXMtPmxvY2FsX3N5bXRhYltycC0+U1lNTkRYXSk7CisKKwkJcHJpdl90cmFtcF9zeW1fZ2VuX25hbWUocmVmX3N5bS0+dmFsdWUsIHRyYW1wX3N5bV9zdHIpOworCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9zeW1fZmluZChkbHRoaXMsIHRyYW1wX3N5bV9zdHIpOworCQlpZiAobmV3X3RyYW1wX3N5bSA9PSBOVUxMKSB7CisJCQkvKiAgSWYgdHJhbXAgc3RyaW5nIG5vdCBkZWZpbmVkLCBjcmVhdGUgaXQgYW5kIGEgbmV3CisJCQkgKiBzdHJpbmcsIGFuZCBzeW1ib2wgZm9yIGl0IGFzIHdlbGwgYXMgdGhlIG9yaWdpbmFsCisJCQkgKiBzeW1ib2wgd2hpY2ggY2F1c2VkIHRoZSB0cmFtcG9saW5lLiAqLworCQkJbmV3X3RyYW1wX3N0ciA9IHByaXZfdHJhbXBfc3RyaW5nX2NyZWF0ZShkbHRoaXMsCisJCQkJCQkJCXN0cmxlbgorCQkJCQkJCQkodHJhbXBfc3ltX3N0ciksCisJCQkJCQkJCSB0cmFtcF9zeW1fc3RyKTsKKwkJCWlmIChuZXdfdHJhbXBfc3RyID09IE5VTEwpIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlIG5ldyAiCisJCQkJCSAgICAidHJhbXBvbGluZSBzdHJpbmdcbiIpOworCQkJCXJldF92YWwgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiAgQWxsb2NhdGUgdHJhbXAgc2VjdGlvbiBzcGFjZSBmb3IgdGhlIG5ldworCQkJCSAqIHRyYW1wIGZyb20gdGhlIHRhcmdldCAqLworCQkJCW5ld190cmFtcF9iYXNlID0gcHJpdl90cmFtcF9zZWN0X2FsbG9jKGRsdGhpcywKKwkJCQkJCSAgICAgICB0cmFtcF9zaXplX2dldCgpKTsKKworCQkJCS8qICBXZSBoYXZlIGEgc3RyaW5nLCBjcmVhdGUgdGhlIG5ldyBzeW1ib2wgYW5kCisJCQkJICogZHVwbGljYXRlIHRoZSBleHRlcm5hbC4gKi8KKwkJCQl0bXBfc3ltLnZhbHVlID0gbmV3X3RyYW1wX2Jhc2U7CisJCQkJdG1wX3N5bS5kZWx0YSA9IDA7CisJCQkJdG1wX3N5bS5zZWNubiA9IC0xOworCQkJCXRtcF9zeW0uc2NsYXNzID0gMDsKKwkJCQluZXdfdHJhbXBfc3ltID0gcHJpdl90cmFtcF9zeW1fY3JlYXRlKGRsdGhpcywKKwkJCQkJCQkgICAgICBuZXdfdHJhbXBfc3RyLT4KKwkJCQkJCQkgICAgICBpbmRleCwKKwkJCQkJCQkgICAgICAmdG1wX3N5bSk7CisKKwkJCQluZXdfZXh0X3N5bSA9IHByaXZfdHJhbXBfc3ltX2NyZWF0ZShkbHRoaXMsIC0xLAorCQkJCQkJCQkgICAgcmVmX3N5bSk7CisKKwkJCQlpZiAoKG5ld190cmFtcF9zeW0gIT0gTlVMTCkgJiYKKwkJCQkgICAgKG5ld19leHRfc3ltICE9IE5VTEwpKSB7CisJCQkJCS8qICBDYWxsIHRoZSBpbWFnZSBnZW5lcmF0b3IgdG8gZ2V0IHRoZQorCQkJCQkgKiBuZXcgaW1hZ2UgZGF0YSBhbmQgZml4IHVwIGl0cworCQkJCQkgKiByZWxvY2F0aW9ucyBmb3IgdGhlIGV4dGVybmFsCisJCQkJCSAqIHN5bWJvbC4gKi8KKwkJCQkJcmV0X3ZhbCA9IHByaXZfdGd0X2ltZ19nZW4oZGx0aGlzLAorCQkJCQkJCQkgbmV3X3RyYW1wX2Jhc2UsCisJCQkJCQkJCSBnZW5faW5kZXgsCisJCQkJCQkJCSBuZXdfZXh0X3N5bSk7CisKKwkJCQkJLyogIEFkZCBnZW5lcmF0ZWQgaW1hZ2UgZGF0YSB0byB0cmFtcAorCQkJCQkgKiBpbWFnZSBsaXN0ICovCisJCQkJCWlmIChyZXRfdmFsICE9IDEpIHsKKwkJCQkJCWRsb2FkX2Vycm9yKGRsdGhpcywgIkZhaWxlZCB0byAiCisJCQkJCQkJICAgICJjcmVhdGUgaW1nIHBrdCBmb3IiCisJCQkJCQkJICAgICIgdHJhbXBvbGluZVxuIik7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlICIKKwkJCQkJCSAgICAibmV3IHRyYW1wIHN5bXMgIgorCQkJCQkJICAgICIoJTguOFgsICU4LjhYKVxuIiwKKwkJCQkJCSAgICBuZXdfdHJhbXBfc3ltLCBuZXdfZXh0X3N5bSk7CisJCQkJCXJldF92YWwgPSAwOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qICBEdXBsaWNhdGUgdGhlIGltYWdlIGRhdGEgYW5kIHJlbG8gcmVjb3JkIHRoYXQgY2F1c2VkIHRoZQorCQkgKiB0cmFtcCwgaW5jbHVkaW5nIHVwZGF0ZSB0aGUgcmVsbyBkYXRhIHRvIHBvaW50IHRvIHRoZSB0cmFtcAorCQkgKiBzeW1ib2wuICovCisJCWlmIChyZXRfdmFsID09IDEpIHsKKwkJCXJldF92YWwgPSBwcml2X2ltZ19wa3RfZHVwKGRsdGhpcywgc2Vjbm4sIGltYWdlX29mZnNldCwKKwkJCQkJCSAgIGlwYWNrZXQsIHJwLCBuZXdfdHJhbXBfc3ltKTsKKwkJCWlmIChyZXRfdmFsICE9IDEpIHsKKwkJCQlkbG9hZF9lcnJvcihkbHRoaXMsICJGYWlsZWQgdG8gY3JlYXRlIGR1cCBvZiAiCisJCQkJCSAgICAib3JpZ2luYWwgaW1nIHBrdFxuIik7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKKyAqIEZ1bmN0aW9uOglkbG9hZF90cmFtcF9wa3RfdXBkYXRlCisgKiBEZXNjcmlwdGlvbjogVXBkYXRlIHRoZSBkdXBsaWNhdGUgY29weSBvZiB0aGlzIGltYWdlIHBhY2tldCwgd2hpY2ggdGhlCisgKgkgIHRyYW1wb2xpbmUgbGF5ZXIgaXMgYWxyZWFkeSB0cmFja2luZy4gIFRoaXMgaXMgY2FsbCBpcyBjcml0aWNhbAorICoJICB0byBtYWtlIGlmIHRyYW1wb2xpbmVzIHdlcmUgZ2VuZXJhdGVkIGFueXdoZXJlIHdpdGhpbiB0aGUKKyAqCSAgcGFja2V0IGFuZCBmaXJzdCBwYXNzIHJlbG8gY29udGludWVkIG9uIHRoZSByZW1haW5kZXIuICBUaGUKKyAqCSAgdHJhbXBvbGluZSBsYXllciBuZWVkcyB0aGUgdXBkYXRlcyBpbWFnZSBkYXRhIHNvIHdoZW4gMm5kCisgKgkgIHBhc3MgcmVsbyBpcyBkb25lIGR1cmluZyBmaW5hbGl6ZSB0aGUgaW1hZ2UgcGFja2V0IGNhbiBiZQorICoJICB3cml0dGVuIHRvIHRoZSB0YXJnZXQgc2luY2UgYWxsIHJlbG8gaXMgZG9uZS4KKyAqLworaW50IGRsb2FkX3RyYW1wX3BrdF91ZHBhdGUoc3RydWN0IGRsb2FkX3N0YXRlICpkbHRoaXMsIHMxNiBzZWNubiwKKwkJCSAgIHUzMiBpbWFnZV9vZmZzZXQsIHN0cnVjdCBpbWFnZV9wYWNrZXRfdCAqaXBhY2tldCkKK3sKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9wa3QgKmR1cF9wa3QgPSBOVUxMOworCXMzMiBpOworCWludCByZXRfdmFsID0gMDsKKworCS8qICBGaW5kIHRoZSBpbWFnZSBwYWNrZXQgaW4gcXVlc3Rpb24sIHRoZSBjYWxsZXIgbmVlZHMgdXMgdG8gdXBkYXRlIGl0CisJICAgc2luY2UgYSB0cmFtcG9saW5lIHdhcyBwcmV2aW91c2x5IGdlbmVyYXRlZC4gKi8KKwlkdXBfcGt0ID0gcHJpdl9kdXBfZmluZChkbHRoaXMsIHNlY25uLCBpbWFnZV9vZmZzZXQpOworCWlmIChkdXBfcGt0ICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGR1cF9wa3QtPmltZ19wa3QucGFja2V0X3NpemU7IGkrKykKKwkJCSooZHVwX3BrdC0+aW1nX3BrdC5pbWdfZGF0YSArIGkpID0KKwkJCSAgICAqKGlwYWNrZXQtPmltZ19kYXRhICsgaSk7CisKKwkJcmV0X3ZhbCA9IDE7CisJfSBlbHNlIHsKKwkJZGxvYWRfZXJyb3IoZGx0aGlzLAorCQkJICAgICJVbmFibGUgdG8gZmluZCBleGlzdGluZyBEVVAgcGt0IGZvciAleCwgb2Zmc2V0ICV4IiwKKwkJCSAgICBzZWNubiwgaW1hZ2Vfb2Zmc2V0KTsKKworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CWRsb2FkX3RyYW1wX2ZpbmFsaXplCisgKiBEZXNjcmlwdGlvbjogSWYgYW55IHRyYW1wb2xpbmVzIHdlcmUgY3JlYXRlZCwgZmluYWxpemUgZXZlcnl0aGluZyBvbiB0aGUKKyAqCSAgdGFyZ2V0IGJ5IGFsbG9jYXRpbmcgdGhlIHRyYW1wb2xpbmUgc2VjdGlvbiBvbiB0aGUgdGFyZ2V0LAorICoJICBmaW5hbGl6aW5nIHRoZSB0cmFtcG9saW5lIHN5bWJvbHMsIGZpbmFsaXppbmcgdGhlIHRyYW1wb2xpbmUKKyAqCSAgcGFja2V0cyAod3JpdGUgdGhlIG5ldyBzZWN0aW9uIHRvIHRhcmdldCBtZW1vcnkpIGFuZCBmaW5hbGl6ZQorICoJICB0aGUgZHVwbGljYXRlIHBhY2tldHMgYnkgZG9pbmcgMm5kIHBhc3MgcmVsbyBvdmVyIHRoZW0uCisgKi8KK2ludCBkbG9hZF90cmFtcF9maW5hbGl6ZShzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlpbnQgcmV0X3ZhbCA9IDE7CisKKwlpZiAoZGx0aGlzLT50cmFtcC50cmFtcF9zZWN0X25leHRfYWRkciAhPSAwKSB7CisJCS8qICBGaW5hbGl6ZSBzdHJpbmdzIGludG8gYSBmbGF0IHRhYmxlLiAgVGhpcyBpcyBuZWVkZWQgc28gaXQKKwkJICogY2FuIGJlIGFkZGVkIHRvIHRoZSBkZWJ1ZyBzdHJpbmcgdGFibGUgbGF0ZXIuICovCisJCXJldF92YWwgPSBwcml2X3N0cmluZ190YmxfZmluYWxpemUoZGx0aGlzKTsKKworCQkvKiAgRG8gdGFyZ2V0IGFsbG9jYXRpb24gZm9yIHNlY3Rpb24gQkVGT1JFIGZpbmFsaXppbmcKKwkJICogc3ltYm9scy4gKi8KKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldF92YWwgPSBwcml2X3RyYW1wX3NlY3RfdGd0X2FsbG9jKGRsdGhpcyk7CisKKwkJLyogIEZpbmFsaXplIHN5bWJvbHMgd2l0aCB0aGVpciBjb3JyZWN0IHRhcmdldCBpbmZvcm1hdGlvbiBhbmQKKwkJICogZmxhdHRlbiAqLworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJcmV0X3ZhbCA9IHByaXZfdHJhbXBfc3ltX2ZpbmFsaXplKGRsdGhpcyk7CisKKwkJLyogIEZpbmFsaXplIGFsbCB0cmFtcG9saW5lIHBhY2tldHMuICBUaGlzIHBlcmZvcm1zIHRoZQorCQkgKiByZWxvY2F0aW9uIG9uIHRoZSBwYWNrZXRzIGFzIHdlbGwgYXMgd3JpdGluZyB0aGVtIHRvIHRhcmdldAorCQkgKiBtZW1vcnkuICovCisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXRfdmFsID0gcHJpdl90cmFtcF9wa3RfZmluYWxpemUoZGx0aGlzKTsKKworCQkvKiAgUGVyZm9ybSBhIDJuZCBwYXNzIHJlbG9jYXRpb24gb24gdGhlIGR1cCBsaXN0LiAqLworCQlpZiAocmV0X3ZhbCAhPSAwKQorCQkJcmV0X3ZhbCA9IHByaXZfZHVwX3BrdF9maW5hbGl6ZShkbHRoaXMpOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKgorICogRnVuY3Rpb246CWRsb2FkX3RyYW1wX2NsZWFudXAKKyAqIERlc2NyaXB0aW9uOiBSZWxlYXNlIGFsbCB0ZW1wb3JhcnkgcmVzb3VyY2VzIHVzZWQgaW4gdGhlIHRyYW1wb2xpbmUgbGF5ZXIuCisgKgkgIE5vdGUgdGhhdCB0aGUgdGFyZ2V0IG1lbW9yeSB3aGljaCBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhbmQKKyAqCSAgd3JpdHRlbiB0byBzdG9yZSB0aGUgdHJhbXBvbGluZXMgaXMgTk9UIFJFTEVBU0VEIEhFUkUgc2luY2UgaXQKKyAqCSAgaXMgcG90ZW50aWFsbHkgc3RpbGwgaW4gdXNlLiAgSXQgaXMgYXV0b21hdGljYWxseSByZWxlYXNlZAorICoJICB3aGVuIHRoZSBtb2R1bGUgaXMgdW5sb2FkZWQuCisgKi8KK3ZvaWQgZGxvYWRfdHJhbXBfY2xlYW51cChzdHJ1Y3QgZGxvYWRfc3RhdGUgKmRsdGhpcykKK3sKKwlzdHJ1Y3QgdHJhbXBfaW5mbyAqdHJhbXAgPSAmZGx0aGlzLT50cmFtcDsKKwlzdHJ1Y3QgdHJhbXBfc3ltICpjdXJfc3ltOworCXN0cnVjdCB0cmFtcF9zdHJpbmcgKmN1cl9zdHJpbmc7CisJc3RydWN0IHRyYW1wX2ltZ19wa3QgKmN1cl90cmFtcF9wa3Q7CisJc3RydWN0IHRyYW1wX2ltZ19kdXBfcGt0ICpjdXJfZHVwX3BrdDsKKwlzdHJ1Y3QgdHJhbXBfaW1nX2R1cF9yZWxvICpjdXJfZHVwX3JlbG87CisKKwkvKiAgSWYgdGhlcmUgd2VyZSBubyB0cmFtcHMgZ2VuZXJhdGVkLCBqdXN0IHJldHVybiAqLworCWlmICh0cmFtcC0+dHJhbXBfc2VjdF9uZXh0X2FkZHIgPT0gMCkKKwkJcmV0dXJuOworCisJLyogIERlc3Ryb3kgYWxsIHRyYW1wIGluZm9ybWF0aW9uICovCisJZm9yIChjdXJfc3ltID0gdHJhbXAtPnN5bWJvbF9oZWFkOworCSAgICAgY3VyX3N5bSAhPSBOVUxMOyBjdXJfc3ltID0gdHJhbXAtPnN5bWJvbF9oZWFkKSB7CisJCXRyYW1wLT5zeW1ib2xfaGVhZCA9IGN1cl9zeW0tPm5leHQ7CisJCWlmICh0cmFtcC0+c3ltYm9sX3RhaWwgPT0gY3VyX3N5bSkKKwkJCXRyYW1wLT5zeW1ib2xfdGFpbCA9IE5VTEw7CisKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfc3ltKTsKKwl9CisKKwlpZiAodHJhbXAtPmZpbmFsX3N5bV90YWJsZSAhPSBOVUxMKQorCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQl0cmFtcC0+ZmluYWxfc3ltX3RhYmxlKTsKKworCWZvciAoY3VyX3N0cmluZyA9IHRyYW1wLT5zdHJpbmdfaGVhZDsKKwkgICAgIGN1cl9zdHJpbmcgIT0gTlVMTDsgY3VyX3N0cmluZyA9IHRyYW1wLT5zdHJpbmdfaGVhZCkgeworCQl0cmFtcC0+c3RyaW5nX2hlYWQgPSBjdXJfc3RyaW5nLT5uZXh0OworCQlpZiAodHJhbXAtPnN0cmluZ190YWlsID09IGN1cl9zdHJpbmcpCisJCQl0cmFtcC0+c3RyaW5nX3RhaWwgPSBOVUxMOworCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX3N0cmluZyk7CisJfQorCisJaWYgKHRyYW1wLT5maW5hbF9zdHJpbmdfdGFibGUgIT0gTlVMTCkKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLAorCQkJCQkJdHJhbXAtPmZpbmFsX3N0cmluZ190YWJsZSk7CisKKwlmb3IgKGN1cl90cmFtcF9wa3QgPSB0cmFtcC0+dHJhbXBfcGt0czsKKwkgICAgIGN1cl90cmFtcF9wa3QgIT0gTlVMTDsgY3VyX3RyYW1wX3BrdCA9IHRyYW1wLT50cmFtcF9wa3RzKSB7CisJCXRyYW1wLT50cmFtcF9wa3RzID0gY3VyX3RyYW1wX3BrdC0+bmV4dDsKKwkJZGx0aGlzLT5teXN5bS0+ZGxvYWRfZGVhbGxvY2F0ZShkbHRoaXMtPm15c3ltLCBjdXJfdHJhbXBfcGt0KTsKKwl9CisKKwlmb3IgKGN1cl9kdXBfcGt0ID0gdHJhbXAtPmR1cF9wa3RzOworCSAgICAgY3VyX2R1cF9wa3QgIT0gTlVMTDsgY3VyX2R1cF9wa3QgPSB0cmFtcC0+ZHVwX3BrdHMpIHsKKwkJdHJhbXAtPmR1cF9wa3RzID0gY3VyX2R1cF9wa3QtPm5leHQ7CisKKwkJZm9yIChjdXJfZHVwX3JlbG8gPSBjdXJfZHVwX3BrdC0+cmVsb19jaGFpbjsKKwkJICAgICBjdXJfZHVwX3JlbG8gIT0gTlVMTDsKKwkJICAgICBjdXJfZHVwX3JlbG8gPSBjdXJfZHVwX3BrdC0+cmVsb19jaGFpbikgeworCQkJY3VyX2R1cF9wa3QtPnJlbG9fY2hhaW4gPSBjdXJfZHVwX3JlbG8tPm5leHQ7CisJCQlkbHRoaXMtPm15c3ltLT5kbG9hZF9kZWFsbG9jYXRlKGRsdGhpcy0+bXlzeW0sCisJCQkJCQkJY3VyX2R1cF9yZWxvKTsKKwkJfQorCisJCWRsdGhpcy0+bXlzeW0tPmRsb2FkX2RlYWxsb2NhdGUoZGx0aGlzLT5teXN5bSwgY3VyX2R1cF9wa3QpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL3RyYW1wX3RhYmxlX2M2MDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcF90YWJsZV9jNjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC90cmFtcF90YWJsZV9jNjAwMC5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogdHJhbXBfdGFibGVfYzYwMDAuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSAiZGxvYWRfaW50ZXJuYWwuaCIKKworLyogIFRoZXNlIGFyZSBkZWZpbmVkIGluIGNvZmYuaCwgYnV0IG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMKKwlzbyB3ZSdsbCBnbyBhaGVhZCBhbmQgZGVmaW5lIHRoZW0gaGVyZS4gKi8KKyNpZm5kZWYgUl9DNjBMTzE2CisjZGVmaW5lIFJfQzYwTE8xNgkgIDB4NTQJLyogQzYwOiBNVksgTG93IEhhbGYgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9DNjBISTE2CSAgMHg1NQkvKiBDNjA6IE1WS0gvTVZLTEggSGlnaCBIYWxmIFJlZ2lzdGVyICovCisjZW5kaWYKKworI2RlZmluZSBDNlhfVFJBTVBfV09SRF9DT1VOVAkJCTgKKyNkZWZpbmUgQzZYX1RSQU1QX01BWF9SRUxPUwkJCSA4CisKKy8qICBUSElTIEhBU0ggRlVOQ1RJT04gTVVTVCBNQVRDSCBUSEUgT05FIHJlbG9jX3RhYmxlX2M2MDAwLmMgKi8KKyNkZWZpbmUgSEFTSF9GVU5DKHp6KSAoKCgoKHp6KSArIDEpICogMTg0NVVMKSA+PiAxMSkgJiA2MykKKworLyogIFRISVMgTVVTVCBNQVRDSCByZWxvY19yZWNvcmRfdCBGT1IgQSBTWU1CT0wgQkFTRUQgUkVMTyAqLworc3RydWN0IGM2MDAwX3JlbG9fcmVjb3JkIHsKKwlzMzIgdmFkZHI7CisJczMyIHN5bW5keDsKKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgZGlzcDsKKwl1MTYgdHlwZTsKKyNlbHNlCisJdTE2IHR5cGU7CisJdTE2IGRpc3A7CisjZW5kaWYKK307CisKK3N0cnVjdCBjNjAwMF9nZW5fY29kZSB7CisJc3RydWN0IHRyYW1wX2dlbl9jb2RlX2hkciBoZHI7CisJdTMyIHRyYW1wX2luc3Ryc1tDNlhfVFJBTVBfV09SRF9DT1VOVF07CisJc3RydWN0IGM2MDAwX3JlbG9fcmVjb3JkIHJlbG9zW0M2WF9UUkFNUF9NQVhfUkVMT1NdOworfTsKKworLyogIEhhc2ggbWFwcGluZyBmb3IgcmVsb3MgdGhhdCBjYW4gY2F1c2UgdHJhbXBvbGluZXMuICovCitzdGF0aWMgY29uc3QgdTE2IHRyYW1wX21hcFtdID0geworCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTY1NTM1LAorCTAsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUsCisJNjU1MzUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUgdHJhbXBfZ2VuX2luZm9bXSA9IHsKKwkvKiAgVHJhbXAgY2F1c2VkIGJ5IFJfQzYwUENSMjEgKi8KKwl7CisJIC8qICBIZWFkZXIgLSA4IGluc3RydWN0aW9ucywgMiByZWxvcyAqLworCSB7CisJICBzaXplb2YodTMyKSAqIEM2WF9UUkFNUF9XT1JEX0NPVU5ULAorCSAgMiwKKwkgIEZJRUxEX09GRlNFVChzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUsIHJlbG9zKQorCSAgfSwKKworCSAvKiAgVHJhbXBvbGluZSBpbnN0cnVjdGlvbnMgKi8KKwkgeworCSAgMHgwNTNDNTRGNywJCS8qICAgICAgIFNUVy5EMlQyICBCMTAsICpzcC0tWzJdICovCisJICAweDA1MDAwMDJBLAkJLyogIHx8IE1WSy5TMiAgIDxibGFuaz4sIEIxMCAqLworCSAgMHgwNTAwMDA2QSwJCS8qICAgICAgIE1WS0guUzIgICA8Ymxhbms+LCBCMTAgKi8KKwkgIDB4MDAyODAzNjIsCQkvKiAgICAgICBCLlMyICAgICBCMTAgKi8KKwkgIDB4MDUzQzUyRTYsCQkvKiAgICAgICBMRFcuRDJUMiAgKisrc3BbMl0sIEIxMCAqLworCSAgMHgwMDAwNjAwMCwJCS8qICAgICAgIE5PUCAgICAgICA0ICovCisJICAweDAwMDAwMDAwLAkJLyogICAgICAgTk9QICovCisJICAweDAwMDAwMDAwCQkvKiAgICAgICBOT1AgKi8KKwkgIH0sCisKKwkgLyogIFJlbG9jYXRpb25zICovCisJIHsKKwkgIHs0LCAwLCAwLCBSX0M2MExPMTZ9LAorCSAgezgsIDAsIDAsIFJfQzYwSEkxNn0sCisJICB7MCwgMCwgMCwgMHgwMDAwfSwKKwkgIHswLCAwLCAwLCAweDAwMDB9LAorCSAgezAsIDAsIDAsIDB4MDAwMH0sCisJICB7MCwgMCwgMCwgMHgwMDAwfSwKKwkgIHswLCAwLCAwLCAweDAwMDB9LAorCSAgezAsIDAsIDAsIDB4MDAwMH0KKwkgIH0KKwkgfQorfTsKKworLyogIFRBUkdFVCBTUEVDSUZJQyBGVU5DVElPTlMgVEhBVCBNVVNUIEJFIERFRklORUQgKi8KK3N0YXRpYyB1MzIgdHJhbXBfc2l6ZV9nZXQodm9pZCkKK3sKKwlyZXR1cm4gc2l6ZW9mKHUzMikgKiBDNlhfVFJBTVBfV09SRF9DT1VOVDsKK30KKworc3RhdGljIHUzMiB0cmFtcF9pbWdfcGt0X3NpemVfZ2V0KHZvaWQpCit7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgYzYwMDBfZ2VuX2NvZGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9nYi5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9nYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZWIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2diLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBnYi5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdlbmVyaWMgYml0bWFwIG9wZXJhdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2dzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2diLmg+CisKK3N0cnVjdCBnYl90X21hcCB7CisJdTMyIGxlbjsKKwl1MzIgd2NudDsKKwl1MzIgKndvcmRzOworfTsKKworLyoKKyAqICA9PT09PT09PSBnYl9jbGVhciA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIENsZWFycyBhIGJpdCBpbiB0aGUgYml0IG1hcC4KKyAqLworCit2b2lkIGdiX2NsZWFyKHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bikKK3sKKwl1MzIgbWFzazsKKworCW1hc2sgPSAxTCA8PCAoYml0biAlIEJJVFNfUEVSX0xPTkcpOworCW1hcC0+d29yZHNbYml0biAvIEJJVFNfUEVSX0xPTkddICY9IH5tYXNrOworfQorCisvKgorICogID09PT09PT09IGdiX2NyZWF0ZSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIENyZWF0ZXMgYSBiaXQgbWFwLgorICovCisKK3N0cnVjdCBnYl90X21hcCAqZ2JfY3JlYXRlKHUzMiBsZW4pCit7CisJc3RydWN0IGdiX3RfbWFwICptYXA7CisJdTMyIGk7CisJbWFwID0gKHN0cnVjdCBnYl90X21hcCAqKWdzX2FsbG9jKHNpemVvZihzdHJ1Y3QgZ2JfdF9tYXApKTsKKwlpZiAobWFwICE9IE5VTEwpIHsKKwkJbWFwLT5sZW4gPSBsZW47CisJCW1hcC0+d2NudCA9IGxlbiAvIEJJVFNfUEVSX0xPTkcgKyAxOworCQltYXAtPndvcmRzID0gKHUzMiAqKSBnc19hbGxvYyhtYXAtPndjbnQgKiBzaXplb2YodTMyKSk7CisJCWlmIChtYXAtPndvcmRzICE9IE5VTEwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBtYXAtPndjbnQ7IGkrKykKKwkJCQltYXAtPndvcmRzW2ldID0gMEw7CisKKwkJfSBlbHNlIHsKKwkJCWdzX2ZyZWVzKG1hcCwgc2l6ZW9mKHN0cnVjdCBnYl90X21hcCkpOworCQkJbWFwID0gTlVMTDsKKwkJfQorCX0KKworCXJldHVybiBtYXA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2JfZGVsZXRlID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRnJlZXMgYSBiaXQgbWFwLgorICovCisKK3ZvaWQgZ2JfZGVsZXRlKHN0cnVjdCBnYl90X21hcCAqbWFwKQoreworCWdzX2ZyZWVzKG1hcC0+d29yZHMsIG1hcC0+d2NudCAqIHNpemVvZih1MzIpKTsKKwlnc19mcmVlcyhtYXAsIHNpemVvZihzdHJ1Y3QgZ2JfdF9tYXApKTsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl9maW5kYW5kc2V0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRmluZHMgYSBmcmVlIGJpdCBhbmQgc2V0cyBpdC4KKyAqLwordTMyIGdiX2ZpbmRhbmRzZXQoc3RydWN0IGdiX3RfbWFwICptYXApCit7CisJdTMyIGJpdG47CisKKwliaXRuID0gZ2JfbWluY2xlYXIobWFwKTsKKworCWlmIChiaXRuICE9IEdCX05PQklUUykKKwkJZ2Jfc2V0KG1hcCwgYml0bik7CisKKwlyZXR1cm4gYml0bjsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl9taW5jbGVhciA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIHJldHVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaXJzdCB1bnNldCBiaXQgaW4gdGhlIGJpdCBtYXAuCisgKi8KK3UzMiBnYl9taW5jbGVhcihzdHJ1Y3QgZ2JfdF9tYXAgKm1hcCkKK3sKKwl1MzIgYml0X2xvY2F0aW9uID0gMDsKKwl1MzIgYml0X2FjYyA9IDA7CisJdTMyIGk7CisJdTMyIGJpdDsKKwl1MzIgKndvcmQ7CisKKwlmb3IgKHdvcmQgPSBtYXAtPndvcmRzLCBpID0gMDsgaSA8IG1hcC0+d2NudDsgd29yZCsrLCBpKyspIHsKKwkJaWYgKH4qd29yZCkgeworCQkJZm9yIChiaXQgPSAwOyBiaXQgPCBCSVRTX1BFUl9MT05HOyBiaXQrKywgYml0X2FjYysrKSB7CisJCQkJaWYgKGJpdF9hY2MgPT0gbWFwLT5sZW4pCisJCQkJCXJldHVybiBHQl9OT0JJVFM7CisKKwkJCQlpZiAofip3b3JkICYgKDFMIDw8IGJpdCkpIHsKKwkJCQkJYml0X2xvY2F0aW9uID0gaSAqIEJJVFNfUEVSX0xPTkcgKyBiaXQ7CisJCQkJCXJldHVybiBiaXRfbG9jYXRpb247CisJCQkJfQorCisJCQl9CisJCX0gZWxzZSB7CisJCQliaXRfYWNjICs9IEJJVFNfUEVSX0xPTkc7CisJCX0KKwl9CisKKwlyZXR1cm4gR0JfTk9CSVRTOworfQorCisvKgorICogID09PT09PT09IGdiX3NldCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIFNldHMgYSBiaXQgaW4gdGhlIGJpdCBtYXAuCisgKi8KKwordm9pZCBnYl9zZXQoc3RydWN0IGdiX3RfbWFwICptYXAsIHUzMiBiaXRuKQoreworCXUzMiBtYXNrOworCisJbWFzayA9IDFMIDw8IChiaXRuICUgQklUU19QRVJfTE9ORyk7CisJbWFwLT53b3Jkc1tiaXRuIC8gQklUU19QRVJfTE9OR10gfD0gbWFzazsKK30KKworLyoKKyAqICA9PT09PT09PSBnYl90ZXN0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBiaXQgaXMgc2V0IGluIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisgKi8KKworYm9vbCBnYl90ZXN0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bikKK3sKKwlib29sIHN0YXRlOworCXUzMiBtYXNrOworCXUzMiB3b3JkOworCisJbWFzayA9IDFMIDw8IChiaXRuICUgQklUU19QRVJfTE9ORyk7CisJd29yZCA9IG1hcC0+d29yZHNbYml0biAvIEJJVFNfUEVSX0xPTkddOworCXN0YXRlID0gd29yZCAmIG1hc2sgPyB0cnVlIDogZmFsc2U7CisKKwlyZXR1cm4gc3RhdGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL2doLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyZDk0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ2guYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGdoLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2dzLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZ2guaD4KKworc3RydWN0IGVsZW1lbnQgeworCXN0cnVjdCBlbGVtZW50ICpuZXh0OworCXU4IGRhdGFbMV07Cit9OworCitzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiB7CisJdTE2IG1heF9idWNrZXQ7CisJdTE2IHZhbF9zaXplOworCXN0cnVjdCBlbGVtZW50ICoqYnVja2V0czsKKwkgdTE2KCpoYXNoKSAodm9pZCAqLCB1MTYpOworCSBib29sKCptYXRjaCkgKHZvaWQgKiwgdm9pZCAqKTsKKwl2b2lkICgqZGVsZXRlKSAodm9pZCAqKTsKK307CisKK3N0YXRpYyB2b2lkIG5vb3Aodm9pZCAqcCk7CitzdGF0aWMgczMyIGN1cl9pbml0Oworc3RhdGljIHZvaWQgbXlmcmVlKHZvaWQgKnB0ciwgczMyIHNpemUpOworCisvKgorICogID09PT09PT09IGdoX2NyZWF0ZSA9PT09PT09PQorICovCisKK3N0cnVjdCBnaF90X2hhc2hfdGFiICpnaF9jcmVhdGUodTE2IG1heF9idWNrZXQsIHUxNiB2YWxfc2l6ZSwKKwkJCQl1MTYoKmhhc2gpICh2b2lkICosIHUxNiksIGJvb2woKm1hdGNoKSAodm9pZCAqLAorCQkJCQkJCQkJdm9pZCAqKSwKKwkJCQl2b2lkICgqZGVsZXRlKSAodm9pZCAqKSkKK3sKKwlzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWI7CisJdTE2IGk7CisJaGFzaF90YWIgPQorCSAgICAoc3RydWN0IGdoX3RfaGFzaF90YWIgKilnc19hbGxvYyhzaXplb2Yoc3RydWN0IGdoX3RfaGFzaF90YWIpKTsKKwlpZiAoaGFzaF90YWIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaGFzaF90YWItPm1heF9idWNrZXQgPSBtYXhfYnVja2V0OworCWhhc2hfdGFiLT52YWxfc2l6ZSA9IHZhbF9zaXplOworCWhhc2hfdGFiLT5oYXNoID0gaGFzaDsKKwloYXNoX3RhYi0+bWF0Y2ggPSBtYXRjaDsKKwloYXNoX3RhYi0+ZGVsZXRlID0gZGVsZXRlID09IE5VTEwgPyBub29wIDogZGVsZXRlOworCisJaGFzaF90YWItPmJ1Y2tldHMgPSAoc3RydWN0IGVsZW1lbnQgKiopCisJICAgIGdzX2FsbG9jKHNpemVvZihzdHJ1Y3QgZWxlbWVudCAqKSAqIG1heF9idWNrZXQpOworCWlmIChoYXNoX3RhYi0+YnVja2V0cyA9PSBOVUxMKSB7CisJCWdoX2RlbGV0ZShoYXNoX3RhYik7CisJCXJldHVybiBOVUxMOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXhfYnVja2V0OyBpKyspCisJCWhhc2hfdGFiLT5idWNrZXRzW2ldID0gTlVMTDsKKworCXJldHVybiBoYXNoX3RhYjsKK30KKworLyoKKyAqICA9PT09PT09PSBnaF9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBnaF9kZWxldGUoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiKQoreworCXN0cnVjdCBlbGVtZW50ICplbGVtLCAqbmV4dDsKKwl1MTYgaTsKKworCWlmIChoYXNoX3RhYiAhPSBOVUxMKSB7CisJCWlmIChoYXNoX3RhYi0+YnVja2V0cyAhPSBOVUxMKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgaGFzaF90YWItPm1heF9idWNrZXQ7IGkrKykgeworCQkJCWZvciAoZWxlbSA9IGhhc2hfdGFiLT5idWNrZXRzW2ldOyBlbGVtICE9IE5VTEw7CisJCQkJICAgICBlbGVtID0gbmV4dCkgeworCQkJCQluZXh0ID0gZWxlbS0+bmV4dDsKKwkJCQkJKCpoYXNoX3RhYi0+ZGVsZXRlKSAoZWxlbS0+ZGF0YSk7CisJCQkJCW15ZnJlZShlbGVtLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBlbGVtZW50KSAtIDEgKworCQkJCQkgICAgICAgaGFzaF90YWItPnZhbF9zaXplKTsKKwkJCQl9CisJCQl9CisKKwkJCW15ZnJlZShoYXNoX3RhYi0+YnVja2V0cywgc2l6ZW9mKHN0cnVjdCBlbGVtZW50ICopCisJCQkgICAgICAgKiBoYXNoX3RhYi0+bWF4X2J1Y2tldCk7CisJCX0KKworCQlteWZyZWUoaGFzaF90YWIsIHNpemVvZihzdHJ1Y3QgZ2hfdF9oYXNoX3RhYikpOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBnaF9leGl0ID09PT09PT09CisgKi8KKwordm9pZCBnaF9leGl0KHZvaWQpCit7CisJaWYgKGN1cl9pbml0LS0gPT0gMSkKKwkJZ3NfZXhpdCgpOworCit9CisKKy8qCisgKiAgPT09PT09PT0gZ2hfZmluZCA9PT09PT09PQorICovCisKK3ZvaWQgKmdoX2ZpbmQoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiLCB2b2lkICprZXkpCit7CisJc3RydWN0IGVsZW1lbnQgKmVsZW07CisKKwllbGVtID0gaGFzaF90YWItPmJ1Y2tldHNbKCpoYXNoX3RhYi0+aGFzaCkgKGtleSwgaGFzaF90YWItPm1heF9idWNrZXQpXTsKKworCWZvciAoOyBlbGVtOyBlbGVtID0gZWxlbS0+bmV4dCkgeworCQlpZiAoKCpoYXNoX3RhYi0+bWF0Y2gpIChrZXksIGVsZW0tPmRhdGEpKQorCQkJcmV0dXJuIGVsZW0tPmRhdGE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2hfaW5pdCA9PT09PT09PQorICovCisKK3ZvaWQgZ2hfaW5pdCh2b2lkKQoreworCWlmIChjdXJfaW5pdCsrID09IDApCisJCWdzX2luaXQoKTsKK30KKworLyoKKyAqICA9PT09PT09PSBnaF9pbnNlcnQgPT09PT09PT0KKyAqLworCit2b2lkICpnaF9pbnNlcnQoc3RydWN0IGdoX3RfaGFzaF90YWIgKmhhc2hfdGFiLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKQoreworCXN0cnVjdCBlbGVtZW50ICplbGVtOworCXUxNiBpOworCWNoYXIgKnNyYywgKmRzdDsKKworCWVsZW0gPSAoc3RydWN0IGVsZW1lbnQgKilnc19hbGxvYyhzaXplb2Yoc3RydWN0IGVsZW1lbnQpIC0gMSArCisJCQkJCSAgaGFzaF90YWItPnZhbF9zaXplKTsKKwlpZiAoZWxlbSAhPSBOVUxMKSB7CisKKwkJZHN0ID0gKGNoYXIgKillbGVtLT5kYXRhOworCQlzcmMgPSAoY2hhciAqKXZhbHVlOworCQlmb3IgKGkgPSAwOyBpIDwgaGFzaF90YWItPnZhbF9zaXplOyBpKyspCisJCQkqZHN0KysgPSAqc3JjKys7CisKKwkJaSA9ICgqaGFzaF90YWItPmhhc2gpIChrZXksIGhhc2hfdGFiLT5tYXhfYnVja2V0KTsKKwkJZWxlbS0+bmV4dCA9IGhhc2hfdGFiLT5idWNrZXRzW2ldOworCQloYXNoX3RhYi0+YnVja2V0c1tpXSA9IGVsZW07CisKKwkJcmV0dXJuIGVsZW0tPmRhdGE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9vcCA9PT09PT09PQorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIHZvaWQgbm9vcCh2b2lkICpwKQoreworCXAgPSBwOwkJCS8qIHN0aWZsZSBjb21waWxlciB3YXJuaW5nICovCit9CisKKy8qCisgKiAgPT09PT09PT0gbXlmcmVlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIG15ZnJlZSh2b2lkICpwdHIsIHMzMiBzaXplKQoreworCWdzX2ZyZWUocHRyKTsKK30KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKy8qKgorICogZ2hfaXRlcmF0ZSgpIC0gVGhpcyBmdW5jdGlvbiBnb2VzIHRocm91Z2ggYWxsIHRoZSBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZQorICoJCWxvb2tpbmcgZm9yIHRoZSBkc3Agc3ltYm9scy4KKyAqIEBoYXNoX3RhYjoJSGFzaCB0YWJsZQorICogQGNhbGxiYWNrOglwb2ludGVyIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAdXNlcl9kYXRhOglVc2VyIGRhdGEsIGNvbnRhaW5zIHRoZSBmaW5kX3N5bWJvbF9jb250ZXh0IHBvaW50ZXIKKyAqCisgKi8KK3ZvaWQgZ2hfaXRlcmF0ZShzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWIsCisJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqLCB2b2lkICopLCB2b2lkICp1c2VyX2RhdGEpCit7CisJc3RydWN0IGVsZW1lbnQgKmVsZW07CisJdTMyIGk7CisKKwlpZiAoaGFzaF90YWIgJiYgaGFzaF90YWItPmJ1Y2tldHMpCisJCWZvciAoaSA9IDA7IGkgPCBoYXNoX3RhYi0+bWF4X2J1Y2tldDsgaSsrKSB7CisJCQllbGVtID0gaGFzaF90YWItPmJ1Y2tldHNbaV07CisJCQl3aGlsZSAoZWxlbSkgeworCQkJCWNhbGxiYWNrKCZlbGVtLT5kYXRhLCB1c2VyX2RhdGEpOworCQkJCWVsZW0gPSBlbGVtLT5uZXh0OworCQkJfQorCQl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ3MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9nZW4vZ3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmM2MTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi9ncy5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBncy5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdlbmVyYWwgc3RvcmFnZSBtZW1vcnkgYWxsb2NhdG9yIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ncy5oPgorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiBjdW1zaXplOworCisvKgorICogID09PT09PT09IGdzX2FsbG9jID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgQWxsb2NhdGVzIG1lbW9yeSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuCisgKi8KK3ZvaWQgKmdzX2FsbG9jKHUzMiBzaXplKQoreworCXZvaWQgKnA7CisKKwlwID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwljdW1zaXplICs9IHNpemU7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZXhpdCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHRoZSB1c2FnZSBvZiB0aGUgR1MgbW9kdWxlLgorICovCit2b2lkIGdzX2V4aXQodm9pZCkKK3sKKwkvKiBEbyBub3RoaW5nICovCit9CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZnJlZSA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBtZW1vcnkuCisgKi8KK3ZvaWQgZ3NfZnJlZSh2b2lkICpwdHIpCit7CisJa2ZyZWUocHRyKTsKKwkvKiBhY2shIG5vIHNpemUgaW5mbyAqLworCS8qIGN1bXNpemUgLT0gc2l6ZTsgKi8KK30KKworLyoKKyAqICA9PT09PT09PSBnc19mcmVlcyA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBtZW1vcnkuCisgKi8KK3ZvaWQgZ3NfZnJlZXModm9pZCAqcHRyLCB1MzIgc2l6ZSkKK3sKKwlrZnJlZShwdHIpOworCWN1bXNpemUgLT0gc2l6ZTsKK30KKworLyoKKyAqICA9PT09PT09PSBnc19pbml0ID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIEdTIG1vZHVsZS4KKyAqLwordm9pZCBnc19pbml0KHZvaWQpCit7CisJLyogRG8gbm90aGluZyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi91dWlkdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2dlbi91dWlkdXRpbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzljNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZ2VuL3V1aWR1dGlsLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiB1dWlkdXRpbC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgVVVJRCBoZWxwZXIgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXVpZHV0aWwuaD4KKworLyoKKyAqICA9PT09PT09PSB1dWlkX3V1aWRfdG9fc3RyaW5nID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29udmVydHMgYSBzdHJ1Y3QgZHNwX3V1aWQgdG8gYSBzdHJpbmcuCisgKiAgICAgIE5vdGU6IHNucHJpbnRmIGZvcm1hdCBzcGVjaWZpZXIgaXM6CisgKiAgICAgICVbZmxhZ3NdIFt3aWR0aF0gWy5wcmVjaXNpb25dIFt7aCB8IGwgfCBJNjQgfCBMfV10eXBlCisgKi8KK3ZvaWQgdXVpZF91dWlkX3RvX3N0cmluZyhzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLCBjaGFyICpzel91dWlkLAorCQkJIHMzMiBzaXplKQoreworCXMzMiBpOwkJCS8qIHJldHVybiByZXN1bHQgZnJvbSBzbnByaW50Zi4gKi8KKworCURCQ19SRVFVSVJFKHV1aWRfb2JqICYmIHN6X3V1aWQpOworCisJaSA9IHNucHJpbnRmKHN6X3V1aWQsIHNpemUsCisJCSAgICAgIiUuOFhfJS40WF8lLjRYXyUuMlglLjJYXyUuMlglLjJYJS4yWCUuMlglLjJYJS4yWCIsCisJCSAgICAgdXVpZF9vYmotPnVsX2RhdGExLCB1dWlkX29iai0+dXNfZGF0YTIsIHV1aWRfb2JqLT51c19kYXRhMywKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTQsIHV1aWRfb2JqLT51Y19kYXRhNSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbMF0sIHV1aWRfb2JqLT51Y19kYXRhNlsxXSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbMl0sIHV1aWRfb2JqLT51Y19kYXRhNlszXSwKKwkJICAgICB1dWlkX29iai0+dWNfZGF0YTZbNF0sIHV1aWRfb2JqLT51Y19kYXRhNls1XSk7CisKKwlEQkNfRU5TVVJFKGkgIT0gLTEpOworfQorCitzdGF0aWMgczMyIHV1aWRfaGV4X3RvX2JpbihjaGFyICpidWYsIHMzMiBsZW4pCit7CisJczMyIGk7CisJczMyIHJlc3VsdCA9IDA7CisJaW50IHZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhbHVlID0gaGV4X3RvX2JpbigqYnVmKyspOworCQlyZXN1bHQgKj0gMTY7CisJCWlmICh2YWx1ZSA+IDApCisJCQlyZXN1bHQgKz0gdmFsdWU7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqICA9PT09PT09PSB1dWlkX3V1aWRfZnJvbV9zdHJpbmcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb252ZXJ0cyBhIHN0cmluZyB0byBhIHN0cnVjdCBkc3BfdXVpZC4KKyAqLwordm9pZCB1dWlkX3V1aWRfZnJvbV9zdHJpbmcoY2hhciAqc3pfdXVpZCwgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaikKK3sKKwlzMzIgajsKKworCXV1aWRfb2JqLT51bF9kYXRhMSA9IHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA4KTsKKwlzel91dWlkICs9IDg7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51c19kYXRhMiA9ICh1MTYpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA0KTsKKwlzel91dWlkICs9IDQ7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51c19kYXRhMyA9ICh1MTYpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCA0KTsKKwlzel91dWlkICs9IDQ7CisKKwkvKiBTdGVwIG92ZXIgdW5kZXJzY29yZSAqLworCXN6X3V1aWQrKzsKKworCXV1aWRfb2JqLT51Y19kYXRhNCA9ICh1OCkgdXVpZF9oZXhfdG9fYmluKHN6X3V1aWQsIDIpOworCXN6X3V1aWQgKz0gMjsKKworCXV1aWRfb2JqLT51Y19kYXRhNSA9ICh1OCkgdXVpZF9oZXhfdG9fYmluKHN6X3V1aWQsIDIpOworCXN6X3V1aWQgKz0gMjsKKworCS8qIFN0ZXAgb3ZlciB1bmRlcnNjb3JlICovCisJc3pfdXVpZCsrOworCisJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQl1dWlkX29iai0+dWNfZGF0YTZbal0gPSAodTgpIHV1aWRfaGV4X3RvX2Jpbihzel91dWlkLCAyKTsKKwkJc3pfdXVpZCArPSAyOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9FYXNpR2xvYmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvRWFzaUdsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGQ3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvRWFzaUdsb2JhbC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBFYXNpR2xvYmFsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0VBU0lHTE9CQUxfSAorI2RlZmluZSBfRUFTSUdMT0JBTF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIERFRklORTogICAgICAgIFJFQURfT05MWSwgV1JJVEVfT05MWSAmICBSRUFEX1dSSVRFCisgKgorICogREVTQ1JJUFRJT046IERlZmluZXMgdXNlZCB0byBkZXNjcmliZSByZWdpc3RlciB0eXBlcyBmb3IgRUFTSS1jaGVja2VyIHRlc3RzLgorICovCisKKyNkZWZpbmUgUkVBRF9PTkxZICAgIDEKKyNkZWZpbmUgV1JJVEVfT05MWSAgIDIKKyNkZWZpbmUgUkVBRF9XUklURSAgIDMKKworLyoKKyAqIE1BQ1JPOiAgICAgICAgX0RFQlVHX0xFVkVMMV9FQVNJCisgKgorICogREVTQ1JJUFRJT046ICBBIE1BQ1JPIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBwYXJ0aWN1bGFyIGJlYWNoCisgKiAgICAgICAgICAgICAgIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbiB3YXMgY2FsbGVkLgorICoKKyAqIE5PVEU6ICAgICAgICAgV2UgY3VycmVudGx5IGRvbnQgdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAqLworI2RlZmluZSBfREVCVUdfTEVWRUwxX0VBU0koZWFzaV9udW0pICAgICAoKHZvaWQpMCkKKworI2VuZGlmIC8qIF9FQVNJR0xPQkFMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVBY2NJbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2VmY2EzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L01NVUFjY0ludC5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBNTVVBY2NJbnQuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfTU1VX0FDQ19JTlRfSAorI2RlZmluZSBfTU1VX0FDQ19JTlRfSAorCisvKiBNYXBwaW5ncyBvZiBsZXZlbCAxIEVBU0kgZnVuY3Rpb24gbnVtYmVycyB0byBmdW5jdGlvbiBuYW1lcyAqLworCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfU1lTQ09ORklHX1JFQURfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMykKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfSURMRV9NT0RFX1dSSVRFMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAxNykKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfQVVUT19JRExFX1dSSVRFMzIgICAgKE1NVV9CQVNFX0VBU0lMMSArIDM5KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDUxKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIgKE1NVV9CQVNFX0VBU0lMMSArIDEwMikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMTAzKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX1dBTEtJTkdfU1RUV0xfUlVOTklOR19SRUFEMzIgKE1NVV9CQVNFX0VBU0lMMSArIDE1NikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9SRUFEMzIgKE1NVV9CQVNFX0VBU0lMMSArIDE3NCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDE4MCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyICAgICAoTU1VX0JBU0VfRUFTSUwxICsgMTkwKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0ZBVUxUX0FEX1JFQURfUkVHSVNURVIzMiAgIChNTVVfQkFTRV9FQVNJTDEgKyAxOTQpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfVFRCX1dSSVRFX1JFR0lTVEVSMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAxOTgpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19SRUFEX1JFR0lTVEVSMzIgICAoTU1VX0JBU0VfRUFTSUwxICsgMjAzKQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfV1JJVEVfUkVHSVNURVIzMiAgKE1NVV9CQVNFX0VBU0lMMSArIDIwNCkKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9MT0NLX0JBU0VfVkFMVUVfUkVBRDMyICAoTU1VX0JBU0VfRUFTSUwxICsgMjA1KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fUkVBRDMyIChNTVVfQkFTRV9FQVNJTDEgKyAyMDkpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9XUklURTMyIChNTVVfQkFTRV9FQVNJTDEgKyAyMTEpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMiAgKE1NVV9CQVNFX0VBU0lMMSArIDIxMikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9MRF9UTEJfUkVBRF9SRUdJU1RFUjMyICAgIChNTVVfQkFTRV9FQVNJTDEgKyAyMTMpCisjZGVmaW5lIEVBU0lMMV9NTVVNTVVfTERfVExCX1dSSVRFX1JFR0lTVEVSMzIgICAoTU1VX0JBU0VfRUFTSUwxICsgMjE0KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0NBTV9XUklURV9SRUdJU1RFUjMyICAgKE1NVV9CQVNFX0VBU0lMMSArIDIyNikKKyNkZWZpbmUgRUFTSUwxX01NVU1NVV9SQU1fV1JJVEVfUkVHSVNURVIzMiAoTU1VX0JBU0VfRUFTSUwxICsgMjY4KQorI2RlZmluZSBFQVNJTDFfTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIgIChNTVVfQkFTRV9FQVNJTDEgKyAzMjIpCisKKy8qIFJlZ2lzdGVyIG9mZnNldCBhZGRyZXNzIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX09GRlNFVCAgIDB4MTAKKyNkZWZpbmUgTU1VX01NVV9JUlFTVEFUVVNfT0ZGU0VUICAweDE4CisjZGVmaW5lIE1NVV9NTVVfSVJRRU5BQkxFX09GRlNFVCAgICAweDFjCisjZGVmaW5lIE1NVV9NTVVfV0FMS0lOR19TVF9PRkZTRVQgMHg0MAorI2RlZmluZSBNTVVfTU1VX0NOVExfT0ZGU0VUICAgMHg0NAorI2RlZmluZSBNTVVfTU1VX0ZBVUxUX0FEX09GRlNFVCAgMHg0OAorI2RlZmluZSBNTVVfTU1VX1RUQl9PRkZTRVQgIDB4NGMKKyNkZWZpbmUgTU1VX01NVV9MT0NLX09GRlNFVCAgIDB4NTAKKyNkZWZpbmUgTU1VX01NVV9MRF9UTEJfT0ZGU0VUICAweDU0CisjZGVmaW5lIE1NVV9NTVVfQ0FNX09GRlNFVCAgIDB4NTgKKyNkZWZpbmUgTU1VX01NVV9SQU1fT0ZGU0VUICAgMHg1YworI2RlZmluZSBNTVVfTU1VX0dGTFVTSF9PRkZTRVQgIDB4NjAKKyNkZWZpbmUgTU1VX01NVV9GTFVTSF9FTlRSWV9PRkZTRVQgIDB4NjQKKy8qIEJpdGZpZWxkIG1hc2sgYW5kIG9mZnNldCBkZWNsYXJhdGlvbnMgKi8KKyNkZWZpbmUgTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX01BU0sgIDB4MTgKKyNkZWZpbmUgTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX09GRlNFVCAgMworI2RlZmluZSBNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfTUFTSyAgMHgxCisjZGVmaW5lIE1NVV9NTVVfU1lTQ09ORklHX0FVVE9fSURMRV9PRkZTRVQgICAwCisjZGVmaW5lIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19NQVNLIDB4MQorI2RlZmluZSBNTVVfTU1VX1dBTEtJTkdfU1RfVFdMX1JVTk5JTkdfT0ZGU0VUICAwCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0sgMHg0CisjZGVmaW5lIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVCAyCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0sgICAgMHgyCisjZGVmaW5lIE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX09GRlNFVCAgIDEKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSyAweGZjMDAKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfT0ZGU0VUICAgMTAKKyNkZWZpbmUgTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0sgICAweDNmMAorI2RlZmluZSBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fT0ZGU0VUICAgIDQKKworI2VuZGlmIC8qIF9NTVVfQUNDX0lOVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvTU1VUmVnQWNNLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvTU1VUmVnQWNNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxYTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9NTVVSZWdBY00uaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIE1NVVJlZ0FjTS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9NTVVfUkVHX0FDTV9ICisjZGVmaW5lIF9NTVVfUkVHX0FDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPEVhc2lHbG9iYWwuaD4KKworI2luY2x1ZGUgIk1NVUFjY0ludC5oIgorCisjaWYgZGVmaW5lZChVU0VfTEVWRUxfMV9NQUNST1MpCisKKyNkZWZpbmUgTU1VTU1VX1NZU0NPTkZJR19SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfU1lTQ09ORklHX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfU1lTQ09ORklHX0lETEVfTU9ERV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfSURMRV9NT0RFX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9TWVNDT05GSUdfSURMRV9NT0RFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfU1lTQ09ORklHX0lETEVfTU9ERV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX1NZU0NPTkZJR19JRExFX01PREVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfU1lTQ09ORklHX0FVVE9fSURMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9TWVNDT05GSUdfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9TWVNDT05GSUdfQVVUT19JRExFX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9TWVNDT05GSUdfQVVUT19JRExFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfU1lTQ09ORklHX0FVVE9fSURMRV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX1NZU0NPTkZJR19BVVRPX0lETEVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfSVJRU1RBVFVTX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koZWFzaWwxX21tdW1tdV9pcnFzdGF0dXNfcmVhZF9yZWdpc3RlcjMyKSxcCisgICAgICBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNzKStNTVVfTU1VX0lSUVNUQVRVU19PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9JUlFTVEFUVVNfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfSVJRU1RBVFVTX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyKTtcCisgICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9JUlFFTkFCTEVfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfSVJRRU5BQkxFX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0lSUUVOQUJMRV9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9XQUxLSU5HX1NUVFdMX1JVTk5JTkdfUkVBRDMyKGJhc2VfYWRkcmVzcylcCisgICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1dBTEtJTkdfU1RUV0xfUlVOTklOR19SRUFEMzIpLFwKKyAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSsoTU1VX01NVV9XQUxLSU5HX1NUX09GRlNFVCkpKSlcCisgICAgICAmIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfV0FMS0lOR19TVF9UV0xfUlVOTklOR19PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9DTlRMVFdMX0VOQUJMRV9SRUFEMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfQ05UTFRXTF9FTkFCTEVfUkVBRDMyKSxcCisgICAgICAoKChfX3Jhd19yZWFkbCgoKGJhc2VfYWRkcmVzcykrKE1NVV9NTVVfQ05UTF9PRkZTRVQpKSkpICZcCisgICAgICBNTVVfTU1VX0NOVExfVFdMX0VOQUJMRV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NOVExfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyKTtcCisgICAgZGF0YSAmPSB+KE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX09GRlNFVDtcCisgICAgbmV3X3ZhbHVlICY9IE1NVV9NTVVfQ05UTF9UV0xfRU5BQkxFX01BU0s7XAorICAgIG5ld192YWx1ZSB8PSBkYXRhO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCBiYXNlX2FkZHJlc3Mrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0NOVExNTVVfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NOVExfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKTtcCisgICAgZGF0YSAmPSB+KE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX09GRlNFVDtcCisgICAgbmV3X3ZhbHVlICY9IE1NVV9NTVVfQ05UTF9NTVVfRU5BQkxFX01BU0s7XAorICAgIG5ld192YWx1ZSB8PSBkYXRhO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCBiYXNlX2FkZHJlc3Mrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0ZBVUxUX0FEX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9GQVVMVF9BRF9SRUFEX1JFR0lTVEVSMzIpLFwKKyAgICAgIF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK01NVV9NTVVfRkFVTFRfQURfT0ZGU0VUKSkKKworI2RlZmluZSBNTVVNTVVfVFRCX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX1RUQl9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9UVEJfV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMiksXAorICAgICAgX19yYXdfcmVhZGwoKGJhc2VfYWRkcmVzcykrTU1VX01NVV9MT0NLX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xPQ0tfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfTE9DS19PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19CQVNFX1ZBTFVFX1JFQUQzMihiYXNlX2FkZHJlc3MpXAorICAgIChfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0JBU0VfVkFMVUVfUkVBRDMyKSxcCisgICAgICAoKChfX3Jhd19yZWFkbCgoKGJhc2VfYWRkcmVzcykrKE1NVV9NTVVfTE9DS19PRkZTRVQpKSkpICZcCisgICAgICBNTVVfTU1VX0xPQ0tfQkFTRV9WQUxVRV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfTE9DS19CQVNFX1ZBTFVFX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xPQ0tfQkFTRV9WQUxVRV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9MT0NLX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIGRhdGEgPSBfX3Jhd19yZWFkbCgoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKKyAgICByZWdpc3RlciB1MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCisgICAgX0RFQlVHX0xFVkVMMV9FQVNJKGVhc2lsMV9tbXVtbXVfbG9ja19iYXNlX3ZhbHVlX3dyaXRlMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSyk7XAorICAgIG5ld192YWx1ZSA8PD0gTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfT0ZGU0VUO1wKKyAgICBuZXdfdmFsdWUgJj0gTU1VX01NVV9MT0NLX0JBU0VfVkFMVUVfTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9SRUFEMzIoYmFzZV9hZGRyZXNzKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9SRUFEMzIpLFwKKyAgICAgICgoKF9fcmF3X3JlYWRsKCgoYmFzZV9hZGRyZXNzKSsoTU1VX01NVV9MT0NLX09GRlNFVCkpKSkgJlwKKyAgICAgIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9NQVNLKSA+PlwKKyAgICAgIE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQpKQorCisjZGVmaW5lIE1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0xPQ0tfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgZGF0YSA9IF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIpO1wKKyAgICBkYXRhICY9IH4oTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0spO1wKKyAgICBuZXdfdmFsdWUgPDw9IE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQ7XAorICAgIG5ld192YWx1ZSAmPSBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fTUFTSztcCisgICAgbmV3X3ZhbHVlIHw9IGRhdGE7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIGJhc2VfYWRkcmVzcytvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMih2YXIsIHZhbHVlKVwKKyAgICAoX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9TRVQzMiksXAorICAgICAgKCgodmFyKSAmIH4oTU1VX01NVV9MT0NLX0NVUlJFTlRfVklDVElNX01BU0spKSB8XAorICAgICAgKCgodmFsdWUpIDw8IE1NVV9NTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9PRkZTRVQpICZcCisgICAgICBNTVVfTU1VX0xPQ0tfQ1VSUkVOVF9WSUNUSU1fTUFTSykpKQorCisjZGVmaW5lIE1NVU1NVV9MRF9UTEJfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcylcCisgICAgKF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0xEX1RMQl9SRUFEX1JFR0lTVEVSMzIpLFwKKyAgICAgIF9fcmF3X3JlYWRsKChiYXNlX2FkZHJlc3MpK01NVV9NTVVfTERfVExCX09GRlNFVCkpCisKKyNkZWZpbmUgTU1VTU1VX0xEX1RMQl9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgdmFsdWUpXAore1wKKyAgICBjb25zdCB1MzIgb2Zmc2V0ID0gTU1VX01NVV9MRF9UTEJfT0ZGU0VUO1wKKyAgICByZWdpc3RlciB1MzIgbmV3X3ZhbHVlID0gKHZhbHVlKTtcCisgICAgX0RFQlVHX0xFVkVMMV9FQVNJKEVBU0lMMV9NTVVNTVVfTERfVExCX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2RlZmluZSBNTVVNTVVfQ0FNX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0NBTV9PRkZTRVQ7XAorICAgIHJlZ2lzdGVyIHUzMiBuZXdfdmFsdWUgPSAodmFsdWUpO1wKKyAgICBfREVCVUdfTEVWRUwxX0VBU0koRUFTSUwxX01NVU1NVV9DQU1fV1JJVEVfUkVHSVNURVIzMik7XAorICAgIF9fcmF3X3dyaXRlbChuZXdfdmFsdWUsIChiYXNlX2FkZHJlc3MpK29mZnNldCk7XAorfQorCisjZGVmaW5lIE1NVU1NVV9SQU1fV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIHZhbHVlKVwKK3tcCisgICAgY29uc3QgdTMyIG9mZnNldCA9IE1NVV9NTVVfUkFNX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX1JBTV9XUklURV9SRUdJU1RFUjMyKTtcCisgICAgX19yYXdfd3JpdGVsKG5ld192YWx1ZSwgKGJhc2VfYWRkcmVzcykrb2Zmc2V0KTtcCit9CisKKyNkZWZpbmUgTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCB2YWx1ZSlcCit7XAorICAgIGNvbnN0IHUzMiBvZmZzZXQgPSBNTVVfTU1VX0ZMVVNIX0VOVFJZX09GRlNFVDtcCisgICAgcmVnaXN0ZXIgdTMyIG5ld192YWx1ZSA9ICh2YWx1ZSk7XAorICAgIF9ERUJVR19MRVZFTDFfRUFTSShFQVNJTDFfTU1VTU1VX0ZMVVNIX0VOVFJZX1dSSVRFX1JFR0lTVEVSMzIpO1wKKyAgICBfX3Jhd193cml0ZWwobmV3X3ZhbHVlLCAoYmFzZV9hZGRyZXNzKStvZmZzZXQpO1wKK30KKworI2VuZGlmIC8qIFVTRV9MRVZFTF8xX01BQ1JPUyAqLworCisjZW5kaWYgLyogX01NVV9SRUdfQUNNX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ody9od19kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjY2ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfZGVmcy5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBod19kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIEhXIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0hXX0RFRlNfSAorI2RlZmluZSBfSFdfREVGU19ICisKKy8qIFBhZ2Ugc2l6ZSAqLworI2RlZmluZSBIV19QQUdFX1NJWkU0S0IgICAweDEwMDAKKyNkZWZpbmUgSFdfUEFHRV9TSVpFNjRLQiAgMHgxMDAwMAorI2RlZmluZSBIV19QQUdFX1NJWkUxTUIgICAweDEwMDAwMAorI2RlZmluZSBIV19QQUdFX1NJWkUxNk1CICAweDEwMDAwMDAKKworLyogaHdfc3RhdHVzOiAgcmV0dXJuIHR5cGUgZm9yIEhXIEFQSSAqLwordHlwZWRlZiBsb25nIGh3X3N0YXR1czsKKworLyogIE1hY3JvIHVzZWQgdG8gc2V0IGFuZCBjbGVhciBhbnkgYml0ICovCisjZGVmaW5lIEhXX0NMRUFSCTAKKyNkZWZpbmUgSFdfU0VUCQkxCisKKy8qIGh3X2VuZGlhbmlzbV90OiAgRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5kaWFuaXNtCisgKgkJRG8gTk9UIGNoYW5nZSB0aGVzZSB2YWx1ZXMuIFRoZXkgYXJlIHVzZWQgYXMgYml0IGZpZWxkcy4gKi8KK2VudW0gaHdfZW5kaWFuaXNtX3QgeworCUhXX0xJVFRMRV9FTkRJQU4sCisJSFdfQklHX0VORElBTgorfTsKKworLyogaHdfZWxlbWVudF9zaXplX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbGVtZW50IHNpemUKKyAqCQlEbyBOT1QgY2hhbmdlIHRoZXNlIHZhbHVlcy4gVGhleSBhcmUgdXNlZCBhcyBiaXQgZmllbGRzLiAqLworZW51bSBod19lbGVtZW50X3NpemVfdCB7CisJSFdfRUxFTV9TSVpFOEJJVCwKKwlIV19FTEVNX1NJWkUxNkJJVCwKKwlIV19FTEVNX1NJWkUzMkJJVCwKKwlIV19FTEVNX1NJWkU2NEJJVAorfTsKKworLyogaHdfaWRsZV9tb2RlX3Q6ICBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IElkbGUgbW9kZXMgKi8KK2VudW0gaHdfaWRsZV9tb2RlX3QgeworCUhXX0ZPUkNFX0lETEUsCisJSFdfTk9fSURMRSwKKwlIV19TTUFSVF9JRExFCit9OworCisjZW5kaWYgLyogX0hXX0RFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNGY1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmMKQEAgLTAsMCArMSw1NjIgQEAKKy8qCisgKiBod19tbXUuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBBUEkgZGVmaW5pdGlvbnMgdG8gc2V0dXAgTU1VIFRMQiBhbmQgUFRFCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgIk1NVVJlZ0FjTS5oIgorI2luY2x1ZGUgPGh3X2RlZnMuaD4KKyNpbmNsdWRlIDxod19tbXUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjZGVmaW5lIE1NVV9CQVNFX1ZBTF9NQVNLCTB4RkMwMAorI2RlZmluZSBNTVVfUEFHRV9NQVgJICAgICAzCisjZGVmaW5lIE1NVV9FTEVNRU5UU0laRV9NQVggICAgICAzCisjZGVmaW5lIE1NVV9BRERSX01BU0sJICAgIDB4RkZGRkYwMDAKKyNkZWZpbmUgTU1VX1RUQl9NQVNLCSAgICAgMHhGRkZGQzAwMAorI2RlZmluZSBNTVVfU0VDVElPTl9BRERSX01BU0sgICAgMHhGRkYwMDAwMAorI2RlZmluZSBNTVVfU1NFQ1RJT05fQUREUl9NQVNLICAgMHhGRjAwMDAwMAorI2RlZmluZSBNTVVfUEFHRV9UQUJMRV9NQVNLICAgICAgMHhGRkZGRkMwMAorI2RlZmluZSBNTVVfTEFSR0VfUEFHRV9NQVNLICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBNTVVfU01BTExfUEFHRV9NQVNLICAgICAgMHhGRkZGRjAwMAorCisjZGVmaW5lIE1NVV9MT0FEX1RMQgkweDAwMDAwMDAxCisjZGVmaW5lIE1NVV9HRkxVU0gJMHg2MAorCisvKgorICogaHdfbW11X3BhZ2Vfc2l6ZV90OiBFbnVtZXJhdGVkIFR5cGUgdXNlZCB0byBzcGVjaWZ5IHRoZSBNTVUgUGFnZSBTaXplKFNMU1MpCisgKi8KK2VudW0gaHdfbW11X3BhZ2Vfc2l6ZV90IHsKKwlIV19NTVVfU0VDVElPTiwKKwlIV19NTVVfTEFSR0VfUEFHRSwKKwlIV19NTVVfU01BTExfUEFHRSwKKwlIV19NTVVfU1VQRVJTRUNUSU9OCit9OworCisvKgorICogRlVOQ1RJT04JICAgICAgOiBtbXVfZmx1c2hfZW50cnkKKyAqCisgKiBJTlBVVFM6CisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogYmFzZV9hZGRyZXNzCisgKiAgICAgICBUeXBlCQk6IGNvbnN0IHUzMgorICogICAgICAgRGVzY3JpcHRpb24gICAgIDogQmFzZSBBZGRyZXNzIG9mIGluc3RhbmNlIG9mIE1NVSBtb2R1bGUKKyAqCisgKiBSRVRVUk5TOgorICoKKyAqICAgICAgIFR5cGUJCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyCisgKgkJCQkJCVBhcmFtYXRlciB3YXMgc2V0IHRvIE5VTEwKKyAqCisgKiBQVVJQT1NFOgkgICAgICA6IEZsdXNoIHRoZSBUTEIgZW50cnkgcG9pbnRlZCBieSB0aGUKKyAqCQkJbG9jayBjb3VudGVyIHJlZ2lzdGVyCisgKgkJCWV2ZW4gaWYgdGhpcyBlbnRyeSBpcyBzZXQgcHJvdGVjdGVkCisgKgorICogTUVUSE9EOgkgICAgICAgOiBDaGVjayB0aGUgSW5wdXQgcGFyYW1ldGVyIGFuZCBGbHVzaCBhCisgKgkJCSBzaW5nbGUgZW50cnkgaW4gdGhlIFRMQi4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfZmx1c2hfZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpOworCisvKgorICogRlVOQ1RJT04JICAgICAgOiBtbXVfc2V0X2NhbV9lbnRyeQorICoKKyAqIElOUFVUUzoKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBiYXNlX2FkZHJlc3MKKyAqICAgICAgIFR5cEUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBCYXNlIEFkZHJlc3Mgb2YgaW5zdGFuY2Ugb2YgTU1VIG1vZHVsZQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHBhZ2Vfc3oKKyAqICAgICAgIFR5cEUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBJdCBpbmRpY2F0ZXMgdGhlIHBhZ2Ugc2l6ZQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHByZXNlcnZlZF9iaXQKKyAqICAgICAgIFR5cGUJCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBJdCBpbmRpY2F0ZXMgdGhlIFRMQiBlbnRyeSBpcyBwcmVzZXJ2ZWQgZW50cnkKKyAqCQkJCQkJCW9yIG5vdAorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IHZhbGlkX2JpdAorICogICAgICAgVHlwZQkJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEl0IGluZGljYXRlcyB0aGUgVExCIGVudHJ5IGlzIHZhbGlkIGVudHJ5IG9yIG5vdAorICoKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiB2aXJ0dWFsX2FkZHJfdGFnCisgKiAgICAgICBUeXBlCSAgICAJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IHZpcnR1YWwgQWRkcmVzcworICoKKyAqIFJFVFVSTlM6CisgKgorICogICAgICAgVHlwZQkgICAgCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyIFBhcmFtYXRlcgorICoJCQkJCQkgICB3YXMgc2V0IHRvIE5VTEwKKyAqCQkJIFJFVF9QQVJBTV9PVVRfT0ZfUkFOR0UgLS0gSW5wdXQgUGFyYW1ldGVyIG91dAorICoJCQkJCQkgICBvZiBSYW5nZQorICoKKyAqIFBVUlBPU0U6CSAgICAgIAk6IFNldCBNTVVfQ0FNIHJlZworICoKKyAqIE1FVEhPRDoJICAgICAgIAk6IENoZWNrIHRoZSBJbnB1dCBwYXJhbWV0ZXJzIGFuZCBzZXQgdGhlIENBTSBlbnRyeS4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X2NhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGFnZV9zeiwKKwkJCQkgICBjb25zdCB1MzIgcHJlc2VydmVkX2JpdCwKKwkJCQkgICBjb25zdCB1MzIgdmFsaWRfYml0LAorCQkJCSAgIGNvbnN0IHUzMiB2aXJ0dWFsX2FkZHJfdGFnKTsKKworLyoKKyAqIEZVTkNUSU9OCSAgICAgIDogbW11X3NldF9yYW1fZW50cnkKKyAqCisgKiBJTlBVVFM6CisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogYmFzZV9hZGRyZXNzCisgKiAgICAgICBUeXBlCSAgICAJOiBjb25zdCB1MzIKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEJhc2UgQWRkcmVzcyBvZiBpbnN0YW5jZSBvZiBNTVUgbW9kdWxlCisgKgorICogICAgICAgSWRlbnRpZmllciAgICAgIDogcGh5c2ljYWxfYWRkcgorICogICAgICAgVHlwZQkgICAgCTogY29uc3QgdTMyCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBQaHlzaWNhbCBBZGRyZXNzIHRvIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nCisgKgkJCSB2aXJ0dWFsICAgQWRkcmVzcyBzaG91bGRwb2ludAorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IGVuZGlhbmlzbQorICogICAgICAgVHlwZQkgICAgCTogaHdfZW5kaWFuaXNtX3QKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IGVuZGlhbmlzbSBmb3IgdGhlIGdpdmVuIHBhZ2UKKyAqCisgKiAgICAgICBJZGVudGlmaWVyICAgICAgOiBlbGVtZW50X3NpemUKKyAqICAgICAgIFR5cGUJICAgIAk6IGh3X2VsZW1lbnRfc2l6ZV90CisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiBUaGUgZWxlbWVudCBzaXplICggOCwxNiwgMzIgb3IgNjQgYml0KQorICoKKyAqICAgICAgIElkZW50aWZpZXIgICAgICA6IG1peGVkX3NpemUKKyAqICAgICAgIFR5cGUJICAgIAk6IGh3X21tdV9taXhlZF9zaXplX3QKKyAqICAgICAgIERlc2NyaXB0aW9uICAgICA6IEVsZW1lbnQgU2l6ZSB0byBmb2xsb3cgQ1BVIG9yIFRMQgorICoKKyAqIFJFVFVSTlM6CisgKgorICogICAgICAgVHlwZQkgICAgCTogaHdfc3RhdHVzCisgKiAgICAgICBEZXNjcmlwdGlvbiAgICAgOiAwCQkgLS0gTm8gZXJyb3JzIG9jY3VyZWQKKyAqCQkJIFJFVF9CQURfTlVMTF9QQVJBTSAgICAgLS0gQSBQb2ludGVyIFBhcmFtYXRlcgorICoJCQkJCQkJd2FzIHNldCB0byBOVUxMCisgKgkJCSBSRVRfUEFSQU1fT1VUX09GX1JBTkdFIC0tIElucHV0IFBhcmFtZXRlcgorICoJCQkJCQkJb3V0IG9mIFJhbmdlCisgKgorICogUFVSUE9TRToJICAgICAgOiBTZXQgTU1VX0NBTSByZWcKKyAqCisgKiBNRVRIT0Q6CSAgICAgICA6IENoZWNrIHRoZSBJbnB1dCBwYXJhbWV0ZXJzIGFuZCBzZXQgdGhlIFJBTSBlbnRyeS4KKyAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X3JhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGh5c2ljYWxfYWRkciwKKwkJCQkgICBlbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbSwKKwkJCQkgICBlbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1lbnRfc2l6ZSwKKwkJCQkgICBlbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfc2l6ZSk7CisKKy8qIEhXIEZVTkNUSU9OUyAqLworCitod19zdGF0dXMgaHdfbW11X2VuYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfU0VUKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMTU1VX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfQ0xFQVIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9udW1fbG9ja2VkX3NldChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQl1MzIgbnVtX2xvY2tlZF9lbnRyaWVzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0xPQ0tfQkFTRV9WQUxVRV9XUklURTMyKGJhc2VfYWRkcmVzcywgbnVtX2xvY2tlZF9lbnRyaWVzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfdmljdGltX251bV9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHZpY3RpbV9lbnRyeV9udW0pCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisKKwlNTVVNTVVfTE9DS19DVVJSRU5UX1ZJQ1RJTV9XUklURTMyKGJhc2VfYWRkcmVzcywgdmljdGltX2VudHJ5X251bSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X2V2ZW50X2Fjayhjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywgdTMyIGlycV9tYXNrKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0lSUVNUQVRVU19XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgaXJxX21hc2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9ldmVudF9kaXNhYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgaXJxX21hc2spCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGlycV9yZWc7CisKKwlpcnFfcmVnID0gTU1VTU1VX0lSUUVOQUJMRV9SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKTsKKworCU1NVU1NVV9JUlFFTkFCTEVfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIGlycV9yZWcgJiB+aXJxX21hc2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9ldmVudF9lbmFibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiBpcnFfbWFzaykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgaXJxX3JlZzsKKworCWlycV9yZWcgPSBNTVVNTVVfSVJRRU5BQkxFX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOworCisJTU1VTU1VX0lSUUVOQUJMRV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgaXJxX3JlZyB8IGlycV9tYXNrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZXZlbnRfc3RhdHVzKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgKmlycV9tYXNrKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJKmlycV9tYXNrID0gTU1VTU1VX0lSUVNUQVRVU19SRUFEX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2h3X3N0YXR1cyBod19tbXVfZmF1bHRfYWRkcl9yZWFkKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLCB1MzIgKmFkZHIpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisKKwkvKiByZWFkIHZhbHVlcyBmcm9tIHJlZ2lzdGVyICovCisJKmFkZHIgPSBNTVVNTVVfRkFVTFRfQURfUkVBRF9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3R0Yl9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiB0dGJfcGh5c19hZGRyKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBsb2FkX3R0YjsKKworCWxvYWRfdHRiID0gdHRiX3BoeXNfYWRkciAmIH4weDdGVUw7CisJLyogd3JpdGUgdmFsdWVzIHRvIHJlZ2lzdGVyICovCisJTU1VTU1VX1RUQl9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbG9hZF90dGIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90d2xfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCisJTU1VTU1VX0NOVExUV0xfRU5BQkxFX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBIV19TRVQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90d2xfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKworCU1NVU1NVV9DTlRMVFdMX0VOQUJMRV9XUklURTMyKGJhc2VfYWRkcmVzcywgSFdfQ0xFQVIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV90bGJfZmx1c2goY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsIHUzMiB2aXJ0dWFsX2FkZHIsCisJCQkgICB1MzIgcGFnZV9zeikKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgdmlydHVhbF9hZGRyX3RhZzsKKwllbnVtIGh3X21tdV9wYWdlX3NpemVfdCBwZ19zaXplX2JpdHM7CisKKwlzd2l0Y2ggKHBhZ2Vfc3opIHsKKwljYXNlIEhXX1BBR0VfU0laRTRLQjoKKwkJcGdfc2l6ZV9iaXRzID0gSFdfTU1VX1NNQUxMX1BBR0U7CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkU2NEtCOgorCQlwZ19zaXplX2JpdHMgPSBIV19NTVVfTEFSR0VfUEFHRTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJcGdfc2l6ZV9iaXRzID0gSFdfTU1VX1NFQ1RJT047CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkUxNk1COgorCQlwZ19zaXplX2JpdHMgPSBIV19NTVVfU1VQRVJTRUNUSU9OOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdlbmVyYXRlIHRoZSAyMC1iaXQgdGFnIGZyb20gdmlydHVhbCBhZGRyZXNzICovCisJdmlydHVhbF9hZGRyX3RhZyA9ICgodmlydHVhbF9hZGRyICYgTU1VX0FERFJfTUFTSykgPj4gMTIpOworCisJbW11X3NldF9jYW1fZW50cnkoYmFzZV9hZGRyZXNzLCBwZ19zaXplX2JpdHMsIDAsIDAsIHZpcnR1YWxfYWRkcl90YWcpOworCisJbW11X2ZsdXNoX2VudHJ5KGJhc2VfYWRkcmVzcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3RsYl9hZGQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkgdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkgdTMyIHZpcnR1YWxfYWRkciwKKwkJCSB1MzIgcGFnZV9zeiwKKwkJCSB1MzIgZW50cnlfbnVtLAorCQkJIHN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKKwkJCSBzOCBwcmVzZXJ2ZWRfYml0LCBzOCB2YWxpZF9iaXQpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGxvY2tfcmVnOworCXUzMiB2aXJ0dWFsX2FkZHJfdGFnOworCWVudW0gaHdfbW11X3BhZ2Vfc2l6ZV90IG1tdV9wZ19zaXplOworCisJLypDaGVjayB0aGUgaW5wdXQgUGFyYW1ldGVycyAqLworCXN3aXRjaCAocGFnZV9zeikgeworCWNhc2UgSFdfUEFHRV9TSVpFNEtCOgorCQltbXVfcGdfc2l6ZSA9IEhXX01NVV9TTUFMTF9QQUdFOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFNjRLQjoKKwkJbW11X3BnX3NpemUgPSBIV19NTVVfTEFSR0VfUEFHRTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJbW11X3BnX3NpemUgPSBIV19NTVVfU0VDVElPTjsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTE2TUI6CisJCW1tdV9wZ19zaXplID0gSFdfTU1VX1NVUEVSU0VDVElPTjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsb2NrX3JlZyA9IE1NVU1NVV9MT0NLX1JFQURfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MpOworCisJLyogR2VuZXJhdGUgdGhlIDIwLWJpdCB0YWcgZnJvbSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl2aXJ0dWFsX2FkZHJfdGFnID0gKCh2aXJ0dWFsX2FkZHIgJiBNTVVfQUREUl9NQVNLKSA+PiAxMik7CisKKwkvKiBXcml0ZSB0aGUgZmllbGRzIGluIHRoZSBDQU0gRW50cnkgUmVnaXN0ZXIgKi8KKwltbXVfc2V0X2NhbV9lbnRyeShiYXNlX2FkZHJlc3MsIG1tdV9wZ19zaXplLCBwcmVzZXJ2ZWRfYml0LCB2YWxpZF9iaXQsCisJCQkgIHZpcnR1YWxfYWRkcl90YWcpOworCisJLyogV3JpdGUgdGhlIGRpZmZlcmVudCBmaWVsZHMgb2YgdGhlIFJBTSBFbnRyeSBSZWdpc3RlciAqLworCS8qIGVuZGlhbmlzbSBvZiB0aGUgcGFnZSxFbGVtZW50IFNpemUgb2YgdGhlIHBhZ2UgKDgsIDE2LCAzMiwgNjQgYml0KSAqLworCW1tdV9zZXRfcmFtX2VudHJ5KGJhc2VfYWRkcmVzcywgcGh5c2ljYWxfYWRkciwgbWFwX2F0dHJzLT5lbmRpYW5pc20sCisJCQkgIG1hcF9hdHRycy0+ZWxlbWVudF9zaXplLCBtYXBfYXR0cnMtPm1peGVkX3NpemUpOworCisJLyogVXBkYXRlIHRoZSBNTVUgTG9jayBSZWdpc3RlciAqLworCS8qIGN1cnJlbnRWaWN0aW0gYmV0d2VlbiBsb2NrZWRCYXNlVmFsdWUgYW5kIChNTVVfRW50cmllc19OdW1iZXIgLSAxKSAqLworCU1NVU1NVV9MT0NLX0NVUlJFTlRfVklDVElNX1dSSVRFMzIoYmFzZV9hZGRyZXNzLCBlbnRyeV9udW0pOworCisJLyogRW5hYmxlIGxvYWRpbmcgb2YgYW4gZW50cnkgaW4gVExCIGJ5IHdyaXRpbmcgMQorCSAgIGludG8gTERfVExCX1JFRyByZWdpc3RlciAqLworCU1NVU1NVV9MRF9UTEJfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIE1NVV9MT0FEX1RMQik7CisKKwlNTVVNTVVfTE9DS19XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbG9ja19yZWcpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaHdfc3RhdHVzIGh3X21tdV9wdGVfc2V0KGNvbnN0IHUzMiBwZ190YmxfdmEsCisJCQkgdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkgdTMyIHZpcnR1YWxfYWRkciwKKwkJCSB1MzIgcGFnZV9zeiwgc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBwdGVfYWRkciwgcHRlX3ZhbDsKKwlzMzIgbnVtX2VudHJpZXMgPSAxOworCisJc3dpdGNoIChwYWdlX3N6KSB7CisJY2FzZSBIV19QQUdFX1NJWkU0S0I6CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX1NNQUxMX1BBR0VfTUFTSyk7CisJCXB0ZV92YWwgPQorCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX1NNQUxMX1BBR0VfTUFTSykgfAorCQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMtPgorCQkJCQkJICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8CisJCSAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxMSkgfCAyKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTY0S0I6CisJCW51bV9lbnRyaWVzID0gMTY7CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFTSyk7CisJCXB0ZV92YWwgPQorCQkgICAgKChwaHlzaWNhbF9hZGRyICYgTU1VX0xBUkdFX1BBR0VfTUFTSykgfAorCQkgICAgIChtYXBfYXR0cnMtPmVuZGlhbmlzbSA8PCA5KSB8IChtYXBfYXR0cnMtPgorCQkJCQkJICAgIGVsZW1lbnRfc2l6ZSA8PCA0KSB8CisJCSAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxMSkgfCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTFNQjoKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlwdGVfdmFsID0KKwkJICAgICgoKChwaHlzaWNhbF9hZGRyICYgTU1VX1NFQ1RJT05fQUREUl9NQVNLKSB8CisJCSAgICAgICAobWFwX2F0dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+CisJCQkJCQkgICAgICAgZWxlbWVudF9zaXplIDw8IDEwKSB8CisJCSAgICAgICAobWFwX2F0dHJzLT5taXhlZF9zaXplIDw8IDE3KSkgJiB+MHg0MDAwMCkgfCAweDIpOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFMTZNQjoKKwkJbnVtX2VudHJpZXMgPSAxNjsKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKKwkJcHRlX3ZhbCA9CisJCSAgICAoKChwaHlzaWNhbF9hZGRyICYgTU1VX1NTRUNUSU9OX0FERFJfTUFTSykgfAorCQkgICAgICAobWFwX2F0dHJzLT5lbmRpYW5pc20gPDwgMTUpIHwgKG1hcF9hdHRycy0+CisJCQkJCQkgICAgICBlbGVtZW50X3NpemUgPDwgMTApIHwKKwkJICAgICAgKG1hcF9hdHRycy0+bWl4ZWRfc2l6ZSA8PCAxNykKKwkJICAgICApIHwgMHg0MDAwMCB8IDB4Mik7CisJCWJyZWFrOworCisJY2FzZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRToKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlwdGVfdmFsID0gKHBoeXNpY2FsX2FkZHIgJiBNTVVfUEFHRV9UQUJMRV9NQVNLKSB8IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2hpbGUgKC0tbnVtX2VudHJpZXMgPj0gMCkKKwkJKCh1MzIgKikgcHRlX2FkZHIpW251bV9lbnRyaWVzXSA9IHB0ZV92YWw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitod19zdGF0dXMgaHdfbW11X3B0ZV9jbGVhcihjb25zdCB1MzIgcGdfdGJsX3ZhLCB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zaXplKQoreworCWh3X3N0YXR1cyBzdGF0dXMgPSAwOworCXUzMiBwdGVfYWRkcjsKKwlzMzIgbnVtX2VudHJpZXMgPSAxOworCisJc3dpdGNoIChwYWdlX3NpemUpIHsKKwljYXNlIEhXX1BBR0VfU0laRTRLQjoKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDIocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU01BTExfUEFHRV9NQVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIEhXX1BBR0VfU0laRTY0S0I6CisJCW51bV9lbnRyaWVzID0gMTY7CisJCXB0ZV9hZGRyID0gaHdfbW11X3B0ZV9hZGRyX2wyKHBnX3RibF92YSwKKwkJCQkJICAgICAgdmlydHVhbF9hZGRyICYKKwkJCQkJICAgICAgTU1VX0xBUkdFX1BBR0VfTUFTSyk7CisJCWJyZWFrOworCisJY2FzZSBIV19QQUdFX1NJWkUxTUI6CisJY2FzZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRToKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU0VDVElPTl9BRERSX01BU0spOworCQlicmVhazsKKworCWNhc2UgSFdfUEFHRV9TSVpFMTZNQjoKKwkJbnVtX2VudHJpZXMgPSAxNjsKKwkJcHRlX2FkZHIgPSBod19tbXVfcHRlX2FkZHJfbDEocGdfdGJsX3ZhLAorCQkJCQkgICAgICB2aXJ0dWFsX2FkZHIgJgorCQkJCQkgICAgICBNTVVfU1NFQ1RJT05fQUREUl9NQVNLKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3aGlsZSAoLS1udW1fZW50cmllcyA+PSAwKQorCQkoKHUzMiAqKSBwdGVfYWRkcilbbnVtX2VudHJpZXNdID0gMDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIG1tdV9mbHVzaF9lbnRyeSAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfZmx1c2hfZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpCit7CisJaHdfc3RhdHVzIHN0YXR1cyA9IDA7CisJdTMyIGZsdXNoX2VudHJ5X2RhdGEgPSAweDE7CisKKwkvKiB3cml0ZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlNTVVNTVVfRkxVU0hfRU5UUllfV1JJVEVfUkVHSVNURVIzMihiYXNlX2FkZHJlc3MsIGZsdXNoX2VudHJ5X2RhdGEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogbW11X3NldF9jYW1fZW50cnkgKi8KK3N0YXRpYyBod19zdGF0dXMgbW11X3NldF9jYW1fZW50cnkoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgY29uc3QgdTMyIHBhZ2Vfc3osCisJCQkJICAgY29uc3QgdTMyIHByZXNlcnZlZF9iaXQsCisJCQkJICAgY29uc3QgdTMyIHZhbGlkX2JpdCwKKwkJCQkgICBjb25zdCB1MzIgdmlydHVhbF9hZGRyX3RhZykKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgbW11X2NhbV9yZWc7CisKKwltbXVfY2FtX3JlZyA9ICh2aXJ0dWFsX2FkZHJfdGFnIDw8IDEyKTsKKwltbXVfY2FtX3JlZyA9IChtbXVfY2FtX3JlZykgfCAocGFnZV9zeikgfCAodmFsaWRfYml0IDw8IDIpIHwKKwkgICAgKHByZXNlcnZlZF9iaXQgPDwgMyk7CisKKwkvKiB3cml0ZSB2YWx1ZXMgdG8gcmVnaXN0ZXIgKi8KKwlNTVVNTVVfQ0FNX1dSSVRFX1JFR0lTVEVSMzIoYmFzZV9hZGRyZXNzLCBtbXVfY2FtX3JlZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBtbXVfc2V0X3JhbV9lbnRyeSAqLworc3RhdGljIGh3X3N0YXR1cyBtbXVfc2V0X3JhbV9lbnRyeShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgICBjb25zdCB1MzIgcGh5c2ljYWxfYWRkciwKKwkJCQkgICBlbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbSwKKwkJCQkgICBlbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1lbnRfc2l6ZSwKKwkJCQkgICBlbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfc2l6ZSkKK3sKKwlod19zdGF0dXMgc3RhdHVzID0gMDsKKwl1MzIgbW11X3JhbV9yZWc7CisKKwltbXVfcmFtX3JlZyA9IChwaHlzaWNhbF9hZGRyICYgTU1VX0FERFJfTUFTSyk7CisJbW11X3JhbV9yZWcgPSAobW11X3JhbV9yZWcpIHwgKChlbmRpYW5pc20gPDwgOSkgfCAoZWxlbWVudF9zaXplIDw8IDcpIHwKKwkJCQkgICAgICAgKG1peGVkX3NpemUgPDwgNikpOworCisJLyogd3JpdGUgdmFsdWVzIHRvIHJlZ2lzdGVyICovCisJTU1VTU1VX1JBTV9XUklURV9SRUdJU1RFUjMyKGJhc2VfYWRkcmVzcywgbW11X3JhbV9yZWcpOworCisJcmV0dXJuIHN0YXR1czsKKworfQorCit2b2lkIGh3X21tdV90bGJfZmx1c2hfYWxsKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlfX3Jhd193cml0ZWIoMSwgYmFzZSArIE1NVV9HRkxVU0gpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2h3L2h3X21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NThhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaHcvaHdfbW11LmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBod19tbXUuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNTVUgdHlwZXMgYW5kIEFQSSBkZWNsYXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfSFdfTU1VX0gKKyNkZWZpbmUgX0hXX01NVV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBCaXRtYXNrcyBmb3IgaW50ZXJydXB0IHNvdXJjZXMgKi8KKyNkZWZpbmUgSFdfTU1VX1RSQU5TTEFUSU9OX0ZBVUxUICAgMHgyCisjZGVmaW5lIEhXX01NVV9BTExfSU5URVJSVVBUUyAgICAgIDB4MUYKKworI2RlZmluZSBIV19NTVVfQ09BUlNFX1BBR0VfU0laRSAweDQwMAorCisvKiBod19tbXVfbWl4ZWRfc2l6ZV90OiAgRW51bWVyYXRlZCBUeXBlIHVzZWQgdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGZvbGxvdworCQkJQ1BVL1RMQiBFbGVtZW50IHNpemUgKi8KK2VudW0gaHdfbW11X21peGVkX3NpemVfdCB7CisJSFdfTU1VX1RMQkVTLAorCUhXX01NVV9DUFVFUworfTsKKworLyogaHdfbW11X21hcF9hdHRyc190OiAgU3RydWN0IGNvbnRhaW5pbmcgTU1VIG1hcHBpbmcgYXR0cmlidXRlcyAqLworc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCB7CisJZW51bSBod19lbmRpYW5pc21fdCBlbmRpYW5pc207CisJZW51bSBod19lbGVtZW50X3NpemVfdCBlbGVtZW50X3NpemU7CisJZW51bSBod19tbXVfbWl4ZWRfc2l6ZV90IG1peGVkX3NpemU7CisJYm9vbCBkb25vdGxvY2ttcHVwYWdlOworfTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZGlzYWJsZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcyk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X251bV9sb2NrZWRfc2V0KGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgICB1MzIgbnVtX2xvY2tlZF9lbnRyaWVzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfdmljdGltX251bV9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgICAgIHUzMiB2aWN0aW1fZW50cnlfbnVtKTsKKworLyogRm9yIE1NVSBmYXVsdHMgKi8KK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2V2ZW50X2Fjayhjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkgIHUzMiBpcnFfbWFzayk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2V2ZW50X2Rpc2FibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICAgICAgdTMyIGlycV9tYXNrKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZXZlbnRfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgdTMyIGlycV9tYXNrKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfZXZlbnRfc3RhdHVzKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzLAorCQkJCSAgICAgdTMyICppcnFfbWFzayk7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X2ZhdWx0X2FkZHJfcmVhZChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcywKKwkJCQkJdTMyICphZGRyKTsKKworLyogU2V0IHRoZSBUVCBiYXNlIGFkZHJlc3MgKi8KK2V4dGVybiBod19zdGF0dXMgaHdfbW11X3R0Yl9zZXQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHR0Yl9waHlzX2FkZHIpOworCitleHRlcm4gaHdfc3RhdHVzIGh3X21tdV90d2xfZW5hYmxlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZV9hZGRyZXNzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfdHdsX2Rpc2FibGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MpOworCitleHRlcm4gaHdfc3RhdHVzIGh3X21tdV90bGJfZmx1c2goY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJICB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zeik7CisKK2V4dGVybiBod19zdGF0dXMgaHdfbW11X3RsYl9hZGQoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHJlc3MsCisJCQkJdTMyIHBoeXNpY2FsX2FkZHIsCisJCQkJdTMyIHZpcnR1YWxfYWRkciwKKwkJCQl1MzIgcGFnZV9zeiwKKwkJCQl1MzIgZW50cnlfbnVtLAorCQkJCXN0cnVjdCBod19tbXVfbWFwX2F0dHJzX3QgKm1hcF9hdHRycywKKwkJCQlzOCBwcmVzZXJ2ZWRfYml0LCBzOCB2YWxpZF9iaXQpOworCisvKiBGb3IgUFRFcyAqLworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX3NldChjb25zdCB1MzIgcGdfdGJsX3ZhLAorCQkJCXUzMiBwaHlzaWNhbF9hZGRyLAorCQkJCXUzMiB2aXJ0dWFsX2FkZHIsCisJCQkJdTMyIHBhZ2Vfc3osCisJCQkJc3RydWN0IGh3X21tdV9tYXBfYXR0cnNfdCAqbWFwX2F0dHJzKTsKKworZXh0ZXJuIGh3X3N0YXR1cyBod19tbXVfcHRlX2NsZWFyKGNvbnN0IHUzMiBwZ190YmxfdmEsCisJCQkJICB1MzIgdmlydHVhbF9hZGRyLCB1MzIgcGFnZV9zaXplKTsKKwordm9pZCBod19tbXVfdGxiX2ZsdXNoX2FsbChjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpOworCitzdGF0aWMgaW5saW5lIHUzMiBod19tbXVfcHRlX2FkZHJfbDEodTMyIGwxX2Jhc2UsIHUzMiB2YSkKK3sKKwl1MzIgcHRlX2FkZHI7CisJdTMyIHZhMzFfdG8yMDsKKworCXZhMzFfdG8yMCA9IHZhID4+ICgyMCAtIDIpOwkvKiBMZWZ0LXNoaWZ0IGJ5IDIgaGVyZSBpdHNlbGYgKi8KKwl2YTMxX3RvMjAgJj0gMHhGRkZGRkZGQ1VMOworCXB0ZV9hZGRyID0gbDFfYmFzZSArIHZhMzFfdG8yMDsKKworCXJldHVybiBwdGVfYWRkcjsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHdfbW11X3B0ZV9hZGRyX2wyKHUzMiBsMl9iYXNlLCB1MzIgdmEpCit7CisJdTMyIHB0ZV9hZGRyOworCisJcHRlX2FkZHIgPSAobDJfYmFzZSAmIDB4RkZGRkZDMDApIHwgKCh2YSA+PiAxMCkgJiAweDNGQyk7CisKKwlyZXR1cm4gcHRlX2FkZHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGh3X21tdV9wdGVfY29hcnNlX2wxKHUzMiBwdGVfdmFsKQoreworCXUzMiBwdGVfY29hcnNlOworCisJcHRlX2NvYXJzZSA9IHB0ZV92YWwgJiAweEZGRkZGQzAwOworCisJcmV0dXJuIHB0ZV9jb2Fyc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGh3X21tdV9wdGVfc2l6ZV9sMSh1MzIgcHRlX3ZhbCkKK3sKKwl1MzIgcHRlX3NpemUgPSAwOworCisJaWYgKChwdGVfdmFsICYgMHgzKSA9PSAweDEpIHsKKwkJLyogUG9pbnRzIHRvIEwyIFBUICovCisJCXB0ZV9zaXplID0gSFdfTU1VX0NPQVJTRV9QQUdFX1NJWkU7CisJfQorCisJaWYgKChwdGVfdmFsICYgMHgzKSA9PSAweDIpIHsKKwkJaWYgKHB0ZV92YWwgJiAoMSA8PCAxOCkpCisJCQlwdGVfc2l6ZSA9IEhXX1BBR0VfU0laRTE2TUI7CisJCWVsc2UKKwkJCXB0ZV9zaXplID0gSFdfUEFHRV9TSVpFMU1COworCX0KKworCXJldHVybiBwdGVfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1MzIgaHdfbW11X3B0ZV9zaXplX2wyKHUzMiBwdGVfdmFsKQoreworCXUzMiBwdGVfc2l6ZSA9IDA7CisKKwlpZiAocHRlX3ZhbCAmIDB4MikKKwkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU0S0I7CisJZWxzZSBpZiAocHRlX3ZhbCAmIDB4MSkKKwkJcHRlX3NpemUgPSBIV19QQUdFX1NJWkU2NEtCOworCisJcmV0dXJuIHB0ZV9zaXplOworfQorCisjZW5kaWYgLyogX0hXX01NVV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9fY2hubF9zbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmQxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvX2Nobmxfc20uaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIF9jaG5sX3NtLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBoZWFkZXIgZmlsZSBkZWZpbmluZyBjaGFubmVsIG1hbmFnZXIgYW5kIGNoYW5uZWwgb2JqZWN0cyBmb3IKKyAqIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqCisgKiBTaGFyZWQgYmV0d2VlbiB0aGUgbW9kdWxlcyBpbXBsZW1lbnRpbmcgdGhlIHNoYXJlZCBtZW1vcnkgY2hhbm5lbCBjbGFzcworICogbGlicmFyeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9DSE5MX1NNXworI2RlZmluZSBfQ0hOTF9TTV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2xpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorCisvKgorICogIFRoZXNlIHRhcmdldCBzaWRlIHN5bWJvbHMgZGVmaW5lIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBhZGRyZXNzZXMKKyAqICBvZiBzaGFyZWQgbWVtb3J5IGJ1ZmZlci4gVGhleSBhcmUgZGVmaW5lZCBpbiB0aGUgKmNmZy5jbWQgZmlsZSBieQorICogIGNkYiBjb2RlLgorICovCisjZGVmaW5lIENITkxfU0hBUkVEX0JVRkZFUl9CQVNFX1NZTSAiX1NITV9CRUciCisjZGVmaW5lIENITkxfU0hBUkVEX0JVRkZFUl9MSU1JVF9TWU0gIl9TSE1fRU5EIgorI2RlZmluZSBCUklER0VJTklUX0JJT1NHUFRJTUVSICJfQlJJREdFSU5JVF9CSU9TR1BUSU1FUiIKKyNkZWZpbmUgQlJJREdFSU5JVF9MT0FETU9OX0dQVElNRVIgIl9CUklER0VJTklUX0xPQURNT05fR1BUSU1FUiIKKworI2lmbmRlZiBfQ0hOTF9XT1JEU0laRQorI2RlZmluZSBfQ0hOTF9XT1JEU0laRSA0CS8qIGRlZmF1bHQgX0NITkxfV09SRFNJWkUgaXMgMiBieXRlcy93b3JkICovCisjZW5kaWYKKworI2RlZmluZSBNQVhPUFBTIDE2CisKKy8qIFNoYXJlZCBtZW1vcnkgY29uZmlnIG9wdGlvbnMgKi8KKyNkZWZpbmUgU0hNX0NVUlJPUFAJMAkvKiBTZXQgY3VycmVudCBPUFAgaW4gc2htICovCisjZGVmaW5lIFNITV9PUFBJTkZPCTEJLyogU2V0IGRzcCB2b2x0YWdlIGFuZCBmcmVxIHRhYmxlIHZhbHVlcyAqLworI2RlZmluZSBTSE1fR0VUT1BQCTIJLyogR2V0IG9wcCByZXF1ZXN0ZWQgYnkgRFNQICovCisKK3N0cnVjdCBvcHBfdGFibGVfZW50cnkgeworCXUzMiB2b2x0YWdlOworCXUzMiBmcmVxdWVuY3k7CisJdTMyIG1pbl9mcmVxOworCXUzMiBtYXhfZnJlcTsKK307CisKK3N0cnVjdCBvcHBfc3RydWN0IHsKKwl1MzIgY3Vycl9vcHBfcHQ7CisJdTMyIG51bV9vcHBfcHRzOworCXN0cnVjdCBvcHBfdGFibGVfZW50cnkgb3BwX3BvaW50W01BWE9QUFNdOworfTsKKworLyogUmVxdWVzdCB0byBNUFUgKi8KK3N0cnVjdCBvcHBfcnFzdF9zdHJ1Y3QgeworCXUzMiBycXN0X2RzcF9mcmVxOworCXUzMiBycXN0X29wcF9wdDsKK307CisKKy8qIEluZm8gdG8gTVBVICovCitzdHJ1Y3QgbG9hZF9tb25fc3RydWN0IHsKKwl1MzIgY3Vycl9kc3BfbG9hZDsKKwl1MzIgY3Vycl9kc3BfZnJlcTsKKwl1MzIgcHJlZF9kc3BfbG9hZDsKKwl1MzIgcHJlZF9kc3BfZnJlcTsKK307CisKKy8qIFN0cnVjdHVyZSBpbiBzaGFyZWQgYmV0d2VlbiBEU1AgYW5kIFBDIGZvciBjb21tdW5pY2F0aW9uLiAqLworc3RydWN0IHNobSB7CisJdTMyIGRzcF9mcmVlX21hc2s7CS8qIFdyaXR0ZW4gYnkgRFNQLCByZWFkIGJ5IFBDLiAqLworCXUzMiBob3N0X2ZyZWVfbWFzazsJLyogV3JpdHRlbiBieSBQQywgcmVhZCBieSBEU1AgKi8KKworCXUzMiBpbnB1dF9mdWxsOwkJLyogSW5wdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCisJdTMyIGlucHV0X2lkOwkJLyogQ2hhbm5lbCBmb3Igd2hpY2ggaW5wdXQgaXMgYXZhaWxhYmxlLiAqLworCXUzMiBpbnB1dF9zaXplOwkJLyogU2l6ZSBvZiBkYXRhIGJsb2NrIChpbiBEU1Agd29yZHMpLiAqLworCisJdTMyIG91dHB1dF9mdWxsOwkvKiBPdXRwdXQgY2hhbm5lbCBoYXMgdW5yZWFkIGRhdGEuICovCisJdTMyIG91dHB1dF9pZDsJCS8qIENoYW5uZWwgZm9yIHdoaWNoIG91dHB1dCBpcyBhdmFpbGFibGUuICovCisJdTMyIG91dHB1dF9zaXplOwkvKiBTaXplIG9mIGRhdGEgYmxvY2sgKGluIERTUCB3b3JkcykuICovCisKKwl1MzIgYXJnOwkJLyogQXJnIGZvciBJc3N1ZS9SZWNsYWltICgyMyBiaXRzIGZvciA1NXgpLiAqLworCXUzMiByZXN2ZDsJCS8qIEtlZXAgc3RydWN0dXJlIHNpemUgZXZlbiBmb3IgMzItYml0IERTUHMgKi8KKworCS8qIE9wZXJhdGluZyBQb2ludCBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3Qgb3BwX3N0cnVjdCBvcHBfdGFibGVfc3RydWN0OworCS8qIE9wZXJhdGluZyBQb2ludCBSZXF1ZXN0IHN0cnVjdHVyZSAqLworCXN0cnVjdCBvcHBfcnFzdF9zdHJ1Y3Qgb3BwX3JlcXVlc3Q7CisJLyogbG9hZCBtb25pdG9yIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLworCXN0cnVjdCBsb2FkX21vbl9zdHJ1Y3QgbG9hZF9tb25faW5mbzsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfV0RUMworCS8qIEZsYWcgZm9yIFdEVCBlbmFibGUvZGlzYWJsZSBGL0kgY2xvY2tzICovCisJdTMyIHdkdF9zZXRjbG9ja3M7CisJdTMyIHdkdF9vdmVyZmxvdzsJLyogV0RUIG92ZXJmbG93IHRpbWUgKi8KKwljaGFyIGR1bW15WzE3Nl07CS8qIHBhZGRpbmcgdG8gMjU2IGJ5dGUgYm91bmRhcnkgKi8KKyNlbHNlCisJY2hhciBkdW1teVsxODRdOwkvKiBwYWRkaW5nIHRvIDI1NiBieXRlIGJvdW5kYXJ5ICovCisjZW5kaWYKKwl1MzIgc2htX2RiZ192YXJbNjRdOwkvKiBzaGFyZWQgbWVtb3J5IGRlYnVnIHZhcmlhYmxlcyAqLworfTsKKworCS8qIENoYW5uZWwgTWFuYWdlcjogb25seSBvbmUgY3JlYXRlZCBwZXIgYm9hcmQ6ICovCitzdHJ1Y3QgY2hubF9tZ3IgeworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGlvX21nciAqaGlvX21ncjsJLyogSU8gbWFuYWdlciAqLworCS8qIERldmljZSB0aGlzIGJvYXJkIHJlcHJlc2VudHMgKi8KKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisKKwkvKiBUaGVzZSBmaWVsZHMgaW5pdGlhbGl6ZWQgaW4gYnJpZGdlX2NobmxfY3JlYXRlKCk6ICovCisJdTMyIGR3X291dHB1dF9tYXNrOwkvKiBIb3N0IG91dHB1dCBjaGFubmVscyB3LyBmdWxsIGJ1ZmZlcnMgKi8KKwl1MzIgZHdfbGFzdF9vdXRwdXQ7CS8qIExhc3Qgb3V0cHV0IGNoYW5uZWwgZmlyZWQgZnJvbSBEUEMgKi8KKwkvKiBDcml0aWNhbCBzZWN0aW9uIG9iamVjdCBoYW5kbGUgKi8KKwlzcGlubG9ja190IGNobmxfbWdyX2xvY2s7CisJdTMyIHdvcmRfc2l6ZTsJCS8qIFNpemUgaW4gYnl0ZXMgb2YgRFNQIHdvcmQgKi8KKwl1OCBtYXhfY2hhbm5lbHM7CS8qIFRvdGFsIG51bWJlciBvZiBjaGFubmVscyAqLworCXU4IG9wZW5fY2hhbm5lbHM7CS8qIFRvdGFsIG51bWJlciBvZiBvcGVuIGNoYW5uZWxzICovCisJc3RydWN0IGNobmxfb2JqZWN0ICoqYXBfY2hhbm5lbDsJLyogQXJyYXkgb2YgY2hhbm5lbHMgKi8KKwl1OCBkd190eXBlOwkJLyogVHlwZSBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgKi8KKwkvKiBJZiBubyBzaG0gc3ltcywgcmV0dXJuIGZvciBDSE5MX09wZW4gKi8KKwlpbnQgY2hubF9vcGVuX3N0YXR1czsKK307CisKKy8qCisgKiAgQ2hhbm5lbDogdXAgdG8gQ0hOTF9NQVhDSEFOTkVMUyBwZXIgYm9hcmQgb3IgaWYgRFNQLURNQSBzdXBwb3J0ZWQgdGhlbgorICogICAgIHVwIHRvIENITkxfTUFYQ0hBTk5FTFMgKyBDSE5MX01BWERETUFDSE5MUyBwZXIgYm9hcmQuCisgKi8KK3N0cnVjdCBjaG5sX29iamVjdCB7CisJLyogUG9pbnRlciBiYWNrIHRvIGNoYW5uZWwgbWFuYWdlciAqLworCXN0cnVjdCBjaG5sX21nciAqY2hubF9tZ3Jfb2JqOworCXUzMiBjaG5sX2lkOwkJLyogQ2hhbm5lbCBpZCAqLworCXU4IGR3X3N0YXRlOwkJLyogQ3VycmVudCBjaGFubmVsIHN0YXRlICovCisJczggY2hubF9tb2RlOwkJLyogQ2hubCBtb2RlIGFuZCBhdHRyaWJ1dGVzICovCisJLyogQ2hubCBJL08gY29tcGxldGlvbiBldmVudCAodXNlciBtb2RlKSAqLworCXZvaWQgKnVzZXJfZXZlbnQ7CisJLyogQWJzdHJhY3Qgc3luY3Jvbml6YXRpb24gb2JqZWN0ICovCisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50OworCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyB3aGljaCBjcmVhdGVkIHRoaXMgY2hhbm5lbCAqLworCXUzMiBwY2JfYXJnOwkJLyogQXJndW1lbnQgdG8gdXNlIHdpdGggY2FsbGJhY2sgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKnBpb19yZXF1ZXN0czsJLyogTGlzdCBvZiBJT1IncyB0byBkcml2ZXIgKi8KKwlzMzIgY2lvX2NzOwkJLyogTnVtYmVyIG9mIElPQydzIGluIHF1ZXVlICovCisJczMyIGNpb19yZXFzOwkJLyogTnVtYmVyIG9mIElPUmVxdWVzdHMgaW4gcXVldWUgKi8KKwlzMzIgY2hubF9wYWNrZXRzOwkvKiBJbml0aWFsIG51bWJlciBvZiBmcmVlIElycHMgKi8KKwkvKiBMaXN0IG9mIElPQydzIGZyb20gZHJpdmVyICovCisJc3RydWN0IGxzdF9saXN0ICpwaW9fY29tcGxldGlvbnM7CisJc3RydWN0IGxzdF9saXN0ICpmcmVlX3BhY2tldHNfbGlzdDsJLyogTGlzdCBvZiBmcmVlIElycHMgKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOworCXUzMiBieXRlc19tb3ZlZDsJLyogVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVyZWQgKi8KKworCS8qIEZvciBEU1AtRE1BICovCisKKwkvKiBUeXBlIG9mIGNobmwgdHJhbnNwb3J0OkNITkxfW1BDUFldW0RETUFdICovCisJdTMyIGNobmxfdHlwZTsKK307CisKKy8qIEkvTyBSZXF1ZXN0L2NvbXBsZXRpb24gcGFja2V0OiAqLworc3RydWN0IGNobmxfaXJwIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIExpbmsgdG8gbmV4dCBDSElSUCBpbiBxdWV1ZS4gKi8KKwkvKiBCdWZmZXIgdG8gYmUgZmlsbGVkL2VtcHRpZWQuIChVc2VyKSAqLworCXU4ICpob3N0X3VzZXJfYnVmOworCS8qIEJ1ZmZlciB0byBiZSBmaWxsZWQvZW1wdGllZC4gKFN5c3RlbSkgKi8KKwl1OCAqaG9zdF9zeXNfYnVmOworCXUzMiBkd19hcmc7CQkvKiBJc3N1ZS9SZWNsYWltIGFyZ3VtZW50LiAqLworCXUzMiBkc3BfdHhfYWRkcjsJLyogVHJhbnNmZXIgYWRkcmVzcyBvbiBEU1Agc2lkZS4gKi8KKwl1MzIgYnl0ZV9zaXplOwkJLyogQnl0ZXMgdHJhbnNmZXJyZWQuICovCisJdTMyIGJ1Zl9zaXplOwkJLyogQWN0dWFsIGJ1ZmZlciBzaXplIHdoZW4gYWxsb2NhdGVkLiAqLworCXUzMiBzdGF0dXM7CQkvKiBTdGF0dXMgb2YgSU8gY29tcGxldGlvbi4gKi8KK307CisKKyNlbmRpZiAvKiBfQ0hOTF9TTV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9icmRkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvYnJkZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MGQ5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvYnJkZGVmcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBicmRkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIEJSRCBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQlJEREVGU18KKyNkZWZpbmUgQlJEREVGU18KKworLyogcGxhdGZvcm0gc3RhdHVzIHZhbHVlcyAqLworI2RlZmluZSBCUkRfU1RPUFBFRCAgICAgMHgwCS8qIE5vIE1vbml0b3IgTG9hZGVkLCBOb3QgcnVubmluZy4gKi8KKyNkZWZpbmUgQlJEX0lETEUgICAgICAgIDB4MQkvKiBNb25pdG9yIExvYWRlZCwgYnV0IHN1c3BlbmRlZC4gKi8KKyNkZWZpbmUgQlJEX1JVTk5JTkcgICAgIDB4MgkvKiBNb25pdG9yIGxvYWRlZCwgYW5kIGV4ZWN1dGluZy4gKi8KKyNkZWZpbmUgQlJEX1VOS05PV04gICAgIDB4MwkvKiBCb2FyZCBzdGF0ZSBpcyBpbmRldGVybWluYXRlLiAqLworI2RlZmluZSBCUkRfU1lOQ0lOSVQgICAgMHg0CisjZGVmaW5lIEJSRF9MT0FERUQgICAgICAweDUKKyNkZWZpbmUgQlJEX0xBU1RTVEFURSAgIEJSRF9MT0FERUQJLyogU2V0IHRvIGhpZ2hlc3QgbGVnYWwgYm9hcmQgc3RhdGUuICovCisjZGVmaW5lIEJSRF9TTEVFUF9UUkFOU0lUSU9OIDB4NgkvKiBTbGVlcCB0cmFuc2l0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lIEJSRF9ISUJFUk5BVElPTiAweDcJLyogTVBVIGluaXRpYXRlZCBoaWJlcm5hdGlvbiAqLworI2RlZmluZSBCUkRfUkVURU5USU9OICAgICAweDgJLyogUmV0ZW50aW9uIG1vZGUgKi8KKyNkZWZpbmUgQlJEX0RTUF9ISUJFUk5BVElPTiAgICAgMHg5CS8qIERTUCBpbml0aWF0ZWQgaGliZXJuYXRpb24gKi8KKyNkZWZpbmUgQlJEX0VSUk9SCQkweEEJLyogQm9hcmQgc3RhdGUgaXMgRXJyb3IgKi8KKworLyogQlJEIE9iamVjdCAqLworc3RydWN0IGJyZF9vYmplY3Q7CisKKyNlbmRpZiAvKiBCUkRERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTg5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBjZmcuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQTSBDb25maWd1cmF0aW9uIG1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENGR18KKyNkZWZpbmUgQ0ZHXworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKworLyoKKyAqICA9PT09PT09PSBjZmdfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDRkcgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2ZnX2luaXQodm9pZCkgd2FzIHByZXZpb3VzbHkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFJlc291cmNlcyBhY3F1aXJlZCBpbiBjZmdfaW5pdCh2b2lkKSBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIGNmZ19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfYXV0b19zdGFydCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBhdXRvc3RhcnQgbWFzaywgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICBIYW5kbGUgdG8gdGhlIGRldl9ub2RlIHdobydzIGRyaXZlciB3ZSBhcmUgcXVlcnlpbmcuCisgKiAgICAgIGF1dG9fc3RhcnQ6ICAgUHRyIHRvIGxvY2F0aW9uIGZvciAzMiBiaXQgYXV0b3N0YXJ0IG1hc2suCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogIGRldl9ub2RlX29iaiBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVW5hYmxlIHRvIHJldHJlaXZlIHJlc291cmNlLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICphdXRvX3N0YXJ0IGNvbnRhaW5zIGF1dG9zdGFydCBtYXNrIGZvciB0aGlzIGRldm5vZGUuCisgKi8KK2V4dGVybiBpbnQgY2ZnX2dldF9hdXRvX3N0YXJ0KHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCSAgICAgdTMyICphdXRvX3N0YXJ0KTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X2NkX3ZlcnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZXMgdGhlIHZlcnNpb24gb2YgdGhlIFBNIENsYXNzIERyaXZlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB2ZXJzaW9uOiAgICBQdHIgdG8gdTMyIHRvIGNvbnRhaW4gdmVyc2lvbiBudW1iZXIgdXBvbiByZXR1cm4uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4gIHZlcnNpb24gY29udGFpbnMgQ2xhc3MgRHJpdmVyIHZlcnNpb24gaW4KKyAqICAgICAgICAgICAgICAgICAgdGhlIGZvcm06IDB4QUFCQkNDREQgd2hlcmUgQUFCQiBpcyBNYWpvciB2ZXJzaW9uIGFuZAorICogICAgICAgICAgICAgICAgICBDQ0REIGlzIE1pbm9yLgorICogICAgICAtRVBFUk06ICBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgZWxzZTogICAgICAgKnZlcnNpb24gaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X2NkX3ZlcnNpb24odTMyICp2ZXJzaW9uKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgRGV2aWNlIE9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZGV2bm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6CVBsYXRmb3JtJ3MgZGV2X25vZGUgaGFuZGxlIGZyb20gd2hpY2ggdG8gcmV0cmlldmUKKyAqICAgICAgCQl2YWx1ZS4KKyAqICAgICAgdmFsdWU6ICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSB0aGUgdmFsdWUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogZGV2X25vZGVfb2JqIGlzIGludmFsaWQgb3IgZGV2aWNlX29iaiBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVGhlIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAqdmFsdWUgaXMgc2V0IHRvIHRoZSByZXRyaWV2ZWQgdTMyLgorICogICAgICBlbHNlOiAgICAgICAqdmFsdWUgaXMgc2V0IHRvIDBMLgorICovCitleHRlcm4gaW50IGNmZ19nZXRfZGV2X29iamVjdChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgICAgIHUzMiAqdmFsdWUpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfZXhlY19maWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmVpdmUgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6IEhhbmRsZSB0byB0aGUgZGV2X25vZGUgd2hvJ3MgZHJpdmVyIHdlIGFyZSBxdWVyeWluZy4KKyAqICAgICAgYnVmX3NpemU6ICAgICAgIFNpemUgb2YgYnVmZmVyLgorICogICAgICBzdHJfZXhlY19maWxlOiAgUHRyIHRvIGNoYXJhY3RlciBidWYgdG8gaG9sZCBFeGVjRmlsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgZGV2X25vZGVfb2JqIGlzIGludmFsaWQgb3Igc3RyX2V4ZWNfZmlsZSBpcyBpbnZhbGlkLgorICogICAgICAtRU5PREFUQTogVGhlIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICBOb3QgbW9yZSB0aGFuIGJ1Zl9zaXplIGJ5dGVzIHdlcmUgY29waWVkIGludG8gc3RyX2V4ZWNfZmlsZSwKKyAqICAgICAgICAgICAgICAgICAgYW5kICpzdHJfZXhlY19maWxlIGNvbnRhaW5zIGRlZmF1bHQgZXhlY3V0YWJsZSBmb3IgdGhpcworICogICAgICAgICAgICAgICAgICBkZXZub2RlLgorICovCitleHRlcm4gaW50IGNmZ19nZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCSAgICB1MzIgYnVmX3NpemUsIGNoYXIgKnN0cl9leGVjX2ZpbGUpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIERyaXZlciBPYmplY3QgaGFuZGxlIEZyb20gdGhlIFJlZ2lzdHJ5CisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdmFsdWU6ICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSB2YWx1ZS4KKyAqICAgICAgZHdfdHlwZSAgICAgIFR5cGUgb2YgT2JqZWN0IHRvIEdldAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAqdmFsdWUgaXMgc2V0IHRvIHRoZSByZXRyaWV2ZWQgdTMyKG5vbi1aZXJvKS4KKyAqICAgICAgZWxzZTogICAgICAgKnZhbHVlIGlzIHNldCB0byAwTC4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X29iamVjdCh1MzIgKnZhbHVlLCB1OCBkd190eXBlKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZ2V0X3BlcmZfdmFsdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIFBFUkYgc2hvdWxkIGxvZyBzdGF0aXN0aWNzIGZvciB0aGUKKyAqICAgICAgUE0gY2xhc3MgZHJpdmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGVuYWJsZV9wZXJmOiAgICBMb2NhdGlvbiB0byBzdG9yZSBmbGFnLiAgMCBpbmRpY2F0ZXMgdGhlIGtleSB3YXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG5vdCBmb3VuZCwgb3IgaGFkIGEgemVybyB2YWx1ZS4gIEEgbm9uemVybyB2YWx1ZQorICogICAgICAgICAgICAgICAgICAgICAgbWVhbnMgdGhlIGtleSB3YXMgZm91bmQgYW5kIGhhZCBhIG5vbnplcm8gdmFsdWUuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgZW5hYmxlX3BlcmYgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBjZmdfZ2V0X3BlcmZfdmFsdWUoYm9vbCAqZW5hYmxlX3BlcmYpOworCisvKgorICogID09PT09PT09IGNmZ19nZXRfemxfZmlsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBaTEZpbGUsIGlmIGFueSwgZm9yIHRoaXMgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X25vZGVfb2JqOiBIYW5kbGUgdG8gdGhlIGRldl9ub2RlIHdobydzIGRyaXZlciB3ZSBhcmUgcXVlcnlpbmcuCisgKiAgICAgIGJ1Zl9zaXplOiAgICAgICBTaXplIG9mIGJ1ZmZlci4KKyAqICAgICAgc3RyX3psX2ZpbGVfbmFtZTogUHRyIHRvIGNoYXJhY3RlciBidWYgdG8gaG9sZCBaTEZpbGVOYW1lLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6IHN0cl96bF9maWxlX25hbWUgaXMgaW52YWxpZCBvciBkZXZfbm9kZV9vYmogaXMgaW52YWxpZC4KKyAqICAgICAgLUVOT0RBVEE6IGNvdWxkbid0IGZpbmQgdGhlIFpMRmlsZU5hbWUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENGRyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICBOb3QgbW9yZSB0aGFuIGJ1Zl9zaXplIGJ5dGVzIHdlcmUgY29waWVkIGludG8KKyAqICAgICAgICAgICAgICAgICAgc3RyX3psX2ZpbGVfbmFtZSwgYW5kICpzdHJfemxfZmlsZV9uYW1lIGNvbnRhaW5zIFpMRmlsZU5hbWUKKyAqICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgZGV2bm9kZS4KKyAqLworZXh0ZXJuIGludCBjZmdfZ2V0X3psX2ZpbGUoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmosCisJCQkJICB1MzIgYnVmX3NpemUsIGNoYXIgKnN0cl96bF9maWxlX25hbWUpOworCisvKgorICogID09PT09PT09IGNmZ19pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgQ0ZHIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDRkcgZnVuY3Rpb25zLgorICovCitleHRlcm4gYm9vbCBjZmdfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfc2V0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdG9yZSB0aGUgRGV2aWNlIE9iamVjdCBoYW5kbGUgZm9yIGEgZ2l2ZW4gZGV2bm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgUGxhdGZvcm0ncyBkZXZfbm9kZSBoYW5kbGUgd2UgYXJlIHN0b3JpbmcgdmFsdWUgd2l0aC4KKyAqICAgICAgdmFsdWU6ICAgIEFyYml0cmFyeSB2YWx1ZSB0byBzdG9yZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgZGV2X25vZGVfb2JqIGlzIGludmFsaWQuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgICAgIEludGVybmFsIEVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBDRkcgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgVGhlIFByaXZhdGUgdTMyIHdhcyBzdWNjZXNzZnVsbHkgc2V0LgorICovCitleHRlcm4gaW50IGNmZ19zZXRfZGV2X29iamVjdChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgICAgIHUzMiB2YWx1ZSk7CisKKy8qCisgKiAgPT09PT09PT0gQ0ZHX1NldERydk9iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0b3JlIHRoZSBEcml2ZXIgT2JqZWN0IGhhbmRsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB2YWx1ZTogICAgICAgICAgQXJiaXRyYXJ5IHZhbHVlIHRvIHN0b3JlLgorICogICAgICBkd190eXBlICAgICAgICAgIFR5cGUgb2YgT2JqZWN0IHRvIFN0b3JlCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBJbnRlcm5hbCBFcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ0ZHIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBUaGUgUHJpdmF0ZSB1MzIgd2FzIHN1Y2Nlc3NmdWxseSBzZXQuCisgKi8KK2V4dGVybiBpbnQgY2ZnX3NldF9vYmplY3QodTMyIHZhbHVlLCB1OCBkd190eXBlKTsKKworI2VuZGlmIC8qIENGR18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jZmdkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MTIyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2ZnZGVmcy5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBjZmdkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIENGRyBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ0ZHREVGU18KKyNkZWZpbmUgQ0ZHREVGU18KKworLyogTWF4aW11bSBsZW5ndGggb2YgbW9kdWxlIHNlYXJjaCBwYXRoLiAqLworI2RlZmluZSBDRkdfTUFYU0VBUkNIUEFUSExFTiAgICAyNTUKKworLyogTWF4aW11bSBsZW5ndGggb2YgZ2VuZXJhbCBwYXRocy4gKi8KKyNkZWZpbmUgQ0ZHX01BWFBBVEggICAgICAgICAgICAgMjU1CisKKy8qIEhvc3QgUmVzb3VyY2VzOiAqLworI2RlZmluZSBDRkdfTUFYTUVNUkVHSVNURVJTICAgICA5CisjZGVmaW5lIENGR19NQVhJT1BPUlRTICAgICAgICAgIDIwCisjZGVmaW5lIENGR19NQVhJUlFTICAgICAgICAgICAgIDcKKyNkZWZpbmUgQ0ZHX01BWERNQUNIQU5ORUxTICAgICAgNworCisvKiBJUlEgZmxhZyAqLworI2RlZmluZSBDRkdfSVJRU0hBUkVEICAgICAgICAgICAweDAxCS8qIElSUSBjYW4gYmUgc2hhcmVkICovCisKKy8qIERTUCBSZXNvdXJjZXM6ICovCisjZGVmaW5lIENGR19EU1BNQVhNRU1UWVBFUyAgICAgIDEwCisjZGVmaW5lIENGR19ERUZBVUxUX05VTV9XSU5ET1dTIDEJLyogV2Ugc3VwcG9ydCBvbmx5IG9uZSB3aW5kb3cuICovCisKKy8qIEEgcGxhdGZvcm0tcmVsYXRlZCBkZXZpY2UgaGFuZGxlOiAqLworc3RydWN0IGNmZ19kZXZub2RlOworCisvKgorICogIEhvc3QgcmVzb3VyY2Ugc3RydWN0dXJlLgorICovCitzdHJ1Y3QgY2ZnX2hvc3RyZXMgeworCXUzMiBudW1fbWVtX3dpbmRvd3M7CS8qIFNldCB0byBkZWZhdWx0ICovCisJLyogVGhpcyBpcyB0aGUgYmFzZS5tZW1vcnkgKi8KKwl1MzIgZHdfbWVtX2Jhc2VbQ0ZHX01BWE1FTVJFR0lTVEVSU107CS8qIHNobSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1MzIgZHdfbWVtX2xlbmd0aFtDRkdfTUFYTUVNUkVHSVNURVJTXTsJLyogTGVuZ3RoIG9mIHRoZSBCYXNlICovCisJdTMyIGR3X21lbV9waHlzW0NGR19NQVhNRU1SRUdJU1RFUlNdOwkvKiBzaG0gUGh5c2ljYWwgYWRkcmVzcyAqLworCXU4IGJpcnFfcmVnaXN0ZXJzOwkvKiBJUlEgTnVtYmVyICovCisJdTggYmlycV9hdHRyaWI7CQkvKiBJUlEgQXR0cmlidXRlICovCisJdTMyIGR3X29mZnNldF9mb3JfbW9uaXRvcjsJLyogVGhlIFNoYXJlZCBtZW1vcnkgc3RhcnRzIGZyb20KKwkJCQkJICogZHdfbWVtX2Jhc2UgKyB0aGlzIG9mZnNldCAqLworCS8qCisJICogIEluZm8gbmVlZGVkIGJ5IE5PREUgZm9yIGFsbG9jYXRpbmcgY2hhbm5lbHMgdG8gY29tbXVuaWNhdGUgd2l0aCBSTVM6CisJICogICAgICBkd19jaG5sX29mZnNldDogICAgICAgT2Zmc2V0IG9mIFJNUyBjaGFubmVscy4gTG93ZXIgY2hhbm5lbHMgYXJlCisJICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkLgorCSAqICAgICAgZHdfY2hubF9idWZfc2l6ZTogICAgICBTaXplIG9mIGNoYW5uZWwgYnVmZmVyIHRvIHNlbmQgdG8gUk1TCisJICogICAgICBkd19udW1fY2hubHM6CQlUb3RhbCBudW1iZXIgb2YgY2hhbm5lbHMKKwkgKiAgICAgIAkJCShpbmNsdWRpbmcgcmVzZXJ2ZWQpLgorCSAqLworCXUzMiBkd19jaG5sX29mZnNldDsKKwl1MzIgZHdfY2hubF9idWZfc2l6ZTsKKwl1MzIgZHdfbnVtX2NobmxzOworCXZvaWQgX19pb21lbSAqZHdfcGVyX2Jhc2U7CisJdTMyIGR3X3Blcl9wbV9iYXNlOworCXUzMiBkd19jb3JlX3BtX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkd19kbW11X2Jhc2U7CisJdm9pZCBfX2lvbWVtICpkd19zeXNfY3RybF9iYXNlOworfTsKKworc3RydWN0IGNmZ19kc3BtZW1kZXNjIHsKKwl1MzIgbWVtX3R5cGU7CQkvKiBUeXBlIG9mIG1lbW9yeS4gKi8KKwl1MzIgdWxfbWluOwkJLyogTWluaW11bSBhbW91bnQgb2YgbWVtb3J5IG9mIHRoaXMgdHlwZS4gKi8KKwl1MzIgdWxfbWF4OwkJLyogTWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IG9mIHRoaXMgdHlwZS4gKi8KK307CisKKyNlbmRpZiAvKiBDRkdERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczM2IzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBjaG5sLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQIEFQSSBjaGFubmVsIGludGVyZmFjZTogbXVsdGlwbGV4ZXMgZGF0YSBzdHJlYW1zIHRocm91Z2ggdGhlIHNpbmdsZQorICogcGh5c2ljYWwgbGluayBtYW5hZ2VkIGJ5IGEgQnJpZGdlIGRyaXZlci4KKyAqCisgKiBTZWUgRFNQIEFQSSBjaG5sLmggZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENITkxfCisjZGVmaW5lIENITkxfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubHByaXYuaD4KKworLyoKKyAqICA9PT09PT09PSBjaG5sX2Nsb3NlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5zdXJlcyBhbGwgcGVuZGluZyBJL08gb24gdGhpcyBjaGFubmVsIGlzIGNhbmNlbGxlZCwgZGlzY2FyZHMgYWxsCisgKiAgICAgIHF1ZXVlZCBJL08gY29tcGxldGlvbiBub3RpZmljYXRpb25zLCB0aGVuIGZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkCisgKiAgICAgIGZvciB0aGlzIGNoYW5uZWwsIGFuZCBtYWtlcyB0aGUgY29ycmVzcG9uZGluZyBsb2dpY2FsIGNoYW5uZWwgaWQKKyAqICAgICAgYXZhaWxhYmxlIGZvciBzdWJzZXF1ZW50IHVzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGNobmxfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBjaG5sX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBObyB0aHJlYWQgbXVzdCBiZSBibG9ja2VkIG9uIHRoaXMgY2hhbm5lbCdzIEkvTyBjb21wbGV0aW9uIGV2ZW50LgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBUaGUgSS9PIGNvbXBsZXRpb24gZXZlbnQgZm9yIHRoaXMgY2hhbm5lbCBpcyBmcmVlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIGNobmxfb2JqIGlzIG5vIGxvbmdlciB2YWxpZC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2Nsb3NlKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopOworCisvKgorICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuIGJvYXJkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNoYW5uZWxfbWdyOiAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3Qgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCisgKiAgICAgIG1ncl9hdHRydHM6ICAgICAgQ2hhbm5lbCBtYW5hZ2VyIGF0dHJpYnV0ZXMuCisgKiAgICAgIG1ncl9hdHRydHMtPm1heF9jaGFubmVsczogICBNYXggY2hhbm5lbHMKKyAqICAgICAgbWdyX2F0dHJ0cy0+YmlycTogICAgICAgIENoYW5uZWwncyBJL08gSVJRIG51bWJlci4KKyAqICAgICAgbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDogICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCisgKiAgICAgIG1ncl9hdHRydHMtPndvcmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7CisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgaGRldl9vYmogaXMgaW52YWxpZC4KKyAqICAgICAgLUVJTlZBTDogbWF4X2NoYW5uZWxzIGlzIDAuCisgKiAgICAgICAgICAgICAgIEludmFsaWQgRFNQIHdvcmQgc2l6ZSAobXVzdCBiZSA+IDApLgorICogICAgICAgICAgICAgICBJbnZhbGlkIGJhc2UgYWRkcmVzcyBmb3IgRFNQIGNvbW11bmljYXRpb25zLgorICogICAgICAtRU5PTUVNOiAgICAgICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FSU86ICAgICAgICAgICAgIFVuYWJsZSB0byBwbHVnIGNoYW5uZWwgSVNSIGZvciBjb25maWd1cmVkIElSUS4KKyAqICAgICAgLUVDSFJORzogICAgIFRoaXMgbWFuYWdlciBjYW5ub3QgaGFuZGxlIHRoaXMgbWFueSBjaGFubmVscy4KKyAqICAgICAgLUVFWElTVDogICAgICAgQ2hhbm5lbCBtYW5hZ2VyIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIGRldmljZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hubF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgY2hhbm5lbF9tZ3IgIT0gTlVMTC4KKyAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1YnNlcXVlbnQgY2FsbHMgdG8gY2hubF9jcmVhdGUoKSBmb3IgdGhlIHNhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9hcmQgd2l0aG91dCBhbiBpbnRlcnZlbmluZyBjYWxsIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNobmxfZGVzdHJveSgpIHdpbGwgZmFpbC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBjaG5sX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhbGwgb3BlbiBjaGFubmVscywgYW5kIGRlc3Ryb3kgdGhlIGNoYW5uZWwgbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY2hubF9tZ3I6ICAgICAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIGhjaG5sX21nciB3YXMgaW52YWxpZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hubF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgIENhbmNlbHMgSS9PIG9uIGVhY2ggb3BlbiBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjaG5sX2NyZWF0ZSBtYXkgc3Vic2VxdWVudGx5IGJlIGNhbGxlZCBmb3IgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBib2FyZC4KKyAqLworZXh0ZXJuIGludCBjaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpOworCisvKgorICogID09PT09PT09IGNobmxfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDSE5MIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNobmxfaW5pdCh2b2lkKSBwcmV2aW91c2x5IGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICBSZXNvdXJjZXMsIGlmIGFueSBhY3F1aXJlZCBpbiBjaG5sX2luaXQodm9pZCksIGFyZSBmcmVlZCB3aGVuIHRoZSBsYXN0CisgKiAgICAgIGNsaWVudCBvZiBDSE5MIGNhbGxzIGNobmxfZXhpdCh2b2lkKS4KKyAqLworZXh0ZXJuIHZvaWQgY2hubF9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNobmxfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIENITkwgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VycmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDSE5MIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgY2hubF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogQ0hOTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NobmxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmNWY2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jaG5sZGVmcy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBjaG5sZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFN5c3RlbS13aWRlIGNoYW5uZWwgb2JqZWN0cyBhbmQgY29uc3RhbnRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ0hOTERFRlNfCisjZGVmaW5lIENITkxERUZTXworCisvKiBDaGFubmVsIGlkIG9wdGlvbi4gKi8KKyNkZWZpbmUgQ0hOTF9QSUNLRlJFRSAgICAgICAofjBVTCkJLyogTGV0IG1hbmFnZXIgcGljayBhIGZyZWUgY2hhbm5lbC4gKi8KKworLyogQ2hhbm5lbCBtYW5hZ2VyIGxpbWl0czogKi8KKyNkZWZpbmUgQ0hOTF9JTklUSU9SRVFTICAgICAgNAkvKiBEZWZhdWx0ICMgb2YgSS9PIHJlcXVlc3RzLiAqLworCisvKiBDaGFubmVsIG1vZGVzICovCisjZGVmaW5lIENITkxfTU9ERVRPRFNQCQkwCS8qIERhdGEgc3RyZWFtaW5nIHRvIHRoZSBEU1AuICovCisjZGVmaW5lIENITkxfTU9ERUZST01EU1AJMQkvKiBEYXRhIHN0cmVhbWluZyBmcm9tIHRoZSBEU1AuICovCisKKy8qIEdldElPQ29tcGxldGlvbiBmbGFncyAqLworI2RlZmluZSBDSE5MX0lPQ0lORklOSVRFICAgICAweGZmZmZmZmZmCS8qIFdhaXQgZm9yZXZlciBmb3IgSU8gY29tcGxldGlvbi4gKi8KKyNkZWZpbmUgQ0hOTF9JT0NOT1dBSVQgICAgICAgMHgwCS8qIERlcXVldWUgYW4gSU9DLCBpZiBhdmFpbGFibGUuICovCisKKy8qIElPIENvbXBsZXRpb24gUmVjb3JkIHN0YXR1czogKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUQ09NUExFVEUgMHgwMDAwCS8qIElPIENvbXBsZXRlZC4gKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUQ0FOQ0VMICAgMHgwMDAyCS8qIElPIHdhcyBjYW5jZWxsZWQgKi8KKyNkZWZpbmUgQ0hOTF9JT0NTVEFUVElNRU9VVCAgMHgwMDA4CS8qIFdhaXQgZm9yIElPQyB0aW1lZCBvdXQuICovCisjZGVmaW5lIENITkxfSU9DU1RBVEVPUyAgICAgIDB4ODAwMAkvKiBFbmQgT2YgU3RyZWFtIHJlYWNoZWQuICovCisKKy8qIE1hY3JvcyBmb3IgY2hlY2tpbmcgSS9PIENvbXBsZXRpb24gc3RhdHVzOiAqLworI2RlZmluZSBDSE5MX0lTX0lPX0NPTVBMRVRFKGlvYykgICghKGlvYy5zdGF0dXMgJiB+Q0hOTF9JT0NTVEFURU9TKSkKKyNkZWZpbmUgQ0hOTF9JU19JT19DQU5DRUxMRUQoaW9jKSAoaW9jLnN0YXR1cyAmIENITkxfSU9DU1RBVENBTkNFTCkKKyNkZWZpbmUgQ0hOTF9JU19USU1FRF9PVVQoaW9jKSAgICAoaW9jLnN0YXR1cyAmIENITkxfSU9DU1RBVFRJTUVPVVQpCisKKy8qIENoYW5uZWwgYXR0cmlidXRlczogKi8KK3N0cnVjdCBjaG5sX2F0dHIgeworCXUzMiB1aW9fcmVxczsJCS8qIE1heCAjIG9mIHByZWFsbG9jYXRlZCBJL08gcmVxdWVzdHMuICovCisJdm9pZCAqZXZlbnRfb2JqOwkvKiBVc2VyIHN1cHBsaWVkIGF1dG8tcmVzZXQgZXZlbnQgb2JqZWN0LiAqLworCWNoYXIgKnBzdHJfZXZlbnRfbmFtZTsJLyogUHRyIHRvIG5hbWUgb2YgdXNlciBldmVudCBvYmplY3QuICovCisJdm9pZCAqcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwl1MzIgcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCisKK307CisKKy8qIEkvTyBjb21wbGV0aW9uIHJlY29yZDogKi8KK3N0cnVjdCBjaG5sX2lvYyB7CisJdm9pZCAqcGJ1ZjsJCS8qIEJ1ZmZlciB0byBiZSBmaWxsZWQvZW1wdGllZC4gKi8KKwl1MzIgYnl0ZV9zaXplOwkJLyogQnl0ZXMgdHJhbnNmZXJyZWQuICovCisJdTMyIGJ1Zl9zaXplOwkJLyogQWN0dWFsIGJ1ZmZlciBzaXplIGluIGJ5dGVzICovCisJdTMyIHN0YXR1czsJCS8qIFN0YXR1cyBvZiBJTyBjb21wbGV0aW9uLiAqLworCXUzMiBkd19hcmc7CQkvKiBVc2VyIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBwYnVmLiAqLworfTsKKworI2VuZGlmIC8qIENITkxERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nobmxwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2hubHByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjkyMTAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Nobmxwcml2LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIGNobmxwcml2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJpdmF0ZSBjaGFubmVsIGhlYWRlciBzaGFyZWQgYmV0d2VlbiBEU1BTWVMsIERTUEFQSSBhbmQKKyAqIEJyaWRnZSBkcml2ZXIgbW9kdWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENITkxQUklWXworI2RlZmluZSBDSE5MUFJJVl8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogQ2hhbm5lbCBtYW5hZ2VyIGxpbWl0czogKi8KKyNkZWZpbmUgQ0hOTF9NQVhDSEFOTkVMUyAgICAzMgkvKiBNYXggY2hhbm5lbHMgYXZhaWxhYmxlIHBlciB0cmFuc3BvcnQgKi8KKworLyoKKyAqICBUcmFucyBwb3J0IGNoYW5uZWwgSWQgZGVmaW5pdGlvbnM6KG11c3QgbWF0Y2ggZHNwLXNpZGUpLgorICoKKyAqICBGb3IgQ0hOTF9NQVhDSEFOTkVMUyA9IDE2OgorICoKKyAqICBDaG5sSWRzOgorICogICAgICAwLTE1ICAoUENQWSkgLSB0cmFuc3BvcnQgMCkKKyAqICAgICAgMTYtMzEgKERETUEpIC0gdHJhbnNwb3J0IDEpCisgKiAgICAgIDMyLTQ3IChaQ1BZKSAtIHRyYW5zcG9ydCAyKQorICovCisjZGVmaW5lIENITkxfUENQWSAgICAgICAwCS8qIFByb2MtY29weSB0cmFuc3BvcnQgMCAqLworCisjZGVmaW5lIENITkxfTUFYSVJRICAgICAweGZmCS8qIEFyYml0cmFyaWx5IGxhcmdlIG51bWJlci4gKi8KKworLyogVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgcHJpdmF0ZTogKi8KKyNkZWZpbmUgQ0hOTF9NT0RFVVNFUkVWRU5UICAweDEwMDAJLyogVXNlciBwcm92aWRlZCB0aGUgY2hhbm5lbCBldmVudC4gKi8KKyNkZWZpbmUgQ0hOTF9NT0RFTUFTSyAgICAgICAweDEwMDEKKworLyogSGlnaGVyIGxldmVsIGNoYW5uZWwgc3RhdGVzOiAqLworI2RlZmluZSBDSE5MX1NUQVRFUkVBRFkJCTAJLyogQ2hhbm5lbCByZWFkeSBmb3IgSS9PLiAqLworI2RlZmluZSBDSE5MX1NUQVRFQ0FOQ0VMCTEJLyogSS9PIHdhcyBjYW5jZWxsZWQuICovCisjZGVmaW5lIENITkxfU1RBVEVFT1MJCTIJLyogRW5kIE9mIFN0cmVhbSByZWFjaGVkLiAqLworCisvKiBNYWNyb3MgZm9yIGNoZWNraW5nIG1vZGU6ICovCisjZGVmaW5lIENITkxfSVNfSU5QVVQobW9kZSkgICAgICAobW9kZSAmIENITkxfTU9ERUZST01EU1ApCisjZGVmaW5lIENITkxfSVNfT1VUUFVUKG1vZGUpICAgICAoIUNITkxfSVNfSU5QVVQobW9kZSkpCisKKy8qIFR5cGVzIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyaWVzOiAqLworI2RlZmluZSBDSE5MX1RZUEVTTSAgICAgICAgIDEJLyogU2hhcmVkIG1lbW9yeSBkcml2ZXIuICovCisjZGVmaW5lIENITkxfVFlQRUJNICAgICAgICAgMgkvKiBCdXMgTWFzdGVyaW5nIGRyaXZlci4gKi8KKworLyogTWF4IHN0cmluZyBsZW5ndGggb2YgY2hhbm5lbCBJL08gY29tcGxldGlvbiBldmVudCBuYW1lIC0gY2hhbmdlIGlmIG5lZWRlZCAqLworI2RlZmluZSBDSE5MX01BWEVWVE5BTUVMRU4gIDMyCisKKy8qIE1heCBtZW1vcnkgcGFnZXMgbG9ja2FibGUgaW4gQ0hOTF9QcmVwYXJlQnVmZmVyKCkgLSBjaGFuZ2UgaWYgbmVlZGVkICovCisjZGVmaW5lIENITkxfTUFYTE9DS1BBR0VTICAgNjQKKworLyogQ2hhbm5lbCBpbmZvLiAqLworc3RydWN0IGNobmxfaW5mbyB7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CS8qIE93bmluZyBjaGFubmVsIG1hbmFnZXIuICovCisJdTMyIGNuaGxfaWQ7CQkvKiBDaGFubmVsIElELiAqLworCXZvaWQgKmV2ZW50X29iajsJLyogQ2hhbm5lbCBJL08gY29tcGxldGlvbiBldmVudC4gKi8KKwkvKkFic3RyYWN0aW9uIG9mIEkvTyBjb21wbGV0aW9uIGV2ZW50LiAqLworCXN0cnVjdCBzeW5jX29iamVjdCAqc3luY19ldmVudDsKKwlzOCBkd19tb2RlOwkJLyogQ2hhbm5lbCBtb2RlLiAqLworCXU4IGR3X3N0YXRlOwkJLyogQ3VycmVudCBjaGFubmVsIHN0YXRlLiAqLworCXUzMiBieXRlc190eDsJCS8qIFRvdGFsIGJ5dGVzIHRyYW5zZmVycmVkLiAqLworCXUzMiBjaW9fY3M7CQkvKiBOdW1iZXIgb2YgSU9DcyBpbiBxdWV1ZS4gKi8KKwl1MzIgY2lvX3JlcXM7CQkvKiBOdW1iZXIgb2YgSU8gUmVxdWVzdHMgaW4gcXVldWUuICovCisJdTMyIHByb2Nlc3M7CQkvKiBQcm9jZXNzIG93bmluZyB0aGlzIGNoYW5uZWwuICovCit9OworCisvKiBDaGFubmVsIG1hbmFnZXIgaW5mbzogKi8KK3N0cnVjdCBjaG5sX21ncmluZm8geworCXU4IGR3X3R5cGU7CQkvKiBUeXBlIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyeS4gKi8KKwkvKiBDaGFubmVsIGhhbmRsZSwgZ2l2ZW4gdGhlIGNoYW5uZWwgaWQuICovCisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1OCBvcGVuX2NoYW5uZWxzOwkvKiBOdW1iZXIgb2Ygb3BlbiBjaGFubmVscy4gKi8KKwl1OCBtYXhfY2hhbm5lbHM7CS8qIHRvdGFsICMgb2YgY2hubHMgc3VwcG9ydGVkICovCit9OworCisvKiBDaGFubmVsIE1hbmFnZXIgQXR0cnM6ICovCitzdHJ1Y3QgY2hubF9tZ3JhdHRycyB7CisJLyogTWF4IG51bWJlciBvZiBjaGFubmVscyB0aGlzIG1hbmFnZXIgY2FuIHVzZS4gKi8KKwl1OCBtYXhfY2hhbm5lbHM7CisJdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCBXb3JkIHNpemUuICovCit9OworCisjZW5kaWYgLyogQ0hOTFBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzOTUwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbGsuaApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGNsay5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByb3ZpZGVzIENsb2NrIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIF9DTEtfSAorI2RlZmluZSBfQ0xLX0gKKworZW51bSBkc3BfY2xrX2lkIHsKKwlEU1BfQ0xLX0lWQTIgPSAwLAorCURTUF9DTEtfR1BUNSwKKwlEU1BfQ0xLX0dQVDYsCisJRFNQX0NMS19HUFQ3LAorCURTUF9DTEtfR1BUOCwKKwlEU1BfQ0xLX1dEVDMsCisJRFNQX0NMS19NQ0JTUDEsCisJRFNQX0NMS19NQ0JTUDIsCisJRFNQX0NMS19NQ0JTUDMsCisJRFNQX0NMS19NQ0JTUDQsCisJRFNQX0NMS19NQ0JTUDUsCisJRFNQX0NMS19TU0ksCisJRFNQX0NMS19OT1RfREVGSU5FRAorfTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBtb2R1bGU7IGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50CisgKiAgICAgIHJlYWNoZXMgMC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENMSyBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBSZXNvdXJjZXMgdXNlZCBieSBtb2R1bGUgYXJlIGZyZWVkIHdoZW4gY1JlZiByZWFjaGVzIHplcm8uCisgKi8KK2V4dGVybiB2b2lkIGRzcF9jbGtfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIENMSyBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIENMSyBpbml0aWFsaXplZC4KKyAqLworZXh0ZXJuIHZvaWQgZHNwX2Nsa19pbml0KHZvaWQpOworCit2b2lkIGRzcF9ncHRfd2FpdF9vdmVyZmxvdyhzaG9ydCBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgbG9hZCk7CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2Nsa19lbmFibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbmFibGVzIHRoZSBjbG9jayByZXF1ZXN0ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICAwOglTdWNjZXNzLgorICoJLUVQRVJNOglFcnJvciBvY2N1cmVkIHdoaWxlIGVuYWJsaW5nIHRoZSBjbG9jay4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRzcF9jbGtfZW5hYmxlKGVudW0gZHNwX2Nsa19pZCBjbGtfaWQpOworCit1MzIgZHNwX2Nsb2NrX2VuYWJsZV9hbGwodTMyIGRzcF9wZXJfY2xvY2tzKTsKKworLyoKKyAqICA9PT09PT09PSBkc3BfY2xrX2Rpc2FibGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNhYmxlcyB0aGUgY2xvY2sgcmVxdWVzdGVkLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBFcnJvciBvY2N1cmVkIHdoaWxlIGRpc2FibGluZyB0aGUgY2xvY2suCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkc3BfY2xrX2Rpc2FibGUoZW51bSBkc3BfY2xrX2lkIGNsa19pZCk7CisKK2V4dGVybiB1MzIgZHNwX2Nsa19nZXRfaXZhMl9yYXRlKHZvaWQpOworCit1MzIgZHNwX2Nsb2NrX2Rpc2FibGVfYWxsKHUzMiBkc3BfcGVyX2Nsb2Nrcyk7CisKK2V4dGVybiB2b2lkIHNzaV9jbGtfcHJlcGFyZShib29sIEZMQUcpOworCisjZW5kaWYgLyogX1NZTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjFmMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvY21tLmgKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBjbW0uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGUgQ29tbXVuaWNhdGlvbiBNZW1vcnkgTWFuYWdlbWVudChDTU0pIG1vZHVsZSBwcm92aWRlcyBzaGFyZWQgbWVtb3J5CisgKiBtYW5hZ2VtZW50IHNlcnZpY2VzIGZvciBEU1AvQklPUyBCcmlkZ2UgZGF0YSBzdHJlYW1pbmcgYW5kIG1lc3NhZ2luZy4KKyAqIE11bHRpcGxlIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCBDTU0uIE1lbW9yeSBpcworICogY29lbGVzY2VkIGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIHBvb2wgd2hlbiBhIGJ1ZmZlciBpcyBmcmVlZC4KKyAqCisgKiBUaGUgQ01NX1hsYXRvclt4eHhdIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3Igbm9kZSBtZXNzYWdpbmcgYW5kIGRhdGEKKyAqIHN0cmVhbWluZyBhZGRyZXNzIHRyYW5zbGF0aW9uIHRvIHBlcmZvcm0gemVyby1jb3B5IGludGVyLXByb2Nlc3NvcgorICogZGF0YSB0cmFuc2ZlcihHUFA8LT5EU1ApLiBBICJ0cmFuc2xhdG9yIiBvYmplY3QgaXMgY3JlYXRlZCBmb3IgYSBub2RlIG9yCisgKiBzdHJlYW0gb2JqZWN0IHRoYXQgY29udGFpbnMgcGVyIHRocmVhZCB2aXJ0dWFsIGFkZHJlc3MgaW5mb3JtYXRpb24uIFRoaXMKKyAqIHRyYW5zbGF0b3IgaW5mbyBpcyB1c2VkIGF0IHJ1bnRpbWUgdG8gcGVyZm9ybSBTTSBhZGRyZXNzIHRyYW5zbGF0aW9uCisgKiB0by9mcm9tIHRoZSBEU1AgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBOb3RlczoKKyAqICAgY21tX3hsYXRvcl9hbGxvY19idWYgLSBVc2VkIGJ5IE5vZGUgYW5kIFN0cmVhbSBtb2R1bGVzIGZvciBTTSBhZGRyZXNzCisgKgkJCSAgdHJhbnNsYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ01NXworI2RlZmluZSBDTU1fCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NtbWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKgorICogID09PT09PT09IGNtbV9jYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgbWVtb3J5IGJ1ZmZlcnMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZGF0YSBzdHJlYW1pbmcgb3IKKyAqICAgICAgbWVzc2FnaW5nLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhjbW1fbWdyOiAgIENtbSBNZ3IgaGFuZGxlLgorICogICAgICB1c2l6ZTogICAgIE51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KKyAqICAgICAgcGF0dHI6ICAgICBBdHRyaWJ1dGVzIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KKyAqICAgICAgcHBfYnVmX3ZhOiAgIEFkZHJlc3Mgb2Ygd2hlcmUgdG8gcGxhY2UgVkEuCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBhIHplcm8nZCBibG9jayBvZiBTTSBtZW1vcnk7CisgKiAgICAgIE5VTEwgaWYgbWVtb3J5IGNvdWxkbid0IGJlIGFsbG9jYXRlZCwKKyAqICAgICAgb3IgaWYgYnl0ZV9zaXplID09IDAsCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhjbW1fbWdyLgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIHJldHVybmVkIHBvaW50ZXIsIGlmIG5vdCBOVUxMLCBwb2ludHMgdG8gYSB2YWxpZCBtZW1vcnkgYmxvY2sgb2YKKyAqICAgICAgdGhlIHNpemUgcmVxdWVzdGVkLgorICoKKyAqLworZXh0ZXJuIHZvaWQgKmNtbV9jYWxsb2NfYnVmKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICB1MzIgdXNpemUsIHN0cnVjdCBjbW1fYXR0cnMgKnBhdHRycywKKwkJCSAgICB2b2lkICoqcHBfYnVmX3ZhKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcGhfY21tX21ncjoJTG9jYXRpb24gdG8gc3RvcmUgYSBjb21tdW5pY2F0aW9uIG1hbmFnZXIgaGFuZGxlIG9uCisgKiAgICAgIAkJb3V0cHV0LgorICogICAgICBoZGV2X29iajogSGFuZGxlIHRvIGEgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgbWdyX2F0dHJ0czogQ29tbSBtZW0gbWFuYWdlciBhdHRyaWJ1dGVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgRmFpbGVkIHRvIGluaXRpYWxpemUgY3JpdGljYWwgc2VjdCBzeW5jIG9iamVjdC4KKyAqCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNtbV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGhfY21tX21nciAhPSBOVUxMLgorICogICAgICBtZ3JfYXR0cnRzLT51bF9taW5fYmxvY2tfc2l6ZSA+PSA0IGJ5dGVzLgorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV9jcmVhdGUoc3RydWN0IGNtbV9vYmplY3QgKipwaF9jbW1fbWdyLAorCQkJICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjbW1fbWdyYXR0cnMgKm1ncl9hdHRydHMpOworCisvKgorICogID09PT09PT09IGNtbV9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveSB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNtbV9tZ3I6ICAgQ21tIE1nciBoYW5kbGUuCisgKiAgICAgIGZvcmNlOiAgICAgRm9yY2UgZGVhbGxvY2F0aW9uIG9mIGFsbCBjbW0gbWVtb3J5IGltbWVkaWF0ZWx5IGlmIHNldCBUUlVFLgorICogICAgICAgICAgICAgICAgIElmIEZBTFNFLCBhbmQgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMgd2lsbCByZXR1cm4gLUVQRVJNCisgKiAgICAgICAgICAgICAgICAgc3RhdHVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBDTU0gb2JqZWN0ICYgcmVzb3VyY2VzIGRlbGV0ZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBVbmFibGUgdG8gZnJlZSBDTU0gb2JqZWN0IGR1ZSB0byBvdXRzdGFuZGluZyBhbGxvY2F0aW9uLgorICogICAgICAtRUZBVUxUOiAgICBVbmFibGUgdG8gZnJlZSBDTU0gZHVlIHRvIGJhZCBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENNTSBpcyBpbml0aWFsaXplZC4KKyAqICAgICAgaGNtbV9tZ3IgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICBNZW1vcnkgcmVzb3VyY2VzIHVzZWQgYnkgQ21tIE1nciBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiBpbnQgY21tX2Rlc3Ryb3koc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLCBib29sIGZvcmNlKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1fZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgbW9kdWxlLiBDbGVhbnVwIENNTSBtb2R1bGUgaWYgQ01NIGNSZWYgcmVhY2hlcyB6ZXJvLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgbi9hCisgKiAgUmV0dXJuczoKKyAqICAgICBuL2EKKyAqICBSZXF1aXJlczoKKyAqICAgICBDTU0gaXMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgY21tX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gY21tX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgZ2l2ZW4gYnVmZmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhjbW1fbWdyOiAgICBDbW0gTWdyIGhhbmRsZS4KKyAqICAgICAgcGJ1ZjogICAgICAgUG9pbnRlciB0byBtZW1vcnkgYWxsb2NhdGVkIGJ5IGNtbV9jYWxsb2NfYnVmKCkuCisgKiAgICAgIHVsX3NlZ19pZDogICAgU00gc2VnbWVudCBJZCB1c2VkIGluIENNTV9DYWxsb2MoKSBhdHRycy4KKyAqICAgICAgICAgICAgICAgICAgU2V0IHRvIDAgdG8gdXNlIGRlZmF1bHQgc2VnbWVudC4KKyAqICBSZXR1cm5zOgorICogICAgICAwCisgKiAgICAgIC1FUEVSTQorICogIFJlcXVpcmVzOgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIGJ1Zl9wYSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqCisgKi8KK2V4dGVybiBpbnQgY21tX2ZyZWVfYnVmKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICAgICB2b2lkICpidWZfcGEsIHUzMiB1bF9zZWdfaWQpOworCisvKgorICogID09PT09PT09IGNtbV9nZXRfaGFuZGxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBoYW5kbGUgdG8gdGhlIGNtbSBtZ3IgZm9yIHRoZSBnaXZlbiBkZXZpY2Ugb2JqLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3I6ICAgSGFuZGxlIHRvIGEgUHJvY2Vzc29yLgorICogICAgICBwaF9jbW1fbWdyOglMb2NhdGlvbiB0byBzdG9yZSB0aGUgc2hhcmVkIG1lbW9yeSBtZ3IgaGFuZGxlIG9uCisgKiAgICAgIAkJb3V0cHV0LgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgQ21tIE1nciBvcGFxdWUgaGFuZGxlIHJldHVybmVkLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGhfY21tX21nciAhPSBOVUxMCisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGNtbV9nZXRfaGFuZGxlKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJIHN0cnVjdCBjbW1fb2JqZWN0ICoqcGhfY21tX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gY21tX2dldF9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IFNNIGFuZCBWTSB1dGlsaXphdGlvbiBpbmZvcm1hdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgIEhhbmRsZSB0byBhIENtbSBNZ3IuCisgKiAgICAgIGNtbV9pbmZvX29iajogICAgTG9jYXRpb24gdG8gc3RvcmUgdGhlIENtbSBpbmZvcm1hdGlvbiBvbiBvdXRwdXQuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhhbmRsZS4KKyAqICAgICAgLUVJTlZBTCBJbnZhbGlkIGlucHV0IGFyZ3VtZW50LgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV9nZXRfaW5mbyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQkgICAgICAgc3RydWN0IGNtbV9pbmZvICpjbW1faW5mb19vYmopOworCisvKgorICogID09PT09PT09IGNtbV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgcHJpdmF0ZSBzdGF0ZSBvZiBDTU0gbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBDTU0gaW5pdGlhbGl6ZWQuCisgKi8KK2V4dGVybiBib29sIGNtbV9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBhIGJsb2NrIG9mIFNNIHdpdGggdGhlIENNTS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBDbW0gTWdyLgorICogICAgICBscEdQUEJhc2VQQTogICAgIEdQUCBCYXNlIFBoeXNpY2FsIGFkZHJlc3MuCisgKiAgICAgIHVsX3NpemU6ICAgICAgICAgIFNpemUgaW4gR1BQIGJ5dGVzLgorICogICAgICBkc3BfYWRkcl9vZmZzZXQgIEdQUCBQQSB0byBEU1AgUEEgT2Zmc2V0LgorICogICAgICBjX2ZhY3RvcjogICAgICAgICBBZGQgb2Zmc2V0IGlmIENNTV9BRERUT0RTUFBBLCBzdWIgaWYgQ01NX1NVQkZST01EU1BQQS4KKyAqICAgICAgZHdfZHNwX2Jhc2U6ICAgICAgIERTUCB2aXJ0dWFsIGJhc2UgYnl0ZSBhZGRyZXNzLgorICogICAgICB1bF9kc3Bfc2l6ZTogICAgICAgU2l6ZSBvZiBEU1Agc2VnbWVudCBpbiBieXRlcy4KKyAqICAgICAgc2dtdF9pZDogICAgICAgICBBZGRyZXNzIHRvIHN0b3JlIHNlZ21lbnQgSWQuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgIEludmFsaWQgaGNtbV9tZ3IgaGFuZGxlLgorICogICAgICAtRUlOVkFMOiBJbnZhbGlkIGlucHV0IGFyZ3VtZW50LgorICogICAgICAtRVBFUk06ICAgICAgIFVuYWJsZSB0byByZWdpc3Rlci4KKyAqICAgICAgLSBPbiBzdWNjZXNzICpzZ210X2lkIGlzIGEgdmFsaWQgU00gc2VnbWVudCBJRC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgdWxfc2l6ZSA+IDAKKyAqICAgICAgc2dtdF9pZCAhPSBOVUxMCisgKiAgICAgIGR3X2dwcF9iYXNlX3BhICE9IDAKKyAqICAgICAgY19mYWN0b3IgPSBDTU1fQUREVE9EU1BQQSB8fCBjX2ZhY3RvciA9IENNTV9TVUJGUk9NRFNQUEEKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkJIHVuc2lnbmVkIGludCBkd19ncHBfYmFzZV9wYSwKKwkJCQkJIHUzMiB1bF9zaXplLAorCQkJCQkgdTMyIGRzcF9hZGRyX29mZnNldCwKKwkJCQkJIHM4IGNfZmFjdG9yLAorCQkJCQkgdW5zaWduZWQgaW50IGR3X2RzcF9iYXNlLAorCQkJCQkgdTMyIHVsX2RzcF9zaXplLAorCQkJCQkgdTMyICpzZ210X2lkLCB1MzIgZ3BwX2Jhc2VfdmEpOworCisvKgorICogID09PT09PT09IGNtbV91bl9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVbnJlZ2lzdGVyIHRoZSBnaXZlbiBtZW1vcnkgc2VnbWVudCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQKKyAqICAgICAgYnkgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoY21tX21ncjogICAgSGFuZGxlIHRvIGEgQ21tIE1nci4KKyAqICAgICAgdWxfc2VnX2lkICAgICBTZWdtZW50IGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgY21tX3JlZ2lzdGVyX2dwcHNtX3NlZy4KKyAqICBSZXR1cm5zOgorICogICAgICAgMDogICAgICAgICBTdWNjZXNzLgorICogICAgICAgLUVGQVVMVDogICAgIEludmFsaWQgaGFuZGxlLgorICogICAgICAgLUVJTlZBTDogSW52YWxpZCB1bF9zZWdfaWQuCisgKiAgICAgICAtRVBFUk06ICAgICAgIFVuYWJsZSB0byB1bnJlZ2lzdGVyIGZvciB1bmtub3duIHJlYXNvbi4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkJICAgIHUzMiB1bF9zZWdfaWQpOworCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgdGhlIHNwZWNpZmllZCBTTSBidWZmZXIgYW5kIGNyZWF0ZSBhIGxvY2FsIG1lbW9yeSBkZXNjcmlwdG9yLgorICogICAgICBQbGFjZSBvbiB0aGUgZGVzY3JpcHRvciBvbiB0aGUgdHJhbnNsYXRvcidzIEhhUSAoSG9zdCBBbGxvYydkIFF1ZXVlKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB4bGF0b3I6ICAgIEhhbmRsZSB0byBhIFhsYXRvciBvYmplY3QuCisgKiAgICAgIHZhX2J1ZjogICAgIFZpcnR1YWwgYWRkcmVzcyBwdHIoY2xpZW50IGNvbnRleHQpCisgKiAgICAgIHBhX3NpemU6ICAgIFNpemUgb2YgU00gbWVtb3J5IHRvIGFsbG9jYXRlLgorICogIFJldHVybnM6CisgKiAgICAgIFB0ciB0byB2YWxpZCBwaHlzaWNhbCBhZGRyZXNzKFBhKSBvZiBwYV9zaXplIGJ5dGVzLCBOVUxMIGlmIGZhaWxlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgdmFfYnVmICE9IDAuCisgKiAgICAgIHBhX3NpemUgIT0gMC4KKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIHZvaWQgKmNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsCisJCQkJICB2b2lkICp2YV9idWYsIHUzMiBwYV9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgQ3JlYXRlIGEgdHJhbnNsYXRvcih4bGF0b3IpIG9iamVjdCB1c2VkIGZvciBwcm9jZXNzIHNwZWNpZmljIFZhPC0+UGEKKyAqICAgICBhZGRyZXNzIHRyYW5zbGF0aW9uLiBOb2RlIG1lc3NhZ2luZyBhbmQgc3RyZWFtcyB1c2UgdGhpcyB0byBwZXJmb3JtCisgKiAgICAgaW50ZXItcHJvY2Vzc29yKEdQUDwtPkRTUCkgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICB4bGF0b3I6ICAgICAgICAgQWRkcmVzcyB0byBwbGFjZSBoYW5kbGUgdG8gYSBuZXcgWGxhdG9yIGhhbmRsZS4KKyAqICAgICBoY21tX21ncjogICAgICAgIEhhbmRsZSB0byBDbW0gTWdyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRyYW5zbGF0b3IuCisgKiAgICAgeGxhdG9yX2F0dHJzOiAgIFRyYW5zbGF0b3IgYXR0cmlidXRlcyB1c2VkIGZvciB0aGUgY2xpZW50IE5PREUgb3IgU1RSRUFNLgorICogIFJldHVybnM6CisgKiAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgIC1FSU5WQUw6ICAgIEJhZCBpbnB1dCBBdHRycy4KKyAqICAgICAtRU5PTUVNOiAgIEluc3VmZmljaWVudCBtZW1vcnkobG9jYWwpIGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogIFJlcXVpcmVzOgorICogICAgIHhsYXRvciAhPSBOVUxMCisgKiAgICAgaGNtbV9tZ3IgIT0gTlVMTAorICogICAgIHhsYXRvcl9hdHRycyAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqCisgKi8KK2V4dGVybiBpbnQgY21tX3hsYXRvcl9jcmVhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKip4bGF0b3IsCisJCQkJICAgIHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkgICAgc3RydWN0IGNtbV94bGF0b3JhdHRycyAqeGxhdG9yX2F0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0cmFuc2xhdG9yIHJlc291cmNlcworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHhsYXRvcjogICAgaGFuZGxlIHRvIHRyYW5zbGF0b3IuCisgKiAgICAgIGZvcmNlOiAgICAgZm9yY2UgPSBUUlVFIHdpbGwgZnJlZSBYTGF0b3JzIFNNIGJ1ZmZlcnMvZHNjcmlwdHJzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBCYWQgdHJhbnNsYXRvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTTogICAgICBVbmFibGUgdG8gZnJlZSB0cmFuc2xhdG9yIHJlc291cmNlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcmVmcyA+IDAKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1feGxhdG9yX2RlbGV0ZShzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAorCQkJCSAgICBib29sIGZvcmNlKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSBTTSBidWZmZXIgYW5kIGRlc2NyaXB0b3IuCisgKiAgICAgIERvZXMgbm90IGZyZWUgY2xpZW50IHByb2Nlc3MgVk0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgeGxhdG9yOiAgICBoYW5kbGUgdG8gdHJhbnNsYXRvci4KKyAqICAgICAgYnVmX3ZhICAgICAgVmlydHVhbCBhZGRyZXNzIG9mIFBBIHRvIGZyZWUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEJhZCB0cmFuc2xhdG9yIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIGludCBjbW1feGxhdG9yX2ZyZWVfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsCisJCQkJICAgICAgdm9pZCAqYnVmX3ZhKTsKKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQvR2V0IHByb2Nlc3Mgc3BlY2lmaWMgInRyYW5zbGF0b3IiIGFkZHJlc3MgaW5mby4KKyAqICAgICAgVGhpcyBpcyB1c2VkIHRvIHBlcmZvcm0gZmFzdCB2aXJ0YXVsIGFkZHJlc3MgdHJhbnNsYXRpb24KKyAqICAgICAgZm9yIHNoYXJlZCBtZW1vcnkgYnVmZmVycyBiZXR3ZWVuIHRoZSBHUFAgYW5kIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgIHhsYXRvcjogICAgIGhhbmRsZSB0byB0cmFuc2xhdG9yLgorICogICAgIHBhZGRyOiAgICAgICBWaXJ0dWFsIGJhc2UgYWRkcmVzcyBvZiBzZWdtZW50LgorICogICAgIHVsX3NpemU6ICAgICAgU2l6ZSBpbiBieXRlcy4KKyAqICAgICBzZWdtX2lkOiAgICAgU2VnbWVudCBpZGVudGlmaWVyIG9mIFNNIHNlZ21lbnQocykKKyAqICAgICBzZXRfaW5mbyAgICAgU2V0IHhsYXRvciBmaWVsZHMgaWYgVFJVRSwgZWxzZSByZXR1cm4gYmFzZSBhZGRyCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEJhZCB0cmFuc2xhdG9yIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgKHJlZnMgPiAwKQorICogICAgICAocGFkZHIgIT0gTlVMTCkKKyAqICAgICAgKHVsX3NpemUgPiAwKQorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gaW50IGNtbV94bGF0b3JfaW5mbyhzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLAorCQkJCSAgdTggKipwYWRkciwKKwkJCQkgIHUzMiB1bF9zaXplLCB1MzIgc2VnbV9pZCwgYm9vbCBzZXRfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gY21tX3hsYXRvcl90cmFuc2xhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQZXJmb3JtIGFkZHJlc3MgdHJhbnNsYXRpb24gVkE8LT5QQSBmb3IgdGhlIHNwZWNpZmllZCBzdHJlYW0gb3IKKyAqICAgICAgbWVzc2FnZSBzaGFyZWQgbWVtb3J5IGJ1ZmZlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgIHhsYXRvcjogaGFuZGxlIHRvIHRyYW5zbGF0b3IuCisgKiAgICAgcGFkZHIgICAgYWRkcmVzcyBvZiBidWZmZXIgdG8gdHJhbnNsYXRlLgorICogICAgIHh0eXBlICAgIFR5cGUgb2YgYWRkcmVzcyB4bGF0aW9uLiBDTU1fUEEyVkEgb3IgQ01NX1ZBMlBBLgorICogIFJldHVybnM6CisgKiAgICAgVmFsaWQgYWRkcmVzcyBvbiBzdWNjZXNzLCBlbHNlIE5VTEwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHJlZnMgPiAwCisgKiAgICAgIHBhZGRyICE9IE5VTEwKKyAqICAgICAgeHR5cGUgPj0gQ01NX1ZBMlBBKSAmJiAoeHR5cGUgPD0gQ01NX0RTUFBBMlBBKQorICogIEVuc3VyZXM6CisgKgorICovCitleHRlcm4gdm9pZCAqY21tX3hsYXRvcl90cmFuc2xhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKnhsYXRvciwKKwkJCQkgIHZvaWQgKnBhZGRyLCBlbnVtIGNtbV94bGF0ZXR5cGUgeHR5cGUpOworCisjZW5kaWYgLyogQ01NXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NtbWRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmZjM3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jbW1kZWZzLmgKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBjbW1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIE1FTSBjb25zdGFudHMgYW5kIHR5cGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIENNTURFRlNfCisjZGVmaW5lIENNTURFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiBDbW0gYXR0cmlidXRlcyB1c2VkIGluIGNtbV9jcmVhdGUoKSAqLworc3RydWN0IGNtbV9tZ3JhdHRycyB7CisJLyogTWluaW11bSBTTSBhbGxvY2F0aW9uOyBkZWZhdWx0IDMyIGJ5dGVzLiAqLworCXUzMiB1bF9taW5fYmxvY2tfc2l6ZTsKK307CisKKy8qIEF0dHJpYnV0ZXMgZm9yIENNTV9BbGxvY0J1ZigpICYgQ01NX0FsbG9jRGVzYygpICovCitzdHJ1Y3QgY21tX2F0dHJzIHsKKwl1MzIgdWxfc2VnX2lkOwkJLyogIDEsMi4uLiBhcmUgU00gc2VnbWVudHMuIDAgaXMgbm90LiAqLworCXUzMiB1bF9hbGlnbm1lbnQ7CS8qICAwLDEsMiw0Li4uLnVsX21pbl9ibG9ja19zaXplICovCit9OworCisvKgorICogIERTUFBhIHRvIEdQUFBhIENvbnZlcnNpb24gRmFjdG9yLgorICoKKyAqICBGb3IgdHlwaWNhbCBwbGF0Zm9ybXM6CisgKiAgICAgIGNvbnZlcnRlZCBBZGRyZXNzID0gUGFEU1AgKyAoIGNfZmFjdG9yICogYWRkcmVzc1RvQ29udmVydCkuCisgKi8KKyNkZWZpbmUgQ01NX1NVQkZST01EU1BQQQktMQorI2RlZmluZSBDTU1fQUREVE9EU1BQQQkJMQorCisjZGVmaW5lIENNTV9BTExTRUdNRU5UUyAgICAgICAgIDB4RkZGRkZGCS8qIEFsbCBTZWdJZHMgKi8KKyNkZWZpbmUgQ01NX01BWEdQUFNFR1MgICAgICAgICAgMQkvKiBNYXhpbXVtICMgb2YgU00gc2VncyAqLworCisvKgorICogIFNNU0VHcyBhcmUgU00gc2VnbWVudHMgdGhlIERTUCBhbGxvY2F0ZXMgZnJvbS4KKyAqCisgKiAgVGhpcyBpbmZvIGlzIHVzZWQgYnkgdGhlIEdQUCB0byB4bGF0ZSBEU1AgYWxsb2NhdGVkIFBBcy4KKyAqLworCitzdHJ1Y3QgY21tX3NlZ2luZm8geworCXUzMiBkd19zZWdfYmFzZV9wYTsJLyogU3RhcnQgUGh5cyBhZGRyZXNzIG9mIFNNIHNlZ21lbnQgKi8KKwkvKiBUb3RhbCBzaXplIGluIGJ5dGVzIG9mIHNlZ21lbnQ6IERTUCtHUFAgKi8KKwl1MzIgdWxfdG90YWxfc2VnX3NpemU7CisJdTMyIGR3X2dwcF9iYXNlX3BhOwkvKiBTdGFydCBQaHlzIGFkZHIgb2YgR3BwIFNNIHNlZyAqLworCXUzMiB1bF9ncHBfc2l6ZTsJLyogU2l6ZSBvZiBHcHAgU00gc2VnIGluIGJ5dGVzICovCisJdTMyIGR3X2RzcF9iYXNlX3ZhOwkvKiBEU1AgdmlydCBiYXNlIGJ5dGUgYWRkcmVzcyAqLworCXUzMiB1bF9kc3Bfc2l6ZTsJLyogRFNQIHNlZyBzaXplIGluIGJ5dGVzICovCisJLyogIyBvZiBjdXJyZW50IEdQUCBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgc2VnbWVudCAqLworCXUzMiB1bF9pbl91c2VfY250OworCXUzMiBkd19zZWdfYmFzZV92YTsJLyogU3RhcnQgVmlydCBhZGRyZXNzIG9mIFNNIHNlZyAqLworCit9OworCisvKiBDTU0gdXNlZnVsIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgY21tX2luZm8geworCS8qICMgb2YgU00gc2VnbWVudHMgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgQ21tLiAqLworCXUzMiB1bF9udW1fZ3Bwc21fc2VnczsKKwkvKiBUb3RhbCAjIG9mIGFsbG9jYXRpb25zIG91dHN0YW5kaW5nIGZvciBDTU0gKi8KKwl1MzIgdWxfdG90YWxfaW5fdXNlX2NudDsKKwkvKiBNaW4gU00gYmxvY2sgc2l6ZSBhbGxvY2F0aW9uIGZyb20gY21tX2NyZWF0ZSgpICovCisJdTMyIHVsX21pbl9ibG9ja19zaXplOworCS8qIEluZm8gcGVyIHJlZ2lzdGVyZWQgU00gc2VnbWVudC4gKi8KKwlzdHJ1Y3QgY21tX3NlZ2luZm8gc2VnX2luZm9bQ01NX01BWEdQUFNFR1NdOworfTsKKworLyogWGxhdG9yQ3JlYXRlIGF0dHJpYnV0ZXMgKi8KK3N0cnVjdCBjbW1feGxhdG9yYXR0cnMgeworCXUzMiB1bF9zZWdfaWQ7CQkvKiBzZWdtZW50IElkIHVzZWQgZm9yIFNNIGFsbG9jYXRpb25zICovCisJdTMyIGR3X2RzcF9idWZzOwkvKiAjIG9mIERTUC1zaWRlIGJ1ZnMgKi8KKwl1MzIgZHdfZHNwX2J1Zl9zaXplOwkvKiBzaXplIG9mIERTUC1zaWRlIGJ1ZnMgaW4gR1BQIGJ5dGVzICovCisJLyogVm0gYmFzZSBhZGRyZXNzIGFsbG9jJ2QgaW4gY2xpZW50IHByb2Nlc3MgY29udGV4dCAqLworCXZvaWQgKnZtX2Jhc2U7CisJLyogZHdfdm1fc2l6ZSBtdXN0IGJlID49IChkd01heE51bUJ1ZnMgKiBkd01heFNpemUpICovCisJdTMyIGR3X3ZtX3NpemU7Cit9OworCisvKgorICogQ21tIHRyYW5zbGF0aW9uIHR5cGVzLiBVc2UgdG8gbWFwIFNNIGFkZHJlc3NlcyB0byBwcm9jZXNzIGNvbnRleHQuCisgKi8KK2VudW0gY21tX3hsYXRldHlwZSB7CisJQ01NX1ZBMlBBID0gMCwJCS8qIFZpcnR1YWwgdG8gR1BQIHBoeXNpY2FsIGFkZHJlc3MgeGxhdGlvbiAqLworCUNNTV9QQTJWQSA9IDEsCQkvKiBHUFAgUGh5c2ljYWwgdG8gdmlydHVhbCAqLworCUNNTV9WQTJEU1BQQSA9IDIsCS8qIFZhIHRvIERTUCBQYSAqLworCUNNTV9QQTJEU1BQQSA9IDMsCS8qIEdQUCBQYSB0byBEU1AgUGEgKi8KKwlDTU1fRFNQUEEyUEEgPSA0LAkvKiBEU1AgUGEgdG8gR1BQIFBhICovCit9OworCitzdHJ1Y3QgY21tX29iamVjdDsKK3N0cnVjdCBjbW1feGxhdG9yb2JqZWN0OworCisjZW5kaWYgLyogQ01NREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9jb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJjZTJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2NvZC5oCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogY29kLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29kZSBtYW5hZ2VtZW50IG1vZHVsZSBmb3IgRFNQcy4gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlCisgKiBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMgY29kZSBvYmplY3RzIG9udG8gRFNQCisgKiBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgQ09EXworI2RlZmluZSBDT0RfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbGRlZnMuaD4KKworI2RlZmluZSBDT0RfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKyNkZWZpbmUgQ09EX1RSQUNFQkVHICAgICAgICAgICAgIlNZU19QVVRDQkVHIgorI2RlZmluZSBDT0RfVFJBQ0VFTkQgICAgICAgICAgICAiU1lTX1BVVENFTkQiCisjZGVmaW5lIENPRF9UUkFDRUNVUlBPUwkiQlJJREdFX1NZU19QVVRDX2N1cnJlbnQiCisjZGVmaW5lIENPRF9UUkFDRVNFQ1QgICAgICAgICAgICJ0cmFjZSIKKyNkZWZpbmUgQ09EX1RSQUNFQkVHT0xEICAgICAgICAgIlBVVENCRUciCisjZGVmaW5lIENPRF9UUkFDRUVORE9MRCAgICAgICAgICJQVVRDRU5EIgorCisjZGVmaW5lIENPRF9OT0xPQUQgICAgICAgICAgICAgIERCTExfTk9MT0FECisjZGVmaW5lIENPRF9TWU1CICAgICAgICAgICAgICAgIERCTExfU1lNQgorCisvKiBDT0QgY29kZSBtYW5hZ2VyIGhhbmRsZSAqLworc3RydWN0IGNvZF9tYW5hZ2VyOworCisvKiBDT0QgbGlicmFyeSBoYW5kbGUgKi8KK3N0cnVjdCBjb2RfbGlicmFyeW9iajsKKworLyogQ09EIGF0dHJpYnV0ZXMgKi8KK3N0cnVjdCBjb2RfYXR0cnMgeworCXUzMiB1bF9yZXNlcnZlZDsKK307CisKKy8qCisgKiAgRnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igd3JpdGluZyBtZW1vcnkgdG8gYSBEU1Agc3lzdGVtLCBhbGxvY2F0aW5nCisgKiAgYW5kIGZyZWVpbmcgRFNQIG1lbW9yeS4KKyAqLwordHlwZWRlZiB1MzIoKmNvZF93cml0ZWZ4bikgKHZvaWQgKnByaXZfcmVmLCB1MzIgZHNwX2FkZCwKKwkJCSAgICB2b2lkICpwYnVmLCB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIGxpYnJhcnkgb3BlbmVkIHdpdGggY29kX29wZW4oKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBMaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBieSBjb2Rfb3BlbigpLgorICogIFJldHVybnM6CisgKiAgICAgIE5vbmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGxpYi4KKyAqICBFbnN1cmVzOgorICoKKyAqLworZXh0ZXJuIHZvaWQgY29kX2Nsb3NlKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgY29kZSBvbiBhIERTUCBzeXN0ZW0uIFRoaXMgb2JqZWN0IGNhbiBiZQorICogICAgICB1c2VkIHRvIGxvYWQgYW4gaW5pdGlhbCBwcm9ncmFtIGltYWdlIHdpdGggYXJndW1lbnRzIHRoYXQgY2FuIGxhdGVyCisgKiAgICAgIGJlIGV4cGFuZGVkIHdpdGggZHluYW1pY2FsbHkgbG9hZGVkIG9iamVjdCBmaWxlcy4KKyAqICAgICAgU3ltYm9sIHRhYmxlIGluZm9ybWF0aW9uIGlzIG1hbmFnZWQgYnkgdGhpcyBvYmplY3QgYW5kIGNhbiBiZSByZXRyaWV2ZWQKKyAqICAgICAgdXNpbmcgdGhlIGNvZF9nZXRfc3ltX3ZhbHVlKCkgZnVuY3Rpb24uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbWFuYWdlcjogICAgICAgIGNyZWF0ZWQgbWFuYWdlciBvYmplY3QKKyAqICAgICAgc3RyX3psX2ZpbGU6ICAgIFpMIERMTCBmaWxlbmFtZSwgb2YgbGVuZ3RoIDwgQ09EX01BWFBBVEhMRU5HVEguCisgKiAgICAgIGF0dHJzOiAgICAgICAgICBhdHRyaWJ1dGVzIHRvIGJlIHVzZWQgYnkgdGhpcyBvYmplY3QuIEEgTlVMTCB2YWx1ZQorICogICAgICAgICAgICAgICAgICAgICAgd2lsbCBjYXVzZSBkZWZhdWx0IGF0dHJzIHRvIGJlIHVzZWQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVTUElQRTogICBaTF9DcmVhdGUgZmFpbGVkLgorICogICAgICAtRU5PU1lTOiAgICAgICAgICAgYXR0cnMgd2FzIG5vdCBOVUxMLiAgV2UgZG9uJ3QgeWV0IHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uIGRlZmF1bHQgdmFsdWVzIG9mIGF0dHJzLgorICogIFJlcXVpcmVzOgorICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgorICogICAgICBzdHJfemxfZmlsZSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfY3JlYXRlKHN0cnVjdCBjb2RfbWFuYWdlciAqKm1nciwKKwkJCSAgICAgY2hhciAqc3RyX3psX2ZpbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjb2RfYXR0cnMgKmF0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgY29kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgY29kX2RlbGV0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDT0QgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIE5vbmUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFJlc291cmNlcyBhY3F1aXJlZCBpbiBjb2RfaW5pdCh2b2lkKSBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIGNvZF9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGNvZF9nZXRfYmFzZV9saWIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaGFuZGxlIHRvIHRoZSBiYXNlIGltYWdlIERCTCBsaWJyYXJ5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNvZF9tZ3Jfb2JqOiAgIGhhbmRsZSBvZiBtYW5hZ2VyIHRvIGJlIGRlbGV0ZWQKKyAqICAgICAgcGxpYjogICAgICAgbG9jYXRpb24gdG8gc3RvcmUgbGlicmFyeSBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBwbGliICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2Jhc2VfbGliKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipwbGliKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbmFtZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgbmFtZSBvZiB0aGUgYmFzZSBpbWFnZSBEQkwgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgICAgIHN6X25hbWU6ICAgIGxvY2F0aW9uIHRvIHN0b3JlIGxpYnJhcnkgbmFtZSBvbiBvdXRwdXQuCisgKiAgICAgIHVzaXplOiAgICAgICBzaXplIG9mIG5hbWUgYnVmZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogIEJ1ZmZlciB0b28gc21hbGwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBzel9uYW1lICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2Jhc2VfbmFtZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAorCQkJCSAgICBjaGFyICpzel9uYW1lLCB1MzIgdXNpemUpOworCisvKgorICogID09PT09PT09IGNvZF9nZXRfZW50cnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgZW50cnkgcG9pbnQgb2YgYSBsb2FkZWQgRFNQIHByb2dyYW0gaW1hZ2UKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iajogICBoYW5kbGUgb2YgbWFuYWdlciB0byBiZSBkZWxldGVkCisgKiAgICAgIGVudHJ5X3B0OiAgIHBvaW50ZXIgdG8gbG9jYXRpb24gZm9yIGVudHJ5IHBvaW50CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgU3VjY2Vzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIGVudHJ5X3B0ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X2VudHJ5KHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJdTMyICplbnRyeV9wdCk7CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9sb2FkZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaGFuZGxlIHRvIHRoZSBEQkwgbG9hZGVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNvZF9tZ3Jfb2JqOiAgIGhhbmRsZSBvZiBtYW5hZ2VyIHRvIGJlIGRlbGV0ZWQKKyAqICAgICAgbG9hZGVyOiAgICAgbG9jYXRpb24gdG8gc3RvcmUgbG9hZGVyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgdmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIGxvYWRlciAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX2dldF9sb2FkZXIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCQkgc3RydWN0IGRibGxfdGFyX29iaiAqKmxvYWRlcik7CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiBhIHNlY3Rpb24gaW4gdGhlIENPRkYgZmlsZQorICogICAgICBnaXZlbiB0aGUgc2VjdGlvbiBuYW1lLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gY29kX29wZW4oKS4KKyAqICAgICAgc3RyX3NlY3Q6ICAgbmFtZSBvZiB0aGUgc2VjdGlvbiwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgIi4iCisgKiAgICAgIGFkZHI6ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGFkZHJlc3MuCisgKiAgICAgIGxlbjogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGxlbmd0aC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGNvdWxkIG5vdCBiZSBmb3VuZCBvciBoYXZlIG5vdCBiZWVuIGxvYWRlZCBvbnRvCisgKiAgICAgICAgICAgICAgICB0aGUgYm9hcmQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZhbGlkIGNvZF9tZ3Jfb2JqLgorICogICAgICBzdHJfc2VjdCAhPSBOVUxMOworICogICAgICBhZGRyICE9IE5VTEw7CisgKiAgICAgIGxlbiAhPSBOVUxMOworICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAqYWRkciBhbmQgKmxlbiBjb250YWluIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAqICAgICAgZWxzZTogICphZGRyID09IDAgYW5kICpsZW4gPT0gMDsKKyAqCisgKi8KK2V4dGVybiBpbnQgY29kX2dldF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLAorCQkJCSAgY2hhciAqc3RyX3NlY3QsCisJCQkJICB1MzIgKmFkZHIsIHUzMiAqbGVuKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X3N5bV92YWx1ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wuIFRoZSBzeW1ib2wgaXMgZmlyc3QKKyAqICAgICAgc2VhcmNoZWQgZm9yIGxpdGVyYWxseSBhbmQgdGhlbiwgaWYgbm90IGZvdW5kLCBzZWFyY2hlZCBmb3IgYXMgYQorICogICAgICBDIHN5bWJvbC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWI6ICAgICAgICBsaWJyYXJ5IGhhbmRsZSByZXR1cm5lZCBmcm9tIGNvZF9vcGVuKCkuCisgKiAgICAgIHBzdHJTeW1ib2w6IG5hbWUgb2YgdGhlIHN5bWJvbAorICogICAgICB2YWx1ZTogICAgICB2YWx1ZSBvZiB0aGUgc3ltYm9sCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVTUElQRTogIFN5bWJvbHMgY291bGQgbm90IGJlIGZvdW5kIG9yIGhhdmUgbm90IGJlZW4gbG9hZGVkIG9udG8KKyAqICAgICAgICAgICAgICAgIHRoZSBib2FyZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgY29kX21ncl9vYmouCisgKiAgICAgIHN0cl9zeW0gIT0gTlVMTC4KKyAqICAgICAgcHVsX3ZhbHVlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfZ2V0X3N5bV92YWx1ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLAorCQkJCSAgICBjaGFyICpzdHJfc3ltLCB1MzIgKiBwdWxfdmFsdWUpOworCisvKgorICogID09PT09PT09IGNvZF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgQ09EIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgTm9uZS4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgcmVxdWlyZW1lbnQgZm9yIGVhY2ggb2YgdGhlIG90aGVyIHB1YmxpYyBDT0QgZnVuY3Rpb25zLgorICovCitleHRlcm4gYm9vbCBjb2RfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfbG9hZF9iYXNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTG9hZCB0aGUgaW5pdGlhbCBwcm9ncmFtIGltYWdlLCBvcHRpb25hbGx5IHdpdGggY29tbWFuZC1saW5lIGFyZ3VtZW50cywKKyAqICAgICAgb24gdGhlIERTUCBzeXN0ZW0gbWFuYWdlZCBieSB0aGUgc3VwcGxpZWQgaGFuZGxlLiBUaGUgcHJvZ3JhbSB0byBiZQorICogICAgICBsb2FkZWQgbXVzdCBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJncyBhcnJheSBhbmQgbXVzdCBiZSBhIGZ1bGx5CisgKiAgICAgIHF1YWxpZmllZCBwYXRobmFtZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobWdyOiAgICAgICBtYW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAorICogICAgICBudW1fYXJnYzogICBudW1iZXIgb2YgYXJndW1lbnRzIGluIHRoZSBhcmdzIGFycmF5CisgKiAgICAgIGFyZ3M6ICAgICAgIGFycmF5IG9mIHN0cmluZ3MgZm9yIGFyZ3VtZW50cyB0byBEU1AgcHJvZ3JhbQorICogICAgICB3cml0ZV9meG46ICAgYm9hcmQtc3BlY2lmaWMgZnVuY3Rpb24gdG8gd3JpdGUgZGF0YSB0byBEU1Agc3lzdGVtCisgKiAgICAgIGFyYjogICAgICAgYXJiaXRyYXJ5IHBvaW50ZXIgdG8gYmUgcGFzc2VkIGFzIGZpcnN0IGFyZyB0byB3cml0ZV9meG4KKyAqICAgICAgZW52cDogICAgICAgYXJyYXkgb2YgZW52aXJvbm1lbnQgc3RyaW5ncyBmb3IgRFNQIGV4ZWMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVCQURGOiAgICAgICBGYWlsZWQgdG8gb3BlbiB0YXJnZXQgY29kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQ09EIG1vZHVsZSBpbml0aWFsaXplZC4KKyAqICAgICAgaG1nciBpcyB2YWxpZC4KKyAqICAgICAgbnVtX2FyZ2MgPiAwLgorICogICAgICBhcmdzICE9IE5VTEwuCisgKiAgICAgIGFyZ3NbMF0gIT0gTlVMTC4KKyAqICAgICAgcGZuX3dyaXRlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBjb2RfbG9hZF9iYXNlKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosCisJCQkJdTMyIG51bV9hcmdjLCBjaGFyICphcmdzW10sCisJCQkJY29kX3dyaXRlZnhuIHBmbl93cml0ZSwgdm9pZCAqYXJiLAorCQkJCWNoYXIgKmVudnBbXSk7CisKKy8qCisgKiAgPT09PT09PT0gY29kX29wZW4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBPcGVuIGEgbGlicmFyeSBmb3IgcmVhZGluZyBzZWN0aW9ucy4gRG9lcyBub3QgbG9hZCBvciBzZXQgdGhlIGJhc2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1ncjogICAgICAgICAgIG1hbmFnZXIgdG8gbG9hZCB0aGUgY29kZSB3aXRoCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICBDb2ZmIGZpbGUgdG8gb3Blbi4KKyAqICAgICAgZmxhZ3M6ICAgICAgICAgIENPRF9OT0xPQUQgKGRvbid0IGxvYWQgc3ltYm9scykgb3IgQ09EX1NZTUIgKGxvYWQKKyAqICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbHMpLgorICogICAgICBsaWJfb2JqOiAgICAgICAgSGFuZGxlIHJldHVybmVkIHRoYXQgY2FuIGJlIHVzZWQgaW4gY2FsbHMgdG8gY29kX2Nsb3NlCisgKiAgICAgICAgICAgICAgICAgICAgICBhbmQgY29kX2dldF9zZWN0aW9uLgorICogIFJldHVybnM6CisgKiAgICAgIFNfT0s6ICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQkFERjogICAgICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIGhtZ3IgaXMgdmFsaWQuCisgKiAgICAgIGZsYWdzID09IENPRF9OT0xPQUQgfHwgZmxhZ3MgPT0gQ09EX1NZTUIuCisgKiAgICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX29wZW4oc3RydWN0IGNvZF9tYW5hZ2VyICpobWdyLAorCQkJICAgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJICAgdTMyIGZsYWdzLCBzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKipsaWJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBjb2Rfb3Blbl9iYXNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgT3BlbiBiYXNlIGltYWdlIGZvciByZWFkaW5nIHNlY3Rpb25zLiBEb2VzIG5vdCBsb2FkIHRoZSBiYXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhtZ3I6ICAgICAgICAgICBtYW5hZ2VyIHRvIGxvYWQgdGhlIGNvZGUgd2l0aAorICogICAgICBzel9jb2ZmX3BhdGg6ICAgQ29mZiBmaWxlIHRvIG9wZW4uCisgKiAgICAgIGZsYWdzOiAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIHN5bWJvbHMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUJBREY6ICAgRmFpbGVkIHRvIG9wZW4gdGFyZ2V0IGNvZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIENPRCBtb2R1bGUgaW5pdGlhbGl6ZWQuCisgKiAgICAgIGhtZ3IgaXMgdmFsaWQuCisgKiAgICAgIHN6X2NvZmZfcGF0aCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgY29kX29wZW5fYmFzZShzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3IsIGNoYXIgKnN6X2NvZmZfcGF0aCwKKwkJCQlkYmxsX2ZsYWdzIGZsYWdzKTsKKworLyoKKyAqICA9PT09PT09PSBjb2RfcmVhZF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgYSBjb2RlIHNlY3Rpb24gZ2l2ZW4gdGhlIHNlY3Rpb24gbmFtZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjb2RfbWdyX29iaiAgICAtIG1hbmFnZXIgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciB0aGUgc3ltYm9sCisgKiAgICAgIHN0cl9zZWN0ICAgIC0gbmFtZSBvZiB0aGUgc2VjdGlvbiwgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgIi4iCisgKiAgICAgIHN0cl9jb250ZW50IC0gYnVmZmVyIHRvIHN0b3JlIGNvbnRlbnQgb2YgdGhlIHNlY3Rpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKiAgICAgIC1FU1BJUEU6ICBTeW1ib2xzIGhhdmUgbm90IGJlZW4gbG9hZGVkIG9udG8gdGhlIGJvYXJkLgorICogIFJlcXVpcmVzOgorICogICAgICBDT0QgbW9kdWxlIGluaXRpYWxpemVkLgorICogICAgICB2YWxpZCBjb2RfbWdyX29iai4KKyAqICAgICAgc3RyX3NlY3QgIT0gTlVMTDsKKyAqICAgICAgc3RyX2NvbnRlbnQgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgKnN0cl9jb250ZW50IHN0b3JlcyB0aGUgY29udGVudCBvZiB0aGUgbmFtZWQgc2VjdGlvbi4KKyAqLworZXh0ZXJuIGludCBjb2RfcmVhZF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLAorCQkJCSAgIGNoYXIgKnN0cl9zZWN0LAorCQkJCSAgIGNoYXIgKnN0cl9jb250ZW50LCB1MzIgY29udGVudF9zaXplKTsKKworI2VuZGlmIC8qIENPRF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjM3NjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiYy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBkYmMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiAiRGVzaWduIGJ5IENvbnRyYWN0IiBwcm9ncmFtbWluZyBtYWNyb3MuCisgKgorICogTm90ZXM6CisgKiAgIFJlcXVpcmVzIHRoYXQgdGhlIEdULT5FUlJPUiBmdW5jdGlvbiBoYXMgYmVlbiBkZWZhdWx0ZWQgdG8gYSB2YWxpZAorICogICBlcnJvciBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gZXhlY3V0aW9uIGVudmlyb25tZW50LgorICoKKyAqICAgRG9lcyBub3QgcmVxdWlyZSB0aGF0IEdUX2luaXQoKSBiZSBjYWxsZWQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgREJDXworI2RlZmluZSBEQkNfCisKKy8qIEFzc2VydGlvbiBNYWNyb3M6ICovCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RFQlVHCisKKyNkZWZpbmUgREJDX0FTU0VSVChleHApIFwKKyAgICBpZiAoIShleHApKSBcCisJcHJfZXJyKCIlcywgbGluZSAlZDogQXNzZXJ0aW9uICgiICNleHAgIikgZmFpbGVkLlxuIiwgXAorCV9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgREJDX1JFUVVJUkUgREJDX0FTU0VSVAkvKiBGdW5jdGlvbiBQcmVjb25kaXRpb24uICovCisjZGVmaW5lIERCQ19FTlNVUkUgIERCQ19BU1NFUlQJLyogRnVuY3Rpb24gUG9zdGNvbmRpdGlvbi4gKi8KKworI2Vsc2UKKworI2RlZmluZSBEQkNfQVNTRVJUKGV4cCkge30KKyNkZWZpbmUgREJDX1JFUVVJUkUoZXhwKSB7fQorI2RlZmluZSBEQkNfRU5TVVJFKGV4cCkge30KKworI2VuZGlmIC8qIERFQlVHICovCisKKyNlbmRpZiAvKiBEQkNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2QuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRjZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYzNlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2QuaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIGRiZGNkLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5lcyB0aGUgRFNQL0JJT1MgQnJpZGdlIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgKERDRCkgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCRENEXworI2RlZmluZSBEQkRDRF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZGRlZi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2F1dG9fcmVnaXN0ZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJzIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCisgKiAgICAgIHNwZWNpYWwgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZyBEQ0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyB0byBiZSByZWdpc3RlcmVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBmaW5kIGF1dG8tcmVnaXN0cmF0aW9uL3JlYWQvbG9hZCBzZWN0aW9uLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIEludmFsaWQgRENEX0hNQU5BR0VSIGhhbmRsZS4uCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIE5vdGU6CisgKiAgICAgIER1ZSB0byB0aGUgRENEIGRhdGFiYXNlIGNvbnN0cnVjdGlvbiwgaXQgaXMgZXNzZW50aWFsIGZvciBhIERDRC1lbmFibGVkCisgKiAgICAgIENPRkYgZmlsZSB0byBjb250YWluIHRoZSByaWdodCBDT0ZGIHNlY3Rpb25zLCBlc3BlY2lhbGx5CisgKiAgICAgICIuZGNkX3JlZ2lzdGVyIiwgd2hpY2ggaXMgdXNlZCBmb3IgYXV0byByZWdpc3RyYXRpb24uCisgKi8KK2V4dGVybiBpbnQgZGNkX2F1dG9fcmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICAgY2hhciAqc3pfY29mZl9wYXRoKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfYXV0b191bnJlZ2lzdGVyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IHVucmVnaXN0ZXJzIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhCisgKiAgICAgIHNwZWNpYWwgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ0Qgb2JqZWN0cyB0byBiZSB1bnJlZ2lzdGVyZWQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVBQ0NFUzogVW5hYmxlIHRvIGZpbmQgYXV0by1yZWdpc3RyYXRpb24vcmVhZC9sb2FkIHNlY3Rpb24uCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICAgICAgSW52YWxpZCBEQ0RfSE1BTkFHRVIgaGFuZGxlLi4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgTm90ZToKKyAqICAgICAgRHVlIHRvIHRoZSBEQ0QgZGF0YWJhc2UgY29uc3RydWN0aW9uLCBpdCBpcyBlc3NlbnRpYWwgZm9yIGEgRENELWVuYWJsZWQKKyAqICAgICAgQ09GRiBmaWxlIHRvIGNvbnRhaW4gdGhlIHJpZ2h0IENPRkYgc2VjdGlvbnMsIGVzcGVjaWFsbHkKKyAqICAgICAgIi5kY2RfcmVnaXN0ZXIiLCB3aGljaCBpcyB1c2VkIGZvciBhdXRvIHVucmVnaXN0cmF0aW9uLgorICovCitleHRlcm4gaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpOworCisvKgorICogID09PT09PT09IGRjZF9jcmVhdGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIERDRCBtb2R1bGUgbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzel96bF9kbGxfbmFtZTogUG9pbnRlciB0byBhIERMTCBuYW1lIHN0cmluZy4KKyAqICAgICAgZGNkX21ncjogICAgICAgIEEgcG9pbnRlciB0byBhIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgRENEIG1hbmFnZXIgaGFuZGxlLgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHN6X3psX2RsbF9uYW1lIGlzIG5vbi1OVUxMLgorICogICAgICBkY2RfbWdyIGlzIG5vbi1OVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIEEgRENEIG1hbmFnZXIgaGFuZGxlIGlzIGNyZWF0ZWQuCisgKi8KK2V4dGVybiBpbnQgZGNkX2NyZWF0ZV9tYW5hZ2VyKGNoYXIgKnN6X3psX2RsbF9uYW1lLAorCQkJCSAgICAgc3RydWN0IGRjZF9tYW5hZ2VyICoqZGNkX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2Rlc3Ryb3lfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgYSBEQ0QgbW9kdWxlIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRjZF9tZ3I6ICAgICAgICBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRjZF9kZXN0cm95X21hbmFnZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2VudW1lcmF0ZV9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGVudW1lcmF0ZXMgY3VycmVudGx5IHZpc2libGUgRFNQL0JJT1MgQnJpZGdlIG9iamVjdHMKKyAqICAgICAgYW5kIHJldHVybnMgdGhlIFVVSUQgYW5kIHR5cGUgb2YgZWFjaCBlbnVtZXJhdGVkIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBpbmRleDogICAgICAgICAgICAgIFRoZSBvYmplY3QgZW51bWVyYXRpb24gaW5kZXguCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFR5cGUgb2Ygb2JqZWN0IHRvIGVudW1lcmF0ZS4KKyAqICAgICAgdXVpZF9vYmo6ICAgICAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBVbmFibGUgdG8gZW51bWVyYXRlIHRocm91Z2ggdGhlIERDRCBkYXRhYmFzZS4KKyAqICAgICAgRU5PREFUQTogIEVudW1lcmF0aW9uIGNvbXBsZXRlZC4gVGhpcyBpcyBub3QgYW4gZXJyb3IgY29kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICB1dWlkX29iaiBpcyBhIHZhbGlkIHBvaW50ZXIuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZGNkX2dldF9vYmplY3RfZGVmIHRvCisgKiAgICAgIHJldHJpZXZlIG9iamVjdCBwcm9wZXJ0aWVzLgorICovCitleHRlcm4gaW50IGRjZF9lbnVtZXJhdGVfb2JqZWN0KHMzMiBpbmRleCwKKwkJCQkgICAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQkgICAgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCB0aGUgRENEIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBkY2RfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X2RlcF9saWJzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJyYXJ5IGFuZCBzaXplIG9mIGFycmF5IG9mIHV1aWRzLCB0aGlzIGZ1bmN0aW9uCisgKiAgICAgIGZpbGxzIHRoZSBhcnJheSB3aXRoIHRoZSB1dWlkcyBvZiBhbGwgZGVwZW5kZW50IGxpYnJhcmllcyBvZiB0aGUgaW5wdXQKKyAqICAgICAgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIGEgbGlicmFyeS4KKyAqICAgICAgbnVtX2xpYnM6IFNpemUgb2YgdXVpZCBhcnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVpZHMpLgorICogICAgICBkZXBfbGliX3V1aWRzOiBBcnJheSBvZiBkZXBlbmRlbnQgbGlicmFyeSB1dWlkcyB0byBiZSBmaWxsZWQgaW4uCisgKiAgICAgIHByc3RudF9kZXBfbGliczogICAgQXJyYXkgaW5kaWNhdGluZyBpZiBjb3JyZXNwb25kaW5nIGxpYiBpcyBwZXJzaXN0ZW50LgorICogICAgICBwaGFzZTogcGhhc2UgdG8gb2J0YWluIGNvcnJlY3QgaW5wdXQgbGlicmFyeQorICogIFJldHVybnM6CisgKiAgICAgIDA6IFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKiAgICAgIC1FQUNDRVM6IEZhaWx1cmUgdG8gcmVhZCBzZWN0aW9uIGNvbnRhaW5pbmcgbGlicmFyeSBpbmZvLgorICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBoZGNkX21nci4KKyAqICAgICAgdXVpZF9vYmogIT0gTlVMTAorICogICAgICBkZXBfbGliX3V1aWRzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X2RlcF9saWJzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICB1MTYgbnVtX2xpYnMsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICpkZXBfbGliX3V1aWRzLAorCQkJCSAgIGJvb2wgKnByc3RudF9kZXBfbGlicywKKwkJCQkgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworCisvKgorICogID09PT09PT09IGRjZF9nZXRfbnVtX2RlcF9saWJzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gdGhlIHV1aWQgb2YgYSBsaWJyYXJ5LCBkZXRlcm1pbmUgaXRzIG51bWJlciBvZiBkZXBlbmRlbnQKKyAqICAgICAgbGlicmFyaWVzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkY2RfbWdyOiAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgZm9yIGEgbGlicmFyeS4KKyAqICAgICAgbnVtX2xpYnM6ICAgICAgIFNpemUgb2YgdXVpZCBhcnJheSAobnVtYmVyIG9mIGxpYnJhcnkgdXVpZHMpLgorICogICAgICBudW1fcGVyc19saWJzOiAgbnVtYmVyIG9mIHBlcnNpc3RlbnQgZGVwZW5kZW50IGxpYnJhcnkuCisgKiAgICAgIHBoYXNlOiAgICAgICAgICBQaGFzZSB0byBvYnRhaW4gY29ycmVjdCBpbnB1dCBsaWJyYXJ5CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqICAgICAgLUVBQ0NFUzogRmFpbHVyZSB0byByZWFkIHNlY3Rpb24gY29udGFpbmluZyBsaWJyYXJ5IGluZm8uCisgKiAgICAgIC1FUEVSTTogR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGhkY2RfbWdyLgorICogICAgICB1dWlkX29iaiAhPSBOVUxMCisgKiAgICAgIG51bV9saWJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X251bV9kZXBfbGlicyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgICB1MTYgKm51bV9saWJzLAorCQkJCSAgICAgICB1MTYgKm51bV9wZXJzX2xpYnMsCisJCQkJICAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2dldF9saWJyYXJ5X25hbWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5hbWUgb2YgYSAoZHluYW1pYykgbGlicmFyeSBmb3IgYSBnaXZlbgorICogICAgICBVVUlELgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkY2RfbWdyOiBBIERDRCBtYW5hZ2VyIGhhbmRsZS4KKyAqICAgICAgdXVpZF9vYmo6CVBvaW50ZXIgdG8gYSBkc3BfdXVpZCB0aGF0IHJlcHJlc2VudHMgYSB1bmlxdWUgRFNQL0JJT1MKKyAqICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIHN0cl9saWJfbmFtZTogQnVmZmVyIHRvIGhvbGQgbGlicmFyeSBuYW1lLgorICogICAgICBidWZmX3NpemU6IENvbnRhaW5zIGJ1ZmZlciBzaXplLiBTZXQgdG8gc3RyaW5nIHNpemUgb24gb3V0cHV0LgorICogICAgICBwaGFzZTogICAgICAgICAgV2hpY2ggcGhhc2UgdG8gbG9hZAorICogICAgICBwaGFzZV9zcGxpdDogICAgQXJlIHBoYXNlcyBpbiBtdWx0aXBsZSBsaWJyYXJpZXMKKyAqICBSZXR1cm5zOgorICogICAgICAwOiBTdWNjZXNzLgorICogICAgICAtRVBFUk06IEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBoZGNkX21nci4KKyAqICAgICAgc3RyX2xpYl9uYW1lICE9IE5VTEwuCisgKiAgICAgIHV1aWRfb2JqICE9IE5VTEwKKyAqICAgICAgYnVmZl9zaXplICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfZ2V0X2xpYnJhcnlfbmFtZShzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgICBjaGFyICpzdHJfbGliX25hbWUsCisJCQkJICAgICAgIHUzMiAqYnVmZl9zaXplLAorCQkJCSAgICAgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UsCisJCQkJICAgICAgIGJvb2wgKnBoYXNlX3NwbGl0KTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X29iamVjdF9kZWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByb3BlcnRpZXMvYXR0cmlidXRlcyBvZiBhIERTUC9CSU9TIEJyaWRnZQorICogICAgICBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRjZF9tZ3I6ICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICAgICAgUG9pbnRlciB0byBhIGRzcF91dWlkIHRoYXQgcmVwcmVzZW50cyBhIHVuaXF1ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIERTUC9CSU9TIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgICAgIFRoZSB0eXBlIG9mIERTUC9CSU9TIEJyaWRnZSBvYmplY3QgdG8gYmUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VkIChub2RlLCBwcm9jZXNzb3IsIGV0YykuCisgKiAgICAgIG9ial9kZWY6ICAgICAgICAgICAgUG9pbnRlciB0byBhbiBvYmplY3QgZGVmaW5pdGlvbiBzdHJ1Y3R1cmUuIEEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBvZiB2YXJpb3VzIHBvc3NpYmxlIERDRCBvYmplY3QgdHlwZXMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogU3VjY2Vzcy4KKyAqICAgICAgLUVBQ0NFUzogVW5hYmxlIHRvIGFjY2Vzcy9yZWFkL3BhcnNlL2xvYWQgY29udGVudCBvZiBvYmplY3QgY29kZQorICogICAgICAgICAgICAgICBzZWN0aW9uLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgRENEX0hNQU5BR0VSIGhhbmRsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICBvYmpfdXVpZCBpcyBub24tTlVMTC4KKyAqICAgICAgb2JqX2RlZiBpcyBub24tTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0X2RlZihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgICAgc3RydWN0IGRzcF91dWlkICpvYmpfdXVpZCwKKwkJCQkgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkJICAgICBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKm9ial9kZWYpOworCisvKgorICogID09PT09PT09IGRjZF9nZXRfb2JqZWN0cyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZmluZHMgYWxsIERDRCBvYmplY3RzIHNwZWNpZmllZCBpbiBhIHNwZWNpYWwKKyAqICAgICAgQ09GRiBzZWN0aW9uIGNhbGxlZCAiLmRjZF9yZWdpc3RlciIsIGFuZCBmb3IgZWFjaCBvYmplY3QsCisgKiAgICAgIGNhbGwgYSAicmVnaXN0ZXIiIGZ1bmN0aW9uLiAgVGhlICJyZWdpc3RlciIgZnVuY3Rpb24gbWF5IHBlcmZvcm0KKyAqICAgICAgdmFyaW91cyBhY3Rpb25zLCBzdWNoIGFzIDEpIHJlZ2lzdGVyIG5vZGVzIGluIHRoZSBub2RlIGRhdGFiYXNlLCAyKQorICogICAgICB1bnJlZ2lzdGVyIG5vZGVzIGZyb20gdGhlIG5vZGUgZGF0YWJhc2UsIGFuZCAzKSBhZGQgb3ZlcmxheSBub2Rlcy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGNkX21ncjogICAgICAgICAgICAgICAgQSBEQ0QgbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHN6X2NvZmZfcGF0aDogICAgICAgICAgIFBvaW50ZXIgdG8gbmFtZSBvZiBDT0ZGIGZpbGUgY29udGFpbmluZyBEQ0QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy4KKyAqICAgICAgcmVnaXN0ZXJfZnhuOiAgICAgICAgICAgQ2FsbGJhY2sgZnhuIHRvIGJlIGFwcGxpZWQgb24gZWFjaCBsb2NhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDRCBvYmplY3QuCisgKiAgICAgIGhhbmRsZTogICAgICAgICAgICAgICAgIEhhbmRsZSB0byBwYXNzIHRvIGNhbGxiYWNrLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQUNDRVM6IFVuYWJsZSB0byBhY2Nlc3MvcmVhZC9wYXJzZS9sb2FkIGNvbnRlbnQgb2Ygb2JqZWN0IGNvZGUKKyAqICAgICAgICAgICAgICAgc2VjdGlvbi4KKyAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIERDRF9ITUFOQUdFUiBoYW5kbGUuLgorICogIFJlcXVpcmVzOgorICogICAgICBEQ0QgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlOgorICogICAgICBEdWUgdG8gdGhlIERDRCBkYXRhYmFzZSBjb25zdHJ1Y3Rpb24sIGl0IGlzIGVzc2VudGlhbCBmb3IgYSBEQ0QtZW5hYmxlZAorICogICAgICBDT0ZGIGZpbGUgdG8gY29udGFpbiB0aGUgcmlnaHQgQ09GRiBzZWN0aW9ucywgZXNwZWNpYWxseQorICogICAgICAiLmRjZF9yZWdpc3RlciIsIHdoaWNoIGlzIHVzZWQgZm9yIGF1dG8gcmVnaXN0cmF0aW9uLgorICovCitleHRlcm4gaW50IGRjZF9nZXRfb2JqZWN0cyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSAgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJCSAgZGNkX3JlZ2lzdGVyZnhuIHJlZ2lzdGVyX2Z4biwgdm9pZCAqaGFuZGxlKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgRENELgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgRkFMU0U6ICBJbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKiAgICAgIFRSVUU6ICAgSW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqLworZXh0ZXJuIGJvb2wgZGNkX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX3JlZ2lzdGVyX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgRFNQL0JJT1MgQnJpZGdlIG9iamVjdCBpbiB0aGUgRENEIGRhdGFiYXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHV1aWRfb2JqOiAgICAgICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgdGhhdCBpZGVudGlmaWVzIGEgRFNQL0JJT1MKKyAqICAgICAgICAgICAgICAgICAgICAgIEJyaWRnZSBvYmplY3QuCisgKiAgICAgIG9ial90eXBlOiAgICAgICAgVHlwZSBvZiBvYmplY3QuCisgKiAgICAgIHBzel9wYXRoX25hbWU6ICAgIFBhdGggdG8gdGhlIG9iamVjdCdzIENPRkYgZmlsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byByZWdpc3RlciBvYmplY3QuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERDRCBpbml0aWFsaXplZC4KKyAqICAgICAgdXVpZF9vYmogYW5kIHN6UGF0aE5hbWUgYXJlIG5vbi1OVUxMIHZhbHVlcy4KKyAqICAgICAgb2JqX3R5cGUgaXMgYSB2YWxpZCB0eXBlIHZhbHVlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGNkX3JlZ2lzdGVyX29iamVjdChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkJICAgICAgY2hhciAqcHN6X3BhdGhfbmFtZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGNkX3VucmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBkZS1yZWdpc3RlcnMgYSB2YWxpZCBEU1AvQklPUyBCcmlkZ2Ugb2JqZWN0IGZyb20gdGhlIERDRAorICogICAgICBkYXRhYmFzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB1dWlkX29iajogICAgICBQb2ludGVyIHRvIGEgZHNwX3V1aWQgdGhhdCBpZGVudGlmaWVzIGEgRFNQL0JJT1MgQnJpZGdlCisgKiAgICAgICAgICAgICAgICAgIG9iamVjdC4KKyAqICAgICAgb2JqX3R5cGU6ICAgIFR5cGUgb2Ygb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogIFVuYWJsZSB0byBkZS1yZWdpc3RlciB0aGUgc3BlY2lmaWVkIG9iamVjdC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgRENEIGluaXRpYWxpemVkLgorICogICAgICB1dWlkX29iaiBpcyBhIG5vbi1OVUxMIHZhbHVlLgorICogICAgICBvYmpfdHlwZSBpcyBhIHZhbGlkIHR5cGUgdmFsdWUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkY2RfdW5yZWdpc3Rlcl9vYmplY3Qoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkJZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSk7CisKKyNlbmRpZiAvKiBfREJEQ0RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJkY2RkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGFhNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGNkZGVmLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGRiZGNkZGVmLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRENEIChEU1AvQklPUyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBEYXRhYmFzZSkgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEQkRDRERFRl8KKyNkZWZpbmUgREJEQ0RERUZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21ncnByaXYuaD4JLyogZm9yIG1ncl9wcm9jZXNzb3JleHRpbmZvICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBjcml0aWNhbCBlbGVtZW50cyBmb3IgdGhlIERDRCBtb2R1bGU6CisgKgorICogLSBEQ0RfUkVHS0VZIGVuYWJsZXMgRENEIGZ1bmN0aW9ucyB0byBsb2NhdGUgcmVnaXN0ZXJlZCBEQ0Qgb2JqZWN0cy4KKyAqIC0gRENEX1JFR0lTVEVSX1NFQ1RJT04gaWRlbnRpZmllcyB0aGUgQ09GRiBzZWN0aW9uIHdoZXJlIHRoZSBVVUlEIG9mCisgKiAgIHJlZ2lzdGVyZWQgRENEIG9iamVjdHMgYXJlIHN0b3JlZC4KKyAqLworI2RlZmluZSBEQ0RfUkVHS0VZICAgICAgICAgICAgICAiU29mdHdhcmVcXFRleGFzSW5zdHJ1bWVudHNcXERzcEJyaWRnZVxcRENEIgorI2RlZmluZSBEQ0RfUkVHSVNURVJfU0VDVElPTiAgICAiLmRjZF9yZWdpc3RlciIKKworI2RlZmluZSBEQ0RfTUFYUEFUSExFTkdUSCAgICAyNTUKKworLyogRENEIE1hbmFnZXIgT2JqZWN0ICovCitzdHJ1Y3QgZGNkX21hbmFnZXI7CisKK3N0cnVjdCBkY2Rfa2V5X2VsZW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsJLyogTWFrZSBpdCBsaW5rZWQgdG8gYSBsaXN0ICovCisJY2hhciBuYW1lW0RDRF9NQVhQQVRITEVOR1RIXTsJLyogIE5hbWUgb2YgYSBnaXZlbiB2YWx1ZSBlbnRyeSAqLworCWNoYXIgKnBhdGg7CQkvKiAgUG9pbnRlciB0byB0aGUgYWN0dWFsIGRhdGEgKi8KK307CisKKy8qIERDRCBOb2RlIFByb3BlcnRpZXMgKi8KK3N0cnVjdCBkY2Rfbm9kZXByb3BzIHsKKwlzdHJ1Y3QgZHNwX25kYnByb3BzIG5kYl9wcm9wczsKKwl1MzIgbXNnX3NlZ2lkOworCXUzMiBtc2dfbm90aWZ5X3R5cGU7CisJY2hhciAqcHN0cl9jcmVhdGVfcGhhc2VfZnhuOworCWNoYXIgKnBzdHJfZGVsZXRlX3BoYXNlX2Z4bjsKKwljaGFyICpwc3RyX2V4ZWN1dGVfcGhhc2VfZnhuOworCWNoYXIgKnBzdHJfaV9hbGdfbmFtZTsKKworCS8qIER5bmFtaWMgbG9hZCBwcm9wZXJ0aWVzICovCisJdTE2IHVzX2xvYWRfdHlwZTsJLyogU3RhdGljLCBkeW5hbWljLCBvdmVybGF5ICovCisJdTMyIHVsX2RhdGFfbWVtX3NlZ19tYXNrOwkvKiBEYXRhIG1lbW9yeSByZXF1aXJlbWVudHMgKi8KKwl1MzIgdWxfY29kZV9tZW1fc2VnX21hc2s7CS8qIENvZGUgbWVtb3J5IHJlcXVpcmVtZW50cyAqLworfTsKKworLyogRENEIEdlbmVyaWMgT2JqZWN0IFR5cGUgKi8KK3N0cnVjdCBkY2RfZ2VuZXJpY29iaiB7CisJdW5pb24gZGNkX29iaiB7CisJCXN0cnVjdCBkY2Rfbm9kZXByb3BzIG5vZGVfb2JqOwkvKiBub2RlIG9iamVjdC4gKi8KKwkJLyogcHJvY2Vzc29yIG9iamVjdC4gKi8KKwkJc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvIHByb2NfaW5mbzsKKwkJLyogZXh0ZW5kZWQgcHJvYyBvYmplY3QgKHByaXZhdGUpICovCisJCXN0cnVjdCBtZ3JfcHJvY2Vzc29yZXh0aW5mbyBleHRfcHJvY19vYmo7CisJfSBvYmpfZGF0YTsKK307CisKKy8qIERDRCBJbnRlcm5hbCBDYWxsYmFjayBUeXBlICovCit0eXBlZGVmIGludCgqZGNkX3JlZ2lzdGVyZnhuKSAoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICAgICBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLAorCQkJCSAgICAgIHZvaWQgKmhhbmRsZSk7CisKKyNlbmRpZiAvKiBEQkRDRERFRl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWYwNzVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RiZGVmcy5oCkBAIC0wLDAgKzEsNTE0IEBACisvKgorICogZGJkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIGRlZmluaXRpb25zIGFuZCBjb25zdGFudHMgZm9yIERTUC9CSU9TIEJyaWRnZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCREVGU18KKyNkZWZpbmUgREJERUZTXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4JLyogVHlwZXMgc2hhcmVkIGJldHdlZW4gR1BQIGFuZCBEU1AgKi8KKworI2RlZmluZSBQR19TSVpFNEsgNDA5NgorI2RlZmluZSBQR19NQVNLKHBnX3NpemUpICh+KChwZ19zaXplKS0xKSkKKyNkZWZpbmUgUEdfQUxJR05fTE9XKGFkZHIsIHBnX3NpemUpICgoYWRkcikgJiBQR19NQVNLKHBnX3NpemUpKQorI2RlZmluZSBQR19BTElHTl9ISUdIKGFkZHIsIHBnX3NpemUpICgoKGFkZHIpKyhwZ19zaXplKS0xKSAmIFBHX01BU0socGdfc2l6ZSkpCisKKy8qIEFQSSByZXR1cm4gdmFsdWUgYW5kIGNhbGxpbmcgY29udmVudGlvbiAqLworI2RlZmluZSBEQkFQSSAgICAgICAgICAgICAgICAgICAgICAgaW50CisKKy8qIEluZmluaXRlIHRpbWUgdmFsdWUgZm9yIHRoZSB1dGltZW91dCBwYXJhbWV0ZXIgdG8gRFNQU3RyZWFtX1NlbGVjdCgpICovCisjZGVmaW5lIERTUF9GT1JFVkVSICAgICAgICAgICAgICAgICAoLTEpCisKKy8qIE1heGltdW0gbGVuZ3RoIG9mIG5vZGUgbmFtZSwgdXNlZCBpbiBkc3BfbmRicHJvcHMgKi8KKyNkZWZpbmUgRFNQX01BWE5BTUVMRU4gICAgICAgICAgICAgIDMyCisKKy8qIG5vdGlmeV90eXBlIHZhbHVlcyBmb3IgdGhlIFJlZ2lzdGVyTm90aWZ5KCkgZnVuY3Rpb25zLiAqLworI2RlZmluZSBEU1BfU0lHTkFMRVZFTlQgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBUeXBlcyBvZiBldmVudHMgZm9yIHByb2Nlc3NvcnMgKi8KKyNkZWZpbmUgRFNQX1BST0NFU1NPUlNUQVRFQ0hBTkdFICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRFNQX1BST0NFU1NPUkFUVEFDSCAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgRFNQX1BST0NFU1NPUkRFVEFDSCAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRFNQX1BST0NFU1NPUlJFU1RBUlQgICAgICAgIDB4MDAwMDAwMDgKKworLyogRFNQIGV4Y2VwdGlvbiBldmVudHMgKERTUC9CSU9TIGFuZCBEU1AgTU1VIGZhdWx0KSAqLworI2RlZmluZSBEU1BfTU1VRkFVTFQgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBEU1BfU1lTRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBEU1BfRVhDRVBUSU9OQUJPUlQgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBEU1BfUFdSRVJST1IgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBEU1BfV0RUT1ZFUkZMT1cJMHgwMDAwMDA0MAorCisvKiBJVkEgZXhjZXB0aW9uIGV2ZW50cyAoSVZBIE1NVSBmYXVsdCkgKi8KKyNkZWZpbmUgSVZBX01NVUZBVUxUICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKy8qIFR5cGVzIG9mIGV2ZW50cyBmb3Igbm9kZXMgKi8KKyNkZWZpbmUgRFNQX05PREVTVEFURUNIQU5HRSAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRFNQX05PREVNRVNTQUdFUkVBRFkgICAgICAgIDB4MDAwMDAyMDAKKworLyogVHlwZXMgb2YgZXZlbnRzIGZvciBzdHJlYW1zICovCisjZGVmaW5lIERTUF9TVFJFQU1ET05FICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIERTUF9TVFJFQU1JT0NPTVBMRVRJT04gICAgICAweDAwMDAyMDAwCisKKy8qIEhhbmRsZSBkZWZpbml0aW9uIHJlcHJlc2VudGluZyB0aGUgR1BQIG5vZGUgaW4gRFNQTm9kZV9Db25uZWN0KCkgY2FsbHMgKi8KKyNkZWZpbmUgRFNQX0hHUFBOT0RFICAgICAgICAgICAgICAgIDB4RkZGRkZGRkYKKworLyogTm9kZSBkaXJlY3Rpb25zIHVzZWQgaW4gRFNQTm9kZV9Db25uZWN0KCkgKi8KKyNkZWZpbmUgRFNQX1RPTk9ERSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRFNQX0ZST01OT0RFICAgICAgICAgICAgICAgIDIKKworLyogRGVmaW5lIE5vZGUgTWluaW11bSBhbmQgTWF4aW11bSBQcmlvcml0aWVzICovCisjZGVmaW5lIERTUF9OT0RFX01JTl9QUklPUklUWSAgICAgICAxCisjZGVmaW5lIERTUF9OT0RFX01BWF9QUklPUklUWSAgICAgICAxNQorCisvKiBQcmUtRGVmaW5lZCBNZXNzYWdlIENvbW1hbmQgQ29kZXMgYXZhaWxhYmxlIHRvIHVzZXI6ICovCisjZGVmaW5lIERTUF9STVNVU0VSQ09ERVNUQVJUIFJNU19VU0VSCS8qIFN0YXJ0IG9mIFJNUyB1c2VyIGNtZCBjb2RlcyAqLworLyogZW5kIG9mIHVzZXIgY29kZXMgKi8KKyNkZWZpbmUgRFNQX1JNU1VTRVJDT0RFRU5EIChSTVNfVVNFUiArIFJNU19NQVhVU0VSQ09ERVMpOworLyogbXNnX2N0cmwgY29udGFpbnMgU00gYnVmZmVyIGRlc2NyaXB0aW9uICovCisjZGVmaW5lIERTUF9STVNCVUZERVNDIFJNU19CVUZERVNDCisKKy8qIFNoYXJlZCBtZW1vcnkgaWRlbnRpZmllciBmb3IgTUVNIHNlZ21lbnQgbmFtZWQgIlNITVNFRzAiICovCisjZGVmaW5lIERTUF9TSE1TRUcwICAgICAodTMyKSgtMSkKKworLyogUHJvY2Vzc29yIElEIG51bWJlcnMgKi8KKyNkZWZpbmUgRFNQX1VOSVQgICAgMAorI2RlZmluZSBJVkFfVU5JVCAgICAxCisKKyNkZWZpbmUgRFNQV09SRCAgICAgICB1bnNpZ25lZCBjaGFyCisjZGVmaW5lIERTUFdPUkRTSVpFICAgICBzaXplb2YoRFNQV09SRCkKKworLyogUG93ZXIgY29udHJvbCBlbnVtZXJhdGlvbnMgKi8KKyNkZWZpbmUgUFJPQ19QV1JDT05UUk9MICAgICAgICAgICAgIDB4ODA3MAorCisjZGVmaW5lIFBST0NfUFdSTUdUX0VOQUJMRSAgICAgICAgICAoUFJPQ19QV1JDT05UUk9MICsgMHgzKQorI2RlZmluZSBQUk9DX1BXUk1HVF9ESVNBQkxFICAgICAgICAgKFBST0NfUFdSQ09OVFJPTCArIDB4NCkKKworLyogQnJpZGdlIENvZGUgVmVyc2lvbiAqLworI2RlZmluZSBCUklER0VfVkVSU0lPTl9DT0RFICAgICAgICAgMzMzCisKKyNkZWZpbmUgICAgTUFYX1BST0ZJTEVTICAgICAxNgorCisvKiBEU1AgY2hpcCB0eXBlICovCisjZGVmaW5lIERTUFRZUEU2NAkweDk5CisKKy8qIEhhbmR5IE1hY3JvcyAqLworI2RlZmluZSBWQUxJRF9QUk9DX0VWRU5UIChEU1BfUFJPQ0VTU09SU1RBVEVDSEFOR0UgfCBEU1BfUFJPQ0VTU09SQVRUQUNIIHwgXAorCURTUF9QUk9DRVNTT1JERVRBQ0ggfCBEU1BfUFJPQ0VTU09SUkVTVEFSVCB8IERTUF9OT0RFU1RBVEVDSEFOR0UgfCBcCisJRFNQX1NUUkVBTURPTkUgfCBEU1BfU1RSRUFNSU9DT01QTEVUSU9OIHwgRFNQX01NVUZBVUxUIHwgXAorCURTUF9TWVNFUlJPUiB8IERTUF9XRFRPVkVSRkxPVyB8IERTUF9QV1JFUlJPUikKKworc3RhdGljIGlubGluZSBib29sIGlzX3ZhbGlkX3Byb2NfZXZlbnQodTMyIHgpCit7CisJcmV0dXJuICh4ID09IDAgfHwgKHggJiBWQUxJRF9QUk9DX0VWRU5UICYmICEoeCAmIH5WQUxJRF9QUk9DX0VWRU5UKSkpOworfQorCisvKiBUaGUgTm9kZSBVVUlEIHN0cnVjdHVyZSAqLworc3RydWN0IGRzcF91dWlkIHsKKwl1MzIgdWxfZGF0YTE7CisJdTE2IHVzX2RhdGEyOworCXUxNiB1c19kYXRhMzsKKwl1OCB1Y19kYXRhNDsKKwl1OCB1Y19kYXRhNTsKKwl1OCB1Y19kYXRhNls2XTsKK307CisKKy8qIERDRCB0eXBlcyAqLworZW51bSBkc3BfZGNkb2JqdHlwZSB7CisJRFNQX0RDRE5PREVUWVBFLAorCURTUF9EQ0RQUk9DRVNTT1JUWVBFLAorCURTUF9EQ0RMSUJSQVJZVFlQRSwKKwlEU1BfRENEQ1JFQVRFTElCVFlQRSwKKwlEU1BfRENERVhFQ1VURUxJQlRZUEUsCisJRFNQX0RDRERFTEVURUxJQlRZUEUsCisJLyogRFNQX0RDRE1BWE9CSlRZUEUgaXMgbWVhbnQgdG8gYmUgdGhlIGxhc3QgRENEIG9iamVjdCB0eXBlICovCisJRFNQX0RDRE1BWE9CSlRZUEUKK307CisKKy8qIFByb2Nlc3NvciBzdGF0ZXMgKi8KK2VudW0gZHNwX3Byb2NzdGF0ZSB7CisJUFJPQ19TVE9QUEVELAorCVBST0NfTE9BREVELAorCVBST0NfUlVOTklORywKKwlQUk9DX0VSUk9SCit9OworCisvKgorICogIE5vZGUgdHlwZXM6IE1lc3NhZ2Ugbm9kZSwgdGFzayBub2RlLCB4REFJUyBzb2NrZXQgbm9kZSwgYW5kCisgKiAgZGV2aWNlIG5vZGUuIF9OT0RFX0dQUCBpcyB1c2VkIHdoZW4gZGVmaW5pbmcgYSBzdHJlYW0gY29ubmVjdGlvbgorICogIGJldHdlZW4gYSB0YXNrIG9yIHNvY2tldCBub2RlIGFuZCB0aGUgR1BQLgorICoKKyAqLworZW51bSBub2RlX3R5cGUgeworCU5PREVfREVWSUNFLAorCU5PREVfVEFTSywKKwlOT0RFX0RBSVNTT0NLRVQsCisJTk9ERV9NRVNTQUdFLAorCU5PREVfR1BQCit9OworCisvKgorICogID09PT09PT09IG5vZGVfc3RhdGUgPT09PT09PT0KKyAqICBJbnRlcm5hbCBub2RlIHN0YXRlcy4KKyAqLworZW51bSBub2RlX3N0YXRlIHsKKwlOT0RFX0FMTE9DQVRFRCwKKwlOT0RFX0NSRUFURUQsCisJTk9ERV9SVU5OSU5HLAorCU5PREVfUEFVU0VELAorCU5PREVfRE9ORSwKKwlOT0RFX0NSRUFUSU5HLAorCU5PREVfU1RBUlRJTkcsCisJTk9ERV9QQVVTSU5HLAorCU5PREVfVEVSTUlOQVRJTkcsCisJTk9ERV9ERUxFVElORywKK307CisKKy8qIFN0cmVhbSBzdGF0ZXMgKi8KK2VudW0gZHNwX3N0cmVhbXN0YXRlIHsKKwlTVFJFQU1fSURMRSwKKwlTVFJFQU1fUkVBRFksCisJU1RSRUFNX1BFTkRJTkcsCisJU1RSRUFNX0RPTkUKK307CisKKy8qIFN0cmVhbSBjb25uZWN0IHR5cGVzICovCitlbnVtIGRzcF9jb25uZWN0dHlwZSB7CisJQ09OTkVDVFRZUEVfTk9ERU9VVFBVVCwKKwlDT05ORUNUVFlQRV9HUFBPVVRQVVQsCisJQ09OTkVDVFRZUEVfTk9ERUlOUFVULAorCUNPTk5FQ1RUWVBFX0dQUElOUFVUCit9OworCisvKiBTdHJlYW0gbW9kZSB0eXBlcyAqLworZW51bSBkc3Bfc3RybW1vZGUgeworCVNUUk1NT0RFX1BST0NDT1BZLAkvKiBQcm9jZXNzb3IocykgY29weSBzdHJlYW0gZGF0YSBwYXlsb2FkcyAqLworCVNUUk1NT0RFX1pFUk9DT1BZLAkvKiBTdHJtIGJ1ZmZlciBwdHJzIHN3YXBwZWQgbm8gZGF0YSBjb3BpZWQgKi8KKwlTVFJNTU9ERV9MRE1BLAkJLyogTG9jYWwgRE1BIDogT01BUCdzIFN5c3RlbS1ETUEgZGV2aWNlICovCisJU1RSTU1PREVfUkRNQQkJLyogUmVtb3RlIERNQTogT01BUCdzIERTUC1ETUEgZGV2aWNlICovCit9OworCisvKiBSZXNvdXJjZSBUeXBlcyAqLworZW51bSBkc3BfcmVzb3VyY2VpbmZvdHlwZSB7CisJRFNQX1JFU09VUkNFX0RZTkRBUkFNID0gMCwKKwlEU1BfUkVTT1VSQ0VfRFlOU0FSQU0sCisJRFNQX1JFU09VUkNFX0RZTkVYVEVSTkFMLAorCURTUF9SRVNPVVJDRV9EWU5TUkFNLAorCURTUF9SRVNPVVJDRV9QUk9DTE9BRAorfTsKKworLyogTWVtb3J5IFNlZ21lbnQgVHlwZXMgKi8KK2VudW0gZHNwX21lbXR5cGUgeworCURTUF9EWU5EQVJBTSA9IDAsCisJRFNQX0RZTlNBUkFNLAorCURTUF9EWU5FWFRFUk5BTCwKKwlEU1BfRFlOU1JBTQorfTsKKworLyogTWVtb3J5IEZsdXNoIFR5cGVzICovCitlbnVtIGRzcF9mbHVzaHR5cGUgeworCVBST0NfSU5WQUxJREFURV9NRU0gPSAwLAorCVBST0NfV1JJVEVCQUNLX01FTSwKKwlQUk9DX1dSSVRFQkFDS19JTlZBTElEQVRFX01FTSwKK307CisKKy8qIE1lbW9yeSBTZWdtZW50IFN0YXR1cyBWYWx1ZXMgKi8KK3N0cnVjdCBkc3BfbWVtc3RhdCB7CisJdTMyIHVsX3NpemU7CisJdTMyIHVsX3RvdGFsX2ZyZWVfc2l6ZTsKKwl1MzIgdWxfbGVuX21heF9mcmVlX2Jsb2NrOworCXUzMiB1bF9udW1fZnJlZV9ibG9ja3M7CisJdTMyIHVsX251bV9hbGxvY19ibG9ja3M7Cit9OworCisvKiBQcm9jZXNzb3IgTG9hZCBpbmZvcm1hdGlvbiBWYWx1ZXMgKi8KK3N0cnVjdCBkc3BfcHJvY2xvYWRzdGF0IHsKKwl1MzIgY3Vycl9sb2FkOworCXUzMiBwcmVkaWN0ZWRfbG9hZDsKKwl1MzIgY3Vycl9kc3BfZnJlcTsKKwl1MzIgcHJlZGljdGVkX2ZyZXE7Cit9OworCisvKiBBdHRyaWJ1dGVzIGZvciBTVFJNIGNvbm5lY3Rpb25zIGJldHdlZW4gbm9kZXMgKi8KK3N0cnVjdCBkc3Bfc3RybWF0dHIgeworCXUzMiBzZWdfaWQ7CQkvKiBNZW1vcnkgc2VnbWVudCBvbiBEU1AgdG8gYWxsb2NhdGUgYnVmZmVycyAqLworCXUzMiBidWZfc2l6ZTsJCS8qIEJ1ZmZlciBzaXplIChEU1Agd29yZHMpICovCisJdTMyIG51bV9idWZzOwkJLyogTnVtYmVyIG9mIGJ1ZmZlcnMgKi8KKwl1MzIgYnVmX2FsaWdubWVudDsJLyogQnVmZmVyIGFsaWdubWVudCAqLworCXUzMiB1dGltZW91dDsJCS8qIFRpbWVvdXQgZm9yIGJsb2NraW5nIFNUUk0gY2FsbHMgKi8KKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIG1vZGUgb2Ygc3RyZWFtIHdoZW4gb3BlbmVkICovCisJLyogRE1BIGNobmwgaWQgaWYgZHNwX3N0cm1tb2RlIGlzIExETUEgb3IgUkRNQSAqLworCXUzMiB1ZG1hX2NobmxfaWQ7CisJdTMyIHVkbWFfcHJpb3JpdHk7CS8qIERNQSBjaGFubmVsIHByaW9yaXR5IDA9bG93ZXN0LCA+MD1oaWdoICovCit9OworCisvKiBUaGUgZHNwX2NiZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3BfY2JkYXRhIHsKKwl1MzIgY2JfZGF0YTsKKwl1OCBub2RlX2RhdGFbMV07Cit9OworCisvKiBUaGUgZHNwX21zZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3BfbXNnIHsKKwl1MzIgZHdfY21kOworCXUzMiBkd19hcmcxOworCXUzMiBkd19hcmcyOworfTsKKworLyogVGhlIGRzcF9yZXNvdXJjZXJlcW10cyBzdHJ1Y3R1cmUgZm9yIG5vZGUncyByZXNvdXJjZSByZXF1aXJlbWVudHMgKi8KK3N0cnVjdCBkc3BfcmVzb3VyY2VyZXFtdHMgeworCXUzMiBjYl9zdHJ1Y3Q7CisJdTMyIHN0YXRpY19kYXRhX3NpemU7CisJdTMyIGdsb2JhbF9kYXRhX3NpemU7CisJdTMyIHByb2dyYW1fbWVtX3NpemU7CisJdTMyIHV3Y19leGVjdXRpb25fdGltZTsKKwl1MzIgdXdjX3BlcmlvZDsKKwl1MzIgdXdjX2RlYWRsaW5lOworCXUzMiBhdmdfZXhlY3Rpb25fdGltZTsKKwl1MzIgbWluaW11bV9wZXJpb2Q7Cit9OworCisvKgorICogVGhlIGRzcF9zdHJlYW1jb25uZWN0IHN0cnVjdHVyZSBkZXNjcmliZXMgYSBzdHJlYW0gY29ubmVjdGlvbgorICogYmV0d2VlbiB0d28gbm9kZXMsIG9yIGJldHdlZW4gYSBub2RlIGFuZCB0aGUgR1BQCisgKi8KK3N0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCB7CisJdTMyIGNiX3N0cnVjdDsKKwllbnVtIGRzcF9jb25uZWN0dHlwZSBjb25uZWN0X3R5cGU7CisJdTMyIHRoaXNfbm9kZV9zdHJlYW1faW5kZXg7CisJdm9pZCAqY29ubmVjdGVkX25vZGU7CisJc3RydWN0IGRzcF91dWlkIHVpX2Nvbm5lY3RlZF9ub2RlX2lkOworCXUzMiBjb25uZWN0ZWRfbm9kZV9zdHJlYW1faW5kZXg7Cit9OworCitzdHJ1Y3QgZHNwX25vZGVwcm9mcyB7CisJdTMyIHVsX2hlYXBfc2l6ZTsKK307CisKKy8qIFRoZSBkc3BfbmRicHJvcHMgc3RydWN0dXJlIHJlcG9ydHMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub2RlICovCitzdHJ1Y3QgZHNwX25kYnByb3BzIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3BfdXVpZCB1aV9ub2RlX2lkOworCWNoYXIgYWNfbmFtZVtEU1BfTUFYTkFNRUxFTl07CisJZW51bSBub2RlX3R5cGUgbnR5cGU7CisJdTMyIGNhY2hlX29uX2dwcDsKKwlzdHJ1Y3QgZHNwX3Jlc291cmNlcmVxbXRzIGRzcF9yZXNvdXJjZV9yZXFtdHM7CisJczMyIHByaW87CisJdTMyIHN0YWNrX3NpemU7CisJdTMyIHN5c19zdGFja19zaXplOworCXUzMiBzdGFja19zZWc7CisJdTMyIG1lc3NhZ2VfZGVwdGg7CisJdTMyIG51bV9pbnB1dF9zdHJlYW1zOworCXUzMiBudW1fb3V0cHV0X3N0cmVhbXM7CisJdTMyIHV0aW1lb3V0OworCXUzMiBjb3VudF9wcm9maWxlczsJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9maWxlcyAqLworCS8qIEFycmF5IG9mIHByb2ZpbGVzICovCisJc3RydWN0IGRzcF9ub2RlcHJvZnMgbm9kZV9wcm9maWxlc1tNQVhfUFJPRklMRVNdOworCXUzMiBzdGFja19zZWdfbmFtZTsJLyogU3RhY2sgU2VnbWVudCBOYW1lICovCit9OworCisJLyogVGhlIGRzcF9ub2RlYXR0cmluIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYQorCSAqIG5vZGUgY2xpZW50ICovCitzdHJ1Y3QgZHNwX25vZGVhdHRyaW4geworCXUzMiBjYl9zdHJ1Y3Q7CisJczMyIHByaW87CisJdTMyIHV0aW1lb3V0OworCXUzMiBwcm9maWxlX2lkOworCS8qIFJlc2VydmVkLCBmb3IgQnJpZGdlIEludGVybmFsIHVzZSBvbmx5ICovCisJdTMyIGhlYXBfc2l6ZTsKKwl2b2lkICpwZ3BwX3ZpcnRfYWRkcjsJLyogUmVzZXJ2ZWQsIGZvciBCcmlkZ2UgSW50ZXJuYWwgdXNlIG9ubHkgKi8KK307CisKKwkvKiBUaGUgZHNwX25vZGVpbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisJICogYWJvdXQgYSBub2RlICovCitzdHJ1Y3QgZHNwX25vZGVpbmZvIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3BfbmRicHJvcHMgbmJfbm9kZV9kYXRhYmFzZV9wcm9wczsKKwl1MzIgZXhlY3V0aW9uX3ByaW9yaXR5OworCWVudW0gbm9kZV9zdGF0ZSBuc19leGVjdXRpb25fc3RhdGU7CisJdm9pZCAqZGV2aWNlX293bmVyOworCXUzMiBudW1iZXJfc3RyZWFtczsKKwlzdHJ1Y3QgZHNwX3N0cmVhbWNvbm5lY3Qgc2Nfc3RyZWFtX2Nvbm5lY3Rpb25bMTZdOworCXUzMiBub2RlX2VudjsKK307CisKKwkvKiBUaGUgZHNwX25vZGVhdHRyIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub2RlICovCitzdHJ1Y3QgZHNwX25vZGVhdHRyIHsKKwl1MzIgY2Jfc3RydWN0OworCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBpbl9ub2RlX2F0dHJfaW47CisJdTMyIG5vZGVfYXR0cl9pbnB1dHM7CisJdTMyIG5vZGVfYXR0cl9vdXRwdXRzOworCXN0cnVjdCBkc3Bfbm9kZWluZm8gbm9kZV9pbmZvOworfTsKKworLyoKKyAqICBOb3RpZmljYXRpb24gdHlwZTogZWl0aGVyIHRoZSBuYW1lIG9mIGFuIG9wZW5lZCBldmVudCwgb3IgYW4gZXZlbnQgb3IKKyAqICB3aW5kb3cgaGFuZGxlLgorICovCitzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiB7CisJY2hhciAqcHNfbmFtZTsKKwl2b2lkICpoYW5kbGU7Cit9OworCisvKiBUaGUgZHNwX3Byb2Nlc3NvcmF0dHJpbiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcHJvY2Vzc29yICovCitzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJpbiB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgdXRpbWVvdXQ7Cit9OworLyoKKyAqIFRoZSBkc3BfcHJvY2Vzc29yaW5mbyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGJhc2ljIGNhcGFiaWxpdGllcyBvZiBhCisgKiBEU1AgcHJvY2Vzc29yCisgKi8KK3N0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwlpbnQgcHJvY2Vzc29yX2ZhbWlseTsKKwlpbnQgcHJvY2Vzc29yX3R5cGU7CisJdTMyIGNsb2NrX3JhdGU7CisJdTMyIHVsX2ludGVybmFsX21lbV9zaXplOworCXUzMiB1bF9leHRlcm5hbF9tZW1fc2l6ZTsKKwl1MzIgcHJvY2Vzc29yX2lkOworCWludCB0eV9ydW5uaW5nX3J0b3M7CisJczMyIG5vZGVfbWluX3ByaW9yaXR5OworCXMzMiBub2RlX21heF9wcmlvcml0eTsKK307CisKKy8qIEVycm9yIGluZm9ybWF0aW9uIG9mIGxhc3QgRFNQIGV4Y2VwdGlvbiBzaWduYWxsZWQgdG8gdGhlIEdQUCAqLworc3RydWN0IGRzcF9lcnJvcmluZm8geworCXUzMiBkd19lcnJfbWFzazsKKwl1MzIgZHdfdmFsMTsKKwl1MzIgZHdfdmFsMjsKKwl1MzIgZHdfdmFsMzsKK307CisKKy8qIFRoZSBkc3BfcHJvY2Vzc29yc3RhdGUgc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgYSBEU1AgcHJvY2Vzc29yICovCitzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHsKKwl1MzIgY2Jfc3RydWN0OworCWVudW0gZHNwX3Byb2NzdGF0ZSBwcm9jX3N0YXRlOworfTsKKworLyoKKyAqIFRoZSBkc3BfcmVzb3VyY2VpbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IGEKKyAqIHByb2Nlc3NvcidzIHJlc291cmNlcworICovCitzdHJ1Y3QgZHNwX3Jlc291cmNlaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwllbnVtIGRzcF9yZXNvdXJjZWluZm90eXBlIHJlc291cmNlX3R5cGU7CisJdW5pb24geworCQl1MzIgdWxfcmVzb3VyY2U7CisJCXN0cnVjdCBkc3BfbWVtc3RhdCBtZW1fc3RhdDsKKwkJc3RydWN0IGRzcF9wcm9jbG9hZHN0YXQgcHJvY19sb2FkX3N0YXQ7CisJfSByZXN1bHQ7Cit9OworCisvKgorICogVGhlIGRzcF9zdHJlYW1hdHRyaW4gc3RydWN0dXJlIGRlc2NyaWJlcyB0aGUgYXR0cmlidXRlcyBvZiBhIHN0cmVhbSwKKyAqIGluY2x1ZGluZyBzZWdtZW50IGFuZCBhbGlnbm1lbnQgb2YgZGF0YSBidWZmZXJzIGFsbG9jYXRlZCB3aXRoCisgKiBEU1BTdHJlYW1fQWxsb2NhdGVCdWZmZXJzKCksIGlmIGFwcGxpY2FibGUKKyAqLworc3RydWN0IGRzcF9zdHJlYW1hdHRyaW4geworCXUzMiBjYl9zdHJ1Y3Q7CisJdTMyIHV0aW1lb3V0OworCXUzMiBzZWdtZW50X2lkOworCXUzMiBidWZfYWxpZ25tZW50OworCXUzMiBudW1fYnVmczsKKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CisJdTMyIHVkbWFfY2hubF9pZDsKKwl1MzIgdWRtYV9wcmlvcml0eTsKK307CisKKy8qIFRoZSBkc3BfYnVmZmVyYXR0ciBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgZGF0YSBidWZmZXIgKi8KK3N0cnVjdCBkc3BfYnVmZmVyYXR0ciB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgc2VnbWVudF9pZDsKKwl1MzIgYnVmX2FsaWdubWVudDsKK307CisKKy8qCisgKiAgVGhlIGRzcF9zdHJlYW1pbmZvIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgKiAgYWJvdXQgYSBzdHJlYW0uCisgKi8KK3N0cnVjdCBkc3Bfc3RyZWFtaW5mbyB7CisJdTMyIGNiX3N0cnVjdDsKKwl1MzIgbnVtYmVyX2J1ZnNfYWxsb3dlZDsKKwl1MzIgbnVtYmVyX2J1ZnNfaW5fc3RyZWFtOworCXUzMiB1bF9udW1iZXJfYnl0ZXM7CisJdm9pZCAqc3luY19vYmplY3RfaGFuZGxlOworCWVudW0gZHNwX3N0cmVhbXN0YXRlIHNzX3N0cmVhbV9zdGF0ZTsKK307CisKKy8qIERNTSBNQVAgYXR0cmlidXRlcworSXQgaXMgYSBiaXQgbWFzayB3aXRoIGVhY2ggYml0IHZhbHVlIGluZGljYXRpbmcgYSBzcGVjaWZpYyBhdHRyaWJ1dGUKK2JpdCAwIC0gR1BQIGFkZHJlc3MgdHlwZSAodXNlciB2aXJ0dWFsPTAsIHBoeXNpY2FsPTEpCitiaXQgMSAtIE1NVSBFbmRpYW5pc20gKEJpZyBFbmRpYW49MSwgTGl0dGxlIEVuZGlhbj0wKQorYml0IDIgLSBNTVUgbWl4ZWQgcGFnZSBhdHRyaWJ1dGUgKE1peGVkLyBDUFVFUz0xLCBUTEJFUyA9MCkKK2JpdCAzIC0gTU1VIGVsZW1lbnQgc2l6ZSA9IDhiaXQgKHZhbGlkIG9ubHkgZm9yIG5vbiBtaXhlZCBwYWdlIGVudHJpZXMpCitiaXQgNCAtIE1NVSBlbGVtZW50IHNpemUgPSAxNmJpdCAodmFsaWQgb25seSBmb3Igbm9uIG1peGVkIHBhZ2UgZW50cmllcykKK2JpdCA1IC0gTU1VIGVsZW1lbnQgc2l6ZSA9IDMyYml0ICh2YWxpZCBvbmx5IGZvciBub24gbWl4ZWQgcGFnZSBlbnRyaWVzKQorYml0IDYgLSBNTVUgZWxlbWVudCBzaXplID0gNjRiaXQgKHZhbGlkIG9ubHkgZm9yIG5vbiBtaXhlZCBwYWdlIGVudHJpZXMpCisKK2JpdCAxNCAtIElucHV0IChyZWFkIG9ubHkpIGJ1ZmZlcgorYml0IDE1IC0gT3V0cHV0ICh3cml0ZWFibGUpIGJ1ZmZlcgorKi8KKworLyogVHlwZXMgb2YgbWFwcGluZyBhdHRyaWJ1dGVzICovCisKKy8qIE1QVSBhZGRyZXNzIGlzIHZpcnR1YWwgYW5kIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgdG8gcGh5c2ljYWwgYWRkciAqLworI2RlZmluZSBEU1BfTUFQVklSVFVBTEFERFIgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBEU1BfTUFQUEhZU0lDQUxBRERSICAgICAgICAgMHgwMDAwMDAwMQorCisvKiBNYXBwZWQgZGF0YSBpcyBiaWcgZW5kaWFuICovCisjZGVmaW5lIERTUF9NQVBCSUdFTkRJQU4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERTUF9NQVBMSVRUTEVFTkRJQU4gICAgICAgICAweDAwMDAwMDAwCisKKy8qIEVsZW1lbnQgc2l6ZSBpcyBiYXNlZCBvbiBEU1Agci93IGFjY2VzcyBzaXplICovCisjZGVmaW5lIERTUF9NQVBNSVhFREVMRU1TSVpFICAgICAgICAweDAwMDAwMDA0CisKKy8qCisgKiBFbGVtZW50IHNpemUgZm9yIE1NVSBtYXBwaW5nICg4LCAxNiwgMzIsIG9yIDY0IGJpdCkKKyAqIElnbm9yZWQgaWYgRFNQX01BUE1JWEVERUxFTVNJWkUgZW5hYmxlZAorICovCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTggICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTE2ICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTMyICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIERTUF9NQVBFTEVNU0laRTY0ICAgICAgICAgICAweDAwMDAwMDQwCisKKyNkZWZpbmUgRFNQX01BUFZNQUxMT0NBRERSICAgICAgICAgMHgwMDAwMDA4MAorCisjZGVmaW5lIERTUF9NQVBET05PVExPQ0sJICAgMHgwMDAwMDEwMAorCisjZGVmaW5lIERTUF9NQVBfRElSX01BU0sJCTB4M0ZGRgorCisjZGVmaW5lIEdFTV9DQUNIRV9MSU5FX1NJWkUgICAgIDEyOAorI2RlZmluZSBHRU1fTDFQX1BSRUZFVENIX1NJWkUgICAxMjgKKworLyoKKyAqIERlZmluaXRpb25zIGZyb20gZGJyZWcuaAorICovCisKKyNkZWZpbmUgRFNQUFJPQ1RZUEVfQzY0CQk2NDEwCisjZGVmaW5lIElWQVBST0NUWVBFX0FSTTcJNDcwCisKKyNkZWZpbmUgUkVHX01HUl9PQkpFQ1QJMQorI2RlZmluZSBSRUdfRFJWX09CSkVDVAkyCisKKy8qIHJlZ2lzdHJ5ICovCisjZGVmaW5lIERSVk9CSkVDVAkiRHJ2T2JqZWN0IgorI2RlZmluZSBNR1JPQkpFQ1QJIk1nck9iamVjdCIKKworLyogTWF4IHJlZ2lzdHJ5IHBhdGggbGVuZ3RoLiBBbHNvIHRoZSBtYXggcmVnaXN0cnkgdmFsdWUgbGVuZ3RoLiAqLworI2RlZmluZSBNQVhSRUdQQVRITEVOR1RICTI1NQorCisjZW5kaWYgLyogREJERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RibGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ZmI5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxkZWZzLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBkYmxkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEQkxERUZTXworI2RlZmluZSBEQkxERUZTXworCisvKgorICogIEJpdCBtYXNrcyBmb3IgZGJsX2ZsYWdzLgorICovCisjZGVmaW5lIERCTF9OT0xPQUQgICAweDAJLyogRG9uJ3QgbG9hZCBzeW1ib2xzLCBjb2RlLCBvciBkYXRhICovCisjZGVmaW5lIERCTF9TWU1CICAgICAweDEJLyogbG9hZCBzeW1ib2xzICovCisjZGVmaW5lIERCTF9DT0RFICAgICAweDIJLyogbG9hZCBjb2RlICovCisjZGVmaW5lIERCTF9EQVRBICAgICAweDQJLyogbG9hZCBkYXRhICovCisjZGVmaW5lIERCTF9EWU5BTUlDICAweDgJLyogZHluYW1pYyBsb2FkICovCisjZGVmaW5lIERCTF9CU1MgICAgICAweDIwCS8qIFVuaXRpYWxpemVkIHNlY3Rpb24gKi8KKworI2RlZmluZSBEQkxfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKworLyoKKyAqICA9PT09PT09PSBkYmxfZmxhZ3MgPT09PT09PT0KKyAqICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIGNvZGUsIGRhdGEsIG9yIHN5bWJvbHMKKyAqLwordHlwZWRlZiBzMzIgZGJsX2ZsYWdzOworCisvKgorICogID09PT09PT09IGRibF9zZWN0X2luZm8gPT09PT09PT0KKyAqICBGb3IgY29sbGVjdGluZyBpbmZvIG9uIG92ZXJsYXkgc2VjdGlvbnMKKyAqLworc3RydWN0IGRibF9zZWN0X2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG5hbWUgb2Ygc2VjdGlvbiAqLworCXUzMiBzZWN0X3J1bl9hZGRyOwkvKiBydW4gYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfbG9hZF9hZGRyOwkvKiBsb2FkIGFkZHJlc3Mgb2Ygc2VjdGlvbiAqLworCXUzMiBzaXplOwkJLyogc2l6ZSBvZiBzZWN0aW9uICh0YXJnZXQgTUFVcykgKi8KKwlkYmxfZmxhZ3MgdHlwZTsJCS8qIENvZGUsIGRhdGEsIG9yIEJTUyAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBkYmxfc3ltYm9sID09PT09PT09CisgKiAgKE5lZWRlZCBmb3IgZHluYW1pYyBsb2FkIGxpYnJhcnkpCisgKi8KK3N0cnVjdCBkYmxfc3ltYm9sIHsKKwl1MzIgdmFsdWU7Cit9OworCisvKgorICogID09PT09PT09IGRibF9hbGxvY19meG4gPT09PT09PT0KKyAqICBBbGxvY2F0ZSBtZW1vcnkgZnVuY3Rpb24uICBBbGxvY2F0ZSBvciByZXNlcnZlIChpZiByZXNlcnZlZCA9PSBUUlVFKQorICogICJzaXplIiBieXRlcyBvZiBtZW1vcnkgZnJvbSBzZWdtZW50ICJzcGFjZSIgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBpbgorICogICpkc3BfYWRkcmVzcyAob3Igc3RhcnRpbmcgYXQgKmRzcF9hZGRyZXNzIGlmIHJlc2VydmUgPT0gVFJVRSkuIFJldHVybnMgMCBvbgorICogIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwordHlwZWRlZiBzMzIoKmRibF9hbGxvY19meG4pICh2b2lkICpoZGwsIHMzMiBzcGFjZSwgdTMyIHNpemUsIHUzMiBhbGlnbiwKKwkJCSAgICAgdTMyICpkc3BfYWRkcmVzcywgczMyIHNlZ19pZCwgczMyIHJlcSwKKwkJCSAgICAgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsX2ZyZWVfZnhuID09PT09PT09CisgKiAgRnJlZSBtZW1vcnkgZnVuY3Rpb24uICBGcmVlLCBvciB1bnJlc2VydmUgKGlmIHJlc2VydmVkID09IFRSVUUpICJzaXplIgorICogIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNlZ21lbnQgInNwYWNlIgorICovCit0eXBlZGVmIGJvb2woKmRibF9mcmVlX2Z4bikgKHZvaWQgKmhkbCwgdTMyIGFkZHIsIHMzMiBzcGFjZSwgdTMyIHNpemUsCisJCQkgICAgIGJvb2wgcmVzZXJ2ZWQpOworCisvKgorICogID09PT09PT09IGRibF9sb2dfd3JpdGVfZnhuID09PT09PT09CisgKiAgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRpbmcgZGF0YSBmcm9tIGEgc2VjdGlvbiwgdG8gbG9nIHRoZSBpbmZvLgorICogIENhbiBiZSBOVUxMIGlmIG5vIGxvZ2dpbmcgaXMgcmVxdWlyZWQuCisgKi8KK3R5cGVkZWYgaW50KCpkYmxfbG9nX3dyaXRlX2Z4bikgKHZvaWQgKmhhbmRsZSwKKwkJCQkJc3RydWN0IGRibF9zZWN0X2luZm8gKnNlY3QsIHUzMiBhZGRyLAorCQkJCQl1MzIgYnl0ZXMpOworCisvKgorICogID09PT09PT09IGRibF9zeW1fbG9va3VwID09PT09PT09CisgKiAgU3ltYm9sIGxvb2t1cCBmdW5jdGlvbiAtIEZpbmQgdGhlIHN5bWJvbCBuYW1lIGFuZCByZXR1cm4gaXRzIHZhbHVlLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoYW5kbGUgICAgICAgICAgLSBPcGFxdWUgaGFuZGxlCisgKiAgICAgIHBhcmcgICAgICAgICAgICAtIE9wYXF1ZSBhcmd1bWVudC4KKyAqICAgICAgbmFtZSAgICAgICAgICAgIC0gTmFtZSBvZiBzeW1ib2wgdG8gbG9va3VwLgorICogICAgICBzeW0gICAgICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBhZGRyZXNzIG9mIHN5bWJvbCBzdHJ1Y3R1cmUuCisgKgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzIChzeW1ib2wgd2FzIGZvdW5kKS4KKyAqICAgICAgRkFMU0U6ICAgICAgICAgIEZhaWxlZCB0byBmaW5kIHN5bWJvbC4KKyAqLwordHlwZWRlZiBib29sKCpkYmxfc3ltX2xvb2t1cCkgKHZvaWQgKmhhbmRsZSwgdm9pZCAqcGFyZywgdm9pZCAqcm1tX2hhbmRsZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGJsX3N5bWJvbCAqKiBzeW0pOworCisvKgorICogID09PT09PT09IGRibF93cml0ZV9meG4gPT09PT09PT0KKyAqICBXcml0ZSBtZW1vcnkgZnVuY3Rpb24uICBXcml0ZSAibiIgSE9TVCBieXRlcyBvZiBtZW1vcnkgdG8gc2VnbWVudCAibXR5cGUiCisgKiAgc3RhcnRpbmcgYXQgYWRkcmVzcyAiZHNwX2FkZHJlc3MiIGZyb20gdGhlIGJ1ZmZlciAiYnVmIi4gIFRoZSBidWZmZXIgaXMKKyAqICBmb3JtYXR0ZWQgYXMgYW4gYXJyYXkgb2Ygd29yZHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBEU1AuCisgKi8KK3R5cGVkZWYgczMyKCpkYmxfd3JpdGVfZnhuKSAodm9pZCAqaGRsLCB1MzIgZHNwX2FkZHJlc3MsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgdTMyIG4sIHMzMiBtdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsX2F0dHJzID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxfYXR0cnMgeworCWRibF9hbGxvY19meG4gYWxsb2M7CisJZGJsX2ZyZWVfZnhuIGZyZWU7CisJdm9pZCAqcm1tX2hhbmRsZTsJLyogSGFuZGxlIHRvIHBhc3MgdG8gYWxsb2MsIGZyZWUgZnVuY3Rpb25zICovCisJZGJsX3dyaXRlX2Z4biB3cml0ZTsKKwl2b2lkICppbnB1dF9wYXJhbXM7CS8qIEhhbmRsZSB0byBwYXNzIHRvIHdyaXRlLCBjaW5pdCBmdW5jdGlvbiAqLworCisJZGJsX2xvZ193cml0ZV9meG4gbG9nX3dyaXRlOworCXZvaWQgKmxvZ193cml0ZV9oYW5kbGU7CisKKwkvKiBTeW1ib2wgbWF0Y2hpbmcgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0ICovCisJZGJsX3N5bV9sb29rdXAgc3ltX2xvb2t1cDsKKwl2b2lkICpzeW1faGFuZGxlOworCXZvaWQgKnN5bV9hcmc7CisKKwkvKgorCSAqICBUaGVzZSBmaWxlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUKKwkgKiAgIkMiIHJ1biB0aW1lIGxpYnJhcnkgZnVuY3Rpb25zIG9mIHRoZSBzYW1lIG5hbWUuCisJICovCisJIHMzMigqZnJlYWQpICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB2b2lkICopOworCSBzMzIoKmZzZWVrKSAodm9pZCAqLCBsb25nLCBpbnQpOworCSBzMzIoKmZ0ZWxsKSAodm9pZCAqKTsKKwkgczMyKCpmY2xvc2UpICh2b2lkICopOworCXZvaWQgKigqZm9wZW4pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cit9OworCisjZW5kaWYgLyogREJMREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTg2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGJsbC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBkYmxsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogIERTUC9CSU9TIEJyaWRnZSBEeW5hbWljIGxvYWQgbGlicmFyeSBtb2R1bGUgaW50ZXJmYWNlLiBGdW5jdGlvbiBoZWFkZXIKKyAqICBjb21tZW50cyBhcmUgaW4gdGhlIGZpbGUgZGJsbGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCTExfCisjZGVmaW5lIERCTExfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGxkZWZzLmg+CisKK2V4dGVybiBib29sIHN5bWJvbHNfcmVsb2FkZWQ7CisKK2V4dGVybiB2b2lkIGRibGxfY2xvc2Uoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYik7CitleHRlcm4gaW50IGRibGxfY3JlYXRlKHN0cnVjdCBkYmxsX3Rhcl9vYmogKip0YXJnZXRfb2JqLAorCQkJICAgICAgc3RydWN0IGRibGxfYXR0cnMgKnBhdHRycyk7CitleHRlcm4gdm9pZCBkYmxsX2RlbGV0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpOworZXh0ZXJuIHZvaWQgZGJsbF9leGl0KHZvaWQpOworZXh0ZXJuIGJvb2wgZGJsbF9nZXRfYWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCBjaGFyICpuYW1lLAorCQkJICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3ZhbCk7CitleHRlcm4gdm9pZCBkYmxsX2dldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsCisJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKTsKK2V4dGVybiBib29sIGRibGxfZ2V0X2NfYWRkcihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCBjaGFyICpuYW1lLAorCQkJICAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKK2V4dGVybiBpbnQgZGJsbF9nZXRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLAorCQkJCXUzMiAqcGFkZHIsIHUzMiAqcHNpemUpOworZXh0ZXJuIGJvb2wgZGJsbF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBkYmxsX2xvYWQoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCSAgICBkYmxsX2ZsYWdzIGZsYWdzLAorCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycywgdTMyICogZW50cnkpOworZXh0ZXJuIGludCBkYmxsX2xvYWRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLAorCQkJCSBjaGFyICpzZWNfbmFtZSwgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzKTsKK2V4dGVybiBpbnQgZGJsbF9vcGVuKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwKKwkJCSAgICBkYmxsX2ZsYWdzIGZsYWdzLAorCQkgICAgICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfb2JqKTsKK2V4dGVybiBpbnQgZGJsbF9yZWFkX3NlY3Qoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkgY2hhciAqbmFtZSwgY2hhciAqYnVmLCB1MzIgc2l6ZSk7CitleHRlcm4gdm9pZCBkYmxsX3NldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsCisJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKTsKK2V4dGVybiB2b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CitleHRlcm4gaW50IGRibGxfdW5sb2FkX3NlY3Qoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkgICBjaGFyICpzZWN0X25hbWUsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorYm9vbCBkYmxsX2ZpbmRfZHNwX3N5bWJvbChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCB1MzIgYWRkcmVzcywKKwkJdTMyIG9mZnNldF9yYW5nZSwgdTMyICpzeW1fYWRkcl9vdXRwdXQsIGNoYXIgKm5hbWVfb3V0cHV0KTsKKyNlbmRpZgorCisjZW5kaWYgLyogREJMTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RibGxkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiNGZkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kYmxsZGVmcy5oCkBAIC0wLDAgKzEsNDk2IEBACisvKgorICogZGJsbGRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERCTExERUZTXworI2RlZmluZSBEQkxMREVGU18KKworLyoKKyAqICBCaXQgbWFza3MgZm9yIGRibF9mbGFncy4KKyAqLworI2RlZmluZSBEQkxMX05PTE9BRCAgIDB4MAkvKiBEb24ndCBsb2FkIHN5bWJvbHMsIGNvZGUsIG9yIGRhdGEgKi8KKyNkZWZpbmUgREJMTF9TWU1CICAgICAweDEJLyogbG9hZCBzeW1ib2xzICovCisjZGVmaW5lIERCTExfQ09ERSAgICAgMHgyCS8qIGxvYWQgY29kZSAqLworI2RlZmluZSBEQkxMX0RBVEEgICAgIDB4NAkvKiBsb2FkIGRhdGEgKi8KKyNkZWZpbmUgREJMTF9EWU5BTUlDICAweDgJLyogZHluYW1pYyBsb2FkICovCisjZGVmaW5lIERCTExfQlNTICAgICAgMHgyMAkvKiBVbml0aWFsaXplZCBzZWN0aW9uICovCisKKyNkZWZpbmUgREJMTF9NQVhQQVRITEVOR1RIICAgICAgIDI1NQorCisvKgorICogID09PT09PT09IERCTExfVGFyZ2V0ID09PT09PT09CisgKgorICovCitzdHJ1Y3QgZGJsbF90YXJfb2JqOworCisvKgorICogID09PT09PT09IGRibGxfZmxhZ3MgPT09PT09PT0KKyAqICBTcGVjaWZpZXMgd2hldGhlciB0byBsb2FkIGNvZGUsIGRhdGEsIG9yIHN5bWJvbHMKKyAqLwordHlwZWRlZiBzMzIgZGJsbF9mbGFnczsKKworLyoKKyAqICA9PT09PT09PSBEQkxMX0xpYnJhcnkgPT09PT09PT0KKyAqCisgKi8KK3N0cnVjdCBkYmxsX2xpYnJhcnlfb2JqOworCisvKgorICogID09PT09PT09IGRibGxfc2VjdF9pbmZvID09PT09PT09CisgKiAgRm9yIGNvbGxlY3RpbmcgaW5mbyBvbiBvdmVybGF5IHNlY3Rpb25zCisgKi8KK3N0cnVjdCBkYmxsX3NlY3RfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogbmFtZSBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfcnVuX2FkZHI7CS8qIHJ1biBhZGRyZXNzIG9mIHNlY3Rpb24gKi8KKwl1MzIgc2VjdF9sb2FkX2FkZHI7CS8qIGxvYWQgYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNpemU7CQkvKiBzaXplIG9mIHNlY3Rpb24gKHRhcmdldCBNQVVzKSAqLworCWRibGxfZmxhZ3MgdHlwZTsJLyogQ29kZSwgZGF0YSwgb3IgQlNTICovCit9OworCisvKgorICogID09PT09PT09IGRibGxfc3ltX3ZhbCA9PT09PT09PQorICogIChOZWVkZWQgZm9yIGR5bmFtaWMgbG9hZCBsaWJyYXJ5KQorICovCitzdHJ1Y3QgZGJsbF9zeW1fdmFsIHsKKwl1MzIgdmFsdWU7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfYWxsb2NfZnhuID09PT09PT09CisgKiAgQWxsb2NhdGUgbWVtb3J5IGZ1bmN0aW9uLiAgQWxsb2NhdGUgb3IgcmVzZXJ2ZSAoaWYgcmVzZXJ2ZWQgPT0gVFJVRSkKKyAqICAic2l6ZSIgYnl0ZXMgb2YgbWVtb3J5IGZyb20gc2VnbWVudCAic3BhY2UiIGFuZCByZXR1cm4gdGhlIGFkZHJlc3MgaW4KKyAqICAqZHNwX2FkZHJlc3MgKG9yIHN0YXJ0aW5nIGF0ICpkc3BfYWRkcmVzcyBpZiByZXNlcnZlID09IFRSVUUpLiBSZXR1cm5zIDAgb24KKyAqICBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX2FsbG9jX2Z4bikgKHZvaWQgKmhkbCwgczMyIHNwYWNlLCB1MzIgc2l6ZSwgdTMyIGFsaWduLAorCQkJICAgICAgdTMyICpkc3BfYWRkcmVzcywgczMyIHNlZ19pZCwgczMyIHJlcSwKKwkJCSAgICAgIGJvb2wgcmVzZXJ2ZWQpOworCisvKgorICogID09PT09PT09IGRibGxfY2xvc2VfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX2ZfY2xvc2VfZnhuKSAodm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2ZyZWVfZnhuID09PT09PT09CisgKiAgRnJlZSBtZW1vcnkgZnVuY3Rpb24uICBGcmVlLCBvciB1bnJlc2VydmUgKGlmIHJlc2VydmVkID09IFRSVUUpICJzaXplIgorICogIGJ5dGVzIG9mIG1lbW9yeSBmcm9tIHNlZ21lbnQgInNwYWNlIgorICovCit0eXBlZGVmIGJvb2woKmRibGxfZnJlZV9meG4pICh2b2lkICpoZGwsIHUzMiBhZGRyLCBzMzIgc3BhY2UsIHUzMiBzaXplLAorCQkJICAgICAgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9mX29wZW5fZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgdm9pZCAqKCpkYmxsX2Zfb3Blbl9meG4pIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2dfd3JpdGVfZnhuID09PT09PT09CisgKiAgRnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRpbmcgZGF0YSBmcm9tIGEgc2VjdGlvbiwgdG8gbG9nIHRoZSBpbmZvLgorICogIENhbiBiZSBOVUxMIGlmIG5vIGxvZ2dpbmcgaXMgcmVxdWlyZWQuCisgKi8KK3R5cGVkZWYgaW50KCpkYmxsX2xvZ193cml0ZV9meG4pICh2b2lkICpoYW5kbGUsCisJCQkJCSBzdHJ1Y3QgZGJsbF9zZWN0X2luZm8gKnNlY3QsIHUzMiBhZGRyLAorCQkJCQkgdTMyIGJ5dGVzKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3JlYWRfZnhuKSAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3NlZWtfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3NlZWtfZnhuKSAodm9pZCAqLCBsb25nLCBpbnQpOworCisvKgorICogID09PT09PT09IGRibGxfc3ltX2xvb2t1cCA9PT09PT09PQorICogIFN5bWJvbCBsb29rdXAgZnVuY3Rpb24gLSBGaW5kIHRoZSBzeW1ib2wgbmFtZSBhbmQgcmV0dXJuIGl0cyB2YWx1ZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGFuZGxlICAgICAgICAgIC0gT3BhcXVlIGhhbmRsZQorICogICAgICBwYXJnICAgICAgICAgICAgLSBPcGFxdWUgYXJndW1lbnQuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc3ltYm9sIHRvIGxvb2t1cC4KKyAqICAgICAgc3ltICAgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgYWRkcmVzcyBvZiBzeW1ib2wgc3RydWN0dXJlLgorICoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFOiAgICAgICAgICAgU3VjY2VzcyAoc3ltYm9sIHdhcyBmb3VuZCkuCisgKiAgICAgIEZBTFNFOiAgICAgICAgICBGYWlsZWQgdG8gZmluZCBzeW1ib2wuCisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9zeW1fbG9va3VwKSAodm9pZCAqaGFuZGxlLCB2b2lkICpwYXJnLCB2b2lkICpybW1faGFuZGxlLAorCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkYmxsX3N5bV92YWwgKiogc3ltKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3RlbGxfZnhuID09PT09PT09CisgKi8KK3R5cGVkZWYgczMyKCpkYmxsX3RlbGxfZnhuKSAodm9pZCAqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3dyaXRlX2Z4biA9PT09PT09PQorICogIFdyaXRlIG1lbW9yeSBmdW5jdGlvbi4gIFdyaXRlICJuIiBIT1NUIGJ5dGVzIG9mIG1lbW9yeSB0byBzZWdtZW50ICJtdHlwZSIKKyAqICBzdGFydGluZyBhdCBhZGRyZXNzICJkc3BfYWRkcmVzcyIgZnJvbSB0aGUgYnVmZmVyICJidWYiLiAgVGhlIGJ1ZmZlciBpcworICogIGZvcm1hdHRlZCBhcyBhbiBhcnJheSBvZiB3b3JkcyBhcHByb3ByaWF0ZSBmb3IgdGhlIERTUC4KKyAqLwordHlwZWRlZiBzMzIoKmRibGxfd3JpdGVfZnhuKSAodm9pZCAqaGRsLCB1MzIgZHNwX2FkZHJlc3MsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHUzMiBuLCBzMzIgbXR5cGUpOworCisvKgorICogID09PT09PT09IGRibGxfYXR0cnMgPT09PT09PT0KKyAqLworc3RydWN0IGRibGxfYXR0cnMgeworCWRibGxfYWxsb2NfZnhuIGFsbG9jOworCWRibGxfZnJlZV9meG4gZnJlZTsKKwl2b2lkICpybW1faGFuZGxlOwkvKiBIYW5kbGUgdG8gcGFzcyB0byBhbGxvYywgZnJlZSBmdW5jdGlvbnMgKi8KKwlkYmxsX3dyaXRlX2Z4biB3cml0ZTsKKwl2b2lkICppbnB1dF9wYXJhbXM7CS8qIEhhbmRsZSB0byBwYXNzIHRvIHdyaXRlLCBjaW5pdCBmdW5jdGlvbiAqLworCWJvb2wgYmFzZV9pbWFnZTsKKwlkYmxsX2xvZ193cml0ZV9meG4gbG9nX3dyaXRlOworCXZvaWQgKmxvZ193cml0ZV9oYW5kbGU7CisKKwkvKiBTeW1ib2wgbWF0Y2hpbmcgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0ICovCisJZGJsbF9zeW1fbG9va3VwIHN5bV9sb29rdXA7CisJdm9pZCAqc3ltX2hhbmRsZTsKKwl2b2lkICpzeW1fYXJnOworCisJLyoKKwkgKiAgVGhlc2UgZmlsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggdGhlCisJICogICJDIiBydW4gdGltZSBsaWJyYXJ5IGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lLgorCSAqLworCSBzMzIoKmZyZWFkKSAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdm9pZCAqKTsKKwkgczMyKCpmc2VlaykgKHZvaWQgKiwgbG9uZywgaW50KTsKKwkgczMyKCpmdGVsbCkgKHZvaWQgKik7CisJIHMzMigqZmNsb3NlKSAodm9pZCAqKTsKKwl2b2lkICooKmZvcGVuKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworfTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Nsb3NlID09PT09PT09CisgKiAgQ2xvc2UgbGlicmFyeSBvcGVuZWQgd2l0aCBkYmxsX29wZW4uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9jbG9zZV9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGlicmFyeSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSB0YXJnZXQgb2JqZWN0LCBzcGVjaWZ5aW5nIHRoZSBhbGxvYywgZnJlZSwgYW5kIHdyaXRlIGZ1bmN0aW9ucy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXRfb2JqICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSB0YXJnZXQgaGFuZGxlIG9uIG91dHB1dC4KKyAqICAgICAgcGF0dHJzICAgICAgICAgIC0gQXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIHBhdHRycyAhPSBOVUxMLgorICogICAgICB0YXJnZXRfb2JqICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqICAgICAgU3VjY2VzczogICAgICAgICp0YXJnZXRfb2JqICE9IE5VTEwuCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICAqdGFyZ2V0X29iaiA9PSBOVUxMLgorICovCit0eXBlZGVmIGludCgqZGJsbF9jcmVhdGVfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqKnRhcmdldF9vYmosCisJCQkJICAgICAgc3RydWN0IGRibGxfYXR0cnMgKmF0dHJzKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2RlbGV0ZSA9PT09PT09PQorICogIERlbGV0ZSB0YXJnZXQgb2JqZWN0IGFuZCBmcmVlIHJlc291cmNlcyBmb3IgYW55IGxvYWRlZCBsaWJyYXJpZXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0ICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gREJMTF9DcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpkYmxsX2RlbGV0ZV9meG4pIChzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpOworCisvKgorICogID09PT09PT09IGRibGxfZXhpdCA9PT09PT09PQorICogIERpc2NvbnRpbnVlIHVzZSBvZiBEQkwgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcmVmcyA+IDAuCisgKiAgRW5zdXJlczoKKyAqICAgICAgcmVmcyA+PSAwLgorICovCit0eXBlZGVmIHZvaWQgKCpkYmxsX2V4aXRfZnhuKSAodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9nZXRfYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mIG5hbWUgaW4gdGhlIHNwZWNpZmllZCBsaWJyYXJ5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxfb3BlbigpLgorICogICAgICBuYW1lICAgICAgICAgICAgLSBOYW1lIG9mIHN5bWJvbAorICogICAgICBzeW1fdmFsICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBzeW1ib2wgYWRkcmVzcyBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRTogICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIEZBTFNFOiAgICAgICAgICBTeW1ib2wgbm90IGZvdW5kLgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGxpYnJhcnkuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgc3ltX3ZhbCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9nZXRfYWRkcl9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IGRibGxfc3ltX3ZhbCAqKnN5bV92YWwpOworCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2F0dHJzID09PT09PT09CisgKiAgUmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBEQkxMX0NyZWF0ZSgpLgorICogICAgICBwYXR0cnMgICAgICAgICAgLSBMb2NhdGlvbiB0byBzdG9yZSBhdHRyaWJ1dGVzIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9nZXRfYXR0cnNfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LAorCQkJCSAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2NfYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mICJDIiBuYW1lIG9uIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KKyAqICAgICAgbmFtZSAgICAgICAgICAgIC0gTmFtZSBvZiBzeW1ib2wKKyAqICAgICAgc3ltX3ZhbCAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc3ltYm9sIGFkZHJlc3Mgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgICAgICAgICBTdWNjZXNzLgorICogICAgICBGQUxTRTogICAgICAgICAgU3ltYm9sIG5vdCBmb3VuZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCB0YXJnZXQuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgc3ltX3ZhbCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9nZXRfY19hZGRyX2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9zZWN0ID09PT09PT09CisgKiAgR2V0IGFkZHJlc3MgYW5kIHNpemUgb2YgYSBuYW1lZCBzZWN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc2VjdGlvbi4KKyAqICAgICAgcGFkZHIgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc2VjdGlvbiBhZGRyZXNzIG9uIG91dHB1dC4KKyAqICAgICAgcHNpemUgICAgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgc2VjdGlvbiBzaXplIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOWElPOiAgICBTZWN0aW9uIG5vdCBmb3VuZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgcGFkZHIgIT0gTlVMTDsKKyAqICAgICAgcHNpemUgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9nZXRfc2VjdF9meG4pIChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLAorCQkJCQljaGFyICpuYW1lLCB1MzIgKiBhZGRyLCB1MzIgKiBzaXplKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIERCTCBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFOiAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgRkFMU0U6ICAgICAgICAgIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHJlZnMgPj0gMC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzOiAgICAgICAgcmVmcyA+IDAuCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICByZWZzID49IDAuCisgKi8KK3R5cGVkZWYgYm9vbCgqZGJsbF9pbml0X2Z4bikgKHZvaWQpOworCisvKgorICogID09PT09PT09IGRibGxfbG9hZCA9PT09PT09PQorICogIExvYWQgbGlicmFyeSBvbnRvIHRoZSB0YXJnZXQuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIGZsYWdzICAgICAgICAgICAtIExvYWQgY29kZSwgZGF0YSBhbmQvb3Igc3ltYm9scy4KKyAqICAgICAgYXR0cnMgICAgICAgICAgIC0gTWF5IGNvbnRhaW4gYWxsb2MsIGZyZWUsIGFuZCB3cml0ZSBmdW5jdGlvbi4KKyAqICAgICAgZW50cnlfcHQgICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgcHJvZ3JhbSBlbnRyeSBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FQkFERjogICAgIEZpbGUgcmVhZCBmYWlsZWQuCisgKiAgICAgIC1FSUxTRVE6ICAgRmFpbHVyZSBpbiBkeW5hbWljIGxvYWRlciBsaWJyYXJ5LgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIGxpYi4KKyAqICAgICAgZW50cnkgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9sb2FkX2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsCisJCQkJICAgIGRibGxfZmxhZ3MgZmxhZ3MsCisJCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycywgdTMyICplbnRyeSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2FkX3NlY3QgPT09PT09PT0KKyAqICBMb2FkIGEgbmFtZWQgc2VjdGlvbiBmcm9tIGFuIGxpYnJhcnkgKGZvciBvdmVybGF5IHN1cHBvcnQpLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIEhhbmRsZSByZXR1cm5lZCBmcm9tIGRibGxfb3BlbigpLgorICogICAgICBzZWNfbmFtZSAgICAgICAgLSBOYW1lIG9mIHNlY3Rpb24gdG8gbG9hZC4KKyAqICAgICAgYXR0cnMgICAgICAgICAgIC0gQ29udGFpbnMgd3JpdGUgZnVuY3Rpb24gYW5kIGhhbmRsZSB0byBwYXNzIHRvIGl0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRU5YSU86ICAgIFNlY3Rpb24gbm90IGZvdW5kLgorICogICAgICAtRU5PU1lTOiAgIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbGliLgorICogICAgICBzZWNfbmFtZSAhPSBOVUxMLgorICogICAgICBhdHRycyAhPSBOVUxMLgorICogICAgICBhdHRycy0+d3JpdGUgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZGJsbF9sb2FkX3NlY3RfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkJIGNoYXIgKnN6X3NlY3RfbmFtZSwKKwkJCQkJIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9vcGVuID09PT09PT09CisgKiAgZGJsbF9vcGVuKCkgcmV0dXJucyBhIGxpYnJhcnkgaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9hZC91bmxvYWQKKyAqICB0aGUgc3ltYm9scy9jb2RlL2RhdGEgdmlhIGRibGxfbG9hZCgpL2RibGxfdW5sb2FkKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0ICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9jcmVhdGUoKS4KKyAqICAgICAgZmlsZSAgICAgICAgICAgIC0gTmFtZSBvZiBmaWxlIHRvIG9wZW4uCisgKiAgICAgIGZsYWdzICAgICAgICAgICAtIElmIGZsYWdzICYgREJMTF9TWU1CLCBsb2FkIHN5bWJvbHMuCisgKiAgICAgIGxpYl9vYmogICAgICAgICAtIExvY2F0aW9uIHRvIHN0b3JlIGxpYnJhcnkgaGFuZGxlIG9uIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICogICAgICAtRUJBREY6ICAgICAgICAgRmlsZSBvcGVuL3JlYWQgZmFpbHVyZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuYWJsZSB0byBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERCTCBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICBmaWxlICE9IE5VTEwuCisgKiAgICAgIGxpYl9vYmogIT0gTlVMTC4KKyAqICAgICAgZGJsbF9hdHRycyBmb3BlbiBmdW5jdGlvbiBub24tTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzOiAgICAgICAgVmFsaWQgKmxpYl9vYmouCisgKiAgICAgIEZhaWx1cmU6ICAgICAgICAqbGliX29iaiA9PSBOVUxMLgorICovCit0eXBlZGVmIGludCgqZGJsbF9vcGVuX2Z4bikgKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwKKwkJCQkgICAgZGJsbF9mbGFncyBmbGFncywKKwkJCQkgICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfc2VjdCA9PT09PT09PQorICogIFJlYWQgQ09GRiBzZWN0aW9uIGludG8gYSBjaGFyYWN0ZXIgYnVmZmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxpYiAgICAgICAgICAgICAtIExpYnJhcnkgaGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIG5hbWUgICAgICAgICAgICAtIE5hbWUgb2Ygc2VjdGlvbi4KKyAqICAgICAgcGJ1ZiAgICAgICAgICAgIC0gQnVmZmVyIHRvIHdyaXRlIHNlY3Rpb24gY29udGVudHMgaW50by4KKyAqICAgICAgc2l6ZSAgICAgICAgICAgIC0gQnVmZmVyIHNpemUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOWElPOiAgICBOYW1lZCBzZWN0aW9uIGRvZXMgbm90IGV4aXN0cy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIG5hbWUgIT0gTlVMTC4KKyAqICAgICAgcGJ1ZiAhPSBOVUxMLgorICogICAgICBzaXplICE9IDAuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmRibGxfcmVhZF9zZWN0X2Z4bikgKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsCisJCQkJCSBjaGFyICpuYW1lLCBjaGFyICpjb250ZW50LAorCQkJCQkgdTMyIGNvbnRfc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9zZXRfYXR0cnMgPT09PT09PT0KKyAqICBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX2NyZWF0ZSgpLgorICogICAgICBwYXR0cnMgICAgICAgICAgLSBOZXcgYXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBEQkwgaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF9zZXRfYXR0cnNfZnhuKSAoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LAorCQkJCSAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCisvKgorICogID09PT09PT09IGRibGxfdW5sb2FkID09PT09PT09CisgKiAgVW5sb2FkIGxpYnJhcnkgbG9hZGVkIHdpdGggZGJsbF9sb2FkKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbGliICAgICAgICAgICAgIC0gSGFuZGxlIHJldHVybmVkIGZyb20gZGJsbF9vcGVuKCkuCisgKiAgICAgIGF0dHJzICAgICAgICAgICAtIENvbnRhaW5zIGZyZWUoKSBmdW5jdGlvbiBhbmQgaGFuZGxlIHRvIHBhc3MgdG8gaXQuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZGJsbF91bmxvYWRfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYnJhcnksCisJCQkJIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF91bmxvYWRfc2VjdCA9PT09PT09PQorICogIFVubG9hZCBhIG5hbWVkIHNlY3Rpb24gZnJvbSBhbiBsaWJyYXJ5IChmb3Igb3ZlcmxheSBzdXBwb3J0KS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsaWIgICAgICAgICAgICAgLSBIYW5kbGUgcmV0dXJuZWQgZnJvbSBkYmxsX29wZW4oKS4KKyAqICAgICAgc2VjX25hbWUgICAgICAgIC0gTmFtZSBvZiBzZWN0aW9uIHRvIGxvYWQuCisgKiAgICAgIGF0dHJzICAgICAgICAgICAtIENvbnRhaW5zIGZyZWUoKSBmdW5jdGlvbiBhbmQgaGFuZGxlIHRvIHBhc3MgdG8gaXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTlhJTzogICAgTmFtZWQgc2VjdGlvbiBub3QgZm91bmQuCisgKiAgICAgIC1FTk9TWVMKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREJMIGluaXRpYWxpemVkLgorICogICAgICBWYWxpZCBsaWIuCisgKiAgICAgIHNlY19uYW1lICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmRibGxfdW5sb2FkX3NlY3RfZnhuKSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwKKwkJCQkJICAgY2hhciAqc3pfc2VjdF9uYW1lLAorCQkJCQkgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpOworCitzdHJ1Y3QgZGJsbF9meG5zIHsKKwlkYmxsX2Nsb3NlX2Z4biBjbG9zZV9meG47CisJZGJsbF9jcmVhdGVfZnhuIGNyZWF0ZV9meG47CisJZGJsbF9kZWxldGVfZnhuIGRlbGV0ZV9meG47CisJZGJsbF9leGl0X2Z4biBleGl0X2Z4bjsKKwlkYmxsX2dldF9hdHRyc19meG4gZ2V0X2F0dHJzX2Z4bjsKKwlkYmxsX2dldF9hZGRyX2Z4biBnZXRfYWRkcl9meG47CisJZGJsbF9nZXRfY19hZGRyX2Z4biBnZXRfY19hZGRyX2Z4bjsKKwlkYmxsX2dldF9zZWN0X2Z4biBnZXRfc2VjdF9meG47CisJZGJsbF9pbml0X2Z4biBpbml0X2Z4bjsKKwlkYmxsX2xvYWRfZnhuIGxvYWRfZnhuOworCWRibGxfbG9hZF9zZWN0X2Z4biBsb2FkX3NlY3RfZnhuOworCWRibGxfb3Blbl9meG4gb3Blbl9meG47CisJZGJsbF9yZWFkX3NlY3RfZnhuIHJlYWRfc2VjdF9meG47CisJZGJsbF9zZXRfYXR0cnNfZnhuIHNldF9hdHRyc19meG47CisJZGJsbF91bmxvYWRfZnhuIHVubG9hZF9meG47CisJZGJsbF91bmxvYWRfc2VjdF9meG4gdW5sb2FkX3NlY3RfZnhuOworfTsKKworI2VuZGlmIC8qIERCTERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGVoZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RlaGRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY4YmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RlaGRlZnMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogZGVoZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluaXRpb24gZm9yIEJyaWRnZSBkcml2ZXIgbW9kdWxlIERFSC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERFSERFRlNfCisjZGVmaW5lIERFSERFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWJ4X3NoLmg+CS8qIHNoYXJlZCBtYWlsYm94IGNvZGVzICovCisKKy8qIERFSCBvYmplY3QgbWFuYWdlciAqLworc3RydWN0IGRlaF9tZ3I7CisKKy8qIE1hZ2ljIGNvZGUgdXNlZCB0byBkZXRlcm1pbmUgaWYgRFNQIHNpZ25hbGVkIGV4Y2VwdGlvbi4gKi8KKyNkZWZpbmUgREVIX0JBU0UgICAgICAgIE1CWF9ERUhfQkFTRQorI2RlZmluZSBERUhfVVNFUlNfQkFTRSAgTUJYX0RFSF9VU0VSU19CQVNFCisjZGVmaW5lIERFSF9MSU1JVCAgICAgICBNQlhfREVIX0xJTUlUCisKKyNlbmRpZiAvKiBfREVIREVGU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3NDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXYuaApAQCAtMCwwICsxLDcwMiBAQAorLyoKKyAqIGRldi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEJyaWRnZSBCcmlkZ2UgZHJpdmVyIGRldmljZSBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgREVWXworI2RlZmluZSBERVZfCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb2R1bGUgRGVwZW5kZW50IEhlYWRlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NvZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZWhkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisvKgorICogID09PT09PT09IGRldl9icmRfd3JpdGVfZnhuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRXhwb3J0ZWQgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcyB0aGUgQ09EIHdyaXRlIGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbgorICogICAgICBpcyBwYXNzZWQgYSBoYW5kbGUgdG8gYSBERVZfaE9iamVjdCBieSBaTCBpbiBhcmIsIHRoZW4gY2FsbHMgdGhlCisgKiAgICAgIGRldmljZSdzIGJyaWRnZV9icmRfd3JpdGUoKSBmdW5jdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBhcmI6ICAgICAgICAgICBIYW5kbGUgdG8gYSBEZXZpY2UgT2JqZWN0LgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJlc3Mgb24gRFNQIGJvYXJkIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChTb3VyY2UpLgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIE51bWJlciBvZiBieXRlcyB3cml0dGVuLiAgUmV0dXJucyAwIGlmIHRoZSBERVZfaE9iamVjdCBwYXNzZWQgaW4gdmlhCisgKiAgICAgIGFyYiBpcyBpbnZhbGlkLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIGhvc3RfYnVmICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRldl9icmRfd3JpdGVfZnhuKHZvaWQgKmFyYiwKKwkJCSAgICAgdTMyIGRzcF9hZGQsCisJCQkgICAgIHZvaWQgKmhvc3RfYnVmLCB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfY3JlYXRlX2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbGxlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBsb2FkIHRoZSBCcmlkZ2UgRHJpdmVyIGZvciBhCisgKiAgICAgICdCcmlkZ2UgZGV2aWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldmljZV9vYmo6ICAgICBQdHIgdG8gbG9jYXRpb24gdG8gcmVjZWl2ZSB0aGUgZGV2aWNlIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIGRyaXZlcl9maWxlX25hbWU6IE5hbWUgb2YgQnJpZGdlIGRyaXZlciBQRSBETEwgZmlsZSB0byBsb2FkLiAgSWYgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSBwYXRoIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZpbGUgaXMgbG9hZGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoICdCcmlkZ2UncyBtb2R1bGUgc2VhcmNoIHBhdGguCisgKiAgICAgIGhvc3RfY29uZmlnOiAgICBIb3N0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIHRvIGJlIHBhc3NlZCBkb3duCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgQnJpZGdlIGRyaXZlciB3aGVuIGJyaWRnZV9kZXZfY3JlYXRlKCkgaXMgY2FsbGVkLgorICogICAgICBwRHNwQ29uZmlnOiAgICAgRFNQIHJlc291cmNlcywgdG8gYmUgcGFzc2VkIGRvd24gdG8gdGhlIEJyaWRnZSBkcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYnJpZGdlX2Rldl9jcmVhdGUoKSBpcyBjYWxsZWQuCisgKiAgICAgIGRldl9ub2RlX29iajogICAgICAgUGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIG5vZGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBNb2R1bGUgaXMgbG9hZGVkLCBkZXZpY2Ugb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQKKyAqICAgICAgLUVOT01FTTogICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgdG8gY3JlYXRlIG5lZWRlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgICAgIFVuYWJsZSB0byBmaW5kIEJyaWRnZSBkcml2ZXIgZW50cnkgcG9pbnQgZnVuY3Rpb24uCisgKiAgICAgIC1FU1BJUEU6ICAgVW5hYmxlIHRvIGxvYWQgWkwgRExMLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIGRldmljZV9vYmogIT0gTlVMTC4KKyAqICAgICAgZHJpdmVyX2ZpbGVfbmFtZSAhPSBOVUxMLgorICogICAgICBob3N0X2NvbmZpZyAhPSBOVUxMLgorICogICAgICBwRHNwQ29uZmlnICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICpkZXZpY2Vfb2JqIHdpbGwgY29udGFpbiBoYW5kbGUgdG8gdGhlIG5ldyBkZXZpY2Ugb2JqZWN0LgorICogICAgICBPdGhlcndpc2UsIGRvZXMgbm90IGNyZWF0ZSB0aGUgZGV2aWNlIG9iamVjdCwgZW5zdXJlcyB0aGUgQnJpZGdlIGRyaXZlcgorICogICAgICBtb2R1bGUgaXMgdW5sb2FkZWQsIGFuZCBzZXRzICpkZXZpY2Vfb2JqIHRvIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2NyZWF0ZV9kZXZpY2Uoc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgKipkZXZpY2Vfb2JqLAorCQkJCSAgICBjb25zdCBjaGFyICpkcml2ZXJfZmlsZV9uYW1lLAorCQkJCSAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2NyZWF0ZV9pdmFfZGV2aWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIGxvYWQgdGhlIEJyaWRnZSBEcml2ZXIgZm9yIElWQS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZpY2Vfb2JqOiAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHJlY2VpdmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlLgorICogICAgICBkcml2ZXJfZmlsZV9uYW1lOiBOYW1lIG9mIEJyaWRnZSBkcml2ZXIgUEUgRExMIGZpbGUgdG8gbG9hZC4gIElmIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGUgcGF0aCBpcyBub3QgcHJvdmlkZWQsIHRoZSBmaWxlIGlzIGxvYWRlZAorICogICAgICAgICAgICAgICAgICAgICAgdGhyb3VnaCAnQnJpZGdlJ3MgbW9kdWxlIHNlYXJjaCBwYXRoLgorICogICAgICBob3N0X2NvbmZpZzogICAgSG9zdCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCB0byBiZSBwYXNzZWQgZG93bgorICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIEJyaWRnZSBkcml2ZXIgd2hlbiBicmlkZ2VfZGV2X2NyZWF0ZSgpIGlzIGNhbGxlZC4KKyAqICAgICAgcERzcENvbmZpZzogICAgIERTUCByZXNvdXJjZXMsIHRvIGJlIHBhc3NlZCBkb3duIHRvIHRoZSBCcmlkZ2UgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICB3aGVuIGJyaWRnZV9kZXZfY3JlYXRlKCkgaXMgY2FsbGVkLgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIFBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBub2RlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgTW9kdWxlIGlzIGxvYWRlZCwgZGV2aWNlIG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGNyZWF0ZSBuZWVkZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgICAgICAgICBVbmFibGUgdG8gZmluZCBCcmlkZ2UgZHJpdmVyIGVudHJ5IHBvaW50IGZ1bmN0aW9uLgorICogICAgICAtRVNQSVBFOiAgIFVuYWJsZSB0byBsb2FkIFpMIERMTC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogICAgICBkZXZpY2Vfb2JqICE9IE5VTEwuCisgKiAgICAgIGRyaXZlcl9maWxlX25hbWUgIT0gTlVMTC4KKyAqICAgICAgaG9zdF9jb25maWcgIT0gTlVMTC4KKyAqICAgICAgcERzcENvbmZpZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAqZGV2aWNlX29iaiB3aWxsIGNvbnRhaW4gaGFuZGxlIHRvIHRoZSBuZXcgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgT3RoZXJ3aXNlLCBkb2VzIG5vdCBjcmVhdGUgdGhlIGRldmljZSBvYmplY3QsIGVuc3VyZXMgdGhlIEJyaWRnZSBkcml2ZXIKKyAqICAgICAgbW9kdWxlIGlzIHVubG9hZGVkLCBhbmQgc2V0cyAqZGV2aWNlX29iaiB0byBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9jcmVhdGVfaXZhX2RldmljZShzdHJ1Y3QgZGV2X29iamVjdAorCQkJCQkqKmRldmljZV9vYmosCisJCQkJCWNvbnN0IGNoYXIgKmRyaXZlcl9maWxlX25hbWUsCisJCQkJCWNvbnN0IHN0cnVjdCBjZmdfaG9zdHJlcworCQkJCQkqaG9zdF9jb25maWcsCisJCQkJCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfY3JlYXRlMiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFmdGVyIHN1Y2Nlc3NmdWwgbG9hZGluZyBvZiB0aGUgaW1hZ2UgZnJvbSBhcGlfaW5pdF9jb21wbGV0ZTIKKyAqICAgICAgKFBST0MgQXV0b19TdGFydCkgb3IgcHJvY19sb2FkIHRoaXMgZnhuIGlzIGNhbGxlZC4gVGhpcyBjcmVhdGVzCisgKiAgICAgIHRoZSBOb2RlIE1hbmFnZXIgYW5kIHVwZGF0ZXMgdGhlIERFViBPYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3NmdWwgQ3JlYXRpb24gb2YgTm9kZSBNYW5hZ2VyCisgKiAgICAgIC1FUEVSTTogIFNvbWUgRXJyb3IgT2NjdXJyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZAorICogICAgICBWYWxpZCBoZGV2X29iagorICogIEVuc3VyZXM6CisgKiAgICAgIDAgYW5kIGhkZXZfb2JqLT5obm9kZV9tZ3IgIT0gTlVMTAorICogICAgICBlbHNlICAgIGhkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTAorICovCitleHRlcm4gaW50IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2Rlc3Ryb3kyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveXMgdGhlIE5vZGUgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3NmdWwgQ3JlYXRpb24gb2YgTm9kZSBNYW5hZ2VyCisgKiAgICAgIC1FUEVSTTogIFNvbWUgRXJyb3IgT2NjdXJyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZAorICogICAgICBWYWxpZCBoZGV2X29iagorICogIEVuc3VyZXM6CisgKiAgICAgIDAgYW5kIGhkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTAorICogICAgICBlbHNlICAgIC1FUEVSTS4KKyAqLworZXh0ZXJuIGludCBkZXZfZGVzdHJveTIoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZGVzdHJveV9kZXZpY2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95cyB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZSwgaWYgYW55LCBjYWxscworICogICAgICBicmlkZ2VfZGV2X2Rlc3Ryb3koKSwgYW5kIHRoZW4gYXR0ZW1wdHMgdG8gdW5sb2FkIHRoZSBCcmlkZ2UgbW9kdWxlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogICAgICAtRVBFUk06ICAgICBUaGUgQnJpZGdlIGRyaXZlciBmYWlsZWQgaXQncyBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBmdW5jdGlvbi4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGV2X2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAqaGRldl9vYmopOworCisvKgorICogID09PT09PT09IGRldl9nZXRfY2hubF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICptZ3I6ICAgICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBtZ3IgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqbWdyIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgc3RydWN0IGNobmxfbWdyICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2NtbV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBzaGFyZWQgbWVtb3J5IG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcworICogICAgICBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICptZ3I6ICAgICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBtZ3IgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqbWdyIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIG9yIE5VTEwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9jbW1fbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHN0cnVjdCBjbW1fb2JqZWN0ICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2RtbV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBkeW5hbWljIG1lbW9yeSBtYW5hZ2VyIGNyZWF0ZWQgZm9yIHRoaXMKKyAqICAgICAgZGV2aWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqbWdyOiAgICAgICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbWdyICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKm1nciBjb250YWlucyBhIGhhbmRsZSB0byBhIGNoYW5uZWwgbWFuYWdlciBvYmplY3QsCisgKiAgICAgICAgICAgICAgICAgICAgICBvciBOVUxMLgorICogICAgICBlbHNlOiAgICAgICAgICAgKm1nciBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfZG1tX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICBzdHJ1Y3QgZG1tX29iamVjdCAqKm1ncik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9jb2RfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIENPRCBtYW5hZ2VyIGNyZWF0ZSBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgICpjb2RfbWdyOiAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBjb2RfbWdyICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKmNvZF9tZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYSBDT0QgbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqY29kX21nciBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICBzdHJ1Y3QgY29kX21hbmFnZXIgKipjb2RfbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2RlaF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgREVIIG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqZGVoX21hbmFnZXI6ICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGVoX21hbmFnZXIgIT0gTlVMTC4KKyAqICAgICAgREVIIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICpkZWhfbWFuYWdlciBjb250YWlucyBhIGhhbmRsZSB0byBhIERFSCBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgZWxzZTogICAgICAgKmRlaF9tYW5hZ2VyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9kZWhfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHN0cnVjdCBkZWhfbWdyICoqZGVoX21hbmFnZXIpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfZGV2X25vZGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgZGV2X25kZTogICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBnZXQgdGhlIGRldmljZSBub2RlIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgUmV0dXJucyBhIERFVk5PREUgaW4gKmRldl9ub2RlX29iai4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X25kZSAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpkZXZfbmRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEOworICogICAgICBlbHNlOiAgICAgICAgICAgKmRldl9uZGUgaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBkZXZfZ2V0X2Rldl9ub2RlKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKipkZXZfbmRlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2Rldl90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBJRCBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgICAgIGRldl9uZGU6ICAgICAgICBQdHIgdG8gbG9jYXRpb24gdG8gZ2V0IHRoZSBkZXZpY2Ugbm9kZSBoYW5kbGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X25kZSAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpkZXZfbmRlIGNvbnRhaW5zIGEgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIElEOworICogICAgICBlbHNlOiAgICAgICAgICAgKmRldl9uZGUgaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBkZXZfZ2V0X2Rldl90eXBlKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZpY2Vfb2JqLAorCQkJCQl1OCAqZGV2X3R5cGUpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfZmlyc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgZmlyc3QgRGV2aWNlIE9iamVjdCBoYW5kbGUgZnJvbSBhbiBpbnRlcm5hbCBsaW5rZWQgbGlzdCBvZgorICogICAgICBvZiBERVZfT0JKRUNUcyBtYWludGFpbmVkIGJ5IERFVi4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGRldmljZSBvYmplY3RzIHN0b3JlZDsgZWxzZQorICogICAgICBhIHZhbGlkIERFVl9IT0JKRUNULgorICogIFJlcXVpcmVzOgorICogICAgICBObyBjYWxscyB0byBkZXZfY3JlYXRlX2RldmljZSBvciBkZXZfZGVzdHJveV9kZXZpY2UgKHdoaWNoIG15IG1vZGlmeSB0aGUKKyAqICAgICAgaW50ZXJuYWwgZGV2aWNlIG9iamVjdCBsaXN0KSBtYXkgb2NjdXIgYmV0d2VlbiBjYWxscyB0byBkZXZfZ2V0X2ZpcnN0CisgKiAgICAgIGFuZCBkZXZfZ2V0X25leHQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIERFVl9IT0JKRUNUIHJldHVybmVkIGlzIHZhbGlkLgorICogICAgICBBIHN1YnNlcXVlbnQgY2FsbCB0byBkZXZfZ2V0X25leHQgd2lsbCByZXR1cm4gdGhlIG5leHQgZGV2aWNlIG9iamVjdCBpbgorICogICAgICB0aGUgbGlzdC4KKyAqLworZXh0ZXJuIHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfZ2V0X2ZpcnN0KHZvaWQpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfaW50Zl9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHN0cnVjdHVyZSBmb3IgdGhlCisgKiAgICAgIGxvYWRlZCBCcmlkZ2UgZHJpdmVyLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICAqaWZfZnhuczogICAgICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGZ4biBpbnRlcmZhY2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlmX2Z4bnMgIT0gTlVMTC4KKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAqaWZfZnhucyBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIEJyaWRnZQorICogICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIGludGVyZmFjZTsKKyAqICAgICAgZWxzZTogICAgICAgICAgICppZl9meG5zIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9pbnRmX2Z4bnMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKmlmX2Z4bnMpOworCisvKgorICogID09PT09PT09IGRldl9nZXRfaW9fbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGhhbmRsZSB0byB0aGUgSU8gbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgKm1ncjogICAgICAgICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBoYW5kbGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1nciAhPSBOVUxMLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICptZ3IgY29udGFpbnMgYSBoYW5kbGUgdG8gYW4gSU8gbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqbWdyIGlzIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgZGV2X2dldF9pb19tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSBzdHJ1Y3QgaW9fbWdyICoqbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25leHQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9mCisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZGV2X2dldF9maXJzdCgpIGFuZCB6ZXJvIG9yIG1vcmUgZGV2X2dldF9uZXh0CisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byB0aGUgZGV2aWNlIG9iamVjdCByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMKKyAqICAgICAgICAgICAgICAgICAgY2FsbCB0byBkZXZfZ2V0X2ZpcnN0KCkgb3IgZGV2X2dldF9uZXh0KCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTlVMTCBpZiB0aGVyZSBhcmUgbm8gZnVydGhlciBkZXZpY2Ugb2JqZWN0cyBvbiB0aGUgbGlzdCBvciBoZGV2X29iagorICogICAgICB3YXMgaW52YWxpZDsKKyAqICAgICAgZWxzZSB0aGUgbmV4dCB2YWxpZCBERVZfSE9CSkVDVCBpbiB0aGUgbGlzdC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTm8gY2FsbHMgdG8gZGV2X2NyZWF0ZV9kZXZpY2Ugb3IgZGV2X2Rlc3Ryb3lfZGV2aWNlICh3aGljaCBteSBtb2RpZnkgdGhlCisgKiAgICAgIGludGVybmFsIGRldmljZSBvYmplY3QgbGlzdCkgbWF5IG9jY3VyIGJldHdlZW4gY2FsbHMgdG8gZGV2X2dldF9maXJzdAorICogICAgICBhbmQgZGV2X2dldF9uZXh0LgorICogIEVuc3VyZXM6CisgKiAgICAgIFRoZSBERVZfSE9CSkVDVCByZXR1cm5lZCBpcyB2YWxpZC4KKyAqICAgICAgQSBzdWJzZXF1ZW50IGNhbGwgdG8gZGV2X2dldF9uZXh0IHdpbGwgcmV0dXJuIHRoZSBuZXh0IGRldmljZSBvYmplY3QgaW4KKyAqICAgICAgdGhlIGxpc3QuCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X2dldF9uZXh0KHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAgICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfbXNnX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBtc2dfY3RybCBNYW5hZ2VyIEhhbmRsZSBmcm9tIHRoZSBEZXZPYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byB0aGUgRGV2IE9iamVjdAorICogICAgICBtc2dfbWFuOiAgICBMb2NhdGlvbiB3aGVyZSBtc2dfY3RybCBNYW5hZ2VyIGhhbmRsZSB3aWxsIGJlIHJldHVybmVkLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgaGRldl9vYmouCisgKiAgICAgIG5vZGVfbWFuICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgZGV2X2dldF9tc2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICBzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4pOworCisvKgorICogID09PT09PT09PSBkZXZfZ2V0X25vZGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBOb2RlIE1hbmFnZXIgSGFuZGxlIGZyb20gdGhlIERldk9iamVjdC4gSXQgaXMgYW4KKyAqICAgICAgYWNjZXNzb3IgZnVuY3Rpb24KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byB0aGUgRGV2IE9iamVjdAorICogICAgICBub2RlX21hbjogICAgICAgTG9jYXRpb24gd2hlcmUgSGFuZGxlIHRvIHRoZSBOb2RlIE1hbmFnZXIgd2lsbCBiZQorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgRGV2IE9iamVjdCBoYW5kbGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICAgICAgbm9kZV9tYW4gaXMgbm90IG51bGwKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKm5vZGVfbWFuIGNvbnRhaW5zIGEgaGFuZGxlIHRvIGEgTm9kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgZWxzZTogICAgICAgICAgICpub2RlX21hbiBpcyBOVUxMLgorICovCitleHRlcm4gaW50IGRldl9nZXRfbm9kZV9tYW5hZ2VyKHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJICAgICAgICpoZGV2X29iaiwKKwkJCQkgICAgICAgc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4pOworCisvKgorICogID09PT09PT09IGRldl9nZXRfc3ltYm9sID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBpbiB0aGUgY3VycmVudGx5IGxvYWRlZCBwcm9ncmFtLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGRldmljZSBvYmplY3QgY3JlYXRlZCB3aXRoCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICBzdHJfc3ltOiAgICAgICAgTmFtZSBvZiBzeW1ib2wgdG8gbG9vayB1cC4KKyAqICAgICAgcHVsX3ZhbHVlOiAgICAgICBQdHIgdG8gc3ltYm9sIHZhbHVlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogICAgICAtRVNQSVBFOiBTeW1ib2xzIGNvdWxkbiBub3QgYmUgZm91bmQgb3IgaGF2ZSBub3QgYmVlbiBsb2FkZWQgb250bworICogICAgICAgICAgICAgICB0aGUgYm9hcmQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cl9zeW0gIT0gTlVMTC4KKyAqICAgICAgcHVsX3ZhbHVlICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnB1bF92YWx1ZSBjb250YWlucyB0aGUgc3ltYm9sIHZhbHVlOworICovCitleHRlcm4gaW50IGRldl9nZXRfc3ltYm9sKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgY29uc3QgY2hhciAqc3RyX3N5bSwgdTMyICogcHVsX3ZhbHVlKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBDb250ZXh0IGhhbmRsZSwgYXMgcmV0dXJuZWQgYnkgdGhlCisgKiAgICAgIGJyaWRnZV9kZXZfY3JlYXRlIGZ4bi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpCisgKiAgICAgICpwaGJyaWRnZV9jb250ZXh0OiAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIGNvbnRleHQgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBwaGJyaWRnZV9jb250ZXh0ICE9IE5VTEwuCisgKiAgICAgIERFViBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnBoYnJpZGdlX2NvbnRleHQgY29udGFpbnMgY29udGV4dCBoYW5kbGU7CisgKiAgICAgIGVsc2U6ICAgICAgICAgICAqcGhicmlkZ2VfY29udGV4dCBpcyBOVUxMOworICovCitleHRlcm4gaW50IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSAgICAgIHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAqKnBoYnJpZGdlX2NvbnRleHQpOworCisvKgorICogID09PT09PT09IGRldl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgaXMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgV2hlbiByZWZlcmVuY2UgY291bnQgPT0gMCwgREVWJ3MgcHJpdmF0ZSByZXNvdXJjZXMgYXJlIGZyZWVkLgorICovCitleHRlcm4gdm9pZCBkZXZfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgREVWJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cmVkLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFRSVUU6IEEgcmVxdWlyZW1lbnQgZm9yIHRoZSBvdGhlciBwdWJsaWMgREVWIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgZGV2X2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2lzX2xvY2tlZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFByZWRpY2F0ZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGRldmljZSBoYXMgYmVlbgorICogICAgICBsb2NrZWQgYnkgYSBjbGllbnQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gZGV2aWNlIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldl9jcmVhdGVfZGV2aWNlKCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFRSVUU6IGRldmljZSBoYXMgYmVlbiBsb2NrZWQuCisgKiAgICAgIDA6ICAgICBGQUxTRTogZGV2aWNlIG5vdCBsb2NrZWQuCisgKiAgICAgIC1FRkFVTFQ6ICAgIGhkZXZfb2JqIHdhcyBpbnZhbGlkLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfaXNfbG9ja2VkKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2luc2VydF9wcm9jX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydHMgdGhlIFByb2Nlc3NvciBPYmplY3QgaW50byB0aGUgTGlzdCBvZiBQUk9DIE9iamVjdHMKKyAqICAgICAga2VwdCBpbiB0aGUgREVWIE9iamVjdAorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2Nfb2JqOiAgICBIYW5kbGUgdG8gdGhlIFByb2MgT2JqZWN0CisgKiAgICAgIGhkZXZfb2JqICAgICAgSGFuZGxlIHRvIHRoZSBEZXYgT2JqZWN0CisgKiAgICAgIGJBdHRhY2hlZE5ldyAgICBTcGVjaWZpZXMgaWYgdGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW50byB0aGUgbGlzdAorICogIFJlcXVpcmVzOgorICogICAgICBwcm9jX29iaiBpcyBub3QgTlVMTAorICogICAgICBoZGV2X29iaiBpcyBhIHZhbGlkIGhhbmRsZSB0byB0aGUgREVWLgorICogICAgICBERVYgSW5pdGlhbGl6ZWQuCisgKiAgICAgIExpc3Qob2YgUHJvYyBvYmplY3QgaW4gRGV2KSBFeGlzdHMuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCAmIHRoZSBQUk9DIE9iamVjdCBpcyBpbnNlcnRlZCBhbmQgdGhlIGxpc3QgaXMgbm90IGVtcHR5CisgKiAgRGV0YWlsczoKKyAqICAgICAgSWYgdGhlIExpc3Qgb2YgUHJvYyBPYmplY3QgaXMgZW1wdHkgYkF0dGFjaGVkTmV3IGlzIFRSVUUsIGl0IGluZGljYXRlZAorICogICAgICB0aGlzIGlzIHRoZSBmaXJzdCBQcm9jZXNzb3IgYXR0YWNoaW5nLgorICogICAgICBJZiBpdCBpcyBGYWxzZSwgdGhlcmUgYXJlIGFscmVhZHkgcHJvY2Vzc29ycyBhdHRhY2hlZC4KKyAqLworZXh0ZXJuIGludCBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0CisJCQkJCSAqaGRldl9vYmosCisJCQkJCSB1MzIgcHJvY19vYmosCisJCQkJCSBib29sICphbHJlYWR5X2F0dGFjaGVkKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBtYWludGFpbmVkCisgKiAgICAgIGJ5IHRoZSBERVYKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqOiAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICogICAgICBhbHJlYWR5X2F0dGFjaGVkOiAgUHRyIHRvIHJldHVybiB0aGUgYm9vbAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICAgICAgLUVQRVJNICAgICAgICAgICBGYWlsdXJlIHRvIFJlbW92ZSB0aGUgUFJPQyBPYmplY3QgZnJvbSB0aGUgbGlzdAorICogIFJlcXVpcmVzOgorICogICAgICBEZXZPYmplY3QgaXMgVmFsaWQKKyAqICAgICAgcHJvY19vYmogIT0gMAorICogICAgICBkZXZfb2JqLT5wcm9jX2xpc3QgIT0gTlVMTAorICogICAgICAhTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkKKyAqICAgICAgYWxyZWFkeV9hdHRhY2hlZCAhPU5VTEwKKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKiAgICAgIExpc3Qgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95ZWQuCisgKgorICovCitleHRlcm4gaW50IGRldl9yZW1vdmVfcHJvY19vYmplY3Qoc3RydWN0IGRldl9vYmplY3QKKwkJCQkJICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgYWxsIGNsaWVudHMgb2YgdGhpcyBkZXZpY2Ugb2YgYSBjaGFuZ2UgaW4gZGV2aWNlIHN0YXR1cy4KKyAqICAgICAgQ2xpZW50cyBtYXkgaW5jbHVkZSBtdWx0aXBsZSB1c2VycyBvZiBCUkQsIGFzIHdlbGwgYXMgQ0hOTC4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhc3ljaHJvbm91cywgYW5kIG1heSBiZSBjYWxsZWQgYnkgYSB0aW1lciBldmVudAorICogICAgICBzZXQgdXAgYnkgYSB3YXRjaGRvZyB0aW1lci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICByZXQ6ICAgICAgICAgQSBzdGF0dXMgd29yZCwgbW9zdCBsaWtlbHkgYSBCUkRfU1RBVFVTLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICBBbGwgcmVnaXN0ZXJlZCBjbGllbnRzIHdlcmUgYXN5bmNocm9ub3VzbHkgbm90aWZpZWQuCisgKiAgICAgIC1FSU5WQUw6ICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6IE5vdGlmaWNhdGlvbnMgYXJlIHF1ZXVlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB0byBiZQorICogICAgICBkZWxpdmVyZWQgdG8gY2xpZW50cy4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgZW5zdXJlIHRoYXQKKyAqICAgICAgdGhlIG5vdGlmaWNhdGlvbnMgd2lsbCBldmVyIGJlIGRlbGl2ZXJlZC4KKyAqLworZXh0ZXJuIGludCBkZXZfbm90aWZ5X2NsaWVudHMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLCB1MzIgcmV0KTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBEZXZpY2UgT2JqZWN0IGNyZWF0ZWQgYnkgZGV2X3N0YXJ0X2RldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfbm9kZV9vYmo6ICAgICAgIERldmljZSBub2RlIGFzIGl0IGlzIGtub3cgdG8gT1MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIElmIHN1Y2Nlc3M7CisgKiAgICAgIDxlcnJvciBjb2RlPiAgICBPdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfcmVtb3ZlX2RldmljZShzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZGV2X3NldF9jaG5sX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFNldCB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGV2X29iajogICAgIEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgZGV2X2NyZWF0ZV9kZXZpY2UoKS4KKyAqICAgICAgaG1ncjogICAgICAgICAgIEhhbmRsZSB0byBhIGNoYW5uZWwgbWFuYWdlciwgb3IgTlVMTC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBoZGV2X29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGV2X3NldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgc3RydWN0IGNobmxfbWdyICpobWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgdGhlIE1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGRldl9vYmo6IEhhbmRsZSB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCBkZXZfY3JlYXRlX2RldmljZSgpLgorICogICAgICBobWdyOiAgICAgICBIYW5kbGUgdG8gYSBtZXNzYWdlIG1hbmFnZXIsIG9yIE5VTEwuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgREVWIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGRldl9zZXRfbXNnX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHN0cnVjdCBtc2dfbWdyICpobWdyKTsKKworLyoKKyAqICA9PT09PT09PSBkZXZfc3RhcnRfZGV2aWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZXMgdGhlIG5ldyBkZXZpY2Ugd2l0aCBicmlkZ2UgZW52aXJvbm1lbnQuICBUaGlzIGludm9sdmVzCisgKiAgICAgIHF1ZXJ5aW5nIENNIGZvciBhbGxvY2F0ZWQgcmVzb3VyY2VzLCBxdWVyeWluZyB0aGUgcmVnaXN0cnkgZm9yCisgKiAgICAgIG5lY2Vzc2FyeSBkc3AgcmVzb3VyY2VzIChyZXF1ZXN0ZWQgaW4gdGhlIElORiBmaWxlKSwgYW5kIHVzaW5nIHRoaXMKKyAqICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIGEgYnJpZGdlIGRldmljZSBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X25vZGVfb2JqOiAgICAgICBEZXZpY2Ugbm9kZSBhcyBpdCBpcyBrbm93IHRvIE9TLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBJZiBzdWNjZXNzOworICogICAgICA8ZXJyb3IgY29kZT4gICAgT3RoZXJ3aXNlLgorICogIFJlcXVpcmVzOgorICogICAgICBERVYgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkZXZfc3RhcnRfZGV2aWNlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqKTsKKworI2VuZGlmIC8qIERFVl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kZXZkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2ZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZjkyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZGV2ZGVmcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBkZXZkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVmaW5pdGlvbiBvZiBjb21tb24gaW5jbHVkZSB0eXBlZGVmIGJldHdlZW4gZHNwZGVmcy5oIGFuZCBkZXYuaC4gUmVxdWlyZWQKKyAqIHRvIGJyZWFrIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBCcmlkZ2UgZHJpdmVyIGFuZCBERVYgaW5jbHVkZSBmaWxlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBERVZERUZTXworI2RlZmluZSBERVZERUZTXworCisvKiBCcmlkZ2UgRGV2aWNlIE9iamVjdCAqLworc3RydWN0IGRldl9vYmplY3Q7CisKKyNlbmRpZiAvKiBERVZERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rpc3AuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJiZjcyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBkaXNwLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIE5vZGUgRGlzcGF0Y2hlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERJU1BfCisjZGVmaW5lIERJU1BfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVwcml2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBOT0RFIERpc3BhdGNoZXIgb2JqZWN0LiBUaGlzIG9iamVjdCBoYW5kbGVzIHRoZSBjcmVhdGlvbiwKKyAqICBkZWxldGlvbiwgYW5kIGV4ZWN1dGlvbiBvZiBub2RlcyBvbiB0aGUgRFNQIHRhcmdldCwgdGhyb3VnaCBjb21tdW5pY2F0aW9uCisgKiAgd2l0aCB0aGUgUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIgcnVubmluZyBvbiB0aGUgdGFyZ2V0LiBFYWNoIE5PREUKKyAqICBNYW5hZ2VyIG9iamVjdCBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBOT0RFIERpc3BhdGNoZXIuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3BhdGNoX29iajogICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGRpc3BhdGNoZXIgb2JqZWN0IG9uIG91dHB1dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICBEZXZpY2UgZm9yIHRoaXMgcHJvY2Vzc29yLgorICogICAgICBkaXNwX2F0dHJzOiAgICAgTm9kZSBkaXNwYXRjaGVyIGF0dHJpYnV0ZXMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgICAgICAgICBVbmFibGUgdG8gY3JlYXRlIGRpc3BhdGNoZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRpc3BfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIGRpc3BfYXR0cnMgIT0gTlVMTC4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICAgICAgZGlzcGF0Y2hfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIElTX1ZBTElEKCpkaXNwYXRjaF9vYmopLgorICogICAgICBlcnJvcjogICAgICAgICAgKmRpc3BhdGNoX29iaiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IGRpc3BfY3JlYXRlKHN0cnVjdCBkaXNwX29iamVjdCAqKmRpc3BhdGNoX29iaiwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkaXNwX2F0dHIgKmRpc3BfYXR0cnMpOworCisvKgorICogID09PT09PT09IGRpc3BfZGVsZXRlID09PT09PT09CisgKiAgRGVsZXRlIHRoZSBOT0RFIERpc3BhdGNoZXIuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgTm9kZSBEaXNwYXRjaGVyIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBkaXNwX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBkaXNwX29iai4KKyAqICBFbnN1cmVzOgorICogICAgICBkaXNwX29iaiBpcyBpbnZhbGlkLgorICovCitleHRlcm4gdm9pZCBkaXNwX2RlbGV0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkaXNwX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBESVNQIG1vZHVsZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBkaXNwX2luaXQodm9pZCkgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQW55IHJlc291cmNlcyBhY3F1aXJlZCBpbiBkaXNwX2luaXQodm9pZCkgd2lsbCBiZSBmcmVlZCB3aGVuIGxhc3QgRElTUAorICogICAgICBjbGllbnQgY2FsbHMgZGlzcF9leGl0KHZvaWQpLgorICovCitleHRlcm4gdm9pZCBkaXNwX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgRElTUCBtb2R1bGUuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBkaXNwX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSB0YXJnZXQuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgICAgICAgICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUgY3VycmVudGx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBvciBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgICAgIHVsRnhuQWRkcmVzczogICAgICAgICAgIEFkZHJlc3Mgb2YgUk1TIGZ1bmN0aW9uIGZvciBjaGFuZ2luZyBwcmlvcml0eS4KKyAqICAgICAgbm9kZV9lbnY6ICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGVudmlyb25tZW50IHN0cnVjdHVyZS4KKyAqICAgICAgcHJpbzogICAgICAgICAgICAgIE5ldyBwcmlvcml0eSBsZXZlbCB0byBzZXQgbm9kZSdzIHByaW9yaXR5IHRvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRTogICAgICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRpc3BfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIGRpc3Bfb2JqLgorICogICAgICBobm9kZSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShzdHJ1Y3QgZGlzcF9vYmplY3QKKwkJCQkJICAgICpkaXNwX29iaiwKKwkJCQkJICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJCSAgICB1MzIgcm1zX2Z4biwKKwkJCQkJICAgIG5vZGVlbnYgbm9kZV9lbnYsIHMzMiBwcmlvKTsKKworLyoKKyAqICA9PT09PT09PSBkaXNwX25vZGVfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRpc3Bfb2JqOiAgICBOb2RlIERpc3BhdGNoZXIgb2JqZWN0LgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBoYW5kbGUgb2J0YWluZWQgZnJvbSBub2RlX2FsbG9jYXRlKCkuCisgKiAgICAgIHVsX2Z4bl9hZGRyOiAgICAgIEFkZHJlc3Mgb3IgUk1TIGNyZWF0ZSBub2RlIGZ1bmN0aW9uLgorICogICAgICB1bF9jcmVhdGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24uCisgKiAgICAgIHBhcmdzOiAgICAgICAgICBBcmd1bWVudHMgdG8gcGFzcyB0byBSTVMgbm9kZSBjcmVhdGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGVudmlyb25tZW50IHBvaW50ZXIgb24KKyAqICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBBIGZhaWx1cmUgb2NjdXJyZWQsIHVuYWJsZSB0byBjcmVhdGUgbm9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIHBhcmdzICE9IE5VTEwuCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgICAgIG5vZGVfZW52ICE9IE5VTEwuCisgKiAgICAgIG5vZGVfZ2V0X3R5cGUoaG5vZGUpICE9IE5PREVfREVWSUNFLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgZGlzcF9ub2RlX2NyZWF0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJCSAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgdTMyIHJtc19meG4sCisJCQkJICAgdTMyIHVsX2NyZWF0ZV9meG4sCisJCQkJICAgY29uc3Qgc3RydWN0IG5vZGVfY3JlYXRlYXJncworCQkJCSAgICpwYXJncywgbm9kZWVudiAqbm9kZV9lbnYpOworCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbi4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRpbmcgYSBub2RlIGN1cnJlbnRseQorICogICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIG9uIHRoZSBEU1AuCisgKiAgICAgIHVsX2Z4bl9hZGRyOiAgICAgIEFkZHJlc3Mgb3IgUk1TIGRlbGV0ZSBub2RlIGZ1bmN0aW9uLgorICogICAgICB1bF9kZWxldGVfZnhuOiAgICBBZGRyZXNzIG9mIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgZW52aXJvbm1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkaXNwX25vZGVfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJICAgc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICB1MzIgcm1zX2Z4biwKKwkJCQkgICB1MzIgdWxfZGVsZXRlX2Z4biwgbm9kZWVudiBub2RlX2Vudik7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX3J1biA9PT09PT09PQorICogIFN0YXJ0IGV4ZWN1dGlvbiBvZiBhIG5vZGUncyBleGVjdXRlIHBoYXNlLCBvciByZXN1bWUgZXhlY3V0aW9uIG9mIGEgbm9kZQorICogIHRoYXQgaGFzIGJlZW4gc3VzcGVuZGVkICh2aWEgRElTUF9Ob2RlUGF1c2UoKSkgb24gdGhlIERTUC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGlzcF9vYmo6ICAgIE5vZGUgRGlzcGF0Y2hlciBvYmplY3QuCisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIG9iamVjdCByZXByZXNlbnRpbmcgYSBub2RlIHRvIGJlIGV4ZWN1dGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgRFNQLgorICogICAgICB1bF9meG5fYWRkcjogICAgICBBZGRyZXNzIG9yIFJNUyBub2RlIGV4ZWN1dGUgZnVuY3Rpb24uCisgKiAgICAgIHVsX2V4ZWN1dGVfZnhuOiAgIEFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24uCisgKiAgICAgIG5vZGVfZW52OiAgICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgZW52aXJvbm1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGlzcF9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgZGlzcF9vYmouCisgKiAgICAgIGhub2RlICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBkaXNwX25vZGVfcnVuKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQl1MzIgcm1zX2Z4biwKKwkJCQl1MzIgdWxfZXhlY3V0ZV9meG4sIG5vZGVlbnYgbm9kZV9lbnYpOworCisjZW5kaWYgLyogRElTUF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2Rpc3BkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2NTUxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kaXNwZGVmcy5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBkaXNwZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdsb2JhbCBESVNQIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DRVNTT1IsIE5PREUsIGFuZCBESVNQLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRElTUERFRlNfCisjZGVmaW5lIERJU1BERUZTXworCitzdHJ1Y3QgZGlzcF9vYmplY3Q7CisKKy8qIE5vZGUgRGlzcGF0Y2hlciBhdHRyaWJ1dGVzICovCitzdHJ1Y3QgZGlzcF9hdHRyIHsKKwl1MzIgdWxfY2hubF9vZmZzZXQ7CS8qIE9mZnNldCBvZiBjaGFubmVsIGlkcyByZXNlcnZlZCBmb3IgUk1TICovCisJLyogU2l6ZSBvZiBidWZmZXIgZm9yIHNlbmRpbmcgZGF0YSB0byBSTVMgKi8KKwl1MzIgdWxfY2hubF9idWZfc2l6ZTsKKwlpbnQgcHJvY19mYW1pbHk7CS8qIGVnLCA1MDAwICovCisJaW50IHByb2NfdHlwZTsJCS8qIGVnLCA1NTEwICovCisJdm9pZCAqcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gKi8KKwl1MzIgcmVzZXJ2ZWQyOwkJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICovCit9OworCisjZW5kaWYgLyogRElTUERFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZG1tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ODMzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kbW0uaApAQCAtMCwwICsxLDc1IEBACisvKgorICogZG1tLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhlIER5bmFtaWMgTWVtb3J5IE1hcHBpbmcoRE1NKSBtb2R1bGUgbWFuYWdlcyB0aGUgRFNQIFZpcnR1YWwgYWRkcmVzcworICogc3BhY2UgdGhhdCBjYW4gYmUgZGlyZWN0bHkgbWFwcGVkIHRvIGFueSBNUFUgYnVmZmVyIG9yIG1lbW9yeSByZWdpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBETU1fCisjZGVmaW5lIERNTV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworc3RydWN0IGRtbV9vYmplY3Q7CisKKy8qIERNTSBhdHRyaWJ1dGVzIHVzZWQgaW4gZG1tX2NyZWF0ZSgpICovCitzdHJ1Y3QgZG1tX21ncmF0dHJzIHsKKwl1MzIgcmVzZXJ2ZWQ7Cit9OworCisjZGVmaW5lIERNTVBPT0xTSVpFICAgICAgMHg0MDAwMDAwCisKKy8qCisgKiAgPT09PT09PT0gZG1tX2dldF9oYW5kbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KKyAqICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgorICovCisKK2V4dGVybiBpbnQgZG1tX2dldF9oYW5kbGUodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlcik7CisKK2V4dGVybiBpbnQgZG1tX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLAorCQkJCSAgICAgdTMyIHNpemUsIHUzMiAqcHJzdl9hZGRyKTsKKworZXh0ZXJuIGludCBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCisJCQkJCXUzMiByc3ZfYWRkcik7CisKK2V4dGVybiBpbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLAorCQkJCSB1MzIgc2l6ZSk7CisKK2V4dGVybiBpbnQgZG1tX3VuX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsCisJCQkJICAgIHUzMiBhZGRyLCB1MzIgKnBzaXplKTsKKworZXh0ZXJuIGludCBkbW1fZGVzdHJveShzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncik7CisKK2V4dGVybiBpbnQgZG1tX2RlbGV0ZV90YWJsZXMoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IpOworCitleHRlcm4gaW50IGRtbV9jcmVhdGUoc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlciwKKwkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZG1tX21ncmF0dHJzICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGJvb2wgZG1tX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGRtbV9leGl0KHZvaWQpOworCitleHRlcm4gaW50IGRtbV9jcmVhdGVfdGFibGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLAorCQkJCSAgICB1MzIgYWRkciwgdTMyIHNpemUpOworCisjaWZkZWYgRFNQX0RNTV9ERUJVRwordTMyIGRtbV9tZW1fbWFwX2R1bXAoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IpOworI2VuZGlmCisKKyNlbmRpZiAvKiBETU1fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2NTAxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnYuaApAQCAtMCwwICsxLDUyMSBAQAorLyoKKyAqIGRydi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERSViBSZXNvdXJjZSBhbGxvY2F0aW9uIG1vZHVsZS4gRHJpdmVyIE9iamVjdCBnZXRzIENyZWF0ZWQKKyAqIGF0IHRoZSB0aW1lIG9mIExvYWRpbmcuIEl0IGhvbGRzIHRoZSBMaXN0IG9mIERldmljZSBPYmplY3RzCisgKiBpbiB0aGUgc3lzdGVtLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRFJWXworI2RlZmluZSBEUlZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RydmRlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKworI2RlZmluZSBEUlZfQVNTSUdOICAgICAxCisjZGVmaW5lIERSVl9SRUxFQVNFICAgIDAKKworLyogUHJvdmlkZSB0aGUgRFNQIEludGVybmFsIG1lbW9yeSB3aW5kb3dzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gTDMgYWRkcmVzcworICogc3BhY2UgKi8KKworI2RlZmluZSBPTUFQX0dFTV9CQVNFICAgMHgxMDdGODAwMAorI2RlZmluZSBPTUFQX0RTUF9TSVpFICAgMHgwMDcyMDAwMAorCisvKiBNRU0xIGlzIEwyIFJBTSArIEwyIENhY2hlIHNwYWNlICovCisjZGVmaW5lIE9NQVBfRFNQX01FTTFfQkFTRSAweDVDN0Y4MDAwCisjZGVmaW5lIE9NQVBfRFNQX01FTTFfU0laRSAweDE4MDAwCisjZGVmaW5lIE9NQVBfRFNQX0dFTTFfQkFTRSAweDEwN0Y4MDAwCisKKy8qIE1FTTIgaXMgTDFQIFJBTS9DQUNIRSBzcGFjZSAqLworI2RlZmluZSBPTUFQX0RTUF9NRU0yX0JBU0UgMHg1Q0UwMDAwMAorI2RlZmluZSBPTUFQX0RTUF9NRU0yX1NJWkUgMHg4MDAwCisjZGVmaW5lIE9NQVBfRFNQX0dFTTJfQkFTRSAweDEwRTAwMDAwCisKKy8qIE1FTTMgaXMgTDFEIFJBTS9DQUNIRSBzcGFjZSAqLworI2RlZmluZSBPTUFQX0RTUF9NRU0zX0JBU0UgMHg1Q0YwNDAwMAorI2RlZmluZSBPTUFQX0RTUF9NRU0zX1NJWkUgMHgxNDAwMAorI2RlZmluZSBPTUFQX0RTUF9HRU0zX0JBU0UgMHgxMEYwNDAwMAorCisjZGVmaW5lIE9NQVBfSVZBMl9QUk1fQkFTRSAweDQ4MzA2MDAwCisjZGVmaW5lIE9NQVBfSVZBMl9QUk1fU0laRSAweDEwMDAKKworI2RlZmluZSBPTUFQX0lWQTJfQ01fQkFTRSAweDQ4MDA0MDAwCisjZGVmaW5lIE9NQVBfSVZBMl9DTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfUEVSX0NNX0JBU0UgMHg0ODAwNTAwMAorI2RlZmluZSBPTUFQX1BFUl9DTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfUEVSX1BSTV9CQVNFIDB4NDgzMDcwMDAKKyNkZWZpbmUgT01BUF9QRVJfUFJNX1NJWkUgMHgxMDAwCisKKyNkZWZpbmUgT01BUF9DT1JFX1BSTV9CQVNFIDB4NDgzMDZBMDAKKyNkZWZpbmUgT01BUF9DT1JFX1BSTV9TSVpFIDB4MTAwMAorCisjZGVmaW5lIE9NQVBfU1lTQ19CQVNFIDB4NDgwMDIwMDAKKyNkZWZpbmUgT01BUF9TWVNDX1NJWkUgMHgxMDAwCisKKyNkZWZpbmUgT01BUF9ETU1VX0JBU0UgMHg1RDAwMDAwMAorI2RlZmluZSBPTUFQX0RNTVVfU0laRSAweDEwMDAKKworI2RlZmluZSBPTUFQX1BSQ01fVkREMV9ET01BSU4gMQorI2RlZmluZSBPTUFQX1BSQ01fVkREMl9ET01BSU4gMgorCisvKiBHUFAgUFJPQ0VTUyBDTEVBTlVQIERhdGEgc3RydWN0dXJlcyAqLworCisvKiBOZXcgc3RydWN0dXJlIChtZW1iZXIgb2YgcHJvY2VzcyBjb250ZXh0KSBhYnN0cmFjdHMgTk9ERSByZXNvdXJjZSBpbmZvICovCitzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0IHsKKwl2b2lkICpobm9kZTsKKwlzMzIgbm9kZV9hbGxvY2F0ZWQ7CS8qIE5vZGUgc3RhdHVzICovCisJczMyIGhlYXBfYWxsb2NhdGVkOwkvKiBIZWFwIHN0YXR1cyAqLworCXMzMiBzdHJlYW1zX2FsbG9jYXRlZDsJLyogU3RyZWFtcyBzdGF0dXMgKi8KKwlpbnQgaWQ7Cit9OworCisvKiB1c2VkIHRvIGNhY2hlIGRtYSBtYXBwaW5nIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgYnJpZGdlX2RtYV9tYXBfaW5mbyB7CisJLyogZGlyZWN0aW9uIG9mIERNQSBpbiBhY3Rpb24sIG9yIERNQV9OT05FICovCisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOworCS8qIG51bWJlciBvZiBlbGVtZW50cyByZXF1ZXN0ZWQgYnkgdXMgKi8KKwlpbnQgbnVtX3BhZ2VzOworCS8qIG51bWJlciBvZiBlbGVtZW50cyByZXR1cm5lZCBmcm9tIGRtYV9tYXBfc2cgKi8KKwlpbnQgc2dfbnVtOworCS8qIGxpc3Qgb2YgYnVmZmVycyB1c2VkIGluIHRoaXMgRE1BIGFjdGlvbiAqLworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cit9OworCisvKiBVc2VkIGZvciBETU0gbWFwcGVkIG1lbW9yeSBhY2NvdW50aW5nICovCitzdHJ1Y3QgZG1tX21hcF9vYmplY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwl1MzIgZHNwX2FkZHI7CisJdTMyIG1wdV9hZGRyOworCXUzMiBzaXplOworCXUzMiBudW1fdXNyX3BnczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBicmlkZ2VfZG1hX21hcF9pbmZvIGRtYV9pbmZvOworfTsKKworLyogVXNlZCBmb3IgRE1NIHJlc2VydmVkIG1lbW9yeSBhY2NvdW50aW5nICovCitzdHJ1Y3QgZG1tX3Jzdl9vYmplY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKKwl1MzIgZHNwX3Jlc2VydmVkX2FkZHI7Cit9OworCisvKiBOZXcgc3RydWN0dXJlIChtZW1iZXIgb2YgcHJvY2VzcyBjb250ZXh0KSBhYnN0cmFjdHMgRE1NIHJlc291cmNlIGluZm8gKi8KK3N0cnVjdCBkc3BoZWFwX3Jlc19vYmplY3QgeworCXMzMiBoZWFwX2FsbG9jYXRlZDsJLyogRE1NIHN0YXR1cyAqLworCXUzMiB1bF9tcHVfYWRkcjsKKwl1MzIgdWxfZHNwX2FkZHI7CisJdTMyIHVsX2RzcF9yZXNfYWRkcjsKKwl1MzIgaGVhcF9zaXplOworCXZvaWQgKmhwcm9jZXNzb3I7CisJc3RydWN0IGRzcGhlYXBfcmVzX29iamVjdCAqbmV4dDsKK307CisKKy8qIE5ldyBzdHJ1Y3R1cmUgKG1lbWJlciBvZiBwcm9jZXNzIGNvbnRleHQpIGFic3RyYWN0cyBzdHJlYW0gcmVzb3VyY2UgaW5mbyAqLworc3RydWN0IHN0cm1fcmVzX29iamVjdCB7CisJczMyIHN0cmVhbV9hbGxvY2F0ZWQ7CS8qIFN0cmVhbSBzdGF0dXMgKi8KKwl2b2lkICpoc3RyZWFtOworCXUzMiBudW1fYnVmczsKKwl1MzIgZGlyOworCWludCBpZDsKK307CisKKy8qIE92ZXJhbGwgQnJpZGdlIHByb2Nlc3MgcmVzb3VyY2UgdXNhZ2Ugc3RhdGUgKi8KK2VudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHsKKwlQUk9DX1JFU19BTExPQ0FURUQsCisJUFJPQ19SRVNfRlJFRUQKK307CisKKy8qIEJyaWRnZSBEYXRhICovCitzdHJ1Y3QgZHJ2X2RhdGEgeworCWNoYXIgKmJhc2VfaW1nOworCXMzMiBzaG1fc2l6ZTsKKwlpbnQgdGNfd29yZHN3YXBvbjsKKwl2b2lkICpkcnZfb2JqZWN0OworCXZvaWQgKmRldl9vYmplY3Q7CisJdm9pZCAqbWdyX29iamVjdDsKK307CisKKy8qIFByb2Nlc3MgQ29udGV4dCAqLworc3RydWN0IHByb2Nlc3NfY29udGV4dCB7CisJLyogUHJvY2VzcyBTdGF0ZSAqLworCWVudW0gZ3BwX3Byb2NfcmVzX3N0YXRlIHJlc19zdGF0ZTsKKworCS8qIEhhbmRsZSB0byBQcm9jZXNzb3IgKi8KKwl2b2lkICpocHJvY2Vzc29yOworCisJLyogRFNQIE5vZGUgcmVzb3VyY2VzICovCisJc3RydWN0IGlkciAqbm9kZV9pZDsKKworCS8qIERNTSBtYXBwZWQgbWVtb3J5IHJlc291cmNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZG1tX21hcF9saXN0OworCXNwaW5sb2NrX3QgZG1tX21hcF9sb2NrOworCisJLyogRE1NIHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGRtbV9yc3ZfbGlzdDsKKwlzcGlubG9ja190IGRtbV9yc3ZfbG9jazsKKworCS8qIERTUCBIZWFwIHJlc291cmNlcyAqLworCXN0cnVjdCBkc3BoZWFwX3Jlc19vYmplY3QgKnBkc3BoZWFwX2xpc3Q7CisKKwkvKiBTdHJlYW0gcmVzb3VyY2VzICovCisJc3RydWN0IGlkciAqc3RyZWFtX2lkOworfTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlcyB0aGUgRHJpdmVyIE9iamVjdC4gVGhpcyBpcyBkb25lIGR1cmluZyB0aGUgZHJpdmVyIGxvYWRpbmcuCisgKiAgICAgIFRoZXJlIGlzIG9ubHkgb25lIERyaXZlciBPYmplY3QgaW4gdGhlIERTUC9CSU9TIEJyaWRnZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkcnZfb2JqOiAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgY3JlYXRlZCBEUlYgT2JqZWN0IGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjZXNzCisgKiAgICAgIC1FTk9NRU06ICAgIEZhaWxlZCBpbiBNZW1vcnkgYWxsb2NhdGlvbgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBGYWlsdXJlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERSViBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBkcnZfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIC0gKmRydl9vYmogaXMgYSB2YWxpZCBEUlYgaW50ZXJmYWNlIHRvIHRoZSBkZXZpY2UuCisgKiAgICAgICAgICAgICAgICAgICAgICAtIExpc3Qgb2YgRGV2T2JqZWN0IENyZWF0ZWQgYW5kIEluaXRpYWxpemVkLgorICogICAgICAgICAgICAgICAgICAgICAgLSBMaXN0IG9mIGRldl9ub2RlIFN0cmluZyBjcmVhdGVkIGFuZCBpbnRpYWxpemVkLgorICogICAgICAgICAgICAgICAgICAgICAgLSBSZWdpc3RyeSBpcyB1cGRhdGVkIHdpdGggdGhlIERSViBPYmplY3QuCisgKiAgICAgICEwOiAgICAgICBEUlYgT2JqZWN0IG5vdCBjcmVhdGVkCisgKiAgRGV0YWlsczoKKyAqICAgICAgVGhlcmUgaXMgb25lIERyaXZlciBPYmplY3QgZm9yIHRoZSBEcml2ZXIgcmVwcmVzZW50aW5nCisgKiAgICAgIHRoZSBkcml2ZXIgaXRzZWxmLiBJdCBjb250YWlucyB0aGUgbGlzdCBvZiBkZXZpY2UKKyAqICAgICAgT2JqZWN0cyBhbmQgdGhlIGxpc3Qgb2YgRGV2aWNlIEV4dGVuc2lvbnMgaW4gdGhlIHN5c3RlbS4KKyAqICAgICAgQWxzbyBpdCBjYW4gaG9sZCBvdGhlciBuZWNjZXNzYXJ5CisgKiAgICAgIGluZm9ybWF0aW9uIGluIGl0cyBzdG9yYWdlIGFyZWEuCisgKi8KK2V4dGVybiBpbnQgZHJ2X2NyZWF0ZShzdHJ1Y3QgZHJ2X29iamVjdCAqKmRydl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgZGVzdHJveXMgdGhlIERldiBPYmplY3QgbGlzdCwgRHJ2RXh0IGxpc3QKKyAqICAgICAgYW5kIGRlc3Ryb3kgdGhlIERSViBvYmplY3QKKyAqICAgICAgQ2FsbGVkIHVwb24gZHJpdmVyIHVuTG9hZGluZy5vciB1bnN1Y2Nlc2Z1bCBsb2FkaW5nIG9mIHRoZSBkcml2ZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHJpdmVyX29iajogICAgIEhhbmRsZSB0byBEcml2ZXIgb2JqZWN0IC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byBkZXN0cm95IERSViBPYmplY3QKKyAqICBSZXF1aXJlczoKKyAqICAgICAgRFJWIEluaXRpYWxpemVkIChjUmVncyA+IDAgKQorICogICAgICBoZHJ2X29iaiBpcyBub3QgTlVMTCBhbmQgYSB2YWxpZCBEUlYgaGFuZGxlIC4KKyAqICAgICAgTGlzdCBvZiBEZXZPYmplY3QgaXMgRW1wdHkuCisgKiAgICAgIExpc3Qgb2YgRHJ2RXh0IGlzIEVtcHR5CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIC0gRFJWIE9iamVjdCBkZXN0cm95ZWQgYW5kIGhkcnZfb2JqIGlzIG5vdCBhIHZhbGlkCisgKiAgICAgICAgICAgICAgICAgICAgICAgIERSViBoYW5kbGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFJlZ2lzdHJ5IGlzIHVwZGF0ZWQgd2l0aCAiMCIgYXMgdGhlIERSViBPYmplY3QuCisgKi8KK2V4dGVybiBpbnQgZHJ2X2Rlc3Ryb3koc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRXhpdCB0aGUgRFJWIG1vZHVsZSwgZnJlZWluZyBhbnkgbW9kdWxlcyBpbml0aWFsaXplZCBpbiBkcnZfaW5pdC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgZHJ2X2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBGaXJzdERldiBPYmplY3QgaW4gdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICBSZXR1cm5zOgorICogICAgICBkd19kZXZfb2JqZWN0OiAgUHRyIHRvIHRoZSBGaXJzdCBEZXYgT2JqZWN0IGFzIGEgdTMyCisgKiAgICAgIDAgaWYgaXQgZmFpbHMgdG8gcmV0cmlldmUgdGhlIEZpcnN0IERldiBPYmplY3QKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRydl9nZXRfZmlyc3RfZGV2X29iamVjdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfZ2V0X2ZpcnN0X2Rldl9leHRlbnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBQdHIgdG8gdGhlIEZpcnN0IERldmljZSBFeHRlbnNpb24gaW4gdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICBSZXR1cm5zOgorICogICAgICBkd19kZXZfZXh0ZW5zaW9uOiAgICAgUHRyIHRvIHRoZSBGaXJzdCBEZXZpY2UgRXh0ZW5zaW9uIGFzIGEgdTMyCisgKiAgICAgIDA6ICAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIEdldCB0aGUgRGV2aWNlIEV4dGVuc2lvbgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB1MzIgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKHZvaWQpOworCisvKgorICogID09PT09PT09IGRydl9nZXRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdpdmVuIGEgaW5kZXgsIHJldHVybnMgYSBoYW5kbGUgdG8gRGV2T2JqZWN0IGZyb20gdGhlIGxpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZHJ2X29iajogICAgIEhhbmRsZSB0byB0aGUgTWFuYWdlcgorICogICAgICBkZXZpY2Vfb2JqOiAgICAgTG9jYXRpb24gdG8gc3RvcmUgdGhlIERldiBIYW5kbGUKKyAqICBSZXF1aXJlczoKKyAqICAgICAgRFJWIEluaXRpYWxpemVkCisgKiAgICAgIGluZGV4ID49IDAKKyAqICAgICAgaGRydl9vYmogaXMgbm90IE5VTEwgYW5kIFZhbGlkIERSViBPYmplY3QKKyAqICAgICAgZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICBEZXZpY2UgT2JqZWN0IExpc3Qgbm90IEVtcHR5CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MKKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWxlZCB0byBHZXQgdGhlIERldiBPYmplY3QKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKmRldmljZV9vYmogIT0gTlVMTAorICogICAgICAtRVBFUk06ICAgICAgKmRldmljZV9vYmogPSBOVUxMCisgKi8KK2V4dGVybiBpbnQgZHJ2X2dldF9kZXZfb2JqZWN0KHUzMiBpbmRleCwKKwkJCQkgICAgIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaiwKKwkJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBQdHIgdG8gdGhlIE5leHQgRGV2aWNlIE9iamVjdCBmcm9tIHRoZSB0aGUgTGlzdAorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UgT2JqZWN0CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIERSViBJbml0aWFsaXplZAorICogICAgICBoZGV2X29iaiAhPSAwCisgKiAgUmV0dXJuczoKKyAqICAgICAgZHdfZGV2X29iamVjdDogICAgUHRyIHRvIHRoZSBOZXh0IERldiBPYmplY3QgYXMgYSB1MzIKKyAqICAgICAgMDogICAgICAgICAgICAgIElmIGl0IGZhaWwgdG8gZ2V0IHRoZSBuZXh0IERldiBPYmplY3QuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHUzMiBkcnZfZ2V0X25leHRfZGV2X29iamVjdCh1MzIgaGRldl9vYmopOworCisvKgorICogID09PT09PT09IGRydl9nZXRfbmV4dF9kZXZfZXh0ZW5zaW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgUHRyIHRvIHRoZSBOZXh0IERldmljZSBFeHRlbnNpb24gZnJvbSB0aGUgdGhlIExpc3QKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfZXh0ZW5zaW9uOiAgICAgIEhhbmRsZSB0byB0aGUgRGV2aWNlIEV4dGVuc2lvbgorICogIFJlcXVpcmVzOgorICogICAgICBEUlYgSW5pdGlhbGl6ZWQKKyAqICAgICAgZGV2X2V4dGVuc2lvbiAhPSAwLgorICogIFJldHVybnM6CisgKiAgICAgIGR3X2Rldl9leHRlbnNpb246ICAgICBQdHIgdG8gdGhlIE5leHQgRGV2IEV4dGVuc2lvbgorICogICAgICAwOiAgICAgICAgICAgICAgICAgIElmIGl0IGZhaWwgdG8gR2V0IHRoZSBuZXh0IERldiBFeHRlbnNpb24KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdTMyIGRydl9nZXRfbmV4dF9kZXZfZXh0ZW5zaW9uKHUzMiBkZXZfZXh0ZW5zaW9uKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIERSViBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGRydl9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IGRydl9pbnNlcnRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydCBhIERldmljZU9iamVjdCBpbnRvIHRoZSBsaXN0IG9mIERyaXZlciBvYmplY3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHJpdmVyX29iajogICAgIEhhbmRsZSB0byBEcnZPYmplY3QKKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gRGV2aWNlT2JqZWN0IHRvIGluc2VydC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICAgICAgLUVQRVJNOiAgICAgIEdlbmVyYWwgRmFpbHVyZToKKyAqICBSZXF1aXJlczoKKyAqICAgICAgaGRydl9vYmogIT0gTlVMTCBhbmQgVmFsaWQgRFJWIEhhbmRsZS4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgRGV2aWNlIE9iamVjdCBpcyBpbnNlcnRlZCBhbmQgdGhlIExpc3QgaXMgbm90IGVtcHR5LgorICovCitleHRlcm4gaW50IGRydl9pbnNlcnRfZGV2X29iamVjdChzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaiwKKwkJCQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVtb3ZlX2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZWFyY2ggZm9yIGFuZCByZW1vdmUgYSBEZXZpY2Ugb2JqZWN0IGZyb20gdGhlIGdpdmVuIGxpc3Qgb2YgRGV2aWNlIE9iagorICogICAgICBvYmplY3RzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRyaXZlcl9vYmo6ICAgICBIYW5kbGUgdG8gRHJ2T2JqZWN0CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIERldk9iamVjdCB0byBSZW1vdmUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIFVuYWJsZSB0byBmaW5kIGRldl9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkcnZfb2JqICE9IE5VTEwgYW5kIGEgVmFsaWQgRFJWIEhhbmRsZS4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICAgICAgTGlzdCBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eS4KKyAqICBFbnN1cmVzOgorICogICAgICBMaXN0IGVpdGhlciBkb2VzIG5vdCBleGlzdCAoTlVMTCksIG9yIGlzIG5vdCBlbXB0eSBpZiBpdCBkb2VzIGV4aXN0LgorICovCitleHRlcm4gaW50IGRydl9yZW1vdmVfZGV2X29iamVjdChzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaiwKKwkJCQkJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVxdWVzdF9yZXNvdXJjZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBc3NpZ25zIHRoZSBSZXNvdXJjZXMgb3IgUmVsZWFzZXMgdGhlbS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkd19jb250ZXh0OiAgICAgICAgICBQYXRoIHRvIHRoZSBkcml2ZXIgUmVnaXN0cnkgS2V5LgorICogICAgICBkZXZfbm9kZV9zdHJnOiAgICAgUHRyIHRvIGRldl9ub2RlIFN0cmluZyBzdG9yZWQgaW4gdGhlIERldmljZSBFeHQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBzdWNjZXNzOyBGQUxTRSBvdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIFJlc291cmNlcyBhcmUgYXNzaWduZWQgYmFzZWQgb24gQnVzIHR5cGUuCisgKiAgICAgIFRoZSBoYXJkd2FyZSBpcyBpbml0aWFsaXplZC4gUmVzb3VyY2UgaW5mb3JtYXRpb24gaXMKKyAqICAgICAgZ2F0aGVyZWQgZnJvbSB0aGUgUmVnaXN0cnkoSVNBLCBQQ01DSUEpb3Igc2Nhbm5lZChQQ0kpCisgKiAgICAgIFJlc291cmNlIHN0cnVjdHVyZSBpcyBzdG9yZWQgaW4gdGhlIHJlZ2lzdHJ5IHdoaWNoIHdpbGwgYmUKKyAqICAgICAgbGF0ZXIgdXNlZCBieSB0aGUgQ0ZHIG1vZHVsZS4KKyAqLworZXh0ZXJuIGludCBkcnZfcmVxdWVzdF9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsCisJCQkJCXUzMiAqZGV2X25vZGVfc3RyZyk7CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X3JlbGVhc2VfcmVzb3VyY2VzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQXNzaWducyB0aGUgUmVzb3VyY2VzIG9yIFJlbGVhc2VzIHRoZW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZHdfY29udGV4dDogICAgICBQYXRoIHRvIHRoZSBkcml2ZXIgUmVnaXN0cnkgS2V5LgorICogICAgICBoZHJ2X29iajogICAgIEhhbmRsZSB0byB0aGUgRHJpdmVyIE9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBUaGUgUmVzb3VyY2VzIGFyZSByZWxlYXNlZCBiYXNlZCBvbiBCdXMgdHlwZS4KKyAqICAgICAgUmVzb3VyY2Ugc3RydWN0dXJlIGlzIGRlbGV0ZWQgZnJvbSB0aGUgcmVnaXN0cnkKKyAqLworZXh0ZXJuIGludCBkcnZfcmVsZWFzZV9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsCisJCQkJCXN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaik7CisKKy8qKgorICogZHJ2X3JlcXVlc3RfYnJpZGdlX3Jlc19kc3AoKSAtIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqIEBwaG9zdF9yZXNvdXJjZXM6ICBwb2ludGVyIHRvIGhvc3QgcmVzb3VyY2VzLgorICovCitpbnQgZHJ2X3JlcXVlc3RfYnJpZGdlX3Jlc19kc3Aodm9pZCAqKnBob3N0X3Jlc291cmNlcyk7CisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKK3ZvaWQgYnJpZGdlX3JlY292ZXJfc2NoZWR1bGUodm9pZCk7CisjZW5kaWYKKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfcG9vbF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVXNlcyB0aGUgcGh5c2ljYWwgbWVtb3J5IGNodW5rIHBhc3NlZCBmb3IgaW50ZXJuYWwgY29uc2l0ZW50IG1lbW9yeQorICogICAgICBhbGxvY2F0aW9ucy4KKyAqICAgICAgcGh5c2ljYWwgYWRkcmVzcyBiYXNlZCBvbiB0aGUgcGFnZSBmcmFtZSBhZGRyZXNzLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHBvb2xfcGh5c19iYXNlICBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgcG9vbC4KKyAqICAgICAgcG9vbF9zaXplICAgICAgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgbWVtb3J5IHBvb2wuCisgKiAgUmV0dXJuczoKKyAqICAgICAgbm9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gdmFsaWQgcGh5c2ljYWwgYWRkcmVzcyBmb3IgdGhlIGJhc2UgYW5kIHNpemUgPiAwCisgKi8KK2V4dGVybiB2b2lkIG1lbV9leHRfcGh5c19wb29sX2luaXQodTMyIHBvb2xfcGh5c19iYXNlLCB1MzIgcG9vbF9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlID09PT09PT09CisgKi8KK2V4dGVybiB2b2lkIG1lbV9leHRfcGh5c19wb29sX3JlbGVhc2Uodm9pZCk7CisKKy8qICA9PT09PT09PSBtZW1fYWxsb2NfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGJ5dGVfc2l6ZTogICAgIE51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZS4KKyAqICAgICAgYWxpZ25fbWFzazogICAgQWxpZ25tZW50IE1hc2suCisgKiAgICAgIHBoeXNpY2FsX2FkZHJlc3M6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqICBSZXR1cm5zOgorICogICAgICBQb2ludGVyIHRvIGEgYmxvY2sgb2YgbWVtb3J5OworICogICAgICBOVUxMIGlmIG1lbW9yeSBjb3VsZG4ndCBiZSBhbGxvY2F0ZWQsIG9yIGlmIGJ5dGVfc2l6ZSA9PSAwLgorICogIFJlcXVpcmVzOgorICogICAgICBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgVGhlIHJldHVybmVkIHBvaW50ZXIsIGlmIG5vdCBOVUxMLCBwb2ludHMgdG8gYSB2YWxpZCBtZW1vcnkgYmxvY2sgb2YKKyAqICAgICAgdGhlIHNpemUgcmVxdWVzdGVkLiAgUmV0dXJuZWQgcGh5c2ljYWwgYWRkcmVzcyByZWZlcnMgdG8gcGh5c2ljYWwKKyAqICAgICAgbG9jYXRpb24gb2YgbWVtb3J5LgorICovCitleHRlcm4gdm9pZCAqbWVtX2FsbG9jX3BoeXNfbWVtKHUzMiBieXRlX3NpemUsCisJCQkJdTMyIGFsaWduX21hc2ssIHUzMiAqcGh5c2ljYWxfYWRkcmVzcyk7CisKKy8qCisgKiAgPT09PT09PT0gbWVtX2ZyZWVfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIHRoZSBnaXZlbiBibG9jayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHZpcnR1YWxfYWRkcmVzczogIFBvaW50ZXIgdG8gdmlydHVhbCBtZW1vcnkgcmVnaW9uIGFsbG9jYXRlZAorICogICAgICBieSBtZW1fYWxsb2NfcGh5c19tZW0oKS4KKyAqICAgICAgcGh5c2ljYWxfYWRkcmVzczogIFBvaW50ZXIgdG8gcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbiAgYWxsb2NhdGVkCisgKiAgICAgIGJ5IG1lbV9hbGxvY19waHlzX21lbSgpLgorICogICAgICBieXRlX3NpemU6ICBTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGFsbG9jYXRlZCBieSBtZW1fYWxsb2NfcGh5c19tZW0oKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBNRU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBhIHZhbGlkIG1lbW9yeSBhZGRyZXNzIHJldHVybmVkIGJ5CisgKiAgICAgICAgICBtZW1fYWxsb2NfcGh5c19tZW0oKQorICogIEVuc3VyZXM6CisgKiAgICAgIHZpcnR1YWxfYWRkcmVzcyBpcyBubyBsb25nZXIgYSB2YWxpZCBwb2ludGVyIHRvIG1lbW9yeS4KKyAqLworZXh0ZXJuIHZvaWQgbWVtX2ZyZWVfcGh5c19tZW0odm9pZCAqdmlydHVhbF9hZGRyZXNzLAorCQkJICAgICAgdTMyIHBoeXNpY2FsX2FkZHJlc3MsIHUzMiBieXRlX3NpemUpOworCisvKgorICogID09PT09PT09IE1FTV9MSU5FQVJfQUREUkVTUyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgbGluZWFyIGFkZHJlc3MgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcGh5c2ljYWwgYWRkcmVzcy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwaHlzX2FkZHI6ICBQaHlzaWNhbCBhZGRyZXNzIHRvIGJlIG1hcHBlZC4KKyAqICAgICAgYnl0ZV9zaXplOiAgICAgTnVtYmVyIG9mIGJ5dGVzIGluIHBoeXNpY2FsIHJhbmdlIHRvIG1hcC4KKyAqICBSZXR1cm5zOgorICogICAgICBUaGUgY29ycmVzcG9uZGluZyBsaW5lYXIgYWRkcmVzcywgb3IgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1FTSBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIE5vdGVzOgorICogICAgICBJZiB2YWxpZCBsaW5lYXIgYWRkcmVzcyBpcyByZXR1cm5lZCwgYmUgc3VyZSB0byBjYWxsCisgKiAgICAgIE1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUygpLgorICovCisjZGVmaW5lIE1FTV9MSU5FQVJfQUREUkVTUyhwaHlfYWRkciwgYnl0ZV9zaXplKSBwaHlfYWRkcgorCisvKgorICogID09PT09PT09IE1FTV9VTk1BUF9MSU5FQVJfQUREUkVTUyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFVubWFwIHRoZSBsaW5lYXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGJhc2VfYWRkcjogUHRyIHRvIG1hcHBlZCBtZW1vcnkgKGFzIHJldHVybmVkIGJ5IE1FTV9MSU5FQVJfQUREUkVTUygpKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICAtIE1FTSBpbml0aWFsaXplZC4KKyAqICAgICAgLSBiYXNlX2FkZHIgaXMgYSB2YWxpZCBsaW5lYXIgYWRkcmVzcyBtYXBwZWQgaW4gTUVNX0xJTkVBUl9BRERSRVNTLgorICogIEVuc3VyZXM6CisgKiAgICAgIC0gYmFzZV9hZGRyIG5vIGxvbmdlciBwb2ludHMgdG8gYSB2YWxpZCBsaW5lYXIgYWRkcmVzcy4KKyAqLworI2RlZmluZSBNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoYmFzZV9hZGRyKSB7fQorCisjZW5kaWYgLyogRFJWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RydmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnZkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyMDkxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kcnZkZWZzLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIGRydmRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9uIG9mIGNvbW1vbiBzdHJ1Y3QgYmV0d2VlbiBkc3BkZWZzLmggYW5kIGRydi5oLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgRFJWREVGU18KKyNkZWZpbmUgRFJWREVGU18KKworLyogQnJpZGdlIERyaXZlciBPYmplY3QgKi8KK3N0cnVjdCBkcnZfb2JqZWN0OworCisjZW5kaWYgLyogRFJWREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BhcGktaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE1YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICogZHNwYXBpLWlvY3RsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29udGFpbnMgc3RydWN0dXJlcyBhbmQgY29tbWFuZHMgdGhhdCBhcmUgdXNlZCBmb3IgaW50ZXJhY3Rpb24KKyAqIGJldHdlZW4gdGhlIEREU1AgQVBJIGFuZCBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUEFQSUlPQ1RMXworI2RlZmluZSBEU1BBUElJT0NUTF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4KKwordW5pb24gdHJhcHBlZF9hcmdzIHsKKworCS8qIE1HUiBNb2R1bGUgKi8KKwlzdHJ1Y3QgeworCQl1MzIgbm9kZV9pZDsKKwkJc3RydWN0IGRzcF9uZGJwcm9wcyBfX3VzZXIgKnBuZGJfcHJvcHM7CisJCXUzMiB1bmRiX3Byb3BzX3NpemU7CisJCXUzMiBfX3VzZXIgKnB1X251bV9ub2RlczsKKwl9IGFyZ3NfbWdyX2VudW1ub2RlX2luZm87CisKKwlzdHJ1Y3QgeworCQl1MzIgcHJvY2Vzc29yX2lkOworCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gX191c2VyICpwcm9jZXNzb3JfaW5mbzsKKwkJdTMyIHByb2Nlc3Nvcl9pbmZvX3NpemU7CisJCXUzMiBfX3VzZXIgKnB1X251bV9wcm9jczsKKwl9IGFyZ3NfbWdyX2VudW1wcm9jX2luZm87CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqOworCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlOworCQljaGFyICpwc3pfcGF0aF9uYW1lOworCX0gYXJnc19tZ3JfcmVnaXN0ZXJvYmplY3Q7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqOworCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlOworCX0gYXJnc19tZ3JfdW5yZWdpc3Rlcm9iamVjdDsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIF9fdXNlciAqX191c2VyICphbm90aWZpY2F0aW9uczsKKwkJdTMyIGNvdW50OworCQl1MzIgX191c2VyICpwdV9pbmRleDsKKwkJdTMyIHV0aW1lb3V0OworCX0gYXJnc19tZ3Jfd2FpdDsKKworCS8qIFBST0MgTW9kdWxlICovCisJc3RydWN0IHsKKwkJdTMyIHByb2Nlc3Nvcl9pZDsKKwkJc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4gX191c2VyICphdHRyX2luOworCQl2b2lkICpfX3VzZXIgKnBoX3Byb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19hdHRhY2g7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1MzIgZHdfY21kOworCQlzdHJ1Y3QgZHNwX2NiZGF0YSBfX3VzZXIgKnBhcmdzOworCX0gYXJnc19wcm9jX2N0cmw7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCX0gYXJnc19wcm9jX2RldGFjaDsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXZvaWQgKl9fdXNlciAqbm9kZV90YWI7CisJCXUzMiBub2RlX3RhYl9zaXplOworCQl1MzIgX191c2VyICpwdV9udW1fbm9kZXM7CisJCXUzMiBfX3VzZXIgKnB1X2FsbG9jYXRlZDsKKwl9IGFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdTMyIHJlc291cmNlX3R5cGU7CisJCXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvICpyZXNvdXJjZV9pbmZvOworCQl1MzIgcmVzb3VyY2VfaW5mb19zaXplOworCX0gYXJnc19wcm9jX2VudW1yZXNvdXJjZXM7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIF9fdXNlciAqcHJvY19zdGF0ZV9vYmo7CisJCXUzMiBzdGF0ZV9pbmZvX3NpemU7CisJfSBhcmdzX3Byb2NfZ2V0c3RhdGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1OCBfX3VzZXIgKnBidWY7CisJCXU4IF9fdXNlciAqcHNpemU7CisJCXUzMiBtYXhfc2l6ZTsKKwl9IGFyZ3NfcHJvY19nZXR0cmFjZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXMzMiBhcmdjX2luZGV4OworCQljaGFyIF9fdXNlciAqX191c2VyICp1c2VyX2FyZ3M7CisJCWNoYXIgKl9fdXNlciAqdXNlcl9lbnZwOworCX0gYXJnc19wcm9jX2xvYWQ7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl1MzIgZXZlbnRfbWFzazsKKwkJdTMyIG5vdGlmeV90eXBlOworCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBfX3VzZXIgKmhub3RpZmljYXRpb247CisJfSBhcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19zdGFydDsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpfX3VzZXIgKnBwX3Jzdl9hZGRyOworCX0gYXJnc19wcm9jX3Jzdm1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpwcnN2X2FkZHI7CisJfSBhcmdzX3Byb2NfdW5yc3ZtZW07CisKKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQl2b2lkICpwbXB1X2FkZHI7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICpyZXFfYWRkcjsKKwkJdm9pZCAqX191c2VyICpwcF9tYXBfYWRkcjsKKwkJdTMyIHVsX21hcF9hdHRyOworCX0gYXJnc19wcm9jX21hcG1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXUzMiB1bF9zaXplOworCQl2b2lkICptYXBfYWRkcjsKKwl9IGFyZ3NfcHJvY191bm1hcG1lbTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhwcm9jZXNzb3I7CisJCXZvaWQgKnBtcHVfYWRkcjsKKwkJdTMyIHVsX3NpemU7CisJCXUzMiBkaXI7CisJfSBhcmdzX3Byb2NfZG1hOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdm9pZCAqcG1wdV9hZGRyOworCQl1MzIgdWxfc2l6ZTsKKwkJdTMyIHVsX2ZsYWdzOworCX0gYXJnc19wcm9jX2ZsdXNobWVtb3J5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwl9IGFyZ3NfcHJvY19zdG9wOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJdm9pZCAqcG1wdV9hZGRyOworCQl1MzIgdWxfc2l6ZTsKKwl9IGFyZ3NfcHJvY19pbnZhbGlkYXRlbWVtb3J5OworCisJLyogTk9ERSBNb2R1bGUgKi8KKwlzdHJ1Y3QgeworCQl2b2lkICpocHJvY2Vzc29yOworCQlzdHJ1Y3QgZHNwX3V1aWQgX191c2VyICpub2RlX2lkX3B0cjsKKwkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICpwYXJnczsKKwkJc3RydWN0IGRzcF9ub2RlYXR0cmluIF9fdXNlciAqYXR0cl9pbjsKKwkJdm9pZCAqX191c2VyICpwaF9ub2RlOworCX0gYXJnc19ub2RlX2FsbG9jYXRlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXUzMiB1c2l6ZTsKKwkJc3RydWN0IGRzcF9idWZmZXJhdHRyIF9fdXNlciAqcGF0dHI7CisJCXU4ICpfX3VzZXIgKnBidWZmZXI7CisJfSBhcmdzX25vZGVfYWxsb2Ntc2didWY7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJczMyIHByaW87CisJfSBhcmdzX25vZGVfY2hhbmdlcHJpb3JpdHk7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJdTMyIHN0cmVhbV9pZDsKKwkJdm9pZCAqb3RoZXJfbm9kZTsKKwkJdTMyIG90aGVyX3N0cmVhbTsKKwkJc3RydWN0IGRzcF9zdHJtYXR0ciBfX3VzZXIgKnBhdHRyczsKKwkJc3RydWN0IGRzcF9jYmRhdGEgX191c2VyICpjb25uX3BhcmFtOworCX0gYXJnc19ub2RlX2Nvbm5lY3Q7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwl9IGFyZ3Nfbm9kZV9jcmVhdGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwl9IGFyZ3Nfbm9kZV9kZWxldGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9idWZmZXJhdHRyIF9fdXNlciAqcGF0dHI7CisJCXU4ICpwYnVmZmVyOworCX0gYXJnc19ub2RlX2ZyZWVtc2didWY7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9ub2RlYXR0ciBfX3VzZXIgKnBhdHRyOworCQl1MzIgYXR0cl9zaXplOworCX0gYXJnc19ub2RlX2dldGF0dHI7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJc3RydWN0IGRzcF9tc2cgX191c2VyICptZXNzYWdlOworCQl1MzIgdXRpbWVvdXQ7CisJfSBhcmdzX25vZGVfZ2V0bWVzc2FnZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhub2RlOworCX0gYXJnc19ub2RlX3BhdXNlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXN0cnVjdCBkc3BfbXNnIF9fdXNlciAqbWVzc2FnZTsKKwkJdTMyIHV0aW1lb3V0OworCX0gYXJnc19ub2RlX3B1dG1lc3NhZ2U7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpobm9kZTsKKwkJdTMyIGV2ZW50X21hc2s7CisJCXUzMiBub3RpZnlfdHlwZTsKKwkJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gX191c2VyICpobm90aWZpY2F0aW9uOworCX0gYXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5OworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJfSBhcmdzX25vZGVfcnVuOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCWludCBfX3VzZXIgKnBzdGF0dXM7CisJfSBhcmdzX25vZGVfdGVybWluYXRlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJc3RydWN0IGRzcF91dWlkIF9fdXNlciAqbm9kZV9pZF9wdHI7CisJCXN0cnVjdCBkc3BfbmRicHJvcHMgX191c2VyICpub2RlX3Byb3BzOworCX0gYXJnc19ub2RlX2dldHV1aWRwcm9wczsKKworCS8qIFNUUk0gbW9kdWxlICovCisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1MzIgdXNpemU7CisJCXU4ICpfX3VzZXIgKmFwX2J1ZmZlcjsKKwkJdTMyIG51bV9idWZzOworCX0gYXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHN0cmVhbTsKKwl9IGFyZ3Nfc3RybV9jbG9zZTsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhzdHJlYW07CisJCXU4ICpfX3VzZXIgKmFwX2J1ZmZlcjsKKwkJdTMyIG51bV9idWZzOworCX0gYXJnc19zdHJtX2ZyZWVidWZmZXI7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl2b2lkICoqcGhfZXZlbnQ7CisJfSBhcmdzX3N0cm1fZ2V0ZXZlbnRoYW5kbGU7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQlzdHJ1Y3Qgc3RyZWFtX2luZm8gX191c2VyICpzdHJlYW1faW5mbzsKKwkJdTMyIHN0cmVhbV9pbmZvX3NpemU7CisJfSBhcmdzX3N0cm1fZ2V0aW5mbzsKKworCXN0cnVjdCB7CisJCXZvaWQgKmhzdHJlYW07CisJCWJvb2wgZmx1c2hfZmxhZzsKKwl9IGFyZ3Nfc3RybV9pZGxlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHN0cmVhbTsKKwkJdTggKnBidWZmZXI7CisJCXUzMiBkd19ieXRlczsKKwkJdTMyIGR3X2J1Zl9zaXplOworCQl1MzIgZHdfYXJnOworCX0gYXJnc19zdHJtX2lzc3VlOworCisJc3RydWN0IHsKKwkJdm9pZCAqaG5vZGU7CisJCXUzMiBkaXJlY3Rpb247CisJCXUzMiBpbmRleDsKKwkJc3RydWN0IHN0cm1fYXR0ciBfX3VzZXIgKmF0dHJfaW47CisJCXZvaWQgKl9fdXNlciAqcGhfc3RyZWFtOworCX0gYXJnc19zdHJtX29wZW47CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1OCAqX191c2VyICpidWZfcHRyOworCQl1MzIgX191c2VyICpieXRlczsKKwkJdTMyIF9fdXNlciAqYnVmX3NpemVfcHRyOworCQl1MzIgX191c2VyICpwZHdfYXJnOworCX0gYXJnc19zdHJtX3JlY2xhaW07CisKKwlzdHJ1Y3QgeworCQl2b2lkICpoc3RyZWFtOworCQl1MzIgZXZlbnRfbWFzazsKKwkJdTMyIG5vdGlmeV90eXBlOworCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBfX3VzZXIgKmhub3RpZmljYXRpb247CisJfSBhcmdzX3N0cm1fcmVnaXN0ZXJub3RpZnk7CisKKwlzdHJ1Y3QgeworCQl2b2lkICpfX3VzZXIgKnN0cmVhbV90YWI7CisJCXUzMiBzdHJtX251bTsKKwkJdTMyIF9fdXNlciAqcG1hc2s7CisJCXUzMiB1dGltZW91dDsKKwl9IGFyZ3Nfc3RybV9zZWxlY3Q7CisKKwkvKiBDTU0gTW9kdWxlICovCisJc3RydWN0IHsKKwkJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCQl1MzIgdXNpemU7CisJCXN0cnVjdCBjbW1fYXR0cnMgKnBhdHRyczsKKwkJdm9pZCAqKnBwX2J1Zl92YTsKKwl9IGFyZ3NfY21tX2FsbG9jYnVmOworCisJc3RydWN0IHsKKwkJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCQl2b2lkICpidWZfcGE7CisJCXUzMiB1bF9zZWdfaWQ7CisJfSBhcmdzX2NtbV9mcmVlYnVmOworCisJc3RydWN0IHsKKwkJdm9pZCAqaHByb2Nlc3NvcjsKKwkJc3RydWN0IGNtbV9vYmplY3QgKl9fdXNlciAqcGhfY21tX21ncjsKKwl9IGFyZ3NfY21tX2dldGhhbmRsZTsKKworCXN0cnVjdCB7CisJCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsKKwkJc3RydWN0IGNtbV9pbmZvIF9fdXNlciAqY21tX2luZm9fb2JqOworCX0gYXJnc19jbW1fZ2V0aW5mbzsKKworCS8qIFVUSUwgbW9kdWxlICovCisJc3RydWN0IHsKKwkJczMyIHV0aWxfYXJnYzsKKwkJY2hhciAqKnBwX2FyZ3Y7CisJfSBhcmdzX3V0aWxfdGVzdGRsbDsKK307CisKKy8qCisgKiBEc3BicmlkZ2UgSW9jdGwgbnVtYmVyaW5nIHNjaGVtZQorICoKKyAqICAgIDcgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCAgTW9kdWxlICAgfCAgIElvY3RsIE51bWJlciAgICB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgfCB4IHwgeCB8IHggfCAwIHwgMCB8IDAgfCAwIHwgMCB8CisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogSW9jdGwgZHJpdmVyIGlkZW50aWZpZXIgKi8KKyNkZWZpbmUgREIJCTB4REIKKworLyoKKyAqIEZvbGxvd2luZyBhcmUgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1vZHVsZSBpb2N0bHMsIHRoaXMgaXMgbmVlZGVkCisgKiBpbiBjYXNlIG5ldyBpb2N0bHMgYXJlIGludHJvZHVjZWQuCisgKi8KKyNkZWZpbmUgREJfTU9EVUxFX01BU0sJCTB4RTAKKyNkZWZpbmUgREJfSU9DX01BU0sJCTB4MUYKKworLyogSW9jdGwgbW9kdWxlIG1hc2tzICovCisjZGVmaW5lIERCX01HUgkJMHgwCisjZGVmaW5lIERCX1BST0MJCTB4MjAKKyNkZWZpbmUgREJfTk9ERQkJMHg0MAorI2RlZmluZSBEQl9TVFJNCQkweDYwCisjZGVmaW5lIERCX0NNTQkJMHg4MAorCisjZGVmaW5lIERCX01PRFVMRV9TSElGVAkJNQorCisvKiBVc2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW9jdGwgcGVyIGRzcGJyaWRnZSBtb2R1bGUgKi8KKyNkZWZpbmUgREJfSU9DKG1vZHVsZSwgbnVtKSBcCisJCQkoKChtb2R1bGUpICYgREJfTU9EVUxFX01BU0spIHwgKChudW0pICYgREJfSU9DX01BU0spKQorLyogVXNlZCB0byBnZXQgZHNwYnJpZGdlIGlvY3RsIG1vZHVsZSAqLworI2RlZmluZSBEQl9HRVRfTU9EVUxFKGNtZCkJKChjbWQpICYgREJfTU9EVUxFX01BU0spCisvKiBVc2VkIHRvIGdldCBkc3BicmlkZ2UgaW9jdGwgbnVtYmVyICovCisjZGVmaW5lIERCX0dFVF9JT0MoY21kKQkJKChjbWQpICYgREJfSU9DX01BU0spCisKKy8qIFRPRE86IFJlbW92ZSBkZXByZWNhdGVkIGFuZCBub3QgaW1wbGVtZW50ZWQgKi8KKworLyogTUdSIE1vZHVsZSAqLworI2RlZmluZSBNR1JfRU5VTU5PREVfSU5GTwlfSU9XUihEQiwgREJfSU9DKERCX01HUiwgMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE1HUl9FTlVNUFJPQ19JTkZPCV9JT1dSKERCLCBEQl9JT0MoREJfTUdSLCAxKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUdSX1JFR0lTVEVST0JKRUNUCV9JT1dSKERCLCBEQl9JT0MoREJfTUdSLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTUdSX1VOUkVHSVNURVJPQkpFQ1QJX0lPV1IoREIsIERCX0lPQyhEQl9NR1IsIDMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBNR1JfV0FJVAkJX0lPV1IoREIsIERCX0lPQyhEQl9NR1IsIDQpLCB1bnNpZ25lZCBsb25nKQorLyogTUdSX0dFVF9QUk9DX1JFUyBEZXByZWNhdGVkICovCisjZGVmaW5lIE1HUl9HRVRfUFJPQ19SRVMJX0lPUihEQiwgREJfSU9DKERCX01HUiwgNSksIHVuc2lnbmVkIGxvbmcpCisKKy8qIFBST0MgTW9kdWxlICovCisjZGVmaW5lIFBST0NfQVRUQUNICQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0NUUkwJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAxKSwgdW5zaWduZWQgbG9uZykKKy8qIFBST0NfREVUQUNIIERlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgUFJPQ19ERVRBQ0gJCV9JT1IoREIsIERCX0lPQyhEQl9QUk9DLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTlVNTk9ERQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCAzKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTlVNUkVTT1VSQ0VTCV9JT1dSKERCLCBEQl9JT0MoREJfUFJPQywgNCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfR0VUX1NUQVRFCQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0dFVF9UUkFDRQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19MT0FECQlfSU9XKERCLCBEQl9JT0MoREJfUFJPQywgNyksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfUkVHSVNURVJOT1RJRlkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCA4KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19TVEFSVAkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDkpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX1JTVk1FTQkJX0lPV1IoREIsIERCX0lPQyhEQl9QUk9DLCAxMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfVU5SU1ZNRU0JCV9JT1coREIsIERCX0lPQyhEQl9QUk9DLCAxMSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFBST0NfTUFQTUVNCQlfSU9XUihEQiwgREJfSU9DKERCX1BST0MsIDEyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19VTk1BUE1FTQkJX0lPUihEQiwgREJfSU9DKERCX1BST0MsIDEzKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19GTFVTSE1FTU9SWQlfSU9XKERCLCBEQl9JT0MoREJfUFJPQywgMTQpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX1NUT1AJCV9JT1dSKERCLCBEQl9JT0MoREJfUFJPQywgMTUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBQUk9DX0lOVkFMSURBVEVNRU1PUlkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19CRUdJTkRNQQkJX0lPVyhEQiwgREJfSU9DKERCX1BST0MsIDE3KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUFJPQ19FTkRETUEJCV9JT1coREIsIERCX0lPQyhEQl9QUk9DLCAxOCksIHVuc2lnbmVkIGxvbmcpCisKKy8qIE5PREUgTW9kdWxlICovCisjZGVmaW5lIE5PREVfQUxMT0NBVEUJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfQUxMT0NNU0dCVUYJX0lPV1IoREIsIERCX0lPQyhEQl9OT0RFLCAxKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9DSEFOR0VQUklPUklUWQlfSU9XKERCLCBEQl9JT0MoREJfTk9ERSwgMiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfQ09OTkVDVAkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0NSRUFURQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDQpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0RFTEVURQkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0ZSRUVNU0dCVUYJCV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA2KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9HRVRBVFRSCQlfSU9XUihEQiwgREJfSU9DKERCX05PREUsIDcpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0dFVE1FU1NBR0UJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgOCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIE5PREVfUEFVU0UJCV9JT1coREIsIERCX0lPQyhEQl9OT0RFLCA5KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9QVVRNRVNTQUdFCQlfSU9XKERCLCBEQl9JT0MoREJfTk9ERSwgMTApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMTEpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX1JVTgkJX0lPVyhEQiwgREJfSU9DKERCX05PREUsIDEyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgTk9ERV9URVJNSU5BVEUJCV9JT1dSKERCLCBEQl9JT0MoREJfTk9ERSwgMTMpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBOT0RFX0dFVFVVSURQUk9QUwlfSU9XUihEQiwgREJfSU9DKERCX05PREUsIDE0KSwgdW5zaWduZWQgbG9uZykKKworLyogU1RSTSBNb2R1bGUgKi8KKyNkZWZpbmUgU1RSTV9BTExPQ0FURUJVRkZFUglfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDApLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX0NMT1NFCQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgMSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fRlJFRUJVRkZFUgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCAyKSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgU1RSTV9HRVRFVkVOVEhBTkRMRQlfSU8oREIsIERCX0lPQyhEQl9TVFJNLCAzKSkJLyogTm90IEltcGwnZCAqLworI2RlZmluZSBTVFJNX0dFVElORk8JCV9JT1dSKERCLCBEQl9JT0MoREJfU1RSTSwgNCksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fSURMRQkJX0lPVyhEQiwgREJfSU9DKERCX1NUUk0sIDUpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX0lTU1VFCQlfSU9XKERCLCBEQl9JT0MoREJfU1RSTSwgNiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fT1BFTgkJX0lPV1IoREIsIERCX0lPQyhEQl9TVFJNLCA3KSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgU1RSTV9SRUNMQUlNCQlfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDgpLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBTVFJNX1JFR0lTVEVSTk9USUZZCV9JT1dSKERCLCBEQl9JT0MoREJfU1RSTSwgOSksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIFNUUk1fU0VMRUNUCQlfSU9XUihEQiwgREJfSU9DKERCX1NUUk0sIDEwKSwgdW5zaWduZWQgbG9uZykKKworLyogQ01NIE1vZHVsZSAqLworI2RlZmluZSBDTU1fQUxMT0NCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMCkpCS8qIE5vdCBJbXBsJ2QgKi8KKyNkZWZpbmUgQ01NX0ZSRUVCVUYJCV9JTyhEQiwgREJfSU9DKERCX0NNTSwgMSkpCS8qIE5vdCBJbXBsJ2QgKi8KKyNkZWZpbmUgQ01NX0dFVEhBTkRMRQkJX0lPUihEQiwgREJfSU9DKERCX0NNTSwgMiksIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIENNTV9HRVRJTkZPCQlfSU9SKERCLCBEQl9JT0MoREJfQ01NLCAzKSwgdW5zaWduZWQgbG9uZykKKworI2VuZGlmIC8qIERTUEFQSUlPQ1RMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGFwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OWM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwYXBpLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBkc3BhcGkuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbmNsdWRlcyB0aGUgd3JhcHBlciBmdW5jdGlvbnMgY2FsbGVkIGRpcmVjdGx5IGJ5IHRoZQorICogRGV2aWNlSU9Db250cm9sIGludGVyZmFjZS4KKyAqCisgKiBOb3RlczoKKyAqICAgQnJpZGdlIHNlcnZpY2VzIGV4cG9ydGVkIHRvIEJyaWRnZSBkcml2ZXIgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBEU1BBUEkgb24KKyAqICAgYmVoYWxmIG9mIHRoZSBCcmlkZ2UgZHJpdmVyLiBCcmlkZ2UgZHJpdmVyIG11c3Qgbm90IGNhbGwgbW9kdWxlIEluaXQvRXhpdAorICogICBmdW5jdGlvbnMuCisgKgorICogICBUbyBlbnN1cmUgQnJpZGdlIGRyaXZlciBiaW5hcnkgY29tcGF0aWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3JtcywKKyAqICAgZm9yIHRoZSBzYW1lIHByb2Nlc3NvciwgYSBCcmlkZ2UgZHJpdmVyIG11c3QgcmVzdHJpY3QgaXRzIHVzYWdlIG9mIHN5c3RlbQorICogICBzZXJ2aWNlcyB0byB0aG9zZSBleHBvcnRlZCBieSB0aGUgRFNQQVBJIGxpYnJhcnkuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEU1BBUElfCisjZGVmaW5lIERTUEFQSV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGktaW9jdGwuaD4KKworLyogVGhpcyBCUkQgQVBJIExpYnJhcnkgVmVyc2lvbjogKi8KKyNkZWZpbmUgQlJEX0FQSV9NQUpPUl9WRVJTSU9OICAgKHUzMik4CS8qIC44eCAtIEFscGhhLCAuOXggLSBCZXRhLCAxLnggRkNTICovCisjZGVmaW5lIEJSRF9BUElfTUlOT1JfVkVSU0lPTiAgICh1MzIpMAorCisvKgorICogID09PT09PT09IGFwaV9jYWxsX2Rldl9pb2N0bCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbGwgdGhlICh3cmFwcGVyKSBmdW5jdGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgQVBJIElPQ1RMLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNtZDogICAgICAgIElPQ1RMIGlkLCBiYXNlIDAuCisgKiAgICAgIGFyZ3M6ICAgICAgIEFyZ3VtZW50IHN0cnVjdHVyZS4KKyAqICAgICAgcmVzdWx0OgorICogIFJldHVybnM6CisgKiAgICAgIDAgaWYgY29tbWFuZCBjYWxsZWQ7IC1FSU5WQUwgaWYgY29tbWFuZCBub3QgaW4gSU9DVEwKKyAqICAgICAgdGFibGUuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBhcGlfY2FsbF9kZXZfaW9jdGwodW5zaWduZWQgaW50IGNtZCwKKwkJCQkgICAgICB1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsCisJCQkJICAgICAgdTMyICpyZXN1bHQsIHZvaWQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IGFwaV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBtb2R1bGVzIHVzZWQgYnkgQnJpZGdlIEFQSS4KKyAqICAgICAgVGhpcyBwcm9jZWR1cmUgaXMgY2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIG90aGVyd2lzZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBhcGlfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBhcGlfaW5pdF9jb21wbGV0ZTIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQZXJmb3JtIGFueSByZXF1aXJlZCBicmlkZ2UgaW5pdGlhbGl6YXRpb24gd2hpY2ggY2Fubm90CisgKiAgICAgIGJlIHBlcmZvcm1lZCBpbiBhcGlfaW5pdCgpIG9yIGRldl9zdGFydF9kZXZpY2UoKSBkdWUKKyAqICAgICAgdG8gdGhlIGZhY3QgdGhhdCBzb21lIHNlcnZpY2VzIGFyZSBub3QgeWV0CisgKiAgICAgIGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgQWxsb3cgdGhpcyBkZXZpY2UgdG8gbG9hZAorICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgQnJpZGdlIEFQSSBpbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IGFwaV9pbml0X2NvbXBsZXRlMih2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBhcGlfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEV4aXQgYWxsIG1vZHVsZXMgaW5pdGlhbGl6ZWQgaW4gYXBpX2luaXQodm9pZCkuCisgKiAgICAgIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBhcGlfaW5pdCh2b2lkKSB3YXMgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzIGFjcXVpcmVkIGluIGFwaV9pbml0KHZvaWQpIGFyZSBmcmVlZC4KKyAqLworZXh0ZXJuIHZvaWQgYXBpX2V4aXQodm9pZCk7CisKKy8qIE1HUiB3cmFwcGVyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHUzMiBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG1ncndyYXBfZW51bV9wcm9jX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbWdyd3JhcF9yZWdpc3Rlcl9vYmplY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBtZ3J3cmFwX3dhaXRfZm9yX2JyaWRnZV9ldmVudHModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCQkgIHZvaWQgKnByX2N0eHQpOworCitleHRlcm4gdTMyIG1ncndyYXBfZ2V0X3Byb2Nlc3NfcmVzb3VyY2VzX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCQkgICAgICB2b2lkICpwcl9jdHh0KTsKKworLyogQ1BSQyAoUHJvY2Vzc29yKSB3cmFwcGVyIEZ1bmN0aW9ucyAqLworZXh0ZXJuIHUzMiBwcm9jd3JhcF9hdHRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfY3RybCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9kZXRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZW51bV9ub2RlX2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZW51bV9yZXNvdXJjZXModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfZ2V0X3N0YXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2dldF90cmFjZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9sb2FkKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9zdGFydCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF91bl9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9tYXAodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgcHJvY3dyYXBfdW5fbWFwKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2ZsdXNoX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9zdG9wKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2ludmFsaWRhdGVfbWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHByb2N3cmFwX2JlZ2luX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBwcm9jd3JhcF9lbmRfZG1hKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CisKKy8qIE5PREUgd3JhcHBlciBmdW5jdGlvbnMgKi8KK2V4dGVybiB1MzIgbm9kZXdyYXBfYWxsb2NhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfYWxsb2NfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9jaGFuZ2VfcHJpb3JpdHkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfY29ubmVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9jcmVhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfZGVsZXRlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG5vZGV3cmFwX2ZyZWVfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfYXR0cih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9wYXVzZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9wdXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgbm9kZXdyYXBfcnVuKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIG5vZGV3cmFwX3Rlcm1pbmF0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBub2Rld3JhcF9nZXRfdXVpZF9wcm9wcyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCisvKiBTVFJNIHdyYXBwZXIgZnVuY3Rpb25zICovCitleHRlcm4gdTMyIHN0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9jbG9zZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9mcmVlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9nZXRfZXZlbnRfaGFuZGxlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX2dldF9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX2lkbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgc3RybXdyYXBfaXNzdWUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgc3RybXdyYXBfb3Blbih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9yZWNsYWltKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCk7CitleHRlcm4gdTMyIHN0cm13cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBzdHJtd3JhcF9zZWxlY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKKworZXh0ZXJuIHUzMiBjbW13cmFwX2NhbGxvY19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgY21td3JhcF9mcmVlX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworZXh0ZXJuIHUzMiBjbW13cmFwX2dldF9oYW5kbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KTsKK2V4dGVybiB1MzIgY21td3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCisjZW5kaWYgLyogRFNQQVBJXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGNobmwuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BjaG5sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0NmE1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BjaG5sLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGRzcGNobmwuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJlcyB0aGUgdXBwZXIgZWRnZSBjaGFubmVsIGNsYXNzIGxpYnJhcnkgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5CisgKiBhbGwgQnJpZGdlIGRyaXZlciAvIERTUCBBUEkgZHJpdmVyIGludGVyZmFjZSB0YWJsZXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKyAqIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IGNsYXNzIG9mIEJyaWRnZSBjaGFubmVsIGxpYnJhcnkuCisgKgorICogTm90ZXM6CisgKiAgIFRoZSBmdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUENITkxfCisjZGVmaW5lIERTUENITkxfCisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY3JlYXRlKHN0cnVjdCBjaG5sX21nciAqKmNoYW5uZWxfbWdyLAorCQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNobmxfbWdyYXR0cnMKKwkJCQkgICAgICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9kZXN0cm95KHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyKTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9vcGVuKHN0cnVjdCBjaG5sX29iamVjdCAqKmNobmwsCisJCQkJICAgc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IsCisJCQkJICAgczggY2hubF9tb2RlLAorCQkJCSAgIHUzMiBjaF9pZCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgY2hubF9hdHRyCisJCQkJICAgKnBhdHRycyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY2xvc2Uoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfYWRkX2lvX3JlcShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgICAgIHZvaWQgKmhvc3RfYnVmLAorCQkJCSAgICAgIHUzMiBieXRlX3NpemUsIHUzMiBidWZfc2l6ZSwKKwkJCQkgICAgICB1MzIgZHdfZHNwX2FkZHIsIHUzMiBkd19hcmcpOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2dldF9pb2Moc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICB1MzIgdGltZW91dCwgc3RydWN0IGNobmxfaW9jICpjaGFuX2lvYyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfY2FuY2VsX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmopOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2ZsdXNoX2lvKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgIHUzMiB0aW1lb3V0KTsKKworZXh0ZXJuIGludCBicmlkZ2VfY2hubF9nZXRfaW5mbyhzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgICBzdHJ1Y3QgY2hubF9pbmZvICpjaGFubmVsX2luZm8pOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX2dldF9tZ3JfaW5mbyhzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21nciwKKwkJCQkJdTMyIGNoX2lkLCBzdHJ1Y3QgY2hubF9tZ3JpbmZvCisJCQkJCSptZ3JfaW5mbyk7CisKK2V4dGVybiBpbnQgYnJpZGdlX2NobmxfaWRsZShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCSAgIHUzMiB0aW1lb3V0LCBib29sIGZsdXNoX2RhdGEpOworCitleHRlcm4gaW50IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqLAorCQkJCQkgICB1MzIgZXZlbnRfbWFzaywKKwkJCQkJICAgdTMyIG5vdGlmeV90eXBlLAorCQkJCQkgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCQkgICAqaG5vdGlmaWNhdGlvbik7CisKKyNlbmRpZiAvKiBEU1BDSE5MXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlN2QxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkZWZzLmgKQEAgLTAsMCArMSwxMDU0IEBACisvKgorICogZHNwZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEJyaWRnZSBkcml2ZXIgZW50cnkgcG9pbnQgYW5kIGludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisgKgorICogTm90ZXM6CisgKiAgIFRoZSBEU1AgQVBJIG9idGFpbnMgaXQncyBmdW5jdGlvbiBpbnRlcmZhY2UgdG8KKyAqICAgdGhlIEJyaWRnZSBkcml2ZXIgdmlhIGEgY2FsbCB0byBicmlkZ2VfZHJ2X2VudHJ5KCkuCisgKgorICogICBCcmlkZ2Ugc2VydmljZXMgZXhwb3J0ZWQgdG8gQnJpZGdlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkIGJ5IHRoZQorICogICBEU1AgQVBJIG9uIGJlaGFsZiBvZiB0aGUgQnJpZGdlIGRyaXZlci4KKyAqCisgKiAgIEJyaWRnZSBmdW5jdGlvbiBEQkMgUmVxdWlyZXMgYW5kIEVuc3VyZXMgYXJlIGFsc28gbWFkZSBieSB0aGUgRFNQIEFQSSBvbgorICogICBiZWhhbGYgb2YgdGhlIEJyaWRnZSBkcml2ZXIsIHRvIHNpbXBsaWZ5IHRoZSBCcmlkZ2UgZHJpdmVyIGNvZGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBEU1BERUZTXworI2RlZmluZSBEU1BERUZTXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2JyZGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZWhkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW9kZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21zZ2RlZnMuaD4KKworLyoKKyAqICBBbnkgSU9DVExTIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgYXJlIHJlc2VydmVkIGZvciBzdGFuZGFyZCBCcmlkZ2UgZHJpdmVyCisgKiAgaW50ZXJmYWNlcy4KKyAqLworI2RlZmluZSBCUkRfUkVTRVJWRURJT0NUTEJBU0UgICAweDgwMDAKKworLyogSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIncyBwcml2YXRlIGRldmljZSBjb250ZXh0LiAqLworc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEJSSURHRSBEUklWRVIgRlVOQ1RJT04gVFlQRVMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tb25pdG9yID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgdGhlIGJvYXJkIHRvIHRoZSBCUkRfSURMRSAobW9uaXRvcikgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIEJvYXJkIGlzIGluIEJSRF9JRExFIHN0YXRlOworICogICAgICBlbHNlOiAgICAgICAgICAgQm9hcmQgc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfbW9uaXRvcikgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0KTsKKworLyoKKyAqICA9PT09PT09PSBmeG5fYnJkX3NldHN0YXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0cyB0aGUgQnJpZGdlIGRyaXZlciBzdGF0ZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICBicmRfc3RhdGU6ICAgICAgQm9hcmQgc3RhdGUKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgYnJkX3N0YXRlICA8PSBCUkRfTEFTVFNUQVRFLgorICogIEVuc3VyZXM6CisgKiAgICAgIGJyZF9zdGF0ZSAgPD0gQlJEX0xBU1RTVEFURS4KKyAqICBVcGRhdGUgdGhlIEJvYXJkIHN0YXRlIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX3NldHN0YXRlKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAgICAqIGRldl9jdHh0LCB1MzIgYnJkX3N0YXRlKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3N0YXJ0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgYm9hcmQgdG8gdGhlIEJSRF9SVU5OSU5HIChzdGFydCkgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGNvbnRleHQuCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBEU1AgYWRkcmVzcyBhdCB3aGljaCB0byBzdGFydCBleGVjdXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRURPVVQ6ICBUaW1lb3V0IG9jY3VyZWQgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmcm9tIGhhcmR3YXJlLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMCisgKiAgICAgIEJvYXJkIGlzIGluIG1vbml0b3IgKEJSRF9JRExFKSBzdGF0ZS4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgQm9hcmQgaXMgaW4gQlJEX1JVTk5JTkcgc3RhdGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIHRvIHRoZSBQQyBhcmUgZW5hYmxlZC4KKyAqICAgICAgZWxzZTogICAgICAgICAgIEJvYXJkIHN0YXRlIGlzIGluZGV0ZXJtaW5hdGUuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX3N0YXJ0KSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAqIGRldl9jdHh0LCB1MzIgZHNwX2FkZHIpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfbWVtX2NvcHkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogIENvcHkgbWVtb3J5IGZyb20gb25lIERTUCBhZGRyZXNzIHRvIGFub3RoZXIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY29udGV4dDogICAgUG9pbnRlciB0byBjb250ZXh0IGhhbmRsZQorICogIGRzcF9kZXN0X2FkZHI6ICBEU1AgYWRkcmVzcyB0byBjb3B5IHRvCisgKiAgZHNwX3NyY19hZGRyOiAgIERTUCBhZGRyZXNzIHRvIGNvcHkgZnJvbQorICogIHVsX251bV9ieXRlczogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqICBtZW1fdHlwZTogICBXaGF0IHNlY3Rpb24gb2YgbWVtb3J5IHRvIGNvcHkgdG8KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2NvbnRleHQgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBCb2FyZCBpcyBpbiBCUkRfUlVOTklORyBzdGF0ZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgdG8gdGhlIFBDIGFyZSBlbmFibGVkLgorICogICAgICBlbHNlOiAgICAgICAgICAgQm9hcmQgc3RhdGUgaXMgaW5kZXRlcm1pbmF0ZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfbWVtY29weSkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAqIGRldl9jdHh0LAorCQkJCSAgICAgIHUzMiBkc3BfZGVzdF9hZGRyLAorCQkJCSAgICAgIHUzMiBkc3Bfc3JjX2FkZHIsCisJCQkJICAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fd3JpdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBXcml0ZSBhIGJsb2NrIG9mIGhvc3QgbWVtb3J5IGludG8gYSBEU1AgYWRkcmVzcywgaW50byBhIGdpdmVuIG1lbW9yeQorICogICAgICBzcGFjZS4gIFVubGlrZSBicmlkZ2VfYnJkX3dyaXRlLCB0aGlzIEFQSSBkb2VzIHJlc2V0IHRoZSBEU1AKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHNwX2FkZHI6ICAgICAgIEFkZHJlc3Mgb24gRFNQIGJvYXJkIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChTb3VyY2UpLgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKiAgICAgIG1lbV90eXBlOiAgICAgICBNZW1vcnkgc3BhY2Ugb24gRFNQIHRvIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgaG9zdF9idWYgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9tZW13cml0ZSkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAgKiBkZXZfY3R4dCwKKwkJCQkgICAgICAgdTggKmhvc3RfYnVmLAorCQkJCSAgICAgICB1MzIgZHNwX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICAgICAgIHUzMiBtZW1fdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFwIGEgTVBVIG1lbW9yeSByZWdpb24gdG8gYSBEU1AvSVZBIG1lbW9yeSBzcGFjZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICB1bF9tcHVfYWRkcjogICAgICBNUFUgbWVtb3J5IHJlZ2lvbiBzdGFydCBhZGRyZXNzLgorICogICAgICB2aXJ0X2FkZHI6ICAgICAgRFNQL0lWQSBtZW1vcnkgcmVnaW9uIHU4IGFkZHJlc3MuCisgKiAgICAgIHVsX251bV9ieXRlczogICAgIE51bWJlciBvZiBieXRlcyB0byBtYXAuCisgKiAgICAgIG1hcF9hdHRyczogICAgICAgTWFwcGluZyBhdHRyaWJ1dGVzIChlLmcuIGVuZGlhbm5lc3MpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVBFUk06ICAgICAgT3RoZXIsIHVuc3BlY2lmaWVkIGVycm9yLgorICogIFJlcXVpcmVzOgorICogICAgICBkZXZfY3R4dCAhPSBOVUxMOworICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fYnJkX21lbW1hcCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICogZGV2X2N0eHQsIHUzMiB1bF9tcHVfYWRkciwKKwkJCQkgICAgIHUzMiB2aXJ0X2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsCisJCQkJICAgICB1MzIgbWFwX2F0dHIsCisJCQkJICAgICBzdHJ1Y3QgcGFnZSAqKm1hcHBlZF9wYWdlcyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9tZW1fdW5fbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5NYXAgYW4gTVBVIG1lbW9yeSByZWdpb24gZnJvbSBEU1AvSVZBIG1lbW9yeSBzcGFjZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBpbmZvLgorICogICAgICB2aXJ0X2FkZHI6ICAgICAgRFNQL0lWQSBtZW1vcnkgcmVnaW9uIHU4IGFkZHJlc3MuCisgKiAgICAgIHVsX251bV9ieXRlczogICAgIE51bWJlciBvZiBieXRlcyB0byB1bm1hcC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9tZW11bm1hcCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkgICAgICAgKiBkZXZfY3R4dCwKKwkJCQkgICAgICAgdTMyIHZpcnRfYWRkciwgdTMyIHVsX251bV9ieXRlcyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2JyZF9zdG9wID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQnJpbmcgYm9hcmQgdG8gdGhlIEJSRF9TVE9QUEVEIHN0YXRlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldl9jdHh0OiAgICBIYW5kbGUgdG8gQnJpZGdlIGRyaXZlciBkZWZpbmVkIGRldmljZSBjb250ZXh0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBCb2FyZCBpcyBpbiBCUkRfU1RPUFBFRCAoc3RvcCkgc3RhdGU7CisgKiAgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHRzIHRvIHRoZSBQQyBhcmUgZGlzYWJsZWQuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICBCb2FyZCBzdGF0ZSBpcyBpbmRldGVybWluYXRlLgorICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9zdG9wKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfc3RhdHVzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBib2FyZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgY29udGV4dC4KKyAqICAgICAgYm9hcmRfc3RhdGU6ICAgIFB0ciB0byBCUkQgc3RhdHVzIHZhcmlhYmxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGJvYXJkX3N0YXRlICE9IE5VTEw7CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICogICAgICAqYm9hcmRfc3RhdGUgaXMgb25lIG9mCisgKiAgICAgICB7QlJEX1NUT1BQRUQsIEJSRF9JRExFLCBCUkRfUlVOTklORywgQlJEX1VOS05PV059OworICovCit0eXBlZGVmIGludCgqZnhuX2JyZF9zdGF0dXMpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgIGludCAqYm9hcmRfc3RhdGUpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9icmRfcmVhZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlYWQgYSBibG9jayBvZiBEU1AgbWVtb3J5LCBmcm9tIGEgZ2l2ZW4gbWVtb3J5IHNwYWNlLCBpbnRvIGEgaG9zdAorICogICAgICBidWZmZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBQb2ludGVyIHRvIGhvc3QgYnVmZmVyIChEZXN0aW5hdGlvbikuCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoU291cmNlKS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCBmcm9tIHdoaWNoIHRvIHRyYW5zZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVRJTUVET1VUOiAgVGltZW91dCBvY2N1cmVkIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZnJvbSBoYXJkd2FyZS4KKyAqICAgICAgLUVQRVJNOiAgICAgIE90aGVyLCB1bnNwZWNpZmllZCBlcnJvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2X2N0eHQgIT0gTlVMTDsKKyAqICAgICAgaG9zdF9idWYgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogIFdpbGwgbm90IHdyaXRlIG1vcmUgdGhhbiB1bF9udW1fYnl0ZXMgYnl0ZXMgaW50byBob3N0X2J1Zi4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfcmVhZCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHU4ICpob3N0X2J1ZiwKKwkJCQkgICB1MzIgZHNwX2FkZHIsCisJCQkJICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV90eXBlKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfYnJkX3dyaXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgV3JpdGUgYSBibG9jayBvZiBob3N0IG1lbW9yeSBpbnRvIGEgRFNQIGFkZHJlc3MsIGludG8gYSBnaXZlbiBtZW1vcnkKKyAqICAgICAgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X2N0eHQ6ICAgIEhhbmRsZSB0byBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgZGV2aWNlIGluZm8uCisgKiAgICAgIGRzcF9hZGRyOiAgICAgICBBZGRyZXNzIG9uIERTUCBib2FyZCAoRGVzdGluYXRpb24pLgorICogICAgICBob3N0X2J1ZjogICAgICAgUG9pbnRlciB0byBob3N0IGJ1ZmZlciAoU291cmNlKS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgorICogICAgICBtZW1fdHlwZTogICAgICAgTWVtb3J5IHNwYWNlIG9uIERTUCB0byB3aGljaCB0byB0cmFuc2Zlci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FRE9VVDogIFRpbWVvdXQgb2NjdXJlZCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZyb20gaGFyZHdhcmUuCisgKiAgICAgIC1FUEVSTTogICAgICBPdGhlciwgdW5zcGVjaWZpZWQgZXJyb3IuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CisgKiAgICAgIGhvc3RfYnVmICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9icmRfd3JpdGUpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQkgICAgdTggKmhvc3RfYnVmLAorCQkJCSAgICB1MzIgZHNwX2FkZHIsCisJCQkJICAgIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fdHlwZSk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuICdCcmlkZ2UgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hhbm5lbF9tZ3I6ICAgIExvY2F0aW9uIHRvIHN0b3JlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIGEgZGV2aWNlIG9iamVjdC4KKyAqICAgICAgbWdyX2F0dHJ0czogICAgICBDaGFubmVsIG1hbmFnZXIgYXR0cmlidXRlcy4KKyAqICAgICAgbWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzOiBNYXggY2hhbm5lbHMKKyAqICAgICAgbWdyX2F0dHJ0cy0+YmlycTogICAgICBDaGFubmVsJ3MgSS9PIElSUSBudW1iZXIuCisgKiAgICAgIG1ncl9hdHRydHMtPmlycV9zaGFyZWQ6ICAgVFJVRSBpZiB0aGUgSVJRIGlzIHNoYXJlYWJsZS4KKyAqICAgICAgbWdyX2F0dHJ0cy0+d29yZF9zaXplOiBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogICAgICBtZ3JfYXR0cnRzLT5zaG1fYmFzZTogIEJhc2UgcGh5c2ljYWwgYWRkcmVzcyBvZiBzaGFyZWQgbWVtb3J5LCBpZiBhbnkuCisgKiAgICAgIG1ncl9hdHRydHMtPnVzbV9sZW5ndGg6IEJ5dGVzIG9mIHNoYXJlZCBtZW1vcnkgYmxvY2suCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVJTzogICAgICAgICBVbmFibGUgdG8gcGx1ZyBJU1IgZm9yIGdpdmVuIElSUS4KKyAqICAgICAgLUVGQVVMVDogICAgQ291bGRuJ3QgbWFwIHBoeXNpY2FsIGFkZHJlc3MgdG8gYSB2aXJ0dWFsIG9uZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgY2hhbm5lbF9tZ3IgIT0gTlVMTC4KKyAqICAgICAgbWdyX2F0dHJ0cyAhPSBOVUxMCisgKiAgICAgIG1ncl9hdHRydHMgZmllbGQgYXJlIGFsbCB2YWxpZDoKKyAqICAgICAgICAgIDAgPCBtYXhfY2hhbm5lbHMgPD0gQ0hOTF9NQVhDSEFOTkVMUy4KKyAqICAgICAgICAgIGJpcnEgPD0gMTUuCisgKiAgICAgICAgICB3b3JkX3NpemUgPiAwLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMCisgKiAgICAgIE5vIGNoYW5uZWwgbWFuYWdlciBleGlzdHMgZm9yIHRoaXMgYm9hcmQuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2NyZWF0ZSkgKHN0cnVjdCBjaG5sX21ncgorCQkJCSAgICAgICoqY2hhbm5lbF9tZ3IsCisJCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgICAqIGhkZXZfb2JqLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdAorCQkJCSAgICAgIGNobmxfbWdyYXR0cnMgKiBtZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHMsIGFuZCBkZXN0cm95IHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNobmxfbWdyOiAgICAgICBDaGFubmVsIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBoY2hubF9tZ3Igd2FzIGludmFsaWQuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogQ2FuY2VscyBJL08gb24gZWFjaCBvcGVuIGNoYW5uZWwuIENsb3NlcyBlYWNoIG9wZW4gY2hhbm5lbC4KKyAqICAgICAgICAgIGNobmxfY3JlYXRlIG1heSBzdWJzZXF1ZW50bHkgYmUgY2FsbGVkIGZvciB0aGUgc2FtZSBkZXZpY2UuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9kZXN0cm95KSAoc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpOworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGVoX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFdoZW4gbm90aWZpZWQgb2YgRFNQIGVycm9yLCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoZGVoX21ncjogICAgICAgIEhhbmRsZSB0byBERUggbWFuYWdlciBvYmplY3QuCisgKiAgICAgIGV2bnRfbWFzazogICAgSW5kaWNhdGUgdGhlIHR5cGUgb2YgZXhjZXB0aW9uCisgKiAgICAgIGVycm9yX2luZm86ICAgIEVycm9yIGluZm9ybWF0aW9uCisgKiAgUmV0dXJuczoKKyAqCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkZWhfbWdyICE9IE5VTEw7CisgKiAgICAgZXZudF9tYXNrIHdpdGggYSB2YWxpZCBleGNlcHRpb24KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpmeG5fZGVoX25vdGlmeSkgKHN0cnVjdCBkZWhfbWdyICpoZGVoX21nciwKKwkJCQl1MzIgZXZudF9tYXNrLCB1MzIgZXJyb3JfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2Nobmxfb3BlbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE9wZW4gYSBuZXcgaGFsZi1kdXBsZXggY2hhbm5lbCB0byB0aGUgRFNQIGJvYXJkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmw6ICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBhIGNoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgaGNobmxfbWdyOglIYW5kbGUgdG8gY2hhbm5lbCBtYW5hZ2VyLCBhcyByZXR1cm5lZCBieQorICogICAgICAJCUNITkxfR2V0TWdyKCkuCisgKiAgICAgIGNobmxfbW9kZTogICAgICAgICAgT25lIG9mIHtDSE5MX01PREVUT0RTUCwgQ0hOTF9NT0RFRlJPTURTUH0gc3BlY2lmaWVzCisgKiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gb2YgZGF0YSB0cmFuc2Zlci4KKyAqICAgICAgY2hfaWQ6ICAgICAgICBJZiBDSE5MX1BJQ0tGUkVFIGlzIHNwZWNpZmllZCwgdGhlIGNoYW5uZWwgbWFuYWdlciB3aWxsCisgKiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYSBmcmVlIGNoYW5uZWwgaWQgKGRlZmF1bHQpOworICogICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSBpZCBvZiB0aGUgY2hhbm5lbC4KKyAqICAgICAgcGF0dHJzOiAgICAgICAgIENoYW5uZWwgYXR0cmlidXRlcy4gIEF0dHJpYnV0ZSBmaWVsZHMgYXJlIGFzIGZvbGxvd3M6CisgKiAgICAgIHBhdHRycy0+dWlvX3JlcXM6IFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgSS9PIHJlcXVlc3RzIHdoaWNoIGNhbgorICogICAgICAgICAgICAgICAgICAgICAgYmUgcGVuZGluZyBhdCBhbnkgZ2l2ZW4gdGltZS4gQWxsIHJlcXVlc3QgcGFja2V0cyBhcmUKKyAqICAgICAgICAgICAgICAgICAgICAgIHByZWFsbG9jYXRlZCB3aGVuIHRoZSBjaGFubmVsIGlzIG9wZW5lZC4KKyAqICAgICAgcGF0dHJzLT5ldmVudF9vYmo6IFRoaXMgZmllbGQgYWxsb3dzIHRoZSB1c2VyIHRvIHN1cHBseSBhbiBhdXRvIHJlc2V0CisgKiAgICAgICAgICAgICAgICAgICAgICBldmVudCBvYmplY3QgZm9yIGNoYW5uZWwgSS9PIGNvbXBsZXRpb24gbm90aWZpY2F0aW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBkZXN0cm95IHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBBRlRFUiBjbG9zaW5nIHRoZSBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgVGhpcyBjaGFubmVsIGV2ZW50IG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICBDSE5MX0dldEV2ZW50SGFuZGxlKCkuCisgKiAgICAgIHBhdHRycy0+aFJlc2VydmVkOiBUaGUga2VybmVsIG1vZGUgaGFuZGxlIG9mIHRoaXMgZXZlbnQgb2JqZWN0LgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIGhjaG5sX21nciBpcyBpbnZhbGlkLgorICogICAgICAtRU5PTUVNOiAgICAgICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIHJlcXVlc3RlZCByZXNvdXJjZXMuCisgKiAgICAgIC1FSU5WQUw6ICAgICAgICBJbnZhbGlkIG51bWJlciBvZiBJT1JlcXMuCisgKiAgICAgIC1FTk9TUjogICAgTm8gZnJlZSBjaGFubmVscyBhdmFpbGFibGUuCisgKiAgICAgIC1FQ0hSTkc6ICAgICAgIENoYW5uZWwgSUQgaXMgb3V0IG9mIHJhbmdlLgorICogICAgICAtRUFMUkVBRFk6ICAgICAgICBDaGFubmVsIGlzIGluIHVzZS4KKyAqICAgICAgLUVJTzogICAgICAgICBObyBmcmVlIElPIHJlcXVlc3QgcGFja2V0cyBhdmFpbGFibGUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVpbmcuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGNobmwgIT0gTlVMTC4KKyAqICAgICAgcGF0dHJzICE9IE5VTEwuCisgKiAgICAgIHBhdHRycy0+ZXZlbnRfb2JqIGlzIGEgdmFsaWQgZXZlbnQgaGFuZGxlLgorICogICAgICBwYXR0cnMtPmhSZXNlcnZlZCBpcyB0aGUga2VybmVsIG1vZGUgaGFuZGxlIGZvciBwYXR0cnMtPmV2ZW50X29iai4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgICAgICAqY2hubCBpcyBhIHZhbGlkIGNoYW5uZWwuCisgKiAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICpjaG5sIGlzIHNldCB0byBOVUxMIGlmIChjaG5sICE9IE5VTEwpOworICovCit0eXBlZGVmIGludCgqZnhuX2Nobmxfb3BlbikgKHN0cnVjdCBjaG5sX29iamVjdAorCQkJCSAgICAqKmNobmwsCisJCQkJICAgIHN0cnVjdCBjaG5sX21nciAqaGNobmxfbWdyLAorCQkJCSAgICBzOCBjaG5sX21vZGUsCisJCQkJICAgIHUzMiBjaF9pZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0CisJCQkJICAgIGNobmxfYXR0ciAqIHBhdHRycyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnN1cmVzIGFsbCBwZW5kaW5nIEkvTyBvbiB0aGlzIGNoYW5uZWwgaXMgY2FuY2VsbGVkLCBkaXNjYXJkcyBhbGwKKyAqICAgICAgcXVldWVkIEkvTyBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbnMsIHRoZW4gZnJlZXMgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQKKyAqICAgICAgZm9yIHRoaXMgY2hhbm5lbCwgYW5kIG1ha2VzIHRoZSBjb3JyZXNwb25kaW5nIGxvZ2ljYWwgY2hhbm5lbCBpZAorICogICAgICBhdmFpbGFibGUgZm9yIHN1YnNlcXVlbnQgdXNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBIYW5kbGUgdG8gYSBjaGFubmVsIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBjaG5sX29iai4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTm8gdGhyZWFkIG11c3QgYmUgYmxvY2tlZCBvbiB0aGlzIGNoYW5uZWwncyBJL08gY29tcGxldGlvbiBldmVudC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgY2hubF9vYmogaXMgbm8gbG9uZ2VyIHZhbGlkLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfY2xvc2UpIChzdHJ1Y3QgY2hubF9vYmplY3QgKmNobmxfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9hZGRfaW9fcmVxID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW5xdWV1ZSBhbiBJL08gcmVxdWVzdCBmb3IgZGF0YSB0cmFuc2ZlciBvbiBhIGNoYW5uZWwgdG8gdGhlIERTUC4KKyAqICAgICAgVGhlIGRpcmVjdGlvbiAobW9kZSkgaXMgc3BlY2lmaWVkIGluIHRoZSBjaGFubmVsIG9iamVjdC4gTm90ZSB0aGUgRFNQCisgKiAgICAgIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGZvciBjaGFubmVscyBvcGVuZWQgaW4gZGlyZWN0IEkvTyBtb2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIGhvc3RfYnVmOiAgICAgICBIb3N0IGJ1ZmZlciBhZGRyZXNzIHNvdXJjZS4KKyAqICAgICAgYnl0ZV9zaXplOglOdW1iZXIgb2YgUEMgYnl0ZXMgdG8gdHJhbnNmZXIuIEEgemVybyB2YWx1ZSBpbmRpY2F0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoYXQgdGhpcyBidWZmZXIgaXMgdGhlIGxhc3QgaW4gdGhlIG91dHB1dCBjaGFubmVsLgorICogICAgICAgICAgICAgICAgICAgICAgQSB6ZXJvIHZhbHVlIGlzIGludmFsaWQgZm9yIGFuIGlucHV0IGNoYW5uZWwuCisgKiEgICAgIGJ1Zl9zaXplOiAgICAgICBBY3R1YWwgYnVmZmVyIHNpemUgaW4gaG9zdCBieXRlcy4KKyAqICAgICAgZHdfZHNwX2FkZHI6ICAgICAgRFNQIGFkZHJlc3MgZm9yIHRyYW5zZmVyLiAgKEN1cnJlbnRseSBpZ25vcmVkKS4KKyAqICAgICAgZHdfYXJnOiAgICAgICAgICBBIHVzZXIgYXJndW1lbnQgdGhhdCB0cmF2ZWxzIHdpdGggdGhlIGJ1ZmZlci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5sX29iaiBvciBob3N0X2J1Zi4KKyAqICAgICAgLUVQRVJNOiAgIFVzZXIgY2Fubm90IG1hcmsgRU9TIG9uIGFuIGlucHV0IGNoYW5uZWwuCisgKiAgICAgIC1FQ0FOQ0VMRUQ6IEkvTyBoYXMgYmVlbiBjYW5jZWxsZWQgb24gdGhpcyBjaGFubmVsLiAgTm8gZnVydGhlcgorICogICAgICAgICAgICAgICAgICAgICAgSS9PIGlzIGFsbG93ZWQuCisgKiAgICAgIC1FUElQRTogICAgIEVuZCBvZiBzdHJlYW0gd2FzIGFscmVhZHkgbWFya2VkIG9uIGEgcHJldmlvdXMKKyAqICAgICAgICAgICAgICAgICAgICAgIElPUmVxdWVzdCBvbiB0aGlzIGNoYW5uZWwuICBObyBmdXJ0aGVyIEkvTyBpcyBleHBlY3RlZC4KKyAqICAgICAgLUVJTlZBTDogQnVmZmVyIHN1Ym1pdHRlZCB0byB0aGlzIG91dHB1dCBjaGFubmVsIGlzIGxhcmdlciB0aGFuCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgcGh5c2ljYWwgc2hhcmVkIG1lbW9yeSBvdXRwdXQgd2luZG93LgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6IFRoZSBidWZmZXIgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpZiB0aGUgY2hhbm5lbCBpcyByZWFkeTsKKyAqICAgICAgICAgIG90aGVyd2lzZSwgd2lsbCBiZSBxdWV1ZWQgZm9yIHRyYW5zZmVyIHdoZW4gdGhlIGNoYW5uZWwgYmVjb21lcworICogICAgICAgICAgcmVhZHkuICBJbiBhbnkgY2FzZSwgbm90aWZpY2F0aW9ucyBvZiBJL08gY29tcGxldGlvbiBhcmUKKyAqICAgICAgICAgIGFzeW5jaHJvbm91cy4KKyAqICAgICAgICAgIElmIGJ5dGVfc2l6ZSBpcyAwIGZvciBhbiBvdXRwdXQgY2hhbm5lbCwgc3Vic2VxdWVudCBDSE5MX0FkZElPUmVxJ3MKKyAqICAgICAgICAgIG9uIHRoaXMgY2hhbm5lbCB3aWxsIGZhaWwgd2l0aCBlcnJvciBjb2RlIC1FUElQRS4gIFRoZQorICogICAgICAgICAgY29ycmVzcG9uZGluZyBJT0MgZm9yIHRoaXMgSS9PIHJlcXVlc3Qgd2lsbCBoYXZlIGl0cyBzdGF0dXMgZmxhZworICogICAgICAgICAgc2V0IHRvIENITkxfSU9DU1RBVEVPUy4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2FkZGlvcmVxKSAoc3RydWN0IGNobmxfb2JqZWN0CisJCQkJCSogY2hubF9vYmosCisJCQkJCXZvaWQgKmhvc3RfYnVmLAorCQkJCQl1MzIgYnl0ZV9zaXplLAorCQkJCQl1MzIgYnVmX3NpemUsCisJCQkJCXUzMiBkd19kc3BfYWRkciwgdTMyIGR3X2FyZyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZ2V0X2lvYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlcXVldWUgYW4gSS9PIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqICAgICAgY29tcGxldGVkIEkvTyByZXF1ZXN0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBDaGFubmVsIG9iamVjdCBoYW5kbGUuCisgKiAgICAgIHRpbWVvdXQ6ICAgICAgICBBIHZhbHVlIG9mIENITkxfSU9DTk9XQUlUIHdpbGwgc2ltcGx5IGRlcXVldWUgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCBhdmFpbGFibGUgSU9DLgorICogICAgICBjaGFuX2lvYzogICAgICAgT24gb3V0cHV0LCBjb250YWlucyBob3N0IGJ1ZmZlciBhZGRyZXNzLCBieXRlcworICogICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJyZWQsIGFuZCBzdGF0dXMgb2YgSS9PIGNvbXBsZXRpb24uCisgKiAgICAgIGNoYW5faW9jLT5zdGF0dXM6ICAgU2VlIGNobmxkZWZzLmguCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6IEludmFsaWQgY2hubF9vYmogb3IgY2hhbl9pb2MuCisgKiAgICAgIC1FUkVNT1RFSU86ICAgQ0hOTF9JT0NOT1dBSVQgd2FzIHNwZWNpZmllZCBhcyB0aGUgdGltZW91dCBwYXJhbWV0ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIHlldCBubyBJL08gY29tcGxldGlvbnMgd2VyZSBxdWV1ZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHRpbWVvdXQgPT0gQ0hOTF9JT0NOT1dBSVQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogaWYgdGhlcmUgYXJlIGFueSByZW1haW5pbmcgSU9DJ3MgcXVldWVkIGJlZm9yZSB0aGlzIGNhbGwKKyAqICAgICAgICAgIHJldHVybnMsIHRoZSBjaGFubmVsIGV2ZW50IG9iamVjdCB3aWxsIGJlIGxlZnQgaW4gYSBzaWduYWxsZWQKKyAqICAgICAgICAgIHN0YXRlLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZ2V0aW9jKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICAgICB1MzIgdGltZW91dCwKKwkJCQkgICAgICBzdHJ1Y3QgY2hubF9pb2MgKmNoYW5faW9jKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9jYW5jZWxfaW8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gYWxsIEkvTyByZXF1ZXN0cyB0byB0aGUgY2xpZW50IHdoaWNoIGhhdmUgbm90IHlldCBiZWVuCisgKiAgICAgIHRyYW5zZmVycmVkLiAgVGhlIGNoYW5uZWwncyBJL08gY29tcGxldGlvbiBvYmplY3QgaXMKKyAqICAgICAgc2lnbmFsbGVkLCBhbmQgYWxsIHRoZSBJL08gcmVxdWVzdHMgYXJlIHF1ZXVlZCBhcyBJT0Mncywgd2l0aCB0aGUKKyAqICAgICAgc3RhdHVzIGZpZWxkIHNldCB0byBDSE5MX0lPQ1NUQVRDQU5DRUwuCisgKiAgICAgIFRoaXMgY2FsbCBpcyB0eXBpY2FsbHkgdXNlZCBpbiBhYm9ydCBzaXR1YXRpb25zLCBhbmQgaXMgYSBwcmVsdWRlIHRvCisgKiAgICAgIGNobmxfY2xvc2UoKTsKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGNobmxfb2JqLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1YnNlcXVlbnQgSS9PIHJlcXVlc3RzIHRvIHRoaXMgY2hhbm5lbCB3aWxsIG5vdCBiZSBhY2NlcHRlZC4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9jaG5sX2NhbmNlbGlvKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfZmx1c2hfaW8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGb3IgYW4gb3V0cHV0IHN0cmVhbSAodG8gdGhlIERTUCksIGluZGljYXRlcyBpZiBhbnkgSU8gcmVxdWVzdHMgYXJlIGluCisgKiAgICAgIHRoZSBvdXRwdXQgcmVxdWVzdCBxdWV1ZS4gIEZvciBpbnB1dCBzdHJlYW1zIChmcm9tIHRoZSBEU1ApLCB3aWxsCisgKiAgICAgIGNhbmNlbCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgdGltZW91dDogICAgICAgICAgICBUaW1lb3V0IHZhbHVlIGZvciBmbHVzaCBvcGVyYXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzOworICogICAgICBTX0NITkxJT1JFUVVFU1Q6ICAgIFJldHVybmVkIGlmIGFueSBJT1JlcXVlc3RzIGFyZSBpbiB0aGUgb3V0cHV0IHF1ZXVlLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBjaG5sX29iai4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgICAgIE5vIEkvTyByZXF1ZXN0cyB3aWxsIGJlIHBlbmRpbmcgb24gdGhpcyBjaGFubmVsLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZmx1c2hpbykgKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgICAgIHUzMiB0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYSBjaGFubmVsLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGNobmxfb2JqOiAgICAgICAgICBIYW5kbGUgdG8gYSB2YWxpZCBjaGFubmVsIG9iamVjdCwgb3IgTlVMTC4KKyAqICAgICAgY2hhbm5lbF9pbmZvOiAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgaW5mby4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBjaG5sX29iaiBvciBjaGFubmVsX2luZm8uCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIGNoYW5uZWxfaW5mbyBwb2ludHMgdG8gYSBmaWxsZWQgaW4gY2hubF9pbmZvIHN0cnVjdCwKKyAqICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsX2luZm8gIT0gTlVMTCkuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9nZXRpbmZvKSAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKwkJCQkgICAgICAgc3RydWN0IGNobmxfaW5mbyAqY2hhbm5lbF9pbmZvKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfY2hubF9nZXRfbWdyX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGNobmxfbWdyOiAgICAgICAgICAgSGFuZGxlIHRvIGEgdmFsaWQgY2hhbm5lbCBtYW5hZ2VyLCBvciBOVUxMLgorICogICAgICBjaF9pZDogICAgICAgICAgICBDaGFubmVsIElELgorICogICAgICBtZ3JfaW5mbzogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNoYW5uZWwgbWFuYWdlciBpbmZvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogSW52YWxpZCBoY2hubF9tZ3Igb3IgbWdyX2luZm8uCisgKiAgICAgIC1FQ0hSTkc6ICAgSW52YWxpZCBjaGFubmVsIElELgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgbWdyX2luZm8gcG9pbnRzIHRvIGEgZmlsbGVkIGluIGNobmxfbWdyaW5mbworICogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCwgaWYgKG1ncl9pbmZvICE9IE5VTEwpLgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfZ2V0bWdyaW5mbykgKHN0cnVjdCBjaG5sX21ncgorCQkJCQkgICogaGNobmxfbWdyLAorCQkJCQkgIHUzMiBjaF9pZCwKKwkJCQkJICBzdHJ1Y3QgY2hubF9tZ3JpbmZvICptZ3JfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2NobmxfaWRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIElkbGUgYSBjaGFubmVsLiBJZiB0aGlzIGlzIGFuIGlucHV0IGNoYW5uZWwsIG9yIGlmIHRoaXMgaXMgYW4gb3V0cHV0CisgKiAgICAgIGNoYW5uZWwgYW5kIGZsdXNoX2RhdGEgaXMgVFJVRSwgYWxsIGN1cnJlbnRseSBlbnF1ZXVlZCBidWZmZXJzIHdpbGwgYmUKKyAqICAgICAgZGVxdWV1ZWQgKGRhdGEgZGlzY2FyZGVkIGZvciBvdXRwdXQgY2hhbm5lbCkuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IGNoYW5uZWwgYW5kIGZsdXNoX2RhdGEgaXMgRkFMU0UsIHRoaXMgZnVuY3Rpb24KKyAqICAgICAgd2lsbCBibG9jayB1bnRpbCBhbGwgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEgaXMgb3V0cHV0LCBvciB0aGUgdGltZW91dAorICogICAgICBzcGVjaWZpZWQgaGFzIGJlZW4gcmVhY2hlZC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hubF9vYmo6ICAgICAgICAgIENoYW5uZWwgb2JqZWN0IGhhbmRsZS4KKyAqICAgICAgdGltZW91dDogICAgICAgIElmIG91dHB1dCBjaGFubmVsIGFuZCBmbHVzaF9kYXRhIGlzIEZBTFNFLCB0aW1lb3V0IHZhbHVlCisgKiAgICAgICAgICAgICAgICAgICAgICB0byB3YWl0IGZvciBidWZmZXJzIHRvIGJlIG91dHB1dC4gKE5vdCB1c2VkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgaW5wdXQgY2hhbm5lbCkuCisgKiAgICAgIGZsdXNoX2RhdGE6ICAgICBJZiBvdXRwdXQgY2hhbm5lbCBhbmQgZmx1c2hfZGF0YSBpcyBUUlVFLCBkaXNjYXJkIGFueQorICogICAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGJ1ZmZlcmVkIGRhdGEuIElmIEZBTFNFLCB3YWl0IGZvciBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIGRhdGEgdG8gYmUgb3V0cHV0LCBvciB0aW1lb3V0LCB3aGljaGV2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIG9jY3VycyBmaXJzdC4gZmx1c2hfZGF0YSBpcyBpZ25vcmVkIGZvciBpbnB1dCBjaGFubmVsLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgY2hubF9vYmouCisgKiAgICAgIC1FVElNRURPVVQ6IFRpbWVvdXQgb2NjdXJlZCBiZWZvcmUgY2hhbm5lbCBjb3VsZCBiZSBpZGxlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2NobmxfaWRsZSkgKHN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9vYmosCisJCQkJICAgIHUzMiB0aW1lb3V0LCBib29sIGZsdXNoX2RhdGEpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9jaG5sX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIGZvciBub3RpZmljYXRpb24gb2YgZXZlbnRzIG9uIGEgY2hhbm5lbC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBjaG5sX29iajogICAgICAgICAgQ2hhbm5lbCBvYmplY3QgaGFuZGxlLgorICogICAgICBldmVudF9tYXNrOiAgICAgVHlwZSBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQ6IElPIGNvbXBsZXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIChEU1BfU1RSRUFNSU9DT01QTEVUSU9OKSBvciBlbmQgb2Ygc3RyZWFtCisgKiAgICAgICAgICAgICAgICAgICAgICAoRFNQX1NUUkVBTURPTkUpLgorICogICAgICBub3RpZnlfdHlwZTogICAgRFNQX1NJR05BTEVWRU5ULgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIG9mIGEgZHNwX25vdGlmaWNhdGlvbiBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkuCisgKiAgICAgIC1FSU5WQUw6ICAgICBldmVudF9tYXNrIGlzIDAgYW5kIGhub3RpZmljYXRpb24gd2FzIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSByZWdpc3RlcmVkLgorICogICAgICAtRUZBVUxUOiAgICBOVUxMIGhub3RpZmljYXRpb24sIGhub3RpZmljYXRpb24gZXZlbnQgbmFtZQorICogICAgICAgICAgICAgICAgICAgICAgdG9vIGxvbmcsIG9yIGhub3RpZmljYXRpb24gZXZlbnQgbmFtZSBOVUxMLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBjaG5sX29iai4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogICAgICAoZXZlbnRfbWFzayAmIH4oRFNQX1NUUkVBTUlPQ09NUExFVElPTiB8IERTUF9TVFJFQU1ET05FKSkgPT0gMC4KKyAqICAgICAgbm90aWZ5X3R5cGUgPT0gRFNQX1NJR05BTEVWRU5ULgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSkKKyAoc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iaiwKKyAgdTMyIGV2ZW50X21hc2ssIHUzMiBub3RpZnlfdHlwZSwgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKmhub3RpZmljYXRpb24pOworCisvKgorICogID09PT09PT09IGJyaWRnZV9kZXZfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29tcGxldGUgY3JlYXRpb24gb2YgdGhlIGRldmljZSBvYmplY3QgZm9yIHRoaXMgYm9hcmQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2aWNlX2N0eDogICAgIFB0ciB0byBsb2NhdGlvbiB0byBzdG9yZSBhIEJyaWRnZSBkZXZpY2UgY29udGV4dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICBIYW5kbGUgdG8gYSBEZXZpY2UgT2JqZWN0LCBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IERTUCBBUEkuCisgKiAgICAgIGNvbmZpZ19wYXJhbTogICAgICAgIFB0ciB0byBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uIE1hbmFnZXIgZHVyaW5nIGRldmljZSBsb2FkaW5nLgorICogICAgICBwRHNwQ29uZmlnOiAgICAgRFNQIHJlc291cmNlcywgYXMgc3BlY2lmaWVkIGluIHRoZSByZWdpc3RyeSBrZXkgZm9yIHRoaXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGRldmljZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgY29udGV4dC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2aWNlX2N0eCAhPSBOVUxMOworICogICAgICBoZGV2X29iaiAhPSBOVUxMOworICogICAgICBjb25maWdfcGFyYW0gIT0gTlVMTDsKKyAqICAgICAgcERzcENvbmZpZyAhPSBOVUxMOworICogICAgICBGaWVsZHMgaW4gY29uZmlnX3BhcmFtIGFuZCBwRHNwQ29uZmlnIGNvbnRhaW4gdmFsaWQgdmFsdWVzLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBBbGwgQnJpZGdlIGRyaXZlciBzcGVjaWZpYyBEU1AgcmVzb3VyY2UgYW5kIG90aGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBib2FyZCBjb250ZXh0IGhhcyBiZWVuIGFsbG9jYXRlZC4KKyAqICAgICAgLUVOT01FTTogICAgQnJpZGdlIGZhaWxlZCB0byBhbGxvY2F0ZSByZXNvdXJjZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBBbnkgYWNxdWlyZWQgcmVzb3VyY2VzIGhhdmUgYmVlbiBmcmVlZC4gIFRoZSBEU1AgQVBJCisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIG5vdCBjYWxsIGJyaWRnZV9kZXZfZGVzdHJveSgpIGlmCisgKiAgICAgICAgICAgICAgICAgICAgICBicmlkZ2VfZGV2X2NyZWF0ZSgpIGZhaWxzLgorICogIERldGFpbHM6CisgKiAgICAgIENhbGxlZCBkdXJpbmcgdGhlIENPTkZJR01HJ3MgRGV2aWNlX0luaXQgcGhhc2UuIEJhc2VkIG9uIGhvc3QgYW5kCisgKiAgICAgIERTUCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBjcmVhdGUgYSBib2FyZCBjb250ZXh0LCBhIGhhbmRsZSB0bworICogICAgICB3aGljaCBpcyBwYXNzZWQgaW50byBvdGhlciBCcmlkZ2UgQlJEIGFuZCBDSE5MIGZ1bmN0aW9ucy4gIFRoZQorICogICAgICBib2FyZCBjb250ZXh0IGNvbnRhaW5zIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgZGV2aWNlLiBTaW5jZSB0aGUKKyAqICAgICAgYWRkcmVzc2VzIG9mIGFsbCBwb2ludGVyIHBhcmFtZXRlcnMgbWF5IGJlIGludmFsaWQgd2hlbiB0aGlzCisgKiAgICAgIGZ1bmN0aW9uIHJldHVybnMsIHRoZXkgbXVzdCBub3QgYmUgc3RvcmVkIGludG8gdGhlIGRldmljZSBjb250ZXh0CisgKiAgICAgIHN0cnVjdHVyZS4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9kZXZfY3JlYXRlKSAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCSAgICAgKipkZXZpY2VfY3R4LAorCQkJCSAgICAgc3RydWN0IGRldl9vYmplY3QKKwkJCQkgICAgICogaGRldl9vYmosCisJCQkJICAgICBzdHJ1Y3QgY2ZnX2hvc3RyZXMKKwkJCQkgICAgICogY29uZmlnX3BhcmFtKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2N0cmwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBCcmlkZ2UgZHJpdmVyIHNwZWNpZmljIGludGVyZmFjZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mby4KKyAqICAgICAgZHdfY21kOiAgICAgICAgICBCcmlkZ2UgZHJpdmVyIGRlZmluZWQgY29tbWFuZCBjb2RlLgorICogICAgICBwYXJnczogICAgICAgICAgUG9pbnRlciB0byBhbiBhcmJpdHJhcnkgYXJndW1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgb3IgLUVQRVJNLiBBY3R1YWwgY29tbWFuZCBlcnJvciBjb2RlcyBzaG91bGQgYmUgcGFzc2VkIGJhY2sgaW4KKyAqICAgICAgdGhlIHBhcmdzIHN0cnVjdHVyZSwgYW5kIGFyZSBkZWZpbmVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyIGltcGxlbWVudG9yLgorICogIFJlcXVpcmVzOgorICogICAgICBBbGwgY2FsbHMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGJlIHN5bmNocm9ub3VzLiAgVGhlcmUgYXJlIG5vCisgKiAgICAgIElPQ1RMIGNvbXBsZXRpb24gcm91dGluZXMgcHJvdmlkZWQuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9kZXZfY3RybCkgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJCSAgIHUzMiBkd19jbWQsIHZvaWQgKnBhcmdzKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfZGV2X2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWFsbG9jYXRlIEJyaWRnZSBkZXZpY2UgZXh0ZW5zaW9uIHN0cnVjdHVyZXMgYW5kIGFsbCBvdGhlciByZXNvdXJjZXMKKyAqICAgICAgYWNxdWlyZWQgYnkgdGhlIEJyaWRnZSBkcml2ZXIuCisgKiAgICAgIE5vIGNhbGxzIHRvIG90aGVyIEJyaWRnZSBkcml2ZXIgZnVuY3Rpb25zIG1heSBzdWJzZXF1ZW50bHkKKyAqICAgICAgb2NjdXIsIGV4Y2VwdCBmb3IgYnJpZGdlX2Rldl9jcmVhdGUoKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBkZXZfY3R4dDogICAgSGFuZGxlIHRvIEJyaWRnZSBkcml2ZXIgZGVmaW5lZCBkZXZpY2UgaW5mb3JtYXRpb24uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8gcmVsZWFzZSBhIHJlc291cmNlIHByZXZpb3VzbHkgYWNxdWlyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldl9jdHh0ICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogRGV2aWNlIGNvbnRleHQgaXMgZnJlZWQuCisgKi8KK3R5cGVkZWYgaW50KCpmeG5fZGV2X2Rlc3Ryb3kpIChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYW5hZ2VzIEkvTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGlvX21hbjogICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBJTyBtYW5hZ2VyIG9uIG91dHB1dC4KKyAqICAgICAgaGNobmxfbWdyOiAgICAgICBIYW5kbGUgdG8gY2hhbm5lbCBtYW5hZ2VyLgorICogICAgICBobXNnX21ncjogICAgICAgIEhhbmRsZSB0byBtZXNzYWdlIG1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuCisgKiAgICAgIC1FUEVSTTogICAgICBDcmVhdGlvbiBmYWlsZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEw7CisgKiAgICAgIENoYW5uZWwgbWFuYWdlciBhbHJlYWR5IGNyZWF0ZWQ7CisgKiAgICAgIE1lc3NhZ2UgbWFuYWdlciBhbHJlYWR5IGNyZWF0ZWQ7CisgKiAgICAgIG1ncl9hdHRydHMgIT0gTlVMTDsKKyAqICAgICAgaW9fbWFuICE9IE5VTEw7CisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9pb19jcmVhdGUpIChzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLAorCQkJCSAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgIGNvbnN0IHN0cnVjdCBpb19hdHRycyAqbWdyX2F0dHJ0cyk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX2lvX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95IG9iamVjdCBjcmVhdGVkIGluIGJyaWRnZV9pb19jcmVhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBJTyBNYW5hZ2VyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRU5PTUVNOiAgICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorICogICAgICAtRVBFUk06ICAgICAgQ3JlYXRpb24gZmFpbGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBoaW9fbWdyOworICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5faW9fZGVzdHJveSkgKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9pb19vbl9sb2FkZWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxvYWRlZCB0byB1cGRhdGUgaW50ZXJuYWwgZGF0YS4gRm9yCisgKiAgICAgIGV4YW1wbGUsIGlmIHNoYXJlZCBtZW1vcnkgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3b3VsZCB1cGRhdGUgdGhlCisgKiAgICAgIHNoYXJlZCBtZW1vcnkgbG9jYXRpb24gYW5kIGFkZHJlc3MuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgIElPIE1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgSW50ZXJuYWwgZmFpbHVyZSBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaGlvX21ncjsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2lvX29ubG9hZGVkKSAoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gZnhuX2lvX2dldHByb2Nsb2FkID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIHRvIGdldCB0aGUgUHJvY2Vzc29yJ3MgY3VycmVudCBhbmQgcHJlZGljdGVkIGxvYWQKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgSU8gTWFuYWdlci4KKyAqICAgICAgcHJvY19sb2FkX3N0YXQgICBQcm9jZXNzb3IgTG9hZCBzdGF0aXN0aWNzCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgU3VjY2Vzcy4KKyAqICAgICAgLUVQRVJNOiAgSW50ZXJuYWwgZmFpbHVyZSBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaGlvX21ncjsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX2lvX2dldHByb2Nsb2FkKSAoc3RydWN0IGlvX21nciAqaGlvX21nciwKKwkJCQkJIHN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICoKKwkJCQkJIHByb2NfbG9hZF9zdGF0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBvYmplY3RzCisgKiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBtc2dfbWFuOiAgICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG1zZ19jdHJsIG1hbmFnZXIgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgICAgICBIYW5kbGUgdG8gYSBkZXZpY2Ugb2JqZWN0LgorICogICAgICBtc2dfY2FsbGJhY2s6ICAgICAgICBDYWxsZWQgd2hlbmV2ZXIgYW4gUk1TX0VYSVQgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5LgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dfbWFuICE9IE5VTEwuCisgKiAgICAgIG1zZ19jYWxsYmFjayAhPSBOVUxMLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX2NyZWF0ZSkKKyAoc3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAorICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX2NyZWF0ZV9xdWV1ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhIG1zZ19jdHJsIHF1ZXVlIGZvciBzZW5kaW5nIG9yIHJlY2VpdmluZyBtZXNzYWdlcyBmcm9tIGEgTWVzc2FnZQorICogICAgICBub2RlIG9uIHRoZSBEU1AuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1zZ19tZ3I6ICAgICAgICAgICAgbXNnX2N0cmwgcXVldWUgbWFuYWdlciBoYW5kbGUgcmV0dXJuZWQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlLgorICogICAgICBtc2dxOiAgICAgICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIG1zZ19jdHJsIHF1ZXVlIG9uIG91dHB1dC4KKyAqICAgICAgbXNncV9pZDoJICAgIElkZW50aWZpZXIgZm9yIG1lc3NhZ2VzIChub2RlIGVudmlyb25tZW50IHBvaW50ZXIpLgorICogICAgICBtYXhfbXNnczogICAgICAgICAgIE1heCBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIG1lc3NhZ2VzIGZvciB0aGUgbm9kZS4KKyAqICAgICAgaDogICAgICAgICAgICAgICAgICBIYW5kbGUgcGFzc2VkIHRvIGhtc2dfbWdyLT5tc2dfY2FsbGJhY2soKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5LgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dxICE9IE5VTEwuCisgKiAgICAgIGggIT0gTlVMTC4KKyAqICAgICAgbWF4X21zZ3MgPiAwLgorICogIEVuc3VyZXM6CisgKiAgICAgIG1zZ3EgIT1OVUxMIDw9PT4gMC4KKyAqLwordHlwZWRlZiBpbnQoKmZ4bl9tc2dfY3JlYXRlcXVldWUpCisgKHN0cnVjdCBtc2dfbWdyICpobXNnX21nciwKKyAgc3RydWN0IG1zZ19xdWV1ZSAqKm1zZ3EsIHUzMiBtc2dxX2lkLCB1MzIgbWF4X21zZ3MsIHZvaWQgKmgpOworCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGUoKS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobXNnX21ncjogICAgSGFuZGxlIHJldHVybmVkIGZyb20gYnJpZGdlX21zZ19jcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBobXNnX21nci4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpmeG5fbXNnX2RlbGV0ZSkgKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19kZWxldGVfcXVldWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBxdWV1ZSBhbGxvY2F0ZWQgaW4gYnJpZGdlX21zZ19jcmVhdGVfcXVldWUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX3F1ZXVlX29iajogIEhhbmRsZSB0byBtc2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZnhuX21zZ19kZWxldGVxdWV1ZSkgKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmopOworCisvKgorICogID09PT09PT09IGJyaWRnZV9tc2dfZ2V0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IGEgbWVzc2FnZSBmcm9tIGEgbXNnX2N0cmwgcXVldWUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX3F1ZXVlX29iajogICAgIEhhbmRsZSB0byBtc2dfY3RybCBxdWV1ZSByZXR1cm5lZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBwbXNnOiAgICAgICAgICBMb2NhdGlvbiB0byBjb3B5IG1lc3NhZ2UgaW50by4KKyAqICAgICAgdXRpbWVvdXQ6ICAgICAgVGltZW91dCB0byB3YWl0IGZvciBhIG1lc3NhZ2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FOiAgVGltZW91dCBvY2N1cnJlZC4KKyAqICAgICAgLUVQRVJNOiAgICAgTm8gZnJhbWVzIGF2YWlsYWJsZSBmb3IgbWVzc2FnZSAobWF4X21zZ3MgdG9vCisgKiAgICAgICAgICAgICAgICAgICAgIHNtYWxsKS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbXNnX3F1ZXVlX29iai4KKyAqICAgICAgcG1zZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX2dldCkgKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJICBzdHJ1Y3QgZHNwX21zZyAqcG1zZywgdTMyIHV0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBicmlkZ2VfbXNnX3B1dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFB1dCBhIG1lc3NhZ2Ugb250byBhIG1zZ19jdHJsIHF1ZXVlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1zZ19xdWV1ZV9vYmo6ICAgICAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBwbXNnOiAgICAgICAgICAgUG9pbnRlciB0byBtZXNzYWdlLgorICogICAgICB1dGltZW91dDogICAgICAgVGltZW91dCB0byB3YWl0IGZvciBhIG1lc3NhZ2UuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FVElNRTogICBUaW1lb3V0IG9jY3VycmVkLgorICogICAgICAtRVBFUk06ICAgICAgTm8gZnJhbWVzIGF2YWlsYWJsZSBmb3IgbWVzc2FnZSAobWF4X21zZ3MgdG9vCisgKiAgICAgICAgICAgICAgICAgICAgICBzbWFsbCkuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIG1zZ19xdWV1ZV9vYmouCisgKiAgICAgIHBtc2cgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqZnhuX21zZ19wdXQpIChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorCQkJCSAgY29uc3Qgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBub3RpZmljYXRpb24gZm9yIHdoZW4gYSBtZXNzYWdlIGlzIHJlYWR5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1zZ19xdWV1ZV9vYmo6ICAgICAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgIGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlLgorICogICAgICBldmVudF9tYXNrOiAgICAgVHlwZSBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQ6IE11c3QgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgIERTUF9OT0RFTUVTU0FHRVJFQURZLCBvciAwIHRvIHVucmVnaXN0ZXIuCisgKiAgICAgIG5vdGlmeV90eXBlOiAgICBEU1BfU0lHTkFMRVZFTlQuCisgKiAgICAgIGhub3RpZmljYXRpb246ICBIYW5kbGUgb2Ygbm90aWZpY2F0aW9uIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgbXNnX3F1ZXVlX29iai4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogICAgICBub3RpZnlfdHlwZSA9PSBEU1BfU0lHTkFMRVZFTlQuCisgKiAgICAgIGV2ZW50X21hc2sgPT0gRFNQX05PREVNRVNTQUdFUkVBRFkgfHwgZXZlbnRfbWFzayA9PSAwLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpmeG5fbXNnX3JlZ2lzdGVybm90aWZ5KQorIChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLCBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gYnJpZGdlX21zZ19zZXRfcXVldWVfaWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgbWVzc2FnZSBxdWV1ZSBpZCB0byBub2RlIGVudmlyb25tZW50LiBBbGxvd3MgYnJpZGdlX21zZ19jcmVhdGVfcXVldWUKKyAqICAgICAgdG8gYmUgY2FsbGVkIGluIG5vZGVfYWxsb2NhdGUsIGJlZm9yZSB0aGUgbm9kZSBlbnZpcm9ubWVudCBpcyBrbm93bi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBtc2dfcXVldWVfb2JqOiAgSGFuZGxlIHRvIG1zZ19jdHJsIHF1ZXVlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgYnJpZGdlX21zZ19jcmVhdGVfcXVldWUuCisgKiAgICAgIG1zZ3FfaWQ6ICAgICAgIE5vZGUgZW52aXJvbm1lbnQgcG9pbnRlci4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBtc2dfcXVldWVfb2JqLgorICogICAgICBtc2dxX2lkICE9IDAuCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiB2b2lkICgqZnhuX21zZ19zZXRxdWV1ZWlkKSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iaiwKKwkJCQkgICAgdTMyIG1zZ3FfaWQpOworCisvKgorICogIEJyaWRnZSBEcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9uIHRhYmxlLgorICoKKyAqICBUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyB0YWJsZSBpcyBmaWxsZWQgaW4gYnkgdGhlIHNwZWNpZmljIEJyaWRnZSBkcml2ZXIsCisgKiAgYW5kIGNvcGllZCBpbnRvIHRoZSBEU1AgQVBJJ3Mgb3duIHNwYWNlLiAgSWYgYW55IGludGVyZmFjZQorICogIGZ1bmN0aW9uIGZpZWxkIGlzIHNldCB0byBhIHZhbHVlIG9mIE5VTEwsIHRoZW4gdGhlIERTUCBBUEkgd2lsbAorICogIGNvbnNpZGVyIHRoYXQgZnVuY3Rpb24gbm90IGltcGxlbWVudGVkLCBhbmQgcmV0dXJuIHRoZSBlcnJvciBjb2RlCisgKiAgLUVOT1NZUyB3aGVuIGEgQnJpZGdlIGRyaXZlciBjbGllbnQgYXR0ZW1wdHMgdG8gY2FsbCB0aGF0IGZ1bmN0aW9uLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIHRhYmxlIGNvbnRhaW5zIERTUCBBUEkgdmVyc2lvbiBudW1iZXJzLCB3aGljaCBhcmUgdXNlZCBieSB0aGUKKyAqICBCcmlkZ2UgZHJpdmVyIGxvYWRlciB0byBoZWxwIGVuc3VyZSBiYWNrd2FyZHMgY29tcGF0aWxpdHkgYmV0d2VlbiBvbGRlcgorICogIEJyaWRnZSBkcml2ZXJzIGFuZCBuZXdlciBEU1AgQVBJLiAgVGhlc2UgbXVzdCBiZSBzZXQgdG8KKyAqICBCUkRfQVBJX01BSk9SX1ZFUlNJT04gYW5kIEJSRF9BUElfTUlOT1JfVkVSU0lPTiwgcmVzcGVjdGl2ZWx5LgorICoKKyAqICBBIEJyaWRnZSBkcml2ZXIgbmVlZCBub3QgZXhwb3J0IGEgQ0hOTCBpbnRlcmZhY2UuICBJbiB0aGlzIGNhc2UsICphbGwqIG9mCisgKiAgdGhlIGJyaWRnZV9jaG5sXyogZW50cmllcyBtdXN0IGJlIHNldCB0byBOVUxMLgorICovCitzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgeworCXUzMiBicmRfYXBpX21ham9yX3ZlcnNpb247CS8qIFNldCB0byBCUkRfQVBJX01BSk9SX1ZFUlNJT04uICovCisJdTMyIGJyZF9hcGlfbWlub3JfdmVyc2lvbjsJLyogU2V0IHRvIEJSRF9BUElfTUlOT1JfVkVSU0lPTi4gKi8KKwlmeG5fZGV2X2NyZWF0ZSBwZm5fZGV2X2NyZWF0ZTsJLyogQ3JlYXRlIGRldmljZSBjb250ZXh0ICovCisJZnhuX2Rldl9kZXN0cm95IHBmbl9kZXZfZGVzdHJveTsJLyogRGVzdHJveSBkZXZpY2UgY29udGV4dCAqLworCWZ4bl9kZXZfY3RybCBwZm5fZGV2X2NudHJsOwkvKiBPcHRpb25hbCB2ZW5kb3IgaW50ZXJmYWNlICovCisJZnhuX2JyZF9tb25pdG9yIHBmbl9icmRfbW9uaXRvcjsJLyogTG9hZCBhbmQvb3Igc3RhcnQgbW9uaXRvciAqLworCWZ4bl9icmRfc3RhcnQgcGZuX2JyZF9zdGFydDsJLyogU3RhcnQgRFNQIHByb2dyYW0uICovCisJZnhuX2JyZF9zdG9wIHBmbl9icmRfc3RvcDsJLyogU3RvcC9yZXNldCBib2FyZC4gKi8KKwlmeG5fYnJkX3N0YXR1cyBwZm5fYnJkX3N0YXR1czsJLyogR2V0IGN1cnJlbnQgYm9hcmQgc3RhdHVzLiAqLworCWZ4bl9icmRfcmVhZCBwZm5fYnJkX3JlYWQ7CS8qIFJlYWQgYm9hcmQgbWVtb3J5ICovCisJZnhuX2JyZF93cml0ZSBwZm5fYnJkX3dyaXRlOwkvKiBXcml0ZSBib2FyZCBtZW1vcnkuICovCisJZnhuX2JyZF9zZXRzdGF0ZSBwZm5fYnJkX3NldF9zdGF0ZTsJLyogU2V0cyB0aGUgQm9hcmQgU3RhdGUgKi8KKwlmeG5fYnJkX21lbWNvcHkgcGZuX2JyZF9tZW1fY29weTsJLyogQ29waWVzIERTUCBNZW1vcnkgKi8KKwlmeG5fYnJkX21lbXdyaXRlIHBmbl9icmRfbWVtX3dyaXRlOwkvKiBXcml0ZSBEU1AgTWVtb3J5IHcvbyBoYWx0ICovCisJZnhuX2JyZF9tZW1tYXAgcGZuX2JyZF9tZW1fbWFwOwkvKiBNYXBzIE1QVSBtZW0gdG8gRFNQIG1lbSAqLworCWZ4bl9icmRfbWVtdW5tYXAgcGZuX2JyZF9tZW1fdW5fbWFwOwkvKiBVbm1hcHMgTVBVIG1lbSB0byBEU1AgbWVtICovCisJZnhuX2NobmxfY3JlYXRlIHBmbl9jaG5sX2NyZWF0ZTsJLyogQ3JlYXRlIGNoYW5uZWwgbWFuYWdlci4gKi8KKwlmeG5fY2hubF9kZXN0cm95IHBmbl9jaG5sX2Rlc3Ryb3k7CS8qIERlc3Ryb3kgY2hhbm5lbCBtYW5hZ2VyLiAqLworCWZ4bl9jaG5sX29wZW4gcGZuX2Nobmxfb3BlbjsJLyogQ3JlYXRlIGEgbmV3IGNoYW5uZWwuICovCisJZnhuX2NobmxfY2xvc2UgcGZuX2NobmxfY2xvc2U7CS8qIENsb3NlIGEgY2hhbm5lbC4gKi8KKwlmeG5fY2hubF9hZGRpb3JlcSBwZm5fY2hubF9hZGRfaW9fcmVxOwkvKiBSZXEgSS9PIG9uIGEgY2hhbm5lbC4gKi8KKwlmeG5fY2hubF9nZXRpb2MgcGZuX2NobmxfZ2V0X2lvYzsJLyogV2FpdCBmb3IgSS9PIGNvbXBsZXRpb24uICovCisJZnhuX2NobmxfY2FuY2VsaW8gcGZuX2NobmxfY2FuY2VsX2lvOwkvKiBDYW5jbCBJL08gb24gYSBjaGFubmVsLiAqLworCWZ4bl9jaG5sX2ZsdXNoaW8gcGZuX2NobmxfZmx1c2hfaW87CS8qIEZsdXNoIEkvTy4gKi8KKwlmeG5fY2hubF9nZXRpbmZvIHBmbl9jaG5sX2dldF9pbmZvOwkvKiBHZXQgY2hhbm5lbCBzcGVjaWZpYyBpbmZvICovCisJLyogR2V0IGNoYW5uZWwgbWFuYWdlciBpbmZvLiAqLworCWZ4bl9jaG5sX2dldG1ncmluZm8gcGZuX2NobmxfZ2V0X21ncl9pbmZvOworCWZ4bl9jaG5sX2lkbGUgcGZuX2NobmxfaWRsZTsJLyogSWRsZSB0aGUgY2hhbm5lbCAqLworCS8qIFJlZ2lzdGVyIGZvciBub3RpZi4gKi8KKwlmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSBwZm5fY2hubF9yZWdpc3Rlcl9ub3RpZnk7CisJZnhuX2lvX2NyZWF0ZSBwZm5faW9fY3JlYXRlOwkvKiBDcmVhdGUgSU8gbWFuYWdlciAqLworCWZ4bl9pb19kZXN0cm95IHBmbl9pb19kZXN0cm95OwkvKiBEZXN0cm95IElPIG1hbmFnZXIgKi8KKwlmeG5faW9fb25sb2FkZWQgcGZuX2lvX29uX2xvYWRlZDsJLyogTm90aWZ5IG9mIHByb2dyYW0gbG9hZGVkICovCisJLyogR2V0IFByb2Nlc3NvcidzIGN1cnJlbnQgYW5kIHByZWRpY3RlZCBsb2FkICovCisJZnhuX2lvX2dldHByb2Nsb2FkIHBmbl9pb19nZXRfcHJvY19sb2FkOworCWZ4bl9tc2dfY3JlYXRlIHBmbl9tc2dfY3JlYXRlOwkvKiBDcmVhdGUgbWVzc2FnZSBtYW5hZ2VyICovCisJLyogQ3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KKwlmeG5fbXNnX2NyZWF0ZXF1ZXVlIHBmbl9tc2dfY3JlYXRlX3F1ZXVlOworCWZ4bl9tc2dfZGVsZXRlIHBmbl9tc2dfZGVsZXRlOwkvKiBEZWxldGUgbWVzc2FnZSBtYW5hZ2VyICovCisJLyogRGVsZXRlIG1lc3NhZ2UgcXVldWUgKi8KKwlmeG5fbXNnX2RlbGV0ZXF1ZXVlIHBmbl9tc2dfZGVsZXRlX3F1ZXVlOworCWZ4bl9tc2dfZ2V0IHBmbl9tc2dfZ2V0OwkvKiBHZXQgYSBtZXNzYWdlICovCisJZnhuX21zZ19wdXQgcGZuX21zZ19wdXQ7CS8qIFNlbmQgYSBtZXNzYWdlICovCisJLyogUmVnaXN0ZXIgZm9yIG5vdGlmLiAqLworCWZ4bl9tc2dfcmVnaXN0ZXJub3RpZnkgcGZuX21zZ19yZWdpc3Rlcl9ub3RpZnk7CisJLyogU2V0IG1lc3NhZ2UgcXVldWUgaWQgKi8KKwlmeG5fbXNnX3NldHF1ZXVlaWQgcGZuX21zZ19zZXRfcXVldWVfaWQ7Cit9OworCisvKgorICogID09PT09PT09IGJyaWRnZV9kcnZfZW50cnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlcnMgQnJpZGdlIGRyaXZlciBmdW5jdGlvbnMgd2l0aCB0aGUgRFNQIEFQSS4gQ2FsbGVkIG9ubHkgb25jZQorICogICAgICBieSB0aGUgRFNQIEFQSS4gIFRoZSBjYWxsZXIgd2lsbCBmaXJzdCBjaGVjayBEU1AgQVBJIHZlcnNpb24KKyAqICAgICAgY29tcGF0aWJpbGl0eSwgYW5kIHRoZW4gY29weSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbnRvIGl0cyBvd24KKyAqICAgICAgbWVtb3J5IHNwYWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRydl9pbnRmICBQb2ludGVyIHRvIGEgbG9jYXRpb24gdG8gcmVjZWl2ZSBhIHBvaW50ZXIgdG8gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBCcmlkZ2UgZHJpdmVyIGludGVyZmFjZS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBUaGUgY29kZSBzZWdtZW50IHRoaXMgZnVuY3Rpb24gcmVzaWRlcyBpbiBtdXN0IGV4cGVjdCB0byBiZSBkaXNjYXJkZWQKKyAqICAgICAgYWZ0ZXIgY29tcGxldGlvbi4KKyAqICBFbnN1cmVzOgorICogICAgICBkcnZfaW50ZiBwb2ludGVyIGluaXRpYWxpemVkIHRvIEJyaWRnZSBkcml2ZXIncyBmdW5jdGlvbgorICogICAgICBpbnRlcmZhY2UuIE5vIHN5c3RlbSByZXNvdXJjZXMgYXJlIGFjcXVpcmVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAgRGV0YWlsczoKKyAqICAgICAgQ2FsbGVkIGR1cmluZyB0aGUgRGV2aWNlX0luaXQgcGhhc2UuCisgKi8KK3ZvaWQgYnJpZGdlX2Rydl9lbnRyeShzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKipkcnZfaW50ZiwKKwkJICAgY29uc3QgY2hhciAqZHJpdmVyX2ZpbGVfbmFtZSk7CisKKyNlbmRpZiAvKiBEU1BERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGRlaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNThhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZGVoLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGRzcGRlaC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERlZmluZXMgdXBwZXIgZWRnZSBERUggZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IGFsbCBCcmlkZ2UgZHJpdmVyL0RTUCBBUEkKKyAqIGludGVyZmFjZSB0YWJsZXMuCisgKgorICogTm90ZXM6CisgKiAgIEZ1bmN0aW9uIGNvbW1lbnQgaGVhZGVycyByZXNpZGUgd2l0aCB0aGUgZnVuY3Rpb24gdHlwZWRlZnMgaW4gZHNwZGVmcy5oLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgRmVsaXBlIENvbnRyZXJhcworICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUERFSF8KKyNkZWZpbmUgRFNQREVIXworCitzdHJ1Y3QgZGVoX21ncjsKK3N0cnVjdCBkZXZfb2JqZWN0Oworc3RydWN0IGRzcF9ub3RpZmljYXRpb247CisKK2ludCBicmlkZ2VfZGVoX2NyZWF0ZShzdHJ1Y3QgZGVoX21nciAqKnJldF9kZWgsCisJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKK2ludCBicmlkZ2VfZGVoX2Rlc3Ryb3koc3RydWN0IGRlaF9tZ3IgKmRlaCk7CisKK2ludCBicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3QgZGVoX21nciAqZGVoLAorCQl1MzIgZXZlbnRfbWFzaywKKwkJdTMyIG5vdGlmeV90eXBlLAorCQlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqaG5vdGlmaWNhdGlvbik7CisKK3ZvaWQgYnJpZGdlX2RlaF9ub3RpZnkoc3RydWN0IGRlaF9tZ3IgKmRlaCwgaW50IGV2ZW50LCBpbnQgaW5mbyk7CisKKyNlbmRpZiAvKiBEU1BERUhfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiMjUwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3BkcnYuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogZHNwZHJ2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBpcyB0aGUgU3RyZWFtIEludGVyZmFjZSBmb3IgdGhlIERTcCBBUEkuCisgKiBBbGwgRGV2aWNlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCB2aWEgRGV2aWNlSU9Db250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZiAhZGVmaW5lZCBfRFNQRFJWX0hfCisjZGVmaW5lIF9EU1BEUlZfSF8KKworI2RlZmluZSBNQVhfREVWICAgICAxMAkJLyogTWF4IHN1cHBvcnQgb2YgMTAgZGV2aWNlcyAqLworCisvKgorICogID09PT09PT09IGRzcF9kZWluaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBEZXZpY2UgTWFuYWdlciB0byBkZS1pbml0aWFsaXplIGEgZGV2aWNlLgorICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBjYWxsZWQgYnkgYXBwbGljYXRpb25zLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGRldmljZV9jb250ZXh0OkhhbmRsZSB0byB0aGUgZGV2aWNlIGNvbnRleHQuIFRoZSBYWFhfSW5pdCBmdW5jdGlvbgorICogICAgICBjcmVhdGVzIGFuZCByZXR1cm5zIHRoaXMgaWRlbnRpZmllci4KKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGluZGljYXRlcyB0aGUgZGV2aWNlIHN1Y2Nlc3NmdWxseSBkZS1pbml0aWFsaXplZC4gT3RoZXJ3aXNlIGl0CisgKiAgICAgIHJldHVybnMgRkFMU0UuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGRldmljZV9jb250ZXh0IT0gTlVMTC4gRm9yIGEgYnVpbHQgaW4gZGV2aWNlIHRoaXMgc2hvdWxkIG5ldmVyCisgKiAgICAgIGdldCBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgZHNwX2RlaW5pdCh1MzIgZGV2aWNlX2NvbnRleHQpOworCisvKgorICogID09PT09PT09IGRzcF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgRGV2aWNlIE1hbmFnZXIgdG8gaW5pdGlhbGl6ZSBhIGRldmljZS4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIGJ5IGFwcGxpY2F0aW9ucworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGR3X2NvbnRleHQ6ICBTcGVjaWZpZXMgYSBwb2ludGVyIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlZ2lzdHJ5CisgKiAgICAgICAgICAgICAgICAgIHBhdGggdG8gdGhlIGFjdGl2ZSBrZXkgZm9yIHRoZSBzdHJlYW0gaW50ZXJmYWNlIGRyaXZlci4KKyAqICAgICAgICAgICAgICAgICAgSEtFWV9MT0NBTF9NQUNISU5FXERyaXZlcnNcQWN0aXZlCisgKiAgUmV0dXJuczoKKyAqICAgICAgUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgZGV2aWNlIGNvbnRleHQgY3JlYXRlZC4gVGhpcyBpcyB0aGUgb3VyIGFjdHVhbAorICogICAgICBEZXZpY2UgT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgRFNQIERldmljZSBpbnN0YW5jZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZWVkZWQ6ICBkZXZpY2UgY29udGV4dCA+IDAKKyAqICAgICAgRmFpbGVkOiAgICAgZGV2aWNlIENvbnRleHQgPSAwCisgKi8KK2V4dGVybiB1MzIgZHNwX2luaXQodTMyICppbml0X3N0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY1ZjkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIGRzcGlvLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRGVjbGFyZXMgdGhlIHVwcGVyIGVkZ2UgSU8gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IGFsbCBCcmlkZ2UgZHJpdmVyIC9EU1AgQVBJCisgKiBpbnRlcmZhY2UgdGFibGVzLgorICoKKyAqIE5vdGVzOgorICogICBGdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUElPXworI2RlZmluZSBEU1BJT18KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorCitleHRlcm4gaW50IGJyaWRnZV9pb19jcmVhdGUoc3RydWN0IGlvX21nciAqKmlvX21hbiwKKwkJCQkgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKTsKKworZXh0ZXJuIGludCBicmlkZ2VfaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKworZXh0ZXJuIGludCBicmlkZ2VfaW9fb25fbG9hZGVkKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IpOworCitleHRlcm4gaW50IGl2YV9pb19vbl9sb2FkZWQoc3RydWN0IGlvX21nciAqaGlvX21ncik7CitleHRlcm4gaW50IGJyaWRnZV9pb19nZXRfcHJvY19sb2FkKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJICAgICAgIHN0cnVjdCBkc3BfcHJvY2xvYWRzdGF0ICpwcm9jX2xzdGF0KTsKKworI2VuZGlmIC8qIERTUElPXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHNwaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUwNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcGlvY3RsLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGRzcGlvY3RsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQnJpZGdlIGRyaXZlciBCUkRfSU9DdGwgcmVzZXJ2ZWQgY29tbWFuZCBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUElPQ1RMXworI2RlZmluZSBEU1BJT0NUTF8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyICovCisjaW5jbHVkZSA8aHdfZGVmcy5oPgorI2luY2x1ZGUgPGh3X21tdS5oPgorCisvKgorICogQW55IElPQ1RMUyBhdCBvciBhYm92ZSB0aGlzIHZhbHVlIGFyZSByZXNlcnZlZCBmb3Igc3RhbmRhcmQgQnJpZGdlIGRyaXZlcgorICogaW50ZXJmYWNlcy4KKyAqLworI2RlZmluZSBCUkRJT0NUTF9SRVNFUlZFREJBU0UgICAgICAgMHg4MDAwCisKKyNkZWZpbmUgQlJESU9DVExfQ0hOTFJFQUQgICAgICAgICAgIChCUkRJT0NUTF9SRVNFUlZFREJBU0UgKyAweDEwKQorI2RlZmluZSBCUkRJT0NUTF9DSE5MV1JJVEUgICAgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4MjApCisjZGVmaW5lIEJSRElPQ1RMX0dFVElOVFJDT1VOVCAgICAgICAoQlJESU9DVExfUkVTRVJWRURCQVNFICsgMHgzMCkKKyNkZWZpbmUgQlJESU9DVExfUkVTRVRJTlRSQ09VTlQgICAgIChCUkRJT0NUTF9SRVNFUlZFREJBU0UgKyAweDQwKQorI2RlZmluZSBCUkRJT0NUTF9JTlRFUlJVUFREU1AgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4NTApCisvKiBETU1VICovCisjZGVmaW5lIEJSRElPQ1RMX1NFVE1NVUNPTkZJRyAgICAgICAoQlJESU9DVExfUkVTRVJWRURCQVNFICsgMHg2MCkKKy8qIFBXUiAqLworI2RlZmluZSBCUkRJT0NUTF9QV1JDT05UUk9MICAgICAgICAgKEJSRElPQ1RMX1JFU0VSVkVEQkFTRSArIDB4NzApCisKKy8qIGF0dGVudGlvbiwgbW9kaWZpZXJzOgorICogU29tZSBvZiB0aGVzZSBjb250cm9sIGVudW1lcmF0aW9ucyBhcmUgbWFkZSB2aXNpYmxlIHRvIHVzZXIgZm9yIHBvd2VyCisgKiBjb250cm9sLCBzbyBhbnkgY2hhbmdlcyB0byB0aGlzIGxpc3QsIHNob3VsZCBhbHNvIGJlIHVwZGF0ZWQgaW4gdGhlIHVzZXIKKyAqIGhlYWRlciBmaWxlICdkYmRlZnMuaCcgKioqLworLyogVGhlc2UgaW9jdGxzIGFyZSByZXNlcnZlZCBmb3IgUFdSIHBvd2VyIGNvbW1hbmRzIGZvciB0aGUgRFNQICovCisjZGVmaW5lIEJSRElPQ1RMX0RFRVBTTEVFUCAgICAgICAgICAoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4MCkKKyNkZWZpbmUgQlJESU9DVExfRU1FUkdFTkNZU0xFRVAgICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHgxKQorI2RlZmluZSBCUkRJT0NUTF9XQUtFVVAgICAgICAgICAgICAgKEJSRElPQ1RMX1BXUkNPTlRST0wgKyAweDIpCisjZGVmaW5lIEJSRElPQ1RMX1BXUkVOQUJMRSAgICAgICAgICAoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4MykKKyNkZWZpbmUgQlJESU9DVExfUFdSRElTQUJMRSAgICAgICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg0KQorI2RlZmluZSBCUkRJT0NUTF9DTEtfQ1RSTAkJICAgIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg3KQorLyogRFNQIEluaXRpYXRlZCBIaWJlcm5hdGUgKi8KKyNkZWZpbmUgQlJESU9DVExfUFdSX0hJQkVSTkFURQkoQlJESU9DVExfUFdSQ09OVFJPTCArIDB4OCkKKyNkZWZpbmUgQlJESU9DVExfUFJFU0NBTEVfTk9USUZZIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHg5KQorI2RlZmluZSBCUkRJT0NUTF9QT1NUU0NBTEVfTk9USUZZIChCUkRJT0NUTF9QV1JDT05UUk9MICsgMHhBKQorI2RlZmluZSBCUkRJT0NUTF9DT05TVFJBSU5UX1JFUVVFU1QgKEJSRElPQ1RMX1BXUkNPTlRST0wgKyAweEIpCisKKy8qIE51bWJlciBvZiBhY3R1YWwgRFNQLU1NVSBUTEIgZW50cnJpZXMgKi8KKyNkZWZpbmUgQlJESU9DVExfTlVNT0ZNTVVUTEIgICAgICAgIDMyCisKK3N0cnVjdCBicmlkZ2VfaW9jdGxfZXh0cHJvYyB7CisJdTMyIHVsX2RzcF92YTsJCS8qIERTUCB2aXJ0dWFsIGFkZHJlc3MgKi8KKwl1MzIgdWxfZ3BwX3BhOwkJLyogR1BQIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkvKiBHUFAgdmlydHVhbCBhZGRyZXNzLiBfX3ZhIGRvZXMgbm90IHdvcmsgZm9yIGlvcmVtYXBwZWQgYWRkcmVzc2VzICovCisJdTMyIHVsX2dwcF92YTsKKwl1MzIgdWxfc2l6ZTsJCS8qIFNpemUgb2YgdGhlIG1hcHBlZCBtZW1vcnkgaW4gYnl0ZXMgKi8KKwllbnVtIGh3X2VuZGlhbmlzbV90IGVuZGlhbmlzbTsKKwllbnVtIGh3X21tdV9taXhlZF9zaXplX3QgbWl4ZWRfbW9kZTsKKwllbnVtIGh3X2VsZW1lbnRfc2l6ZV90IGVsZW1fc2l6ZTsKK307CisKKyNlbmRpZiAvKiBEU1BJT0NUTF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9kc3Btc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGJkNDU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2RzcG1zZy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBkc3Btc2cuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJlcyB0aGUgdXBwZXIgZWRnZSBtZXNzYWdlIGNsYXNzIGxpYnJhcnkgZnVuY3Rpb25zIHJlcXVpcmVkIGJ5CisgKiBhbGwgQnJpZGdlIGRyaXZlciAvIERTUCBBUEkgaW50ZXJmYWNlIHRhYmxlcy4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUKKyAqIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IGNsYXNzIG9mIEJyaWRnZSBkcml2ZXIgY2hhbm5lbCBsaWJyYXJ5LgorICoKKyAqIE5vdGVzOgorICogICBGdW5jdGlvbiBjb21tZW50IGhlYWRlcnMgcmVzaWRlIGluIGRzcGRlZnMuaC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIERTUE1TR18KKyNkZWZpbmUgRFNQTVNHXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL21zZ2RlZnMuaD4KKworZXh0ZXJuIGludCBicmlkZ2VfbXNnX2NyZWF0ZShzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4sCisJCQkJICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICAgbXNnX29uZXhpdCBtc2dfY2FsbGJhY2spOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfY3JlYXRlX3F1ZXVlKHN0cnVjdCBtc2dfbWdyICpobXNnX21nciwKKwkJCQkgICAgICAgc3RydWN0IG1zZ19xdWV1ZSAqKm1zZ3EsCisJCQkJICAgICAgIHUzMiBtc2dxX2lkLCB1MzIgbWF4X21zZ3MsIHZvaWQgKmFyZyk7CisKK2V4dGVybiB2b2lkIGJyaWRnZV9tc2dfZGVsZXRlKHN0cnVjdCBtc2dfbWdyICpobXNnX21ncik7CisKK2V4dGVybiB2b2lkIGJyaWRnZV9tc2dfZGVsZXRlX3F1ZXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmopOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfZ2V0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJIHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfcHV0KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpOworCitleHRlcm4gaW50IGJyaWRnZV9tc2dfcmVnaXN0ZXJfbm90aWZ5KHN0cnVjdCBtc2dfcXVldWUgKm1zZ19xdWV1ZV9vYmosCisJCQkJCSAgdTMyIGV2ZW50X21hc2ssCisJCQkJCSAgdTMyIG5vdGlmeV90eXBlLAorCQkJCQkgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJCSAgKmhub3RpZmljYXRpb24pOworCitleHRlcm4gdm9pZCBicmlkZ2VfbXNnX3NldF9xdWV1ZV9pZChzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfcXVldWVfb2JqLAorCQkJCQl1MzIgbXNncV9pZCk7CisKKyNlbmRpZiAvKiBEU1BNU0dfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMTA5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZHluYW1pY19sb2FkZXIuaApAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIGR5bmFtaWNfbG9hZGVyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0RZTkFNSUNfTE9BREVSX0hfCisjZGVmaW5lIF9EWU5BTUlDX0xPQURFUl9IXworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBEeW5hbWljIExvYWRlcgorICoKKyAqIFRoZSBmdW5jdGlvbiBvZiB0aGUgZHluYW1pYyBsb2FkZXIgaXMgdG8gbG9hZCBhICJtb2R1bGUiIGNvbnRhaW5pbmcKKyAqIGluc3RydWN0aW9ucyBmb3IgYSAidGFyZ2V0IiBwcm9jZXNzb3IgaW50byB0aGF0IHByb2Nlc3Nvci4gIEluIHRoZSBwcm9jZXNzCisgKiBpdCBhc3NpZ25zIG1lbW9yeSBmb3IgdGhlIG1vZHVsZSwgcmVzb2x2ZXMgc3ltYm9sIHJlZmVyZW5jZXMgbWFkZSBieSB0aGUKKyAqIG1vZHVsZSwgYW5kIHJlbWVtYmVycyBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIG1vZHVsZS4KKyAqCisgKiBUaGUgZHluYW1pYyBsb2FkZXIgaXMgcGFyYW1ldGVyaXplZCBmb3IgYSBwYXJ0aWN1bGFyIHN5c3RlbSBieSA0IGNsYXNzZXMKKyAqIHRoYXQgc3VwcGx5IHRoZSBtb2R1bGUgYW5kIHN5c3RlbSBzcGVjaWZpYyBmdW5jdGlvbnMgaXQgcmVxdWlyZXMKKyAqLworCS8qIFRoZSByZWFkIGZ1bmN0aW9ucyBmb3IgdGhlIG1vZHVsZSBpbWFnZSB0byBiZSBsb2FkZWQgKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW07CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgImhvc3QiIHN5bWJvbCBhbmQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW07CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGFsbG9jYXRvciBmb3IgInRhcmdldCIgbWVtb3J5ICovCitzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGU7CisKKwkvKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGNvcHktaW50by10YXJnZXQtbWVtb3J5IGZ1bmN0aW9ucyAqLworc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemU7CisKKy8qCisgKiBPcHRpb24gZmxhZ3MgdG8gbW9kaWZ5IHRoZSBiZWhhdmlvciBvZiBtb2R1bGUgbG9hZGluZworICovCisjZGVmaW5lIERMT0FEX0lOSVRCU1MgMHgxCS8qIGluaXRpYWxpemUgQlNTIHNlY3Rpb25zIHRvIHplcm8gKi8KKyNkZWZpbmUgRExPQURfQklHRU5EIDB4MgkvKiByZXF1aXJlIGJpZy1lbmRpYW4gbG9hZCBtb2R1bGUgKi8KKyNkZWZpbmUgRExPQURfTElUVExFIDB4NAkvKiByZXF1aXJlIGxpdHRsZS1lbmRpYW4gbG9hZCBtb2R1bGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcm9jZWR1cmUgZHluYW1pY19sb2FkX21vZHVsZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbW9kdWxlICBUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICogIHN5bXMgICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKiAgYWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICogIGluaXQgICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGluaXRpYWxpemF0aW9uLCBvciBOVUxMIGZvciBzeW1ib2wgcmVhZCBvbmx5CisgKiAgb3B0aW9ucyBPcHRpb24gZmxhZ3MgRExPQURfKgorICogIG1oYW5kbGUgQSBtb2R1bGUgaGFuZGxlIGZvciB1c2Ugd2l0aCBEeW5hbWljX1VubG9hZAorICoKKyAqIEVmZmVjdDoKKyAqICBUaGUgbW9kdWxlIGltYWdlIGlzIHJlYWQgdXNpbmcgKm1vZHVsZS4gIFRhcmdldCBzdG9yYWdlIGZvciB0aGUgbmV3IGltYWdlIGlzCisgKiBvYnRhaW5lZCBmcm9tICphbGxvYy4gIFN5bWJvbHMgZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBieSB0aGUgbW9kdWxlIGFyZQorICogbWFuYWdlZCB1c2luZyAqc3ltcy4gIFRoZSBpbWFnZSBpcyB0aGVuIHJlbG9jYXRlZCBhbmQgcmVmZXJlbmNlcyByZXNvbHZlZAorICogYXMgbmVjZXNzYXJ5LCBhbmQgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIGJpdHMgYXJlIHBsYWNlZCBpbnRvIHRhcmdldCBtZW1vcnkKKyAqIHVzaW5nICppbml0LgorICoKKyAqIFJldHVybnM6CisgKiAgT24gYSBzdWNjZXNzZnVsIGxvYWQsIGEgbW9kdWxlIGhhbmRsZSBpcyBwbGFjZWQgaW4gKm1oYW5kbGUsIGFuZCB6ZXJvIGlzCisgKiByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgbnVtYmVyIG9mIGVycm9ycyBkZXRlY3RlZCBpcyByZXR1cm5lZC4gIEluZGl2aWR1YWwKKyAqIGVycm9ycyBhcmUgcmVwb3J0ZWQgZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworZXh0ZXJuIGludCBkeW5hbWljX2xvYWRfbW9kdWxlKAorCQkJCSAgICAgIC8qIHRoZSBzb3VyY2UgZm9yIHRoZSBtb2R1bGUgaW1hZ2UgKi8KKwkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICptb2R1bGUsCisJCQkJICAgICAgLyogaG9zdCBzdXBwb3J0IGZvciBzeW1ib2xzIGFuZCBzdG9yYWdlICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCQkgICAgICAvKiB0aGUgdGFyZ2V0IG1lbW9yeSBhbGxvY2F0b3IgKi8KKwkJCQkgICAgICBzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKmFsbG9jLAorCQkJCSAgICAgIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGluaXRpYWxpemVyICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKmluaXQsCisJCQkJICAgICAgdW5zaWduZWQgb3B0aW9ucywJLyogb3B0aW9uIGZsYWdzICovCisJCQkJICAgICAgLyogdGhlIHJldHVybmVkIG1vZHVsZSBoYW5kbGUgKi8KKwkJCQkgICAgICB2b2lkICoqbWhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUHJvY2VkdXJlIGR5bmFtaWNfb3Blbl9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIG1vZHVsZSAgVGhlIGlucHV0IHN0cmVhbSB0aGF0IHN1cHBsaWVzIHRoZSBtb2R1bGUgaW1hZ2UKKyAqICBzeW1zICAgIEhvc3Qtc2lkZSBzeW1ib2wgdGFibGUgYW5kIG1hbGxvYy9mcmVlIGZ1bmN0aW9ucworICogIGFsbG9jICAgVGFyZ2V0LXNpZGUgbWVtb3J5IGFsbG9jYXRpb24KKyAqICBpbml0ICAgIFRhcmdldC1zaWRlIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgb3IgTlVMTCBmb3Igc3ltYm9sIHJlYWQgb25seQorICogIG9wdGlvbnMgT3B0aW9uIGZsYWdzIERMT0FEXyoKKyAqICBtaGFuZGxlIEEgbW9kdWxlIGhhbmRsZSBmb3IgdXNlIHdpdGggRHluYW1pY19VbmxvYWQKKyAqCisgKiBFZmZlY3Q6CisgKiAgVGhlIG1vZHVsZSBpbWFnZSBpcyByZWFkIHVzaW5nICptb2R1bGUuICBUYXJnZXQgc3RvcmFnZSBmb3IgdGhlIG5ldyBpbWFnZSBpcworICogb2J0YWluZWQgZnJvbSAqYWxsb2MuICBTeW1ib2xzIGRlZmluZWQgYW5kIHJlZmVyZW5jZWQgYnkgdGhlIG1vZHVsZSBhcmUKKyAqIG1hbmFnZWQgdXNpbmcgKnN5bXMuICBUaGUgaW1hZ2UgaXMgdGhlbiByZWxvY2F0ZWQgYW5kIHJlZmVyZW5jZXMgcmVzb2x2ZWQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5kIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSBiaXRzIGFyZSBwbGFjZWQgaW50byB0YXJnZXQgbWVtb3J5CisgKiB1c2luZyAqaW5pdC4KKyAqCisgKiBSZXR1cm5zOgorICogIE9uIGEgc3VjY2Vzc2Z1bCBsb2FkLCBhIG1vZHVsZSBoYW5kbGUgaXMgcGxhY2VkIGluICptaGFuZGxlLCBhbmQgemVybyBpcworICogcmV0dXJuZWQuICBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuICBJbmRpdmlkdWFsCisgKiBlcnJvcnMgYXJlIHJlcG9ydGVkIGR1cmluZyB0aGUgbG9hZCBwcm9jZXNzIHVzaW5nIHN5bXMtPmVycm9yX3JlcG9ydCgpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK2V4dGVybiBpbnQgZHluYW1pY19vcGVuX21vZHVsZSgKKwkJCQkgICAgICAvKiB0aGUgc291cmNlIGZvciB0aGUgbW9kdWxlIGltYWdlICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqbW9kdWxlLAorCQkJCSAgICAgIC8qIGhvc3Qgc3VwcG9ydCBmb3Igc3ltYm9scyBhbmQgc3RvcmFnZSAqLworCQkJCSAgICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnN5bXMsCisJCQkJICAgICAgLyogdGhlIHRhcmdldCBtZW1vcnkgYWxsb2NhdG9yICovCisJCQkJICAgICAgc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICphbGxvYywKKwkJCQkgICAgICAvKiB0aGUgdGFyZ2V0IG1lbW9yeSBpbml0aWFsaXplciAqLworCQkJCSAgICAgIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0LAorCQkJCSAgICAgIHVuc2lnbmVkIG9wdGlvbnMsCS8qIG9wdGlvbiBmbGFncyAqLworCQkJCSAgICAgIC8qIHRoZSByZXR1cm5lZCBtb2R1bGUgaGFuZGxlICovCisJCQkJICAgICAgdm9pZCAqKm1oYW5kbGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFByb2NlZHVyZSBkeW5hbWljX3VubG9hZF9tb2R1bGUKKyAqCisgKiBQYXJhbWV0ZXJzOgorICogIG1oYW5kbGUgQSBtb2R1bGUgaGFuZGxlIGZyb20gZHluYW1pY19sb2FkX21vZHVsZQorICogIHN5bXMgICAgSG9zdC1zaWRlIHN5bWJvbCB0YWJsZSBhbmQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zCisgKiAgYWxsb2MgICBUYXJnZXQtc2lkZSBtZW1vcnkgYWxsb2NhdGlvbgorICoKKyAqIEVmZmVjdDoKKyAqICBUaGUgbW9kdWxlIHNwZWNpZmllZCBieSBtaGFuZGxlIGlzIHVubG9hZGVkLiAgVW5sb2FkaW5nIGNhdXNlcyBhbGwKKyAqIHRhcmdldCBtZW1vcnkgdG8gYmUgZGVhbGxvY2F0ZWQsIGFsbCBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIG1vZHVsZSB0bworICogYmUgcHVyZ2VkLCBhbmQgYW55IGhvc3Qtc2lkZSBzdG9yYWdlIHVzZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyIGZvcgorICogdGhpcyBtb2R1bGUgdG8gYmUgcmVsZWFzZWQuCisgKgorICogUmV0dXJuczoKKyAqICBaZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuCisgKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworZXh0ZXJuIGludCBkeW5hbWljX3VubG9hZF9tb2R1bGUodm9pZCAqbWhhbmRsZSwJLyogdGhlIG1vZHVsZQorCQkJCQkJCSAqIGhhbmRsZSAqLworCQkJCSAvKiBob3N0IHN1cHBvcnQgZm9yIHN5bWJvbHMgYW5kCisJCQkJICAqIHN0b3JhZ2UgKi8KKwkJCQkgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqc3ltcywKKwkJCQkgLyogdGhlIHRhcmdldCBtZW1vcnkgYWxsb2NhdG9yICovCisJCQkJIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqYWxsb2MsCisJCQkJIC8qIHRoZSB0YXJnZXQgbWVtb3J5IGluaXRpYWxpemVyICovCisJCQkJIHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICppbml0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yIGlucHV0IG9mIHRoZSBtb2R1bGUgaW1hZ2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0geworLyogcHVibGljOiAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogcmVhZF9idWZmZXIKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBidWZmZXIgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBmaWxsCisgICAgICogIGJ1ZnNpeiAgQW1vdW50IG9mIGRhdGEgZGVzaXJlZCBpbiBzaXplb2YoKSB1bml0cworICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgUmVhZHMgdGhlIHNwZWNpZmllZCBhbW91bnQgb2YgZGF0YSBmcm9tIHRoZSBtb2R1bGUgaW5wdXQgc3RyZWFtCisgICAgICogaW50byB0aGUgc3BlY2lmaWVkIGJ1ZmZlci4gIFJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIHJlYWQgaW4gc2l6ZW9mKCkKKyAgICAgKiB1bml0cyAod2hpY2ggaWYgbGVzcyB0aGFuIHRoZSBzcGVjaWZpY2F0aW9uLCByZXByZXNlbnRzIGFuIGVycm9yKS4KKyAgICAgKgorICAgICAqIE5PVEVTOgorICAgICAqICBJbiByZWxlYXNlIDEgaW5jcmVtZW50cyB0aGUgZmlsZSBwb3NpdGlvbiBieSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlpbnQgKCpyZWFkX2J1ZmZlcikgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXNwdHIsCisJCQkgICAgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBidWZzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBzZXRfZmlsZV9wb3NuIChyZWxlYXNlIDEgb25seSkKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBwb3NuICBEZXNpcmVkIGZpbGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gc3RhcnQgb2YgZmlsZSBpbiBzaXplb2YoKSB1bml0cy4KKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIEFkanVzdHMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBzdHJlYW0gb2JqZWN0IHNvIHRoYXQgdGhlIG5leHQKKyAgICAgKiByZWFkX2J1ZmZlciBjYWxsIHdpbGwgYmVnaW4gdG8gcmVhZCBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldCBmcm9tCisgICAgICogdGhlIGJlZ2lubmluZyBvZiB0aGUgaW5wdXQgbW9kdWxlLiAgUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybworICAgICAqIGZvciBmYWlsdXJlLgorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKnNldF9maWxlX3Bvc24pIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICp0aGlzcHRyLAorCQkJICAgICAgLyogdG8gYmUgZWxpbWluYXRlZCBpbiByZWxlYXNlIDIgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBwb3NuKTsKKworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgZm9yIHN5bWJvbCB0YWJsZSBzdXBwb3J0IGFuZAorICogbWlzY2VsbGFuZW91cyBob3N0LXNpZGUgZnVuY3Rpb25zCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKK3R5cGVkZWYgdTMyIGxkcl9hZGRyOworCisvKgorICogdGhlIHN0cnVjdHVyZSBvZiBhIHN5bWJvbCBrbm93biB0byB0aGUgZHluYW1pYyBsb2FkZXIKKyAqLworc3RydWN0IGR5bmxvYWRfc3ltYm9sIHsKKwlsZHJfYWRkciB2YWx1ZTsKK307CisKK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0geworLyogcHVibGljOiAqLworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZmluZF9tYXRjaGluZ19zeW1ib2wKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBuYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBkZXNpcmVkIHN5bWJvbAorICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgTG9jYXRlcyBhIHN5bWJvbCBtYXRjaGluZyB0aGUgbmFtZSBzcGVjaWZpZWQuICBBIHBvaW50ZXIgdG8gdGhlCisgICAgICogc3ltYm9sIGlzIHJldHVybmVkIGlmIGl0IGV4aXN0czsgMCBpcyByZXR1cm5lZCBpZiBubyBzdWNoIHN5bWJvbCBpcworICAgICAqIGZvdW5kLgorICAgICAqCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCXN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKCpmaW5kX21hdGNoaW5nX3N5bWJvbCkKKwkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXNwdHIsIGNvbnN0IGNoYXIgKm5hbWUpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBhZGRfdG9fc3ltYm9sX3RhYmxlCisgICAgICoKKyAgICAgKiBQQVJBTUVURVJTIDoKKyAgICAgKiAgbm5hbWUgICAgICAgUG9pbnRlciB0byB0aGUgbmFtZSBvZiB0aGUgbmV3IHN5bWJvbAorICAgICAqICBtb2R1bGVpZCAgICBBbiBvcGFxdWUgbW9kdWxlIGlkIGFzc2lnbmVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlcgorICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgVGhlIG5ldyBzeW1ib2wgaXMgYWRkZWQgdG8gdGhlIHRhYmxlLiAgQSBwb2ludGVyIHRvIHRoZSBzeW1ib2wgaXMKKyAgICAgKiByZXR1cm5lZCwgb3IgTlVMTCBpcyByZXR1cm5lZCBmb3IgZmFpbHVyZS4KKyAgICAgKgorICAgICAqIE5PVEVTOgorICAgICAqICBJdCBpcyBwZXJtaXNzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gTlVMTDsgdGhlIGVmZmVjdCBpcyB0aGF0CisgICAgICogdGhlIG5hbWVkIHN5bWJvbCB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2VzIGluCisgICAgICogc3Vic2VxdWVudCBsb2Fkcy4gIFJldHVybmluZyBOVUxMIHdpbGwgbm90IGNhdXNlIHRoZSBjdXJyZW50IGxvYWQKKyAgICAgKiB0byBmYWlsLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKigqYWRkX3RvX3N5bWJvbF90YWJsZSkKKwkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKgorCSAgdGhpc3B0ciwgY29uc3QgY2hhciAqbm5hbWUsIHVuc2lnbmVkIG1vZHVsZWlkKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogcHVyZ2Vfc3ltYm9sX3RhYmxlCisgICAgICoKKyAgICAgKiBQQVJBTUVURVJTIDoKKyAgICAgKiAgbW9kdWxlaWQgICAgQW4gb3BhcXVlIG1vZHVsZSBpZCBhc3NpZ25lZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIEVhY2ggc3ltYm9sIGluIHRoZSBzeW1ib2wgdGFibGUgd2hvc2UgbW9kdWxlaWQgbWF0Y2hlcyB0aGUgYXJndW1lbnQKKyAgICAgKiBpcyByZW1vdmVkIGZyb20gdGhlIHRhYmxlLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqcHVyZ2Vfc3ltYm9sX3RhYmxlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpc3B0ciwKKwkJCQkgICAgdW5zaWduZWQgbW9kdWxlaWQpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBkbG9hZF9hbGxvY2F0ZQorICAgICAqCisgICAgICogUEFSQU1FVEVSUyA6CisgICAgICogIG1lbXNpeiAgc2l6ZSBvZiBkZXNpcmVkIG1lbW9yeSBpbiBzaXplb2YoKSB1bml0cworICAgICAqCisgICAgICogRUZGRUNUIDoKKyAgICAgKiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gc29tZSAiaG9zdCIgbWVtb3J5IGZvciB1c2UgYnkgdGhlIGR5bmFtaWMKKyAgICAgKiBsb2FkZXIsIG9yIE5VTEwgZm9yIGZhaWx1cmUuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBzZXJ2ZXMgYXMgYSByZXBsYWNlYWJsZSBmb3JtIG9mICJtYWxsb2MiIHRvCisgICAgICogYWxsb3cgdGhlIHVzZXIgdG8gY29uZmlndXJlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgdGhlIGR5bmFtaWMgbG9hZGVyLgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICooKmRsb2FkX2FsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpc3B0ciwKKwkJCQkgdW5zaWduZWQgbWVtc2l6KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZGxvYWRfZGVhbGxvY2F0ZQorICAgICAqCisgICAgICogUEFSQU1FVEVSUyA6CisgICAgICogIG1lbXB0ciAgcG9pbnRlciB0byBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIFJlbGVhc2VzIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCAiaG9zdCIgbWVtb3J5LgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqZGxvYWRfZGVhbGxvY2F0ZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXNwdHIsCisJCQkJICB2b2lkICptZW1wdHIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBlcnJvcl9yZXBvcnQKKyAgICAgKgorICAgICAqIFBBUkFNRVRFUlMgOgorICAgICAqICBlcnJzdHIgIHBvaW50ZXIgdG8gYW4gZXJyb3Igc3RyaW5nCisgICAgICogIGFyZ3MgICAgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAgICAgKgorICAgICAqIEVGRkVDVCA6CisgICAgICogIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYW4gZXJyb3IgcmVwb3J0aW5nIGludGVyZmFjZSBmb3IgdGhlIGR5bmFtaWMKKyAgICAgKiBsb2FkZXIuICBUaGUgZXJyb3Igc3RyaW5nIGFuZCBhcmd1bWVudHMgYXJlIGRlc2lnbmVkIGFzIGZvciB0aGUKKyAgICAgKiBsaWJyYXJ5IGZ1bmN0aW9uIHZwcmludGYuCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCXZvaWQgKCplcnJvcl9yZXBvcnQpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzcHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqZXJyc3RyLCB2YV9saXN0IGFyZ3MpOworCit9OwkJCQkvKiBjbGFzcyBkeW5hbWljX2xvYWRlcl9zeW0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgdG8gYWxsb2NhdGUgYW5kIGRlYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworc3RydWN0IGxkcl9zZWN0aW9uX2luZm8geworCS8qIE5hbWUgb2YgdGhlIG1lbW9yeSBzZWN0aW9uIGFzc2lnbmVkIGF0IGJ1aWxkIHRpbWUgKi8KKwljb25zdCBjaGFyICpuYW1lOworCWxkcl9hZGRyIHJ1bl9hZGRyOwkvKiBleGVjdXRpb24gYWRkcmVzcyBvZiB0aGUgc2VjdGlvbiAqLworCWxkcl9hZGRyIGxvYWRfYWRkcjsJLyogbG9hZCBhZGRyZXNzIG9mIHRoZSBzZWN0aW9uICovCisJbGRyX2FkZHIgc2l6ZTsJCS8qIHNpemUgb2YgdGhlIHNlY3Rpb24gaW4gYWRkcmVzc2FibGUgdW5pdHMgKi8KKyNpZm5kZWYgX0JJR19FTkRJQU4KKwl1MTYgcGFnZTsJCS8qIG1lbW9yeSBwYWdlIG9yIHZpZXcgKi8KKwl1MTYgdHlwZTsJCS8qIG9uZSBvZiB0aGUgc2VjdGlvbiB0eXBlcyBiZWxvdyAqLworI2Vsc2UKKwl1MTYgdHlwZTsJCS8qIG9uZSBvZiB0aGUgc2VjdGlvbiB0eXBlcyBiZWxvdyAqLworCXUxNiBwYWdlOwkJLyogbWVtb3J5IHBhZ2Ugb3IgdmlldyAqLworI2VuZGlmCisJLyogYSBjb250ZXh0IGZpZWxkIGZvciB1c2UgYnkgZHluYW1pY19sb2FkZXJfYWxsb2NhdGU7CisJICogICBpZ25vcmVkIGJ1dCBtYWludGFpbmVkIGJ5IHRoZSBkeW5hbWljIGxvYWRlciAqLworCXUzMiBjb250ZXh0OworfTsKKworLyogdXNlIHRoaXMgbWFjcm8gdG8gZXh0cmFjdCB0eXBlIG9mIHNlY3Rpb24gZnJvbSBsZHJfc2VjdGlvbl9pbmZvLnR5cGUgZmllbGQgKi8KKyNkZWZpbmUgRExPQURfU0VDVElPTl9UWVBFKHR5cGVpbmZvKSAodHlwZWluZm8gJiAweEYpCisKKy8qIHR5cGUgb2Ygc2VjdGlvbiB0byBiZSBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgRExPQURfVEVYVCAwCisjZGVmaW5lIERMT0FEX0RBVEEgMQorI2RlZmluZSBETE9BRF9CU1MgMgorCS8qIGludGVybmFsIHVzZSBvbmx5LCBydW4tdGltZSBjaW5pdCB3aWxsIGJlIG9mIHR5cGUgRExPQURfREFUQSAqLworI2RlZmluZSBETE9BRF9DSU5JVCAzCisKK3N0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSB7CisvKiBwdWJsaWM6ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gYWxsb2NhdGUKKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBpbmZvICAgICAgICBBIHBvaW50ZXIgdG8gYW4gaW5mb3JtYXRpb24gYmxvY2sgZm9yIHRoZSBzZWN0aW9uCisgICAgKiAgIGFsaWduICAgICAgIFRoZSBhbGlnbm1lbnQgb2YgdGhlIHN0b3JhZ2UgaW4gdGFyZ2V0IEFVcworICAgICoKKyAgICAqIEVmZmVjdDoKKyAgICAqICAgQWxsb2NhdGVzIHRhcmdldCBtZW1vcnkgZm9yIHRoZSBzcGVjaWZpZWQgc2VjdGlvbiBhbmQgZmlsbHMgaW4gdGhlCisgICAgKiBsb2FkX2FkZHIgYW5kIHJ1bl9hZGRyIGZpZWxkcyBvZiB0aGUgc2VjdGlvbiBpbmZvIHN0cnVjdHVyZS4gUmV0dXJucyBUUlVFCisgICAgKiBmb3Igc3VjY2VzcywgRkFMU0UgZm9yIGZhaWx1cmUuCisgICAgKgorICAgICogTm90ZXM6CisgICAgKiAgIEZyZXF1ZW50bHkgbG9hZF9hZGRyIGFuZCBydW5fYWRkciBhcmUgdGhlIHNhbWUsIGJ1dCBpZiB0aGV5IGFyZSBub3QKKyAgICAqIGxvYWRfYWRkciBpcyB1c2VkIHdpdGggZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSwgYW5kIHJ1bl9hZGRyIGlzCisgICAgKiB1c2VkIGZvciBhbG1vc3QgYWxsIHJlbG9jYXRpb25zLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYWx3YXlzIGluaXRpYWxpemUKKyAgICAqIGJvdGggZmllbGRzLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKmRsb2FkX2FsbG9jYXRlKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzcHRyLAorCQkJICAgICAgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBhbGlnbik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gZGVhbGxvY2F0ZQorICAgICoKKyAgICAqIFBhcmFtZXRlcnM6CisgICAgKiAgIGluZm8gICAgICAgIEEgcG9pbnRlciB0byBhbiBpbmZvcm1hdGlvbiBibG9jayBmb3IgdGhlIHNlY3Rpb24KKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIFJlbGVhc2VzIHRoZSB0YXJnZXQgbWVtb3J5IHByZXZpb3VzbHkgYWxsb2NhdGVkLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGluZm8tPm5hbWUgZmllbGQgaXMgdW5kZWZpbmVkIG9uIGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqZGxvYWRfZGVhbGxvY2F0ZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9hbGxvY2F0ZSAqdGhpc3B0ciwKKwkJCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvKTsKKworfTsJCQkJLyogY2xhc3MgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEEgY2xhc3MgdXNlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIgdG8gbG9hZCBkYXRhIGludG8gYSB0YXJnZXQuICBUaGlzIGNsYXNzCisgKiBwcm92aWRlcyB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIGZ1bmN0aW9ucyBuZWVkZWQgdG8gbG9hZCBkYXRhLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCitzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSB7CisvKiBwdWJsaWM6ICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIGNvbm5lY3QKKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBub25lCisgICAgKgorICAgICogRWZmZWN0OgorICAgICogICBDb25uZWN0IHRvIHRoZSBpbml0aWFsaXphdGlvbiBpbnRlcmZhY2UuIFJldHVybnMgVFJVRSBmb3Igc3VjY2VzcywKKyAgICAqIEZBTFNFIGZvciBmYWlsdXJlLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBwcmlvciB0byB1c2Ugb2YgYW55IG90aGVyIGZ1bmN0aW9ucyBpbgorICAgICogdGhpcyBpbnRlcmZhY2UuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJaW50ICgqY29ubmVjdCkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiBGdW5jdGlvbiByZWFkbWVtCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgYnVmciAgICAgICAgUG9pbnRlciB0byBhIHdvcmQtYWxpZ25lZCBidWZmZXIgZm9yIHRoZSByZXN1bHQKKyAgICAqICAgbG9jbiAgICAgICAgVGFyZ2V0IGFkZHJlc3Mgb2YgZmlyc3QgZGF0YSBlbGVtZW50CisgICAgKiAgIGluZm8gICAgICAgIFNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlY3Rpb24gaW4gd2hpY2ggdGhlIGFkZHJlc3MgcmVzaWRlcworICAgICogICBieXRzaXogICAgICBTaXplIG9mIHRoZSBkYXRhIHRvIGJlIHJlYWQgaW4gc2l6ZW9mKCkgdW5pdHMKKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIEZpbGxzIHRoZSBzcGVjaWZpZWQgYnVmZmVyIHdpdGggZGF0YSBmcm9tIHRoZSB0YXJnZXQuICBSZXR1cm5zIFRSVUUgZm9yCisgICAgKiBzdWNjZXNzLCBGQUxTRSBmb3IgZmFpbHVyZS4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwlpbnQgKCpyZWFkbWVtKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsCisJCQl2b2lkICpidWZyLAorCQkJbGRyX2FkZHIgbG9jbiwKKwkJCXN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBieXRzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIHdyaXRlbWVtCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgYnVmciAgICAgICAgUG9pbnRlciB0byBhIHdvcmQtYWxpZ25lZCBidWZmZXIgb2YgZGF0YQorICAgICogICBsb2NuICAgICAgICBUYXJnZXQgYWRkcmVzcyBvZiBmaXJzdCBkYXRhIGVsZW1lbnQgdG8gYmUgd3JpdHRlbgorICAgICogICBpbmZvICAgICAgICBTZWN0aW9uIGluZm8gZm9yIHRoZSBzZWN0aW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIHJlc2lkZXMKKyAgICAqICAgYnl0c2l6ICAgICAgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGluIHNpemVvZigpIHVuaXRzCisgICAgKgorICAgICogRWZmZWN0OgorICAgICogICBXcml0ZXMgdGhlIHNwZWNpZmllZCBidWZmZXIgdG8gdGhlIHRhcmdldC4gIFJldHVybnMgVFJVRSBmb3Igc3VjY2VzcywKKyAgICAqIEZBTFNFIGZvciBmYWlsdXJlLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKndyaXRlbWVtKSAoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsCisJCQkgdm9pZCAqYnVmciwKKwkJCSBsZHJfYWRkciBsb2NuLAorCQkJIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBieXRzaXopOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqIEZ1bmN0aW9uIGZpbGxtZW0KKyAgICAqCisgICAgKiBQYXJhbWV0ZXJzOgorICAgICogICBsb2NuICAgICAgICBUYXJnZXQgYWRkcmVzcyBvZiBmaXJzdCBkYXRhIGVsZW1lbnQgdG8gYmUgd3JpdHRlbgorICAgICogICBpbmZvICAgICAgICBTZWN0aW9uIGluZm8gZm9yIHRoZSBzZWN0aW9uIGluIHdoaWNoIHRoZSBhZGRyZXNzIHJlc2lkZXMKKyAgICAqICAgYnl0c2l6ICAgICAgU2l6ZSBvZiB0aGUgZGF0YSB0byBiZSB3cml0dGVuIGluIHNpemVvZigpIHVuaXRzCisgICAgKiAgIHZhbCAgICAgICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gZWFjaCBieXRlCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIEZpbGxzIHRoZSBzcGVjaWZpZWQgYXJlYSBvZiB0YXJnZXQgbWVtb3J5LiAgUmV0dXJucyBUUlVFIGZvciBzdWNjZXNzLAorICAgICogRkFMU0UgZm9yIGZhaWx1cmUuCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisJaW50ICgqZmlsbG1lbSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyLAorCQkJbGRyX2FkZHIgbG9jbiwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCQl1bnNpZ25lZCBieXRzaXosIHVuc2lnbmVkIHZhbCk7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogRnVuY3Rpb24gZXhlY3V0ZQorICAgICoKKyAgICAqIFBhcmFtZXRlcnM6CisgICAgKiAgIHN0YXJ0ICAgICAgIFN0YXJ0aW5nIGFkZHJlc3MKKyAgICAqCisgICAgKiBFZmZlY3Q6CisgICAgKiAgIFRoZSB0YXJnZXQgY29kZSBhdCB0aGUgc3BlY2lmaWVkIHN0YXJ0aW5nIGFkZHJlc3MgaXMgZXhlY3V0ZWQuCisgICAgKgorICAgICogTm90ZXM6CisgICAgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWMgbG9hZCBwcm9jZXNzCisgICAgKiBpZiB0aGUgaW5wdXQgbW9kdWxlIGhhcyBzcGVjaWZpZWQgYSBzdGFydGluZyBhZGRyZXNzLgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCWludCAoKmV4ZWN1dGUpIChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpc3B0ciwKKwkJCWxkcl9hZGRyIHN0YXJ0KTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgKiBGdW5jdGlvbiByZWxlYXNlCisgICAgKgorICAgICogUGFyYW1ldGVyczoKKyAgICAqICAgbm9uZQorICAgICoKKyAgICAqIEVmZmVjdDoKKyAgICAqICAgUmVsZWFzZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGxvYWQgaW50ZXJmYWNlLgorICAgICoKKyAgICAqIE5vdGVzOgorICAgICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljIGxvYWQgcHJvY2Vzcy4KKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwl2b2lkICgqcmVsZWFzZSkgKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzcHRyKTsKKworfTsJCQkJLyogY2xhc3MgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqLworCisjZW5kaWYgLyogX0RZTkFNSUNfTE9BREVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2IuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTc4M2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ2IuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogZ2IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHZW5lcmljIGJpdG1hcCBtYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR0JfCisjZGVmaW5lIEdCXworCisjZGVmaW5lIEdCX05PQklUUyAofjApCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworc3RydWN0IGdiX3RfbWFwOworCisvKgorICogID09PT09PT09IGdiX2NsZWFyID09PT09PT09CisgKiAgQ2xlYXIgdGhlIGJpdCBpbiBwb3NpdGlvbiBiaXRuIGluIHRoZSBiaXRtYXAgbWFwLiAgQml0IHBvc2l0aW9ucyBhcmUKKyAqICB6ZXJvIGJhc2VkLgorICovCisKK2V4dGVybiB2b2lkIGdiX2NsZWFyKHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKy8qCisgKiAgPT09PT09PT0gZ2JfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgYml0IG1hcCB3aXRoIGxlbiBiaXRzLiAgSW5pdGlhbGx5IGFsbCBiaXRzIGFyZSBjbGVhcmVkLgorICovCisKK2V4dGVybiBzdHJ1Y3QgZ2JfdF9tYXAgKmdiX2NyZWF0ZSh1MzIgbGVuKTsKKworLyoKKyAqICA9PT09PT09PSBnYl9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgcHJldmlvdXNseSBjcmVhdGVkIGJpdCBtYXAKKyAqLworCitleHRlcm4gdm9pZCBnYl9kZWxldGUoc3RydWN0IGdiX3RfbWFwICptYXApOworCisvKgorICogID09PT09PT09IGdiX2ZpbmRhbmRzZXQgPT09PT09PT0KKyAqICBGaW5kcyBhIGNsZWFyIGJpdCwgc2V0cyBpdCwgYW5kIHJldHVybnMgdGhlIHBvc2l0aW9uCisgKi8KKworZXh0ZXJuIHUzMiBnYl9maW5kYW5kc2V0KHN0cnVjdCBnYl90X21hcCAqbWFwKTsKKworLyoKKyAqICA9PT09PT09PSBnYl9taW5jbGVhciA9PT09PT09PQorICogIGdiX21pbmNsZWFyIHJldHVybnMgdGhlIG1pbmltdW0gY2xlYXIgYml0IHBvc2l0aW9uLiAgSWYgbm8gYml0IGlzCisgKiAgY2xlYXIsIGdiX21pbmNsZWFyIHJldHVybnMgLTEuCisgKi8KK2V4dGVybiB1MzIgZ2JfbWluY2xlYXIoc3RydWN0IGdiX3RfbWFwICptYXApOworCisvKgorICogID09PT09PT09IGdiX3NldCA9PT09PT09PQorICogIFNldCB0aGUgYml0IGluIHBvc2l0aW9uIGJpdG4gaW4gdGhlIGJpdG1hcCBtYXAuICBCaXQgcG9zaXRpb25zIGFyZQorICogIHplcm8gYmFzZWQuCisgKi8KKworZXh0ZXJuIHZvaWQgZ2Jfc2V0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKy8qCisgKiAgPT09PT09PT0gZ2JfdGVzdCA9PT09PT09PQorICogIFJldHVybnMgVFJVRSBpZiB0aGUgYml0IGluIHBvc2l0aW9uIGJpdG4gaXMgc2V0IGluIG1hcDsgb3RoZXJ3aXNlCisgKiAgZ2JfdGVzdCByZXR1cm5zIEZBTFNFLiAgQml0IHBvc2l0aW9ucyBhcmUgemVybyBiYXNlZC4KKyAqLworCitleHRlcm4gYm9vbCBnYl90ZXN0KHN0cnVjdCBnYl90X21hcCAqbWFwLCB1MzIgYml0bik7CisKKyNlbmRpZiAvKkdCXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dldHNlY3Rpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI2MDYzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9nZXRzZWN0aW9uLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBnZXRzZWN0aW9uLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGFuIEFQSSBhZGQtb24gdG8gdGhlIGR5bmFtaWMgbG9hZGVyIHRoYXQgYWxsb3dzIHRoZSB1c2VyCisgKiB0byBxdWVyeSBzZWN0aW9uIGluZm9ybWF0aW9uIGFuZCBleHRyYWN0IHNlY3Rpb24gZGF0YSBmcm9tIGR5bmFtaWMgbG9hZAorICogbW9kdWxlcy4KKyAqCisgKiBOb3RlczoKKyAqICAgRnVuY3Rpb25zIGluIHRoaXMgQVBJIGFzc3VtZSB0aGF0IHRoZSBzdXBwbGllZCBkeW5hbWljX2xvYWRlcl9zdHJlYW0KKyAqICAgb2JqZWN0IHN1cHBvcnRzIHRoZSBzZXRfZmlsZV9wb3NuIG1ldGhvZC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfR0VUU0VDVElPTl9IXworI2RlZmluZSBfR0VUU0VDVElPTl9IXworCisjaW5jbHVkZSAiZHluYW1pY19sb2FkZXIuaCIKKworLyoKKyAqIFByb2NlZHVyZSBkbG9hZF9tb2R1bGVfb3BlbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbW9kdWxlICBUaGUgaW5wdXQgc3RyZWFtIHRoYXQgc3VwcGxpZXMgdGhlIG1vZHVsZSBpbWFnZQorICogIHN5bXMgICAgSG9zdC1zaWRlIG1hbGxvYy9mcmVlIGFuZCBlcnJvciByZXBvcnRpbmcgZnVuY3Rpb25zLgorICogICAgICAgICAgT3RoZXIgbWV0aG9kcyBhcmUgdW51c2VkLgorICoKKyAqIEVmZmVjdDoKKyAqICBSZWFkcyBoZWFkZXIgaW5mb3JtYXRpb24gZnJvbSBhIGR5bmFtaWMgbG9hZGVyIG1vZHVsZSB1c2luZyB0aGUgc3BlY2lmaWVkCisgKiBzdHJlYW0gb2JqZWN0LCBhbmQgcmV0dXJucyBhIGhhbmRsZSBmb3IgdGhlIG1vZHVsZSBpbmZvcm1hdGlvbi4gIFRoaXMKKyAqIGhhbmRsZSBtYXkgYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHF1ZXJ5IGNhbGxzIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICogY29udGFpbmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogUmV0dXJuczoKKyAqICBOVUxMIGlmIGFuIGVycm9yIGlzIGVuY291bnRlcmVkLCBvdGhlcndpc2UgYSBtb2R1bGUgaGFuZGxlIGZvciB1c2UKKyAqIGluIHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KKyAqLworZXh0ZXJuIHZvaWQgKmRsb2FkX21vZHVsZV9vcGVuKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0KKwkJCQkJICAgKm1vZHVsZSwgc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkgICAqc3ltcyk7CisKKy8qCisgKiBQcm9jZWR1cmUgZGxvYWRfZ2V0X3NlY3Rpb25faW5mbworICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKiAgc2VjdGlvbl9uYW1lIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBuYW1lIG9mIHRoZSBzZWN0aW9uIGRlc2lyZWQKKyAqICBzZWN0aW9uX2luZm8gQWRkcmVzcyBvZiBhIHNlY3Rpb24gaW5mbyBzdHJ1Y3R1cmUgcG9pbnRlciB0byBiZSBpbml0aWFsaXplZAorICoKKyAqIEVmZmVjdDoKKyAqICBGaW5kcyB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW4gdGhlIG1vZHVsZSBpbmZvcm1hdGlvbiwgYW5kIGZpbGxzIGluCisgKiB0aGUgcHJvdmlkZWQgbGRyX3NlY3Rpb25faW5mbyBzdHJ1Y3R1cmUuCisgKgorICogUmV0dXJuczoKKyAqICBUUlVFIGZvciBzdWNjZXNzLCBGQUxTRSBmb3Igc2VjdGlvbiBub3QgZm91bmQKKyAqLworZXh0ZXJuIGludCBkbG9hZF9nZXRfc2VjdGlvbl9pbmZvKHZvaWQgKm1pbmZvLAorCQkJCSAgY29uc3QgY2hhciAqc2VjdGlvbl9uYW1lLAorCQkJCSAgY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8KKwkJCQkgICoqY29uc3Qgc2VjdGlvbl9pbmZvKTsKKworLyoKKyAqIFByb2NlZHVyZSBkbG9hZF9nZXRfc2VjdGlvbgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKiAgc2VjdGlvbl9pbmZvIFBvaW50ZXIgdG8gYSBzZWN0aW9uIGluZm8gc3RydWN0dXJlIGZvciB0aGUgZGVzaXJlZCBzZWN0aW9uCisgKiAgc2VjdGlvbl9kYXRhIEJ1ZmZlciB0byBjb250YWluIHRoZSBzZWN0aW9uIGluaXRpYWxpemVkIGRhdGEKKyAqCisgKiBFZmZlY3Q6CisgKiAgQ29waWVzIHRoZSBpbml0aWFsaXplZCBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gaW50byB0aGUKKyAqIHN1cHBsaWVkIGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zOgorICogIFRSVUUgZm9yIHN1Y2Nlc3MsIEZBTFNFIGZvciBzZWN0aW9uIG5vdCBmb3VuZAorICovCitleHRlcm4gaW50IGRsb2FkX2dldF9zZWN0aW9uKHZvaWQgKm1pbmZvLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2VjdGlvbl9pbmZvLAorCQkJICAgICB2b2lkICpzZWN0aW9uX2RhdGEpOworCisvKgorICogUHJvY2VkdXJlIGRsb2FkX21vZHVsZV9jbG9zZQorICoKKyAqIFBhcmFtZXRlcnM6CisgKiAgbWluZm8gICAgICAgSGFuZGxlIGZyb20gZGxvYWRfbW9kdWxlX29wZW4gZm9yIHRoaXMgbW9kdWxlCisgKgorICogRWZmZWN0OgorICogIFJlbGVhc2VzIGFueSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlIGhhbmRsZS4gIE9uIHJldHVybiwKKyAqIHRoZSBtb2R1bGUgaGFuZGxlIGlzIGludmFsaWQuCisgKgorICogUmV0dXJuczoKKyAqICBaZXJvIGZvciBzdWNjZXNzLiBPbiBlcnJvciwgdGhlIG51bWJlciBvZiBlcnJvcnMgZGV0ZWN0ZWQgaXMgcmV0dXJuZWQuCisgKiBJbmRpdmlkdWFsIGVycm9ycyBhcmUgcmVwb3J0ZWQgdXNpbmcgc3ltcy0+ZXJyb3JfcmVwb3J0KCksIHdoZXJlIHN5bXMgd2FzCisgKiBhbiBhcmd1bWVudCB0byBkbG9hZF9tb2R1bGVfb3BlbgorICovCitleHRlcm4gdm9pZCBkbG9hZF9tb2R1bGVfY2xvc2Uodm9pZCAqbWluZm8pOworCisjZW5kaWYgLyogX0dFVFNFQ1RJT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9naC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2doLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRlMjkxZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9naC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBnaC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR0hfCisjZGVmaW5lIEdIXworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKK2V4dGVybiBzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqZ2hfY3JlYXRlKHUxNiBtYXhfYnVja2V0LCB1MTYgdmFsX3NpemUsCisJCQkJICAgICAgIHUxNigqaGFzaCkgKHZvaWQgKiwgdTE2KSwKKwkJCQkgICAgICAgYm9vbCgqbWF0Y2gpICh2b2lkICosIHZvaWQgKiksCisJCQkJICAgICAgIHZvaWQgKCpkZWxldGUpICh2b2lkICopKTsKK2V4dGVybiB2b2lkIGdoX2RlbGV0ZShzdHJ1Y3QgZ2hfdF9oYXNoX3RhYiAqaGFzaF90YWIpOworZXh0ZXJuIHZvaWQgZ2hfZXhpdCh2b2lkKTsKK2V4dGVybiB2b2lkICpnaF9maW5kKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwgdm9pZCAqa2V5KTsKK2V4dGVybiB2b2lkIGdoX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCAqZ2hfaW5zZXJ0KHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQordm9pZCBnaF9pdGVyYXRlKHN0cnVjdCBnaF90X2hhc2hfdGFiICpoYXNoX3RhYiwKKwl2b2lkICgqY2FsbGJhY2spKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqdXNlcl9kYXRhKTsKKyNlbmRpZgorI2VuZGlmIC8qIEdIXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJkOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2dzLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGdzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogTWVtb3J5IGFsbG9jYXRpb24vcmVsZWFzZSB3cmFwcGVycy4gIFRoaXMgbW9kdWxlIGFsbG93cyBjbGllbnRzIHRvCisgKiBhdm9pZCBPUyBzcGFjaWZpYyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgYWxsb2NhdGlvbi4gIEl0IGFsc28gcHJvdmlkZXMKKyAqIHNpbXBsZSBkaWFnbm9zdGljIGNhcGFiaWxpdGllcyB0byBhc3Npc3QgaW4gdGhlIGRldGVjdGlvbiBvZiBtZW1vcnkKKyAqIGxlYWtzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgR1NfCisjZGVmaW5lIEdTXworCisvKgorICogID09PT09PT09IGdzX2FsbG9jID09PT09PT09CisgKiAgQWxsb2Mgc2l6ZSBieXRlcyBvZiBzcGFjZS4gIFJldHVybnMgcG9pbnRlciB0byBzcGFjZQorICogIGFsbG9jYXRlZCwgb3RoZXJ3aXNlIE5VTEwuCisgKi8KK2V4dGVybiB2b2lkICpnc19hbGxvYyh1MzIgc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZXhpdCA9PT09PT09PQorICogIE1vZHVsZSBleGl0LiAgRG8gbm90IGNoYW5nZSB0byAiI2RlZmluZSBnc19pbml0KCkiOyBpbgorICogIHNvbWUgZW52aXJvbm1lbnRzIHRoaXMgb3BlcmF0aW9uIG11c3QgYWN0dWFsbHkgZG8gc29tZSB3b3JrIQorICovCitleHRlcm4gdm9pZCBnc19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IGdzX2ZyZWUgPT09PT09PT0KKyAqICBGcmVlIHNwYWNlIGFsbG9jYXRlZCBieSBnc19hbGxvYygpIG9yIEdTX2NhbGxvYygpLgorICovCitleHRlcm4gdm9pZCBnc19mcmVlKHZvaWQgKnB0cik7CisKKy8qCisgKiAgPT09PT09PT0gZ3NfZnJlZXMgPT09PT09PT0KKyAqICBGcmVlIHNwYWNlIGFsbG9jYXRlZCBieSBnc19hbGxvYygpIG9yIEdTX2NhbGxvYygpIGFuZCBhc3NlcnQgdGhhdAorICogIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0aW9uIGlzIHNpemUgYnl0ZXMuCisgKi8KK2V4dGVybiB2b2lkIGdzX2ZyZWVzKHZvaWQgKnB0ciwgdTMyIHNpemUpOworCisvKgorICogID09PT09PT09IGdzX2luaXQgPT09PT09PT0KKyAqICBNb2R1bGUgaW5pdGlhbGl6YXRpb24uICBEbyBub3QgY2hhbmdlIHRvICIjZGVmaW5lIGdzX2luaXQoKSI7IGluCisgKiAgc29tZSBlbnZpcm9ubWVudHMgdGhpcyBvcGVyYXRpb24gbXVzdCBhY3R1YWxseSBkbyBzb21lIHdvcmshCisgKi8KK2V4dGVybiB2b2lkIGdzX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKkdTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2hvc3Rfb3MuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ob3N0X29zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0ZmViNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ob3N0X29zLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGhvc3Rfb3MuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBfSE9TVF9PU19IXworI2RlZmluZSBfSE9TVF9PU19IXworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxwbGF0L21haWxib3guaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisvKiBUT0RPIC0tIFJlbW92ZSwgb25jZSBCUCBkZWZpbmVzIHRoZW0gKi8KKyNkZWZpbmUgSU5UX0RTUF9NTVVfSVJRICAgICAgICAyOAorCitzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgeworCXZvaWQgKCpkc3Bfc2V0X21pbl9vcHApICh1OCBvcHBfaWQpOworCSB1OCgqZHNwX2dldF9vcHApICh2b2lkKTsKKwl2b2lkICgqY3B1X3NldF9mcmVxKSAodW5zaWduZWQgbG9uZyBmKTsKKwl1bnNpZ25lZCBsb25nICgqY3B1X2dldF9mcmVxKSAodm9pZCk7CisJdW5zaWduZWQgbG9uZyBtcHVfc3BlZWRbNl07CisKKwkvKiBmdW5jdGlvbnMgdG8gd3JpdGUgYW5kIHJlYWQgUFJDTSByZWdpc3RlcnMgKi8KKwl2b2lkICgqZHNwX3BybV93cml0ZSkodTMyLCBzMTYgLCB1MTYpOworCXUzMiAoKmRzcF9wcm1fcmVhZCkoczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfcHJtX3Jtd19iaXRzKSh1MzIsIHUzMiwgczE2LCBzMTYpOworCXZvaWQgKCpkc3BfY21fd3JpdGUpKHUzMiwgczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfY21fcmVhZCkoczE2ICwgdTE2KTsKKwl1MzIgKCpkc3BfY21fcm13X2JpdHMpKHUzMiwgdTMyLCBzMTYsIHMxNik7CisKKwl1MzIgcGh5c19tZW1wb29sX2Jhc2U7CisJdTMyIHBoeXNfbWVtcG9vbF9zaXplOworfTsKKworI2RlZmluZSBQUkNNX1ZERDEgMQorCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9kc3BicmlkZ2VfZGV2OworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmJyaWRnZTsKKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9NT0RVTEUpCitleHRlcm4gdm9pZCBkc3BicmlkZ2VfcmVzZXJ2ZV9zZHJhbSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZHNwYnJpZGdlX3Jlc2VydmVfc2RyYW0odm9pZCkKK3sKK30KKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBkc3BicmlkZ2VfZ2V0X21lbXBvb2xfYmFzZSh2b2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM0NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBpby5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoZSBpbyBtb2R1bGUgbWFuYWdlcyBJTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgSU9fCisjZGVmaW5lIElPXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorCisvKgorICogID09PT09PT09IGlvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBJTyBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIElPIGJldHdlZW4KKyAqICAgICAgQ0hOTCBhbmQgbXNnX2N0cmwuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgY2hhbm5lbF9tZ3I6ICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgYSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC4KKyAqICAgICAgaGRldl9vYmo6ICAgICAgICAgICAgIEhhbmRsZSB0byBhIGRldmljZSBvYmplY3QuCisgKiAgICAgIG1ncl9hdHRydHM6ICAgICAgICAgICAgICBJTyBtYW5hZ2VyIGF0dHJpYnV0ZXMuCisgKiAgICAgIG1ncl9hdHRydHMtPmJpcnE6ICAgICAgICBJL08gSVJRIG51bWJlci4KKyAqICAgICAgbWdyX2F0dHJ0cy0+aXJxX3NoYXJlZDogICAgIFRSVUUgaWYgdGhlIElSUSBpcyBzaGFyZWFibGUuCisgKiAgICAgIG1ncl9hdHRydHMtPndvcmRfc2l6ZTogICBEU1AgV29yZCBzaXplIGluIGVxdWl2YWxlbnQgUEMgYnl0ZXMuLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgICAgIFN1Y2Nlc3M7CisgKiAgICAgIC1FTk9NRU06ICAgICAgICAgICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVJTzogICAgICAgICAgICAgVW5hYmxlIHRvIHBsdWcgY2hhbm5lbCBJU1IgZm9yIGNvbmZpZ3VyZWQgSVJRLgorICogICAgICAtRUlOVkFMOiBJbnZhbGlkIERTUCB3b3JkIHNpemUgKG11c3QgYmUgPiAwKS4KKyAqICAgICAgICAgICAgICAgSW52YWxpZCBiYXNlIGFkZHJlc3MgZm9yIERTUCBjb21tdW5pY2F0aW9ucy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgaW9faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIGlvX21hbiAhPSBOVUxMLgorICogICAgICBtZ3JfYXR0cnRzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBpb19jcmVhdGUoc3RydWN0IGlvX21nciAqKmlvX21hbiwKKwkJCSAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveSB0aGUgSU8gbWFuYWdlci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgICAgIElPbWFuYWdlciBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIGhpb19tZ3Igd2FzIGludmFsaWQuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlvX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBpb19leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIElPIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGlvX2luaXQodm9pZCkgcHJldmlvdXNseSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzLCBpZiBhbnkgYWNxdWlyZWQgaW4gaW9faW5pdCh2b2lkKSwgYXJlIGZyZWVkIHdoZW4gdGhlIGxhc3QKKyAqICAgICAgY2xpZW50IG9mIElPIGNhbGxzIGlvX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIGlvX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gaW9faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIElPIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemVkOyBGQUxTRSBpZiBlcnJvciBvY2N1cnJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBBIHJlcXVpcmVtZW50IGZvciBlYWNoIG9mIHRoZSBvdGhlciBwdWJsaWMgQ0hOTCBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBib29sIGlvX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gaW9fb25fbG9hZGVkID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIHdoZW4gYSBwcm9ncmFtIGlzIGxvYWRlZCBzbyBJTyBtYW5hZ2VyIGNhbiB1cGRhdGUgaXRzCisgKiAgICAgIGludGVybmFsIHN0YXRlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSU9tYW5hZ2VyIG9iamVjdC4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgaGlvX21nciB3YXMgaW52YWxpZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgaW9faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBpb19vbl9sb2FkZWQoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKKyNlbmRpZiAvKiBDSE5MXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFlYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmgKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiBpb19zbS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqIEFsc28sIGluY2x1ZGVzIG1hY3JvcyB0byBzaW11bGF0ZSBzaG0gdmlhIHBvcnQgaW8gY2FsbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBJT1NNXworI2RlZmluZSBJT1NNXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL19jaG5sX3NtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9pb2RlZnMuaD4KKworI2RlZmluZSBJT19JTlBVVCAgICAgICAgICAgIDAKKyNkZWZpbmUgSU9fT1VUUFVUICAgICAgICAgICAxCisjZGVmaW5lIElPX1NFUlZJQ0UgICAgICAgICAgMgorI2RlZmluZSBJT19NQVhTRVJWSUNFICAgICAgIElPX1NFUlZJQ0UKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgT1BQcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KK2V4dGVybiBzMzIgZHNwX21heF9vcHBzOworLyogVGhlIFZkZDEgb3BwIHRhYmxlIGluZm9ybWF0aW9uICovCitleHRlcm4gdTMyIHZkZDFfZHNwX2ZyZXFbNl1bNF07CisjZW5kaWYKKworLyoKKyAqICA9PT09PT09PSBpb19jYW5jZWxfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENhbmNlbCBJTyBvbiBhIGdpdmVuIGNoYW5uZWwuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgIElPIE1hbmFnZXIuCisgKiAgICAgIGNobmw6ICAgICAgIEluZGV4IG9mIGNoYW5uZWwgdG8gY2FuY2VsIElPIG9uLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhpb19tZ3IuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fY2FuY2VsX2Nobmwoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTMyIGNobmwpOworCisvKgorICogID09PT09PT09IGlvX2RwYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlZmVycmVkIHByb2NlZHVyZSBjYWxsIGZvciBzaGFyZWQgbWVtb3J5IGNoYW5uZWwgZHJpdmVyIElTUi4gIENhcnJpZXMKKyAqICAgICAgb3V0IHRoZSBkaXNwYXRjaCBvZiBJL08uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcmVmX2RhdGE6ICAgUG9pbnRlciB0byByZWZlcmVuY2UgZGF0YSByZWdpc3RlcmVkIHZpYSBhIGNhbGwgdG8KKyAqICAgICAgICAgICAgICAgICAgRFBDX0NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE11c3Qgbm90IGJsb2NrLgorICogICAgICBNdXN0IG5vdCBhY3F1aXJlIHJlc291cmNlcy4KKyAqICAgICAgQWxsIGRhdGEgdG91Y2hlZCBtdXN0IGJlIGxvY2tlZCBpbiBtZW1vcnkgaWYgcnVubmluZyBpbiBrZXJuZWwgbW9kZS4KKyAqICBFbnN1cmVzOgorICogICAgICBOb24tcHJlZW1wdGlibGUgKGJ1dCBpbnRlcnJ1cHRpYmxlKS4KKyAqLworZXh0ZXJuIHZvaWQgaW9fZHBjKHVuc2lnbmVkIGxvbmcgcmVmX2RhdGEpOworCisvKgorICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KKyAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIGNobmxzbV9pc3IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsCisgKiAgICAgIHRoZW4gc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICByZWZfZGF0YTogICBQb2ludGVyIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGJvYXJkLgorICogICAgICAgICAgICAgICAgICBTZXQgaW4gYW4gaW5pdGlhbCBjYWxsIHRvIElTUl9JbnN0YWxsKCkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbnRlcnJ1cHQgaGFuZGxlZDsgRkFMU0Ugb3RoZXJ3aXNlLgorICogIFJlcXVpcmVzOgorICogICAgICBNdXN0IGJlIGluIGxvY2tlZCBtZW1vcnkgaWYgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLgorICogICAgICBNdXN0IG9ubHkgY2FsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGluIGxvY2tlZCBtZW1vcnkgaWYgS2VybmVsIG1vZGUuCisgKiAgICAgIE11c3Qgb25seSBjYWxsIGFzeW5jaHJvbm91cyBzZXJ2aWNlcy4KKyAqICAgICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIEVPSSBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VudC4KKyAqICBFbnN1cmVzOgorICovCit2b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpOworCisvKgorICogID09PT09PT09IGlvX3JlcXVlc3RfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgSS9PIGZyb20gdGhlIERTUC4gU2V0cyBmbGFncyBpbiBzaGFyZWQgbWVtb3J5LCB0aGVuIGludGVycnVwdHMKKyAqICAgICAgdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBoaW9fbWdyOiAgICAgSU8gbWFuYWdlciBoYW5kbGUuCisgKiAgICAgIHBjaG5sOiAgICAgIFB0ciB0byB0aGUgY2hhbm5lbCByZXF1ZXN0aW5nIEkvTy4KKyAqICAgICAgaW9fbW9kZTogICAgICBNb2RlIG9mIGNoYW5uZWw6IHtJT19JTlBVVCB8IElPX09VVFBVVH0uCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGNobmwgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX3JlcXVlc3RfY2hubChzdHJ1Y3QgaW9fbWdyICppb19tYW5hZ2VyLAorCQkJICAgIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkgICAgdTggaW9fbW9kZSwgdTE2ICptYnhfdmFsKTsKKworLyoKKyAqICA9PT09PT09PSBpb3NtX3NjaGVkdWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2NoZWR1bGUgRFBDIGZvciBJTy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwaW9fbWdyOiAgICAgUHRyIHRvIGEgSS9PIG1hbmFnZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGNobmwgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvc21fc2NoZWR1bGUoc3RydWN0IGlvX21nciAqaW9fbWFuYWdlcik7CisKKy8qCisgKiBEU1AtRE1BIElPIGZ1bmN0aW9ucworICovCisKKy8qCisgKiAgPT09PT09PT0gaW9fZGRtYV9pbml0X2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgRFNQIERNQSBjaGFubmVsIGRlc2NyaXB0b3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgZGRtYV9jaG5sX2lkOiAgICBERE1BIGNoYW5uZWwgaWRlbnRpZmllci4KKyAqICAgICAgbnVtX2Rlc2M6ICAgICAgIE51bWJlciBvZiBidWZmZXIgZGVzY3JpcHRvcnMoZXF1YWxzICMgb2YgSU9SZXFzICYKKyAqICAgICAgICAgICAgICAgICAgICAgIENoaXJwcykKKyAqICAgICAgZHNwOiAgICAgICAgICAgRHNwIGFkZHJlc3M7CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICBkZG1hX2NobmxfaWQgPCBERE1BX01BWERETUFDSE5MUworICogICAgIG51bV9kZXNjID4gMAorICogICAgIHBWYSAhPSBOVUxMCisgKiAgICAgcERzcFBhICE9IE5VTEwKKyAqCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGRtYV9pbml0X2NobmxfZGVzYyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1MzIgZGRtYV9jaG5sX2lkLAorCQkJCSAgIHUzMiBudW1fZGVzYywgdm9pZCAqZHNwKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZG1hX2NsZWFyX2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsZWFyIERTUCBETUEgY2hhbm5lbCBkZXNjcmlwdG9yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICAgICAgSGFuZGxlIHRvIGEgSS9PIG1hbmFnZXIuCisgKiAgICAgIGRkbWFfY2hubF9pZDogICAgRERNQSBjaGFubmVsIGlkZW50aWZpZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICBkZG1hX2NobmxfaWQgPCBERE1BX01BWERETUFDSE5MUworICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX2RkbWFfY2xlYXJfY2hubF9kZXNjKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsIHUzMiBkZG1hX2NobmxfaWQpOworCisvKgorICogID09PT09PT09IGlvX2RkbWFfcmVxdWVzdF9jaG5sID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVxdWVzdCBjaGFubmVsIERTUC1ETUEgZnJvbSB0aGUgRFNQLiBTZXRzIHVwIFNNIGRlc2NyaXB0b3JzIGFuZAorICogICAgICBjb250cm9sIGZpZWxkcyBpbiBzaGFyZWQgbWVtb3J5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgcGNobmw6ICAgICAgUHRyIHRvIGNoYW5uZWwgb2JqZWN0CisgKiAgICAgIGNobmxfcGFja2V0X29iajogICAgIFB0ciB0byBjaGFubmVsIGkvbyByZXF1ZXN0IHBhY2tldC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBwY2hubCAhPSBOVUxMCisgKiAgICAgIHBjaG5sLT5jaW9fcmVxcyA+IDAKKyAqICAgICAgY2hubF9wYWNrZXRfb2JqICE9IE5VTEwKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBpb19kZG1hX3JlcXVlc3RfY2hubChzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLAorCQkJCSBzdHJ1Y3QgY2hubF9vYmplY3QgKnBjaG5sLAorCQkJCSBzdHJ1Y3QgY2hubF9pcnAgKmNobmxfcGFja2V0X29iaiwKKwkJCQkgdTE2ICptYnhfdmFsKTsKKworLyoKKyAqIFplcm8tY29weSBJTyBmdW5jdGlvbnMKKyAqLworCisvKgorICogID09PT09PT09IGlvX2RkemNfaW5pdF9jaG5sX2Rlc2MgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIFpDUFkgY2hhbm5lbCBkZXNjcmlwdG9yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhpb19tZ3I6ICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgemlkOiAgICAgICAgemVyby1jb3B5IGNoYW5uZWwgaWRlbnRpZmllci4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgIGRkbWFfY2hubF9pZCA8IERETUFfTUFYWkNQWUNITkxTCisgKiAgICAgaGlvX21nciAhPSBOdWxsCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGR6Y19pbml0X2NobmxfZGVzYyhzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyLCB1MzIgemlkKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZHpjX2NsZWFyX2NobmxfZGVzYyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsZWFyIERTUCBaQyBjaGFubmVsIGRlc2NyaXB0b3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgY2hfaWQ6ICAgICAgICBaQyBjaGFubmVsIGlkZW50aWZpZXIuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgaGlvX21nciBpcyB2YWxpZAorICogICAgICBjaF9pZCA8IERETUFfTUFYWkNQWUNITkxTCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHZvaWQgaW9fZGR6Y19jbGVhcl9jaG5sX2Rlc2Moc3RydWN0IGlvX21nciAqaGlvX21nciwgdTMyIGNoX2lkKTsKKworLyoKKyAqICA9PT09PT09PSBpb19kZHpjX3JlcXVlc3RfY2hubCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgemVyby1jb3B5IGNoYW5uZWwgdHJhbnNmZXIuIFNldHMgdXAgU00gZGVzY3JpcHRvcnMgYW5kCisgKiAgICAgIGNvbnRyb2wgZmllbGRzIGluIHNoYXJlZCBtZW1vcnkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgcGNobmw6ICAgICAgICAgIFB0ciB0byBjaGFubmVsIG9iamVjdAorICogICAgICBjaG5sX3BhY2tldF9vYmo6ICAgICAgICAgUHRyIHRvIGNoYW5uZWwgaS9vIHJlcXVlc3QgcGFja2V0LgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHBjaG5sICE9IE5VTEwKKyAqICAgICAgcGNobmwtPmNpb19yZXFzID4gMAorICogICAgICBjaG5sX3BhY2tldF9vYmogIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIGlvX2RkemNfcmVxdWVzdF9jaG5sKHN0cnVjdCBpb19tZ3IgKmhpb19tZ3IsCisJCQkJIHN0cnVjdCBjaG5sX29iamVjdCAqcGNobmwsCisJCQkJIHN0cnVjdCBjaG5sX2lycCAqY2hubF9wYWNrZXRfb2JqLAorCQkJCSB1MTYgKm1ieF92YWwpOworCisvKgorICogID09PT09PT09IGlvX3NoX21zZXR0aW5nID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0cyB0aGUgc2hhcmVkIG1lbW9yeSBzZXR0aW5nCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaGlvX21ncjogICAgICAgICBIYW5kbGUgdG8gYSBJL08gbWFuYWdlci4KKyAqICAgICAgZGVzYzogICAgICAgICAgICAgU2hhcmVkIG1lbW9yeSB0eXBlCisgKiAgICAgIHBhcmdzOiAgICAgICAgICBQdHIgdG8gc2htIHNldHRpbmcKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBoaW9fbWdyICE9IE5VTEwKKyAqICAgICAgcGFyZ3MgIT0gTlVMTAorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgaW9fc2hfbXNldHRpbmcoc3RydWN0IGlvX21nciAqaGlvX21nciwgdTggZGVzYywgdm9pZCAqcGFyZ3MpOworCisvKgorICogIE1pc2MgZnVuY3Rpb25zIGZvciB0aGUgQ0hOTF9JTyBzaGFyZWQgbWVtb3J5IGxpYnJhcnk6CisgKi8KKworLyogTWF4aW11bSBjaGFubmVsIGJ1ZnNpemUgdGhhdCBjYW4gYmUgdXNlZC4gKi8KK2V4dGVybiB1MzIgaW9fYnVmX3NpemUoc3RydWN0IGlvX21nciAqaGlvX21ncik7CisKK2V4dGVybiB1MzIgaW9fcmVhZF92YWx1ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwgdTMyIGRzcF9hZGRyKTsKKworZXh0ZXJuIHZvaWQgaW9fd3JpdGVfdmFsdWUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkgICB1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB1MzIgaW9fcmVhZF92YWx1ZV9sb25nKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmRldl9jdHh0LAorCQkJICAgICAgdTMyIGRzcF9hZGRyKTsKKworZXh0ZXJuIHZvaWQgaW9fd3JpdGVfdmFsdWVfbG9uZyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCQl1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB2b2lkIGlvX29yX3NldF92YWx1ZShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY3R4dCwKKwkJCSAgICB1MzIgZHNwX2FkZHIsIHUzMiB2YWx1ZSk7CisKK2V4dGVybiB2b2lkIGlvX2FuZF9zZXRfdmFsdWUoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqZGV2X2N0eHQsCisJCQkgICAgIHUzMiBkc3BfYWRkciwgdTMyIHZhbHVlKTsKKworZXh0ZXJuIHZvaWQgaW9fc21faW5pdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKKy8qCisgKiAgPT09PT09PT1wcmludF9kc3BfdHJhY2VfYnVmZmVyID09PT09PT09CisgKiAgICAgIFByaW50IERTUCB0cmFjZWJ1ZmZlci4KKyAqLworZXh0ZXJuIGludCBwcmludF9kc3BfdHJhY2VfYnVmZmVyKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJICpoYnJpZGdlX2NvbnRleHQpOworCitpbnQgZHVtcF9kc3Bfc3RhY2soc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqYnJpZGdlX2NvbnRleHQpOworCit2b2lkIGR1bXBfZGxfbW9kdWxlcyhzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpicmlkZ2VfY29udGV4dCk7CisKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRSkgfHwgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfREVCVUcpCit2b2lkIHByaW50X2RzcF9kZWJ1Z190cmFjZShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKTsKKyNlbmRpZgorCisjZW5kaWYgLyogSU9TTV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9pb2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmQxMGEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvZGVmcy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBpb2RlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTeXN0ZW0td2lkZSBjaGFubmVsIG9iamVjdHMgYW5kIGNvbnN0YW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIElPREVGU18KKyNkZWZpbmUgSU9ERUZTXworCisjZGVmaW5lIElPX01BWElSUSAgIDB4ZmYJLyogQXJiaXRyYXJpbHkgbGFyZ2UgbnVtYmVyLiAqLworCisvKiBJTyBPYmplY3RzOiAqLworc3RydWN0IGlvX21ncjsKKworLyogSU8gbWFuYWdlciBhdHRyaWJ1dGVzOiAqLworc3RydWN0IGlvX2F0dHJzIHsKKwl1OCBiaXJxOwkJLyogQ2hhbm5lbCdzIEkvTyBJUlEgbnVtYmVyLiAqLworCWJvb2wgaXJxX3NoYXJlZDsJLyogVFJVRSBpZiB0aGUgSVJRIGlzIHNoYXJlYWJsZS4gKi8KKwl1MzIgd29yZF9zaXplOwkJLyogRFNQIFdvcmQgc2l6ZS4gKi8KKwl1MzIgc2htX2Jhc2U7CQkvKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2Ygc2hhcmVkIG1lbW9yeS4gKi8KKwl1MzIgdXNtX2xlbmd0aDsJCS8qIFNpemUgKGluIGJ5dGVzKSBvZiBzaGFyZWQgbWVtb3J5LiAqLworfTsKKworI2VuZGlmIC8qIElPREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9sZHIuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9sZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTAyNjljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xkci5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBsZHIuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm92aWRlIG1vZHVsZSBsb2FkaW5nIHNlcnZpY2VzIGFuZCBzeW1ib2wgZXhwb3J0IHNlcnZpY2VzLgorICoKKyAqIE5vdGVzOgorICogICBUaGlzIHNlcnZpY2UgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBtb2R1bGVzIG9mIHRoZSBEU1AvQklPUyBCcmlkZ2UKKyAqICAgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTERSXworI2RlZmluZSBMRFJfCisKKy8qIExvYWRlciBvYmplY3RzOiAqLworc3RydWN0IGxkcl9tb2R1bGU7CisKKyNlbmRpZiAvKiBMRFJfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODM3YjYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2xpc3QuaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIGxpc3QuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWNsYXJhdGlvbnMgb2YgbGlzdCBtYW5hZ2VtZW50IGNvbnRyb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKKyAqIG9mIGlubGluZSBsaXN0IG1hbmFnZW1lbnQgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIExJU1RfCisjZGVmaW5lIExJU1RfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2RlZmluZSBMU1RfSVNfRU1QVFkobCkgICAgICBsaXN0X2VtcHR5KCYobCktPmhlYWQpCisKK3N0cnVjdCBsc3RfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworfTsKKworLyoKKyAqICA9PT09PT09PSBsc3RfZmlyc3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCwgb3IgTlVMTCBpZiB0aGUgbGlzdAorICogICAgICBpcyBlbXB0eS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsc3Q6ICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBmaXJzdCBsaXN0IGVsZW1lbnQsIG9yIE5VTEwuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIC0gTFNUIGluaXRpYWxpemVkLgorICogICAgICAtIGxzdCAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqbHN0X2ZpcnN0KHN0cnVjdCBsc3RfbGlzdCAqbHN0KQoreworCWlmIChsc3QgJiYgIWxpc3RfZW1wdHkoJmxzdC0+aGVhZCkpCisJCXJldHVybiBsc3QtPmhlYWQubmV4dDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqICA9PT09PT09PSBsc3RfZ2V0X2hlYWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQb3BzIHRoZSBoZWFkIG9mZiB0aGUgbGlzdCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQuCisgKiAgRGV0YWlsczoKKyAqICAgICAgSWYgdGhlIGxpc3QgaXMgZW1wdHksIHJldHVybnMgTlVMTC4KKyAqICAgICAgRWxzZSwgcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgbWFraW5nIHRoZSBuZXh0CisgKiAgICAgIGVsZW1lbnQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgKiAgICAgIFRoZSBoZWFkIGlzIHJlbW92ZWQgYnkgbWFraW5nIHRoZSB0YWlsIGVsZW1lbnQgb2YgdGhlIGxpc3QgcG9pbnQgaXRzCisgKiAgICAgICJuZXh0IiBwb2ludGVyIGF0IHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQsIGFuZCBieSBtYWtpbmcgdGhlCisgKiAgICAgICJwcmV2IiBwb2ludGVyIG9mIHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQgcG9pbnQgYXQgdGhlIHRhaWwKKyAqICAgICAgZWxlbWVudC4gIFNvIHRoZSBuZXh0IGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWQgYmVjb21lcyB0aGUgbmV3IGhlYWQgb2YKKyAqICAgICAgdGhlIGxpc3QuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbHN0OiAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUgb2YgbGlzdCB3aG9zZSBoZWFkCisgKiAgICAgICAgICAgICAgZWxlbWVudCBpcyB0byBiZSByZW1vdmVkCisgKiAgUmV0dXJuczoKKyAqICAgICAgUG9pbnRlciB0byBlbGVtZW50IHRoYXQgd2FzIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0IChzdWNjZXNzKQorICogICAgICBOVUxMICAgICAgICAgIE5vIGVsZW1lbnRzIGluIGxpc3QKKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gbHN0ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlczoKKyAqICAgICAgQmVjYXVzZSB0aGUgdGFpbCBvZiB0aGUgbGlzdCBwb2ludHMgZm9yd2FyZCAoaXRzICJuZXh0IiBwb2ludGVyKSB0bworICogICAgICB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgYW5kIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHBvaW50cyBiYWNrd2FyZCAoaXRzCisgKiAgICAgICJwcmV2IiBwb2ludGVyKSB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdCwgdGhpcyBsaXN0IGlzIGNpcmN1bGFyLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKmxzdF9nZXRfaGVhZChzdHJ1Y3QgbHN0X2xpc3QgKmxzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtX2xpc3Q7CisKKwlpZiAoIWxzdCB8fCBsaXN0X2VtcHR5KCZsc3QtPmhlYWQpKQorCQlyZXR1cm4gTlVMTDsKKworCWVsZW1fbGlzdCA9IGxzdC0+aGVhZC5uZXh0OworCWxzdC0+aGVhZC5uZXh0ID0gZWxlbV9saXN0LT5uZXh0OworCWVsZW1fbGlzdC0+bmV4dC0+cHJldiA9ICZsc3QtPmhlYWQ7CisKKwlyZXR1cm4gZWxlbV9saXN0OworfQorCisvKgorICogID09PT09PT09IGxzdF9pbml0X2VsZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBhIGxpc3QgZWxlbWVudCB0byBkZWZhdWx0IChjbGVhcmVkKSB2YWx1ZXMKKyAqICBEZXRhaWxzOgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGVsZW1fbGlzdDogIFBvaW50ZXIgdG8gbGlzdCBlbGVtZW50IHRvIGJlIHJlc2V0CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTFNUIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgTm90ZXM6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIHRvICJyZXNldCIgYW4gZWxlbWVudCBpbiB0aGUgbWlkZGxlCisgKiAgICAgIG9mIGEgbGlzdCBjaGFpbiAtLSB0aGF0IHdvdWxkIGJyZWFrIHRoZSBjaGFpbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfaW5pdF9lbGVtKHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCkKK3sKKwlpZiAoZWxlbV9saXN0KSB7CisJCWVsZW1fbGlzdC0+bmV4dCA9IE5VTEw7CisJCWVsZW1fbGlzdC0+cHJldiA9IE5VTEw7CisJfQorfQorCisvKgorICogID09PT09PT09IGxzdF9pbnNlcnRfYmVmb3JlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICBJbnNlcnQgdGhlIGVsZW1lbnQgYmVmb3JlIHRoZSBleGlzdGluZyBlbGVtZW50LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxzdDogICAgICAgICAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgICAgIGVsZW1fbGlzdDogICAgICAgICAgUG9pbnRlciB0byBlbGVtZW50IGluIGxpc3QgdG8gaW5zZXJ0LgorICogICAgICBlbGVtX2V4aXN0aW5nOiAgUG9pbnRlciB0byBleGlzdGluZyBsaXN0IGVsZW1lbnQuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgLSBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgICAgIC0gbHN0ICE9IE5VTEwuCisgKiAgICAgIC0gZWxlbV9saXN0ICE9IE5VTEwuCisgKiAgICAgIC0gZWxlbV9leGlzdGluZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfaW5zZXJ0X2JlZm9yZShzdHJ1Y3QgbHN0X2xpc3QgKmxzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCwKKwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fZXhpc3RpbmcpCit7CisJaWYgKGxzdCAmJiBlbGVtX2xpc3QgJiYgZWxlbV9leGlzdGluZykKKwkJbGlzdF9hZGRfdGFpbChlbGVtX2xpc3QsIGVsZW1fZXhpc3RpbmcpOworfQorCisvKgorICogID09PT09PT09IGxzdF9uZXh0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgbGlzdCwgb3IgTlVMTCBpZiB0aGUgbmV4dAorICogICAgICBlbGVtZW50IGlzIHRoZSBoZWFkIG9mIHRoZSBsaXN0IG9yIHRoZSBsaXN0IGlzIGVtcHR5LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGxzdDogICAgICAgIFBvaW50ZXIgdG8gbGlzdCBjb250cm9sIHN0cnVjdHVyZS4KKyAqICAgICAgY3VyX2VsZW06ICAgUG9pbnRlciB0byBlbGVtZW50IGluIGxpc3QgdG8gcmVtb3ZlLgorICogIFJldHVybnM6CisgKiAgICAgIFBvaW50ZXIgdG8gbGlzdCBlbGVtZW50LCBvciBOVUxMLgorICogIFJlcXVpcmVzOgorICogICAgICAtIExTVCBpbml0aWFsaXplZC4KKyAqICAgICAgLSBsc3QgIT0gTlVMTC4KKyAqICAgICAgLSBjdXJfZWxlbSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqbHN0X25leHQoc3RydWN0IGxzdF9saXN0ICpsc3QsCisJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpjdXJfZWxlbSkKK3sKKwlpZiAobHN0ICYmICFsaXN0X2VtcHR5KCZsc3QtPmhlYWQpICYmIGN1cl9lbGVtICYmCisJICAgIChjdXJfZWxlbS0+bmV4dCAhPSAmbHN0LT5oZWFkKSkKKwkJcmV0dXJuIGN1cl9lbGVtLT5uZXh0OworCXJldHVybiBOVUxMOworfQorCisvKgorICogID09PT09PT09IGxzdF9wdXRfdGFpbCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFkZHMgdGhlIHNwZWNpZmllZCBlbGVtZW50IHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0CisgKiAgRGV0YWlsczoKKyAqICAgICAgU2V0cyBuZXcgZWxlbWVudCdzICJwcmV2IiBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIHByZXZpb3VzbHkgaGVsZCBieQorICogICAgICB0aGUgaGVhZCBlbGVtZW50J3MgcHJldiBwb2ludGVyLiAgVGhpcyBpcyB0aGUgcHJldmlvdXMgdGFpbCBtZW1iZXIgb2YKKyAqICAgICAgdGhlIGxpc3QuCisgKiAgICAgIFNldHMgdGhlIG5ldyBoZWFkJ3MgcHJldiBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBlbGVtZW50LgorICogICAgICBTZXRzIG5leHQgcG9pbnRlciBvZiB0aGUgcHJldmlvdXMgdGFpbCBtZW1iZXIgb2YgdGhlIGxpc3QgdG8gcG9pbnQgdG8KKyAqICAgICAgdGhlIG5ldyBlbGVtZW50IChyYXRoZXIgdGhhbiB0aGUgaGVhZCwgd2hpY2ggaXQgaGFkIGJlZW4gcG9pbnRpbmcgYXQpLgorICogICAgICBTZXRzIG5ldyBlbGVtZW50J3MgbmV4dCBwb2ludGVyIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBoZWFkIGVsZW1lbnQuCisgKiAgICAgIFNldHMgaGVhZCdzIHByZXYgcG9pbnRlciB0byB0aGUgYWRkcmVzcyBvZiB0aGUgbmV3IGVsZW1lbnQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbHN0OiAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUgdG8gd2hpY2ggKmVsZW1fbGlzdCB3aWxsIGJlCisgKiAgICAgICAgICAgICAgYWRkZWQKKyAqICAgICAgZWxlbV9saXN0OiAgUG9pbnRlciB0byBsaXN0IGVsZW1lbnQgdG8gYmUgYWRkZWQKKyAqICBSZXR1cm5zOgorICogICAgICBWb2lkCisgKiAgUmVxdWlyZXM6CisgKiAgICAgICplbGVtX2xpc3QgYW5kICpsc3QgbXVzdCBib3RoIGV4aXN0LgorICogICAgICBMU1QgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBOb3RlczoKKyAqICAgICAgQmVjYXVzZSB0aGUgdGFpbCBpcyBhbHdheXMgImp1c3QgYmVmb3JlIiB0aGUgaGVhZCBvZiB0aGUgbGlzdCAodGhlCisgKiAgICAgIHRhaWwncyAibmV4dCIgcG9pbnRlciBwb2ludHMgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIGFuZCB0aGUgaGVhZCdzCisgKiAgICAgICJwcmV2IiBwb2ludGVyIHBvaW50cyBhdCB0aGUgdGFpbCBvZiB0aGUgbGlzdCksIHRoZSBsaXN0IGlzIGNpcmN1bGFyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbHN0X3B1dF90YWlsKHN0cnVjdCBsc3RfbGlzdCAqbHN0LAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1fbGlzdCkKK3sKKwlpZiAobHN0ICYmIGVsZW1fbGlzdCkKKwkJbGlzdF9hZGRfdGFpbChlbGVtX2xpc3QsICZsc3QtPmhlYWQpOworfQorCisvKgorICogID09PT09PT09IGxzdF9yZW1vdmVfZWxlbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZXMgKHVubGlua3MpIHRoZSBnaXZlbiBlbGVtZW50IGZyb20gdGhlIGxpc3QsIGlmIHRoZSBsaXN0IGlzIG5vdAorICogICAgICBlbXB0eS4gIERvZXMgbm90IGZyZWUgdGhlIGxpc3QgZWxlbWVudC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBsc3Q6ICAgICAgICBQb2ludGVyIHRvIGxpc3QgY29udHJvbCBzdHJ1Y3R1cmUuCisgKiAgICAgIGN1cl9lbGVtOiAgIFBvaW50ZXIgdG8gZWxlbWVudCBpbiBsaXN0IHRvIHJlbW92ZS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICAtIExTVCBpbml0aWFsaXplZC4KKyAqICAgICAgLSBsc3QgIT0gTlVMTC4KKyAqICAgICAgLSBjdXJfZWxlbSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsc3RfcmVtb3ZlX2VsZW0oc3RydWN0IGxzdF9saXN0ICpsc3QsCisJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY3VyX2VsZW0pCit7CisJaWYgKGxzdCAmJiAhbGlzdF9lbXB0eSgmbHN0LT5oZWFkKSAmJiBjdXJfZWxlbSkKKwkJbGlzdF9kZWxfaW5pdChjdXJfZWxlbSk7Cit9CisKKyNlbmRpZiAvKiBMSVNUXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ieF9zaC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ieF9zaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMTY1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWJ4X3NoLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBtYnhfc2guaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEZWZpbml0aW9ucyBmb3Igc2hhcmVkIG1haWxib3ggY21kL2RhdGEgdmFsdWVzLih1c2VkIG9uIGJvdGgKKyAqIHRoZSBHUFAgYW5kIERTUCBzaWRlcykuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qCisgKiAgQnJpZGdlIHVzYWdlIG9mIE9NQVAgbWFpbGJveCAxIGlzIGRldGVybWluZWQgYnkgdGhlICJjbGFzcyIgb2YgdGhlCisgKiAgbWFpbGJveCBpbnRlcnJ1cHQncyBjbWQgdmFsdWUgcmVjZWl2ZWQuIFRoZSBjbGFzcyB2YWx1ZSBhcmUgZGVmaW5lZAorICogIGFzIGEgYml0ICgxMCB0aHJ1IDE1KSBiZWluZyBzZXQuCisgKgorICogIE5vdGU6IE9ubHkgMTYgYml0cyBvZiBlYWNoICBpcyB1c2VkLiBPdGhlciAxNiBiaXQgZGF0YSByZWcgYXZhaWxhYmxlLgorICoKKyAqICAgMTYgYml0IE1ieCBiaXQgZGVmbnM6CisgKgorICogQSkuIEV4Y2VwdGlvbi9FcnJvciBoYW5kbGluZyAoTW9kdWxlIERFSCkgOiBjbGFzcyA9IDAuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwwfDB8MHx4fHh8eHx4fHh8eHx4fHh8eHx4fAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICoKKyAqIEI6IERTUC1ETUEgbGluayBkcml2ZXIgY2hhbm5lbHMgKERETUEpIDogY2xhc3MgPSAxLgorICoKKyAqICAgIDE1ICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAwCisgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICB8MHwwfDB8MHwwfDF8YnxifGJ8YnxifGN8Y3xjfGN8Y3wKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwgIChjbGFzcykgIHwgKG1vZHVsZSBzcGVjaWZpYykgfAorICoKKyAqICAgd2hlcmUgYiAtPiBidWZmZXIgaW5kZXggICgzMiBERE1BIGJ1ZmZlcnMvY2hubCBtYXgpCisgKiAgICAgICAgIGMgLT4gY2hhbm5lbCBJZCAgICAoMzIgRERNQSBjaG5scyBtYXgpCisgKgorICoKKyAqIEM6IFByb2MtY29weSBsaW5rIGRyaXZlciBjaGFubmVscyAoUENQWSkgOiBjbGFzcyA9IDIuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwwfDF8MHx4fHh8eHx4fHh8eHx4fHh8eHx4fAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICoKKyAqIEQ6IFplcm8tY29weSBsaW5rIGRyaXZlciBjaGFubmVscyAoRERaQykgOiBjbGFzcyA9IDQuCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MHwxfDB8MHx4fHh8eHx4fHh8Y3xjfGN8Y3xjfAorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICogICB3aGVyZSB4IC0+IG5vdCB1c2VkCisgKiAgICAgICAgIGMgLT4gY2hhbm5lbCBJZCAgICAoMzIgWkNQWSBjaG5scyBtYXgpCisgKgorICoKKyAqIEU6IFBvd2VyIG1hbmFnZW1lbnQgOiBjbGFzcyA9IDguCisgKgorICogICAgMTUgICAgICAgICAxMCAgICAgICAgICAgICAgICAgIDAKKyAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIHwwfDB8MXwwfDB8MHx4fHh8eHx4fHh8Y3xjfGN8Y3xjfAorCisgKiAJMDAxMCAwMHh4IHh4eGMgY2NjYworICoJMDAxMCAwMG5uIHBwcHAgcXFxcQorICoJbm46CisgKgkwMCA9IHJlc2VydmVkCisgKgkwMSA9IHB3ciBzdGF0ZSBjaGFuZ2UKKyAqCTEwID0gb3BwIHByZS1jaGFuZ2UKKyAqCTExID0gb3BwIHBvc3QtY2hhbmdlCisgKgorICoJaWYgbm4gPSBwd3Igc3RhdGUgY2hhbmdlOgorICoJcHBwcCA9IGRvbid0IGNhcmUKKyAqCXFxcXE6CisgKgkwMDEwID0gaGliZXJuYXRlCisgKgkwMDEwIDAwMDEgMDAwMCAwMDEwCisgKgkwMTEwID0gcmV0ZW50aW9uCisgKgkwMDEwIDAwMDEgMDAwMCAwMTEwCisgKglvdGhlcnMgcmVzZXJ2ZWQKKyAqCisgKglpZiBubiA9IG9wcCBwcmUtY2hhbmdlOgorICoJcHBwcCA9IGN1cnJlbnQgb3BwCisgKglxcXFxID0gbmV4dCBvcHAKKyAqCisgKglpZiBubiA9IG9wcCBwb3N0LWNoYW5nZToKKyAqCXBwcHAgPSBwcmV2IG9wcAorICoJcXFxcSA9IGN1cnJlbnQgb3BwCisgKgorICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgfCAgKGNsYXNzKSAgfCAobW9kdWxlIHNwZWNpZmljKSB8CisgKgorICogICB3aGVyZSB4IC0+IG5vdCB1c2VkCisgKiAgICAgICAgIGMgLT4gUG93ZXIgbWFuYWdlbWVudCBjb21tYW5kCisgKgorICovCisKKyNpZm5kZWYgX01CWF9TSF9ICisjZGVmaW5lIF9NQlhfU0hfSAorCisjZGVmaW5lIE1CWF9DTEFTU19NU0sgICAgICAweEZDMDAJLyogQ2xhc3MgYml0cyBhcmUgMTAgdGhydSAxNSAqLworI2RlZmluZSBNQlhfVkFMVUVfTVNLICAgICAgMHgwM0ZGCS8qIFZhbHVlIGlzIDAgdGhydSA5ICovCisKKyNkZWZpbmUgTUJYX0RFSF9DTEFTUyAgICAgIDB4MDAwMAkvKiBERUggb3ducyBNYnggSU5UUiAqLworI2RlZmluZSBNQlhfRERNQV9DTEFTUyAgICAgMHgwNDAwCS8qIERTUC1ETUEgbGluayBkcnZyIGNobmxzIG93bnMgSU5UUiAqLworI2RlZmluZSBNQlhfUENQWV9DTEFTUyAgICAgMHgwODAwCS8qIFBST0MtQ09QWSAgIiAqLworI2RlZmluZSBNQlhfWkNQWV9DTEFTUyAgICAgMHgxMDAwCS8qIFpFUk8tQ09QWSAgIiAqLworI2RlZmluZSBNQlhfUE1fQ0xBU1MgICAgICAgMHgyMDAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgTUJYX0RCR19DTEFTUyAgICAgIDB4NDAwMAkvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2UgKi8KKworLyoKKyAqIEV4Y2VwdGlvbiBIYW5kbGVyIGNvZGVzCisgKiBNYWdpYyBjb2RlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIERTUCBzaWduYWxlZCBleGNlcHRpb24uCisgKi8KKyNkZWZpbmUgTUJYX0RFSF9CQVNFICAgICAgICAweDAKKyNkZWZpbmUgTUJYX0RFSF9VU0VSU19CQVNFICAweDEwMAkvKiAyNTYgKi8KKyNkZWZpbmUgTUJYX0RFSF9MSU1JVCAgICAgICAweDNGRgkvKiAxMDIzICovCisjZGVmaW5lIE1CWF9ERUhfUkVTRVQgICAgICAgMHgxMDEJLyogRFNQIFJFU0VUIChERUgpICovCisjZGVmaW5lIE1CWF9ERUhfRU1NVSAgICAgICAgMFgxMDMJLypEU1AgTU1VIEZBVUxUIFJFQ09WRVJZICovCisKKy8qCisgKiAgTGluayBkcml2ZXIgY29tbWFuZC9zdGF0dXMgY29kZXMuCisgKi8KKy8qIERTUC1ETUEgKi8KKyNkZWZpbmUgTUJYX0RETUFfTlVNQ0hOTEJJVFMgNQkvKiAjIGNobmwgSWQ6ICMgYml0cyBhdmFpbGFibGUgKi8KKyNkZWZpbmUgTUJYX0RETUFfQ0hOTFNISUZUICAgMAkvKiAjIG9mIGJpdHMgdG8gc2hpZnQgKi8KKyNkZWZpbmUgTUJYX0RETUFfQ0hOTE1TSyAgICAgMHgwMUYJLyogYml0cyAwIHRocnUgNCAqLworCisjZGVmaW5lIE1CWF9ERE1BX05VTUJVRkJJVFMgIDUJLyogYnVmZmVyIGluZGV4OiAjIG9mIGJpdHMgYXZhaWwgKi8KKyNkZWZpbmUgTUJYX0RETUFfQlVGU0hJRlQgICAgKE1CWF9ERE1BX05VTUNITkxCSVRTICsgTUJYX0RETUFfQ0hOTFNISUZUKQorI2RlZmluZSBNQlhfRERNQV9CVUZNU0sgICAgICAweDNFMAkvKiBiaXRzIDUgdGhydSA5ICovCisKKy8qIFplcm8tQ29weSAqLworI2RlZmluZSBNQlhfWkNQWV9OVU1DSE5MQklUUyA1CS8qICMgY2hubCBJZDogIyBiaXRzIGF2YWlsYWJsZSAqLworI2RlZmluZSBNQlhfWkNQWV9DSE5MU0hJRlQgICAwCS8qICMgb2YgYml0cyB0byBzaGlmdCAqLworI2RlZmluZSBNQlhfWkNQWV9DSE5MTVNLICAgICAweDAxRgkvKiBiaXRzIDAgdGhydSA0ICovCisKKy8qICBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzICovCisjZGVmaW5lIE1CWF9QTV9EU1BJRExFICAgICAgICAgICAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4MCkKKyNkZWZpbmUgTUJYX1BNX0RTUFdBS0VVUCAgICAgICAgICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHgxKQorI2RlZmluZSBNQlhfUE1fRU1FUkdFTkNZU0xFRVAgICAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDIpCisjZGVmaW5lIE1CWF9QTV9TTEVFUFVOVElMUkVTVEFSVCAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4MykKKyNkZWZpbmUgTUJYX1BNX0RTUEdMT0JBTElETEVfT0ZGICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHg0KQorI2RlZmluZSBNQlhfUE1fRFNQR0xPQkFMSURMRV9PTiAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDUpCisjZGVmaW5lIE1CWF9QTV9TRVRQT0lOVF9QUkVOT1RJRlkgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4NikKKyNkZWZpbmUgTUJYX1BNX1NFVFBPSU5UX1BPU1ROT1RJRlkgICAgICAoTUJYX1BNX0NMQVNTICsgMHg3KQorI2RlZmluZSBNQlhfUE1fRFNQUkVUTiAgICAgICAgICAgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDgpCisjZGVmaW5lIE1CWF9QTV9EU1BSRVRFTlRJT04gICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDgpCisjZGVmaW5lIE1CWF9QTV9EU1BISUJFUk5BVEUgICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweDkpCisjZGVmaW5lIE1CWF9QTV9ISUJFUk5BVEVfRU4gICAgICAgIChNQlhfUE1fQ0xBU1MgKyAweEEpCisjZGVmaW5lIE1CWF9QTV9PUFBfUkVRICAgICAgICAgICAgICAgICAgKE1CWF9QTV9DTEFTUyArIDB4QikKKyNkZWZpbmUgTUJYX1BNX09QUF9DSEcgICAgICAgICAgICAgICAgICAoTUJYX1BNX0NMQVNTICsgMHhDKQorCisjZGVmaW5lIE1CWF9QTV9UWVBFX01BU0sgMHgwMzAwCisjZGVmaW5lIE1CWF9QTV9UWVBFX1BXUl9DSE5HIDB4MDEwMAorI2RlZmluZSBNQlhfUE1fVFlQRV9PUFBfUFJFQ0hORyAweDAyMDAKKyNkZWZpbmUgTUJYX1BNX1RZUEVfT1BQX1BPU1RDSE5HIDB4MDMwMAorI2RlZmluZSBNQlhfUE1fVFlQRV9PUFBfTUFTSyAweDAzMDAKKyNkZWZpbmUgTUJYX1BNX09QUF9QUkVDSE5HIChNQlhfUE1fQ0xBU1MgfCBNQlhfUE1fVFlQRV9PUFBfUFJFQ0hORykKKy8qIERTUCB0byBNUFUgKi8KKyNkZWZpbmUgTUJYX1BNX09QUF9DSE5HKE9QUCkgKE1CWF9QTV9DTEFTUyB8IE1CWF9QTV9UWVBFX09QUF9QUkVDSE5HIHwgKE9QUCkpCisjZGVmaW5lIE1CWF9QTV9SRVQgKE1CWF9QTV9DTEFTUyB8IE1CWF9QTV9UWVBFX1BXUl9DSE5HIHwgMHgwMDA2KQorI2RlZmluZSBNQlhfUE1fSElCIChNQlhfUE1fQ0xBU1MgfCBNQlhfUE1fVFlQRV9QV1JfQ0hORyB8IDB4MDAwMikKKyNkZWZpbmUgTUJYX1BNX09QUDEgMAorI2RlZmluZSBNQlhfUE1fT1BQMiAxCisjZGVmaW5lIE1CWF9QTV9PUFAzIDIKKyNkZWZpbmUgTUJYX1BNX09QUDQgMworCisvKiBCcmlkZ2UgRGVidWcgQ29tbWFuZHMgKi8KKyNkZWZpbmUgTUJYX0RCR19TWVNQUklOVEYgICAgICAgKE1CWF9EQkdfQ0xBU1MgKyAweDApCisKKyNlbmRpZiAvKiBfTUJYX1NIX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZW1kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWVtZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZDJjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWVtZGVmcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBtZW1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIE1FTSBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBCcmlkZ2UgZHJpdmVyIGFuZCBEU1AgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1FTURFRlNfCisjZGVmaW5lIE1FTURFRlNfCisKKy8qCisgKiAgTUVNX1ZJUlRVQUxTRUdJRCBpcyB1c2VkIGJ5IE5vZGUgJiBTdHJtIHRvIGFjY2VzcyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaW4KKyAqICB0aGUgY29ycmVjdCBjbGllbnQgcHJvY2VzcyBjb250ZXh0LgorICovCisjZGVmaW5lIE1FTV9TRVRWSVJUVUFMU0VHSUQgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgTUVNX0dFVFZJUlRVQUxTRUdJRCAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBNRU1fTUFTS1ZJUlRVQUxTRUdJRCAgICAoTUVNX1NFVFZJUlRVQUxTRUdJRCB8IE1FTV9HRVRWSVJUVUFMU0VHSUQpCisKKyNlbmRpZiAvKiBNRU1ERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21nci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjdkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbWdyLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBtZ3IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVsZSBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBNR1JfCisjZGVmaW5lIE1HUl8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3Jwcml2Lmg+CisKKyNkZWZpbmUgTUFYX0VWRU5UUyAzMgorCisvKgorICogID09PT09PT09IG1ncl93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQmxvY2sgb24gYW55IEJyaWRnZSBldmVudChzKQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGFub3RpZmljYXRpb25zICA6IGFycmF5IG9mIHBvaW50ZXJzIHRvIG5vdGlmaWNhdGlvbiBvYmplY3RzLgorICogICAgICBjb3VudCAgICAgICAgICA6IG51bWJlciBvZiBlbGVtZW50cyBpbiBhYm92ZSBhcnJheQorICogICAgICBwdV9pbmRleCAgICAgICAgIDogaW5kZXggb2Ygc2lnbmFsZWQgZXZlbnQgb2JqZWN0CisgKiAgICAgIHV0aW1lb3V0ICAgICAgICA6IHRpbWVvdXQgaW50ZXJ2YWwgaW4gbWlsbGlzZW9jbmRzCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgICAgIDogU3VjY2Vzcy4KKyAqICAgICAgLUVUSU1FICAgIDogV2FpdCB0aW1lZCBvdXQuICpwdV9pbmRleCBpcyB1bmRldGVybWluZWQuCisgKiAgRGV0YWlsczoKKyAqLworCitpbnQgbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMoc3RydWN0IGRzcF9ub3RpZmljYXRpb24KKwkJCQkgICAgICAqKmFub3RpZmljYXRpb25zLAorCQkJCSAgICAgIHUzMiBjb3VudCwgdTMyICpwdV9pbmRleCwKKwkJCQkgICAgICB1MzIgdXRpbWVvdXQpOworCisvKgorICogID09PT09PT09IG1ncl9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGVzIHRoZSBNYW5hZ2VyIE9iamVjdC4gVGhpcyBpcyBkb25lIGR1cmluZyB0aGUgZHJpdmVyIGxvYWRpbmcuCisgKiAgICAgIFRoZXJlIGlzIG9ubHkgb25lIE1hbmFnZXIgT2JqZWN0IGluIHRoZSBEU1AvQklPUyBCcmlkZ2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbWdyX29iajogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGNyZWF0ZWQgTUdSIE9iamVjdCBoYW5kbGUuCisgKiAgICAgIGRldl9ub2RlX29iajogICAgICAgRGV2aWNlIG9iamVjdCBhcyBrbm93biB0byB0aGUgc3lzdGVtLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzCisgKiAgICAgIC1FTk9NRU06ICAgIEZhaWxlZCB0byBDcmVhdGUgdGhlIE9iamVjdAorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBGYWlsdXJlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBtZ3Jfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICptZ3Jfb2JqIGlzIGEgdmFsaWQgTUdSIGludGVyZmFjZSB0byB0aGUgZGV2aWNlLgorICogICAgICAgICAgICAgICAgICAgICAgTUdSIE9iamVjdCBzdG9yZXMgdGhlIERDRCBNYW5hZ2VyIEhhbmRsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1HUiBPYmplY3Qgc3RvcmVkIGluIHRoZSBSZWdzaXRyeS4KKyAqICAgICAgITA6ICAgICAgIE1HUiBPYmplY3Qgbm90IGNyZWF0ZWQKKyAqICBEZXRhaWxzOgorICogICAgICBEQ0QgRGxsIGlzIGxvYWRlZCBhbmQgTUdSIE9iamVjdCBzdG9yZXMgdGhlIGhhbmRsZSBvZiB0aGUgRExMLgorICovCitleHRlcm4gaW50IG1ncl9jcmVhdGUoc3RydWN0IG1ncl9vYmplY3QgKiptZ3Jfb2JqLAorCQkJICAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaik7CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZXN0cm95cyB0aGUgTUdSIG9iamVjdC4gQ2FsbGVkIHVwb24gZHJpdmVyIHVubG9hZGluZy4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobWdyX29iajogICAgIEhhbmRsZSB0byBNYW5hZ2VyIG9iamVjdCAuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBEQ0QgTWFuYWdlciBmcmVlZDsgTUdSIE9iamVjdCBkZXN0cm95ZWQ7CisgKiAgICAgICAgICAgICAgICAgICAgICBNR1IgT2JqZWN0IGRlbGV0ZWQgZnJvbSB0aGUgUmVnaXN0cnkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsZWQgdG8gZGVzdHJveSBNR1IgT2JqZWN0CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBJbml0aWFsaXplZCAocmVmcyA+IDAgKQorICogICAgICBobWdyX29iaiBpcyBhIHZhbGlkIE1HUiBoYW5kbGUgLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICBNR1IgT2JqZWN0IGRlc3Ryb3llZCBhbmQgaG1ncl9vYmogaXMgSW52YWxpZCBNR1IKKyAqICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZS4KKyAqLworZXh0ZXJuIGludCBtZ3JfZGVzdHJveShzdHJ1Y3QgbWdyX29iamVjdCAqaG1ncl9vYmopOworCisvKgorICogID09PT09PT09IG1ncl9lbnVtX25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEVudW1lcmF0ZSBhbmQgZ2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYWJvdXQgbm9kZXMgY29uZmlndXJlZAorICogICAgICBpbiB0aGUgbm9kZSBkYXRhYmFzZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBub2RlX2lkOiAgICAgICAgICAgICAgVGhlIG5vZGUgaW5kZXggKGJhc2UgMCkuCisgKiAgICAgIHBuZGJfcHJvcHM6ICAgICAgICAgIFB0ciB0byB0aGUgZHNwX25kYnByb3BzIHN0cnVjdHVyZSBmb3Igb3V0cHV0LgorICogICAgICB1bmRiX3Byb3BzX3NpemU6ICAgICAgU2l6ZSBvZiB0aGUgZHNwX25kYnByb3BzIHN0cnVjdHVyZS4KKyAqICAgICAgcHVfbnVtX25vZGVzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2Ygbm9kZXMgY29uZmlndXJlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBkYXRhYmFzZSB3aWxsIGJlIHJldHVybmVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVJTlZBTDogICAgUGFyYW1ldGVyIG5vZGVfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2Ygbm9kZXMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXRyZWQgaW4gdGhlIHN5c3RlbQorICogICAgICAtRUlEUk06ICBEdXJpbmcgRW51bWVyYXRpb24gdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgaW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBub2RlcyBjb25maWd1cmVkIG9yIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydGllcyBvZiB0aGUgZW51bWVyYXRlZCBub2Rlcy4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBGYWlsZWQgdG8gcXVlcnJ5IHRoZSBOb2RlIERhdGEgQmFzZQorICogIFJlcXVpcmVzOgorICogICAgICBwTkRCUFJPUFMgaXMgbm90IG51bGwKKyAqICAgICAgdW5kYl9wcm9wc19zaXplID49IHNpemVvZihkc3BfbmRicHJvcHMpCisgKiAgICAgIHB1X251bV9ub2RlcyBpcyBub3QgbnVsbAorICogICAgICBNR1IgSW5pdGlhbGl6ZWQgKHJlZnMgPiAwICkKKyAqICBFbnN1cmVzOgorICogICAgICBTVUNDRVNTIG9uIHN1Y2Nlc3NmdWwgcmV0cmVpdmFsIG9mIGRhdGEgYW5kICpwdV9udW1fbm9kZXMgPiAwIE9SCisgKiAgICAgIERTUF9GQUlMRUQgICYmICpwdV9udW1fbm9kZXMgPT0gMC4KKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IG1ncl9lbnVtX25vZGVfaW5mbyh1MzIgbm9kZV9pZCwKKwkJCQkgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKnBuZGJfcHJvcHMsCisJCQkJICAgICB1MzIgdW5kYl9wcm9wc19zaXplLAorCQkJCSAgICAgdTMyICpwdV9udW1fbm9kZXMpOworCisvKgorICogID09PT09PT09IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUgRFNQCisgKiAgICAgIHByb2Nlc3NvcnMKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcm9jZXNzb3JfaWQ6ICAgICAgICAgVGhlIHByb2Nlc3NvciBpbmRleCAoemVyby1iYXNlZCkuCisgKiAgICAgIHByb2Nlc3Nvcl9pbmZvOiAgICAgUHRyIHRvIHRoZSBkc3BfcHJvY2Vzc29yaW5mbyBzdHJ1Y3R1cmUgLgorICogICAgICBwcm9jZXNzb3JfaW5mb19zaXplOiBTaXplIG9mIGRzcF9wcm9jZXNzb3JpbmZvIHN0cnVjdHVyZS4KKyAqICAgICAgcHVfbnVtX3Byb2NzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIHRoZSBudW1iZXIgb2YgRFNQcyBjb25maWd1cmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGRhdGFiYXNlIHdpbGwgYmUgcmV0dXJuZWQKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FSU5WQUw6ICAgIFBhcmFtZXRlciBwcm9jZXNzb3JfaWQgaXMgPiB0aGFuIHRoZSBudW1iZXIgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBEU1AgUHJvY2Vzc29ycyBpbiB0aGUgc3lzdGVtLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEZhaWxlZCB0byBxdWVycnkgdGhlIE5vZGUgRGF0YSBCYXNlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHByb2Nlc3Nvcl9pbmZvIGlzIG5vdCBudWxsCisgKiAgICAgIHB1X251bV9wcm9jcyBpcyBub3QgbnVsbAorICogICAgICBwcm9jZXNzb3JfaW5mb19zaXplID49IHNpemVvZihkc3BfcHJvY2Vzc29yaW5mbykKKyAqICAgICAgTUdSIEluaXRpYWxpemVkIChyZWZzID4gMCApCisgKiAgRW5zdXJlczoKKyAqICAgICAgU1VDQ0VTUyBvbiBzdWNjZXNzZnVsIHJldHJlaXZhbCBvZiBkYXRhIGFuZCAqcHVfbnVtX3Byb2NzID4gMCBPUgorICogICAgICBEU1BfRkFJTEVEICYmICpwdV9udW1fcHJvY3MgPT0gMC4KKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IG1ncl9lbnVtX3Byb2Nlc3Nvcl9pbmZvKHUzMiBwcm9jZXNzb3JfaWQsCisJCQkJCSAgc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvCisJCQkJCSAgKnByb2Nlc3Nvcl9pbmZvLAorCQkJCQkgIHUzMiBwcm9jZXNzb3JfaW5mb19zaXplLAorCQkJCQkgIHU4ICpwdV9udW1fcHJvY3MpOworLyoKKyAqICA9PT09PT09PSBtZ3JfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudCBpcworICogICAgICAwLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTUdSIGlzIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFdoZW4gcmVmZXJlbmNlIGNvdW50ID09IDAsIE1HUidzIHByaXZhdGUgcmVzb3VyY2VzIGFyZSBmcmVlZC4KKyAqLworZXh0ZXJuIHZvaWQgbWdyX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2dldF9kY2RfaGFuZGxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmVzIHRoZSBNR1IgaGFuZGxlLiBBY2Nlc3NvciBGdW5jdGlvbgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG1ncl9oYW5kbGU6ICAgICBIYW5kbGUgdG8gdGhlIE1hbmFnZXIgT2JqZWN0CisgKiAgICAgIGRjZF9oYW5kbGU6ICAgICBQdHIgdG8gcmVjZWl2ZSB0aGUgRENEIEhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjZXNzCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIHRvIGdldCB0aGUgSGFuZGxlCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIE1HUiBpcyBpbml0aWFsaXplZC4KKyAqICAgICAgZGNkX2hhbmRsZSAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCBhbmQgKmRjZF9oYW5kbGUgIT0gTlVMTCB8fAorICogICAgICAtRVBFUk0gYW5kICpkY2RfaGFuZGxlID09IE5VTEwKKyAqLworZXh0ZXJuIGludCBtZ3JfZ2V0X2RjZF9oYW5kbGUoc3RydWN0IG1ncl9vYmplY3QKKwkJCQkgICAgICptZ3JfaGFuZGxlLCB1MzIgKmRjZF9oYW5kbGUpOworCisvKgorICogID09PT09PT09IG1ncl9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBNR1IncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2gKKyAqICAgICAgY2FsbC4gSW50aWFsaXplcyB0aGUgRENELgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXplZDsgRkFMU0UgaWYgZXJyb3Igb2NjdXJlZC4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICogICAgICBUUlVFOiBBIHJlcXVpcmVtZW50IGZvciB0aGUgb3RoZXIgcHVibGljIE1HUiBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBib29sIG1ncl9pbml0KHZvaWQpOworCisjZW5kaWYgLyogTUdSXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21ncnByaXYuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3Jwcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNGUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tZ3Jwcml2LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIG1ncnByaXYuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgTUdSIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DLCBNR1IsIGFuZCBEU1AgQVBJLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1HUlBSSVZfCisjZGVmaW5lIE1HUlBSSVZfCisKKy8qCisgKiBPTUFQMTUxMCBzcGVjaWZpYworICovCisjZGVmaW5lIE1HUl9NQVhUTEJFTlRSSUVTICAzMgorCisvKiBSTSBNR1IgT2JqZWN0ICovCitzdHJ1Y3QgbWdyX29iamVjdDsKKworc3RydWN0IG1ncl90bGJlbnRyeSB7CisJdTMyIHVsX2RzcF92aXJ0OwkvKiBEU1AgdmlydHVhbCBhZGRyZXNzICovCisJdTMyIHVsX2dwcF9waHlzOwkvKiBHUFAgcGh5c2ljYWwgYWRkcmVzcyAqLworfTsKKworLyoKKyAqICBUaGUgRFNQX1BST0NFU1NPUkVYVElORk8gc3RydWN0dXJlIGRlc2NyaWJlcyBhZGRpdGlvbmFsIGV4dGVuZGVkCisgKiAgY2FwYWJpbGl0aWVzIG9mIGEgRFNQIHByb2Nlc3NvciBub3QgZXhwb3NlZCB0byB1c2VyLgorICovCitzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8geworCXN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyB0eV9iYXNpYzsJLyogdXNlciBwcm9jZXNzb3IgaW5mbyAqLworCS8qIHByaXZhdGUgZHNwIG1tdSBlbnRyaWVzICovCisJc3RydWN0IG1ncl90bGJlbnRyeSB0eV90bGJbTUdSX01BWFRMQkVOVFJJRVNdOworfTsKKworI2VuZGlmIC8qIE1HUlBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU3NzhiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2cuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogbXNnLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIG1zZ19jdHJsIE1vZHVsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR18KKyNkZWZpbmUgTVNHXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RldmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnZGVmcy5oPgorCisvKgorICogID09PT09PT09IG1zZ19jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYW4gb2JqZWN0IHRvIG1hbmFnZSBtZXNzYWdlIHF1ZXVlcy4gT25seSBvbmUgb2YgdGhlc2Ugb2JqZWN0cworICogICAgICBjYW4gZXhpc3QgcGVyIGRldmljZSBvYmplY3QuIFRoZSBtc2dfY3RybCBtYW5hZ2VyIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUKKyAqICAgICAgdGhlIElPIE1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbXNnX21hbjogICAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtc2dfY3RybCBtYW5hZ2VyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgICAgIFRoZSBkZXZpY2Ugb2JqZWN0LgorICogICAgICBtc2dfY2FsbGJhY2s6ICAgICAgICBDYWxsZWQgd2hlbmV2ZXIgYW4gUk1TX0VYSVQgbWVzc2FnZSBpcyByZWNlaXZlZC4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBtc2dfbW9kX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBtc2dfbWFuICE9IE5VTEwuCisgKiAgICAgIGhkZXZfb2JqICE9IE5VTEwuCisgKiAgICAgIG1zZ19jYWxsYmFjayAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbXNnX2NyZWF0ZShzdHJ1Y3QgbXNnX21nciAqKm1zZ19tYW4sCisJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgbXNnX29uZXhpdCBtc2dfY2FsbGJhY2spOworCisvKgorICogID09PT09PT09IG1zZ19kZWxldGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYSBtc2dfY3RybCBtYW5hZ2VyIGFsbG9jYXRlZCBpbiBtc2dfY3JlYXRlKCkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG1zZ19tZ3I6ICAgICAgICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbXNnX2NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1zZ19tb2RfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIGhtc2dfbWdyLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIG1zZ19kZWxldGUoc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKTsKKworLyoKKyAqICA9PT09PT09PSBtc2dfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1zZ19jdHJsIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1zZ19tb2RfaW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICogICAgICBBbnkgcmVzb3VyY2VzIGFjcXVpcmVkIGluIG1zZ19tb2RfaW5pdCh2b2lkKSB3aWxsIGJlIGZyZWVkIHdoZW4gbGFzdAorICogICAgICBtc2dfY3RybCBjbGllbnQgY2FsbHMgbXNnX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIG1zZ19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IG1zZ19tb2RfaW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIG1zZ19jdHJsIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgbXNnX21vZF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogTVNHXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL21zZ2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2dkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhM2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9tc2dkZWZzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIG1zZ2RlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgbXNnX2N0cmwgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR0RFRlNfCisjZGVmaW5lIE1TR0RFRlNfCisKKy8qIG1zZ19jdHJsIE9iamVjdHM6ICovCitzdHJ1Y3QgbXNnX21ncjsKK3N0cnVjdCBtc2dfcXVldWU7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIG9uIFJNU19FWElUIG1lc3NhZ2UgcmVjZWl2ZWQgKi8KK3R5cGVkZWYgdm9pZCAoKm1zZ19vbmV4aXQpICh2b2lkICpoLCBzMzIgbm9kZV9zdGF0dXMpOworCisjZW5kaWYgLyogTVNHREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ubGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjUzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbmxkci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBubGRyLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGR5bmFtaWMgbG9hZGVyIGludGVyZmFjZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZGRlZi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisKKyNpZm5kZWYgTkxEUl8KKyNkZWZpbmUgTkxEUl8KKworZXh0ZXJuIGludCBubGRyX2FsbG9jYXRlKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCQkJdm9pZCAqcHJpdl9yZWYsIGNvbnN0IHN0cnVjdCBkY2Rfbm9kZXByb3BzCisJCQkJKm5vZGVfcHJvcHMsCisJCQkJc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKm5sZHJfbm9kZW9iaiwKKwkJCQlib29sICpwZl9waGFzZV9zcGxpdCk7CisKK2V4dGVybiBpbnQgbmxkcl9jcmVhdGUoc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkciwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBubGRyX2F0dHJzICpwYXR0cnMpOworCitleHRlcm4gdm9pZCBubGRyX2RlbGV0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKTsKK2V4dGVybiB2b2lkIG5sZHJfZXhpdCh2b2lkKTsKKworZXh0ZXJuIGludCBubGRyX2dldF9meG5fYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCSAgICBjaGFyICpzdHJfZnhuLCB1MzIgKiBhZGRyKTsKKworZXh0ZXJuIGludCBubGRyX2dldF9ybW1fbWFuYWdlcihzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHIsCisJCQkJICAgICAgIHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqKnJtbV9tZ3IpOworCitleHRlcm4gYm9vbCBubGRyX2luaXQodm9pZCk7CitleHRlcm4gaW50IG5sZHJfbG9hZChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CitleHRlcm4gaW50IG5sZHJfdW5sb2FkKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQkgICAgICBlbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9CQUNLVFJBQ0UKK2ludCBubGRyX2ZpbmRfYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGUsIHUzMiBzeW1fYWRkciwKKwl1MzIgb2Zmc2V0X3JhbmdlLCB2b2lkICpvZmZzZXRfb3V0cHV0LCBjaGFyICpzeW1fbmFtZSk7CisjZW5kaWYKKworI2VuZGlmIC8qIE5MRFJfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbmxkcmRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ubGRyZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NWQzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbmxkcmRlZnMuaApAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIG5sZHJkZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIER5bmFtaWMgKyBzdGF0aWMvb3ZlcmxheSBOb2RlIGxvYWRlciAoTkxEUikgY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBOTERSREVGU18KKyNkZWZpbmUgTkxEUkRFRlNfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2RkZWYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorCisjZGVmaW5lIE5MRFJfTUFYUEFUSExFTkdUSCAgICAgICAyNTUKKy8qIE5MRFIgT2JqZWN0czogKi8KK3N0cnVjdCBubGRyX29iamVjdDsKK3N0cnVjdCBubGRyX25vZGVvYmplY3Q7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9sb2FkdHlwZSA9PT09PT09PQorICogIExvYWQgdHlwZXMgZm9yIGEgbm9kZS4gTXVzdCBtYXRjaCB2YWx1ZXMgaW4gbm9kZS5oNTUuCisgKi8KK2VudW0gbmxkcl9sb2FkdHlwZSB7CisJTkxEUl9TVEFUSUNMT0FELAkvKiBMaW5rZWQgaW4gYmFzZSBpbWFnZSwgbm90IG92ZXJsYXkgKi8KKwlOTERSX0RZTkFNSUNMT0FELAkvKiBEeW5hbWljYWxseSBsb2FkZWQgbm9kZSAqLworCU5MRFJfT1ZMWUxPQUQJCS8qIExpbmtlZCBpbiBiYXNlIGltYWdlLCBvdmVybGF5IG5vZGUgKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9vdmx5ZnhuID09PT09PT09CisgKiAgQ2F1c2VzIGNvZGUgb3IgZGF0YSB0byBiZSBjb3BpZWQgZnJvbSBsb2FkIGFkZHJlc3MgdG8gcnVuIGFkZHJlc3MuIFRoaXMKKyAqICBpcyB0aGUgImNvZF93cml0ZWZ4biIgdGhhdCBnZXRzIHBhc3NlZCB0byB0aGUgREJMTF9MaWJyYXJ5IGFuZCBpcyB1c2VkIGFzCisgKiAgdGhlIFpMIHdyaXRlIGZ1bmN0aW9uLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcml2X3JlZjogICAgICAgSGFuZGxlIHRvIGlkZW50aWZ5IHRoZSBub2RlLgorICogICAgICBkc3BfcnVuX2FkZHI6ICAgUnVuIGFkZHJlc3Mgb2YgY29kZSBvciBkYXRhLgorICogICAgICBkc3BfbG9hZF9hZGRyOiAgTG9hZCBhZGRyZXNzIG9mIGNvZGUgb3IgZGF0YS4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRvIGNvcHkuCisgKiAgICAgIG1lbV9zcGFjZTogICAgICBSTVNfQ09ERSBvciBSTVNfREFUQS4KKyAqICBSZXR1cm5zOgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgorICogICAgICAwOiAgICAgICAgICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHUzMigqbmxkcl9vdmx5ZnhuKSAodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsCisJCQkgICAgdTMyIGRzcF9sb2FkX2FkZHIsIHUzMiB1bF9udW1fYnl0ZXMsIHUzMiBtZW1fc3BhY2UpOworCisvKgorICogID09PT09PT09IG5sZHJfd3JpdGVmeG4gPT09PT09PT0KKyAqICBXcml0ZSBtZW1vcnkgZnVuY3Rpb24uIFVzZWQgZm9yIGR5bmFtaWMgbG9hZCB3cml0ZXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcHJpdl9yZWY6ICAgICAgIEhhbmRsZSB0byBpZGVudGlmeSB0aGUgbm9kZS4KKyAqICAgICAgZHNwX2FkZDogICAgICAgIEFkZHJlc3Mgb2YgY29kZSBvciBkYXRhLgorICogICAgICBwYnVmOiAgICAgICAgICAgQ29kZSBvciBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqICAgICAgdWxfbnVtX2J5dGVzOiAgICAgTnVtYmVyIG9mIChHUFApIGJ5dGVzIHRvIHdyaXRlLgorICogICAgICBtZW1fc3BhY2U6ICAgICAgREJMTF9EQVRBIG9yIERCTExfQ09ERS4KKyAqICBSZXR1cm5zOgorICogICAgICB1bF9udW1fYnl0ZXM6ICAgICBTdWNjZXNzLgorICogICAgICAwOiAgICAgICAgICAgICAgRmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHUzMigqbmxkcl93cml0ZWZ4bikgKHZvaWQgKnByaXZfcmVmLAorCQkJICAgICB1MzIgZHNwX2FkZCwgdm9pZCAqcGJ1ZiwKKwkJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSk7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9hdHRycyA9PT09PT09PQorICogIEF0dHJpYnV0ZXMgcGFzc2VkIHRvIG5sZHJfY3JlYXRlIGZ1bmN0aW9uLgorICovCitzdHJ1Y3Qgbmxkcl9hdHRycyB7CisJbmxkcl9vdmx5ZnhuIHBmbl9vdmx5OworCW5sZHJfd3JpdGVmeG4gcGZuX3dyaXRlOworCXUxNiB1c19kc3Bfd29yZF9zaXplOworCXUxNiB1c19kc3BfbWF1X3NpemU7Cit9OworCisvKgorICogID09PT09PT09IG5sZHJfcGhhc2UgPT09PT09PT0KKyAqICBJbmRpY2F0ZXMgbm9kZSBjcmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSBwaGFzZSBmdW5jdGlvbi4KKyAqLworZW51bSBubGRyX3BoYXNlIHsKKwlOTERSX0NSRUFURSwKKwlOTERSX0RFTEVURSwKKwlOTERSX0VYRUNVVEUsCisJTkxEUl9OT1BIQVNFCit9OworCisvKgorICogIFR5cGVkZWZzIG9mIGxvYWRlciBmdW5jdGlvbnMgaW1wb3J0ZWQgZnJvbSBhIERMTCwgb3IgZGVmaW5lZCBpbiBhCisgKiAgZnVuY3Rpb24gdGFibGUuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBubGRyX2FsbG9jYXRlID09PT09PT09CisgKiAgQWxsb2NhdGUgcmVzb3VyY2VzIHRvIG1hbmFnZSB0aGUgbG9hZGluZyBvZiBhIG5vZGUgb24gdGhlIERTUC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9vYmo6ICAgICAgICAgIEhhbmRsZSBvZiBsb2FkZXIgdGhhdCB3aWxsIGxvYWQgdGhlIG5vZGUuCisgKiAgICAgIHByaXZfcmVmOiAgICAgICBIYW5kbGUgdG8gaWRlbnRpZnkgdGhlIG5vZGUuCisgKiAgICAgIG5vZGVfcHJvcHM6ICAgICBQb2ludGVyIHRvIGEgZGNkX25vZGVwcm9wcyBmb3IgdGhlIG5vZGUuCisgKiAgICAgIG5sZHJfbm9kZW9iajogICBMb2NhdGlvbiB0byBzdG9yZSBub2RlIGhhbmRsZSBvbiBvdXRwdXQuIFRoaXMgaGFuZGxlCisgKiAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCB0byBubGRyX2xvYWQvbmxkcl91bmxvYWQuCisgKiAgICAgIHBmX3BoYXNlX3NwbGl0OiAgIHBvaW50ZXIgdG8gaW50IHZhcmlhYmxlIHJlZmVyZW5jZWQgaW4gbm9kZS5jCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX29iai4KKyAqICAgICAgbm9kZV9wcm9wcyAhPSBOVUxMLgorICogICAgICBubGRyX25vZGVvYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgSXNWYWxpZE5vZGUoKm5sZHJfbm9kZW9iaikuCisgKiAgICAgIGVycm9yOiAgICAgICAgICAqbmxkcl9ub2Rlb2JqID09IE5VTEwuCisgKi8KK3R5cGVkZWYgaW50KCpubGRyX2FsbG9jYXRlZnhuKSAoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiwKKwkJCQkgICAgICAgdm9pZCAqcHJpdl9yZWYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkY2Rfbm9kZXByb3BzCisJCQkJICAgICAgICogbm9kZV9wcm9wcywKKwkJCQkgICAgICAgc3RydWN0IG5sZHJfbm9kZW9iamVjdAorCQkJCSAgICAgICAqKm5sZHJfbm9kZW9iaiwKKwkJCQkgICAgICAgYm9vbCAqcGZfcGhhc2Vfc3BsaXQpOworCisvKgorICogID09PT09PT09IG5sZHJfY3JlYXRlID09PT09PT09CisgKiAgQ3JlYXRlIGEgbG9hZGVyIG9iamVjdC4gVGhpcyBvYmplY3QgaGFuZGxlcyB0aGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIG9mCisgKiAgY3JlYXRlLCBkZWxldGUsIGFuZCBleGVjdXRlIHBoYXNlIGZ1bmN0aW9ucyBvZiBub2RlcyBvbiB0aGUgRFNQIHRhcmdldC4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcjogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGxvYWRlciBoYW5kbGUgb24gb3V0cHV0LgorICogICAgICBoZGV2X29iajogICAgIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3IuCisgKiAgICAgIHBhdHRyczogICAgICAgICBMb2FkZXIgYXR0cmlidXRlcy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbmxkciAhPSBOVUxMLgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICoJcGF0dHJzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIFZhbGlkICpubGRyLgorICogICAgICBlcnJvcjogICAgICAgICAgKm5sZHIgPT0gTlVMTC4KKyAqLwordHlwZWRlZiBpbnQoKm5sZHJfY3JlYXRlZnhuKSAoc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkciwKKwkJCQkgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBubGRyX2F0dHJzICpwYXR0cnMpOworCisvKgorICogID09PT09PT09IG5sZHJfZGVsZXRlID09PT09PT09CisgKiAgRGVsZXRlIHRoZSBOTERSIGxvYWRlci4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9vYmo6ICAgICAgICAgIE5vZGUgbWFuYWdlciBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgbmxkcl9vYmouCisgKiAgRW5zdXJlczoKKyAqCW5sZHJfb2JqIGludmFsaWQKKyAqLwordHlwZWRlZiB2b2lkICgqbmxkcl9kZWxldGVmeG4pIChzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBOTERSIG1vZHVsZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgc3VjY2Vzc2Z1bGx5IGNhbGxlZCBiZWZvcmUuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQW55IHJlc291cmNlcyBhY3F1aXJlZCBpbiBubGRyX2luaXQodm9pZCkgd2lsbCBiZSBmcmVlZCB3aGVuIGxhc3QgTkxEUgorICogICAgICBjbGllbnQgY2FsbHMgbmxkcl9leGl0KHZvaWQpLgorICovCit0eXBlZGVmIHZvaWQgKCpubGRyX2V4aXRmeG4pICh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBOTERSX0ZyZWUgPT09PT09PT0KKyAqICBGcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gbmxkcl9hbGxvY2F0ZS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbmxkcl9ub2RlX29iajogICAgICBIYW5kbGUgcmV0dXJuZWQgZnJvbSBubGRyX2FsbG9jYXRlKCkuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgbmxkcl9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgbmxkcl9ub2RlX29iai4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIHZvaWQgKCpubGRyX2ZyZWVmeG4pIChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9meG5fYWRkciA9PT09PT09PQorICogIEdldCBhZGRyZXNzIG9mIGNyZWF0ZSwgZGVsZXRlLCBvciBleGVjdXRlIHBoYXNlIGZ1bmN0aW9uIG9mIGEgbm9kZSBvbgorICogIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBzdHJfZnhuOiAgICAgICAgTmFtZSBvZiBmdW5jdGlvbi4KKyAqICAgICAgYWRkcjogICAgICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGZ1bmN0aW9uIGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FU1BJUEU6ICAgIEFkZHJlc3Mgb2YgZnVuY3Rpb24gbm90IGZvdW5kLgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX25vZGVfb2JqLgorICogICAgICBhZGRyICE9IE5VTEw7CisgKiAgICAgIHN0cl9meG4gIT0gTlVMTDsKKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGludCgqbmxkcl9nZXRmeG5hZGRyZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdAorCQkJCQkgKiBubGRyX25vZGVfb2JqLAorCQkJCQkgY2hhciAqc3RyX2Z4biwgdTMyICogYWRkcik7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgTkxEUiBtb2R1bGUuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBpbml0aWFsaXphdGlvbiBzdWNjZWVkZWQsIEZBTFNFIG90aGVyd2lzZS4KKyAqICBFbnN1cmVzOgorICovCit0eXBlZGVmIGJvb2woKm5sZHJfaW5pdGZ4bikgKHZvaWQpOworCisvKgorICogID09PT09PT09IG5sZHJfbG9hZCA9PT09PT09PQorICogIExvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rpb24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBwaGFzZTogICAgICAgICAgVHlwZSBvZiBmdW5jdGlvbiB0byBsb2FkIChjcmVhdGUsIGRlbGV0ZSwgb3IgZXhlY3V0ZSkuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IG9uIEdQUC4KKyAqICAgICAgLUVOWElPOiAgICAgQ2FuJ3Qgb3ZlcmxheSBwaGFzZSBiZWNhdXNlIG92ZXJsYXkgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFscmVhZHkgaW4gdXNlLgorICogICAgICAtRUlMU0VROiAgICAgICAgICAgRmFpbHVyZSBpbiBkeW5hbWljIGxvYWRlciBsaWJyYXJ5LgorICogIFJlcXVpcmVzOgorICogICAgICBubGRyX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBubGRyX25vZGVfb2JqLgorICogIEVuc3VyZXM6CisgKi8KK3R5cGVkZWYgaW50KCpubGRyX2xvYWRmeG4pIChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl91bmxvYWQgPT09PT09PT0KKyAqICBVbmxvYWQgY3JlYXRlLCBkZWxldGUsIG9yIGV4ZWN1dGUgcGhhc2UgZnVuY3Rpb24gb2YgYSBub2RlIG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5sZHJfbm9kZV9vYmo6ICAgICAgSGFuZGxlIHJldHVybmVkIGZyb20gbmxkcl9hbGxvY2F0ZSgpLgorICogICAgICBwaGFzZTogICAgICAgICAgTm9kZSBmdW5jdGlvbiB0byB1bmxvYWQgKGNyZWF0ZSwgZGVsZXRlLCBvciBleGVjdXRlKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBvbiBHUFAuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5sZHJfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIFZhbGlkIG5sZHJfbm9kZV9vYmouCisgKiAgRW5zdXJlczoKKyAqLwordHlwZWRlZiBpbnQoKm5sZHJfdW5sb2FkZnhuKSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCQkgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9sZHJfZnhucyA9PT09PT09PQorICovCitzdHJ1Y3Qgbm9kZV9sZHJfZnhucyB7CisJbmxkcl9hbGxvY2F0ZWZ4biBwZm5fYWxsb2NhdGU7CisJbmxkcl9jcmVhdGVmeG4gcGZuX2NyZWF0ZTsKKwlubGRyX2RlbGV0ZWZ4biBwZm5fZGVsZXRlOworCW5sZHJfZXhpdGZ4biBwZm5fZXhpdDsKKwlubGRyX2dldGZ4bmFkZHJmeG4gcGZuX2dldF9meG5fYWRkcjsKKwlubGRyX2luaXRmeG4gcGZuX2luaXQ7CisJbmxkcl9sb2FkZnhuIHBmbl9sb2FkOworCW5sZHJfdW5sb2FkZnhuIHBmbl91bmxvYWQ7Cit9OworCisjZW5kaWYgLyogTkxEUkRFRlNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWVkNWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGUuaApAQCAtMCwwICsxLDU4MyBAQAorLyoKKyAqIG5vZGUuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgTm9kZSBNYW5hZ2VyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTk9ERV8KKyNkZWZpbmUgTk9ERV8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jcHJpdi5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rpc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25sZHJkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCisvKgorICogID09PT09PT09IG5vZGVfYWxsb2NhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBHUFAgcmVzb3VyY2VzIHRvIG1hbmFnZSBhIG5vZGUgb24gdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yOiAgICAgICAgIEhhbmRsZSBvZiBwcm9jZXNzb3IgdGhhdCBpcyBhbGxvY2F0aW5nIHRoZSBub2RlLgorICogICAgICBub2RlX3V1aWQ6ICAgICAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBmb3IgdGhlIG5vZGUuCisgKiAgICAgIHBhcmdzOiAgICAgICAgICAgICAgT3B0aW9uYWwgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgbm9kZS4KKyAqICAgICAgYXR0cl9pbjogICAgICAgICAgICBPcHRpb25hbCBwb2ludGVyIHRvIG5vZGUgYXR0cmlidXRlcyAocHJpb3JpdHksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dC4uLikKKyAqICAgICAgbm9kZXJlczogICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgbm9kZSByZXNvdXJjZSBpbmZvLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogICAgICAtRU5PS0VZOiAgICAgICAgICBOb2RlIFVVSUQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWQuCisgKiAgICAgIC1FU1BJUEU6ICAgICAgICBpQWxnIGZ1bmN0aW9ucyBub3QgZm91bmQgZm9yIGEgREFJUyBub2RlLgorICogICAgICAtRURPTTogICAgICAgICBhdHRyX2luICE9IE5VTEwgYW5kIGF0dHJfaW4tPnByaW8gb3V0IG9mCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VyZWQsIHVuYWJsZSB0byBhbGxvY2F0ZSBub2RlLgorICogICAgICAtRUJBRFI6ICAgIFByb2NjZXNzb3IgaXMgbm90IGluIHRoZSBydW5uaW5nIHN0YXRlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBocHJvY2Vzc29yICE9IE5VTEwuCisgKiAgICAgIG5vZGVfdXVpZCAhPSBOVUxMLgorICogICAgICBub2RlcmVzICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICAgICBJc1ZhbGlkTm9kZSgqcGhfbm9kZSkuCisgKiAgICAgIGVycm9yOiAgICAgICAgICAgICAgKm5vZGVyZXMgPT0gTlVMTC4KKyAqLworZXh0ZXJuIGludCBub2RlX2FsbG9jYXRlKHN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvciwKKwkJCQljb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQljb25zdCBzdHJ1Y3QgZHNwX2NiZGF0YQorCQkJCSpwYXJncywgY29uc3Qgc3RydWN0IGRzcF9ub2RlYXR0cmluCisJCQkJKmF0dHJfaW4sCisJCQkJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKm5vZGVyZXMsCisJCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9hbGxvY19tc2dfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgYW5kIFByZXBhcmUgYSBidWZmZXIgd2hvc2UgZGVzY3JpcHRvciB3aWxsIGJlIHBhc3NlZCB0byBhCisgKiAgICAgIE5vZGUgd2l0aGluIGEgKGRzcF9tc2cpbWVzc2FnZQorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICBUaGUgbm9kZSBoYW5kbGUuCisgKiAgICAgIHVzaXplOiAgICAgICAgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGJlIGFsbG9jYXRlZC4KKyAqICAgICAgcGF0dHI6ICAgICAgICAgIFBvaW50ZXIgdG8gYSBkc3BfYnVmZmVyYXR0ciBzdHJ1Y3R1cmUuCisgKiAgICAgIHBidWZmZXI6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIG5vZGUgaGFuZGxlLgorICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2VudCBtZW1vcnkuCisgKiAgICAgIC1FUEVSTTogICAgICBHZW5lcmFsIEZhaWx1cmUuCisgKiAgICAgIC1FSU5WQUw6ICAgICAgSW52YWxpZCBTaXplLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBwYnVmZmVyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2FsbG9jX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICAgIHUzMiB1c2l6ZSwgc3RydWN0IGRzcF9idWZmZXJhdHRyCisJCQkJICAgICAqcGF0dHIsIHU4ICoqcGJ1ZmZlcik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jaGFuZ2VfcHJpb3JpdHkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIGFuIGFsbG9jYXRlZCBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBub2RlX2FsbG9jYXRlLgorICogICAgICBwcmlvOiAgICAgICAgICBOZXcgcHJpb3JpdHkgbGV2ZWwgdG8gc2V0IG5vZGUncyBwcmlvcml0eSB0by4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRURPTTogICAgICAgICBwcmlvIGlzIG91dCBvZiByYW5nZS4KKyAqICAgICAgLUVQRVJNOiBUaGUgc3BlY2lmaWVkIG5vZGUgaXMgbm90IGEgdGFzayBub2RlLgorICogICAgICAgICAgICAgIFVuYWJsZSB0byBjaGFuZ2Ugbm9kZSdzIHJ1bnRpbWUgcHJpb3JpdHkgbGV2ZWwuCisgKiAgICAgIC1FQkFEUjogICAgTm9kZSBpcyBub3QgaW4gdGhlIE5PREVfQUxMT0NBVEVELCBOT0RFX1BBVVNFRCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvciBOT0RFX1JVTk5JTkcgc3RhdGUuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICogICAgICAwICYmIChOb2RlJ3MgY3VycmVudCBwcmlvcml0eSA9PSBwcmlvKQorICovCitleHRlcm4gaW50IG5vZGVfY2hhbmdlX3ByaW9yaXR5KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHMzMiBwcmlvKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nsb3NlX29ycGhhbnMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgYWxsIG5vZGVzIHdob3NlIG93bmluZyBwcm9jZXNzb3IgaXMgYmVpbmcgZGVzdHJveWVkLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlX21ncjogICAgICAgTm9kZSBtYW5hZ2VyIG9iamVjdC4KKyAqICAgICAgcHJvYzogICAgICAgICAgSGFuZGxlIHRvIHByb2Nlc3NvciBvYmplY3QgYmVpbmcgZGVzdHJveWVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRVBFUk06ICAgICAgVW5hYmxlIHRvIGRlbGV0ZSBhbGwgbm9kZXMgYmVsb25naW5nIHRvIHByb2MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlX21nci4KKyAqICAgICAgcHJvYyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9jbG9zZV9vcnBoYW5zKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSAgICAgc3RydWN0IHByb2Nfb2JqZWN0ICpwcm9jKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nvbm5lY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb25uZWN0IHR3byBub2RlcyBvbiB0aGUgRFNQLCBvciBhIG5vZGUgb24gdGhlIERTUCB0byB0aGUgR1BQLiBJbiB0aGUKKyAqICAgICAgY2FzZSB0aGF0IHRoZSBjb25ubmVjdGlvbiBpcyBiZWluZyBtYWRlIGJldHdlZW4gYSBub2RlIG9uIHRoZSBEU1AgYW5kCisgKiAgICAgIHRoZSBHUFAsIG9uZSBvZiB0aGUgbm9kZSBoYW5kbGVzIChlaXRoZXIgbm9kZTEgb3Igbm9kZTIpIG11c3QgYmUKKyAqICAgICAgdGhlIGNvbnN0YW50IE5PREVfSEdQUE5PREUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgbm9kZTE6ICAgICAgICAgSGFuZGxlIG9mIGZpcnN0IG5vZGUgdG8gY29ubmVjdCB0byBzZWNvbmQgbm9kZS4gSWYKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBjb25uZWN0aW9uIGZyb20gdGhlIEdQUCB0byBub2RlMiwgbm9kZTEKKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgdGhlIGNvbnN0YW50IE5PREVfSEdQUE5PREUuIE90aGVyd2lzZSwgbm9kZTEKKyAqICAgICAgICAgICAgICAgICAgICAgIG11c3QgYmUgYSBub2RlIGhhbmRsZSByZXR1cm5lZCBmcm9tIGEgc3VjY2Vzc2Z1bCBjYWxsCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBOb2RlX0FsbG9jYXRlKCkuCisgKiAgICAgIG5vZGUyOiAgICAgICAgIEhhbmRsZSBvZiBzZWNvbmQgbm9kZS4gTXVzdCBiZSBlaXRoZXIgTk9ERV9IR1BQTk9ERQorICogICAgICAgICAgICAgICAgICAgICAgaWYgdGhpcyBpcyBhIGNvbm5lY3Rpb24gZnJvbSBEU1Agbm9kZSB0byBHUFAsIG9yIGEKKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gYSBzdWNjZXNzZnVsIGNhbGwgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGVfYWxsb2NhdGUoKS4KKyAqICAgICAgc3RyZWFtMTogICAgICAgIE91dHB1dCBzdHJlYW0gaW5kZXggb24gZmlyc3Qgbm9kZSwgdG8gYmUgY29ubmVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICB0byBzZWNvbmQgbm9kZSdzIGlucHV0IHN0cmVhbS4gVmFsdWUgbXVzdCByYW5nZSBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICAwIDw9IHN0cmVhbTEgPCBudW1iZXIgb2Ygb3V0cHV0IHN0cmVhbXMuCisgKiAgICAgIHN0cmVhbTI6ICAgICAgICBJbnB1dCBzdHJlYW0gaW5kZXggb24gc2Vjb25kIG5vZGUuIFZhbHVlIG11c3QgcmFuZ2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGZyb20gMCA8PSBzdHJlYW0yIDwgbnVtYmVyIG9mIGlucHV0IHN0cmVhbXMuCisgKiAgICAgIHBhdHRyczogICAgICAgICBTdHJlYW0gYXR0cmlidXRlcyAoTlVMTCA9PT4gdXNlIGRlZmF1bHRzKS4KKyAqICAgICAgY29ubl9wYXJhbTogICAgIEEgcG9pbnRlciB0byBhIGRzcF9jYmRhdGEgc3RydWN0dXJlIHRoYXQgZGVmaW5lcworICogICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbiBwYXJhbWV0ZXIgZm9yIGRldmljZSBub2RlcyB0byBwYXNzIHRvIERTUAorICogICAgICAgICAgICAgICAgICAgICAgc2lkZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoaXMgQVBJCisgKiAgICAgICAgICAgICAgICAgICAgICBiZWhhdmVzIGxpa2UgRFNQTm9kZV9Db25uZWN0LiBUaGlzIHBhcmFtZXRlciB3aWxsIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCB0aGUgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBpbgorICogICAgICAgICAgICAgICAgICAgICAgZHNwX2NiZGF0YSBzdHJ1Y3QuIFRoaXMgY2FuIGJlIGV4dGVuZGVkIGluIGZ1dHVyZSB0cAorICogICAgICAgICAgICAgICAgICAgICAgcGFzcyBiaW5hcnkgZGF0YS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgICAgIEludmFsaWQgbm9kZTEgb3Igbm9kZTIuCisgKiAgICAgIC1FTk9NRU06ICAgICAgICAgICAgSW5zdWZmaWNpZW50IGhvc3QgbWVtb3J5LgorICogICAgICAtRUlOVkFMOiAgICAgICAgICAgICBBIHN0cmVhbSBpbmRleCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4KKyAqICAgICAgLUVJU0NPTk46ICBBIGNvbm5lY3Rpb24gYWxyZWFkeSBleGlzdHMgZm9yIG9uZSBvZiB0aGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNlcyBzdHJlYW0xIG9yIHN0cmVhbTIuCisgKiAgICAgIC1FQkFEUjogICAgICAgIEVpdGhlciBub2RlMSBvciBub2RlMiBpcyBub3QgaW4gdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PREVfQUxMT0NBVEVEIHN0YXRlLgorICogICAgICAtRUNPTk5SRUZVU0VEOiBObyBtb3JlIGNvbm5lY3Rpb25zIGF2YWlsYWJsZS4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICAgICAgQXR0ZW1wdCB0byBtYWtlIGFuIGlsbGVnYWwgY29ubmVjdGlvbiAoZWcsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBub2RlIHRvIGRldmljZSBub2RlLCBvciBkZXZpY2Ugbm9kZSB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFApLCB0aGUgdHdvIG5vZGVzIGFyZSBvbiBkaWZmZXJlbnQgRFNQcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfY29ubmVjdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUxLAorCQkJICAgICAgIHUzMiBzdHJlYW0xLAorCQkJICAgICAgIHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTIsCisJCQkgICAgICAgdTMyIHN0cmVhbTIsCisJCQkgICAgICAgc3RydWN0IGRzcF9zdHJtYXR0ciAqcGF0dHJzLAorCQkJICAgICAgIHN0cnVjdCBkc3BfY2JkYXRhCisJCQkgICAgICAgKmNvbm5fcGFyYW0pOworCisvKgorICogID09PT09PT09IG5vZGVfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBjcmVhdGUKKyAqICAgICAgZnVuY3Rpb24uIElmIG5lY2Vzc2FyeSwgbG9hZCBjb2RlIHRoYXQgY29udGFpbnMgdGhlIG5vZGUncyBjcmVhdGUKKyAqICAgICAgZnVuY3Rpb24uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgICAgICBOb2RlIGhhbmRsZSByZXR1cm5lZCBmcm9tIG5vZGVfYWxsb2NhdGUoKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVNQSVBFOiAgICAgICAgQ3JlYXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogICAgICAtRUJBRFI6ICAgIE5vZGUgaXMgbm90IGluIHRoZSBOT0RFX0FMTE9DQVRFRCBzdGF0ZS4KKyAqICAgICAgLUVOT01FTTogICAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgb24gdGhlIERTUC4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBEU1AgcmVzcG9uZGVkLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEEgZmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGNyZWF0ZSBub2RlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9jcmVhdGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGVfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgTk9ERSBNYW5hZ2VyIG9iamVjdC4gVGhpcyBvYmplY3QgaGFuZGxlcyB0aGUgY3JlYXRpb24sCisgKiAgICAgIGRlbGV0aW9uLCBhbmQgZXhlY3V0aW9uIG9mIG5vZGVzIG9uIHRoZSBEU1AgdGFyZ2V0LiBUaGUgTk9ERSBNYW5hZ2VyCisgKiAgICAgIGFsc28gbWFpbnRhaW5zIGEgcGlwZSBtYXAgb2YgdXNlZCBhbmQgYXZhaWxhYmxlIG5vZGUgY29ubmVjdGlvbnMuCisgKiAgICAgIEVhY2ggREVWIG9iamVjdCBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBOT0RFIE1hbmFnZXIgb2JqZWN0LgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBub2RlX21hbjogICAgICAgTG9jYXRpb24gdG8gc3RvcmUgbm9kZSBtYW5hZ2VyIGhhbmRsZSBvbiBvdXRwdXQuCisgKiAgICAgIGhkZXZfb2JqOiAgICAgRGV2aWNlIGZvciB0aGlzIHByb2Nlc3Nvci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2VzczsKKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgcmVxdWVzdGVkIHJlc291cmNlcy4KKyAqICAgICAgLUVQRVJNOiAgICAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbm9kZV9tYW4gIT0gTlVMTC4KKyAqICAgICAgaGRldl9vYmogIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgVmFsaWRlICpub2RlX21hbi4KKyAqICAgICAgZXJyb3I6ICAgICAgICAgICpub2RlX21hbiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IG5vZGVfY3JlYXRlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKipub2RlX21hbiwKKwkJCQkgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9kZWxldGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBub2RlX2FsbG9jYXRlKCkuIElmIHRoZSBub2RlIHdhcworICogICAgICBjcmVhdGVkLCBkZWxldGUgdGhlIG5vZGUgb24gdGhlIERTUCBieSByZW1vdGVseSBjYWxsaW5nIHRoZSBub2RlJ3MKKyAqICAgICAgZGVsZXRlIGZ1bmN0aW9uLiBMb2FkcyB0aGUgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiBpZiBuZWNlc3NhcnkuCisgKiAgICAgIEdQUCBzaWRlIHJlc291cmNlcyBhcmUgZnJlZWQgYWZ0ZXIgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiByZXR1cm5zLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIG5vZGVyZXM6ICAgICAgICAgICAgICBOb2RlIHJlc291cmNlIGluZm8gaGFuZGxlIHJldHVybmVkIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwcl9jdHh0OiAgICAgICAgICAgICAgICBQb25pbnRlciB0byBwcm9jZXNzIGNvbnRleHQgZGF0YS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgQSBmYWlsdXJlIG9jY3VycmVkIGluIGRlbGV0aW5nIHRoZSBub2RlLgorICogICAgICAtRVNQSVBFOiAgICAgICAgRGVsZXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDA6ICAgICAgICAgICAgaG5vZGUgaXMgaW52YWxpZC4KKyAqLworZXh0ZXJuIGludCBub2RlX2RlbGV0ZShzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlcmVzLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9kZWxldGVfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIHRoZSBOT0RFIE1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGVfbWdyOiAgICAgICBOb2RlIG1hbmFnZXIgb2JqZWN0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBobm9kZV9tZ3IuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2RlbGV0ZV9tZ3Ioc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IpOworCisvKgorICogID09PT09PT09IG5vZGVfZW51bV9ub2RlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEVudW1lcmF0ZSB0aGUgbm9kZXMgY3VycmVudGx5IGFsbG9jYXRlZCBmb3IgdGhlIERTUC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZV9tZ3I6ICAgICAgIE5vZGUgbWFuYWdlciByZXR1cm5lZCBmcm9tIG5vZGVfY3JlYXRlX21ncigpLgorICogICAgICBub2RlX3RhYjogICAgICAgQXJyYXkgdG8gY29weSBub2RlIGhhbmRsZXMgaW50by4KKyAqICAgICAgbm9kZV90YWJfc2l6ZTogICBOdW1iZXIgb2YgaGFuZGxlcyB0aGF0IGNhbiBiZSB3cml0dGVuIHRvIG5vZGVfdGFiLgorICogICAgICBwdV9udW1fbm9kZXM6ICAgICBMb2NhdGlvbiB3aGVyZSBudW1iZXIgb2Ygbm9kZSBoYW5kbGVzIHdyaXR0ZW4gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIG5vZGVfdGFiIHdpbGwgYmUgd3JpdHRlbi4KKyAqICAgICAgcHVfYWxsb2NhdGVkOiAgICBMb2NhdGlvbiB0byB3cml0ZSB0b3RhbCBudW1iZXIgb2YgYWxsb2NhdGVkIG5vZGVzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUlOVkFMOiAgICAgIG5vZGVfdGFiIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCBub2RlIGhhbmRsZXMuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlX21nci4KKyAqICAgICAgbm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDAuCisgKiAgICAgIHB1X251bV9ub2RlcyAhPSBOVUxMLgorICogICAgICBwdV9hbGxvY2F0ZWQgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAtICgtRUlOVkFMICYmICpwdV9udW1fbm9kZXMgPT0gMCkKKyAqICAgICAgLSB8fCAoMCAmJiAqcHVfbnVtX25vZGVzIDw9IG5vZGVfdGFiX3NpemUpICAmJgorICogICAgICAgICgqcHVfYWxsb2NhdGVkID09ICpwdV9udW1fbm9kZXMpCisgKi8KK2V4dGVybiBpbnQgbm9kZV9lbnVtX25vZGVzKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSAgdm9pZCAqKm5vZGVfdGFiLAorCQkJCSAgdTMyIG5vZGVfdGFiX3NpemUsCisJCQkJICB1MzIgKnB1X251bV9ub2RlcywKKwkJCQkgIHUzMiAqcHVfYWxsb2NhdGVkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBOT0RFIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICogICAgICBBbnkgcmVzb3VyY2VzIGFjcXVpcmVkIGluIG5vZGVfaW5pdCh2b2lkKSB3aWxsIGJlIGZyZWVkIHdoZW4gbGFzdCBOT0RFCisgKiAgICAgIGNsaWVudCBjYWxscyBub2RlX2V4aXQodm9pZCkuCisgKi8KK2V4dGVybiB2b2lkIG5vZGVfZXhpdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2ZyZWVfbXNnX2J1ZiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgYSBtZXNzYWdlIGJ1ZmZlciBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2NfbXNnX2J1Zi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgVGhlIG5vZGUgaGFuZGxlLgorICogICAgICBwYnVmZmVyOiAgICAgICAgKEFkZHJlc3MpIEJ1ZmZlciBhbGxvY2F0ZWQgYnkgbm9kZV9hbGxvY19tc2dfYnVmLgorICogICAgICBwYXR0cjogICAgICAgICAgU2FtZSBidWZmZXIgYXR0cmlidXRlcyBwYXNzZWQgdG8gbm9kZV9hbGxvY19tc2dfYnVmLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIG5vZGUgaGFuZGxlLgorICogICAgICAtRVBFUk06ICAgICAgRmFpbHVyZSB0byBmcmVlIHRoZSBidWZmZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBidWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfZnJlZV9tc2dfYnVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgIHU4ICpwYnVmZmVyLAorCQkJCSAgICBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIKKwkJCQkgICAgKnBhdHRyKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX2dldF9hdHRyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29weSB0aGUgY3VycmVudCBhdHRyaWJ1dGVzIG9mIHRoZSBzcGVjaWZpZWQgbm9kZSBpbnRvIGEgZHNwX25vZGVhdHRyCisgKiAgICAgIHN0cnVjdHVyZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBvYmplY3QgYWxsb2NhdGVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwYXR0cjogICAgICAgICAgUG9pbnRlciB0byBkc3Bfbm9kZWF0dHIgc3RydWN0dXJlIHRvIGNvcHkgbm9kZSdzCisgKiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLgorICogICAgICBhdHRyX3NpemU6ICAgICAgU2l6ZSBvZiBwYXR0ci4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGF0dHIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICogICAgICAwOiAgICAgICAgKnBhdHRycyBjb250YWlucyB0aGUgbm9kZSdzIGN1cnJlbnQgYXR0cmlidXRlcy4KKyAqLworZXh0ZXJuIGludCBub2RlX2dldF9hdHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJc3RydWN0IGRzcF9ub2RlYXR0ciAqcGF0dHIsIHUzMiBhdHRyX3NpemUpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X21lc3NhZ2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSBhIG1lc3NhZ2UgZnJvbSBhIG5vZGUgb24gdGhlIERTUC4gVGhlIG5vZGUgbXVzdCBiZSBlaXRoZXIgYQorICogICAgICBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3IgWERBSVMgc29ja2V0IG5vZGUuCisgKiAgICAgIElmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYQorICogICAgICBtZXNzYWdlIGlzIGF2YWlsYWJsZSwgb3IgdGhlIG5vZGUncyB0aW1lb3V0IHZhbHVlIGlzIHJlYWNoZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBtZXNzYWdlOiAgICAgICBQb2ludGVyIHRvIGRzcF9tc2cgc3RydWN0dXJlIHRvIGNvcHkgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIGludG8uCisgKiAgICAgIHV0aW1lb3V0OiAgICAgICBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBtZXNzYWdlLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06IENhbm5vdCByZXRyaWV2ZSBtZXNzYWdlcyBmcm9tIHRoaXMgdHlwZSBvZiBub2RlLgorICogICAgICAgICAgICAgIEVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZXRyaWV2ZSBhIG1lc3NhZ2UuCisgKiAgICAgIC1FVElNRTogICBUaW1lb3V0IG9jY3VycmVkIGFuZCBubyBtZXNzYWdlIGlzIGF2YWlsYWJsZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgbm9kZV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgbWVzc2FnZSAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9nZXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgIHN0cnVjdCBkc3BfbXNnICptZXNzYWdlLCB1MzIgdXRpbWVvdXQpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X25sZHJfb2JqID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIE5sZHIgbWFuYWdlcgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlX21ncjogICAgICAgTm9kZSBNYW5hZ2VyCisgKiAgICAgIG5sZHJfb3ZseW9iajogICBQb2ludGVyIHRvIGEgTmxkciBtYW5hZ2VyIGhhbmRsZQorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9nZXRfbmxkcl9vYmooc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IsCisJCQkJICAgIHN0cnVjdCBubGRyX29iamVjdCAqKm5sZHJfb3ZseW9iaik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgTk9ERSBtb2R1bGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogICAgICBUUlVFIGlmIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCwgRkFMU0Ugb3RoZXJ3aXNlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBib29sIG5vZGVfaW5pdCh2b2lkKTsKKworLyoKKyAqICA9PT09PT09PSBub2RlX29uX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXRzIGNhbGxlZCB3aGVuIFJNU19FWElUIGlzIHJlY2VpdmVkIGZvciBhIG5vZGUuIFBST0MgbmVlZHMgdG8gcGFzcworICogICAgICB0aGlzIGZ1bmN0aW9uIGFzIGEgcGFyYW1ldGVyIHRvIG1zZ19jcmVhdGUoKS4gVGhpcyBmdW5jdGlvbiB0aGVuIGdldHMKKyAqICAgICAgY2FsbGVkIGJ5IHRoZSBCcmlkZ2UgZHJpdmVyIHdoZW4gYW4gZXhpdCBtZXNzYWdlIGZvciBhIG5vZGUgaXMgcmVjZWl2ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgSGFuZGxlIG9mIHRoZSBub2RlIHRoYXQgdGhlIGV4aXQgbWVzc2FnZSBpcyBmb3IuCisgKiAgICAgIG5vZGVfc3RhdHVzOiAgICBSZXR1cm4gc3RhdHVzIG9mIHRoZSBub2RlJ3MgZXhlY3V0ZSBwaGFzZS4KKyAqICBSZXR1cm5zOgorICogIEVuc3VyZXM6CisgKi8KK3ZvaWQgbm9kZV9vbl9leGl0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHMzMiBub2RlX3N0YXR1cyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9wYXVzZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN1c3BlbmQgZXhlY3V0aW9uIG9mIGEgbm9kZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgRFNQLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgbm9kZSBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVQRVJNOiBOb2RlIGlzIG5vdCBhIHRhc2sgb3Igc29ja2V0IG5vZGUuCisgKiAgICAgICAgICAgICAgRmFpbGVkIHRvIHBhdXNlIG5vZGUuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICAgICAgRFNQX0VXUk9OR1NUU0FURTogICBOb2RlIGlzIG5vdCBpbiBOT0RFX1JVTk5JTkcgc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3BhdXNlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisvKgorICogID09PT09PT09IG5vZGVfcHV0X21lc3NhZ2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZW5kIGEgbWVzc2FnZSB0byBhIG1lc3NhZ2Ugbm9kZSwgdGFzayBub2RlLCBvciBYREFJUyBzb2NrZXQgbm9kZS4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBtZXNzYWdlIHN0cmVhbSBjYW4gYWNjb21tb2RhdGUKKyAqICAgICAgdGhlIG1lc3NhZ2UsIG9yIGEgdGltZW91dCBvY2N1cnMuIFRoZSBtZXNzYWdlIHdpbGwgYmUgY29waWVkLCBzbyBNc2cKKyAqICAgICAgY2FuIGJlIHJlLXVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJuLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgYnkgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBwbXNnOiAgICAgICAgICAgICAgIExvY2F0aW9uIG9mIG1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgbm9kZS4KKyAqICAgICAgdXRpbWVvdXQ6ICAgICAgICAgICBUaW1lb3V0IGluIG1zZWNzIHRvIHdhaXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICAgICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVQRVJNOiBNZXNzYWdlcyBjYW4ndCBiZSBzZW50IHRvIHRoaXMgdHlwZSBvZiBub2RlLgorICogICAgICAgICAgICAgIFVuYWJsZSB0byBzZW5kIG1lc3NhZ2UuCisgKiAgICAgIC1FVElNRTogICAgICAgVGltZW91dCBvY2N1cnJlZCBiZWZvcmUgbWVzc2FnZSBjb3VsZCBiZSBzZXQuCisgKiAgICAgIC1FQkFEUjogICAgTm9kZSBpcyBpbiBpbnZhbGlkIHN0YXRlIGZvciBzZW5kaW5nIG1lc3NhZ2VzLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBwbXNnICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3B1dF9tZXNzYWdlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJICAgY29uc3Qgc3RydWN0IGRzcF9tc2cgKnBtc2csIHUzMiB1dGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvbiBzcGVjaWZpYyBldmVudHMgZm9yIHRoaXMgbm9kZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBoYW5kbGUgcmV0dXJuZWQgYnkgbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBldmVudF9tYXNrOiAgICAgTWFzayBvZiB0eXBlcyBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQuCisgKiAgICAgIG5vdGlmeV90eXBlOiAgICBUeXBlIG9mIG5vdGlmaWNhdGlvbiB0byBiZSBzZW50LgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIHRvIGJlIHVzZWQgZm9yIG5vdGlmaWNhdGlvbi4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBobm9kZS4KKyAqICAgICAgLUVOT01FTTogICAgSW5zdWZmaWNpZW50IG1lbW9yeSBvbiBHUFAuCisgKiAgICAgIC1FSU5WQUw6ICAgICBldmVudF9tYXNrIGlzIGludmFsaWQuCisgKiAgICAgIC1FTk9TWVM6ICAgTm90aWZpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGJ5IG5vdGlmeV90eXBlIGlzIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBobm90aWZpY2F0aW9uICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX3JlZ2lzdGVyX25vdGlmeShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICAgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCSAgICAgICAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9ydW4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdGFydCBleGVjdXRpb24gb2YgYSBub2RlJ3MgZXhlY3V0ZSBwaGFzZSwgb3IgcmVzdW1lIGV4ZWN1dGlvbiBvZgorICogICAgICBhIG5vZGUgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQgKHZpYSBub2RlX3BhdXNlKCkpIG9uIHRoZSBEU1AuIExvYWQKKyAqICAgICAgdGhlIG5vZGUncyBleGVjdXRlIGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgICAgIE5vZGUgb2JqZWN0IHJlcHJlc2VudGluZyBhIG5vZGUgY3VycmVudGx5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyBvbiB0aGUgRFNQLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgaG5vZGUuCisgKiAgICAgIC1FUEVSTTogaG5vZGUgZG9lc24ndCByZXByZXNlbnQgYSBtZXNzYWdlLCB0YXNrIG9yIGRhaXMgc29ja2V0IG5vZGUuCisgKiAgICAgICAgICAgICAgVW5hYmxlIHRvIHN0YXJ0IG9yIHJlc3VtZSBleGVjdXRpb24uCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZC4KKyAqICAgICAgRFNQX0VXUk9OR1NUU0FURTogICBOb2RlIGlzIG5vdCBpbiBOT0RFX1BBVVNFRCBvciBOT0RFX0NSRUFURUQgc3RhdGUuCisgKiAgICAgIC1FU1BJUEU6ICAgICAgICBFeGVjdXRlIGZ1bmN0aW9uIG5vdCBmb3VuZCBpbiB0aGUgQ09GRiBmaWxlLgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgbm9kZV9ydW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV90ZXJtaW5hdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTaWduYWwgYSBub2RlIHJ1bm5pbmcgb24gdGhlIERTUCB0aGF0IGl0IHNob3VsZCBleGl0IGl0cyBleGVjdXRlCisgKiAgICAgIHBoYXNlIGZ1bmN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICAgICAgTm9kZSBvYmplY3QgcmVwcmVzZW50aW5nIGEgbm9kZSBjdXJyZW50bHkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nIG9uIHRoZSBEU1AuCisgKiAgICAgIHBzdGF0dXM6ICAgICAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgZXhlY3V0ZS1waGFzZSBmdW5jdGlvbiByZXR1cm4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgdGhlIERTUCByZXNwb25kZWQuCisgKiAgICAgIC1FUEVSTTogVHlwZSBvZiBub2RlIHNwZWNpZmllZCBjYW5ub3QgYmUgdGVybWluYXRlZC4KKyAqICAgICAgICAgICAgICBVbmFibGUgdG8gdGVybWluYXRlIHRoZSBub2RlLgorICogICAgICAtRUJBRFI6ICAgIE9wZXJhdGlvbiBub3QgdmFsaWQgZm9yIHRoZSBjdXJyZW50IG5vZGUgc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG5vZGVfaW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBzdGF0dXMgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfdGVybWluYXRlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJIGludCAqcHN0YXR1cyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdXVpZF9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZldGNoIE5vZGUgcHJvcGVydGllcyBnaXZlbiB0aGUgVVVJRAorICogIFBhcmFtZXRlcnM6CisgKgorICovCitleHRlcm4gaW50IG5vZGVfZ2V0X3V1aWRfcHJvcHModm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQkgICAgICBzdHJ1Y3QgZHNwX25kYnByb3BzCisJCQkJICAgICAgKm5vZGVfcHJvcHMpOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoqCisgKiBub2RlX2ZpbmRfYWRkcigpIC0gRmluZCB0aGUgY2xvc2VzdCBzeW1ib2wgdG8gdGhlIGdpdmVuIGFkZHJlc3MuCisgKgorICogQG5vZGVfbWdyOgkJTm9kZSBtYW5hZ2VyIGhhbmRsZQorICogQHN5bV9hZGRyOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBjbG9zZXN0IHN5bWJvbAorICogQG9mZnNldF9yYW5nZToJCW9mZnNldCByYW5nZSB0byBsb29rIGZvIHRoZSBjbG9zZXN0IHN5bWJvbAorICogQHN5bV9hZGRyX291dHB1dDoJU3ltYm9sIE91dHB1dCBhZGRyZXNzCisgKiBAc3ltX25hbWU6CQlTdHJpbmcgd2l0aCB0aGUgc3ltYm9sIG5hbWUgb2YgdGhlIGNsb3Nlc3Qgc3ltYm9sCisgKgorICogCVRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGNsb3Nlc3Qgc3ltYm9sIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGEgTU1VCisgKglGYXVsdCBvY2N1cnJlZCBvbiB0aGUgRFNQIHNpZGUuCisgKi8KK2ludCBub2RlX2ZpbmRfYWRkcihzdHJ1Y3Qgbm9kZV9tZ3IgKm5vZGVfbWdyLCB1MzIgc3ltX2FkZHIsCisJCQkJdTMyIG9mZnNldF9yYW5nZSwgdm9pZCAqc3ltX2FkZHJfb3V0cHV0LAorCQkJCWNoYXIgKnN5bV9uYW1lKTsKKworZW51bSBub2RlX3N0YXRlIG5vZGVfZ2V0X3N0YXRlKHZvaWQgKmhub2RlKTsKKyNlbmRpZgorCisjZW5kaWYgLyogTk9ERV8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5NjIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ub2RlZGVmcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBub2RlZGVmcy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIEdsb2JhbCBOT0RFIGNvbnN0YW50cyBhbmQgdHlwZXMsIHNoYXJlZCBieSBQUk9DRVNTT1IsIE5PREUsIGFuZCBESVNQLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgTk9ERURFRlNfCisjZGVmaW5lIE5PREVERUZTXworCisjZGVmaW5lIE5PREVfU1VTUEVOREVEUFJJIC0xCisKKy8qIE5PREUgT2JqZWN0czogKi8KK3N0cnVjdCBub2RlX21ncjsKK3N0cnVjdCBub2RlX29iamVjdDsKKworI2VuZGlmIC8qIE5PREVERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvbm9kZXByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmIwMjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL25vZGVwcml2LmgKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBub2RlcHJpdi5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByaXZhdGUgbm9kZSBoZWFkZXIgc2hhcmVkIGJ5IE5PREUgYW5kIERJU1AuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBOT0RFUFJJVl8KKyNkZWZpbmUgTk9ERVBSSVZfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbmxkcmRlZnMuaD4KKworLyogRFNQIGFkZHJlc3Mgb2Ygbm9kZSBlbnZpcm9ubWVudCBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgdTMyIG5vZGVlbnY7CisKKy8qCisgKiAgTm9kZSBjcmVhdGUgc3RydWN0dXJlcworICovCisKKy8qIE1lc3NhZ2Ugbm9kZSAqLworc3RydWN0IG5vZGVfbXNnYXJncyB7CisJdTMyIG1heF9tc2dzOwkJLyogTWF4ICMgb2Ygc2ltdWx0YW5lb3VzIG1lc3NhZ2VzIGZvciBub2RlICovCisJdTMyIHNlZ19pZDsJCS8qIFNlZ21lbnQgZm9yIGFsbG9jYXRpbmcgbWVzc2FnZSBidWZmZXJzICovCisJdTMyIG5vdGlmeV90eXBlOwkvKiBOb3RpZnkgdHlwZSAoU0VNX3Bvc3QsIFNXSV9wb3N0LCBldGMuKSAqLworCXUzMiBhcmdfbGVuZ3RoOwkJLyogTGVuZ3RoIGluIDMyLWJpdCB3b3JkcyBvZiBhcmcgZGF0YSBibG9jayAqLworCXU4ICpwZGF0YTsJCS8qIEFyZ3VtZW50IGRhdGEgZm9yIG5vZGUgKi8KK307CisKK3N0cnVjdCBub2RlX3N0cm1kZWYgeworCXUzMiBidWZfc2l6ZTsJCS8qIFNpemUgb2YgYnVmZmVycyBmb3IgU0lPIHN0cmVhbSAqLworCXUzMiBudW1fYnVmczsJCS8qIG1heCAjIG9mIGJ1ZmZlcnMgaW4gU0lPIHN0cmVhbSBhdCBvbmNlICovCisJdTMyIHNlZ19pZDsJCS8qIE1lbW9yeSBzZWdtZW50IGlkIHRvIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KKwl1MzIgdXRpbWVvdXQ7CQkvKiBUaW1lb3V0IGZvciBibG9ja2luZyBTSU8gY2FsbHMgKi8KKwl1MzIgYnVmX2FsaWdubWVudDsJLyogQnVmZmVyIGFsaWdubWVudCAqLworCWNoYXIgKnN6X2RldmljZTsJLyogRGV2aWNlIG5hbWUgZm9yIHN0cmVhbSAqLworfTsKKworLyogVGFzayBub2RlICovCitzdHJ1Y3Qgbm9kZV90YXNrYXJncyB7CisJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCXMzMiBwcmlvOworCXUzMiBzdGFja19zaXplOworCXUzMiBzeXNfc3RhY2tfc2l6ZTsKKwl1MzIgc3RhY2tfc2VnOworCXUzMiB1ZHNwX2hlYXBfcmVzX2FkZHI7CS8qIERTUCB2aXJ0dWFsIGhlYXAgYWRkcmVzcyAqLworCXUzMiB1ZHNwX2hlYXBfYWRkcjsJLyogRFNQIHZpcnR1YWwgaGVhcCBhZGRyZXNzICovCisJdTMyIGhlYXBfc2l6ZTsJCS8qIEhlYXAgc2l6ZSAqLworCXUzMiB1Z3BwX2hlYXBfYWRkcjsJLyogR1BQIHZpcnR1YWwgaGVhcCBhZGRyZXNzICovCisJdTMyIHByb2ZpbGVfaWQ7CQkvKiBQcm9maWxlIElEICovCisJdTMyIG51bV9pbnB1dHM7CisJdTMyIG51bV9vdXRwdXRzOworCXUzMiB1bF9kYWlzX2FyZzsJLyogQWRkcmVzcyBvZiBpQWxnIG9iamVjdCAqLworCXN0cnVjdCBub2RlX3N0cm1kZWYgKnN0cm1faW5fZGVmOworCXN0cnVjdCBub2RlX3N0cm1kZWYgKnN0cm1fb3V0X2RlZjsKK307CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGVhcmdzID09PT09PT09CisgKi8KK3N0cnVjdCBub2RlX2NyZWF0ZWFyZ3MgeworCXVuaW9uIHsKKwkJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCQlzdHJ1Y3Qgbm9kZV90YXNrYXJncyB0YXNrX2FyZ19vYmo7CisJfSBhc2E7Cit9OworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X2NoYW5uZWxfaWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIGNoYW5uZWwgaW5kZXggcmVzZXJ2ZWQgZm9yIGEgc3RyZWFtIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUKKyAqICAgICAgaG9zdCBhbmQgYSBub2RlLiBUaGlzIGluZGV4IGlzIHJlc2VydmVkIHdoZW4gbm9kZV9jb25uZWN0KCkgaXMgY2FsbGVkCisgKiAgICAgIHRvIGNvbm5lY3QgdGhlIG5vZGUgd2l0aCB0aGUgaG9zdC4gVGhpcyBpbmRleCBzaG91bGQgYmUgcGFzc2VkIHRvCisgKiAgICAgIHRoZSBDSE5MX09wZW4gZnVuY3Rpb24gd2hlbiB0aGUgc3RyZWFtIGlzIGFjdHVhbGx5IG9wZW5lZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBobm9kZTogICAgICAgICAgTm9kZSBvYmplY3QgYWxsb2NhdGVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBkaXI6ICAgICAgICAgICBJbnB1dCAoRFNQX1RPTk9ERSkgb3Igb3V0cHV0IChEU1BfRlJPTU5PREUpLgorICogICAgICBpbmRleDogICAgICAgICBTdHJlYW0gaW5kZXguCisgKiAgICAgIGNoYW5faWQ6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBjaGFubmVsIGluZGV4LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06ICBOb3QgYSB0YXNrIG9yIERBSVMgc29ja2V0IG5vZGUuCisgKiAgICAgIC1FSU5WQUw6ICAgICBUaGUgbm9kZSdzIHN0cmVhbSBjb3JyZXNwb25kaW5nIHRvIGluZGV4IGFuZCBkaXIKKyAqICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhIHN0cmVhbSB0byBvciBmcm9tIHRoZSBob3N0LgorICogIFJlcXVpcmVzOgorICogICAgICBub2RlX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBWYWxpZCBkaXIuCisgKiAgICAgIGNoYW5faWQgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IG5vZGVfZ2V0X2NoYW5uZWxfaWQoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwKKwkJCQkgICAgICB1MzIgZGlyLCB1MzIgaW5kZXgsIHUzMiAqY2hhbl9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfc3RybV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIFNUUk0gbWFuYWdlciBmb3IgYSBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgICAgICBOb2RlIGFsbG9jYXRlZCB3aXRoIG5vZGVfYWxsb2NhdGUoKS4KKyAqICAgICAgc3RybV9tYW46ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIFNUUk0gbWFuYWdlciBvbiBvdXRwdXQuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgaG5vZGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1fbWFuICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBub2RlX2dldF9zdHJtX21ncihzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICBzdHJ1Y3Qgc3RybV9tZ3IgKipzdHJtX21hbik7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdGltZW91dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgdGltZW91dCB2YWx1ZSBvZiBhIG5vZGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlJ3MgdGltZW91dCB2YWx1ZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaG5vZGUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIHUzMiBub2RlX2dldF90aW1lb3V0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X3R5cGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgdGhlIHR5cGUgKGRldmljZSwgbWVzc2FnZSwgdGFzaywgb3IgWERBSVMgc29ja2V0KSBvZiBhIG5vZGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlIHR5cGU6ICBOT0RFX0RFVklDRSwgTk9ERV9UQVNLLCBOT0RFX1hEQUlTLCBvciBOT0RFX0dQUC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgaG5vZGUuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGVudW0gbm9kZV90eXBlIG5vZGVfZ2V0X3R5cGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSk7CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBub2RlIGluZm9ybWF0aW9uIHdpdGhvdXQgaG9sZGluZyBzZW1hcGhvcmUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgTm9kZSBhbGxvY2F0ZWQgd2l0aCBub2RlX2FsbG9jYXRlKCksIG9yIERTUF9IR1BQTk9ERS4KKyAqICBSZXR1cm5zOgorICogICAgICBOb2RlIGluZm86ICBwcmlvcml0eSwgZGV2aWNlIG93bmVyLCBuby4gb2Ygc3RyZWFtcywgZXhlY3V0aW9uIHN0YXRlCisgKiAgICAgICAgICAgICAgICAgIE5EQiBwcm9wZXJ0aWVzLgorICogIFJlcXVpcmVzOgorICogICAgICBWYWxpZCBobm9kZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBnZXRfbm9kZV9pbmZvKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgIHN0cnVjdCBkc3Bfbm9kZWluZm8gKm5vZGVfaW5mbyk7CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbG9hZF90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IHRoZSBsb2FkIHR5cGUgKGR5bmFtaWMsIG92ZXJsYXksIHN0YXRpYykgb2YgYSBub2RlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhub2RlOiAgICAgIE5vZGUgYWxsb2NhdGVkIHdpdGggbm9kZV9hbGxvY2F0ZSgpLCBvciBEU1BfSEdQUE5PREUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgTm9kZSB0eXBlOiAgTkxEUl9EWU5BTUlDTE9BRCwgTkxEUl9PVkxZTE9BRCwgTkxEUl9TVEFUSUNMT0FECisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFZhbGlkIGhub2RlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBlbnVtIG5sZHJfbG9hZHR5cGUgbm9kZV9nZXRfbG9hZF90eXBlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpOworCisjZW5kaWYgLyogTk9ERVBSSVZfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvbnRmeS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL250ZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM4ODE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL250ZnkuaApAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIG50ZnkuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNYW5hZ2UgbGlzdHMgb2Ygbm90aWZpY2F0aW9uIGV2ZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE5URllfCisjZGVmaW5lIE5URllfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKioKKyAqIG50Znlfb2JqZWN0IC0gaGVhZCBzdHJ1Y3R1cmUgdG8gbm9maWZ5IGRzcGJyaWRnZSBldmVudHMKKyAqIEBoZWFkOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCisgKiBAbnRmeV9sb2NrOglsb2NrIGZvciBsaXN0IGFjY2Vzcy4KKyAqCisgKi8KK3N0cnVjdCBudGZ5X29iamVjdCB7CisJc3RydWN0IHJhd19ub3RpZmllcl9oZWFkIGhlYWQ7LyogTGlzdCBvZiBub3RpZmllciBvYmplY3RzICovCisJc3BpbmxvY2tfdCBudGZ5X2xvY2s7CS8qIEZvciBjcml0aWNhbCBzZWN0aW9ucyAqLworfTsKKworLyoqCisgKiBudGZ5X2V2ZW50IC0gc3RydWN0dXJlIHN0b3JlIHNwZWNpZnkgZXZlbnQgdG8gYmUgbm90aWZpZWQKKyAqIEBub3RpX2Jsb2NrOglMaXN0IG9mIG5vdGlmeSBvYmplY3RzCisgKiBAZXZlbnQ6CWV2ZW50IHRoYXQgaXQgcmVzcG9uZAorICogQHR5cGU6IAlldmVudCB0eXBlIChvbmx5IERTUF9TSUdOQUxFVkVOVCBzdXBwb3J0ZWQpCisgKiBAc3luY19vYmo6CXN5bmNfZXZlbnQgdXNlZCB0byBzZXQgdGhlIGV2ZW50CisgKgorICovCitzdHJ1Y3QgbnRmeV9ldmVudCB7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5vdGlfYmxvY2s7CisJdTMyIGV2ZW50OwkvKiBFdmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQgKi8KKwl1MzIgdHlwZTsJLyogVHlwZSBvZiBub3RpZmljYXRpb24gdG8gYmUgc2VudCAqLworCXN0cnVjdCBzeW5jX29iamVjdCBzeW5jX29iajsKK307CisKKworLyoqCisgKiBkc3Bfbm90aWZpZXJfZXZlbnQoKSAtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIG5vZml0eSBldmVudHMKKyAqIEB0aGlzOgkJcG9pbnRlciB0byBpdHNlbGYgc3RydWN0IG5vdGlmaWVyX2Jsb2NrCisgKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIG5vdGlmaWVkLgorICogQGRhdGE6CQlDdXJyZW50bHkgbm90IHVzZWQuCisgKgorICovCitpbnQgZHNwX25vdGlmaWVyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwKKwkJCSAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIG50ZnlfaW5pdCgpIC0gU2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBudGZ5X29iamVjdCBzdHJ1Y3R1cmUuCisgKiBAbm86CQlwb2ludGVyIHRvIG50Znlfb2JqZWN0IHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIG50Znlfb2JqZWN0IGluIG9yZGVyIGl0CisgKiBjYW4gYmUgdXNlZCBieSB0aGUgb3RoZXIgbnRmeSBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIG50ZnlfaW5pdChzdHJ1Y3QgbnRmeV9vYmplY3QgKm5vKQoreworCXNwaW5fbG9ja19pbml0KCZuby0+bnRmeV9sb2NrKTsKKwlSQVdfSU5JVF9OT1RJRklFUl9IRUFEKCZuby0+aGVhZCk7Cit9CisKKy8qKgorICogbnRmeV9kZWxldGUoKSAtIGRlbGV0ZSBsaXN0IG9mIG5vZnkgZXZlbnRzIHJlZ2lzdGVyZWQuCisgKiBAbnRmeV9vYmo6CVBvaW50ZXIgdG8gdGhlIG50Znkgb2JqZWN0IHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVtb3ZlIGFsbCB0aGUgbm90aWZ5IGV2ZW50cyAgcmVnaXN0ZXJlZC4KKyAqIHVucmVnaXN0ZXIgZnVuY3Rpb24gaXMgbm90IG5lZWRlZCBpbiB0aGlzIGZ1bmN0aW9uLCB0byB1bnJlZ2lzdGVyCisgKiBhIG50ZnlfZXZlbnQgcGxlYXNlIGxvb2sgYXQgbnRmeV9yZWdpc3RlciBmdW5jdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBudGZ5X2RlbGV0ZShzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqKQoreworCXN0cnVjdCBudGZ5X2V2ZW50ICpuZTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iOworCisJc3Bpbl9sb2NrX2JoKCZudGZ5X29iai0+bnRmeV9sb2NrKTsKKwluYiA9IG50Znlfb2JqLT5oZWFkLmhlYWQ7CisJd2hpbGUgKG5iKSB7CisJCW5lID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbnRmeV9ldmVudCwgbm90aV9ibG9jayk7CisJCW5iID0gbmItPm5leHQ7CisJCWtmcmVlKG5lKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworfQorCisvKioKKyAqIG50Znlfbm90aWZ5KCkgLSBub2ZpdHkgYWxsIGV2ZW50IHJlZ2lzdGVyIGZvciBhbiBzcGVjaWZpYyBldmVudC4KKyAqIEBudGZ5X29iajoJUG9pbnRlciB0byB0aGUgbnRmeV9vYmplY3Qgc3RydWN0dXJlLgorICogQGV2ZW50OglldmVudCB0byBiZSBub3RpZmllZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyBhbGwgdGhlIG50ZnkgZXZlbnRzIHJlZ2lzdGVycyBhbmQKKyAqIHNldCB0aGUgZXZlbnQgd2l0aCBtYWNoIHdpdGggQGV2ZW50LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbnRmeV9ub3RpZnkoc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iaiwgdTMyIGV2ZW50KQoreworCXNwaW5fbG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7CisJcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oJm50Znlfb2JqLT5oZWFkLCBldmVudCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworfQorCisKKworLyoqCisgKiBudGZ5X2luaXQoKSAtIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIG50ZnlfZXZlbnQgc3RydWN0dXJlLgorICogQGV2ZW50OglldmVudCB0aGF0IHRoZSBudGZ5IGV2ZW50IHdpbGwgcmVzcG9uZAorICogQHR5cGUJCWV2ZW50IHR5cGUgKG9ubHkgRFNQX1NJR05BTEVWRU5UIHN1cHBvcnRlZCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIG50ZnlfZXZlbnQgZWxlbWVudCBhbmQgc2V0cyB0aGUgZXZlbnQgaXQgd2lsbAorICogcmVzcG9uZCB0aGUgbnRmeV9ldmVudCBpbiBvcmRlciBpdCBjYW4gYmUgdXNlZCBieSB0aGUgb3RoZXIgbnRmeSBmdW5jdGlvbnMuCisgKiBJbiBjYXNlIG9mIHN1Y2Nlc3MgaXQgd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBudGZ5X2V2ZW50IHN0cnVjdAorICogY3JlYXRlZC4gT3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIE5VTEw7CisgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbnRmeV9ldmVudCAqbnRmeV9ldmVudF9jcmVhdGUodTMyIGV2ZW50LCB1MzIgdHlwZSkKK3sKKwlzdHJ1Y3QgbnRmeV9ldmVudCAqbmU7CisJbmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbnRmeV9ldmVudCksIEdGUF9LRVJORUwpOworCWlmIChuZSkgeworCQlzeW5jX2luaXRfZXZlbnQoJm5lLT5zeW5jX29iaik7CisJCW5lLT5ub3RpX2Jsb2NrLm5vdGlmaWVyX2NhbGwgPSBkc3Bfbm90aWZpZXJfZXZlbnQ7CisJCW5lLT5ldmVudCA9IGV2ZW50OworCQluZS0+dHlwZSA9IHR5cGU7CisJfQorCXJldHVybiBuZTsKK30KKworLyoqCisgKiBudGZ5X3JlZ2lzdGVyKCkgLSByZWdpc3RlciBuZXcgbnRmeV9ldmVudCBpbnRvIGEgZ2l2ZW4gbnRmeV9vYmplY3QKKyAqIEBudGZ5X29iajoJUG9pbnRlciB0byB0aGUgbnRmeV9vYmplY3Qgc3RydWN0dXJlLgorICogQG5vdGk6CQlQb2ludGVyIHRvIHRoZSBoYW5kbGUgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIHVzZXIgc3BhY2UuCisgKiBAZXZlbnQJZXZlbnQgdGhhdCB0aGUgbnRmeSBldmVudCB3aWxsIHJlc3BvbmQKKyAqIEB0eXBlCQlldmVudCB0eXBlIChvbmx5IERTUF9TSUdOQUxFVkVOVCBzdXBwb3J0ZWQpCisgKgorICogVGhpcyBmdW5jdGlvbiByZWdpc3RlciBhIG5ldyBudGZ5X2V2ZW50IGludG8gdGhlIG50Znlfb2JqZWN0IGxpc3QsCisgKiB3aGljaCB3aWxsIHJlc3BvbmQgdG8gdGhlIEBldmVudCBwYXNzZWQuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAgaW4gY2FzZSBvZiBlcnJvci4KKyAqIC1FRkFVTFQgaW4gY2FzZSBvZiBiYWQgcG9pbnRlcnMgYW5kCisgKiBEU1BfRU1lbW9yeSBpbiBjYXNlIG9mIG5vIG1lbW9yeSB0byBjcmVhdGUgbnRmeV9ldmVudC4KKyAqLworc3RhdGljICBpbmxpbmUgaW50IG50ZnlfcmVnaXN0ZXIoc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iaiwKKwkJCSBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqbm90aSwKKwkJCSB1MzIgZXZlbnQsIHUzMiB0eXBlKQoreworCXN0cnVjdCBudGZ5X2V2ZW50ICpuZTsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmICghbm90aSB8fCAhbnRmeV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaWYgKCFldmVudCkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwluZSA9IG50ZnlfZXZlbnRfY3JlYXRlKGV2ZW50LCB0eXBlKTsKKwlpZiAoIW5lKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCW5vdGktPmhhbmRsZSA9ICZuZS0+c3luY19vYmo7CisKKwlzcGluX2xvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworCXJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbnRmeV9vYmotPmhlYWQsICZuZS0+bm90aV9ibG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBudGZ5X3VucmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgYSBudGZ5X2V2ZW50IGZyb20gYSBnaXZlbiBudGZ5X29iamVjdAorICogQG50Znlfb2JqOglQb2ludGVyIHRvIHRoZSBudGZ5X29iamVjdCBzdHJ1Y3R1cmUuCisgKiBAbm90aToJCVBvaW50ZXIgdG8gdGhlIGV2ZW50IHRoYXQgd2lsbCBiZSByZW1vdmVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlciBhIG50ZnlfZXZlbnQgZnJvbSB0aGUgbnRmeV9vYmplY3QgbGlzdCwKKyAqIEBub3RpIGNvbnRhaW5zIHRoZSBldmVudCB3aGljaCBpcyB3YW50ZWQgdG8gYmUgcmVtb3ZlZC4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBpbiBjYXNlIG9mIGVycm9yLgorICogLUVGQVVMVCBpbiBjYXNlIG9mIGJhZCBwb2ludGVycyBhbmQKKyAqIERTUF9FTWVtb3J5IGluIGNhc2Ugb2Ygbm8gbWVtb3J5IHRvIGNyZWF0ZSBudGZ5X2V2ZW50LgorICovCitzdGF0aWMgIGlubGluZSBpbnQgbnRmeV91bnJlZ2lzdGVyKHN0cnVjdCBudGZ5X29iamVjdCAqbnRmeV9vYmosCisJCQkgc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKm5vdGkpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG50ZnlfZXZlbnQgKm5lOworCisJaWYgKCFub3RpIHx8ICFudGZ5X29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCW5lID0gY29udGFpbmVyX29mKChzdHJ1Y3Qgc3luY19vYmplY3QgKilub3RpLCBzdHJ1Y3QgbnRmeV9ldmVudCwKKwkJCQkJCQkJc3luY19vYmopOworCXNwaW5fbG9ja19iaCgmbnRmeV9vYmotPm50ZnlfbG9jayk7CisJcmF3X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm50Znlfb2JqLT5oZWFkLAorCQkJCQkJJm5lLT5ub3RpX2Jsb2NrKTsKKwlrZnJlZShuZSk7CisJc3Bpbl91bmxvY2tfYmgoJm50Znlfb2JqLT5udGZ5X2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmCQkJCS8qIE5URllfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvYy5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTA5ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2MuaApAQCAtMCwwICsxLDYyMSBAQAorLyoKKyAqIHByb2MuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGlzIHRoZSBEU1AgQVBJIFJNIG1vZHVsZSBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBQUk9DXworI2RlZmluZSBQUk9DXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZ2RlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworZXh0ZXJuIGNoYXIgKml2YV9pbWc7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdHRhY2ggPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIERTUCBwcm9jZXNzb3IsIGFuZCByZXR1cm4KKyAqICAgICAgYSBoYW5kbGUgdG8gdGhlIHByb2Nlc3NvciBvYmplY3QuIFRoZSBQUk9DIE9iamVjdCBnZXRzIGNyZWF0ZWQKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwcm9jZXNzb3JfaWQgIDoJICAgVGhlIHByb2Nlc3NvciBpbmRleCAoemVyby1iYXNlZCkuCisgKiAgICAgIGhtZ3Jfb2JqICA6CSAgIEhhbmRsZSB0byB0aGUgTWFuYWdlciBPYmplY3QKKyAqICAgICAgYXR0cl9pbiAgICAgOgkgICBQdHIgdG8gdGhlIGRzcF9wcm9jZXNzb3JhdHRyaW4gc3RydWN0dXJlLgorICoJCQkgICAgICBBIE5VTEwgdmFsdWUgbWVhbnMgdXNlIGRlZmF1bHQgdmFsdWVzLgorICogICAgICBwaF9wcm9jZXNzb3IgOgkgICBQdHIgdG8gbG9jYXRpb24gdG8gc3RvcmUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6CSAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FUEVSTSAgIDoJICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRUZBVUxUIDoJICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAwOiAgIFN1Y2Nlc3M7IFByb2Nlc3NvciBhbHJlYWR5IGF0dGFjaGVkLgorICogIFJlcXVpcmVzOgorICogICAgICBwaF9wcm9jZXNzb3IgIT0gTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICAtRVBFUk0sIGFuZCAqcGhfcHJvY2Vzc29yID09IE5VTEwsIE9SCisgKiAgICAgIFN1Y2Nlc3MgYW5kICpwaF9wcm9jZXNzb3IgaXMgYSBWYWxpZCBQcm9jZXNzb3IgaGFuZGxlIE9SCisgKiAgICAgIDAgYW5kICpwaF9wcm9jZXNzb3IgaXMgYSBWYWxpZCBQcm9jZXNzb3IuCisgKiAgRGV0YWlsczoKKyAqICAgICAgV2hlbiBhdHRyX2luIGlzIE5VTEwsIHRoZSBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgaXMgMTAgc2Vjb25kcy4KKyAqLworZXh0ZXJuIGludCBwcm9jX2F0dGFjaCh1MzIgcHJvY2Vzc29yX2lkLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4KKwkJCSAgICAgICphdHRyX2luLCB2b2lkICoqcGhfcHJvY2Vzc29yLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdXRvX3N0YXJ0ID09PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEEgUGFydGljdWxhciBkZXZpY2UgZ2V0cyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCBpbWFnZQorICogICAgICBpZiB0aGUgQXV0b1N0YXJ0IGZsYWcgaXMgc2V0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqICA6ICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UKKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgT24gU3VjY2Vzc2Z1bCBMb2FkaW5nCisgKiAgICAgIC1FTk9FTlQgICA6ICAgTm8gRFNQIGV4ZWMgZmlsZSBmb3VuZC4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgRmFpbHVyZQorICogIFJlcXVpcmVzOgorICogICAgICBoZGV2X29iaiAhPSBOVUxMLgorICogICAgICBkZXZfbm9kZV9vYmogIT0gTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHByb2NfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCQkgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19jdHJsID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGFzcyBjb250cm9sIGluZm9ybWF0aW9uIHRvIHRoZSBHUFAgZGV2aWNlIGRyaXZlciBtYW5hZ2luZyB0aGUgRFNQCisgKiAgICAgIHByb2Nlc3Nvci4gVGhpcyB3aWxsIGJlIGFuIE9FTS1vbmx5IGZ1bmN0aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlCisgKiAgICAgICdCcmlkZ2UgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgQVBJLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICAgICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIGR3X2NtZCAgICAgICA6ICAgICAgIFByaXZhdGUgZHJpdmVyIElPQ1RMIGNtZCBJRC4KKyAqICAgICAgcGFyZ3MgICAgICAgOiAgICAgICBQdHIgdG8gYW4gZHJpdmVyIGRlZmluZWQgYXJndW1lbnQgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU1VDQ0VTUworICogICAgICAtRUZBVUxUIDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgVGltZW91dCBPY2N1cmVkIGJlZm9yZSB0aGUgQ29udHJvbCBpbmZvcm1hdGlvbgorICoJCQkgIGNvdWxkIGJlIHNlbnQuCisgKiAgICAgIC1FUEVSTSAgIDogICAgICAgR2VuZXJhbCBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXMKKyAqICBEZXRhaWxzOgorICogICAgICBUaGlzIGZ1bmN0aW9uIENhbGxzIGJyaWRnZV9kZXZfY3RybC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2N0cmwodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgICB1MzIgZHdfY21kLCBzdHJ1Y3QgZHNwX2NiZGF0YSAqYXJnKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2RldGFjaCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENsb3NlIGEgRFNQIHByb2Nlc3NvciBhbmQgZGUtYWxsb2NhdGUgYWxsIChHUFApIHJlc291cmNlcyByZXNlcnZlZAorICogICAgICBmb3IgaXQuIFRoZSBQcm9jZXNzb3IgT2JqZWN0IGlzIGRlbGV0ZWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcHJfY3R4dCAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUIDogICBJblZhbGlkIEhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBQUk9DIE9iamVjdCBpcyBkZXN0cm95ZWQuCisgKi8KK2V4dGVybiBpbnQgcHJvY19kZXRhY2goc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19lbnVtX25vZGVzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRW51bWVyYXRlIHRoZSBub2RlcyBjdXJyZW50bHkgYWxsb2NhdGVkIG9uIGEgcHJvY2Vzc29yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgbm9kZV90YWIgICAgOiAgIFRoZSBmaXJzdCBMb2NhdGlvbiBvZiBhbiBhcnJheSBhbGxvY2F0ZWQgZm9yIG5vZGUKKyAqCQkgICAgICBoYW5kbGVzLgorICogICAgICBub2RlX3RhYl9zaXplOiAgIFRoZSBudW1iZXIgb2YgKERTUF9ITk9ERSkgaGFuZGxlcyB0aGF0IGNhbiBiZSBoZWxkCisgKgkJICAgICAgdG8gdGhlIG1lbW9yeSB0aGUgY2xpZW50IGhhcyBhbGxvY2F0ZWQgZm9yIG5vZGVfdGFiCisgKiAgICAgIHB1X251bV9ub2RlcyAgOiAgIExvY2F0aW9uIHdoZXJlIERTUFByb2Nlc3Nvcl9FbnVtTm9kZXMgd2lsbCByZXR1cm4KKyAqCQkgICAgICB0aGUgbnVtYmVyIG9mIHZhbGlkIGhhbmRsZXMgd3JpdHRlbiB0byBub2RlX3RhYgorICogICAgICBwdV9hbGxvY2F0ZWQgOiAgIExvY2F0aW9uIHdoZXJlIERTUFByb2Nlc3Nvcl9FbnVtTm9kZXMgd2lsbCByZXR1cm4KKyAqCQkgICAgICB0aGUgbnVtYmVyIG9mIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBvbiB0aGUgRFNQLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FSU5WQUwgICA6ICAgVGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGZvciBub2RlX3RhYiBpcworICoJCSAgICAgIGluc3VmZmljZW50LiBUaGF0IGlzIHRoZSBudW1iZXIgb2Ygbm9kZXMgYWN0dWFsbHkKKyAqCQkgICAgICBhbGxvY2F0ZWQgb24gdGhlIERTUCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlCisgKgkJICAgICAgc3BlY2lmaWVkIGZvciBub2RlX3RhYl9zaXplLgorICogICAgICAtRVBFUk0gICA6ICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbi4KKyAqICBEZXRhaWxzOgorICogIFJlcXVpcmVzCisgKiAgICAgIHB1X251bV9ub2RlcyBpcyBub3QgTlVMTC4KKyAqICAgICAgcHVfYWxsb2NhdGVkIGlzIG5vdCBOVUxMLgorICogICAgICBub2RlX3RhYiBpcyBub3QgTlVMTC4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19lbnVtX25vZGVzKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICB2b2lkICoqbm9kZV90YWIsCisJCQkJICB1MzIgbm9kZV90YWJfc2l6ZSwKKwkJCQkgIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJCSAgdTMyICpwdV9hbGxvY2F0ZWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Jlc291cmNlX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgdGhlIHJlc291cmNlcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIGEgcHJvY2Vzc29yLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgIDogICAgICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHJlc291cmNlX3R5cGU6ICAgICAgVHlwZSBvZiByZXNvdXJjZSAuCisgKiAgICAgIHJlc291cmNlX2luZm86ICAgICAgUHRyIHRvIHRoZSBkc3BfcmVzb3VyY2VpbmZvIHN0cnVjdHVyZS4KKyAqICAgICAgcmVzb3VyY2VfaW5mb19zaXplOiAgU2l6ZSBvZiB0aGUgc3RydWN0dXJlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgICAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVCQURSOiAgICBUaGUgcHJvY2Vzc29yIGlzIG5vdCBpbiB0aGUgUFJPQ19SVU5OSU5HIHN0YXRlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIGJlZm9yZSB0aGUgRFNQIHJlc3BvbmRlZCB0byB0aGUKKyAqCQkJICBxdWVycnkuCisgKiAgICAgIC1FUEVSTSAgIDogICAgICAgVW5hYmxlIHRvIGdldCBSZXNvdXJjZSBJbmZvcm1hdGlvbgorICogIFJlcXVpcmVzOgorICogICAgICByZXNvdXJjZV9pbmZvIGlzIG5vdCBOVUxMLgorICogICAgICBQYXJhbWV0ZXIgcmVzb3VyY2VfdHlwZSBpcyBWYWxpZC5bVEJEXQorICogICAgICByZXNvdXJjZV9pbmZvX3NpemUgaXMgPj0gc2l6ZW9mIGRzcF9yZXNvdXJjZWluZm8gc3RydWN0LgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgcmV0dXJucworICogICAgICAtRU5PU1lTLCBhbmQgZG9lcyBub3Qgd3JpdGUgYW55IGRhdGEgdG8gdGhlIHJlc291cmNlX2luZm8gc3RydWN0LgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3Jlc291cmNlX2luZm8odm9pZCAqaHByb2Nlc3NvciwKKwkJCQkJIHUzMiByZXNvdXJjZV90eXBlLAorCQkJCQkgc3RydWN0IGRzcF9yZXNvdXJjZWluZm8KKwkJCQkJICpyZXNvdXJjZV9pbmZvLAorCQkJCQkgdTMyIHJlc291cmNlX2luZm9fc2l6ZSk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIGlzIGluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFdoZW4gcmVmZXJlbmNlIGNvdW50ID09IDAsIFBST0MncyBwcml2YXRlIHJlc291cmNlcyBhcmUgZnJlZWQuCisgKi8KK2V4dGVybiB2b2lkIHByb2NfZXhpdCh2b2lkKTsKKworLyoKKyAqID09PT09PT09IHByb2NfZ2V0X2Rldl9vYmplY3QgPT09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgREVWIEhhbmxkZSBmb3IgYSBnaXZlbiBQcm9jZXNzb3IgaGFuZGxlCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFByb2Nlc3NvciBIYW5kbGUKKyAqICAgICAgZGV2aWNlX29iaiA6ICAgIExvY2F0aW9uIHRvIHN0b3JlIHRoZSBERVYgSGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICBTdWNjZXNzOyAqZGV2aWNlX29iaiBoYXMgRGV2IGhhbmRsZQorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZTsgKmRldmljZV9vYmogaXMgemVyby4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIDAgICAgIDogICAqZGV2aWNlX29iaiBpcyBub3QgTlVMTAorICogICAgICAtRVBFUk0gICA6ICAgKmRldmljZV9vYmogaXMgTlVMTC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2dldF9kZXZfb2JqZWN0KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKipkZXZpY2Vfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIFBST0MncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2gKKyAqICAgICAgY2FsbC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6ZWQ7IEZBTFNFIGlmIGVycm9yIG9jY3VyZWQuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqICAgICAgVFJVRTogQSByZXF1aXJlbWVudCBmb3IgdGhlIG90aGVyIHB1YmxpYyBQUk9DIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIGJvb2wgcHJvY19pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3N0YXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIERTUCBwcm9jZXNzb3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwcm9jX3N0YXRlX29iaiA6ICAgUHRyIHRvIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBkc3BfcHJvY2Vzc29yc3RhdGUKKyAqCQkgICAgICBzdHJ1Y3R1cmUuCisgKiAgICAgIHN0YXRlX2luZm9fc2l6ZTogU2l6ZSBvZiBkc3BfcHJvY2Vzc29yc3RhdGUuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZSB3aGlsZSBxdWVyeWluZyBwcm9jZXNzb3Igc3RhdGUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHByb2Nfc3RhdGVfb2JqIGlzIG5vdCBOVUxMCisgKiAgICAgIHN0YXRlX2luZm9fc2l6ZSBpcyA+PSB0aGFuIHRoZSBzaXplIG9mIGRzcF9wcm9jZXNzb3JzdGF0ZSBzdHJ1Y3R1cmUuCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3N0YXRlKHZvaWQgKmhwcm9jZXNzb3IsIHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUKKwkJCQkgKnByb2Nfc3RhdGVfb2JqLCB1MzIgc3RhdGVfaW5mb19zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBQUk9DX0dldFByb2Nlc3NvcklEID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVwb3J0IHRoZSBzdGF0ZSBvZiB0aGUgc3BlY2lmaWVkIERTUCBwcm9jZXNzb3IuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwcm9jX2lkICAgICAgOiAgIFByb2Nlc3NvciBJRAorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgR2VuZXJhbCBmYWlsdXJlIHdoaWxlIHF1ZXJ5aW5nIHByb2Nlc3NvciBzdGF0ZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcHJvY19zdGF0ZV9vYmogaXMgbm90IE5VTEwKKyAqICAgICAgc3RhdGVfaW5mb19zaXplIGlzID49IHRoYW4gdGhlIHNpemUgb2YgZHNwX3Byb2Nlc3NvcnN0YXRlIHN0cnVjdHVyZS4KKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19nZXRfcHJvY2Vzc29yX2lkKHZvaWQgKnByb2MsIHUzMiAqIHByb2NfaWQpOworCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3RyYWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHRyYWNlIGJ1ZmZlciBmcm9tIHRoZSBzcGVjaWZpZWQgRFNQIHByb2Nlc3Nvci4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHBidWYJOiAgIFB0ciB0byBidWZmZXIgdG8gaG9sZCB0cmFjZSBvdXRwdXQuCisgKiAgICAgIG1heF9zaXplICAgIDogICBNYXhpbXVtIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMCAgICAgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgOiAgIEdlbmVyYWwgZmFpbHVyZSB3aGlsZSByZXRpcmV2aW5nIHByb2Nlc3NvciB0cmFjZQorICoJCSAgICAgIEJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcGJ1ZiBpcyBub3QgTlVMTAorICogICAgICBtYXhfc2l6ZSBpcyA+IDAuCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfZ2V0X3RyYWNlKHZvaWQgKmhwcm9jZXNzb3IsIHU4ICogcGJ1ZiwgdTMyIG1heF9zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2xvYWQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXNldCBhIHByb2Nlc3NvciBhbmQgbG9hZCBhIG5ldyBiYXNlIHByb2dyYW0gaW1hZ2UuCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yOiAgICAgICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgYXJnY19pbmRleDogICAgICAgVGhlIG51bWJlciBvZiBBcmd1bWVudHMoc3RyaW5ncylpbiB0aGUgYUFyZ1ZbXQorICogICAgICB1c2VyX2FyZ3M6ICAgICAgIEFuIEFycmF5IG9mIEFyZ3VtZW50cyhVbmljb2RlIFN0cmluZ3MpCisgKiAgICAgIHVzZXJfZW52cDogICAgICAgQW4gQXJyYXkgb2YgRW52aXJvbm1lbnQgc2V0dGluZ3MoVW5pY29kZSBTdHJpbmdzKQorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9FTlQ6ICAgICAgIFRoZSBEU1AgRXhlY3VldGFibGUgd2FzIG5vdCBmb3VuZC4KKyAqICAgICAgLUVGQVVMVDogICAgICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgICAgIFVuYWJsZSB0byBMb2FkIHRoZSBQcm9jZXNzb3IKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXNlcl9hcmdzIGlzIG5vdCBOVUxMCisgKiAgICAgIGFyZ2NfaW5kZXggaXMgPiAwCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgU3VjY2VzcyBhbmQgUHJvY1N0YXRlID09IFBST0NfTE9BREVECisgKiAgICAgIG9yIERTUF9GQUlMRUQgc3RhdHVzLgorICogIERldGFpbHM6CisgKiAgICAgIERvZXMgbm90IGltcGxlbWVudCBhY2Nlc3MgcmlnaHRzIHRvIGNvbnRyb2wgd2hpY2ggR1BQIGFwcGxpY2F0aW9uCisgKiAgICAgIGNhbiBsb2FkIHRoZSBwcm9jZXNzb3IuCisgKi8KK2V4dGVybiBpbnQgcHJvY19sb2FkKHZvaWQgKmhwcm9jZXNzb3IsCisJCQkgICAgY29uc3QgczMyIGFyZ2NfaW5kZXgsIGNvbnN0IGNoYXIgKip1c2VyX2FyZ3MsCisJCQkgICAgY29uc3QgY2hhciAqKnVzZXJfZW52cCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvZiBzcGVjaWZpYyBwcm9jZXNzb3IgZXZlbnRzCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudF9tYXNrICA6ICAgTWFzayBvZiB0eXBlcyBvZiBldmVudHMgdG8gYmUgbm90aWZpZWQgYWJvdXQuCisgKiAgICAgIG5vdGlmeV90eXBlIDogICBUeXBlIG9mIG5vdGlmaWNhdGlvbiB0byBiZSBzZW50LgorICogICAgICBobm90aWZpY2F0aW9uOiAgSGFuZGxlIHRvIGJlIHVzZWQgZm9yIG5vdGlmaWNhdGlvbi4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlIG9yIGhub3RpZmljYXRpb24uCisgKiAgICAgIC1FSU5WQUwgIDogICBQYXJhbWV0ZXIgZXZlbnRfbWFzayBpcyBJbnZhbGlkCisgKiAgICAgIERTUF9FTk9USU1QIDogICBUaGUgbm90aWZpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGluIHVOb3RpZnlNYXNrCisgKgkJICAgICAgaXMgbm90IHN1cHBvcnRlZC4KKyAqICAgICAgLUVQRVJNICAgOiAgIFVuYWJsZSB0byByZWdpc3RlciBmb3Igbm90aWZpY2F0aW9uLgorICogIFJlcXVpcmVzOgorICogICAgICBobm90aWZpY2F0aW9uIGlzIG5vdCBOVUxMCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfcmVnaXN0ZXJfbm90aWZ5KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgIHUzMiBldmVudF9tYXNrLCB1MzIgbm90aWZ5X3R5cGUsCisJCQkJICAgICAgIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJICAgICAgICpobm90aWZpY2F0aW9uKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX25vdGlmeV9jbGllbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm90aWZ5IHRoZSBQcm9jZXNzb3IgQ2xpZW50cworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2MgICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudHMgICAgIDogICBFdmVudCB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZSB0byBTZXQgb3IgUmVzZXQgdGhlIEV2ZW50CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGV2ZW50cyBpcyBTdXBwb3J0ZWQgb3IgVmFsaWQgdHlwZSBvZiBFdmVudAorICogICAgICBwcm9jIGlzIGEgdmFsaWQgaGFuZGxlCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBwcm9jX25vdGlmeV9jbGllbnRzKHZvaWQgKnByb2MsIHUzMiBldmVudHMpOworCisvKgorICogID09PT09PT09IHByb2Nfbm90aWZ5X2FsbF9jbGllbnRzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm90aWZ5IHRoZSBQcm9jZXNzb3IgQ2xpZW50cworICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHByb2MgICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBldmVudHMgICAgIDogICBFdmVudCB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICA6ICAgRmFpbHVyZSB0byBTZXQgb3IgUmVzZXQgdGhlIEV2ZW50CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIGV2ZW50cyBpcyBTdXBwb3J0ZWQgb3IgVmFsaWQgdHlwZSBvZiBFdmVudAorICogICAgICBwcm9jIGlzIGEgdmFsaWQgaGFuZGxlCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBOT0RFIEFuZCBTVFJNIHdvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5vdGlmeSB0aGVpciBjbGllbnRzCisgKiAgICAgIGFib3V0IHRoZSBzdGF0ZSBjaGFuZ2VzIGluIE5PREUgb3IgU1RSTS4KKyAqLworZXh0ZXJuIGludCBwcm9jX25vdGlmeV9hbGxfY2xpZW50cyh2b2lkICpwcm9jLCB1MzIgZXZlbnRzKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX3N0YXJ0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RhcnQgYSBwcm9jZXNzb3IgcnVubmluZy4KKyAqICAgICAgUHJvY2Vzc29yIG11c3QgYmUgaW4gUFJPQ19MT0FERUQgc3RhdGUuCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSAnQnJpZGdlCisgKiAgICAgIGFwcGxpY2F0aW9uIGRldmVsb3BlcidzIEFQSS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICA6ICAgICAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogIFJldHVybnM6CisgKiAgICAgIDAgICAgIDogICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCA6ICAgICAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVCQURSOiAgICBQcm9jZXNzb3IgaXMgbm90IGluIFBST0NfTE9BREVEIHN0YXRlLgorICogICAgICAtRVBFUk0gICA6ICAgICAgIFVuYWJsZSB0byBzdGFydCB0aGUgcHJvY2Vzc29yLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3MgYW5kIFByb2NTdGF0ZSA9PSBQUk9DX1JVTk5JTkcgb3IgRFNQX0ZBSUxFRCBzdGF0dXMuCisgKiAgRGV0YWlsczoKKyAqLworZXh0ZXJuIGludCBwcm9jX3N0YXJ0KHZvaWQgKmhwcm9jZXNzb3IpOworCisvKgorICogID09PT09PT09IHByb2Nfc3RvcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0YXJ0IGEgcHJvY2Vzc29yIHJ1bm5pbmcuCisgKiAgICAgIFByb2Nlc3NvciBtdXN0IGJlIGluIFBST0NfTE9BREVEIHN0YXRlLgorICogICAgICBUaGlzIHdpbGwgYmUgYW4gT0VNLW9ubHkgZnVuY3Rpb24sIGFuZCBub3QgcGFydCBvZiB0aGUgJ0JyaWRnZQorICogICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBBUEkuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgOiAgICAgICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwICAgICA6ICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgOiAgICAgICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FQkFEUjogICAgUHJvY2Vzc29yIGlzIG5vdCBpbiBQUk9DX0xPQURFRCBzdGF0ZS4KKyAqICAgICAgLUVQRVJNICAgOiAgICAgICBVbmFibGUgdG8gc3RhcnQgdGhlIHByb2Nlc3Nvci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogICAgICBTdWNjZXNzIGFuZCBQcm9jU3RhdGUgPT0gUFJPQ19SVU5OSU5HIG9yIERTUF9GQUlMRUQgc3RhdHVzLgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19zdG9wKHZvaWQgKmhwcm9jZXNzb3IpOworCisvKgorICogID09PT09PT09IHByb2NfZW5kX2RtYSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEJlZ2luIGEgRE1BIHRyYW5zZmVyCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBCdWZmZXIgc3RhcnQgYWRkcmVzcworICogICAgICB1bF9zaXplCQk6ICAgQnVmZmVyIHNpemUKKyAqICAgICAgZGlyCQk6ICAgVGhlIGRpcmVjdGlvbiBvZiB0aGUgdHJhbnNmZXIKKyAqICBSZXF1aXJlczoKKyAqICAgICAgTWVtb3J5IHdhcyBwcmV2aW91c2x5IG1hcHBlZC4KKyAqLworZXh0ZXJuIGludCBwcm9jX2VuZF9kbWEodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwKKwkJCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisvKgorICogID09PT09PT09IHByb2NfYmVnaW5fZG1hID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQmVnaW4gYSBETUEgdHJhbnNmZXIKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwbXB1X2FkZHIJOiAgIEJ1ZmZlciBzdGFydCBhZGRyZXNzCisgKiAgICAgIHVsX3NpemUJCTogICBCdWZmZXIgc2l6ZQorICogICAgICBkaXIJCTogICBUaGUgZGlyZWN0aW9uIG9mIHRoZSB0cmFuc2ZlcgorICogIFJlcXVpcmVzOgorICogICAgICBNZW1vcnkgd2FzIHByZXZpb3VzbHkgbWFwcGVkLgorICovCitleHRlcm4gaW50IHByb2NfYmVnaW5fZG1hKHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3NpemUsCisJCQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCisvKgorICogID09PT09PT09IHByb2NfZmx1c2hfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRmx1c2hlcyBhIGJ1ZmZlciBmcm9tIHRoZSBNUFUgZGF0YSBjYWNoZS4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBocHJvY2Vzc29yICAgICAgOiAgIFRoZSBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICBwbXB1X2FkZHIJOiAgIEJ1ZmZlciBzdGFydCBhZGRyZXNzCisgKiAgICAgIHVsX3NpemUJICA6ICAgQnVmZmVyIHNpemUKKyAqICAgICAgdWxfZmxhZ3MJIDogICBSZXNlcnZlZC4KKyAqICBSZXR1cm5zOgorICogICAgICAwCSA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5lcmFsIGZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBBbGwgdGhlIGFyZ3VtZW50cyBhcmUgY3VycmVudGx5IGlnbm9yZWQuCisgKi8KK2V4dGVybiBpbnQgcHJvY19mbHVzaF9tZW1vcnkodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkgICAgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwgdTMyIHVsX2ZsYWdzKTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX2ludmFsaWRhdGVfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW52YWxpZGF0ZXMgYSBidWZmZXIgZnJvbSB0aGUgTVBVIGRhdGEgY2FjaGUuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBCdWZmZXIgc3RhcnQgYWRkcmVzcworICogICAgICB1bF9zaXplCSAgOiAgIEJ1ZmZlciBzaXplCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqICAgICAgQWxsIHRoZSBhcmd1bWVudHMgYXJlIGN1cnJlbnRseSBpZ25vcmVkLgorICovCitleHRlcm4gaW50IHByb2NfaW52YWxpZGF0ZV9tZW1vcnkodm9pZCAqaHByb2Nlc3NvciwKKwkJCQkJIHZvaWQgKnBtcHVfYWRkciwgdTMyIHVsX3NpemUpOworCisvKgorICogID09PT09PT09IHByb2NfbWFwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTWFwcyBhIE1QVSBidWZmZXIgdG8gRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcG1wdV9hZGRyCTogICBTdGFydGluZyBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIG1hcC4KKyAqICAgICAgdWxfc2l6ZQkgIDogICBTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIG1hcC4KKyAqICAgICAgcmVxX2FkZHIJOiAgIFJlcXVlc3RlZCBEU1Agc3RhcnQgYWRkcmVzcy4gT2Zmc2V0LWFkanVzdGVkIGFjdHVhbAorICoJCQkgIG1hcHBlZCBhZGRyZXNzIGlzIGluIHRoZSBsYXN0IGFyZ3VtZW50LgorICogICAgICBwcF9tYXBfYWRkciAgICAgICA6ICAgUHRyIHRvIERTUCBzaWRlIG1hcHBlZCB1OCBhZGRyZXNzLgorICogICAgICB1bF9tYXBfYXR0ciAgICAgICA6ICAgT3B0aW9uYWwgZW5kaWFubmVzcyBhdHRyaWJ1dGVzLCB2aXJ0IHRvIHBoeXMgZmxhZy4KKyAqICBSZXR1cm5zOgorICogICAgICAwCSA6ICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVCAgICAgOiAgIEludmFsaWQgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgLUVQRVJNICAgICAgIDogICBHZW5lcmFsIGZhaWx1cmUuCisgKiAgICAgIC1FTk9NRU0gICAgIDogICBNUFUgc2lkZSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4KKyAqICAgICAgLUVOT0VOVCAgIDogICBDYW5ub3QgZmluZCBhIHJlc2VydmVkIHJlZ2lvbiBzdGFydGluZyB3aXRoIHRoaXMKKyAqCQkgICAgICA6ICAgYWRkcmVzcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgcG1wdV9hZGRyIGlzIG5vdCBOVUxMCisgKiAgICAgIHVsX3NpemUgaXMgbm90IHplcm8KKyAqICAgICAgcHBfbWFwX2FkZHIgaXMgbm90IE5VTEwKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY19tYXAodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgIHZvaWQgKnBtcHVfYWRkciwKKwkJCSAgIHUzMiB1bF9zaXplLAorCQkJICAgdm9pZCAqcmVxX2FkZHIsCisJCQkgICB2b2lkICoqcHBfbWFwX2FkZHIsIHUzMiB1bF9tYXBfYXR0ciwKKwkJCSAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHByb2NfcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXNlcnZlIGEgdmlydHVhbGx5IGNvbnRpZ3VvdXMgcmVnaW9uIG9mIERTUCBhZGRyZXNzIHNwYWNlLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhwcm9jZXNzb3IgICAgICA6ICAgVGhlIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIHVsX3NpemUJICA6ICAgU2l6ZSBvZiB0aGUgYWRkcmVzcyBzcGFjZSB0byByZXNlcnZlLgorICogICAgICBwcF9yc3ZfYWRkciAgICAgICA6ICAgUHRyIHRvIERTUCBzaWRlIHJlc2VydmVkIHU4IGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRU5PTUVNICAgICA6ICAgQ2Fubm90IHJlc2VydmUgY2h1bmsgb2YgdGhpcyBzaXplLgorICogIFJlcXVpcmVzOgorICogICAgICBwcF9yc3ZfYWRkciBpcyBub3QgTlVMTAorICogICAgICBQUk9DIEluaXRpYWxpemVkLgorICogIEVuc3VyZXM6CisgKiAgRGV0YWlsczoKKyAqLworZXh0ZXJuIGludCBwcm9jX3Jlc2VydmVfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsCisJCQkJICAgICAgdTMyIHVsX3NpemUsIHZvaWQgKipwcF9yc3ZfYWRkciwKKwkJCQkgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKKworLyoKKyAqICA9PT09PT09PSBwcm9jX3VuX21hcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZXMgYSBNUFUgYnVmZmVyIG1hcHBpbmcgZnJvbSB0aGUgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgbWFwX2FkZHIJOiAgIFN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlIG1hcHBlZCBtZW1vcnkgcmVnaW9uLgorICogIFJldHVybnM6CisgKiAgICAgIDAJIDogICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUICAgICA6ICAgSW52YWxpZCBwcm9jZXNzb3IgaGFuZGxlLgorICogICAgICAtRVBFUk0gICAgICAgOiAgIEdlbmVyYWwgZmFpbHVyZS4KKyAqICAgICAgLUVOT0VOVCAgIDogICBDYW5ub3QgZmluZCBhIG1hcHBlZCByZWdpb24gc3RhcnRpbmcgd2l0aCB0aGlzCisgKgkJICAgICAgOiAgIGFkZHJlc3MuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIG1hcF9hZGRyIGlzIG5vdCBOVUxMCisgKiAgICAgIFBST0MgSW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICovCitleHRlcm4gaW50IHByb2NfdW5fbWFwKHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKm1hcF9hZGRyLAorCQkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHJvY191bl9yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIGEgcHJldmlvdXNseSByZXNlcnZlZCByZWdpb24gb2YgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaHByb2Nlc3NvciAgICAgIDogICBUaGUgcHJvY2Vzc29yIGhhbmRsZS4KKyAqICAgICAgcHJzdl9hZGRyCTogICBQdHIgdG8gRFNQIHNpZGUgcmVzZXJ2ZWRCWVRFIGFkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMAkgOiAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQgICAgIDogICBJbnZhbGlkIHByb2Nlc3NvciBoYW5kbGUuCisgKiAgICAgIC1FUEVSTSAgICAgICA6ICAgR2VuZXJhbCBmYWlsdXJlLgorICogICAgICAtRU5PRU5UICAgOiAgIENhbm5vdCBmaW5kIGEgcmVzZXJ2ZWQgcmVnaW9uIHN0YXJ0aW5nIHdpdGggdGhpcworICoJCSAgICAgIDogICBhZGRyZXNzLgorICogIFJlcXVpcmVzOgorICogICAgICBwcnN2X2FkZHIgaXMgbm90IE5VTEwKKyAqICAgICAgUFJPQyBJbml0aWFsaXplZC4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKi8KK2V4dGVybiBpbnQgcHJvY191bl9yZXNlcnZlX21lbW9yeSh2b2lkICpocHJvY2Vzc29yLAorCQkJCQkgdm9pZCAqcHJzdl9hZGRyLAorCQkJCQkgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKyNlbmRpZiAvKiBQUk9DXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2Nwcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHJvY3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2QxZjBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Byb2Nwcml2LmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIHByb2Nwcml2LmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIFBST0MgY29uc3RhbnRzIGFuZCB0eXBlcywgc2hhcmVkIGJ5IFBST0MsIE1HUiBhbmQgRFNQIEFQSS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFBST0NQUklWXworI2RlZmluZSBQUk9DUFJJVl8KKworLyogUk0gUFJPQyBPYmplY3QgKi8KK3N0cnVjdCBwcm9jX29iamVjdDsKKworI2VuZGlmIC8qIFBST0NQUklWXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZGM3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcHdyLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBwd3IuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFBXUl8KKyNkZWZpbmUgUFdSXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wd3Jfc2guaD4KKworLyoKKyAqICA9PT09PT09PSBwd3Jfc2xlZXBfZHNwID09PT09PT09CisgKiAgICAgIFNpZ25hbCB0aGUgRFNQIHRvIGdvIHRvIHNsZWVwLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzbGVlcF9jb2RlOiAgICAgICAgICBOZXcgc2xlZXAgc3RhdGUgZm9yIERTUC4gIChJbml0aWFsbHksIHZhbGlkIGNvZGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIFBXUl9ERUVQU0xFRVAgb3IgUFdSX0VNRVJHRU5DWURFRVBTTEVFUDsgYm90aCBvZgorICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIGNvZGVzIHdpbGwgc2ltcGx5IHB1dCB0aGUgRFNQIGluIGRlZXAgc2xlZXAuKQorICoKKyAqCXRpbWVvdXQ6ICAgICAgICAgICAgTWF4aW11bSB0aW1lIChtc2VjKSB0aGF0IFBXUiBzaG91bGQgd2FpdCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24gdGhhdCB0aGUgRFNQIHNsZWVwIHN0YXRlIGhhcyBiZWVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY2hlZC4gIElmIFBXUiBzaG91bGQgc2ltcGx5IHNlbmQgdGhlIGNvbW1hbmQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQIHRvIGdvIHRvIHNsZWVwIGFuZCB0aGVuIHJldHVybiAoaS5lLiwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2hyb3Vub3VzIHNsZWVwKSwgdGhlIHRpbWVvdXQgc2hvdWxkIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGFzIHplcm8uCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgMDogU3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXNsZWVwLgorICogICAgICAtRUlOVkFMOiAgICBUaGUgc3BlY2lmaWVkIHNsZWVwX2NvZGUgaXMgbm90IHN1cHBvcnRlZC4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciBEU1Agc2xlZXAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCBzbGVlcCBjb21tYW5kIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KKyAqLworZXh0ZXJuIGludCBwd3Jfc2xlZXBfZHNwKGNvbnN0IHUzMiBzbGVlcF9jb2RlLCBjb25zdCB1MzIgdGltZW91dCk7CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3dha2VfZHNwID09PT09PT09CisgKiAgICBTaWduYWwgdGhlIERTUCB0byB3YWtlIGZyb20gc2xlZXAuCisgKgorICogIFBhcmFtZXRlcnM6CisgKgl0aW1lb3V0OiAgICAgICAgICAgIE1heGltdW0gdGltZSAobXNlYykgdGhhdCBQV1Igc2hvdWxkIHdhaXQgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uIHRoYXQgdGhlIERTUCBpcyBhd2FrZS4gIElmIFBXUiBzaG91bGQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbHkgc2VuZCBhIGNvbW1hbmQgdG8gdGhlIERTUCB0byB3YWtlIGFuZCB0aGVuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLmUuLCBhc3luY2hyb3Vub3VzIHdha2UpLCB0aW1lb3V0IHNob3VsZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNwZWNpZmllZCBhcyB6ZXJvLgorICoKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIDA6ICBTdWNjZXNzLCBidXQgdGhlIERTUCB3YXMgYWxyZWFkeSBhd2FrZS4KKyAqICAgICAgLUVUSU1FOiAgICAgICBBIHRpbWVvdXQgb2NjdXJlZCB3aGlsZSB3YWl0aW5nIGZvciB3YWtlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uLgorICogICAgICAtRVBFUk06ICAgICAgICAgIEdlbmVyYWwgZmFpbHVyZSwgdW5hYmxlIHRvIHNlbmQgd2FrZSBjb21tYW5kIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIERTUC4KKyAqLworZXh0ZXJuIGludCBwd3Jfd2FrZV9kc3AoY29uc3QgdTMyIHRpbWVvdXQpOworCisvKgorICogID09PT09PT09IHB3cl9wbV9wcmVfc2NhbGUgPT09PT09PT0KKyAqICAgIFByZXNjYWxlIG5vdGlmaWNhdGlvbiB0byBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKgl2b2x0YWdlX2RvbWFpbjogICBUaGUgdm9sdGFnZSBkb21haW4gZm9yIHdoaWNoIG5vdGlmaWNhdGlvbiBpcyBzZW50CisgKiAgICBsZXZlbDoJCQlUaGUgbGV2ZWwgb2Ygdm9sdGFnZSBkb21haW4KKyAqCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICBTdWNjZXNzLgorICogICAgICAwOiAgU3VjY2VzcywgYnV0IHRoZSBEU1Agd2FzIGFscmVhZHkgYXdha2UuCisgKiAgICAgIC1FVElNRTogICAgICAgQSB0aW1lb3V0IG9jY3VyZWQgd2hpbGUgd2FpdGluZyBmb3Igd2FrZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbi4KKyAqICAgICAgLUVQRVJNOiAgICAgICAgICBHZW5lcmFsIGZhaWx1cmUsIHVuYWJsZSB0byBzZW5kIHdha2UgY29tbWFuZCB0bworICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBEU1AuCisgKi8KK2V4dGVybiBpbnQgcHdyX3BtX3ByZV9zY2FsZSh1MTYgdm9sdGFnZV9kb21haW4sIHUzMiBsZXZlbCk7CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3BtX3Bvc3Rfc2NhbGUgPT09PT09PT0KKyAqICAgIFBvc3RTY2FsZSBub3RpZmljYXRpb24gdG8gRFNQLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICoJdm9sdGFnZV9kb21haW46ICAgVGhlIHZvbHRhZ2UgZG9tYWluIGZvciB3aGljaCBub3RpZmljYXRpb24gaXMgc2VudAorICogICAgbGV2ZWw6CQkJVGhlIGxldmVsIG9mIHZvbHRhZ2UgZG9tYWluCisgKgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgMDogIFN1Y2Nlc3MsIGJ1dCB0aGUgRFNQIHdhcyBhbHJlYWR5IGF3YWtlLgorICogICAgICAtRVRJTUU6ICAgICAgIEEgdGltZW91dCBvY2N1cmVkIHdoaWxlIHdhaXRpbmcgZm9yIHdha2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb24uCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgR2VuZXJhbCBmYWlsdXJlLCB1bmFibGUgdG8gc2VuZCB3YWtlIGNvbW1hbmQgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRFNQLgorICovCitleHRlcm4gaW50IHB3cl9wbV9wb3N0X3NjYWxlKHUxNiB2b2x0YWdlX2RvbWFpbiwgdTMyIGxldmVsKTsKKworI2VuZGlmIC8qIFBXUl8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3Jfc2guaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9wd3Jfc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRhMDkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3B3cl9zaC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBwd3Jfc2guaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQb3dlciBNYW5hZ2VyIHNoYXJlZCBkZWZpbml0aW9ucyAodXNlZCBvbiBib3RoIEdQUCBhbmQgRFNQIHNpZGVzKS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBQV1JfU0hfCisjZGVmaW5lIFBXUl9TSF8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tYnhfc2guaD4KKworLyogdmFsaWQgc2xlZXAgY29tbWFuZCBjb2RlcyB0aGF0IGNhbiBiZSBzZW50IGJ5IEdQUCB2aWEgbWFpbGJveDogKi8KKyNkZWZpbmUgUFdSX0RFRVBTTEVFUCAgICAgICAgICAgTUJYX1BNX0RTUElETEUKKyNkZWZpbmUgUFdSX0VNRVJHRU5DWURFRVBTTEVFUCAgTUJYX1BNX0VNRVJHRU5DWVNMRUVQCisjZGVmaW5lIFBXUl9TTEVFUFVOVElMUkVTVEFSVCAgIE1CWF9QTV9TTEVFUFVOVElMUkVTVEFSVAorI2RlZmluZSBQV1JfV0FLRVVQICAgICAgICAgICAgICBNQlhfUE1fRFNQV0FLRVVQCisjZGVmaW5lIFBXUl9BVVRPRU5BQkxFICAgICAgICAgIE1CWF9QTV9QV1JFTkFCTEUKKyNkZWZpbmUgUFdSX0FVVE9ESVNBQkxFICAgICAgICAgTUJYX1BNX1BXUkRJU0FCTEUKKyNkZWZpbmUgUFdSX1JFVEVOVElPTiAgICAgICAgICAgICBNQlhfUE1fRFNQUkVUTgorCisjZW5kaWYgLyogUFdSX1NIXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYWYwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIHJlc291cmNlY2xlYW51cC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisKK2V4dGVybiBpbnQgZHJ2X2dldF9wcm9jX2N0eHRfbGlzdChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICoqcGN0eHQsCisJCQkJCSBzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmopOworCitleHRlcm4gaW50IGRydl9pbnNlcnRfcHJvY19jb250ZXh0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAorCQkJCQkgIHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9hbGxfZG1tX3Jlc19lbGVtZW50cyh2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gaW50IGRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3Byb2Nfc2V0X3BpZCh2b2lkICpjdHh0LCBzMzIgcHJvY2Vzcyk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9hbGxfcmVzb3VyY2VzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X3JlbW92ZV9wcm9jX2NvbnRleHQoc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmosCisJCQkJCSAgdm9pZCAqcHJfY3R4dCk7CisKK2V4dGVybiBpbnQgZHJ2X2luc2VydF9ub2RlX3Jlc19lbGVtZW50KHZvaWQgKmhub2RlLCB2b2lkICpub2RlX3Jlc291cmNlLAorCQkJCQkgICAgICB2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gdm9pZCBkcnZfcHJvY19ub2RlX3VwZGF0ZV9oZWFwX3N0YXR1cyh2b2lkICpub2RlX3Jlc291cmNlLCBzMzIgc3RhdHVzKTsKKworZXh0ZXJuIHZvaWQgZHJ2X3Byb2Nfbm9kZV91cGRhdGVfc3RhdHVzKHZvaWQgKm5vZGVfcmVzb3VyY2UsIHMzMiBzdGF0dXMpOworCitleHRlcm4gaW50IGRydl9wcm9jX3VwZGF0ZV9zdHJtX3Jlcyh1MzIgbnVtX2J1ZnMsIHZvaWQgKnN0cm1fcmVzb3VyY2VzKTsKKworZXh0ZXJuIGludCBkcnZfcHJvY19pbnNlcnRfc3RybV9yZXNfZWxlbWVudCh2b2lkICpzdHJlYW1fb2JqLAorCQkJCQkJICAgdm9pZCAqc3RybV9yZXMsCisJCQkJCQkgICB2b2lkICpwcm9jZXNzX2N0eHQpOworCitleHRlcm4gaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCk7CisKK2V4dGVybiBlbnVtIG5vZGVfc3RhdGUgbm9kZV9nZXRfc3RhdGUodm9pZCAqaG5vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3JtbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZWE1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1tLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBybW0uaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIG1lbW9yeSBtYW5hZ2VyIHByb3ZpZGVzIGdlbmVyYWwgaGVhcCBtYW5hZ2VtZW50IGFuZCBhcmJpdHJhcnkKKyAqIGFsaWdubWVudCBmb3IgYW55IG51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMsIGFuZCBtYW5hZ2VtZW50IG9mIG92ZXJsYXkKKyAqIG1lbW9yeS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFJNTV8KKyNkZWZpbmUgUk1NXworCisvKgorICogID09PT09PT09IHJtbV9hZGRyID09PT09PT09CisgKiAgRFNQIGFkZHJlc3MgKyBzZWdpZAorICovCitzdHJ1Y3Qgcm1tX2FkZHIgeworCXUzMiBhZGRyOworCXMzMiBzZWdpZDsKK307CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3NlZ21lbnQgPT09PT09PT0KKyAqICBNZW1vcnkgc2VnbWVudCBvbiB0aGUgRFNQIGF2YWlsYWJsZSBmb3IgcmVtb3RlIGFsbG9jYXRpb25zLgorICovCitzdHJ1Y3Qgcm1tX3NlZ21lbnQgeworCXUzMiBiYXNlOwkJLyogQmFzZSBvZiB0aGUgc2VnbWVudCAqLworCXUzMiBsZW5ndGg7CQkvKiBTaXplIG9mIHRoZSBzZWdtZW50ICh0YXJnZXQgTUFVcykgKi8KKwlzMzIgc3BhY2U7CQkvKiBDb2RlIG9yIGRhdGEgKi8KKwl1MzIgbnVtYmVyOwkJLyogTnVtYmVyIG9mIEFsbG9jYXRlZCBCbG9ja3MgKi8KK307CisKKy8qCisgKiAgPT09PT09PT0gUk1NX1RhcmdldCA9PT09PT09PQorICovCitzdHJ1Y3Qgcm1tX3RhcmdldF9vYmo7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2FsbG9jID09PT09PT09CisgKgorICogIHJtbV9hbGxvYyBpcyB1c2VkIHRvIHJlbW90ZWx5IGFsbG9jYXRlIG9yIHJlc2VydmUgbWVtb3J5IG9uIHRoZSBEU1AuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHRhcmdldCAgICAgICAgICAtIFRhcmdldCByZXR1cm5lZCBmcm9tIHJtbV9jcmVhdGUoKS4KKyAqICAgICAgc2VnaWQgICAgICAgICAgIC0gTWVtb3J5IHNlZ21lbnQgdG8gYWxsb2NhdGUgZnJvbS4KKyAqICAgICAgc2l6ZSAgICAgICAgICAgIC0gU2l6ZSAodGFyZ2V0IE1BVVMpIHRvIGFsbG9jYXRlLgorICogICAgICBhbGlnbiAgICAgICAgICAgLSBhbGlnbm1lbnQuCisgKiAgICAgIGRzcF9hZGRyZXNzICAgICAtIElmIHJlc2VydmUgaXMgRkFMU0UsIHRoZSBsb2NhdGlvbiB0byBzdG9yZSBhbGxvY2F0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyBvbiBvdXRwdXQsIG90aGVyd2lzZSwgdGhlIERTUCBhZGRyZXNzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmUuCisgKiAgICAgIHJlc2VydmUgICAgICAgICAtIElmIFRSVUUsIHJlc2VydmUgdGhlIG1lbW9yeSBzcGVjaWZpZWQgYnkgZHNwX2FkZHJlc3MuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVOT01FTTogICAgICAgICAgICBNZW1vcnkgYWxsb2NhdGlvbiBvbiBHUFAgZmFpbGVkLgorICogICAgICAtRU5YSU86ICAgICBDYW5ub3QgImFsbG9jYXRlIiBvdmVybGF5IG1lbW9yeSBiZWNhdXNlIGl0J3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeSBpbiB1c2UuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFJNTSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICBkc3BfYWRkcmVzcyAhPSBOVUxMLgorICogICAgICBzaXplID4gMAorICogICAgICByZXNlcnZlIHx8IHRhcmdldC0+bnVtX3NlZ3MgPiAwLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgcm1tX2FsbG9jKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBzaXplLAorCQkJdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzLCBib29sIHJlc2VydmUpOworCisvKgorICogID09PT09PT09IHJtbV9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSB0YXJnZXQgb2JqZWN0IHdpdGggbWVtb3J5IHNlZ21lbnRzIGZvciByZW1vdGUgYWxsb2NhdGlvbi4gSWYKKyAqICBzZWdfdGFiID09IE5VTEwgb3IgbnVtX3NlZ3MgPT0gMCwgbWVtb3J5IGNhbiBvbmx5IGJlIHJlc2VydmVkIHRocm91Z2gKKyAqICBybW1fYWxsb2MoKS4KKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgdGFyZ2V0X29iajogICAgICAgIC0gTG9jYXRpb24gdG8gc3RvcmUgdGFyZ2V0IG9uIG91dHB1dC4KKyAqICAgICAgc2VnX3RhYjogICAgICAgICAtIFRhYmxlIG9mIG1lbW9yeSBzZWdtZW50cy4KKyAqICAgICAgbnVtX3NlZ3M6ICAgICAgICAtIE51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMuCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FTk9NRU06ICAgIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgUk1NIGluaXRpYWxpemVkLgorICogICAgICB0YXJnZXRfb2JqICE9IE5VTEwuCisgKiAgICAgIG51bV9zZWdzID09IDAgfHwgc2VnX3RhYiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3M6ICAgICAgICBWYWxpZCAqdGFyZ2V0X29iai4KKyAqICAgICAgRmFpbHVyZTogICAgICAgICp0YXJnZXRfb2JqID09IE5VTEwuCisgKi8KK2V4dGVybiBpbnQgcm1tX2NyZWF0ZShzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKip0YXJnZXRfb2JqLAorCQkJICAgICBzdHJ1Y3Qgcm1tX3NlZ21lbnQgc2VnX3RhYltdLCB1MzIgbnVtX3NlZ3MpOworCisvKgorICogID09PT09PT09IHJtbV9kZWxldGUgPT09PT09PT0KKyAqICBEZWxldGUgdGFyZ2V0IGFsbG9jYXRlZCBpbiBybW1fY3JlYXRlKCkuCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHRhcmdldCAgICAgICAgICAtIFRhcmdldCByZXR1cm5lZCBmcm9tIHJtbV9jcmVhdGUoKS4KKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBSTU0gaW5pdGlhbGl6ZWQuCisgKiAgICAgIFZhbGlkIHRhcmdldC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBybW1fZGVsZXRlKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0KTsKKworLyoKKyAqICA9PT09PT09PSBybW1fZXhpdCA9PT09PT09PQorICogIEV4aXQgdGhlIFJNTSBtb2R1bGUKKyAqCisgKiAgUGFyYW1ldGVyczoKKyAqICBSZXR1cm5zOgorICogIFJlcXVpcmVzOgorICogICAgICBybW1faW5pdCBzdWNjZXNzZnVsbHkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiB2b2lkIHJtbV9leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IHJtbV9mcmVlID09PT09PT09CisgKiAgRnJlZSBvciB1bnJlc2VydmUgbWVtb3J5IGFsbG9jYXRlZCB0aHJvdWdoIHJtbV9hbGxvYygpLgorICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICB0YXJnZXQ6ICAgICAgICAgLSBUYXJnZXQgcmV0dXJuZWQgZnJvbSBybW1fY3JlYXRlKCkuCisgKiAgICAgIHNlZ2lkOiAgICAgICAgICAtIFNlZ21lbnQgb2YgbWVtb3J5IHRvIGZyZWUuCisgKiAgICAgIGRzcF9hZGRyZXNzOiAgICAtIEFkZHJlc3MgdG8gZnJlZSBvciB1bnJlc2VydmUuCisgKiAgICAgIHNpemU6ICAgICAgICAgICAtIFNpemUgb2YgbWVtb3J5IHRvIGZyZWUgb3IgdW5yZXNlcnZlLgorICogICAgICByZXNlcnZlZDogICAgICAgLSBUUlVFIGlmIG1lbW9yeSB3YXMgcmVzZXJ2ZWQgb25seSwgb3RoZXJ3aXNlIEZBTFNFLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIFJNTSBpbml0aWFsaXplZC4KKyAqICAgICAgVmFsaWQgdGFyZ2V0LgorICogICAgICByZXNlcnZlZCB8fCBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MuCisgKiAgICAgIHJlc2VydmUgfHwgW2RzcF9hZGRyZXNzLCBkc3BfYWRkcmVzcyArIHNpemVdIGlzIGEgdmFsaWQgbWVtb3J5IHJhbmdlLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBib29sIHJtbV9mcmVlKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBkc3BfYWRkciwKKwkJICAgICB1MzIgc2l6ZSwgYm9vbCByZXNlcnZlZCk7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIHRoZSBSTU0gbW9kdWxlCisgKgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRTogICBTdWNjZXNzLgorICogICAgICBGQUxTRTogIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgcm1tX2luaXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3N0YXQgPT09PT09PT0KKyAqICBPYnRhaW4gIG1lbW9yeSBzZWdtZW50IHN0YXR1cworICoKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzZWdpZDogICAgICAgU2VnbWVudCBJRCBvZiB0aGUgZHluYW1pYyBsb2FkaW5nIHNlZ21lbnQuCisgKiAgICAgIG1lbV9zdGF0X2J1ZjogUG9pbnRlciB0byBhbGxvY2F0ZWQgYnVmZmVyIGludG8gd2hpY2ggbWVtb3J5IHN0YXRzIGFyZQorICogICAgICAgICAgICAgICAgICAgcGxhY2VkLgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUU6ICAgU3VjY2Vzcy4KKyAqICAgICAgRkFMU0U6ICBGYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MKKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gYm9vbCBybW1fc3RhdChzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgZW51bSBkc3BfbWVtdHlwZSBzZWdpZCwKKwkJICAgICBzdHJ1Y3QgZHNwX21lbXN0YXQgKm1lbV9zdGF0X2J1Zik7CisKKyNlbmRpZiAvKiBSTU1fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zX3NoLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zX3NoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjNTU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXNfc2guaApAQCAtMCwwICsxLDk1IEBACisvKgorICogcm1zX3NoLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIFJlc291cmNlIE1hbmFnZXIgU2VydmVyIHNoYXJlZCBkZWZpbml0aW9ucyAodXNlZCBvbiBib3RoCisgKiBHUFAgYW5kIERTUCBzaWRlcykuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgUk1TX1NIXworI2RlZmluZSBSTVNfU0hfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1zdHlwZXMuaD4KKworLyogTm9kZSBUeXBlczogKi8KKyNkZWZpbmUgUk1TX1RBU0sgICAgICAgICAgICAgICAgMQkvKiBUYXNrIG5vZGUgKi8KKyNkZWZpbmUgUk1TX0RBSVMgICAgICAgICAgICAgICAgMgkvKiB4REFJUyBzb2NrZXQgbm9kZSAqLworI2RlZmluZSBSTVNfTVNHICAgICAgICAgICAgICAgICAzCS8qIE1lc3NhZ2Ugbm9kZSAqLworCisvKiBNZW1vcnkgVHlwZXM6ICovCisjZGVmaW5lIFJNU19DT0RFICAgICAgICAgICAgICAgIDAJLyogUHJvZ3JhbSBzcGFjZSAqLworI2RlZmluZSBSTVNfREFUQSAgICAgICAgICAgICAgICAxCS8qIERhdGEgc3BhY2UgKi8KKyNkZWZpbmUgUk1TX0lPICAgICAgICAgICAgICAgIAkyCS8qIEkvTyBzcGFjZSAqLworCisvKiBSTSBTZXJ2ZXIgQ29tbWFuZCBhbmQgUmVzcG9uc2UgQnVmZmVyIFNpemVzOiAqLworI2RlZmluZSBSTVNfQ09NTUFOREJVRlNJWkUgICAgIDI1NgkvKiBTaXplIG9mIGNvbW1hbmQgYnVmZmVyICovCisjZGVmaW5lIFJNU19SRVNQT05TRUJVRlNJWkUgICAgMTYJLyogU2l6ZSBvZiByZXNwb25zZSBidWZmZXIgKi8KKworLyogUHJlLURlZmluZWQgQ29tbWFuZC9SZXNwb25zZSBDb2RlczogKi8KKyNkZWZpbmUgUk1TX0VYSVQgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBHUFAtPk5vZGU6IHNodXRkb3duICovCisjZGVmaW5lIFJNU19FWElUQUNLICAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogTm9kZS0+R1BQOiBhY2sgc2h1dGRvd24gKi8KKyNkZWZpbmUgUk1TX0JVRkRFU0MgICAgICAgICAgICAgMHgyMDAwMDAwMAkvKiBBcmcxIFNNIGJ1ZiwgQXJnMiBTTSBzaXplICovCisjZGVmaW5lIFJNU19LSUxMVEFTSyAgICAgICAgICAgIDB4MTAwMDAwMDAJLyogR1BQLT5Ob2RlOiBLaWxsIFRhc2sgKi8KKyNkZWZpbmUgUk1TX1VTRVIgICAgICAgICAgICAgICAgMHgwCS8qIFN0YXJ0IG9mIHVzZXItZGVmaW5lZCBtc2cgY29kZXMgKi8KKyNkZWZpbmUgUk1TX01BWFVTRVJDT0RFUyAgICAgICAgMHhmZmYJLyogTWF4aW11bSB1c2VyIGRlZmluZWQgQy9SIENvZGVzICovCisKKy8qIFJNIFNlcnZlciBSUEMgQ29tbWFuZCBTdHJ1Y3R1cmU6ICovCitzdHJ1Y3Qgcm1zX2NvbW1hbmQgeworCXJtc193b3JkIGZ4bjsJCS8qIFNlcnZlciBmdW5jdGlvbiBhZGRyZXNzICovCisJcm1zX3dvcmQgYXJnMTsJCS8qIEZpcnN0IGFyZ3VtZW50ICovCisJcm1zX3dvcmQgYXJnMjsJCS8qIFNlY29uZCBhcmd1bWVudCAqLworCXJtc193b3JkIGRhdGE7CQkvKiBGdW5jdGlvbi1zcGVjaWZpYyBkYXRhIGFycmF5ICovCit9OworCisvKgorICogIFRoZSBybXNfc3RybV9kZWYgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBhcmFtZXRlcnMgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dAorICogIHN0cmVhbXMsIGFuZCBpcyBwYXNzZWQgdG8gYSBub2RlJ3MgY3JlYXRlIGZ1bmN0aW9uLgorICovCitzdHJ1Y3Qgcm1zX3N0cm1fZGVmIHsKKwlybXNfd29yZCBidWZzaXplOwkvKiBCdWZmZXIgc2l6ZSAoaW4gRFNQIHdvcmRzKSAqLworCXJtc193b3JkIG5idWZzOwkJLyogTWF4IG51bWJlciBvZiBidWZzIGluIHN0cmVhbSAqLworCXJtc193b3JkIHNlZ2lkOwkJLyogU2VnbWVudCB0byBhbGxvY2F0ZSBidWZmZXJzICovCisJcm1zX3dvcmQgYWxpZ247CQkvKiBBbGlnbm1lbnQgZm9yIGFsbG9jYXRlZCBidWZmZXJzICovCisJcm1zX3dvcmQgdGltZW91dDsJLyogVGltZW91dCAobXNlYykgZm9yIGJsb2NraW5nIGNhbGxzICovCisJY2hhciBuYW1lWzFdOwkvKiBEZXZpY2UgTmFtZSAodGVybWluYXRlZCBieSAnXDAnKSAqLworfTsKKworLyogTWVzc2FnZSBub2RlIGNyZWF0ZSBhcmdzIHN0cnVjdHVyZTogKi8KK3N0cnVjdCBybXNfbXNnX2FyZ3MgeworCXJtc193b3JkIG1heF9tc2dzOwkvKiBNYXggIyBzaW11bHRhbmVvdXMgbXNncyB0byBub2RlICovCisJcm1zX3dvcmQgc2VnaWQ7CQkvKiBNZW0gc2VnbWVudCBmb3IgTk9ERV9hbGxvY01zZ0J1ZiAqLworCXJtc193b3JkIG5vdGlmeV90eXBlOwkvKiBUeXBlIG9mIG1lc3NhZ2Ugbm90aWZpY2F0aW9uICovCisJcm1zX3dvcmQgYXJnX2xlbmd0aDsJLyogTGVuZ3RoIChpbiBEU1AgY2hhcnMpIG9mIGFyZyBkYXRhICovCisJcm1zX3dvcmQgYXJnX2RhdGE7CS8qIEFyZyBkYXRhIGZvciBub2RlICovCit9OworCisvKiBQYXJ0aWFsIHRhc2sgY3JlYXRlIGFyZ3Mgc3RydWN0dXJlICovCitzdHJ1Y3Qgcm1zX21vcmVfdGFza19hcmdzIHsKKwlybXNfd29yZCBwcmlvcml0eTsJLyogVGFzaydzIHJ1bnRpbWUgcHJpb3JpdHkgbGV2ZWwgKi8KKwlybXNfd29yZCBzdGFja19zaXplOwkvKiBUYXNrJ3Mgc3RhY2sgc2l6ZSAqLworCXJtc193b3JkIHN5c3N0YWNrX3NpemU7CS8qIFRhc2sncyBzeXN0ZW0gc3RhY2sgc2l6ZSAoNTV4KSAqLworCXJtc193b3JkIHN0YWNrX3NlZzsJLyogTWVtb3J5IHNlZ21lbnQgZm9yIHRhc2sncyBzdGFjayAqLworCXJtc193b3JkIGhlYXBfYWRkcjsJLyogYmFzZSBhZGRyZXNzIG9mIHRoZSBub2RlIG1lbW9yeSBoZWFwIGluCisJCQkJICogZXh0ZXJuYWwgbWVtb3J5IChEU1AgdmlydHVhbCBhZGRyZXNzKSAqLworCXJtc193b3JkIGhlYXBfc2l6ZTsJLyogc2l6ZSBpbiBNQVVzIG9mIHRoZSBub2RlIG1lbW9yeSBoZWFwIGluCisJCQkJICogZXh0ZXJuYWwgbWVtb3J5ICovCisJcm1zX3dvcmQgbWlzYzsJCS8qIE1pc2MgZmllbGQuICBOb3QgdXNlZCBmb3IgJ25vcm1hbCcKKwkJCQkgKiB0YXNrIG5vZGVzOyBmb3IgeERBSVMgc29ja2V0IG5vZGVzCisJCQkJICogc3BlY2lmaWVzIHRoZSBJQUxHX0Z4biBwb2ludGVyLgorCQkJCSAqLworCS8qICMgaW5wdXQgU1RSTSBkZWZpbml0aW9uIHN0cnVjdHVyZXMgKi8KKwlybXNfd29yZCBudW1faW5wdXRfc3RyZWFtczsKK307CisKKyNlbmRpZiAvKiBSTVNfU0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9ybXN0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYzBmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvcm1zdHlwZXMuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogcm1zdHlwZXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIgc2hhcmVkIGRhdGEgdHlwZSBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBSTVNUWVBFU18KKyNkZWZpbmUgUk1TVFlQRVNfCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgdTMyIHJtc193b3JkOworCisjZW5kaWYgLyogUk1TVFlQRVNfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc2VydmljZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zZXJ2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjZjODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc2VydmljZXMuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogc2VydmljZXMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm92aWRlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBvZiBTRVJWSUNFUyBtb2R1bGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgU0VSVklDRVNfCisjZGVmaW5lIFNFUlZJQ0VTXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKy8qCisgKiAgPT09PT09PT0gc2VydmljZXNfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1vZHVsZTsgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQKKyAqICAgICAgcmVhY2hlcyAwLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgU0VSVklDRVMgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqICAgICAgUmVzb3VyY2VzIHVzZWQgYnkgbW9kdWxlIGFyZSBmcmVlZCB3aGVuIGNSZWYgcmVhY2hlcyB6ZXJvLgorICovCitleHRlcm4gdm9pZCBzZXJ2aWNlc19leGl0KHZvaWQpOworCisvKgorICogID09PT09PT09IHNlcnZpY2VzX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBTRVJWSUNFUyBtb2R1bGVzLgorICogIFBhcmFtZXRlcnM6CisgKiAgUmV0dXJuczoKKyAqICAgICAgVFJVRSBpZiBhbGwgbW9kdWxlcyBpbml0aWFsaXplZDsgb3RoZXJ3aXNlIEZBTFNFLgorICogIFJlcXVpcmVzOgorICogIEVuc3VyZXM6CisgKiAgICAgIFNFUlZJQ0VTIG1vZHVsZXMgaW5pdGlhbGl6ZWQuCisgKi8KK2V4dGVybiBib29sIHNlcnZpY2VzX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBTRVJWSUNFU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zdHJtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDY3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybS5oCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogc3RybS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUEJyaWRnZSBTdHJlYW0gTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFNUUk1fCisjZGVmaW5lIFNUUk1fCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3RybWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorCisvKgorICogID09PT09PT09IHN0cm1fYWxsb2NhdGVfYnVmZmVyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgZGF0YSBidWZmZXIocykgZm9yIHVzZSB3aXRoIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RybXJlczogICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICB1c2l6ZTogICAgICAgICAgU2l6ZSAoR1BQIGJ5dGVzKSBvZiB0aGUgYnVmZmVyKHMpLgorICogICAgICBudW1fYnVmczogICAgICAgTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUuCisgKiAgICAgIGFwX2J1ZmZlcjogICAgICAgQXJyYXkgdG8gaG9sZCBidWZmZXIgYWRkcmVzc2VzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVycy4KKyAqICAgICAgLUVJTlZBTDogICAgICB1c2l6ZSBtdXN0IGJlID4gMCBieXRlcy4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgYXBfYnVmZmVyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2FsbG9jYXRlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtcmVzLAorCQkJCSAgICAgICB1MzIgdXNpemUsCisJCQkJICAgICAgIHU4ICoqYXBfYnVmZmVyLAorCQkJCSAgICAgICB1MzIgbnVtX2J1ZnMsCisJCQkJICAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIHN0cmVhbSBvcGVuZWQgd2l0aCBzdHJtX29wZW4oKS4KKyAqICBQYXJhbWV0ZXI6CisgKiAgICAgIHN0cm1yZXM6ICAgICAgICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUElQRTogICBTb21lIGRhdGEgYnVmZmVycyBpc3N1ZWQgdG8gdGhlIHN0cmVhbSBoYXZlIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgYmVlbiByZWNsYWltZWQuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIHRvIGNsb3NlIHN0cmVhbS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fY2xvc2Uoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJCSAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCk7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBTVFJNIG1hbmFnZXIgb2JqZWN0LiBUaGlzIG9iamVjdCBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqICAgICAgZGV2aWNlIG5lZWRlZCB0byBvcGVuIHN0cmVhbXMuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RybV9tYW46ICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIGhhbmRsZSB0byBTVFJNIG1hbmFnZXIgb2JqZWN0IG9uCisgKiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuCisgKiAgICAgIGRldl9vYmo6ICAgICAgICAgICBEZXZpY2UgZm9yIHRoaXMgcHJvY2Vzc29yLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzOworICogICAgICAtRU5PTUVNOiAgICBJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLgorICogICAgICAtRVBFUk06ICAgICAgR2VuZXJhbCBmYWlsdXJlLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtX21hbiAhPSBOVUxMLgorICogICAgICBkZXZfb2JqICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgIFZhbGlkICpzdHJtX21hbi4KKyAqICAgICAgZXJyb3I6ICAgICAgICAgICpzdHJtX21hbiA9PSBOVUxMLgorICovCitleHRlcm4gaW50IHN0cm1fY3JlYXRlKHN0cnVjdCBzdHJtX21nciAqKnN0cm1fbWFuLAorCQkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmopOworCisvKgorICogID09PT09PT09IHN0cm1fZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIHRoZSBTVFJNIE9iamVjdC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzdHJtX21ncl9vYmo6ICAgICAgIEhhbmRsZSB0byBTVFJNIG1hbmFnZXIgb2JqZWN0IGZyb20gc3RybV9jcmVhdGUuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgVmFsaWQgc3RybV9tZ3Jfb2JqLgorICogIEVuc3VyZXM6CisgKiAgICAgIHN0cm1fbWdyX29iaiBpcyBub3QgdmFsaWQuCisgKi8KK2V4dGVybiB2b2lkIHN0cm1fZGVsZXRlKHN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jfb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBTVFJNIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBzdWNjZXNzZnVsbHkgY2FsbGVkIGJlZm9yZS4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gdm9pZCBzdHJtX2V4aXQodm9pZCk7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9mcmVlX2J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgYnVmZmVyKHMpIGFsbG9jYXRlZCB3aXRoIHN0cm1fYWxsb2NhdGVfYnVmZmVyLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RybXJlczogICAgIFN0cmVhbSByZXNvdXJjZSBpbmZvIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICBhcF9idWZmZXI6ICAgICAgIEFycmF5IGNvbnRhaW5pbmcgYnVmZmVyIGFkZHJlc3Nlcy4KKyAqICAgICAgbnVtX2J1ZnM6ICAgICAgIE51bWJlciBvZiBidWZmZXJzIHRvIGJlIGZyZWVkLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbSBoYW5kbGUuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gZnJlZSBidWZmZXJzLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBhcF9idWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fZnJlZV9idWZmZXIoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJCQkgICB1OCAqKmFwX2J1ZmZlciwgdTMyIG51bV9idWZzLAorCQkJCSAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2V2ZW50X2hhbmRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBzdHJlYW0ncyB1c2VyIGV2ZW50IGhhbmRsZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gY2xvc2luZworICogICAgICBhIHN0cmVhbSwgc28gdGhlIGV2ZW50IGNhbiBiZSBjbG9zZWQuCisgKiAgUGFyYW1ldGVyOgorICogICAgICBzdHJlYW1fb2JqOiAgICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgcGhfZXZlbnQ6ICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBldmVudCBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBoX2V2ZW50ICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2dldF9ldmVudF9oYW5kbGUoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCQl2b2lkICoqcGhfZXZlbnQpOworCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0uIFVzZXIncyBkc3Bfc3RyZWFtaW5mbyBpcyBjb250YWluZWQKKyAqICAgICAgaW4gc3RyZWFtX2luZm8gc3RydWN0LiBzdHJlYW1faW5mbyBhbHNvIGNvbnRhaW5zIEJyaWRnZSBwcml2YXRlIGluZm8uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgICAgICBTdHJlYW0gaGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHN0cmVhbV9pbmZvOiAgICAgICAgTG9jYXRpb24gdG8gc3RvcmUgc3RyZWFtIGluZm8gb24gb3V0cHV0LgorICogICAgICB1U3RlYW1JbmZvU2l6ZTogICAgIFNpemUgb2YgdXNlcidzIGRzcF9zdHJlYW1pbmZvIHN0cnVjdHVyZS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgICAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FSU5WQUw6ICAgICAgICAgIHN0cmVhbV9pbmZvX3NpemUgPCBzaXplb2YoZHNwX3N0cmVhbWluZm8pLgorICogICAgICAtRVBFUk06ICAgICAgICAgIFVuYWJsZSB0byBnZXQgc3RyZWFtIGluZm8uCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHN0cmVhbV9pbmZvICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGludCBzdHJtX2dldF9pbmZvKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCQlzdHJ1Y3Qgc3RyZWFtX2luZm8gKnN0cmVhbV9pbmZvLAorCQkJCXUzMiBzdHJlYW1faW5mb19zaXplKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lkbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJZGxlIGEgc3RyZWFtIGFuZCBvcHRpb25hbGx5IGZsdXNoIG91dHB1dCBkYXRhIGJ1ZmZlcnMuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hfZGF0YSBpcyBUUlVFLCBhbGwgZGF0YSBjdXJyZW50bHkKKyAqICAgICAgZW5xdWV1ZWQgd2lsbCBiZSBkaXNjYXJkZWQuCisgKiAgICAgIElmIHRoaXMgaXMgYW4gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hfZGF0YSBpcyBGQUxTRSwgdGhpcyBmdW5jdGlvbgorICogICAgICB3aWxsIGJsb2NrIHVudGlsIGFsbCBjdXJyZW50bHkgYnVmZmVyZWQgZGF0YSBpcyBvdXRwdXQsIG9yIHRoZSB0aW1lb3V0CisgKiAgICAgIHNwZWNpZmllZCBoYXMgYmVlbiByZWFjaGVkLgorICogICAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBzdHJtX2lkbGUoKSwgYWxsIGJ1ZmZlcnMgY2FuIGltbWVkaWF0ZWx5CisgKiAgICAgIGJlIHJlY2xhaW1lZC4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBzdHJlYW1fb2JqOiAgICAgU3RyZWFtIGhhbmRsZSByZXR1cm5lZCBmcm9tIHN0cm1fb3BlbigpLgorICogICAgICBmbHVzaF9kYXRhOiAgICAgSWYgVFJVRSwgZGlzY2FyZCBvdXRwdXQgYnVmZmVycy4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW1fb2JqLgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSB0aGUgc3RyZWFtIGNvdWxkIGJlIGlkbGVkLgorICogICAgICAtRVBFUk06ICAgICAgVW5hYmxlIHRvIGlkbGUgc3RyZWFtLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9pZGxlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgYm9vbCBmbHVzaF9kYXRhKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBTVFJNIG1vZHVsZS4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIFRSVUUgaWYgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCBGQUxTRSBvdGhlcndpc2UuCisgKiAgUmVxdWlyZXM6CisgKiAgRW5zdXJlczoKKyAqLworZXh0ZXJuIGJvb2wgc3RybV9pbml0KHZvaWQpOworCisvKgorICogID09PT09PT09IHN0cm1faXNzdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZW5kIGEgYnVmZmVyIG9mIGRhdGEgdG8gYSBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgICAgICBTdHJlYW0gaGFuZGxlIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHBidWY6ICAgICAgICAgICAgICAgUG9pbnRlciB0byBidWZmZXIgb2YgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBzdHJlYW0uCisgKiAgICAgIHVsX2J5dGVzOiAgICAgICAgICAgIE51bWJlciBvZiBieXRlcyBvZiBkYXRhIGluIHRoZSBidWZmZXIuCisgKiAgICAgIHVsX2J1Zl9zaXplOiAgICAgICAgICBBY3R1YWwgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisgKiAgICAgIGR3X2FyZzogICAgICAgICAgICAgIEEgdXNlciBhcmd1bWVudCB0aGF0IHRyYXZlbHMgd2l0aCB0aGUgYnVmZmVyLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgIEludmFsaWQgc3RyZWFtX29iai4KKyAqICAgICAgLUVOT1NSOiAgICBUaGUgc3RyZWFtIGlzIGZ1bGwuCisgKiAgICAgIC1FUEVSTTogICAgICAgICAgRmFpbHVyZSBvY2N1cnJlZCwgdW5hYmxlIHRvIGlzc3VlIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGJ1ZiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9pc3N1ZShzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmosIHU4ICogcGJ1ZiwKKwkJCSAgICAgdTMyIHVsX2J5dGVzLCB1MzIgdWxfYnVmX3NpemUsIHUzMiBkd19hcmcpOworCisvKgorICogID09PT09PT09IHN0cm1fb3BlbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE9wZW4gYSBzdHJlYW0gZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGRhdGEgYnVmZmVycyB0by9mcm9tIGEgdGFzayBvZgorICogICAgICBEQUlTIHNvY2tldCBub2RlIG9uIHRoZSBEU1AuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgaG5vZGU6ICAgICAgICAgIE5vZGUgaGFuZGxlIHJldHVybmVkIGZyb20gbm9kZV9hbGxvY2F0ZSgpLgorICogICAgICBkaXI6ICAgICAgICAgICBEU1BfVE9OT0RFIG9yIERTUF9GUk9NTk9ERS4KKyAqICAgICAgaW5kZXg6ICAgICAgICAgU3RyZWFtIGluZGV4LgorICogICAgICBwYXR0cjogICAgICAgICAgUG9pbnRlciB0byBzdHJ1Y3R1cmUgY29udGFpbmluZyBhdHRyaWJ1dGVzIHRvIGJlCisgKiAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkIHRvIHN0cmVhbS4gQ2Fubm90IGJlIE5VTEwuCisgKiAgICAgIHN0cm1yZXM6ICAgICBMb2NhdGlvbiB0byBzdG9yZSBzdHJlYW0gcmVzdW9yY2UgaW5mbyBoYW5kbGUgb24gb3V0cHV0LgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIGhub2RlLgorICogICAgICAtRVBFUk06IEludmFsaWQgZGlyZWN0aW9uLgorICogICAgICAgICAgICAgIGhub2RlIGlzIG5vdCBhIHRhc2sgb3IgREFJUyBzb2NrZXQgbm9kZS4KKyAqICAgICAgICAgICAgICBVbmFibGUgdG8gb3BlbiBzdHJlYW0uCisgKiAgICAgIC1FSU5WQUw6ICAgICBJbnZhbGlkIGluZGV4LgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtcmVzICE9IE5VTEwuCisgKiAgICAgIHBhdHRyICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpzdHJtcmVzIGlzIHZhbGlkLgorICogICAgICBlcnJvcjogICAgICAgICAgKnN0cm1yZXMgPT0gTlVMTC4KKyAqLworZXh0ZXJuIGludCBzdHJtX29wZW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGRpciwKKwkJCSAgICB1MzIgaW5kZXgsIHN0cnVjdCBzdHJtX2F0dHIgKnBhdHRyLAorCQkJICAgIHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkJICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpOworCisvKgorICogID09PT09PT09IHN0cm1fcHJlcGFyZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGEgZGF0YSBidWZmZXIgbm90IGFsbG9jYXRlZCBieSBEU1BTdHJlYW1fQWxsb2NhdGVCdWZmZXJzKCkKKyAqICAgICAgZm9yIHVzZSB3aXRoIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgdXNpemU6ICAgICAgICAgIFNpemUgKEdQUCBieXRlcykgb2YgdGhlIGJ1ZmZlci4KKyAqICAgICAgcGJ1ZmZlcjogICAgICAgIEJ1ZmZlciBhZGRyZXNzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gcHJlcGFyZSBidWZmZXIuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIHN0cm1faW5pdCh2b2lkKSBjYWxsZWQuCisgKiAgICAgIHBidWZmZXIgIT0gTlVMTC4KKyAqICBFbnN1cmVzOgorICovCitleHRlcm4gaW50IHN0cm1fcHJlcGFyZV9idWZmZXIoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCSAgICAgIHUzMiB1c2l6ZSwgdTggKnBidWZmZXIpOworCisvKgorICogID09PT09PT09IHN0cm1fcmVjbGFpbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3QgYSBidWZmZXIgYmFjayBmcm9tIGEgc3RyZWFtLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHN0cmVhbV9vYmo6ICAgICAgICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgYnVmX3B0cjogICAgICAgIExvY2F0aW9uIHRvIHN0b3JlIHBvaW50ZXIgdG8gcmVjbGFpbWVkIGJ1ZmZlci4KKyAqICAgICAgbmJ5dGVzOiAgICAgICAgIExvY2F0aW9uIHdoZXJlIG51bWJlciBvZiBieXRlcyBvZiBkYXRhIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHdpbGwgYmUgd3JpdHRlbi4KKyAqICAgICAgYnVmZl9zaXplOiAgICAgIExvY2F0aW9uIHdoZXJlIGFjdHVhbCBidWZmZXIgc2l6ZSB3aWxsIGJlIHdyaXR0ZW4uCisgKiAgICAgIHBkd19hcmc6ICAgICAgICAgTG9jYXRpb24gd2hlcmUgdXNlciBhcmd1bWVudCB0aGF0IHRyYXZlbHMgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciB3aWxsIGJlIHdyaXR0ZW4uCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgIFN1Y2Nlc3MuCisgKiAgICAgIC1FRkFVTFQ6ICAgIEludmFsaWQgc3RyZWFtX29iai4KKyAqICAgICAgLUVUSU1FOiAgIEEgdGltZW91dCBvY2N1cnJlZCBiZWZvcmUgYSBidWZmZXIgY291bGQgYmUKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZC4KKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUgb2NjdXJyZWQsIHVuYWJsZSB0byByZWNsYWltIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgYnVmX3B0ciAhPSBOVUxMLgorICogICAgICBuYnl0ZXMgIT0gTlVMTC4KKyAqICAgICAgcGR3X2FyZyAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9yZWNsYWltKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCSAgICAgICB1OCAqKmJ1Zl9wdHIsIHUzMiAqIG5ieXRlcywKKwkJCSAgICAgICB1MzIgKmJ1ZmZfc2l6ZSwgdTMyICpwZHdfYXJnKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIHRvIGJlIG5vdGlmaWVkIG9uIHNwZWNpZmljIGV2ZW50cyBmb3IgdGhpcyBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgYnkgc3RybV9vcGVuKCkuCisgKiAgICAgIGV2ZW50X21hc2s6ICAgICBNYXNrIG9mIHR5cGVzIG9mIGV2ZW50cyB0byBiZSBub3RpZmllZCBhYm91dC4KKyAqICAgICAgbm90aWZ5X3R5cGU6ICAgIFR5cGUgb2Ygbm90aWZpY2F0aW9uIHRvIGJlIHNlbnQuCisgKiAgICAgIGhub3RpZmljYXRpb246ICBIYW5kbGUgdG8gYmUgdXNlZCBmb3Igbm90aWZpY2F0aW9uLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FTk9NRU06ICAgIEluc3VmZmljaWVudCBtZW1vcnkgb24gR1BQLgorICogICAgICAtRUlOVkFMOiAgICAgZXZlbnRfbWFzayBpcyBpbnZhbGlkLgorICogICAgICAtRU5PU1lTOiAgIE5vdGlmaWNhdGlvbiB0eXBlIHNwZWNpZmllZCBieSBub3RpZnlfdHlwZSBpcyBub3QKKyAqICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgaG5vdGlmaWNhdGlvbiAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLAorCQkJCSAgICAgICB1MzIgZXZlbnRfbWFzaywgdTMyIG5vdGlmeV90eXBlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbgorCQkJCSAgICAgICAqaG5vdGlmaWNhdGlvbik7CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9zZWxlY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZWxlY3QgYSByZWFkeSBzdHJlYW0uCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3RybV90YWI6ICAgICAgIEFycmF5IG9mIHN0cmVhbSBoYW5kbGVzIHJldHVybmVkIGZyb20gc3RybV9vcGVuKCkuCisgKiAgICAgIHN0cm1zOiAgICAgICAgICBOdW1iZXIgb2Ygc3RyZWFtIGhhbmRsZXMgaW4gYXJyYXkuCisgKiAgICAgIHBtYXNrOiAgICAgICAgICBMb2NhdGlvbiB0byBzdG9yZSBtYXNrIG9mIHJlYWR5IHN0cmVhbXMgb24gb3V0cHV0LgorICogICAgICB1dGltZW91dDogICAgICAgVGltZW91dCB2YWx1ZSAobWlsbGlzZWNvbmRzKS4KKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVET006ICAgICBzdHJtcyBvdXQgb2YgcmFuZ2UuCisKKyAqICAgICAgLUVGQVVMVDogICAgSW52YWxpZCBzdHJlYW0gaGFuZGxlIGluIGFycmF5LgorICogICAgICAtRVRJTUU6ICAgQSB0aW1lb3V0IG9jY3VycmVkIGJlZm9yZSBhIHN0cmVhbSBiZWNhbWUgcmVhZHkuCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gc2VsZWN0IGEgc3RyZWFtLgorICogIFJlcXVpcmVzOgorICogICAgICBzdHJtX2luaXQodm9pZCkgY2FsbGVkLgorICogICAgICBzdHJtX3RhYiAhPSBOVUxMLgorICogICAgICBzdHJtcyA+IDAuCisgKiAgICAgIHBtYXNrICE9IE5VTEwuCisgKiAgRW5zdXJlczoKKyAqICAgICAgMDogICAgICAgICpwbWFzayAhPSAwIHx8IHV0aW1lb3V0ID09IDAuCisgKiAgICAgIEVycm9yOiAgICAgICAgICAqcG1hc2sgPT0gMC4KKyAqLworZXh0ZXJuIGludCBzdHJtX3NlbGVjdChzdHJ1Y3Qgc3RybV9vYmplY3QgKipzdHJtX3RhYiwKKwkJCSAgICAgIHUzMiBzdHJtcywgdTMyICpwbWFzaywgdTMyIHV0aW1lb3V0KTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX3VucHJlcGFyZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVbnByZXBhcmUgYSBkYXRhIGJ1ZmZlciB0aGF0IHdhcyBwcmV2aW91c2x5IHByZXBhcmVkIGZvciBhIHN0cmVhbQorICogICAgICB3aXRoIERTUFN0cmVhbV9QcmVwYXJlQnVmZmVyKCksIGFuZCB0aGF0IHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgd2l0aAorICogICAgICB0aGUgc3RyZWFtLgorICogIFBhcmFtZXRlcjoKKyAqICAgICAgc3RyZWFtX29iajogICAgIFN0cmVhbSBoYW5kbGUgcmV0dXJuZWQgZnJvbSBzdHJtX29wZW4oKS4KKyAqICAgICAgdXNpemU6ICAgICAgICAgIFNpemUgKEdQUCBieXRlcykgb2YgdGhlIGJ1ZmZlci4KKyAqICAgICAgcGJ1ZmZlcjogICAgICAgIEJ1ZmZlciBhZGRyZXNzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICBTdWNjZXNzLgorICogICAgICAtRUZBVUxUOiAgICBJbnZhbGlkIHN0cmVhbV9vYmouCisgKiAgICAgIC1FUEVSTTogICAgICBGYWlsdXJlIG9jY3VycmVkLCB1bmFibGUgdG8gdW5wcmVwYXJlIGJ1ZmZlci4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgc3RybV9pbml0KHZvaWQpIGNhbGxlZC4KKyAqICAgICAgcGJ1ZmZlciAhPSBOVUxMLgorICogIEVuc3VyZXM6CisgKi8KK2V4dGVybiBpbnQgc3RybV91bnByZXBhcmVfYnVmZmVyKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCQkJdTMyIHVzaXplLCB1OCAqcGJ1ZmZlcik7CisKKyNlbmRpZiAvKiBTVFJNXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3RybWRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYzZjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3N0cm1kZWZzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIHN0cm1kZWZzLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogR2xvYmFsIFNUUk0gY29uc3RhbnRzIGFuZCB0eXBlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFNUUk1ERUZTXworI2RlZmluZSBTVFJNREVGU18KKworI2RlZmluZSBTVFJNX01BWEVWVE5BTUVMRU4gICAgICAzMgorCitzdHJ1Y3Qgc3RybV9tZ3I7CisKK3N0cnVjdCBzdHJtX29iamVjdDsKKworc3RydWN0IHN0cm1fYXR0ciB7CisJdm9pZCAqdXNlcl9ldmVudDsKKwljaGFyICpwc3RyX2V2ZW50X25hbWU7CisJdm9pZCAqdmlydF9iYXNlOwkvKiBQcm9jZXNzIHZpcnR1YWwgYmFzZSBhZGRyZXNzIG9mCisJCQkJICogbWFwcGVkIFNNICovCisJdTMyIHVsX3ZpcnRfc2l6ZTsJLyogU2l6ZSBvZiB2aXJ0dWFsIHNwYWNlIGluIGJ5dGVzICovCisJc3RydWN0IGRzcF9zdHJlYW1hdHRyaW4gKnN0cmVhbV9hdHRyX2luOworfTsKKworc3RydWN0IHN0cmVhbV9pbmZvIHsKKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIHRyYW5zcG9ydCBtb2RlIG9mCisJCQkJCSAqIHN0cmVhbShETUEsIFpFUk9DT1BZLi4pICovCisJdTMyIHNlZ21lbnRfaWQ7CQkvKiBTZWdtZW50IHN0cm0gYWxsb2NzIGZyb20uIDAgaXMgbG9jYWwgbWVtICovCisJdm9pZCAqdmlydF9iYXNlOwkvKiAiICAgICAgIiBTdHJlYW0ncHJvY2VzcyB2aXJ0IGJhc2UgKi8KKwlzdHJ1Y3QgZHNwX3N0cmVhbWluZm8gKnVzZXJfc3RybTsJLyogVXNlcidzIHN0cmVhbSBpbmZvcm1hdGlvbgorCQkJCQkJICogcmV0dXJuZWQgKi8KK307CisKKyNlbmRpZiAvKiBTVFJNREVGU18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS9zeW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3luYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjUxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvc3luYy5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogc3luYy5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFByb3ZpZGUgc3luY2hyb25pemF0aW9uIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX1NZTkNfSAorI2RlZmluZSBfU1lOQ19ICisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKworLyogU3BlY2lhbCB0aW1lb3V0IHZhbHVlIGluZGljYXRpbmcgYW4gaW5maW5pdGUgd2FpdDogKi8KKyNkZWZpbmUgU1lOQ19JTkZJTklURSAgMHhmZmZmZmZmZgorCisvKioKKyAqIHN0cnVjdCBzeW5jX29iamVjdCAtIHRoZSBiYXNpYyBzeW5jX29iamVjdCBzdHJ1Y3R1cmUKKyAqIEBjb21wOgl1c2UgdG8gc2lnbmFsIGV2ZW50cworICogQG11bHRpX2NvbXA6CXVzZSB0byBzaWduYWwgbXVsdGlwbGUgZXZlbnRzLgorICoKKyAqLworc3RydWN0IHN5bmNfb2JqZWN0eworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisJc3RydWN0IGNvbXBsZXRpb24gKm11bHRpX2NvbXA7Cit9OworCisvKioKKyAqIHN5bmNfaW5pdF9ldmVudCgpIC0gc2V0IGluaXRpYWwgc3RhdGUgZm9yIGEgc3luY19ldmVudCBlbGVtZW50CisgKiBAZXZlbnQ6CWV2ZW50IHRvIGJlIGluaXRpYWxpemVkLgorICoKKyAqIFNldCB0aGUgaW5pdGlhbCBzdGF0ZSBmb3IgYSBzeW5jX2V2ZW50IGVsZW1lbnQuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHN5bmNfaW5pdF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KQoreworCWluaXRfY29tcGxldGlvbigmZXZlbnQtPmNvbXApOworCWV2ZW50LT5tdWx0aV9jb21wID0gTlVMTDsKK30KKworLyoqCisgKiBzeW5jX3Jlc2V0X2V2ZW50KCkgLSByZXNldCBhIHN5bmNfZXZlbnQgZWxlbWVudAorICogQGV2ZW50OglldmVudCB0byBiZSByZXNldC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0IHRvIHRoZSBpbml0aWFsIHN0YXRlIHRvIEBldmVudC4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3luY19yZXNldF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KQoreworCUlOSVRfQ09NUExFVElPTihldmVudC0+Y29tcCk7CisJZXZlbnQtPm11bHRpX2NvbXAgPSBOVUxMOworfQorCisvKioKKyAqIHN5bmNfc2V0X2V2ZW50KCkgLSBzZXQgb3Igc2lnbmFsIGFuZCBzcGVjaWZpZWQgZXZlbnQKKyAqIEBldmVudDoJRXZlbnQgdG8gYmUgc2V0Li4KKyAqCisgKiBzZXQgdGhlIEBldmVudCwgaWYgdGhlcmUgaXMgYW4gdGhyZWFkIHdhaXRpbmcgZm9yIHRoZSBldmVudAorICogaXQgd2lsbCBiZSB3YWtlbiB1cCwgdGhpcyBmdW5jdGlvbiBvbmx5IHdha2VzIG9uZSB0aHJlYWQuCisgKi8KKwordm9pZCBzeW5jX3NldF9ldmVudChzdHJ1Y3Qgc3luY19vYmplY3QgKmV2ZW50KTsKKworLyoqCisgKiBzeW5jX3dhaXRfb25fZXZlbnQoKSAtIHdhaXRzIGZvciBhIGV2ZW50IHRvIGJlIHNldC4KKyAqIEBldmVudDoJZXZlbnRzIHRvIHdhaXQgZm9yIGl0LgorICogQHRpbWVvdXQJdGltZW91dCBvbiB3YWl0aW5nIGZvciB0aGUgZXZldG4uCisgKgorICogVGhpcyBmdW5jdGlvcyB3aWxsIHdhaXQgdW50aWwgQGV2ZW50IGlzIHNldCBvciB1bnRpbCB0aW1lb3V0LiBJbiBjYXNlIG9mCisgKiBzdWNjZXNzIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZAorICogaW4gY2FzZSBvZiB0aW1lb3V0IHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRVRJTUUKKyAqLworCitzdGF0aWMgaW5saW5lIGludCBzeW5jX3dhaXRfb25fZXZlbnQoc3RydWN0IHN5bmNfb2JqZWN0ICpldmVudCwKKwkJCQkJCQl1bnNpZ25lZCB0aW1lb3V0KQoreworCXJldHVybiB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmV2ZW50LT5jb21wLAorCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSA/IDAgOiAtRVRJTUU7Cit9CisKKy8qKgorICogc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cygpIC0gd2FpdHMgZm9yIG11bHRpcGxlIGV2ZW50cyB0byBiZSBzZXQuCisgKiBAZXZlbnRzOglBcnJheSBvZiBldmVudHMgdG8gd2FpdCBmb3IgdGhlbS4KKyAqIEBjb3VudDoJbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSBhcnJheS4KKyAqIEB0aW1lb3V0CXRpbWVvdXQgb24gd2FpdGluZyBmb3IgdGhlIGV2ZXRucy4KKyAqIEBwdV9pbmRleAlpbmRleCBvZiB0aGUgZXZlbnQgc2V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb3Mgd2lsbCB3YWl0IHVudGlsIGFueSBvZiB0aGUgYXJyYXkgZWxlbWVudCBpcyBzZXQgb3IgdW50aWwKKyAqIHRpbWVvdXQuIEluIGNhc2Ugb2Ygc3VjY2VzcyB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMCBhbmQKKyAqIEBwdV9pbmRleCB3aWxsIHN0b3JlIHRoZSBpbmRleCBvZiB0aGUgYXJyYXkgZWxlbWVudCBzZXQgYW5kIGluIGNhc2UKKyAqIG9mIHRpbWVvdXQgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FVElNRS4KKyAqLworCitpbnQgc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3QgKipldmVudHMsCisJCQkJICAgICB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKKwkJCQkgICAgIHVuc2lnbmVkICppbmRleCk7CisKKyNlbmRpZiAvKiBfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXRpbGRlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9pbmNsdWRlL2RzcGJyaWRnZS91dGlsZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZTU0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXRpbGRlZnMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogdXRpbGRlZnMuaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBHbG9iYWwgVVRJTCBjb25zdGFudHMgYW5kIHR5cGVzLCBzaGFyZWQgYmV0d2VlbiBEU1AgQVBJIGFuZCBEU1BTWVMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBVVElMREVGU18KKyNkZWZpbmUgVVRJTERFRlNfCisKKy8qIGNvbnN0YW50cyB0YWtlbiBmcm9tIGNvbmZpZ21nLmggKi8KKyNkZWZpbmUgVVRJTF9NQVhNRU1SRUdTICAgICA5CisjZGVmaW5lIFVUSUxfTUFYSU9QT1JUUyAgICAgMjAKKyNkZWZpbmUgVVRJTF9NQVhJUlFTICAgICAgICA3CisjZGVmaW5lIFVUSUxfTUFYRE1BQ0hOTFMgICAgNworCisvKiBtaXNjLiBjb25zdGFudHMgKi8KKyNkZWZpbmUgVVRJTF9NQVhBUkdWUyAgICAgICAxMAorCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBpbXBvcnRhbnQgaW5mbyAqLworc3RydWN0IHV0aWxfc3lzaW5mbyB7CisJLyogR3JhbnVsYXJpdHkgb2YgcGFnZSBwcm90ZWN0aW9uOyB1c3VhbGx5IDFrIG9yIDRrICovCisJdTMyIGR3X3BhZ2Vfc2l6ZTsKKwl1MzIgZHdfYWxsb2NhdGlvbl9ncmFudWxhcml0eTsJLyogVk0gZ3JhbnVsYXJpdHksIHVzdWFsbHkgNjRLICovCisJdTMyIGR3X251bWJlcl9vZl9wcm9jZXNzb3JzOwkvKiBVc2VkIGFzIHNhbml0eSBjaGVjayAqLworfTsKKworI2VuZGlmIC8qIFVUSUxERUZTXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3V1aWR1dGlsLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvdXVpZHV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTk5NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3V1aWR1dGlsLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHV1aWR1dGlsLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzcGVjaWZpY2F0aW9uIG9mIFVVSUQgaGVscGVyIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIFVVSURVVElMXworI2RlZmluZSBVVUlEVVRJTF8KKworI2RlZmluZSBNQVhVVUlETEVOICAzNworCisvKgorICogID09PT09PT09IHV1aWRfdXVpZF90b19zdHJpbmcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb252ZXJ0cyBhIGRzcF91dWlkIHRvIGFuIEFOU0kgc3RyaW5nLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIHV1aWRfb2JqOiAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgICAgIHN6X3V1aWQ6ICAgIFBvaW50ZXIgdG8gYSBidWZmZXIgdG8gcmVjZWl2ZSBhIE5VTEwtdGVybWluYXRlZCBVVUlECisgKiAgICAgICAgICAgICAgICAgIHN0cmluZy4KKyAqICAgICAgc2l6ZToJICAgIE1heGltdW0gc2l6ZSBvZiB0aGUgc3pfdXVpZCBzdHJpbmcuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXVpZF9vYmogJiBzel91dWlkIGFyZSBub24tTlVMTCB2YWx1ZXMuCisgKiAgRW5zdXJlczoKKyAqICAgICAgTGVuZ2h0aCBvZiBzel91dWlkIGlzIGxlc3MgdGhhbiBNQVhVVUlETEVOLgorICogIERldGFpbHM6CisgKiAgICAgIFVVSUQgc3RyaW5nIGxpbWl0IGN1cnJlbnRseSBzZXQgYXQgTUFYVVVJRExFTi4KKyAqLwordm9pZCB1dWlkX3V1aWRfdG9fc3RyaW5nKHN0cnVjdCBkc3BfdXVpZCAqdXVpZF9vYmosIGNoYXIgKnN6X3V1aWQsCisJCQkgczMyIHNpemUpOworCisvKgorICogID09PT09PT09IHV1aWRfdXVpZF9mcm9tX3N0cmluZyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbnZlcnRzIGFuIEFOU0kgc3RyaW5nIHRvIGEgZHNwX3V1aWQuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgc3pfdXVpZDogICAgUG9pbnRlciB0byBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgICAgIHV1aWRfb2JqOiAgICAgIFBvaW50ZXIgdG8gYSBkc3BfdXVpZCBvYmplY3QuCisgKiAgUmV0dXJuczoKKyAqICBSZXF1aXJlczoKKyAqICAgICAgdXVpZF9vYmogJiBzel91dWlkIGFyZSBub24tTlVMTCB2YWx1ZXMuCisgKiAgRW5zdXJlczoKKyAqICBEZXRhaWxzOgorICogICAgICBXZSBhc3N1bWUgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIFVVSUQgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorICogICAgICAiMTIzNDU2NzhfMTIzNF8xMjM0XzEyMzRfMTIzNDU2Nzg5YWJjIi4KKyAqLworZXh0ZXJuIHZvaWQgdXVpZF91dWlkX2Zyb21fc3RyaW5nKGNoYXIgKnN6X3V1aWQsCisJCQkJICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqKTsKKworI2VuZGlmIC8qIFVVSURVVElMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3dkdC5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMDBiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2Uvd2R0LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIHdkdC5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIElPIGRpc3BhdGNoZXIgZm9yIGEgc2hhcmVkIG1lbW9yeSBjaGFubmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpZm5kZWYgX19EU1BfV0RUM19IXworI2RlZmluZSBfX0RTUF9XRFQzX0hfCisKKy8qIFdEVCBkZWZpbmVzICovCisjZGVmaW5lIE9NQVAzX1dEVDNfSVNSX09GRlNFVAkweDAwMTgKKworCisvKioKKyAqIHN0cnVjdCBkc3Bfd2R0X3NldHRpbmcgLSB0aGUgYmFzaWMgZHNwX3dkdF9zZXR0aW5nIHN0cnVjdHVyZQorICogQHJlZ19iYXNlOglwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSB3ZHQgcmVnaXN0ZXJzCisgKiBAc21fd2R0Oglwb2ludGVyIHRvIGZsYWdzIGluIHNoYXJlZCBtZW1vcnkKKyAqIEB3ZHQzX3Rhc2tsZXQJdGFza2xldCB0byBtYW5hZ2Ugd2R0IGV2ZW50CisgKiBAZmNsawkJaGFuZGxlIHRvIHdkdDMgZnVuY3Rpb25hbCBjbG9jaworICogQGljbGsJCWhhbmRsZSB0byB3ZHQzIGludGVyZmFjZSBjbG9jaworICoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uIHRvIG1hbmFnZSB3ZHQzLgorICovCisKK3N0cnVjdCBkc3Bfd2R0X3NldHRpbmcgeworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CisJc3RydWN0IHNobSAqc21fd2R0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB3ZHQzX3Rhc2tsZXQ7CisJc3RydWN0IGNsayAqZmNsazsKKwlzdHJ1Y3QgY2xrICppY2xrOworfTsKKworLyoqCisgKiBkc3Bfd2R0X2luaXQoKSAtIGluaXRpYWxpemUgd2R0MyBtb2R1bGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWxpemUgdG8gd2R0MyBtb2R1bGUsIHNvIHRoYXQKKyAqIG90aGVyIHdkdDMgZnVuY3Rpb24gY2FuIGJlIHVzZWQuCisgKi8KK2ludCBkc3Bfd2R0X2luaXQodm9pZCk7CisKKy8qKgorICogZHNwX3dkdF9leGl0KCkgLSBpbml0aWFsaXplIHdkdDMgbW9kdWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgZm9yIHdkdDMgbW9kdWxlLgorICovCit2b2lkIGRzcF93ZHRfZXhpdCh2b2lkKTsKKworLyoqCisgKiBkc3Bfd2R0X2VuYWJsZSgpIC0gZW5hYmxlL2Rpc2FibGUgd2R0MworICogQGVuYWJsZToJYm9vbCB2YWx1ZSB0byBlbmFibGUvZGlzYWJsZSB3ZHQzCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzIG9yIGRpc2FibGVzIHdkdDMgYmFzZSBvbiBAZW5hYmxlIHZhbHVlLgorICoKKyAqLwordm9pZCBkc3Bfd2R0X2VuYWJsZShib29sIGVuYWJsZSk7CisKKy8qKgorICogZHNwX3dkdF9zbV9zZXQoKSAtIHN0b3JlIHBvaW50ZXIgdG8gdGhlIHNoYXJlIG1lbW9yeQorICogQGRhdGE6CQlwb2ludGVyIHRvIGRzcGJyaWRnZSBzaGFyZSBtZW1vcnkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcGFzcyBhIHZhbGlkIHBvaW50ZXIgdG8gc2hhcmUgbWVtb3J5LAorICogc28gdGhhdCB0aGUgZmxhZ3MgY2FuIGJlIHNldCBpbiBvcmRlciBEU1Agc2lkZSBjYW4gcmVhZCB0aGVtLgorICoKKyAqLwordm9pZCBkc3Bfd2R0X3NtX3NldCh2b2lkICpkYXRhKTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmwuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDMxN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hubC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogY2hubC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUCBBUEkgY2hhbm5lbCBpbnRlcmZhY2U6IG11bHRpcGxleGVzIGRhdGEgc3RyZWFtcyB0aHJvdWdoIHRoZSBzaW5nbGUKKyAqIHBoeXNpY2FsIGxpbmsgbWFuYWdlZCBieSBhIEJyaWRnZSBCcmlkZ2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5scHJpdi5oPgorI2luY2x1ZGUgPGNobmxvYmouaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2hubC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09IGNobmxfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY2hhbm5lbCBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgbmV3IGNoYW5uZWxzCisgKiAgICAgIGFuZCBjbG9zaW5nIG9sZCBvbmVzIGZvciBhIGdpdmVuICdCcmlkZ2UgYm9hcmQuCisgKi8KK2ludCBjaG5sX2NyZWF0ZShzdHJ1Y3QgY2hubF9tZ3IgKipjaGFubmVsX21nciwKKwkJICAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjaG5sX21ncmF0dHJzICptZ3JfYXR0cnRzKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CisJc3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjaGFubmVsX21nciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShtZ3JfYXR0cnRzICE9IE5VTEwpOworCisJKmNoYW5uZWxfbWdyID0gTlVMTDsKKworCS8qIFZhbGlkYXRlIGFyZ3M6ICovCisJaWYgKCgwIDwgbWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzKSAmJgorCSAgICAobWdyX2F0dHJ0cy0+bWF4X2NoYW5uZWxzIDw9IENITkxfTUFYQ0hBTk5FTFMpKQorCQlzdGF0dXMgPSAwOworCWVsc2UgaWYgKG1ncl9hdHRydHMtPm1heF9jaGFubmVscyA9PSAwKQorCQlzdGF0dXMgPSAtRUlOVkFMOworCWVsc2UKKwkJc3RhdHVzID0gLUVDSFJORzsKKworCWlmIChtZ3JfYXR0cnRzLT53b3JkX3NpemUgPT0gMCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfY2hubF9tZ3IoaGRldl9vYmosICZoY2hubF9tZ3IpOworCQlpZiAoIXN0YXR1cyAmJiBoY2hubF9tZ3IgIT0gTlVMTCkKKwkJCXN0YXR1cyA9IC1FRVhJU1Q7CisKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwkJZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZpbnRmX2Z4bnMpOworCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGZpbmlzaCB0aGUgY3JlYXRlOiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY3JlYXRlKSAoJmhjaG5sX21nciwgaGRldl9vYmosCisJCQkJCQkJbWdyX2F0dHJ0cyk7CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBGaWxsIGluIERTUCBBUEkgY2hhbm5lbCBtb2R1bGUncyBmaWVsZHMgb2YgdGhlCisJCQkgKiBjaG5sX21nciBzdHJ1Y3R1cmUgKi8KKwkJCWNobmxfbWdyX29iaiA9IChzdHJ1Y3QgY2hubF9tZ3JfICopaGNobmxfbWdyOworCQkJY2hubF9tZ3Jfb2JqLT5pbnRmX2Z4bnMgPSBpbnRmX2Z4bnM7CisJCQkvKiBGaW5hbGx5LCByZXR1cm4gdGhlIG5ldyBjaGFubmVsIG1hbmFnZXIgaGFuZGxlOiAqLworCQkJKmNoYW5uZWxfbWdyID0gaGNobmxfbWdyOworCQl9CisJfQorCisJREJDX0VOU1VSRShzdGF0dXMgfHwgY2hubF9tZ3Jfb2JqKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2hubF9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2xvc2UgYWxsIG9wZW4gY2hhbm5lbHMsIGFuZCBkZXN0cm95IHRoZSBjaGFubmVsIG1hbmFnZXIuCisgKi8KK2ludCBjaG5sX2Rlc3Ryb3koc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3IpCit7CisJc3RydWN0IGNobmxfbWdyXyAqY2hubF9tZ3Jfb2JqID0gKHN0cnVjdCBjaG5sX21ncl8gKiloY2hubF9tZ3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJaW50IHN0YXR1czsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmIChjaG5sX21ncl9vYmopIHsKKwkJaW50Zl9meG5zID0gY2hubF9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisJCS8qIExldCBCcmlkZ2UgY2hhbm5lbCBtb2R1bGUgZGVzdHJveSB0aGUgY2hubF9tZ3I6ICovCisJCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fY2hubF9kZXN0cm95KSAoaGNobmxfbWdyKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2hubF9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIENITkwgbW9kdWxlLgorICovCit2b2lkIGNobmxfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjaG5sX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDSE5MIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKi8KK2Jvb2wgY2hubF9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmxvYmouaCBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NobmxvYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk1ZTBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY2hubG9iai5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBjaG5sb2JqLmgKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogU3RydWN0dXJlIHN1YmNvbXBvbmVudHMgb2YgY2hhbm5lbCBjbGFzcyBsaWJyYXJ5IGNoYW5uZWwgb2JqZWN0cyB3aGljaAorICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBDSE5MT0JKXworI2RlZmluZSBDSE5MT0JKXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmxkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKworLyoKKyAqICBUaGlzIHN0cnVjdCBpcyB0aGUgZmlyc3QgZmllbGQgaW4gYSBjaG5sX21nciBzdHJ1Y3QuIE90aGVyLiBpbXBsZW1lbnRhdGlvbgorICogIHNwZWNpZmljIGZpZWxkcyBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUgaW4gbWVtb3J5LgorICovCitzdHJ1Y3QgY2hubF9tZ3JfIHsKKwkvKiBUaGVzZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBjaG5sX21nciBzdHJ1Y3Q6ICovCisKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgY2hubF9vYmplY3Qgc3RydWN0LiBPdGhlciwKKyAqICBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBmaWVsZHMgZm9sbG93IHRoaXMgc3RydWN0dXJlIGluIG1lbW9yeS4KKyAqLworc3RydWN0IGNobmxfb2JqZWN0XyB7CisJLyogVGhlc2UgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGRzIGluIGEgY2hubF9vYmplY3Qgc3RydWN0OiAqLworCXN0cnVjdCBjaG5sX21ncl8gKmNobmxfbWdyX29iajsJLyogUG9pbnRlciBiYWNrIHRvIGNoYW5uZWwgbWFuYWdlci4gKi8KK307CisKKyNlbmRpZiAvKiBDSE5MT0JKXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY21tLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNkYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvY21tLmMKQEAgLTAsMCArMSwxMTU0IEBACisvKgorICogY21tLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogVGhlIENvbW11bmljYXRpb24oU2hhcmVkKSBNZW1vcnkgTWFuYWdlbWVudChDTU0pIG1vZHVsZSBwcm92aWRlcworICogc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IHNlcnZpY2VzIGZvciBEU1AvQklPUyBCcmlkZ2UgZGF0YSBzdHJlYW1pbmcKKyAqIGFuZCBtZXNzYWdpbmcuCisgKgorICogTXVsdGlwbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBjYW4gYmUgcmVnaXN0ZXJlZCB3aXRoIENNTS4KKyAqIEVhY2ggcmVnaXN0ZXJlZCBTTSBzZWdtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgU00gImFsbG9jYXRvciIgdGhhdAorICogZGVzY3JpYmVzIGEgYmxvY2sgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIHNoYXJlZCBtZW1vcnkgdXNlZCBmb3IKKyAqIGZ1dHVyZSBhbGxvY2F0aW9ucyBieSBDTU0uCisgKgorICogTWVtb3J5IGlzIGNvZWxlc2NlZCBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBoZWFwIHdoZW4gYSBidWZmZXIgaXMKKyAqIGZyZWVkLgorICoKKyAqIE5vdGVzOgorICogICBWYTogVmlydHVhbCBhZGRyZXNzLgorICogICBQYTogUGh5c2ljYWwgb3Iga2VybmVsIHN5c3RlbSBhZGRyZXNzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXRpbGRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIE5FWFRfUEEocG5vZGUpICAgKHBub2RlLT5kd19wYSArIHBub2RlLT51bF9zaXplKQorCisvKiBPdGhlciBidXMvcGxhdGZvcm0gdHJhbnNsYXRpb25zICovCisjZGVmaW5lIERTUFBBMkdQUFBBKGJhc2UsIHgsIHkpICAoKHgpKyh5KSkKKyNkZWZpbmUgR1BQUEEyRFNQUEEoYmFzZSwgeCwgeSkgICgoeCktKHkpKQorCisvKgorICogIEFsbG9jYXRvcnMgZGVmaW5lIGEgYmxvY2sgb2YgY29udGlndW91cyBtZW1vcnkgdXNlZCBmb3IgZnV0dXJlIGFsbG9jYXRpb25zLgorICoKKyAqICAgICAgc21hIC0gc2hhcmVkIG1lbW9yeSBhbGxvY2F0b3IuCisgKiAgICAgIHZtYSAtIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRvci4obm90IHVzZWQpLgorICovCitzdHJ1Y3QgY21tX2FsbG9jYXRvciB7CQkvKiBzbWEgKi8KKwl1bnNpZ25lZCBpbnQgc2htX2Jhc2U7CS8qIFN0YXJ0IG9mIHBoeXNpY2FsIFNNIGJsb2NrICovCisJdTMyIHVsX3NtX3NpemU7CQkvKiBTaXplIG9mIFNNIGJsb2NrIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGR3X3ZtX2Jhc2U7CS8qIFN0YXJ0IG9mIFZNIGJsb2NrLiAoRGV2IGRyaXZlcgorCQkJCQkgKiBjb250ZXh0IGZvciAnc21hJykgKi8KKwl1MzIgZHdfZHNwX3BoeXNfYWRkcl9vZmZzZXQ7CS8qIERTUCBQQSB0byBHUFAgUEEgb2Zmc2V0IGZvciB0aGlzCisJCQkJCSAqIFNNIHNwYWNlICovCisJczggY19mYWN0b3I7CQkvKiBEU1BQYSB0byBHUFBQYSBDb252ZXJzaW9uIEZhY3RvciAqLworCXVuc2lnbmVkIGludCBkd19kc3BfYmFzZTsJLyogRFNQIHZpcnQgYmFzZSBieXRlIGFkZHJlc3MgKi8KKwl1MzIgdWxfZHNwX3NpemU7CS8qIERTUCBzZWcgc2l6ZSBpbiBieXRlcyAqLworCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsJLyogYmFjayByZWYgdG8gcGFyZW50IG1nciAqLworCS8qIG5vZGUgbGlzdCBvZiBhdmFpbGFibGUgbWVtb3J5ICovCisJc3RydWN0IGxzdF9saXN0ICpmcmVlX2xpc3RfaGVhZDsKKwkvKiBub2RlIGxpc3Qgb2YgbWVtb3J5IGluIHVzZSAqLworCXN0cnVjdCBsc3RfbGlzdCAqaW5fdXNlX2xpc3RfaGVhZDsKK307CisKK3N0cnVjdCBjbW1feGxhdG9yIHsJCS8qIFBhPC0+VmEgdHJhbnNsYXRvciBvYmplY3QgKi8KKwkvKiBDTU0gb2JqZWN0IHRoaXMgdHJhbnNsYXRvciBhc3NvY2lhdGVkICovCisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOworCS8qCisJICogIENsaWVudCBwcm9jZXNzIHZpcnR1YWwgYmFzZSBhZGRyZXNzIHRoYXQgY29ycmVzcG9uZHMgdG8gcGh5cyBTTQorCSAqICBiYXNlIGFkZHJlc3MgZm9yIHRyYW5zbGF0b3IncyB1bF9zZWdfaWQuCisJICogIE9ubHkgMSBzZWdtZW50IElEIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisJICovCisJdW5zaWduZWQgaW50IGR3X3ZpcnRfYmFzZTsJLyogdmlydHVhbCBiYXNlIGFkZHJlc3MgKi8KKwl1MzIgdWxfdmlydF9zaXplOwkvKiBzaXplIG9mIHZpcnQgc3BhY2UgaW4gYnl0ZXMgKi8KKwl1MzIgdWxfc2VnX2lkOwkJLyogU2VnbWVudCBJZCAqLworfTsKKworLyogQ01NIE1nciAqLworc3RydWN0IGNtbV9vYmplY3QgeworCS8qCisJICogQ21tIExvY2sgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzIG1lbSBtYW5hZ2VyIGZvciBtdWx0aS10aHJlYWRzLgorCSAqLworCXN0cnVjdCBtdXRleCBjbW1fbG9jazsJLyogTG9jayB0byBhY2Nlc3MgY21tIG1nciAqLworCXN0cnVjdCBsc3RfbGlzdCAqbm9kZV9mcmVlX2xpc3RfaGVhZDsJLyogRnJlZSBsaXN0IG9mIG1lbW9yeSBub2RlcyAqLworCXUzMiB1bF9taW5fYmxvY2tfc2l6ZTsJLyogTWluIFNNIGJsb2NrOyBkZWZhdWx0IDE2IGJ5dGVzICovCisJdTMyIGR3X3BhZ2Vfc2l6ZTsJLyogTWVtb3J5IFBhZ2Ugc2l6ZSAoMWsvNGspICovCisJLyogR1BQIFNNIHNlZ21lbnQgcHRycyAqLworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICpwYV9ncHBzbV9zZWdfdGFiW0NNTV9NQVhHUFBTRUdTXTsKK307CisKKy8qIERlZmF1bHQgQ01NIE1nciBhdHRyaWJ1dGVzICovCitzdGF0aWMgc3RydWN0IGNtbV9tZ3JhdHRycyBjbW1fZGZsdG1ncmF0dHJzID0geworCS8qIHVsX21pbl9ibG9ja19zaXplLCBtaW4gYmxvY2sgc2l6ZShieXRlcykgYWxsb2NhdGVkIGJ5IGNtbSBtZ3IgKi8KKwkxNgorfTsKKworLyogRGVmYXVsdCBhbGxvY2F0aW9uIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgY21tX2F0dHJzIGNtbV9kZmx0YWxjdGF0dHJzID0geworCTEJCS8qIHVsX3NlZ19pZCwgZGVmYXVsdCBzZWdtZW50IElkIGZvciBhbGxvY2F0b3IgKi8KK307CisKKy8qIEFkZHJlc3MgdHJhbnNsYXRvciBkZWZhdWx0IGF0dHJzICovCitzdGF0aWMgc3RydWN0IGNtbV94bGF0b3JhdHRycyBjbW1fZGZsdHhsYXRvcmF0dHJzID0geworCS8qIHVsX3NlZ19pZCwgZG9lcyBub3QgaGF2ZSB0byBtYXRjaCBjbW1fZGZsdGFsY3RhdHRycyB1bF9zZWdfaWQgKi8KKwkxLAorCTAsCQkJLyogZHdfZHNwX2J1ZnMgKi8KKwkwLAkJCS8qIGR3X2RzcF9idWZfc2l6ZSAqLworCU5VTEwsCQkJLyogdm1fYmFzZSAqLworCTAsCQkJLyogZHdfdm1fc2l6ZSAqLworfTsKKworLyogU00gbm9kZSByZXByZXNlbnRpbmcgYSBibG9jayBvZiBtZW1vcnkuICovCitzdHJ1Y3QgY21tX21ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIG11c3QgYmUgMXN0IGVsZW1lbnQgKi8KKwl1MzIgZHdfcGE7CQkvKiBQaHlzIGFkZHIgKi8KKwl1MzIgZHdfdmE7CQkvKiBWaXJ0dWFsIGFkZHJlc3MgaW4gZGV2aWNlIHByb2Nlc3MgY29udGV4dCAqLworCXUzMiB1bF9zaXplOwkJLyogU00gYmxvY2sgc2l6ZSBpbiBieXRlcyAqLworCXUzMiBjbGllbnRfcHJvYzsJLyogUHJvY2VzcyB0aGF0IGFsbG9jYXRlZCB0aGlzIG1lbSBibG9jayAqLworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyB2b2lkIGFkZF90b19mcmVlX2xpc3Qoc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciwKKwkJCSAgICAgc3RydWN0IGNtbV9tbm9kZSAqcG5vZGUpOworc3RhdGljIHN0cnVjdCBjbW1fYWxsb2NhdG9yICpnZXRfYWxsb2NhdG9yKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwKKwkJCQkJICAgdTMyIHVsX3NlZ19pZCk7CitzdGF0aWMgc3RydWN0IGNtbV9tbm9kZSAqZ2V0X2ZyZWVfYmxvY2soc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciwKKwkJCQkJdTMyIHVzaXplKTsKK3N0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfbm9kZShzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmosIHUzMiBkd19wYSwKKwkJCQkgIHUzMiBkd192YSwgdTMyIHVsX3NpemUpOworLyogZ2V0IGF2YWlsYWJsZSBzbG90IGZvciBuZXcgYWxsb2NhdG9yICovCitzdGF0aWMgczMyIGdldF9zbG90KHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaik7CitzdGF0aWMgdm9pZCB1bl9yZWdpc3Rlcl9ncHBzbV9zZWcoc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEpOworCisvKgorICogID09PT09PT09IGNtbV9jYWxsb2NfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWxsb2NhdGUgYSBTTSBidWZmZXIsIHplcm8gY29udGVudHMsIGFuZCByZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MKKyAqICAgICAgYW5kIG9wdGlvbmFsIGRyaXZlciBjb250ZXh0IHZpcnR1YWwgYWRkcmVzcyhwcF9idWZfdmEpLgorICoKKyAqICAgICAgVGhlIGZyZWVsaXN0IGlzIHNvcnRlZCBpbiBpbmNyZWFzaW5nIHNpemUgb3JkZXIuIEdldCB0aGUgZmlyc3QKKyAqICAgICAgYmxvY2sgdGhhdCBzYXRpZmllcyB0aGUgcmVxdWVzdCBhbmQgc29ydCB0aGUgcmVtYWluaW5nIGJhY2sgb24KKyAqICAgICAgdGhlIGZyZWVsaXN0OyBpZiBsYXJnZSBlbm91Z2guIFRoZSBrZXB0IGJsb2NrIGlzIHBsYWNlZCBvbiB0aGUKKyAqICAgICAgaW5Vc2VMaXN0LgorICovCit2b2lkICpjbW1fY2FsbG9jX2J1ZihzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsIHUzMiB1c2l6ZSwKKwkJICAgICBzdHJ1Y3QgY21tX2F0dHJzICpwYXR0cnMsIHZvaWQgKipwcF9idWZfdmEpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJdm9pZCAqYnVmX3BhID0gTlVMTDsKKwlzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSA9IE5VTEw7CisJc3RydWN0IGNtbV9tbm9kZSAqbmV3X25vZGUgPSBOVUxMOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IgPSBOVUxMOworCXUzMiBkZWx0YV9zaXplOworCXU4ICpwYnl0ZSA9IE5VTEw7CisJczMyIGNudDsKKworCWlmIChwYXR0cnMgPT0gTlVMTCkKKwkJcGF0dHJzID0gJmNtbV9kZmx0YWxjdGF0dHJzOworCisJaWYgKHBwX2J1Zl92YSAhPSBOVUxMKQorCQkqcHBfYnVmX3ZhID0gTlVMTDsKKworCWlmIChjbW1fbWdyX29iaiAmJiAodXNpemUgIT0gMCkpIHsKKwkJaWYgKHBhdHRycy0+dWxfc2VnX2lkID4gMCkgeworCQkJLyogU2VnSWQgPiAwIGlzIFNNICovCisJCQkvKiBnZXQgdGhlIGFsbG9jYXRvciBvYmplY3QgZm9yIHRoaXMgc2VnbWVudCBpZCAqLworCQkJYWxsb2NhdG9yID0KKwkJCSAgICBnZXRfYWxsb2NhdG9yKGNtbV9tZ3Jfb2JqLCBwYXR0cnMtPnVsX3NlZ19pZCk7CisJCQkvKiBrZWVwIGJsb2NrIHNpemUgYSBtdWx0aXBsZSBvZiB1bF9taW5fYmxvY2tfc2l6ZSAqLworCQkJdXNpemUgPQorCQkJICAgICgodXNpemUgLSAxKSAmIH4oY21tX21ncl9vYmotPnVsX21pbl9ibG9ja19zaXplIC0KKwkJCQkJICAgICAxKSkKKwkJCSAgICArIGNtbV9tZ3Jfb2JqLT51bF9taW5fYmxvY2tfc2l6ZTsKKwkJCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJCQlwbm9kZSA9IGdldF9mcmVlX2Jsb2NrKGFsbG9jYXRvciwgdXNpemUpOworCQl9CisJCWlmIChwbm9kZSkgeworCQkJZGVsdGFfc2l6ZSA9IChwbm9kZS0+dWxfc2l6ZSAtIHVzaXplKTsKKwkJCWlmIChkZWx0YV9zaXplID49IGNtbV9tZ3Jfb2JqLT51bF9taW5fYmxvY2tfc2l6ZSkgeworCQkJCS8qIGNyZWF0ZSBhIG5ldyBibG9jayB3aXRoIHRoZSBsZWZ0b3ZlcnMgYW5kCisJCQkJICogYWRkIHRvIGZyZWVsaXN0ICovCisJCQkJbmV3X25vZGUgPQorCQkJCSAgICBnZXRfbm9kZShjbW1fbWdyX29iaiwgcG5vZGUtPmR3X3BhICsgdXNpemUsCisJCQkJCSAgICAgcG5vZGUtPmR3X3ZhICsgdXNpemUsCisJCQkJCSAgICAgKHUzMikgZGVsdGFfc2l6ZSk7CisJCQkJLyogbGVmdG92ZXJzIGdvIGZyZWUgKi8KKwkJCQlhZGRfdG9fZnJlZV9saXN0KGFsbG9jYXRvciwgbmV3X25vZGUpOworCQkJCS8qIGFkanVzdCBvdXIgbm9kZSdzIHNpemUgKi8KKwkJCQlwbm9kZS0+dWxfc2l6ZSA9IHVzaXplOworCQkJfQorCQkJLyogVGFnIG5vZGUgd2l0aCBjbGllbnQgcHJvY2VzcyByZXF1ZXN0aW5nIGFsbG9jYXRpb24KKwkJCSAqIFdlJ2xsIG5lZWQgdG8gZnJlZSB1cCBhIHByb2Nlc3MncyBhbGxvYydkIFNNIGlmIHRoZQorCQkJICogY2xpZW50IHByb2Nlc3MgZ29lcyBhd2F5LgorCQkJICovCisJCQkvKiBSZXR1cm4gVEdJRCBpbnN0ZWFkIG9mIHByb2Nlc3MgaGFuZGxlICovCisJCQlwbm9kZS0+Y2xpZW50X3Byb2MgPSBjdXJyZW50LT50Z2lkOworCisJCQkvKiBwdXQgb3VyIG5vZGUgb24gSW5Vc2UgbGlzdCAqLworCQkJbHN0X3B1dF90YWlsKGFsbG9jYXRvci0+aW5fdXNlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopcG5vZGUpOworCQkJYnVmX3BhID0gKHZvaWQgKilwbm9kZS0+ZHdfcGE7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkJCS8qIGNsZWFyIG1lbSAqLworCQkJcGJ5dGUgPSAodTggKikgcG5vZGUtPmR3X3ZhOworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAoczMyKSB1c2l6ZTsgY250KyssIHBieXRlKyspCisJCQkJKnBieXRlID0gMDsKKworCQkJaWYgKHBwX2J1Zl92YSAhPSBOVUxMKSB7CisJCQkJLyogVmlydHVhbCBhZGRyZXNzICovCisJCQkJKnBwX2J1Zl92YSA9ICh2b2lkICopcG5vZGUtPmR3X3ZhOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwl9CisJcmV0dXJuIGJ1Zl9wYTsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBjbW1fY3JlYXRlKHN0cnVjdCBjbW1fb2JqZWN0ICoqcGhfY21tX21nciwKKwkJICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY21tX21ncmF0dHJzICptZ3JfYXR0cnRzKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fb2JqID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgdXRpbF9zeXNpbmZvIHN5c19pbmZvOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoX2NtbV9tZ3IgIT0gTlVMTCk7CisKKwkqcGhfY21tX21nciA9IE5VTEw7CisJLyogY3JlYXRlLCB6ZXJvLCBhbmQgdGFnIGEgY21tIG1nciBvYmplY3QgKi8KKwljbW1fb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtbV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21tX29iaiAhPSBOVUxMKSB7CisJCWlmIChtZ3JfYXR0cnRzID09IE5VTEwpCisJCQltZ3JfYXR0cnRzID0gJmNtbV9kZmx0bWdyYXR0cnM7CS8qIHNldCBkZWZhdWx0cyAqLworCisJCS8qIDQgYnl0ZXMgbWluaW11bSAqLworCQlEQkNfQVNTRVJUKG1ncl9hdHRydHMtPnVsX21pbl9ibG9ja19zaXplID49IDQpOworCQkvKiBzYXZlIGF3YXkgc21hbGxlc3QgYmxvY2sgYWxsb2NhdGlvbiBmb3IgdGhpcyBjbW0gbWdyICovCisJCWNtbV9vYmotPnVsX21pbl9ibG9ja19zaXplID0gbWdyX2F0dHJ0cy0+dWxfbWluX2Jsb2NrX3NpemU7CisJCS8qIHNhdmUgYXdheSB0aGUgc3lzdGVtcyBtZW1vcnkgcGFnZSBzaXplICovCisJCXN5c19pbmZvLmR3X3BhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKKwkJc3lzX2luZm8uZHdfYWxsb2NhdGlvbl9ncmFudWxhcml0eSA9IFBBR0VfU0laRTsKKwkJc3lzX2luZm8uZHdfbnVtYmVyX29mX3Byb2Nlc3NvcnMgPSAxOworCisJCWNtbV9vYmotPmR3X3BhZ2Vfc2l6ZSA9IHN5c19pbmZvLmR3X3BhZ2Vfc2l6ZTsKKworCQkvKiBOb3RlOiBEU1AgU00gc2VnIHRhYmxlKGFEU1BTTVNlZ1RhYltdKSB6ZXJvJ2QgYnkKKwkJICogTUVNX0FMTE9DX09CSkVDVCAqLworCisJCS8qIGNyZWF0ZSBub2RlIGZyZWUgbGlzdCAqLworCQljbW1fb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbHN0X2xpc3QpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChjbW1fb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQljbW1fZGVzdHJveShjbW1fb2JqLCB0cnVlKTsKKwkJfSBlbHNlIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZjbW1fb2JqLT4KKwkJCQkgICAgICAgbm9kZV9mcmVlX2xpc3RfaGVhZC0+aGVhZCk7CisJCQltdXRleF9pbml0KCZjbW1fb2JqLT5jbW1fbG9jayk7CisJCQkqcGhfY21tX21nciA9IGNtbV9vYmo7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNtbV9kZXN0cm95ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVsZWFzZSB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciByZXNvdXJjZXMuCisgKi8KK2ludCBjbW1fZGVzdHJveShzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJc3RydWN0IGNtbV9pbmZvIHRlbXBfaW5mbzsKKwlpbnQgc3RhdHVzID0gMDsKKwlzMzIgc2xvdF9zZWc7CisJc3RydWN0IGNtbV9tbm9kZSAqcG5vZGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFoY21tX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwltdXRleF9sb2NrKCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCS8qIElmIG5vdCBmb3JjZSB0aGVuIGZhaWwgaWYgb3V0c3RhbmRpbmcgYWxsb2NhdGlvbnMgZXhpc3QgKi8KKwlpZiAoIWZvcmNlKSB7CisJCS8qIENoZWNrIGZvciBvdXRzdGFuZGluZyBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKwkJc3RhdHVzID0gY21tX2dldF9pbmZvKGhjbW1fbWdyLCAmdGVtcF9pbmZvKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICh0ZW1wX2luZm8udWxfdG90YWxfaW5fdXNlX2NudCA+IDApIHsKKwkJCQkvKiBvdXRzdGFuZGluZyBhbGxvY2F0aW9ucyAqLworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBVblJlZ2lzdGVyIFNNIGFsbG9jYXRvciAqLworCQlmb3IgKHNsb3Rfc2VnID0gMDsgc2xvdF9zZWcgPCBDTU1fTUFYR1BQU0VHUzsgc2xvdF9zZWcrKykgeworCQkJaWYgKGNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSAhPSBOVUxMKSB7CisJCQkJdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnCisJCQkJICAgIChjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYltzbG90X3NlZ10pOworCQkJCS8qIFNldCBzbG90IHRvIE5VTEwgZm9yIGZ1dHVyZSByZXVzZSAqLworCQkJCWNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisJaWYgKGNtbV9tZ3Jfb2JqLT5ub2RlX2ZyZWVfbGlzdF9oZWFkICE9IE5VTEwpIHsKKwkJLyogRnJlZSB0aGUgZnJlZSBub2RlcyAqLworCQl3aGlsZSAoIUxTVF9JU19FTVBUWShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCkpIHsKKwkJCXBub2RlID0gKHN0cnVjdCBjbW1fbW5vZGUgKikKKwkJCSAgICBsc3RfZ2V0X2hlYWQoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQpOworCQkJa2ZyZWUocG5vZGUpOworCQl9CisJCS8qIGRlbGV0ZSBOb2RlRnJlZUxpc3QgbGlzdCAqLworCQlrZnJlZShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCk7CisJfQorCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwlpZiAoIXN0YXR1cykgeworCQkvKiBkZWxldGUgQ1MgJiBjbW0gbWdyIG9iamVjdCAqLworCQltdXRleF9kZXN0cm95KCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCQlrZnJlZShjbW1fbWdyX29iaik7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiBtb2R1bGU7IGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50CisgKiAgICAgIHJlYWNoZXMgMC4KKyAqLwordm9pZCBjbW1fZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fZnJlZV9idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIHRoZSBnaXZlbiBidWZmZXIuCisgKi8KK2ludCBjbW1fZnJlZV9idWYoc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyLCB2b2lkICpidWZfcGEsCisJCQl1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKWhjbW1fbWdyOworCWludCBzdGF0dXMgPSAtRUZBVUxUOworCXN0cnVjdCBjbW1fbW5vZGUgKm1ub2RlX29iaiA9IE5VTEw7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciA9IE5VTEw7CisJc3RydWN0IGNtbV9hdHRycyAqcGF0dHJzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGJ1Zl9wYSAhPSBOVUxMKTsKKworCWlmICh1bF9zZWdfaWQgPT0gMCkgeworCQlwYXR0cnMgPSAmY21tX2RmbHRhbGN0YXR0cnM7CisJCXVsX3NlZ19pZCA9IHBhdHRycy0+dWxfc2VnX2lkOworCX0KKwlpZiAoIWhjbW1fbWdyIHx8ICEodWxfc2VnX2lkID4gMCkpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyogZ2V0IHRoZSBhbGxvY2F0b3IgZm9yIHRoaXMgc2VnbWVudCBpZCAqLworCWFsbG9jYXRvciA9IGdldF9hbGxvY2F0b3IoY21tX21ncl9vYmosIHVsX3NlZ19pZCk7CisJaWYgKGFsbG9jYXRvciAhPSBOVUxMKSB7CisJCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJCW1ub2RlX29iaiA9CisJCSAgICAoc3RydWN0IGNtbV9tbm9kZSAqKWxzdF9maXJzdChhbGxvY2F0b3ItPmluX3VzZV9saXN0X2hlYWQpOworCQl3aGlsZSAobW5vZGVfb2JqKSB7CisJCQlpZiAoKHUzMikgYnVmX3BhID09IG1ub2RlX29iai0+ZHdfcGEpIHsKKwkJCQkvKiBGb3VuZCBpdCAqLworCQkJCWxzdF9yZW1vdmVfZWxlbShhbGxvY2F0b3ItPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCQkJLyogYmFjayB0byBmcmVlbGlzdCAqLworCQkJCWFkZF90b19mcmVlX2xpc3QoYWxsb2NhdG9yLCBtbm9kZV9vYmopOworCQkJCXN0YXR1cyA9IDA7CS8qIGFsbCByaWdodCEgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkgICAgbHN0X25leHQoYWxsb2NhdG9yLT5pbl91c2VfbGlzdF9oZWFkLAorCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQl9CisJCW11dGV4X3VubG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fZ2V0X2hhbmRsZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHVybiB0aGUgY29tbXVuaWNhdGlvbiBtZW1vcnkgbWFuYWdlciBvYmplY3QgZm9yIHRoaXMgZGV2aWNlLgorICogICAgICBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZnJvbSB0aGUgY2xpZW50IHByb2Nlc3MuCisgKi8KK2ludCBjbW1fZ2V0X2hhbmRsZSh2b2lkICpocHJvY2Vzc29yLCBzdHJ1Y3QgY21tX29iamVjdCAqKiBwaF9jbW1fbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwaF9jbW1fbWdyICE9IE5VTEwpOworCWlmIChocHJvY2Vzc29yICE9IE5VTEwpCisJCXN0YXR1cyA9IHByb2NfZ2V0X2Rldl9vYmplY3QoaHByb2Nlc3NvciwgJmhkZXZfb2JqKTsKKwllbHNlCisJCWhkZXZfb2JqID0gZGV2X2dldF9maXJzdCgpOwkvKiBkZWZhdWx0ICovCisKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGV2X2dldF9jbW1fbWdyKGhkZXZfb2JqLCBwaF9jbW1fbWdyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX2dldF9pbmZvID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IG1lbW9yeSB1dGlsaXphdGlvbiBpbmZvcm1hdGlvbi4KKyAqLworaW50IGNtbV9nZXRfaW5mbyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQlzdHJ1Y3QgY21tX2luZm8gKmNtbV9pbmZvX29iaikKK3sKKwlzdHJ1Y3QgY21tX29iamVjdCAqY21tX21ncl9vYmogPSAoc3RydWN0IGNtbV9vYmplY3QgKiloY21tX21ncjsKKwl1MzIgdWxfc2VnOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbHRyOworCXN0cnVjdCBjbW1fbW5vZGUgKm1ub2RlX29iaiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShjbW1faW5mb19vYmogIT0gTlVMTCk7CisKKwlpZiAoIWhjbW1fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCW11dGV4X2xvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJY21tX2luZm9fb2JqLT51bF9udW1fZ3Bwc21fc2VncyA9IDA7CS8qICMgb2YgU00gc2VnbWVudHMgKi8KKwkvKiBUb3RhbCAjIG9mIG91dHN0YW5kaW5nIGFsbG9jICovCisJY21tX2luZm9fb2JqLT51bF90b3RhbF9pbl91c2VfY250ID0gMDsKKwkvKiBtaW4gYmxvY2sgc2l6ZSAqLworCWNtbV9pbmZvX29iai0+dWxfbWluX2Jsb2NrX3NpemUgPSBjbW1fbWdyX29iai0+dWxfbWluX2Jsb2NrX3NpemU7CisJLyogY2hlY2sgU00gbWVtb3J5IHNlZ21lbnRzICovCisJZm9yICh1bF9zZWcgPSAxOyB1bF9zZWcgPD0gQ01NX01BWEdQUFNFR1M7IHVsX3NlZysrKSB7CisJCS8qIGdldCB0aGUgYWxsb2NhdG9yIG9iamVjdCBmb3IgdGhpcyBzZWdtZW50IGlkICovCisJCWFsdHIgPSBnZXRfYWxsb2NhdG9yKGNtbV9tZ3Jfb2JqLCB1bF9zZWcpOworCQlpZiAoYWx0ciAhPSBOVUxMKSB7CisJCQljbW1faW5mb19vYmotPnVsX251bV9ncHBzbV9zZWdzKys7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLmR3X3NlZ19iYXNlX3BhID0KKwkJCSAgICBhbHRyLT5zaG1fYmFzZSAtIGFsdHItPnVsX2RzcF9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS51bF90b3RhbF9zZWdfc2l6ZSA9CisJCQkgICAgYWx0ci0+dWxfZHNwX3NpemUgKyBhbHRyLT51bF9zbV9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5kd19ncHBfYmFzZV9wYSA9CisJCQkgICAgYWx0ci0+c2htX2Jhc2U7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLnVsX2dwcF9zaXplID0KKwkJCSAgICBhbHRyLT51bF9zbV9zaXplOworCQkJY21tX2luZm9fb2JqLT5zZWdfaW5mb1t1bF9zZWcgLSAxXS5kd19kc3BfYmFzZV92YSA9CisJCQkgICAgYWx0ci0+ZHdfZHNwX2Jhc2U7CisJCQljbW1faW5mb19vYmotPnNlZ19pbmZvW3VsX3NlZyAtIDFdLnVsX2RzcF9zaXplID0KKwkJCSAgICBhbHRyLT51bF9kc3Bfc2l6ZTsKKwkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0gMV0uZHdfc2VnX2Jhc2VfdmEgPQorCQkJICAgIGFsdHItPmR3X3ZtX2Jhc2UgLSBhbHRyLT51bF9kc3Bfc2l6ZTsKKwkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0gMV0udWxfaW5fdXNlX2NudCA9IDA7CisJCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkJICAgIGxzdF9maXJzdChhbHRyLT5pbl91c2VfbGlzdF9oZWFkKTsKKwkJCS8qIENvdW50IGluVXNlIGJsb2NrcyAqLworCQkJd2hpbGUgKG1ub2RlX29iaikgeworCQkJCWNtbV9pbmZvX29iai0+dWxfdG90YWxfaW5fdXNlX2NudCsrOworCQkJCWNtbV9pbmZvX29iai0+c2VnX2luZm9bdWxfc2VnIC0KKwkJCQkJCSAgICAgICAxXS51bF9pbl91c2VfY250Kys7CisJCQkJLyogbmV4dCBub2RlLiAqLworCQkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkJICAgIGxzdF9uZXh0KGFsdHItPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQkJfQorCQl9CisJfQkJCS8qIGVuZCBmb3IgKi8KKwltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemVzIHByaXZhdGUgc3RhdGUgb2YgQ01NIG1vZHVsZS4KKyAqLworYm9vbCBjbW1faW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGNtbV9yZWdpc3Rlcl9ncHBzbV9zZWcgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciBhIGJsb2NrIG9mIFNNIHdpdGggdGhlIENNTSB0byBiZSB1c2VkIGZvciBsYXRlciBHUFAgU00KKyAqICAgICAgYWxsb2NhdGlvbnMuCisgKi8KK2ludCBjbW1fcmVnaXN0ZXJfZ3Bwc21fc2VnKHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCQkgIHUzMiBkd19ncHBfYmFzZV9wYSwgdTMyIHVsX3NpemUsCisJCQkJICB1MzIgZHNwX2FkZHJfb2Zmc2V0LCBzOCBjX2ZhY3RvciwKKwkJCQkgIHUzMiBkd19kc3BfYmFzZSwgdTMyIHVsX2RzcF9zaXplLAorCQkJCSAgdTMyICpzZ210X2lkLCB1MzIgZ3BwX2Jhc2VfdmEpCit7CisJc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopaGNtbV9tZ3I7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEgPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fbW5vZGUgKm5ld19ub2RlOworCXMzMiBzbG90X3NlZzsKKworCURCQ19SRVFVSVJFKHVsX3NpemUgPiAwKTsKKwlEQkNfUkVRVUlSRShzZ210X2lkICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGR3X2dwcF9iYXNlX3BhICE9IDApOworCURCQ19SRVFVSVJFKGdwcF9iYXNlX3ZhICE9IDApOworCURCQ19SRVFVSVJFKChjX2ZhY3RvciA8PSBDTU1fQUREVE9EU1BQQSkgJiYKKwkJICAgIChjX2ZhY3RvciA+PSBDTU1fU1VCRlJPTURTUFBBKSk7CisJZGV2X2RiZyhicmlkZ2UsICIlczogZHdfZ3BwX2Jhc2VfcGEgJXggdWxfc2l6ZSAleCBkc3BfYWRkcl9vZmZzZXQgJXggIgorCQkiZHdfZHNwX2Jhc2UgJXggdWxfZHNwX3NpemUgJXggZ3BwX2Jhc2VfdmEgJXhcbiIsIF9fZnVuY19fLAorCQlkd19ncHBfYmFzZV9wYSwgdWxfc2l6ZSwgZHNwX2FkZHJfb2Zmc2V0LCBkd19kc3BfYmFzZSwKKwkJdWxfZHNwX3NpemUsIGdwcF9iYXNlX3ZhKTsKKwlpZiAoIWhjbW1fbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCXJldHVybiBzdGF0dXM7CisJfQorCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20gZm9yIGFub3RoZXIgYWxsb2NhdG9yICovCisJbXV0ZXhfbG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwlzbG90X3NlZyA9IGdldF9zbG90KGNtbV9tZ3Jfb2JqKTsKKwlpZiAoc2xvdF9zZWcgPCAwKSB7CisJCS8qIGdldCBhIHNsb3QgbnVtYmVyICovCisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQ2hlY2sgaWYgaW5wdXQgdWxfc2l6ZSBpcyBiaWcgZW5vdWdoIHRvIGFsbG9jIGF0IGxlYXN0IG9uZSBibG9jayAqLworCWlmICh1bF9zaXplIDwgY21tX21ncl9vYmotPnVsX21pbl9ibG9ja19zaXplKSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJLyogY3JlYXRlLCB6ZXJvLCBhbmQgdGFnIGFuIFNNIGFsbG9jYXRvciBvYmplY3QgKi8KKwlwc21hID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNtbV9hbGxvY2F0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHNtYSAhPSBOVUxMKSB7CisJCXBzbWEtPmhjbW1fbWdyID0gaGNtbV9tZ3I7CS8qIHJlZiB0byBwYXJlbnQgKi8KKwkJcHNtYS0+c2htX2Jhc2UgPSBkd19ncHBfYmFzZV9wYTsJLyogU00gQmFzZSBwaHlzICovCisJCXBzbWEtPnVsX3NtX3NpemUgPSB1bF9zaXplOwkvKiBTTSBzZWdtZW50IHNpemUgaW4gYnl0ZXMgKi8KKwkJcHNtYS0+ZHdfdm1fYmFzZSA9IGdwcF9iYXNlX3ZhOworCQlwc21hLT5kd19kc3BfcGh5c19hZGRyX29mZnNldCA9IGRzcF9hZGRyX29mZnNldDsKKwkJcHNtYS0+Y19mYWN0b3IgPSBjX2ZhY3RvcjsKKwkJcHNtYS0+ZHdfZHNwX2Jhc2UgPSBkd19kc3BfYmFzZTsKKwkJcHNtYS0+dWxfZHNwX3NpemUgPSB1bF9kc3Bfc2l6ZTsKKwkJaWYgKHBzbWEtPmR3X3ZtX2Jhc2UgPT0gMCkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQkvKiByZXR1cm4gdGhlIGFjdHVhbCBzZWdtZW50IGlkZW50aWZpZXIgKi8KKwkJKnNnbXRfaWQgPSAodTMyKSBzbG90X3NlZyArIDE7CisJCS8qIGNyZWF0ZSBtZW1vcnkgZnJlZSBsaXN0ICovCisJCXBzbWEtPmZyZWVfbGlzdF9oZWFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBzbWEtPmZyZWVfbGlzdF9oZWFkID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisJCUlOSVRfTElTVF9IRUFEKCZwc21hLT5mcmVlX2xpc3RfaGVhZC0+aGVhZCk7CisKKwkJLyogY3JlYXRlIG1lbW9yeSBpbi11c2UgbGlzdCAqLworCQlwc21hLT5pbl91c2VfbGlzdF9oZWFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0CisJCQkJCQlsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCQlpZiAocHNtYS0+aW5fdXNlX2xpc3RfaGVhZCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmcHNtYS0+aW5fdXNlX2xpc3RfaGVhZC0+aGVhZCk7CisKKwkJLyogR2V0IGEgbWVtIG5vZGUgZm9yIHRoaXMgaHVuay1vLW1lbW9yeSAqLworCQluZXdfbm9kZSA9IGdldF9ub2RlKGNtbV9tZ3Jfb2JqLCBkd19ncHBfYmFzZV9wYSwKKwkJCQkgICAgcHNtYS0+ZHdfdm1fYmFzZSwgdWxfc2l6ZSk7CisJCS8qIFBsYWNlIG5vZGUgb24gdGhlIFNNIGFsbG9jYXRvcidzIGZyZWUgbGlzdCAqLworCQlpZiAobmV3X25vZGUpIHsKKwkJCWxzdF9wdXRfdGFpbChwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbmV3X25vZGUpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBtYWtlIGVudHJ5ICovCisJY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbc2xvdF9zZWddID0gcHNtYTsKKworZnVuY19lbmQ6CisJaWYgKHN0YXR1cyAmJiBwc21hKSB7CisJCS8qIENsZWFudXAgYWxsb2NhdG9yICovCisJCXVuX3JlZ2lzdGVyX2dwcHNtX3NlZyhwc21hKTsKKwl9CisKKwltdXRleF91bmxvY2soJmNtbV9tZ3Jfb2JqLT5jbW1fbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1fdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5SZWdpc3RlciBHUFAgU00gc2VnbWVudHMgd2l0aCB0aGUgQ01NLgorICovCitpbnQgY21tX3VuX3JlZ2lzdGVyX2dwcHNtX3NlZyhzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IsCisJCQkJICAgICB1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IChzdHJ1Y3QgY21tX29iamVjdCAqKWhjbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICpwc21hOworCXUzMiB1bF9pZCA9IHVsX3NlZ19pZDsKKworCURCQ19SRVFVSVJFKHVsX3NlZ19pZCA+IDApOworCWlmIChoY21tX21ncikgeworCQlpZiAodWxfc2VnX2lkID09IENNTV9BTExTRUdNRU5UUykKKwkJCXVsX2lkID0gMTsKKworCQlpZiAoKHVsX2lkID4gMCkgJiYgKHVsX2lkIDw9IENNTV9NQVhHUFBTRUdTKSkgeworCQkJd2hpbGUgKHVsX2lkIDw9IENNTV9NQVhHUFBTRUdTKSB7CisJCQkJbXV0ZXhfbG9jaygmY21tX21ncl9vYmotPmNtbV9sb2NrKTsKKwkJCQkvKiBzbG90ID0gc2VnX2lkLTEgKi8KKwkJCQlwc21hID0gY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbdWxfaWQgLSAxXTsKKwkJCQlpZiAocHNtYSAhPSBOVUxMKSB7CisJCQkJCXVuX3JlZ2lzdGVyX2dwcHNtX3NlZyhwc21hKTsKKwkJCQkJLyogU2V0IGFsY3RyIHB0ciB0byBOVUxMIGZvciBmdXR1cmUKKwkJCQkJICogcmV1c2UgKi8KKwkJCQkJY21tX21ncl9vYmotPnBhX2dwcHNtX3NlZ190YWJbdWxfaWQgLQorCQkJCQkJCQkgICAgICAxXSA9IE5VTEw7CisJCQkJfSBlbHNlIGlmICh1bF9zZWdfaWQgIT0gQ01NX0FMTFNFR01FTlRTKSB7CisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCQl9CisJCQkJbXV0ZXhfdW5sb2NrKCZjbW1fbWdyX29iai0+Y21tX2xvY2spOworCQkJCWlmICh1bF9zZWdfaWQgIT0gQ01NX0FMTFNFR01FTlRTKQorCQkJCQlicmVhazsKKworCQkJCXVsX2lkKys7CisJCQl9CS8qIGVuZCB3aGlsZSAqLworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5fcmVnaXN0ZXJfZ3Bwc21fc2VnID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgVW5SZWdpc3RlciB0aGUgU00gYWxsb2NhdG9yIGJ5IGZyZWVpbmcgYWxsIGl0cyByZXNvdXJjZXMgYW5kCisgKiAgICAgIG51bGxpbmcgY21tIG1nciB0YWJsZSBlbnRyeS4KKyAqICBOb3RlOgorICogICAgICBUaGlzIHJvdXRpbmUgaXMgYWx3YXlzIGNhbGxlZCB3aXRoaW4gY21tIGxvY2sgY3JpdCBzZWN0LgorICovCitzdGF0aWMgdm9pZCB1bl9yZWdpc3Rlcl9ncHBzbV9zZWcoc3RydWN0IGNtbV9hbGxvY2F0b3IgKnBzbWEpCit7CisJc3RydWN0IGNtbV9tbm9kZSAqbW5vZGVfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgY21tX21ub2RlICpuZXh0X25vZGUgPSBOVUxMOworCisJREJDX1JFUVVJUkUocHNtYSAhPSBOVUxMKTsKKwlpZiAocHNtYS0+ZnJlZV9saXN0X2hlYWQgIT0gTlVMTCkgeworCQkvKiBmcmVlIG5vZGVzIG9uIGZyZWUgbGlzdCAqLworCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKWxzdF9maXJzdChwc21hLT5mcmVlX2xpc3RfaGVhZCk7CisJCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJCW5leHRfbm9kZSA9CisJCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkJCQkgKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJCQkgbW5vZGVfb2JqKTsKKwkJCWxzdF9yZW1vdmVfZWxlbShwc21hLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCQkJa2ZyZWUoKHZvaWQgKiltbm9kZV9vYmopOworCQkJLyogbmV4dCBub2RlLiAqLworCQkJbW5vZGVfb2JqID0gbmV4dF9ub2RlOworCQl9CisJCWtmcmVlKHBzbWEtPmZyZWVfbGlzdF9oZWFkKTsJLyogZGVsZXRlIGZyZWVsaXN0ICovCisJCS8qIGZyZWUgbm9kZXMgb24gSW5Vc2UgbGlzdCAqLworCQltbm9kZV9vYmogPQorCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfZmlyc3QocHNtYS0+aW5fdXNlX2xpc3RfaGVhZCk7CisJCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJCW5leHRfbm9kZSA9CisJCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChwc21hLT5pbl91c2VfbGlzdF9oZWFkLAorCQkJCQkJCSAoc3RydWN0IGxpc3RfaGVhZCAqKQorCQkJCQkJCSBtbm9kZV9vYmopOworCQkJbHN0X3JlbW92ZV9lbGVtKHBzbWEtPmluX3VzZV9saXN0X2hlYWQsCisJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwkJCWtmcmVlKCh2b2lkICopbW5vZGVfb2JqKTsKKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IG5leHRfbm9kZTsKKwkJfQorCQlrZnJlZShwc21hLT5pbl91c2VfbGlzdF9oZWFkKTsJLyogZGVsZXRlIEluVXNlIGxpc3QgKi8KKwl9CisJaWYgKCh2b2lkICopcHNtYS0+ZHdfdm1fYmFzZSAhPSBOVUxMKQorCQlNRU1fVU5NQVBfTElORUFSX0FERFJFU1MoKHZvaWQgKilwc21hLT5kd192bV9iYXNlKTsKKworCS8qIEZyZWUgYWxsb2NhdG9yIGl0c2VsZiAqLworCWtmcmVlKHBzbWEpOworfQorCisvKgorICogID09PT09PT09IGdldF9zbG90ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQW4gYXZhaWxhYmxlIHNsb3QgIyBpcyByZXR1cm5lZC4gUmV0dXJucyBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgczMyIGdldF9zbG90KHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaikKK3sKKwlzMzIgc2xvdF9zZWcgPSAtMTsJLyogbmVnIG9uIGZhaWx1cmUgKi8KKwlEQkNfUkVRVUlSRShjbW1fbWdyX29iaiAhPSBOVUxMKTsKKwkvKiBnZXQgZmlyc3QgYXZhaWxhYmxlIHNsb3QgaW4gY21tIG1nciBTTVNlZ1RhYltdICovCisJZm9yIChzbG90X3NlZyA9IDA7IHNsb3Rfc2VnIDwgQ01NX01BWEdQUFNFR1M7IHNsb3Rfc2VnKyspIHsKKwkJaWYgKGNtbV9tZ3Jfb2JqLT5wYV9ncHBzbV9zZWdfdGFiW3Nsb3Rfc2VnXSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwl9CisJaWYgKHNsb3Rfc2VnID09IENNTV9NQVhHUFBTRUdTKQorCQlzbG90X3NlZyA9IC0xOwkvKiBmYWlsZWQgKi8KKworCXJldHVybiBzbG90X3NlZzsKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfbm9kZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBhIG1lbW9yeSBub2RlIGZyb20gZnJlZWxpc3Qgb3IgY3JlYXRlIGEgbmV3IG9uZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbW1fbW5vZGUgKmdldF9ub2RlKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwgdTMyIGR3X3BhLAorCQkJCSAgdTMyIGR3X3ZhLCB1MzIgdWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShjbW1fbWdyX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkd19wYSAhPSAwKTsKKwlEQkNfUkVRVUlSRShkd192YSAhPSAwKTsKKwlEQkNfUkVRVUlSRSh1bF9zaXplICE9IDApOworCS8qIENoZWNrIGNtbSBtZ3IncyBub2RlIGZyZWVsaXN0ICovCisJaWYgKExTVF9JU19FTVBUWShjbW1fbWdyX29iai0+bm9kZV9mcmVlX2xpc3RfaGVhZCkpIHsKKwkJcG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21tX21ub2RlKSwgR0ZQX0tFUk5FTCk7CisJfSBlbHNlIHsKKwkJLyogc3VyZWx5IGEgdmFsaWQgZWxlbWVudCAqLworCQlwbm9kZSA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCSAgICBsc3RfZ2V0X2hlYWQoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQpOworCX0KKwlpZiAocG5vZGUpIHsKKwkJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsJLyogc2V0IHNlbGYgKi8KKwkJcG5vZGUtPmR3X3BhID0gZHdfcGE7CS8qIFBoeXNpY2FsIGFkZHIgb2Ygc3RhcnQgb2YgYmxvY2sgKi8KKwkJcG5vZGUtPmR3X3ZhID0gZHdfdmE7CS8qIFZpcnR1YWwgICAiICAgICAgICAgICAgIiAqLworCQlwbm9kZS0+dWxfc2l6ZSA9IHVsX3NpemU7CS8qIFNpemUgb2YgYmxvY2sgKi8KKwl9CisJcmV0dXJuIHBub2RlOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUHV0IGEgbWVtb3J5IG5vZGUgb24gdGhlIGNtbSBub2RlbGlzdCBmb3IgbGF0ZXIgdXNlLgorICogICAgICBEb2Vzbid0IGFjdHVhbGx5IGRlbGV0ZSB0aGUgbm9kZS4gSGVhcCB0aHJhc2hpbmcgZnJpZW5kbHkuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiwgc3RydWN0IGNtbV9tbm9kZSAqcG5vZGUpCit7CisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsJLyogaW5pdCAuc2VsZiBwdHIgKi8KKwlsc3RfcHV0X3RhaWwoY21tX21ncl9vYmotPm5vZGVfZnJlZV9saXN0X2hlYWQsCisJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKilwbm9kZSk7Cit9CisKKy8qCisgKiA9PT09PT0gZ2V0X2ZyZWVfYmxvY2sgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTY2FuIHRoZSBmcmVlIGJsb2NrIGxpc3QgYW5kIHJldHVybiB0aGUgZmlyc3QgYmxvY2sgdGhhdCBzYXRpc2ZpZXMKKyAqICAgICAgdGhlIHNpemUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY21tX21ub2RlICpnZXRfZnJlZV9ibG9jayhzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yLAorCQkJCQl1MzIgdXNpemUpCit7CisJaWYgKGFsbG9jYXRvcikgeworCQlzdHJ1Y3QgY21tX21ub2RlICptbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkgICAgbHN0X2ZpcnN0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQpOworCQl3aGlsZSAobW5vZGVfb2JqKSB7CisJCQlpZiAodXNpemUgPD0gKHUzMikgbW5vZGVfb2JqLT51bF9zaXplKSB7CisJCQkJbHN0X3JlbW92ZV9lbGVtKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCQkJcmV0dXJuIG1ub2RlX29iajsKKwkJCX0KKwkJCS8qIG5leHQgbm9kZS4gKi8KKwkJCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopCisJCQkgICAgbHN0X25leHQoYWxsb2NhdG9yLT5mcmVlX2xpc3RfaGVhZCwKKwkJCQkgICAgIChzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfdG9fZnJlZV9saXN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29lbGVzY2Ugbm9kZSBpbnRvIHRoZSBmcmVlbGlzdCBpbiBhc2NlbmRpbmcgc2l6ZSBvcmRlci4KKyAqLworc3RhdGljIHZvaWQgYWRkX3RvX2ZyZWVfbGlzdChzdHJ1Y3QgY21tX2FsbG9jYXRvciAqYWxsb2NhdG9yLAorCQkJICAgICBzdHJ1Y3QgY21tX21ub2RlICpwbm9kZSkKK3sKKwlzdHJ1Y3QgY21tX21ub2RlICpub2RlX3ByZXYgPSBOVUxMOworCXN0cnVjdCBjbW1fbW5vZGUgKm5vZGVfbmV4dCA9IE5VTEw7CisJc3RydWN0IGNtbV9tbm9kZSAqbW5vZGVfb2JqOworCXUzMiBkd190aGlzX3BhOworCXUzMiBkd19uZXh0X3BhOworCisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoYWxsb2NhdG9yICE9IE5VTEwpOworCWR3X3RoaXNfcGEgPSBwbm9kZS0+ZHdfcGE7CisJZHdfbmV4dF9wYSA9IE5FWFRfUEEocG5vZGUpOworCW1ub2RlX29iaiA9IChzdHJ1Y3QgY21tX21ub2RlICopbHN0X2ZpcnN0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQpOworCXdoaWxlIChtbm9kZV9vYmopIHsKKwkJaWYgKGR3X3RoaXNfcGEgPT0gTkVYVF9QQShtbm9kZV9vYmopKSB7CisJCQkvKiBmb3VuZCB0aGUgYmxvY2sgYWhlYWQgb2YgdGhpcyBvbmUgKi8KKwkJCW5vZGVfcHJldiA9IG1ub2RlX29iajsKKwkJfSBlbHNlIGlmIChkd19uZXh0X3BhID09IG1ub2RlX29iai0+ZHdfcGEpIHsKKwkJCW5vZGVfbmV4dCA9IG1ub2RlX29iajsKKwkJfQorCQlpZiAoKG5vZGVfcHJldiA9PSBOVUxMKSB8fCAobm9kZV9uZXh0ID09IE5VTEwpKSB7CisJCQkvKiBuZXh0IG5vZGUuICovCisJCQltbm9kZV9vYmogPSAoc3RydWN0IGNtbV9tbm9kZSAqKQorCQkJICAgIGxzdF9uZXh0KGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKW1ub2RlX29iaik7CisJCX0gZWxzZSB7CisJCQkvKiBnb3QgJ2VtICovCisJCQlicmVhazsKKwkJfQorCX0JCQkvKiB3aGlsZSAqLworCWlmIChub2RlX3ByZXYgIT0gTlVMTCkgeworCQkvKiBjb21iaW5lIHdpdGggcHJldmlvdXMgYmxvY2sgKi8KKwkJbHN0X3JlbW92ZV9lbGVtKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKilub2RlX3ByZXYpOworCQkvKiBncm93IG5vZGUgdG8gaG9sZCBib3RoICovCisJCXBub2RlLT51bF9zaXplICs9IG5vZGVfcHJldi0+dWxfc2l6ZTsKKwkJcG5vZGUtPmR3X3BhID0gbm9kZV9wcmV2LT5kd19wYTsKKwkJcG5vZGUtPmR3X3ZhID0gbm9kZV9wcmV2LT5kd192YTsKKwkJLyogcGxhY2Ugbm9kZSBvbiBtZ3Igbm9kZUZyZWVMaXN0ICovCisJCWRlbGV0ZV9ub2RlKChzdHJ1Y3QgY21tX29iamVjdCAqKWFsbG9jYXRvci0+aGNtbV9tZ3IsCisJCQkgICAgbm9kZV9wcmV2KTsKKwl9CisJaWYgKG5vZGVfbmV4dCAhPSBOVUxMKSB7CisJCS8qIGNvbWJpbmUgd2l0aCBuZXh0IGJsb2NrICovCisJCWxzdF9yZW1vdmVfZWxlbShhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopbm9kZV9uZXh0KTsKKwkJLyogZ3JvdyBkYSBub2RlICovCisJCXBub2RlLT51bF9zaXplICs9IG5vZGVfbmV4dC0+dWxfc2l6ZTsKKwkJLyogcGxhY2Ugbm9kZSBvbiBtZ3Igbm9kZUZyZWVMaXN0ICovCisJCWRlbGV0ZV9ub2RlKChzdHJ1Y3QgY21tX29iamVjdCAqKWFsbG9jYXRvci0+aGNtbV9tZ3IsCisJCQkgICAgbm9kZV9uZXh0KTsKKwl9CisJLyogTm93LCBsZXQncyBhZGQgdG8gZnJlZWxpc3QgaW4gaW5jcmVhc2luZyBzaXplIG9yZGVyICovCisJbW5vZGVfb2JqID0gKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfZmlyc3QoYWxsb2NhdG9yLT5mcmVlX2xpc3RfaGVhZCk7CisJd2hpbGUgKG1ub2RlX29iaikgeworCQlpZiAocG5vZGUtPnVsX3NpemUgPD0gbW5vZGVfb2JqLT51bF9zaXplKQorCQkJYnJlYWs7CisKKwkJLyogbmV4dCBub2RlLiAqLworCQltbm9kZV9vYmogPQorCQkgICAgKHN0cnVjdCBjbW1fbW5vZGUgKilsc3RfbmV4dChhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJCQkJIChzdHJ1Y3QgbGlzdF9oZWFkICopbW5vZGVfb2JqKTsKKwl9CisJLyogaWYgbW5vZGVfb2JqIGlzIE5VTEwgdGhlbiBhZGQgb3VyIHBub2RlIHRvIHRoZSBlbmQgb2YgdGhlIGZyZWVsaXN0ICovCisJaWYgKG1ub2RlX29iaiA9PSBOVUxMKSB7CisJCWxzdF9wdXRfdGFpbChhbGxvY2F0b3ItPmZyZWVfbGlzdF9oZWFkLAorCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlKTsKKwl9IGVsc2UgeworCQkvKiBpbnNlcnQgb3VyIG5vZGUgYmVmb3JlIHRoZSBjdXJyZW50IHRyYXZlcnNlZCBub2RlICovCisJCWxzdF9pbnNlcnRfYmVmb3JlKGFsbG9jYXRvci0+ZnJlZV9saXN0X2hlYWQsCisJCQkJICAoc3RydWN0IGxpc3RfaGVhZCAqKXBub2RlLAorCQkJCSAgKHN0cnVjdCBsaXN0X2hlYWQgKiltbm9kZV9vYmopOworCX0KK30KKworLyoKKyAqID09PT09PT09IGdldF9hbGxvY2F0b3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGFsbG9jYXRvciBmb3IgdGhlIGdpdmVuIFNNIFNlZ2lkLgorICogICAgICBTZWdJZHM6ICAxLDIsMy4ubWF4LgorICovCitzdGF0aWMgc3RydWN0IGNtbV9hbGxvY2F0b3IgKmdldF9hbGxvY2F0b3Ioc3RydWN0IGNtbV9vYmplY3QgKmNtbV9tZ3Jfb2JqLAorCQkJCQkgICB1MzIgdWxfc2VnX2lkKQoreworCXN0cnVjdCBjbW1fYWxsb2NhdG9yICphbGxvY2F0b3IgPSBOVUxMOworCisJREJDX1JFUVVJUkUoY21tX21ncl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoKHVsX3NlZ19pZCA+IDApICYmICh1bF9zZWdfaWQgPD0gQ01NX01BWEdQUFNFR1MpKTsKKwlhbGxvY2F0b3IgPSBjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYlt1bF9zZWdfaWQgLSAxXTsKKwlpZiAoYWxsb2NhdG9yICE9IE5VTEwpIHsKKwkJLyogbWFrZSBzdXJlIGl0J3MgZm9yIHJlYWwgKi8KKwkJaWYgKCFhbGxvY2F0b3IpIHsKKwkJCWFsbG9jYXRvciA9IE5VTEw7CisJCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJfQorCX0KKwlyZXR1cm4gYWxsb2NhdG9yOworfQorCisvKgorICogIFRoZSBDTU1fWGxhdG9yW3h4eF0gcm91dGluZXMgYmVsb3cgYXJlIHVzZWQgYnkgTm9kZSBhbmQgU3RyZWFtCisgKiAgdG8gcGVyZm9ybSBTTSBhZGRyZXNzIHRyYW5zbGF0aW9uIHRvIHRoZSBjbGllbnQgcHJvY2VzcyBhZGRyZXNzIHNwYWNlLgorICogIEEgInRyYW5zbGF0b3IiIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgbm9kZS9zdHJlYW0gZm9yIGVhY2ggU00gc2VnIHVzZWQuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBhZGRyZXNzIHRyYW5zbGF0b3Igb2JqZWN0LgorICovCitpbnQgY21tX3hsYXRvcl9jcmVhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKip4bGF0b3IsCisJCQkgICAgIHN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21nciwKKwkJCSAgICAgc3RydWN0IGNtbV94bGF0b3JhdHRycyAqeGxhdG9yX2F0dHJzKQoreworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqZWN0ID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh4bGF0b3IgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGNtbV9tZ3IgIT0gTlVMTCk7CisKKwkqeGxhdG9yID0gTlVMTDsKKwlpZiAoeGxhdG9yX2F0dHJzID09IE5VTEwpCisJCXhsYXRvcl9hdHRycyA9ICZjbW1fZGZsdHhsYXRvcmF0dHJzOwkvKiBzZXQgZGVmYXVsdHMgKi8KKworCXhsYXRvcl9vYmplY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY21tX3hsYXRvciksIEdGUF9LRVJORUwpOworCWlmICh4bGF0b3Jfb2JqZWN0ICE9IE5VTEwpIHsKKwkJeGxhdG9yX29iamVjdC0+aGNtbV9tZ3IgPSBoY21tX21ncjsJLyogcmVmIGJhY2sgdG8gQ01NICovCisJCS8qIFNNIHNlZ19pZCAqLworCQl4bGF0b3Jfb2JqZWN0LT51bF9zZWdfaWQgPSB4bGF0b3JfYXR0cnMtPnVsX3NlZ19pZDsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKwlpZiAoIXN0YXR1cykKKwkJKnhsYXRvciA9IChzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqKXhsYXRvcl9vYmplY3Q7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgWGxhdG9yIHJlc291cmNlcy4KKyAqICAgICAgVk0gZ2V0cyBmcmVlZCBsYXRlci4KKyAqLworaW50IGNtbV94bGF0b3JfZGVsZXRlKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmogPSAoc3RydWN0IGNtbV94bGF0b3IgKil4bGF0b3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlrZnJlZSh4bGF0b3Jfb2JqKTsKKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGNtbV94bGF0b3JfYWxsb2NfYnVmID09PT09PT09CisgKi8KK3ZvaWQgKmNtbV94bGF0b3JfYWxsb2NfYnVmKHN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3IsIHZvaWQgKnZhX2J1ZiwKKwkJCSAgIHUzMiBwYV9zaXplKQoreworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqID0gKHN0cnVjdCBjbW1feGxhdG9yICopeGxhdG9yOworCXZvaWQgKnBidWYgPSBOVUxMOworCXZvaWQgKnRtcF92YV9idWZmOworCXN0cnVjdCBjbW1fYXR0cnMgYXR0cnM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoeGxhdG9yICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHhsYXRvcl9vYmotPmhjbW1fbWdyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHZhX2J1ZiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwYV9zaXplID4gMCk7CisJREJDX1JFUVVJUkUoeGxhdG9yX29iai0+dWxfc2VnX2lkID4gMCk7CisKKwlpZiAoeGxhdG9yX29iaikgeworCQlhdHRycy51bF9zZWdfaWQgPSB4bGF0b3Jfb2JqLT51bF9zZWdfaWQ7CisJCV9fcmF3X3dyaXRlbCgwLCB2YV9idWYpOworCQkvKiBBbGxvYyBTTSAqLworCQlwYnVmID0KKwkJICAgIGNtbV9jYWxsb2NfYnVmKHhsYXRvcl9vYmotPmhjbW1fbWdyLCBwYV9zaXplLCAmYXR0cnMsIE5VTEwpOworCQlpZiAocGJ1ZikgeworCQkJLyogY29udmVydCB0byB0cmFuc2xhdG9yKG5vZGUvc3RybSkgcHJvY2VzcyBWaXJ0dWFsCisJCQkgKiBhZGRyZXNzICovCisJCQkgdG1wX3ZhX2J1ZmYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZSh4bGF0b3IsCisJCQkJCQkJIHBidWYsIENNTV9QQTJWQSk7CisJCQlfX3Jhd193cml0ZWwoKHUzMil0bXBfdmFfYnVmZiwgdmFfYnVmKTsKKwkJfQorCX0KKwlyZXR1cm4gcGJ1ZjsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2ZyZWVfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSB0aGUgZ2l2ZW4gU00gYnVmZmVyIGFuZCBkZXNjcmlwdG9yLgorICogICAgICBEb2VzIG5vdCBmcmVlIHZpcnR1YWwgbWVtb3J5LgorICovCitpbnQgY21tX3hsYXRvcl9mcmVlX2J1ZihzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLCB2b2lkICpidWZfdmEpCit7CisJc3RydWN0IGNtbV94bGF0b3IgKnhsYXRvcl9vYmogPSAoc3RydWN0IGNtbV94bGF0b3IgKil4bGF0b3I7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwl2b2lkICpidWZfcGEgPSBOVUxMOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGJ1Zl92YSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh4bGF0b3Jfb2JqLT51bF9zZWdfaWQgPiAwKTsKKworCWlmICh4bGF0b3Jfb2JqKSB7CisJCS8qIGNvbnZlcnQgVmEgdG8gUGEgc28gd2UgY2FuIGZyZWUgaXQuICovCisJCWJ1Zl9wYSA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKHhsYXRvciwgYnVmX3ZhLCBDTU1fVkEyUEEpOworCQlpZiAoYnVmX3BhKSB7CisJCQlzdGF0dXMgPSBjbW1fZnJlZV9idWYoeGxhdG9yX29iai0+aGNtbV9tZ3IsIGJ1Zl9wYSwKKwkJCQkJICAgICAgeGxhdG9yX29iai0+dWxfc2VnX2lkKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQkvKiBVaCBvaCwgdGhpcyBzaG91bGRuJ3QgaGFwcGVuLiBEZXNjcmlwdG9yCisJCQkJICogZ29uZSEgKi8KKwkJCQlEQkNfQVNTRVJUKGZhbHNlKTsJLyogQ01NIGlzIGxlYWtpbmcgbWVtICovCisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjbW1feGxhdG9yX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQvR2V0IHRyYW5zbGF0b3IgaW5mby4KKyAqLworaW50IGNtbV94bGF0b3JfaW5mbyhzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yLCB1OCAqKiBwYWRkciwKKwkJCSAgIHUzMiB1bF9zaXplLCB1MzIgc2VnbV9pZCwgYm9vbCBzZXRfaW5mbykKK3sKKwlzdHJ1Y3QgY21tX3hsYXRvciAqeGxhdG9yX29iaiA9IChzdHJ1Y3QgY21tX3hsYXRvciAqKXhsYXRvcjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYWRkciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSgoc2VnbV9pZCA+IDApICYmIChzZWdtX2lkIDw9IENNTV9NQVhHUFBTRUdTKSk7CisKKwlpZiAoeGxhdG9yX29iaikgeworCQlpZiAoc2V0X2luZm8pIHsKKwkJCS8qIHNldCB0cmFuc2xhdG9ycyB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgKi8KKwkJCXhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZSA9ICh1MzIpICpwYWRkcjsKKwkJCXhsYXRvcl9vYmotPnVsX3ZpcnRfc2l6ZSA9IHVsX3NpemU7CisJCX0gZWxzZSB7CS8qIHJldHVybiB2aXJ0IGJhc2UgYWRkcmVzcyAqLworCQkJKnBhZGRyID0gKHU4ICopIHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZTsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY21tX3hsYXRvcl90cmFuc2xhdGUgPT09PT09PT0KKyAqLwordm9pZCAqY21tX3hsYXRvcl90cmFuc2xhdGUoc3RydWN0IGNtbV94bGF0b3JvYmplY3QgKnhsYXRvciwgdm9pZCAqcGFkZHIsCisJCQkgICBlbnVtIGNtbV94bGF0ZXR5cGUgeHR5cGUpCit7CisJdTMyIGR3X2FkZHJfeGxhdGUgPSAwOworCXN0cnVjdCBjbW1feGxhdG9yICp4bGF0b3Jfb2JqID0gKHN0cnVjdCBjbW1feGxhdG9yICopeGxhdG9yOworCXN0cnVjdCBjbW1fb2JqZWN0ICpjbW1fbWdyX29iaiA9IE5VTEw7CisJc3RydWN0IGNtbV9hbGxvY2F0b3IgKmFsbG9jYXRvciA9IE5VTEw7CisJdTMyIGR3X29mZnNldCA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocGFkZHIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoKHh0eXBlID49IENNTV9WQTJQQSkgJiYgKHh0eXBlIDw9IENNTV9EU1BQQTJQQSkpOworCisJaWYgKCF4bGF0b3Jfb2JqKQorCQlnb3RvIGxvb3BfY29udDsKKworCWNtbV9tZ3Jfb2JqID0gKHN0cnVjdCBjbW1fb2JqZWN0ICopeGxhdG9yX29iai0+aGNtbV9tZ3I7CisJLyogZ2V0IHRoaXMgdHJhbnNsYXRvcidzIGRlZmF1bHQgU00gYWxsb2NhdG9yICovCisJREJDX0FTU0VSVCh4bGF0b3Jfb2JqLT51bF9zZWdfaWQgPiAwKTsKKwlhbGxvY2F0b3IgPSBjbW1fbWdyX29iai0+cGFfZ3Bwc21fc2VnX3RhYlt4bGF0b3Jfb2JqLT51bF9zZWdfaWQgLSAxXTsKKwlpZiAoIWFsbG9jYXRvcikKKwkJZ290byBsb29wX2NvbnQ7CisKKwlpZiAoKHh0eXBlID09IENNTV9WQTJEU1BQQSkgfHwgKHh0eXBlID09IENNTV9WQTJQQSkgfHwKKwkgICAgKHh0eXBlID09IENNTV9QQTJWQSkpIHsKKwkJaWYgKHh0eXBlID09IENNTV9QQTJWQSkgeworCQkJLyogR3BwIFZhID0gVmEgQmFzZSArIG9mZnNldCAqLworCQkJZHdfb2Zmc2V0ID0gKHU4ICopIHBhZGRyIC0gKHU4ICopIChhbGxvY2F0b3ItPnNobV9iYXNlIC0KKwkJCQkJCQkgICBhbGxvY2F0b3ItPgorCQkJCQkJCSAgIHVsX2RzcF9zaXplKTsKKwkJCWR3X2FkZHJfeGxhdGUgPSB4bGF0b3Jfb2JqLT5kd192aXJ0X2Jhc2UgKyBkd19vZmZzZXQ7CisJCQkvKiBDaGVjayBpZiB0cmFuc2xhdGVkIFZhIGJhc2UgaXMgaW4gcmFuZ2UgKi8KKwkJCWlmICgoZHdfYWRkcl94bGF0ZSA8IHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZSkgfHwKKwkJCSAgICAoZHdfYWRkcl94bGF0ZSA+PQorCQkJICAgICAoeGxhdG9yX29iai0+ZHdfdmlydF9iYXNlICsKKwkJCSAgICAgIHhsYXRvcl9vYmotPnVsX3ZpcnRfc2l6ZSkpKSB7CisJCQkJZHdfYWRkcl94bGF0ZSA9IDA7CS8qIGJhZCBhZGRyZXNzICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBHcHAgUEEgPSAgR3BwIEJhc2UgKyBvZmZzZXQgKi8KKwkJCWR3X29mZnNldCA9CisJCQkgICAgKHU4ICopIHBhZGRyIC0gKHU4ICopIHhsYXRvcl9vYmotPmR3X3ZpcnRfYmFzZTsKKwkJCWR3X2FkZHJfeGxhdGUgPQorCQkJICAgIGFsbG9jYXRvci0+c2htX2Jhc2UgLSBhbGxvY2F0b3ItPnVsX2RzcF9zaXplICsKKwkJCSAgICBkd19vZmZzZXQ7CisJCX0KKwl9IGVsc2UgeworCQlkd19hZGRyX3hsYXRlID0gKHUzMikgcGFkZHI7CisJfQorCS8qTm93IGNvbnZlcnQgYWRkcmVzcyB0byBwcm9wZXIgdGFyZ2V0IHBoeXNpY2FsIGFkZHJlc3MgaWYgbmVlZGVkICovCisJaWYgKCh4dHlwZSA9PSBDTU1fVkEyRFNQUEEpIHx8ICh4dHlwZSA9PSBDTU1fUEEyRFNQUEEpKSB7CisJCS8qIEdvdCBHcHAgUGEgbm93LCBjb252ZXJ0IHRvIERTUCBQYSAqLworCQlkd19hZGRyX3hsYXRlID0KKwkJICAgIEdQUFBBMkRTUFBBKChhbGxvY2F0b3ItPnNobV9iYXNlIC0gYWxsb2NhdG9yLT51bF9kc3Bfc2l6ZSksCisJCQkJZHdfYWRkcl94bGF0ZSwKKwkJCQlhbGxvY2F0b3ItPmR3X2RzcF9waHlzX2FkZHJfb2Zmc2V0ICoKKwkJCQlhbGxvY2F0b3ItPmNfZmFjdG9yKTsKKwl9IGVsc2UgaWYgKHh0eXBlID09IENNTV9EU1BQQTJQQSkgeworCQkvKiBHb3QgRFNQIFBhLCBjb252ZXJ0IHRvIEdQUCBQYSAqLworCQlkd19hZGRyX3hsYXRlID0KKwkJICAgIERTUFBBMkdQUFBBKGFsbG9jYXRvci0+c2htX2Jhc2UgLSBhbGxvY2F0b3ItPnVsX2RzcF9zaXplLAorCQkJCWR3X2FkZHJfeGxhdGUsCisJCQkJYWxsb2NhdG9yLT5kd19kc3BfcGh5c19hZGRyX29mZnNldCAqCisJCQkJYWxsb2NhdG9yLT5jX2ZhY3Rvcik7CisJfQorbG9vcF9jb250OgorCXJldHVybiAodm9pZCAqKWR3X2FkZHJfeGxhdGU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2QuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2NvZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTg5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9jb2QuYwpAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIGNvZC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgRFNQIGNvZGUgbWFuYWdlbWVudCBmb3IgdGhlIERTUC9CSU9TIEJyaWRnZQorICogZW52aXJvbm1lbnQuIEl0IGlzIG1vc3RseSBhIHRoaW4gd3JhcHBlci4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgYm90aCBzdGF0aWMgYW5kCisgKiBkeW5hbWljIGNvZGUgb2JqZWN0cyBvbnRvIERTUCBzeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9sZHIuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKy8qIEluY2x1ZGUgYXBwcm9wcmlhdGUgbG9hZGVyIGhlYWRlciBmaWxlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisKKy8qCisgKiAgPT09PT09PT0gY29kX21hbmFnZXIgPT09PT09PT0KKyAqLworc3RydWN0IGNvZF9tYW5hZ2VyIHsKKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmJhc2VfbGliOworCWJvb2wgbG9hZGVkOwkJLyogQmFzZSBsaWJyYXJ5IGxvYWRlZD8gKi8KKwl1MzIgdWxfZW50cnk7CisJc3RydWN0IGxkcl9tb2R1bGUgKmRsbF9vYmo7CisJc3RydWN0IGRibGxfZnhucyBmeG5zOworCXN0cnVjdCBkYmxsX2F0dHJzIGF0dHJzOworCWNoYXIgc3pfemxfZmlsZVtDT0RfTUFYUEFUSExFTkdUSF07Cit9OworCisvKgorICogID09PT09PT09IGNvZF9saWJyYXJ5b2JqID09PT09PT09CisgKi8KK3N0cnVjdCBjb2RfbGlicmFyeW9iaiB7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmRibGxfbGliOworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsKK307CisKK3N0YXRpYyB1MzIgcmVmcyA9IDBMOworCitzdGF0aWMgc3RydWN0IGRibGxfZnhucyBsZHJfZnhucyA9IHsKKwkoZGJsbF9jbG9zZV9meG4pIGRibGxfY2xvc2UsCisJKGRibGxfY3JlYXRlX2Z4bikgZGJsbF9jcmVhdGUsCisJKGRibGxfZGVsZXRlX2Z4bikgZGJsbF9kZWxldGUsCisJKGRibGxfZXhpdF9meG4pIGRibGxfZXhpdCwKKwkoZGJsbF9nZXRfYXR0cnNfZnhuKSBkYmxsX2dldF9hdHRycywKKwkoZGJsbF9nZXRfYWRkcl9meG4pIGRibGxfZ2V0X2FkZHIsCisJKGRibGxfZ2V0X2NfYWRkcl9meG4pIGRibGxfZ2V0X2NfYWRkciwKKwkoZGJsbF9nZXRfc2VjdF9meG4pIGRibGxfZ2V0X3NlY3QsCisJKGRibGxfaW5pdF9meG4pIGRibGxfaW5pdCwKKwkoZGJsbF9sb2FkX2Z4bikgZGJsbF9sb2FkLAorCShkYmxsX2xvYWRfc2VjdF9meG4pIGRibGxfbG9hZF9zZWN0LAorCShkYmxsX29wZW5fZnhuKSBkYmxsX29wZW4sCisJKGRibGxfcmVhZF9zZWN0X2Z4bikgZGJsbF9yZWFkX3NlY3QsCisJKGRibGxfc2V0X2F0dHJzX2Z4bikgZGJsbF9zZXRfYXR0cnMsCisJKGRibGxfdW5sb2FkX2Z4bikgZGJsbF91bmxvYWQsCisJKGRibGxfdW5sb2FkX3NlY3RfZnhuKSBkYmxsX3VubG9hZF9zZWN0LAorfTsKKworc3RhdGljIGJvb2wgbm9fb3Aodm9pZCk7CisKKy8qCisgKiBGaWxlIG9wZXJhdGlvbnMgKG9yaWdpbmFsbHkgd2VyZSB1bmRlciBrZmlsZS5jKQorICovCitzdGF0aWMgczMyIGNvZF9mX2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qIENoZWNrIGZvciB2YWxpZCBoYW5kbGUgKi8KKwlpZiAoIWZpbHApCisJCXJldHVybiAtRUZBVUxUOworCisJZmlscF9jbG9zZShmaWxwLCBOVUxMKTsKKworCS8qIHdlIGNhbid0IHVzZSAwIGhlcmUgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlICpjb2RfZl9vcGVuKGNvbnN0IGNoYXIgKnBzel9maWxlX25hbWUsIGNvbnN0IGNoYXIgKnN6X21vZGUpCit7CisJbW1fc2VnbWVudF90IGZzOworCXN0cnVjdCBmaWxlICpmaWxwOworCisJZnMgPSBnZXRfZnMoKTsKKwlzZXRfZnMoZ2V0X2RzKCkpOworCisJLyogaWdub3JlIGdpdmVuIG1vZGUgYW5kIG9wZW4gZmlsZSBhcyByZWFkLW9ubHkgKi8KKwlmaWxwID0gZmlscF9vcGVuKHBzel9maWxlX25hbWUsIE9fUkRPTkxZLCAwKTsKKworCWlmIChJU19FUlIoZmlscCkpCisJCWZpbHAgPSBOVUxMOworCisJc2V0X2ZzKGZzKTsKKworCXJldHVybiBmaWxwOworfQorCitzdGF0aWMgczMyIGNvZF9mX3JlYWQodm9pZCBfX3VzZXIgKnBidWZmZXIsIHMzMiBzaXplLCBzMzIgY291bnQsCisJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCS8qIGNoZWNrIGZvciB2YWxpZCBmaWxlIGhhbmRsZSAqLworCWlmICghZmlscCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoKHNpemUgPiAwKSAmJiAoY291bnQgPiAwKSAmJiBwYnVmZmVyKSB7CisJCXUzMiBkd19ieXRlc19yZWFkOworCQltbV9zZWdtZW50X3QgZnM7CisKKwkJLyogcmVhZCBmcm9tIGZpbGUgKi8KKwkJZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKGdldF9kcygpKTsKKwkJZHdfYnl0ZXNfcmVhZCA9IGZpbHAtPmZfb3AtPnJlYWQoZmlscCwgcGJ1ZmZlciwgc2l6ZSAqIGNvdW50LAorCQkJCQkJICYoZmlscC0+Zl9wb3MpKTsKKwkJc2V0X2ZzKGZzKTsKKworCQlpZiAoIWR3X2J5dGVzX3JlYWQpCisJCQlyZXR1cm4gLUVCQURGOworCisJCXJldHVybiBkd19ieXRlc19yZWFkIC8gc2l6ZTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHMzMiBjb2RfZl9zZWVrKHN0cnVjdCBmaWxlICpmaWxwLCBzMzIgb2Zmc2V0LCBzMzIgb3JpZ2luKQoreworCWxvZmZfdCBkd19jdXJfcG9zOworCisJLyogY2hlY2sgZm9yIHZhbGlkIGZpbGUgaGFuZGxlICovCisJaWYgKCFmaWxwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGJhc2VkIG9uIHRoZSBvcmlnaW4gZmxhZywgbW92ZSB0aGUgaW50ZXJuYWwgcG9pbnRlciAqLworCWR3X2N1cl9wb3MgPSBmaWxwLT5mX29wLT5sbHNlZWsoZmlscCwgb2Zmc2V0LCBvcmlnaW4pOworCisJaWYgKChzMzIpIGR3X2N1cl9wb3MgPCAwKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogd2UgY2FuJ3QgdXNlIDAgaGVyZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGNvZF9mX3RlbGwoc3RydWN0IGZpbGUgKmZpbHApCit7CisJbG9mZl90IGR3X2N1cl9wb3M7CisKKwlpZiAoIWZpbHApCisJCXJldHVybiAtRUZBVUxUOworCisJLyogR2V0IGN1cnJlbnQgcG9zaXRpb24gKi8KKwlkd19jdXJfcG9zID0gZmlscC0+Zl9vcC0+bGxzZWVrKGZpbHAsIDAsIFNFRUtfQ1VSKTsKKworCWlmICgoczMyKSBkd19jdXJfcG9zIDwgMCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiBkd19jdXJfcG9zOworfQorCisvKgorICogID09PT09PT09IGNvZF9jbG9zZSA9PT09PT09PQorICovCit2b2lkIGNvZF9jbG9zZShzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYikKK3sKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobGliICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGxpYi0+Y29kX21ncik7CisKKwlobWdyID0gbGliLT5jb2RfbWdyOworCWhtZ3ItPmZ4bnMuY2xvc2VfZnhuKGxpYi0+ZGJsbF9saWIpOworCisJa2ZyZWUobGliKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGFuIG9iamVjdCB0byBtYW5hZ2UgY29kZSBvbiBhIERTUCBzeXN0ZW0uCisgKiAgICAgIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIHRvIGxvYWQgYW4gaW5pdGlhbCBwcm9ncmFtIGltYWdlIHdpdGgKKyAqICAgICAgYXJndW1lbnRzIHRoYXQgY2FuIGxhdGVyIGJlIGV4cGFuZGVkIHdpdGgKKyAqICAgICAgZHluYW1pY2FsbHkgbG9hZGVkIG9iamVjdCBmaWxlcy4KKyAqCisgKi8KK2ludCBjb2RfY3JlYXRlKHN0cnVjdCBjb2RfbWFuYWdlciAqKm1nciwgY2hhciAqc3RyX3psX2ZpbGUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjb2RfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBjb2RfbWFuYWdlciAqbWdyX25ldzsKKwlzdHJ1Y3QgZGJsbF9hdHRycyB6bF9hdHRyczsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZ3IgIT0gTlVMTCk7CisKKwkvKiBhc3N1bWUgZmFpbHVyZSAqLworCSptZ3IgPSBOVUxMOworCisJLyogd2UgZG9uJ3Qgc3VwcG9ydCBub24tZGVmYXVsdCBhdHRycyB5ZXQgKi8KKwlpZiAoYXR0cnMgIT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwltZ3JfbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvZF9tYW5hZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1ncl9uZXcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXQgdXAgbG9hZGVyIGZ1bmN0aW9ucyAqLworCW1ncl9uZXctPmZ4bnMgPSBsZHJfZnhuczsKKworCS8qIGluaXRpYWxpemUgdGhlIFpMIG1vZHVsZSAqLworCW1ncl9uZXctPmZ4bnMuaW5pdF9meG4oKTsKKworCXpsX2F0dHJzLmFsbG9jID0gKGRibGxfYWxsb2NfZnhuKSBub19vcDsKKwl6bF9hdHRycy5mcmVlID0gKGRibGxfZnJlZV9meG4pIG5vX29wOworCXpsX2F0dHJzLmZyZWFkID0gKGRibGxfcmVhZF9meG4pIGNvZF9mX3JlYWQ7CisJemxfYXR0cnMuZnNlZWsgPSAoZGJsbF9zZWVrX2Z4bikgY29kX2Zfc2VlazsKKwl6bF9hdHRycy5mdGVsbCA9IChkYmxsX3RlbGxfZnhuKSBjb2RfZl90ZWxsOworCXpsX2F0dHJzLmZjbG9zZSA9IChkYmxsX2ZfY2xvc2VfZnhuKSBjb2RfZl9jbG9zZTsKKwl6bF9hdHRycy5mb3BlbiA9IChkYmxsX2Zfb3Blbl9meG4pIGNvZF9mX29wZW47CisJemxfYXR0cnMuc3ltX2xvb2t1cCA9IE5VTEw7CisJemxfYXR0cnMuYmFzZV9pbWFnZSA9IHRydWU7CisJemxfYXR0cnMubG9nX3dyaXRlID0gTlVMTDsKKwl6bF9hdHRycy5sb2dfd3JpdGVfaGFuZGxlID0gTlVMTDsKKwl6bF9hdHRycy53cml0ZSA9IE5VTEw7CisJemxfYXR0cnMucm1tX2hhbmRsZSA9IE5VTEw7CisJemxfYXR0cnMuaW5wdXRfcGFyYW1zID0gTlVMTDsKKwl6bF9hdHRycy5zeW1faGFuZGxlID0gTlVMTDsKKwl6bF9hdHRycy5zeW1fYXJnID0gTlVMTDsKKworCW1ncl9uZXctPmF0dHJzID0gemxfYXR0cnM7CisKKwlzdGF0dXMgPSBtZ3JfbmV3LT5meG5zLmNyZWF0ZV9meG4oJm1ncl9uZXctPnRhcmdldCwgJnpsX2F0dHJzKTsKKworCWlmIChzdGF0dXMpIHsKKwkJY29kX2RlbGV0ZShtZ3JfbmV3KTsKKwkJcmV0dXJuIC1FU1BJUEU7CisJfQorCisJLyogcmV0dXJuIHRoZSBuZXcgbWFuYWdlciAqLworCSptZ3IgPSBtZ3JfbmV3OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSBhIGNvZGUgbWFuYWdlciBvYmplY3QuCisgKi8KK3ZvaWQgY29kX2RlbGV0ZShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisKKwlpZiAoY29kX21ncl9vYmotPmJhc2VfbGliKSB7CisJCWlmIChjb2RfbWdyX29iai0+bG9hZGVkKQorCQkJY29kX21ncl9vYmotPmZ4bnMudW5sb2FkX2Z4bihjb2RfbWdyX29iai0+YmFzZV9saWIsCisJCQkJCQkJJmNvZF9tZ3Jfb2JqLT5hdHRycyk7CisKKwkJY29kX21ncl9vYmotPmZ4bnMuY2xvc2VfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYik7CisJfQorCWlmIChjb2RfbWdyX29iai0+dGFyZ2V0KSB7CisJCWNvZF9tZ3Jfb2JqLT5meG5zLmRlbGV0ZV9meG4oY29kX21ncl9vYmotPnRhcmdldCk7CisJCWNvZF9tZ3Jfb2JqLT5meG5zLmV4aXRfZnhuKCk7CisJfQorCWtmcmVlKGNvZF9tZ3Jfb2JqKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDT0QgbW9kdWxlLgorICoKKyAqLwordm9pZCBjb2RfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2Jhc2VfbGliID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0IGhhbmRsZSB0byB0aGUgYmFzZSBpbWFnZSBEQkwgbGlicmFyeS4KKyAqLworaW50IGNvZF9nZXRfYmFzZV9saWIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCSAgICBzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKnBsaWIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmopOworCURCQ19SRVFVSVJFKHBsaWIgIT0gTlVMTCk7CisKKwkqcGxpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWNvZF9tZ3Jfb2JqLT5iYXNlX2xpYjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9iYXNlX25hbWUgPT09PT09PT0KKyAqLworaW50IGNvZF9nZXRfYmFzZV9uYW1lKHN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncl9vYmosIGNoYXIgKnN6X25hbWUsCisJCQkgICAgIHUzMiB1c2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUoc3pfbmFtZSAhPSBOVUxMKTsKKworCWlmICh1c2l6ZSA8PSBDT0RfTUFYUEFUSExFTkdUSCkKKwkJc3RybmNweShzel9uYW1lLCBjb2RfbWdyX29iai0+c3pfemxfZmlsZSwgdXNpemUpOworCWVsc2UKKwkJc3RhdHVzID0gLUVQRVJNOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2VudHJ5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGVudHJ5IHBvaW50IG9mIGEgbG9hZGVkIERTUCBwcm9ncmFtIGltYWdlCisgKgorICovCitpbnQgY29kX2dldF9lbnRyeShzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3Jfb2JqLCB1MzIgKmVudHJ5X3B0KQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUoZW50cnlfcHQgIT0gTlVMTCk7CisKKwkqZW50cnlfcHQgPSBjb2RfbWdyX29iai0+dWxfZW50cnk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2RfZ2V0X2xvYWRlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCBoYW5kbGUgdG8gdGhlIERCTEwgbG9hZGVyLgorICovCitpbnQgY29kX2dldF9sb2FkZXIoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwKKwkJCSAgc3RydWN0IGRibGxfdGFyX29iaiAqKmxvYWRlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyX29iaik7CisJREJDX1JFUVVJUkUobG9hZGVyICE9IE5VTEwpOworCisJKmxvYWRlciA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopY29kX21ncl9vYmotPnRhcmdldDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zZWN0aW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3MgYW5kIGxlbmd0aCBvZiBhIHNlY3Rpb24gaW4gdGhlIENPRkYgZmlsZQorICogICAgICBnaXZlbiB0aGUgc2VjdGlvbiBuYW1lLgorICovCitpbnQgY29kX2dldF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLCBjaGFyICpzdHJfc2VjdCwKKwkJCSAgIHUzMiAqYWRkciwgdTMyICpsZW4pCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShsaWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobGliLT5jb2RfbWdyKTsKKwlEQkNfUkVRVUlSRShzdHJfc2VjdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShhZGRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGxlbiAhPSBOVUxMKTsKKworCSphZGRyID0gMDsKKwkqbGVuID0gMDsKKwlpZiAobGliICE9IE5VTEwpIHsKKwkJY29kX21ncl9vYmogPSBsaWItPmNvZF9tZ3I7CisJCXN0YXR1cyA9IGNvZF9tZ3Jfb2JqLT5meG5zLmdldF9zZWN0X2Z4bihsaWItPmRibGxfbGliLCBzdHJfc2VjdCwKKwkJCQkJCQlhZGRyLCBsZW4pOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FU1BJUEU7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8ICgoKmFkZHIgPT0gMCkgJiYgKCpsZW4gPT0gMCkpKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2dldF9zeW1fdmFsdWUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgc3ltYm9sLiBUaGUgc3ltYm9sIGlzIGZpcnN0CisgKiAgICAgIHNlYXJjaGVkIGZvciBsaXRlcmFsbHkgYW5kIHRoZW4sIGlmIG5vdCBmb3VuZCwgc2VhcmNoZWQgZm9yIGFzIGEKKyAqICAgICAgQyBzeW1ib2wuCisgKgorICovCitpbnQgY29kX2dldF9zeW1fdmFsdWUoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwgY2hhciAqc3RyX3N5bSwKKwkJCSAgICAgdTMyICpwdWxfdmFsdWUpCit7CisJc3RydWN0IGRibGxfc3ltX3ZhbCAqZGJsbF9zeW07CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmopOworCURCQ19SRVFVSVJFKHN0cl9zeW0gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHVsX3ZhbHVlICE9IE5VTEwpOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogY29kX21ncl9vYmo6ICVwIHN0cl9zeW06ICVzIHB1bF92YWx1ZTogJXBcbiIsCisJCV9fZnVuY19fLCBjb2RfbWdyX29iaiwgc3RyX3N5bSwgcHVsX3ZhbHVlKTsKKwlpZiAoY29kX21ncl9vYmotPmJhc2VfbGliKSB7CisJCWlmICghY29kX21ncl9vYmotPmZ4bnMuCisJCSAgICBnZXRfYWRkcl9meG4oY29kX21ncl9vYmotPmJhc2VfbGliLCBzdHJfc3ltLCAmZGJsbF9zeW0pKSB7CisJCQlpZiAoIWNvZF9tZ3Jfb2JqLT5meG5zLgorCQkJICAgIGdldF9jX2FkZHJfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwgc3RyX3N5bSwKKwkJCQkJCSZkYmxsX3N5bSkpCisJCQkJcmV0dXJuIC1FU1BJUEU7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVTUElQRTsKKwl9CisKKwkqcHVsX3ZhbHVlID0gZGJsbF9zeW0tPnZhbHVlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDT0QgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqCisgKi8KK2Jvb2wgY29kX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIHJlZnMgPiAwKSB8fCAoIXJldCAmJiByZWZzID49IDApKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGNvZF9sb2FkX2Jhc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBMb2FkIHRoZSBpbml0aWFsIHByb2dyYW0gaW1hZ2UsIG9wdGlvbmFsbHkgd2l0aCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLAorICogICAgICBvbiB0aGUgRFNQIHN5c3RlbSBtYW5hZ2VkIGJ5IHRoZSBzdXBwbGllZCBoYW5kbGUuIFRoZSBwcm9ncmFtIHRvIGJlCisgKiAgICAgIGxvYWRlZCBtdXN0IGJlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcmdzIGFycmF5IGFuZCBtdXN0IGJlIGEgZnVsbHkKKyAqICAgICAgcXVhbGlmaWVkIHBhdGhuYW1lLgorICogIERldGFpbHM6CisgKiAgICAgIGlmIG51bV9hcmdjIGRvZXNuJ3QgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIGFyZ3MgYXJyYXksIHRoZQorICogICAgICBhcmdzIGFycmF5IGlzIHNlYXJjaGVkIGZvciBhIE5VTEwgdGVybWluYXRpbmcgZW50cnksIGFuZCBhcmdjIGlzCisgKiAgICAgIHJlY2FsY3VsYXRlZCB0byByZWZsZWN0IHRoaXMuICBJbiB0aGlzIHdheSwgd2UgY2FuIHN1cHBvcnQgTlVMTAorICogICAgICB0ZXJtaW5hdGluZyBhcmdzIGFycmF5cywgaWYgbnVtX2FyZ2MgaXMgdmVyeSBsYXJnZS4KKyAqLworaW50IGNvZF9sb2FkX2Jhc2Uoc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyX29iaiwgdTMyIG51bV9hcmdjLCBjaGFyICphcmdzW10sCisJCQkgY29kX3dyaXRlZnhuIHBmbl93cml0ZSwgdm9pZCAqYXJiLCBjaGFyICplbnZwW10pCit7CisJZGJsbF9mbGFncyBmbGFnczsKKwlzdHJ1Y3QgZGJsbF9hdHRycyBzYXZlX2F0dHJzOworCXN0cnVjdCBkYmxsX2F0dHJzIG5ld19hdHRyczsKKwlpbnQgc3RhdHVzOworCXUzMiBpOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGNvZF9tZ3Jfb2JqKTsKKwlEQkNfUkVRVUlSRShudW1fYXJnYyA+IDApOworCURCQ19SRVFVSVJFKGFyZ3MgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoYXJnc1swXSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwZm5fd3JpdGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoY29kX21ncl9vYmotPmJhc2VfbGliICE9IE5VTEwpOworCisJLyoKKwkgKiAgTWFrZSBzdXJlIGV2ZXJ5IGFyZ3ZbXSBzdGF0ZWQgaW4gYXJnYyBoYXMgYSB2YWx1ZSwgb3IgY2hhbmdlIGFyZ2MgdG8KKwkgKiAgcmVmbGVjdCB0cnVlIG51bWJlciBpbiBOVUxMIHRlcm1pbmF0ZWQgYXJndiBhcnJheS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2FyZ2M7IGkrKykgeworCQlpZiAoYXJnc1tpXSA9PSBOVUxMKSB7CisJCQludW1fYXJnYyA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHNldCB0aGUgd3JpdGUgZnVuY3Rpb24gZm9yIHRoaXMgb3BlcmF0aW9uICovCisJY29kX21ncl9vYmotPmZ4bnMuZ2V0X2F0dHJzX2Z4bihjb2RfbWdyX29iai0+dGFyZ2V0LCAmc2F2ZV9hdHRycyk7CisKKwluZXdfYXR0cnMgPSBzYXZlX2F0dHJzOworCW5ld19hdHRycy53cml0ZSA9IChkYmxsX3dyaXRlX2Z4bikgcGZuX3dyaXRlOworCW5ld19hdHRycy5pbnB1dF9wYXJhbXMgPSBhcmI7CisJbmV3X2F0dHJzLmFsbG9jID0gKGRibGxfYWxsb2NfZnhuKSBub19vcDsKKwluZXdfYXR0cnMuZnJlZSA9IChkYmxsX2ZyZWVfZnhuKSBub19vcDsKKwluZXdfYXR0cnMubG9nX3dyaXRlID0gTlVMTDsKKwluZXdfYXR0cnMubG9nX3dyaXRlX2hhbmRsZSA9IE5VTEw7CisKKwkvKiBMb2FkIHRoZSBpbWFnZSAqLworCWZsYWdzID0gREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9TWU1COworCXN0YXR1cyA9IGNvZF9tZ3Jfb2JqLT5meG5zLmxvYWRfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYiwgZmxhZ3MsCisJCQkJCSAgICAmbmV3X2F0dHJzLAorCQkJCQkgICAgJmNvZF9tZ3Jfb2JqLT51bF9lbnRyeSk7CisJaWYgKHN0YXR1cykKKwkJY29kX21ncl9vYmotPmZ4bnMuY2xvc2VfZnhuKGNvZF9tZ3Jfb2JqLT5iYXNlX2xpYik7CisKKwlpZiAoIXN0YXR1cykKKwkJY29kX21ncl9vYmotPmxvYWRlZCA9IHRydWU7CisJZWxzZQorCQljb2RfbWdyX29iai0+YmFzZV9saWIgPSBOVUxMOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBjb2Rfb3BlbiA9PT09PT09PQorICogICAgICBPcGVuIGxpYnJhcnkgZm9yIHJlYWRpbmcgc2VjdGlvbnMuCisgKi8KK2ludCBjb2Rfb3BlbihzdHJ1Y3QgY29kX21hbmFnZXIgKmhtZ3IsIGNoYXIgKnN6X2NvZmZfcGF0aCwKKwkJICAgIHUzMiBmbGFncywgc3RydWN0IGNvZF9saWJyYXJ5b2JqICoqbGliX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY29kX2xpYnJhcnlvYmogKmxpYiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaG1ncik7CisJREJDX1JFUVVJUkUoc3pfY29mZl9wYXRoICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGZsYWdzID09IENPRF9OT0xPQUQgfHwgZmxhZ3MgPT0gQ09EX1NZTUIpOworCURCQ19SRVFVSVJFKGxpYl9vYmogIT0gTlVMTCk7CisKKwkqbGliX29iaiA9IE5VTEw7CisKKwlsaWIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29kX2xpYnJhcnlvYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAobGliID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlsaWItPmNvZF9tZ3IgPSBobWdyOworCQlzdGF0dXMgPSBobWdyLT5meG5zLm9wZW5fZnhuKGhtZ3ItPnRhcmdldCwgc3pfY29mZl9wYXRoLCBmbGFncywKKwkJCQkJICAgICAmbGliLT5kYmxsX2xpYik7CisJCWlmICghc3RhdHVzKQorCQkJKmxpYl9vYmogPSBsaWI7CisJfQorCisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogZXJyb3Igc3RhdHVzIDB4JXgsIHN6X2NvZmZfcGF0aDogJXMgZmxhZ3M6IDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzLCBzel9jb2ZmX3BhdGgsIGZsYWdzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNvZF9vcGVuX2Jhc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBPcGVuIGJhc2UgaW1hZ2UgZm9yIHJlYWRpbmcgc2VjdGlvbnMuCisgKi8KK2ludCBjb2Rfb3Blbl9iYXNlKHN0cnVjdCBjb2RfbWFuYWdlciAqaG1nciwgY2hhciAqc3pfY29mZl9wYXRoLAorCQkJIGRibGxfZmxhZ3MgZmxhZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShobWdyKTsKKwlEQkNfUkVRVUlSRShzel9jb2ZmX3BhdGggIT0gTlVMTCk7CisKKwkvKiBpZiB3ZSBwcmV2aW91c2x5IG9wZW5lZCBhIGJhc2UgaW1hZ2UsIGNsb3NlIGl0IG5vdyAqLworCWlmIChobWdyLT5iYXNlX2xpYikgeworCQlpZiAoaG1nci0+bG9hZGVkKSB7CisJCQlobWdyLT5meG5zLnVubG9hZF9meG4oaG1nci0+YmFzZV9saWIsICZobWdyLT5hdHRycyk7CisJCQlobWdyLT5sb2FkZWQgPSBmYWxzZTsKKwkJfQorCQlobWdyLT5meG5zLmNsb3NlX2Z4bihobWdyLT5iYXNlX2xpYik7CisJCWhtZ3ItPmJhc2VfbGliID0gTlVMTDsKKwl9CisJc3RhdHVzID0gaG1nci0+Znhucy5vcGVuX2Z4bihobWdyLT50YXJnZXQsIHN6X2NvZmZfcGF0aCwgZmxhZ3MsICZsaWIpOworCWlmICghc3RhdHVzKSB7CisJCS8qIGhhbmcgb250byB0aGUgbGlicmFyeSBmb3Igc3Vic2VxdWVudCBzeW0gdGFibGUgdXNhZ2UgKi8KKwkJaG1nci0+YmFzZV9saWIgPSBsaWI7CisJCXN0cm5jcHkoaG1nci0+c3pfemxfZmlsZSwgc3pfY29mZl9wYXRoLCBDT0RfTUFYUEFUSExFTkdUSCAtIDEpOworCQlobWdyLT5zel96bF9maWxlW0NPRF9NQVhQQVRITEVOR1RIIC0gMV0gPSAnXDAnOworCX0KKworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IGVycm9yIHN0YXR1cyAweCV4IHN6X2NvZmZfcGF0aDogJXNcbiIsIF9fZnVuY19fLAorCQkgICAgICAgc3RhdHVzLCBzel9jb2ZmX3BhdGgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY29kX3JlYWRfc2VjdGlvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBjb250ZW50IG9mIGEgY29kZSBzZWN0aW9uIGdpdmVuIHRoZSBzZWN0aW9uIG5hbWUuCisgKi8KK2ludCBjb2RfcmVhZF9zZWN0aW9uKHN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliLCBjaGFyICpzdHJfc2VjdCwKKwkJCSAgICBjaGFyICpzdHJfY29udGVudCwgdTMyIGNvbnRlbnRfc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShsaWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobGliLT5jb2RfbWdyKTsKKwlEQkNfUkVRVUlSRShzdHJfc2VjdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzdHJfY29udGVudCAhPSBOVUxMKTsKKworCWlmIChsaWIgIT0gTlVMTCkKKwkJc3RhdHVzID0KKwkJICAgIGxpYi0+Y29kX21nci0+Znhucy5yZWFkX3NlY3RfZnhuKGxpYi0+ZGJsbF9saWIsIHN0cl9zZWN0LAorCQkJCQkJICAgICBzdHJfY29udGVudCwgY29udGVudF9zaXplKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FU1BJUEU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vX29wID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTm8gT3BlcmF0aW9uLgorICoKKyAqLworc3RhdGljIGJvb2wgbm9fb3Aodm9pZCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RibGwuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RibGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQwNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvZGJsbC5jCkBAIC0wLDAgKzEsMTU4NSBAQAorLyoKKyAqIGRibGwuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9naC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworCisvKiBEeW5hbWljIGxvYWRlciBsaWJyYXJ5IGludGVyZmFjZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9keW5hbWljX2xvYWRlci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9nZXRzZWN0aW9uLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RibGwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvcm1tLmg+CisKKy8qIE51bWJlciBvZiBidWNrZXRzIGZvciBzeW1ib2wgaGFzaCB0YWJsZSAqLworI2RlZmluZSBNQVhCVUNLRVRTIDIxMQorCisvKiBNYXggYnVmZmVyIGxlbmd0aCAqLworI2RlZmluZSBNQVhFWFBSIDEyOAorCisjZGVmaW5lIERPRkZfQUxJR04oeCkgKCgoeCkgKyAzKSAmIH4zVUwpCisKKy8qCisgKiAgPT09PT09PT0gc3RydWN0IGRibGxfdGFyX29iaiogPT09PT09PT0KKyAqICBBIHRhcmdldCBtYXkgaGF2ZSBvbmUgb3IgbW9yZSBsaWJyYXJpZXMgb2Ygc3ltYm9scy9jb2RlL2RhdGEgbG9hZGVkCisgKiAgb250byBpdCwgd2hlcmUgYSBsaWJyYXJ5IGlzIHNpbXBseSB0aGUgc3ltYm9scy9jb2RlL2RhdGEgY29udGFpbmVkCisgKiAgaW4gYSBET0ZGIGZpbGUuCisgKi8KKy8qCisgKiAgPT09PT09PT0gZGJsbF90YXJfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX3Rhcl9vYmogeworCXN0cnVjdCBkYmxsX2F0dHJzIGF0dHJzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpoZWFkOwkvKiBMaXN0IG9mIGFsbCBvcGVuZWQgbGlicmFyaWVzICovCit9OworCisvKgorICogIFRoZSBmb2xsb3dpbmcgNCB0eXBlZGVmcyBhcmUgInN1cGVyIGNsYXNzZXMiIG9mIHRoZSBkeW5hbWljIGxvYWRlcgorICogIGxpYnJhcnkgdHlwZXMgdXNlZCBpbiBkeW5hbWljIGxvYWRlciBmdW5jdGlvbnMgKGR5bmFtaWNfbG9hZGVyLmgpLgorICovCisvKgorICogID09PT09PT09IGRibGxfc3RyZWFtID09PT09PT09CisgKiAgQ29udGFpbnMgZHluYW1pY19sb2FkZXJfc3RyZWFtCisgKi8KK3N0cnVjdCBkYmxsX3N0cmVhbSB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSBkbF9zdHJlYW07CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gbGRyX3N5bWJvbCA9PT09PT09PQorICovCitzdHJ1Y3QgbGRyX3N5bWJvbCB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSBkbF9zeW1ib2w7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9hbGxvYyA9PT09PT09PQorICovCitzdHJ1Y3QgZGJsbF9hbGxvYyB7CisJc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlIGRsX2FsbG9jOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfaW5pdF9vYmogPT09PT09PT0KKyAqLworc3RydWN0IGRibGxfaW5pdF9vYmogeworCXN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplIGRsX2luaXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKK307CisKKy8qCisgKiAgPT09PT09PT0gREJMTF9MaWJyYXJ5ID09PT09PT09CisgKiAgQSBsaWJyYXJ5IGhhbmRsZSBpcyByZXR1cm5lZCBieSBEQkxMX09wZW4oKSBhbmQgaXMgcGFzc2VkIHRvIGRibGxfbG9hZCgpCisgKiAgdG8gbG9hZCBzeW1ib2xzL2NvZGUvZGF0YSwgYW5kIHRvIGRibGxfdW5sb2FkKCksIHRvIHJlbW92ZSB0aGUKKyAqICBzeW1ib2xzL2NvZGUvZGF0YSBsb2FkZWQgYnkgZGJsbF9sb2FkKCkuCisgKi8KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2xpYnJhcnlfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX2xpYnJhcnlfb2JqIHsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbmV4dDsJLyogTmV4dCBsaWJyYXJ5IGluIHRhcmdldCdzIGxpc3QgKi8KKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqcHJldjsJLyogUHJldmlvdXMgaW4gdGhlIGxpc3QgKi8KKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXRfb2JqOwkvKiB0YXJnZXQgZm9yIHRoaXMgbGlicmFyeSAqLworCisJLyogT2JqZWN0cyBuZWVkZWQgYnkgZHluYW1pYyBsb2FkZXIgKi8KKwlzdHJ1Y3QgZGJsbF9zdHJlYW0gc3RyZWFtOworCXN0cnVjdCBsZHJfc3ltYm9sIHN5bWJvbDsKKwlzdHJ1Y3QgZGJsbF9hbGxvYyBhbGxvY2F0ZTsKKwlzdHJ1Y3QgZGJsbF9pbml0X29iaiBpbml0OworCXZvaWQgKmRsb2FkX21vZF9vYmo7CisKKwljaGFyICpmaWxlX25hbWU7CS8qIENPRkYgZmlsZSBuYW1lICovCisJdm9pZCAqZnA7CQkvKiBPcGFxdWUgZmlsZSBoYW5kbGUgKi8KKwl1MzIgZW50cnk7CQkvKiBFbnRyeSBwb2ludCAqLworCXZvaWQgKmRlc2M7CS8qIGRlc2Mgb2YgRE9GRiBmaWxlIGxvYWRlZCAqLworCXUzMiBvcGVuX3JlZjsJCS8qIE51bWJlciBvZiB0aW1lcyBvcGVuZWQgKi8KKwl1MzIgbG9hZF9yZWY7CQkvKiBOdW1iZXIgb2YgdGltZXMgbG9hZGVkICovCisJc3RydWN0IGdoX3RfaGFzaF90YWIgKnN5bV90YWI7CS8qIEhhc2ggdGFibGUgb2Ygc3ltYm9scyAqLworCXUzMiB1bF9wb3M7Cit9OworCisvKgorICogID09PT09PT09IGRibGxfc3ltYm9sID09PT09PT09CisgKi8KK3N0cnVjdCBkYmxsX3N5bWJvbCB7CisJc3RydWN0IGRibGxfc3ltX3ZhbCB2YWx1ZTsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIHZvaWQgZG9mX2Nsb3NlKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIpOworc3RhdGljIGludCBkb2Zfb3BlbihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKTsKK3N0YXRpYyBzMzIgbm9fb3Aoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsIHZvaWQgKmJ1ZnIsCisJCSBsZHJfYWRkciBsb2NuLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywKKwkJIHVuc2lnbmVkIGJ5dHNpemUpOworCisvKgorICogIEZ1bmN0aW9ucyBjYWxsZWQgYnkgZHluYW1pYyBsb2FkZXIKKyAqCisgKi8KKy8qIGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqLworc3RhdGljIGludCBkYmxsX3JlYWRfYnVmZmVyKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXMsIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICB1bnNpZ25lZCBidWZzaXplKTsKK3N0YXRpYyBpbnQgZGJsbF9zZXRfZmlsZV9wb3NuKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKnRoaXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcG9zKTsKKy8qIGR5bmFtaWNfbG9hZGVyX3N5bSAqLworc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9maW5kX3N5bWJvbChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX2FkZF90b19zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkJICAgICAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIG1vZHVsZV9pZCk7CitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpmaW5kX2luX3N5bWJvbF90YWJsZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltCisJCQkJCQkgICAqdGhpcywgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgIHVuc2lnbmVkIG1vZHVsZWlkKTsKK3N0YXRpYyB2b2lkIGRibGxfcHVyZ2Vfc3ltYm9sX3RhYmxlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsCisJCQkJICAgIHVuc2lnbmVkIG1vZHVsZV9pZCk7CitzdGF0aWMgdm9pZCAqYWxsb2NhdGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgdW5zaWduZWQgbWVtc2l6ZSk7CitzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIHZvaWQgKm1lbV9wdHIpOworc3RhdGljIHZvaWQgZGJsbF9lcnJfcmVwb3J0KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIGNvbnN0IGNoYXIgKmVycnN0ciwKKwkJCSAgICB2YV9saXN0IGFyZ3MpOworLyogZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKi8KK3N0YXRpYyBpbnQgZGJsbF9ybW1fYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJICBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYWxpZ24pOworc3RhdGljIHZvaWQgcm1tX2RlYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8pOworCisvKiBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICovCitzdGF0aWMgaW50IGNvbm5lY3Qoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMpOworc3RhdGljIGludCByZWFkX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICB1bnNpZ25lZCBieXRlcyk7CitzdGF0aWMgaW50IHdyaXRlX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgIGxkcl9hZGRyIGFkZHIsIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLAorCQkgICAgIHVuc2lnbmVkIG5ieXRlcyk7CitzdGF0aWMgaW50IGZpbGxfbWVtKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBhZGRyLAorCQkgICAgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sIHVuc2lnbmVkIGJ5dGVzLAorCQkgICAgdW5zaWduZWQgdmFsKTsKK3N0YXRpYyBpbnQgZXhlY3V0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgbGRyX2FkZHIgc3RhcnQpOworc3RhdGljIHZvaWQgcmVsZWFzZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcyk7CisKKy8qIHN5bWJvbCB0YWJsZSBoYXNoIGZ1bmN0aW9ucyAqLworc3RhdGljIHUxNiBuYW1lX2hhc2godm9pZCAqa2V5LCB1MTYgbWF4X2J1Y2tldCk7CitzdGF0aWMgYm9vbCBuYW1lX21hdGNoKHZvaWQgKmtleSwgdm9pZCAqc3ApOworc3RhdGljIHZvaWQgc3ltX2RlbGV0ZSh2b2lkICp2YWx1ZSk7CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogU3ltYm9sIFJlZGVmaW5pdGlvbiAqLworc3RhdGljIGludCByZWRlZmluZWRfc3ltYm9sOworc3RhdGljIGludCBnYmxfc2VhcmNoID0gMTsKKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Nsb3NlID09PT09PT09CisgKi8KK3ZvaWQgZGJsbF9jbG9zZShzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKQoreworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnpsX3RhcmdldDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCURCQ19SRVFVSVJFKHpsX2xpYi0+b3Blbl9yZWYgPiAwKTsKKwl6bF90YXJnZXQgPSB6bF9saWItPnRhcmdldF9vYmo7CisJemxfbGliLT5vcGVuX3JlZi0tOworCWlmICh6bF9saWItPm9wZW5fcmVmID09IDApIHsKKwkJLyogUmVtb3ZlIGxpYnJhcnkgZnJvbSBsaXN0ICovCisJCWlmICh6bF90YXJnZXQtPmhlYWQgPT0gemxfbGliKQorCQkJemxfdGFyZ2V0LT5oZWFkID0gemxfbGliLT5uZXh0OworCisJCWlmICh6bF9saWItPnByZXYpCisJCQkoemxfbGliLT5wcmV2KS0+bmV4dCA9IHpsX2xpYi0+bmV4dDsKKworCQlpZiAoemxfbGliLT5uZXh0KQorCQkJKHpsX2xpYi0+bmV4dCktPnByZXYgPSB6bF9saWItPnByZXY7CisKKwkJLyogRnJlZSBET0YgcmVzb3VyY2VzICovCisJCWRvZl9jbG9zZSh6bF9saWIpOworCQlrZnJlZSh6bF9saWItPmZpbGVfbmFtZSk7CisKKwkJLyogcmVtb3ZlIHN5bWJvbHMgZnJvbSBzeW1ib2wgdGFibGUgKi8KKwkJaWYgKHpsX2xpYi0+c3ltX3RhYikKKwkJCWdoX2RlbGV0ZSh6bF9saWItPnN5bV90YWIpOworCisJCS8qIHJlbW92ZSB0aGUgbGlicmFyeSBvYmplY3QgaXRzZWxmICovCisJCWtmcmVlKHpsX2xpYik7CisJCXpsX2xpYiA9IE5VTEw7CisJfQorfQorCisvKgorICogID09PT09PT09IGRibGxfY3JlYXRlID09PT09PT09CisgKi8KK2ludCBkYmxsX2NyZWF0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICoqdGFyZ2V0X29iaiwKKwkJICAgICAgIHN0cnVjdCBkYmxsX2F0dHJzICpwYXR0cnMpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqcHpsX3RhcmdldDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYXR0cnMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUodGFyZ2V0X29iaiAhPSBOVUxMKTsKKworCS8qIEFsbG9jYXRlIERCTCB0YXJnZXQgb2JqZWN0ICovCisJcHpsX3RhcmdldCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYmxsX3Rhcl9vYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAodGFyZ2V0X29iaiAhPSBOVUxMKSB7CisJCWlmIChwemxfdGFyZ2V0ID09IE5VTEwpIHsKKwkJCSp0YXJnZXRfb2JqID0gTlVMTDsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlwemxfdGFyZ2V0LT5hdHRycyA9ICpwYXR0cnM7CisJCQkqdGFyZ2V0X29iaiA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopcHpsX3RhcmdldDsKKwkJfQorCQlEQkNfRU5TVVJFKCghc3RhdHVzICYmICp0YXJnZXRfb2JqKSB8fAorCQkJCShzdGF0dXMgJiYgKnRhcmdldF9vYmogPT0gTlVMTCkpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBkYmxsX2RlbGV0ZShzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfdGFyZ2V0KTsKKworCWlmICh6bF90YXJnZXQgIT0gTlVMTCkKKwkJa2ZyZWUoemxfdGFyZ2V0KTsKKworfQorCisvKgorICogID09PT09PT09IGRibGxfZXhpdCA9PT09PT09PQorICogIERpc2NvbnRpbnVlIHVzYWdlIG9mIERCTCBtb2R1bGUuCisgKi8KK3ZvaWQgZGJsbF9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJaWYgKHJlZnMgPT0gMCkKKwkJZ2hfZXhpdCgpOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGRibGxfZ2V0X2FkZHIgPT09PT09PT0KKyAqICBHZXQgYWRkcmVzcyBvZiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqLworYm9vbCBkYmxsX2dldF9hZGRyKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKm5hbWUsCisJCSAgIHN0cnVjdCBkYmxsX3N5bV92YWwgKipzeW1fdmFsKQoreworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltOworCWJvb2wgc3RhdHVzID0gZmFsc2U7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKwlEQkNfUkVRVUlSRShuYW1lICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN5bV92YWwgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoemxfbGliLT5zeW1fdGFiICE9IE5VTEwpOworCisJc3ltID0gKHN0cnVjdCBkYmxsX3N5bWJvbCAqKWdoX2ZpbmQoemxfbGliLT5zeW1fdGFiLCBuYW1lKTsKKwlpZiAoc3ltICE9IE5VTEwpIHsKKwkJKnN5bV92YWwgPSAmc3ltLT52YWx1ZTsKKwkJc3RhdHVzID0gdHJ1ZTsKKwl9CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBsaWI6ICVwIG5hbWU6ICVzIHBhZGRyOiAlcCwgc3RhdHVzIDB4JXhcbiIsCisJCV9fZnVuY19fLCB6bF9saWIsIG5hbWUsIHN5bV92YWwsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9hdHRycyA9PT09PT09PQorICogIFJldHJpZXZlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSB0YXJnZXQuCisgKi8KK3ZvaWQgZGJsbF9nZXRfYXR0cnMoc3RydWN0IGRibGxfdGFyX29iaiAqdGFyZ2V0LCBzdHJ1Y3QgZGJsbF9hdHRycyAqcGF0dHJzKQoreworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnpsX3RhcmdldCA9IChzdHJ1Y3QgZGJsbF90YXJfb2JqICopdGFyZ2V0OworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX3RhcmdldCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCisJaWYgKChwYXR0cnMgIT0gTlVMTCkgJiYgKHpsX3RhcmdldCAhPSBOVUxMKSkKKwkJKnBhdHRycyA9IHpsX3RhcmdldC0+YXR0cnM7CisKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2dldF9jX2FkZHIgPT09PT09PT0KKyAqICBHZXQgYWRkcmVzcyBvZiBhICJDIiBuYW1lIGluIHRoZSBzcGVjaWZpZWQgbGlicmFyeS4KKyAqLworYm9vbCBkYmxsX2dldF9jX2FkZHIoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiwgY2hhciAqbmFtZSwKKwkJICAgICBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltX3ZhbCkKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1ib2wgKnN5bTsKKwljaGFyIGNuYW1lW01BWEVYUFIgKyAxXTsKKwlib29sIHN0YXR1cyA9IGZhbHNlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX2xpYik7CisJREJDX1JFUVVJUkUoc3ltX3ZhbCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh6bF9saWItPnN5bV90YWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobmFtZSAhPSBOVUxMKTsKKworCWNuYW1lWzBdID0gJ18nOworCisJc3RybmNweShjbmFtZSArIDEsIG5hbWUsIHNpemVvZihjbmFtZSkgLSAyKTsKKwljbmFtZVtNQVhFWFBSXSA9ICdcMCc7CS8qIGluc3VyZSAnXDAnIHN0cmluZyB0ZXJtaW5hdGlvbiAqLworCisJLyogQ2hlY2sgZm9yIEMgbmFtZSwgaWYgbm90IGZvdW5kICovCisJc3ltID0gKHN0cnVjdCBkYmxsX3N5bWJvbCAqKWdoX2ZpbmQoemxfbGliLT5zeW1fdGFiLCBjbmFtZSk7CisKKwlpZiAoc3ltICE9IE5VTEwpIHsKKwkJKnN5bV92YWwgPSAmc3ltLT52YWx1ZTsKKwkJc3RhdHVzID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRibGxfZ2V0X3NlY3QgPT09PT09PT0KKyAqICBHZXQgdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAoaW4gYnl0ZXMpIG9mIGEgQ09GRiBzZWN0aW9uLgorICovCitpbnQgZGJsbF9nZXRfc2VjdChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliLCBjaGFyICpuYW1lLCB1MzIgKnBhZGRyLAorCQkJIHUzMiAqcHNpemUpCit7CisJdTMyIGJ5dGVfc2l6ZTsKKwlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7CisJY29uc3Qgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKnNlY3QgPSBOVUxMOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIgPSAoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKilsaWI7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobmFtZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwYWRkciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwc2l6ZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCisJLyogSWYgRE9GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCWlmICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0gZWxzZSB7CisJCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsCisJCQkJCQkJICAgICAgemxfbGliLT51bF9wb3MsCisJCQkJCQkJICAgICAgU0VFS19TRVQpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJYnl0ZV9zaXplID0gMTsKKwkJaWYgKGRsb2FkX2dldF9zZWN0aW9uX2luZm8oemxfbGliLT5kZXNjLCBuYW1lLCAmc2VjdCkpIHsKKwkJCSpwYWRkciA9IHNlY3QtPmxvYWRfYWRkcjsKKwkJCSpwc2l6ZSA9IHNlY3QtPnNpemUgKiBieXRlX3NpemU7CisJCQkvKiBNYWtlIHN1cmUgc2l6ZSBpcyBldmVuIGZvciBnb29kIHN3YXAgKi8KKwkJCWlmICgqcHNpemUgJSAyKQorCQkJCSgqcHNpemUpKys7CisKKwkJCS8qIEFsaWduIHNpemUgKi8KKwkJCSpwc2l6ZSA9IERPRkZfQUxJR04oKnBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTlhJTzsKKwkJfQorCX0KKwlpZiAob3BlbmVkX2RvZmYpIHsKKwkJZG9mX2Nsb3NlKHpsX2xpYik7CisJCW9wZW5lZF9kb2ZmID0gZmFsc2U7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogbGliOiAlcCBuYW1lOiAlcyBwYWRkcjogJXAgcHNpemU6ICVwLCAiCisJCSJzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGxpYiwgbmFtZSwgcGFkZHIsIHBzaXplLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2luaXQgPT09PT09PT0KKyAqLworYm9vbCBkYmxsX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJlZnMgPT0gMCkKKwkJZ2hfaW5pdCgpOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9sb2FkID09PT09PT09CisgKi8KK2ludCBkYmxsX2xvYWQoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYiwgZGJsbF9mbGFncyBmbGFncywKKwkJICAgICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMsIHUzMiAqZW50cnkpCit7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYjsKKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICpkYnpsOworCWJvb2wgZ290X3N5bWJvbHMgPSB0cnVlOworCXMzMiBlcnI7CisJaW50IHN0YXR1cyA9IDA7CisJYm9vbCBvcGVuZWRfZG9mZiA9IGZhbHNlOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF9saWIpOworCURCQ19SRVFVSVJFKGVudHJ5ICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGF0dHJzICE9IE5VTEwpOworCisJLyoKKwkgKiAgTG9hZCBpZiBub3QgYWxyZWFkeSBsb2FkZWQuCisJICovCisJaWYgKHpsX2xpYi0+bG9hZF9yZWYgPT0gMCB8fCAhKGZsYWdzICYgREJMTF9EWU5BTUlDKSkgeworCQlkYnpsID0gemxfbGliLT50YXJnZXRfb2JqOworCQlkYnpsLT5hdHRycyA9ICphdHRyczsKKwkJLyogQ3JlYXRlIGEgaGFzaCB0YWJsZSBmb3Igc3ltYm9scyBpZiBub3QgYWxyZWFkeSBjcmVhdGVkICovCisJCWlmICh6bF9saWItPnN5bV90YWIgPT0gTlVMTCkgeworCQkJZ290X3N5bWJvbHMgPSBmYWxzZTsKKwkJCXpsX2xpYi0+c3ltX3RhYiA9IGdoX2NyZWF0ZShNQVhCVUNLRVRTLAorCQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgZGJsbF9zeW1ib2wpLAorCQkJCQkJICAgIG5hbWVfaGFzaCwKKwkJCQkJCSAgICBuYW1lX21hdGNoLCBzeW1fZGVsZXRlKTsKKwkJCWlmICh6bF9saWItPnN5bV90YWIgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCX0KKwkJLyoKKwkJICogIFNldCB1cCBvYmplY3RzIG5lZWRlZCBieSB0aGUgZHluYW1pYyBsb2FkZXIKKwkJICovCisJCS8qIFN0cmVhbSAqLworCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0ucmVhZF9idWZmZXIgPSBkYmxsX3JlYWRfYnVmZmVyOworCQl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0uc2V0X2ZpbGVfcG9zbiA9IGRibGxfc2V0X2ZpbGVfcG9zbjsKKwkJemxfbGliLT5zdHJlYW0ubGliID0gemxfbGliOworCQkvKiBTeW1ib2wgKi8KKwkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmZpbmRfbWF0Y2hpbmdfc3ltYm9sID0KKwkJICAgIGRibGxfZmluZF9zeW1ib2w7CisJCWlmIChnb3Rfc3ltYm9scykgeworCQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmFkZF90b19zeW1ib2xfdGFibGUgPQorCQkJICAgIGZpbmRfaW5fc3ltYm9sX3RhYmxlOworCQl9IGVsc2UgeworCQkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmFkZF90b19zeW1ib2xfdGFibGUgPQorCQkJICAgIGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZTsKKwkJfQorCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wucHVyZ2Vfc3ltYm9sX3RhYmxlID0KKwkJICAgIGRibGxfcHVyZ2Vfc3ltYm9sX3RhYmxlOworCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfYWxsb2NhdGUgPSBhbGxvY2F0ZTsKKwkJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmRsb2FkX2RlYWxsb2NhdGUgPSBkZWFsbG9jYXRlOworCQl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZXJyb3JfcmVwb3J0ID0gZGJsbF9lcnJfcmVwb3J0OworCQl6bF9saWItPnN5bWJvbC5saWIgPSB6bF9saWI7CisJCS8qIEFsbG9jYXRlICovCisJCXpsX2xpYi0+YWxsb2NhdGUuZGxfYWxsb2MuZGxvYWRfYWxsb2NhdGUgPSBkYmxsX3JtbV9hbGxvYzsKKwkJemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5kbG9hZF9kZWFsbG9jYXRlID0gcm1tX2RlYWxsb2M7CisJCXpsX2xpYi0+YWxsb2NhdGUubGliID0gemxfbGliOworCQkvKiBJbml0ICovCisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LmNvbm5lY3QgPSBjb25uZWN0OworCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWFkbWVtID0gcmVhZF9tZW07CisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LndyaXRlbWVtID0gd3JpdGVfbWVtOworCQl6bF9saWItPmluaXQuZGxfaW5pdC5maWxsbWVtID0gZmlsbF9tZW07CisJCXpsX2xpYi0+aW5pdC5kbF9pbml0LmV4ZWN1dGUgPSBleGVjdXRlOworCQl6bF9saWItPmluaXQuZGxfaW5pdC5yZWxlYXNlID0gcmVsZWFzZTsKKwkJemxfbGliLT5pbml0LmxpYiA9IHpsX2xpYjsKKwkJLyogSWYgQ09GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXpsX2xpYi0+dWxfcG9zID0gKCooemxfbGliLT50YXJnZXRfb2JqLT5hdHRycy5mdGVsbCkpCisJCQkgICAgKHpsX2xpYi0+ZnApOworCQkJLyogUmVzZXQgZmlsZSBjdXJzb3IgKi8KKwkJCSgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnNlZWspKSAoemxfbGliLT5mcCwKKwkJCQkJCQkgICAgICAobG9uZykwLAorCQkJCQkJCSAgICAgIFNFRUtfU0VUKTsKKwkJCXN5bWJvbHNfcmVsb2FkZWQgPSB0cnVlOworCQkJLyogVGhlIDV0aCBhcmd1bWVudCwgRExPQURfSU5JVEJTUywgdGVsbHMgdGhlIERMTAorCQkJICogbW9kdWxlIHRvIHplcm8taW5pdCBhbGwgQlNTIHNlY3Rpb25zLiAgSW4gZ2VuZXJhbCwKKwkJCSAqIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhbmQgYWxzbyBpbmNyZWFzZXMgbG9hZCB0aW1lLgorCQkJICogV2UgbWF5IHdhbnQgdG8gbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBieSB0aGUgdXNlciAqLworCQkJZXJyID0gZHluYW1pY19sb2FkX21vZHVsZSgmemxfbGliLT5zdHJlYW0uZGxfc3RyZWFtLAorCQkJCQkJICAmemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAorCQkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJCSAgJnpsX2xpYi0+aW5pdC5kbF9pbml0LAorCQkJCQkJICBETE9BRF9JTklUQlNTLAorCQkJCQkJICAmemxfbGliLT5kbG9hZF9tb2Rfb2JqKTsKKworCQkJaWYgKGVyciAhPSAwKSB7CisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCX0gZWxzZSBpZiAocmVkZWZpbmVkX3N5bWJvbCkgeworCQkJCXpsX2xpYi0+bG9hZF9yZWYrKzsKKwkJCQlkYmxsX3VubG9hZCh6bF9saWIsIChzdHJ1Y3QgZGJsbF9hdHRycyAqKWF0dHJzKTsKKwkJCQlyZWRlZmluZWRfc3ltYm9sID0gZmFsc2U7CisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJCX0gZWxzZSB7CisJCQkJKmVudHJ5ID0gemxfbGliLT5lbnRyeTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykKKwkJemxfbGliLT5sb2FkX3JlZisrOworCisJLyogQ2xlYW4gdXAgRE9GRiByZXNvdXJjZXMgKi8KKwlpZiAob3BlbmVkX2RvZmYpCisJCWRvZl9jbG9zZSh6bF9saWIpOworCisJREJDX0VOU1VSRShzdGF0dXMgfHwgemxfbGliLT5sb2FkX3JlZiA+IDApOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogbGliOiAlcCBmbGFnczogMHgleCBlbnRyeTogJXAsIHN0YXR1cyAweCV4XG4iLAorCQlfX2Z1bmNfXywgbGliLCBmbGFncywgZW50cnksIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRibGxfbG9hZF9zZWN0ID09PT09PT09CisgKiAgTm90IHN1cHBvcnRlZCBmb3IgQ09GRi4KKyAqLworaW50IGRibGxfbG9hZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIsIGNoYXIgKnNlY19uYW1lLAorCQkJICBzdHJ1Y3QgZGJsbF9hdHRycyAqYXR0cnMpCit7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKworCXJldHVybiAtRU5PU1lTOworfQorCisvKgorICogID09PT09PT09IGRibGxfb3BlbiA9PT09PT09PQorICovCitpbnQgZGJsbF9vcGVuKHN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldCwgY2hhciAqZmlsZSwgZGJsbF9mbGFncyBmbGFncywKKwkJICAgICBzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKmxpYl9vYmopCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IE5VTEw7CisJczMyIGVycjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh6bF90YXJnZXQpOworCURCQ19SRVFVSVJFKHpsX3RhcmdldC0+YXR0cnMuZm9wZW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoZmlsZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShsaWJfb2JqICE9IE5VTEwpOworCisJemxfbGliID0gemxfdGFyZ2V0LT5oZWFkOworCXdoaWxlICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKHpsX2xpYi0+ZmlsZV9uYW1lLCBmaWxlKSA9PSAwKSB7CisJCQkvKiBMaWJyYXJ5IGlzIGFscmVhZHkgb3BlbmVkICovCisJCQl6bF9saWItPm9wZW5fcmVmKys7CisJCQlicmVhazsKKwkJfQorCQl6bF9saWIgPSB6bF9saWItPm5leHQ7CisJfQorCWlmICh6bF9saWIgPT0gTlVMTCkgeworCQkvKiBBbGxvY2F0ZSBEQkwgbGlicmFyeSBvYmplY3QgKi8KKwkJemxfbGliID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRibGxfbGlicmFyeV9vYmopLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHpsX2xpYiA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJemxfbGliLT51bF9wb3MgPSAwOworCQkJLyogSW5jcmVtZW50IHJlZiBjb3VudCB0byBhbGxvdyBjbG9zZSBvbiBmYWlsdXJlCisJCQkgKiBsYXRlciBvbiAqLworCQkJemxfbGliLT5vcGVuX3JlZisrOworCQkJemxfbGliLT50YXJnZXRfb2JqID0gemxfdGFyZ2V0OworCQkJLyogS2VlcCBhIGNvcHkgb2YgdGhlIGZpbGUgbmFtZSAqLworCQkJemxfbGliLT5maWxlX25hbWUgPSBremFsbG9jKHN0cmxlbihmaWxlKSArIDEsCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoemxfbGliLT5maWxlX25hbWUgPT0gTlVMTCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCXN0cm5jcHkoemxfbGliLT5maWxlX25hbWUsIGZpbGUsCisJCQkJCXN0cmxlbihmaWxlKSArIDEpOworCQkJfQorCQkJemxfbGliLT5zeW1fdGFiID0gTlVMTDsKKwkJfQorCX0KKwkvKgorCSAqICBTZXQgdXAgb2JqZWN0cyBuZWVkZWQgYnkgdGhlIGR5bmFtaWMgbG9hZGVyCisJICovCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBTdHJlYW0gKi8KKwl6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0ucmVhZF9idWZmZXIgPSBkYmxsX3JlYWRfYnVmZmVyOworCXpsX2xpYi0+c3RyZWFtLmRsX3N0cmVhbS5zZXRfZmlsZV9wb3NuID0gZGJsbF9zZXRfZmlsZV9wb3NuOworCXpsX2xpYi0+c3RyZWFtLmxpYiA9IHpsX2xpYjsKKwkvKiBTeW1ib2wgKi8KKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuYWRkX3RvX3N5bWJvbF90YWJsZSA9IGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZmluZF9tYXRjaGluZ19zeW1ib2wgPSBkYmxsX2ZpbmRfc3ltYm9sOworCXpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbC5wdXJnZV9zeW1ib2xfdGFibGUgPSBkYmxsX3B1cmdlX3N5bWJvbF90YWJsZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfYWxsb2NhdGUgPSBhbGxvY2F0ZTsKKwl6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wuZGxvYWRfZGVhbGxvY2F0ZSA9IGRlYWxsb2NhdGU7CisJemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLmVycm9yX3JlcG9ydCA9IGRibGxfZXJyX3JlcG9ydDsKKwl6bF9saWItPnN5bWJvbC5saWIgPSB6bF9saWI7CisJLyogQWxsb2NhdGUgKi8KKwl6bF9saWItPmFsbG9jYXRlLmRsX2FsbG9jLmRsb2FkX2FsbG9jYXRlID0gZGJsbF9ybW1fYWxsb2M7CisJemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYy5kbG9hZF9kZWFsbG9jYXRlID0gcm1tX2RlYWxsb2M7CisJemxfbGliLT5hbGxvY2F0ZS5saWIgPSB6bF9saWI7CisJLyogSW5pdCAqLworCXpsX2xpYi0+aW5pdC5kbF9pbml0LmNvbm5lY3QgPSBjb25uZWN0OworCXpsX2xpYi0+aW5pdC5kbF9pbml0LnJlYWRtZW0gPSByZWFkX21lbTsKKwl6bF9saWItPmluaXQuZGxfaW5pdC53cml0ZW1lbSA9IHdyaXRlX21lbTsKKwl6bF9saWItPmluaXQuZGxfaW5pdC5maWxsbWVtID0gZmlsbF9tZW07CisJemxfbGliLT5pbml0LmRsX2luaXQuZXhlY3V0ZSA9IGV4ZWN1dGU7CisJemxfbGliLT5pbml0LmRsX2luaXQucmVsZWFzZSA9IHJlbGVhc2U7CisJemxfbGliLT5pbml0LmxpYiA9IHpsX2xpYjsKKwlpZiAoIXN0YXR1cyAmJiB6bF9saWItPmZwID09IE5VTEwpCisJCXN0YXR1cyA9IGRvZl9vcGVuKHpsX2xpYik7CisKKwl6bF9saWItPnVsX3BvcyA9ICgqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnRlbGwpKSAoemxfbGliLT5mcCk7CisJKCooemxfbGliLT50YXJnZXRfb2JqLT5hdHRycy5mc2VlaykpICh6bF9saWItPmZwLCAobG9uZykwLCBTRUVLX1NFVCk7CisJLyogQ3JlYXRlIGEgaGFzaCB0YWJsZSBmb3Igc3ltYm9scyBpZiBmbGFnIGlzIHNldCAqLworCWlmICh6bF9saWItPnN5bV90YWIgIT0gTlVMTCB8fCAhKGZsYWdzICYgREJMTF9TWU1CKSkKKwkJZ290byBmdW5jX2NvbnQ7CisKKwl6bF9saWItPnN5bV90YWIgPQorCSAgICBnaF9jcmVhdGUoTUFYQlVDS0VUUywgc2l6ZW9mKHN0cnVjdCBkYmxsX3N5bWJvbCksIG5hbWVfaGFzaCwKKwkJICAgICAgbmFtZV9tYXRjaCwgc3ltX2RlbGV0ZSk7CisJaWYgKHpsX2xpYi0+c3ltX3RhYiA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogRG8gYSBmYWtlIGxvYWQgdG8gZ2V0IHN5bWJvbHMgLSBzZXQgd3JpdGUgZnVuYyB0byBub19vcCAqLworCQl6bF9saWItPmluaXQuZGxfaW5pdC53cml0ZW1lbSA9IG5vX29wOworCQllcnIgPSBkeW5hbWljX29wZW5fbW9kdWxlKCZ6bF9saWItPnN0cmVhbS5kbF9zdHJlYW0sCisJCQkJCSAgJnpsX2xpYi0+c3ltYm9sLmRsX3N5bWJvbCwKKwkJCQkJICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJICAmemxfbGliLT5pbml0LmRsX2luaXQsIDAsCisJCQkJCSAgJnpsX2xpYi0+ZGxvYWRfbW9kX29iaik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJc3RhdHVzID0gLUVJTFNFUTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHN5bWJvbCB0YWJsZSwgd2UgY2FuIHVubG9hZCAqLworCQkJZXJyID0gZHluYW1pY191bmxvYWRfbW9kdWxlKHpsX2xpYi0+ZGxvYWRfbW9kX29iaiwKKwkJCQkJCSAgICAmemxfbGliLT5zeW1ib2wuZGxfc3ltYm9sLAorCQkJCQkJICAgICZ6bF9saWItPmFsbG9jYXRlLmRsX2FsbG9jLAorCQkJCQkJICAgICZ6bF9saWItPmluaXQuZGxfaW5pdCk7CisJCQlpZiAoZXJyICE9IDApCisJCQkJc3RhdHVzID0gLUVJTFNFUTsKKworCQkJemxfbGliLT5kbG9hZF9tb2Rfb2JqID0gTlVMTDsKKwkJfQorCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykgeworCQlpZiAoemxfbGliLT5vcGVuX3JlZiA9PSAxKSB7CisJCQkvKiBGaXJzdCB0aW1lIG9wZW5lZCAtIGluc2VydCBpbiBsaXN0ICovCisJCQlpZiAoemxfdGFyZ2V0LT5oZWFkKQorCQkJCSh6bF90YXJnZXQtPmhlYWQpLT5wcmV2ID0gemxfbGliOworCisJCQl6bF9saWItPnByZXYgPSBOVUxMOworCQkJemxfbGliLT5uZXh0ID0gemxfdGFyZ2V0LT5oZWFkOworCQkJemxfdGFyZ2V0LT5oZWFkID0gemxfbGliOworCQl9CisJCSpsaWJfb2JqID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopemxfbGliOworCX0gZWxzZSB7CisJCSpsaWJfb2JqID0gTlVMTDsKKwkJaWYgKHpsX2xpYiAhPSBOVUxMKQorCQkJZGJsbF9jbG9zZSgoc3RydWN0IGRibGxfbGlicmFyeV9vYmogKil6bF9saWIpOworCisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKHpsX2xpYi0+b3Blbl9yZWYgPiAwKSAmJiAqbGliX29iaikKKwkJCQl8fCAoc3RhdHVzICYmICpsaWJfb2JqID09IE5VTEwpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IHRhcmdldDogJXAgZmlsZTogJXMgbGliX29iajogJXAsIHN0YXR1cyAweCV4XG4iLAorCQlfX2Z1bmNfXywgdGFyZ2V0LCBmaWxlLCBsaWJfb2JqLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX3JlYWRfc2VjdCA9PT09PT09PQorICogIEdldCB0aGUgY29udGVudCBvZiBhIENPRkYgc2VjdGlvbi4KKyAqLworaW50IGRibGxfcmVhZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKm5hbWUsCisJCQkgIGNoYXIgKmJ1ZiwgdTMyIHNpemUpCit7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKnpsX2xpYiA9IChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYjsKKwlib29sIG9wZW5lZF9kb2ZmID0gZmFsc2U7CisJdTMyIGJ5dGVfc2l6ZTsJCS8qIHNpemUgb2YgYnl0ZXMgKi8KKwl1MzIgdWxfc2VjdF9zaXplOwkvKiBzaXplIG9mIHNlY3Rpb24gKi8KKwljb25zdCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqc2VjdCA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoemxfbGliKTsKKwlEQkNfUkVRVUlSRShuYW1lICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGJ1ZiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzaXplICE9IDApOworCisJLyogSWYgRE9GRiBmaWxlIGlzIG5vdCBvcGVuLCB3ZSBvcGVuIGl0LiAqLworCWlmICh6bF9saWIgIT0gTlVMTCkgeworCQlpZiAoemxfbGliLT5mcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSBkb2Zfb3Blbih6bF9saWIpOworCQkJaWYgKCFzdGF0dXMpCisJCQkJb3BlbmVkX2RvZmYgPSB0cnVlOworCisJCX0gZWxzZSB7CisJCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsCisJCQkJCQkJICAgICAgemxfbGliLT51bF9wb3MsCisJCQkJCQkJICAgICAgU0VFS19TRVQpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlieXRlX3NpemUgPSAxOworCWlmICghZGxvYWRfZ2V0X3NlY3Rpb25faW5mbyh6bF9saWItPmRlc2MsIG5hbWUsICZzZWN0KSkgeworCQlzdGF0dXMgPSAtRU5YSU87CisJCWdvdG8gZnVuY19jb250OworCX0KKwkvKgorCSAqIEVuc3VyZSB0aGUgc3VwcGxpZWQgYnVmZmVyIHNpemUgaXMgc3VmZmljaWVudCB0byBzdG9yZQorCSAqIHRoZSBzZWN0aW9uIGJ1ZiB0byBiZSByZWFkLgorCSAqLworCXVsX3NlY3Rfc2l6ZSA9IHNlY3QtPnNpemUgKiBieXRlX3NpemU7CisJLyogTWFrZSBzdXJlIHNpemUgaXMgZXZlbiBmb3IgZ29vZCBzd2FwICovCisJaWYgKHVsX3NlY3Rfc2l6ZSAlIDIpCisJCXVsX3NlY3Rfc2l6ZSsrOworCisJLyogQWxpZ24gc2l6ZSAqLworCXVsX3NlY3Rfc2l6ZSA9IERPRkZfQUxJR04odWxfc2VjdF9zaXplKTsKKwlpZiAodWxfc2VjdF9zaXplID4gc2l6ZSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJaWYgKCFkbG9hZF9nZXRfc2VjdGlvbih6bF9saWItPmRlc2MsIHNlY3QsIGJ1ZikpCisJCQlzdGF0dXMgPSAtRUJBREY7CisKKwl9CitmdW5jX2NvbnQ6CisJaWYgKG9wZW5lZF9kb2ZmKSB7CisJCWRvZl9jbG9zZSh6bF9saWIpOworCQlvcGVuZWRfZG9mZiA9IGZhbHNlOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGxpYjogJXAgbmFtZTogJXMgYnVmOiAlcCBzaXplOiAweCV4LCAiCisJCSJzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGxpYiwgbmFtZSwgYnVmLCBzaXplLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9zZXRfYXR0cnMgPT09PT09PT0KKyAqICBTZXQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHRhcmdldC4KKyAqLwordm9pZCBkYmxsX3NldF9hdHRycyhzdHJ1Y3QgZGJsbF90YXJfb2JqICp0YXJnZXQsIHN0cnVjdCBkYmxsX2F0dHJzICpwYXR0cnMpCit7CisJc3RydWN0IGRibGxfdGFyX29iaiAqemxfdGFyZ2V0ID0gKHN0cnVjdCBkYmxsX3Rhcl9vYmogKil0YXJnZXQ7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX3RhcmdldCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCisJaWYgKChwYXR0cnMgIT0gTlVMTCkgJiYgKHpsX3RhcmdldCAhPSBOVUxMKSkKKwkJemxfdGFyZ2V0LT5hdHRycyA9ICpwYXR0cnM7CisKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX3VubG9hZCA9PT09PT09PQorICovCit2b2lkIGRibGxfdW5sb2FkKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliID0gKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICopbGliOworCXMzMiBlcnIgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHpsX2xpYik7CisJREJDX1JFUVVJUkUoemxfbGliLT5sb2FkX3JlZiA+IDApOworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGxpYjogJXBcbiIsIF9fZnVuY19fLCBsaWIpOworCXpsX2xpYi0+bG9hZF9yZWYtLTsKKwkvKiBVbmxvYWQgb25seSBpZiByZWZlcmVuY2UgY291bnQgaXMgMCAqLworCWlmICh6bF9saWItPmxvYWRfcmVmICE9IDApCisJCWdvdG8gZnVuY19lbmQ7CisKKwl6bF9saWItPnRhcmdldF9vYmotPmF0dHJzID0gKmF0dHJzOworCWlmICh6bF9saWItPmRsb2FkX21vZF9vYmopIHsKKwkJZXJyID0gZHluYW1pY191bmxvYWRfbW9kdWxlKHpsX2xpYi0+ZGxvYWRfbW9kX29iaiwKKwkJCQkJICAgICZ6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wsCisJCQkJCSAgICAmemxfbGliLT5hbGxvY2F0ZS5kbF9hbGxvYywKKwkJCQkJICAgICZ6bF9saWItPmluaXQuZGxfaW5pdCk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZDogMHgleFxuIiwgX19mdW5jX18sIGVycik7CisJfQorCS8qIHJlbW92ZSBzeW1ib2xzIGZyb20gc3ltYm9sIHRhYmxlICovCisJaWYgKHpsX2xpYi0+c3ltX3RhYiAhPSBOVUxMKSB7CisJCWdoX2RlbGV0ZSh6bF9saWItPnN5bV90YWIpOworCQl6bF9saWItPnN5bV90YWIgPSBOVUxMOworCX0KKwkvKiBkZWxldGUgRE9GRiBkZXNjIHNpbmNlIGl0IGhvbGRzICpsb3RzKiBvZiBob3N0IE9TCisJICogcmVzb3VyY2VzICovCisJZG9mX2Nsb3NlKHpsX2xpYik7CitmdW5jX2VuZDoKKwlEQkNfRU5TVVJFKHpsX2xpYi0+bG9hZF9yZWYgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF91bmxvYWRfc2VjdCA9PT09PT09PQorICogIE5vdCBzdXBwb3J0ZWQgZm9yIENPRkYuCisgKi8KK2ludCBkYmxsX3VubG9hZF9zZWN0KHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWIsIGNoYXIgKnNlY19uYW1lLAorCQkJICAgIHN0cnVjdCBkYmxsX2F0dHJzICphdHRycykKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc2VjX25hbWUgIT0gTlVMTCk7CisKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqICA9PT09PT09PSBkb2ZfY2xvc2UgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZG9mX2Nsb3NlKHN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICp6bF9saWIpCit7CisJaWYgKHpsX2xpYi0+ZGVzYykgeworCQlkbG9hZF9tb2R1bGVfY2xvc2UoemxfbGliLT5kZXNjKTsKKwkJemxfbGliLT5kZXNjID0gTlVMTDsKKwl9CisJLyogY2xvc2UgZmlsZSAqLworCWlmICh6bF9saWItPmZwKSB7CisJCSh6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZjbG9zZSkgKHpsX2xpYi0+ZnApOworCQl6bF9saWItPmZwID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG9mX29wZW4gPT09PT09PT0KKyAqLworc3RhdGljIGludCBkb2Zfb3BlbihzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliKQoreworCXZvaWQgKm9wZW4gPSAqKHpsX2xpYi0+dGFyZ2V0X29iai0+YXR0cnMuZm9wZW4pOworCWludCBzdGF0dXMgPSAwOworCisJLyogRmlyc3Qgb3BlbiB0aGUgZmlsZSBmb3IgdGhlIGR5bmFtaWMgbG9hZGVyLCB0aGVuIG9wZW4gQ09GICovCisJemxfbGliLT5mcCA9CisJICAgICh2b2lkICopKChkYmxsX2Zfb3Blbl9meG4pIChvcGVuKSkgKHpsX2xpYi0+ZmlsZV9uYW1lLCAicmIiKTsKKworCS8qIE9wZW4gRE9GRiBtb2R1bGUgKi8KKwlpZiAoemxfbGliLT5mcCAmJiB6bF9saWItPmRlc2MgPT0gTlVMTCkgeworCQkoKih6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKHpsX2xpYi0+ZnAsIChsb25nKTAsCisJCQkJCQkgICAgICBTRUVLX1NFVCk7CisJCXpsX2xpYi0+ZGVzYyA9CisJCSAgICBkbG9hZF9tb2R1bGVfb3BlbigmemxfbGliLT5zdHJlYW0uZGxfc3RyZWFtLAorCQkJCSAgICAgICZ6bF9saWItPnN5bWJvbC5kbF9zeW1ib2wpOworCQlpZiAoemxfbGliLT5kZXNjID09IE5VTEwpIHsKKwkJCSh6bF9saWItPnRhcmdldF9vYmotPmF0dHJzLmZjbG9zZSkgKHpsX2xpYi0+ZnApOworCQkJemxfbGliLT5mcCA9IE5VTEw7CisJCQlzdGF0dXMgPSAtRUJBREY7CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUJBREY7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBuYW1lX2hhc2ggPT09PT09PT0KKyAqLworc3RhdGljIHUxNiBuYW1lX2hhc2godm9pZCAqa2V5LCB1MTYgbWF4X2J1Y2tldCkKK3sKKwl1MTYgcmV0OworCXUxNiBoYXNoOworCWNoYXIgKm5hbWUgPSAoY2hhciAqKWtleTsKKworCURCQ19SRVFVSVJFKG5hbWUgIT0gTlVMTCk7CisKKwloYXNoID0gMDsKKworCXdoaWxlICgqbmFtZSkgeworCQloYXNoIDw8PSAxOworCQloYXNoIF49ICpuYW1lKys7CisJfQorCisJcmV0ID0gaGFzaCAlIG1heF9idWNrZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IG5hbWVfbWF0Y2ggPT09PT09PT0KKyAqLworc3RhdGljIGJvb2wgbmFtZV9tYXRjaCh2b2lkICprZXksIHZvaWQgKnNwKQoreworCURCQ19SRVFVSVJFKGtleSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzcCAhPSBOVUxMKTsKKworCWlmICgoa2V5ICE9IE5VTEwpICYmIChzcCAhPSBOVUxMKSkgeworCQlpZiAoc3RyY21wKChjaGFyICopa2V5LCAoKHN0cnVjdCBkYmxsX3N5bWJvbCAqKXNwKS0+bmFtZSkgPT0KKwkJICAgIDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogID09PT09PT09IG5vX29wID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgbm9fb3Aoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXNwdHIsIHZvaWQgKmJ1ZnIsCisJCSBsZHJfYWRkciBsb2NuLCBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYnl0c2l6ZSkKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICA9PT09PT09PSBzeW1fZGVsZXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIHN5bV9kZWxldGUodm9pZCAqdmFsdWUpCit7CisJc3RydWN0IGRibGxfc3ltYm9sICpzcCA9IChzdHJ1Y3QgZGJsbF9zeW1ib2wgKil2YWx1ZTsKKworCWtmcmVlKHNwLT5uYW1lKTsKK30KKworLyoKKyAqICBEeW5hbWljIExvYWRlciBGdW5jdGlvbnMKKyAqLworCisvKiBkeW5hbWljX2xvYWRlcl9zdHJlYW0gKi8KKy8qCisgKiAgPT09PT09PT0gZGJsbF9yZWFkX2J1ZmZlciA9PT09PT09PQorICovCitzdGF0aWMgaW50IGRibGxfcmVhZF9idWZmZXIoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N0cmVhbSAqdGhpcywgdm9pZCAqYnVmZmVyLAorCQkJICAgIHVuc2lnbmVkIGJ1ZnNpemUpCit7CisJc3RydWN0IGRibGxfc3RyZWFtICpwc3RyZWFtID0gKHN0cnVjdCBkYmxsX3N0cmVhbSAqKXRoaXM7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKwlpbnQgYnl0ZXNfcmVhZCA9IDA7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IHBzdHJlYW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJaWYgKGxpYiAhPSBOVUxMKSB7CisJCWJ5dGVzX3JlYWQgPQorCQkgICAgKCoobGliLT50YXJnZXRfb2JqLT5hdHRycy5mcmVhZCkpIChidWZmZXIsIDEsIGJ1ZnNpemUsCisJCQkJCQkgICAgICAgbGliLT5mcCk7CisJfQorCXJldHVybiBieXRlc19yZWFkOworfQorCisvKgorICogID09PT09PT09IGRibGxfc2V0X2ZpbGVfcG9zbiA9PT09PT09PQorICovCitzdGF0aWMgaW50IGRibGxfc2V0X2ZpbGVfcG9zbihzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3RyZWFtICp0aGlzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBvcykKK3sKKwlzdHJ1Y3QgZGJsbF9zdHJlYW0gKnBzdHJlYW0gPSAoc3RydWN0IGRibGxfc3RyZWFtICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCWludCBzdGF0dXMgPSAwOwkJLyogU3VjY2VzcyAqLworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBwc3RyZWFtLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPSAoKihsaWItPnRhcmdldF9vYmotPmF0dHJzLmZzZWVrKSkgKGxpYi0+ZnAsIChsb25nKXBvcywKKwkJCQkJCQkgICAgU0VFS19TRVQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGR5bmFtaWNfbG9hZGVyX3N5bSAqLworCisvKgorICogID09PT09PT09IGRibGxfZmluZF9zeW1ib2wgPT09PT09PT0KKyAqLworc3RhdGljIHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqZGJsbF9maW5kX3N5bWJvbChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKnJldF9zeW07CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJc3RydWN0IGRibGxfc3ltX3ZhbCAqZGJsbF9zeW0gPSBOVUxMOworCWJvb2wgc3RhdHVzID0gZmFsc2U7CS8qIFN5bWJvbCBub3QgZm91bmQgeWV0ICovCisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGxkcl9zeW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJaWYgKGxpYiAhPSBOVUxMKSB7CisJCWlmIChsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9sb29rdXApIHsKKwkJCS8qIENoZWNrIGN1cnJlbnQgbGliICsgYmFzZSBsaWIgKyBkZXAgbGliICsKKwkJCSAqIHBlcnNpc3RlbnQgbGliICovCisJCQlzdGF0dXMgPSAoKihsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9sb29rdXApKQorCQkJICAgIChsaWItPnRhcmdldF9vYmotPmF0dHJzLnN5bV9oYW5kbGUsCisJCQkgICAgIGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuc3ltX2FyZywKKwkJCSAgICAgbGliLT50YXJnZXRfb2JqLT5hdHRycy5ybW1faGFuZGxlLCBuYW1lLAorCQkJICAgICAmZGJsbF9zeW0pOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBjaGVjayBjdXJyZW50IGxpYiBmb3Igc3ltYm9sICovCisJCQlzdGF0dXMgPSBkYmxsX2dldF9hZGRyKChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKWxpYiwKKwkJCQkJICAgICAgIChjaGFyICopbmFtZSwgJmRibGxfc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGJsbF9nZXRfY19hZGRyKChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqKQorCQkJCQkJICAgIGxpYiwgKGNoYXIgKiluYW1lLAorCQkJCQkJICAgICZkYmxsX3N5bSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cyAmJiBnYmxfc2VhcmNoKQorCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBTeW1ib2wgbm90IGZvdW5kOiAlc1xuIiwgX19mdW5jX18sIG5hbWUpOworCisJREJDX0FTU0VSVCgoc3RhdHVzICYmIChkYmxsX3N5bSAhPSBOVUxMKSkKKwkJICAgfHwgKCFzdGF0dXMgJiYgKGRibGxfc3ltID09IE5VTEwpKSk7CisKKwlyZXRfc3ltID0gKHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKWRibGxfc3ltOworCXJldHVybiByZXRfc3ltOworfQorCisvKgorICogID09PT09PT09IGZpbmRfaW5fc3ltYm9sX3RhYmxlID09PT09PT09CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHlubG9hZF9zeW1ib2wgKmZpbmRfaW5fc3ltYm9sX3RhYmxlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0KKwkJCQkJCSAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgdW5zaWduZWQgbW9kdWxlaWQpCit7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpyZXRfc3ltOworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBsZHJfc3ltLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKwlEQkNfUkVRVUlSRShsaWItPnN5bV90YWIgIT0gTlVMTCk7CisKKwlzeW0gPSAoc3RydWN0IGRibGxfc3ltYm9sICopZ2hfZmluZChsaWItPnN5bV90YWIsIChjaGFyICopbmFtZSk7CisKKwlyZXRfc3ltID0gKHN0cnVjdCBkeW5sb2FkX3N5bWJvbCAqKSZzeW0tPnZhbHVlOworCXJldHVybiByZXRfc3ltOworfQorCisvKgorICogID09PT09PT09IGRibGxfYWRkX3RvX3N5bWJvbF90YWJsZSA9PT09PT09PQorICovCitzdGF0aWMgc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX2FkZF90b19zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bQorCQkJCQkJICAgICAgICp0aGlzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIG1vZHVsZV9pZCkKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1ib2wgKnN5bV9wdHIgPSBOVUxMOworCXN0cnVjdCBkYmxsX3N5bWJvbCBzeW1ib2w7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpkYmxsX3N5bSA9IE5VTEw7CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJc3RydWN0IGR5bmxvYWRfc3ltYm9sICpyZXQ7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5hbWUpOworCWxpYiA9IGxkcl9zeW0tPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHN5bWJvbCBpcyBhbHJlYWR5IGRlZmluZWQgaW4gc3ltYm9sIHRhYmxlICovCisJaWYgKCEobGliLT50YXJnZXRfb2JqLT5hdHRycy5iYXNlX2ltYWdlKSkgeworCQlnYmxfc2VhcmNoID0gZmFsc2U7CisJCWRibGxfc3ltID0gZGJsbF9maW5kX3N5bWJvbCh0aGlzLCBuYW1lKTsKKwkJZ2JsX3NlYXJjaCA9IHRydWU7CisJCWlmIChkYmxsX3N5bSkgeworCQkJcmVkZWZpbmVkX3N5bWJvbCA9IHRydWU7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzIGFscmVhZHkgZGVmaW5lZCBpbiBzeW1ib2wgdGFibGVcbiIsCisJCQkJbmFtZSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwkvKiBBbGxvY2F0ZSBzdHJpbmcgdG8gY29weSBzeW1ib2wgbmFtZSAqLworCXN5bWJvbC5uYW1lID0ga3phbGxvYyhzdHJsZW4oKGNoYXIgKmNvbnN0KW5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN5bWJvbC5uYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN5bWJvbC5uYW1lICE9IE5VTEwpIHsKKwkJLyogSnVzdCBjb3B5IG5hbWUgKHZhbHVlIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGR5bmFtaWMgbG9hZGVyKSAqLworCQlzdHJuY3B5KHN5bWJvbC5uYW1lLCAoY2hhciAqY29uc3QpbmFtZSwKKwkJCXN0cmxlbigoY2hhciAqY29uc3QpbmFtZSkgKyAxKTsKKworCQkvKiBBZGQgc3ltYm9sIHRvIHN5bWJvbCB0YWJsZSAqLworCQlzeW1fcHRyID0KKwkJICAgIChzdHJ1Y3QgZGJsbF9zeW1ib2wgKilnaF9pbnNlcnQobGliLT5zeW1fdGFiLCAodm9pZCAqKW5hbWUsCisJCQkJCQkgICAgKHZvaWQgKikmc3ltYm9sKTsKKwkJaWYgKHN5bV9wdHIgPT0gTlVMTCkKKwkJCWtmcmVlKHN5bWJvbC5uYW1lKTsKKworCX0KKwlpZiAoc3ltX3B0ciAhPSBOVUxMKQorCQlyZXQgPSAoc3RydWN0IGR5bmxvYWRfc3ltYm9sICopJnN5bV9wdHItPnZhbHVlOworCWVsc2UKKwkJcmV0ID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZGJsbF9wdXJnZV9zeW1ib2xfdGFibGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywKKwkJCQkgICAgdW5zaWduZWQgbW9kdWxlX2lkKQoreworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBsZHJfc3ltLT5saWI7CisJREJDX1JFUVVJUkUobGliKTsKKworCS8qIE1heSBub3QgbmVlZCB0byBkbyBhbnl0aGluZyAqLworfQorCisvKgorICogID09PT09PT09IGFsbG9jYXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkICphbGxvY2F0ZShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfc3ltICp0aGlzLCB1bnNpZ25lZCBtZW1zaXplKQoreworCXN0cnVjdCBsZHJfc3ltYm9sICpsZHJfc3ltID0gKHN0cnVjdCBsZHJfc3ltYm9sICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXZvaWQgKmJ1ZjsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisKKwlidWYgPSBremFsbG9jKG1lbXNpemUsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIGJ1ZjsKK30KKworLyoKKyAqICA9PT09PT09PSBkZWFsbG9jYXRlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGUoc3RydWN0IGR5bmFtaWNfbG9hZGVyX3N5bSAqdGhpcywgdm9pZCAqbWVtX3B0cikKK3sKKwlzdHJ1Y3QgbGRyX3N5bWJvbCAqbGRyX3N5bSA9IChzdHJ1Y3QgbGRyX3N5bWJvbCAqKXRoaXM7CisJc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYjsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisKKwlrZnJlZShtZW1fcHRyKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkYmxsX2Vycl9yZXBvcnQgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgZGJsbF9lcnJfcmVwb3J0KHN0cnVjdCBkeW5hbWljX2xvYWRlcl9zeW0gKnRoaXMsIGNvbnN0IGNoYXIgKmVycnN0ciwKKwkJCSAgICB2YV9saXN0IGFyZ3MpCit7CisJc3RydWN0IGxkcl9zeW1ib2wgKmxkcl9zeW0gPSAoc3RydWN0IGxkcl9zeW1ib2wgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJY2hhciB0ZW1wX2J1ZltNQVhFWFBSXTsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gbGRyX3N5bS0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJdnNucHJpbnRmKChjaGFyICopdGVtcF9idWYsIE1BWEVYUFIsIChjaGFyICopZXJyc3RyLCBhcmdzKTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzXG4iLCB0ZW1wX2J1Zik7Cit9CisKKy8qIGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICovCisKKy8qCisgKiAgPT09PT09PT0gZGJsbF9ybW1fYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIGludCBkYmxsX3JtbV9hbGxvYyhzdHJ1Y3QgZHluYW1pY19sb2FkZXJfYWxsb2NhdGUgKnRoaXMsCisJCQkgIHN0cnVjdCBsZHJfc2VjdGlvbl9pbmZvICppbmZvLCB1bnNpZ25lZCBhbGlnbikKK3sKKwlzdHJ1Y3QgZGJsbF9hbGxvYyAqZGJsbF9hbGxvY19vYmogPSAoc3RydWN0IGRibGxfYWxsb2MgKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIG1lbV9zZWN0X3R5cGU7CisJc3RydWN0IHJtbV9hZGRyIHJtbV9hZGRyX29iajsKKwlzMzIgcmV0ID0gdHJ1ZTsKKwl1bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKTsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisJY2hhciAqc3pfc2VjX2xhc3RfdG9rZW4gPSBOVUxMOworCWNoYXIgKnN6X2xhc3RfdG9rZW4gPSBOVUxMOworCWNoYXIgKnN6X3NlY3RfbmFtZSA9IE5VTEw7CisJY2hhciAqcHN6X2N1cjsKKwlzMzIgdG9rZW5fbGVuID0gMDsKKwlzMzIgc2VnX2lkID0gLTE7CisJczMyIHJlcSA9IC0xOworCXMzMiBjb3VudCA9IDA7CisJdTMyIGFsbG9jX3NpemUgPSAwOworCXUzMiBydW5fYWRkcl9mbGFnID0gMDsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gZGJsbF9hbGxvY19vYmotPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCisJbWVtX3NlY3RfdHlwZSA9CisJICAgIChzdHlwZSA9PSBETE9BRF9URVhUKSA/IERCTExfQ09ERSA6IChzdHlwZSA9PQorCQkJCQkJIERMT0FEX0JTUykgPyBEQkxMX0JTUyA6CisJICAgIERCTExfREFUQTsKKworCS8qIEF0dGVtcHQgdG8gZXh0cmFjdCB0aGUgc2VnbWVudCBJRCBhbmQgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24gZnJvbQorCSAgIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uICovCisJREJDX1JFUVVJUkUoaW5mby0+bmFtZSk7CisJdG9rZW5fbGVuID0gc3RybGVuKChjaGFyICopKGluZm8tPm5hbWUpKSArIDE7CisKKwlzel9zZWN0X25hbWUgPSBremFsbG9jKHRva2VuX2xlbiwgR0ZQX0tFUk5FTCk7CisJc3pfbGFzdF90b2tlbiA9IGt6YWxsb2ModG9rZW5fbGVuLCBHRlBfS0VSTkVMKTsKKwlzel9zZWNfbGFzdF90b2tlbiA9IGt6YWxsb2ModG9rZW5fbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmIChzel9zZWN0X25hbWUgPT0gTlVMTCB8fCBzel9zZWNfbGFzdF90b2tlbiA9PSBOVUxMIHx8CisJICAgIHN6X2xhc3RfdG9rZW4gPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJc3RybmNweShzel9zZWN0X25hbWUsIChjaGFyICopKGluZm8tPm5hbWUpLCB0b2tlbl9sZW4pOworCXBzel9jdXIgPSBzel9zZWN0X25hbWU7CisJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgIjoiKSkgJiYgKnRva2VuICE9ICdcMCcpIHsKKwkJc3RybmNweShzel9zZWNfbGFzdF90b2tlbiwgc3pfbGFzdF90b2tlbiwKKwkJCXN0cmxlbihzel9sYXN0X3Rva2VuKSArIDEpOworCQlzdHJuY3B5KHN6X2xhc3RfdG9rZW4sIHRva2VuLCBzdHJsZW4odG9rZW4pICsgMSk7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCAiOiIpOworCQljb3VudCsrOwkvKiBvcHRpbWl6ZXMgcHJvY2Vzc2luZyAqLworCX0KKwkvKiBJZiB0b2tlbiBpcyAwIG9yIDEsIGFuZCBzel9zZWNfbGFzdF90b2tlbiBpcyBEWU5fREFSQU0gb3IgRFlOX1NBUkFNLAorCSAgIG9yIERZTl9FWFRFUk5BTCwgdGhlbiBtZW0gZ3JhbnVsYXJpdHkgaW5mb3JtYXRpb24gaXMgcHJlc2VudAorCSAgIHdpdGhpbiB0aGUgc2VjdGlvbiBuYW1lIC0gb25seSBwcm9jZXNzIGlmIHRoZXJlIGFyZSBhdCBsZWFzdCB0aHJlZQorCSAgIHRva2VucyB3aXRoaW4gdGhlIHNlY3Rpb24gbmFtZSAoanVzdCBhIG1pbm9yIG9wdGltaXphdGlvbikgKi8KKwlpZiAoY291bnQgPj0gMykKKwkJc3RyaWN0X3N0cnRvbChzel9sYXN0X3Rva2VuLCAxMCwgKGxvbmcgKikmcmVxKTsKKworCWlmICgocmVxID09IDApIHx8IChyZXEgPT0gMSkpIHsKKwkJaWYgKHN0cmNtcChzel9zZWNfbGFzdF90b2tlbiwgIkRZTl9EQVJBTSIpID09IDApIHsKKwkJCXNlZ19pZCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RyY21wKHN6X3NlY19sYXN0X3Rva2VuLCAiRFlOX1NBUkFNIikgPT0gMCkgeworCQkJCXNlZ19pZCA9IDE7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJjbXAoc3pfc2VjX2xhc3RfdG9rZW4sCisJCQkJCSAgICJEWU5fRVhURVJOQUwiKSA9PSAwKQorCQkJCQlzZWdfaWQgPSAyOworCQkJfQorCQl9CisJfQorZnVuY19jb250OgorCWtmcmVlKHN6X3NlY3RfbmFtZSk7CisJc3pfc2VjdF9uYW1lID0gTlVMTDsKKwlrZnJlZShzel9sYXN0X3Rva2VuKTsKKwlzel9sYXN0X3Rva2VuID0gTlVMTDsKKwlrZnJlZShzel9zZWNfbGFzdF90b2tlbik7CisJc3pfc2VjX2xhc3RfdG9rZW4gPSBOVUxMOworCisJaWYgKG1lbV9zZWN0X3R5cGUgPT0gREJMTF9DT0RFKQorCQlhbGxvY19zaXplID0gaW5mby0+c2l6ZSArIEdFTV9MMVBfUFJFRkVUQ0hfU0laRTsKKwllbHNlCisJCWFsbG9jX3NpemUgPSBpbmZvLT5zaXplOworCisJaWYgKGluZm8tPmxvYWRfYWRkciAhPSBpbmZvLT5ydW5fYWRkcikKKwkJcnVuX2FkZHJfZmxhZyA9IDE7CisJLyogVE9ETyAtIGlkZWFsbHksIHdlIGNhbiBwYXNzIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYWxzbworCSAqIGZyb20gaGVyZSAqLworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPQorCQkgICAgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuYWxsb2MpIChsaWItPnRhcmdldF9vYmotPmF0dHJzLgorCQkJCQkJICAgIHJtbV9oYW5kbGUsIG1lbV9zZWN0X3R5cGUsCisJCQkJCQkgICAgYWxsb2Nfc2l6ZSwgYWxpZ24sCisJCQkJCQkgICAgKHUzMiAqKSAmcm1tX2FkZHJfb2JqLAorCQkJCQkJICAgIHNlZ19pZCwgcmVxLCBmYWxzZSk7CisJfQorCWlmIChzdGF0dXMpIHsKKwkJcmV0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyogUk1NIGdpdmVzIHdvcmQgYWRkcmVzcy4gTmVlZCB0byBjb252ZXJ0IHRvIGJ5dGUgYWRkcmVzcyAqLworCQlpbmZvLT5sb2FkX2FkZHIgPSBybW1fYWRkcl9vYmouYWRkciAqIERTUFdPUkRTSVpFOworCQlpZiAoIXJ1bl9hZGRyX2ZsYWcpCisJCQlpbmZvLT5ydW5fYWRkciA9IGluZm8tPmxvYWRfYWRkcjsKKwkJaW5mby0+Y29udGV4dCA9ICh1MzIpIHJtbV9hZGRyX29iai5zZWdpZDsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogJXMgYmFzZSA9IDB4JXggbGVuID0gMHgleCwgIgorCQkJImluZm8tPnJ1bl9hZGRyIDB4JXgsIGluZm8tPmxvYWRfYWRkciAweCV4XG4iLAorCQkJX19mdW5jX18sIGluZm8tPm5hbWUsIGluZm8tPmxvYWRfYWRkciAvIERTUFdPUkRTSVpFLAorCQkJaW5mby0+c2l6ZSAvIERTUFdPUkRTSVpFLCBpbmZvLT5ydW5fYWRkciwKKwkJCWluZm8tPmxvYWRfYWRkcik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2RlYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgcm1tX2RlYWxsb2Moc3RydWN0IGR5bmFtaWNfbG9hZGVyX2FsbG9jYXRlICp0aGlzLAorCQkJc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRibGxfYWxsb2MgKmRibGxfYWxsb2Nfb2JqID0gKHN0cnVjdCBkYmxsX2FsbG9jICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXUzMiBzZWdpZDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1bnNpZ25lZCBzdHlwZSA9IERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKTsKKwl1MzIgbWVtX3NlY3RfdHlwZTsKKwl1MzIgZnJlZV9zaXplID0gMDsKKworCW1lbV9zZWN0X3R5cGUgPQorCSAgICAoc3R5cGUgPT0gRExPQURfVEVYVCkgPyBEQkxMX0NPREUgOiAoc3R5cGUgPT0KKwkJCQkJCSBETE9BRF9CU1MpID8gREJMTF9CU1MgOgorCSAgICBEQkxMX0RBVEE7CisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBkYmxsX2FsbG9jX29iai0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJLyogc2VnaWQgd2FzIHNldCBieSBhbGxvYyBmdW5jdGlvbiAqLworCXNlZ2lkID0gKHUzMikgaW5mby0+Y29udGV4dDsKKwlpZiAobWVtX3NlY3RfdHlwZSA9PSBEQkxMX0NPREUpCisJCWZyZWVfc2l6ZSA9IGluZm8tPnNpemUgKyBHRU1fTDFQX1BSRUZFVENIX1NJWkU7CisJZWxzZQorCQlmcmVlX3NpemUgPSBpbmZvLT5zaXplOworCWlmIChsaWIgIT0gTlVMTCkgeworCQlzdGF0dXMgPQorCQkgICAgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuZnJlZSkgKGxpYi0+dGFyZ2V0X29iai0+YXR0cnMuCisJCQkJCQkgICBzeW1faGFuZGxlLCBzZWdpZCwKKwkJCQkJCSAgIGluZm8tPmxvYWRfYWRkciAvCisJCQkJCQkgICBEU1BXT1JEU0laRSwgZnJlZV9zaXplLAorCQkJCQkJICAgZmFsc2UpOworCX0KK30KKworLyogZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqLworLyoKKyAqICA9PT09PT09PSBjb25uZWN0ID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgY29ubmVjdChzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcykKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqICA9PT09PT09PSByZWFkX21lbSA9PT09PT09PQorICogIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KKyAqLworc3RhdGljIGludCByZWFkX21lbShzdHJ1Y3QgZHluYW1pY19sb2FkZXJfaW5pdGlhbGl6ZSAqdGhpcywgdm9pZCAqYnVmLAorCQkgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICB1bnNpZ25lZCBuYnl0ZXMpCit7CisJc3RydWN0IGRibGxfaW5pdF9vYmogKmluaXRfb2JqID0gKHN0cnVjdCBkYmxsX2luaXRfb2JqICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCWludCBieXRlc19yZWFkID0gMDsKKworCURCQ19SRVFVSVJFKHRoaXMgIT0gTlVMTCk7CisJbGliID0gaW5pdF9vYmotPmxpYjsKKwlEQkNfUkVRVUlSRShsaWIpOworCS8qIE5lZWQgYnJpZGdlX2JyZF9yZWFkIGZ1bmN0aW9uICovCisJcmV0dXJuIGJ5dGVzX3JlYWQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gd3JpdGVfbWVtID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfbWVtKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCB2b2lkICpidWYsCisJCSAgICAgbGRyX2FkZHIgYWRkciwgc3RydWN0IGxkcl9zZWN0aW9uX2luZm8gKmluZm8sCisJCSAgICAgdW5zaWduZWQgYnl0ZXMpCit7CisJc3RydWN0IGRibGxfaW5pdF9vYmogKmluaXRfb2JqID0gKHN0cnVjdCBkYmxsX2luaXRfb2JqICopdGhpczsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX3Rhcl9vYmogKnRhcmdldF9vYmo7CisJc3RydWN0IGRibGxfc2VjdF9pbmZvIHNlY3RfaW5mbzsKKwl1MzIgbWVtX3NlY3RfdHlwZTsKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGluaXRfb2JqLT5saWI7CisJaWYgKCFsaWIpCisJCXJldHVybiBmYWxzZTsKKworCXRhcmdldF9vYmogPSBsaWItPnRhcmdldF9vYmo7CisKKwltZW1fc2VjdF90eXBlID0KKwkgICAgKERMT0FEX1NFQ1RJT05fVFlQRShpbmZvLT50eXBlKSA9PQorCSAgICAgRExPQURfVEVYVCkgPyBEQkxMX0NPREUgOiBEQkxMX0RBVEE7CisJaWYgKHRhcmdldF9vYmogJiYgdGFyZ2V0X29iai0+YXR0cnMud3JpdGUpIHsKKwkJcmV0ID0KKwkJICAgICgqdGFyZ2V0X29iai0+YXR0cnMud3JpdGUpICh0YXJnZXRfb2JqLT5hdHRycy5pbnB1dF9wYXJhbXMsCisJCQkJCQlhZGRyLCBidWYsIGJ5dGVzLAorCQkJCQkJbWVtX3NlY3RfdHlwZSk7CisKKwkJaWYgKHRhcmdldF9vYmotPmF0dHJzLmxvZ193cml0ZSkgeworCQkJc2VjdF9pbmZvLm5hbWUgPSBpbmZvLT5uYW1lOworCQkJc2VjdF9pbmZvLnNlY3RfcnVuX2FkZHIgPSBpbmZvLT5ydW5fYWRkcjsKKwkJCXNlY3RfaW5mby5zZWN0X2xvYWRfYWRkciA9IGluZm8tPmxvYWRfYWRkcjsKKwkJCXNlY3RfaW5mby5zaXplID0gaW5mby0+c2l6ZTsKKwkJCXNlY3RfaW5mby50eXBlID0gbWVtX3NlY3RfdHlwZTsKKwkJCS8qIFBhc3MgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgd2UndmUgd3JpdHRlbiB0bworCQkJICogYW5vdGhlciBtb2R1bGUgKi8KKwkJCSgqdGFyZ2V0X29iai0+YXR0cnMubG9nX3dyaXRlKSAodGFyZ2V0X29iai0+YXR0cnMuCisJCQkJCQkJbG9nX3dyaXRlX2hhbmRsZSwKKwkJCQkJCQkmc2VjdF9pbmZvLCBhZGRyLAorCQkJCQkJCWJ5dGVzKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGZpbGxfbWVtID09PT09PT09CisgKiAgRmlsbCBieXRlcyBvZiBtZW1vcnkgYXQgYSBnaXZlbiBhZGRyZXNzIHdpdGggYSBnaXZlbiB2YWx1ZSBieQorICogIHdyaXRpbmcgZnJvbSBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBnaXZlbiB2YWx1ZS4gIFdyaXRlIGluCisgKiAgc2V0cyBvZiBNQVhFWFBSICgxMjgpIGJ5dGVzIHRvIGF2b2lkIGxhcmdlIHN0YWNrIGJ1ZmZlciBpc3N1ZXMuCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9tZW0oc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMsIGxkcl9hZGRyIGFkZHIsCisJCSAgICBzdHJ1Y3QgbGRyX3NlY3Rpb25faW5mbyAqaW5mbywgdW5zaWduZWQgYnl0ZXMsIHVuc2lnbmVkIHZhbCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJY2hhciAqcGJ1ZjsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOworCXN0cnVjdCBkYmxsX2luaXRfb2JqICppbml0X29iaiA9IChzdHJ1Y3QgZGJsbF9pbml0X29iaiAqKXRoaXM7CisKKwlEQkNfUkVRVUlSRSh0aGlzICE9IE5VTEwpOworCWxpYiA9IGluaXRfb2JqLT5saWI7CisJcGJ1ZiA9IE5VTEw7CisJLyogUGFzcyB0aGUgTlVMTCBwb2ludGVyIHRvIHdyaXRlX21lbSB0byBnZXQgdGhlIHN0YXJ0IGFkZHJlc3Mgb2YgU2hhcmVkCisJICAgbWVtb3J5LiBUaGlzIGlzIGEgdHJpY2sgdG8ganVzdCBnZXQgdGhlIHN0YXJ0IGFkZHJlc3MsIHRoZXJlIGlzIG5vCisJICAgd3JpdGluZyB0YWtpbmcgcGxhY2Ugd2l0aCB0aGlzIFdyaXRlbWVtCisJICovCisJaWYgKChsaWItPnRhcmdldF9vYmotPmF0dHJzLndyaXRlKSAhPSAoZGJsbF93cml0ZV9meG4pIG5vX29wKQorCQl3cml0ZV9tZW0odGhpcywgJnBidWYsIGFkZHIsIGluZm8sIDApOworCWlmIChwYnVmKQorCQltZW1zZXQocGJ1ZiwgdmFsLCBieXRlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGV4ZWN1dGUgPT09PT09PT0KKyAqLworc3RhdGljIGludCBleGVjdXRlKHN0cnVjdCBkeW5hbWljX2xvYWRlcl9pbml0aWFsaXplICp0aGlzLCBsZHJfYWRkciBzdGFydCkKK3sKKwlzdHJ1Y3QgZGJsbF9pbml0X29iaiAqaW5pdF9vYmogPSAoc3RydWN0IGRibGxfaW5pdF9vYmogKil0aGlzOworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpsaWI7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUodGhpcyAhPSBOVUxMKTsKKwlsaWIgPSBpbml0X29iai0+bGliOworCURCQ19SRVFVSVJFKGxpYik7CisJLyogU2F2ZSBlbnRyeSBwb2ludCAqLworCWlmIChsaWIgIT0gTlVMTCkKKwkJbGliLT5lbnRyeSA9ICh1MzIpIHN0YXJ0OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSByZWxlYXNlID09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2Uoc3RydWN0IGR5bmFtaWNfbG9hZGVyX2luaXRpYWxpemUgKnRoaXMpCit7Cit9CisKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfQkFDS1RSQUNFCisvKioKKyAqICBmaW5kX3N5bWJvbF9jb250ZXh0IC0gQmFzaWMgc3ltYm9sIGNvbnRleHQgc3RydWN0dXJlCisgKiBAYWRkcmVzczoJCVN5bWJvbCBBZHJlc3MKKyAqIEBvZmZzZXRfcmFuZ2U6CQlPZmZzZXQgcmFuZ2Ugd2hlcmUgdGhlIHNlYXJjaCBmb3IgdGhlIERTUCBzeW1ib2wKKyAqCQkJc3RhcnRlZC4KKyAqIEBjdXJfYmVzdF9vZmZzZXQ6CUJlc3Qgb2Zmc2V0IHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBEU1Agc3ltYm9sCisgKiBAc3ltX2FkZHI6CQlBZGRyZXNzIG9mIHRoZSBEU1Agc3ltYm9sCisgKiBAbmFtZToJCVN5bWJvbCBuYW1lCisgKgorICovCitzdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCB7CisJLyogaW5wdXQgKi8KKwl1MzIgYWRkcmVzczsKKwl1MzIgb2Zmc2V0X3JhbmdlOworCS8qIHN0YXRlICovCisJdTMyIGN1cl9iZXN0X29mZnNldDsKKwkvKiBvdXRwdXQgKi8KKwl1MzIgc3ltX2FkZHI7CisJY2hhciBuYW1lWzEyMF07Cit9OworCisvKioKKyAqIGZpbmRfc3ltYm9sX2NhbGxiYWNrKCkgLSBWYWxpZGF0ZXMgc3ltYm9sIGFkZHJlc3MgYW5kIGNvcGllcyB0aGUgc3ltYm9sIG5hbWUKKyAqCQkJdG8gdGhlIHVzZXIgZGF0YS4KKyAqIEBlbGVtOgkJZHNwIGxpYnJhcnkgY29udGV4dAorICogQHVzZXJfZGF0YToJCUZpbmQgc3ltYm9sIGNvbnRleHQKKyAqCisgKi8KK3ZvaWQgZmluZF9zeW1ib2xfY2FsbGJhY2sodm9pZCAqZWxlbSwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBkYmxsX3N5bWJvbCAqc3ltYm9sID0gZWxlbTsKKwlzdHJ1Y3QgZmluZF9zeW1ib2xfY29udGV4dCAqY29udGV4dCA9IHVzZXJfZGF0YTsKKwl1MzIgc3ltYm9sX2FkZHIgPSBzeW1ib2wtPnZhbHVlLnZhbHVlOworCXUzMiBvZmZzZXQgPSBjb250ZXh0LT5hZGRyZXNzIC0gc3ltYm9sX2FkZHI7CisKKwkvKgorCSAqIEFkZHJlc3MgZ2l2ZW4gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBzeW1ib2wgYWRkcmVzcywKKwkgKiBzeW1ib2wgYWRkcmVzcyBzaG91bGQgYmUgIHdpdGhpbiBzcGVjaWZpZWQgcmFuZ2UKKwkgKiBhbmQgdGhlIG9mZnNldCBzaG91bGQgYmUgYmV0dGVyIHRoYW4gcHJldmlvdXMgb25lCisJICovCisJaWYgKGNvbnRleHQtPmFkZHJlc3MgPj0gc3ltYm9sX2FkZHIgJiYgc3ltYm9sX2FkZHIgPCAodTMyKS0xICYmCisJCW9mZnNldCA8IGNvbnRleHQtPmN1cl9iZXN0X29mZnNldCkgeworCQljb250ZXh0LT5jdXJfYmVzdF9vZmZzZXQgPSBvZmZzZXQ7CisJCWNvbnRleHQtPnN5bV9hZGRyID0gc3ltYm9sX2FkZHI7CisJCXN0cm5jcHkoY29udGV4dC0+bmFtZSwgc3ltYm9sLT5uYW1lLCBzaXplb2YoY29udGV4dC0+bmFtZSkpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiBkYmxsX2ZpbmRfZHNwX3N5bWJvbCgpIC0gVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRzcCBzeW1ib2wgZnJvbSB0aGUgZHNwIGJpbmFyeS4KKyAqIEB6bF9saWI6CQlEU1AgYmluYXJ5IG9iaiBsaWJyYXJ5IHBvaW50ZXIKKyAqIEBhZGRyZXNzOgkJR2l2ZW4gYWRkcmVzcyB0byBmaW5kIHRoZSBkc3Agc3ltYm9sCisgKiBAb2Zmc2V0X3JhbmdlOgkJb2Zmc2V0IHJhbmdlIHRvIGxvb2sgZm9yIGRzcCBzeW1ib2wKKyAqIEBzeW1fYWRkcl9vdXRwdXQ6CVN5bWJvbCBPdXRwdXQgYWRkcmVzcworICogQG5hbWVfb3V0cHV0OgkJU3RyaW5nIHdpdGggdGhlIGRzcCBzeW1ib2wKKyAqCisgKiAJVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIGRzcCBzeW1ib2wgZnJvbSB0aGUgZHNwIGJpbmFyeS4KKyAqLworYm9vbCBkYmxsX2ZpbmRfZHNwX3N5bWJvbChzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqemxfbGliLCB1MzIgYWRkcmVzcywKKwkJCQl1MzIgb2Zmc2V0X3JhbmdlLCB1MzIgKnN5bV9hZGRyX291dHB1dCwKKwkJCQljaGFyICpuYW1lX291dHB1dCkKK3sKKwlib29sIHN0YXR1cyA9IGZhbHNlOworCXN0cnVjdCBmaW5kX3N5bWJvbF9jb250ZXh0IGNvbnRleHQ7CisKKwljb250ZXh0LmFkZHJlc3MgPSBhZGRyZXNzOworCWNvbnRleHQub2Zmc2V0X3JhbmdlID0gb2Zmc2V0X3JhbmdlOworCWNvbnRleHQuY3VyX2Jlc3Rfb2Zmc2V0ID0gb2Zmc2V0X3JhbmdlOworCWNvbnRleHQuc3ltX2FkZHIgPSAwOworCWNvbnRleHQubmFtZVswXSA9ICdcMCc7CisKKwlnaF9pdGVyYXRlKHpsX2xpYi0+c3ltX3RhYiwgZmluZF9zeW1ib2xfY2FsbGJhY2ssICZjb250ZXh0KTsKKworCWlmIChjb250ZXh0Lm5hbWVbMF0pIHsKKwkJc3RhdHVzID0gdHJ1ZTsKKwkJc3RyY3B5KG5hbWVfb3V0cHV0LCBjb250ZXh0Lm5hbWUpOworCQkqc3ltX2FkZHJfb3V0cHV0ID0gY29udGV4dC5zeW1fYWRkcjsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZGYwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kZXYuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qCisgKiBkZXYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBCcmlkZ2UgQnJpZGdlIGRyaXZlciBkZXZpY2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9sZHIuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZG1tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL21nci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwYXBpLmg+CS8qIERTUCBBUEkgdmVyc2lvbiBpbmZvLiAqLworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaW8uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NtbS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWguaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisKKyNkZWZpbmUgTUFLRVZFUlNJT04obWFqb3IsIG1pbm9yKSAgIChtYWpvciAqIDEwICsgbWlub3IpCisjZGVmaW5lIEJSRF9BUElfVkVSU0lPTgkJTUFLRVZFUlNJT04oQlJEX0FQSV9NQUpPUl9WRVJTSU9OLAlcCisJCQkJQlJEX0FQSV9NSU5PUl9WRVJTSU9OKQorCisvKiBUaGUgQnJpZGdlIGRldmljZSBvYmplY3Q6ICovCitzdHJ1Y3QgZGV2X29iamVjdCB7CisJLyogTFNUIHJlcXVpcmVzICJsaW5rIiB0byBiZSBmaXJzdCBmaWVsZCEgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CS8qIExpbmsgdG8gbmV4dCBkZXZfb2JqZWN0LiAqLworCXU4IGRldl90eXBlOwkJLyogRGV2aWNlIFR5cGUgKi8KKwlzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iajsJLyogUGxhdGZvcm0gc3BlY2lmaWMgZGV2IGlkICovCisJLyogQnJpZGdlIENvbnRleHQgSGFuZGxlICovCisJc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dCAqaGJyaWRnZV9jb250ZXh0OworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyLiAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSBicmlkZ2VfaW50ZXJmYWNlOworCXN0cnVjdCBicmRfb2JqZWN0ICpsb2NrX293bmVyOwkvKiBDbGllbnQgd2l0aCBleGNsdXNpdmUgYWNjZXNzLiAqLworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsJLyogQ29kZSBtYW5hZ2VyIGhhbmRsZS4gKi8KKwlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsJLyogQ2hhbm5lbCBtYW5hZ2VyLiAqLworCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsJLyogREVIIG1hbmFnZXIuICovCisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOwkvKiBNZXNzYWdlIG1hbmFnZXIuICovCisJc3RydWN0IGlvX21nciAqaGlvX21ncjsJLyogSU8gbWFuYWdlciAoQ0hOTCwgbXNnX2N0cmwpICovCisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyOwkvKiBTTSBtZW1vcnkgbWFuYWdlci4gKi8KKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsJLyogRHluYW1pYyBtZW1vcnkgbWFuYWdlci4gKi8KKwlzdHJ1Y3QgbGRyX21vZHVsZSAqbW9kdWxlX29iajsJLyogQnJpZGdlIE1vZHVsZSBoYW5kbGUuICovCisJdTMyIHdvcmRfc2l6ZTsJCS8qIERTUCB3b3JkIHNpemU6IHF1aWNrIGFjY2Vzcy4gKi8KKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmo7CS8qIERyaXZlciBPYmplY3QgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKnByb2NfbGlzdDsJLyogTGlzdCBvZiBQcm9jZWVvc3IgYXR0YWNoZWQgdG8KKwkJCQkJICogdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKK307CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIHJlZnM7CQkvKiBNb2R1bGUgcmVmZXJlbmNlIGNvdW50ICovCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzICovCitzdGF0aWMgaW50IGZ4bl9ub3RfaW1wbGVtZW50ZWQoaW50IGFyZywgLi4uKTsKK3N0YXRpYyBpbnQgaW5pdF9jb2RfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqKTsKK3N0YXRpYyB2b2lkIHN0b3JlX2ludGVyZmFjZV9meG5zKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqZHJ2X2Z4bnMsCisJCQkJIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zKTsKKy8qCisgKiAgPT09PT09PT0gZGV2X2JyZF93cml0ZV9meG4gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFeHBvcnRlZCBmdW5jdGlvbiB0byBiZSB1c2VkIGFzIHRoZSBDT0Qgd3JpdGUgZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uCisgKiAgICAgIGlzIHBhc3NlZCBhIGhhbmRsZSB0byBhIERFVl9oT2JqZWN0LCB0aGVuIGNhbGxzIHRoZQorICogICAgICBkZXZpY2UncyBicmlkZ2VfYnJkX3dyaXRlKCkgZnVuY3Rpb24uCisgKi8KK3UzMiBkZXZfYnJkX3dyaXRlX2Z4bih2b2lkICphcmIsIHUzMiBkc3BfYWRkLCB2b2lkICpob3N0X2J1ZiwKKwkJICAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSkKK3sKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWFyYjsKKwl1MzIgdWxfd3JpdHRlbiA9IDA7CisJaW50IHN0YXR1czsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShob3N0X2J1ZiAhPSBOVUxMKTsJLyogUmVxdWlyZWQgb2YgQnJkV3JpdGUoKS4gKi8KKwlpZiAoZGV2X29iaikgeworCQkvKiBSZXF1aXJlIG9mIEJyZFdyaXRlKCkgKi8KKwkJREJDX0FTU0VSVChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgIT0gTlVMTCk7CisJCXN0YXR1cyA9ICgqZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZS5wZm5fYnJkX3dyaXRlKSAoCisJCQkJCWRldl9vYmotPmhicmlkZ2VfY29udGV4dCwgaG9zdF9idWYsCisJCQkJCWRzcF9hZGQsIHVsX251bV9ieXRlcywgbWVtX3NwYWNlKTsKKwkJLyogU3BlY2lhbCBjYXNlIG9mIGdldHRpbmcgdGhlIGFkZHJlc3Mgb25seSAqLworCQlpZiAodWxfbnVtX2J5dGVzID09IDApCisJCQl1bF9udW1fYnl0ZXMgPSAxOworCQlpZiAoIXN0YXR1cykKKwkJCXVsX3dyaXR0ZW4gPSB1bF9udW1fYnl0ZXM7CisKKwl9CisJcmV0dXJuIHVsX3dyaXR0ZW47Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2NyZWF0ZV9kZXZpY2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdG8gbG9hZCB0aGUgUE0gQnJpZGdlIERyaXZlciBmb3IgYQorICogICAgICBQTSBib2FyZCAoZGV2aWNlKS4KKyAqLworaW50IGRldl9jcmVhdGVfZGV2aWNlKHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaiwKKwkJCSAgICAgY29uc3QgY2hhciAqZHJpdmVyX2ZpbGVfbmFtZSwKKwkJCSAgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgbGRyX21vZHVsZSAqbW9kdWxlX29iaiA9IE5VTEw7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICpkcnZfZnhucyA9IE5VTEw7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBOVUxMOworCXN0cnVjdCBjaG5sX21ncmF0dHJzIG1ncl9hdHRyczsKKwlzdHJ1Y3QgaW9fYXR0cnMgaW9fbWdyX2F0dHJzOworCXUzMiBudW1fd2luZG93czsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmogPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkZXZpY2Vfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGRyaXZlcl9maWxlX25hbWUgIT0gTlVMTCk7CisKKwlzdGF0dXMgPSBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCgodm9pZCAqKSZob3N0X3Jlcyk7CisKKwlpZiAoc3RhdHVzKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byByZXNlcnZlIGJyaWRnZSByZXNvdXJjZXNcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLyogIEdldCB0aGUgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisJYnJpZGdlX2Rydl9lbnRyeSgmZHJ2X2Z4bnMsIGRyaXZlcl9maWxlX25hbWUpOworCWlmIChjZmdfZ2V0X29iamVjdCgodTMyICopICZoZHJ2X29iaiwgUkVHX0RSVl9PQkpFQ1QpKSB7CisJCS8qIGRvbid0IHByb3BvZ2F0ZSBDRkcgZXJyb3JzIGZyb20gdGhpcyBQUk9DIGZ1bmN0aW9uICovCisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJLyogQ3JlYXRlIHRoZSBkZXZpY2Ugb2JqZWN0LCBhbmQgcGFzcyBhIGhhbmRsZSB0byB0aGUgQnJpZGdlIGRyaXZlciBmb3IKKwkgKiBzdG9yYWdlLiAqLworCWlmICghc3RhdHVzKSB7CisJCURCQ19BU1NFUlQoZHJ2X2Z4bnMpOworCQlkZXZfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldl9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRldl9vYmopIHsKKwkJCS8qIEZpbGwgb3V0IHRoZSByZXN0IG9mIHRoZSBEZXYgT2JqZWN0IHN0cnVjdHVyZTogKi8KKwkJCWRldl9vYmotPmRldl9ub2RlX29iaiA9IGRldl9ub2RlX29iajsKKwkJCWRldl9vYmotPm1vZHVsZV9vYmogPSBtb2R1bGVfb2JqOworCQkJZGV2X29iai0+Y29kX21nciA9IE5VTEw7CisJCQlkZXZfb2JqLT5oY2hubF9tZ3IgPSBOVUxMOworCQkJZGV2X29iai0+aGRlaF9tZ3IgPSBOVUxMOworCQkJZGV2X29iai0+bG9ja19vd25lciA9IE5VTEw7CisJCQlkZXZfb2JqLT53b3JkX3NpemUgPSBEU1BXT1JEU0laRTsKKwkJCWRldl9vYmotPmhkcnZfb2JqID0gaGRydl9vYmo7CisJCQlkZXZfb2JqLT5kZXZfdHlwZSA9IERTUF9VTklUOworCQkJLyogU3RvcmUgdGhpcyBCcmlkZ2UncyBpbnRlcmZhY2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBpdHMKKwkJCSAqIHZlcnNpb24uICovCisJCQlzdG9yZV9pbnRlcmZhY2VfZnhucyhkcnZfZnhucywKKwkJCQkJCSZkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlKTsKKworCQkJLyogQ2FsbCBmeG5fZGV2X2NyZWF0ZSgpIHRvIGdldCB0aGUgQnJpZGdlJ3MgZGV2aWNlCisJCQkgKiBjb250ZXh0IGhhbmRsZS4gKi8KKwkJCXN0YXR1cyA9IChkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlLnBmbl9kZXZfY3JlYXRlKQorCQkJICAgICgmZGV2X29iai0+aGJyaWRnZV9jb250ZXh0LCBkZXZfb2JqLAorCQkJICAgICBob3N0X3Jlcyk7CisJCQkvKiBBc3NlcnQgYnJpZGdlX2Rldl9jcmVhdGUoKSdzIGVuc3VyZSBjbGF1c2U6ICovCisJCQlEQkNfQVNTRVJUKHN0YXR1cworCQkJCSAgIHx8IChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgIT0gTlVMTCkpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfQorCX0KKwkvKiBBdHRlbXB0IHRvIGNyZWF0ZSB0aGUgQ09EIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlOiAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBpbml0X2NvZF9tZ3IoZGV2X29iaik7CisKKwkvKiBBdHRlbXB0IHRvIGNyZWF0ZSB0aGUgY2hhbm5lbCBtYW5hZ2VyIGZvciB0aGlzIGRldmljZTogKi8KKwlpZiAoIXN0YXR1cykgeworCQltZ3JfYXR0cnMubWF4X2NoYW5uZWxzID0gQ0hOTF9NQVhDSEFOTkVMUzsKKwkJaW9fbWdyX2F0dHJzLmJpcnEgPSBob3N0X3Jlcy0+YmlycV9yZWdpc3RlcnM7CisJCWlvX21ncl9hdHRycy5pcnFfc2hhcmVkID0KKwkJICAgIChob3N0X3Jlcy0+YmlycV9hdHRyaWIgJiBDRkdfSVJRU0hBUkVEKTsKKwkJaW9fbWdyX2F0dHJzLndvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOworCQltZ3JfYXR0cnMud29yZF9zaXplID0gRFNQV09SRFNJWkU7CisJCW51bV93aW5kb3dzID0gaG9zdF9yZXMtPm51bV9tZW1fd2luZG93czsKKwkJaWYgKG51bV93aW5kb3dzKSB7CisJCQkvKiBBc3N1bWUgbGFzdCBtZW1vcnkgd2luZG93IGlzIGZvciBDSE5MICovCisJCQlpb19tZ3JfYXR0cnMuc2htX2Jhc2UgPSBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0gKworCQkJICAgIGhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3I7CisJCQlpb19tZ3JfYXR0cnMudXNtX2xlbmd0aCA9CisJCQkgICAgaG9zdF9yZXMtPmR3X21lbV9sZW5ndGhbMV0gLQorCQkJICAgIGhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3I7CisJCX0gZWxzZSB7CisJCQlpb19tZ3JfYXR0cnMuc2htX2Jhc2UgPSAwOworCQkJaW9fbWdyX2F0dHJzLnVzbV9sZW5ndGggPSAwOworCQkJcHJfZXJyKCIlczogTm8gbWVtb3J5IHJlc2VydmVkIGZvciBzaGFyZWQgc3RydWN0dXJlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCX0KKwkJc3RhdHVzID0gY2hubF9jcmVhdGUoJmRldl9vYmotPmhjaG5sX21nciwgZGV2X29iaiwgJm1ncl9hdHRycyk7CisJCWlmIChzdGF0dXMgPT0gLUVOT1NZUykgeworCQkJLyogSXQncyBPSyBmb3IgYSBkZXZpY2Ugbm90IHRvIGhhdmUgYSBjaGFubmVsCisJCQkgKiBtYW5hZ2VyOiAqLworCQkJc3RhdHVzID0gMDsKKwkJfQorCQkvKiBDcmVhdGUgQ01NIG1nciBldmVuIGlmIE1zZyBNZ3Igbm90IGltcGwuICovCisJCXN0YXR1cyA9IGNtbV9jcmVhdGUoJmRldl9vYmotPmhjbW1fbWdyLAorCQkJCSAgICAoc3RydWN0IGRldl9vYmplY3QgKilkZXZfb2JqLCBOVUxMKTsKKwkJLyogT25seSBjcmVhdGUgSU8gbWFuYWdlciBpZiB3ZSBoYXZlIGEgY2hhbm5lbCBtYW5hZ2VyICovCisJCWlmICghc3RhdHVzICYmIGRldl9vYmotPmhjaG5sX21ncikgeworCQkJc3RhdHVzID0gaW9fY3JlYXRlKCZkZXZfb2JqLT5oaW9fbWdyLCBkZXZfb2JqLAorCQkJCQkgICAmaW9fbWdyX2F0dHJzKTsKKwkJfQorCQkvKiBPbmx5IGNyZWF0ZSBERUggbWFuYWdlciBpZiB3ZSBoYXZlIGFuIElPIG1hbmFnZXIgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIEluc3RhbnRpYXRlIHRoZSBERUggbW9kdWxlICovCisJCQlzdGF0dXMgPSBicmlkZ2VfZGVoX2NyZWF0ZSgmZGV2X29iai0+aGRlaF9tZ3IsIGRldl9vYmopOworCQl9CisJCS8qIENyZWF0ZSBETU0gbWdyIC4gKi8KKwkJc3RhdHVzID0gZG1tX2NyZWF0ZSgmZGV2X29iai0+ZG1tX21nciwKKwkJCQkgICAgKHN0cnVjdCBkZXZfb2JqZWN0ICopZGV2X29iaiwgTlVMTCk7CisJfQorCS8qIEFkZCB0aGUgbmV3IERFVl9PYmplY3QgdG8gdGhlIGdsb2JhbCBsaXN0OiAqLworCWlmICghc3RhdHVzKSB7CisJCWxzdF9pbml0X2VsZW0oJmRldl9vYmotPmxpbmspOworCQlzdGF0dXMgPSBkcnZfaW5zZXJ0X2Rldl9vYmplY3QoaGRydl9vYmosIGRldl9vYmopOworCX0KKwkvKiBDcmVhdGUgdGhlIFByb2Nlc3NvciBMaXN0ICovCisJaWYgKCFzdGF0dXMpIHsKKwkJZGV2X29iai0+cHJvY19saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCEoZGV2X29iai0+cHJvY19saXN0KSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZWxzZQorCQkJSU5JVF9MSVNUX0hFQUQoJmRldl9vYmotPnByb2NfbGlzdC0+aGVhZCk7CisJfQorbGVhdmU6CisJLyogIElmIGFsbCB3ZW50IHdlbGwsIHJldHVybiBhIGhhbmRsZSB0byB0aGUgZGV2IG9iamVjdDsKKwkgKiAgZWxzZSwgY2xlYW51cCBhbmQgcmV0dXJuIE5VTEwgaW4gdGhlIE9VVCBwYXJhbWV0ZXIuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJKmRldmljZV9vYmogPSBkZXZfb2JqOworCX0gZWxzZSB7CisJCWlmIChkZXZfb2JqKSB7CisJCQlrZnJlZShkZXZfb2JqLT5wcm9jX2xpc3QpOworCQkJaWYgKGRldl9vYmotPmNvZF9tZ3IpCisJCQkJY29kX2RlbGV0ZShkZXZfb2JqLT5jb2RfbWdyKTsKKwkJCWlmIChkZXZfb2JqLT5kbW1fbWdyKQorCQkJCWRtbV9kZXN0cm95KGRldl9vYmotPmRtbV9tZ3IpOworCQkJa2ZyZWUoZGV2X29iaik7CisJCX0KKworCQkqZGV2aWNlX29iaiA9IE5VTEw7CisJfQorCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqZGV2aWNlX29iaikgfHwgKHN0YXR1cyAmJiAhKmRldmljZV9vYmopKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9jcmVhdGUyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQWZ0ZXIgc3VjY2Vzc2Z1bCBsb2FkaW5nIG9mIHRoZSBpbWFnZSBmcm9tIGFwaV9pbml0X2NvbXBsZXRlMgorICogICAgICAoUFJPQyBBdXRvX1N0YXJ0KSBvciBwcm9jX2xvYWQgdGhpcyBmeG4gaXMgY2FsbGVkLiBUaGlzIGNyZWF0ZXMKKyAqICAgICAgdGhlIE5vZGUgTWFuYWdlciBhbmQgdXBkYXRlcyB0aGUgREVWIE9iamVjdC4KKyAqLworaW50IGRldl9jcmVhdGUyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCS8qIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBOb2RlIE1hbmFnZXIgcGVyIERFViBvYmplY3QgKi8KKwlEQkNfQVNTRVJUKCFkZXZfb2JqLT5obm9kZV9tZ3IpOworCXN0YXR1cyA9IG5vZGVfY3JlYXRlX21ncigmZGV2X29iai0+aG5vZGVfbWdyLCBoZGV2X29iaik7CisJaWYgKHN0YXR1cykKKwkJZGV2X29iai0+aG5vZGVfbWdyID0gTlVMTDsKKworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgZGV2X29iai0+aG5vZGVfbWdyICE9IE5VTEwpCisJCSAgIHx8IChzdGF0dXMgJiYgZGV2X29iai0+aG5vZGVfbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9kZXN0cm95MiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBOb2RlIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X2Rlc3Ryb3kyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWlmIChkZXZfb2JqLT5obm9kZV9tZ3IpIHsKKwkJaWYgKG5vZGVfZGVsZXRlX21ncihkZXZfb2JqLT5obm9kZV9tZ3IpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCQllbHNlCisJCQlkZXZfb2JqLT5obm9kZV9tZ3IgPSBOVUxMOworCisJfQorCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiBkZXZfb2JqLT5obm9kZV9tZ3IgPT0gTlVMTCkgfHwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9kZXN0cm95X2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlc3Ryb3lzIHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLCBpZiBhbnksIGNhbGxzCisgKiAgICAgIGJyaWRnZV9kZXZfZGVzdHJveSgpLCBhbmQgdGhlbiBhdHRlbXB0cyB0byB1bmxvYWQgdGhlIEJyaWRnZSBtb2R1bGUuCisgKi8KK2ludCBkZXZfZGVzdHJveV9kZXZpY2Uoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJaWYgKGRldl9vYmotPmNvZF9tZ3IpIHsKKwkJCWNvZF9kZWxldGUoZGV2X29iai0+Y29kX21ncik7CisJCQlkZXZfb2JqLT5jb2RfbWdyID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZfb2JqLT5obm9kZV9tZ3IpIHsKKwkJCW5vZGVfZGVsZXRlX21ncihkZXZfb2JqLT5obm9kZV9tZ3IpOworCQkJZGV2X29iai0+aG5vZGVfbWdyID0gTlVMTDsKKwkJfQorCisJCS8qIEZyZWUgdGhlIGlvLCBjaGFubmVsLCBhbmQgbWVzc2FnZSBtYW5hZ2VycyBmb3IgdGhpcyBib2FyZDogKi8KKwkJaWYgKGRldl9vYmotPmhpb19tZ3IpIHsKKwkJCWlvX2Rlc3Ryb3koZGV2X29iai0+aGlvX21ncik7CisJCQlkZXZfb2JqLT5oaW9fbWdyID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2X29iai0+aGNobmxfbWdyKSB7CisJCQljaG5sX2Rlc3Ryb3koZGV2X29iai0+aGNobmxfbWdyKTsKKwkJCWRldl9vYmotPmhjaG5sX21nciA9IE5VTEw7CisJCX0KKwkJaWYgKGRldl9vYmotPmhtc2dfbWdyKSB7CisJCQltc2dfZGVsZXRlKGRldl9vYmotPmhtc2dfbWdyKTsKKwkJCWRldl9vYmotPmhtc2dfbWdyID0gTlVMTDsKKwkJfQorCisJCWlmIChkZXZfb2JqLT5oZGVoX21ncikgeworCQkJLyogVW5pbml0aWFsaXplIERFSCBtb2R1bGUuICovCisJCQlicmlkZ2VfZGVoX2Rlc3Ryb3koZGV2X29iai0+aGRlaF9tZ3IpOworCQkJZGV2X29iai0+aGRlaF9tZ3IgPSBOVUxMOworCQl9CisJCWlmIChkZXZfb2JqLT5oY21tX21ncikgeworCQkJY21tX2Rlc3Ryb3koZGV2X29iai0+aGNtbV9tZ3IsIHRydWUpOworCQkJZGV2X29iai0+aGNtbV9tZ3IgPSBOVUxMOworCQl9CisKKwkJaWYgKGRldl9vYmotPmRtbV9tZ3IpIHsKKwkJCWRtbV9kZXN0cm95KGRldl9vYmotPmRtbV9tZ3IpOworCQkJZGV2X29iai0+ZG1tX21nciA9IE5VTEw7CisJCX0KKworCQkvKiBDYWxsIHRoZSBkcml2ZXIncyBicmlkZ2VfZGV2X2Rlc3Ryb3koKSBmdW5jdGlvbjogKi8KKwkJLyogUmVxdWlyZSBvZiBEZXZEZXN0cm95ICovCisJCWlmIChkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQpIHsKKwkJCXN0YXR1cyA9ICgqZGV2X29iai0+YnJpZGdlX2ludGVyZmFjZS5wZm5fZGV2X2Rlc3Ryb3kpCisJCQkgICAgKGRldl9vYmotPmhicmlkZ2VfY29udGV4dCk7CisJCQlkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWtmcmVlKGRldl9vYmotPnByb2NfbGlzdCk7CisJCQlkZXZfb2JqLT5wcm9jX2xpc3QgPSBOVUxMOworCisJCQkvKiBSZW1vdmUgdGhpcyBERVZfT2JqZWN0IGZyb20gdGhlIGdsb2JhbCBsaXN0OiAqLworCQkJZHJ2X3JlbW92ZV9kZXZfb2JqZWN0KGRldl9vYmotPmhkcnZfb2JqLCBkZXZfb2JqKTsKKwkJCS8qIEZyZWUgVGhlIGxpYnJhcnkgKiBMRFJfRnJlZU1vZHVsZQorCQkJICogKGRldl9vYmotPm1vZHVsZV9vYmopOyAqLworCQkJLyogRnJlZSB0aGlzIGRldiBvYmplY3Q6ICovCisJCQlrZnJlZShkZXZfb2JqKTsKKwkJCWRldl9vYmogPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY2hubF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgaGFuZGxlIHRvIHRoZSBjaGFubmVsIG1hbmFnZXIgaGFuZGxlIGNyZWF0ZWQgZm9yIHRoaXMKKyAqICAgICAgZGV2aWNlLgorICovCitpbnQgZGV2X2dldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgc3RydWN0IGNobmxfbWdyICoqbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobWdyICE9IE5VTEwpOworCisJaWYgKGhkZXZfb2JqKSB7CisJCSptZ3IgPSBkZXZfb2JqLT5oY2hubF9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY21tX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIHNoYXJlZCBtZW1vcnkgbWFuYWdlciBjcmVhdGVkIGZvciB0aGlzCisgKiAgICAgIGRldmljZS4KKyAqLworaW50IGRldl9nZXRfY21tX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICBzdHJ1Y3QgY21tX29iamVjdCAqKm1ncikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG1nciAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqbWdyID0gZGV2X29iai0+aGNtbV9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfZG1tX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBoYW5kbGUgdG8gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgY3JlYXRlZCBmb3IgdGhpcworICogICAgICBkZXZpY2UuCisgKi8KK2ludCBkZXZfZ2V0X2RtbV9tZ3Ioc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgc3RydWN0IGRtbV9vYmplY3QgKiptZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZ3IgIT0gTlVMTCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJKm1nciA9IGRldl9vYmotPmRtbV9tZ3I7CisJfSBlbHNlIHsKKwkJKm1nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChtZ3IgIT0gTlVMTCAmJiAqbWdyID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfY29kX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBDT0QgbWFuYWdlciBjcmVhdGUgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X2dldF9jb2RfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgIHN0cnVjdCBjb2RfbWFuYWdlciAqKmNvZF9tZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShjb2RfbWdyICE9IE5VTEwpOworCisJaWYgKGhkZXZfb2JqKSB7CisJCSpjb2RfbWdyID0gZGV2X29iai0+Y29kX21ncjsKKwl9IGVsc2UgeworCQkqY29kX21nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChjb2RfbWdyICE9IE5VTEwgJiYgKmNvZF9tZ3IgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfZGVoX21nciA9PT09PT09PQorICovCitpbnQgZGV2X2dldF9kZWhfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgIHN0cnVjdCBkZWhfbWdyICoqZGVoX21hbmFnZXIpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGVoX21hbmFnZXIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRldl9vYmopOworCWlmIChoZGV2X29iaikgeworCQkqZGVoX21hbmFnZXIgPSBoZGV2X29iai0+aGRlaF9tZ3I7CisJfSBlbHNlIHsKKwkJKmRlaF9tYW5hZ2VyID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X2Rldl9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBJRCBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK2ludCBkZXZfZ2V0X2Rldl9ub2RlKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICBzdHJ1Y3QgY2ZnX2Rldm5vZGUgKipkZXZfbmRlKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGV2X25kZSAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqZGV2X25kZSA9IGRldl9vYmotPmRldl9ub2RlX29iajsKKwl9IGVsc2UgeworCQkqZGV2X25kZSA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChkZXZfbmRlICE9IE5VTEwgJiYgKmRldl9uZGUgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9maXJzdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBmaXJzdCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0CisgKiAgICAgIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLgorICovCitzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X2dldF9maXJzdCh2b2lkKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gTlVMTDsKKworCWRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKworCXJldHVybiBkZXZfb2JqOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfaW50Zl9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIEJyaWRnZSBpbnRlcmZhY2UgZnVuY3Rpb24gc3RydWN0dXJlIGZvciB0aGUgbG9hZGVkIGRyaXZlci4KKyAqICAgICAgaWZfZnhucyAhPSBOVUxMLgorICovCitpbnQgZGV2X2dldF9pbnRmX2Z4bnMoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkJICAgICBzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKippZl9meG5zKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaWZfZnhucyAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqaWZfZnhucyA9ICZkZXZfb2JqLT5icmlkZ2VfaW50ZXJmYWNlOworCX0gZWxzZSB7CisJCSppZl9meG5zID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKChpZl9meG5zICE9IE5VTEwpICYmICgqaWZfZnhucyA9PSBOVUxMKSkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfaW9fbWdyID09PT09PT09CisgKi8KK2ludCBkZXZfZ2V0X2lvX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgIHN0cnVjdCBpb19tZ3IgKippb19tYW4pCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaW9fbWFuICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWlmIChoZGV2X29iaikgeworCQkqaW9fbWFuID0gaGRldl9vYmotPmhpb19tZ3I7CisJfSBlbHNlIHsKKwkJKmlvX21hbiA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25leHQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0CisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgREVWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZGV2X2dldF9maXJzdCgpIGFuZCB6ZXJvIG9yIG1vcmUgZGV2X2dldF9uZXh0CisgKi8KK3N0cnVjdCBkZXZfb2JqZWN0ICpkZXZfZ2V0X25leHQoc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpuZXh0X2Rldl9vYmplY3QgPSBOVUxMOworCisJaWYgKGhkZXZfb2JqKSB7CisJCW5leHRfZGV2X29iamVjdCA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKQorCQkgICAgZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QoKHUzMikgaGRldl9vYmopOworCX0KKworCXJldHVybiBuZXh0X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT09IGRldl9nZXRfbXNnX21nciA9PT09PT09PQorICovCit2b2lkIGRldl9nZXRfbXNnX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHN0cnVjdCBtc2dfbWdyICoqbXNnX21hbikKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobXNnX21hbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaik7CisKKwkqbXNnX21hbiA9IGhkZXZfb2JqLT5obXNnX21ncjsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfZ2V0X25vZGVfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBOb2RlIE1hbmFnZXIgSGFuZGxlCisgKi8KK2ludCBkZXZfZ2V0X25vZGVfbWFuYWdlcihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkJc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSBoZGV2X29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShub2RlX21hbiAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQkqbm9kZV9tYW4gPSBkZXZfb2JqLT5obm9kZV9tZ3I7CisJfSBlbHNlIHsKKwkJKm5vZGVfbWFuID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKG5vZGVfbWFuICE9IE5VTEwgJiYgKm5vZGVfbWFuID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9nZXRfc3ltYm9sID09PT09PT09CisgKi8KK2ludCBkZXZfZ2V0X3N5bWJvbChzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgIGNvbnN0IGNoYXIgKnN0cl9zeW0sIHUzMiAqIHB1bF92YWx1ZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RyX3N5bSAhPSBOVUxMICYmIHB1bF92YWx1ZSAhPSBOVUxMKTsKKworCWlmIChoZGV2X29iaikgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IoaGRldl9vYmosICZjb2RfbWdyKTsKKwkJaWYgKGNvZF9tZ3IpCisJCQlzdGF0dXMgPSBjb2RfZ2V0X3N5bV92YWx1ZShjb2RfbWdyLCAoY2hhciAqKXN0cl9zeW0sCisJCQkJCQkgICBwdWxfdmFsdWUpOworCQllbHNlCisJCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2dldF9icmlkZ2VfY29udGV4dCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBCcmlkZ2UgQ29udGV4dCBoYW5kbGUsIGFzIHJldHVybmVkIGJ5IHRoZQorICogICAgICBicmlkZ2VfZGV2X2NyZWF0ZSBmeG4uCisgKi8KK2ludCBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCSAgICAgICBzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICoqcGhicmlkZ2VfY29udGV4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoYnJpZGdlX2NvbnRleHQgIT0gTlVMTCk7CisKKwlpZiAoaGRldl9vYmopIHsKKwkJKnBoYnJpZGdlX2NvbnRleHQgPSBkZXZfb2JqLT5oYnJpZGdlX2NvbnRleHQ7CisJfSBlbHNlIHsKKwkJKnBoYnJpZGdlX2NvbnRleHQgPSBOVUxMOworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCURCQ19FTlNVUkUoIXN0YXR1cyB8fCAoKHBoYnJpZGdlX2NvbnRleHQgIT0gTlVMTCkgJiYKKwkJCQkJICAgICAoKnBoYnJpZGdlX2NvbnRleHQgPT0gTlVMTCkpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRldl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudCwgYW5kIGZyZWUgcmVzb3VyY2VzIHdoZW4gcmVmZXJlbmNlIGNvdW50IGlzCisgKiAgICAgIDAuCisgKi8KK3ZvaWQgZGV2X2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlpZiAocmVmcyA9PSAwKSB7CisJCWNtbV9leGl0KCk7CisJCWRtbV9leGl0KCk7CisJfQorCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGRldl9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBERVYncyBwcml2YXRlIHN0YXRlLCBrZWVwaW5nIGEgcmVmZXJlbmNlIGNvdW50IG9uIGVhY2ggY2FsbC4KKyAqLworYm9vbCBkZXZfaW5pdCh2b2lkKQoreworCWJvb2wgY21tX3JldCwgZG1tX3JldCwgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmVmcyA9PSAwKSB7CisJCWNtbV9yZXQgPSBjbW1faW5pdCgpOworCQlkbW1fcmV0ID0gZG1tX2luaXQoKTsKKworCQlyZXQgPSBjbW1fcmV0ICYmIGRtbV9yZXQ7CisKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjbW1fcmV0KQorCQkJCWNtbV9leGl0KCk7CisKKwkJCWlmIChkbW1fcmV0KQorCQkJCWRtbV9leGl0KCk7CisKKwkJfQorCX0KKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfbm90aWZ5X2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgYWxsIGNsaWVudHMgb2YgdGhpcyBkZXZpY2Ugb2YgYSBjaGFuZ2UgaW4gZGV2aWNlIHN0YXR1cy4KKyAqLworaW50IGRldl9ub3RpZnlfY2xpZW50cyhzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIHUzMiByZXQpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IGhkZXZfb2JqOworCXZvaWQgKnByb2Nfb2JqOworCisJZm9yIChwcm9jX29iaiA9ICh2b2lkICopbHN0X2ZpcnN0KGRldl9vYmotPnByb2NfbGlzdCk7CisJICAgICBwcm9jX29iaiAhPSBOVUxMOworCSAgICAgcHJvY19vYmogPSAodm9pZCAqKWxzdF9uZXh0KGRldl9vYmotPnByb2NfbGlzdCwKKwkJCQkJIChzdHJ1Y3QgbGlzdF9oZWFkICopcHJvY19vYmopKQorCQlwcm9jX25vdGlmeV9jbGllbnRzKHByb2Nfb2JqLCAodTMyKSByZXQpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX2RldmljZSA9PT09PT09PQorICovCitpbnQgZGV2X3JlbW92ZV9kZXZpY2Uoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBoYW5kbGUgdG8gZGV2aWNlIG9iamVjdCAqLworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqOworCisJLyogUmV0cmlldmUgdGhlIGRldmljZSBvYmplY3QgaGFuZGxlIG9yaWdpbmFseSBzdG9yZWQgd2l0aAorCSAqIHRoZSBkZXZfbm9kZTogKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X2Rldl9vYmplY3QoZGV2X25vZGVfb2JqLCAodTMyICopICZoZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogUmVtb3ZlIHRoZSBQcm9jZXNzb3IgTGlzdCAqLworCQlkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopaGRldl9vYmo7CisJCS8qIERlc3Ryb3kgdGhlIGRldmljZSBvYmplY3QuICovCisJCXN0YXR1cyA9IGRldl9kZXN0cm95X2RldmljZShoZGV2X29iaik7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X2NobmxfbWdyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2V0IHRoZSBjaGFubmVsIG1hbmFnZXIgZm9yIHRoaXMgZGV2aWNlLgorICovCitpbnQgZGV2X3NldF9jaG5sX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCQkgICAgc3RydWN0IGNobmxfbWdyICpobWdyKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRldl9vYmopCisJCWRldl9vYmotPmhjaG5sX21nciA9IGhtZ3I7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJREJDX0VOU1VSRShzdGF0dXMgfHwgKGRldl9vYmotPmhjaG5sX21nciA9PSBobWdyKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfc2V0X21zZ19tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTZXQgdGhlIG1lc3NhZ2UgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3ZvaWQgZGV2X3NldF9tc2dfbWdyKHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgc3RydWN0IG1zZ19tZ3IgKmhtZ3IpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqKTsKKworCWhkZXZfb2JqLT5obXNnX21nciA9IGhtZ3I7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X3N0YXJ0X2RldmljZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemVzIHRoZSBuZXcgZGV2aWNlIHdpdGggdGhlIEJSSURHRSBlbnZpcm9ubWVudC4KKyAqLworaW50IGRldl9zdGFydF9kZXZpY2Uoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsJLyogaGFuZGxlIHRvICdCcmlkZ2UgRGV2aWNlICovCisJLyogQnJpZGdlIGRyaXZlciBmaWxlbmFtZSAqLworCWNoYXIgYnJpZGdlX2ZpbGVfbmFtZVtDRkdfTUFYU0VBUkNIUEFUSExFTl0gPSAiVU1BIjsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaiA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwkvKiBHaXZlbiBhbGwgcmVzb3VyY2VzLCBjcmVhdGUgYSBkZXZpY2Ugb2JqZWN0LiAqLworCXN0YXR1cyA9IGRldl9jcmVhdGVfZGV2aWNlKCZoZGV2X29iaiwgYnJpZGdlX2ZpbGVfbmFtZSwKKwkJCQkgICBkZXZfbm9kZV9vYmopOworCWlmICghc3RhdHVzKSB7CisJCS8qIFN0b3JlIGF3YXkgdGhlIGhkZXZfb2JqIHdpdGggdGhlIERFVk5PREUgKi8KKwkJc3RhdHVzID0gY2ZnX3NldF9kZXZfb2JqZWN0KGRldl9ub2RlX29iaiwgKHUzMikgaGRldl9vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKiBDbGVhbiB1cCAqLworCQkJZGV2X2Rlc3Ryb3lfZGV2aWNlKGhkZXZfb2JqKTsKKwkJCWhkZXZfb2JqID0gTlVMTDsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBDcmVhdGUgdGhlIE1hbmFnZXIgT2JqZWN0ICovCisJCXN0YXR1cyA9IG1ncl9jcmVhdGUoJmhtZ3Jfb2JqLCBkZXZfbm9kZV9vYmopOworCX0KKwlpZiAoc3RhdHVzKSB7CisJCWlmIChoZGV2X29iaikKKwkJCWRldl9kZXN0cm95X2RldmljZShoZGV2X29iaik7CisKKwkJLyogRW5zdXJlIHRoZSBkZXZpY2UgZXh0ZW5zaW9uIGlzIE5VTEwgKi8KKwkJY2ZnX3NldF9kZXZfb2JqZWN0KGRldl9ub2RlX29iaiwgMEwpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnhuX25vdF9pbXBsZW1lbnRlZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFRha2VzIHRoZSBwbGFjZSBvZiBhIEJyaWRnZSBOdWxsIEZ1bmN0aW9uLgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIE11bHRpcGxlLCBvcHRpb25hbC4KKyAqICBSZXR1cm5zOgorICogICAgICAtRU5PU1lTOiAgIEFsd2F5cy4KKyAqLworc3RhdGljIGludCBmeG5fbm90X2ltcGxlbWVudGVkKGludCBhcmcsIC4uLikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqICA9PT09PT09PSBpbml0X2NvZF9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBDT0QgbWFuYWdlciBmb3IgdGhpcyBkZXZpY2UuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgZGV2X29iajogICAgICAgICAgICAgUG9pbnRlciB0byBkZXZpY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfY3JlYXRlX2RldmljZSgpCisgKiAgUmV0dXJuczoKKyAqICAgICAgMDogICAgICAgICAgICAgICAgU3VjY2Vzcy4KKyAqICAgICAgLUVGQVVMVDogICAgICAgICAgICBJbnZhbGlkIGhkZXZfb2JqLgorICogIFJlcXVpcmVzOgorICogICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBieSBkZXZfY3JlYXRlX2RldmljZSgpIGZvciBhIGdpdmVuIERldk9iamVjdC4KKyAqICBFbnN1cmVzOgorICovCitzdGF0aWMgaW50IGluaXRfY29kX21ncihzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyICpzel9kdW1teV9maWxlID0gImR1bW15IjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSghZGV2X29iaiB8fCAoZGV2X29iai0+Y29kX21nciA9PSBOVUxMKSk7CisKKwlzdGF0dXMgPSBjb2RfY3JlYXRlKCZkZXZfb2JqLT5jb2RfbWdyLCBzel9kdW1teV9maWxlLCBOVUxMKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGV2X2luc2VydF9wcm9jX29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluc2VydCBhIFByb2NPYmplY3QgaW50byB0aGUgbGlzdCBtYWludGFpbmVkIGJ5IERFVi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqOiAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICAqICAgICBhbHJlYWR5X2F0dGFjaGVkOiAgUHRyIHRvIHJldHVybiB0aGUgYm9vbAorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICBJZiBzdWNjZXNzZnVsLgorICogIFJlcXVpcmVzOgorICogICAgICBMaXN0IEV4aXN0cworICogICAgICBoZGV2X29iaiBpcyBWYWxpZCBoYW5kbGUKKyAqICAgICAgREVWIEluaXRpYWxpemVkCisgKiAgICAgIGFscmVhZHlfYXR0YWNoZWQgIT0gTlVMTAorICogICAgICBwcm9jX29iaiAhPSAwCisgKiAgRW5zdXJlczoKKyAqICAgICAgMCBhbmQgTGlzdCBpcyBub3QgRW1wdHkuCisgKi8KK2ludCBkZXZfaW5zZXJ0X3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQkgIHUzMiBwcm9jX29iaiwgYm9vbCAqYWxyZWFkeV9hdHRhY2hlZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWhkZXZfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRldl9vYmopOworCURCQ19SRVFVSVJFKHByb2Nfb2JqICE9IDApOworCURCQ19SRVFVSVJFKGRldl9vYmotPnByb2NfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShhbHJlYWR5X2F0dGFjaGVkICE9IE5VTEwpOworCWlmICghTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpCisJCSphbHJlYWR5X2F0dGFjaGVkID0gdHJ1ZTsKKworCS8qIEFkZCBEZXZPYmplY3QgdG8gdGFpbC4gKi8KKwlsc3RfcHV0X3RhaWwoZGV2X29iai0+cHJvY19saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKXByb2Nfb2JqKTsKKworCURCQ19FTlNVUkUoIXN0YXR1cyAmJiAhTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VhcmNoIGZvciBhbmQgcmVtb3ZlIGEgUHJvYyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBtYWludGFpbmVkCisgKiAgICAgIGJ5IHRoZSBERVYKKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBwX3Byb2Nfb2JqZWN0OiAgICAgICAgUHRyIHRvIFByb2NPYmplY3QgdG8gaW5zZXJ0LgorICogICAgICBkZXZfb2JqICAgICAgICAgIFB0ciB0byBEZXYgT2JqZWN0IHdoZXJlIHRoZSBsaXN0IGlzLgorICogIFJldHVybnM6CisgKiAgICAgIDA6ICAgICAgICAgICAgSWYgc3VjY2Vzc2Z1bC4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgTGlzdCBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eQorICogICAgICBwcm9jX29iaiAhPSAwCisgKiAgICAgIGhkZXZfb2JqIGlzIGEgdmFsaWQgRGV2IGhhbmRsZS4KKyAqICBFbnN1cmVzOgorICogIERldGFpbHM6CisgKiAgICAgIExpc3Qgd2lsbCBiZSBkZWxldGVkIHdoZW4gdGhlIERFViBpcyBkZXN0cm95ZWQuCisgKi8KK2ludCBkZXZfcmVtb3ZlX3Byb2Nfb2JqZWN0KHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwgdTMyIHByb2Nfb2JqKQoreworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyX2VsZW07CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKiloZGV2X29iajsKKworCURCQ19SRVFVSVJFKGRldl9vYmopOworCURCQ19SRVFVSVJFKHByb2Nfb2JqICE9IDApOworCURCQ19SRVFVSVJFKGRldl9vYmotPnByb2NfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSghTFNUX0lTX0VNUFRZKGRldl9vYmotPnByb2NfbGlzdCkpOworCisJLyogU2VhcmNoIGxpc3QgZm9yIGRldl9vYmo6ICovCisJZm9yIChjdXJfZWxlbSA9IGxzdF9maXJzdChkZXZfb2JqLT5wcm9jX2xpc3QpOyBjdXJfZWxlbSAhPSBOVUxMOworCSAgICAgY3VyX2VsZW0gPSBsc3RfbmV4dChkZXZfb2JqLT5wcm9jX2xpc3QsIGN1cl9lbGVtKSkgeworCQkvKiBJZiBmb3VuZCwgcmVtb3ZlIGl0LiAqLworCQlpZiAoKHUzMikgY3VyX2VsZW0gPT0gcHJvY19vYmopIHsKKwkJCWxzdF9yZW1vdmVfZWxlbShkZXZfb2JqLT5wcm9jX2xpc3QsIGN1cl9lbGVtKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBkZXZfZ2V0X2Rldl90eXBlKHN0cnVjdCBkZXZfb2JqZWN0ICpkZXZpY2Vfb2JqLCB1OCAqZGV2X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkZXZpY2Vfb2JqOworCisJKmRldl90eXBlID0gZGV2X29iai0+ZGV2X3R5cGU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0b3JlX2ludGVyZmFjZV9meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ29weSB0aGUgQnJpZGdlJ3MgaW50ZXJmYWNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBkZXZpY2Ugb2JqZWN0LAorICogICAgICBlbnN1cmluZyB0aGF0IGZ4bl9ub3RfaW1wbGVtZW50ZWQoKSBpcyBzZXQgZm9yOgorICoKKyAqICAgICAgMS4gQWxsIEJyaWRnZSBmdW5jdGlvbiBwb2ludGVycyB3aGljaCBhcmUgTlVMTDsgYW5kCisgKiAgICAgIDIuIEFsbCBmdW5jdGlvbiBzbG90cyBpbiB0aGUgc3RydWN0IGRldl9vYmplY3Qgc3RydWN0dXJlIHdoaWNoIGhhdmUgbm8KKyAqICAgICAgICAgY29ycmVzcG9uZGluZyBzbG90cyBpbiB0aGUgdGhlIEJyaWRnZSdzIGludGVyZmFjZSwgYmVjYXVzZSB0aGUgQnJpZGdlCisgKiAgICAgICAgIGlzIG9mIGFuICpvbGRlciogdmVyc2lvbi4KKyAqICBQYXJhbWV0ZXJzOgorICogICAgICBpbnRmX2Z4bnM6ICAgICAgSW50ZXJmYWNlIGZ4biBTdHJ1Y3R1cmUgb2YgdGhlIEJyaWRnZSdzIERldiBPYmplY3QuCisgKiAgICAgIGRydl9meG5zOiAgICAgIEludGVyZmFjZSBGeG5zIG9mZmVyZWQgYnkgdGhlIEJyaWRnZSBkdXJpbmcgREVWX0NyZWF0ZSgpLgorICogIFJldHVybnM6CisgKiAgUmVxdWlyZXM6CisgKiAgICAgIElucHV0IHBvaW50ZXJzIGFyZSB2YWxpZC4KKyAqICAgICAgQnJpZGdlIGRyaXZlciBpcyAqbm90KiB3cml0dGVuIGZvciBhIG5ld2VyIERTUCBBUEkuCisgKiAgRW5zdXJlczoKKyAqICAgICAgQWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGluIHRoZSBkZXYgb2JqZWN0J3MgZnhuIGludGVyZmFjZSBhcmUgbm90IE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIHN0b3JlX2ludGVyZmFjZV9meG5zKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqZHJ2X2Z4bnMsCisJCQkJIHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zKQoreworCXUzMiBicmlkZ2VfdmVyc2lvbjsKKworCS8qIExvY2FsIGhlbHBlciBtYWNybzogKi8KKyNkZWZpbmUgIFNUT1JFX0ZYTihjYXN0LCBwZm4pIFwKKyAgICAoaW50Zl9meG5zLT5wZm4gPSAoKGRydl9meG5zLT5wZm4gIT0gTlVMTCkgPyBkcnZfZnhucy0+cGZuIDogXAorICAgIChjYXN0KWZ4bl9ub3RfaW1wbGVtZW50ZWQpKQorCisJREJDX1JFUVVJUkUoaW50Zl9meG5zICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGRydl9meG5zICE9IE5VTEwpOworCURCQ19SRVFVSVJFKE1BS0VWRVJTSU9OKGRydl9meG5zLT5icmRfYXBpX21ham9yX3ZlcnNpb24sCisJCQlkcnZfZnhucy0+YnJkX2FwaV9taW5vcl92ZXJzaW9uKSA8PSBCUkRfQVBJX1ZFUlNJT04pOworCWJyaWRnZV92ZXJzaW9uID0gTUFLRVZFUlNJT04oZHJ2X2Z4bnMtPmJyZF9hcGlfbWFqb3JfdmVyc2lvbiwKKwkJCQkgICAgIGRydl9meG5zLT5icmRfYXBpX21pbm9yX3ZlcnNpb24pOworCWludGZfZnhucy0+YnJkX2FwaV9tYWpvcl92ZXJzaW9uID0gZHJ2X2Z4bnMtPmJyZF9hcGlfbWFqb3JfdmVyc2lvbjsKKwlpbnRmX2Z4bnMtPmJyZF9hcGlfbWlub3JfdmVyc2lvbiA9IGRydl9meG5zLT5icmRfYXBpX21pbm9yX3ZlcnNpb247CisJLyogSW5zdGFsbCBmdW5jdGlvbnMgdXAgdG8gRFNQIEFQSSB2ZXJzaW9uIC44MCAoZmlyc3QgYWxwaGEpOiAqLworCWlmIChicmlkZ2VfdmVyc2lvbiA+IDApIHsKKwkJU1RPUkVfRlhOKGZ4bl9kZXZfY3JlYXRlLCBwZm5fZGV2X2NyZWF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fZGV2X2Rlc3Ryb3ksIHBmbl9kZXZfZGVzdHJveSk7CisJCVNUT1JFX0ZYTihmeG5fZGV2X2N0cmwsIHBmbl9kZXZfY250cmwpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tb25pdG9yLCBwZm5fYnJkX21vbml0b3IpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9zdGFydCwgcGZuX2JyZF9zdGFydCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3N0b3AsIHBmbl9icmRfc3RvcCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3N0YXR1cywgcGZuX2JyZF9zdGF0dXMpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9yZWFkLCBwZm5fYnJkX3JlYWQpOworCQlTVE9SRV9GWE4oZnhuX2JyZF93cml0ZSwgcGZuX2JyZF93cml0ZSk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX3NldHN0YXRlLCBwZm5fYnJkX3NldF9zdGF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX21lbWNvcHksIHBmbl9icmRfbWVtX2NvcHkpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tZW13cml0ZSwgcGZuX2JyZF9tZW1fd3JpdGUpOworCQlTVE9SRV9GWE4oZnhuX2JyZF9tZW1tYXAsIHBmbl9icmRfbWVtX21hcCk7CisJCVNUT1JFX0ZYTihmeG5fYnJkX21lbXVubWFwLCBwZm5fYnJkX21lbV91bl9tYXApOworCQlTVE9SRV9GWE4oZnhuX2NobmxfY3JlYXRlLCBwZm5fY2hubF9jcmVhdGUpOworCQlTVE9SRV9GWE4oZnhuX2NobmxfZGVzdHJveSwgcGZuX2NobmxfZGVzdHJveSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9vcGVuLCBwZm5fY2hubF9vcGVuKTsKKwkJU1RPUkVfRlhOKGZ4bl9jaG5sX2Nsb3NlLCBwZm5fY2hubF9jbG9zZSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9hZGRpb3JlcSwgcGZuX2NobmxfYWRkX2lvX3JlcSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpb2MsIHBmbl9jaG5sX2dldF9pb2MpOworCQlTVE9SRV9GWE4oZnhuX2NobmxfY2FuY2VsaW8sIHBmbl9jaG5sX2NhbmNlbF9pbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9mbHVzaGlvLCBwZm5fY2hubF9mbHVzaF9pbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRpbmZvLCBwZm5fY2hubF9nZXRfaW5mbyk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9nZXRtZ3JpbmZvLCBwZm5fY2hubF9nZXRfbWdyX2luZm8pOworCQlTVE9SRV9GWE4oZnhuX2NobmxfaWRsZSwgcGZuX2NobmxfaWRsZSk7CisJCVNUT1JFX0ZYTihmeG5fY2hubF9yZWdpc3Rlcm5vdGlmeSwgcGZuX2NobmxfcmVnaXN0ZXJfbm90aWZ5KTsKKwkJU1RPUkVfRlhOKGZ4bl9pb19jcmVhdGUsIHBmbl9pb19jcmVhdGUpOworCQlTVE9SRV9GWE4oZnhuX2lvX2Rlc3Ryb3ksIHBmbl9pb19kZXN0cm95KTsKKwkJU1RPUkVfRlhOKGZ4bl9pb19vbmxvYWRlZCwgcGZuX2lvX29uX2xvYWRlZCk7CisJCVNUT1JFX0ZYTihmeG5faW9fZ2V0cHJvY2xvYWQsIHBmbl9pb19nZXRfcHJvY19sb2FkKTsKKwkJU1RPUkVfRlhOKGZ4bl9tc2dfY3JlYXRlLCBwZm5fbXNnX2NyZWF0ZSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX2NyZWF0ZXF1ZXVlLCBwZm5fbXNnX2NyZWF0ZV9xdWV1ZSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX2RlbGV0ZSwgcGZuX21zZ19kZWxldGUpOworCQlTVE9SRV9GWE4oZnhuX21zZ19kZWxldGVxdWV1ZSwgcGZuX21zZ19kZWxldGVfcXVldWUpOworCQlTVE9SRV9GWE4oZnhuX21zZ19nZXQsIHBmbl9tc2dfZ2V0KTsKKwkJU1RPUkVfRlhOKGZ4bl9tc2dfcHV0LCBwZm5fbXNnX3B1dCk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX3JlZ2lzdGVybm90aWZ5LCBwZm5fbXNnX3JlZ2lzdGVyX25vdGlmeSk7CisJCVNUT1JFX0ZYTihmeG5fbXNnX3NldHF1ZXVlaWQsIHBmbl9tc2dfc2V0X3F1ZXVlX2lkKTsKKwl9CisJLyogQWRkIGNvZGUgZm9yIGFueSBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbiBuZXdlckJyaWRnZSB2ZXJzaW9ucyBoZXJlICovCisJLyogRW5zdXJlIHBvc3Rjb25kaXRpb246ICovCisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9kZXZfY3JlYXRlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fZGV2X2Rlc3Ryb3kgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9icmRfbW9uaXRvciAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9zdGFydCAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9zdG9wICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cyAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2JyZF9yZWFkICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fYnJkX3dyaXRlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9jcmVhdGUgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2Rlc3Ryb3kgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX29wZW4gIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2Nsb3NlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9hZGRfaW9fcmVxICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW9jICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9jYW5jZWxfaW8gIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9jaG5sX2ZsdXNoX2lvICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW5mbyAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX2NobmxfZ2V0X21ncl9pbmZvICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9pZGxlICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5fY2hubF9yZWdpc3Rlcl9ub3RpZnkgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9pb19jcmVhdGUgIT0gTlVMTCk7CisJREJDX0VOU1VSRShpbnRmX2Z4bnMtPnBmbl9pb19kZXN0cm95ICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5faW9fb25fbG9hZGVkICE9IE5VTEwpOworCURCQ19FTlNVUkUoaW50Zl9meG5zLT5wZm5faW9fZ2V0X3Byb2NfbG9hZCAhPSBOVUxMKTsKKwlEQkNfRU5TVVJFKGludGZfZnhucy0+cGZuX21zZ19zZXRfcXVldWVfaWQgIT0gTlVMTCk7CisKKyN1bmRlZiAgU1RPUkVfRlhOCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RtbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODUyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kbW0uYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIGRtbS5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoZSBEeW5hbWljIE1lbW9yeSBNYW5hZ2VyIChETU0pIG1vZHVsZSBtYW5hZ2VzIHRoZSBEU1AgVmlydHVhbCBhZGRyZXNzCisgKiBzcGFjZSB0aGF0IGNhbiBiZSBkaXJlY3RseSBtYXBwZWQgdG8gYW55IE1QVSBidWZmZXIgb3IgbWVtb3J5IHJlZ2lvbgorICoKKyAqIE5vdGVzOgorICogICBSZWdpb246IEdlbmVyaWMgbWVtb3J5IGVudGl0aXkgaGF2aW5nIGEgc3RhcnQgYWRkcmVzcyBhbmQgYSBzaXplCisgKiAgIENodW5rOiAgUmVzZXJ2ZWQgcmVnaW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBETU1fQUREUl9WSVJUVUFMKGEpIFwKKwkoKChzdHJ1Y3QgbWFwX3BhZ2UgKikoYSkgLSB2aXJ0dWFsX21hcHBpbmdfdGFibGUpICogUEdfU0laRTRLICtcCisJZHluX21lbV9tYXBfYmVnKQorI2RlZmluZSBETU1fQUREUl9UT19JTkRFWChhKSAoKChhKSAtIGR5bl9tZW1fbWFwX2JlZykgLyBQR19TSVpFNEspCisKKy8qIERNTSBNZ3IgKi8KK3N0cnVjdCBkbW1fb2JqZWN0IHsKKwkvKiBEbW0gTG9jayBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgbWVtIG1hbmFnZXIgZm9yCisJICogbXVsdGktdGhyZWFkcy4gKi8KKwlzcGlubG9ja190IGRtbV9sb2NrOwkvKiBMb2NrIHRvIGFjY2VzcyBkbW0gbWdyICovCit9OworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOwkJLyogbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLworc3RydWN0IG1hcF9wYWdlIHsKKwl1MzIgcmVnaW9uX3NpemU6MTU7CisJdTMyIG1hcHBlZF9zaXplOjE1OworCXUzMiByZXNlcnZlZDoxOworCXUzMiBtYXBwZWQ6MTsKK307CisKKy8qICBDcmVhdGUgdGhlIGZyZWUgbGlzdCAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqdmlydHVhbF9tYXBwaW5nX3RhYmxlOworc3RhdGljIHUzMiBmcmVlX3JlZ2lvbjsJCS8qIFRoZSBpbmRleCBvZiBmcmVlIHJlZ2lvbiAqLworc3RhdGljIHUzMiBmcmVlX3NpemU7CitzdGF0aWMgdTMyIGR5bl9tZW1fbWFwX2JlZzsJLyogVGhlIEJlZ2lubmluZyBvZiBkeW5hbWljIG1lbW9yeSBtYXBwaW5nICovCitzdGF0aWMgdTMyIHRhYmxlX3NpemU7CQkvKiBUaGUgc2l6ZSBvZiB2aXJ0IGFuZCBwaHlzIHBhZ2VzIHRhYmxlcyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqZ2V0X3JlZ2lvbih1MzIgYWRkcik7CitzdGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfZnJlZV9yZWdpb24odTMyIGxlbik7CitzdGF0aWMgc3RydWN0IG1hcF9wYWdlICpnZXRfbWFwcGVkX3JlZ2lvbih1MzIgYWRkcnMpOworCisvKiAgPT09PT09PT0gZG1tX2NyZWF0ZV90YWJsZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgdGFibGUgdG8gaG9sZCB0aGUgaW5mb3JtYXRpb24gb2YgcGh5c2ljYWwgYWRkcmVzcworICogICAgICB0aGUgYnVmZmVyIHBhZ2VzIHRoYXQgaXMgcGFzc2VkIGJ5IHRoZSB1c2VyLCBhbmQgdGhlIHRhYmxlCisgKiAgICAgIHRvIGhvbGQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSB0aGF0IGlzIHJlc2VydmVkCisgKiAgICAgIGZvciBEU1AuCisgKi8KK2ludCBkbW1fY3JlYXRlX3RhYmxlcyhzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21nciwgdTMyIGFkZHIsIHUzMiBzaXplKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGRtbV9kZWxldGVfdGFibGVzKGRtbV9vYmopOworCWlmICghc3RhdHVzKSB7CisJCWR5bl9tZW1fbWFwX2JlZyA9IGFkZHI7CisJCXRhYmxlX3NpemUgPSBQR19BTElHTl9ISUdIKHNpemUsIFBHX1NJWkU0SykgLyBQR19TSVpFNEs7CisJCS8qICBDcmVhdGUgdGhlIGZyZWUgbGlzdCAqLworCQl2aXJ0dWFsX21hcHBpbmdfdGFibGUgPSBfX3ZtYWxsb2ModGFibGVfc2l6ZSAqCisJCQkJc2l6ZW9mKHN0cnVjdCBtYXBfcGFnZSksIEdGUF9LRVJORUwgfAorCQkJCV9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CisJCWlmICh2aXJ0dWFsX21hcHBpbmdfdGFibGUgPT0gTlVMTCkKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCWVsc2UgeworCQkJLyogT24gc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLAorCQkJICogYWxsIGVudHJpZXMgYXJlIHplcm8gKCdmcmVlJykgKi8KKwkJCWZyZWVfcmVnaW9uID0gMDsKKwkJCWZyZWVfc2l6ZSA9IHRhYmxlX3NpemUgKiBQR19TSVpFNEs7CisJCQl2aXJ0dWFsX21hcHBpbmdfdGFibGVbMF0ucmVnaW9uX3NpemUgPSB0YWJsZV9zaXplOworCQl9CisJfQorCisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogZmFpbHVyZSwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fY3JlYXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlIGEgZHluYW1pYyBtZW1vcnkgbWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBkbW1fY3JlYXRlKHN0cnVjdCBkbW1fb2JqZWN0ICoqZG1tX21hbmFnZXIsCisJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJICAgICAgY29uc3Qgc3RydWN0IGRtbV9tZ3JhdHRycyAqbWdyX2F0dHJ0cykKK3sKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRtbV9tYW5hZ2VyICE9IE5VTEwpOworCisJKmRtbV9tYW5hZ2VyID0gTlVMTDsKKwkvKiBjcmVhdGUsIHplcm8sIGFuZCB0YWcgYSBjbW0gbWdyIG9iamVjdCAqLworCWRtbV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1tX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChkbW1fb2JqICE9IE5VTEwpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJmRtbV9vYmotPmRtbV9sb2NrKTsKKwkJKmRtbV9tYW5hZ2VyID0gZG1tX29iajsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2Rlc3Ryb3kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWxlYXNlIHRoZSBjb21tdW5pY2F0aW9uIG1lbW9yeSBtYW5hZ2VyIHJlc291cmNlcy4KKyAqLworaW50IGRtbV9kZXN0cm95KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoZG1tX21ncikgeworCQlzdGF0dXMgPSBkbW1fZGVsZXRlX3RhYmxlcyhkbW1fb2JqKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlrZnJlZShkbW1fb2JqKTsKKwl9IGVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2RlbGV0ZV90YWJsZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEZWxldGUgRE1NIFRhYmxlcy4KKyAqLworaW50IGRtbV9kZWxldGVfdGFibGVzKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCS8qIERlbGV0ZSBhbGwgRE1NIHRhYmxlcyAqLworCWlmIChkbW1fbWdyKQorCQl2ZnJlZSh2aXJ0dWFsX21hcHBpbmdfdGFibGUpOworCWVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRtbV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgbW9kdWxlOyBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudAorICogICAgICByZWFjaGVzIDAuCisgKi8KK3ZvaWQgZG1tX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2dldF9oYW5kbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm4gdGhlIGR5bmFtaWMgbWVtb3J5IG1hbmFnZXIgb2JqZWN0IGZvciB0aGlzIGRldmljZS4KKyAqICAgICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGZyb20gdGhlIGNsaWVudCBwcm9jZXNzLgorICovCitpbnQgZG1tX2dldF9oYW5kbGUodm9pZCAqaHByb2Nlc3Nvciwgc3RydWN0IGRtbV9vYmplY3QgKipkbW1fbWFuYWdlcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZG1tX21hbmFnZXIgIT0gTlVMTCk7CisJaWYgKGhwcm9jZXNzb3IgIT0gTlVMTCkKKwkJc3RhdHVzID0gcHJvY19nZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOworCWVsc2UKKwkJaGRldl9vYmogPSBkZXZfZ2V0X2ZpcnN0KCk7CS8qIGRlZmF1bHQgKi8KKworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2RtbV9tZ3IoaGRldl9vYmosIGRtbV9tYW5hZ2VyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBwcml2YXRlIHN0YXRlIG9mIERNTSBtb2R1bGUuCisgKi8KK2Jvb2wgZG1tX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwl2aXJ0dWFsX21hcHBpbmdfdGFibGUgPSBOVUxMOworCXRhYmxlX3NpemUgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fbWFwX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFkZCBhIG1hcHBpbmcgYmxvY2sgdG8gdGhlIHJlc2VydmVkIGNodW5rLiBETU0gYXNzdW1lcyB0aGF0IHRoaXMgYmxvY2sKKyAqICB3aWxsIGJlIG1hcHBlZCBpbiB0aGUgRFNQL0lWQSdzIGFkZHJlc3Mgc3BhY2UuIERNTSByZXR1cm5zIGFuIGVycm9yIGlmIGEKKyAqICBtYXBwaW5nIG92ZXJsYXBzIGFub3RoZXIgb25lLiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgaW5mbyB0aGF0IHdpbGwgYmUKKyAqICByZXF1aXJlZCBsYXRlciB3aGlsZSB1bm1hcHBpbmcgdGhlIGJsb2NrLgorICovCitpbnQgZG1tX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IChzdHJ1Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7CisJc3RydWN0IG1hcF9wYWdlICpjaHVuazsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCS8qIEZpbmQgdGhlIFJlc2VydmVkIG1lbW9yeSBjaHVuayBjb250YWluaW5nIHRoZSBEU1AgYmxvY2sgdG8KKwkgKiBiZSBtYXBwZWQgKi8KKwljaHVuayA9IChzdHJ1Y3QgbWFwX3BhZ2UgKilnZXRfcmVnaW9uKGFkZHIpOworCWlmIChjaHVuayAhPSBOVUxMKSB7CisJCS8qIE1hcmsgdGhlIHJlZ2lvbiAnbWFwcGVkJywgbGVhdmUgdGhlICdyZXNlcnZlZCcgaW5mbyBhcy1pcyAqLworCQljaHVuay0+bWFwcGVkID0gdHJ1ZTsKKwkJY2h1bmstPm1hcHBlZF9zaXplID0gKHNpemUgLyBQR19TSVpFNEspOworCX0gZWxzZQorCQlzdGF0dXMgPSAtRU5PRU5UOworCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIGRtbV9tZ3IgJXAsIGFkZHIgJXgsIHNpemUgJXhcblx0c3RhdHVzICV4LCAiCisJCSJjaHVuayAlcCIsIF9fZnVuY19fLCBkbW1fbWdyLCBhZGRyLCBzaXplLCBzdGF0dXMsIGNodW5rKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZG1tX3Jlc2VydmVfbWVtb3J5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVzZXJ2ZSBhIGNodW5rIG9mIHZpcnR1YWxseSBjb250aWd1b3VzIERTUC9JVkEgYWRkcmVzcyBzcGFjZS4KKyAqLworaW50IGRtbV9yZXNlcnZlX21lbW9yeShzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21nciwgdTMyIHNpemUsCisJCQkgICAgICB1MzIgKnByc3ZfYWRkcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX29iaiA9IChzdHJ1Y3QgZG1tX29iamVjdCAqKWRtbV9tZ3I7CisJc3RydWN0IG1hcF9wYWdlICpub2RlOworCXUzMiByc3ZfYWRkciA9IDA7CisJdTMyIHJzdl9zaXplID0gMDsKKworCXNwaW5fbG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCisJLyogVHJ5IHRvIGdldCBhIERTUCBjaHVuayBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KKwlub2RlID0gZ2V0X2ZyZWVfcmVnaW9uKHNpemUpOworCWlmIChub2RlICE9IE5VTEwpIHsKKwkJLyogIERTUCBjaHVuayBvZiBnaXZlbiBzaXplIGlzIGF2YWlsYWJsZS4gKi8KKwkJcnN2X2FkZHIgPSBETU1fQUREUl9WSVJUVUFMKG5vZGUpOworCQkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBlbnRyaWVzIHRvIHVzZSAqLworCQlyc3Zfc2l6ZSA9IHNpemUgLyBQR19TSVpFNEs7CisJCWlmIChyc3Zfc2l6ZSA8IG5vZGUtPnJlZ2lvbl9zaXplKSB7CisJCQkvKiBNYXJrIHJlbWFpbmRlciBvZiBmcmVlIHJlZ2lvbiAqLworCQkJbm9kZVtyc3Zfc2l6ZV0ubWFwcGVkID0gZmFsc2U7CisJCQlub2RlW3Jzdl9zaXplXS5yZXNlcnZlZCA9IGZhbHNlOworCQkJbm9kZVtyc3Zfc2l6ZV0ucmVnaW9uX3NpemUgPQorCQkJICAgIG5vZGUtPnJlZ2lvbl9zaXplIC0gcnN2X3NpemU7CisJCQlub2RlW3Jzdl9zaXplXS5tYXBwZWRfc2l6ZSA9IDA7CisJCX0KKwkJLyogIGdldF9yZWdpb24gd2lsbCByZXR1cm4gZmlyc3QgZml0IGNodW5rLiBCdXQgd2Ugb25seSB1c2Ugd2hhdAorCQkgICBpcyByZXF1ZXN0ZWQuICovCisJCW5vZGUtPm1hcHBlZCA9IGZhbHNlOworCQlub2RlLT5yZXNlcnZlZCA9IHRydWU7CisJCW5vZGUtPnJlZ2lvbl9zaXplID0gcnN2X3NpemU7CisJCW5vZGUtPm1hcHBlZF9zaXplID0gMDsKKwkJLyogUmV0dXJuIHRoZSBjaHVuaydzIHN0YXJ0aW5nIGFkZHJlc3MgKi8KKwkJKnByc3ZfYWRkciA9IHJzdl9hZGRyOworCX0gZWxzZQorCQkvKmRTUCBjaHVuayBvZiBnaXZlbiBzaXplIGlzIG5vdCBhdmFpbGFibGUgKi8KKwkJc3RhdHVzID0gLUVOT01FTTsKKworCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzIGRtbV9tZ3IgJXAsIHNpemUgJXgsIHByc3ZfYWRkciAlcFxuXHRzdGF0dXMgJXgsICIKKwkJInJzdl9hZGRyICV4LCByc3Zfc2l6ZSAleFxuIiwgX19mdW5jX18sIGRtbV9tZ3IsIHNpemUsCisJCXByc3ZfYWRkciwgc3RhdHVzLCByc3ZfYWRkciwgcnN2X3NpemUpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fdW5fbWFwX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbW92ZSB0aGUgbWFwcGVkIGJsb2NrIGZyb20gdGhlIHJlc2VydmVkIGNodW5rLgorICovCitpbnQgZG1tX3VuX21hcF9tZW1vcnkoc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3IsIHUzMiBhZGRyLCB1MzIgKnBzaXplKQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fb2JqID0gKHN0cnVjdCBkbW1fb2JqZWN0ICopZG1tX21ncjsKKwlzdHJ1Y3QgbWFwX3BhZ2UgKmNodW5rOworCWludCBzdGF0dXMgPSAwOworCisJc3Bpbl9sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisJY2h1bmsgPSBnZXRfbWFwcGVkX3JlZ2lvbihhZGRyKTsKKwlpZiAoY2h1bmsgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT0VOVDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIFVubWFwIHRoZSByZWdpb24gKi8KKwkJKnBzaXplID0gY2h1bmstPm1hcHBlZF9zaXplICogUEdfU0laRTRLOworCQljaHVuay0+bWFwcGVkID0gZmFsc2U7CisJCWNodW5rLT5tYXBwZWRfc2l6ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrKCZkbW1fb2JqLT5kbW1fbG9jayk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBkbW1fbWdyICVwLCBhZGRyICV4LCBwc2l6ZSAlcFxuXHRzdGF0dXMgJXgsICIKKwkJImNodW5rICVwXG4iLCBfX2Z1bmNfXywgZG1tX21nciwgYWRkciwgcHNpemUsIHN0YXR1cywgY2h1bmspOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlIGEgY2h1bmsgb2YgcmVzZXJ2ZWQgRFNQL0lWQSBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgZG1tX3VuX3Jlc2VydmVfbWVtb3J5KHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyLCB1MzIgcnN2X2FkZHIpCit7CisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9vYmogPSAoc3RydWN0IGRtbV9vYmplY3QgKilkbW1fbWdyOworCXN0cnVjdCBtYXBfcGFnZSAqY2h1bms7CisJdTMyIGk7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGNodW5rX3NpemU7CisKKwlzcGluX2xvY2soJmRtbV9vYmotPmRtbV9sb2NrKTsKKworCS8qIEZpbmQgdGhlIGNodW5rIGNvbnRhaW5pbmcgdGhlIHJlc2VydmVkIGFkZHJlc3MgKi8KKwljaHVuayA9IGdldF9tYXBwZWRfcmVnaW9uKHJzdl9hZGRyKTsKKwlpZiAoY2h1bmsgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT0VOVDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEZyZWUgYWxsIHRoZSBtYXBwZWQgcGFnZXMgZm9yIHRoaXMgcmVzZXJ2ZWQgcmVnaW9uICovCisJCWkgPSAwOworCQl3aGlsZSAoaSA8IGNodW5rLT5yZWdpb25fc2l6ZSkgeworCQkJaWYgKGNodW5rW2ldLm1hcHBlZCkgeworCQkJCS8qIFJlbW92ZSBtYXBwaW5nIGZyb20gdGhlIHBhZ2UgdGFibGVzLiAqLworCQkJCWNodW5rX3NpemUgPSBjaHVua1tpXS5tYXBwZWRfc2l6ZTsKKwkJCQkvKiBDbGVhciB0aGUgbWFwcGluZyBmbGFncyAqLworCQkJCWNodW5rW2ldLm1hcHBlZCA9IGZhbHNlOworCQkJCWNodW5rW2ldLm1hcHBlZF9zaXplID0gMDsKKwkJCQlpICs9IGNodW5rX3NpemU7CisJCQl9IGVsc2UKKwkJCQlpKys7CisJCX0KKwkJLyogQ2xlYXIgdGhlIGZsYWdzIChtYXJrIHRoZSByZWdpb24gJ2ZyZWUnKSAqLworCQljaHVuay0+cmVzZXJ2ZWQgPSBmYWxzZTsKKwkJLyogTk9URTogV2UgZG8gTk9UIGNvYWxlc2NlIGZyZWUgcmVnaW9ucyBoZXJlLgorCQkgKiBGcmVlIHJlZ2lvbnMgYXJlIGNvYWxlc2NlZCBpbiBnZXRfcmVnaW9uKCksIGFzIGl0IHRyYXZlcnNlcworCQkgKnRoZSB3aG9sZSBtYXBwaW5nIHRhYmxlCisJCSAqLworCX0KKwlzcGluX3VubG9jaygmZG1tX29iai0+ZG1tX2xvY2spOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogZG1tX21nciAlcCwgcnN2X2FkZHIgJXhcblx0c3RhdHVzICV4IGNodW5rICVwIiwKKwkJX19mdW5jX18sIGRtbV9tZ3IsIHJzdl9hZGRyLCBzdGF0dXMsIGNodW5rKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X3JlZ2lvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHVybnMgYSByZWdpb24gY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIG1lbW9yeSByZWdpb24KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfcGFnZSAqZ2V0X3JlZ2lvbih1MzIgYWRkcikKK3sKKwlzdHJ1Y3QgbWFwX3BhZ2UgKmN1cnJfcmVnaW9uID0gTlVMTDsKKwl1MzIgaSA9IDA7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlICE9IE5VTEwpIHsKKwkJLyogZmluZCBwYWdlIG1hcHBlZCBieSB0aGlzIGFkZHJlc3MgKi8KKwkJaSA9IERNTV9BRERSX1RPX0lOREVYKGFkZHIpOworCQlpZiAoaSA8IHRhYmxlX3NpemUpCisJCQljdXJyX3JlZ2lvbiA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGk7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogY3Vycl9yZWdpb24gJXAsIGZyZWVfcmVnaW9uICVkLCBmcmVlX3NpemUgJWRcbiIsCisJCV9fZnVuY19fLCBjdXJyX3JlZ2lvbiwgZnJlZV9yZWdpb24sIGZyZWVfc2l6ZSk7CisJcmV0dXJuIGN1cnJfcmVnaW9uOworfQorCisvKgorICogID09PT09PT09IGdldF9mcmVlX3JlZ2lvbiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgUmV0dXJucyB0aGUgcmVxdWVzdGVkIGZyZWUgcmVnaW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX3BhZ2UgKmdldF9mcmVlX3JlZ2lvbih1MzIgbGVuKQoreworCXN0cnVjdCBtYXBfcGFnZSAqY3Vycl9yZWdpb24gPSBOVUxMOworCXUzMiBpID0gMDsKKwl1MzIgcmVnaW9uX3NpemUgPSAwOworCXUzMiBuZXh0X2kgPSAwOworCisJaWYgKHZpcnR1YWxfbWFwcGluZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gY3Vycl9yZWdpb247CisJaWYgKGxlbiA+IGZyZWVfc2l6ZSkgeworCQkvKiBGaW5kIHRoZSBsYXJnZXN0IGZyZWUgcmVnaW9uCisJCSAqIChjb2FsZXNjZSBkdXJpbmcgdGhlIHRyYXZlcnNhbCkgKi8KKwkJd2hpbGUgKGkgPCB0YWJsZV9zaXplKSB7CisJCQlyZWdpb25fc2l6ZSA9IHZpcnR1YWxfbWFwcGluZ190YWJsZVtpXS5yZWdpb25fc2l6ZTsKKwkJCW5leHRfaSA9IGkgKyByZWdpb25fc2l6ZTsKKwkJCWlmICh2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVzZXJ2ZWQgPT0gZmFsc2UpIHsKKwkJCQkvKiBDb2FsZXNjZSwgaWYgcG9zc2libGUgKi8KKwkJCQlpZiAobmV4dF9pIDwgdGFibGVfc2l6ZSAmJgorCQkJCSAgICB2aXJ0dWFsX21hcHBpbmdfdGFibGVbbmV4dF9pXS5yZXNlcnZlZAorCQkJCSAgICA9PSBmYWxzZSkgeworCQkJCQl2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVnaW9uX3NpemUgKz0KKwkJCQkJICAgIHZpcnR1YWxfbWFwcGluZ190YWJsZQorCQkJCQkgICAgW25leHRfaV0ucmVnaW9uX3NpemU7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlyZWdpb25fc2l6ZSAqPSBQR19TSVpFNEs7CisJCQkJaWYgKHJlZ2lvbl9zaXplID4gZnJlZV9zaXplKSB7CisJCQkJCWZyZWVfcmVnaW9uID0gaTsKKwkJCQkJZnJlZV9zaXplID0gcmVnaW9uX3NpemU7CisJCQkJfQorCQkJfQorCQkJaSA9IG5leHRfaTsKKwkJfQorCX0KKwlpZiAobGVuIDw9IGZyZWVfc2l6ZSkgeworCQljdXJyX3JlZ2lvbiA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGZyZWVfcmVnaW9uOworCQlmcmVlX3JlZ2lvbiArPSAobGVuIC8gUEdfU0laRTRLKTsKKwkJZnJlZV9zaXplIC09IGxlbjsKKwl9CisJcmV0dXJuIGN1cnJfcmVnaW9uOworfQorCisvKgorICogID09PT09PT09IGdldF9tYXBwZWRfcmVnaW9uID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICBSZXR1cm5zIHRoZSByZXF1ZXN0ZWRtYXBwZWQgcmVnaW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX3BhZ2UgKmdldF9tYXBwZWRfcmVnaW9uKHUzMiBhZGRycykKK3sKKwl1MzIgaSA9IDA7CisJc3RydWN0IG1hcF9wYWdlICpjdXJyX3JlZ2lvbiA9IE5VTEw7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlID09IE5VTEwpCisJCXJldHVybiBjdXJyX3JlZ2lvbjsKKworCWkgPSBETU1fQUREUl9UT19JTkRFWChhZGRycyk7CisJaWYgKGkgPCB0YWJsZV9zaXplICYmICh2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ubWFwcGVkIHx8CisJCQkgICAgICAgdmlydHVhbF9tYXBwaW5nX3RhYmxlW2ldLnJlc2VydmVkKSkKKwkJY3Vycl9yZWdpb24gPSB2aXJ0dWFsX21hcHBpbmdfdGFibGUgKyBpOworCXJldHVybiBjdXJyX3JlZ2lvbjsKK30KKworI2lmZGVmIERTUF9ETU1fREVCVUcKK3UzMiBkbW1fbWVtX21hcF9kdW1wKHN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyKQoreworCXN0cnVjdCBtYXBfcGFnZSAqY3Vycl9ub2RlID0gTlVMTDsKKwl1MzIgaTsKKwl1MzIgZnJlZW1lbSA9IDA7CisJdTMyIGJpZ3NpemUgPSAwOworCisJc3Bpbl9sb2NrKCZkbW1fbWdyLT5kbW1fbG9jayk7CisKKwlpZiAodmlydHVhbF9tYXBwaW5nX3RhYmxlICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRhYmxlX3NpemU7IGkgKz0KKwkJICAgICB2aXJ0dWFsX21hcHBpbmdfdGFibGVbaV0ucmVnaW9uX3NpemUpIHsKKwkJCWN1cnJfbm9kZSA9IHZpcnR1YWxfbWFwcGluZ190YWJsZSArIGk7CisJCQlpZiAoY3Vycl9ub2RlLT5yZXNlcnZlZCkgeworCQkJCS8qcHJpbnRrKCJSRVNFUlZFRCBzaXplID0gMHgleCwgIgorCQkJCSAgICJNYXAgc2l6ZSA9IDB4JXhcbiIsCisJCQkJICAgKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspLAorCQkJCSAgIChjdXJyX25vZGUtPm1hcHBlZCA9PSBmYWxzZSkgPyAwIDoKKwkJCQkgICAoY3Vycl9ub2RlLT5tYXBwZWRfc2l6ZSAqIFBHX1NJWkU0SykpOworCQkJCSAqLworCQkJfSBlbHNlIHsKKy8qCQkJCXByaW50aygiVU5SRVNFUlZFRCBzaXplID0gMHgleFxuIiwKKwkJCQkJKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspKTsKKyAqLworCQkJCWZyZWVtZW0gKz0gKGN1cnJfbm9kZS0+cmVnaW9uX3NpemUgKiBQR19TSVpFNEspOworCQkJCWlmIChjdXJyX25vZGUtPnJlZ2lvbl9zaXplID4gYmlnc2l6ZSkKKwkJCQkJYmlnc2l6ZSA9IGN1cnJfbm9kZS0+cmVnaW9uX3NpemU7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRtbV9tZ3ItPmRtbV9sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBEU1AgVkEgRlJFRSBtZW1vcnkgPSAlZCBNYnl0ZXNcbiIsCisJICAgICAgIGZyZWVtZW0gLyAoMTAyNCAqIDEwMjQpKTsKKwlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBEU1AgVkEgVVNFRCBtZW1vcnk9ICVkIE1ieXRlcyBcbiIsCisJICAgICAgICgoKHRhYmxlX3NpemUgKiBQR19TSVpFNEspIC0gZnJlZW1lbSkpIC8gKDEwMjQgKiAxMDI0KSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRFNQIFZBIC0gQmlnZ2VzdCBGUkVFIGJsb2NrID0gJWQgTWJ5dGVzIFxuXG4iLAorCSAgICAgICAoYmlnc2l6ZSAqIFBHX1NJWkU0SyAvICgxMDI0ICogMTAyNCkpKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kc3BhcGkuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2RzcGFwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDJmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9kc3BhcGkuYwpAQCAtMCwwICsxLDE5MDYgQEAKKy8qCisgKiBkc3BhcGkuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb21tb24gRFNQIEFQSSBmdW5jdGlvbnMsIGFsc28gaW5jbHVkZXMgdGhlIHdyYXBwZXIKKyAqIGZ1bmN0aW9ucyBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIERldmljZUlPQ29udHJvbCBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zZXJ2aWNlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3IuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Jlc291cmNlY2xlYW51cC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBNQVhfVFJBQ0VCVUZMRU4gMjU1CisjZGVmaW5lIE1BWF9MT0FEQVJHUyAgICAxNgorI2RlZmluZSBNQVhfTk9ERVMgICAgICAgNjQKKyNkZWZpbmUgTUFYX1NUUkVBTVMgICAgIDE2CisjZGVmaW5lIE1BWF9CVUZTCTY0CisKKy8qIFVzZWQgdG8gZ2V0IGRzcGJyaWRnZSBpb2N0bCB0YWJsZSAqLworI2RlZmluZSBEQl9HRVRfSU9DX1RBQkxFKGNtZCkJKERCX0dFVF9NT0RVTEUoY21kKSA+PiBEQl9NT0RVTEVfU0hJRlQpCisKKy8qIERldmljZSBJT0N0bCBmdW5jdGlvbiBwb2ludGVyICovCitzdHJ1Y3QgYXBpX2NtZCB7CisJdTMyKCpmeG4pICh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpOworCXUzMiBkd19pbmRleDsKK307CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIGFwaV9jX3JlZnM7CisKKy8qCisgKiAgRnVuY3Rpb24gdGFibGVzLgorICogIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgTVVTVCBiZSB0aGUgc2FtZSBhcyB0aGUgb3JkZXIgb2YgdGhlIGNvbW1hbmQKKyAqICBudW1iZXJzIGRlZmluZWQgaW4gZHNwYXBpLWlvY3RsLmggIFRoaXMgaXMgaG93IGFuIElPQ1RMIG51bWJlciBpbiB1c2VyIG1vZGUKKyAqICB0dXJucyBpbnRvIGEgZnVuY3Rpb24gY2FsbCBpbiBrZXJuZWwgbW9kZS4KKyAqLworCisvKiBNR1Igd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBtZ3JfY21kW10gPSB7CisJe21ncndyYXBfZW51bV9ub2RlX2luZm99LAkvKiBNR1JfRU5VTU5PREVfSU5GTyAqLworCXttZ3J3cmFwX2VudW1fcHJvY19pbmZvfSwJLyogTUdSX0VOVU1QUk9DX0lORk8gKi8KKwl7bWdyd3JhcF9yZWdpc3Rlcl9vYmplY3R9LAkvKiBNR1JfUkVHSVNURVJPQkpFQ1QgKi8KKwl7bWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdH0sCS8qIE1HUl9VTlJFR0lTVEVST0JKRUNUICovCisJe21ncndyYXBfd2FpdF9mb3JfYnJpZGdlX2V2ZW50c30sCS8qIE1HUl9XQUlUICovCisJe21ncndyYXBfZ2V0X3Byb2Nlc3NfcmVzb3VyY2VzX2luZm99LAkvKiBNR1JfR0VUX1BST0NfUkVTICovCit9OworCisvKiBQUk9DIHdyYXBwZXIgZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IGFwaV9jbWQgcHJvY19jbWRbXSA9IHsKKwl7cHJvY3dyYXBfYXR0YWNofSwJLyogUFJPQ19BVFRBQ0ggKi8KKwl7cHJvY3dyYXBfY3RybH0sCS8qIFBST0NfQ1RSTCAqLworCXtwcm9jd3JhcF9kZXRhY2h9LAkvKiBQUk9DX0RFVEFDSCAqLworCXtwcm9jd3JhcF9lbnVtX25vZGVfaW5mb30sCS8qIFBST0NfRU5VTU5PREUgKi8KKwl7cHJvY3dyYXBfZW51bV9yZXNvdXJjZXN9LAkvKiBQUk9DX0VOVU1SRVNPVVJDRVMgKi8KKwl7cHJvY3dyYXBfZ2V0X3N0YXRlfSwJLyogUFJPQ19HRVRfU1RBVEUgKi8KKwl7cHJvY3dyYXBfZ2V0X3RyYWNlfSwJLyogUFJPQ19HRVRfVFJBQ0UgKi8KKwl7cHJvY3dyYXBfbG9hZH0sCS8qIFBST0NfTE9BRCAqLworCXtwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnl9LAkvKiBQUk9DX1JFR0lTVEVSTk9USUZZICovCisJe3Byb2N3cmFwX3N0YXJ0fSwJLyogUFJPQ19TVEFSVCAqLworCXtwcm9jd3JhcF9yZXNlcnZlX21lbW9yeX0sCS8qIFBST0NfUlNWTUVNICovCisJe3Byb2N3cmFwX3VuX3Jlc2VydmVfbWVtb3J5fSwJLyogUFJPQ19VTlJTVk1FTSAqLworCXtwcm9jd3JhcF9tYXB9LAkJLyogUFJPQ19NQVBNRU0gKi8KKwl7cHJvY3dyYXBfdW5fbWFwfSwJLyogUFJPQ19VTk1BUE1FTSAqLworCXtwcm9jd3JhcF9mbHVzaF9tZW1vcnl9LAkvKiBQUk9DX0ZMVVNITUVNT1JZICovCisJe3Byb2N3cmFwX3N0b3B9LAkvKiBQUk9DX1NUT1AgKi8KKwl7cHJvY3dyYXBfaW52YWxpZGF0ZV9tZW1vcnl9LAkvKiBQUk9DX0lOVkFMSURBVEVNRU1PUlkgKi8KKwl7cHJvY3dyYXBfYmVnaW5fZG1hfSwJLyogUFJPQ19CRUdJTkRNQSAqLworCXtwcm9jd3JhcF9lbmRfZG1hfSwJLyogUFJPQ19FTkRETUEgKi8KK307CisKKy8qIE5PREUgd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBub2RlX2NtZFtdID0geworCXtub2Rld3JhcF9hbGxvY2F0ZX0sCS8qIE5PREVfQUxMT0NBVEUgKi8KKwl7bm9kZXdyYXBfYWxsb2NfbXNnX2J1Zn0sCS8qIE5PREVfQUxMT0NNU0dCVUYgKi8KKwl7bm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5fSwJLyogTk9ERV9DSEFOR0VQUklPUklUWSAqLworCXtub2Rld3JhcF9jb25uZWN0fSwJLyogTk9ERV9DT05ORUNUICovCisJe25vZGV3cmFwX2NyZWF0ZX0sCS8qIE5PREVfQ1JFQVRFICovCisJe25vZGV3cmFwX2RlbGV0ZX0sCS8qIE5PREVfREVMRVRFICovCisJe25vZGV3cmFwX2ZyZWVfbXNnX2J1Zn0sCS8qIE5PREVfRlJFRU1TR0JVRiAqLworCXtub2Rld3JhcF9nZXRfYXR0cn0sCS8qIE5PREVfR0VUQVRUUiAqLworCXtub2Rld3JhcF9nZXRfbWVzc2FnZX0sCS8qIE5PREVfR0VUTUVTU0FHRSAqLworCXtub2Rld3JhcF9wYXVzZX0sCS8qIE5PREVfUEFVU0UgKi8KKwl7bm9kZXdyYXBfcHV0X21lc3NhZ2V9LAkvKiBOT0RFX1BVVE1FU1NBR0UgKi8KKwl7bm9kZXdyYXBfcmVnaXN0ZXJfbm90aWZ5fSwJLyogTk9ERV9SRUdJU1RFUk5PVElGWSAqLworCXtub2Rld3JhcF9ydW59LAkJLyogTk9ERV9SVU4gKi8KKwl7bm9kZXdyYXBfdGVybWluYXRlfSwJLyogTk9ERV9URVJNSU5BVEUgKi8KKwl7bm9kZXdyYXBfZ2V0X3V1aWRfcHJvcHN9LAkvKiBOT0RFX0dFVFVVSURQUk9QUyAqLworfTsKKworLyogU1RSTSB3cmFwcGVyIGZ1bmN0aW9ucyAqLworc3RhdGljIHN0cnVjdCBhcGlfY21kIHN0cm1fY21kW10gPSB7CisJe3N0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcn0sCS8qIFNUUk1fQUxMT0NBVEVCVUZGRVIgKi8KKwl7c3RybXdyYXBfY2xvc2V9LAkvKiBTVFJNX0NMT1NFICovCisJe3N0cm13cmFwX2ZyZWVfYnVmZmVyfSwJLyogU1RSTV9GUkVFQlVGRkVSICovCisJe3N0cm13cmFwX2dldF9ldmVudF9oYW5kbGV9LAkvKiBTVFJNX0dFVEVWRU5USEFORExFICovCisJe3N0cm13cmFwX2dldF9pbmZvfSwJLyogU1RSTV9HRVRJTkZPICovCisJe3N0cm13cmFwX2lkbGV9LAkvKiBTVFJNX0lETEUgKi8KKwl7c3RybXdyYXBfaXNzdWV9LAkvKiBTVFJNX0lTU1VFICovCisJe3N0cm13cmFwX29wZW59LAkvKiBTVFJNX09QRU4gKi8KKwl7c3RybXdyYXBfcmVjbGFpbX0sCS8qIFNUUk1fUkVDTEFJTSAqLworCXtzdHJtd3JhcF9yZWdpc3Rlcl9ub3RpZnl9LAkvKiBTVFJNX1JFR0lTVEVSTk9USUZZICovCisJe3N0cm13cmFwX3NlbGVjdH0sCS8qIFNUUk1fU0VMRUNUICovCit9OworCisvKiBDTU0gd3JhcHBlciBmdW5jdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXBpX2NtZCBjbW1fY21kW10gPSB7CisJe2NtbXdyYXBfY2FsbG9jX2J1Zn0sCS8qIENNTV9BTExPQ0JVRiAqLworCXtjbW13cmFwX2ZyZWVfYnVmfSwJLyogQ01NX0ZSRUVCVUYgKi8KKwl7Y21td3JhcF9nZXRfaGFuZGxlfSwJLyogQ01NX0dFVEhBTkRMRSAqLworCXtjbW13cmFwX2dldF9pbmZvfSwJLyogQ01NX0dFVElORk8gKi8KK307CisKKy8qIEFycmF5IHVzZWQgdG8gc3RvcmUgaW9jdGwgdGFibGUgc2l6ZXMuIEl0IGNhbiBob2xkIHVwIHRvIDggZW50cmllcyAqLworc3RhdGljIHU4IHNpemVfY21kW10gPSB7CisJQVJSQVlfU0laRShtZ3JfY21kKSwKKwlBUlJBWV9TSVpFKHByb2NfY21kKSwKKwlBUlJBWV9TSVpFKG5vZGVfY21kKSwKKwlBUlJBWV9TSVpFKHN0cm1fY21kKSwKKwlBUlJBWV9TSVpFKGNtbV9jbWQpLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9jcF9mbV91c3Iodm9pZCAqdG8sIGNvbnN0IHZvaWQgX191c2VyICogZnJvbSwKKwkJCSAgICAgIGludCAqZXJyLCB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCWlmICgqZXJyKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIWZyb20pKSB7CisJCSplcnIgPSAtRUZBVUxUOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKHRvLCBmcm9tLCBieXRlcykpKQorCQkqZXJyID0gLUVGQVVMVDsKK30KKworI2RlZmluZSBDUF9GTV9VU1IodG8sIGZyb20sIGVyciwgbikJCQkJXAorCV9jcF9mbV91c3IodG8sIGZyb20sICYoZXJyKSwgKG4pICogc2l6ZW9mKCoodG8pKSkKKworc3RhdGljIGlubGluZSB2b2lkIF9jcF90b191c3Iodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLAorCQkJICAgICAgaW50ICplcnIsIHVuc2lnbmVkIGxvbmcgYnl0ZXMpCit7CisJaWYgKCplcnIpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghdG8pKSB7CisJCSplcnIgPSAtRUZBVUxUOworCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KGNvcHlfdG9fdXNlcih0bywgZnJvbSwgYnl0ZXMpKSkKKwkJKmVyciA9IC1FRkFVTFQ7Cit9CisKKyNkZWZpbmUgQ1BfVE9fVVNSKHRvLCBmcm9tLCBlcnIsIG4pCQkJCVwKKwlfY3BfdG9fdXNyKHRvLCBmcm9tLCAmKGVyciksIChuKSAqIHNpemVvZigqKGZyb20pKSkKKworLyoKKyAqICA9PT09PT09PSBhcGlfY2FsbF9kZXZfaW9jdGwgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDYWxsIHRoZSAod3JhcHBlcikgZnVuY3Rpb24gZm9yIHRoZSBjb3JyZXNwb25kaW5nIEFQSSBJT0NUTC4KKyAqLworaW5saW5lIGludCBhcGlfY2FsbF9kZXZfaW9jdGwodTMyIGNtZCwgdW5pb24gdHJhcHBlZF9hcmdzICphcmdzLAorCQkJCSAgICAgIHUzMiAqcmVzdWx0LCB2b2lkICpwcl9jdHh0KQoreworCXUzMigqaW9jdGxfY21kKSAodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KSA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gREIpIHsKKwkJcHJfZXJyKCIlczogSW5jb21wYXRpYmxlIGRzcGJyaWRnZSBpb2N0bCBudW1iZXJcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKERCX0dFVF9JT0NfVEFCTEUoY21kKSA+IEFSUkFZX1NJWkUoc2l6ZV9jbWQpKSB7CisJCXByX2VycigiJXM6IHVuZGVmaW5lZCBpb2N0bCBtb2R1bGVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIGNtZCB0YWJsZSAqLworCWkgPSBEQl9HRVRfSU9DKGNtZCk7CisJaWYgKGkgPiBzaXplX2NtZFtEQl9HRVRfSU9DX1RBQkxFKGNtZCldKSB7CisJCXByX2VycigiJXM6IHJlcXVlc3RlZCBpb2N0bCAlZCBvdXQgb2YgYm91bmRzIGZvciB0YWJsZSAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBpLCBEQl9HRVRfSU9DX1RBQkxFKGNtZCkpOworCQlnb3RvIGVycjsKKwl9CisKKwlzd2l0Y2ggKERCX0dFVF9NT0RVTEUoY21kKSkgeworCWNhc2UgREJfTUdSOgorCQlpb2N0bF9jbWQgPSBtZ3JfY21kW2ldLmZ4bjsKKwkJYnJlYWs7CisJY2FzZSBEQl9QUk9DOgorCQlpb2N0bF9jbWQgPSBwcm9jX2NtZFtpXS5meG47CisJCWJyZWFrOworCWNhc2UgREJfTk9ERToKKwkJaW9jdGxfY21kID0gbm9kZV9jbWRbaV0uZnhuOworCQlicmVhazsKKwljYXNlIERCX1NUUk06CisJCWlvY3RsX2NtZCA9IHN0cm1fY21kW2ldLmZ4bjsKKwkJYnJlYWs7CisJY2FzZSBEQl9DTU06CisJCWlvY3RsX2NtZCA9IGNtbV9jbWRbaV0uZnhuOworCQlicmVhazsKKwl9CisKKwlpZiAoIWlvY3RsX2NtZCkgeworCQlwcl9lcnIoIiVzOiByZXF1ZXN0ZWQgaW9jdGwgbm90IGRlZmluZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfSBlbHNlIHsKKwkJKnJlc3VsdCA9ICgqaW9jdGxfY21kKSAoYXJncywgcHJfY3R4dCk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqICA9PT09PT09PSBhcGlfZXhpdCA9PT09PT09PQorICovCit2b2lkIGFwaV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUoYXBpX2NfcmVmcyA+IDApOworCWFwaV9jX3JlZnMtLTsKKworCWlmIChhcGlfY19yZWZzID09IDApIHsKKwkJLyogUmVsZWFzZSBhbGwgbW9kdWxlcyBpbml0aWFsaXplZCBpbiBhcGlfaW5pdCgpLiAqLworCQljb2RfZXhpdCgpOworCQlkZXZfZXhpdCgpOworCQljaG5sX2V4aXQoKTsKKwkJbXNnX2V4aXQoKTsKKwkJaW9fZXhpdCgpOworCQlzdHJtX2V4aXQoKTsKKwkJZGlzcF9leGl0KCk7CisJCW5vZGVfZXhpdCgpOworCQlwcm9jX2V4aXQoKTsKKwkJbWdyX2V4aXQoKTsKKwkJcm1tX2V4aXQoKTsKKwkJZHJ2X2V4aXQoKTsKKwl9CisJREJDX0VOU1VSRShhcGlfY19yZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IGFwaV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgTW9kdWxlIGluaXRpYWxpemF0aW9uIHVzZWQgYnkgQnJpZGdlIEFQSS4KKyAqLworYm9vbCBhcGlfaW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKwlib29sIGZkcnYsIGZkZXYsIGZjb2QsIGZjaG5sLCBmbXNnLCBmaW87CisJYm9vbCBmbWdyLCBmcHJvYywgZm5vZGUsIGZkaXNwLCBmc3RybSwgZnJtbTsKKworCWlmIChhcGlfY19yZWZzID09IDApIHsKKwkJLyogaW5pdGlhbGl6ZSBkcml2ZXIgYW5kIG90aGVyIG1vZHVsZXMgKi8KKwkJZmRydiA9IGRydl9pbml0KCk7CisJCWZtZ3IgPSBtZ3JfaW5pdCgpOworCQlmcHJvYyA9IHByb2NfaW5pdCgpOworCQlmbm9kZSA9IG5vZGVfaW5pdCgpOworCQlmZGlzcCA9IGRpc3BfaW5pdCgpOworCQlmc3RybSA9IHN0cm1faW5pdCgpOworCQlmcm1tID0gcm1tX2luaXQoKTsKKwkJZmNobmwgPSBjaG5sX2luaXQoKTsKKwkJZm1zZyA9IG1zZ19tb2RfaW5pdCgpOworCQlmaW8gPSBpb19pbml0KCk7CisJCWZkZXYgPSBkZXZfaW5pdCgpOworCQlmY29kID0gY29kX2luaXQoKTsKKwkJcmV0ID0gZmRydiAmJiBmZGV2ICYmIGZjaG5sICYmIGZjb2QgJiYgZm1zZyAmJiBmaW87CisJCXJldCA9IHJldCAmJiBmbWdyICYmIGZwcm9jICYmIGZybW07CisJCWlmICghcmV0KSB7CisJCQlpZiAoZmRydikKKwkJCQlkcnZfZXhpdCgpOworCisJCQlpZiAoZm1ncikKKwkJCQltZ3JfZXhpdCgpOworCisJCQlpZiAoZnN0cm0pCisJCQkJc3RybV9leGl0KCk7CisKKwkJCWlmIChmcHJvYykKKwkJCQlwcm9jX2V4aXQoKTsKKworCQkJaWYgKGZub2RlKQorCQkJCW5vZGVfZXhpdCgpOworCisJCQlpZiAoZmRpc3ApCisJCQkJZGlzcF9leGl0KCk7CisKKwkJCWlmIChmY2hubCkKKwkJCQljaG5sX2V4aXQoKTsKKworCQkJaWYgKGZtc2cpCisJCQkJbXNnX2V4aXQoKTsKKworCQkJaWYgKGZpbykKKwkJCQlpb19leGl0KCk7CisKKwkJCWlmIChmZGV2KQorCQkJCWRldl9leGl0KCk7CisKKwkJCWlmIChmY29kKQorCQkJCWNvZF9leGl0KCk7CisKKwkJCWlmIChmcm1tKQorCQkJCXJtbV9leGl0KCk7CisKKwkJfQorCX0KKwlpZiAocmV0KQorCQlhcGlfY19yZWZzKys7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IGFwaV9pbml0X2NvbXBsZXRlMiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFBlcmZvcm0gYW55IHJlcXVpcmVkIGJyaWRnZSBpbml0aWFsaXphdGlvbiB3aGljaCBjYW5ub3QKKyAqICAgICAgYmUgcGVyZm9ybWVkIGluIGFwaV9pbml0KCkgb3IgZGV2X3N0YXJ0X2RldmljZSgpIGR1ZQorICogICAgICB0byB0aGUgZmFjdCB0aGF0IHNvbWUgc2VydmljZXMgYXJlIG5vdCB5ZXQKKyAqICAgICAgY29tcGxldGVseSBpbml0aWFsaXplZC4KKyAqICBQYXJhbWV0ZXJzOgorICogIFJldHVybnM6CisgKiAgICAgIDA6CUFsbG93IHRoaXMgZGV2aWNlIHRvIGxvYWQKKyAqICAgICAgLUVQRVJNOiAgICAgIEZhaWx1cmUuCisgKiAgUmVxdWlyZXM6CisgKiAgICAgIEJyaWRnZSBBUEkgaW5pdGlhbGl6ZWQuCisgKiAgRW5zdXJlczoKKyAqLworaW50IGFwaV9pbml0X2NvbXBsZXRlMih2b2lkKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGU7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOworCXU4IGRldl90eXBlOworCXUzMiB0bXA7CisKKwlEQkNfUkVRVUlSRShhcGlfY19yZWZzID4gMCk7CisKKwkvKiAgV2FsayB0aGUgbGlzdCBvZiBEZXZPYmplY3RzLCBnZXQgZWFjaCBkZXZub2RlLCBhbmQgYXR0ZW1wdGluZyB0bworCSAqICBhdXRvc3RhcnQgdGhlIGJvYXJkLiBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBDT0YgbG9hZGluZywgd2hpY2gKKwkgKiAgcmVxdWlyZXMgS0ZJTEUuICovCisJZm9yIChoZGV2X29iaiA9IGRldl9nZXRfZmlyc3QoKTsgaGRldl9vYmogIT0gTlVMTDsKKwkgICAgIGhkZXZfb2JqID0gZGV2X2dldF9uZXh0KGhkZXZfb2JqKSkgeworCQlpZiAoZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgfHwgKGRldl90eXBlID09IElWQV9VTklUKSkKKwkJCWlmIChjZmdfZ2V0X2F1dG9fc3RhcnQoZGV2X25vZGUsICZ0bXApID09IDAKKwkJCQkJCQkJCSYmIHRtcCkKKwkJCQlwcm9jX2F1dG9fc3RhcnQoZGV2X25vZGUsIGhkZXZfb2JqKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBUT0RPOiBSZW1vdmUgZGVwcmVjYXRlZCBhbmQgbm90IGltcGxlbWVudGVkIGlvY3RsIHdyYXBwZXJzICovCisKKy8qCisgKiA9PT09PT09PSBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX2VudW1fbm9kZV9pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1OCAqcG5kYl9wcm9wczsKKwl1MzIgbnVtX25vZGVzOworCWludCBzdGF0dXMgPSAwOworCXUzMiBzaXplID0gYXJncy0+YXJnc19tZ3JfZW51bW5vZGVfaW5mby51bmRiX3Byb3BzX3NpemU7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZHNwX25kYnByb3BzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbmRiX3Byb3BzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocG5kYl9wcm9wcyA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0KKwkJICAgIG1ncl9lbnVtX25vZGVfaW5mbyhhcmdzLT5hcmdzX21ncl9lbnVtbm9kZV9pbmZvLm5vZGVfaWQsCisJCQkJICAgICAgIChzdHJ1Y3QgZHNwX25kYnByb3BzICopcG5kYl9wcm9wcywgc2l6ZSwKKwkJCQkgICAgICAgJm51bV9ub2Rlcyk7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX21ncl9lbnVtbm9kZV9pbmZvLnBuZGJfcHJvcHMsIHBuZGJfcHJvcHMsIHN0YXR1cywKKwkJICBzaXplKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3JfZW51bW5vZGVfaW5mby5wdV9udW1fbm9kZXMsICZudW1fbm9kZXMsIHN0YXR1cywKKwkJICAxKTsKKwlrZnJlZShwbmRiX3Byb3BzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBtZ3J3cmFwX2VudW1fcHJvY19pbmZvID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX2VudW1fcHJvY19pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1OCAqcHJvY2Vzc29yX2luZm87CisJdTggbnVtX3Byb2NzOworCWludCBzdGF0dXMgPSAwOworCXUzMiBzaXplID0gYXJncy0+YXJnc19tZ3JfZW51bXByb2NfaW5mby5wcm9jZXNzb3JfaW5mb19zaXplOworCisJaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcm9jZXNzb3JfaW5mbyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByb2Nlc3Nvcl9pbmZvID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPQorCQkgICAgbWdyX2VudW1fcHJvY2Vzc29yX2luZm8oYXJncy0+YXJnc19tZ3JfZW51bXByb2NfaW5mby4KKwkJCQkJICAgIHByb2Nlc3Nvcl9pZCwKKwkJCQkJICAgIChzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmluZm8gKikKKwkJCQkJICAgIHByb2Nlc3Nvcl9pbmZvLCBzaXplLCAmbnVtX3Byb2NzKTsKKwl9CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfbWdyX2VudW1wcm9jX2luZm8ucHJvY2Vzc29yX2luZm8sIHByb2Nlc3Nvcl9pbmZvLAorCQkgIHN0YXR1cywgc2l6ZSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfbWdyX2VudW1wcm9jX2luZm8ucHVfbnVtX3Byb2NzLCAmbnVtX3Byb2NzLAorCQkgIHN0YXR1cywgMSk7CisJa2ZyZWUocHJvY2Vzc29yX2luZm8pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworI2RlZmluZSBXUkFQX01BUDJDQUxMRVIoeCkgeAorLyoKKyAqID09PT09PT09IG1ncndyYXBfcmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKi8KK3UzMiBtZ3J3cmFwX3JlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKwlzdHJ1Y3QgZHNwX3V1aWQgdXVpZF9vYmo7CisJdTMyIHBhdGhfc2l6ZSA9IDA7CisJY2hhciAqcHN6X3BhdGhfbmFtZSA9IE5VTEw7CisJaW50IHN0YXR1cyA9IDA7CisKKwlDUF9GTV9VU1IoJnV1aWRfb2JqLCBhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC51dWlkX29iaiwgc3RhdHVzLCAxKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIHBhdGhfc2l6ZSBpcyBpbmNyZWFzZWQgYnkgMSB0byBhY2NvbW1vZGF0ZSBOVUxMICovCisJcGF0aF9zaXplID0gc3RybGVuX3VzZXIoKGNoYXIgKikKKwkJCQlhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC5wc3pfcGF0aF9uYW1lKSArCisJICAgIDE7CisJcHN6X3BhdGhfbmFtZSA9IGttYWxsb2MocGF0aF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzel9wYXRoX25hbWUpCisJCWdvdG8gZnVuY19lbmQ7CisJcmV0ID0gc3RybmNweV9mcm9tX3VzZXIocHN6X3BhdGhfbmFtZSwKKwkJCQkoY2hhciAqKWFyZ3MtPmFyZ3NfbWdyX3JlZ2lzdGVyb2JqZWN0LgorCQkJCXBzel9wYXRoX25hbWUsIHBhdGhfc2l6ZSk7CisJaWYgKCFyZXQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlpZiAoYXJncy0+YXJnc19tZ3JfcmVnaXN0ZXJvYmplY3Qub2JqX3R5cGUgPj0gRFNQX0RDRE1BWE9CSlRZUEUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gZGNkX3JlZ2lzdGVyX29iamVjdCgmdXVpZF9vYmosCisJCQkJICAgICBhcmdzLT5hcmdzX21ncl9yZWdpc3Rlcm9iamVjdC5vYmpfdHlwZSwKKwkJCQkgICAgIChjaGFyICopcHN6X3BhdGhfbmFtZSk7CitmdW5jX2VuZDoKKwlrZnJlZShwc3pfcGF0aF9uYW1lKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCA9PT09PT09PQorICovCit1MzIgbWdyd3JhcF91bnJlZ2lzdGVyX29iamVjdCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIHV1aWRfb2JqOworCisJQ1BfRk1fVVNSKCZ1dWlkX29iaiwgYXJncy0+YXJnc19tZ3JfcmVnaXN0ZXJvYmplY3QudXVpZF9vYmosIHN0YXR1cywgMSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCXN0YXR1cyA9IGRjZF91bnJlZ2lzdGVyX29iamVjdCgmdXVpZF9vYmosCisJCQkJICAgICAgIGFyZ3MtPmFyZ3NfbWdyX3VucmVnaXN0ZXJvYmplY3QuCisJCQkJICAgICAgIG9ial90eXBlKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7CisKK30KKworLyoKKyAqID09PT09PT09IG1ncndyYXBfd2FpdF9mb3JfYnJpZGdlX2V2ZW50cyA9PT09PT09PQorICovCit1MzIgbWdyd3JhcF93YWl0X2Zvcl9icmlkZ2VfZXZlbnRzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiAqYW5vdGlmaWNhdGlvbnNbTUFYX0VWRU5UU107CisJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uc1tNQVhfRVZFTlRTXTsKKwl1MzIgaW5kZXgsIGk7CisJdTMyIGNvdW50ID0gYXJncy0+YXJnc19tZ3Jfd2FpdC5jb3VudDsKKworCWlmIChjb3VudCA+IE1BWF9FVkVOVFMpCisJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGFycmF5IG9mIHBvaW50ZXJzIHRvIHVzZXIgc3RydWN0dXJlcyAqLworCUNQX0ZNX1VTUihhbm90aWZpY2F0aW9ucywgYXJncy0+YXJnc19tZ3Jfd2FpdC5hbm90aWZpY2F0aW9ucywKKwkJICBzdGF0dXMsIGNvdW50KTsKKwkvKiBnZXQgdGhlIGV2ZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCUNQX0ZNX1VTUigmbm90aWZpY2F0aW9uc1tpXSwgYW5vdGlmaWNhdGlvbnNbaV0sIHN0YXR1cywgMSk7CisJCWlmIChzdGF0dXMgfHwgIW5vdGlmaWNhdGlvbnNbaV0uaGFuZGxlKSB7CisJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJLyogc2V0IHRoZSBhcnJheSBvZiBwb2ludGVycyB0byBrZXJuZWwgc3RydWN0dXJlcyAqLworCQlhbm90aWZpY2F0aW9uc1tpXSA9ICZub3RpZmljYXRpb25zW2ldOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBtZ3Jfd2FpdF9mb3JfYnJpZGdlX2V2ZW50cyhhbm90aWZpY2F0aW9ucywgY291bnQsCisJCQkJCQkJICZpbmRleCwKKwkJCQkJCQkgYXJncy0+YXJnc19tZ3Jfd2FpdC4KKwkJCQkJCQkgdXRpbWVvdXQpOworCX0KKwlDUF9UT19VU1IoYXJncy0+YXJnc19tZ3Jfd2FpdC5wdV9pbmRleCwgJmluZGV4LCBzdGF0dXMsIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBNR1JXUkFQX0dldFByb2Nlc3NSZXNvdXJjZUluZm8gPT09PT09PT0KKyAqLwordTMyIF9fZGVwcmVjYXRlZCBtZ3J3cmFwX2dldF9wcm9jZXNzX3Jlc291cmNlc19pbmZvKHVuaW9uIHRyYXBwZWRfYXJncyAqIGFyZ3MsCisJCQkJCQkgICAgdm9pZCAqcHJfY3R4dCkKK3sKKwlwcl9lcnIoIiVzOiBkZXByZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfYXR0YWNoID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9hdHRhY2godW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXZvaWQgKnByb2Nlc3NvcjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcmF0dHJpbiBwcm9jX2F0dHJfaW4sICphdHRyX2luID0gTlVMTDsKKworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19hdHRhY2guYXR0cl9pbikgeworCQlDUF9GTV9VU1IoJnByb2NfYXR0cl9pbiwgYXJncy0+YXJnc19wcm9jX2F0dGFjaC5hdHRyX2luLCBzdGF0dXMsCisJCQkgIDEpOworCQlpZiAoIXN0YXR1cykKKwkJCWF0dHJfaW4gPSAmcHJvY19hdHRyX2luOworCQllbHNlCisJCQlnb3RvIGZ1bmNfZW5kOworCisJfQorCXN0YXR1cyA9IHByb2NfYXR0YWNoKGFyZ3MtPmFyZ3NfcHJvY19hdHRhY2gucHJvY2Vzc29yX2lkLCBhdHRyX2luLAorCQkJICAgICAmcHJvY2Vzc29yLCBwcl9jdHh0KTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2F0dGFjaC5waF9wcm9jZXNzb3IsICZwcm9jZXNzb3IsIHN0YXR1cywgMSk7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfY3RybCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfY3RybCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIGNiX2RhdGFfc2l6ZSwgX191c2VyICogcHNpemUgPSAodTMyIF9fdXNlciAqKQorCSAgICBhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJnczsKKwl1OCAqcGFyZ3MgPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCWlmIChwc2l6ZSkgeworCQlpZiAoZ2V0X3VzZXIoY2JfZGF0YV9zaXplLCBwc2l6ZSkpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwkJY2JfZGF0YV9zaXplICs9IHNpemVvZih1MzIpOworCQlwYXJncyA9IGttYWxsb2MoY2JfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBhcmdzID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJQ1BfRk1fVVNSKHBhcmdzLCBhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJncywgc3RhdHVzLAorCQkJICBjYl9kYXRhX3NpemUpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBwcm9jX2N0cmwoaHByb2Nlc3NvciwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfY3RybC5kd19jbWQsCisJCQkJICAgKHN0cnVjdCBkc3BfY2JkYXRhICopcGFyZ3MpOworCX0KKworCS8qIENQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfY3RybC5wYXJncywgcGFyZ3MsIHN0YXR1cywgMSk7ICovCisJa2ZyZWUocGFyZ3MpOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2RldGFjaCA9PT09PT09PQorICovCit1MzIgX19kZXByZWNhdGVkIHByb2N3cmFwX2RldGFjaCh1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLCB2b2lkICpwcl9jdHh0KQoreworCS8qIHByb2NfZGV0YWNoIGNhbGxlZCBhdCBicmlkZ2VfcmVsZWFzZSBvbmx5ICovCisJcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2VudW1fbm9kZV9pbmZvID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9lbnVtX25vZGVfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpub2RlX3RhYltNQVhfTk9ERVNdOworCXUzMiBudW1fbm9kZXM7CisJdTMyIGFsbG9jX2NudDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoIWFyZ3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvLm5vZGVfdGFiX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gcHJvY19lbnVtX25vZGVzKGhwcm9jZXNzb3IsCisJCQkJIG5vZGVfdGFiLAorCQkJCSBhcmdzLT5hcmdzX3Byb2NfZW51bW5vZGVfaW5mby5ub2RlX3RhYl9zaXplLAorCQkJCSAmbnVtX25vZGVzLCAmYWxsb2NfY250KTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2VudW1ub2RlX2luZm8ubm9kZV90YWIsIG5vZGVfdGFiLCBzdGF0dXMsCisJCSAgbnVtX25vZGVzKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX2VudW1ub2RlX2luZm8ucHVfbnVtX25vZGVzLCAmbnVtX25vZGVzLAorCQkgIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfcHJvY19lbnVtbm9kZV9pbmZvLnB1X2FsbG9jYXRlZCwgJmFsbG9jX2NudCwKKwkJICBzdGF0dXMsIDEpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3UzMiBwcm9jd3JhcF9lbmRfZG1hKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19kbWEuZGlyID49IERNQV9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZW5kX2RtYShwcl9jdHh0LAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZG1hLmRpcik7CisJcmV0dXJuIHN0YXR1czsKK30KKwordTMyIHByb2N3cmFwX2JlZ2luX2RtYSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKworCWlmIChhcmdzLT5hcmdzX3Byb2NfZG1hLmRpciA+PSBETUFfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX2JlZ2luX2RtYShwcl9jdHh0LAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19kbWEudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZG1hLmRpcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX2ZsdXNoX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfZmx1c2hfbWVtb3J5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19mbHVzaG1lbW9yeS51bF9mbGFncyA+CisJICAgIFBST0NfV1JJVEVCQUNLX0lOVkFMSURBVEVfTUVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZmx1c2hfbWVtb3J5KHByX2N0eHQsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2ZsdXNobWVtb3J5LnBtcHVfYWRkciwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZmx1c2htZW1vcnkudWxfc2l6ZSwKKwkJCQkgICBhcmdzLT5hcmdzX3Byb2NfZmx1c2htZW1vcnkudWxfZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9pbnZhbGlkYXRlX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfaW52YWxpZGF0ZV9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPQorCSAgICBwcm9jX2ludmFsaWRhdGVfbWVtb3J5KHByX2N0eHQsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2ludmFsaWRhdGVtZW1vcnkucG1wdV9hZGRyLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19pbnZhbGlkYXRlbWVtb3J5LnVsX3NpemUpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9lbnVtX3Jlc291cmNlcyA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfZW51bV9yZXNvdXJjZXModW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvIHJlc291cmNlX2luZm87CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19lbnVtcmVzb3VyY2VzLnJlc291cmNlX2luZm9fc2l6ZSA8CisJICAgIHNpemVvZihzdHJ1Y3QgZHNwX3Jlc291cmNlaW5mbykpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0KKwkgICAgcHJvY19nZXRfcmVzb3VyY2VfaW5mbyhocHJvY2Vzc29yLAorCQkJCSAgIGFyZ3MtPmFyZ3NfcHJvY19lbnVtcmVzb3VyY2VzLnJlc291cmNlX3R5cGUsCisJCQkJICAgJnJlc291cmNlX2luZm8sCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2VudW1yZXNvdXJjZXMuCisJCQkJICAgcmVzb3VyY2VfaW5mb19zaXplKTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfZW51bXJlc291cmNlcy5yZXNvdXJjZV9pbmZvLCAmcmVzb3VyY2VfaW5mbywKKwkJICBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKKworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfZ2V0X3N0YXRlID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9nZXRfc3RhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCWlmIChhcmdzLT5hcmdzX3Byb2NfZ2V0c3RhdGUuc3RhdGVfaW5mb19zaXplIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJICAgYXJncy0+YXJnc19wcm9jX2dldHN0YXRlLnN0YXRlX2luZm9fc2l6ZSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfcHJvY19nZXRzdGF0ZS5wcm9jX3N0YXRlX29iaiwgJnByb2Nfc3RhdGUsIHN0YXR1cywKKwkJICAxKTsKKwlyZXR1cm4gc3RhdHVzOworCit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9nZXRfdHJhY2UgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX2dldF90cmFjZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl1OCAqcGJ1ZjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoYXJncy0+YXJnc19wcm9jX2dldHRyYWNlLm1heF9zaXplID4gTUFYX1RSQUNFQlVGTEVOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBidWYgPSBremFsbG9jKGFyZ3MtPmFyZ3NfcHJvY19nZXR0cmFjZS5tYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBidWYgIT0gTlVMTCkgeworCQlzdGF0dXMgPSBwcm9jX2dldF90cmFjZShocHJvY2Vzc29yLCBwYnVmLAorCQkJCQlhcmdzLT5hcmdzX3Byb2NfZ2V0dHJhY2UubWF4X3NpemUpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX3Byb2NfZ2V0dHJhY2UucGJ1ZiwgcGJ1Ziwgc3RhdHVzLAorCQkgIGFyZ3MtPmFyZ3NfcHJvY19nZXR0cmFjZS5tYXhfc2l6ZSk7CisJa2ZyZWUocGJ1Zik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfbG9hZCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfbG9hZCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJczMyIGksIGxlbjsKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyICp0ZW1wOworCXMzMiBjb3VudCA9IGFyZ3MtPmFyZ3NfcHJvY19sb2FkLmFyZ2NfaW5kZXg7CisJdTggKiphcmd2ID0gTlVMTCwgKiplbnZwID0gTlVMTDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoY291bnQgPD0gMCB8fCBjb3VudCA+IE1BWF9MT0FEQVJHUykgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlhcmd2ID0ga21hbGxvYyhjb3VudCAqIHNpemVvZih1OCAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmd2KSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19jb250OworCX0KKworCUNQX0ZNX1VTUihhcmd2LCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2FyZ3MsIHN0YXR1cywgY291bnQpOworCWlmIChzdGF0dXMpIHsKKwkJa2ZyZWUoYXJndik7CisJCWFyZ3YgPSBOVUxMOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoYXJndltpXSkgeworCQkJLyogVXNlciBzcGFjZSBwb2ludGVyIHRvIGFyZ3VtZW50ICovCisJCQl0ZW1wID0gKGNoYXIgKilhcmd2W2ldOworCQkJLyogbGVuIGlzIGluY3JlYXNlZCBieSAxIHRvIGFjY29tbW9kYXRlIE5VTEwgKi8KKwkJCWxlbiA9IHN0cmxlbl91c2VyKChjaGFyICopdGVtcCkgKyAxOworCQkJLyogS2VybmVsIHNwYWNlIHBvaW50ZXIgdG8gYXJndW1lbnQgKi8KKwkJCWFyZ3ZbaV0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoYXJndltpXSkgeworCQkJCUNQX0ZNX1VTUihhcmd2W2ldLCB0ZW1wLCBzdGF0dXMsIGxlbik7CisJCQkJaWYgKHN0YXR1cykgeworCQkJCQlrZnJlZShhcmd2W2ldKTsKKwkJCQkJYXJndltpXSA9IE5VTEw7CisJCQkJCWdvdG8gZnVuY19jb250OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQlnb3RvIGZ1bmNfY29udDsKKwkJCX0KKwkJfQorCX0KKwkvKiBUT0RPOiB2YWxpZGF0ZSB0aGlzICovCisJaWYgKGFyZ3MtPmFyZ3NfcHJvY19sb2FkLnVzZXJfZW52cCkgeworCQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGVudnAgYXJyYXkgaW5jbHVkaW5nIE5VTEwgKi8KKwkJY291bnQgPSAwOworCQlkbyB7CisJCQlnZXRfdXNlcih0ZW1wLCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2VudnAgKyBjb3VudCk7CisJCQljb3VudCsrOworCQl9IHdoaWxlICh0ZW1wKTsKKwkJZW52cCA9IGttYWxsb2MoY291bnQgKiBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOworCQlpZiAoIWVudnApIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfY29udDsKKwkJfQorCisJCUNQX0ZNX1VTUihlbnZwLCBhcmdzLT5hcmdzX3Byb2NfbG9hZC51c2VyX2VudnAsIHN0YXR1cywgY291bnQpOworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZShlbnZwKTsKKwkJCWVudnAgPSBOVUxMOworCQkJZ290byBmdW5jX2NvbnQ7CisJCX0KKwkJZm9yIChpID0gMDsgZW52cFtpXTsgaSsrKSB7CisJCQkvKiBVc2VyIHNwYWNlIHBvaW50ZXIgdG8gYXJndW1lbnQgKi8KKwkJCXRlbXAgPSAoY2hhciAqKWVudnBbaV07CisJCQkvKiBsZW4gaXMgaW5jcmVhc2VkIGJ5IDEgdG8gYWNjb21tb2RhdGUgTlVMTCAqLworCQkJbGVuID0gc3RybGVuX3VzZXIoKGNoYXIgKil0ZW1wKSArIDE7CisJCQkvKiBLZXJuZWwgc3BhY2UgcG9pbnRlciB0byBhcmd1bWVudCAqLworCQkJZW52cFtpXSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChlbnZwW2ldKSB7CisJCQkJQ1BfRk1fVVNSKGVudnBbaV0sIHRlbXAsIHN0YXR1cywgbGVuKTsKKwkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlKGVudnBbaV0pOworCQkJCQllbnZwW2ldID0gTlVMTDsKKwkJCQkJZ290byBmdW5jX2NvbnQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19jb250OworCQkJfQorCQl9CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gcHJvY19sb2FkKGhwcm9jZXNzb3IsCisJCQkJICAgYXJncy0+YXJnc19wcm9jX2xvYWQuYXJnY19pbmRleCwKKwkJCQkgICAoY29uc3QgY2hhciAqKilhcmd2LCAoY29uc3QgY2hhciAqKillbnZwKTsKKwl9CitmdW5jX2NvbnQ6CisJaWYgKGVudnApIHsKKwkJaSA9IDA7CisJCXdoaWxlIChlbnZwW2ldKQorCQkJa2ZyZWUoZW52cFtpKytdKTsKKworCQlrZnJlZShlbnZwKTsKKwl9CisKKwlpZiAoYXJndikgeworCQljb3VudCA9IGFyZ3MtPmFyZ3NfcHJvY19sb2FkLmFyZ2NfaW5kZXg7CisJCWZvciAoaSA9IDA7IChpIDwgY291bnQpICYmIGFyZ3ZbaV07IGkrKykKKwkJCWtmcmVlKGFyZ3ZbaV0pOworCisJCWtmcmVlKGFyZ3YpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9tYXAgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX21hcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICptYXBfYWRkcjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlpZiAoIWFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0udWxfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX21hcChhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLmhwcm9jZXNzb3IsCisJCQkgIGFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0ucG1wdV9hZGRyLAorCQkJICBhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnVsX3NpemUsCisJCQkgIGFyZ3MtPmFyZ3NfcHJvY19tYXBtZW0ucmVxX2FkZHIsICZtYXBfYWRkciwKKwkJCSAgYXJncy0+YXJnc19wcm9jX21hcG1lbS51bF9tYXBfYXR0ciwgcHJfY3R4dCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKHB1dF91c2VyKG1hcF9hZGRyLCBhcmdzLT5hcmdzX3Byb2NfbWFwbWVtLnBwX21hcF9hZGRyKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCXByb2NfdW5fbWFwKGhwcm9jZXNzb3IsIG1hcF9hZGRyLCBwcl9jdHh0KTsKKwkJfQorCisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZHNwX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbm90aWZpY2F0aW9uIGRhdGEgc3RydWN0dXJlICovCisJbm90aWZpY2F0aW9uLnBzX25hbWUgPSBOVUxMOworCW5vdGlmaWNhdGlvbi5oYW5kbGUgPSBOVUxMOworCisJc3RhdHVzID0gcHJvY19yZWdpc3Rlcl9ub3RpZnkoaHByb2Nlc3NvciwKKwkJCQkgYXJncy0+YXJnc19wcm9jX3JlZ2lzdGVyX25vdGlmeS5ldmVudF9tYXNrLAorCQkJCSBhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5Lm5vdGlmeV90eXBlLAorCQkJCSAmbm90aWZpY2F0aW9uKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19wcm9jX3JlZ2lzdGVyX25vdGlmeS5obm90aWZpY2F0aW9uLCAmbm90aWZpY2F0aW9uLAorCQkgIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX3Jlc2VydmVfbWVtb3J5ID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9yZXNlcnZlX21lbW9yeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl2b2lkICpwcnN2X2FkZHI7CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJaWYgKChhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnVsX3NpemUgPD0gMCkgfHwKKwkgICAgKGFyZ3MtPmFyZ3NfcHJvY19yc3ZtZW0udWxfc2l6ZSAmIChQR19TSVpFNEsgLSAxKSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0dXMgPSBwcm9jX3Jlc2VydmVfbWVtb3J5KGhwcm9jZXNzb3IsCisJCQkJICAgICBhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnVsX3NpemUsICZwcnN2X2FkZHIsCisJCQkJICAgICBwcl9jdHh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlpZiAocHV0X3VzZXIocHJzdl9hZGRyLCBhcmdzLT5hcmdzX3Byb2NfcnN2bWVtLnBwX3Jzdl9hZGRyKSkgeworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCXByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkoYXJncy0+YXJnc19wcm9jX3Jzdm1lbS4KKwkJCQkJICAgICAgIGhwcm9jZXNzb3IsIHByc3ZfYWRkciwgcHJfY3R4dCk7CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHByb2N3cmFwX3N0YXJ0ID09PT09PT09CisgKi8KK3UzMiBwcm9jd3JhcF9zdGFydCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKworCXJldCA9IHByb2Nfc3RhcnQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF91bl9tYXAgPT09PT09PT0KKyAqLwordTMyIHByb2N3cmFwX3VuX21hcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHByb2NfdW5fbWFwKCgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yLAorCQkJICAgICBhcmdzLT5hcmdzX3Byb2NfdW5tYXBtZW0ubWFwX2FkZHIsIHByX2N0eHQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBwcm9jd3JhcF91bl9yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfdW5fcmVzZXJ2ZV9tZW1vcnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJdm9pZCAqaHByb2Nlc3NvciA9ICgoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByX2N0eHQpLT5ocHJvY2Vzc29yOworCisJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAorCQkJCQlhcmdzLT5hcmdzX3Byb2NfdW5yc3ZtZW0ucHJzdl9hZGRyLAorCQkJCQlwcl9jdHh0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gcHJvY3dyYXBfc3RvcCA9PT09PT09PQorICovCit1MzIgcHJvY3dyYXBfc3RvcCh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKworCXJldCA9IHByb2Nfc3RvcCgoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3Nvcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gZmluZF9oYW5kbGUgPT09PT09PT09CisgKi8KK2lubGluZSB2b2lkIGZpbmRfbm9kZV9oYW5kbGUoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKm5vZGVyZXMsCisJCQkJdm9pZCAqcHJfY3R4dCwgdm9pZCAqaG5vZGUpCit7CisJcmN1X3JlYWRfbG9jaygpOworCSpub2RlcmVzID0gaWRyX2ZpbmQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPm5vZGVfaWQsCisJCQkJCQkJCShpbnQpaG5vZGUgLSAxKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2FsbG9jYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9hbGxvY2F0ZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIG5vZGVfdXVpZDsKKwl1MzIgY2JfZGF0YV9zaXplID0gMDsKKwl1MzIgX191c2VyICpwc2l6ZSA9ICh1MzIgX191c2VyICopIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5wYXJnczsKKwl1OCAqcGFyZ3MgPSBOVUxMOworCXN0cnVjdCBkc3Bfbm9kZWF0dHJpbiBwcm9jX2F0dHJfaW4sICphdHRyX2luID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKwlpbnQgbm9kZWlkOworCXZvaWQgKmhwcm9jZXNzb3IgPSAoKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcl9jdHh0KS0+aHByb2Nlc3NvcjsKKworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKHBzaXplKSB7CisJCWlmIChnZXRfdXNlcihjYl9kYXRhX3NpemUsIHBzaXplKSkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQljYl9kYXRhX3NpemUgKz0gc2l6ZW9mKHUzMik7CisJCWlmICghc3RhdHVzKSB7CisJCQlwYXJncyA9IGttYWxsb2MoY2JfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChwYXJncyA9PSBOVUxMKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisKKwkJfQorCQlDUF9GTV9VU1IocGFyZ3MsIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5wYXJncywgc3RhdHVzLAorCQkJICBjYl9kYXRhX3NpemUpOworCX0KKwlDUF9GTV9VU1IoJm5vZGVfdXVpZCwgYXJncy0+YXJnc19ub2RlX2FsbG9jYXRlLm5vZGVfaWRfcHRyLCBzdGF0dXMsIDEpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY2F0ZS5hdHRyX2luKSB7CisJCUNQX0ZNX1VTUigmcHJvY19hdHRyX2luLCBhcmdzLT5hcmdzX25vZGVfYWxsb2NhdGUuYXR0cl9pbiwKKwkJCSAgc3RhdHVzLCAxKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlhdHRyX2luID0gJnByb2NfYXR0cl9pbjsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCX0KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBub2RlX2FsbG9jYXRlKGhwcm9jZXNzb3IsCisJCQkJICAgICAgICZub2RlX3V1aWQsIChzdHJ1Y3QgZHNwX2NiZGF0YSAqKXBhcmdzLAorCQkJCSAgICAgICBhdHRyX2luLCAmbm9kZV9yZXMsIHByX2N0eHQpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlub2RlaWQgPSBub2RlX3Jlcy0+aWQgKyAxOworCQlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2FsbG9jYXRlLnBoX25vZGUsICZub2RlaWQsCisJCQlzdGF0dXMsIDEpOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJbm9kZV9kZWxldGUobm9kZV9yZXMsIHByX2N0eHQpOworCQl9CisJfQorZnVuY19jb250OgorCWtmcmVlKHBhcmdzKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZXdyYXBfYWxsb2NfbXNnX2J1ZiA9PT09PT09PQorICovCit1MzIgbm9kZXdyYXBfYWxsb2NfbXNnX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9idWZmZXJhdHRyICpwYXR0ciA9IE5VTEw7CisJc3RydWN0IGRzcF9idWZmZXJhdHRyIGF0dHI7CisJdTggKnBidWZmZXIgPSBOVUxMOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsICBwcl9jdHh0LAorCQkJCWFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY21zZ2J1Zi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghYXJncy0+YXJnc19ub2RlX2FsbG9jbXNnYnVmLnVzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGF0dHIpIHsJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwkJQ1BfRk1fVVNSKCZhdHRyLCBhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGF0dHIsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHIgPSAmYXR0cjsKKworCX0KKwkvKiBhcmd1bWVudCAqLworCUNQX0ZNX1VTUigmcGJ1ZmZlciwgYXJncy0+YXJnc19ub2RlX2FsbG9jbXNnYnVmLnBidWZmZXIsIHN0YXR1cywgMSk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gbm9kZV9hbGxvY19tc2dfYnVmKG5vZGVfcmVzLT5obm9kZSwKKwkJCQkJICAgIGFyZ3MtPmFyZ3Nfbm9kZV9hbGxvY21zZ2J1Zi51c2l6ZSwKKwkJCQkJICAgIHBhdHRyLCAmcGJ1ZmZlcik7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfYWxsb2Ntc2didWYucGJ1ZmZlciwgJnBidWZmZXIsIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICovCit1MzIgbm9kZXdyYXBfY2hhbmdlX3ByaW9yaXR5KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwl1MzIgcmV0OworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsIHByX2N0eHQsCisJCQkJYXJncy0+YXJnc19ub2RlX2NoYW5nZXByaW9yaXR5Lmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0ID0gbm9kZV9jaGFuZ2VfcHJpb3JpdHkobm9kZV9yZXMtPmhub2RlLAorCQkJCSAgIGFyZ3MtPmFyZ3Nfbm9kZV9jaGFuZ2Vwcmlvcml0eS5wcmlvKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiA9PT09PT09PSBub2Rld3JhcF9jb25uZWN0ID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9jb25uZWN0KHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3N0cm1hdHRyIGF0dHJzOworCXN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycyA9IE5VTEw7CisJdTMyIGNiX2RhdGFfc2l6ZTsKKwl1MzIgX191c2VyICpwc2l6ZSA9ICh1MzIgX191c2VyICopIGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0LmNvbm5fcGFyYW07CisJdTggKnBhcmdzID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczEsICpub2RlX3JlczI7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMSA9IE5VTEwsICpub2RlMiA9IE5VTEw7CisKKwlpZiAoKGludClhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5obm9kZSAhPSBEU1BfSEdQUE5PREUpIHsKKwkJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMxLCBwcl9jdHh0LAorCQkJCWFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lmhub2RlKTsKKwkJaWYgKG5vZGVfcmVzMSkKKwkJCW5vZGUxID0gbm9kZV9yZXMxLT5obm9kZTsKKwl9IGVsc2UgeworCQlub2RlMSA9IGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lmhub2RlOworCX0KKworCWlmICgoaW50KWFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lm90aGVyX25vZGUgIT0gRFNQX0hHUFBOT0RFKSB7CisJCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzMiwgcHJfY3R4dCwKKwkJCQlhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5vdGhlcl9ub2RlKTsKKwkJaWYgKG5vZGVfcmVzMikKKwkJCW5vZGUyID0gbm9kZV9yZXMyLT5obm9kZTsKKwl9IGVsc2UgeworCQlub2RlMiA9IGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0Lm90aGVyX25vZGU7CisJfQorCisJaWYgKCFub2RlMSB8fCAhbm9kZTIpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwlpZiAocHNpemUpIHsKKwkJaWYgKGdldF91c2VyKGNiX2RhdGFfc2l6ZSwgcHNpemUpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCWNiX2RhdGFfc2l6ZSArPSBzaXplb2YodTMyKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXBhcmdzID0ga21hbGxvYyhjYl9kYXRhX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKHBhcmdzID09IE5VTEwpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19jb250OworCQkJfQorCisJCX0KKwkJQ1BfRk1fVVNSKHBhcmdzLCBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5jb25uX3BhcmFtLCBzdGF0dXMsCisJCQkgIGNiX2RhdGFfc2l6ZSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9jb25uZWN0LnBhdHRycykgewkvKiBPcHRpb25hbCBhcmd1bWVudCAqLworCQlDUF9GTV9VU1IoJmF0dHJzLCBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5wYXR0cnMsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHJzID0gJmF0dHJzOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IG5vZGVfY29ubmVjdChub2RlMSwKKwkJCQkgICAgICBhcmdzLT5hcmdzX25vZGVfY29ubmVjdC5zdHJlYW1faWQsCisJCQkJICAgICAgbm9kZTIsCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX2Nvbm5lY3Qub3RoZXJfc3RyZWFtLAorCQkJCSAgICAgIHBhdHRycywgKHN0cnVjdCBkc3BfY2JkYXRhICopcGFyZ3MpOworCX0KK2Z1bmNfY29udDoKKwlrZnJlZShwYXJncyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfY3JlYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9jcmVhdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2NyZWF0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfY3JlYXRlKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZGVsZXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9kZWxldGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2RlbGV0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfZGVsZXRlKG5vZGVfcmVzLCBwcl9jdHh0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZXdyYXBfZnJlZV9tc2dfYnVmID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9mcmVlX21zZ19idWYodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciAqcGF0dHIgPSBOVUxMOworCXN0cnVjdCBkc3BfYnVmZmVyYXR0ciBhdHRyOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzOworCisJZmluZF9ub2RlX2hhbmRsZSgmbm9kZV9yZXMsIHByX2N0eHQsIGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLnBhdHRyKSB7CS8qIE9wdGlvbmFsIGFyZ3VtZW50ICovCisJCUNQX0ZNX1VTUigmYXR0ciwgYXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYucGF0dHIsIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKQorCQkJcGF0dHIgPSAmYXR0cjsKKworCX0KKworCWlmICghYXJncy0+YXJnc19ub2RlX2ZyZWVtc2didWYucGJ1ZmZlcikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBub2RlX2ZyZWVfbXNnX2J1Zihub2RlX3Jlcy0+aG5vZGUsCisJCQkJCSAgIGFyZ3MtPmFyZ3Nfbm9kZV9mcmVlbXNnYnVmLnBidWZmZXIsCisJCQkJCSAgIHBhdHRyKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X2F0dHIgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX2dldF9hdHRyKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX25vZGVhdHRyIGF0dHI7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2dldGF0dHIuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGF0dXMgPSBub2RlX2dldF9hdHRyKG5vZGVfcmVzLT5obm9kZSwgJmF0dHIsCisJCQkgICAgICAgYXJncy0+YXJnc19ub2RlX2dldGF0dHIuYXR0cl9zaXplKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX2dldGF0dHIucGF0dHIsICZhdHRyLCBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX2dldF9tZXNzYWdlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9nZXRfbWVzc2FnZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZHNwX21zZyBtc2c7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX2dldG1lc3NhZ2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzdGF0dXMgPSBub2RlX2dldF9tZXNzYWdlKG5vZGVfcmVzLT5obm9kZSwgJm1zZywKKwkJCQkgIGFyZ3MtPmFyZ3Nfbm9kZV9nZXRtZXNzYWdlLnV0aW1lb3V0KTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX25vZGVfZ2V0bWVzc2FnZS5tZXNzYWdlLCAmbXNnLCBzdGF0dXMsIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IG5vZGV3cmFwX3BhdXNlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9wYXVzZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJdTMyIHJldDsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX25vZGVfcGF1c2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBub2RlX3BhdXNlKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcHV0X21lc3NhZ2UgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX3B1dF9tZXNzYWdlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX21zZyBtc2c7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3B1dG1lc3NhZ2UuaG5vZGUpOworCisJaWYgKCFub2RlX3JlcykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlDUF9GTV9VU1IoJm1zZywgYXJncy0+YXJnc19ub2RlX3B1dG1lc3NhZ2UubWVzc2FnZSwgc3RhdHVzLCAxKTsKKworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX3B1dF9tZXNzYWdlKG5vZGVfcmVzLT5obm9kZSwgJm1zZywKKwkJCQkgICAgIGFyZ3MtPmFyZ3Nfbm9kZV9wdXRtZXNzYWdlLnV0aW1lb3V0KTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9yZWdpc3Rlcl9ub3RpZnkodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbjsKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3JlczsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LAorCQkJYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5Lmhub2RlKTsKKworCWlmICghbm9kZV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbm90aWZpY2F0aW9uIGRhdGEgc3RydWN0dXJlICovCisJbm90aWZpY2F0aW9uLnBzX25hbWUgPSBOVUxMOworCW5vdGlmaWNhdGlvbi5oYW5kbGUgPSBOVUxMOworCisJaWYgKCFhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5LmV2ZW50X21hc2spCisJCUNQX0ZNX1VTUigmbm90aWZpY2F0aW9uLAorCQkJICBhcmdzLT5hcmdzX3Byb2NfcmVnaXN0ZXJfbm90aWZ5Lmhub3RpZmljYXRpb24sCisJCQkgIHN0YXR1cywgMSk7CisKKwlzdGF0dXMgPSBub2RlX3JlZ2lzdGVyX25vdGlmeShub2RlX3Jlcy0+aG5vZGUsCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LmV2ZW50X21hc2ssCisJCQkJICAgICAgYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5LgorCQkJCSAgICAgIG5vdGlmeV90eXBlLCAmbm90aWZpY2F0aW9uKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19ub2RlX3JlZ2lzdGVybm90aWZ5Lmhub3RpZmljYXRpb24sICZub3RpZmljYXRpb24sCisJCSAgc3RhdHVzLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfcnVuID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF9ydW4odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3J1bi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IG5vZGVfcnVuKG5vZGVfcmVzLT5obm9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfdGVybWluYXRlID09PT09PT09CisgKi8KK3UzMiBub2Rld3JhcF90ZXJtaW5hdGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXM7CisJaW50IHRlbXBzdGF0dXM7CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisKKwlmaW5kX25vZGVfaGFuZGxlKCZub2RlX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19ub2RlX3Rlcm1pbmF0ZS5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN0YXR1cyA9IG5vZGVfdGVybWluYXRlKG5vZGVfcmVzLT5obm9kZSwgJnRlbXBzdGF0dXMpOworCisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9kZV90ZXJtaW5hdGUucHN0YXR1cywgJnRlbXBzdGF0dXMsIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gbm9kZXdyYXBfZ2V0X3V1aWRfcHJvcHMgPT09PT09PT0KKyAqLwordTMyIG5vZGV3cmFwX2dldF91dWlkX3Byb3BzKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHNwX3V1aWQgbm9kZV91dWlkOworCXN0cnVjdCBkc3BfbmRicHJvcHMgKnBub2RlX3Byb3BzID0gTlVMTDsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlDUF9GTV9VU1IoJm5vZGVfdXVpZCwgYXJncy0+YXJnc19ub2RlX2dldHV1aWRwcm9wcy5ub2RlX2lkX3B0ciwgc3RhdHVzLAorCQkgIDEpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCXBub2RlX3Byb3BzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRzcF9uZGJwcm9wcyksIEdGUF9LRVJORUwpOworCWlmIChwbm9kZV9wcm9wcyAhPSBOVUxMKSB7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX2dldF91dWlkX3Byb3BzKGhwcm9jZXNzb3IsICZub2RlX3V1aWQsIHBub2RlX3Byb3BzKTsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfbm9kZV9nZXR1dWlkcHJvcHMubm9kZV9wcm9wcywgcG5vZGVfcHJvcHMsCisJCQkgIHN0YXR1cywgMSk7CisJfSBlbHNlCisJCXN0YXR1cyA9IC1FTk9NRU07CitmdW5jX2NvbnQ6CisJa2ZyZWUocG5vZGVfcHJvcHMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBmaW5kX3N0cm1faGFuZGxlID09PT09PT09PQorICovCitpbmxpbmUgdm9pZCBmaW5kX3N0cm1faGFuZGxlKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkJCXZvaWQgKnByX2N0eHQsIHZvaWQgKmhzdHJlYW0pCit7CisJcmN1X3JlYWRfbG9jaygpOworCSpzdHJtcmVzID0gaWRyX2ZpbmQoKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPnN0cmVhbV9pZCwKKwkJCQkJCQkoaW50KWhzdHJlYW0gLSAxKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9hbGxvY2F0ZV9idWZmZXIgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2FsbG9jYXRlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1czsKKwl1OCAqKmFwX2J1ZmZlciA9IE5VTEw7CisJdTMyIG51bV9idWZzID0gYXJncy0+YXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyLm51bV9idWZzOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCWFyZ3MtPmFyZ3Nfc3RybV9hbGxvY2F0ZWJ1ZmZlci5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG51bV9idWZzID4gTUFYX0JVRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXBfYnVmZmVyID0ga21hbGxvYygobnVtX2J1ZnMgKiBzaXplb2YodTggKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXBfYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhdHVzID0gc3RybV9hbGxvY2F0ZV9idWZmZXIoc3RybV9yZXMsCisJCQkJICAgICAgYXJncy0+YXJnc19zdHJtX2FsbG9jYXRlYnVmZmVyLnVzaXplLAorCQkJCSAgICAgIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQpOworCWlmICghc3RhdHVzKSB7CisJCUNQX1RPX1VTUihhcmdzLT5hcmdzX3N0cm1fYWxsb2NhdGVidWZmZXIuYXBfYnVmZmVyLCBhcF9idWZmZXIsCisJCQkgIHN0YXR1cywgbnVtX2J1ZnMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJc3RybV9mcmVlX2J1ZmZlcihzdHJtX3JlcywKKwkJCQkJIGFwX2J1ZmZlciwgbnVtX2J1ZnMsIHByX2N0eHQpOworCQl9CisJfQorCWtmcmVlKGFwX2J1ZmZlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfY2xvc2UgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2Nsb3NlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fY2xvc2UuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBzdHJtX2Nsb3NlKHN0cm1fcmVzLCBwcl9jdHh0KTsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX2ZyZWVfYnVmZmVyID09PT09PT09CisgKi8KK3UzMiBzdHJtd3JhcF9mcmVlX2J1ZmZlcih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTggKiphcF9idWZmZXIgPSBOVUxMOworCXUzMiBudW1fYnVmcyA9IGFyZ3MtPmFyZ3Nfc3RybV9mcmVlYnVmZmVyLm51bV9idWZzOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fZnJlZWJ1ZmZlci5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKG51bV9idWZzID4gTUFYX0JVRlMpCisJCXJldHVybiAtRUlOVkFMOworCisJYXBfYnVmZmVyID0ga21hbGxvYygobnVtX2J1ZnMgKiBzaXplb2YodTggKikpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXBfYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJQ1BfRk1fVVNSKGFwX2J1ZmZlciwgYXJncy0+YXJnc19zdHJtX2ZyZWVidWZmZXIuYXBfYnVmZmVyLCBzdGF0dXMsCisJCSAgbnVtX2J1ZnMpOworCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHN0cm1fZnJlZV9idWZmZXIoc3RybV9yZXMsCisJCQkJCSAgYXBfYnVmZmVyLCBudW1fYnVmcywgcHJfY3R4dCk7CisKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX2ZyZWVidWZmZXIuYXBfYnVmZmVyLCBhcF9idWZmZXIsIHN0YXR1cywKKwkJICBudW1fYnVmcyk7CisJa2ZyZWUoYXBfYnVmZmVyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9nZXRfZXZlbnRfaGFuZGxlID09PT09PT09CisgKi8KK3UzMiBfX2RlcHJlY2F0ZWQgc3RybXdyYXBfZ2V0X2V2ZW50X2hhbmRsZSh1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLAorCQkJCQkgICB2b2lkICpwcl9jdHh0KQoreworCXByX2VycigiJXM6IGRlcHJlY2F0ZWQgZHNwYnJpZGdlIGlvY3RsXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9nZXRfaW5mbyA9PT09PT09PQorICovCit1MzIgc3RybXdyYXBfZ2V0X2luZm8odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBzdHJlYW1faW5mbyBzdHJtX2luZm87CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvIHVzZXI7CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvICp0ZW1wOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fZ2V0aW5mby5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJQ1BfRk1fVVNSKCZzdHJtX2luZm8sIGFyZ3MtPmFyZ3Nfc3RybV9nZXRpbmZvLnN0cmVhbV9pbmZvLCBzdGF0dXMsIDEpOworCXRlbXAgPSBzdHJtX2luZm8udXNlcl9zdHJtOworCisJc3RybV9pbmZvLnVzZXJfc3RybSA9ICZ1c2VyOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gc3RybV9nZXRfaW5mbyhzdHJtX3Jlcy0+aHN0cmVhbSwKKwkJCQkgICAgICAgJnN0cm1faW5mbywKKwkJCQkgICAgICAgYXJncy0+YXJnc19zdHJtX2dldGluZm8uCisJCQkJICAgICAgIHN0cmVhbV9pbmZvX3NpemUpOworCX0KKwlDUF9UT19VU1IodGVtcCwgc3RybV9pbmZvLnVzZXJfc3RybSwgc3RhdHVzLCAxKTsKKwlzdHJtX2luZm8udXNlcl9zdHJtID0gdGVtcDsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX2dldGluZm8uc3RyZWFtX2luZm8sICZzdHJtX2luZm8sIHN0YXR1cywgMSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX2lkbGUgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2lkbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiByZXQ7CisJc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXM7CisKKwlmaW5kX3N0cm1faGFuZGxlKCZzdHJtX3JlcywgcHJfY3R4dCwgYXJncy0+YXJnc19zdHJtX2lkbGUuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cm1faWRsZShzdHJtX3Jlcy0+aHN0cmVhbSwgYXJncy0+YXJnc19zdHJtX2lkbGUuZmx1c2hfZmxhZyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfaXNzdWUgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX2lzc3VlKHVuaW9uIHRyYXBwZWRfYXJncyAqYXJncywgdm9pZCAqcHJfY3R4dCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1faXNzdWUuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghYXJncy0+YXJnc19zdHJtX2lzc3VlLnBidWZmZXIpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogTm8gbmVlZCBvZiBkb2luZyBDUF9GTV9VU1IgZm9yIHRoZSB1c2VyIGJ1ZmZlciAocGJ1ZmZlcikKKwkgICBhcyB0aGlzIGlzIGRvbmUgaW4gQnJpZGdlIGludGVybmFsIGZ1bmN0aW9uIGJyaWRnZV9jaG5sX2FkZF9pb19yZXEKKwkgICBpbiBjaG5sX3NtLmMgKi8KKwlzdGF0dXMgPSBzdHJtX2lzc3VlKHN0cm1fcmVzLT5oc3RyZWFtLAorCQkJICAgIGFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5wYnVmZmVyLAorCQkJICAgIGFyZ3MtPmFyZ3Nfc3RybV9pc3N1ZS5kd19ieXRlcywKKwkJCSAgICBhcmdzLT5hcmdzX3N0cm1faXNzdWUuZHdfYnVmX3NpemUsCisJCQkgICAgYXJncy0+YXJnc19zdHJtX2lzc3VlLmR3X2FyZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfb3BlbiA9PT09PT09PQorICovCit1MzIgc3RybXdyYXBfb3Blbih1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHN0cm1fYXR0ciBhdHRyOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzX29iajsKKwlzdHJ1Y3QgZHNwX3N0cmVhbWF0dHJpbiBzdHJtX2F0dHJfaW47CisJc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZV9yZXM7CisJaW50IHN0cm1pZDsKKworCWZpbmRfbm9kZV9oYW5kbGUoJm5vZGVfcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fb3Blbi5obm9kZSk7CisKKwlpZiAoIW5vZGVfcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCUNQX0ZNX1VTUigmYXR0ciwgYXJncy0+YXJnc19zdHJtX29wZW4uYXR0cl9pbiwgc3RhdHVzLCAxKTsKKworCWlmIChhdHRyLnN0cmVhbV9hdHRyX2luICE9IE5VTEwpIHsJLyogT3B0aW9uYWwgYXJndW1lbnQgKi8KKwkJQ1BfRk1fVVNSKCZzdHJtX2F0dHJfaW4sIGF0dHIuc3RyZWFtX2F0dHJfaW4sIHN0YXR1cywgMSk7CisJCWlmICghc3RhdHVzKSB7CisJCQlhdHRyLnN0cmVhbV9hdHRyX2luID0gJnN0cm1fYXR0cl9pbjsKKwkJCWlmIChhdHRyLnN0cmVhbV9hdHRyX2luLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfTERNQSkKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJfQorCisJfQorCXN0YXR1cyA9IHN0cm1fb3Blbihub2RlX3Jlcy0+aG5vZGUsCisJCQkgICBhcmdzLT5hcmdzX3N0cm1fb3Blbi5kaXJlY3Rpb24sCisJCQkgICBhcmdzLT5hcmdzX3N0cm1fb3Blbi5pbmRleCwgJmF0dHIsICZzdHJtX3Jlc19vYmosCisJCQkgICBwcl9jdHh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlzdHJtaWQgPSBzdHJtX3Jlc19vYmotPmlkICsgMTsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9vcGVuLnBoX3N0cmVhbSwgJnN0cm1pZCwgc3RhdHVzLCAxKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqID09PT09PT09IHN0cm13cmFwX3JlY2xhaW0gPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX3JlY2xhaW0odW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXU4ICpidWZfcHRyOworCXUzMiB1bF9ieXRlczsKKwl1MzIgZHdfYXJnOworCXUzMiB1bF9idWZfc2l6ZTsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtX3JlczsKKworCWZpbmRfc3RybV9oYW5kbGUoJnN0cm1fcmVzLCBwcl9jdHh0LCBhcmdzLT5hcmdzX3N0cm1fcmVjbGFpbS5oc3RyZWFtKTsKKworCWlmICghc3RybV9yZXMpCisJCXJldHVybiAtRUZBVUxUOworCisJc3RhdHVzID0gc3RybV9yZWNsYWltKHN0cm1fcmVzLT5oc3RyZWFtLCAmYnVmX3B0ciwKKwkJCSAgICAgICZ1bF9ieXRlcywgJnVsX2J1Zl9zaXplLCAmZHdfYXJnKTsKKwlDUF9UT19VU1IoYXJncy0+YXJnc19zdHJtX3JlY2xhaW0uYnVmX3B0ciwgJmJ1Zl9wdHIsIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLmJ5dGVzLCAmdWxfYnl0ZXMsIHN0YXR1cywgMSk7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLnBkd19hcmcsICZkd19hcmcsIHN0YXR1cywgMSk7CisKKwlpZiAoYXJncy0+YXJnc19zdHJtX3JlY2xhaW0uYnVmX3NpemVfcHRyICE9IE5VTEwpIHsKKwkJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWNsYWltLmJ1Zl9zaXplX3B0ciwgJnVsX2J1Zl9zaXplLAorCQkJICBzdGF0dXMsIDEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiA9PT09PT09PSBzdHJtd3JhcF9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqLwordTMyIHN0cm13cmFwX3JlZ2lzdGVyX25vdGlmeSh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCisJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsCisJCQlhcmdzLT5hcmdzX3N0cm1fcmVnaXN0ZXJub3RpZnkuaHN0cmVhbSk7CisKKwlpZiAoIXN0cm1fcmVzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIEluaXRpYWxpemUgdGhlIG5vdGlmaWNhdGlvbiBkYXRhIHN0cnVjdHVyZSAqLworCW5vdGlmaWNhdGlvbi5wc19uYW1lID0gTlVMTDsKKwlub3RpZmljYXRpb24uaGFuZGxlID0gTlVMTDsKKworCXN0YXR1cyA9IHN0cm1fcmVnaXN0ZXJfbm90aWZ5KHN0cm1fcmVzLT5oc3RyZWFtLAorCQkJCSAgICAgIGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5ldmVudF9tYXNrLAorCQkJCSAgICAgIGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS4KKwkJCQkgICAgICBub3RpZnlfdHlwZSwgJm5vdGlmaWNhdGlvbik7CisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3Nfc3RybV9yZWdpc3Rlcm5vdGlmeS5obm90aWZpY2F0aW9uLCAmbm90aWZpY2F0aW9uLAorCQkgIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gc3RybXdyYXBfc2VsZWN0ID09PT09PT09CisgKi8KK3UzMiBzdHJtd3JhcF9zZWxlY3QodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCXUzMiBtYXNrOworCXN0cnVjdCBzdHJtX29iamVjdCAqc3RybV90YWJbTUFYX1NUUkVBTVNdOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1fcmVzOworCWludCAqaWRzW01BWF9TVFJFQU1TXTsKKwlpbnQgaTsKKworCWlmIChhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnN0cm1fbnVtID4gTUFYX1NUUkVBTVMpCisJCXJldHVybiAtRUlOVkFMOworCisJQ1BfRk1fVVNSKGlkcywgYXJncy0+YXJnc19zdHJtX3NlbGVjdC5zdHJlYW1fdGFiLCBzdGF0dXMsCisJCWFyZ3MtPmFyZ3Nfc3RybV9zZWxlY3Quc3RybV9udW0pOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnN0cm1fbnVtOyBpKyspIHsKKwkJZmluZF9zdHJtX2hhbmRsZSgmc3RybV9yZXMsIHByX2N0eHQsIGlkc1tpXSk7CisKKwkJaWYgKCFzdHJtX3JlcykKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXN0cm1fdGFiW2ldID0gc3RybV9yZXMtPmhzdHJlYW07CisJfQorCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gc3RybV9zZWxlY3Qoc3RybV90YWIsIGFyZ3MtPmFyZ3Nfc3RybV9zZWxlY3Quc3RybV9udW0sCisJCQkJICAgICAmbWFzaywgYXJncy0+YXJnc19zdHJtX3NlbGVjdC51dGltZW91dCk7CisJfQorCUNQX1RPX1VTUihhcmdzLT5hcmdzX3N0cm1fc2VsZWN0LnBtYXNrLCAmbWFzaywgc3RhdHVzLCAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDTU0gKi8KKworLyoKKyAqID09PT09PT09IGNtbXdyYXBfY2FsbG9jX2J1ZiA9PT09PT09PQorICovCit1MzIgX19kZXByZWNhdGVkIGNtbXdyYXBfY2FsbG9jX2J1Zih1bmlvbiB0cmFwcGVkX2FyZ3MgKiBhcmdzLCB2b2lkICpwcl9jdHh0KQoreworCS8qIFRoaXMgb3BlcmF0aW9uIGlzIGRvbmUgaW4ga2VybmVsICovCisJcHJfZXJyKCIlczogZGVwcmVjYXRlZCBkc3BicmlkZ2UgaW9jdGxcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqID09PT09PT09IGNtbXdyYXBfZnJlZV9idWYgPT09PT09PT0KKyAqLwordTMyIF9fZGVwcmVjYXRlZCBjbW13cmFwX2ZyZWVfYnVmKHVuaW9uIHRyYXBwZWRfYXJncyAqIGFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJLyogVGhpcyBvcGVyYXRpb24gaXMgZG9uZSBpbiBrZXJuZWwgKi8KKwlwcl9lcnIoIiVzOiBkZXByZWNhdGVkIGRzcGJyaWRnZSBpb2N0bFxuIiwgX19mdW5jX18pOworCXJldHVybiAtRU5PU1lTOworfQorCisvKgorICogPT09PT09PT0gY21td3JhcF9nZXRfaGFuZGxlID09PT09PT09CisgKi8KK3UzMiBjbW13cmFwX2dldF9oYW5kbGUodW5pb24gdHJhcHBlZF9hcmdzICphcmdzLCB2b2lkICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBjbW1fb2JqZWN0ICpoY21tX21ncjsKKwl2b2lkICpocHJvY2Vzc29yID0gKChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJfY3R4dCktPmhwcm9jZXNzb3I7CisKKwlzdGF0dXMgPSBjbW1fZ2V0X2hhbmRsZShocHJvY2Vzc29yLCAmaGNtbV9tZ3IpOworCisJQ1BfVE9fVVNSKGFyZ3MtPmFyZ3NfY21tX2dldGhhbmRsZS5waF9jbW1fbWdyLCAmaGNtbV9tZ3IsIHN0YXR1cywgMSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogPT09PT09PT0gY21td3JhcF9nZXRfaW5mbyA9PT09PT09PQorICovCit1MzIgY21td3JhcF9nZXRfaW5mbyh1bmlvbiB0cmFwcGVkX2FyZ3MgKmFyZ3MsIHZvaWQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNtbV9pbmZvIGNtbV9pbmZvX29iajsKKworCXN0YXR1cyA9IGNtbV9nZXRfaW5mbyhhcmdzLT5hcmdzX2NtbV9nZXRpbmZvLmhjbW1fbWdyLCAmY21tX2luZm9fb2JqKTsKKworCUNQX1RPX1VTUihhcmdzLT5hcmdzX2NtbV9nZXRpbmZvLmNtbV9pbmZvX29iaiwgJmNtbV9pbmZvX29iaiwgc3RhdHVzLAorCQkgIDEpOworCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9wbWdyL2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzBmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pby5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogaW8uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJTyBtYW5hZ2VyIGludGVyZmFjZTogTWFuYWdlcyBJTyBiZXR3ZWVuIENITkwgYW5kIG1zZ19jdHJsLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGlvb2JqLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2lvZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9pby5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09IGlvX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBJTyBtYW5hZ2VyIG9iamVjdCwgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIElPIGJldHdlZW4KKyAqICAgICAgQ0hOTCBhbmQgbXNnX2N0cmwKKyAqLworaW50IGlvX2NyZWF0ZShzdHJ1Y3QgaW9fbWdyICoqaW9fbWFuLCBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosCisJCSAgICAgY29uc3Qgc3RydWN0IGlvX2F0dHJzICptZ3JfYXR0cnRzKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBpb19tZ3IgKmhpb19tZ3IgPSBOVUxMOworCXN0cnVjdCBpb19tZ3JfICpwaW9fbWdyID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShpb19tYW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobWdyX2F0dHJ0cyAhPSBOVUxMKTsKKworCSppb19tYW4gPSBOVUxMOworCisJLyogQSBtZW1vcnkgYmFzZSBvZiAwIGltcGxpZXMgbm8gbWVtb3J5IGJhc2U6ICovCisJaWYgKChtZ3JfYXR0cnRzLT5zaG1fYmFzZSAhPSAwKSAmJiAobWdyX2F0dHJ0cy0+dXNtX2xlbmd0aCA9PSAwKSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmIChtZ3JfYXR0cnRzLT53b3JkX3NpemUgPT0gMCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmaW50Zl9meG5zKTsKKworCQkvKiBMZXQgQnJpZGdlIGNoYW5uZWwgbW9kdWxlIGZpbmlzaCB0aGUgY3JlYXRlOiAqLworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2lvX2NyZWF0ZSkgKCZoaW9fbWdyLCBoZGV2X29iaiwKKwkJCQkJCSAgICAgIG1ncl9hdHRydHMpOworCisJCWlmICghc3RhdHVzKSB7CisJCQlwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3JfICopaGlvX21ncjsKKwkJCXBpb19tZ3ItPmludGZfZnhucyA9IGludGZfZnhuczsKKwkJCXBpb19tZ3ItPmhkZXZfb2JqID0gaGRldl9vYmo7CisKKwkJCS8qIFJldHVybiB0aGUgbmV3IGNoYW5uZWwgbWFuYWdlciBoYW5kbGU6ICovCisJCQkqaW9fbWFuID0gaGlvX21ncjsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9fZGVzdHJveSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSBJTyBtYW5hZ2VyLgorICovCitpbnQgaW9fZGVzdHJveShzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBpb19tZ3JfICpwaW9fbWdyID0gKHN0cnVjdCBpb19tZ3JfICopaGlvX21ncjsKKwlpbnQgc3RhdHVzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaW50Zl9meG5zID0gcGlvX21nci0+aW50Zl9meG5zOworCisJLyogTGV0IEJyaWRnZSBjaGFubmVsIG1vZHVsZSBkZXN0cm95IHRoZSBpb19tZ3I6ICovCisJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9pb19kZXN0cm95KSAoaGlvX21ncik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGlvX2V4aXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBEaXNjb250aW51ZSB1c2FnZSBvZiB0aGUgSU8gbW9kdWxlLgorICovCit2b2lkIGlvX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gaW9faW5pdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEluaXRpYWxpemUgdGhlIElPIG1vZHVsZSdzIHByaXZhdGUgc3RhdGUuCisgKi8KK2Jvb2wgaW9faW5pdCh2b2lkKQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9pb29iai5oIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW9vYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDYzNTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvaW9vYmouaApAQCAtMCwwICsxLDM4IEBACisvKgorICogaW9vYmouaAorICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBTdHJ1Y3R1cmUgc3ViY29tcG9uZW50cyBvZiBjaGFubmVsIGNsYXNzIGxpYnJhcnkgSU8gb2JqZWN0cyB3aGljaAorICogYXJlIGV4cG9zZWQgdG8gRFNQIEFQSSBmcm9tIEJyaWRnZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmbmRlZiBJT09CSl8KKyNkZWZpbmUgSU9PQkpfCisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgaW9fbWdyIHN0cnVjdC4gT3RoZXIsIGltcGxlbWVudGF0aW9uCisgKiAgc3BlY2lmaWMgZmllbGRzIGZvbGxvdyB0aGlzIHN0cnVjdHVyZSBpbiBtZW1vcnkuCisgKi8KK3N0cnVjdCBpb19tZ3JfIHsKKwkvKiBUaGVzZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZHMgaW4gYSBpb19tZ3Igc3RydWN0OiAqLworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsJLyogQnJpZGdlIGNvbnRleHQuICovCisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIuICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOwkvKiBEZXZpY2UgdGhpcyBib2FyZCByZXByZXNlbnRzLiAqLworfTsKKworI2VuZGlmIC8qIElPT0JKXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ0MzY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBtc2cuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgbXNnX2N0cmwgTW9kdWxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJyaWRnZSBEcml2ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxtc2dvYmouaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbXNnLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCitzdGF0aWMgdTMyIHJlZnM7CQkvKiBtb2R1bGUgcmVmZXJlbmNlIGNvdW50ICovCisKKy8qCisgKiAgPT09PT09PT0gbXNnX2NyZWF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhbiBvYmplY3QgdG8gbWFuYWdlIG1lc3NhZ2UgcXVldWVzLiBPbmx5IG9uZSBvZiB0aGVzZSBvYmplY3RzCisgKiAgICAgIGNhbiBleGlzdCBwZXIgZGV2aWNlIG9iamVjdC4KKyAqLworaW50IG1zZ19jcmVhdGUoc3RydWN0IG1zZ19tZ3IgKiptc2dfbWFuLAorCQkgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmosIG1zZ19vbmV4aXQgbXNnX2NhbGxiYWNrKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBtc2dfbWdyXyAqbXNnX21ncl9vYmo7CisJc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG1zZ19tYW4gIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobXNnX2NhbGxiYWNrICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJKm1zZ19tYW4gPSBOVUxMOworCisJZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZpbnRmX2Z4bnMpOworCisJLyogTGV0IEJyaWRnZSBtZXNzYWdlIG1vZHVsZSBmaW5pc2ggdGhlIGNyZWF0ZTogKi8KKwlzdGF0dXMgPQorCSAgICAoKmludGZfZnhucy0+cGZuX21zZ19jcmVhdGUpICgmaG1zZ19tZ3IsIGhkZXZfb2JqLCBtc2dfY2FsbGJhY2spOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogRmlsbCBpbiBEU1AgQVBJIG1lc3NhZ2UgbW9kdWxlJ3MgZmllbGRzIG9mIHRoZSBtc2dfbWdyCisJCSAqIHN0cnVjdHVyZSAqLworCQltc2dfbWdyX29iaiA9IChzdHJ1Y3QgbXNnX21ncl8gKilobXNnX21ncjsKKwkJbXNnX21ncl9vYmotPmludGZfZnhucyA9IGludGZfZnhuczsKKworCQkvKiBGaW5hbGx5LCByZXR1cm4gdGhlIG5ldyBtZXNzYWdlIG1hbmFnZXIgaGFuZGxlOiAqLworCQkqbXNnX21hbiA9IGhtc2dfbWdyOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtc2dfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbXNnX2N0cmwgbWFuYWdlciBhbGxvY2F0ZWQgaW4gbXNnX2NyZWF0ZSgpLgorICovCit2b2lkIG1zZ19kZWxldGUoc3RydWN0IG1zZ19tZ3IgKmhtc2dfbWdyKQoreworCXN0cnVjdCBtc2dfbWdyXyAqbXNnX21ncl9vYmogPSAoc3RydWN0IG1zZ19tZ3JfICopaG1zZ19tZ3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAobXNnX21ncl9vYmopIHsKKwkJaW50Zl9meG5zID0gbXNnX21ncl9vYmotPmludGZfZnhuczsKKworCQkvKiBMZXQgQnJpZGdlIG1lc3NhZ2UgbW9kdWxlIGRlc3Ryb3kgdGhlIG1zZ19tZ3I6ICovCisJCSgqaW50Zl9meG5zLT5wZm5fbXNnX2RlbGV0ZSkgKGhtc2dfbWdyKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBFcnJvciBobXNnX21nciBoYW5kbGU6ICVwXG4iLAorCQkJX19mdW5jX18sIGhtc2dfbWdyKTsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gbXNnX2V4aXQgPT09PT09PT0KKyAqLwordm9pZCBtc2dfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbXNnX21vZF9pbml0ID09PT09PT09CisgKi8KK2Jvb2wgbXNnX21vZF9pbml0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCXJlZnMrKzsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnb2JqLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvcG1nci9tc2dvYmouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNhNjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3BtZ3IvbXNnb2JqLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIG1zZ29iai5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFN0cnVjdHVyZSBzdWJjb21wb25lbnRzIG9mIGNoYW5uZWwgY2xhc3MgbGlicmFyeSBtc2dfY3RybCBvYmplY3RzIHdoaWNoCisgKiBhcmUgZXhwb3NlZCB0byBEU1AgQVBJIGZyb20gQnJpZGdlIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIE1TR09CSl8KKyNkZWZpbmUgTVNHT0JKXworCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2dkZWZzLmg+CisKKy8qCisgKiAgVGhpcyBzdHJ1Y3QgaXMgdGhlIGZpcnN0IGZpZWxkIGluIGEgbXNnX21nciBzdHJ1Y3QuIE90aGVyLCBpbXBsZW1lbnRhdGlvbgorICogIHNwZWNpZmljIGZpZWxkcyBmb2xsb3cgdGhpcyBzdHJ1Y3R1cmUgaW4gbWVtb3J5LgorICovCitzdHJ1Y3QgbXNnX21ncl8geworCS8qIFRoZSBmaXJzdCBmaWVsZCBtdXN0IG1hdGNoIHRoYXQgaW4gX21zZ19zbS5oICovCisKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlci4gKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKyNlbmRpZiAvKiBNU0dPQkpfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kYmRjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJkY2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzFlODYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGJkY2QuYwpAQCAtMCwwICsxLDE1MTIgQEAKKy8qCisgKiBkYmRjZC5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIERTUC9CSU9TIEJyaWRnZQorICogQ29uZmlndXJhdGlvbiBEYXRhYmFzZSAoRENEKS4KKyAqCisgKiBOb3RlczoKKyAqICAgVGhlIGZ4biBkY2RfZ2V0X29iamVjdHMgY2FuIGFwcGx5IGEgY2FsbGJhY2sgZnhuIHRvIGVhY2ggRENEIG9iamVjdAorICogICB0aGF0IGlzIGxvY2F0ZWQgaW4gYSBzcGVjaWZpZWQgQ09GRiBmaWxlLiAgQXQgdGhlIG1vbWVudCwKKyAqICAgZGNkX2F1dG9fcmVnaXN0ZXIsIGRjZF9hdXRvX3VucmVnaXN0ZXIsIGFuZCBOTERSIG1vZHVsZSBhbGwgdXNlCisgKiAgIGRjZF9nZXRfb2JqZWN0cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS91dWlkdXRpbC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIGRlZmluZXMuICovCisjZGVmaW5lIE1BWF9JTlQyQ0hBUl9MRU5HVEggICAgIDE2CS8qIE1heCBpbnQyY2hhciBsZW4gb2YgMzIgYml0IGludCAqLworCisvKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisjZGVmaW5lIERFUExJQlNFQ1QJCSIuZHNwYnJpZGdlX2RlcGxpYnMiCisKKy8qIERDRCBzcGVjaWZpYyBzdHJ1Y3R1cmVzLiAqLworc3RydWN0IGRjZF9tYW5hZ2VyIHsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIEhhbmRsZSB0byBDT0QgbWFuYWdlciBvYmplY3QuICovCit9OworCisvKiAgUG9pbnRlciB0byB0aGUgcmVnaXN0cnkgc3VwcG9ydCBrZXkgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHJlZ19rZXlfbGlzdDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGJkY2RfbG9jayk7CisKKy8qIEdsb2JhbCByZWZlcmVuY2UgdmFyaWFibGVzLiAqLworc3RhdGljIHUzMiByZWZzOworc3RhdGljIHUzMiBlbnVtX3JlZnM7CisKKy8qIEhlbHBlciBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHMzMiBhdG9pKGNoYXIgKnBzel9idWYpOworc3RhdGljIGludCBnZXRfYXR0cnNfZnJvbV9idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLAorCQkJCSAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQkgICAgIHN0cnVjdCBkY2RfZ2VuZXJpY29iaiAqZ2VuX29iaik7CitzdGF0aWMgdm9pZCBjb21wcmVzc19idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLCBzMzIgY2hhcl9zaXplKTsKK3N0YXRpYyBjaGFyIGRzcF9jaGFyMl9ncHBfY2hhcihjaGFyICp3b3JkLCBzMzIgZHNwX2NoYXJfc2l6ZSk7CitzdGF0aWMgaW50IGdldF9kZXBfbGliX2luZm8oc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQkgICBzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSAgIHUxNiAqbnVtX2xpYnMsCisJCQkJICAgdTE2ICpudW1fcGVyc19saWJzLAorCQkJCSAgIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKKwkJCQkgICBib29sICpwcnN0bnRfZGVwX2xpYnMsCisJCQkJICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsKKworLyoKKyAqICA9PT09PT09PSBkY2RfYXV0b19yZWdpc3RlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFBhcnNlcyB0aGUgc3VwcGxpZWQgaW1hZ2UgYW5kIHJlc2lnc3RlcnMgd2l0aCBEQ0QuCisgKi8KK2ludCBkY2RfYXV0b19yZWdpc3RlcihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRjZF9tZ3IpCisJCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0cyhoZGNkX21nciwgc3pfY29mZl9wYXRoLAorCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikgZGNkX3JlZ2lzdGVyX29iamVjdCwKKwkJCQkJICh2b2lkICopc3pfY29mZl9wYXRoKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9hdXRvX3VucmVnaXN0ZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQYXJzZXMgdGhlIHN1cHBsaWVkIERTUCBpbWFnZSBhbmQgdW5yZXNpdGVycyBmcm9tIERDRC4KKyAqLworaW50IGRjZF9hdXRvX3VucmVnaXN0ZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCSAgICAgICBjaGFyICpzel9jb2ZmX3BhdGgpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoaGRjZF9tZ3IpCisJCXN0YXR1cyA9IGRjZF9nZXRfb2JqZWN0cyhoZGNkX21nciwgc3pfY29mZl9wYXRoLAorCQkJCQkgKGRjZF9yZWdpc3RlcmZ4bikgZGNkX3JlZ2lzdGVyX29iamVjdCwKKwkJCQkJIE5VTEwpOworCWVsc2UKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2NyZWF0ZV9tYW5hZ2VyID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ3JlYXRlcyBEQ0QgbWFuYWdlci4KKyAqLworaW50IGRjZF9jcmVhdGVfbWFuYWdlcihjaGFyICpzel96bF9kbGxfbmFtZSwKKwkJCSAgICAgIHN0cnVjdCBkY2RfbWFuYWdlciAqKmRjZF9tZ3IpCit7CisJc3RydWN0IGNvZF9tYW5hZ2VyICpjb2RfbWdyOwkvKiBDT0QgbWFuYWdlciBoYW5kbGUgKi8KKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gTlVMTDsJLyogRENEIE1hbmFnZXIgcG9pbnRlciAqLworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKwlEQkNfUkVRVUlSRShkY2RfbWdyKTsKKworCXN0YXR1cyA9IGNvZF9jcmVhdGUoJmNvZF9tZ3IsIHN6X3psX2RsbF9uYW1lLCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogQ3JlYXRlIGEgRENEIG9iamVjdC4gKi8KKwlkY2RfbWdyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkY2RfbWFuYWdlciksIEdGUF9LRVJORUwpOworCWlmIChkY2RfbWdyX29iaiAhPSBOVUxMKSB7CisJCS8qIEZpbGwgb3V0IHRoZSBvYmplY3QuICovCisJCWRjZF9tZ3Jfb2JqLT5jb2RfbWdyID0gY29kX21ncjsKKworCQkvKiBSZXR1cm4gaGFuZGxlIHRvIHRoaXMgRENEIGludGVyZmFjZS4gKi8KKwkJKmRjZF9tZ3IgPSBkY2RfbWdyX29iajsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCS8qCisJCSAqIElmIGFsbG9jYXRpb24gb2YgRGNkTWFuYWdlciBvYmplY3QgZmFpbGVkLCBkZWxldGUgdGhlCisJCSAqIENPRCBtYW5hZ2VyLgorCQkgKi8KKwkJY29kX2RlbGV0ZShjb2RfbWdyKTsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzKSB8fAorCQkJKChkY2RfbWdyX29iaiA9PSBOVUxMKSAmJiAoc3RhdHVzID09IC1FTk9NRU0pKSk7CisKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2Rlc3Ryb3lfbWFuYWdlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIERDRCBNYW5hZ2VyIG9iamVjdC4KKyAqLworaW50IGRjZF9kZXN0cm95X21hbmFnZXIoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21ncikKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJaW50IHN0YXR1cyA9IC1FRkFVTFQ7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKGhkY2RfbWdyKSB7CisJCS8qIERlbGV0ZSB0aGUgQ09EIG1hbmFnZXIuICovCisJCWNvZF9kZWxldGUoZGNkX21ncl9vYmotPmNvZF9tZ3IpOworCisJCS8qIERlYWxsb2NhdGUgYSBEQ0QgbWFuYWdlciBvYmplY3QuICovCisJCWtmcmVlKGRjZF9tZ3Jfb2JqKTsKKworCQlzdGF0dXMgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2VudW1lcmF0ZV9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGVzIG9iamVjdHMgaW4gdGhlIERDRC4KKyAqLworaW50IGRjZF9lbnVtZXJhdGVfb2JqZWN0KHMzMiBpbmRleCwgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc3pfcmVnX2tleVtEQ0RfTUFYUEFUSExFTkdUSF07CisJY2hhciBzel92YWx1ZVtEQ0RfTUFYUEFUSExFTkdUSF07CisJc3RydWN0IGRzcF91dWlkIGRzcF91dWlkX29iajsKKwljaGFyIHN6X29ial90eXBlW01BWF9JTlQyQ0hBUl9MRU5HVEhdOwkvKiBzdHIuIHJlcC4gb2Ygb2JqX3R5cGUuICovCisJdTMyIGR3X2tleV9sZW4gPSAwOworCXN0cnVjdCBkY2Rfa2V5X2VsZW0gKmRjZF9rZXk7CisJaW50IGxlbjsKKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisJREJDX1JFUVVJUkUoaW5kZXggPj0gMCk7CisJREJDX1JFUVVJUkUodXVpZF9vYmogIT0gTlVMTCk7CisKKwlpZiAoKGluZGV4ICE9IDApICYmIChlbnVtX3JlZnMgPT0gMCkpIHsKKwkJLyoKKwkJICogSWYgYW4gZW51bWVyYXRpb24gaXMgYmVpbmcgcGVyZm9ybWVkIG9uIGFuIGluZGV4IGdyZWF0ZXIKKwkJICogdGhhbiB6ZXJvLCB0aGVuIHRoZSBjdXJyZW50IGVudW1fcmVmcyBtdXN0IGhhdmUgYmVlbgorCQkgKiBpbmNyZW1lbnRlZCB0byBncmVhdGVyIHRoYW4gemVyby4KKwkJICovCisJCXN0YXR1cyA9IC1FSURSTTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBQcmUtZGV0ZXJtaW5lIGZpbmFsIGtleSBsZW5ndGguIEl0J3MgbGVuZ3RoIG9mIERDRF9SRUdLRVkgKworCQkgKiAgIl9cMCIgKyBsZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsgdGVybWluYXRpbmcgTlVMTC4KKwkJICovCisJCWR3X2tleV9sZW4gPSBzdHJsZW4oRENEX1JFR0tFWSkgKyAxICsgc2l6ZW9mKHN6X29ial90eXBlKSArIDE7CisJCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCQkvKiBDcmVhdGUgcHJvcGVyIFJFRyBrZXk7IGNvbmNhdGVuYXRlIERDRF9SRUdLRVkgd2l0aAorCQkgKiBvYmpfdHlwZS4gKi8KKwkJc3RybmNweShzel9yZWdfa2V5LCBEQ0RfUkVHS0VZLCBzdHJsZW4oRENEX1JFR0tFWSkgKyAxKTsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oIl9cMCIpKSA8CisJCSAgICBEQ0RfTUFYUEFUSExFTkdUSCkgeworCQkJc3RybmNhdChzel9yZWdfa2V5LCAiX1wwIiwgMik7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKworCQkvKiBUaGlzIHNucHJpbnRmIGlzIGd1YXJhbnRlZWQgbm90IHRvIGV4Y2VlZCBtYXggc2l6ZSBvZiBhbgorCQkgKiBpbnRlZ2VyLiAqLworCQlzdGF0dXMgPSBzbnByaW50Zihzel9vYmpfdHlwZSwgTUFYX0lOVDJDSEFSX0xFTkdUSCwgIiVkIiwKKwkJCQkgIG9ial90eXBlKTsKKworCQlpZiAoc3RhdHVzID09IC0xKSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAwOworCQkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oc3pfb2JqX3R5cGUpKSA8CisJCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAorCQkJCQlzdHJsZW4oc3pfb2JqX3R5cGUpICsgMSk7CisJCQl9IGVsc2UgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0KKwkJfQorCisJCWlmICghc3RhdHVzKSB7CisJCQlsZW4gPSBzdHJsZW4oc3pfcmVnX2tleSk7CisJCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7CisJCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksIGxlbikKKwkJCQkJCSYmICFpbmRleC0tKSB7CisJCQkJCXN0cm5jcHkoc3pfdmFsdWUsICZkY2Rfa2V5LT5uYW1lW2xlbl0sCisJCQkJCSAgICAgICBzdHJsZW4oJmRjZF9rZXktPm5hbWVbbGVuXSkgKyAxKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZkYmRjZF9sb2NrKTsKKworCQkJaWYgKCZkY2Rfa2V5LT5saW5rID09ICZyZWdfa2V5X2xpc3QpCisJCQkJc3RhdHVzID0gLUVOT0RBVEE7CisJCX0KKworCQlpZiAoIXN0YXR1cykgeworCQkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdXNpbmcgc3RyaW5nIHJldHJpZXZlZCBmcm9tCisJCQkgKiByZWdpc3RyeS4gKi8KKwkJCXV1aWRfdXVpZF9mcm9tX3N0cmluZyhzel92YWx1ZSwgJmRzcF91dWlkX29iaik7CisKKwkJCSp1dWlkX29iaiA9IGRzcF91dWlkX29iajsKKworCQkJLyogSW5jcmVtZW50IGVudW1fcmVmcyB0byB1cGRhdGUgcmVmZXJlbmNlIGNvdW50LiAqLworCQkJZW51bV9yZWZzKys7CisKKwkJCXN0YXR1cyA9IDA7CisJCX0gZWxzZSBpZiAoc3RhdHVzID09IC1FTk9EQVRBKSB7CisJCQkvKiBBdCB0aGUgZW5kIG9mIGVudW1lcmF0aW9uLiBSZXNldCBlbnVtX3JlZnMuICovCisJCQllbnVtX3JlZnMgPSAwOworCisJCQkvKgorCQkJICogVE9ETzogUmV2aXNpdCwgdGhpcyBpcyBub3QgYW4gZXJycm9yIGNhc2UgYnV0IGNvZGUKKwkJCSAqIGV4cGVjdHMgbm9uLXplcm8gdmFsdWUuCisJCQkgKi8KKwkJCXN0YXR1cyA9IEVOT0RBVEE7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisKKwlEQkNfRU5TVVJFKHV1aWRfb2JqIHx8IChzdGF0dXMgPT0gLUVQRVJNKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIERDRCBtb2R1bGUuCisgKi8KK3ZvaWQgZGNkX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpydiwgKnJ2X3RtcDsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisJaWYgKHJlZnMgPT0gMCkgeworCQljb2RfZXhpdCgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnYsIHJ2X3RtcCwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJbGlzdF9kZWwoJnJ2LT5saW5rKTsKKwkJCWtmcmVlKHJ2LT5wYXRoKTsKKwkJCWtmcmVlKHJ2KTsKKwkJfQorCX0KKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X2RlcF9saWJzID09PT09PT09CisgKi8KK2ludCBkY2RfZ2V0X2RlcF9saWJzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkgICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCSAgICB1MTYgbnVtX2xpYnMsIHN0cnVjdCBkc3BfdXVpZCAqZGVwX2xpYl91dWlkcywKKwkJCSAgICBib29sICpwcnN0bnRfZGVwX2xpYnMsCisJCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkY2RfbWdyKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkZXBfbGliX3V1aWRzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHByc3RudF9kZXBfbGlicyAhPSBOVUxMKTsKKworCXN0YXR1cyA9CisJICAgIGdldF9kZXBfbGliX2luZm8oaGRjZF9tZ3IsIHV1aWRfb2JqLCAmbnVtX2xpYnMsIE5VTEwsIGRlcF9saWJfdXVpZHMsCisJCQkgICAgIHByc3RudF9kZXBfbGlicywgcGhhc2UpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfZ2V0X251bV9kZXBfbGlicyA9PT09PT09PQorICovCitpbnQgZGNkX2dldF9udW1fZGVwX2xpYnMoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCQlzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCXUxNiAqbnVtX2xpYnMsIHUxNiAqbnVtX3BlcnNfbGlicywKKwkJCQllbnVtIG5sZHJfcGhhc2UgcGhhc2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaGRjZF9tZ3IpOworCURCQ19SRVFVSVJFKG51bV9saWJzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG51bV9wZXJzX2xpYnMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUodXVpZF9vYmogIT0gTlVMTCk7CisKKwlzdGF0dXMgPSBnZXRfZGVwX2xpYl9pbmZvKGhkY2RfbWdyLCB1dWlkX29iaiwgbnVtX2xpYnMsIG51bV9wZXJzX2xpYnMsCisJCQkJICBOVUxMLCBOVUxMLCBwaGFzZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9nZXRfb2JqZWN0X2RlZiA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgcHJvcGVydGllcyBvZiBhIG5vZGUgb3IgcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBVVUlEIGFuZAorICogICAgICBvYmplY3QgdHlwZS4KKyAqLworaW50IGRjZF9nZXRfb2JqZWN0X2RlZihzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJICAgICAgc3RydWN0IGRzcF91dWlkICpvYmpfdXVpZCwKKwkJCSAgICAgIGVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsCisJCQkgICAgICBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKm9ial9kZWYpCit7CisJc3RydWN0IGRjZF9tYW5hZ2VyICpkY2RfbWdyX29iaiA9IGhkY2RfbWdyOwkvKiBwdHIgdG8gRENEIG1nciAqLworCXN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgdWxfYWRkciA9IDA7CS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJdTMyIHVsX2xlbiA9IDA7CQkvKiBVc2VkIGJ5IGNvZF9nZXRfc2VjdGlvbiAqLworCXUzMiBkd19idWZfc2l6ZTsJLyogVXNlZCBieSBSRUcgZnVuY3Rpb25zICovCisJY2hhciBzel9yZWdfa2V5W0RDRF9NQVhQQVRITEVOR1RIXTsKKwljaGFyICpzel91dWlkOwkJLypbTUFYVVVJRExFTl07ICovCisJc3RydWN0IGRjZF9rZXlfZWxlbSAqZGNkX2tleSA9IE5VTEw7CisJY2hhciBzel9zZWN0X25hbWVbTUFYVVVJRExFTiArIDJdOwkvKiAiLltVVUlEXVwwIiAqLworCWNoYXIgKnBzel9jb2ZmX2J1ZjsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShvYmpfZGVmICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG9ial91dWlkICE9IE5VTEwpOworCisJc3pfdXVpZCA9IGt6YWxsb2MoTUFYVVVJRExFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzel91dWlkKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJaWYgKCFoZGNkX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIFByZS1kZXRlcm1pbmUgZmluYWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCisJICogICJfXDAiICsgbGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwgKi8KKwlkd19rZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkpICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAxOworCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCS8qIENyZWF0ZSBwcm9wZXIgUkVHIGtleTsgY29uY2F0ZW5hdGUgRENEX1JFR0tFWSB3aXRoIG9ial90eXBlLiAqLworCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsgMSk7CisKKwlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbigiX1wwIikpIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCXN0cm5jYXQoc3pfcmVnX2tleSwgIl9cMCIsIDIpOworCWVsc2UKKwkJc3RhdHVzID0gLUVQRVJNOworCisJc3RhdHVzID0gc25wcmludGYoc3pfb2JqX3R5cGUsIE1BWF9JTlQyQ0hBUl9MRU5HVEgsICIlZCIsIG9ial90eXBlKTsKKwlpZiAoc3RhdHVzID09IC0xKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAwOworCisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKHN6X29ial90eXBlKSkgPAorCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfb2JqX3R5cGUsCisJCQkJc3RybGVuKHN6X29ial90eXBlKSArIDEpOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisKKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gc2V0IGluIHJlZ2lzdHJ5LiAqLworCQl1dWlkX3V1aWRfdG9fc3RyaW5nKG9ial91dWlkLCBzel91dWlkLCBNQVhVVUlETEVOKTsKKworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIE1BWFVVSURMRU4pIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQllbHNlCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJLyogUmV0cmlldmUgcGF0aHMgZnJvbSB0aGUgcmVnaXN0cnkgYmFzZWQgb24gc3RydWN0IGRzcF91dWlkICovCisJCWR3X2J1Zl9zaXplID0gRENEX01BWFBBVEhMRU5HVEg7CisJfQorCWlmICghc3RhdHVzKSB7CisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkKKwkJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KSB7CisJCQlzdGF0dXMgPSAtRU5PS0VZOworCQkJZ290byBmdW5jX2VuZDsKKwkJfQorCX0KKworCisJLyogT3BlbiBDT0ZGIGZpbGUuICovCisJc3RhdHVzID0gY29kX29wZW4oZGNkX21ncl9vYmotPmNvZF9tZ3IsIGRjZF9rZXktPnBhdGgsCisJCQkJCQkJQ09EX05PTE9BRCwgJmxpYik7CisJaWYgKHN0YXR1cykgeworCQlzdGF0dXMgPSAtRUFDQ0VTOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIEVuc3VyZSBzel91dWlkICsgMSBpcyBub3QgZ3JlYXRlciB0aGFuIHNpemVvZiBzel9zZWN0X25hbWUuICovCisJREJDX0FTU0VSVCgoc3RybGVuKHN6X3V1aWQpICsgMSkgPCBzaXplb2Yoc3pfc2VjdF9uYW1lKSk7CisKKwkvKiBDcmVhdGUgc2VjdGlvbiBuYW1lIGJhc2VkIG9uIG5vZGUgVVVJRC4gQSBwZXJpb2QgaXMKKwkgKiBwcmUtcGVuZGVkIHRvIHRoZSBVVUlEIHN0cmluZyB0byBmb3JtIHRoZSBzZWN0aW9uIG5hbWUuCisJICogSS5lLiAiLjI0QkM4RDkwX0JCNDVfMTFkNF9CNzU2XzAwNjAwOEJEQjY2RiIgKi8KKwlzdHJuY3B5KHN6X3NlY3RfbmFtZSwgIi4iLCAyKTsKKwlzdHJuY2F0KHN6X3NlY3RfbmFtZSwgc3pfdXVpZCwgc3RybGVuKHN6X3V1aWQpKTsKKworCS8qIEdldCBzZWN0aW9uIGluZm9ybWF0aW9uLiAqLworCXN0YXR1cyA9IGNvZF9nZXRfc2VjdGlvbihsaWIsIHN6X3NlY3RfbmFtZSwgJnVsX2FkZHIsICZ1bF9sZW4pOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisjaWZkZWYgX0RCX1RJT01BUAorCWlmIChzdHJzdHIoZGNkX2tleS0+cGF0aCwgIml2YSIpID09IE5VTEwpIHsKKwkJLyogTG9jYXRlIHNlY3Rpb24gYnkgb2JqZWN0SUQgYW5kIHJlYWQgaXRzIGNvbnRlbnQuICovCisJCXN0YXR1cyA9CisJCSAgICBjb2RfcmVhZF9zZWN0aW9uKGxpYiwgc3pfc2VjdF9uYW1lLCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0KKwkJICAgIGNvZF9yZWFkX3NlY3Rpb24obGliLCBzel9zZWN0X25hbWUsIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogU2tpcHBlZCBCeXRlIHN3YXAgZm9yIElWQSEhXG4iLCBfX2Z1bmNfXyk7CisJfQorI2Vsc2UKKwlzdGF0dXMgPSBjb2RfcmVhZF9zZWN0aW9uKGxpYiwgc3pfc2VjdF9uYW1lLCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisjZW5kaWYKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDb21wcmVzIERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICovCisJCWlmIChzdHJzdHIoZGNkX2tleS0+cGF0aCwgIml2YSIpID09IE5VTEwpIHsKKwkJCWNvbXByZXNzX2J1Zihwc3pfY29mZl9idWYsIHVsX2xlbiwgRFNQV09SRFNJWkUpOworCQl9IGVsc2UgeworCQkJY29tcHJlc3NfYnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCAxKTsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IENvbXByZXNzaW5nIElWQSBDT0ZGIGJ1ZmZlciBieSAxICIKKwkJCQkiZm9yIElWQSEhXG4iLCBfX2Z1bmNfXyk7CisJCX0KKworCQkvKiBQYXJzZSB0aGUgY29udGVudCBvZiB0aGUgQ09GRiBidWZmZXIuICovCisJCXN0YXR1cyA9CisJCSAgICBnZXRfYXR0cnNfZnJvbV9idWYocHN6X2NvZmZfYnVmLCB1bF9sZW4sIG9ial90eXBlLCBvYmpfZGVmKTsKKwkJaWYgKHN0YXR1cykKKwkJCXN0YXR1cyA9IC1FQUNDRVM7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwl9CisKKwkvKiBGcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KKwlrZnJlZShwc3pfY29mZl9idWYpOworZnVuY19lbmQ6CisJaWYgKGxpYikKKwkJY29kX2Nsb3NlKGxpYik7CisKKwlrZnJlZShzel91dWlkKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGNkX2dldF9vYmplY3RzID09PT09PT09CisgKi8KK2ludCBkY2RfZ2V0X29iamVjdHMoc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX21nciwKKwkJCSAgIGNoYXIgKnN6X2NvZmZfcGF0aCwgZGNkX3JlZ2lzdGVyZnhuIHJlZ2lzdGVyX2Z4biwKKwkJCSAgIHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJY2hhciAqcHN6X2NvZmZfYnVmOworCWNoYXIgKnBzel9jdXI7CisJc3RydWN0IGNvZF9saWJyYXJ5b2JqICpsaWIgPSBOVUxMOworCXUzMiB1bF9hZGRyID0gMDsJLyogVXNlZCBieSBjb2RfZ2V0X3NlY3Rpb24gKi8KKwl1MzIgdWxfbGVuID0gMDsJCS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJY2hhciBzZXBzW10gPSAiOiwgIjsKKwljaGFyICp0b2tlbiA9IE5VTEw7CisJc3RydWN0IGRzcF91dWlkIGRzcF91dWlkX29iajsKKwlzMzIgb2JqZWN0X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFoZGNkX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIE9wZW4gRFNQIGNvZmYgZmlsZSwgZG9uJ3QgbG9hZCBzeW1ib2xzLiAqLworCXN0YXR1cyA9IGNvZF9vcGVuKGRjZF9tZ3Jfb2JqLT5jb2RfbWdyLCBzel9jb2ZmX3BhdGgsIENPRF9OT0xPQUQsICZsaWIpOworCWlmIChzdGF0dXMpIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJLyogR2V0IERDRF9SRVNJR0VSX1NFQ1RJT04gc2VjdGlvbiBpbmZvcm1hdGlvbi4gKi8KKwlzdGF0dXMgPSBjb2RfZ2V0X3NlY3Rpb24obGliLCBEQ0RfUkVHSVNURVJfU0VDVElPTiwgJnVsX2FkZHIsICZ1bF9sZW4pOworCWlmIChzdGF0dXMgfHwgISh1bF9sZW4gPiAwKSkgeworCQlzdGF0dXMgPSAtRUFDQ0VTOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisjaWZkZWYgX0RCX1RJT01BUAorCWlmIChzdHJzdHIoc3pfY29mZl9wYXRoLCAiaXZhIikgPT0gTlVMTCkgeworCQkvKiBMb2NhdGUgc2VjdGlvbiBieSBvYmplY3RJRCBhbmQgcmVhZCBpdHMgY29udGVudC4gKi8KKwkJc3RhdHVzID0gY29kX3JlYWRfc2VjdGlvbihsaWIsIERDRF9SRUdJU1RFUl9TRUNUSU9OLAorCQkJCQkgIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBTa2lwcGVkIEJ5dGUgc3dhcCBmb3IgSVZBISFcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gY29kX3JlYWRfc2VjdGlvbihsaWIsIERDRF9SRUdJU1RFUl9TRUNUSU9OLAorCQkJCQkgIHBzel9jb2ZmX2J1ZiwgdWxfbGVuKTsKKwl9CisjZWxzZQorCXN0YXR1cyA9CisJICAgIGNvZF9yZWFkX3NlY3Rpb24obGliLCBEQ0RfUkVHSVNURVJfU0VDVElPTiwgcHN6X2NvZmZfYnVmLCB1bF9sZW4pOworI2VuZGlmCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQ29tcHJlc3MgRFNQIGJ1ZmZlciB0byBjb25mb3JtIHRvIFBDIGZvcm1hdC4gKi8KKwkJaWYgKHN0cnN0cihzel9jb2ZmX3BhdGgsICJpdmEiKSA9PSBOVUxMKSB7CisJCQljb21wcmVzc19idWYocHN6X2NvZmZfYnVmLCB1bF9sZW4sIERTUFdPUkRTSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWNvbXByZXNzX2J1Zihwc3pfY29mZl9idWYsIHVsX2xlbiwgMSk7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBDb21wcmVzcyBDT0ZGIGJ1ZmZlciB3aXRoIDEgd29yZCAiCisJCQkJImZvciBJVkEhIVxuIiwgX19mdW5jX18pOworCQl9CisKKwkJLyogUmVhZCBmcm9tIGJ1ZmZlciBhbmQgcmVnaXN0ZXIgb2JqZWN0IGluIGJ1ZmZlci4gKi8KKwkJcHN6X2N1ciA9IHBzel9jb2ZmX2J1ZjsKKwkJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2VwcykpICYmICp0b2tlbiAhPSAnXDAnKSB7CisJCQkvKiAgUmV0cmlldmUgVVVJRCBzdHJpbmcuICovCisJCQl1dWlkX3V1aWRfZnJvbV9zdHJpbmcodG9rZW4sICZkc3BfdXVpZF9vYmopOworCisJCQkvKiAgUmV0cmlldmUgb2JqZWN0IHR5cGUgKi8KKwkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkJLyogIFJldHJpZXZlIG9iamVjdCB0eXBlICovCisJCQlvYmplY3RfdHlwZSA9IGF0b2kodG9rZW4pOworCisJCQkvKgorCQkJICogIEFwcGx5IHJlZ2lzdGVyX2Z4biB0byB0aGUgZm91bmQgRENEIG9iamVjdC4KKwkJCSAqICBQb3NzaWJsZSBhY3Rpb25zIGluY2x1ZGU6CisJCQkgKgorCQkJICogIDEpIFJlZ2lzdGVyIGZvdW5kIERDRCBvYmplY3QuCisJCQkgKiAgMikgVW5yZWdpc3RlciBmb3VuZCBEQ0Qgb2JqZWN0ICh3aGVuIGhhbmRsZSA9PSBOVUxMKQorCQkJICogIDMpIEFkZCBvdmVybGF5IG5vZGUuCisJCQkgKi8KKwkJCXN0YXR1cyA9CisJCQkgICAgcmVnaXN0ZXJfZnhuKCZkc3BfdXVpZF9vYmosIG9iamVjdF90eXBlLCBoYW5kbGUpOworCQkJaWYgKHN0YXR1cykgeworCQkJCS8qIGlmIGVycm9yIG9jY3VycywgYnJlYWsgZnJvbSB3aGlsZSBsb29wLiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVBQ0NFUzsKKwl9CisKKwkvKiBGcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBkeW5hbWljIGJ1ZmZlci4gKi8KKwlrZnJlZShwc3pfY29mZl9idWYpOworZnVuY19jb250OgorCWlmIChsaWIpCisJCWNvZF9jbG9zZShsaWIpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9nZXRfbGlicmFyeV9uYW1lID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmVzIHRoZSBsaWJyYXJ5IG5hbWUgZm9yIHRoZSBnaXZlbiBVVUlELgorICoKKyAqLworaW50IGRjZF9nZXRfbGlicmFyeV9uYW1lKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQljaGFyICpzdHJfbGliX25hbWUsCisJCQkJdTMyICpidWZmX3NpemUsCisJCQkJZW51bSBubGRyX3BoYXNlIHBoYXNlLCBib29sICpwaGFzZV9zcGxpdCkKK3sKKwljaGFyIHN6X3JlZ19rZXlbRENEX01BWFBBVEhMRU5HVEhdOworCWNoYXIgc3pfdXVpZFtNQVhVVUlETEVOXTsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5ID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHV1aWRfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN0cl9saWJfbmFtZSAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShidWZmX3NpemUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRjZF9tZ3IpOworCisJZGV2X2RiZyhicmlkZ2UsICIlczogaGRjZF9tZ3IgJXAsIHV1aWRfb2JqICVwLCBzdHJfbGliX25hbWUgJXAsIgorCQkiIGJ1ZmZfc2l6ZSAlcFxuIiwgX19mdW5jX18sIGhkY2RfbWdyLCB1dWlkX29iaiwgc3RyX2xpYl9uYW1lLAorCQlidWZmX3NpemUpOworCisJLyoKKwkgKiAgUHJlLWRldGVybWluZSBmaW5hbCBrZXkgbGVuZ3RoLiBJdCdzIGxlbmd0aCBvZiBEQ0RfUkVHS0VZICsKKwkgKiAgIl9cMCIgKyBsZW5ndGggb2Ygc3pfb2JqX3R5cGUgc3RyaW5nICsgdGVybWluYXRpbmcgTlVMTC4KKwkgKi8KKwlkd19rZXlfbGVuID0gc3RybGVuKERDRF9SRUdLRVkpICsgMSArIHNpemVvZihzel9vYmpfdHlwZSkgKyAxOworCURCQ19BU1NFUlQoZHdfa2V5X2xlbiA8IERDRF9NQVhQQVRITEVOR1RIKTsKKworCS8qIENyZWF0ZSBwcm9wZXIgUkVHIGtleTsgY29uY2F0ZW5hdGUgRENEX1JFR0tFWSB3aXRoIG9ial90eXBlLiAqLworCXN0cm5jcHkoc3pfcmVnX2tleSwgRENEX1JFR0tFWSwgc3RybGVuKERDRF9SRUdLRVkpICsgMSk7CisJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oIl9cMCIpKSA8IERDRF9NQVhQQVRITEVOR1RIKQorCQlzdHJuY2F0KHN6X3JlZ19rZXksICJfXDAiLCAyKTsKKwllbHNlCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQkvKiBjcmVhdGUgcGhhc2UgdHlwZSAqLworCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENEQ1JFQVRFTElCVFlQRSk7CisJCWJyZWFrOworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkvKiBleGVjdXRlIHBoYXNlIHR5cGUgKi8KKwkJc3ByaW50Zihzel9vYmpfdHlwZSwgIiVkIiwgRFNQX0RDREVYRUNVVEVMSUJUWVBFKTsKKwkJYnJlYWs7CisJY2FzZSBOTERSX0RFTEVURToKKwkJLyogZGVsZXRlIHBoYXNlIHR5cGUgKi8KKwkJc3ByaW50Zihzel9vYmpfdHlwZSwgIiVkIiwgRFNQX0RDRERFTEVURUxJQlRZUEUpOworCQlicmVhazsKKwljYXNlIE5MRFJfTk9QSEFTRToKKwkJLyoga25vd24gdG8gYmUgYSBkZXBlbmRlbnQgbGlicmFyeSAqLworCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENETElCUkFSWVRZUEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSAtRUlOVkFMOworCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBzdHJsZW4oc3pfb2JqX3R5cGUpKSA8CisJCSAgICBEQ0RfTUFYUEFUSExFTkdUSCkgeworCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel9vYmpfdHlwZSwKKwkJCQlzdHJsZW4oc3pfb2JqX3R5cGUpICsgMSk7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gZmluZCBtYXRjaCBpbiByZWdpc3RyeS4gKi8KKwkJdXVpZF91dWlkX3RvX3N0cmluZyh1dWlkX29iaiwgc3pfdXVpZCwgTUFYVVVJRExFTik7CisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgTUFYVVVJRExFTikgPCBEQ0RfTUFYUEFUSExFTkdUSCkKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfdXVpZCwgTUFYVVVJRExFTik7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3Bpbl9sb2NrKCZkYmRjZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2Rfa2V5LCAmcmVnX2tleV9saXN0LCBsaW5rKSB7CisJCQkvKiAgU2VlIGlmIHRoZSBuYW1lIG1hdGNoZXMuICovCisJCQlpZiAoIXN0cm5jbXAoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKKwkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpKQorCQkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrKCZkYmRjZF9sb2NrKTsKKwl9CisKKwlpZiAoJmRjZF9rZXktPmxpbmsgPT0gJnJlZ19rZXlfbGlzdCkKKwkJc3RhdHVzID0gLUVOT0tFWTsKKworCS8qIElmIGNhbid0IGZpbmQsIHBoYXNlcyBtaWdodCBiZSByZWdpc3RlcmVkIGFzIGdlbmVyaWMgTElCUkFSWVRZUEUgKi8KKwlpZiAoc3RhdHVzICYmIHBoYXNlICE9IE5MRFJfTk9QSEFTRSkgeworCQlpZiAocGhhc2Vfc3BsaXQpCisJCQkqcGhhc2Vfc3BsaXQgPSBmYWxzZTsKKworCQlzdHJuY3B5KHN6X3JlZ19rZXksIERDRF9SRUdLRVksIHN0cmxlbihEQ0RfUkVHS0VZKSArIDEpOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbigiX1wwIikpIDwKKwkJICAgIERDRF9NQVhQQVRITEVOR1RIKSB7CisJCQlzdHJuY2F0KHN6X3JlZ19rZXksICJfXDAiLCAyKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCQlzcHJpbnRmKHN6X29ial90eXBlLCAiJWQiLCBEU1BfRENETElCUkFSWVRZUEUpOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIHN0cmxlbihzel9vYmpfdHlwZSkpCisJCSAgICA8IERDRF9NQVhQQVRITEVOR1RIKSB7CisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X29ial90eXBlLAorCQkJCXN0cmxlbihzel9vYmpfdHlwZSkgKyAxKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfQorCQl1dWlkX3V1aWRfdG9fc3RyaW5nKHV1aWRfb2JqLCBzel91dWlkLCBNQVhVVUlETEVOKTsKKwkJaWYgKChzdHJsZW4oc3pfcmVnX2tleSkgKyBNQVhVVUlETEVOKSA8IERDRF9NQVhQQVRITEVOR1RIKQorCQkJc3RybmNhdChzel9yZWdfa2V5LCBzel91dWlkLCBNQVhVVUlETEVOKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJLyogIFNlZSBpZiB0aGUgbmFtZSBtYXRjaGVzLiAqLworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkKKwkJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisKKwkJc3RhdHVzID0gKCZkY2Rfa2V5LT5saW5rICE9ICZyZWdfa2V5X2xpc3QpID8KKwkJCQkJCTAgOiAtRU5PS0VZOworCX0KKworCWlmICghc3RhdHVzKQorCQltZW1jcHkoc3RyX2xpYl9uYW1lLCBkY2Rfa2V5LT5wYXRoLCBzdHJsZW4oZGNkX2tleS0+cGF0aCkgKyAxKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRjZF9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgRENEIG1vZHVsZS4KKyAqLworYm9vbCBkY2RfaW5pdCh2b2lkKQoreworCWJvb2wgaW5pdF9jb2Q7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZWZzID09IDApIHsKKwkJLyogSW5pdGlhbGl6ZSByZXF1aXJlZCBtb2R1bGVzLiAqLworCQlpbml0X2NvZCA9IGNvZF9pbml0KCk7CisKKwkJaWYgKCFpbml0X2NvZCkgeworCQkJcmV0ID0gZmFsc2U7CisJCQkvKiBFeGl0IGluaXRpYWxpemVkIG1vZHVsZXMuICovCisJCQlpZiAoaW5pdF9jb2QpCisJCQkJY29kX2V4aXQoKTsKKwkJfQorCisJCUlOSVRfTElTVF9IRUFEKCZyZWdfa2V5X2xpc3QpOworCX0KKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA9PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfcmVnaXN0ZXJfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVnaXN0ZXJzIGEgbm9kZSBvciBhIHByb2Nlc3NvciB3aXRoIHRoZSBEQ0QuCisgKiAgICAgIElmIHBzel9wYXRoX25hbWUgPT0gTlVMTCwgdW5yZWdpc3RlciB0aGUgc3BlY2lmaWVkIERDRCBvYmplY3QuCisgKi8KK2ludCBkY2RfcmVnaXN0ZXJfb2JqZWN0KHN0cnVjdCBkc3BfdXVpZCAqdXVpZF9vYmosCisJCQkgICAgICAgZW51bSBkc3BfZGNkb2JqdHlwZSBvYmpfdHlwZSwKKwkJCSAgICAgICBjaGFyICpwc3pfcGF0aF9uYW1lKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc3pfcmVnX2tleVtEQ0RfTUFYUEFUSExFTkdUSF07CisJY2hhciBzel91dWlkW01BWFVVSURMRU4gKyAxXTsKKwl1MzIgZHdfcGF0aF9zaXplID0gMDsKKwl1MzIgZHdfa2V5X2xlbjsJCS8qIExlbiBvZiBSRUcga2V5LiAqLworCWNoYXIgc3pfb2JqX3R5cGVbTUFYX0lOVDJDSEFSX0xFTkdUSF07CS8qIHN0ci4gcmVwLiBvZiBvYmpfdHlwZS4gKi8KKwlzdHJ1Y3QgZGNkX2tleV9lbGVtICpkY2Rfa2V5ID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSgob2JqX3R5cGUgPT0gRFNQX0RDRE5PREVUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RQUk9DRVNTT1JUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RMSUJSQVJZVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENEQ1JFQVRFTElCVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENERVhFQ1VURUxJQlRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRERFTEVURUxJQlRZUEUpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IG9iamVjdCBVVUlEICVwLCBvYmpfdHlwZSAlZCwgc3pQYXRoTmFtZSAlc1xuIiwKKwkJX19mdW5jX18sIHV1aWRfb2JqLCBvYmpfdHlwZSwgcHN6X3BhdGhfbmFtZSk7CisKKwkvKgorCSAqIFByZS1kZXRlcm1pbmUgZmluYWwga2V5IGxlbmd0aC4gSXQncyBsZW5ndGggb2YgRENEX1JFR0tFWSArCisJICogICJfXDAiICsgbGVuZ3RoIG9mIHN6X29ial90eXBlIHN0cmluZyArIHRlcm1pbmF0aW5nIE5VTEwuCisJICovCisJZHdfa2V5X2xlbiA9IHN0cmxlbihEQ0RfUkVHS0VZKSArIDEgKyBzaXplb2Yoc3pfb2JqX3R5cGUpICsgMTsKKwlEQkNfQVNTRVJUKGR3X2tleV9sZW4gPCBEQ0RfTUFYUEFUSExFTkdUSCk7CisKKwkvKiBDcmVhdGUgcHJvcGVyIFJFRyBrZXk7IGNvbmNhdGVuYXRlIERDRF9SRUdLRVkgd2l0aCBvYmpfdHlwZS4gKi8KKwlzdHJuY3B5KHN6X3JlZ19rZXksIERDRF9SRUdLRVksIHN0cmxlbihEQ0RfUkVHS0VZKSArIDEpOworCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKCJfXDAiKSkgPCBEQ0RfTUFYUEFUSExFTkdUSCkKKwkJc3RybmNhdChzel9yZWdfa2V5LCAiX1wwIiwgMik7CisJZWxzZSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBzbnByaW50Zihzel9vYmpfdHlwZSwgTUFYX0lOVDJDSEFSX0xFTkdUSCwgIiVkIiwgb2JqX3R5cGUpOworCWlmIChzdGF0dXMgPT0gLTEpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IDA7CisJCWlmICgoc3RybGVuKHN6X3JlZ19rZXkpICsgc3RybGVuKHN6X29ial90eXBlKSkgPAorCQkgICAgRENEX01BWFBBVEhMRU5HVEgpIHsKKwkJCXN0cm5jYXQoc3pfcmVnX2tleSwgc3pfb2JqX3R5cGUsCisJCQkJc3RybGVuKHN6X29ial90eXBlKSArIDEpOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkvKiBDcmVhdGUgVVVJRCB2YWx1ZSB0byBzZXQgaW4gcmVnaXN0cnkuICovCisJCXV1aWRfdXVpZF90b19zdHJpbmcodXVpZF9vYmosIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQlpZiAoKHN0cmxlbihzel9yZWdfa2V5KSArIE1BWFVVSURMRU4pIDwgRENEX01BWFBBVEhMRU5HVEgpCisJCQlzdHJuY2F0KHN6X3JlZ19rZXksIHN6X3V1aWQsIE1BWFVVSURMRU4pOworCQllbHNlCisJCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qCisJICogSWYgcHN6X3BhdGhfbmFtZSAhPSBOVUxMLCBwZXJmb3JtIHJlZ2lzdHJhdGlvbiwgb3RoZXJ3aXNlLAorCSAqIHBlcmZvcm0gdW5yZWdpc3RyYXRpb24uCisJICovCisKKwlpZiAocHN6X3BhdGhfbmFtZSkgeworCQlkd19wYXRoX3NpemUgPSBzdHJsZW4ocHN6X3BhdGhfbmFtZSkgKyAxOworCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRjZF9rZXksICZyZWdfa2V5X2xpc3QsIGxpbmspIHsKKwkJCS8qICBTZWUgaWYgdGhlIG5hbWUgbWF0Y2hlcy4gKi8KKwkJCWlmICghc3RybmNtcChkY2Rfa2V5LT5uYW1lLCBzel9yZWdfa2V5LAorCQkJCQkJc3RybGVuKHN6X3JlZ19rZXkpICsgMSkpCisJCQkJYnJlYWs7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRiZGNkX2xvY2spOworCQlpZiAoJmRjZF9rZXktPmxpbmsgPT0gJnJlZ19rZXlfbGlzdCkgeworCQkJLyoKKwkJCSAqIEFkZCBuZXcgcmVnIHZhbHVlIChVVUlEK29ial90eXBlKQorCQkJICogd2l0aCBDT0ZGIHBhdGggaW5mbworCQkJICovCisKKwkJCWRjZF9rZXkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGNkX2tleV9lbGVtKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWRjZF9rZXkpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisKKwkJCWRjZF9rZXktPnBhdGggPSBrbWFsbG9jKHN0cmxlbihzel9yZWdfa2V5KSArIDEsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCisJCQlpZiAoIWRjZF9rZXktPnBhdGgpIHsKKwkJCQlrZnJlZShkY2Rfa2V5KTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWdvdG8gZnVuY19lbmQ7CisJCQl9CisKKwkJCXN0cm5jcHkoZGNkX2tleS0+bmFtZSwgc3pfcmVnX2tleSwKKwkJCQkJCXN0cmxlbihzel9yZWdfa2V5KSArIDEpOworCQkJc3RybmNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lICwKKwkJCQkJCWR3X3BhdGhfc2l6ZSk7CisJCQlzcGluX2xvY2soJmRiZGNkX2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmZGNkX2tleS0+bGluaywgJnJlZ19rZXlfbGlzdCk7CisJCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCX0gZWxzZSB7CisJCQkvKiAgTWFrZSBzdXJlIHRoZSBuZXcgZGF0YSBpcyB0aGUgc2FtZS4gKi8KKwkJCWlmIChzdHJuY21wKGRjZF9rZXktPnBhdGgsIHBzel9wYXRoX25hbWUsCisJCQkJCQkJZHdfcGF0aF9zaXplKSkgeworCQkJCS8qICBUaGUgY2FsbGVyIG5lZWRzIGEgZGlmZmVyZW50IGRhdGEgc2l6ZSEgKi8KKwkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKKwkJCQlkY2Rfa2V5LT5wYXRoID0ga21hbGxvYyhkd19wYXRoX3NpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQkJCWlmIChkY2Rfa2V5LT5wYXRoID09IE5VTEwpIHsKKwkJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCQkJZ290byBmdW5jX2VuZDsKKwkJCQl9CisJCQl9CisKKwkJCS8qICBXZSBoYXZlIGEgbWF0Y2ghICBDb3B5IG91dCB0aGUgZGF0YS4gKi8KKwkJCW1lbWNweShkY2Rfa2V5LT5wYXRoLCBwc3pfcGF0aF9uYW1lLCBkd19wYXRoX3NpemUpOworCQl9CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHBzel9wYXRoX25hbWU9JXMsIGR3X3BhdGhfc2l6ZT0lZFxuIiwKKwkJCV9fZnVuY19fLCBwc3pfcGF0aF9uYW1lLCBkd19wYXRoX3NpemUpOworCX0gZWxzZSB7CisJCS8qIERlcmVnaXN0ZXIgYW4gZXhpc3Rpbmcgb2JqZWN0ICovCisJCXNwaW5fbG9jaygmZGJkY2RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNkX2tleSwgJnJlZ19rZXlfbGlzdCwgbGluaykgeworCQkJaWYgKCFzdHJuY21wKGRjZF9rZXktPm5hbWUsIHN6X3JlZ19rZXksCisJCQkJCQlzdHJsZW4oc3pfcmVnX2tleSkgKyAxKSkgeworCQkJCWxpc3RfZGVsKCZkY2Rfa2V5LT5saW5rKTsKKwkJCQlrZnJlZShkY2Rfa2V5LT5wYXRoKTsKKwkJCQlrZnJlZShkY2Rfa2V5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9jaygmZGJkY2RfbG9jayk7CisJCWlmICgmZGNkX2tleS0+bGluayA9PSAmcmVnX2tleV9saXN0KQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBCZWNhdXNlIHRoZSBub2RlIGRhdGFiYXNlIGhhcyBiZWVuIHVwZGF0ZWQgdGhyb3VnaCBhCisJCSAqICBzdWNjZXNzZnVsIG9iamVjdCByZWdpc3RyYXRpb24vZGUtcmVnaXN0cmF0aW9uIG9wZXJhdGlvbiwKKwkJICogIHdlIG5lZWQgdG8gcmVzZXQgdGhlIG9iamVjdCBlbnVtZXJhdGlvbiBjb3VudGVyIHRvIGFsbG93CisJCSAqICBjdXJyZW50IGVudW1lcmF0aW9ucyB0byByZWZsZWN0IHRoaXMgdXBkYXRlIGluIHRoZSBub2RlCisJCSAqICBkYXRhYmFzZS4KKwkJICovCisJCWVudW1fcmVmcyA9IDA7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkY2RfdW5yZWdpc3Rlcl9vYmplY3QgPT09PT09PT0KKyAqICBDYWxsIERDRF9SZWdpc3RlciBvYmplY3Qgd2l0aCBwc3pfcGF0aF9uYW1lIHNldCB0byBOVUxMIHRvCisgKiAgcGVyZm9ybSBhY3R1YWwgb2JqZWN0IGRlLXJlZ2lzdHJhdGlvbi4KKyAqLworaW50IGRjZF91bnJlZ2lzdGVyX29iamVjdChzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCSBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHV1aWRfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKChvYmpfdHlwZSA9PSBEU1BfRENETk9ERVRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRFBST0NFU1NPUlRZUEUpIHx8CisJCSAgICAob2JqX3R5cGUgPT0gRFNQX0RDRExJQlJBUllUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RDUkVBVEVMSUJUWVBFKSB8fAorCQkgICAgKG9ial90eXBlID09IERTUF9EQ0RFWEVDVVRFTElCVFlQRSkgfHwKKwkJICAgIChvYmpfdHlwZSA9PSBEU1BfRENEREVMRVRFTElCVFlQRSkpOworCisJLyoKKwkgKiAgV2hlbiBkY2RfcmVnaXN0ZXJfb2JqZWN0IGlzIGNhbGxlZCB3aXRoIE5VTEwgYXMgcGF0aG5hbWUsCisJICogIGl0IGluZGljYXRlcyBhbiB1bnJlZ2lzdGVyIG9iamVjdCBvcGVyYXRpb24uCisJICovCisJc3RhdHVzID0gZGNkX3JlZ2lzdGVyX29iamVjdCh1dWlkX29iaiwgb2JqX3R5cGUsIE5VTEwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEQ0QgSGVscGVyIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogID09PT09PT09IGF0b2kgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHN0cmluZ3MgaW4gZGVjaW1hbCBvciBoZXggZm9ybWF0IHRvIGludGVnZXJzLgorICovCitzdGF0aWMgczMyIGF0b2koY2hhciAqcHN6X2J1ZikKK3sKKwljaGFyICpwY2ggPSBwc3pfYnVmOworCXMzMiBiYXNlID0gMDsKKwl1bnNpZ25lZCBsb25nIHJlczsKKwlpbnQgcmV0X3ZhbDsKKworCXdoaWxlIChpc3NwYWNlKCpwY2gpKQorCQlwY2grKzsKKworCWlmICgqcGNoID09ICctJyB8fCAqcGNoID09ICcrJykgeworCQliYXNlID0gMTA7CisJCXBjaCsrOworCX0gZWxzZSBpZiAoKnBjaCAmJiB0b2xvd2VyKHBjaFtzdHJsZW4ocGNoKSAtIDFdKSA9PSAnaCcpIHsKKwkJYmFzZSA9IDE2OworCX0KKworCXJldF92YWwgPSBzdHJpY3Rfc3RydG91bChwY2gsIGJhc2UsICZyZXMpOworCisJcmV0dXJuIHJldF92YWwgPyA6IHJlczsKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfYXR0cnNfZnJvbV9idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQYXJzZSB0aGUgY29udGVudCBvZiBhIGJ1ZmZlciBmaWxsZWQgd2l0aCBEU1Atc2lkZSBkYXRhIGFuZAorICogICAgICByZXRyaWV2ZSBhbiBvYmplY3QncyBhdHRyaWJ1dGVzIGZyb20gaXQuIElNUE9SVEFOVDogQXNzdW1lIHRoZQorICogICAgICBidWZmZXIgaGFzIGJlZW4gY29udmVydGVkIGZyb20gRFNQIGZvcm1hdCB0byBHUFAgZm9ybWF0LgorICovCitzdGF0aWMgaW50IGdldF9hdHRyc19mcm9tX2J1ZihjaGFyICpwc3pfYnVmLCB1MzIgdWxfYnVmX3NpemUsCisJCQkJICAgICBlbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLAorCQkJCSAgICAgc3RydWN0IGRjZF9nZW5lcmljb2JqICpnZW5fb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCWNoYXIgc2Vwc1tdID0gIiwgIjsKKwljaGFyICpwc3pfY3VyOworCWNoYXIgKnRva2VuOworCXMzMiB0b2tlbl9sZW4gPSAwOworCXUzMiBpID0gMDsKKyNpZmRlZiBfREJfVElPTUFQCisJczMyIGVudHJ5X2lkOworI2VuZGlmCisKKwlEQkNfUkVRVUlSRShwc3pfYnVmICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHVsX2J1Zl9zaXplICE9IDApOworCURCQ19SRVFVSVJFKChvYmpfdHlwZSA9PSBEU1BfRENETk9ERVRZUEUpCisJCSAgICB8fCAob2JqX3R5cGUgPT0gRFNQX0RDRFBST0NFU1NPUlRZUEUpKTsKKwlEQkNfUkVRVUlSRShnZW5fb2JqICE9IE5VTEwpOworCisJc3dpdGNoIChvYmpfdHlwZSkgeworCWNhc2UgRFNQX0RDRE5PREVUWVBFOgorCQkvKgorCQkgKiBQYXJzZSBDT0ZGIHNlY3QgYnVmZmVyIHRvIHJldHJpZXZlIGluZGl2aWR1YWwgdG9rZW5zIHVzZWQKKwkJICogdG8gZmlsbCBpbiBvYmplY3QgYXR0cnMuCisJCSAqLworCQlwc3pfY3VyID0gcHN6X2J1ZjsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBjYl9zdHJ1Y3QgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLmNiX3N0cnVjdCA9CisJCSAgICAodTMyKSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGRzcF91dWlkIHVpX25vZGVfaWQgKi8KKwkJdXVpZF91dWlkX2Zyb21fc3RyaW5nKHRva2VuLAorCQkJCSAgICAgICZnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCQkJICAgICAgdWlfbm9kZV9pZCk7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBhY19uYW1lICovCisJCURCQ19SRVFVSVJFKHRva2VuKTsKKwkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJaWYgKHRva2VuX2xlbiA+IERTUF9NQVhOQU1FTEVOIC0gMSkKKwkJCXRva2VuX2xlbiA9IERTUF9NQVhOQU1FTEVOIC0gMTsKKworCQlzdHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5hY19uYW1lLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5hY19uYW1lW3Rva2VuX2xlbl0gPSAnXDAnOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCS8qIHUzMiBudHlwZSAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnR5cGUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkvKiB1MzIgY2FjaGVfb25fZ3BwICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5jYWNoZV9vbl9ncHAgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkvKiBkc3BfcmVzb3VyY2VyZXFtdHMgZHNwX3Jlc291cmNlX3JlcW10cyAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuZHNwX3Jlc291cmNlX3JlcW10cy4KKwkJICAgIGNiX3N0cnVjdCA9ICh1MzIpIGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5zdGF0aWNfZGF0YV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5nbG9iYWxfZGF0YV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy5wcm9ncmFtX21lbV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkgICAgZHNwX3Jlc291cmNlX3JlcW10cy51d2NfZXhlY3V0aW9uX3RpbWUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLnV3Y19wZXJpb2QgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkJICAgIGRzcF9yZXNvdXJjZV9yZXFtdHMudXdjX2RlYWRsaW5lID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLmF2Z19leGVjdGlvbl90aW1lID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuCisJCSAgICBkc3BfcmVzb3VyY2VfcmVxbXRzLm1pbmltdW1fcGVyaW9kID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBzMzIgcHJpbyAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMucHJpbyA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogdTMyIHN0YWNrX3NpemUgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLnN0YWNrX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBzeXNfc3RhY2tfc2l6ZSAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuc3lzX3N0YWNrX3NpemUgPQorCQkgICAgYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiB1MzIgc3RhY2tfc2VnICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5zdGFja19zZWcgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBtZXNzYWdlX2RlcHRoICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5tZXNzYWdlX2RlcHRoID0KKwkJICAgIGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogdTMyIG51bV9pbnB1dF9zdHJlYW1zICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5udW1faW5wdXRfc3RyZWFtcyA9CisJCSAgICBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiBudW1fb3V0cHV0X3N0cmVhbXMgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLm51bV9vdXRwdXRfc3RyZWFtcyA9CisJCSAgICBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIHUzMiB1dGltZW91dCAqLworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMudXRpbWVvdXQgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGNoYXIgKnBzdHJfY3JlYXRlX3BoYXNlX2Z4biAqLworCQlEQkNfUkVRVUlSRSh0b2tlbik7CisJCXRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9jcmVhdGVfcGhhc2VfZnhuLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4blt0b2tlbl9sZW5dID0KKwkJICAgICdcMCc7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBjaGFyICpwc3RyX2V4ZWN1dGVfcGhhc2VfZnhuICovCisJCURCQ19SRVFVSVJFKHRva2VuKTsKKwkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9leGVjdXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9leGVjdXRlX3BoYXNlX2Z4biwKKwkJCXRva2VuLCB0b2tlbl9sZW4pOworCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuW3Rva2VuX2xlbl0gPQorCQkgICAgJ1wwJzsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCS8qIGNoYXIgKnBzdHJfZGVsZXRlX3BoYXNlX2Z4biAqLworCQlEQkNfUkVRVUlSRSh0b2tlbik7CisJCXRva2VuX2xlbiA9IHN0cmxlbih0b2tlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZGVsZXRlX3BoYXNlX2Z4biA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCXN0cm5jcHkoZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuLAorCQkJdG9rZW4sIHRva2VuX2xlbik7CisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZGVsZXRlX3BoYXNlX2Z4blt0b2tlbl9sZW5dID0KKwkJICAgICdcMCc7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBTZWdtZW50IGlkIGZvciBtZXNzYWdlIGJ1ZmZlcnMgKi8KKwkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoubXNnX3NlZ2lkID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQkvKiBNZXNzYWdlIG5vdGlmaWNhdGlvbiB0eXBlICovCisJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm1zZ19ub3RpZnlfdHlwZSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJLyogY2hhciAqcHN0cl9pX2FsZ19uYW1lICovCisJCWlmICh0b2tlbikgeworCQkJdG9rZW5fbGVuID0gc3RybGVuKHRva2VuKTsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSA9CisJCQkJCWt6YWxsb2ModG9rZW5fbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCQlzdHJuY3B5KGdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSwKKwkJCQl0b2tlbiwgdG9rZW5fbGVuKTsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZVt0b2tlbl9sZW5dID0KKwkJCSAgICAnXDAnOworCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQl9CisKKwkJLyogTG9hZCB0eXBlIChzdGF0aWMsIGR5bmFtaWMsIG9yIG92ZXJsYXkpICovCisJCWlmICh0b2tlbikgeworCQkJZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmoudXNfbG9hZF90eXBlID0gYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBEeW5hbWljIGxvYWQgZGF0YSByZXF1aXJlbWVudHMgKi8KKwkJaWYgKHRva2VuKSB7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai51bF9kYXRhX21lbV9zZWdfbWFzayA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBEeW5hbWljIGxvYWQgY29kZSByZXF1aXJlbWVudHMgKi8KKwkJaWYgKHRva2VuKSB7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5ub2RlX29iai51bF9jb2RlX21lbV9zZWdfbWFzayA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCX0KKworCQkvKiBFeHRyYWN0IG5vZGUgcHJvZmlsZXMgaW50byBub2RlIHByb3BlcnRpZXMgKi8KKwkJaWYgKHRva2VuKSB7CisKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5jb3VudF9wcm9maWxlcyA9CisJCQkgICAgYXRvaSh0b2tlbik7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBpIDwKKwkJCSAgICAgZ2VuX29iai0+b2JqX2RhdGEubm9kZV9vYmouCisJCQkgICAgIG5kYl9wcm9wcy5jb3VudF9wcm9maWxlczsgaSsrKSB7CisJCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkJCWlmICh0b2tlbikgeworCQkJCQkvKiBIZWFwIFNpemUgZm9yIHRoZSBub2RlICovCisJCQkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLgorCQkJCQkgICAgbmRiX3Byb3BzLm5vZGVfcHJvZmlsZXNbaV0uCisJCQkJCSAgICB1bF9oZWFwX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQlpZiAodG9rZW4pIHsKKwkJCWdlbl9vYmotPm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5zdGFja19zZWdfbmFtZSA9CisJCQkgICAgKHUzMikgKHRva2VuKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBEU1BfRENEUFJPQ0VTU09SVFlQRToKKwkJLyoKKwkJICogUGFyc2UgQ09GRiBzZWN0IGJ1ZmZlciB0byByZXRyaWV2ZSBpbmRpdmlkdWFsIHRva2VucyB1c2VkCisJCSAqIHRvIGZpbGwgaW4gb2JqZWN0IGF0dHJzLgorCQkgKi8KKwkJcHN6X2N1ciA9IHBzel9idWY7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8uY2Jfc3RydWN0ID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8ucHJvY2Vzc29yX2ZhbWlseSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLnByb2Nlc3Nvcl90eXBlID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8uY2xvY2tfcmF0ZSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLnVsX2ludGVybmFsX21lbV9zaXplID0gYXRvaSh0b2tlbik7CisJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKworCQlnZW5fb2JqLT5vYmpfZGF0YS5wcm9jX2luZm8udWxfZXh0ZXJuYWxfbWVtX3NpemUgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby5wcm9jZXNzb3JfaWQgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby50eV9ydW5uaW5nX3J0b3MgPSBhdG9pKHRva2VuKTsKKwkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCisJCWdlbl9vYmotPm9ial9kYXRhLnByb2NfaW5mby5ub2RlX21pbl9wcmlvcml0eSA9IGF0b2kodG9rZW4pOworCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisKKwkJZ2VuX29iai0+b2JqX2RhdGEucHJvY19pbmZvLm5vZGVfbWF4X3ByaW9yaXR5ID0gYXRvaSh0b2tlbik7CisKKyNpZmRlZiBfREJfVElPTUFQCisJCS8qIFByb2Mgb2JqZWN0IG1heSBjb250YWluIGFkZGl0aW9uYWwoZXh0ZW5kZWQpIGF0dHJpYnV0ZXMuICovCisJCS8qIGF0dHIgbXVzdCBtYXRjaCBwcm9jLmh4eCAqLworCQlmb3IgKGVudHJ5X2lkID0gMDsgZW50cnlfaWQgPCA3OyBlbnRyeV9pZCsrKSB7CisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5leHRfcHJvY19vYmoudHlfdGxiW2VudHJ5X2lkXS4KKwkJCSAgICB1bF9ncHBfcGh5cyA9IGF0b2kodG9rZW4pOworCisJCQl0b2tlbiA9IHN0cnNlcCgmcHN6X2N1ciwgc2Vwcyk7CisJCQlnZW5fb2JqLT5vYmpfZGF0YS5leHRfcHJvY19vYmoudHlfdGxiW2VudHJ5X2lkXS4KKwkJCSAgICB1bF9kc3BfdmlydCA9IGF0b2kodG9rZW4pOworCQl9CisjZW5kaWYKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBDb21wcmVzc0J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbXByZXNzIHRoZSBEU1AgYnVmZmVyLCBpZiBuZWNlc3NhcnksIHRvIGNvbmZvcm0gdG8gUEMgZm9ybWF0LgorICovCitzdGF0aWMgdm9pZCBjb21wcmVzc19idWYoY2hhciAqcHN6X2J1ZiwgdTMyIHVsX2J1Zl9zaXplLCBzMzIgY2hhcl9zaXplKQoreworCWNoYXIgKnA7CisJY2hhciBjaDsKKwljaGFyICpxOworCisJcCA9IHBzel9idWY7CisJaWYgKHAgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChxID0gcHN6X2J1ZjsgcSA8IChwc3pfYnVmICsgdWxfYnVmX3NpemUpOykgeworCQljaCA9IGRzcF9jaGFyMl9ncHBfY2hhcihxLCBjaGFyX3NpemUpOworCQlpZiAoY2ggPT0gJ1xcJykgeworCQkJcSArPSBjaGFyX3NpemU7CisJCQljaCA9IGRzcF9jaGFyMl9ncHBfY2hhcihxLCBjaGFyX3NpemUpOworCQkJc3dpdGNoIChjaCkgeworCQkJY2FzZSAndCc6CisJCQkJKnAgPSAnXHQnOworCQkJCWJyZWFrOworCisJCQljYXNlICduJzoKKwkJCQkqcCA9ICdcbic7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgJ3InOgorCQkJCSpwID0gJ1xyJzsKKwkJCQlicmVhazsKKworCQkJY2FzZSAnMCc6CisJCQkJKnAgPSAnXDAnOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCSpwID0gY2g7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkqcCA9IGNoOworCQl9CisJCXArKzsKKwkJcSArPSBjaGFyX3NpemU7CisJfQorCisJLyogTlVMTCBvdXQgcmVtYWluZGVyIG9mIGJ1ZmZlci4gKi8KKwl3aGlsZSAocCA8IHEpCisJCSpwKysgPSAnXDAnOworfQorCisvKgorICogID09PT09PT09IGRzcF9jaGFyMl9ncHBfY2hhciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvbnZlcnQgRFNQIGNoYXIgdG8gaG9zdCBHUFAgY2hhciBpbiBhIHBvcnRhYmxlIG1hbm5lcgorICovCitzdGF0aWMgY2hhciBkc3BfY2hhcjJfZ3BwX2NoYXIoY2hhciAqd29yZCwgczMyIGRzcF9jaGFyX3NpemUpCit7CisJY2hhciBjaCA9ICdcMCc7CisJY2hhciAqY2hfc3JjOworCXMzMiBpOworCisJZm9yIChjaF9zcmMgPSB3b3JkLCBpID0gZHNwX2NoYXJfc2l6ZTsgaSA+IDA7IGktLSkKKwkJY2ggfD0gKmNoX3NyYysrOworCisJcmV0dXJuIGNoOworfQorCisvKgorICogID09PT09PT09IGdldF9kZXBfbGliX2luZm8gPT09PT09PT0KKyAqLworc3RhdGljIGludCBnZXRfZGVwX2xpYl9pbmZvKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJICAgc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQkgICB1MTYgKm51bV9saWJzLAorCQkJCSAgIHUxNiAqbnVtX3BlcnNfbGlicywKKwkJCQkgICBzdHJ1Y3QgZHNwX3V1aWQgKmRlcF9saWJfdXVpZHMsCisJCQkJICAgYm9vbCAqcHJzdG50X2RlcF9saWJzLAorCQkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmRjZF9tZ3Jfb2JqID0gaGRjZF9tZ3I7CisJY2hhciAqcHN6X2NvZmZfYnVmID0gTlVMTDsKKwljaGFyICpwc3pfY3VyOworCWNoYXIgKnBzel9maWxlX25hbWUgPSBOVUxMOworCXN0cnVjdCBjb2RfbGlicmFyeW9iaiAqbGliID0gTlVMTDsKKwl1MzIgdWxfYWRkciA9IDA7CS8qIFVzZWQgYnkgY29kX2dldF9zZWN0aW9uICovCisJdTMyIHVsX2xlbiA9IDA7CQkvKiBVc2VkIGJ5IGNvZF9nZXRfc2VjdGlvbiAqLworCXUzMiBkd19kYXRhX3NpemUgPSBDT0RfTUFYUEFUSExFTkdUSDsKKwljaGFyIHNlcHNbXSA9ICIsICI7CisJY2hhciAqdG9rZW4gPSBOVUxMOworCWJvb2wgZ2V0X3V1aWRzID0gKGRlcF9saWJfdXVpZHMgIT0gTlVMTCk7CisJdTE2IGRlcF9saWJzID0gMDsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCURCQ19SRVFVSVJFKGhkY2RfbWdyKTsKKwlEQkNfUkVRVUlSRShudW1fbGlicyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSh1dWlkX29iaiAhPSBOVUxMKTsKKworCS8qICBJbml0aWFsaXplIHRvIDAgZGVwZW5kZW50IGxpYnJhcmllcywgaWYgb25seSBjb3VudGluZyBudW1iZXIgb2YKKwkgKiAgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCWlmICghZ2V0X3V1aWRzKSB7CisJCSpudW1fbGlicyA9IDA7CisJCSpudW1fcGVyc19saWJzID0gMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgZmlsZSBuYW1lICovCisJcHN6X2ZpbGVfbmFtZSA9IGt6YWxsb2MoZHdfZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocHN6X2ZpbGVfbmFtZSA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5ICovCisJCXN0YXR1cyA9IGRjZF9nZXRfbGlicmFyeV9uYW1lKGhkY2RfbWdyLCB1dWlkX29iaiwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJICAgICAgJmR3X2RhdGFfc2l6ZSwgcGhhc2UsIE5VTEwpOworCX0KKworCS8qIE9wZW4gdGhlIGxpYnJhcnkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBjb2Rfb3BlbihkY2RfbWdyX29iai0+Y29kX21nciwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkgIENPRF9OT0xPQUQsICZsaWIpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBHZXQgZGVwZW5kZW50IGxpYnJhcnkgc2VjdGlvbiBpbmZvcm1hdGlvbi4gKi8KKwkJc3RhdHVzID0gY29kX2dldF9zZWN0aW9uKGxpYiwgREVQTElCU0VDVCwgJnVsX2FkZHIsICZ1bF9sZW4pOworCisJCWlmIChzdGF0dXMpIHsKKwkJCS8qIE9rLCBubyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJCQl1bF9sZW4gPSAwOworCQkJc3RhdHVzID0gMDsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgfHwgISh1bF9sZW4gPiAwKSkKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBBbGxvY2F0ZSB6ZXJvZWQgYnVmZmVyLiAqLworCXBzel9jb2ZmX2J1ZiA9IGt6YWxsb2ModWxfbGVuICsgNCwgR0ZQX0tFUk5FTCk7CisJaWYgKHBzel9jb2ZmX2J1ZiA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJLyogUmVhZCBzZWN0aW9uIGNvbnRlbnRzLiAqLworCXN0YXR1cyA9IGNvZF9yZWFkX3NlY3Rpb24obGliLCBERVBMSUJTRUNULCBwc3pfY29mZl9idWYsIHVsX2xlbik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwkvKiBDb21wcmVzcyBhbmQgZm9ybWF0IERTUCBidWZmZXIgdG8gY29uZm9ybSB0byBQQyBmb3JtYXQuICovCisJY29tcHJlc3NfYnVmKHBzel9jb2ZmX2J1ZiwgdWxfbGVuLCBEU1BXT1JEU0laRSk7CisKKwkvKiBSZWFkIGZyb20gYnVmZmVyICovCisJcHN6X2N1ciA9IHBzel9jb2ZmX2J1ZjsKKwl3aGlsZSAoKHRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKSkgJiYgKnRva2VuICE9ICdcMCcpIHsKKwkJaWYgKGdldF91dWlkcykgeworCQkJaWYgKGRlcF9saWJzID49ICpudW1fbGlicykgeworCQkJCS8qIEdvbmUgYmV5b25kIHRoZSBsaW1pdCAqLworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBSZXRyaWV2ZSBVVUlEIHN0cmluZy4gKi8KKwkJCQl1dWlkX3V1aWRfZnJvbV9zdHJpbmcodG9rZW4sCisJCQkJCQkgICAgICAmKGRlcF9saWJfdXVpZHMKKwkJCQkJCQlbZGVwX2xpYnNdKSk7CisJCQkJLyogSXMgdGhpcyBsaWJyYXJ5IHBlcnNpc3RlbnQ/ICovCisJCQkJdG9rZW4gPSBzdHJzZXAoJnBzel9jdXIsIHNlcHMpOworCQkJCXByc3RudF9kZXBfbGlic1tkZXBfbGlic10gPSBhdG9pKHRva2VuKTsKKwkJCQlkZXBfbGlicysrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQWR2YW5jIHRvIG5leHQgdG9rZW4gKi8KKwkJCXRva2VuID0gc3Ryc2VwKCZwc3pfY3VyLCBzZXBzKTsKKwkJCWlmIChhdG9pKHRva2VuKSkKKwkJCQkoKm51bV9wZXJzX2xpYnMpKys7CisKKwkJCS8qIEp1c3QgY291bnRpbmcgbnVtYmVyIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMgKi8KKwkJCSgqbnVtX2xpYnMpKys7CisJCX0KKwl9CitmdW5jX2NvbnQ6CisJaWYgKGxpYikKKwkJY29kX2Nsb3NlKGxpYik7CisKKwkvKiBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGR5bmFtaWMgYnVmZmVycy4gKi8KKwlrZnJlZShwc3pfZmlsZV9uYW1lKTsKKworCWtmcmVlKHBzel9jb2ZmX2J1Zik7CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGlzcC5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZGlzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3Y2U0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kaXNwLmMKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisgKiBkaXNwLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogTm9kZSBEaXNwYXRjaGVyIGludGVyZmFjZS4gQ29tbXVuaWNhdGVzIHdpdGggUmVzb3VyY2UgTWFuYWdlciBTZXJ2ZXIKKyAqIChSTVMpIG9uIERTUC4gQWNjZXNzIHRvIFJNUyBpcyBzeW5jaHJvbml6ZWQgaW4gTk9ERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMaW5rIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9jaG5sZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorCisvKiBTaXplIG9mIGEgcmVwbHkgZnJvbSBSTVMgKi8KKyNkZWZpbmUgUkVQTFlTSVpFICgzICogc2l6ZW9mKHJtc193b3JkKSkKKworLyogUmVzZXJ2ZWQgY2hhbm5lbCBvZmZzZXRzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggUk1TICovCisjZGVmaW5lIENITkxUT1JNU09GRlNFVCAgICAgICAwCisjZGVmaW5lIENITkxGUk9NUk1TT0ZGU0VUICAgICAxCisKKyNkZWZpbmUgQ0hOTElPUkVRUyAgICAgIDEKKworLyoKKyAqICA9PT09PT09PSBkaXNwX29iamVjdCA9PT09PT09PQorICovCitzdHJ1Y3QgZGlzcF9vYmplY3QgeworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsJLyogRGV2aWNlIGZvciB0aGlzIHByb2Nlc3NvciAqLworCS8qIEZ1bmN0aW9uIGludGVyZmFjZSB0byBCcmlkZ2UgZHJpdmVyICovCisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfbWdyICpoY2hubF9tZ3I7CS8qIENoYW5uZWwgbWFuYWdlciAqLworCXN0cnVjdCBjaG5sX29iamVjdCAqY2hubF90b19kc3A7CS8qIENobmwgZm9yIGNvbW1hbmRzIHRvIFJNUyAqLworCXN0cnVjdCBjaG5sX29iamVjdCAqY2hubF9mcm9tX2RzcDsJLyogQ2hubCBmb3IgcmVwbGllcyBmcm9tIFJNUyAqLworCXU4ICpwYnVmOwkJLyogQnVmZmVyIGZvciBjb21tYW5kcywgcmVwbGllcyAqLworCXUzMiB1bF9idWZzaXplOwkJLyogcGJ1ZiBzaXplIGluIGJ5dGVzICovCisJdTMyIHVsX2J1ZnNpemVfcm1zOwkvKiBwYnVmIHNpemUgaW4gUk1TIHdvcmRzICovCisJdTMyIGNoYXJfc2l6ZTsJCS8qIFNpemUgb2YgRFNQIGNoYXJhY3RlciAqLworCXUzMiB3b3JkX3NpemU7CQkvKiBTaXplIG9mIERTUCB3b3JkICovCisJdTMyIGRhdGFfbWF1X3NpemU7CS8qIFNpemUgb2YgRFNQIERhdGEgTUFVICovCit9OworCitzdGF0aWMgdTMyIHJlZnM7CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9kaXNwKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmopOworc3RhdGljIGludCBmaWxsX3N0cmVhbV9kZWYocm1zX3dvcmQgKnBkd19idWYsIHUzMiAqcHRvdGFsLCB1MzIgb2Zmc2V0LAorCQkJCSAgc3RydWN0IG5vZGVfc3RybWRlZiBzdHJtX2RlZiwgdTMyIG1heCwKKwkJCQkgIHUzMiBjaGFyc19pbl9ybXNfd29yZCk7CitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLCB1MzIgdGltZW91dCwKKwkJCSAgICAgICB1MzIgdWxfYnl0ZXMsIHUzMiAqcGR3X2FyZyk7CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBOT0RFIERpc3BhdGNoZXIgb2JqZWN0LgorICovCitpbnQgZGlzcF9jcmVhdGUoc3RydWN0IGRpc3Bfb2JqZWN0ICoqZGlzcGF0Y2hfb2JqLAorCQkgICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGRpc3BfYXR0ciAqZGlzcF9hdHRycykKK3sKKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXUzMiB1bF9jaG5sX2lkOworCXN0cnVjdCBjaG5sX2F0dHIgY2hubF9hdHRyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl1OCBkZXZfdHlwZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkaXNwYXRjaF9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoZGlzcF9hdHRycyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSBOVUxMKTsKKworCSpkaXNwYXRjaF9vYmogPSBOVUxMOworCisJLyogQWxsb2NhdGUgTm9kZSBEaXNwYXRjaGVyIG9iamVjdCAqLworCWRpc3Bfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpc3Bfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRpc3Bfb2JqID09IE5VTEwpCisJCXN0YXR1cyA9IC1FTk9NRU07CisJZWxzZQorCQlkaXNwX29iai0+aGRldl9vYmogPSBoZGV2X29iajsKKworCS8qIEdldCBDaGFubmVsIG1hbmFnZXIgYW5kIEJyaWRnZSBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdyKGhkZXZfb2JqLCAmKGRpc3Bfb2JqLT5oY2hubF9tZ3IpKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSh2b2lkKWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmaW50Zl9meG5zKTsKKwkJCWRpc3Bfb2JqLT5pbnRmX2Z4bnMgPSBpbnRmX2Z4bnM7CisJCX0KKwl9CisKKwkvKiBjaGVjayBkZXZpY2UgdHlwZSBhbmQgZGVjaWRlIGlmIHN0cmVhbXMgb3IgbWVzc2FnJ2luZyBpcyB1c2VkIGZvcgorCSAqIFJNUy9FRFMgKi8KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19jb250OworCX0KKworCWRpc3Bfb2JqLT5jaGFyX3NpemUgPSBEU1BXT1JEU0laRTsKKwlkaXNwX29iai0+d29yZF9zaXplID0gRFNQV09SRFNJWkU7CisJZGlzcF9vYmotPmRhdGFfbWF1X3NpemUgPSBEU1BXT1JEU0laRTsKKwkvKiBPcGVuIGNoYW5uZWxzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFJNUyAqLworCWNobmxfYXR0cl9vYmoudWlvX3JlcXMgPSBDSE5MSU9SRVFTOworCWNobmxfYXR0cl9vYmouZXZlbnRfb2JqID0gTlVMTDsKKwl1bF9jaG5sX2lkID0gZGlzcF9hdHRycy0+dWxfY2hubF9vZmZzZXQgKyBDSE5MVE9STVNPRkZTRVQ7CisJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX29wZW4pICgmKGRpc3Bfb2JqLT5jaG5sX3RvX2RzcCksCisJCQkJCSAgICAgIGRpc3Bfb2JqLT5oY2hubF9tZ3IsCisJCQkJCSAgICAgIENITkxfTU9ERVRPRFNQLCB1bF9jaG5sX2lkLAorCQkJCQkgICAgICAmY2hubF9hdHRyX29iaik7CisKKwlpZiAoIXN0YXR1cykgeworCQl1bF9jaG5sX2lkID0gZGlzcF9hdHRycy0+dWxfY2hubF9vZmZzZXQgKyBDSE5MRlJPTVJNU09GRlNFVDsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fY2hubF9vcGVuKSAoJihkaXNwX29iai0+Y2hubF9mcm9tX2RzcCksCisJCQkJCQkgZGlzcF9vYmotPmhjaG5sX21nciwKKwkJCQkJCSBDSE5MX01PREVGUk9NRFNQLCB1bF9jaG5sX2lkLAorCQkJCQkJICZjaG5sX2F0dHJfb2JqKTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBjb21tYW5kcywgcmVwbGllcyAqLworCQlkaXNwX29iai0+dWxfYnVmc2l6ZSA9IGRpc3BfYXR0cnMtPnVsX2NobmxfYnVmX3NpemU7CisJCWRpc3Bfb2JqLT51bF9idWZzaXplX3JtcyA9IFJNU19DT01NQU5EQlVGU0laRTsKKwkJZGlzcF9vYmotPnBidWYgPSBremFsbG9jKGRpc3Bfb2JqLT51bF9idWZzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRpc3Bfb2JqLT5wYnVmID09IE5VTEwpCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykKKwkJKmRpc3BhdGNoX29iaiA9IGRpc3Bfb2JqOworCWVsc2UKKwkJZGVsZXRlX2Rpc3AoZGlzcF9vYmopOworCisJREJDX0VOU1VSRSgoc3RhdHVzICYmICpkaXNwYXRjaF9vYmogPT0gTlVMTCkgfHwKKwkJCQkoIXN0YXR1cyAmJiAqZGlzcGF0Y2hfb2JqKSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX2RlbGV0ZSA9PT09PT09PQorICogIERlbGV0ZSB0aGUgTk9ERSBEaXNwYXRjaGVyLgorICovCit2b2lkIGRpc3BfZGVsZXRlKHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmopCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKworCWRlbGV0ZV9kaXNwKGRpc3Bfb2JqKTsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX2V4aXQgPT09PT09PT0KKyAqICBEaXNjb250aW51ZSB1c2FnZSBvZiBESVNQIG1vZHVsZS4KKyAqLwordm9pZCBkaXNwX2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9pbml0ID09PT09PT09CisgKiAgSW5pdGlhbGl6ZSB0aGUgRElTUCBtb2R1bGUuCisgKi8KK2Jvb2wgZGlzcF9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSB0YXJnZXQuCisgKi8KK2ludCBkaXNwX25vZGVfY2hhbmdlX3ByaW9yaXR5KHN0cnVjdCBkaXNwX29iamVjdCAqZGlzcF9vYmosCisJCQkJICAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSAgICAgdTMyIHJtc19meG4sIG5vZGVlbnYgbm9kZV9lbnYsIHMzMiBwcmlvKQoreworCXUzMiBkd19hcmc7CisJc3RydWN0IHJtc19jb21tYW5kICpybXNfY21kOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKwlEQkNfUkVRVUlSRShobm9kZSAhPSBOVUxMKTsKKworCS8qIFNlbmQgbWVzc2FnZSB0byBSTVMgdG8gY2hhbmdlIHByaW9yaXR5ICovCisJcm1zX2NtZCA9IChzdHJ1Y3Qgcm1zX2NvbW1hbmQgKikoZGlzcF9vYmotPnBidWYpOworCXJtc19jbWQtPmZ4biA9IChybXNfd29yZCkgKHJtc19meG4pOworCXJtc19jbWQtPmFyZzEgPSAocm1zX3dvcmQpIG5vZGVfZW52OworCXJtc19jbWQtPmFyZzIgPSBwcmlvOworCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwgbm9kZV9nZXRfdGltZW91dChobm9kZSksCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHJtc19jb21tYW5kKSwgJmR3X2FyZyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9jcmVhdGUgPT09PT09PT0KKyAqICBDcmVhdGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbi4KKyAqLworaW50IGRpc3Bfbm9kZV9jcmVhdGUoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwKKwkJCSAgICBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgcm1zX2Z4biwKKwkJCSAgICB1MzIgdWxfY3JlYXRlX2Z4biwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgbm9kZV9jcmVhdGVhcmdzICpwYXJncywKKwkJCSAgICBub2RlZW52ICpub2RlX2VudikKK3sKKwlzdHJ1Y3Qgbm9kZV9tc2dhcmdzIG5vZGVfbXNnX2FyZ3M7CisJc3RydWN0IG5vZGVfdGFza2FyZ3MgdGFza19hcmdfb2JqOworCXN0cnVjdCBybXNfY29tbWFuZCAqcm1zX2NtZDsKKwlzdHJ1Y3Qgcm1zX21zZ19hcmdzICpwbXNnX2FyZ3M7CisJc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncyAqbW9yZV90YXNrX2FyZ3M7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXUzMiBkd19sZW5ndGg7CisJcm1zX3dvcmQgKnBkd19idWYgPSBOVUxMOworCXUzMiB1bF9ieXRlczsKKwl1MzIgaTsKKwl1MzIgdG90YWw7CisJdTMyIGNoYXJzX2luX3Jtc193b3JkOworCXMzMiB0YXNrX2FyZ3Nfb2Zmc2V0OworCXMzMiBzaW9faW5fZGVmX29mZnNldDsKKwlzMzIgc2lvX291dF9kZWZfb2Zmc2V0OworCXMzMiBzaW9fZGVmc19vZmZzZXQ7CisJczMyIGFyZ3Nfb2Zmc2V0ID0gLTE7CisJczMyIG9mZnNldDsKKwlzdHJ1Y3Qgbm9kZV9zdHJtZGVmIHN0cm1fZGVmOworCXUzMiBtYXg7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF9ub2RlaW5mbyBub2RlX2luZm87CisJdTggZGV2X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGlzcF9vYmopOworCURCQ19SRVFVSVJFKGhub2RlICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5vZGVfZ2V0X3R5cGUoaG5vZGUpICE9IE5PREVfREVWSUNFKTsKKwlEQkNfUkVRVUlSRShub2RlX2VudiAhPSBOVUxMKTsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoZGlzcF9vYmotPmhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiB1bmtub3duIGRldmljZSB0eXBlID0gMHgleFxuIiwKKwkJCV9fZnVuY19fLCBkZXZfdHlwZSk7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCURCQ19SRVFVSVJFKHBhcmdzICE9IE5VTEwpOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCW5vZGVfbXNnX2FyZ3MgPSBwYXJncy0+YXNhLm5vZGVfbXNnX2FyZ3M7CisJbWF4ID0gZGlzcF9vYmotPnVsX2J1ZnNpemVfcm1zOwkvKk1heCAjIG9mIFJNUyB3b3JkcyB0aGF0IGNhbiBiZSBzZW50ICovCisJREJDX0FTU0VSVChtYXggPT0gUk1TX0NPTU1BTkRCVUZTSVpFKTsKKwljaGFyc19pbl9ybXNfd29yZCA9IHNpemVvZihybXNfd29yZCkgLyBkaXNwX29iai0+Y2hhcl9zaXplOworCS8qIE51bWJlciBvZiBSTVMgd29yZHMgbmVlZGVkIHRvIGhvbGQgYXJnIGRhdGEgKi8KKwlkd19sZW5ndGggPQorCSAgICAobm9kZV9tc2dfYXJncy5hcmdfbGVuZ3RoICsgY2hhcnNfaW5fcm1zX3dvcmQgLQorCSAgICAgMSkgLyBjaGFyc19pbl9ybXNfd29yZDsKKwkvKiBNYWtlIHN1cmUgbXNnIGFyZ3MgYW5kIGNvbW1hbmQgZml0IGluIGJ1ZmZlciAqLworCXRvdGFsID0gc2l6ZW9mKHN0cnVjdCBybXNfY29tbWFuZCkgLyBzaXplb2Yocm1zX3dvcmQpICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBybXNfbXNnX2FyZ3MpCisJICAgIC8gc2l6ZW9mKHJtc193b3JkKSAtIDEgKyBkd19sZW5ndGg7CisJaWYgKHRvdGFsID49IG1heCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IE1lc3NhZ2UgYXJncyB0b28gbGFyZ2UgZm9yIGJ1ZmZlciEgc2l6ZSAiCisJCQkiPSAlZCwgbWF4ID0gJWRcbiIsIF9fZnVuY19fLCB0b3RhbCwgbWF4KTsKKwl9CisJLyoKKwkgKiAgRmlsbCBpbiBidWZmZXIgdG8gc2VuZCB0byBSTVMuCisJICogIFRoZSBidWZmZXIgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgIGZvcm1hdDoKKwkgKgorCSAqICBSTVMgY29tbWFuZDoKKwkgKiAgICAgIEFkZHJlc3Mgb2YgUk1TX0NyZWF0ZU5vZGUoKQorCSAqICAgICAgQWRkcmVzcyBvZiBub2RlJ3MgY3JlYXRlIGZ1bmN0aW9uCisJICogICAgICBkdW1teSBhcmd1bWVudAorCSAqICAgICAgbm9kZSB0eXBlCisJICoKKwkgKiAgTWVzc2FnZSBBcmdzOgorCSAqICAgICAgbWF4IG51bWJlciBvZiBtZXNzYWdlcworCSAqICAgICAgc2VnaWQgZm9yIG1lc3NhZ2UgYnVmZmVyIGFsbG9jYXRpb24KKwkgKiAgICAgIG5vdGlmaWNhdGlvbiB0eXBlIHRvIHVzZSB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQKKwkgKiAgICAgIGxlbmd0aCBvZiBtZXNzYWdlIGFyZyBkYXRhCisJICogICAgICBtZXNzYWdlIGFyZ3MgZGF0YQorCSAqCisJICogIFRhc2sgQXJncyAoaWYgdGFzayBvciBzb2NrZXQgbm9kZSk6CisJICogICAgICBwcmlvcml0eQorCSAqICAgICAgc3RhY2sgc2l6ZQorCSAqICAgICAgc3lzdGVtIHN0YWNrIHNpemUKKwkgKiAgICAgIHN0YWNrIHNlZ21lbnQKKwkgKiAgICAgIG1pc2MKKwkgKiAgICAgIG51bWJlciBvZiBpbnB1dCBzdHJlYW1zCisJICogICAgICBwU1RSTUluRGVmW10gLSBvZmZzZXRzIG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIGlucHV0IHN0cmVhbXMKKwkgKiAgICAgIG51bWJlciBvZiBvdXRwdXQgc3RyZWFtcworCSAqICAgICAgcFNUUk1PdXREZWZbXSAtIG9mZnNldHMgb2YgU1RSTSBkZWZpbml0aW9ucyBmb3Igb3V0cHV0CisJICogICAgICBzdHJlYW1zCisJICogICAgICBTVFJNSW5EZWZbXSAtIGFycmF5IG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIGlucHV0IHN0cmVhbXMKKwkgKiAgICAgIFNUUk1PdXREZWZbXSAtIGFycmF5IG9mIFNUUk0gZGVmaW5pdGlvbnMgZm9yIG91dHB1dCBzdHJlYW1zCisJICoKKwkgKiAgU29ja2V0IEFyZ3MgKGlmIERBSVMgc29ja2V0IG5vZGUpOgorCSAqCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJdG90YWwgPSAwOwkvKiBUb3RhbCBudW1iZXIgb2Ygd29yZHMgaW4gYnVmZmVyIHNvIGZhciAqLworCQlwZHdfYnVmID0gKHJtc193b3JkICopIGRpc3Bfb2JqLT5wYnVmOworCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKXBkd19idWY7CisJCXJtc19jbWQtPmZ4biA9IChybXNfd29yZCkgKHJtc19meG4pOworCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSAodWxfY3JlYXRlX2Z4bik7CisJCWlmIChub2RlX2dldF9sb2FkX3R5cGUoaG5vZGUpID09IE5MRFJfRFlOQU1JQ0xPQUQpIHsKKwkJCS8qIEZsdXNoIElDQUNIRSBvbiBMb2FkICovCisJCQlybXNfY21kLT5hcmcyID0gMTsJLyogZHVtbXkgYXJndW1lbnQgKi8KKwkJfSBlbHNlIHsKKwkJCS8qIERvIG5vdCBmbHVzaCBJQ0FDSEUgKi8KKwkJCXJtc19jbWQtPmFyZzIgPSAwOwkvKiBkdW1teSBhcmd1bWVudCAqLworCQl9CisJCXJtc19jbWQtPmRhdGEgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwkJLyoKKwkJICogIGFyZ3Nfb2Zmc2V0IGlzIHRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgZmllbGQgaW4gc3RydWN0CisJCSAqICBybXNfY29tbWFuZCBzdHJ1Y3R1cmUuIFdlIG5lZWQgdGhpcyB0byBjYWxjdWxhdGUgc3RyZWFtCisJCSAqICBkZWZpbml0aW9uIG9mZnNldHMuCisJCSAqLworCQlhcmdzX29mZnNldCA9IDM7CisJCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQpIC8gc2l6ZW9mKHJtc193b3JkKTsKKwkJLyogTWVzc2FnZSBhcmdzICovCisJCXBtc2dfYXJncyA9IChzdHJ1Y3Qgcm1zX21zZ19hcmdzICopKHBkd19idWYgKyB0b3RhbCk7CisJCXBtc2dfYXJncy0+bWF4X21zZ3MgPSBub2RlX21zZ19hcmdzLm1heF9tc2dzOworCQlwbXNnX2FyZ3MtPnNlZ2lkID0gbm9kZV9tc2dfYXJncy5zZWdfaWQ7CisJCXBtc2dfYXJncy0+bm90aWZ5X3R5cGUgPSBub2RlX21zZ19hcmdzLm5vdGlmeV90eXBlOworCQlwbXNnX2FyZ3MtPmFyZ19sZW5ndGggPSBub2RlX21zZ19hcmdzLmFyZ19sZW5ndGg7CisJCXRvdGFsICs9IHNpemVvZihzdHJ1Y3Qgcm1zX21zZ19hcmdzKSAvIHNpemVvZihybXNfd29yZCkgLSAxOworCQltZW1jcHkocGR3X2J1ZiArIHRvdGFsLCBub2RlX21zZ19hcmdzLnBkYXRhLAorCQkgICAgICAgbm9kZV9tc2dfYXJncy5hcmdfbGVuZ3RoKTsKKwkJdG90YWwgKz0gZHdfbGVuZ3RoOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgbm9kZSBpcyBhIHRhc2sgbm9kZSwgY29weSB0YXNrIGNyZWF0ZSBhcmd1bWVudHMgaW50byAgYnVmZmVyICovCisJaWYgKG5vZGVfdHlwZSA9PSBOT0RFX1RBU0sgfHwgbm9kZV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQl0YXNrX2FyZ19vYmogPSBwYXJncy0+YXNhLnRhc2tfYXJnX29iajsKKwkJdGFza19hcmdzX29mZnNldCA9IHRvdGFsOworCQl0b3RhbCArPSBzaXplb2Yoc3RydWN0IHJtc19tb3JlX3Rhc2tfYXJncykgLyBzaXplb2Yocm1zX3dvcmQpICsKKwkJICAgIDEgKyB0YXNrX2FyZ19vYmoubnVtX2lucHV0cyArIHRhc2tfYXJnX29iai5udW1fb3V0cHV0czsKKwkJLyogQ29weSB0YXNrIGFyZ3VtZW50cyAqLworCQlpZiAodG90YWwgPCBtYXgpIHsKKwkJCXRvdGFsID0gdGFza19hcmdzX29mZnNldDsKKwkJCW1vcmVfdGFza19hcmdzID0gKHN0cnVjdCBybXNfbW9yZV90YXNrX2FyZ3MgKikocGR3X2J1ZiArCisJCQkJCQkJCSAgICAgICB0b3RhbCk7CisJCQkvKgorCQkJICogR2V0IHNvbWUgaW1wb3J0YW50IGluZm8gYWJvdXQgdGhlIG5vZGUuIE5vdGUgdGhhdCB3ZQorCQkJICogZG9uJ3QganVzdCByZWFjaCBpbnRvIHRoZSBobm9kZSBzdHJ1Y3QgYmVjYXVzZQorCQkJICogdGhhdCB3b3VsZCBicmVhayB0aGUgbm9kZSBvYmplY3QncyBhYnN0cmFjdGlvbi4KKwkJCSAqLworCQkJZ2V0X25vZGVfaW5mbyhobm9kZSwgJm5vZGVfaW5mbyk7CisJCQltb3JlX3Rhc2tfYXJncy0+cHJpb3JpdHkgPSBub2RlX2luZm8uZXhlY3V0aW9uX3ByaW9yaXR5OworCQkJbW9yZV90YXNrX2FyZ3MtPnN0YWNrX3NpemUgPSB0YXNrX2FyZ19vYmouc3RhY2tfc2l6ZTsKKwkJCW1vcmVfdGFza19hcmdzLT5zeXNzdGFja19zaXplID0KKwkJCSAgICB0YXNrX2FyZ19vYmouc3lzX3N0YWNrX3NpemU7CisJCQltb3JlX3Rhc2tfYXJncy0+c3RhY2tfc2VnID0gdGFza19hcmdfb2JqLnN0YWNrX3NlZzsKKwkJCW1vcmVfdGFza19hcmdzLT5oZWFwX2FkZHIgPSB0YXNrX2FyZ19vYmoudWRzcF9oZWFwX2FkZHI7CisJCQltb3JlX3Rhc2tfYXJncy0+aGVhcF9zaXplID0gdGFza19hcmdfb2JqLmhlYXBfc2l6ZTsKKwkJCW1vcmVfdGFza19hcmdzLT5taXNjID0gdGFza19hcmdfb2JqLnVsX2RhaXNfYXJnOworCQkJbW9yZV90YXNrX2FyZ3MtPm51bV9pbnB1dF9zdHJlYW1zID0KKwkJCSAgICB0YXNrX2FyZ19vYmoubnVtX2lucHV0czsKKwkJCXRvdGFsICs9CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBybXNfbW9yZV90YXNrX2FyZ3MpIC8KKwkJCSAgICBzaXplb2Yocm1zX3dvcmQpOworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogdWRzcF9oZWFwX2FkZHIgJXgsIGhlYXBfc2l6ZSAleFxuIiwKKwkJCQlfX2Z1bmNfXywgdGFza19hcmdfb2JqLnVkc3BfaGVhcF9hZGRyLAorCQkJCXRhc2tfYXJnX29iai5oZWFwX3NpemUpOworCQkJLyogS2VlcCB0cmFjayBvZiBwU0lPSW5EZWZbXSBhbmQgcFNJT091dERlZltdCisJCQkgKiBwb3NpdGlvbnMgaW4gdGhlIGJ1ZmZlciwgc2luY2UgdGhpcyBuZWVkcyB0byBiZQorCQkJICogZmlsbGVkIGluIGxhdGVyLiAqLworCQkJc2lvX2luX2RlZl9vZmZzZXQgPSB0b3RhbDsKKwkJCXRvdGFsICs9IHRhc2tfYXJnX29iai5udW1faW5wdXRzOworCQkJcGR3X2J1Zlt0b3RhbCsrXSA9IHRhc2tfYXJnX29iai5udW1fb3V0cHV0czsKKwkJCXNpb19vdXRfZGVmX29mZnNldCA9IHRvdGFsOworCQkJdG90YWwgKz0gdGFza19hcmdfb2JqLm51bV9vdXRwdXRzOworCQkJc2lvX2RlZnNfb2Zmc2V0ID0gdG90YWw7CisJCQkvKiBGaWxsIFNJTyBkZWZzIGFuZCBvZmZzZXRzICovCisJCQlvZmZzZXQgPSBzaW9fZGVmc19vZmZzZXQ7CisJCQlmb3IgKGkgPSAwOyBpIDwgdGFza19hcmdfb2JqLm51bV9pbnB1dHM7IGkrKykgeworCQkJCWlmIChzdGF0dXMpCisJCQkJCWJyZWFrOworCisJCQkJcGR3X2J1ZltzaW9faW5fZGVmX29mZnNldCArIGldID0KKwkJCQkgICAgKG9mZnNldCAtIGFyZ3Nfb2Zmc2V0KQorCQkJCSAgICAqIChzaXplb2Yocm1zX3dvcmQpIC8gRFNQV09SRFNJWkUpOworCQkJCXN0cm1fZGVmID0gdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldOworCQkJCXN0YXR1cyA9CisJCQkJICAgIGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKKwkJCQkJCSAgICBzdHJtX2RlZiwgbWF4LAorCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKKwkJCQlvZmZzZXQgPSB0b3RhbDsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IChpIDwgdGFza19hcmdfb2JqLm51bV9vdXRwdXRzKSAmJgorCQkJICAgICAoIXN0YXR1cyk7IGkrKykgeworCQkJCXBkd19idWZbc2lvX291dF9kZWZfb2Zmc2V0ICsgaV0gPQorCQkJCSAgICAob2Zmc2V0IC0gYXJnc19vZmZzZXQpCisJCQkJICAgICogKHNpemVvZihybXNfd29yZCkgLyBEU1BXT1JEU0laRSk7CisJCQkJc3RybV9kZWYgPSB0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW2ldOworCQkJCXN0YXR1cyA9CisJCQkJICAgIGZpbGxfc3RyZWFtX2RlZihwZHdfYnVmLCAmdG90YWwsIG9mZnNldCwKKwkJCQkJCSAgICBzdHJtX2RlZiwgbWF4LAorCQkJCQkJICAgIGNoYXJzX2luX3Jtc193b3JkKTsKKwkJCQlvZmZzZXQgPSB0b3RhbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIEFyZ3Mgd29uJ3QgZml0ICovCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJdWxfYnl0ZXMgPSB0b3RhbCAqIHNpemVvZihybXNfd29yZCk7CisJCURCQ19BU1NFUlQodWxfYnl0ZXMgPCAoUk1TX0NPTU1BTkRCVUZTSVpFICogc2l6ZW9mKHJtc193b3JkKSkpOworCQlzdGF0dXMgPSBzZW5kX21lc3NhZ2UoZGlzcF9vYmosIG5vZGVfZ2V0X3RpbWVvdXQoaG5vZGUpLAorCQkJCSAgICAgIHVsX2J5dGVzLCBub2RlX2Vudik7CisJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJLyoKKwkJCSAqIE1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGZyb20gUk1TLgorCQkJICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIE5vZGUncyBjcmVhdGUgZnVuY3Rpb24KKwkJCSAqIG9uIHRoZSBEU1Atc2lkZQorCQkJICovCisJCQlzdGF0dXMgPSAoKChybXNfd29yZCAqKSAoZGlzcF9vYmotPnBidWYpKVswXSk7CisJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1Atc2lkZSBmYWlsZWQ6IDB4JXhcbiIsCisJCQkJCV9fZnVuY19fLCBzdGF0dXMpOworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkaXNwX25vZGVfZGVsZXRlID09PT09PT09CisgKiAgcHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKgorICovCitpbnQgZGlzcF9ub2RlX2RlbGV0ZShzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJICAgIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBybXNfZnhuLAorCQkJICAgIHUzMiB1bF9kZWxldGVfZnhuLCBub2RlZW52IG5vZGVfZW52KQoreworCXUzMiBkd19hcmc7CisJc3RydWN0IHJtc19jb21tYW5kICpybXNfY21kOworCWludCBzdGF0dXMgPSAwOworCXU4IGRldl90eXBlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRpc3Bfb2JqKTsKKwlEQkNfUkVRVUlSRShobm9kZSAhPSBOVUxMKTsKKworCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoZGlzcF9vYmotPmhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJaWYgKCFzdGF0dXMpIHsKKworCQlpZiAoZGV2X3R5cGUgPT0gRFNQX1VOSVQpIHsKKworCQkJLyoKKwkJCSAqICBGaWxsIGluIGJ1ZmZlciB0byBzZW5kIHRvIFJNUworCQkJICovCisJCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKWRpc3Bfb2JqLT5wYnVmOworCQkJcm1zX2NtZC0+ZnhuID0gKHJtc193b3JkKSAocm1zX2Z4bik7CisJCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSBub2RlX2VudjsKKwkJCXJtc19jbWQtPmFyZzIgPSAocm1zX3dvcmQpICh1bF9kZWxldGVfZnhuKTsKKwkJCXJtc19jbWQtPmRhdGEgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKworCQkJc3RhdHVzID0gc2VuZF9tZXNzYWdlKGRpc3Bfb2JqLCBub2RlX2dldF90aW1lb3V0KGhub2RlKSwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBybXNfY29tbWFuZCksCisJCQkJCSAgICAgICZkd19hcmcpOworCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJLyoKKwkJCQkgKiBNZXNzYWdlIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcm9tIFJNUy4KKwkJCQkgKiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgTm9kZSdzIGRlbGV0ZQorCQkJCSAqIGZ1bmN0aW9uIG9uIHRoZSBEU1Atc2lkZQorCQkJCSAqLworCQkJCXN0YXR1cyA9ICgoKHJtc193b3JkICopIChkaXNwX29iai0+cGJ1ZikpWzBdKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRFNQLXNpZGUgZmFpbGVkOiAiCisJCQkJCQkiMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRpc3Bfbm9kZV9ydW4gPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBTdGFydCBleGVjdXRpb24gb2YgYSBub2RlJ3MgZXhlY3V0ZSBwaGFzZSwgb3IgcmVzdW1lIGV4ZWN1dGlvbiBvZiBhIG5vZGUKKyAqICAgICAgdGhhdCBoYXMgYmVlbiBzdXNwZW5kZWQgKHZpYSBESVNQX05vZGVQYXVzZSgpKSBvbiB0aGUgRFNQLgorICovCitpbnQgZGlzcF9ub2RlX3J1bihzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqLAorCQkJIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBybXNfZnhuLAorCQkJIHUzMiB1bF9leGVjdXRlX2Z4biwgbm9kZWVudiBub2RlX2VudikKK3sKKwl1MzIgZHdfYXJnOworCXN0cnVjdCBybXNfY29tbWFuZCAqcm1zX2NtZDsKKwlpbnQgc3RhdHVzID0gMDsKKwl1OCBkZXZfdHlwZTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGlzcF9vYmopOworCURCQ19SRVFVSVJFKGhub2RlICE9IE5VTEwpOworCisJc3RhdHVzID0gZGV2X2dldF9kZXZfdHlwZShkaXNwX29iai0+aGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoIXN0YXR1cykgeworCisJCWlmIChkZXZfdHlwZSA9PSBEU1BfVU5JVCkgeworCisJCQkvKgorCQkJICogIEZpbGwgaW4gYnVmZmVyIHRvIHNlbmQgdG8gUk1TLgorCQkJICovCisJCQlybXNfY21kID0gKHN0cnVjdCBybXNfY29tbWFuZCAqKWRpc3Bfb2JqLT5wYnVmOworCQkJcm1zX2NtZC0+ZnhuID0gKHJtc193b3JkKSAocm1zX2Z4bik7CisJCQlybXNfY21kLT5hcmcxID0gKHJtc193b3JkKSBub2RlX2VudjsKKwkJCXJtc19jbWQtPmFyZzIgPSAocm1zX3dvcmQpICh1bF9leGVjdXRlX2Z4bik7CisJCQlybXNfY21kLT5kYXRhID0gbm9kZV9nZXRfdHlwZShobm9kZSk7CisKKwkJCXN0YXR1cyA9IHNlbmRfbWVzc2FnZShkaXNwX29iaiwgbm9kZV9nZXRfdGltZW91dChobm9kZSksCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgcm1zX2NvbW1hbmQpLAorCQkJCQkgICAgICAmZHdfYXJnKTsKKwkJCWlmIChzdGF0dXMgPj0gMCkgeworCQkJCS8qCisJCQkJICogTWVzc2FnZSBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJvbSBSTVMuCisJCQkJICogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIE5vZGUncyBleGVjdXRlCisJCQkJICogZnVuY3Rpb24gb24gdGhlIERTUC1zaWRlCisJCQkJICovCisJCQkJc3RhdHVzID0gKCgocm1zX3dvcmQgKikgKGRpc3Bfb2JqLT5wYnVmKSlbMF0pOworCQkJCWlmIChzdGF0dXMgPCAwKQorCQkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBEU1Atc2lkZSBmYWlsZWQ6ICIKKwkJCQkJCSIweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBkZWxldGVfZGlzcCA9PT09PT09PQorICogIHB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciB0aGUgZGlzcGF0Y2hlci4KKyAqLworc3RhdGljIHZvaWQgZGVsZXRlX2Rpc3Aoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKworCWlmIChkaXNwX29iaikgeworCQlpbnRmX2Z4bnMgPSBkaXNwX29iai0+aW50Zl9meG5zOworCisJCS8qIEZyZWUgTm9kZSBEaXNwYXRjaGVyIHJlc291cmNlcyAqLworCQlpZiAoZGlzcF9vYmotPmNobmxfZnJvbV9kc3ApIHsKKwkJCS8qIENoYW5uZWwgY2xvc2UgY2FuIGZhaWwgb25seSBpZiB0aGUgY2hhbm5lbCBoYW5kbGUKKwkJCSAqIGlzIGludmFsaWQuICovCisJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpCisJCQkgICAgKGRpc3Bfb2JqLT5jaG5sX2Zyb21fZHNwKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gY2xvc2UgY2hhbm5lbCAiCisJCQkJCSJmcm9tIFJNUzogMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisJCX0KKwkJaWYgKGRpc3Bfb2JqLT5jaG5sX3RvX2RzcCkgeworCQkJc3RhdHVzID0KKwkJCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpIChkaXNwX29iai0+CisJCQkJCQkJICBjaG5sX3RvX2RzcCk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkIHRvIGNsb3NlIGNoYW5uZWwgdG8iCisJCQkJCSIgUk1TOiAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKwkJfQorCQlrZnJlZShkaXNwX29iai0+cGJ1Zik7CisKKwkJa2ZyZWUoZGlzcF9vYmopOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBmaWxsX3N0cmVhbV9kZWYgPT09PT09PT0KKyAqICBwdXJwb3NlOgorICogICAgICBGaWxscyBzdHJlYW0gZGVmaW5pdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZmlsbF9zdHJlYW1fZGVmKHJtc193b3JkICpwZHdfYnVmLCB1MzIgKnB0b3RhbCwgdTMyIG9mZnNldCwKKwkJCQkgIHN0cnVjdCBub2RlX3N0cm1kZWYgc3RybV9kZWYsIHUzMiBtYXgsCisJCQkJICB1MzIgY2hhcnNfaW5fcm1zX3dvcmQpCit7CisJc3RydWN0IHJtc19zdHJtX2RlZiAqc3RybV9kZWZfb2JqOworCXUzMiB0b3RhbCA9ICpwdG90YWw7CisJdTMyIG5hbWVfbGVuOworCXUzMiBkd19sZW5ndGg7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAodG90YWwgKyBzaXplb2Yoc3RydWN0IHJtc19zdHJtX2RlZikgLyBzaXplb2Yocm1zX3dvcmQpID49IG1heCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJc3RybV9kZWZfb2JqID0gKHN0cnVjdCBybXNfc3RybV9kZWYgKikocGR3X2J1ZiArIHRvdGFsKTsKKwkJc3RybV9kZWZfb2JqLT5idWZzaXplID0gc3RybV9kZWYuYnVmX3NpemU7CisJCXN0cm1fZGVmX29iai0+bmJ1ZnMgPSBzdHJtX2RlZi5udW1fYnVmczsKKwkJc3RybV9kZWZfb2JqLT5zZWdpZCA9IHN0cm1fZGVmLnNlZ19pZDsKKwkJc3RybV9kZWZfb2JqLT5hbGlnbiA9IHN0cm1fZGVmLmJ1Zl9hbGlnbm1lbnQ7CisJCXN0cm1fZGVmX29iai0+dGltZW91dCA9IHN0cm1fZGVmLnV0aW1lb3V0OworCX0KKworCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBTaW5jZSB3ZSBoYXZlbid0IGFkZGVkIHRoZSBkZXZpY2UgbmFtZSB5ZXQsIHN1YnRyYWN0CisJCSAqICAxIGZyb20gdG90YWwuCisJCSAqLworCQl0b3RhbCArPSBzaXplb2Yoc3RydWN0IHJtc19zdHJtX2RlZikgLyBzaXplb2Yocm1zX3dvcmQpIC0gMTsKKwkJREJDX1JFUVVJUkUoc3RybV9kZWYuc3pfZGV2aWNlKTsKKwkJZHdfbGVuZ3RoID0gc3RybGVuKHN0cm1fZGVmLnN6X2RldmljZSkgKyAxOworCisJCS8qIE51bWJlciBvZiBSTVNfV09SRFMgbmVlZGVkIHRvIGhvbGQgZGV2aWNlIG5hbWUgKi8KKwkJbmFtZV9sZW4gPQorCQkgICAgKGR3X2xlbmd0aCArIGNoYXJzX2luX3Jtc193b3JkIC0gMSkgLyBjaGFyc19pbl9ybXNfd29yZDsKKworCQlpZiAodG90YWwgKyBuYW1lX2xlbiA+PSBtYXgpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiAgWmVybyBvdXQgbGFzdCB3b3JkLCBzaW5jZSB0aGUgZGV2aWNlIG5hbWUgbWF5IG5vdAorCQkJICogIGV4dGVuZCB0byBjb21wbGV0ZWx5IGZpbGwgdGhpcyB3b3JkLgorCQkJICovCisJCQlwZHdfYnVmW3RvdGFsICsgbmFtZV9sZW4gLSAxXSA9IDA7CisJCQkvKiogVE9ETyBVU0UgU0VSVklDRVMgKiAqLworCQkJbWVtY3B5KHBkd19idWYgKyB0b3RhbCwgc3RybV9kZWYuc3pfZGV2aWNlLCBkd19sZW5ndGgpOworCQkJdG90YWwgKz0gbmFtZV9sZW47CisJCQkqcHRvdGFsID0gdG90YWw7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHNlbmRfbWVzc2FnZSA9PT09PT0KKyAqICBTZW5kIGNvbW1hbmQgbWVzc2FnZSB0byBSTVMsIGdldCByZXBseSBmcm9tIFJNUy4KKyAqLworc3RhdGljIGludCBzZW5kX21lc3NhZ2Uoc3RydWN0IGRpc3Bfb2JqZWN0ICpkaXNwX29iaiwgdTMyIHRpbWVvdXQsCisJCQkgICAgICAgdTMyIHVsX2J5dGVzLCB1MzIgKnBkd19hcmcpCit7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1MzIgZHdfYXJnID0gMDsKKwl1OCAqcGJ1ZjsKKwlzdHJ1Y3QgY2hubF9pb2MgY2hubF9pb2Nfb2JqOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocGR3X2FyZyAhPSBOVUxMKTsKKworCSpwZHdfYXJnID0gKHUzMikgTlVMTDsKKwlpbnRmX2Z4bnMgPSBkaXNwX29iai0+aW50Zl9meG5zOworCWNobmxfb2JqID0gZGlzcF9vYmotPmNobmxfdG9fZHNwOworCXBidWYgPSBkaXNwX29iai0+cGJ1ZjsKKworCS8qIFNlbmQgdGhlIGNvbW1hbmQgKi8KKwlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfYWRkX2lvX3JlcSkgKGNobmxfb2JqLCBwYnVmLCB1bF9ieXRlcywgMCwKKwkJCQkJCSAgICAwTCwgZHdfYXJnKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pb2MpIChjaG5sX29iaiwgdGltZW91dCwgJmNobmxfaW9jX29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCFDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCWlmIChDSE5MX0lTX1RJTUVEX09VVChjaG5sX2lvY19vYmopKQorCQkJCXN0YXR1cyA9IC1FVElNRTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJLyogR2V0IHRoZSByZXBseSAqLworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwljaG5sX29iaiA9IGRpc3Bfb2JqLT5jaG5sX2Zyb21fZHNwOworCXVsX2J5dGVzID0gUkVQTFlTSVpFOworCXN0YXR1cyA9ICgqaW50Zl9meG5zLT5wZm5fY2hubF9hZGRfaW9fcmVxKSAoY2hubF9vYmosIHBidWYsIHVsX2J5dGVzLAorCQkJCQkJICAgIDAsIDBMLCBkd19hcmcpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlzdGF0dXMgPQorCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfZ2V0X2lvYykgKGNobmxfb2JqLCB0aW1lb3V0LCAmY2hubF9pb2Nfb2JqKTsKKwlpZiAoIXN0YXR1cykgeworCQlpZiAoQ0hOTF9JU19USU1FRF9PVVQoY2hubF9pb2Nfb2JqKSkgeworCQkJc3RhdHVzID0gLUVUSU1FOworCQl9IGVsc2UgaWYgKGNobmxfaW9jX29iai5ieXRlX3NpemUgPCB1bF9ieXRlcykgeworCQkJLyogRGlkIG5vdCBnZXQgYWxsIG9mIHRoZSByZXBseSBmcm9tIHRoZSBSTVMgKi8KKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCWlmIChDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCQlEQkNfQVNTRVJUKGNobmxfaW9jX29iai5wYnVmID09IHBidWYpOworCQkJCXN0YXR1cyA9ICgqKChybXNfd29yZCAqKSBjaG5sX2lvY19vYmoucGJ1ZikpOworCQkJCSpwZHdfYXJnID0KKwkJCQkgICAgKCgocm1zX3dvcmQgKikgKGNobmxfaW9jX29iai5wYnVmKSlbMV0pOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQl9CisJCX0KKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThkZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2LmMKQEAgLTAsMCArMSw5MjkgQEAKKy8qCisgKiBkcnYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBEU1AvQklPUyBCcmlkZ2UgcmVzb3VyY2UgYWxsb2NhdGlvbiBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbGlzdC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbm9kZXByaXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwY2hubC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9yZXNvdXJjZWNsZWFudXAuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmluZXMsIERhdGEgU3RydWN0dXJlcywgVHlwZWRlZnMgKi8KK3N0cnVjdCBkcnZfb2JqZWN0IHsKKwlzdHJ1Y3QgbHN0X2xpc3QgKmRldl9saXN0OworCXN0cnVjdCBsc3RfbGlzdCAqZGV2X25vZGVfc3RyaW5nOworfTsKKworLyoKKyAqICBUaGlzIGlzIHRoZSBEZXZpY2UgRXh0ZW5zaW9uLiBOYW1lZCB3aXRoIHRoZSBQcmVmaXgKKyAqICBEUlZfIHNpbmNlIGl0IGlzIGxpdmluZyBpbiB0aGlzIG1vZHVsZQorICovCitzdHJ1Y3QgZHJ2X2V4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEhdOworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyBzMzIgcmVmczsKK3N0YXRpYyBib29sIGV4dF9waHlzX21lbV9wb29sX2VuYWJsZWQ7CitzdHJ1Y3QgZXh0X3BoeXNfbWVtX3Bvb2wgeworCXUzMiBwaHlzX21lbV9iYXNlOworCXUzMiBwaHlzX21lbV9zaXplOworCXUzMiB2aXJ0X21lbV9iYXNlOworCXUzMiBuZXh0X3BoeXNfYWxsb2NfcHRyOworfTsKK3N0YXRpYyBzdHJ1Y3QgZXh0X3BoeXNfbWVtX3Bvb2wgZXh0X21lbV9wb29sOworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAqLworc3RhdGljIGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMpOworCisKKy8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSAqLworCitzdGF0aWMgaW50IGRydl9wcm9jX2ZyZWVfbm9kZV9yZXMoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKTsKKworLyogQWxsb2NhdGUgYW5kIGFkZCBhIG5vZGUgcmVzb3VyY2UgZWxlbWVudAorKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIC5Ob2RlX0FsbG9jYXRlLiAqLworaW50IGRydl9pbnNlcnRfbm9kZV9yZXNfZWxlbWVudCh2b2lkICpobm9kZSwgdm9pZCAqbm9kZV9yZXNvdXJjZSwKKwkJCQkgICAgICAgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlX3Jlc19vYmogPQorCSAgICAoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKilub2RlX3Jlc291cmNlOworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByb2Nlc3NfY3R4dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgcmV0dmFsOworCisJKm5vZGVfcmVzX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlX3Jlc19vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpub2RlX3Jlc19vYmopIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkoKm5vZGVfcmVzX29iaiktPmhub2RlID0gaG5vZGU7CisJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+bm9kZV9pZCwgKm5vZGVfcmVzX29iaiwKKwkJCQkJCSYoKm5vZGVfcmVzX29iaiktPmlkKTsKKwlpZiAocmV0dmFsID09IC1FQUdBSU4pIHsKKwkJaWYgKCFpZHJfcHJlX2dldChjdHh0LT5ub2RlX2lkLCBHRlBfS0VSTkVMKSkgeworCQkJcHJfZXJyKCIlczogT1VUIE9GIE1FTU9SWVxuIiwgX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQlyZXR2YWwgPSBpZHJfZ2V0X25ldyhjdHh0LT5ub2RlX2lkLCAqbm9kZV9yZXNfb2JqLAorCQkJCQkJJigqbm9kZV9yZXNfb2JqKS0+aWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXM6IEZBSUxFRCwgSURSIGlzIEZVTExcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKQorCQlrZnJlZSgqbm9kZV9yZXNfb2JqKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorICogQWN0dWFsIE5vZGUgRGUtQWxsb2NhdGlvbiAqLworc3RhdGljIGludCBkcnZfcHJvY19mcmVlX25vZGVfcmVzKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gZGF0YTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzX29iaiA9IHA7CisJdTMyIG5vZGVfc3RhdGU7CisKKwlpZiAobm9kZV9yZXNfb2JqLT5ub2RlX2FsbG9jYXRlZCkgeworCQlub2RlX3N0YXRlID0gbm9kZV9nZXRfc3RhdGUobm9kZV9yZXNfb2JqLT5obm9kZSk7CisJCWlmIChub2RlX3N0YXRlIDw9IE5PREVfREVMRVRJTkcpIHsKKwkJCWlmICgobm9kZV9zdGF0ZSA9PSBOT0RFX1JVTk5JTkcpIHx8CisJCQkgICAgKG5vZGVfc3RhdGUgPT0gTk9ERV9QQVVTRUQpIHx8CisJCQkgICAgKG5vZGVfc3RhdGUgPT0gTk9ERV9URVJNSU5BVElORykpCisJCQkJbm9kZV90ZXJtaW5hdGUKKwkJCQkgICAgKG5vZGVfcmVzX29iai0+aG5vZGUsICZzdGF0dXMpOworCisJCQlub2RlX2RlbGV0ZShub2RlX3Jlc19vYmosIGN0eHQpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE1hcHBlZCBhbmQgUmVzZXJ2ZWQgRE1NIHJlc291cmNlcyAqLworaW50IGRydl9yZW1vdmVfYWxsX2RtbV9yZXNfZWxlbWVudHModm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKXByb2Nlc3NfY3R4dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKnRlbXBfbWFwLCAqbWFwX29iajsKKwlzdHJ1Y3QgZG1tX3Jzdl9vYmplY3QgKnRlbXBfcnN2LCAqcnN2X29iajsKKworCS8qIEZyZWUgRE1NIG1hcHBlZCBtZW1vcnkgcmVzb3VyY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcF9vYmosIHRlbXBfbWFwLCAmY3R4dC0+ZG1tX21hcF9saXN0LCBsaW5rKSB7CisJCXN0YXR1cyA9IHByb2NfdW5fbWFwKGN0eHQtPmhwcm9jZXNzb3IsCisJCQkJICAgICAodm9pZCAqKW1hcF9vYmotPmRzcF9hZGRyLCBjdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCXByX2VycigiJXM6IHByb2NfdW5fbWFwIGZhaWxlZCEiCisJCQkgICAgICAgIiBzdGF0dXMgPSAweCV4biIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KKworCS8qIEZyZWUgRE1NIHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnN2X29iaiwgdGVtcF9yc3YsICZjdHh0LT5kbW1fcnN2X2xpc3QsIGxpbmspIHsKKwkJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShjdHh0LT5ocHJvY2Vzc29yLCAodm9pZCAqKQorCQkJCQkJcnN2X29iai0+ZHNwX3Jlc2VydmVkX2FkZHIsCisJCQkJCQljdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCXByX2VycigiJXM6IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgZmFpbGVkISIKKwkJCSAgICAgICAiIHN0YXR1cyA9IDB4JXhuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFVwZGF0ZSBOb2RlIGFsbG9jYXRpb24gc3RhdHVzICovCit2b2lkIGRydl9wcm9jX25vZGVfdXBkYXRlX3N0YXR1cyh2b2lkICpub2RlX3Jlc291cmNlLCBzMzIgc3RhdHVzKQoreworCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKm5vZGVfcmVzX29iaiA9CisJICAgIChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXNvdXJjZTsKKwlEQkNfQVNTRVJUKG5vZGVfcmVzb3VyY2UgIT0gTlVMTCk7CisJbm9kZV9yZXNfb2JqLT5ub2RlX2FsbG9jYXRlZCA9IHN0YXR1czsKK30KKworLyogVXBkYXRlIE5vZGUgSGVhcCBzdGF0dXMgKi8KK3ZvaWQgZHJ2X3Byb2Nfbm9kZV91cGRhdGVfaGVhcF9zdGF0dXModm9pZCAqbm9kZV9yZXNvdXJjZSwgczMyIHN0YXR1cykKK3sKKwlzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICpub2RlX3Jlc19vYmogPQorCSAgICAoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqKW5vZGVfcmVzb3VyY2U7CisJREJDX0FTU0VSVChub2RlX3Jlc291cmNlICE9IE5VTEwpOworCW5vZGVfcmVzX29iai0+aGVhcF9hbGxvY2F0ZWQgPSBzdGF0dXM7Cit9CisKKy8qIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorKiBUaGlzIGlzIGNhbGxlZCBmcm9tIC5icmlkZ2VfcmVsZWFzZS4KKyAqLworaW50IGRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gcHJvY2Vzc19jdHh0OworCisJaWRyX2Zvcl9lYWNoKGN0eHQtPm5vZGVfaWQsIGRydl9wcm9jX2ZyZWVfbm9kZV9yZXMsIGN0eHQpOworCWlkcl9kZXN0cm95KGN0eHQtPm5vZGVfaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIHRoZSBTVFJNIHJlc291cmNlIGVsZW1lbnQKKyogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGFjdHVhbCByZXNvdXJjZSBpcyBhbGxvY2F0ZWQKKyAqLworaW50IGRydl9wcm9jX2luc2VydF9zdHJtX3Jlc19lbGVtZW50KHZvaWQgKnN0cmVhbV9vYmosCisJCQkJCSAgICB2b2lkICpzdHJtX3Jlcywgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipwc3RybV9yZXMgPQorCSAgICAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKilzdHJtX3JlczsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKilwcm9jZXNzX2N0eHQ7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHJldHZhbDsKKworCSpwc3RybV9yZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCpwc3RybV9yZXMgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCSgqcHN0cm1fcmVzKS0+aHN0cmVhbSA9IHN0cmVhbV9vYmo7CisJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+c3RyZWFtX2lkLCAqcHN0cm1fcmVzLAorCQkJCQkJJigqcHN0cm1fcmVzKS0+aWQpOworCWlmIChyZXR2YWwgPT0gLUVBR0FJTikgeworCQlpZiAoIWlkcl9wcmVfZ2V0KGN0eHQtPnN0cmVhbV9pZCwgR0ZQX0tFUk5FTCkpIHsKKwkJCXByX2VycigiJXM6IE9VVCBPRiBNRU1PUllcbiIsIF9fZnVuY19fKTsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGZ1bmNfZW5kOworCQl9CisKKwkJcmV0dmFsID0gaWRyX2dldF9uZXcoY3R4dC0+c3RyZWFtX2lkLCAqcHN0cm1fcmVzLAorCQkJCQkJJigqcHN0cm1fcmVzKS0+aWQpOworCX0KKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiJXM6IEZBSUxFRCwgSURSIGlzIEZVTExcbiIsIF9fZnVuY19fKTsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkcnZfcHJvY19mcmVlX3N0cm1fcmVzKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqcHJvY2Vzc19jdHh0KQoreworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKmN0eHQgPSBwcm9jZXNzX2N0eHQ7CisJc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybV9yZXMgPSBwOworCXN0cnVjdCBzdHJlYW1faW5mbyBzdHJtX2luZm87CisJc3RydWN0IGRzcF9zdHJlYW1pbmZvIHVzZXI7CisJdTggKiphcF9idWZmZXIgPSBOVUxMOworCXU4ICpidWZfcHRyOworCXUzMiB1bF9ieXRlczsKKwl1MzIgZHdfYXJnOworCXMzMiB1bF9idWZfc2l6ZTsKKworCWlmIChzdHJtX3Jlcy0+bnVtX2J1ZnMpIHsKKwkJYXBfYnVmZmVyID0ga21hbGxvYygoc3RybV9yZXMtPm51bV9idWZzICoKKwkJCQkgICAgICAgc2l6ZW9mKHU4ICopKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhcF9idWZmZXIpIHsKKwkJCXN0cm1fZnJlZV9idWZmZXIoc3RybV9yZXMsCisJCQkJCQkgIGFwX2J1ZmZlciwKKwkJCQkJCSAgc3RybV9yZXMtPm51bV9idWZzLAorCQkJCQkJICBjdHh0KTsKKwkJCWtmcmVlKGFwX2J1ZmZlcik7CisJCX0KKwl9CisJc3RybV9pbmZvLnVzZXJfc3RybSA9ICZ1c2VyOworCXVzZXIubnVtYmVyX2J1ZnNfaW5fc3RyZWFtID0gMDsKKwlzdHJtX2dldF9pbmZvKHN0cm1fcmVzLT5oc3RyZWFtLCAmc3RybV9pbmZvLCBzaXplb2Yoc3RybV9pbmZvKSk7CisJd2hpbGUgKHVzZXIubnVtYmVyX2J1ZnNfaW5fc3RyZWFtLS0pCisJCXN0cm1fcmVjbGFpbShzdHJtX3Jlcy0+aHN0cmVhbSwgJmJ1Zl9wdHIsICZ1bF9ieXRlcywKKwkJCSAgICAgKHUzMiAqKSAmdWxfYnVmX3NpemUsICZkd19hcmcpOworCXN0cm1fY2xvc2Uoc3RybV9yZXMsIGN0eHQpOworCXJldHVybiAwOworfQorCisvKiBSZWxlYXNlIGFsbCBTdHJlYW0gcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorKiBUaGlzIGlzIGNhbGxlZCBmcm9tIC5icmlkZ2VfcmVsZWFzZS4KKyAqLworaW50IGRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKHZvaWQgKnByb2Nlc3NfY3R4dCkKK3sKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpjdHh0ID0gcHJvY2Vzc19jdHh0OworCisJaWRyX2Zvcl9lYWNoKGN0eHQtPnN0cmVhbV9pZCwgZHJ2X3Byb2NfZnJlZV9zdHJtX3JlcywgY3R4dCk7CisJaWRyX2Rlc3Ryb3koY3R4dC0+c3RyZWFtX2lkKTsKKworCXJldHVybiAwOworfQorCisvKiBVcGRhdGluZyB0aGUgc3RyZWFtIHJlc291cmNlIGVsZW1lbnQgKi8KK2ludCBkcnZfcHJvY191cGRhdGVfc3RybV9yZXModTMyIG51bV9idWZzLCB2b2lkICpzdHJtX3Jlc291cmNlcykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICoqc3RybV9yZXMgPQorCSAgICAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKilzdHJtX3Jlc291cmNlczsKKworCSgqc3RybV9yZXMpLT5udW1fYnVmcyA9IG51bV9idWZzOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIEdQUCBQUk9DRVNTIENMRUFOVVAgQ09ERSBFTkQgKi8KKworLyoKKyAqICA9PT09PT09PSA9IGRydl9jcmVhdGUgPT09PT09PT0gPQorICogIFB1cnBvc2U6CisgKiAgICAgIERSViBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBkdXJpbmcgRHJpdmVyIExvYWRpbmcuCisgKi8KK2ludCBkcnZfY3JlYXRlKHN0cnVjdCBkcnZfb2JqZWN0ICoqZHJ2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSBOVUxMOworCisJREJDX1JFUVVJUkUoZHJ2X29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlwZHJ2X29iamVjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcnZfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBkcnZfb2JqZWN0KSB7CisJCS8qIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBMaXN0IG9mIGRldmljZSBvYmplY3RzICovCisJCXBkcnZfb2JqZWN0LT5kZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChwZHJ2X29iamVjdC0+ZGV2X2xpc3QpIHsKKwkJCS8qIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBMaXN0IG9mIGRldmljZSBFeHRlbnNpb24gKi8KKwkJCXBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcgPQorCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksIEdGUF9LRVJORUwpOworCQkJaWYgKCEocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZykpIHsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQl9IGVsc2UgeworCQkJCUlOSVRfTElTVF9IRUFEKCZwZHJ2X29iamVjdC0+CisJCQkJCSAgICAgICBkZXZfbm9kZV9zdHJpbmctPmhlYWQpOworCQkJCUlOSVRfTElTVF9IRUFEKCZwZHJ2X29iamVjdC0+ZGV2X2xpc3QtPmhlYWQpOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIFN0b3JlIHRoZSBEUlYgT2JqZWN0IGluIHRoZSBSZWdpc3RyeSAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBjZmdfc2V0X29iamVjdCgodTMyKSBwZHJ2X29iamVjdCwgUkVHX0RSVl9PQkpFQ1QpOworCWlmICghc3RhdHVzKSB7CisJCSpkcnZfb2JqID0gcGRydl9vYmplY3Q7CisJfSBlbHNlIHsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9saXN0KTsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZyk7CisJCS8qIEZyZWUgdGhlIERSViBPYmplY3QgKi8KKwkJa2ZyZWUocGRydl9vYmplY3QpOworCX0KKworCURCQ19FTlNVUkUoc3RhdHVzIHx8IHBkcnZfb2JqZWN0KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgdGhlIERSViBtb2R1bGUuCisgKi8KK3ZvaWQgZHJ2X2V4aXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlyZWZzLS07CisKKwlEQkNfRU5TVVJFKHJlZnMgPj0gMCk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gPSBkcnZfZGVzdHJveSA9PT09PT09PSA9CisgKiAgcHVycG9zZToKKyAqICAgICAgSW52b2tlZCBkdXJpbmcgYnJpZGdlIGRlLWluaXRpYWxpemF0aW9uCisgKi8KK2ludCBkcnZfZGVzdHJveShzdHJ1Y3QgZHJ2X29iamVjdCAqZHJpdmVyX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKworCS8qCisJICogIERlbGV0ZSB0aGUgTGlzdCBpZiBpdCBleGlzdHMuU2hvdWxkIG5vdCBjb21lIGhlcmUKKwkgKiAgYXMgdGhlIGRydl9yZW1vdmVfZGV2X29iamVjdCBhbmQgdGhlIExhc3QgZHJ2X3JlcXVlc3RfcmVzb3VyY2VzCisJICogIHJlbW92ZXMgdGhlIGxpc3QgaWYgdGhlIGxpc3RzIGFyZSBlbXB0eS4KKwkgKi8KKwlrZnJlZShwZHJ2X29iamVjdC0+ZGV2X2xpc3QpOworCWtmcmVlKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcpOworCWtmcmVlKHBkcnZfb2JqZWN0KTsKKwkvKiBVcGRhdGUgdGhlIERSViBPYmplY3QgaW4gUmVnaXN0cnkgdG8gYmUgMCAqLworCSh2b2lkKWNmZ19zZXRfb2JqZWN0KDAsIFJFR19EUlZfT0JKRUNUKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2l2ZW4gYSBpbmRleCwgcmV0dXJucyBhIGhhbmRsZSB0byBEZXZPYmplY3QgZnJvbSB0aGUgbGlzdC4KKyAqLworaW50IGRydl9nZXRfZGV2X29iamVjdCh1MzIgaW5kZXgsIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaiwKKwkJCSAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfREVCVUcKKwkvKiB1c2VkIG9ubHkgZm9yIEFzc2VydGlvbnMgYW5kIGRlYnVnIG1lc3NhZ2VzICovCisJc3RydWN0IGRydl9vYmplY3QgKnBkcnZfb2JqID0gKHN0cnVjdCBkcnZfb2JqZWN0ICopaGRydl9vYmo7CisjZW5kaWYKKwlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKKwl1MzIgaTsKKwlEQkNfUkVRVUlSRShwZHJ2X29iaik7CisJREJDX1JFUVVJUkUoZGV2aWNlX29iaiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShpbmRleCA+PSAwKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX0FTU0VSVCghKExTVF9JU19FTVBUWShwZHJ2X29iai0+ZGV2X2xpc3QpKSk7CisKKwlkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7CisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJZGV2X29iaiA9CisJCSAgICAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X25leHRfZGV2X29iamVjdCgodTMyKSBkZXZfb2JqKTsKKwl9CisJaWYgKGRldl9vYmopIHsKKwkJKmRldmljZV9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkZXZfb2JqOworCX0gZWxzZSB7CisJCSpkZXZpY2Vfb2JqID0gTlVMTDsKKwkJc3RhdHVzID0gLUVQRVJNOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGZpcnN0IERldmljZSBPYmplY3QgaGFuZGxlIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgREVWX09CSkVDVHMgbWFpbnRhaW5lZCBieSBEUlYuCisgKi8KK3UzMiBkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3Qodm9pZCkKK3sKKwl1MzIgZHdfZGV2X29iamVjdCA9IDA7CisJc3RydWN0IGRydl9vYmplY3QgKnBkcnZfb2JqOworCisJaWYgKCFjZmdfZ2V0X29iamVjdCgodTMyICopICZwZHJ2X29iaiwgUkVHX0RSVl9PQkpFQ1QpKSB7CisJCWlmICgocGRydl9vYmotPmRldl9saXN0ICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbGlzdCkpCisJCQlkd19kZXZfb2JqZWN0ID0gKHUzMikgbHN0X2ZpcnN0KHBkcnZfb2JqLT5kZXZfbGlzdCk7CisJfQorCisJcmV0dXJuIGR3X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT0gRFJWX0dldEZpcnN0RGV2Tm9kZVN0cmluZyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIHRoZSBmaXJzdCBEZXZpY2UgRXh0ZW5zaW9uIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgUG9pbnRlciB0byBkZXZfbm9kZSBTdHJpbmdzIG1haW50YWluZWQgYnkgRFJWLgorICovCit1MzIgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKHZvaWQpCit7CisJdTMyIGR3X2Rldl9leHRlbnNpb24gPSAwOworCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iajsKKworCWlmICghY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmcGRydl9vYmosIFJFR19EUlZfT0JKRUNUKSkgeworCisJCWlmICgocGRydl9vYmotPmRldl9ub2RlX3N0cmluZyAhPSBOVUxMKSAmJgorCQkgICAgIUxTVF9JU19FTVBUWShwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nKSkgeworCQkJZHdfZGV2X2V4dGVuc2lvbiA9CisJCQkgICAgKHUzMikgbHN0X2ZpcnN0KHBkcnZfb2JqLT5kZXZfbm9kZV9zdHJpbmcpOworCQl9CisJfQorCisJcmV0dXJuIGR3X2Rldl9leHRlbnNpb247Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9vYmplY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgT2JqZWN0IGhhbmRsZSBmcm9tIGFuIGludGVybmFsIGxpbmtlZCBsaXN0IG9mCisgKiAgICAgIG9mIERFVl9PQkpFQ1RzIG1haW50YWluZWQgYnkgRFJWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseSBjYWxsZWQKKyAqICAgICAgZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCkgYW5kIHplcm8gb3IgbW9yZSBEUlZfR2V0TmV4dC4KKyAqLwordTMyIGRydl9nZXRfbmV4dF9kZXZfb2JqZWN0KHUzMiBoZGV2X29iaikKK3sKKwl1MzIgZHdfbmV4dF9kZXZfb2JqZWN0ID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmo7CisKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSAwKTsKKworCWlmICghY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmcGRydl9vYmosIFJFR19EUlZfT0JKRUNUKSkgeworCisJCWlmICgocGRydl9vYmotPmRldl9saXN0ICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbGlzdCkpIHsKKwkJCWR3X25leHRfZGV2X29iamVjdCA9ICh1MzIpIGxzdF9uZXh0KHBkcnZfb2JqLT5kZXZfbGlzdCwKKwkJCQkJCQkgICAgKHN0cnVjdCBsaXN0X2hlYWQgKikKKwkJCQkJCQkgICAgaGRldl9vYmopOworCQl9CisJfQorCXJldHVybiBkd19uZXh0X2Rldl9vYmplY3Q7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZSB0aGUgbmV4dCBEZXZpY2UgRXh0ZW5zaW9uIGZyb20gYW4gaW50ZXJuYWwgbGlua2VkIGxpc3Qgb2YKKyAqICAgICAgb2YgcG9pbnRlciB0byBEZXZOb2RlU3RyaW5nIG1haW50YWluZWQgYnkgRFJWLCBhZnRlciBoYXZpbmcgcHJldmlvdXNseQorICogICAgICBjYWxsZWQgZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKCkgYW5kIHplcm8gb3IgbW9yZQorICogICAgICBkcnZfZ2V0X25leHRfZGV2X2V4dGVuc2lvbigpLgorICovCit1MzIgZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24odTMyIGRldl9leHRlbnNpb24pCit7CisJdTMyIGR3X2Rldl9leHRlbnNpb24gPSAwOworCXN0cnVjdCBkcnZfb2JqZWN0ICpwZHJ2X29iajsKKworCURCQ19SRVFVSVJFKGRldl9leHRlbnNpb24gIT0gMCk7CisKKwlpZiAoIWNmZ19nZXRfb2JqZWN0KCh1MzIgKikgJnBkcnZfb2JqLCBSRUdfRFJWX09CSkVDVCkpIHsKKwkJaWYgKChwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nICE9IE5VTEwpICYmCisJCSAgICAhTFNUX0lTX0VNUFRZKHBkcnZfb2JqLT5kZXZfbm9kZV9zdHJpbmcpKSB7CisJCQlkd19kZXZfZXh0ZW5zaW9uID0KKwkJCSAgICAodTMyKSBsc3RfbmV4dChwZHJ2X29iai0+ZGV2X25vZGVfc3RyaW5nLAorCQkJCQkgICAoc3RydWN0IGxpc3RfaGVhZCAqKWRldl9leHRlbnNpb24pOworCQl9CisJfQorCisJcmV0dXJuIGR3X2Rldl9leHRlbnNpb247Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIERSViBtb2R1bGUgcHJpdmF0ZSBzdGF0ZS4KKyAqLworaW50IGRydl9pbml0KHZvaWQpCit7CisJczMyIHJldCA9IDE7CQkvKiBmdW5jdGlvbiByZXR1cm4gdmFsdWUgKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPj0gMCk7CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHJ2X2luc2VydF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5zZXJ0IGEgRGV2T2JqZWN0IGludG8gdGhlIGxpc3Qgb2YgTWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBkcnZfaW5zZXJ0X2Rldl9vYmplY3Qoc3RydWN0IGRydl9vYmplY3QgKmRyaXZlcl9vYmosCisJCQkJIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKwlEQkNfQVNTRVJUKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCk7CisKKwlsc3RfcHV0X3RhaWwocGRydl9vYmplY3QtPmRldl9saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKWhkZXZfb2JqKTsKKworCURCQ19FTlNVUkUoIUxTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X2xpc3QpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogID09PT09PT09IGRydl9yZW1vdmVfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFNlYXJjaCBmb3IgYW5kIHJlbW92ZSBhIERldmljZU9iamVjdCBmcm9tIHRoZSBnaXZlbiBsaXN0IG9mIERSVgorICogICAgICBvYmplY3RzLgorICovCitpbnQgZHJ2X3JlbW92ZV9kZXZfb2JqZWN0KHN0cnVjdCBkcnZfb2JqZWN0ICpkcml2ZXJfb2JqLAorCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKilkcml2ZXJfb2JqOworCXN0cnVjdCBsaXN0X2hlYWQgKmN1cl9lbGVtOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0KTsKKwlEQkNfUkVRVUlSRShoZGV2X29iaiAhPSBOVUxMKTsKKworCURCQ19SRVFVSVJFKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRSghTFNUX0lTX0VNUFRZKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCkpOworCisJLyogU2VhcmNoIGxpc3QgZm9yIHBfcHJvY19vYmplY3Q6ICovCisJZm9yIChjdXJfZWxlbSA9IGxzdF9maXJzdChwZHJ2X29iamVjdC0+ZGV2X2xpc3QpOyBjdXJfZWxlbSAhPSBOVUxMOworCSAgICAgY3VyX2VsZW0gPSBsc3RfbmV4dChwZHJ2X29iamVjdC0+ZGV2X2xpc3QsIGN1cl9lbGVtKSkgeworCQkvKiBJZiBmb3VuZCwgcmVtb3ZlIGl0LiAqLworCQlpZiAoKHN0cnVjdCBkZXZfb2JqZWN0ICopY3VyX2VsZW0gPT0gaGRldl9vYmopIHsKKwkJCWxzdF9yZW1vdmVfZWxlbShwZHJ2X29iamVjdC0+ZGV2X2xpc3QsIGN1cl9lbGVtKTsKKwkJCXN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBSZW1vdmUgbGlzdCBpZiBlbXB0eS4gKi8KKwlpZiAoTFNUX0lTX0VNUFRZKHBkcnZfb2JqZWN0LT5kZXZfbGlzdCkpIHsKKwkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9saXN0KTsKKwkJcGRydl9vYmplY3QtPmRldl9saXN0ID0gTlVMTDsKKwl9CisJREJDX0VOU1VSRSgocGRydl9vYmplY3QtPmRldl9saXN0ID09IE5VTEwpIHx8CisJCSAgICFMU1RfSVNfRU1QVFkocGRydl9vYmplY3QtPmRldl9saXN0KSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9yZXF1ZXN0X3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcXVlc3RzICByZXNvdXJjZXMgZnJvbSB0aGUgT1MuCisgKi8KK2ludCBkcnZfcmVxdWVzdF9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsIHUzMiAqZGV2X25vZGVfc3RyZykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3Q7CisJc3RydWN0IGRydl9leHQgKnBzemRldl9ub2RlOworCisJREJDX1JFUVVJUkUoZHdfY29udGV4dCAhPSAwKTsKKwlEQkNfUkVRVUlSRShkZXZfbm9kZV9zdHJnICE9IE5VTEwpOworCisJLyoKKwkgKiAgQWxsb2NhdGUgbWVtb3J5IHRvIGhvbGQgdGhlIHN0cmluZy4gVGhpcyB3aWxsIGxpdmUgdW50aWxsCisJICogIGl0IGlzIGZyZWVkIGluIHRoZSBSZWxlYXNlIHJlc291cmNlcy4gVXBkYXRlIHRoZSBkcml2ZXIgb2JqZWN0CisJICogIGxpc3QuCisJICovCisKKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZwZHJ2X29iamVjdCwgUkVHX0RSVl9PQkpFQ1QpOworCWlmICghc3RhdHVzKSB7CisJCXBzemRldl9ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydl9leHQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBzemRldl9ub2RlKSB7CisJCQlsc3RfaW5pdF9lbGVtKCZwc3pkZXZfbm9kZS0+bGluayk7CisJCQlzdHJuY3B5KHBzemRldl9ub2RlLT5zel9zdHJpbmcsCisJCQkJKGNoYXIgKilkd19jb250ZXh0LCBNQVhSRUdQQVRITEVOR1RIIC0gMSk7CisJCQlwc3pkZXZfbm9kZS0+c3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEggLSAxXSA9ICdcMCc7CisJCQkvKiBVcGRhdGUgdGhlIERyaXZlciBPYmplY3QgTGlzdCAqLworCQkJKmRldl9ub2RlX3N0cmcgPSAodTMyKSBwc3pkZXZfbm9kZS0+c3pfc3RyaW5nOworCQkJbHN0X3B1dF90YWlsKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcsCisJCQkJICAgICAoc3RydWN0IGxpc3RfaGVhZCAqKXBzemRldl9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQkqZGV2X25vZGVfc3RyZyA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IERyaXZlciBPYmplY3QgZnJvbSBSZWdpc3RyeSIsCisJCQlfX2Z1bmNfXyk7CisJCSpkZXZfbm9kZV9zdHJnID0gMDsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGRldl9ub2RlX3N0cmcgIT0gTlVMTCAmJgorCQkgICAgIUxTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nKSkgfHwKKwkJICAgKHN0YXR1cyAmJiAqZGV2X25vZGVfc3RyZyA9PSAwKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRydl9yZWxlYXNlX3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbGVhc2VzICByZXNvdXJjZXMgZnJvbSB0aGUgT1MuCisgKi8KK2ludCBkcnZfcmVsZWFzZV9yZXNvdXJjZXModTMyIGR3X2NvbnRleHQsIHN0cnVjdCBkcnZfb2JqZWN0ICpoZHJ2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqcGRydl9vYmplY3QgPSAoc3RydWN0IGRydl9vYmplY3QgKiloZHJ2X29iajsKKwlzdHJ1Y3QgZHJ2X2V4dCAqcHN6ZGV2X25vZGU7CisKKwkvKgorCSAqICBJcnJlc3BlY3RpdmUgb2YgdGhlIHN0YXR1cyBnbyBhaGVhZCBhbmQgY2xlYW4gaXQKKwkgKiAgVGhlIGZvbGxvd2luZyB3aWxsIG92ZXIgd3JpdGUgdGhlIHN0YXR1cy4KKwkgKi8KKwlmb3IgKHBzemRldl9ub2RlID0gKHN0cnVjdCBkcnZfZXh0ICopZHJ2X2dldF9maXJzdF9kZXZfZXh0ZW5zaW9uKCk7CisJICAgICBwc3pkZXZfbm9kZSAhPSBOVUxMOyBwc3pkZXZfbm9kZSA9IChzdHJ1Y3QgZHJ2X2V4dCAqKQorCSAgICAgZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24oKHUzMikgcHN6ZGV2X25vZGUpKSB7CisJCWlmICghcGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZykgeworCQkJLyogV2hlbiB0aGlzIGNvdWxkIGhhcHBlbj8gKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgodTMyKSBwc3pkZXZfbm9kZSA9PSBkd19jb250ZXh0KSB7CisJCQkvKiBGb3VuZCBpdCAqLworCQkJLyogRGVsZXRlIGZyb20gdGhlIERyaXZlciBvYmplY3QgbGlzdCAqLworCQkJbHN0X3JlbW92ZV9lbGVtKHBkcnZfb2JqZWN0LT5kZXZfbm9kZV9zdHJpbmcsCisJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopcHN6ZGV2X25vZGUpOworCQkJa2ZyZWUoKHZvaWQgKilwc3pkZXZfbm9kZSk7CisJCQlicmVhazsKKwkJfQorCQkvKiBEZWxldGUgdGhlIExpc3QgaWYgaXQgaXMgZW1wdHkgKi8KKwkJaWYgKExTVF9JU19FTVBUWShwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nKSkgeworCQkJa2ZyZWUocGRydl9vYmplY3QtPmRldl9ub2RlX3N0cmluZyk7CisJCQlwZHJ2X29iamVjdC0+ZGV2X25vZGVfc3RyaW5nID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHJlcXVlc3RfYnJpZGdlX3Jlc291cmNlcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqLworc3RhdGljIGludCByZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoc3RydWN0IGNmZ19ob3N0cmVzICpyZXMpCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlcyA9IHJlczsKKworCS8qIG51bV9tZW1fd2luZG93cyBtdXN0IG5vdCBiZSBtb3JlIHRoYW4gQ0ZHX01BWE1FTVJFR0lTVEVSUyAqLworCWhvc3RfcmVzLT5udW1fbWVtX3dpbmRvd3MgPSAyOworCisJLyogRmlyc3Qgd2luZG93IGlzIGZvciBEU1AgaW50ZXJuYWwgbWVtb3J5ICovCisJaG9zdF9yZXMtPmR3X3N5c19jdHJsX2Jhc2UgPSBpb3JlbWFwKE9NQVBfU1lTQ19CQVNFLCBPTUFQX1NZU0NfU0laRSk7CisJZGV2X2RiZyhicmlkZ2UsICJkd19tZW1fYmFzZVswXSAweCV4XG4iLCBob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMF0pOworCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbM10gMHgleFxuIiwgaG9zdF9yZXMtPmR3X21lbV9iYXNlWzNdKTsKKwlkZXZfZGJnKGJyaWRnZSwgImR3X2RtbXVfYmFzZSAlcFxuIiwgaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSk7CisKKwkvKiBmb3IgMjR4eCBiYXNlIHBvcnQgaXMgbm90IG1hcHBpbmcgdGhlIG1hbW9yeSBmb3IgRFNQCisJICogaW50ZXJuYWwgbWVtb3J5IFRPRE8gRG8gYSBpb3JlbWFwIGhlcmUgKi8KKwkvKiBTZWNvbmQgd2luZG93IGlzIGZvciBEU1AgZXh0ZXJuYWwgbWVtb3J5IHNoYXJlZCB3aXRoIE1QVSAqLworCisJLyogVGhlc2UgYXJlIGhhcmQtY29kZWQgdmFsdWVzICovCisJaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzID0gMDsKKwlob3N0X3Jlcy0+YmlycV9hdHRyaWIgPSAwOworCWhvc3RfcmVzLT5kd19vZmZzZXRfZm9yX21vbml0b3IgPSAwOworCWhvc3RfcmVzLT5kd19jaG5sX29mZnNldCA9IDA7CisJLyogQ0hOTF9NQVhDSEFOTkVMUyAqLworCWhvc3RfcmVzLT5kd19udW1fY2hubHMgPSBDSE5MX01BWENIQU5ORUxTOworCWhvc3RfcmVzLT5kd19jaG5sX2J1Zl9zaXplID0gMHg0MDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICA9PT09PT09PSBkcnZfcmVxdWVzdF9icmlkZ2VfcmVzX2RzcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmVzIHNoYXJlZCBtZW1vcnkgZm9yIGJyaWRnZS4KKyAqLworaW50IGRydl9yZXF1ZXN0X2JyaWRnZV9yZXNfZHNwKHZvaWQgKipwaG9zdF9yZXNvdXJjZXMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwl1MzIgZHdfYnVmZl9zaXplOworCXUzMiBkbWFfYWRkcjsKKwl1MzIgc2htX3NpemU7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWR3X2J1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2ZnX2hvc3RyZXMpOworCisJaG9zdF9yZXMgPSBremFsbG9jKGR3X2J1ZmZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoaG9zdF9yZXMgIT0gTlVMTCkgeworCQlyZXF1ZXN0X2JyaWRnZV9yZXNvdXJjZXMoaG9zdF9yZXMpOworCQkvKiBudW1fbWVtX3dpbmRvd3MgbXVzdCBub3QgYmUgbW9yZSB0aGFuIENGR19NQVhNRU1SRUdJU1RFUlMgKi8KKwkJaG9zdF9yZXMtPm51bV9tZW1fd2luZG93cyA9IDQ7CisKKwkJaG9zdF9yZXMtPmR3X21lbV9iYXNlWzBdID0gMDsKKwkJaG9zdF9yZXMtPmR3X21lbV9iYXNlWzJdID0gKHUzMikgaW9yZW1hcChPTUFQX0RTUF9NRU0xX0JBU0UsCisJCQkJCQkJIE9NQVBfRFNQX01FTTFfU0laRSk7CisJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSA9ICh1MzIpIGlvcmVtYXAoT01BUF9EU1BfTUVNMl9CQVNFLAorCQkJCQkJCSBPTUFQX0RTUF9NRU0yX1NJWkUpOworCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbNF0gPSAodTMyKSBpb3JlbWFwKE9NQVBfRFNQX01FTTNfQkFTRSwKKwkJCQkJCQkgT01BUF9EU1BfTUVNM19TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X3Blcl9iYXNlID0gaW9yZW1hcChPTUFQX1BFUl9DTV9CQVNFLAorCQkJCQkJT01BUF9QRVJfQ01fU0laRSk7CisJCWhvc3RfcmVzLT5kd19wZXJfcG1fYmFzZSA9ICh1MzIpIGlvcmVtYXAoT01BUF9QRVJfUFJNX0JBU0UsCisJCQkJCQkJIE9NQVBfUEVSX1BSTV9TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X2NvcmVfcG1fYmFzZSA9ICh1MzIpIGlvcmVtYXAoT01BUF9DT1JFX1BSTV9CQVNFLAorCQkJCQkJCSAgT01BUF9DT1JFX1BSTV9TSVpFKTsKKwkJaG9zdF9yZXMtPmR3X2RtbXVfYmFzZSA9IGlvcmVtYXAoT01BUF9ETU1VX0JBU0UsCisJCQkJCQkgT01BUF9ETU1VX1NJWkUpOworCisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMF0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVswXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMV0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbMl0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsyXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbM10gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVszXSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfbWVtX2Jhc2VbNF0gMHgleFxuIiwKKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVs0XSk7CisJCWRldl9kYmcoYnJpZGdlLCAiZHdfZG1tdV9iYXNlICVwXG4iLCBob3N0X3Jlcy0+ZHdfZG1tdV9iYXNlKTsKKworCQlzaG1fc2l6ZSA9IGRydl9kYXRhcC0+c2htX3NpemU7CisJCWlmIChzaG1fc2l6ZSA+PSAweDEwMDAwKSB7CisJCQkvKiBBbGxvY2F0ZSBQaHlzaWNhbGx5IGNvbnRpZ3VvdXMsCisJCQkgKiBub24tY2FjaGVhYmxlICBtZW1vcnkgKi8KKwkJCWhvc3RfcmVzLT5kd19tZW1fYmFzZVsxXSA9CisJCQkgICAgKHUzMikgbWVtX2FsbG9jX3BoeXNfbWVtKHNobV9zaXplLCAweDEwMDAwMCwKKwkJCQkJCSAgICAgJmRtYV9hZGRyKTsKKwkJCWlmIChob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0gPT0gMCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQkJcHJfZXJyKCJzaG0gcmVzZXJ2YXRpb24gRmFpbGVkXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJaG9zdF9yZXMtPmR3X21lbV9sZW5ndGhbMV0gPSBzaG1fc2l6ZTsKKwkJCQlob3N0X3Jlcy0+ZHdfbWVtX3BoeXNbMV0gPSBkbWFfYWRkcjsKKworCQkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEJyaWRnZSBzaG0gYWRkcmVzcyAweCV4ICIKKwkJCQkJImRtYV9hZGRyICV4IHNpemUgJXhcbiIsIF9fZnVuY19fLAorCQkJCQlob3N0X3Jlcy0+ZHdfbWVtX2Jhc2VbMV0sCisJCQkJCWRtYV9hZGRyLCBzaG1fc2l6ZSk7CisJCQl9CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIFRoZXNlIGFyZSBoYXJkLWNvZGVkIHZhbHVlcyAqLworCQkJaG9zdF9yZXMtPmJpcnFfcmVnaXN0ZXJzID0gMDsKKwkJCWhvc3RfcmVzLT5iaXJxX2F0dHJpYiA9IDA7CisJCQlob3N0X3Jlcy0+ZHdfb2Zmc2V0X2Zvcl9tb25pdG9yID0gMDsKKwkJCWhvc3RfcmVzLT5kd19jaG5sX29mZnNldCA9IDA7CisJCQkvKiBDSE5MX01BWENIQU5ORUxTICovCisJCQlob3N0X3Jlcy0+ZHdfbnVtX2NobmxzID0gQ0hOTF9NQVhDSEFOTkVMUzsKKwkJCWhvc3RfcmVzLT5kd19jaG5sX2J1Zl9zaXplID0gMHg0MDA7CisJCQlkd19idWZmX3NpemUgPSBzaXplb2Yoc3RydWN0IGNmZ19ob3N0cmVzKTsKKwkJfQorCQkqcGhvc3RfcmVzb3VyY2VzID0gaG9zdF9yZXM7CisJfQorCS8qIEVuZCBNZW0gYWxsb2MgKi8KKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIG1lbV9leHRfcGh5c19wb29sX2luaXQodTMyIHBvb2xfcGh5c19iYXNlLCB1MzIgcG9vbF9zaXplKQoreworCXUzMiBwb29sX3ZpcnRfYmFzZTsKKworCS8qIGdldCB0aGUgdmlydHVhbCBhZGRyZXNzIGZvciB0aGUgcGh5c2ljYWwgbWVtb3J5IHBvb2wgcGFzc2VkICovCisJcG9vbF92aXJ0X2Jhc2UgPSAodTMyKSBpb3JlbWFwKHBvb2xfcGh5c19iYXNlLCBwb29sX3NpemUpOworCisJaWYgKCh2b2lkICoqKXBvb2xfdmlydF9iYXNlID09IE5VTEwpIHsKKwkJcHJfZXJyKCIlczogZXh0ZXJuYWwgcGh5c2ljYWwgbWVtb3J5IG1hcCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCA9IGZhbHNlOworCX0gZWxzZSB7CisJCWV4dF9tZW1fcG9vbC5waHlzX21lbV9iYXNlID0gcG9vbF9waHlzX2Jhc2U7CisJCWV4dF9tZW1fcG9vbC5waHlzX21lbV9zaXplID0gcG9vbF9zaXplOworCQlleHRfbWVtX3Bvb2wudmlydF9tZW1fYmFzZSA9IHBvb2xfdmlydF9iYXNlOworCQlleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciA9IHBvb2xfcGh5c19iYXNlOworCQlleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkID0gdHJ1ZTsKKwl9Cit9CisKK3ZvaWQgbWVtX2V4dF9waHlzX3Bvb2xfcmVsZWFzZSh2b2lkKQoreworCWlmIChleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkKSB7CisJCWlvdW5tYXAoKHZvaWQgKikoZXh0X21lbV9wb29sLnZpcnRfbWVtX2Jhc2UpKTsKKwkJZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCA9IGZhbHNlOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fZXh0X3BoeXNfbWVtX2FsbG9jID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeSBmcm9tIGV4dGVybmFsIG1lbW9yeSBwb29sCisgKi8KKworc3RhdGljIHZvaWQgKm1lbV9leHRfcGh5c19tZW1fYWxsb2ModTMyIGJ5dGVzLCB1MzIgYWxpZ24sIHUzMiAqIHBoeXNfYWRkcikKK3sKKwl1MzIgbmV3X2FsbG9jX3B0cjsKKwl1MzIgb2Zmc2V0OworCXUzMiB2aXJ0X2FkZHI7CisKKwlpZiAoYWxpZ24gPT0gMCkKKwkJYWxpZ24gPSAxOworCisJaWYgKGJ5dGVzID4gKChleHRfbWVtX3Bvb2wucGh5c19tZW1fYmFzZSArIGV4dF9tZW1fcG9vbC5waHlzX21lbV9zaXplKQorCQkgICAgIC0gZXh0X21lbV9wb29sLm5leHRfcGh5c19hbGxvY19wdHIpKSB7CisJCXBoeXNfYWRkciA9IE5VTEw7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCW9mZnNldCA9IChleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciAmIChhbGlnbiAtIDEpKTsKKwkJaWYgKG9mZnNldCA9PSAwKQorCQkJbmV3X2FsbG9jX3B0ciA9IGV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyOworCQllbHNlCisJCQluZXdfYWxsb2NfcHRyID0gKGV4dF9tZW1fcG9vbC5uZXh0X3BoeXNfYWxsb2NfcHRyKSArCisJCQkgICAgKGFsaWduIC0gb2Zmc2V0KTsKKwkJaWYgKChuZXdfYWxsb2NfcHRyICsgYnl0ZXMpIDw9CisJCSAgICAoZXh0X21lbV9wb29sLnBoeXNfbWVtX2Jhc2UgKyBleHRfbWVtX3Bvb2wucGh5c19tZW1fc2l6ZSkpIHsKKwkJCS8qIHdlIGNhbiBhbGxvY2F0ZSAqLworCQkJKnBoeXNfYWRkciA9IG5ld19hbGxvY19wdHI7CisJCQlleHRfbWVtX3Bvb2wubmV4dF9waHlzX2FsbG9jX3B0ciA9CisJCQkgICAgbmV3X2FsbG9jX3B0ciArIGJ5dGVzOworCQkJdmlydF9hZGRyID0KKwkJCSAgICBleHRfbWVtX3Bvb2wudmlydF9tZW1fYmFzZSArIChuZXdfYWxsb2NfcHRyIC0KKwkJCQkJCQkgIGV4dF9tZW1fcG9vbC4KKwkJCQkJCQkgIHBoeXNfbWVtX2Jhc2UpOworCQkJcmV0dXJuICh2b2lkICopdmlydF9hZGRyOworCQl9IGVsc2UgeworCQkJKnBoeXNfYWRkciA9IDA7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fYWxsb2NfcGh5c19tZW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHVuY2FjaGVkIG1lbW9yeQorICovCit2b2lkICptZW1fYWxsb2NfcGh5c19tZW0odTMyIGJ5dGVfc2l6ZSwgdTMyIGFsaWduX21hc2ssCisJCQkJdTMyICpwaHlzaWNhbF9hZGRyZXNzKQoreworCXZvaWQgKnZhX21lbSA9IE5VTEw7CisJZG1hX2FkZHJfdCBwYV9tZW07CisKKwlpZiAoYnl0ZV9zaXplID4gMCkgeworCQlpZiAoZXh0X3BoeXNfbWVtX3Bvb2xfZW5hYmxlZCkgeworCQkJdmFfbWVtID0gbWVtX2V4dF9waHlzX21lbV9hbGxvYyhieXRlX3NpemUsIGFsaWduX21hc2ssCisJCQkJCQkJKHUzMiAqKSAmcGFfbWVtKTsKKwkJfSBlbHNlCisJCQl2YV9tZW0gPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgYnl0ZV9zaXplLCAmcGFfbWVtLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHZhX21lbSA9PSBOVUxMKQorCQkJKnBoeXNpY2FsX2FkZHJlc3MgPSAwOworCQllbHNlCisJCQkqcGh5c2ljYWxfYWRkcmVzcyA9IHBhX21lbTsKKwl9CisJcmV0dXJuIHZhX21lbTsKK30KKworLyoKKyAqICA9PT09PT09PSBtZW1fZnJlZV9waHlzX21lbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWUgdGhlIGdpdmVuIGJsb2NrIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkuCisgKi8KK3ZvaWQgbWVtX2ZyZWVfcGh5c19tZW0odm9pZCAqdmlydHVhbF9hZGRyZXNzLCB1MzIgcGh5c2ljYWxfYWRkcmVzcywKKwkJICAgICAgIHUzMiBieXRlX3NpemUpCit7CisJREJDX1JFUVVJUkUodmlydHVhbF9hZGRyZXNzICE9IE5VTEwpOworCisJaWYgKCFleHRfcGh5c19tZW1fcG9vbF9lbmFibGVkKQorCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBieXRlX3NpemUsIHZpcnR1YWxfYWRkcmVzcywKKwkJCQkgIHBoeXNpY2FsX2FkZHJlc3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2X2ludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHJ2X2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZTg5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSw2NTYgQEAKKy8qCisgKiBkcnZfaW50ZXJmYWNlLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGRyaXZlciBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3NlcnZpY2VzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Nsay5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGF0Zm9ybSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS1pb2N0bC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BhcGkuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZHJ2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3B3ci5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRydl9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NobmwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2ZGVmcy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisjaW5jbHVkZSA8bWFjaC1vbWFwMi9vbWFwMy1vcHAuaD4KKyNlbmRpZgorCisjZGVmaW5lIEJSSURHRV9OQU1FICJDNjQxMCIKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWxzICovCisjZGVmaW5lIERSSVZFUl9OQU1FICAiRHNwQnJpZGdlIgorI2RlZmluZSBEU1BCUklER0VfVkVSU0lPTgkiMC4zIgorczMyIGRzcF9kZWJ1ZzsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb21hcF9kc3BicmlkZ2VfZGV2Oworc3RydWN0IGRldmljZSAqYnJpZGdlOworCisvKiBUaGlzIGlzIGEgdGVzdCB2YXJpYWJsZSB1c2VkIGJ5IEJyaWRnZSB0byB0ZXN0IGRpZmZlcmVudCBzbGVlcCBzdGF0ZXMgKi8KK3MzMiBkc3BfdGVzdF9zbGVlcHN0YXRlOworCitzdGF0aWMgc3RydWN0IGNkZXYgYnJpZGdlX2NkZXY7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJyaWRnZV9jbGFzczsKKworc3RhdGljIHUzMiBkcml2ZXJfY29udGV4dDsKK3N0YXRpYyBzMzIgZHJpdmVyX21ham9yOworc3RhdGljIGNoYXIgKmJhc2VfaW1nOworY2hhciAqaXZhX2ltZzsKK3N0YXRpYyBzMzIgc2htX3NpemUgPSAweDUwMDAwMDsJLyogNSBNQiAqLworc3RhdGljIGludCB0Y193b3Jkc3dhcG9uOwkvKiBEZWZhdWx0IHZhbHVlIGlzIGFsd2F5cyBmYWxzZSAqLworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorI2RlZmluZSBSRUNfVElNRU9VVCA1MDAwCS8qcmVjb3ZlcnkgdGltZW91dCBpbiBtc2VjcyAqLworc3RhdGljIGF0b21pY190IGJyaWRnZV9jcmVmOwkvKiBudW1iZXIgb2YgYnJpZGdlIG9wZW4gaGFuZGxlcyAqLworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpicmlkZ2VfcmVjX3F1ZXVlOworc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBicmlkZ2VfcmVjb3Zlcnlfd29yazsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oYnJpZGdlX2NvbXApOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihicmlkZ2Vfb3Blbl9jb21wKTsKK3N0YXRpYyBib29sIHJlY292ZXI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTQorc3RydWN0IG9tYXAzNF94eF9icmlkZ2Vfc3VzcGVuZF9kYXRhIHsKKwlpbnQgc3VzcGVuZGVkOworCXdhaXRfcXVldWVfaGVhZF90IHN1c3BlbmRfd3E7Cit9OworCitzdGF0aWMgc3RydWN0IG9tYXAzNF94eF9icmlkZ2Vfc3VzcGVuZF9kYXRhIGJyaWRnZV9zdXNwZW5kX2RhdGE7CisKK3N0YXRpYyBpbnQgb21hcDM0X3h4YnJpZGdlX3N1c3BlbmRfbG9ja291dChzdHJ1Y3Qgb21hcDM0X3h4X2JyaWRnZV9zdXNwZW5kX2RhdGEKKwkJCQkJICAgKnMsIHN0cnVjdCBmaWxlICpmKQoreworCWlmICgocyktPnN1c3BlbmRlZCkgeworCQlpZiAoKGYpLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCXJldHVybiAtRVBFUk07CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgocyktPnN1c3BlbmRfd3EsIChzKS0+c3VzcGVuZGVkID09IDApOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCittb2R1bGVfcGFyYW0oZHNwX2RlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkc3BfZGVidWcsICJXYWl0IGFmdGVyIGxvYWRpbmcgRFNQIGltYWdlLiBkZWZhdWx0ID0gZmFsc2UiKTsKKworbW9kdWxlX3BhcmFtKGRzcF90ZXN0X3NsZWVwc3RhdGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRzcF90ZXN0X3NsZWVwc3RhdGUsICJEU1AgU2xlZXAgc3RhdGUgPSAwIik7CisKK21vZHVsZV9wYXJhbShiYXNlX2ltZywgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhiYXNlX2ltZywgIkRTUCBiYXNlIGltYWdlLCBkZWZhdWx0ID0gTlVMTCIpOworCittb2R1bGVfcGFyYW0oc2htX3NpemUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNobV9zaXplLCAic2htIHNpemUsIGRlZmF1bHQgPSA0IE1CLCBtaW5pbXVtID0gNjQgS0IiKTsKKworbW9kdWxlX3BhcmFtKHRjX3dvcmRzd2Fwb24sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRjX3dvcmRzd2Fwb24sICJUQyBXb3JkIFN3YXAgT3B0aW9uLiBkZWZhdWx0ID0gMCIpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFNQQlJJREdFX1ZFUlNJT04pOworCitzdGF0aWMgY2hhciAqZHJpdmVyX25hbWUgPSBEUklWRVJfTkFNRTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnJpZGdlX2ZvcHMgPSB7CisJLm9wZW4gPSBicmlkZ2Vfb3BlbiwKKwkucmVsZWFzZSA9IGJyaWRnZV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGJyaWRnZV9pb2N0bCwKKwkubW1hcCA9IGJyaWRnZV9tbWFwLAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIHUzMiB0aW1lX291dCA9IDEwMDA7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK3MzMiBkc3BfbWF4X29wcHMgPSBWREQxX09QUDU7CisjZW5kaWYKKworLyogTWF4aW11bSBPcHBzIHRoYXQgY2FuIGJlIHJlcXVlc3RlZCBieSBJVkEgKi8KKy8qdmRkMSByYXRlIHRhYmxlICovCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK2NvbnN0IHN0cnVjdCBvbWFwX29wcCB2ZGQxX3JhdGVfdGFibGVfYnJpZGdlW10gPSB7CisJezAsIDAsIDB9LAorCS8qT1BQMSAqLworCXtTMTI1TSwgVkREMV9PUFAxLCAwfSwKKwkvKk9QUDIgKi8KKwl7UzI1ME0sIFZERDFfT1BQMiwgMH0sCisJLypPUFAzICovCisJe1M1MDBNLCBWREQxX09QUDMsIDB9LAorCS8qT1BQNCAqLworCXtTNTUwTSwgVkREMV9PUFA0LCAwfSwKKwkvKk9QUDUgKi8KKwl7UzYwME0sIFZERDFfT1BQNSwgMH0sCit9OworI2VuZGlmCisjZW5kaWYKKworc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpvbWFwX2RzcGJyaWRnZV9wZGF0YTsKKwordTMyIHZkZDFfZHNwX2ZyZXFbNl1bNF0gPSB7CisJezAsIDAsIDAsIDB9LAorCS8qT1BQMSAqLworCXswLCA5MDAwMCwgMCwgODYwMDB9LAorCS8qT1BQMiAqLworCXswLCAxODAwMDAsIDgwMDAwLCAxNzAwMDB9LAorCS8qT1BQMyAqLworCXswLCAzNjAwMDAsIDE2MDAwMCwgMzQwMDAwfSwKKwkvKk9QUDQgKi8KKwl7MCwgMzk2MDAwLCAzMjUwMDAsIDM3NjAwMH0sCisJLypPUFA1ICovCisJezAsIDQzMDAwMCwgMzU1MDAwLCA0MzAwMDB9LAorfTsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorc3RhdGljIHZvaWQgYnJpZGdlX3JlY292ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXY7CisJc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZTsKKwlpZiAoYXRvbWljX3JlYWQoJmJyaWRnZV9jcmVmKSkgeworCQlJTklUX0NPTVBMRVRJT04oYnJpZGdlX2NvbXApOworCQl3aGlsZSAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYnJpZGdlX2NvbXAsCisJCQkJCQltc2Vjc190b19qaWZmaWVzKFJFQ19USU1FT1VUKSkpCisJCQlwcl9pbmZvKCIlczolZCBoYW5kbGUocykgc3RpbGwgb3BlbmVkXG4iLAorCQkJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmJyaWRnZV9jcmVmKSk7CisJfQorCWRldiA9IGRldl9nZXRfZmlyc3QoKTsKKwlkZXZfZ2V0X2Rldl9ub2RlKGRldiwgJmRldl9ub2RlKTsKKwlpZiAoIWRldl9ub2RlIHx8IHByb2NfYXV0b19zdGFydChkZXZfbm9kZSwgZGV2KSkKKwkJcHJfZXJyKCJEU1AgY291bGQgbm90IGJlIHJlc3RhcnRlZFxuIik7CisJcmVjb3ZlciA9IGZhbHNlOworCWNvbXBsZXRlX2FsbCgmYnJpZGdlX29wZW5fY29tcCk7Cit9CisKK3ZvaWQgYnJpZGdlX3JlY292ZXJfc2NoZWR1bGUodm9pZCkKK3sKKwlJTklUX0NPTVBMRVRJT04oYnJpZGdlX29wZW5fY29tcCk7CisJcmVjb3ZlciA9IHRydWU7CisJcXVldWVfd29yayhicmlkZ2VfcmVjX3F1ZXVlLCAmYnJpZGdlX3JlY292ZXJ5X3dvcmspOworfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKK3N0YXRpYyBpbnQgZHNwYnJpZGdlX3NjYWxlX25vdGlmaWNhdGlvbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm9wLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBkc3BicmlkZ2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPQorCQkJCQlvbWFwX2RzcGJyaWRnZV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKENQVUZSRVFfUE9TVENIQU5HRSA9PSB2YWwgJiYgcGRhdGEtPmRzcF9nZXRfb3BwKQorCQlwd3JfcG1fcG9zdF9zY2FsZShQUkNNX1ZERDEsIHBkYXRhLT5kc3BfZ2V0X29wcCgpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGl2YV9jbGtfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkc3BicmlkZ2Vfc2NhbGVfbm90aWZpY2F0aW9uLAorCU5VTEwsCit9OworI2VuZGlmCisKKy8qKgorICogb21hcDNfYnJpZGdlX3N0YXJ0dXAoKSAtIHBlcmZvcm0gbG93IGxldmVyIGluaXRpYWxpemF0aW9ucworICogQHBkZXY6ICAgICAgcG9pbnRlciB0byBwbGF0Zm9ybSBkZXZpY2UKKyAqCisgKiBJbml0aWFsaXplcyByZWNvdmVyeSwgUE0gYW5kIERWRlMgcmVxdWlyZWQgZGF0YSwgYmVmb3JlIGNhbGxpbmcKKyAqIGNsayBhbmQgbWVtb3J5IGluaXQgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQgb21hcDNfYnJpZGdlX3N0YXJ0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBOVUxMOworCXUzMiBwaHlzX21lbWJhc2UsIHBoeXNfbWVtc2l6ZTsKKwlpbnQgZXJyOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCisJYnJpZGdlX3JlY19xdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImJyaWRnZV9yZWNfcXVldWUiKTsKKwlJTklUX1dPUksoJmJyaWRnZV9yZWNvdmVyeV93b3JrLCBicmlkZ2VfcmVjb3Zlcik7CisJSU5JVF9DT01QTEVUSU9OKGJyaWRnZV9jb21wKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCisJLyogSW5pdGlhbGl6ZSB0aGUgd2FpdCBxdWV1ZSAqLworCWJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZGVkID0gMDsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZicmlkZ2Vfc3VzcGVuZF9kYXRhLnN1c3BlbmRfd3EpOworCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlwZGF0YS0+bXB1X3NwZWVkW2ldID0gdmRkMV9yYXRlX3RhYmxlX2JyaWRnZVtpXS5yYXRlOworCisJZXJyID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIiVzOiBjbGtfbm90aWZpZXJfcmVnaXN0ZXIgZmFpbGVkIGZvciBpdmEyX2NrXG4iLAorCQkJCQkJCQlfX2Z1bmNfXyk7CisjZW5kaWYKKyNlbmRpZgorCisJZHNwX2Nsa19pbml0KCk7CisJc2VydmljZXNfaW5pdCgpOworCisJZHJ2X2RhdGFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRydl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZfZGF0YXApIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCWRydl9kYXRhcC0+c2htX3NpemUgPSBzaG1fc2l6ZTsKKwlkcnZfZGF0YXAtPnRjX3dvcmRzd2Fwb24gPSB0Y193b3Jkc3dhcG9uOworCisJaWYgKGJhc2VfaW1nKSB7CisJCWRydl9kYXRhcC0+YmFzZV9pbWcgPSBrbWFsbG9jKHN0cmxlbihiYXNlX2ltZykgKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcnZfZGF0YXAtPmJhc2VfaW1nKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnIyOworCQl9CisJCXN0cm5jcHkoZHJ2X2RhdGFwLT5iYXNlX2ltZywgYmFzZV9pbWcsIHN0cmxlbihiYXNlX2ltZykgKyAxKTsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoYnJpZGdlLCBkcnZfZGF0YXApOworCisJaWYgKHNobV9zaXplIDwgMHgxMDAwMCkgewkvKiA2NCBLQiAqLworCQllcnIgPSAtRUlOVkFMOworCQlwcl9lcnIoIiVzOiBzaG0gc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDY0IEtCXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMzsKKwl9CisJZGV2X2RiZyhicmlkZ2UsICIlczogcmVxdWVzdGVkIHNobV9zaXplID0gMHgleFxuIiwgX19mdW5jX18sIHNobV9zaXplKTsKKworCXBoeXNfbWVtYmFzZSA9IHBkYXRhLT5waHlzX21lbXBvb2xfYmFzZTsKKwlwaHlzX21lbXNpemUgPSBwZGF0YS0+cGh5c19tZW1wb29sX3NpemU7CisJaWYgKHBoeXNfbWVtYmFzZSA+IDAgJiYgcGh5c19tZW1zaXplID4gMCkKKwkJbWVtX2V4dF9waHlzX3Bvb2xfaW5pdChwaHlzX21lbWJhc2UsIHBoeXNfbWVtc2l6ZSk7CisKKwlpZiAodGNfd29yZHN3YXBvbikKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogVEMgV29yZCBTd2FwIGlzIGVuYWJsZWRcbiIsIF9fZnVuY19fKTsKKworCWRyaXZlcl9jb250ZXh0ID0gZHNwX2luaXQoJmVycik7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkRTUCBCcmlkZ2UgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyNDoKKwltZW1fZXh0X3BoeXNfcG9vbF9yZWxlYXNlKCk7CitlcnIzOgorCWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOworZXJyMjoKKwlrZnJlZShkcnZfZGF0YXApOworZXJyMToKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfRFZGUworCWNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKKyNlbmRpZgorCWRzcF9jbGtfZXhpdCgpOworCXNlcnZpY2VzX2V4aXQoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXAzNF94eF9icmlkZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCWRldl90IGRldiA9IDA7CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0RWRlMKKwlpbnQgaSA9IDA7CisjZW5kaWYKKworCW9tYXBfZHNwYnJpZGdlX2RldiA9IHBkZXY7CisKKwkvKiBHbG9iYWwgYnJpZGdlIGRldmljZSAqLworCWJyaWRnZSA9ICZvbWFwX2RzcGJyaWRnZV9kZXYtPmRldjsKKworCS8qIEJyaWRnZSBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb25zICovCisJZXJyID0gb21hcDNfYnJpZGdlX3N0YXJ0dXAocGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCisJLyogdXNlIDIuNiBkZXZpY2UgbW9kZWwgKi8KKwllcnIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsIDEsIGRyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiJXM6IENhbid0IGdldCBtYWpvciAlZFxuIiwgX19mdW5jX18sIGRyaXZlcl9tYWpvcik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwljZGV2X2luaXQoJmJyaWRnZV9jZGV2LCAmYnJpZGdlX2ZvcHMpOworCWJyaWRnZV9jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisKKwllcnIgPSBjZGV2X2FkZCgmYnJpZGdlX2NkZXYsIGRldiwgMSk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWRkIGJyaWRnZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnIyOworCX0KKworCS8qIHVkZXYgc3VwcG9ydCAqLworCWJyaWRnZV9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgInRpX2JyaWRnZSIpOworCWlmIChJU19FUlIoYnJpZGdlX2NsYXNzKSkgeworCQlwcl9lcnIoIiVzOiBFcnJvciBjcmVhdGluZyBicmlkZ2UgY2xhc3NcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnIzOworCX0KKworCWRyaXZlcl9tYWpvciA9IE1BSk9SKGRldik7CisJZGV2aWNlX2NyZWF0ZShicmlkZ2VfY2xhc3MsIE5VTEwsIE1LREVWKGRyaXZlcl9tYWpvciwgMCksCisJCSAgICAgIE5VTEwsICJEc3BCcmlkZ2UiKTsKKwlwcl9pbmZvKCJEU1AgQnJpZGdlIGRyaXZlciBsb2FkZWRcbiIpOworCisJcmV0dXJuIDA7CisKK2VycjM6CisJY2Rldl9kZWwoJmJyaWRnZV9jZGV2KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgMSk7CitlcnIxOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXAzNF94eF9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZGV2X3QgZGV2bm87CisJYm9vbCByZXQ7CisJaW50IHN0YXR1cyA9IDA7CisJdm9pZCAqaGRydl9vYmogPSBOVUxMOworCisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTCisJaWYgKGNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllcigmaXZhX2Nsa19ub3RpZmllciwKKwkJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUikpCisJCXByX2VycigiJXM6IGNwdWZyZXFfdW5yZWdpc3Rlcl9ub3RpZmllciBmYWlsZWQgZm9yIGl2YTJfY2tcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9EVkZTICovCisKKwlpZiAoZHJpdmVyX2NvbnRleHQpIHsKKwkJLyogUHV0IHRoZSBEU1AgaW4gcmVzZXQgc3RhdGUgKi8KKwkJcmV0ID0gZHNwX2RlaW5pdChkcml2ZXJfY29udGV4dCk7CisJCWRyaXZlcl9jb250ZXh0ID0gMDsKKwkJREJDX0FTU0VSVChyZXQgPT0gdHJ1ZSk7CisJfQorCitmdW5jX2NvbnQ6CisJbWVtX2V4dF9waHlzX3Bvb2xfcmVsZWFzZSgpOworCisJZHNwX2Nsa19leGl0KCk7CisJc2VydmljZXNfZXhpdCgpOworCisJZGV2bm8gPSBNS0RFVihkcml2ZXJfbWFqb3IsIDApOworCWNkZXZfZGVsKCZicmlkZ2VfY2Rldik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldm5vLCAxKTsKKwlpZiAoYnJpZGdlX2NsYXNzKSB7CisJCS8qIHJlbW92ZSB0aGUgZGV2aWNlIGZyb20gc3lzZnMgKi8KKwkJZGV2aWNlX2Rlc3Ryb3koYnJpZGdlX2NsYXNzLCBNS0RFVihkcml2ZXJfbWFqb3IsIDApKTsKKwkJY2xhc3NfZGVzdHJveShicmlkZ2VfY2xhc3MpOworCisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IEJSSURHRV9TVVNQRU5EKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1MzIgc3RhdHVzOworCXUzMiBjb21tYW5kID0gUFdSX0VNRVJHRU5DWURFRVBTTEVFUDsKKworCXN0YXR1cyA9IHB3cl9zbGVlcF9kc3AoY29tbWFuZCwgdGltZV9vdXQpOworCWlmIChzdGF0dXMpCisJCXJldHVybiAtMTsKKworCWJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBCUklER0VfUkVTVU1FKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lX291dCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIC0xOworCisJYnJpZGdlX3N1c3BlbmRfZGF0YS5zdXNwZW5kZWQgPSAwOworCXdha2VfdXAoJmJyaWRnZV9zdXNwZW5kX2RhdGEuc3VzcGVuZF93cSk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBCUklER0VfU1VTUEVORCBOVUxMCisjZGVmaW5lIEJSSURHRV9SRVNVTUUgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJyaWRnZV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSBCUklER0VfTkFNRSwKKwkJICAgfSwKKwkucHJvYmUgPSBvbWFwMzRfeHhfYnJpZGdlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChvbWFwMzRfeHhfYnJpZGdlX3JlbW92ZSksCisJLnN1c3BlbmQgPSBCUklER0VfU1VTUEVORCwKKwkucmVzdW1lID0gQlJJREdFX1JFU1VNRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJyaWRnZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnJpZGdlX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBicmlkZ2VfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZicmlkZ2VfZHJpdmVyKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gb3BlbnMgaGFuZGxlIHRvIHRoZQorICogYnJpZGdlIGRyaXZlci4KKyAqLworc3RhdGljIGludCBicmlkZ2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0ID0gTlVMTDsKKworCS8qCisJICogQWxsb2NhdGUgYSBuZXcgcHJvY2VzcyBjb250ZXh0IGFuZCBpbnNlcnQgaXQgaW50byBnbG9iYWwKKwkgKiBwcm9jZXNzIGNvbnRleHQgbGlzdC4KKwkgKi8KKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorCWlmIChyZWNvdmVyKSB7CisJCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyB8fAorCQkJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZicmlkZ2Vfb3Blbl9jb21wKSkKKwkJCXJldHVybiAtRUJVU1k7CisJfQorI2VuZGlmCisJcHJfY3R4dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJfY3R4dCkgeworCQlwcl9jdHh0LT5yZXNfc3RhdGUgPSBQUk9DX1JFU19BTExPQ0FURUQ7CisJCXNwaW5fbG9ja19pbml0KCZwcl9jdHh0LT5kbW1fbWFwX2xvY2spOworCQlJTklUX0xJU1RfSEVBRCgmcHJfY3R4dC0+ZG1tX21hcF9saXN0KTsKKwkJc3Bpbl9sb2NrX2luaXQoJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZwcl9jdHh0LT5kbW1fcnN2X2xpc3QpOworCisJCXByX2N0eHQtPm5vZGVfaWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwcl9jdHh0LT5ub2RlX2lkKSB7CisJCQlpZHJfaW5pdChwcl9jdHh0LT5ub2RlX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQlnb3RvIGVycjsKKwkJfQorCisJCXByX2N0eHQtPnN0cmVhbV9pZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZHIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHByX2N0eHQtPnN0cmVhbV9pZCkKKwkJCWlkcl9pbml0KHByX2N0eHQtPnN0cmVhbV9pZCk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CitlcnI6CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gcHJfY3R4dDsKKyNpZmRlZiBDT05GSUdfVElEU1BCUklER0VfUkVDT1ZFUlkKKwlpZiAoIXN0YXR1cykKKwkJYXRvbWljX2luYygmYnJpZGdlX2NyZWYpOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gY2xvc2VzIGhhbmRsZSB0byB0aGUgYnJpZGdlCisgKiBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dDsKKworCWlmICghZmlscC0+cHJpdmF0ZV9kYXRhKSB7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKworCXByX2N0eHQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwlkcnZfcmVtb3ZlX2FsbF9yZXNvdXJjZXMocHJfY3R4dCk7CisJcHJvY19kZXRhY2gocHJfY3R4dCk7CisJa2ZyZWUocHJfY3R4dCk7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCitlcnI6CisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX1JFQ09WRVJZCisJaWYgKCFhdG9taWNfZGVjX3JldHVybigmYnJpZGdlX2NyZWYpKQorCQljb21wbGV0ZSgmYnJpZGdlX2NvbXApOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBJTyBpbnRlcmZhY2UgdG8gdGhlIGJyaWRnZSBkcml2ZXIuICovCitzdGF0aWMgbG9uZyBicmlkZ2VfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjb2RlLAorCQkJIHVuc2lnbmVkIGxvbmcgYXJncykKK3sKKwlpbnQgc3RhdHVzOworCXUzMiByZXR2YWwgPSAwOworCXVuaW9uIHRyYXBwZWRfYXJncyBidWZfaW47CisKKwlEQkNfUkVRVUlSRShmaWxwICE9IE5VTEwpOworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9SRUNPVkVSWQorCWlmIChyZWNvdmVyKSB7CisJCXN0YXR1cyA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19QTQorCXN0YXR1cyA9IG9tYXAzNF94eGJyaWRnZV9zdXNwZW5kX2xvY2tvdXQoJmJyaWRnZV9zdXNwZW5kX2RhdGEsIGZpbHApOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKKyNlbmRpZgorCisJaWYgKCFmaWxwLT5wcml2YXRlX2RhdGEpIHsKKwkJc3RhdHVzID0gLUVJTzsKKwkJZ290byBlcnI7CisJfQorCisJc3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmJ1Zl9pbiwgKHVuaW9uIHRyYXBwZWRfYXJncyAqKWFyZ3MsCisJCQkJc2l6ZW9mKHVuaW9uIHRyYXBwZWRfYXJncykpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gYXBpX2NhbGxfZGV2X2lvY3RsKGNvZGUsICZidWZfaW4sICZyZXR2YWwsCisJCQkJCSAgICAgZmlscC0+cHJpdmF0ZV9kYXRhKTsKKworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gcmV0dmFsOworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogSU9DVEwgRmFpbGVkLCBjb2RlOiAweCV4ICIKKwkJCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBjb2RlLCBzdGF0dXMpOworCQkJc3RhdHVzID0gLTE7CisJCX0KKworCX0KKworZXJyOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gbWFwcyBrZXJuZWwgc3BhY2UgbWVtb3J5IHRvIHVzZXIgc3BhY2UgbWVtb3J5LiAqLworc3RhdGljIGludCBicmlkZ2VfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdTMyIG9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1MzIgc3RhdHVzOworCisJREJDX0FTU0VSVCh2bWEtPnZtX3N0YXJ0IDwgdm1hLT52bV9lbmQpOworCisJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRCB8IFZNX0lPOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiB2bSBmaWxwICVwIG9mZnNldCAleCBzdGFydCAlbHggZW5kICVseCBwYWdlX3Byb3QgIgorCQkiJWx4IGZsYWdzICVseFxuIiwgX19mdW5jX18sIGZpbHAsIG9mZnNldCwKKwkJdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHZtYS0+dm1fcGFnZV9wcm90LCB2bWEtPnZtX2ZsYWdzKTsKKworCXN0YXR1cyA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCisJCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCQkgdm1hLT52bV9wYWdlX3Byb3QpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJc3RhdHVzID0gLUVBR0FJTjsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFRvIHJlbW92ZSBhbGwgcHJvY2VzcyByZXNvdXJjZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBwcm9jZXNzIGZyb20gdGhlCisgKiBwcm9jZXNzIGNvbnRleHQgbGlzdCAqLworaW50IGRydl9yZW1vdmVfYWxsX3Jlc291cmNlcyh2b2lkICpwcm9jZXNzX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqY3R4dCA9IChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICopcHJvY2Vzc19jdHh0OworCWRydl9yZW1vdmVfYWxsX3N0cm1fcmVzX2VsZW1lbnRzKGN0eHQpOworCWRydl9yZW1vdmVfYWxsX25vZGVfcmVzX2VsZW1lbnRzKGN0eHQpOworCWRydl9yZW1vdmVfYWxsX2RtbV9yZXNfZWxlbWVudHMoY3R4dCk7CisJY3R4dC0+cmVzX3N0YXRlID0gUFJPQ19SRVNfRlJFRUQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogQnJpZGdlIGRyaXZlciBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICovCittb2R1bGVfaW5pdChicmlkZ2VfaW5pdCk7Cittb2R1bGVfZXhpdChicmlkZ2VfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kcnZfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwNzA2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL2Rydl9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogZHJ2X2ludGVyZmFjZS5oCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYJX0RSVl9JTlRFUkZBQ0VfSF8KKyNkZWZpbmUgX0RSVl9JTlRFUkZBQ0VfSF8KKworLyogUHJvdG90eXBlcyBmb3IgYWxsIGZ1bmN0aW9ucyBpbiB0aGlzIGJyaWRnZSAqLworc3RhdGljIGludCBfX2luaXQgYnJpZGdlX2luaXQodm9pZCk7CS8qIEluaXRpYWxpemUgYnJpZGdlICovCitzdGF0aWMgdm9pZCBfX2V4aXQgYnJpZGdlX2V4aXQodm9pZCk7CS8qIE9wcG9zaXRlIG9mIGluaXRpYWxpemUgKi8KK3N0YXRpYyBpbnQgYnJpZGdlX29wZW4oc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZpbHApOwkvKiBPcGVuICovCitzdGF0aWMgaW50IGJyaWRnZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBmaWxlICpmaWxwKTsJLyogUmVsZWFzZSAqLworc3RhdGljIGxvbmcgYnJpZGdlX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY29kZSwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZ3MpOworc3RhdGljIGludCBicmlkZ2VfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworI2VuZGlmIC8qIGlmbmRlZiBfRFJWX0lOVEVSRkFDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNwZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9kc3BkcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTRmMzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvZHNwZHJ2LmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBkc3BkcnYuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBJbnRlcmZhY2UgdG8gYWxsb2NhdGUgYW5kIGZyZWUgYnJpZGdlIHJlc291cmNlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kcnYuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGFwaS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9tZ3IuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwZHJ2Lmg+CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2luaXQgPT09PT09PT0KKyAqICAJQWxsb2NhdGVzIGJyaWRnZSByZXNvdXJjZXMuIExvYWRzIGEgYmFzZSBpbWFnZSBvbnRvIERTUCwgaWYgc3BlY2lmaWVkLgorICovCit1MzIgZHNwX2luaXQodTMyICppbml0X3N0YXR1cykKK3sKKwljaGFyIGRldl9ub2RlW01BWFJFR1BBVEhMRU5HVEhdID0gIlRJT01BUDE1MTAiOworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRydl9vYmplY3QgKmRydl9vYmogPSBOVUxMOworCXUzMiBkZXZpY2Vfbm9kZTsKKwl1MzIgZGV2aWNlX25vZGVfc3RyaW5nOworCisJaWYgKCFhcGlfaW5pdCgpKQorCQlnb3RvIGZ1bmNfY29udDsKKworCXN0YXR1cyA9IGRydl9jcmVhdGUoJmRydl9vYmopOworCWlmIChzdGF0dXMpIHsKKwkJYXBpX2V4aXQoKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJLyogRW5kIGRydl9jcmVhdGUgKi8KKwkvKiBSZXF1ZXN0IFJlc291cmNlcyAqLworCXN0YXR1cyA9IGRydl9yZXF1ZXN0X3Jlc291cmNlcygodTMyKSAmZGV2X25vZGUsICZkZXZpY2Vfbm9kZV9zdHJpbmcpOworCWlmICghc3RhdHVzKSB7CisJCS8qIEF0dGVtcHQgdG8gU3RhcnQgdGhlIERldmljZSAqLworCQlzdGF0dXMgPSBkZXZfc3RhcnRfZGV2aWNlKChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKikKKwkJCQkJICBkZXZpY2Vfbm9kZV9zdHJpbmcpOworCQlpZiAoc3RhdHVzKQorCQkJKHZvaWQpZHJ2X3JlbGVhc2VfcmVzb3VyY2VzCisJCQkgICAgKCh1MzIpIGRldmljZV9ub2RlX3N0cmluZywgZHJ2X29iaik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogZHJ2X3JlcXVlc3RfcmVzb3VyY2VzIEZhaWxlZFxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRVBFUk07CisJfQorCisJLyogVW53aW5kIHdoYXRldmVyIHdhcyBsb2FkZWQgKi8KKwlpZiAoc3RhdHVzKSB7CisJCS8qIGlycmVzcGVjdGl2ZSBvZiB0aGUgc3RhdHVzIG9mIGRldl9yZW1vdmVfZGV2aWNlIHdlIGNvbml0aW51ZQorCQkgKiB1bmxvYWRpbmcuIEdldCB0aGUgRHJpdmVyIE9iamVjdCBpdGVyYXRlIHRocm91Z2ggYW5kIHJlbW92ZS4KKwkJICogUmVzZXQgdGhlIHN0YXR1cyB0byBFX0ZBSUwgdG8gYXZvaWQgZ29pbmcgdGhyb3VnaAorCQkgKiBhcGlfaW5pdF9jb21wbGV0ZTIuICovCisJCWZvciAoZGV2aWNlX25vZGUgPSBkcnZfZ2V0X2ZpcnN0X2Rldl9leHRlbnNpb24oKTsKKwkJICAgICBkZXZpY2Vfbm9kZSAhPSAwOworCQkgICAgIGRldmljZV9ub2RlID0gZHJ2X2dldF9uZXh0X2Rldl9leHRlbnNpb24oZGV2aWNlX25vZGUpKSB7CisJCQkodm9pZClkZXZfcmVtb3ZlX2RldmljZSgoc3RydWN0IGNmZ19kZXZub2RlICopCisJCQkJCQlkZXZpY2Vfbm9kZSk7CisJCQkodm9pZClkcnZfcmVsZWFzZV9yZXNvdXJjZXMoKHUzMikgZGV2aWNlX25vZGUsIGRydl9vYmopOworCQl9CisJCS8qIFJlbW92ZSB0aGUgRHJpdmVyIE9iamVjdCAqLworCQkodm9pZClkcnZfZGVzdHJveShkcnZfb2JqKTsKKwkJZHJ2X29iaiA9IE5VTEw7CisJCWFwaV9leGl0KCk7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IExvZ2ljYWwgZGV2aWNlIGZhaWxlZCBpbml0XG4iLCBfX2Z1bmNfXyk7CisJfQkJCS8qIFVud2luZGluZyB0aGUgbG9hZGVkIGRyaXZlcnMgKi8KK2Z1bmNfY29udDoKKwkvKiBBdHRlbXB0IHRvIFN0YXJ0IHRoZSBCb2FyZCAqLworCWlmICghc3RhdHVzKSB7CisJCS8qIEJSRF9BdXRvU3RhcnQgY291bGQgZmFpbCBpZiB0aGUgZHNwIGV4ZWN1ZXRhYmxlIGlzIG5vdCB0aGUKKwkJICogY29ycmVjdCBvbmUuIFdlIHNob3VsZCBub3QgcHJvcGFnYXRlIHRoYXQgZXJyb3IKKwkJICogaW50byB0aGUgZGV2aWNlIGxvYWRlci4gKi8KKwkJKHZvaWQpYXBpX2luaXRfY29tcGxldGUyKCk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJfQkJCS8qIEVuZCBhcGlfaW5pdF9jb21wbGV0ZTIgKi8KKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGRydl9vYmogIT0gTlVMTCkgfHwKKwkJICAgKHN0YXR1cyAmJiBkcnZfb2JqID09IE5VTEwpKTsKKwkqaW5pdF9zdGF0dXMgPSBzdGF0dXM7CisJLyogUmV0dXJuIHRoZSBEcml2ZXIgT2JqZWN0ICovCisJcmV0dXJuICh1MzIpIGRydl9vYmo7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZHNwX2RlaW5pdCA9PT09PT09PQorICogIAlGcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgYnJpZGdlLgorICovCitib29sIGRzcF9kZWluaXQodTMyIGRldmljZV9jb250ZXh0KQoreworCWJvb2wgcmV0ID0gdHJ1ZTsKKwl1MzIgZGV2aWNlX25vZGU7CisJc3RydWN0IG1ncl9vYmplY3QgKm1ncl9vYmogPSBOVUxMOworCisJd2hpbGUgKChkZXZpY2Vfbm9kZSA9IGRydl9nZXRfZmlyc3RfZGV2X2V4dGVuc2lvbigpKSAhPSAwKSB7CisJCSh2b2lkKWRldl9yZW1vdmVfZGV2aWNlKChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKilkZXZpY2Vfbm9kZSk7CisKKwkJKHZvaWQpZHJ2X3JlbGVhc2VfcmVzb3VyY2VzKCh1MzIpIGRldmljZV9ub2RlLAorCQkJCQkoc3RydWN0IGRydl9vYmplY3QgKilkZXZpY2VfY29udGV4dCk7CisJfQorCisJKHZvaWQpZHJ2X2Rlc3Ryb3koKHN0cnVjdCBkcnZfb2JqZWN0ICopZGV2aWNlX2NvbnRleHQpOworCisJLyogR2V0IHRoZSBNYW5hZ2VyIE9iamVjdCBmcm9tIFJlZ2lzdHJ5CisJICogTUdSIERlc3Ryb3kgd2lsbCB1bmxvYWQgdGhlIERDRCBkbGwgKi8KKwlpZiAoIWNmZ19nZXRfb2JqZWN0KCh1MzIgKikgJm1ncl9vYmosIFJFR19NR1JfT0JKRUNUKSkKKwkJKHZvaWQpbWdyX2Rlc3Ryb3kobWdyX29iaik7CisKKwlhcGlfZXhpdCgpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvbWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMzliOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL21nci5jCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogbWdyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgTWFuYWdlciBpbnRlcmZhY2UgdG8gdGhlIGRldmljZSBvYmplY3QgYXQgdGhlCisgKiBkcml2ZXIgbGV2ZWwuIFRoaXMgcXVlcmllcyB0aGUgTkRCIGRhdGEgYmFzZSBhbmQgcmV0cmlldmVzIHRoZQorICogZGF0YSBhYm91dCBOb2RlIGFuZCBQcm9jZXNzb3IuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3RoZXJzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGNkLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWdyLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIFpMRExMTkFNRSAgICAgICAgICAgICAgICIiCisKK3N0cnVjdCBtZ3Jfb2JqZWN0IHsKKwlzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyOwkvKiBQcm9jL05vZGUgZGF0YSBtYW5hZ2VyICovCit9OworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFscyAqLworc3RhdGljIHUzMiByZWZzOworCisvKgorICogID09PT09PT09PSBtZ3JfY3JlYXRlID09PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE1HUiBPYmplY3QgZ2V0cyBjcmVhdGVkIG9ubHkgb25jZSBkdXJpbmcgZHJpdmVyIExvYWRpbmcuCisgKi8KK2ludCBtZ3JfY3JlYXRlKHN0cnVjdCBtZ3Jfb2JqZWN0ICoqbWdyX29iaiwKKwkJICAgICAgc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmopCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKG1ncl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcG1ncl9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWdyX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChwbWdyX29iaikgeworCQlzdGF0dXMgPSBkY2RfY3JlYXRlX21hbmFnZXIoWkxETExOQU1FLCAmcG1ncl9vYmotPmhkY2RfbWdyKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIElmIHN1Y2NlZWRlZCBzdG9yZSB0aGUgaGFuZGxlIGluIHRoZSBNR1IgT2JqZWN0ICovCisJCQlzdGF0dXMgPSBjZmdfc2V0X29iamVjdCgodTMyKSBwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkqbWdyX29iaiA9IHBtZ3Jfb2JqOworCQkJfSBlbHNlIHsKKwkJCQlkY2RfZGVzdHJveV9tYW5hZ2VyKHBtZ3Jfb2JqLT5oZGNkX21ncik7CisJCQkJa2ZyZWUocG1ncl9vYmopOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZmFpbGVkIHRvIENyZWF0ZSBEQ0QgTWFuYWdlciAqLworCQkJa2ZyZWUocG1ncl9vYmopOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisKKwlEQkNfRU5TVVJFKHN0YXR1cyB8fCBwbWdyX29iaik7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PT0gbWdyX2Rlc3Ryb3kgPT09PT09PT09CisgKiAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGR1cmluZyBicmlkZ2UgZHJpdmVyIHVubG9hZGluZy5GcmVlcyBNR1Igb2JqZWN0LgorICovCitpbnQgbWdyX2Rlc3Ryb3koc3RydWN0IG1ncl9vYmplY3QgKmhtZ3Jfb2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpwbWdyX29iaiA9IChzdHJ1Y3QgbWdyX29iamVjdCAqKWhtZ3Jfb2JqOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhtZ3Jfb2JqKTsKKworCS8qIEZyZWUgcmVzb3VyY2VzICovCisJaWYgKGhtZ3Jfb2JqLT5oZGNkX21ncikKKwkJZGNkX2Rlc3Ryb3lfbWFuYWdlcihobWdyX29iai0+aGRjZF9tZ3IpOworCisJa2ZyZWUocG1ncl9vYmopOworCS8qIFVwZGF0ZSB0aGUgUmVnaXN0cnkgd2l0aCBOVUxMIGZvciBNR1IgT2JqZWN0ICovCisJKHZvaWQpY2ZnX3NldF9vYmplY3QoMCwgUkVHX01HUl9PQkpFQ1QpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZW51bV9ub2RlX2luZm8gPT09PT09PT0KKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBub2RlcyBjb25maWd1cmVkCisgKiAgICAgIGluIHRoZSBub2RlIGRhdGFiYXNlLgorICovCitpbnQgbWdyX2VudW1fbm9kZV9pbmZvKHUzMiBub2RlX2lkLCBzdHJ1Y3QgZHNwX25kYnByb3BzICpwbmRiX3Byb3BzLAorCQkJICAgICAgdTMyIHVuZGJfcHJvcHNfc2l6ZSwgdTMyICpwdV9udW1fbm9kZXMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRzcF91dWlkIG5vZGVfdXVpZCwgdGVtcF91dWlkOworCXUzMiB0ZW1wX2luZGV4ID0gMDsKKwl1MzIgbm9kZV9pbmRleCA9IDA7CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIGdlbl9vYmo7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHBuZGJfcHJvcHMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHVfbnVtX25vZGVzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHVuZGJfcHJvcHNfc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9uZGJwcm9wcykpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCSpwdV9udW1fbm9kZXMgPSAwOworCS8qIEdldCBUaGUgTWFuYWdlciBPYmplY3QgZnJvbSB0aGUgUmVnaXN0cnkgKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJREJDX0FTU0VSVChwbWdyX29iaik7CisJLyogRm9yZXZlciBsb29wIHRpbGwgd2UgaGl0IGZhaWxlZCBvciBubyBtb3JlIGl0ZW1zIGluIHRoZQorCSAqIEVudW1lcmF0aW9uLiBXZSB3aWxsIGV4aXQgdGhlIGxvb3Agb3RoZXIgdGhhbiAwOyAqLworCXdoaWxlIChzdGF0dXMgPT0gMCkgeworCQlzdGF0dXMgPSBkY2RfZW51bWVyYXRlX29iamVjdCh0ZW1wX2luZGV4KyssIERTUF9EQ0ROT0RFVFlQRSwKKwkJCQkJICAgICAgJnRlbXBfdXVpZCk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJbm9kZV9pbmRleCsrOworCQkJaWYgKG5vZGVfaWQgPT0gKG5vZGVfaW5kZXggLSAxKSkKKwkJCQlub2RlX3V1aWQgPSB0ZW1wX3V1aWQ7CisKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQlpZiAobm9kZV9pZCA+IChub2RlX2luZGV4IC0gMSkpIHsKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYocG1ncl9vYmotPmhkY2RfbWdyLAorCQkJCQkJICAgIChzdHJ1Y3QgZHNwX3V1aWQgKikKKwkJCQkJCSAgICAmbm9kZV91dWlkLCBEU1BfRENETk9ERVRZUEUsCisJCQkJCQkgICAgJmdlbl9vYmopOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkvKiBHZXQgdGhlIE9iaiBkZWYgKi8KKwkJCQkqcG5kYl9wcm9wcyA9CisJCQkJICAgIGdlbl9vYmoub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzOworCQkJCSpwdV9udW1fbm9kZXMgPSBub2RlX2luZGV4OworCQkJfQorCQl9CisJfQorCitmdW5jX2NvbnQ6CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqcHVfbnVtX25vZGVzID4gMCkgfHwKKwkJICAgKHN0YXR1cyAmJiAqcHVfbnVtX25vZGVzID09IDApKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbWdyX2VudW1fcHJvY2Vzc29yX2luZm8gPT09PT09PT0KKyAqICAgICAgRW51bWVyYXRlIGFuZCBnZXQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhYm91dCBhdmFpbGFibGUKKyAqICAgICAgRFNQIHByb2Nlc3NvcnMuCisgKi8KK2ludCBtZ3JfZW51bV9wcm9jZXNzb3JfaW5mbyh1MzIgcHJvY2Vzc29yX2lkLAorCQkJCSAgIHN0cnVjdCBkc3BfcHJvY2Vzc29yaW5mbyAqCisJCQkJICAgcHJvY2Vzc29yX2luZm8sIHUzMiBwcm9jZXNzb3JfaW5mb19zaXplLAorCQkJCSAgIHU4ICpwdV9udW1fcHJvY3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCWludCBzdGF0dXMyID0gMDsKKwlzdHJ1Y3QgZHNwX3V1aWQgdGVtcF91dWlkOworCXUzMiB0ZW1wX2luZGV4ID0gMDsKKwl1MzIgcHJvY19pbmRleCA9IDA7CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIGdlbl9vYmo7CisJc3RydWN0IG1ncl9vYmplY3QgKnBtZ3Jfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gKmV4dF9pbmZvOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmo7CisJdTggZGV2X3R5cGU7CisJc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZTsKKwlib29sIHByb2NfZGV0ZWN0ID0gZmFsc2U7CisKKwlEQkNfUkVRVUlSRShwcm9jZXNzb3JfaW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9udW1fcHJvY3MgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocHJvY2Vzc29yX2luZm9fc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JpbmZvKSk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJKnB1X251bV9wcm9jcyA9IDA7CisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkcnZfZ2V0X2Rldl9vYmplY3QocHJvY2Vzc29yX2lkLCBoZHJ2X29iaiwgJmhkZXZfb2JqKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICh1OCAqKSAmZGV2X3R5cGUpOworCQkJc3RhdHVzID0gZGV2X2dldF9kZXZfbm9kZShoZGV2X29iaiwgJmRldl9ub2RlKTsKKwkJCWlmIChkZXZfdHlwZSAhPSBEU1BfVU5JVCkKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisKKwkJCWlmICghc3RhdHVzKQorCQkJCXByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3JfdHlwZSA9IERTUFRZUEU2NDsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogR2V0IFRoZSBNYW5hZ2VyIE9iamVjdCBmcm9tIHRoZSBSZWdpc3RyeSAqLworCWlmIChjZmdfZ2V0X29iamVjdCgodTMyICopICZwbWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byBnZXQgTUdSIE9iamVjdFxuIiwgX19mdW5jX18pOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlEQkNfQVNTRVJUKHBtZ3Jfb2JqKTsKKwkvKiBGb3JldmVyIGxvb3AgdGlsbCB3ZSBoaXQgbm8gbW9yZSBpdGVtcyBpbiB0aGUKKwkgKiBFbnVtZXJhdGlvbi4gV2Ugd2lsbCBleGl0IHRoZSBsb29wIG90aGVyIHRoYW4gMDsgKi8KKwl3aGlsZSAoc3RhdHVzMSA9PSAwKSB7CisJCXN0YXR1czEgPSBkY2RfZW51bWVyYXRlX29iamVjdCh0ZW1wX2luZGV4KyssCisJCQkJCSAgICAgICBEU1BfRENEUFJPQ0VTU09SVFlQRSwKKwkJCQkJICAgICAgICZ0ZW1wX3V1aWQpOworCQlpZiAoc3RhdHVzMSAhPSAwKQorCQkJYnJlYWs7CisKKwkJcHJvY19pbmRleCsrOworCQkvKiBHZXQgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHRvIGZpbmQgdGhlIERldmljZS9Qcm9jZXNzb3IKKwkJICogVHlwZSAqLworCQlpZiAocHJvY19kZXRlY3QgIT0gZmFsc2UpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMyID0gZGNkX2dldF9vYmplY3RfZGVmKHBtZ3Jfb2JqLT5oZGNkX21nciwKKwkJCQkJICAgICAoc3RydWN0IGRzcF91dWlkICopJnRlbXBfdXVpZCwKKwkJCQkJICAgICBEU1BfRENEUFJPQ0VTU09SVFlQRSwgJmdlbl9vYmopOworCQlpZiAoIXN0YXR1czIpIHsKKwkJCS8qIEdldCB0aGUgT2JqIGRlZiAqLworCQkJaWYgKHByb2Nlc3Nvcl9pbmZvX3NpemUgPAorCQkJICAgIHNpemVvZihzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8pKSB7CisJCQkJKnByb2Nlc3Nvcl9pbmZvID0gZ2VuX29iai5vYmpfZGF0YS5wcm9jX2luZm87CisJCQl9IGVsc2UgeworCQkJCS8qIGV4dGVuZGVkIGluZm8gKi8KKwkJCQlleHRfaW5mbyA9IChzdHJ1Y3QgbWdyX3Byb2Nlc3NvcmV4dGluZm8gKikKKwkJCQkgICAgcHJvY2Vzc29yX2luZm87CisJCQkJKmV4dF9pbmZvID0gZ2VuX29iai5vYmpfZGF0YS5leHRfcHJvY19vYmo7CisJCQl9CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBHb3QgcHJvY3R5cGUgIGZyb20gRENEICV4XG4iLAorCQkJCV9fZnVuY19fLCBwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUpOworCQkJLyogU2VlIGlmIHdlIGdvdCB0aGUgbmVlZGVkIHByb2Nlc3NvciAqLworCQkJaWYgKGRldl90eXBlID09IERTUF9VTklUKSB7CisJCQkJaWYgKHByb2Nlc3Nvcl9pbmZvLT5wcm9jZXNzb3JfdHlwZSA9PQorCQkJCSAgICBEU1BQUk9DVFlQRV9DNjQpCisJCQkJCXByb2NfZGV0ZWN0ID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAoZGV2X3R5cGUgPT0gSVZBX1VOSVQpIHsKKwkJCQlpZiAocHJvY2Vzc29yX2luZm8tPnByb2Nlc3Nvcl90eXBlID09CisJCQkJICAgIElWQVBST0NUWVBFX0FSTTcpCisJCQkJCXByb2NfZGV0ZWN0ID0gdHJ1ZTsKKwkJCX0KKwkJCS8qIFVzZXIgYXBwbGNpYXRpdW9ucyBhb25seSBjaGVjayBmb3IgY2hpcCB0eXBlLCBzbworCQkJICogdGhpcyBjbHVtc3kgb3ZlcndyaXRlICovCisJCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBGYWlsZWQgdG8gZ2V0IERDRCBwcm9jZXNzb3IgaW5mbyAiCisJCQkJIiV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMik7CisJCQlzdGF0dXMgPSAtRVBFUk07CisJCX0KKwl9CisJKnB1X251bV9wcm9jcyA9IHByb2NfaW5kZXg7CisJaWYgKHByb2NfZGV0ZWN0ID09IGZhbHNlKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IEZhaWxlZCB0byBnZXQgcHJvYyBpbmZvIGZyb20gRENELCBzbyB1c2UgIgorCQkJIkNGRyByZWdpc3RyeVxuIiwgX19mdW5jX18pOworCQlwcm9jZXNzb3JfaW5mby0+cHJvY2Vzc29yX3R5cGUgPSBEU1BUWVBFNjQ7CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZXhpdCA9PT09PT09PQorICogICAgICBEZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50LCBhbmQgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQgaXMKKyAqICAgICAgMC4KKyAqLwordm9pZCBtZ3JfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlyZWZzLS07CisJaWYgKHJlZnMgPT0gMCkKKwkJZGNkX2V4aXQoKTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBtZ3JfZ2V0X2RjZF9oYW5kbGUgPT09PT09PT0KKyAqICAgICAgUmV0cmlldmVzIHRoZSBNR1IgaGFuZGxlLiBBY2Nlc3NvciBGdW5jdGlvbi4KKyAqLworaW50IG1ncl9nZXRfZGNkX2hhbmRsZShzdHJ1Y3QgbWdyX29iamVjdCAqbWdyX2hhbmRsZSwKKwkJCSAgICAgIHUzMiAqZGNkX2hhbmRsZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpwbWdyX29iaiA9IChzdHJ1Y3QgbWdyX29iamVjdCAqKW1ncl9oYW5kbGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGNkX2hhbmRsZSAhPSBOVUxMKTsKKworCSpkY2RfaGFuZGxlID0gKHUzMikgTlVMTDsKKwlpZiAocG1ncl9vYmopIHsKKwkJKmRjZF9oYW5kbGUgPSAodTMyKSBwbWdyX29iai0+aGRjZF9tZ3I7CisJCXN0YXR1cyA9IDA7CisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKmRjZF9oYW5kbGUgIT0gKHUzMikgTlVMTCkgfHwKKwkJICAgKHN0YXR1cyAmJiAqZGNkX2hhbmRsZSA9PSAodTMyKSBOVUxMKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG1ncl9pbml0ID09PT09PT09CisgKiAgICAgIEluaXRpYWxpemUgTUdSJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwuCisgKi8KK2Jvb2wgbWdyX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJYm9vbCBpbml0X2RjZCA9IGZhbHNlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZWZzID09IDApIHsKKwkJaW5pdF9kY2QgPSBkY2RfaW5pdCgpOwkvKiAgRENEIE1vZHVsZSAqLworCisJCWlmICghaW5pdF9kY2QpCisJCQlyZXQgPSBmYWxzZTsKKwl9CisKKwlpZiAocmV0KQorCQlyZWZzKys7CisKKwlEQkNfRU5TVVJFKChyZXQgJiYgKHJlZnMgPiAwKSkgfHwgKCFyZXQgJiYgKHJlZnMgPj0gMCkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMgPT09PT09PT0KKyAqICAgICAgQmxvY2sgb24gYW55IEJyaWRnZSBldmVudChzKQorICovCitpbnQgbWdyX3dhaXRfZm9yX2JyaWRnZV9ldmVudHMoc3RydWN0IGRzcF9ub3RpZmljYXRpb24gKiphbm90aWZpY2F0aW9ucywKKwkJCQkgICAgICB1MzIgY291bnQsIHUzMiAqcHVfaW5kZXgsCisJCQkJICAgICAgdTMyIHV0aW1lb3V0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHN5bmNfb2JqZWN0ICpzeW5jX2V2ZW50c1tNQVhfRVZFTlRTXTsKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKGNvdW50IDwgTUFYX0VWRU5UUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJc3luY19ldmVudHNbaV0gPSBhbm90aWZpY2F0aW9uc1tpXS0+aGFuZGxlOworCisJc3RhdHVzID0gc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzeW5jX2V2ZW50cywgY291bnQsIHV0aW1lb3V0LAorCQkJCQkgICAgICBwdV9pbmRleCk7CisKKwlyZXR1cm4gc3RhdHVzOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ubGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmNGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25sZHIuYwpAQCAtMCwwICsxLDE5NzQgQEAKKy8qCisgKiBubGRyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIGR5bmFtaWMgKyBvdmVybGF5IE5vZGUgbG9hZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogUGxhdGZvcm0gbWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jb2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGV2Lmg+CisKKy8qIFJlc291cmNlIG1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvdXVpZHV0aWwuaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9ubGRyLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CisKKy8qIE5hbWUgb2Ygc2VjdGlvbiBjb250YWluaW5nIGR5bmFtaWMgbG9hZCBtZW0gKi8KKyNkZWZpbmUgRFlOTUVNU0VDVCAgIi5kc3BicmlkZ2VfbWVtIgorCisvKiBOYW1lIG9mIHNlY3Rpb24gY29udGFpbmluZyBkZXBlbmRlbnQgbGlicmFyeSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBERVBMSUJTRUNUICAiLmRzcGJyaWRnZV9kZXBsaWJzIgorCisvKiBNYXggZGVwdGggb2YgcmVjdXJzaW9uIGZvciBsb2FkaW5nIG5vZGUncyBkZXBlbmRlbnQgbGlicmFyaWVzICovCisjZGVmaW5lIE1BWERFUFRICSAgICA1CisKKy8qIE1heCBudW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMga2VwdCBieSBhIG5vZGUgKi8KKyNkZWZpbmUgTUFYTElCUwkgNQorCisvKgorICogIERlZmluZXMgZm9yIGV4dHJhY3RpbmcgcGFja2VkIGR5bmFtaWMgbG9hZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gdHdvCisgKiAgbWFza3MuCisgKiAgVGhlc2UgZGVmaW5lcyBtdXN0IG1hdGNoIG5vZGUuY2RiIGFuZCBkeW5tLmNkYgorICogIEZvcm1hdCBvZiBkYXRhL2NvZGUgbWFzayBpczoKKyAqICAgdXV1dXV1dXV8ZnVlZWVlZWV8ZnVkZGRkZGR8ZnVjY2NjY2N8CisgKiAgd2hlcmUKKyAqICAgICAgdSA9IHVudXNlZAorICogICAgICBjY2NjY2MgPSBwcmVmZXJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgY3JlYXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBkZGRkZGQgPSBwcmVmZXJlZC9yZXF1aXJlZCBkeW5hbWljIG1lbSBzZWdpZCBmb3IgZGVsZXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBlZWVlZWUgPSBwcmVmZXJlZC9yZXEuIGR5bmFtaWMgbWVtIHNlZ2lkIGZvciBleGVjdXRlIHBoYXNlIGRhdGEvY29kZQorICogICAgICBmID0gZmxhZyBpbmRpY2F0aW5nIGlmIG1lbW9yeSBpcyBwcmVmZXJyZWQgb3IgcmVxdWlyZWQ6CisgKgkgIGYgPSAxIGlmIHJlcXVpcmVkLCBmID0gMCBpZiBwcmVmZXJyZWQuCisgKgorICogIFRoZSA2IGJpdHMgb2YgdGhlIHNlZ2lkIGFyZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorICoKKyAqICBJZiB0aGUgNnRoIGJpdCAoYml0IDUpIGlzIG5vdCBzZXQsIHRoZW4gdGhpcyBzcGVjaWZpZXMgYSBtZW1vcnkgc2VnbWVudAorICogIGJldHdlZW4gMCBhbmQgMzEgKGEgbWF4aW11bSBvZiAzMiBkeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnRzKS4KKyAqICBJZiB0aGUgNnRoIGJpdCAoYml0IDUpIGlzIHNldCwgc2VnaWQgaGFzIHRoZSBmb2xsb3dpbmcgaW50ZXJwcmV0YXRpb246CisgKiAgICAgIHNlZ2lkID0gMzIgLSBBbnkgaW50ZXJuYWwgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQuCisgKiAgICAgIHNlZ2lkID0gMzMgLSBBbnkgZXh0ZXJuYWwgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQuCisgKiAgICAgIHNlZ2lkID0gNjMgLSBBbnkgbWVtb3J5IHNlZ21lbnQgY2FuIGJlIHVzZWQgKGluIHRoaXMgY2FzZSB0aGUKKyAqCQkgICByZXF1aXJlZC9wcmVmZXJyZWQgZmxhZyBpcyBpcnJlbGV2YW50KS4KKyAqCisgKi8KKy8qIE1heGltdW0gYWxsb3dlZCBkeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnRzICovCisjZGVmaW5lIE1BWE1FTVNFR1MgICAgICAzMgorCisjZGVmaW5lIE1BWFNFR0lECTMJLyogTGFyZ2VzdCBwb3NzaWJsZSAocmVhbCkgc2VnaWQgKi8KKyNkZWZpbmUgTUVNSU5URVJOQUxJRCAgIDMyCS8qIFNlZ2lkIG1lYW5pbmcgdXNlIGludGVybmFsIG1lbSAqLworI2RlZmluZSBNRU1FWFRFUk5BTElEICAgMzMJLyogU2VnaWQgbWVhbmluZyB1c2UgZXh0ZXJuYWwgbWVtICovCisjZGVmaW5lIE5VTExJRAkgIDYzCQkvKiBTZWdpZCBtZWFuaW5nIG5vIG1lbW9yeSByZXEvcHJlZiAqLworI2RlZmluZSBGTEFHQklUCSA3CQkvKiA3dGggYml0IGlzIHByZWYuL3JlcS4gZmxhZyAqLworI2RlZmluZSBTRUdNQVNLCSAweDNmCQkvKiBCaXRzIDAgLSA1ICovCisKKyNkZWZpbmUgQ1JFQVRFQklUCTAJLyogQ3JlYXRlIHNlZ2lkIHN0YXJ0cyBhdCBiaXQgMCAqLworI2RlZmluZSBERUxFVEVCSVQJOAkvKiBEZWxldGUgc2VnaWQgc3RhcnRzIGF0IGJpdCA4ICovCisjZGVmaW5lIEVYRUNVVEVCSVQgICAgICAxNgkvKiBFeGVjdXRlIHNlZ2lkIHN0YXJ0cyBhdCBiaXQgMTYgKi8KKworLyoKKyAqICBNYXNrcyB0aGF0IGRlZmluZSBtZW1vcnkgdHlwZS4gIE11c3QgbWF0Y2ggZGVmaW5lcyBpbiBkeW5tLmNkYi4KKyAqLworI2RlZmluZSBEWU5NX0NPREUJMHgyCisjZGVmaW5lIERZTk1fREFUQQkweDQKKyNkZWZpbmUgRFlOTV9DT0RFREFUQSAgIChEWU5NX0NPREUgfCBEWU5NX0RBVEEpCisjZGVmaW5lIERZTk1fSU5URVJOQUwgICAweDgKKyNkZWZpbmUgRFlOTV9FWFRFUk5BTCAgIDB4MTAKKworLyoKKyAqICBEZWZpbmVzIGZvciBwYWNraW5nIG1lbW9yeSByZXF1aXJlbWVudC9wcmVmZXJlbmNlIGZsYWdzIGZvciBjb2RlIGFuZAorICogIGRhdGEgb2YgZWFjaCBvZiB0aGUgbm9kZSdzIHBoYXNlcyBpbnRvIG9uZSBtYXNrLgorICogIFRoZSBiaXQgaXMgc2V0IGlmIHRoZSBzZWdpZCBpcyByZXF1aXJlZCBmb3IgbG9hZGluZyBjb2RlL2RhdGEgb2YgdGhlCisgKiAgZ2l2ZW4gcGhhc2UuIFRoZSBiaXQgaXMgbm90IHNldCwgaWYgdGhlIHNlZ2lkIGlzIHByZWZlcnJlZCBvbmx5LgorICoKKyAqICBUaGVzZSBkZWZpbmVzIGFyZSBhbHNvIHVzZWQgYXMgaW5kZWNlcyBpbnRvIGEgc2VnaWQgYXJyYXkgZm9yIHRoZSBub2RlLgorICogIGVnIG5vZGUncyBzZWdpZFtDUkVBVEVEQVRBRkxBR0JJVF0gaXMgdGhlIG1lbW9yeSBzZWdtZW50IGlkIHRoYXQgdGhlCisgKiAgY3JlYXRlIHBoYXNlIGRhdGEgaXMgcmVxdWlyZWQgb3IgcHJlZmVycmVkIHRvIGJlIGxvYWRlZCBpbnRvLgorICovCisjZGVmaW5lIENSRUFURURBVEFGTEFHQklUICAgMAorI2RlZmluZSBDUkVBVEVDT0RFRkxBR0JJVCAgIDEKKyNkZWZpbmUgRVhFQ1VURURBVEFGTEFHQklUICAyCisjZGVmaW5lIEVYRUNVVEVDT0RFRkxBR0JJVCAgMworI2RlZmluZSBERUxFVEVEQVRBRkxBR0JJVCAgIDQKKyNkZWZpbmUgREVMRVRFQ09ERUZMQUdCSVQgICA1CisjZGVmaW5lIE1BWEZMQUdTCSAgICA2CisKKyAgICAvKgorICAgICAqICBUaGVzZSBuYW1lcyBtYXkgYmUgZW1iZWRkZWQgaW4gb3ZlcmxheSBzZWN0aW9ucyB0byBpZGVudGlmeSB3aGljaAorICAgICAqICBub2RlIHBoYXNlIHRoZSBzZWN0aW9uIHNob3VsZCBiZSBvdmVybGF5ZWQuCisgKi8KKyNkZWZpbmUgUENSRUFURQkgImNyZWF0ZSIKKyNkZWZpbmUgUERFTEVURQkgImRlbGV0ZSIKKyNkZWZpbmUgUEVYRUNVVEUJImV4ZWN1dGUiCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19lcXVhbF91dWlkKHN0cnVjdCBkc3BfdXVpZCAqdXVpZDEsCisJCQkJCQkJc3RydWN0IGRzcF91dWlkICp1dWlkMikKK3sKKwlyZXR1cm4gIW1lbWNtcCh1dWlkMSwgdXVpZDIsIHNpemVvZihzdHJ1Y3QgZHNwX3V1aWQpKTsKK30KKworICAgIC8qCisgICAgICogID09PT09PT09IG1lbV9zZWdfaW5mbyA9PT09PT09PQorICAgICAqICBGb3JtYXQgb2YgZHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50IGluZm8gaW4gY29mZiBmaWxlLgorICAgICAqICBNdXN0IG1hdGNoIGR5bm0uaDU1LgorICovCitzdHJ1Y3QgbWVtX3NlZ19pbmZvIHsKKwl1MzIgc2VnaWQ7CQkvKiBEeW5hbWljIGxvYWRpbmcgbWVtb3J5IHNlZ21lbnQgbnVtYmVyICovCisJdTMyIGJhc2U7CisJdTMyIGxlbjsKKwl1MzIgdHlwZTsJCS8qIE1hc2sgb2YgRFlOTV9DT0RFLCBEWU5NX0lOVEVSTkFMLCBldGMuICovCit9OworCisvKgorICogID09PT09PT09IGxpYl9ub2RlID09PT09PT09CisgKiAgRm9yIG1haW50YWluaW5nIGEgdHJlZSBvZiBsaWJyYXJ5IGRlcGVuZGVuY2llcy4KKyAqLworc3RydWN0IGxpYl9ub2RlIHsKKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliOwkvKiBUaGUgbGlicmFyeSAqLworCXUxNiBkZXBfbGliczsJCS8qIE51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJc3RydWN0IGxpYl9ub2RlICpkZXBfbGlic190cmVlOwkvKiBEZXBlbmRlbnQgbGlicmFyaWVzIG9mIGxpYiAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBvdmx5X3NlY3QgPT09PT09PT0KKyAqICBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gb3ZlcmxheSBhIHNlY3Rpb24uCisgKi8KK3N0cnVjdCBvdmx5X3NlY3QgeworCXN0cnVjdCBvdmx5X3NlY3QgKm5leHRfc2VjdDsKKwl1MzIgc2VjdF9sb2FkX2FkZHI7CS8qIExvYWQgYWRkcmVzcyBvZiBzZWN0aW9uICovCisJdTMyIHNlY3RfcnVuX2FkZHI7CS8qIFJ1biBhZGRyZXNzIG9mIHNlY3Rpb24gKi8KKwl1MzIgc2l6ZTsJCS8qIFNpemUgb2Ygc2VjdGlvbiAqLworCXUxNiBwYWdlOwkJLyogREJMX0NPREUsIERCTF9EQVRBICovCit9OworCisvKgorICogID09PT09PT09IG92bHlfbm9kZSA9PT09PT09PQorICogIEZvciBtYWludGFpbmluZyBhIGxpc3Qgb2Ygb3ZlcmxheSBub2Rlcywgd2l0aCBzZWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUKKyAqICBvdmVybGF5ZWQgZm9yIGVhY2ggb2YgdGhlIG5vZGVzIHBoYXNlcy4KKyAqLworc3RydWN0IG92bHlfbm9kZSB7CisJc3RydWN0IGRzcF91dWlkIHV1aWQ7CisJY2hhciAqbm9kZV9uYW1lOworCXN0cnVjdCBvdmx5X3NlY3QgKmNyZWF0ZV9zZWN0c19saXN0OworCXN0cnVjdCBvdmx5X3NlY3QgKmRlbGV0ZV9zZWN0c19saXN0OworCXN0cnVjdCBvdmx5X3NlY3QgKmV4ZWN1dGVfc2VjdHNfbGlzdDsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdGhlcl9zZWN0c19saXN0OworCXUxNiBjcmVhdGVfc2VjdHM7CisJdTE2IGRlbGV0ZV9zZWN0czsKKwl1MTYgZXhlY3V0ZV9zZWN0czsKKwl1MTYgb3RoZXJfc2VjdHM7CisJdTE2IGNyZWF0ZV9yZWY7CisJdTE2IGRlbGV0ZV9yZWY7CisJdTE2IGV4ZWN1dGVfcmVmOworCXUxNiBvdGhlcl9yZWY7Cit9OworCisvKgorICogID09PT09PT09IG5sZHJfb2JqZWN0ID09PT09PT09CisgKiAgT3ZlcmxheSBsb2FkZXIgb2JqZWN0LgorICovCitzdHJ1Y3Qgbmxkcl9vYmplY3QgeworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsJLyogRGV2aWNlIG9iamVjdCAqLworCXN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3I7CS8qIFByb2MvTm9kZSBkYXRhIG1hbmFnZXIgKi8KKwlzdHJ1Y3QgZGJsbF90YXJfb2JqICpkYmxsOwkvKiBUaGUgREJMIGxvYWRlciAqLworCXN0cnVjdCBkYmxsX2xpYnJhcnlfb2JqICpiYXNlX2xpYjsJLyogQmFzZSBpbWFnZSBsaWJyYXJ5ICovCisJc3RydWN0IHJtbV90YXJnZXRfb2JqICpybW07CS8qIFJlbW90ZSBtZW1vcnkgbWFuYWdlciBmb3IgRFNQICovCisJc3RydWN0IGRibGxfZnhucyBsZHJfZnhuczsJLyogTG9hZGVyIGZ1bmN0aW9uIHRhYmxlICovCisJc3RydWN0IGRibGxfYXR0cnMgbGRyX2F0dHJzOwkvKiBhdHRycyB0byBwYXNzIHRvIGxvYWRlciBmdW5jdGlvbnMgKi8KKwlubGRyX292bHlmeG4gb3ZseV9meG47CS8qICJ3cml0ZSIgZm9yIG92ZXJsYXkgbm9kZXMgKi8KKwlubGRyX3dyaXRlZnhuIHdyaXRlX2Z4bjsJLyogIndyaXRlIiBmb3IgZHluYW1pYyBub2RlcyAqLworCXN0cnVjdCBvdmx5X25vZGUgKm92bHlfdGFibGU7CS8qIFRhYmxlIG9mIG92ZXJsYXkgbm9kZXMgKi8KKwl1MTYgb3ZseV9ub2RlczsJCS8qIE51bWJlciBvZiBvdmVybGF5IG5vZGVzIGluIGJhc2UgKi8KKwl1MTYgb3ZseV9uaWQ7CQkvKiBJbmRleCBmb3IgdHJhY2tpbmcgb3ZlcmxheSBub2RlcyAqLworCXUxNiBkbG9hZF9zZWdzOwkJLyogTnVtYmVyIG9mIGR5bmFtaWMgbG9hZCBtZW0gc2VncyAqLworCXUzMiAqc2VnX3RhYmxlOwkJLyogbWVtdHlwZXMgb2YgZHluYW1pYyBtZW1vcnkgc2VncworCQkJCSAqIGluZGV4ZWQgYnkgc2VnaWQKKwkJCQkgKi8KKwl1MTYgdXNfZHNwX21hdV9zaXplOwkvKiBTaXplIG9mIERTUCBNQVUgKi8KKwl1MTYgdXNfZHNwX3dvcmRfc2l6ZTsJLyogU2l6ZSBvZiBEU1Agd29yZCAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBubGRyX25vZGVvYmplY3QgPT09PT09PT0KKyAqICBEeW5hbWljIG5vZGUgb2JqZWN0LiBUaGlzIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYSBub2RlIGlzIGFsbG9jYXRlZC4KKyAqLworc3RydWN0IG5sZHJfbm9kZW9iamVjdCB7CisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsJLyogRHluYW1pYyBsb2FkZXIgaGFuZGxlICovCisJdm9pZCAqcHJpdl9yZWY7CQkvKiBIYW5kbGUgdG8gcGFzcyB0byBkYmxfd3JpdGVfZnhuICovCisJc3RydWN0IGRzcF91dWlkIHV1aWQ7CS8qIE5vZGUncyBVVUlEICovCisJYm9vbCBkeW5hbWljOwkJLyogRHluYW1pY2FsbHkgbG9hZGVkIG5vZGU/ICovCisJYm9vbCBvdmVybGF5OwkJLyogT3ZlcmxheSBub2RlPyAqLworCWJvb2wgKnBmX3BoYXNlX3NwbGl0OwkvKiBNdWx0aXBsZSBwaGFzZSBsaWJyYXJpZXM/ICovCisJc3RydWN0IGxpYl9ub2RlIHJvb3Q7CS8qIExpYnJhcnkgY29udGFpbmluZyBub2RlIHBoYXNlICovCisJc3RydWN0IGxpYl9ub2RlIGNyZWF0ZV9saWI7CS8qIExpYnJhcnkgd2l0aCBjcmVhdGUgcGhhc2UgbGliICovCisJc3RydWN0IGxpYl9ub2RlIGV4ZWN1dGVfbGliOwkvKiBMaWJyYXJ5IHdpdGggZXhlY3V0ZSBwaGFzZSBsaWIgKi8KKwlzdHJ1Y3QgbGliX25vZGUgZGVsZXRlX2xpYjsJLyogTGlicmFyeSB3aXRoIGRlbGV0ZSBwaGFzZSBsaWIgKi8KKwkvKiBsaWJzIHJlbWFpbiBsb2FkZWQgdW50aWwgRGVsZXRlICovCisJc3RydWN0IGxpYl9ub2RlIHBlcnNfbGliX3RhYmxlW01BWExJQlNdOworCXMzMiBwZXJzX2xpYnM7CQkvKiBOdW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwkvKiBQYXRoIGluIGxpYiBkZXBlbmRlbmN5IHRyZWUgKi8KKwlzdHJ1Y3QgZGJsbF9saWJyYXJ5X29iaiAqbGliX3BhdGhbTUFYREVQVEggKyAxXTsKKwllbnVtIG5sZHJfcGhhc2UgcGhhc2U7CS8qIE5vZGUgcGhhc2UgY3VycmVudGx5IGJlaW5nIGxvYWRlZCAqLworCisJLyoKKwkgKiAgRHluYW1pYyBsb2FkaW5nIG1lbW9yeSBzZWdtZW50cyBmb3IgZGF0YSBhbmQgY29kZSBvZiBlYWNoIHBoYXNlLgorCSAqLworCXUxNiBzZWdfaWRbTUFYRkxBR1NdOworCisJLyoKKwkgKiAgTWFzayBpbmRpY2F0aW5nIHdoZXRoZXIgZWFjaCBtZW0gc2VnbWVudCBzcGVjaWZpZWQgaW4gc2VnX2lkW10KKwkgKiAgaXMgcHJlZmVycmVkIG9yIHJlcXVpcmVkLgorCSAqICBGb3IgZXhhbXBsZQorCSAqICAJaWYgKGNvZGVfZGF0YV9mbGFnX21hc2sgJiAoMSA8PCBFWEVDVVRFREFUQUZMQUdCSVQpKSAhPSAwLAorCSAqICB0aGVuIGl0IGlzIHJlcXVpcmVkIHRvIGxvYWQgZXhlY3V0ZSBwaGFzZSBkYXRhIGludG8gdGhlIG1lbW9yeQorCSAqICBzcGVjaWZpZWQgYnkgc2VnX2lkW0VYRUNVVEVEQVRBRkxBR0JJVF0uCisJICovCisJdTMyIGNvZGVfZGF0YV9mbGFnX21hc2s7Cit9OworCisvKiBEeW5hbWljIGxvYWRlciBmdW5jdGlvbiB0YWJsZSAqLworc3RhdGljIHN0cnVjdCBkYmxsX2Z4bnMgbGRyX2Z4bnMgPSB7CisJKGRibGxfY2xvc2VfZnhuKSBkYmxsX2Nsb3NlLAorCShkYmxsX2NyZWF0ZV9meG4pIGRibGxfY3JlYXRlLAorCShkYmxsX2RlbGV0ZV9meG4pIGRibGxfZGVsZXRlLAorCShkYmxsX2V4aXRfZnhuKSBkYmxsX2V4aXQsCisJKGRibGxfZ2V0X2F0dHJzX2Z4bikgZGJsbF9nZXRfYXR0cnMsCisJKGRibGxfZ2V0X2FkZHJfZnhuKSBkYmxsX2dldF9hZGRyLAorCShkYmxsX2dldF9jX2FkZHJfZnhuKSBkYmxsX2dldF9jX2FkZHIsCisJKGRibGxfZ2V0X3NlY3RfZnhuKSBkYmxsX2dldF9zZWN0LAorCShkYmxsX2luaXRfZnhuKSBkYmxsX2luaXQsCisJKGRibGxfbG9hZF9meG4pIGRibGxfbG9hZCwKKwkoZGJsbF9sb2FkX3NlY3RfZnhuKSBkYmxsX2xvYWRfc2VjdCwKKwkoZGJsbF9vcGVuX2Z4bikgZGJsbF9vcGVuLAorCShkYmxsX3JlYWRfc2VjdF9meG4pIGRibGxfcmVhZF9zZWN0LAorCShkYmxsX3NldF9hdHRyc19meG4pIGRibGxfc2V0X2F0dHJzLAorCShkYmxsX3VubG9hZF9meG4pIGRibGxfdW5sb2FkLAorCShkYmxsX3VubG9hZF9zZWN0X2Z4bikgZGJsbF91bmxvYWRfc2VjdCwKK307CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworc3RhdGljIGludCBhZGRfb3ZseV9pbmZvKHZvaWQgKmhhbmRsZSwgc3RydWN0IGRibGxfc2VjdF9pbmZvICpzZWN0X2luZm8sCisJCQkJdTMyIGFkZHIsIHUzMiBieXRlcyk7CitzdGF0aWMgaW50IGFkZF9vdmx5X25vZGUoc3RydWN0IGRzcF91dWlkICp1dWlkX29iaiwKKwkJCQllbnVtIGRzcF9kY2RvYmp0eXBlIG9ial90eXBlLCB2b2lkICpoYW5kbGUpOworc3RhdGljIGludCBhZGRfb3ZseV9zZWN0KHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCQkJc3RydWN0IG92bHlfc2VjdCAqKmxzdCwKKwkJCQlzdHJ1Y3QgZGJsbF9zZWN0X2luZm8gKnNlY3RfaW5mLAorCQkJCWJvb2wgKmV4aXN0cywgdTMyIGFkZHIsIHUzMiBieXRlcyk7CitzdGF0aWMgczMyIGZha2Vfb3ZseV93cml0ZSh2b2lkICpoYW5kbGUsIHUzMiBkc3BfYWRkcmVzcywgdm9pZCAqYnVmLCB1MzIgYnl0ZXMsCisJCQkgICBzMzIgbXR5cGUpOworc3RhdGljIHZvaWQgZnJlZV9zZWN0cyhzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLAorCQkgICAgICAgc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMsIHUxNiBhbGxvY19udW0pOworc3RhdGljIGJvb2wgZ2V0X3N5bWJvbF92YWx1ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnBhcmcsIHZvaWQgKnJtbV9oYW5kbGUsCisJCQkgICAgIGNoYXIgKnN5bV9uYW1lLCBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltKTsKK3N0YXRpYyBpbnQgbG9hZF9saWIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBsaWJfbm9kZSAqcm9vdCwgc3RydWN0IGRzcF91dWlkIHV1aWQsCisJCQkgICBib29sIHJvb3RfcHJzdG50LAorCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfcGF0aCwKKwkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSwgdTE2IGRlcHRoKTsKK3N0YXRpYyBpbnQgbG9hZF9vdmx5KHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQkgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKTsKK3N0YXRpYyBpbnQgcmVtb3RlX2FsbG9jKHZvaWQgKipyZWYsIHUxNiBtZW1fc2VjdCwgdTMyIHNpemUsCisJCQkgICAgICAgdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzLAorCQkJICAgICAgIHMzMiBzZWdtbnRfaWQsCisJCQkgICAgICAgczMyIHJlcSwgYm9vbCByZXNlcnZlKTsKK3N0YXRpYyBpbnQgcmVtb3RlX2ZyZWUodm9pZCAqKnJlZiwgdTE2IHNwYWNlLCB1MzIgZHNwX2FkZHJlc3MsIHUzMiBzaXplLAorCQkJICAgICAgYm9vbCByZXNlcnZlKTsKKworc3RhdGljIHZvaWQgdW5sb2FkX2xpYihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkgICAgICAgc3RydWN0IGxpYl9ub2RlICpyb290KTsKK3N0YXRpYyB2b2lkIHVubG9hZF9vdmx5KHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCQllbnVtIG5sZHJfcGhhc2UgcGhhc2UpOworc3RhdGljIGJvb2wgZmluZF9pbl9wZXJzaXN0ZW50X2xpYl9hcnJheShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCQkgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYik7CitzdGF0aWMgdTMyIGZpbmRfbGNtKHUzMiBhLCB1MzIgYik7CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9hbGxvY2F0ZSA9PT09PT09PQorICovCitpbnQgbmxkcl9hbGxvY2F0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLCB2b2lkICpwcml2X3JlZiwKKwkJCSBjb25zdCBzdHJ1Y3QgZGNkX25vZGVwcm9wcyAqbm9kZV9wcm9wcywKKwkJCSBzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICoqbmxkcl9ub2Rlb2JqLAorCQkJIGJvb2wgKnBmX3BoYXNlX3NwbGl0KQoreworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmogPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5vZGVfcHJvcHMgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobmxkcl9ub2Rlb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5sZHJfb2JqKTsKKworCS8qIEluaXRpYWxpemUgaGFuZGxlIGluIGNhc2Ugb2YgZmFpbHVyZSAqLworCSpubGRyX25vZGVvYmogPSBOVUxMOworCS8qIEFsbG9jYXRlIG5vZGUgb2JqZWN0ICovCisJbmxkcl9ub2RlX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBubGRyX25vZGVvYmplY3QpLCBHRlBfS0VSTkVMKTsKKworCWlmIChubGRyX25vZGVfb2JqID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9IGVsc2UgeworCQlubGRyX25vZGVfb2JqLT5wZl9waGFzZV9zcGxpdCA9IHBmX3BoYXNlX3NwbGl0OworCQlubGRyX25vZGVfb2JqLT5wZXJzX2xpYnMgPSAwOworCQlubGRyX25vZGVfb2JqLT5ubGRyX29iaiA9IG5sZHJfb2JqOworCQlubGRyX25vZGVfb2JqLT5wcml2X3JlZiA9IHByaXZfcmVmOworCQkvKiBTYXZlIG5vZGUncyBVVUlELiAqLworCQlubGRyX25vZGVfb2JqLT51dWlkID0gbm9kZV9wcm9wcy0+bmRiX3Byb3BzLnVpX25vZGVfaWQ7CisJCS8qCisJCSAqICBEZXRlcm1pbmUgaWYgbm9kZSBpcyBhIGR5bmFtaWNhbGx5IGxvYWRlZCBub2RlIGZyb20KKwkJICogIG5kYl9wcm9wcy4KKwkJICovCisJCWlmIChub2RlX3Byb3BzLT51c19sb2FkX3R5cGUgPT0gTkxEUl9EWU5BTUlDTE9BRCkgeworCQkJLyogRHluYW1pYyBub2RlICovCisJCQlubGRyX25vZGVfb2JqLT5keW5hbWljID0gdHJ1ZTsKKwkJCS8qCisJCQkgKiAgRXh0cmFjdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gbmRiX3Byb3BzIG1hc2tzCisJCQkgKi8KKwkJCS8qIENyZWF0ZSBwaGFzZSAqLworCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0NSRUFURURBVEFGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2RhdGFfbWVtX3NlZ19tYXNrID4+IENSRUFURUJJVCkgJgorCQkJICAgIFNFR01BU0s7CisJCQlubGRyX25vZGVfb2JqLT5jb2RlX2RhdGFfZmxhZ19tYXNrIHw9CisJCQkgICAgKChub2RlX3Byb3BzLT51bF9kYXRhX21lbV9zZWdfbWFzayA+PgorCQkJICAgICAgKENSRUFURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8IENSRUFURURBVEFGTEFHQklUOworCQkJbmxkcl9ub2RlX29iai0+c2VnX2lkW0NSRUFURUNPREVGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgIENSRUFURUJJVCkgJiBTRUdNQVNLOworCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8PQorCQkJICAgICgobm9kZV9wcm9wcy0+dWxfY29kZV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgIChDUkVBVEVCSVQgKyBGTEFHQklUKSkgJiAxKSA8PCBDUkVBVEVDT0RFRkxBR0JJVDsKKwkJCS8qIEV4ZWN1dGUgcGhhc2UgKi8KKwkJCW5sZHJfbm9kZV9vYmotPnNlZ19pZFtFWEVDVVRFREFUQUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgRVhFQ1VURUJJVCkgJiBTRUdNQVNLOworCQkJbmxkcl9ub2RlX29iai0+Y29kZV9kYXRhX2ZsYWdfbWFzayB8PQorCQkJICAgICgobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgIChFWEVDVVRFQklUICsgRkxBR0JJVCkpICYgMSkgPDwKKwkJCSAgICBFWEVDVVRFREFUQUZMQUdCSVQ7CisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbRVhFQ1VURUNPREVGTEFHQklUXSA9ICh1MTYpCisJCQkgICAgKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgIEVYRUNVVEVCSVQpICYgU0VHTUFTSzsKKwkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0KKwkJCSAgICAoKG5vZGVfcHJvcHMtPnVsX2NvZGVfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgICAoRVhFQ1VURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8CisJCQkgICAgRVhFQ1VURUNPREVGTEFHQklUOworCQkJLyogRGVsZXRlIHBoYXNlICovCisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbREVMRVRFREFUQUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfZGF0YV9tZW1fc2VnX21hc2sgPj4gREVMRVRFQklUKSAmCisJCQkgICAgU0VHTUFTSzsKKwkJCW5sZHJfbm9kZV9vYmotPmNvZGVfZGF0YV9mbGFnX21hc2sgfD0KKwkJCSAgICAoKG5vZGVfcHJvcHMtPnVsX2RhdGFfbWVtX3NlZ19tYXNrID4+CisJCQkgICAgICAoREVMRVRFQklUICsgRkxBR0JJVCkpICYgMSkgPDwgREVMRVRFREFUQUZMQUdCSVQ7CisJCQlubGRyX25vZGVfb2JqLT5zZWdfaWRbREVMRVRFQ09ERUZMQUdCSVRdID0gKHUxNikKKwkJCSAgICAobm9kZV9wcm9wcy0+dWxfY29kZV9tZW1fc2VnX21hc2sgPj4KKwkJCSAgICAgREVMRVRFQklUKSAmIFNFR01BU0s7CisJCQlubGRyX25vZGVfb2JqLT5jb2RlX2RhdGFfZmxhZ19tYXNrIHw9CisJCQkgICAgKChub2RlX3Byb3BzLT51bF9jb2RlX21lbV9zZWdfbWFzayA+PgorCQkJICAgICAgKERFTEVURUJJVCArIEZMQUdCSVQpKSAmIDEpIDw8IERFTEVURUNPREVGTEFHQklUOworCQl9IGVsc2UgeworCQkJLyogTm9uLWR5bmFtaWNhbGx5IGxvYWRlZCBub2RlcyBhcmUgcGFydCBvZiB0aGUKKwkJCSAqIGJhc2UgaW1hZ2UgKi8KKwkJCW5sZHJfbm9kZV9vYmotPnJvb3QubGliID0gbmxkcl9vYmotPmJhc2VfbGliOworCQkJLyogQ2hlY2sgZm9yIG92ZXJsYXkgbm9kZSAqLworCQkJaWYgKG5vZGVfcHJvcHMtPnVzX2xvYWRfdHlwZSA9PSBOTERSX09WTFlMT0FEKQorCQkJCW5sZHJfbm9kZV9vYmotPm92ZXJsYXkgPSB0cnVlOworCisJCX0KKwkJKm5sZHJfbm9kZW9iaiA9IChzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICopbmxkcl9ub2RlX29iajsKKwl9CisJLyogQ2xlYW51cCBvbiBmYWlsdXJlICovCisJaWYgKHN0YXR1cyAmJiBubGRyX25vZGVfb2JqKQorCQlrZnJlZShubGRyX25vZGVfb2JqKTsKKworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKm5sZHJfbm9kZW9iaikKKwkJICAgfHwgKHN0YXR1cyAmJiAqbmxkcl9ub2Rlb2JqID09IE5VTEwpKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5sZHJfY3JlYXRlID09PT09PT09CisgKi8KK2ludCBubGRyX2NyZWF0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKipubGRyLAorCQkgICAgICAgc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5sZHJfYXR0cnMgKnBhdHRycykKK3sKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIENPRCBtYW5hZ2VyICovCisJY2hhciAqcHN6X2NvZmZfYnVmID0gTlVMTDsKKwljaGFyIHN6X3psX2ZpbGVbQ09EX01BWFBBVEhMRU5HVEhdOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBOVUxMOworCXN0cnVjdCBkYmxsX2F0dHJzIHNhdmVfYXR0cnM7CisJc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0dHJzOworCWRibGxfZmxhZ3MgZmxhZ3M7CisJdTMyIHVsX2VudHJ5OworCXUxNiBkbG9hZF9zZWdzID0gMDsKKwlzdHJ1Y3QgbWVtX3NlZ19pbmZvICptZW1faW5mb19vYmo7CisJdTMyIHVsX2xlbiA9IDA7CisJdTMyIHVsX2FkZHI7CisJc3RydWN0IHJtbV9zZWdtZW50ICpybW1fc2VncyA9IE5VTEw7CisJdTE2IGk7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5sZHIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoaGRldl9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocGF0dHJzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBhdHRycy0+cGZuX292bHkgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocGF0dHJzLT5wZm5fd3JpdGUgIT0gTlVMTCk7CisKKwkvKiBBbGxvY2F0ZSBkeW5hbWljIGxvYWRlciBvYmplY3QgKi8KKwlubGRyX29iaiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBubGRyX29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChubGRyX29iaikgeworCQlubGRyX29iai0+aGRldl9vYmogPSBoZGV2X29iajsKKwkJLyogd2FybmluZywgbGF6eSBzdGF0dXMgY2hlY2tpbmcgYWxlcnQhICovCisJCWRldl9nZXRfY29kX21ncihoZGV2X29iaiwgJmNvZF9tZ3IpOworCQlpZiAoY29kX21ncikgeworCQkJc3RhdHVzID0gY29kX2dldF9sb2FkZXIoY29kX21nciwgJm5sZHJfb2JqLT5kYmxsKTsKKwkJCURCQ19BU1NFUlQoIXN0YXR1cyk7CisJCQlzdGF0dXMgPSBjb2RfZ2V0X2Jhc2VfbGliKGNvZF9tZ3IsICZubGRyX29iai0+YmFzZV9saWIpOworCQkJREJDX0FTU0VSVCghc3RhdHVzKTsKKwkJCXN0YXR1cyA9CisJCQkgICAgY29kX2dldF9iYXNlX25hbWUoY29kX21nciwgc3pfemxfZmlsZSwKKwkJCQkJCQlDT0RfTUFYUEFUSExFTkdUSCk7CisJCQlEQkNfQVNTRVJUKCFzdGF0dXMpOworCQl9CisJCXN0YXR1cyA9IDA7CisJCS8qIGVuZCBsYXp5IHN0YXR1cyBjaGVja2luZyAqLworCQlubGRyX29iai0+dXNfZHNwX21hdV9zaXplID0gcGF0dHJzLT51c19kc3BfbWF1X3NpemU7CisJCW5sZHJfb2JqLT51c19kc3Bfd29yZF9zaXplID0gcGF0dHJzLT51c19kc3Bfd29yZF9zaXplOworCQlubGRyX29iai0+bGRyX2Z4bnMgPSBsZHJfZnhuczsKKwkJaWYgKCEobmxkcl9vYmotPmxkcl9meG5zLmluaXRfZnhuKCkpKQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIENyZWF0ZSB0aGUgRENEIE1hbmFnZXIgKi8KKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGNkX2NyZWF0ZV9tYW5hZ2VyKE5VTEwsICZubGRyX29iai0+aGRjZF9tZ3IpOworCisJLyogR2V0IGR5bmFtaWMgbG9hZGluZyBtZW1vcnkgc2VjdGlvbnMgZnJvbSBiYXNlIGxpYiAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X3NlY3RfZnhuKG5sZHJfb2JqLT5iYXNlX2xpYiwKKwkJCQkJCSAgICBEWU5NRU1TRUNULCAmdWxfYWRkciwKKwkJCQkJCSAgICAmdWxfbGVuKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXBzel9jb2ZmX2J1ZiA9CisJCQkJa3phbGxvYyh1bF9sZW4gKiBubGRyX29iai0+dXNfZHNwX21hdV9zaXplLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICghcHN6X2NvZmZfYnVmKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBPayB0byBub3QgaGF2ZSBkeW5hbWljIGxvYWRpbmcgbWVtb3J5ICovCisJCQlzdGF0dXMgPSAwOworCQkJdWxfbGVuID0gMDsKKwkJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZCAtIG5vIGR5bmFtaWMgbG9hZGluZyBtZW0gIgorCQkJCSJzZWdtZW50czogMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgdWxfbGVuID4gMCkgeworCQkvKiBSZWFkIHNlY3Rpb24gY29udGFpbmluZyBkeW5hbWljIGxvYWQgbWVtIHNlZ21lbnRzICovCisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMucmVhZF9zZWN0X2Z4bihubGRyX29iai0+YmFzZV9saWIsCisJCQkJCQkgICAgIERZTk1FTVNFQ1QsIHBzel9jb2ZmX2J1ZiwKKwkJCQkJCSAgICAgdWxfbGVuKTsKKwl9CisJaWYgKCFzdGF0dXMgJiYgdWxfbGVuID4gMCkgeworCQkvKiBQYXJzZSBtZW1vcnkgc2VnbWVudCBkYXRhICovCisJCWRsb2FkX3NlZ3MgPSAodTE2KSAoKigodTMyICopIHBzel9jb2ZmX2J1ZikpOworCQlpZiAoZGxvYWRfc2VncyA+IE1BWE1FTVNFR1MpCisJCQlzdGF0dXMgPSAtRUJBREY7CisJfQorCS8qIFBhcnNlIGR5bmFtaWMgbG9hZCBtZW1vcnkgc2VnbWVudHMgKi8KKwlpZiAoIXN0YXR1cyAmJiBkbG9hZF9zZWdzID4gMCkgeworCQlybW1fc2VncyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1fc2VnbWVudCkgKiBkbG9hZF9zZWdzLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJbmxkcl9vYmotPnNlZ190YWJsZSA9CisJCQkJa3phbGxvYyhzaXplb2YodTMyKSAqIGRsb2FkX3NlZ3MsIEdGUF9LRVJORUwpOworCQlpZiAocm1tX3NlZ3MgPT0gTlVMTCB8fCBubGRyX29iai0+c2VnX3RhYmxlID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlubGRyX29iai0+ZGxvYWRfc2VncyA9IGRsb2FkX3NlZ3M7CisJCQltZW1faW5mb19vYmogPSAoc3RydWN0IG1lbV9zZWdfaW5mbyAqKShwc3pfY29mZl9idWYgKworCQkJCQkJCSAgICAgICBzaXplb2YodTMyKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGxvYWRfc2VnczsgaSsrKSB7CisJCQkJcm1tX3NlZ3NbaV0uYmFzZSA9IChtZW1faW5mb19vYmogKyBpKS0+YmFzZTsKKwkJCQlybW1fc2Vnc1tpXS5sZW5ndGggPSAobWVtX2luZm9fb2JqICsgaSktPmxlbjsKKwkJCQlybW1fc2Vnc1tpXS5zcGFjZSA9IDA7CisJCQkJbmxkcl9vYmotPnNlZ190YWJsZVtpXSA9CisJCQkJICAgIChtZW1faW5mb19vYmogKyBpKS0+dHlwZTsKKwkJCQlkZXZfZGJnKGJyaWRnZSwKKwkJCQkJIihwcm9jKSBETEwgTUVNU0VHTUVOVDogJWQsICIKKwkJCQkJIkJhc2U6IDB4JXgsIExlbmd0aDogMHgleFxuIiwgaSwKKwkJCQkJcm1tX3NlZ3NbaV0uYmFzZSwgcm1tX3NlZ3NbaV0ubGVuZ3RoKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBDcmVhdGUgUmVtb3RlIG1lbW9yeSBtYW5hZ2VyICovCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHJtbV9jcmVhdGUoJm5sZHJfb2JqLT5ybW0sIHJtbV9zZWdzLCBkbG9hZF9zZWdzKTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIHNldCB0aGUgYWxsb2MsIGZyZWUsIHdyaXRlIGZ1bmN0aW9ucyBmb3IgbG9hZGVyICovCisJCW5sZHJfb2JqLT5sZHJfZnhucy5nZXRfYXR0cnNfZnhuKG5sZHJfb2JqLT5kYmxsLCAmc2F2ZV9hdHRycyk7CisJCW5ld19hdHRycyA9IHNhdmVfYXR0cnM7CisJCW5ld19hdHRycy5hbGxvYyA9IChkYmxsX2FsbG9jX2Z4bikgcmVtb3RlX2FsbG9jOworCQluZXdfYXR0cnMuZnJlZSA9IChkYmxsX2ZyZWVfZnhuKSByZW1vdGVfZnJlZTsKKwkJbmV3X2F0dHJzLnN5bV9sb29rdXAgPSAoZGJsbF9zeW1fbG9va3VwKSBnZXRfc3ltYm9sX3ZhbHVlOworCQluZXdfYXR0cnMuc3ltX2hhbmRsZSA9IG5sZHJfb2JqOworCQluZXdfYXR0cnMud3JpdGUgPSAoZGJsbF93cml0ZV9meG4pIHBhdHRycy0+cGZuX3dyaXRlOworCQlubGRyX29iai0+b3ZseV9meG4gPSBwYXR0cnMtPnBmbl9vdmx5OworCQlubGRyX29iai0+d3JpdGVfZnhuID0gcGF0dHJzLT5wZm5fd3JpdGU7CisJCW5sZHJfb2JqLT5sZHJfYXR0cnMgPSBuZXdfYXR0cnM7CisJfQorCWtmcmVlKHJtbV9zZWdzKTsKKworCWtmcmVlKHBzel9jb2ZmX2J1Zik7CisKKwkvKiBHZXQgb3ZlcmxheSBub2RlcyAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBjb2RfZ2V0X2Jhc2VfbmFtZShjb2RfbWdyLCBzel96bF9maWxlLCBDT0RfTUFYUEFUSExFTkdUSCk7CisJCS8qIGxhenkgY2hlY2sgKi8KKwkJREJDX0FTU0VSVCghc3RhdHVzKTsKKwkJLyogRmlyc3QgY291bnQgbnVtYmVyIG9mIG92ZXJsYXkgbm9kZXMgKi8KKwkJc3RhdHVzID0KKwkJICAgIGRjZF9nZXRfb2JqZWN0cyhubGRyX29iai0+aGRjZF9tZ3IsIHN6X3psX2ZpbGUsCisJCQkJICAgIGFkZF9vdmx5X25vZGUsICh2b2lkICopbmxkcl9vYmopOworCQkvKiBOb3cgYnVpbGQgdGFibGUgb2Ygb3ZlcmxheSBub2RlcyAqLworCQlpZiAoIXN0YXR1cyAmJiBubGRyX29iai0+b3ZseV9ub2RlcyA+IDApIHsKKwkJCS8qIEFsbG9jYXRlIHRhYmxlIGZvciBvdmVybGF5IG5vZGVzICovCisJCQlubGRyX29iai0+b3ZseV90YWJsZSA9CisJCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdmx5X25vZGUpICoKKwkJCQkJbmxkcl9vYmotPm92bHlfbm9kZXMsIEdGUF9LRVJORUwpOworCQkJLyogUHV0IG92ZXJsYXkgbm9kZXMgaW4gdGhlIHRhYmxlICovCisJCQlubGRyX29iai0+b3ZseV9uaWQgPSAwOworCQkJc3RhdHVzID0gZGNkX2dldF9vYmplY3RzKG5sZHJfb2JqLT5oZGNkX21nciwgc3pfemxfZmlsZSwKKwkJCQkJCSBhZGRfb3ZseV9ub2RlLAorCQkJCQkJICh2b2lkICopbmxkcl9vYmopOworCQl9CisJfQorCS8qIERvIGEgZmFrZSByZWxvYWQgb2YgdGhlIGJhc2UgaW1hZ2UgdG8gZ2V0IG92ZXJsYXkgc2VjdGlvbiBpbmZvICovCisJaWYgKCFzdGF0dXMgJiYgbmxkcl9vYmotPm92bHlfbm9kZXMgPiAwKSB7CisJCXNhdmVfYXR0cnMud3JpdGUgPSBmYWtlX292bHlfd3JpdGU7CisJCXNhdmVfYXR0cnMubG9nX3dyaXRlID0gYWRkX292bHlfaW5mbzsKKwkJc2F2ZV9hdHRycy5sb2dfd3JpdGVfaGFuZGxlID0gbmxkcl9vYmo7CisJCWZsYWdzID0gREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9TWU1COworCQlzdGF0dXMgPSBubGRyX29iai0+bGRyX2Z4bnMubG9hZF9meG4obmxkcl9vYmotPmJhc2VfbGliLCBmbGFncywKKwkJCQkJCSAgICAgJnNhdmVfYXR0cnMsICZ1bF9lbnRyeSk7CisJfQorCWlmICghc3RhdHVzKSB7CisJCSpubGRyID0gKHN0cnVjdCBubGRyX29iamVjdCAqKW5sZHJfb2JqOworCX0gZWxzZSB7CisJCWlmIChubGRyX29iaikKKwkJCW5sZHJfZGVsZXRlKChzdHJ1Y3Qgbmxkcl9vYmplY3QgKilubGRyX29iaik7CisKKwkJKm5sZHIgPSBOVUxMOworCX0KKwkvKiBGSVhNRTpUZW1wLiBGaXguIE11c3QgYmUgcmVtb3ZlZCAqLworCURCQ19FTlNVUkUoKCFzdGF0dXMgJiYgKm5sZHIpIHx8IChzdGF0dXMgJiYgKm5sZHIgPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9kZWxldGUgPT09PT09PT0KKyAqLwordm9pZCBubGRyX2RlbGV0ZShzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqKQoreworCXN0cnVjdCBvdmx5X3NlY3QgKm92bHlfc2VjdGlvbjsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpuZXh0OworCXUxNiBpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShubGRyX29iaik7CisKKwlubGRyX29iai0+bGRyX2Z4bnMuZXhpdF9meG4oKTsKKwlpZiAobmxkcl9vYmotPnJtbSkKKwkJcm1tX2RlbGV0ZShubGRyX29iai0+cm1tKTsKKworCWtmcmVlKG5sZHJfb2JqLT5zZWdfdGFibGUpOworCisJaWYgKG5sZHJfb2JqLT5oZGNkX21ncikKKwkJZGNkX2Rlc3Ryb3lfbWFuYWdlcihubGRyX29iai0+aGRjZF9tZ3IpOworCisJLyogRnJlZSBvdmVybGF5IG5vZGUgaW5mb3JtYXRpb24gKi8KKwlpZiAobmxkcl9vYmotPm92bHlfdGFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uY3JlYXRlX3NlY3RzX2xpc3Q7CisJCQl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCQkJbmV4dCA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJCWtmcmVlKG92bHlfc2VjdGlvbik7CisJCQkJb3ZseV9zZWN0aW9uID0gbmV4dDsKKwkJCX0KKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZGVsZXRlX3NlY3RzX2xpc3Q7CisJCQl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCQkJbmV4dCA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJCWtmcmVlKG92bHlfc2VjdGlvbik7CisJCQkJb3ZseV9zZWN0aW9uID0gbmV4dDsKKwkJCX0KKwkJCW92bHlfc2VjdGlvbiA9CisJCQkgICAgbmxkcl9vYmotPm92bHlfdGFibGVbaV0uZXhlY3V0ZV9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJCQlrZnJlZShvdmx5X3NlY3Rpb24pOworCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7CisJCQl9CisJCQlvdmx5X3NlY3Rpb24gPSBubGRyX29iai0+b3ZseV90YWJsZVtpXS5vdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCW5leHQgPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJCQlrZnJlZShvdmx5X3NlY3Rpb24pOworCQkJCW92bHlfc2VjdGlvbiA9IG5leHQ7CisJCQl9CisJCX0KKwkJa2ZyZWUobmxkcl9vYmotPm92bHlfdGFibGUpOworCX0KKwlrZnJlZShubGRyX29iaik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbmxkcl9leGl0ID09PT09PT09CisgKiAgRGlzY29udGludWUgdXNhZ2Ugb2YgTkxEUiBtb2R1bGUuCisgKi8KK3ZvaWQgbmxkcl9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJaWYgKHJlZnMgPT0gMCkKKwkJcm1tX2V4aXQoKTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9meG5fYWRkciA9PT09PT09PQorICovCitpbnQgbmxkcl9nZXRfZnhuX2FkZHIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgICAgY2hhciAqc3RyX2Z4biwgdTMyICogYWRkcikKK3sKKwlzdHJ1Y3QgZGJsbF9zeW1fdmFsICpkYmxsX3N5bTsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOworCWludCBzdGF0dXMgPSAwOworCWJvb2wgc3RhdHVzMSA9IGZhbHNlOworCXMzMiBpID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgcm9vdCA9IHsgTlVMTCwgMCwgTlVMTCB9OworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShubGRyX25vZGVfb2JqKTsKKwlEQkNfUkVRVUlSRShhZGRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN0cl9meG4gIT0gTlVMTCk7CisKKwlubGRyX29iaiA9IG5sZHJfbm9kZV9vYmotPm5sZHJfb2JqOworCS8qIENhbGxlZCBmcm9tIG5vZGVfY3JlYXRlKCksIG5vZGVfZGVsZXRlKCksIG9yIG5vZGVfcnVuKCkuICovCisJaWYgKG5sZHJfbm9kZV9vYmotPmR5bmFtaWMgJiYgKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSB7CisJCXN3aXRjaCAobmxkcl9ub2RlX29iai0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCXJvb3QgPSBubGRyX25vZGVfb2JqLT5jcmVhdGVfbGliOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJcm9vdCA9IG5sZHJfbm9kZV9vYmotPmV4ZWN1dGVfbGliOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9ERUxFVEU6CisJCQlyb290ID0gbmxkcl9ub2RlX29iai0+ZGVsZXRlX2xpYjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGZvciBPdmVybGF5IG5vZGVzIG9yIG5vbi1zcGxpdCBEeW5hbWljIG5vZGVzICovCisJCXJvb3QgPSBubGRyX25vZGVfb2JqLT5yb290OworCX0KKwlzdGF0dXMxID0KKwkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9jX2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhuLCAmZGJsbF9zeW0pOworCWlmICghc3RhdHVzMSkKKwkJc3RhdHVzMSA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2FkZHJfZnhuKHJvb3QubGliLCBzdHJfZnhuLAorCQkJCQkJICAgICZkYmxsX3N5bSk7CisKKwkvKiBJZiBzeW1ib2wgbm90IGZvdW5kLCBjaGVjayBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJaWYgKCFzdGF0dXMxKSB7CisJCWZvciAoaSA9IDA7IGkgPCByb290LmRlcF9saWJzOyBpKyspIHsKKwkJCXN0YXR1czEgPQorCQkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5nZXRfYWRkcl9meG4ocm9vdC5kZXBfbGlic190cmVlCisJCQkJCQkJICAgIFtpXS5saWIsIHN0cl9meG4sCisJCQkJCQkJICAgICZkYmxsX3N5bSk7CisJCQlpZiAoIXN0YXR1czEpIHsKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihyb290LmRlcF9saWJzX3RyZWVbaV0ubGliLAorCQkJCQkJICAgc3RyX2Z4biwgJmRibGxfc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMxKSB7CisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyogQ2hlY2sgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwlpZiAoIXN0YXR1czEpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGliczsgaSsrKSB7CisJCQlzdGF0dXMxID0KKwkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuCisJCQkgICAgZ2V0X2FkZHJfZnhuKG5sZHJfbm9kZV9vYmotPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwKKwkJCQkJIHN0cl9meG4sICZkYmxsX3N5bSk7CisJCQlpZiAoIXN0YXR1czEpIHsKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZQorCQkJCQkJICAgW2ldLmxpYiwgc3RyX2Z4biwgJmRibGxfc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMxKSB7CisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc3RhdHVzMSkKKwkJKmFkZHIgPSBkYmxsX3N5bS0+dmFsdWU7CisJZWxzZQorCQlzdGF0dXMgPSAtRVNQSVBFOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2dldF9ybW1fbWFuYWdlciA9PT09PT09PQorICogIEdpdmVuIGEgTkxEUiBvYmplY3QsIHJldHJpZXZlIFJNTSBNYW5hZ2VyIEhhbmRsZQorICovCitpbnQgbmxkcl9nZXRfcm1tX21hbmFnZXIoc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyLAorCQkJCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqKnJtbV9tZ3IpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iaiA9IG5sZHI7CisJREJDX1JFUVVJUkUocm1tX21nciAhPSBOVUxMKTsKKworCWlmIChubGRyKSB7CisJCSpybW1fbWdyID0gbmxkcl9vYmotPnJtbTsKKwl9IGVsc2UgeworCQkqcm1tX21nciA9IE5VTEw7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IChybW1fbWdyICE9IE5VTEwgJiYgKnJtbV9tZ3IgPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX2luaXQgPT09PT09PT0KKyAqICBJbml0aWFsaXplIHRoZSBOTERSIG1vZHVsZS4KKyAqLworYm9vbCBubGRyX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJlZnMgPT0gMCkKKwkJcm1tX2luaXQoKTsKKworCXJlZnMrKzsKKworCURCQ19FTlNVUkUocmVmcyA+IDApOworCXJldHVybiB0cnVlOworfQorCisvKgorICogID09PT09PT09IG5sZHJfbG9hZCA9PT09PT09PQorICovCitpbnQgbmxkcl9sb2FkKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCSAgICAgZW51bSBubGRyX3BoYXNlIHBoYXNlKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmo7CisJc3RydWN0IGRzcF91dWlkIGxpYl91dWlkOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5sZHJfbm9kZV9vYmopOworCisJbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKworCWlmIChubGRyX25vZGVfb2JqLT5keW5hbWljKSB7CisJCW5sZHJfbm9kZV9vYmotPnBoYXNlID0gcGhhc2U7CisKKwkJbGliX3V1aWQgPSBubGRyX25vZGVfb2JqLT51dWlkOworCisJCS8qIEF0IHRoaXMgcG9pbnQsIHdlIG1heSBub3Qga25vdyBpZiBub2RlIGlzIHNwbGl0IGludG8KKwkJICogZGlmZmVyZW50IGxpYnJhcmllcy4gU28gd2UnbGwgZ28gYWhlYWQgYW5kIGxvYWQgdGhlCisJCSAqIGxpYnJhcnksIGFuZCB0aGVuIHNhdmUgdGhlIHBvaW50ZXIgdG8gdGhlIGFwcHJvcHJpYXRlCisJCSAqIGxvY2F0aW9uIGFmdGVyIHdlIGtub3cuICovCisKKwkJc3RhdHVzID0KKwkJICAgIGxvYWRfbGliKG5sZHJfbm9kZV9vYmosICZubGRyX25vZGVfb2JqLT5yb290LCBsaWJfdXVpZCwKKwkJCSAgICAgZmFsc2UsIG5sZHJfbm9kZV9vYmotPmxpYl9wYXRoLCBwaGFzZSwgMCk7CisKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICgqbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpIHsKKwkJCQlzd2l0Y2ggKHBoYXNlKSB7CisJCQkJY2FzZSBOTERSX0NSRUFURToKKwkJCQkJbmxkcl9ub2RlX29iai0+Y3JlYXRlX2xpYiA9CisJCQkJCSAgICBubGRyX25vZGVfb2JqLT5yb290OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJCQlubGRyX25vZGVfb2JqLT5leGVjdXRlX2xpYiA9CisJCQkJCSAgICBubGRyX25vZGVfb2JqLT5yb290OworCQkJCQlicmVhazsKKworCQkJCWNhc2UgTkxEUl9ERUxFVEU6CisJCQkJCW5sZHJfbm9kZV9vYmotPmRlbGV0ZV9saWIgPQorCQkJCQkgICAgbmxkcl9ub2RlX29iai0+cm9vdDsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKG5sZHJfbm9kZV9vYmotPm92ZXJsYXkpCisJCQlzdGF0dXMgPSBsb2FkX292bHkobmxkcl9ub2RlX29iaiwgcGhhc2UpOworCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBubGRyX3VubG9hZCA9PT09PT09PQorICovCitpbnQgbmxkcl91bmxvYWQoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJICAgICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgKnJvb3RfbGliID0gTlVMTDsKKwlzMzIgaSA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobmxkcl9ub2RlX29iaik7CisKKwlpZiAobmxkcl9ub2RlX29iaiAhPSBOVUxMKSB7CisJCWlmIChubGRyX25vZGVfb2JqLT5keW5hbWljKSB7CisJCQlpZiAoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSB7CisJCQkJc3dpdGNoIChwaGFzZSkgeworCQkJCWNhc2UgTkxEUl9DUkVBVEU6CisJCQkJCXJvb3RfbGliID0gJm5sZHJfbm9kZV9vYmotPmNyZWF0ZV9saWI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJCQlyb290X2xpYiA9ICZubGRyX25vZGVfb2JqLT5leGVjdXRlX2xpYjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBOTERSX0RFTEVURToKKwkJCQkJcm9vdF9saWIgPSAmbmxkcl9ub2RlX29iai0+ZGVsZXRlX2xpYjsKKwkJCQkJLyogVW5sb2FkIHBlcnNpc3RlbnQgbGlicmFyaWVzICovCisJCQkJCWZvciAoaSA9IDA7CisJCQkJCSAgICAgaSA8IG5sZHJfbm9kZV9vYmotPnBlcnNfbGliczsKKwkJCQkJICAgICBpKyspIHsKKwkJCQkJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgICAmbmxkcl9ub2RlX29iai0+CisJCQkJCQkJICAgcGVyc19saWJfdGFibGVbaV0pOworCQkJCQl9CisJCQkJCW5sZHJfbm9kZV9vYmotPnBlcnNfbGlicyA9IDA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCURCQ19BU1NFUlQoZmFsc2UpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFVubG9hZCBtYWluIGxpYnJhcnkgKi8KKwkJCQlyb290X2xpYiA9ICZubGRyX25vZGVfb2JqLT5yb290OworCQkJfQorCQkJaWYgKHJvb3RfbGliKQorCQkJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwgcm9vdF9saWIpOworCQl9IGVsc2UgeworCQkJaWYgKG5sZHJfbm9kZV9vYmotPm92ZXJsYXkpCisJCQkJdW5sb2FkX292bHkobmxkcl9ub2RlX29iaiwgcGhhc2UpOworCisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9pbmZvID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfaW5mbyh2b2lkICpoYW5kbGUsIHN0cnVjdCBkYmxsX3NlY3RfaW5mbyAqc2VjdF9pbmZvLAorCQkJCXUzMiBhZGRyLCB1MzIgYnl0ZXMpCit7CisJY2hhciAqbm9kZV9uYW1lOworCWNoYXIgKnNlY3RfbmFtZSA9IChjaGFyICopc2VjdF9pbmZvLT5uYW1lOworCWJvb2wgc2VjdF9leGlzdHMgPSBmYWxzZTsKKwljaGFyIHNlcHMgPSAnOic7CisJY2hhciAqcGNoOworCXUxNiBpOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopaGFuZGxlOworCWludCBzdGF0dXMgPSAwOworCisJLyogSXMgdGhpcyBhbiBvdmVybGF5IHNlY3Rpb24gKGxvYWQgYWRkcmVzcyAhPSBydW4gYWRkcmVzcyk/ICovCisJaWYgKHNlY3RfaW5mby0+c2VjdF9sb2FkX2FkZHIgPT0gc2VjdF9pbmZvLT5zZWN0X3J1bl9hZGRyKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogRmluZCB0aGUgbm9kZSBpdCBiZWxvbmdzIHRvICovCisJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJbm9kZV9uYW1lID0gbmxkcl9vYmotPm92bHlfdGFibGVbaV0ubm9kZV9uYW1lOworCQlEQkNfUkVRVUlSRShub2RlX25hbWUpOworCQlpZiAoc3RybmNtcChub2RlX25hbWUsIHNlY3RfbmFtZSArIDEsIHN0cmxlbihub2RlX25hbWUpKSA9PSAwKSB7CisJCQkvKiBGb3VuZCB0aGUgbm9kZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCEoaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzKSkKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIERldGVybWluZSB3aGljaCBwaGFzZSB0aGlzIHNlY3Rpb24gYmVsb25ncyB0byAqLworCWZvciAocGNoID0gc2VjdF9uYW1lICsgMTsgKnBjaCAmJiAqcGNoICE9IHNlcHM7IHBjaCsrKQorCQk7OworCisJaWYgKCpwY2gpIHsKKwkJcGNoKys7CQkvKiBTa2lwIG92ZXIgdGhlICc6JyAqLworCQlpZiAoc3RybmNtcChwY2gsIFBDUkVBVEUsIHN0cmxlbihQQ1JFQVRFKSkgPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5jcmVhdGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmNyZWF0ZV9zZWN0cysrOworCisJCX0gZWxzZSBpZiAoc3RybmNtcChwY2gsIFBERUxFVEUsIHN0cmxlbihQREVMRVRFKSkgPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5kZWxldGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmRlbGV0ZV9zZWN0cysrOworCisJCX0gZWxzZSBpZiAoc3RybmNtcChwY2gsIFBFWEVDVVRFLCBzdHJsZW4oUEVYRUNVVEUpKSA9PSAwKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGFkZF9vdmx5X3NlY3Qobmxkcl9vYmosCisJCQkJCSAgJm5sZHJfb2JqLT4KKwkJCQkJICBvdmx5X3RhYmxlW2ldLmV4ZWN1dGVfc2VjdHNfbGlzdCwKKwkJCQkJICBzZWN0X2luZm8sICZzZWN0X2V4aXN0cywgYWRkciwgYnl0ZXMpOworCQkJaWYgKCFzdGF0dXMgJiYgIXNlY3RfZXhpc3RzKQorCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLmV4ZWN1dGVfc2VjdHMrKzsKKworCQl9IGVsc2UgeworCQkJLyogUHV0IGluICJvdGhlciIgc2VjdGlucyAqLworCQkJc3RhdHVzID0KKwkJCSAgICBhZGRfb3ZseV9zZWN0KG5sZHJfb2JqLAorCQkJCQkgICZubGRyX29iai0+CisJCQkJCSAgb3ZseV90YWJsZVtpXS5vdGhlcl9zZWN0c19saXN0LAorCQkJCQkgIHNlY3RfaW5mbywgJnNlY3RfZXhpc3RzLCBhZGRyLCBieXRlcyk7CisJCQlpZiAoIXN0YXR1cyAmJiAhc2VjdF9leGlzdHMpCisJCQkJbmxkcl9vYmotPm92bHlfdGFibGVbaV0ub3RoZXJfc2VjdHMrKzsKKworCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9ub2RlID09PT09PT09PQorICogIENhbGxiYWNrIGZ1bmN0aW9uIHBhc3NlZCB0byBkY2RfZ2V0X29iamVjdHMuCisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfbm9kZShzdHJ1Y3QgZHNwX3V1aWQgKnV1aWRfb2JqLAorCQkJCWVudW0gZHNwX2RjZG9ianR5cGUgb2JqX3R5cGUsIHZvaWQgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gKHN0cnVjdCBubGRyX29iamVjdCAqKWhhbmRsZTsKKwljaGFyICpub2RlX25hbWUgPSBOVUxMOworCWNoYXIgKnBidWYgPSBOVUxMOworCXUzMiBsZW47CisJc3RydWN0IGRjZF9nZW5lcmljb2JqIG9ial9kZWY7CisJaW50IHN0YXR1cyA9IDA7CisKKwlpZiAob2JqX3R5cGUgIT0gRFNQX0RDRE5PREVUWVBFKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0KKwkgICAgZGNkX2dldF9vYmplY3RfZGVmKG5sZHJfb2JqLT5oZGNkX21nciwgdXVpZF9vYmosIG9ial90eXBlLAorCQkJICAgICAgICZvYmpfZGVmKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgb3ZlcmxheSBub2RlLCBhZGQgdG8gdGhlIGxpc3QgKi8KKwlpZiAob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai51c19sb2FkX3R5cGUgPT0gTkxEUl9PVkxZTE9BRCkgeworCQlpZiAobmxkcl9vYmotPm92bHlfdGFibGUgPT0gTlVMTCkgeworCQkJbmxkcl9vYmotPm92bHlfbm9kZXMrKzsKKwkJfSBlbHNlIHsKKwkJCS8qIEFkZCBub2RlIHRvIHRhYmxlICovCisJCQlubGRyX29iai0+b3ZseV90YWJsZVtubGRyX29iai0+b3ZseV9uaWRdLnV1aWQgPQorCQkJICAgICp1dWlkX29iajsKKwkJCURCQ19SRVFVSVJFKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLgorCQkJCSAgICBhY19uYW1lKTsKKwkJCWxlbiA9CisJCQkgICAgc3RybGVuKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzLmFjX25hbWUpOworCQkJbm9kZV9uYW1lID0gb2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMuYWNfbmFtZTsKKwkJCXBidWYgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCQkJaWYgKHBidWYgPT0gTlVMTCkgeworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCXN0cm5jcHkocGJ1Ziwgbm9kZV9uYW1lLCBsZW4pOworCQkJCW5sZHJfb2JqLT5vdmx5X3RhYmxlW25sZHJfb2JqLT5vdmx5X25pZF0uCisJCQkJICAgIG5vZGVfbmFtZSA9IHBidWY7CisJCQkJbmxkcl9vYmotPm92bHlfbmlkKys7CisJCQl9CisJCX0KKwl9CisJLyogVGhlc2Ugd2VyZSBhbGxvY2F0ZWQgaW4gZGNkX2dldF9vYmplY3RfZGVmICovCisJa2ZyZWUob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2NyZWF0ZV9waGFzZV9meG4pOworCisJa2ZyZWUob2JqX2RlZi5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuKTsKKworCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuKTsKKworCWtmcmVlKG9ial9kZWYub2JqX2RhdGEubm9kZV9vYmoucHN0cl9pX2FsZ19uYW1lKTsKKworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBhZGRfb3ZseV9zZWN0ID09PT09PT09CisgKi8KK3N0YXRpYyBpbnQgYWRkX292bHlfc2VjdChzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqLAorCQkJCXN0cnVjdCBvdmx5X3NlY3QgKipsc3QsCisJCQkJc3RydWN0IGRibGxfc2VjdF9pbmZvICpzZWN0X2luZiwKKwkJCQlib29sICpleGlzdHMsIHUzMiBhZGRyLCB1MzIgYnl0ZXMpCit7CisJc3RydWN0IG92bHlfc2VjdCAqbmV3X3NlY3QgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKmxhc3Rfc2VjdDsKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdmx5X3NlY3Rpb247CisJaW50IHN0YXR1cyA9IDA7CisKKwlvdmx5X3NlY3Rpb24gPSBsYXN0X3NlY3QgPSAqbHN0OworCSpleGlzdHMgPSBmYWxzZTsKKwl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCS8qCisJCSAqICBNYWtlIHN1cmUgc2VjdGlvbiBoYXMgbm90IGFscmVhZHkgYmVlbiBhZGRlZC4gTXVsdGlwbGUKKwkJICogICd3cml0ZScgY2FsbHMgbWF5IGJlIG1hZGUgdG8gbG9hZCB0aGUgc2VjdGlvbi4KKwkJICovCisJCWlmIChvdmx5X3NlY3Rpb24tPnNlY3RfbG9hZF9hZGRyID09IGFkZHIpIHsKKwkJCS8qIEFscmVhZHkgYWRkZWQgKi8KKwkJCSpleGlzdHMgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdF9zZWN0ID0gb3ZseV9zZWN0aW9uOworCQlvdmx5X3NlY3Rpb24gPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwl9CisKKwlpZiAoIW92bHlfc2VjdGlvbikgeworCQkvKiBOZXcgc2VjdGlvbiAqLworCQluZXdfc2VjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdmx5X3NlY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld19zZWN0ID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQluZXdfc2VjdC0+c2VjdF9sb2FkX2FkZHIgPSBhZGRyOworCQkJbmV3X3NlY3QtPnNlY3RfcnVuX2FkZHIgPSBzZWN0X2luZi0+c2VjdF9ydW5fYWRkciArCisJCQkgICAgKGFkZHIgLSBzZWN0X2luZi0+c2VjdF9sb2FkX2FkZHIpOworCQkJbmV3X3NlY3QtPnNpemUgPSBieXRlczsKKwkJCW5ld19zZWN0LT5wYWdlID0gc2VjdF9pbmYtPnR5cGU7CisJCX0KKworCQkvKiBBZGQgdG8gdGhlIGxpc3QgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmICgqbHN0ID09IE5VTEwpIHsKKwkJCQkvKiBGaXJzdCBpbiB0aGUgbGlzdCAqLworCQkJCSpsc3QgPSBuZXdfc2VjdDsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdF9zZWN0LT5uZXh0X3NlY3QgPSBuZXdfc2VjdDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZmFrZV9vdmx5X3dyaXRlID09PT09PT09CisgKi8KK3N0YXRpYyBzMzIgZmFrZV9vdmx5X3dyaXRlKHZvaWQgKmhhbmRsZSwgdTMyIGRzcF9hZGRyZXNzLCB2b2lkICpidWYsIHUzMiBieXRlcywKKwkJCSAgIHMzMiBtdHlwZSkKK3sKKwlyZXR1cm4gKHMzMikgYnl0ZXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9zZWN0cyA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCBmcmVlX3NlY3RzKHN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmosCisJCSAgICAgICBzdHJ1Y3Qgb3ZseV9zZWN0ICpwaGFzZV9zZWN0cywgdTE2IGFsbG9jX251bSkKK3sKKwlzdHJ1Y3Qgb3ZseV9zZWN0ICpvdmx5X3NlY3Rpb24gPSBwaGFzZV9zZWN0czsKKwl1MTYgaSA9IDA7CisJYm9vbCByZXQ7CisKKwl3aGlsZSAob3ZseV9zZWN0aW9uICYmIGkgPCBhbGxvY19udW0pIHsKKwkJLyogJ0RlYWxsb2NhdGUnICovCisJCS8qIHNlZ2lkIC0gcGFnZSBub3Qgc3VwcG9ydGVkIHlldCAqLworCQkvKiBSZXNlcnZlZCBtZW1vcnkgKi8KKwkJcmV0ID0KKwkJICAgIHJtbV9mcmVlKG5sZHJfb2JqLT5ybW0sIDAsIG92bHlfc2VjdGlvbi0+c2VjdF9ydW5fYWRkciwKKwkJCSAgICAgb3ZseV9zZWN0aW9uLT5zaXplLCB0cnVlKTsKKwkJREJDX0FTU0VSVChyZXQpOworCQlvdmx5X3NlY3Rpb24gPSBvdmx5X3NlY3Rpb24tPm5leHRfc2VjdDsKKwkJaSsrOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfc3ltYm9sX3ZhbHVlID09PT09PT09CisgKiAgRmluZCBzeW1ib2wgaW4gbGlicmFyeSdzIGJhc2UgaW1hZ2UuICBJZiBub3QgdGhlcmUsIGNoZWNrIGRlcGVuZGVudAorICogIGxpYnJhcmllcy4KKyAqLworc3RhdGljIGJvb2wgZ2V0X3N5bWJvbF92YWx1ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnBhcmcsIHZvaWQgKnJtbV9oYW5kbGUsCisJCQkgICAgIGNoYXIgKnN5bV9uYW1lLCBzdHJ1Y3QgZGJsbF9zeW1fdmFsICoqc3ltKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopaGFuZGxlOworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmogPQorCSAgICAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKXJtbV9oYW5kbGU7CisJc3RydWN0IGxpYl9ub2RlICpyb290ID0gKHN0cnVjdCBsaWJfbm9kZSAqKXBhcmc7CisJdTE2IGk7CisJYm9vbCBzdGF0dXMgPSBmYWxzZTsKKworCS8qIGNoZWNrIHRoZSBiYXNlIGltYWdlICovCisJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihubGRyX29iai0+YmFzZV9saWIsCisJCQkJCQkgc3ltX25hbWUsIHN5bSk7CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9CisJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2NfYWRkcl9meG4obmxkcl9vYmotPmJhc2VfbGliLAorCQkJCQkJCXN5bV9uYW1lLCBzeW0pOworCisJLyoKKwkgKiAgQ2hlY2sgaW4gcm9vdCBsaWIgaXRzZWxmLiBJZiB0aGUgbGlicmFyeSBjb25zaXN0cyBvZgorCSAqICBtdWx0aXBsZSBvYmplY3QgZmlsZXMgbGlua2VkIHRvZ2V0aGVyLCBzb21lIHN5bWJvbHMgaW4gdGhlCisJICogIGxpYnJhcnkgbWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQuCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihyb290LT5saWIsIHN5bV9uYW1lLAorCQkJCQkJCSBzeW0pOworCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0KKwkJCSAgICBubGRyX29iai0+bGRyX2Z4bnMuZ2V0X2NfYWRkcl9meG4ocm9vdC0+bGliLAorCQkJCQkJCSAgICAgIHN5bV9uYW1lLCBzeW0pOworCQl9CisJfQorCisJLyoKKwkgKiAgQ2hlY2sgaW4gcm9vdCBsaWIncyBkZXBlbmRlbnQgbGlicmFyaWVzLCBidXQgbm90IGRlcGVuZGVudAorCSAqICBsaWJyYXJpZXMnIGRlcGVuZGVudHMuCisJICovCisJaWYgKCFzdGF0dXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJvb3QtPmRlcF9saWJzOyBpKyspIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLmdldF9hZGRyX2Z4bihyb290LT4KKwkJCQkJCQkgICAgZGVwX2xpYnNfdHJlZQorCQkJCQkJCSAgICBbaV0ubGliLAorCQkJCQkJCSAgICBzeW1fbmFtZSwgc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJCSAgICBnZXRfY19hZGRyX2Z4bihyb290LT5kZXBfbGlic190cmVlW2ldLmxpYiwKKwkJCQkJCSAgIHN5bV9uYW1lLCBzeW0pOworCQkJfQorCQkJaWYgKHN0YXR1cykgeworCQkJCS8qIFN5bWJvbCBmb3VuZCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8qCisJICogQ2hlY2sgaW4gcGVyc2lzdGVudCBsaWJyYXJpZXMKKwkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlmb3IgKGkgPSAwOyBpIDwgbmxkcl9ub2RlX29iai0+cGVyc19saWJzOyBpKyspIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgbmxkcl9vYmotPmxkcl9meG5zLgorCQkJICAgIGdldF9hZGRyX2Z4bihubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIsCisJCQkJCSBzeW1fbmFtZSwgc3ltKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0gbmxkcl9vYmotPmxkcl9meG5zLmdldF9jX2FkZHJfZnhuCisJCQkJICAgIChubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIsCisJCQkJICAgICBzeW1fbmFtZSwgc3ltKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMpIHsKKwkJCQkvKiBTeW1ib2wgZm91bmQgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbG9hZF9saWIgPT09PT09PT0KKyAqICBSZWN1cnNpdmVseSBsb2FkIGxpYnJhcnkgYW5kIGFsbCBpdHMgZGVwZW5kZW50IGxpYnJhcmllcy4gVGhlIGxpYnJhcnkKKyAqICB3ZSdyZSBsb2FkaW5nIGlzIHNwZWNpZmllZCBieSBhIHV1aWQuCisgKi8KK3N0YXRpYyBpbnQgbG9hZF9saWIoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBsaWJfbm9kZSAqcm9vdCwgc3RydWN0IGRzcF91dWlkIHV1aWQsCisJCQkgICBib29sIHJvb3RfcHJzdG50LAorCQkJICAgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKipsaWJfcGF0aCwKKwkJCSAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSwgdTE2IGRlcHRoKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKwl1MTYgbmRfbGlicyA9IDA7CS8qIE51bWJlciBvZiBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJdTE2IG5wX2xpYnMgPSAwOwkvKiBOdW1iZXIgb2YgcGVyc2lzdGVudCBsaWJyYXJpZXMgKi8KKwl1MTYgbmRfbGlic19sb2FkZWQgPSAwOwkvKiBOdW1iZXIgb2YgZGVwLiBsaWJyYXJpZXMgbG9hZGVkICovCisJdTE2IGk7CisJdTMyIGVudHJ5OworCXUzMiBkd19idWZfc2l6ZSA9IE5MRFJfTUFYUEFUSExFTkdUSDsKKwlkYmxsX2ZsYWdzIGZsYWdzID0gREJMTF9TWU1CIHwgREJMTF9DT0RFIHwgREJMTF9EQVRBIHwgREJMTF9EWU5BTUlDOworCXN0cnVjdCBkYmxsX2F0dHJzIG5ld19hdHRyczsKKwljaGFyICpwc3pfZmlsZV9uYW1lID0gTlVMTDsKKwlzdHJ1Y3QgZHNwX3V1aWQgKmRlcF9saWJfdXVpX2RzID0gTlVMTDsKKwlib29sICpwZXJzaXN0ZW50X2RlcF9saWJzID0gTlVMTDsKKwlpbnQgc3RhdHVzID0gMDsKKwlib29sIGxpYl9zdGF0dXMgPSBmYWxzZTsKKwlzdHJ1Y3QgbGliX25vZGUgKmRlcF9saWI7CisKKwlpZiAoZGVwdGggPiBNQVhERVBUSCkgeworCQkvKiBFcnJvciAqLworCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwl9CisJcm9vdC0+bGliID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgbGlicmFyeSBmaWxlIG5hbWUgb2Ygc2l6ZSBEQkxfTUFYUEFUSExFTkdUSCAqLworCXBzel9maWxlX25hbWUgPSBremFsbG9jKERCTExfTUFYUEFUSExFTkdUSCwgR0ZQX0tFUk5FTCk7CisJaWYgKHBzel9maWxlX25hbWUgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT01FTTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSAqLworCQlpZiAoZGVwdGggPT0gMCkgeworCQkJc3RhdHVzID0KKwkJCSAgICBkY2RfZ2V0X2xpYnJhcnlfbmFtZShubGRyX25vZGVfb2JqLT5ubGRyX29iai0+CisJCQkJCQkgaGRjZF9tZ3IsICZ1dWlkLCBwc3pfZmlsZV9uYW1lLAorCQkJCQkJICZkd19idWZfc2l6ZSwgcGhhc2UsCisJCQkJCQkgbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpOworCQl9IGVsc2UgeworCQkJLyogRGVwZW5kZW50IGxpYnJhcmllcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIGEgcGhhc2UgKi8KKwkJCXN0YXR1cyA9CisJCQkgICAgZGNkX2dldF9saWJyYXJ5X25hbWUobmxkcl9ub2RlX29iai0+bmxkcl9vYmotPgorCQkJCQkJIGhkY2RfbWdyLCAmdXVpZCwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJCSAmZHdfYnVmX3NpemUsIE5MRFJfTk9QSEFTRSwKKwkJCQkJCSBOVUxMKTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBPcGVuIHRoZSBsaWJyYXJ5LCBkb24ndCBsb2FkIHN5bWJvbHMgKi8KKwkJc3RhdHVzID0KKwkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5vcGVuX2Z4bihubGRyX29iai0+ZGJsbCwgcHN6X2ZpbGVfbmFtZSwKKwkJCQkJCURCTExfTk9MT0FELCAmcm9vdC0+bGliKTsKKwl9CisJLyogRG9uZSB3aXRoIGZpbGUgbmFtZSAqLworCWtmcmVlKHBzel9maWxlX25hbWUpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIGxpYnJhcnkgbm90IGFscmVhZHkgbG9hZGVkICovCisJaWYgKCFzdGF0dXMgJiYgcm9vdF9wcnN0bnQpIHsKKwkJbGliX3N0YXR1cyA9CisJCSAgICBmaW5kX2luX3BlcnNpc3RlbnRfbGliX2FycmF5KG5sZHJfbm9kZV9vYmosIHJvb3QtPmxpYik7CisJCS8qIENsb3NlIGxpYnJhcnkgKi8KKwkJaWYgKGxpYl9zdGF0dXMpIHsKKwkJCW5sZHJfb2JqLT5sZHJfZnhucy5jbG9zZV9meG4ocm9vdC0+bGliKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIENoZWNrIGZvciBjaXJjdWxhciBkZXBlbmRlbmNpZXMuICovCisJCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7CisJCQlpZiAocm9vdC0+bGliID09IGxpYl9wYXRoW2ldKSB7CisJCQkJLyogVGhpcyBjb25kaXRpb24gY291bGQgYmUgY2hlY2tlZCBieSBhCisJCQkJICogdG9vbCBhdCBidWlsZCB0aW1lLiAqLworCQkJCXN0YXR1cyA9IC1FSUxTRVE7CisJCQl9CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQWRkIGxpYnJhcnkgdG8gY3VycmVudCBwYXRoIGluIGRlcGVuZGVuY3kgdHJlZSAqLworCQlsaWJfcGF0aFtkZXB0aF0gPSByb290LT5saWI7CisJCWRlcHRoKys7CisJCS8qIEdldCBudW1iZXIgb2YgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCQlzdGF0dXMgPQorCQkgICAgZGNkX2dldF9udW1fZGVwX2xpYnMobmxkcl9ub2RlX29iai0+bmxkcl9vYmotPmhkY2RfbWdyLAorCQkJCQkgJnV1aWQsICZuZF9saWJzLCAmbnBfbGlicywgcGhhc2UpOworCX0KKwlEQkNfQVNTRVJUKG5kX2xpYnMgPj0gbnBfbGlicyk7CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCEoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSkKKwkJCW5wX2xpYnMgPSAwOworCisJCS8qIG5kX2xpYnMgPSAjb2YgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCQlyb290LT5kZXBfbGlicyA9IG5kX2xpYnMgLSBucF9saWJzOworCQlpZiAobmRfbGlicyA+IDApIHsKKwkJCWRlcF9saWJfdXVpX2RzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzcF91dWlkKSAqCisJCQkJCQkJbmRfbGlicywgR0ZQX0tFUk5FTCk7CisJCQlwZXJzaXN0ZW50X2RlcF9saWJzID0KKwkJCQlremFsbG9jKHNpemVvZihib29sKSAqIG5kX2xpYnMsIEdGUF9LRVJORUwpOworCQkJaWYgKCFkZXBfbGliX3V1aV9kcyB8fCAhcGVyc2lzdGVudF9kZXBfbGlicykKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCQlpZiAocm9vdC0+ZGVwX2xpYnMgPiAwKSB7CisJCQkJLyogQWxsb2NhdGUgYXJyYXlzIGZvciBkZXBlbmRlbnQgbGliIFVVSURzLAorCQkJCSAqIGxpYiBub2RlcyAqLworCQkJCXJvb3QtPmRlcF9saWJzX3RyZWUgPSBremFsbG9jCisJCQkJCQkoc2l6ZW9mKHN0cnVjdCBsaWJfbm9kZSkgKgorCQkJCQkJKHJvb3QtPmRlcF9saWJzKSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCEocm9vdC0+ZGVwX2xpYnNfdHJlZSkpCisJCQkJCXN0YXR1cyA9IC1FTk9NRU07CisKKwkJCX0KKworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkvKiBHZXQgdGhlIGRlcGVuZGVudCBsaWJyYXJ5IFVVSURzICovCisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGNkX2dldF9kZXBfbGlicyhubGRyX25vZGVfb2JqLT4KKwkJCQkJCSAgICAgbmxkcl9vYmotPmhkY2RfbWdyLCAmdXVpZCwKKwkJCQkJCSAgICAgbmRfbGlicywgZGVwX2xpYl91dWlfZHMsCisJCQkJCQkgICAgIHBlcnNpc3RlbnRfZGVwX2xpYnMsCisJCQkJCQkgICAgIHBoYXNlKTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogIFJlY3Vyc2l2ZWx5IGxvYWQgZGVwZW5kZW50IGxpYnJhcmllcy4KKwkgKi8KKwlpZiAoIXN0YXR1cykgeworCQlmb3IgKGkgPSAwOyBpIDwgbmRfbGliczsgaSsrKSB7CisJCQkvKiBJZiByb290IGxpYnJhcnkgaXMgTk9UIHBlcnNpc3RlbnQsIGFuZCBkZXAgbGlicmFyeQorCQkJICogaXMsIHRoZW4gcmVjb3JkIGl0LiAgSWYgcm9vdCBsaWJyYXJ5IElTIHBlcnNpc3RlbnQsCisJCQkgKiB0aGUgZGVwbGliIGlzIGFscmVhZHkgaW5jbHVkZWQgKi8KKwkJCWlmICghcm9vdF9wcnN0bnQgJiYgcGVyc2lzdGVudF9kZXBfbGlic1tpXSAmJgorCQkJICAgICpubGRyX25vZGVfb2JqLT5wZl9waGFzZV9zcGxpdCkgeworCQkJCWlmICgobmxkcl9ub2RlX29iai0+cGVyc19saWJzKSA+PSBNQVhMSUJTKSB7CisJCQkJCXN0YXR1cyA9IC1FSUxTRVE7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIEFsbG9jYXRlIGxpYnJhcnkgb3V0c2lkZSBvZiBwaGFzZSAqLworCQkJCWRlcF9saWIgPQorCQkJCSAgICAmbmxkcl9ub2RlX29iai0+cGVyc19saWJfdGFibGUKKwkJCQkgICAgW25sZHJfbm9kZV9vYmotPnBlcnNfbGlic107CisJCQl9IGVsc2UgeworCQkJCWlmIChyb290X3Byc3RudCkKKwkJCQkJcGVyc2lzdGVudF9kZXBfbGlic1tpXSA9IHRydWU7CisKKwkJCQkvKiBBbGxvY2F0ZSBsaWJyYXJ5IHdpdGhpbiBwaGFzZSAqLworCQkJCWRlcF9saWIgPSAmcm9vdC0+ZGVwX2xpYnNfdHJlZVtuZF9saWJzX2xvYWRlZF07CisJCQl9CisKKwkJCXN0YXR1cyA9IGxvYWRfbGliKG5sZHJfbm9kZV9vYmosIGRlcF9saWIsCisJCQkJCSAgZGVwX2xpYl91dWlfZHNbaV0sCisJCQkJCSAgcGVyc2lzdGVudF9kZXBfbGlic1tpXSwgbGliX3BhdGgsCisJCQkJCSAgcGhhc2UsIGRlcHRoKTsKKworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlpZiAoKHN0YXR1cyAhPSAwKSAmJgorCQkJCSAgICAhcm9vdF9wcnN0bnQgJiYgcGVyc2lzdGVudF9kZXBfbGlic1tpXSAmJgorCQkJCSAgICAqbmxkcl9ub2RlX29iai0+cGZfcGhhc2Vfc3BsaXQpIHsKKwkJCQkJKG5sZHJfbm9kZV9vYmotPnBlcnNfbGlicykrKzsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIXBlcnNpc3RlbnRfZGVwX2xpYnNbaV0gfHwKKwkJCQkJICAgICEoKm5sZHJfbm9kZV9vYmotPnBmX3BoYXNlX3NwbGl0KSkgeworCQkJCQkJbmRfbGlic19sb2FkZWQrKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBOb3cgd2UgY2FuIGxvYWQgdGhlIHJvb3QgbGlicmFyeSAqLworCWlmICghc3RhdHVzKSB7CisJCW5ld19hdHRycyA9IG5sZHJfb2JqLT5sZHJfYXR0cnM7CisJCW5ld19hdHRycy5zeW1fYXJnID0gcm9vdDsKKwkJbmV3X2F0dHJzLnJtbV9oYW5kbGUgPSBubGRyX25vZGVfb2JqOworCQluZXdfYXR0cnMuaW5wdXRfcGFyYW1zID0gbmxkcl9ub2RlX29iai0+cHJpdl9yZWY7CisJCW5ld19hdHRycy5iYXNlX2ltYWdlID0gZmFsc2U7CisKKwkJc3RhdHVzID0KKwkJICAgIG5sZHJfb2JqLT5sZHJfZnhucy5sb2FkX2Z4bihyb290LT5saWIsIGZsYWdzLCAmbmV3X2F0dHJzLAorCQkJCQkJJmVudHJ5KTsKKwl9CisKKwkvKgorCSAqICBJbiBjYXNlIG9mIGZhaWx1cmUsIHVubG9hZCBhbnkgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICogIHdlcmUgbG9hZGVkLCBhbmQgY2xvc2UgdGhlIHJvb3QgbGlicmFyeS4KKwkgKiAgKFBlcnNpc3RlbnQgbGlicmFyaWVzIGFyZSB1bmxvYWRlZCBmcm9tIHRoZSB2ZXJ5IHRvcCkKKwkgKi8KKwlpZiAoc3RhdHVzKSB7CisJCWlmIChwaGFzZSAhPSBOTERSX0VYRUNVVEUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBubGRyX25vZGVfb2JqLT5wZXJzX2xpYnM7IGkrKykKKwkJCQl1bmxvYWRfbGliKG5sZHJfbm9kZV9vYmosCisJCQkJCSAgICZubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXSk7CisKKwkJCW5sZHJfbm9kZV9vYmotPnBlcnNfbGlicyA9IDA7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5kX2xpYnNfbG9hZGVkOyBpKyspCisJCQl1bmxvYWRfbGliKG5sZHJfbm9kZV9vYmosICZyb290LT5kZXBfbGlic190cmVlW2ldKTsKKworCQlpZiAocm9vdC0+bGliKQorCQkJbmxkcl9vYmotPmxkcl9meG5zLmNsb3NlX2Z4bihyb290LT5saWIpOworCisJfQorCisJLyogR29pbmcgdXAgb25lIG5vZGUgaW4gdGhlIGRlcGVuZGVuY3kgdHJlZSAqLworCWRlcHRoLS07CisKKwlrZnJlZShkZXBfbGliX3V1aV9kcyk7CisJZGVwX2xpYl91dWlfZHMgPSBOVUxMOworCisJa2ZyZWUocGVyc2lzdGVudF9kZXBfbGlicyk7CisJcGVyc2lzdGVudF9kZXBfbGlicyA9IE5VTEw7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGxvYWRfb3ZseSA9PT09PT09PQorICovCitzdGF0aWMgaW50IGxvYWRfb3ZseShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJICAgIGVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gbmxkcl9ub2RlX29iai0+bmxkcl9vYmo7CisJc3RydWN0IG92bHlfbm9kZSAqcG9fbm9kZSA9IE5VTEw7CisJc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKm90aGVyX3NlY3RzX2xpc3QgPSBOVUxMOworCXUxNiBpOworCXUxNiBhbGxvY19udW0gPSAwOworCXUxNiBvdGhlcl9hbGxvYyA9IDA7CisJdTE2ICpyZWZfY291bnQgPSBOVUxMOworCXUxNiAqb3RoZXJfcmVmID0gTlVMTDsKKwl1MzIgYnl0ZXM7CisJc3RydWN0IG92bHlfc2VjdCAqb3ZseV9zZWN0aW9uOworCWludCBzdGF0dXMgPSAwOworCisJLyogRmluZCB0aGUgbm9kZSBpbiB0aGUgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmxkcl9vYmotPm92bHlfbm9kZXM7IGkrKykgeworCQlpZiAoaXNfZXF1YWxfdXVpZAorCQkgICAgKCZubGRyX25vZGVfb2JqLT51dWlkLCAmbmxkcl9vYmotPm92bHlfdGFibGVbaV0udXVpZCkpIHsKKwkJCS8qIEZvdW5kIGl0ICovCisJCQlwb19ub2RlID0gJihubGRyX29iai0+b3ZseV90YWJsZVtpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCURCQ19BU1NFUlQoaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzKTsKKworCWlmICghcG9fbm9kZSkgeworCQlzdGF0dXMgPSAtRU5PRU5UOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmNyZWF0ZV9yZWYpOworCQlvdGhlcl9yZWYgPSAmKHBvX25vZGUtPm90aGVyX3JlZik7CisJCXBoYXNlX3NlY3RzID0gcG9fbm9kZS0+Y3JlYXRlX3NlY3RzX2xpc3Q7CisJCW90aGVyX3NlY3RzX2xpc3QgPSBwb19ub2RlLT5vdGhlcl9zZWN0c19saXN0OworCQlicmVhazsKKworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmV4ZWN1dGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5leGVjdXRlX3NlY3RzX2xpc3Q7CisJCWJyZWFrOworCisJY2FzZSBOTERSX0RFTEVURToKKwkJcmVmX2NvdW50ID0gJihwb19ub2RlLT5kZWxldGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5kZWxldGVfc2VjdHNfbGlzdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEQkNfQVNTRVJUKGZhbHNlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlZl9jb3VudCA9PSBOVUxMKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKCpyZWZfY291bnQgIT0gMCkKKwkJZ290byBmdW5jX2VuZDsKKworCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBvdmVybGF5IHNlY3Rpb25zIG9mIHRoaXMgcGhhc2UgKi8KKwlvdmx5X3NlY3Rpb24gPSBwaGFzZV9zZWN0czsKKwl3aGlsZSAob3ZseV9zZWN0aW9uKSB7CisJCS8qIGFsbG9jYXRlICovLyogcGFnZSBub3Qgc3VwcG9ydGVkIHlldCAqLworCQkvKiByZXNlcnZlICovLyogYWxpZ24gKi8KKwkJc3RhdHVzID0gcm1tX2FsbG9jKG5sZHJfb2JqLT5ybW0sIDAsIG92bHlfc2VjdGlvbi0+c2l6ZSwgMCwKKwkJCQkgICAmKG92bHlfc2VjdGlvbi0+c2VjdF9ydW5fYWRkciksIHRydWUpOworCQlpZiAoIXN0YXR1cykgeworCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7CisJCQlhbGxvY19udW0rKzsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChvdGhlcl9yZWYgJiYgKm90aGVyX3JlZiA9PSAwKSB7CisJCS8qICdBbGxvY2F0ZScgbWVtb3J5IGZvciBvdGhlciBvdmVybGF5IHNlY3Rpb25zCisJCSAqIChjcmVhdGUgcGhhc2UpICovCisJCWlmICghc3RhdHVzKSB7CisJCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbikgeworCQkJCS8qIHBhZ2Ugbm90IHN1cHBvcnRlZCAqLy8qIGFsaWduICovCisJCQkJLyogcmVzZXJ2ZSAqLworCQkJCXN0YXR1cyA9CisJCQkJICAgIHJtbV9hbGxvYyhubGRyX29iai0+cm1tLCAwLAorCQkJCQkgICAgICBvdmx5X3NlY3Rpb24tPnNpemUsIDAsCisJCQkJCSAgICAgICYob3ZseV9zZWN0aW9uLT5zZWN0X3J1bl9hZGRyKSwKKwkJCQkJICAgICAgdHJ1ZSk7CisJCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQkJb3ZseV9zZWN0aW9uID0gb3ZseV9zZWN0aW9uLT5uZXh0X3NlY3Q7CisJCQkJCW90aGVyX2FsbG9jKys7CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICgqcmVmX2NvdW50ID09IDApIHsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIExvYWQgc2VjdGlvbnMgZm9yIHRoaXMgcGhhc2UgKi8KKwkJCW92bHlfc2VjdGlvbiA9IHBoYXNlX3NlY3RzOworCQkJd2hpbGUgKG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7CisJCQkJYnl0ZXMgPQorCQkJCSAgICAoKm5sZHJfb2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgorCQkJCQkJCSAgIHByaXZfcmVmLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+CisJCQkJCQkJICAgc2VjdF9ydW5fYWRkciwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPgorCQkJCQkJCSAgIHNlY3RfbG9hZF9hZGRyLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+c2l6ZSwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPnBhZ2UpOworCQkJCWlmIChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJfQorCQl9CisJfQorCWlmIChvdGhlcl9yZWYgJiYgKm90aGVyX3JlZiA9PSAwKSB7CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBMb2FkIG90aGVyIHNlY3Rpb25zIChjcmVhdGUgcGhhc2UpICovCisJCQlvdmx5X3NlY3Rpb24gPSBvdGhlcl9zZWN0c19saXN0OworCQkJd2hpbGUgKG92bHlfc2VjdGlvbiAmJiAhc3RhdHVzKSB7CisJCQkJYnl0ZXMgPQorCQkJCSAgICAoKm5sZHJfb2JqLT5vdmx5X2Z4bikgKG5sZHJfbm9kZV9vYmotPgorCQkJCQkJCSAgIHByaXZfcmVmLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+CisJCQkJCQkJICAgc2VjdF9ydW5fYWRkciwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPgorCQkJCQkJCSAgIHNlY3RfbG9hZF9hZGRyLAorCQkJCQkJCSAgIG92bHlfc2VjdGlvbi0+c2l6ZSwKKwkJCQkJCQkgICBvdmx5X3NlY3Rpb24tPnBhZ2UpOworCQkJCWlmIChieXRlcyAhPSBvdmx5X3NlY3Rpb24tPnNpemUpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJCW92bHlfc2VjdGlvbiA9IG92bHlfc2VjdGlvbi0+bmV4dF9zZWN0OworCQkJfQorCQl9CisJfQorCWlmIChzdGF0dXMpIHsKKwkJLyogJ0RlYWxsb2NhdGUnIG1lbW9yeSAqLworCQlmcmVlX3NlY3RzKG5sZHJfb2JqLCBwaGFzZV9zZWN0cywgYWxsb2NfbnVtKTsKKwkJZnJlZV9zZWN0cyhubGRyX29iaiwgb3RoZXJfc2VjdHNfbGlzdCwgb3RoZXJfYWxsb2MpOworCX0KK2Z1bmNfZW5kOgorCWlmICghc3RhdHVzICYmIChyZWZfY291bnQgIT0gTlVMTCkpIHsKKwkJKnJlZl9jb3VudCArPSAxOworCQlpZiAob3RoZXJfcmVmKQorCQkJKm90aGVyX3JlZiArPSAxOworCisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSByZW1vdGVfYWxsb2MgPT09PT09PT0KKyAqLworc3RhdGljIGludCByZW1vdGVfYWxsb2Modm9pZCAqKnJlZiwgdTE2IG1lbV9zZWN0LCB1MzIgc2l6ZSwKKwkJCSAgICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsCisJCQkgICAgICAgczMyIHNlZ21udF9pZCwgczMyIHJlcSwKKwkJCSAgICAgICBib29sIHJlc2VydmUpCit7CisJc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqaG5vZGUgPSAoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqKXJlZjsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqOworCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqcm1tOworCXUxNiBtZW1fcGhhc2VfYml0ID0gTUFYRkxBR1M7CisJdTE2IHNlZ2lkID0gMDsKKwl1MTYgaTsKKwl1MTYgbWVtX3NlY3RfdHlwZTsKKwl1MzIgd29yZF9zaXplOworCXN0cnVjdCBybW1fYWRkciAqcm1tX2FkZHJfb2JqID0gKHN0cnVjdCBybW1fYWRkciAqKWRzcF9hZGRyZXNzOworCWJvb2wgbWVtX2xvYWRfcmVxID0gZmFsc2U7CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0byBmYWlsICovCisJREJDX1JFUVVJUkUoaG5vZGUpOworCURCQ19SRVFVSVJFKG1lbV9zZWN0ID09IERCTExfQ09ERSB8fCBtZW1fc2VjdCA9PSBEQkxMX0RBVEEgfHwKKwkJICAgIG1lbV9zZWN0ID09IERCTExfQlNTKTsKKwlubGRyX29iaiA9IGhub2RlLT5ubGRyX29iajsKKwlybW0gPSBubGRyX29iai0+cm1tOworCS8qIENvbnZlcnQgc2l6ZSB0byBEU1Agd29yZHMgKi8KKwl3b3JkX3NpemUgPQorCSAgICAoc2l6ZSArIG5sZHJfb2JqLT51c19kc3Bfd29yZF9zaXplIC0KKwkgICAgIDEpIC8gbmxkcl9vYmotPnVzX2RzcF93b3JkX3NpemU7CisJLyogTW9kaWZ5IG1lbW9yeSAnYWxpZ24nIHRvIGFjY291bnQgZm9yIERTUCBjYWNoZSBsaW5lIHNpemUgKi8KKwlhbGlnbiA9IGZpbmRfbGNtKEdFTV9DQUNIRV9MSU5FX1NJWkUsIGFsaWduKTsKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBtZW1vcnkgYWxpZ24gdG8gMHgleFxuIiwgX19mdW5jX18sIGFsaWduKTsKKwlpZiAoc2VnbW50X2lkICE9IC0xKSB7CisJCXJtbV9hZGRyX29iai0+c2VnaWQgPSBzZWdtbnRfaWQ7CisJCXNlZ2lkID0gc2VnbW50X2lkOworCQltZW1fbG9hZF9yZXEgPSByZXE7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChobm9kZS0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCW1lbV9waGFzZV9iaXQgPSBDUkVBVEVEQVRBRkxBR0JJVDsKKwkJCWJyZWFrOworCQljYXNlIE5MRFJfREVMRVRFOgorCQkJbWVtX3BoYXNlX2JpdCA9IERFTEVURURBVEFGTEFHQklUOworCQkJYnJlYWs7CisJCWNhc2UgTkxEUl9FWEVDVVRFOgorCQkJbWVtX3BoYXNlX2JpdCA9IEVYRUNVVEVEQVRBRkxBR0JJVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAobWVtX3NlY3QgPT0gREJMTF9DT0RFKQorCQkJbWVtX3BoYXNlX2JpdCsrOworCisJCWlmIChtZW1fcGhhc2VfYml0IDwgTUFYRkxBR1MpCisJCQlzZWdpZCA9IGhub2RlLT5zZWdfaWRbbWVtX3BoYXNlX2JpdF07CisKKwkJLyogRGV0ZXJtaW5lIGlmIHRoZXJlIGlzIGEgbWVtb3J5IGxvYWRpbmcgcmVxdWlyZW1lbnQgKi8KKwkJaWYgKChobm9kZS0+Y29kZV9kYXRhX2ZsYWdfbWFzayA+PiBtZW1fcGhhc2VfYml0KSAmIDB4MSkKKwkJCW1lbV9sb2FkX3JlcSA9IHRydWU7CisKKwl9CisJbWVtX3NlY3RfdHlwZSA9IChtZW1fc2VjdCA9PSBEQkxMX0NPREUpID8gRFlOTV9DT0RFIDogRFlOTV9EQVRBOworCisJLyogRmluZCBhbiBhcHByb3ByaWF0ZSBzZWdtZW50IGJhc2VkIG9uIG1lbV9zZWN0ICovCisJaWYgKHNlZ2lkID09IE5VTExJRCkgeworCQkvKiBObyBtZW1vcnkgcmVxdWlyZW1lbnRzIG9mIHByZWZlcmVuY2VzICovCisJCURCQ19BU1NFUlQoIW1lbV9sb2FkX3JlcSk7CisJCWdvdG8gZnVuY19jb250OworCX0KKwlpZiAoc2VnaWQgPD0gTUFYU0VHSUQpIHsKKwkJREJDX0FTU0VSVChzZWdpZCA8IG5sZHJfb2JqLT5kbG9hZF9zZWdzKTsKKwkJLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBmcm9tIHNlZ2lkIGZpcnN0LiAqLworCQlybW1fYWRkcl9vYmotPnNlZ2lkID0gc2VnaWQ7CisJCXN0YXR1cyA9CisJCSAgICBybW1fYWxsb2Mocm1tLCBzZWdpZCwgd29yZF9zaXplLCBhbGlnbiwgZHNwX2FkZHJlc3MsIGZhbHNlKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogVW5hYmxlIGFsbG9jYXRlIGZyb20gc2VnbWVudCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc2VnaWQpOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2VnaWQgPiBNQVhTRUdJRCA9PT4gSW50ZXJuYWwgb3IgZXh0ZXJuYWwgbWVtb3J5ICovCisJCURCQ19BU1NFUlQoc2VnaWQgPT0gTUVNSU5URVJOQUxJRCB8fCBzZWdpZCA9PSBNRU1FWFRFUk5BTElEKTsKKwkJLyogIENoZWNrIGZvciBhbnkgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgbWVtb3J5IHNlZ21lbnQsCisJCSAqICBkZXBlbmRpbmcgb24gc2VnaWQuICovCisJCW1lbV9zZWN0X3R5cGUgfD0gc2VnaWQgPT0gTUVNSU5URVJOQUxJRCA/CisJCSAgICBEWU5NX0lOVEVSTkFMIDogRFlOTV9FWFRFUk5BTDsKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5kbG9hZF9zZWdzOyBpKyspIHsKKwkJCWlmICgobmxkcl9vYmotPnNlZ190YWJsZVtpXSAmIG1lbV9zZWN0X3R5cGUpICE9CisJCQkgICAgbWVtX3NlY3RfdHlwZSkKKwkJCQljb250aW51ZTsKKworCQkJc3RhdHVzID0gcm1tX2FsbG9jKHJtbSwgaSwgd29yZF9zaXplLCBhbGlnbiwKKwkJCQkJZHNwX2FkZHJlc3MsIGZhbHNlKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogU2F2ZSBzZWdpZCBmb3IgZnJlZWluZyBsYXRlciAqLworCQkJCXJtbV9hZGRyX29iai0+c2VnaWQgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorZnVuY19jb250OgorCS8qIEhhdmVuJ3QgZm91bmQgbWVtb3J5IHlldCwgYXR0ZW1wdCB0byBmaW5kIGFueSBzZWdtZW50IHRoYXQgd29ya3MgKi8KKwlpZiAoc3RhdHVzID09IC1FTk9NRU0gJiYgIW1lbV9sb2FkX3JlcSkgeworCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBQcmVmZXJyZWQgc2VnbWVudCB1bmF2YWlsYWJsZSwgdHJ5aW5nICIKKwkJCSJhbm90aGVyXG4iLCBfX2Z1bmNfXyk7CisJCWZvciAoaSA9IDA7IGkgPCBubGRyX29iai0+ZGxvYWRfc2VnczsgaSsrKSB7CisJCQkvKiBBbGwgYml0cyBvZiBtZW1fc2VjdF90eXBlIG11c3QgYmUgc2V0ICovCisJCQlpZiAoKG5sZHJfb2JqLT5zZWdfdGFibGVbaV0gJiBtZW1fc2VjdF90eXBlKSAhPQorCQkJICAgIG1lbV9zZWN0X3R5cGUpCisJCQkJY29udGludWU7CisKKwkJCXN0YXR1cyA9IHJtbV9hbGxvYyhybW0sIGksIHdvcmRfc2l6ZSwgYWxpZ24sCisJCQkJCSAgIGRzcF9hZGRyZXNzLCBmYWxzZSk7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCS8qIFNhdmUgc2VnaWQgKi8KKwkJCQlybW1fYWRkcl9vYmotPnNlZ2lkID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3RlX2ZyZWUodm9pZCAqKnJlZiwgdTE2IHNwYWNlLCB1MzIgZHNwX2FkZHJlc3MsCisJCQkgICAgICB1MzIgc2l6ZSwgYm9vbCByZXNlcnZlKQoreworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSAoc3RydWN0IG5sZHJfb2JqZWN0ICopcmVmOworCXN0cnVjdCBybW1fdGFyZ2V0X29iaiAqcm1tOworCXUzMiB3b3JkX3NpemU7CisJaW50IHN0YXR1cyA9IC1FTk9NRU07CS8qIFNldCB0byBmYWlsICovCisKKwlEQkNfUkVRVUlSRShubGRyX29iaik7CisKKwlybW0gPSBubGRyX29iai0+cm1tOworCisJLyogQ29udmVydCBzaXplIHRvIERTUCB3b3JkcyAqLworCXdvcmRfc2l6ZSA9CisJICAgIChzaXplICsgbmxkcl9vYmotPnVzX2RzcF93b3JkX3NpemUgLQorCSAgICAgMSkgLyBubGRyX29iai0+dXNfZHNwX3dvcmRfc2l6ZTsKKworCWlmIChybW1fZnJlZShybW0sIHNwYWNlLCBkc3BfYWRkcmVzcywgd29yZF9zaXplLCByZXNlcnZlKSkKKwkJc3RhdHVzID0gMDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5sb2FkX2xpYiA9PT09PT09PQorICovCitzdGF0aWMgdm9pZCB1bmxvYWRfbGliKHN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmosCisJCSAgICAgICBzdHJ1Y3QgbGliX25vZGUgKnJvb3QpCit7CisJc3RydWN0IGRibGxfYXR0cnMgbmV3X2F0dHJzOworCXN0cnVjdCBubGRyX29iamVjdCAqbmxkcl9vYmogPSBubGRyX25vZGVfb2JqLT5ubGRyX29iajsKKwl1MTYgaTsKKworCURCQ19BU1NFUlQocm9vdCAhPSBOVUxMKTsKKworCS8qIFVubG9hZCBkZXBlbmRlbnQgbGlicmFyaWVzICovCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmRlcF9saWJzOyBpKyspCisJCXVubG9hZF9saWIobmxkcl9ub2RlX29iaiwgJnJvb3QtPmRlcF9saWJzX3RyZWVbaV0pOworCisJcm9vdC0+ZGVwX2xpYnMgPSAwOworCisJbmV3X2F0dHJzID0gbmxkcl9vYmotPmxkcl9hdHRyczsKKwluZXdfYXR0cnMucm1tX2hhbmRsZSA9IG5sZHJfb2JqLT5ybW07CisJbmV3X2F0dHJzLmlucHV0X3BhcmFtcyA9IG5sZHJfbm9kZV9vYmotPnByaXZfcmVmOworCW5ld19hdHRycy5iYXNlX2ltYWdlID0gZmFsc2U7CisJbmV3X2F0dHJzLnN5bV9hcmcgPSByb290OworCisJaWYgKHJvb3QtPmxpYikgeworCQkvKiBVbmxvYWQgdGhlIHJvb3QgbGlicmFyeSAqLworCQlubGRyX29iai0+bGRyX2Z4bnMudW5sb2FkX2Z4bihyb290LT5saWIsICZuZXdfYXR0cnMpOworCQlubGRyX29iai0+bGRyX2Z4bnMuY2xvc2VfZnhuKHJvb3QtPmxpYik7CisJfQorCisJLyogRnJlZSBkZXBlbmRlbnQgbGlicmFyeSBsaXN0ICovCisJa2ZyZWUocm9vdC0+ZGVwX2xpYnNfdHJlZSk7CisJcm9vdC0+ZGVwX2xpYnNfdHJlZSA9IE5VTEw7Cit9CisKKy8qCisgKiAgPT09PT09PT0gdW5sb2FkX292bHkgPT09PT09PT0KKyAqLworc3RhdGljIHZvaWQgdW5sb2FkX292bHkoc3RydWN0IG5sZHJfbm9kZW9iamVjdCAqbmxkcl9ub2RlX29iaiwKKwkJCWVudW0gbmxkcl9waGFzZSBwaGFzZSkKK3sKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gbmxkcl9ub2RlX29iai0+bmxkcl9vYmo7CisJc3RydWN0IG92bHlfbm9kZSAqcG9fbm9kZSA9IE5VTEw7CisJc3RydWN0IG92bHlfc2VjdCAqcGhhc2Vfc2VjdHMgPSBOVUxMOworCXN0cnVjdCBvdmx5X3NlY3QgKm90aGVyX3NlY3RzX2xpc3QgPSBOVUxMOworCXUxNiBpOworCXUxNiBhbGxvY19udW0gPSAwOworCXUxNiBvdGhlcl9hbGxvYyA9IDA7CisJdTE2ICpyZWZfY291bnQgPSBOVUxMOworCXUxNiAqb3RoZXJfcmVmID0gTlVMTDsKKworCS8qIEZpbmQgdGhlIG5vZGUgaW4gdGhlIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IG5sZHJfb2JqLT5vdmx5X25vZGVzOyBpKyspIHsKKwkJaWYgKGlzX2VxdWFsX3V1aWQKKwkJICAgICgmbmxkcl9ub2RlX29iai0+dXVpZCwgJm5sZHJfb2JqLT5vdmx5X3RhYmxlW2ldLnV1aWQpKSB7CisJCQkvKiBGb3VuZCBpdCAqLworCQkJcG9fbm9kZSA9ICYobmxkcl9vYmotPm92bHlfdGFibGVbaV0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlEQkNfQVNTRVJUKGkgPCBubGRyX29iai0+b3ZseV9ub2Rlcyk7CisKKwlpZiAoIXBvX25vZGUpCisJCS8qIFRPRE86IFNob3VsZCB3ZSBwcmludCB3YXJuaW5nIGhlcmU/ICovCisJCXJldHVybjsKKworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIE5MRFJfQ1JFQVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmNyZWF0ZV9yZWYpOworCQlwaGFzZV9zZWN0cyA9IHBvX25vZGUtPmNyZWF0ZV9zZWN0c19saXN0OworCQlhbGxvY19udW0gPSBwb19ub2RlLT5jcmVhdGVfc2VjdHM7CisJCWJyZWFrOworCWNhc2UgTkxEUl9FWEVDVVRFOgorCQlyZWZfY291bnQgPSAmKHBvX25vZGUtPmV4ZWN1dGVfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5leGVjdXRlX3NlY3RzX2xpc3Q7CisJCWFsbG9jX251bSA9IHBvX25vZGUtPmV4ZWN1dGVfc2VjdHM7CisJCWJyZWFrOworCWNhc2UgTkxEUl9ERUxFVEU6CisJCXJlZl9jb3VudCA9ICYocG9fbm9kZS0+ZGVsZXRlX3JlZik7CisJCW90aGVyX3JlZiA9ICYocG9fbm9kZS0+b3RoZXJfcmVmKTsKKwkJcGhhc2Vfc2VjdHMgPSBwb19ub2RlLT5kZWxldGVfc2VjdHNfbGlzdDsKKwkJLyogJ090aGVyJyBvdmVybGF5IHNlY3Rpb25zIGFyZSB1bmxvYWRlZCBpbiB0aGUgZGVsZXRlIHBoYXNlICovCisJCW90aGVyX3NlY3RzX2xpc3QgPSBwb19ub2RlLT5vdGhlcl9zZWN0c19saXN0OworCQlhbGxvY19udW0gPSBwb19ub2RlLT5kZWxldGVfc2VjdHM7CisJCW90aGVyX2FsbG9jID0gcG9fbm9kZS0+b3RoZXJfc2VjdHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURCQ19BU1NFUlQoZmFsc2UpOworCQlicmVhazsKKwl9CisJREJDX0FTU0VSVChyZWZfY291bnQgJiYgKCpyZWZfY291bnQgPiAwKSk7CisJaWYgKHJlZl9jb3VudCAmJiAoKnJlZl9jb3VudCA+IDApKSB7CisJCSpyZWZfY291bnQgLT0gMTsKKwkJaWYgKG90aGVyX3JlZikgeworCQkJREJDX0FTU0VSVCgqb3RoZXJfcmVmID4gMCk7CisJCQkqb3RoZXJfcmVmIC09IDE7CisJCX0KKwl9CisKKwlpZiAocmVmX2NvdW50ICYmICpyZWZfY291bnQgPT0gMCkgeworCQkvKiAnRGVhbGxvY2F0ZScgbWVtb3J5ICovCisJCWZyZWVfc2VjdHMobmxkcl9vYmosIHBoYXNlX3NlY3RzLCBhbGxvY19udW0pOworCX0KKwlpZiAob3RoZXJfcmVmICYmICpvdGhlcl9yZWYgPT0gMCkKKwkJZnJlZV9zZWN0cyhubGRyX29iaiwgb3RoZXJfc2VjdHNfbGlzdCwgb3RoZXJfYWxsb2MpOworfQorCisvKgorICogID09PT09PT09IGZpbmRfaW5fcGVyc2lzdGVudF9saWJfYXJyYXkgPT09PT09PT0KKyAqLworc3RhdGljIGJvb2wgZmluZF9pbl9wZXJzaXN0ZW50X2xpYl9hcnJheShzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGVfb2JqLAorCQkJCQkgc3RydWN0IGRibGxfbGlicmFyeV9vYmogKmxpYikKK3sKKwlzMzIgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmxkcl9ub2RlX29iai0+cGVyc19saWJzOyBpKyspIHsKKwkJaWYgKGxpYiA9PSBubGRyX25vZGVfb2JqLT5wZXJzX2xpYl90YWJsZVtpXS5saWIpCisJCQlyZXR1cm4gdHJ1ZTsKKworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqID09PT09PT09PT09PT09PT0gRmluZCBMQ00gKExlYXN0IENvbW1vbiBNdWx0aXBsaWVyID09PQorICovCitzdGF0aWMgdTMyIGZpbmRfbGNtKHUzMiBhLCB1MzIgYikKK3sKKwl1MzIgcmV0OworCisJcmV0ID0gYSAqIGIgLyBnY2QoYSwgYik7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoqCisgKiBubGRyX2ZpbmRfYWRkcigpIC0gRmluZCB0aGUgY2xvc2VzdCBzeW1ib2wgdG8gdGhlIGdpdmVuIGFkZHJlc3MgYmFzZWQgb24KKyAqCQlkeW5hbWljIG5vZGUgb2JqZWN0LgorICoKKyAqIEBubGRyX25vZGU6CQlEeW5hbWljIG5vZGUgb2JqZWN0CisgKiBAc3ltX2FkZHI6CQlHaXZlbiBhZGRyZXNzIHRvIGZpbmQgdGhlIGRzcCBzeW1ib2wKKyAqIEBvZmZzZXRfcmFuZ2U6CQlvZmZzZXQgcmFuZ2UgdG8gbG9vayBmb3IgZHNwIHN5bWJvbAorICogQG9mZnNldF9vdXRwdXQ6CQlTeW1ib2wgT3V0cHV0IGFkZHJlc3MKKyAqIEBzeW1fbmFtZToJCVN0cmluZyB3aXRoIHRoZSBkc3Agc3ltYm9sCisgKgorICogCVRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIG5vZGUgbGlicmFyeSBmb3IgYSBnaXZlbiBhZGRyZXNzIGFuZAorICoJcmV0cmlldmVzIHRoZSBkc3Agc3ltYm9sIGJ5IGNhbGxpbmcgZGJsbF9maW5kX2RzcF9zeW1ib2wuCisgKi8KK2ludCBubGRyX2ZpbmRfYWRkcihzdHJ1Y3Qgbmxkcl9ub2Rlb2JqZWN0ICpubGRyX25vZGUsIHUzMiBzeW1fYWRkciwKKwkJCXUzMiBvZmZzZXRfcmFuZ2UsIHZvaWQgKm9mZnNldF9vdXRwdXQsIGNoYXIgKnN5bV9uYW1lKQoreworCWludCBzdGF0dXMgPSAwOworCWJvb2wgc3RhdHVzMSA9IGZhbHNlOworCXMzMiBpID0gMDsKKwlzdHJ1Y3QgbGliX25vZGUgcm9vdCA9IHsgTlVMTCwgMCwgTlVMTCB9OworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShvZmZzZXRfb3V0cHV0ICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHN5bV9uYW1lICE9IE5VTEwpOworCXByX2RlYnVnKCIlcygweCV4LCAweCV4LCAweCV4LCAweCV4LCAgJXMpXG4iLCBfX2Z1bmNfXywgKHUzMikgbmxkcl9ub2RlLAorCQkJc3ltX2FkZHIsIG9mZnNldF9yYW5nZSwgKHUzMikgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCisJaWYgKG5sZHJfbm9kZS0+ZHluYW1pYyAmJiAqbmxkcl9ub2RlLT5wZl9waGFzZV9zcGxpdCkgeworCQlzd2l0Y2ggKG5sZHJfbm9kZS0+cGhhc2UpIHsKKwkJY2FzZSBOTERSX0NSRUFURToKKwkJCXJvb3QgPSBubGRyX25vZGUtPmNyZWF0ZV9saWI7CisJCQlicmVhazsKKwkJY2FzZSBOTERSX0VYRUNVVEU6CisJCQlyb290ID0gbmxkcl9ub2RlLT5leGVjdXRlX2xpYjsKKwkJCWJyZWFrOworCQljYXNlIE5MRFJfREVMRVRFOgorCQkJcm9vdCA9IG5sZHJfbm9kZS0+ZGVsZXRlX2xpYjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREJDX0FTU0VSVChmYWxzZSk7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGZvciBPdmVybGF5IG5vZGVzIG9yIG5vbi1zcGxpdCBEeW5hbWljIG5vZGVzICovCisJCXJvb3QgPSBubGRyX25vZGUtPnJvb3Q7CisJfQorCisJc3RhdHVzMSA9IGRibGxfZmluZF9kc3Bfc3ltYm9sKHJvb3QubGliLCBzeW1fYWRkciwKKwkJCW9mZnNldF9yYW5nZSwgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCisJLyogSWYgc3ltYm9sIG5vdCBmb3VuZCwgY2hlY2sgZGVwZW5kZW50IGxpYnJhcmllcyAqLworCWlmICghc3RhdHVzMSkKKwkJZm9yIChpID0gMDsgaSA8IHJvb3QuZGVwX2xpYnM7IGkrKykgeworCQkJc3RhdHVzMSA9IGRibGxfZmluZF9kc3Bfc3ltYm9sKAorCQkJCXJvb3QuZGVwX2xpYnNfdHJlZVtpXS5saWIsIHN5bV9hZGRyLAorCQkJCW9mZnNldF9yYW5nZSwgb2Zmc2V0X291dHB1dCwgc3ltX25hbWUpOworCQkJaWYgKHN0YXR1czEpCisJCQkJLyogU3ltYm9sIGZvdW5kICovCisJCQkJYnJlYWs7CisJCX0KKwkvKiBDaGVjayBwZXJzaXN0ZW50IGxpYnJhcmllcyAqLworCWlmICghc3RhdHVzMSkKKwkJZm9yIChpID0gMDsgaSA8IG5sZHJfbm9kZS0+cGVyc19saWJzOyBpKyspIHsKKwkJCXN0YXR1czEgPSBkYmxsX2ZpbmRfZHNwX3N5bWJvbCgKKwkJCQlubGRyX25vZGUtPnBlcnNfbGliX3RhYmxlW2ldLmxpYiwgc3ltX2FkZHIsCisJCQkJb2Zmc2V0X3JhbmdlLCBvZmZzZXRfb3V0cHV0LCBzeW1fbmFtZSk7CisJCQlpZiAoc3RhdHVzMSkKKwkJCQkvKiBTeW1ib2wgZm91bmQgKi8KKwkJCQlicmVhazsKKwkJfQorCisJaWYgKCFzdGF0dXMxKSB7CisJCXByX2RlYnVnKCIlczogQWRkcmVzcyAweCV4IG5vdCBmb3VuZCBpbiByYW5nZSAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBzeW1fYWRkciwgb2Zmc2V0X3JhbmdlKTsKKwkJc3RhdHVzID0gLUVTUElQRTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5NDQxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL25vZGUuYwpAQCAtMCwwICsxLDMyMzQgQEAKKy8qCisgKiBub2RlLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogRFNQL0JJT1MgQnJpZGdlIE5vZGUgTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL21lbWRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHJvYy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zdHJtLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9jbW0uaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkY2QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGlzcC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybXNfc2guaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmsgRHJpdmVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9nYi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS91dWlkdXRpbC5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ub2RlLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RtbS5oPgorCisvKiBTdGF0aWMvRHluYW1pYyBMb2FkZXIgaW5jbHVkZXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJsbC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ubGRyLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RydmRlZnMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisjaW5jbHVkZSA8X3Rpb21hcC5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorCisjZGVmaW5lIEhPU1RQUkVGSVgJICAiL2hvc3QiCisjZGVmaW5lIFBJUEVQUkVGSVgJICAiL2RicGlwZSIKKworI2RlZmluZSBNQVhfSU5QVVRTKGgpICBcCisJCSgoaCktPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnVtX2lucHV0X3N0cmVhbXMpCisjZGVmaW5lIE1BWF9PVVRQVVRTKGgpIFwKKwkJKChoKS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5udW1fb3V0cHV0X3N0cmVhbXMpCisKKyNkZWZpbmUgTk9ERV9HRVRfUFJJT1JJVFkoaCkgKChoKS0+cHJpbykKKyNkZWZpbmUgTk9ERV9TRVRfUFJJT1JJVFkoaG5vZGUsIHByaW8pICgoaG5vZGUpLT5wcmlvID0gcHJpbykKKyNkZWZpbmUgTk9ERV9TRVRfU1RBVEUoaG5vZGUsIHN0YXRlKSAoKGhub2RlKS0+bm9kZV9zdGF0ZSA9IHN0YXRlKQorCisjZGVmaW5lIE1BWFBJUEVTCTEwMAkvKiBNYXggIyBvZiAvcGlwZSBjb25uZWN0aW9ucyAoQ1NMIGxpbWl0KSAqLworI2RlZmluZSBNQVhERVZTVUZGSVhMRU4gMgkvKiBNYXgoTG9nIGJhc2UgMTAgb2YgTUFYUElQRVMsIE1BWFNUUkVBTVMpICovCisKKyNkZWZpbmUgUElQRU5BTUVMRU4gICAgIChzaXplb2YoUElQRVBSRUZJWCkgKyBNQVhERVZTVUZGSVhMRU4pCisjZGVmaW5lIEhPU1ROQU1FTEVOICAgICAoc2l6ZW9mKEhPU1RQUkVGSVgpICsgTUFYREVWU1VGRklYTEVOKQorCisjZGVmaW5lIE1BWERFVk5BTUVMRU4JMzIJLyogZHNwX25kYnByb3BzLmFjX25hbWUgc2l6ZSAqLworI2RlZmluZSBDUkVBVEVQSEFTRQkxCisjZGVmaW5lIEVYRUNVVEVQSEFTRQkyCisjZGVmaW5lIERFTEVURVBIQVNFCTMKKworLyogRGVmaW5lIGRlZmF1bHQgU1RSTSBwYXJhbWV0ZXJzICovCisvKgorICogIFRCRDogUHV0IGluIGhlYWRlciBmaWxlLCBtYWtlIGdsb2JhbCBEU1BfU1RSTUFUVFJTIHdpdGggZGVmYXVsdHMsCisgKiAgb3IgbWFrZSBkZWZhdWx0cyBjb25maWd1cmFibGUuCisgKi8KKyNkZWZpbmUgREVGQVVMVEJVRlNJWkUJCTMyCisjZGVmaW5lIERFRkFVTFROQlVGUwkJMgorI2RlZmluZSBERUZBVUxUU0VHSUQJCTAKKyNkZWZpbmUgREVGQVVMVEFMSUdOTUVOVAkwCisjZGVmaW5lIERFRkFVTFRUSU1FT1VUCQkxMDAwMAorCisjZGVmaW5lIFJNU1FVRVJZU0VSVkVSCQkwCisjZGVmaW5lIFJNU0NPTkZJR1VSRVNFUlZFUgkxCisjZGVmaW5lIFJNU0NSRUFURU5PREUJCTIKKyNkZWZpbmUgUk1TRVhFQ1VURU5PREUJCTMKKyNkZWZpbmUgUk1TREVMRVRFTk9ERQkJNAorI2RlZmluZSBSTVNDSEFOR0VOT0RFUFJJT1JJVFkJNQorI2RlZmluZSBSTVNSRUFETUVNT1JZCQk2CisjZGVmaW5lIFJNU1dSSVRFTUVNT1JZCQk3CisjZGVmaW5lIFJNU0NPUFkJCQk4CisjZGVmaW5lIE1BWFRJTUVPVVQJCTIwMDAKKworI2RlZmluZSBOVU1STVNGWE5TCQk5CisKKyNkZWZpbmUgUFdSX1RJTUVPVVQJCTUwMAkvKiBkZWZhdWx0IFBXUiB0aW1lb3V0IGluIG1zZWMgKi8KKworI2RlZmluZSBTVEFDS1NFR0xBQkVMICJMMURTUkFNX0hFQVAiCS8qIExhYmVsIGZvciBEU1AgU3RhY2sgU2VnbWVudCBBZGRyICovCisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9tZ3IgPT09PT09PT0KKyAqLworc3RydWN0IG5vZGVfbWdyIHsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIERldmljZSBvYmplY3QgKi8KKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3I7CS8qIFByb2MvTm9kZSBkYXRhIG1hbmFnZXIgKi8KKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOwkvKiBOb2RlIGRpc3BhdGNoZXIgKi8KKwlzdHJ1Y3QgbHN0X2xpc3QgKm5vZGVfbGlzdDsJLyogTGlzdCBvZiBhbGwgYWxsb2NhdGVkIG5vZGVzICovCisJdTMyIG51bV9ub2RlczsJCS8qIE51bWJlciBvZiBub2RlcyBpbiBub2RlX2xpc3QgKi8KKwl1MzIgbnVtX2NyZWF0ZWQ7CS8qIE51bWJlciBvZiBub2RlcyAqY3JlYXRlZCogb24gRFNQICovCisJc3RydWN0IGdiX3RfbWFwICpwaXBlX21hcDsJLyogUGlwZSBjb25uZWN0aW9uIGJpdCBtYXAgKi8KKwlzdHJ1Y3QgZ2JfdF9tYXAgKnBpcGVfZG9uZV9tYXA7CS8qIFBpcGVzIHRoYXQgYXJlIGhhbGYgZnJlZSAqLworCXN0cnVjdCBnYl90X21hcCAqY2hubF9tYXA7CS8qIENoYW5uZWwgYWxsb2NhdGlvbiBiaXQgbWFwICovCisJc3RydWN0IGdiX3RfbWFwICpkbWFfY2hubF9tYXA7CS8qIERNQSBDaGFubmVsIGFsbG9jYXRpb24gYml0IG1hcCAqLworCXN0cnVjdCBnYl90X21hcCAqemNfY2hubF9tYXA7CS8qIFplcm8tQ29weSBDaGFubmVsIGFsbG9jIGJpdCBtYXAgKi8KKwlzdHJ1Y3QgbnRmeV9vYmplY3QgKm50Znlfb2JqOwkvKiBNYW5hZ2VzIHJlZ2lzdGVyZWQgbm90aWZpY2F0aW9ucyAqLworCXN0cnVjdCBtdXRleCBub2RlX21ncl9sb2NrOwkvKiBGb3IgY3JpdGljYWwgc2VjdGlvbnMgKi8KKwl1MzIgdWxfZnhuX2FkZHJzW05VTVJNU0ZYTlNdOwkvKiBSTVMgZnVuY3Rpb24gYWRkcmVzc2VzICovCisJc3RydWN0IG1zZ19tZ3IgKm1zZ19tZ3Jfb2JqOworCisJLyogUHJvY2Vzc29yIHByb3BlcnRpZXMgbmVlZGVkIGJ5IE5vZGUgRGlzcGF0Y2hlciAqLworCXUzMiB1bF9udW1fY2hubHM7CS8qIFRvdGFsIG51bWJlciBvZiBjaGFubmVscyAqLworCXUzMiB1bF9jaG5sX29mZnNldDsJLyogT2Zmc2V0IG9mIGNobmwgaWRzIHJzdmQgZm9yIFJNUyAqLworCXUzMiB1bF9jaG5sX2J1Zl9zaXplOwkvKiBCdWZmZXIgc2l6ZSBmb3IgZGF0YSB0byBSTVMgKi8KKwlpbnQgcHJvY19mYW1pbHk7CS8qIGVnLCA1MDAwICovCisJaW50IHByb2NfdHlwZTsJCS8qIGVnLCA1NTEwICovCisJdTMyIHVkc3Bfd29yZF9zaXplOwkvKiBTaXplIG9mIERTUCB3b3JkIG9uIGhvc3QgYnl0ZXMgKi8KKwl1MzIgdWRzcF9kYXRhX21hdV9zaXplOwkvKiBTaXplIG9mIERTUCBkYXRhIE1BVSAqLworCXUzMiB1ZHNwX21hdV9zaXplOwkvKiBTaXplIG9mIE1BVSAqLworCXMzMiBtaW5fcHJpOwkJLyogTWluaW11bSBydW50aW1lIHByaW9yaXR5IGZvciBub2RlICovCisJczMyIG1heF9wcmk7CQkvKiBNYXhpbXVtIHJ1bnRpbWUgcHJpb3JpdHkgZm9yIG5vZGUgKi8KKworCXN0cnVjdCBzdHJtX21nciAqc3RybV9tZ3Jfb2JqOwkvKiBTVFJNIG1hbmFnZXIgKi8KKworCS8qIExvYWRlciBwcm9wZXJ0aWVzICovCisJc3RydWN0IG5sZHJfb2JqZWN0ICpubGRyX29iajsJLyogSGFuZGxlIHRvIGxvYWRlciAqLworCXN0cnVjdCBub2RlX2xkcl9meG5zIG5sZHJfZnhuczsJLyogSGFuZGxlIHRvIGxvYWRlciBmdW5jdGlvbnMgKi8KKwlib29sIGxvYWRlcl9pbml0OwkvKiBMb2FkZXIgSW5pdCBmdW5jdGlvbiBzdWNjZWVkZWQ/ICovCit9OworCisvKgorICogID09PT09PT09IGNvbm5lY3R0eXBlID09PT09PT09CisgKi8KK2VudW0gY29ubmVjdHR5cGUgeworCU5PVENPTk5FQ1RFRCA9IDAsCisJTk9ERUNPTk5FQ1QsCisJSE9TVENPTk5FQ1QsCisJREVWSUNFQ09OTkVDVCwKK307CisKKy8qCisgKiAgPT09PT09PT0gc3RyZWFtX2NobmwgPT09PT09PT0KKyAqLworc3RydWN0IHN0cmVhbV9jaG5sIHsKKwllbnVtIGNvbm5lY3R0eXBlIHR5cGU7CS8qIFR5cGUgb2Ygc3RyZWFtIGNvbm5lY3Rpb24gKi8KKwl1MzIgZGV2X2lkOwkJLyogcGlwZSBvciBjaGFubmVsIGlkICovCit9OworCisvKgorICogID09PT09PT09IG5vZGVfb2JqZWN0ID09PT09PT09CisgKi8KK3N0cnVjdCBub2RlX29iamVjdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VsZW07CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CS8qIFRoZSBtYW5hZ2VyIG9mIHRoaXMgbm9kZSAqLworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsJLyogQmFjayBwb2ludGVyIHRvIHByb2Nlc3NvciAqLworCXN0cnVjdCBkc3BfdXVpZCBub2RlX3V1aWQ7CS8qIE5vZGUncyBJRCAqLworCXMzMiBwcmlvOwkJLyogTm9kZSdzIGN1cnJlbnQgcHJpb3JpdHkgKi8KKwl1MzIgdXRpbWVvdXQ7CQkvKiBUaW1lb3V0IGZvciBibG9ja2luZyBOT0RFIGNhbGxzICovCisJdTMyIGhlYXBfc2l6ZTsJCS8qIEhlYXAgU2l6ZSAqLworCXUzMiB1ZHNwX2hlYXBfdmlydF9hZGRyOwkvKiBIZWFwIFNpemUgKi8KKwl1MzIgdWdwcF9oZWFwX3ZpcnRfYWRkcjsJLyogSGVhcCBTaXplICovCisJZW51bSBub2RlX3R5cGUgbnR5cGU7CS8qIFR5cGUgb2Ygbm9kZTogbWVzc2FnZSwgdGFzaywgZXRjICovCisJZW51bSBub2RlX3N0YXRlIG5vZGVfc3RhdGU7CS8qIE5PREVfQUxMT0NBVEVELCBOT0RFX0NSRUFURUQsIC4uLiAqLworCXUzMiBudW1faW5wdXRzOwkJLyogQ3VycmVudCBudW1iZXIgb2YgaW5wdXRzICovCisJdTMyIG51bV9vdXRwdXRzOwkvKiBDdXJyZW50IG51bWJlciBvZiBvdXRwdXRzICovCisJdTMyIG1heF9pbnB1dF9pbmRleDsJLyogQ3VycmVudCBtYXggaW5wdXQgc3RyZWFtIGluZGV4ICovCisJdTMyIG1heF9vdXRwdXRfaW5kZXg7CS8qIEN1cnJlbnQgbWF4IG91dHB1dCBzdHJlYW0gaW5kZXggKi8KKwlzdHJ1Y3Qgc3RyZWFtX2NobmwgKmlucHV0czsJLyogTm9kZSdzIGlucHV0IHN0cmVhbXMgKi8KKwlzdHJ1Y3Qgc3RyZWFtX2NobmwgKm91dHB1dHM7CS8qIE5vZGUncyBvdXRwdXQgc3RyZWFtcyAqLworCXN0cnVjdCBub2RlX2NyZWF0ZWFyZ3MgY3JlYXRlX2FyZ3M7CS8qIEFyZ3MgZm9yIG5vZGUgY3JlYXRlIGZ1bmMgKi8KKwlub2RlZW52IG5vZGVfZW52OwkvKiBFbnZpcm9ubWVudCByZXR1cm5lZCBieSBSTVMgKi8KKwlzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogZGNkX3Byb3BzOwkvKiBOb2RlIHByb3BlcnRpZXMgZnJvbSBEQ0QgKi8KKwlzdHJ1Y3QgZHNwX2NiZGF0YSAqcGFyZ3M7CS8qIE9wdGlvbmFsIGFyZ3MgdG8gcGFzcyB0byBub2RlICovCisJc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyogTWFuYWdlcyByZWdpc3RlcmVkIG5vdGlmaWNhdGlvbnMgKi8KKwljaGFyICpwc3RyX2Rldl9uYW1lOwkvKiBkZXZpY2UgbmFtZSwgaWYgZGV2aWNlIG5vZGUgKi8KKwlzdHJ1Y3Qgc3luY19vYmplY3QgKnN5bmNfZG9uZTsJLyogU3luY2hyb25pemUgbm9kZV90ZXJtaW5hdGUgKi8KKwlzMzIgZXhpdF9zdGF0dXM7CS8qIGV4ZWN1dGUgZnVuY3Rpb24gcmV0dXJuIHN0YXR1cyAqLworCisJLyogSW5mb3JtYXRpb24gbmVlZGVkIGZvciBub2RlX2dldF9hdHRyKCkgKi8KKwl2b2lkICpkZXZpY2Vfb3duZXI7CS8qIElmIGRldiBub2RlLCB0YXNrIHRoYXQgb3ducyBpdCAqLworCXUzMiBudW1fZ3BwX2lucHV0czsJLyogQ3VycmVudCAjIG9mIGZyb20gR1BQIHN0cmVhbXMgKi8KKwl1MzIgbnVtX2dwcF9vdXRwdXRzOwkvKiBDdXJyZW50ICMgb2YgdG8gR1BQIHN0cmVhbXMgKi8KKwkvKiBDdXJyZW50IHN0cmVhbSBjb25uZWN0aW9ucyAqLworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RyZWFtX2Nvbm5lY3Q7CisKKwkvKiBNZXNzYWdlIHF1ZXVlICovCisJc3RydWN0IG1zZ19xdWV1ZSAqbXNnX3F1ZXVlX29iajsKKworCS8qIFRoZXNlIGZpZWxkcyB1c2VkIGZvciBTTSBtZXNzYWdpbmcgKi8KKwlzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yOwkvKiBOb2RlJ3MgU00gYWRkciB0cmFuc2xhdG9yICovCisKKwkvKiBIYW5kbGUgdG8gcGFzcyB0byBkeW5hbWljIGxvYWRlciAqLworCXN0cnVjdCBubGRyX25vZGVvYmplY3QgKm5sZHJfbm9kZV9vYmo7CisJYm9vbCBsb2FkZWQ7CQkvKiBDb2RlIGlzIChkeW5hbWljYWxseSkgbG9hZGVkICovCisJYm9vbCBwaGFzZV9zcGxpdDsJLyogUGhhc2VzIHNwbGl0IGluIG1hbnkgbGlicyBvciBvdmx5ICovCisKK307CisKKy8qIERlZmF1bHQgYnVmZmVyIGF0dHJpYnV0ZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIgbm9kZV9kZmx0YnVmYXR0cnMgPSB7CisJMCwJCQkvKiBjYl9zdHJ1Y3QgKi8KKwkxLAkJCS8qIHNlZ21lbnRfaWQgKi8KKwkwLAkJCS8qIGJ1Zl9hbGlnbm1lbnQgKi8KK307CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncik7CitzdGF0aWMgdm9pZCBmaWxsX3N0cmVhbV9jb25uZWN0KHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTEsCisJCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMiwgdTMyIHN0cmVhbTEsCisJCQkJdTMyIHN0cmVhbTIpOworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fZGVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmLAorCQkJICAgIHN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycyk7CitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbShzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgc3RydWN0IHN0cmVhbV9jaG5sIHN0cmVhbSk7CitzdGF0aWMgaW50IGdldF9meG5fYWRkcmVzcyhzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgKiBmeG5fYWRkciwKKwkJCQkgIHUzMiBwaGFzZSk7CitzdGF0aWMgaW50IGdldF9ub2RlX3Byb3BzKHN0cnVjdCBkY2RfbWFuYWdlciAqaGRjZF9tZ3IsCisJCQkJIHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkJIGNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9kZV91dWlkLAorCQkJCSBzdHJ1Y3QgZGNkX2dlbmVyaWNvYmogKmRjZF9wcm9wKTsKK3N0YXRpYyBpbnQgZ2V0X3Byb2NfcHJvcHMoc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IsCisJCQkJIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaik7CitzdGF0aWMgaW50IGdldF9ybXNfZnhucyhzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncik7CitzdGF0aWMgdTMyIG92bHkodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsIHUzMiBkc3BfbG9hZF9hZGRyLAorCQl1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKK3N0YXRpYyB1MzIgbWVtX3dyaXRlKHZvaWQgKnByaXZfcmVmLCB1MzIgZHNwX2FkZCwgdm9pZCAqcGJ1ZiwKKwkJICAgICB1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKTsKKworc3RhdGljIHUzMiByZWZzOwkJLyogbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLworCisvKiBEeW5hbWljIGxvYWRlciBmdW5jdGlvbnMuICovCitzdGF0aWMgc3RydWN0IG5vZGVfbGRyX2Z4bnMgbmxkcl9meG5zID0geworCW5sZHJfYWxsb2NhdGUsCisJbmxkcl9jcmVhdGUsCisJbmxkcl9kZWxldGUsCisJbmxkcl9leGl0LAorCW5sZHJfZ2V0X2Z4bl9hZGRyLAorCW5sZHJfaW5pdCwKKwlubGRyX2xvYWQsCisJbmxkcl91bmxvYWQsCit9OworCitlbnVtIG5vZGVfc3RhdGUgbm9kZV9nZXRfc3RhdGUodm9pZCAqaG5vZGUpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKKwlpZiAoIXBub2RlKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gcG5vZGUtPm5vZGVfc3RhdGU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9hbGxvY2F0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFsbG9jYXRlIEdQUCByZXNvdXJjZXMgdG8gbWFuYWdlIGEgbm9kZSBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9hbGxvY2F0ZShzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3IsCisJCQljb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCWNvbnN0IHN0cnVjdCBkc3BfY2JkYXRhICpwYXJncywKKwkJCWNvbnN0IHN0cnVjdCBkc3Bfbm9kZWF0dHJpbiAqYXR0cl9pbiwKKwkJCXN0cnVjdCBub2RlX3Jlc19vYmplY3QgKipub2RlcmVzLAorCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IE5VTEw7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlID0gTk9ERV9UQVNLOworCXN0cnVjdCBub2RlX21zZ2FyZ3MgKnBtc2dfYXJnczsKKwlzdHJ1Y3Qgbm9kZV90YXNrYXJncyAqcHRhc2tfYXJnczsKKwl1MzIgbnVtX3N0cmVhbXM7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGNtbV9vYmplY3QgKmhjbW1fbWdyID0gTlVMTDsJLyogU2hhcmVkIG1lbW9yeSBtYW5hZ2VyIGhuZGwgKi8KKwl1MzIgcHJvY19pZDsKKwl1MzIgcHVsX3ZhbHVlOworCXUzMiBkeW5leHRfYmFzZTsKKwl1MzIgb2ZmX3NldCA9IDA7CisJdTMyIHVsX3N0YWNrX3NlZ19hZGRyLCB1bF9zdGFja19zZWdfdmFsOworCXUzMiB1bF9ncHBfbWVtX2Jhc2U7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7CisJdTMyIG1hcHBlZF9hZGRyID0gMDsKKwl1MzIgbWFwX2F0dHJzID0gMHgwOworCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKKyNpZmRlZiBEU1BfRE1NX0RFQlVHCisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisjZW5kaWYKKworCXZvaWQgKm5vZGVfcmVzOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhwcm9jZXNzb3IgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobm9kZXJlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShub2RlX3V1aWQgIT0gTlVMTCk7CisKKwkqbm9kZXJlcyA9IE5VTEw7CisKKwlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQoaHByb2Nlc3NvciwgJnByb2NfaWQpOworCisJaWYgKHByb2NfaWQgIT0gRFNQX1VOSVQpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlzdGF0dXMgPSBwcm9jX2dldF9kZXZfb2JqZWN0KGhwcm9jZXNzb3IsICZoZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIoaGRldl9vYmosICZobm9kZV9tZ3IpOworCQlpZiAoaG5vZGVfbWdyID09IE5VTEwpCisJCQlzdGF0dXMgPSAtRVBFUk07CisKKwl9CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iaiwgJnBicmlkZ2VfY29udGV4dCk7CisJaWYgKCFwYnJpZGdlX2NvbnRleHQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisJLyogSWYgcHJvY2Vzc29yIGlzIGluIGVycm9yIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdAorCSAgIHRvIHNlbmQgdGhlIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCS8qIEFzc3VtaW5nIHRoYXQgMCBpcyBub3QgYSB2YWxpZCBmdW5jdGlvbiBhZGRyZXNzICovCisJaWYgKGhub2RlX21nci0+dWxfZnhuX2FkZHJzWzBdID09IDApIHsKKwkJLyogTm8gUk1TIG9uIHRhcmdldCAtIHdlIGN1cnJlbnRseSBjYW4ndCBoYW5kbGUgdGhpcyAqLworCQlwcl9lcnIoIiVzOiBGYWlsZWQsIG5vIFJNUyBpbiBiYXNlIGltYWdlXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwl9IGVsc2UgeworCQkvKiBWYWxpZGF0ZSBhdHRyX2luIGZpZWxkcywgaWYgbm9uLU5VTEwgKi8KKwkJaWYgKGF0dHJfaW4pIHsKKwkJCS8qIENoZWNrIGlmIGF0dHJfaW4tPnByaW8gaXMgd2l0aGluIHJhbmdlICovCisJCQlpZiAoYXR0cl9pbi0+cHJpbyA8IGhub2RlX21nci0+bWluX3ByaSB8fAorCQkJICAgIGF0dHJfaW4tPnByaW8gPiBobm9kZV9tZ3ItPm1heF9wcmkpCisJCQkJc3RhdHVzID0gLUVET007CisJCX0KKwl9CisJLyogQWxsb2NhdGUgbm9kZSBvYmplY3QgYW5kIGZpbGwgaW4gKi8KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJcG5vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAocG5vZGUgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlwbm9kZS0+aG5vZGVfbWdyID0gaG5vZGVfbWdyOworCS8qIFRoaXMgY3JpdGljYWwgc2VjdGlvbiBwcm90ZWN0cyBnZXRfbm9kZV9wcm9wcyAqLworCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisKKwkvKiBHZXQgZHNwX25kYnByb3BzIGZyb20gbm9kZSBkYXRhYmFzZSAqLworCXN0YXR1cyA9IGdldF9ub2RlX3Byb3BzKGhub2RlX21nci0+aGRjZF9tZ3IsIHBub2RlLCBub2RlX3V1aWQsCisJCQkJJihwbm9kZS0+ZGNkX3Byb3BzKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlwbm9kZS0+bm9kZV91dWlkID0gKm5vZGVfdXVpZDsKKwlwbm9kZS0+aHByb2Nlc3NvciA9IGhwcm9jZXNzb3I7CisJcG5vZGUtPm50eXBlID0gcG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMubnR5cGU7CisJcG5vZGUtPnV0aW1lb3V0ID0gcG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5uZGJfcHJvcHMudXRpbWVvdXQ7CisJcG5vZGUtPnByaW8gPSBwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy5wcmlvOworCisJLyogQ3VycmVudGx5IG9ubHkgQzY0IERTUCBidWlsZHMgc3VwcG9ydCBOb2RlIER5bmFtaWMgKiBoZWFwcyAqLworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igbm9kZSBoZWFwICovCisJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouaGVhcF9zaXplID0gMDsKKwlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciA9IDA7CisJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWRzcF9oZWFwX3Jlc19hZGRyID0gMDsKKwlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51Z3BwX2hlYXBfYWRkciA9IDA7CisJaWYgKCFhdHRyX2luKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIENoZWNrIGlmIHdlIGhhdmUgYSB1c2VyIGFsbG9jYXRlZCBub2RlIGhlYXAgKi8KKwlpZiAoIShhdHRyX2luLT5wZ3BwX3ZpcnRfYWRkcikpCisJCWdvdG8gZnVuY19jb250OworCisJLyogY2hlY2sgZm9yIHBhZ2UgYWxpZ25lZCBIZWFwIHNpemUgKi8KKwlpZiAoKChhdHRyX2luLT5oZWFwX3NpemUpICYgKFBHX1NJWkU0SyAtIDEpKSkgeworCQlwcl9lcnIoIiVzOiBub2RlIGhlYXAgc2l6ZSBub3QgYWxpZ25lZCB0byA0Sywgc2l6ZSA9IDB4JXggXG4iLAorCQkgICAgICAgX19mdW5jX18sIGF0dHJfaW4tPmhlYXBfc2l6ZSk7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouaGVhcF9zaXplID0KKwkJICAgIGF0dHJfaW4tPmhlYXBfc2l6ZTsKKwkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWdwcF9oZWFwX2FkZHIgPQorCQkgICAgKHUzMikgYXR0cl9pbi0+cGdwcF92aXJ0X2FkZHI7CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJc3RhdHVzID0gcHJvY19yZXNlcnZlX21lbW9yeShocHJvY2Vzc29yLAorCQkJCSAgICAgcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouCisJCQkJICAgICBoZWFwX3NpemUgKyBQQUdFX1NJWkUsCisJCQkJICAgICAodm9pZCAqKikmKHBub2RlLT5jcmVhdGVfYXJncy5hc2EuCisJCQkJCXRhc2tfYXJnX29iai51ZHNwX2hlYXBfcmVzX2FkZHIpLAorCQkJCSAgICAgcHJfY3R4dCk7CisJaWYgKHN0YXR1cykgeworCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgZm9yIGhlYXA6IDB4JXhcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorI2lmZGVmIERTUF9ETU1fREVCVUcKKwlzdGF0dXMgPSBkbW1fZ2V0X2hhbmRsZShwX3Byb2Nfb2JqZWN0LCAmZG1tX21ncik7CisJaWYgKCFkbW1fbWdyKSB7CisJCXN0YXR1cyA9IERTUF9FSEFORExFOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisKKwlkbW1fbWVtX21hcF9kdW1wKGRtbV9tZ3IpOworI2VuZGlmCisKKwltYXBfYXR0cnMgfD0gRFNQX01BUExJVFRMRUVORElBTjsKKwltYXBfYXR0cnMgfD0gRFNQX01BUEVMRU1TSVpFMzI7CisJbWFwX2F0dHJzIHw9IERTUF9NQVBWSVJUVUFMQUREUjsKKwlzdGF0dXMgPSBwcm9jX21hcChocHJvY2Vzc29yLCAodm9pZCAqKWF0dHJfaW4tPnBncHBfdmlydF9hZGRyLAorCQkJICBwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5oZWFwX3NpemUsCisJCQkgICh2b2lkICopcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouCisJCQkgIHVkc3BfaGVhcF9yZXNfYWRkciwgKHZvaWQgKiopJm1hcHBlZF9hZGRyLCBtYXBfYXR0cnMsCisJCQkgIHByX2N0eHQpOworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IEZhaWxlZCB0byBtYXAgbWVtb3J5IGZvciBIZWFwOiAweCV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIHN0YXR1cyk7CisJZWxzZQorCQlwbm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciA9CisJCSAgICAodTMyKSBtYXBwZWRfYWRkcjsKKworZnVuY19jb250OgorCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKwlpZiAoYXR0cl9pbiAhPSBOVUxMKSB7CisJCS8qIE92ZXJyaWRlcyBvZiBOQkQgcHJvcGVydGllcyAqLworCQlwbm9kZS0+dXRpbWVvdXQgPSBhdHRyX2luLT51dGltZW91dDsKKwkJcG5vZGUtPnByaW8gPSBhdHRyX2luLT5wcmlvOworCX0KKwkvKiBDcmVhdGUgb2JqZWN0IHRvIG1hbmFnZSBub3RpZmljYXRpb25zICovCisJaWYgKCFzdGF0dXMpIHsKKwkJcG5vZGUtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHBub2RlLT5udGZ5X29iaikKKwkJCW50ZnlfaW5pdChwbm9kZS0+bnRmeV9vYmopOworCQllbHNlCisJCQlzdGF0dXMgPSAtRU5PTUVNOworCX0KKworCWlmICghc3RhdHVzKSB7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUocG5vZGUpOworCQkvKiAgQWxsb2NhdGUgZHNwX3N0cmVhbWNvbm5lY3QgYXJyYXkgZm9yIGRldmljZSwgdGFzaywgYW5kCisJCSAqICBkYWlzIHNvY2tldCBub2Rlcy4gKi8KKwkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX01FU1NBR0UpIHsKKwkJCW51bV9zdHJlYW1zID0gTUFYX0lOUFVUUyhwbm9kZSkgKyBNQVhfT1VUUFVUUyhwbm9kZSk7CisJCQlwbm9kZS0+c3RyZWFtX2Nvbm5lY3QgPSBremFsbG9jKG51bV9zdHJlYW1zICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCksCisJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKG51bV9zdHJlYW1zID4gMCAmJiBwbm9kZS0+c3RyZWFtX2Nvbm5lY3QgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCisJCX0KKwkJaWYgKCFzdGF0dXMgJiYgKG5vZGVfdHlwZSA9PSBOT0RFX1RBU0sgfHwKKwkJCQkJICAgICAgbm9kZV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkpIHsKKwkJCS8qIEFsbG9jYXRlIGFycmF5cyBmb3IgbWFpbnRhaW5pZyBzdHJlYW0gY29ubmVjdGlvbnMgKi8KKwkJCXBub2RlLT5pbnB1dHMgPSBremFsbG9jKE1BWF9JTlBVVFMocG5vZGUpICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzdHJlYW1fY2hubCksIEdGUF9LRVJORUwpOworCQkJcG5vZGUtPm91dHB1dHMgPSBremFsbG9jKE1BWF9PVVRQVVRTKHBub2RlKSAqCisJCQkJCXNpemVvZihzdHJ1Y3Qgc3RyZWFtX2NobmwpLCBHRlBfS0VSTkVMKTsKKwkJCXB0YXNrX2FyZ3MgPSAmKHBub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqKTsKKwkJCXB0YXNrX2FyZ3MtPnN0cm1faW5fZGVmID0ga3phbGxvYyhNQVhfSU5QVVRTKHBub2RlKSAqCisJCQkJCQlzaXplb2Yoc3RydWN0IG5vZGVfc3RybWRlZiksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCXB0YXNrX2FyZ3MtPnN0cm1fb3V0X2RlZiA9IGt6YWxsb2MoTUFYX09VVFBVVFMocG5vZGUpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3Qgbm9kZV9zdHJtZGVmKSwKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJaWYgKChNQVhfSU5QVVRTKHBub2RlKSA+IDAgJiYgKHBub2RlLT5pbnB1dHMgPT0gTlVMTCB8fAorCQkJCQkJICAgICAgIHB0YXNrX2FyZ3MtPnN0cm1faW5fZGVmCisJCQkJCQkgICAgICAgPT0gTlVMTCkpCisJCQkgICAgfHwgKE1BWF9PVVRQVVRTKHBub2RlKSA+IDAKKwkJCQkmJiAocG5vZGUtPm91dHB1dHMgPT0gTlVMTAorCQkJCSAgICB8fCBwdGFza19hcmdzLT5zdHJtX291dF9kZWYgPT0gTlVMTCkpKQorCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgKG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkpIHsKKwkJLyogQ3JlYXRlIGFuIGV2ZW50IHRoYXQgd2lsbCBiZSBwb3N0ZWQgd2hlbiBSTVNfRVhJVCBpcworCQkgKiByZWNlaXZlZC4gKi8KKwkJcG5vZGUtPnN5bmNfZG9uZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCksCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocG5vZGUtPnN5bmNfZG9uZSkKKwkJCXN5bmNfaW5pdF9ldmVudChwbm9kZS0+c3luY19kb25lKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVOT01FTTsKKworCQlpZiAoIXN0YXR1cykgeworCQkJLypHZXQgdGhlIHNoYXJlZCBtZW0gbWdyIGZvciB0aGlzIG5vZGVzIGRldiBvYmplY3QgKi8KKwkJCXN0YXR1cyA9IGNtbV9nZXRfaGFuZGxlKGhwcm9jZXNzb3IsICZoY21tX21ncik7CisJCQlpZiAoIXN0YXR1cykgeworCQkJCS8qIEFsbG9jYXRlIGEgU00gYWRkciB0cmFuc2xhdG9yIGZvciB0aGlzIG5vZGUKKwkJCQkgKiB3LyBkZWZsdCBhdHRyICovCisJCQkJc3RhdHVzID0gY21tX3hsYXRvcl9jcmVhdGUoJnBub2RlLT54bGF0b3IsCisJCQkJCQkJICAgaGNtbV9tZ3IsIE5VTEwpOworCQkJfQorCQl9CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBGaWxsIGluIG1lc3NhZ2UgYXJncyAqLworCQkJaWYgKChwYXJncyAhPSBOVUxMKSAmJiAocGFyZ3MtPmNiX2RhdGEgPiAwKSkgeworCQkJCXBtc2dfYXJncyA9CisJCQkJICAgICYocG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS5ub2RlX21zZ19hcmdzKTsKKwkJCQlwbXNnX2FyZ3MtPnBkYXRhID0ga3phbGxvYyhwYXJncy0+Y2JfZGF0YSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJaWYgKHBtc2dfYXJncy0+cGRhdGEgPT0gTlVMTCkgeworCQkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCX0gZWxzZSB7CisJCQkJCXBtc2dfYXJncy0+YXJnX2xlbmd0aCA9IHBhcmdzLT5jYl9kYXRhOworCQkJCQltZW1jcHkocG1zZ19hcmdzLT5wZGF0YSwKKwkJCQkJICAgICAgIHBhcmdzLT5ub2RlX2RhdGEsCisJCQkJCSAgICAgICBwYXJncy0+Y2JfZGF0YSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKCFzdGF0dXMgJiYgbm9kZV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCS8qIENyZWF0ZSBhIG1lc3NhZ2UgcXVldWUgZm9yIHRoaXMgbm9kZSAqLworCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fbXNnX2NyZWF0ZV9xdWV1ZSkgKGhub2RlX21nci0+bXNnX21ncl9vYmosCisJCQkJCQkJJnBub2RlLT5tc2dfcXVldWVfb2JqLAorCQkJCQkJCTAsCisJCQkJCQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS4KKwkJCQkJCQlub2RlX21zZ19hcmdzLm1heF9tc2dzLAorCQkJCQkJCXBub2RlKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBDcmVhdGUgb2JqZWN0IGZvciBkeW5hbWljIGxvYWRpbmcgKi8KKworCQlzdGF0dXMgPSBobm9kZV9tZ3ItPm5sZHJfZnhucy5wZm5fYWxsb2NhdGUoaG5vZGVfbWdyLT5ubGRyX29iaiwKKwkJCQkJCQkgICAodm9pZCAqKXBub2RlLAorCQkJCQkJCSAgICZwbm9kZS0+ZGNkX3Byb3BzLgorCQkJCQkJCSAgIG9ial9kYXRhLm5vZGVfb2JqLAorCQkJCQkJCSAgICZwbm9kZS0+CisJCQkJCQkJICAgbmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgICAmcG5vZGUtPnBoYXNlX3NwbGl0KTsKKwl9CisKKwkvKiBDb21wYXJlIHZhbHVlIHJlYWQgZnJvbSBOb2RlIFByb3BlcnRpZXMgYW5kIGNoZWNrIGlmIGl0IGlzIHNhbWUgYXMKKwkgKiBTVEFDS1NFR0xBQkVMLCBpZiB5ZXMgcmVhZCB0aGUgQWRkcmVzcyBvZiBTVEFDS1NFR0xBQkVMLCBjYWxjdWxhdGUKKwkgKiBHUFAgQWRkcmVzcywgUmVhZCB0aGUgdmFsdWUgaW4gdGhhdCBhZGRyZXNzIGFuZCBvdmVycmlkZSB0aGUKKwkgKiBzdGFja19zZWcgdmFsdWUgaW4gdGFzayBhcmdzICovCisJaWYgKCFzdGF0dXMgJiYKKwkgICAgKGNoYXIgKilwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkgICAgc3RhY2tfc2VnX25hbWUgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKChjaGFyICopCisJCQkgICBwbm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wcy4KKwkJCSAgIHN0YWNrX3NlZ19uYW1lLCBTVEFDS1NFR0xBQkVMKSA9PSAwKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJICAgIHBmbl9nZXRfZnhuX2FkZHIocG5vZGUtPm5sZHJfbm9kZV9vYmosICJEWU5FWFRfQkVHIiwKKwkJCQkJICAgICAmZHluZXh0X2Jhc2UpOworCQkJaWYgKHN0YXR1cykKKwkJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gZ2V0IGFkZHIgZm9yIERZTkVYVF9CRUciCisJCQkJICAgICAgICIgc3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwkJCXN0YXR1cyA9CisJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMuCisJCQkgICAgcGZuX2dldF9meG5fYWRkcihwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJICAgICAiTDFEU1JBTV9IRUFQIiwgJnB1bF92YWx1ZSk7CisKKwkJCWlmIChzdGF0dXMpCisJCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBhZGRyIGZvciBMMURTUkFNX0hFQVAiCisJCQkJICAgICAgICIgc3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwkJCWhvc3RfcmVzID0gcGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7CisJCQlpZiAoIWhvc3RfcmVzKQorCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCXByX2VycigiJXM6IEZhaWxlZCB0byBnZXQgaG9zdCByZXNvdXJjZSwgc3RhdHVzIgorCQkJCSAgICAgICAiID0gMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQkJZ290byBmdW5jX2VuZDsKKwkJCX0KKworCQkJdWxfZ3BwX21lbV9iYXNlID0gKHUzMikgaG9zdF9yZXMtPmR3X21lbV9iYXNlWzFdOworCQkJb2ZmX3NldCA9IHB1bF92YWx1ZSAtIGR5bmV4dF9iYXNlOworCQkJdWxfc3RhY2tfc2VnX2FkZHIgPSB1bF9ncHBfbWVtX2Jhc2UgKyBvZmZfc2V0OworCQkJdWxfc3RhY2tfc2VnX3ZhbCA9IHJlYWRsKHVsX3N0YWNrX3NlZ19hZGRyKTsKKworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogU3RhY2tTZWdWYWwgPSAweCV4LCBTdGFja1NlZ0FkZHIgPSIKKwkJCQkiIDB4JXhcbiIsIF9fZnVuY19fLCB1bF9zdGFja19zZWdfdmFsLAorCQkJCXVsX3N0YWNrX3NlZ19hZGRyKTsKKworCQkJcG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmouc3RhY2tfc2VnID0KKwkJCSAgICB1bF9zdGFja19zZWdfdmFsOworCisJCX0KKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBBZGQgdGhlIG5vZGUgdG8gdGhlIG5vZGUgbWFuYWdlcidzIGxpc3Qgb2YgYWxsb2NhdGVkCisJCSAqIG5vZGVzLiAqLworCQlsc3RfaW5pdF9lbGVtKChzdHJ1Y3QgbGlzdF9oZWFkICopcG5vZGUpOworCQlOT0RFX1NFVF9TVEFURShwbm9kZSwgTk9ERV9BTExPQ0FURUQpOworCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisKKwkJbHN0X3B1dF90YWlsKGhub2RlX21nci0+bm9kZV9saXN0LCAoc3RydWN0IGxpc3RfaGVhZCAqKSBwbm9kZSk7CisJCQkrKyhobm9kZV9tZ3ItPm51bV9ub2Rlcyk7CisKKwkJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCQkvKiBQcmVzZXQgdGhpcyB0byBhc3N1bWUgcGhhc2VzIGFyZSBzcGxpdAorCQkgKiAoZm9yIG92ZXJsYXkgYW5kIGRsbCkgKi8KKwkJcG5vZGUtPnBoYXNlX3NwbGl0ID0gdHJ1ZTsKKworCQkvKiBOb3RpZnkgYWxsIGNsaWVudHMgcmVnaXN0ZXJlZCBmb3IgRFNQX05PREVTVEFURUNIQU5HRS4gKi8KKwkJcHJvY19ub3RpZnlfYWxsX2NsaWVudHMoaHByb2Nlc3NvciwgRFNQX05PREVTVEFURUNIQU5HRSk7CisJfSBlbHNlIHsKKwkJLyogQ2xlYW51cCAqLworCQlpZiAocG5vZGUpCisJCQlkZWxldGVfbm9kZShwbm9kZSwgcHJfY3R4dCk7CisKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkcnZfaW5zZXJ0X25vZGVfcmVzX2VsZW1lbnQocG5vZGUsICZub2RlX3JlcywgcHJfY3R4dCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRlbGV0ZV9ub2RlKHBub2RlLCBwcl9jdHh0KTsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQkqbm9kZXJlcyA9IChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXM7CisJCWRydl9wcm9jX25vZGVfdXBkYXRlX2hlYXBfc3RhdHVzKG5vZGVfcmVzLCB0cnVlKTsKKwkJZHJ2X3Byb2Nfbm9kZV91cGRhdGVfc3RhdHVzKG5vZGVfcmVzLCB0cnVlKTsKKwl9CisJREJDX0VOU1VSRSgoc3RhdHVzICYmICpub2RlcmVzID09IE5VTEwpIHx8ICghc3RhdHVzICYmICpub2RlcmVzKSk7CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBocHJvY2Vzc29yOiAlcCBwTm9kZUlkOiAlcCBwYXJnczogJXAgYXR0cl9pbjogJXAgIgorCQkibm9kZV9yZXM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sIGhwcm9jZXNzb3IsCisJCW5vZGVfdXVpZCwgcGFyZ3MsIGF0dHJfaW4sIG5vZGVyZXMsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2FsbG9jX21zZ19idWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBBbGxvY2F0ZXMgYnVmZmVyIGZvciB6ZXJvIGNvcHkgbWVzc2FnaW5nLgorICovCitEQkFQSSBub2RlX2FsbG9jX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIHVzaXplLAorCQkJIHN0cnVjdCBkc3BfYnVmZmVyYXR0ciAqcGF0dHIsCisJCQkgdTggKipwYnVmZmVyKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJaW50IHN0YXR1cyA9IDA7CisJYm9vbCB2YV9mbGFnID0gZmFsc2U7CisJYm9vbCBzZXRfaW5mbzsKKwl1MzIgcHJvY19pZDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwYnVmZmVyICE9IE5VTEwpOworCisJREJDX1JFUVVJUkUodXNpemUgPiAwKTsKKworCWlmICghcG5vZGUpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJZWxzZSBpZiAobm9kZV9nZXRfdHlwZShwbm9kZSkgPT0gTk9ERV9ERVZJQ0UpCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlpZiAocGF0dHIgPT0gTlVMTCkKKwkJcGF0dHIgPSAmbm9kZV9kZmx0YnVmYXR0cnM7CS8qIHNldCBkZWZhdWx0cyAqLworCisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisJaWYgKHByb2NfaWQgIT0gRFNQX1VOSVQpIHsKKwkJREJDX0FTU0VSVChOVUxMKTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogIElmIHNlZ21lbnQgSUQgaW5jbHVkZXMgTUVNX1NFVFZJUlRVQUxTRUdJRCB0aGVuIHBidWZmZXIgaXMgYQorCSAqICB2aXJ0ICBhZGRyZXNzLCBzbyBzZXQgdGhpcyBpbmZvIGluIHRoaXMgbm9kZSdzIHRyYW5zbGF0b3IKKwkgKiAgb2JqZWN0IGZvciAgZnV0dXJlIHJlZi4gSWYgTUVNX0dFVFZJUlRVQUxTRUdJRCB0aGVuIHJldHJpZXZlCisJICogIHZpcnR1YWwgYWRkcmVzcyAgZnJvbSBub2RlJ3MgdHJhbnNsYXRvci4gKi8KKwlpZiAoKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX1NFVFZJUlRVQUxTRUdJRCkgfHwKKwkgICAgKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX0dFVFZJUlRVQUxTRUdJRCkpIHsKKwkJdmFfZmxhZyA9IHRydWU7CisJCXNldF9pbmZvID0gKHBhdHRyLT5zZWdtZW50X2lkICYgTUVNX1NFVFZJUlRVQUxTRUdJRCkgPworCQkgICAgdHJ1ZSA6IGZhbHNlOworCQkvKiBDbGVhciBtYXNrIGJpdHMgKi8KKwkJcGF0dHItPnNlZ21lbnRfaWQgJj0gfk1FTV9NQVNLVklSVFVBTFNFR0lEOworCQkvKiBTZXQvZ2V0IHRoaXMgbm9kZSdzIHRyYW5zbGF0b3JzIHZpcnR1YWwgYWRkcmVzcyBiYXNlL3NpemUgKi8KKwkJc3RhdHVzID0gY21tX3hsYXRvcl9pbmZvKHBub2RlLT54bGF0b3IsIHBidWZmZXIsIHVzaXplLAorCQkJCQkgcGF0dHItPnNlZ21lbnRfaWQsIHNldF9pbmZvKTsKKwl9CisJaWYgKCFzdGF0dXMgJiYgKCF2YV9mbGFnKSkgeworCQlpZiAocGF0dHItPnNlZ21lbnRfaWQgIT0gMSkgeworCQkJLyogTm9kZSBzdXBwb3J0cyBzaW5nbGUgU00gc2VnbWVudCBvbmx5LiAqLworCQkJc3RhdHVzID0gLUVCQURSOworCQl9CisJCS8qICBBcmJpdHJhcnkgU00gYnVmZmVyIGFsaWdubWVudCBub3Qgc3VwcG9ydGVkIGZvciBob3N0IHNpZGUKKwkJICogIGFsbG9jcywgYnV0IGd1YXJhbnRlZWQgZm9yIHRoZSBmb2xsb3dpbmcgYWxpZ25tZW50CisJCSAqICB2YWx1ZXMuICovCisJCXN3aXRjaCAocGF0dHItPmJ1Zl9hbGlnbm1lbnQpIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSA0OgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBhbGlnbm1lbnQgdmFsdWUgbm90IHN1cG9ydHRlZCAqLworCQkJc3RhdHVzID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qIGFsbG9jYXRlIHBoeXNpY2FsIGJ1ZmZlciBmcm9tIHNlZ19pZCBpbiBub2RlJ3MKKwkJCSAqIHRyYW5zbGF0b3IgKi8KKwkJCSh2b2lkKWNtbV94bGF0b3JfYWxsb2NfYnVmKHBub2RlLT54bGF0b3IsIHBidWZmZXIsCisJCQkJCQkgICB1c2l6ZSk7CisJCQlpZiAoKnBidWZmZXIgPT0gTlVMTCkgeworCQkJCXByX2VycigiJXM6IGVycm9yIC0gT3V0IG9mIHNoYXJlZCBtZW1vcnlcbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJfQorCQl9CisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2NoYW5nZV9wcmlvcml0eSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYSBub2RlIGluIHRoZSBhbGxvY2F0ZWQgc3RhdGUsIG9yIHRoYXQgaXMKKyAqICAgICAgY3VycmVudGx5IHJ1bm5pbmcgb3IgcGF1c2VkIG9uIHRoZSB0YXJnZXQuCisgKi8KK2ludCBub2RlX2NoYW5nZV9wcmlvcml0eShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCBzMzIgcHJpbykKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gTlVMTDsKKwllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7CisJZW51bSBub2RlX3N0YXRlIHN0YXRlOworCWludCBzdGF0dXMgPSAwOworCXUzMiBwcm9jX2lkOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSB8fCAhaG5vZGUtPmhub2RlX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCQlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKQorCQkJc3RhdHVzID0gLUVQRVJNOworCQllbHNlIGlmIChwcmlvIDwgaG5vZGVfbWdyLT5taW5fcHJpIHx8IHByaW8gPiBobm9kZV9tZ3ItPm1heF9wcmkpCisJCQlzdGF0dXMgPSAtRURPTTsKKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7CisJaWYgKHN0YXRlID09IE5PREVfQUxMT0NBVEVEIHx8IHN0YXRlID09IE5PREVfUEFVU0VEKSB7CisJCU5PREVfU0VUX1BSSU9SSVRZKGhub2RlLCBwcmlvKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUgIT0gTk9ERV9SVU5OSU5HKSB7CisJCQlzdGF0dXMgPSAtRUJBRFI7CisJCQlnb3RvIGZ1bmNfY29udDsKKwkJfQorCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShobm9kZV9tZ3ItPmRpc3Bfb2JqLAorCQkJCQkJICAgICAgaG5vZGUsCisJCQkJCQkgICAgICBobm9kZV9tZ3ItPnVsX2Z4bl9hZGRycworCQkJCQkJICAgICAgW1JNU0NIQU5HRU5PREVQUklPUklUWV0sCisJCQkJCQkgICAgICBobm9kZS0+bm9kZV9lbnYsIHByaW8pOworCQl9CisJCWlmIChzdGF0dXMgPj0gMCkKKwkJCU5PREVfU0VUX1BSSU9SSVRZKGhub2RlLCBwcmlvKTsKKworCX0KK2Z1bmNfY29udDoKKwkvKiBMZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2Nvbm5lY3QgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDb25uZWN0IHR3byBub2RlcyBvbiB0aGUgRFNQLCBvciBhIG5vZGUgb24gdGhlIERTUCB0byB0aGUgR1BQLgorICovCitpbnQgbm9kZV9jb25uZWN0KHN0cnVjdCBub2RlX29iamVjdCAqbm9kZTEsIHUzMiBzdHJlYW0xLAorCQkJc3RydWN0IG5vZGVfb2JqZWN0ICpub2RlMiwKKwkJCXUzMiBzdHJlYW0yLCBzdHJ1Y3QgZHNwX3N0cm1hdHRyICpwYXR0cnMsCisJCQlzdHJ1Y3QgZHNwX2NiZGF0YSAqY29ubl9wYXJhbSkKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwljaGFyICpwc3RyX2Rldl9uYW1lID0gTlVMTDsKKwllbnVtIG5vZGVfdHlwZSBub2RlMV90eXBlID0gTk9ERV9UQVNLOworCWVudW0gbm9kZV90eXBlIG5vZGUyX3R5cGUgPSBOT0RFX1RBU0s7CisJc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmOworCXN0cnVjdCBub2RlX3N0cm1kZWYgKmlucHV0ID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9zdHJtZGVmICpvdXRwdXQgPSBOVUxMOworCXN0cnVjdCBub2RlX29iamVjdCAqZGV2X25vZGVfb2JqOworCXN0cnVjdCBub2RlX29iamVjdCAqaG5vZGU7CisJc3RydWN0IHN0cmVhbV9jaG5sICpwc3RyZWFtOworCXUzMiBwaXBlX2lkID0gR0JfTk9CSVRTOworCXUzMiBjaG5sX2lkID0gR0JfTk9CSVRTOworCXM4IGNobmxfbW9kZTsKKwl1MzIgZHdfbGVuZ3RoOworCWludCBzdGF0dXMgPSAwOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICgobm9kZTEgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSAmJiAhbm9kZTEpIHx8CisJICAgIChub2RlMiAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmICFub2RlMikpCisJCXN0YXR1cyA9IC1FRkFVTFQ7CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiBUaGUgdHdvIG5vZGVzIG11c3QgYmUgb24gdGhlIHNhbWUgcHJvY2Vzc29yICovCisJCWlmIChub2RlMSAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmCisJCSAgICBub2RlMiAhPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFICYmCisJCSAgICBub2RlMS0+aG5vZGVfbWdyICE9IG5vZGUyLT5obm9kZV9tZ3IpCisJCQlzdGF0dXMgPSAtRVBFUk07CisJCS8qIENhbm5vdCBjb25uZWN0IGEgbm9kZSB0byBpdHNlbGYgKi8KKwkJaWYgKG5vZGUxID09IG5vZGUyKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIG5vZGVfZ2V0X3R5cGUoKSB3aWxsIHJldHVybiBOT0RFX0dQUCBpZiBobm9kZSA9CisJCSAqIERTUF9IR1BQTk9ERS4gKi8KKwkJbm9kZTFfdHlwZSA9IG5vZGVfZ2V0X3R5cGUobm9kZTEpOworCQlub2RlMl90eXBlID0gbm9kZV9nZXRfdHlwZShub2RlMik7CisJCS8qIENoZWNrIHN0cmVhbSBpbmRpY2VzIHJhbmdlcyAqLworCQlpZiAoKG5vZGUxX3R5cGUgIT0gTk9ERV9HUFAgJiYgbm9kZTFfdHlwZSAhPSBOT0RFX0RFVklDRSAmJgorCQkgICAgIHN0cmVhbTEgPj0gTUFYX09VVFBVVFMobm9kZTEpKSB8fCAobm9kZTJfdHlwZSAhPSBOT0RFX0dQUAorCQkJCQkJCSAgJiYgbm9kZTJfdHlwZSAhPQorCQkJCQkJCSAgTk9ERV9ERVZJQ0UKKwkJCQkJCQkgICYmIHN0cmVhbTIgPj0KKwkJCQkJCQkgIE1BWF9JTlBVVFMobm9kZTIpKSkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqICBPbmx5IHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgY29ubmVjdGlvbnMgYXJlIGFsbG93ZWQ6CisJCSAqICAgICAgdGFzay9kYWlzIHNvY2tldCA8ID09ID4gdGFzay9kYWlzIHNvY2tldAorCQkgKiAgICAgIHRhc2svZGFpcyBzb2NrZXQgPCA9PSA+IGRldmljZQorCQkgKiAgICAgIHRhc2svZGFpcyBzb2NrZXQgPCA9PSA+IEdQUAorCQkgKgorCQkgKiAgaWUsIG5vIG1lc3NhZ2Ugbm9kZXMsIGFuZCBhdCBsZWFzdCBvbmUgdGFzayBvciBkYWlzCisJCSAqICBzb2NrZXQgbm9kZS4KKwkJICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfTUVTU0FHRSB8fCBub2RlMl90eXBlID09IE5PREVfTUVTU0FHRSB8fAorCQkgICAgKG5vZGUxX3R5cGUgIT0gTk9ERV9UQVNLICYmIG5vZGUxX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUICYmCisJCSAgICAgbm9kZTJfdHlwZSAhPSBOT0RFX1RBU0sgJiYgbm9kZTJfdHlwZSAhPSBOT0RFX0RBSVNTT0NLRVQpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKwkvKgorCSAqIENoZWNrIHN0cmVhbSBtb2RlLiBEZWZhdWx0IGlzIFNUUk1NT0RFX1BST0NDT1BZLgorCSAqLworCWlmICghc3RhdHVzICYmIHBhdHRycykgeworCQlpZiAocGF0dHJzLT5zdHJtX21vZGUgIT0gU1RSTU1PREVfUFJPQ0NPUFkpCisJCQlzdGF0dXMgPSAtRVBFUk07CS8qIGlsbGVnYWwgc3RyZWFtIG1vZGUgKi8KKworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKG5vZGUxX3R5cGUgIT0gTk9ERV9HUFApIHsKKwkJaG5vZGVfbWdyID0gbm9kZTEtPmhub2RlX21ncjsKKwl9IGVsc2UgeworCQlEQkNfQVNTRVJUKG5vZGUyICE9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpOworCQlobm9kZV9tZ3IgPSBub2RlMi0+aG5vZGVfbWdyOworCX0KKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCS8qIE5vZGVzIG11c3QgYmUgaW4gdGhlIGFsbG9jYXRlZCBzdGF0ZSAqLworCWlmIChub2RlMV90eXBlICE9IE5PREVfR1BQICYmIG5vZGVfZ2V0X3N0YXRlKG5vZGUxKSAhPSBOT0RFX0FMTE9DQVRFRCkKKwkJc3RhdHVzID0gLUVCQURSOworCisJaWYgKG5vZGUyX3R5cGUgIT0gTk9ERV9HUFAgJiYgbm9kZV9nZXRfc3RhdGUobm9kZTIpICE9IE5PREVfQUxMT0NBVEVEKQorCQlzdGF0dXMgPSAtRUJBRFI7CisKKwlpZiAoIXN0YXR1cykgeworCQkvKiAgQ2hlY2sgdGhhdCBzdHJlYW0gaW5kaWNlcyBmb3IgdGFzayBhbmQgZGFpcyBzb2NrZXQgbm9kZXMKKwkJICogIGFyZSBub3QgYWxyZWFkeSBiZSB1c2VkLiAoRGV2aWNlIG5vZGVzIGNoZWNrZWQgbGF0ZXIpICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJb3V0cHV0ID0KKwkJCSAgICAmKG5vZGUxLT5jcmVhdGVfYXJncy5hc2EuCisJCQkgICAgICB0YXNrX2FyZ19vYmouc3RybV9vdXRfZGVmW3N0cmVhbTFdKTsKKwkJCWlmIChvdXRwdXQtPnN6X2RldmljZSAhPSBOVUxMKQorCQkJCXN0YXR1cyA9IC1FSVNDT05OOworCisJCX0KKwkJaWYgKG5vZGUyX3R5cGUgPT0gTk9ERV9UQVNLIHx8IG5vZGUyX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQlpbnB1dCA9CisJCQkgICAgJihub2RlMi0+Y3JlYXRlX2FyZ3MuYXNhLgorCQkJICAgICAgdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW3N0cmVhbTJdKTsKKwkJCWlmIChpbnB1dC0+c3pfZGV2aWNlICE9IE5VTEwpCisJCQkJc3RhdHVzID0gLUVJU0NPTk47CisKKwkJfQorCX0KKwkvKiBDb25uZWN0aW5nIHR3byB0YXNrIG5vZGVzPyAqLworCWlmICghc3RhdHVzICYmICgobm9kZTFfdHlwZSA9PSBOT0RFX1RBU0sgfHwKKwkJCQkgICAgICAgbm9kZTFfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQpCisJCQkJICAgICAgJiYgKG5vZGUyX3R5cGUgPT0gTk9ERV9UQVNLCisJCQkJCSAgfHwgbm9kZTJfdHlwZSA9PSBOT0RFX0RBSVNTT0NLRVQpKSkgeworCQkvKiBGaW5kIGF2YWlsYWJsZSBwaXBlICovCisJCXBpcGVfaWQgPSBnYl9maW5kYW5kc2V0KGhub2RlX21nci0+cGlwZV9tYXApOworCQlpZiAocGlwZV9pZCA9PSBHQl9OT0JJVFMpIHsKKwkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJCX0gZWxzZSB7CisJCQlub2RlMS0+b3V0cHV0c1tzdHJlYW0xXS50eXBlID0gTk9ERUNPTk5FQ1Q7CisJCQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLnR5cGUgPSBOT0RFQ09OTkVDVDsKKwkJCW5vZGUxLT5vdXRwdXRzW3N0cmVhbTFdLmRldl9pZCA9IHBpcGVfaWQ7CisJCQlub2RlMi0+aW5wdXRzW3N0cmVhbTJdLmRldl9pZCA9IHBpcGVfaWQ7CisJCQlvdXRwdXQtPnN6X2RldmljZSA9IGt6YWxsb2MoUElQRU5BTUVMRU4gKyAxLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQkJaW5wdXQtPnN6X2RldmljZSA9IGt6YWxsb2MoUElQRU5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChvdXRwdXQtPnN6X2RldmljZSA9PSBOVUxMIHx8CisJCQkgICAgaW5wdXQtPnN6X2RldmljZSA9PSBOVUxMKSB7CisJCQkJLyogVW5kbyB0aGUgY29ubmVjdGlvbiAqLworCQkJCWtmcmVlKG91dHB1dC0+c3pfZGV2aWNlKTsKKworCQkJCWtmcmVlKGlucHV0LT5zel9kZXZpY2UpOworCisJCQkJb3V0cHV0LT5zel9kZXZpY2UgPSBOVUxMOworCQkJCWlucHV0LT5zel9kZXZpY2UgPSBOVUxMOworCQkJCWdiX2NsZWFyKGhub2RlX21nci0+cGlwZV9tYXAsIHBpcGVfaWQpOworCQkJCXN0YXR1cyA9IC1FTk9NRU07CisJCQl9IGVsc2UgeworCQkJCS8qIENvcHkgIi9kYnBpcGU8cGlwSWQ+IiBuYW1lIHRvIGRldmljZSBuYW1lcyAqLworCQkJCXNwcmludGYob3V0cHV0LT5zel9kZXZpY2UsICIlcyVkIiwKKwkJCQkJUElQRVBSRUZJWCwgcGlwZV9pZCk7CisJCQkJc3RyY3B5KGlucHV0LT5zel9kZXZpY2UsIG91dHB1dC0+c3pfZGV2aWNlKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBDb25uZWN0aW5nIHRhc2sgbm9kZSB0byBob3N0PyAqLworCWlmICghc3RhdHVzICYmIChub2RlMV90eXBlID09IE5PREVfR1BQIHx8CisJCQkJICAgICAgbm9kZTJfdHlwZSA9PSBOT0RFX0dQUCkpIHsKKwkJaWYgKG5vZGUxX3R5cGUgPT0gTk9ERV9HUFApIHsKKwkJCWNobmxfbW9kZSA9IENITkxfTU9ERVRPRFNQOworCQl9IGVsc2UgeworCQkJREJDX0FTU0VSVChub2RlMl90eXBlID09IE5PREVfR1BQKTsKKwkJCWNobmxfbW9kZSA9IENITkxfTU9ERUZST01EU1A7CisJCX0KKwkJLyogIFJlc2VydmUgYSBjaGFubmVsIGlkLiBXZSBuZWVkIHRvIHB1dCB0aGUgbmFtZSAiL2hvc3Q8aWQ+IgorCQkgKiAgaW4gdGhlIG5vZGUncyBjcmVhdGVfYXJncywgYnV0IHRoZSBob3N0CisJCSAqICBzaWRlIGNoYW5uZWwgd2lsbCBub3QgYmUgb3BlbmVkIHVudGlsIERTUFN0cmVhbV9PcGVuIGlzCisJCSAqICBjYWxsZWQgZm9yIHRoaXMgbm9kZS4gKi8KKwkJaWYgKHBhdHRycykgeworCQkJaWYgKHBhdHRycy0+c3RybV9tb2RlID09IFNUUk1NT0RFX1JETUEpIHsKKwkJCQljaG5sX2lkID0KKwkJCQkgICAgZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPmRtYV9jaG5sX21hcCk7CisJCQkJLyogZG1hIGNoYW5zIGFyZSAybmQgdHJhbnNwb3J0IGNobmwgc2V0CisJCQkJICogaWRzKGUuZy4gMTYtMzEpICovCisJCQkJKGNobmxfaWQgIT0gR0JfTk9CSVRTKSA/CisJCQkJICAgIChjaG5sX2lkID0KKwkJCQkgICAgIGNobmxfaWQgKworCQkJCSAgICAgaG5vZGVfbWdyLT51bF9udW1fY2hubHMpIDogY2hubF9pZDsKKwkJCX0gZWxzZSBpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfWkVST0NPUFkpIHsKKwkJCQljaG5sX2lkID0gZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPnpjX2NobmxfbWFwKTsKKwkJCQkvKiB6ZXJvLWNvcHkgY2hhbnMgYXJlIDNuZCB0cmFuc3BvcnQgc2V0CisJCQkJICogKGUuZy4gMzItNDcpICovCisJCQkJKGNobmxfaWQgIT0gR0JfTk9CSVRTKSA/IChjaG5sX2lkID0gY2hubF9pZCArCisJCQkJCQkJICAoMiAqCisJCQkJCQkJICAgaG5vZGVfbWdyLT4KKwkJCQkJCQkgICB1bF9udW1fY2hubHMpKQorCQkJCSAgICA6IGNobmxfaWQ7CisJCQl9IGVsc2UgewkvKiBtdXN0IGJlIFBST0NDT1BZICovCisJCQkJREJDX0FTU0VSVChwYXR0cnMtPnN0cm1fbW9kZSA9PQorCQkJCQkgICBTVFJNTU9ERV9QUk9DQ09QWSk7CisJCQkJY2hubF9pZCA9IGdiX2ZpbmRhbmRzZXQoaG5vZGVfbWdyLT5jaG5sX21hcCk7CisJCQkJLyogZS5nLiAwLTE1ICovCisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBkZWZhdWx0IHRvIFBST0NDT1BZICovCisJCQljaG5sX2lkID0gZ2JfZmluZGFuZHNldChobm9kZV9tZ3ItPmNobmxfbWFwKTsKKwkJfQorCQlpZiAoY2hubF9pZCA9PSBHQl9OT0JJVFMpIHsKKwkJCXN0YXR1cyA9IC1FQ09OTlJFRlVTRUQ7CisJCQlnb3RvIGZ1bmNfY29udDI7CisJCX0KKwkJcHN0cl9kZXZfbmFtZSA9IGt6YWxsb2MoSE9TVE5BTUVMRU4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHBzdHJfZGV2X25hbWUgIT0gTlVMTCkKKwkJCWdvdG8gZnVuY19jb250MjsKKworCQlpZiAocGF0dHJzKSB7CisJCQlpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfUkRNQSkgeworCQkJCWdiX2NsZWFyKGhub2RlX21nci0+ZG1hX2NobmxfbWFwLCBjaG5sX2lkIC0KKwkJCQkJIGhub2RlX21nci0+dWxfbnVtX2NobmxzKTsKKwkJCX0gZWxzZSBpZiAocGF0dHJzLT5zdHJtX21vZGUgPT0gU1RSTU1PREVfWkVST0NPUFkpIHsKKwkJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnpjX2NobmxfbWFwLCBjaG5sX2lkIC0KKwkJCQkJICgyICogaG5vZGVfbWdyLT51bF9udW1fY2hubHMpKTsKKwkJCX0gZWxzZSB7CisJCQkJREJDX0FTU0VSVChwYXR0cnMtPnN0cm1fbW9kZSA9PQorCQkJCQkgICBTVFJNTU9ERV9QUk9DQ09QWSk7CisJCQkJZ2JfY2xlYXIoaG5vZGVfbWdyLT5jaG5sX21hcCwgY2hubF9pZCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPmNobmxfbWFwLCBjaG5sX2lkKTsKKwkJfQorCQlzdGF0dXMgPSAtRU5PTUVNOworZnVuY19jb250MjoKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChub2RlMSA9PSAoc3RydWN0IG5vZGVfb2JqZWN0ICopRFNQX0hHUFBOT0RFKSB7CisJCQkJbm9kZTItPmlucHV0c1tzdHJlYW0yXS50eXBlID0gSE9TVENPTk5FQ1Q7CisJCQkJbm9kZTItPmlucHV0c1tzdHJlYW0yXS5kZXZfaWQgPSBjaG5sX2lkOworCQkJCWlucHV0LT5zel9kZXZpY2UgPSBwc3RyX2Rldl9uYW1lOworCQkJfSBlbHNlIHsKKwkJCQlub2RlMS0+b3V0cHV0c1tzdHJlYW0xXS50eXBlID0gSE9TVENPTk5FQ1Q7CisJCQkJbm9kZTEtPm91dHB1dHNbc3RyZWFtMV0uZGV2X2lkID0gY2hubF9pZDsKKwkJCQlvdXRwdXQtPnN6X2RldmljZSA9IHBzdHJfZGV2X25hbWU7CisJCQl9CisJCQlzcHJpbnRmKHBzdHJfZGV2X25hbWUsICIlcyVkIiwgSE9TVFBSRUZJWCwgY2hubF9pZCk7CisJCX0KKwl9CisJLyogQ29ubmVjdGluZyB0YXNrIG5vZGUgdG8gZGV2aWNlIG5vZGU/ICovCisJaWYgKCFzdGF0dXMgJiYgKChub2RlMV90eXBlID09IE5PREVfREVWSUNFKSB8fAorCQkJCSAgICAgIChub2RlMl90eXBlID09IE5PREVfREVWSUNFKSkpIHsKKwkJaWYgKG5vZGUyX3R5cGUgPT0gTk9ERV9ERVZJQ0UpIHsKKwkJCS8qIG5vZGUxID09ID4gZGV2aWNlICovCisJCQlkZXZfbm9kZV9vYmogPSBub2RlMjsKKwkJCWhub2RlID0gbm9kZTE7CisJCQlwc3RyZWFtID0gJihub2RlMS0+b3V0cHV0c1tzdHJlYW0xXSk7CisJCQlwc3RybV9kZWYgPSBvdXRwdXQ7CisJCX0gZWxzZSB7CisJCQkvKiBkZXZpY2UgPT0gPiBub2RlMiAqLworCQkJZGV2X25vZGVfb2JqID0gbm9kZTE7CisJCQlobm9kZSA9IG5vZGUyOworCQkJcHN0cmVhbSA9ICYobm9kZTItPmlucHV0c1tzdHJlYW0yXSk7CisJCQlwc3RybV9kZWYgPSBpbnB1dDsKKwkJfQorCQkvKiBTZXQgdXAgY3JlYXRlIGFyZ3MgKi8KKwkJcHN0cmVhbS0+dHlwZSA9IERFVklDRUNPTk5FQ1Q7CisJCWR3X2xlbmd0aCA9IHN0cmxlbihkZXZfbm9kZV9vYmotPnBzdHJfZGV2X25hbWUpOworCQlpZiAoY29ubl9wYXJhbSAhPSBOVUxMKSB7CisJCQlwc3RybV9kZWYtPnN6X2RldmljZSA9IGt6YWxsb2MoZHdfbGVuZ3RoICsgMSArCisJCQkJCQkJY29ubl9wYXJhbS0+Y2JfZGF0YSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJfSBlbHNlIHsKKwkJCXBzdHJtX2RlZi0+c3pfZGV2aWNlID0ga3phbGxvYyhkd19sZW5ndGggKyAxLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQl9CisJCWlmIChwc3RybV9kZWYtPnN6X2RldmljZSA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJLyogQ29weSBkZXZpY2UgbmFtZSAqLworCQkJc3RybmNweShwc3RybV9kZWYtPnN6X2RldmljZSwKKwkJCQlkZXZfbm9kZV9vYmotPnBzdHJfZGV2X25hbWUsIGR3X2xlbmd0aCk7CisJCQlpZiAoY29ubl9wYXJhbSAhPSBOVUxMKSB7CisJCQkJc3RybmNhdChwc3RybV9kZWYtPnN6X2RldmljZSwKKwkJCQkJKGNoYXIgKiljb25uX3BhcmFtLT5ub2RlX2RhdGEsCisJCQkJCSh1MzIpIGNvbm5fcGFyYW0tPmNiX2RhdGEpOworCQkJfQorCQkJZGV2X25vZGVfb2JqLT5kZXZpY2Vfb3duZXIgPSBobm9kZTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBGaWxsIGluIGNyZWF0ZSBhcmdzICovCisJCWlmIChub2RlMV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMV90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJbm9kZTEtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoubnVtX291dHB1dHMrKzsKKwkJCWZpbGxfc3RyZWFtX2RlZihub2RlMSwgb3V0cHV0LCBwYXR0cnMpOworCQl9CisJCWlmIChub2RlMl90eXBlID09IE5PREVfVEFTSyB8fCBub2RlMl90eXBlID09IE5PREVfREFJU1NPQ0tFVCkgeworCQkJbm9kZTItPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoubnVtX2lucHV0cysrOworCQkJZmlsbF9zdHJlYW1fZGVmKG5vZGUyLCBpbnB1dCwgcGF0dHJzKTsKKwkJfQorCQkvKiBVcGRhdGUgbm9kZTEgYW5kIG5vZGUyIHN0cmVhbV9jb25uZWN0ICovCisJCWlmIChub2RlMV90eXBlICE9IE5PREVfR1BQICYmIG5vZGUxX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCW5vZGUxLT5udW1fb3V0cHV0cysrOworCQkJaWYgKHN0cmVhbTEgPiBub2RlMS0+bWF4X291dHB1dF9pbmRleCkKKwkJCQlub2RlMS0+bWF4X291dHB1dF9pbmRleCA9IHN0cmVhbTE7CisKKwkJfQorCQlpZiAobm9kZTJfdHlwZSAhPSBOT0RFX0dQUCAmJiBub2RlMl90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQlub2RlMi0+bnVtX2lucHV0cysrOworCQkJaWYgKHN0cmVhbTIgPiBub2RlMi0+bWF4X2lucHV0X2luZGV4KQorCQkJCW5vZGUyLT5tYXhfaW5wdXRfaW5kZXggPSBzdHJlYW0yOworCisJCX0KKwkJZmlsbF9zdHJlYW1fY29ubmVjdChub2RlMSwgbm9kZTIsIHN0cmVhbTEsIHN0cmVhbTIpOworCX0KKwkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IG5vZGUxOiAlcCBzdHJlYW0xOiAlZCBub2RlMjogJXAgc3RyZWFtMjogJWQiCisJCSJwYXR0cnM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sIG5vZGUxLAorCQlzdHJlYW0xLCBub2RlMiwgc3RyZWFtMiwgcGF0dHJzLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBub2RlIG9uIHRoZSBEU1AgYnkgcmVtb3RlbHkgY2FsbGluZyB0aGUgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbi4KKyAqLworaW50IG5vZGVfY3JlYXRlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilobm9kZTsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwl1MzIgdWxfY3JlYXRlX2Z4bjsKKwllbnVtIG5vZGVfdHlwZSBub2RlX3R5cGU7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCXN0cnVjdCBkc3BfY2JkYXRhIGNiX2RhdGE7CisJdTMyIHByb2NfaWQgPSAyNTU7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJc3RydWN0IGRzcGJyaWRnZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJICAgIG9tYXBfZHNwYnJpZGdlX2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisjZW5kaWYKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoIXBub2RlKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWhwcm9jZXNzb3IgPSBobm9kZS0+aHByb2Nlc3NvcjsKKwlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisJLyogSWYgcHJvY2Vzc29yIGlzIGluIGVycm9yIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjcmVhdGUKKwkgICBuZXcgbm9kZSAqLworCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIGNyZWF0ZSBzdHJ1Y3QgZHNwX2NiZGF0YSBzdHJ1Y3QgZm9yIFBXUiBjYWxscyAqLworCWNiX2RhdGEuY2JfZGF0YSA9IFBXUl9USU1FT1VUOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJLyogR2V0IGFjY2VzcyB0byBub2RlIGRpc3BhdGNoZXIgKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCWlmIChub2RlX2dldF9zdGF0ZShobm9kZSkgIT0gTk9ERV9BTExPQ0FURUQpCisJCXN0YXR1cyA9IC1FQkFEUjsKKworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250MjsKKworCWlmIChwcm9jX2lkICE9IERTUF9VTklUKQorCQlnb3RvIGZ1bmNfY29udDI7CisKKwkvKiBNYWtlIHN1cmUgc3RyZWFtcyBhcmUgcHJvcGVybHkgY29ubmVjdGVkICovCisJaWYgKChobm9kZS0+bnVtX2lucHV0cyAmJiBobm9kZS0+bWF4X2lucHV0X2luZGV4ID4KKwkgICAgIGhub2RlLT5udW1faW5wdXRzIC0gMSkgfHwKKwkgICAgKGhub2RlLT5udW1fb3V0cHV0cyAmJiBobm9kZS0+bWF4X291dHB1dF9pbmRleCA+CisJICAgICBobm9kZS0+bnVtX291dHB1dHMgLSAxKSkKKwkJc3RhdHVzID0gLUVOT1RDT05OOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogSWYgbm9kZSdzIGNyZWF0ZSBmdW5jdGlvbiBpcyBub3QgbG9hZGVkLCBsb2FkIGl0ICovCisJCS8qIEJvb3N0IHRoZSBPUFAgbGV2ZWwgdG8gbWF4IGxldmVsIHRoYXQgRFNQIGNhbiBiZSByZXF1ZXN0ZWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDNdKTsKKyNlbmRpZgorCQlzdGF0dXMgPSBobm9kZV9tZ3ItPm5sZHJfZnhucy5wZm5fbG9hZChobm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCSAgICAgICBOTERSX0NSRUFURSk7CisJCS8qIEdldCBhZGRyZXNzIG9mIG5vZGUncyBjcmVhdGUgZnVuY3Rpb24gKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWhub2RlLT5sb2FkZWQgPSB0cnVlOworCQkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQkJCXN0YXR1cyA9IGdldF9meG5fYWRkcmVzcyhobm9kZSwgJnVsX2NyZWF0ZV9meG4sCisJCQkJCQkJIENSRUFURVBIQVNFKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByX2VycigiJXM6IGZhaWxlZCB0byBsb2FkIGNyZWF0ZSBjb2RlOiAweCV4XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMpOworCQl9CisJCS8qIFJlcXVlc3QgdGhlIGxvd2VzdCBPUFAgbGV2ZWwgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDFdKTsKKyNlbmRpZgorCQkvKiBHZXQgYWRkcmVzcyBvZiBpQWxnIGZ1bmN0aW9ucywgaWYgc29ja2V0IG5vZGUgKi8KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChub2RlX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQkJc3RhdHVzID0gaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2dldF9meG5fYWRkcgorCQkJCSAgICAoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJICAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLgorCQkJCSAgICAgcHN0cl9pX2FsZ19uYW1lLAorCQkJCSAgICAgJmhub2RlLT5jcmVhdGVfYXJncy5hc2EuCisJCQkJICAgICB0YXNrX2FyZ19vYmoudWxfZGFpc19hcmcpOworCQkJfQorCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCWlmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCXN0YXR1cyA9IGRpc3Bfbm9kZV9jcmVhdGUoaG5vZGVfbWdyLT5kaXNwX29iaiwgaG5vZGUsCisJCQkJCQkgIGhub2RlX21nci0+dWxfZnhuX2FkZHJzCisJCQkJCQkgIFtSTVNDUkVBVEVOT0RFXSwKKwkJCQkJCSAgdWxfY3JlYXRlX2Z4biwKKwkJCQkJCSAgJihobm9kZS0+Y3JlYXRlX2FyZ3MpLAorCQkJCQkJICAmKGhub2RlLT5ub2RlX2VudikpOworCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJLyogU2V0IHRoZSBtZXNzYWdlIHF1ZXVlIGlkIHRvIHRoZSBub2RlIGVudgorCQkJCSAqIHBvaW50ZXIgKi8KKwkJCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJCQkoKmludGZfZnhucy0+cGZuX21zZ19zZXRfcXVldWVfaWQpIChobm9kZS0+CisJCQkJCQkJbXNnX3F1ZXVlX29iaiwKKwkJCQkJCQlobm9kZS0+bm9kZV9lbnYpOworCQkJfQorCQl9CisJfQorCS8qICBQaGFzZSBJSS9PdmVybGF5czogQ3JlYXRlLCBleGVjdXRlLCBkZWxldGUgcGhhc2VzICBwb3NzaWJseSBpbgorCSAqICBkaWZmZXJlbnQgZmlsZXMvc2VjdGlvbnMuICovCisJaWYgKGhub2RlLT5sb2FkZWQgJiYgaG5vZGUtPnBoYXNlX3NwbGl0KSB7CisJCS8qIElmIGNyZWF0ZSBjb2RlIHdhcyBkeW5hbWljYWxseSBsb2FkZWQsIHdlIGNhbiBub3cgdW5sb2FkCisJCSAqIGl0LiAqLworCQlzdGF0dXMxID0gaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChobm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCQkgIE5MRFJfQ1JFQVRFKTsKKwkJaG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCX0KKwlpZiAoc3RhdHVzMSkKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHVubG9hZCBjcmVhdGUgY29kZTogMHgleFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzdGF0dXMxKTsKK2Z1bmNfY29udDI6CisJLyogVXBkYXRlIG5vZGUgc3RhdGUgYW5kIG5vZGUgbWFuYWdlciBzdGF0ZSAqLworCWlmIChzdGF0dXMgPj0gMCkgeworCQlOT0RFX1NFVF9TVEFURShobm9kZSwgTk9ERV9DUkVBVEVEKTsKKwkJaG5vZGVfbWdyLT5udW1fY3JlYXRlZCsrOworCQlnb3RvIGZ1bmNfY29udDsKKwl9CisJaWYgKHN0YXR1cyAhPSAtRUJBRFIpIHsKKwkJLyogUHV0IGJhY2sgaW4gTk9ERV9BTExPQ0FURUQgc3RhdGUgaWYgZXJyb3Igb2NjdXJyZWQgKi8KKwkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfQUxMT0NBVEVEKTsKKwl9CitmdW5jX2NvbnQ6CisJLyogRnJlZSBhY2Nlc3MgdG8gbm9kZSBkaXNwYXRjaGVyICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworZnVuY19lbmQ6CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBzdGF0dXM6IDB4JXhcbiIsIF9fZnVuY19fLAorCQlobm9kZSwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfY3JlYXRlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENyZWF0ZSBhIE5PREUgTWFuYWdlciBvYmplY3QuCisgKi8KK2ludCBub2RlX2NyZWF0ZV9tZ3Ioc3RydWN0IG5vZGVfbWdyICoqbm9kZV9tYW4sCisJCQkgICBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJdTMyIGk7CisJc3RydWN0IG5vZGVfbWdyICpub2RlX21ncl9vYmogPSBOVUxMOworCXN0cnVjdCBkaXNwX2F0dHIgZGlzcF9hdHRyX29iajsKKwljaGFyICpzel96bF9maWxlID0gIiI7CisJc3RydWN0IG5sZHJfYXR0cnMgbmxkcl9hdHRyc19vYmo7CisJaW50IHN0YXR1cyA9IDA7CisJdTggZGV2X3R5cGU7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKG5vZGVfbWFuICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJKm5vZGVfbWFuID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBOb2RlIG1hbmFnZXIgb2JqZWN0ICovCisJbm9kZV9tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5vZGVfbWdyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG5vZGVfbWdyX29iaikgeworCQlub2RlX21ncl9vYmotPmhkZXZfb2JqID0gaGRldl9vYmo7CisJCW5vZGVfbWdyX29iai0+bm9kZV9saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxzdF9saXN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJbm9kZV9tZ3Jfb2JqLT5waXBlX21hcCA9IGdiX2NyZWF0ZShNQVhQSVBFUyk7CisJCW5vZGVfbWdyX29iai0+cGlwZV9kb25lX21hcCA9IGdiX2NyZWF0ZShNQVhQSVBFUyk7CisJCWlmIChub2RlX21ncl9vYmotPm5vZGVfbGlzdCA9PSBOVUxMCisJCSAgICB8fCBub2RlX21ncl9vYmotPnBpcGVfbWFwID09IE5VTEwKKwkJICAgIHx8IG5vZGVfbWdyX29iai0+cGlwZV9kb25lX21hcCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJSU5JVF9MSVNUX0hFQUQoJm5vZGVfbWdyX29iai0+bm9kZV9saXN0LT5oZWFkKTsKKwkJCW5vZGVfbWdyX29iai0+bnRmeV9vYmogPSBrbWFsbG9jKAorCQkJCXNpemVvZihzdHJ1Y3QgbnRmeV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChub2RlX21ncl9vYmotPm50Znlfb2JqKQorCQkJCW50ZnlfaW5pdChub2RlX21ncl9vYmotPm50Znlfb2JqKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9CisJCW5vZGVfbWdyX29iai0+bnVtX2NyZWF0ZWQgPSAwOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfQorCS8qIGdldCBkZXZOb2RlVHlwZSAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAmZGV2X3R5cGUpOworCisJLyogQ3JlYXRlIHRoZSBEQ0QgTWFuYWdlciAqLworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9CisJCSAgICBkY2RfY3JlYXRlX21hbmFnZXIoc3pfemxfZmlsZSwgJm5vZGVfbWdyX29iai0+aGRjZF9tZ3IpOworCQlpZiAoIXN0YXR1cykKKwkJCXN0YXR1cyA9IGdldF9wcm9jX3Byb3BzKG5vZGVfbWdyX29iaiwgaGRldl9vYmopOworCisJfQorCS8qIENyZWF0ZSBOT0RFIERpc3BhdGNoZXIgKi8KKwlpZiAoIXN0YXR1cykgeworCQlkaXNwX2F0dHJfb2JqLnVsX2Nobmxfb2Zmc2V0ID0gbm9kZV9tZ3Jfb2JqLT51bF9jaG5sX29mZnNldDsKKwkJZGlzcF9hdHRyX29iai51bF9jaG5sX2J1Zl9zaXplID0gbm9kZV9tZ3Jfb2JqLT51bF9jaG5sX2J1Zl9zaXplOworCQlkaXNwX2F0dHJfb2JqLnByb2NfZmFtaWx5ID0gbm9kZV9tZ3Jfb2JqLT5wcm9jX2ZhbWlseTsKKwkJZGlzcF9hdHRyX29iai5wcm9jX3R5cGUgPSBub2RlX21ncl9vYmotPnByb2NfdHlwZTsKKwkJc3RhdHVzID0KKwkJICAgIGRpc3BfY3JlYXRlKCZub2RlX21ncl9vYmotPmRpc3Bfb2JqLCBoZGV2X29iaiwKKwkJCQkmZGlzcF9hdHRyX29iaik7CisJfQorCS8qIENyZWF0ZSBhIFNUUk0gTWFuYWdlciAqLworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBzdHJtX2NyZWF0ZSgmbm9kZV9tZ3Jfb2JqLT5zdHJtX21ncl9vYmosIGhkZXZfb2JqKTsKKworCWlmICghc3RhdHVzKSB7CisJCWRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLCAmbm9kZV9tZ3Jfb2JqLT5pbnRmX2Z4bnMpOworCQkvKiBHZXQgbXNnX2N0cmwgcXVldWUgbWFuYWdlciAqLworCQlkZXZfZ2V0X21zZ19tZ3IoaGRldl9vYmosICZub2RlX21ncl9vYmotPm1zZ19tZ3Jfb2JqKTsKKwkJbXV0ZXhfaW5pdCgmbm9kZV9tZ3Jfb2JqLT5ub2RlX21ncl9sb2NrKTsKKwkJbm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCA9IGdiX2NyZWF0ZShub2RlX21ncl9vYmotPnVsX251bV9jaG5scyk7CisJCS8qIGRtYSBjaG5sIG1hcC4gdWxfbnVtX2NobmxzIGlzICMgcGVyIHRyYW5zcG9ydCAqLworCQlub2RlX21ncl9vYmotPmRtYV9jaG5sX21hcCA9CisJCSAgICBnYl9jcmVhdGUobm9kZV9tZ3Jfb2JqLT51bF9udW1fY2hubHMpOworCQlub2RlX21ncl9vYmotPnpjX2NobmxfbWFwID0KKwkJICAgIGdiX2NyZWF0ZShub2RlX21ncl9vYmotPnVsX251bV9jaG5scyk7CisJCWlmICgobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCA9PSBOVUxMKQorCQkgICAgfHwgKG5vZGVfbWdyX29iai0+ZG1hX2NobmxfbWFwID09IE5VTEwpCisJCSAgICB8fCAobm9kZV9tZ3Jfb2JqLT56Y19jaG5sX21hcCA9PSBOVUxMKSkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCS8qIEJsb2NrIG91dCByZXNlcnZlZCBjaGFubmVscyAqLworCQkJZm9yIChpID0gMDsgaSA8IG5vZGVfbWdyX29iai0+dWxfY2hubF9vZmZzZXQ7IGkrKykKKwkJCQlnYl9zZXQobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCwgaSk7CisKKwkJCS8qIEJsb2NrIG91dCBjaGFubmVscyByZXNlcnZlZCBmb3IgUk1TICovCisJCQlnYl9zZXQobm9kZV9tZ3Jfb2JqLT5jaG5sX21hcCwKKwkJCSAgICAgICBub2RlX21ncl9vYmotPnVsX2Nobmxfb2Zmc2V0KTsKKwkJCWdiX3NldChub2RlX21ncl9vYmotPmNobmxfbWFwLAorCQkJICAgICAgIG5vZGVfbWdyX29iai0+dWxfY2hubF9vZmZzZXQgKyAxKTsKKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBOTyBSTSBTZXJ2ZXIgb24gdGhlIElWQSAqLworCQlpZiAoZGV2X3R5cGUgIT0gSVZBX1VOSVQpIHsKKwkJCS8qIEdldCBhZGRyZXNzZXMgb2YgYW55IFJNUyBmdW5jdGlvbnMgbG9hZGVkICovCisJCQlzdGF0dXMgPSBnZXRfcm1zX2Z4bnMobm9kZV9tZ3Jfb2JqKTsKKwkJfQorCX0KKworCS8qIEdldCBsb2FkZXIgZnVuY3Rpb25zIGFuZCBjcmVhdGUgbG9hZGVyICovCisJaWYgKCFzdGF0dXMpCisJCW5vZGVfbWdyX29iai0+bmxkcl9meG5zID0gbmxkcl9meG5zOwkvKiBEeW4gbG9hZGVyIGZ1bmNzICovCisKKwlpZiAoIXN0YXR1cykgeworCQlubGRyX2F0dHJzX29iai5wZm5fb3ZseSA9IG92bHk7CisJCW5sZHJfYXR0cnNfb2JqLnBmbl93cml0ZSA9IG1lbV93cml0ZTsKKwkJbmxkcl9hdHRyc19vYmoudXNfZHNwX3dvcmRfc2l6ZSA9IG5vZGVfbWdyX29iai0+dWRzcF93b3JkX3NpemU7CisJCW5sZHJfYXR0cnNfb2JqLnVzX2RzcF9tYXVfc2l6ZSA9IG5vZGVfbWdyX29iai0+dWRzcF9tYXVfc2l6ZTsKKwkJbm9kZV9tZ3Jfb2JqLT5sb2FkZXJfaW5pdCA9IG5vZGVfbWdyX29iai0+bmxkcl9meG5zLnBmbl9pbml0KCk7CisJCXN0YXR1cyA9CisJCSAgICBub2RlX21ncl9vYmotPm5sZHJfZnhucy5wZm5fY3JlYXRlKCZub2RlX21ncl9vYmotPm5sZHJfb2JqLAorCQkJCQkJICAgICAgIGhkZXZfb2JqLAorCQkJCQkJICAgICAgICZubGRyX2F0dHJzX29iaik7CisJfQorCWlmICghc3RhdHVzKQorCQkqbm9kZV9tYW4gPSBub2RlX21ncl9vYmo7CisJZWxzZQorCQlkZWxldGVfbm9kZV9tZ3Iobm9kZV9tZ3Jfb2JqKTsKKworCURCQ19FTlNVUkUoKHN0YXR1cyAmJiAqbm9kZV9tYW4gPT0gTlVMTCkgfHwgKCFzdGF0dXMgJiYgKm5vZGVfbWFuKSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZGVsZXRlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVsZXRlIGEgbm9kZSBvbiB0aGUgRFNQIGJ5IHJlbW90ZWx5IGNhbGxpbmcgdGhlIG5vZGUncyBkZWxldGUgZnVuY3Rpb24uCisgKiAgICAgIExvYWRzIHRoZSBub2RlJ3MgZGVsZXRlIGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4gRnJlZSBHUFAgc2lkZSByZXNvdXJjZXMKKyAqICAgICAgYWZ0ZXIgbm9kZSdzIGRlbGV0ZSBmdW5jdGlvbiByZXR1cm5zLgorICovCitpbnQgbm9kZV9kZWxldGUoc3RydWN0IG5vZGVfcmVzX29iamVjdCAqbm9kZXJlcywKKwkJICAgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpwbm9kZSA9IG5vZGVyZXMtPmhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZGlzcF9vYmplY3QgKmRpc3Bfb2JqOworCXUzMiB1bF9kZWxldGVfZnhuOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1czEgPSAwOworCXN0cnVjdCBkc3BfY2JkYXRhIGNiX2RhdGE7CisJdTMyIHByb2NfaWQ7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisKKwl2b2lkICpub2RlX3JlcyA9IG5vZGVyZXM7CisKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFwbm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBjcmVhdGUgc3RydWN0IGRzcF9jYmRhdGEgc3RydWN0IGZvciBQV1IgY2FsbCAqLworCWNiX2RhdGEuY2JfZGF0YSA9IFBXUl9USU1FT1VUOworCWhub2RlX21nciA9IHBub2RlLT5obm9kZV9tZ3I7CisJaHByb2Nlc3NvciA9IHBub2RlLT5ocHJvY2Vzc29yOworCWRpc3Bfb2JqID0gaG5vZGVfbWdyLT5kaXNwX29iajsKKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKHBub2RlKTsKKwlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCXN0YXRlID0gbm9kZV9nZXRfc3RhdGUocG5vZGUpOworCS8qICBFeGVjdXRlIGRlbGV0ZSBwaGFzZSBjb2RlIGZvciBub24tZGV2aWNlIG5vZGUgaW4gYWxsIGNhc2VzCisJICogIGV4Y2VwdCB3aGVuIHRoZSBub2RlIHdhcyBvbmx5IGFsbG9jYXRlZC4gRGVsZXRlIHBoYXNlIG11c3QgYmUKKwkgKiAgZXhlY3V0ZWQgZXZlbiBpZiBjcmVhdGUgcGhhc2Ugd2FzIGV4ZWN1dGVkLCBidXQgZmFpbGVkLgorCSAqICBJZiB0aGUgbm9kZSBlbnZpcm9ubWVudCBwb2ludGVyIGlzIG5vbi1OVUxMLCB0aGUgZGVsZXRlIHBoYXNlCisJICogIGNvZGUgbXVzdCBiZSAgZXhlY3V0ZWQuICovCisJaWYgKCEoc3RhdGUgPT0gTk9ERV9BTExPQ0FURUQgJiYgcG5vZGUtPm5vZGVfZW52ID09ICh1MzIpIE5VTEwpICYmCisJICAgIG5vZGVfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQlzdGF0dXMgPSBwcm9jX2dldF9wcm9jZXNzb3JfaWQocG5vZGUtPmhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19jb250MTsKKworCQlpZiAocHJvY19pZCA9PSBEU1BfVU5JVCB8fCBwcm9jX2lkID09IElWQV9VTklUKSB7CisJCQkvKiAgSWYgbm9kZSBoYXMgdGVybWluYXRlZCwgZXhlY3V0ZSBwaGFzZSBjb2RlIHdpbGwKKwkJCSAqICBoYXZlIGFscmVhZHkgYmVlbiB1bmxvYWRlZCBpbiBub2RlX29uX2V4aXQoKS4gSWYgdGhlCisJCQkgKiAgbm9kZSBpcyBQQVVTRUQsIHRoZSBleGVjdXRlIHBoYXNlIGlzIGxvYWRlZCwgYW5kIGl0CisJCQkgKiAgaXMgbm93IG9rIHRvIHVubG9hZCBpdC4gSWYgdGhlIG5vZGUgaXMgcnVubmluZywgd2UKKwkJCSAqICB3aWxsIHVubG9hZCB0aGUgZXhlY3V0ZSBwaGFzZSBvbmx5IGFmdGVyIGRlbGV0aW5nCisJCQkgKiAgdGhlIG5vZGUuICovCisJCQlpZiAoc3RhdGUgPT0gTk9ERV9QQVVTRUQgJiYgcG5vZGUtPmxvYWRlZCAmJgorCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCS8qIE9rIHRvIHVubG9hZCBleGVjdXRlIGNvZGUgYXMgbG9uZyBhcyBub2RlCisJCQkJICogaXMgbm90ICogcnVubmluZyAqLworCQkJCXN0YXR1czEgPQorCQkJCSAgICBobm9kZV9tZ3ItPm5sZHJfZnhucy4KKwkJCQkgICAgcGZuX3VubG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJICAgICAgIE5MRFJfRVhFQ1VURSk7CisJCQkJcG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCQkJCU5PREVfU0VUX1NUQVRFKHBub2RlLCBOT0RFX0RPTkUpOworCQkJfQorCQkJLyogTG9hZCBkZWxldGUgcGhhc2UgY29kZSBpZiBub3QgbG9hZGVkIG9yIGlmIGhhdmVuJ3QKKwkJCSAqICogdW5sb2FkZWQgRVhFQ1VURSBwaGFzZSAqLworCQkJaWYgKCghKHBub2RlLT5sb2FkZWQpIHx8IChzdGF0ZSA9PSBOT0RFX1JVTk5JTkcpKSAmJgorCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCXN0YXR1cyA9CisJCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJCSAgICBwZm5fbG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwgTkxEUl9ERUxFVEUpOworCQkJCWlmICghc3RhdHVzKQorCQkJCQlwbm9kZS0+bG9hZGVkID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCXByX2VycigiJXM6IGZhaWwgLSBsb2FkIGRlbGV0ZSBjb2RlOiIKKwkJCQkJICAgICAgICIgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCQl9CisJCX0KK2Z1bmNfY29udDE6CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBVbmJsb2NrIGEgdGhyZWFkIHRyeWluZyB0byB0ZXJtaW5hdGUgdGhlIG5vZGUgKi8KKwkJCSh2b2lkKXN5bmNfc2V0X2V2ZW50KHBub2RlLT5zeW5jX2RvbmUpOworCQkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCQkvKiB1bF9kZWxldGVfZnhuID0gYWRkcmVzcyBvZiBub2RlJ3MgZGVsZXRlCisJCQkJICogZnVuY3Rpb24gKi8KKwkJCQlzdGF0dXMgPSBnZXRfZnhuX2FkZHJlc3MocG5vZGUsICZ1bF9kZWxldGVfZnhuLAorCQkJCQkJCSBERUxFVEVQSEFTRSk7CisJCQl9IGVsc2UgaWYgKHByb2NfaWQgPT0gSVZBX1VOSVQpCisJCQkJdWxfZGVsZXRlX2Z4biA9ICh1MzIpIHBub2RlLT5ub2RlX2VudjsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwKKwkJCQkJCSZwcm9jX3N0YXRlLAorCQkJCQkJc2l6ZW9mKHN0cnVjdAorCQkJCQkJICAgICAgIGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCQkJCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgIT0gUFJPQ19FUlJPUikgeworCQkJCQlzdGF0dXMgPQorCQkJCQkgICAgZGlzcF9ub2RlX2RlbGV0ZShkaXNwX29iaiwgcG5vZGUsCisJCQkJCQkJICAgICBobm9kZV9tZ3ItPgorCQkJCQkJCSAgICAgdWxfZnhuX2FkZHJzCisJCQkJCQkJICAgICBbUk1TREVMRVRFTk9ERV0sCisJCQkJCQkJICAgICB1bF9kZWxldGVfZnhuLAorCQkJCQkJCSAgICAgcG5vZGUtPm5vZGVfZW52KTsKKwkJCQl9IGVsc2UKKwkJCQkJTk9ERV9TRVRfU1RBVEUocG5vZGUsIE5PREVfRE9ORSk7CisKKwkJCQkvKiBVbmxvYWQgZXhlY3V0ZSwgaWYgbm90IHVubG9hZGVkLCBhbmQgZGVsZXRlCisJCQkJICogZnVuY3Rpb24gKi8KKwkJCQlpZiAoc3RhdGUgPT0gTk9ERV9SVU5OSU5HICYmCisJCQkJICAgIHBub2RlLT5waGFzZV9zcGxpdCkgeworCQkJCQlzdGF0dXMxID0KKwkJCQkJICAgIGhub2RlX21nci0+bmxkcl9meG5zLgorCQkJCQkgICAgcGZuX3VubG9hZChwbm9kZS0+bmxkcl9ub2RlX29iaiwKKwkJCQkJCSAgICAgICBOTERSX0VYRUNVVEUpOworCQkJCX0KKwkJCQlpZiAoc3RhdHVzMSkKKwkJCQkJcHJfZXJyKCIlczogZmFpbCAtIHVubG9hZCBleGVjdXRlIGNvZGU6IgorCQkJCQkgICAgICAgIiAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMSk7CisKKwkJCQlzdGF0dXMxID0KKwkJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChwbm9kZS0+CisJCQkJCQkJICAgIG5sZHJfbm9kZV9vYmosCisJCQkJCQkJICAgIE5MRFJfREVMRVRFKTsKKwkJCQlwbm9kZS0+bG9hZGVkID0gZmFsc2U7CisJCQkJaWYgKHN0YXR1czEpCisJCQkJCXByX2VycigiJXM6IGZhaWwgLSB1bmxvYWQgZGVsZXRlIGNvZGU6ICIKKwkJCQkJICAgICAgICIweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzMSk7CisJCQl9CisJCX0KKwl9CisJLyogRnJlZSBob3N0IHNpZGUgcmVzb3VyY2VzIGV2ZW4gaWYgYSBmYWlsdXJlIG9jY3VycmVkICovCisJLyogUmVtb3ZlIG5vZGUgZnJvbSBobm9kZV9tZ3ItPm5vZGVfbGlzdCAqLworCWxzdF9yZW1vdmVfZWxlbShobm9kZV9tZ3ItPm5vZGVfbGlzdCwgKHN0cnVjdCBsaXN0X2hlYWQgKilwbm9kZSk7CisJaG5vZGVfbWdyLT5udW1fbm9kZXMtLTsKKwkvKiBEZWNyZW1lbnQgY291bnQgb2Ygbm9kZXMgY3JlYXRlZCBvbiBEU1AgKi8KKwlpZiAoKHN0YXRlICE9IE5PREVfQUxMT0NBVEVEKSB8fCAoKHN0YXRlID09IE5PREVfQUxMT0NBVEVEKSAmJgorCQkJCQkgIChwbm9kZS0+bm9kZV9lbnYgIT0gKHUzMikgTlVMTCkpKQorCQlobm9kZV9tZ3ItPm51bV9jcmVhdGVkLS07CisJLyogIEZyZWUgaG9zdC1zaWRlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgbm9kZV9jcmVhdGUoKQorCSAqICBkZWxldGVfbm9kZSgpIGZhaWxzIGlmIFNNIGJ1ZmZlcnMgbm90IGZyZWVkIGJ5IGNsaWVudCEgKi8KKwlkcnZfcHJvY19ub2RlX3VwZGF0ZV9zdGF0dXMobm9kZV9yZXMsIGZhbHNlKTsKKwlkZWxldGVfbm9kZShwbm9kZSwgcHJfY3R4dCk7CisKKwkvKgorCSAqIFJlbGVhc2UgYWxsIE5vZGUgcmVzb3VyY2VzIGFuZCBpdHMgY29udGV4dAorCSAqLworCWlkcl9yZW1vdmUocHJfY3R4dC0+bm9kZV9pZCwgKChzdHJ1Y3Qgbm9kZV9yZXNfb2JqZWN0ICopbm9kZV9yZXMpLT5pZCk7CisJa2ZyZWUobm9kZV9yZXMpOworCisJLyogRXhpdCBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCXByb2Nfbm90aWZ5X2NsaWVudHMoaHByb2Nlc3NvciwgRFNQX05PREVTVEFURUNIQU5HRSk7CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBwbm9kZTogJXAgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBwbm9kZSwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZGVsZXRlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0aGUgTk9ERSBNYW5hZ2VyLgorICovCitpbnQgbm9kZV9kZWxldGVfbWdyKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKGhub2RlX21ncikKKwkJZGVsZXRlX25vZGVfbWdyKGhub2RlX21ncik7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2VudW1fbm9kZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgY3VycmVudGx5IGFsbG9jYXRlZCBub2Rlcy4KKyAqLworaW50IG5vZGVfZW51bV9ub2RlcyhzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgdm9pZCAqKm5vZGVfdGFiLAorCQkJICAgdTMyIG5vZGVfdGFiX3NpemUsIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJICAgdTMyICpwdV9hbGxvY2F0ZWQpCit7CisJc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZTsKKwl1MzIgaTsKKwlpbnQgc3RhdHVzID0gMDsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDApOworCURCQ19SRVFVSVJFKHB1X251bV9ub2RlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9hbGxvY2F0ZWQgIT0gTlVMTCk7CisKKwlpZiAoIWhub2RlX21ncikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKworCWlmIChobm9kZV9tZ3ItPm51bV9ub2RlcyA+IG5vZGVfdGFiX3NpemUpIHsKKwkJKnB1X2FsbG9jYXRlZCA9IGhub2RlX21nci0+bnVtX25vZGVzOworCQkqcHVfbnVtX25vZGVzID0gMDsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlobm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilsc3RfZmlyc3QoaG5vZGVfbWdyLT4KKwkJCW5vZGVfbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBobm9kZV9tZ3ItPm51bV9ub2RlczsgaSsrKSB7CisJCQlEQkNfQVNTRVJUKGhub2RlKTsKKwkJCW5vZGVfdGFiW2ldID0gaG5vZGU7CisJCQlobm9kZSA9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilsc3RfbmV4dAorCQkJCShobm9kZV9tZ3ItPm5vZGVfbGlzdCwKKwkJCQkoc3RydWN0IGxpc3RfaGVhZCAqKWhub2RlKTsKKwkJfQorCQkqcHVfYWxsb2NhdGVkID0gKnB1X251bV9ub2RlcyA9IGhub2RlX21nci0+bnVtX25vZGVzOworCX0KKwkvKiBlbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgTk9ERSBtb2R1bGUuCisgKi8KK3ZvaWQgbm9kZV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IG5vZGVfZnJlZV9tc2dfYnVmID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZXMgdGhlIG1lc3NhZ2UgYnVmZmVyLgorICovCitpbnQgbm9kZV9mcmVlX21zZ19idWYoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTggKiBwYnVmZmVyLAorCQkJICAgICBzdHJ1Y3QgZHNwX2J1ZmZlcmF0dHIgKnBhdHRyKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIHByb2NfaWQ7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBidWZmZXIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG5vZGUgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG5vZGUtPnhsYXRvciAhPSBOVUxMKTsKKworCWlmICghaG5vZGUpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCWlmIChwYXR0ciA9PSBOVUxMKSB7CisJCQkJLyogc2V0IGRlZmF1bHRzICovCisJCQkJcGF0dHIgPSAmbm9kZV9kZmx0YnVmYXR0cnM7CisJCQl9CisJCQkvKiBOb2RlIHN1cHBvcnRzIHNpbmdsZSBTTSBzZWdtZW50IG9ubHkgKi8KKwkJCWlmIChwYXR0ci0+c2VnbWVudF9pZCAhPSAxKQorCQkJCXN0YXR1cyA9IC1FQkFEUjsKKworCQkJLyogcGJ1ZmZlciBpcyBjbGllbnRzIFZhLiAqLworCQkJc3RhdHVzID0gY21tX3hsYXRvcl9mcmVlX2J1Zihwbm9kZS0+eGxhdG9yLCBwYnVmZmVyKTsKKwkJfQorCX0gZWxzZSB7CisJCURCQ19BU1NFUlQoTlVMTCk7CS8qIEJVRyAqLworCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfYXR0ciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIENvcHkgdGhlIGN1cnJlbnQgYXR0cmlidXRlcyBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgaW50byBhIGRzcF9ub2RlYXR0cgorICogICAgICBzdHJ1Y3R1cmUuCisgKi8KK2ludCBub2RlX2dldF9hdHRyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgc3RydWN0IGRzcF9ub2RlYXR0ciAqcGF0dHIsIHUzMiBhdHRyX3NpemUpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBhdHRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGF0dHJfc2l6ZSA+PSBzaXplb2Yoc3RydWN0IGRzcF9ub2RlYXR0cikpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJCS8qIEVudGVyIGhub2RlX21nciBjcml0aWNhbCBzZWN0aW9uIChzaW5jZSB3ZSdyZSBhY2Nlc3NpbmcKKwkJICogZGF0YSB0aGF0IGNvdWxkIGJlIGNoYW5nZWQgYnkgbm9kZV9jaGFuZ2VfcHJpb3JpdHkoKSBhbmQKKwkJICogbm9kZV9jb25uZWN0KCkuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCXBhdHRyLT5jYl9zdHJ1Y3QgPSBzaXplb2Yoc3RydWN0IGRzcF9ub2RlYXR0cik7CisJCS8qIGRzcF9ub2RlYXR0cmluICovCisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4uY2Jfc3RydWN0ID0KKwkJCQkgc2l6ZW9mKHN0cnVjdCBkc3Bfbm9kZWF0dHJpbik7CisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4ucHJpbyA9IGhub2RlLT5wcmlvOworCQlwYXR0ci0+aW5fbm9kZV9hdHRyX2luLnV0aW1lb3V0ID0gaG5vZGUtPnV0aW1lb3V0OworCQlwYXR0ci0+aW5fbm9kZV9hdHRyX2luLmhlYXBfc2l6ZSA9CisJCQlobm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLnRhc2tfYXJnX29iai5oZWFwX3NpemU7CisJCXBhdHRyLT5pbl9ub2RlX2F0dHJfaW4ucGdwcF92aXJ0X2FkZHIgPSAodm9pZCAqKQorCQkJaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmoudWdwcF9oZWFwX2FkZHI7CisJCXBhdHRyLT5ub2RlX2F0dHJfaW5wdXRzID0gaG5vZGUtPm51bV9ncHBfaW5wdXRzOworCQlwYXR0ci0+bm9kZV9hdHRyX291dHB1dHMgPSBobm9kZS0+bnVtX2dwcF9vdXRwdXRzOworCQkvKiBkc3Bfbm9kZWluZm8gKi8KKwkJZ2V0X25vZGVfaW5mbyhobm9kZSwgJihwYXR0ci0+bm9kZV9pbmZvKSk7CisJCS8qIGVuZCBvZiBzeW5jX2VudGVyX2NzICovCisJCS8qIEV4aXQgY3JpdGljYWwgc2VjdGlvbiAqLworCQltdXRleF91bmxvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfY2hhbm5lbF9pZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEdldCB0aGUgY2hhbm5lbCBpbmRleCByZXNlcnZlZCBmb3IgYSBzdHJlYW0gY29ubmVjdGlvbiBiZXR3ZWVuIHRoZQorICogICAgICBob3N0IGFuZCBhIG5vZGUuCisgKi8KK2ludCBub2RlX2dldF9jaGFubmVsX2lkKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHUzMiBkaXIsIHUzMiBpbmRleCwKKwkJCSAgICAgICB1MzIgKmNoYW5faWQpCit7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCWludCBzdGF0dXMgPSAtRUlOVkFMOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShkaXIgPT0gRFNQX1RPTk9ERSB8fCBkaXIgPT0gRFNQX0ZST01OT0RFKTsKKwlEQkNfUkVRVUlSRShjaGFuX2lkICE9IE5VTEwpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGRpciA9PSBEU1BfVE9OT0RFKSB7CisJCWlmIChpbmRleCA8IE1BWF9JTlBVVFMoaG5vZGUpKSB7CisJCQlpZiAoaG5vZGUtPmlucHV0c1tpbmRleF0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQkJCSpjaGFuX2lkID0gaG5vZGUtPmlucHV0c1tpbmRleF0uZGV2X2lkOworCQkJCXN0YXR1cyA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlEQkNfQVNTRVJUKGRpciA9PSBEU1BfRlJPTU5PREUpOworCQlpZiAoaW5kZXggPCBNQVhfT1VUUFVUUyhobm9kZSkpIHsKKwkJCWlmIChobm9kZS0+b3V0cHV0c1tpbmRleF0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQkJCSpjaGFuX2lkID0gaG5vZGUtPm91dHB1dHNbaW5kZXhdLmRldl9pZDsKKwkJCQlzdGF0dXMgPSAwOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbWVzc2FnZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIGEgbWVzc2FnZSBmcm9tIGEgbm9kZSBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9nZXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJICAgIHN0cnVjdCBkc3BfbXNnICptZXNzYWdlLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKnRtcF9idWY7CisJc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSBwcm9jX3N0YXRlOworCXN0cnVjdCBwcm9jX29iamVjdCAqaHByb2Nlc3NvcjsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShtZXNzYWdlICE9IE5VTEwpOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlocHJvY2Vzc29yID0gaG5vZGUtPmhwcm9jZXNzb3I7CisJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQgdG8gZ2V0IHRoZQorCSAgIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFICYmIG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYKKwkgICAgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW5sZXNzIGEgbWVzc2FnZSBpcyBhdmFpbGFibGUuIFNpbmNlCisJICogIERTUE5vZGVfUmVnaXN0ZXJOb3RpZnkoKSBhbGxvd3Mgbm90aWZpY2F0aW9uIHdoZW4gYSBtZXNzYWdlCisJICogIGlzIGF2YWlsYWJsZSwgdGhlIHN5c3RlbSBjYW4gYmUgZGVzaWduZWQgc28gdGhhdAorCSAqICBEU1BOb2RlX0dldE1lc3NhZ2UoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgbWVzc2FnZSBpcworCSAqICBhdmFpbGFibGUuICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9tc2dfZ2V0KSAoaG5vZGUtPm1zZ19xdWV1ZV9vYmosIG1lc3NhZ2UsIHV0aW1lb3V0KTsKKwkvKiBDaGVjayBpZiBtZXNzYWdlIGNvbnRhaW5zIFNNIGRlc2NyaXB0b3IgKi8KKwlpZiAoc3RhdHVzIHx8ICEobWVzc2FnZS0+ZHdfY21kICYgRFNQX1JNU0JVRkRFU0MpKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogVHJhbnNsYXRlIERTUCBieXRlIGFkZHIgdG8gR1BQIFZhLiAqLworCXRtcF9idWYgPSBjbW1feGxhdG9yX3RyYW5zbGF0ZShobm9kZS0+eGxhdG9yLAorCQkJCSAgICAgICAodm9pZCAqKShtZXNzYWdlLT5kd19hcmcxICoKKwkJCQkJCWhub2RlLT5obm9kZV9tZ3ItPgorCQkJCQkJdWRzcF93b3JkX3NpemUpLCBDTU1fRFNQUEEyUEEpOworCWlmICh0bXBfYnVmICE9IE5VTEwpIHsKKwkJLyogbm93IGNvbnZlcnQgdGhpcyBHUFAgUGEgdG8gVmEgKi8KKwkJdG1wX2J1ZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKGhub2RlLT54bGF0b3IsIHRtcF9idWYsCisJCQkJCSAgICAgICBDTU1fUEEyVkEpOworCQlpZiAodG1wX2J1ZiAhPSBOVUxMKSB7CisJCQkvKiBBZGp1c3QgU00gc2l6ZSBpbiBtc2cgKi8KKwkJCW1lc3NhZ2UtPmR3X2FyZzEgPSAodTMyKSB0bXBfYnVmOworCQkJbWVzc2FnZS0+ZHdfYXJnMiAqPSBobm9kZS0+aG5vZGVfbWdyLT51ZHNwX3dvcmRfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FU1JDSDsKKwkJfQorCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FU1JDSDsKKwl9CitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgbWVzc2FnZTogJXAgdXRpbWVvdXQ6IDB4JXhcbiIsIF9fZnVuY19fLAorCQlobm9kZSwgbWVzc2FnZSwgdXRpbWVvdXQpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgID09PT09PT09IG5vZGVfZ2V0X25sZHJfb2JqID09PT09PT09CisgKi8KK2ludCBub2RlX2dldF9ubGRyX29iaihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwKKwkJCSAgICAgc3RydWN0IG5sZHJfb2JqZWN0ICoqbmxkcl9vdmx5b2JqKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBub2RlX21nciAqbm9kZV9tZ3Jfb2JqID0gaG5vZGVfbWdyOworCURCQ19SRVFVSVJFKG5sZHJfb3ZseW9iaiAhPSBOVUxMKTsKKworCWlmICghaG5vZGVfbWdyKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCWVsc2UKKwkJKm5sZHJfb3ZseW9iaiA9IG5vZGVfbWdyX29iai0+bmxkcl9vYmo7CisKKwlEQkNfRU5TVVJFKCFzdGF0dXMgfHwgKG5sZHJfb3ZseW9iaiAhPSBOVUxMICYmICpubGRyX292bHlvYmogPT0gTlVMTCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfc3RybV9tZ3IgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSBTdHJlYW0gbWFuYWdlci4KKyAqLworaW50IG5vZGVfZ2V0X3N0cm1fbWdyKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgIHN0cnVjdCBzdHJtX21nciAqKnN0cm1fbWFuKQoreworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwllbHNlCisJCSpzdHJtX21hbiA9IGhub2RlLT5obm9kZV9tZ3ItPnN0cm1fbWdyX29iajsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfbG9hZF90eXBlID09PT09PT09CisgKi8KK2VudW0gbmxkcl9sb2FkdHlwZSBub2RlX2dldF9sb2FkX3R5cGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaG5vZGUpOworCWlmICghaG5vZGUpIHsKKwkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbGVkLiBobm9kZTogJXBcbiIsIF9fZnVuY19fLCBobm9kZSk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai51c19sb2FkX3R5cGU7CisJfQorfQorCisvKgorICogID09PT09PT09IG5vZGVfZ2V0X3RpbWVvdXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXR1cm5zIHRoZSB0aW1lb3V0IHZhbHVlIGZvciB0aGlzIG5vZGUuCisgKi8KK3UzMiBub2RlX2dldF90aW1lb3V0KHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub2RlKTsKKwlpZiAoIWhub2RlKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IGZhaWxlZC4gaG5vZGU6ICVwXG4iLCBfX2Z1bmNfXywgaG5vZGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaG5vZGUtPnV0aW1lb3V0OworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2dldF90eXBlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJucyB0aGUgbm9kZSB0eXBlLgorICovCitlbnVtIG5vZGVfdHlwZSBub2RlX2dldF90eXBlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUpCit7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCisJaWYgKGhub2RlID09IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpCisJCW5vZGVfdHlwZSA9IE5PREVfR1BQOworCWVsc2UgeworCQlpZiAoIWhub2RlKQorCQkJbm9kZV90eXBlID0gLTE7CisJCWVsc2UKKwkJCW5vZGVfdHlwZSA9IGhub2RlLT5udHlwZTsKKwl9CisJcmV0dXJuIG5vZGVfdHlwZTsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBOT0RFIG1vZHVsZS4KKyAqLworYm9vbCBub2RlX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9vbl9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgR2V0cyBjYWxsZWQgd2hlbiBSTVNfRVhJVCBpcyByZWNlaXZlZCBmb3IgYSBub2RlLgorICovCit2b2lkIG5vZGVfb25fZXhpdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCBzMzIgbm9kZV9zdGF0dXMpCit7CisJaWYgKCFobm9kZSkKKwkJcmV0dXJuOworCisJLyogU2V0IG5vZGUgc3RhdGUgdG8gZG9uZSAqLworCU5PREVfU0VUX1NUQVRFKGhub2RlLCBOT0RFX0RPTkUpOworCWhub2RlLT5leGl0X3N0YXR1cyA9IG5vZGVfc3RhdHVzOworCWlmIChobm9kZS0+bG9hZGVkICYmIGhub2RlLT5waGFzZV9zcGxpdCkgeworCQkodm9pZClobm9kZS0+aG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX3VubG9hZChobm9kZS0+CisJCQkJCQkJICAgICBubGRyX25vZGVfb2JqLAorCQkJCQkJCSAgICAgTkxEUl9FWEVDVVRFKTsKKwkJaG5vZGUtPmxvYWRlZCA9IGZhbHNlOworCX0KKwkvKiBVbmJsb2NrIGNhbGwgdG8gbm9kZV90ZXJtaW5hdGUgKi8KKwkodm9pZClzeW5jX3NldF9ldmVudChobm9kZS0+c3luY19kb25lKTsKKwkvKiBOb3RpZnkgY2xpZW50cyAqLworCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCW50Znlfbm90aWZ5KGhub2RlLT5udGZ5X29iaiwgRFNQX05PREVTVEFURUNIQU5HRSk7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9wYXVzZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN1c3BlbmQgZXhlY3V0aW9uIG9mIGEgbm9kZSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUgRFNQLgorICovCitpbnQgbm9kZV9wYXVzZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCWVudW0gbm9kZV9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcHJvY19pZDsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCQlpZiAobm9kZV90eXBlICE9IE5PREVfVEFTSyAmJiBub2RlX3R5cGUgIT0gTk9ERV9EQUlTU09DS0VUKQorCQkJc3RhdHVzID0gLUVQRVJNOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisKKwlpZiAocHJvY19pZCA9PSBJVkFfVU5JVCkKKwkJc3RhdHVzID0gLUVOT1NZUzsKKworCWlmICghc3RhdHVzKSB7CisJCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisKKwkJLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLworCQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKKwkJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCQlpZiAoc3RhdGUgIT0gTk9ERV9SVU5OSU5HKQorCQkJc3RhdHVzID0gLUVCQURSOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwkJaHByb2Nlc3NvciA9IGhub2RlLT5ocHJvY2Vzc29yOworCQlzdGF0dXMgPSBwcm9jX2dldF9zdGF0ZShocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQlzaXplb2Yoc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSkpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2NvbnQ7CisJCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQKKwkJICAgdG8gc2VuZCB0aGUgbWVzc2FnZSAqLworCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisKKwkJc3RhdHVzID0gZGlzcF9ub2RlX2NoYW5nZV9wcmlvcml0eShobm9kZV9tZ3ItPmRpc3Bfb2JqLCBobm9kZSwKKwkJCWhub2RlX21nci0+dWxfZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklPUklUWV0sCisJCQlobm9kZS0+bm9kZV9lbnYsIE5PREVfU1VTUEVOREVEUFJJKTsKKworCQkvKiBVcGRhdGUgc3RhdGUgKi8KKwkJaWYgKHN0YXR1cyA+PSAwKQorCQkJTk9ERV9TRVRfU1RBVEUoaG5vZGUsIE5PREVfUEFVU0VEKTsKKworZnVuY19jb250OgorCQkvKiBFbmQgb2Ygc3luY19lbnRlcl9jcyAqLworCQkvKiBMZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisJCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKKwkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQlwcm9jX25vdGlmeV9jbGllbnRzKGhub2RlLT5ocHJvY2Vzc29yLAorCQkJCQkgICAgRFNQX05PREVTVEFURUNIQU5HRSk7CisJCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQl9CisJfQorZnVuY19lbmQ6CisJZGV2X2RiZyhicmlkZ2UsICIlczogaG5vZGU6ICVwIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgaG5vZGUsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX3B1dF9tZXNzYWdlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIG5vZGUsIHRhc2sgbm9kZSwgb3IgWERBSVMgc29ja2V0IG5vZGUuIFRoaXMKKyAqICAgICAgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgbWVzc2FnZSBzdHJlYW0gY2FuIGFjY29tbW9kYXRlIHRoZQorICogICAgICBtZXNzYWdlLCBvciBhIHRpbWVvdXQgb2NjdXJzLgorICovCitpbnQgbm9kZV9wdXRfbWVzc2FnZShzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBkc3BfbXNnICpwbXNnLCB1MzIgdXRpbWVvdXQpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJaW50IHN0YXR1cyA9IDA7CisJdm9pZCAqdG1wX2J1ZjsKKwlzdHJ1Y3QgZHNwX21zZyBuZXdfbXNnOworCXN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUgcHJvY19zdGF0ZTsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKmhwcm9jZXNzb3I7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocG1zZyAhPSBOVUxMKTsKKworCWlmICghaG5vZGUpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaHByb2Nlc3NvciA9IGhub2RlLT5ocHJvY2Vzc29yOworCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKwkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gYmFkIHN0YXRlIHRoZW4gZG9uJ3QgYXR0ZW1wdCBzZW5kaW5nIHRoZQorCSAgIG1lc3NhZ2UgKi8KKwlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCW5vZGVfdHlwZSA9IG5vZGVfZ2V0X3R5cGUoaG5vZGUpOworCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFICYmIG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYKKwkgICAgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkKKwkJc3RhdHVzID0gLUVQRVJNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogIENoZWNrIG5vZGUgc3RhdGUuIENhbid0IHNlbmQgbWVzc2FnZXMgdG8gYSBub2RlIGFmdGVyCisJCSAqICB3ZSd2ZSBzZW50IHRoZSBSTVNfRVhJVCBjb21tYW5kLiBUaGVyZSBpcyBzdGlsbCB0aGUKKwkJICogIHBvc3NpYmlsaXR5IHRoYXQgbm9kZV90ZXJtaW5hdGUgY2FuIGJlIGNhbGxlZCBhZnRlciB3ZSd2ZQorCQkgKiAgY2hlY2tlZCB0aGUgc3RhdGUuIENvdWxkIGFkZCBhbm90aGVyIFNZTkMgb2JqZWN0IHRvCisJCSAqICBwcmV2ZW50IHRoaXMgKGNhbid0IHVzZSBub2RlX21ncl9sb2NrLCBzaW5jZSB3ZSBkb24ndAorCQkgKiAgd2FudCB0byBibG9jayBvdGhlciBOT0RFIGZ1bmN0aW9ucykuIEhvd2V2ZXIsIHRoZSBub2RlIG1heQorCQkgKiAgc3RpbGwgZXhpdCBvbiBpdHMgb3duLCBiZWZvcmUgdGhpcyBtZXNzYWdlIGlzIHNlbnQuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCXN0YXRlID0gbm9kZV9nZXRfc3RhdGUoaG5vZGUpOworCQlpZiAoc3RhdGUgPT0gTk9ERV9URVJNSU5BVElORyB8fCBzdGF0ZSA9PSBOT0RFX0RPTkUpCisJCQlzdGF0dXMgPSAtRUJBRFI7CisKKwkJLyogZW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogYXNzaWduIHBtc2cgdmFsdWVzIHRvIG5ldyBtc2cgKi8KKwluZXdfbXNnID0gKnBtc2c7CisJLyogTm93LCBjaGVjayBpZiBtZXNzYWdlIGNvbnRhaW5zIGEgU00gYnVmZmVyIGRlc2NyaXB0b3IgKi8KKwlpZiAocG1zZy0+ZHdfY21kICYgRFNQX1JNU0JVRkRFU0MpIHsKKwkJLyogVHJhbnNsYXRlIEdQUCBWYSB0byBEU1AgcGh5c2ljYWwgYnVmIFB0ci4gKi8KKwkJdG1wX2J1ZiA9IGNtbV94bGF0b3JfdHJhbnNsYXRlKGhub2RlLT54bGF0b3IsCisJCQkJCSAgICAgICAodm9pZCAqKW5ld19tc2cuZHdfYXJnMSwKKwkJCQkJICAgICAgIENNTV9WQTJEU1BQQSk7CisJCWlmICh0bXBfYnVmICE9IE5VTEwpIHsKKwkJCS8qIGdvdCB0cmFuc2xhdGlvbiwgY29udmVydCB0byBNQVVzIGluIG1zZyAqLworCQkJaWYgKGhub2RlLT5obm9kZV9tZ3ItPnVkc3Bfd29yZF9zaXplICE9IDApIHsKKwkJCQluZXdfbXNnLmR3X2FyZzEgPQorCQkJCSAgICAodTMyKSB0bXBfYnVmIC8KKwkJCQkgICAgaG5vZGUtPmhub2RlX21nci0+dWRzcF93b3JkX3NpemU7CisJCQkJLyogTUFVcyAqLworCQkJCW5ld19tc2cuZHdfYXJnMiAvPSBobm9kZS0+aG5vZGVfbWdyLT4KKwkJCQkgICAgdWRzcF93b3JkX3NpemU7CisJCQl9IGVsc2UgeworCQkJCXByX2VycigiJXM6IHVkc3Bfd29yZF9zaXplIGlzIHplcm8hXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJc3RhdHVzID0gLUVQRVJNOwkvKiBiYWQgRFNQV29yZFNpemUgKi8KKwkJCX0KKwkJfSBlbHNlIHsJLyogZmFpbGVkIHRvIHRyYW5zbGF0ZSBidWZmZXIgYWRkcmVzcyAqLworCQkJc3RhdHVzID0gLUVTUkNIOworCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpIChobm9kZS0+bXNnX3F1ZXVlX29iaiwKKwkJCQkJCSAgICAmbmV3X21zZywgdXRpbWVvdXQpOworCX0KK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBwbXNnOiAlcCB1dGltZW91dDogMHgleCwgIgorCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBobm9kZSwgcG1zZywgdXRpbWVvdXQsIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBub2RlX3JlZ2lzdGVyX25vdGlmeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlZ2lzdGVyIHRvIGJlIG5vdGlmaWVkIG9uIHNwZWNpZmljIGV2ZW50cyBmb3IgdGhpcyBub2RlLgorICovCitpbnQgbm9kZV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGV2ZW50X21hc2ssCisJCQkJdTMyIG5vdGlmeV90eXBlLAorCQkJCXN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uICpobm90aWZpY2F0aW9uKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub3RpZmljYXRpb24gIT0gTlVMTCk7CisKKwlpZiAoIWhub2RlKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJLyogQ2hlY2sgaWYgZXZlbnQgbWFzayBpcyBhIHZhbGlkIG5vZGUgcmVsYXRlZCBldmVudCAqLworCQlpZiAoZXZlbnRfbWFzayAmIH4oRFNQX05PREVTVEFURUNIQU5HRSB8IERTUF9OT0RFTUVTU0FHRVJFQURZKSkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkJLyogQ2hlY2sgaWYgbm90aWZ5IHR5cGUgaXMgdmFsaWQgKi8KKwkJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwkJLyogT25seSBvbmUgTm90aWZpY2F0aW9uIGNhbiBiZSByZWdpc3RlcmVkIGF0IGEKKwkJICogdGltZSAtIExpbWl0YXRpb24gKi8KKwkJaWYgKGV2ZW50X21hc2sgPT0gKERTUF9OT0RFU1RBVEVDSEFOR0UgfCBEU1BfTk9ERU1FU1NBR0VSRUFEWSkpCisJCQlzdGF0dXMgPSAtRUlOVkFMOworCX0KKwlpZiAoIXN0YXR1cykgeworCQlpZiAoZXZlbnRfbWFzayA9PSBEU1BfTk9ERVNUQVRFQ0hBTkdFKSB7CisJCQlzdGF0dXMgPSBudGZ5X3JlZ2lzdGVyKGhub2RlLT5udGZ5X29iaiwgaG5vdGlmaWNhdGlvbiwKKwkJCQkJICAgICAgIGV2ZW50X21hc2sgJiBEU1BfTk9ERVNUQVRFQ0hBTkdFLAorCQkJCQkgICAgICAgbm90aWZ5X3R5cGUpOworCQl9IGVsc2UgeworCQkJLyogU2VuZCBNZXNzYWdlIHBhcnQgb2YgZXZlbnQgbWFzayB0byBtc2dfY3RybCAqLworCQkJaW50Zl9meG5zID0gaG5vZGUtPmhub2RlX21nci0+aW50Zl9meG5zOworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9tc2dfcmVnaXN0ZXJfbm90aWZ5KQorCQkJICAgIChobm9kZS0+bXNnX3F1ZXVlX29iaiwKKwkJCSAgICAgZXZlbnRfbWFzayAmIERTUF9OT0RFTUVTU0FHRVJFQURZLCBub3RpZnlfdHlwZSwKKwkJCSAgICAgaG5vdGlmaWNhdGlvbik7CisJCX0KKworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgZXZlbnRfbWFzazogMHgleCBub3RpZnlfdHlwZTogMHgleCAiCisJCSJobm90aWZpY2F0aW9uOiAlcCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGhub2RlLAorCQlldmVudF9tYXNrLCBub3RpZnlfdHlwZSwgaG5vdGlmaWNhdGlvbiwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IG5vZGVfcnVuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RhcnQgZXhlY3V0aW9uIG9mIGEgbm9kZSdzIGV4ZWN1dGUgcGhhc2UsIG9yIHJlc3VtZSBleGVjdXRpb24gb2YgYSBub2RlCisgKiAgICAgIHRoYXQgaGFzIGJlZW4gc3VzcGVuZGVkICh2aWEgTk9ERV9Ob2RlUGF1c2UoKSkgb24gdGhlIERTUC4gTG9hZCB0aGUKKyAqICAgICAgbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICovCitpbnQgbm9kZV9ydW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSkKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKnBub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKWhub2RlOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJdTMyIHVsX2V4ZWN1dGVfZnhuOworCXUzMiB1bF9meG5fYWRkcjsKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgcHJvY19pZDsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFobm9kZSkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlocHJvY2Vzc29yID0gaG5vZGUtPmhwcm9jZXNzb3I7CisJc3RhdHVzID0gcHJvY19nZXRfc3RhdGUoaHByb2Nlc3NvciwgJnByb2Nfc3RhdGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCS8qIElmIHByb2Nlc3NvciBpcyBpbiBlcnJvciBzdGF0ZSB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcnVuIHRoZSBub2RlICovCisJaWYgKHByb2Nfc3RhdGUucHJvY19zdGF0ZSA9PSBQUk9DX0VSUk9SKSB7CisJCXN0YXR1cyA9IC1FUEVSTTsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJbm9kZV90eXBlID0gbm9kZV9nZXRfdHlwZShobm9kZSk7CisJaWYgKG5vZGVfdHlwZSA9PSBOT0RFX0RFVklDRSkKKwkJc3RhdHVzID0gLUVQRVJNOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCWlmICghaG5vZGVfbWdyKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWludGZfZnhucyA9IGhub2RlX21nci0+aW50Zl9meG5zOworCS8qIEVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJc3RhdGUgPSBub2RlX2dldF9zdGF0ZShobm9kZSk7CisJaWYgKHN0YXRlICE9IE5PREVfQ1JFQVRFRCAmJiBzdGF0ZSAhPSBOT0RFX1BBVVNFRCkKKwkJc3RhdHVzID0gLUVCQURSOworCisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IHByb2NfZ2V0X3Byb2Nlc3Nvcl9pZChwbm9kZS0+aHByb2Nlc3NvciwgJnByb2NfaWQpOworCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQxOworCisJaWYgKChwcm9jX2lkICE9IERTUF9VTklUKSAmJiAocHJvY19pZCAhPSBJVkFfVU5JVCkpCisJCWdvdG8gZnVuY19jb250MTsKKworCWlmIChzdGF0ZSA9PSBOT0RFX0NSRUFURUQpIHsKKwkJLyogSWYgbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gaXMgbm90IGxvYWRlZCwgbG9hZCBpdCAqLworCQlpZiAoIShobm9kZS0+bG9hZGVkKSAmJiBobm9kZS0+cGhhc2Vfc3BsaXQpIHsKKwkJCXN0YXR1cyA9CisJCQkgICAgaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2xvYWQoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJCQkJICBOTERSX0VYRUNVVEUpOworCQkJaWYgKCFzdGF0dXMpIHsKKwkJCQlobm9kZS0+bG9hZGVkID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJcHJfZXJyKCIlczogZmFpbCAtIGxvYWQgZXhlY3V0ZSBjb2RlOiAweCV4XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJCX0KKwkJfQorCQlpZiAoIXN0YXR1cykgeworCQkJLyogR2V0IGFkZHJlc3Mgb2Ygbm9kZSdzIGV4ZWN1dGUgZnVuY3Rpb24gKi8KKwkJCWlmIChwcm9jX2lkID09IElWQV9VTklUKQorCQkJCXVsX2V4ZWN1dGVfZnhuID0gKHUzMikgaG5vZGUtPm5vZGVfZW52OworCQkJZWxzZSB7CisJCQkJc3RhdHVzID0gZ2V0X2Z4bl9hZGRyZXNzKGhub2RlLCAmdWxfZXhlY3V0ZV9meG4sCisJCQkJCQkJIEVYRUNVVEVQSEFTRSk7CisJCQl9CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXVsX2Z4bl9hZGRyID0gaG5vZGVfbWdyLT51bF9meG5fYWRkcnNbUk1TRVhFQ1VURU5PREVdOworCQkJc3RhdHVzID0KKwkJCSAgICBkaXNwX25vZGVfcnVuKGhub2RlX21nci0+ZGlzcF9vYmosIGhub2RlLAorCQkJCQkgIHVsX2Z4bl9hZGRyLCB1bF9leGVjdXRlX2Z4biwKKwkJCQkJICBobm9kZS0+bm9kZV9lbnYpOworCQl9CisJfSBlbHNlIGlmIChzdGF0ZSA9PSBOT0RFX1BBVVNFRCkgeworCQl1bF9meG5fYWRkciA9IGhub2RlX21nci0+dWxfZnhuX2FkZHJzW1JNU0NIQU5HRU5PREVQUklPUklUWV07CisJCXN0YXR1cyA9IGRpc3Bfbm9kZV9jaGFuZ2VfcHJpb3JpdHkoaG5vZGVfbWdyLT5kaXNwX29iaiwgaG5vZGUsCisJCQkJCQkgICB1bF9meG5fYWRkciwgaG5vZGUtPm5vZGVfZW52LAorCQkJCQkJICAgTk9ERV9HRVRfUFJJT1JJVFkoaG5vZGUpKTsKKwl9IGVsc2UgeworCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJREJDX0FTU0VSVChmYWxzZSk7CisJfQorZnVuY19jb250MToKKwkvKiBVcGRhdGUgbm9kZSBzdGF0ZS4gKi8KKwlpZiAoc3RhdHVzID49IDApCisJCU5PREVfU0VUX1NUQVRFKGhub2RlLCBOT0RFX1JVTk5JTkcpOworCWVsc2UJCQkvKiBTZXQgc3RhdGUgYmFjayB0byBwcmV2aW91cyB2YWx1ZSAqLworCQlOT0RFX1NFVF9TVEFURShobm9kZSwgc3RhdGUpOworCS8qRW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkvKiBFeGl0IGNyaXRpY2FsIHNlY3Rpb24gKi8KKwltdXRleF91bmxvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXByb2Nfbm90aWZ5X2NsaWVudHMoaG5vZGUtPmhwcm9jZXNzb3IsIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCQludGZ5X25vdGlmeShobm9kZS0+bnRmeV9vYmosIERTUF9OT0RFU1RBVEVDSEFOR0UpOworCX0KK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIGhub2RlLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV90ZXJtaW5hdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTaWduYWwgYSBub2RlIHJ1bm5pbmcgb24gdGhlIERTUCB0aGF0IGl0IHNob3VsZCBleGl0IGl0cyBleGVjdXRlIHBoYXNlCisgKiAgICAgIGZ1bmN0aW9uLgorICovCitpbnQgbm9kZV90ZXJtaW5hdGUoc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgaW50ICpwc3RhdHVzKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqcG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopaG5vZGU7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZTsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwllbnVtIG5vZGVfc3RhdGUgc3RhdGU7CisJc3RydWN0IGRzcF9tc2cgbXNnLCBraWxsbXNnOworCWludCBzdGF0dXMgPSAwOworCXUzMiBwcm9jX2lkLCBraWxsX3RpbWVfb3V0OworCXN0cnVjdCBkZWhfbWdyICpoZGVoX21ncjsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocHN0YXR1cyAhPSBOVUxMKTsKKworCWlmICghaG5vZGUgfHwgIWhub2RlLT5obm9kZV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJaWYgKHBub2RlLT5ocHJvY2Vzc29yID09IE5VTEwpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19pZCk7CisKKwlpZiAoIXN0YXR1cykgeworCQlobm9kZV9tZ3IgPSBobm9kZS0+aG5vZGVfbWdyOworCQlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwkJaWYgKG5vZGVfdHlwZSAhPSBOT0RFX1RBU0sgJiYgbm9kZV90eXBlICE9IE5PREVfREFJU1NPQ0tFVCkKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQ2hlY2sgbm9kZSBzdGF0ZSAqLworCQltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlzdGF0ZSA9IG5vZGVfZ2V0X3N0YXRlKGhub2RlKTsKKwkJaWYgKHN0YXRlICE9IE5PREVfUlVOTklORykgeworCQkJc3RhdHVzID0gLUVCQURSOworCQkJLyogU2V0IHRoZSBleGl0IHN0YXR1cyBpZiBub2RlIHRlcm1pbmF0ZWQgb24KKwkJCSAqIGl0cyBvd24uICovCisJCQlpZiAoc3RhdGUgPT0gTk9ERV9ET05FKQorCQkJCSpwc3RhdHVzID0gaG5vZGUtPmV4aXRfc3RhdHVzOworCisJCX0gZWxzZSB7CisJCQlOT0RFX1NFVF9TVEFURShobm9kZSwgTk9ERV9URVJNSU5BVElORyk7CisJCX0KKwkJLyogZW5kIG9mIHN5bmNfZW50ZXJfY3MgKi8KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKgorCQkgKiAgU2VuZCBleGl0IG1lc3NhZ2UuIERvIG5vdCBjaGFuZ2Ugc3RhdGUgdG8gTk9ERV9ET05FCisJCSAqICBoZXJlLiBUaGF0IHdpbGwgYmUgZG9uZSBpbiBjYWxsYmFjay4KKwkJICovCisJCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKHBub2RlLT5ocHJvY2Vzc29yLCAmcHJvY19zdGF0ZSwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBkc3BfcHJvY2Vzc29yc3RhdGUpKTsKKwkJaWYgKHN0YXR1cykKKwkJCWdvdG8gZnVuY19jb250OworCQkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHNlbmQKKwkJICogQSBraWxsIHRhc2sgY29tbWFuZCAqLworCQlpZiAocHJvY19zdGF0ZS5wcm9jX3N0YXRlID09IFBST0NfRVJST1IpIHsKKwkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCWdvdG8gZnVuY19jb250OworCQl9CisKKwkJbXNnLmR3X2NtZCA9IFJNU19FWElUOworCQltc2cuZHdfYXJnMSA9IGhub2RlLT5ub2RlX2VudjsKKwkJa2lsbG1zZy5kd19jbWQgPSBSTVNfS0lMTFRBU0s7CisJCWtpbGxtc2cuZHdfYXJnMSA9IGhub2RlLT5ub2RlX2VudjsKKwkJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisKKwkJaWYgKGhub2RlLT51dGltZW91dCA+IE1BWFRJTUVPVVQpCisJCQlraWxsX3RpbWVfb3V0ID0gTUFYVElNRU9VVDsKKwkJZWxzZQorCQkJa2lsbF90aW1lX291dCA9IChobm9kZS0+dXRpbWVvdXQpICogMjsKKworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpIChobm9kZS0+bXNnX3F1ZXVlX29iaiwgJm1zZywKKwkJCQkJCSAgICBobm9kZS0+dXRpbWVvdXQpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBmdW5jX2NvbnQ7CisKKwkJLyoKKwkJICogV2FpdCBvbiBzeW5jaHJvbml6YXRpb24gb2JqZWN0IHRoYXQgd2lsbCBiZQorCQkgKiBwb3N0ZWQgaW4gdGhlIGNhbGxiYWNrIG9uIHJlY2VpdmluZyBSTVNfRVhJVAorCQkgKiBtZXNzYWdlLCBvciBieSBub2RlX2RlbGV0ZS4gQ2hlY2sgZm9yIHZhbGlkIGhub2RlLAorCQkgKiBpbiBjYXNlIHBvc3RlZCBieSBub2RlX2RlbGV0ZSgpLgorCQkgKi8KKwkJc3RhdHVzID0gc3luY193YWl0X29uX2V2ZW50KGhub2RlLT5zeW5jX2RvbmUsCisJCQkJCSAgICBraWxsX3RpbWVfb3V0IC8gMik7CisJCWlmIChzdGF0dXMgIT0gRVRJTUUpCisJCQlnb3RvIGZ1bmNfY29udDsKKworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX21zZ19wdXQpKGhub2RlLT5tc2dfcXVldWVfb2JqLAorCQkJCQkJJmtpbGxtc2csIGhub2RlLT51dGltZW91dCk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZ1bmNfY29udDsKKwkJc3RhdHVzID0gc3luY193YWl0X29uX2V2ZW50KGhub2RlLT5zeW5jX2RvbmUsCisJCQkJCSAgICAga2lsbF90aW1lX291dCAvIDIpOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKgorCQkJICogSGVyZSBpdCBnb2VzIHRoZSBwYXJ0IG9mIHRoZSBzaW11bGF0aW9uIG9mCisJCQkgKiB0aGUgRFNQIGV4Y2VwdGlvbi4KKwkJCSAqLworCQkJZGV2X2dldF9kZWhfbWdyKGhub2RlX21nci0+aGRldl9vYmosICZoZGVoX21ncik7CisJCQlpZiAoIWhkZWhfbWdyKQorCQkJCWdvdG8gZnVuY19jb250OworCisJCQlicmlkZ2VfZGVoX25vdGlmeShoZGVoX21nciwgRFNQX1NZU0VSUk9SLCBEU1BfRVhDRVBUSU9OQUJPUlQpOworCQl9CisJfQorZnVuY19jb250OgorCWlmICghc3RhdHVzKSB7CisJCS8qIEVudGVyIENTIGJlZm9yZSBnZXR0aW5nIGV4aXQgc3RhdHVzLCBpbiBjYXNlIG5vZGUgd2FzCisJCSAqIGRlbGV0ZWQuICovCisJCW11dGV4X2xvY2soJmhub2RlX21nci0+bm9kZV9tZ3JfbG9jayk7CisJCS8qIE1ha2Ugc3VyZSBub2RlIHdhc24ndCBkZWxldGVkIHdoaWxlIHdlIGJsb2NrZWQgKi8KKwkJaWYgKCFobm9kZSkgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJKnBzdGF0dXMgPSBobm9kZS0+ZXhpdF9zdGF0dXM7CisJCQlkZXZfZGJnKGJyaWRnZSwgIiVzOiBobm9kZTogJXAgZW52IDB4JXggc3RhdHVzIDB4JXhcbiIsCisJCQkJX19mdW5jX18sIGhub2RlLCBobm9kZS0+bm9kZV9lbnYsIHN0YXR1cyk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCX0JCQkvKkVuZCBvZiBzeW5jX2VudGVyX2NzICovCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRnJlZSBHUFAgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBub2RlX2FsbG9jYXRlKCkgb3Igbm9kZV9jb25uZWN0KCkuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXN0cnVjdCBjbW1feGxhdG9yb2JqZWN0ICp4bGF0b3I7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJdTMyIGk7CisJZW51bSBub2RlX3R5cGUgbm9kZV90eXBlOworCXN0cnVjdCBzdHJlYW1fY2hubCBzdHJlYW07CisJc3RydWN0IG5vZGVfbXNnYXJncyBub2RlX21zZ19hcmdzOworCXN0cnVjdCBub2RlX3Rhc2thcmdzIHRhc2tfYXJnX29iajsKKyNpZmRlZiBEU1BfRE1NX0RFQlVHCisJc3RydWN0IGRtbV9vYmplY3QgKmRtbV9tZ3I7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0KKwkgICAgKHN0cnVjdCBwcm9jX29iamVjdCAqKWhub2RlLT5ocHJvY2Vzc29yOworI2VuZGlmCisJaW50IHN0YXR1czsKKwlpZiAoIWhub2RlKQorCQlnb3RvIGZ1bmNfZW5kOworCWhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaWYgKCFobm9kZV9tZ3IpCisJCWdvdG8gZnVuY19lbmQ7CisJeGxhdG9yID0gaG5vZGUtPnhsYXRvcjsKKwlub2RlX3R5cGUgPSBub2RlX2dldF90eXBlKGhub2RlKTsKKwlpZiAobm9kZV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCW5vZGVfbXNnX2FyZ3MgPSBobm9kZS0+Y3JlYXRlX2FyZ3MuYXNhLm5vZGVfbXNnX2FyZ3M7CisJCWtmcmVlKG5vZGVfbXNnX2FyZ3MucGRhdGEpOworCisJCS8qIEZyZWUgbXNnX2N0cmwgcXVldWUgKi8KKwkJaWYgKGhub2RlLT5tc2dfcXVldWVfb2JqKSB7CisJCQlpbnRmX2Z4bnMgPSBobm9kZV9tZ3ItPmludGZfZnhuczsKKwkJCSgqaW50Zl9meG5zLT5wZm5fbXNnX2RlbGV0ZV9xdWV1ZSkgKGhub2RlLT4KKwkJCQkJCQkgICAgbXNnX3F1ZXVlX29iaik7CisJCQlobm9kZS0+bXNnX3F1ZXVlX29iaiA9IE5VTEw7CisJCX0KKworCQlrZnJlZShobm9kZS0+c3luY19kb25lKTsKKworCQkvKiBGcmVlIGFsbCBzdHJlYW0gaW5mbyAqLworCQlpZiAoaG5vZGUtPmlucHV0cykgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9JTlBVVFMoaG5vZGUpOyBpKyspIHsKKwkJCQlzdHJlYW0gPSBobm9kZS0+aW5wdXRzW2ldOworCQkJCWZyZWVfc3RyZWFtKGhub2RlX21nciwgc3RyZWFtKTsKKwkJCX0KKwkJCWtmcmVlKGhub2RlLT5pbnB1dHMpOworCQkJaG5vZGUtPmlucHV0cyA9IE5VTEw7CisJCX0KKwkJaWYgKGhub2RlLT5vdXRwdXRzKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX09VVFBVVFMoaG5vZGUpOyBpKyspIHsKKwkJCQlzdHJlYW0gPSBobm9kZS0+b3V0cHV0c1tpXTsKKwkJCQlmcmVlX3N0cmVhbShobm9kZV9tZ3IsIHN0cmVhbSk7CisJCQl9CisJCQlrZnJlZShobm9kZS0+b3V0cHV0cyk7CisJCQlobm9kZS0+b3V0cHV0cyA9IE5VTEw7CisJCX0KKwkJdGFza19hcmdfb2JqID0gaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS50YXNrX2FyZ19vYmo7CisJCWlmICh0YXNrX2FyZ19vYmouc3RybV9pbl9kZWYpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBNQVhfSU5QVVRTKGhub2RlKTsgaSsrKSB7CisJCQkJa2ZyZWUodGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldLnN6X2RldmljZSk7CisJCQkJdGFza19hcmdfb2JqLnN0cm1faW5fZGVmW2ldLnN6X2RldmljZSA9IE5VTEw7CisJCQl9CisJCQlrZnJlZSh0YXNrX2FyZ19vYmouc3RybV9pbl9kZWYpOworCQkJdGFza19hcmdfb2JqLnN0cm1faW5fZGVmID0gTlVMTDsKKwkJfQorCQlpZiAodGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZikgeworCQkJZm9yIChpID0gMDsgaSA8IE1BWF9PVVRQVVRTKGhub2RlKTsgaSsrKSB7CisJCQkJa2ZyZWUodGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZltpXS5zel9kZXZpY2UpOworCQkJCXRhc2tfYXJnX29iai5zdHJtX291dF9kZWZbaV0uc3pfZGV2aWNlID0gTlVMTDsKKwkJCX0KKwkJCWtmcmVlKHRhc2tfYXJnX29iai5zdHJtX291dF9kZWYpOworCQkJdGFza19hcmdfb2JqLnN0cm1fb3V0X2RlZiA9IE5VTEw7CisJCX0KKwkJaWYgKHRhc2tfYXJnX29iai51ZHNwX2hlYXBfcmVzX2FkZHIpIHsKKwkJCXN0YXR1cyA9IHByb2NfdW5fbWFwKGhub2RlLT5ocHJvY2Vzc29yLCAodm9pZCAqKQorCQkJCQkgICAgIHRhc2tfYXJnX29iai51ZHNwX2hlYXBfYWRkciwKKwkJCQkJICAgICBwcl9jdHh0KTsKKworCQkJc3RhdHVzID0gcHJvY191bl9yZXNlcnZlX21lbW9yeShobm9kZS0+aHByb2Nlc3NvciwKKwkJCQkJCQkodm9pZCAqKQorCQkJCQkJCXRhc2tfYXJnX29iai4KKwkJCQkJCQl1ZHNwX2hlYXBfcmVzX2FkZHIsCisJCQkJCQkJcHJfY3R4dCk7CisjaWZkZWYgRFNQX0RNTV9ERUJVRworCQkJc3RhdHVzID0gZG1tX2dldF9oYW5kbGUocF9wcm9jX29iamVjdCwgJmRtbV9tZ3IpOworCQkJaWYgKGRtbV9tZ3IpCisJCQkJZG1tX21lbV9tYXBfZHVtcChkbW1fbWdyKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBEU1BfRUhBTkRMRTsKKyNlbmRpZgorCQl9CisJfQorCWlmIChub2RlX3R5cGUgIT0gTk9ERV9NRVNTQUdFKSB7CisJCWtmcmVlKGhub2RlLT5zdHJlYW1fY29ubmVjdCk7CisJCWhub2RlLT5zdHJlYW1fY29ubmVjdCA9IE5VTEw7CisJfQorCWtmcmVlKGhub2RlLT5wc3RyX2Rldl9uYW1lKTsKKwlobm9kZS0+cHN0cl9kZXZfbmFtZSA9IE5VTEw7CisKKwlpZiAoaG5vZGUtPm50Znlfb2JqKSB7CisJCW50ZnlfZGVsZXRlKGhub2RlLT5udGZ5X29iaik7CisJCWtmcmVlKGhub2RlLT5udGZ5X29iaik7CisJCWhub2RlLT5udGZ5X29iaiA9IE5VTEw7CisJfQorCisJLyogVGhlc2Ugd2VyZSBhbGxvY2F0ZWQgaW4gZGNkX2dldF9vYmplY3RfZGVmICh2aWEgbm9kZV9hbGxvY2F0ZSkgKi8KKwlrZnJlZShobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4bik7CisJaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2NyZWF0ZV9waGFzZV9meG4gPSBOVUxMOworCisJa2ZyZWUoaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuKTsKKwlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfZXhlY3V0ZV9waGFzZV9meG4gPSBOVUxMOworCisJa2ZyZWUoaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2RlbGV0ZV9waGFzZV9meG4pOworCWhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuID0gTlVMTDsKKworCWtmcmVlKGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9pX2FsZ19uYW1lKTsKKwlobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfaV9hbGdfbmFtZSA9IE5VTEw7CisKKwkvKiBGcmVlIGFsbCBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgcmVzb3VyY2VzICovCisJaWYgKHhsYXRvcikgeworCQkodm9pZCljbW1feGxhdG9yX2RlbGV0ZSh4bGF0b3IsIHRydWUpOwkvKiBmb3JjZSBmcmVlICovCisJCXhsYXRvciA9IE5VTEw7CisJfQorCisJa2ZyZWUoaG5vZGUtPm5sZHJfbm9kZV9vYmopOworCWhub2RlLT5ubGRyX25vZGVfb2JqID0gTlVMTDsKKwlobm9kZS0+aG5vZGVfbWdyID0gTlVMTDsKKwlrZnJlZShobm9kZSk7CisJaG5vZGUgPSBOVUxMOworZnVuY19lbmQ6CisJcmV0dXJuOworfQorCisvKgorICogID09PT09PT09IGRlbGV0ZV9ub2RlX21nciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZyZWVzIHRoZSBub2RlIG1hbmFnZXIuCisgKi8KK3N0YXRpYyB2b2lkIGRlbGV0ZV9ub2RlX21ncihzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21ncikKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlOworCisJaWYgKGhub2RlX21ncikgeworCQkvKiBGcmVlIHJlc291cmNlcyAqLworCQlpZiAoaG5vZGVfbWdyLT5oZGNkX21ncikKKwkJCWRjZF9kZXN0cm95X21hbmFnZXIoaG5vZGVfbWdyLT5oZGNkX21ncik7CisKKwkJLyogUmVtb3ZlIGFueSBlbGVtZW50cyByZW1haW5pbmcgaW4gbGlzdHMgKi8KKwkJaWYgKGhub2RlX21nci0+bm9kZV9saXN0KSB7CisJCQl3aGlsZSAoKGhub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKQorCQkJCWxzdF9nZXRfaGVhZChobm9kZV9tZ3ItPm5vZGVfbGlzdCkpKQorCQkJCWRlbGV0ZV9ub2RlKGhub2RlLCBOVUxMKTsKKworCQkJREJDX0FTU0VSVChMU1RfSVNfRU1QVFkoaG5vZGVfbWdyLT5ub2RlX2xpc3QpKTsKKwkJCWtmcmVlKGhub2RlX21nci0+bm9kZV9saXN0KTsKKwkJfQorCQltdXRleF9kZXN0cm95KCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCQlpZiAoaG5vZGVfbWdyLT5udGZ5X29iaikgeworCQkJbnRmeV9kZWxldGUoaG5vZGVfbWdyLT5udGZ5X29iaik7CisJCQlrZnJlZShobm9kZV9tZ3ItPm50Znlfb2JqKTsKKwkJfQorCisJCWlmIChobm9kZV9tZ3ItPnBpcGVfbWFwKQorCQkJZ2JfZGVsZXRlKGhub2RlX21nci0+cGlwZV9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXApCisJCQlnYl9kZWxldGUoaG5vZGVfbWdyLT5waXBlX2RvbmVfbWFwKTsKKworCQlpZiAoaG5vZGVfbWdyLT5jaG5sX21hcCkKKwkJCWdiX2RlbGV0ZShobm9kZV9tZ3ItPmNobmxfbWFwKTsKKworCQlpZiAoaG5vZGVfbWdyLT5kbWFfY2hubF9tYXApCisJCQlnYl9kZWxldGUoaG5vZGVfbWdyLT5kbWFfY2hubF9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPnpjX2NobmxfbWFwKQorCQkJZ2JfZGVsZXRlKGhub2RlX21nci0+emNfY2hubF9tYXApOworCisJCWlmIChobm9kZV9tZ3ItPmRpc3Bfb2JqKQorCQkJZGlzcF9kZWxldGUoaG5vZGVfbWdyLT5kaXNwX29iaik7CisKKwkJaWYgKGhub2RlX21nci0+c3RybV9tZ3Jfb2JqKQorCQkJc3RybV9kZWxldGUoaG5vZGVfbWdyLT5zdHJtX21ncl9vYmopOworCisJCS8qIERlbGV0ZSB0aGUgbG9hZGVyICovCisJCWlmIChobm9kZV9tZ3ItPm5sZHJfb2JqKQorCQkJaG5vZGVfbWdyLT5ubGRyX2Z4bnMucGZuX2RlbGV0ZShobm9kZV9tZ3ItPm5sZHJfb2JqKTsKKworCQlpZiAoaG5vZGVfbWdyLT5sb2FkZXJfaW5pdCkKKwkJCWhub2RlX21nci0+bmxkcl9meG5zLnBmbl9leGl0KCk7CisKKwkJa2ZyZWUoaG5vZGVfbWdyKTsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZmlsbF9zdHJlYW1fY29ubmVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZpbGxzIHN0cmVhbSBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fY29ubmVjdChzdHJ1Y3Qgbm9kZV9vYmplY3QgKm5vZGUxLAorCQkJCXN0cnVjdCBub2RlX29iamVjdCAqbm9kZTIsCisJCQkJdTMyIHN0cmVhbTEsIHUzMiBzdHJlYW0yKQoreworCXUzMiBzdHJtX2luZGV4OworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RybTEgPSBOVUxMOworCXN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCAqc3RybTIgPSBOVUxMOworCWVudW0gbm9kZV90eXBlIG5vZGUxX3R5cGUgPSBOT0RFX1RBU0s7CisJZW51bSBub2RlX3R5cGUgbm9kZTJfdHlwZSA9IE5PREVfVEFTSzsKKworCW5vZGUxX3R5cGUgPSBub2RlX2dldF90eXBlKG5vZGUxKTsKKwlub2RlMl90eXBlID0gbm9kZV9nZXRfdHlwZShub2RlMik7CisJaWYgKG5vZGUxICE9IChzdHJ1Y3Qgbm9kZV9vYmplY3QgKilEU1BfSEdQUE5PREUpIHsKKworCQlpZiAobm9kZTFfdHlwZSAhPSBOT0RFX0RFVklDRSkgeworCQkJc3RybV9pbmRleCA9IG5vZGUxLT5udW1faW5wdXRzICsKKwkJCSAgICBub2RlMS0+bnVtX291dHB1dHMgLSAxOworCQkJc3RybTEgPSAmKG5vZGUxLT5zdHJlYW1fY29ubmVjdFtzdHJtX2luZGV4XSk7CisJCQlzdHJtMS0+Y2Jfc3RydWN0ID0gc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCQlzdHJtMS0+dGhpc19ub2RlX3N0cmVhbV9pbmRleCA9IHN0cmVhbTE7CisJCX0KKworCQlpZiAobm9kZTIgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSkgeworCQkJLyogTk9ERSA9PSA+IE5PREUgKi8KKwkJCWlmIChub2RlMV90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQkJc3RybTEtPmNvbm5lY3RlZF9ub2RlID0gbm9kZTI7CisJCQkJc3RybTEtPnVpX2Nvbm5lY3RlZF9ub2RlX2lkID0gbm9kZTItPm5vZGVfdXVpZDsKKwkJCQlzdHJtMS0+Y29ubmVjdGVkX25vZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMjsKKwkJCQlzdHJtMS0+Y29ubmVjdF90eXBlID0gQ09OTkVDVFRZUEVfTk9ERU9VVFBVVDsKKwkJCX0KKwkJCWlmIChub2RlMl90eXBlICE9IE5PREVfREVWSUNFKSB7CisJCQkJc3RybV9pbmRleCA9IG5vZGUyLT5udW1faW5wdXRzICsKKwkJCQkgICAgbm9kZTItPm51bV9vdXRwdXRzIC0gMTsKKwkJCQlzdHJtMiA9ICYobm9kZTItPnN0cmVhbV9jb25uZWN0W3N0cm1faW5kZXhdKTsKKwkJCQlzdHJtMi0+Y2Jfc3RydWN0ID0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCQkJc3RybTItPnRoaXNfbm9kZV9zdHJlYW1faW5kZXggPSBzdHJlYW0yOworCQkJCXN0cm0yLT5jb25uZWN0ZWRfbm9kZSA9IG5vZGUxOworCQkJCXN0cm0yLT51aV9jb25uZWN0ZWRfbm9kZV9pZCA9IG5vZGUxLT5ub2RlX3V1aWQ7CisJCQkJc3RybTItPmNvbm5lY3RlZF9ub2RlX3N0cmVhbV9pbmRleCA9IHN0cmVhbTE7CisJCQkJc3RybTItPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX05PREVJTlBVVDsKKwkJCX0KKwkJfSBlbHNlIGlmIChub2RlMV90eXBlICE9IE5PREVfREVWSUNFKQorCQkJc3RybTEtPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX0dQUE9VVFBVVDsKKwl9IGVsc2UgeworCQkvKiBHUFAgPT0gPiBOT0RFICovCisJCURCQ19BU1NFUlQobm9kZTIgIT0gKHN0cnVjdCBub2RlX29iamVjdCAqKURTUF9IR1BQTk9ERSk7CisJCXN0cm1faW5kZXggPSBub2RlMi0+bnVtX2lucHV0cyArIG5vZGUyLT5udW1fb3V0cHV0cyAtIDE7CisJCXN0cm0yID0gJihub2RlMi0+c3RyZWFtX2Nvbm5lY3Rbc3RybV9pbmRleF0pOworCQlzdHJtMi0+Y2Jfc3RydWN0ID0gc2l6ZW9mKHN0cnVjdCBkc3Bfc3RyZWFtY29ubmVjdCk7CisJCXN0cm0yLT50aGlzX25vZGVfc3RyZWFtX2luZGV4ID0gc3RyZWFtMjsKKwkJc3RybTItPmNvbm5lY3RfdHlwZSA9IENPTk5FQ1RUWVBFX0dQUElOUFVUOworCX0KK30KKworLyoKKyAqICA9PT09PT09PSBmaWxsX3N0cmVhbV9kZWYgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGaWxscyBTdHJlYW0gYXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9zdHJlYW1fZGVmKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsCisJCQkgICAgc3RydWN0IG5vZGVfc3RybWRlZiAqcHN0cm1fZGVmLAorCQkJICAgIHN0cnVjdCBkc3Bfc3RybWF0dHIgKnBhdHRycykKK3sKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisKKwlpZiAocGF0dHJzICE9IE5VTEwpIHsKKwkJcHN0cm1fZGVmLT5udW1fYnVmcyA9IHBhdHRycy0+bnVtX2J1ZnM7CisJCXBzdHJtX2RlZi0+YnVmX3NpemUgPQorCQkgICAgcGF0dHJzLT5idWZfc2l6ZSAvIGhub2RlX21nci0+dWRzcF9kYXRhX21hdV9zaXplOworCQlwc3RybV9kZWYtPnNlZ19pZCA9IHBhdHRycy0+c2VnX2lkOworCQlwc3RybV9kZWYtPmJ1Zl9hbGlnbm1lbnQgPSBwYXR0cnMtPmJ1Zl9hbGlnbm1lbnQ7CisJCXBzdHJtX2RlZi0+dXRpbWVvdXQgPSBwYXR0cnMtPnV0aW1lb3V0OworCX0gZWxzZSB7CisJCXBzdHJtX2RlZi0+bnVtX2J1ZnMgPSBERUZBVUxUTkJVRlM7CisJCXBzdHJtX2RlZi0+YnVmX3NpemUgPQorCQkgICAgREVGQVVMVEJVRlNJWkUgLyBobm9kZV9tZ3ItPnVkc3BfZGF0YV9tYXVfc2l6ZTsKKwkJcHN0cm1fZGVmLT5zZWdfaWQgPSBERUZBVUxUU0VHSUQ7CisJCXBzdHJtX2RlZi0+YnVmX2FsaWdubWVudCA9IERFRkFVTFRBTElHTk1FTlQ7CisJCXBzdHJtX2RlZi0+dXRpbWVvdXQgPSBERUZBVUxUVElNRU9VVDsKKwl9Cit9CisKKy8qCisgKiAgPT09PT09PT0gZnJlZV9zdHJlYW0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBVcGRhdGVzIHRoZSBjaGFubmVsIG1hc2sgYW5kIGZyZWVzIHRoZSBwaXBlIGlkLgorICovCitzdGF0aWMgdm9pZCBmcmVlX3N0cmVhbShzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciwgc3RydWN0IHN0cmVhbV9jaG5sIHN0cmVhbSkKK3sKKwkvKiBGcmVlIHVwIHRoZSBwaXBlIGlkIHVubGVzcyBvdGhlciBub2RlIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4gKi8KKwlpZiAoc3RyZWFtLnR5cGUgPT0gTk9ERUNPTk5FQ1QpIHsKKwkJaWYgKGdiX3Rlc3QoaG5vZGVfbWdyLT5waXBlX2RvbmVfbWFwLCBzdHJlYW0uZGV2X2lkKSkgeworCQkJLyogVGhlIG90aGVyIG5vZGUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkICovCisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXAsIHN0cmVhbS5kZXZfaWQpOworCQkJZ2JfY2xlYXIoaG5vZGVfbWdyLT5waXBlX21hcCwgc3RyZWFtLmRldl9pZCk7CisJCX0gZWxzZSB7CisJCQkvKiBUaGUgb3RoZXIgbm9kZSBoYXMgbm90IGJlZW4gZGVsZXRlZCB5ZXQgKi8KKwkJCWdiX3NldChobm9kZV9tZ3ItPnBpcGVfZG9uZV9tYXAsIHN0cmVhbS5kZXZfaWQpOworCQl9CisJfSBlbHNlIGlmIChzdHJlYW0udHlwZSA9PSBIT1NUQ09OTkVDVCkgeworCQlpZiAoc3RyZWFtLmRldl9pZCA8IGhub2RlX21nci0+dWxfbnVtX2NobmxzKSB7CisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPmNobmxfbWFwLCBzdHJlYW0uZGV2X2lkKTsKKwkJfSBlbHNlIGlmIChzdHJlYW0uZGV2X2lkIDwgKDIgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpIHsKKwkJCS8qIGRzcC1kbWEgKi8KKwkJCWdiX2NsZWFyKGhub2RlX21nci0+ZG1hX2NobmxfbWFwLCBzdHJlYW0uZGV2X2lkIC0KKwkJCQkgKDEgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpOworCQl9IGVsc2UgaWYgKHN0cmVhbS5kZXZfaWQgPCAoMyAqIGhub2RlX21nci0+dWxfbnVtX2NobmxzKSkgeworCQkJLyogemVyby1jb3B5ICovCisJCQlnYl9jbGVhcihobm9kZV9tZ3ItPnpjX2NobmxfbWFwLCBzdHJlYW0uZGV2X2lkIC0KKwkJCQkgKDIgKiBobm9kZV9tZ3ItPnVsX251bV9jaG5scykpOworCQl9CisJfQorfQorCisvKgorICogID09PT09PT09IGdldF9meG5fYWRkcmVzcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgYWRkcmVzcyBmb3IgY3JlYXRlLCBleGVjdXRlIG9yIGRlbGV0ZSBwaGFzZSBmb3IgYSBub2RlLgorICovCitzdGF0aWMgaW50IGdldF9meG5fYWRkcmVzcyhzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLCB1MzIgKiBmeG5fYWRkciwKKwkJCQkgIHUzMiBwaGFzZSkKK3sKKwljaGFyICpwc3RyX2Z4bl9uYW1lID0gTlVMTDsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IGhub2RlLT5obm9kZV9tZ3I7CisJaW50IHN0YXR1cyA9IDA7CisJREJDX1JFUVVJUkUobm9kZV9nZXRfdHlwZShobm9kZSkgPT0gTk9ERV9UQVNLIHx8CisJCSAgICBub2RlX2dldF90eXBlKGhub2RlKSA9PSBOT0RFX0RBSVNTT0NLRVQgfHwKKwkJICAgIG5vZGVfZ2V0X3R5cGUoaG5vZGUpID09IE5PREVfTUVTU0FHRSk7CisKKwlzd2l0Y2ggKHBoYXNlKSB7CisJY2FzZSBDUkVBVEVQSEFTRToKKwkJcHN0cl9meG5fbmFtZSA9CisJCSAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLnBzdHJfY3JlYXRlX3BoYXNlX2Z4bjsKKwkJYnJlYWs7CisJY2FzZSBFWEVDVVRFUEhBU0U6CisJCXBzdHJfZnhuX25hbWUgPQorCQkgICAgaG5vZGUtPmRjZF9wcm9wcy5vYmpfZGF0YS5ub2RlX29iai5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuOworCQlicmVhazsKKwljYXNlIERFTEVURVBIQVNFOgorCQlwc3RyX2Z4bl9uYW1lID0KKwkJICAgIGhub2RlLT5kY2RfcHJvcHMub2JqX2RhdGEubm9kZV9vYmoucHN0cl9kZWxldGVfcGhhc2VfZnhuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKwkJREJDX0FTU0VSVChmYWxzZSk7CisJCWJyZWFrOworCX0KKworCXN0YXR1cyA9CisJICAgIGhub2RlX21nci0+bmxkcl9meG5zLnBmbl9nZXRfZnhuX2FkZHIoaG5vZGUtPm5sZHJfbm9kZV9vYmosCisJCQkJCQkgIHBzdHJfZnhuX25hbWUsIGZ4bl9hZGRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X25vZGVfaW5mbyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgbm9kZSBpbmZvcm1hdGlvbi4KKyAqLwordm9pZCBnZXRfbm9kZV9pbmZvKHN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUsIHN0cnVjdCBkc3Bfbm9kZWluZm8gKm5vZGVfaW5mbykKK3sKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKGhub2RlKTsKKwlEQkNfUkVRVUlSRShub2RlX2luZm8gIT0gTlVMTCk7CisKKwlub2RlX2luZm8tPmNiX3N0cnVjdCA9IHNpemVvZihzdHJ1Y3QgZHNwX25vZGVpbmZvKTsKKwlub2RlX2luZm8tPm5iX25vZGVfZGF0YWJhc2VfcHJvcHMgPQorCSAgICBobm9kZS0+ZGNkX3Byb3BzLm9ial9kYXRhLm5vZGVfb2JqLm5kYl9wcm9wczsKKwlub2RlX2luZm8tPmV4ZWN1dGlvbl9wcmlvcml0eSA9IGhub2RlLT5wcmlvOworCW5vZGVfaW5mby0+ZGV2aWNlX293bmVyID0gaG5vZGUtPmRldmljZV9vd25lcjsKKwlub2RlX2luZm8tPm51bWJlcl9zdHJlYW1zID0gaG5vZGUtPm51bV9pbnB1dHMgKyBobm9kZS0+bnVtX291dHB1dHM7CisJbm9kZV9pbmZvLT5ub2RlX2VudiA9IGhub2RlLT5ub2RlX2VudjsKKworCW5vZGVfaW5mby0+bnNfZXhlY3V0aW9uX3N0YXRlID0gbm9kZV9nZXRfc3RhdGUoaG5vZGUpOworCisJLyogQ29weSBzdHJlYW0gY29ubmVjdCBkYXRhICovCisJZm9yIChpID0gMDsgaSA8IGhub2RlLT5udW1faW5wdXRzICsgaG5vZGUtPm51bV9vdXRwdXRzOyBpKyspCisJCW5vZGVfaW5mby0+c2Nfc3RyZWFtX2Nvbm5lY3Rpb25baV0gPSBobm9kZS0+c3RyZWFtX2Nvbm5lY3RbaV07CisKK30KKworLyoKKyAqICA9PT09PT09PSBnZXRfbm9kZV9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlIG5vZGUgcHJvcGVydGllcy4KKyAqLworc3RhdGljIGludCBnZXRfbm9kZV9wcm9wcyhzdHJ1Y3QgZGNkX21hbmFnZXIgKmhkY2RfbWdyLAorCQkJCSBzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlLAorCQkJCSBjb25zdCBzdHJ1Y3QgZHNwX3V1aWQgKm5vZGVfdXVpZCwKKwkJCQkgc3RydWN0IGRjZF9nZW5lcmljb2JqICpkY2RfcHJvcCkKK3sKKwl1MzIgbGVuOworCXN0cnVjdCBub2RlX21zZ2FyZ3MgKnBtc2dfYXJnczsKKwlzdHJ1Y3Qgbm9kZV90YXNrYXJncyAqdGFza19hcmdfb2JqOworCWVudW0gbm9kZV90eXBlIG5vZGVfdHlwZSA9IE5PREVfVEFTSzsKKwlzdHJ1Y3QgZHNwX25kYnByb3BzICpwbmRiX3Byb3BzID0KKwkgICAgJihkY2RfcHJvcC0+b2JqX2RhdGEubm9kZV9vYmoubmRiX3Byb3BzKTsKKwlpbnQgc3RhdHVzID0gMDsKKwljaGFyIHN6X3V1aWRbTUFYVVVJRExFTl07CisKKwlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYoaGRjZF9tZ3IsIChzdHJ1Y3QgZHNwX3V1aWQgKilub2RlX3V1aWQsCisJCQkJICAgIERTUF9EQ0ROT0RFVFlQRSwgZGNkX3Byb3ApOworCisJaWYgKCFzdGF0dXMpIHsKKwkJaG5vZGUtPm50eXBlID0gbm9kZV90eXBlID0gcG5kYl9wcm9wcy0+bnR5cGU7CisKKwkJLyogQ3JlYXRlIFVVSUQgdmFsdWUgdG8gc2V0IGluIHJlZ2lzdHJ5LiAqLworCQl1dWlkX3V1aWRfdG9fc3RyaW5nKChzdHJ1Y3QgZHNwX3V1aWQgKilub2RlX3V1aWQsIHN6X3V1aWQsCisJCQkJICAgIE1BWFVVSURMRU4pOworCQlkZXZfZGJnKGJyaWRnZSwgIihub2RlKSBVVUlEOiAlc1xuIiwgc3pfdXVpZCk7CisKKwkJLyogRmlsbCBpbiBtZXNzYWdlIGFyZ3MgdGhhdCBjb21lIGZyb20gTkRCICovCisJCWlmIChub2RlX3R5cGUgIT0gTk9ERV9ERVZJQ0UpIHsKKwkJCXBtc2dfYXJncyA9ICYoaG5vZGUtPmNyZWF0ZV9hcmdzLmFzYS5ub2RlX21zZ19hcmdzKTsKKwkJCXBtc2dfYXJncy0+c2VnX2lkID0KKwkJCSAgICBkY2RfcHJvcC0+b2JqX2RhdGEubm9kZV9vYmoubXNnX3NlZ2lkOworCQkJcG1zZ19hcmdzLT5ub3RpZnlfdHlwZSA9CisJCQkgICAgZGNkX3Byb3AtPm9ial9kYXRhLm5vZGVfb2JqLm1zZ19ub3RpZnlfdHlwZTsKKwkJCXBtc2dfYXJncy0+bWF4X21zZ3MgPSBwbmRiX3Byb3BzLT5tZXNzYWdlX2RlcHRoOworCQkJZGV2X2RiZyhicmlkZ2UsICIobm9kZSkgTWF4IE51bWJlciBvZiBNZXNzYWdlczogMHgleFxuIiwKKwkJCQlwbXNnX2FyZ3MtPm1heF9tc2dzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENvcHkgZGV2aWNlIG5hbWUgKi8KKwkJCURCQ19SRVFVSVJFKHBuZGJfcHJvcHMtPmFjX25hbWUpOworCQkJbGVuID0gc3RybGVuKHBuZGJfcHJvcHMtPmFjX25hbWUpOworCQkJREJDX0FTU0VSVChsZW4gPCBNQVhERVZOQU1FTEVOKTsKKwkJCWhub2RlLT5wc3RyX2Rldl9uYW1lID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJCWlmIChobm9kZS0+cHN0cl9kZXZfbmFtZSA9PSBOVUxMKSB7CisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCX0gZWxzZSB7CisJCQkJc3RybmNweShobm9kZS0+cHN0cl9kZXZfbmFtZSwKKwkJCQkJcG5kYl9wcm9wcy0+YWNfbmFtZSwgbGVuKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBGaWxsIGluIGNyZWF0ZSBhcmdzIHRoYXQgY29tZSBmcm9tIE5EQiAqLworCQlpZiAobm9kZV90eXBlID09IE5PREVfVEFTSyB8fCBub2RlX3R5cGUgPT0gTk9ERV9EQUlTU09DS0VUKSB7CisJCQl0YXNrX2FyZ19vYmogPSAmKGhub2RlLT5jcmVhdGVfYXJncy5hc2EudGFza19hcmdfb2JqKTsKKwkJCXRhc2tfYXJnX29iai0+cHJpbyA9IHBuZGJfcHJvcHMtPnByaW87CisJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NpemUgPSBwbmRiX3Byb3BzLT5zdGFja19zaXplOworCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6ZSA9CisJCQkgICAgcG5kYl9wcm9wcy0+c3lzX3N0YWNrX3NpemU7CisJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NlZyA9IHBuZGJfcHJvcHMtPnN0YWNrX3NlZzsKKwkJCWRldl9kYmcoYnJpZGdlLCAiKG5vZGUpIFByaW9yaXR5OiAweCV4IFN0YWNrIFNpemU6ICIKKwkJCQkiMHgleCB3b3JkcyBTeXN0ZW0gU3RhY2sgU2l6ZTogMHgleCB3b3JkcyAiCisJCQkJIlN0YWNrIFNlZ21lbnQ6IDB4JXggcHJvZmlsZSBjb3VudCA6IDB4JXhcbiIsCisJCQkJdGFza19hcmdfb2JqLT5wcmlvLCB0YXNrX2FyZ19vYmotPnN0YWNrX3NpemUsCisJCQkJdGFza19hcmdfb2JqLT5zeXNfc3RhY2tfc2l6ZSwKKwkJCQl0YXNrX2FyZ19vYmotPnN0YWNrX3NlZywKKwkJCQlwbmRiX3Byb3BzLT5jb3VudF9wcm9maWxlcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGdldF9wcm9jX3Byb3BzID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIHByb2Nlc3NvciBwcm9wZXJ0aWVzLgorICovCitzdGF0aWMgaW50IGdldF9wcm9jX3Byb3BzKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyLAorCQkJCSBzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmopCit7CisJc3RydWN0IGNmZ19ob3N0cmVzICpob3N0X3JlczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpwYnJpZGdlX2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLCAmcGJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIXBicmlkZ2VfY29udGV4dCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmICghc3RhdHVzKSB7CisJCWhvc3RfcmVzID0gcGJyaWRnZV9jb250ZXh0LT5yZXNvdXJjZXM7CisJCWlmICghaG9zdF9yZXMpCisJCQlyZXR1cm4gLUVQRVJNOworCQlobm9kZV9tZ3ItPnVsX2Nobmxfb2Zmc2V0ID0gaG9zdF9yZXMtPmR3X2Nobmxfb2Zmc2V0OworCQlobm9kZV9tZ3ItPnVsX2NobmxfYnVmX3NpemUgPSBob3N0X3Jlcy0+ZHdfY2hubF9idWZfc2l6ZTsKKwkJaG5vZGVfbWdyLT51bF9udW1fY2hubHMgPSBob3N0X3Jlcy0+ZHdfbnVtX2NobmxzOworCisJCS8qCisJCSAqICBQUk9DIHdpbGwgYWRkIGFuIEFQSSB0byBnZXQgZHNwX3Byb2Nlc3NvcmluZm8uCisJCSAqICBGaWxsIGluIGRlZmF1bHQgdmFsdWVzIGZvciBub3cuCisJCSAqLworCQkvKiBUT0RPIC0tIEluc3RlYWQgb2YgaGFyZCBjb2RpbmcsIHRha2UgZnJvbSByZWdpc3RyeSAqLworCQlobm9kZV9tZ3ItPnByb2NfZmFtaWx5ID0gNjAwMDsKKwkJaG5vZGVfbWdyLT5wcm9jX3R5cGUgPSA2NDEwOworCQlobm9kZV9tZ3ItPm1pbl9wcmkgPSBEU1BfTk9ERV9NSU5fUFJJT1JJVFk7CisJCWhub2RlX21nci0+bWF4X3ByaSA9IERTUF9OT0RFX01BWF9QUklPUklUWTsKKwkJaG5vZGVfbWdyLT51ZHNwX3dvcmRfc2l6ZSA9IERTUFdPUkRTSVpFOworCQlobm9kZV9tZ3ItPnVkc3BfZGF0YV9tYXVfc2l6ZSA9IERTUFdPUkRTSVpFOworCQlobm9kZV9tZ3ItPnVkc3BfbWF1X3NpemUgPSAxOworCisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gbm9kZV9nZXRfdXVpZF9wcm9wcyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEZldGNoIE5vZGUgVVVJRCBwcm9wZXJ0aWVzIGZyb20gRENEL0RPRiBmaWxlLgorICovCitpbnQgbm9kZV9nZXRfdXVpZF9wcm9wcyh2b2lkICpocHJvY2Vzc29yLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkc3BfdXVpZCAqbm9kZV91dWlkLAorCQkJICAgICAgIHN0cnVjdCBkc3BfbmRicHJvcHMgKm5vZGVfcHJvcHMpCit7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3IgPSBOVUxMOworCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgZGNkX25vZGVwcm9wcyBkY2Rfbm9kZV9wcm9wczsKKwlzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlIHByb2Nfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoaHByb2Nlc3NvciAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShub2RlX3V1aWQgIT0gTlVMTCk7CisKKwlpZiAoaHByb2Nlc3NvciA9PSBOVUxMIHx8IG5vZGVfdXVpZCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXN0YXR1cyA9IHByb2NfZ2V0X3N0YXRlKGhwcm9jZXNzb3IsICZwcm9jX3N0YXRlLAorCQkJCXNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKwkvKiBJZiBwcm9jZXNzb3IgaXMgaW4gZXJyb3Igc3RhdGUgdGhlbiBkb24ndCBhdHRlbXB0CisJICAgdG8gc2VuZCB0aGUgbWVzc2FnZSAqLworCWlmIChwcm9jX3N0YXRlLnByb2Nfc3RhdGUgPT0gUFJPQ19FUlJPUikgeworCQlzdGF0dXMgPSAtRVBFUk07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJc3RhdHVzID0gcHJvY19nZXRfZGV2X29iamVjdChocHJvY2Vzc29yLCAmaGRldl9vYmopOworCWlmIChoZGV2X29iaikgeworCQlzdGF0dXMgPSBkZXZfZ2V0X25vZGVfbWFuYWdlcihoZGV2X29iaiwgJmhub2RlX21ncik7CisJCWlmIChobm9kZV9tZ3IgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEVudGVyIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCisJICogZGNkX2dldF9vYmplY3RfZGVmIHdpbGwgdWx0aW1hdGVseSBlbmQgdXAgY2FsbGluZyBkYmxsX29wZW4vY2xvc2UsCisJICogd2hpY2ggbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGluIG9yZGVyIHRvIG5vdCBjb3JydXB0IHRoZSB6bGliIG1hbmFnZXIKKwkgKiAoQ09EKS4KKwkgKi8KKwltdXRleF9sb2NrKCZobm9kZV9tZ3ItPm5vZGVfbWdyX2xvY2spOworCisJZGNkX25vZGVfcHJvcHMucHN0cl9jcmVhdGVfcGhhc2VfZnhuID0gTlVMTDsKKwlkY2Rfbm9kZV9wcm9wcy5wc3RyX2V4ZWN1dGVfcGhhc2VfZnhuID0gTlVMTDsKKwlkY2Rfbm9kZV9wcm9wcy5wc3RyX2RlbGV0ZV9waGFzZV9meG4gPSBOVUxMOworCWRjZF9ub2RlX3Byb3BzLnBzdHJfaV9hbGdfbmFtZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBkY2RfZ2V0X29iamVjdF9kZWYoaG5vZGVfbWdyLT5oZGNkX21nciwKKwkJKHN0cnVjdCBkc3BfdXVpZCAqKW5vZGVfdXVpZCwgRFNQX0RDRE5PREVUWVBFLAorCQkoc3RydWN0IGRjZF9nZW5lcmljb2JqICopJmRjZF9ub2RlX3Byb3BzKTsKKworCWlmICghc3RhdHVzKSB7CisJCSpub2RlX3Byb3BzID0gZGNkX25vZGVfcHJvcHMubmRiX3Byb3BzOworCQlrZnJlZShkY2Rfbm9kZV9wcm9wcy5wc3RyX2NyZWF0ZV9waGFzZV9meG4pOworCisJCWtmcmVlKGRjZF9ub2RlX3Byb3BzLnBzdHJfZXhlY3V0ZV9waGFzZV9meG4pOworCisJCWtmcmVlKGRjZF9ub2RlX3Byb3BzLnBzdHJfZGVsZXRlX3BoYXNlX2Z4bik7CisKKwkJa2ZyZWUoZGNkX25vZGVfcHJvcHMucHN0cl9pX2FsZ19uYW1lKTsKKwl9CisJLyogIExlYXZlIHRoZSBjcml0aWNhbCBzZWN0aW9uLCB3ZSdyZSBkb25lLiAqLworCW11dGV4X3VubG9jaygmaG5vZGVfbWdyLT5ub2RlX21ncl9sb2NrKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZ2V0X3Jtc19meG5zID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIFJNUyBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3Jtc19meG5zKHN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyKQoreworCXMzMiBpOworCXN0cnVjdCBkZXZfb2JqZWN0ICpkZXZfb2JqID0gaG5vZGVfbWdyLT5oZGV2X29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXRpYyBjaGFyICpwc3pfZnhuc1tOVU1STVNGWE5TXSA9IHsKKwkJIlJNU19xdWVyeVNlcnZlciIsCS8qIFJNU1FVRVJZU0VSVkVSICovCisJCSJSTVNfY29uZmlndXJlU2VydmVyIiwJLyogUk1TQ09ORklHVVJFU0VSVkVSICovCisJCSJSTVNfY3JlYXRlTm9kZSIsCS8qIFJNU0NSRUFURU5PREUgKi8KKwkJIlJNU19leGVjdXRlTm9kZSIsCS8qIFJNU0VYRUNVVEVOT0RFICovCisJCSJSTVNfZGVsZXRlTm9kZSIsCS8qIFJNU0RFTEVURU5PREUgKi8KKwkJIlJNU19jaGFuZ2VOb2RlUHJpb3JpdHkiLAkvKiBSTVNDSEFOR0VOT0RFUFJJT1JJVFkgKi8KKwkJIlJNU19yZWFkTWVtb3J5IiwJLyogUk1TUkVBRE1FTU9SWSAqLworCQkiUk1TX3dyaXRlTWVtb3J5IiwJLyogUk1TV1JJVEVNRU1PUlkgKi8KKwkJIlJNU19jb3B5IiwJLyogUk1TQ09QWSAqLworCX07CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNUk1TRlhOUzsgaSsrKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfc3ltYm9sKGRldl9vYmosIHBzel9meG5zW2ldLAorCQkJCQkmKGhub2RlX21nci0+dWxfZnhuX2FkZHJzW2ldKSk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChzdGF0dXMgPT0gLUVTUElQRSkgeworCQkJCS8qCisJCQkJICogIE1heSBiZSBsb2FkZWQgZHluYW1pY2FsbHkgKGluIHRoZSBmdXR1cmUpLAorCQkJCSAqICBidXQgcmV0dXJuIGFuIGVycm9yIGZvciBub3cuCisJCQkJICovCisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogUk1TIGZ1bmN0aW9uOiAlcyBjdXJyZW50bHkiCisJCQkJCSIgbm90IGxvYWRlZFxuIiwgX19mdW5jX18sIHBzel9meG5zW2ldKTsKKwkJCX0gZWxzZSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogU3ltYm9sIG5vdCBmb3VuZDogJXMgIgorCQkJCQkic3RhdHVzID0gMHgleFxuIiwgX19mdW5jX18sCisJCQkJCXBzel9meG5zW2ldLCBzdGF0dXMpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBvdmx5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgQ2FsbGVkIGR1cmluZyBvdmVybGF5LlNlbmRzIGNvbW1hbmQgdG8gUk1TIHRvIGNvcHkgYSBibG9jayBvZiBkYXRhLgorICovCitzdGF0aWMgdTMyIG92bHkodm9pZCAqcHJpdl9yZWYsIHUzMiBkc3BfcnVuX2FkZHIsIHUzMiBkc3BfbG9hZF9hZGRyLAorCQl1MzIgdWxfbnVtX2J5dGVzLCB1MzIgbWVtX3NwYWNlKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqaG5vZGUgPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopcHJpdl9yZWY7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJdTMyIHVsX2J5dGVzID0gMDsKKwl1MzIgdWxfc2l6ZTsKKwl1MzIgdWxfdGltZW91dDsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpoYnJpZGdlX2NvbnRleHQ7CisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCisJREJDX1JFUVVJUkUoaG5vZGUpOworCisJaG5vZGVfbWdyID0gaG5vZGUtPmhub2RlX21ncjsKKworCXVsX3NpemUgPSB1bF9udW1fYnl0ZXMgLyBobm9kZV9tZ3ItPnVkc3Bfd29yZF9zaXplOworCXVsX3RpbWVvdXQgPSBobm9kZS0+dXRpbWVvdXQ7CisKKwkvKiBDYWxsIG5ldyBNZW1Db3B5IGZ1bmN0aW9uICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChobm9kZV9tZ3ItPmhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPQorCQkgICAgKCppbnRmX2Z4bnMtPnBmbl9icmRfbWVtX2NvcHkpIChoYnJpZGdlX2NvbnRleHQsCisJCQkJCQlkc3BfcnVuX2FkZHIsIGRzcF9sb2FkX2FkZHIsCisJCQkJCQl1bF9udW1fYnl0ZXMsICh1MzIpIG1lbV9zcGFjZSk7CisJCWlmICghc3RhdHVzKQorCQkJdWxfYnl0ZXMgPSB1bF9udW1fYnl0ZXM7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGNvcHkgYnJkIG1lbW9yeSwgc3RhdHVzIDB4JXhcbiIsCisJCQkJIF9fZnVuY19fLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogZmFpbGVkIHRvIGdldCBCcmlkZ2UgY29udGV4dCwgc3RhdHVzIDB4JXhcbiIsCisJCQkgX19mdW5jX18sIHN0YXR1cyk7CisJfQorCisJcmV0dXJuIHVsX2J5dGVzOworfQorCisvKgorICogID09PT09PT09IG1lbV93cml0ZSA9PT09PT09PQorICovCitzdGF0aWMgdTMyIG1lbV93cml0ZSh2b2lkICpwcml2X3JlZiwgdTMyIGRzcF9hZGQsIHZvaWQgKnBidWYsCisJCSAgICAgdTMyIHVsX251bV9ieXRlcywgdTMyIG1lbV9zcGFjZSkKK3sKKwlzdHJ1Y3Qgbm9kZV9vYmplY3QgKmhub2RlID0gKHN0cnVjdCBub2RlX29iamVjdCAqKXByaXZfcmVmOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyOworCXUxNiBtZW1fc2VjdF90eXBlOworCXUzMiB1bF90aW1lb3V0OworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCisJREJDX1JFUVVJUkUoaG5vZGUpOworCURCQ19SRVFVSVJFKG1lbV9zcGFjZSAmIERCTExfQ09ERSB8fCBtZW1fc3BhY2UgJiBEQkxMX0RBVEEpOworCisJaG5vZGVfbWdyID0gaG5vZGUtPmhub2RlX21ncjsKKworCXVsX3RpbWVvdXQgPSBobm9kZS0+dXRpbWVvdXQ7CisJbWVtX3NlY3RfdHlwZSA9IChtZW1fc3BhY2UgJiBEQkxMX0NPREUpID8gUk1TX0NPREUgOiBSTVNfREFUQTsKKworCS8qIENhbGwgbmV3IE1lbVdyaXRlIGZ1bmN0aW9uICovCisJaW50Zl9meG5zID0gaG5vZGVfbWdyLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0gZGV2X2dldF9icmlkZ2VfY29udGV4dChobm9kZV9tZ3ItPmhkZXZfb2JqLCAmaGJyaWRnZV9jb250ZXh0KTsKKwlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2JyZF9tZW1fd3JpdGUpIChoYnJpZGdlX2NvbnRleHQsIHBidWYsCisJCQkJCWRzcF9hZGQsIHVsX251bV9ieXRlcywgbWVtX3NlY3RfdHlwZSk7CisKKwlyZXR1cm4gdWxfbnVtX2J5dGVzOworfQorCisjaWZkZWYgQ09ORklHX1RJRFNQQlJJREdFX0JBQ0tUUkFDRQorLyoKKyAqICA9PT09PT09PSBub2RlX2ZpbmRfYWRkciA9PT09PT09PQorICovCitpbnQgbm9kZV9maW5kX2FkZHIoc3RydWN0IG5vZGVfbWdyICpub2RlX21nciwgdTMyIHN5bV9hZGRyLAorCQl1MzIgb2Zmc2V0X3JhbmdlLCB2b2lkICpzeW1fYWRkcl9vdXRwdXQsIGNoYXIgKnN5bV9uYW1lKQoreworCXN0cnVjdCBub2RlX29iamVjdCAqbm9kZV9vYmo7CisJaW50IHN0YXR1cyA9IC1FTk9FTlQ7CisJdTMyIG47CisKKwlwcl9kZWJ1ZygiJXMoMHgleCwgMHgleCwgMHgleCwgMHgleCwgICVzKVxuIiwgX19mdW5jX18sCisJCQkodW5zaWduZWQgaW50KSBub2RlX21nciwKKwkJCXN5bV9hZGRyLCBvZmZzZXRfcmFuZ2UsCisJCQkodW5zaWduZWQgaW50KSBzeW1fYWRkcl9vdXRwdXQsIHN5bV9uYW1lKTsKKworCW5vZGVfb2JqID0gKHN0cnVjdCBub2RlX29iamVjdCAqKShub2RlX21nci0+bm9kZV9saXN0LT5oZWFkLm5leHQpOworCisJZm9yIChuID0gMDsgbiA8IG5vZGVfbWdyLT5udW1fbm9kZXM7IG4rKykgeworCQlzdGF0dXMgPSBubGRyX2ZpbmRfYWRkcihub2RlX29iai0+bmxkcl9ub2RlX29iaiwgc3ltX2FkZHIsCisJCQlvZmZzZXRfcmFuZ2UsIHN5bV9hZGRyX291dHB1dCwgc3ltX25hbWUpOworCisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJbm9kZV9vYmogPSAoc3RydWN0IG5vZGVfb2JqZWN0ICopIChub2RlX29iai0+bGlzdF9lbGVtLm5leHQpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyNmUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHJvYy5jCkBAIC0wLDAgKzEsMTkzNiBAQAorLyoKKyAqIHByb2MuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBQcm9jZXNzb3IgaW50ZXJmYWNlIGF0IHRoZSBkcml2ZXIgbGV2ZWwuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2xpc3QuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbnRmeS5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9zeW5jLmg+CisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGRlaC5oPgorLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYXRmb3JtIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY29kLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rldi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9wcm9jcHJpdi5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9kbW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlc291cmNlIE1hbmFnZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvbWdyLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGUuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvbmxkci5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9ybW0uaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE90aGVycyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRjZC5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9tc2cuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHNwaW9jdGwuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZHJ2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3Byb2MuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcHdyLmg+CisKKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5lcywgRGF0YSBTdHJ1Y3R1cmVzLCBUeXBlZGVmcyAqLworI2RlZmluZSBNQVhDTURMSU5FTEVOICAgICAgIDI1NQorI2RlZmluZSBQUk9DX0VOVlBST0NJRCAgICAgICJQUk9DX0lEPSVkIgorI2RlZmluZSBNQVhQUk9DSURMRU4JKDggKyA1KQorI2RlZmluZSBQUk9DX0RGTFRfVElNRU9VVCAgIDEwMDAwCS8qIFRpbWUgb3V0IGluIG1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBQV1JfVElNRU9VVAkgNTAwCS8qIFNsZWVwL3dha2UgdGltb3V0IGluIG1zZWMgKi8KKyNkZWZpbmUgRVhURU5ECSAgICAgICJfRVhUX0VORCIJLyogRXh0bWVtIGVuZCBhZGRyIGluIERTUCBiaW5hcnkgKi8KKworI2RlZmluZSBEU1BfQ0FDSEVfTElORSAxMjgKKworI2RlZmluZSBCVUZNT0RFX01BU0sJKDMgPDwgMTQpCisKKy8qIEJ1ZmZlciBtb2RlcyBmcm9tIERTUCBwZXJzcGVjdGl2ZSAqLworI2RlZmluZSBSQlVGCQkweDQwMDAJCS8qIElucHV0IGJ1ZmZlciAqLworI2RlZmluZSBXQlVGCQkweDgwMDAJCS8qIE91dHB1dCBCdWZmZXIgKi8KKworZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmJyaWRnZTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KKworLyogVGhlIHByb2Nfb2JqZWN0IHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBwcm9jX29iamVjdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwkvKiBMaW5rIHRvIG5leHQgcHJvY19vYmplY3QgKi8KKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmo7CS8qIERldmljZSB0aGlzIFBST0MgcmVwcmVzZW50cyAqLworCXUzMiBwcm9jZXNzOwkJLyogUHJvY2VzcyBvd25pbmcgdGhpcyBQcm9jZXNzb3IgKi8KKwlzdHJ1Y3QgbWdyX29iamVjdCAqaG1ncl9vYmo7CS8qIE1hbmFnZXIgT2JqZWN0IEhhbmRsZSAqLworCXUzMiBhdHRhY2hfY291bnQ7CS8qIFByb2Nlc3NvciBhdHRhY2ggY291bnQgKi8KKwl1MzIgcHJvY2Vzc29yX2lkOwkvKiBQcm9jZXNzb3IgbnVtYmVyICovCisJdTMyIHV0aW1lb3V0OwkJLyogVGltZSBvdXQgY291bnQgKi8KKwllbnVtIGRzcF9wcm9jc3RhdGUgcHJvY19zdGF0ZTsJLyogUHJvY2Vzc29yIHN0YXRlICovCisJdTMyIHVsX3VuaXQ7CQkvKiBERFNQIHVuaXQgbnVtYmVyICovCisJYm9vbCBpc19hbHJlYWR5X2F0dGFjaGVkOwkvKgorCQkJCQkgKiBUcnVlIGlmIHRoZSBEZXZpY2UgYmVsb3cgaGFzCisJCQkJCSAqIEdQUCBDbGllbnQgYXR0YWNoZWQKKwkJCQkJICovCisJc3RydWN0IG50Znlfb2JqZWN0ICpudGZ5X29iajsJLyogTWFuYWdlcyAgbm90aWZpY2F0aW9ucyAqLworCS8qIEJyaWRnZSBDb250ZXh0IEhhbmRsZSAqLworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmhicmlkZ2VfY29udGV4dDsKKwkvKiBGdW5jdGlvbiBpbnRlcmZhY2UgdG8gQnJpZGdlIGRyaXZlciAqLworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWNoYXIgKnBzel9sYXN0X2NvZmY7CisJc3RydWN0IGxpc3RfaGVhZCBwcm9jX2xpc3Q7Cit9OworCitzdGF0aWMgdTMyIHJlZnM7CisKK0RFRklORV9NVVRFWChwcm9jX2xvY2spOwkvKiBGb3IgY3JpdGljYWwgc2VjdGlvbnMgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgcHJvY19tb25pdG9yKHN0cnVjdCBwcm9jX29iamVjdCAqcHJvY19vYmopOworc3RhdGljIHMzMiBnZXRfZW52cF9jb3VudChjaGFyICoqZW52cCk7CitzdGF0aWMgY2hhciAqKnByZXBlbmRfZW52cChjaGFyICoqbmV3X2VudnAsIGNoYXIgKiplbnZwLCBzMzIgZW52cF9lbGVtcywKKwkJCSAgIHMzMiBjbmV3X2VudnAsIGNoYXIgKnN6X3Zhcik7CisKKy8qIHJlbWVtYmVyIG1hcHBpbmcgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKmFkZF9tYXBwaW5nX2luZm8oc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQl1MzIgbXB1X2FkZHIsIHUzMiBkc3BfYWRkciwgdTMyIHNpemUpCit7CisJc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqOworCisJdTMyIG51bV91c3JfcGdzID0gc2l6ZSAvIFBHX1NJWkU0SzsKKworCXByX2RlYnVnKCIlczogYWRkaW5nIG1hcCBpbmZvOiBtcHVfYWRkciAweCV4IHZpcnQgMHgleCBzaXplIDB4JXhcbiIsCisJCQkJCQlfX2Z1bmNfXywgbXB1X2FkZHIsCisJCQkJCQlkc3BfYWRkciwgc2l6ZSk7CisKKwltYXBfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtbV9tYXBfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXBfb2JqKSB7CisJCXByX2VycigiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKwlJTklUX0xJU1RfSEVBRCgmbWFwX29iai0+bGluayk7CisKKwltYXBfb2JqLT5wYWdlcyA9IGtjYWxsb2MobnVtX3Vzcl9wZ3MsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIW1hcF9vYmotPnBhZ2VzKSB7CisJCXByX2VycigiJXM6IGt6YWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWtmcmVlKG1hcF9vYmopOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwltYXBfb2JqLT5tcHVfYWRkciA9IG1wdV9hZGRyOworCW1hcF9vYmotPmRzcF9hZGRyID0gZHNwX2FkZHI7CisJbWFwX29iai0+c2l6ZSA9IHNpemU7CisJbWFwX29iai0+bnVtX3Vzcl9wZ3MgPSBudW1fdXNyX3BnczsKKworCXNwaW5fbG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlsaXN0X2FkZCgmbWFwX29iai0+bGluaywgJnByX2N0eHQtPmRtbV9tYXBfbGlzdCk7CisJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7CisKKwlyZXR1cm4gbWFwX29iajsKK30KKworc3RhdGljIGludCBtYXRjaF9leGFjdF9tYXBfb2JqKHN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iaiwKKwkJCQkJdTMyIGRzcF9hZGRyLCB1MzIgc2l6ZSkKK3sKKwlpZiAobWFwX29iai0+ZHNwX2FkZHIgPT0gZHNwX2FkZHIgJiYgbWFwX29iai0+c2l6ZSAhPSBzaXplKQorCQlwcl9lcnIoIiVzOiBhZGRyIG1hdGNoICgweCV4KSwgc2l6ZSBkb24ndCAoMHgleCAhPSAweCV4KVxuIiwKKwkJCQlfX2Z1bmNfXywgZHNwX2FkZHIsIG1hcF9vYmotPnNpemUsIHNpemUpOworCisJcmV0dXJuIG1hcF9vYmotPmRzcF9hZGRyID09IGRzcF9hZGRyICYmCisJCW1hcF9vYmotPnNpemUgPT0gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX21hcHBpbmdfaW5mb3JtYXRpb24oc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQkJCXUzMiBkc3BfYWRkciwgdTMyIHNpemUpCit7CisJc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqOworCisJcHJfZGVidWcoIiVzOiBsb29raW5nIGZvciB2aXJ0IDB4JXggc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkJCQlkc3BfYWRkciwgc2l6ZSk7CisKKwlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9tYXBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXBfb2JqLCAmcHJfY3R4dC0+ZG1tX21hcF9saXN0LCBsaW5rKSB7CisJCXByX2RlYnVnKCIlczogY2FuZGlkYXRlOiBtcHVfYWRkciAweCV4IHZpcnQgMHgleCBzaXplIDB4JXhcbiIsCisJCQkJCQkJX19mdW5jX18sCisJCQkJCQkJbWFwX29iai0+bXB1X2FkZHIsCisJCQkJCQkJbWFwX29iai0+ZHNwX2FkZHIsCisJCQkJCQkJbWFwX29iai0+c2l6ZSk7CisKKwkJaWYgKG1hdGNoX2V4YWN0X21hcF9vYmoobWFwX29iaiwgZHNwX2FkZHIsIHNpemUpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IG1hdGNoLCBkZWxldGluZyBtYXAgaW5mb1xuIiwgX19mdW5jX18pOworCQkJbGlzdF9kZWwoJm1hcF9vYmotPmxpbmspOworCQkJa2ZyZWUobWFwX29iai0+ZG1hX2luZm8uc2cpOworCQkJa2ZyZWUobWFwX29iai0+cGFnZXMpOworCQkJa2ZyZWUobWFwX29iaik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwcl9kZWJ1ZygiJXM6IGNhbmRpZGF0ZSBkaWRuJ3QgbWF0Y2hcbiIsIF9fZnVuY19fKTsKKwl9CisKKwlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZmluZCBnaXZlbiBtYXAgaW5mb1xuIiwgX19mdW5jX18pOworb3V0OgorCXNwaW5fdW5sb2NrKCZwcl9jdHh0LT5kbW1fbWFwX2xvY2spOworfQorCitzdGF0aWMgaW50IG1hdGNoX2NvbnRhaW5pbmdfbWFwX29iaihzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCQkJCXUzMiBtcHVfYWRkciwgdTMyIHNpemUpCit7CisJdTMyIG1hcF9vYmpfZW5kID0gbWFwX29iai0+bXB1X2FkZHIgKyBtYXBfb2JqLT5zaXplOworCisJcmV0dXJuIG1wdV9hZGRyID49IG1hcF9vYmotPm1wdV9hZGRyICYmCisJCW1wdV9hZGRyICsgc2l6ZSA8PSBtYXBfb2JqX2VuZDsKK30KKworc3RhdGljIHN0cnVjdCBkbW1fbWFwX29iamVjdCAqZmluZF9jb250YWluaW5nX21hcHBpbmcoCisJCQkJc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCwKKwkJCQl1MzIgbXB1X2FkZHIsIHUzMiBzaXplKQoreworCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iajsKKwlwcl9kZWJ1ZygiJXM6IGxvb2tpbmcgZm9yIG1wdV9hZGRyIDB4JXggc2l6ZSAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQkJCW1wdV9hZGRyLCBzaXplKTsKKworCXNwaW5fbG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcF9vYmosICZwcl9jdHh0LT5kbW1fbWFwX2xpc3QsIGxpbmspIHsKKwkJcHJfZGVidWcoIiVzOiBjYW5kaWRhdGU6IG1wdV9hZGRyIDB4JXggdmlydCAweCV4IHNpemUgMHgleFxuIiwKKwkJCQkJCV9fZnVuY19fLAorCQkJCQkJbWFwX29iai0+bXB1X2FkZHIsCisJCQkJCQltYXBfb2JqLT5kc3BfYWRkciwKKwkJCQkJCW1hcF9vYmotPnNpemUpOworCQlpZiAobWF0Y2hfY29udGFpbmluZ19tYXBfb2JqKG1hcF9vYmosIG1wdV9hZGRyLCBzaXplKSkgeworCQkJcHJfZGVidWcoIiVzOiBtYXRjaCFcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcHJfZGVidWcoIiVzOiBubyBtYXRjaCFcbiIsIF9fZnVuY19fKTsKKwl9CisKKwltYXBfb2JqID0gTlVMTDsKK291dDoKKwlzcGluX3VubG9jaygmcHJfY3R4dC0+ZG1tX21hcF9sb2NrKTsKKwlyZXR1cm4gbWFwX29iajsKK30KKworc3RhdGljIGludCBmaW5kX2ZpcnN0X3BhZ2VfaW5fY2FjaGUoc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqLAorCQkJCQl1bnNpZ25lZCBsb25nIG1wdV9hZGRyKQoreworCXUzMiBtYXBwZWRfYmFzZV9wYWdlID0gbWFwX29iai0+bXB1X2FkZHIgPj4gUEFHRV9TSElGVDsKKwl1MzIgcmVxdWVzdGVkX2Jhc2VfcGFnZSA9IG1wdV9hZGRyID4+IFBBR0VfU0hJRlQ7CisJaW50IHBnX2luZGV4ID0gcmVxdWVzdGVkX2Jhc2VfcGFnZSAtIG1hcHBlZF9iYXNlX3BhZ2U7CisKKwlpZiAocGdfaW5kZXggPCAwIHx8IHBnX2luZGV4ID49IG1hcF9vYmotPm51bV91c3JfcGdzKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCAoZ290ICVkKVxuIiwgX19mdW5jX18sIHBnX2luZGV4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCXByX2RlYnVnKCIlczogZmlyc3QgcGFnZSBpcyAlZFxuIiwgX19mdW5jX18sIHBnX2luZGV4KTsKKwlyZXR1cm4gcGdfaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmdldF9tYXBwaW5nX3BhZ2Uoc3RydWN0IGRtbV9tYXBfb2JqZWN0ICptYXBfb2JqLAorCQkJCQkJCQlpbnQgcGdfaSkKK3sKKwlwcl9kZWJ1ZygiJXM6IGxvb2tpbmcgZm9yIHBnX2kgJWQsIG51bV91c3JfcGdzOiAlZFxuIiwgX19mdW5jX18sCisJCQkJCXBnX2ksIG1hcF9vYmotPm51bV91c3JfcGdzKTsKKworCWlmIChwZ19pIDwgMCB8fCBwZ19pID49IG1hcF9vYmotPm51bV91c3JfcGdzKSB7CisJCXByX2VycigiJXM6IHJlcXVlc3RlZCBwZ19pICVkIGlzIG91dCBvZiBtYXBwZWQgcmFuZ2VcbiIsCisJCQkJX19mdW5jX18sIHBnX2kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gbWFwX29iai0+cGFnZXNbcGdfaV07Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19hdHRhY2ggPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBQcmVwYXJlIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBwYXJ0aWN1bGFyIERTUCBwcm9jZXNzb3IsIGFuZCByZXR1cm4KKyAqICAgICAgYSBoYW5kbGUgdG8gdGhlIHByb2Nlc3NvciBvYmplY3QuCisgKi8KK2ludAorcHJvY19hdHRhY2godTMyIHByb2Nlc3Nvcl9pZCwKKwkgICAgY29uc3Qgc3RydWN0IGRzcF9wcm9jZXNzb3JhdHRyaW4gKmF0dHJfaW4sCisJICAgIHZvaWQgKipwaF9wcm9jZXNzb3IsIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IE5VTEw7CisJc3RydWN0IG1ncl9vYmplY3QgKmhtZ3Jfb2JqID0gTlVMTDsKKwlzdHJ1Y3QgZHJ2X29iamVjdCAqaGRydl9vYmogPSBOVUxMOworCXU4IGRldl90eXBlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBoX3Byb2Nlc3NvciAhPSBOVUxMKTsKKworCWlmIChwcl9jdHh0LT5ocHJvY2Vzc29yKSB7CisJCSpwaF9wcm9jZXNzb3IgPSBwcl9jdHh0LT5ocHJvY2Vzc29yOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIEdldCB0aGUgRHJpdmVyIGFuZCBNYW5hZ2VyIE9iamVjdCBIYW5kbGVzICovCisJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaGRydl9vYmosIFJFR19EUlZfT0JKRUNUKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gY2ZnX2dldF9vYmplY3QoKHUzMiAqKSAmaG1ncl9vYmosIFJFR19NR1JfT0JKRUNUKTsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIEdldCB0aGUgRGV2aWNlIE9iamVjdCAqLworCQlzdGF0dXMgPSBkcnZfZ2V0X2Rldl9vYmplY3QocHJvY2Vzc29yX2lkLCBoZHJ2X29iaiwgJmhkZXZfb2JqKTsKKwl9CisJaWYgKCFzdGF0dXMpCisJCXN0YXR1cyA9IGRldl9nZXRfZGV2X3R5cGUoaGRldl9vYmosICZkZXZfdHlwZSk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgY3JlYXRlIHRoZSBQcm9jZWVzb3Igb2JqZWN0OiAqLworCXBfcHJvY19vYmplY3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkvKiBGaWxsIG91dCB0aGUgUHJvY2Vzc29yIE9iamVjdDogKi8KKwlpZiAocF9wcm9jX29iamVjdCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCXBfcHJvY19vYmplY3QtPmhkZXZfb2JqID0gaGRldl9vYmo7CisJcF9wcm9jX29iamVjdC0+aG1ncl9vYmogPSBobWdyX29iajsKKwlwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzb3JfaWQgPSBkZXZfdHlwZTsKKwkvKiBTdG9yZSBUR0lEIGluc3RlYWQgb2YgcHJvY2VzcyBoYW5kbGUgKi8KKwlwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzID0gY3VycmVudC0+dGdpZDsKKworCUlOSVRfTElTVF9IRUFEKCZwX3Byb2Nfb2JqZWN0LT5wcm9jX2xpc3QpOworCisJaWYgKGF0dHJfaW4pCisJCXBfcHJvY19vYmplY3QtPnV0aW1lb3V0ID0gYXR0cl9pbi0+dXRpbWVvdXQ7CisJZWxzZQorCQlwX3Byb2Nfb2JqZWN0LT51dGltZW91dCA9IFBST0NfREZMVF9USU1FT1VUOworCisJc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMpOworCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCSAgICAgJnBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCk7CisJCWlmIChzdGF0dXMpCisJCQlrZnJlZShwX3Byb2Nfb2JqZWN0KTsKKwl9IGVsc2UKKwkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyogQ3JlYXRlIHRoZSBOb3RpZmljYXRpb24gT2JqZWN0ICovCisJLyogVGhpcyBpcyBjcmVhdGVkIHdpdGggbm8gZXZlbnQgbWFzaywgbm8gbm90aWZ5IG1hc2sKKwkgKiBhbmQgbm8gdmFsaWQgaGFuZGxlIHRvIHRoZSBub3RpZmljYXRpb24uIFRoZXkgYWxsIGdldAorCSAqIGZpbGxlZCB1cCB3aGVuIHByb2NfcmVnaXN0ZXJfbm90aWZ5IGlzIGNhbGxlZCAqLworCXBfcHJvY19vYmplY3QtPm50Znlfb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG50Znlfb2JqZWN0KSwKKwkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopCisJCW50ZnlfaW5pdChwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaik7CisJZWxzZQorCQlzdGF0dXMgPSAtRU5PTUVNOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogSW5zZXJ0IHRoZSBQcm9jZXNzb3IgT2JqZWN0IGludG8gdGhlIERFViBMaXN0LgorCQkgKiBSZXR1cm4gaGFuZGxlIHRvIHRoaXMgUHJvY2Vzc29yIE9iamVjdDoKKwkJICogRmluZCBvdXQgaWYgdGhlIERldmljZSBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIGEKKwkJICogUHJvY2Vzc29yLiBJZiBzbywgcmV0dXJuIEFscmVhZHlBdHRhY2hlZCBzdGF0dXMgKi8KKwkJbHN0X2luaXRfZWxlbSgmcF9wcm9jX29iamVjdC0+bGluayk7CisJCXN0YXR1cyA9IGRldl9pbnNlcnRfcHJvY19vYmplY3QocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCQkodTMyKSBwX3Byb2Nfb2JqZWN0LAorCQkJCQkJJnBfcHJvY19vYmplY3QtPgorCQkJCQkJaXNfYWxyZWFkeV9hdHRhY2hlZCk7CisJCWlmICghc3RhdHVzKSB7CisJCQlpZiAocF9wcm9jX29iamVjdC0+aXNfYWxyZWFkeV9hdHRhY2hlZCkKKwkJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKSB7CisJCQkJbnRmeV9kZWxldGUocF9wcm9jX29iamVjdC0+bnRmeV9vYmopOworCQkJCWtmcmVlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJCX0KKworCQkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisJCX0KKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSpwaF9wcm9jZXNzb3IgPSAodm9pZCAqKXBfcHJvY19vYmplY3Q7CisJCQlwcl9jdHh0LT5ocHJvY2Vzc29yID0gKnBoX3Byb2Nlc3NvcjsKKwkJCSh2b2lkKXByb2Nfbm90aWZ5X2NsaWVudHMocF9wcm9jX29iamVjdCwKKwkJCQkJCSAgRFNQX1BST0NFU1NPUkFUVEFDSCk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBEb24ndCBsZWFrIG1lbW9yeSBpZiBzdGF0dXMgaXMgZmFpbGVkICovCisJCWtmcmVlKHBfcHJvY19vYmplY3QpOworCX0KK2Z1bmNfZW5kOgorCURCQ19FTlNVUkUoKHN0YXR1cyA9PSAtRVBFUk0gJiYgKnBoX3Byb2Nlc3NvciA9PSBOVUxMKSB8fAorCQkgICAoIXN0YXR1cyAmJiBwX3Byb2Nfb2JqZWN0KSB8fAorCQkgICAoc3RhdHVzID09IDAgJiYgcF9wcm9jX29iamVjdCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBnZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLAorCQkJCXN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaiwKKwkJCQl1MzIgc2l6ZSwgY2hhciAqZXhlY19maWxlKQoreworCXU4IGRldl90eXBlOworCXMzMiBsZW47CisKKwlkZXZfZ2V0X2Rldl90eXBlKGhkZXZfb2JqLCAodTggKikgJmRldl90eXBlKTsKKwlpZiAoZGV2X3R5cGUgPT0gRFNQX1VOSVQpIHsKKwkJcmV0dXJuIGNmZ19nZXRfZXhlY19maWxlKGRldl9ub2RlX29iaiwgc2l6ZSwgZXhlY19maWxlKTsKKwl9IGVsc2UgaWYgKGRldl90eXBlID09IElWQV9VTklUKSB7CisJCWlmIChpdmFfaW1nKSB7CisJCQlsZW4gPSBzdHJsZW4oaXZhX2ltZyk7CisJCQlzdHJuY3B5KGV4ZWNfZmlsZSwgaXZhX2ltZywgbGVuICsgMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2F1dG9fc3RhcnQgPT09PT09PT0gPQorICogIFB1cnBvc2U6CisgKiAgICAgIEEgUGFydGljdWxhciBkZXZpY2UgZ2V0cyBsb2FkZWQgd2l0aCB0aGUgZGVmYXVsdCBpbWFnZQorICogICAgICBpZiB0aGUgQXV0b1N0YXJ0IGZsYWcgaXMgc2V0LgorICogIFBhcmFtZXRlcnM6CisgKiAgICAgIGhkZXZfb2JqOiAgICAgSGFuZGxlIHRvIHRoZSBEZXZpY2UKKyAqICBSZXR1cm5zOgorICogICAgICAwOiAgIE9uIFN1Y2Nlc3NmdWwgTG9hZGluZworICogICAgICAtRVBFUk0gIEdlbmVyYWwgRmFpbHVyZQorICogIFJlcXVpcmVzOgorICogICAgICBoZGV2X29iaiAhPSBOVUxMCisgKiAgRW5zdXJlczoKKyAqLworaW50IHByb2NfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCSAgIHN0cnVjdCBkZXZfb2JqZWN0ICpoZGV2X29iaikKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdDsKKwljaGFyIHN6X2V4ZWNfZmlsZVtNQVhDTURMSU5FTEVOXTsKKwljaGFyICphcmd2WzJdOworCXN0cnVjdCBtZ3Jfb2JqZWN0ICpobWdyX29iaiA9IE5VTEw7CisJdTggZGV2X3R5cGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoZGV2X25vZGVfb2JqICE9IE5VTEwpOworCURCQ19SRVFVSVJFKGhkZXZfb2JqICE9IE5VTEwpOworCisJLyogQ3JlYXRlIGEgRHVtbXkgUFJPQyBPYmplY3QgKi8KKwlzdGF0dXMgPSBjZmdfZ2V0X29iamVjdCgodTMyICopICZobWdyX29iaiwgUkVHX01HUl9PQkpFQ1QpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlwX3Byb2Nfb2JqZWN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByb2Nfb2JqZWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBfcHJvY19vYmplY3QgPT0gTlVMTCkgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiA9IGhkZXZfb2JqOworCXBfcHJvY19vYmplY3QtPmhtZ3Jfb2JqID0gaG1ncl9vYmo7CisJc3RhdHVzID0gZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosICZwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMpOworCWlmICghc3RhdHVzKQorCQlzdGF0dXMgPSBkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLAorCQkJCQkgICAgICZwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJLyogU3RvcCB0aGUgRGV2aWNlLCBwdXQgaXQgaW50byBzdGFuZGJ5IG1vZGUgKi8KKwlzdGF0dXMgPSBwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7CisKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIEdldCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIGZvciB0aGlzIGJvYXJkLi4uICovCisJZGV2X2dldF9kZXZfdHlwZShoZGV2X29iaiwgKHU4ICopICZkZXZfdHlwZSk7CisJcF9wcm9jX29iamVjdC0+cHJvY2Vzc29yX2lkID0gZGV2X3R5cGU7CisJc3RhdHVzID0gZ2V0X2V4ZWNfZmlsZShkZXZfbm9kZV9vYmosIGhkZXZfb2JqLCBzaXplb2Yoc3pfZXhlY19maWxlKSwKKwkJCSAgICAgICBzel9leGVjX2ZpbGUpOworCWlmICghc3RhdHVzKSB7CisJCWFyZ3ZbMF0gPSBzel9leGVjX2ZpbGU7CisJCWFyZ3ZbMV0gPSBOVUxMOworCQkvKiAuLi5hbmQgdHJ5IHRvIGxvYWQgaXQ6ICovCisJCXN0YXR1cyA9IHByb2NfbG9hZChwX3Byb2Nfb2JqZWN0LCAxLCAoY29uc3QgY2hhciAqKilhcmd2LCBOVUxMKTsKKwkJaWYgKCFzdGF0dXMpCisJCQlzdGF0dXMgPSBwcm9jX3N0YXJ0KHBfcHJvY19vYmplY3QpOworCX0KKwlrZnJlZShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmKTsKKwlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0gTlVMTDsKK2Z1bmNfY29udDoKKwlrZnJlZShwX3Byb2Nfb2JqZWN0KTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19jdHJsID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGFzcyBjb250cm9sIGluZm9ybWF0aW9uIHRvIHRoZSBHUFAgZGV2aWNlIGRyaXZlciBtYW5hZ2luZyB0aGUKKyAqICAgICAgRFNQIHByb2Nlc3Nvci4KKyAqCisgKiAgICAgIFRoaXMgd2lsbCBiZSBhbiBPRU0tb25seSBmdW5jdGlvbiwgYW5kIG5vdCBwYXJ0IG9mIHRoZSBEU1AvQklPUyBCcmlkZ2UKKyAqICAgICAgYXBwbGljYXRpb24gZGV2ZWxvcGVyJ3MgQVBJLgorICogICAgICBDYWxsIHRoZSBicmlkZ2VfZGV2X2N0cmwgZnhuIHdpdGggdGhlIEFyZ3VtZW50LiBUaGlzIGlzIGEgU3luY2hyb25vdXMKKyAqICAgICAgT3BlcmF0aW9uLiBhcmcgY2FuIGJlIG51bGwuCisgKi8KK2ludCBwcm9jX2N0cmwodm9pZCAqaHByb2Nlc3NvciwgdTMyIGR3X2NtZCwgc3RydWN0IGRzcF9jYmRhdGEgKiBhcmcpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gaHByb2Nlc3NvcjsKKwl1MzIgdGltZW91dCA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBpbnRlcmNlcHQgUFdSIGRlZXAgc2xlZXAgY29tbWFuZCAqLworCQlpZiAoZHdfY21kID09IEJSRElPQ1RMX0RFRVBTTEVFUCkgeworCQkJdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsKKwkJCXN0YXR1cyA9IHB3cl9zbGVlcF9kc3AoUFdSX0RFRVBTTEVFUCwgdGltZW91dCk7CisJCX0KKwkJLyogaW50ZXJjZXB0IFBXUiBlbWVyZ2VuY3kgc2xlZXAgY29tbWFuZCAqLworCQllbHNlIGlmIChkd19jbWQgPT0gQlJESU9DVExfRU1FUkdFTkNZU0xFRVApIHsKKwkJCXRpbWVvdXQgPSBhcmctPmNiX2RhdGE7CisJCQlzdGF0dXMgPSBwd3Jfc2xlZXBfZHNwKFBXUl9FTUVSR0VOQ1lERUVQU0xFRVAsIHRpbWVvdXQpOworCQl9IGVsc2UgaWYgKGR3X2NtZCA9PSBQV1JfREVFUFNMRUVQKSB7CisJCQkvKiB0aW1lb3V0ID0gYXJnLT5jYl9kYXRhOyAqLworCQkJc3RhdHVzID0gcHdyX3NsZWVwX2RzcChQV1JfREVFUFNMRUVQLCB0aW1lb3V0KTsKKwkJfQorCQkvKiBpbnRlcmNlcHQgUFdSIHdha2UgY29tbWFuZHMgKi8KKwkJZWxzZSBpZiAoZHdfY21kID09IEJSRElPQ1RMX1dBS0VVUCkgeworCQkJdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsKKwkJCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lb3V0KTsKKwkJfSBlbHNlIGlmIChkd19jbWQgPT0gUFdSX1dBS0VVUCkgeworCQkJLyogdGltZW91dCA9IGFyZy0+Y2JfZGF0YTsgKi8KKwkJCXN0YXR1cyA9IHB3cl93YWtlX2RzcCh0aW1lb3V0KTsKKwkJfSBlbHNlCisJCSAgICBpZiAoISgoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkKKwkJCQkgICAgICAocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0LCBkd19jbWQsCisJCQkJICAgICAgIGFyZykpKSB7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZGV0YWNoID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGVzdHJveXMgdGhlICBQcm9jZXNzb3IgT2JqZWN0LiBSZW1vdmVzIHRoZSBub3RpZmljYXRpb24gZnJvbSB0aGUgRGV2CisgKiAgICAgIExpc3QuCisgKi8KK2ludCBwcm9jX2RldGFjaChzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByX2N0eHQtPmhwcm9jZXNzb3I7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBOb3RpZnkgdGhlIENsaWVudCAqLworCQludGZ5X25vdGlmeShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaiwgRFNQX1BST0NFU1NPUkRFVEFDSCk7CisJCS8qIFJlbW92ZSB0aGUgbm90aWZpY2F0aW9uIG1lbW9yeSAqLworCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopIHsKKwkJCW50ZnlfZGVsZXRlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJCWtmcmVlKHBfcHJvY19vYmplY3QtPm50Znlfb2JqKTsKKwkJfQorCisJCWtmcmVlKHBfcHJvY19vYmplY3QtPnBzel9sYXN0X2NvZmYpOworCQlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0gTlVMTDsKKwkJLyogUmVtb3ZlIHRoZSBQcm9jIGZyb20gdGhlIERFViBMaXN0ICovCisJCSh2b2lkKWRldl9yZW1vdmVfcHJvY19vYmplY3QocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCSAgICAgKHUzMikgcF9wcm9jX29iamVjdCk7CisJCS8qIEZyZWUgdGhlIFByb2Nlc3NvciBPYmplY3QgKi8KKwkJa2ZyZWUocF9wcm9jX29iamVjdCk7CisJCXByX2N0eHQtPmhwcm9jZXNzb3IgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2VudW1fbm9kZXMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgYW5kIGdldCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IG5vZGVzIGFsbG9jYXRlZAorICogICAgICBvbiBhIERTUCBwcm9jZXNzb3IuCisgKi8KK2ludCBwcm9jX2VudW1fbm9kZXModm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqKm5vZGVfdGFiLAorCQkJICAgdTMyIG5vZGVfdGFiX3NpemUsIHUzMiAqcHVfbnVtX25vZGVzLAorCQkJICAgdTMyICpwdV9hbGxvY2F0ZWQpCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3Qgbm9kZV9tZ3IgKmhub2RlX21nciA9IE5VTEw7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUobm9kZV90YWIgIT0gTlVMTCB8fCBub2RlX3RhYl9zaXplID09IDApOworCURCQ19SRVFVSVJFKHB1X251bV9ub2RlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwdV9hbGxvY2F0ZWQgIT0gTlVMTCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQlpZiAoIShkZXZfZ2V0X25vZGVfbWFuYWdlcihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwKKwkJCQkJCSAgICAgICAmaG5vZGVfbWdyKSkpIHsKKwkJCWlmIChobm9kZV9tZ3IpIHsKKwkJCQlzdGF0dXMgPSBub2RlX2VudW1fbm9kZXMoaG5vZGVfbWdyLCBub2RlX3RhYiwKKwkJCQkJCQkgbm9kZV90YWJfc2l6ZSwKKwkJCQkJCQkgcHVfbnVtX25vZGVzLAorCQkJCQkJCSBwdV9hbGxvY2F0ZWQpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDYWNoZSBvcGVyYXRpb24gYWdhaW5zdCBrZXJuZWwgYWRkcmVzcyBpbnN0ZWFkIG9mIHVzZXJzICovCitzdGF0aWMgaW50IGJ1aWxkX2RtYV9zZyhzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCQlzc2l6ZV90IGxlbiwgaW50IHBnX2kpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJc3NpemVfdCByZXN0OworCWludCByZXQgPSAwLCBpID0gMDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gbWFwX29iai0+ZG1hX2luZm8uc2c7CisKKwl3aGlsZSAobGVuKSB7CisJCXBhZ2UgPSBnZXRfbWFwcGluZ19wYWdlKG1hcF9vYmosIHBnX2kpOworCQlpZiAoIXBhZ2UpIHsKKwkJCXByX2VycigiJXM6IG5vIHBhZ2UgZm9yICUwOGx4XG4iLCBfX2Z1bmNfXywgc3RhcnQpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKElTX0VSUihwYWdlKSkgeworCQkJcHJfZXJyKCIlczogZXJyIHBhZ2UgZm9yICUwOGx4KCVsdSlcbiIsIF9fZnVuY19fLCBzdGFydCwKKwkJCSAgICAgICBQVFJfRVJSKHBhZ2UpKTsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW9mZnNldCA9IHN0YXJ0ICYgflBBR0VfTUFTSzsKKwkJcmVzdCA9IG1pbl90KHNzaXplX3QsIFBBR0VfU0laRSAtIG9mZnNldCwgbGVuKTsKKworCQlzZ19zZXRfcGFnZSgmc2dbaV0sIHBhZ2UsIHJlc3QsIG9mZnNldCk7CisKKwkJbGVuIC09IHJlc3Q7CisJCXN0YXJ0ICs9IHJlc3Q7CisJCXBnX2krKywgaSsrOworCX0KKworCWlmIChpICE9IG1hcF9vYmotPmRtYV9pbmZvLm51bV9wYWdlcykgeworCQlwcl9lcnIoIiVzOiBiYWQgbnVtYmVyIG9mIHNnIGl0ZXJhdGlvbnNcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZW1vcnlfcmVnYWluX293bmVyc2hpcChzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNzaXplX3QgbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3BhZ2UgPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbGFzdF9kYXRhX3BhZ2UgPSAoKHUzMikoc3RhcnQgKyBsZW4gLSAxKSA+PiBQQUdFX1NISUZUKTsKKwkvKiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoaXMgYXJlYSBzcGFucyAqLworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCXN0cnVjdCBicmlkZ2VfZG1hX21hcF9pbmZvICpkbWFfaW5mbyA9ICZtYXBfb2JqLT5kbWFfaW5mbzsKKworCWlmICghZG1hX2luZm8tPnNnKQorCQlnb3RvIG91dDsKKworCWlmIChkbWFfaW5mby0+ZGlyICE9IGRpciB8fCBkbWFfaW5mby0+bnVtX3BhZ2VzICE9IG51bV9wYWdlcykgeworCQlwcl9lcnIoIiVzOiBkbWEgaW5mbyBkb2Vzbid0IG1hdGNoIGdpdmVuIHBhcmFtc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkbWFfdW5tYXBfc2coYnJpZGdlLCBkbWFfaW5mby0+c2csIG51bV9wYWdlcywgZG1hX2luZm8tPmRpcik7CisKKwlwcl9kZWJ1ZygiJXM6IGRtYV9tYXBfc2cgdW5tYXBwZWRcbiIsIF9fZnVuY19fKTsKKworCWtmcmVlKGRtYV9pbmZvLT5zZyk7CisKKwltYXBfb2JqLT5kbWFfaW5mby5zZyA9IE5VTEw7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWNoZSBvcGVyYXRpb24gYWdhaW5zdCBrZXJuZWwgYWRkcmVzcyBpbnN0ZWFkIG9mIHVzZXJzICovCitzdGF0aWMgaW50IG1lbW9yeV9naXZlX293bmVyc2hpcChzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmosCisJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNzaXplX3QgbGVuLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJaW50IHBnX2ksIHJldCwgc2dfbnVtOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9kYXRhX3BhZ2UgPSBzdGFydCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbGFzdF9kYXRhX3BhZ2UgPSAoKHUzMikoc3RhcnQgKyBsZW4gLSAxKSA+PiBQQUdFX1NISUZUKTsKKwkvKiBjYWxjdWxhdGluZyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRoaXMgYXJlYSBzcGFucyAqLworCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJcGdfaSA9IGZpbmRfZmlyc3RfcGFnZV9pbl9jYWNoZShtYXBfb2JqLCBzdGFydCk7CisJaWYgKHBnX2kgPCAwKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBmaW5kIGZpcnN0IHBhZ2UgaW4gY2FjaGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc2cgPSBrY2FsbG9jKG51bV9wYWdlcywgc2l6ZW9mKCpzZyksIEdGUF9LRVJORUwpOworCWlmICghc2cpIHsKKwkJcHJfZXJyKCIlczoga2NhbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2dfaW5pdF90YWJsZShzZywgbnVtX3BhZ2VzKTsKKworCS8qIGNsZWFudXAgYSBwcmV2aW91cyBzZyBhbGxvY2F0aW9uICovCisJLyogdGhpcyBtYXkgaGFwcGVuIGlmIGFwcGxpY2F0aW9uIGRvZXNuJ3Qgc2lnbmFsIGZvciBlL28gRE1BICovCisJa2ZyZWUobWFwX29iai0+ZG1hX2luZm8uc2cpOworCisJbWFwX29iai0+ZG1hX2luZm8uc2cgPSBzZzsKKwltYXBfb2JqLT5kbWFfaW5mby5kaXIgPSBkaXI7CisJbWFwX29iai0+ZG1hX2luZm8ubnVtX3BhZ2VzID0gbnVtX3BhZ2VzOworCisJcmV0ID0gYnVpbGRfZG1hX3NnKG1hcF9vYmosIHN0YXJ0LCBsZW4sIHBnX2kpOworCWlmIChyZXQpCisJCWdvdG8ga2ZyZWVfc2c7CisKKwlzZ19udW0gPSBkbWFfbWFwX3NnKGJyaWRnZSwgc2csIG51bV9wYWdlcywgZGlyKTsKKwlpZiAoc2dfbnVtIDwgMSkgeworCQlwcl9lcnIoIiVzOiBkbWFfbWFwX3NnIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCBzZ19udW0pOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGtmcmVlX3NnOworCX0KKworCXByX2RlYnVnKCIlczogZG1hX21hcF9zZyBtYXBwZWQgJWQgZWxlbWVudHNcbiIsIF9fZnVuY19fLCBzZ19udW0pOworCW1hcF9vYmotPmRtYV9pbmZvLnNnX251bSA9IHNnX251bTsKKworCXJldHVybiAwOworCitrZnJlZV9zZzoKKwlrZnJlZShzZyk7CisJbWFwX29iai0+ZG1hX2luZm8uc2cgPSBOVUxMOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCBwcm9jX2JlZ2luX2RtYSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLAorCQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwkvKiBLZWVwIFNUQVRVUyBoZXJlIGZvciBmdXR1cmUgYWRkaXRpb25zIHRvIHRoaXMgZnVuY3Rpb24gKi8KKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0ID0gKHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKikgaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwlpZiAoIXByX2N0eHQpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXByX2RlYnVnKCIlczogYWRkciAweCV4LCBzaXplIDB4JXgsIHR5cGUgJWRcbiIsIF9fZnVuY19fLAorCQkJCQkJCSh1MzIpcG1wdV9hZGRyLAorCQkJCQkJCXVsX3NpemUsIGRpcik7CisKKwkvKiBmaW5kIHJlcXVlc3RlZCBtZW1vcnkgYXJlIGluIGNhY2hlZCBtYXBwaW5nIGluZm9ybWF0aW9uICovCisJbWFwX29iaiA9IGZpbmRfY29udGFpbmluZ19tYXBwaW5nKHByX2N0eHQsICh1MzIpIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJaWYgKCFtYXBfb2JqKSB7CisJCXByX2VycigiJXM6IGZpbmRfY29udGFpbmluZ19tYXBwaW5nIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKG1lbW9yeV9naXZlX293bmVyc2hpcChtYXBfb2JqLCAodTMyKSBwbXB1X2FkZHIsIHVsX3NpemUsIGRpcikpIHsKKwkJcHJfZXJyKCIlczogSW5WYWxpZCBhZGRyZXNzIHBhcmFtZXRlcnMgJXAgJXhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfQorCitlcnJfb3V0OgorCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHByb2NfZW5kX2RtYSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwbXB1X2FkZHIsIHUzMiB1bF9zaXplLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8qIEtlZXAgU1RBVFVTIGhlcmUgZm9yIGZ1dHVyZSBhZGRpdGlvbnMgdG8gdGhpcyBmdW5jdGlvbiAqLworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQgPSAoc3RydWN0IHByb2Nlc3NfY29udGV4dCAqKSBocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fbWFwX29iamVjdCAqbWFwX29iajsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghcHJfY3R4dCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcHJfZGVidWcoIiVzOiBhZGRyIDB4JXgsIHNpemUgMHgleCwgdHlwZSAlZFxuIiwgX19mdW5jX18sCisJCQkJCQkJKHUzMilwbXB1X2FkZHIsCisJCQkJCQkJdWxfc2l6ZSwgZGlyKTsKKworCS8qIGZpbmQgcmVxdWVzdGVkIG1lbW9yeSBhcmUgaW4gY2FjaGVkIG1hcHBpbmcgaW5mb3JtYXRpb24gKi8KKwltYXBfb2JqID0gZmluZF9jb250YWluaW5nX21hcHBpbmcocHJfY3R4dCwgKHUzMikgcG1wdV9hZGRyLCB1bF9zaXplKTsKKwlpZiAoIW1hcF9vYmopIHsKKwkJcHJfZXJyKCIlczogZmluZF9jb250YWluaW5nX21hcHBpbmcgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAobWVtb3J5X3JlZ2Fpbl9vd25lcnNoaXAobWFwX29iaiwgKHUzMikgcG1wdV9hZGRyLCB1bF9zaXplLCBkaXIpKSB7CisJCXByX2VycigiJXM6IEluVmFsaWQgYWRkcmVzcyBwYXJhbWV0ZXJzICVwICV4XG4iLAorCQkgICAgICAgX19mdW5jX18sIHBtcHVfYWRkciwgdWxfc2l6ZSk7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKK2Vycl9vdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2ZsdXNoX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgRmx1c2ggY2FjaGUKKyAqLworaW50IHByb2NfZmx1c2hfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsIHZvaWQgKnBtcHVfYWRkciwKKwkJCSAgICAgdTMyIHVsX3NpemUsIHUzMiB1bF9mbGFncykKK3sKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKworCXJldHVybiBwcm9jX2JlZ2luX2RtYShocHJvY2Vzc29yLCBwbXB1X2FkZHIsIHVsX3NpemUsIGRpcik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19pbnZhbGlkYXRlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgSW52YWxpZGF0ZXMgdGhlIG1lbW9yeSBzcGVjaWZpZWQKKyAqLworaW50IHByb2NfaW52YWxpZGF0ZV9tZW1vcnkodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgc2l6ZSkKK3sKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisKKwlyZXR1cm4gcHJvY19iZWdpbl9kbWEoaHByb2Nlc3NvciwgcG1wdV9hZGRyLCBzaXplLCBkaXIpOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Jlc291cmNlX2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBFbnVtZXJhdGUgdGhlIHJlc291cmNlcyBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIGEgcHJvY2Vzc29yLgorICovCitpbnQgcHJvY19nZXRfcmVzb3VyY2VfaW5mbyh2b2lkICpocHJvY2Vzc29yLCB1MzIgcmVzb3VyY2VfdHlwZSwKKwkJCQkgIHN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvICpyZXNvdXJjZV9pbmZvLAorCQkJCSAgdTMyIHJlc291cmNlX2luZm9fc2l6ZSkKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBub2RlX21nciAqaG5vZGVfbWdyID0gTlVMTDsKKwlzdHJ1Y3Qgbmxkcl9vYmplY3QgKm5sZHJfb2JqID0gTlVMTDsKKwlzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnJtbSA9IE5VTEw7CisJc3RydWN0IGlvX21nciAqaGlvX21nciA9IE5VTEw7CS8qIElPIG1hbmFnZXIgaGFuZGxlICovCisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocmVzb3VyY2VfaW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZXNvdXJjZV9pbmZvX3NpemUgPj0gc2l6ZW9mKHN0cnVjdCBkc3BfcmVzb3VyY2VpbmZvKSk7CisKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJc3dpdGNoIChyZXNvdXJjZV90eXBlKSB7CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOREFSQU06CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOU0FSQU06CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlORVhURVJOQUw6CisJY2FzZSBEU1BfUkVTT1VSQ0VfRFlOU1JBTToKKwkJc3RhdHVzID0gZGV2X2dldF9ub2RlX21hbmFnZXIocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCSAgICAgICZobm9kZV9tZ3IpOworCQlpZiAoIWhub2RlX21ncikgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKworCQlzdGF0dXMgPSBub2RlX2dldF9ubGRyX29iaihobm9kZV9tZ3IsICZubGRyX29iaik7CisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPSBubGRyX2dldF9ybW1fbWFuYWdlcihubGRyX29iaiwgJnJtbSk7CisJCQlpZiAocm1tKSB7CisJCQkJaWYgKCFybW1fc3RhdChybW0sCisJCQkJCSAgICAgIChlbnVtIGRzcF9tZW10eXBlKXJlc291cmNlX3R5cGUsCisJCQkJCSAgICAgIChzdHJ1Y3QgZHNwX21lbXN0YXQgKikKKwkJCQkJICAgICAgJihyZXNvdXJjZV9pbmZvLT5yZXN1bHQuCisJCQkJCQltZW1fc3RhdCkpKQorCQkJCQlzdGF0dXMgPSAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSAtRUZBVUxUOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRFNQX1JFU09VUkNFX1BST0NMT0FEOgorCQlzdGF0dXMgPSBkZXZfZ2V0X2lvX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhpb19tZ3IpOworCQlpZiAoaGlvX21ncikKKwkJCXN0YXR1cyA9CisJCQkgICAgcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT4KKwkJCSAgICBwZm5faW9fZ2V0X3Byb2NfbG9hZChoaW9fbWdyLAorCQkJCQkJIChzdHJ1Y3QgZHNwX3Byb2Nsb2Fkc3RhdCAqKQorCQkJCQkJICYocmVzb3VyY2VfaW5mby0+cmVzdWx0LgorCQkJCQkJICAgcHJvY19sb2FkX3N0YXQpKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gLUVQRVJNOworCQlicmVhazsKKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlY3JlbWVudCByZWZlcmVuY2UgY291bnQsIGFuZCBmcmVlIHJlc291cmNlcyB3aGVuIHJlZmVyZW5jZSBjb3VudCBpcworICogICAgICAwLgorICovCit2b2lkIHByb2NfZXhpdCh2b2lkKQoreworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCXJlZnMtLTsKKworCURCQ19FTlNVUkUocmVmcyA+PSAwKTsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBEZXYgT2JqZWN0IGhhbmRsZSBmb3IgYSBnaXZlbiBQcm9jZXNzb3IuCisgKgorICovCitpbnQgcHJvY19nZXRfZGV2X29iamVjdCh2b2lkICpocHJvY2Vzc29yLAorCQkJICAgICAgIHN0cnVjdCBkZXZfb2JqZWN0ICoqZGV2aWNlX29iaikKK3sKKwlpbnQgc3RhdHVzID0gLUVQRVJNOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGRldmljZV9vYmogIT0gTlVMTCk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkqZGV2aWNlX29iaiA9IHBfcHJvY19vYmplY3QtPmhkZXZfb2JqOworCQlzdGF0dXMgPSAwOworCX0gZWxzZSB7CisJCSpkZXZpY2Vfb2JqID0gTlVMTDsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICpkZXZpY2Vfb2JqICE9IE5VTEwpIHx8CisJCSAgIChzdGF0dXMgJiYgKmRldmljZV9vYmogPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX2dldF9zdGF0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlcG9ydCB0aGUgc3RhdGUgb2YgdGhlIHNwZWNpZmllZCBEU1AgcHJvY2Vzc29yLgorICovCitpbnQgcHJvY19nZXRfc3RhdGUodm9pZCAqaHByb2Nlc3NvciwKKwkJCSAgc3RydWN0IGRzcF9wcm9jZXNzb3JzdGF0ZSAqcHJvY19zdGF0ZV9vYmosCisJCQkgIHUzMiBzdGF0ZV9pbmZvX3NpemUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisJaW50IGJyZF9zdGF0dXM7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUocHJvY19zdGF0ZV9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoc3RhdGVfaW5mb19zaXplID49IHNpemVvZihzdHJ1Y3QgZHNwX3Byb2Nlc3NvcnN0YXRlKSk7CisKKwlpZiAocF9wcm9jX29iamVjdCkgeworCQkvKiBGaXJzdCwgcmV0cmlldmUgQlJEIHN0YXRlIGluZm9ybWF0aW9uICovCisJCXN0YXR1cyA9ICgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykKKwkJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdHVzKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCXN3aXRjaCAoYnJkX3N0YXR1cykgeworCQkJY2FzZSBCUkRfU1RPUFBFRDoKKwkJCQlwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQlJEX1NMRUVQX1RSQU5TSVRJT046CisJCQljYXNlIEJSRF9EU1BfSElCRVJOQVRJT046CisJCQkJLyogRmFsbCB0aHJvdWdoICovCisJCQljYXNlIEJSRF9SVU5OSU5HOgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gUFJPQ19SVU5OSU5HOworCQkJCWJyZWFrOworCQkJY2FzZSBCUkRfTE9BREVEOgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gUFJPQ19MT0FERUQ7CisJCQkJYnJlYWs7CisJCQljYXNlIEJSRF9FUlJPUjoKKwkJCQlwcm9jX3N0YXRlX29iai0+cHJvY19zdGF0ZSA9IFBST0NfRVJST1I7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlID0gMHhGRjsKKwkJCQlzdGF0dXMgPSAtRVBFUk07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzLCByZXN1bHRzOiBzdGF0dXM6IDB4JXggcHJvY19zdGF0ZV9vYmo6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBzdGF0dXMsIHByb2Nfc3RhdGVfb2JqLT5wcm9jX3N0YXRlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3RyYWNlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyYWNlIGJ1ZmZlciwgbG9jYXRlZCBvbiB0aGUKKyAqICAgICAgUHJvY2Vzc29yLiAgUHJlZGVmaW5lZCBzeW1ib2xzIGZvciB0aGUgdHJhY2UgYnVmZmVyIG11c3QgaGF2ZSBiZWVuCisgKiAgICAgIGNvbmZpZ3VyZWQgaW50byB0aGUgRFNQIGV4ZWN1dGFibGUuCisgKiAgRGV0YWlsczoKKyAqICAgICAgV2Ugc3VwcG9ydCB1c2luZyB0aGUgc3ltYm9scyBTWVNfUFVUQ0JFRyBhbmQgU1lTX1BVVENFTkQgdG8gZGVmaW5lIGEKKyAqICAgICAgdHJhY2UgYnVmZmVyLCBvbmx5LiAgVHJlYXQgaXQgYXMgYW4gdW5kb2N1bWVudGVkIGZlYXR1cmUuCisgKiAgICAgIFRoaXMgY2FsbCBpcyBkZXN0cnVjdGl2ZSwgbWVhbmluZyB0aGUgcHJvY2Vzc29yIGlzIHBsYWNlZCBpbiB0aGUgbW9uaXRvcgorICogICAgICBzdGF0ZSBhcyBhIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQgcHJvY19nZXRfdHJhY2Uodm9pZCAqaHByb2Nlc3NvciwgdTggKiBwYnVmLCB1MzIgbWF4X3NpemUpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSAtRU5PU1lTOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSBQUk9DJ3MgcHJpdmF0ZSBzdGF0ZSwga2VlcGluZyBhIHJlZmVyZW5jZSBjb3VudCBvbiBlYWNoIGNhbGwKKyAqLworYm9vbCBwcm9jX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJaWYgKHJldCkKKwkJcmVmcysrOworCisJREJDX0VOU1VSRSgocmV0ICYmIChyZWZzID4gMCkpIHx8ICghcmV0ICYmIChyZWZzID49IDApKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IHByb2NfbG9hZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2V0IGEgcHJvY2Vzc29yIGFuZCBsb2FkIGEgbmV3IGJhc2UgcHJvZ3JhbSBpbWFnZS4KKyAqICAgICAgVGhpcyB3aWxsIGJlIGFuIE9FTS1vbmx5IGZ1bmN0aW9uLCBhbmQgbm90IHBhcnQgb2YgdGhlIERTUC9CSU9TIEJyaWRnZQorICogICAgICBhcHBsaWNhdGlvbiBkZXZlbG9wZXIncyBBUEkuCisgKi8KK2ludCBwcm9jX2xvYWQodm9pZCAqaHByb2Nlc3NvciwgY29uc3QgczMyIGFyZ2NfaW5kZXgsCisJCSAgICAgY29uc3QgY2hhciAqKnVzZXJfYXJncywgY29uc3QgY2hhciAqKnVzZXJfZW52cCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgaW9fbWdyICpoaW9fbWdyOwkvKiBJTyBtYW5hZ2VyIGhhbmRsZSAqLworCXN0cnVjdCBtc2dfbWdyICpobXNnX21ncjsKKwlzdHJ1Y3QgY29kX21hbmFnZXIgKmNvZF9tZ3I7CS8qIENvZGUgbWFuYWdlciBoYW5kbGUgKi8KKwljaGFyICpwYXJndjA7CQkvKiB0ZW1wIGFyZ3ZbMF0gcHRyICovCisJY2hhciAqKm5ld19lbnZwOwkvKiBVcGRhdGVkIGVudnBbXSBhcnJheS4gKi8KKwljaGFyIHN6X3Byb2NfaWRbTUFYUFJPQ0lETEVOXTsJLyogU2l6ZSBvZiAiUFJPQ19JRD08bj4iICovCisJczMyIGVudnBfZWxlbXM7CQkvKiBOdW0gZWxlbWVudHMgaW4gZW52cFtdLiAqLworCXMzMiBjbmV3X2VudnA7CQkvKiAiICAiIGluIG5ld19lbnZwW10gKi8KKwlzMzIgbnByb2NfaWQgPSAwOwkvKiBBbnRpY2lwYXRlIE1QIHZlcnNpb24uICovCisJc3RydWN0IGRjZF9tYW5hZ2VyICpoZGNkX2hhbmRsZTsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsKKwl1MzIgZHdfZXh0X2VuZDsKKwl1MzIgcHJvY19pZDsKKwlpbnQgYnJkX3N0YXRlOworCXN0cnVjdCBkcnZfZGF0YSAqZHJ2X2RhdGFwID0gZGV2X2dldF9kcnZkYXRhKGJyaWRnZSk7CisKKyNpZmRlZiBPUFRfTE9BRF9USU1FX0lOU1RSVU1FTlRBVElPTgorCXN0cnVjdCB0aW1ldmFsIHR2MTsKKwlzdHJ1Y3QgdGltZXZhbCB0djI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1RJRFNQQlJJREdFX0RWRlMpICYmICFkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKKwlzdHJ1Y3QgZHNwYnJpZGdlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkgICAgb21hcF9kc3BicmlkZ2VfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKyNlbmRpZgorCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGFyZ2NfaW5kZXggPiAwKTsKKwlEQkNfUkVRVUlSRSh1c2VyX2FyZ3MgIT0gTlVMTCk7CisKKyNpZmRlZiBPUFRfTE9BRF9USU1FX0lOU1RSVU1FTlRBVElPTgorCWRvX2dldHRpbWVvZmRheSgmdHYxKTsKKyNlbmRpZgorCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlkZXZfZ2V0X2NvZF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosICZjb2RfbWdyKTsKKwlpZiAoIWNvZF9tZ3IpIHsKKwkJc3RhdHVzID0gLUVQRVJNOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlzdGF0dXMgPSBwcm9jX3N0b3AoaHByb2Nlc3Nvcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIFBsYWNlIHRoZSBib2FyZCBpbiB0aGUgbW9uaXRvciBzdGF0ZS4gKi8KKwlzdGF0dXMgPSBwcm9jX21vbml0b3IoaHByb2Nlc3Nvcik7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qIFNhdmUgcHRyIHRvICBvcmlnaW5hbCBhcmd2WzBdLiAqLworCXBhcmd2MCA9IChjaGFyICopdXNlcl9hcmdzWzBdOworCS8qUHJlcGVuZCAiUFJPQ19JRD08bnByb2NfaWQ+InRvIGVudnAgYXJyYXkgZm9yIHRhcmdldC4gKi8KKwllbnZwX2VsZW1zID0gZ2V0X2VudnBfY291bnQoKGNoYXIgKiopdXNlcl9lbnZwKTsKKwljbmV3X2VudnAgPSAoZW52cF9lbGVtcyA/IChlbnZwX2VsZW1zICsgMSkgOiAoZW52cF9lbGVtcyArIDIpKTsKKwluZXdfZW52cCA9IGt6YWxsb2MoY25ld19lbnZwICogc2l6ZW9mKGNoYXIgKiopLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X2VudnApIHsKKwkJc3RhdHVzID0gc25wcmludGYoc3pfcHJvY19pZCwgTUFYUFJPQ0lETEVOLCBQUk9DX0VOVlBST0NJRCwKKwkJCQkgIG5wcm9jX2lkKTsKKwkJaWYgKHN0YXR1cyA9PSAtMSkgeworCQkJZGV2X2RiZyhicmlkZ2UsICIlczogUHJvYyBJRCBzdHJpbmcgb3ZlcmZsb3dcbiIsCisJCQkJX19mdW5jX18pOworCQkJc3RhdHVzID0gLUVQRVJNOworCQl9IGVsc2UgeworCQkJbmV3X2VudnAgPQorCQkJICAgIHByZXBlbmRfZW52cChuZXdfZW52cCwgKGNoYXIgKiopdXNlcl9lbnZwLAorCQkJCQkgZW52cF9lbGVtcywgY25ld19lbnZwLCBzel9wcm9jX2lkKTsKKwkJCS8qIEdldCB0aGUgRENEIEhhbmRsZSAqLworCQkJc3RhdHVzID0gbWdyX2dldF9kY2RfaGFuZGxlKHBfcHJvY19vYmplY3QtPmhtZ3Jfb2JqLAorCQkJCQkJICAgICh1MzIgKikgJmhkY2RfaGFuZGxlKTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggbmV3IGxvYWQsCisJCQkJICogIGNoZWNrIGlmIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIENPRkYKKwkJCQkgKiAgZXhpc3RzLgorCQkJCSAqICBJZiB5ZXMsIHVucmVnaXN0ZXIgbm9kZXMgaW4gcHJldmlvdXNseQorCQkJCSAqICByZWdpc3RlcmVkIENPRkYuICBJZiBhbnkgZXJyb3Igb2NjdXJyZWQsCisJCQkJICogIHNldCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQ09GRiB0byBOVUxMLiAqLworCQkJCWlmIChwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmICE9IE5VTEwpIHsKKwkJCQkJc3RhdHVzID0KKwkJCQkJICAgIGRjZF9hdXRvX3VucmVnaXN0ZXIoaGRjZF9oYW5kbGUsCisJCQkJCQkJCXBfcHJvY19vYmplY3QtPgorCQkJCQkJCQlwc3pfbGFzdF9jb2ZmKTsKKwkJCQkJLyogUmVnYXJkbGVzcyBvZiBhdXRvIHVucmVnaXN0ZXIgc3RhdHVzLAorCQkJCQkgKiAgZnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZAorCQkJCQkgKiAgbWVtb3J5LiAqLworCQkJCQlrZnJlZShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmKTsKKwkJCQkJcF9wcm9jX29iamVjdC0+cHN6X2xhc3RfY29mZiA9IE5VTEw7CisJCQkJfQorCQkJfQorCQkJLyogT24gc3VjY2VzcywgZG8gY29kX29wZW5fYmFzZSgpICovCisJCQlzdGF0dXMgPSBjb2Rfb3Blbl9iYXNlKGNvZF9tZ3IsIChjaGFyICopdXNlcl9hcmdzWzBdLAorCQkJCQkgICAgICAgQ09EX1NZTUIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogQXV0by1yZWdpc3RlciBkYXRhIGJhc2UgKi8KKwkJLyogR2V0IHRoZSBEQ0QgSGFuZGxlICovCisJCXN0YXR1cyA9IG1ncl9nZXRfZGNkX2hhbmRsZShwX3Byb2Nfb2JqZWN0LT5obWdyX29iaiwKKwkJCQkJICAgICh1MzIgKikgJmhkY2RfaGFuZGxlKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCS8qICBBdXRvIHJlZ2lzdGVyIG5vZGVzIGluIHNwZWNpZmllZCBDT0ZGCisJCQkgKiAgZmlsZS4gIElmIHJlZ2lzdHJhdGlvbiBkaWQgbm90IGZhaWwsCisJCQkgKiAgKHN0YXR1cyA9IDAgb3IgLUVBQ0NFUykKKwkJCSAqICBzYXZlIHRoZSBuYW1lIG9mIHRoZSBDT0ZGIGZpbGUgZm9yCisJCQkgKiAgZGUtcmVnaXN0cmF0aW9uIGluIHRoZSBmdXR1cmUuICovCisJCQlzdGF0dXMgPQorCQkJICAgIGRjZF9hdXRvX3JlZ2lzdGVyKGhkY2RfaGFuZGxlLAorCQkJCQkgICAgICAoY2hhciAqKXVzZXJfYXJnc1swXSk7CisJCQlpZiAoc3RhdHVzID09IC1FQUNDRVMpCisJCQkJc3RhdHVzID0gMDsKKworCQkJaWYgKHN0YXR1cykgeworCQkJCXN0YXR1cyA9IC1FUEVSTTsKKwkJCX0gZWxzZSB7CisJCQkJREJDX0FTU0VSVChwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID09CisJCQkJCSAgIE5VTEwpOworCQkJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcHN6TGFzdENvZmYgKi8KKwkJCQlwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmID0KKwkJCQkJCWt6YWxsb2MoKHN0cmxlbih1c2VyX2FyZ3NbMF0pICsKKwkJCQkJCTEpLCBHRlBfS0VSTkVMKTsKKwkJCQkvKiBJZiBtZW1vcnkgYWxsb2NhdGVkLCBzYXZlIENPRkYgZmlsZSBuYW1lICovCisJCQkJaWYgKHBfcHJvY19vYmplY3QtPnBzel9sYXN0X2NvZmYpIHsKKwkJCQkJc3RybmNweShwX3Byb2Nfb2JqZWN0LT5wc3pfbGFzdF9jb2ZmLAorCQkJCQkJKGNoYXIgKil1c2VyX2FyZ3NbMF0sCisJCQkJCQkoc3RybGVuKChjaGFyICopdXNlcl9hcmdzWzBdKSArCisJCQkJCQkgMSkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvKiBVcGRhdGUgc2hhcmVkIG1lbW9yeSBhZGRyZXNzIGFuZCBzaXplICovCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogIENyZWF0ZSB0aGUgbWVzc2FnZSBtYW5hZ2VyLiBUaGlzIG11c3QgYmUgZG9uZQorCQkgKiAgYmVmb3JlIGNhbGxpbmcgdGhlIElPT25Mb2FkZWQgZnVuY3Rpb24uICovCisJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhtc2dfbWdyKTsKKwkJaWYgKCFobXNnX21ncikgeworCQkJc3RhdHVzID0gbXNnX2NyZWF0ZSgmaG1zZ19tZ3IsIHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkgICAgKG1zZ19vbmV4aXQpIG5vZGVfb25fZXhpdCk7CisJCQlEQkNfQVNTRVJUKCFzdGF0dXMpOworCQkJZGV2X3NldF9tc2dfbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCBobXNnX21ncik7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogU2V0IHRoZSBEZXZpY2Ugb2JqZWN0J3MgbWVzc2FnZSBtYW5hZ2VyICovCisJCXN0YXR1cyA9IGRldl9nZXRfaW9fbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCAmaGlvX21ncik7CisJCWlmIChoaW9fbWdyKQorCQkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9pb19vbl9sb2FkZWQpCisJCQkJCQkJCShoaW9fbWdyKTsKKwkJZWxzZQorCQkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogTm93LCBhdHRlbXB0IHRvIGxvYWQgYW4gZXhlYzogKi8KKworCQkvKiBCb29zdCB0aGUgT1BQIGxldmVsIHRvIE1heGltdW0gbGV2ZWwgc3VwcG9ydGVkIGJ5IGJhc2Vwb3J0ICovCisjaWYgZGVmaW5lZChDT05GSUdfVElEU1BCUklER0VfRFZGUykgJiYgIWRlZmluZWQoQ09ORklHX0NQVV9GUkVRKQorCQlpZiAocGRhdGEtPmNwdV9zZXRfZnJlcSkKKwkJCSgqcGRhdGEtPmNwdV9zZXRfZnJlcSkgKHBkYXRhLT5tcHVfc3BlZWRbVkREMV9PUFA1XSk7CisjZW5kaWYKKwkJc3RhdHVzID0gY29kX2xvYWRfYmFzZShjb2RfbWdyLCBhcmdjX2luZGV4LCAoY2hhciAqKil1c2VyX2FyZ3MsCisJCQkJICAgICAgIGRldl9icmRfd3JpdGVfZnhuLAorCQkJCSAgICAgICBwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgTlVMTCk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChzdGF0dXMgPT0gLUVCQURGKSB7CisJCQkJZGV2X2RiZyhicmlkZ2UsICIlczogRmFpbHVyZSB0byBMb2FkIHRoZSBFWEVcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJCWlmIChzdGF0dXMgPT0gLUVTUElQRSkgeworCQkJCXByX2VycigiJXM6IENvdWxkbid0IHBhcnNlIHRoZSBmaWxlXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQl9CisJCX0KKwkJLyogUmVxdWVzdGluZyB0aGUgbG93ZXN0IG9wcCBzdXBwb3J0ZWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19USURTUEJSSURHRV9EVkZTKSAmJiAhZGVmaW5lZChDT05GSUdfQ1BVX0ZSRVEpCisJCWlmIChwZGF0YS0+Y3B1X3NldF9mcmVxKQorCQkJKCpwZGF0YS0+Y3B1X3NldF9mcmVxKSAocGRhdGEtPm1wdV9zcGVlZFtWREQxX09QUDFdKTsKKyNlbmRpZgorCisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIFVwZGF0ZSB0aGUgUHJvY2Vzc29yIHN0YXR1cyB0byBsb2FkZWQgKi8KKwkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc2V0X3N0YXRlKQorCQkgICAgKHBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCwgQlJEX0xPQURFRCk7CisJCWlmICghc3RhdHVzKSB7CisJCQlwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID0gUFJPQ19MT0FERUQ7CisJCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopCisJCQkJcHJvY19ub3RpZnlfY2xpZW50cyhwX3Byb2Nfb2JqZWN0LAorCQkJCQkJICAgIERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSk7CisJCX0KKwl9CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gcHJvY19nZXRfcHJvY2Vzc29yX2lkKGhwcm9jZXNzb3IsICZwcm9jX2lkKTsKKwkJaWYgKHByb2NfaWQgPT0gRFNQX1VOSVQpIHsKKwkJCS8qIFVzZSBhbGwgYXZhaWxhYmxlIERTUCBhZGRyZXNzIHNwYWNlIGFmdGVyIEVYVE1FTQorCQkJICogZm9yIERNTSAqLworCQkJaWYgKCFzdGF0dXMpCisJCQkJc3RhdHVzID0gY29kX2dldF9zeW1fdmFsdWUoY29kX21nciwgRVhURU5ELAorCQkJCQkJCSAgICZkd19leHRfZW5kKTsKKworCQkJLyogUmVzZXQgRE1NIHN0cnVjdHMgYW5kIGFkZCBhbiBpbml0aWFsIGZyZWUgY2h1bmsgKi8KKwkJCWlmICghc3RhdHVzKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgZGV2X2dldF9kbW1fbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkJICAgICZkbW1fbWdyKTsKKwkJCQlpZiAoZG1tX21ncikgeworCQkJCQkvKiBTZXQgZHdfZXh0X2VuZCB0byBETU0gU1RBUlQgdTgKKwkJCQkJICogYWRkcmVzcyAqLworCQkJCQlkd19leHRfZW5kID0KKwkJCQkJICAgIChkd19leHRfZW5kICsgMSkgKiBEU1BXT1JEU0laRTsKKwkJCQkJLyogRE1NIG1lbW9yeSBpcyBmcm9tIEVYVF9FTkQgKi8KKwkJCQkJc3RhdHVzID0gZG1tX2NyZWF0ZV90YWJsZXMoZG1tX21nciwKKwkJCQkJCQkJICAgZHdfZXh0X2VuZCwKKwkJCQkJCQkJICAgRE1NUE9PTFNJWkUpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGFyZ3ZbMF0gKi8KKwlrZnJlZShuZXdfZW52cCk7CisJdXNlcl9hcmdzWzBdID0gcGFyZ3YwOworCWlmICghc3RhdHVzKSB7CisJCWlmICghKCgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykKKwkJCQkocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0LCAmYnJkX3N0YXRlKSkpIHsKKwkJCXByX2luZm8oIiVzOiBQcm9jZXNzb3IgTG9hZGVkICVzXG4iLCBfX2Z1bmNfXywgcGFyZ3YwKTsKKwkJCWtmcmVlKGRydl9kYXRhcC0+YmFzZV9pbWcpOworCQkJZHJ2X2RhdGFwLT5iYXNlX2ltZyA9IGttYWxsb2Moc3RybGVuKHBhcmd2MCkgKyAxLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmIChkcnZfZGF0YXAtPmJhc2VfaW1nKQorCQkJCXN0cm5jcHkoZHJ2X2RhdGFwLT5iYXNlX2ltZywgcGFyZ3YwLAorCQkJCQkJCXN0cmxlbihwYXJndjApICsgMSk7CisJCQllbHNlCisJCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9MT0FERUQpOworCQl9CisJfQorCitmdW5jX2VuZDoKKwlpZiAoc3RhdHVzKSB7CisJCXByX2VycigiJXM6IFByb2Nlc3NvciBmYWlsZWQgdG8gbG9hZFxuIiwgX19mdW5jX18pOworCQlwcm9jX3N0b3AocF9wcm9jX29iamVjdCk7CisJfQorCURCQ19FTlNVUkUoKCFzdGF0dXMKKwkJICAgICYmIHBfcHJvY19vYmplY3QtPnByb2Nfc3RhdGUgPT0gUFJPQ19MT0FERUQpCisJCSAgIHx8IHN0YXR1cyk7CisjaWZkZWYgT1BUX0xPQURfVElNRV9JTlNUUlVNRU5UQVRJT04KKwlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CisJaWYgKHR2Mi50dl91c2VjIDwgdHYxLnR2X3VzZWMpIHsKKwkJdHYyLnR2X3VzZWMgKz0gMTAwMDAwMDsKKwkJdHYyLnR2X3NlYy0tOworCX0KKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiB0aW1lIHRvIGxvYWQgJWQgc2VjIGFuZCAlZCB1c2VjXG4iLCBfX2Z1bmNfXywKKwkJdHYyLnR2X3NlYyAtIHR2MS50dl9zZWMsIHR2Mi50dl91c2VjIC0gdHYxLnR2X3VzZWMpOworI2VuZGlmCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX21hcCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE1hcHMgYSBNUFUgYnVmZmVyIHRvIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY19tYXAodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqcG1wdV9hZGRyLCB1MzIgdWxfc2l6ZSwKKwkJICAgIHZvaWQgKnJlcV9hZGRyLCB2b2lkICoqcHBfbWFwX2FkZHIsIHUzMiB1bF9tYXBfYXR0ciwKKwkJICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJdTMyIHZhX2FsaWduOworCXUzMiBwYV9hbGlnbjsKKwlzdHJ1Y3QgZG1tX29iamVjdCAqZG1tX21ncjsKKwl1MzIgc2l6ZV9hbGlnbjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgZG1tX21hcF9vYmplY3QgKm1hcF9vYmo7CisJdTMyIHRtcF9hZGRyID0gMDsKKworI2lmZGVmIENPTkZJR19USURTUEJSSURHRV9DQUNIRV9MSU5FX0NIRUNLCisJaWYgKCh1bF9tYXBfYXR0ciAmIEJVRk1PREVfTUFTSykgIT0gUkJVRikgeworCQlpZiAoIUlTX0FMSUdORUQoKHUzMilwbXB1X2FkZHIsIERTUF9DQUNIRV9MSU5FKSB8fAorCQkgICAgIUlTX0FMSUdORUQodWxfc2l6ZSwgRFNQX0NBQ0hFX0xJTkUpKSB7CisJCQlwcl9lcnIoIiVzOiBub3QgYWxpZ25lZDogMHgleCAoJWQpXG4iLCBfX2Z1bmNfXywKKwkJCQkJCSh1MzIpcG1wdV9hZGRyLCB1bF9zaXplKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBDYWxjdWxhdGUgdGhlIHBhZ2UtYWxpZ25lZCBQQSwgVkEgYW5kIHNpemUgKi8KKwl2YV9hbGlnbiA9IFBHX0FMSUdOX0xPVygodTMyKSByZXFfYWRkciwgUEdfU0laRTRLKTsKKwlwYV9hbGlnbiA9IFBHX0FMSUdOX0xPVygodTMyKSBwbXB1X2FkZHIsIFBHX1NJWkU0Syk7CisJc2l6ZV9hbGlnbiA9IFBHX0FMSUdOX0hJR0godWxfc2l6ZSArICh1MzIpIHBtcHVfYWRkciAtIHBhX2FsaWduLAorCQkJCSAgIFBHX1NJWkU0Syk7CisKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQ3JpdGljYWwgc2VjdGlvbiAqLworCW11dGV4X2xvY2soJnByb2NfbG9jayk7CisJZG1tX2dldF9oYW5kbGUocF9wcm9jX29iamVjdCwgJmRtbV9tZ3IpOworCWlmIChkbW1fbWdyKQorCQlzdGF0dXMgPSBkbW1fbWFwX21lbW9yeShkbW1fbWdyLCB2YV9hbGlnbiwgc2l6ZV9hbGlnbik7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJLyogQWRkIG1hcHBpbmcgdG8gdGhlIHBhZ2UgdGFibGVzLiAqLworCWlmICghc3RhdHVzKSB7CisKKwkJLyogTWFwcGVkIGFkZHJlc3MgPSBNU0Igb2YgVkEgfCBMU0Igb2YgUEEgKi8KKwkJdG1wX2FkZHIgPSAodmFfYWxpZ24gfCAoKHUzMikgcG1wdV9hZGRyICYgKFBHX1NJWkU0SyAtIDEpKSk7CisJCS8qIG1hcHBlZCBtZW1vcnkgcmVzb3VyY2UgdHJhY2tpbmcgKi8KKwkJbWFwX29iaiA9IGFkZF9tYXBwaW5nX2luZm8ocHJfY3R4dCwgcGFfYWxpZ24sIHRtcF9hZGRyLAorCQkJCQkJc2l6ZV9hbGlnbik7CisJCWlmICghbWFwX29iaikKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCWVsc2UKKwkJCXN0YXR1cyA9ICgqcF9wcm9jX29iamVjdC0+aW50Zl9meG5zLT5wZm5fYnJkX21lbV9tYXApCisJCQkgICAgKHBfcHJvY19vYmplY3QtPmhicmlkZ2VfY29udGV4dCwgcGFfYWxpZ24sIHZhX2FsaWduLAorCQkJICAgICBzaXplX2FsaWduLCB1bF9tYXBfYXR0ciwgbWFwX29iai0+cGFnZXMpOworCX0KKwlpZiAoIXN0YXR1cykgeworCQkvKiBNYXBwZWQgYWRkcmVzcyA9IE1TQiBvZiBWQSB8IExTQiBvZiBQQSAqLworCQkqcHBfbWFwX2FkZHIgPSAodm9pZCAqKSB0bXBfYWRkcjsKKwl9IGVsc2UgeworCQlyZW1vdmVfbWFwcGluZ19pbmZvcm1hdGlvbihwcl9jdHh0LCB0bXBfYWRkciwgc2l6ZV9hbGlnbik7CisJCWRtbV91bl9tYXBfbWVtb3J5KGRtbV9tZ3IsIHZhX2FsaWduLCAmc2l6ZV9hbGlnbik7CisJfQorCW11dGV4X3VubG9jaygmcHJvY19sb2NrKTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNzb3IgJXAsIHBtcHVfYWRkciAlcCwgdWxfc2l6ZSAleCwgIgorCQkicmVxX2FkZHIgJXAsIHVsX21hcF9hdHRyICV4LCBwcF9tYXBfYWRkciAlcCwgdmFfYWxpZ24gJXgsICIKKwkJInBhX2FsaWduICV4LCBzaXplX2FsaWduICV4IHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywKKwkJaHByb2Nlc3NvciwgcG1wdV9hZGRyLCB1bF9zaXplLCByZXFfYWRkciwgdWxfbWFwX2F0dHIsCisJCXBwX21hcF9hZGRyLCB2YV9hbGlnbiwgcGFfYWxpZ24sIHNpemVfYWxpZ24sIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfcmVnaXN0ZXJfbm90aWZ5ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmVnaXN0ZXIgdG8gYmUgbm90aWZpZWQgb2Ygc3BlY2lmaWMgcHJvY2Vzc29yIGV2ZW50cy4KKyAqLworaW50IHByb2NfcmVnaXN0ZXJfbm90aWZ5KHZvaWQgKmhwcm9jZXNzb3IsIHUzMiBldmVudF9tYXNrLAorCQkJCXUzMiBub3RpZnlfdHlwZSwgc3RydWN0IGRzcF9ub3RpZmljYXRpb24KKwkJCQkqIGhub3RpZmljYXRpb24pCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKWhwcm9jZXNzb3I7CisJc3RydWN0IGRlaF9tZ3IgKmhkZWhfbWdyOworCisJREJDX1JFUVVJUkUoaG5vdGlmaWNhdGlvbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisKKwkvKiBDaGVjayBwcm9jZXNzb3IgaGFuZGxlICovCisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIENoZWNrIGlmIGV2ZW50IG1hc2sgaXMgYSB2YWxpZCBwcm9jZXNzb3IgcmVsYXRlZCBldmVudCAqLworCWlmIChldmVudF9tYXNrICYgfihEU1BfUFJPQ0VTU09SU1RBVEVDSEFOR0UgfCBEU1BfUFJPQ0VTU09SQVRUQUNIIHwKKwkJCURTUF9QUk9DRVNTT1JERVRBQ0ggfCBEU1BfUFJPQ0VTU09SUkVTVEFSVCB8CisJCQlEU1BfTU1VRkFVTFQgfCBEU1BfU1lTRVJST1IgfCBEU1BfUFdSRVJST1IgfAorCQkJRFNQX1dEVE9WRVJGTE9XKSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCS8qIENoZWNrIGlmIG5vdGlmeSB0eXBlIGlzIHZhbGlkICovCisJaWYgKG5vdGlmeV90eXBlICE9IERTUF9TSUdOQUxFVkVOVCkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzKSB7CisJCS8qIElmIGV2ZW50IG1hc2sgaXMgbm90IERTUF9TWVNFUlJPUiwgRFNQX01NVUZBVUxULAorCQkgKiBvciBEU1BfUFdSRVJST1IgdGhlbiByZWdpc3RlciBldmVudCBpbW1lZGlhdGVseS4gKi8KKwkJaWYgKGV2ZW50X21hc2sgJgorCQkgICAgfihEU1BfU1lTRVJST1IgfCBEU1BfTU1VRkFVTFQgfCBEU1BfUFdSRVJST1IgfAorCQkJCURTUF9XRFRPVkVSRkxPVykpIHsKKwkJCXN0YXR1cyA9IG50ZnlfcmVnaXN0ZXIocF9wcm9jX29iamVjdC0+bnRmeV9vYmosCisJCQkJCSAgICAgICBobm90aWZpY2F0aW9uLCBldmVudF9tYXNrLAorCQkJCQkgICAgICAgbm90aWZ5X3R5cGUpOworCQkJLyogU3BlY2lhbCBjYXNlIGFsZXJ0LCBzcGVjaWFsIGNhc2UgYWxlcnQhCisJCQkgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gKmRlcmVnaXN0ZXIqIChpLmUuIGV2ZW50X21hc2sKKwkJCSAqIGlzIDApLCBhIERTUF9TWVNFUlJPUiBvciBEU1BfTU1VRkFVTFQgbm90aWZpY2F0aW9uLAorCQkJICogd2UgaGF2ZSB0byBkZXJlZ2lzdGVyIHdpdGggdGhlIERFSCBtYW5hZ2VyLgorCQkJICogVGhlcmUncyBubyB3YXkgdG8ga25vdywgYmFzZWQgb24gZXZlbnRfbWFzayB3aGljaAorCQkJICogbWFuYWdlciB0aGUgbm90aWZpY2F0aW9uIGV2ZW50IHdhcyByZWdpc3RlcmVkIHdpdGgsCisJCQkgKiBzbyBpZiB3ZSdyZSB0cnlpbmcgdG8gZGVyZWdpc3RlciBhbmQgbnRmeV9yZWdpc3RlcgorCQkJICogZmFpbGVkLCB3ZSdsbCBnaXZlIHRoZSBkZWggbWFuYWdlciBhIHNob3QuCisJCQkgKi8KKwkJCWlmICgoZXZlbnRfbWFzayA9PSAwKSAmJiBzdGF0dXMpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICBkZXZfZ2V0X2RlaF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosCisJCQkJCQkgICAgJmhkZWhfbWdyKTsKKwkJCQlzdGF0dXMgPQorCQkJCQlicmlkZ2VfZGVoX3JlZ2lzdGVyX25vdGlmeShoZGVoX21nciwKKwkJCQkJCQlldmVudF9tYXNrLAorCQkJCQkJCW5vdGlmeV90eXBlLAorCQkJCQkJCWhub3RpZmljYXRpb24pOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gZGV2X2dldF9kZWhfbWdyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLAorCQkJCQkJICZoZGVoX21ncik7CisJCQlzdGF0dXMgPQorCQkJICAgIGJyaWRnZV9kZWhfcmVnaXN0ZXJfbm90aWZ5KGhkZWhfbWdyLAorCQkJCQkgICAgZXZlbnRfbWFzaywKKwkJCQkJICAgIG5vdGlmeV90eXBlLAorCQkJCQkgICAgaG5vdGlmaWNhdGlvbik7CisKKwkJfQorCX0KK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19yZXNlcnZlX21lbW9yeSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlc2VydmUgYSB2aXJ0dWFsbHkgY29udGlndW91cyByZWdpb24gb2YgRFNQIGFkZHJlc3Mgc3BhY2UuCisgKi8KK2ludCBwcm9jX3Jlc2VydmVfbWVtb3J5KHZvaWQgKmhwcm9jZXNzb3IsIHUzMiB1bF9zaXplLAorCQkJICAgICAgIHZvaWQgKipwcF9yc3ZfYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fcnN2X29iamVjdCAqcnN2X29iajsKKworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBkbW1fcmVzZXJ2ZV9tZW1vcnkoZG1tX21nciwgdWxfc2l6ZSwgKHUzMiAqKSBwcF9yc3ZfYWRkcik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlnb3RvIGZ1bmNfZW5kOworCisJLyoKKwkgKiBBIHN1Y2Nlc3NmdWwgcmVzZXJ2ZSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgaW5zZXJ0aW9uIG9mIHJzdl9vYmoKKwkgKiBpbnRvIGRtbV9yc3ZfbGlzdCwgc28gdGhhdCByZXNlcnZlZCBtZW1vcnkgcmVzb3VyY2UgdHJhY2tpbmcKKwkgKiByZW1haW5zIHVwdG9kYXRlCisJICovCisJcnN2X29iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbW1fcnN2X29iamVjdCksIEdGUF9LRVJORUwpOworCWlmIChyc3Zfb2JqKSB7CisJCXJzdl9vYmotPmRzcF9yZXNlcnZlZF9hZGRyID0gKHUzMikgKnBwX3Jzdl9hZGRyOworCQlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJCWxpc3RfYWRkKCZyc3Zfb2JqLT5saW5rLCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0KTsKKwkJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJfQorCitmdW5jX2VuZDoKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBocHJvY2Vzc29yOiAweCVwIHVsX3NpemU6IDB4JXggcHBfcnN2X2FkZHI6IDB4JXAgIgorCQkic3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBocHJvY2Vzc29yLAorCQl1bF9zaXplLCBwcF9yc3ZfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2Nfc3RhcnQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdGFydCBhIHByb2Nlc3NvciBydW5uaW5nLgorICovCitpbnQgcHJvY19zdGFydCh2b2lkICpocHJvY2Vzc29yKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBjb2RfbWFuYWdlciAqY29kX21ncjsJLyogQ29kZSBtYW5hZ2VyIGhhbmRsZSAqLworCXUzMiBkd19kc3BfYWRkcjsJLyogTG9hZGVkIGNvZGUncyBlbnRyeSBwb2ludC4gKi8KKwlpbnQgYnJkX3N0YXRlOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwkvKiBDYWxsIHRoZSBicmlkZ2VfYnJkX3N0YXJ0ICovCisJaWYgKHBfcHJvY19vYmplY3QtPnByb2Nfc3RhdGUgIT0gUFJPQ19MT0FERUQpIHsKKwkJc3RhdHVzID0gLUVCQURSOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKwlzdGF0dXMgPSBkZXZfZ2V0X2NvZF9tZ3IocF9wcm9jX29iamVjdC0+aGRldl9vYmosICZjb2RfbWdyKTsKKwlpZiAoIWNvZF9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2NvbnQ7CisJfQorCisJc3RhdHVzID0gY29kX2dldF9lbnRyeShjb2RfbWdyLCAmZHdfZHNwX2FkZHIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhcnQpCisJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsIGR3X2RzcF9hZGRyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfY29udDsKKworCS8qIENhbGwgZGV2X2NyZWF0ZTIgKi8KKwlzdGF0dXMgPSBkZXZfY3JlYXRlMihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfUlVOTklORzsKKwkJLyogRGVlcCBzbGVlcCBzd2l0Y2VzIG9mZiB0aGUgcGVyaXBoZXJhbCBjbG9ja3MuCisJCSAqIHdlIGp1c3QgcHV0IHRoZSBEU1AgQ1BVIGluIGlkbGUgaW4gdGhlIGlkbGUgbG9vcC4KKwkJICogc28gdGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kIGEgY29tbWFuZCB0byBEU1AgKi8KKworCQlpZiAocF9wcm9jX29iamVjdC0+bnRmeV9vYmopIHsKKwkJCXByb2Nfbm90aWZ5X2NsaWVudHMocF9wcm9jX29iamVjdCwKKwkJCQkJICAgIERTUF9QUk9DRVNTT1JTVEFURUNIQU5HRSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBGYWlsZWQgdG8gQ3JlYXRlIE5vZGUgTWFuYWdlciBhbmQgRElTUCBPYmplY3QKKwkJICogU3RvcCB0aGUgUHJvY2Vzc29yIGZyb20gcnVubmluZy4gUHV0IGl0IGluIFNUT1BQRUQgU3RhdGUgKi8KKwkJKHZvaWQpKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPgorCQkgICAgICAgcGZuX2JyZF9zdG9wKSAocF9wcm9jX29iamVjdC0+aGJyaWRnZV9jb250ZXh0KTsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwl9CitmdW5jX2NvbnQ6CisJaWYgKCFzdGF0dXMpIHsKKwkJaWYgKCEoKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhdHVzKQorCQkJCShwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdGUpKSkgeworCQkJcHJfaW5mbygiJXM6IGRzcCBpbiBydW5uaW5nIHN0YXRlXG4iLCBfX2Z1bmNfXyk7CisJCQlEQkNfQVNTRVJUKGJyZF9zdGF0ZSAhPSBCUkRfSElCRVJOQVRJT04pOworCQl9CisJfSBlbHNlIHsKKwkJcHJfZXJyKCIlczogRmFpbGVkIHRvIHN0YXJ0IHRoZSBkc3BcbiIsIF9fZnVuY19fKTsKKwkJcHJvY19zdG9wKHBfcHJvY19vYmplY3QpOworCX0KKworZnVuY19lbmQ6CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiBwX3Byb2Nfb2JqZWN0LT5wcm9jX3N0YXRlID09CisJCSAgICBQUk9DX1JVTk5JTkcpIHx8IHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwcm9jX3N0b3AgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBTdG9wIGEgcHJvY2Vzc29yIHJ1bm5pbmcuCisgKi8KK2ludCBwcm9jX3N0b3Aodm9pZCAqaHByb2Nlc3NvcikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopaHByb2Nlc3NvcjsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJc3RydWN0IG5vZGVfbWdyICpobm9kZV9tZ3I7CisJdm9pZCAqaG5vZGU7CisJdTMyIG5vZGVfdGFiX3NpemUgPSAxOworCXUzMiBudW1fbm9kZXMgPSAwOworCXUzMiBub2Rlc19hbGxvY2F0ZWQgPSAwOworCWludCBicmRfc3RhdGU7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCS8qIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgcnVubmluZyBub2RlcyAqLworCXN0YXR1cyA9IGRldl9nZXRfbm9kZV9tYW5hZ2VyKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCAmaG5vZGVfbWdyKTsKKwlpZiAoIXN0YXR1cyAmJiBobm9kZV9tZ3IpIHsKKwkJc3RhdHVzID0gbm9kZV9lbnVtX25vZGVzKGhub2RlX21nciwgJmhub2RlLCBub2RlX3RhYl9zaXplLAorCQkJCQkgJm51bV9ub2RlcywgJm5vZGVzX2FsbG9jYXRlZCk7CisJCWlmICgoc3RhdHVzID09IC1FSU5WQUwpIHx8IChub2Rlc19hbGxvY2F0ZWQgPiAwKSkgeworCQkJcHJfZXJyKCIlczogQ2FuJ3Qgc3RvcCBkZXZpY2UsIGFjdGl2ZSBub2RlcyA9ICVkIFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbm9kZXNfYWxsb2NhdGVkKTsKKwkJCXJldHVybiAtRUJBRFI7CisJCX0KKwl9CisJLyogQ2FsbCB0aGUgYnJpZGdlX2JyZF9zdG9wICovCisJLyogSXQgaXMgT0sgdG8gc3RvcCBhIGRldmljZSB0aGF0IGRvZXMgbid0IGhhdmUgbm9kZXMgT1Igbm90IHN0YXJ0ZWQgKi8KKwlzdGF0dXMgPQorCSAgICAoKnBfcHJvY19vYmplY3QtPmludGZfZnhucy0+CisJICAgICBwZm5fYnJkX3N0b3ApIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQpOworCWlmICghc3RhdHVzKSB7CisJCWRldl9kYmcoYnJpZGdlLCAiJXM6IHByb2Nlc3NvciBpbiBzdGFuZGJ5IG1vZGVcbiIsIF9fZnVuY19fKTsKKwkJcF9wcm9jX29iamVjdC0+cHJvY19zdGF0ZSA9IFBST0NfU1RPUFBFRDsKKwkJLyogRGVzdG9yeSB0aGUgTm9kZSBNYW5hZ2VyLCBtc2dfY3RybCBNYW5hZ2VyICovCisJCWlmICghKGRldl9kZXN0cm95MihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaikpKSB7CisJCQkvKiBEZXN0cm95IHRoZSBtc2dfY3RybCBieSBjYWxsaW5nIG1zZ19kZWxldGUgKi8KKwkJCWRldl9nZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgJmhtc2dfbWdyKTsKKwkJCWlmIChobXNnX21ncikgeworCQkJCW1zZ19kZWxldGUoaG1zZ19tZ3IpOworCQkJCWRldl9zZXRfbXNnX21ncihwX3Byb2Nfb2JqZWN0LT5oZGV2X29iaiwgTlVMTCk7CisJCQl9CisJCQlpZiAoISgoKnBfcHJvY19vYmplY3QtPgorCQkJICAgICAgaW50Zl9meG5zLT5wZm5fYnJkX3N0YXR1cykgKHBfcHJvY19vYmplY3QtPgorCQkJCQkJCSAgaGJyaWRnZV9jb250ZXh0LAorCQkJCQkJCSAgJmJyZF9zdGF0ZSkpKQorCQkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9TVE9QUEVEKTsKKwkJfQorCX0gZWxzZSB7CisJCXByX2VycigiJXM6IEZhaWxlZCB0byBzdG9wIHRoZSBwcm9jZXNzb3JcbiIsIF9fZnVuY19fKTsKKwl9CitmdW5jX2VuZDoKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY191bl9tYXAgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZW1vdmVzIGEgTVBVIGJ1ZmZlciBtYXBwaW5nIGZyb20gdGhlIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY191bl9tYXAodm9pZCAqaHByb2Nlc3Nvciwgdm9pZCAqbWFwX2FkZHIsCisJCSAgICAgICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCXUzMiB2YV9hbGlnbjsKKwl1MzIgc2l6ZV9hbGlnbjsKKworCXZhX2FsaWduID0gUEdfQUxJR05fTE9XKCh1MzIpIG1hcF9hZGRyLCBQR19TSVpFNEspOworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKGhwcm9jZXNzb3IsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwkvKiBDcml0aWNhbCBzZWN0aW9uICovCisJbXV0ZXhfbG9jaygmcHJvY19sb2NrKTsKKwkvKgorCSAqIFVwZGF0ZSBETU0gc3RydWN0dXJlcy4gR2V0IHRoZSBzaXplIHRvIHVubWFwLgorCSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBlcnJvciBpZiB0aGUgVkEgaXMgbm90IG1hcHBlZAorCSAqLworCXN0YXR1cyA9IGRtbV91bl9tYXBfbWVtb3J5KGRtbV9tZ3IsICh1MzIpIHZhX2FsaWduLCAmc2l6ZV9hbGlnbik7CisJLyogUmVtb3ZlIG1hcHBpbmcgZnJvbSB0aGUgcGFnZSB0YWJsZXMuICovCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RhdHVzID0gKCpwX3Byb2Nfb2JqZWN0LT5pbnRmX2Z4bnMtPnBmbl9icmRfbWVtX3VuX21hcCkKKwkJICAgIChwX3Byb2Nfb2JqZWN0LT5oYnJpZGdlX2NvbnRleHQsIHZhX2FsaWduLCBzaXplX2FsaWduKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByb2NfbG9jayk7CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCS8qCisJICogQSBzdWNjZXNzZnVsIHVubWFwIHNob3VsZCBiZSBmb2xsb3dlZCBieSByZW1vdmFsIG9mIG1hcF9vYmoKKwkgKiBmcm9tIGRtbV9tYXBfbGlzdCwgc28gdGhhdCBtYXBwZWQgbWVtb3J5IHJlc291cmNlIHRyYWNraW5nCisJICogcmVtYWlucyB1cHRvZGF0ZQorCSAqLworCXJlbW92ZV9tYXBwaW5nX2luZm9ybWF0aW9uKHByX2N0eHQsICh1MzIpIG1hcF9hZGRyLCBzaXplX2FsaWduKTsKKworZnVuY19lbmQ6CisJZGV2X2RiZyhicmlkZ2UsICIlczogaHByb2Nlc3NvcjogMHglcCBtYXBfYWRkcjogMHglcCBzdGF0dXM6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBocHJvY2Vzc29yLCBtYXBfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfdW5fcmVzZXJ2ZV9tZW1vcnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyBhIHByZXZpb3VzbHkgcmVzZXJ2ZWQgcmVnaW9uIG9mIERTUCBhZGRyZXNzIHNwYWNlLgorICovCitpbnQgcHJvY191bl9yZXNlcnZlX21lbW9yeSh2b2lkICpocHJvY2Vzc29yLCB2b2lkICpwcnN2X2FkZHIsCisJCQkJICBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCXN0cnVjdCBkbW1fb2JqZWN0ICpkbW1fbWdyOworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBwcm9jX29iamVjdCAqcF9wcm9jX29iamVjdCA9IChzdHJ1Y3QgcHJvY19vYmplY3QgKilocHJvY2Vzc29yOworCXN0cnVjdCBkbW1fcnN2X29iamVjdCAqcnN2X29iajsKKworCWlmICghcF9wcm9jX29iamVjdCkgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCQlnb3RvIGZ1bmNfZW5kOworCX0KKworCXN0YXR1cyA9IGRtbV9nZXRfaGFuZGxlKHBfcHJvY19vYmplY3QsICZkbW1fbWdyKTsKKwlpZiAoIWRtbV9tZ3IpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwlzdGF0dXMgPSBkbW1fdW5fcmVzZXJ2ZV9tZW1vcnkoZG1tX21nciwgKHUzMikgcHJzdl9hZGRyKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKgorCSAqIEEgc3VjY2Vzc2Z1bCB1bnJlc2VydmUgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IHJlbW92YWwgb2YgcnN2X29iagorCSAqIGZyb20gZG1tX3Jzdl9saXN0LCBzbyB0aGF0IHJlc2VydmVkIG1lbW9yeSByZXNvdXJjZSB0cmFja2luZworCSAqIHJlbWFpbnMgdXB0b2RhdGUKKwkgKi8KKwlzcGluX2xvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyc3Zfb2JqLCAmcHJfY3R4dC0+ZG1tX3Jzdl9saXN0LCBsaW5rKSB7CisJCWlmIChyc3Zfb2JqLT5kc3BfcmVzZXJ2ZWRfYWRkciA9PSAodTMyKSBwcnN2X2FkZHIpIHsKKwkJCWxpc3RfZGVsKCZyc3Zfb2JqLT5saW5rKTsKKwkJCWtmcmVlKHJzdl9vYmopOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnByX2N0eHQtPmRtbV9yc3ZfbG9jayk7CisKK2Z1bmNfZW5kOgorCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhwcm9jZXNzb3I6IDB4JXAgcHJzdl9hZGRyOiAweCVwIHN0YXR1czogMHgleFxuIiwKKwkJX19mdW5jX18sIGhwcm9jZXNzb3IsIHByc3ZfYWRkciwgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09ID0gcHJvY19tb25pdG9yID09PT09PT09ID09CisgKiAgUHVycG9zZToKKyAqICAgICAgUGxhY2UgdGhlIFByb2Nlc3NvciBpbiBNb25pdG9yIFN0YXRlLiBUaGlzIGlzIGFuIGludGVybmFsCisgKiAgICAgIGZ1bmN0aW9uIGFuZCBhIHJlcXVpcmVtZW50IGJlZm9yZSBQcm9jZXNzb3IgaXMgbG9hZGVkLgorICogICAgICBUaGlzIGRvZXMgYSBicmlkZ2VfYnJkX3N0b3AsIGRldl9kZXN0cm95MiBhbmQgYnJpZGdlX2JyZF9tb25pdG9yLgorICogICAgICBJbiBkZXZfZGVzdHJveTIgd2UgZGVsZXRlIHRoZSBub2RlIG1hbmFnZXIuCisgKiAgUGFyYW1ldGVyczoKKyAqICAgICAgcF9wcm9jX29iamVjdDogICAgUG9pbnRlciB0byBQcm9jZXNzb3IgT2JqZWN0CisgKiAgUmV0dXJuczoKKyAqICAgICAgMDoJUHJvY2Vzc29yIHBsYWNlZCBpbiBtb25pdG9yIG1vZGUuCisgKiAgICAgICEwOiAgICAgICBGYWlsZWQgdG8gcGxhY2UgcHJvY2Vzc29yIGluIG1vbml0b3IgbW9kZS4KKyAqICBSZXF1aXJlczoKKyAqICAgICAgVmFsaWQgUHJvY2Vzc29yIEhhbmRsZQorICogIEVuc3VyZXM6CisgKiAgICAgIFN1Y2Nlc3M6CVByb2NPYmplY3Qgc3RhdGUgaXMgUFJPQ19JRExFCisgKi8KK3N0YXRpYyBpbnQgcHJvY19tb25pdG9yKHN0cnVjdCBwcm9jX29iamVjdCAqcHJvY19vYmopCit7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgbXNnX21nciAqaG1zZ19tZ3I7CisJaW50IGJyZF9zdGF0ZTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShwcm9jX29iaik7CisKKwkvKiBUaGlzIGlzIG5lZWRlZCBvbmx5IHdoZW4gRGV2aWNlIGlzIGxvYWRlZCB3aGVuIGl0IGlzCisJICogYWxyZWFkeSAnQUNUSVZFJyAqLworCS8qIERlc3RvcnkgdGhlIE5vZGUgTWFuYWdlciwgbXNnX2N0cmwgTWFuYWdlciAqLworCWlmICghZGV2X2Rlc3Ryb3kyKHByb2Nfb2JqLT5oZGV2X29iaikpIHsKKwkJLyogRGVzdHJveSB0aGUgbXNnX2N0cmwgYnkgY2FsbGluZyBtc2dfZGVsZXRlICovCisJCWRldl9nZXRfbXNnX21ncihwcm9jX29iai0+aGRldl9vYmosICZobXNnX21ncik7CisJCWlmIChobXNnX21ncikgeworCQkJbXNnX2RlbGV0ZShobXNnX21ncik7CisJCQlkZXZfc2V0X21zZ19tZ3IocHJvY19vYmotPmhkZXZfb2JqLCBOVUxMKTsKKwkJfQorCX0KKwkvKiBQbGFjZSB0aGUgQm9hcmQgaW4gdGhlIE1vbml0b3IgU3RhdGUgKi8KKwlpZiAoISgoKnByb2Nfb2JqLT5pbnRmX2Z4bnMtPnBmbl9icmRfbW9uaXRvcikKKwkJCSAgKHByb2Nfb2JqLT5oYnJpZGdlX2NvbnRleHQpKSkgeworCQlzdGF0dXMgPSAwOworCQlpZiAoISgoKnByb2Nfb2JqLT5pbnRmX2Z4bnMtPnBmbl9icmRfc3RhdHVzKQorCQkJCSAgKHByb2Nfb2JqLT5oYnJpZGdlX2NvbnRleHQsICZicmRfc3RhdGUpKSkKKwkJCURCQ19BU1NFUlQoYnJkX3N0YXRlID09IEJSRF9JRExFKTsKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIGJyZF9zdGF0ZSA9PSBCUkRfSURMRSkgfHwKKwkJICAgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGdldF9lbnZwX2NvdW50ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGVudnAgYXJyYXksIGluY2x1ZGluZyB0aGUKKyAqICAgICAgdGVybWluYXRpbmcgTlVMTCBlbGVtZW50LgorICovCitzdGF0aWMgczMyIGdldF9lbnZwX2NvdW50KGNoYXIgKiplbnZwKQoreworCXMzMiByZXQgPSAwOworCWlmIChlbnZwKSB7CisJCXdoaWxlICgqZW52cCsrKQorCQkJcmV0Kys7CisKKwkJcmV0ICs9IDE7CS8qIEluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIE5VTEwgaW4gdGhlIGNvdW50LiAqLworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJlcGVuZF9lbnZwID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUHJlcGVuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZT12YWx1ZSBwYWlyIHRvIHRoZSBuZXcgZW52cCBhcnJheSwgYW5kCisgKiAgICAgIGNvcHkgaW4gdGhlIGV4aXN0aW5nIHZhcj12YWx1ZSBwYWlycyBpbiB0aGUgb2xkIGVudnAgYXJyYXkuCisgKi8KK3N0YXRpYyBjaGFyICoqcHJlcGVuZF9lbnZwKGNoYXIgKipuZXdfZW52cCwgY2hhciAqKmVudnAsIHMzMiBlbnZwX2VsZW1zLAorCQkJICAgczMyIGNuZXdfZW52cCwgY2hhciAqc3pfdmFyKQoreworCWNoYXIgKipwcF9lbnZwID0gbmV3X2VudnA7CisKKwlEQkNfUkVRVUlSRShuZXdfZW52cCk7CisKKwkvKiBQcmVwZW5kIG5ldyBlbnZpcm9uIHZhcj12YWx1ZSBzdHJpbmcgKi8KKwkqbmV3X2VudnArKyA9IHN6X3ZhcjsKKworCS8qIENvcHkgdXNlcidzIGVudmlyb25tZW50IGludG8gb3VyIG93bi4gKi8KKwl3aGlsZSAoZW52cF9lbGVtcy0tKQorCQkqbmV3X2VudnArKyA9ICplbnZwKys7CisKKwkvKiBFbnN1cmUgTlVMTCB0ZXJtaW5hdGVzIHRoZSBuZXcgZW52aXJvbm1lbnQgc3RyaW5ncyBhcnJheS4gKi8KKwlpZiAoZW52cF9lbGVtcyA9PSAwKQorCQkqbmV3X2VudnAgPSBOVUxMOworCisJcmV0dXJuIHBwX2VudnA7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19ub3RpZnlfY2xpZW50cyA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIE5vdGlmeSB0aGUgcHJvY2Vzc29yIHRoZSBldmVudHMuCisgKi8KK2ludCBwcm9jX25vdGlmeV9jbGllbnRzKHZvaWQgKnByb2MsIHUzMiBldmVudHMpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByb2M7CisKKwlEQkNfUkVRVUlSRShwX3Byb2Nfb2JqZWN0KTsKKwlEQkNfUkVRVUlSRShpc192YWxpZF9wcm9jX2V2ZW50KGV2ZW50cykpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlpZiAoIXBfcHJvY19vYmplY3QpIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwkJZ290byBmdW5jX2VuZDsKKwl9CisKKwludGZ5X25vdGlmeShwX3Byb2Nfb2JqZWN0LT5udGZ5X29iaiwgZXZlbnRzKTsKK2Z1bmNfZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHJvY19ub3RpZnlfYWxsX2NsaWVudHMgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBOb3RpZnkgdGhlIHByb2Nlc3NvciB0aGUgZXZlbnRzLiBUaGlzIGluY2x1ZGVzIG5vdGlmeWluZyBhbGwgY2xpZW50cworICogICAgICBhdHRhY2hlZCB0byBhIHBhcnRpY3VsYXQgRFNQLgorICovCitpbnQgcHJvY19ub3RpZnlfYWxsX2NsaWVudHModm9pZCAqcHJvYywgdTMyIGV2ZW50cykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcHJvY19vYmplY3QgKnBfcHJvY19vYmplY3QgPSAoc3RydWN0IHByb2Nfb2JqZWN0ICopcHJvYzsKKworCURCQ19SRVFVSVJFKGlzX3ZhbGlkX3Byb2NfZXZlbnQoZXZlbnRzKSk7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFwX3Byb2Nfb2JqZWN0KSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCisJZGV2X25vdGlmeV9jbGllbnRzKHBfcHJvY19vYmplY3QtPmhkZXZfb2JqLCBldmVudHMpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHByb2NfZ2V0X3Byb2Nlc3Nvcl9pZCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJpZXZlcyB0aGUgcHJvY2Vzc29yIElELgorICovCitpbnQgcHJvY19nZXRfcHJvY2Vzc29yX2lkKHZvaWQgKnByb2MsIHUzMiAqIHByb2NfaWQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHByb2Nfb2JqZWN0ICpwX3Byb2Nfb2JqZWN0ID0gKHN0cnVjdCBwcm9jX29iamVjdCAqKXByb2M7CisKKwlpZiAocF9wcm9jX29iamVjdCkKKwkJKnByb2NfaWQgPSBwX3Byb2Nfb2JqZWN0LT5wcm9jZXNzb3JfaWQ7CisJZWxzZQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3IvcHdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYjFhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3B3ci5jCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogcHdyLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUFdSIEFQSSBmb3IgY29udHJvbGxpbmcgRFNQIHBvd2VyIHN0YXRlcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSG9zdCBPUyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9ob3N0X29zLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3B3ci5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzb3VyY2UgTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXZkZWZzLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhdGZvcm0gTWFuYWdlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kZXYuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpbmsgRHJpdmVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RzcGlvY3RsLmg+CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3NsZWVwX2RzcCA9PT09PT09PQorICogICAgU2VuZCBjb21tYW5kIHRvIERTUCB0byBlbnRlciBzbGVlcCBzdGF0ZS4KKyAqLworaW50IHB3cl9zbGVlcF9kc3AoY29uc3QgdTMyIHNsZWVwX2NvZGUsIGNvbnN0IHUzMiB0aW1lb3V0KQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOworCXUzMiBpb2N0bGNvZGUgPSAwOworCXUzMiBhcmcgPSB0aW1lb3V0OworCisJZm9yIChoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfZmlyc3RfZGV2X29iamVjdCgpOworCSAgICAgaGRldl9vYmogIT0gTlVMTDsKKwkgICAgIGhkZXZfb2JqID0KKwkgICAgIChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0KCh1MzIpIGhkZXZfb2JqKSkgeworCQlpZiAoZGV2X2dldF9icmlkZ2VfY29udGV4dChoZGV2X29iaiwKKwkJCQkJCShzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICoqKQorCQkJCQkJICAgJmR3X2NvbnRleHQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZGV2X2dldF9pbnRmX2Z4bnMoaGRldl9vYmosCisJCQkJCQkoc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICoqKQorCQkJCQkJJmludGZfZnhucykpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzbGVlcF9jb2RlID09IFBXUl9ERUVQU0xFRVApCisJCQlpb2N0bGNvZGUgPSBCUkRJT0NUTF9ERUVQU0xFRVA7CisJCWVsc2UgaWYgKHNsZWVwX2NvZGUgPT0gUFdSX0VNRVJHRU5DWURFRVBTTEVFUCkKKwkJCWlvY3RsY29kZSA9IEJSRElPQ1RMX0VNRVJHRU5DWVNMRUVQOworCQllbHNlCisJCQlzdGF0dXMgPSAtRUlOVkFMOworCisJCWlmIChzdGF0dXMgIT0gLUVJTlZBTCkgeworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwpIChkd19jb250ZXh0LAorCQkJCQkJCSAgICAgIGlvY3RsY29kZSwKKwkJCQkJCQkgICAgICAodm9pZCAqKSZhcmcpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3dha2VfZHNwID09PT09PT09CisgKiAgICBTZW5kIGNvbW1hbmQgdG8gRFNQIHRvIHdha2UgaXQgZnJvbSBzbGVlcC4KKyAqLworaW50IHB3cl93YWtlX2RzcChjb25zdCB1MzIgdGltZW91dCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkd19jb250ZXh0OworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsKKwl1MzIgYXJnID0gdGltZW91dDsKKworCWZvciAoaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKwkgICAgIGhkZXZfb2JqICE9IE5VTEw7CisJICAgICBoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0CisJICAgICAoKHUzMikgaGRldl9vYmopKSB7CisJCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCQkgICAgICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkJICAgICAgICoqKSZkd19jb250ZXh0KSkpIHsKKwkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAorCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICAoKmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkgKGR3X2NvbnRleHQsCisJCQkJCQkJQlJESU9DVExfV0FLRVVQLAorCQkJCQkJCSh2b2lkICopJmFyZyk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBwd3JfcG1fcHJlX3NjYWxlPT09PT09PT0KKyAqICAgIFNlbmRzIHByZS1ub3RpZmljYXRpb24gbWVzc2FnZSB0byBEU1AuCisgKi8KK2ludCBwd3JfcG1fcHJlX3NjYWxlKHUxNiB2b2x0YWdlX2RvbWFpbiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQgKmR3X2NvbnRleHQ7CisJaW50IHN0YXR1cyA9IC1FUEVSTTsKKwlzdHJ1Y3QgZGV2X29iamVjdCAqaGRldl9vYmogPSBOVUxMOworCXUzMiBhcmdbMl07CisKKwlhcmdbMF0gPSB2b2x0YWdlX2RvbWFpbjsKKwlhcmdbMV0gPSBsZXZlbDsKKworCWZvciAoaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X2ZpcnN0X2Rldl9vYmplY3QoKTsKKwkgICAgIGhkZXZfb2JqICE9IE5VTEw7CisJICAgICBoZGV2X29iaiA9IChzdHJ1Y3QgZGV2X29iamVjdCAqKWRydl9nZXRfbmV4dF9kZXZfb2JqZWN0CisJICAgICAoKHUzMikgaGRldl9vYmopKSB7CisJCWlmICghKGRldl9nZXRfYnJpZGdlX2NvbnRleHQoaGRldl9vYmosCisJCQkJCQkgICAgICAoc3RydWN0IGJyaWRnZV9kZXZfY29udGV4dAorCQkJCQkJICAgICAgICoqKSZkd19jb250ZXh0KSkpIHsKKwkJCWlmICghKGRldl9nZXRfaW50Zl9meG5zKGhkZXZfb2JqLAorCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqKikmaW50Zl9meG5zKSkpIHsKKwkJCQlzdGF0dXMgPQorCQkJCSAgICAoKmludGZfZnhucy0+cGZuX2Rldl9jbnRybCkgKGR3X2NvbnRleHQsCisJCQkJCQlCUkRJT0NUTF9QUkVTQ0FMRV9OT1RJRlksCisJCQkJCQkodm9pZCAqKSZhcmcpOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcHdyX3BtX3Bvc3Rfc2NhbGU9PT09PT09PQorICogICAgU2VuZHMgcG9zdC1ub3RpZmljYXRpb24gbWVzc2FnZSB0byBEU1AuCisgKi8KK2ludCBwd3JfcG1fcG9zdF9zY2FsZSh1MTYgdm9sdGFnZV9kb21haW4sIHUzMiBsZXZlbCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkd19jb250ZXh0OworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGRldl9vYmplY3QgKmhkZXZfb2JqID0gTlVMTDsKKwl1MzIgYXJnWzJdOworCisJYXJnWzBdID0gdm9sdGFnZV9kb21haW47CisJYXJnWzFdID0gbGV2ZWw7CisKKwlmb3IgKGhkZXZfb2JqID0gKHN0cnVjdCBkZXZfb2JqZWN0ICopZHJ2X2dldF9maXJzdF9kZXZfb2JqZWN0KCk7CisJICAgICBoZGV2X29iaiAhPSBOVUxMOworCSAgICAgaGRldl9vYmogPSAoc3RydWN0IGRldl9vYmplY3QgKilkcnZfZ2V0X25leHRfZGV2X29iamVjdAorCSAgICAgKCh1MzIpIGhkZXZfb2JqKSkgeworCQlpZiAoIShkZXZfZ2V0X2JyaWRnZV9jb250ZXh0KGhkZXZfb2JqLAorCQkJCQkJICAgICAgKHN0cnVjdCBicmlkZ2VfZGV2X2NvbnRleHQKKwkJCQkJCSAgICAgICAqKikmZHdfY29udGV4dCkpKSB7CisJCQlpZiAoIShkZXZfZ2V0X2ludGZfZnhucyhoZGV2X29iaiwKKwkJCSAgICAgIChzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKiopJmludGZfZnhucykpKSB7CisJCQkJc3RhdHVzID0KKwkJCQkgICAgKCppbnRmX2Z4bnMtPnBmbl9kZXZfY250cmwpIChkd19jb250ZXh0LAorCQkJCQkJQlJESU9DVExfUE9TVFNDQUxFX05PVElGWSwKKwkJCQkJCSh2b2lkICopJmFyZyk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvcm1nci9ybW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFlOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivcm1tLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBybW0uYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKgorICogIFRoaXMgbWVtb3J5IG1hbmFnZXIgcHJvdmlkZXMgZ2VuZXJhbCBoZWFwIG1hbmFnZW1lbnQgYW5kIGFyYml0cmFyeQorICogIGFsaWdubWVudCBmb3IgYW55IG51bWJlciBvZiBtZW1vcnkgc2VnbWVudHMuCisgKgorICogIE5vdGVzOgorICoKKyAqICBNZW1vcnkgYmxvY2tzIGFyZSBhbGxvY2F0ZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBmaXJzdCBmcmVlIG1lbW9yeQorICogIGJsb2NrIGxhcmdlIGVub3VnaCB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAgQWxpZ25tZW50IHJlcXVpcmVtZW50cworICogIGFyZSBzYXRpc2ZpZWQgYnkgInNsaWRpbmciIHRoZSBibG9jayBmb3J3YXJkIHVudGlsIGl0cyBiYXNlIHNhdGlzZmllcworICogIHRoZSBhbGlnbm1lbnQgc3BlY2lmaWNhdGlvbjsgaWYgdGhpcyBpcyBub3QgcG9zc2libGUgdGhlbiB0aGUgbmV4dAorICogIGZyZWUgYmxvY2sgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlcXVlc3QgaXMgdHJpZWQuCisgKgorICogIFNpbmNlIGFsaWdubWVudCBjYW4gY2F1c2UgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGZyZWUgYmxvY2sgLSB0aGUKKyAqICB1bnVzZWQgbWVtb3J5IGZvcm1lZCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgZnJlZSBibG9jaworICogIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGFsbG9jYXRlZCBibG9jayAtIHRoZSBtZW1vcnkgbWFuYWdlciBtdXN0IGZyZWUKKyAqICB0aGlzIG1lbW9yeSB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsuCisgKgorICogIE92ZXJsYXkgbWVtb3J5IGlzIG1hbmFnZWQgYnkgcmVzZXJ2aW5nIHRocm91Z2ggcm1tX2FsbG9jLCBhbmQgZnJlZWluZworICogIGl0IHRocm91Z2ggcm1tX2ZyZWUuIFRoZSBtZW1vcnkgbWFuYWdlciBwcmV2ZW50cyBEU1AgY29kZS9kYXRhIHRoYXQgaXMKKyAqICBvdmVybGF5ZWQgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBhcyBsb25nIGFzIHRoZSBtZW1vcnkgaXQgcnVucyBhdCBoYXMKKyAqICBiZWVuIGFsbG9jYXRlZCwgYW5kIG5vdCB5ZXQgZnJlZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEU1AvQklPUyBCcmlkZ2UgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUcmFjZSAmIERlYnVnICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT1MgQWRhcHRhdGlvbiBMYXllciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9saXN0Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3JtbS5oPgorCisvKgorICogID09PT09PT09IHJtbV9oZWFkZXIgPT09PT09PT0KKyAqICBUaGlzIGhlYWRlciBpcyB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBmcmVlIG1lbW9yeSBibG9ja3MuCisgKi8KK3N0cnVjdCBybW1faGVhZGVyIHsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqbmV4dDsJLyogZm9ybSBhIGZyZWUgbWVtb3J5IGxpbmsgbGlzdCAqLworCXUzMiBzaXplOwkJLyogc2l6ZSBvZiB0aGUgZnJlZSBtZW1vcnkgKi8KKwl1MzIgYWRkcjsJCS8qIERTUCBhZGRyZXNzIG9mIG1lbW9yeSBibG9jayAqLworfTsKKworLyoKKyAqICA9PT09PT09PSBybW1fb3ZseV9zZWN0ID09PT09PT09CisgKiAgS2VlcHMgdHJhY2sgb2YgbWVtb3J5IG9jY3VwaWVkIGJ5IG92ZXJsYXkgc2VjdGlvbi4KKyAqLworc3RydWN0IHJtbV9vdmx5X3NlY3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbGVtOworCXUzMiBhZGRyOwkJLyogU3RhcnQgb2YgbWVtb3J5IHNlY3Rpb24gKi8KKwl1MzIgc2l6ZTsJCS8qIExlbmd0aCAodGFyZ2V0IE1BVXMpIG9mIHNlY3Rpb24gKi8KKwlzMzIgcGFnZTsJCS8qIE1lbW9yeSBwYWdlICovCit9OworCisvKgorICogID09PT09PT09IHJtbV90YXJnZXRfb2JqID09PT09PT09CisgKi8KK3N0cnVjdCBybW1fdGFyZ2V0X29iaiB7CisJc3RydWN0IHJtbV9zZWdtZW50ICpzZWdfdGFiOworCXN0cnVjdCBybW1faGVhZGVyICoqZnJlZV9saXN0OworCXUzMiBudW1fc2VnczsKKwlzdHJ1Y3QgbHN0X2xpc3QgKm92bHlfbGlzdDsJLyogTGlzdCBvZiBvdmVybGF5IG1lbW9yeSBpbiB1c2UgKi8KK307CisKK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworc3RhdGljIGJvb2wgYWxsb2NfYmxvY2soc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIHNpemUsCisJCQl1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MpOworc3RhdGljIGJvb2wgZnJlZV9ibG9jayhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgYWRkciwKKwkJICAgICAgIHUzMiBzaXplKTsKKworLyoKKyAqICA9PT09PT09PSBybW1fYWxsb2MgPT09PT09PT0KKyAqLworaW50IHJtbV9hbGxvYyhzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgdTMyIHNlZ2lkLCB1MzIgc2l6ZSwKKwkJICAgICB1MzIgYWxpZ24sIHUzMiAqZHNwX2FkZHJlc3MsIGJvb2wgcmVzZXJ2ZSkKK3sKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqc2VjdDsKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqcHJldl9zZWN0ID0gTlVMTDsKKwlzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqbmV3X3NlY3Q7CisJdTMyIGFkZHI7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRSh0YXJnZXQpOworCURCQ19SRVFVSVJFKGRzcF9hZGRyZXNzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHNpemUgPiAwKTsKKwlEQkNfUkVRVUlSRShyZXNlcnZlIHx8ICh0YXJnZXQtPm51bV9zZWdzID4gMCkpOworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghcmVzZXJ2ZSkgeworCQlpZiAoIWFsbG9jX2Jsb2NrKHRhcmdldCwgc2VnaWQsIHNpemUsIGFsaWduLCBkc3BfYWRkcmVzcykpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQkvKiBJbmNyZW1lbnQgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgYmxvY2tzIGluIHRoaXMKKwkJCSAqIHNlZ21lbnQgKi8KKwkJCXRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyKys7CisJCX0KKwkJZ290byBmdW5jX2VuZDsKKwl9CisJLyogQW4gb3ZlcmxheSBzZWN0aW9uIC0gU2VlIGlmIGJsb2NrIGlzIGFscmVhZHkgaW4gdXNlLiBJZiBub3QsCisJICogaW5zZXJ0IGludG8gdGhlIGxpc3QgaW4gYXNjZW5kaW5nIGFkZHJlc3Mgc2l6ZS4gKi8KKwlhZGRyID0gKmRzcF9hZGRyZXNzOworCXNlY3QgPSAoc3RydWN0IHJtbV9vdmx5X3NlY3QgKilsc3RfZmlyc3QodGFyZ2V0LT5vdmx5X2xpc3QpOworCS8qICBGaW5kIHBsYWNlIHRvIGluc2VydCBuZXcgbGlzdCBlbGVtZW50LiBMaXN0IGlzIHNvcnRlZCBmcm9tCisJICogIHNtYWxsZXN0IHRvIGxhcmdlc3QgYWRkcmVzcy4gKi8KKwl3aGlsZSAoc2VjdCAhPSBOVUxMKSB7CisJCWlmIChhZGRyIDw9IHNlY3QtPmFkZHIpIHsKKwkJCS8qIENoZWNrIGZvciBvdmVybGFwIHdpdGggc2VjdCAqLworCQkJaWYgKChhZGRyICsgc2l6ZSA+IHNlY3QtPmFkZHIpIHx8IChwcmV2X3NlY3QgJiYKKwkJCQkJCQkgICAocHJldl9zZWN0LT5hZGRyICsKKwkJCQkJCQkgICAgcHJldl9zZWN0LT5zaXplID4KKwkJCQkJCQkgICAgYWRkcikpKSB7CisJCQkJc3RhdHVzID0gLUVOWElPOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJcHJldl9zZWN0ID0gc2VjdDsKKwkJc2VjdCA9IChzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqKWxzdF9uZXh0KHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJCShzdHJ1Y3QgbGlzdF9oZWFkICopCisJCQkJCQkJc2VjdCk7CisJfQorCWlmICghc3RhdHVzKSB7CisJCS8qIE5vIG92ZXJsYXAgLSBhbGxvY2F0ZSBsaXN0IGVsZW1lbnQgZm9yIG5ldyBzZWN0aW9uLiAqLworCQluZXdfc2VjdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1fb3ZseV9zZWN0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChuZXdfc2VjdCA9PSBOVUxMKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQl9IGVsc2UgeworCQkJbHN0X2luaXRfZWxlbSgoc3RydWN0IGxpc3RfaGVhZCAqKW5ld19zZWN0KTsKKwkJCW5ld19zZWN0LT5hZGRyID0gYWRkcjsKKwkJCW5ld19zZWN0LT5zaXplID0gc2l6ZTsKKwkJCW5ld19zZWN0LT5wYWdlID0gc2VnaWQ7CisJCQlpZiAoc2VjdCA9PSBOVUxMKSB7CisJCQkJLyogUHV0IG5ldyBzZWN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwkJCQlsc3RfcHV0X3RhaWwodGFyZ2V0LT5vdmx5X2xpc3QsCisJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQgKiluZXdfc2VjdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIFB1dCBuZXcgc2VjdGlvbiBqdXN0IGJlZm9yZSBzZWN0ICovCisJCQkJbHN0X2luc2VydF9iZWZvcmUodGFyZ2V0LT5vdmx5X2xpc3QsCisJCQkJCQkgIChzdHJ1Y3QgbGlzdF9oZWFkICopbmV3X3NlY3QsCisJCQkJCQkgIChzdHJ1Y3QgbGlzdF9oZWFkICopc2VjdCk7CisJCQl9CisJCX0KKwl9CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHJtbV9jcmVhdGUgPT09PT09PT0KKyAqLworaW50IHJtbV9jcmVhdGUoc3RydWN0IHJtbV90YXJnZXRfb2JqICoqdGFyZ2V0X29iaiwKKwkJICAgICAgc3RydWN0IHJtbV9zZWdtZW50IHNlZ190YWJbXSwgdTMyIG51bV9zZWdzKQoreworCXN0cnVjdCBybW1faGVhZGVyICpocHRyOworCXN0cnVjdCBybW1fc2VnbWVudCAqc3B0ciwgKnRtcDsKKwlzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldDsKKwlzMzIgaTsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHRhcmdldF9vYmogIT0gTlVMTCk7CisJREJDX1JFUVVJUkUobnVtX3NlZ3MgPT0gMCB8fCBzZWdfdGFiICE9IE5VTEwpOworCisJLyogQWxsb2NhdGUgREJMIHRhcmdldCBvYmplY3QgKi8KKwl0YXJnZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX3RhcmdldF9vYmopLCBHRlBfS0VSTkVMKTsKKworCWlmICh0YXJnZXQgPT0gTlVMTCkKKwkJc3RhdHVzID0gLUVOT01FTTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19jb250OworCisJdGFyZ2V0LT5udW1fc2VncyA9IG51bV9zZWdzOworCWlmICghKG51bV9zZWdzID4gMCkpCisJCWdvdG8gZnVuY19jb250OworCisJLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBmb3IgZnJlZWxpc3QgZnJvbSBob3N0J3MgbWVtb3J5ICovCisJdGFyZ2V0LT5mcmVlX2xpc3QgPSBremFsbG9jKG51bV9zZWdzICogc2l6ZW9mKHN0cnVjdCBybW1faGVhZGVyICopLAorCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICh0YXJnZXQtPmZyZWVfbGlzdCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJfSBlbHNlIHsKKwkJLyogQWxsb2NhdGUgaGVhZGVycyBmb3IgZWFjaCBlbGVtZW50IG9uIHRoZSBmcmVlIGxpc3QgKi8KKwkJZm9yIChpID0gMDsgaSA8IChzMzIpIG51bV9zZWdzOyBpKyspIHsKKwkJCXRhcmdldC0+ZnJlZV9saXN0W2ldID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgcm1tX2hlYWRlciksIEdGUF9LRVJORUwpOworCQkJaWYgKHRhcmdldC0+ZnJlZV9saXN0W2ldID09IE5VTEwpIHsKKwkJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgaW5pdGlhbCBzZWdtZW50IHRhYmxlICovCisJCXRhcmdldC0+c2VnX3RhYiA9IGt6YWxsb2MobnVtX3NlZ3MgKiBzaXplb2Yoc3RydWN0IHJtbV9zZWdtZW50KSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICh0YXJnZXQtPnNlZ190YWIgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJfSBlbHNlIHsKKwkJCS8qIEluaXRpYWxpemUgc2VnbWVudCB0YWJsZSBhbmQgZnJlZSBsaXN0ICovCisJCQlzcHRyID0gdGFyZ2V0LT5zZWdfdGFiOworCQkJZm9yIChpID0gMCwgdG1wID0gc2VnX3RhYjsgbnVtX3NlZ3MgPiAwOworCQkJICAgICBudW1fc2Vncy0tLCBpKyspIHsKKwkJCQkqc3B0ciA9ICp0bXA7CisJCQkJaHB0ciA9IHRhcmdldC0+ZnJlZV9saXN0W2ldOworCQkJCWhwdHItPmFkZHIgPSB0bXAtPmJhc2U7CisJCQkJaHB0ci0+c2l6ZSA9IHRtcC0+bGVuZ3RoOworCQkJCWhwdHItPm5leHQgPSBOVUxMOworCQkJCXRtcCsrOworCQkJCXNwdHIrKzsKKwkJCX0KKwkJfQorCX0KK2Z1bmNfY29udDoKKwkvKiBJbml0aWFsaXplIG92ZXJsYXkgbWVtb3J5IGxpc3QgKi8KKwlpZiAoIXN0YXR1cykgeworCQl0YXJnZXQtPm92bHlfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsc3RfbGlzdCksCisJCQkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICh0YXJnZXQtPm92bHlfbGlzdCA9PSBOVUxMKQorCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJZWxzZQorCQkJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+b3ZseV9saXN0LT5oZWFkKTsKKwl9CisKKwlpZiAoIXN0YXR1cykgeworCQkqdGFyZ2V0X29iaiA9IHRhcmdldDsKKwl9IGVsc2UgeworCQkqdGFyZ2V0X29iaiA9IE5VTEw7CisJCWlmICh0YXJnZXQpCisJCQlybW1fZGVsZXRlKHRhcmdldCk7CisKKwl9CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICp0YXJnZXRfb2JqKQorCQkgICB8fCAoc3RhdHVzICYmICp0YXJnZXRfb2JqID09IE5VTEwpKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX2RlbGV0ZSA9PT09PT09PQorICovCit2b2lkIHJtbV9kZWxldGUoc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQpCit7CisJc3RydWN0IHJtbV9vdmx5X3NlY3QgKm92bHlfc2VjdGlvbjsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqaHB0cjsKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqbmV4dDsKKwl1MzIgaTsKKworCURCQ19SRVFVSVJFKHRhcmdldCk7CisKKwlrZnJlZSh0YXJnZXQtPnNlZ190YWIpOworCisJaWYgKHRhcmdldC0+b3ZseV9saXN0KSB7CisJCXdoaWxlICgob3ZseV9zZWN0aW9uID0gKHN0cnVjdCBybW1fb3ZseV9zZWN0ICopbHN0X2dldF9oZWFkCisJCQkodGFyZ2V0LT5vdmx5X2xpc3QpKSkgeworCQkJa2ZyZWUob3ZseV9zZWN0aW9uKTsKKwkJfQorCQlEQkNfQVNTRVJUKExTVF9JU19FTVBUWSh0YXJnZXQtPm92bHlfbGlzdCkpOworCQlrZnJlZSh0YXJnZXQtPm92bHlfbGlzdCk7CisJfQorCisJaWYgKHRhcmdldC0+ZnJlZV9saXN0ICE9IE5VTEwpIHsKKwkJLyogRnJlZSBlbGVtZW50cyBvbiBmcmVlbGlzdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0LT5udW1fc2VnczsgaSsrKSB7CisJCQlocHRyID0gbmV4dCA9IHRhcmdldC0+ZnJlZV9saXN0W2ldOworCQkJd2hpbGUgKG5leHQpIHsKKwkJCQlocHRyID0gbmV4dDsKKwkJCQluZXh0ID0gaHB0ci0+bmV4dDsKKwkJCQlrZnJlZShocHRyKTsKKwkJCX0KKwkJfQorCQlrZnJlZSh0YXJnZXQtPmZyZWVfbGlzdCk7CisJfQorCisJa2ZyZWUodGFyZ2V0KTsKK30KKworLyoKKyAqICA9PT09PT09PSBybW1fZXhpdCA9PT09PT09PQorICovCit2b2lkIHJtbV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IHJtbV9mcmVlID09PT09PT09CisgKi8KK2Jvb2wgcm1tX2ZyZWUoc3RydWN0IHJtbV90YXJnZXRfb2JqICp0YXJnZXQsIHUzMiBzZWdpZCwgdTMyIGRzcF9hZGRyLCB1MzIgc2l6ZSwKKwkgICAgICBib29sIHJlc2VydmVkKQoreworCXN0cnVjdCBybW1fb3ZseV9zZWN0ICpzZWN0OworCWJvb2wgcmV0ID0gdHJ1ZTsKKworCURCQ19SRVFVSVJFKHRhcmdldCk7CisKKwlEQkNfUkVRVUlSRShyZXNlcnZlZCB8fCBzZWdpZCA8IHRhcmdldC0+bnVtX3NlZ3MpOworCURCQ19SRVFVSVJFKHJlc2VydmVkIHx8IChkc3BfYWRkciA+PSB0YXJnZXQtPnNlZ190YWJbc2VnaWRdLmJhc2UgJiYKKwkJCQkgKGRzcF9hZGRyICsgc2l6ZSkgPD0gKHRhcmdldC0+c2VnX3RhYltzZWdpZF0uCisJCQkJCQkgICBiYXNlICsKKwkJCQkJCSAgIHRhcmdldC0+c2VnX3RhYltzZWdpZF0uCisJCQkJCQkgICBsZW5ndGgpKSk7CisKKwkvKgorCSAqICBGcmVlIG9yIHVucmVzZXJ2ZSBtZW1vcnkuCisJICovCisJaWYgKCFyZXNlcnZlZCkgeworCQlyZXQgPSBmcmVlX2Jsb2NrKHRhcmdldCwgc2VnaWQsIGRzcF9hZGRyLCBzaXplKTsKKwkJaWYgKHJldCkKKwkJCXRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyLS07CisKKwl9IGVsc2UgeworCQkvKiBVbnJlc2VydmUgbWVtb3J5ICovCisJCXNlY3QgPSAoc3RydWN0IHJtbV9vdmx5X3NlY3QgKilsc3RfZmlyc3QodGFyZ2V0LT5vdmx5X2xpc3QpOworCQl3aGlsZSAoc2VjdCAhPSBOVUxMKSB7CisJCQlpZiAoZHNwX2FkZHIgPT0gc2VjdC0+YWRkcikgeworCQkJCURCQ19BU1NFUlQoc2l6ZSA9PSBzZWN0LT5zaXplKTsKKwkJCQkvKiBSZW1vdmUgZnJvbSBsaXN0ICovCisJCQkJbHN0X3JlbW92ZV9lbGVtKHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKilzZWN0KTsKKwkJCQlrZnJlZShzZWN0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNlY3QgPQorCQkJICAgIChzdHJ1Y3Qgcm1tX292bHlfc2VjdCAqKWxzdF9uZXh0KHRhcmdldC0+b3ZseV9saXN0LAorCQkJCQkJCSAgICAgKHN0cnVjdCBsaXN0X2hlYWQKKwkJCQkJCQkgICAgICAqKXNlY3QpOworCQl9CisJCWlmIChzZWN0ID09IE5VTEwpCisJCQlyZXQgPSBmYWxzZTsKKworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogID09PT09PT09IHJtbV9pbml0ID09PT09PT09CisgKi8KK2Jvb2wgcm1tX2luaXQodm9pZCkKK3sKKwlEQkNfUkVRVUlSRShyZWZzID49IDApOworCisJcmVmcysrOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiAgPT09PT09PT0gcm1tX3N0YXQgPT09PT09PT0KKyAqLworYm9vbCBybW1fc3RhdChzdHJ1Y3Qgcm1tX3RhcmdldF9vYmogKnRhcmdldCwgZW51bSBkc3BfbWVtdHlwZSBzZWdpZCwKKwkgICAgICBzdHJ1Y3QgZHNwX21lbXN0YXQgKm1lbV9zdGF0X2J1ZikKK3sKKwlzdHJ1Y3Qgcm1tX2hlYWRlciAqaGVhZDsKKwlib29sIHJldCA9IGZhbHNlOworCXUzMiBtYXhfZnJlZV9zaXplID0gMDsKKwl1MzIgdG90YWxfZnJlZV9zaXplID0gMDsKKwl1MzIgZnJlZV9ibG9ja3MgPSAwOworCisJREJDX1JFUVVJUkUobWVtX3N0YXRfYnVmICE9IE5VTEwpOworCURCQ19BU1NFUlQodGFyZ2V0ICE9IE5VTEwpOworCisJaWYgKCh1MzIpIHNlZ2lkIDwgdGFyZ2V0LT5udW1fc2VncykgeworCQloZWFkID0gdGFyZ2V0LT5mcmVlX2xpc3Rbc2VnaWRdOworCisJCS8qIENvbGxlY3QgZGF0YSBmcm9tIGZyZWVfbGlzdCAqLworCQl3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CisJCQltYXhfZnJlZV9zaXplID0gbWF4KG1heF9mcmVlX3NpemUsIGhlYWQtPnNpemUpOworCQkJdG90YWxfZnJlZV9zaXplICs9IGhlYWQtPnNpemU7CisJCQlmcmVlX2Jsb2NrcysrOworCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisJCX0KKworCQkvKiB1bF9zaXplICovCisJCW1lbV9zdGF0X2J1Zi0+dWxfc2l6ZSA9IHRhcmdldC0+c2VnX3RhYltzZWdpZF0ubGVuZ3RoOworCisJCS8qIHVsX251bV9mcmVlX2Jsb2NrcyAqLworCQltZW1fc3RhdF9idWYtPnVsX251bV9mcmVlX2Jsb2NrcyA9IGZyZWVfYmxvY2tzOworCisJCS8qIHVsX3RvdGFsX2ZyZWVfc2l6ZSAqLworCQltZW1fc3RhdF9idWYtPnVsX3RvdGFsX2ZyZWVfc2l6ZSA9IHRvdGFsX2ZyZWVfc2l6ZTsKKworCQkvKiB1bF9sZW5fbWF4X2ZyZWVfYmxvY2sgKi8KKwkJbWVtX3N0YXRfYnVmLT51bF9sZW5fbWF4X2ZyZWVfYmxvY2sgPSBtYXhfZnJlZV9zaXplOworCisJCS8qIHVsX251bV9hbGxvY19ibG9ja3MgKi8KKwkJbWVtX3N0YXRfYnVmLT51bF9udW1fYWxsb2NfYmxvY2tzID0KKwkJICAgIHRhcmdldC0+c2VnX3RhYltzZWdpZF0ubnVtYmVyOworCisJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBiYWxsb2MgPT09PT09PT0KKyAqICBUaGlzIGFsbG9jYXRpb24gZnVuY3Rpb24gYWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBsb3dlc3QgYWRkcmVzc2VzCisgKiAgZmlyc3QuCisgKi8KK3N0YXRpYyBib29sIGFsbG9jX2Jsb2NrKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBzaXplLAorCQkJdTMyIGFsaWduLCB1MzIgKmRzcF9hZGRyZXNzKQoreworCXN0cnVjdCBybW1faGVhZGVyICpoZWFkOworCXN0cnVjdCBybW1faGVhZGVyICpwcmV2aGVhZCA9IE5VTEw7CisJc3RydWN0IHJtbV9oZWFkZXIgKm5leHQ7CisJdTMyIHRtcGFsaWduOworCXUzMiBhbGlnbmJ5dGVzOworCXUzMiBoc2l6ZTsKKwl1MzIgYWxsb2NzaXplOworCXUzMiBhZGRyOworCisJYWxpZ25ieXRlcyA9IChhbGlnbiA9PSAwKSA/IDEgOiBhbGlnbjsKKwlwcmV2aGVhZCA9IE5VTEw7CisJaGVhZCA9IHRhcmdldC0+ZnJlZV9saXN0W3NlZ2lkXTsKKworCWRvIHsKKwkJaHNpemUgPSBoZWFkLT5zaXplOworCQluZXh0ID0gaGVhZC0+bmV4dDsKKworCQlhZGRyID0gaGVhZC0+YWRkcjsJLyogYWxsb2MgZnJvbSB0aGUgYm90dG9tICovCisKKwkJLyogYWxpZ24gYWxsb2NhdGlvbiAqLworCQkodG1wYWxpZ24gPSAodTMyKSBhZGRyICUgYWxpZ25ieXRlcyk7CisJCWlmICh0bXBhbGlnbiAhPSAwKQorCQkJdG1wYWxpZ24gPSBhbGlnbmJ5dGVzIC0gdG1wYWxpZ247CisKKwkJYWxsb2NzaXplID0gc2l6ZSArIHRtcGFsaWduOworCisJCWlmIChoc2l6ZSA+PSBhbGxvY3NpemUpIHsJLyogYmlnIGVub3VnaCAqLworCQkJaWYgKGhzaXplID09IGFsbG9jc2l6ZSAmJiBwcmV2aGVhZCAhPSBOVUxMKSB7CisJCQkJcHJldmhlYWQtPm5leHQgPSBuZXh0OworCQkJCWtmcmVlKGhlYWQpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkLT5zaXplID0gaHNpemUgLSBhbGxvY3NpemU7CisJCQkJaGVhZC0+YWRkciArPSBhbGxvY3NpemU7CisJCQl9CisKKwkJCS8qIGZyZWUgdXAgYW55IGhvbGUgY3JlYXRlZCBieSBhbGlnbm1lbnQgKi8KKwkJCWlmICh0bXBhbGlnbikKKwkJCQlmcmVlX2Jsb2NrKHRhcmdldCwgc2VnaWQsIGFkZHIsIHRtcGFsaWduKTsKKworCQkJKmRzcF9hZGRyZXNzID0gYWRkciArIHRtcGFsaWduOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlwcmV2aGVhZCA9IGhlYWQ7CisJCWhlYWQgPSBuZXh0OworCisJfSB3aGlsZSAoaGVhZCAhPSBOVUxMKTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqICA9PT09PT09PSBmcmVlX2Jsb2NrID09PT09PT09CisgKiAgVE8gRE86IGZyZWVfYmxvY2soKSBhbGxvY2F0ZXMgbWVtb3J5LCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZmFpbHVyZS4KKyAqICBDb3VsZCBhbGxvY2F0ZSBhbiBybW1faGVhZGVyIGluIHJtbV9hbGxvYygpLCB0byBiZSBrZXB0IGluIGEgcG9vbC4KKyAqICBmcmVlX2Jsb2NrKCkgY291bGQgdXNlIGFuIHJtbV9oZWFkZXIgZnJvbSB0aGUgcG9vbCwgZnJlZWluZyBhcyBibG9ja3MKKyAqICBhcmUgY29hbGVzY2VkLgorICovCitzdGF0aWMgYm9vbCBmcmVlX2Jsb2NrKHN0cnVjdCBybW1fdGFyZ2V0X29iaiAqdGFyZ2V0LCB1MzIgc2VnaWQsIHUzMiBhZGRyLAorCQkgICAgICAgdTMyIHNpemUpCit7CisJc3RydWN0IHJtbV9oZWFkZXIgKmhlYWQ7CisJc3RydWN0IHJtbV9oZWFkZXIgKnRoZWFkOworCXN0cnVjdCBybW1faGVhZGVyICpyaGVhZDsKKwlib29sIHJldCA9IHRydWU7CisKKwkvKiBDcmVhdGUgYSBtZW1vcnkgaGVhZGVyIHRvIGhvbGQgdGhlIG5ld2x5IGZyZWUnZCBibG9jay4gKi8KKwlyaGVhZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBybW1faGVhZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJoZWFkID09IE5VTEwpIHsKKwkJcmV0ID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJLyogc2VhcmNoIGRvd24gdGhlIGZyZWUgbGlzdCB0byBmaW5kIHRoZSByaWdodCBwbGFjZSBmb3IgYWRkciAqLworCQloZWFkID0gdGFyZ2V0LT5mcmVlX2xpc3Rbc2VnaWRdOworCisJCWlmIChhZGRyID49IGhlYWQtPmFkZHIpIHsKKwkJCXdoaWxlIChoZWFkLT5uZXh0ICE9IE5VTEwgJiYgYWRkciA+IGhlYWQtPm5leHQtPmFkZHIpCisJCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisKKwkJCXRoZWFkID0gaGVhZC0+bmV4dDsKKworCQkJaGVhZC0+bmV4dCA9IHJoZWFkOworCQkJcmhlYWQtPm5leHQgPSB0aGVhZDsKKwkJCXJoZWFkLT5hZGRyID0gYWRkcjsKKwkJCXJoZWFkLT5zaXplID0gc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCSpyaGVhZCA9ICpoZWFkOworCQkJaGVhZC0+bmV4dCA9IHJoZWFkOworCQkJaGVhZC0+YWRkciA9IGFkZHI7CisJCQloZWFkLT5zaXplID0gc2l6ZTsKKwkJCXRoZWFkID0gcmhlYWQtPm5leHQ7CisJCX0KKworCQkvKiBqb2luIHdpdGggdXBwZXIgYmxvY2ssIGlmIHBvc3NpYmxlICovCisJCWlmICh0aGVhZCAhPSBOVUxMICYmIChyaGVhZC0+YWRkciArIHJoZWFkLT5zaXplKSA9PQorCQkgICAgdGhlYWQtPmFkZHIpIHsKKwkJCWhlYWQtPm5leHQgPSByaGVhZC0+bmV4dDsKKwkJCXRoZWFkLT5zaXplID0gc2l6ZSArIHRoZWFkLT5zaXplOworCQkJdGhlYWQtPmFkZHIgPSBhZGRyOworCQkJa2ZyZWUocmhlYWQpOworCQkJcmhlYWQgPSB0aGVhZDsKKwkJfQorCisJCS8qIGpvaW4gd2l0aCB0aGUgbG93ZXIgYmxvY2ssIGlmIHBvc3NpYmxlICovCisJCWlmICgoaGVhZC0+YWRkciArIGhlYWQtPnNpemUpID09IHJoZWFkLT5hZGRyKSB7CisJCQloZWFkLT5uZXh0ID0gcmhlYWQtPm5leHQ7CisJCQloZWFkLT5zaXplID0gaGVhZC0+c2l6ZSArIHJoZWFkLT5zaXplOworCQkJa2ZyZWUocmhlYWQpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3N0cm0uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9ybWdyL3N0cm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJlYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3JtZ3Ivc3RybS5jCkBAIC0wLDAgKzEsODUzIEBACisvKgorICogc3RybS5jCisgKgorICogRFNQLUJJT1MgQnJpZGdlIGRyaXZlciBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgVEkgT01BUCBwcm9jZXNzb3JzLgorICoKKyAqIERTUC9CSU9TIEJyaWRnZSBTdHJlYW0gTWFuYWdlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhvc3QgT1MgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvaG9zdF9vcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQnJpZGdlIERyaXZlciAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kc3BkZWZzLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSZXNvdXJjZSBNYW5hZ2VyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL25vZGVwcml2Lmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPdGhlcnMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY21tLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N0cm0uaD4KKworI2luY2x1ZGUgPGRzcGJyaWRnZS9jZmcuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvcmVzb3VyY2VjbGVhbnVwLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWZpbmVzLCBEYXRhIFN0cnVjdHVyZXMsIFR5cGVkZWZzICovCisjZGVmaW5lIERFRkFVTFRUSU1FT1VUICAgICAgMTAwMDAKKyNkZWZpbmUgREVGQVVMVE5VTUJVRlMgICAgICAyCisKKy8qCisgKiAgPT09PT09PT0gc3RybV9tZ3IgPT09PT09PT0KKyAqICBUaGUgc3RybV9tZ3IgY29udGFpbnMgZGV2aWNlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBvcGVuIHRoZSB1bmRlcmx5aW5nCisgKiAgY2hhbm5lbHMgb2YgYSBzdHJlYW0uCisgKi8KK3N0cnVjdCBzdHJtX21nciB7CisJc3RydWN0IGRldl9vYmplY3QgKmRldl9vYmo7CS8qIERldmljZSBmb3IgdGhpcyBwcm9jZXNzb3IgKi8KKwlzdHJ1Y3QgY2hubF9tZ3IgKmhjaG5sX21ncjsJLyogQ2hhbm5lbCBtYW5hZ2VyICovCisJLyogRnVuY3Rpb24gaW50ZXJmYWNlIHRvIEJyaWRnZSBkcml2ZXIgKi8KKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKK307CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9vYmplY3QgPT09PT09PT0KKyAqICBUaGlzIG9iamVjdCBpcyBhbGxvY2F0ZWQgaW4gc3RybV9vcGVuKCkuCisgKi8KK3N0cnVjdCBzdHJtX29iamVjdCB7CisJc3RydWN0IHN0cm1fbWdyICpzdHJtX21ncl9vYmo7CisJc3RydWN0IGNobmxfb2JqZWN0ICpjaG5sX29iajsKKwl1MzIgZGlyOwkJLyogRFNQX1RPTk9ERSBvciBEU1BfRlJPTU5PREUgKi8KKwl1MzIgdXRpbWVvdXQ7CisJdTMyIG51bV9idWZzOwkJLyogTWF4ICMgb2YgYnVmcyBhbGxvd2VkIGluIHN0cmVhbSAqLworCXUzMiB1bl9idWZzX2luX3N0cm07CS8qIEN1cnJlbnQgIyBvZiBidWZzIGluIHN0cmVhbSAqLworCXUzMiB1bF9uX2J5dGVzOwkJLyogYnl0ZXMgdHJhbnNmZXJyZWQgc2luY2UgaWRsZWQgKi8KKwkvKiBTVFJFQU1fSURMRSwgU1RSRUFNX1JFQURZLCAuLi4gKi8KKwllbnVtIGRzcF9zdHJlYW1zdGF0ZSBzdHJtX3N0YXRlOworCXZvaWQgKnVzZXJfZXZlbnQ7CS8qIFNhdmVkIGZvciBzdHJtX2dldF9pbmZvKCkgKi8KKwllbnVtIGRzcF9zdHJtbW9kZSBzdHJtX21vZGU7CS8qIFNUUk1NT0RFX1tQUk9DQ09QWV1bWkVST0NPUFldLi4uICovCisJdTMyIHVkbWFfY2hubF9pZDsJLyogRE1BIGNobmwgaWQgKi8KKwl1MzIgdWRtYV9wcmlvcml0eTsJLyogRE1BIHByaW9yaXR5OkRNQVBSSV9bTE9XXVtISUdIXSAqLworCXUzMiBzZWdtZW50X2lkOwkJLyogPjAgaXMgU00gc2VnbWVudC49MCBpcyBsb2NhbCBoZWFwICovCisJdTMyIGJ1Zl9hbGlnbm1lbnQ7CS8qIEFsaWdubWVudCBmb3Igc3RyZWFtIGJ1ZnMgKi8KKwkvKiBTdHJlYW0ncyBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgKi8KKwlzdHJ1Y3QgY21tX3hsYXRvcm9iamVjdCAqeGxhdG9yOworfTsKKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbHMgKi8KK3N0YXRpYyB1MzIgcmVmczsJCS8qIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQgZGVsZXRlX3N0cm0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqKTsKKworLyoKKyAqICA9PT09PT09PSBzdHJtX2FsbG9jYXRlX2J1ZmZlciA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIEFsbG9jYXRlcyBidWZmZXJzIGZvciBhIHN0cmVhbS4KKyAqLworaW50IHN0cm1fYWxsb2NhdGVfYnVmZmVyKHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKnN0cm1yZXMsIHUzMiB1c2l6ZSwKKwkJCQl1OCAqKmFwX2J1ZmZlciwgdTMyIG51bV9idWZzLAorCQkJCXN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdTMyIGFsbG9jX2NudCA9IDA7CisJdTMyIGk7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqID0gc3RybXJlcy0+aHN0cmVhbTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShhcF9idWZmZXIgIT0gTlVMTCk7CisKKwlpZiAoc3RyZWFtX29iaikgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBmcm9tIHNlZ21lbnQgc3BlY2lmaWVkIGF0IHRpbWUgb2Ygc3RyZWFtIG9wZW4uCisJCSAqLworCQlpZiAodXNpemUgPT0gMCkKKwkJCXN0YXR1cyA9IC1FSU5WQUw7CisKKwl9IGVsc2UgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0KKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1ZnM7IGkrKykgeworCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnhsYXRvciAhPSBOVUxMKTsKKwkJKHZvaWQpY21tX3hsYXRvcl9hbGxvY19idWYoc3RyZWFtX29iai0+eGxhdG9yLCAmYXBfYnVmZmVyW2ldLAorCQkJCQkgICB1c2l6ZSk7CisJCWlmIChhcF9idWZmZXJbaV0gPT0gTlVMTCkgeworCQkJc3RhdHVzID0gLUVOT01FTTsKKwkJCWFsbG9jX2NudCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlzdHJtX2ZyZWVfYnVmZmVyKHN0cm1yZXMsIGFwX2J1ZmZlciwgYWxsb2NfY250LCBwcl9jdHh0KTsKKworCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwlkcnZfcHJvY191cGRhdGVfc3RybV9yZXMobnVtX2J1ZnMsIHN0cm1yZXMpOworCitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fY2xvc2UgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDbG9zZSBhIHN0cmVhbSBvcGVuZWQgd2l0aCBzdHJtX29wZW4oKS4KKyAqLworaW50IHN0cm1fY2xvc2Uoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqc3RybXJlcywKKwkJICAgICAgc3RydWN0IHByb2Nlc3NfY29udGV4dCAqcHJfY3R4dCkKK3sKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3QgY2hubF9pbmZvIGNobmxfaW5mb19vYmo7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqID0gc3RybXJlcy0+aHN0cmVhbTsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKworCWlmICghc3RyZWFtX29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCS8qIEhhdmUgYWxsIGJ1ZmZlcnMgYmVlbiByZWNsYWltZWQ/IElmIG5vdCwgcmV0dXJuCisJCSAqIC1FUElQRSAqLworCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJc3RhdHVzID0KKwkJICAgICgqaW50Zl9meG5zLT5wZm5fY2hubF9nZXRfaW5mbykgKHN0cmVhbV9vYmotPmNobmxfb2JqLAorCQkJCQkJICAgICAmY2hubF9pbmZvX29iaik7CisJCURCQ19BU1NFUlQoIXN0YXR1cyk7CisKKwkJaWYgKGNobmxfaW5mb19vYmouY2lvX2NzID4gMCB8fCBjaG5sX2luZm9fb2JqLmNpb19yZXFzID4gMCkKKwkJCXN0YXR1cyA9IC1FUElQRTsKKwkJZWxzZQorCQkJc3RhdHVzID0gZGVsZXRlX3N0cm0oc3RyZWFtX29iaik7CisJfQorCisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2VuZDsKKworCWlkcl9yZW1vdmUocHJfY3R4dC0+c3RyZWFtX2lkLCBzdHJtcmVzLT5pZCk7CitmdW5jX2VuZDoKKwlEQkNfRU5TVVJFKHN0YXR1cyA9PSAwIHx8IHN0YXR1cyA9PSAtRUZBVUxUIHx8CisJCSAgIHN0YXR1cyA9PSAtRVBJUEUgfHwgc3RhdHVzID09IC1FUEVSTSk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBzdHJlYW1fb2JqOiAlcCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLAorCQlzdHJlYW1fb2JqLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9jcmVhdGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBDcmVhdGUgYSBTVFJNIG1hbmFnZXIgb2JqZWN0LgorICovCitpbnQgc3RybV9jcmVhdGUoc3RydWN0IHN0cm1fbWdyICoqc3RybV9tYW4sCisJCSAgICAgICBzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iaikKK3sKKwlzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJtX21hbiAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShkZXZfb2JqICE9IE5VTEwpOworCisJKnN0cm1fbWFuID0gTlVMTDsKKwkvKiBBbGxvY2F0ZSBTVFJNIG1hbmFnZXIgb2JqZWN0ICovCisJc3RybV9tZ3Jfb2JqID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0cm1fbWdyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0cm1fbWdyX29iaiA9PSBOVUxMKQorCQlzdGF0dXMgPSAtRU5PTUVNOworCWVsc2UKKwkJc3RybV9tZ3Jfb2JqLT5kZXZfb2JqID0gZGV2X29iajsKKworCS8qIEdldCBDaGFubmVsIG1hbmFnZXIgYW5kIEJyaWRnZSBmdW5jdGlvbiBpbnRlcmZhY2UgKi8KKwlpZiAoIXN0YXR1cykgeworCQlzdGF0dXMgPSBkZXZfZ2V0X2NobmxfbWdyKGRldl9vYmosICYoc3RybV9tZ3Jfb2JqLT5oY2hubF9tZ3IpKTsKKwkJaWYgKCFzdGF0dXMpIHsKKwkJCSh2b2lkKWRldl9nZXRfaW50Zl9meG5zKGRldl9vYmosCisJCQkJCQkmKHN0cm1fbWdyX29iai0+aW50Zl9meG5zKSk7CisJCQlEQkNfQVNTRVJUKHN0cm1fbWdyX29iai0+aW50Zl9meG5zICE9IE5VTEwpOworCQl9CisJfQorCisJaWYgKCFzdGF0dXMpCisJCSpzdHJtX21hbiA9IHN0cm1fbWdyX29iajsKKwllbHNlCisJCWtmcmVlKHN0cm1fbWdyX29iaik7CisKKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmICpzdHJtX21hbikgfHwgKHN0YXR1cyAmJiAqc3RybV9tYW4gPT0gTlVMTCkpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2RlbGV0ZSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERlbGV0ZSB0aGUgU1RSTSBNYW5hZ2VyIE9iamVjdC4KKyAqLwordm9pZCBzdHJtX2RlbGV0ZShzdHJ1Y3Qgc3RybV9tZ3IgKnN0cm1fbWdyX29iaikKK3sKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RybV9tZ3Jfb2JqKTsKKworCWtmcmVlKHN0cm1fbWdyX29iaik7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9leGl0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgRGlzY29udGludWUgdXNhZ2Ugb2YgU1RSTSBtb2R1bGUuCisgKi8KK3ZvaWQgc3RybV9leGl0KHZvaWQpCit7CisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJcmVmcy0tOworCisJREJDX0VOU1VSRShyZWZzID49IDApOworfQorCisvKgorICogID09PT09PT09IHN0cm1fZnJlZV9idWZmZXIgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyB0aGUgYnVmZmVycyBhbGxvY2F0ZWQgZm9yIGEgc3RyZWFtLgorICovCitpbnQgc3RybV9mcmVlX2J1ZmZlcihzdHJ1Y3Qgc3RybV9yZXNfb2JqZWN0ICpzdHJtcmVzLCB1OCAqKiBhcF9idWZmZXIsCisJCQkgICAgdTMyIG51bV9idWZzLCBzdHJ1Y3QgcHJvY2Vzc19jb250ZXh0ICpwcl9jdHh0KQoreworCWludCBzdGF0dXMgPSAwOworCXUzMiBpID0gMDsKKwlzdHJ1Y3Qgc3RybV9vYmplY3QgKnN0cmVhbV9vYmogPSBzdHJtcmVzLT5oc3RyZWFtOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGFwX2J1ZmZlciAhPSBOVUxMKTsKKworCWlmICghc3RyZWFtX29iaikKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmICghc3RhdHVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fYnVmczsgaSsrKSB7CisJCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnhsYXRvciAhPSBOVUxMKTsKKwkJCXN0YXR1cyA9CisJCQkgICAgY21tX3hsYXRvcl9mcmVlX2J1ZihzdHJlYW1fb2JqLT54bGF0b3IsCisJCQkJCQlhcF9idWZmZXJbaV0pOworCQkJaWYgKHN0YXR1cykKKwkJCQlicmVhazsKKwkJCWFwX2J1ZmZlcltpXSA9IE5VTEw7CisJCX0KKwl9CisJZHJ2X3Byb2NfdXBkYXRlX3N0cm1fcmVzKG51bV9idWZzIC0gaSwgc3RybXJlcyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fZ2V0X2luZm8gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBzdHJlYW0uCisgKi8KK2ludCBzdHJtX2dldF9pbmZvKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwKKwkJCSBzdHJ1Y3Qgc3RyZWFtX2luZm8gKnN0cmVhbV9pbmZvLAorCQkJIHUzMiBzdHJlYW1faW5mb19zaXplKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCXN0cnVjdCBjaG5sX2luZm8gY2hubF9pbmZvX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl2b2lkICp2aXJ0X2Jhc2UgPSBOVUxMOwkvKiBOVUxMIGlmIG5vIFNNIHVzZWQgKi8KKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJlYW1faW5mbyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShzdHJlYW1faW5mb19zaXplID49IHNpemVvZihzdHJ1Y3Qgc3RyZWFtX2luZm8pKTsKKworCWlmICghc3RyZWFtX29iaikgeworCQlzdGF0dXMgPSAtRUZBVUxUOworCX0gZWxzZSB7CisJCWlmIChzdHJlYW1faW5mb19zaXplIDwgc2l6ZW9mKHN0cnVjdCBzdHJlYW1faW5mbykpIHsKKwkJCS8qIHNpemUgb2YgdXNlcnMgaW5mbyAqLworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaW50Zl9meG5zID0gc3RyZWFtX29iai0+c3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pbmZvKSAoc3RyZWFtX29iai0+Y2hubF9vYmosCisJCQkJCQkgICZjaG5sX2luZm9fb2JqKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGZ1bmNfZW5kOworCisJaWYgKHN0cmVhbV9vYmotPnhsYXRvcikgeworCQkvKiBXZSBoYXZlIGEgdHJhbnNsYXRvciAqLworCQlEQkNfQVNTRVJUKHN0cmVhbV9vYmotPnNlZ21lbnRfaWQgPiAwKTsKKwkJY21tX3hsYXRvcl9pbmZvKHN0cmVhbV9vYmotPnhsYXRvciwgKHU4ICoqKSAmdmlydF9iYXNlLCAwLAorCQkJCXN0cmVhbV9vYmotPnNlZ21lbnRfaWQsIGZhbHNlKTsKKwl9CisJc3RyZWFtX2luZm8tPnNlZ21lbnRfaWQgPSBzdHJlYW1fb2JqLT5zZWdtZW50X2lkOworCXN0cmVhbV9pbmZvLT5zdHJtX21vZGUgPSBzdHJlYW1fb2JqLT5zdHJtX21vZGU7CisJc3RyZWFtX2luZm8tPnZpcnRfYmFzZSA9IHZpcnRfYmFzZTsKKwlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5udW1iZXJfYnVmc19hbGxvd2VkID0gc3RyZWFtX29iai0+bnVtX2J1ZnM7CisJc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+bnVtYmVyX2J1ZnNfaW5fc3RyZWFtID0gY2hubF9pbmZvX29iai5jaW9fY3MgKworCSAgICBjaG5sX2luZm9fb2JqLmNpb19yZXFzOworCS8qICMgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgc2luY2UgbGFzdCBjYWxsIHRvIERTUFN0cmVhbV9JZGxlKCkgKi8KKwlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT51bF9udW1iZXJfYnl0ZXMgPSBjaG5sX2luZm9fb2JqLmJ5dGVzX3R4OworCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnN5bmNfb2JqZWN0X2hhbmRsZSA9IGNobmxfaW5mb19vYmouZXZlbnRfb2JqOworCS8qIERldGVybWluZSBzdHJlYW0gc3RhdGUgYmFzZWQgb24gY2hhbm5lbCBzdGF0ZSBhbmQgaW5mbyAqLworCWlmIChjaG5sX2luZm9fb2JqLmR3X3N0YXRlICYgQ0hOTF9TVEFURUVPUykgeworCQlzdHJlYW1faW5mby0+dXNlcl9zdHJtLT5zc19zdHJlYW1fc3RhdGUgPSBTVFJFQU1fRE9ORTsKKwl9IGVsc2UgeworCQlpZiAoY2hubF9pbmZvX29iai5jaW9fY3MgPiAwKQorCQkJc3RyZWFtX2luZm8tPnVzZXJfc3RybS0+c3Nfc3RyZWFtX3N0YXRlID0gU1RSRUFNX1JFQURZOworCQllbHNlIGlmIChjaG5sX2luZm9fb2JqLmNpb19yZXFzID4gMCkKKwkJCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnNzX3N0cmVhbV9zdGF0ZSA9CisJCQkgICAgU1RSRUFNX1BFTkRJTkc7CisJCWVsc2UKKwkJCXN0cmVhbV9pbmZvLT51c2VyX3N0cm0tPnNzX3N0cmVhbV9zdGF0ZSA9IFNUUkVBTV9JRExFOworCisJfQorZnVuY19lbmQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lkbGUgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJZGxlcyBhIHBhcnRpY3VsYXIgc3RyZWFtLgorICovCitpbnQgc3RybV9pZGxlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgYm9vbCBmbHVzaF9kYXRhKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCisJaWYgKCFzdHJlYW1fb2JqKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJaW50Zl9meG5zID0gc3RyZWFtX29iai0+c3RybV9tZ3Jfb2JqLT5pbnRmX2Z4bnM7CisKKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2lkbGUpIChzdHJlYW1fb2JqLT5jaG5sX29iaiwKKwkJCQkJCSAgICAgIHN0cmVhbV9vYmotPnV0aW1lb3V0LAorCQkJCQkJICAgICAgZmx1c2hfZGF0YSk7CisJfQorCisJZGV2X2RiZyhicmlkZ2UsICIlczogc3RyZWFtX29iajogJXAgZmx1c2hfZGF0YTogMHgleCBzdGF0dXM6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBzdHJlYW1fb2JqLCBmbHVzaF9kYXRhLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9pbml0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSW5pdGlhbGl6ZSB0aGUgU1RSTSBtb2R1bGUuCisgKi8KK2Jvb2wgc3RybV9pbml0KHZvaWQpCit7CisJYm9vbCByZXQgPSB0cnVlOworCisJREJDX1JFUVVJUkUocmVmcyA+PSAwKTsKKworCWlmIChyZXQpCisJCXJlZnMrKzsKKworCURCQ19FTlNVUkUoKHJldCAmJiAocmVmcyA+IDApKSB8fCAoIXJldCAmJiAocmVmcyA+PSAwKSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICA9PT09PT09PSBzdHJtX2lzc3VlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgSXNzdWVzIGEgYnVmZmVyIG9uIGEgc3RyZWFtCisgKi8KK2ludCBzdHJtX2lzc3VlKHN0cnVjdCBzdHJtX29iamVjdCAqc3RyZWFtX29iaiwgdTggKnBidWYsIHUzMiB1bF9ieXRlcywKKwkJICAgICAgdTMyIHVsX2J1Zl9zaXplLCB1MzIgZHdfYXJnKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCXZvaWQgKnRtcF9idWYgPSBOVUxMOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKHBidWYgIT0gTlVMTCk7CisKKwlpZiAoIXN0cmVhbV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9IGVsc2UgeworCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKworCQlpZiAoc3RyZWFtX29iai0+c2VnbWVudF9pZCAhPSAwKSB7CisJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+eGxhdG9yLAorCQkJCQkJICAgICAgICh2b2lkICopcGJ1ZiwKKwkJCQkJCSAgICAgICBDTU1fVkEyRFNQUEEpOworCQkJaWYgKHRtcF9idWYgPT0gTlVMTCkKKwkJCQlzdGF0dXMgPSAtRVNSQ0g7CisKKwkJfQorCQlpZiAoIXN0YXR1cykgeworCQkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2FkZF9pb19yZXEpCisJCQkgICAgKHN0cmVhbV9vYmotPmNobmxfb2JqLCBwYnVmLCB1bF9ieXRlcywgdWxfYnVmX3NpemUsCisJCQkgICAgICh1MzIpIHRtcF9idWYsIGR3X2FyZyk7CisJCX0KKwkJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQkJc3RhdHVzID0gLUVOT1NSOworCX0KKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IHN0cmVhbV9vYmo6ICVwIHBidWY6ICVwIHVsX2J5dGVzOiAweCV4IGR3X2FyZzoiCisJCSIgMHgleCBzdGF0dXM6IDB4JXhcbiIsIF9fZnVuY19fLCBzdHJlYW1fb2JqLCBwYnVmLAorCQl1bF9ieXRlcywgZHdfYXJnLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9vcGVuID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgT3BlbiBhIHN0cmVhbSBmb3Igc2VuZGluZy9yZWNlaXZpbmcgZGF0YSBidWZmZXJzIHRvL2Zyb20gYSB0YXNrIG9yCisgKiAgICAgIFhEQUlTIHNvY2tldCBub2RlIG9uIHRoZSBEU1AuCisgKi8KK2ludCBzdHJtX29wZW4oc3RydWN0IG5vZGVfb2JqZWN0ICpobm9kZSwgdTMyIGRpciwgdTMyIGluZGV4LAorCQkgICAgIHN0cnVjdCBzdHJtX2F0dHIgKnBhdHRyLAorCQkgICAgIHN0cnVjdCBzdHJtX3Jlc19vYmplY3QgKipzdHJtcmVzLAorCQkgICAgIHN0cnVjdCBwcm9jZXNzX2NvbnRleHQgKnByX2N0eHQpCit7CisJc3RydWN0IHN0cm1fbWdyICpzdHJtX21ncl9vYmo7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJdTMyIHVsX2NobmxfaWQ7CisJc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJtX29iaiA9IE5VTEw7CisJczggY2hubF9tb2RlOworCXN0cnVjdCBjaG5sX2F0dHIgY2hubF9hdHRyX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgY21tX29iamVjdCAqaGNtbV9tZ3IgPSBOVUxMOwkvKiBTaGFyZWQgbWVtb3J5IG1hbmFnZXIgaG5kbCAqLworCisJdm9pZCAqc3RyZWFtX3JlczsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShzdHJtcmVzICE9IE5VTEwpOworCURCQ19SRVFVSVJFKHBhdHRyICE9IE5VTEwpOworCSpzdHJtcmVzID0gTlVMTDsKKwlpZiAoZGlyICE9IERTUF9UT05PREUgJiYgZGlyICE9IERTUF9GUk9NTk9ERSkgeworCQlzdGF0dXMgPSAtRVBFUk07CisJfSBlbHNlIHsKKwkJLyogR2V0IHRoZSBjaGFubmVsIGlkIGZyb20gdGhlIG5vZGUgKHNldCBpbiBub2RlX2Nvbm5lY3QoKSkgKi8KKwkJc3RhdHVzID0gbm9kZV9nZXRfY2hhbm5lbF9pZChobm9kZSwgZGlyLCBpbmRleCwgJnVsX2NobmxfaWQpOworCX0KKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbm9kZV9nZXRfc3RybV9tZ3IoaG5vZGUsICZzdHJtX21ncl9vYmopOworCisJaWYgKCFzdGF0dXMpIHsKKwkJc3RybV9vYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RybV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHN0cm1fb2JqID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlzdHJtX29iai0+c3RybV9tZ3Jfb2JqID0gc3RybV9tZ3Jfb2JqOworCQkJc3RybV9vYmotPmRpciA9IGRpcjsKKwkJCXN0cm1fb2JqLT5zdHJtX3N0YXRlID0gU1RSRUFNX0lETEU7CisJCQlzdHJtX29iai0+dXNlcl9ldmVudCA9IHBhdHRyLT51c2VyX2V2ZW50OworCQkJaWYgKHBhdHRyLT5zdHJlYW1fYXR0cl9pbiAhPSBOVUxMKSB7CisJCQkJc3RybV9vYmotPnV0aW1lb3V0ID0KKwkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT51dGltZW91dDsKKwkJCQlzdHJtX29iai0+bnVtX2J1ZnMgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPm51bV9idWZzOworCQkJCXN0cm1fb2JqLT5zdHJtX21vZGUgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPnN0cm1fbW9kZTsKKwkJCQlzdHJtX29iai0+c2VnbWVudF9pZCA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+c2VnbWVudF9pZDsKKwkJCQlzdHJtX29iai0+YnVmX2FsaWdubWVudCA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+YnVmX2FsaWdubWVudDsKKwkJCQlzdHJtX29iai0+dWRtYV9jaG5sX2lkID0KKwkJCQkgICAgcGF0dHItPnN0cmVhbV9hdHRyX2luLT51ZG1hX2NobmxfaWQ7CisJCQkJc3RybV9vYmotPnVkbWFfcHJpb3JpdHkgPQorCQkJCSAgICBwYXR0ci0+c3RyZWFtX2F0dHJfaW4tPnVkbWFfcHJpb3JpdHk7CisJCQkJY2hubF9hdHRyX29iai51aW9fcmVxcyA9CisJCQkJICAgIHBhdHRyLT5zdHJlYW1fYXR0cl9pbi0+bnVtX2J1ZnM7CisJCQl9IGVsc2UgeworCQkJCXN0cm1fb2JqLT51dGltZW91dCA9IERFRkFVTFRUSU1FT1VUOworCQkJCXN0cm1fb2JqLT5udW1fYnVmcyA9IERFRkFVTFROVU1CVUZTOworCQkJCXN0cm1fb2JqLT5zdHJtX21vZGUgPSBTVFJNTU9ERV9QUk9DQ09QWTsKKwkJCQlzdHJtX29iai0+c2VnbWVudF9pZCA9IDA7CS8qIGxvY2FsIG1lbSAqLworCQkJCXN0cm1fb2JqLT5idWZfYWxpZ25tZW50ID0gMDsKKwkJCQlzdHJtX29iai0+dWRtYV9jaG5sX2lkID0gMDsKKwkJCQlzdHJtX29iai0+dWRtYV9wcmlvcml0eSA9IDA7CisJCQkJY2hubF9hdHRyX29iai51aW9fcmVxcyA9IERFRkFVTFROVU1CVUZTOworCQkJfQorCQkJY2hubF9hdHRyX29iai5yZXNlcnZlZDEgPSBOVUxMOworCQkJLyogRE1BIGNobmwgZmx1c2ggdGltZW91dCAqLworCQkJY2hubF9hdHRyX29iai5yZXNlcnZlZDIgPSBzdHJtX29iai0+dXRpbWVvdXQ7CisJCQljaG5sX2F0dHJfb2JqLmV2ZW50X29iaiA9IE5VTEw7CisJCQlpZiAocGF0dHItPnVzZXJfZXZlbnQgIT0gTlVMTCkKKwkJCQljaG5sX2F0dHJfb2JqLmV2ZW50X29iaiA9IHBhdHRyLT51c2VyX2V2ZW50OworCisJCX0KKwl9CisJaWYgKHN0YXR1cykKKwkJZ290byBmdW5jX2NvbnQ7CisKKwlpZiAoKHBhdHRyLT52aXJ0X2Jhc2UgPT0gTlVMTCkgfHwgIShwYXR0ci0+dWxfdmlydF9zaXplID4gMCkpCisJCWdvdG8gZnVuY19jb250OworCisJLyogTm8gU3lzdGVtIERNQSAqLworCURCQ19BU1NFUlQoc3RybV9vYmotPnN0cm1fbW9kZSAhPSBTVFJNTU9ERV9MRE1BKTsKKwkvKiBHZXQgdGhlIHNoYXJlZCBtZW0gbWdyIGZvciB0aGlzIHN0cmVhbXMgZGV2IG9iamVjdCAqLworCXN0YXR1cyA9IGRldl9nZXRfY21tX21ncihzdHJtX21ncl9vYmotPmRldl9vYmosICZoY21tX21ncik7CisJaWYgKCFzdGF0dXMpIHsKKwkJLypBbGxvY2F0ZSBhIFNNIGFkZHIgdHJhbnNsYXRvciBmb3IgdGhpcyBzdHJtLiAqLworCQlzdGF0dXMgPSBjbW1feGxhdG9yX2NyZWF0ZSgmc3RybV9vYmotPnhsYXRvciwgaGNtbV9tZ3IsIE5VTEwpOworCQlpZiAoIXN0YXR1cykgeworCQkJREJDX0FTU0VSVChzdHJtX29iai0+c2VnbWVudF9pZCA+IDApOworCQkJLyogIFNldCB0cmFuc2xhdG9ycyBWaXJ0IEFkZHIgYXR0cmlidXRlcyAqLworCQkJc3RhdHVzID0gY21tX3hsYXRvcl9pbmZvKHN0cm1fb2JqLT54bGF0b3IsCisJCQkJCQkgKHU4ICoqKSAmcGF0dHItPnZpcnRfYmFzZSwKKwkJCQkJCSBwYXR0ci0+dWxfdmlydF9zaXplLAorCQkJCQkJIHN0cm1fb2JqLT5zZWdtZW50X2lkLCB0cnVlKTsKKwkJfQorCX0KK2Z1bmNfY29udDoKKwlpZiAoIXN0YXR1cykgeworCQkvKiBPcGVuIGNoYW5uZWwgKi8KKwkJY2hubF9tb2RlID0gKGRpciA9PSBEU1BfVE9OT0RFKSA/CisJCSAgICBDSE5MX01PREVUT0RTUCA6IENITkxfTU9ERUZST01EU1A7CisJCWludGZfZnhucyA9IHN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2Nobmxfb3BlbikgKCYoc3RybV9vYmotPmNobmxfb2JqKSwKKwkJCQkJCSAgICAgIHN0cm1fbWdyX29iai0+aGNobmxfbWdyLAorCQkJCQkJICAgICAgY2hubF9tb2RlLCB1bF9jaG5sX2lkLAorCQkJCQkJICAgICAgJmNobmxfYXR0cl9vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQkvKgorCQkJICogb3Zlci1yaWRlIG5vbi1yZXR1cm5hYmxlIHN0YXR1cyBjb2RlcyBzbyB3ZSByZXR1cm4KKwkJCSAqIHNvbWV0aGluZyBkb2N1bWVudGVkCisJCQkgKi8KKwkJCWlmIChzdGF0dXMgIT0gLUVOT01FTSAmJiBzdGF0dXMgIT0KKwkJCSAgICAtRUlOVkFMICYmIHN0YXR1cyAhPSAtRVBFUk0pIHsKKwkJCQkvKgorCQkJCSAqIFdlIGdvdCBhIHN0YXR1cyB0aGF0J3Mgbm90IHJldHVybi1hYmxlLgorCQkJCSAqIEFzc2VydCB0aGF0IHdlIGdvdCBzb21ldGhpbmcgd2Ugd2VyZQorCQkJCSAqIGV4cGVjdGluZyAoLUVGQVVMVCBpc24ndCBhY2NlcHRhYmxlLAorCQkJCSAqIHN0cm1fbWdyX29iai0+aGNobmxfbWdyIGJldHRlciBiZSB2YWxpZCBvciB3ZQorCQkJCSAqIGFzc2VydCBoZXJlKSwgYW5kIHRoZW4gcmV0dXJuIC1FUEVSTS4KKwkJCQkgKi8KKwkJCQlEQkNfQVNTRVJUKHN0YXR1cyA9PSAtRU5PU1IgfHwKKwkJCQkJICAgc3RhdHVzID09IC1FQ0hSTkcgfHwKKwkJCQkJICAgc3RhdHVzID09IC1FQUxSRUFEWSB8fAorCQkJCQkgICBzdGF0dXMgPT0gLUVJTyk7CisJCQkJc3RhdHVzID0gLUVQRVJNOworCQkJfQorCQl9CisJfQorCWlmICghc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRydl9wcm9jX2luc2VydF9zdHJtX3Jlc19lbGVtZW50KHN0cm1fb2JqLAorCQkJCQkJCSZzdHJlYW1fcmVzLCBwcl9jdHh0KTsKKwkJaWYgKHN0YXR1cykKKwkJCWRlbGV0ZV9zdHJtKHN0cm1fb2JqKTsKKwkJZWxzZQorCQkJKnN0cm1yZXMgPSAoc3RydWN0IHN0cm1fcmVzX29iamVjdCAqKXN0cmVhbV9yZXM7CisJfSBlbHNlIHsKKwkJKHZvaWQpZGVsZXRlX3N0cm0oc3RybV9vYmopOworCX0KKworCS8qIGVuc3VyZSB3ZSByZXR1cm4gYSBkb2N1bWVudGVkIGVycm9yIGNvZGUgKi8KKwlEQkNfRU5TVVJFKCghc3RhdHVzICYmIHN0cm1fb2JqKSB8fAorCQkgICAoKnN0cm1yZXMgPT0gTlVMTCAmJiAoc3RhdHVzID09IC1FRkFVTFQgfHwKKwkJCQkJc3RhdHVzID09IC1FUEVSTQorCQkJCQl8fCBzdGF0dXMgPT0gLUVJTlZBTCkpKTsKKworCWRldl9kYmcoYnJpZGdlLCAiJXM6IGhub2RlOiAlcCBkaXI6IDB4JXggaW5kZXg6IDB4JXggcGF0dHI6ICVwICIKKwkJInN0cm1yZXM6ICVwIHN0YXR1czogMHgleFxuIiwgX19mdW5jX18sCisJCWhub2RlLCBkaXIsIGluZGV4LCBwYXR0ciwgc3RybXJlcywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fcmVjbGFpbSA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJlbGNhaW1zIGEgYnVmZmVyIGZyb20gYSBzdHJlYW0uCisgKi8KK2ludCBzdHJtX3JlY2xhaW0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCB1OCAqKiBidWZfcHRyLAorCQkJdTMyICpuYnl0ZXMsIHUzMiAqYnVmZl9zaXplLCB1MzIgKnBkd19hcmcpCit7CisJc3RydWN0IGJyaWRnZV9kcnZfaW50ZXJmYWNlICppbnRmX2Z4bnM7CisJc3RydWN0IGNobmxfaW9jIGNobmxfaW9jX29iajsKKwlpbnQgc3RhdHVzID0gMDsKKwl2b2lkICp0bXBfYnVmID0gTlVMTDsKKworCURCQ19SRVFVSVJFKHJlZnMgPiAwKTsKKwlEQkNfUkVRVUlSRShidWZfcHRyICE9IE5VTEwpOworCURCQ19SRVFVSVJFKG5ieXRlcyAhPSBOVUxMKTsKKwlEQkNfUkVRVUlSRShwZHdfYXJnICE9IE5VTEwpOworCisJaWYgKCFzdHJlYW1fb2JqKSB7CisJCXN0YXR1cyA9IC1FRkFVTFQ7CisJCWdvdG8gZnVuY19lbmQ7CisJfQorCWludGZfZnhucyA9IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCisJc3RhdHVzID0KKwkgICAgKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pb2MpIChzdHJlYW1fb2JqLT5jaG5sX29iaiwKKwkJCQkJICAgIHN0cmVhbV9vYmotPnV0aW1lb3V0LAorCQkJCQkgICAgJmNobmxfaW9jX29iaik7CisJaWYgKCFzdGF0dXMpIHsKKwkJKm5ieXRlcyA9IGNobmxfaW9jX29iai5ieXRlX3NpemU7CisJCWlmIChidWZmX3NpemUpCisJCQkqYnVmZl9zaXplID0gY2hubF9pb2Nfb2JqLmJ1Zl9zaXplOworCisJCSpwZHdfYXJnID0gY2hubF9pb2Nfb2JqLmR3X2FyZzsKKwkJaWYgKCFDSE5MX0lTX0lPX0NPTVBMRVRFKGNobmxfaW9jX29iaikpIHsKKwkJCWlmIChDSE5MX0lTX1RJTUVEX09VVChjaG5sX2lvY19vYmopKSB7CisJCQkJc3RhdHVzID0gLUVUSU1FOworCQkJfSBlbHNlIHsKKwkJCQkvKiBBbGxvdyByZWNsYWltcyBhZnRlciBpZGxlIHRvIHN1Y2NlZWQgKi8KKwkJCQlpZiAoIUNITkxfSVNfSU9fQ0FOQ0VMTEVEKGNobmxfaW9jX29iaikpCisJCQkJCXN0YXR1cyA9IC1FUEVSTTsKKworCQkJfQorCQl9CisJCS8qIFRyYW5zbGF0ZSB6ZXJvY29weSBidWZmZXIgaWYgY2hhbm5lbCBub3QgY2FuY2VsZWQuICovCisJCWlmICghc3RhdHVzCisJCSAgICAmJiAoIUNITkxfSVNfSU9fQ0FOQ0VMTEVEKGNobmxfaW9jX29iaikpCisJCSAgICAmJiAoc3RyZWFtX29iai0+c3RybV9tb2RlID09IFNUUk1NT0RFX1pFUk9DT1BZKSkgeworCQkJLyoKKwkJCSAqICBUaGlzIGlzIGEgemVyby1jb3B5IGNoYW5uZWwgc28gY2hubF9pb2Nfb2JqLnBidWYKKwkJCSAqICBjb250YWlucyB0aGUgRFNQIGFkZHJlc3Mgb2YgU00uIFdlIG5lZWQgdG8KKwkJCSAqICB0cmFuc2xhdGUgaXQgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHRoZSB1c2VyCisJCQkgKiAgdGhyZWFkIHRvIGFjY2Vzcy4KKwkJCSAqICBOb3RlOiBDb3VsZCBhZGQgQ01NX0RTUFBBMlZBIHRvIENNTSBpbiB0aGUgZnV0dXJlLgorCQkJICovCisJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+eGxhdG9yLAorCQkJCQkJICAgICAgIGNobmxfaW9jX29iai5wYnVmLAorCQkJCQkJICAgICAgIENNTV9EU1BQQTJQQSk7CisJCQlpZiAodG1wX2J1ZiAhPSBOVUxMKSB7CisJCQkJLyogbm93IGNvbnZlcnQgdGhpcyBHUFAgUGEgdG8gVmEgKi8KKwkJCQl0bXBfYnVmID0gY21tX3hsYXRvcl90cmFuc2xhdGUoc3RyZWFtX29iai0+CisJCQkJCQkJICAgICAgIHhsYXRvciwKKwkJCQkJCQkgICAgICAgdG1wX2J1ZiwKKwkJCQkJCQkgICAgICAgQ01NX1BBMlZBKTsKKwkJCX0KKwkJCWlmICh0bXBfYnVmID09IE5VTEwpCisJCQkJc3RhdHVzID0gLUVTUkNIOworCisJCQljaG5sX2lvY19vYmoucGJ1ZiA9IHRtcF9idWY7CisJCX0KKwkJKmJ1Zl9wdHIgPSBjaG5sX2lvY19vYmoucGJ1ZjsKKwl9CitmdW5jX2VuZDoKKwkvKiBlbnN1cmUgd2UgcmV0dXJuIGEgZG9jdW1lbnRlZCByZXR1cm4gY29kZSAqLworCURCQ19FTlNVUkUoIXN0YXR1cyB8fCBzdGF0dXMgPT0gLUVGQVVMVCB8fAorCQkgICBzdGF0dXMgPT0gLUVUSU1FIHx8IHN0YXR1cyA9PSAtRVNSQ0ggfHwKKwkJICAgc3RhdHVzID09IC1FUEVSTSk7CisKKwlkZXZfZGJnKGJyaWRnZSwgIiVzOiBzdHJlYW1fb2JqOiAlcCBidWZfcHRyOiAlcCBuYnl0ZXM6ICVwICIKKwkJInBkd19hcmc6ICVwIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RyZWFtX29iaiwKKwkJYnVmX3B0ciwgbmJ5dGVzLCBwZHdfYXJnLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gc3RybV9yZWdpc3Rlcl9ub3RpZnkgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBSZWdpc3RlciB0byBiZSBub3RpZmllZCBvbiBzcGVjaWZpYyBldmVudHMgZm9yIHRoaXMgc3RyZWFtLgorICovCitpbnQgc3RybV9yZWdpc3Rlcl9ub3RpZnkoc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqLCB1MzIgZXZlbnRfbWFzaywKKwkJCQl1MzIgbm90aWZ5X3R5cGUsIHN0cnVjdCBkc3Bfbm90aWZpY2F0aW9uCisJCQkJKiBobm90aWZpY2F0aW9uKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJREJDX1JFUVVJUkUocmVmcyA+IDApOworCURCQ19SRVFVSVJFKGhub3RpZmljYXRpb24gIT0gTlVMTCk7CisKKwlpZiAoIXN0cmVhbV9vYmopIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKChldmVudF9tYXNrICYgfigoRFNQX1NUUkVBTUlPQ09NUExFVElPTikgfAorCQkJCSAgIERTUF9TVFJFQU1ET05FKSkgIT0gMCkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChub3RpZnlfdHlwZSAhPSBEU1BfU0lHTkFMRVZFTlQpCisJCQlzdGF0dXMgPSAtRU5PU1lTOworCisJfQorCWlmICghc3RhdHVzKSB7CisJCWludGZfZnhucyA9IHN0cmVhbV9vYmotPnN0cm1fbWdyX29iai0+aW50Zl9meG5zOworCisJCXN0YXR1cyA9CisJCSAgICAoKmludGZfZnhucy0+cGZuX2NobmxfcmVnaXN0ZXJfbm90aWZ5KSAoc3RyZWFtX29iai0+CisJCQkJCQkJICAgIGNobmxfb2JqLAorCQkJCQkJCSAgICBldmVudF9tYXNrLAorCQkJCQkJCSAgICBub3RpZnlfdHlwZSwKKwkJCQkJCQkgICAgaG5vdGlmaWNhdGlvbik7CisJfQorCS8qIGVuc3VyZSB3ZSByZXR1cm4gYSBkb2N1bWVudGVkIHJldHVybiBjb2RlICovCisJREJDX0VOU1VSRSghc3RhdHVzIHx8IHN0YXR1cyA9PSAtRUZBVUxUIHx8CisJCSAgIHN0YXR1cyA9PSAtRVRJTUUgfHwgc3RhdHVzID09IC1FU1JDSCB8fAorCQkgICBzdGF0dXMgPT0gLUVOT1NZUyB8fCBzdGF0dXMgPT0gLUVQRVJNKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IHN0cm1fc2VsZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU2VsZWN0cyBhIHJlYWR5IHN0cmVhbS4KKyAqLworaW50IHN0cm1fc2VsZWN0KHN0cnVjdCBzdHJtX29iamVjdCAqKnN0cm1fdGFiLCB1MzIgc3RybXMsCisJCSAgICAgICB1MzIgKnBtYXNrLCB1MzIgdXRpbWVvdXQpCit7CisJdTMyIGluZGV4OworCXN0cnVjdCBjaG5sX2luZm8gY2hubF9pbmZvX29iajsKKwlzdHJ1Y3QgYnJpZGdlX2Rydl9pbnRlcmZhY2UgKmludGZfZnhuczsKKwlzdHJ1Y3Qgc3luY19vYmplY3QgKipzeW5jX2V2ZW50cyA9IE5VTEw7CisJdTMyIGk7CisJaW50IHN0YXR1cyA9IDA7CisKKwlEQkNfUkVRVUlSRShyZWZzID4gMCk7CisJREJDX1JFUVVJUkUoc3RybV90YWIgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUocG1hc2sgIT0gTlVMTCk7CisJREJDX1JFUVVJUkUoc3RybXMgPiAwKTsKKworCSpwbWFzayA9IDA7CisJZm9yIChpID0gMDsgaSA8IHN0cm1zOyBpKyspIHsKKwkJaWYgKCFzdHJtX3RhYltpXSkgeworCQkJc3RhdHVzID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChzdGF0dXMpCisJCWdvdG8gZnVuY19lbmQ7CisKKwkvKiBEZXRlcm1pbmUgd2hpY2ggY2hhbm5lbHMgaGF2ZSBJTyByZWFkeSAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJtczsgaSsrKSB7CisJCWludGZfZnhucyA9IHN0cm1fdGFiW2ldLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJc3RhdHVzID0gKCppbnRmX2Z4bnMtPnBmbl9jaG5sX2dldF9pbmZvKSAoc3RybV90YWJbaV0tPmNobmxfb2JqLAorCQkJCQkJCSAgJmNobmxfaW5mb19vYmopOworCQlpZiAoc3RhdHVzKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWlmIChjaG5sX2luZm9fb2JqLmNpb19jcyA+IDApCisJCQkJKnBtYXNrIHw9ICgxIDw8IGkpOworCisJCX0KKwl9CisJaWYgKCFzdGF0dXMgJiYgdXRpbWVvdXQgPiAwICYmICpwbWFzayA9PSAwKSB7CisJCS8qIE5vbi16ZXJvIHRpbWVvdXQgKi8KKwkJc3luY19ldmVudHMgPSBrbWFsbG9jKHN0cm1zICogc2l6ZW9mKHN0cnVjdCBzeW5jX29iamVjdCAqKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHN5bmNfZXZlbnRzID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RybXM7IGkrKykgeworCQkJCWludGZfZnhucyA9CisJCQkJICAgIHN0cm1fdGFiW2ldLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfZ2V0X2luZm8pCisJCQkJICAgIChzdHJtX3RhYltpXS0+Y2hubF9vYmosICZjaG5sX2luZm9fb2JqKTsKKwkJCQlpZiAoc3RhdHVzKQorCQkJCQlicmVhazsKKwkJCQllbHNlCisJCQkJCXN5bmNfZXZlbnRzW2ldID0KKwkJCQkJICAgIGNobmxfaW5mb19vYmouc3luY19ldmVudDsKKworCQkJfQorCQl9CisJCWlmICghc3RhdHVzKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIHN5bmNfd2FpdF9vbl9tdWx0aXBsZV9ldmVudHMoc3luY19ldmVudHMsIHN0cm1zLAorCQkJCQkJCSB1dGltZW91dCwgJmluZGV4KTsKKwkJCWlmICghc3RhdHVzKSB7CisJCQkJLyogU2luY2Ugd2Ugd2FpdGVkIG9uIHRoZSBldmVudCwgd2UgaGF2ZSB0bworCQkJCSAqIHJlc2V0IGl0ICovCisJCQkJc3luY19zZXRfZXZlbnQoc3luY19ldmVudHNbaW5kZXhdKTsKKwkJCQkqcG1hc2sgPSAxIDw8IGluZGV4OworCQkJfQorCQl9CisJfQorZnVuY19lbmQ6CisJa2ZyZWUoc3luY19ldmVudHMpOworCisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAoKnBtYXNrICE9IDAgfHwgdXRpbWVvdXQgPT0gMCkpIHx8CisJCSAgIChzdGF0dXMgJiYgKnBtYXNrID09IDApKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gZGVsZXRlX3N0cm0gPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBGcmVlcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgYSBzdHJlYW0uCisgKi8KK3N0YXRpYyBpbnQgZGVsZXRlX3N0cm0oc3RydWN0IHN0cm1fb2JqZWN0ICpzdHJlYW1fb2JqKQoreworCXN0cnVjdCBicmlkZ2VfZHJ2X2ludGVyZmFjZSAqaW50Zl9meG5zOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKHN0cmVhbV9vYmopIHsKKwkJaWYgKHN0cmVhbV9vYmotPmNobmxfb2JqKSB7CisJCQlpbnRmX2Z4bnMgPSBzdHJlYW1fb2JqLT5zdHJtX21ncl9vYmotPmludGZfZnhuczsKKwkJCS8qIENoYW5uZWwgY2xvc2UgY2FuIGZhaWwgb25seSBpZiB0aGUgY2hhbm5lbCBoYW5kbGUKKwkJCSAqIGlzIGludmFsaWQuICovCisJCQlzdGF0dXMgPSAoKmludGZfZnhucy0+cGZuX2NobmxfY2xvc2UpCisJCQkJCShzdHJlYW1fb2JqLT5jaG5sX29iaik7CisJCQkvKiBGcmVlIGFsbCBTTSBhZGRyZXNzIHRyYW5zbGF0b3IgcmVzb3VyY2VzICovCisJCQlpZiAoIXN0YXR1cykgeworCQkJCWlmIChzdHJlYW1fb2JqLT54bGF0b3IpIHsKKwkJCQkJLyogZm9yY2UgZnJlZSAqLworCQkJCQkodm9pZCljbW1feGxhdG9yX2RlbGV0ZShzdHJlYW1fb2JqLT4KKwkJCQkJCQkJeGxhdG9yLAorCQkJCQkJCQl0cnVlKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJa2ZyZWUoc3RyZWFtX29iaik7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9jZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2FmNzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL2NmZy5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogY2ZnLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgcGxhdGZvcm0gc3BlY2lmaWMgY29uZmlnIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRFNQL0JJT1MgQnJpZGdlICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2RiZGVmcy5oPgorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVHJhY2UgJiBEZWJ1ZyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9TIEFkYXB0YXRpb24gTGF5ZXIgKi8KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2ZnLmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL2Rydi5oPgorCitzdHJ1Y3QgZHJ2X2V4dCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCWNoYXIgc3pfc3RyaW5nW01BWFJFR1BBVEhMRU5HVEhdOworfTsKKworLyoKKyAqICA9PT09PT09PSBjZmdfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIHRoZSBDRkcgbW9kdWxlLgorICovCit2b2lkIGNmZ19leGl0KHZvaWQpCit7CisJLyogRG8gbm90aGluZyAqLworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfYXV0b19zdGFydCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFJldHJlaXZlIHRoZSBhdXRvc3RhcnQgbWFzaywgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqLworaW50IGNmZ19nZXRfYXV0b19zdGFydChzdHJ1Y3QgY2ZnX2Rldm5vZGUgKmRldl9ub2RlX29iaiwKKwkJCSAgICAgIHUzMiAqYXV0b19zdGFydCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgZHdfYnVmX3NpemU7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWR3X2J1Zl9zaXplID0gc2l6ZW9mKCphdXRvX3N0YXJ0KTsKKwlpZiAoIWRldl9ub2RlX29iaikKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlpZiAoIWF1dG9fc3RhcnQgfHwgIWRydl9kYXRhcCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKwlpZiAoIXN0YXR1cykKKwkJKmF1dG9fc3RhcnQgPSAoZHJ2X2RhdGFwLT5iYXNlX2ltZykgPyAxIDogMDsKKworCURCQ19FTlNVUkUoKHN0YXR1cyA9PSAwICYmCisJCSAgICAoKmF1dG9fc3RhcnQgPT0gMCB8fCAqYXV0b19zdGFydCA9PSAxKSkKKwkJICAgfHwgc3RhdHVzICE9IDApOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2ZnX2dldF9kZXZfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIERldmljZSBPYmplY3QgaGFuZGxlIGZvciBhIGdpdmVuIGRldm5vZGUuCisgKi8KK2ludCBjZmdfZ2V0X2Rldl9vYmplY3Qoc3RydWN0IGNmZ19kZXZub2RlICpkZXZfbm9kZV9vYmosCisJCQkgICAgICB1MzIgKnZhbHVlKQoreworCWludCBzdGF0dXMgPSAwOworCXUzMiBkd19idWZfc2l6ZTsKKwlzdHJ1Y3QgZHJ2X2RhdGEgKmRydl9kYXRhcCA9IGRldl9nZXRfZHJ2ZGF0YShicmlkZ2UpOworCisJaWYgKCFkcnZfZGF0YXApCisJCXN0YXR1cyA9IC1FUEVSTTsKKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJaWYgKCF2YWx1ZSkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWR3X2J1Zl9zaXplID0gc2l6ZW9mKHZhbHVlKTsKKwlpZiAoIXN0YXR1cykgeworCisJCS8qIGNoZWNrIHRoZSBkZXZpY2Ugc3RyaW5nIGFuZCB0aGVuIHN0b3JlIGRldiBvYmplY3QgKi8KKwkJaWYgKCEKKwkJICAgIChzdHJjbXAKKwkJICAgICAoKGNoYXIgKikoKHN0cnVjdCBkcnZfZXh0ICopZGV2X25vZGVfb2JqKS0+c3pfc3RyaW5nLAorCQkgICAgICAiVElPTUFQMTUxMCIpKSkKKwkJCSp2YWx1ZSA9ICh1MzIpZHJ2X2RhdGFwLT5kZXZfb2JqZWN0OworCX0KKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfZXhlY19maWxlID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmVpdmUgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgaWYgYW55LCBmb3IgdGhpcyBib2FyZC4KKyAqLworaW50IGNmZ19nZXRfZXhlY19maWxlKHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLCB1MzIgYnVmX3NpemUsCisJCQkgICAgIGNoYXIgKnN0cl9leGVjX2ZpbGUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJZWxzZSBpZiAoIXN0cl9leGVjX2ZpbGUgfHwgIWRydl9kYXRhcCkKKwkJc3RhdHVzID0gLUVGQVVMVDsKKworCWlmIChzdHJsZW4oZHJ2X2RhdGFwLT5iYXNlX2ltZykgPiBidWZfc2l6ZSkKKwkJc3RhdHVzID0gLUVJTlZBTDsKKworCWlmICghc3RhdHVzICYmIGRydl9kYXRhcC0+YmFzZV9pbWcpCisJCXN0cmNweShzdHJfZXhlY19maWxlLCBkcnZfZGF0YXAtPmJhc2VfaW1nKTsKKworCWlmIChzdGF0dXMpCisJCXByX2VycigiJXM6IEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCURCQ19FTlNVUkUoKChzdGF0dXMgPT0gMCkgJiYKKwkJICAgIChzdHJsZW4oc3RyX2V4ZWNfZmlsZSkgPD0gYnVmX3NpemUpKQorCQkgICB8fCAoc3RhdHVzICE9IDApKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19nZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgUmV0cmlldmUgdGhlIE9iamVjdCBoYW5kbGUgZnJvbSB0aGUgUmVnaXN0cnkKKyAqLworaW50IGNmZ19nZXRfb2JqZWN0KHUzMiAqdmFsdWUsIHU4IGR3X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCURCQ19SRVFVSVJFKHZhbHVlICE9IE5VTEwpOworCisJaWYgKCFkcnZfZGF0YXApCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKGR3X3R5cGUpIHsKKwljYXNlIChSRUdfRFJWX09CSkVDVCk6CisJCWlmIChkcnZfZGF0YXAtPmRydl9vYmplY3QpIHsKKwkJCSp2YWx1ZSA9ICh1MzIpZHJ2X2RhdGFwLT5kcnZfb2JqZWN0OworCQkJc3RhdHVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN0YXR1cyA9IC1FTk9EQVRBOworCQl9CisJCWJyZWFrOworCWNhc2UgKFJFR19NR1JfT0JKRUNUKToKKwkJaWYgKGRydl9kYXRhcC0+bWdyX29iamVjdCkgeworCQkJKnZhbHVlID0gKHUzMilkcnZfZGF0YXAtPm1ncl9vYmplY3Q7CisJCQlzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJc3RhdHVzID0gLUVOT0RBVEE7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cykgeworCQkqdmFsdWUgPSAwOworCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwl9CisJREJDX0VOU1VSRSgoIXN0YXR1cyAmJiAqdmFsdWUgIT0gMCkgfHwgKHN0YXR1cyAmJiAqdmFsdWUgPT0gMCkpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiAgPT09PT09PT0gY2ZnX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplIHRoZSBDRkcgbW9kdWxlJ3MgcHJpdmF0ZSBzdGF0ZS4KKyAqLworYm9vbCBjZmdfaW5pdCh2b2lkKQoreworCXJldHVybiB0cnVlOworfQorCisvKgorICogID09PT09PT09IGNmZ19zZXRfZGV2X29iamVjdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIFN0b3JlIHRoZSBEZXZpY2UgT2JqZWN0IGhhbmRsZSBhbmQgZGV2X25vZGUgcG9pbnRlciBmb3IgYSBnaXZlbiBkZXZub2RlLgorICovCitpbnQgY2ZnX3NldF9kZXZfb2JqZWN0KHN0cnVjdCBjZmdfZGV2bm9kZSAqZGV2X25vZGVfb2JqLCB1MzIgdmFsdWUpCit7CisJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZHJ2X2RhdGFwKSB7CisJCXByX2VycigiJXM6IEZhaWxlZCwgc3RhdHVzIDB4JXhcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmICghZGV2X25vZGVfb2JqKQorCQlzdGF0dXMgPSAtRUZBVUxUOworCisJaWYgKCFzdGF0dXMpIHsKKwkJLyogU3RvcmUgdGhlIEJyaWRnZSBkZXZpY2Ugb2JqZWN0IGluIHRoZSBSZWdpc3RyeSAqLworCisJCWlmICghKHN0cmNtcCgoY2hhciAqKWRldl9ub2RlX29iaiwgIlRJT01BUDE1MTAiKSkpCisJCQlkcnZfZGF0YXAtPmRldl9vYmplY3QgPSAodm9pZCAqKSB2YWx1ZTsKKwl9CisJaWYgKHN0YXR1cykKKwkJcHJfZXJyKCIlczogRmFpbGVkLCBzdGF0dXMgMHgleFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogID09PT09PT09IGNmZ19zZXRfb2JqZWN0ID09PT09PT09CisgKiAgUHVycG9zZToKKyAqICAgICAgU3RvcmUgdGhlIERyaXZlciBPYmplY3QgaGFuZGxlCisgKi8KK2ludCBjZmdfc2V0X29iamVjdCh1MzIgdmFsdWUsIHU4IGR3X3R5cGUpCit7CisJaW50IHN0YXR1cyA9IC1FSU5WQUw7CisJc3RydWN0IGRydl9kYXRhICpkcnZfZGF0YXAgPSBkZXZfZ2V0X2RydmRhdGEoYnJpZGdlKTsKKworCWlmICghZHJ2X2RhdGFwKQorCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChkd190eXBlKSB7CisJY2FzZSAoUkVHX0RSVl9PQkpFQ1QpOgorCQlkcnZfZGF0YXAtPmRydl9vYmplY3QgPSAodm9pZCAqKXZhbHVlOworCQlzdGF0dXMgPSAwOworCQlicmVhazsKKwljYXNlIChSRUdfTUdSX09CSkVDVCk6CisJCWRydl9kYXRhcC0+bWdyX29iamVjdCA9ICh2b2lkICopdmFsdWU7CisJCXN0YXR1cyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoc3RhdHVzKQorCQlwcl9lcnIoIiVzOiBGYWlsZWQsIHN0YXR1cyAweCV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL250ZnkuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9udGZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlYTY5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9udGZ5LmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIG50ZnkuYworICoKKyAqIERTUC1CSU9TIEJyaWRnZSBkcml2ZXIgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIFRJIE9NQVAgcHJvY2Vzc29ycy4KKyAqCisgKiBNYW5hZ2UgbGlzdHMgb2Ygbm90aWZpY2F0aW9uIGV2ZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhpcyAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisKK2ludCBkc3Bfbm90aWZpZXJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgIG50ZnlfZXZlbnQgKm5lID0gY29udGFpbmVyX29mKHRoaXMsIHN0cnVjdCBudGZ5X2V2ZW50LAorCQkJCQkJCW5vdGlfYmxvY2spOworCWlmIChuZS0+ZXZlbnQgJiBldmVudCkKKwkJc3luY19zZXRfZXZlbnQoJm5lLT5zeW5jX29iaik7CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3NlcnZpY2VzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2Uvc2VydmljZXMvc2VydmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTdkZDZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3NlcnZpY2VzLmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIHNlcnZpY2VzLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogUHJvdmlkZSBTRVJWSUNFUyBsb2FkaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERTUC9CSU9TIEJyaWRnZSAqLworI2luY2x1ZGUgPGRzcGJyaWRnZS9kYmRlZnMuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRyYWNlICYgRGVidWcgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2UvZGJjLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPUyBBZGFwdGF0aW9uIExheWVyICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2NmZy5oPgorI2luY2x1ZGUgPGRzcGJyaWRnZS9udGZ5Lmg+CisjaW5jbHVkZSA8ZHNwYnJpZGdlL3N5bmMuaD4KKyNpbmNsdWRlIDxkc3BicmlkZ2UvY2xrLmg+CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL3NlcnZpY2VzLmg+CisKKy8qCisgKiAgPT09PT09PT0gc2VydmljZXNfZXhpdCA9PT09PT09PQorICogIFB1cnBvc2U6CisgKiAgICAgIERpc2NvbnRpbnVlIHVzYWdlIG9mIG1vZHVsZTsgZnJlZSByZXNvdXJjZXMgd2hlbiByZWZlcmVuY2UgY291bnQKKyAqICAgICAgcmVhY2hlcyAwLgorICovCit2b2lkIHNlcnZpY2VzX2V4aXQodm9pZCkKK3sKKwljZmdfZXhpdCgpOworfQorCisvKgorICogID09PT09PT09IHNlcnZpY2VzX2luaXQgPT09PT09PT0KKyAqICBQdXJwb3NlOgorICogICAgICBJbml0aWFsaXplcyBTRVJWSUNFUyBtb2R1bGVzLgorICovCitib29sIHNlcnZpY2VzX2luaXQodm9pZCkKK3sKKwlib29sIHJldCA9IHRydWU7CisJYm9vbCBmY2ZnOworCisJLyogUGVyZm9ybSByZXF1aXJlZCBpbml0aWFsaXphdGlvbiBvZiBTRVJWSUNFUyBtb2R1bGVzLiAqLworCWZjZmcgPSBjZmdfaW5pdCgpOworCisJcmV0ID0gZmNmZzsKKworCWlmICghcmV0KSB7CisJCWlmIChmY2ZnKQorCQkJY2ZnX2V4aXQoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL3NlcnZpY2VzL3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxMGIzNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9zZXJ2aWNlcy9zeW5jLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBzeW5jLmMKKyAqCisgKiBEU1AtQklPUyBCcmlkZ2UgZHJpdmVyIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBUSSBPTUFQIHByb2Nlc3NvcnMuCisgKgorICogU3luY2hyb25pemF0aW9uIHNlcnZpY2VzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFBBQ0tBR0UgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIb3N0IE9TICovCisjaW5jbHVkZSA8ZHNwYnJpZGdlL2hvc3Rfb3MuaD4KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRoaXMgKi8KKyNpbmNsdWRlIDxkc3BicmlkZ2Uvc3luYy5oPgorCitERUZJTkVfU1BJTkxPQ0soc3luY19sb2NrKTsKKworLyoqCisgKiBzeW5jX3NldF9ldmVudCgpIC0gc2V0IG9yIHNpZ25hbCBhbmQgc3BlY2lmaWVkIGV2ZW50CisgKiBAZXZlbnQ6CUV2ZW50IHRvIGJlIHNldC4uCisgKgorICogc2V0IHRoZSBAZXZlbnQsIGlmIHRoZXJlIGlzIGFuIHRocmVhZCB3YWl0aW5nIGZvciB0aGUgZXZlbnQKKyAqIGl0IHdpbGwgYmUgd2FrZW4gdXAsIHRoaXMgZnVuY3Rpb24gb25seSB3YWtlcyBvbmUgdGhyZWFkLgorICovCisKK3ZvaWQgc3luY19zZXRfZXZlbnQoc3RydWN0IHN5bmNfb2JqZWN0ICpldmVudCkKK3sKKwlzcGluX2xvY2tfYmgoJnN5bmNfbG9jayk7CisJY29tcGxldGUoJmV2ZW50LT5jb21wKTsKKwlpZiAoZXZlbnQtPm11bHRpX2NvbXApCisJCWNvbXBsZXRlKGV2ZW50LT5tdWx0aV9jb21wKTsKKwlzcGluX3VubG9ja19iaCgmc3luY19sb2NrKTsKK30KKworLyoqCisgKiBzeW5jX3dhaXRfb25fbXVsdGlwbGVfZXZlbnRzKCkgLSB3YWl0cyBmb3IgbXVsdGlwbGUgZXZlbnRzIHRvIGJlIHNldC4KKyAqIEBldmVudHM6CUFycmF5IG9mIGV2ZW50cyB0byB3YWl0IGZvciB0aGVtLgorICogQGNvdW50OgludW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIGFycmF5LgorICogQHRpbWVvdXQJdGltZW91dCBvbiB3YWl0aW5nIGZvciB0aGUgZXZldG5zLgorICogQHB1X2luZGV4CWluZGV4IG9mIHRoZSBldmVudCBzZXQuCisgKgorICogVGhpcyBmdW5jdGlvcyB3aWxsIHdhaXQgdW50aWwgYW55IG9mIHRoZSBhcnJheSBlbGVtZW50IGlzIHNldCBvciB1bnRpbAorICogdGltZW91dC4gSW4gY2FzZSBvZiBzdWNjZXNzIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZAorICogQHB1X2luZGV4IHdpbGwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBhcnJheSBlbGVtZW50IHNldCBvciBpbiBjYXNlCisgKiBvZiB0aW1lb3V0IHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAtRVRJTUUgb3IgaW4gY2FzZSBvZgorICogaW50ZXJydXB0aW5nIGJ5IGEgc2lnbmFsIGl0IHdpbGwgcmV0dXJuIC1FUEVSTS4KKyAqLworCitpbnQgc3luY193YWl0X29uX211bHRpcGxlX2V2ZW50cyhzdHJ1Y3Qgc3luY19vYmplY3QgKipldmVudHMsCisJCQkJICAgICB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQgdGltZW91dCwKKwkJCQkgICAgIHVuc2lnbmVkICppbmRleCkKK3sKKwl1bnNpZ25lZCBpOworCWludCBzdGF0dXMgPSAtRVBFUk07CisJc3RydWN0IGNvbXBsZXRpb24gbV9jb21wOworCisJaW5pdF9jb21wbGV0aW9uKCZtX2NvbXApOworCisJaWYgKFNZTkNfSU5GSU5JVEUgPT0gdGltZW91dCkKKwkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tpXS0+Y29tcCkpIHsKKwkJCUlOSVRfQ09NUExFVElPTihldmVudHNbaV0tPmNvbXApOworCQkJKmluZGV4ID0gaTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzeW5jX2xvY2spOworCQkJc3RhdHVzID0gMDsKKwkJCWdvdG8gZnVuY19lbmQ7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0gJm1fY29tcDsKKworCXNwaW5fdW5sb2NrX2JoKCZzeW5jX2xvY2spOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmbV9jb21wLAorCQkJCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkKKwkJc3RhdHVzID0gLUVUSU1FOworCisJc3Bpbl9sb2NrX2JoKCZzeW5jX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChjb21wbGV0aW9uX2RvbmUoJmV2ZW50c1tpXS0+Y29tcCkpIHsKKwkJCUlOSVRfQ09NUExFVElPTihldmVudHNbaV0tPmNvbXApOworCQkJKmluZGV4ID0gaTsKKwkJCXN0YXR1cyA9IDA7CisJCX0KKwkJZXZlbnRzW2ldLT5tdWx0aV9jb21wID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnN5bmNfbG9jayk7CitmdW5jX2VuZDoKKwlyZXR1cm4gc3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAppbmRleCAwMjJkMDY0Li4zMGRiZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKQEAgLTI1LDYgKzI1LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAKKyNkZWZpbmUgU1RVQl9CVVNJRF9PVEhFUiAwCisjZGVmaW5lIFNUVUJfQlVTSURfUkVNT1YgMQorI2RlZmluZSBTVFVCX0JVU0lEX0FEREVEIDIKKyNkZWZpbmUgU1RVQl9CVVNJRF9BTExPQyAzCisKIHN0cnVjdCBzdHViX2RldmljZSB7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC03Miw2ICs3NywxNCBAQAogCV9fdTMyIHN0YXR1czsKIH07CiAKKyNkZWZpbmUgQlVTSURfU0laRSAyMAorc3RydWN0IGJ1c19pZF9wcml2IHsKKwljaGFyIG5hbWVbQlVTSURfU0laRV07CisJY2hhciBzdGF0dXM7CisJaW50IGludGVyZl9jb3VudDsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CisJY2hhciBzaHV0ZG93bl9idXNpZDsKK307CiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqc3R1Yl9wcml2X2NhY2hlOwogCkBAIC05MSw1ICsxMDQsNyBAQAogdm9pZCBzdHViX2VucXVldWVfcmV0X3VubGluayhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKiwgX191MzIsIF9fdTMyKTsKIAogLyogc3R1Yl9tYWluLmMgKi8KLWludCBtYXRjaF9idXNpZChjb25zdCBjaGFyICpidXNpZCk7CitzdHJ1Y3QgYnVzX2lkX3ByaXYgKmdldF9idXNpZF9wcml2KGNvbnN0IGNoYXIgKmJ1c2lkKTsKK2ludCBkZWxfbWF0Y2hfYnVzaWQoY2hhciAqYnVzaWQpOworCiB2b2lkIHN0dWJfZGV2aWNlX2NsZWFudXBfdXJicyhzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwppbmRleCAzZjk1NjA1Li5iNmI3NTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYwpAQCAtMzkzLDExICszOTMsMTQgQEAKIAlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYgPSBOVUxMOwogCWNvbnN0IGNoYXIgKnVkZXZfYnVzaWQgPSBkZXZfbmFtZShpbnRlcmZhY2UtPmRldi5wYXJlbnQpOwogCWludCBlcnIgPSAwOworCXN0cnVjdCBidXNfaWRfcHJpdiAqYnVzaWRfcHJpdjsKIAogCWRldl9kYmcoJmludGVyZmFjZS0+ZGV2LCAiRW50ZXJcbiIpOwogCiAJLyogY2hlY2sgd2Ugc2hvdWxkIGNsYWltIG9yIG5vdCBieSBidXNpZF90YWJsZSAqLwotCWlmIChtYXRjaF9idXNpZCh1ZGV2X2J1c2lkKSkgeworCWJ1c2lkX3ByaXYgPSBnZXRfYnVzaWRfcHJpdih1ZGV2X2J1c2lkKTsKKwlpZiAoIWJ1c2lkX3ByaXYgIHx8IChidXNpZF9wcml2LT5zdGF0dXMgPT0gU1RVQl9CVVNJRF9SRU1PVikgfHwKKwkJCSAgICAgKGJ1c2lkX3ByaXYtPnN0YXR1cyA9PSBTVFVCX0JVU0lEX09USEVSKSkgewogCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCiAJCQkgInRoaXMgZGV2aWNlICVzIGlzIG5vdCBpbiBtYXRjaF9idXNpZCB0YWJsZS4gc2tpcCFcbiIsCiAJCQkgdWRldl9idXNpZCk7CkBAIC00MjIsMjggKzQyNSw4MCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKworCWlmIChidXNpZF9wcml2LT5zdGF0dXMgPT0gU1RVQl9CVVNJRF9BTExPQykgeworCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQrKzsKKwkJc2RldiA9IGJ1c2lkX3ByaXYtPnNkZXY7CisJCWlmICghc2RldikKKwkJCXJldHVybiAtRU5PREVWOworCisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKKwkJICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgaW50ZXJmYWNlICIKKwkJICIoYnVzICV1IGRldiAldSBpZm4gJXUpXG4iLCB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2bnVtLAorCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKKworCQkvKiBzZXQgcHJpdmF0ZSBkYXRhIHRvIHVzYl9pbnRlcmZhY2UgKi8KKwkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHNkZXYpOworCisJCWVyciA9IHN0dWJfYWRkX2ZpbGVzKCZpbnRlcmZhY2UtPmRldik7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiY3JlYXRlIHN5c2ZzIGZpbGVzIGZvciAlc1xuIiwKKwkJCQl1ZGV2X2J1c2lkKTsKKwkJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudC0tOworCisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogb2suIHRoaXMgaXMgbXkgZGV2aWNlLiAqLwogCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyhpbnRlcmZhY2UpOwogCWlmICghc2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgaW50ZXJmYWNlICIKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IvSVAgU3R1YjogcmVnaXN0ZXIgYSBuZXcgZGV2aWNlICIKIAkJICIoYnVzICV1IGRldiAldSBpZm4gJXUpXG4iLCB1ZGV2LT5idXMtPmJ1c251bSwgdWRldi0+ZGV2bnVtLAogCQkgaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAorCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA9IDA7CisJYnVzaWRfcHJpdi0+c2h1dGRvd25fYnVzaWQgPSAwOworCiAJLyogc2V0IHByaXZhdGUgZGF0YSB0byB1c2JfaW50ZXJmYWNlICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHNkZXYpOworCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCsrOworCisJYnVzaWRfcHJpdi0+c2RldiA9IHNkZXY7CiAKIAllcnIgPSBzdHViX2FkZF9maWxlcygmaW50ZXJmYWNlLT5kZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJjcmVhdGUgc3lzZnMgZmlsZXMgZm9yICVzXG4iLAogCQkJdWRldl9idXNpZCk7CisJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50ID0gMDsKKworCQlidXNpZF9wcml2LT5zZGV2ID0gTlVMTDsKKwkJc3R1Yl9kZXZpY2VfZnJlZShzZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CisJYnVzaWRfcHJpdi0+c3RhdHVzID0gU1RVQl9CVVNJRF9BTExPQzsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzaHV0ZG93bl9idXNpZChzdHJ1Y3QgYnVzX2lkX3ByaXYgKmJ1c2lkX3ByaXYpCit7CisJaWYgKGJ1c2lkX3ByaXYtPnNkZXYgJiYgIWJ1c2lkX3ByaXYtPnNodXRkb3duX2J1c2lkKSB7CisJCWJ1c2lkX3ByaXYtPnNodXRkb3duX2J1c2lkID0gMTsKKwkJdXNiaXBfZXZlbnRfYWRkKCZidXNpZF9wcml2LT5zZGV2LT51ZCwgU0RFVl9FVkVOVF9SRU1PVkVEKTsKKworCQkvKiAyLiB3YWl0IGZvciB0aGUgc3RvcCBvZiB0aGUgZXZlbnQgaGFuZGxlciAqLworCQl1c2JpcF9zdG9wX2VoKCZidXNpZF9wcml2LT5zZGV2LT51ZCk7CisJfQorCit9CisKIAogLyoKICAqIGNhbGxlZCBpbiB1c2JfZGlzY29ubmVjdCgpIG9yIHVzYl9kZXJlZ2lzdGVyKCkKQEAgLTQ1MSwxMCArNTA2LDIxIEBACiAgKi8KIHN0YXRpYyB2b2lkIHN0dWJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewotCXN0cnVjdCBzdHViX2RldmljZSAqc2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CisJY29uc3QgY2hhciAqdWRldl9idXNpZCA9IGRldl9uYW1lKGludGVyZmFjZS0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGJ1c19pZF9wcml2ICpidXNpZF9wcml2OworCisJYnVzaWRfcHJpdiA9IGdldF9idXNpZF9wcml2KHVkZXZfYnVzaWQpOwogCiAJdXNiaXBfdWRiZygiRW50ZXJcbiIpOwogCisJaWYgKCFidXNpZF9wcml2KSB7CisJCUJVRygpOworCQlyZXR1cm47CisJfQorCisJc2RldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwogCS8qIGdldCBzdHViX2RldmljZSAqLwogCWlmICghc2RldikgewogCQllcnIoIiBjb3VsZCBub3QgZ2V0IGRldmljZSBmcm9tIGludGVmYWNlIGRhdGEiKTsKQEAgLTQ2NCwyMiArNTMwLDM5IEBACiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAKLQogCS8qCiAJICogTk9URToKIAkgKiByeC90eCB0aHJlYWRzIGFyZSBpbnZva2VkIGZvciBlYWNoIHVzYl9kZXZpY2UuCiAJICovCiAJc3R1Yl9yZW1vdmVfZmlsZXMoJmludGVyZmFjZS0+ZGV2KTsKIAotCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KLQl1c2JpcF9ldmVudF9hZGQoJnNkZXYtPnVkLCBTREVWX0VWRU5UX1JFTU9WRUQpOworCS8qSWYgdXNiIHJlc2V0IGNhbGxlZCBmcm9tIGV2ZW50IGhhbmRsZXIqLworCWlmIChidXNpZF9wcml2LT5zZGV2LT51ZC5laC50aHJlYWQgPT0gY3VycmVudCkgeworCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQtLTsKKwkJcmV0dXJuOworCX0KIAotCS8qIDIuIHdhaXQgZm9yIHRoZSBzdG9wIG9mIHRoZSBldmVudCBoYW5kbGVyICovCi0JdXNiaXBfc3RvcF9laCgmc2Rldi0+dWQpOworCWlmIChidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPiAxKSB7CisJCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudC0tOworCQlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKKwkJcmV0dXJuOworCX0KKworCWJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA9IDA7CisKKworCS8qIDEuIHNodXRkb3duIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gKi8KKwlzaHV0ZG93bl9idXNpZChidXNpZF9wcml2KTsKIAogCS8qIDMuIGZyZWUgc2RldiAqLworCWJ1c2lkX3ByaXYtPnNkZXYgPSBOVUxMOwogCXN0dWJfZGV2aWNlX2ZyZWUoc2Rldik7CiAKLQorCWlmIChidXNpZF9wcml2LT5zdGF0dXMgPT0gU1RVQl9CVVNJRF9BTExPQykgeworCQlidXNpZF9wcml2LT5zdGF0dXMgPSBTVFVCX0JVU0lEX0FEREVEOworCX0gZWxzZSB7CisJCWJ1c2lkX3ByaXYtPnN0YXR1cyA9IFNUVUJfQlVTSURfT1RIRVI7CisJCWRlbF9tYXRjaF9idXNpZCgoY2hhciAqKXVkZXZfYnVzaWQpOworCX0KIAl1c2JpcF91ZGJnKCJieWVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfbWFpbi5jCmluZGV4IDY2NjVjZWYuLmYzYTQwOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9tYWluLmMKQEAgLTQxLDggKzQxLDcgQEAKICAqIHJlbW90ZSBob3N0LgogICovCiAjZGVmaW5lIE1BWF9CVVNJRCAxNgotI2RlZmluZSBCVVNJRF9TSVpFIDIwCi1zdGF0aWMgY2hhciBidXNpZF90YWJsZVtNQVhfQlVTSURdW0JVU0lEX1NJWkVdOworc3RhdGljIHN0cnVjdCBidXNfaWRfcHJpdiBidXNpZF90YWJsZVtNQVhfQlVTSURdOwogc3RhdGljIHNwaW5sb2NrX3QgYnVzaWRfdGFibGVfbG9jazsKIAogCkBAIC01Myw4ICs1Miw4IEBACiAJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKLQkJaWYgKGJ1c2lkX3RhYmxlW2ldWzBdKQotCQkJaWYgKCFzdHJuY21wKGJ1c2lkX3RhYmxlW2ldLCBidXNpZCwgQlVTSURfU0laRSkpIHsKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldLm5hbWVbMF0pCisJCQlpZiAoIXN0cm5jbXAoYnVzaWRfdGFibGVbaV0ubmFtZSwgYnVzaWQsIEJVU0lEX1NJWkUpKSB7CiAJCQkJLyogYWxyZWFkeSByZWdpc3RlcmQgKi8KIAkJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CiAJCQkJcmV0dXJuIDA7CkBAIC02NSw2ICs2NCwyNSBAQAogCXJldHVybiAxOwogfQogCitzdHJ1Y3QgYnVzX2lkX3ByaXYgKmdldF9idXNpZF9wcml2KGNvbnN0IGNoYXIgKmJ1c2lkKQoreworCWludCBpOworCisJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldLm5hbWVbMF0pCisJCQlpZiAoIXN0cm5jbXAoYnVzaWRfdGFibGVbaV0ubmFtZSwgYnVzaWQsIEJVU0lEX1NJWkUpKSB7CisJCQkJLyogYWxyZWFkeSByZWdpc3RlcmQgKi8KKwkJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CisJCQkJcmV0dXJuICYoYnVzaWRfdGFibGVbaV0pOworCQkJfQorCisJc3Bpbl91bmxvY2soJmJ1c2lkX3RhYmxlX2xvY2spOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfbWF0Y2hfYnVzaWQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKQogewogCWludCBpOwpAQCAtNzMsOCArOTEsOCBAQAogCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCi0JCWlmIChidXNpZF90YWJsZVtpXVswXSkKLQkJCW91dCArPSBzcHJpbnRmKG91dCwgIiVzICIsIGJ1c2lkX3RhYmxlW2ldKTsKKwkJaWYgKGJ1c2lkX3RhYmxlW2ldLm5hbWVbMF0pCisJCQlvdXQgKz0gc3ByaW50ZihvdXQsICIlcyAiLCBidXNpZF90YWJsZVtpXS5uYW1lKTsKIAogCXNwaW5fdW5sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIApAQCAtOTMsOCArMTExLDExIEBACiAJc3Bpbl9sb2NrKCZidXNpZF90YWJsZV9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVTSUQ7IGkrKykKLQkJaWYgKCFidXNpZF90YWJsZVtpXVswXSkgewotCQkJc3RybmNweShidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU0lEX1NJWkUpOworCQlpZiAoIWJ1c2lkX3RhYmxlW2ldLm5hbWVbMF0pIHsKKwkJCXN0cm5jcHkoYnVzaWRfdGFibGVbaV0ubmFtZSwgYnVzaWQsIEJVU0lEX1NJWkUpOworCQkJaWYgKChidXNpZF90YWJsZVtpXS5zdGF0dXMgIT0gU1RVQl9CVVNJRF9BTExPQykgJiYKKwkJCSAgICAoYnVzaWRfdGFibGVbaV0uc3RhdHVzICE9IFNUVUJfQlVTSURfUkVNT1YpKQorCQkJCWJ1c2lkX3RhYmxlW2ldLnN0YXR1cyA9IFNUVUJfQlVTSURfQURERUQ7CiAJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTA0LDE2ICsxMjUsMjEgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZGVsX21hdGNoX2J1c2lkKGNoYXIgKmJ1c2lkKQoraW50IGRlbF9tYXRjaF9idXNpZChjaGFyICpidXNpZCkKIHsKIAlpbnQgaTsKIAogCXNwaW5fbG9jaygmYnVzaWRfdGFibGVfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspCi0JCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXSwgYnVzaWQsIEJVU0lEX1NJWkUpKSB7CisJCWlmICghc3RybmNtcChidXNpZF90YWJsZVtpXS5uYW1lLCBidXNpZCwgQlVTSURfU0laRSkpIHsKIAkJCS8qIGZvdW5kICovCi0JCQltZW1zZXQoYnVzaWRfdGFibGVbaV0sIDAsIEJVU0lEX1NJWkUpOworCQkJaWYgKGJ1c2lkX3RhYmxlW2ldLnN0YXR1cyA9PSBTVFVCX0JVU0lEX09USEVSKQorCQkJCW1lbXNldChidXNpZF90YWJsZVtpXS5uYW1lLCAwLCBCVVNJRF9TSVpFKTsKKwkJCWlmICgoYnVzaWRfdGFibGVbaV0uc3RhdHVzICE9IFNUVUJfQlVTSURfT1RIRVIpICYmCisJCQkgICAgKGJ1c2lkX3RhYmxlW2ldLnN0YXR1cyAhPSBTVFVCX0JVU0lEX0FEREVEKSkgeworCQkJCWJ1c2lkX3RhYmxlW2ldLnN0YXR1cyA9IFNUVUJfQlVTSURfUkVNT1Y7CisJCQl9CiAJCQlzcGluX3VubG9jaygmYnVzaWRfdGFibGVfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTIyLDYgKzE0OCwyMCBAQAogCiAJcmV0dXJuIC0xOwogfQorc3RhdGljIHZvaWQgaW5pdF9idXNpZF90YWJsZSh2b2lkKQoreworCWludCBpOworCisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVU0lEOyBpKyspIHsKKwkJbWVtc2V0KGJ1c2lkX3RhYmxlW2ldLm5hbWUsIDAsIEJVU0lEX1NJWkUpOworCQlidXNpZF90YWJsZVtpXS5zdGF0dXMgPSBTVFVCX0JVU0lEX09USEVSOworCQlidXNpZF90YWJsZVtpXS5pbnRlcmZfY291bnQgPSAwOworCQlidXNpZF90YWJsZVtpXS5zZGV2ID0gTlVMTDsKKwkJYnVzaWRfdGFibGVbaV0uc2h1dGRvd25fYnVzaWQgPSAwOworCX0KKwlzcGluX2xvY2tfaW5pdCgmYnVzaWRfdGFibGVfbG9jayk7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX21hdGNoX2J1c2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJc2l6ZV90IGNvdW50KQpAQCAtMjYxLDggKzMwMSw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiIKIAkgICAgICAgRFJJVkVSX0RFU0MgIjoiIERSSVZFUl9WRVJTSU9OICJcbiIpOwogCi0JbWVtc2V0KGJ1c2lkX3RhYmxlLCAwLCBzaXplb2YoYnVzaWRfdGFibGUpKTsKLQlzcGluX2xvY2tfaW5pdCgmYnVzaWRfdGFibGVfbG9jayk7CisJaW5pdF9idXNpZF90YWJsZSgpOwogCiAJcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZzdHViX2RyaXZlci5kcnZ3cmFwLmRyaXZlciwKIAkJCQkgJmRyaXZlcl9hdHRyX21hdGNoX2J1c2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCmluZGV4IDU5NzJhZTcuLjNkZTZmZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYwpAQCAtMzYyLDU0ICszNjIsMTYgQEAKIAlyZXR1cm4gcHJpdjsKIH0KIAotCi1zdGF0aWMgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpnZXRfZXBfZnJvbV9lcG51bShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQkJaW50IGVwbnVtMCkKLXsKLQlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjb25maWc7Ci0JaW50IGkgPSAwLCBqID0gMDsKLQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwID0gTlVMTDsKLQlpbnQgZXBudW07Ci0JaW50IGZvdW5kID0gMDsKLQotCWlmIChlcG51bTAgPT0gMCkKLQkJcmV0dXJuICZ1ZGV2LT5lcDA7Ci0KLQljb25maWcgPSB1ZGV2LT5hY3Rjb25maWc7Ci0JaWYgKCFjb25maWcpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7Ci0JCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnNldHRpbmc7Ci0KLQkJc2V0dGluZyA9IGNvbmZpZy0+aW50ZXJmYWNlW2ldLT5jdXJfYWx0c2V0dGluZzsKLQotCQlmb3IgKGogPSAwOyBqIDwgc2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBqKyspIHsKLQkJCWVwID0gJnNldHRpbmctPmVuZHBvaW50W2pdOwotCQkJZXBudW0gPSAoZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4N2YpOwotCi0JCQlpZiAoZXBudW0gPT0gZXBudW0wKSB7Ci0JCQkJLyogdXNiaXBfdWluZm8oImZvdW5kIGVwbnVtICVkXG4iLCBlcG51bTApOyovCi0JCQkJZm91bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGZvdW5kKQotCQlyZXR1cm4gZXA7Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQotCiBzdGF0aWMgaW50IGdldF9waXBlKHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwgaW50IGVwbnVtLCBpbnQgZGlyKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihzZGV2LT5pbnRlcmZhY2UpOwogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQgPSBOVUxMOwogCi0JZXAgPSBnZXRfZXBfZnJvbV9lcG51bSh1ZGV2LCBlcG51bSk7CisJaWYgKGRpciA9PSBVU0JJUF9ESVJfSU4pCisJCWVwID0gdWRldi0+ZXBfaW5bZXBudW0gJiAweDdmXTsKKwllbHNlCisJCWVwID0gdWRldi0+ZXBfb3V0W2VwbnVtICYgMHg3Zl07CiAJaWYgKCFlcCkgewogCQlkZXZfZXJyKCZzZGV2LT5pbnRlcmZhY2UtPmRldiwgIm5vIHN1Y2ggZW5kcG9pbnQ/LCAlZFxuIiwKIAkJCWVwbnVtKTsKQEAgLTQ2Miw2ICs0MjQsNjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbWFza2luZ19ib2d1c19mbGFncyhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50CQkJCXhmZXJ0eXBlOworCXN0cnVjdCB1c2JfZGV2aWNlCQkqZGV2OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZXA7CisJaW50CQkJCWlzX291dDsKKwl1bnNpZ25lZCBpbnQJYWxsb3dlZDsKKworCWlmICghdXJiIHx8IHVyYi0+aGNwcml2IHx8ICF1cmItPmNvbXBsZXRlKQorCQlyZXR1cm47CisJZGV2ID0gdXJiLT5kZXY7CisJaWYgKCghZGV2KSB8fCAoZGV2LT5zdGF0ZSA8IFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQpKQorCQlyZXR1cm47CisKKwllcCA9ICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyBkZXYtPmVwX2luIDogZGV2LT5lcF9vdXQpCisJCQlbdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpXTsKKwlpZiAoIWVwKQorCQlyZXR1cm47CisKKwl4ZmVydHlwZSA9IHVzYl9lbmRwb2ludF90eXBlKCZlcC0+ZGVzYyk7CisJaWYgKHhmZXJ0eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKKwkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqc2V0dXAgPQorCQkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopIHVyYi0+c2V0dXBfcGFja2V0OworCisJCWlmICghc2V0dXApCisJCQlyZXR1cm47CisJCWlzX291dCA9ICEoc2V0dXAtPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pIHx8CisJCQkJIXNldHVwLT53TGVuZ3RoOworCX0gZWxzZSB7CisJCWlzX291dCA9IHVzYl9lbmRwb2ludF9kaXJfb3V0KCZlcC0+ZGVzYyk7CisJfQorCisJLyogZW5mb3JjZSBzaW1wbGUvc3RhbmRhcmQgcG9saWN5ICovCisJYWxsb3dlZCA9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19JTlRFUlJVUFQgfAorCQkgICBVUkJfRElSX01BU0sgfCBVUkJfRlJFRV9CVUZGRVIpOworCXN3aXRjaCAoeGZlcnR5cGUpIHsKKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs6CisJCWlmIChpc19vdXQpCisJCQlhbGxvd2VkIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0w6CisJCWFsbG93ZWQgfD0gVVJCX05PX0ZTQlI7CS8qIG9ubHkgYWZmZWN0cyBVSENJICovCisJCS8qIEZBTExUSFJPVUdIICovCisJZGVmYXVsdDoJCQkvKiBhbGwgbm9uLWlzbyBlbmRwb2ludHMgKi8KKwkJaWYgKCFpc19vdXQpCisJCQlhbGxvd2VkIHw9IFVSQl9TSE9SVF9OT1RfT0s7CisJCWJyZWFrOworCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSVNPQzoKKwkJYWxsb3dlZCB8PSBVUkJfSVNPX0FTQVA7CisJCWJyZWFrOworCX0KKwl1cmItPnRyYW5zZmVyX2ZsYWdzICY9IGFsbG93ZWQ7Cit9CisKIHN0YXRpYyB2b2lkIHN0dWJfcmVjdl9jbWRfc3VibWl0KHN0cnVjdCBzdHViX2RldmljZSAqc2RldiwKIAkJCQkgc3RydWN0IHVzYmlwX2hlYWRlciAqcGR1KQogewpAQCAtNTI4LDYgKzU0NCw3IEBACiAJLyogbm8gbmVlZCB0byBzdWJtaXQgYW4gaW50ZXJjZXB0ZWQgcmVxdWVzdCwgYnV0IGhhcm1sZXNzPyAqLwogCXR3ZWFrX3NwZWNpYWxfcmVxdWVzdHMocHJpdi0+dXJiKTsKIAorCW1hc2tpbmdfYm9ndXNfZmxhZ3MocHJpdi0+dXJiKTsKIAkvKiB1cmIgaXMgbm93IHJlYWR5IHRvIHN1Ym1pdCAqLwogCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnVyYiwgR0ZQX0tFUk5FTCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAppbmRleCBlMWJiZDEyLi5kMjgwZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0xNzIsNyArMTcyLDcgQEAKICNkZWZpbmUgVVNCSVBfUkVUX1VOTElOSwkweDAwMDQKIAlfX3UzMiBjb21tYW5kOwogCi0JIC8qIHNlcXVlbmNpYWwgbnVtYmVyIHdoaWNoIGlkZW50aWZpZXMgcmVxdWVzdHMuCisJIC8qIHNlcXVlbnRpYWwgbnVtYmVyIHdoaWNoIGlkZW50aWZpZXMgcmVxdWVzdHMuCiAJICAqIGluY3JlbWVudGVkIHBlciBjb25uZWN0aW9ucyAqLwogCV9fdTMyIHNlcW51bTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwppbmRleCBiZTVkOGRiLi4wNTc0ZDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJdmhjaSA9IGhjZF90b192aGNpKGhjZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmhjaS0+bG9jaywgZmxhZ3MpOwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXVzYmlwX2RiZ192aGNpX3JoKCJodyBhY2Nlc3NpYmxlIGZsYWcgaW4gb24/XG4iKTsKIAkJZ290byBkb25lOwogCX0KQEAgLTI2OSw3ICsyNjksNyBAQAogCiAJdTMyIHByZXZfcG9ydF9zdGF0dXNbVkhDSV9OUE9SVFNdOwogCi0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKQogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAogCS8qCkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogCWRldl9kYmcoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAogCXNwaW5fbG9ja19pcnEoJnZoY2ktPmxvY2spOwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXJjID0gLUVTSFVURE9XTjsKIAl9IGVsc2UgewogCQkvKiB2aGNpLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1JVTk5JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggMGY5ZWE1OC4uMDZiZDc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtOTAwLDcgKzkwMCw4IEBACiAJLyogQWRkcmVzcyBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCiAJaWYgKHBjaV9hZGRyICYgMHgzKSB7CiAJCWRldl9lcnIoZGV2LCAiUk1XIEFkZHJlc3Mgbm90IDQtYnl0ZSBhbGlnbmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIEVuc3VyZSBSTVcgRGlzYWJsZWQgd2hpbHN0IGNvbmZpZ3VyaW5nICovCkBAIC05MjEsNiArOTIyLDcgQEAKIAkvKiBEaXNhYmxlIFJNVyAqLwogCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7CiAKK291dDoKIAlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CiAKIAltdXRleF91bmxvY2soJihicmlkZ2UtPnZtZV9ybXcpKTsKQEAgLTk2MSwxMSArOTYzLDExIEBACiAKIAlpZiAoZGVzdC0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkgewogCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfTDJWOwotCQl2bWVfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV92bWUgKilkZXN0LT5wcml2YXRlOwotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilzcmMtPnByaXZhdGU7CisJCXZtZV9hdHRyID0gZGVzdC0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBzcmMtPnByaXZhdGU7CiAJfSBlbHNlIHsKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopc3JjLT5wcml2YXRlOwotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilkZXN0LT5wcml2YXRlOworCQl2bWVfYXR0ciA9IHNyYy0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBkZXN0LT5wcml2YXRlOwogCX0KIAogCS8qIENoZWNrIHdlIGNhbiBkbyBmdWxsZmlsbCByZXF1aXJlZCBhdHRyaWJ1dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYwppbmRleCBmMDljYWMxLi40OTJkZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKQEAgLTE2NDksNyArMTY0OSw3IEBACiAJLyogRmlsbCBvdXQgc291cmNlIHBhcnQgKi8KIAlzd2l0Y2ggKHNyYy0+dHlwZSkgewogCWNhc2UgVk1FX0RNQV9QQVRURVJOOgotCQlwYXR0ZXJuX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfcGF0dGVybiAqKXNyYy0+cHJpdmF0ZTsKKwkJcGF0dGVybl9hdHRyID0gc3JjLT5wcml2YXRlOwogCiAJCWVudHJ5LT5kZXNjcmlwdG9yLmRzYWwgPSBwYXR0ZXJuX2F0dHItPnBhdHRlcm47CiAJCWVudHJ5LT5kZXNjcmlwdG9yLmRzYXQgPSBUU0kxNDhfTENTUl9EU0FUX1RZUF9QQVQ7CkBAIC0xNjYzLDcgKzE2NjMsNyBAQAogCiAJCWJyZWFrOwogCWNhc2UgVk1FX0RNQV9QQ0k6Ci0JCXBjaV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3BjaSAqKXNyYy0+cHJpdmF0ZTsKKwkJcGNpX2F0dHIgPSBzcmMtPnByaXZhdGU7CiAKIAkJcmVnX3NwbGl0KCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX2F0dHItPmFkZHJlc3MsICZhZGRyZXNzX2hpZ2gsCiAJCQkmYWRkcmVzc19sb3cpOwpAQCAtMTY3Miw3ICsxNjcyLDcgQEAKIAkJZW50cnktPmRlc2NyaXB0b3IuZHNhdCA9IFRTSTE0OF9MQ1NSX0RTQVRfVFlQX1BDSTsKIAkJYnJlYWs7CiAJY2FzZSBWTUVfRE1BX1ZNRToKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopc3JjLT5wcml2YXRlOworCQl2bWVfYXR0ciA9IHNyYy0+cHJpdmF0ZTsKIAogCQlyZWdfc3BsaXQoKHVuc2lnbmVkIGxvbmcgbG9uZyl2bWVfYXR0ci0+YWRkcmVzcywgJmFkZHJlc3NfaGlnaCwKIAkJCSZhZGRyZXNzX2xvdyk7CkBAIC0xNzAxLDcgKzE3MDEsNyBAQAogCS8qIEZpbGwgb3V0IGRlc3RpbmF0aW9uIHBhcnQgKi8KIAlzd2l0Y2ggKGRlc3QtPnR5cGUpIHsKIAljYXNlIFZNRV9ETUFfUENJOgotCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilkZXN0LT5wcml2YXRlOworCQlwY2lfYXR0ciA9IGRlc3QtPnByaXZhdGU7CiAKIAkJcmVnX3NwbGl0KCh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX2F0dHItPmFkZHJlc3MsICZhZGRyZXNzX2hpZ2gsCiAJCQkmYWRkcmVzc19sb3cpOwpAQCAtMTcxMCw3ICsxNzEwLDcgQEAKIAkJZW50cnktPmRlc2NyaXB0b3IuZGRhdCA9IFRTSTE0OF9MQ1NSX0REQVRfVFlQX1BDSTsKIAkJYnJlYWs7CiAJY2FzZSBWTUVfRE1BX1ZNRToKLQkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopZGVzdC0+cHJpdmF0ZTsKKwkJdm1lX2F0dHIgPSBkZXN0LT5wcml2YXRlOwogCiAJCXJlZ19zcGxpdCgodW5zaWduZWQgbG9uZyBsb25nKXZtZV9hdHRyLT5hZGRyZXNzLCAmYWRkcmVzc19oaWdoLAogCQkJJmFkZHJlc3NfbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9kZXZpY2VzL3ZtZV91c2VyLmMKaW5kZXggYmMxNmZjMDcuLjhmNzdiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy92bWVfdXNlci5jCkBAIC0zMSwxNSArMzEsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgIi4uL3ZtZS5oIgogI2luY2x1ZGUgInZtZV91c2VyLmgiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgodm1lX3VzZXJfbXV0ZXgpOwogc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2bWVfdXNlciI7CiAKIHN0YXRpYyBpbnQgYnVzW1VTRVJfQlVTX01BWF07CkBAIC00OCwxOSArNDksMTkgQEAKIC8qIEN1cnJlbnRseSBEb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmb3IgVk1FOgogICoKICAqIDIyMSBjaGFyCVZNRSBidXMKLSAqIAkJICAwID0gL2Rldi9idXMvdm1lL20wCQlGaXJzdCBtYXN0ZXIgaW1hZ2UKLSAqIAkJICAxID0gL2Rldi9idXMvdm1lL20xCQlTZWNvbmQgbWFzdGVyIGltYWdlCi0gKiAJCSAgMiA9IC9kZXYvYnVzL3ZtZS9tMgkJVGhpcmQgbWFzdGVyIGltYWdlCi0gKiAJCSAgMyA9IC9kZXYvYnVzL3ZtZS9tMwkJRm91cnRoIG1hc3RlciBpbWFnZQotICogCQkgIDQgPSAvZGV2L2J1cy92bWUvczAJCUZpcnN0IHNsYXZlIGltYWdlCi0gKiAJCSAgNSA9IC9kZXYvYnVzL3ZtZS9zMQkJU2Vjb25kIHNsYXZlIGltYWdlCi0gKiAJCSAgNiA9IC9kZXYvYnVzL3ZtZS9zMgkJVGhpcmQgc2xhdmUgaW1hZ2UKLSAqIAkJICA3ID0gL2Rldi9idXMvdm1lL3MzCQlGb3VydGggc2xhdmUgaW1hZ2UKLSAqIAkJICA4ID0gL2Rldi9idXMvdm1lL2N0bAkJQ29udHJvbAorICoJCSAgMCA9IC9kZXYvYnVzL3ZtZS9tMAkJRmlyc3QgbWFzdGVyIGltYWdlCisgKgkJICAxID0gL2Rldi9idXMvdm1lL20xCQlTZWNvbmQgbWFzdGVyIGltYWdlCisgKgkJICAyID0gL2Rldi9idXMvdm1lL20yCQlUaGlyZCBtYXN0ZXIgaW1hZ2UKKyAqCQkgIDMgPSAvZGV2L2J1cy92bWUvbTMJCUZvdXJ0aCBtYXN0ZXIgaW1hZ2UKKyAqCQkgIDQgPSAvZGV2L2J1cy92bWUvczAJCUZpcnN0IHNsYXZlIGltYWdlCisgKgkJICA1ID0gL2Rldi9idXMvdm1lL3MxCQlTZWNvbmQgc2xhdmUgaW1hZ2UKKyAqCQkgIDYgPSAvZGV2L2J1cy92bWUvczIJCVRoaXJkIHNsYXZlIGltYWdlCisgKgkJICA3ID0gL2Rldi9idXMvdm1lL3MzCQlGb3VydGggc2xhdmUgaW1hZ2UKKyAqCQkgIDggPSAvZGV2L2J1cy92bWUvY3RsCQlDb250cm9sCiAgKgotICogCQlJdCBpcyBleHBlY3RlZCB0aGF0IGFsbCBWTUUgYnVzIGRyaXZlcnMgd2lsbCB1c2UgdGhlCi0gKiAJCXNhbWUgaW50ZXJmYWNlLiAgRm9yIGludGVyZmFjZSBkb2N1bWVudGF0aW9uIHNlZQotICogCQlodHRwOi8vd3d3LnZtZWxpbnV4Lm9yZy8uCisgKgkJSXQgaXMgZXhwZWN0ZWQgdGhhdCBhbGwgVk1FIGJ1cyBkcml2ZXJzIHdpbGwgdXNlIHRoZQorICoJCXNhbWUgaW50ZXJmYWNlLiAgRm9yIGludGVyZmFjZSBkb2N1bWVudGF0aW9uIHNlZQorICoJCWh0dHA6Ly93d3cudm1lbGludXgub3JnLy4KICAqCiAgKiBIb3dldmVyIHRoZSBWTUUgZHJpdmVyIGF0IGh0dHA6Ly93d3cudm1lbGludXgub3JnLyBpcyByYXRoZXIgb2xkIGFuZCBkb2Vzbid0CiAgKiBldmVuIHN1cHBvcnQgdGhlIHRzaTE0OCBjaGlwc2V0ICh3aGljaCBoYXMgOCBtYXN0ZXIgYW5kIDggc2xhdmUgd2luZG93cykuCkBAIC0xMzcsMTIgKzEzOCwxMiBAQAogc3RhdGljIGludCBfX2V4aXQgdm1lX3VzZXJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKiwgaW50LCBpbnQpOwogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2bWVfdXNlcl9mb3BzID0gewotICAgICAgICAub3BlbiA9IHZtZV91c2VyX29wZW4sCi0gICAgICAgIC5yZWxlYXNlID0gdm1lX3VzZXJfcmVsZWFzZSwKLSAgICAgICAgLnJlYWQgPSB2bWVfdXNlcl9yZWFkLAotICAgICAgICAud3JpdGUgPSB2bWVfdXNlcl93cml0ZSwKLSAgICAgICAgLmxsc2VlayA9IHZtZV91c2VyX2xsc2VlaywKLSAgICAgICAgLnVubG9ja2VkX2lvY3RsID0gdm1lX3VzZXJfdW5sb2NrZWRfaW9jdGwsCisJLm9wZW4gPSB2bWVfdXNlcl9vcGVuLAorCS5yZWxlYXNlID0gdm1lX3VzZXJfcmVsZWFzZSwKKwkucmVhZCA9IHZtZV91c2VyX3JlYWQsCisJLndyaXRlID0gdm1lX3VzZXJfd3JpdGUsCisJLmxsc2VlayA9IHZtZV91c2VyX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPSB2bWVfdXNlcl91bmxvY2tlZF9pb2N0bCwKIH07CiAKIApAQCAtMTUxLDEzICsxNTIsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgcmVzZXRfY291bnRlcnModm9pZCkKIHsKLSAgICAgICAgc3RhdGlzdGljcy5yZWFkcyA9IDA7Ci0gICAgICAgIHN0YXRpc3RpY3Mud3JpdGVzID0gMDsKLSAgICAgICAgc3RhdGlzdGljcy5pb2N0bHMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLmlycXMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLmJlcnJzID0gMDsKLSAgICAgICAgc3RhdGlzdGljcy5kbWFFcnJvcnMgPSAwOwotICAgICAgICBzdGF0aXN0aWNzLnRpbWVvdXRzID0gMDsKKwlzdGF0aXN0aWNzLnJlYWRzID0gMDsKKwlzdGF0aXN0aWNzLndyaXRlcyA9IDA7CisJc3RhdGlzdGljcy5pb2N0bHMgPSAwOworCXN0YXRpc3RpY3MuaXJxcyA9IDA7CisJc3RhdGlzdGljcy5iZXJycyA9IDA7CisJc3RhdGlzdGljcy5kbWFFcnJvcnMgPSAwOworCXN0YXRpc3RpY3MudGltZW91dHMgPSAwOwogfQogCiBzdGF0aWMgaW50IHZtZV91c2VyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yMTYsMjEgKzIxNywyMCBAQAogCQkvKiBXZSBjb3B5IHRvIGtlcm5lbCBidWZmZXIgKi8KIAkJY29waWVkID0gdm1lX21hc3Rlcl9yZWFkKGltYWdlW21pbm9yXS5yZXNvdXJjZSwKIAkJCWltYWdlW21pbm9yXS5rZXJuX2J1ZiwgY291bnQsICpwcG9zKTsKLQkJaWYgKGNvcGllZCA8IDApIHsKKwkJaWYgKGNvcGllZCA8IDApCiAJCQlyZXR1cm4gKGludCljb3BpZWQ7Ci0JCX0KIAogCQlyZXR2YWwgPSBfX2NvcHlfdG9fdXNlcihidWYsIGltYWdlW21pbm9yXS5rZXJuX2J1ZiwKIAkJCSh1bnNpZ25lZCBsb25nKWNvcGllZCk7CiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJY29waWVkID0gKGNvcGllZCAtIHJldHZhbCk7Ci0JCQlwcmludGsoIlVzZXIgY29weSBmYWlsZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNlciBjb3B5IGZhaWxlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJfSBlbHNlIHsKIAkJLyogWFhYIE5lZWQgdG8gd3JpdGUgdGhpcyAqLwotCQlwcmludGsoIkN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGxhcmdlIHRyYW5zZmVyc1xuIik7CisJCXByaW50ayhLRVJOX0lORk8gIkN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGxhcmdlIHRyYW5zZmVyc1xuIik7CiAJCS8qIE1hcCBpbiBwYWdlcyBmcm9tIHVzZXJzcGFjZSAqLwogCiAJCS8qIENhbGwgdm1lX21hc3Rlcl9yZWFkIHRvIGRvIHRoZSB0cmFuc2ZlciAqLwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQlpbWFnZVttaW5vcl0ua2Vybl9idWYsIGNvcGllZCwgKnBwb3MpOwogCX0gZWxzZSB7CiAJCS8qIFhYWCBOZWVkIHRvIHdyaXRlIHRoaXMgKi8KLQkJcHJpbnRrKCJDdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBsYXJnZSB0cmFuc2ZlcnNcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJDdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBsYXJnZSB0cmFuc2ZlcnNcbiIpOwogCQkvKiBNYXAgaW4gcGFnZXMgZnJvbSB1c2Vyc3BhY2UgKi8KIAogCQkvKiBDYWxsIHZtZV9tYXN0ZXJfd3JpdGUgdG8gZG8gdGhlIHRyYW5zZmVyICovCkBAIC0zMTMsNyArMzEzLDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgdm1lX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQlsb2ZmX3QgKiBwcG9zKQorCQkJbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGludCBtaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOwogCXNzaXplX3QgcmV0dmFsOwpAQCAtMzM3LDcgKzMzNyw3IEBACiAJZWxzZQogCQlva2NvdW50ID0gY291bnQ7CiAKLQlzd2l0Y2ggKHR5cGVbbWlub3JdKXsKKwlzd2l0Y2ggKHR5cGVbbWlub3JdKSB7CiAJY2FzZSBNQVNURVJfTUlOT1I6CiAJCXJldHZhbCA9IHJlc291cmNlX3RvX3VzZXIobWlub3IsIGJ1Ziwgb2tjb3VudCwgcHBvcyk7CiAJCWJyZWFrOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJZWxzZQogCQlva2NvdW50ID0gY291bnQ7CiAKLQlzd2l0Y2ggKHR5cGVbbWlub3JdKXsKKwlzd2l0Y2ggKHR5cGVbbWlub3JdKSB7CiAJY2FzZSBNQVNURVJfTUlOT1I6CiAJCXJldHZhbCA9IHJlc291cmNlX2Zyb21fdXNlcihtaW5vciwgYnVmLCBva2NvdW50LCBwcG9zKTsKIAkJYnJlYWs7CkBAIC01NjAsOSArNTYwLDkgQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZ2bWVfdXNlcl9tdXRleCk7CiAJcmV0ID0gdm1lX3VzZXJfaW9jdGwoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgZmlsZSwgY21kLCBhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnZtZV91c2VyX211dGV4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01NzEsNyArNTcxLDcgQEAKIC8qCiAgKiBVbmFsbG9jYXRlIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgYnVmZmVyCiAgKi8KLXN0YXRpYyB2b2lkIGJ1Zl91bmFsbG9jIChpbnQgbnVtKQorc3RhdGljIHZvaWQgYnVmX3VuYWxsb2MoaW50IG51bSkKIHsKIAlpZiAoaW1hZ2VbbnVtXS5rZXJuX2J1ZikgewogI2lmZGVmIFZNRV9ERUJVRwpAQCAtNTk0LDggKzU5NCw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1lX2RyaXZlciB2bWVfdXNlcl9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lID0gZHJpdmVyX25hbWUsCi0gICAgICAgIC5wcm9iZSA9IHZtZV91c2VyX3Byb2JlLAorCS5uYW1lID0gZHJpdmVyX25hbWUsCisJLnByb2JlID0gdm1lX3VzZXJfcHJvYmUsCiAJLnJlbW92ZSA9IHZtZV91c2VyX3JlbW92ZSwKIH07CiAKQEAgLTc3MCwxNiArNzcwLDE2IEBACiAJfQogCiAJLyogQWRkIHN5c2ZzIEVudHJpZXMgKi8KLQlmb3IgKGk9MDsgaTxWTUVfREVWUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFZNRV9ERVZTOyBpKyspIHsKIAkJc3dpdGNoICh0eXBlW2ldKSB7CiAJCWNhc2UgTUFTVEVSX01JTk9SOgotCQkJc3ByaW50ZihuYW1lLCJidXMvdm1lL20lJWQiKTsKKwkJCXNwcmludGYobmFtZSwgImJ1cy92bWUvbSUlZCIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ09OVFJPTF9NSU5PUjoKLQkJCXNwcmludGYobmFtZSwiYnVzL3ZtZS9jdGwiKTsKKwkJCXNwcmludGYobmFtZSwgImJ1cy92bWUvY3RsIik7CiAJCQlicmVhazsKIAkJY2FzZSBTTEFWRV9NSU5PUjoKLQkJCXNwcmludGYobmFtZSwiYnVzL3ZtZS9zJSVkIik7CisJCQlzcHJpbnRmKG5hbWUsICJidXMvdm1lL3MlJWQiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTc5MCw5ICs3OTAsOSBAQAogCQlpbWFnZVtpXS5kZXZpY2UgPQogCQkJZGV2aWNlX2NyZWF0ZSh2bWVfdXNlcl9zeXNmc19jbGFzcywgTlVMTCwKIAkJCQlNS0RFVihWTUVfTUFKT1IsIGkpLCBOVUxMLCBuYW1lLAotCQkJCSh0eXBlW2ldID09IFNMQVZFX01JTk9SKT8gaSAtIChNQVNURVJfTUFYICsgMSkgOiBpKTsKKwkJCQkodHlwZVtpXSA9PSBTTEFWRV9NSU5PUikgPyBpIC0gKE1BU1RFUl9NQVggKyAxKSA6IGkpOwogCQlpZiAoSVNfRVJSKGltYWdlW2ldLmRldmljZSkpIHsKLQkJCXByaW50aygiJXM6IEVycm9yIGNyZWF0aW5nIHN5c2ZzIGRldmljZVxuIiwKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFcnJvciBjcmVhdGluZyBzeXNmcyBkZXZpY2VcbiIsCiAJCQkJZHJpdmVyX25hbWUpOwogCQkJZXJyID0gUFRSX0VSUihpbWFnZVtpXS5kZXZpY2UpOwogCQkJZ290byBlcnJfc3lzZnM7CkBAIC04MDQsNyArODA0LDcgQEAKIAkvKiBFbnN1cmUgY291bnRlciBzZXQgY29ycmVjdHkgdG8gZGVzdHJveSBhbGwgc3lzZnMgZGV2aWNlcyAqLwogCWkgPSBWTUVfREVWUzsKIGVycl9zeXNmczoKLQl3aGlsZSAoaSA+IDApeworCXdoaWxlIChpID4gMCkgewogCQlpLS07CiAJCWRldmljZV9kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIGkpKTsKIAl9CkBAIC04NDUsOSArODQ1LDggQEAKIAlpbnQgaTsKIAogCS8qIFJlbW92ZSBzeXNmcyBFbnRyaWVzICovCi0JZm9yKGk9MDsgaTxWTUVfREVWUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFZNRV9ERVZTOyBpKyspCiAJCWRldmljZV9kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzLCBNS0RFVihWTUVfTUFKT1IsIGkpKTsKLQl9CiAJY2xhc3NfZGVzdHJveSh2bWVfdXNlcl9zeXNmc19jbGFzcyk7CiAKIAlmb3IgKGkgPSBNQVNURVJfTUlOT1I7IGkgPCAoTUFTVEVSX01BWCArIDEpOyBpKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExaGRyLmgKaW5kZXggYjdiMTcwZS4uZjU1MjgzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMWhkci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFoZHIuaApAQCAtMTYxLDIxICsxNjEsMjEgQEAKICNpZmRlZiBfX0JJR19FTkRJQU4KIAogLyogR0VUICYgU0VUIEZyYW1lIENvbnRyb2wgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pICAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQyIHwgQklUMykpID4+IDIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZTVFlQRShuKSAgICgoKChXT1JEKShuKSA+PiA4KSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDgpKSA+PiA4KQotI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUOSkpID4+IDkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVGUkFHKG4pICgoKChXT1JEKShuKSA8PCA4KSAmIChCSVQxMCkpID4+IDEwKQotI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUMTEpKSA+PiAxMSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDEyKSkgPj4gMTIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVEQVRBKG4pICgoKChXT1JEKShuKSA8PCA4KSAmIChCSVQxMykpID4+IDEzKQotI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgoV09SRCkobikgPDwgOCkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikgICAgKCgoKFdPUkQpKG4pIDw8IDgpICYgKEJJVDE1KSkgPj4gMTUpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPj4gOCkgJiAoQklUMCB8IEJJVDEpKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pID4+IDgpICYgKEJJVDIgfCBCSVQzKSkgPj4gMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA+PiA4KSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQ4KSkgPj4gOCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQ5KSkgPj4gOSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRUZSQUcobikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pIDw8IDgpICYgKEJJVDExKSkgPj4gMTEpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1BXUk1HVChuKSAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPDwgOCkgJiAoQklUMTIpKSA+PiAxMikKKyNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRURBVEEobikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSA8PCA4KSAmIChCSVQxMykpID4+IDEzKQorI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pIDw8IDgpICYgKEJJVDE0KSkgPj4gMTQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX09SREVSKG4pICAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikgPDwgOCkgJiAoQklUMTUpKSA+PiAxNSkKIAogLyogU2VxdWVuY2UgRmllbGQgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkdOVU0obikgKCgoV09SRCkobikgPj4gOCkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKFdPUkQpKG4pID4+IDgpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHVuc2lnbmVkIHNob3J0KShuKSA+PiA4KSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pID4+IDgpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQogCiAKIC8qIENhcGFiaWxpdHkgRmllbGQgYml0ICovCkBAIC0xOTYsMjIgKzE5NiwyMiBAQAogI2Vsc2UKIAogLyogR0VUICYgU0VUIEZyYW1lIENvbnRyb2wgYml0ICovCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1BSVkVSKG4pICAgICgoKFdPUkQpKG4pKSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikgICAoKCgoV09SRCkobikpICYgKEJJVDR8QklUNXxCSVQ2fEJJVDcpKSA+PiA0KQotI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pICAgICAoKCgoV09SRCkobikpICYgKEJJVDgpKSA+PiA4KQotI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikgICAoKCgoV09SRCkobikpICYgKEJJVDkpKSA+PiA5KQotI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgoV09SRCkobikpICYgKEJJVDEwKSkgPj4gMTApCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1JFVFJZKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMTEpKSA+PiAxMSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfUFdSTUdUKG4pICAgKCgoKFdPUkQpKG4pKSAmIChCSVQxMikpID4+IDEyKQotI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgoV09SRCkobikpICYgKEJJVDEzKSkgPj4gMTMpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pICAgICgoKChXT1JEKShuKSkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikgICAgKCgoKFdPUkQpKG4pKSAmIChCSVQxNSkpID4+IDE1KQorI2RlZmluZSBXTEFOX0dFVF9GQ19QUlZFUihuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpICYgKEJJVDAgfCBCSVQxKSkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfRlRZUEUobikgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUMiB8IEJJVDMpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQ0fEJJVDV8QklUNnxCSVQ3KSkgPj4gNCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKSAgICAgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUOCkpID4+IDgpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZST01EUyhuKSAgICgoKCh1bnNpZ25lZCBzaG9ydCkobikpICYgKEJJVDkpKSA+PiA5KQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFRlJBRyhuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMCkpID4+IDEwKQorI2RlZmluZSBXTEFOX0dFVF9GQ19SRVRSWShuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMSkpID4+IDExKQorI2RlZmluZSBXTEFOX0dFVF9GQ19QV1JNR1QobikgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMikpID4+IDEyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19NT1JFREFUQShuKSAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxMykpID4+IDEzKQorI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxNCkpID4+IDE0KQorI2RlZmluZSBXTEFOX0dFVF9GQ19PUkRFUihuKSAgICAoKCgodW5zaWduZWQgc2hvcnQpKG4pKSAmIChCSVQxNSkpID4+IDE1KQogCiAKIC8qIFNlcXVlbmNlIEZpZWxkIGJpdCAqLwotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKFdPUkQpKG4pKSAmIChCSVQwfEJJVDF8QklUMnxCSVQzKSkKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUU5VTShuKSAoKCgoV09SRCkobikpICYgKH4oQklUMHxCSVQxfEJJVDJ8QklUMykpKSA+PiA0KQorI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAoQklUMHxCSVQxfEJJVDJ8QklUMykpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVFOVU0obikgKCgoKHVuc2lnbmVkIHNob3J0KShuKSkgJiAofihCSVQwfEJJVDF8QklUMnxCSVQzKSkpID4+IDQpCiAKIAogLyogQ2FwYWJpbGl0eSBGaWVsZCBiaXQgKi8KQEAgLTI0NiwyMCArMjQ2LDIwIEBACiAjZGVmaW5lIFdMQU5fU0VUX0NBUF9JTkZPX0dSUEFDSyhuKSAgICAgICAgKChuKSA8PCAxNCkKIAogCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1BSVkVSKG4pICAgICgoV09SRCkobikpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0ZUWVBFKG4pICAgICgoKFdPUkQpKG4pKSA8PCAyKQotI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikgICAoKChXT1JEKShuKSkgPDwgNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfVE9EUyhuKSAgICAgKCgoV09SRCkobikpIDw8IDgpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0ZST01EUyhuKSAgICgoKFdPUkQpKG4pKSA8PCA5KQotI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKChXT1JEKShuKSkgPDwgMTApCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1JFVFJZKG4pICAgICgoKFdPUkQpKG4pKSA8PCAxMSkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfUFdSTUdUKG4pICAgKCgoV09SRCkobikpIDw8IDEyKQotI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKChXT1JEKShuKSkgPDwgMTMpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX0lTV0VQKG4pICAgICgoKFdPUkQpKG4pKSA8PCAxNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfT1JERVIobikgICAgKCgoV09SRCkobikpIDw8IDE1KQorI2RlZmluZSBXTEFOX1NFVF9GQ19QUlZFUihuKSAgICAoKHVuc2lnbmVkIHNob3J0KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlRZUEUobikgICAgKCgodW5zaWduZWQgc2hvcnQpKG4pKSA8PCAyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19GU1RZUEUobikgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDQpCisjZGVmaW5lIFdMQU5fU0VUX0ZDX1RPRFMobikgICAgICgoKHVuc2lnbmVkIHNob3J0KShuKSkgPDwgOCkKKyNkZWZpbmUgV0xBTl9TRVRfRkNfRlJPTURTKG4pICAgKCgodW5zaWduZWQgc2hvcnQpKG4pKSA8PCA5KQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFRlJBRyhuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEwKQorI2RlZmluZSBXTEFOX1NFVF9GQ19SRVRSWShuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDExKQorI2RlZmluZSBXTEFOX1NFVF9GQ19QV1JNR1QobikgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEyKQorI2RlZmluZSBXTEFOX1NFVF9GQ19NT1JFREFUQShuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDEzKQorI2RlZmluZSBXTEFOX1NFVF9GQ19JU1dFUChuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDE0KQorI2RlZmluZSBXTEFOX1NFVF9GQ19PUkRFUihuKSAgICAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDE1KQogCi0jZGVmaW5lIFdMQU5fU0VUX1NFUV9GUkdOVU0obikgKChXT1JEKShuKSkKLSNkZWZpbmUgV0xBTl9TRVRfU0VRX1NFUU5VTShuKSAoKChXT1JEKShuKSkgPDwgNCkKKyNkZWZpbmUgV0xBTl9TRVRfU0VRX0ZSR05VTShuKSAoKHVuc2lnbmVkIHNob3J0KShuKSkKKyNkZWZpbmUgV0xBTl9TRVRfU0VRX1NFUU5VTShuKSAoKCh1bnNpZ25lZCBzaG9ydCkobikpIDw8IDQpCiAKIC8qIEVSUCBGaWVsZCBiaXQgKi8KIApAQCAtMjgyLDUwICsyODIsNTAgQEAKICNkZWZpbmUgV0xBTl9NR01UX0dFVF9USU1fT0ZGU0VUKGIpICAgICAoKChiKSAmIH5CSVQwKSA+PiAxKQogCiAvKiAzLUFkZHIgJiA0LUFkZHIgKi8KLSNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQV9QVFIocCkgKCgoUEJZVEUpKHApKSArIFdMQU5fSERSX0FERFIzX0xFTikKLSNkZWZpbmUgV0xBTl9IRFJfQTRfREFUQV9QVFIocCkgKCgoUEJZVEUpKHApKSArIFdMQU5fSERSX0FERFI0X0xFTikKKyNkZWZpbmUgV0xBTl9IRFJfQTNfREFUQV9QVFIocCkgKCgodW5zaWduZWQgY2hhciAqKShwKSkgKyBXTEFOX0hEUl9BRERSM19MRU4pCisjZGVmaW5lIFdMQU5fSERSX0E0X0RBVEFfUFRSKHApICgoKHVuc2lnbmVkIGNoYXIgKikocCkpICsgV0xBTl9IRFJfQUREUjRfTEVOKQogCiAvKiBJRUVFIEFERFIgKi8KICNkZWZpbmUgSUVFRV9BRERSX1VOSVZFUlNBTCAgICAgICAgIDB4MDIKICNkZWZpbmUgSUVFRV9BRERSX0dST1VQICAgICAgICAgICAgIDB4MDEKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIEJZVEUgICAgICAgICAgICBhYnlBZGRyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcls2XTsKIH0gSUVFRV9BRERSLCAqUElFRUVfQUREUjsKIAogLyogODAyLjExIEhlYWRlciBGb3JtYXQgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BMiB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uSUQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMVtXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIyW1dMQU5fQUREUl9MRU5dOwogCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fODAyMTFIRFJfQTIsICpQV0xBTl84MDIxMUhEUl9BMjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BMyB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgIGFieUFkZHIzW1dMQU5fQUREUl9MRU5dOwotICAgIFdPUkQgICAgd1NlcUN0bDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uSUQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMVtXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIyW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjNbV0xBTl9BRERSX0xFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcUN0bDsKIAogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fODAyMTFIRFJfQTMsICpQV0xBTl84MDIxMUhEUl9BMzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl84MDIxMUhEUl9BNCB7CiAKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbV0xBTl9BRERSX0xFTl07Ci0gICAgQllURSAgICBhYnlBZGRyMltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgIGFieUFkZHIzW1dMQU5fQUREUl9MRU5dOwotICAgIFdPUkQgICAgd1NlcUN0bDsKLSAgICBCWVRFICAgIGFieUFkZHI0W1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFtZUN0bDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25JRDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHIxW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjJbV0xBTl9BRERSX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyM1tXTEFOX0FERFJfTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U2VxQ3RsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjRbV0xBTl9BRERSX0xFTl07CiAKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl84MDIxMUhEUl9BNCwgKlBXTEFOXzgwMjExSERSX0E0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5jCmluZGV4IDM4Njk3YzguLjFlZDBmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExbWdyLmMKQEAgLTk5LDkgKzk5LDkgQEAKICAgICAvLyBGaXhlZCBGaWVsZHMKICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfVFMpOwotICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfQkNOX0lOVCk7Ci0gICAgcEZyYW1lLT5wd0NhcEluZm8gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9DQVBJTkZPKTsKIAogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9CRUFDT05fT0ZGX1NTSUQ7CkBAIC0xMzMsMTUgKzEzMywxNSBAQAogICAgIC8vIEZpeGVkIEZpZWxkcwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9UUyk7Ci0gICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9CQ05fSU5UKTsKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9CRUFDT05fT0ZGX0NBUElORk8pOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKLSAgICBwSXRlbSA9IChQV0xBTl9JRSkoKFBCWVRFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkpCisgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCh1bnNpZ25lZCBjaGFyICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfU1NJRCk7Ci0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApeworICAgIHdoaWxlKCAoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pICl7CiAKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgogICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyMyw3ICsyMjMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIH0KLSAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOworICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogICAgIH0KIAogICAgIHJldHVybjsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKIApAQCAtMzIzLDcgKzMyMyw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKIAogICAgIHJldHVybjsKQEAgLTM0OCw5ICszNDgsOSBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7Ci0gICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BU1NPQ1JFUV9PRkZfTElTVEVOX0lOVCArIHNpemVvZigqKHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCkpOwogICAgIHJldHVybjsKQEAgLTM3NywxNiArMzc3LDE2IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFUV9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKKyAgICB3aGlsZSAoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CiAgICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKQEAgLTQwNCw3ICs0MDQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgogICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQxOCw3ICs0MTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CisgICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CiAgICAgfQogICAgIHJldHVybjsKIH0KQEAgLTQ0MiwxMSArNDQyLDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3U3RhdHVzID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX1NUQVRVUyk7Ci0gICAgcEZyYW1lLT5wd0FpZCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0FpZCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9BSUQpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BU1NPQ1JFU1BfT0ZGX0FJRAogICAgICAgICAgICAgICAgICAgKyBzaXplb2YoKihwRnJhbWUtPnB3QWlkKSk7CkBAIC00NzYsMTEgKzQ3NiwxMSBAQAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCiAgICAgLy8gRml4ZWQgRmllbGRzCi0gICAgcEZyYW1lLT5wd0NhcEluZm8gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9DQVBfSU5GTyk7Ci0gICAgcEZyYW1lLT5wd1N0YXR1cyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd1N0YXR1cyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQUlEKTsKIAogICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCkBAIC00ODgsOSArNDg4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTKTsKIAogICAgIHBJdGVtID0gKFBXTEFOX0lFKShwRnJhbWUtPnBTdXBwUmF0ZXMpOwotICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKKyAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogCi0gICAgaWYgKCgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykpIHsKKyAgICBpZiAoKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmCisJCSAgICAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRnJhbWUtPnBFeHRTdXBwUmF0ZXM9WyVwXS5cbiIsIHBJdGVtKTsKICAgICB9CkBAIC01MjAsOSArNTIxLDkgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+cEFkZHJDdXJyQVAgPSAoUElFRUVfQUREUikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUCk7CkBAIC01NTMsOSArNTU0LDkgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0NBUF9JTkZPKTsKLSAgICBwRnJhbWUtPnB3TGlzdGVuSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdMaXN0ZW5JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVFfT0ZGX0xJU1RFTl9JTlQpOwogICAgIHBGcmFtZS0+cEFkZHJDdXJyQVAgPSAoUElFRUVfQUREUikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFUV9PRkZfQ1VSUl9BUCk7CkBAIC01NjQsNyArNTY1LDcgQEAKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgeworICAgIHdoaWxlKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKIAogICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CkBAIC01ODMsNyArNTg0LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOX1dQQToKICAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01OTcsNyArNTk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKKyAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKICAgICB9CiAgICAgcmV0dXJuOwogfQpAQCAtNjQ5LDcgKzY1MCw3IEBACiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKTsKIAotICAgIHdoaWxlKCAoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CisgICAgd2hpbGUoICgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CiAKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKQEAgLTY3Miw3ICs2NzMsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKKyAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyAgcEl0ZW0tPmxlbik7CiAgICAgfQogICAgIHJldHVybjsKIH0KQEAgLTcwMCw5ICs3MDEsOSBAQAogICAgIC8vIEZpeGVkIEZpZWxkcwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUFJPQkVSRVNQX09GRl9UUyk7Ci0gICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUFJPQkVSRVNQX09GRl9CQ05fSU5UKTsKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPKTsKIAogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPICsKQEAgLTczNywxNiArNzM4LDE2IEBACiAgICAgLy8gRml4ZWQgRmllbGRzCiAgICAgcEZyYW1lLT5wcXdUaW1lc3RhbXAgPSAoUFFXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTKTsKLSAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0JDTl9JTlQpOwotICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1BST0JFUkVTUF9PRkZfQ0FQX0lORk8pOwogCiAgICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQpOwogCi0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKKyAgICB3aGlsZSggKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKICAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKICAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQpAQCAtNzc4LDcgKzc3OSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CiAgICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTldQQSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOV1BBID0gKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODIxLDcgKzgyMiw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgIHBJdGVtLT5sZW4pOworICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKCh1bnNpZ25lZCBjaGFyICopcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKICAgICB9CiAgICAgcmV0dXJuOwogfQpAQCAtODQ2LDExICs4NDcsMTEgQEAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAogICAgIC8vIEZpeGVkIEZpZWxkcwotICAgIHBGcmFtZS0+cHdBdXRoQWxnb3JpdGhtID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QXV0aEFsZ29yaXRobSA9ICh1bnNpZ25lZCBzaG9ydCAqKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcpOwotICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9TRVEpOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfU1RBVFVTKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMgKyBzaXplb2YoKihwRnJhbWUtPnB3U3RhdHVzKSk7CiAKQEAgLTg3OSwxOCArODgwLDE4IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3QXV0aEFsZ29yaXRobSA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0F1dGhBbGdvcml0aG0gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfQUxHKTsKLSAgICBwRnJhbWUtPnB3QXV0aFNlcXVlbmNlID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3QXV0aFNlcXVlbmNlID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX0FVVEhfU0VRKTsKLSAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3U3RhdHVzID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUyk7CiAKICAgICAvLyBJbmZvcm1hdGlvbiBlbGVtZW50cwogICAgIHBJdGVtID0gKFBXTEFOX0lFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQ0hBTExFTkdFKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0NIQUxMRU5HRSkpIHsKKyAgICBpZiAoKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfQ0hBTExFTkdFKSkgewogICAgICAgICBwRnJhbWUtPnBDaGFsbGVuZ2UgPSAoUFdMQU5fSUVfQ0hBTExFTkdFKXBJdGVtOwogICAgIH0KIApAQCAtOTE3LDcgKzkxOCw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKIApAQCAtOTQ0LDcgKzk0NSw3IEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKKyAgICBwRnJhbWUtPnB3UmVhc29uID0gKHVuc2lnbmVkIHNob3J0ICopKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKIAogICAgIHJldHVybjsKQEAgLTk3MCwxMSArOTcxLDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQpOwogCiAgICAgcEZyYW1lLT5sZW4gPSBXTEFOX0hEUl9BRERSM19MRU4gKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQgKyBzaXplb2YoKihwRnJhbWUtPnB3QWlkKSk7CkBAIC0xMDA1LDExICsxMDA2LDExIEBACiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKICAgICAvLyBGaXhlZCBGaWVsZHMKLSAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCisgICAgcEZyYW1lLT5wd0NhcEluZm8gPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwotICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVEFUVVMpOwotICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQorICAgIHBGcmFtZS0+cHdBaWQgPSAodW5zaWduZWQgc2hvcnQgKikoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9BSUQpOwogCiAgICAgLy9JbmZvcm1hdGlvbiBlbGVtZW50cwpAQCAtMTAxNyw5ICsxMDE4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfU1VQUF9SQVRFUyk7CiAKICAgICBwSXRlbSA9IChQV0xBTl9JRSkocEZyYW1lLT5wU3VwcFJhdGVzKTsKLSAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgcEl0ZW0tPmxlbik7CisgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgodW5zaWduZWQgY2hhciAqKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CisgICAgaWYgKCgoKHVuc2lnbmVkIGNoYXIgKilwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJgorCQkgICAgKHBJdGVtLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTKSkgewogICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKICAgICB9CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS84MDIxMW1nci5oCmluZGV4IDY1OGZlMTQuLjNiZGFiM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvODAyMTFtZ3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1LzgwMjExbWdyLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBGaWxlOiA4MDIxMW1nci5oCiAgKgotICogUHVycG9zZTogODAyLjExIG1hbmFnbWVudCBmcmFtZXMgcHJlLWRlZmluZXMuCisgKiBQdXJwb3NlOiA4MDIuMTEgbWFuYWdlbWVudCBmcmFtZXMgcHJlLWRlZmluZXMuCiAgKgogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KQEAgLTIzMCw4ICsyMzAsOCBAQAogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUUgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRSwgKlBXTEFOX0lFOwogCkBAIC0yMzksOSArMjM5LDkgQEAKIC8vIFNlcnZpY2UgU2V0IElkZW50aXR5IChTU0lEKQogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX1NTSUQgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBhYnlTU0lEWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlTU0lEWzFdOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfU1NJRCwgKlBXTEFOX0lFX1NTSUQ7CiAKQEAgLTI0OSw5ICsyNDksOSBAQAogLy8gU3VwcG9ydGVkIFJhdGVzCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfU1VQUF9SQVRFUyB7Ci0gICAgQllURSAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICBsZW47Ci0gICAgQllURSAgIGFieVJhdGVzWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlSYXRlc1sxXTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX1NVUFBfUkFURVMsICAqUFdMQU5fSUVfU1VQUF9SQVRFUzsKIApAQCAtMjYwLDIwICsyNjAsMjAgQEAKIC8vIEZIIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfRkhfUEFSTVMgewotICAgIEJZVEUgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICBsZW47Ci0gICAgV09SRCAgICB3RHdlbGxUaW1lOwotICAgIEJZVEUgICAgYnlIb3BTZXQ7Ci0gICAgQllURSAgICBieUhvcFBhdHRlcm47Ci0gICAgQllURSAgICBieUhvcEluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgc2hvcnQgd0R3ZWxsVGltZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SG9wU2V0OworICAgIHVuc2lnbmVkIGNoYXIgYnlIb3BQYXR0ZXJuOworICAgIHVuc2lnbmVkIGNoYXIgYnlIb3BJbmRleDsKIH0gV0xBTl9JRV9GSF9QQVJNUywgICpQV0xBTl9JRV9GSF9QQVJNUzsKIAogLy8gRFMgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0RTX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBCWVRFICAgYnlDdXJyQ2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbDsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0RTX1BBUk1TLCAgKlBXTEFOX0lFX0RTX1BBUk1TOwogCkBAIC0yODEsMTIgKzI4MSwxMiBAQAogLy8gQ0YgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0NGX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBCWVRFICAgYnlDRlBDb3VudDsKLSAgICBCWVRFICAgYnlDRlBQZXJpb2Q7Ci0gICAgV09SRCAgIHdDRlBNYXhEdXJhdGlvbjsKLSAgICBXT1JEICAgd0NGUER1clJlbWFpbmluZzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDRlBDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0ZQUGVyaW9kOworICAgIHVuc2lnbmVkIHNob3J0IHdDRlBNYXhEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q0ZQRHVyUmVtYWluaW5nOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfQ0ZfUEFSTVMsICAqUFdMQU5fSUVfQ0ZfUEFSTVM7CiAKQEAgLTI5NCwxMiArMjk0LDEyIEBACiAvLyBUSU0KICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9USU0gewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBieURUSU1Db3VudDsKLSAgICBCWVRFICAgYnlEVElNUGVyaW9kOwotICAgIEJZVEUgICBieUJpdE1hcEN0bDsKLSAgICBCWVRFICAgYnlWaXJ0Qml0TWFwWzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBieURUSU1Db3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RFRJTVBlcmlvZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Qml0TWFwQ3RsOworICAgIHVuc2lnbmVkIGNoYXIgYnlWaXJ0Qml0TWFwWzFdOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfVElNLCAgKlBXTEFOX0lFX1RJTTsKIApAQCAtMzA3LDkgKzMwNyw5IEBACiAvLyBJQlNTIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9JQlNTX1BBUk1TIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBXT1JEICAgd0FUSU1XaW5kb3c7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QVRJTVdpbmRvdzsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0lCU1NfUEFSTVMsICpQV0xBTl9JRV9JQlNTX1BBUk1TOwogCkBAIC0zMTcsODQgKzMxNyw4NCBAQAogLy8gQ2hhbGxlbmdlIFRleHQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9DSEFMTEVOR0UgewotICAgIEJZVEUgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgbGVuOwotICAgIEJZVEUgICBhYnlDaGFsbGVuZ2VbMV07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNoYWxsZW5nZVsxXTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0NIQUxMRU5HRSwgICpQV0xBTl9JRV9DSEFMTEVOR0U7CiAKIAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX1JTTl9FWFQgewotICAgIEJZVEUgYnlFbGVtZW50SUQ7Ci0gICAgQllURSBsZW47Ci0gICAgQllURSBhYnlPVUlbNF07Ci0gICAgV09SRCB3VmVyc2lvbjsKLSAgICBCWVRFIGFieU11bHRpY2FzdFs0XTsKLSAgICBXT1JEIHdQS0NvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlPVUlbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd1ZlcnNpb247CisgICAgdW5zaWduZWQgY2hhciBhYnlNdWx0aWNhc3RbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd1BLQ291bnQ7CiAgICAgc3RydWN0IHsKLSAgICAgICAgQllURSBhYnlPVUlbNF07CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWJ5T1VJWzRdOwogICAgIH0gUEtTTGlzdFsxXTsgLy8gdGhlIHJlc3QgaXMgdmFyaWFibGUgc28gbmVlZCB0bwogICAgIC8vIG92ZXJsYXkgaWVhdXRoIHN0cnVjdHVyZQogfSBXTEFOX0lFX1JTTl9FWFQsICpQV0xBTl9JRV9SU05fRVhUOwogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfUlNOX0FVVEggewotICAgIFdPUkQgd0F1dGhDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXV0aENvdW50OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEJZVEUgYWJ5T1VJWzRdOworICAgICAgICB1bnNpZ25lZCBjaGFyIGFieU9VSVs0XTsKICAgICB9IEF1dGhLU0xpc3RbMV07CiB9IFdMQU5fSUVfUlNOX0FVVEgsICpQV0xBTl9JRV9SU05fQVVUSDsKIAogLy8gUlNOIElkZW50aXR5CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfUlNOIHsKLSAgICBCWVRFICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgIGxlbjsKLSAgICBXT1JEICAgd1ZlcnNpb247Ci0gICAgQllURSAgIGFieVJTTltXTEFOX01JTl9BUlJBWV07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VmVyc2lvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJTTltXTEFOX01JTl9BUlJBWV07CiB9IFdMQU5fSUVfUlNOLCAqUFdMQU5fSUVfUlNOOwogCiAKIC8vIEVSUAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0VSUCB7Ci0gICAgQllURSAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICBsZW47Ci0gICAgQllURSAgIGJ5Q29udGV4dDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDb250ZXh0OwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfRVJQLCAgKlBXTEFOX0lFX0VSUDsKIAogCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVEgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5U3RhcnRUaW1lWzhdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5RHVyYXRpb25bMl07CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlTdGFydFRpbWVbOF07CisgICAgdW5zaWduZWQgY2hhciBhYnlEdXJhdGlvblsyXTsKIH0gTUVBU0VVUkVfUkVRLCAqUE1FQVNFVVJFX1JFUSwKICAgTUVBU0VVUkVfUkVRX0JBU0lDLCAqUE1FQVNFVVJFX1JFUV9CQVNJQywKICAgTUVBU0VVUkVfUkVRX0NDQSwgKlBNRUFTRVVSRV9SRVFfQ0NBLAogICBNRUFTRVVSRV9SRVFfUlBJLCAqUE1FQVNFVVJFX1JFUV9SUEk7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfQkFTSUMgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5U3RhcnRUaW1lWzhdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5RHVyYXRpb25bMl07Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU1hcDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVN0YXJ0VGltZVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUR1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXA7CiB9IE1FQVNFVVJFX1JFUF9CQVNJQywgKlBNRUFTRVVSRV9SRVBfQkFTSUM7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfQ0NBIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieVN0YXJ0VGltZVs4XTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUR1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDQ0FCdXN5RnJhY3Rpb247CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBhYnlTdGFydFRpbWVbOF07CisgICAgdW5zaWduZWQgY2hhciBhYnlEdXJhdGlvblsyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NBQnVzeUZyYWN0aW9uOwogfSBNRUFTRVVSRV9SRVBfQ0NBLCAqUE1FQVNFVVJFX1JFUF9DQ0E7CiAKIHR5cGVkZWYgc3RydWN0IF9NRUFTRVVSRV9SRVBfUlBJIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieVN0YXJ0VGltZVs4XTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUR1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5UlBJZGVuc2l0eVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVN0YXJ0VGltZVs4XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUR1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UlBJZGVuc2l0eVs4XTsKIH0gTUVBU0VVUkVfUkVQX1JQSSwgKlBNRUFTRVVSRV9SRVBfUlBJOwogCiB0eXBlZGVmIHVuaW9uIF9NRUFTRVVSRV9SRVAgewpAQCAtNDA2LDg1ICs0MDYsODUgQEAKIH0gTUVBU0VVUkVfUkVQLCAqUE1FQVNFVVJFX1JFUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfTUVBU1VSRV9SRVEgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICBsZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVRva2VuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNb2RlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CisgICAgdW5zaWduZWQgY2hhciBieVRva2VuOworICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlOworICAgIHVuc2lnbmVkIGNoYXIgYnlUeXBlOwogICAgIE1FQVNFVVJFX1JFUSAgICAgICAgc1JlcTsKIH0gV0xBTl9JRV9NRUFTVVJFX1JFUSwgKlBXTEFOX0lFX01FQVNVUkVfUkVROwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9NRUFTVVJFX1JFUCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5VG9rZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9rZW47CisgICAgdW5zaWduZWQgY2hhciBieU1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVR5cGU7CiAgICAgTUVBU0VVUkVfUkVQICAgICAgICBzUmVwOwogfSBXTEFOX0lFX01FQVNVUkVfUkVQLCAqUFdMQU5fSUVfTUVBU1VSRV9SRVA7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX0NIX1NXIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNb2RlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDaGFubmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlOworICAgIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlDb3VudDsKIH0gV0xBTl9JRV9DSF9TVywgKlBXTEFOX0lFX0NIX1NXOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9RVUlFVCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UXVpZXRDb3VudDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UXVpZXRQZXJpb2Q7Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlRdWlldER1cmF0aW9uWzJdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5UXVpZXRPZmZzZXRbMl07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRQZXJpb2Q7CisgICAgdW5zaWduZWQgY2hhciBhYnlRdWlldER1cmF0aW9uWzJdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UXVpZXRPZmZzZXRbMl07CiB9IFdMQU5fSUVfUVVJRVQsICpQV0xBTl9JRV9RVUlFVDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfQ09VTlRSWSB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNvdW50cnlTdHJpbmdbM107Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlDb3VudHJ5SW5mb1szXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q291bnRyeVN0cmluZ1szXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNvdW50cnlJbmZvWzNdOwogfSBXTEFOX0lFX0NPVU5UUlksICpQV0xBTl9JRV9DT1VOVFJZOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9QV19DT05TVCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UG93ZXI7CiB9IFdMQU5fSUVfUFdfQ09OU1QsICpQV0xBTl9JRV9QV19DT05TVDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfUFdfQ0FQIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlNaW5Qb3dlcjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5TWF4UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWluUG93ZXI7CisgICAgdW5zaWduZWQgY2hhciBieU1heFBvd2VyOwogfSBXTEFOX0lFX1BXX0NBUCwgKlBXTEFOX0lFX1BXX0NBUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fSUVfU1VQUF9DSCB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNoYW5uZWxUdXBsZVsyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RWxlbWVudElEOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q2hhbm5lbFR1cGxlWzJdOwogfSBXTEFOX0lFX1NVUFBfQ0gsICpQV0xBTl9JRV9TVVBQX0NIOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9UUENfUkVRIHsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RWxlbWVudElEOwotICAgIEJZVEUgICAgICAgICAgICAgICAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgYnlFbGVtZW50SUQ7CisgICAgdW5zaWduZWQgY2hhciBsZW47CiB9IFdMQU5fSUVfVFBDX1JFUSwgKlBXTEFOX0lFX1RQQ19SRVE7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX1RQQ19SRVAgewotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlFbGVtZW50SUQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICBsZW47Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVR4UG93ZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUxpbmtNYXJnaW47CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhQb3dlcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TGlua01hcmdpbjsKIH0gV0xBTl9JRV9UUENfUkVQLCAqUFdMQU5fSUVfVFBDX1JFUDsKIAogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9JRV9JQlNTX0RGUyB7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUVsZW1lbnRJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGxlbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieURGU093bmVyWzZdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlERlNSZWNvdmVyeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUNoYW5uZWxNYXBbMl07CisgICAgdW5zaWduZWQgY2hhciBieUVsZW1lbnRJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURGU093bmVyWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYnlERlNSZWNvdmVyeTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNoYW5uZWxNYXBbMl07CiB9IFdMQU5fSUVfSUJTU19ERlMsICpQV0xBTl9JRV9JQlNTX0RGUzsKIAogI3ByYWdtYSBwYWNrKCkKQEAgLTQ5NSw5ICs0OTUsOSBAQAogLy8gcHJvdG90eXBlIHN0cnVjdHVyZSwgYWxsIG1nbXQgZnJhbWUgdHlwZXMgd2lsbCBzdGFydCB3aXRoIHRoZXNlIG1lbWJlcnMKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfTUdNVCB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICBwSGRyOwogCiB9IFdMQU5fRlJfTUdNVCwgICpQV0xBTl9GUl9NR01UOwpAQCAtNTA1LDE0ICs1MDUsMTQgQEAKIC8vIEJlYWNvbiBmcmFtZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9CRUFDT04gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8vIGZpeGVkIGZpZWxkcwogICAgIFBRV09SRCAgICAgICAgICAgICAgICAgIHBxd1RpbWVzdGFtcDsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0JlYWNvbkludGVydmFsOwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdCZWFjb25JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9TU0lEICAgICAgICAgICBwU1NJRDsKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTICAgICBwU3VwcFJhdGVzOwpAQCAtNTM3LDkgKzUzNyw5IEBACiAvLyBJQlNTIEFUSU0gZnJhbWUKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfSUJTU0FUSU0gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogCiAgICAgLy8gZml4ZWQgZmllbGRzCkBAIC01NTEsMTIgKzU1MSwxMiBAQAogLy8gRGlzYXNzb2NpYXRpb24KIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fRlJfRElTQVNTT0MgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd1JlYXNvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSZWFzb247CiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCiB9IFdMQU5fRlJfRElTQVNTT0MsICpQV0xBTl9GUl9ESVNBU1NPQzsKQEAgLTU2NCwxMyArNTY0LDEzIEBACiAvLyBBc3NvY2lhdGlvbiBSZXF1ZXN0CiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX0FTU09DUkVRIHsKIAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVUeXBlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICBwQnVmOworICAgIHVuc2lnbmVkIGludAl1VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQJbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnBCdWY7CiAgICAgUFVXTEFOXzgwMjExSERSICAgICAgICAgcEhkcjsKICAgICAvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdDYXBJbmZvOwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3TGlzdGVuSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdMaXN0ZW5JbnRlcnZhbDsKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiAgICAgUFdMQU5fSUVfU1NJRCAgICAgICAgICAgcFNTSUQ7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcFN1cHBSYXRlczsKQEAgLTU4NSwxNCArNTg1LDE0IEBACiAvLyBBc3NvY2lhdGlvbiBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9BU1NPQ1JFU1AgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0NhcEluZm87Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdTdGF0dXM7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdBaWQ7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdTdGF0dXM7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QWlkOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTICAgICBwU3VwcFJhdGVzOwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgICAgIHBFeHRTdXBwUmF0ZXM7CkBAIC02MDIsMTQgKzYwMiwxNCBAQAogLy8gUmVhc3NvY2lhdGlvbiBSZXF1ZXN0CiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX1JFQVNTT0NSRVEgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogCiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0xpc3RlbkludGVydmFsOworICAgIHVuc2lnbmVkIHNob3J0ICpwd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgKnB3TGlzdGVuSW50ZXJ2YWw7CiAgICAgUElFRUVfQUREUiAgICAgICAgICAgICAgcEFkZHJDdXJyQVA7CiAKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCkBAIC02MjQsMTQgKzYyNCwxNCBAQAogLy8gUmVhc3NvY2lhdGlvbiBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9SRUFTU09DUkVTUCB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1VHlwZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICAgIHBIZHI7CiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotICAgIFBXT1JEICAgICAgICAgICAgICAgICAgIHB3Q2FwSW5mbzsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd1N0YXR1czsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0FpZDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvOworICAgIHVuc2lnbmVkIHNob3J0ICpwd1N0YXR1czsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdBaWQ7CiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgICAgIHBTdXBwUmF0ZXM7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcEV4dFN1cHBSYXRlczsKQEAgLTY0MSw5ICs2NDEsOSBAQAogLy8gUHJvYmUgUmVxdWVzdAogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9QUk9CRVJFUSB7CiAKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1VHlwZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcEJ1ZjsKKyAgICB1bnNpZ25lZCBpbnQJdVR5cGU7CisgICAgdW5zaWduZWQgaW50CWxlbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwQnVmOwogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgICAgIHBIZHI7CiAgICAgLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KQEAgLTY1NiwxNCArNjU2LDE0IEBACiAvLyBQcm9iZSBSZXNwb25zZQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9QUk9CRVJFU1AgewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KICAgICBQUVdPUkQgICAgICAgICAgICAgICAgICBwcXdUaW1lc3RhbXA7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdCZWFjb25JbnRlcnZhbDsKLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QmVhY29uSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbzsKICAgICAvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCiAgICAgUFdMQU5fSUVfU1NJRCAgICAgICAgICAgcFNTSUQ7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyAgICAgcFN1cHBSYXRlczsKQEAgLTY4NSwxNCArNjg1LDE0IEBACiAvLyBBdXRoZW50aWNhdGlvbgogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9GUl9BVVRIRU4gewogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBCdWY7CisgICAgdW5zaWduZWQgaW50CXVUeXBlOworICAgIHVuc2lnbmVkIGludAlsZW47CisgICAgdW5zaWduZWQgY2hhciAqcEJ1ZjsKICAgICBQVVdMQU5fODAyMTFIRFIgICAgICAgICBwSGRyOwogICAgIC8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLSAgICBQV09SRCAgICAgICAgICAgICAgICAgICBwd0F1dGhBbGdvcml0aG07Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdBdXRoU2VxdWVuY2U7Ci0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdTdGF0dXM7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3QXV0aEFsZ29yaXRobTsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdBdXRoU2VxdWVuY2U7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3U3RhdHVzOwogICAgIC8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KICAgICBQV0xBTl9JRV9DSEFMTEVOR0UgICAgICBwQ2hhbGxlbmdlOwogCkBAIC03MDEsMTIgKzcwMSwxMiBAQAogLy8gRGVhdXRoZW5pY2F0aW9uCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0ZSX0RFQVVUSEVOIHsKIAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVUeXBlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICBwQnVmOworICAgIHVuc2lnbmVkIGludAl1VHlwZTsKKyAgICB1bnNpZ25lZCBpbnQJbGVuOworICAgIHVuc2lnbmVkIGNoYXIgKnBCdWY7CiAgICAgUFVXTEFOXzgwMjExSERSICAgICAgICAgcEhkcjsKICAgICAvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0gICAgUFdPUkQgICAgICAgICAgICAgICAgICAgcHdSZWFzb247CisgICAgdW5zaWduZWQgc2hvcnQgKnB3UmVhc29uOwogCiAgICAgLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L0lFRUUxMWguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCmluZGV4IDIyZjEyZjUuLmUwN2ViZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAid21nci5oIgogI2luY2x1ZGUgInJ4dHguaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50ICAgICAgICAgIG1zZ2xldmVsICAgICAgICAgICAgICAgID1NU0dfTEVWRUxfSU5GTzsKQEAgLTQ2LDQwICs0Nyw0MCBAQAogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9BQ1RJT04gewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5VmFyc1sxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVZhcnNbMV07CiB9IFdMQU5fRlJBTUVfQUNUSU9OLCAqUFdMQU5fRlJBTUVfQUNUSU9OOwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9NU1JSRVEgewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlEaWFsb2dUb2tlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGlhbG9nVG9rZW47CiAgICAgV0xBTl9JRV9NRUFTVVJFX1JFUSBzTVNSUmVxRUlEc1sxXTsKIH0gV0xBTl9GUkFNRV9NU1JSRVEsICpQV0xBTl9GUkFNRV9NU1JSRVE7CiAKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0ZSQU1FX01TUlJFUCB7CiAgICAgV0xBTl84MDIxMUhEUl9BMyAgICBIZWFkZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNhdGVnb3J5OwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlBY3Rpb247Ci0gICAgQllURSAgICAgICAgICAgICAgICBieURpYWxvZ1Rva2VuOworICAgIHVuc2lnbmVkIGNoYXIgYnlDYXRlZ29yeTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QWN0aW9uOworICAgIHVuc2lnbmVkIGNoYXIgYnlEaWFsb2dUb2tlbjsKICAgICBXTEFOX0lFX01FQVNVUkVfUkVQIHNNU1JSZXBFSURzWzFdOwogfSBXTEFOX0ZSQU1FX01TUlJFUCwgKlBXTEFOX0ZSQU1FX01TUlJFUDsKIAogdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fRlJBTUVfVFBDUkVRIHsKICAgICBXTEFOXzgwMjExSERSX0EzICAgIEhlYWRlcjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2F0ZWdvcnk7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUFjdGlvbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RGlhbG9nVG9rZW47CisgICAgdW5zaWduZWQgY2hhciBieUNhdGVnb3J5OworICAgIHVuc2lnbmVkIGNoYXIgYnlBY3Rpb247CisgICAgdW5zaWduZWQgY2hhciBieURpYWxvZ1Rva2VuOwogICAgIFdMQU5fSUVfVFBDX1JFUSAgICAgc1RQQ1JlcUVJRHM7CiB9IFdMQU5fRlJBTUVfVFBDUkVRLCAqUFdMQU5fRlJBTUVfVFBDUkVROwogCiB0eXBlZGVmIHN0cnVjdCBfV0xBTl9GUkFNRV9UUENSRVAgewogICAgIFdMQU5fODAyMTFIRFJfQTMgICAgSGVhZGVyOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDYXRlZ29yeTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5QWN0aW9uOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlEaWFsb2dUb2tlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2F0ZWdvcnk7CisgICAgdW5zaWduZWQgY2hhciBieUFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGlhbG9nVG9rZW47CiAgICAgV0xBTl9JRV9UUENfUkVQICAgICBzVFBDUmVwRUlEczsKIH0gV0xBTl9GUkFNRV9UUENSRVAsICpQV0xBTl9GUkFNRV9UUENSRVA7CiAKQEAgLTk3LDEwICs5OCwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBCT09MIHNfYlJ4TVNSUmVxKFBTTWdtdE9iamVjdCBwTWdtdCwgUFdMQU5fRlJBTUVfTVNSUkVRIHBNU1JSZXEsIFVJTlQgdUxlbmd0aCkKK3N0YXRpYyBib29sIHNfYlJ4TVNSUmVxKFBTTWdtdE9iamVjdCBwTWdtdCwgUFdMQU5fRlJBTUVfTVNSUkVRIHBNU1JSZXEsCisJCXVuc2lnbmVkIGludCB1TGVuZ3RoKQogewogICAgIHNpemVfdCAgICB1TnVtT2ZFSURzID0gMDsKLSAgICBCT09MICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJvb2wgYlJlc3VsdCA9IHRydWU7CiAKICAgICBpZiAodUxlbmd0aCA8PSBXTEFOX0EzRlJfTUFYTEVOKSB7CiAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5Q3VycmVudE1TUlJlcSwgcE1TUlJlcSwgdUxlbmd0aCk7CkBAIC0xMTYsNyArMTE4LDcgQEAKIH0KIAogCi1zdGF0aWMgQk9PTCBzX2JSeFRQQ1JlcShQU01nbXRPYmplY3QgcE1nbXQsIFBXTEFOX0ZSQU1FX1RQQ1JFUSBwVFBDUmVxLCBCWVRFIGJ5UmF0ZSwgQllURSBieVJTU0kpCitzdGF0aWMgYm9vbCBzX2JSeFRQQ1JlcShQU01nbXRPYmplY3QgcE1nbXQsIFBXTEFOX0ZSQU1FX1RQQ1JFUSBwVFBDUmVxLCB1bnNpZ25lZCBjaGFyIGJ5UmF0ZSwgdW5zaWduZWQgY2hhciBieVJTU0kpCiB7CiAgICAgUFdMQU5fRlJBTUVfVFBDUkVQICBwRnJhbWU7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQgPSBOVUxMOwpAQCAtMTI0LDkgKzEyNiw5IEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKLSAgICBwRnJhbWUgPSAoUFdMQU5fRlJBTUVfVFBDUkVQKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwRnJhbWUgPSAoUFdMQU5fRlJBTUVfVFBDUkVQKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKICAgICBwRnJhbWUtPkhlYWRlci53RnJhbWVDdGwgPSAoICAgV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9NR01UKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfQUNUSU9OKQpAQCAtMTc0LDggKzE3Niw4IEBACiAgICAgcFR4UGFja2V0LT5jYk1QRFVMZW4gPSBzaXplb2YoV0xBTl9GUkFNRV9UUENSRVApOwogICAgIHBUeFBhY2tldC0+Y2JQYXlsb2FkTGVuID0gc2l6ZW9mKFdMQU5fRlJBTUVfVFBDUkVQKSAtIFdMQU5fSERSX0FERFIzX0xFTjsKICAgICBpZiAoY3NNZ210X3htaXQocE1nbXQtPnBBZGFwdGVyLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7Ci0gICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CisgICAgcmV0dXJuICh0cnVlKTsKIC8vICAgIHJldHVybiAoQ0FSRGJTZW5kUGFja2V0KHBNZ210LT5wQWRhcHRlciwgcEZyYW1lLCBQS1RfVFlQRV84MDJfMTFfTU5HLCBzaXplb2YoV0xBTl9GUkFNRV9UUENSRVApKSk7CiAKIH0KQEAgLTIwMSw3ICsyMDMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lLgogICoKIC0qLwotQk9PTAorYm9vbAogSUVFRTExaGJNZ3JSeEFjdGlvbiAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCiAgICAgdm9pZCAqcFJ4UGFja2V0CkBAIC0yMDksMTQgKzIxMSwxNCBAQAogewogICAgIFBTTWdtdE9iamVjdCAgICAgICAgICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRIYW5kbGU7CiAgICAgUFdMQU5fRlJBTUVfQUNUSU9OICAgICAgcEFjdGlvbiA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOwogICAgIFBXTEFOX0lFX0NIX1NXICAgICAgICAgIHBDaGFubmVsU3dpdGNoID0gTlVMTDsKIAogCiAgICAgLy8gZGVjb2RlIHRoZSBmcmFtZQogICAgIHVMZW5ndGggPSAoKFBTUnhNZ210UGFja2V0KXBSeFBhY2tldCktPmNiTVBEVUxlbjsKICAgICBpZiAodUxlbmd0aCA+IFdMQU5fQTNGUl9NQVhMRU4pIHsKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0KIAogCkBAIC0yMzMsNyArMjM1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gKHNfYlJ4VFBDUmVxKHBNZ210LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0ZSQU1FX1RQQ1JFUSkgcEFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFNSeE1nbXRQYWNrZXQpcFJ4UGFja2V0KS0+YnlSeFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkgKChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXQpLT51UlNTSSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpICgoUFNSeE1nbXRQYWNrZXQpcFJ4UGFja2V0KS0+dVJTU0kpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUNUSU9OX1RQQ1JFUDoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI0NCw3ICsyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBlbGVtZW50IGlkCiAgICAgICAgICAgICAgICAgICAgIENBUkRiQ2hhbm5lbFN3aXRjaCggcE1nbXQtPnBBZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDaGFubmVsU3dpdGNoLT5ieU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocE1nbXQtPnBBZGFwdGVyLCBwQ2hhbm5lbFN3aXRjaC0+YnlDaGFubmVsLCBwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfY2hhbm5lbF9tYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgcENoYW5uZWxTd2l0Y2gtPmJ5Q2hhbm5lbCwgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENoYW5uZWxTd2l0Y2gtPmJ5Q291bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIH0KQEAgLTI1OCwxMyArMjYwLDEzIEBACiAgICAgICAgIHBBY3Rpb24tPmJ5Q2F0ZWdvcnkgfD0gMHg4MDsKIAogICAgICAgIC8vcmV0dXJuIChDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwQWN0aW9uLCBQS1RfVFlQRV84MDJfMTFfTU5HLCB1TGVuZ3RoKSk7Ci0gICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCi1CT09MIElFRUUxMWhiTVNSUmVwVHggKAorYm9vbCBJRUVFMTFoYk1TUlJlcFR4ICgKICAgICB2b2lkICpwTWdtdEhhbmRsZQogICAgICkKIHsKQEAgLTI3NSw3ICsyNzcsNyBAQAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5hYnlDdXJyZW50TVNSUmVwOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQTNGUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAKIAogICAgIHBNU1JSZXAtPkhlYWRlci53RnJhbWVDdGwgPSAoICAgV0xBTl9TRVRfRkNfRlRZUEUoV0xBTl9GVFlQRV9NR01UKSB8CkBAIC0yOTUsOCArMjk3LDggQEAKICAgICBwVHhQYWNrZXQtPmNiTVBEVUxlbiA9IHVMZW5ndGg7CiAgICAgcFR4UGFja2V0LT5jYlBheWxvYWRMZW4gPSB1TGVuZ3RoIC0gV0xBTl9IRFJfQUREUjNfTEVOOwogICAgIGlmIChjc01nbXRfeG1pdChwTWdtdC0+cEFkYXB0ZXIsIHBUeFBhY2tldCkgIT0gQ01EX1NUQVRVU19QRU5ESU5HKQotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICByZXR1cm4gKFRSVUUpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKKyAgICByZXR1cm4gKHRydWUpOwogLy8gICAgcmV0dXJuIChDQVJEYlNlbmRQYWNrZXQocE1nbXQtPnBBZGFwdGVyLCBwTVNSUmVwLCBQS1RfVFlQRV84MDJfMTFfTU5HLCB1TGVuZ3RoKSk7CiAKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvSUVFRTExaC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKaW5kZXggYWUzMjQ5OC4uNTQyMzQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9JRUVFMTFoLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBJRUVFMTFoYk1TUlJlcFR4ICgKK2Jvb2wgSUVFRTExaGJNU1JSZXBUeCAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUKICAgICApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9NYWtlZmlsZQppbmRleCA5MzFkZWIxLi44MjRjOTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIHZ0NjY1NV9zdGFnZS15ICs9CWRldmljZV9tYWluLm8gXAogCWNhcmQubyBcCisJY2hhbm5lbC5vIFwKIAltYWMubyBcCiAJYmFzZWJhbmQubyBcCiAJd2N0bC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvVE9ETwppbmRleCBjYjA0YWFhLi42MzYwN2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9UT0RPCkBAIC0zLDcgKzMsNiBAQAogLSBwcmVwYXJlIGZvciBtZXJnZSB3aXRoIHZ0NjY1NiBkcml2ZXI6CiAgIC0gcmVuYW1lIERFVklDRV9QUlQoKSB0byBEQkdfUFJUKCkgLS0gZG9uZQogICAtIHNoYXJlIDgwMjExKi5oIGluY2x1ZGVzCi0gIC0gbW92ZSBjb2RlIGZvciBjaGFubmVsIG1hcHBpbmcgZnJvbSBjYXJkLmMgdG8gY2hhbm5lbC5jCiAgIC0gc3BsaXQgcmYuYwogICAtIHJlbW92ZSBkZWFkIGNvZGUKICAgLSBhYnN0cmFjdCBWVDMyNTMgY2hpcHNldCBzcGVjaWZpYyBjb2RlCkBAIC0xMSw2ICsxMCw4IEBACiAtIGtpbGwgdHR5cGUuaAogLSBzd2l0Y2ggdG8gdXNlIExJQjgwMjExCiAtIHN3aXRjaCB0byB1c2UgTUFDODAyMTEKKy0gdmVyaWZ5IHVuc2lnbmVkIGxvbmcgdXNhZ2UgZm9yIHg4Ni02NCBhcmNoCistIHJlZHVjZSAuZGF0YSBmb290cHJpbnQKIC0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKIC0gY2hlY2twYXRjaC5wbCBmaXhlcwogLSBzcGFyc2UgZml4ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuYwppbmRleCBmZWYxYjkxLi5lMzAxNjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9hZXNfY2NtcC5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiBTQk9YIFRhYmxlCiAgKi8KIAotQllURSBzYm94X3RhYmxlWzI1Nl0gPQordW5zaWduZWQgY2hhciBzYm94X3RhYmxlWzI1Nl0gPQogewogMHg2MywgMHg3YywgMHg3NywgMHg3YiwgMHhmMiwgMHg2YiwgMHg2ZiwgMHhjNSwgMHgzMCwgMHgwMSwgMHg2NywgMHgyYiwgMHhmZSwgMHhkNywgMHhhYiwgMHg3NiwKIDB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsCkBAIC02Niw3ICs2Niw3IEBACiAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2CiB9OwogCi1CWVRFIGRvdDJfdGFibGVbMjU2XSA9IHsKK3Vuc2lnbmVkIGNoYXIgZG90Ml90YWJsZVsyNTZdID0gewogMHgwMCwgMHgwMiwgMHgwNCwgMHgwNiwgMHgwOCwgMHgwYSwgMHgwYywgMHgwZSwgMHgxMCwgMHgxMiwgMHgxNCwgMHgxNiwgMHgxOCwgMHgxYSwgMHgxYywgMHgxZSwKIDB4MjAsIDB4MjIsIDB4MjQsIDB4MjYsIDB4MjgsIDB4MmEsIDB4MmMsIDB4MmUsIDB4MzAsIDB4MzIsIDB4MzQsIDB4MzYsIDB4MzgsIDB4M2EsIDB4M2MsIDB4M2UsCiAweDQwLCAweDQyLCAweDQ0LCAweDQ2LCAweDQ4LCAweDRhLCAweDRjLCAweDRlLCAweDUwLCAweDUyLCAweDU0LCAweDU2LCAweDU4LCAweDVhLCAweDVjLCAweDVlLApAQCAtODUsNyArODUsNyBAQAogMHhmYiwgMHhmOSwgMHhmZiwgMHhmZCwgMHhmMywgMHhmMSwgMHhmNywgMHhmNSwgMHhlYiwgMHhlOSwgMHhlZiwgMHhlZCwgMHhlMywgMHhlMSwgMHhlNywgMHhlNQogfTsKIAotQllURSBkb3QzX3RhYmxlWzI1Nl0gPSB7Cit1bnNpZ25lZCBjaGFyIGRvdDNfdGFibGVbMjU2XSA9IHsKIDB4MDAsIDB4MDMsIDB4MDYsIDB4MDUsIDB4MGMsIDB4MGYsIDB4MGEsIDB4MDksIDB4MTgsIDB4MWIsIDB4MWUsIDB4MWQsIDB4MTQsIDB4MTcsIDB4MTIsIDB4MTEsCiAweDMwLCAweDMzLCAweDM2LCAweDM1LCAweDNjLCAweDNmLCAweDNhLCAweDM5LCAweDI4LCAweDJiLCAweDJlLCAweDJkLCAweDI0LCAweDI3LCAweDIyLCAweDIxLAogMHg2MCwgMHg2MywgMHg2NiwgMHg2NSwgMHg2YywgMHg2ZiwgMHg2YSwgMHg2OSwgMHg3OCwgMHg3YiwgMHg3ZSwgMHg3ZCwgMHg3NCwgMHg3NywgMHg3MiwgMHg3MSwKQEAgLTExMCwxMSArMTEwLDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgeG9yXzEyOChCWVRFICphLCBCWVRFICpiLCBCWVRFICpvdXQpCit2b2lkIHhvcl8xMjgodW5zaWduZWQgY2hhciAqYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgY2hhciAqb3V0KQogewotUERXT1JEIGR3UHRyQSA9IChQRFdPUkQpIGE7Ci1QRFdPUkQgZHdQdHJCID0gKFBEV09SRCkgYjsKLVBEV09SRCBkd1B0ck91dCA9KFBEV09SRCkgb3V0OwordW5zaWduZWQgbG9uZyAqZHdQdHJBID0gKHVuc2lnbmVkIGxvbmcgKikgYTsKK3Vuc2lnbmVkIGxvbmcgKmR3UHRyQiA9ICh1bnNpZ25lZCBsb25nICopIGI7Cit1bnNpZ25lZCBsb25nICpkd1B0ck91dCA9KHVuc2lnbmVkIGxvbmcgKikgb3V0OwogCiAgICAgKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7CiAgICAgKCpkd1B0ck91dCsrKSA9ICgqZHdQdHJBKyspIF4gKCpkd1B0ckIrKyk7CkBAIC0xMjMsMTkgKzEyMywxOSBAQAogfQogCiAKLXZvaWQgeG9yXzMyKEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKK3ZvaWQgeG9yXzMyKHVuc2lnbmVkIGNoYXIgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGNoYXIgKm91dCkKIHsKLVBEV09SRCBkd1B0ckEgPSAoUERXT1JEKSBhOwotUERXT1JEIGR3UHRyQiA9IChQRFdPUkQpIGI7Ci1QRFdPUkQgZHdQdHJPdXQgPShQRFdPUkQpIG91dDsKK3Vuc2lnbmVkIGxvbmcgKmR3UHRyQSA9ICh1bnNpZ25lZCBsb25nICopIGE7Cit1bnNpZ25lZCBsb25nICpkd1B0ckIgPSAodW5zaWduZWQgbG9uZyAqKSBiOwordW5zaWduZWQgbG9uZyAqZHdQdHJPdXQgPSh1bnNpZ25lZCBsb25nICopIG91dDsKIAogICAgICgqZHdQdHJPdXQrKykgPSAoKmR3UHRyQSsrKSBeICgqZHdQdHJCKyspOwogfQogCi12b2lkIEFkZFJvdW5kS2V5KEJZVEUgKmtleSwgaW50IHJvdW5kKQordm9pZCBBZGRSb3VuZEtleSh1bnNpZ25lZCBjaGFyICprZXksIGludCByb3VuZCkKIHsKLUJZVEUgc2JveF9rZXlbNF07Ci1CWVRFIHJjb25fdGFibGVbMTBdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2fTsKK3Vuc2lnbmVkIGNoYXIgc2JveF9rZXlbNF07Cit1bnNpZ25lZCBjaGFyIHJjb25fdGFibGVbMTBdID0geyAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDFiLCAweDM2fTsKIAogICAgIHNib3hfa2V5WzBdID0gc2JveF90YWJsZVtrZXlbMTNdXTsKICAgICBzYm94X2tleVsxXSA9IHNib3hfdGFibGVba2V5WzE0XV07CkBAIC0xNTAsNyArMTUwLDcgQEAKICAgICB4b3JfMzIoJmtleVsxMl0sICZrZXlbOF0sICZrZXlbMTJdKTsKIH0KIAotdm9pZCBTdWJCeXRlcyhCWVRFICppbiwgQllURSAqb3V0KQordm9pZCBTdWJCeXRlcyh1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQogewogaW50IGk7CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgIH0KIH0KIAotdm9pZCBTaGlmdFJvd3MoQllURSAqaW4sIEJZVEUgKm91dCkKK3ZvaWQgU2hpZnRSb3dzKHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCiB7CiAgICAgb3V0WzBdICA9IGluWzBdOwogICAgIG91dFsxXSAgPSBpbls1XTsKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgIG91dFsxNV0gPSBpblsxMV07CiB9CiAKLXZvaWQgTWl4Q29sdW1ucyhCWVRFICppbiwgQllURSAqb3V0KQordm9pZCBNaXhDb2x1bW5zKHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQpCiB7CiAKICAgICBvdXRbMF0gPSBkb3QyX3RhYmxlW2luWzBdXSBeIGRvdDNfdGFibGVbaW5bMV1dIF4gaW5bMl0gXiBpblszXTsKQEAgLTE5MCwxMyArMTkwLDEzIEBACiB9CiAKIAotdm9pZCBBRVN2MTI4KEJZVEUgKmtleSwgQllURSAqZGF0YSwgQllURSAqY2lwaGVydGV4dCkKK3ZvaWQgQUVTdjEyOCh1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQpCiB7CiBpbnQgIGk7CiBpbnQgIHJvdW5kOwotQllURSBUbXBkYXRhQVsxNl07Ci1CWVRFIFRtcGRhdGFCWzE2XTsKLUJZVEUgYWJ5Um91bmRLZXlbMTZdOwordW5zaWduZWQgY2hhciBUbXBkYXRhQVsxNl07Cit1bnNpZ25lZCBjaGFyIFRtcGRhdGFCWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Um91bmRLZXlbMTZdOwogCiAgICAgZm9yKGk9MDsgaTwxNjsgaSsrKQogICAgICAgICBhYnlSb3VuZEtleVtpXSA9IGtleVtpXTsKQEAgLTI0MywzMyArMjQzLDMzIEBACiAgKiBSZXR1cm4gVmFsdWU6IE1JQyBjb21wYXJlIHJlc3VsdAogICoKICAqLwotQk9PTCBBRVNiR2VuQ0NNUChQQllURSBwYnlSeEtleSwgUEJZVEUgcGJ5RnJhbWUsIFdPUkQgd0ZyYW1lU2l6ZSkKK2Jvb2wgQUVTYkdlbkNDTVAodW5zaWduZWQgY2hhciAqcGJ5UnhLZXksIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLCB1bnNpZ25lZCBzaG9ydCB3RnJhbWVTaXplKQogewotQllURSAgICAgICAgICAgIGFieU5vbmNlWzEzXTsKLUJZVEUgICAgICAgICAgICBNSUNfSVZbMTZdOwotQllURSAgICAgICAgICAgIE1JQ19IRFIxWzE2XTsKLUJZVEUgICAgICAgICAgICBNSUNfSERSMlsxNl07Ci1CWVRFICAgICAgICAgICAgYWJ5TUlDWzE2XTsKLUJZVEUgICAgICAgICAgICBhYnlDVFJQTERbMTZdOwotQllURSAgICAgICAgICAgIGFieVRtcFsxNl07Ci1CWVRFICAgICAgICAgICAgYWJ5UGxhaW5UZXh0WzE2XTsKLUJZVEUgICAgICAgICAgICBhYnlMYXN0Q2lwaGVyWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Tm9uY2VbMTNdOwordW5zaWduZWQgY2hhciBNSUNfSVZbMTZdOwordW5zaWduZWQgY2hhciBNSUNfSERSMVsxNl07Cit1bnNpZ25lZCBjaGFyIE1JQ19IRFIyWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5TUlDWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5Q1RSUExEWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5VG1wWzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5UGxhaW5UZXh0WzE2XTsKK3Vuc2lnbmVkIGNoYXIgYWJ5TGFzdENpcGhlclsxNl07CiAKIFBTODAyXzExSGVhZGVyICBwTUFDSGVhZGVyID0gKFBTODAyXzExSGVhZGVyKSBwYnlGcmFtZTsKLVBCWVRFICAgICAgICAgICBwYnlJVjsKLVBCWVRFICAgICAgICAgICBwYnlQYXlsb2FkOwotV09SRCAgICAgICAgICAgIHdITGVuID0gMjI7Ci1XT1JEICAgICAgICAgICAgd1BheWxvYWRTaXplID0gd0ZyYW1lU2l6ZSAtIDggLSA4IC0gNCAtIFdMQU5fSERSX0FERFIzX0xFTjsvLzggaXMgSVYsIDggaXMgTUlDLCA0IGlzIENSQwotQk9PTCAgICAgICAgICAgIGJBNCA9IEZBTFNFOwotQllURSAgICAgICAgICAgIGJ5VG1wOwotV09SRCAgICAgICAgICAgIHdDbnQ7Cit1bnNpZ25lZCBjaGFyICpwYnlJVjsKK3Vuc2lnbmVkIGNoYXIgKnBieVBheWxvYWQ7Cit1bnNpZ25lZCBzaG9ydCB3SExlbiA9IDIyOwordW5zaWduZWQgc2hvcnQgd1BheWxvYWRTaXplID0gd0ZyYW1lU2l6ZSAtIDggLSA4IC0gNCAtIFdMQU5fSERSX0FERFIzX0xFTjsvLzggaXMgSVYsIDggaXMgTUlDLCA0IGlzIENSQworYm9vbCBiQTQgPSBmYWxzZTsKK3Vuc2lnbmVkIGNoYXIgYnlUbXA7Cit1bnNpZ25lZCBzaG9ydCB3Q250OwogaW50ICAgICAgICAgICAgIGlpLGpqLGtrOwogCiAKICAgICBwYnlJViA9IHBieUZyYW1lICsgV0xBTl9IRFJfQUREUjNfTEVOOwotICAgIGlmICggV0xBTl9HRVRfRkNfVE9EUygqKFBXT1JEKXBieUZyYW1lKSAmJgotICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCooUFdPUkQpcGJ5RnJhbWUpICkgewotICAgICAgICAgYkE0ID0gVFJVRTsKKyAgICBpZiAoIFdMQU5fR0VUX0ZDX1RPRFMoKih1bnNpZ25lZCBzaG9ydCAqKXBieUZyYW1lKSAmJgorICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCoodW5zaWduZWQgc2hvcnQgKilwYnlGcmFtZSkgKSB7CisgICAgICAgICBiQTQgPSB0cnVlOwogICAgICAgICAgcGJ5SVYgKz0gNjsgICAgICAgICAgICAgLy8gNiBpcyA4MDIuMTEgYWRkcmVzczQKICAgICAgICAgIHdITGVuICs9IDY7CiAgICAgICAgICB3UGF5bG9hZFNpemUgLT0gNjsKQEAgLTI4OCwxNSArMjg4LDE1IEBACiAgICAgLy9NSUNfSVYKICAgICBNSUNfSVZbMF0gPSAweDU5OwogICAgIG1lbWNweSgmKE1JQ19JVlsxXSksICYoYWJ5Tm9uY2VbMF0pLCAxMyk7Ci0gICAgTUlDX0lWWzE0XSA9IChCWVRFKSh3UGF5bG9hZFNpemUgPj4gOCk7Ci0gICAgTUlDX0lWWzE1XSA9IChCWVRFKSh3UGF5bG9hZFNpemUgJiAweGZmKTsKKyAgICBNSUNfSVZbMTRdID0gKHVuc2lnbmVkIGNoYXIpKHdQYXlsb2FkU2l6ZSA+PiA4KTsKKyAgICBNSUNfSVZbMTVdID0gKHVuc2lnbmVkIGNoYXIpKHdQYXlsb2FkU2l6ZSAmIDB4ZmYpOwogCiAgICAgLy9NSUNfSERSMQotICAgIE1JQ19IRFIxWzBdID0gKEJZVEUpKHdITGVuID4+IDgpOwotICAgIE1JQ19IRFIxWzFdID0gKEJZVEUpKHdITGVuICYgMHhmZik7Ci0gICAgYnlUbXAgPSAoQllURSkocE1BQ0hlYWRlci0+d0ZyYW1lQ3RsICYgMHhmZik7CisgICAgTUlDX0hEUjFbMF0gPSAodW5zaWduZWQgY2hhcikod0hMZW4gPj4gOCk7CisgICAgTUlDX0hEUjFbMV0gPSAodW5zaWduZWQgY2hhcikod0hMZW4gJiAweGZmKTsKKyAgICBieVRtcCA9ICh1bnNpZ25lZCBjaGFyKShwTUFDSGVhZGVyLT53RnJhbWVDdGwgJiAweGZmKTsKICAgICBNSUNfSERSMVsyXSA9IGJ5VG1wICYgMHg4ZjsKLSAgICBieVRtcCA9IChCWVRFKShwTUFDSGVhZGVyLT53RnJhbWVDdGwgPj4gOCk7CisgICAgYnlUbXAgPSAodW5zaWduZWQgY2hhcikocE1BQ0hlYWRlci0+d0ZyYW1lQ3RsID4+IDgpOwogICAgIGJ5VG1wICY9IDB4ODc7CiAgICAgTUlDX0hEUjFbM10gPSBieVRtcCB8IDB4NDA7CiAgICAgbWVtY3B5KCYoTUlDX0hEUjFbNF0pLCBwTUFDSGVhZGVyLT5hYnlBZGRyMSwgRVRIX0FMRU4pOwpAQCAtMzA0LDcgKzMwNCw3IEBACiAKICAgICAvL01JQ19IRFIyCiAgICAgbWVtY3B5KCYoTUlDX0hEUjJbMF0pLCBwTUFDSGVhZGVyLT5hYnlBZGRyMywgRVRIX0FMRU4pOwotICAgIGJ5VG1wID0gKEJZVEUpKHBNQUNIZWFkZXItPndTZXFDdGwgJiAweGZmKTsKKyAgICBieVRtcCA9ICh1bnNpZ25lZCBjaGFyKShwTUFDSGVhZGVyLT53U2VxQ3RsICYgMHhmZik7CiAgICAgTUlDX0hEUjJbNl0gPSBieVRtcCAmIDB4MGY7CiAgICAgTUlDX0hEUjJbN10gPSAwOwogICAgIGlmICggYkE0ICkgewpAQCAtMzM3LDggKzMzNyw4IEBACiAKICAgICBmb3Ioamo9d1BheWxvYWRTaXplOyBqaj4xNjsgamo9amotMTYpIHsKIAotICAgICAgICBhYnlDVFJQTERbMTRdID0gKEJZVEUpICh3Q250ID4+IDgpOwotICAgICAgICBhYnlDVFJQTERbMTVdID0gKEJZVEUpICh3Q250ICYgMHhmZik7CisgICAgICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgICAgIGFieUNUUlBMRFsxNV0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgJiAweGZmKTsKIAogICAgICAgICBBRVN2MTI4KHBieVJ4S2V5LGFieUNUUlBMRCxhYnlUbXApOwogCkBAIC0zNjEsOCArMzYxLDggQEAKICAgICAgICAgYWJ5TGFzdENpcGhlcltpaV0gPSAweDAwOwogICAgIH0KIAotICAgIGFieUNUUlBMRFsxNF0gPSAoQllURSkgKHdDbnQgPj4gOCk7Ci0gICAgYWJ5Q1RSUExEWzE1XSA9IChCWVRFKSAod0NudCAmIDB4ZmYpOworICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgYWJ5Q1RSUExEWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAod0NudCAmIDB4ZmYpOwogCiAgICAgQUVTdjEyOChwYnlSeEtleSxhYnlDVFJQTEQsYWJ5VG1wKTsKICAgICBmb3IgKCBraz0wOyBrazwxNjsga2srKyApIHsKQEAgLTM4NCw4ICszODQsOCBAQAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIHdDbnQgPSAwOwotICAgIGFieUNUUlBMRFsxNF0gPSAoQllURSkgKHdDbnQgPj4gOCk7Ci0gICAgYWJ5Q1RSUExEWzE1XSA9IChCWVRFKSAod0NudCAmIDB4ZmYpOworICAgIGFieUNUUlBMRFsxNF0gPSAodW5zaWduZWQgY2hhcikgKHdDbnQgPj4gOCk7CisgICAgYWJ5Q1RSUExEWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAod0NudCAmIDB4ZmYpOwogICAgIEFFU3YxMjgocGJ5UnhLZXksYWJ5Q1RSUExELGFieVRtcCk7CiAgICAgZm9yICgga2s9MDsga2s8ODsga2srKyApIHsKICAgICAgICAgYWJ5VG1wW2trXSA9IGFieVRtcFtra10gXiBwYnlQYXlsb2FkW2trXTsKQEAgLTM5NCw5ICszOTQsOSBAQAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGlmICggIW1lbWNtcChhYnlNSUMsYWJ5VG1wLDgpICkgewotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Flc19jY21wLmgKaW5kZXggZjJiYTFkNS4uYzhiMjhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9hZXNfY2NtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYWVzX2NjbXAuaApAQCAtNDEsNiArNDEsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLUJPT0wgQUVTYkdlbkNDTVAoUEJZVEUgcGJ5UnhLZXksIFBCWVRFIHBieUZyYW1lLCBXT1JEIHdGcmFtZVNpemUpOworYm9vbCBBRVNiR2VuQ0NNUCh1bnNpZ25lZCBjaGFyICpwYnlSeEtleSwgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsIHVuc2lnbmVkIHNob3J0IHdGcmFtZVNpemUpOwogCiAjZW5kaWYgLy9fX0FFU19IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuYwppbmRleCA1NDE0YzZjLi4xZTFjNmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5jCkBAIC03OSw3ICs3OSw3IEBACiAKIAogI2RlZmluZSBDQl9WVDMyNTNfSU5JVF9GT1JfUkZNRCA0NDYKLUJZVEUgYnlWVDMyNTNJbml0VGFiX1JGTURbQ0JfVlQzMjUzX0lOSVRfRk9SX1JGTURdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0luaXRUYWJfUkZNRFtDQl9WVDMyNTNfSU5JVF9GT1JfUkZNRF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzB9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC01MjksNyArNTI5LDcgQEAKIH07CiAKICNkZWZpbmUgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfUkZNRCAyNTYKLUJZVEUgYnlWVDMyNTNCMF9SRk1EW0NCX1ZUMzI1M0IwX0lOSVRfRk9SX1JGTURdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX1JGTURbQ0JfVlQzMjUzQjBfSU5JVF9GT1JfUkZNRF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzF9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC03OTAsNyArNzkwLDcgQEAKIAogI2RlZmluZSBDQl9WVDMyNTNCMF9BR0NfRk9SX1JGTUQyOTU5IDE5NQogLy8gRm9yIFJGTUQyOTU5Ci1CWVRFIGJ5VlQzMjUzQjBfQUdDNF9SRk1EMjk1OVtDQl9WVDMyNTNCMF9BR0NfRk9SX1JGTUQyOTU5XVsyXSA9IHsKK3Vuc2lnbmVkIGNoYXIgYnlWVDMyNTNCMF9BR0M0X1JGTUQyOTU5W0NCX1ZUMzI1M0IwX0FHQ19GT1JfUkZNRDI5NTldWzJdID0gewogICAgIHsweEYwLCAweDAwfSwKICAgICB7MHhGMSwgMHgzRX0sCiAgICAgezB4RjAsIDB4ODB9LApAQCAtOTkwLDcgKzk5MCw3IEBACiAKICNkZWZpbmUgQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMCAyNTYKIC8vIEZvciBBSVJPSEEKLUJZVEUgYnlWVDMyNTNCMF9BSVJPSEEyMjMwW0NCX1ZUMzI1M0IwX0lOSVRfRk9SX0FJUk9IQTIyMzBdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX0FJUk9IQTIyMzBbQ0JfVlQzMjUzQjBfSU5JVF9GT1JfQUlST0hBMjIzMF1bMl0gPSB7CiAgICAgezB4MDAsIDB4MzF9LAogICAgIHsweDAxLCAweDAwfSwKICAgICB7MHgwMiwgMHgwMH0sCkBAIC0xMjU0LDcgKzEyNTQsNyBAQAogCiAjZGVmaW5lIENCX1ZUMzI1M0IwX0lOSVRfRk9SX1VXMjQ1MSAyNTYKIC8vRm9yIFVXMjQ1MQotQllURSBieVZUMzI1M0IwX1VXMjQ1MVtDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTFdWzJdID0gewordW5zaWduZWQgY2hhciBieVZUMzI1M0IwX1VXMjQ1MVtDQl9WVDMyNTNCMF9JTklUX0ZPUl9VVzI0NTFdWzJdID0gewogICAgIHsweDAwLCAweDMxfSwKICAgICB7MHgwMSwgMHgwMH0sCiAgICAgezB4MDIsIDB4MDB9LApAQCAtMTUxNiw3ICsxNTE2LDcgQEAKIAogI2RlZmluZSBDQl9WVDMyNTNCMF9BR0MgMTkzCiAvLyBGb3IgQUlST0hBCi1CWVRFIGJ5VlQzMjUzQjBfQUdDW0NCX1ZUMzI1M0IwX0FHQ11bMl0gPSB7Cit1bnNpZ25lZCBjaGFyIGJ5VlQzMjUzQjBfQUdDW0NCX1ZUMzI1M0IwX0FHQ11bMl0gPSB7CiAgICAgezB4RjAsIDB4MDB9LAogICAgIHsweEYxLCAweDAwfSwKICAgICB7MHhGMCwgMHg4MH0sCkBAIC0xNzEyLDE0ICsxNzEyLDE0IEBACiAgICAgezB4RjAsIDB4MDB9LAogfTsKIAotY29uc3QgV09SRCBhd2NGcmFtZVRpbWVbTUFYX1JBVEVdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IGF3Y0ZyYW1lVGltZVtNQVhfUkFURV0gPQogezEwLCAyMCwgNTUsIDExMCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxNDQsIDE5MiwgMjE2fTsKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMKLVVMT05HCit1bnNpZ25lZCBsb25nCiBzX3VsR2V0UmF0aW8oUFNEZXZpY2UgcERldmljZSk7CiAKIHN0YXRpYwpAQCAtMTc0MCwxMyArMTc0MCwxMyBAQAogI2VuZGlmCiAgICAgaWYgKCBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbCA9PSAwKSB7CiAgICAgICAgIHBEZXZpY2UtPmR3UnhBbnRlbm5hU2VsPTE7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gdHJ1ZSkKICAgICAgICAgICAgIEJCdlNldFJ4QW50ZW5uYU1vZGUocERldmljZS0+UG9ydE9mZnNldCwgQU5UX0EpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBCQnZTZXRSeEFudGVubmFNb2RlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEFOVF9CKTsKICAgICB9IGVsc2UgewogICAgICAgICBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbD0wOwotICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJUeFJ4QW50SW52ID09IHRydWUpCiAgICAgICAgICAgICBCQnZTZXRSeEFudGVubmFNb2RlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEFOVF9CKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQkJ2U2V0UnhBbnRlbm5hTW9kZShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBBTlRfQSk7CkBAIC0xNzc2LDE5ICsxNzc2LDE5IEBACiAgKiBSZXR1cm4gVmFsdWU6IEZyYW1lVGltZQogICoKICAqLwotVUlOVAordW5zaWduZWQgaW50CiBCQnVHZXRGcmFtZVRpbWUgKAotICAgIEJZVEUgYnlQcmVhbWJsZVR5cGUsCi0gICAgQllURSBieVBrdFR5cGUsCi0gICAgVUlOVCBjYkZyYW1lTGVuZ3RoLAotICAgIFdPUkQgd1JhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UHJlYW1ibGVUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIHVuc2lnbmVkIHNob3J0IHdSYXRlCiAgICAgKQogewotICAgIFVJTlQgdUZyYW1lVGltZTsKLSAgICBVSU5UIHVQcmVhbWJsZTsKLSAgICBVSU5UIHVUbXA7Ci0gICAgVUlOVCB1UmF0ZUlkeCA9IChVSU5UKXdSYXRlOwotICAgIFVJTlQgdVJhdGUgPSAwOworICAgIHVuc2lnbmVkIGludCB1RnJhbWVUaW1lOworICAgIHVuc2lnbmVkIGludCB1UHJlYW1ibGU7CisgICAgdW5zaWduZWQgaW50IHVUbXA7CisgICAgdW5zaWduZWQgaW50IHVSYXRlSWR4ID0gKHVuc2lnbmVkIGludCkgd1JhdGU7CisgICAgdW5zaWduZWQgaW50IHVSYXRlID0gMDsKIAogCiAgICAgaWYgKHVSYXRlSWR4ID4gUkFURV81NE0pIHsKQEAgLTE3OTYsNyArMTc5Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHVSYXRlID0gKFVJTlQpYXdjRnJhbWVUaW1lW3VSYXRlSWR4XTsKKyAgICB1UmF0ZSA9ICh1bnNpZ25lZCBpbnQpIGF3Y0ZyYW1lVGltZVt1UmF0ZUlkeF07CiAKICAgICBpZiAodVJhdGVJZHggPD0gMykgeyAgICAgICAgICAvL0NDSyBtb2RlCiAKQEAgLTE4NDYsMjMgKzE4NDYsMjMgQEAKIHZvaWQKIEJCdkNhY3VsYXRlUGFyYW1ldGVyICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFVJTlQgY2JGcmFtZUxlbmd0aCwKLSAgICBXT1JEIHdSYXRlLAotICAgIEJZVEUgYnlQYWNrZXRUeXBlLAotICAgIFBXT1JEIHB3UGh5TGVuLAotICAgIFBCWVRFIHBieVBoeVNydiwKLSAgICBQQllURSBwYnlQaHlTZ24KKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGFja2V0VHlwZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdQaHlMZW4sCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UGh5U3J2LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVBoeVNnbgogICAgICkKIHsKLSAgICBVSU5UIGNiQml0Q291bnQ7Ci0gICAgVUlOVCBjYlVzQ291bnQgPSAwOwotICAgIFVJTlQgY2JUbXA7Ci0gICAgQk9PTCBiRXh0Qml0OwotICAgIEJZVEUgYnlQcmVhbWJsZVR5cGUgPSBwRGV2aWNlLT5ieVByZWFtYmxlVHlwZTsKLSAgICBCT09MIGJDQ0sgPSBwRGV2aWNlLT5iQ0NLOworICAgIHVuc2lnbmVkIGludCBjYkJpdENvdW50OworICAgIHVuc2lnbmVkIGludCBjYlVzQ291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCBjYlRtcDsKKyAgICBib29sIGJFeHRCaXQ7CisgICAgdW5zaWduZWQgY2hhciBieVByZWFtYmxlVHlwZSA9IHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlOworICAgIGJvb2wgYkNDSyA9IHBEZXZpY2UtPmJDQ0s7CiAKICAgICBjYkJpdENvdW50ID0gY2JGcmFtZUxlbmd0aCAqIDg7Ci0gICAgYkV4dEJpdCA9IEZBTFNFOworICAgIGJFeHRCaXQgPSBmYWxzZTsKIAogICAgIHN3aXRjaCAod1JhdGUpIHsKICAgICBjYXNlIFJBVEVfMU0gOgpAQCAtMTg3OSw3ICsxODc5LDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFJBVEVfNU0gOgotICAgICAgICBpZiAoYkNDSyA9PSBGQUxTRSkKKyAgICAgICAgaWYgKGJDQ0sgPT0gZmFsc2UpCiAgICAgICAgICAgICBjYkJpdENvdW50ICsrOwogICAgICAgICBjYlVzQ291bnQgPSAoY2JCaXRDb3VudCAqIDEwKSAvIDU1OwogICAgICAgICBjYlRtcCA9IChjYlVzQ291bnQgKiA1NSkgLyAxMDsKQEAgLTE4OTMsMTQgKzE4OTMsMTQgQEAKIAogICAgIGNhc2UgUkFURV8xMU0gOgogCi0gICAgICAgIGlmIChiQ0NLID09IEZBTFNFKQorICAgICAgICBpZiAoYkNDSyA9PSBmYWxzZSkKICAgICAgICAgICAgIGNiQml0Q291bnQgKys7CiAgICAgICAgIGNiVXNDb3VudCA9IGNiQml0Q291bnQgLyAxMTsKICAgICAgICAgY2JUbXAgPSBjYlVzQ291bnQgKiAxMTsKICAgICAgICAgaWYgKGNiVG1wICE9IGNiQml0Q291bnQpIHsKICAgICAgICAgICAgIGNiVXNDb3VudCArKzsKICAgICAgICAgICAgIGlmICgoY2JCaXRDb3VudCAtIGNiVG1wKSA8PSAzKQotICAgICAgICAgICAgICAgIGJFeHRCaXQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJFeHRCaXQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChieVByZWFtYmxlVHlwZSA9PSAxKQogICAgICAgICAgICAgKnBieVBoeVNnbiA9IDB4MGI7CkBAIC0xOTk0LDExICsxOTk0LDExIEBACiAgICAgICAgICpwYnlQaHlTcnYgPSAweDAwOwogICAgICAgICBpZiAoYkV4dEJpdCkKICAgICAgICAgICAgICpwYnlQaHlTcnYgPSAqcGJ5UGh5U3J2IHwgMHg4MDsKLSAgICAgICAgKnB3UGh5TGVuID0gKFdPUkQpY2JVc0NvdW50OworICAgICAgICAqcHdQaHlMZW4gPSAodW5zaWduZWQgc2hvcnQpY2JVc0NvdW50OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgKnBieVBoeVNydiA9IDB4MDA7Ci0gICAgICAgICpwd1BoeUxlbiA9IChXT1JEKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICpwd1BoeUxlbiA9ICh1bnNpZ25lZCBzaG9ydCljYkZyYW1lTGVuZ3RoOwogICAgIH0KIH0KIApAQCAtMjAxMiwxMyArMjAxMiwxMyBAQAogICogIE91dDoKICAqICAgICAgcGJ5RGF0YSAgICAgLSBkYXRhIHJlYWQKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIEJCYlJlYWRFbWJlZGVkIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIFBCWVRFIHBieURhdGEpCitib29sIEJCYlJlYWRFbWJlZGVkICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5QkJBZGRyLCB1bnNpZ25lZCBjaGFyICpwYnlEYXRhKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieVZhbHVlOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlWYWx1ZTsKIAogICAgIC8vIEJCIHJlZyBvZmZzZXQKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0JCUkVHQURSLCBieUJCQWRkcik7CkBAIC0yMDM4LDkgKzIwMzgsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgzMCk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMClcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMjA1NSwxMyArMjA1NSwxMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgQkJiV3JpdGVFbWJlZGVkIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlEYXRhKQorYm9vbCBCQmJXcml0ZUVtYmVkZWQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieVZhbHVlOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlWYWx1ZTsKIAogICAgIC8vIEJCIHJlZyBvZmZzZXQKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0JCUkVHQURSLCBieUJCQWRkcik7CkBAIC0yMDgwLDkgKzIwODAsOSBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgzMSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMSlcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMjA5NywxMiArMjA5NywxMiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBhbGwgVGVzdEJpdHMgYXJlIHNldDsgRkFMU0Ugb3RoZXJ3aXNlLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCBUZXN0Qml0cyBhcmUgc2V0OyBmYWxzZSBvdGhlcndpc2UuCiAgKgogICovCi1CT09MIEJCYklzUmVnQml0c09uIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlUZXN0Qml0cykKK2Jvb2wgQkJiSXNSZWdCaXRzT24gKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCBieUJCQWRkciwgJmJ5T3JnRGF0YSk7CiAgICAgcmV0dXJuIChieU9yZ0RhdGEgJiBieVRlc3RCaXRzKSA9PSBieVRlc3RCaXRzOwpAQCAtMjEyMCwxMiArMjEyMCwxMiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBhbGwgVGVzdEJpdHMgYXJlIGNsZWFyOyBGQUxTRSBvdGhlcndpc2UuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgYWxsIFRlc3RCaXRzIGFyZSBjbGVhcjsgZmFsc2Ugb3RoZXJ3aXNlLgogICoKICAqLwotQk9PTCBCQmJJc1JlZ0JpdHNPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUJCQWRkciwgQllURSBieVRlc3RCaXRzKQorYm9vbCBCQmJJc1JlZ0JpdHNPZmYgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCBieUJCQWRkciwgJmJ5T3JnRGF0YSk7CiAgICAgcmV0dXJuIChieU9yZ0RhdGEgJiBieVRlc3RCaXRzKSA9PSAwOwpAQCAtMjE0MiwxNyArMjE0MiwxNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIAotQk9PTCBCQmJWVDMyNTNJbml0IChQU0RldmljZSBwRGV2aWNlKQorYm9vbCBCQmJWVDMyNTNJbml0IChQU0RldmljZSBwRGV2aWNlKQogewotICAgIEJPT0wgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKICAgICBpbnQgICAgICAgIGlpOwotICAgIERXT1JEX1BUUiAgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OwotICAgIEJZVEUgICAgICAgYnlSRlR5cGUgPSBwRGV2aWNlLT5ieVJGVHlwZTsKLSAgICBCWVRFICAgICAgIGJ5TG9jYWxJRCA9IHBEZXZpY2UtPmJ5TG9jYWxJRDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlID0gcERldmljZS0+YnlSRlR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQgPSBwRGV2aWNlLT5ieUxvY2FsSUQ7CiAKICAgICBpZiAoYnlSRlR5cGUgPT0gUkZfUkZNRDI5NTkpIHsKICAgICAgICAgaWYgKGJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB7CkBAIC0yMjk0LDcgKzIyOTQsNyBAQAogICAgIC8vfX0gUm9iZXJ0WXUKICAgICB9IGVsc2UgewogICAgIAkvLyBObyBWR0EgVGFibGUgbm93Ci0gICAgCXBEZXZpY2UtPmJVcGRhdGVCQlZHQSA9IEZBTFNFOworICAgIAlwRGV2aWNlLT5iVXBkYXRlQkJWR0EgPSBmYWxzZTsKICAgICAgICAgcERldmljZS0+YWJ5QkJWR0FbMF0gPSAweDFDOwogICAgIH0KIApAQCAtMjMyMSwxMiArMjMyMSwxMiBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIEJCdlJlYWRBbGxSZWdzIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUJCUmVncykKK3ZvaWQgQkJ2UmVhZEFsbFJlZ3MgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUJCUmVncykKIHsKICAgICBpbnQgIGlpOwotICAgIEJZVEUgYnlCYXNlID0gMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QmFzZSA9IDE7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgQkJfTUFYX0NPTlRFWFRfU0laRTsgaWkrKykgewotICAgICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgKEJZVEUpKGlpKmJ5QmFzZSksIHBieUJCUmVncyk7CisgICAgICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAodW5zaWduZWQgY2hhcikoaWkqYnlCYXNlKSwgcGJ5QkJSZWdzKTsKICAgICAgICAgcGJ5QkJSZWdzICs9IGJ5QmFzZTsKICAgICB9CiB9CkBAIC0yMzQ4LDggKzIzNDgsOCBAQAogCiB2b2lkIEJCdkxvb3BiYWNrT24gKFBTRGV2aWNlIHBEZXZpY2UpCiB7Ci0gICAgQllURSAgICAgIGJ5RGF0YTsKLSAgICBEV09SRF9QVFIgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOworICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UgPSBwRGV2aWNlLT5Qb3J0T2Zmc2V0OwogCiAgICAgLy9DUiBDOSA9IDB4MDAKICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHhDOSwgJnBEZXZpY2UtPmJ5QkJDUmM5KTsvL0NSMjAxCkBAIC0yMzYzLDcgKzIzNjMsNyBAQAogICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPD0gUkFURV8xMU0pIHsgLy9DQ0sKICAgICAgICAgLy8gRW5hYmxlIGludGVybmFsIGRpZ2l0YWwgbG9vcGJhY2s6IENSMzMgfD0gMDAwMCAwMDAxCiAgICAgICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAweDIxLCAmYnlEYXRhKTsvL0NSMzMKLSAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDIxLCAoQllURSkoYnlEYXRhIHwgMHgwMSkpOy8vQ1IzMworICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDAxKSk7Ly9DUjMzCiAgICAgICAgIC8vIENSMTU0ID0gMHgwMAogICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsIDApOyAgIC8vQ1IxNTQKIApAQCAtMjM3Miw3ICsyMzcyLDcgQEAKICAgICBlbHNlIHsgLy9PRkRNCiAgICAgICAgIC8vIEVuYWJsZSBpbnRlcm5hbCBkaWdpdGFsIGxvb3BiYWNrOkNSMTU0IHw9IDAwMDAgMDAwMQogICAgICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHg5QSwgJmJ5RGF0YSk7Ly9DUjE1NAotICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsIChCWVRFKShieURhdGEgfCAweDAxKSk7Ly9DUjE1NAorICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDAxKSk7Ly9DUjE1NAogICAgICAgICAvLyBDUjMzID0gMHgwMAogICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsIDApOyAgIC8vQ1IzMwogCkBAIC0yMzg0LDcgKzIzODQsNyBAQAogCiAgICAgLy8gRGlzYWJsZSBUWF9JUVVOCiAgICAgQkJiUmVhZEVtYmVkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwOSwgJnBEZXZpY2UtPmJ5QkJDUjA5KTsKLSAgICBCQmJXcml0ZUVtYmVkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHgwOSwgKEJZVEUpKHBEZXZpY2UtPmJ5QkJDUjA5ICYgMHhERSkpOworICAgIEJCYldyaXRlRW1iZWRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDA5LCAodW5zaWduZWQgY2hhcikocERldmljZS0+YnlCQkNSMDkgJiAweERFKSk7CiB9CiAKIC8qCkBAIC0yNDAyLDggKzI0MDIsOCBAQAogICovCiB2b2lkIEJCdkxvb3BiYWNrT2ZmIChQU0RldmljZSBwRGV2aWNlKQogewotICAgIEJZVEUgICAgICBieURhdGE7Ci0gICAgRFdPUkRfUFRSIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlID0gcERldmljZS0+UG9ydE9mZnNldDsKIAogICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHhDOSwgcERldmljZS0+YnlCQkNSYzkpOy8vQ1IyMDEKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4ODgsIHBEZXZpY2UtPmJ5QkJDUjg4KTsvL0NSMTM2CkBAIC0yNDEzLDE0ICsyNDEzLDE0IEBACiAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA8PSBSQVRFXzExTSkgeyAvLyBDQ0sKICAgICAgICAgLy8gU2V0IHRoZSBDUjMzIEJpdDIgdG8gZGlzYWJsZSBpbnRlcm5hbCBMb29wYmFjay4KICAgICAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsICZieURhdGEpOy8vQ1IzMwotICAgICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MjEsIChCWVRFKShieURhdGEgJiAweEZFKSk7Ly9DUjMzCisgICAgICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHgyMSwgKHVuc2lnbmVkIGNoYXIpKGJ5RGF0YSAmIDB4RkUpKTsvL0NSMzMKICAgICB9CiAgICAgZWxzZSB7IC8vIE9GRE0KICAgICAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4OUEsICZieURhdGEpOy8vQ1IxNTQKLSAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDlBLCAoQllURSkoYnlEYXRhICYgMHhGRSkpOy8vQ1IxNTQKKyAgICAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDlBLCAodW5zaWduZWQgY2hhcikoYnlEYXRhICYgMHhGRSkpOy8vQ1IxNTQKICAgICB9CiAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MEUsICZieURhdGEpOy8vQ1IxNAotICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHgwRSwgKEJZVEUpKGJ5RGF0YSB8IDB4ODApKTsvL0NSMTQKKyAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEUsICh1bnNpZ25lZCBjaGFyKShieURhdGEgfCAweDgwKSk7Ly9DUjE0CiAKIH0KIApAQCAtMjQ0MSw4ICsyNDQxLDggQEAKIHZvaWQKIEJCdlNldFNob3J0U2xvdFRpbWUgKFBTRGV2aWNlIHBEZXZpY2UpCiB7Ci0gICAgQllURSBieUJCUnhDb25mPTA7Ci0gICAgQllURSBieUJCVkdBPTA7CisgICAgdW5zaWduZWQgY2hhciBieUJCUnhDb25mPTA7CisgICAgdW5zaWduZWQgY2hhciBieUJCVkdBPTA7CiAKICAgICBCQmJSZWFkRW1iZWRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDBBLCAmYnlCQlJ4Q29uZik7Ly9DUjEwCiAKQEAgLTI0NjIsOSArMjQ2Miw5IEBACiAKIH0KIAotdm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlEYXRhKQordm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewotICAgIEJZVEUgYnlCQlJ4Q29uZj0wOworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlJ4Q29uZj0wOwogCiAgICAgQkJiV3JpdGVFbWJlZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4RTcsIGJ5RGF0YSk7CiAKQEAgLTI0OTUsNyArMjQ5NSw3IEBACiAgKgogICovCiB2b2lkCi1CQnZTb2Z0d2FyZVJlc2V0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitCQnZTb2Z0d2FyZVJlc2V0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIEJCYldyaXRlRW1iZWRlZChkd0lvQmFzZSwgMHg1MCwgMHg0MCk7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDUwLCAwKTsKQEAgLTI1MTYsOSArMjUxNiw5IEBACiAgKgogICovCiB2b2lkCi1CQnZQb3dlclNhdmVNb2RlT04gKERXT1JEX1BUUiBkd0lvQmFzZSkKK0JCdlBvd2VyU2F2ZU1vZGVPTiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIEJCYlJlYWRFbWJlZGVkKGR3SW9CYXNlLCAweDBELCAmYnlPcmdEYXRhKTsKICAgICBieU9yZ0RhdGEgfD0gQklUMDsKQEAgLTI1MzgsOSArMjUzOCw5IEBACiAgKgogICovCiB2b2lkCi1CQnZQb3dlclNhdmVNb2RlT0ZGIChEV09SRF9QVFIgZHdJb0Jhc2UpCitCQnZQb3dlclNhdmVNb2RlT0ZGICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIEJZVEUgYnlPcmdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdEYXRhOwogCiAgICAgQkJiUmVhZEVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsICZieU9yZ0RhdGEpOwogICAgIGJ5T3JnRGF0YSAmPSB+KEJJVDApOwpAQCAtMjU2Miw5ICsyNTYyLDkgQEAKICAqLwogCiB2b2lkCi1CQnZTZXRUeEFudGVubmFNb2RlIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlBbnRlbm5hTW9kZSkKK0JCdlNldFR4QW50ZW5uYU1vZGUgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hTW9kZSkKIHsKLSAgICBCWVRFIGJ5QkJUeENvbmY7CisgICAgdW5zaWduZWQgY2hhciBieUJCVHhDb25mOwogCiAjaWZkZWYJUExJQ0VfREVCVUcKIAkvL3ByaW50aygiRW50ZXIgQkJ2U2V0VHhBbnRlbm5hTW9kZVxuIik7CkBAIC0yNjA0LDkgKzI2MDQsOSBAQAogICovCiAKIHZvaWQKLUJCdlNldFJ4QW50ZW5uYU1vZGUgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUFudGVubmFNb2RlKQorQkJ2U2V0UnhBbnRlbm5hTW9kZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUFudGVubmFNb2RlKQogewotICAgIEJZVEUgYnlCQlJ4Q29uZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJSeENvbmY7CiAKICAgICBCQmJSZWFkRW1iZWRlZChkd0lvQmFzZSwgMHgwQSwgJmJ5QkJSeENvbmYpOy8vQ1IxMAogICAgIGlmIChieUFudGVubmFNb2RlID09IEFOVF9ESVZFUlNJVFkpIHsKQEAgLTI2MzUsMTQgKzI2MzUsMTQgQEAKICAqCiAgKi8KIHZvaWQKLUJCdlNldERlZXBTbGVlcCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5TG9jYWxJRCkKK0JCdlNldERlZXBTbGVlcCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDBDLCAweDE3KTsvL0NSMTIKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsIDB4QjkpOy8vQ1IxMwogfQogCiB2b2lkCi1CQnZFeGl0RGVlcFNsZWVwIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKQorQkJ2RXhpdERlZXBTbGVlcCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7CiAgICAgQkJiV3JpdGVFbWJlZGVkKGR3SW9CYXNlLCAweDBDLCAweDAwKTsvL0NSMTIKICAgICBCQmJXcml0ZUVtYmVkZWQoZHdJb0Jhc2UsIDB4MEQsIDB4MDEpOy8vQ1IxMwpAQCAtMjY1MSwxMiArMjY1MSwxMiBAQAogCiAKIHN0YXRpYwotVUxPTkcKK3Vuc2lnbmVkIGxvbmcKIHNfdWxHZXRSYXRpbyAoUFNEZXZpY2UgcERldmljZSkKIHsKLVVMT05HICAgdWxSYXRpbyA9IDA7Ci1VTE9ORyAgIHVsTWF4UGFja2V0OwotVUxPTkcgICB1bFBhY2tldE51bTsKK3Vuc2lnbmVkIGxvbmcgdWxSYXRpbyA9IDA7Cit1bnNpZ25lZCBsb25nIHVsTWF4UGFja2V0OwordW5zaWduZWQgbG9uZyB1bFBhY2tldE51bTsKIAogICAgIC8vVGhpcyBpcyBhIHRob3VzYW5kLXJhdGlvCiAgICAgdWxNYXhQYWNrZXQgPSBwRGV2aWNlLT51TnVtU1EzW1JBVEVfNTRNXTsKQEAgLTI3NjIsNyArMjc2Miw3IEBACiB2b2lkCiBCQnZDbGVhckFudERpdlNRM1ZhbHVlIChQU0RldmljZSBwRGV2aWNlKQogewotICAgIFVJTlQgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgcERldmljZS0+dURpdmVyc2l0eUNudCA9IDA7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspIHsKQEAgLTI3ODcsNyArMjc4Nyw3IEBACiAgKi8KIAogdm9pZAotQkJ2QW50ZW5uYURpdmVyc2l0eSAoUFNEZXZpY2UgcERldmljZSwgQllURSBieVJ4UmF0ZSwgQllURSBieVNRMykKK0JCdkFudGVubmFEaXZlcnNpdHkgKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsIHVuc2lnbmVkIGNoYXIgYnlTUTMpCiB7CiAKICAgICBpZiAoKGJ5UnhSYXRlID49IE1BWF9SQVRFKSB8fCAocERldmljZS0+d0FudERpdmVyc2l0eU1heFJhdGUgPj0gTUFYX1JBVEUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jhc2ViYW5kLmgKaW5kZXggYjIzNmZmNC4uODI5NGJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9iYXNlYmFuZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYmFzZWJhbmQuaApAQCAtMTE4LDQ1ICsxMTgsNDUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotVUlOVAordW5zaWduZWQgaW50CiBCQnVHZXRGcmFtZVRpbWUoCi0gICAgQllURSBieVByZWFtYmxlVHlwZSwKLSAgICBCWVRFIGJ5UGt0VHlwZSwKLSAgICBVSU5UIGNiRnJhbWVMZW5ndGgsCi0gICAgV09SRCB3UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlQcmVhbWJsZVR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUKICAgICApOwogCiB2b2lkCiBCQnZDYWN1bGF0ZVBhcmFtZXRlciAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBVSU5UIGNiRnJhbWVMZW5ndGgsCi0gICAgV09SRCB3UmF0ZSwKLSAgICBCWVRFIGJ5UGFja2V0VHlwZSwKLSAgICBQV09SRCBwd1BoeUxlbiwKLSAgICBQQllURSBwYnlQaHlTcnYsCi0gICAgUEJZVEUgcGJ5UGh5U2duCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVBhY2tldFR5cGUsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3UGh5TGVuLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVBoeVNydiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlQaHlTZ24KICAgICApOwogCi1CT09MIEJCYlJlYWRFbWJlZGVkKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUJCQWRkciwgUEJZVEUgcGJ5RGF0YSk7Ci1CT09MIEJCYldyaXRlRW1iZWRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlCQkFkZHIsIEJZVEUgYnlEYXRhKTsKK2Jvb2wgQkJiUmVhZEVtYmVkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUJCQWRkciwgdW5zaWduZWQgY2hhciAqcGJ5RGF0YSk7Citib29sIEJCYldyaXRlRW1iZWRlZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5QkJBZGRyLCB1bnNpZ25lZCBjaGFyIGJ5RGF0YSk7CiAKLXZvaWQgQkJ2UmVhZEFsbFJlZ3MoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlCQlJlZ3MpOwordm9pZCBCQnZSZWFkQWxsUmVncyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlCQlJlZ3MpOwogdm9pZCBCQnZMb29wYmFja09uKFBTRGV2aWNlIHBEZXZpY2UpOwogdm9pZCBCQnZMb29wYmFja09mZihQU0RldmljZSBwRGV2aWNlKTsKIHZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShQU0RldmljZSBwRGV2aWNlKTsKLUJPT0wgQkJiSXNSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5QkJBZGRyLCBCWVRFIGJ5VGVzdEJpdHMpOwotQk9PTCBCQmJJc1JlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5QkJBZGRyLCBCWVRFIGJ5VGVzdEJpdHMpOwotdm9pZCBCQnZTZXRWR0FHYWluT2Zmc2V0KFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlEYXRhKTsKK2Jvb2wgQkJiSXNSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUJCQWRkciwgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKK2Jvb2wgQkJiSXNSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlCQkFkZHIsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cyk7Cit2b2lkIEJCdlNldFZHQUdhaW5PZmZzZXQoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieURhdGEpOwogCiAvLyBWVDMyNTMgQmFzZWJhbmQKLUJPT0wgQkJiVlQzMjUzSW5pdChQU0RldmljZSBwRGV2aWNlKTsKLXZvaWQgQkJ2U29mdHdhcmVSZXNldChEV09SRF9QVFIgZHdJb0Jhc2UpOwotdm9pZCBCQnZQb3dlclNhdmVNb2RlT04oRFdPUkRfUFRSIGR3SW9CYXNlKTsKLXZvaWQgQkJ2UG93ZXJTYXZlTW9kZU9GRihEV09SRF9QVFIgZHdJb0Jhc2UpOwotdm9pZCBCQnZTZXRUeEFudGVubmFNb2RlKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUFudGVubmFNb2RlKTsKLXZvaWQgQkJ2U2V0UnhBbnRlbm5hTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlBbnRlbm5hTW9kZSk7Ci12b2lkIEJCdlNldERlZXBTbGVlcChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKTsKLXZvaWQgQkJ2RXhpdERlZXBTbGVlcChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKTsKK2Jvb2wgQkJiVlQzMjUzSW5pdChQU0RldmljZSBwRGV2aWNlKTsKK3ZvaWQgQkJ2U29mdHdhcmVSZXNldCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK3ZvaWQgQkJ2UG93ZXJTYXZlTW9kZU9OKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwordm9pZCBCQnZQb3dlclNhdmVNb2RlT0ZGKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwordm9pZCBCQnZTZXRUeEFudGVubmFNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hTW9kZSk7Cit2b2lkIEJCdlNldFJ4QW50ZW5uYU1vZGUodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUFudGVubmFNb2RlKTsKK3ZvaWQgQkJ2U2V0RGVlcFNsZWVwKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKK3ZvaWQgQkJ2RXhpdERlZXBTbGVlcCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7CiAKIC8vIHRpbWVyIGZvciBhbnRlbm5hIGRpdmVyc2l0eQogCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLXZvaWQgQkJ2QW50ZW5uYURpdmVyc2l0eShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5UnhSYXRlLCBCWVRFIGJ5U1EzKTsKK3ZvaWQgQkJ2QW50ZW5uYURpdmVyc2l0eShQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCB1bnNpZ25lZCBjaGFyIGJ5U1EzKTsKIHZvaWQKIEJCdkNsZWFyQW50RGl2U1EzVmFsdWUgKFBTRGV2aWNlIHBEZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmMKaW5kZXggNjMxMmE1NS4uNTdjMWNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgImJhc2ViYW5kLmgiCiAjaW5jbHVkZSAicmYuaCIKICNpbmNsdWRlICJjYXJkLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgogI2luY2x1ZGUgIm1hYy5oIgogI2luY2x1ZGUgIndwYTIuaCIKICNpbmNsdWRlICJpb3dwYS5oIgpAQCAtNzEsMTQgKzcyLDE0IEBACiAKIAogCi1jb25zdCBXT1JEICAgICAgICAgICAgIGF3SFdSZXRyeTBbNV1bNV0gPSB7Citjb25zdCB1bnNpZ25lZCBzaG9ydCBhd0hXUmV0cnkwWzVdWzVdID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV8xOE0sIFJBVEVfMThNLCBSQVRFXzEyTSwgUkFURV8xMk0sIFJBVEVfMTJNfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfMjRNLCBSQVRFXzI0TSwgUkFURV8xOE0sIFJBVEVfMTJNLCBSQVRFXzEyTX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSQVRFXzM2TSwgUkFURV8zNk0sIFJBVEVfMjRNLCBSQVRFXzE4TSwgUkFURV8xOE19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV80OE0sIFJBVEVfNDhNLCBSQVRFXzM2TSwgUkFURV8yNE0sIFJBVEVfMjRNfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfNTRNLCBSQVRFXzU0TSwgUkFURV80OE0sIFJBVEVfMzZNLCBSQVRFXzM2TX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwotY29uc3QgV09SRCAgICAgICAgICAgICBhd0hXUmV0cnkxWzVdWzVdID0geworY29uc3QgdW5zaWduZWQgc2hvcnQgYXdIV1JldHJ5MVs1XVs1XSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JBVEVfMThNLCBSQVRFXzE4TSwgUkFURV8xMk0sIFJBVEVfNk0sIFJBVEVfNk19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7UkFURV8yNE0sIFJBVEVfMjRNLCBSQVRFXzE4TSwgUkFURV82TSwgUkFURV82TX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtSQVRFXzM2TSwgUkFURV8zNk0sIFJBVEVfMjRNLCBSQVRFXzEyTSwgUkFURV8xMk19LApAQCAtMTI2LDI1ICsxMjcsMjUgQEAKIFBLbm93bkJTUwogQlNTcFNlYXJjaEJTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgcGJ5RGVzaXJlQlNTSUQsCi0gICAgUEJZVEUgcGJ5RGVzaXJlU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXNpcmVCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXNpcmVTU0lELAogICAgIENBUkRfUEhZX1RZUEUgIGVQaHlUeXBlCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQgPSBOVUxMOwogICAgIFBXTEFOX0lFX1NTSUQgICBwU1NJRCA9IE5VTEw7CiAgICAgUEtub3duQlNTICAgICAgIHBDdXJyQlNTID0gTlVMTDsKICAgICBQS25vd25CU1MgICAgICAgcFNlbGVjdCA9IE5VTEw7Ci1CWVRFICAgICAgICAgICAgICAgICBaZXJvQlNTSURbV0xBTl9CU1NJRF9MRU5dPXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07Ci0gICAgVUlOVCAgICAgICAgICAgIGlpID0gMDsKLS8vICAgIFVJTlQgICAgICAgICAgICBqaiA9IDA7ICAgLy9EYXZpZFdhbmcKKyAgICB1bnNpZ25lZCBjaGFyIFplcm9CU1NJRFtXTEFOX0JTU0lEX0xFTl09ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKKyAgICB1bnNpZ25lZCBpbnQgaWkgPSAwOworCiAgICAgaWYgKHBieURlc2lyZUJTU0lEICE9IE5VTEwpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJCU1NwU2VhcmNoQlNTTGlzdCBCU1NJRFslMDJYICUwMlggJTAyWC0lMDJYICUwMlggJTAyWF1cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBieURlc2lyZUJTU0lELCoocGJ5RGVzaXJlQlNTSUQrMSksKihwYnlEZXNpcmVCU1NJRCsyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKHBieURlc2lyZUJTU0lEKzMpLCoocGJ5RGVzaXJlQlNTSUQrNCksKihwYnlEZXNpcmVCU1NJRCs1KSk7Ci0gICAgICAgIGlmICgoIUlTX0JST0FEQ0FTVF9BRERSRVNTKHBieURlc2lyZUJTU0lEKSkgJiYKKyAgICAgICAgaWYgKCghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGJ5RGVzaXJlQlNTSUQpKSAmJgogCSAgICAgKG1lbWNtcChwYnlEZXNpcmVCU1NJRCwgWmVyb0JTU0lELCA2KSE9IDApKXsKICAgICAgICAgICAgIHBieUJTU0lEID0gcGJ5RGVzaXJlQlNTSUQ7CiAgICAgICAgIH0KQEAgLTE1OSwxMCArMTYwLDEwIEBACiAgICAgICAgIC8vIG1hdGNoIEJTU0lEIGZpcnN0CiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8TUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgIHBDdXJyQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKLWlmKHBEZXZpY2UtPmJMaW5rUGFzcz09RkFMU0UpIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSBGQUxTRTsKK2lmKHBEZXZpY2UtPmJMaW5rUGFzcz09ZmFsc2UpIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmICgocEN1cnJCU1MtPmJBY3RpdmUpICYmCi0gICAgICAgICAgICAgICAgKHBDdXJyQlNTLT5iU2VsZWN0ZWQgPT0gRkFMU0UpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBDdXJyQlNTLT5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CisgICAgICAgICAgICAgICAgKHBDdXJyQlNTLT5iU2VsZWN0ZWQgPT0gZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocEN1cnJCU1MtPmFieUJTU0lELCBwYnlCU1NJRCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBTU0lEICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBhcmUgc3NpZAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBTU0lELT5hYnlTU0lELApAQCAtMTcyLDcgKzE3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKSAmJiBXTEFOX0dFVF9DQVBfSU5GT19JQlNTKHBDdXJyQlNTLT53Q2FwSW5mbykpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0VTU19TVEEpICYmIFdMQU5fR0VUX0NBUF9JTkZPX0VTUyhwQ3VyckJTUy0+d0NhcEluZm8pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyQlNTLT5iU2VsZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ocEN1cnJCU1MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4MSw3ICsxODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocE1nbXQtPmVDb25maWdNb2RlID09IFdNQUNfQ09ORklHX0lCU1NfU1RBKSAmJiBXTEFOX0dFVF9DQVBfSU5GT19JQlNTKHBDdXJyQlNTLT53Q2FwSW5mbykpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwTWdtdC0+ZUNvbmZpZ01vZGUgPT0gV01BQ19DT05GSUdfRVNTX1NUQSkgJiYgV0xBTl9HRVRfQ0FQX0lORk9fRVNTKHBDdXJyQlNTLT53Q2FwSW5mbykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKHBDdXJyQlNTKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTkzLDcgKzE5NCw3IEBACiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8TUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgIHBDdXJyQlNTID0gJihwTWdtdC0+c0JTU0xpc3RbaWldKTsKIAkvLzIwMDctMDcyMS0wMTxBZGQ+YnkgTWlrZUxpdQotCSAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IEZBTFNFOworCSAgcEN1cnJCU1MtPmJTZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgIGlmIChwQ3VyckJTUy0+YkFjdGl2ZSkgewogCiAgICAgICAgICAgICAgICAgaWYgKHBTU0lEICE9IE5VTEwpIHsKQEAgLTIyNCwxOSArMjI1LDE5IEBACiAgICAgICAgICAgICAgICAgfQogLyoKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlIDwgV01BQ19BVVRIX1dQQSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocEN1cnJCU1MtPmJXUEFWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQ3VyckJTUy0+YldQQVZhbGlkID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdQQSBBUCB3aWxsIHJlamVjdCBjb25uZWN0aW9uIG9mIHN0YXRpb24gd2l0aG91dCBXUEEgZW5hYmxlLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQVBTSykpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBVmFsaWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBVmFsaWQgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRpb24gd2l0aCBXUEEgZW5hYmxlIGNhbid0IGpvaW4gTm9uV1BBIEFQLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyUFNLKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocEN1cnJCU1MtPmJXUEEyVmFsaWQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBDdXJyQlNTLT5iV1BBMlZhbGlkID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0aW9uIHdpdGggV1BBMiBlbmFibGUgY2FuJ3Qgam9pbiBOb25XUEEyIEFQLgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1Myw5ICsyNTQsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChwU2VsZWN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHBTZWxlY3QtPmJTZWxlY3RlZCA9IFRSVUU7CisgICAgICAgICAgICBwU2VsZWN0LT5iU2VsZWN0ZWQgPSB0cnVlOwogLyoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBGQUxTRSkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUm9hbWluZyA9PSBmYWxzZSkgIHsKIAkvLyAgICAgICBFaW5zbiBBZGQgQDIwMDcwOTA3CiAJCQltZW1zZXQocGJ5RGVzaXJlU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7CiAJCQltZW1jcHkocGJ5RGVzaXJlU1NJRCxwQ3VyckJTUy0+YWJ5U1NJRCxXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKSA7CkBAIC0yODMsMTggKzI4NCwxOCBAQAogdm9pZAogQlNTdkNsZWFyQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCT09MIGJLZWVwQ3VyckJTU0lECisgICAgYm9vbCBiS2VlcEN1cnJCU1NJRAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBVSU5UICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgaWYgKGJLZWVwQ3VyckJTU0lEKSB7CiAgICAgICAgICAgICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKLSAgICAgICAgICAgICAgIC8vIGJLZWVwQ3VyckJTU0lEID0gRkFMU0U7CisgICAgICAgICAgICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgeworICAgICAgICAgICAgICAgLy8gYktlZXBDdXJyQlNTSUQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzA0LDcgKzMwNSw3IEBACiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgPSBGQUxTRTsKKyAgICAgICAgcE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlID0gZmFsc2U7CiAgICAgICAgIG1lbXNldCgmcE1nbXQtPnNCU1NMaXN0W2lpXSwgMCwgc2l6ZW9mKEtub3duQlNTKSk7CiAgICAgfQogICAgIEJTU3ZDbGVhckFueUJTU0pvaW5SZWNvcmQocERldmljZSk7CkBAIC0zMjAsMjUgKzMyMSwyNSBAQAogICogICAgc2VhcmNoIEJTUyBsaXN0IGJ5IEJTU0lEICYgU1NJRCBpZiBtYXRjaGVkCiAgKgogICogUmV0dXJuIFZhbHVlOgotICogICAgVFJVRSBpZiBmb3VuZC4KKyAqICAgIHRydWUgaWYgZm91bmQuCiAgKgogLSovCiBQS25vd25CU1MKIEJTU3BBZGRySXNJbkJTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgYWJ5QlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqYWJ5QlNTSUQsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKICAgICBQS25vd25CU1MgICAgICAgcEJTU0xpc3QgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICBwQlNTTGlzdCA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7CiAgICAgICAgIGlmIChwQlNTTGlzdC0+YkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwQlNTTGlzdC0+YWJ5QlNTSUQsIGFieUJTU0lEKSkgewogLy8gICAgICAgICAgICAgICAgaWYgKHBTU0lEID09IE5VTEwpCiAvLyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBCU1NMaXN0OwogICAgICAgICAgICAgICAgIGlmIChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwQlNTTGlzdC0+YWJ5U1NJRCktPmxlbil7CkBAIC0zNjIsMTggKzM2MywxOCBAQAogICogICAgSW5zZXJ0IGEgQlNTIHNldCBpbnRvIGtub3duIEJTUyBsaXN0CiAgKgogICogUmV0dXJuIFZhbHVlOgotICogICAgVFJVRSBpZiBzdWNjZXNzLgorICogICAgdHJ1ZSBpZiBzdWNjZXNzLgogICoKIC0qLwogCi1CT09MCitib29sCiBCU1NiSW5zZXJ0VG9CU1NMaXN0ICgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBhYnlCU1NJREFkZHIsCisgICAgdW5zaWduZWQgY2hhciAqYWJ5QlNTSURBZGRyLAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAorICAgIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q2FwSW5mbywKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcFJhdGVzLApAQCAtMzgyLDggKzM4Myw4IEBACiAgICAgUFdMQU5fSUVfUlNOX0VYVCBwUlNOV1BBLAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKQogewpAQCAtMzkyLDggKzM5Myw4IEBACiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNSeE1nbXRQYWNrZXQgIHBSeFBhY2tldCA9IChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXRDb250ZXh0OwogICAgIFBLbm93bkJTUyAgICAgICBwQlNTTGlzdCA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIEJPT0wgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IGlpOworICAgIGJvb2wgYlBhcnNpbmdRdWlldCA9IGZhbHNlOwogICAgIFBXTEFOX0lFX1FVSUVUICBwUXVpZXQgPSBOVUxMOwogCiAKQEAgLTQwOCwxMCArNDA5LDEwIEBACiAKICAgICBpZiAoaWkgPT0gTUFYX0JTU19OVU0pewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJHZXQgZnJlZSBLbm93QlNTIG5vZGUgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBzYXZlIHRoZSBCU1MgaW5mbwotICAgIHBCU1NMaXN0LT5iQWN0aXZlID0gVFJVRTsKKyAgICBwQlNTTGlzdC0+YkFjdGl2ZSA9IHRydWU7CiAgICAgbWVtY3B5KCBwQlNTTGlzdC0+YWJ5QlNTSUQsIGFieUJTU0lEQWRkciwgV0xBTl9CU1NJRF9MRU4pOwogICAgIEhJRFdPUkQocEJTU0xpc3QtPnF3QlNTVGltZXN0YW1wKSA9IGNwdV90b19sZTMyKEhJRFdPUkQocXdUaW1lc3RhbXApKTsKICAgICBMT0RXT1JEKHBCU1NMaXN0LT5xd0JTU1RpbWVzdGFtcCkgPSBjcHVfdG9fbGUzMihMT0RXT1JEKHF3VGltZXN0YW1wKSk7CkBAIC00NDUsNyArNDQ2LDcgQEAKICAgICBpZiAocEJTU0xpc3QtPnVDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSA9IFBIWV9UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocEJTU0xpc3QtPnNFUlAuYkVSUEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBCU1NMaXN0LT5zRVJQLmJFUlBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUI7CkBAIC00NjEsMTYgKzQ2MiwxNiBAQAogICAgICAgICAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKICAgICAgICAgLy8gYXNzb2Mgd2l0aCBCU1MKICAgICAgICAgaWYgKHBCU1NMaXN0ID09IHBNZ210LT5wQ3VyckJTUykgewotICAgICAgICAgICAgYlBhcnNpbmdRdWlldCA9IFRSVUU7CisgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIFdQQV9DbGVhclJTTihwQlNTTGlzdCk7CiAKICAgICBpZiAocFJTTldQQSAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU05XUEEtPmxlbiArIDI7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTldQQS0+bGVuICsgMjsKIAotICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKFVJTlQpKFVMT05HX1BUUikoKFBCWVRFKXBSU05XUEEgLSBwYnlJRXMpKSkgeworICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIgKilwUlNOV1BBIC0gcGJ5SUVzKSkpIHsKICAgICAgICAgICAgIHBCU1NMaXN0LT53V1BBTGVuID0gdUxlbjsKICAgICAgICAgICAgIG1lbWNweShwQlNTTGlzdC0+YnlXUEFJRSwgcFJTTldQQSwgdUxlbik7CiAgICAgICAgICAgICBXUEFfUGFyc2VSU04ocEJTU0xpc3QsIHBSU05XUEEpOwpAQCAtNDgwLDMzICs0ODEsMzMgQEAKICAgICBXUEEyX0NsZWFyUlNOKHBCU1NMaXN0KTsKIAogICAgIGlmIChwUlNOICE9IE5VTEwpIHsKLSAgICAgICAgVUlOVCB1TGVuID0gcFJTTi0+bGVuICsgMjsKLSAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtIChVSU5UKShVTE9OR19QVFIpKChQQllURSlwUlNOIC0gcGJ5SUVzKSkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHVMZW4gPSBwUlNOLT5sZW4gKyAyOworICAgICAgICBpZiAodUxlbiA8PSAodUlFTGVuZ3RoIC0gKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGNoYXIgKilwUlNOIC0gcGJ5SUVzKSkpIHsKICAgICAgICAgICAgIHBCU1NMaXN0LT53UlNOTGVuID0gdUxlbjsKICAgICAgICAgICAgIG1lbWNweShwQlNTTGlzdC0+YnlSU05JRSwgcFJTTiwgdUxlbik7CiAgICAgICAgICAgICBXUEEydlBhcnNlUlNOKHBCU1NMaXN0LCBwUlNOKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEEyKSB8fCAocEJTU0xpc3QtPmJXUEEyVmFsaWQgPT0gVFJVRSkpIHsKKyAgICBpZiAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikgfHwgKHBCU1NMaXN0LT5iV1BBMlZhbGlkID09IHRydWUpKSB7CiAKICAgICAgICAgUFNLZXlJdGVtICBwVHJhbnNtaXRLZXkgPSBOVUxMOwotICAgICAgICBCT09MICAgICAgIGJJczgwMl8xeCA9IEZBTFNFOworICAgICAgICBib29sIGJJczgwMl8xeCA9IGZhbHNlOwogCiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHBCU1NMaXN0LT53QUtNU1NBdXRoQ291bnQ7IGlpICsrKSB7CiAgICAgICAgICAgICBpZiAocEJTU0xpc3QtPmFieUFLTVNTQXV0aFR5cGVbaWldID09IFdMQU5fMTFpX0FLTVNTXzgwMl8xWCkgewotICAgICAgICAgICAgICAgIGJJczgwMl8xeCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYklzODAyXzF4ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGJJczgwMl8xeCA9PSBUUlVFKSAmJiAocFNTSUQtPmxlbiA9PSAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQpLT5sZW4pICYmCisgICAgICAgIGlmICgoYklzODAyXzF4ID09IHRydWUpICYmIChwU1NJRC0+bGVuID09ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5RGVzaXJlU1NJRCktPmxlbikgJiYKICAgICAgICAgICAgICggIW1lbWNtcChwU1NJRC0+YWJ5U1NJRCwgKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlEZXNpcmVTU0lEKS0+YWJ5U1NJRCwgcFNTSUQtPmxlbikpKSB7CiAKICAgICAgICAgICAgIGJBZGRfUE1LSURfQ2FuZGlkYXRlKCh2b2lkICopcERldmljZSwgcEJTU0xpc3QtPmFieUJTU0lELCAmcEJTU0xpc3QtPnNSU05DYXBPYmopOwogCi0gICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKLSAgICAgICAgICAgICAgICBpZiAoKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKSB8fAotICAgICAgICAgICAgICAgICAgICAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IFRSVUUpKSB7CisgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSAmJiAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKKyAgICAgICAgICAgICAgICBpZiAoKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKSB8fAorICAgICAgICAgICAgICAgICAgICAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuU3RhdHVzVHlwZSA9IE5kaXM4MDJfMTFTdGF0dXNUeXBlX1BNS0lEX0NhbmRpZGF0ZUxpc3Q7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuVmVyc2lvbiA9IDE7CiAKQEAgLTUxOSw0NiArNTIwLDQ1IEBACiAgICAgaWYgKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgewogICAgICAgICAvLyBNb25pdGVyIGlmIFJTU0kgaXMgdG9vIHN0cm9uZy4KICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgPSAwOwotICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBSeFBhY2tldC0+dVJTU0kpLCAmcEJTU0xpc3QtPmxkQm1NQVgpOworICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKHVuc2lnbmVkIGNoYXIpKHBSeFBhY2tldC0+dVJTU0kpLCAmcEJTU0xpc3QtPmxkQm1NQVgpOwogICAgICAgICBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbMF0gPSBwQlNTTGlzdC0+bGRCbU1BWDsKICAgICAgICAgZm9yIChpaSA9IDE7IGlpIDwgUlNTSV9TVEFUX0NPVU5UOyBpaSsrKQogICAgICAgICAgICAgcEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSA9IDA7CiAgICAgfQogCiAgICAgaWYgKChwSUVfQ291bnRyeSAhPSBOVUxMKSAmJgotICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkpIHsKLSAgICAgICAgQ0FSRHZTZXRDb3VudHJ5SW5mbyhwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmVOZXR3b3JrVHlwZUluVXNlLAorICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkpIHsKKyAgICAgICAgc2V0X2NvdW50cnlfaW5mbyhwTWdtdC0+cEFkYXB0ZXIsIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSUVfQ291bnRyeSk7CiAgICAgfQogCi0gICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IFRSVUUpICYmIChwSUVfUXVpZXQgIT0gTlVMTCkpIHsKKyAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gdHJ1ZSkgJiYgKHBJRV9RdWlldCAhPSBOVUxMKSkgewogICAgICAgICBpZiAoKCgoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0KS0+bGVuID09IDgpICYmCiAgICAgICAgICAgICAoKChQV0xBTl9JRV9RVUlFVClwSUVfUXVpZXQpLT5ieVF1aWV0Q291bnQgIT0gMCkpIHsKICAgICAgICAgICAgIC8vIHZhbGlkIEVJRAogICAgICAgICAgICAgaWYgKHBRdWlldCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcFF1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldDsKICAgICAgICAgICAgICAgICBDQVJEYlNldFF1aWV0KCAgcE1nbXQtPnBBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFF1aWV0LT5ieVF1aWV0UGVyaW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChQV09SRClwUXVpZXQtPmFieVF1aWV0RHVyYXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChQV09SRClwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldE9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcFF1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldDsKICAgICAgICAgICAgICAgICBDQVJEYlNldFF1aWV0KCAgcE1nbXQtPnBBZGFwdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRQZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IFRSVUUpICYmCisgICAgaWYgKChiUGFyc2luZ1F1aWV0ID09IHRydWUpICYmCiAgICAgICAgIChwUXVpZXQgIT0gTlVMTCkpIHsKICAgICAgICAgQ0FSRGJTdGFydFF1aWV0KHBNZ210LT5wQWRhcHRlcik7CiAgICAgfQpAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgICAgIHBCU1NMaXN0LT51SUVMZW5ndGggPSBXTEFOX0JFQUNPTl9GUl9NQVhMRU47CiAgICAgbWVtY3B5KHBCU1NMaXN0LT5hYnlJRXMsIHBieUlFcywgcEJTU0xpc3QtPnVJRUxlbmd0aCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC01NzgsMTkgKzU3OCwxOSBAQAogICogICAgVXBkYXRlIEJTUyBzZXQgaW4ga25vd24gQlNTIGxpc3QKICAqCiAgKiBSZXR1cm4gVmFsdWU6Ci0gKiAgICBUUlVFIGlmIHN1Y2Nlc3MuCisgKiAgICB0cnVlIGlmIHN1Y2Nlc3MuCiAgKgogLSovCiAvLyBUT0RPOiBpbnB1dCBzdHJ1Y3R1cmUgbW9kaWZ5CiAKLUJPT0wKK2Jvb2wKIEJTU2JVcGRhdGVUb0JTU0xpc3QgKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAotICAgIEJPT0wgYkNoYW5uZWxIaXQsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbCwKKyAgICBib29sIGJDaGFubmVsSGl0LAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTYwMCw4ICs2MDAsOCBAQAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAogICAgIFBLbm93bkJTUyBwQlNTTGlzdCwKLSAgICBVSU5UIHVJRUxlbmd0aCwKLSAgICBQQllURSBwYnlJRXMsCisgICAgdW5zaWduZWQgaW50IHVJRUxlbmd0aCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJRXMsCiAgICAgdm9pZCAqcFJ4UGFja2V0Q29udGV4dAogICAgICkKIHsKQEAgLTYwOSwxNCArNjA5LDE0IEBACiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNSeE1nbXRQYWNrZXQgIHBSeFBhY2tldCA9IChQU1J4TWdtdFBhY2tldClwUnhQYWNrZXRDb250ZXh0OwotICAgIExPTkcgICAgICAgICAgICBsZEJtOwotICAgIEJPT0wgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gRkFMU0U7CisgICAgbG9uZyAgICAgICAgICAgIGxkQm07CisgICAgYm9vbCBiUGFyc2luZ1F1aWV0ID0gZmFsc2U7CiAgICAgUFdMQU5fSUVfUVVJRVQgIHBRdWlldCA9IE5VTEw7CiAKIAogCiAgICAgaWYgKHBCU1NMaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAKICAgICBISURXT1JEKHBCU1NMaXN0LT5xd0JTU1RpbWVzdGFtcCkgPSBjcHVfdG9fbGUzMihISURXT1JEKHF3VGltZXN0YW1wKSk7CkBAIC02NDYsNyArNjQ2LDcgQEAKICAgICBpZiAocEJTU0xpc3QtPnVDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgIHBCU1NMaXN0LT5lTmV0d29ya1R5cGVJblVzZSA9IFBIWV9UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocEJTU0xpc3QtPnNFUlAuYkVSUEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBCU1NMaXN0LT5zRVJQLmJFUlBFeGlzdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UgPSBQSFlfVFlQRV8xMUI7CkBAIC02NjMsMTUgKzY2MywxNSBAQAogICAgICAgICAocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykpIHsKICAgICAgICAgLy8gYXNzb2Mgd2l0aCBCU1MKICAgICAgICAgaWYgKHBCU1NMaXN0ID09IHBNZ210LT5wQ3VyckJTUykgewotICAgICAgICAgICAgYlBhcnNpbmdRdWlldCA9IFRSVUU7CisgICAgICAgICAgICBiUGFyc2luZ1F1aWV0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgV1BBX0NsZWFyUlNOKHBCU1NMaXN0KTsgICAgICAgICAvL21pa2UgdXBkYXRlCiAKICAgICBpZiAocFJTTldQQSAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU05XUEEtPmxlbiArIDI7Ci0gICAgICAgIGlmICh1TGVuIDw9ICh1SUVMZW5ndGggLSAoVUlOVCkoVUxPTkdfUFRSKSgoUEJZVEUpcFJTTldQQSAtIHBieUlFcykpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTldQQS0+bGVuICsgMjsKKyAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBjaGFyICopcFJTTldQQSAtIHBieUlFcykpKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+d1dQQUxlbiA9IHVMZW47CiAgICAgICAgICAgICBtZW1jcHkocEJTU0xpc3QtPmJ5V1BBSUUsIHBSU05XUEEsIHVMZW4pOwogICAgICAgICAgICAgV1BBX1BhcnNlUlNOKHBCU1NMaXN0LCBwUlNOV1BBKTsKQEAgLTY4MSw4ICs2ODEsOCBAQAogICAgV1BBMl9DbGVhclJTTihwQlNTTGlzdCk7ICAvL21pa2UgdXBkYXRlCiAKICAgICBpZiAocFJTTiAhPSBOVUxMKSB7Ci0gICAgICAgIFVJTlQgdUxlbiA9IHBSU04tPmxlbiArIDI7Ci0gICAgICAgIGlmICh1TGVuIDw9ICh1SUVMZW5ndGggLSAoVUlOVCkoVUxPTkdfUFRSKSgoUEJZVEUpcFJTTiAtIHBieUlFcykpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB1TGVuID0gcFJTTi0+bGVuICsgMjsKKyAgICAgICAgaWYgKHVMZW4gPD0gKHVJRUxlbmd0aCAtICh1bnNpZ25lZCBpbnQpKCh1bnNpZ25lZCBjaGFyICopcFJTTiAtIHBieUlFcykpKSB7CiAgICAgICAgICAgICBwQlNTTGlzdC0+d1JTTkxlbiA9IHVMZW47CiAgICAgICAgICAgICBtZW1jcHkocEJTU0xpc3QtPmJ5UlNOSUUsIHBSU04sIHVMZW4pOwogICAgICAgICAgICAgV1BBMnZQYXJzZVJTTihwQlNTTGlzdCwgcFJTTik7CkBAIC02OTAsNyArNjkwLDcgQEAKICAgICB9CiAKICAgICBpZiAocFJ4UGFja2V0LT51UlNTSSAhPSAwKSB7Ci0gICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocFJ4UGFja2V0LT51UlNTSSksICZsZEJtKTsKKyAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwUnhQYWNrZXQtPnVSU1NJKSwgJmxkQm0pOwogICAgICAgICAvLyBNb25pdGVyIGlmIFJTU0kgaXMgdG9vIHN0cm9uZy4KICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQrKzsKICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgJT0gUlNTSV9TVEFUX0NPVU5UOwpAQCAtNzAzLDM5ICs3MDMsMzggQEAKICAgICB9CiAKICAgICBpZiAoKHBJRV9Db3VudHJ5ICE9IE5VTEwpICYmCi0gICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSkgewotICAgICAgICBDQVJEdlNldENvdW50cnlJbmZvKHBNZ210LT5wQWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+ZU5ldHdvcmtUeXBlSW5Vc2UsCisgICAgICAgIChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKSkgeworICAgICAgICBzZXRfY291bnRyeV9pbmZvKHBNZ210LT5wQWRhcHRlciwgcEJTU0xpc3QtPmVOZXR3b3JrVHlwZUluVXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJRV9Db3VudHJ5KTsKICAgICB9CiAKLSAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gVFJVRSkgJiYgKHBJRV9RdWlldCAhPSBOVUxMKSkgeworICAgIGlmICgoYlBhcnNpbmdRdWlldCA9PSB0cnVlKSAmJiAocElFX1F1aWV0ICE9IE5VTEwpKSB7CiAgICAgICAgIGlmICgoKChQV0xBTl9JRV9RVUlFVClwSUVfUXVpZXQpLT5sZW4gPT0gOCkgJiYKICAgICAgICAgICAgICgoKFBXTEFOX0lFX1FVSUVUKXBJRV9RdWlldCktPmJ5UXVpZXRDb3VudCAhPSAwKSkgewogICAgICAgICAgICAgLy8gdmFsaWQgRUlECiAgICAgICAgICAgICBpZiAocFF1aWV0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwUXVpZXQgPSAoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0OwogICAgICAgICAgICAgICAgIENBUkRiU2V0UXVpZXQoICBwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldENvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUXVpZXQtPmJ5UXVpZXRQZXJpb2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXREdXJhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFBXT1JEKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwUXVpZXQgPSAoUFdMQU5fSUVfUVVJRVQpcElFX1F1aWV0OwogICAgICAgICAgICAgICAgIENBUkRiU2V0UXVpZXQoICBwTWdtdC0+cEFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFF1aWV0LT5ieVF1aWV0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBRdWlldC0+YnlRdWlldFBlcmlvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoUFdPUkQpcFF1aWV0LT5hYnlRdWlldER1cmF0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoUFdPUkQpcFF1aWV0LT5hYnlRdWlldE9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKilwUXVpZXQtPmFieVF1aWV0RHVyYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKXBRdWlldC0+YWJ5UXVpZXRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gVFJVRSkgJiYKKyAgICBpZiAoKGJQYXJzaW5nUXVpZXQgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBRdWlldCAhPSBOVUxMKSkgewogICAgICAgICBDQVJEYlN0YXJ0UXVpZXQocE1nbXQtPnBBZGFwdGVyKTsKICAgICB9CkBAIC03NDUsNyArNzQ0LDcgQEAKICAgICAgICAgcEJTU0xpc3QtPnVJRUxlbmd0aCA9IFdMQU5fQkVBQ09OX0ZSX01BWExFTjsKICAgICBtZW1jcHkocEJTU0xpc3QtPmFieUlFcywgcGJ5SUVzLCBwQlNTTGlzdC0+dUlFTGVuZ3RoKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTc2MiwyNyArNzYxLDI0IEBACiAgKgogLSovCiAKLUJPT0wKLUJTU0RCYklzU1RBSW5Ob2RlREIoCi0gICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgUEJZVEUgYWJ5RHN0QWRkciwKLSAgICBQVUlOVCBwdU5vZGVJbmRleAotICAgICkKK2Jvb2wKK0JTU0RCYklzU1RBSW5Ob2RlREIodm9pZCAqcE1nbXRPYmplY3QsIHVuc2lnbmVkIGNoYXIgKmFieURzdEFkZHIsCisJCXVuc2lnbmVkIGludCAqcHVOb2RlSW5kZXgpCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIC8vIEluZGV4ID0gMCByZXNlcnZlZCBmb3IgQVAgTm9kZQogICAgIGZvciAoaWkgPSAxOyBpaSA8IChNQVhfTk9ERV9OVU0gKyAxKTsgaWkrKykgewogICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKGFieURzdEFkZHIsIHBNZ210LT5zTm9kZURCVGFibGVbaWldLmFieU1BQ0FkZHIpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihhYnlEc3RBZGRyLCBwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5hYnlNQUNBZGRyKSkgewogICAgICAgICAgICAgICAgICpwdU5vZGVJbmRleCA9IGlpOwotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICByZXR1cm4gRkFMU0U7CisgICByZXR1cm4gZmFsc2U7CiB9OwogCiAKQEAgLTc5OCwxNyArNzk0LDE0IEBACiAgKgogLSovCiB2b2lkCi1CU1N2Q3JlYXRlT25lTm9kZSgKLSAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQVUlOVCBwdU5vZGVJbmRleAotICAgICkKK0JTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIFVJTlQgICAgICAgICAgICBCaWdlc3RDb3VudCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIFNlbGVjdEluZGV4OworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgQmlnZXN0Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCBTZWxlY3RJbmRleDsKICAgICBzdHJ1Y3Qgc2tfYnVmZiAgKnNrYjsKICAgICAvLyBJbmRleCA9IDAgcmVzZXJ2ZWQgZm9yIEFQIE5vZGUgKEluIFNUQSBtb2RlKQogICAgIC8vIEluZGV4ID0gMCByZXNlcnZlZCBmb3IgQnJvYWRjYXN0L011bHRpQ2FzdCAoSW4gQVAgbW9kZSkKQEAgLTg0MCw3ICs4MzMsNyBAQAogICAgIH0KIAogICAgIG1lbXNldCgmcE1nbXQtPnNOb2RlREJUYWJsZVsqcHVOb2RlSW5kZXhdLCAwLCBzaXplb2YoS25vd25Ob2RlREIpKTsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlWypwdU5vZGVJbmRleF0uYkFjdGl2ZSA9IFRSVUU7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVsqcHVOb2RlSW5kZXhdLmJBY3RpdmUgPSB0cnVlOwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbKnB1Tm9kZUluZGV4XS51UmF0ZVBvbGxUaW1lb3V0ID0gRkFMTEJBQ0tfUE9MTF9TRUNPTkQ7CiAgICAgLy8gZm9yIEFQIG1vZGUgUFMgcXVldWUKICAgICBza2JfcXVldWVfaGVhZF9pbml0KCZwTWdtdC0+c05vZGVEQlRhYmxlWypwdU5vZGVJbmRleF0uc1R4UFNRdWV1ZSk7CkBAIC04NjUsMTMgKzg1OCwxMyBAQAogdm9pZAogQlNTdlJlbW92ZU9uZU5vZGUoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgVUlOVCB1Tm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgKICAgICApCiB7CiAKICAgICBQU0RldmljZSAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBCWVRFICAgICAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwogICAgIHN0cnVjdCBza19idWZmICAqc2tiOwogCiAKQEAgLTg5OCwxOCArODkxLDE4IEBACiB2b2lkCiBCU1N2VXBkYXRlQVBOb2RlKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBXT1JEIHB3Q2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdDYXBJbmZvLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBFeHRTdXBwUmF0ZXMKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CisgICAgdW5zaWduZWQgaW50IHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CiAKICAgICBtZW1zZXQoJnBNZ210LT5zTm9kZURCVGFibGVbMF0sIDAsIHNpemVvZihLbm93bk5vZGVEQikpOwogCi0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gVFJVRTsKKyAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSB0cnVlOwogICAgIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFCKSB7CiAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU5fMTFCOwogICAgIH0KQEAgLTkyMiw3ICs5MTUsNyBAQAogICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1N1cHBSYXRlKSwKQEAgLTk2OSwxMyArOTYyLDEzIEBACiAgICAgaWYgKCFwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkKICAgICAgICAgbWVtc2V0KCZwTWdtdC0+c05vZGVEQlRhYmxlWzBdLCAwLCBzaXplb2YoS25vd25Ob2RlREIpKTsKICAgICBtZW1zZXQocE1nbXQtPnNOb2RlREJUYWJsZVswXS5hYnlNQUNBZGRyLCAweGZmLCBXTEFOX0FERFJfTEVOKTsKLSAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBUUlVFOwotICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gRkFMU0U7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKKyAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSA9IGZhbHNlOwogICAgIHNrYl9xdWV1ZV9oZWFkX2luaXQoJnBNZ210LT5zTm9kZURCVGFibGVbMF0uc1R4UFNRdWV1ZSk7CiAgICAgUkFURXZQYXJzZU1heFJhdGUoKHZvaWQgKilwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlWzBdLndNYXhTdXBwUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53U3VwcFJhdGUpLApAQCAtMTAwOCw4ICsxMDAxLDggQEAKIC0qLwogIC8vMjAwOC00LTE0IDxhZGQ+IGJ5IGNoZXN0ZXIgZm9yIGxlZCBpc3N1ZQogICNpZmRlZiBGT1JfTEVEX09OX05PVEVCT09LCi1CT09MIGNjPUZBTFNFOwotVUlOVCBzdGF0dXM7Citib29sIGNjPWZhbHNlOwordW5zaWduZWQgaW50IHN0YXR1czsKICNlbmRpZgogdm9pZAogQlNTdlNlY29uZENhbGxCYWNrKApAQCAtMTAxOCwxMSArMTAxMSwxMSBAQAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRCwgcEN1cnJTU0lEOwotICAgIFVJTlQgICAgICAgICAgICB1U2xlZXB5U1RBQ250ID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgdU5vblNob3J0U2xvdFNUQUNudCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIHVMb25nUHJlYW1ibGVTVEFDbnQgPSAwOworICAgIHVuc2lnbmVkIGludCB1U2xlZXB5U1RBQ250ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdU5vblNob3J0U2xvdFNUQUNudCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMb25nUHJlYW1ibGVTVEFDbnQgPSAwOwogICAgIHZpYXdnZXRfd3BhX2hlYWRlciogd3BhaGRyOyAgLy9EYXZpZFdhbmcKIAogICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtMTAzNCwyMiArMTAyNywyMiBAQAogIC8vMjAwOC00LTE0IDxhZGQ+IGJ5IGNoZXN0ZXIgZm9yIGxlZCBpc3N1ZQogI2lmZGVmIEZPUl9MRURfT05fTk9URUJPT0sKIE1BQ3ZHUElPSW4ocERldmljZS0+UG9ydE9mZnNldCwgJnBEZXZpY2UtPmJ5R1BJTyk7Ci1pZiAoKCggIShwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKSYmKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IEZBTFNFKSl8fCgocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkmJihwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSBUUlVFKSkpJiYoY2M9PUZBTFNFKSl7Ci1jYz1UUlVFOworaWYgKCgoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkmJihwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSBmYWxzZSkpfHwoKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpJiYocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSkpKSYmKGNjPT1mYWxzZSkpeworY2M9dHJ1ZTsKIH0KLWVsc2UgaWYoY2M9PVRSVUUpeworZWxzZSBpZihjYz09dHJ1ZSl7CiAKLWlmKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IFRSVUUpeworaWYocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSl7CiAgICAgICAgICAgICBpZiAoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkpCiAvL3x8KCAhKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpICYmIChwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0lOVikpKQoge2lmKHN0YXR1cz09MSkgZ290byBzdGFydDsKIHN0YXR1cz0xOwogQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgICAgICAvL25ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKIAogfQogICBpZiAocERldmljZS0+YnlHUElPICZHUElPMF9EQVRBKQpAQCAtMTA2NCwxMSArMTA1NywxMSBAQAoge2lmKHN0YXR1cz09MykgZ290byBzdGFydDsKIHN0YXR1cz0zOwogQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICAgICAgICAgICAgICAvL25ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKIAogfQogICBpZiAoICEocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkpCkBAIC0xMDkyLDExICsxMDg1LDExIEBACiAKIHsKICAgICAgICBwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCsrOwotICAgaWYoKHBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID4gMTApICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgIT0gVFJVRSkpIHsgIC8vMTAgc2VjIHRpbWVvdXQKKyAgIGlmKChwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA+IDEwKSAmJiAocERldmljZS0+YkxpbmtQYXNzICE9IHRydWUpKSB7ICAvLzEwIHNlYyB0aW1lb3V0CiAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlJlLWFzc29jaWF0aW9uIHRpbWVvdXQhISFcbiIpOwogCQkgICBwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogICAgICAgICAgICAgICAgICAgCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC0xMTA2LDcgKzEwOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICNlbmRpZgogICAgICB9Ci0gICBlbHNlIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKQorICAgZWxzZSBpZihwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkKICAgIAlwRGV2aWNlLT5ieVJlQXNzb2NDb3VudCA9IDA7CiB9CiAKQEAgLTEyMDAsMjcgKzExOTMsMjcgQEAKICAgICAgICAgaWYgKFdMQU5fR0VUX0VSUF9VU0VfUFJPVEVDVElPTihwRGV2aWNlLT5ieUVSUEZsYWcpKSB7CiAgICAgICAgICAgICBpZiAoIXBEZXZpY2UtPmJQcm90ZWN0TW9kZSkgewogICAgICAgICAgICAgICAgIE1BQ3ZFbmFibGVQcm90ZWN0TUQocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSkgewogICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlUHJvdGVjdE1EKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIG9uL29mZiBzaG9ydCBzbG90IHRpbWUKIAogICAgICAgICBpZiAodU5vblNob3J0U2xvdFNUQUNudCA+IDApIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iU2hvcnRTbG90VGltZSkgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgIHZVcGRhdGVJRlMoKHZvaWQgKilwRGV2aWNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghcERldmljZS0+YlNob3J0U2xvdFRpbWUpIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSB0cnVlOwogICAgICAgICAgICAgICAgIEJCdlNldFNob3J0U2xvdFRpbWUocERldmljZSk7CiAgICAgICAgICAgICAgICAgdlVwZGF0ZUlGUygodm9pZCAqKXBEZXZpY2UpOwogICAgICAgICAgICAgfQpAQCAtMTIzMSwxMyArMTIyNCwxMyBAQAogICAgICAgICBpZiAodUxvbmdQcmVhbWJsZVNUQUNudCA+IDApIHsKICAgICAgICAgICAgIGlmICghcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQpIHsKICAgICAgICAgICAgICAgICBNQUN2RW5hYmxlQmFya2VyUHJlYW1ibGVNZChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kKSB7CiAgICAgICAgICAgICAgICAgTUFDdkRpc2FibGVCYXJrZXJQcmVhbWJsZU1kKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMjQ3LDkgKzEyNDAsOSBAQAogICAgIC8vIENoZWNrIGlmIGFueSBTVEEgaW4gUFMgbW9kZSwgZW5hYmxlIERUSU0gbXVsdGljYXN0IGRlbGl2ZXIKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7CiAgICAgICAgIGlmICh1U2xlZXB5U1RBQ250ID4gMCkKLSAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUFNFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gZmFsc2U7CiAgICAgfQogCiAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieURlc2lyZVNTSUQ7CkBAIC0xMjc2LDEyICsxMjY5LDEyIEBACiAgICAgCSAgICB9CiAKICAgICAgICAgCWlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVJbkFjdGl2ZUNvdW50ID49IExPU1RfQkVBQ09OX0NPVU5UKSB7Ci0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyTW9kZSA9IFdNQUNfTU9ERV9TVEFOREJZOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUm9hbWluZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlJvYW1pbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICJMb3N0IEFQIGJlYWNvbiBbJWRdIHNlYywgZGlzY29ubmVjdGVkICFcbiIsIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQpOwogICAgICAgICBpZiAoKHBEZXZpY2UtPmJXUEFERVZVcCkgJiYgKHBEZXZpY2UtPnNrYiAhPSBOVUxMKSkgewogICAgICAgICAgICAgIHdwYWhkciA9ICh2aWF3Z2V0X3dwYV9oZWFkZXIgKilwRGV2aWNlLT5za2ItPmRhdGE7CkBAIC0xMjk4LDcgKzEyOTEsNyBAQAogICAgICAgICAgICAgIHBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwogICAgICAgICAgfTsKICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgewogCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTEzMTQsNyArMTMwNyw3IEBACiAgICAgICAgICAgICAgICAgcERldmljZS0+dUF1dG9SZUNvbm5lY3RUaW1lKys7CiAJICAgICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAgICAgICAgICAgICAgICAgLy9uZXR3b3JrIG1hbmFnZXIgc3VwcG9ydCBuZWVkIG5vdCBkbyBSb2FtaW5nIHNjYW4/Pz8KLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09VFJVRSkKKyAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09dHJ1ZSkKIAkJIHBEZXZpY2UtPnVBdXRvUmVDb25uZWN0VGltZSA9IDA7CiAJICAgICAjZW5kaWYKICAgICAgICAgICAgIH0KQEAgLTEzNTgsNyArMTM1MSw3IEBACiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7CiAgICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTM5MSwyMyArMTM4NCwyMyBAQAogdm9pZAogQlNTdlVwZGF0ZU5vZGVUeENvdW50ZXIoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgQllURSAgICAgICAgYnlUc3IwLAotICAgIEJZVEUgICAgICAgIGJ5VHNyMSwKLSAgICBQQllURSAgICAgICBwYnlCdWZmZXIsCi0gICAgVUlOVCAgICAgICAgdUZJRk9IZWFkZXJTaXplCisgICAgdW5zaWduZWQgY2hhciBieVRzcjAsCisgICAgdW5zaWduZWQgY2hhciBieVRzcjEsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGludCB1RklGT0hlYWRlclNpemUKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieVR4UmV0cnkgPSAoYnlUc3IwICYgVFNSMF9OQ1IpOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhSZXRyeSA9IChieVRzcjAgJiBUU1IwX05DUik7CiAgICAgUFNUeEJ1ZkhlYWQgICAgIHBUeEJ1ZkhlYWQ7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7Ci0gICAgV09SRCAgICAgICAgICAgIHdSYXRlOwotICAgIFdPUkQgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gUkFURV8xTTsKLSAgICBCWVRFICAgICAgICAgICAgYnlGYWxsQmFjazsKLSAgICBVSU5UICAgICAgICAgICAgaWk7Ci0vLwlVSU5UCQl0eFJldHJ5VGVtcDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RmFsbEJhY2tSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RmFsbEJhY2s7CisgICAgdW5zaWduZWQgaW50IGlpOworLy8JdW5zaWduZWQgaW50IHR4UmV0cnlUZW1wOwogLy9QTElDRV9ERUJVRy0+CiAJLy90eFJldHJ5VGVtcCA9IGJ5VHhSZXRyeTsKIAkvL2lmICh0eFJldHJ5VGVtcD09IDgpCkBAIC0xNTg0LDE0ICsxNTc3LDE0IEBACiB2b2lkCiBCU1N2Q2xlYXJOb2RlREJUYWJsZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBVSU5UIHVTdGFydEluZGV4CisgICAgdW5zaWduZWQgaW50IHVTdGFydEluZGV4CiAgICAgKQogCiB7CiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgc3RydWN0IHNrX2J1ZmYgICpza2I7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIGZvciAoaWkgPSB1U3RhcnRJbmRleDsgaWkgPCAoTUFYX05PREVfTlVNICsgMSk7IGlpKyspIHsKICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaWldLmJBY3RpdmUpIHsKQEAgLTE2MjksOCArMTYyMiw4IEBACiAgICAgICAgIHBCU1NMaXN0ID0gQlNTcEFkZHJJc0luQlNTTGlzdChwRGV2aWNlLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpOwogICAgICAgICBpZiAocEJTU0xpc3QgIT0gTlVMTCkgewogICAgICAgICAgICAgLy8gVXBkYXRhIEJCIFJlZyBpZiBSU1NJIGlzIHRvbyBzdHJvbmcuCi0gICAgICAgICAgICBMT05HICAgIExvY2FsbGRCbUF2ZXJhZ2UgPSAwOwotICAgICAgICAgICAgTE9ORyAgICB1TnVtb2ZkQm0gPSAwOworICAgICAgICAgICAgbG9uZyAgICBMb2NhbGxkQm1BdmVyYWdlID0gMDsKKyAgICAgICAgICAgIGxvbmcgICAgdU51bW9mZEJtID0gMDsKICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IFJTU0lfU1RBVF9DT1VOVDsgaWkrKykgewogICAgICAgICAgICAgICAgIGlmIChwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgdU51bW9mZEJtICsrOwpAQCAtMTY2NiwxMCArMTY1OSwxMCBAQAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewotICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJTZWxlY3RlZCA9IEZBTFNFOworICAgICAgICBwTWdtdC0+c0JTU0xpc3RbaWldLmJTZWxlY3RlZCA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm47CiB9CkBAIC0xNjgwLDkgKzE2NzMsOSBAQAogICAgICkKIHsKICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwotICAgVUxPTkcgVHhPa1JhdGlvLCBUeENudDsKLSAgIFVMT05HIFJ4T2tSYXRpbyxSeENudDsKLSAgIFVMT05HIFJzc2lSYXRpbzsKKyAgIHVuc2lnbmVkIGxvbmcgVHhPa1JhdGlvLCBUeENudDsKKyAgIHVuc2lnbmVkIGxvbmcgUnhPa1JhdGlvLFJ4Q250OworICAgdW5zaWduZWQgbG9uZyBSc3NpUmF0aW87CiAgICBsb25nIGxkQm07CiAKIFR4Q250ID0gcERldmljZS0+c2NTdGF0aXN0aWMuVHhOb1JldHJ5T2tDb3VudCArCkBAIC0xNjkzLDcgKzE2ODYsNyBAQAogVHhPa1JhdGlvID0gKFR4Q250IDwgNikgPyA0MDAwOigocERldmljZS0+c2NTdGF0aXN0aWMuVHhOb1JldHJ5T2tDb3VudCAqIDQwMDApIC8gVHhDbnQpOwogUnhPa1JhdGlvID0gKFJ4Q250IDwgNikgPyAyMDAwOigocERldmljZS0+c2NTdGF0aXN0aWMuUnhPa0NudCAqIDIwMDApIC8gUnhDbnQpOwogLy9kZWNpZGUgbGluayBxdWFsaXR5Ci1pZihwRGV2aWNlLT5iTGlua1Bhc3MgIT1UUlVFKQoraWYocERldmljZS0+YkxpbmtQYXNzICE9dHJ1ZSkKIHsKICAvLyAgcHJpbnRrKCJzX3VDYWxjdWxhdGVMaW5rUXVhbC0tPkxpbmsgZGlzY29ubmVjdCBhbmQgUG9vciBxdWFsaXR5KipcbiIpOwogICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAwOwpAQCAtMTcwMSw3ICsxNjk0LDcgQEAKIH0KIGVsc2UKIHsKLSAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocERldmljZS0+dUN1cnJSU1NJKSwgJmxkQm0pOworICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CiAgICBpZigtbGRCbSA8IDUwKSAgewogICAgCVJzc2lSYXRpbyA9IDQwMDA7CiAgICAgIH0KQEAgLTE3MzUsOCArMTcyOCw4IEBACiAgICAgICAgICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpICYmIChwTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0pPSU5URUQpKSkgewogICAgICAgICBwQlNTTGlzdCA9IEJTU3BBZGRySXNJbkJTU0xpc3QocERldmljZSwgcE1nbXQtPmFieUN1cnJCU1NJRCwgKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKTsKICAgICAgICAgaWYgKHBCU1NMaXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPSAoQllURSkgKH4ocEJTU0xpc3QtPmxkQm1BdmVyUmFuZ2UpICsgMSk7Ci0gICAgICAgICAgICAvL0JCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHBEZXZpY2UsIEZBTFNFKTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJQcmVFRFJTU0kgPSAodW5zaWduZWQgY2hhcikgKH4ocEJTU0xpc3QtPmxkQm1BdmVyUmFuZ2UpICsgMSk7CisgICAgICAgICAgICAvL0JCdlVwZGF0ZVByZUVEVGhyZXNob2xkKHBEZXZpY2UsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Jzc2RiLmgKaW5kZXggZTA5ZWY4Ny4uMGFmNDIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ic3NkYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvYnNzZGIuaApAQCAtOTAsNjkgKzkwLDY5IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0VSUE9iamVjdCB7Ci0gICAgQk9PTCAgICBiRVJQRXhpc3Q7Ci0gICAgQllURSAgICBieUVSUDsKKyAgICBib29sIGJFUlBFeGlzdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RVJQOwogfUVSUE9iamVjdCwgKlBFUlBPYmplY3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JTTkNhcE9iamVjdCB7Ci0gICAgQk9PTCAgICBiUlNOQ2FwRXhpc3Q7Ci0gICAgV09SRCAgICB3UlNOQ2FwOworICAgIGJvb2wgYlJTTkNhcEV4aXN0OworICAgIHVuc2lnbmVkIHNob3J0IHdSU05DYXA7CiB9U1JTTkNhcE9iamVjdCwgKlBTUlNOQ2FwT2JqZWN0OwogCiAvLyBCU1MgaW5mbyhBUCkKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnS25vd25CU1MgewogICAgIC8vIEJTUyBpbmZvCi0gICAgQk9PTCAgICAgICAgICAgIGJBY3RpdmU7Ci0gICAgQllURSAgICAgICAgICAgIGFieUJTU0lEW1dMQU5fQlNTSURfTEVOXTsKLSAgICBVSU5UICAgICAgICAgICAgdUNoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgIGFieVN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgIGFieUV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgVUlOVCAgICAgICAgICAgIHVSU1NJOwotICAgIEJZVEUgICAgICAgICAgICBieVNROwotICAgIFdPUkQgICAgICAgICAgICB3QmVhY29uSW50ZXJ2YWw7Ci0gICAgV09SRCAgICAgICAgICAgIHdDYXBJbmZvOwotICAgIEJZVEUgICAgICAgICAgICBhYnlTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotICAgIEJZVEUgICAgICAgICAgICBieVJ4UmF0ZTsKKyAgICBib29sIGJBY3RpdmU7CisgICAgdW5zaWduZWQgY2hhciBhYnlCU1NJRFtXTEFOX0JTU0lEX0xFTl07CisgICAgdW5zaWduZWQgaW50CXVDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgaW50CXVSU1NJOworICAgIHVuc2lnbmVkIGNoYXIgYnlTUTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm87CisgICAgdW5zaWduZWQgY2hhciBhYnlTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGU7CiAKLS8vICAgIFdPUkQgICAgICAgICAgICB3QVRJTVdpbmRvdzsKLSAgICBCWVRFICAgICAgICAgICAgYnlSU1NJU3RhdENudDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbU1BWDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbUF2ZXJhZ2VbUlNTSV9TVEFUX0NPVU5UXTsKLSAgICBMT05HICAgICAgICAgICAgbGRCbUF2ZXJSYW5nZTsKKy8vICAgIHVuc2lnbmVkIHNob3J0IHdBVElNV2luZG93OworICAgIHVuc2lnbmVkIGNoYXIgYnlSU1NJU3RhdENudDsKKyAgICBsb25nICAgICAgICAgICAgbGRCbU1BWDsKKyAgICBsb25nICAgICAgICAgICAgbGRCbUF2ZXJhZ2VbUlNTSV9TVEFUX0NPVU5UXTsKKyAgICBsb25nICAgICAgICAgICAgbGRCbUF2ZXJSYW5nZTsKICAgICAvL0ZvciBhbnkgQlNTSUQgc2VsZWN0aW9uIGltcHJvdm1lbnQKLSAgICBCT09MICAgICAgICAgICAgYlNlbGVjdGVkOworICAgIGJvb2wgYlNlbGVjdGVkOwogCiAgICAgLy8rKyBXUEEgaW5mb3JtYXRpb25zCi0gICAgQk9PTCAgICAgICAgICAgIGJXUEFWYWxpZDsKLSAgICBCWVRFICAgICAgICAgICAgYnlHS1R5cGU7Ci0gICAgQllURSAgICAgICAgICAgIGFieVBLVHlwZVs0XTsKLSAgICBXT1JEICAgICAgICAgICAgd1BLQ291bnQ7Ci0gICAgQllURSAgICAgICAgICAgIGFieUF1dGhUeXBlWzRdOwotICAgIFdPUkQgICAgICAgICAgICB3QXV0aENvdW50OwotICAgIEJZVEUgICAgICAgICAgICBieURlZmF1bHRLX2FzX1BLOwotICAgIEJZVEUgICAgICAgICAgICBieVJlcGxheUlkeDsKKyAgICBib29sIGJXUEFWYWxpZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5R0tUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UEtUeXBlWzRdOworICAgIHVuc2lnbmVkIHNob3J0IHdQS0NvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QXV0aFR5cGVbNF07CisgICAgdW5zaWduZWQgc2hvcnQgd0F1dGhDb3VudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGVmYXVsdEtfYXNfUEs7CisgICAgdW5zaWduZWQgY2hhciBieVJlcGxheUlkeDsKICAgICAvLy0tCiAKICAgICAvLysrIFdQQTIgaW5mb3JtYXRpb25zCi0gICAgQk9PTCAgICAgICAgICAgIGJXUEEyVmFsaWQ7Ci0gICAgQllURSAgICAgICAgICAgIGJ5Q1NTR0s7Ci0gICAgV09SRCAgICAgICAgICAgIHdDU1NQS0NvdW50OwotICAgIEJZVEUgICAgICAgICAgICBhYnlDU1NQS1s0XTsKLSAgICBXT1JEICAgICAgICAgICAgd0FLTVNTQXV0aENvdW50OwotICAgIEJZVEUgICAgICAgICAgICBhYnlBS01TU0F1dGhUeXBlWzRdOworICAgIGJvb2wgYldQQTJWYWxpZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q1NTR0s7CisgICAgdW5zaWduZWQgc2hvcnQgd0NTU1BLQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlDU1NQS1s0XTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUtNU1NBdXRoQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBS01TU0F1dGhUeXBlWzRdOwogCiAgICAgLy8rKyAgd3BhY3RsCi0gICAgQllURSAgICAgICAgICAgIGJ5V1BBSUVbTUFYX1dQQV9JRV9MRU5dOwotICAgIEJZVEUgICAgICAgICAgICBieVJTTklFW01BWF9XUEFfSUVfTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgd1dQQUxlbjsKLSAgICBXT1JEICAgICAgICAgICAgd1JTTkxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5V1BBSUVbTUFYX1dQQV9JRV9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYnlSU05JRVtNQVhfV1BBX0lFX0xFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1dQQUxlbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlNOTGVuOwogCiAgICAgLy8gQ2xlYXIgY291bnQKLSAgICBVSU5UICAgICAgICAgICAgdUNsZWFyQ291bnQ7Ci0vLyAgICBCWVRFICAgICAgICAgICAgYWJ5SUVzW1dMQU5fQkVBQ09OX0ZSX01BWExFTl07Ci0gICAgVUlOVCAgICAgICAgICAgIHVJRUxlbmd0aDsKKyAgICB1bnNpZ25lZCBpbnQJdUNsZWFyQ291bnQ7CisvLyAgICB1bnNpZ25lZCBjaGFyIGFieUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOworICAgIHVuc2lnbmVkIGludAl1SUVMZW5ndGg7CiAgICAgUVdPUkQgICAgICAgICAgIHF3QlNTVGltZXN0YW1wOwogICAgIFFXT1JEICAgICAgICAgICBxd0xvY2FsVFNGOyAgICAgLy8gbG9jYWwgVFNGIHRpbWVyCiAKQEAgLTE2MSw3ICsxNjEsNyBAQAogCiAgICAgRVJQT2JqZWN0ICAgICAgIHNFUlA7CiAgICAgU1JTTkNhcE9iamVjdCAgIHNSU05DYXBPYmo7Ci0gICAgQllURSAgICAgICAgICAgIGFieUlFc1sxMDI0XTsgICAvLyBkb24ndCBtb3ZlIHRoaXMgZmllbGQgISEKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlFc1sxMDI0XTsgICAvLyBkb24ndCBtb3ZlIHRoaXMgZmllbGQgISEKIAogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIEtub3duQlNTICwgKlBLbm93bkJTUzsKQEAgLTE4MSw1OSArMTgxLDU5IEBACiAvLyBTVEEgbm9kZSBpbmZvCiB0eXBlZGVmIHN0cnVjdCB0YWdLbm93bk5vZGVEQiB7CiAgICAgLy8gU1RBIGluZm8KLSAgICBCT09MICAgICAgICAgICAgYkFjdGl2ZTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5TUFDQWRkcltXTEFOX0FERFJfTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgd1R4RGF0YVJhdGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJTaG9ydFByZWFtYmxlOwotICAgIEJPT0wgICAgICAgICAgICBiRVJQRXhpc3Q7Ci0gICAgQk9PTCAgICAgICAgICAgIGJTaG9ydFNsb3RUaW1lOwotICAgIFVJTlQgICAgICAgICAgICB1SW5BY3RpdmVDb3VudDsKLSAgICBXT1JEICAgICAgICAgICAgd01heEJhc2ljUmF0ZTsgICAgIC8vR2V0IGZyb20gYnlUb3BPRkRNQmFzaWNSYXRlIG9yIGJ5VG9wQ0NLQmFzaWNSYXRlIHdoaWNoIGRlcGVuZHMgb24gcGFja2V0VHlwLgotICAgIFdPUkQgICAgICAgICAgICB3TWF4U3VwcFJhdGU7ICAgICAgLy9SZWNvcmRzIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCByYXRlIGdldHRpbmcgZnJvbSBTdXBwUmF0ZXMgSUUgYW5kIEV4dFN1cHBSYXRlcyBJRSBpbiBCZWFjb24uCi0gICAgV09SRCAgICAgICAgICAgIHdTdXBwUmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgYnlUb3BPRkRNQmFzaWNSYXRlOy8vUmVjb3JkcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlIGluIE9GRE0gbW9kZQotICAgIEJZVEUgICAgICAgICAgICBieVRvcENDS0Jhc2ljUmF0ZTsgLy9SZWNvcmRzIHRoZSBoaWdoZXN0IGJhc2ljIHJhdGUgaW4gQ0NLIG1vZGUKKyAgICBib29sIGJBY3RpdmU7CisgICAgdW5zaWduZWQgY2hhciBhYnlNQUNBZGRyW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1R4RGF0YVJhdGU7CisgICAgYm9vbCBiU2hvcnRQcmVhbWJsZTsKKyAgICBib29sIGJFUlBFeGlzdDsKKyAgICBib29sIGJTaG9ydFNsb3RUaW1lOworICAgIHVuc2lnbmVkIGludAl1SW5BY3RpdmVDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TWF4QmFzaWNSYXRlOyAgICAgLy9HZXQgZnJvbSBieVRvcE9GRE1CYXNpY1JhdGUgb3IgYnlUb3BDQ0tCYXNpY1JhdGUgd2hpY2ggZGVwZW5kcyBvbiBwYWNrZXRUeXAuCisgICAgdW5zaWduZWQgc2hvcnQgd01heFN1cHBSYXRlOyAgICAgIC8vUmVjb3JkcyB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgcmF0ZSBnZXR0aW5nIGZyb20gU3VwcFJhdGVzIElFIGFuZCBFeHRTdXBwUmF0ZXMgSUUgaW4gQmVhY29uLgorICAgIHVuc2lnbmVkIHNob3J0IHdTdXBwUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZTsvL1JlY29yZHMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZSBpbiBPRkRNIG1vZGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wQ0NLQmFzaWNSYXRlOyAvL1JlY29yZHMgdGhlIGhpZ2hlc3QgYmFzaWMgcmF0ZSBpbiBDQ0sgbW9kZQogCiAgICAgLy8gRm9yIEFQIG1vZGUKICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNUeFBTUXVldWU7Ci0gICAgV09SRCAgICAgICAgICAgIHdDYXBJbmZvOwotICAgIFdPUkQgICAgICAgICAgICB3TGlzdGVuSW50ZXJ2YWw7Ci0gICAgV09SRCAgICAgICAgICAgIHdBSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsOworICAgIHVuc2lnbmVkIHNob3J0IHdBSUQ7CiAgICAgTk9ERV9TVEFURSAgICAgIGVOb2RlU3RhdGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJQU0VuYWJsZTsKLSAgICBCT09MICAgICAgICAgICAgYlJ4UFNQb2xsOwotICAgIEJZVEUgICAgICAgICAgICBieUF1dGhTZXF1ZW5jZTsKLSAgICBVTE9ORyAgICAgICAgICAgdWxMYXN0UnhKaWZmZXI7Ci0gICAgQllURSAgICAgICAgICAgIGJ5U3VwcFJhdGU7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3RmxhZ3M7Ci0gICAgV09SRCAgICAgICAgICAgIHdFblF1ZXVlQ250OworICAgIGJvb2wgYlBTRW5hYmxlOworICAgIGJvb2wgYlJ4UFNQb2xsOworICAgIHVuc2lnbmVkIGNoYXIgYnlBdXRoU2VxdWVuY2U7CisgICAgdW5zaWduZWQgbG9uZyB1bExhc3RSeEppZmZlcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U3VwcFJhdGU7CisgICAgdW5zaWduZWQgbG9uZyBkd0ZsYWdzOworICAgIHVuc2lnbmVkIHNob3J0IHdFblF1ZXVlQ250OwogCi0gICAgQk9PTCAgICAgICAgICAgIGJPbkZseTsKLSAgICBVTE9OR0xPTkcgICAgICAgS2V5UlNDOwotICAgIEJZVEUgICAgICAgICAgICBieUtleUluZGV4OwotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4OwotICAgIEJZVEUgICAgICAgICAgICBieUNpcGhlclN1aXRlOwotICAgIERXT1JEICAgICAgICAgICBkd1RTQzQ3XzE2OwotICAgIFdPUkQgICAgICAgICAgICB3VFNDMTVfMDsKLSAgICBVSU5UICAgICAgICAgICAgdVdlcEtleUxlbmd0aDsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5V2VwS2V5W1dMQU5fV0VQTUFYX0tFWUxFTl07CisgICAgYm9vbCBiT25GbHk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgICAgIEtleVJTQzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5SW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlDaXBoZXJTdWl0ZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VFNDNDdfMTY7CisgICAgdW5zaWduZWQgc2hvcnQgd1RTQzE1XzA7CisgICAgdW5zaWduZWQgaW50CXVXZXBLZXlMZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBhYnlXZXBLZXlbV0xBTl9XRVBNQVhfS0VZTEVOXTsKICAgICAvLwogICAgIC8vIEF1dG8gcmF0ZSBmYWxsYmFjayB2YXJzCi0gICAgQk9PTCAgICAgICAgICAgIGJJc0luRmFsbGJhY2s7Ci0gICAgVUlOVCAgICAgICAgICAgIHVBdmVyYWdlUlNTSTsKLSAgICBVSU5UICAgICAgICAgICAgdVJhdGVSZWNvdmVyeVRpbWVvdXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVSYXRlUG9sbFRpbWVvdXQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVUeEZhaWx1cmVzOwotICAgIFVJTlQgICAgICAgICAgICB1VHhBdHRlbXB0czsKKyAgICBib29sIGJJc0luRmFsbGJhY2s7CisgICAgdW5zaWduZWQgaW50CXVBdmVyYWdlUlNTSTsKKyAgICB1bnNpZ25lZCBpbnQJdVJhdGVSZWNvdmVyeVRpbWVvdXQ7CisgICAgdW5zaWduZWQgaW50CXVSYXRlUG9sbFRpbWVvdXQ7CisgICAgdW5zaWduZWQgaW50CXVUeEZhaWx1cmVzOworICAgIHVuc2lnbmVkIGludAl1VHhBdHRlbXB0czsKIAotICAgIFVJTlQgICAgICAgICAgICB1VHhSZXRyeTsKLSAgICBVSU5UICAgICAgICAgICAgdUZhaWx1cmVSYXRpbzsKLSAgICBVSU5UICAgICAgICAgICAgdVJldHJ5UmF0aW87Ci0gICAgVUlOVCAgICAgICAgICAgIHVUeE9rW01BWF9SQVRFKzFdOwotICAgIFVJTlQgICAgICAgICAgICB1VHhGYWlsW01BWF9SQVRFKzFdOwotICAgIFVJTlQgICAgICAgICAgICB1VGltZUNvdW50OworICAgIHVuc2lnbmVkIGludAl1VHhSZXRyeTsKKyAgICB1bnNpZ25lZCBpbnQJdUZhaWx1cmVSYXRpbzsKKyAgICB1bnNpZ25lZCBpbnQJdVJldHJ5UmF0aW87CisgICAgdW5zaWduZWQgaW50CXVUeE9rW01BWF9SQVRFKzFdOworICAgIHVuc2lnbmVkIGludAl1VHhGYWlsW01BWF9SQVRFKzFdOworICAgIHVuc2lnbmVkIGludAl1VGltZUNvdW50OwogCiB9IEtub3duTm9kZURCLCAqUEtub3duTm9kZURCOwogCkBAIC0yNDUsMzIgKzI0NSwzMiBAQAogUEtub3duQlNTCiBCU1NwU2VhcmNoQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBwYnlEZXNpcmVCU1NJRCwKLSAgICBQQllURSBwYnlEZXNpcmVTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc2lyZUJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc2lyZVNTSUQsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZQogICAgICk7CiAKIFBLbm93bkJTUwogQlNTcEFkZHJJc0luQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQQllURSBhYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICphYnlCU1NJRCwKICAgICBQV0xBTl9JRV9TU0lEIHBTU0lECiAgICAgKTsKIAogdm9pZAogQlNTdkNsZWFyQlNTTGlzdCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCT09MIGJLZWVwQ3VyckJTU0lECisgICAgYm9vbCBiS2VlcEN1cnJCU1NJRAogICAgICk7CiAKLUJPT0wKK2Jvb2wKIEJTU2JJbnNlcnRUb0JTU0xpc3QoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgYWJ5QlNTSURBZGRyLAorICAgIHVuc2lnbmVkIGNoYXIgKmFieUJTU0lEQWRkciwKICAgICBRV09SRCBxd1RpbWVzdGFtcCwKLSAgICBXT1JEIHdCZWFjb25JbnRlcnZhbCwKLSAgICBXT1JEIHdDYXBJbmZvLAotICAgIEJZVEUgYnlDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwsCisgICAgdW5zaWduZWQgc2hvcnQgd0NhcEluZm8sCisgICAgdW5zaWduZWQgY2hhciBieUN1cnJDaGFubmVsLAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTI3OSwyMCArMjc5LDIwIEBACiAgICAgUFdMQU5fSUVfUlNOX0VYVCBwUlNOV1BBLAogICAgIFBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnksCiAgICAgUFdMQU5fSUVfUVVJRVQgcElFX1F1aWV0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKTsKIAogCi1CT09MCitib29sCiBCU1NiVXBkYXRlVG9CU1NMaXN0KAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFFXT1JEIHF3VGltZXN0YW1wLAotICAgIFdPUkQgd0JlYWNvbkludGVydmFsLAotICAgIFdPUkQgd0NhcEluZm8sCi0gICAgQllURSBieUN1cnJDaGFubmVsLAotICAgIEJPT0wgYkNoYW5uZWxIaXQsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsLAorICAgIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJyQ2hhbm5lbCwKKyAgICBib29sIGJDaGFubmVsSGl0LAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBSYXRlcywKQEAgLTMwMiwyOSArMzAyLDIzIEBACiAgICAgUFdMQU5fSUVfQ09VTlRSWSBwSUVfQ291bnRyeSwKICAgICBQV0xBTl9JRV9RVUlFVCBwSUVfUXVpZXQsCiAgICAgUEtub3duQlNTIHBCU1NMaXN0LAotICAgIFVJTlQgdUlFTGVuZ3RoLAotICAgIFBCWVRFIHBieUlFcywKKyAgICB1bnNpZ25lZCBpbnQgdUlFTGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlFcywKICAgICB2b2lkICpwUnhQYWNrZXRDb250ZXh0CiAgICAgKTsKIAogCi1CT09MCi1CU1NEQmJJc1NUQUluTm9kZURCKAotICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBCWVRFIGFieURzdEFkZHIsCi0gICAgUFVJTlQgcHVOb2RlSW5kZXgKLSAgICApOworYm9vbAorQlNTREJiSXNTVEFJbk5vZGVEQih2b2lkICpoRGV2aWNlQ29udGV4dCwgdW5zaWduZWQgY2hhciAqYWJ5RHN0QWRkciwKKwkJdW5zaWduZWQgaW50ICpwdU5vZGVJbmRleCk7CiAKIHZvaWQKLUJTU3ZDcmVhdGVPbmVOb2RlKAotICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFBVSU5UIHB1Tm9kZUluZGV4Ci0gICAgKTsKK0JTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KTsKIAogdm9pZAogQlNTdlVwZGF0ZUFQTm9kZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBQV09SRCBwd0NhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgKnB3Q2FwSW5mbywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcFJhdGVzCiAgICAgKTsKQEAgLTMzOSwxNiArMzMzLDE2IEBACiB2b2lkCiBCU1N2VXBkYXRlTm9kZVR4Q291bnRlcigKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCWVRFICAgICAgICBieVRzcjAsCi0gICAgQllURSAgICAgICAgYnlUc3IxLAotICAgIFBCWVRFICAgICAgIHBieUJ1ZmZlciwKLSAgICBVSU5UICAgICAgICB1RklGT0hlYWRlclNpemUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHNyMSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgaW50IHVGSUZPSGVhZGVyU2l6ZQogICAgICk7CiAKIHZvaWQKIEJTU3ZSZW1vdmVPbmVOb2RlKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFVJTlQgdU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4CiAgICAgKTsKIAogdm9pZApAQCAtMzYwLDcgKzM1NCw3IEBACiB2b2lkCiBCU1N2Q2xlYXJOb2RlREJUYWJsZSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBVSU5UIHVTdGFydEluZGV4CisgICAgdW5zaWduZWQgaW50IHVTdGFydEluZGV4CiAgICAgKTsKIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwppbmRleCA3YmMyZDc2Li4zMmQwOTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImtleS5oIgogI2luY2x1ZGUgInJjNC5oIgogI2luY2x1ZGUgImNvdW50cnkuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTc2LDQxMSArNzcsMzkgQEAKIAogI2RlZmluZSBDX0NXTUFYICAgICAgICAgMTAyMyAgICAvLyBzbG90IHRpbWUKIAotI2RlZmluZSBDQVJEX01BWF9DSEFOTkVMX1RCTCAgICA1NgotCiAjZGVmaW5lIFdBSVRfQkVBQ09OX1RYX0RPV05fVE1PICAgICAgICAgMyAgICAvLyBUaW1lcwogCi10eXBlZGVmIHN0cnVjdCB0YWdTQ2hhbm5lbFRibEVsZW1lbnQgewotICAgIEJZVEUgICAgYnlDaGFubmVsTnVtYmVyOwotICAgIFVJTlQgICAgdUZyZXF1ZW5jeTsKLSAgICBCT09MICAgIGJWYWxpZDsKLSAgICBCWVRFICAgIGJ5TUFQOwotfVNDaGFubmVsVGJsRWxlbWVudCwgKlBTQ2hhbm5lbFRibEVsZW1lbnQ7Ci0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xTSwgICAyTSwgICA1TSwgIDExTSwgIDE4TSwgIDI0TSwgIDM2TSwgIDU0TQotc3RhdGljIEJZVEUgYWJ5RGVmYXVsdFN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFieURlZmF1bHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2Q307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNk0sICAgOU0sICAxMk0sICA0OE0KLXN0YXRpYyBCWVRFIGFieURlZmF1bHRFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CitzdGF0aWMgdW5zaWduZWQgY2hhciBhYnlEZWZhdWx0RXh0U3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX0VYVFNVUFBfUkFURVMsIDQsIDB4MEMsIDB4MTIsIDB4MTgsIDB4NjB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzZNLCAgIDlNLCAgMTJNLCAgMThNLCAgMjRNLCAgMzZNLCAgNDhNLCAgNTRNCi1zdGF0aWMgQllURSBhYnlEZWZhdWx0U3VwcFJhdGVzQVtdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MEMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkN9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgYWJ5RGVmYXVsdFN1cHBSYXRlc0FbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xTSwgICAyTSwgICA1TSwgIDExTSwKLXN0YXRpYyBCWVRFIGFieURlZmF1bHRTdXBwUmF0ZXNCW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07CitzdGF0aWMgdW5zaWduZWQgY2hhciBhYnlEZWZhdWx0U3VwcFJhdGVzQltdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OwogCiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi1jb25zdCBXT1JEIGN3UlhCQ05UU0ZPZmZbTUFYX1JBVEVdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IGN3UlhCQ05UU0ZPZmZbTUFYX1JBVEVdID0KIHsxNywgMTcsIDE3LCAxNywgMzQsIDIzLCAxNywgMTEsIDgsIDUsIDQsIDN9OwogCi1zdGF0aWMgU0NoYW5uZWxUYmxFbGVtZW50IHNDaGFubmVsVGJsW0NBUkRfTUFYX0NIQU5ORUxfVEJMKzFdID0KLXsKLSAgezAsICAgMCwgICAgRkFMU0UsICAgIDB9LAotICB7MSwgICAyNDEyLCBUUlVFLCAgICAgMH0sCi0gIHsyLCAgIDI0MTcsIFRSVUUsICAgICAwfSwKLSAgezMsICAgMjQyMiwgVFJVRSwgICAgIDB9LAotICB7NCwgICAyNDI3LCBUUlVFLCAgICAgMH0sCi0gIHs1LCAgIDI0MzIsIFRSVUUsICAgICAwfSwKLSAgezYsICAgMjQzNywgVFJVRSwgICAgIDB9LAotICB7NywgICAyNDQyLCBUUlVFLCAgICAgMH0sCi0gIHs4LCAgIDI0NDcsIFRSVUUsICAgICAwfSwKLSAgezksICAgMjQ1MiwgVFJVRSwgICAgIDB9LAotICB7MTAsICAyNDU3LCBUUlVFLCAgICAgMH0sCi0gIHsxMSwgIDI0NjIsIFRSVUUsICAgICAwfSwKLSAgezEyLCAgMjQ2NywgVFJVRSwgICAgIDB9LAotICB7MTMsICAyNDcyLCBUUlVFLCAgICAgMH0sCi0gIHsxNCwgIDI0ODQsIFRSVUUsICAgICAwfSwKLSAgezE4MywgNDkxNSwgVFJVRSwgICAgIDB9LAotICB7MTg0LCA0OTIwLCBUUlVFLCAgICAgMH0sCi0gIHsxODUsIDQ5MjUsIFRSVUUsICAgICAwfSwKLSAgezE4NywgNDkzNSwgVFJVRSwgICAgIDB9LAotICB7MTg4LCA0OTQwLCBUUlVFLCAgICAgMH0sCi0gIHsxODksIDQ5NDUsIFRSVUUsICAgICAwfSwKLSAgezE5MiwgNDk2MCwgVFJVRSwgICAgIDB9LAotICB7MTk2LCA0OTgwLCBUUlVFLCAgICAgMH0sCi0gIHs3LCAgIDUwMzUsIFRSVUUsICAgICAwfSwKLSAgezgsICAgNTA0MCwgVFJVRSwgICAgIDB9LAotICB7OSwgICA1MDQ1LCBUUlVFLCAgICAgMH0sCi0gIHsxMSwgIDUwNTUsIFRSVUUsICAgICAwfSwKLSAgezEyLCAgNTA2MCwgVFJVRSwgICAgIDB9LAotICB7MTYsICA1MDgwLCBUUlVFLCAgICAgMH0sCi0gIHszNCwgIDUxNzAsIFRSVUUsICAgICAwfSwKLSAgezM2LCAgNTE4MCwgVFJVRSwgICAgIDB9LAotICB7MzgsICA1MTkwLCBUUlVFLCAgICAgMH0sCi0gIHs0MCwgIDUyMDAsIFRSVUUsICAgICAwfSwKLSAgezQyLCAgNTIxMCwgVFJVRSwgICAgIDB9LAotICB7NDQsICA1MjIwLCBUUlVFLCAgICAgMH0sCi0gIHs0NiwgIDUyMzAsIFRSVUUsICAgICAwfSwKLSAgezQ4LCAgNTI0MCwgVFJVRSwgICAgIDB9LAotICB7NTIsICA1MjYwLCBUUlVFLCAgICAgMH0sCi0gIHs1NiwgIDUyODAsIFRSVUUsICAgICAwfSwKLSAgezYwLCAgNTMwMCwgVFJVRSwgICAgIDB9LAotICB7NjQsICA1MzIwLCBUUlVFLCAgICAgMH0sCi0gIHsxMDAsIDU1MDAsIFRSVUUsICAgICAwfSwKLSAgezEwNCwgNTUyMCwgVFJVRSwgICAgIDB9LAotICB7MTA4LCA1NTQwLCBUUlVFLCAgICAgMH0sCi0gIHsxMTIsIDU1NjAsIFRSVUUsICAgICAwfSwKLSAgezExNiwgNTU4MCwgVFJVRSwgICAgIDB9LAotICB7MTIwLCA1NjAwLCBUUlVFLCAgICAgMH0sCi0gIHsxMjQsIDU2MjAsIFRSVUUsICAgICAwfSwKLSAgezEyOCwgNTY0MCwgVFJVRSwgICAgIDB9LAotICB7MTMyLCA1NjYwLCBUUlVFLCAgICAgMH0sCi0gIHsxMzYsIDU2ODAsIFRSVUUsICAgICAwfSwKLSAgezE0MCwgNTcwMCwgVFJVRSwgICAgIDB9LAotICB7MTQ5LCA1NzQ1LCBUUlVFLCAgICAgMH0sCi0gIHsxNTMsIDU3NjUsIFRSVUUsICAgICAwfSwKLSAgezE1NywgNTc4NSwgVFJVRSwgICAgIDB9LAotICB7MTYxLCA1ODA1LCBUUlVFLCAgICAgMH0sCi0gIHsxNjUsIDU4MjUsIFRSVUUsICAgICAwfQotfTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBUaGUgUmFkYXIgcmVndWxhdGlvbiBydWxlcyBmb3IgZWFjaCBjb3VudHJ5Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotU0NvdW50cnlUYWJsZSBDaGFubmVsUnVsZVRhYltDQ09ERV9NQVgrMV0gPQotewotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyB0YWJsZSBpcyBiYXNlZCBvbiBBdGhlcm8gZHJpdmVyIHJ1bGVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ291bnRyeSAgICAgICAgICBBdmFpbGFibGUgY2hhbm5lbHMsIGVuZGVkIHdpdGggMCAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwICAyMSAgMjIgIDIzICAyNCAgMjUgIDI2ICAyNyAgMjggIDI5ICAzMCAgMzEgIDMyICAzMyAgMzQgIDM1ICAzNiAgMzcgIDM4ICAzOSAgNDAgIDQxICA0MiAgNDMgIDQ0ICA0NSAgNDYgIDQ3ICA0OCAgNDkgIDUwICA1MSAgNTIgIDUzICA1NCAgNTUgIDU2ICAqLwote0NDT0RFX0ZDQywgICAgICAgICAgICAgICAgICAgICB7J1UnLCdTJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfVEVMRUMsICAgICAgICAgICAgICAgICAgIHsnSicsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMCwgIDEsICAxLCAgMCwgIDEsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgMjMsICAwLCAgMCwgMjMsICAwLCAyMywgMjMsICAwLCAyMywgIDAsICAwLCAyMywgMjMsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9FVFNJLCAgICAgICAgICAgICAgICAgICAgeydFJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1YzLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVjQsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWNSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1Y2LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVjcsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWOCwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1Y5LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVmEsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWYiwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JFU1ZjLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUkVTVmQsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9SRVNWZSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0FMTEJBTkQsICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQUxCQU5JQSwgICAgICAgICAgICAgICAgIHsnQScsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9BTEdFUklBLCAgICAgICAgICAgICAgICAgeydEJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0FSR0VOVElOQSwgICAgICAgICAgICAgICB7J0EnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAgMH0gIH0sCi17Q0NPREVfQVJNRU5JQSwgICAgICAgICAgICAgICAgIHsnQScsJ00nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9BVVNUUkFMSUEsICAgICAgICAgICAgICAgeydBJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0FVU1RSSUEsICAgICAgICAgICAgICAgICB7J0EnLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTUsICAwLCAxNSwgIDAsIDE1LCAgMCwgMTUsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQVpFUkJBSUpBTiwgICAgICAgICAgICAgIHsnQScsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CQUhSQUlOLCAgICAgICAgICAgICAgICAgeydCJywnSCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0JFTEFSVVMsICAgICAgICAgICAgICAgICB7J0InLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQkVMR0lVTSwgICAgICAgICAgICAgICAgIHsnQicsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CRUxJWkUsICAgICAgICAgICAgICAgICAgeydCJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0JPTElWSUEsICAgICAgICAgICAgICAgICB7J0InLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfQlJBWklMLCAgICAgICAgICAgICAgICAgIHsnQicsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9CUlVORUlfREFSVVNTQUxBTSwgICAgICAgeydCJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0JVTEdBUklBLCAgICAgICAgICAgICAgICB7J0InLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQ0FOQURBLCAgICAgICAgICAgICAgICAgIHsnQycsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9DSElMRSwgICAgICAgICAgICAgICAgICAgeydDJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAxNywgMTd9ICB9LAote0NDT0RFX0NISU5BLCAgICAgICAgICAgICAgICAgICB7J0MnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfQ09MT01CSUEsICAgICAgICAgICAgICAgIHsnQycsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9DT1NUQV9SSUNBLCAgICAgICAgICAgICAgeydDJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0NST0FUSUEsICAgICAgICAgICAgICAgICB7J0gnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfQ1lQUlVTLCAgICAgICAgICAgICAgICAgIHsnQycsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9DWkVDSCwgICAgICAgICAgICAgICAgICAgeydDJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0RFTk1BUkssICAgICAgICAgICAgICAgICB7J0QnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRE9NSU5JQ0FOX1JFUFVCTElDLCAgICAgIHsnRCcsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9FQ1VBRE9SLCAgICAgICAgICAgICAgICAgeydFJywnQyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0VHWVBULCAgICAgICAgICAgICAgICAgICB7J0UnLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRUxfU0FMVkFET1IsICAgICAgICAgICAgIHsnUycsJ1YnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9FU1RPTklBLCAgICAgICAgICAgICAgICAgeydFJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0ZJTkxBTkQsICAgICAgICAgICAgICAgICB7J0YnLCdJJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfRlJBTkNFLCAgICAgICAgICAgICAgICAgIHsnRicsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9HRVJNQU5ZLCAgICAgICAgICAgICAgICAgeydEJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0dSRUVDRSwgICAgICAgICAgICAgICAgICB7J0cnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfR0VPUkdJQSwgICAgICAgICAgICAgICAgIHsnRycsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9HVUFURU1BTEEsICAgICAgICAgICAgICAgeydHJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX0hPTkRVUkFTLCAgICAgICAgICAgICAgICB7J0gnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSE9OR19LT05HLCAgICAgICAgICAgICAgIHsnSCcsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9IVU5HQVJZLCAgICAgICAgICAgICAgICAgeydIJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lDRUxBTkQsICAgICAgICAgICAgICAgICB7J0knLCdTJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSU5ESUEsICAgICAgICAgICAgICAgICAgIHsnSScsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9JTkRPTkVTSUEsICAgICAgICAgICAgICAgeydJJywnRCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lSQU4sICAgICAgICAgICAgICAgICAgICB7J0knLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfSVJFTEFORCwgICAgICAgICAgICAgICAgIHsnSScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9JVEFMWSwgICAgICAgICAgICAgICAgICAgeydJJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0lTUkFFTCwgICAgICAgICAgICAgICAgICB7J0knLCdMJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfSkFQQU4sICAgICAgICAgICAgICAgICAgIHsnSicsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9KT1JEQU4sICAgICAgICAgICAgICAgICAgeydKJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0tBWkFLSFNUQU4sICAgICAgICAgICAgICB7J0snLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfS1VXQUlULCAgICAgICAgICAgICAgICAgIHsnSycsJ1cnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9MQVRWSUEsICAgICAgICAgICAgICAgICAgeydMJywnVid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0xFQkFOT04sICAgICAgICAgICAgICAgICB7J0wnLCdCJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTEVJQ0hURU5TVEVJTiwgICAgICAgICAgIHsnTCcsJ0knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9MSVRIVUFOSUEsICAgICAgICAgICAgICAgeydMJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0xVWEVNQlVSRywgICAgICAgICAgICAgICB7J0wnLCdVJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTUFDQVUsICAgICAgICAgICAgICAgICAgIHsnTScsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9NQUNFRE9OSUEsICAgICAgICAgICAgICAgeydNJywnSyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX01BTFRBLCAgICAgICAgICAgICAgICAgICB7J00nLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAxNiwgMTYsIDE2LCAgMH0gIH0sCi17Q0NPREVfTUFMQVlTSUEsICAgICAgICAgICAgICAgIHsnTScsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9NRVhJQ08sICAgICAgICAgICAgICAgICAgeydNJywnWCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX01PTkFDTywgICAgICAgICAgICAgICAgICB7J00nLCdDJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTU9ST0NDTywgICAgICAgICAgICAgICAgIHsnTScsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9ORVRIRVJMQU5EUywgICAgICAgICAgICAgeydOJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX05FV19aRUFMQU5ELCAgICAgICAgICAgICB7J04nLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCi17Q0NPREVfTk9SVEhfS09SRUEsICAgICAgICAgICAgIHsnSycsJ1AnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9OT1JXQVksICAgICAgICAgICAgICAgICAgeydOJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX09NQU4sICAgICAgICAgICAgICAgICAgICB7J08nLCdNJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUEFLSVNUQU4sICAgICAgICAgICAgICAgIHsnUCcsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9QQU5BTUEsICAgICAgICAgICAgICAgICAgeydQJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX1BFUlUsICAgICAgICAgICAgICAgICAgICB7J1AnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUEhJTElQUElORVMsICAgICAgICAgICAgIHsnUCcsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9QT0xBTkQsICAgICAgICAgICAgICAgICAgeydQJywnTCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1BPUlRVR0FMLCAgICAgICAgICAgICAgICB7J1AnLCdUJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUFVFUlRPX1JJQ08sICAgICAgICAgICAgIHsnUCcsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKLXtDQ09ERV9RQVRBUiwgICAgICAgICAgICAgICAgICAgeydRJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1JPTUFOSUEsICAgICAgICAgICAgICAgICB7J1InLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfUlVTU0lBLCAgICAgICAgICAgICAgICAgIHsnUicsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9TQVVESV9BUkFCSUEsICAgICAgICAgICAgeydTJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1NJTkdBUE9SRSwgICAgICAgICAgICAgICB7J1MnLCdHJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMH0gIH0sCi17Q0NPREVfU0xPVkFLSUEsICAgICAgICAgICAgICAgIHsnUycsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsIDE2LCAxNiwgMTYsICAwfSAgfSwKLXtDQ09ERV9TTE9WRU5JQSwgICAgICAgICAgICAgICAgeydTJywnSSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1NPVVRIX0FGUklDQSwgICAgICAgICAgICB7J1onLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfU09VVEhfS09SRUEsICAgICAgICAgICAgIHsnSycsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9TUEFJTiwgICAgICAgICAgICAgICAgICAgeydFJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgMTYsIDE2LCAxNiwgIDB9ICB9LAote0NDT0RFX1NXRURFTiwgICAgICAgICAgICAgICAgICB7J1MnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfU1dJVFpFUkxBTkQsICAgICAgICAgICAgIHsnQycsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9TWVJJQSwgICAgICAgICAgICAgICAgICAgeydTJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1RBSVdBTiwgICAgICAgICAgICAgICAgICB7J1QnLCdXJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgMTcsIDE3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAgMH0gIH0sCi17Q0NPREVfVEhBSUxBTkQsICAgICAgICAgICAgICAgIHsnVCcsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKLXtDQ09ERV9UUklOSURBRF9UT0JBR08sICAgICAgICAgeydUJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1RVTklTSUEsICAgICAgICAgICAgICAgICB7J1QnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfVFVSS0VZLCAgICAgICAgICAgICAgICAgIHsnVCcsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9VSywgICAgICAgICAgICAgICAgICAgICAgeydHJywnQid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX1VLUkFJTkUsICAgICAgICAgICAgICAgICB7J1UnLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfVU5JVEVEX0FSQUJfRU1JUkFURVMsICAgIHsnQScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9VTklURURfU1RBVEVTLCAgICAgICAgICAgeydVJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAote0NDT0RFX1VSVUdVQVksICAgICAgICAgICAgICAgICB7J1UnLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCi17Q0NPREVfVVpCRUtJU1RBTiwgICAgICAgICAgICAgIHsnVScsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9WRU5FWlVFTEEsICAgICAgICAgICAgICAgeydWJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgMjMsIDIzLCAyMywgIDB9ICB9LAote0NDT0RFX1ZJRVROQU0sICAgICAgICAgICAgICAgICB7J1YnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfWUVNRU4sICAgICAgICAgICAgICAgICAgIHsnWScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKLXtDQ09ERV9aSU1CQUJXRSwgICAgICAgICAgICAgICAgeydaJywnVyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAote0NDT0RFX0pBUEFOX1c1Ml9XNTMsICAgICAgICAgICB7J0onLCdKJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCi17Q0NPREVfTUFYLCAgICAgICAgICAgICAgICAgICAgIHsnVScsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1ICAxNiAgMTcgIDE4ICAxOSAgMjAgIDIxICAyMiAgMjMgIDI0ICAyNSAgMjYgIDI3ICAyOCAgMjkgIDMwICAzMSAgMzIgIDMzICAzNCAgMzUgIDM2ICAzNyAgMzggIDM5ICA0MCAgNDEgIDQyICA0MyAgNDQgIDQ1ICA0NiAgNDcgIDQ4ICA0OSAgNTAgIDUxICA1MiAgNTMgIDU0ICA1NSAgNTYgICovCi19OwotCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYwogdm9pZAogc192Q2FjdWxhdGVPRkRNUlBhcmFtZXRlcigKLSAgICBCWVRFIGJ5UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZSwKICAgICBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlLAotICAgIFBCWVRFIHBieVR4UmF0ZSwKLSAgICBQQllURSBwYnlSc3ZUaW1lCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHhSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJzdlRpbWUKICAgICApOwogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBmdW5jdGlvbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3VudHJ5IENoYW5uZWwgVmFsaWQKLSAqICBJbnB1dDogIENvdW50cnlDb2RlLCBDaGFubmVsTnVtCi0gKiAgICAgICAgICBDaGFubmVJbmRleCBpcyBkZWZpbmVkIGFzIFZUMzI1MyBNQUMgY2hhbm5lbDoKLSAqICAgICAgICAgICAgICAxICAgPSAyLjRHIGNoYW5uZWwgMQotICogICAgICAgICAgICAgIDIgICA9IDIuNEcgY2hhbm5lbCAyCi0gKiAgICAgICAgICAgICAgLi4uCi0gKiAgICAgICAgICAgICAgMTQgID0gMi40RyBjaGFubmVsIDE0Ci0gKiAgICAgICAgICAgICAgMTUgID0gNC45RyBjaGFubmVsIDE4MwotICogICAgICAgICAgICAgIDE2ICA9IDQuOUcgY2hhbm5lbCAxODQKLSAqICAgICAgICAgICAgICAuLi4uLgotICogIE91dHB1dDogVFJVRSBpZiB0aGUgc3BlY2lmaWVkIDVHSHogYmFuZCBpcyBhbGxvd2VkIHRvIGJlIHVzZWQuCi0gICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi0vLyA0LjlHID0+IENoIDE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2IChWYWx1ZToxNSB+IDIyKQotCi0vLyA1RyA9PiBDaCA3LCA4LCA5LCAxMSwgMTIsIDE2LCAzNCwgMzYsIDM4LCA0MCwgNDIsIDQ0LCA0NiwgNDgsIDUyLCA1NiwgNjAsIDY0LAotLy8gMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1IChWYWx1ZSAyMyB+IDU2KQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgotQk9PTAotQ2hhbm5lbFZhbGlkKFVJTlQgQ291bnRyeUNvZGUsIFVJTlQgQ2hhbm5lbEluZGV4KQotewotICAgIEJPT0wgICAgYlZhbGlkOwotCi0gICAgYlZhbGlkID0gRkFMU0U7Ci0gICAgLyoKLSAgICAgKiBJZiBDaGFubmVsIEluZGV4IGlzIGludmFsaWQsIHJldHVybiBpbnZhbGlkCi0gICAgICovCi0gICAgaWYgKChDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgfHwKLSAgICAgICAgKENoYW5uZWxJbmRleCA9PSAwKSkKLSAgICB7Ci0gICAgICAgIGJWYWxpZCA9IEZBTFNFOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgYlZhbGlkID0gc0NoYW5uZWxUYmxbQ2hhbm5lbEluZGV4XS5iVmFsaWQ7Ci0KLWV4aXQ6Ci0gICAgcmV0dXJuIChiVmFsaWQpOwotCi19IC8qIGVuZCBDaGFubmVsVmFsaWQgKi8KLQotCiAvKgogICogRGVzY3JpcHRpb246IENhY3VsYXRlIFR4UmF0ZSBhbmQgUnN2VGltZSBmaWVsZHMgZm9yIFJTUElORiBpbiBPRkRNIG1vZGUuCiAgKgpAQCAtNDk4LDEwICsxMjcsMTAgQEAKIHN0YXRpYwogdm9pZAogc192Q2FjdWxhdGVPRkRNUlBhcmFtZXRlciAoCi0gICAgQllURSBieVJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieVJhdGUsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwKLSAgICBQQllURSBwYnlUeFJhdGUsCi0gICAgUEJZVEUgcGJ5UnN2VGltZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieVR4UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3ZUaW1lCiAgICAgKQogewogICAgIHN3aXRjaCAoYnlSYXRlKSB7CkBAIC02MTQsOSArMjQzLDkgQEAKIHZvaWQKIHNfdlNldFJTUElORiAoUFNEZXZpY2UgcERldmljZSwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcykKIHsKLSAgICBCWVRFICBieVNlcnYgPSAwLCBieVNpZ25hbCA9IDA7IC8vIEZvciBDQ0sKLSAgICBXT1JEICB3TGVuID0gMDsKLSAgICBCWVRFICBieVR4UmF0ZSA9IDAsIGJ5UnN2VGltZSA9IDA7ICAgIC8vIEZvciBPRkRNCisgICAgdW5zaWduZWQgY2hhciBieVNlcnYgPSAwLCBieVNpZ25hbCA9IDA7IC8vIEZvciBDQ0sKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VHhSYXRlID0gMCwgYnlSc3ZUaW1lID0gMDsgICAgLy8gRm9yIE9GRE0KIAogICAgIC8vU2V0IHRvIFBhZ2UxCiAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtNzIyLDEyMCArMzUxLDcgQEAKICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiB9CiAKLQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1CWVRFIENBUkRieUdldENoYW5uZWxNYXBwaW5nICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieUNoYW5uZWxOdW1iZXIsIENBUkRfUEhZX1RZUEUgZVBoeVR5cGUpCi17Ci0gICAgVUlOVCAgICAgICAgaWk7Ci0KLSAgICBpZiAoKGVQaHlUeXBlID09IFBIWV9UWVBFXzExQikgfHwgKGVQaHlUeXBlID09IFBIWV9UWVBFXzExRykpIHsKLSAgICAgICAgcmV0dXJuIChieUNoYW5uZWxOdW1iZXIpOwotICAgIH0KLQotICAgIGZvcihpaSA9IChDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxKTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUw7ICkgewotICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJ5Q2hhbm5lbE51bWJlciA9PSBieUNoYW5uZWxOdW1iZXIpIHsKLSAgICAgICAgICAgIHJldHVybiAoKEJZVEUpIGlpKTsKLSAgICAgICAgfQotICAgICAgICBpaSsrOwotICAgIH0KLSAgICByZXR1cm4gKDApOwotfQotCi0KLUJZVEUgQ0FSRGJ5R2V0Q2hhbm5lbE51bWJlciAodm9pZCAqcERldmljZUhhbmRsZXIsIEJZVEUgYnlDaGFubmVsSW5kZXgpCi17Ci0vLyAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICByZXR1cm4oc0NoYW5uZWxUYmxbYnlDaGFubmVsSW5kZXhdLmJ5Q2hhbm5lbE51bWJlcik7Ci19Ci0KLS8qCi0gKiBEZXNjcmlwdGlvbjogU2V0IE5JQyBtZWRpYSBjaGFubmVsCi0gKgotICogUGFyYW1ldGVyczoKLSAqICBJbjoKLSAqICAgICAgcERldmljZUhhbmRsZXIgICAgICAtIFRoZSBhZGFwdGVyIHRvIGJlIHNldAotICogICAgICB1Q29ubmVjdGlvbkNoYW5uZWwgIC0gQ2hhbm5lbCB0byBiZSBzZXQKLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCi0gKgotICovCi1CT09MIENBUkRiU2V0Q2hhbm5lbCAodm9pZCAqcERldmljZUhhbmRsZXIsIFVJTlQgdUNvbm5lY3Rpb25DaGFubmVsKQotewotICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJPT0wgICAgICAgIGJSZXN1bHQgPSBUUlVFOwotCi0KLSAgICBpZiAocERldmljZS0+YnlDdXJyZW50Q2ggPT0gdUNvbm5lY3Rpb25DaGFubmVsKSB7Ci0gICAgICAgIHJldHVybiBiUmVzdWx0OwotICAgIH0KLQotICAgIGlmIChzQ2hhbm5lbFRibFt1Q29ubmVjdGlvbkNoYW5uZWxdLmJWYWxpZCA9PSBGQUxTRSkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICB9Ci0KLSAgICBpZiAoKHVDb25uZWN0aW9uQ2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgJiYKLSAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSAhPSBQSFlfVFlQRV8xMUEpKSB7Ci0gICAgICAgIENBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExQSwgMCwgMCwgTlVMTCwgTlVMTCk7Ci0gICAgfSBlbHNlIGlmICgodUNvbm5lY3Rpb25DaGFubmVsIDw9IENCX01BWF9DSEFOTkVMXzI0RykgJiYKLSAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpKSB7Ci0gICAgICAgIENBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExRywgMCwgMCwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIC8vIGNsZWFyIE5BVgotICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NQUNDUiwgTUFDQ1JfQ0xSTkFWKTsKLQotICAgIC8ve3sgUm9iZXJ0WXU6IDIwMDQxMjAyCi0gICAgLy8vLyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cyBmb3IgTUFYMjgyOSBBIG1vZGUgb25seSwgaXQgaXMgZm9yIGJldHRlciBUWCB0aHJvdWdocHV0Ci0KLSAgICBpZiAoIHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzAgKQotICAgIHsKLSAgICAgICAgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5Q3VycmVudENoLCAoQllURSl1Q29ubmVjdGlvbkNoYW5uZWwpOwotICAgIH0KLSAgICAvL319IFJvYmVydFl1Ci0KLQotICAgIHBEZXZpY2UtPmJ5Q3VycmVudENoID0gKEJZVEUpdUNvbm5lY3Rpb25DaGFubmVsOwotICAgIGJSZXN1bHQgJj0gUkZiU2VsZWN0Q2hhbm5lbChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5ieVJGVHlwZSwgKEJZVEUpdUNvbm5lY3Rpb25DaGFubmVsKTsKLQotICAgIC8vIEluaXQgU3ludGhlc2l6ZXIgVGFibGUKLSAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSBUUlVFKQotICAgICAgICBSRnZXcml0ZVdha2VQcm9nU3luKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5UkZUeXBlLCB1Q29ubmVjdGlvbkNoYW5uZWwpOwotCi0KLSAgICAvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ0FSRGJTZXRNZWRpYUNoYW5uZWw6ICVkXG4iLCAoQllURSl1Q29ubmVjdGlvbkNoYW5uZWwpOwotICAgIEJCdlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7Ci0KLSAgICBpZiAocERldmljZS0+YnlMb2NhbElEID4gUkVWX0lEX1ZUMzI1M19CMSkgewotICAgICAgICAvLyBzZXQgSFcgZGVmYXVsdCBwb3dlciByZWdpc3RlcgotICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgIFJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKLSAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1BXUkNDSywgcERldmljZS0+YnlDdXJQd3IpOwotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QV1JPRkRNLCBwRGV2aWNlLT5ieUN1clB3cik7Ci0gICAgICAgIE1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgewotI2lmZGVmCVBMSUNFX0RFQlVHCi0JLy9wcmludGsoIkZ1bmM6Q0FSRGJTZXRDaGFubmVsOmNhbGwgUkZiU2V0UG93ZXI6MTFCXG4iKTsKLSNlbmRpZgotICAgICAgICBSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzFNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZglQTElDRV9ERUJVRwotCS8vcHJpbnRrKCJGdW5jOkNBUkRiU2V0Q2hhbm5lbDpjYWxsIFJGYlNldFBvd2VyXG4iKTsKLSNlbmRpZgotCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7Ci0gICAgfQotCi0gICAgcmV0dXJuKGJSZXN1bHQpOwotfQotCi0KIAogLyoKICAqIERlc2NyaXB0aW9uOiBDYXJkIFNlbmQgcGFja2V0IGZ1bmN0aW9uCkBAIC04NDksMTEgKzM2NSwxMSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIC8qCi1CT09MIENBUkRiU2VuZFBhY2tldCAodm9pZCAqcERldmljZUhhbmRsZXIsIHZvaWQgKnBQYWNrZXQsIENBUkRfUEtUX1RZUEUgZVBrdFR5cGUsIFVJTlQgdUxlbmd0aCkKK2Jvb2wgQ0FSRGJTZW5kUGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgdW5zaWduZWQgaW50IHVMZW5ndGgpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9NTkcpIHsKQEAgLTg2NCw3ICszODAsNyBAQAogICAgICAgICByZXR1cm4gVFhiVEQxU2VuZChwRGV2aWNlLCBwUGFja2V0LCB1TGVuZ3RoKTsKICAgICB9CiAKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAqLwogCkBAIC04NzgsMTYgKzM5NCwxNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzaG9ydCBwcmVhbWJsZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc2hvcnQgcHJlYW1ibGU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBDQVJEYklzU2hvcnRQcmVhbWJsZSAodm9pZCAqcERldmljZUhhbmRsZXIpCitib29sIENBUkRiSXNTaG9ydFByZWFtYmxlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBpZiAocERldmljZS0+YnlQcmVhbWJsZVR5cGUgPT0gMCkgewotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KLSAgICByZXR1cm4oVFJVRSk7CisgICAgcmV0dXJuKHRydWUpOwogfQogCiAvKgpAQCAtODk5LDEwICs0MTUsMTAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc2hvcnQgc2xvdCB0aW1lOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzaG9ydCBzbG90IHRpbWU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBDQVJEYklzU2hvclNsb3RUaW1lICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJJc1Nob3JTbG90VGltZSAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgcmV0dXJuKHBEZXZpY2UtPmJTaG9ydFNsb3RUaW1lKTsKQEAgLTkyMSwxNCArNDM3LDE0IEBACiAgKiBSZXR1cm4gVmFsdWU6IE5vbmUuCiAgKgogICovCi1CT09MIENBUkRiU2V0UGh5UGFyYW1ldGVyICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgV09SRCB3Q2FwSW5mbywgQllURSBieUVSUEZpZWxkLCB2b2lkICpwdlN1cHBvcnRSYXRlSUVzLCB2b2lkICpwdkV4dFN1cHBvcnRSYXRlSUVzKQorYm9vbCBDQVJEYlNldFBoeVBhcmFtZXRlciAodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUsIHVuc2lnbmVkIHNob3J0IHdDYXBJbmZvLCB1bnNpZ25lZCBjaGFyIGJ5RVJQRmllbGQsIHZvaWQgKnB2U3VwcG9ydFJhdGVJRXMsIHZvaWQgKnB2RXh0U3VwcG9ydFJhdGVJRXMpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQllURSAgICAgICAgYnlDV01heE1pbiA9IDA7Ci0gICAgQllURSAgICAgICAgYnlTbG90ID0gMDsKLSAgICBCWVRFICAgICAgICBieVNJRlMgPSAwOwotICAgIEJZVEUgICAgICAgIGJ5RElGUyA9IDA7Ci0gICAgQllURSAgICAgICAgYnlEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlDV01heE1pbiA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieVNsb3QgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlTSUZTID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RElGUyA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAvLyAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBSYXRlcyA9IE5VTEw7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcG9ydFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHB2U3VwcG9ydFJhdGVJRXM7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpIHB2RXh0U3VwcG9ydFJhdGVJRXM7CkBAIC0xMDcxLDkgKzU4Nyw5IEBACiAgICAgICAgIHBEZXZpY2UtPmJ5U2xvdCA9IGJ5U2xvdDsKICAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1NMT1QsIHBEZXZpY2UtPmJ5U2xvdCk7CiAgICAgICAgIGlmIChwRGV2aWNlLT5ieVNsb3QgPT0gQ19TTE9UX1NIT1JUKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iU2hvcnRTbG90VGltZSA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+YlNob3J0U2xvdFRpbWUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBCQnZTZXRTaG9ydFNsb3RUaW1lKHBEZXZpY2UpOwogICAgIH0KQEAgLTEwODksNyArNjA1LDcgQEAKICAgICBzX3ZTZXRSU1BJTkYocERldmljZSwgZVBIWVR5cGUsIHBTdXBwb3J0UmF0ZXMsIHBFeHRTdXBwb3J0UmF0ZXMpOwogICAgIHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9IGVQSFlUeXBlOwogICAgIC8vIHNldCBmb3IgTkRJUyBPSURfODAyXzExU1VQUE9SVEVEX1JBVEVTCi0gICAgcmV0dXJuIChUUlVFKTsKKyAgICByZXR1cm4gKHRydWUpOwogfQogCiAvKgpAQCAtMTEwOCw3ICs2MjQsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi1CT09MIENBUkRiVXBkYXRlVFNGICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieVJ4UmF0ZSwgUVdPUkQgcXdCU1NUaW1lc3RhbXAsIFFXT1JEIHF3TG9jYWxUU0YpCitib29sIENBUkRiVXBkYXRlVFNGICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciBieVJ4UmF0ZSwgUVdPUkQgcXdCU1NUaW1lc3RhbXAsIFFXT1JEIHF3TG9jYWxUU0YpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgUVdPUkQgICAgICAgcXdUU0ZPZmZzZXQ7CkBAIC0xMTI1LDcgKzY0MSw3IEBACiAgICAgICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19UU0ZPRlNUICsgNCwgSElEV09SRChxd1RTRk9mZnNldCkpOwogICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfVEZUQ1RMLCBURlRDVExfVFNGU1lOQ0VOKTsKICAgICB9Ci0gICAgcmV0dXJuKFRSVUUpOworICAgIHJldHVybih0cnVlKTsKIH0KIAogCkBAIC0xMTQwLDE2ICs2NTYsMTYgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIENBUkRiU2V0QmVhY29uUGVyaW9kICh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3QmVhY29uSW50ZXJ2YWwpCitib29sIENBUkRiU2V0QmVhY29uUGVyaW9kICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIHVCZWFjb25JbnRlcnZhbCA9IDA7Ci0gICAgVUlOVCAgICAgICAgdUxvd05leHRUQlRUID0gMDsKLSAgICBVSU5UICAgICAgICB1SGlnaFJlbWFpbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgdUxvd1JlbWFpbiA9IDA7CisgICAgdW5zaWduZWQgaW50IHVCZWFjb25JbnRlcnZhbCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMb3dOZXh0VEJUVCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVIaWdoUmVtYWluID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdUxvd1JlbWFpbiA9IDA7CiAgICAgUVdPUkQgICAgICAgcXdOZXh0VEJUVDsKIAogICAgIEhJRFdPUkQocXdOZXh0VEJUVCkgPSAwOwpAQCAtMTE3OSw3ICs2OTUsNyBAQAogICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ORVhUVEJUVCArIDQsIEhJRFdPUkQocXdOZXh0VEJUVCkpOwogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19URlRDVEwsIFRGVENUTF9UQlRUU1lOQ0VOKTsKIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTE5NCw1MSArNzEwLDUxIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCBkYXRhIHBhY2tldCBjb21wbGV0ZTsgb3RoZXJ3aXNlIEZBTFNFLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCBkYXRhIHBhY2tldCBjb21wbGV0ZTsgb3RoZXJ3aXNlIGZhbHNlLgogICoKICAqLwotQk9PTCBDQVJEYlN0b3BUeFBhY2tldCAodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEtUX1RZUEUgZVBrdFR5cGUpCitib29sIENBUkRiU3RvcFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogCiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9BTEwpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BCZWFjb24gPSBUUlVFOwotICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gdHJ1ZTsKKyAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSB0cnVlOworICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSB0cnVlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0JDTikgewotICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9NTkcpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IHRydWU7CiAgICAgfSBlbHNlIGlmIChlUGt0VHlwZSA9PSBQS1RfVFlQRV84MDJfMTFfREFUQSkgewotICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iU3RvcERhdGFQa3QgPSB0cnVlOwogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iU3RvcEJlYWNvbiA9PSBUUlVFKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wQmVhY29uID09IHRydWUpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJJc0JlYWNvbkJ1ZlJlYWR5U2V0ID09IHRydWUpIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250IDwgV0FJVF9CRUFDT05fVFhfRE9XTl9UTU8pIHsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250ICsrOwotICAgICAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5jYkJlYWNvbkJ1ZlJlYWR5U2V0Q250ID0gMDsKICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOwogICAgIH0KICAgICAvLyB3YWl0IGFsbCBURDAgY29tcGxldGUKLSAgICBpZiAocERldmljZS0+YlN0b3BUeDBQa3QgPT0gVFJVRSkgeworICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSB0cnVlKSB7CiAgICAgICAgICBpZiAocERldmljZS0+aVREVXNlZFtUWVBFX1RYRE1BMF0gIT0gMCl7Ci0gICAgICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyB3YWl0IGFsbCBEYXRhIFREIGNvbXBsZXRlCi0gICAgaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9PSB0cnVlKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW1RZUEVfQUMwRE1BXSAhPSAwKXsKLSAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuKFRSVUUpOworICAgIHJldHVybih0cnVlKTsKIH0KIAogCkBAIC0xMjUyLDMzICs3NjgsMzMgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzczsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3M7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgQ0FSRGJTdGFydFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKK2Jvb2wgQ0FSRGJTdGFydFR4UGFja2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogCiAgICAgaWYgKGVQa3RUeXBlID09IFBLVF9UWVBFXzgwMl8xMV9BTEwpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BCZWFjb24gPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlN0b3BUeDBQa3QgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlN0b3BEYXRhUGt0ID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wQmVhY29uID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wVHgwUGt0ID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0JDTikgewotICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iU3RvcEJlYWNvbiA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX01ORykgewotICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iU3RvcFR4MFBrdCA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAoZVBrdFR5cGUgPT0gUEtUX1RZUEVfODAyXzExX0RBVEEpIHsKLSAgICAgICAgcERldmljZS0+YlN0b3BEYXRhUGt0ID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJTdG9wRGF0YVBrdCA9IGZhbHNlOwogICAgIH0KIAotICAgIGlmICgocERldmljZS0+YlN0b3BCZWFjb24gPT0gRkFMU0UpICYmCi0gICAgICAgIChwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPT0gVFJVRSkgJiYKKyAgICBpZiAoKHBEZXZpY2UtPmJTdG9wQmVhY29uID09IGZhbHNlKSAmJgorICAgICAgICAocERldmljZS0+YkJlYWNvbkJ1ZlJlYWR5ID09IHRydWUpICYmCiAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19UQ1IsIFRDUl9BVVRPQkNOVFgpOwogICAgIH0KIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTI5NCwxMCArODEwLDEwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIENBUkRiU2V0QlNTSUQodm9pZCAqcERldmljZUhhbmRsZXIsIFBCWVRFIHBieUJTU0lELCBDQVJEX09QX01PREUgZU9QTW9kZSkKK2Jvb2wgQ0FSRGJTZXRCU1NJRCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsIENBUkRfT1BfTU9ERSBlT1BNb2RlKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCkBAIC0xMzE1LDIwICs4MzEsMjAgQEAKICAgICB9CiAgICAgaWYgKGVPUE1vZGUgPT0gT1BfTU9ERV9VTktOT1dOKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUkNSLCBSQ1JfQlNTSUQpOwotICAgICAgICBwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YkJTU0lERmlsdGVyID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPmJ5UnhNb2RlICY9IH5SQ1JfQlNTSUQ7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIndjbWQ6IHJ4X21vZGUgPSAleFxuIiwgcERldmljZS0+YnlSeE1vZGUgKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoSVNfTlVMTF9BRERSRVNTKHBEZXZpY2UtPmFieUJTU0lEKSA9PSBGQUxTRSkgeworICAgICAgICBpZiAoaXNfemVyb19ldGhlcl9hZGRyKHBEZXZpY2UtPmFieUJTU0lEKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1JDUiwgUkNSX0JTU0lEKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJCU1NJREZpbHRlciA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPSB0cnVlOwogICAgICAgICAgICAgcERldmljZS0+YnlSeE1vZGUgfD0gUkNSX0JTU0lEOwogCSAgICB9CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIndtZ3I6IHJ4X21vZGUgPSAleFxuIiwgcERldmljZS0+YnlSeE1vZGUgKTsKICAgICB9CiAgICAgLy8gQWRvcHQgQlNTIHN0YXRlIGluIEFkYXB0ZXIgRGV2aWNlIE9iamVjdAogICAgIHBEZXZpY2UtPmVPUE1vZGUgPSBlT1BNb2RlOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMTM0Miw3ICs4NTgsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VzczsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC0xMzYzLDE4ICs4NzksMTggQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZDsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIENBUkRiU2V0VHhEYXRhUmF0ZSgKK2Jvb2wgQ0FSRGJTZXRUeERhdGFSYXRlKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFdPUkQgICAgd0RhdGFSYXRlCisgICAgdW5zaWduZWQgc2hvcnQgd0RhdGFSYXRlCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCiAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gd0RhdGFSYXRlOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIC8qKwpAQCAtMTM4OCwyMCArOTA0LDIwIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHBvd2VyIGRvd24gc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgcG93ZXIgZG93biBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiUG93ZXJEb3duKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKXBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICB1SWR4OworICAgIHVuc2lnbmVkIGludCB1SWR4OwogCiAgICAgLy8gY2hlY2sgaWYgYWxyZWFkeSBpbiBEb3plIG1vZGUKICAgICBpZiAoTUFDYklzUmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTKSkKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRnJvY2UgUFNFTiBvbgogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFNFTik7CkBAIC0xNDEwLDEyICs5MjYsMTIgQEAKIAogICAgIGZvciAodUlkeCA9IDA7IHVJZHggPCBUWVBFX01BWFREOyB1SWR4ICsrKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT5pVERVc2VkW3VJZHhdICE9IDApCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9HTzJET1pFKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkdvIHRvIERvemUgWlpaWlpaWlpaWlpaWlpaXG4iKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTE0MjcsMTYgKzk0MywxNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJSYWRpb1Bvd2VyT2ZmICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT2ZmICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBCT09MICAgICAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBib29sIGJSZXN1bHQgPSB0cnVlOwogCi0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBUUlVFKQotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpCisgICAgICAgIHJldHVybiB0cnVlOwogCiAKICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CkBAIC0xNDU5LDcgKzk3NSw3IEBACiAKICAgICBCQnZTZXREZWVwU2xlZXAocERldmljZS0+UG9ydE9mZnNldCwgcERldmljZS0+YnlMb2NhbElEKTsKIAotICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IFRSVUU7CisgICAgcERldmljZS0+YlJhZGlvT2ZmID0gdHJ1ZTsKICAgICAgLy8yMDA3LTA0MDktMDMsPEFkZD4gYnkgY2hlc3RlcgogcHJpbnRrKCJjaGVzdGVyIHBvd2VyIG9mZlxuIik7CiBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfR1BJT0NUTDAsIExFRF9BQ1RTRVQpOyAgLy9MRUQgaXNzdWUKQEAgLTE0NzYsMjMgKzk5MiwyMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJSYWRpb1Bvd2VyT24gKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQorYm9vbCBDQVJEYlJhZGlvUG93ZXJPbiAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQk9PTCAgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKIHByaW50aygiY2hlc3RlciBwb3dlciBvblxuIik7Ci0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gVFJVRSl7Ci1pZiAocERldmljZS0+YkhXUmFkaW9PZmYgPT0gVFJVRSkgcHJpbnRrKCJjaGVzdGVyIGJIV1JhZGlvT2ZmXG4iKTsKLWlmIChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IFRSVUUpIHByaW50aygiY2hlc3RlciBiUmFkaW9Db250cm9sT2ZmXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFO30KKyAgICBpZiAocERldmljZS0+YlJhZGlvQ29udHJvbE9mZiA9PSB0cnVlKXsKK2lmIChwRGV2aWNlLT5iSFdSYWRpb09mZiA9PSB0cnVlKSBwcmludGsoImNoZXN0ZXIgYkhXUmFkaW9PZmZcbiIpOworaWYgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gdHJ1ZSkgcHJpbnRrKCJjaGVzdGVyIGJSYWRpb0NvbnRyb2xPZmZcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7fQogCi0gICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBGQUxTRSkKKyAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IGZhbHNlKQogICAgICAgIHsKIHByaW50aygiY2hlc3RlciBwYlJhZGlvT2ZmXG4iKTsKLXJldHVybiBUUlVFO30KK3JldHVybiB0cnVlO30KIAogICAgIEJCdkV4aXREZWVwU2xlZXAocERldmljZS0+UG9ydE9mZnNldCwgcERldmljZS0+YnlMb2NhbElEKTsKIApAQCAtMTUxNCw3ICsxMDMwLDcgQEAKIAogICAgIH0KIAotICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJSYWRpb09mZiA9IGZhbHNlOwogLy8gIDIwMDctMDQwOS0wMyw8QWRkPiBieSBjaGVzdGVyCiBwcmludGsoImNoZXN0ZXIgcG93ZXIgb25cbiIpOwogTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19HUElPQ1RMMCwgTEVEX0FDVFNFVCk7IC8vTEVEIGlzc3VlCkBAIC0xNTIzLDEyICsxMDM5LDEyIEBACiAKIAogCi1CT09MIENBUkRiUmVtb3ZlS2V5ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgUEJZVEUgcGJ5QlNTSUQpCitib29sIENBUkRiUmVtb3ZlS2V5ICh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQpCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKICAgICBLZXliUmVtb3ZlQWxsS2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIApAQCAtMTU0OCwxNyArMTA2NCwxNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lLgogICoKIC0qLwotQk9PTAorYm9vbAogQ0FSRGJBZGRfUE1LSURfQ2FuZGlkYXRlICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBQQllURSAgICAgICAgICAgIHBieUJTU0lELAotICAgIEJPT0wgICAgICAgICAgICAgYlJTTkNhcEV4aXN0LAotICAgIFdPUkQgICAgICAgICAgICAgd1JTTkNhcAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIGJvb2wgYlJTTkNhcEV4aXN0LAorICAgIHVuc2lnbmVkIHNob3J0IHdSU05DYXAKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBQUE1LSURfQ0FORElEQVRFICAgIHBDYW5kaWRhdGVMaXN0OwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWkgPSAwOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImJBZGRfUE1LSURfQ2FuZGlkYXRlIFNUQVJUOiAoJWQpXG4iLCAoaW50KXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyk7CiAKQEAgLTE1NzcsMTggKzEwOTMsMTggQEAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXM7IGlpKyspIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W2lpXTsKICAgICAgICAgaWYgKCAhbWVtY21wKHBDYW5kaWRhdGVMaXN0LT5CU1NJRCwgcGJ5QlNTSUQsIEVUSF9BTEVOKSkgewotICAgICAgICAgICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gVFJVRSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgeworICAgICAgICAgICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgewogICAgICAgICAgICAgICAgIHBDYW5kaWRhdGVMaXN0LT5GbGFncyB8PSBORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwQ2FuZGlkYXRlTGlzdC0+RmxhZ3MgJj0gfihORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfUFJFQVVUSF9FTkFCTEVEKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOZXcgQ2FuZGlkYXRlCiAgICAgcENhbmRpZGF0ZUxpc3QgPSAmcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5DYW5kaWRhdGVMaXN0W3BEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlc107Ci0gICAgaWYgKChiUlNOQ2FwRXhpc3QgPT0gVFJVRSkgJiYgKHdSU05DYXAgJiBCSVQwKSkgeworICAgIGlmICgoYlJTTkNhcEV4aXN0ID09IHRydWUpICYmICh3UlNOQ2FwICYgQklUMCkpIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzIHw9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7CkBAIC0xNTk2LDcgKzExMTIsNyBAQAogICAgIG1lbWNweShwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTik7CiAgICAgcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKys7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJOdW1DYW5kaWRhdGVzOiVkXG4iLCAoaW50KXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgKgpAQCAtMTYwOSw4OSArMTEyNSw2IEBACiAgICAgcmV0dXJuIChwRGV2aWNlLT5hYnlDdXJyZW50TmV0QWRkcik7CiB9CiAKLQotCi12b2lkIENBUkR2SW5pdENoYW5uZWxUYWJsZSAodm9pZCAqcERldmljZUhhbmRsZXIpCi17Ci0gICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgQk9PTCAgICAgICAgYk11bHRpQmFuZCA9IEZBTFNFOwotICAgIFVJTlQgICAgICAgIGlpOwotCi0gICAgZm9yKGlpPTE7aWk8PUNBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9IEZBTFNFOwotICAgIH0KLQotICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKLSAgICAgICAgY2FzZSBSRl9SRk1EMjk1OSA6Ci0gICAgICAgIGNhc2UgUkZfQUlST0hBIDoKLSAgICAgICAgY2FzZSBSRl9BTDIyMzBTOgotICAgICAgICBjYXNlIFJGX1VXMjQ1MSA6Ci0gICAgICAgIGNhc2UgUkZfVlQzMjI2IDoKLQkvLwkJcHJpbnRrKCJjaGVzdGVyLWZhbHNlXG4iKTsKLSAgICAgICAgICAgIGJNdWx0aUJhbmQgPSBGQUxTRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJGX0FJUk9IQTcyMzAgOgotICAgICAgICBjYXNlIFJGX1VXMjQ1MiA6Ci0gICAgICAgIGNhc2UgUkZfTk9USElORyA6Ci0gICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYk11bHRpQmFuZCA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHx8Ci0gICAgICAgIChwRGV2aWNlLT5iMTFoRW5hYmxlID09IFRSVUUpKSB7Ci0gICAgICAgIGlmIChiTXVsdGlCYW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IoaWk9MDtpaTxDSEFOTkVMX01BWF8yNEc7aWkrKykgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0hBTk5FTF9NQVhfMjRHO2lpKyspIHsKLS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgotIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKLSAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOwotIAl9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJ5Wm9uZVR5cGUgPD0gQ0NPREVfTUFYKSB7Ci0gICAgICAgIGlmIChiTXVsdGlCYW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENBUkRfTUFYX0NIQU5ORUxfVEJMO2lpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENIQU5ORUxfTUFYXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8iWm9uZT1bJWRdWyVjXVslY10hIVxuIixwRGV2aWNlLT5ieVpvbmVUeXBlLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF0sQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uY2hDb3VudHJ5Q29kZVsxXSk7Ci0gICAgZm9yKGlpPTA7aWk8Q0FSRF9NQVhfQ0hBTk5FTF9UQkw7aWkrKykgewotICAgICAgICBpZiAocERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID09IDApIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9PSAwKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQogLyoKICAqCiAgKiBEZXNjcmlwdGlvbjoKQEAgLTE3MDYsMjcgKzExMzksMjcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiU3RhcnRNZWFzdXJlICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKICAgICB2b2lkICpwdk1lYXN1cmVFSURzLAotICAgIFVJTlQgICAgICAgICAgICAgdU51bU9mTWVhc3VyZUVJRHMKKyAgICB1bnNpZ25lZCBpbnQgdU51bU9mTWVhc3VyZUVJRHMKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgICAgICAgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAgICAgUFdMQU5fSUVfTUVBU1VSRV9SRVEgICAgcEVJRCA9IChQV0xBTl9JRV9NRUFTVVJFX1JFUSkgcHZNZWFzdXJlRUlEczsKICAgICBRV09SRCAgICAgICAgICAgICAgICAgICBxd0N1cnJUU0Y7CiAgICAgUVdPUkQgICAgICAgICAgICAgICAgICAgcXdTdGFydFRTRjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IFRSVUU7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0R1cmF0aW9uID0gMDsKKyAgICBib29sIGJFeHBpcmVkID0gdHJ1ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb24gPSAwOwogCiAgICAgaWYgKChwRUlEID09IE5VTEwpIHx8CiAgICAgICAgICh1TnVtT2ZNZWFzdXJlRUlEcyA9PSAwKSkgewotICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICByZXR1cm4gKHRydWUpOwogICAgIH0KICAgICBDQVJEYkdldEN1cnJlbnRUU0YocERldmljZS0+UG9ydE9mZnNldCwgJnF3Q3VyclRTRik7Ci0gICAgaWYgKHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9PSBUUlVFKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJNZWFzdXJlSW5Qcm9ncmVzcyA9IEZBTFNFOworICAgIGlmIChwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPT0gdHJ1ZSkgeworICAgICAgICBwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1JDUiwgcERldmljZS0+YnlPcmdSQ1IpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIFZOU3ZPdXRQb3J0RChwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19NQVIwLCBwRGV2aWNlLT5kd09yZ01BUjApOwpAQCAtMTczNCw3ICsxMTY3LDcgQEAKICAgICAgICAgLy8gY2xlYXIgbWVhc3VyZSBjb250cm9sCiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCBNU1JDVExfRU4pOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgIENBUkRiU2V0Q2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOworICAgICAgICBzZXRfY2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtMTc0OSw3ICsxMTgyLDcgQEAKICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA+IFJFVl9JRF9WVDMyNTNfQjEpIHsKICAgICAgICAgICAgIEhJRFdPUkQocXdTdGFydFRTRikgPSBISURXT1JEKCooKFBRV09SRCkgKHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRC0+c1JlcS5hYnlTdGFydFRpbWUpKSk7CiAgICAgICAgICAgICBMT0RXT1JEKHF3U3RhcnRUU0YpID0gTE9EV09SRCgqKChQUVdPUkQpIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5U3RhcnRUaW1lKSkpOwotICAgICAgICAgICAgd0R1cmF0aW9uID0gKigoUFdPUkQpIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKKyAgICAgICAgICAgIHdEdXJhdGlvbiA9ICooKHVuc2lnbmVkIHNob3J0ICopIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKICAgICAgICAgICAgIHdEdXJhdGlvbiArPSAxOyAvLyAxIFRVIGZvciBjaGFubmVsIHN3aXRjaGluZwogCiAgICAgICAgICAgICBpZiAoKExPRFdPUkQocXdTdGFydFRTRikgPT0gMCkgJiYgKEhJRFdPUkQocXdTdGFydFRTRikgPT0gMCkpIHsKQEAgLTE3NTksNyArMTE5Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgKExPRFdPUkQocXdDdXJyVFNGKSA+IExPRFdPUkQocXdTdGFydFRTRikpIHsKICAgICAgICAgICAgICAgICAgICAgSElEV09SRChxd1N0YXJ0VFNGKSsrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGJFeHBpcmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGF0IHNldHRpbmcgc3RhcnQgVFNGIC0gMVRVKGZvciBjaGFubmVsIHN3aXRjaGluZykKQEAgLTE3NzMsMTEgKzEyMDYsMTEgQEAKICAgICAgICAgICAgICAgICAoKEhJRFdPUkQocXdDdXJyVFNGKSA9PSBISURXT1JEKHF3U3RhcnRUU0YpKSAmJgogICAgICAgICAgICAgICAgIChMT0RXT1JEKHF3Q3VyclRTRikgPCBMT0RXT1JEKHF3U3RhcnRUU0YpKSkKICAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgICAgICBiRXhwaXJlZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGJFeHBpcmVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBWTlRXSUZJYk1lYXN1cmVSZXBvcnQoICBwRGV2aWNlLT5wTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRUFTVVJFX01PREVfTEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xNzg3LDcgKzEyMjAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gaGFyZHdhcmUgZG8gbm90IHN1cHBvcnQgbWVhc3VyZQogICAgICAgICAgICAgVk5UV0lGSWJNZWFzdXJlUmVwb3J0KCAgcERldmljZS0+cE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVBU1VSRV9NT0RFX0lOQ0FQQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xNzk3LDcgKzEyMzAsNyBAQAogICAgICAgICB9CiAgICAgfSB3aGlsZSAocERldmljZS0+dU51bU9mTWVhc3VyZUVJRHMgIT0gMCk7CiAKLSAgICBpZiAoYkV4cGlyZWQgPT0gRkFMU0UpIHsKKyAgICBpZiAoYkV4cGlyZWQgPT0gZmFsc2UpIHsKICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICBWTlN2T3V0UG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTVNSU1RBUlQsIExPRFdPUkQocXdTdGFydFRTRikpOwogICAgICAgICBWTlN2T3V0UG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTVNSU1RBUlQgKyA0LCBISURXT1JEKHF3U3RhcnRUU0YpKTsKQEAgLTE4MDcsNyArMTI0MCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gYWxsIG1lYXN1cmUgc3RhcnQgdGltZSBleHBpcmVkIHdlIHNob3VsZCBjb21wbGV0ZSBhY3Rpb24KICAgICAgICAgVk5UV0lGSWJNZWFzdXJlUmVwb3J0KCAgcERldmljZS0+cE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAsCkBAIC0xODE1LDcgKzEyNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSUElzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCkBAIC0xODMzLDE5ICsxMjY2LDE5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBDQVJEYkNoYW5uZWxTd2l0Y2ggKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJZVEUgICAgICAgICAgICAgYnlNb2RlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlOZXdDaGFubmVsLAotICAgIEJZVEUgICAgICAgICAgICAgYnlDb3VudAorICAgIHVuc2lnbmVkIGNoYXIgYnlNb2RlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlOZXdDaGFubmVsLAorICAgIHVuc2lnbmVkIGNoYXIgYnlDb3VudAogICAgICkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBCT09MICAgICAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBib29sIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgaWYgKGJ5Q291bnQgPT0gMCkgewotICAgICAgICBiUmVzdWx0ID0gQ0FSRGJTZXRDaGFubmVsKHBEZXZpY2UsIGJ5TmV3Q2hhbm5lbCk7CisgICAgICAgIGJSZXN1bHQgPSBzZXRfY2hhbm5lbChwRGV2aWNlLCBieU5ld0NoYW5uZWwpOwogICAgICAgICBWTlRXSUZJYkNoYW5uZWxTd2l0Y2gocERldmljZS0+cE1nbXQsIGJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX01TUkNUTCsxLCBNU1JDVEwxX1RYUEFVU0UpOwpAQCAtMTg1NCw3ICsxMjg3LDcgQEAKICAgICB9CiAgICAgcERldmljZS0+YnlDaGFubmVsU3dpdGNoQ291bnQgPSBieUNvdW50OwogICAgIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCA9IGJ5TmV3Q2hhbm5lbDsKLSAgICBwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9IFRSVUU7CisgICAgcERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPSB0cnVlOwogICAgIGlmIChieU1vZGUgPT0gMSkgewogICAgICAgICBiUmVzdWx0PUNBUkRiU3RvcFR4UGFja2V0KHBEZXZpY2UsIFBLVF9UWVBFXzgwMl8xMV9BTEwpOwogICAgIH0KQEAgLTE4NzYsMzQgKzEzMDksMzQgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIENBUkRiU2V0UXVpZXQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJPT0wgICAgICAgICAgICAgYlJlc2V0UXVpZXQsCi0gICAgQllURSAgICAgICAgICAgICBieVF1aWV0Q291bnQsCi0gICAgQllURSAgICAgICAgICAgICBieVF1aWV0UGVyaW9kLAotICAgIFdPUkQgICAgICAgICAgICAgd1F1aWV0RHVyYXRpb24sCi0gICAgV09SRCAgICAgICAgICAgICB3UXVpZXRPZmZzZXQKKyAgICBib29sIGJSZXNldFF1aWV0LAorICAgIHVuc2lnbmVkIGNoYXIgYnlRdWlldENvdW50LAorICAgIHVuc2lnbmVkIGNoYXIgYnlRdWlldFBlcmlvZCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UXVpZXREdXJhdGlvbiwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UXVpZXRPZmZzZXQKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7Ci0gICAgVUlOVCAgICAgICAgaWkgPSAwOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAKLSAgICBpZiAoYlJlc2V0UXVpZXQgPT0gVFJVRSkgeworICAgIGlmIChiUmVzZXRRdWlldCA9PSB0cnVlKSB7CiAgICAgICAgIE1BQ3ZSZWdCaXRzT2ZmKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCAoTVNSQ1RMX1FVSUVUVFhDSEsgfCBNU1JDVExfUVVJRVRFTikpOwogICAgICAgICBmb3IoaWk9MDtpaTxNQVhfUVVJRVRfQ09VTlQ7aWkrKykgewotICAgICAgICAgICAgcERldmljZS0+c1F1aWV0W2lpXS5iRW5hYmxlID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbaWldLmJFbmFibGUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBwRGV2aWNlLT51UXVpZXRFbnF1ZXVlID0gMDsKLSAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBGQUxTRTsKLSAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudCA9IGJ5UXVpZXRDb3VudDsKICAgICB9Ci0gICAgaWYgKHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5iRW5hYmxlID09IEZBTFNFKSB7Ci0gICAgICAgIHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5iRW5hYmxlID0gVFJVRTsKKyAgICBpZiAocERldmljZS0+c1F1aWV0W3BEZXZpY2UtPnVRdWlldEVucXVldWVdLmJFbmFibGUgPT0gZmFsc2UpIHsKKyAgICAgICAgcERldmljZS0+c1F1aWV0W3BEZXZpY2UtPnVRdWlldEVucXVldWVdLmJFbmFibGUgPSB0cnVlOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uYnlQZXJpb2QgPSBieVF1aWV0UGVyaW9kOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0ud0R1cmF0aW9uID0gd1F1aWV0RHVyYXRpb247Ci0gICAgICAgIHBEZXZpY2UtPnNRdWlldFtwRGV2aWNlLT51UXVpZXRFbnF1ZXVlXS5kd1N0YXJ0VGltZSA9IChEV09SRCkgYnlRdWlldENvdW50OworICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgPSAodW5zaWduZWQgbG9uZykgYnlRdWlldENvdW50OwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgKj0gcERldmljZS0+d0JlYWNvbkludGVydmFsOwogICAgICAgICBwRGV2aWNlLT5zUXVpZXRbcERldmljZS0+dVF1aWV0RW5xdWV1ZV0uZHdTdGFydFRpbWUgKz0gd1F1aWV0T2Zmc2V0OwogICAgICAgICBwRGV2aWNlLT51UXVpZXRFbnF1ZXVlKys7CkBAIC0xOTE0LDcgKzEzNDcsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIHdlIGNhbiBub3QgaGFuZGxlIFF1aWV0IEVJRCBtb3JlCiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCkBAIC0xOTMyLDIxICsxMzY1LDIxIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBDQVJEYlN0YXJ0UXVpZXQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIGlpID0gMDsKLSAgICBEV09SRCAgICAgICBkd1N0YXJ0VGltZSA9IDB4RkZGRkZGRkY7Ci0gICAgVUlOVCAgICAgICAgdUN1cnJlbnRRdWlldEluZGV4ID0gMDsKLSAgICBEV09SRCAgICAgICBkd05leHRUaW1lID0gMDsKLSAgICBEV09SRCAgICAgICBkd0dhcCA9IDA7Ci0gICAgRFdPUkQgICAgICAgZHdEdXJhdGlvbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGlpID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3U3RhcnRUaW1lID0gMHhGRkZGRkZGRjsKKyAgICB1bnNpZ25lZCBpbnQgdUN1cnJlbnRRdWlldEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3TmV4dFRpbWUgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdHYXAgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdEdXJhdGlvbiA9IDA7CiAKICAgICBmb3IoaWk9MDtpaTxNQVhfUVVJRVRfQ09VTlQ7aWkrKykgewotICAgICAgICBpZiAoKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSBUUlVFKSAmJgorICAgICAgICBpZiAoKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSB0cnVlKSAmJgogICAgICAgICAgICAgKGR3U3RhcnRUaW1lID4gcERldmljZS0+c1F1aWV0W2lpXS5kd1N0YXJ0VGltZSkpIHsKICAgICAgICAgICAgIGR3U3RhcnRUaW1lID0gcERldmljZS0+c1F1aWV0W2lpXS5kd1N0YXJ0VGltZTsKICAgICAgICAgICAgIHVDdXJyZW50UXVpZXRJbmRleCA9IGlpOwpAQCAtMTk1NCwyMiArMTM4NywyMiBAQAogICAgIH0KICAgICBpZiAoZHdTdGFydFRpbWUgPT0gMHhGRkZGRkZGRikgewogICAgICAgICAvLyBubyBtb3JlIHF1aWV0Ci0gICAgICAgIHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iUXVpZXRFbmFibGUgPSBmYWxzZTsKICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIChNU1JDVExfUVVJRVRUWENISyB8IE1TUkNUTF9RVUlFVEVOKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJRdWlldEVuYWJsZSA9PSBGQUxTRSkgeworICAgICAgICBpZiAocERldmljZS0+YlF1aWV0RW5hYmxlID09IGZhbHNlKSB7CiAgICAgICAgICAgICAvLyBmaXJzdCBxdWlldAogICAgICAgICAgICAgcERldmljZS0+YnlRdWlldFN0YXJ0Q291bnQtLTsKICAgICAgICAgICAgIGR3TmV4dFRpbWUgPSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5kd1N0YXJ0VGltZTsKICAgICAgICAgICAgIGR3TmV4dFRpbWUgJT0gcERldmljZS0+d0JlYWNvbkludGVydmFsOwogICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVUSU5JVCwgKFdPUkQpIGR3TmV4dFRpbWUpOwotICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVURFVSLCAoV09SRCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0ud0R1cmF0aW9uKTsKKyAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVElOSVQsICh1bnNpZ25lZCBzaG9ydCkgZHdOZXh0VGltZSk7CisgICAgICAgICAgICBWTlN2T3V0UG9ydFcocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfUVVJRVREVVIsICh1bnNpZ25lZCBzaG9ydCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0ud0R1cmF0aW9uKTsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5ieVF1aWV0U3RhcnRDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIChNU1JDVExfUVVJRVRUWENISyB8IE1TUkNUTF9RVUlFVEVOKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVGaXJzdFF1aWV0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTc3LDggKzE0MTAsOCBAQAogICAgICAgICAgICAgICAgIC8vIG92ZXJsYXAgd2l0aCBwcmV2aW91cyBRdWlldAogICAgICAgICAgICAgICAgIGR3R2FwID0gIHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSAtIHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLmR3U3RhcnRUaW1lOwogICAgICAgICAgICAgICAgIGlmIChkd0dhcCA+PSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS53RHVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIG5leHQgcXVpZXQgZXhwaXJlZCwgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhbHNlIHRvIGluZGljYXRlIG5leHQgcXVpZXQgZXhwaXJlZCwgc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2FpbgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZHdEdXJhdGlvbiA9IHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLndEdXJhdGlvbiAtIGR3R2FwOwogICAgICAgICAgICAgICAgIGR3R2FwID0gMDsKQEAgLTE5ODgsOTQgKzE0MjEsMzQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIHNldCBHQVAgYW5kIE5leHQgZHVyYXRpb24KICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVEdBUCwgKFdPUkQpIGR3R2FwKTsKLSAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVERVUiwgKFdPUkQpIGR3RHVyYXRpb24pOworICAgICAgICAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1FVSUVUR0FQLCAodW5zaWduZWQgc2hvcnQpIGR3R2FwKTsKKyAgICAgICAgICAgIFZOU3ZPdXRQb3J0VyhwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19RVUlFVERVUiwgKHVuc2lnbmVkIHNob3J0KSBkd0R1cmF0aW9uKTsKICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIE1TUkNUTF9RVUlFVFJQVCk7CiAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YlF1aWV0RW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcERldmljZS0+ZHdDdXJyZW50UXVpZXRFbmRUaW1lID0gcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0uZHdTdGFydFRpbWU7CiAgICAgICAgIHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSArPSBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS53RHVyYXRpb247CiAgICAgICAgIGlmIChwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5ieVBlcmlvZCA9PSAwKSB7CiAgICAgICAgICAgICAvLyBub3QgcGVyaW9kIGRpc2FibGUgY3VycmVudCBxdWlldCBlbGVtZW50Ci0gICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5iRW5hYmxlID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5iRW5hYmxlID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBzZXQgbmV4dCBwZXJpb2Qgc3RhcnQgdGltZQotICAgICAgICAgICAgZHdOZXh0VGltZSA9IChEV09SRCkgcERldmljZS0+c1F1aWV0W3VDdXJyZW50UXVpZXRJbmRleF0uYnlQZXJpb2Q7CisgICAgICAgICAgICBkd05leHRUaW1lID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2UtPnNRdWlldFt1Q3VycmVudFF1aWV0SW5kZXhdLmJ5UGVyaW9kOwogICAgICAgICAgICAgZHdOZXh0VGltZSAqPSBwRGV2aWNlLT53QmVhY29uSW50ZXJ2YWw7CiAgICAgICAgICAgICBwRGV2aWNlLT5zUXVpZXRbdUN1cnJlbnRRdWlldEluZGV4XS5kd1N0YXJ0VGltZSA9IGR3TmV4dFRpbWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBEZXZpY2UtPmR3Q3VycmVudFF1aWV0RW5kVGltZSA+IDB4ODAwMTAwMDApIHsKICAgICAgICAgICAgIC8vIGRlY3JlYW1lbnQgYWxsIHRpbWUgdG8gYXZvaWQgd3JhcCBhcm91bmQKICAgICAgICAgICAgIGZvcihpaT0wO2lpPE1BWF9RVUlFVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnNRdWlldFtpaV0uYkVuYWJsZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNRdWlldFtpaV0uZHdTdGFydFRpbWUgLT0gMHg4MDAwMDAwMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwRGV2aWNlLT5kd0N1cnJlbnRRdWlldEVuZFRpbWUgLT0gMHg4MDAwMDAwMDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKFRSVUUpOwotfQotCi0KLS8qCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBTZXQgQ2hhbm5lbCBJbmZvIG9mIENvdW50cnkKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICogIEluOgotICogICAgICBoRGV2aWNlQ29udGV4dCAtIGRldmljZSBzdHJ1Y3R1cmUgcG9pbnQKLSAqICBPdXQ6Ci0gKiAgICAgIG5vbmUKLSAqCi0gKiBSZXR1cm4gVmFsdWU6IG5vbmUuCi0gKgotLSovCi12b2lkCi1DQVJEdlNldENvdW50cnlJbmZvICgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBDQVJEX1BIWV9UWVBFICAgIGVQSFlUeXBlLAotICAgIHZvaWQgKnBJRQotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWkgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdXUgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgc3RlcCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1TnVtT2ZDb3VudHJ5SW5mbyA9IDA7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNoID0gMDsKLSAgICBQV0xBTl9JRV9DT1VOVFJZICAgIHBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpIHBJRTsKLQotCi0gICAgdU51bU9mQ291bnRyeUluZm8gPSAocElFX0NvdW50cnktPmxlbiAtIDMpOwotICAgIHVOdW1PZkNvdW50cnlJbmZvIC89IDM7Ci0KLSAgICBpZiAoZVBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJDb3VudHJ5SW5mbzVHID0gVFJVRTsKLSAgICAgICAgZm9yKGlpPUNCX01BWF9DSEFOTkVMXzI0RysxO2lpPD1DQVJEX01BWF9DSEFOTkVMX1RCTDtpaSsrKSB7Ci0gICAgICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RlcCA9IDQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcERldmljZS0+YkNvdW50cnlJbmZvMjRHID0gVFJVRTsKLSAgICAgICAgZm9yKGlpPTE7aWk8PUNCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RlcCA9IDE7Ci0gICAgfQotICAgIHBEZXZpY2UtPmFieUNvdW50cnlDb2RlWzBdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMF07Ci0gICAgcERldmljZS0+YWJ5Q291bnRyeUNvZGVbMV0gPSBwSUVfQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1sxXTsKLSAgICBwRGV2aWNlLT5hYnlDb3VudHJ5Q29kZVsyXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5U3RyaW5nWzJdOwotCi0gICAgZm9yKGlpPTA7aWk8dU51bU9mQ291bnRyeUluZm87aWkrKykgewotICAgICAgICBmb3IodXU9MDt1dTxwSUVfQ291bnRyeS0+YWJ5Q291bnRyeUluZm9baWkqMysxXTt1dSsrKSB7Ci0gICAgICAgICAgICBieUNoID0gQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocERldmljZSwgKEJZVEUpKHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5SW5mb1tpaSozXStzdGVwKnV1KSwgZVBIWVR5cGUpOwotICAgICAgICAgICAgc0NoYW5uZWxUYmxbYnlDaF0uYlZhbGlkID0gVFJVRTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieVJlZ1B3cltieUNoXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5SW5mb1tpaSozKzJdOwotICAgICAgICB9Ci0gICAgfQorICAgIHJldHVybiAodHJ1ZSk7CiB9CiAKIC8qCkBAIC0yMDk1LDE4ICsxNDY4LDE4IEBACiB2b2lkCiBDQVJEdlNldFBvd2VyQ29uc3RyYWludCAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgQllURSAgICAgICAgICAgICBieUNoYW5uZWwsCi0gICAgSTggICAgICAgICAgICAgICBieVBvd2VyCisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWwsCisgICAgY2hhciBieVBvd2VyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogCiAgICAgaWYgKGJ5Q2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgewotICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvNUcgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvNUcgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcERldmljZS0+YWJ5TG9jYWxQd3JbYnlDaGFubmVsXSA9IHBEZXZpY2UtPmFieVJlZ1B3cltieUNoYW5uZWxdIC0gYnlQb3dlcjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iQ291bnRyeUluZm8yNEcgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YkNvdW50cnlJbmZvMjRHID09IHRydWUpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmFieUxvY2FsUHdyW2J5Q2hhbm5lbF0gPSBwRGV2aWNlLT5hYnlSZWdQd3JbYnlDaGFubmVsXSAtIGJ5UG93ZXI7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTMwLDEyICsxNTAzLDEyIEBACiB2b2lkCiBDQVJEdkdldFBvd2VyQ2FwYWJpbGl0eSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgICAgIHBieU1pblBvd2VyLAotICAgIFBCWVRFICAgICAgICAgICBwYnlNYXhQb3dlcgorICAgIHVuc2lnbmVkIGNoYXIgKnBieU1pblBvd2VyLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieU1heFBvd2VyCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgICAgICAgIGJ5RGVjID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGVjID0gMDsKIAogICAgICpwYnlNYXhQb3dlciA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW3BEZXZpY2UtPmJ5Q3VycmVudENoXTsKICAgICBieURlYyA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbcERldmljZS0+YnlDdXJyZW50Q2hdOwpAQCAtMjE0OCw5OCArMTUyMSw2IEBACiAgICAgKnBieU1pblBvd2VyID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbcERldmljZS0+YnlDdXJyZW50Q2hdIC0gYnlEZWM7CiB9CiAKLQotLyoKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIFNldCBTdXBwb3J0IENoYW5uZWxzIElFIGRlZmluZWQgaW4gODAyLjExaAotICoKLSAqIFBhcmFtZXRlcnM6Ci0gKiAgSW46Ci0gKiAgICAgIGhEZXZpY2VDb250ZXh0IC0gZGV2aWNlIHN0cnVjdHVyZSBwb2ludAotICogIE91dDoKLSAqICAgICAgbm9uZQotICoKLSAqIFJldHVybiBWYWx1ZTogbm9uZS4KLSAqCi0tKi8KLUJZVEUKLUNBUkRieVNldFN1cHBvcnRDaGFubmVscyAoCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgIHBieUlFcwotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUNvdW50OwotICAgIFBXTEFOX0lFX1NVUFBfQ0ggICAgcElFID0gKFBXTEFOX0lFX1NVUFBfQ0gpIHBieUlFczsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieUNoVHVwcGxlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlMZW4gPSAwOwotCi0KLSAgICBwSUUtPmJ5RWxlbWVudElEID0gV0xBTl9FSURfU1VQUF9DSDsKLSAgICBwSUUtPmxlbiA9IDA7Ci0gICAgcGJ5Q2hUdXBwbGUgPSBwSUUtPmFieUNoYW5uZWxUdXBsZTsKLSAgICBieUxlbiA9IDI7Ci0gICAgLy8gbG93ZXIgYmFuZAotICAgIGJ5Q291bnQgPSAwOwotICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMjhdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT0yODtpaTwzNjtpaSs9MikgewotICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIGJ5Q291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IDM0OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfSBlbHNlIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMjldID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT0yOTtpaTwzNjtpaSs9MikgewotICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gVFJVRSkgewotICAgICAgICAgICAgICAgIGJ5Q291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IDM2OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfQotICAgIC8vIG1pZGRsZSBiYW5kCi0gICAgYnlDb3VudCA9IDA7Ci0gICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFszNl0gPT0gVFJVRSkgewotICAgICAgICBmb3IgKGlpPTM2O2lpPDQwO2lpKyspIHsKLSAgICAgICAgICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICBieUNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgKnBieUNoVHVwcGxlKysgPSA1MjsKLSAgICAgICAgKnBieUNoVHVwcGxlKysgPSBieUNvdW50OwotICAgICAgICBieUxlbiArPSAyOwotICAgIH0KLSAgICAvLyBoaWdoZXIgYmFuZAotICAgIGJ5Q291bnQgPSAwOwotICAgIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNDBdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT00MDtpaTw1MTtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgYnlDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICpwYnlDaFR1cHBsZSsrID0gMTAwOwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfSBlbHNlIGlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNTFdID09IFRSVUUpIHsKLSAgICAgICAgZm9yIChpaT01MTtpaTw1NjtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgYnlDb3VudCsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICpwYnlDaFR1cHBsZSsrID0gMTQ5OwotICAgICAgICAqcGJ5Q2hUdXBwbGUrKyA9IGJ5Q291bnQ7Ci0gICAgICAgIGJ5TGVuICs9IDI7Ci0gICAgfQotICAgIHBJRS0+bGVuICs9IChieUxlbiAtIDIpOwotICAgIHJldHVybiAoYnlMZW4pOwotfQotCi0KIC8qCiAgKgogICogRGVzY3JpcHRpb246CkBAIC0yMjUzLDggKzE1MzQsOCBAQAogICoKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCi0tKi8KLUk4CisgKi8KK2NoYXIKIENBUkRieUdldFRyYW5zbWl0UG93ZXIgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKQpAQCAtMjI2NCwxNjEgKzE1NDUsNiBAQAogICAgIHJldHVybiAocERldmljZS0+YnlDdXJQd3JkQm0pOwogfQogCi0KLUJPT0wKLUNBUkRiQ2hhbm5lbEdldExpc3QgKAotICAgICBVSU5UICAgICAgIHVDb3VudHJ5Q29kZUlkeCwKLSAgICBQQllURSAgICAgIHBieUNoYW5uZWxUYWJsZQotICAgICkKLXsKLSAgICBpZiAodUNvdW50cnlDb2RlSWR4ID49IENDT0RFX01BWCkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKLSAgICB9Ci0gICAgbWVtY3B5KHBieUNoYW5uZWxUYWJsZSwgQ2hhbm5lbFJ1bGVUYWJbdUNvdW50cnlDb2RlSWR4XS5iQ2hhbm5lbElkeExpc3QsIENCX01BWF9DSEFOTkVMKTsKLSAgICByZXR1cm4gKFRSVUUpOwotfQotCi0KLXZvaWQKLUNBUkR2U2V0Q291bnRyeUlFKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIHZvaWQgKnBJRQotICAgICkKLXsKLSAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgUFdMQU5fSUVfQ09VTlRSWSAgICBwSUVDb3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpIHBJRTsKLQotICAgIHBJRUNvdW50cnktPmJ5RWxlbWVudElEID0gV0xBTl9FSURfQ09VTlRSWTsKLSAgICBwSUVDb3VudHJ5LT5sZW4gPSAwOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMF0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzBdOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzFdOwotICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMl0gPSAnICc7Ci0gICAgZm9yIChpaSA9IENCX01BWF9DSEFOTkVMXzI0RzsgaWkgPCBDQl9NQVhfQ0hBTk5FTDsgaWkrKyApIHsKLSAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gc0NoYW5uZWxUYmxbaWkrMV0uYnlDaGFubmVsTnVtYmVyOwotICAgICAgICAgICAgcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gMTsKLSAgICAgICAgICAgIHBJRUNvdW50cnktPmFieUNvdW50cnlJbmZvW3BJRUNvdW50cnktPmxlbisrXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwotICAgICAgICB9Ci0gICAgfQotICAgIHBJRUNvdW50cnktPmxlbiArPSAzOwotfQotCi0KLUJPT0wKLUNBUkRiR2V0Q2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgVUlOVCAgICAgICAgIHVDaGFubmVsSW5kZXgsCi0gICAgUEJZVEUgICAgICAgcGJ5Q2hhbm5lbE51bWJlciwKLSAgICBQQllURSAgICAgICBwYnlNYXAKLSAgICApCi17Ci0vLyAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotCi0gICAgaWYgKHVDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgewotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgfQotICAgICpwYnlDaGFubmVsTnVtYmVyID0gc0NoYW5uZWxUYmxbdUNoYW5uZWxJbmRleF0uYnlDaGFubmVsTnVtYmVyOwotICAgICpwYnlNYXAgPSBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieU1BUDsKLSAgICByZXR1cm4gc0NoYW5uZWxUYmxbdUNoYW5uZWxJbmRleF0uYlZhbGlkOwotfQotCi0KLXZvaWQKLUNBUkR2U2V0Q2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgVUlOVCAgICAgICAgIHVDaGFubmVsSW5kZXgsCi0gICAgQllURSAgICAgICAgIGJ5TWFwCi0gICAgKQotewotLy8gICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLQotICAgIGlmICh1Q2hhbm5lbEluZGV4ID4gQ0JfTUFYX0NIQU5ORUwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieU1BUCB8PSBieU1hcDsKLX0KLQotCi12b2lkCi1DQVJEdkNsZWFyQ2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIKLSAgICApCi17Ci0vLyAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICBpaSA9IDA7Ci0KLSAgICBmb3IgKGlpID0gMTsgaWkgPD0gIENCX01BWF9DSEFOTkVMOyBpaSsrKSB7Ci0gICAgICAgIHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9IDA7Ci0gICAgfQotfQotCi0KLUJZVEUKLUNBUkRieUF1dG9DaGFubmVsU2VsZWN0KAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIENBUkRfUEhZX1RZUEUgICBlUEhZVHlwZQotICAgICkKLXsKLS8vICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICAgICAgaWkgPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieU9wdGlvbkNoYW5uZWwgPSAwOwotICAgIElOVCAgICAgICAgICAgICBhaVdlaWdodFtDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSB7LTEwMDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfTsKLQotICAgIGlmIChlUEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKLSAgICAgICAgZm9yKGlpPUNCX01BWF9DSEFOTkVMXzI0RysxO2lpPD1DQl9NQVhfQ0hBTk5FTDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5T3B0aW9uQ2hhbm5lbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKEJZVEUpIGlpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhKHNDaGFubmVsVGJsW2lpXS5ieU1BUCAmIDB4MDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBieU9wdGlvbkNoYW5uZWwgPSAwOwotICAgICAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKLSAgICAgICAgICAgIGlmIChzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc0NoYW5uZWxUYmxbaWldLmJ5TUFQID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWldICs9IDEwMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCAmIDB4MDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMykgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktM10gLT0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktMl0gLT0gMjA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWktMV0gLT0gNDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWldIC09IDgwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFpV2VpZ2h0W2lpKzFdIC09IDQwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpaSA8IChDQl9NQVhfQ0hBTk5FTF8yNEcgLSAxKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWlXZWlnaHRbaWkrMl0gLT0gMjA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgKENCX01BWF9DSEFOTkVMXzI0RyAtIDIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhaVdlaWdodFtpaSszXSAtPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKLSAgICAgICAgICAgIGlmICgoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSBUUlVFKSAmJgotICAgICAgICAgICAgICAgIChhaVdlaWdodFtpaV0gPiBhaVdlaWdodFtieU9wdGlvbkNoYW5uZWxdKSkgewotICAgICAgICAgICAgICAgIGJ5T3B0aW9uQ2hhbm5lbCA9IChCWVRFKSBpaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gKGJ5T3B0aW9uQ2hhbm5lbCk7Ci19Ci0KLQotCiAvL3h4eAogdm9pZAogQ0FSRHZTYWZlUmVzZXRUeCAoCkBAIC0yNDI2LDcgKzE1NTIsNyBAQAogICAgICkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UICAgICAgICB1dTsKKyAgICB1bnNpZ25lZCBpbnQgdXU7CiAgICAgUFNUeERlc2MgICAgcEN1cnJURDsKIAogICAgIC8vIGluaXRpYWxpemUgVEQgaW5kZXgKQEAgLTI0ODIsNyArMTYwOCw3IEBACiAgICAgKQogewogICAgIFBTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIFVJTlQgICAgICAgIHV1OworICAgIHVuc2lnbmVkIGludCB1dTsKICAgICBQU1J4RGVzYyAgICBwRGVzYzsKIAogCkBAIC0yNDk0LDE3ICsxNjIwLDE3IEBACiAgICAgLy8gaW5pdCBzdGF0ZSwgYWxsIFJEIGlzIGNoaXAncwogICAgIGZvciAodXUgPSAwOyB1dSA8IHBEZXZpY2UtPnNPcHRzLm5SeERlc2NzMDsgdXUrKykgewogICAgICAgICBwRGVzYyA9JihwRGV2aWNlLT5hUkQwUmluZ1t1dV0pOwotICAgICAgICBwRGVzYy0+bV9yZDBSRDAud1Jlc0NvdW50ID0gKFdPUkQpKHBEZXZpY2UtPnJ4X2J1Zl9zeik7CisgICAgICAgIHBEZXNjLT5tX3JkMFJEMC53UmVzQ291bnQgPSAodW5zaWduZWQgc2hvcnQpKHBEZXZpY2UtPnJ4X2J1Zl9zeik7CiAgICAgICAgIHBEZXNjLT5tX3JkMFJEMC5mMU93bmVyPU9XTkVEX0JZX05JQzsKLSAgICAgICAgcERlc2MtPm1fcmQxUkQxLndSZXFDb3VudCA9IChXT1JEKShwRGV2aWNlLT5yeF9idWZfc3opOworICAgICAgICBwRGVzYy0+bV9yZDFSRDEud1JlcUNvdW50ID0gKHVuc2lnbmVkIHNob3J0KShwRGV2aWNlLT5yeF9idWZfc3opOwogICAgIH0KIAogICAgIC8vIGluaXQgc3RhdGUsIGFsbCBSRCBpcyBjaGlwJ3MKICAgICBmb3IgKHV1ID0gMDsgdXUgPCBwRGV2aWNlLT5zT3B0cy5uUnhEZXNjczE7IHV1KyspIHsKICAgICAgICAgcERlc2MgPSYocERldmljZS0+YVJEMVJpbmdbdXVdKTsKLSAgICAgICAgcERlc2MtPm1fcmQwUkQwLndSZXNDb3VudCA9IChXT1JEKShwRGV2aWNlLT5yeF9idWZfc3opOworICAgICAgICBwRGVzYy0+bV9yZDBSRDAud1Jlc0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KShwRGV2aWNlLT5yeF9idWZfc3opOwogICAgICAgICBwRGVzYy0+bV9yZDBSRDAuZjFPd25lcj1PV05FRF9CWV9OSUM7Ci0gICAgICAgIHBEZXNjLT5tX3JkMVJEMS53UmVxQ291bnQgPSAoV09SRCkocERldmljZS0+cnhfYnVmX3N6KTsKKyAgICAgICAgcERlc2MtPm1fcmQxUkQxLndSZXFDb3VudCA9ICh1bnNpZ25lZCBzaG9ydCkocERldmljZS0+cnhfYnVmX3N6KTsKICAgICB9CiAKICAgICBwRGV2aWNlLT5jYkRGQ0IgPSBDQl9NQVhfUlhfRlJBRzsKQEAgLTI1MzcsMTggKzE2NjMsMTggQEAKICAqIFJldHVybiBWYWx1ZTogcmVzcG9uc2UgQ29udHJvbCBmcmFtZSByYXRlCiAgKgogICovCi1XT1JEIENBUkR3R2V0Q0NLQ29udHJvbFJhdGUodm9pZCAqcERldmljZUhhbmRsZXIsIFdPUkQgd1JhdGVJZHgpCit1bnNpZ25lZCBzaG9ydCBDQVJEd0dldENDS0NvbnRyb2xSYXRlKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UIHVpID0gKFVJTlQpd1JhdGVJZHg7CisgICAgdW5zaWduZWQgaW50IHVpID0gKHVuc2lnbmVkIGludCkgd1JhdGVJZHg7CiAKICAgICB3aGlsZSAodWkgPiBSQVRFXzFNKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKChXT1JEKTEgPDwgdWkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFdPUkQpdWk7CisgICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKCh1bnNpZ25lZCBzaG9ydCkxIDw8IHVpKSkgeworICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydCl1aTsKICAgICAgICAgfQogICAgICAgICB1aSAtLTsKICAgICB9Ci0gICAgcmV0dXJuIChXT1JEKVJBVEVfMU07CisgICAgcmV0dXJuICh1bnNpZ25lZCBzaG9ydClSQVRFXzFNOwogfQogCiAvKgpAQCAtMjU2NCwxMCArMTY5MCwxMCBAQAogICogUmV0dXJuIFZhbHVlOiByZXNwb25zZSBDb250cm9sIGZyYW1lIHJhdGUKICAqCiAgKi8KLVdPUkQgQ0FSRHdHZXRPRkRNQ29udHJvbFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBXT1JEIHdSYXRlSWR4KQordW5zaWduZWQgc2hvcnQgQ0FSRHdHZXRPRkRNQ29udHJvbFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBVSU5UIHVpID0gKFVJTlQpd1JhdGVJZHg7CisgICAgdW5zaWduZWQgaW50IHVpID0gKHVuc2lnbmVkIGludCkgd1JhdGVJZHg7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJBU0lDIFJBVEU6ICVYXG4iLCBwRGV2aWNlLT53QmFzaWNSYXRlKTsKIApAQCAtMjU3OCwxNCArMTcwNCwxNCBAQAogICAgICAgICByZXR1cm4gd1JhdGVJZHg7CiAgICAgfQogICAgIHdoaWxlICh1aSA+IFJBVEVfMTFNKSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKChXT1JEKTEgPDwgdWkpKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT53QmFzaWNSYXRlICYgKCh1bnNpZ25lZCBzaG9ydCkxIDw8IHVpKSkgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJDQVJEd0dldE9GRE1Db250cm9sUmF0ZSA6ICVkXG4iLCB1aSk7Ci0gICAgICAgICAgICByZXR1cm4gKFdPUkQpdWk7CisgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIHNob3J0KXVpOwogICAgICAgICB9CiAgICAgICAgIHVpIC0tOwogICAgIH0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkNBUkR3R2V0T0ZETUNvbnRyb2xSYXRlOiA2TVxuIik7Ci0gICAgcmV0dXJuIChXT1JEKVJBVEVfMjRNOworICAgIHJldHVybiAodW5zaWduZWQgc2hvcnQpUkFURV8yNE07CiB9CiAKIApAQCAtMjYwNCw5ICsxNzMwLDkgQEAKIHZvaWQgQ0FSRHZTZXRSU1BJTkYgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlKQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgIGJ5U2VydiA9IDB4MDAsIGJ5U2lnbmFsID0gMHgwMDsgLy9Gb3IgQ0NLCi0gICAgV09SRCAgd0xlbiA9IDB4MDAwMDsKLSAgICBCWVRFICBieVR4UmF0ZSwgYnlSc3ZUaW1lOyAgICAgICAgICAgICAvL0ZvciBPRkRNCisgICAgdW5zaWduZWQgY2hhciBieVNlcnYgPSAweDAwLCBieVNpZ25hbCA9IDB4MDA7IC8vRm9yIENDSworICAgIHVuc2lnbmVkIHNob3J0IHdMZW4gPSAweDAwMDA7CisgICAgdW5zaWduZWQgY2hhciBieVR4UmF0ZSwgYnlSc3ZUaW1lOyAgICAgICAgICAgICAvL0ZvciBPRkRNCiAKICAgICAvL1NldCB0byBQYWdlMQogICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKQEAgLTI3MzEsNyArMTg1Nyw3IEBACiAgICAgLy9TZXQgU0lGUywgRElGUywgRUlGUywgU2xvdFRpbWUsIEN3TWluCiAgICAgUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKLSAgICBCWVRFIGJ5TWF4TWluID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWF4TWluID0gMDsKICAgICBpZiAocERldmljZS0+YnlQYWNrZXRUeXBlPT1QS19UWVBFXzExQSkgey8vMDAwMCAwMDAwIDAwMDAgMDAwMCwxMWEKICAgICAgICAgcERldmljZS0+dVNsb3QgPSBDX1NMT1RfU0hPUlQ7CiAgICAgICAgIHBEZXZpY2UtPnVTSUZTID0gQ19TSUZTX0E7CkBAIC0yNzY4LDI3ICsxODk0LDI3IEBACiAgICAgcERldmljZS0+dUVJRlMgPSBDX0VJRlM7CiAgICAgaWYgKHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX1JGTUQyOTU5KSB7CiAgICAgICAgIC8vIGJjcyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cwotICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfU0lGUywgKEJZVEUpKHBEZXZpY2UtPnVTSUZTIC0gMykpOwotICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRElGUywgKEJZVEUpKHBEZXZpY2UtPnVESUZTIC0gMykpOworICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfU0lGUywgKHVuc2lnbmVkIGNoYXIpKHBEZXZpY2UtPnVTSUZTIC0gMykpOworICAgICAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRElGUywgKHVuc2lnbmVkIGNoYXIpKHBEZXZpY2UtPnVESUZTIC0gMykpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TSUZTLCAoQllURSlwRGV2aWNlLT51U0lGUyk7Ci0gICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ESUZTLCAoQllURSlwRGV2aWNlLT51RElGUyk7CisgICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TSUZTLCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51U0lGUyk7CisgICAgICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19ESUZTLCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51RElGUyk7CiAgICAgfQotICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19FSUZTLCAoQllURSlwRGV2aWNlLT51RUlGUyk7Ci0gICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1NMT1QsIChCWVRFKXBEZXZpY2UtPnVTbG90KTsKKyAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfRUlGUywgKHVuc2lnbmVkIGNoYXIpcERldmljZS0+dUVJRlMpOworICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19TTE9ULCAodW5zaWduZWQgY2hhcilwRGV2aWNlLT51U2xvdCk7CiAgICAgYnlNYXhNaW4gfD0gMHhBMDsvLzEwMTAgMTExMSxDX0NXTUFYID0gMTAyMwotICAgIFZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19DV01BWE1JTjAsIChCWVRFKWJ5TWF4TWluKTsKKyAgICBWTlN2T3V0UG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfQ1dNQVhNSU4wLCAodW5zaWduZWQgY2hhcilieU1heE1pbik7CiB9CiAKIHZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotICAgIEJZVEUgYnlUb3BPRkRNID0gUkFURV8yNE0sIGJ5VG9wQ0NLID0gUkFURV8xTTsKLSAgICBCWVRFIGlpOworICAgIHVuc2lnbmVkIGNoYXIgYnlUb3BPRkRNID0gUkFURV8yNE0sIGJ5VG9wQ0NLID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGlpOwogCiAgICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApIHsKKyAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKCh1bnNpZ25lZCBzaG9ydCkoMTw8aWkpKSApIHsKICAgICAgICAgICAgICBieVRvcE9GRE0gPSBpaTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KQEAgLTI3OTYsNyArMTkyMiw3IEBACiAgICAgIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSA9IGJ5VG9wT0ZETTsKIAogICAgICBmb3IgKGlpID0gUkFURV8xMU07OyBpaSAtLSkgewotICAgICAgICAgaWYgKCAocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKFdPUkQpKDE8PGlpKSkgKSB7CisgICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgodW5zaWduZWQgc2hvcnQpKDE8PGlpKSkgKSB7CiAgICAgICAgICAgICAgYnlUb3BDQ0sgPSBpaTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KQEAgLTI4MTcsNDAgKzE5NDMsNDAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIENBUkRiQWRkQmFzaWNSYXRlICh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3UmF0ZUlkeCkKK2Jvb2wgQ0FSRGJBZGRCYXNpY1JhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCB3UmF0ZUlkeCkKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKLSAgICBXT1JEIHdSYXRlID0gKFdPUkQpKDE8PHdSYXRlSWR4KTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydCkoMTw8d1JhdGVJZHgpOwogCiAgICAgcERldmljZS0+d0Jhc2ljUmF0ZSB8PSB3UmF0ZTsKIAogICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgIENBUkR2VXBkYXRlQmFzaWNUb3BSYXRlKCh2b2lkICopcERldmljZSk7CiAKLSAgICByZXR1cm4oVFJVRSk7CisgICAgcmV0dXJuKHRydWUpOwogfQogCi1CT09MIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUgKHZvaWQgKnBEZXZpY2VIYW5kbGVyKQorYm9vbCBDQVJEYklzT0ZETWluQmFzaWNSYXRlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBpbnQgaWk7CiAKICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgIGlmICgocERldmljZS0+d0Jhc2ljUmF0ZSkgJiAoKFdPUkQpKDE8PGlpKSkpCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgaWYgKChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgodW5zaWduZWQgc2hvcnQpKDE8PGlpKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotQllURSBDQVJEYnlHZXRQa3RUeXBlICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK3Vuc2lnbmVkIGNoYXIgQ0FSRGJ5R2V0UGt0VHlwZSAodm9pZCAqcERldmljZUhhbmRsZXIpCiB7CiAgICAgUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CiAKICAgICBpZiAocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUEgfHwgcERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUIpIHsKLSAgICAgICAgcmV0dXJuIChCWVRFKXBEZXZpY2UtPmJ5QkJUeXBlOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIpcERldmljZS0+YnlCQlR5cGU7CiAgICAgfQogICAgIGVsc2UgaWYgKENBUkRiSXNPRkRNaW5CYXNpY1JhdGUoKHZvaWQgKilwRGV2aWNlKSkgewogICAgICAgICByZXR1cm4gUEtfVFlQRV8xMUdBOwpAQCAtMjg3Myw3ICsxOTk5LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBDQVJEdlNldExvb3BiYWNrTW9kZSAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdMb29wYmFja01vZGUpCit2b2lkIENBUkR2U2V0TG9vcGJhY2tNb2RlICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3TG9vcGJhY2tNb2RlKQogewogICAgIHN3aXRjaCh3TG9vcGJhY2tNb2RlKSB7CiAgICAgY2FzZSBDQVJEX0xCX05PTkU6CkBAIC0yODgxLDcgKzIwMDcsNyBAQAogICAgIGNhc2UgQ0FSRF9MQl9QSFk6CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAvLyBzZXQgTUFDIGxvb3BiYWNrCkBAIC0yOTAyLDE1ICsyMDI4LDE1IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLUJPT0wgQ0FSRGJTb2Z0d2FyZVJlc2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlcikKK2Jvb2wgQ0FSRGJTb2Z0d2FyZVJlc2V0ICh2b2lkICpwRGV2aWNlSGFuZGxlcikKIHsKICAgICBQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKIAogICAgIC8vIHJlc2V0IE1BQwogICAgIGlmICghTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTI5MjksMTYgKzIwNTUsMTYgQEAKICAqIFJldHVybiBWYWx1ZTogVFNGIE9mZnNldCB2YWx1ZQogICoKICAqLwotUVdPUkQgQ0FSRHFHZXRUU0ZPZmZzZXQgKEJZVEUgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKQorUVdPUkQgQ0FSRHFHZXRUU0ZPZmZzZXQgKHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKQogewogICAgIFFXT1JEICAgcXdUU0ZPZmZzZXQ7Ci0gICAgV09SRCAgICB3UnhCY25UU0ZPZmZzdD0gMDs7CisgICAgdW5zaWduZWQgc2hvcnQgd1J4QmNuVFNGT2Zmc3Q9IDA7OwogCiAgICAgSElEV09SRChxd1RTRk9mZnNldCkgPSAwOwogICAgIExPRFdPUkQocXdUU0ZPZmZzZXQpID0gMDsKICAgICB3UnhCY25UU0ZPZmZzdCA9IGN3UlhCQ05UU0ZPZmZbYnlSeFJhdGUlTUFYX1JBVEVdOwotICAgIChxd1RTRjIpLnUuZHdMb3dEd29yZCArPSAoRFdPUkQpKHdSeEJjblRTRk9mZnN0KTsKLSAgICBpZiAoKHF3VFNGMikudS5kd0xvd0R3b3JkIDwgKERXT1JEKSh3UnhCY25UU0ZPZmZzdCkpIHsKKyAgICAocXdUU0YyKS51LmR3TG93RHdvcmQgKz0gKHVuc2lnbmVkIGxvbmcpKHdSeEJjblRTRk9mZnN0KTsKKyAgICBpZiAoKHF3VFNGMikudS5kd0xvd0R3b3JkIDwgKHVuc2lnbmVkIGxvbmcpKHdSeEJjblRTRk9mZnN0KSkgewogICAgICAgICAocXdUU0YyKS51LmR3SGlnaER3b3JkKys7CiAgICAgfQogICAgIExPRFdPUkQocXdUU0ZPZmZzZXQpID0gTE9EV09SRChxd1RTRjEpIC0gTE9EV09SRChxd1RTRjIpOwpAQCAtMjk2MywxMyArMjA4OSwxMyBAQAogICogIE91dDoKICAqICAgICAgcXdDdXJyVFNGICAgICAgIC0gQ3VycmVudCBUU0YgY291bnRlcgogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgQ0FSRGJHZXRDdXJyZW50VFNGIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKQorYm9vbCBDQVJEYkdldEN1cnJlbnRUU0YgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgQllURSAgICBieURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgd3c7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAKICAgICBNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RTRkNOVFJSRCk7CiAgICAgZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewpAQCAtMjk3OCwxMSArMjEwNCwxMSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKQotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UU0ZDTlRSLCAmTE9EV09SRCgqcHF3Q3VyclRTRikpOwogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UU0ZDTlRSICsgNCwgJkhJRFdPUkQoKnBxd0N1cnJUU0YpKTsKIAotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtMzAwMCwxMiArMjEyNiwxMiBAQAogICogUmV0dXJuIFZhbHVlOiBUU0YgdmFsdWUgb2YgbmV4dCBCZWFjb24KICAqCiAgKi8KLVFXT1JEIENBUkRxR2V0TmV4dFRCVFQgKFFXT1JEIHF3VFNGLCBXT1JEIHdCZWFjb25JbnRlcnZhbCkKK1FXT1JEIENBUkRxR2V0TmV4dFRCVFQgKFFXT1JEIHF3VFNGLCB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwpCiB7CiAKLSAgICBVSU5UICAgIHVMb3dOZXh0VEJUVDsKLSAgICBVSU5UICAgIHVIaWdoUmVtYWluLCB1TG93UmVtYWluOwotICAgIFVJTlQgICAgdUJlYWNvbkludGVydmFsOworICAgIHVuc2lnbmVkIGludCB1TG93TmV4dFRCVFQ7CisgICAgdW5zaWduZWQgaW50IHVIaWdoUmVtYWluLCB1TG93UmVtYWluOworICAgIHVuc2lnbmVkIGludCB1QmVhY29uSW50ZXJ2YWw7CiAKICAgICB1QmVhY29uSW50ZXJ2YWwgPSB3QmVhY29uSW50ZXJ2YWwgKiAxMDI0OwogICAgIC8vIE5leHQgVEJUVCA9ICgobG9jYWxfY3VycmVudF9UU0YgLyBiZWFjb25faW50ZXJ2YWwpICsgMSApICogYmVhY29uX2ludGVydmFsCkBAIC0zMDQ0LDcgKzIxNzAsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIENBUkR2U2V0Rmlyc3ROZXh0VEJUVCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdCZWFjb25JbnRlcnZhbCkKK3ZvaWQgQ0FSRHZTZXRGaXJzdE5leHRUQlRUICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWwpCiB7CiAKICAgICBRV09SRCAgIHF3TmV4dFRCVFQ7CkBAIC0zMDc3LDcgKzIyMDMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIENBUkR2VXBkYXRlTmV4dFRCVFQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUVdPUkQgcXdUU0YsIFdPUkQgd0JlYWNvbkludGVydmFsKQordm9pZCBDQVJEdlVwZGF0ZU5leHRUQlRUICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCBRV09SRCBxd1RTRiwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKQogewogCiAgICAgcXdUU0YgPSBDQVJEcUdldE5leHRUQlRUKHF3VFNGLCB3QmVhY29uSW50ZXJ2YWwpOwpAQCAtMzA4NSw3ICsyMjExLDggQEAKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX05FWFRUQlRULCBMT0RXT1JEKHF3VFNGKSk7CiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19ORVhUVEJUVCArIDQsIEhJRFdPUkQocXdUU0YpKTsKICAgICBNQUN2UmVnQml0c09uKGR3SW9CYXNlLCBNQUNfUkVHX1RGVENUTCwgVEZUQ1RMX1RCVFRTWU5DRU4pOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ2FyZDpVcGRhdGUgTmV4dCBUQlRUWyU4eGg6JTh4aF0gXG4iLChVSU5UKUhJRFdPUkQocXdUU0YpLCAoVUlOVClMT0RXT1JEKHF3VFNGKSk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJDYXJkOlVwZGF0ZSBOZXh0IFRCVFRbJTh4aDolOHhoXSBcbiIsCisJCSAgICAodW5zaWduZWQgaW50KSBISURXT1JEKHF3VFNGKSwgKHVuc2lnbmVkIGludCkgTE9EV09SRChxd1RTRikpOwogCiAgICAgcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAppbmRleCA3NjMxMzQ2Li5lMDgzNmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBfX0NBUkRfSF9fCiAKICNpbmNsdWRlICJ0dHlwZS5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvLwpAQCAtODYsNTcgKzg3LDU1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJPT0wgQ2hhbm5lbFZhbGlkKFVJTlQgQ291bnRyeUNvZGUsIFVJTlQgQ2hhbm5lbEluZGV4KTsKIHZvaWQgQ0FSRHZTZXRSU1BJTkYodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUpOwogdm9pZCB2VXBkYXRlSUZTKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKIHZvaWQgQ0FSRHZVcGRhdGVCYXNpY1RvcFJhdGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYkFkZEJhc2ljUmF0ZSh2b2lkICpwRGV2aWNlSGFuZGxlciwgV09SRCB3UmF0ZUlkeCk7Ci1CT09MIENBUkRiSXNPRkRNaW5CYXNpY1JhdGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotdm9pZCBDQVJEdlNldExvb3BiYWNrTW9kZShEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0xvb3BiYWNrTW9kZSk7Ci1CT09MIENBUkRiU29mdHdhcmVSZXNldCh2b2lkICpwRGV2aWNlSGFuZGxlcik7Ci12b2lkIENBUkR2U2V0Rmlyc3ROZXh0VEJUVChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLXZvaWQgQ0FSRHZVcGRhdGVOZXh0VEJUVChEV09SRF9QVFIgZHdJb0Jhc2UsIFFXT1JEIHF3VFNGLCBXT1JEIHdCZWFjb25JbnRlcnZhbCk7Ci1CT09MIENBUkRiR2V0Q3VycmVudFRTRihEV09SRF9QVFIgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKTsKLVFXT1JEIENBUkRxR2V0TmV4dFRCVFQoUVdPUkQgcXdUU0YsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLVFXT1JEIENBUkRxR2V0VFNGT2Zmc2V0KEJZVEUgYnlSeFJhdGUsIFFXT1JEIHF3VFNGMSwgUVdPUkQgcXdUU0YyKTsKLUJPT0wgQ0FSRGJTZXRUeFBvd2VyKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBVTE9ORyB1bFR4UG93ZXIpOwotQllURSBDQVJEYnlHZXRQa3RUeXBlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKK2Jvb2wgQ0FSRGJBZGRCYXNpY1JhdGUodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IHdSYXRlSWR4KTsKK2Jvb2wgQ0FSRGJJc09GRE1pbkJhc2ljUmF0ZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7Cit2b2lkIENBUkR2U2V0TG9vcGJhY2tNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdMb29wYmFja01vZGUpOworYm9vbCBDQVJEYlNvZnR3YXJlUmVzZXQodm9pZCAqcERldmljZUhhbmRsZXIpOwordm9pZCBDQVJEdlNldEZpcnN0TmV4dFRCVFQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKTsKK3ZvaWQgQ0FSRHZVcGRhdGVOZXh0VEJUVCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCBRV09SRCBxd1RTRiwgdW5zaWduZWQgc2hvcnQgd0JlYWNvbkludGVydmFsKTsKK2Jvb2wgQ0FSRGJHZXRDdXJyZW50VFNGKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIFBRV09SRCBwcXdDdXJyVFNGKTsKK1FXT1JEIENBUkRxR2V0TmV4dFRCVFQoUVdPUkQgcXdUU0YsIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCk7CitRV09SRCBDQVJEcUdldFRTRk9mZnNldCh1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCBRV09SRCBxd1RTRjEsIFFXT1JEIHF3VFNGMik7Citib29sIENBUkRiU2V0VHhQb3dlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgbG9uZyB1bFR4UG93ZXIpOwordW5zaWduZWQgY2hhciBDQVJEYnlHZXRQa3RUeXBlKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKIHZvaWQgQ0FSRHZTYWZlUmVzZXRUeCh2b2lkICpwRGV2aWNlSGFuZGxlcik7CiB2b2lkIENBUkR2U2FmZVJlc2V0Ungodm9pZCAqcERldmljZUhhbmRsZXIpOwogCiAvL3h4eAotQk9PTCBDQVJEYlJhZGlvUG93ZXJPZmYodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYlJhZGlvUG93ZXJPbih2b2lkICpwRGV2aWNlSGFuZGxlcik7Ci1CT09MIENBUkRiU2V0Q2hhbm5lbCh2b2lkICpwRGV2aWNlSGFuZGxlciwgVUlOVCB1Q29ubmVjdGlvbkNoYW5uZWwpOwotLy9CT09MIENBUkRiU2VuZFBhY2tldCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgVUlOVCB1TGVuZ3RoKTsKLUJPT0wgQ0FSRGJJc1Nob3J0UHJlYW1ibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQk9PTCBDQVJEYklzU2hvclNsb3RUaW1lKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKLUJPT0wgQ0FSRGJTZXRQaHlQYXJhbWV0ZXIodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUsIFdPUkQgd0NhcEluZm8sIEJZVEUgYnlFUlBGaWVsZCwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcyk7Ci1CT09MIENBUkRiVXBkYXRlVFNGKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBCWVRFIGJ5UnhSYXRlLCBRV09SRCBxd0JTU1RpbWVzdGFtcCwgUVdPUkQgcXdMb2NhbFRTRik7Ci1CT09MIENBUkRiU3RvcFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKLUJPT0wgQ0FSRGJTdGFydFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKLUJPT0wgQ0FSRGJTZXRCZWFjb25QZXJpb2Qodm9pZCAqcERldmljZUhhbmRsZXIsIFdPUkQgd0JlYWNvbkludGVydmFsKTsKLUJPT0wgQ0FSRGJTZXRCU1NJRCh2b2lkICpwRGV2aWNlSGFuZGxlciwgUEJZVEUgcGJ5QlNTSUQsIENBUkRfT1BfTU9ERSBlT1BNb2RlKTsKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHZvaWQgKnBEZXZpY2VIYW5kbGVyKTsKK2Jvb2wgQ0FSRGJSYWRpb1Bvd2VyT24odm9pZCAqcERldmljZUhhbmRsZXIpOworLy9ib29sIENBUkRiU2VuZFBhY2tldCh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcFBhY2tldCwgQ0FSRF9QS1RfVFlQRSBlUGt0VHlwZSwgdW5zaWduZWQgaW50IHVMZW5ndGgpOworYm9vbCBDQVJEYklzU2hvcnRQcmVhbWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7Citib29sIENBUkRiSXNTaG9yU2xvdFRpbWUodm9pZCAqcERldmljZUhhbmRsZXIpOworYm9vbCBDQVJEYlNldFBoeVBhcmFtZXRlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdW5zaWduZWQgc2hvcnQgd0NhcEluZm8sIHVuc2lnbmVkIGNoYXIgYnlFUlBGaWVsZCwgdm9pZCAqcHZTdXBwb3J0UmF0ZUlFcywgdm9pZCAqcHZFeHRTdXBwb3J0UmF0ZUlFcyk7Citib29sIENBUkRiVXBkYXRlVFNGKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLCBRV09SRCBxd0JTU1RpbWVzdGFtcCwgUVdPUkQgcXdMb2NhbFRTRik7Citib29sIENBUkRiU3RvcFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKK2Jvb2wgQ0FSRGJTdGFydFR4UGFja2V0KHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BLVF9UWVBFIGVQa3RUeXBlKTsKK2Jvb2wgQ0FSRGJTZXRCZWFjb25QZXJpb2Qodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IHdCZWFjb25JbnRlcnZhbCk7Citib29sIENBUkRiU2V0QlNTSUQodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELCBDQVJEX09QX01PREUgZU9QTW9kZSk7CiAKLUJPT0wKK2Jvb2wKIENBUkRiUG93ZXJEb3duKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyCiAgICAgKTsKIAotQk9PTCBDQVJEYlNldFR4RGF0YVJhdGUoCitib29sIENBUkRiU2V0VHhEYXRhUmF0ZSgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBXT1JEICAgIHdEYXRhUmF0ZQorICAgIHVuc2lnbmVkIHNob3J0IHdEYXRhUmF0ZQogICAgICk7CiAKIAotQk9PTCBDQVJEYlJlbW92ZUtleSAodm9pZCAqcERldmljZUhhbmRsZXIsIFBCWVRFIHBieUJTU0lEKTsKK2Jvb2wgQ0FSRGJSZW1vdmVLZXkgKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCk7CiAKLUJPT0wKK2Jvb2wKIENBUkRiQWRkX1BNS0lEX0NhbmRpZGF0ZSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUEJZVEUgICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBCT09MICAgICAgICAgICAgIGJSU05DYXBFeGlzdCwKLSAgICBXT1JEICAgICAgICAgICAgIHdSU05DYXAKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICBib29sIGJSU05DYXBFeGlzdCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlNOQ2FwCiAgICAgKTsKIAogdm9pZCAqCkBAIC0xNDQsMTEyICsxNDMsNTUgQEAKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlcgogICAgICk7CiAKLQotdm9pZCBDQVJEdkluaXRDaGFubmVsVGFibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwotQllURSBDQVJEYnlHZXRDaGFubmVsTWFwcGluZyh2b2lkICpwRGV2aWNlSGFuZGxlciwgQllURSBieUNoYW5uZWxOdW1iZXIsIENBUkRfUEhZX1RZUEUgZVBoeVR5cGUpOwotCi1CT09MCitib29sCiBDQVJEYlN0YXJ0TWVhc3VyZSAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCiAgICAgdm9pZCAqcHZNZWFzdXJlRUlEcywKLSAgICBVSU5UICAgICAgICAgICAgIHVOdW1PZk1lYXN1cmVFSURzCisgICAgdW5zaWduZWQgaW50IHVOdW1PZk1lYXN1cmVFSURzCiAgICAgKTsKIAotQk9PTAorYm9vbAogQ0FSRGJDaGFubmVsU3dpdGNoICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5TW9kZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5TmV3Q2hhbm5lbCwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5Q291bnQKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TW9kZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q291bnQKICAgICApOwogCi1CT09MCitib29sCiBDQVJEYlNldFF1aWV0ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBCT09MICAgICAgICAgICAgIGJSZXNldFF1aWV0LAotICAgIEJZVEUgICAgICAgICAgICAgYnlRdWlldENvdW50LAotICAgIEJZVEUgICAgICAgICAgICAgYnlRdWlldFBlcmlvZCwKLSAgICBXT1JEICAgICAgICAgICAgIHdRdWlldER1cmF0aW9uLAotICAgIFdPUkQgICAgICAgICAgICAgd1F1aWV0T2Zmc2V0CisgICAgYm9vbCBiUmVzZXRRdWlldCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRDb3VudCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UXVpZXRQZXJpb2QsCisgICAgdW5zaWduZWQgc2hvcnQgd1F1aWV0RHVyYXRpb24sCisgICAgdW5zaWduZWQgc2hvcnQgd1F1aWV0T2Zmc2V0CiAgICAgKTsKIAotQk9PTAorYm9vbAogQ0FSRGJTdGFydFF1aWV0ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlcgogICAgICk7CiAKIHZvaWQKLUNBUkR2U2V0Q291bnRyeUluZm8gKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIENBUkRfUEhZX1RZUEUgICAgZVBIWVR5cGUsCi0gICAgdm9pZCAqcElFCi0gICAgKTsKLQotdm9pZAogQ0FSRHZTZXRQb3dlckNvbnN0cmFpbnQgKAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIEJZVEUgICAgICAgICAgICAgYnlDaGFubmVsLAotICAgIEk4ICAgICAgICAgICAgICAgYnlQb3dlcgorICAgIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsLAorICAgIGNoYXIgYnlQb3dlcgogICAgICk7CiAKIHZvaWQKIENBUkR2R2V0UG93ZXJDYXBhYmlsaXR5ICgKICAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBQQllURSAgICAgICAgICAgcGJ5TWluUG93ZXIsCi0gICAgUEJZVEUgICAgICAgICAgIHBieU1heFBvd2VyCisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWluUG93ZXIsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5TWF4UG93ZXIKICAgICApOwogCi1CWVRFCi1DQVJEYnlTZXRTdXBwb3J0Q2hhbm5lbHMgKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFBCWVRFICAgICAgICBwYnlJRXMKLSAgICApOwotCi1JOAorY2hhcgogQ0FSRGJ5R2V0VHJhbnNtaXRQb3dlciAoCiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIKICAgICApOwogCi1CT09MCi1DQVJEYkNoYW5uZWxHZXRMaXN0ICgKLSAgICAgVUlOVCAgICAgICB1Q291bnRyeUNvZGVJZHgsCi0gICAgUEJZVEUgICAgICBwYnlDaGFubmVsVGFibGUKLSAgICApOwotCi12b2lkCi1DQVJEdlNldENvdW50cnlJRSgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICB2b2lkICpwSUUKLSAgICApOwotCi1CT09MCi1DQVJEYkdldENoYW5uZWxNYXBJbmZvKAotICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAotICAgIFVJTlQgICAgICAgICB1Q2hhbm5lbEluZGV4LAotICAgIFBCWVRFICAgICAgIHBieUNoYW5uZWxOdW1iZXIsCi0gICAgUEJZVEUgICAgICAgcGJ5TWFwCi0gICAgKTsKLQotdm9pZAotQ0FSRHZTZXRDaGFubmVsTWFwSW5mbygKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBVSU5UICAgICAgICAgdUNoYW5uZWxJbmRleCwKLSAgICBCWVRFICAgICAgICAgYnlNYXAKLSAgICApOwotCi12b2lkCi1DQVJEdkNsZWFyQ2hhbm5lbE1hcEluZm8oCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIKLSAgICApOwotCi1CWVRFCi1DQVJEYnlBdXRvQ2hhbm5lbFNlbGVjdCgKLSAgICB2b2lkICpwRGV2aWNlSGFuZGxlciwKLSAgICBDQVJEX1BIWV9UWVBFICAgZVBIWVR5cGUKLSAgICApOwotCi1CWVRFIENBUkRieUdldENoYW5uZWxOdW1iZXIodm9pZCAqcERldmljZUhhbmRsZXIsIEJZVEUgYnlDaGFubmVsSW5kZXgpOwotCiAjZW5kaWYgLy8gX19DQVJEX0hfXwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMTU2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvY2hhbm5lbC5jCkBAIC0wLDAgKzEsODM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEZpbGU6IGNoYW5uZWwuYworICoKKyAqLworCisjaW5jbHVkZSAiYmFzZWJhbmQuaCIKKyNpbmNsdWRlICJjb3VudHJ5LmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgImRldmljZS5oIgorI2luY2x1ZGUgInJmLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgQ0FSRF9NQVhfQ0hBTk5FTF9UQkwgICAgNTYKKworLy9zdGF0aWMgaW50IG1zZ2xldmVsID0gTVNHX0xFVkVMX0RFQlVHOworc3RhdGljIGludCBtc2dsZXZlbCA9IE1TR19MRVZFTF9JTkZPOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgU0NoYW5uZWxUYmxFbGVtZW50IHNDaGFubmVsVGJsW0NBUkRfTUFYX0NIQU5ORUxfVEJMICsgMV0gPQoreworICB7MCwgICAwLCAgICBmYWxzZSwgICAgMH0sCisgIHsxLCAgIDI0MTIsIHRydWUsICAgICAwfSwKKyAgezIsICAgMjQxNywgdHJ1ZSwgICAgIDB9LAorICB7MywgICAyNDIyLCB0cnVlLCAgICAgMH0sCisgIHs0LCAgIDI0MjcsIHRydWUsICAgICAwfSwKKyAgezUsICAgMjQzMiwgdHJ1ZSwgICAgIDB9LAorICB7NiwgICAyNDM3LCB0cnVlLCAgICAgMH0sCisgIHs3LCAgIDI0NDIsIHRydWUsICAgICAwfSwKKyAgezgsICAgMjQ0NywgdHJ1ZSwgICAgIDB9LAorICB7OSwgICAyNDUyLCB0cnVlLCAgICAgMH0sCisgIHsxMCwgIDI0NTcsIHRydWUsICAgICAwfSwKKyAgezExLCAgMjQ2MiwgdHJ1ZSwgICAgIDB9LAorICB7MTIsICAyNDY3LCB0cnVlLCAgICAgMH0sCisgIHsxMywgIDI0NzIsIHRydWUsICAgICAwfSwKKyAgezE0LCAgMjQ4NCwgdHJ1ZSwgICAgIDB9LAorICB7MTgzLCA0OTE1LCB0cnVlLCAgICAgMH0sCisgIHsxODQsIDQ5MjAsIHRydWUsICAgICAwfSwKKyAgezE4NSwgNDkyNSwgdHJ1ZSwgICAgIDB9LAorICB7MTg3LCA0OTM1LCB0cnVlLCAgICAgMH0sCisgIHsxODgsIDQ5NDAsIHRydWUsICAgICAwfSwKKyAgezE4OSwgNDk0NSwgdHJ1ZSwgICAgIDB9LAorICB7MTkyLCA0OTYwLCB0cnVlLCAgICAgMH0sCisgIHsxOTYsIDQ5ODAsIHRydWUsICAgICAwfSwKKyAgezcsICAgNTAzNSwgdHJ1ZSwgICAgIDB9LAorICB7OCwgICA1MDQwLCB0cnVlLCAgICAgMH0sCisgIHs5LCAgIDUwNDUsIHRydWUsICAgICAwfSwKKyAgezExLCAgNTA1NSwgdHJ1ZSwgICAgIDB9LAorICB7MTIsICA1MDYwLCB0cnVlLCAgICAgMH0sCisgIHsxNiwgIDUwODAsIHRydWUsICAgICAwfSwKKyAgezM0LCAgNTE3MCwgdHJ1ZSwgICAgIDB9LAorICB7MzYsICA1MTgwLCB0cnVlLCAgICAgMH0sCisgIHszOCwgIDUxOTAsIHRydWUsICAgICAwfSwKKyAgezQwLCAgNTIwMCwgdHJ1ZSwgICAgIDB9LAorICB7NDIsICA1MjEwLCB0cnVlLCAgICAgMH0sCisgIHs0NCwgIDUyMjAsIHRydWUsICAgICAwfSwKKyAgezQ2LCAgNTIzMCwgdHJ1ZSwgICAgIDB9LAorICB7NDgsICA1MjQwLCB0cnVlLCAgICAgMH0sCisgIHs1MiwgIDUyNjAsIHRydWUsICAgICAwfSwKKyAgezU2LCAgNTI4MCwgdHJ1ZSwgICAgIDB9LAorICB7NjAsICA1MzAwLCB0cnVlLCAgICAgMH0sCisgIHs2NCwgIDUzMjAsIHRydWUsICAgICAwfSwKKyAgezEwMCwgNTUwMCwgdHJ1ZSwgICAgIDB9LAorICB7MTA0LCA1NTIwLCB0cnVlLCAgICAgMH0sCisgIHsxMDgsIDU1NDAsIHRydWUsICAgICAwfSwKKyAgezExMiwgNTU2MCwgdHJ1ZSwgICAgIDB9LAorICB7MTE2LCA1NTgwLCB0cnVlLCAgICAgMH0sCisgIHsxMjAsIDU2MDAsIHRydWUsICAgICAwfSwKKyAgezEyNCwgNTYyMCwgdHJ1ZSwgICAgIDB9LAorICB7MTI4LCA1NjQwLCB0cnVlLCAgICAgMH0sCisgIHsxMzIsIDU2NjAsIHRydWUsICAgICAwfSwKKyAgezEzNiwgNTY4MCwgdHJ1ZSwgICAgIDB9LAorICB7MTQwLCA1NzAwLCB0cnVlLCAgICAgMH0sCisgIHsxNDksIDU3NDUsIHRydWUsICAgICAwfSwKKyAgezE1MywgNTc2NSwgdHJ1ZSwgICAgIDB9LAorICB7MTU3LCA1Nzg1LCB0cnVlLCAgICAgMH0sCisgIHsxNjEsIDU4MDUsIHRydWUsICAgICAwfSwKKyAgezE2NSwgNTgyNSwgdHJ1ZSwgICAgIDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGUgUmFkYXIgcmVndWxhdGlvbiBydWxlcyBmb3IgZWFjaCBjb3VudHJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdAoreworCXVuc2lnbmVkIGNoYXIgYnlDaGFubmVsQ291bnRyeUNvZGU7ICAgICAgICAgICAgIC8qIFRoZSBjb3VudHJ5IGNvZGUgICAgICAgICAqLworCWNoYXIgY2hDb3VudHJ5Q29kZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGJDaGFubmVsSWR4TGlzdFtDQl9NQVhfQ0hBTk5FTF07ICAvKiBBdmFpbGFibGUgY2hhbm5lbHMgSW5kZXggKi8KKwl1bnNpZ25lZCBjaGFyIGJ5UG93ZXJbQ0JfTUFYX0NIQU5ORUxdOworfSBDaGFubmVsUnVsZVRhYltdID0KK3sKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgdGFibGUgaXMgYmFzZWQgb24gQXRoZXJvIGRyaXZlciBydWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvdW50cnkgICAgICAgICAgQXZhaWxhYmxlIGNoYW5uZWxzLCBlbmRlZCB3aXRoIDAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgIDkgIDEwICAxMSAgMTIgIDEzICAxNCAgMTUgIDE2ICAxNyAgMTggIDE5ICAyMCAgMjEgIDIyICAyMyAgMjQgIDI1ICAyNiAgMjcgIDI4ICAyOSAgMzAgIDMxICAzMiAgMzMgIDM0ICAzNSAgMzYgIDM3ICAzOCAgMzkgIDQwICA0MSAgNDIgIDQzICA0NCAgNDUgIDQ2ICA0NyAgNDggIDQ5ICA1MCAgNTEgIDUyICA1MyAgNTQgIDU1ICA1NiAgKi8KK3tDQ09ERV9GQ0MsICAgICAgICAgICAgICAgICAgICAgeydVJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX1RFTEVDLCAgICAgICAgICAgICAgICAgICB7J0onLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAwLCAgMSwgIDAsICAxLCAgMSwgIDAsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsIDIzLCAgMCwgIDAsIDIzLCAgMCwgMjMsIDIzLCAgMCwgMjMsICAwLCAgMCwgMjMsIDIzLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfRVRTSSwgICAgICAgICAgICAgICAgICAgIHsnRScsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWMywgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1Y0LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVjUsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWNiwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1Y3LCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVjgsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWOSwgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1ZhLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVmIsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9SRVNWYywgICAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JFU1ZkLCAgICAgICAgICAgICAgICAgICB7JyAnLCcgJ30sICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUkVTVmUsICAgICAgICAgICAgICAgICAgIHsnICcsJyAnfSwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9BTExCQU5ELCAgICAgICAgICAgICAgICAgeycgJywnICd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0FMQkFOSUEsICAgICAgICAgICAgICAgICB7J0EnLCdMJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQUxHRVJJQSwgICAgICAgICAgICAgICAgIHsnRCcsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9BUkdFTlRJTkEsICAgICAgICAgICAgICAgeydBJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgIDB9ICB9LAore0NDT0RFX0FSTUVOSUEsICAgICAgICAgICAgICAgICB7J0EnLCdNJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQVVTVFJBTElBLCAgICAgICAgICAgICAgIHsnQScsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9BVVNUUklBLCAgICAgICAgICAgICAgICAgeydBJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE1LCAgMCwgMTUsICAwLCAxNSwgIDAsIDE1LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0FaRVJCQUlKQU4sICAgICAgICAgICAgICB7J0EnLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQkFIUkFJTiwgICAgICAgICAgICAgICAgIHsnQicsJ0gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9CRUxBUlVTLCAgICAgICAgICAgICAgICAgeydCJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0JFTEdJVU0sICAgICAgICAgICAgICAgICB7J0InLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQkVMSVpFLCAgICAgICAgICAgICAgICAgIHsnQicsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9CT0xJVklBLCAgICAgICAgICAgICAgICAgeydCJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0JSQVpJTCwgICAgICAgICAgICAgICAgICB7J0InLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQlJVTkVJX0RBUlVTU0FMQU0sICAgICAgIHsnQicsJ04nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9CVUxHQVJJQSwgICAgICAgICAgICAgICAgeydCJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0NBTkFEQSwgICAgICAgICAgICAgICAgICB7J0MnLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfQ0hJTEUsICAgICAgICAgICAgICAgICAgIHsnQycsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgMTcsIDE3fSAgfSwKK3tDQ09ERV9DSElOQSwgICAgICAgICAgICAgICAgICAgeydDJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0NPTE9NQklBLCAgICAgICAgICAgICAgICB7J0MnLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfQ09TVEFfUklDQSwgICAgICAgICAgICAgIHsnQycsJ1InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9DUk9BVElBLCAgICAgICAgICAgICAgICAgeydIJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0NZUFJVUywgICAgICAgICAgICAgICAgICB7J0MnLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfQ1pFQ0gsICAgICAgICAgICAgICAgICAgIHsnQycsJ1onfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ERU5NQVJLLCAgICAgICAgICAgICAgICAgeydEJywnSyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0RPTUlOSUNBTl9SRVBVQkxJQywgICAgICB7J0QnLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfRUNVQURPUiwgICAgICAgICAgICAgICAgIHsnRScsJ0MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9FR1lQVCwgICAgICAgICAgICAgICAgICAgeydFJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0VMX1NBTFZBRE9SLCAgICAgICAgICAgICB7J1MnLCdWJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfRVNUT05JQSwgICAgICAgICAgICAgICAgIHsnRScsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9GSU5MQU5ELCAgICAgICAgICAgICAgICAgeydGJywnSSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0ZSQU5DRSwgICAgICAgICAgICAgICAgICB7J0YnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfR0VSTUFOWSwgICAgICAgICAgICAgICAgIHsnRCcsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9HUkVFQ0UsICAgICAgICAgICAgICAgICAgeydHJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0dFT1JHSUEsICAgICAgICAgICAgICAgICB7J0cnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfR1VBVEVNQUxBLCAgICAgICAgICAgICAgIHsnRycsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9IT05EVVJBUywgICAgICAgICAgICAgICAgeydIJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0hPTkdfS09ORywgICAgICAgICAgICAgICB7J0gnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfSFVOR0FSWSwgICAgICAgICAgICAgICAgIHsnSCcsJ1UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JQ0VMQU5ELCAgICAgICAgICAgICAgICAgeydJJywnUyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0lORElBLCAgICAgICAgICAgICAgICAgICB7J0knLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSU5ET05FU0lBLCAgICAgICAgICAgICAgIHsnSScsJ0QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JUkFOLCAgICAgICAgICAgICAgICAgICAgeydJJywnUid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX0lSRUxBTkQsICAgICAgICAgICAgICAgICB7J0knLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSVRBTFksICAgICAgICAgICAgICAgICAgIHsnSScsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9JU1JBRUwsICAgICAgICAgICAgICAgICAgeydJJywnTCd9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0pBUEFOLCAgICAgICAgICAgICAgICAgICB7J0onLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfSk9SREFOLCAgICAgICAgICAgICAgICAgIHsnSicsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9LQVpBS0hTVEFOLCAgICAgICAgICAgICAgeydLJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0tVV0FJVCwgICAgICAgICAgICAgICAgICB7J0snLCdXJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTEFUVklBLCAgICAgICAgICAgICAgICAgIHsnTCcsJ1YnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9MRUJBTk9OLCAgICAgICAgICAgICAgICAgeydMJywnQid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX0xFSUNIVEVOU1RFSU4sICAgICAgICAgICB7J0wnLCdJJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTElUSFVBTklBLCAgICAgICAgICAgICAgIHsnTCcsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9MVVhFTUJVUkcsICAgICAgICAgICAgICAgeydMJywnVSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01BQ0FVLCAgICAgICAgICAgICAgICAgICB7J00nLCdPJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAgMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfTUFDRURPTklBLCAgICAgICAgICAgICAgIHsnTScsJ0snfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9NQUxUQSwgICAgICAgICAgICAgICAgICAgeydNJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgMTYsIDE2LCAxNiwgIDB9ICB9LAore0NDT0RFX01BTEFZU0lBLCAgICAgICAgICAgICAgICB7J00nLCdZJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTUVYSUNPLCAgICAgICAgICAgICAgICAgIHsnTScsJ1gnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9NT05BQ08sICAgICAgICAgICAgICAgICAgeydNJywnQyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAxOCwgMTgsIDE4LCAxOCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01PUk9DQ08sICAgICAgICAgICAgICAgICB7J00nLCdBJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfTkVUSEVSTEFORFMsICAgICAgICAgICAgIHsnTicsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ORVdfWkVBTEFORCwgICAgICAgICAgICAgeydOJywnWid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAgMCwgMjMsICAwLCAyMywgIDAsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgMzB9ICB9LAore0NDT0RFX05PUlRIX0tPUkVBLCAgICAgICAgICAgICB7J0snLCdQJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfTk9SV0FZLCAgICAgICAgICAgICAgICAgIHsnTicsJ08nfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9PTUFOLCAgICAgICAgICAgICAgICAgICAgeydPJywnTSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BBS0lTVEFOLCAgICAgICAgICAgICAgICB7J1AnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfUEFOQU1BLCAgICAgICAgICAgICAgICAgIHsnUCcsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9QRVJVLCAgICAgICAgICAgICAgICAgICAgeydQJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BISUxJUFBJTkVTLCAgICAgICAgICAgICB7J1AnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfUE9MQU5ELCAgICAgICAgICAgICAgICAgIHsnUCcsJ0wnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9QT1JUVUdBTCwgICAgICAgICAgICAgICAgeydQJywnVCd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1BVRVJUT19SSUNPLCAgICAgICAgICAgICB7J1AnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsIDIzLCAyMywgMjMsIDIzLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDMwLCAzMCwgMzAsIDMwLCAzMH0gIH0sCit7Q0NPREVfUUFUQVIsICAgICAgICAgICAgICAgICAgIHsnUScsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9ST01BTklBLCAgICAgICAgICAgICAgICAgeydSJywnTyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1JVU1NJQSwgICAgICAgICAgICAgICAgICB7J1InLCdVJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfU0FVRElfQVJBQklBLCAgICAgICAgICAgIHsnUycsJ0EnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9TSU5HQVBPUkUsICAgICAgICAgICAgICAgeydTJywnRyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjB9ICB9LAore0NDT0RFX1NMT1ZBS0lBLCAgICAgICAgICAgICAgICB7J1MnLCdLJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDE2LCAxNiwgMTYsIDE2LCAgMH0gIH0sCit7Q0NPREVfU0xPVkVOSUEsICAgICAgICAgICAgICAgIHsnUycsJ0knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9TT1VUSF9BRlJJQ0EsICAgICAgICAgICAgeydaJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1NPVVRIX0tPUkVBLCAgICAgICAgICAgICB7J0snLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfU1BBSU4sICAgICAgICAgICAgICAgICAgIHsnRScsJ1MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNiwgIDAsIDE2LCAgMCwgMTYsICAwLCAxNiwgMTYsIDE2LCAxNiwgMTYsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTYsIDE2LCAxNiwgMTYsICAwfSAgfSwKK3tDQ09ERV9TV0VERU4sICAgICAgICAgICAgICAgICAgeydTJywnRSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1NXSVRaRVJMQU5ELCAgICAgICAgICAgICB7J0MnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTgsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfU1lSSUEsICAgICAgICAgICAgICAgICAgIHsnUycsJ1knfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9UQUlXQU4sICAgICAgICAgICAgICAgICAgeydUJywnVyd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMTcsIDE3LCAxNywgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAzMCwgMzAsIDMwLCAzMCwgIDB9ICB9LAore0NDT0RFX1RIQUlMQU5ELCAgICAgICAgICAgICAgICB7J1QnLCdIJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAxLCAgMSwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIzLCAyMywgMjMsIDIzLCAgMH0gIH0sCit7Q0NPREVfVFJJTklEQURfVE9CQUdPLCAgICAgICAgIHsnVCcsJ1QnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxOCwgIDAsIDE4LCAgMCwgMTgsICAwLCAxOCwgMTgsIDE4LCAxOCwgMTgsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9UVU5JU0lBLCAgICAgICAgICAgICAgICAgeydUJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1RVUktFWSwgICAgICAgICAgICAgICAgICB7J1QnLCdSJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVUssICAgICAgICAgICAgICAgICAgICAgIHsnRycsJ0InfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMCwgIDAsIDIwLCAgMCwgMjAsICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9VS1JBSU5FLCAgICAgICAgICAgICAgICAgeydVJywnQSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1VOSVRFRF9BUkFCX0VNSVJBVEVTLCAgICB7J0EnLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVU5JVEVEX1NUQVRFUywgICAgICAgICAgIHsnVScsJ1MnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAxNywgIDAsIDE3LCAgMCwgMTcsICAwLCAxNywgMjMsIDIzLCAyMywgMjMsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMzAsIDMwLCAzMCwgMzAsIDMwfSAgfSwKK3tDQ09ERV9VUlVHVUFZLCAgICAgICAgICAgICAgICAgeydVJywnWSd9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAyMywgMjMsIDIzLCAyMywgIDB9ICB9LAore0NDT0RFX1VaQkVLSVNUQU4sICAgICAgICAgICAgICB7J1UnLCdaJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfVkVORVpVRUxBLCAgICAgICAgICAgICAgIHsnVicsJ0UnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMSwgIDEsICAxLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAyMCwgMjAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgMjMsIDIzLCAyMywgMjMsICAwfSAgfSwKK3tDQ09ERV9WSUVUTkFNLCAgICAgICAgICAgICAgICAgeydWJywnTid9LCAgeyAgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX1lFTUVOLCAgICAgICAgICAgICAgICAgICB7J1knLCdFJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0sCit7Q0NPREVfWklNQkFCV0UsICAgICAgICAgICAgICAgIHsnWicsJ1cnfSwgIHsgICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfSAgfSwKK3tDQ09ERV9KQVBBTl9XNTJfVzUzLCAgICAgICAgICAgeydKJywnSid9LCAgeyAgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMSwgIDAsICAxLCAgMCwgIDEsICAwLCAgMSwgIDEsICAxLCAgMSwgIDEsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICB7ICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDB9ICB9LAore0NDT0RFX01BWCwgICAgICAgICAgICAgICAgICAgICB7J1UnLCdOJ30sICB7ICAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDF9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgIHsgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMH0gIH0KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAgMTAgIDExICAxMiAgMTMgIDE0ICAxNSAgMTYgIDE3ICAxOCAgMTkgIDIwICAyMSAgMjIgIDIzICAyNCAgMjUgIDI2ICAyNyAgMjggIDI5ICAzMCAgMzEgIDMyICAzMyAgMzQgIDM1ICAzNiAgMzcgIDM4ICAzOSAgNDAgIDQxICA0MiAgNDMgIDQ0ICA0NSAgNDYgIDQ3ICA0OCAgNDkgIDUwICA1MSAgNTIgIDUzICA1NCAgNTUgIDU2ICAqLworfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBpc19jaGFubmVsX3ZhbGlkKCkgLSBJcyBDb3VudHJ5IENoYW5uZWwgVmFsaWQKKyAqICBAQ2hhbm5lSW5kZXg6IGRlZmluZWQgYXMgVlQzMjUzIE1BQyBjaGFubmVsOgorICogICAgICAgICAgICAgIDEgICA9IDIuNEcgY2hhbm5lbCAxCisgKiAgICAgICAgICAgICAgMiAgID0gMi40RyBjaGFubmVsIDIKKyAqICAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgICAxNCAgPSAyLjRHIGNoYW5uZWwgMTQKKyAqICAgICAgICAgICAgICAxNSAgPSA0LjlHIGNoYW5uZWwgMTgzCisgKiAgICAgICAgICAgICAgMTYgID0gNC45RyBjaGFubmVsIDE4NAorICogICAgICAgICAgICAgIC4uLi4uCisgKiAgT3V0cHV0OiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgNUdIeiBiYW5kIGlzIGFsbG93ZWQgdG8gYmUgdXNlZCwKKyAqICAgICAgICAgIGZhbHNlIG90aGVyd2lzZS4KKyAqIDQuOUcgPT4gQ2ggMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYgKFZhbHVlOjE1IH4gMjIpCisgKgorICogNUcgPT4gQ2ggNywgOCwgOSwgMTEsIDEyLCAxNiwgMzQsIDM2LCAzOCwgNDAsIDQyLCA0NCwgNDYsIDQ4LCA1MiwgNTYsIDYwLCA2NCwKKyAqIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NSAoVmFsdWUgMjMgfiA1NikKKyAqLworCitib29sIGlzX2NoYW5uZWxfdmFsaWQodW5zaWduZWQgaW50IENoYW5uZWxJbmRleCkKK3sKKwlib29sIGJWYWxpZDsKKworCWJWYWxpZCA9IGZhbHNlOworCS8qCisJICogSWYgQ2hhbm5lbCBJbmRleCBpcyBpbnZhbGlkLCByZXR1cm4gaW52YWxpZAorCSAqLworCWlmICgoQ2hhbm5lbEluZGV4ID4gQ0JfTUFYX0NIQU5ORUwpIHx8CisJCShDaGFubmVsSW5kZXggPT0gMCkpCisJeworCQliVmFsaWQgPSBmYWxzZTsKKwkJZ290byBleGl0OworCX0KKworCWJWYWxpZCA9IHNDaGFubmVsVGJsW0NoYW5uZWxJbmRleF0uYlZhbGlkOworCitleGl0OgorCXJldHVybiAoYlZhbGlkKTsKKworfQorCisvKioKKyAqIGNoYW5uZWxfZ2V0X2xpc3QoKSAtIEdldCBBdmFpbGFibGUgQ2hhbm5lbCBMaXN0IGZvciBhIGdpdmVuIGNvdW50cnkKKyAqIEBDb3VudHJ5Q29kZTogVGhlIGNvdW50cnkgY29kZSBkZWZpbmVkIGluIGNvdW50cnkuaAorICoKKyAqIE91dHB1dDoKKyAqICAgICAgcGJ5Q2hhbm5lbFRhYmxlOiAgIChRV09SRCAqKSBjb3JyZXNwb25kZW50IGJpdCBtYXNrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYXZhaWxhYmxlIGNoYW5uZWxzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxIG1lYW5zIGNoYW5uZWwgMSBpcyBzdXBwb3J0ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDMgbWVhbnMgY2hhbm5lbCAxLDIgYXJlIHN1cHBvcnRlZAorICogICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwRiBtZWFucyBjaGFubmVsIDEsMiwuLjE1IGFyZSBzdXBwb3J0ZWQKKyAqLworCitib29sIGNoYW5uZWxfZ2V0X2xpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbFRhYmxlKQoreworCWlmICh1Q291bnRyeUNvZGVJZHggPj0gQ0NPREVfTUFYKQorCQlyZXR1cm4gKGZhbHNlKTsKKworCW1lbWNweShwYnlDaGFubmVsVGFibGUsIENoYW5uZWxSdWxlVGFiW3VDb3VudHJ5Q29kZUlkeF0uYkNoYW5uZWxJZHhMaXN0LCBDQl9NQVhfQ0hBTk5FTCk7CisKKwlyZXR1cm4gKHRydWUpOworfQorCit2b2lkIGluaXRfY2hhbm5lbF90YWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcikKK3sKKwlQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlib29sIGJNdWx0aUJhbmQgPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgaWk7CisKKwlmb3IoaWkgPSAxIDsgaWk8PUNBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7CisJfQorCisJc3dpdGNoIChwRGV2aWNlLT5ieVJGVHlwZSkgeworCQljYXNlIFJGX1JGTUQyOTU5IDoKKwkJY2FzZSBSRl9BSVJPSEEgOgorCQljYXNlIFJGX0FMMjIzMFM6CisJCWNhc2UgUkZfVVcyNDUxIDoKKwkJY2FzZSBSRl9WVDMyMjYgOgorCQkJLy9wcmludGsoImNoZXN0ZXItZmFsc2VcbiIpOworCQkJYk11bHRpQmFuZCA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgUkZfQUlST0hBNzIzMCA6CisJCWNhc2UgUkZfVVcyNDUyIDoKKwkJY2FzZSBSRl9OT1RISU5HIDoKKwkJZGVmYXVsdCA6CisJCQliTXVsdGlCYW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCX0KKworCWlmICgocERldmljZS0+ZHdEaWFnUmVmQ291bnQgIT0gMCkgfHwgKHBEZXZpY2UtPmIxMWhFbmFibGUgPT0gdHJ1ZSkpIHsKKwkJaWYgKGJNdWx0aUJhbmQgPT0gdHJ1ZSkgeworCQkJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IHRydWU7CisJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07CisJCQkJcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKKwkJCX0KKwkJCWZvcihpaSA9IDAgOyBpaTxDSEFOTkVMX01BWF8yNEcgOyBpaSsrKSB7CisJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKKwkJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IoaWkgPSAwIDsgaWk8Q0hBTk5FTF9NQVhfMjRHIDsgaWkrKykgeworCQkJCS8vMjAwOC04LTQgPGFkZD4gYnkgY2hlc3RlcgorCQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQkJc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gdHJ1ZTsKKwkJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKKwkJCQkJcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlDQ0tEZWZhdWx0UHdyW2lpKzFdOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAocERldmljZS0+Ynlab25lVHlwZSA8PSBDQ09ERV9NQVgpIHsKKwkJaWYgKGJNdWx0aUJhbmQgPT0gdHJ1ZSkgeworCQkJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQkJc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gdHJ1ZTsKKwkJCQkJcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCQkJCXBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJZm9yKGlpID0gMCA7IGlpPENIQU5ORUxfTUFYXzI0RyA7IGlpKyspIHsKKwkJCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7CisJCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IHRydWU7CisJCQkJCXBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOworCQkJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCURCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPIlpvbmU9WyVkXVslY11bJWNdISFcbiIscERldmljZS0+Ynlab25lVHlwZSxDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5jaENvdW50cnlDb2RlWzBdLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMV0pOworCisJZm9yKGlpID0gMCA7IGlpPENBUkRfTUFYX0NIQU5ORUxfVEJMIDsgaWkrKykgeworCQlpZiAocERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID09IDApCisJCQlwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKKwkJaWYgKHBEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID09IDApCisJCQlwRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOworCX0KK30KKwordW5zaWduZWQgY2hhciBnZXRfY2hhbm5lbF9tYXBwaW5nKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbE51bWJlciwgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWk7CisKKwlpZiAoKGVQaHlUeXBlID09IFBIWV9UWVBFXzExQikgfHwgKGVQaHlUeXBlID09IFBIWV9UWVBFXzExRykpCisJCXJldHVybiAoYnlDaGFubmVsTnVtYmVyKTsKKworCWZvcihpaSA9IChDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxKTsgaWkgPD0gQ0JfTUFYX0NIQU5ORUw7ICkgeworCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJ5Q2hhbm5lbE51bWJlciA9PSBieUNoYW5uZWxOdW1iZXIpCisJCQlyZXR1cm4gKCh1bnNpZ25lZCBjaGFyKSBpaSk7CisJCWlpKys7CisJfQorCXJldHVybiAwOworfQorCit1bnNpZ25lZCBjaGFyIGdldF9jaGFubmVsX251bWJlcih2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciBieUNoYW5uZWxJbmRleCkKK3sKKwkvL1BTRGV2aWNlICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXJldHVybihzQ2hhbm5lbFRibFtieUNoYW5uZWxJbmRleF0uYnlDaGFubmVsTnVtYmVyKTsKK30KKworLyoqCisgKiBzZXRfY2hhbm5lbCgpIC0gU2V0IE5JQyBtZWRpYSBjaGFubmVsCisgKgorICogQHBEZXZpY2VIYW5kbGVyOiBUaGUgYWRhcHRlciB0byBiZSBzZXQKKyAqIEB1Q29ubmVjdGlvbkNoYW5uZWw6IENoYW5uZWwgdG8gYmUgc2V0CisgKgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgorICoKKyAqLworYm9vbCBzZXRfY2hhbm5lbCAodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q29ubmVjdGlvbkNoYW5uZWwpCit7CisJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgcERldmljZUhhbmRsZXI7CisJYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKKworCisJaWYgKHBEZXZpY2UtPmJ5Q3VycmVudENoID09IHVDb25uZWN0aW9uQ2hhbm5lbCkgeworCQlyZXR1cm4gYlJlc3VsdDsKKwl9CisKKwlpZiAoc0NoYW5uZWxUYmxbdUNvbm5lY3Rpb25DaGFubmVsXS5iVmFsaWQgPT0gZmFsc2UpIHsKKwkJcmV0dXJuIChmYWxzZSk7CisJfQorCisJaWYgKCh1Q29ubmVjdGlvbkNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcpICYmCisJCQkocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlICE9IFBIWV9UWVBFXzExQSkpIHsKKwkJQ0FSRGJTZXRQaHlQYXJhbWV0ZXIocERldmljZSwgUEhZX1RZUEVfMTFBLCAwLCAwLCBOVUxMLCBOVUxMKTsKKwl9IGVsc2UgaWYgKCh1Q29ubmVjdGlvbkNoYW5uZWwgPD0gQ0JfTUFYX0NIQU5ORUxfMjRHKSAmJgorCQkJKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpKSB7CisJCUNBUkRiU2V0UGh5UGFyYW1ldGVyKHBEZXZpY2UsIFBIWV9UWVBFXzExRywgMCwgMCwgTlVMTCwgTlVMTCk7CisJfQorCS8vIGNsZWFyIE5BVgorCU1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NQUNDUiwgTUFDQ1JfQ0xSTkFWKTsKKworCS8ve3sgUm9iZXJ0WXU6IDIwMDQxMjAyCisJLy8vLyBUWF9QRSB3aWxsIHJlc2VydmUgMyB1cyBmb3IgTUFYMjgyOSBBIG1vZGUgb25seSwgaXQgaXMgZm9yIGJldHRlciBUWCB0aHJvdWdocHV0CisKKwlpZiAoIHBEZXZpY2UtPmJ5UkZUeXBlID09IFJGX0FJUk9IQTcyMzAgKQorCXsKKwkJUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5Q3VycmVudENoLCAodW5zaWduZWQgY2hhcil1Q29ubmVjdGlvbkNoYW5uZWwpOworCX0KKwkvL319IFJvYmVydFl1CisKKworCXBEZXZpY2UtPmJ5Q3VycmVudENoID0gKHVuc2lnbmVkIGNoYXIpdUNvbm5lY3Rpb25DaGFubmVsOworCWJSZXN1bHQgJj0gUkZiU2VsZWN0Q2hhbm5lbChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBwRGV2aWNlLT5ieVJGVHlwZSwgKHVuc2lnbmVkIGNoYXIpdUNvbm5lY3Rpb25DaGFubmVsKTsKKworCS8vIEluaXQgU3ludGhlc2l6ZXIgVGFibGUKKwlpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSB0cnVlKQorCQlSRnZXcml0ZVdha2VQcm9nU3luKHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmJ5UkZUeXBlLCB1Q29ubmVjdGlvbkNoYW5uZWwpOworCisKKwkvL0RCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ0FSRGJTZXRNZWRpYUNoYW5uZWw6ICVkXG4iLCAodW5zaWduZWQgY2hhcil1Q29ubmVjdGlvbkNoYW5uZWwpOworCUJCdlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7CisKKwlpZiAocERldmljZS0+YnlMb2NhbElEID4gUkVWX0lEX1ZUMzI1M19CMSkgeworCQkvLyBzZXQgSFcgZGVmYXVsdCBwb3dlciByZWdpc3RlcgorCQlNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CisJCVJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKKwkJVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1BXUkNDSywgcERldmljZS0+YnlDdXJQd3IpOworCQlSRmJTZXRQb3dlcihwRGV2aWNlLCBSQVRFXzZNLCBwRGV2aWNlLT5ieUN1cnJlbnRDaCk7CisJCVZOU3ZPdXRQb3J0QihwRGV2aWNlLT5Qb3J0T2Zmc2V0ICsgTUFDX1JFR19QV1JPRkRNLCBwRGV2aWNlLT5ieUN1clB3cik7CisJCU1BQ3ZTZWxlY3RQYWdlMChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKKwl9CisKKwlpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgeworI2lmZGVmCVBMSUNFX0RFQlVHCisJCS8vcHJpbnRrKCJGdW5jOkNoYlNldENoYW5uZWw6Y2FsbCBSRmJTZXRQb3dlcjoxMUJcbiIpOworI2VuZGlmCisJCVJGYlNldFBvd2VyKHBEZXZpY2UsIFJBVEVfMU0sIHBEZXZpY2UtPmJ5Q3VycmVudENoKTsKKwl9IGVsc2UgeworI2lmZGVmCVBMSUNFX0RFQlVHCisJCS8vcHJpbnRrKCJGdW5jOkNoYlNldENoYW5uZWw6Y2FsbCBSRmJTZXRQb3dlclxuIik7CisjZW5kaWYKKwkJUkZiU2V0UG93ZXIocERldmljZSwgUkFURV82TSwgcERldmljZS0+YnlDdXJyZW50Q2gpOworCX0KKworCXJldHVybihiUmVzdWx0KTsKK30KKworLyoqCisgKiBzZXRfY291bnRyeV9pbmZvKCkgLSBTZXQgQ2hhbm5lbCBJbmZvIG9mIENvdW50cnkKKyAqCisgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCisgKgorICovCisKK3ZvaWQgc2V0X2NvdW50cnlfaW5mbyh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSwgdm9pZCAqcElFKQoreworCVBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXVuc2lnbmVkIGludCBpaSA9IDA7CisJdW5zaWduZWQgaW50IHV1ID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RlcCA9IDA7CisJdW5zaWduZWQgaW50IHVOdW1PZkNvdW50cnlJbmZvID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJ5Q2ggPSAwOworCVBXTEFOX0lFX0NPVU5UUlkgcElFX0NvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSkgcElFOworCisKKwl1TnVtT2ZDb3VudHJ5SW5mbyA9IChwSUVfQ291bnRyeS0+bGVuIC0gMyk7CisJdU51bU9mQ291bnRyeUluZm8gLz0gMzsKKworCWlmIChlUEhZVHlwZSA9PSBQSFlfVFlQRV8xMUEpIHsKKwkJcERldmljZS0+YkNvdW50cnlJbmZvNUcgPSB0cnVlOworCQlmb3IoaWkgPSBDQl9NQVhfQ0hBTk5FTF8yNEcgKyAxIDsgaWkgPD0gQ0FSRF9NQVhfQ0hBTk5FTF9UQkwgOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gZmFsc2U7CisJCX0KKwkJc3RlcCA9IDQ7CisJfSBlbHNlIHsKKwkJcERldmljZS0+YkNvdW50cnlJbmZvMjRHID0gdHJ1ZTsKKwkJZm9yKGlpID0gMSA7IGlpIDw9IENCX01BWF9DSEFOTkVMXzI0RyA7IGlpKyspIHsKKwkJCXNDaGFubmVsVGJsW2lpXS5iVmFsaWQgPSBmYWxzZTsKKwkJfQorCQlzdGVwID0gMTsKKwl9CisJcERldmljZS0+YWJ5Q291bnRyeUNvZGVbMF0gPSBwSUVfQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1swXTsKKwlwRGV2aWNlLT5hYnlDb3VudHJ5Q29kZVsxXSA9IHBJRV9Db3VudHJ5LT5hYnlDb3VudHJ5U3RyaW5nWzFdOworCXBEZXZpY2UtPmFieUNvdW50cnlDb2RlWzJdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlTdHJpbmdbMl07CisKKwlmb3IoaWkgPSAwIDsgaWkgPCB1TnVtT2ZDb3VudHJ5SW5mbyA7IGlpKyspIHsKKwkJZm9yKHV1ID0gMCA7IHV1IDwgcElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjMrMV0gOyB1dSsrKSB7CisJCQlieUNoID0gZ2V0X2NoYW5uZWxfbWFwcGluZyhwRGV2aWNlLCAodW5zaWduZWQgY2hhcikocElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjNdK3N0ZXAqdXUpLCBlUEhZVHlwZSk7CisJCQlzQ2hhbm5lbFRibFtieUNoXS5iVmFsaWQgPSB0cnVlOworCQkJcERldmljZS0+YWJ5UmVnUHdyW2J5Q2hdID0gcElFX0NvdW50cnktPmFieUNvdW50cnlJbmZvW2lpKjMrMl07CisJCX0KKwl9Cit9CisKKy8qKgorICoKKyAqIHNldF9zdXBwb3J0X2NoYW5uZWxzKCkgLSBTZXQgU3VwcG9ydCBDaGFubmVscyBJRSBkZWZpbmVkIGluIDgwMi4xMWgKKyAqCisgKiBAaERldmljZUNvbnRleHQ6IGRldmljZSBzdHJ1Y3R1cmUgcG9pbnQKKyAqCisgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCisgKgorICovCisKK3Vuc2lnbmVkIGNoYXIgc2V0X3N1cHBvcnRfY2hhbm5lbHModm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGNoYXIgKnBieUlFcykKK3sKKwlQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwl1bnNpZ25lZCBpbnQgaWk7CisJdW5zaWduZWQgY2hhciBieUNvdW50OworCVBXTEFOX0lFX1NVUFBfQ0ggcElFID0gKFBXTEFOX0lFX1NVUFBfQ0gpIHBieUlFczsKKwl1bnNpZ25lZCBjaGFyICpwYnlDaFR1cHBsZTsKKwl1bnNpZ25lZCBjaGFyIGJ5TGVuID0gMDsKKworCisJcElFLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX1NVUFBfQ0g7CisJcElFLT5sZW4gPSAwOworCXBieUNoVHVwcGxlID0gcElFLT5hYnlDaGFubmVsVHVwbGU7CisJYnlMZW4gPSAyOworCS8vIGxvd2VyIGJhbmQKKwlieUNvdW50ID0gMDsKKwlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0WzI4XSA9PSB0cnVlKSB7CisJCWZvciAoaWkgPSAyOCA7IGlpIDwgMzYgOyBpaSs9IDIpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAzNDsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0gZWxzZSBpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0WzI5XSA9PSB0cnVlKSB7CisJCWZvciAoaWkgPSAyOSA7IGlpIDwgMzYgOyBpaSs9IDIpIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAzNjsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwkvLyBtaWRkbGUgYmFuZAorCWJ5Q291bnQgPSAwOworCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbMzZdID09IHRydWUpIHsKKwkJZm9yIChpaSA9IDM2IDsgaWkgPCA0MCA7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSA1MjsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwkvLyBoaWdoZXIgYmFuZAorCWJ5Q291bnQgPSAwOworCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbNDBdID09IHRydWUpIHsKKwkJZm9yIChpaSA9IDQwIDsgaWkgPCA1MSA7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldID09IHRydWUpIHsKKwkJCQlieUNvdW50Kys7CisJCQl9CisJCX0KKwkJKnBieUNoVHVwcGxlKysgPSAxMDA7CisJCSpwYnlDaFR1cHBsZSsrID0gYnlDb3VudDsKKwkJYnlMZW4gKz0gMjsKKwl9IGVsc2UgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFs1MV0gPT0gdHJ1ZSkgeworCQlmb3IgKGlpID0gNTEgOyBpaSA8IDU2IDsgaWkrKykgeworCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gPT0gdHJ1ZSkgeworCQkJCWJ5Q291bnQrKzsKKwkJCX0KKwkJfQorCQkqcGJ5Q2hUdXBwbGUrKyA9IDE0OTsKKwkJKnBieUNoVHVwcGxlKysgPSBieUNvdW50OworCQlieUxlbiArPSAyOworCX0KKwlwSUUtPmxlbiArPSAoYnlMZW4gLSAyKTsKKwlyZXR1cm4gKGJ5TGVuKTsKK30KKwordm9pZCBzZXRfY291bnRyeV9JRSh2b2lkICpwRGV2aWNlSGFuZGxlciwgdm9pZCAqcElFKQoreworCVBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOworCXVuc2lnbmVkIGludCBpaTsKKwlQV0xBTl9JRV9DT1VOVFJZIHBJRUNvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSkgcElFOworCisJcElFQ291bnRyeS0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9DT1VOVFJZOworCXBJRUNvdW50cnktPmxlbiA9IDA7CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1swXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF07CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1sxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMV07CisJcElFQ291bnRyeS0+YWJ5Q291bnRyeVN0cmluZ1syXSA9ICcgJzsKKwlmb3IgKGlpID0gQ0JfTUFYX0NIQU5ORUxfMjRHOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrICkgeworCQlpZiAoQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYkNoYW5uZWxJZHhMaXN0W2lpXSAhPSAwKSB7CisJCQlwSUVDb3VudHJ5LT5hYnlDb3VudHJ5SW5mb1twSUVDb3VudHJ5LT5sZW4rK10gPSBzQ2hhbm5lbFRibFtpaSsxXS5ieUNoYW5uZWxOdW1iZXI7CisJCQlwSUVDb3VudHJ5LT5hYnlDb3VudHJ5SW5mb1twSUVDb3VudHJ5LT5sZW4rK10gPSAxOworCQkJcElFQ291bnRyeS0+YWJ5Q291bnRyeUluZm9bcElFQ291bnRyeS0+bGVuKytdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CisJCX0KKwl9CisJcElFQ291bnRyeS0+bGVuICs9IDM7Cit9CisKK2Jvb2wgZ2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyICpwYnlDaGFubmVsTnVtYmVyLCB1bnNpZ25lZCBjaGFyICpwYnlNYXApCit7CisKKwlpZiAodUNoYW5uZWxJbmRleCA+IENCX01BWF9DSEFOTkVMKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisJKnBieUNoYW5uZWxOdW1iZXIgPSBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5ieUNoYW5uZWxOdW1iZXI7CisJKnBieU1hcCA9IHNDaGFubmVsVGJsW3VDaGFubmVsSW5kZXhdLmJ5TUFQOworCXJldHVybiBzQ2hhbm5lbFRibFt1Q2hhbm5lbEluZGV4XS5iVmFsaWQ7Cit9CisKK3ZvaWQgc2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyIGJ5TWFwKQoreworCisJaWYgKHVDaGFubmVsSW5kZXggPiBDQl9NQVhfQ0hBTk5FTCkgeworCQlyZXR1cm47CisJfQorCXNDaGFubmVsVGJsW3VDaGFubmVsSW5kZXhdLmJ5TUFQIHw9IGJ5TWFwOworfQorCit2b2lkIGNsZWFyX2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIpCit7CisJdW5zaWduZWQgaW50IGlpID0gMDsKKworCWZvciAoaWkgPSAxOyBpaSA8PSAgQ0JfTUFYX0NIQU5ORUw7IGlpKyspIHsKKwkJc0NoYW5uZWxUYmxbaWldLmJ5TUFQID0gMDsKKwl9Cit9CisKK3Vuc2lnbmVkIGNoYXIgYXV0b19jaGFubmVsX3NlbGVjdCh2b2lkICpwRGV2aWNlSGFuZGxlciwgQ0FSRF9QSFlfVFlQRSBlUEhZVHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWkgPSAwOworCXVuc2lnbmVkIGNoYXIgYnlPcHRpb25DaGFubmVsID0gMDsKKwlpbnQgYWlXZWlnaHRbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdID0gey0xMDAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisKKwlpZiAoZVBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7CisJCWZvcihpaSA9IENCX01BWF9DSEFOTkVMXzI0RyArIDEgOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTCA7IGlpKyspIHsKKwkJCWlmIChzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID09IHRydWUpIHsKKwkJCQlpZiAoYnlPcHRpb25DaGFubmVsID09IDApIHsKKwkJCQkJYnlPcHRpb25DaGFubmVsID0gKHVuc2lnbmVkIGNoYXIpIGlpOworCQkJCX0KKwkJCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJ5TUFQID09IDApIHsKKwkJCQkJcmV0dXJuICgodW5zaWduZWQgY2hhcikgaWkpOworCQkJCX0gZWxzZSBpZiAoICEoc0NoYW5uZWxUYmxbaWldLmJ5TUFQICYgMHgwOCkpIHsKKwkJCQkJYnlPcHRpb25DaGFubmVsID0gKHVuc2lnbmVkIGNoYXIpIGlpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWJ5T3B0aW9uQ2hhbm5lbCA9IDA7CisJCWZvcihpaSA9IDEgOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTF8yNEcgOyBpaSsrKSB7CisJCQlpZiAoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSB0cnVlKSB7CisJCQkJaWYgKHNDaGFubmVsVGJsW2lpXS5ieU1BUCA9PSAwKSB7CisJCQkJCWFpV2VpZ2h0W2lpXSArPSAxMDA7CisJCQkJfSBlbHNlIGlmIChzQ2hhbm5lbFRibFtpaV0uYnlNQVAgJiAweDAxKSB7CisJCQkJCWlmIChpaSA+IDMpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTNdIC09IDEwOworCQkJCQl9CisJCQkJCWlmIChpaSA+IDIpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTJdIC09IDIwOworCQkJCQl9CisJCQkJCWlmIChpaSA+IDEpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpLTFdIC09IDQwOworCQkJCQl9CisJCQkJCWFpV2VpZ2h0W2lpXSAtPSA4MDsKKwkJCQkJaWYgKGlpIDwgQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CisJCQkJCQlhaVdlaWdodFtpaSsxXSAtPSA0MDsKKwkJCQkJfQorCQkJCQlpZiAoaWkgPCAoQ0JfTUFYX0NIQU5ORUxfMjRHIC0gMSkpIHsKKwkJCQkJCWFpV2VpZ2h0W2lpKzJdIC09IDIwOworCQkJCQl9CisJCQkJCWlmIChpaSA8IChDQl9NQVhfQ0hBTk5FTF8yNEcgLSAyKSkgeworCQkJCQkJYWlXZWlnaHRbaWkrM10gLT0gMTA7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yKGlpID0gMSA7IGlpIDw9IENCX01BWF9DSEFOTkVMXzI0RyA7IGlpKyspIHsKKwkJCWlmICgoc0NoYW5uZWxUYmxbaWldLmJWYWxpZCA9PSB0cnVlKSAmJgorCQkJCQkoYWlXZWlnaHRbaWldID4gYWlXZWlnaHRbYnlPcHRpb25DaGFubmVsXSkpIHsKKwkJCQlieU9wdGlvbkNoYW5uZWwgPSAodW5zaWduZWQgY2hhcikgaWk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChieU9wdGlvbkNoYW5uZWwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDM4ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jaGFubmVsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NiwgMjAwMyBWSUEgTmV0d29ya2luZyBUZWNobm9sb2dpZXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBGaWxlOiBjaGFubmVsLmgKKyAqCisgKi8KKworI2lmbmRlZiBfQ0hBTk5FTF9IXworI2RlZmluZSBfQ0hBTk5FTF9IXworCisjaW5jbHVkZSAidHR5cGUuaCIKKyNpbmNsdWRlICJjYXJkLmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3R5cGVkZWYgc3RydWN0IHRhZ1NDaGFubmVsVGJsRWxlbWVudCB7CisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWxOdW1iZXI7CisgICAgdW5zaWduZWQgaW50IHVGcmVxdWVuY3k7CisgICAgYm9vbCBiVmFsaWQ7CisgICAgdW5zaWduZWQgY2hhciBieU1BUDsKK31TQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2Jvb2wgaXNfY2hhbm5lbF92YWxpZCh1bnNpZ25lZCBpbnQgQ291bnRyeUNvZGUpOwordm9pZCBpbml0X2NoYW5uZWxfdGFibGUodm9pZCAqcERldmljZUhhbmRsZXIpOwordW5zaWduZWQgY2hhciBnZXRfY2hhbm5lbF9tYXBwaW5nKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbE51bWJlciwgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZSk7Citib29sIGNoYW5uZWxfZ2V0X2xpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbFRhYmxlKTsKK3Vuc2lnbmVkIGNoYXIgZ2V0X2NoYW5uZWxfbnVtYmVyKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbEluZGV4KTsKK2Jvb2wgc2V0X2NoYW5uZWwodm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q29ubmVjdGlvbkNoYW5uZWwpOwordm9pZCBzZXRfY291bnRyeV9pbmZvKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCBDQVJEX1BIWV9UWVBFIGVQSFlUeXBlLCB2b2lkICpwSUUpOwordW5zaWduZWQgY2hhciBzZXRfc3VwcG9ydF9jaGFubmVscyh2b2lkICpwRGV2aWNlSGFuZGxlciwgdW5zaWduZWQgY2hhciAqcGJ5SUVzKTsKK3ZvaWQgc2V0X2NvdW50cnlfSUUodm9pZCAqcERldmljZUhhbmRsZXIsIHZvaWQgKnBJRSk7Citib29sIGdldF9jaGFubmVsX21hcF9pbmZvKHZvaWQgKnBEZXZpY2VIYW5kbGVyLCB1bnNpZ25lZCBpbnQgdUNoYW5uZWxJbmRleCwKKwkJdW5zaWduZWQgY2hhciAqcGJ5Q2hhbm5lbE51bWJlciwgdW5zaWduZWQgY2hhciAqcGJ5TWFwKTsKK3ZvaWQgc2V0X2NoYW5uZWxfbWFwX2luZm8odm9pZCAqcERldmljZUhhbmRsZXIsIHVuc2lnbmVkIGludCB1Q2hhbm5lbEluZGV4LAorCQl1bnNpZ25lZCBjaGFyIGJ5TWFwKTsKK3ZvaWQgY2xlYXJfY2hhbm5lbF9tYXBfaW5mbyh2b2lkICpwRGV2aWNlSGFuZGxlcik7Cit1bnNpZ25lZCBjaGFyIGF1dG9fY2hhbm5lbF9zZWxlY3Qodm9pZCAqcERldmljZUhhbmRsZXIsIENBUkRfUEhZX1RZUEUgZVBIWVR5cGUpOworCisKKyNlbmRpZiAvKiBfQ0hBTk5FTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jb3VudHJ5LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaAppbmRleCAyMDA1ZDI3Li4wNWZkYTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NvdW50cnkuaApAQCAtMTU5LDE5ICsxNTksNCBAQAogICAgIENDT0RFX01BWAogfSBDT1VOVFJZX0NPREU7CiAKLXR5cGVkZWYgc3RydWN0IHRhZ1NDb3VudHJ5VGFibGUKLXsKLSAgICBCWVRFICAgIGJ5Q2hhbm5lbENvdW50cnlDb2RlOyAgICAgICAgICAgICAvKiBUaGUgY291bnRyeSBjb2RlICAgICAgICAgKi8KLSAgICBDSEFSICAgIGNoQ291bnRyeUNvZGVbMl07Ci0gICAgQllURSAgICBiQ2hhbm5lbElkeExpc3RbQ0JfTUFYX0NIQU5ORUxdOyAgLyogQXZhaWxhYmxlIGNoYW5uZWxzIEluZGV4ICovCi0gICAgQllURSAgICBieVBvd2VyW0NCX01BWF9DSEFOTkVMXTsKLX0gICBTQ291bnRyeVRhYmxlLCAqUFNDb3VudHJ5VGFibGU7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1leHRlcm4gU0NvdW50cnlUYWJsZSBDaGFubmVsUnVsZVRhYltDQ09ERV9NQVgrMV07Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNlbmRpZiAgLyogX19DT1VOVFJZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5jCmluZGV4IDM4YjA5YTcuLmVmYmI4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGF0YXJhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmMKQEAgLTUxLDExICs1MSwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogCi0gZXh0ZXJuIFdPUkQgVHhSYXRlX2l3Y29uZmlnOyAvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKKyBleHRlcm4gdW5zaWduZWQgc2hvcnQgVHhSYXRlX2l3Y29uZmlnOyAvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTdGF0aWMgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwotY29uc3QgQllURSBhY2J5SUVSYXRlW01BWF9SQVRFXSA9Citjb25zdCB1bnNpZ25lZCBjaGFyIGFjYnlJRVJhdGVbTUFYX1JBVEVdID0KIHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKIAogI2RlZmluZSBBVVRPUkFURV9UWE9LX0NOVCAgICAgICAweDA0MDAKQEAgLTc1LDcgKzc1LDcgQEAKICAgICBQS25vd25Ob2RlREIgcHNOb2RlREJUYWJsZQogICAgICkKIHsKLSAgICBCWVRFICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgY2hhciBpaTsKIAogICAgIC8vIGNsZWFyIHN0YXRpc3RpYyBjb3VudGVyIGZvciBhdXRvX3JhdGUKICAgICBmb3IoaWk9MDtpaTw9TUFYX1JBVEU7aWkrKykgewpAQCAtOTcsMTkgKzk3LDE5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgQllURSAgICAtIFJhdGUgdmFsdWUgaW4gU3VwcFJhdGVzIElFIG9yIEV4dFN1cHBSYXRlcyBJRQorICogICAgICB1bnNpZ25lZCBjaGFyIC0gUmF0ZSB2YWx1ZSBpbiBTdXBwUmF0ZXMgSUUgb3IgRXh0U3VwcFJhdGVzIElFCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBSYXRlSWR4CiAgKgogLSovCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBEQVRBUkFURWJ5R2V0UmF0ZUlkeCAoCi0gICAgQllURSBieVJhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZQogICAgICkKIHsKLSAgICBCWVRFICAgIGlpOworICAgIHVuc2lnbmVkIGNoYXIgaWk7CiAKICAgICAvL0VyYXNlIGJhc2ljUmF0ZSBmbGFnLgogICAgIGJ5UmF0ZSA9IGJ5UmF0ZSAmIDB4N0Y7Ly8wMTExIDExMTEKQEAgLTE1MSwxOSArMTUxLDE5IEBACiAgKgogICogUGFyYW1ldGVyczoKICAqICBJbjoKLSAqICAgICAgQllURSAgICAtIFJhdGUgdmFsdWUgaW4gU3VwcFJhdGVzIElFIG9yIEV4dFN1cHBSYXRlcyBJRQorICogICAgICB1bnNpZ25lZCBjaGFyIC0gUmF0ZSB2YWx1ZSBpbiBTdXBwUmF0ZXMgSUUgb3IgRXh0U3VwcFJhdGVzIElFCiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgogICogUmV0dXJuIFZhbHVlOiBSYXRlSWR4CiAgKgogLSovCi1XT1JECit1bnNpZ25lZCBzaG9ydAogd0dldFJhdGVJZHgoCi0gICAgQllURSBieVJhdGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmF0ZQogICAgICkKIHsKLSAgICBXT1JEICAgIGlpOworICAgIHVuc2lnbmVkIHNob3J0IGlpOwogCiAgICAgLy9FcmFzZSBiYXNpY1JhdGUgZmxhZy4KICAgICBieVJhdGUgPSBieVJhdGUgJiAweDdGOy8vMDExMSAxMTExCkBAIC0xOTksMjAgKzE5OSwyMCBAQAogICAgIHZvaWQgKnBEZXZpY2VIYW5kbGVyLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEl0ZW1SYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBJdGVtRXh0UmF0ZXMsCi0gICAgQk9PTCBiVXBkYXRlQmFzaWNSYXRlLAotICAgIFBXT1JEIHB3TWF4QmFzaWNSYXRlLAotICAgIFBXT1JEIHB3TWF4U3VwcFJhdGUsCi0gICAgUFdPUkQgcHdTdXBwUmF0ZSwKLSAgICBQQllURSBwYnlUb3BDQ0tSYXRlLAotICAgIFBCWVRFIHBieVRvcE9GRE1SYXRlCisgICAgYm9vbCBiVXBkYXRlQmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd01heEJhc2ljUmF0ZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdNYXhTdXBwUmF0ZSwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdTdXBwUmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUb3BDQ0tSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRvcE9GRE1SYXRlCiAgICAgKQogewogUFNEZXZpY2UgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotVUlOVCAgaWk7Ci1CWVRFICBieUhpZ2hTdXBwUmF0ZSA9IDA7Ci1CWVRFICBieVJhdGUgPSAwOwotV09SRCAgd09sZEJhc2ljUmF0ZSA9IHBEZXZpY2UtPndCYXNpY1JhdGU7Ci1VSU5UICB1UmF0ZUxlbjsKK3Vuc2lnbmVkIGludCBpaTsKK3Vuc2lnbmVkIGNoYXIgYnlIaWdoU3VwcFJhdGUgPSAwOwordW5zaWduZWQgY2hhciBieVJhdGUgPSAwOwordW5zaWduZWQgc2hvcnQgd09sZEJhc2ljUmF0ZSA9IHBEZXZpY2UtPndCYXNpY1JhdGU7Cit1bnNpZ25lZCBpbnQgdVJhdGVMZW47CiAKIAogICAgIGlmIChwSXRlbVJhdGVzID09IE5VTEwpCkBAIC0yMzEsMTQgKzIzMSwxNCBAQAogICAgIH0KIAogICAgIGZvciAoaWkgPSAwOyBpaSA8IHVSYXRlTGVuOyBpaSsrKSB7Ci0gICAgCWJ5UmF0ZSA9IChCWVRFKShwSXRlbVJhdGVzLT5hYnlSYXRlc1tpaV0pOworICAgIAlieVJhdGUgPSAodW5zaWduZWQgY2hhcikocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldKTsKICAgICAgICAgaWYgKFdMQU5fTUdNVF9JU19CQVNJQ1JBVEUoYnlSYXRlKSAmJgotICAgICAgICAgICAgKGJVcGRhdGVCYXNpY1JhdGUgPT0gVFJVRSkpICB7CisgICAgICAgICAgICAoYlVwZGF0ZUJhc2ljUmF0ZSA9PSB0cnVlKSkgIHsKICAgICAgICAgICAgIC8vIEFkZCB0byBiYXNpYyByYXRlIHNldCwgdXBkYXRlIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlIGFuZCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUKICAgICAgICAgICAgIENBUkRiQWRkQmFzaWNSYXRlKCh2b2lkICopcERldmljZSwgd0dldFJhdGVJZHgoYnlSYXRlKSk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlBhcnNlTWF4UmF0ZSBBZGRCYXNpY1JhdGU6ICVkXG4iLCB3R2V0UmF0ZUlkeChieVJhdGUpKTsKICAgICAgICAgfQotICAgICAgICBieVJhdGUgPSAoQllURSkocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOworICAgICAgICBieVJhdGUgPSAodW5zaWduZWQgY2hhcikocEl0ZW1SYXRlcy0+YWJ5UmF0ZXNbaWldJjB4N0YpOwogICAgICAgICBpZiAoYnlIaWdoU3VwcFJhdGUgPT0gMCkKICAgICAgICAgICAgIGJ5SGlnaFN1cHBSYXRlID0gYnlSYXRlOwogICAgICAgICBpZiAoYnlSYXRlID4gYnlIaWdoU3VwcFJhdGUpCkBAIC0yNDgsMjAgKzI0OCwyMCBAQAogICAgIGlmICgocEl0ZW1FeHRSYXRlcyAhPSBOVUxMKSAmJiAocEl0ZW1FeHRSYXRlcy0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykgJiYKICAgICAgICAgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSAhPSBQSFlfVFlQRV8xMUIpKSB7CiAKLSAgICAgICAgVUlOVCAgdUV4dFJhdGVMZW4gPSBwSXRlbUV4dFJhdGVzLT5sZW47CisgICAgICAgIHVuc2lnbmVkIGludCB1RXh0UmF0ZUxlbiA9IHBJdGVtRXh0UmF0ZXMtPmxlbjsKIAogICAgICAgICBpZiAodUV4dFJhdGVMZW4gPiBXTEFOX1JBVEVTX01BWExFTikKICAgICAgICAgICAgIHVFeHRSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CiAKICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgdUV4dFJhdGVMZW4gOyBpaSsrKSB7Ci0gICAgICAgICAgICBieVJhdGUgPSAoQllURSkocEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbaWldKTsKKyAgICAgICAgICAgIGJ5UmF0ZSA9ICh1bnNpZ25lZCBjaGFyKShwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1tpaV0pOwogICAgICAgICAgICAgLy8gc2VsZWN0IGhpZ2hlc3QgYmFzaWMgcmF0ZQogICAgICAgICAgICAgaWYgKFdMQU5fTUdNVF9JU19CQVNJQ1JBVEUocEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbaWldKSkgewogICAgICAgICAgICAgCS8vIEFkZCB0byBiYXNpYyByYXRlIHNldCwgdXBkYXRlIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlIGFuZCBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUKICAgICAgICAgICAgICAgICBDQVJEYkFkZEJhc2ljUmF0ZSgodm9pZCAqKXBEZXZpY2UsIHdHZXRSYXRlSWR4KGJ5UmF0ZSkpOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUGFyc2VNYXhSYXRlIEFkZEJhc2ljUmF0ZTogJWRcbiIsIHdHZXRSYXRlSWR4KGJ5UmF0ZSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnlSYXRlID0gKEJZVEUpKHBJdGVtRXh0UmF0ZXMtPmFieVJhdGVzW2lpXSYweDdGKTsKKyAgICAgICAgICAgIGJ5UmF0ZSA9ICh1bnNpZ25lZCBjaGFyKShwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1tpaV0mMHg3Rik7CiAgICAgICAgICAgICBpZiAoYnlIaWdoU3VwcFJhdGUgPT0gMCkKICAgICAgICAgICAgICAgICBieUhpZ2hTdXBwUmF0ZSA9IGJ5UmF0ZTsKICAgICAgICAgICAgIGlmIChieVJhdGUgPiBieUhpZ2hTdXBwUmF0ZSkKQEAgLTMxNCwxNCArMzE0LDE0IEBACiAgICAgKQogewogUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwotV09SRCAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9IDA7Ci1VSU5UICAgICAgICAgICAgaWk7Ci0vL0RXT1JEICAgICAgICAgICBkd1JhdGVUYWJsZVtNQVhfUkFURV0gID0gezEsICAgMiwgICA1LCAgIDExLCAgNiwgICAgOSwgICAgMTIsICAgMTgsICAyNCwgIDM2LCAgNDgsICA1NH07Ci1CT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKLURXT1JEICAgICAgICAgICBkd1Rocm91Z2hwdXRUYmxbTUFYX1JBVEVdID0gezEwLCAyMCwgNTUsIDExMCwgNjAsIDkwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwfTsKLURXT1JEICAgICAgICAgICBkd1Rocm91Z2hwdXQgPSAwOwotV09SRCAgICAgICAgICAgIHdJZHhVcFJhdGUgPSAwOwotRFdPUkQgICAgICAgICAgIGR3VHhEaWZmID0gMDsKK3Vuc2lnbmVkIHNob3J0IHdJZHhEb3duUmF0ZSA9IDA7Cit1bnNpZ25lZCBpbnQgaWk7CisvL3Vuc2lnbmVkIGxvbmcgZHdSYXRlVGFibGVbTUFYX1JBVEVdICA9IHsxLCAgIDIsICAgNSwgICAxMSwgIDYsICAgIDksICAgIDEyLCAgIDE4LCAgMjQsICAzNiwgIDQ4LCAgNTR9OworYm9vbCBiQXV0b1JhdGVbTUFYX1JBVEVdICAgID0ge3RydWUsdHJ1ZSx0cnVlLHRydWUsZmFsc2UsZmFsc2UsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWV9OworCXVuc2lnbmVkIGxvbmcgZHdUaHJvdWdocHV0VGJsW01BWF9SQVRFXSA9IHsxMCwgMjAsIDU1LCAxMTAsIDYwLCA5MCwgMTIwLCAxODAsIDI0MCwgMzYwLCA0ODAsIDU0MH07CisJdW5zaWduZWQgbG9uZyBkd1Rocm91Z2hwdXQgPSAwOworCXVuc2lnbmVkIHNob3J0IHdJZHhVcFJhdGUgPSAwOworCXVuc2lnbmVkIGxvbmcgZHdUeERpZmYgPSAwOwogCiAgICAgaWYgKHBEZXZpY2UtPnBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKICAgICAgICAgLy8gRG9uJ3QgZG8gRmFsbGJhY2sgd2hlbiBzY2FubmluZyBDaGFubmVsCkBAIC0zNDYsMTEgKzM0NiwxMSBAQAogCiAgICAgZm9yKGlpPTA7aWk8TUFYX1JBVEU7aWkrKykgewogICAgICAgICBpZiAocHNOb2RlREJUYWJsZS0+d1N1cHBSYXRlICYgKDB4MDAwMTw8aWkpKSB7Ci0gICAgICAgICAgICBpZiAoYkF1dG9SYXRlW2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IChXT1JEKSBpaTsKKyAgICAgICAgICAgIGlmIChiQXV0b1JhdGVbaWldID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICB3SWR4VXBSYXRlID0gKHVuc2lnbmVkIHNob3J0KSBpaTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBGQUxTRTsKKyAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzcyLDkgKzM3Miw5IEBACiAgICAgZm9yKGlpID0gcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGU7IGlpID4gMDspIHsKICAgICAgICAgaWktLTsKICAgICAgICAgaWYgKCAoZHdUaHJvdWdocHV0VGJsW2lpXSA+IGR3VGhyb3VnaHB1dCkgJiYKLSAgICAgICAgICAgICAoYkF1dG9SYXRlW2lpXT09VFJVRSkgKSB7CisgICAgICAgICAgICAgKGJBdXRvUmF0ZVtpaV09PXRydWUpICkgewogICAgICAgICAgICAgZHdUaHJvdWdocHV0ID0gZHdUaHJvdWdocHV0VGJsW2lpXTsKLSAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9IChXT1JEKSBpaTsKKyAgICAgICAgICAgIHdJZHhEb3duUmF0ZSA9ICh1bnNpZ25lZCBzaG9ydCkgaWk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSB3SWR4RG93blJhdGU7CkBAIC00MDksMTQgKzQwOSwxNCBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lCiAgKgogLSovCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBSQVRFdVNldElFICgKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTcmNSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBEc3RSYXRlcywKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVSYXRlTGVuCisgICAgdW5zaWduZWQgaW50IHVSYXRlTGVuCiAgICAgKQogewotICAgIFVJTlQgaWksIHV1LCB1UmF0ZUNudCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlpLCB1dSwgdVJhdGVDbnQgPSAwOwogCiAgICAgaWYgKChwU3JjUmF0ZXMgPT0gTlVMTCkgfHwgKHBEc3RSYXRlcyA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MzIsNiArNDMyLDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKEJZVEUpdVJhdGVDbnQ7CisgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyKXVSYXRlQ250OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RhdGFyYXRlLmgKaW5kZXggYjhjYTc5Mi4uNGY4ZWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kYXRhcmF0ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGF0YXJhdGUuaApAQCAtNTksMTIgKzU5LDEyIEBACiAgICAgdm9pZCAqcERldmljZUhhbmRsZXIsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwSXRlbVJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEl0ZW1FeHRSYXRlcywKLSAgICBCT09MIGJVcGRhdGVCYXNpY1JhdGUsCi0gICAgUFdPUkQgcHdNYXhCYXNpY1JhdGUsCi0gICAgUFdPUkQgcHdNYXhTdXBwUmF0ZSwKLSAgICBQV09SRCBwd1N1cHBSYXRlLAotICAgIFBCWVRFIHBieVRvcENDS1JhdGUsCi0gICAgUEJZVEUgcGJ5VG9wT0ZETVJhdGUKKyAgICBib29sIGJVcGRhdGVCYXNpY1JhdGUsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3TWF4QmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd01heFN1cHBSYXRlLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1N1cHBSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRvcENDS1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VG9wT0ZETVJhdGUKICAgICApOwogCiB2b2lkCkBAIC03MywyMiArNzMsMjIgQEAKICAgICBQS25vd25Ob2RlREIgcHNOb2RlREJUYWJsZQogICAgICk7CiAKLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFJBVEV1U2V0SUUoCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3JjUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRHN0UmF0ZXMsCi0gICAgVUlOVCAgICAgICAgICAgICAgICB1UmF0ZUxlbgorICAgIHVuc2lnbmVkIGludCB1UmF0ZUxlbgogICAgICk7CiAKLVdPUkQKK3Vuc2lnbmVkIHNob3J0CiB3R2V0UmF0ZUlkeCgKLSAgICBCWVRFIGJ5UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSYXRlCiAgICAgKTsKIAogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBEQVRBUkFURWJ5R2V0UmF0ZUlkeCgKLSAgICBCWVRFIGJ5UmF0ZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSYXRlCiAgICAgKTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2Rlc2MuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCmluZGV4IGNlZGIxZTcuLjEzODg5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGVzYy5oCkBAIC0yNDQsMTAgKzI0NCwxMCBAQAogCiAvKgogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgIFdPUkQgICAgd1Jlc0NvdW50OwotICAgIFdPUkQgICAgd2YxT3duZXIgOwotLy8gICAgV09SRCAgICBmMTVSZXNlcnZlZCA6IDE1OwotLy8gICAgV09SRCAgICBmMU93bmVyIDogMTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzQ291bnQ7CisgICAgdW5zaWduZWQgc2hvcnQgd2YxT3duZXIgOworLy8gICAgdW5zaWduZWQgc2hvcnQgZjE1UmVzZXJ2ZWQgOiAxNTsKKy8vICAgIHVuc2lnbmVkIHNob3J0IGYxT3duZXIgOiAxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUkRFUzA7CiAqLwpAQCAtMjU1LDEzICsyNTUsMTMgQEAKICNpZmRlZiBfX0JJR19FTkRJQU4KIAogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgdm9sYXRpbGUgV09SRCAgICB3UmVzQ291bnQ7CisgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCB3UmVzQ291bnQ7CiAJdW5pb24gewotCQl2b2xhdGlsZSBVMTYgICAgZjE1UmVzZXJ2ZWQ7CisJCXZvbGF0aWxlIHUxNiAgICBmMTVSZXNlcnZlZDsKIAkJc3RydWN0IHsKLSAgICAgICAgICAgIHZvbGF0aWxlIFU4IGY4UmVzZXJ2ZWQxOwotCQkJdm9sYXRpbGUgVTggZjFPd25lcjoxOwotCQkJdm9sYXRpbGUgVTggZjdSZXNlcnZlZDo3OworICAgICAgICAgICAgdm9sYXRpbGUgdTggZjhSZXNlcnZlZDE7CisJCQl2b2xhdGlsZSB1OCBmMU93bmVyOjE7CisJCQl2b2xhdGlsZSB1OCBmN1Jlc2VydmVkOjc7CiAJCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKQEAgLTI3MCw5ICsyNzAsOSBAQAogI2Vsc2UKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnUkRFUzAgewotICAgIFdPUkQgICAgd1Jlc0NvdW50OwotICAgIFdPUkQgICAgZjE1UmVzZXJ2ZWQgOiAxNTsKLSAgICBXT1JEICAgIGYxT3duZXIgOiAxOworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCBmMTVSZXNlcnZlZCA6IDE1OworICAgIHVuc2lnbmVkIHNob3J0IGYxT3duZXIgOiAxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUkRFUzA7CiAKQEAgLTI4MCw4ICsyODAsOCBAQAogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1JERVMxIHsKLSAgICBXT1JEICAgd1JlcUNvdW50OwotICAgIFdPUkQgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JlcUNvdW50OworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JERVMxOwogCkBAIC0yOTEsMTEgKzI5MSwxMSBAQAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1J4RGVzYyB7CiAgICAgdm9sYXRpbGUgU1JERVMwIG1fcmQwUkQwOwogICAgIHZvbGF0aWxlIFNSREVTMSBtX3JkMVJEMTsKLSAgICB2b2xhdGlsZSBVMzIgICAgYnVmZl9hZGRyOwotICAgIHZvbGF0aWxlIFUzMiAgICBuZXh0X2Rlc2M7CisgICAgdm9sYXRpbGUgdTMyICAgIGJ1ZmZfYWRkcjsKKyAgICB2b2xhdGlsZSB1MzIgICAgbmV4dF9kZXNjOwogICAgIHN0cnVjdCB0YWdTUnhEZXNjICAgKm5leHQ7Ly80IGJ5dGVzCiAgICAgdm9sYXRpbGUgUERFVklDRV9SRF9JTkZPICAgIHBSREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgVTMyICAgIFJlc2VydmVkWzJdOy8vOCBieXRlcworICAgIHZvbGF0aWxlIHUzMiAgICBSZXNlcnZlZFsyXTsvLzggYnl0ZXMKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1J4RGVzYywgKlBTUnhEZXNjOwogdHlwZWRlZiBjb25zdCBTUnhEZXNjICpQQ1NSeERlc2M7CkBAIC0zMDQsMjQgKzMwNCwyNCBAQAogCiAvKgogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzAgewotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IwOwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IxOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgd093bmVyX1R4dGltZTsKLS8vICAgIHZvbGF0aWxlICAgIFdPUkQgICAgZjE1VHh0aW1lIDogMTU7Ci0vLyAgICB2b2xhdGlsZSAgICBXT1JEICAgIGYxT3duZXI6MTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCB3T3duZXJfVHh0aW1lOworLy8gICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjE1VHh0aW1lIDogMTU7CisvLyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCBmMU93bmVyOjE7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUREVTMDsKICovCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1RERVMwIHsKLSAgICB2b2xhdGlsZSAgICBCWVRFICAgIGJ5VFNSMDsKLSAgICB2b2xhdGlsZSAgICBCWVRFICAgIGJ5VFNSMTsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMTsKIAl1bmlvbiB7Ci0JCXZvbGF0aWxlIFUxNiAgICBmMTVUeHRpbWU7CisJCXZvbGF0aWxlIHUxNiAgICBmMTVUeHRpbWU7CiAJCXN0cnVjdCB7Ci0gICAgICAgICAgICB2b2xhdGlsZSBVOCBmOFJlc2VydmVkMTsKLQkJCXZvbGF0aWxlIFU4IGYxT3duZXI6MTsKLQkJCXZvbGF0aWxlIFU4IGY3UmVzZXJ2ZWQ6NzsKKyAgICAgICAgICAgIHZvbGF0aWxlIHU4IGY4UmVzZXJ2ZWQxOworCQkJdm9sYXRpbGUgdTggZjFPd25lcjoxOworCQkJdm9sYXRpbGUgdTggZjdSZXNlcnZlZDo3OwogCQl9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogI2Vsc2UKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzAgewotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IwOwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUU1IxOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgZjE1VHh0aW1lIDogMTU7Ci0gICAgdm9sYXRpbGUgICAgV09SRCAgICBmMU93bmVyOjE7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjA7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgY2hhciBieVRTUjE7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjE1VHh0aW1lIDogMTU7CisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgZjFPd25lcjoxOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVERFUzA7CiAKQEAgLTM0MSwyMiArMzQxLDIyIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnVERFUzEgewotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgd1JlcUNvdW50OwotICAgIHZvbGF0aWxlICAgIEJZVEUgICAgYnlUQ1I7Ci0gICAgdm9sYXRpbGUgICAgQllURSAgICBieVJlc2VydmVkOworICAgIHZvbGF0aWxlICAgIHVuc2lnbmVkIHNob3J0IHdSZXFDb3VudDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBjaGFyIGJ5VENSOworICAgIHZvbGF0aWxlICAgIHVuc2lnbmVkIGNoYXIgYnlSZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1RERVMxOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ0RFVklDRV9URF9JTkZPewogICAgIHN0cnVjdCBza19idWZmKiAgICAgc2tiOwotICAgIFBCWVRFICAgICAgICAgICAgICAgYnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICBkbWFfYWRkcl90ICAgICAgICAgIHNrYl9kbWE7CiAgICAgZG1hX2FkZHJfdCAgICAgICAgICBidWZfZG1hOwogICAgIGRtYV9hZGRyX3QgICAgICAgICAgY3Vycl9kZXNjOwotICAgIERXT1JEICAgICAgICAgICAgICAgZHdSZXFDb3VudDsKLSAgICBEV09SRCAgICAgICAgICAgICAgIGR3SGVhZGVyTGVuZ3RoOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlGbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIGR3UmVxQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0hlYWRlckxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RmxhZ3M7CiB9IERFVklDRV9URF9JTkZPLCAgICAqUERFVklDRV9URF9JTkZPOwogCiAvKgpAQCAtMzc4LDExICszNzgsMTEgQEAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERlc2MgewogICAgIHZvbGF0aWxlICAgIFNUREVTMCAgbV90ZDBURDA7CiAgICAgdm9sYXRpbGUgICAgU1RERVMxICBtX3RkMVREMTsKLSAgICB2b2xhdGlsZSAgICBVMzIgICAgYnVmZl9hZGRyOwotICAgIHZvbGF0aWxlICAgIFUzMiAgICBuZXh0X2Rlc2M7CisgICAgdm9sYXRpbGUgICAgdTMyICAgIGJ1ZmZfYWRkcjsKKyAgICB2b2xhdGlsZSAgICB1MzIgICAgbmV4dF9kZXNjOwogICAgIHN0cnVjdCB0YWdTVHhEZXNjKiAgbmV4dDsgLy80IGJ5dGVzCiAgICAgdm9sYXRpbGUgICAgUERFVklDRV9URF9JTkZPIHBUREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgICAgVTMyICAgIFJlc2VydmVkWzJdOy8vOCBieXRlcworICAgIHZvbGF0aWxlICAgIHUzMiAgICBSZXNlcnZlZFsyXTsvLzggYnl0ZXMKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGVzYywgKlBTVHhEZXNjOwogdHlwZWRlZiBjb25zdCBTVHhEZXNjICpQQ1NUeERlc2M7CkBAIC0zOTEsMTMgKzM5MSwxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4U3luY0Rlc2MgewogICAgIHZvbGF0aWxlICAgIFNUREVTMCAgbV90ZDBURDA7CiAgICAgdm9sYXRpbGUgICAgU1RERVMxICBtX3RkMVREMTsKLSAgICB2b2xhdGlsZSAgICBEV09SRCAgIGJ1ZmZfYWRkcjsgLy8gcG9pbnRlciB0byBsb2dpY2FsIGJ1ZmZlcgotICAgIHZvbGF0aWxlICAgIERXT1JEICAgbmV4dF9kZXNjOyAvLyBwb2ludGVyIHRvIG5leHQgbG9naWNhbCBkZXNjcmlwdG9yCi0gICAgdm9sYXRpbGUgICAgV09SRCAgICBtX3dGSUZPQ3RsOwotICAgIHZvbGF0aWxlICAgIFdPUkQgICAgbV93VGltZVN0YW1wOworICAgIHZvbGF0aWxlICAgIHUzMiBidWZmX2FkZHI7IC8vIHBvaW50ZXIgdG8gbG9naWNhbCBidWZmZXIKKyAgICB2b2xhdGlsZSAgICB1MzIgbmV4dF9kZXNjOyAvLyBwb2ludGVyIHRvIG5leHQgbG9naWNhbCBkZXNjcmlwdG9yCisgICAgdm9sYXRpbGUgICAgdW5zaWduZWQgc2hvcnQgbV93RklGT0N0bDsKKyAgICB2b2xhdGlsZSAgICB1bnNpZ25lZCBzaG9ydCBtX3dUaW1lU3RhbXA7CiAgICAgc3RydWN0IHRhZ1NUeFN5bmNEZXNjKiAgbmV4dDsgLy80IGJ5dGVzCiAgICAgdm9sYXRpbGUgICAgUERFVklDRV9URF9JTkZPIHBUREluZm87Ly80IGJ5dGVzCi0gICAgdm9sYXRpbGUgICAgRFdPUkQgICBtX2R3UmVzZXJ2ZWQyOworICAgIHZvbGF0aWxlICAgIHUzMiBtX2R3UmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhTeW5jRGVzYywgKlBTVHhTeW5jRGVzYzsKIHR5cGVkZWYgY29uc3QgU1R4U3luY0Rlc2MgKlBDU1R4U3luY0Rlc2M7CkBAIC00MDcsMzUgKzQwNywzNSBAQAogLy8gUnN2VGltZSBidWZmZXIgaGVhZGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfZ1JUUyB7Ci0gICAgV09SRCAgICAgICAgd1JUU1R4UnJ2VGltZV9iYTsKLSAgICBXT1JEICAgICAgICB3UlRTVHhScnZUaW1lX2FhOwotICAgIFdPUkQgICAgICAgIHdSVFNUeFJydlRpbWVfYmI7Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYjsKLSAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU1R4UnJ2VGltZV9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHhScnZUaW1lX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNUeFJydlRpbWVfYmI7CisgICAgdW5zaWduZWQgc2hvcnQgd1Jlc2VydmVkOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHhScnZUaW1lX2E7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JydlRpbWVfZ1JUUywgKlBTUnJ2VGltZV9nUlRTOwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nUlRTICpQQ1NScnZUaW1lX2dSVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2dDVFMgewotICAgIFdPUkQgICAgICAgIHdDVFNUeFJydlRpbWVfYmE7Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYjsKLSAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd0NUU1R4UnJ2VGltZV9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4UnJ2VGltZV9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9nQ1RTLCAqUFNScnZUaW1lX2dDVFM7CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2dDVFMgKlBDU1JydlRpbWVfZ0NUUzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfYWIgewotICAgIFdPUkQgICAgICAgIHdSVFNUeFJydlRpbWU7Ci0gICAgV09SRCAgICAgICAgd1R4UnJ2VGltZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHhScnZUaW1lOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWU7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JydlRpbWVfYWIsICpQU1JydlRpbWVfYWI7CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2FiICpQQ1NScnZUaW1lX2FiOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUnJ2VGltZV9hdGltIHsKLSAgICBXT1JEICAgICAgICB3Q1RTVHhScnZUaW1lX2JhOwotICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTVHhScnZUaW1lX2JhOworICAgIHVuc2lnbmVkIHNob3J0IHdUeFJydlRpbWVfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hdGltLCAqUFNScnZUaW1lX2F0aW07CiB0eXBlZGVmIGNvbnN0IFNScnZUaW1lX2F0aW0gKlBDU1JydlRpbWVfYXRpbTsKQEAgLTQ0NCwyNSArNDQ0LDI1IEBACiAvLyBSVFMgYnVmZmVyIGhlYWRlcgogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NSVFNEYXRhIHsKLSAgICBXT1JEICAgIHdGcmFtZUNvbnRyb2w7Ci0gICAgV09SRCAgICB3RHVyYXRpb25JRDsKLSAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKLSAgICBCWVRFICAgIGFieVRBW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDb250cm9sOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbklEOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UkFbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5VEFbRVRIX0FMRU5dOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNEYXRhLCAqUFNSVFNEYXRhOwogdHlwZWRlZiBjb25zdCBTUlRTRGF0YSAqUENTUlRTRGF0YTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19nIHsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICAgICAgYnlTZXJ2aWNlRmllbGRfYjsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGhfYjsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICAgICAgYnlTZXJ2aWNlRmllbGRfYTsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGhfYTsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYmE7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2FhOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYjsKLSAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiAgICAgU1JUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2csICpQU1JUU19nOwpAQCAtNDcwLDIwICs0NzAsMjAgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2dfRkIgewotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYjsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9iOwotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYTsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9hOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYWE7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2JiOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYmFfZjA7Ci0gICAgV09SRCAgICAgICAgd1JUU0R1cmF0aW9uX2FhX2YwOwotICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9iYV9mMTsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYWFfZjE7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2FhOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2JhX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNEdXJhdGlvbl9hYV9mMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTRHVyYXRpb25fYmFfZjE7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2FhX2YxOwogICAgIFNSVFNEYXRhICAgIERhdGE7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JUU19nX0ZCLCAqUFNSVFNfZ19GQjsKQEAgLTQ5MSwxMSArNDkxLDExIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hYiB7Ci0gICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZDsKLSAgICBXT1JEICAgICAgICB3VHJhbnNtaXRMZW5ndGg7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdSZXNlcnZlZDsKICAgICBTUlRTRGF0YSAgICBEYXRhOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfYWIsICpQU1JUU19hYjsKQEAgLTUwMywxMyArNTAzLDEzIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hX0ZCIHsKLSAgICBCWVRFICAgICAgICBieVNpZ25hbEZpZWxkOwotICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aDsKLSAgICBXT1JEICAgICAgICB3RHVyYXRpb247Ci0gICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwotICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9mMDsKLSAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fZjE7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1JUU0R1cmF0aW9uX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNEdXJhdGlvbl9mMTsKICAgICBTUlRTRGF0YSAgICBEYXRhOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfYV9GQiwgKlBTUlRTX2FfRkI7CkBAIC01MjAsMzIgKzUyMCwzMiBAQAogLy8gQ1RTIGJ1ZmZlciBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ1RTRGF0YSB7Ci0gICAgV09SRCAgICB3RnJhbWVDb250cm9sOwotICAgIFdPUkQgICAgd0R1cmF0aW9uSUQ7Ci0gICAgQllURSAgICBhYnlSQVtFVEhfQUxFTl07Ci0gICAgV09SRCAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYW1lQ29udHJvbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25JRDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJBW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0NUU0RhdGEsICpQU0NUU0RhdGE7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDVFMgewotICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGRfYjsKLSAgICBCWVRFICAgICAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgICAgIHdUcmFuc21pdExlbmd0aF9iOwotICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKLSAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9iOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iYTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmVzZXJ2ZWQ7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTLCAqUFNDVFM7CiB0eXBlZGVmIGNvbnN0IFNDVFMgKlBDU0NUUzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NUU19GQiB7Ci0gICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZF9iOwotICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkX2I7Ci0gICAgV09SRCAgICAgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uX2JhOwotICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKLSAgICBXT1JEICAgICAgICB3Q1RTRHVyYXRpb25fYmFfZjA7Ci0gICAgV09SRCAgICAgICAgd0NUU0R1cmF0aW9uX2JhX2YxOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RHVyYXRpb25fYmE7CisgICAgdW5zaWduZWQgc2hvcnQgd1Jlc2VydmVkOworICAgIHVuc2lnbmVkIHNob3J0IHdDVFNEdXJhdGlvbl9iYV9mMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTRHVyYXRpb25fYmFfZjE7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTX0ZCLCAqUFNDVFNfRkI7CkBAIC01NTYsMTkgKzU1NiwxOSBAQAogLy8gVHggRklGTyBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhCdWZIZWFkIHsKLSAgICBEV09SRCAgIGFkd1R4S2V5WzRdOwotICAgIFdPUkQgICAgd0ZJRk9DdGw7Ci0gICAgV09SRCAgICB3VGltZVN0YW1wOwotICAgIFdPUkQgICAgd0ZyYWdDdGw7Ci0gICAgQllURSAgICBieVR4UG93ZXI7Ci0gICAgQllURSAgICB3UmVzZXJ2ZWQ7CisgICAgdTMyIGFkd1R4S2V5WzRdOworICAgIHVuc2lnbmVkIHNob3J0IHdGSUZPQ3RsOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXA7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdDdGw7CisgICAgdW5zaWduZWQgY2hhciBieVR4UG93ZXI7CisgICAgdW5zaWduZWQgY2hhciB3UmVzZXJ2ZWQ7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4QnVmSGVhZCwgKlBTVHhCdWZIZWFkOwogdHlwZWRlZiBjb25zdCBTVHhCdWZIZWFkICpQQ1NUeEJ1ZkhlYWQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeFNob3J0QnVmSGVhZCB7Ci0gICAgV09SRCAgICB3RklGT0N0bDsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXA7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZJRk9DdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd1RpbWVTdGFtcDsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhTaG9ydEJ1ZkhlYWQsICpQU1R4U2hvcnRCdWZIZWFkOwogdHlwZWRlZiBjb25zdCBTVHhTaG9ydEJ1ZkhlYWQgKlBDU1R4U2hvcnRCdWZIZWFkOwpAQCAtNTc3LDU3ICs1NzcsNTcgQEAKIC8vIFR4IGRhdGEgaGVhZGVyCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfZyB7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2E7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9hOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9iOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9hOworICAgIHVuc2lnbmVkIGNoYXIgYnlTaWduYWxGaWVsZF9iOworICAgIHVuc2lnbmVkIGNoYXIgYnlTZXJ2aWNlRmllbGRfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGhfYjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGRfYTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2VydmljZUZpZWxkX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2I7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2E7CisgICAgdW5zaWduZWQgc2hvcnQgd1RpbWVTdGFtcE9mZl9iOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmZfYTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhEYXRhSGVhZF9nLCAqUFNUeERhdGFIZWFkX2c7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2cgKlBDU1R4RGF0YUhlYWRfZzsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfZ19GQiB7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2I7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9iOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2I7Ci0gICAgQllURSAgICBieVNpZ25hbEZpZWxkX2E7Ci0gICAgQllURSAgICBieVNlcnZpY2VGaWVsZF9hOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoX2E7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9hOwotICAgIFdPUkQgICAgd0R1cmF0aW9uX2FfZjA7Ci0gICAgV09SRCAgICB3RHVyYXRpb25fYV9mMTsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYjsKLSAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGRfYjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2VydmljZUZpZWxkX2I7CisgICAgdW5zaWduZWQgc2hvcnQgd1RyYW5zbWl0TGVuZ3RoX2I7CisgICAgdW5zaWduZWQgY2hhciBieVNpZ25hbEZpZWxkX2E7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZF9hOworICAgIHVuc2lnbmVkIHNob3J0IHdUcmFuc21pdExlbmd0aF9hOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9iOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9hX2YxOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmZfYjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VGltZVN0YW1wT2ZmX2E7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfZ19GQiwgKlBTVHhEYXRhSGVhZF9nX0ZCOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nX0ZCICpQQ1NUeERhdGFIZWFkX2dfRkI7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfYWIgewotICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwotICAgIFdPUkQgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmY7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfYWIsICpQU1R4RGF0YUhlYWRfYWI7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2FiICpQQ1NUeERhdGFIZWFkX2FiOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERhdGFIZWFkX2FfRkIgewotICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKLSAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwotICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwotICAgIFdPUkQgICAgd0R1cmF0aW9uOwotICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9mMDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbl9mMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmFsRmllbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNlcnZpY2VGaWVsZDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHJhbnNtaXRMZW5ndGg7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOworICAgIHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmY7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uX2YwOworICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbl9mMTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTVHhEYXRhSGVhZF9hX0ZCLCAqUFNUeERhdGFIZWFkX2FfRkI7CiB0eXBlZGVmIGNvbnN0IFNUeERhdGFIZWFkX2FfRkIgKlBDU1R4RGF0YUhlYWRfYV9GQjsKQEAgLTYzNiwzNyArNjM2LDM3IEBACiAvLyBNSUNIRFIgZGF0YSBoZWFkZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTTUlDSERSSGVhZCB7Ci0gICAgRFdPUkQgICBhZHdIRFIwWzRdOwotICAgIERXT1JEICAgYWR3SERSMVs0XTsKLSAgICBEV09SRCAgIGFkd0hEUjJbNF07CisgICAgdTMyIGFkd0hEUjBbNF07CisgICAgdTMyIGFkd0hEUjFbNF07CisgICAgdTMyIGFkd0hEUjJbNF07CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU01JQ0hEUkhlYWQsICpQU01JQ0hEUkhlYWQ7CiB0eXBlZGVmIGNvbnN0IFNNSUNIRFJIZWFkICpQQ1NNSUNIRFJIZWFkOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQkVBQ09OQ3RsIHsKLSAgICBEV09SRCAgIEJ1ZlJlYWR5IDogMTsKLSAgICBEV09SRCAgIFRTRiAgICAgIDogMTU7Ci0gICAgRFdPUkQgICBCdWZMZW4gICA6IDExOwotICAgIERXT1JEICAgUmVzZXJ2ZWQgOiA1OworICAgIHUzMiBCdWZSZWFkeSA6IDE7CisgICAgdTMyIFRTRiAgICAgIDogMTU7CisgICAgdTMyIEJ1ZkxlbiAgIDogMTE7CisgICAgdTMyIFJlc2VydmVkIDogNTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQkVBQ09OQ3RsOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NTZWNyZXRLZXkgewotICAgIERXT1JEICAgZHdMb3dEd29yZDsKLSAgICBCWVRFICAgIGJ5SGlnaEJ5dGU7CisgICAgdTMyIGR3TG93RHdvcmQ7CisgICAgdW5zaWduZWQgY2hhciBieUhpZ2hCeXRlOwogfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNTZWNyZXRLZXk7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NLZXlFbnRyeSB7Ci0gICAgQllURSAgYWJ5QWRkckhpWzJdOwotICAgIFdPUkQgIHdLQ1RMOwotICAgIEJZVEUgIGFieUFkZHJMb1s0XTsKLSAgICBEV09SRCBkd0tleTBbNF07Ci0gICAgRFdPUkQgZHdLZXkxWzRdOwotICAgIERXT1JEIGR3S2V5Mls0XTsKLSAgICBEV09SRCBkd0tleTNbNF07Ci0gICAgRFdPUkQgZHdLZXk0WzRdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkckhpWzJdOworICAgIHVuc2lnbmVkIHNob3J0IHdLQ1RMOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkckxvWzRdOworICAgIHUzMiBkd0tleTBbNF07CisgICAgdTMyIGR3S2V5MVs0XTsKKyAgICB1MzIgZHdLZXkyWzRdOworICAgIHUzMiBkd0tleTNbNF07CisgICAgdTMyIGR3S2V5NFs0XTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTS2V5RW50cnk7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlLmgKaW5kZXggNDBlZTRlMS4uMmU3YzJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZS5oCkBAIC00OCwxMCArNDgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAvLyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpAQCAtMjE4LDcgKzIxOCw3IEBACiAjZGVmaW5lIE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQJMHgwMQogCiAvLyBQTUtJRCBTdHJ1Y3R1cmVzCi10eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfUE1LSURfVkFMVUVbMTZdOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIE5ESVNfODAyXzExX1BNS0lEX1ZBTFVFWzE2XTsKIAogCiB0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1dFUF9TVEFUVVMKQEAgLTI1MCw3ICsyNTAsNyBAQAogLy9BZGRlZCBuZXcgdHlwZXMgZm9yIFBNS0lEIENhbmRpZGF0ZSBsaXN0cy4KIHR5cGVkZWYgc3RydWN0IF9QTUtJRF9DQU5ESURBVEUgewogICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOwotICAgIFVMT05HIEZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgRmxhZ3M7CiB9IFBNS0lEX0NBTkRJREFURSwgKlBQTUtJRF9DQU5ESURBVEU7CiAKIApAQCAtMjYxLDE1ICsyNjEsMTUgQEAKIH0gQlNTSURfSU5GTywgKlBCU1NJRF9JTkZPOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUE1LSUQgewotICAgIFVMT05HIExlbmd0aDsKLSAgICBVTE9ORyBCU1NJREluZm9Db3VudDsKKyAgICB1bnNpZ25lZCBsb25nIExlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIEJTU0lESW5mb0NvdW50OwogICAgIEJTU0lEX0lORk8gQlNTSURJbmZvW01BWF9CU1NJRElORk9fNF9QTUtJRF07CiB9IFNQTUtJRCwgKlBTUE1LSUQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NQTUtJRENhbmRpZGF0ZUV2ZW50IHsKICAgICBORElTXzgwMl8xMV9TVEFUVVNfVFlQRSAgICAgU3RhdHVzVHlwZTsKLSAgICBVTE9ORyBWZXJzaW9uOyAgICAgICAvLyBWZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUKLSAgICBVTE9ORyBOdW1DYW5kaWRhdGVzOyAvLyBOby4gb2YgcG1raWQgY2FuZGlkYXRlcworICAgIHVuc2lnbmVkIGxvbmcgVmVyc2lvbjsgICAgICAgLy8gVmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlCisgICAgdW5zaWduZWQgbG9uZyBOdW1DYW5kaWRhdGVzOyAvLyBOby4gb2YgcG1raWQgY2FuZGlkYXRlcwogICAgIFBNS0lEX0NBTkRJREFURSBDYW5kaWRhdGVMaXN0W01BWF9QTUtJRExJU1RdOwogfSBTUE1LSURDYW5kaWRhdGVFdmVudCwgKlBTUE1LSURDYW5kaWRhdGVFdmVudDsKIApAQCAtMjc5LDEwICsyNzksMTAgQEAKICNkZWZpbmUgTUFYX1FVSUVUX0NPVU5UICAgICA4CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NRdWlldENvbnRyb2wgewotICAgIEJPT0wgICAgICAgIGJFbmFibGU7Ci0gICAgRFdPUkQgICAgICAgZHdTdGFydFRpbWU7Ci0gICAgQllURSAgICAgICAgYnlQZXJpb2Q7Ci0gICAgV09SRCAgICAgICAgd0R1cmF0aW9uOworICAgIGJvb2wgYkVuYWJsZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3U3RhcnRUaW1lOworICAgIHVuc2lnbmVkIGNoYXIgYnlQZXJpb2Q7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uOwogfSBTUXVpZXRDb250cm9sLCAqUFNRdWlldENvbnRyb2w7CiAKIC8vLS0KQEAgLTI5MSw3ICsyOTEsNyBAQAogICAgIGNoYXIqICAgICAgIG5hbWU7CiAgICAgaW50ICAgICAgICAgaW9fc2l6ZTsKICAgICBpbnQgICAgICAgICBuVHhRdWV1ZTsKLSAgICBVMzIgICAgICAgICBmbGFnczsKKyAgICB1MzIgICAgICAgICBmbGFnczsKIH0gQ0hJUF9JTkZPLCAqUENISVBfSU5GTzsKIAogCkBAIC0zMDMsMTUgKzMwMywxNSBAQAogCiAvLyBUaGUgcmVjZWl2ZSBkdXBsaWNhdGUgZGV0ZWN0aW9uIGNhY2hlIGVudHJ5CiB0eXBlZGVmIHN0cnVjdCB0YWdTQ2FjaGVFbnRyeXsKLSAgICBXT1JEICAgICAgICB3Rm1TZXF1ZW5jZTsKLSAgICBCWVRFICAgICAgICBhYnlBZGRyMltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd0ZtU2VxdWVuY2U7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMltFVEhfQUxFTl07CiB9IFNDYWNoZUVudHJ5LCAqUFNDYWNoZUVudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ2FjaGV7CiAvKiBUaGUgcmVjZWl2ZSBjYWNoZSBpcyB1cGRhdGVkIGNpcmN1bGFybHkuICBUaGUgbmV4dCBlbnRyeSB0byBiZSB3cml0dGVuIGlzCiAgKiBpbmRleGVkIGJ5IHRoZSAiSW5QdHIiLgogKi8KLSAgICBVSU5UICAgICAgICAgICAgdUluUHRyOyAgICAgICAgIC8vIFBsYWNlIHRvIHVzZSBuZXh0CisgICAgdW5zaWduZWQgaW50IHVJblB0cjsgICAgICAgICAvLyBQbGFjZSB0byB1c2UgbmV4dAogICAgIFNDYWNoZUVudHJ5ICAgICBhc0NhY2hlRW50cnlbRFVQTElDQVRFX1JYX0NBQ0hFX0xFTkdUSF07CiB9IFNDYWNoZSwgKlBTQ2FjaGU7CiAKQEAgLTMxOSwxNCArMzE5LDE0IEBACiAvLyBEZUZyYWdtZW50IENvbnRyb2wgQmxvY2ssIHVzZWQgZm9yIGNvbGxlY3RpbmcgZnJhZ21lbnRzIHByaW9yIHRvIHJlYXNzZW1ibHkKIHR5cGVkZWYgc3RydWN0IHRhZ1NEZUZyYWdDb250cm9sQmxvY2sKIHsKLSAgICBXT1JEICAgICAgICAgICAgd1NlcXVlbmNlOwotICAgIFdPUkQgICAgICAgICAgICB3RnJhZ051bTsKLSAgICBCWVRFICAgICAgICAgICAgYWJ5QWRkcjJbRVRIX0FMRU5dOwotCVVJTlQgICAgICAgICAgICB1TGlmZXRpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcXVlbmNlOworICAgIHVuc2lnbmVkIHNob3J0IHdGcmFnTnVtOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QWRkcjJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGludCB1TGlmZXRpbWU7CiAgICAgc3RydWN0IHNrX2J1ZmYqIHNrYjsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UnhCdWZmZXI7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVMZW5ndGg7Ci0gICAgQk9PTCAgICAgICAgICAgIGJJblVzZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aDsKKyAgICBib29sIGJJblVzZTsKIH0gU0RlRnJhZ0NvbnRyb2xCbG9jaywgKlBTRGVGcmFnQ29udHJvbEJsb2NrOwogCiAKQEAgLTM4Niw3ICszODYsNyBAQAogICAgIGludCAgICAgICAgIHNob3J0X3JldHJ5OwogICAgIGludCAgICAgICAgIGxvbmdfcmV0cnk7CiAgICAgaW50ICAgICAgICAgYmJwX3R5cGU7Ci0gICAgVTMyICAgICAgICAgZmxhZ3M7CisgICAgdTMyICAgICAgICAgZmxhZ3M7CiB9IE9QVElPTlMsICpQT1BUSU9OUzsKIAogCkBAIC00MTcsMjEgKzQxNywyMSBAQAogICAgIGRtYV9hZGRyX3QgICAgICAgICAgICAgICAgICB0eF9idWZzX2RtYTE7CiAgICAgZG1hX2FkZHJfdCAgICAgICAgICAgICAgICAgIHR4X2JlYWNvbl9kbWE7CiAKLSAgICBQQllURSAgICAgICAgICAgICAgICAgICAgICAgdHgwX2J1ZnM7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgIHR4MV9idWZzOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICB0eF9iZWFjb25fYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eDBfYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eDFfYnVmczsKKyAgICB1bnNpZ25lZCBjaGFyICp0eF9iZWFjb25fYnVmczsKIAogICAgIENISVBfVFlQRSAgICAgICAgICAgICAgICAgICBjaGlwX2lkOwogCi0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRPZmZzZXQ7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgICAgIGR3SXNyOwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1hZGRyOwotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBpb2FkZHI7Ci0gICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgIGlvX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIFBvcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzcjsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYWRkcjsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgaW9hZGRyOworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBpb19zaXplOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5UmV2SWQ7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIFN1YlN5c3RlbUlEOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICBTdWJWZW5kb3JJRDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmV2SWQ7CisgICAgdW5zaWduZWQgc2hvcnQgU3ViU3lzdGVtSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgU3ViVmVuZG9ySUQ7CiAKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgblR4UXVldWVzOwogICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpVERVc2VkW1RZUEVfTUFYVERdOwpAQCAtNDQ4LDE3ICs0NDgsMTcgQEAKICAgICBTQ2FjaGUgICAgICAgICAgICAgICAgICAgICAgc0R1cFJ4Q2FjaGU7CiAKICAgICBTRGVGcmFnQ29udHJvbEJsb2NrICAgICAgICAgc1J4REZDQltDQl9NQVhfUlhfRlJBR107Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIGNiREZDQjsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgY2JGcmVlREZDQjsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdUN1cnJlbnRERkNCSWR4OworICAgIHVuc2lnbmVkIGludAljYkRGQ0I7CisgICAgdW5zaWduZWQgaW50CWNiRnJlZURGQ0I7CisgICAgdW5zaWduZWQgaW50CXVDdXJyZW50REZDQklkeDsKIAogICAgIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICBzT3B0czsKIAotICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CiAKLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgcnhfYnVmX3N6OworICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICByeF9idWZfc3o7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpY2FzdF9saW1pdDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlSeE1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVJ4TW9kZTsKIAogICAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICBsb2NrOwogLy9QTElDRV9ERUJVRy0+CkBAIC00NzIsMTkgKzQ3MiwxOSBAQAogLy9QTElDRV9ERUJVRyA8LQogCiAKLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgcnhfYnl0ZXM7CisgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2J5dGVzOwogCiAgICAgLy8gVmVyc2lvbiBjb250cm9sCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TG9jYWxJRDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlSRlR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQ7CisgICAgdW5zaWduZWQgY2hhciBieVJGVHlwZTsKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieU1heFB3ckxldmVsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVpvbmVUeXBlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiWm9uZVJlZ0V4aXN0OwotICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5T3JpZ2luYWxab25ldHlwZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYWJ5TWFjQ29udGV4dFtNQUNfTUFYX0NPTlRFWFRfUkVHXTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYkxpbmtQYXNzOyAgICAgICAgICAvLyBsaW5rIHN0YXR1czogT0sgb3IgZmFpbAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlDdXJyZW50TmV0QWRkcltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgY2hhciBieU1heFB3ckxldmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlab25lVHlwZTsKKyAgICBib29sIGJab25lUmVnRXhpc3Q7CisgICB1bnNpZ25lZCBjaGFyIGJ5T3JpZ2luYWxab25ldHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieU1hY0NvbnRleHRbTUFDX01BWF9DT05URVhUX1JFR107CisgICAgYm9vbCBiTGlua1Bhc3M7ICAgICAgICAgIC8vIGxpbmsgc3RhdHVzOiBPSyBvciBmYWlsCisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyZW50TmV0QWRkcltFVEhfQUxFTl07CiAKICAgICAvLyBBZGFwdGVyIHN0YXRpc3RpY3MKICAgICBTU3RhdENvdW50ZXIgICAgICAgICAgICAgICAgc2NTdGF0aXN0aWM7CkBAIC00OTcsMjQ5ICs0OTcsMjQ5IEBACiAgICAgU01nbXRPYmplY3QgICAgICAgICAgICAgICAgIHNNZ210T2JqOwogCiAgICAgLy8gODAyLjExIE1BQyBzcGVjaWZpYwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1Q3VyclJTU0k7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5Q3VyclNROworICAgIHVuc2lnbmVkIGludAl1Q3VyclJTU0k7CisgICAgdW5zaWduZWQgY2hhciBieUN1cnJTUTsKIAotICAgIERXT1JEICAgICAgICAgICAgICAgICAgICAgICBkd1R4QW50ZW5uYVNlbDsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgZHdSeEFudGVubmFTZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5QW50ZW5uYUNvdW50OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVJ4QW50ZW5uYU1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VHhBbnRlbm5hTW9kZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYlR4UnhBbnRJbnY7CisgICAgdW5zaWduZWQgbG9uZyBkd1R4QW50ZW5uYVNlbDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnhBbnRlbm5hU2VsOworICAgIHVuc2lnbmVkIGNoYXIgYnlBbnRlbm5hQ291bnQ7CisgICAgdW5zaWduZWQgY2hhciBieVJ4QW50ZW5uYU1vZGU7CisgICAgdW5zaWduZWQgY2hhciBieVR4QW50ZW5uYU1vZGU7CisgICAgYm9vbCBiVHhSeEFudEludjsKIAotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICBwYnlUbXBCdWZmOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1U0lGUzsgICAgLy9DdXJyZW50IFNJRlMKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdURJRlM7ICAgIC8vQ3VycmVudCBESUZTCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIHVFSUZTOyAgICAvL0N1cnJlbnQgRUlGUwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1U2xvdDsgICAgLy9DdXJyZW50IFNsb3RUaW1lCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgIHVDd01pbjsgICAvL0N1cnJlbnQgQ3dNaW4KLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgdUN3TWF4OyAgIC8vQ3dNYXggaXMgZml4ZWQgb24gMTAyMy4KKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUbXBCdWZmOworICAgIHVuc2lnbmVkIGludAl1U0lGUzsgICAgLy9DdXJyZW50IFNJRlMKKyAgICB1bnNpZ25lZCBpbnQJdURJRlM7ICAgIC8vQ3VycmVudCBESUZTCisgICAgdW5zaWduZWQgaW50CXVFSUZTOyAgICAvL0N1cnJlbnQgRUlGUworICAgIHVuc2lnbmVkIGludAl1U2xvdDsgICAgLy9DdXJyZW50IFNsb3RUaW1lCisgICAgdW5zaWduZWQgaW50CXVDd01pbjsgICAvL0N1cnJlbnQgQ3dNaW4KKyAgICB1bnNpZ25lZCBpbnQJdUN3TWF4OyAgIC8vQ3dNYXggaXMgZml4ZWQgb24gMTAyMy4KICAgICAvLyBQSFkgcGFyYW1ldGVyCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5U0lGUzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlESUZTOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieUVJRlM7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5U2xvdDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlDV01heE1pbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U0lGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RElGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RUlGUzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2xvdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q1dNYXhNaW47CiAgICAgQ0FSRF9QSFlfVFlQRSAgICAgICAgICAgICAgIGVDdXJyZW50UEhZVHlwZTsKIAogCiAgICAgVklBX0JCX1RZUEUgICAgICAgICAgICAgICAgIGJ5QkJUeXBlOyAvLzA6IDExQSwgMToxMUIsIDI6MTFHCiAgICAgVklBX1BLVF9UWVBFICAgICAgICAgICAgICAgIGJ5UGFja2V0VHlwZTsgLy8wOjExYSwxOjExYiwyOjExZ2Iob25seSBDQ0sgaW4gQmFzaWNSYXRlKSwzOjExZ2EoT0ZETSBpbiBCYXNpYyBSYXRlKQotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3QmFzaWNSYXRlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieUFDS1JhdGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5VG9wT0ZETUJhc2ljUmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlUb3BDQ0tCYXNpY1JhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgd0Jhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QUNLUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wT0ZETUJhc2ljUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VG9wQ0NLQmFzaWNSYXRlOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TWluQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlNYXhDaGFubmVsOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICB1Q29ubmVjdGlvblJhdGU7CisgICAgdW5zaWduZWQgY2hhciBieU1pbkNoYW5uZWw7CisgICAgdW5zaWduZWQgY2hhciBieU1heENoYW5uZWw7CisgICAgdW5zaWduZWQgaW50CXVDb25uZWN0aW9uUmF0ZTsKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVByZWFtYmxlVHlwZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlTaG9ydFByZWFtYmxlOworICAgIHVuc2lnbmVkIGNoYXIgYnlQcmVhbWJsZVR5cGU7CisgICAgdW5zaWduZWQgY2hhciBieVNob3J0UHJlYW1ibGU7CiAKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3UlRTVGhyZXNob2xkOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ21lbnRhdGlvblRocmVzaG9sZDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYnlTaG9ydFJldHJ5TGltaXQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5TG9uZ1JldHJ5TGltaXQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlOworICAgIHVuc2lnbmVkIHNob3J0IHdSVFNUaHJlc2hvbGQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisgICAgdW5zaWduZWQgY2hhciBieVNob3J0UmV0cnlMaW1pdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9uZ1JldHJ5TGltaXQ7CiAgICAgQ0FSRF9PUF9NT0RFICAgICAgICAgICAgICAgIGVPUE1vZGU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5T3BNb2RlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQlNTSURGaWx0ZXI7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgYWJ5QlNTSURbRVRIX0FMRU5dOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVCU1NJRFtFVEhfQUxFTl07Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgICAgIHdDVFNEdXJhdGlvbjsgICAgICAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgICAgICB3QUNLRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1JUU1RyYW5zbWl0TGVuOyAgICAvLyB1cGRhdGUgd2hpbGUgc3BlZWQgY2hhbmdlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5UlRTU2VydmljZUZpZWxkOyAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBieVJUU1NpZ25hbEZpZWxkOyAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3BNb2RlOworICAgIGJvb2wgYkJTU0lERmlsdGVyOworICAgIHVuc2lnbmVkIHNob3J0IHdNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJTU0lEW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURlc2lyZUJTU0lEW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q1RTRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBzaG9ydCB3QUNLRHVyYXRpb247ICAgICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBzaG9ydCB3UlRTVHJhbnNtaXRMZW47ICAgIC8vIHVwZGF0ZSB3aGlsZSBzcGVlZCBjaGFuZ2UKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UlRTU2VydmljZUZpZWxkOyAgLy8gdXBkYXRlIHdoaWxlIHNwZWVkIGNoYW5nZQorICAgIHVuc2lnbmVkIGNoYXIgYnlSVFNTaWduYWxGaWVsZDsgICAvLyB1cGRhdGUgd2hpbGUgc3BlZWQgY2hhbmdlCiAKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICAgICAgZHdNYXhSZWNlaXZlTGlmZXRpbWU7ICAgICAgIC8vIGRvdDExTWF4UmVjZWl2ZUxpZmV0aW1lCisgICAgdW5zaWduZWQgbG9uZyBkd01heFJlY2VpdmVMaWZldGltZTsgICAgICAgLy8gZG90MTFNYXhSZWNlaXZlTGlmZXRpbWUKIAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQ0NLOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiRW5jcnlwdGlvbkVuYWJsZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgICAgYkxvbmdIZWFkZXI7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgIGJTaG9ydFNsb3RUaW1lOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUHJvdGVjdE1vZGU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgIGJOb25FUlBQcmVzZW50OwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiQmFya2VyUHJlYW1ibGVNZDsKKyAgICBib29sIGJDQ0s7CisgICAgYm9vbCBiRW5jcnlwdGlvbkVuYWJsZTsKKyAgICBib29sIGJMb25nSGVhZGVyOworICAgIGJvb2wgYlNob3J0U2xvdFRpbWU7CisgICAgYm9vbCBiUHJvdGVjdE1vZGU7CisgICAgYm9vbCBiTm9uRVJQUHJlc2VudDsKKyAgICBib29sIGJCYXJrZXJQcmVhbWJsZU1kOwogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgIGJ5RVJQRmxhZzsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICAgICAgd1VzZVByb3RlY3RDbnREb3duOworICAgIHVuc2lnbmVkIGNoYXIgYnlFUlBGbGFnOworICAgIHVuc2lnbmVkIHNob3J0IHdVc2VQcm90ZWN0Q250RG93bjsKIAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUmFkaW9Db250cm9sT2ZmOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICBiUmFkaW9PZmY7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZVBTTW9kZTsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3TGlzdGVuSW50ZXJ2YWw7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlBXQml0T247CisgICAgYm9vbCBiUmFkaW9Db250cm9sT2ZmOworICAgIGJvb2wgYlJhZGlvT2ZmOworICAgIGJvb2wgYkVuYWJsZVBTTW9kZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWw7CisgICAgYm9vbCBiUFdCaXRPbjsKICAgICBXTUFDX1BPV0VSX01PREUgICAgICAgICBlUFNNb2RlOwogCiAKICAgICAvLyBHUElPIFJhZGlvIENvbnRyb2wKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieVJhZGlvQ3RsOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5R1BJTzsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiSFdSYWRpb09mZjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUHJ2QWN0aXZlNFJhZGlvT0ZGOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJHUElPQmxvY2tSZWFkOworICAgIHVuc2lnbmVkIGNoYXIgYnlSYWRpb0N0bDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5R1BJTzsKKyAgICBib29sIGJIV1JhZGlvT2ZmOworICAgIGJvb2wgYlBydkFjdGl2ZTRSYWRpb09GRjsKKyAgICBib29sIGJHUElPQmxvY2tSZWFkOwogCiAgICAgLy8gQmVhY29uIHJlbGVhdGVkCi0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd1NlcUNvdW50ZXI7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0JDTkJ1ZkxlbjsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQmVhY29uQnVmUmVhZHk7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkJlYWNvblNlbnQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYklzQmVhY29uQnVmUmVhZHlTZXQ7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgY2JCZWFjb25CdWZSZWFkeVNldENudDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiRml4UmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUN1cnJlbnRDaDsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1U2NhblRpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcUNvdW50ZXI7CisgICAgdW5zaWduZWQgc2hvcnQgd0JDTkJ1ZkxlbjsKKyAgICBib29sIGJCZWFjb25CdWZSZWFkeTsKKyAgICBib29sIGJCZWFjb25TZW50OworICAgIGJvb2wgYklzQmVhY29uQnVmUmVhZHlTZXQ7CisgICAgdW5zaWduZWQgaW50CWNiQmVhY29uQnVmUmVhZHlTZXRDbnQ7CisgICAgYm9vbCBiRml4UmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VycmVudENoOworICAgIHVuc2lnbmVkIGludAl1U2NhblRpbWU7CiAKICAgICBDTURfU1RBVEUgICAgICAgICAgICAgICBlQ29tbWFuZFN0YXRlOwogCiAgICAgQ01EX0NPREUgICAgICAgICAgICAgICAgZUNvbW1hbmQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkJlYWNvblR4OworICAgIGJvb2wgYkJlYWNvblR4OwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlN0b3BCZWFjb247Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlN0b3BEYXRhUGt0OwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJTdG9wVHgwUGt0OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVBdXRvUmVDb25uZWN0VGltZTsKKyAgICBib29sIGJTdG9wQmVhY29uOworICAgIGJvb2wgYlN0b3BEYXRhUGt0OworICAgIGJvb2wgYlN0b3BUeDBQa3Q7CisgICAgdW5zaWduZWQgaW50CXVBdXRvUmVDb25uZWN0VGltZTsKIAogICAgIC8vIDgwMi4xMSBjb3VudGVyCiAKICAgICBDTURfSVRFTSAgICAgICAgICAgICAgICBlQ21kUXVldWVbQ01EX1FfU0laRV07Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZERlcXVldWVJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNtZEVucXVldWVJZHg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgY2JGcmVlQ21kUXVldWU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkNtZFJ1bm5pbmc7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkNtZENsZWFyOworICAgIHVuc2lnbmVkIGludAl1Q21kRGVxdWV1ZUlkeDsKKyAgICB1bnNpZ25lZCBpbnQJdUNtZEVucXVldWVJZHg7CisgICAgdW5zaWduZWQgaW50CWNiRnJlZUNtZFF1ZXVlOworICAgIGJvb2wgYkNtZFJ1bm5pbmc7CisgICAgYm9vbCBiQ21kQ2xlYXI7CiAKIAogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlJvYW1pbmc7CisgICAgYm9vbCBiUm9hbWluZzsKICAgICAvL1dPVwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUlQQWRkcls0XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlQQWRkcls0XTsKIAotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsVHhQb3dlcjsKKyAgICB1bnNpZ25lZCBsb25nIHVsVHhQb3dlcjsKICAgICBORElTXzgwMl8xMV9XRVBfU1RBVFVTICBlRW5jcnlwdGlvblN0YXR1czsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiVHJhbnNtaXRLZXk7CisgICAgYm9vbCBiVHJhbnNtaXRLZXk7CiAvLzIwMDctMDkyNS0wMTxBZGQ+YnkgTWlrZUxpdQogLy9taWtlIGFkZCA6c2F2ZSBvbGQgRW5jcnlwdGlvbgogICAgIE5ESVNfODAyXzExX1dFUF9TVEFUVVMgIGVPbGRFbmNyeXB0aW9uU3RhdHVzOwogCiAgICAgU0tleU1hbmFnZW1lbnQgICAgICAgICAgc0tleTsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICBkd0lWQ291bnRlcjsKKyAgICB1bnNpZ25lZCBsb25nIGR3SVZDb3VudGVyOwogCiAgICAgUVdPUkQgICAgICAgICAgICAgICAgICAgcXdQYWNrZXROdW1iZXI7IC8vRm9yIENDTVAgYW5kIFRLSVAgYXMgVFNDKDYgYnl0ZXMpCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUN1cnJlbnRXRVBNb2RlOworICAgIHVuc2lnbmVkIGludAl1Q3VycmVudFdFUE1vZGU7CiAKICAgICBSQzRFeHQgICAgICAgICAgICAgICAgICBTQm94OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieVBSTkdbV0xBTl9XRVBNQVhfS0VZTEVOKzNdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5S2V5SW5kZXg7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUtleUxlbmd0aDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlLZXlbV0xBTl9XRVAyMzJfS0VZTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVBSTkdbV0xBTl9XRVBNQVhfS0VZTEVOKzNdOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQJdUtleUxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUtleVtXTEFOX1dFUDIzMl9LRVlMRU5dOwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkFFUzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUNudE1lYXN1cmU7CisgICAgYm9vbCBiQUVTOworICAgIHVuc2lnbmVkIGNoYXIgYnlDbnRNZWFzdXJlOwogCiAgICAgLy8gZm9yIEFQIG1vZGUKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1QXNzb2NDb3VudDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiTW9yZURhdGE7CisgICAgdW5zaWduZWQgaW50CXVBc3NvY0NvdW50OworICAgIGJvb2wgYk1vcmVEYXRhOwogCiAgICAgLy8gUW9TCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkdycEFja1BvbGljeTsKKyAgICBib29sIGJHcnBBY2tQb2xpY3k7CiAKICAgICAvLyBmb3IgT0lEXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJBc3NvY0luZm9TZXQ7CisgICAgYm9vbCBiQXNzb2NJbmZvU2V0OwogCiAKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUF1dG9GQkN0cmw7CisgICAgdW5zaWduZWQgY2hhciBieUF1dG9GQkN0cmw7CiAKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiVHhNSUNGYWlsOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJSeE1JQ0ZhaWw7CisgICAgYm9vbCBiVHhNSUNGYWlsOworICAgIGJvb2wgYlJ4TUlDRmFpbDsKIAogCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVJBVEVJZHg7CisgICAgdW5zaWduZWQgaW50CXVSQVRFSWR4OwogCiAKICAgICAvLyBGb3IgVXBkYXRlIEJhc2VCYW5kIFZHQSBHYWluIE9mZnNldAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJVcGRhdGVCQlZHQTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1QkJWR0FEaWZmQ291bnQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQlZHQU5ldzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUJCVkdBQ3VycmVudDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlCQlZHQVtCQl9WR0FfTEVWRUxdOwotICAgIExPTkcgICAgICAgICAgICAgICAgICAgIGxkQm1UaHJlc2hvbGRbQkJfVkdBX0xFVkVMXTsKKyAgICBib29sIGJVcGRhdGVCQlZHQTsKKyAgICB1bnNpZ25lZCBpbnQJdUJCVkdBRGlmZkNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlZHQU5ldzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJWR0FDdXJyZW50OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QkJWR0FbQkJfVkdBX0xFVkVMXTsKKyAgICBsb25nICAgICAgICAgICAgICAgICAgICBsZEJtVGhyZXNob2xkW0JCX1ZHQV9MRVZFTF07CiAKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUJCUHJlRURSU1NJOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QkJQcmVFREluZGV4OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQlByZUVEUlNTSTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJQcmVFREluZGV4OwogCiAKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUmFkaW9DbWQ7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdEaWFnUmVmQ291bnQ7CisgICAgYm9vbCBiUmFkaW9DbWQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0RpYWdSZWZDb3VudDsKIAogICAgIC8vIEZvciBGT0UgVHVuaW5nCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlGT0VUdW5pbmc7CisgICAgdW5zaWduZWQgY2hhciBieUZPRVR1bmluZzsKIAogICAgIC8vIEZvciBBdXRvIFBvd2VyIFR1bm5pbmcKIAotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QXV0b1B3clR1bm5pbmc7Ci0gICAgU0hPUlQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludENDSzsKLSAgICBTSE9SVCAgICAgICAgICAgICAgICAgICBzUFNldFBvaW50T0ZETUc7Ci0gICAgU0hPUlQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludE9GRE1BOwotICAgIExPTkcgICAgICAgICAgICAgICAgICAgIGxQRm9ybXVsYU9mZnNldDsKLSAgICBTSE9SVCAgICAgICAgICAgICAgICAgICBzUFRocmVzaG9sZDsKLSAgICBDSEFSICAgICAgICAgICAgICAgICAgICBjQWRqdXN0U3RlcDsKLSAgICBDSEFSICAgICAgICAgICAgICAgICAgICBjTWluVHhBR0M7CisgICAgdW5zaWduZWQgY2hhciBieUF1dG9Qd3JUdW5uaW5nOworICAgIHNob3J0ICAgICAgICAgICAgICAgICAgIHNQU2V0UG9pbnRDQ0s7CisgICAgc2hvcnQgICAgICAgICAgICAgICAgICAgc1BTZXRQb2ludE9GRE1HOworICAgIHNob3J0ICAgICAgICAgICAgICAgICAgIHNQU2V0UG9pbnRPRkRNQTsKKyAgICBsb25nICAgICAgICAgICAgICAgICAgICBsUEZvcm11bGFPZmZzZXQ7CisgICAgc2hvcnQgICAgICAgICAgICAgICAgICAgc1BUaHJlc2hvbGQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgY0FkanVzdFN0ZXA7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgY01pblR4QUdDOwogCiAgICAgLy8gRm9yIFJGIFBvd2VyIHRhYmxlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDQ0tQd3I7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlPRkRNUHdyRzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUN1clB3cjsKLSAgICBJOCAgICAgICAgICAgICAgICAgICAgICBieUN1clB3cmRCbTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDQ0tQd3JUYmxbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieU9GRE1Qd3JUYmxbQ0JfTUFYX0NIQU5ORUwrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5Q0NLRGVmYXVsdFB3cltDQl9NQVhfQ0hBTk5FTF8yNEcrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5T0ZETURlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUwrMV07Ci0gICAgSTggICAgICAgICAgICAgICAgICAgICAgYWJ5UmVnUHdyW0NCX01BWF9DSEFOTkVMKzFdOwotICAgIEk4ICAgICAgICAgICAgICAgICAgICAgIGFieUxvY2FsUHdyW0NCX01BWF9DSEFOTkVMKzFdOworICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0tQd3I7CisgICAgdW5zaWduZWQgY2hhciBieU9GRE1Qd3JHOworICAgIHVuc2lnbmVkIGNoYXIgYnlDdXJQd3I7CisgICAgY2hhcgkgYnlDdXJQd3JkQm07CisgICAgdW5zaWduZWQgY2hhciBhYnlDQ0tQd3JUYmxbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5T0ZETVB3clRibFtDQl9NQVhfQ0hBTk5FTCsxXTsKKyAgICBjaGFyCWFieUNDS0RlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUxfMjRHKzFdOworICAgIGNoYXIJYWJ5T0ZETURlZmF1bHRQd3JbQ0JfTUFYX0NIQU5ORUwrMV07CisgICAgY2hhcglhYnlSZWdQd3JbQ0JfTUFYX0NIQU5ORUwrMV07CisgICAgY2hhcglhYnlMb2NhbFB3cltDQl9NQVhfQ0hBTk5FTCsxXTsKIAogCiAgICAgLy8gQmFzZUJhbmQgTG9vcGJhY2sgVXNlCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSNGQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSYzk7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSODg7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlCQkNSMDk7CisgICAgdW5zaWduZWQgY2hhciBieUJCQ1I0ZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QkJDUmM5OworICAgIHVuc2lnbmVkIGNoYXIgYnlCQkNSODg7CisgICAgdW5zaWduZWQgY2hhciBieUJCQ1IwOTsKIAogICAgIC8vIGNvbW1hbmQgdGltZXIKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBzVGltZXJDb21tYW5kOwogI2lmZGVmIFR4SW5TbGVlcAogICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBzVGltZXJUeERhdGE7Ci0gICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBuVHhEYXRhVGltZUNvdXQ7Ci0gICAgIEJPT0wgIGZUeERhdGFJblNsZWVwOwotICAgICBCT09MICBJc1R4RGF0YVRyaWdnZXI7CisgICAgIHVuc2lnbmVkIGxvbmcgblR4RGF0YVRpbWVDb3V0OworICAgICBib29sIGZUeERhdGFJblNsZWVwOworICAgICBib29sIElzVHhEYXRhVHJpZ2dlcjsKICNlbmRpZgogCiAjaWZkZWYgV1BBX1NNX1RyYW5zdGF0dXMKLSAgICBCT09MICBmV1BBX0F1dGhlbmVkOyAgICAgICAgICAgLy9pcyBXUEEvV1BBLVBTSyBvciBXUEEyL1dQQTItUFNLIGF1dGhlbj8/CisgICAgYm9vbCBmV1BBX0F1dGhlbmVkOyAgICAgICAgICAgLy9pcyBXUEEvV1BBLVBTSyBvciBXUEEyL1dQQTItUFNLIGF1dGhlbj8/CiAjZW5kaWYKLSAgICBCWVRFICAgICAgICAgICAgYnlSZUFzc29jQ291bnQ7ICAgLy9taWtlIGFkZDpyZS1hc3NvY2lhdGlvbiByZXRyeSB0aW1lcyEKLSAgICBCWVRFICAgICAgICAgICAgYnlMaW5rV2FpdENvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlSZUFzc29jQ291bnQ7ICAgLy9taWtlIGFkZDpyZS1hc3NvY2lhdGlvbiByZXRyeSB0aW1lcyEKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TGlua1dhaXRDb3VudDsKIAogCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Tm9kZU5hbWVbMTddOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Tm9kZU5hbWVbMTddOwogCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkRpdmVyc2l0eVJlZ0N0bE9OOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJEaXZlcnNpdHlFbmFibGU7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgdWxEaXZlcnNpdHlOVmFsdWU7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgdWxEaXZlcnNpdHlNVmFsdWU7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlUTWF4OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5VE1heDI7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlUTWF4MzsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1bFNRM1RIOworICAgIGJvb2wgYkRpdmVyc2l0eVJlZ0N0bE9OOworICAgIGJvb2wgYkRpdmVyc2l0eUVuYWJsZTsKKyAgICB1bnNpZ25lZCBsb25nIHVsRGl2ZXJzaXR5TlZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgdWxEaXZlcnNpdHlNVmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieVRNYXg7CisgICAgdW5zaWduZWQgY2hhciBieVRNYXgyOworICAgIHVuc2lnbmVkIGNoYXIgYnlUTWF4MzsKKyAgICB1bnNpZ25lZCBsb25nIHVsU1EzVEg7CiAKIC8vIEFOVCBkaXZlcnNpdHkKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICB1RGl2ZXJzaXR5Q250OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QW50ZW5uYVN0YXRlOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsUmF0aW9fU3RhdGUwOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVsUmF0aW9fU3RhdGUxOworICAgIHVuc2lnbmVkIGxvbmcgdURpdmVyc2l0eUNudDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QW50ZW5uYVN0YXRlOworICAgIHVuc2lnbmVkIGxvbmcgdWxSYXRpb19TdGF0ZTA7CisgICAgdW5zaWduZWQgbG9uZyB1bFJhdGlvX1N0YXRlMTsKIAogICAgIC8vU1EzIGZ1bmN0aW9ucyBmb3IgYW50ZW5uYSBkaXZlcnNpdHkKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICAgICAgVGltZXJTUTNUbWF4MTsKQEAgLTc0Nyw4MCArNzQ3LDgwIEBACiAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgICAgIFRpbWVyU1EzVG1heDM7CiAKIAotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIHVOdW1TUTNbTUFYX1JBVEVdOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdBbnREaXZlcnNpdHlNYXhSYXRlOworICAgIHVuc2lnbmVkIGxvbmcgdU51bVNRM1tNQVhfUkFURV07CisgICAgdW5zaWduZWQgc2hvcnQgd0FudERpdmVyc2l0eU1heFJhdGU7CiAKIAogICAgIFNFdGhlcm5ldEhlYWRlciAgICAgICAgIHNUeEV0aEhlYWRlcjsKICAgICBTRXRoZXJuZXRIZWFkZXIgICAgICAgICBzUnhFdGhIZWFkZXI7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5QnJvYWRjYXN0QWRkcltFVEhfQUxFTl07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlTTkFQX0JyaWRnZXR1bm5lbFtFVEhfQUxFTl07Ci0gICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICBhYnlFRVBST01bRUVQX01BWF9DT05URVhUX1NJWkVdOyAgLy9EV09SRCBhbGlnbm1lbnQKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJyb2FkY2FzdEFkZHJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNOQVBfQnJpZGdldHVubmVsW0VUSF9BTEVOXTsKKyAgICAgdW5zaWduZWQgY2hhciBhYnlFRVBST01bRUVQX01BWF9DT05URVhUX1NJWkVdOyAgLy91bnNpZ25lZCBsb25nIGFsaWdubWVudAogICAgIC8vIFByZS1BdXRoZW50aWNhdGlvbiAmIFBNSyBjYWNoZQogICAgIFNQTUtJRCAgICAgICAgICAgICAgICAgIGdzUE1LSUQ7CiAgICAgU1BNS0lEQ2FuZGlkYXRlRXZlbnQgICAgZ3NQTUtJRENhbmRpZGF0ZTsKIAogCiAgICAgLy8gZm9yIDgwMi4xMWgKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiMTFoRW5hYmxlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUNvdW50cnlDb2RlWzNdOworICAgIGJvb2wgYjExaEVuYWJsZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUNvdW50cnlDb2RlWzNdOwogICAgIC8vIGZvciA4MDIuMTFoIERGUwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVOdW1PZk1lYXN1cmVFSURzOworICAgIHVuc2lnbmVkIGludAl1TnVtT2ZNZWFzdXJlRUlEczsKICAgICBQV0xBTl9JRV9NRUFTVVJFX1JFUSAgICBwQ3Vyck1lYXN1cmVFSUQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk1lYXN1cmVJblByb2dyZXNzOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5T3JnQ2hhbm5lbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU9yZ1JDUjsKLSAgICBEV09SRCAgICAgICAgICAgICAgICAgICBkd09yZ01BUjA7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdPcmdNQVI0OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5QmFzaWNNYXA7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDQ0FGcmFjdGlvbjsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlSUElzWzhdOwotICAgIERXT1JEICAgICAgICAgICAgICAgICAgIGR3UlBJc1s4XTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ2hhbm5lbFN3aXRjaDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieU5ld0NoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDaGFubmVsU3dpdGNoQ291bnQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlF1aWV0RW5hYmxlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJFbmFibGVGaXJzdFF1aWV0OwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5UXVpZXRTdGFydENvdW50OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVRdWlldEVucXVldWU7Ci0gICAgRFdPUkQgICAgICAgICAgICAgICAgICAgZHdDdXJyZW50UXVpZXRFbmRUaW1lOworICAgIGJvb2wgYk1lYXN1cmVJblByb2dyZXNzOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdSQ1I7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ01BUjA7CisgICAgdW5zaWduZWQgbG9uZyBkd09yZ01BUjQ7CisgICAgdW5zaWduZWQgY2hhciBieUJhc2ljTWFwOworICAgIHVuc2lnbmVkIGNoYXIgYnlDQ0FGcmFjdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJQSXNbOF07CisgICAgdW5zaWduZWQgbG9uZyBkd1JQSXNbOF07CisgICAgYm9vbCBiQ2hhbm5lbFN3aXRjaDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbFN3aXRjaENvdW50OworICAgIGJvb2wgYlF1aWV0RW5hYmxlOworICAgIGJvb2wgYkVuYWJsZUZpcnN0UXVpZXQ7CisgICAgdW5zaWduZWQgY2hhciBieVF1aWV0U3RhcnRDb3VudDsKKyAgICB1bnNpZ25lZCBpbnQJdVF1aWV0RW5xdWV1ZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3Q3VycmVudFF1aWV0RW5kVGltZTsKICAgICBTUXVpZXRDb250cm9sICAgICAgICAgICBzUXVpZXRbTUFYX1FVSUVUX0NPVU5UXTsKICAgICAvLyBmb3IgODAyLjExaCBUUEMKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ291bnRyeUluZm81RzsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiQ291bnRyeUluZm8yNEc7CisgICAgYm9vbCBiQ291bnRyeUluZm81RzsKKyAgICBib29sIGJDb3VudHJ5SW5mbzI0RzsKIAotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdCZWFjb25JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QmVhY29uSW50ZXJ2YWw7CiAKICAgICAvL1dQQSBzdXBwbGljYW50IGRlYW1vbgogCXN0cnVjdCBuZXRfZGV2aWNlICAgICAgICp3cGFkZXY7Ci0JQk9PTCAgICAgICAgICAgICAgICAgICAgYldQQURFVlVwOworCWJvb2wgYldQQURFVlVwOwogICAgIHN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAogLyoKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMDsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMTsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMjsKLSAgICAgICAgQk9PTCAgICAgICAgICAgICAgICAgYndleHRzdGVwMzsKKyAgICAgICAgYm9vbCBid2V4dHN0ZXAwOworICAgICAgICBib29sIGJ3ZXh0c3RlcDE7CisgICAgICAgIGJvb2wgYndleHRzdGVwMjsKKyAgICAgICAgYm9vbCBid2V4dHN0ZXAzOwogICAgICAgICAqLwotICAgICAgICBVSU5UICAgICAgICAgICAgICAgICAgIGJ3ZXh0Y291bnQ7Ci0gICAgICAgIEJPT0wgICAgICAgICAgICAgICAgIGJXUEFTdXBwV2V4dEVuYWJsZWQ7CisgICAgICAgIHVuc2lnbmVkIGludAlid2V4dGNvdW50OworICAgICAgICBib29sIGJXUEFTdXBwV2V4dEVuYWJsZWQ7CiAjZW5kaWYKIAogICAgIC8vLS0KICNpZmRlZiBIT1NUQVAKICAgICAvLyB1c2VyIHNwYWNlIGRhZW1vbjogaG9zdGFwZCwgaXMgdXNlZCBmb3IgSE9TVEFQCi0JQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZUhvc3RhcGQ7Ci0JQk9PTCAgICAgICAgICAgICAgICAgICAgYkVuYWJsZTgwMjF4OwotCUJPT0wgICAgICAgICAgICAgICAgICAgIGJFbmFibGVIb3N0V0VQOworCWJvb2wgYkVuYWJsZUhvc3RhcGQ7CisJYm9vbCBiRW5hYmxlODAyMXg7CisJYm9vbCBiRW5hYmxlSG9zdFdFUDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqYXBkZXY7CiAJaW50ICgqdHhfODAyMTEpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdUNoYW5uZWw7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYk1BQ1N1c3BlbmQ7CisgICAgdW5zaWduZWQgaW50CXVDaGFubmVsOworICAgIGJvb2wgYk1BQ1N1c3BlbmQ7CiAKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcwl3c3RhdHM7CQkvLyB3aXJlbGVzcyBzdGF0cwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJDb21taXQ7CisgICAgYm9vbCBiQ29tbWl0OwogCiB9IERFVklDRV9JTkZPLCAqUFNEZXZpY2U7CiAKQEAgLTg4MCw3ICs4ODAsNyBAQAogCiAKIAotaW5saW5lIHN0YXRpYyBCT09MIGRldmljZV9nZXRfaXAoUFNEZXZpY2UgcEluZm8pIHsKK2lubGluZSBzdGF0aWMgYm9vbCBkZXZpY2VfZ2V0X2lwKFBTRGV2aWNlIHBJbmZvKSB7CiAgICAgc3RydWN0IGluX2RldmljZSogaW5fZGV2PShzdHJ1Y3QgaW5fZGV2aWNlKikgcEluZm8tPmRldi0+aXBfcHRyOwogICAgIHN0cnVjdCBpbl9pZmFkZHIqIGlmYTsKIApAQCAtODg4LDEwICs4ODgsMTAgQEAKICAgICAgICAgaWZhPShzdHJ1Y3QgaW5faWZhZGRyKikgaW5fZGV2LT5pZmFfbGlzdDsKICAgICAgICAgaWYgKGlmYSE9TlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KHBJbmZvLT5hYnlJUEFkZHIsJmlmYS0+aWZhX2FkZHJlc3MsNCk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIApAQCAtOTIwLDkgKzkyMCw5IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJPT0wgZGV2aWNlX2RtYTBfeG1pdChQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBVSU5UIHVOb2RlSW5kZXgpOwotQk9PTCBkZXZpY2VfYWxsb2NfZnJhZ19idWYoUFNEZXZpY2UgcERldmljZSwgUFNEZUZyYWdDb250cm9sQmxvY2sgcERlRik7Ci1pbnQgQ29uZmlnX0ZpbGVPcGVyYXRpb24oUFNEZXZpY2UgcERldmljZSxCT09MIGZ3cml0ZSx1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpOworYm9vbCBkZXZpY2VfZG1hMF94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4KTsKK2Jvb2wgZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTRGVGcmFnQ29udHJvbEJsb2NrIHBEZUYpOworaW50IENvbmZpZ19GaWxlT3BlcmF0aW9uKFBTRGV2aWNlIHBEZXZpY2UsIGJvb2wgZndyaXRlLCB1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpOwogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfY2ZnLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaAppbmRleCBkMWU5YzE5Li40MDhlZGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9jZmcuaApAQCAtMzksMTQgKzM5LDYgQEAKICAgICB1bnNpZ25lZCBjaGFyICAgYnVpbGQ7CiB9IHZlcnNpb25fdCwgKnB2ZXJzaW9uX3Q7CiAKLSNpZm5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgICAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgICAoIShGQUxTRSkpCi0jZW5kaWYKLQogI2RlZmluZSBWSURfVEFCTEVfU0laRSAgICAgIDY0CiAjZGVmaW5lIE1DQVNUX1RBQkxFX1NJWkUgICAgNjQKICNkZWZpbmUgTUNBTV9TSVpFICAgICAgICAgICAzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCmluZGV4IGU0OWJiMjUuLjRkNmI2NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKQEAgLTI2LDkgKzI2LDkgQEAKICAqCiAgKiBGdW5jdGlvbnM6CiAgKgotICogICBkZXZpY2VfZm91bmQxIC0gbW9kdWxlIGluaXRpYWwgKGluc21vZCkgZHJpdmVyIGVudHJ5Ci0gKiAgIGRldmljZV9yZW1vdmUxIC0gbW9kdWxlIHJlbW92ZSBlbnRyeQotICogICBkZXZpY2VfaW5pdF9pbmZvIC0gZGV2aWNlIHN0cnVjdHVyZSByZXNvdXJjZSBhbGxvY2F0aW9uIGZ1bmN0aW9uCisgKiAgIHZ0NjY1NV9wcm9iZSAtIG1vZHVsZSBpbml0aWFsIChpbnNtb2QpIGRyaXZlciBlbnRyeQorICogICB2dDY2NTVfcmVtb3ZlIC0gbW9kdWxlIHJlbW92ZSBlbnRyeQorICogICB2dDY2NTVfaW5pdF9pbmZvIC0gZGV2aWNlIHN0cnVjdHVyZSByZXNvdXJjZSBhbGxvY2F0aW9uIGZ1bmN0aW9uCiAgKiAgIGRldmljZV9mcmVlX2luZm8gLSBkZXZpY2Ugc3RydWN0dXJlIHJlc291cmNlIGZyZWUgZnVuY3Rpb24KICAqICAgZGV2aWNlX2dldF9wY2lfaW5mbyAtIGdldCBhbGxvY2F0ZWQgcGNpIGlvL21lbSByZXNvdXJjZQogICogICBkZXZpY2VfcHJpbnRfaW5mbyAtIHByaW50IG91dCByZXNvdXJjZQpAQCAtNjIsNiArNjIsNyBAQAogCiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAiY2FyZC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKICNpbmNsdWRlICJiYXNlYmFuZC5oIgogI2luY2x1ZGUgIm1hYy5oIgogI2luY2x1ZGUgInRldGhlci5oIgpAQCAtMTMzLDEwICsxMzQsMTAgQEAKIAogCiAjZGVmaW5lIElQX0FMSUdfREVGICAgICAwCi0vKiBJUF9ieXRlX2FsaWduW10gaXMgdXNlZCBmb3IgSVAgaGVhZGVyIERXT1JEIGJ5dGUgYWxpZ25lZAotICAgMDogaW5kaWNhdGUgdGhlIElQIGhlYWRlciB3b24ndCBiZSBEV09SRCBieXRlIGFsaWduZWQuKERlZmF1bHQpIC4KLSAgIDE6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd2lsbCBiZSBEV09SRCBieXRlIGFsaWduZWQuCi0gICAgICBJbiBzb21lIGVudmlyb21lbnQsIHRoZSBJUCBoZWFkZXIgc2hvdWxkIGJlIERXT1JEIGJ5dGUgYWxpZ25lZCwKKy8qIElQX2J5dGVfYWxpZ25bXSBpcyB1c2VkIGZvciBJUCBoZWFkZXIgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQKKyAgIDA6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd29uJ3QgYmUgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQuKERlZmF1bHQpIC4KKyAgIDE6IGluZGljYXRlIHRoZSBJUCBoZWFkZXIgd2lsbCBiZSB1bnNpZ25lZCBsb25nIGJ5dGUgYWxpZ25lZC4KKyAgICAgIEluIHNvbWUgZW52aXJvbWVudCwgdGhlIElQIGhlYWRlciBzaG91bGQgYmUgdW5zaWduZWQgbG9uZyBieXRlIGFsaWduZWQsCiAgICAgICBvciB0aGUgcGFja2V0IHdpbGwgYmUgZHJvcGVkIHdoZW4gd2UgcmVjZWl2ZSBpdC4gKGVnOiBJUFZTKQogKi8KIERFVklDRV9QQVJBTShJUF9ieXRlX2FsaWduLCJFbmFibGUgSVAgaGVhZGVyIGR3b3JkIGFsaWduZWQiKTsKQEAgLTI4NCw3ICsyODUsNyBAQAogICAgIHswLE5VTEx9CiB9OwogCi1ERUZJTkVfUENJX0RFVklDRV9UQUJMRShkZXZpY2VfaWRfdGFibGUpID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodnQ2NjU1X3BjaV9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4MzI1MyksIChrZXJuZWxfdWxvbmdfdCljaGlwX2luZm9fdGFibGV9LAogCXsgMCwgfQogfTsKQEAgLTI5MiwxMCArMjkzLDEwIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKLXN0YXRpYyBpbnQgIGRldmljZV9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBjaWQsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwotc3RhdGljIEJPT0wgZGV2aWNlX2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiogcGNpZCwgUFNEZXZpY2UqIHBwRGV2aWNlLCBQQ0hJUF9JTkZPKTsKK3N0YXRpYyBpbnQgIHZ0NjY1NV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CitzdGF0aWMgYm9vbCB2dDY2NTVfaW5pdF9pbmZvKHN0cnVjdCBwY2lfZGV2KiBwY2lkLCBQU0RldmljZSogcHBEZXZpY2UsIFBDSElQX0lORk8pOwogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWVfaW5mbyhQU0RldmljZSBwRGV2aWNlKTsKLXN0YXRpYyBCT09MIGRldmljZV9nZXRfcGNpX2luZm8oUFNEZXZpY2UsIHN0cnVjdCBwY2lfZGV2KiBwY2lkKTsKK3N0YXRpYyBib29sIGRldmljZV9nZXRfcGNpX2luZm8oUFNEZXZpY2UsIHN0cnVjdCBwY2lfZGV2KiBwY2lkKTsKIHN0YXRpYyB2b2lkIGRldmljZV9wcmludF9pbmZvKFBTRGV2aWNlIHBEZXZpY2UpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkZXZpY2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZGV2aWNlX2luaXRfZGl2ZXJzaXR5X3RpbWVyKFBTRGV2aWNlIHBEZXZpY2UpOwpAQCAtMzI2LDEyICszMjcsMTIgQEAKIAogc3RhdGljIGludCAgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvLzIwMDgtMDcxNDxBZGQ+YnkgTWlrZSBMaXUKLXN0YXRpYyBCT09MIGRldmljZV9yZWxlYXNlX1dQQURFVihQU0RldmljZSBwRGV2aWNlKTsKK3N0YXRpYyBib29sIGRldmljZV9yZWxlYXNlX1dQQURFVihQU0RldmljZSBwRGV2aWNlKTsKIAogc3RhdGljIGludCAgZXRodG9vbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcik7Ci1zdGF0aWMgaW50ICBkZXZpY2Vfcnhfc3J2KFBTRGV2aWNlIHBEZXZpY2UsIFVJTlQgdUlkeCk7Ci1zdGF0aWMgaW50ICBkZXZpY2VfdHhfc3J2KFBTRGV2aWNlIHBEZXZpY2UsIFVJTlQgdUlkeCk7Ci1zdGF0aWMgQk9PTCBkZXZpY2VfYWxsb2NfcnhfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTUnhEZXNjIHBEZXNjKTsKK3N0YXRpYyBpbnQgIGRldmljZV9yeF9zcnYoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgaW50IHVJZHgpOworc3RhdGljIGludCAgZGV2aWNlX3R4X3NydihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdUlkeCk7CitzdGF0aWMgYm9vbCBkZXZpY2VfYWxsb2NfcnhfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTUnhEZXNjIHBEZXNjKTsKIHN0YXRpYyB2b2lkIGRldmljZV9pbml0X3JlZ2lzdGVycyhQU0RldmljZSBwRGV2aWNlLCBERVZJQ0VfSU5JVF9UWVBFIEluaXRUeXBlKTsKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX3R4X2J1ZihQU0RldmljZSBwRGV2aWNlLCBQU1R4RGVzYyBwRGVzYyk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV90ZDBfcmluZyhQU0RldmljZSBwRGV2aWNlKTsKQEAgLTM0MCw3ICszNDEsOCBAQAogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWVfcmQxX3JpbmcoUFNEZXZpY2UgcERldmljZSk7CiBzdGF0aWMgdm9pZCBkZXZpY2VfZnJlZV9yaW5ncyhQU0RldmljZSBwRGV2aWNlKTsKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX2ZyYWdfYnVmKFBTRGV2aWNlIHBEZXZpY2UpOwotc3RhdGljIGludCBDb25maWdfRmlsZUdldFBhcmFtZXRlcihVQ0hBUiAqc3RyaW5nLCBVQ0hBUiAqZGVzdCxVQ0hBUiAqc291cmNlKTsKK3N0YXRpYyBpbnQgQ29uZmlnX0ZpbGVHZXRQYXJhbWV0ZXIodW5zaWduZWQgY2hhciAqc3RyaW5nLAorCQl1bnNpZ25lZCBjaGFyICpkZXN0LCB1bnNpZ25lZCBjaGFyICpzb3VyY2UpOwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zNTcsNyArMzU5LDcgQEAKICAgICByZXR1cm4gY2hpcF9pbmZvX3RhYmxlW2ldLm5hbWU7CiB9CiAKLXN0YXRpYyB2b2lkIGRldmljZV9yZW1vdmUxKHN0cnVjdCBwY2lfZGV2ICpwY2lkKQorc3RhdGljIHZvaWQgX19kZXZleGl0IHZ0NjY1NV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaWQpCiB7CiAgICAgUFNEZXZpY2UgcERldmljZT1wY2lfZ2V0X2RydmRhdGEocGNpZCk7CiAKQEAgLTM4NCw3ICszODYsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZGV2aWNlX3NldF9ib29sX29wdCh1bnNpZ25lZCBpbnQgKm9wdCwgaW50IHZhbCxCT09MIGRlZixVMzIgZmxhZywgY2hhciogbmFtZSxjaGFyKiBkZXZuYW1lKSB7CitkZXZpY2Vfc2V0X2Jvb2xfb3B0KHVuc2lnbmVkIGludCAqb3B0LCBpbnQgdmFsLGJvb2wgZGVmLHUzMiBmbGFnLCBjaGFyKiBuYW1lLGNoYXIqIGRldm5hbWUpIHsKICAgICAoKm9wdCkmPSh+ZmxhZyk7CiAgICAgaWYgKHZhbD09LTEpCiAgICAgICAgICpvcHR8PShkZWYgPyBmbGFnIDogMCk7CkBAIC0zOTQsNyArMzk2LDcgQEAKICAgICAgICAgKm9wdHw9KGRlZiA/IGZsYWcgOiAwKTsKICAgICB9IGVsc2UgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IHNldCBwYXJhbWV0ZXIgJXMgdG8gJXNcbiIsCi0gICAgICAgICAgICBkZXZuYW1lLG5hbWUgLCB2YWwgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKyAgICAgICAgICAgIGRldm5hbWUsbmFtZSAsIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSIpOwogICAgICAgICAqb3B0fD0odmFsID8gZmxhZyA6IDApOwogICAgIH0KIH0KQEAgLTQyOSw5ICs0MzEsOSBAQAogc3RhdGljIHZvaWQKIGRldmljZV9zZXRfb3B0aW9ucyhQU0RldmljZSBwRGV2aWNlKSB7CiAKLSAgICBCWVRFICAgIGFieUJyb2FkY2FzdEFkZHJbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotICAgIEJZVEUgICAgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXSA9IHsweEFBLCAweEFBLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKLSAgICBCWVRFICAgIGFieVNOQVBfQnJpZGdldHVubmVsW0VUSF9BTEVOXSA9IHsweEFBLCAweEFBLCAweDAzLCAweDAwLCAweDAwLCAweEY4fTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJyb2FkY2FzdEFkZHJbRVRIX0FMRU5dID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U05BUF9SRkMxMDQyW0VUSF9BTEVOXSA9IHsweEFBLCAweEFBLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNOQVBfQnJpZGdldHVubmVsW0VUSF9BTEVOXSA9IHsweEFBLCAweEFBLCAweDAzLCAweDAwLCAweDAwLCAweEY4fTsKIAogCiAgICAgbWVtY3B5KHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHIsIGFieUJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKQEAgLTQ1MCw3ICs0NTIsNyBAQAogICAgIHBEZXZpY2UtPmIxMWhFbmFibGUgPSAocERldmljZS0+c09wdHMuZmxhZ3MgJiBERVZJQ0VfRkxBR1NfODAyMTFoX01PREUpID8gMSA6IDA7CiAgICAgcERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OID0gKHBEZXZpY2UtPnNPcHRzLmZsYWdzICYgREVWSUNFX0ZMQUdTX0RpdmVyc2l0eUFOVCkgPyAxIDogMDsKICAgICBwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPSBwRGV2aWNlLT5zT3B0cy5kYXRhX3JhdGU7Ci0gICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA8IFJBVEVfQVVUTykgcERldmljZS0+YkZpeFJhdGUgPSBUUlVFOworICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPCBSQVRFX0FVVE8pIHBEZXZpY2UtPmJGaXhSYXRlID0gdHJ1ZTsKICAgICBwRGV2aWNlLT5ieUJCVHlwZSA9IHBEZXZpY2UtPnNPcHRzLmJicF90eXBlOwogICAgIHBEZXZpY2UtPmJ5UGFja2V0VHlwZSA9IHBEZXZpY2UtPmJ5QkJUeXBlOwogCkBAIC00NTgsNDUgKzQ2MCw0NSBAQAogCXBEZXZpY2UtPmJ5QXV0b0ZCQ3RybCA9IEFVVE9fRkJfMDsKIAkvL3BEZXZpY2UtPmJ5QXV0b0ZCQ3RybCA9IEFVVE9fRkJfMTsKIC8vUExJQ0VfREVCVUc8LQotcERldmljZS0+YlVwZGF0ZUJCVkdBID0gVFJVRTsKK3BEZXZpY2UtPmJVcGRhdGVCQlZHQSA9IHRydWU7CiAgICAgcERldmljZS0+YnlGT0VUdW5pbmcgPSAwOwogICAgIHBEZXZpY2UtPndDVFNEdXJhdGlvbiA9IDA7CiAgICAgcERldmljZS0+YnlQcmVhbWJsZVR5cGUgPSAwOwogCiAKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiB1Q2hhbm5lbD0gJWRcbiIsKElOVClwRGV2aWNlLT51Q2hhbm5lbCk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlPcE1vZGU9ICVkXG4iLChJTlQpcERldmljZS0+YnlPcE1vZGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGVQU01vZGU9ICVkXG4iLChJTlQpcERldmljZS0+ZVBTTW9kZSk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgd1JUU1RocmVzaG9sZD0gJWRcbiIsKElOVClwRGV2aWNlLT53UlRTVGhyZXNob2xkKTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieVNob3J0UmV0cnlMaW1pdD0gJWRcbiIsKElOVClwRGV2aWNlLT5ieVNob3J0UmV0cnlMaW1pdCk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlMb25nUmV0cnlMaW1pdD0gJWRcbiIsKElOVClwRGV2aWNlLT5ieUxvbmdSZXRyeUxpbWl0KTsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBieVByZWFtYmxlVHlwZT0gJWRcbiIsKElOVClwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlTaG9ydFByZWFtYmxlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmJ5U2hvcnRQcmVhbWJsZSk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgdUNvbm5lY3Rpb25SYXRlPSAlZFxuIiwoSU5UKXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlCQlR5cGU9ICVkXG4iLChJTlQpcERldmljZS0+YnlCQlR5cGUpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHBEZXZpY2UtPmIxMWhFbmFibGU9ICVkXG4iLChJTlQpcERldmljZS0+YjExaEVuYWJsZSk7Ci0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgcERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OPSAlZFxuIiwoSU5UKXBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTik7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgdUNoYW5uZWw9ICVkXG4iLChpbnQpcERldmljZS0+dUNoYW5uZWwpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5T3BNb2RlPSAlZFxuIiwoaW50KXBEZXZpY2UtPmJ5T3BNb2RlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBlUFNNb2RlPSAlZFxuIiwoaW50KXBEZXZpY2UtPmVQU01vZGUpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHdSVFNUaHJlc2hvbGQ9ICVkXG4iLChpbnQpcERldmljZS0+d1JUU1RocmVzaG9sZCk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlTaG9ydFJldHJ5TGltaXQ9ICVkXG4iLChpbnQpcERldmljZS0+YnlTaG9ydFJldHJ5TGltaXQpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5TG9uZ1JldHJ5TGltaXQ9ICVkXG4iLChpbnQpcERldmljZS0+YnlMb25nUmV0cnlMaW1pdCk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgYnlQcmVhbWJsZVR5cGU9ICVkXG4iLChpbnQpcERldmljZS0+YnlQcmVhbWJsZVR5cGUpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5U2hvcnRQcmVhbWJsZT0gJWRcbiIsKGludClwRGV2aWNlLT5ieVNob3J0UHJlYW1ibGUpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHVDb25uZWN0aW9uUmF0ZT0gJWRcbiIsKGludClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIGJ5QkJUeXBlPSAlZFxuIiwoaW50KXBEZXZpY2UtPmJ5QkJUeXBlKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBwRGV2aWNlLT5iMTFoRW5hYmxlPSAlZFxuIiwoaW50KXBEZXZpY2UtPmIxMWhFbmFibGUpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIHBEZXZpY2UtPmJEaXZlcnNpdHlSZWdDdGxPTj0gJWRcbiIsKGludClwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pOwogfQogCi1zdGF0aWMgdm9pZCBzX3ZDb21wbGV0ZUN1cnJlbnRNZWFzdXJlIChQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5UmVzdWx0KQorc3RhdGljIHZvaWQgc192Q29tcGxldGVDdXJyZW50TWVhc3VyZSAoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieVJlc3VsdCkKIHsKLSAgICBVSU5UICAgIGlpOwotICAgIERXT1JEICAgZHdEdXJhdGlvbiA9IDA7Ci0gICAgQllURSAgICBieVJQSTAgPSAwOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBsb25nIGR3RHVyYXRpb24gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlSUEkwID0gMDsKIAogICAgIGZvcihpaT0xO2lpPDg7aWkrKykgewogICAgICAgICBwRGV2aWNlLT5kd1JQSXNbaWldICo9IDI1NTsKLSAgICAgICAgZHdEdXJhdGlvbiB8PSAqKChQV09SRCkgKHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRC0+c1JlcS5hYnlEdXJhdGlvbikpOworICAgICAgICBkd0R1cmF0aW9uIHw9ICooKHVuc2lnbmVkIHNob3J0ICopIChwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQtPnNSZXEuYWJ5RHVyYXRpb24pKTsKICAgICAgICAgZHdEdXJhdGlvbiA8PD0gMTA7CiAgICAgICAgIHBEZXZpY2UtPmR3UlBJc1tpaV0gLz0gZHdEdXJhdGlvbjsKLSAgICAgICAgcERldmljZS0+YWJ5UlBJc1tpaV0gPSAoQllURSkgcERldmljZS0+ZHdSUElzW2lpXTsKKyAgICAgICAgcERldmljZS0+YWJ5UlBJc1tpaV0gPSAodW5zaWduZWQgY2hhcikgcERldmljZS0+ZHdSUElzW2lpXTsKICAgICAgICAgYnlSUEkwICs9IHBEZXZpY2UtPmFieVJQSXNbaWldOwogICAgIH0KICAgICBwRGV2aWNlLT5hYnlSUElzWzBdID0gKDB4RkYgLSBieVJQSTApOwogCiAgICAgIGlmIChwRGV2aWNlLT51TnVtT2ZNZWFzdXJlRUlEcyA9PSAwKSB7CiAgICAgICAgIFZOVFdJRkliTWVhc3VyZVJlcG9ydCggIHBEZXZpY2UtPnBNZ210LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5wQ3Vyck1lYXN1cmVFSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5UmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUJhc2ljTWFwLApAQCAtNTA1LDcgKzUwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVk5UV0lGSWJNZWFzdXJlUmVwb3J0KCAgcERldmljZS0+cE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieVJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlCYXNpY01hcCwKQEAgLTUyNSwxMiArNTI3LDEyIEBACiAKIHN0YXRpYyB2b2lkIGRldmljZV9pbml0X3JlZ2lzdGVycyhQU0RldmljZSBwRGV2aWNlLCBERVZJQ0VfSU5JVF9UWVBFIEluaXRUeXBlKQogewotICAgIFVJTlQgICAgaWk7Ci0gICAgQllURSAgICBieVZhbHVlOwotCUJZVEUgICAgYnlWYWx1ZTE7Ci0gICAgQllURSAgICBieUNDS1B3cmRCbSA9IDA7Ci0gICAgQllURSAgICBieU9GRE1Qd3JkQm0gPSAwOwotICAgIElOVCB6b25ldHlwZT0wOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieVZhbHVlMTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NLUHdyZEJtID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T0ZETVB3cmRCbSA9IDA7CisgICAgaW50IHpvbmV0eXBlPTA7CiAgICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogICAgIE1BQ2JTaHV0ZG93bihwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICBCQnZTb2Z0d2FyZVJlc2V0KHBEZXZpY2UtPlBvcnRPZmZzZXQpOwpAQCAtNTQwLDExICs1NDIsMTEgQEAKICAgICAgICAgLy8gRG8gTUFDYlNvZnR3YXJlUmVzZXQgaW4gTUFDdkluaXRpYWxpemUKICAgICAgICAgTUFDYlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIC8vIGZvcmNlIENDSwotICAgICAgICBwRGV2aWNlLT5iQ0NLID0gVFJVRTsKLSAgICAgICAgcERldmljZS0+YkFFUyA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBGQUxTRTsgICAgICAvL09ubHkgdXNlZCBpbiAxMWcgdHlwZSwgc3luYyB3aXRoIEVSUCBJRQotICAgICAgICBwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iQ0NLID0gdHJ1ZTsKKyAgICAgICAgcERldmljZS0+YkFFUyA9IGZhbHNlOworICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBmYWxzZTsgICAgICAvL09ubHkgdXNlZCBpbiAxMWcgdHlwZSwgc3luYyB3aXRoIEVSUCBJRQorICAgICAgICBwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9IGZhbHNlOworICAgICAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzFNOwogICAgICAgICBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBSQVRFXzI0TTsKICAgICAgICAgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUgPSBSQVRFXzFNOwpAQCAtNTcwLDkgKzU3Miw5IEBACiAgICAgICAgIC8vIEdldCBBbnRlbmEKICAgICAgICAgYnlWYWx1ZSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBFRVBfT0ZTX0FOVEVOTkEpOwogICAgICAgICBpZiAoYnlWYWx1ZSAmIEVFUF9BTlRJTlYpCi0gICAgICAgICAgICBwRGV2aWNlLT5iVHhSeEFudEludiA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iVHhSeEFudEludiA9IHRydWU7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBEZXZpY2UtPmJUeFJ4QW50SW52ID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iVHhSeEFudEludiA9IGZhbHNlOwogI2lmZGVmCVBMSUNFX0RFQlVHCiAJLy9wcmludGsoImluaXRfcmVnaXN0ZXI6VHhSeEFudEludiBpcyAlZCxieVZhbHVlIGlzICVkXG4iLHBEZXZpY2UtPmJUeFJ4QW50SW52LGJ5VmFsdWUpOwogI2VuZGlmCkBAIC01ODcsNyArNTg5LDcgQEAKICAgICAgICAgcERldmljZS0+dWxEaXZlcnNpdHlNVmFsdWUgPSAxMDAqMTY7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1Mik7CiAgICAgICAgIHBEZXZpY2UtPmJ5VE1heCA9IDE7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1Myk7CiAgICAgICAgIHBEZXZpY2UtPmJ5VE1heDIgPSA0Oy8vU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTQpOwotICAgICAgICBwRGV2aWNlLT51bFNRM1RIID0gMDsvLyhVTE9ORykgU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4NTUpOworICAgICAgICBwRGV2aWNlLT51bFNRM1RIID0gMDsvLyh1bnNpZ25lZCBsb25nKSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1NSk7CiAgICAgICAgIHBEZXZpY2UtPmJ5VE1heDMgPSA2NDsvL1NST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDU2KTsKIAogICAgICAgICBpZiAoYnlWYWx1ZSA9PSAoRUVQX0FOVEVOTkFfQVVYIHwgRUVQX0FOVEVOTkFfTUFJTikpIHsKQEAgLTU5NSw3ICs1OTcsNyBAQAogICAgICAgICAgICAgcERldmljZS0+YnlUeEFudGVubmFNb2RlID0gQU5UX0I7CiAgICAgICAgICAgICBwRGV2aWNlLT5kd1R4QW50ZW5uYVNlbCA9IDE7CiAgICAgICAgICAgICBwRGV2aWNlLT5kd1J4QW50ZW5uYVNlbCA9IDE7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YlR4UnhBbnRJbnYgPT0gVFJVRSkKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSB0cnVlKQogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9BOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9COwpAQCAtNjAzLDI2ICs2MDUsMjYgQEAKIGJ5VmFsdWUxID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIEVFUF9PRlNfQU5URU5OQSk7CiAgICAgICAgICAgLy8gIGlmIChwRGV2aWNlLT5iRGl2ZXJzaXR5UmVnQ3RsT04pCiAgICAgICAgICAgaWYoKGJ5VmFsdWUxJjB4MDgpPT0wKQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSBGQUxTRTsvL1NST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDUwKTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRGl2ZXJzaXR5RW5hYmxlID0gZmFsc2U7Ly9TUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgMHg1MCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkRpdmVyc2l0eUVuYWJsZSA9IHRydWU7CiAjaWZkZWYJUExJQ0VfREVCVUcKIAkJLy9wcmludGsoImF1eCB8bWFpbiBhbnRlbm5hOiBSeEFudGVubmFNb2RlIGlzICVkXG4iLHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSk7CiAjZW5kaWYKIAl9IGVsc2UgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgPSBmYWxzZTsKICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QW50ZW5uYUNvdW50ID0gMTsKICAgICAgICAgICAgIHBEZXZpY2UtPmR3VHhBbnRlbm5hU2VsID0gMDsKICAgICAgICAgICAgIHBEZXZpY2UtPmR3UnhBbnRlbm5hU2VsID0gMDsKICAgICAgICAgICAgIGlmIChieVZhbHVlICYgRUVQX0FOVEVOTkFfQVVYKSB7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YnlUeEFudGVubmFNb2RlID0gQU5UX0E7Ci0gICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeFJ4QW50SW52ID09IFRSVUUpCisgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeFJ4QW50SW52ID09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9COwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlSeEFudGVubmFNb2RlID0gQU5UX0E7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5VHhBbnRlbm5hTW9kZSA9IEFOVF9COwotICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSBUUlVFKQorICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iVHhSeEFudEludiA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieVJ4QW50ZW5uYU1vZGUgPSBBTlRfQTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UnhBbnRlbm5hTW9kZSA9IEFOVF9COwpAQCAtNjM4LDcgKzY0MCw3IEBACiAvLzIwMDgtOC00IDxhZGQ+IGJ5IGNoZXN0ZXIKIC8vem9uZXR5cGUgaW5pdGlhbAogIHBEZXZpY2UtPmJ5T3JpZ2luYWxab25ldHlwZSA9IHBEZXZpY2UtPmFieUVFUFJPTVtFRVBfT0ZTX1pPTkVUWVBFXTsKLSB6b25ldHlwZSA9IENvbmZpZ19GaWxlT3BlcmF0aW9uKHBEZXZpY2UsRkFMU0UsTlVMTCk7Cisgem9uZXR5cGUgPSBDb25maWdfRmlsZU9wZXJhdGlvbihwRGV2aWNlLGZhbHNlLE5VTEwpOwogIGlmICh6b25ldHlwZSA+PSAwKSB7ICAgICAgICAgLy9yZWFkIHpvbmV0eXBlIGZpbGUgb2shCiAgIGlmICgoem9uZXR5cGUgPT0gMCkmJgogICAgICAgICAocERldmljZS0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdICE9MHgwMCkpeyAgICAgICAgICAvL2ZvciBVU0EKQEAgLTY4MCw3ICs2ODIsNyBAQAogICAgICAgICBwRGV2aWNlLT5ieVJGVHlwZSAmPSBSRl9NQVNLOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRGV2aWNlLT5ieVJGVHlwZSA9ICV4XG4iLCBwRGV2aWNlLT5ieVJGVHlwZSk7CiAKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJab25lUmVnRXhpc3QgPT0gRkFMU0UpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJab25lUmVnRXhpc3QgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmJ5Wm9uZVR5cGUgPSBwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV07CiAgICAgICAgIH0KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+Ynlab25lVHlwZSA9ICV4XG4iLCBwRGV2aWNlLT5ieVpvbmVUeXBlKTsKQEAgLTcwMCwxMSArNzAyLDExIEBACiAKIAogICAgICAgICBmb3IgKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFieUNDS1B3clRibFtpaSsxXSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAoQllURSkoaWkgKyBFRVBfT0ZTX0NDS19QV1JfVEJMKSk7CisgICAgICAgICAgICBwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbaWkrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKHVuc2lnbmVkIGNoYXIpKGlpICsgRUVQX09GU19DQ0tfUFdSX1RCTCkpOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmFieUNDS1B3clRibFtpaSsxXSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5Q0NLUHdyVGJsW2lpKzFdID0gcERldmljZS0+YnlDQ0tQd3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpKzFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIChCWVRFKShpaSArIEVFUF9PRlNfT0ZETV9QV1JfVEJMKSk7CisgICAgICAgICAgICBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpKzFdID0gU1JPTWJ5UmVhZEVtYmVkZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsICh1bnNpZ25lZCBjaGFyKShpaSArIEVFUF9PRlNfT0ZETV9QV1JfVEJMKSk7CiAgICAgICAgICAgICBpZiAocERldmljZS0+YWJ5T0ZETVB3clRibFtpaSsxXSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETVB3clRibFtpaSsxXSA9IHBEZXZpY2UtPmJ5T0ZETVB3ckc7CiAgICAgICAgICAgICB9CkBAIC03MjYsMTAgKzcyOCwxMCBAQAogCiAgICAgICAgIC8vIExvYWQgT0ZETSBBIFBvd2VyIFRhYmxlCiAgICAgICAgIGZvciAoaWk9MDtpaTxDQl9NQVhfQ0hBTk5FTF81RztpaSsrKSB7IC8vUm9iZXJ0WXU6MjAwNDEyMjQsIGJ1ZyB1c2luZyBDQl9NQVhfQ0hBTk5FTAotICAgICAgICAgICAgcERldmljZS0+YWJ5T0ZETVB3clRibFtpaStDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKEJZVEUpKGlpICsgRUVQX09GU19PRkRNQV9QV1JfVEJMKSk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaStDQl9NQVhfQ0hBTk5FTF8yNEcrMV0gPSBTUk9NYnlSZWFkRW1iZWRkZWQocERldmljZS0+UG9ydE9mZnNldCwgKEJZVEUpKGlpICsgRUVQX09GU19PRkRNQV9QV1JfZEJtKSk7CisgICAgICAgICAgICBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpK0NCX01BWF9DSEFOTkVMXzI0RysxXSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAodW5zaWduZWQgY2hhcikoaWkgKyBFRVBfT0ZTX09GRE1BX1BXUl9UQkwpKTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpK0NCX01BWF9DSEFOTkVMXzI0RysxXSA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAodW5zaWduZWQgY2hhcikoaWkgKyBFRVBfT0ZTX09GRE1BX1BXUl9kQm0pKTsKICAgICAgICAgfQotICAgICAgICBDQVJEdkluaXRDaGFubmVsVGFibGUoKHZvaWQgKilwRGV2aWNlKTsKKyAgICAgICAgaW5pdF9jaGFubmVsX3RhYmxlKCh2b2lkICopcERldmljZSk7CiAKIAogICAgICAgICBpZiAocERldmljZS0+YnlMb2NhbElEID4gUkVWX0lEX1ZUMzI1M19CMSkgewpAQCAtNzczLDM4ICs3NzUsMzggQEAKICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA9PSBSQVRFX0FVVE8pIHsKICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfNTRNOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGRlZmF1bHQgRyBNb2RlCiAgICAgICAgIFZOVFdJRkliQ29uZmlnUGh5TW9kZShwRGV2aWNlLT5wTWdtdCwgUEhZX1RZUEVfMTFHKTsKICAgICAgICAgVk5UV0lGSWJDb25maWdQaHlNb2RlKHBEZXZpY2UtPnBNZ210LCBQSFlfVFlQRV9BVVRPKTsKIAotICAgICAgICBwRGV2aWNlLT5iUmFkaW9PZmYgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YlJhZGlvT2ZmID0gZmFsc2U7CiAKICAgICAgICAgcERldmljZS0+YnlSYWRpb0N0bCA9IFNST01ieVJlYWRFbWJlZGRlZChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBFRVBfT0ZTX1JBRElPQ1RMKTsKLSAgICAgICAgcERldmljZS0+YkhXUmFkaW9PZmYgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YkhXUmFkaW9PZmYgPSBmYWxzZTsKIAogICAgICAgICBpZiAocERldmljZS0+YnlSYWRpb0N0bCAmIEVFUF9SQURJT0NUTF9FTkFCTEUpIHsKICAgICAgICAgICAgIC8vIEdldCBHUElPCiAgICAgICAgICAgICBNQUN2R1BJT0luKHBEZXZpY2UtPlBvcnRPZmZzZXQsICZwRGV2aWNlLT5ieUdQSU8pOwogLy8yMDA4LTQtMTQgPGFkZD4gYnkgY2hlc3RlciBmb3IgbGVkIGlzc3VlCiAgI2lmZGVmIEZPUl9MRURfT05fTk9URUJPT0sKLWlmIChwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKXtwRGV2aWNlLT5iSFdSYWRpb09mZiA9IFRSVUU7fQotaWYgKCAhKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpKXtwRGV2aWNlLT5iSFdSYWRpb09mZiA9IEZBTFNFO30KK2lmIChwRGV2aWNlLT5ieUdQSU8gJiBHUElPMF9EQVRBKXtwRGV2aWNlLT5iSFdSYWRpb09mZiA9IHRydWU7fQoraWYgKCAhKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpKXtwRGV2aWNlLT5iSFdSYWRpb09mZiA9IGZhbHNlO30KIAogICAgICAgICAgICAgfQotICAgICAgICBpZiAoIChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IFRSVUUpKSB7CisgICAgICAgIGlmICggKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gdHJ1ZSkpIHsKICAgICAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKICAgICAgICAgfQogZWxzZSAgQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAjZWxzZQogICAgICAgICAgICAgaWYgKCgocERldmljZS0+YnlHUElPICYgR1BJTzBfREFUQSkgJiYgIShwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0lOVikpIHx8CiAgICAgICAgICAgICAgICAgKCAhKHBEZXZpY2UtPmJ5R1BJTyAmIEdQSU8wX0RBVEEpICYmIChwRGV2aWNlLT5ieVJhZGlvQ3RsICYgRUVQX1JBRElPQ1RMX0lOVikpKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkhXUmFkaW9PZmYgPSBUUlVFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJIV1JhZGlvT2ZmID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKHBEZXZpY2UtPmJIV1JhZGlvT2ZmID09IFRSVUUpIHx8IChwRGV2aWNlLT5iUmFkaW9Db250cm9sT2ZmID09IFRSVUUpKSB7CisgICAgICAgIGlmICgocERldmljZS0+YkhXUmFkaW9PZmYgPT0gdHJ1ZSkgfHwgKHBEZXZpY2UtPmJSYWRpb0NvbnRyb2xPZmYgPT0gdHJ1ZSkpIHsKICAgICAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKICAgICAgICAgfQogCkBAIC04NTAsMTcgKzg1MiwxNyBAQAogc3RhdGljIHZvaWQgZGV2aWNlX2luaXRfZGl2ZXJzaXR5X3RpbWVyKFBTRGV2aWNlIHBEZXZpY2UpIHsKIAogICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPlRpbWVyU1EzVG1heDEpOwotICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDEuZGF0YSA9IChVTE9ORylwRGV2aWNlOworICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDEuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDEuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbilUaW1lclNRM0NhbGxCYWNrOwogICAgIHBEZXZpY2UtPlRpbWVyU1EzVG1heDEuZXhwaXJlcyA9IFJVTl9BVChIWik7CiAKICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5UaW1lclNRM1RtYXgyKTsKLSAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgyLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgyLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pVGltZXJTUTNDYWxsQmFjazsKICAgICBwRGV2aWNlLT5UaW1lclNRM1RtYXgyLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCiAgICAgaW5pdF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4Myk7Ci0gICAgcERldmljZS0+VGltZXJTUTNUbWF4My5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgcERldmljZS0+VGltZXJTUTNUbWF4My5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2U7CiAgICAgcERldmljZS0+VGltZXJTUTNUbWF4My5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKVRpbWVyU3RhdGUxQ2FsbEJhY2s7CiAgICAgcERldmljZS0+VGltZXJTUTNUbWF4My5leHBpcmVzID0gUlVOX0FUKEhaKTsKIApAQCAtODY4LDEzICs4NzAsMTMgQEAKIH0KIAogCi1zdGF0aWMgQk9PTCBkZXZpY2VfcmVsZWFzZV9XUEFERVYoUFNEZXZpY2UgcERldmljZSkKK3N0YXRpYyBib29sIGRldmljZV9yZWxlYXNlX1dQQURFVihQU0RldmljZSBwRGV2aWNlKQogewogICB2aWF3Z2V0X3dwYV9oZWFkZXIgKndwYWhkcjsKICAgaW50IGlpPTA7CiAgLy8gd2FpdF9xdWV1ZV9oZWFkX3QJU2V0X3dhaXQ7CiAgIC8vc2VuZCBkZXZpY2UgY2xvc2UgdG8gd3BhX3N1cHBsaWNuYXQgbGF5ZXIKLSAgICBpZiAocERldmljZS0+YldQQURFVlVwPT1UUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJXUEFERVZVcD09dHJ1ZSkgewogICAgICAgICAgICAgICAgICB3cGFoZHIgPSAodmlhd2dldF93cGFfaGVhZGVyICopcERldmljZS0+c2tiLT5kYXRhOwogICAgICAgICAgICAgICAgICB3cGFoZHItPnR5cGUgPSBWSUFXR0VUX0RFVklDRUNMT1NFX01TRzsKICAgICAgICAgICAgICAgICAgd3BhaGRyLT5yZXNwX2llX2xlbiA9IDA7CkBAIC04OTEsNyArODkzLDcgQEAKICAvL3dhaXQgcmVsZWFzZSBXUEFERVYKICAgICAgICAgICAgICAgLy8gICAgaW5pdF93YWl0cXVldWVfaGVhZCgmU2V0X3dhaXQpOwogICAgICAgICAgICAgICAvLyAgICB3YWl0X2V2ZW50X3RpbWVvdXQoU2V0X3dhaXQsICgocERldmljZS0+d3BhZGV2PT1OVUxMKSYmKHBEZXZpY2UtPnNrYiA9PSBOVUxMKSksNSpIWik7ICAgIC8vMXMgd2FpdAotICAgICAgICAgICAgICB3aGlsZSgocERldmljZS0+YldQQURFVlVwPT1UUlVFKSkgeworICAgICAgICAgICAgICB3aGlsZSgocERldmljZS0+YldQQURFVlVwPT10cnVlKSkgewogCSAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogICAgICAgICAgICAgICAgICBzY2hlZHVsZV90aW1lb3V0IChIWi8yMCk7ICAgICAgICAgIC8vd2FpdCA1MG1zCiAgICAgICAgICAgICAgICAgIGlpKys7CkBAIC04OTksNyArOTAxLDcgQEAKIAkJICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTkxNCwxMCArOTE2LDEwIEBACiAKIAogCi1zdGF0aWMgaW50Ci1kZXZpY2VfZm91bmQxKHN0cnVjdCBwY2lfZGV2ICpwY2lkLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQKK3Z0NjY1NV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpZCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLSAgICBzdGF0aWMgQk9PTCBiRmlyc3QgPSBUUlVFOworICAgIHN0YXRpYyBib29sIGJGaXJzdCA9IHRydWU7CiAgICAgc3RydWN0IG5ldF9kZXZpY2UqICBkZXYgPSBOVUxMOwogICAgIFBDSElQX0lORk8gIHBDaGlwX2luZm8gPSAoUENISVBfSU5GTyllbnQtPmRyaXZlcl9kYXRhOwogICAgIFBTRGV2aWNlICAgIHBEZXZpY2U7CkBAIC05NDQsMTAgKzk0NiwxMCBAQAogICAgIGlmIChiRmlyc3QpIHsKICAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyBWZXIuICVzXG4iLERFVklDRV9GVUxMX0RSVl9OQU0sIERFVklDRV9WRVJTSU9OKTsKICAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJDb3B5cmlnaHQgKGMpIDIwMDMgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuXG4iKTsKLSAgICAgICAgYkZpcnN0PUZBTFNFOworICAgICAgICBiRmlyc3Q9ZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFkZXZpY2VfaW5pdF9pbmZvKHBjaWQsICZwRGV2aWNlLCBwQ2hpcF9pbmZvKSkgeworICAgIGlmICghdnQ2NjU1X2luaXRfaW5mbyhwY2lkLCAmcERldmljZSwgcENoaXBfaW5mbykpIHsKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgfQogICAgIHBEZXZpY2UtPmRldiA9IGRldjsKQEAgLTk2Miw3ICs5NjQsNyBAQAogI2lmZGVmCURFQlVHCiAJcHJpbnRrKCJCZWZvcmUgZ2V0IHBjaV9pbmZvIG1lbWFkZHIgaXMgJXhcbiIscERldmljZS0+bWVtYWRkcik7CiAjZW5kaWYKLSAgICBpZiAoZGV2aWNlX2dldF9wY2lfaW5mbyhwRGV2aWNlLHBjaWQpID09IEZBTFNFKSB7CisgICAgaWYgKGRldmljZV9nZXRfcGNpX2luZm8ocERldmljZSxwY2lkKSA9PSBmYWxzZSkgewogICAgICAgICBwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogRmFpbGVkIHRvIGZpbmQgUENJIGRldmljZS5cbiIpOwogICAgICAgICBkZXZpY2VfZnJlZV9pbmZvKHBEZXZpY2UpOwogICAgICAgICByZXR1cm4gLUVOT0RFVjsKQEAgLTk3Niw3ICs5NzgsNyBAQAogCXByaW50aygiYWZ0ZXIgZ2V0IHBjaV9pbmZvIG1lbWFkZHIgaXMgJXgsIGlvIGFkZHIgaXMgJXgsaW9fc2l6ZSBpcyAlZFxuIixwRGV2aWNlLT5tZW1hZGRyLHBEZXZpY2UtPmlvYWRkcixwRGV2aWNlLT5pb19zaXplKTsKIAl7CiAJCWludCBpOwotCQlVMzIJCQliYXIsbGVuOworCQl1MzIJCQliYXIsbGVuOwogCQl1MzIgYWRkcmVzc1tdID0gewogCQlQQ0lfQkFTRV9BRERSRVNTXzAsCiAJCVBDSV9CQVNFX0FERFJFU1NfMSwKQEAgLTEwMjAsOCArMTAyMiw4IEBACiAjaWZkZWYJREVCVUcKIAkvL3JldHVybiAgMCAgOwogI2VuZGlmCi0gICAgcERldmljZS0+UG9ydE9mZnNldCA9IChEV09SRClpb3JlbWFwKHBEZXZpY2UtPm1lbWFkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLLCBwRGV2aWNlLT5pb19zaXplKTsKLQkvL3BEZXZpY2UtPlBvcnRPZmZzZXQgPSAoRFdPUkQpaW9yZW1hcChwRGV2aWNlLT5pb2FkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0ssIHBEZXZpY2UtPmlvX3NpemUpOworICAgIHBEZXZpY2UtPlBvcnRPZmZzZXQgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKHBEZXZpY2UtPm1lbWFkZHIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLLCBwRGV2aWNlLT5pb19zaXplKTsKKwkvL3BEZXZpY2UtPlBvcnRPZmZzZXQgPSAodW5zaWduZWQgbG9uZylpb3JlbWFwKHBEZXZpY2UtPmlvYWRkciAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSywgcERldmljZS0+aW9fc2l6ZSk7CiAKIAlpZihwRGV2aWNlLT5Qb3J0T2Zmc2V0ID09IDApIHsKICAgICAgICBwcmludGsoS0VSTl9FUlIgREVWSUNFX05BTUUgIjogRmFpbGVkIHRvIElPIHJlbWFwcGluZyAuLlxuIik7CkBAIC0xMDQxLDcgKzEwNDMsNyBAQAogCiAgICAgZGV2LT5iYXNlX2FkZHIgPSBwRGV2aWNlLT5pb2FkZHI7CiAjaWZkZWYJUExJQ0VfREVCVUcKLQlCWVRFCXZhbHVlOworCXVuc2lnbmVkIGNoYXIgCXZhbHVlOwogCiAJVk5TdkluUG9ydEIocERldmljZS0+UG9ydE9mZnNldCsweDRGLCAmdmFsdWUpOwogCXByaW50aygiQmVmb3JlIHdyaXRlOiB2YWx1ZSBpcyAleFxuIix2YWx1ZSk7CkBAIC0xMTExLDE2ICsxMTEzLDE3IEBACiAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICIlczogJXNcbiIsZGV2LT5uYW1lLCBnZXRfY2hpcF9uYW1lKHBEZXZpY2UtPmNoaXBfaWQpKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiBNQUM9JXBNIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKICNpZmRlZiBJT19NQVAKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElPPTB4JWx4ICAiLChVTE9ORykgcERldmljZS0+aW9hZGRyKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElPPTB4JWx4ICAiLCh1bnNpZ25lZCBsb25nKSBwRGV2aWNlLT5pb2FkZHIpOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyIgSVJRPSVkIFxuIiwgcERldmljZS0+ZGV2LT5pcnEpOwogI2Vsc2UKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElPPTB4JWx4IE1lbT0weCVseCAiLChVTE9ORykgcERldmljZS0+aW9hZGRyLChVTE9ORykgcERldmljZS0+UG9ydE9mZnNldCk7CisgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPIiBJTz0weCVseCBNZW09MHglbHggIiwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlLT5pb2FkZHIsKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyIgSVJRPSVkIFxuIiwgcERldmljZS0+ZGV2LT5pcnEpOwogI2VuZGlmCiAKIH0KIAotc3RhdGljIEJPT0wgZGV2aWNlX2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiogcGNpZCwgUFNEZXZpY2UqIHBwRGV2aWNlLAorc3RhdGljIGJvb2wgX19kZXZpbml0IHZ0NjY1NV9pbml0X2luZm8oc3RydWN0IHBjaV9kZXYqIHBjaWQsIFBTRGV2aWNlKiBwcERldmljZSwKICAgICBQQ0hJUF9JTkZPIHBDaGlwX2luZm8pIHsKIAogICAgIFBTRGV2aWNlIHA7CkBAIC0xMTQ1LDE5ICsxMTQ4LDE5IEBACiAKICAgICBzcGluX2xvY2tfaW5pdCgmKCgqcHBEZXZpY2UpLT5sb2NrKSk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIEJPT0wgZGV2aWNlX2dldF9wY2lfaW5mbyhQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiogcGNpZCkgeworc3RhdGljIGJvb2wgZGV2aWNlX2dldF9wY2lfaW5mbyhQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiogcGNpZCkgewogCi0gICAgVTE2IHBjaV9jbWQ7Ci0gICAgVTggIGI7Ci0gICAgVUlOVCBjaXNfYWRkcjsKKyAgICB1MTYgcGNpX2NtZDsKKyAgICB1OCAgYjsKKyAgICB1bnNpZ25lZCBpbnQgY2lzX2FkZHI7CiAjaWZkZWYJUExJQ0VfREVCVUcKLQlCWVRFICAgICAgIHBjaV9jb25maWdbMjU2XTsKLQlCWVRFCXZhbHVlID0weDAwOworCXVuc2lnbmVkIGNoYXIgcGNpX2NvbmZpZ1syNTZdOworCXVuc2lnbmVkIGNoYXIgCXZhbHVlID0weDAwOwogCWludAkJaWksajsKLQlVMTYJbWF4X2xhdD0weDAwMDA7CisJdTE2CW1heF9sYXQ9MHgwMDAwOwogCW1lbXNldChwY2lfY29uZmlnLDB4MDAsMjU2KTsKICNlbmRpZgogCkBAIC0xMjExLDcgKzEyMTQsNyBAQAogCQl9CiAJfQogI2VuZGlmCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX2luZm8oUFNEZXZpY2UgcERldmljZSkgewpAQCAtMTI2Myw3ICsxMjY2LDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBCT09MIGRldmljZV9pbml0X3JpbmdzKFBTRGV2aWNlIHBEZXZpY2UpIHsKK3N0YXRpYyBib29sIGRldmljZV9pbml0X3JpbmdzKFBTRGV2aWNlIHBEZXZpY2UpIHsKICAgICB2b2lkKiAgIHZpcl9wb29sOwogCiAKQEAgLTEyNzcsNyArMTI4MCw3IEBACiAKICAgICBpZiAodmlyX3Bvb2wgPT0gTlVMTCkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9FUlIsS0VSTl9FUlIgIiVzIDogYWxsb2NhdGUgZGVzYyBkbWEgbWVtb3J5IGZhaWxlZFxuIiwgcERldmljZS0+ZGV2LT5uYW1lKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgbWVtc2V0KHZpcl9wb29sLCAwLApAQCAtMTMxMiw3ICsxMzE1LDcgQEAKICAgICAgICAgICAgIHBEZXZpY2UtPnNPcHRzLm5UeERlc2NzWzFdICogc2l6ZW9mKFNUeERlc2MpLAogICAgICAgICAgICAgdmlyX3Bvb2wsIHBEZXZpY2UtPnBvb2xfZG1hCiAgICAgICAgICAgICApOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBtZW1zZXQocERldmljZS0+dHgwX2J1ZnMsIDAsCkBAIC0xMzU4LDcgKzEzNjEsNyBAQAogICAgICAgICAgICAgcERldmljZS0+c09wdHMublR4RGVzY3NbMV0gKiBQS1RfQlVGX1NaOwogCiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHZvaWQgZGV2aWNlX2ZyZWVfcmluZ3MoUFNEZXZpY2UgcERldmljZSkgewpAQCAtMTU5Myw3ICsxNTk2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgZGV2aWNlX3J4X3NydihQU0RldmljZSBwRGV2aWNlLCBVSU5UIHVJZHgpIHsKK3N0YXRpYyBpbnQgZGV2aWNlX3J4X3NydihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdUlkeCkgewogICAgIFBTUnhEZXNjICAgIHBSRDsKICAgICBpbnQgd29ya3MgPSAwOwogCkBAIC0xNjIxLDcgKzE2MjQsNyBAQAogfQogCiAKLXN0YXRpYyBCT09MIGRldmljZV9hbGxvY19yeF9idWYoUFNEZXZpY2UgcERldmljZSwgUFNSeERlc2MgcFJEKSB7CitzdGF0aWMgYm9vbCBkZXZpY2VfYWxsb2NfcnhfYnVmKFBTRGV2aWNlIHBEZXZpY2UsIFBTUnhEZXNjIHBSRCkgewogCiAgICAgUERFVklDRV9SRF9JTkZPIHBSREluZm89cFJELT5wUkRJbmZvOwogCkBAIC0xNjMxLDcgKzE2MzQsNyBAQAogCS8vcHJpbnRrKCJkZXZpY2VfYWxsb2NfcnhfYnVmOnNrYiBpcyAleFxuIixwUkRJbmZvLT5za2IpOwogI2VuZGlmCiAgICAgaWYgKHBSREluZm8tPnNrYj09TlVMTCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKHBSREluZm8tPnNrYik7CiAgICAgcFJESW5mby0+c2tiLT5kZXYgPSBwRGV2aWNlLT5kZXY7CiAgICAgcFJESW5mby0+c2tiX2RtYSA9IHBjaV9tYXBfc2luZ2xlKHBEZXZpY2UtPnBjaWQsIHNrYl90YWlsX3BvaW50ZXIocFJESW5mby0+c2tiKSwKQEAgLTE2NDMsMzUgKzE2NDYsMzUgQEAKICAgICBwUkQtPm1fcmQxUkQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KHBEZXZpY2UtPnJ4X2J1Zl9zeik7CiAgICAgcFJELT5idWZmX2FkZHIgPSBjcHVfdG9fbGUzMihwUkRJbmZvLT5za2JfZG1hKTsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKIAotQk9PTCBkZXZpY2VfYWxsb2NfZnJhZ19idWYoUFNEZXZpY2UgcERldmljZSwgUFNEZUZyYWdDb250cm9sQmxvY2sgcERlRikgeworYm9vbCBkZXZpY2VfYWxsb2NfZnJhZ19idWYoUFNEZXZpY2UgcERldmljZSwgUFNEZUZyYWdDb250cm9sQmxvY2sgcERlRikgewogCiAgICAgcERlRi0+c2tiID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7CiAgICAgaWYgKHBEZUYtPnNrYiA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NFUlQocERlRi0+c2tiKTsKICAgICBwRGVGLT5za2ItPmRldiA9IHBEZXZpY2UtPmRldjsKIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKIAotc3RhdGljIGludCBkZXZpY2VfdHhfc3J2KFBTRGV2aWNlIHBEZXZpY2UsIFVJTlQgdUlkeCkgeworc3RhdGljIGludCBkZXZpY2VfdHhfc3J2KFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1SWR4KSB7CiAgICAgUFNUeERlc2MgICAgICAgICAgICAgICAgIHBURDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICAgYkZ1bGw9RkFMU0U7CisgICAgYm9vbCBiRnVsbD1mYWxzZTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgd29ya3MgPSAwOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICBieVRzcjA7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgIGJ5VHNyMTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgdUZyYW1lU2l6ZSwgdUZJRk9IZWFkZXJTaXplOworICAgIHVuc2lnbmVkIGNoYXIgYnlUc3IwOworICAgIHVuc2lnbmVkIGNoYXIgYnlUc3IxOworICAgIHVuc2lnbmVkIGludAl1RnJhbWVTaXplLCB1RklGT0hlYWRlclNpemU7CiAgICAgUFNUeEJ1ZkhlYWQgICAgICAgICAgICAgIHBUeEJ1ZkhlYWQ7CiAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHBTdGF0cyA9ICZwRGV2aWNlLT5zdGF0czsKICAgICBzdHJ1Y3Qgc2tfYnVmZiogICAgICAgICAgc2tiOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICB1Tm9kZUluZGV4OworICAgIHVuc2lnbmVkIGludAl1Tm9kZUluZGV4OwogICAgIFBTTWdtdE9iamVjdCAgICAgICAgICAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogCiAKQEAgLTE2OTcsMjAgKzE3MDAsMjAgQEAKIAogICAgICAgICAgICAgICAgIFNUQXZVcGRhdGVURFN0YXRDb3VudGVyKCZwRGV2aWNlLT5zY1N0YXRpc3RpYywKICAgICAgICAgICAgICAgICAgICAgICAgIGJ5VHNyMCwgYnlUc3IxLAotICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKShwVEQtPnBUREluZm8tPmJ1ZiArIHVGSUZPSGVhZGVyU2l6ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKShwVEQtPnBUREluZm8tPmJ1ZiArIHVGSUZPSGVhZGVyU2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICB1RnJhbWVTaXplLCB1SWR4KTsKIAogCiAgICAgICAgICAgICAgICAgQlNTdlVwZGF0ZU5vZGVUeENvdW50ZXIocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBieVRzcjAsIGJ5VHNyMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoUEJZVEUpKHBURC0+cFRESW5mby0+YnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKShwVEQtPnBUREluZm8tPmJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdUZJRk9IZWFkZXJTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAogICAgICAgICAgICAgICAgIGlmICggIShieVRzcjEgJiBUU1IxX1RFUlIpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChieVRzcjAgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgVHhbJWRdIE9LIGJ1dCBoYXMgZXJyb3IuIHRzcjFbJTAyWF0gdHNyMFslMDJYXS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UKXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpdUlkeCwgYnlUc3IxLCBieVRzcjApOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgocFR4QnVmSGVhZC0+d0ZyYWdDdGwgJiBGUkFHQ1RMX0VOREZSQUcpICE9IEZSQUdDVExfTk9ORlJBRykgewogICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50ICsrOwpAQCAtMTcyMCw3ICsxNzIzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBUeFslZF0gZHJvcHBlZCAmIHRzcjFbJTAyWF0gdHNyMFslMDJYXS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UKXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpdUlkeCwgYnlUc3IxLCBieVRzcjApOwogICAgICAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Ryb3BwZWQrKzsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzQyLDE5ICsxNzQ1LDE5IEBACiAgICAgICAgICAgICBpZiAoYnlUc3IxICYgVFNSMV9URVJSKSB7CiAgICAgICAgICAgICBpZiAoKHBURC0+cFRESW5mby0+YnlGbGFncyAmIFREX0ZMQUdTX1BSSVZfU0tCKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgVHhbJWRdIGZhaWwgaGFzIGVycm9yLiB0c3IxWyUwMlhdIHRzcjBbJTAyWF0uXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UKXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCl1SWR4LCBieVRzcjEsIGJ5VHNyMCk7CiAgICAgICAgICAgICB9CiAKIC8vICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIFR4WyVkXSBmYWlsIGhhcyBlcnJvci4gdHNyMVslMDJYXSB0c3IwWyUwMlhdLlxuIiwKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5UKXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXVJZHgsIGJ5VHNyMSwgYnlUc3IwKTsKIAogICAgICAgICAgICAgICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJgogICAgICAgICAgICAgICAgICAgICAocFRELT5wVERJbmZvLT5ieUZsYWdzICYgVERfRkxBR1NfTkVUSUZfU0tCKSkgewotICAgICAgICAgICAgICAgICAgICBXT1JEICAgIHdBSUQ7Ci0gICAgICAgICAgICAgICAgICAgIEJZVEUgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB3QUlEOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKIAogICAgICAgICAgICAgICAgICAgICBza2IgPSBwVEQtPnBUREluZm8tPnNrYjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIChQQllURSkoc2tiLT5kYXRhKSwgJnVOb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpLCAmdU5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJQU0VuYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnNUeFBTUXVldWUsIHNrYik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53RW5RdWV1ZUNudCsrOwpAQCAtMTc2Myw3ICsxNzY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5UFNUeE1hcFt3QUlEID4+IDNdIHw9ICBieU1hc2tbd0FJRCAmIDddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBURC0+cFRESW5mby0+YnlGbGFncyAmPSB+KFREX0ZMQUdTX05FVElGX1NLQik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAidHhfc3J2OnR4IGZhaWwgcmUtcXVldWUgc3RhIGluZGV4PSAlZCwgUXVlQ250PSAlZFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLChJTlQpdU5vZGVJbmRleCwgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53RW5RdWV1ZUNudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGludCl1Tm9kZUluZGV4LCBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndFblF1ZXVlQ250KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Vycm9ycy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdGF0cy0+dHhfZHJvcHBlZC0tOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTc4MCwxMCArMTc4MywxMCBAQAogICAgICAgICAvLyBSRVNFUlZfQUMwRE1BIHJlc2VydmVkIGZvciByZWxheQogCiAgICAgICAgIGlmIChBVkFJTF9URChwRGV2aWNlLCB1SWR4KSA8IFJFU0VSVl9BQzBETUEpIHsKLSAgICAgICAgICAgIGJGdWxsID0gVFJVRTsKKyAgICAgICAgICAgIGJGdWxsID0gdHJ1ZTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBBQzBETUEgaXMgRnVsbCA9ICVkXG4iLCBwRGV2aWNlLT5pVERVc2VkW3VJZHhdKTsKICAgICAgICAgfQotICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpICYmIChiRnVsbD09RkFMU0UpKXsKKyAgICAgICAgaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSAmJiAoYkZ1bGw9PWZhbHNlKSl7CiAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzk1LDcgKzE3OTgsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGRldmljZV9lcnJvcihQU0RldmljZSBwRGV2aWNlLCBXT1JEIHN0YXR1cykgeworc3RhdGljIHZvaWQgZGV2aWNlX2Vycm9yKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIHNob3J0IHN0YXR1cykgewogCiAgICAgaWYgKHN0YXR1cyAmIElTUl9GRVRBTEVSUikgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9FUlIsIEtFUk5fRVJSCkBAIC0xODA0LDcgKzE4MDcsNyBAQAogICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgIGRlbF90aW1lcigmcERldmljZS0+c1RpbWVyQ29tbWFuZCk7CiAgICAgICAgIGRlbF90aW1lcigmKHBEZXZpY2UtPnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjaykpOwotICAgICAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IGZhbHNlOwogICAgICAgICBNQUNiU2h1dGRvd24ocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xODQ0LDcgKzE4NDcsNyBAQAogCiAKIC8vUExJQ0VfREVCVUcgLT4KLUlOVCBNbG1lVGhyZWFkKAoraW50IE1sbWVUaHJlYWQoCiAgICAgIHZvaWQgKiBDb250ZXh0KQogewogCVBTRGV2aWNlCXBEZXZpY2UgPSAgKFBTRGV2aWNlKSBDb250ZXh0OwpAQCAtMTkxNCw4ICsxOTE3LDggQEAKICAgICAgd3BhX1Jlc3VsdC5wcm90byA9IDA7CiAgICAgIHdwYV9SZXN1bHQua2V5X21nbXQgPSAwOwogICAgICB3cGFfUmVzdWx0LmVhcF90eXBlID0gMDsKLSAgICAgd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkID0gRkFMU0U7Ci0gICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBGQUxTRTsKKyAgICAgd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkID0gZmFsc2U7CisgICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBmYWxzZTsKICNlbmRpZgogREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiY2FsbCBkZXZpY2UgaW5pdCByZDAgcmluZ1xuIik7CiBkZXZpY2VfaW5pdF9yZDBfcmluZyhwRGV2aWNlKTsKQEAgLTE5ODAsMjAgKzE5ODMsMjAgQEAKIAogCSNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCiAJLyoKLSAgICAgcERldmljZS0+YndleHRzdGVwMCA9IEZBTFNFOwotICAgICBwRGV2aWNlLT5id2V4dHN0ZXAxID0gRkFMU0U7Ci0gICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDIgPSBGQUxTRTsKLSAgICAgcERldmljZS0+YndleHRzdGVwMyA9IEZBTFNFOworICAgICBwRGV2aWNlLT5id2V4dHN0ZXAwID0gZmFsc2U7CisgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDEgPSBmYWxzZTsKKyAgICAgcERldmljZS0+YndleHRzdGVwMiA9IGZhbHNlOworICAgICBwRGV2aWNlLT5id2V4dHN0ZXAzID0gZmFsc2U7CiAgICAgICovCiAgICAgICAgcERldmljZS0+YndleHRjb3VudD0wOwotICAgICBwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID0gRkFMU0U7CisgICAgIHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgogICAgIHBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKLSAgIHBEZXZpY2UtPmJXUEFERVZVcCA9IEZBTFNFOworICAgcERldmljZS0+YldQQURFVlVwID0gZmFsc2U7CiAgICAgLy8gUGF0Y2g6IGlmIFdFUCBrZXkgYWxyZWFkeSBzZXQgYnkgaXdjb25maWcgYnV0IGRldmljZSBub3QgeWV0IG9wZW4KLSAgICBpZiAoKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IFRSVUUpICYmIChwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPT0gVFJVRSkpIHsKKyAgICBpZiAoKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IHRydWUpICYmIChwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPT0gdHJ1ZSkpIHsKICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpKHBEZXZpY2UtPmJ5S2V5SW5kZXggfCAoMSA8PCAzMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShwRGV2aWNlLT5ieUtleUluZGV4IHwgKDEgPDwgMzEpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT51S2V5TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5S2V5LApAQCAtMjA1MiwxMiArMjA1NSwxMiBAQAogCXRhc2tsZXRfa2lsbCgmcERldmljZS0+UnhNbmdXb3JrSXRlbSk7CiAjZW5kaWYKICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gRkFMU0U7CisgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKICAgICBNQUNiU2h1dGRvd24ocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgTUFDYlNvZnR3YXJlUmVzZXQocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwogCi0gICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgcERldmljZS0+YkxpbmtQYXNzID0gZmFsc2U7CiAgICAgbWVtc2V0KHBNZ210LT5hYnlDdXJyQlNTSUQsIDAsIDYpOwogICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgIGRldmljZV9mcmVlX3RkMF9yaW5nKHBEZXZpY2UpOwpAQCAtMjA4Miw4ICsyMDg1LDggQEAKIAogc3RhdGljIGludCBkZXZpY2VfZG1hMF90eF84MDIxMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAgICAgUFNEZXZpY2UgICAgICAgIHBEZXZpY2U9bmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBQQllURSAgICAgICAgICAgcGJNUERVOwotICAgIFVJTlQgICAgICAgICAgICBjYk1QRFVMZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKnBiTVBEVTsKKyAgICB1bnNpZ25lZCBpbnQgY2JNUERVTGVuID0gMDsKIAogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2RtYTBfdHhfODAyMTFcbiIpOwpAQCAtMjA5Niw3ICsyMDk5LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKHBEZXZpY2UtPmJTdG9wVHgwUGt0ID09IFRSVUUpIHsKKyAgICBpZiAocERldmljZS0+YlN0b3BUeDBQa3QgPT0gdHJ1ZSkgewogICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMTUsMzYgKzIxMTgsMzYgQEAKIAogCiAKLUJPT0wgZGV2aWNlX2RtYTBfeG1pdChQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBVSU5UIHVOb2RlSW5kZXgpIHsKK2Jvb2wgZGV2aWNlX2RtYTBfeG1pdChQU0RldmljZSBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCkgewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBTVHhEZXNjICAgICAgICBwSGVhZFRELCBwTGFzdFREOwotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lQm9keVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIHVNQUNmcmFnTnVtOwotICAgIEJZVEUgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemU7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIGJvb2wgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7CiAgICAgUFNLZXlJdGVtICAgICAgIHBUcmFuc21pdEtleSA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgU0tleUl0ZW0gICAgICAgIFNUZW1wS2V5OwotLy8gICAgQllURSAgICAgICAgICAgIGJ5S2V5SW5kZXggPSAwOworLy8gICAgdW5zaWduZWQgY2hhciBieUtleUluZGV4ID0gMDsKIAogCi0gICAgaWYgKHBEZXZpY2UtPmJTdG9wVHgwUGt0ID09IFRSVUUpIHsKKyAgICBpZiAocERldmljZS0+YlN0b3BUeDBQa3QgPT0gdHJ1ZSkgewogICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9OwogCiAgICAgaWYgKEFWQUlMX1REKHBEZXZpY2UsIFRZUEVfVFhETUEwKSA8PSAwKSB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kbWEwX3htaXQsIHRkMCA8PTBcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSB7CiAgICAgICAgIGlmIChwRGV2aWNlLT51QXNzb2NDb3VudCA9PSAwKSB7CiAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2RtYTBfeG1pdCwgYXNzb2NDb3VudCA9IDBcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTUyLDcgKzIxNTUsNyBAQAogCiAgICAgcEhlYWRURC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX0VEUHxUQ1JfU1RQKTsKIAotICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuYWJ5RHN0QWRkciwgKFBCWVRFKShza2ItPmRhdGEpLCBFVEhfSExFTik7CisgICAgbWVtY3B5KHBEZXZpY2UtPnNUeEV0aEhlYWRlci5hYnlEc3RBZGRyLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpLCBFVEhfSExFTik7CiAgICAgY2JGcmFtZUJvZHlTaXplID0gc2tiLT5sZW4gLSBFVEhfSExFTjsKIAogICAgIC8vIDgwMi4xSApAQCAtMjE2Myw5ICsyMTY2LDkgQEAKIAogICAgIGlmICggdU1BQ2ZyYWdOdW0gPiBBVkFJTF9URChwRGV2aWNlLCBUWVBFX1RYRE1BMCkpIHsKICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGJ5UGt0VHlwZSA9IChCWVRFKXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKKyAgICBieVBrdFR5cGUgPSAodW5zaWduZWQgY2hhcilwRGV2aWNlLT5ieVBhY2tldFR5cGU7CiAKIAogICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSkgewpAQCAtMjE3MywxMyArMjE3NiwxMyBAQAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzExTSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfMTFNOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAoV09SRClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CisgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV81NE0pCiAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gUkFURV81NE07CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9ICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMjAyLDE1ICsyMjA1LDE1IEBACiAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7CiAgICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFBOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IHRydWUpIHsKICAgICAgICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFHQjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ5UGt0VHlwZSA9IFBLX1RZUEVfMTFHQTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKQotICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBUUlVFOworICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSB0cnVlKQorICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSB0cnVlOwogCiAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgIHBUcmFuc21pdEtleSA9ICZTVGVtcEtleTsKQEAgLTIyMjYsNyArMjIyOSw3IEBACiAgICAgfQogICAgIHZHZW5lcmF0ZUZJRk9IZWFkZXIocERldmljZSwgYnlQa3RUeXBlLCBwRGV2aWNlLT5wYnlUbXBCdWZmLCBiTmVlZEVuY3J5cHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBjYkZyYW1lQm9keVNpemUsIFRZUEVfVFhETUEwLCBwSGVhZFRELAotICAgICAgICAgICAgICAgICAgICAgICAgJnBEZXZpY2UtPnNUeEV0aEhlYWRlciwgKFBCWVRFKXNrYi0+ZGF0YSwgcFRyYW5zbWl0S2V5LCB1Tm9kZUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgJnBEZXZpY2UtPnNUeEV0aEhlYWRlciwgKHVuc2lnbmVkIGNoYXIgKilza2ItPmRhdGEsIHBUcmFuc21pdEtleSwgdU5vZGVJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICZ1TUFDZnJhZ051bSwKICAgICAgICAgICAgICAgICAgICAgICAgICZjYkhlYWRlclNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICk7CkBAIC0yMjM2LDcgKzIyMzksNyBAQAogICAgICAgICBNQUNiUFNXYWtldXAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgfQogCi0gICAgcERldmljZS0+YlBXQml0T24gPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IGZhbHNlOwogCiAgICAgcExhc3RURCA9IHBIZWFkVEQ7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgdU1BQ2ZyYWdOdW07IGlpKyspIHsKQEAgLTIyNjAsNyArMjI2Myw3IEBACiAgICAgTUFDdlRyYW5zbWl0MChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKIAogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vVFlQRV9BQzBETUEgZGF0YSB0eApAQCAtMjI2OSwyNiArMjI3MiwyNiBAQAogCiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNUeERlc2MgICAgICAgIHBIZWFkVEQsIHBMYXN0VEQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07Ci0gICAgV09SRCAgICAgICAgICAgIHdBSUQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVNQUNmcmFnTnVtID0gMTsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplOwotICAgIEJZVEUgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKLSAgICBCT09MICAgICAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIHNob3J0IHdBSUQ7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtID0gMTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemU7CisgICAgYm9vbCBiTmVlZEVuY3J5cHRpb24gPSBmYWxzZTsKICAgICBQU0tleUl0ZW0gICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKICAgICBTS2V5SXRlbSAgICAgICAgU1RlbXBLZXk7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIEJPT0wgICAgICAgICAgICBiVEtJUF9Vc2VHVEsgPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgYk5lZWREZUF1dGggPSBGQUxTRTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQ7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOb2RlRXhpc3QgPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgYm9vbCBiVEtJUF9Vc2VHVEsgPSBmYWxzZTsKKyAgICBib29sIGJOZWVkRGVBdXRoID0gZmFsc2U7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQ7CisgICAgYm9vbCBiTm9kZUV4aXN0ID0gZmFsc2U7CiAKIAogCiAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBGQUxTRSkgeworICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gZmFsc2UpIHsKICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMzA3LDkgKzIzMTAsOSBAQAogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUygoUEJZVEUpKHNrYi0+ZGF0YSkpKSB7CisgICAgICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcigodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpKSkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7Ci0gICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgIGJOb2RlRXhpc3QgPSB0cnVlOwogICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlKSB7CiAgICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJihwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnNUeFBTUXVldWUpLCBza2IpOwogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0ud0VuUXVldWVDbnQrKzsKQEAgLTIzMTksNyArMjMyMiw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiB9ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKFBCWVRFKShza2ItPmRhdGEpLCAmdU5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEpLCAmdU5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3RhaWwoJnBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uc1R4UFNRdWV1ZSwgc2tiKTsKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53RW5RdWV1ZUNudCsrOwpAQCAtMjMzOCwxMiArMjM0MSwxMiBAQAogICAgICAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlQcmVhbWJsZVR5cGUgPSBQUkVBTUJMRV9MT05HOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gdHJ1ZTsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGJOb2RlRXhpc3QgPT0gRkFMU0UpIHsKKyAgICAgICAgaWYgKGJOb2RlRXhpc3QgPT0gZmFsc2UpIHsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIlVua25vd24gU1RBIG5vdCBmb3VuZCBpbiBub2RlIERCIFxuIik7CiAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKQEAgLTIzNTYsNyArMjM1OSw3IEBACiAgICAgcEhlYWRURC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX0VEUHxUQ1JfU1RQKTsKIAogCi0gICAgbWVtY3B5KHBEZXZpY2UtPnNUeEV0aEhlYWRlci5hYnlEc3RBZGRyLCAoUEJZVEUpKHNrYi0+ZGF0YSksIEVUSF9ITEVOKTsKKyAgICBtZW1jcHkocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIsICh1bnNpZ25lZCBjaGFyICopKHNrYi0+ZGF0YSksIEVUSF9ITEVOKTsKICAgICBjYkZyYW1lQm9keVNpemUgPSBza2ItPmxlbiAtIEVUSF9ITEVOOwogICAgIC8vIDgwMi4xSAogICAgIGlmIChudG9ocyhwRGV2aWNlLT5zVHhFdGhIZWFkZXIud1R5cGUpID4gRVRIX0RBVEFfTEVOKSB7CkBAIC0yMzY0LDE4ICsyMzY3LDE4IEBACiAgICAgfQogCiAKLSAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gVFJVRSkgewotICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSBUUlVFOworICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSB0cnVlKSB7CisgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IHRydWU7CiAgICAgICAgIC8vIGdldCBUcmFuc21pdCBrZXkKICAgICAgICAgZG8gewogICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfU1RBKSAmJgogICAgICAgICAgICAgICAgIChwRGV2aWNlLT5wTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0FTU09DKSkgewogICAgICAgICAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QlNTSUQ7CiAgICAgICAgICAgICAgICAgLy8gZ2V0IHBhaXJ3aXNlIGtleQotICAgICAgICAgICAgICAgIGlmIChLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIFBBSVJXSVNFX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICBpZiAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBQQUlSV0lTRV9LRVksICZwVHJhbnNtaXRLZXkpID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBncm91cCBrZXkKLSAgICAgICAgICAgICAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IFRSVUUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJUS0lQX1VzZUdUSyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVEtJUF9Vc2VHVEsgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciR2V0IEdUSy5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzOTIsMTIgKzIzOTUsMTIgQEAKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyJcbiIpOwogCiAgICAgICAgICAgICAgICAgLy8gZ2V0IHBhaXJ3aXNlIGtleQotICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBUUlVFKQorICAgICAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgUEFJUldJU0VfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGdldCBncm91cCBrZXkKICAgICAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkcjsKLSAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBGQUxTRSkgeworICAgICAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciSUJTUyBhbmQgS0VZIGlzIE5VTEwuIFslZF1cbiIsIHBEZXZpY2UtPnBNZ210LT5lQ3Vyck1vZGUpOwpAQCAtMjQwNSwxNSArMjQwOCwxNSBAQAogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fREVCVUciTk9UIElCU1MgYW5kIEtFWSBpcyBOVUxMLiBbJWRdXG4iLCBwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYlRLSVBfVXNlR1RLID0gVFJVRTsKKyAgICAgICAgICAgICAgICBiVEtJUF9Vc2VHVEsgPSB0cnVlOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIkdldCBHVEsuXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZShGQUxTRSk7CisgICAgICAgIH0gd2hpbGUoZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9ERUJVRyJhY2RtYTA6IFNUQSBpbmRleCAlZFxuIiwgdU5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwVHJhbnNtaXRLZXkgPSAmU1RlbXBLZXk7CiAgICAgICAgICAgICBwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJ5Q2lwaGVyU3VpdGU7CiAgICAgICAgICAgICBwVHJhbnNtaXRLZXktPmR3S2V5SW5kZXggPSBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3S2V5SW5kZXg7CkBAIC0yNDQzLDcgKzI0NDYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgYnlQa3RUeXBlID0gKEJZVEUpcERldmljZS0+YnlQYWNrZXRUeXBlOworICAgIGJ5UGt0VHlwZSA9ICh1bnNpZ25lZCBjaGFyKXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKIAogICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSkgewogI2lmZGVmCVBMSUNFX0RFQlVHCkBAIC0yNDU0LDcgKzI0NTcsNyBAQAogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzExTSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfMTFNOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAoV09SRClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CisgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgJiYKQEAgLTI0NjQsMTEgKzI0NjcsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+dUNvbm5lY3Rpb25SYXRlID49IFJBVEVfNTRNKQogICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSBSQVRFXzU0TTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IChXT1JEKXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKIAogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHBEZXZpY2UtPmJ5QUNLUmF0ZSA9IChCWVRFKSBwRGV2aWNlLT53Q3VycmVudFJhdGU7CisgICAgICAgIHBEZXZpY2UtPmJ5QUNLUmF0ZSA9ICh1bnNpZ25lZCBjaGFyKSBwRGV2aWNlLT53Q3VycmVudFJhdGU7CiAgICAgICAgIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlID0gUkFURV8xTTsKICAgICAgICAgcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlID0gUkFURV82TTsKICAgICB9CkBAIC0yNTIxLDcgKzI1MjQsNyBAQAogICAgIH0gZWxzZSBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgewogICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExQTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExR0I7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBieVBrdFR5cGUgPSBQS19UWVBFXzExR0E7CkBAIC0yNTMyLDI4ICsyNTM1LDI4IEBACiAvLwlwcmludGsoIkZJWCBSQVRFOkN1cnJlbnRSYXRlIGlzICVkIik7CiAvLyNlbmRpZgogCi0gICAgaWYgKGJOZWVkRW5jcnlwdGlvbiA9PSBUUlVFKSB7CisgICAgaWYgKGJOZWVkRW5jcnlwdGlvbiA9PSB0cnVlKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ibnRvaHMgUGt0IFR5cGU9JTA0eFxuIiwgbnRvaHMocERldmljZS0+c1R4RXRoSGVhZGVyLndUeXBlKSk7CiAgICAgICAgIGlmICgocERldmljZS0+c1R4RXRoSGVhZGVyLndUeXBlKSA9PSBUWVBFX1BLVF84MDJfMXgpIHsKLSAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IEZBTFNFOworICAgICAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlBrdCBUeXBlPSUwNHhcbiIsIChwRGV2aWNlLT5zVHhFdGhIZWFkZXIud1R5cGUpKTsKICAgICAgICAgICAgIGlmICgocERldmljZS0+cE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkgJiYgKHBEZXZpY2UtPnBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfQVNTT0MpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBUcmFuc21pdEtleSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRG9uJ3QgRmluZCBUWCBLRVlcbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJUS0lQX1VzZUdUSyA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiVEtJUF9Vc2VHVEsgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJlcnJvcjogS0VZIGlzIEdUSyEhfn5cbiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJGaW5kIFBUSyBbJWxYXVxuIiwgcFRyYW5zbWl0S2V5LT5kd0tleUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBiTmVlZEVuY3J5cHRpb24gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocERldmljZS0+YnlDbnRNZWFzdXJlID09IDIpIHsKLSAgICAgICAgICAgICAgICBiTmVlZERlQXV0aCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYk5lZWREZUF1dGggPSB0cnVlOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLlRLSVBDb3VudGVyTWVhc3VyZXNJbnZva2VkKys7CiAgICAgICAgICAgICB9CiAKQEAgLTI1NjEsNyArMjU2NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKCh1Tm9kZUluZGV4ICE9IDApICYmCiAgICAgICAgICAgICAgICAgICAgIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRmluZCBQVEsgWyVsWF1cbiIsIHBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1ODQsNyArMjU4Nyw3IEBACiAjZW5kaWYKICAgICB2R2VuZXJhdGVGSUZPSGVhZGVyKHBEZXZpY2UsIGJ5UGt0VHlwZSwgcERldmljZS0+cGJ5VG1wQnVmZiwgYk5lZWRFbmNyeXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplLCBUWVBFX0FDMERNQSwgcEhlYWRURCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZwRGV2aWNlLT5zVHhFdGhIZWFkZXIsIChQQllURSlza2ItPmRhdGEsIHBUcmFuc21pdEtleSwgdU5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZwRGV2aWNlLT5zVHhFdGhIZWFkZXIsICh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhLCBwVHJhbnNtaXRLZXksIHVOb2RlSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAmdU1BQ2ZyYWdOdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAmY2JIZWFkZXJTaXplCiAgICAgICAgICAgICAgICAgICAgICAgICApOwpAQCAtMjU5Myw3ICsyNTk2LDcgQEAKICAgICAgICAgLy8gRGlzYWJsZSBQUwogICAgICAgICBNQUNiUFNXYWtldXAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgfQotICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gRkFMU0U7CisgICAgcERldmljZS0+YlBXQml0T24gPSBmYWxzZTsKIAogICAgIHBMYXN0VEQgPSBwSGVhZFREOwogICAgIGZvciAoaWkgPSAwOyBpaSA8IHVNQUNmcmFnTnVtOyBpaSsrKSB7CkBAIC0yNjMxLDExICsyNjM0LDExIEBACiAvLyNlbmRpZgogCiB7Ci0gICAgQllURSAgUHJvdG9jb2xfVmVyc2lvbjsgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KLSAgICBCWVRFICBQYWNrZXRfVHlwZTsgICAgICAgICAgIC8vODAyLjF4IEF1dGhlbnRpY2F0aW9uCi0gICAgQllURSAgRGVzY3JpcHRvcl90eXBlOwotICAgIFdPUkQgS2V5X2luZm87Ci1CT09MICAgICAgICAgICAgYlR4ZWFwb2xfa2V5ID0gRkFMU0U7CisgICAgdW5zaWduZWQgY2hhciBQcm90b2NvbF9WZXJzaW9uOyAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgorICAgIHVuc2lnbmVkIGNoYXIgUGFja2V0X1R5cGU7ICAgICAgICAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgorICAgIHVuc2lnbmVkIGNoYXIgRGVzY3JpcHRvcl90eXBlOworICAgIHVuc2lnbmVkIHNob3J0IEtleV9pbmZvOworYm9vbCBiVHhlYXBvbF9rZXkgPSBmYWxzZTsKICAgICBQcm90b2NvbF9WZXJzaW9uID0gc2tiLT5kYXRhW0VUSF9ITEVOXTsKICAgICBQYWNrZXRfVHlwZSA9IHNrYi0+ZGF0YVtFVEhfSExFTisxXTsKICAgICBEZXNjcmlwdG9yX3R5cGUgPSBza2ItPmRhdGFbRVRIX0hMRU4rMSsxKzJdOwpAQCAtMjY0MywxMSArMjY0NiwxMSBAQAogICAgaWYgKHBEZXZpY2UtPnNUeEV0aEhlYWRlci53VHlwZSA9PSBUWVBFX1BLVF84MDJfMXgpIHsKICAgICAgICAgICAgaWYoKChQcm90b2NvbF9WZXJzaW9uPT0xKSB8fChQcm90b2NvbF9WZXJzaW9uPT0yKSkgJiYKIAkgICAgICAgIChQYWNrZXRfVHlwZT09MykpIHsgIC8vODAyLjF4IE9SIGVhcG9sLWtleSBjaGFsbGVuZ2UgZnJhbWUgdHJhbnNmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGJUeGVhcG9sX2tleSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBiVHhlYXBvbF9rZXkgPSB0cnVlOwogCQlpZigoRGVzY3JpcHRvcl90eXBlPT0yNTQpfHwoRGVzY3JpcHRvcl90eXBlPT0yKSkgeyAgICAgICAvL1dQQSBvciBSU04KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShLZXlfaW5mbyAmIEJJVDMpICYmICAgLy9ncm91cC1rZXkgY2hhbGxlbmdlCiAJCQkgICAoS2V5X2luZm8gJiBCSVQ4KSAmJiAoS2V5X2luZm8gJiBCSVQ5KSkgeyAgICAvL3NlbmQgMi8yIGtleQotCQkJICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gVFJVRTsKKwkJCSAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IHRydWU7CiAJCQkgIGlmKERlc2NyaXB0b3JfdHlwZT09MjU0KQogCQkJICAgICAgcHJpbnRrKCJXUEEgIik7CiAJCQkgIGVsc2UKQEAgLTI2NzQsMTMgKzI2NzcsMTMgQEAKICAgICBQU0RldmljZSAgICAgcERldmljZT0oUFNEZXZpY2UpIG5ldGRldl9wcml2KGRldik7CiAKICAgICBpbnQgICAgICAgICAgICAgbWF4X2NvdW50PTA7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3TUlCQ291bnRlcj0wOworICAgIHVuc2lnbmVkIGxvbmcgZHdNSUJDb3VudGVyPTA7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgQllURSAgICAgICAgICAgIGJ5T3JnUGFnZVNlbD0wOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdQYWdlU2VsPTA7CiAgICAgaW50ICAgICAgICAgICAgIGhhbmRsZWQgPSAwOwotICAgIEJZVEUgICAgICAgICAgICBieURhdGEgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhID0gMDsKICAgICBpbnQgICAgICAgICAgICAgaWk9IDA7Ci0vLyAgICBCWVRFICAgICAgICAgICAgYnlSU1NJOworLy8gICAgdW5zaWduZWQgY2hhciBieVJTU0k7CiAKIAogICAgIE1BQ3ZSZWFkSVNSKHBEZXZpY2UtPlBvcnRPZmZzZXQsICZwRGV2aWNlLT5kd0lzcik7CkBAIC0yNjk3LDcgKzI3MDAsNyBAQAogCiAgICAgCWlmICgocERldmljZS0+ZHdJc3IgJiBJU1JfUlhETUEwKSAmJgogICAgICAgICAocERldmljZS0+YnlMb2NhbElEICE9IFJFVl9JRF9WVDMyNTNfQjApICYmCi0gICAgICAgIChwRGV2aWNlLT5iQlNTSURGaWx0ZXIgPT0gVFJVRSkpIHsKKyAgICAgICAgKHBEZXZpY2UtPmJCU1NJREZpbHRlciA9PSB0cnVlKSkgewogICAgICAgICAvLyB1cGRhdGUgUlNTSQogICAgICAgICAvL0JCYlJlYWRFbWJlZGVkKHBEZXZpY2UtPlBvcnRPZmZzZXQsIDB4M0UsICZieVJTU0kpOwogICAgICAgICAvL3BEZXZpY2UtPnVDdXJyUlNTSSA9IGJ5UlNTSTsKQEAgLTI3NDYsOSArMjc0OSw5IEBACiAgICAgICAgICAgICAgICAgVk5TdkluUG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTUFSNCwgJihwRGV2aWNlLT5kd09yZ01BUjQpKTsKICAgICAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICAgICAvL3h4eHgKLSAgICAgICAgICAgICAgIC8vIFdDTURiRmx1c2hDb21tYW5kUXVldWUocERldmljZS0+cE1nbXQsIFRSVUUpOwotICAgICAgICAgICAgICAgIGlmIChDQVJEYlNldENoYW5uZWwocERldmljZSwgcERldmljZS0+cEN1cnJNZWFzdXJlRUlELT5zUmVxLmJ5Q2hhbm5lbCkgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPSBUUlVFOworICAgICAgICAgICAgICAgLy8gV0NNRGJGbHVzaENvbW1hbmRRdWV1ZShwRGV2aWNlLT5wTWdtdCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHNldF9jaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPnBDdXJyTWVhc3VyZUVJRC0+c1JlcS5ieUNoYW5uZWwpID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCBNU1JDVExfUkVBRFkpOwogICAgICAgICAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CkBAIC0yNzcwLDcgKzI3NzMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX01FQVNVUkVFTkQpIHsKICAgICAgICAgICAgICAgICAvLyA4MDIuMTFoIG1lYXN1cmUgZW5kCi0gICAgICAgICAgICAgICAgcERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+Yk1lYXN1cmVJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgVk5Tdk91dFBvcnRCKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1JDUiwgcERldmljZS0+YnlPcmdSQ1IpOwogICAgICAgICAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBWTlN2T3V0UG9ydEQocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfTUFSMCwgcERldmljZS0+ZHdPcmdNQVIwKTsKQEAgLTI3ODIsNyArMjc4NSw3IEBACiAgICAgICAgICAgICAgICAgLy8gY2xlYXIgbWVhc3VyZSBjb250cm9sCiAgICAgICAgICAgICAgICAgTUFDdlJlZ0JpdHNPZmYocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwsIE1TUkNUTF9FTik7CiAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIENBUkRiU2V0Q2hhbm5lbChwRGV2aWNlLCBwRGV2aWNlLT5ieU9yZ0NoYW5uZWwpOworICAgICAgICAgICAgICAgIHNldF9jaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5T3JnQ2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgLy8gV0NNRGJSZXNldENvbW1hbmRRdWV1ZShwRGV2aWNlLT5wTWdtdCk7CiAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKQEAgLTI3OTgsMjYgKzI4MDEsMjYgQEAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5kd0lzciAmIElTUl9RVUlFVFNUQVJUKSB7CiAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoQ0FSRGJTdGFydFF1aWV0KHBEZXZpY2UpID09IEZBTFNFKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChDQVJEYlN0YXJ0UXVpZXQocERldmljZSkgPT0gZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHBEZXZpY2UtPmR3SXNyICYgSVNSX1RCVFQpIHsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlRmlyc3RRdWlldCA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UXVpZXRTdGFydENvdW50LS07CiAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5UXVpZXRTdGFydENvdW50ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUZpcnN0UXVpZXQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMLCAoTVNSQ1RMX1FVSUVUVFhDSEsgfCBNU1JDVExfUVVJRVRFTikpOwogICAgICAgICAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTAocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9PSBUUlVFKSAmJgorICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9PSB0cnVlKSAmJgogICAgICAgICAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfSU5GUkFTVFJVQ1RVUkUpKSB7CiAgICAgICAgICAgICAgICAgcERldmljZS0+YnlDaGFubmVsU3dpdGNoQ291bnQtLTsKICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YnlDaGFubmVsU3dpdGNoQ291bnQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICBDQVJEYlNldENoYW5uZWwocERldmljZSwgcERldmljZS0+YnlOZXdDaGFubmVsKTsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgc2V0X2NoYW5uZWwocERldmljZSwgcERldmljZS0+YnlOZXdDaGFubmVsKTsKICAgICAgICAgICAgICAgICAgICAgVk5UV0lGSWJDaGFubmVsU3dpdGNoKHBEZXZpY2UtPnBNZ210LCBwRGV2aWNlLT5ieU5ld0NoYW5uZWwpOwogICAgICAgICAgICAgICAgICAgICBNQUN2U2VsZWN0UGFnZTEocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19NU1JDVEwrMSwgTVNSQ1RMMV9UWFBBVVNFKTsKQEAgLTI4MjcsMTIgKzI4MzAsMTIgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB7Ci0gICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5iQmVhY29uU2VudCA9IEZBTFNFOworICAgICAgICAgICAgICAgIC8vcERldmljZS0+YkJlYWNvblNlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iVXBkYXRlQkJWR0EpICYmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgJiYgKHBEZXZpY2UtPnVDdXJyUlNTSSAhPSAwKSkgewotICAgICAgICAgICAgICAgICAgICBMT05HICAgICAgICAgICAgbGRCbTsKKyAgICAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJVcGRhdGVCQlZHQSkgJiYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSAmJiAocERldmljZS0+dUN1cnJSU1NJICE9IDApKSB7CisgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgICAgICBsZEJtOwogCi0gICAgICAgICAgICAgICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkgcERldmljZS0+dUN1cnJSU1NJLCAmbGRCbSk7CisgICAgICAgICAgICAgICAgICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAodW5zaWduZWQgY2hhcikgcERldmljZS0+dUN1cnJSU1NJLCAmbGRCbSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaWk9MDtpaTxCQl9WR0FfTEVWRUw7aWkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxkQm0gPCBwRGV2aWNlLT5sZEJtVGhyZXNob2xkW2lpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QkJWR0FOZXcgPSBwRGV2aWNlLT5hYnlCQlZHQVtpaV07CkBAIC0yODU4LDcgKzI4NjEsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcERldmljZS0+YkJlYWNvblNlbnQgPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJCZWFjb25TZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSkgewogICAgICAgICAgICAgICAgIFBTYklzTmV4dFRCVFRXYWtlVXAoKHZvaWQgKilwRGV2aWNlKTsKICAgICAgICAgICAgIH07CkBAIC0yODc5LDMxICsyODgyLDMxIEBACiAgICAgICAgIGlmIChwRGV2aWNlLT5kd0lzciAmIElTUl9CTlRYKSB7CiAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iSXNCZWFjb25CdWZSZWFkeVNldCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJJc0JlYWNvbkJ1ZlJlYWR5U2V0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcERldmljZS0+Y2JCZWFjb25CdWZSZWFkeVNldENudCA9IDA7CiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSB7CiAgICAgICAgICAgICAgICAgaWYocE1nbXQtPmJ5RFRJTUNvdW50ID4gMCkgewogICAgICAgICAgICAgICAgICAgIHBNZ210LT5ieURUSU1Db3VudCAtLTsKLSAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJSeFBTUG9sbCA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlJ4UFNQb2xsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZihwTWdtdC0+YnlEVElNQ291bnQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgbXV0bHRjYXN0IHR4IGJ1ZmZlcnJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5ieURUSU1Db3VudCA9IHBNZ210LT5ieURUSU1QZXJpb2QgLSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUnhQU1BvbGwgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUnhQU1BvbGwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKXBEZXZpY2UsIFdMQU5fQ01EX1JYX1BTUE9MTCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwRGV2aWNlLT5iQmVhY29uU2VudCA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5iQmVhY29uU2VudCA9IHRydWU7CiAKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iQ2hhbm5lbFN3aXRjaCA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5Q2hhbm5lbFN3aXRjaENvdW50LS07CiAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJ5Q2hhbm5lbFN3aXRjaENvdW50ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkNoYW5uZWxTd2l0Y2ggPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgQ0FSRGJTZXRDaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCk7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJDaGFubmVsU3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNldF9jaGFubmVsKHBEZXZpY2UsIHBEZXZpY2UtPmJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgICAgIFZOVFdJRkliQ2hhbm5lbFN3aXRjaChwRGV2aWNlLT5wTWdtdCwgcERldmljZS0+YnlOZXdDaGFubmVsKTsKICAgICAgICAgICAgICAgICAgICAgTUFDdlNlbGVjdFBhZ2UxKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfTVNSQ1RMKzEsIE1TUkNUTDFfVFhQQVVTRSk7CkBAIC0yOTc4LDkgKzI5ODEsMTAgQEAKIH0KIAogLy8yMDA4LTgtNCA8YWRkPiBieSBjaGVzdGVyCi1zdGF0aWMgaW50IENvbmZpZ19GaWxlR2V0UGFyYW1ldGVyKFVDSEFSICpzdHJpbmcsIFVDSEFSICpkZXN0LFVDSEFSICpzb3VyY2UpCitzdGF0aWMgaW50IENvbmZpZ19GaWxlR2V0UGFyYW1ldGVyKHVuc2lnbmVkIGNoYXIgKnN0cmluZywKKwkJdW5zaWduZWQgY2hhciAqZGVzdCwgdW5zaWduZWQgY2hhciAqc291cmNlKQogewotICBVQ0hBUiBidWYxWzEwMF07CisgIHVuc2lnbmVkIGNoYXIgYnVmMVsxMDBdOwogICBpbnQgc291cmNlX2xlbiA9IHN0cmxlbihzb3VyY2UpOwogCiAgICAgbWVtc2V0KGJ1ZjEsMCwxMDApOwpAQCAtMjk4OSwxMyArMjk5MywxMyBAQAogICAgIHNvdXJjZSs9c3RybGVuKGJ1ZjEpOwogCiAgICBtZW1jcHkoZGVzdCxzb3VyY2Usc291cmNlX2xlbi1zdHJsZW4oYnVmMSkpOwotIHJldHVybiBUUlVFOworIHJldHVybiB0cnVlOwogfQogCi1pbnQgQ29uZmlnX0ZpbGVPcGVyYXRpb24oUFNEZXZpY2UgcERldmljZSxCT09MIGZ3cml0ZSx1bnNpZ25lZCBjaGFyICpQYXJhbWV0ZXIpIHsKLSAgICBVQ0hBUiAgICAqY29uZmlnX3BhdGg9Q09ORklHX1BBVEg7Ci0gICAgVUNIQVIgICAgKmJ1ZmZlcj1OVUxMOwotICAgIFVDSEFSICAgICAgdG1wYnVmZmVyWzIwXTsKK2ludCBDb25maWdfRmlsZU9wZXJhdGlvbihQU0RldmljZSBwRGV2aWNlLGJvb2wgZndyaXRlLHVuc2lnbmVkIGNoYXIgKlBhcmFtZXRlcikgeworICAgIHVuc2lnbmVkIGNoYXIgKmNvbmZpZ19wYXRoID0gQ09ORklHX1BBVEg7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcGJ1ZmZlclsyMF07CiAgICAgc3RydWN0IGZpbGUgICAqZmlscD1OVUxMOwogICAgIG1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKICAgICAvL2ludCBvbGRmc3VpZD0wLG9sZGZzZ2lkPTA7CkBAIC0zMDM4LDcgKzMwNDIsNyBAQAogIGdvdG8gZXJyb3IxOwogfQogCi1pZihDb25maWdfRmlsZUdldFBhcmFtZXRlcigiWk9ORVRZUEUiLHRtcGJ1ZmZlcixidWZmZXIpIT1UUlVFKSB7CitpZihDb25maWdfRmlsZUdldFBhcmFtZXRlcigiWk9ORVRZUEUiLHRtcGJ1ZmZlcixidWZmZXIpIT10cnVlKSB7CiAgIHByaW50aygiZ2V0IHBhcmFtZXRlciBlcnJvcj9cbiIpOwogICByZXN1bHQgPSAtMTsKICAgZ290byBlcnJvcjE7CkBAIC0zNTU1LDE5ICszNTU5LDE5IEBACiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkNvbW1pdCB0aGUgc2V0dGluZ3NcbiIpOwogICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJCU1NJRCwgMCwgNik7CiAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAJI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKIAkgICAgICBwTWdtdC0+ZVNjYW5UeXBlID0gV01BQ19TQ0FOX0FDVElWRTsKLQkgaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCAhPVRSVUUpCisJIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgIT10cnVlKQogCSAjZW5kaWYKICAgICAgICAgICAgYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKSBwRGV2aWNlLCBXTEFOX0NNRF9CU1NJRF9TQ0FOLCBwTWdtdC0+YWJ5RGVzaXJlU1NJRCk7CiAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfU1NJRCwgTlVMTCk7CiAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICB9Ci0gICAgICBwRGV2aWNlLT5iQ29tbWl0ID0gRkFMU0U7CisgICAgICBwRGV2aWNlLT5iQ29tbWl0ID0gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHJjOwpAQCAtMzU5OCwyMCArMzYwMiwyMCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkZXZpY2VfaWRfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZ0NjY1NV9wY2lfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZGV2aWNlX2RyaXZlciA9IHsKICAgICAgICAgbmFtZTogICAgICAgREVWSUNFX05BTUUsCi0gICAgICAgIGlkX3RhYmxlOiAgIGRldmljZV9pZF90YWJsZSwKLSAgICAgICAgcHJvYmU6ICAgICAgZGV2aWNlX2ZvdW5kMSwKLSAgICAgICAgcmVtb3ZlOiAgICAgZGV2aWNlX3JlbW92ZTEsCisgICAgICAgIGlkX3RhYmxlOiAgIHZ0NjY1NV9wY2lfaWRfdGFibGUsCisgICAgICAgIHByb2JlOiAgICAgIHZ0NjY1NV9wcm9iZSwKKyAgICAgICAgcmVtb3ZlOiAgICAgdnQ2NjU1X3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KICAgICAgICAgc3VzcGVuZDogICAgdmlhd2dldF9zdXNwZW5kLAogICAgICAgICByZXN1bWU6ICAgICB2aWF3Z2V0X3Jlc3VtZSwKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBfX2luaXQgZGV2aWNlX2luaXRfbW9kdWxlKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB2dDY2NTVfaW5pdF9tb2R1bGUodm9pZCkKIHsKICAgICBpbnQgcmV0OwogCkBAIC0zNjI3LDcgKzM2MzEsNyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBkZXZpY2VfY2xlYW51cF9tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB2dDY2NTVfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAogCkBAIC0zNjM4LDggKzM2NDIsOCBAQAogCiB9CiAKLW1vZHVsZV9pbml0KGRldmljZV9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChkZXZpY2VfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2luaXQodnQ2NjU1X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KHZ0NjY1NV9jbGVhbnVwX21vZHVsZSk7CiAKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMzY1MSw3ICszNjU1LDcgQEAKICAgICBjYXNlIFNZU19ET1dOOgogICAgIGNhc2UgU1lTX0hBTFQ6CiAgICAgY2FzZSBTWVNfUE9XRVJfT0ZGOgotICAgICAgICB3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZGV2KSkgIT0gTlVMTCkgeworCWZvcl9lYWNoX3BjaV9kZXYocGRldikgewogICAgICAgICAgICAgaWYocGNpX2Rldl9kcml2ZXIocGRldikgPT0gJmRldmljZV9kcml2ZXIpIHsKICAgICAgICAgICAgICAgICBpZiAocGNpX2dldF9kcnZkYXRhKHBkZXYpKQogICAgICAgICAgICAgICAgICAgICB2aWF3Z2V0X3N1c3BlbmQocGRldiwgUE1TR19ISUJFUk5BVEUpOwpAQCAtMzY3NywxMCArMzY4MSwxMCBAQAogICAgIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID0gQ01EX1FfU0laRTsKICAgICBwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeCA9IDA7CiAgICAgcERldmljZS0+dUNtZEVucXVldWVJZHggPSAwOwotICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gRkFMU0U7CisgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKICAgICBNQUNiU2h1dGRvd24ocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgTUFDdlNhdmVDb250ZXh0KHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmFieU1hY0NvbnRleHQpOwotICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgIG1lbXNldChwTWdtdC0+YWJ5Q3VyckJTU0lELCAwLCA2KTsKICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpZCk7CkBAIC0zNzA0LDkgKzM3MDgsOSBAQAogICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgTUFDdlJlc3RvcmVDb250ZXh0KHBEZXZpY2UtPlBvcnRPZmZzZXQsIHBEZXZpY2UtPmFieU1hY0NvbnRleHQpOwogICAgICAgICBkZXZpY2VfaW5pdF9yZWdpc3RlcnMocERldmljZSwgREVWSUNFX0lOSVRfRFhQTCk7Ci0gICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPT0gVFJVRSkgeyAvLyBBc3NvYyB3aXRoIEJTUwotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gRkFMU0U7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9PSB0cnVlKSB7IC8vIEFzc29jIHdpdGggQlNTCisgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgaWYocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgICAgICAgICAvLyBJbiBBZGhvYywgQlNTIHN0YXRlIHNldCBiYWNrIHRvIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX1NUQVJURUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuYwppbmRleCA2Yjc1OGE4Li4xNTEzMDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmMKQEAgLTY2LDcgKzY2LDcgQEAKIC8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CiAKLWNvbnN0IEJZVEUgYWNieVJ4UmF0ZVtNQVhfUkFURV0gPQorY29uc3QgdW5zaWduZWQgY2hhciBhY2J5UnhSYXRlW01BWF9SQVRFXSA9CiB7MiwgNCwgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4fTsKIAogCkBAIC03Niw3MCArNzYsNjAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIEJZVEUgc19ieUdldFJhdGVJZHgoQllURSBieVJhdGUpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgc19ieUdldFJhdGVJZHgodW5zaWduZWQgY2hhciBieVJhdGUpOwogCiAKLXN0YXRpYwotdm9pZAotc192R2V0REFTQSgKLSAgICBQQllURSBwYnlSeEJ1ZmZlckFkZHIsCi0gICAgUFVJTlQgcGNiSGVhZGVyU2l6ZSwKLSAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyCi0gICAgKTsKK3N0YXRpYyB2b2lkCitzX3ZHZXREQVNBKHVuc2lnbmVkIGNoYXIgKnBieVJ4QnVmZmVyQWRkciwgdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplLAorCQlQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyKTsKIAotc3RhdGljCi12b2lkCi1zX3ZQcm9jZXNzUnhNQUNIZWFkZXIgKAorc3RhdGljIHZvaWQKK3NfdlByb2Nlc3NSeE1BQ0hlYWRlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyICpwYnlSeEJ1ZmZlckFkZHIsCisJCXVuc2lnbmVkIGludCBjYlBhY2tldFNpemUsIGJvb2wgYklzV0VQLCBib29sIGJFeHRJViwKKwkJdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZSk7CisKK3N0YXRpYyBib29sIHNfYkFQTW9kZVJ4Q3RsKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgIFVJTlQgY2JQYWNrZXRTaXplLAotICAgIEJPT0wgYklzV0VQLAotICAgIEJPT0wgYkV4dElWLAotICAgIFBVSU5UIHBjYkhlYWRTaXplCi0gICAgKTsKLQotc3RhdGljIEJPT0wgc19iQVBNb2RlUnhDdGwoCi0gICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBQQllURSAgICBwYnlGcmFtZSwKLSAgICBJTlQgICAgICBpU0FOb2RlSW5kZXgKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlGcmFtZSwKKyAgICBpbnQgICAgICBpU0FOb2RlSW5kZXgKICAgICApOwogCiAKIAotc3RhdGljIEJPT0wgc19iQVBNb2RlUnhEYXRhICgKK3N0YXRpYyBib29sIHNfYkFQTW9kZVJ4RGF0YSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiLAotICAgIFVJTlQgICAgIEZyYW1lU2l6ZSwKLSAgICBVSU5UICAgICBjYkhlYWRlck9mZnNldCwKLSAgICBJTlQgICAgICBpU0FOb2RlSW5kZXgsCi0gICAgSU5UICAgICAgaURBTm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJPZmZzZXQsCisgICAgaW50ICAgICAgaVNBTm9kZUluZGV4LAorICAgIGludCAgICAgIGlEQU5vZGVJbmRleAogICAgICk7CiAKIAotc3RhdGljIEJPT0wgc19iSGFuZGxlUnhFbmNyeXB0aW9uKAorc3RhdGljIGJvb2wgc19iSGFuZGxlUnhFbmNyeXB0aW9uKAogICAgIFBTRGV2aWNlICAgICBwRGV2aWNlLAotICAgIFBCWVRFICAgICAgICBwYnlGcmFtZSwKLSAgICBVSU5UICAgICAgICAgRnJhbWVTaXplLAotICAgIFBCWVRFICAgICAgICBwYnlSc3IsCi0gICAgUEJZVEUgICAgICAgcGJ5TmV3UnNyLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLAorICAgIHVuc2lnbmVkIGludCBGcmFtZVNpemUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UnNyLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieU5ld1JzciwKICAgICBQU0tleUl0ZW0gICAqcEtleU91dCwKLSAgICBpbnQgKiAgICAgICBwYkV4dElWLAotICAgIFBXT1JEICAgICAgIHB3UnhUU0MxNV8wLAotICAgIFBEV09SRCAgICAgIHBkd1J4VFNDNDdfMTYKKyAgICBib29sICpwYkV4dElWLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1J4VFNDMTVfMCwKKyAgICB1bnNpZ25lZCBsb25nICpwZHdSeFRTQzQ3XzE2CiAgICAgKTsKIAotc3RhdGljIEJPT0wgc19iSG9zdFdlcFJ4RW5jcnlwdGlvbigKK3N0YXRpYyBib29sIHNfYkhvc3RXZXBSeEVuY3J5cHRpb24oCiAKICAgICBQU0RldmljZSAgICAgcERldmljZSwKLSAgICBQQllURSAgICAgICAgcGJ5RnJhbWUsCi0gICAgVUlOVCAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICBQQllURSAgICAgICAgcGJ5UnNyLAotICAgIEJPT0wgICAgICAgICBiT25GbHksCisgICAgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsCisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3IsCisgICAgYm9vbCBiT25GbHksCiAgICAgUFNLZXlJdGVtICAgIHBLZXksCi0gICAgUEJZVEUgICAgICAgcGJ5TmV3UnNyLAotICAgIGludCAqICAgICAgIHBiRXh0SVYsCi0gICAgUFdPUkQgICAgICAgcHdSeFRTQzE1XzAsCi0gICAgUERXT1JEICAgICAgcGR3UnhUU0M0N18xNgorICAgIHVuc2lnbmVkIGNoYXIgKnBieU5ld1JzciwKKyAgICBib29sICpwYkV4dElWLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1J4VFNDMTVfMCwKKyAgICB1bnNpZ25lZCBsb25nICpwZHdSeFRTQzQ3XzE2CiAKICAgICApOwogCkBAIC0xNjIsMjcgKzE1MiwyMSBAQAogICogUmV0dXJuIFZhbHVlOiBOb25lCiAgKgogLSovCi1zdGF0aWMKLXZvaWQKLXNfdlByb2Nlc3NSeE1BQ0hlYWRlciAoCi0gICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBQQllURSBwYnlSeEJ1ZmZlckFkZHIsCi0gICAgVUlOVCBjYlBhY2tldFNpemUsCi0gICAgQk9PTCBiSXNXRVAsCi0gICAgQk9PTCBiRXh0SVYsCi0gICAgUFVJTlQgcGNiSGVhZFNpemUKLSAgICApCitzdGF0aWMgdm9pZAorc192UHJvY2Vzc1J4TUFDSGVhZGVyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgKnBieVJ4QnVmZmVyQWRkciwKKwkJdW5zaWduZWQgaW50IGNiUGFja2V0U2l6ZSwgYm9vbCBiSXNXRVAsIGJvb2wgYkV4dElWLAorCQl1bnNpZ25lZCBpbnQgKnBjYkhlYWRTaXplKQogewotICAgIFBCWVRFICAgICAgICAgICBwYnlSeEJ1ZmZlcjsKLSAgICBVSU5UICAgICAgICAgICAgY2JIZWFkZXJTaXplID0gMDsKLSAgICBQV09SRCAgICAgICAgICAgcHdUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJ4QnVmZmVyOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemUgPSAwOworICAgIHVuc2lnbmVkIHNob3J0ICpwd1R5cGU7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7CiAgICAgaW50ICAgICAgICAgICAgIGlpOwogCiAKICAgICBwTUFDSGVhZGVyID0gKFBTODAyXzExSGVhZGVyKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKIAotICAgIHNfdkdldERBU0EoKFBCWVRFKXBNQUNIZWFkZXIsICZjYkhlYWRlclNpemUsICZwRGV2aWNlLT5zUnhFdGhIZWFkZXIpOworICAgIHNfdkdldERBU0EoKHVuc2lnbmVkIGNoYXIgKilwTUFDSGVhZGVyLCAmY2JIZWFkZXJTaXplLCAmcERldmljZS0+c1J4RXRoSGVhZGVyKTsKIAogICAgIGlmIChiSXNXRVApIHsKICAgICAgICAgaWYgKGJFeHRJVikgewpAQCAtMTk3LDE4ICsxODEsMTggQEAKICAgICAgICAgY2JIZWFkZXJTaXplICs9IFdMQU5fSERSX0FERFIzX0xFTjsKICAgICB9OwogCi0gICAgcGJ5UnhCdWZmZXIgPSAoUEJZVEUpIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOwotICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChwYnlSeEJ1ZmZlciwgJnBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsWzBdKSkgeworICAgIHBieVJ4QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CisgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSkpIHsKICAgICAgICAgY2JIZWFkZXJTaXplICs9IDY7CiAgICAgfQotICAgIGVsc2UgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBieVJ4QnVmZmVyLCAmcERldmljZS0+YWJ5U05BUF9SRkMxMDQyWzBdKSkgeworICAgIGVsc2UgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0pKSB7CiAgICAgICAgIGNiSGVhZGVyU2l6ZSArPSA2OwotICAgICAgICBwd1R5cGUgPSAoUFdPUkQpIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOworICAgICAgICBwd1R5cGUgPSAodW5zaWduZWQgc2hvcnQgKikgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAgICAgICAgIGlmICgoKnB3VHlwZSE9IFRZUEVfUEtUX0lQWCkgJiYgKCpwd1R5cGUgIT0gY3B1X3RvX2xlMTYoMHhGMzgwKSkpIHsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNiSGVhZGVyU2l6ZSAtPSA4OwotICAgICAgICAgICAgcHdUeXBlID0gKFBXT1JEKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKKyAgICAgICAgICAgIHB3VHlwZSA9ICh1bnNpZ25lZCBzaG9ydCAqKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKICAgICAgICAgICAgIGlmIChiSXNXRVApIHsKICAgICAgICAgICAgICAgICBpZiAoYkV4dElWKSB7CiAgICAgICAgICAgICAgICAgICAgICpwd1R5cGUgPSBodG9ucyhjYlBhY2tldFNpemUgLSBXTEFOX0hEUl9BRERSM19MRU4gLSA4KTsgICAgLy8gOCBpcyBJViZFeHRJVgpAQCAtMjIzLDcgKzIwNyw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBjYkhlYWRlclNpemUgLT0gMjsKLSAgICAgICAgcHdUeXBlID0gKFBXT1JEKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKKyAgICAgICAgcHdUeXBlID0gKHVuc2lnbmVkIHNob3J0ICopIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOwogICAgICAgICBpZiAoYklzV0VQKSB7CiAgICAgICAgICAgICBpZiAoYkV4dElWKSB7CiAgICAgICAgICAgICAgICAgKnB3VHlwZSA9IGh0b25zKGNiUGFja2V0U2l6ZSAtIFdMQU5fSERSX0FERFIzX0xFTiAtIDgpOyAgICAvLyA4IGlzIElWJkV4dElWCkBAIC0yMzcsNyArMjIxLDcgQEAKICAgICB9CiAKICAgICBjYkhlYWRlclNpemUgLT0gKEVUSF9BTEVOICogMik7Ci0gICAgcGJ5UnhCdWZmZXIgPSAoUEJZVEUpIChwYnlSeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUpOworICAgIHBieVJ4QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgKHBieVJ4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CiAgICAgZm9yKGlpPTA7aWk8RVRIX0FMRU47aWkrKykKICAgICAgICAgKnBieVJ4QnVmZmVyKysgPSBwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5RHN0QWRkcltpaV07CiAgICAgZm9yKGlpPTA7aWk8RVRIX0FMRU47aWkrKykKQEAgLTI0OSw5ICsyMzMsOSBAQAogCiAKIAotc3RhdGljIEJZVEUgc19ieUdldFJhdGVJZHggKEJZVEUgYnlSYXRlKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgc19ieUdldFJhdGVJZHggKHVuc2lnbmVkIGNoYXIgYnlSYXRlKQogewotICAgIEJZVEUgICAgYnlSYXRlSWR4OworICAgIHVuc2lnbmVkIGNoYXIgYnlSYXRlSWR4OwogCiAgICAgZm9yIChieVJhdGVJZHggPSAwOyBieVJhdGVJZHggPE1BWF9SQVRFIDsgYnlSYXRlSWR4KyspIHsKICAgICAgICAgaWYgKGFjYnlSeFJhdGVbYnlSYXRlSWR4JU1BWF9SQVRFXSA9PSBieVJhdGUpCkBAIC0yNjEsMTUgKzI0NSwxMSBAQAogfQogCiAKLXN0YXRpYwotdm9pZAotc192R2V0REFTQSAoCi0gICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgIFBVSU5UIHBjYkhlYWRlclNpemUsCi0gICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlcgotICAgICkKK3N0YXRpYyB2b2lkCitzX3ZHZXREQVNBKHVuc2lnbmVkIGNoYXIgKnBieVJ4QnVmZmVyQWRkciwgdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplLAorCVBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIpCiB7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyU2l6ZSA9IDA7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7CiAgICAgaW50ICAgICAgICAgICAgIGlpOwogCkBAIC0zMzMsNyArMzEzLDcgQEAKIAogCiAKLUJPT0wKK2Jvb2wKIGRldmljZV9yZWNlaXZlX2ZyYW1lICgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTUnhEZXNjIHBDdXJyUkQKQEAgLTM0OSwzNiArMzI5LDM2IEBACiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFNSeE1nbXRQYWNrZXQgIHBSeFBhY2tldCA9ICYocERldmljZS0+cE1nbXQtPnNSeFBhY2tldCk7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHA4MDJfMTFIZWFkZXI7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVJzcjsKLSAgICBQQllURSAgICAgICAgICAgcGJ5TmV3UnNyOwotICAgIFBCWVRFICAgICAgICAgICBwYnlSU1NJOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJzcjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlOZXdSc3I7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UlNTSTsKICAgICBQUVdPUkQgICAgICAgICAgcHF3VFNGVGltZTsKLSAgICBQV09SRCAgICAgICAgICAgcHdGcmFtZVNpemU7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieUZyYW1lOwotICAgIEJPT0wgICAgICAgICAgICBiRGVGcmFnUnggPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgYklzV0VQID0gRkFMU0U7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyT2Zmc2V0OwotICAgIFVJTlQgICAgICAgICAgICBGcmFtZVNpemU7Ci0gICAgV09SRCAgICAgICAgICAgIHdFdGhlclR5cGUgPSAwOwotICAgIElOVCAgICAgICAgICAgICBpU0FOb2RlSW5kZXggPSAtMTsKLSAgICBJTlQgICAgICAgICAgICAgaURBTm9kZUluZGV4ID0gLTE7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIFVJTlQgICAgICAgICAgICBjYklWT2Zmc2V0OwotICAgIEJPT0wgICAgICAgICAgICBiRXh0SVYgPSBGQUxTRTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5UnhTdHM7Ci0gICAgUEJZVEUgICAgICAgICAgIHBieVJ4UmF0ZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5U1E7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdGcmFtZVNpemU7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWU7CisgICAgYm9vbCBiRGVGcmFnUnggPSBmYWxzZTsKKyAgICBib29sIGJJc1dFUCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlck9mZnNldDsKKyAgICB1bnNpZ25lZCBpbnQgRnJhbWVTaXplOworICAgIHVuc2lnbmVkIHNob3J0IHdFdGhlclR5cGUgPSAwOworICAgIGludCAgICAgICAgICAgICBpU0FOb2RlSW5kZXggPSAtMTsKKyAgICBpbnQgICAgICAgICAgICAgaURBTm9kZUluZGV4ID0gLTE7CisgICAgdW5zaWduZWQgaW50IGlpOworICAgIHVuc2lnbmVkIGludCBjYklWT2Zmc2V0OworICAgIGJvb2wgYkV4dElWID0gZmFsc2U7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UnhTdHM7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UnhSYXRlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVNROworICAgIHVuc2lnbmVkIGludCBjYkhlYWRlclNpemU7CiAgICAgUFNLZXlJdGVtICAgICAgIHBLZXkgPSBOVUxMOwotICAgIFdPUkQgICAgICAgICAgICB3UnhUU0MxNV8wID0gMDsKLSAgICBEV09SRCAgICAgICAgICAgZHdSeFRTQzQ3XzE2ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3UnhUU0MxNV8wID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnhUU0M0N18xNiA9IDA7CiAgICAgU0tleUl0ZW0gICAgICAgIFNUZW1wS2V5OwogICAgIC8vIDgwMi4xMWggUlBJCi0gICAgRFdPUkQgICAgICAgICAgIGR3RHVyYXRpb24gPSAwOwotICAgIExPTkcgICAgICAgICAgICBsZEJtID0gMDsKLSAgICBMT05HICAgICAgICAgICAgbGRCbVRocmVzaG9sZCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBkd0R1cmF0aW9uID0gMDsKKyAgICBsb25nICAgICAgICAgICAgbGRCbSA9IDA7CisgICAgbG9uZyAgICAgICAgICAgIGxkQm1UaHJlc2hvbGQgPSAwOwogICAgIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXI7Ci0gQk9PTCAgICAgICAgICAgIGJSeGVhcG9sX2tleSA9IEZBTFNFOworIGJvb2wgYlJ4ZWFwb2xfa2V5ID0gZmFsc2U7CiAKIC8vICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLS0tLS0tLSBkZXZpY2VfcmVjZWl2ZV9mcmFtZS0tLVxuIik7CiAKQEAgLTM5MSw3ICszNzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogI2VuZGlmCiAvL1BMSUNFX0RFQlVHPC0KLSAgICBwd0ZyYW1lU2l6ZSA9IChQV09SRCkoc2tiLT5kYXRhICsgMik7CisgICAgcHdGcmFtZVNpemUgPSAodW5zaWduZWQgc2hvcnQgKikoc2tiLT5kYXRhICsgMik7CiAgICAgRnJhbWVTaXplID0gY3B1X3RvX2xlMTYocEN1cnJSRC0+bV9yZDFSRDEud1JlcUNvdW50KSAtIGNwdV90b19sZTE2KHBDdXJyUkQtPm1fcmQwUkQwLndSZXNDb3VudCk7CiAKICAgICAvLyBNYXg6IDIzMTJQYXlsb2FkICsgMzBIRCArNENSQyArIDJQYWRkaW5nICsgNExlbiArIDhUU0YgKyA0UlNSCkBAIC0zOTksMTcgKzM3OSwxNyBAQAogICAgIGlmICgoRnJhbWVTaXplID4gMjM2NCl8fChGcmFtZVNpemUgPD0gMzIpKSB7CiAgICAgICAgIC8vIEZyYW1lIFNpemUgZXJyb3IgZHJvcCB0aGlzIHBhY2tldC4KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tLS0tLS0tIFdST05HIExlbmd0aCAxIFxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHBieVJ4U3RzID0gKFBCWVRFKSAoc2tiLT5kYXRhKTsKLSAgICBwYnlSeFJhdGUgPSAoUEJZVEUpIChza2ItPmRhdGEgKyAxKTsKLSAgICBwYnlSc3IgPSAoUEJZVEUpIChza2ItPmRhdGEgKyBGcmFtZVNpemUgLSAxKTsKLSAgICBwYnlSU1NJID0gKFBCWVRFKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMik7Ci0gICAgcGJ5TmV3UnNyID0gKFBCWVRFKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMyk7Ci0gICAgcGJ5U1EgPSAoUEJZVEUpIChza2ItPmRhdGEgKyBGcmFtZVNpemUgLSA0KTsKKyAgICBwYnlSeFN0cyA9ICh1bnNpZ25lZCBjaGFyICopIChza2ItPmRhdGEpOworICAgIHBieVJ4UmF0ZSA9ICh1bnNpZ25lZCBjaGFyICopIChza2ItPmRhdGEgKyAxKTsKKyAgICBwYnlSc3IgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMSk7CisgICAgcGJ5UlNTSSA9ICh1bnNpZ25lZCBjaGFyICopIChza2ItPmRhdGEgKyBGcmFtZVNpemUgLSAyKTsKKyAgICBwYnlOZXdSc3IgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gMyk7CisgICAgcGJ5U1EgPSAodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhICsgRnJhbWVTaXplIC0gNCk7CiAgICAgcHF3VFNGVGltZSA9IChQUVdPUkQpIChza2ItPmRhdGEgKyBGcmFtZVNpemUgLSAxMik7Ci0gICAgcGJ5RnJhbWUgPSAoUEJZVEUpKHNrYi0+ZGF0YSArIDQpOworICAgIHBieUZyYW1lID0gKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhICsgNCk7CiAKICAgICAvLyBnZXQgcGFja2V0IHNpemUKICAgICBGcmFtZVNpemUgPSBjcHVfdG9fbGUxNigqcHdGcmFtZVNpemUpOwpAQCAtNDE3LDcgKzM5Nyw3IEBACiAgICAgaWYgKChGcmFtZVNpemUgPiAyMzQ2KXwoRnJhbWVTaXplIDwgMTQpKSB7IC8vIE1heDogMjMxMlBheWxvYWQgKyAzMEhEICs0Q1JDCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1pbjogMTQgYnl0ZXMgQUNLCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLS0tLS0tLSBXUk9ORyBMZW5ndGggMiBcbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAvL1BMSUNFX0RFQlVHLT4KICNpZiAxCkBAIC00MzEsOSArNDExLDkgQEAKIAogI2VuZGlmCiAKLSAgcE1BQ0hlYWRlcj0oUFM4MDJfMTFIZWFkZXIpKChQQllURSkgKHNrYi0+ZGF0YSkrOCk7CisgIHBNQUNIZWFkZXI9KFBTODAyXzExSGVhZGVyKSgodW5zaWduZWQgY2hhciAqKSAoc2tiLT5kYXRhKSs4KTsKIC8vUExJQ0VfREVCVUc8LQotCWlmIChwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPT0gVFJVRSkgeworCWlmIChwRGV2aWNlLT5iTWVhc3VyZUluUHJvZ3Jlc3MgPT0gdHJ1ZSkgewogICAgICAgICBpZiAoKCpwYnlSc3IgJiBSU1JfQ1JDT0spICE9IDApIHsKICAgICAgICAgICAgIHBEZXZpY2UtPmJ5QmFzaWNNYXAgfD0gMHgwMTsKICAgICAgICAgfQpAQCAtNDYwLDEzICs0NDAsMTMgQEAKICAgICAgICAgICAgIGlpLS07CiAgICAgICAgIH0KICAgICAgICAgcERldmljZS0+ZHdSUElzW2lpXSArPSBkd0R1cmF0aW9uOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIUlTX01VTFRJQ0FTVF9BRERSRVNTKHBieUZyYW1lKSAmJiAhSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5RnJhbWUpKSB7CisgICAgaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwYnlGcmFtZSkpIHsKICAgICAgICAgaWYgKFdDVExiSXNEdXBsaWNhdGUoJihwRGV2aWNlLT5zRHVwUnhDYWNoZSksIChQUzgwMl8xMUhlYWRlcikgKHNrYi0+ZGF0YSArIDQpKSkgewogICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuRnJhbWVEdXBsaWNhdGVDb3VudCsrOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC00NzUsMTQgKzQ1NSwxNCBAQAogICAgIHNfdkdldERBU0Eoc2tiLT5kYXRhKzQsICZjYkhlYWRlclNpemUsICZwRGV2aWNlLT5zUnhFdGhIZWFkZXIpOwogCiAgICAgLy8gZmlsdGVyIHBhY2tldCBzZW5kIGZyb20gbXlzZWxmCi0gICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKChQQllURSkmKHBEZXZpY2UtPnNSeEV0aEhlYWRlci5hYnlTcmNBZGRyWzBdKSwgcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIpKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoKHVuc2lnbmVkIGNoYXIgKikmKHBEZXZpY2UtPnNSeEV0aEhlYWRlci5hYnlTcmNBZGRyWzBdKSwgcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgfHwgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSkgewogICAgICAgICBpZiAoSVNfQ1RMX1BTUE9MTChwYnlGcmFtZSkgfHwgIUlTX1RZUEVfQ09OVFJPTChwYnlGcmFtZSkpIHsKICAgICAgICAgICAgIHA4MDJfMTFIZWFkZXIgPSAoUFM4MDJfMTFIZWFkZXIpIChwYnlGcmFtZSk7CiAgICAgICAgICAgICAvLyBnZXQgU0EgTm9kZUluZGV4Ci0gICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKFBCWVRFKShwODAyXzExSGVhZGVyLT5hYnlBZGRyMiksICZpU0FOb2RlSW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgKHVuc2lnbmVkIGNoYXIgKikocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLCAmaVNBTm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS51bExhc3RSeEppZmZlciA9IGppZmZpZXM7CiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLnVJbkFjdGl2ZUNvdW50ID0gMDsKICAgICAgICAgICAgIH0KQEAgLTQ5MCwxNyArNDcwLDE3IEBACiAgICAgfQogCiAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewotICAgICAgICBpZiAoc19iQVBNb2RlUnhDdGwocERldmljZSwgcGJ5RnJhbWUsIGlTQU5vZGVJbmRleCkgPT0gVFJVRSkgewotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICBpZiAoc19iQVBNb2RlUnhDdGwocERldmljZSwgcGJ5RnJhbWUsIGlTQU5vZGVJbmRleCkgPT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAKICAgICBpZiAoSVNfRkNfV0VQKHBieUZyYW1lKSkgewotICAgICAgICBCT09MICAgICBiUnhEZWNyeU9LID0gRkFMU0U7CisgICAgICAgIGJvb2wgYlJ4RGVjcnlPSyA9IGZhbHNlOwogCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icnggV0VQIHBrdFxuIik7Ci0gICAgICAgIGJJc1dFUCA9IFRSVUU7CisgICAgICAgIGJJc1dFUCA9IHRydWU7CiAgICAgICAgIGlmICgocERldmljZS0+YkVuYWJsZUhvc3RXRVApICYmIChpU0FOb2RlSW5kZXggPj0gMCkpIHsKICAgICAgICAgICAgIHBLZXkgPSAmU1RlbXBLZXk7CiAgICAgICAgICAgICBwS2V5LT5ieUNpcGhlclN1aXRlID0gcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJ5Q2lwaGVyU3VpdGU7CkBAIC01NTIsMTEgKzUzMiwxMSBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuV0VQSUNWRXJyb3JDb3VudC5RdWFkUGFydCsrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIldFUCBGdW5jIEZhaWxcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmICgocEtleSAhPSBOVUxMKSAmJiAocEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX0NDTVApKQogICAgICAgICAgICAgRnJhbWVTaXplIC09IDg7ICAgICAgICAgLy8gTWVzc2FnZSBJbnRlZ3JpdHkgQ29kZQpAQCAtNTg0LDE4ICs1NjQsMTggQEAKIAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAKIC8vIE1hbmFnZW1lbnQgJiBDb250cm9sIGZyYW1lIEhhbmRsZQotICAgIGlmICgoSVNfVFlQRV9EQVRBKChza2ItPmRhdGErNCkpKSA9PSBGQUxTRSkgeworICAgIGlmICgoSVNfVFlQRV9EQVRBKChza2ItPmRhdGErNCkpKSA9PSBmYWxzZSkgewogICAgICAgICAvLyBIYW5kbGUgQ29udHJvbCAmIE1hbmFnZSBGcmFtZQogCiAgICAgICAgIGlmIChJU19UWVBFX01HTVQoKHNrYi0+ZGF0YSs0KSkpIHsKLSAgICAgICAgICAgIFBCWVRFIHBieURhdGExOwotICAgICAgICAgICAgUEJZVEUgcGJ5RGF0YTI7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlEYXRhMTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieURhdGEyOwogCiAgICAgICAgICAgICBwUnhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKHNrYi0+ZGF0YSs0KTsKICAgICAgICAgICAgIHBSeFBhY2tldC0+Y2JNUERVTGVuID0gRnJhbWVTaXplOwpAQCAtNjQ5LDEzICs2MjksMTMgQEAKICAgICAJICAgICAgICBza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCSAgICAgICAgICAgIG1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc2tiLT5jYikpOwogCSAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAJICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvLyBDb250cm9sIEZyYW1lCiAgICAgICAgIH07Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgewpAQCAtNjY3LDEyICs2NDcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIGRpc2NhcmQgREFUQSBwYWNrZXQgd2hpbGUgbm90IGFzc29jaWF0ZSB8fCBCU1NJRCBlcnJvcgotICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gRkFMU0UpIHx8CisgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBmYWxzZSkgfHwKICAgICAgICAgICAgICAgICAhKCpwYnlSc3IgJiBSU1JfQlNTSURPSykpIHsKICAgICAgICAgICAgICAgICBpZiAoYkRlRnJhZ1J4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZGV2aWNlX2FsbG9jX2ZyYWdfYnVmKHBEZXZpY2UsICZwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0pKSB7CkBAIC02ODAsMTIgKzY2MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgLy9taWtlIGFkZDpzdGF0aW9uIG1vZGUgY2hlY2sgZWFwb2wta2V5IGNoYWxsZW5nZS0tLT4KICAgIAkgIHsKLSAgIAkgICAgQllURSAgUHJvdG9jb2xfVmVyc2lvbjsgICAgLy84MDIuMXggQXV0aGVudGljYXRpb24KLQkgICAgQllURSAgUGFja2V0X1R5cGU7ICAgICAgICAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgorICAgCSAgICB1bnNpZ25lZCBjaGFyIFByb3RvY29sX1ZlcnNpb247ICAgIC8vODAyLjF4IEF1dGhlbnRpY2F0aW9uCisJICAgIHVuc2lnbmVkIGNoYXIgUGFja2V0X1R5cGU7ICAgICAgICAgICAvLzgwMi4xeCBBdXRoZW50aWNhdGlvbgogICAgICAgICAgICAgICBpZiAoYklzV0VQKQogICAgICAgICAgICAgICAgICAgY2JJVk9mZnNldCA9IDg7CiAgICAgICAgICAgICAgIGVsc2UKQEAgLTY5Nyw3ICs2NzcsNyBAQAogCSAgICAgaWYgKHdFdGhlclR5cGUgPT0gRVRIX1BfUEFFKSB7ICAgICAgICAgLy9Qcm90b2NvbCBUeXBlIGluIExMQy1IZWFkZXIKICAgICAgICAgICAgICAgICAgIGlmKCgoUHJvdG9jb2xfVmVyc2lvbj09MSkgfHwoUHJvdG9jb2xfVmVyc2lvbj09MikpICYmCiAJCSAgICAgKFBhY2tldF9UeXBlPT0zKSkgeyAgLy84MDIuMXggT1IgZWFwb2wta2V5IGNoYWxsZW5nZSBmcmFtZSByZWNlaXZlCi0gICAgICAgICAgICAgICAgICAgICAgICBiUnhlYXBvbF9rZXkgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYlJ4ZWFwb2xfa2V5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgIH0KIAkgICAgICB9CiAgICAJICB9CkBAIC03MTYsOCArNjk2LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5wTWdtdC0+YkluVElNV2FrZSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+cE1nbXQtPmJJblRJTVdha2UgPSBGQUxTRTsKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5wTWdtdC0+YkluVElNV2FrZSA9PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgcERldmljZS0+cE1nbXQtPmJJblRJTVdha2UgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CkBAIC03MjUsNyArNzA1LDcgQEAKICAgICAvLyBOb3cgaXQgb25seSBzdXBwb3J0cyA4MDIuMTFnIEluZnJhc3RydWN0dXJlIE1vZGUsIGFuZCBzdXBwb3J0IHJhdGUgbXVzdCB1cCB0byA1NCBNYnBzCiAgICAgaWYgKHBEZXZpY2UtPmJEaXZlcnNpdHlFbmFibGUgJiYgKEZyYW1lU2l6ZT41MCkgJiYKICAgICAgICAgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkgJiYKLSAgICAgICAgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSkgeworICAgICAgICAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpKSB7CiAJLy9wcmludGsoImRldmljZV9yZWNlaXZlX2ZyYW1lOiBSeFJhdGUgaXMgJWRcbiIsKnBieVJ4UmF0ZSk7CiAJCUJCdkFudGVubmFEaXZlcnNpdHkocERldmljZSwgc19ieUdldFJhdGVJZHgoKnBieVJ4UmF0ZSksIDApOwogICAgIH0KQEAgLTc1Miw4ICs3MzIsOCBAQAogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZTgwMjF4ID09IFRSVUUpKXsKLSAgICAgICAgQllURSAgICBhYnlNYWNIZHJbMjRdOworICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZTgwMjF4ID09IHRydWUpKXsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhYnlNYWNIZHJbMjRdOwogCiAgICAgICAgIC8vIE9ubHkgODAyLjF4IHBhY2tldCBpbmNvbWluZyBhbGxvd2VkCiAgICAgICAgIGlmIChiSXNXRVApCkBAIC03NjcsNyArNzQ3LDcgQEAKICAgICAgICAgaWYgKHdFdGhlclR5cGUgPT0gRVRIX1BfUEFFKSB7CiAgICAgICAgICAgICBza2ItPmRldiA9IHBEZXZpY2UtPmFwZGV2OwogCi0gICAgICAgICAgICBpZiAoYklzV0VQID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChiSXNXRVAgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIC8vIHN0cmlwIElWIGhlYWRlcig4KQogICAgICAgICAgICAgICAgIG1lbWNweSgmYWJ5TWFjSGRyWzBdLCAoc2tiLT5kYXRhICsgNCksIDI0KTsKICAgICAgICAgICAgICAgICBtZW1jcHkoKHNrYi0+ZGF0YSArIDQgKyBjYklWT2Zmc2V0KSwgJmFieU1hY0hkclswXSwgMjQpOwpAQCAtNzgxLDEyICs3NjEsMTIgQEAKICAgICAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CiAgICAgICAgICAgICBtZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKICAgICAgICAgICAgIG5ldGlmX3J4KHNrYik7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiB9CiAgICAgICAgIC8vIGNoZWNrIGlmIDgwMi4xeCBhdXRob3JpemVkCiAgICAgICAgIGlmICghKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5kd0ZsYWdzICYgV0xBTl9TVEFfQVVUSE9SSVpFRCkpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAKQEAgLTgwMCw1MyArNzgwLDUzIEBACiAgICAgLy8gU29mdCBNSUMKICAgICBpZiAoKHBLZXkgIT0gTlVMTCkgJiYgKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogICAgICAgICBpZiAoYklzV0VQKSB7Ci0gICAgICAgICAgICBQRFdPUkQgICAgICAgICAgcGR3TUlDX0w7Ci0gICAgICAgICAgICBQRFdPUkQgICAgICAgICAgcGR3TUlDX1I7Ci0gICAgICAgICAgICBEV09SRCAgICAgICAgICAgZHdNSUNfUHJpb3JpdHk7Ci0gICAgICAgICAgICBEV09SRCAgICAgICAgICAgZHdNSUNLZXkwID0gMCwgZHdNSUNLZXkxID0gMDsKLSAgICAgICAgICAgIERXT1JEICAgICAgICAgICBkd0xvY2FsTUlDX0wgPSAwOwotICAgICAgICAgICAgRFdPUkQgICAgICAgICAgIGR3TG9jYWxNSUNfUiA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfTDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnBkd01JQ19SOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkd01JQ19Qcmlvcml0eTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHdNSUNLZXkwID0gMCwgZHdNSUNLZXkxID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHdMb2NhbE1JQ19MID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHdMb2NhbE1JQ19SID0gMDsKICAgICAgICAgICAgIHZpYXdnZXRfd3BhX2hlYWRlciAqd3BhaGRyOwogCiAKICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKLSAgICAgICAgICAgICAgICBkd01JQ0tleTAgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyNF0pKTsKLSAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyOF0pKTsKKyAgICAgICAgICAgICAgICBkd01JQ0tleTAgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikoJnBLZXktPmFieUtleVsyNF0pKTsKKyAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikoJnBLZXktPmFieUtleVsyOF0pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5wTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQU5PTkUpIHsKLSAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKCZwS2V5LT5hYnlLZXlbMTZdKSk7Ci0gICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MSA9IGNwdV90b19sZTMyKCooUERXT1JEKSgmcEtleS0+YWJ5S2V5WzIwXSkpOworICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTAgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikoJnBLZXktPmFieUtleVsxNl0pKTsKKyAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkxID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMjBdKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocEtleS0+ZHdLZXlJbmRleCAmIEJJVDI4KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MCA9IGNwdV90b19sZTMyKCooUERXT1JEKSgmcEtleS0+YWJ5S2V5WzE2XSkpOwotICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMTZdKSk7CisgICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MSA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKSgmcEtleS0+YWJ5S2V5WzIwXSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MCA9IGNwdV90b19sZTMyKCooUERXT1JEKSgmcEtleS0+YWJ5S2V5WzI0XSkpOwotICAgICAgICAgICAgICAgICAgICBkd01JQ0tleTEgPSBjcHVfdG9fbGUzMigqKFBEV09SRCkoJnBLZXktPmFieUtleVsyOF0pKTsKKyAgICAgICAgICAgICAgICAgICAgZHdNSUNLZXkwID0gY3B1X3RvX2xlMzIoKih1bnNpZ25lZCBsb25nICopKCZwS2V5LT5hYnlLZXlbMjRdKSk7CisgICAgICAgICAgICAgICAgICAgIGR3TUlDS2V5MSA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKSgmcEtleS0+YWJ5S2V5WzI4XSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTUlDX3ZJbml0KGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKLSAgICAgICAgICAgIE1JQ192QXBwZW5kKChQQllURSkmKHBEZXZpY2UtPnNSeEV0aEhlYWRlci5hYnlEc3RBZGRyWzBdKSwgMTIpOworICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmKHBEZXZpY2UtPnNSeEV0aEhlYWRlci5hYnlEc3RBZGRyWzBdKSwgMTIpOwogICAgICAgICAgICAgZHdNSUNfUHJpb3JpdHkgPSAwOwotICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKFBCWVRFKSZkd01JQ19Qcmlvcml0eSwgNCk7CisgICAgICAgICAgICBNSUNfdkFwcGVuZCgodW5zaWduZWQgY2hhciAqKSZkd01JQ19Qcmlvcml0eSwgNCk7CiAgICAgICAgICAgICAvLyA0IGlzIFJjdiBidWZmZXIgaGVhZGVyLCAyNCBpcyBNQUMgSGVhZGVyLCBhbmQgOCBpcyBJViBhbmQgRXh0IElWLgotICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKFBCWVRFKShza2ItPmRhdGEgKyA0ICsgV0xBTl9IRFJfQUREUjNfTEVOICsgOCksCisgICAgICAgICAgICBNSUNfdkFwcGVuZCgodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGEgKyA0ICsgV0xBTl9IRFJfQUREUjNfTEVOICsgOCksCiAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZVNpemUgLSBXTEFOX0hEUl9BRERSM19MRU4gLSA4KTsKICAgICAgICAgICAgIE1JQ192R2V0TUlDKCZkd0xvY2FsTUlDX0wsICZkd0xvY2FsTUlDX1IpOwogICAgICAgICAgICAgTUlDX3ZVbkluaXQoKTsKIAotICAgICAgICAgICAgcGR3TUlDX0wgPSAoUERXT1JEKShza2ItPmRhdGEgKyA0ICsgRnJhbWVTaXplKTsKLSAgICAgICAgICAgIHBkd01JQ19SID0gKFBEV09SRCkoc2tiLT5kYXRhICsgNCArIEZyYW1lU2l6ZSArIDQpOworICAgICAgICAgICAgcGR3TUlDX0wgPSAodW5zaWduZWQgbG9uZyAqKShza2ItPmRhdGEgKyA0ICsgRnJhbWVTaXplKTsKKyAgICAgICAgICAgIHBkd01JQ19SID0gKHVuc2lnbmVkIGxvbmcgKikoc2tiLT5kYXRhICsgNCArIEZyYW1lU2l6ZSArIDQpOwogICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDEyKCgiUnhMOiAlbHgsIFJ4UjogJWx4XG4iLCAqcGR3TUlDX0wsICpwZHdNSUNfUikpOwogICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDEyKCgiTG9jYWxMOiAlbHgsIExvY2FsUjogJWx4XG4iLCBkd0xvY2FsTUlDX0wsIGR3TG9jYWxNSUNfUikpOwogICAgICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImR3TUlDS2V5MD0gJWx4LGR3TUlDS2V5MT0gJWx4IFxuIiwgZHdNSUNLZXkwLCBkd01JQ0tleTEpOwogCiAKICAgICAgICAgICAgIGlmICgoY3B1X3RvX2xlMzIoKnBkd01JQ19MKSAhPSBkd0xvY2FsTUlDX0wpIHx8IChjcHVfdG9fbGUzMigqcGR3TUlDX1IpICE9IGR3TG9jYWxNSUNfUikgfHwKLSAgICAgICAgICAgICAgICAocERldmljZS0+YlJ4TUlDRmFpbCA9PSBUUlVFKSkgeworICAgICAgICAgICAgICAgIChwRGV2aWNlLT5iUnhNSUNGYWlsID09IHRydWUpKSB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJNSUMgY29tcGFyaXNvbiBpcyBmYWlsIVxuIik7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlJ4TUlDRmFpbCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJSeE1JQ0ZhaWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPnM4MDJfMTFDb3VudGVyLlRLSVBMb2NhbE1JQ0ZhaWx1cmVzLlF1YWRQYXJ0Kys7CiAgICAgICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuVEtJUExvY2FsTUlDRmFpbHVyZXMrKzsKICAgICAgICAgICAgICAgICBpZiAoYkRlRnJhZ1J4KSB7CkBAIC04NTgsNyArODM4LDcgQEAKICAgICAgICAgICAgICAgIC8vMjAwOC0wNDA5LTA3LCA8QWRkPiBieSBFaW5zbiBMaXUKICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAogCQkJCS8vc2VuZCBldmVudCB0byB3cGFfc3VwcGxpY2FudAotCQkJCS8vaWYocERldmljZS0+YldQQURldkVuYWJsZSA9PSBUUlVFKQorCQkJCS8vaWYocERldmljZS0+YldQQURldkVuYWJsZSA9PSB0cnVlKQogCQkJCXsKIAkJCQkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCQkJCQlzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgZXY7CkBAIC05MDYsNyArODg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNrYiA9IGRldl9hbGxvY19za2IoKGludClwRGV2aWNlLT5yeF9idWZfc3opOwogICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MTcsMTMgKzg5NywxMyBAQAogICAgIGlmICgocEtleSAhPSBOVUxMKSAmJiAoKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9DQ01QKSkpIHsKICAgICAgICAgaWYgKGJJc1dFUCkgewotICAgICAgICAgICAgV09SRCAgICAgICAgd0xvY2FsVFNDMTVfMCA9IDA7Ci0gICAgICAgICAgICBEV09SRCAgICAgICBkd0xvY2FsVFNDNDdfMTYgPSAwOwotICAgICAgICAgICAgVUxPTkdMT05HICAgICAgIFJTQyA9IDA7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB3TG9jYWxUU0MxNV8wID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZHdMb2NhbFRTQzQ3XzE2ID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgICBSU0MgPSAwOwogICAgICAgICAgICAgLy8gZW5kaWFuIGlzc3VlcwotICAgICAgICAgICAgUlNDID0gKigoVUxPTkdMT05HICopICYocEtleS0+S2V5UlNDKSk7Ci0gICAgICAgICAgICB3TG9jYWxUU0MxNV8wID0gKFdPUkQpIFJTQzsKLSAgICAgICAgICAgIGR3TG9jYWxUU0M0N18xNiA9IChEV09SRCkgKFJTQz4+MTYpOworICAgICAgICAgICAgUlNDID0gKigodW5zaWduZWQgbG9uZyBsb25nICopICYocEtleS0+S2V5UlNDKSk7CisgICAgICAgICAgICB3TG9jYWxUU0MxNV8wID0gKHVuc2lnbmVkIHNob3J0KSBSU0M7CisgICAgICAgICAgICBkd0xvY2FsVFNDNDdfMTYgPSAodW5zaWduZWQgbG9uZykgKFJTQz4+MTYpOwogCiAgICAgICAgICAgICBSU0MgPSBkd1J4VFNDNDdfMTY7CiAgICAgICAgICAgICBSU0MgPDw9IDE2OwpAQCAtOTUwLDcgKzkzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05NjMsMTMgKzk0MywxMyBAQAogICAgIH0KIAogCi0gICAgc192UHJvY2Vzc1J4TUFDSGVhZGVyKHBEZXZpY2UsIChQQllURSkoc2tiLT5kYXRhKzQpLCBGcmFtZVNpemUsIGJJc1dFUCwgYkV4dElWLCAmY2JIZWFkZXJPZmZzZXQpOworICAgIHNfdlByb2Nlc3NSeE1BQ0hlYWRlcihwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGErNCksIEZyYW1lU2l6ZSwgYklzV0VQLCBiRXh0SVYsICZjYkhlYWRlck9mZnNldCk7CiAgICAgRnJhbWVTaXplIC09IGNiSGVhZGVyT2Zmc2V0OwogICAgIGNiSGVhZGVyT2Zmc2V0ICs9IDQ7ICAgICAgICAvLyA0IGlzIFJjdiBidWZmZXIgaGVhZGVyCiAKICAgICAvLyBOdWxsIGRhdGEsIGZyYW1lc2l6ZSA9IDE0CiAgICAgaWYgKEZyYW1lU2l6ZSA8IDE1KQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKICAgICAgICAgaWYgKHNfYkFQTW9kZVJ4RGF0YShwRGV2aWNlLApAQCAtOTc4LDcgKzk1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JIZWFkZXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaVNBTm9kZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlEQU5vZGVJbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApID09IGZhbHNlKSB7CiAKICAgICAgICAgICAgIGlmIChiRGVGcmFnUngpIHsKICAgICAgICAgICAgICAgICBpZiAoIWRldmljZV9hbGxvY19mcmFnX2J1ZihwRGV2aWNlLCAmcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdKSkgewpAQCAtOTg2LDEwICs5NjYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotLy8gICAgICAgIGlmKHBEZXZpY2UtPmJSeE1JQ0ZhaWwgPT0gRkFMU0UpIHsKKy8vICAgICAgICBpZihwRGV2aWNlLT5iUnhNSUNGYWlsID09IGZhbHNlKSB7CiAvLyAgICAgICAgICAgZm9yIChpaSA9MDsgaWkgPCAxMDA7IGlpKyspCiAvLyAgICAgICAgICAgICAgICBwcmludGsoIiAlMDJ4IiwgKihza2ItPmRhdGEgKyBpaSkpOwogLy8gICAgICAgICAgIHByaW50aygiXG4iKTsKQEAgLTEwMTYsNyArOTk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAqLwpAQCAtMTAzMSwxNyArMTAxMSwxNyBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfRVJSLEtFUk5fRVJSICIlczogY2FuIG5vdCBhbGxvYyBtb3JlIGZyYWcgYnVmc1xuIiwKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5kZXYtPm5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAKLXN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4Q3RsICgKK3N0YXRpYyBib29sIHNfYkFQTW9kZVJ4Q3RsICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFBCWVRFICAgIHBieUZyYW1lLAotICAgIElOVCAgICAgIGlTQU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUZyYW1lLAorICAgIGludCAgICAgIGlTQU5vZGVJbmRleAogICAgICkKIHsKICAgICBQUzgwMl8xMUhlYWRlciAgICAgIHA4MDJfMTFIZWFkZXI7CkBAIC0xMDYzLDMwICsxMDQzLDMwIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHJlYXNvbiA9ICg2KSBjbGFzcyAyIHJlY2VpdmVkIGZyb20gbm9uYXV0aCBzdGEKICAgICAgICAgICAgICAgICAgICAgdk1nckRlQXV0aGVuQmVnaW5TdGEocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSkocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKShwODAyXzExSGVhZGVyLT5hYnlBZGRyMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXTEFOX01HTVRfUkVBU09OX0NMQVNTMl9OT05BVVRIKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IHNlbmQgdk1nckRlQXV0aGVuQmVnaW5TdGEgMVxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uZU5vZGVTdGF0ZSA8IE5PREVfQVNTT0MpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gc2VuZCBkZWFzc29jIG5vdGlmaWNhdGlvbgogICAgICAgICAgICAgICAgICAgICAvLyByZWFzb24gPSAoNykgY2xhc3MgMyByZWNlaXZlZCBmcm9tIG5vbmFzc29jIHN0YQogICAgICAgICAgICAgICAgICAgICB2TWdyRGlzYXNzb2NCZWdpblN0YShwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKShwODAyXzExSGVhZGVyLT5hYnlBZGRyMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopKHA4MDJfMTFIZWFkZXItPmFieUFkZHIyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MzX05PTkFTU09DKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkcGM6IHNlbmQgdk1nckRpc2Fzc29jQmVnaW5TdGEgMlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZGVsY2FyZSByZWNlaXZlZCBwcy1wb2xsIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgIGlmIChJU19DVExfUFNQT0xMKHBieUZyYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJSeFBTUG9sbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlJ4UFNQb2xsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9SWF9QU1BPTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBXTEFOX0NNRF9SWF9QU1BPTEwgMVxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEwOTQsOCArMTA3NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBEYXRhIFBTIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBQVyBiaXQgb2ZmLCBzZW5kIG91dCBhbGwgUFMgYnVmZmVycmluZyBwYWNrZXRzLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJU19GQ19QT1dFUk1HVChwYnlGcmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJSeFBTUG9sbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUnhQU1BvbGwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKilwRGV2aWNlLCBXTEFOX0NNRF9SWF9QU1BPTEwsIE5VTEwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzogV0xBTl9DTURfUlhfUFNQT0xMIDJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTEwMywxNSArMTA4MywxNSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoSVNfRkNfUE9XRVJNR1QocGJ5RnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS5iUFNFbmFibGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlBTRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25jZSBpZiBTVEEgaW4gUFMgc3RhdGUsIGVuYWJsZSBtdWx0aWNhc3QgYnVmZmVycmluZwotICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgYWxsIHBlbmRpbmcgUFMgZnJhbWUuCiAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaVNBTm9kZUluZGV4XS53RW5RdWV1ZUNudCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlJ4UFNQb2xsID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpU0FOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lTQU5vZGVJbmRleF0uYlJ4UFNQb2xsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgYlNjaGVkdWxlQ29tbWFuZCgodm9pZCAqKXBEZXZpY2UsIFdMQU5fQ01EX1JYX1BTUE9MTCwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiBXTEFOX0NNRF9SWF9QU1BPTEwgM1xuIik7CiAKQEAgLTExMjIsNyArMTEwMiw3IEBACiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgIHZNZ3JEZUF1dGhlbkJlZ2luU3RhKHBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQQllURSkocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKikocDgwMl8xMUhlYWRlci0+YWJ5QWRkcjIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdMQU5fTUdNVF9SRUFTT05fQ0xBU1MyX05PTkFVVEgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKQEAgLTExNTQsMzEgKzExMzQsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZHBjOiB3RnJhbWVDdGw9ICV4XG4iLCBwODAyXzExSGVhZGVyLT53RnJhbWVDdGwgKTsKICAgICAgICAgICAgICAgICAgICAgVk5TdkluUG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfUkNSLCAmKHBEZXZpY2UtPmJ5UnhNb2RlKSk7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRwYzpwRGV2aWNlLT5ieVJ4TW9kZSA9ICV4XG4iLCBwRGV2aWNlLT5ieVJ4TW9kZSApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIHJldHVybiBmYWxzZTsKIAogfQogCi1zdGF0aWMgQk9PTCBzX2JIYW5kbGVSeEVuY3J5cHRpb24gKAorc3RhdGljIGJvb2wgc19iSGFuZGxlUnhFbmNyeXB0aW9uICgKICAgICBQU0RldmljZSAgICAgcERldmljZSwKLSAgICBQQllURSAgICAgICAgcGJ5RnJhbWUsCi0gICAgVUlOVCAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICBQQllURSAgICAgICAgcGJ5UnNyLAotICAgIFBCWVRFICAgICAgIHBieU5ld1JzciwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlGcmFtZSwKKyAgICB1bnNpZ25lZCBpbnQgRnJhbWVTaXplLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJzciwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlOZXdSc3IsCiAgICAgUFNLZXlJdGVtICAgKnBLZXlPdXQsCi0gICAgaW50ICogICAgICAgcGJFeHRJViwKLSAgICBQV09SRCAgICAgICBwd1J4VFNDMTVfMCwKLSAgICBQRFdPUkQgICAgICBwZHdSeFRTQzQ3XzE2CisgICAgYm9vbCAqcGJFeHRJViwKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdSeFRTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyAqcGR3UnhUU0M0N18xNgogICAgICkKIHsKLSAgICBVSU5UICAgICAgICAgICAgUGF5bG9hZExlbiA9IEZyYW1lU2l6ZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5SVY7Ci0gICAgQllURSAgICAgICAgICAgIGJ5S2V5SWR4OworICAgIHVuc2lnbmVkIGludCBQYXlsb2FkTGVuID0gRnJhbWVTaXplOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJZHg7CiAgICAgUFNLZXlJdGVtICAgICAgIHBLZXkgPSBOVUxMOwotICAgIEJZVEUgICAgICAgICAgICBieURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogCiAKQEAgLTExODYsOCArMTE2Niw4IEBACiAgICAgKnBkd1J4VFNDNDdfMTYgPSAwOwogCiAgICAgcGJ5SVYgPSBwYnlGcmFtZSArIFdMQU5fSERSX0FERFIzX0xFTjsKLSAgICBpZiAoIFdMQU5fR0VUX0ZDX1RPRFMoKihQV09SRClwYnlGcmFtZSkgJiYKLSAgICAgICAgIFdMQU5fR0VUX0ZDX0ZST01EUygqKFBXT1JEKXBieUZyYW1lKSApIHsKKyAgICBpZiAoIFdMQU5fR0VUX0ZDX1RPRFMoKih1bnNpZ25lZCBzaG9ydCAqKXBieUZyYW1lKSAmJgorICAgICAgICAgV0xBTl9HRVRfRkNfRlJPTURTKCoodW5zaWduZWQgc2hvcnQgKilwYnlGcmFtZSkgKSB7CiAgICAgICAgICBwYnlJViArPSA2OyAgICAgICAgICAgICAvLyA2IGlzIDgwMi4xMSBhZGRyZXNzNAogICAgICAgICAgUGF5bG9hZExlbiAtPSA2OwogICAgIH0KQEAgLTEyMDQsNyArMTE4NCw3IEBACiAgICAgICAgICAgICAocERldmljZS0+cE1nbXQtPmJ5Q1NTUEsgIT0gS0VZX0NUTF9OT05FKSkgewogICAgICAgICAgICAgLy8gdW5pY2FzdCBwa3QgdXNlIHBhaXJ3aXNlIGtleQogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ1bmljYXN0IHBrdFxuIik7Ci0gICAgICAgICAgICBpZiAoS2V5YkdldEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgMHhGRkZGRkZGRiwgJnBLZXkpID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChLZXliR2V0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJTU0lELCAweEZGRkZGRkZGLCAmcEtleSkgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5wTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX1RLSVApCiAgICAgICAgICAgICAgICAgICAgIGJ5RGVjTW9kZSA9IEtFWV9DVExfVEtJUDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChwRGV2aWNlLT5wTWdtdC0+YnlDU1NQSyA9PSBLRVlfQ1RMX0NDTVApCkBAIC0xMjM4LDI0ICsxMjE4LDI0IEBACiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icEtleSA9PSBOVUxMXG4iKTsKICAgICAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCkgewogLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5XRVBVbmRlY3J5cHRhYmxlQ291bnQuUXVhZFBhcnQrKzsKLSAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgeworICAgICAgICB9IGVsc2UgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSB7CiAvLyAgICAgICAgICAgIHBEZXZpY2UtPnM4MDJfMTFDb3VudGVyLkRlY3J5cHRGYWlsdXJlQ291bnQuUXVhZFBhcnQrKzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGJ5RGVjTW9kZSAhPSBwS2V5LT5ieUNpcGhlclN1aXRlKSB7CiAgICAgICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9XRVApIHsKIC8vICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuV0VQVW5kZWNyeXB0YWJsZUNvdW50LlF1YWRQYXJ0Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgewogLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7CiAgICAgICAgIH0KICAgICAgICAgKnBLZXlPdXQgPSBOVUxMOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCkgewogICAgICAgICAvLyBoYW5kbGUgV0VQCiAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpIHx8Ci0gICAgICAgICAgICAoKChQU0tleVRhYmxlKShwS2V5LT5wdktleVRhYmxlKSktPmJTb2Z0V0VQID09IFRSVUUpKSB7CisgICAgICAgICAgICAoKChQU0tleVRhYmxlKShwS2V5LT5wdktleVRhYmxlKSktPmJTb2Z0V0VQID09IHRydWUpKSB7CiAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBXRVAKICAgICAgICAgICAgIC8vIDEuIDMyNTNBCiAgICAgICAgICAgICAvLyAyLiBXRVAgMjU2CkBAIC0xMjc1LDEyICsxMjU1LDEyIEBACiAgICAgICAgIC8vIFRLSVAvQUVTCiAKICAgICAgICAgUGF5bG9hZExlbiAtPSAoV0xBTl9IRFJfQUREUjNfTEVOICsgOCArIDQpOyAvLyAyNCBpcyA4MDIuMTEgaGVhZGVyLCA4IGlzIElWJkV4dElWLCA0IGlzIGNyYwotICAgICAgICAqcGR3UnhUU0M0N18xNiA9IGNwdV90b19sZTMyKCooUERXT1JEKShwYnlJViArIDQpKTsKKyAgICAgICAgKnBkd1J4VFNDNDdfMTYgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGxvbmcgKikocGJ5SVYgKyA0KSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRXh0SVY6ICVseFxuIiwqcGR3UnhUU0M0N18xNik7CiAgICAgICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9US0lQKSB7CiAgICAgICAgICAgICAqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNihNQUtFV09SRCgqKHBieUlWKzIpLCAqcGJ5SVYpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KCooUFdPUkQpcGJ5SVYpOworICAgICAgICAgICAgKnB3UnhUU0MxNV8wID0gY3B1X3RvX2xlMTYoKih1bnNpZ25lZCBzaG9ydCAqKXBieUlWKTsKICAgICAgICAgfQogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlRTQzBfMTU6ICV4XG4iLCAqcHdSeFRTQzE1XzApOwogCkBAIC0xMzAzLDI4ICsxMjgzLDI4IEBACiAgICAgfS8vIGVuZCBvZiBUS0lQL0FFUwogCiAgICAgaWYgKCgqKHBieUlWKzMpICYgMHgyMCkgIT0gMCkKLSAgICAgICAgKnBiRXh0SVYgPSBUUlVFOwotICAgIHJldHVybiBUUlVFOworICAgICAgICAqcGJFeHRJViA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIAotc3RhdGljIEJPT0wgc19iSG9zdFdlcFJ4RW5jcnlwdGlvbiAoCitzdGF0aWMgYm9vbCBzX2JIb3N0V2VwUnhFbmNyeXB0aW9uICgKICAgICBQU0RldmljZSAgICAgcERldmljZSwKLSAgICBQQllURSAgICAgICAgcGJ5RnJhbWUsCi0gICAgVUlOVCAgICAgICAgIEZyYW1lU2l6ZSwKLSAgICBQQllURSAgICAgICAgcGJ5UnNyLAotICAgIEJPT0wgICAgICAgICBiT25GbHksCisgICAgdW5zaWduZWQgY2hhciAqcGJ5RnJhbWUsCisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSc3IsCisgICAgYm9vbCBiT25GbHksCiAgICAgUFNLZXlJdGVtICAgIHBLZXksCi0gICAgUEJZVEUgICAgICAgcGJ5TmV3UnNyLAotICAgIGludCAqICAgICAgIHBiRXh0SVYsCi0gICAgUFdPUkQgICAgICAgcHdSeFRTQzE1XzAsCi0gICAgUERXT1JEICAgICAgcGR3UnhUU0M0N18xNgorICAgIHVuc2lnbmVkIGNoYXIgKnBieU5ld1JzciwKKyAgICBib29sICpwYkV4dElWLAorICAgIHVuc2lnbmVkIHNob3J0ICpwd1J4VFNDMTVfMCwKKyAgICB1bnNpZ25lZCBsb25nICpwZHdSeFRTQzQ3XzE2CiAgICAgKQogewotICAgIFVJTlQgICAgICAgICAgICBQYXlsb2FkTGVuID0gRnJhbWVTaXplOwotICAgIFBCWVRFICAgICAgICAgICBwYnlJVjsKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlJZHg7Ci0gICAgQllURSAgICAgICAgICAgIGJ5RGVjTW9kZSA9IEtFWV9DVExfV0VQOworICAgIHVuc2lnbmVkIGludCBQYXlsb2FkTGVuID0gRnJhbWVTaXplOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJZHg7CisgICAgdW5zaWduZWQgY2hhciBieURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKICAgICBQUzgwMl8xMUhlYWRlciAgcE1BQ0hlYWRlcjsKIAogCkBAIC0xMzMzLDggKzEzMTMsOCBAQAogICAgICpwZHdSeFRTQzQ3XzE2ID0gMDsKIAogICAgIHBieUlWID0gcGJ5RnJhbWUgKyBXTEFOX0hEUl9BRERSM19MRU47Ci0gICAgaWYgKCBXTEFOX0dFVF9GQ19UT0RTKCooUFdPUkQpcGJ5RnJhbWUpICYmCi0gICAgICAgICBXTEFOX0dFVF9GQ19GUk9NRFMoKihQV09SRClwYnlGcmFtZSkgKSB7CisgICAgaWYgKCBXTEFOX0dFVF9GQ19UT0RTKCoodW5zaWduZWQgc2hvcnQgKilwYnlGcmFtZSkgJiYKKyAgICAgICAgIFdMQU5fR0VUX0ZDX0ZST01EUygqKHVuc2lnbmVkIHNob3J0ICopcGJ5RnJhbWUpICkgewogICAgICAgICAgcGJ5SVYgKz0gNjsgICAgICAgICAgICAgLy8gNiBpcyA4MDIuMTEgYWRkcmVzczQKICAgICAgICAgIFBheWxvYWRMZW4gLT0gNjsKICAgICB9CkBAIC0xMzUzLDE4ICsxMzMzLDE4IEBACiAgICAgaWYgKGJ5RGVjTW9kZSAhPSBwS2V5LT5ieUNpcGhlclN1aXRlKSB7CiAgICAgICAgIGlmIChieURlY01vZGUgPT0gS0VZX0NUTF9XRVApIHsKIC8vICAgICAgICAgICAgcERldmljZS0+czgwMl8xMUNvdW50ZXIuV0VQVW5kZWNyeXB0YWJsZUNvdW50LlF1YWRQYXJ0Kys7Ci0gICAgICAgIH0gZWxzZSBpZiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgewogLy8gICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5EZWNyeXB0RmFpbHVyZUNvdW50LlF1YWRQYXJ0Kys7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGJ5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCkgewogICAgICAgICAvLyBoYW5kbGUgV0VQCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iYnlEZWNNb2RlID09IEtFWV9DVExfV0VQIFxuIik7CiAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpIHx8Ci0gICAgICAgICAgICAoKChQU0tleVRhYmxlKShwS2V5LT5wdktleVRhYmxlKSktPmJTb2Z0V0VQID09IFRSVUUpIHx8Ci0gICAgICAgICAgICAoYk9uRmx5ID09IEZBTFNFKSkgeworICAgICAgICAgICAgKCgoUFNLZXlUYWJsZSkocEtleS0+cHZLZXlUYWJsZSkpLT5iU29mdFdFUCA9PSB0cnVlKSB8fAorICAgICAgICAgICAgKGJPbkZseSA9PSBmYWxzZSkpIHsKICAgICAgICAgICAgIC8vIFNvZnR3YXJlIFdFUAogICAgICAgICAgICAgLy8gMS4gMzI1M0EKICAgICAgICAgICAgIC8vIDIuIFdFUCAyNTYKQEAgLTEzODUsMTkgKzEzNjUsMTkgQEAKICAgICAgICAgLy8gVEtJUC9BRVMKIAogICAgICAgICBQYXlsb2FkTGVuIC09IChXTEFOX0hEUl9BRERSM19MRU4gKyA4ICsgNCk7IC8vIDI0IGlzIDgwMi4xMSBoZWFkZXIsIDggaXMgSVYmRXh0SVYsIDQgaXMgY3JjCi0gICAgICAgICpwZHdSeFRTQzQ3XzE2ID0gY3B1X3RvX2xlMzIoKihQRFdPUkQpKHBieUlWICsgNCkpOworICAgICAgICAqcGR3UnhUU0M0N18xNiA9IGNwdV90b19sZTMyKCoodW5zaWduZWQgbG9uZyAqKShwYnlJViArIDQpKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJFeHRJVjogJWx4XG4iLCpwZHdSeFRTQzQ3XzE2KTsKIAogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgewogICAgICAgICAgICAgKnB3UnhUU0MxNV8wID0gY3B1X3RvX2xlMTYoTUFLRVdPUkQoKihwYnlJVisyKSwgKnBieUlWKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqcHdSeFRTQzE1XzAgPSBjcHVfdG9fbGUxNigqKFBXT1JEKXBieUlWKTsKKyAgICAgICAgICAgICpwd1J4VFNDMTVfMCA9IGNwdV90b19sZTE2KCoodW5zaWduZWQgc2hvcnQgKilwYnlJVik7CiAgICAgICAgIH0KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJUU0MwXzE1OiAleFxuIiwgKnB3UnhUU0MxNV8wKTsKIAogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfVEtJUCkgewogCi0gICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSB8fCAoYk9uRmx5ID09IEZBTFNFKSkgeworICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkgfHwgKGJPbkZseSA9PSBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBUS0lQCiAgICAgICAgICAgICAgICAgLy8gMS4gMzI1MyBBCiAgICAgICAgICAgICAgICAgLy8gMi4gTm90T25GbHkKQEAgLTE0MTcsNyArMTM5Nyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYnlEZWNNb2RlID09IEtFWV9DVExfQ0NNUCkgewotICAgICAgICAgICAgaWYgKGJPbkZseSA9PSBGQUxTRSkgeworICAgICAgICAgICAgaWYgKGJPbkZseSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgIC8vIFNvZnR3YXJlIENDTVAKICAgICAgICAgICAgICAgICAvLyBOb3RPbkZseQogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8ic29mdCBLRVlfQ1RMX0NDTVBcbiIpOwpAQCAtMTQzMywzNCArMTQxMywzNCBAQAogICAgIH0vLyBlbmQgb2YgVEtJUC9BRVMKIAogICAgIGlmICgoKihwYnlJViszKSAmIDB4MjApICE9IDApCi0gICAgICAgICpwYkV4dElWID0gVFJVRTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgKnBiRXh0SVYgPSB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiAKIAotc3RhdGljIEJPT0wgc19iQVBNb2RlUnhEYXRhICgKK3N0YXRpYyBib29sIHNfYkFQTW9kZVJ4RGF0YSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiLAotICAgIFVJTlQgICAgIEZyYW1lU2l6ZSwKLSAgICBVSU5UICAgICBjYkhlYWRlck9mZnNldCwKLSAgICBJTlQgICAgICBpU0FOb2RlSW5kZXgsCi0gICAgSU5UICAgICAgaURBTm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IEZyYW1lU2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJPZmZzZXQsCisgICAgaW50ICAgICAgaVNBTm9kZUluZGV4LAorICAgIGludCAgICAgIGlEQU5vZGVJbmRleAogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiUmVsYXlBbmRGb3J3YXJkID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiUmVsYXlPbmx5ID0gRkFMU0U7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3QUlEOworICAgIGJvb2wgYlJlbGF5QW5kRm9yd2FyZCA9IGZhbHNlOworICAgIGJvb2wgYlJlbGF5T25seSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OworICAgIHVuc2lnbmVkIHNob3J0IHdBSUQ7CiAKIAogICAgIHN0cnVjdCBza19idWZmKiBza2JjcHkgPSBOVUxMOwogCiAgICAgaWYgKEZyYW1lU2l6ZSA+IENCX01BWF9CVUZfU0laRSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gY2hlY2sgREEKLSAgICBpZihJU19NVUxUSUNBU1RfQUREUkVTUygoUEJZVEUpKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCkpKSB7CisgICAgaWYoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5kYXRhK2NiSGVhZGVyT2Zmc2V0KSkpIHsKICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUFNFbmFibGUpIHsKIAogICAgICAgICAgICBza2JjcHkgPSBkZXZfYWxsb2Nfc2tiKChpbnQpcERldmljZS0+cnhfYnVmX3N6KTsKQEAgLTE0ODEsMTIgKzE0NjEsMTIgQEAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgYlJlbGF5QW5kRm9yd2FyZCA9IFRSVUU7CisgICAgICAgICAgIGJSZWxheUFuZEZvcndhcmQgPSB0cnVlOwogICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIGNoZWNrIGlmIHJlbGF5Ci0gICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCAoUEJZVEUpKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCksICZpREFOb2RlSW5kZXgpKSB7CisgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCAodW5zaWduZWQgY2hhciAqKShza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQpLCAmaURBTm9kZUluZGV4KSkgewogICAgICAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaURBTm9kZUluZGV4XS5lTm9kZVN0YXRlID49IE5PREVfQVNTT0MpIHsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVtpREFOb2RlSW5kZXhdLmJQU0VuYWJsZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBxdWV1ZSB0aGlzIHNrYiB1bnRpbCBuZXh0IFBTIHR4LCBhbmQgdGhlbiByZWxlYXNlLgpAQCAtMTUwMCwxMCArMTQ4MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5UFNUeE1hcFt3QUlEID4+IDNdIHw9ICBieU1hc2tbd0FJRCAmIDddOwogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyZWxheTogaW5kZXg9ICVkLCBwTWdtdC0+YWJ5UFNUeE1hcFslZF09ICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlEQU5vZGVJbmRleCwgKHdBSUQgPj4gMyksIHBNZ210LT5hYnlQU1R4TWFwW3dBSUQgPj4gM10pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBiUmVsYXlPbmx5ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYlJlbGF5T25seSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTUxNSwxNiArMTQ5NSwxNiBAQAogICAgICAgICAgICAgaURBTm9kZUluZGV4ID0gMDsKIAogICAgICAgICBpZiAoKHBEZXZpY2UtPnVBc3NvY0NvdW50ID4gMSkgJiYgKGlEQU5vZGVJbmRleCA+PSAwKSkgewotICAgICAgICAgICAgUk9VVEViUmVsYXkocERldmljZSwgKFBCWVRFKShza2ItPmRhdGEgKyBjYkhlYWRlck9mZnNldCksIEZyYW1lU2l6ZSwgKFVJTlQpaURBTm9kZUluZGV4KTsKKyAgICAgICAgICAgIFJPVVRFYlJlbGF5KHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyICopKHNrYi0+ZGF0YSArIGNiSGVhZGVyT2Zmc2V0KSwgRnJhbWVTaXplLCAodW5zaWduZWQgaW50KWlEQU5vZGVJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYlJlbGF5T25seSkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gbm9uZSBhc3NvY2lhdGUsIGRvbid0IGZvcndhcmQKICAgICBpZiAocERldmljZS0+dUFzc29jQ291bnQgPT0gMCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZHBjLmgKaW5kZXggZTU3NDk2My4uYzFiNmU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kcGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RwYy5oCkBAIC00MSw3ICs0MSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLUJPT0wKK2Jvb2wKIGRldmljZV9yZWNlaXZlX2ZyYW1lICgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTUnhEZXNjIHBDdXJyUkQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaG9zdGFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2hvc3RhcC5jCmluZGV4IDE5NWNjMzYuLjViODNmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaG9zdGFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9ob3N0YXAuYwpAQCAtMTU0LDkgKzE1NCw5IEBACiAJfQogCWtmcmVlKHBEZXZpY2UtPmFwZGV2KTsKIAlwRGV2aWNlLT5hcGRldiA9IE5VTEw7Ci0gICAgcERldmljZS0+YkVuYWJsZTgwMjF4ID0gRkFMU0U7Ci0gICAgcERldmljZS0+YkVuYWJsZUhvc3RXRVAgPSBGQUxTRTsKLSAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IGZhbHNlOworICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gZmFsc2U7CisgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBmYWxzZTsKIAogLy80LjIwMDctMDExOC0wMyw8QWRkPiBieSBFaW5zbkxpdQogLy9leGVjdXRlIHNvbWUgY2xlYXIgd29yawpAQCAtMjE1LDcgKzIxNSw3IEBACiBzdGF0aWMgaW50IGhvc3RhcF9yZW1vdmVfc3RhKFBTRGV2aWNlIHBEZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKLQlVSU5UIHVOb2RlSW5kZXg7CisJdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAKIAogICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBEZXZpY2UtPnBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgewpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCQkJICBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlVSU5UIHVOb2RlSW5kZXg7CisJdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAKIAogICAgIGlmICghQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8gPSBwYXJhbS0+dS5hZGRfc3RhLmNhcGFiaWxpdHk7CiAvLyBUT0RPIGxpc3RlbkludGVydmFsCiAvLyAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndMaXN0ZW5JbnRlcnZhbCA9IDE7Ci0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUgPSBGQUxTRTsKKyAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJQU0VuYWJsZSA9IGZhbHNlOwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYnlTdXBwUmF0ZSA9IHBhcmFtLT51LmFkZF9zdGEudHhfc3VwcF9yYXRlczsKIAogICAgIC8vIHNldCBtYXggdHggcmF0ZQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9CiAgICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8pOwogCi0gICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKFdPUkQpcGFyYW0tPnUuYWRkX3N0YS5haWQ7CisgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53QUlEID0gKHVuc2lnbmVkIHNob3J0KXBhcmFtLT51LmFkZF9zdGEuYWlkOwogCiAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51bExhc3RSeEppZmZlciA9IGppZmZpZXM7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgdmlhd2dldF9ob3N0YXBkX3BhcmFtICpwYXJhbSkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLQlVSU5UIHVOb2RlSW5kZXg7CisJdW5zaWduZWQgaW50IHVOb2RlSW5kZXg7CiAKICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmdU5vZGVJbmRleCkpIHsKIAkgICAgcGFyYW0tPnUuZ2V0X2luZm9fc3RhLmluYWN0aXZlX3NlYyA9CkBAIC0zMjgsNyArMzI4LDcgQEAKICAqICAgICAgcERldmljZSAgIC0KICAqICAgICAgcGFyYW0gICAgIC0KICAqICBPdXQ6Ci0gKiAgICAgIFRVUkUsIEZBTFNFCisgKiAgICAgIHRydWUsIGZhbHNlCiAgKgogICogUmV0dXJuIFZhbHVlOgogICoKQEAgLTMzOCw3ICszMzgsNyBAQAogCQkJCQkgIHN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotCVVJTlQgdU5vZGVJbmRleDsKKwl1bnNpZ25lZCBpbnQgdU5vZGVJbmRleDsKIAogICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgewogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEF0dGVtcHRzID0gMDsKQEAgLTM2OCwxMyArMzY4LDEzIEBACiAJCQkJCXN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gKnBhcmFtKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotCVVJTlQgdU5vZGVJbmRleDsKKwl1bnNpZ25lZCBpbnQgdU5vZGVJbmRleDsKIAogICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZ1Tm9kZUluZGV4KSkgewogCQlwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3RmxhZ3MgfD0gcGFyYW0tPnUuc2V0X2ZsYWdzX3N0YS5mbGFnc19vcjsKIAkJcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0ZsYWdzICY9IHBhcmFtLT51LnNldF9mbGFnc19zdGEuZmxhZ3NfYW5kOwogCQlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgZHdGbGFncyA9ICV4IFxuIiwKLQkJICAgICAgICAgICAgKFVJTlQpcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd0ZsYWdzKTsKKwkJICAgICAgICAgICAgKHVuc2lnbmVkIGludClwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3RmxhZ3MpOwogCX0KIAllbHNlIHsKIAkgICAgcmV0dXJuIC1FTk9FTlQ7CkBAIC00NzEsMTYgKzQ3MSwxNiBAQAogCQkJCSAgICAgICBpbnQgcGFyYW1fbGVuKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIERXT1JEICAgZHdLZXlJbmRleCA9IDA7Ci0gICAgQllURSAgICBhYnlLZXlbTUFYX0tFWV9MRU5dOwotICAgIEJZVEUgICAgYWJ5U2VxW01BWF9LRVlfTEVOXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXggPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5S2V5W01BWF9LRVlfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNlcVtNQVhfS0VZX0xFTl07CiAgICAgTkRJU184MDJfMTFfS0VZX1JTQyAgIEtleVJTQzsKLSAgICBCWVRFICAgIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlID0gS0VZX0NUTF9XRVA7CiAJaW50ICAgICByZXQgPSAwOwogCWludCAgICAgaU5vZGVJbmRleCA9IC0xOwogCWludCAgICAgaWk7Ci0JQk9PTCAgICBiS2V5VGFibGVGdWxsID0gRkFMU0U7Ci0JV09SRCAgICB3S2V5Q3RsID0gMDsKKwlib29sIGJLZXlUYWJsZUZ1bGwgPSBmYWxzZTsKKwl1bnNpZ25lZCBzaG9ydCB3S2V5Q3RsID0gMDsKIAogCiAJcGFyYW0tPnUuY3J5cHQuZXJyID0gMDsKQEAgLTUwOSw3ICs1MDksNyBAQAogICAgICAgICBpTm9kZUluZGV4ID0gMDsKIAogCX0gZWxzZSB7Ci0JICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBNZ210LCBwYXJhbS0+c3RhX2FkZHIsICZpTm9kZUluZGV4KSA9PSBGQUxTRSkgeworCSAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmaU5vZGVJbmRleCkgPT0gZmFsc2UpIHsKIAkgICAgICAgIHBhcmFtLT51LmNyeXB0LmVyciA9IEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIEhPU1RBUF9DUllQVF9FUlJfVU5LTk9XTl9BRERSXG4iKTsKIAkgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtNTIwLDE0ICs1MjAsMTQgQEAKIAogCWlmIChwYXJhbS0+dS5jcnlwdC5hbGcgPT0gV1BBX0FMR19OT05FKSB7CiAKLSAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID09IHRydWUpIHsKICAgICAgICAgICAgIGlmIChLZXliUmVtb3ZlS2V5KCYocERldmljZS0+c0tleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5zdGFfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5kd0tleUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0KSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIktleWJSZW1vdmVLZXkgZmFpbCBcbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBGQUxTRTsKKyAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYk9uRmx5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUtleUluZGV4ID0gMDsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5kd0tleUluZGV4ID0gMDsKQEAgLTU1MywxNiArNTUzLDE2IEBACiAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuCiAgICAgICAgICAgICk7CiAKLSAgICBkd0tleUluZGV4ID0gKERXT1JEKShwYXJhbS0+dS5jcnlwdC5pZHgpOworICAgIGR3S2V5SW5kZXggPSAodW5zaWduZWQgbG9uZykocGFyYW0tPnUuY3J5cHQuaWR4KTsKICAgICBpZiAocGFyYW0tPnUuY3J5cHQuZmxhZ3MgJiBIT1NUQVBfQ1JZUFRfRkxBR19TRVRfVFhfS0VZKSB7Ci0gICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAoQllURSlkd0tleUluZGV4OwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleDsKKyAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gdHJ1ZTsKICAgICAgICAgZHdLZXlJbmRleCB8PSAoMSA8PCAzMSk7CiAgICAgfQogCiAJaWYgKHBhcmFtLT51LmNyeXB0LmFsZyA9PSBXUEFfQUxHX1dFUCkgewogCi0gICAgICAgIGlmICgocERldmljZS0+YkVuYWJsZTgwMjF4ID09IEZBTFNFKSB8fCAoaU5vZGVJbmRleCA9PSAwKSkgeworICAgICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9PSBmYWxzZSkgfHwgKGlOb2RlSW5kZXggPT0gMCkpIHsKICAgICAgICAgICAgIEtleWJTZXREZWZhdWx0S2V5KCYocERldmljZS0+c0tleSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXggJiB+KEJJVDMwIHwgVVNFX0tFWVJTQyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4sCkBAIC01ODAsMjEgKzU4MCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdLZXlJbmRleCAmIH4oVVNFX0tFWVJTQyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS5jcnlwdC5rZXlfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBRV09SRCkgJihLZXlSU0MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYWJ5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9DVExfV0VQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPlBvcnRPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSB0cnVlKSB7CiAKLSAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSB0cnVlOwogCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEtleSBUYWJsZSBGdWxsCi0gICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBiS2V5VGFibGVGdWxsID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJLZXlUYWJsZUZ1bGwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgICAgIHBNZ210LT5ieUNTU1BLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgIHBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uYnlDaXBoZXJTdWl0ZSA9IEtFWV9DVExfV0VQOwpAQCAtNjQwLDcgKzY0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKTsKLSAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lOb2RlSW5kZXhdLmJPbkZseSA9IFRSVUU7CisgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSB0cnVlOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgZHdLZXlJbmRleCB8PSAoMSA8PCAzMCk7IC8vIHNldCBwYWlyd2lzZSBrZXkKQEAgLTY0OSwyMyArNjQ5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT51LmNyeXB0LmtleV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilhYnlLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IHRydWUpIHsKIAotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBUUlVFOworICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSB0cnVlOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBGQUxTRTsKLSAgICAgICAgICAgIGJLZXlUYWJsZUZ1bGwgPSBUUlVFOworICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5iT25GbHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGJLZXlUYWJsZUZ1bGwgPSB0cnVlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIEtleSBUYWJsZSBGdWxsXG4iKTsKICAgICAgICAgfQogCiAgICAgfQogCi0gICAgaWYgKGJLZXlUYWJsZUZ1bGwgPT0gVFJVRSkgeworICAgIGlmIChiS2V5VGFibGVGdWxsID09IHRydWUpIHsKICAgICAgICAgd0tleUN0bCAmPSAweDdGMDA7ICAgICAgICAgICAgICAvLyBjbGVhciBhbGwga2V5IGNvbnRyb2wgZmlsZWQKICAgICAgICAgd0tleUN0bCB8PSAoYnlLZXlEZWNNb2RlIDw8IDQpOwogICAgICAgICB3S2V5Q3RsIHw9IChieUtleURlY01vZGUpOwpAQCAtNjg2LDcgKzY4Niw3IEBACiAgICAgICAgICAgICAgICk7CiAKIAkvLyBzZXQgd2VwIGtleQotICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5ieUNpcGhlclN1aXRlID0gYnlLZXlEZWNNb2RlOwogICAgIHBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7CiAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gMDsKQEAgLTcyNyw3ICs3MjcsNyBAQAogCSAgICBwYXJhbS0+c3RhX2FkZHJbNF0gPT0gMHhmZiAmJiBwYXJhbS0+c3RhX2FkZHJbNV0gPT0gMHhmZikgewogICAgICAgICBpTm9kZUluZGV4ID0gMDsKIAl9IGVsc2UgewotCSAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGFyYW0tPnN0YV9hZGRyLCAmaU5vZGVJbmRleCkgPT0gRkFMU0UpIHsKKwkgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBhcmFtLT5zdGFfYWRkciwgJmlOb2RlSW5kZXgpID09IGZhbHNlKSB7CiAJICAgICAgICBwYXJhbS0+dS5jcnlwdC5lcnIgPSBIT1NUQVBfQ1JZUFRfRVJSX1VOS05PV05fQUREUjsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImhvc3RhcF9nZXRfZW5jcnlwdGlvbjogSE9TVEFQX0NSWVBUX0VSUl9VTktOT1dOX0FERFJcbiIpOwogCSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CkBAIC03MzYsNyArNzM2LDcgQEAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJob3N0YXBfZ2V0X2VuY3J5cHRpb246ICVkXG4iLCBpTm9kZUluZGV4KTsKICAgICBtZW1zZXQocGFyYW0tPnUuY3J5cHQuc2VxLCAwLCA4KTsKICAgICBmb3IgKGlpID0gMCA7IGlpIDwgOCA7IGlpKyspIHsKLSAgICAgICAgcGFyYW0tPnUuY3J5cHQuc2VxW2lpXSA9IChCWVRFKXBNZ210LT5zTm9kZURCVGFibGVbaU5vZGVJbmRleF0uS2V5UlNDID4+IChpaSAqIDgpOworICAgICAgICBwYXJhbS0+dS5jcnlwdC5zZXFbaWldID0gKHVuc2lnbmVkIGNoYXIpcE1nbXQtPnNOb2RlREJUYWJsZVtpTm9kZUluZGV4XS5LZXlSU0MgPj4gKGlpICogOCk7CiAgICAgfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jbWQuaAppbmRleCA2MGMwYTM2Li41M2M1MGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY21kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2NtZC5oCkBAIC0zNyw3ICszNyw2IEBACiAjZGVmaW5lIERFRgogI2VuZGlmCiAKLS8vdHlwZWRlZiBpbnQgQk9PTDsKIC8vdHlwZWRlZiB1aW50MzJfdCB1MzI7CiAvL3R5cGVkZWYgdWludDE2X3QgdTE2OwogLy90eXBlZGVmIHVpbnQ4X3QgdTg7CkBAIC0xMDksMTAgKzEwOCwxMCBAQAogLy8KICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NtZFJlcXVlc3QgewotCVU4IAkgICAgbmFtZVsxNl07CisJdTgJICAgIG5hbWVbMTZdOwogCXZvaWQJKmRhdGE7Ci0JVTE2CSAgICB3UmVzdWx0OwotCVUxNiAgICAgd0NtZENvZGU7CisJdTE2CSAgICB3UmVzdWx0OworCXUxNiAgICAgd0NtZENvZGU7CiB9IFNDbWRSZXF1ZXN0LCAqUFNDbWRSZXF1ZXN0OwogCiAvLwpAQCAtMTIxLDcgKzEyMCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTY2FuIHsKIAotICAgIFU4CSAgICBzc2lkW1NTSURfTUFYTEVOICsgMl07CisJdTggc3NpZFtTU0lEX01BWExFTiArIDJdOwogCiB9IFNDbWRTY2FuLCAqUFNDbWRTY2FuOwogCkBAIC0xMzIsMTIgKzEzMSwxMiBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kQlNTSm9pbiB7CiAKLSAgICBVMTYJICAgIHdCU1NUeXBlOwotICAgIFUxNiAgICAgd0JCUFR5cGU7Ci0gICAgVTgJICAgIHNzaWRbU1NJRF9NQVhMRU4gKyAyXTsKLSAgICBVMzIJICAgIHVDaGFubmVsOwotICAgIEJPT0wgICAgYlBTRW5hYmxlOwotICAgIEJPT0wgICAgYlNoYXJlS2V5QXV0aDsKKyAgICB1MTYJICAgIHdCU1NUeXBlOworICAgIHUxNiAgICAgd0JCUFR5cGU7CisgICAgdTgJICAgIHNzaWRbU1NJRF9NQVhMRU4gKyAyXTsKKyAgICB1MzIJICAgIHVDaGFubmVsOworICAgIGJvb2wgYlBTRW5hYmxlOworICAgIGJvb2wgYlNoYXJlS2V5QXV0aDsKIAogfSBTQ21kQlNTSm9pbiwgKlBTQ21kQlNTSm9pbjsKIApAQCAtMTQ3LDcgKzE0Niw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRab25lVHlwZVNldCB7CiAKLSBCT09MICAgICAgIGJXcml0ZTsKKyBib29sIGJXcml0ZTsKICBXWk9ORVRZUEUgIFpvbmVUeXBlOwogCiB9IFNDbWRab25lVHlwZVNldCwgKlBTQ21kWm9uZVR5cGVTZXQ7CkBAIC0xNTUsMzMgKzE1NCwzMyBAQAogI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiB0eXBlZGVmIHN0cnVjdCB0YWdTV1BBUmVzdWx0IHsKICAgICAgICAgIGNoYXIJaWZuYW1lWzEwMF07Ci0gICAgICAgICBVOAkJcHJvdG87Ci0gICAgICAgICBVOCAgIGtleV9tZ210OwotICAgICAgICAgVTggICBlYXBfdHlwZTsKLSAgICAgICAgIEJPT0wgYXV0aGVudGljYXRlZDsKKyAgICAgICAgIHU4IHByb3RvOworICAgICAgICAgdTgga2V5X21nbXQ7CisgICAgICAgICB1OCBlYXBfdHlwZTsKKyAgICAgICAgIGJvb2wgYXV0aGVudGljYXRlZDsKIH0gU1dQQVJlc3VsdCwgKlBTV1BBUmVzdWx0OwogI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTdGFydEFQIHsKIAotICAgIFUxNgkgICAgd0JTU1R5cGU7Ci0gICAgVTE2ICAgICB3QkJQVHlwZTsKLSAgICBVOAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOwotICAgIFUzMiAJdUNoYW5uZWw7Ci0gICAgVTMyICAgICB1QmVhY29uSW50OwotICAgIEJPT0wgICAgYlNoYXJlS2V5QXV0aDsKLSAgICBVOCAgICAgIGJ5QmFzaWNSYXRlOworICAgIHUxNgkgICAgd0JTU1R5cGU7CisgICAgdTE2ICAgICB3QkJQVHlwZTsKKyAgICB1OAkgICAgc3NpZFtTU0lEX01BWExFTiArIDJdOworICAgIHUzMgkgICAgdUNoYW5uZWw7CisgICAgdTMyICAgICB1QmVhY29uSW50OworICAgIGJvb2wgYlNoYXJlS2V5QXV0aDsKKyAgICB1OCAgICAgIGJ5QmFzaWNSYXRlOwogCiB9IFNDbWRTdGFydEFQLCAqUFNDbWRTdGFydEFQOwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTZXRXRVAgewogCi0gICAgQk9PTCAgICBiRW5hYmxlV2VwOwotICAgIFU4ICAgICAgYnlLZXlJbmRleDsKLSAgICBVOCAgICAgIGFieVdlcEtleVtXRVBfTktFWVNdW1dFUF9LRVlNQVhMRU5dOwotICAgIEJPT0wgICAgYldlcEtleUF2YWlsYWJsZVtXRVBfTktFWVNdOwotICAgIFUzMiAgICAgYXVXZXBLZXlMZW5ndGhbV0VQX05LRVlTXTsKKyAgICBib29sIGJFbmFibGVXZXA7CisgICAgdTggICAgICBieUtleUluZGV4OworICAgIHU4ICAgICAgYWJ5V2VwS2V5W1dFUF9OS0VZU11bV0VQX0tFWU1BWExFTl07CisgICAgYm9vbCBiV2VwS2V5QXZhaWxhYmxlW1dFUF9OS0VZU107CisgICAgdTMyICAgICBhdVdlcEtleUxlbmd0aFtXRVBfTktFWVNdOwogCiB9IFNDbWRTZXRXRVAsICpQU0NtZFNldFdFUDsKIApAQCAtMTg5LDM5ICsxODgsMzkgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0JTU0lESXRlbSB7CiAKLQlVMzIJICAgIHVDaGFubmVsOwotICAgIFU4ICAgICAgYWJ5QlNTSURbQlNTSURfTEVOXTsKLSAgICBVOCAgICAgIGFieVNTSURbU1NJRF9NQVhMRU4gKyAxXTsKKwl1MzIJICAgIHVDaGFubmVsOworICAgIHU4ICAgICAgYWJ5QlNTSURbQlNTSURfTEVOXTsKKyAgICB1OCAgICAgIGFieVNTSURbU1NJRF9NQVhMRU4gKyAxXTsKICAgICAvLzIwMDYtMTExNi0wMSw8TW9kaWZ5PiBieSBOb21hZFpoYW8KLSAgICAvL1UxNgkgICAgd0JlYWNvbkludGVydmFsOwotICAgIC8vVTE2CSAgICB3Q2FwSW5mbzsKLSAgICAvL1U4ICAgICAgYnlOZXRUeXBlOwotICAgIFU4ICAgICAgYnlOZXRUeXBlOwotICAgIFUxNgkgICAgd0JlYWNvbkludGVydmFsOwotICAgIFUxNgkgICAgd0NhcEluZm87ICAgICAgICAvLyBmb3IgYWRkcmVzcyBvZiBieU5ldFR5cGUgYXQgYWxpZ24gNAorICAgIC8vdTE2CSAgICB3QmVhY29uSW50ZXJ2YWw7CisgICAgLy91MTYJICAgIHdDYXBJbmZvOworICAgIC8vdTggICAgICBieU5ldFR5cGU7CisgICAgdTggICAgICBieU5ldFR5cGU7CisgICAgdTE2CSAgICB3QmVhY29uSW50ZXJ2YWw7CisgICAgdTE2CSAgICB3Q2FwSW5mbzsgICAgICAgIC8vIGZvciBhZGRyZXNzIG9mIGJ5TmV0VHlwZSBhdCBhbGlnbiA0CiAKLSAgICBCT09MICAgIGJXRVBPbjsKLSAgICBVMzIgICAgIHVSU1NJOworICAgIGJvb2wgYldFUE9uOworICAgIHUzMiAgICAgdVJTU0k7CiAKIH0gU0JTU0lESXRlbTsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQlNTSURMaXN0IHsKIAotCVUzMgkJICAgIHVJdGVtOworCXUzMgkJICAgIHVJdGVtOwogCVNCU1NJREl0ZW0Jc0JTU0lETGlzdFswXTsKIH0gU0JTU0lETGlzdCwgKlBTQlNTSURMaXN0OwogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRMaW5rU3RhdHVzIHsKIAotICAgIEJPT0wgICAgYkxpbms7Ci0JVTE2CSAgICB3QlNTVHlwZTsKLQlVOCAgICAgIGJ5U3RhdGU7Ci0gICAgVTggICAgICBhYnlCU1NJRFtCU1NJRF9MRU5dOwotICAgIFU4ICAgICAgYWJ5U1NJRFtTU0lEX01BWExFTiArIDJdOwotICAgIFUzMiAgICAgdUNoYW5uZWw7Ci0gICAgVTMyICAgICB1TGlua1JhdGU7CisgICAgYm9vbCBiTGluazsKKwl1MTYgICB3QlNTVHlwZTsKKwl1OCAgICAgIGJ5U3RhdGU7CisgICAgdTggICAgICBhYnlCU1NJRFtCU1NJRF9MRU5dOworICAgIHU4ICAgICAgYWJ5U1NJRFtTU0lEX01BWExFTiArIDJdOworICAgIHUzMiAgICAgdUNoYW5uZWw7CisgICAgdTMyICAgICB1TGlua1JhdGU7CiAKIH0gU0NtZExpbmtTdGF0dXMsICpQU0NtZExpbmtTdGF0dXM7CiAKQEAgLTIyOSwxOCArMjI4LDE4IEBACiAvLyA4MDIuMTEgY291bnRlcgogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NEb3QxMU1JQkNvdW50IHsKLSAgICBVMzIgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OwotICAgIFUzMiBNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQ7Ci0gICAgVTMyIEZhaWxlZENvdW50OwotICAgIFUzMiBSZXRyeUNvdW50OwotICAgIFUzMiBNdWx0aXBsZVJldHJ5Q291bnQ7Ci0gICAgVTMyIFJUU1N1Y2Nlc3NDb3VudDsKLSAgICBVMzIgUlRTRmFpbHVyZUNvdW50OwotICAgIFUzMiBBQ0tGYWlsdXJlQ291bnQ7Ci0gICAgVTMyIEZyYW1lRHVwbGljYXRlQ291bnQ7Ci0gICAgVTMyIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKLSAgICBVMzIgTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OwotICAgIFUzMiBGQ1NFcnJvckNvdW50OworCXUzMiBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CisJdTMyIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKKwl1MzIgRmFpbGVkQ291bnQ7CisJdTMyIFJldHJ5Q291bnQ7CisJdTMyIE11bHRpcGxlUmV0cnlDb3VudDsKKwl1MzIgUlRTU3VjY2Vzc0NvdW50OworCXUzMiBSVFNGYWlsdXJlQ291bnQ7CisJdTMyIEFDS0ZhaWx1cmVDb3VudDsKKwl1MzIgRnJhbWVEdXBsaWNhdGVDb3VudDsKKwl1MzIgUmVjZWl2ZWRGcmFnbWVudENvdW50OworCXUzMiBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CisJdTMyIEZDU0Vycm9yQ291bnQ7CiB9IFNEb3QxMU1JQkNvdW50LCAqUFNEb3QxMU1JQkNvdW50OwogCiAKQEAgLTI1MiwxMjkgKzI1MSwxMjkgQEAKICAgICAvLwogICAgIC8vIElTUiBzdGF0dXMgY291bnQKICAgICAvLwotICAgIFUzMiAgIGR3SXNyVHgwT0s7Ci0gICAgVTMyICAgZHdJc3JUeDFPSzsKLSAgICBVMzIgICBkd0lzckJlYWNvblR4T0s7Ci0gICAgVTMyICAgZHdJc3JSeE9LOwotICAgIFUzMiAgIGR3SXNyVEJUVEludDsKLSAgICBVMzIgICBkd0lzclNUSU1FUkludDsKLSAgICBVMzIgICBkd0lzclVucmVjb3ZlcmFibGVFcnJvcjsKLSAgICBVMzIgICBkd0lzclNvZnRJbnRlcnJ1cHQ7Ci0gICAgVTMyICAgZHdJc3JSeE5vQnVmOworCXUzMiAgIGR3SXNyVHgwT0s7CisJdTMyICAgZHdJc3JUeDFPSzsKKwl1MzIgICBkd0lzckJlYWNvblR4T0s7CisJdTMyICAgZHdJc3JSeE9LOworCXUzMiAgIGR3SXNyVEJUVEludDsKKwl1MzIgICBkd0lzclNUSU1FUkludDsKKwl1MzIgICBkd0lzclVucmVjb3ZlcmFibGVFcnJvcjsKKwl1MzIgICBkd0lzclNvZnRJbnRlcnJ1cHQ7CisJdTMyICAgZHdJc3JSeE5vQnVmOwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAgIFUzMiAgIGR3SXNyVW5rbm93bjsgICAgICAgICAgICAgICAvLyB1bmtub3duIGludGVycnVwdCBjb3VudAorCXUzMiAgIGR3SXNyVW5rbm93bjsgICAgICAgICAgICAgICAvLyB1bmtub3duIGludGVycnVwdCBjb3VudAogCiAgICAgLy8gUlNSIHN0YXR1cyBjb3VudAogICAgIC8vCi0gICAgVTMyICAgZHdSc3JGcm1BbGduRXJyOwotICAgIFUzMiAgIGR3UnNyRXJyOwotICAgIFUzMiAgIGR3UnNyQ1JDRXJyOwotICAgIFUzMiAgIGR3UnNyQ1JDT2s7Ci0gICAgVTMyICAgZHdSc3JCU1NJRE9rOwotICAgIFUzMiAgIGR3UnNyQUREUk9rOwotICAgIFUzMiAgIGR3UnNySUNWT2s7Ci0gICAgVTMyICAgZHdOZXdSc3JTaG9ydFByZWFtYmxlOwotICAgIFUzMiAgIGR3UnNyTG9uZzsKLSAgICBVMzIgICBkd1JzclJ1bnQ7CisJdTMyICAgZHdSc3JGcm1BbGduRXJyOworCXUzMiAgIGR3UnNyRXJyOworCXUzMiAgIGR3UnNyQ1JDRXJyOworCXUzMiAgIGR3UnNyQ1JDT2s7CisJdTMyICAgZHdSc3JCU1NJRE9rOworCXUzMiAgIGR3UnNyQUREUk9rOworCXUzMiAgIGR3UnNySUNWT2s7CisJdTMyICAgZHdOZXdSc3JTaG9ydFByZWFtYmxlOworCXUzMiAgIGR3UnNyTG9uZzsKKwl1MzIgICBkd1JzclJ1bnQ7CiAKLSAgICBVMzIgICBkd1JzclJ4Q29udHJvbDsKLSAgICBVMzIgICBkd1JzclJ4RGF0YTsKLSAgICBVMzIgICBkd1JzclJ4TWFuYWdlOworCXUzMiAgIGR3UnNyUnhDb250cm9sOworCXUzMiAgIGR3UnNyUnhEYXRhOworCXUzMiAgIGR3UnNyUnhNYW5hZ2U7CiAKLSAgICBVMzIgICBkd1JzclJ4UGFja2V0OwotICAgIFUzMiAgIGR3UnNyUnhPY3RldDsKLSAgICBVMzIgICBkd1JzckJyb2FkY2FzdDsKLSAgICBVMzIgICBkd1Jzck11bHRpY2FzdDsKLSAgICBVMzIgICBkd1JzckRpcmVjdGVkOworCXUzMiAgIGR3UnNyUnhQYWNrZXQ7CisJdTMyICAgZHdSc3JSeE9jdGV0OworCXUzMiAgIGR3UnNyQnJvYWRjYXN0OworCXUzMiAgIGR3UnNyTXVsdGljYXN0OworCXUzMiAgIGR3UnNyRGlyZWN0ZWQ7CiAgICAgLy8gNjQtYml0IE9JRAotICAgIFUzMiAgIHVsbFJzck9LOworCXUzMiAgIHVsbFJzck9LOwogCiAgICAgLy8gZm9yIHNvbWUgb3B0aW9uYWwgT0lEcyAoNjQgYml0cykgYW5kIERNSSBzdXBwb3J0Ci0gICAgVTMyICAgdWxsUnhCcm9hZGNhc3RCeXRlczsKLSAgICBVMzIgICB1bGxSeE11bHRpY2FzdEJ5dGVzOwotICAgIFUzMiAgIHVsbFJ4RGlyZWN0ZWRCeXRlczsKLSAgICBVMzIgICB1bGxSeEJyb2FkY2FzdEZyYW1lczsKLSAgICBVMzIgICB1bGxSeE11bHRpY2FzdEZyYW1lczsKLSAgICBVMzIgICB1bGxSeERpcmVjdGVkRnJhbWVzOworCXUzMiAgIHVsbFJ4QnJvYWRjYXN0Qnl0ZXM7CisJdTMyICAgdWxsUnhNdWx0aWNhc3RCeXRlczsKKwl1MzIgICB1bGxSeERpcmVjdGVkQnl0ZXM7CisJdTMyICAgdWxsUnhCcm9hZGNhc3RGcmFtZXM7CisJdTMyICAgdWxsUnhNdWx0aWNhc3RGcmFtZXM7CisJdTMyICAgdWxsUnhEaXJlY3RlZEZyYW1lczsKIAotICAgIFUzMiAgIGR3UnNyUnhGcmFnbWVudDsKLSAgICBVMzIgICBkd1JzclJ4RnJtTGVuNjQ7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjY1XzEyNzsKLSAgICBVMzIgICBkd1JzclJ4RnJtTGVuMTI4XzI1NTsKLSAgICBVMzIgICBkd1JzclJ4RnJtTGVuMjU2XzUxMTsKLSAgICBVMzIgICBkd1JzclJ4RnJtTGVuNTEyXzEwMjM7Ci0gICAgVTMyICAgZHdSc3JSeEZybUxlbjEwMjRfMTUxODsKKwl1MzIgICBkd1JzclJ4RnJhZ21lbnQ7CisJdTMyICAgZHdSc3JSeEZybUxlbjY0OworCXUzMiAgIGR3UnNyUnhGcm1MZW42NV8xMjc7CisJdTMyICAgZHdSc3JSeEZybUxlbjEyOF8yNTU7CisJdTMyICAgZHdSc3JSeEZybUxlbjI1Nl81MTE7CisJdTMyICAgZHdSc3JSeEZybUxlbjUxMl8xMDIzOworCXUzMiAgIGR3UnNyUnhGcm1MZW4xMDI0XzE1MTg7CiAKICAgICAvLyBUU1IwLDEgc3RhdHVzIGNvdW50CiAgICAgLy8KLSAgICBVMzIgICBkd1RzclRvdGFsUmV0cnlbMl07ICAgICAgICAvLyB0b3RhbCBjb2xsaXNpb24gcmV0cnkgY291bnQKLSAgICBVMzIgICBkd1Rzck9uY2VSZXRyeVsyXTsgICAgICAgICAvLyB0aGlzIHBhY2tldCBvbmx5IG9jY3VyIG9uZSBjb2xsaXNpb24KLSAgICBVMzIgICBkd1Rzck1vcmVUaGFuT25jZVJldHJ5WzJdOyAvLyB0aGlzIHBhY2tldCBvY2N1ciBtb3JlIHRoYW4gb25lIGNvbGxpc2lvbgotICAgIFUzMiAgIGR3VHNyUmV0cnlbMl07ICAgICAgICAgICAgIC8vIHRoaXMgcGFja2V0IGhhcyBldmVyIG9jY3VyIGNvbGxpc2lvbiwKKwl1MzIgICBkd1RzclRvdGFsUmV0cnlbMl07ICAgICAgICAvLyB0b3RhbCBjb2xsaXNpb24gcmV0cnkgY291bnQKKwl1MzIgICBkd1Rzck9uY2VSZXRyeVsyXTsgICAgICAgICAvLyB0aGlzIHBhY2tldCBvbmx5IG9jY3VyIG9uZSBjb2xsaXNpb24KKwl1MzIgICBkd1Rzck1vcmVUaGFuT25jZVJldHJ5WzJdOyAvLyB0aGlzIHBhY2tldCBvY2N1ciBtb3JlIHRoYW4gb25lIGNvbGxpc2lvbgorCXUzMiAgIGR3VHNyUmV0cnlbMl07ICAgICAgICAgICAgIC8vIHRoaXMgcGFja2V0IGhhcyBldmVyIG9jY3VyIGNvbGxpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaXMgKGR3VHNyT25jZUNvbGxpc2lvbjAgKyBkd1Rzck1vcmVUaGFuT25jZUNvbGxpc2lvbjApCi0gICAgVTMyICAgZHdUc3JBQ0tEYXRhWzJdOwotICAgIFUzMiAgIGR3VHNyRXJyWzJdOwotICAgIFUzMiAgIGR3QWxsVHNyT0tbMl07Ci0gICAgVTMyICAgZHdUc3JSZXRyeVRpbWVvdXRbMl07Ci0gICAgVTMyICAgZHdUc3JUcmFuc21pdFRpbWVvdXRbMl07CisJdTMyICAgZHdUc3JBQ0tEYXRhWzJdOworCXUzMiAgIGR3VHNyRXJyWzJdOworCXUzMiAgIGR3QWxsVHNyT0tbMl07CisJdTMyICAgZHdUc3JSZXRyeVRpbWVvdXRbMl07CisJdTMyICAgZHdUc3JUcmFuc21pdFRpbWVvdXRbMl07CiAKLSAgICBVMzIgICBkd1RzclR4UGFja2V0WzJdOwotICAgIFUzMiAgIGR3VHNyVHhPY3RldFsyXTsKLSAgICBVMzIgICBkd1RzckJyb2FkY2FzdFsyXTsKLSAgICBVMzIgICBkd1Rzck11bHRpY2FzdFsyXTsKLSAgICBVMzIgICBkd1RzckRpcmVjdGVkWzJdOworCXUzMiAgIGR3VHNyVHhQYWNrZXRbMl07CisJdTMyICAgZHdUc3JUeE9jdGV0WzJdOworCXUzMiAgIGR3VHNyQnJvYWRjYXN0WzJdOworCXUzMiAgIGR3VHNyTXVsdGljYXN0WzJdOworCXUzMiAgIGR3VHNyRGlyZWN0ZWRbMl07CiAKICAgICAvLyBSRC9URCBjb3VudAotICAgIFUzMiAgIGR3Q250UnhGcm1MZW5ndGg7Ci0gICAgVTMyICAgZHdDbnRUeEJ1Zkxlbmd0aDsKKwl1MzIgICBkd0NudFJ4RnJtTGVuZ3RoOworCXUzMiAgIGR3Q250VHhCdWZMZW5ndGg7CiAKLSAgICBVOCAgICBhYnlDbnRSeFBhdHRlcm5bMTZdOwotICAgIFU4ICAgIGFieUNudFR4UGF0dGVyblsxNl07CisJdTggICAgYWJ5Q250UnhQYXR0ZXJuWzE2XTsKKwl1OCAgICBhYnlDbnRUeFBhdHRlcm5bMTZdOwogCiAgICAgLy8gU29mdHdhcmUgY2hlY2suLi4uCi0gICAgVTMyICAgZHdDbnRSeERhdGFFcnI7ICAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAotICAgIFUzMiAgIGR3Q250RGVjcnlwdEVycjsgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKLSAgICBVMzIgICBkd0NudFJ4SUNWRXJyOyAgICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50Ci0gICAgVTMyICAgIGlkeFJ4RXJyb3JEZXNjOyAgICAgICAgICAgICAvLyBpbmRleCBmb3IgcnggZGF0YSBlcnJvciBSRAorCXUzMiAgIGR3Q250UnhEYXRhRXJyOyAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKKwl1MzIgICBkd0NudERlY3J5cHRFcnI7ICAgICAgICAgICAgLy8gcnggYnVmZmVyIGRhdGEgc29mdHdhcmUgY29tcGFyZSBDUkMgZXJyIGNvdW50CisJdTMyICAgZHdDbnRSeElDVkVycjsgICAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAorCXUzMiAgICBpZHhSeEVycm9yRGVzYzsgICAgICAgICAgICAgLy8gaW5kZXggZm9yIHJ4IGRhdGEgZXJyb3IgUkQKIAogICAgIC8vIDY0LWJpdCBPSUQKLSAgICBVMzIgICB1bGxUc3JPS1syXTsKKwl1MzIgICB1bGxUc3JPS1syXTsKIAogICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIFUzMiAgIHVsbFR4QnJvYWRjYXN0RnJhbWVzWzJdOwotICAgIFUzMiAgIHVsbFR4TXVsdGljYXN0RnJhbWVzWzJdOwotICAgIFUzMiAgIHVsbFR4RGlyZWN0ZWRGcmFtZXNbMl07Ci0gICAgVTMyICAgdWxsVHhCcm9hZGNhc3RCeXRlc1syXTsKLSAgICBVMzIgICB1bGxUeE11bHRpY2FzdEJ5dGVzWzJdOwotICAgIFUzMiAgIHVsbFR4RGlyZWN0ZWRCeXRlc1syXTsKKwl1MzIgICB1bGxUeEJyb2FkY2FzdEZyYW1lc1syXTsKKwl1MzIgICB1bGxUeE11bHRpY2FzdEZyYW1lc1syXTsKKwl1MzIgICB1bGxUeERpcmVjdGVkRnJhbWVzWzJdOworCXUzMiAgIHVsbFR4QnJvYWRjYXN0Qnl0ZXNbMl07CisJdTMyICAgdWxsVHhNdWx0aWNhc3RCeXRlc1syXTsKKwl1MzIgICB1bGxUeERpcmVjdGVkQnl0ZXNbMl07CiB9IFNTdGF0TUlCQ291bnQsICpQU1N0YXRNSUJDb3VudDsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTTm9kZUl0ZW0gewogICAgIC8vIFNUQSBpbmZvCi0gICAgVTE2ICAgICAgICAgICAgd0FJRDsKLSAgICBVOCAgICAgICAgICAgICBhYnlNQUNBZGRyWzZdOwotICAgIFUxNiAgICAgICAgICAgIHdUeERhdGFSYXRlOwotICAgIFUxNiAgICAgICAgICAgIHdJbkFjdGl2ZUNvdW50OwotICAgIFUxNiAgICAgICAgICAgIHdFblF1ZXVlQ250OwotICAgIFUxNiAgICAgICAgICAgIHdGbGFnczsKLSAgICBCT09MICAgICAgICAgICBiUFdCaXRPbjsKLSAgICBVOCAgICAgICAgICAgICBieUtleUluZGV4OwotICAgIFUxNiAgICAgICAgICAgIHdXZXBLZXlMZW5ndGg7Ci0gICAgVTggICAgICAgICAgICBhYnlXZXBLZXlbV0VQX0tFWU1BWExFTl07CisgICAgdTE2ICAgICAgICAgICAgd0FJRDsKKyAgICB1OCAgICAgICAgICAgICBhYnlNQUNBZGRyWzZdOworICAgIHUxNiAgICAgICAgICAgIHdUeERhdGFSYXRlOworICAgIHUxNiAgICAgICAgICAgIHdJbkFjdGl2ZUNvdW50OworICAgIHUxNiAgICAgICAgICAgIHdFblF1ZXVlQ250OworICAgIHUxNiAgICAgICAgICAgIHdGbGFnczsKKyAgICBib29sIGJQV0JpdE9uOworICAgIHU4ICAgICAgICAgICAgIGJ5S2V5SW5kZXg7CisgICAgdTE2ICAgICAgICAgICAgd1dlcEtleUxlbmd0aDsKKyAgICB1OCAgICAgICAgICAgIGFieVdlcEtleVtXRVBfS0VZTUFYTEVOXTsKICAgICAvLyBBdXRvIHJhdGUgZmFsbGJhY2sgdmFycwotICAgIEJPT0wgICAgICAgICAgIGJJc0luRmFsbGJhY2s7Ci0gICAgVTMyICAgICAgICAgICAgdVR4RmFpbHVyZXM7Ci0gICAgVTMyICAgICAgICAgICAgdVR4QXR0ZW1wdHM7Ci0gICAgVTE2ICAgICAgICAgICAgd0ZhaWx1cmVSYXRpbzsKKyAgICBib29sIGJJc0luRmFsbGJhY2s7CisgICAgdTMyICAgICAgICAgICAgdVR4RmFpbHVyZXM7CisgICAgdTMyICAgICAgICAgICAgdVR4QXR0ZW1wdHM7CisgICAgdTE2ICAgICAgICAgICAgd0ZhaWx1cmVSYXRpbzsKIAogfSBTTm9kZUl0ZW07CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU05vZGVMaXN0IHsKIAotCVUzMgkJICAgIHVJdGVtOworCXUzMgkJICAgIHVJdGVtOwogCVNOb2RlSXRlbQlzTm9kZUxpc3RbMF07CiAKIH0gU05vZGVMaXN0LCAqUFNOb2RlTGlzdDsKQEAgLTM4Myw3ICszODIsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ21kVmFsdWUgewogCi0gICAgVTMyICAgICBkd1ZhbHVlOworCXUzMiBkd1ZhbHVlOwogCiB9IFNDbWRWYWx1ZSwgICpQU0NtZFZhbHVlOwogCkBAIC00MTgsNDYgKzQxNyw0NiBAQAogCiAKIHN0cnVjdCB2aWF3Z2V0X2hvc3RhcGRfcGFyYW0gewotCVUzMiBjbWQ7Ci0JVTggc3RhX2FkZHJbNl07CisJdTMyIGNtZDsKKwl1OCBzdGFfYWRkcls2XTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlVMTYgYWlkOwotCQkJVTE2IGNhcGFiaWxpdHk7Ci0JCQlVOCB0eF9zdXBwX3JhdGVzOworCQkJdTE2IGFpZDsKKwkJCXUxNiBjYXBhYmlsaXR5OworCQkJdTggdHhfc3VwcF9yYXRlczsKIAkJfSBhZGRfc3RhOwogCQlzdHJ1Y3QgewotCQkJVTMyIGluYWN0aXZlX3NlYzsKKwkJCXUzMiBpbmFjdGl2ZV9zZWM7CiAJCX0gZ2V0X2luZm9fc3RhOwogCQlzdHJ1Y3QgewotCQkJVTggYWxnOwotCQkJVTMyIGZsYWdzOwotCQkJVTMyIGVycjsKLQkJCVU4IGlkeDsKLQkJCVU4IHNlcVs4XTsKLQkJCVUxNiBrZXlfbGVuOwotCQkJVTgga2V5WzBdOworCQkJdTggYWxnOworCQkJdTMyIGZsYWdzOworCQkJdTMyIGVycjsKKwkJCXU4IGlkeDsKKwkJCXU4IHNlcVs4XTsKKwkJCXUxNiBrZXlfbGVuOworCQkJdTgga2V5WzBdOwogCQl9IGNyeXB0OwogCQlzdHJ1Y3QgewotCQkJVTMyIGZsYWdzX2FuZDsKLQkJCVUzMiBmbGFnc19vcjsKKwkJCXUzMiBmbGFnc19hbmQ7CisJCQl1MzIgZmxhZ3Nfb3I7CiAJCX0gc2V0X2ZsYWdzX3N0YTsKIAkJc3RydWN0IHsKLQkJCVUxNiByaWQ7Ci0JCQlVMTYgbGVuOwotCQkJVTggZGF0YVswXTsKKwkJCXUxNiByaWQ7CisJCQl1MTYgbGVuOworCQkJdTggZGF0YVswXTsKIAkJfSByaWQ7CiAJCXN0cnVjdCB7Ci0JCQlVOCBsZW47Ci0JCQlVOCBkYXRhWzBdOworCQkJdTggbGVuOworCQkJdTggZGF0YVswXTsKIAkJfSBnZW5lcmljX2VsZW07CiAJCXN0cnVjdCB7Ci0JCQlVMTYgY21kOwotCQkJVTE2IHJlYXNvbl9jb2RlOworCQkJdTE2IGNtZDsKKwkJCXUxNiByZWFzb25fY29kZTsKIAkJfSBtbG1lOwogCQlzdHJ1Y3QgewotCQkJVTggc3NpZF9sZW47Ci0JCQlVOCBzc2lkWzMyXTsKKwkJCXU4IHNzaWRfbGVuOworCQkJdTggc3NpZFszMl07CiAJCX0gc2Nhbl9yZXE7CiAJfSB1OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuYwppbmRleCA0MDQyODdjLi41NjI0YTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5jCkBAIC03MCwxNiArNzAsMTYgQEAKICAgICBTTm9kZUxpc3QgICAgICAgICAgIHNOb2RlTGlzdDsKICAgICBQU0JTU0lETGlzdCAgICAgICAgIHBMaXN0OwogICAgIFBTTm9kZUxpc3QgICAgICAgICAgcE5vZGVMaXN0OwotICAgIFVJTlQgICAgICAgICAgICAgICAgY2JMaXN0Q291bnQ7CisgICAgdW5zaWduZWQgaW50IGNiTGlzdENvdW50OwogICAgIFBLbm93bkJTUyAgICAgICAgICAgcEJTUzsKICAgICBQS25vd25Ob2RlREIgICAgICAgIHBOb2RlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWksIGpqOworICAgIHVuc2lnbmVkIGludCBpaSwgamo7CiAgICAgU0NtZExpbmtTdGF0dXMgICAgICBzTGlua1N0YXR1czsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieVN1cHBSYXRlc1tdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5TnVsbEFkZHJbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLSAgICBEV09SRCAgICAgICAgICAgICAgIGR3S2V5SW5kZXg9IDA7Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlTY2FuU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLSAgICBMT05HICAgICAgICAgICAgICAgIGxkQm07CisgICAgdW5zaWduZWQgY2hhciBhYnlTdXBwUmF0ZXNbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA0LCAweDAyLCAweDA0LCAweDBCLCAweDE2fTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieU51bGxBZGRyW10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4PSAwOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisgICAgbG9uZyAgICAgICAgICAgICAgICBsZEJtOwogCiAgICAgcFJlcS0+d1Jlc3VsdCA9IDA7CiAKQEAgLTk5LDE3ICs5OSwxNyBAQAogICAgICAgICAgICAgbWVtY3B5KGFieVNjYW5TU0lELCBwSXRlbVNTSUQsIHBJdGVtU1NJRC0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJNQUNTdXNwZW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJNQUNTdXNwZW5kID09IHRydWUpIHsKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKICAgICAgICAgICAgIHZNZ3JUaW1lckluaXQocERldmljZSk7CiAgICAgICAgICAgICBNQUN2SW50RW5hYmxlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIElNUl9NQVNLX1ZBTFVFKTsKICAgICAgICAgICAgIGFkZF90aW1lcigmcE1nbXQtPnNUaW1lclNlY29uZENhbGxiYWNrKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJNQUNTdXNwZW5kID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICBpZiAobWVtY21wKHBNZ210LT5hYnlDdXJyQlNTSUQsICZhYnlOdWxsQWRkclswXSwgNikgPT0gMCkKLSAgICAgICAgICAgIEJTU3ZDbGVhckJTU0xpc3QoKHZvaWQgKilwRGV2aWNlLCBGQUxTRSk7CisgICAgICAgICAgICBCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopcERldmljZSwgZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopcERldmljZSwgcERldmljZS0+YkxpbmtQYXNzKTsKIApAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQlicmVhazsKIAkJfTsKIAotICAgICAgICAgIGlmKHNab25lVHlwZUNtZC5iV3JpdGU9PVRSVUUpIHsKKyAgICAgICAgICBpZihzWm9uZVR5cGVDbWQuYldyaXRlPT10cnVlKSB7CiAJICAvLy8vLy93cml0ZSB6b25ldHlwZQogICAgICAgICAgICAgICAgIGlmKHNab25lVHlwZUNtZC5ab25lVHlwZSA9PSBab25lVHlwZV9VU0EpIHsKICAgICAgICAgICAgICAgICAgIC8vc2V0IHRvIFVTQQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICB9CiAJZWxzZSB7CiAgICAgICAgICAgLy8vLy8vL3JlYWQgem9uZXR5cGUKLQkgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgIHpvbmV0eXBlPTA7CisJICB1bnNpZ25lZCBjaGFyIHpvbmV0eXBlPTA7CiAKIAogICAgICAgICAgICBpZih6b25ldHlwZSA9PSAweDAwKSAgeyAvL1VTQQpAQCAtMTc0LDEzICsxNzQsMTMgQEAKIAogICAgIGNhc2UgV0xBTl9DTURfQlNTX0pPSU46CiAKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJNQUNTdXNwZW5kID09IFRSVUUpIHsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJNQUNTdXNwZW5kID09IHRydWUpIHsKKyAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPbihwRGV2aWNlKTsKICAgICAgICAgICAgIHZNZ3JUaW1lckluaXQocERldmljZSk7CiAgICAgICAgICAgICBNQUN2SW50RW5hYmxlKHBEZXZpY2UtPlBvcnRPZmZzZXQsIElNUl9NQVNLX1ZBTFVFKTsKICAgICAgICAgICAgIGFkZF90aW1lcigmcE1nbXQtPnNUaW1lclNlY29uZENhbGxiYWNrKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJNQUNTdXNwZW5kID0gRkFMU0U7CisgICAgICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZzSm9pbkNtZCwgcFJlcS0+ZGF0YSwgc2l6ZW9mKFNDbWRCU1NKb2luKSkpIHsKQEAgLTE5OSw3ICsxOTksNyBAQAogCSAgICAgICAgcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfRVNTX1NUQTsKIAkgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImlvY3Qgc2V0IHRvIFNUQSBtb2RlXG4iKTsKIAkgICAgfQotCSAgICBpZiAoc0pvaW5DbWQuYlBTRW5hYmxlID09IFRSVUUpIHsKKwkgICAgaWYgKHNKb2luQ21kLmJQU0VuYWJsZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5lUFNNb2RlID0gV01BQ19QT1dFUl9GQVNUOwogLy8gICAgICAgICAgICBwRGV2aWNlLT5lUFNNb2RlID0gV01BQ19QT1dFUl9NQVg7CiAgICAgICAgICAgICBwTWdtdC0+d0xpc3RlbkludGVydmFsID0gMjsKQEAgLTIxMSwxMiArMjExLDEyIEBACiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJQb3dlciBTYXZpbmcgT2ZmIFxuIik7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc0pvaW5DbWQuYlNoYXJlS2V5QXV0aCA9PSBUUlVFKXsKLSAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBUUlVFOworICAgICAgICBpZiAoc0pvaW5DbWQuYlNoYXJlS2V5QXV0aCA9PSB0cnVlKXsKKyAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiU2hhcmUgS2V5IFxuIik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisgICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gZmFsc2U7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJPcGVuIFN5c3RlbSBcbiIpOwogICAgICAgICB9CiAJICAgIHBEZXZpY2UtPnVDaGFubmVsID0gc0pvaW5DbWQudUNoYW5uZWw7CkBAIC0yMzUsOCArMjM1LDggQEAKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfTsKLQkgICAgaWYgKHNXRVBDbWQuYkVuYWJsZVdlcCAhPSBUUlVFKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworCSAgICBpZiAoc1dFUENtZC5iRW5hYmxlV2VwICE9IHRydWUpIHsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAgICAgICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAgICAgICAgICAgICBNQUN2RGlzYWJsZURlZmF1bHRLZXkocERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJXRVAgZnVuY3Rpb24gZGlzYWJsZS4gXG4iKTsKQEAgLTI1NywxNSArMjU3LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1dFUENtZC5hdVdlcEtleUxlbmd0aFtpaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKSZzV0VQQ21kLmFieVdlcEtleVtpaV1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZzV0VQQ21kLmFieVdlcEtleVtpaV1bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQ1RMX1dFUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPlBvcnRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSBzV0VQQ21kLmJ5S2V5SW5kZXg7Ci0gICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gdHJ1ZTsKKyAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSB0cnVlOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CiAKICAgICAgICAgYnJlYWs7CkBAIC0yODYsOCArMjg2LDggQEAKICAgICAgICAgICAgIHNMaW5rU3RhdHVzLmJ5U3RhdGUgPSBBREhPQ19TVEFSVEVEOwogCiAgICAgICAgIHNMaW5rU3RhdHVzLnVDaGFubmVsID0gcE1nbXQtPnVDdXJyQ2hhbm5lbDsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBzTGlua1N0YXR1cy5iTGluayA9IFRSVUU7CisgICAgICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gdHJ1ZSkgeworICAgICAgICAgICAgc0xpbmtTdGF0dXMuYkxpbmsgPSB0cnVlOwogIAkJICAgIHBJdGVtU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlDdXJyU1NJRDsKIAkJICAgIG1lbWNweShzTGlua1N0YXR1cy5hYnlTU0lELCBwSXRlbVNTSUQtPmFieVNTSUQsIHBJdGVtU1NJRC0+bGVuKTsKIAkJICAgIG1lbWNweShzTGlua1N0YXR1cy5hYnlCU1NJRCwgcE1nbXQtPmFieUN1cnJCU1NJRCwgV0xBTl9CU1NJRF9MRU4pOwpAQCAtMjk1LDcgKzI5NSw3IEBACiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBMaW5rIFN1Y2Nlc3MgISBcbiIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc0xpbmtTdGF0dXMuYkxpbmsgPSBGQUxTRTsKKyAgICAgICAgICAgIHNMaW5rU3RhdHVzLmJMaW5rID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihwUmVxLT5kYXRhLCAmc0xpbmtTdGF0dXMsIHNpemVvZihTQ21kTGlua1N0YXR1cykpKSB7CiAJCQlyZXN1bHQgPSAtRUZBVUxUOwpAQCAtMzQwLDggKzM0MCw4IEBACiAgICAgCQkgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLndCZWFjb25JbnRlcnZhbCA9IHBCU1MtPndCZWFjb25JbnRlcnZhbDsKICAgICAJCSAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0ud0NhcEluZm8gPSBwQlNTLT53Q2FwSW5mbzsKIC8vICAgIAkJICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS51UlNTSSA9IHBCU1MtPnVSU1NJOwotICAgIAkJICAgIFJGdlJTU0lUb2RCbShwRGV2aWNlLCAoQllURSkocEJTUy0+dVJTU0kpLCAmbGRCbSk7Ci0gICAgCQkgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLnVSU1NJID0gKFVJTlQpbGRCbTsKKyAgICAJCSAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKHVuc2lnbmVkIGNoYXIpKHBCU1MtPnVSU1NJKSwgJmxkQm0pOworICAgIAkJICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS51UlNTSSA9ICh1bnNpZ25lZCBpbnQpbGRCbTsKICAgICAJCSAgICBtZW1jcHkocExpc3QtPnNCU1NJRExpc3RbaWldLmFieUJTU0lELCBwQlNTLT5hYnlCU1NJRCwgV0xBTl9CU1NJRF9MRU4pOwogICAgIAkJICAgIHBJdGVtU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBCU1MtPmFieVNTSUQ7CiAgICAgCQkgICAgbWVtc2V0KHBMaXN0LT5zQlNTSURMaXN0W2lpXS5hYnlTU0lELCAwLCBXTEFOX1NTSURfTUFYTEVOICsgMSk7CkBAIC0zNTMsMTAgKzM1MywxMCBAQAogICAgIAkJICAgICAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0uYnlOZXRUeXBlID0gQURIT0M7CiAgICAgCQkgICAgfQogICAgIAkJICAgIGlmIChXTEFOX0dFVF9DQVBfSU5GT19QUklWQUNZKHBCU1MtPndDYXBJbmZvKSkgewotICAgIAkJICAgICAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0uYldFUE9uID0gVFJVRTsKKyAgICAJCSAgICAgICAgcExpc3QtPnNCU1NJRExpc3RbaWldLmJXRVBPbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgIAkJICAgICAgICBwTGlzdC0+c0JTU0lETGlzdFtpaV0uYldFUE9uID0gRkFMU0U7CisgICAgCQkgICAgICAgIHBMaXN0LT5zQlNTSURMaXN0W2lpXS5iV0VQT24gPSBmYWxzZTsKICAgICAJCSAgICB9CiAgICAgCQkgICAgaWkgKys7CiAgICAgCQkgICAgaWYgKGlpID49IHBMaXN0LT51SXRlbSkKQEAgLTM5MSwxNiArMzkxLDE2IEBACiAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUocERldmljZS0+ZGV2KTsKIAogICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSBGQUxTRSkgeworICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IGZhbHNlKSB7CiAgICAgICAgICAgICBDQVJEYlJhZGlvUG93ZXJPZmYocERldmljZSk7CiAgICAgICAgIH0KLSAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJCU1NJRCwgMCwgNik7CiAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICBkZWxfdGltZXIoJnBEZXZpY2UtPnNUaW1lckNvbW1hbmQpOwogICAgICAgICBkZWxfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7Ci0gICAgICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gRkFMU0U7Ci0gICAgICAgIHBEZXZpY2UtPmJNQUNTdXNwZW5kID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKKyAgICAgICAgcERldmljZS0+Yk1BQ1N1c3BlbmQgPSB0cnVlOwogICAgICAgICBNQUN2SW50RGlzYWJsZShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIApAQCAtNDEwLDEzICs0MTAsMTMgQEAKIAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJXTEFOX0NNRF9TVEFSVF9NQUNcbiIpOwogCi0gICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iTUFDU3VzcGVuZCA9PSB0cnVlKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpCiAgICAgICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAgICAgICAgICAgICB2TWdyVGltZXJJbml0KHBEZXZpY2UpOwogICAgICAgICAgICAgTUFDdkludEVuYWJsZShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBJTVJfTUFTS19WQUxVRSk7CiAgICAgICAgICAgICBhZGRfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iTUFDU3VzcGVuZCA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+Yk1BQ1N1c3BlbmQgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtNDU4LDExICs0NTgsMTEgQEAKIAkJfTsKIAogCQlpZiAoc1ZhbHVlLmR3VmFsdWUgPT0gMSkgewotICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZTgwMjF4ID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IHRydWU7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJFbmFibGUgODAyLjF4XG4iKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGU4MDIxeCA9IEZBTFNFOworICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZTgwMjF4ID0gZmFsc2U7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJEaXNhYmxlIDgwMi4xeFxuIik7CiAgICAgICAgIH0KIApAQCAtNDc4LDExICs0NzgsMTEgQEAKIAkJfTsKIAogCQlpZiAoc1ZhbHVlLmR3VmFsdWUgPT0gMSkgewotICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUhvc3RXRVAgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUhvc3RXRVAgPSB0cnVlOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRW5hYmxlIEhvc3RXRVBcbiIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcERldmljZS0+YkVuYWJsZUhvc3RXRVAgPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQID0gZmFsc2U7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJEaXNhYmxlIEhvc3RXRVBcbiIpOwogICAgICAgICB9CiAKQEAgLTQ5OCwxMSArNDk4LDExIEBACiAJCWlmIChzVmFsdWUuZHdWYWx1ZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJ1cCB3cGFkZXZcbiIpOwogCQkgICBtZW1jcHkocERldmljZS0+d3BhZGV2LT5kZXZfYWRkciwgcERldmljZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCQkgICBwRGV2aWNlLT5iV1BBREVWVXAgPSBUUlVFOworCQkgICBwRGV2aWNlLT5iV1BBREVWVXAgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiY2xvc2Ugd3BhZGV2XG4iKTsKLQkgICBwRGV2aWNlLT5iV1BBREVWVXAgPSBGQUxTRTsKKwkgICBwRGV2aWNlLT5iV1BBREVWVXAgPSBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGJyZWFrOwpAQCAtNTEwLDcgKzUxMCw3IEBACiAgICAgY2FzZSBXTEFOX0NNRF9BUF9TVEFSVDoKIAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJXTEFOX0NNRF9BUF9TVEFSVFxuIik7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gVFJVRSkgeworICAgICAgICBpZiAocERldmljZS0+YlJhZGlvT2ZmID09IHRydWUpIHsKICAgICAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9uKHBEZXZpY2UpOwogICAgICAgICAgICAgdk1nclRpbWVySW5pdChwRGV2aWNlKTsKICAgICAgICAgICAgIE1BQ3ZJbnRFbmFibGUocERldmljZS0+UG9ydE9mZnNldCwgSU1SX01BU0tfVkFMVUUpOwpAQCAtNTU0LDEyICs1NTQsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcE1nbXQtPndJQlNTQmVhY29uUGVyaW9kID0gMTAwOwogCi0gICAgICAgIGlmIChzU3RhcnRBUENtZC5iU2hhcmVLZXlBdXRoID09IFRSVUUpewotICAgICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IFRSVUU7CisgICAgICAgIGlmIChzU3RhcnRBUENtZC5iU2hhcmVLZXlBdXRoID09IHRydWUpeworICAgICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IHRydWU7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTaGFyZSBLZXkgXG4iKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBGQUxTRTsKKyAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk9wZW4gU3lzdGVtIFxuIik7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KHBNZ210LT5hYnlJQlNTU3VwcFJhdGVzLCBhYnlTdXBwUmF0ZXMsIDYpOwpAQCAtNjM1LDkgKzYzNSw5IEBACiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndBSUQgPSBwTm9kZS0+d0FJRDsKICAgICAJCSAgICBtZW1jcHkocE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLmFieU1BQ0FkZHIsIHBOb2RlLT5hYnlNQUNBZGRyLCBXTEFOX0FERFJfTEVOKTsKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud1R4RGF0YVJhdGUgPSBwTm9kZS0+d1R4RGF0YVJhdGU7Ci0gICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndJbkFjdGl2ZUNvdW50ID0gKFdPUkQpcE5vZGUtPnVJbkFjdGl2ZUNvdW50OwotICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53RW5RdWV1ZUNudCA9IChXT1JEKXBOb2RlLT53RW5RdWV1ZUNudDsKLSAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud0ZsYWdzID0gKFdPUkQpcE5vZGUtPmR3RmxhZ3M7CisgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndJbkFjdGl2ZUNvdW50ID0gKHVuc2lnbmVkIHNob3J0KXBOb2RlLT51SW5BY3RpdmVDb3VudDsKKyAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud0VuUXVldWVDbnQgPSAodW5zaWduZWQgc2hvcnQpcE5vZGUtPndFblF1ZXVlQ250OworICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53RmxhZ3MgPSAodW5zaWduZWQgc2hvcnQpcE5vZGUtPmR3RmxhZ3M7CiAgICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLmJQV0JpdE9uID0gcE5vZGUtPmJQU0VuYWJsZTsKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0uYnlLZXlJbmRleCA9IHBOb2RlLT5ieUtleUluZGV4OwogICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS53V2VwS2V5TGVuZ3RoID0gcE5vZGUtPnVXZXBLZXlMZW5ndGg7CkBAIC02NTIsNyArNjUyLDcgQEAKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0uYklzSW5GYWxsYmFjayA9IHBOb2RlLT5iSXNJbkZhbGxiYWNrOwogICAgIAkJICAgIHBOb2RlTGlzdC0+c05vZGVMaXN0W2pqXS51VHhGYWlsdXJlcyA9IHBOb2RlLT51VHhGYWlsdXJlczsKICAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0udVR4QXR0ZW1wdHMgPSBwTm9kZS0+dVR4QXR0ZW1wdHM7Ci0gICAgCQkgICAgcE5vZGVMaXN0LT5zTm9kZUxpc3RbampdLndGYWlsdXJlUmF0aW8gPSAoV09SRClwTm9kZS0+dUZhaWx1cmVSYXRpbzsKKyAgICAJCSAgICBwTm9kZUxpc3QtPnNOb2RlTGlzdFtqal0ud0ZhaWx1cmVSYXRpbyA9ICh1bnNpZ25lZCBzaG9ydClwTm9kZS0+dUZhaWx1cmVSYXRpbzsKICAgICAJCSAgICBqaiArKzsKICAgICAJCSAgICBpZiAoamogPj0gcE5vZGVMaXN0LT51SXRlbSkKICAgICAJCSAgICAgICAgYnJlYWs7CkBAIC02NzIsMTQgKzY3MiwxNCBAQAogCSAgICB3cGFfUmVzdWx0LnByb3RvID0gMDsKIAkgICAgd3BhX1Jlc3VsdC5rZXlfbWdtdCA9IDA7CiAJICAgIHdwYV9SZXN1bHQuZWFwX3R5cGUgPSAwOwotCSAgICB3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQgPSBGQUxTRTsKLQkgICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gRkFMU0U7CisJICAgIHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZCA9IGZhbHNlOworCSAgICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZ3cGFfUmVzdWx0LCBwUmVxLT5kYXRhLCBzaXplb2Yod3BhX1Jlc3VsdCkpKSB7CiAgICAgICAgICAgICByZXN1bHQgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX0KIAotaWYod3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPT1UUlVFKSB7CitpZih3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQ9PXRydWUpIHsKICAgICNpZmRlZiBTbmRFdnRfVG9BUEkKICAgIHsKICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7CkBAIC02OTIsNyArNjkyLDcgQEAKICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwRGV2aWNlLT5kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBwSXRlbVNTSUQtPmFieVNTSUQpOwogICAgfQogICAgI2VuZGlmCi0gICAgICAgICBwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID0gVFJVRTsgICAgICAgICAgIC8vaXMgc3VjY2Vzc2Z1bCBwZWVyIHRvIHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD8KKyAgICAgICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSB0cnVlOyAgICAgICAgICAgLy9pcyBzdWNjZXNzZnVsIHBlZXIgdG8gd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPwogfQogCiAgICAgICAgIC8vcHJpbnRrKCJnZXQgcHJpdmF0ZSB3cGFfc3VwcGxpY2FudCBhbm5vdW5jZSBXUEEgU01cbiIpOwpAQCAtNzAwLDcgKzcwMCw3IEBACiAJLy9wcmludGsoIndwYS0tPnByb3RvPSVkXG4iLHdwYV9SZXN1bHQucHJvdG8pOwogCS8vcHJpbnRrKCJ3cGEtLT5rZXktbWdtdD0lZFxuIix3cGFfUmVzdWx0LmtleV9tZ210KTsKIAkvL3ByaW50aygid3BhLS0+ZWFwX3R5cGU9JWRcbiIsd3BhX1Jlc3VsdC5lYXBfdHlwZSk7Ci0JLy9wcmludGsoIndwYS0tPmF1dGhlbnRpY2F0ZWQgaXMgJXNcbiIsKHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD09VFJVRSk/IlRSVUUiOiJGQUxTRSIpOworCS8vcHJpbnRrKCJ3cGEtLT5hdXRoZW50aWNhdGVkIGlzICVzXG4iLCh3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQ9PXRydWUpPyJ0cnVlIjoiZmFsc2UiKTsKIAogCXBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKQEAgLTcxNyw5ICs3MTcsOSBAQAogdm9pZAogdkNvbmZpZ1dFUEtleSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBEV09SRCAgICBkd0tleUluZGV4LAotICAgIFBCWVRFICAgIHBieUtleSwKLSAgICBVTE9ORyAgICB1S2V5TGVuZ3RoCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgKICAgICApCiB7CiAgICAgaW50IGlpOwpAQCAtNzI4LDE1ICs3MjgsMTUgQEAKICAgICBtZW1zZXQoJnBEZXZpY2UtPmFieVdlcEtleVtkd0tleUluZGV4XVswXSwgMCwgV0xBTl9XRVBNQVhfS0VZTEVOKTsKICAgICBtZW1jcHkoJnBEZXZpY2UtPmFieVdlcEtleVtkd0tleUluZGV4XVswXSwgcGJ5S2V5LCB1S2V5TGVuZ3RoKTsKIAotICAgIHBEZXZpY2UtPmJXZXBLZXlBdmFpbGFibGVbZHdLZXlJbmRleF0gPSBUUlVFOworICAgIHBEZXZpY2UtPmJXZXBLZXlBdmFpbGFibGVbZHdLZXlJbmRleF0gPSB0cnVlOwogICAgIHBEZXZpY2UtPmF1V2VwS2V5TGVuZ3RoW2R3S2V5SW5kZXhdID0gdUtleUxlbmd0aDsKIAogICAgIE1BQ3ZTZXREZWZhdWx0S2V5RW50cnkocERldmljZS0+UG9ydE9mZnNldCwgdUtleUxlbmd0aCwgZHdLZXlJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChQRFdPUkQpICYocERldmljZS0+YWJ5V2VwS2V5W2R3S2V5SW5kZXhdWzBdKSwgcERldmljZS0+YnlMb2NhbElEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopICYocERldmljZS0+YWJ5V2VwS2V5W2R3S2V5SW5kZXhdWzBdKSwgcERldmljZS0+YnlMb2NhbElEKTsKIAogICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA8IE5kaXM4MDJfMTFFbmNyeXB0aW9uTm90U3VwcG9ydGVkKSB7CiAgICAgICAgIGZvcihpaT0wOyBpaTxNQVhfR1JPVVBfS0VZOyBpaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJXZXBLZXlBdmFpbGFibGVbaWldID09IFRSVUUpICYmCisgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJXZXBLZXlBdmFpbGFibGVbaWldID09IHRydWUpICYmCiAgICAgICAgICAgICAgICAgKHBEZXZpY2UtPmF1V2VwS2V5TGVuZ3RoW2lpXSA9PSBXTEFOX1dFUDIzMl9LRVlMRU4pKSB7CiAgICAgICAgICAgICAgICAgcERldmljZS0+dUN1cnJlbnRXRVBNb2RlID0gVFhfV0VQX1NXMjMyOwogICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlRGVmYXVsdEtleShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaW9jdGwuaAppbmRleCAwZDEwYzJhLi5iYTg1MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2lvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pb2N0bC5oCkBAIC00NSw5ICs0NSw5IEBACiAvKgogdm9pZCB2Q29uZmlnV0VQS2V5ICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIERXT1JEICAgIGR3S2V5SW5kZXgsCi0gICAgUEJZVEUgICAgcGJ5S2V5LAotICAgIFVMT05HICAgIHVLZXlMZW5ndGgKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5S2V5LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aAogICAgICk7CiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMKaW5kZXggY2Y2OTAzNC4uNDMyMjc2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYwpAQCAtNDUsNyArNDUsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotZXh0ZXJuIFdPUkQgVHhSYXRlX2l3Y29uZmlnOy8vMjAwOC01LTggPGFkZD4gYnkgY2hlc3RlcgorZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtOTksMTYgKzk5LDE2IEBACiAJICAgICAgIGVsc2UKIAkJICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAoOTYtcERldmljZS0+YnlDdXJyU1EpKjEwMC83NjsKIAkgICB9Ci0JICAgaWYocERldmljZS0+YkxpbmtQYXNzICE9VFJVRSkKKwkgICBpZihwRGV2aWNlLT5iTGlua1Bhc3MgIT10cnVlKQogCSAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA9IDA7CiAJICAjZW5kaWYKIAkgICBpZihwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA+IDEwMCkKICAgIAkgICAgICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAxMDA7Ci0gICAgICAgICAgICAgICBwRGV2aWNlLT53c3RhdHMucXVhbC5xdWFsID0oQllURSkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHk7CisgICAgICAgICAgICAgICBwRGV2aWNlLT53c3RhdHMucXVhbC5xdWFsID0odW5zaWduZWQgY2hhcikgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHk7CiAJI2Vsc2UKIAlwRGV2aWNlLT53c3RhdHMucXVhbC5xdWFsID0gcERldmljZS0+YnlDdXJyU1E7CiAJI2VuZGlmCi0JUkZ2UlNTSVRvZEJtKHBEZXZpY2UsIChCWVRFKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CisJUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CiAJcERldmljZS0+d3N0YXRzLnF1YWwubGV2ZWwgPSBsZEJtOwogCS8vcERldmljZS0+d3N0YXRzLnF1YWwubGV2ZWwgPSAweDEwMCAtIHBEZXZpY2UtPnVDdXJyUlNTSTsKIAlwRGV2aWNlLT53c3RhdHMucXVhbC5ub2lzZSA9IDA7CkBAIC0xMTYsNyArMTE2LDcgQEAKIAlwRGV2aWNlLT53c3RhdHMuZGlzY2FyZC5ud2lkID0gMDsKIAlwRGV2aWNlLT53c3RhdHMuZGlzY2FyZC5jb2RlID0gMDsKIAlwRGV2aWNlLT53c3RhdHMuZGlzY2FyZC5mcmFnbWVudCA9IDA7Ci0JcERldmljZS0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IChVMzIpcERldmljZS0+c2NTdGF0aXN0aWMuZHdUc3JFcnI7CisJcERldmljZS0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9ICh1bnNpZ25lZCBsb25nKXBEZXZpY2UtPnNjU3RhdGlzdGljLmR3VHNyRXJyOwogCXBEZXZpY2UtPndzdGF0cy5kaXNjYXJkLm1pc2MgPSAwOwogCXBEZXZpY2UtPndzdGF0cy5taXNzLmJlYWNvbiA9IDA7CiAKQEAgLTE3NSw3ICsxNzUsNyBAQAogCVBTRGV2aWNlCSAgICAgICAgcERldmljZSA9IChQU0RldmljZSluZXRkZXZfcHJpdihkZXYpOwogCSBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAJc3RydWN0IGl3X3NjYW5fcmVxICAqcmVxID0gKHN0cnVjdCBpd19zY2FuX3JlcSAqKWV4dHJhOwotCUJZVEUgICAgICAgICAgICAgICAgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisJdW5zaWduZWQgY2hhciBhYnlTY2FuU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKIAlQV0xBTl9JRV9TU0lEICAgICAgIHBJdGVtU1NJRD1OVUxMOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DU0lXU0NBTiBcbiIpOwogCkBAIC0zMDksNyArMzA5LDcgQEAKICAgICAgICAJCS8vQUREIHF1YWxpdHkKICAgICAgICAgICAgIG1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJICAgICAgICBpd2UuY21kID0gSVdFVlFVQUw7Ci0JICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBCU1MtPnVSU1NJKSwgJmxkQm0pOworCSAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwQlNTLT51UlNTSSksICZsZEJtKTsKIAkJICAgIGl3ZS51LnF1YWwubGV2ZWwgPSBsZEJtOwogCSAgICAgICAgaXdlLnUucXVhbC5ub2lzZSA9IDA7CiAvLzIwMDgtMDQwOS0wMSwgPEFkZD4gYnkgRWluc24gTGl1CkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCSAgcERldmljZS0+dUNoYW5uZWwgPSBjaGFubmVsOwogIAkJCSAvLzIwMDctMDIwNy0wNCw8QWRkPiBieSBFaW5zbkxpdQogCQkJIC8vTWFrZSBjaGFuZ2UgZWZmZWN0IGF0IG9uY2UKLQkJCSAgcERldmljZS0+YkNvbW1pdCA9IFRSVUU7CisJCQkgIHBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwogCQl9CiAJfQogCkBAIC00ODksNyArNDg5LDcgQEAKIAkgICAgaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19JQlNTX1NUQSkgewogICAgICAgICAgICAgcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfSUJTU19TVEE7CiAgICAgICAgICAgICBpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7Ci0JCSAgICAgICAgcERldmljZS0+YkNvbW1pdCA9IFRSVUU7CisJCSAgICAgICAgcERldmljZS0+YkNvbW1pdCA9IHRydWU7CiAgICAJCSAgICB9CiAJCX0KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAic2V0IG1vZGUgdG8gYWQtaG9jIFxuIik7CkBAIC00OTksNyArNDk5LDcgQEAKIAkgICAgaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19FU1NfU1RBKSB7CiAgICAgICAgICAgICBwTWdtdC0+ZUNvbmZpZ01vZGUgPSBXTUFDX0NPTkZJR19FU1NfU1RBOwogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewotCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSBUUlVFOworCQkgICAgICAgIHBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwogICAgCQkgICAgfQogCQl9CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInNldCBtb2RlIHRvIGluZnJhc3RydWN0dXJlIFxuIik7CkBAIC01MTMsNyArNTEzLDcgQEAKIAkgICAgaWYgKHBNZ210LT5lQ29uZmlnTW9kZSAhPSBXTUFDX0NPTkZJR19BUCkgewogICAgICAgICAgICAgcE1nbXQtPmVDb25maWdNb2RlID0gV01BQ19DT05GSUdfQVA7CiAgICAgICAgICAgICBpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7Ci0JCSAgICAgICAgcERldmljZS0+YkNvbW1pdCA9IFRSVUU7CisJCSAgICAgICAgcERldmljZS0+YkNvbW1pdCA9IHRydWU7CiAgICAJCSAgICB9CiAJCX0KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAic2V0IG1vZGUgdG8gQWNjZXNzIFBvaW50IFxuIik7CkBAIC01NzcsNyArNTc3LDcgQEAKIHsKIAlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKIAlpbnQJCWksazsKLSAgICBCWVRFIGFieVN1cHBvcnRlZFJhdGVzWzEzXT0gezB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MGMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkMsIDB4OTB9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07CiAKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXUkFOR0UgXG4iKTsKQEAgLTY4OCw3ICs2ODgsNyBAQAogCVBTRGV2aWNlCSAgICAgICAgcERldmljZSA9IChQU0RldmljZSluZXRkZXZfcHJpdihkZXYpOwogICAgIFBTTWdtdE9iamVjdCAgICAgICAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgICBpbnQgcmMgPSAwOwotICAgIEJZVEUgICAgICAgICAgICAgICAgIFplcm9CU1NJRFtXTEFOX0JTU0lEX0xFTl09ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKKyAgICB1bnNpZ25lZCBjaGFyIFplcm9CU1NJRFtXTEFOX0JTU0lEX0xFTl09ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DU0lXQVAgXG4iKTsKIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSA9PSAgV01BQ19JU19TQ0FOTklORykgewpAQCAtNzAxLDEyICs3MDEsMTIgQEAKIAllbHNlIHsKIAkJbWVtY3B5KHBNZ210LT5hYnlEZXNpcmVCU1NJRCwgd3JxLT5zYV9kYXRhLCA2KTsKIAkJICAgICAgICAgICAgICAgIC8vMjAwOC0wNDA5LTA1LCA8QWRkPiBieSBFaW5zbiBMaXUKLQkJaWYoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSAmJgorCQlpZigocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpICYmCiAgICAgICAgICAgICAgICAgICAgICAobWVtY21wKHBNZ210LT5hYnlEZXNpcmVCU1NJRCwgcE1nbXQtPmFieUN1cnJCU1NJRCwgNik9PSAwKSl7CiAJCQlyZXR1cm4gcmM7CiAJCQl9CiAJLy9taWtlIDphZGQKLQkgaWYgKChJU19CUk9BRENBU1RfQUREUkVTUyhwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB8fAorCSBpZiAoKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBNZ210LT5hYnlEZXNpcmVCU1NJRCkpIHx8CiAJICAgICAobWVtY21wKHBNZ210LT5hYnlEZXNpcmVCU1NJRCwgWmVyb0JTU0lELCA2KSA9PSAwKSl7CiAJICAgICAgUFJJTlRfSygiU0lPQ1NJV0FQOmludmFsaWQgZGVzaXJlZCBCU1NJRCByZXR1cm4hXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiByYzsKQEAgLTcxNCwxMCArNzE0LDEwIEBACiAgICAgICAgLy9taWtlIGFkZDogaWYgZGVzaXJlZCBBUCBpcyBoaWRkZW4gc3NpZCh0aGVyZSBhcmUgdHdvIHNhbWUgQlNTSUQgaW4gbGlzdCksCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICB0aGVuIGlnbm9yZSxiZWNhdXNlIHlvdSBkb24ndCBrbm93biB3aGljaCBvbmUgdG8gYmUgY29ubmVjdCB3aXRoPz8KICAgICAgICAJewotICAgICAgICAgICBVSU5UICAgICAgICAgICAgaWkgLCB1U2FtZUJzc2lkTnVtPTA7CisgICAgICAgICAgIHVuc2lnbmVkIGludCBpaSAsIHVTYW1lQnNzaWROdW09MDsKICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELHBNZ210LT5hYnlEZXNpcmVCU1NJRCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcE1nbXQtPmFieURlc2lyZUJTU0lEKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdVNhbWVCc3NpZE51bSsrOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQpAQCAtNzI4LDcgKzcyOCw3IEBACiAgICAgICAgCX0KIAogICAgICAgICBpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7Ci0JCSAgICBwRGV2aWNlLT5iQ29tbWl0ID0gVFJVRTsKKwkJICAgIHBEZXZpY2UtPmJDb21taXQgPSB0cnVlOwogICAgCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTc1MSw3ICs3NTEsNyBAQAogCiAgICAgbWVtY3B5KHdycS0+c2FfZGF0YSwgcE1nbXQtPmFieUN1cnJCU1NJRCwgNik7CiAgICAvLzIwMDgtMDQxMCw8TW9kaWZ5PiBieSBFaW5zbiBMaXUKLSAgICBpZiAoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBGQUxTRSkgJiYgKHBNZ210LT5lQ3Vyck1vZGUgIT0gV01BQ19NT0RFX0VTU19BUCkpCisgICAgaWYgKChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gZmFsc2UpICYmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9FU1NfQVApKQogICAgICAgICBtZW1zZXQod3JxLT5zYV9kYXRhLCAwLCA2KTsKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKQEAgLTgzMCwxMSArODMwLDExIEBACiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogICAgIFBXTEFOX0lFX1NTSUQgICAgICAgcEl0ZW1TU0lEOwogICAvLzIwMDgtMDQwOS0wNSwgPEFkZD4gYnkgRWluc24gTGl1Ci0gICAgQllURSAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgbGVuOwogCiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV0VTU0lEIFxuIik7Ci0gcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOworIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBmYWxzZTsKIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSA9PSAgV01BQ19JU19TQ0FOTklORykgewogICAgICAgICAvLyBJbiBzY2FubmluZy4uCiAgICAgIHByaW50aygiU0lPQ1NJV0VTU0lEKD8/KS0tPkluIHNjYW5uaW5nLi4uXG4iKTsKQEAgLTg0OCw3ICs4NDgsNyBAQAogCSAgICBQUklOVF9LKCJzZXQgZXNzaWQgdG8gJ2FueScgXG4iKTsKICAgICAgICAgICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAgICAgICAgICAgICAvL1Vua25vd24gZGVzaXJlZCBBUCxzbyBoZXJlIG5lZWQgbm90IGFzc29jaWF0ZT8/Ci0gICAgICAgICAgICAvL2lmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkgIHsKKyAgICAgICAgICAgIC8vaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKSAgewogICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAjZW5kaWYKQEAgLTg2OCw3ICs4NjgsNyBAQAogCXByaW50aygic2V0IGVzc2lkIHRvICVzIFxuIixwSXRlbVNTSUQtPmFieVNTSUQpOwogCQkvLzIwMDgtMDQwOS0wNSwgPEFkZD4gYnkgRWluc24gTGl1CiAgICAgICAgbGVuPShwSXRlbVNTSUQtPmxlbiA+ICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5sZW4pP3BJdGVtU1NJRC0+bGVuOigoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQpLT5sZW47Ci0gICBpZigocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpICYmCisgICBpZigocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpICYmCiAgIAkobWVtY21wKHBJdGVtU1NJRC0+YWJ5U1NJRCwoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+YWJ5U1NJRCxsZW4pPT0wKSkKICAgICAgICAgIHJldHVybiAwOwogCkBAIC04ODEsMTIgKzg4MSwxMiBAQAogI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICAvL1dleHQgd2lsIG9yZGVyIGFub3RoZXIgY29tbWFuZCBvZiBzaXdhcCB0byBsaW5rIHdpdGggZGVzaXJlZCBBUCwKICAvL3NvIGhlcmUgbmVlZCBub3QgYXNzb2NpYXRlPz8KLSAgaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKSAgeworICBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IHRydWUpICB7CiAgICAgICAgIC8qKioqKioqc2VhcmNoIGlmICBpbiBoaWRkZW4gc3NpZCBtb2RlICoqKiovCiAgICAgICAgIHsKICAgICAgICAgICAgUEtub3duQlNTICAgICAgIHBDdXJyID0gTlVMTDsKLSAgICAgICAgICAgQllURSAgICAgICAgICAgICAgICAgICBhYnlUbXBEZXNpcmVTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotCSAgVUlOVCAgICAgICAgICAgIGlpICwgdVNhbWVCc3NpZE51bT0wOworICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFieVRtcERlc2lyZVNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07CisJICB1bnNpZ25lZCBpbnQgaWkgLCB1U2FtZUJzc2lkTnVtPTA7CiAKIAkgIG1lbWNweShhYnlUbXBEZXNpcmVTU0lELHBNZ210LT5hYnlEZXNpcmVTU0lELHNpemVvZihhYnlUbXBEZXNpcmVTU0lEKSk7CiAgICAgICAgICAgICBwQ3VyciA9IEJTU3BTZWFyY2hCU1NMaXN0KHBEZXZpY2UsCkBAIC05MDYsNyArOTA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgYnkgbWVhbnMgb2YganVkZ2luZyBpZiB0aGVyZSBhcmUgdHdvIHNhbWUgQlNTSUQgZXhpc3QgaW4gbGlzdCA/CiAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lEKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1U2FtZUJzc2lkTnVtKys7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9CkBAIC05MjcsNyArOTI3LDcgQEAKIAl9CiAKICAgICBpZiAocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSB7Ci0JICAgIHBEZXZpY2UtPmJDb21taXQgPSBUUlVFOworCSAgICBwRGV2aWNlLT5iQ29tbWl0ID0gdHJ1ZTsKIAl9CiAKIApAQCAtOTgxLDcgKzk4MSw3IEBACiAgICAgaW50IHJjID0gMDsKIAl1OAlicmF0ZSA9IDA7CiAJaW50CWk7Ci0JQllURSBhYnlTdXBwb3J0ZWRSYXRlc1sxM109IHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwfTsKKwl1bnNpZ25lZCBjaGFyIGFieVN1cHBvcnRlZFJhdGVzWzEzXT0gezB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MGMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkMsIDB4OTB9OwogCiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV1JBVEUgXG4iKTsKQEAgLTEwMzMsNyArMTAzMyw3IEBACiAJCS8vIEZpeGVkIG1vZGUKIAkJLy8gT25lIHJhdGUsIGZpeGVkCiAJcHJpbnRrKCJSYXRlIEZpeFxuIik7Ci0JCXBEZXZpY2UtPmJGaXhSYXRlID0gVFJVRTsKKwkJcERldmljZS0+YkZpeFJhdGUgPSB0cnVlOwogICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSYmIChicmF0ZSA+IDMpKSB7CiAJICAgIHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA9IDM7CiAgICAgICAgIH0KQEAgLTEwNDQsNyArMTA0NCw3IEBACiAKIAl9CiAJZWxzZSB7Ci0gICAgICAgIHBEZXZpY2UtPmJGaXhSYXRlID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJGaXhSYXRlID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA9IDEzOwogCXByaW50aygiYXV0byByYXRlOmNvbm5lY3Rpb25fcmF0ZSBpcyAxM1xuIik7CiAgICAgIH0KQEAgLTEwNjgsMTEgKzEwNjgsMTEgQEAKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXUkFURSBcbiIpOwogICAgIHsKLSAgICAgICAgQllURSBhYnlTdXBwb3J0ZWRSYXRlc1sxM109IHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwfTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhYnlTdXBwb3J0ZWRSYXRlc1sxM109IHsweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDBjLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDLCAweDkwfTsKIAkgICAgaW50IGJyYXRlID0gMDsKIC8vMjAwOC01LTggPG1vZGlmeT4gYnkgY2hlc3RlcgogaWYocERldmljZS0+YkxpbmtQYXNzKXsKLWlmKHBEZXZpY2UtPmJGaXhSYXRlID09IFRSVUUpeworaWYocERldmljZS0+YkZpeFJhdGUgPT0gdHJ1ZSl7CiAJCWlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPCAxMykgewogCSAgICAgICAgYnJhdGUgPSBhYnlTdXBwb3J0ZWRSYXRlc1twRGV2aWNlLT51Q29ubmVjdGlvblJhdGVdOwogCSAgICB9ZWxzZSB7CkBAIC0xMTA4LDggKzExMDgsOCBAQAogLy8gICAgICAgICAgICAgICAgYnJhdGUgPSBhYnlTdXBwb3J0ZWRSYXRlc1twRGV2aWNlLT53Q3VycmVudFJhdGVdOwogCSAgICB3cnEtPnZhbHVlID0gYnJhdGUgKiA1MDAwMDA7CiAJICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgcmF0ZSwgc2V0IGF1dG8KLQkgICAgaWYgKHBEZXZpY2UtPmJGaXhSYXRlID09IFRSVUUpCi0JICAgICAgICB3cnEtPmZpeGVkID0gVFJVRTsKKwkgICAgaWYgKHBEZXZpY2UtPmJGaXhSYXRlID09IHRydWUpCisJICAgICAgICB3cnEtPmZpeGVkID0gdHJ1ZTsKICAgICB9CiAKIApAQCAtMTI5NCw3ICsxMjk0LDcgQEAKIHsKICAgICBQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7Ci0JRFdPUkQgZHdLZXlJbmRleCA9IChEV09SRCkod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CisJdW5zaWduZWQgbG9uZyBkd0tleUluZGV4ID0gKHVuc2lnbmVkIGxvbmcpKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOwogCWludCBpaSx1dSwgcmMgPSAwOwogCWludCBpbmRleCA9ICh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKIApAQCAtMTM1OCw3ICsxMzU4LDcgQEAKICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewogICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICBLZXliU2V0RGVmYXVsdEtleSgmKHBEZXZpY2UtPnNLZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEV09SRCkoZHdLZXlJbmRleCB8ICgxIDw8IDMxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGR3S2V5SW5kZXggfCAoMSA8PCAzMSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCXdycS0+bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YWJ5S2V5LApAQCAtMTM2OCwzOCArMTM2OCwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKEJZVEUpZHdLZXlJbmRleDsKKyAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9ICh1bnNpZ25lZCBjaGFyKWR3S2V5SW5kZXg7CiAgICAgICAgIHBEZXZpY2UtPnVLZXlMZW5ndGggPSB3cnEtPmxlbmd0aDsKLSAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gVFJVRTsKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSB0cnVlOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKIAogCQl9ZWxzZSBpZihpbmRleD4wKXsKIAkvL3doZW4gdGhlIGxlbmd0aCBpcyAwIHRoZSByZXF1ZXN0IG9ubHkgY2hhbmdlcyB0aGUgZGVmYXVsdCB0cmFuc21pdCBrZXkgaW5kZXgKIAkvL2NoZWNrIHRoZSBuZXcga2V5IGhhcyBhIG5vbiB6ZXJvIGxlbmdldAotCWlmKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlPT1GQUxTRSkKKwlpZihwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZT09ZmFsc2UpCiAJewogCQlyYyA9IC1FSU5WQUw7CiAgICAgICAgIAlyZXR1cm4gcmM7CiAJfQogCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkp1c3Qgc2V0IERlZmF1bHQga2V5IEluZGV4OlxuIik7CiAJcGtleXRhYj0mKHBEZXZpY2UtPnNLZXkuS2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXSk7Ci0JaWYocGtleXRhYi0+R3JvdXBLZXlbKEJZVEUpZHdLZXlJbmRleF0udUtleUxlbmd0aD09MCl7CisJaWYocGtleXRhYi0+R3JvdXBLZXlbKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleF0udUtleUxlbmd0aD09MCl7CiAJCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRlZmF1bHQga2V5IGxlbiBpcyAwXG4iKTsKIAkJcmMgPSAtRUlOVkFMOwogICAgICAgCSAgCXJldHVybiByYzsKIAkJfQotCSBwRGV2aWNlLT5ieUtleUluZGV4ID0oQllURSlkd0tleUluZGV4OworCSBwRGV2aWNlLT5ieUtleUluZGV4ID0odW5zaWduZWQgY2hhcilkd0tleUluZGV4OwogCSBwa2V5dGFiLT5kd0dUS2V5SW5kZXggPWR3S2V5SW5kZXggfCAoMSA8PCAzMSk7Ci0JIHBrZXl0YWItPkdyb3VwS2V5WyhCWVRFKWR3S2V5SW5kZXhdLmR3S2V5SW5kZXg9ZHdLZXlJbmRleCB8ICgxIDw8IDMxKTsKKwkgcGtleXRhYi0+R3JvdXBLZXlbKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleF0uZHdLZXlJbmRleD1kd0tleUluZGV4IHwgKDEgPDwgMzEpOwogCX0KIAogfWVsc2Ugey8vZGlzYWJsZSB0aGUga2V5CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRpc2FibGUgV0VQIGZ1bmN0aW9uXG4iKTsKLQlpZihwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZT09RkFMU0UpCisJaWYocERldmljZS0+YkVuY3J5cHRpb25FbmFibGU9PWZhbHNlKQogCQlyZXR1cm4gMDsKLQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gRkFMU0U7CisJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtMTQ1MCw3ICsxNDUwLDcgQEAKICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewogICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICBLZXliU2V0RGVmYXVsdEtleSgmKHBEZXZpY2UtPnNLZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEV09SRCkocERldmljZS0+YnlLZXlJbmRleCB8ICgxIDw8IDMxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHBEZXZpY2UtPmJ5S2V5SW5kZXggfCAoMSA8PCAzMSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnVLZXlMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5hYnlLZXksCkBAIC0xNDYwLDEwICsxNDYwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICB9Ci0gICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAoQllURSlkd0tleUluZGV4OworICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleDsKICAgICAgICAgcERldmljZS0+dUtleUxlbmd0aCA9IHdycS0+bGVuZ3RoOwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBUUlVFOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogCiAJCS8vIERvIHdlIHdhbnQgdG8ganVzdCBzZXQgdGhlIHRyYW5zbWl0IGtleSBpbmRleCA/CkBAIC0xNDc5LDggKzE0NzksOCBAQAogCWlmKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpewogCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRpc2FibGUgV0VQIGZ1bmN0aW9uXG4iKTsKLQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gZmFsc2U7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKICAgICAgICAgaWYgKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX09QRU5FRCkgewogICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CkBAIC0xNDkzLDExICsxNDkzLDExIEBACiAKIAlpZih3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRW5hYmxlIFdFUCAmIFNoYXJlS2V5IFN5c3RlbVxuIik7Ci0JCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBUUlVFOworCQlwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gdHJ1ZTsKIAl9CiAJaWYod3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkVuYWJsZSBXRVAgJiBPcGVuIFN5c3RlbVxuIik7Ci0JCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBGQUxTRTsKKwkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogICAgIFBTTWdtdE9iamVjdCAgICAgICAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgICBpbnQgcmMgPSAwOwogICAgIGNoYXIgYWJ5S2V5W1dMQU5fV0VQMjMyX0tFWUxFTl07Ci0JVUlOVCBpbmRleCA9IChVSU5UKSh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSAodW5zaWduZWQgaW50KSh3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKIAlQU0tleUl0ZW0gICBwS2V5ID0gTlVMTDsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXRU5DT0RFXG4iKTsKQEAgLTE1NDksNyArMTU0OSw3IEBACiAJZWxzZQogCQl3cnEtPmZsYWdzIHw9ICBJV19FTkNPREVfT1BFTjsKIAotCWlmIChLZXliR2V0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHIsIChCWVRFKWluZGV4ICwgJnBLZXkpKXsKKwlpZiAoS2V5YkdldEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCcm9hZGNhc3RBZGRyLCAodW5zaWduZWQgY2hhcilpbmRleCAsICZwS2V5KSl7CiAgICAgICAgIHdycS0+bGVuZ3RoID0gcEtleS0+dUtleUxlbmd0aDsKICAgICAgICAgbWVtY3B5KGFieUtleSwgcEtleS0+YWJ5S2V5LCAgcEtleS0+dUtleUxlbmd0aCk7CiAvLzIwMDctMDIwNy0wNiw8TW9kaWZ5PiBieSBFaW5zbkxpdQpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIAlQU01nbXRPYmplY3QJCXBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAJY2hhciBhYnlLZXlbV0xBTl9XRVAyMzJfS0VZTEVOXTsKIAotCVVJTlQgaW5kZXggPSAoVUlOVCkod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CisJdW5zaWduZWQgaW50IGluZGV4ID0gKHVuc2lnbmVkIGludCkod3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7CiAJUFNLZXlJdGVtCXBLZXkgPSBOVUxMOwogCiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdFTkNPREVcbiIpOwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAkJCQkgIG1lbWNweShhYnlLZXksIHBLZXktPmFieUtleSwJcEtleS0+dUtleUxlbmd0aCk7CiAJCQkJICBtZW1jcHkoZXh0cmEsICBhYnlLZXksIFdMQU5fV0VQMjMyX0tFWUxFTik7CiAJCQkgICB9Ci0JfWVsc2UgaWYgKEtleWJHZXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkciwgKEJZVEUpaW5kZXggLCAmcEtleSkpeworCX1lbHNlIGlmIChLZXliR2V0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHIsICh1bnNpZ25lZCBjaGFyKWluZGV4ICwgJnBLZXkpKXsKIAkJCXdycS0+bGVuZ3RoID0gcEtleS0+dUtleUxlbmd0aDsKIAkJCW1lbWNweShhYnlLZXksIHBLZXktPmFieUtleSwgIHBLZXktPnVLZXlMZW5ndGgpOwogCQltZW1jcHkoZXh0cmEsICBhYnlLZXksIFdMQU5fV0VQMjMyX0tFWUxFTik7CkBAIC0xNzI5LDggKzE3MjksOCBAQAogICAgIGxvbmcgbGRCbTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXU0VOUyBcbiIpOwotICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MgPT0gVFJVRSkgewotICAgICAgICBSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBEZXZpY2UtPnVDdXJyUlNTSSksICZsZEJtKTsKKyAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpIHsKKyAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7CiAJICAgIHdycS0+dmFsdWUgPSBsZEJtOwogCX0KIAllbHNlIHsKQEAgLTE3NjMsNyArMTc2Myw3IEBACiAJCXdwYV92ZXJzaW9uID0gd3JxLT52YWx1ZTsKIAkJaWYod3JxLT52YWx1ZSA9PSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKSB7CiAJCSAgICAgICBQUklOVF9LKCJpd2N0bF9zaXdhdXRoOnNldCBXUEFERVYgdG8gZGlzYWJsZSBhdCAxPz8/Pz8/XG4iKTsKLQkJCS8vcERldmljZS0+YldQQURldkVuYWJsZSA9IEZBTFNFOworCQkJLy9wRGV2aWNlLT5iV1BBRGV2RW5hYmxlID0gZmFsc2U7CiAJCX0KIAkJZWxzZSBpZih3cnEtPnZhbHVlID09IElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSU5UX0soIml3Y3RsX3Npd2F1dGg6c2V0IFdQQURFViB0byBXUEExKioqKioqXG4iKTsKQEAgLTE3NzEsNyArMTc3MSw3IEBACiAJCWVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICBQUklOVF9LKCJpd2N0bF9zaXdhdXRoOnNldCBXUEFERVYgdG8gV1BBMioqKioqKlxuIik7CiAJCX0KLQkJLy9wRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID1UUlVFOworCQkvL3BEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPXRydWU7CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CiAJCXBhaXJ3aXNlID0gd3JxLT52YWx1ZTsKQEAgLTE4MTgsOSArMTgxOCw5IEBACiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKIAkJaWYod3JxLT52YWx1ZT09SVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pewotCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobT1GQUxTRTsKKwkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG09ZmFsc2U7CiAJCX1lbHNlIGlmKHdycS0+dmFsdWU9PUlXX0FVVEhfQUxHX1NIQVJFRF9LRVkpewotCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobT1UUlVFOworCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobT10cnVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKQEAgLTE4MzMsMTMgKzE4MzMsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKIAkJcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSAhIXdycS0+dmFsdWU7Ci0JCWlmKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IEZBTFNFKXsKKwkJaWYocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gZmFsc2UpewogCQkJd3BhX3ZlcnNpb24gPSAwOwogCQkJcGFpcndpc2UgPSAwOwogCQkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwotCQkJcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOwotCQkJcE1nbXQtPmVBdXRoZW5Nb2RlID0gRkFMU0U7Ci0JCQkvL3BEZXZpY2UtPmJXUEFEZXZFbmFibGUgPSBGQUxTRTsKKwkJCXBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKKwkJCXBNZ210LT5lQXV0aGVuTW9kZSA9IGZhbHNlOworCQkJLy9wRGV2aWNlLT5iV1BBRGV2RW5hYmxlID0gZmFsc2U7CiAJCX0KIAogCQlicmVhazsKQEAgLTE4NTIsOSArMTg1Miw5IEBACiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicGFpcndpc2UgPSAlZFxuIixwYWlyd2lzZSk7CiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSAlZFxuIixwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyk7CiAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicE1nbXQtPmVBdXRoZW5Nb2RlICA9ICVkXG4iLHBNZ210LT5lQXV0aGVuTW9kZSk7Ci0JREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9ICVzXG4iLHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0/IlRSVUUiOiJGQUxTRSIpOwotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gJXNcbiIscERldmljZS0+YkVuY3J5cHRpb25FbmFibGU/IlRSVUUiOiJGQUxTRSIpOwotCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBEZXZpY2UtPmJXUEFEZXZFbmFibGUgPSAlc1xuIixwRGV2aWNlLT5iV1BBRGV2RW5hYmxlPyJUUlVFIjoiRkFMU0UiKTsKKwlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gJXNcbiIscE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobT8idHJ1ZSI6ImZhbHNlIik7CisJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSAlc1xuIixwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZT8idHJ1ZSI6ImZhbHNlIik7CisJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAicERldmljZS0+YldQQURldkVuYWJsZSA9ICVzXG4iLHBEZXZpY2UtPmJXUEFEZXZFbmFibGU/InRydWUiOiJmYWxzZSIpOwogKi8KICAgIHJldHVybiByZXQ7CiB9CkBAIC0yMDU1LDEyICsyMDU1LDEyIEBACiBpZiggcERldmljZS0+YndleHRjb3VudCA9PSA0KSB7CiAgICAgcHJpbnRrKCJTSU9DU0lXRU5DT0RFRVhUOkVuYWJsZSBXUEEgV0VYVCBTVVBQT1JUISEhISFcbiIpOwogIHBEZXZpY2UtPmJ3ZXh0Y291bnQ9MDsKLSAgIHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPSBUUlVFOworICAgcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IHRydWU7CiAJCSB9CiAvLyoqKioqKgogCiAJCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotIHJldCA9IHdwYV9zZXRfa2V5cyhwRGV2aWNlLCBwYXJhbSwgVFJVRSk7CisgcmV0ID0gd3BhX3NldF9rZXlzKHBEZXZpY2UsIHBhcmFtLCB0cnVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIAogZXJyb3I6CkBAIC0yMDk2LDEwICsyMDk2LDEwIEBACiAJc3dpdGNoKG1sbWUtPmNtZCl7CiAJY2FzZSBJV19NTE1FX0RFQVVUSDoKIAkJLy90aGlzIGNvbW1hbmQgc2VlbXMgdG8gYmUgbm90IGNvbXBsZXRlLHBsZWFzZSB0ZXN0IGl0IC0tZWluc25saXUKLQkJLy9iU2NoZWR1bGVDb21tYW5kKCh2b2lkICopIHBEZXZpY2UsIFdMQU5fQ01EX0RFQVVUSCwgKFBCWVRFKSZyZWFzb24pOworCQkvL2JTY2hlZHVsZUNvbW1hbmQoKHZvaWQgKikgcERldmljZSwgV0xBTl9DTURfREVBVVRILCAodW5zaWduZWQgY2hhciAqKSZyZWFzb24pOwogCQlicmVhazsKIAljYXNlIElXX01MTUVfRElTQVNTT0M6Ci0JCWlmKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKXsKKwkJaWYocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpewogCQkJCQkgIHByaW50aygiaXdjdGxfc2l3bWxtZS0tLT5zZW5kIERJU0FTU09DSUFURVxuIik7CiAJCSAgLy9jbGVhciByZWxhdGVkIGZsYWdzCiAJCSAgIG1lbXNldChwTWdtdC0+YWJ5RGVzaXJlQlNTSUQsIDB4RkYsNik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuYwppbmRleCBiZmM1YzUwLi4wZmY4ZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmMKQEAgLTU5LDIyICs1OSwyMiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQKLXNfdkNoZWNrS2V5VGFibGVWYWxpZCAoUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwgRFdPUkRfUFRSIGR3SW9CYXNlKQorc192Q2hlY2tLZXlUYWJsZVZhbGlkIChQU0tleU1hbmFnZW1lbnQgcFRhYmxlLCB1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIGludCBpOwogCiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewotICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPT0gRkFMU0UpICYmCi0gICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVswXS5iS2V5VmFsaWQgPT0gRkFMU0UpICYmCi0gICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsxXS5iS2V5VmFsaWQgPT0gRkFMU0UpICYmCi0gICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsyXS5iS2V5VmFsaWQgPT0gRkFMU0UpICYmCi0gICAgICAgICAgICAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVszXS5iS2V5VmFsaWQgPT0gRkFMU0UpCisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBmYWxzZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WzBdLmJLZXlWYWxpZCA9PSBmYWxzZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WzFdLmJLZXlWYWxpZCA9PSBmYWxzZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WzJdLmJLZXlWYWxpZCA9PSBmYWxzZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WzNdLmJLZXlWYWxpZCA9PSBmYWxzZSkKICAgICAgICAgICAgICkgewogCi0gICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9IEZBTFNFOworICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPSBmYWxzZTsKICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCA9IDA7Ci0gICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJTb2Z0V0VQID0gRkFMU0U7CisgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJTb2Z0V0VQID0gZmFsc2U7CiAgICAgICAgICAgICBNQUN2RGlzYWJsZUtleUVudHJ5KGR3SW9CYXNlLCBpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk2LDIyICs5NiwyMiBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIEtleXZJbml0VGFibGUgKFBTS2V5TWFuYWdlbWVudCBwVGFibGUsIERXT1JEX1BUUiBkd0lvQmFzZSkKK3ZvaWQgS2V5dkluaXRUYWJsZSAoUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKICAgICBpbnQgaTsKICAgICBpbnQgamo7CiAKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID0gRkFMU0U7Ci0gICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID0gZmFsc2U7CisgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gZmFsc2U7CiAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkucHZLZXlUYWJsZSA9ICh2b2lkICopJnBUYWJsZS0+S2V5VGFibGVbaV07CiAgICAgICAgIGZvciAoamo9MDsgamogPCBNQVhfR1JPVVBfS0VZOyBqaisrKSB7Ci0gICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2pqXS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbampdLmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtqal0ucHZLZXlUYWJsZSA9ICh2b2lkICopJnBUYWJsZS0+S2V5VGFibGVbaV07CiAgICAgICAgIH0KICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS53S2V5Q3RsID0gMDsKICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXggPSAwOwotICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLmJTb2Z0V0VQID0gRkFMU0U7CisgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uYlNvZnRXRVAgPSBmYWxzZTsKICAgICAgICAgTUFDdkRpc2FibGVLZXlFbnRyeShkd0lvQmFzZSwgaSk7CiAgICAgfQogfQpAQCAtMTI4LDEzICsxMjgsMTMgQEAKICAqICBPdXQ6CiAgKiAgICAgIHBLZXkgICAgICAgICAgICAtIEtleSByZXR1cm4KICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgZm91bmQgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgZm91bmQgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJHZXRLZXkgKAorYm9vbCBLZXliR2V0S2V5ICgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKQogewpAQCAtMTQ0LDMxICsxNDQsMzEgQEAKIAogICAgICpwS2V5ID0gTlVMTDsKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAgICAgICAgICAgICBpZiAoZHdLZXlJbmRleCA9PSAweEZGRkZGRkZGKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICAqcEtleSA9ICYocFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChkd0tleUluZGV4IDwgTUFYX0dST1VQX0tFWSkgewotICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXhdLmJLZXlWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleF0uYktleVZhbGlkID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgKnBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleF0pOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAKQEAgLTE4NiwzNyArMTg2LDM3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VzcyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgS2V5YlNldEtleSAoCitib29sIEtleWJTZXRLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIFVMT05HICAgICAgICAgICB1S2V5TGVuZ3RoLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGgsCiAgICAgUFFXT1JEICAgICAgICAgIHBLZXlSU0MsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUtleSwKLSAgICBCWVRFICAgICAgICAgICAgYnlLZXlEZWNNb2RlLAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZSwKLSAgICBCWVRFICAgICAgICAgICAgYnlMb2NhbElECisgICAgdW5zaWduZWQgY2hhciAqcGJ5S2V5LAorICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlEZWNNb2RlLAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsCisgICAgdW5zaWduZWQgY2hhciBieUxvY2FsSUQKICAgICApCiB7CiAgICAgaW50ICAgICAgICAgaSxqOwotICAgIFVJTlQgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKICAgICBQU0tleUl0ZW0gICBwS2V5OwotICAgIFVJTlQgICAgICAgIHVLZXlJZHg7CisgICAgdW5zaWduZWQgaW50IHVLZXlJZHg7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkVudGVyIEtleWJTZXRLZXk6ICVsWFxuIiwgZHdLZXlJbmRleCk7CiAKICAgICBqID0gKE1BWF9LRVlfVEFCTEUtMSk7CiAgICAgZm9yIChpPTA7aTwoTUFYX0tFWV9UQUJMRS0xKTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBGQUxTRSkgJiYKKyAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBmYWxzZSkgJiYKICAgICAgICAgICAgIChqID09IChNQVhfS0VZX1RBQkxFLTEpKSkgewogICAgICAgICAgICAgLy8gZm91bmQgZW1wdHkgdGFibGUKICAgICAgICAgICAgIGogPSBpOwogICAgICAgICB9Ci0gICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAvLyBmb3VuZCB0YWJsZSBhbHJlYWR5IGV4aXN0CiAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsKICAgICAgICAgICAgICAgICAvLyBQYWlyd2lzZSBrZXkKQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBHcm91cCBrZXkKICAgICAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA+PSBNQVhfR1JPVVBfS0VZKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgICAgICAgICAgICAgcEtleSA9ICYocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVtkd0tleUluZGV4ICYgMHgwMDAwMDBGRl0pOwogICAgICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFRSQU5TTUlUX0tFWSkgIT0gMCkgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gR3JvdXAgdHJhbnNtaXQga2V5CkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCB8PSAweDgwMDA7ICAgICAgICAgICAgICAvLyBlbmFibGUgb24tZmx5CiAKLSAgICAgICAgICAgIHBLZXktPmJLZXlWYWxpZCA9IFRSVUU7CisgICAgICAgICAgICBwS2V5LT5iS2V5VmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgcEtleS0+dUtleUxlbmd0aCA9IHVLZXlMZW5ndGg7CiAgICAgICAgICAgICBwS2V5LT5kd0tleUluZGV4ID0gZHdLZXlJbmRleDsKICAgICAgICAgICAgIHBLZXktPmJ5Q2lwaGVyU3VpdGUgPSBieUtleURlY01vZGU7CkBAIC0yNTIsNyArMjUyLDcgQEAKICAgICAgICAgICAgICAgICBpZiAodUtleUxlbmd0aCA9PSBXTEFOX1dFUDEwNF9LRVlMRU4pCiAgICAgICAgICAgICAgICAgICAgIHBLZXktPmFieUtleVsxNV0gfD0gMHg4MDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE1BQ3ZTZXRLZXlFbnRyeShkd0lvQmFzZSwgcFRhYmxlLT5LZXlUYWJsZVtpXS53S2V5Q3RsLCBpLCB1S2V5SWR4LCBwYnlCU1NJRCwgKFBEV09SRClwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CisgICAgICAgICAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcGJ5QlNTSUQsICh1bnNpZ25lZCBsb25nICopcEtleS0+YWJ5S2V5LCBieUxvY2FsSUQpOwogCiAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gUlNDIHNldCBieSBOSUMKQEAgLTI3NywxMiArMjc3LDEyIEBACiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPndUU0MxNV8wOiAleFxuICIsIHBLZXktPndUU0MxNV8wKTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icEtleS0+ZHdLZXlJbmRleDogJWx4XG4gIiwgcEtleS0+ZHdLZXlJbmRleCk7CiAKLSAgICAgICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChqIDwgKE1BWF9LRVlfVEFCTEUtMSkpIHsKICAgICAgICAgbWVtY3B5KHBUYWJsZS0+S2V5VGFibGVbal0uYWJ5QlNTSUQscGJ5QlNTSUQsRVRIX0FMRU4pOwotICAgICAgICBwVGFibGUtPktleVRhYmxlW2pdLmJJblVzZSA9IFRSVUU7CisgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbal0uYkluVXNlID0gdHJ1ZTsKICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSAgewogICAgICAgICAgICAgLy8gUGFpcndpc2Uga2V5CiAgICAgICAgICAgICBwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2pdLlBhaXJ3aXNlS2V5KTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gR3JvdXAga2V5CiAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA+PSBNQVhfR1JPVVBfS0VZKQotICAgICAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICAgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgICAgICAgICAgcEtleSA9ICYocFRhYmxlLT5LZXlUYWJsZVtqXS5Hcm91cEtleVtkd0tleUluZGV4ICYgMHgwMDAwMDBGRl0pOwogICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgVFJBTlNNSVRfS0VZKSAhPSAwKSAgewogICAgICAgICAgICAgICAgIC8vIEdyb3VwIHRyYW5zbWl0IGtleQpAQCAtMzA2LDcgKzMwNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtqXS53S2V5Q3RsIHw9IDB4ODAwMDsgICAgICAgICAgICAgIC8vIGVuYWJsZSBvbi1mbHkKIAotICAgICAgICBwS2V5LT5iS2V5VmFsaWQgPSBUUlVFOworICAgICAgICBwS2V5LT5iS2V5VmFsaWQgPSB0cnVlOwogICAgICAgICBwS2V5LT51S2V5TGVuZ3RoID0gdUtleUxlbmd0aDsKICAgICAgICAgcEtleS0+ZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7CiAgICAgICAgIHBLZXktPmJ5Q2lwaGVyU3VpdGUgPSBieUtleURlY01vZGU7CkBAIC0zMTcsNyArMzE3LDcgQEAKICAgICAgICAgICAgIGlmICh1S2V5TGVuZ3RoID09IFdMQU5fV0VQMTA0X0tFWUxFTikKICAgICAgICAgICAgICAgICBwS2V5LT5hYnlLZXlbMTVdIHw9IDB4ODA7CiAgICAgICAgIH0KLSAgICAgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW2pdLndLZXlDdGwsIGosIHVLZXlJZHgsIHBieUJTU0lELCAoUERXT1JEKXBLZXktPmFieUtleSwgYnlMb2NhbElEKTsKKyAgICAgICAgTUFDdlNldEtleUVudHJ5KGR3SW9CYXNlLCBwVGFibGUtPktleVRhYmxlW2pdLndLZXlDdGwsIGosIHVLZXlJZHgsIHBieUJTU0lELCAodW5zaWduZWQgbG9uZyAqKXBLZXktPmFieUtleSwgYnlMb2NhbElEKTsKIAogICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBSU0Mgc2V0IGJ5IE5JQwpAQCAtMzQyLDkgKzM0Miw5IEBACiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icEtleS0+d1RTQzE1XzA6ICV4XG4gIiwgcEtleS0+d1RTQzE1XzApOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPmR3S2V5SW5kZXg6ICVseFxuICIsIHBLZXktPmR3S2V5SW5kZXgpOwogCi0gICAgICAgIHJldHVybiAoVFJVRSk7CisgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgfQotICAgIHJldHVybiAoRkFMU0UpOworICAgIHJldHVybiAoZmFsc2UpOwogfQogCiAKQEAgLTM1OSw2NiArMzU5LDY2IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VzcyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgS2V5YlJlbW92ZUtleSAoCitib29sIEtleWJSZW1vdmVLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlCiAgICAgKQogewogICAgIGludCAgaTsKIAotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUyhwYnlCU1NJRCkpIHsKKyAgICBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGJ5QlNTSUQpKSB7CiAgICAgICAgIC8vIGRlYWx0ZSBhbGwga2V5CiAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgewogICAgICAgICAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNfdkNoZWNrS2V5VGFibGVWYWxpZChwVGFibGUsIGR3SW9CYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA8IE1BWF9HUk9VUF9LRVkpIHsKICAgICAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W2R3S2V5SW5kZXggJiAweDAwMDAwMEZGXS5iS2V5VmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiAweDdGRkZGRkZGKSA9PSAocFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXggJiAweDdGRkZGRkZGKSkgewogICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgR3JvdXAgdHJhbnNtaXQga2V5CiAgICAgICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzX3ZDaGVja0tleVRhYmxlVmFsaWQocFRhYmxlLCBkd0lvQmFzZSk7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewotICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHNfdkNoZWNrS2V5VGFibGVWYWxpZChwVGFibGUsIGR3SW9CYXNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKFRSVUUpOworICAgICAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpIDwgTUFYX0dST1VQX0tFWSkgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdLmJLZXlWYWxpZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdLmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIDB4N0ZGRkZGRkYpID09IChwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCAmIDB4N0ZGRkZGRkYpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBHcm91cCB0cmFuc21pdCBrZXkKICAgICAgICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXggPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzX3ZDaGVja0tleVRhYmxlVmFsaWQocFRhYmxlLCBkd0lvQmFzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRydWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChGQUxTRSk7CisgICAgcmV0dXJuIChmYWxzZSk7CiB9CiAKIApAQCAtNDMyLDMwICs0MzIsMzAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VzcyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzIG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBLZXliUmVtb3ZlQWxsS2V5ICgKK2Jvb2wgS2V5YlJlbW92ZUFsbEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZQogICAgICkKIHsKICAgICBpbnQgIGksdTsKIAogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCxwYnlCU1NJRCkpIHsKLSAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CisgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgZm9yKHU9MDt1PE1BWF9HUk9VUF9LRVk7dSsrKSB7Ci0gICAgICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVt1XS5iS2V5VmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5W3VdLmJLZXlWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXggPSAwOwogICAgICAgICAgICAgc192Q2hlY2tLZXlUYWJsZVZhbGlkKHBUYWJsZSwgZHdJb0Jhc2UpOwotICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChGQUxTRSk7CisgICAgcmV0dXJuIChmYWxzZSk7CiB9CiAKIC8qCkBAIC00NjcsMjAgKzQ2NywyMCBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCiB2b2lkIEtleXZSZW1vdmVXRVBLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApCiB7CiAKICAgIGlmICgoZHdLZXlJbmRleCAmIDB4MDAwMDAwRkYpIDwgTUFYX0dST1VQX0tFWSkgewotICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmJJblVzZSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uYkluVXNlID09IHRydWUpIHsKICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdLmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9XRVApIHsKLSAgICAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW01BWF9LRVlfVEFCTEUtMV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdLmJLZXlWYWxpZCA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5Hcm91cEtleVtkd0tleUluZGV4ICYgMHgwMDAwMDBGRl0uYktleVZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgMHg3RkZGRkZGRikgPT0gKHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5kd0dUS2V5SW5kZXggJiAweDdGRkZGRkZGKSkgewogICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgR3JvdXAgdHJhbnNtaXQga2V5CiAgICAgICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5kd0dUS2V5SW5kZXggPSAwOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIHZvaWQgS2V5dlJlbW92ZUFsbFdFUEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlCiAgICAgKQogewogICAgIGludCBpOwpAQCAtNTE0LDEzICs1MTQsMTMgQEAKICAqICBPdXQ6CiAgKiAgICAgIHBLZXkgICAgICAgICAgICAtIEtleSByZXR1cm4KICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgZm91bmQgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgZm91bmQgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJHZXRUcmFuc21pdEtleSAoCitib29sIEtleWJHZXRUcmFuc21pdEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5VHlwZSwKICAgICBQU0tleUl0ZW0gICAgICAgKnBLZXkKICAgICApCiB7CkBAIC01MjgsMTIgKzUyOCwxMiBAQAogCiAgICAgKnBLZXkgPSBOVUxMOwogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCxwYnlCU1NJRCkpIHsKKyAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSB0cnVlKSAmJgorICAgICAgICAgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELCBwYnlCU1NJRCkpIHsKIAogICAgICAgICAgICAgaWYgKGR3S2V5VHlwZSA9PSBQQUlSV0lTRV9LRVkpIHsKIAotICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgKnBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkpOwogCiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iS2V5YkdldFRyYW5zbWl0S2V5OiIpOwpAQCAtNTQ0LDE5ICs1NDQsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwogCiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUGFpcndpc2VLZXkuYktleVZhbGlkID09IEZBTFNFXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iUGFpcndpc2VLZXkuYktleVZhbGlkID09IGZhbHNlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSAvLyBFbmQgb2YgVHlwZSA9PSBQQUlSV0lTRQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJFUlJPUjogZHdHVEtleUluZGV4ID09IDAgISEhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WyhwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCYweDAwMDAwMEZGKV0uYktleVZhbGlkID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAocFRhYmxlLT5LZXlUYWJsZVtpXS5Hcm91cEtleVsocFRhYmxlLT5LZXlUYWJsZVtpXS5kd0dUS2V5SW5kZXgmMHgwMDAwMDBGRildLmJLZXlWYWxpZCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLkdyb3VwS2V5WyhwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCYweDAwMDAwMEZGKV0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIktleWJHZXRUcmFuc21pdEtleToiKTsKQEAgLTU2NywxMSArNTY3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImR3R1RLZXlJbmRleDogJWxYXG4iLCBwVGFibGUtPktleVRhYmxlW2ldLmR3R1RLZXlJbmRleCk7CiAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iR3JvdXBLZXkuYktleVZhbGlkID09IEZBTFNFXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iR3JvdXBLZXkuYktleVZhbGlkID09IGZhbHNlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSAvLyBFbmQgb2YgVHlwZSA9IEdST1VQCiAgICAgICAgIH0gLy8gQlNTSUQgbWF0Y2gKQEAgLTU4MSw3ICs1ODEsNyBAQAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKihwYnlCU1NJRCtpaSkpOwogICAgIH0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuIik7Ci0gICAgcmV0dXJuIChGQUxTRSk7CisgICAgcmV0dXJuIChmYWxzZSk7CiB9CiAKIApAQCAtNTk0LDEwICs1OTQsMTAgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgZm91bmQgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgZm91bmQgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJDaGVja1BhaXJld2lzZUtleSAoCitib29sIEtleWJDaGVja1BhaXJld2lzZUtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKICAgICBQU0tleUl0ZW0gICAgICAgKnBLZXkKICAgICApCkBAIC02MDYsMTMgKzYwNiwxMyBAQAogCiAgICAgKnBLZXkgPSBOVUxMOwogICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKLSAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID09IFRSVUUpKSB7CisgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gdHJ1ZSkgJiYKKyAgICAgICAgICAgIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSB0cnVlKSkgewogICAgICAgICAgICAgKnBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkpOwotICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKKyAgICAgICAgICAgIHJldHVybiAodHJ1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChGQUxTRSk7CisgICAgcmV0dXJuIChmYWxzZSk7CiB9CiAKIC8qCkBAIC02MjgsMzQgKzYyOCwzNCBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJTZXREZWZhdWx0S2V5ICgKK2Jvb2wgS2V5YlNldERlZmF1bHRLZXkgKAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgVUxPTkcgICAgICAgICAgIHVLZXlMZW5ndGgsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aCwKICAgICBQUVdPUkQgICAgICAgICAgcEtleVJTQywKLSAgICBQQllURSAgICAgICAgICAgcGJ5S2V5LAotICAgIEJZVEUgICAgICAgICAgICBieUtleURlY01vZGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlLAotICAgIEJZVEUgICAgICAgICAgICBieUxvY2FsSUQKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgY2hhciBieUtleURlY01vZGUsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRAogICAgICkKIHsKLSAgICBVSU5UICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgUFNLZXlJdGVtICAgcEtleTsKLSAgICBVSU5UICAgICAgICB1S2V5SWR4OworICAgIHVuc2lnbmVkIGludCB1S2V5SWR4OwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJFbnRlciBLZXliU2V0RGVmYXVsdEtleTogJTF4LCAlZCBcbiIsIChpbnQpZHdLZXlJbmRleCwgKGludCl1S2V5TGVuZ3RoKTsKIAogCiAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7ICAgICAgICAgICAgICAgICAgLy8gUGFpcndpc2Uga2V5Ci0gICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICB9IGVsc2UgaWYgKChkd0tleUluZGV4ICYgMHgwMDAwMDBGRikgPj0gTUFYX0dST1VQX0tFWSkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogCi0gICAgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmJJblVzZSA9IFRSVUU7CisgICAgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmJJblVzZSA9IHRydWU7CiAgICAgZm9yKGlpPTA7aWk8RVRIX0FMRU47aWkrKykKICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmFieUJTU0lEW2lpXSA9IDB4RkY7CiAKQEAgLTY3NiwxMyArNjc2LDEzIEBACiAgICAgaWYgKCh1S2V5TGVuZ3RoID09IFdMQU5fV0VQMjMyX0tFWUxFTikgJiYKICAgICAgICAgKGJ5S2V5RGVjTW9kZSA9PSBLRVlfQ1RMX1dFUCkpIHsKICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLndLZXlDdGwgfD0gMHg0MDAwOyAgICAgICAgICAgICAgLy8gZGlzYWJsZSBvbi1mbHkgZGlzYWJsZSBhZGRyZXNzIG1hdGNoCi0gICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iU29mdFdFUCA9IFRSVUU7CisgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iU29mdFdFUCA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iU29mdFdFUCA9PSBGQUxTRSkKKyAgICAgICAgaWYgKHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5iU29mdFdFUCA9PSBmYWxzZSkKICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS53S2V5Q3RsIHw9IDB4QzAwMDsgICAgICAgICAgLy8gZW5hYmxlIG9uLWZseSBkaXNhYmxlIGFkZHJlc3MgbWF0Y2gKICAgICB9CiAKLSAgICBwS2V5LT5iS2V5VmFsaWQgPSBUUlVFOworICAgIHBLZXktPmJLZXlWYWxpZCA9IHRydWU7CiAgICAgcEtleS0+dUtleUxlbmd0aCA9IHVLZXlMZW5ndGg7CiAgICAgcEtleS0+ZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7CiAgICAgcEtleS0+YnlDaXBoZXJTdWl0ZSA9IGJ5S2V5RGVjTW9kZTsKQEAgLTY5Myw3ICs2OTMsNyBAQAogICAgICAgICBpZiAodUtleUxlbmd0aCA9PSBXTEFOX1dFUDEwNF9LRVlMRU4pCiAgICAgICAgICAgICBwS2V5LT5hYnlLZXlbMTVdIHw9IDB4ODA7CiAgICAgfQotICAgIE1BQ3ZTZXRLZXlFbnRyeShkd0lvQmFzZSwgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLndLZXlDdGwsIE1BWF9LRVlfVEFCTEUtMSwgdUtleUlkeCwgcFRhYmxlLT5LZXlUYWJsZVtNQVhfS0VZX1RBQkxFLTFdLmFieUJTU0lELCAoUERXT1JEKXBLZXktPmFieUtleSwgYnlMb2NhbElEKTsKKyAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS53S2V5Q3RsLCBNQVhfS0VZX1RBQkxFLTEsIHVLZXlJZHgsIHBUYWJsZS0+S2V5VGFibGVbTUFYX0tFWV9UQUJMRS0xXS5hYnlCU1NJRCwgKHVuc2lnbmVkIGxvbmcgKilwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CiAKICAgICBpZiAoKGR3S2V5SW5kZXggJiBVU0VfS0VZUlNDKSA9PSAwKSB7CiAgICAgICAgIC8vIFJTQyBzZXQgYnkgTklDCkBAIC03MTgsNyArNzE4LDcgQEAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInBLZXktPndUU0MxNV8wOiAleFxuIiwgcEtleS0+d1RTQzE1XzApOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icEtleS0+ZHdLZXlJbmRleDogJWx4XG4iLCBwS2V5LT5kd0tleUluZGV4KTsKIAotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCkBAIC03MzUsMzYgKzczNSwzNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzIG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIEtleWJTZXRBbGxHcm91cEtleSAoCitib29sIEtleWJTZXRBbGxHcm91cEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBVTE9ORyAgICAgICAgICAgdUtleUxlbmd0aCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoLAogICAgIFBRV09SRCAgICAgICAgICBwS2V5UlNDLAotICAgIFBCWVRFICAgICAgICAgICBwYnlLZXksCi0gICAgQllURSAgICAgICAgICAgIGJ5S2V5RGVjTW9kZSwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UsCi0gICAgQllURSAgICAgICAgICAgIGJ5TG9jYWxJRAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElECiAgICAgKQogewogICAgIGludCAgICAgICAgIGk7Ci0gICAgVUlOVCAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogICAgIFBTS2V5SXRlbSAgIHBLZXk7Ci0gICAgVUlOVCAgICAgICAgdUtleUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgdUtleUlkeDsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRW50ZXIgS2V5YlNldEFsbEdyb3VwS2V5OiAlbFhcbiIsIGR3S2V5SW5kZXgpOwogCiAKICAgICBpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsgICAgICAgICAgICAgICAgICAvLyBQYWlyd2lzZSBrZXkKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0gZWxzZSBpZiAoKGR3S2V5SW5kZXggJiAweDAwMDAwMEZGKSA+PSBNQVhfR1JPVVBfS0VZKSB7Ci0gICAgICAgIHJldHVybiAoRkFMU0UpOworICAgICAgICByZXR1cm4gKGZhbHNlKTsKICAgICB9CiAKICAgICBmb3IgKGk9MDsgaSA8IE1BWF9LRVlfVEFCTEUtMTsgaSsrKSB7Ci0gICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAvLyBmb3VuZCB0YWJsZSBhbHJlYWR5IGV4aXN0CiAgICAgICAgICAgICAvLyBHcm91cCBrZXkKICAgICAgICAgICAgIHBLZXkgPSAmKHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbZHdLZXlJbmRleCAmIDB4MDAwMDAwRkZdKTsKQEAgLTc4MSw3ICs3ODEsNyBAQAogCiAgICAgICAgICAgICBwVGFibGUtPktleVRhYmxlW2ldLndLZXlDdGwgfD0gMHg4MDAwOyAgICAgICAgICAgICAgLy8gZW5hYmxlIG9uLWZseQogCi0gICAgICAgICAgICBwS2V5LT5iS2V5VmFsaWQgPSBUUlVFOworICAgICAgICAgICAgcEtleS0+YktleVZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHBLZXktPnVLZXlMZW5ndGggPSB1S2V5TGVuZ3RoOwogICAgICAgICAgICAgcEtleS0+ZHdLZXlJbmRleCA9IGR3S2V5SW5kZXg7CiAgICAgICAgICAgICBwS2V5LT5ieUNpcGhlclN1aXRlID0gYnlLZXlEZWNNb2RlOwpAQCAtNzkyLDcgKzc5Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHVLZXlMZW5ndGggPT0gV0xBTl9XRVAxMDRfS0VZTEVOKQogICAgICAgICAgICAgICAgICAgICBwS2V5LT5hYnlLZXlbMTVdIHw9IDB4ODA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgKFBEV09SRClwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CisgICAgICAgICAgICBNQUN2U2V0S2V5RW50cnkoZHdJb0Jhc2UsIHBUYWJsZS0+S2V5VGFibGVbaV0ud0tleUN0bCwgaSwgdUtleUlkeCwgcFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgKHVuc2lnbmVkIGxvbmcgKilwS2V5LT5hYnlLZXksIGJ5TG9jYWxJRCk7CiAKICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFVTRV9LRVlSU0MpID09IDApIHsKICAgICAgICAgICAgICAgICAvLyBSU0Mgc2V0IGJ5IE5JQwpAQCAtODE3LDcgKzgxNyw3IEBACiAgICAgICAgICAgICAvL0RCR19QUk5fR1JQMTIoKCJwS2V5LT53VFNDMTVfMDogJVhcbiAiLCBwS2V5LT53VFNDMTVfMCkpOwogICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDEyKCgicEtleS0+ZHdLZXlJbmRleDogJWxYXG4gIiwgcEtleS0+ZHdLZXlJbmRleCkpOwogCi0gICAgICAgIH0gLy8gKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpCisgICAgICAgIH0gLy8gKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IHRydWUpCiAgICAgfQotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2tleS5oCmluZGV4IDM5NDAzZDkuLjZiMmRhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUva2V5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9rZXkuaApAQCAtNTcsMzMgKzU3LDMzIEBACiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NLZXlJdGVtCiB7Ci0gICAgQk9PTCAgICAgICAgYktleVZhbGlkOwotICAgIFVMT05HICAgICAgIHVLZXlMZW5ndGg7Ci0gICAgQllURSAgICAgICAgYWJ5S2V5W01BWF9LRVlfTEVOXTsKKyAgICBib29sIGJLZXlWYWxpZDsKKyAgICB1bnNpZ25lZCBsb25nIHVLZXlMZW5ndGg7CisgICAgdW5zaWduZWQgY2hhciBhYnlLZXlbTUFYX0tFWV9MRU5dOwogICAgIFFXT1JEICAgICAgIEtleVJTQzsKLSAgICBEV09SRCAgICAgICBkd1RTQzQ3XzE2OwotICAgIFdPUkQgICAgICAgIHdUU0MxNV8wOwotICAgIEJZVEUgICAgICAgIGJ5Q2lwaGVyU3VpdGU7Ci0gICAgQllURSAgICAgICAgYnlSZXNlcnZlZDA7Ci0gICAgRFdPUkQgICAgICAgZHdLZXlJbmRleDsKKyAgICB1bnNpZ25lZCBsb25nIGR3VFNDNDdfMTY7CisgICAgdW5zaWduZWQgc2hvcnQgd1RTQzE1XzA7CisgICAgdW5zaWduZWQgY2hhciBieUNpcGhlclN1aXRlOworICAgIHVuc2lnbmVkIGNoYXIgYnlSZXNlcnZlZDA7CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4OwogICAgIHZvaWQgKnB2S2V5VGFibGU7CiB9IFNLZXlJdGVtLCAqUFNLZXlJdGVtOyAvLzY0CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NLZXlUYWJsZQogewotICAgIEJZVEUgICAgICAgIGFieUJTU0lEW0VUSF9BTEVOXTsgIC8vNgotICAgIEJZVEUgICAgICAgIGJ5UmVzZXJ2ZWQwWzJdOyAgICAgICAgICAgICAgLy84CisgICAgdW5zaWduZWQgY2hhciBhYnlCU1NJRFtFVEhfQUxFTl07ICAvLzYKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UmVzZXJ2ZWQwWzJdOyAgICAgICAgICAgICAgLy84CiAgICAgU0tleUl0ZW0gICAgUGFpcndpc2VLZXk7CiAgICAgU0tleUl0ZW0gICAgR3JvdXBLZXlbTUFYX0dST1VQX0tFWV07IC8vNjQqNSA9IDMyMCwgMzIwKzg9MzI4Ci0gICAgRFdPUkQgICAgICAgZHdHVEtleUluZGV4OyAgICAgICAgICAgIC8vIEdyb3VwVHJhbnNtaXRLZXkgSW5kZXgKLSAgICBCT09MICAgICAgICBiSW5Vc2U7CisgICAgdW5zaWduZWQgbG9uZyBkd0dUS2V5SW5kZXg7ICAgICAgICAgICAgLy8gR3JvdXBUcmFuc21pdEtleSBJbmRleAorICAgIGJvb2wgYkluVXNlOwogICAgIC8vMjAwNi0xMTE2LTAxLDxNb2RpZnk+IGJ5IE5vbWFkWmhhbwotICAgIC8vV09SRCAgICAgIHdLZXlDdGw7Ci0gICAgLy9CT09MICAgICAgYlNvZnRXRVA7Ci0gICAgQk9PTCAgICAgICAgYlNvZnRXRVA7Ci0gICAgV09SRCAgICAgICAgd0tleUN0bDsgICAgICAvLyBmb3IgYWRkcmVzcyBvZiB3S2V5Q3RsIGF0IGFsaWduIDQKKyAgICAvL3Vuc2lnbmVkIHNob3J0IHdLZXlDdGw7CisgICAgLy9ib29sIGJTb2Z0V0VQOworICAgIGJvb2wgYlNvZnRXRVA7CisgICAgdW5zaWduZWQgc2hvcnQgd0tleUN0bDsgICAgICAvLyBmb3IgYWRkcmVzcyBvZiB3S2V5Q3RsIGF0IGFsaWduIDQKIAotICAgIEJZVEUgICAgICAgIGJ5UmVzZXJ2ZWQxWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYnlSZXNlcnZlZDFbNl07CiB9IFNLZXlUYWJsZSwgKlBTS2V5VGFibGU7IC8vMzQ4CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NLZXlNYW5hZ2VtZW50CkBAIC0xMDEsODMgKzEwMSw4MyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIEtleXZJbml0VGFibGUoUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwgRFdPUkRfUFRSIGR3SW9CYXNlKTsKK3ZvaWQgS2V5dkluaXRUYWJsZShQU0tleU1hbmFnZW1lbnQgcFRhYmxlLCB1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAotQk9PTCBLZXliR2V0S2V5KAorYm9vbCBLZXliR2V0S2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEICAgICAgICAgICBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdLZXlJbmRleCwKICAgICBQU0tleUl0ZW0gICAgICAgKnBLZXkKICAgICApOwogCi1CT09MIEtleWJTZXRLZXkoCitib29sIEtleWJTZXRLZXkoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgVUxPTkcgICAgICAgICAgIHVLZXlMZW5ndGgsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aCwKICAgICBQUVdPUkQgICAgICAgICAgcEtleVJTQywKLSAgICBQQllURSAgICAgICAgICAgcGJ5S2V5LAotICAgIEJZVEUgICAgICAgICAgICBieUtleURlY01vZGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlLAotICAgIEJZVEUgICAgICAgICAgICBieUxvY2FsSUQKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgY2hhciBieUtleURlY01vZGUsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRAogICAgICk7CiAKLUJPT0wgS2V5YlNldERlZmF1bHRLZXkoCitib29sIEtleWJTZXREZWZhdWx0S2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5SW5kZXgsCi0gICAgVUxPTkcgICAgICAgICAgIHVLZXlMZW5ndGgsCisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4LAorICAgIHVuc2lnbmVkIGxvbmcgdUtleUxlbmd0aCwKICAgICBQUVdPUkQgICAgICAgICAgcEtleVJTQywKLSAgICBQQllURSAgICAgICAgICAgcGJ5S2V5LAotICAgIEJZVEUgICAgICAgICAgICBieUtleURlY01vZGUsCi0gICAgRFdPUkRfUFRSICAgICAgIGR3SW9CYXNlLAotICAgIEJZVEUgICAgICAgICAgICBieUxvY2FsSUQKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlLZXksCisgICAgdW5zaWduZWQgY2hhciBieUtleURlY01vZGUsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRAogICAgICk7CiAKLUJPT0wgS2V5YlJlbW92ZUtleSgKK2Jvb2wgS2V5YlJlbW92ZUtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRCwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZQogICAgICk7CiAKLUJPT0wgS2V5YkdldFRyYW5zbWl0S2V5KAorYm9vbCBLZXliR2V0VHJhbnNtaXRLZXkoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQsCi0gICAgRFdPUkQgICAgICAgICAgIGR3S2V5VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5VHlwZSwKICAgICBQU0tleUl0ZW0gICAgICAgKnBLZXkKICAgICApOwogCi1CT09MIEtleWJDaGVja1BhaXJld2lzZUtleSgKK2Jvb2wgS2V5YkNoZWNrUGFpcmV3aXNlS2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCiAgICAgUFNLZXlJdGVtICAgICAgICpwS2V5CiAgICAgKTsKIAotQk9PTCBLZXliUmVtb3ZlQWxsS2V5KAorYm9vbCBLZXliUmVtb3ZlQWxsS2V5KAogICAgIFBTS2V5TWFuYWdlbWVudCBwVGFibGUsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJTU0lELAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZQorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lELAorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApOwogCiB2b2lkIEtleXZSZW1vdmVXRVBLZXkoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyBkd0lvQmFzZQogICAgICk7CiAKIHZvaWQgS2V5dlJlbW92ZUFsbFdFUEtleSgKICAgICBQU0tleU1hbmFnZW1lbnQgcFRhYmxlLAotICAgIERXT1JEX1BUUiAgICAgICBkd0lvQmFzZQorICAgIHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UKICAgICApOwogCi1CT09MIEtleWJTZXRBbGxHcm91cEtleSAoCitib29sIEtleWJTZXRBbGxHcm91cEtleSAoCiAgICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSwKLSAgICBEV09SRCAgICAgICAgICAgZHdLZXlJbmRleCwKLSAgICBVTE9ORyAgICAgICAgICAgdUtleUxlbmd0aCwKKyAgICB1bnNpZ25lZCBsb25nIGR3S2V5SW5kZXgsCisgICAgdW5zaWduZWQgbG9uZyB1S2V5TGVuZ3RoLAogICAgIFBRV09SRCAgICAgICAgICBwS2V5UlNDLAotICAgIFBCWVRFICAgICAgICAgICBwYnlLZXksCi0gICAgQllURSAgICAgICAgICAgIGJ5S2V5RGVjTW9kZSwKLSAgICBEV09SRF9QVFIgICAgICAgZHdJb0Jhc2UsCi0gICAgQllURSAgICAgICAgICAgIGJ5TG9jYWxJRAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUtleSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSwKKyAgICB1bnNpZ25lZCBsb25nIGR3SW9CYXNlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElECiAgICAgKTsKIAogI2VuZGlmIC8vIF9fS0VZX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmMKaW5kZXggZjFlZjdkYS4uZjhkMTY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5jCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAidGV0aGVyLmgiCiAjaW5jbHVkZSAibWFjLmgiCiAKLVdPUkQgVHhSYXRlX2l3Y29uZmlnOy8vMjAwOC01LTggPGFkZD4gYnkgY2hlc3RlcgordW5zaWduZWQgc2hvcnQgVHhSYXRlX2l3Y29uZmlnOy8vMjAwOC01LTggPGFkZD4gYnkgY2hlc3RlcgogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CkBAIC0xMDMsNyArMTAzLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2UmVhZEFsbFJlZ3MgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5TWFjUmVncykKK3ZvaWQgTUFDdlJlYWRBbGxSZWdzICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlNYWNSZWdzKQogewogICAgIGludCBpaTsKIApAQCAtMTM3LDEyICsxMzcsMTIgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgYWxsIHRlc3QgYml0cyBPbjsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgYWxsIHRlc3QgYml0cyBPbjsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JJc1JlZ0JpdHNPbiAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmVnT2ZzLCBCWVRFIGJ5VGVzdEJpdHMpCitib29sIE1BQ2JJc1JlZ0JpdHNPbiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJlZ09mcywgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKQogewotICAgIEJZVEUgYnlEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOwogCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBieVJlZ09mcywgJmJ5RGF0YSk7CiAgICAgcmV0dXJuIChieURhdGEgJiBieVRlc3RCaXRzKSA9PSBieVRlc3RCaXRzOwpAQCAtMTYwLDEyICsxNjAsMTIgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgYWxsIHRlc3QgYml0cyBPZmY7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCB0ZXN0IGJpdHMgT2ZmOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYklzUmVnQml0c09mZiAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmVnT2ZzLCBCWVRFIGJ5VGVzdEJpdHMpCitib29sIE1BQ2JJc1JlZ0JpdHNPZmYgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSZWdPZnMsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsICZieURhdGEpOwogICAgIHJldHVybiAhKGJ5RGF0YSAmIGJ5VGVzdEJpdHMpOwpAQCAtMTgxLDE4ICsxODEsMTggQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgaW50ZXJydXB0IGlzIGRpc2FibGU7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYklzSW50RGlzYWJsZSAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiSXNJbnREaXNhYmxlICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIERXT1JEIGR3RGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsKIAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19JTVIsICZkd0RhdGEpOwogICAgIGlmIChkd0RhdGEgIT0gMCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTIwOSw5ICsyMDksOSBAQAogICogUmV0dXJuIFZhbHVlOiBNYXNrIFZhbHVlIHJlYWQKICAqCiAgKi8KLUJZVEUgTUFDYnlSZWFkTXVsdGlBZGRyIChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUJ5dGVJZHgpCit1bnNpZ25lZCBjaGFyIE1BQ2J5UmVhZE11bHRpQWRkciAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVCeXRlSWR4KQogewotICAgIEJZVEUgYnlEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOwogCiAgICAgTUFDdlNlbGVjdFBhZ2UxKGR3SW9CYXNlKTsKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCArIHVCeXRlSWR4LCAmYnlEYXRhKTsKQEAgLTIzNCw3ICsyMzQsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZXcml0ZU11bHRpQWRkciAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVCeXRlSWR4LCBCWVRFIGJ5RGF0YSkKK3ZvaWQgTUFDdldyaXRlTXVsdGlBZGRyICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgdUJ5dGVJZHgsIHVuc2lnbmVkIGNoYXIgYnlEYXRhKQogewogICAgIE1BQ3ZTZWxlY3RQYWdlMShkd0lvQmFzZSk7CiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19NQVIwICsgdUJ5dGVJZHgsIGJ5RGF0YSk7CkBAIC0yNTUsMTEgKzI1NSwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRNdWx0aUFkZHJCeUhhc2ggKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUhhc2hJZHgpCit2b2lkIE1BQ3ZTZXRNdWx0aUFkZHJCeUhhc2ggKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlIYXNoSWR4KQogewotICAgIFVJTlQgdUJ5dGVJZHg7Ci0gICAgQllURSBieUJpdE1hc2s7Ci0gICAgQllURSBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludCB1Qnl0ZUlkeDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Qml0TWFzazsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CiAKICAgICAvLyBjYWxjdWxhdGUgYnl0ZSBwb3NpdGlvbgogICAgIHVCeXRlSWR4ID0gYnlIYXNoSWR4IC8gODsKQEAgLTI2OSw3ICsyNjksNyBAQAogICAgIGJ5Qml0TWFzayA8PD0gKGJ5SGFzaElkeCAlIDgpOwogICAgIC8vIHR1cm4gb24gdGhlIGJpdAogICAgIGJ5T3JnVmFsdWUgPSBNQUNieVJlYWRNdWx0aUFkZHIoZHdJb0Jhc2UsIHVCeXRlSWR4KTsKLSAgICBNQUN2V3JpdGVNdWx0aUFkZHIoZHdJb0Jhc2UsIHVCeXRlSWR4LCAoQllURSkoYnlPcmdWYWx1ZSB8IGJ5Qml0TWFzaykpOworICAgIE1BQ3ZXcml0ZU11bHRpQWRkcihkd0lvQmFzZSwgdUJ5dGVJZHgsICh1bnNpZ25lZCBjaGFyKShieU9yZ1ZhbHVlIHwgYnlCaXRNYXNrKSk7CiB9CiAKIC8qCkBAIC0yODYsMTEgKzI4NiwxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZSZXNldE11bHRpQWRkckJ5SGFzaCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5SGFzaElkeCkKK3ZvaWQgTUFDdlJlc2V0TXVsdGlBZGRyQnlIYXNoICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5SGFzaElkeCkKIHsKLSAgICBVSU5UIHVCeXRlSWR4OwotICAgIEJZVEUgYnlCaXRNYXNrOwotICAgIEJZVEUgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBpbnQgdUJ5dGVJZHg7CisgICAgdW5zaWduZWQgY2hhciBieUJpdE1hc2s7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOwogCiAgICAgLy8gY2FsY3VsYXRlIGJ5dGUgcG9zaXRpb24KICAgICB1Qnl0ZUlkeCA9IGJ5SGFzaElkeCAvIDg7CkBAIC0zMDAsNyArMzAwLDcgQEAKICAgICBieUJpdE1hc2sgPDw9IChieUhhc2hJZHggJSA4KTsKICAgICAvLyB0dXJuIG9mZiB0aGUgYml0CiAgICAgYnlPcmdWYWx1ZSA9IE1BQ2J5UmVhZE11bHRpQWRkcihkd0lvQmFzZSwgdUJ5dGVJZHgpOwotICAgIE1BQ3ZXcml0ZU11bHRpQWRkcihkd0lvQmFzZSwgdUJ5dGVJZHgsIChCWVRFKShieU9yZ1ZhbHVlICYgKH5ieUJpdE1hc2spKSk7CisgICAgTUFDdldyaXRlTXVsdGlBZGRyKGR3SW9CYXNlLCB1Qnl0ZUlkeCwgKHVuc2lnbmVkIGNoYXIpKGJ5T3JnVmFsdWUgJiAofmJ5Qml0TWFzaykpKTsKIH0KIAogLyoKQEAgLTMxNyw5ICszMTcsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRSeFRocmVzaG9sZCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5VGhyZXNob2xkKQordm9pZCBNQUN2U2V0UnhUaHJlc2hvbGQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlUaHJlc2hvbGQpCiB7Ci0gICAgQllURSBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAogICAgIEFTU0VSVChieVRocmVzaG9sZCA8IDQpOwogCkBAIC0zNDIsNyArMzQyLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2R2V0UnhUaHJlc2hvbGQgKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5VGhyZXNob2xkKQordm9pZCBNQUN2R2V0UnhUaHJlc2hvbGQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieVRocmVzaG9sZCkKIHsKICAgICAvLyBnZXQgRkNSMAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19GQ1IwLCBwYnlUaHJlc2hvbGQpOwpAQCAtMzYzLDkgKzM2Myw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldFR4VGhyZXNob2xkIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlUaHJlc2hvbGQpCit2b2lkIE1BQ3ZTZXRUeFRocmVzaG9sZCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVRocmVzaG9sZCkKIHsKLSAgICBCWVRFIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOwogCiAgICAgQVNTRVJUKGJ5VGhyZXNob2xkIDwgNCk7CiAKQEAgLTM4OCw3ICszODgsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZHZXRUeFRocmVzaG9sZCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlUaHJlc2hvbGQpCit2b2lkIE1BQ3ZHZXRUeFRocmVzaG9sZCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5VGhyZXNob2xkKQogewogICAgIC8vIGdldCBGQ1IwCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0ZDUjAsIHBieVRocmVzaG9sZCk7CkBAIC00MDksOSArNDA5LDkgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0RG1hTGVuZ3RoIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlEbWFMZW5ndGgpCit2b2lkIE1BQ3ZTZXREbWFMZW5ndGggKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlEbWFMZW5ndGgpCiB7Ci0gICAgQllURSBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKIAogICAgIEFTU0VSVChieURtYUxlbmd0aCA8IDQpOwogCkBAIC00MzQsNyArNDM0LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2R2V0RG1hTGVuZ3RoIChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieURtYUxlbmd0aCkKK3ZvaWQgTUFDdkdldERtYUxlbmd0aCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RG1hTGVuZ3RoKQogewogICAgIC8vIGdldCBGQ1IwCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0ZDUjAsIHBieURtYUxlbmd0aCk7CkBAIC00NTUsNyArNDU1LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0U2hvcnRSZXRyeUxpbWl0IChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSZXRyeUxpbWl0KQordm9pZCBNQUN2U2V0U2hvcnRSZXRyeUxpbWl0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UmV0cnlMaW1pdCkKIHsKICAgICAvLyBzZXQgU1JUCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19TUlQsIGJ5UmV0cnlMaW1pdCk7CkBAIC00NzQsNyArNDc0LDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2R2V0U2hvcnRSZXRyeUxpbWl0IChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieVJldHJ5TGltaXQpCit2b2lkIE1BQ3ZHZXRTaG9ydFJldHJ5TGltaXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieVJldHJ5TGltaXQpCiB7CiAgICAgLy8gZ2V0IFNSVAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19TUlQsIHBieVJldHJ5TGltaXQpOwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldExvbmdSZXRyeUxpbWl0IChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSZXRyeUxpbWl0KQordm9pZCBNQUN2U2V0TG9uZ1JldHJ5TGltaXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSZXRyeUxpbWl0KQogewogICAgIC8vIHNldCBMUlQKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0xSVCwgYnlSZXRyeUxpbWl0KTsKQEAgLTUxMyw3ICs1MTMsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZHZXRMb25nUmV0cnlMaW1pdCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlSZXRyeUxpbWl0KQordm9pZCBNQUN2R2V0TG9uZ1JldHJ5TGltaXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieVJldHJ5TGltaXQpCiB7CiAgICAgLy8gZ2V0IExSVAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19MUlQsIHBieVJldHJ5TGltaXQpOwpAQCAtNTMzLDkgKzUzMyw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldExvb3BiYWNrTW9kZSAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5TG9vcGJhY2tNb2RlKQordm9pZCBNQUN2U2V0TG9vcGJhY2tNb2RlICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5TG9vcGJhY2tNb2RlKQogewotICAgIEJZVEUgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CiAKICAgICBBU1NFUlQoYnlMb29wYmFja01vZGUgPCAzKTsKICAgICBieUxvb3BiYWNrTW9kZSA8PD0gNjsKQEAgLTU1NiwxNyArNTU2LDE3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGluIExvb3BiYWNrIG1vZGU7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGluIExvb3BiYWNrIG1vZGU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwotQk9PTCBNQUNiSXNJbkxvb3BiYWNrTW9kZSAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiSXNJbkxvb3BiYWNrTW9kZSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOwogCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1RFU1QsICZieU9yZ1ZhbHVlKTsKICAgICBpZiAoYnlPcmdWYWx1ZSAmIChURVNUX0xCSU5UIHwgVEVTVF9MQkVYVCkpCi0gICAgICAgIHJldHVybiBUUlVFOwotICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtNTgzLDEwICs1ODMsMTAgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0UGFja2V0RmlsdGVyIChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0ZpbHRlclR5cGUpCit2b2lkIE1BQ3ZTZXRQYWNrZXRGaWx0ZXIgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIHNob3J0IHdGaWx0ZXJUeXBlKQogewotICAgIEJZVEUgICAgYnlPbGRSQ1I7Ci0gICAgQllURSAgICBieU5ld1JDUiA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieU9sZFJDUjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3UkNSID0gMDsKIAogICAgIC8vIGlmIG9ubHkgaW4gRElSRUNURUQgbW9kZSwgbXVsdGljYXN0LWFkZHJlc3Mgd2lsbCBzZXQgdG8gemVybywKICAgICAvLyBidXQgaWYgb3RoZXIgbW9kZSBleGlzdCAoZS5nLiBQUk9NSVNDVU9VUyksIG11bHRpY2FzdC1hZGRyZXNzCkBAIC01OTUsNyArNTk1LDcgQEAKICAgICAgICAgLy8gc2V0IG11bHRpY2FzdCBhZGRyZXNzIHRvIGFjY2VwdCBub25lCiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShkd0lvQmFzZSk7CiAgICAgICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCwgMEwpOwotICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAgKyBzaXplb2YoRFdPUkQpLCAwTCk7CisgICAgICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCArIHNpemVvZih1bnNpZ25lZCBsb25nKSwgMEwpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTAoZHdJb0Jhc2UpOwogICAgIH0KIApAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICAgIC8vIHNldCBtdWx0aWNhc3QgYWRkcmVzcyB0byBhY2NlcHQgYWxsCiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShkd0lvQmFzZSk7CiAgICAgICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCwgMHhGRkZGRkZGRkwpOwotICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX01BUjAgKyBzaXplb2YoRFdPUkQpLCAweEZGRkZGRkZGTCk7CisgICAgICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfTUFSMCArIHNpemVvZih1bnNpZ25lZCBsb25nKSwgMHhGRkZGRkZGRkwpOwogICAgICAgICBNQUN2U2VsZWN0UGFnZTAoZHdJb0Jhc2UpOwogICAgIH0KIApAQCAtNjQzLDcgKzY0Myw3IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNhdmVDb250ZXh0IChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUN4dEJ1ZikKK3ZvaWQgTUFDdlNhdmVDb250ZXh0ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlDeHRCdWYpCiB7CiAgICAgaW50ICAgICAgICAgaWk7CiAKQEAgLTY3Niw3ICs2NzYsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZSZXN0b3JlQ29udGV4dCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlDeHRCdWYpCit2b2lkIE1BQ3ZSZXN0b3JlQ29udGV4dCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5Q3h0QnVmKQogewogICAgIGludCAgICAgICAgIGlpOwogCkBAIC03MDMsMTQgKzcwMywxNCBAQAogICAgIH0KIAogICAgIC8vIHJlc3RvcmUgQ1VSUl9SWF9ERVNDX0FERFIsIENVUlJfVFhfREVTQ19BRERSCi0gICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQVBUUjAsICooUERXT1JEKShwYnlDeHRCdWYgKyBNQUNfUkVHX1RYRE1BUFRSMCkpOwotICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQUMwRE1BUFRSLCAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19BQzBETUFQVFIpKTsKLSAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0JDTkRNQVBUUiwgKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfQkNORE1BUFRSKSk7CisgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQVBUUjAsICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1RYRE1BUFRSMCkpOworICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQUMwRE1BUFRSLCAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19BQzBETUFQVFIpKTsKKyAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0JDTkRNQVBUUiwgKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfQkNORE1BUFRSKSk7CiAKIAotICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFQVFIwLCAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19SWERNQVBUUjApKTsKKyAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMCwgKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIwKSk7CiAKLSAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMSwgKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIxKSk7CisgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQVBUUjEsICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMSkpOwogCiB9CiAKQEAgLTcyNSwzOSArNzI1LDM5IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGFsbCB2YWx1ZXMgYXJlIHRoZSBzYW1lOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBhbGwgdmFsdWVzIGFyZSB0aGUgc2FtZTsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JDb21wYXJlQ29udGV4dCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlDeHRCdWYpCitib29sIE1BQ2JDb21wYXJlQ29udGV4dCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5Q3h0QnVmKQogewotICAgIERXT1JEICAgICAgIGR3RGF0YTsKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsKIAogICAgIC8vIGNvbXBhcmUgTUFDIGNvbnRleHQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwb3dlciBsb3N0IGluaXQsCi0gICAgLy8gcmV0dXJuIFRSVUUgZm9yIHBvd2VyIHJlbWFpbmluZyBpbml0LCByZXR1cm4gRkFMU0UgZm9yIHBvd2VyIGxvc3QgaW5pdAorICAgIC8vIHJldHVybiB0cnVlIGZvciBwb3dlciByZW1haW5pbmcgaW5pdCwgcmV0dXJuIGZhbHNlIGZvciBwb3dlciBsb3N0IGluaXQKIAogICAgIC8vIGNvbXBhcmUgQ1VSUl9SWF9ERVNDX0FERFIsIENVUlJfVFhfREVTQ19BRERSCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1RYRE1BUFRSMCwgJmR3RGF0YSk7Ci0gICAgaWYgKGR3RGF0YSAhPSAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19UWERNQVBUUjApKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoZHdEYXRhICE9ICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1RYRE1BUFRSMCkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BQzBETUFQVFIsICZkd0RhdGEpOwotICAgIGlmIChkd0RhdGEgIT0gKihQRFdPUkQpKHBieUN4dEJ1ZiArIE1BQ19SRUdfQUMwRE1BUFRSKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgaWYgKGR3RGF0YSAhPSAqKHVuc2lnbmVkIGxvbmcgKikocGJ5Q3h0QnVmICsgTUFDX1JFR19BQzBETUFQVFIpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFQVFIwLCAmZHdEYXRhKTsKLSAgICBpZiAoZHdEYXRhICE9ICooUERXT1JEKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMCkpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChkd0RhdGEgIT0gKih1bnNpZ25lZCBsb25nICopKHBieUN4dEJ1ZiArIE1BQ19SRUdfUlhETUFQVFIwKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMSwgJmR3RGF0YSk7Ci0gICAgaWYgKGR3RGF0YSAhPSAqKFBEV09SRCkocGJ5Q3h0QnVmICsgTUFDX1JFR19SWERNQVBUUjEpKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAoZHdEYXRhICE9ICoodW5zaWduZWQgbG9uZyAqKShwYnlDeHRCdWYgKyBNQUNfUkVHX1JYRE1BUFRSMSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC03NzAsMTMgKzc3MCwxMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBSZXNldCBTdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBSZXNldCBTdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYlNvZnR3YXJlUmVzZXQgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYlNvZnR3YXJlUmVzZXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7Ci0gICAgQllURSAgICBieURhdGE7Ci0gICAgV09SRCAgICB3dzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3dzsKIAogICAgIC8vIHR1cm4gb24gSE9TVENSX1NPRlRSU1QsIGp1c3Qgd3JpdGUgMHgwMSB0byByZXNldAogICAgIC8vTUFDdlJlZ0JpdHNPbihkd0lvQmFzZSwgTUFDX1JFR19IT1NUQ1IsIEhPU1RDUl9TT0ZUUlNUKTsKQEAgLTc4OCw4ICs3ODgsOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIAogfQogCkBAIC04MDMsMTMgKzgwMywxMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYlNhZmVTb2Z0d2FyZVJlc2V0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIE1BQ2JTYWZlU29mdHdhcmVSZXNldCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFICAgIGFieVRtcFJlZ0RhdGFbTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTArTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTFdOwotICAgIEJPT0wgICAgYlJldFZhbDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVRtcFJlZ0RhdGFbTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTArTUFDX01BWF9DT05URVhUX1NJWkVfUEFHRTFdOworICAgIGJvb2wgYlJldFZhbDsKIAogICAgIC8vIFBBVENILi4uLgogICAgIC8vIHNhdmUgc29tZSBpbXBvcnRhbnQgcmVnaXN0ZXIncyB2YWx1ZSwgdGhlbiBkbwpAQCAtODM2LDE0ICs4MzYsMTQgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTYWZlUnhPZmYgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYlNhZmVSeE9mZiAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBXT1JEICAgIHd3OwotICAgIERXT1JEICAgZHdEYXRhOwotICAgIEJZVEUgICAgYnlEYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHd3OworICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlEYXRhOwogCiAgICAgLy8gdHVybiBvZmYgd293IHRlbXAgZm9yIHR1cm4gb2ZmIFJ4IHNhZmVseQogCkBAIC04NTgsNyArODU4LDcgQEAKICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgewogICAgICAgICBEQkdfUE9SVDgwKDB4MTApOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBEQkdfUE9SVDgwKDB4MTApXG4iKTsKLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9CiAgICAgZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgewogICAgICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwxLCAmZHdEYXRhKTsKQEAgLTg2OCw3ICs4NjgsNyBAQAogICAgIGlmICh3dyA9PSBXX01BWF9USU1FT1VUKSB7CiAgICAgICAgIERCR19QT1JUODAoMHgxMSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgxMSlcbiIpOwotICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgIH0KIAogICAgIC8vIHRyeSB0byBzYWZlIHNodXRkb3duIFJYCkBAIC04ODIsOSArODgyLDkgQEAKICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgewogICAgICAgICBEQkdfUE9SVDgwKDB4MTIpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBEQkdfUE9SVDgwKDB4MTIpXG4iKTsKLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC04OTcsMTQgKzg5NywxNCBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYlNhZmVUeE9mZiAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiU2FmZVR4T2ZmICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIFdPUkQgICAgd3c7Ci0gICAgRFdPUkQgICBkd0RhdGE7Ci0gICAgQllURSAgICBieURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgd3c7CisgICAgdW5zaWduZWQgbG9uZyBkd0RhdGE7CisgICAgdW5zaWduZWQgY2hhciBieURhdGE7CiAKICAgICAvLyBDbGVhciBUWCBETUEKICAgICAvL1R4MApAQCAtOTIxLDcgKzkyMSw3IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDIwKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDIwKVxuIik7Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQogICAgIGZvciAod3cgPSAwOyB3dyA8IFdfTUFYX1RJTUVPVVQ7IHd3KyspIHsKICAgICAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCwgJmR3RGF0YSk7CkBAIC05MzEsNyArOTMxLDcgQEAKICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgewogICAgICAgICBEQkdfUE9SVDgwKDB4MjEpOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBEQkdfUE9SVDgwKDB4MjEpXG4iKTsKLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9CiAKICAgICAvLyB0cnkgdG8gc2FmZSBzaHV0ZG93biBUWApAQCAtOTQ2LDkgKzk0Niw5IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDI0KTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDI0KVxuIik7Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtOTYxLDI5ICs5NjEsMjkgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIE1BQ2JTYWZlU3RvcCAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiU2FmZVN0b3AgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7CiAgICAgTUFDdlJlZ0JpdHNPZmYoZHdJb0Jhc2UsIE1BQ19SRUdfVENSLCBUQ1JfQVVUT0JDTlRYKTsKIAotICAgIGlmIChNQUNiU2FmZVJ4T2ZmKGR3SW9CYXNlKSA9PSBGQUxTRSkgeworICAgIGlmIChNQUNiU2FmZVJ4T2ZmKGR3SW9CYXNlKSA9PSBmYWxzZSkgewogICAgICAgICBEQkdfUE9SVDgwKDB4QTEpOwotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBNQUNiU2FmZVJ4T2ZmID09IEZBTFNFKVxuIik7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIE1BQ2JTYWZlUnhPZmYgPT0gZmFsc2UpXG4iKTsKICAgICAgICAgTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KGR3SW9CYXNlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChNQUNiU2FmZVR4T2ZmKGR3SW9CYXNlKSA9PSBGQUxTRSkgeworICAgIGlmIChNQUNiU2FmZVR4T2ZmKGR3SW9CYXNlKSA9PSBmYWxzZSkgewogICAgICAgICBEQkdfUE9SVDgwKDB4QTIpOwotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBNQUNiU2FmZVR4T2ZmID09IEZBTFNFKVxuIik7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIE1BQ2JTYWZlVHhPZmYgPT0gZmFsc2UpXG4iKTsKICAgICAgICAgTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KGR3SW9CYXNlKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgTUFDdlJlZ0JpdHNPZmYoZHdJb0Jhc2UsIE1BQ19SRUdfSE9TVENSLCBIT1NUQ1JfTUFDRU4pOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC05OTYsMTAgKzk5NiwxMCBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgTUFDYlNodXRkb3duIChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIE1BQ2JTaHV0ZG93biAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKICAgICAvLyBkaXNhYmxlIE1BQyBJTVIKICAgICBNQUN2SW50RGlzYWJsZShkd0lvQmFzZSk7CkBAIC0xMDA3LDEwICsxMDA3LDEwIEBACiAgICAgLy8gc3RvcCB0aGUgYWRhcHRlcgogICAgIGlmICghTUFDYlNhZmVTdG9wKGR3SW9CYXNlKSkgewogICAgICAgICBNQUN2U2V0TG9vcGJhY2tNb2RlKGR3SW9CYXNlLCBNQUNfTEJfTk9ORSk7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBNQUN2U2V0TG9vcGJhY2tNb2RlKGR3SW9CYXNlLCBNQUNfTEJfTk9ORSk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZJbml0aWFsaXplIChEV09SRF9QVFIgZHdJb0Jhc2UpCit2b2lkIE1BQ3ZJbml0aWFsaXplICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewogICAgIC8vIGNsZWFyIHN0aWNreSBiaXRzCiAgICAgTUFDdkNsZWFyU3Rja0RTKGR3SW9CYXNlKTsKQEAgLTEwNDUsOCArMTA0NSw4IEBACiAgICAgLy8gaXNzdWUgQVVUT0xEIGluIEVFQ1NSIHRvIHJlbG9hZCBlZXByb20KICAgICAvL01BQ3ZSZWdCaXRzT24oZHdJb0Jhc2UsIE1BQ19SRUdfSTJNQ1NSLCBJMk1DU1JfQVVUT0xEKTsKICAgICAvLyB3YWl0IHVudGlsIEVFUFJPTSBsb2FkaW5nIGNvbXBsZXRlCi0gICAgLy93aGlsZSAoVFJVRSkgewotICAgIC8vICAgIFU4IHU4RGF0YTsKKyAgICAvL3doaWxlICh0cnVlKSB7CisgICAgLy8gICAgdTggdThEYXRhOwogICAgIC8vICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DU1IsICZ1OERhdGEpOwogICAgIC8vICAgIGlmICggISh1OERhdGEgJiBJMk1DU1JfQVVUT0xEKSkKICAgICAvLyAgICAgICAgYnJlYWs7CkBAIC0xMDc5LDExICsxMDc5LDExIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldEN1cnJSeDBEZXNjQWRkciAoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcikKK3ZvaWQgTUFDdlNldEN1cnJSeDBEZXNjQWRkciAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcikKIHsKLVdPUkQgICAgd3c7Ci1CWVRFICAgIGJ5RGF0YTsKLUJZVEUgICAgYnlPcmdETUFDdGw7Cit1bnNpZ25lZCBzaG9ydCB3dzsKK3Vuc2lnbmVkIGNoYXIgYnlEYXRhOwordW5zaWduZWQgY2hhciBieU9yZ0RNQUN0bDsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19SWERNQUNUTDAsICZieU9yZ0RNQUN0bCk7CiAgICAgaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgewpAQCAtMTExNywxMSArMTExNywxMSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZTZXRDdXJyUngxRGVzY0FkZHIgKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpCit2b2lkIE1BQ3ZTZXRDdXJyUngxRGVzY0FkZHIgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpCiB7Ci1XT1JEICAgIHd3OwotQllURSAgICBieURhdGE7Ci1CWVRFICAgIGJ5T3JnRE1BQ3RsOwordW5zaWduZWQgc2hvcnQgd3c7Cit1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKK3Vuc2lnbmVkIGNoYXIgYnlPcmdETUFDdGw7CiAKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwxLCAmYnlPcmdETUFDdGwpOwogICAgIGlmIChieU9yZ0RNQUN0bCAmIERNQUNUTF9SVU4pIHsKQEAgLTExNTUsMTEgKzExNTUsMTEgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2U2V0Q3VyclR4MERlc2NBZGRyRXggKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpCit2b2lkIE1BQ3ZTZXRDdXJyVHgwRGVzY0FkZHJFeCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcikKIHsKLVdPUkQgICAgd3c7Ci1CWVRFICAgIGJ5RGF0YTsKLUJZVEUgICAgYnlPcmdETUFDdGw7Cit1bnNpZ25lZCBzaG9ydCB3dzsKK3Vuc2lnbmVkIGNoYXIgYnlEYXRhOwordW5zaWduZWQgY2hhciBieU9yZ0RNQUN0bDsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQUNUTDAsICZieU9yZ0RNQUN0bCk7CiAgICAgaWYgKGJ5T3JnRE1BQ3RsICYgRE1BQ1RMX1JVTikgewpAQCAtMTE5NCwxMSArMTE5NCwxMSBAQAogICoKICAqLwogIC8vVHhETUExID0gQUMwRE1BCi12b2lkIE1BQ3ZTZXRDdXJyQUMwRGVzY0FkZHJFeCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcikKK3ZvaWQgTUFDdlNldEN1cnJBQzBEZXNjQWRkckV4ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKQogewotV09SRCAgICB3dzsKLUJZVEUgICAgYnlEYXRhOwotQllURSAgICBieU9yZ0RNQUN0bDsKK3Vuc2lnbmVkIHNob3J0IHd3OwordW5zaWduZWQgY2hhciBieURhdGE7Cit1bnNpZ25lZCBjaGFyIGJ5T3JnRE1BQ3RsOwogCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCwgJmJ5T3JnRE1BQ3RsKTsKICAgICBpZiAoYnlPcmdETUFDdGwgJiBETUFDVExfUlVOKSB7CkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCiAKIAotdm9pZCBNQUN2U2V0Q3VyclRYRGVzY0FkZHIgKGludCBpVHhUeXBlLCBEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKQordm9pZCBNQUN2U2V0Q3VyclRYRGVzY0FkZHIgKGludCBpVHhUeXBlLCB1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKQogewogICAgIGlmKGlUeFR5cGUgPT0gVFlQRV9BQzBETUEpewogICAgICAgICBNQUN2U2V0Q3VyckFDMERlc2NBZGRyRXgoZHdJb0Jhc2UsIGR3Q3VyckRlc2NBZGRyKTsKQEAgLTEyNDQsMTAgKzEyNDQsMTAgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2VGltZXIwTWljcm9TRGVsYXkgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1RGVsYXkpCit2b2lkIE1BQ3ZUaW1lcjBNaWNyb1NEZWxheSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVEZWxheSkKIHsKLUJZVEUgYnlWYWx1ZTsKLVVJTlQgdXUsaWk7Cit1bnNpZ25lZCBjaGFyIGJ5VmFsdWU7Cit1bnNpZ25lZCBpbnQgdXUsaWk7CiAKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1RNQ1RMMCwgMCk7CiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UTURBVEEwLCB1RGVsYXkpOwpAQCAtMTI4MCw3ICsxMjgwLDcgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBNQUN2T25lU2hvdFRpbWVyME1pY3JvU2VjIChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdURlbGF5VGltZSkKK3ZvaWQgTUFDdk9uZVNob3RUaW1lcjBNaWNyb1NlYyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVEZWxheVRpbWUpCiB7CiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UTUNUTDAsIDApOwogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVE1EQVRBMCwgdURlbGF5VGltZSk7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIE1BQ3ZPbmVTaG90VGltZXIxTWljcm9TZWMgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1RGVsYXlUaW1lKQordm9pZCBNQUN2T25lU2hvdFRpbWVyMU1pY3JvU2VjICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgdURlbGF5VGltZSkKIHsKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1RNQ1RMMSwgMCk7CiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UTURBVEExLCB1RGVsYXlUaW1lKTsKQEAgLTEzMDksNyArMTMwOSw3IEBACiB9CiAKIAotdm9pZCBNQUN2U2V0TUlTQ0ZpZm8gKERXT1JEX1BUUiBkd0lvQmFzZSwgV09SRCB3T2Zmc2V0LCBEV09SRCBkd0RhdGEpCit2b2lkIE1BQ3ZTZXRNSVNDRmlmbyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd09mZnNldCwgdW5zaWduZWQgbG9uZyBkd0RhdGEpCiB7CiAgICAgaWYgKHdPZmZzZXQgPiAyNzMpCiAgICAgICAgIHJldHVybjsKQEAgLTEzMTksMTAgKzEzMTksMTAgQEAKIH0KIAogCi1CT09MIE1BQ2JUeERNQU9mZiAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIGlkeCkKK2Jvb2wgTUFDYlR4RE1BT2ZmICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgaWR4KQogewotQllURSBieURhdGE7Ci1VSU5UIHd3ID0gMDsKK3Vuc2lnbmVkIGNoYXIgYnlEYXRhOwordW5zaWduZWQgaW50IHd3ID0gMDsKIAogICAgIGlmIChpZHggPT0gVFlQRV9UWERNQTApIHsKICAgICAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQUNUTDArMiwgRE1BQ1RMX1JVTik7CkBAIC0xMzQyLDE1ICsxMzQyLDE1IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDI5KTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDI5KVxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBNQUN2Q2xlYXJCdXNTdXNJbmQgKERXT1JEX1BUUiBkd0lvQmFzZSkKK3ZvaWQgTUFDdkNsZWFyQnVzU3VzSW5kICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIERXT1JEIGR3T3JnVmFsdWU7Ci0gICAgVUlOVCB3dzsKKyAgICB1bnNpZ25lZCBsb25nIGR3T3JnVmFsdWU7CisgICAgdW5zaWduZWQgaW50IHd3OwogICAgIC8vIGNoZWNrIGlmIEJjblN1c0luZCBlbmFibGVkCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOwogICAgIGlmKCAhKGR3T3JnVmFsdWUgJiBFbkNGR19CY25TdXNJbmQpKQpAQCAtMTM2OSwxMSArMTM2OSwxMSBAQAogICAgIH0KIH0KIAotdm9pZCBNQUN2RW5hYmxlQnVzU3VzRW4gKERXT1JEX1BUUiBkd0lvQmFzZSkKK3ZvaWQgTUFDdkVuYWJsZUJ1c1N1c0VuICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIEJZVEUgIGJ5T3JnVmFsdWU7Ci0gICAgRFdPUkQgZHdPcmdWYWx1ZTsKLSAgICBVSU5UIHd3OworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdWYWx1ZTsKKyAgICB1bnNpZ25lZCBsb25nIGR3T3JnVmFsdWU7CisgICAgdW5zaWduZWQgaW50IHd3OwogICAgIC8vIGNoZWNrIGlmIEJjblN1c0luZCBlbmFibGVkCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0NGRyAsICZieU9yZ1ZhbHVlKTsKIApAQCAtMTM5MSwxMCArMTM5MSwxMCBAQAogICAgIH0KIH0KIAotQk9PTCBNQUNiRmx1c2hTWU5DRmlmbyAoRFdPUkRfUFRSIGR3SW9CYXNlKQorYm9vbCBNQUNiRmx1c2hTWU5DRmlmbyAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFICBieU9yZ1ZhbHVlOwotICAgIFVJTlQgd3c7CisgICAgdW5zaWduZWQgY2hhciBieU9yZ1ZhbHVlOworICAgIHVuc2lnbmVkIGludCB3dzsKICAgICAvLyBSZWFkIE1BQ0NSCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX01BQ0NSICwgJmJ5T3JnVmFsdWUpOwogCkBAIC0xNDEyLDE2ICsxNDEyLDE2IEBACiAgICAgICAgIERCR19QT1JUODAoMHgzNSk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIERCR19QT1JUODAoMHgzMylcbiIpOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQk9PTCBNQUNiUFNXYWtldXAgKERXT1JEX1BUUiBkd0lvQmFzZSkKK2Jvb2wgTUFDYlBTV2FrZXVwICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKQogewotICAgIEJZVEUgIGJ5T3JnVmFsdWU7Ci0gICAgVUlOVCB3dzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7CisgICAgdW5zaWduZWQgaW50IHd3OwogICAgIC8vIFJlYWQgUFNDVEwKICAgICBpZiAoTUFDYklzUmVnQml0c09mZihkd0lvQmFzZSwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFMpKSB7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gRGlzYWJsZSBQUwogICAgIE1BQ3ZSZWdCaXRzT2ZmKGR3SW9CYXNlLCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9QU0VOKTsKQEAgLTE0MzUsOSArMTQzNSw5IEBACiAgICAgaWYgKHd3ID09IFdfTUFYX1RJTUVPVVQpIHsKICAgICAgICAgREJHX1BPUlQ4MCgweDM2KTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgREJHX1BPUlQ4MCgweDMzKVxuIik7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTE0NTUsMTAgKzE0NTUsMTEgQEAKICAqCiAgKi8KIAotdm9pZCBNQUN2U2V0S2V5RW50cnkgKERXT1JEX1BUUiBkd0lvQmFzZSwgV09SRCB3S2V5Q3RsLCBVSU5UIHVFbnRyeUlkeCwgVUlOVCB1S2V5SWR4LCBQQllURSBwYnlBZGRyLCBQRFdPUkQgcGR3S2V5LCBCWVRFIGJ5TG9jYWxJRCkKK3ZvaWQgTUFDdlNldEtleUVudHJ5ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3S2V5Q3RsLCB1bnNpZ25lZCBpbnQgdUVudHJ5SWR4LAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5QWRkciwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCkKIHsKLVdPUkQgICAgd09mZnNldDsKLURXT1JEICAgZHdEYXRhOwordW5zaWduZWQgc2hvcnQgd09mZnNldDsKK3Vuc2lnbmVkIGxvbmcgZHdEYXRhOwogaW50ICAgICBpaTsKIAogICAgIGlmIChieUxvY2FsSUQgPD0gMSkKQEAgLTE1MjEsOSArMTUyMiw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeSAoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVFbnRyeUlkeCkKK3ZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCkKIHsKLVdPUkQgICAgd09mZnNldDsKK3Vuc2lnbmVkIHNob3J0IHdPZmZzZXQ7CiAKICAgICB3T2Zmc2V0ID0gTUlTQ0ZJRk9fS0VZRVRSWTA7CiAgICAgd09mZnNldCArPSAodUVudHJ5SWR4ICogTUlTQ0ZJRk9fS0VZRU5UUllTSVpFKTsKQEAgLTE1NDksMTAgKzE1NTAsMTEgQEAKICAqCiAgKi8KIAotdm9pZCBNQUN2U2V0RGVmYXVsdEtleUVudHJ5IChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdUtleUxlbiwgVUlOVCB1S2V5SWR4LCBQRFdPUkQgcGR3S2V5LCBCWVRFIGJ5TG9jYWxJRCkKK3ZvaWQgTUFDdlNldERlZmF1bHRLZXlFbnRyeSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVLZXlMZW4sCisJCXVuc2lnbmVkIGludCB1S2V5SWR4LCB1bnNpZ25lZCBsb25nICpwZHdLZXksIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKQogewotV09SRCAgICB3T2Zmc2V0OwotRFdPUkQgICBkd0RhdGE7Cit1bnNpZ25lZCBzaG9ydCB3T2Zmc2V0OwordW5zaWduZWQgbG9uZyBkd0RhdGE7CiBpbnQgICAgIGlpOwogCiAgICAgaWYgKGJ5TG9jYWxJRCA8PSAxKQpAQCAtMTU5OSwxMCArMTYwMSwxMCBAQAogICoKICAqLwogLyoKLXZvaWQgTUFDdkVuYWJsZURlZmF1bHRLZXkgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUxvY2FsSUQpCit2b2lkIE1BQ3ZFbmFibGVEZWZhdWx0S2V5ICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCkKIHsKLVdPUkQgICAgd09mZnNldDsKLURXT1JEICAgZHdEYXRhOwordW5zaWduZWQgc2hvcnQgd09mZnNldDsKK3Vuc2lnbmVkIGxvbmcgZHdEYXRhOwogCiAKICAgICBpZiAoYnlMb2NhbElEIDw9IDEpCkBAIC0xNjM0LDEwICsxNjM2LDEwIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdkRpc2FibGVEZWZhdWx0S2V5IChEV09SRF9QVFIgZHdJb0Jhc2UpCit2b2lkIE1BQ3ZEaXNhYmxlRGVmYXVsdEtleSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLVdPUkQgICAgd09mZnNldDsKLURXT1JEICAgZHdEYXRhOwordW5zaWduZWQgc2hvcnQgd09mZnNldDsKK3Vuc2lnbmVkIGxvbmcgZHdEYXRhOwogCiAKICAgICB3T2Zmc2V0ID0gTUlTQ0ZJRk9fS0VZRVRSWTA7CkBAIC0xNjY0LDEwICsxNjY2LDExIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgTUFDdlNldERlZmF1bHRUS0lQS2V5RW50cnkgKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1S2V5TGVuLCBVSU5UIHVLZXlJZHgsIFBEV09SRCBwZHdLZXksIEJZVEUgYnlMb2NhbElEKQordm9pZCBNQUN2U2V0RGVmYXVsdFRLSVBLZXlFbnRyeSAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVLZXlMZW4sCisJCXVuc2lnbmVkIGludCB1S2V5SWR4LCB1bnNpZ25lZCBsb25nICpwZHdLZXksIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKQogewotV09SRCAgICB3T2Zmc2V0OwotRFdPUkQgICBkd0RhdGE7Cit1bnNpZ25lZCBzaG9ydCB3T2Zmc2V0OwordW5zaWduZWQgbG9uZyBkd0RhdGE7CiBpbnQgICAgIGlpOwogCiAgICAgaWYgKGJ5TG9jYWxJRCA8PSAxKQpAQCAtMTcyMCwxMCArMTcyMywxMCBAQAogICoKICAqLwogCi12b2lkIE1BQ3ZTZXREZWZhdWx0S2V5Q3RsIChEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0tleUN0bCwgVUlOVCB1RW50cnlJZHgsIEJZVEUgYnlMb2NhbElEKQordm9pZCBNQUN2U2V0RGVmYXVsdEtleUN0bCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpCiB7Ci1XT1JEICAgIHdPZmZzZXQ7Ci1EV09SRCAgIGR3RGF0YTsKK3Vuc2lnbmVkIHNob3J0IHdPZmZzZXQ7Cit1bnNpZ25lZCBsb25nIGR3RGF0YTsKIAogICAgIGlmIChieUxvY2FsSUQgPD0gMSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWFjLmgKaW5kZXggNWViN2Y1Ny4uYjk2ZDI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9tYWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21hYy5oCkBAIC02NjMsMjggKzY2MywyOCBAQAogCiAjZGVmaW5lIE1BQ3ZSZWdCaXRzT24oZHdJb0Jhc2UsIGJ5UmVnT2ZzLCBieUJpdHMpICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQllURSBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgY2hhciBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBieVJlZ09mcywgJmJ5RGF0YSk7ICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsIGJ5RGF0YSB8IChieUJpdHMpKTsgICBcCiB9CiAKICNkZWZpbmUgTUFDdldvcmRSZWdCaXRzT24oZHdJb0Jhc2UsIGJ5UmVnT2ZzLCB3Qml0cykgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBXT1JEIHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBzaG9ydCB3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Vyhkd0lvQmFzZSArIGJ5UmVnT2ZzLCAmd0RhdGEpOyAgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydFcoZHdJb0Jhc2UgKyBieVJlZ09mcywgd0RhdGEgfCAod0JpdHMpKTsgICAgIFwKIH0KIAogI2RlZmluZSBNQUN2RFdvcmRSZWdCaXRzT24oZHdJb0Jhc2UsIGJ5UmVnT2ZzLCBkd0JpdHMpICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgYnlSZWdPZnMsICZkd0RhdGEpOyAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIGJ5UmVnT2ZzLCBkd0RhdGEgfCAoZHdCaXRzKSk7ICAgXAogfQogCiAjZGVmaW5lIE1BQ3ZSZWdCaXRzT25FeChkd0lvQmFzZSwgYnlSZWdPZnMsIGJ5TWFzaywgYnlCaXRzKSBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQllURSBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgY2hhciBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBieVJlZ09mcywgJmJ5RGF0YSk7ICAgICAgICAgICAgICBcCiAgICAgYnlEYXRhICY9IGJ5TWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsIGJ5RGF0YSB8IChieUJpdHMpKTsgICBcCkBAIC02OTIsMjEgKzY5MiwyMSBAQAogCiAjZGVmaW5lIE1BQ3ZSZWdCaXRzT2ZmKGR3SW9CYXNlLCBieVJlZ09mcywgYnlCaXRzKSAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQllURSBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgY2hhciBieURhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBieVJlZ09mcywgJmJ5RGF0YSk7ICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgYnlSZWdPZnMsIGJ5RGF0YSAmIH4oYnlCaXRzKSk7ICBcCiB9CiAKICNkZWZpbmUgTUFDdldvcmRSZWdCaXRzT2ZmKGR3SW9CYXNlLCBieVJlZ09mcywgd0JpdHMpICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBXT1JEIHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBzaG9ydCB3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Vyhkd0lvQmFzZSArIGJ5UmVnT2ZzLCAmd0RhdGEpOyAgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydFcoZHdJb0Jhc2UgKyBieVJlZ09mcywgd0RhdGEgJiB+KHdCaXRzKSk7ICAgIFwKIH0KIAogI2RlZmluZSBNQUN2RFdvcmRSZWdCaXRzT2ZmKGR3SW9CYXNlLCBieVJlZ09mcywgZHdCaXRzKSAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgYnlSZWdPZnMsICZkd0RhdGEpOyAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0RChkd0lvQmFzZSArIGJ5UmVnT2ZzLCBkd0RhdGEgJiB+KGR3Qml0cykpOyAgXAogfQpAQCAtNzE0LDM3ICs3MTQsMzcgQEAKICNkZWZpbmUgTUFDdkdldEN1cnJSeDBEZXNjQWRkcihkd0lvQmFzZSwgcGR3Q3VyckRlc2NBZGRyKSAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BUFRSMCwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKFBEV09SRClwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgKilwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkdldEN1cnJSeDFEZXNjQWRkcihkd0lvQmFzZSwgcGR3Q3VyckRlc2NBZGRyKSAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFQVFIxLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoUERXT1JEKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBNQUN2R2V0Q3VyclR4MERlc2NBZGRyKGR3SW9CYXNlLCBwZHdDdXJyRGVzY0FkZHIpICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19UWERNQVBUUjAsICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQRFdPUkQpcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgXAogfQogCiAjZGVmaW5lIE1BQ3ZHZXRDdXJyQUMwRGVzY0FkZHIoZHdJb0Jhc2UsIHBkd0N1cnJEZXNjQWRkcikgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQVBUUiwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKFBEV09SRClwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgKilwZHdDdXJyRGVzY0FkZHIpOyAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgTUFDdkdldEN1cnJTeW5jRGVzY0FkZHIoZHdJb0Jhc2UsIHBkd0N1cnJEZXNjQWRkcikgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfU1lOQ0RNQVBUUiwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoUERXT1JEKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyAqKXBkd0N1cnJEZXNjQWRkcik7ICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBNQUN2R2V0Q3VyckFUSU1EZXNjQWRkcihkd0lvQmFzZSwgcGR3Q3VyckRlc2NBZGRyKSAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BVElNRE1BUFRSLCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQRFdPUkQpcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopcGR3Q3VyckRlc2NBZGRyKTsgICAgICAgICAgXAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCiAvLyBzZXQgdGhlIGNoaXAgd2l0aCBjdXJyZW50IEJDTiB0eCBkZXNjcmlwdG9yIGFkZHJlc3MKQEAgLTc2NSw3ICs3NjUsNyBAQAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfUEFHRTFTRUwsIDEpOyAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19CU1NJRDAsICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChQQllURSlwYnlFdGhlckFkZHIpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopcGJ5RXRoZXJBZGRyKTsgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19CU1NJRDAgKyAxLCAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIHBieUV0aGVyQWRkciArIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19CU1NJRDAgKyAyLCAgICAgICAgICAgICAgXApAQCAtODAxLDcgKzgwMSw3IEBACiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19QQUdFMVNFTCwgMSk7ICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1BBUjAsICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKFBCWVRFKXBieUV0aGVyQWRkcik7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwYnlFdGhlckFkZHIpOyAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1BBUjAgKyAxLCAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgcGJ5RXRoZXJBZGRyICsgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1BBUjAgKyAyLCAgICAgICAgICAgICAgICBcCkBAIC04NzMsNyArODczLDcgQEAKIAogI2RlZmluZSBNQUN2UmVjZWl2ZTAoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwwLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMCwgRE1BQ1RMX1dBS0UpO1wKQEAgLTg4NSw3ICs4ODUsNyBAQAogCiAjZGVmaW5lIE1BQ3ZSZWNlaXZlMShkd0lvQmFzZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfUlhETUFDVEwxLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1JYRE1BQ1RMMSwgRE1BQ1RMX1dBS0UpO1wKQEAgLTkwMiw3ICs5MDIsNyBAQAogCiAjZGVmaW5lIE1BQ3ZUcmFuc21pdDAoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfVFhETUFDVEwwLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1RYRE1BQ1RMMCwgRE1BQ1RMX1dBS0UpO1wKQEAgLTkxNCw3ICs5MTQsNyBAQAogCiAjZGVmaW5lIE1BQ3ZUcmFuc21pdEFDMChkd0lvQmFzZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfQUMwRE1BQ1RMLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0FDMERNQUNUTCwgRE1BQ1RMX1dBS0UpO1wKQEAgLTkyNiw3ICs5MjYsNyBAQAogCiAjZGVmaW5lIE1BQ3ZUcmFuc21pdFNZTkMoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIERXT1JEIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGxvbmcgZHdEYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1NZTkNETUFDVEwsICZkd0RhdGEpOyAgICAgICAgIFwKICAgICBpZiAoZHdEYXRhICYgRE1BQ1RMX1JVTikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX1NZTkNETUFDVEwsIERNQUNUTF9XQUtFKTtcCkBAIC05MzgsNyArOTM4LDcgQEAKIAogI2RlZmluZSBNQUN2VHJhbnNtaXRBVElNKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd0RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZOU3ZJblBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BVElNRE1BQ1RMLCAmZHdEYXRhKTsgICAgICAgICBcCiAgICAgaWYgKGR3RGF0YSAmIERNQUNUTF9SVU4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19BVElNRE1BQ1RMLCBETUFDVExfV0FLRSk7XApAQCAtOTU1LDcgKzk1NSw3IEBACiAKICNkZWZpbmUgTUFDdkNsZWFyU3Rja0RTKGR3SW9CYXNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBCWVRFIGJ5T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfU1RJQ0tIVywgJmJ5T3JnVmFsdWUpOyAgIFwKICAgICBieU9yZ1ZhbHVlID0gYnlPcmdWYWx1ZSAmIDB4RkM7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX1NUSUNLSFcsIGJ5T3JnVmFsdWUpOyAgIFwKQEAgLTEwMDIsNyArMTAwMiw3IEBACiAKICNkZWZpbmUgTUFDdkVuYWJsZVByb3RlY3RNRChkd0lvQmFzZSkgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfRU5DRkcgLCAmZHdPcmdWYWx1ZSk7IFwKICAgICBkd09yZ1ZhbHVlID0gZHdPcmdWYWx1ZSB8IEVuQ0ZHX1Byb3RlY3RNZDsgICAgICAgICAgIFwKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHLCBkd09yZ1ZhbHVlKTsgIFwKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAKICNkZWZpbmUgTUFDdkRpc2FibGVQcm90ZWN0TUQoZHdJb0Jhc2UpICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOyBcCiAgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgJiB+RW5DRkdfUHJvdGVjdE1kOyAgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRywgZHdPcmdWYWx1ZSk7ICBcCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiAjZGVmaW5lIE1BQ3ZFbmFibGVCYXJrZXJQcmVhbWJsZU1kKGR3SW9CYXNlKSAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOyBcCiAgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgfCBFbkNGR19CYXJrZXJQcmVhbTsgICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRywgZHdPcmdWYWx1ZSk7ICBcCkBAIC0xMDI2LDcgKzEwMjYsNyBAQAogCiAjZGVmaW5lIE1BQ3ZEaXNhYmxlQmFya2VyUHJlYW1ibGVNZChkd0lvQmFzZSkgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRFdPUkQgZHdPcmdWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgVk5TdkluUG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHICwgJmR3T3JnVmFsdWUpOyBcCiAgICAgZHdPcmdWYWx1ZSA9IGR3T3JnVmFsdWUgJiB+RW5DRkdfQmFya2VyUHJlYW07ICAgICAgICBcCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19FTkNGRywgZHdPcmdWYWx1ZSk7ICBcCkBAIC0xMDM0LDEwICsxMDM0LDEwIEBACiAKICNkZWZpbmUgTUFDdlNldEJCVHlwZShkd0lvQmFzZSwgYnlUeXApICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBEV09SRCBkd09yZ1ZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGR3T3JnVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBWTlN2SW5Qb3J0RChkd0lvQmFzZSArIE1BQ19SRUdfRU5DRkcgLCAmZHdPcmdWYWx1ZSk7IFwKICAgICBkd09yZ1ZhbHVlID0gZHdPcmdWYWx1ZSAmIH5FbkNGR19CQlR5cGVfTUFTSzsgICAgICAgIFwKLSAgICBkd09yZ1ZhbHVlID0gZHdPcmdWYWx1ZSB8IChEV09SRCkgYnlUeXA7ICAgICAgICAgICAgIFwKKyAgICBkd09yZ1ZhbHVlID0gZHdPcmdWYWx1ZSB8ICh1bnNpZ25lZCBsb25nKSBieVR5cDsgICAgIFwKICAgICBWTlN2T3V0UG9ydEQoZHdJb0Jhc2UgKyBNQUNfUkVHX0VOQ0ZHLCBkd09yZ1ZhbHVlKTsgIFwKIH0KIApAQCAtMTA3NCw3OCArMTA3NCw4MSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1leHRlcm4gV09SRCBUeFJhdGVfaXdjb25maWc7Ly8yMDA4LTUtOCA8YWRkPiBieSBjaGVzdGVyCi12b2lkIE1BQ3ZSZWFkQWxsUmVncyhEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieU1hY1JlZ3MpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFR4UmF0ZV9pd2NvbmZpZzsvLzIwMDgtNS04IDxhZGQ+IGJ5IGNoZXN0ZXIKK3ZvaWQgTUFDdlJlYWRBbGxSZWdzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieU1hY1JlZ3MpOwogCi1CT09MIE1BQ2JJc1JlZ0JpdHNPbihEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSZWdPZnMsIEJZVEUgYnlUZXN0Qml0cyk7Ci1CT09MIE1BQ2JJc1JlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UmVnT2ZzLCBCWVRFIGJ5VGVzdEJpdHMpOworYm9vbCBNQUNiSXNSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJlZ09mcywgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKK2Jvb2wgTUFDYklzUmVnQml0c09mZih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UmVnT2ZzLCB1bnNpZ25lZCBjaGFyIGJ5VGVzdEJpdHMpOwogCi1CT09MIE1BQ2JJc0ludERpc2FibGUoRFdPUkRfUFRSIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYklzSW50RGlzYWJsZSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAotQllURSBNQUNieVJlYWRNdWx0aUFkZHIoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVCeXRlSWR4KTsKLXZvaWQgTUFDdldyaXRlTXVsdGlBZGRyKERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1Qnl0ZUlkeCwgQllURSBieURhdGEpOwotdm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUhhc2hJZHgpOwotdm9pZCBNQUN2UmVzZXRNdWx0aUFkZHJCeUhhc2goRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5SGFzaElkeCk7Cit1bnNpZ25lZCBjaGFyIE1BQ2J5UmVhZE11bHRpQWRkcih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgdUJ5dGVJZHgpOwordm9pZCBNQUN2V3JpdGVNdWx0aUFkZHIodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVCeXRlSWR4LCB1bnNpZ25lZCBjaGFyIGJ5RGF0YSk7Cit2b2lkIE1BQ3ZTZXRNdWx0aUFkZHJCeUhhc2godW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUhhc2hJZHgpOwordm9pZCBNQUN2UmVzZXRNdWx0aUFkZHJCeUhhc2godW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUhhc2hJZHgpOwogCi12b2lkIE1BQ3ZTZXRSeFRocmVzaG9sZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlUaHJlc2hvbGQpOwotdm9pZCBNQUN2R2V0UnhUaHJlc2hvbGQoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlUaHJlc2hvbGQpOwordm9pZCBNQUN2U2V0UnhUaHJlc2hvbGQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVRocmVzaG9sZCk7Cit2b2lkIE1BQ3ZHZXRSeFRocmVzaG9sZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlUaHJlc2hvbGQpOwogCi12b2lkIE1BQ3ZTZXRUeFRocmVzaG9sZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlUaHJlc2hvbGQpOwotdm9pZCBNQUN2R2V0VHhUaHJlc2hvbGQoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlUaHJlc2hvbGQpOwordm9pZCBNQUN2U2V0VHhUaHJlc2hvbGQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVRocmVzaG9sZCk7Cit2b2lkIE1BQ3ZHZXRUeFRocmVzaG9sZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlUaHJlc2hvbGQpOwogCi12b2lkIE1BQ3ZTZXREbWFMZW5ndGgoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5RG1hTGVuZ3RoKTsKLXZvaWQgTUFDdkdldERtYUxlbmd0aChEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieURtYUxlbmd0aCk7Cit2b2lkIE1BQ3ZTZXREbWFMZW5ndGgodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieURtYUxlbmd0aCk7Cit2b2lkIE1BQ3ZHZXREbWFMZW5ndGgodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RG1hTGVuZ3RoKTsKIAotdm9pZCBNQUN2U2V0U2hvcnRSZXRyeUxpbWl0KERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJldHJ5TGltaXQpOwotdm9pZCBNQUN2R2V0U2hvcnRSZXRyeUxpbWl0KERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5UmV0cnlMaW1pdCk7Cit2b2lkIE1BQ3ZTZXRTaG9ydFJldHJ5TGltaXQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieVJldHJ5TGltaXQpOwordm9pZCBNQUN2R2V0U2hvcnRSZXRyeUxpbWl0KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieVJldHJ5TGltaXQpOwogCi12b2lkIE1BQ3ZTZXRMb25nUmV0cnlMaW1pdChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSZXRyeUxpbWl0KTsKLXZvaWQgTUFDdkdldExvbmdSZXRyeUxpbWl0KERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5UmV0cnlMaW1pdCk7Cit2b2lkIE1BQ3ZTZXRMb25nUmV0cnlMaW1pdCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UmV0cnlMaW1pdCk7Cit2b2lkIE1BQ3ZHZXRMb25nUmV0cnlMaW1pdCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlSZXRyeUxpbWl0KTsKIAotdm9pZCBNQUN2U2V0TG9vcGJhY2tNb2RlKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUxvb3BiYWNrTW9kZSk7Ci1CT09MIE1BQ2JJc0luTG9vcGJhY2tNb2RlKERXT1JEX1BUUiBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZTZXRMb29wYmFja01vZGUodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUxvb3BiYWNrTW9kZSk7Citib29sIE1BQ2JJc0luTG9vcGJhY2tNb2RlKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwogCi12b2lkIE1BQ3ZTZXRQYWNrZXRGaWx0ZXIoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdGaWx0ZXJUeXBlKTsKK3ZvaWQgTUFDdlNldFBhY2tldEZpbHRlcih1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3RmlsdGVyVHlwZSk7CiAKLXZvaWQgTUFDdlNhdmVDb250ZXh0KERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5Q3h0QnVmKTsKLXZvaWQgTUFDdlJlc3RvcmVDb250ZXh0KERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5Q3h0QnVmKTsKLUJPT0wgTUFDYkNvbXBhcmVDb250ZXh0KERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5Q3h0QnVmKTsKK3ZvaWQgTUFDdlNhdmVDb250ZXh0KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUN4dEJ1Zik7Cit2b2lkIE1BQ3ZSZXN0b3JlQ29udGV4dCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlDeHRCdWYpOworYm9vbCBNQUNiQ29tcGFyZUNvbnRleHQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5Q3h0QnVmKTsKIAotQk9PTCBNQUNiU29mdHdhcmVSZXNldChEV09SRF9QVFIgZHdJb0Jhc2UpOwotQk9PTCBNQUNiU2FmZVNvZnR3YXJlUmVzZXQoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLUJPT0wgTUFDYlNhZmVSeE9mZihEV09SRF9QVFIgZHdJb0Jhc2UpOwotQk9PTCBNQUNiU2FmZVR4T2ZmKERXT1JEX1BUUiBkd0lvQmFzZSk7Ci1CT09MIE1BQ2JTYWZlU3RvcChEV09SRF9QVFIgZHdJb0Jhc2UpOwotQk9PTCBNQUNiU2h1dGRvd24oRFdPUkRfUFRSIGR3SW9CYXNlKTsKLXZvaWQgTUFDdkluaXRpYWxpemUoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLXZvaWQgTUFDdlNldEN1cnJSeDBEZXNjQWRkcihEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKTsKLXZvaWQgTUFDdlNldEN1cnJSeDFEZXNjQWRkcihEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKTsKLXZvaWQgTUFDdlNldEN1cnJUWERlc2NBZGRyKGludCBpVHhUeXBlLCBEV09SRF9QVFIgZHdJb0Jhc2UsIERXT1JEIGR3Q3VyckRlc2NBZGRyKTsKLXZvaWQgTUFDdlNldEN1cnJUeDBEZXNjQWRkckV4KERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdDdXJyRGVzY0FkZHIpOwotdm9pZCBNQUN2U2V0Q3VyckFDMERlc2NBZGRyRXgoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZTZXRDdXJyU3luY0Rlc2NBZGRyRXgoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZTZXRDdXJyQVRJTURlc2NBZGRyRXgoRFdPUkRfUFRSIGR3SW9CYXNlLCBEV09SRCBkd0N1cnJEZXNjQWRkcik7Ci12b2lkIE1BQ3ZUaW1lcjBNaWNyb1NEZWxheShEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdURlbGF5KTsKLXZvaWQgTUFDdk9uZVNob3RUaW1lcjBNaWNyb1NlYyhEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgdURlbGF5VGltZSk7Ci12b2lkIE1BQ3ZPbmVTaG90VGltZXIxTWljcm9TZWMoRFdPUkRfUFRSIGR3SW9CYXNlLCBVSU5UIHVEZWxheVRpbWUpOworYm9vbCBNQUNiU29mdHdhcmVSZXNldCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYlNhZmVTb2Z0d2FyZVJlc2V0KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOworYm9vbCBNQUNiU2FmZVJ4T2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOworYm9vbCBNQUNiU2FmZVR4T2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOworYm9vbCBNQUNiU2FmZVN0b3AodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Citib29sIE1BQ2JTaHV0ZG93bih1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK3ZvaWQgTUFDdkluaXRpYWxpemUodW5zaWduZWQgbG9uZyBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZTZXRDdXJyUngwRGVzY0FkZHIodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcik7Cit2b2lkIE1BQ3ZTZXRDdXJyUngxRGVzY0FkZHIodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcik7Cit2b2lkIE1BQ3ZTZXRDdXJyVFhEZXNjQWRkcihpbnQgaVR4VHlwZSwgdW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0N1cnJEZXNjQWRkcik7Cit2b2lkIE1BQ3ZTZXRDdXJyVHgwRGVzY0FkZHJFeCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBsb25nIGR3Q3VyckRlc2NBZGRyKTsKK3ZvaWQgTUFDdlNldEN1cnJBQzBEZXNjQWRkckV4KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2U2V0Q3VyclN5bmNEZXNjQWRkckV4KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2U2V0Q3VyckFUSU1EZXNjQWRkckV4KHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdDdXJyRGVzY0FkZHIpOwordm9pZCBNQUN2VGltZXIwTWljcm9TRGVsYXkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVEZWxheSk7Cit2b2lkIE1BQ3ZPbmVTaG90VGltZXIwTWljcm9TZWModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVEZWxheVRpbWUpOwordm9pZCBNQUN2T25lU2hvdFRpbWVyMU1pY3JvU2VjKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGludCB1RGVsYXlUaW1lKTsKIAotdm9pZCBNQUN2U2V0TUlTQ0ZpZm8oRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdPZmZzZXQsIERXT1JEIGR3RGF0YSk7Cit2b2lkIE1BQ3ZTZXRNSVNDRmlmbyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3T2Zmc2V0LCB1bnNpZ25lZCBsb25nIGR3RGF0YSk7CiAKLUJPT0wgTUFDYlR4RE1BT2ZmIChEV09SRF9QVFIgZHdJb0Jhc2UsIFVJTlQgaWR4KTsKK2Jvb2wgTUFDYlR4RE1BT2ZmICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBpbnQgaWR4KTsKIAotdm9pZCBNQUN2Q2xlYXJCdXNTdXNJbmQoRFdPUkRfUFRSIGR3SW9CYXNlKTsKLXZvaWQgTUFDdkVuYWJsZUJ1c1N1c0VuKERXT1JEX1BUUiBkd0lvQmFzZSk7Cit2b2lkIE1BQ3ZDbGVhckJ1c1N1c0luZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK3ZvaWQgTUFDdkVuYWJsZUJ1c1N1c0VuKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwogCi1CT09MIE1BQ2JGbHVzaFNZTkNGaWZvKERXT1JEX1BUUiBkd0lvQmFzZSk7Ci1CT09MIE1BQ2JQU1dha2V1cChEV09SRF9QVFIgZHdJb0Jhc2UpOworYm9vbCBNQUNiRmx1c2hTWU5DRmlmbyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK2Jvb2wgTUFDYlBTV2FrZXVwKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpOwogCi12b2lkIE1BQ3ZTZXRLZXlFbnRyeShEV09SRF9QVFIgZHdJb0Jhc2UsIFdPUkQgd0tleUN0bCwgVUlOVCB1RW50cnlJZHgsIFVJTlQgdUtleUlkeCwgUEJZVEUgcGJ5QWRkciwgUERXT1JEIHBkd0tleSwgQllURSBieUxvY2FsSUQpOwotdm9pZCBNQUN2RGlzYWJsZUtleUVudHJ5KERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1RW50cnlJZHgpOwotdm9pZCBNQUN2U2V0RGVmYXVsdEtleUVudHJ5KERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1S2V5TGVuLCBVSU5UIHVLZXlJZHgsIFBEV09SRCBwZHdLZXksIEJZVEUgYnlMb2NhbElEKTsKLS8vdm9pZCBNQUN2RW5hYmxlRGVmYXVsdEtleShEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlMb2NhbElEKTsKLXZvaWQgTUFDdkRpc2FibGVEZWZhdWx0S2V5KERXT1JEX1BUUiBkd0lvQmFzZSk7Ci12b2lkIE1BQ3ZTZXREZWZhdWx0VEtJUEtleUVudHJ5KERXT1JEX1BUUiBkd0lvQmFzZSwgVUlOVCB1S2V5TGVuLCBVSU5UIHVLZXlJZHgsIFBEV09SRCBwZHdLZXksIEJZVEUgYnlMb2NhbElEKTsKLXZvaWQgTUFDdlNldERlZmF1bHRLZXlDdGwoRFdPUkRfUFRSIGR3SW9CYXNlLCBXT1JEIHdLZXlDdGwsIFVJTlQgdUVudHJ5SWR4LCBCWVRFIGJ5TG9jYWxJRCk7Cit2b2lkIE1BQ3ZTZXRLZXlFbnRyeSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBzaG9ydCB3S2V5Q3RsLCB1bnNpZ25lZCBpbnQgdUVudHJ5SWR4LAorCQl1bnNpZ25lZCBpbnQgdUtleUlkeCwgdW5zaWduZWQgY2hhciAqcGJ5QWRkciwgdW5zaWduZWQgbG9uZyAqcGR3S2V5LCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7Cit2b2lkIE1BQ3ZEaXNhYmxlS2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCk7Cit2b2lkIE1BQ3ZTZXREZWZhdWx0S2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVLZXlMZW4sCisJCXVuc2lnbmVkIGludCB1S2V5SWR4LCB1bnNpZ25lZCBsb25nICpwZHdLZXksIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKKy8vdm9pZCBNQUN2RW5hYmxlRGVmYXVsdEtleSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5TG9jYWxJRCk7Cit2b2lkIE1BQ3ZEaXNhYmxlRGVmYXVsdEtleSh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKK3ZvaWQgTUFDdlNldERlZmF1bHRUS0lQS2V5RW50cnkodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgaW50IHVLZXlMZW4sCisJCXVuc2lnbmVkIGludCB1S2V5SWR4LCB1bnNpZ25lZCBsb25nICpwZHdLZXksIHVuc2lnbmVkIGNoYXIgYnlMb2NhbElEKTsKK3ZvaWQgTUFDdlNldERlZmF1bHRLZXlDdGwodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgc2hvcnQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwgdW5zaWduZWQgY2hhciBieUxvY2FsSUQpOwogCiAjZW5kaWYgLy8gX19NQUNfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5jCmluZGV4IDRjYTc4NzcuLjFiOTFhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuYwpAQCAtOTAsNyArOTAsNyBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlciAoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLCBEV09SRCBkd0lzcikKK3ZvaWQgU1RBdlVwZGF0ZUlzclN0YXRDb3VudGVyIChQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIHVuc2lnbmVkIGxvbmcgZHdJc3IpCiB7CiAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogQUJOT1JNQUwgaW50ZXJydXB0ICovCkBAIC0xNzcsOCArMTc3LDggQEAKICAqCiAgKi8KIHZvaWQgU1RBdlVwZGF0ZVJEU3RhdENvdW50ZXIgKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgYnlSU1IsIEJZVEUgYnlOZXdSU1IsIEJZVEUgYnlSeFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURSBwYnlCdWZmZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnlSU1IsIHVuc2lnbmVkIGNoYXIgYnlOZXdSU1IsIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoKQogewogICAgIC8vbmVlZCBjaGFuZ2UKICAgICBQUzgwMl8xMUhlYWRlciBwSGVhZGVyID0gKFBTODAyXzExSGVhZGVyKXBieUJ1ZmZlcjsKQEAgLTE5NCwxNSArMTk0LDE1IEBACiAgICAgICAgICAgICAvLyB1cGRhdGUgY291bnRlcnMgaW4gY2FzZSB0aGF0IHN1Y2Nlc3NmdWwgdHJhbnNtaXQKICAgICAgICAgICAgIGlmIChieVJTUiAmIFJTUl9BRERSQlJPQUQpIHsKICAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxSeEJyb2FkY2FzdEZyYW1lcysrOwotICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4QnJvYWRjYXN0Qnl0ZXMgKz0gKFVMT05HTE9ORyljYkZyYW1lTGVuZ3RoOworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4QnJvYWRjYXN0Qnl0ZXMgKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgY2JGcmFtZUxlbmd0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGJ5UlNSICYgUlNSX0FERFJNVUxUSSkgewogICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4TXVsdGljYXN0RnJhbWVzKys7Ci0gICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsUnhNdWx0aWNhc3RCeXRlcyArPSAoVUxPTkdMT05HKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsUnhNdWx0aWNhc3RCeXRlcyArPSAodW5zaWduZWQgbG9uZyBsb25nKSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsUnhEaXJlY3RlZEZyYW1lcysrOwotICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFJ4RGlyZWN0ZWRCeXRlcyArPSAoVUxPTkdMT05HKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsUnhEaXJlY3RlZEJ5dGVzICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGNiRnJhbWVMZW5ndGg7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTIsODcgKzIxMiw4NyBAQAogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxMU1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMTFNOiBBTExbJWRdLCBPS1slZF06WyUwMnhdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTFNQ1JDT2ssIGJ5UlNSKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxMU06IEFMTFslZF0sIE9LWyVkXTpbJTAyeF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxMU0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxMU1DUkNPaywgYnlSU1IpOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT0xMSkgewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiA1TTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNU1DUkNPaywgYnlSU1IpOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiA1TTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjVNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNU1DUkNPaywgYnlSU1IpOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT00KSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIDJNOiBBTExbJWRdLCBPS1slZF06WyUwMnhdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyTUNSQ09rLCBieVJTUik7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIDJNOiBBTExbJWRdLCBPS1slZF06WyUwMnhdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMk0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyTUNSQ09rLCBieVJTUik7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTIpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAxTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMU1DUkNPaywgYnlSU1IpOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiAxTTogQUxMWyVkXSwgT0tbJWRdOlslMDJ4XVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjFNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMU1DUkNPaywgYnlSU1IpOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT0xMil7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iIDZNOiBBTExbJWRdLCBPS1slZF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I2TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjZNQ1JDT2spOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiA2TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNk0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I2TUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09MTgpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiA5TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyOU0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I5TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIgOU06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjlNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyOU1DUkNPayk7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTI0KXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IxMk0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjEyTTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNQ1JDT2spOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjEyTTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMTJNQ1JDT2spOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT0zNil7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMThNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxOE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxOE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjE4TUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09NDgpewogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjI0TSsrOwogICAgICAgICBpZihieVJTUiAmIFJTUl9DUkNPSykgewogICAgICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE1DUkNPaysrOwogICAgICAgICB9Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMjRNOiBBTExbJWRdLCBPS1slZF1cbiIsIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE0sIChJTlQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE1DUkNPayk7CisgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iMjRNOiBBTExbJWRdLCBPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE0sIChpbnQpcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IyNE1DUkNPayk7CiAgICAgfQogICAgIGVsc2UgaWYoYnlSeFJhdGU9PTcyKXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3IzNk0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjM2TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNQ1JDT2spOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjM2TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyMzZNQ1JDT2spOwogICAgIH0KICAgICBlbHNlIGlmKGJ5UnhSYXRlPT05Nil7CiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNDhNKys7CiAgICAgICAgIGlmKGJ5UlNSICYgUlNSX0NSQ09LKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TUNSQ09rKys7CiAgICAgICAgIH0KLSAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI0OE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TSwgKElOVClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TUNSQ09rKTsKKyAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI0OE06IEFMTFslZF0sIE9LWyVkXVxuIiwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TSwgKGludClwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFJzcjQ4TUNSQ09rKTsKICAgICB9CiAgICAgZWxzZSBpZihieVJ4UmF0ZT09MTA4KXsKICAgICAgICAgcFN0YXRpc3RpYy0+Q3VzdG9tU3RhdC51bGxSc3I1NE0rKzsKICAgICAgICAgaWYoYnlSU1IgJiBSU1JfQ1JDT0spIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNQ1JDT2srKzsKICAgICAgICAgfQotICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjU0TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNLCAoSU5UKXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNQ1JDT2spOworICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIjU0TTogQUxMWyVkXSwgT0tbJWRdXG4iLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNLCAoaW50KXBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsUnNyNTRNQ1JDT2spOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAJREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJVbmtub3duOiBUb3RhbFslZF0sIENSQ09LWyVkXVxuIiwgKElOVClwU3RhdGlzdGljLT5kd1JzclJ4UGFja2V0KzEsIChJTlQpcFN0YXRpc3RpYy0+ZHdSc3JDUkNPayk7CisgICAgCURCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iVW5rbm93bjogVG90YWxbJWRdLCBDUkNPS1slZF1cbiIsIChpbnQpcFN0YXRpc3RpYy0+ZHdSc3JSeFBhY2tldCsxLCAoaW50KXBTdGF0aXN0aWMtPmR3UnNyQ1JDT2spOwogICAgIH0KIAogICAgIGlmIChieVJTUiAmIFJTUl9CU1NJRE9LKQpAQCAtMzQxLDEwICszNDEsMTAgQEAKICAgICBpZiAoV0xBTl9HRVRfRkNfTU9SRUZSQUcocEhlYWRlci0+d0ZyYW1lQ3RsKSkKICAgICAgICAgcFN0YXRpc3RpYy0+ZHdSc3JSeEZyYWdtZW50Kys7CiAKLSAgICBpZiAoY2JGcmFtZUxlbmd0aCA8IE1JTl9QQUNLRVRfTEVOICsgNCkgeworICAgIGlmIChjYkZyYW1lTGVuZ3RoIDwgRVRIX1pMRU4gKyA0KSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnVudCsrOwogICAgIH0KLSAgICBlbHNlIGlmIChjYkZyYW1lTGVuZ3RoID09IE1JTl9QQUNLRVRfTEVOICsgNCkgeworICAgIGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPT0gRVRIX1pMRU4gKyA0KSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW42NCsrOwogICAgIH0KICAgICBlbHNlIGlmICgoNjUgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gMTI3KSkgewpAQCAtMzg5LDExICszODksMTEgQEAKIHZvaWQKIFNUQXZVcGRhdGVSRFN0YXRDb3VudGVyRXggKAogICAgIFBTU3RhdENvdW50ZXIgICBwU3RhdGlzdGljLAotICAgIEJZVEUgICAgICAgICAgICBieVJTUiwKLSAgICBCWVRFICAgICAgICAgICAgYnlOZXdSU1IsCi0gICAgQllURSAgICAgICAgICAgIGJ5UnhSYXRlLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCdWZmZXIsCi0gICAgVUlOVCAgICAgICAgICAgIGNiRnJhbWVMZW5ndGgKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UlNSLAorICAgIHVuc2lnbmVkIGNoYXIgYnlOZXdSU1IsCisgICAgdW5zaWduZWQgY2hhciBieVJ4UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgKICAgICApCiB7CiAgICAgU1RBdlVwZGF0ZVJEU3RhdENvdW50ZXIoCkBAIC00MDgsNyArNDA4LDcgQEAKICAgICAvLyByeCBsZW5ndGgKICAgICBwU3RhdGlzdGljLT5kd0NudFJ4RnJtTGVuZ3RoID0gY2JGcmFtZUxlbmd0aDsKICAgICAvLyByeCBwYXR0ZXJuLCB3ZSBqdXN0IHNlZSAxMCBieXRlcyBmb3Igc2FtcGxlCi0gICAgbWVtY3B5KHBTdGF0aXN0aWMtPmFieUNudFJ4UGF0dGVybiwgKFBCWVRFKXBieUJ1ZmZlciwgMTApOworICAgIG1lbWNweShwU3RhdGlzdGljLT5hYnlDbnRSeFBhdHRlcm4sICh1bnNpZ25lZCBjaGFyICopcGJ5QnVmZmVyLCAxMCk7CiB9CiAKIApAQCAtNDMyLDE2ICs0MzIsMTYgQEAKIHZvaWQKIFNUQXZVcGRhdGVURFN0YXRDb3VudGVyICgKICAgICBQU1N0YXRDb3VudGVyICAgcFN0YXRpc3RpYywKLSAgICBCWVRFICAgICAgICAgICAgYnlUU1IwLAotICAgIEJZVEUgICAgICAgICAgICBieVRTUjEsCi0gICAgUEJZVEUgICAgICAgICAgIHBieUJ1ZmZlciwKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZUxlbmd0aCwKLSAgICBVSU5UICAgICAgICAgICAgdUlkeAorICAgIHVuc2lnbmVkIGNoYXIgYnlUU1IwLAorICAgIHVuc2lnbmVkIGNoYXIgYnlUU1IxLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBpbnQgdUlkeAogICAgICkKIHsKICAgICBQV0xBTl84MDIxMUhEUl9BNCAgIHBIZWFkZXI7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlEZXN0QWRkcjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5VFNSMF9OQ1IgPSBieVRTUjAgJiBUU1IwX05DUjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXN0QWRkcjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VFNSMF9OQ1IgPSBieVRTUjAgJiBUU1IwX05DUjsKIAogCiAKQEAgLTQ3MSwxNyArNDcxLDE3IEBACiAgICAgICAgIHBTdGF0aXN0aWMtPkN1c3RvbVN0YXQudWxsVHNyQWxsT0sgPQogICAgICAgICAgICAgKHBTdGF0aXN0aWMtPnVsbFRzck9LW1RZUEVfQUMwRE1BXSArIHBTdGF0aXN0aWMtPnVsbFRzck9LW1RZUEVfVFhETUEwXSk7CiAgICAgICAgIC8vIHVwZGF0ZSBjb3VudGVycyBpbiBjYXNlIHRoYXQgc3VjY2Vzc2Z1bCB0cmFuc21pdAotICAgICAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKSB7CisgICAgICAgIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihwYnlEZXN0QWRkcikpIHsKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFR4QnJvYWRjYXN0RnJhbWVzW3VJZHhdKys7Ci0gICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeEJyb2FkY2FzdEJ5dGVzW3VJZHhdICs9IChVTE9OR0xPTkcpY2JGcmFtZUxlbmd0aDsKKyAgICAgICAgICAgIHBTdGF0aXN0aWMtPnVsbFR4QnJvYWRjYXN0Qnl0ZXNbdUlkeF0gKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgY2JGcmFtZUxlbmd0aDsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlEZXN0QWRkcikpIHsKKyAgICAgICAgZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocGJ5RGVzdEFkZHIpKSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeE11bHRpY2FzdEZyYW1lc1t1SWR4XSsrOwotICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhNdWx0aWNhc3RCeXRlc1t1SWR4XSArPSAoVUxPTkdMT05HKWNiRnJhbWVMZW5ndGg7CisgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeE11bHRpY2FzdEJ5dGVzW3VJZHhdICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGNiRnJhbWVMZW5ndGg7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeERpcmVjdGVkRnJhbWVzW3VJZHhdKys7Ci0gICAgICAgICAgICBwU3RhdGlzdGljLT51bGxUeERpcmVjdGVkQnl0ZXNbdUlkeF0gKz0gKFVMT05HTE9ORyljYkZyYW1lTGVuZ3RoOworICAgICAgICAgICAgcFN0YXRpc3RpYy0+dWxsVHhEaXJlY3RlZEJ5dGVzW3VJZHhdICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGNiRnJhbWVMZW5ndGg7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC00OTUsOSArNDk1LDkgQEAKICAgICAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyQUNLRGF0YVt1SWR4XSsrOwogICAgIH0KIAotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUyhwYnlEZXN0QWRkcikpCisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JCcm9hZGNhc3RbdUlkeF0rKzsKLSAgICBlbHNlIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlEZXN0QWRkcikpCisgICAgZWxzZSBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocGJ5RGVzdEFkZHIpKQogICAgICAgICBwU3RhdGlzdGljLT5kd1Rzck11bHRpY2FzdFt1SWR4XSsrOwogICAgIGVsc2UKICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JEaXJlY3RlZFt1SWR4XSsrOwpAQCAtNTIyLDEzICs1MjIsMTMgQEAKIHZvaWQKIFNUQXZVcGRhdGVURFN0YXRDb3VudGVyRXggKAogICAgIFBTU3RhdENvdW50ZXIgICBwU3RhdGlzdGljLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCdWZmZXIsCi0gICAgRFdPUkQgICAgICAgICAgIGNiRnJhbWVMZW5ndGgKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgbG9uZyBjYkZyYW1lTGVuZ3RoCiAgICAgKQogewotICAgIFVJTlQgICAgdVBrdExlbmd0aDsKKyAgICB1bnNpZ25lZCBpbnQgdVBrdExlbmd0aDsKIAotICAgIHVQa3RMZW5ndGggPSAoVUlOVCljYkZyYW1lTGVuZ3RoOworICAgIHVQa3RMZW5ndGggPSAodW5zaWduZWQgaW50KWNiRnJhbWVMZW5ndGg7CiAKICAgICAvLyB0eCBsZW5ndGgKICAgICBwU3RhdGlzdGljLT5kd0NudFR4QnVmTGVuZ3RoID0gdVBrdExlbmd0aDsKQEAgLTU1NSwyNSArNTU1LDI1IEBACiBTVEF2VXBkYXRlODAyXzExQ291bnRlcigKICAgICBQU0RvdDExQ291bnRlcnMgICAgICAgICBwODAyXzExQ291bnRlciwKICAgICBQU1N0YXRDb3VudGVyICAgICAgICAgICBwU3RhdGlzdGljLAotICAgIERXT1JEICAgICAgICAgICAgICAgICAgIGR3Q291bnRlcgorICAgIHVuc2lnbmVkIGxvbmcgZHdDb3VudGVyCiAgICAgKQogewogICAgIC8vcDgwMl8xMUNvdW50ZXItPlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudAotICAgIHA4MDJfMTFDb3VudGVyLT5NdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQgPSAoVUxPTkdMT05HKSAocFN0YXRpc3RpYy0+ZHdUc3JCcm9hZGNhc3RbVFlQRV9BQzBETUFdICsKKyAgICBwODAyXzExQ291bnRlci0+TXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3VHNyQnJvYWRjYXN0W1RZUEVfQUMwRE1BXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3RhdGlzdGljLT5kd1RzckJyb2FkY2FzdFtUWVBFX1RYRE1BMF0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JNdWx0aWNhc3RbVFlQRV9BQzBETUFdICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyTXVsdGljYXN0W1RZUEVfVFhETUEwXSk7Ci0gICAgcDgwMl8xMUNvdW50ZXItPkZhaWxlZENvdW50ID0gKFVMT05HTE9ORykgKHBTdGF0aXN0aWMtPmR3VHNyRXJyW1RZUEVfQUMwRE1BXSArIHBTdGF0aXN0aWMtPmR3VHNyRXJyW1RZUEVfVFhETUEwXSk7Ci0gICAgcDgwMl8xMUNvdW50ZXItPlJldHJ5Q291bnQgPSAoVUxPTkdMT05HKSAocFN0YXRpc3RpYy0+ZHdUc3JSZXRyeVtUWVBFX0FDMERNQV0gKyBwU3RhdGlzdGljLT5kd1RzclJldHJ5W1RZUEVfVFhETUEwXSk7Ci0gICAgcDgwMl8xMUNvdW50ZXItPk11bHRpcGxlUmV0cnlDb3VudCA9IChVTE9OR0xPTkcpIChwU3RhdGlzdGljLT5kd1Rzck1vcmVUaGFuT25jZVJldHJ5W1RZUEVfQUMwRE1BXSArCisgICAgcDgwMl8xMUNvdW50ZXItPkZhaWxlZENvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3VHNyRXJyW1RZUEVfQUMwRE1BXSArIHBTdGF0aXN0aWMtPmR3VHNyRXJyW1RZUEVfVFhETUEwXSk7CisgICAgcDgwMl8xMUNvdW50ZXItPlJldHJ5Q291bnQgPSAodW5zaWduZWQgbG9uZyBsb25nKSAocFN0YXRpc3RpYy0+ZHdUc3JSZXRyeVtUWVBFX0FDMERNQV0gKyBwU3RhdGlzdGljLT5kd1RzclJldHJ5W1RZUEVfVFhETUEwXSk7CisgICAgcDgwMl8xMUNvdW50ZXItPk11bHRpcGxlUmV0cnlDb3VudCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIChwU3RhdGlzdGljLT5kd1Rzck1vcmVUaGFuT25jZVJldHJ5W1RZUEVfQUMwRE1BXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFN0YXRpc3RpYy0+ZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVtUWVBFX1RYRE1BMF0pOwogICAgIC8vcDgwMl8xMUNvdW50ZXItPkZyYW1lRHVwbGljYXRlQ291bnQKLSAgICBwODAyXzExQ291bnRlci0+UlRTU3VjY2Vzc0NvdW50ICs9IChVTE9OR0xPTkcpICAoZHdDb3VudGVyICYgMHgwMDAwMDBmZik7Ci0gICAgcDgwMl8xMUNvdW50ZXItPlJUU0ZhaWx1cmVDb3VudCArPSAoVUxPTkdMT05HKSAoKGR3Q291bnRlciAmIDB4MDAwMGZmMDApID4+IDgpOwotICAgIHA4MDJfMTFDb3VudGVyLT5BQ0tGYWlsdXJlQ291bnQgKz0gKFVMT05HTE9ORykgKChkd0NvdW50ZXIgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0gICAgcDgwMl8xMUNvdW50ZXItPkZDU0Vycm9yQ291bnQgKz0gICAoVUxPTkdMT05HKSAoKGR3Q291bnRlciAmIDB4ZmYwMDAwMDApID4+IDI0KTsKKyAgICBwODAyXzExQ291bnRlci0+UlRTU3VjY2Vzc0NvdW50ICs9ICh1bnNpZ25lZCBsb25nIGxvbmcpICAoZHdDb3VudGVyICYgMHgwMDAwMDBmZik7CisgICAgcDgwMl8xMUNvdW50ZXItPlJUU0ZhaWx1cmVDb3VudCArPSAodW5zaWduZWQgbG9uZyBsb25nKSAoKGR3Q291bnRlciAmIDB4MDAwMGZmMDApID4+IDgpOworICAgIHA4MDJfMTFDb3VudGVyLT5BQ0tGYWlsdXJlQ291bnQgKz0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKChkd0NvdW50ZXIgJiAweDAwZmYwMDAwKSA+PiAxNik7CisgICAgcDgwMl8xMUNvdW50ZXItPkZDU0Vycm9yQ291bnQgKz0gICAodW5zaWduZWQgbG9uZyBsb25nKSAoKGR3Q291bnRlciAmIDB4ZmYwMDAwMDApID4+IDI0KTsKICAgICAvL3A4MDJfMTFDb3VudGVyLT5SZWNlaXZlZEZyYWdtZW50Q291bnQKLSAgICBwODAyXzExQ291bnRlci0+TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50ID0gKFVMT05HTE9ORykgKHBTdGF0aXN0aWMtPmR3UnNyQnJvYWRjYXN0ICsKKyAgICBwODAyXzExQ291bnRlci0+TXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgKHBTdGF0aXN0aWMtPmR3UnNyQnJvYWRjYXN0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyTXVsdGljYXN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWliLmgKaW5kZXggMjMwODMxOS4uMDA5ZjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pYi5oCkBAIC0zOSwzMiArMzksMzIgQEAKIC8vCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NEb3QxMUNvdW50ZXJzIHsKLSAgICBVTE9ORyAgICAgICBMZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKLSAgICBVTE9OR0xPTkcgICBUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7Ci0gICAgVUxPTkdMT05HICAgTXVsdGljYXN0VHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotICAgIFVMT05HTE9ORyAgIEZhaWxlZENvdW50OwotICAgIFVMT05HTE9ORyAgIFJldHJ5Q291bnQ7Ci0gICAgVUxPTkdMT05HICAgTXVsdGlwbGVSZXRyeUNvdW50OwotICAgIFVMT05HTE9ORyAgIFJUU1N1Y2Nlc3NDb3VudDsKLSAgICBVTE9OR0xPTkcgICBSVFNGYWlsdXJlQ291bnQ7Ci0gICAgVUxPTkdMT05HICAgQUNLRmFpbHVyZUNvdW50OwotICAgIFVMT05HTE9ORyAgIEZyYW1lRHVwbGljYXRlQ291bnQ7Ci0gICAgVUxPTkdMT05HICAgUmVjZWl2ZWRGcmFnbWVudENvdW50OwotICAgIFVMT05HTE9ORyAgIE11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudDsKLSAgICBVTE9OR0xPTkcgICBGQ1NFcnJvckNvdW50OwotICAgIFVMT05HTE9ORyAgIFRLSVBMb2NhbE1JQ0ZhaWx1cmVzOwotICAgIFVMT05HTE9ORyAgIFRLSVBSZW1vdGVNSUNGYWlsdXJlczsKLSAgICBVTE9OR0xPTkcgICBUS0lQSUNWRXJyb3JzOwotICAgIFVMT05HTE9ORyAgIFRLSVBDb3VudGVyTWVhc3VyZXNJbnZva2VkOwotICAgIFVMT05HTE9ORyAgIFRLSVBSZXBsYXlzOwotICAgIFVMT05HTE9ORyAgIENDTVBGb3JtYXRFcnJvcnM7Ci0gICAgVUxPTkdMT05HICAgQ0NNUFJlcGxheXM7Ci0gICAgVUxPTkdMT05HICAgQ0NNUERlY3J5cHRFcnJvcnM7Ci0gICAgVUxPTkdMT05HICAgRm91cldheUhhbmRzaGFrZUZhaWx1cmVzOwotLy8gICAgVUxPTkdMT05HICAgV0VQVW5kZWNyeXB0YWJsZUNvdW50OwotLy8gICAgVUxPTkdMT05HICAgV0VQSUNWRXJyb3JDb3VudDsKLS8vICAgIFVMT05HTE9ORyAgIERlY3J5cHRTdWNjZXNzQ291bnQ7Ci0vLyAgICBVTE9OR0xPTkcgICBEZWNyeXB0RmFpbHVyZUNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2Ygc3RydWN0dXJlCisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBGYWlsZWRDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBSZXRyeUNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIE11bHRpcGxlUmV0cnlDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBSVFNTdWNjZXNzQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgUlRTRmFpbHVyZUNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIEFDS0ZhaWx1cmVDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBGcmFtZUR1cGxpY2F0ZUNvdW50OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgRkNTRXJyb3JDb3VudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBUS0lQTG9jYWxNSUNGYWlsdXJlczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBUS0lQUmVtb3RlTUlDRmFpbHVyZXM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgVEtJUElDVkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBUS0lQQ291bnRlck1lYXN1cmVzSW52b2tlZDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBUS0lQUmVwbGF5czsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBDQ01QRm9ybWF0RXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIENDTVBSZXBsYXlzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIENDTVBEZWNyeXB0RXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIEZvdXJXYXlIYW5kc2hha2VGYWlsdXJlczsKKy8vICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFdFUFVuZGVjcnlwdGFibGVDb3VudDsKKy8vICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIFdFUElDVkVycm9yQ291bnQ7CisvLyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICBEZWNyeXB0U3VjY2Vzc0NvdW50OworLy8gICAgdW5zaWduZWQgbG9uZyBsb25nICAgRGVjcnlwdEZhaWx1cmVDb3VudDsKIH0gU0RvdDExQ291bnRlcnMsICpQU0RvdDExQ291bnRlcnM7CiAKIApAQCAtNzIsMjkgKzcyLDI5IEBACiAvLyBNSUIyIGNvdW50ZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTTWliMkNvdW50ZXIgewotICAgIExPTkcgICAgaWZJbmRleDsKKyAgICBsb25nICAgIGlmSW5kZXg7CiAgICAgY2hhciAgICBpZkRlc2NyWzI1Nl07ICAgICAgICAgICAgICAgLy8gbWF4IHNpemUgMjU1IHBsdXMgemVybyBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlLmcuICJpbnRlcmZhY2UgMSIKLSAgICBMT05HICAgIGlmVHlwZTsKLSAgICBMT05HICAgIGlmTXR1OwotICAgIERXT1JEICAgaWZTcGVlZDsKLSAgICBCWVRFICAgIGlmUGh5c0FkZHJlc3NbRVRIX0FMRU5dOwotICAgIExPTkcgICAgaWZBZG1pblN0YXR1czsKLSAgICBMT05HICAgIGlmT3BlclN0YXR1czsKLSAgICBEV09SRCAgIGlmTGFzdENoYW5nZTsKLSAgICBEV09SRCAgIGlmSW5PY3RldHM7Ci0gICAgRFdPUkQgICBpZkluVWNhc3RQa3RzOwotICAgIERXT1JEICAgaWZJbk5VY2FzdFBrdHM7Ci0gICAgRFdPUkQgICBpZkluRGlzY2FyZHM7Ci0gICAgRFdPUkQgICBpZkluRXJyb3JzOwotICAgIERXT1JEICAgaWZJblVua25vd25Qcm90b3M7Ci0gICAgRFdPUkQgICBpZk91dE9jdGV0czsKLSAgICBEV09SRCAgIGlmT3V0VWNhc3RQa3RzOwotICAgIERXT1JEICAgaWZPdXROVWNhc3RQa3RzOwotICAgIERXT1JEICAgaWZPdXREaXNjYXJkczsKLSAgICBEV09SRCAgIGlmT3V0RXJyb3JzOwotICAgIERXT1JEICAgaWZPdXRRTGVuOwotICAgIERXT1JEICAgaWZTcGVjaWZpYzsKKyAgICBsb25nICAgIGlmVHlwZTsKKyAgICBsb25nICAgIGlmTXR1OworICAgIHVuc2lnbmVkIGxvbmcgaWZTcGVlZDsKKyAgICB1bnNpZ25lZCBjaGFyIGlmUGh5c0FkZHJlc3NbRVRIX0FMRU5dOworICAgIGxvbmcgICAgaWZBZG1pblN0YXR1czsKKyAgICBsb25nICAgIGlmT3BlclN0YXR1czsKKyAgICB1bnNpZ25lZCBsb25nIGlmTGFzdENoYW5nZTsKKyAgICB1bnNpZ25lZCBsb25nIGlmSW5PY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBpZkluVWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWZJbk5VY2FzdFBrdHM7CisgICAgdW5zaWduZWQgbG9uZyBpZkluRGlzY2FyZHM7CisgICAgdW5zaWduZWQgbG9uZyBpZkluRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaWZJblVua25vd25Qcm90b3M7CisgICAgdW5zaWduZWQgbG9uZyBpZk91dE9jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGlmT3V0VWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWZPdXROVWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWZPdXREaXNjYXJkczsKKyAgICB1bnNpZ25lZCBsb25nIGlmT3V0RXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaWZPdXRRTGVuOworICAgIHVuc2lnbmVkIGxvbmcgaWZTcGVjaWZpYzsKIH0gU01pYjJDb3VudGVyLCAqUFNNaWIyQ291bnRlcjsKIAogLy8gVmFsdWUgaW4gdGhlIGlmVHlwZSBlbnRyeQpAQCAtMTExLDY0ICsxMTEsNjQgQEAKIC8vIFJNT04gY291bnRlcgogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NSbW9uQ291bnRlciB7Ci0gICAgTE9ORyAgICBldGhlclN0YXRzSW5kZXg7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzRGF0YVNvdXJjZTsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c09jdGV0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNQa3RzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzTXVsdGljYXN0UGt0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yczsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c092ZXJzaXplUGt0czsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNGcmFnbWVudHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzSmFiYmVyczsKLSAgICBEV09SRCAgIGV0aGVyU3RhdHNDb2xsaXNpb25zOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDY0T2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDY1dG8xMjdPY3RldHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzUGt0MTI4dG8yNTVPY3RldHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzUGt0MjU2dG81MTFPY3RldHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzUGt0NTEydG8xMDIzT2N0ZXRzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1BrdDEwMjR0bzE1MThPY3RldHM7Ci0gICAgRFdPUkQgICBldGhlclN0YXRzT3duZXJzOwotICAgIERXT1JEICAgZXRoZXJTdGF0c1N0YXR1czsKKyAgICBsb25nICAgIGV0aGVyU3RhdHNJbmRleDsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNEYXRhU291cmNlOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c0Ryb3BFdmVudHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzT2N0ZXRzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1BrdHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzQnJvYWRjYXN0UGt0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzT3ZlcnNpemVQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c0ZyYWdtZW50czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNKYWJiZXJzOworICAgIHVuc2lnbmVkIGxvbmcgZXRoZXJTdGF0c0NvbGxpc2lvbnM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0NjRPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0NjV0bzEyN09jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNQa3QxMjh0bzI1NU9jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNQa3QyNTZ0bzUxMU9jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNQa3Q1MTJ0bzEwMjNPY3RldHM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzUGt0MTAyNHRvMTUxOE9jdGV0czsKKyAgICB1bnNpZ25lZCBsb25nIGV0aGVyU3RhdHNPd25lcnM7CisgICAgdW5zaWduZWQgbG9uZyBldGhlclN0YXRzU3RhdHVzOwogfSBTUm1vbkNvdW50ZXIsICpQU1Jtb25Db3VudGVyOwogCiAvLwogLy8gQ3VzdG9tIGNvdW50ZXIKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ3VzdG9tQ291bnRlcnMgewotICAgIFVMT05HICAgICAgIExlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIExlbmd0aDsKIAotICAgIFVMT05HTE9ORyAgIHVsbFRzckFsbE9LOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFRzckFsbE9LOwogCi0gICAgVUxPTkdMT05HICAgdWxsUnNyMTFNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjVNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjJNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjFNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjExTTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3I1TTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IyTTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxTTsKIAotICAgIFVMT05HTE9ORyAgIHVsbFJzcjExTUNSQ09rOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjVNQ1JDT2s7Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMk1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxTUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjExTUNSQ09rOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjVNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMk1DUkNPazsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxTUNSQ09rOwogCi0gICAgVUxPTkdMT05HICAgdWxsUnNyNTRNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjQ4TTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IzNk07Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyMjRNOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjE4TTsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxMk07Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyOU07Ci0gICAgVUxPTkdMT05HICAgdWxsUnNyNk07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNTRNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjQ4TTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IzNk07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMjRNOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJzcjE4TTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3IxMk07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyOU07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNk07CiAKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I1NE1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I0OE1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IzNk1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IyNE1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxOE1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3IxMk1DUkNPazsKLSAgICBVTE9OR0xPTkcgICB1bGxSc3I5TUNSQ09rOwotICAgIFVMT05HTE9ORyAgIHVsbFJzcjZNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNTRNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyNDhNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMzZNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMjRNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMThNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyMTJNQ1JDT2s7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnNyOU1DUkNPazsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3I2TUNSQ09rOwogCiB9IFNDdXN0b21Db3VudGVycywgKlBTQ3VzdG9tQ291bnRlcnM7CiAKQEAgLTE3NywyOSArMTc3LDI5IEBACiAvLyBDdXN0b20gY291bnRlcgogLy8KIHR5cGVkZWYgc3RydWN0IHRhZ1NJU1JDb3VudGVycyB7Ci0gICAgVUxPTkcgICBMZW5ndGg7CisgICAgdW5zaWduZWQgbG9uZyBMZW5ndGg7CiAKLSAgICBEV09SRCAgIGR3SXNyVHgwT0s7Ci0gICAgRFdPUkQgICBkd0lzckFDMFR4T0s7Ci0gICAgRFdPUkQgICBkd0lzckJlYWNvblR4T0s7Ci0gICAgRFdPUkQgICBkd0lzclJ4ME9LOwotICAgIERXT1JEICAgZHdJc3JUQlRUSW50OwotICAgIERXT1JEICAgZHdJc3JTVElNRVJJbnQ7Ci0gICAgRFdPUkQgICBkd0lzcldhdGNoRG9nOwotICAgIERXT1JEICAgZHdJc3JVbnJlY292ZXJhYmxlRXJyb3I7Ci0gICAgRFdPUkQgICBkd0lzclNvZnRJbnRlcnJ1cHQ7Ci0gICAgRFdPUkQgICBkd0lzck1JQk5lYXJmdWxsOwotICAgIERXT1JEICAgZHdJc3JSeE5vQnVmOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JUeDBPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyQUMwVHhPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyQmVhY29uVHhPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyUngwT0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclRCVFRJbnQ7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclNUSU1FUkludDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyV2F0Y2hEb2c7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclVucmVjb3ZlcmFibGVFcnJvcjsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyU29mdEludGVycnVwdDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyTUlCTmVhcmZ1bGw7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzclJ4Tm9CdWY7CiAKLSAgICBEV09SRCAgIGR3SXNyVW5rbm93bjsgICAgICAgICAgICAgICAvLyB1bmtub3duIGludGVycnVwdCBjb3VudAorICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JVbmtub3duOyAgICAgICAgICAgICAgIC8vIHVua25vd24gaW50ZXJydXB0IGNvdW50CiAKLSAgICBEV09SRCAgIGR3SXNyUngxT0s7Ci0gICAgRFdPUkQgICBkd0lzckFUSU1UeE9LOwotICAgIERXT1JEICAgZHdJc3JTWU5DVHhPSzsKLSAgICBEV09SRCAgIGR3SXNyQ0ZQRW5kOwotICAgIERXT1JEICAgZHdJc3JBVElNRW5kOwotICAgIERXT1JEICAgZHdJc3JTWU5DRmx1c2hPSzsKLSAgICBEV09SRCAgIGR3SXNyU1RJTUVSMUludDsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyUngxT0s7CisgICAgdW5zaWduZWQgbG9uZyBkd0lzckFUSU1UeE9LOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JTWU5DVHhPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyQ0ZQRW5kOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JBVElNRW5kOworICAgIHVuc2lnbmVkIGxvbmcgZHdJc3JTWU5DRmx1c2hPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3SXNyU1RJTUVSMUludDsKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiB9IFNJU1JDb3VudGVycywgKlBTSVNSQ291bnRlcnM7CiAKQEAgLTIyMiw5OSArMjIyLDk5IEBACiAKICAgICAvLyBSU1Igc3RhdHVzIGNvdW50CiAgICAgLy8KLSAgICBEV09SRCAgIGR3UnNyRnJtQWxnbkVycjsKLSAgICBEV09SRCAgIGR3UnNyRXJyOwotICAgIERXT1JEICAgZHdSc3JDUkNFcnI7Ci0gICAgRFdPUkQgICBkd1JzckNSQ09rOwotICAgIERXT1JEICAgZHdSc3JCU1NJRE9rOwotICAgIERXT1JEICAgZHdSc3JBRERST2s7Ci0gICAgRFdPUkQgICBkd1JzckJDTlNTSURPazsKLSAgICBEV09SRCAgIGR3UnNyTEVORXJyOwotICAgIERXT1JEICAgZHdSc3JUWVBFcnI7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckZybUFsZ25FcnI7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckVycjsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQ1JDRXJyOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JDUkNPazsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQlNTSURPazsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQUREUk9rOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JCQ05TU0lET2s7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckxFTkVycjsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyVFlQRXJyOwogCi0gICAgRFdPUkQgICBkd05ld1JzckRFQ1JZUFRPSzsKLSAgICBEV09SRCAgIGR3TmV3UnNyQ0ZQOwotICAgIERXT1JEICAgZHdOZXdSc3JVVFNGOwotICAgIERXT1JEICAgZHdOZXdSc3JISVRBSUQ7Ci0gICAgRFdPUkQgICBkd05ld1JzckhJVEFJRDA7CisgICAgdW5zaWduZWQgbG9uZyBkd05ld1JzckRFQ1JZUFRPSzsKKyAgICB1bnNpZ25lZCBsb25nIGR3TmV3UnNyQ0ZQOworICAgIHVuc2lnbmVkIGxvbmcgZHdOZXdSc3JVVFNGOworICAgIHVuc2lnbmVkIGxvbmcgZHdOZXdSc3JISVRBSUQ7CisgICAgdW5zaWduZWQgbG9uZyBkd05ld1JzckhJVEFJRDA7CiAKLSAgICBEV09SRCAgIGR3UnNyTG9uZzsKLSAgICBEV09SRCAgIGR3UnNyUnVudDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyTG9uZzsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnVudDsKIAotICAgIERXT1JEICAgZHdSc3JSeENvbnRyb2w7Ci0gICAgRFdPUkQgICBkd1JzclJ4RGF0YTsKLSAgICBEV09SRCAgIGR3UnNyUnhNYW5hZ2U7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4Q29udHJvbDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhEYXRhOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeE1hbmFnZTsKIAotICAgIERXT1JEICAgZHdSc3JSeFBhY2tldDsKLSAgICBEV09SRCAgIGR3UnNyUnhPY3RldDsKLSAgICBEV09SRCAgIGR3UnNyQnJvYWRjYXN0OwotICAgIERXT1JEICAgZHdSc3JNdWx0aWNhc3Q7Ci0gICAgRFdPUkQgICBkd1JzckRpcmVjdGVkOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeFBhY2tldDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhPY3RldDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyQnJvYWRjYXN0OworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JNdWx0aWNhc3Q7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzckRpcmVjdGVkOwogICAgIC8vIDY0LWJpdCBPSUQKLSAgICBVTE9OR0xPTkcgICB1bGxSc3JPSzsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSc3JPSzsKIAogICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIFVMT05HTE9ORyAgIHVsbFJ4QnJvYWRjYXN0Qnl0ZXM7Ci0gICAgVUxPTkdMT05HICAgdWxsUnhNdWx0aWNhc3RCeXRlczsKLSAgICBVTE9OR0xPTkcgICB1bGxSeERpcmVjdGVkQnl0ZXM7Ci0gICAgVUxPTkdMT05HICAgdWxsUnhCcm9hZGNhc3RGcmFtZXM7Ci0gICAgVUxPTkdMT05HICAgdWxsUnhNdWx0aWNhc3RGcmFtZXM7Ci0gICAgVUxPTkdMT05HICAgdWxsUnhEaXJlY3RlZEZyYW1lczsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxSeEJyb2FkY2FzdEJ5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJ4TXVsdGljYXN0Qnl0ZXM7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsUnhEaXJlY3RlZEJ5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJ4QnJvYWRjYXN0RnJhbWVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJ4TXVsdGljYXN0RnJhbWVzOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFJ4RGlyZWN0ZWRGcmFtZXM7CiAKLSAgICBEV09SRCAgIGR3UnNyUnhGcmFnbWVudDsKLSAgICBEV09SRCAgIGR3UnNyUnhGcm1MZW42NDsKLSAgICBEV09SRCAgIGR3UnNyUnhGcm1MZW42NV8xMjc7Ci0gICAgRFdPUkQgICBkd1JzclJ4RnJtTGVuMTI4XzI1NTsKLSAgICBEV09SRCAgIGR3UnNyUnhGcm1MZW4yNTZfNTExOwotICAgIERXT1JEICAgZHdSc3JSeEZybUxlbjUxMl8xMDIzOwotICAgIERXT1JEICAgZHdSc3JSeEZybUxlbjEwMjRfMTUxODsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcmFnbWVudDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcm1MZW42NDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcm1MZW42NV8xMjc7CisgICAgdW5zaWduZWQgbG9uZyBkd1JzclJ4RnJtTGVuMTI4XzI1NTsKKyAgICB1bnNpZ25lZCBsb25nIGR3UnNyUnhGcm1MZW4yNTZfNTExOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeEZybUxlbjUxMl8xMDIzOworICAgIHVuc2lnbmVkIGxvbmcgZHdSc3JSeEZybUxlbjEwMjRfMTUxODsKIAogICAgIC8vIFRTUiBzdGF0dXMgY291bnQKICAgICAvLwotICAgIERXT1JEICAgZHdUc3JUb3RhbFJldHJ5W1RZUEVfTUFYVERdOyAgICAgICAgLy8gdG90YWwgY29sbGlzaW9uIHJldHJ5IGNvdW50Ci0gICAgRFdPUkQgICBkd1Rzck9uY2VSZXRyeVtUWVBFX01BWFREXTsgICAgICAgICAvLyB0aGlzIHBhY2tldCBvbmx5IG9jY3VyIG9uZSBjb2xsaXNpb24KLSAgICBEV09SRCAgIGR3VHNyTW9yZVRoYW5PbmNlUmV0cnlbVFlQRV9NQVhURF07IC8vIHRoaXMgcGFja2V0IG9jY3VyIG1vcmUgdGhhbiBvbmUgY29sbGlzaW9uCi0gICAgRFdPUkQgICBkd1RzclJldHJ5W1RZUEVfTUFYVERdOyAgICAgICAgICAgICAvLyB0aGlzIHBhY2tldCBoYXMgZXZlciBvY2N1ciBjb2xsaXNpb24sCisgICAgdW5zaWduZWQgbG9uZyBkd1RzclRvdGFsUmV0cnlbVFlQRV9NQVhURF07ICAgICAgICAvLyB0b3RhbCBjb2xsaXNpb24gcmV0cnkgY291bnQKKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyT25jZVJldHJ5W1RZUEVfTUFYVERdOyAgICAgICAgIC8vIHRoaXMgcGFja2V0IG9ubHkgb2NjdXIgb25lIGNvbGxpc2lvbgorICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JNb3JlVGhhbk9uY2VSZXRyeVtUWVBFX01BWFREXTsgLy8gdGhpcyBwYWNrZXQgb2NjdXIgbW9yZSB0aGFuIG9uZSBjb2xsaXNpb24KKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyUmV0cnlbVFlQRV9NQVhURF07ICAgICAgICAgICAgIC8vIHRoaXMgcGFja2V0IGhhcyBldmVyIG9jY3VyIGNvbGxpc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBpcyAoZHdUc3JPbmNlQ29sbGlzaW9uMCArIGR3VHNyTW9yZVRoYW5PbmNlQ29sbGlzaW9uMCkKLSAgICBEV09SRCAgIGR3VHNyQUNLRGF0YVtUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyRXJyW1RZUEVfTUFYVERdOwotICAgIERXT1JEICAgZHdBbGxUc3JPS1tUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyUmV0cnlUaW1lb3V0W1RZUEVfTUFYVERdOwotICAgIERXT1JEICAgZHdUc3JUcmFuc21pdFRpbWVvdXRbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzckFDS0RhdGFbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzckVycltUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3QWxsVHNyT0tbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzclJldHJ5VGltZW91dFtUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyVHJhbnNtaXRUaW1lb3V0W1RZUEVfTUFYVERdOwogCi0gICAgRFdPUkQgICBkd1RzclR4UGFja2V0W1RZUEVfTUFYVERdOwotICAgIERXT1JEICAgZHdUc3JUeE9jdGV0W1RZUEVfTUFYVERdOwotICAgIERXT1JEICAgZHdUc3JCcm9hZGNhc3RbVFlQRV9NQVhURF07Ci0gICAgRFdPUkQgICBkd1Rzck11bHRpY2FzdFtUWVBFX01BWFREXTsKLSAgICBEV09SRCAgIGR3VHNyRGlyZWN0ZWRbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1RzclR4UGFja2V0W1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JUeE9jdGV0W1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgZHdUc3JCcm9hZGNhc3RbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBkd1Rzck11bHRpY2FzdFtUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGR3VHNyRGlyZWN0ZWRbVFlQRV9NQVhURF07CiAKICAgICAvLyBSRC9URCBjb3VudAotICAgIERXT1JEICAgZHdDbnRSeEZybUxlbmd0aDsKLSAgICBEV09SRCAgIGR3Q250VHhCdWZMZW5ndGg7CisgICAgdW5zaWduZWQgbG9uZyBkd0NudFJ4RnJtTGVuZ3RoOworICAgIHVuc2lnbmVkIGxvbmcgZHdDbnRUeEJ1Zkxlbmd0aDsKIAotICAgIEJZVEUgICAgYWJ5Q250UnhQYXR0ZXJuWzE2XTsKLSAgICBCWVRFICAgIGFieUNudFR4UGF0dGVyblsxNl07CisgICAgdW5zaWduZWQgY2hhciBhYnlDbnRSeFBhdHRlcm5bMTZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q250VHhQYXR0ZXJuWzE2XTsKIAogCiAKICAgICAvLyBTb2Z0d2FyZSBjaGVjay4uLi4KLSAgICBEV09SRCAgIGR3Q250UnhEYXRhRXJyOyAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKLSAgICBEV09SRCAgIGR3Q250RGVjcnlwdEVycjsgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKLSAgICBEV09SRCAgIGR3Q250UnhJQ1ZFcnI7ICAgICAgICAgICAgICAvLyByeCBidWZmZXIgZGF0YSBzb2Z0d2FyZSBjb21wYXJlIENSQyBlcnIgY291bnQKLSAgICBVSU5UICAgIGlkeFJ4RXJyb3JEZXNjW1RZUEVfTUFYUkRdOyAvLyBpbmRleCBmb3IgcnggZGF0YSBlcnJvciBSRAorICAgIHVuc2lnbmVkIGxvbmcgZHdDbnRSeERhdGFFcnI7ICAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAorICAgIHVuc2lnbmVkIGxvbmcgZHdDbnREZWNyeXB0RXJyOyAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAorICAgIHVuc2lnbmVkIGxvbmcgZHdDbnRSeElDVkVycjsgICAgICAgICAgICAgIC8vIHJ4IGJ1ZmZlciBkYXRhIHNvZnR3YXJlIGNvbXBhcmUgQ1JDIGVyciBjb3VudAorICAgIHVuc2lnbmVkIGludCBpZHhSeEVycm9yRGVzY1tUWVBFX01BWFJEXTsgLy8gaW5kZXggZm9yIHJ4IGRhdGEgZXJyb3IgUkQKIAogICAgIC8vIDY0LWJpdCBPSUQKLSAgICBVTE9OR0xPTkcgICB1bGxUc3JPS1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUc3JPS1tUWVBFX01BWFREXTsKIAogICAgIC8vIGZvciBzb21lIG9wdGlvbmFsIE9JRHMgKDY0IGJpdHMpIGFuZCBETUkgc3VwcG9ydAotICAgIFVMT05HTE9ORyAgIHVsbFR4QnJvYWRjYXN0RnJhbWVzW1RZUEVfTUFYVERdOwotICAgIFVMT05HTE9ORyAgIHVsbFR4TXVsdGljYXN0RnJhbWVzW1RZUEVfTUFYVERdOwotICAgIFVMT05HTE9ORyAgIHVsbFR4RGlyZWN0ZWRGcmFtZXNbVFlQRV9NQVhURF07Ci0gICAgVUxPTkdMT05HICAgdWxsVHhCcm9hZGNhc3RCeXRlc1tUWVBFX01BWFREXTsKLSAgICBVTE9OR0xPTkcgICB1bGxUeE11bHRpY2FzdEJ5dGVzW1RZUEVfTUFYVERdOwotICAgIFVMT05HTE9ORyAgIHVsbFR4RGlyZWN0ZWRCeXRlc1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeEJyb2FkY2FzdEZyYW1lc1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeE11bHRpY2FzdEZyYW1lc1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeERpcmVjdGVkRnJhbWVzW1RZUEVfTUFYVERdOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgIHVsbFR4QnJvYWRjYXN0Qnl0ZXNbVFlQRV9NQVhURF07CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgdWxsVHhNdWx0aWNhc3RCeXRlc1tUWVBFX01BWFREXTsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgICB1bGxUeERpcmVjdGVkQnl0ZXNbVFlQRV9NQVhURF07CiAKLS8vICAgIERXT1JEICAgZHdUeFJldHJ5Q291bnRbOF07CisvLyAgICB1bnNpZ25lZCBsb25nIGR3VHhSZXRyeUNvdW50WzhdOwogICAgIC8vCiAgICAgLy8gSVNSIHN0YXR1cyBjb3VudAogICAgIC8vCkBAIC0zMjQsMTUgKzMyNCwxNSBAQAogCiAgICAjaWZkZWYgQ2FsY3VfTGlua1F1YWwKICAgICAgICAvL1R4IGNvdW50OgotICAgIFVMT05HIFR4Tm9SZXRyeU9rQ291bnQ7ICAgICAgICAgLy9zdWNjZXNzIHR4IG5vIHJldHJ5ICEKLSAgICBVTE9ORyBUeFJldHJ5T2tDb3VudDsgICAgICAgICAgICAgIC8vc3VjY2VzcyB0eCBidXQgcmV0cnkgIQotICAgIFVMT05HIFR4RmFpbENvdW50OyAgICAgICAgICAgICAgICAgICAgICAvL2ZhaWwgdHggPworICAgIHVuc2lnbmVkIGxvbmcgVHhOb1JldHJ5T2tDb3VudDsgICAgICAgICAvL3N1Y2Nlc3MgdHggbm8gcmV0cnkgIQorICAgIHVuc2lnbmVkIGxvbmcgVHhSZXRyeU9rQ291bnQ7ICAgICAgICAgICAgICAvL3N1Y2Nlc3MgdHggYnV0IHJldHJ5ICEKKyAgICB1bnNpZ25lZCBsb25nIFR4RmFpbENvdW50OyAgICAgICAgICAgICAgICAgICAgICAvL2ZhaWwgdHggPwogICAgICAgLy9SeCBjb3VudDoKLSAgICBVTE9ORyBSeE9rQ250OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdWNjZXNzIHJ4ICEKLSAgICBVTE9ORyBSeEZjc0VyckNudDsgICAgICAgICAgICAgICAgICAgIC8vZmFpbCByeCA/CisgICAgdW5zaWduZWQgbG9uZyBSeE9rQ250OyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zdWNjZXNzIHJ4ICEKKyAgICB1bnNpZ25lZCBsb25nIFJ4RmNzRXJyQ250OyAgICAgICAgICAgICAgICAgICAgLy9mYWlsIHJ4ID8KICAgICAgIC8vc3RhdGlzdGljCi0gICAgVUxPTkcgU2lnbmFsU3RyZW47Ci0gICAgVUxPTkcgTGlua1F1YWxpdHk7CisgICAgdW5zaWduZWQgbG9uZyBTaWduYWxTdHJlbjsKKyAgICB1bnNpZ25lZCBsb25nIExpbmtRdWFsaXR5OwogICAgI2VuZGlmCiB9IFNTdGF0Q291bnRlciwgKlBTU3RhdENvdW50ZXI7CiAKQEAgLTM0NCwzMCArMzQ0LDI5IEBACiAKIHZvaWQgU1RBdkNsZWFyQWxsQ291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMpOwogCi12b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIERXT1JEIGR3SXNyKTsKK3ZvaWQgU1RBdlVwZGF0ZUlzclN0YXRDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywgdW5zaWduZWQgbG9uZyBkd0lzcik7CiAKIHZvaWQgU1RBdlVwZGF0ZVJEU3RhdENvdW50ZXIoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURSBieVJTUiwgQllURSBieU5ld1JTUiwgQllURSBieVJ4UmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFIHBieUJ1ZmZlciwgVUlOVCBjYkZyYW1lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYnlSU1IsIHVuc2lnbmVkIGNoYXIgYnlOZXdSU1IsIHVuc2lnbmVkIGNoYXIgYnlSeFJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoKTsKIAogdm9pZCBTVEF2VXBkYXRlUkRTdGF0Q291bnRlckV4KFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUgYnlSU1IsIEJZVEUgYnlOZXdSc3IsIEJZVEUgYnlSeFJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURSBwYnlCdWZmZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5UlNSLCB1bnNpZ25lZCBjaGFyIGJ5TmV3UnNyLCB1bnNpZ25lZCBjaGFyIGJ5UnhSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLCB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCk7CiAKLXZvaWQgU1RBdlVwZGF0ZVREU3RhdENvdW50ZXIoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFIGJ5VFNSMCwgQllURSBieVRTUjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFIHBieUJ1ZmZlciwgVUlOVCBjYkZyYW1lTGVuZ3RoLCBVSU5UIHVJZHggKTsKK3ZvaWQgU1RBdlVwZGF0ZVREU3RhdENvdW50ZXIoUFNTdGF0Q291bnRlciBwU3RhdGlzdGljLCB1bnNpZ25lZCBjaGFyIGJ5VFNSMCwgdW5zaWduZWQgY2hhciBieVRTUjEsCisJCXVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlciwgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsIHVuc2lnbmVkIGludCB1SWR4KTsKIAogdm9pZCBTVEF2VXBkYXRlVERTdGF0Q291bnRlckV4KAogICAgIFBTU3RhdENvdW50ZXIgICBwU3RhdGlzdGljLAotICAgIFBCWVRFICAgICAgICAgICBwYnlCdWZmZXIsCi0gICAgRFdPUkQgICAgICAgICAgIGNiRnJhbWVMZW5ndGgKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgbG9uZyBjYkZyYW1lTGVuZ3RoCiAgICAgKTsKIAogdm9pZCBTVEF2VXBkYXRlODAyXzExQ291bnRlcigKICAgICBQU0RvdDExQ291bnRlcnMgcDgwMl8xMUNvdW50ZXIsCiAgICAgUFNTdGF0Q291bnRlciAgIHBTdGF0aXN0aWMsCi0gICAgRFdPUkQgICAgICAgICAgIGR3Q291bnRlcgorICAgIHVuc2lnbmVkIGxvbmcgZHdDb3VudGVyCiAgICAgKTsKIAogdm9pZCBTVEF2Q2xlYXI4MDJfMTFDb3VudGVyKFBTRG90MTFDb3VudGVycyBwODAyXzExQ291bnRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCmluZGV4IDBiZjU3ZWYuLjY3NjE4ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvbWljaGFlbC5jCkBAIC0yNiw4ICsyNiw4IEBACiAgKiBEYXRlOiBTZXAgNCwgMjAwMgogICoKICAqIEZ1bmN0aW9uczoKLSAqICAgICAgc19kd0dldFVJTlQzMiAtIENvbnZlcnQgZnJvbSBCWVRFW10gdG8gRFdPUkQgaW4gYSBwb3J0YWJsZSB3YXkKLSAqICAgICAgc192UHV0VUlOVDMyIC0gQ29udmVydCBmcm9tIERXT1JEIHRvIEJZVEVbXSBpbiBhIHBvcnRhYmxlIHdheQorICogICAgICBzX2R3R2V0VUlOVDMyIC0gQ29udmVydCBmcm9tIHVuc2lnbmVkIGNoYXIgW10gdG8gdW5zaWduZWQgbG9uZyBpbiBhIHBvcnRhYmxlIHdheQorICogICAgICBzX3ZQdXRVSU5UMzIgLSBDb252ZXJ0IGZyb20gdW5zaWduZWQgbG9uZyB0byB1bnNpZ25lZCBjaGFyIFtdIGluIGEgcG9ydGFibGUgd2F5CiAgKiAgICAgIHNfdkNsZWFyIC0gUmVzZXQgdGhlIHN0YXRlIHRvIHRoZSBlbXB0eSBtZXNzYWdlLgogICogICAgICBzX3ZTZXRLZXkgLSBTZXQgdGhlIGtleS4KICAqICAgICAgTUlDX3ZJbml0IC0gU2V0IHRoZSBrZXkuCkBAIC00OCwyOSArNDgsMjkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCi1zdGF0aWMgRFdPUkQgc19kd0dldFVJTlQzMihCWVRFICogcCk7ICAgICAgICAgLy8gR2V0IERXT1JEIGZyb20gNCBieXRlcyBMU0J5dGUgZmlyc3QKLXN0YXRpYyB2b2lkIHNfdlB1dFVJTlQzMihCWVRFKiBwLCBEV09SRCB2YWwpOyAvLyBQdXQgRFdPUkQgaW50byA0IGJ5dGVzIExTQnl0ZSBmaXJzdAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc19kd0dldFVJTlQzMih1bnNpZ25lZCBjaGFyICpwKTsgICAgICAgICAvLyBHZXQgdW5zaWduZWQgbG9uZyBmcm9tIDQgYnl0ZXMgTFNCeXRlIGZpcnN0CitzdGF0aWMgdm9pZCBzX3ZQdXRVSU5UMzIodW5zaWduZWQgY2hhciAqcCwgdW5zaWduZWQgbG9uZyB2YWwpOyAvLyBQdXQgdW5zaWduZWQgbG9uZyBpbnRvIDQgYnl0ZXMgTFNCeXRlIGZpcnN0CiAqLwogc3RhdGljIHZvaWQgc192Q2xlYXIodm9pZCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgaW50ZXJuYWwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldHMgdGhlIG9iamVjdCB0byB0aGUgc3RhdGUganVzdCBhZnRlciBjb25zdHJ1Y3Rpb24uCi1zdGF0aWMgdm9pZCBzX3ZTZXRLZXkoRFdPUkQgZHdLMCwgRFdPUkQgZHdLMSk7Ci1zdGF0aWMgdm9pZCBzX3ZBcHBlbmRCeXRlKEJZVEUgYik7ICAgICAgICAgICAgLy8gQWRkIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIGludGVybmFsIG1lc3NhZ2UKK3N0YXRpYyB2b2lkIHNfdlNldEtleSh1bnNpZ25lZCBsb25nIGR3SzAsIHVuc2lnbmVkIGxvbmcgZHdLMSk7CitzdGF0aWMgdm9pZCBzX3ZBcHBlbmRCeXRlKHVuc2lnbmVkIGNoYXIgYik7ICAgICAgICAgICAgLy8gQWRkIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIGludGVybmFsIG1lc3NhZ2UKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBEV09SRCAgTCwgUjsgICAgICAgICAgIC8vIEN1cnJlbnQgc3RhdGUKK3N0YXRpYyB1bnNpZ25lZCBsb25nIEwsIFI7ICAgICAgICAgICAvLyBDdXJyZW50IHN0YXRlCiAKLXN0YXRpYyBEV09SRCAgSzAsIEsxOyAgICAgICAgIC8vIEtleQotc3RhdGljIERXT1JEICBNOyAgICAgICAgICAgICAgLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCi1zdGF0aWMgVUlOVCAgIG5CeXRlc0luTTsgICAgICAvLyAjIGJ5dGVzIGluIE0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEswLCBLMTsgICAgICAgICAvLyBLZXkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIE07ICAgICAgICAgICAgICAvLyBNZXNzYWdlIGFjY3VtdWxhdG9yIChzaW5nbGUgd29yZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbkJ5dGVzSW5NOyAgICAgIC8vICMgYnl0ZXMgaW4gTQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgotc3RhdGljIERXT1JEIHNfZHdHZXRVSU5UMzIgKEJZVEUgKiBwKQotLy8gQ29udmVydCBmcm9tIEJZVEVbXSB0byBEV09SRCBpbiBhIHBvcnRhYmxlIHdheQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc19kd0dldFVJTlQzMiAodW5zaWduZWQgY2hhciAqcCkKKy8vIENvbnZlcnQgZnJvbSB1bnNpZ25lZCBjaGFyIFtdIHRvIHVuc2lnbmVkIGxvbmcgaW4gYSBwb3J0YWJsZSB3YXkKIHsKLSAgICBEV09SRCByZXMgPSAwOwotICAgIFVJTlQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHJlcyA9IDA7CisgICAgdW5zaWduZWQgaW50IGk7CiAgICAgZm9yKGk9MDsgaTw0OyBpKysgKQogICAgIHsKICAgICAgICAgcmVzIHw9ICgqcCsrKSA8PCAoOCppKTsKQEAgLTc4LDEzICs3OCwxMyBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB2b2lkIHNfdlB1dFVJTlQzMiAoQllURSogcCwgRFdPUkQgdmFsKQotLy8gQ29udmVydCBmcm9tIERXT1JEIHRvIEJZVEVbXSBpbiBhIHBvcnRhYmxlIHdheQorc3RhdGljIHZvaWQgc192UHV0VUlOVDMyICh1bnNpZ25lZCBjaGFyICpwLCB1bnNpZ25lZCBsb25nIHZhbCkKKy8vIENvbnZlcnQgZnJvbSB1bnNpZ25lZCBsb25nIHRvIHVuc2lnbmVkIGNoYXIgW10gaW4gYSBwb3J0YWJsZSB3YXkKIHsKLSAgICBVSU5UIGk7CisgICAgdW5zaWduZWQgaW50IGk7CiAgICAgZm9yKGk9MDsgaTw0OyBpKysgKQogICAgIHsKLSAgICAgICAgKnArKyA9IChCWVRFKSAodmFsICYgMHhmZik7CisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgKHZhbCAmIDB4ZmYpOwogICAgICAgICB2YWwgPj49IDg7CiAgICAgfQogfQpAQCAtOTksNyArOTksNyBAQAogICAgIE0gPSAwOwogfQogCi1zdGF0aWMgdm9pZCBzX3ZTZXRLZXkgKERXT1JEIGR3SzAsIERXT1JEIGR3SzEpCitzdGF0aWMgdm9pZCBzX3ZTZXRLZXkgKHVuc2lnbmVkIGxvbmcgZHdLMCwgdW5zaWduZWQgbG9uZyBkd0sxKQogewogICAgIC8vIFNldCB0aGUga2V5CiAgICAgSzAgPSBkd0swOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgICAgc192Q2xlYXIoKTsKIH0KIAotc3RhdGljIHZvaWQgc192QXBwZW5kQnl0ZSAoQllURSBiKQorc3RhdGljIHZvaWQgc192QXBwZW5kQnl0ZSAodW5zaWduZWQgY2hhciBiKQogewogICAgIC8vIEFwcGVuZCB0aGUgYnl0ZSB0byBvdXIgd29yZC1zaXplZCBidWZmZXIKICAgICBNIHw9IGIgPDwgKDgqbkJ5dGVzSW5NKTsKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgIH0KIH0KIAotdm9pZCBNSUNfdkluaXQgKERXT1JEIGR3SzAsIERXT1JEIGR3SzEpCit2b2lkIE1JQ192SW5pdCAodW5zaWduZWQgbG9uZyBkd0swLCB1bnNpZ25lZCBsb25nIGR3SzEpCiB7CiAgICAgLy8gU2V0IHRoZSBrZXkKICAgICBzX3ZTZXRLZXkoZHdLMCwgZHdLMSk7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICBzX3ZDbGVhcigpOwogfQogCi12b2lkIE1JQ192QXBwZW5kIChQQllURSBzcmMsIFVJTlQgbkJ5dGVzKQordm9pZCBNSUNfdkFwcGVuZCAodW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgbkJ5dGVzKQogewogICAgIC8vIFRoaXMgaXMgc2ltcGxlCiAgICAgd2hpbGUgKG5CeXRlcyA+IDApCkBAIC0xNTksNyArMTU5LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgTUlDX3ZHZXRNSUMgKFBEV09SRCBwZHdMLCBQRFdPUkQgcGR3UikKK3ZvaWQgTUlDX3ZHZXRNSUMgKHVuc2lnbmVkIGxvbmcgKnBkd0wsIHVuc2lnbmVkIGxvbmcgKnBkd1IpCiB7CiAgICAgLy8gQXBwZW5kIHRoZSBtaW5pbXVtIHBhZGRpbmcKICAgICBzX3ZBcHBlbmRCeXRlKDB4NWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9taWNoYWVsLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuaAppbmRleCA5N2RlNzdiLi4zMTMxYjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L21pY2hhZWwuaApAQCAtMzUsMTYgKzM1LDE2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgTUlDX3ZJbml0KERXT1JEIGR3SzAsIERXT1JEIGR3SzEpOwordm9pZCBNSUNfdkluaXQodW5zaWduZWQgbG9uZyBkd0swLCB1bnNpZ25lZCBsb25nIGR3SzEpOwogCiB2b2lkIE1JQ192VW5Jbml0KHZvaWQpOwogCiAvLyBBcHBlbmQgYnl0ZXMgdG8gdGhlIG1lc3NhZ2UgdG8gYmUgTUlDZWQKLXZvaWQgTUlDX3ZBcHBlbmQoUEJZVEUgc3JjLCBVSU5UIG5CeXRlcyk7Cit2b2lkIE1JQ192QXBwZW5kKHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgaW50IG5CeXRlcyk7CiAKIC8vIEdldCB0aGUgTUlDIHJlc3VsdC4gRGVzdGluYXRpb24gc2hvdWxkIGFjY2VwdCA4IGJ5dGVzIG9mIHJlc3VsdC4KIC8vIFRoaXMgYWxzbyByZXNldHMgdGhlIG1lc3NhZ2UgdG8gZW1wdHkuCi12b2lkIE1JQ192R2V0TUlDKFBEV09SRCBwZHdMLCBQRFdPUkQgcGR3Uik7Cit2b2lkIE1JQ192R2V0TUlDKHVuc2lnbmVkIGxvbmcgKnBkd0wsIHVuc2lnbmVkIGxvbmcgKnBkd1IpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmMKaW5kZXggNjRjMjJjMy4uNzIwN2FjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuYwpAQCAtNzcsMTIgKzc3LDEyIEBACiB2b2lkCiBQU3ZFbmFibGVQb3dlclNhdmluZygKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBXT1JEIHdMaXN0ZW5JbnRlcnZhbAorICAgIHVuc2lnbmVkIHNob3J0IHdMaXN0ZW5JbnRlcnZhbAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBXT1JEICAgICAgICAgICAgd0FJRCA9IHBNZ210LT53Q3VyckFJRCB8IEJJVDE0IHwgQklUMTU7CisgICAgdW5zaWduZWQgc2hvcnQgd0FJRCA9IHBNZ210LT53Q3VyckFJRCB8IEJJVDE0IHwgQklUMTU7CiAKICAgICAvLyBzZXQgcGVyaW9kIG9mIHBvd2VyIHVwIGJlZm9yZSBUQlRUCiAgICAgVk5Tdk91dFBvcnRXKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX1BXQlQsIENfUFdCVCk7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAogICAgIC8vIGVuYWJsZSBwb3dlciBzYXZpbmcgaHcgZnVuY3Rpb24KICAgICBNQUN2UmVnQml0c09uKHBEZXZpY2UtPlBvcnRPZmZzZXQsIE1BQ19SRUdfUFNDVEwsIFBTQ1RMX1BTRU4pOwotICAgIHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPSBUUlVFOworICAgIHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPSB0cnVlOwogCiAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgewogLy8gICAgICAgIGJNZ3JQcmVwYXJlQmVhY29uVG9TZW5kKCh2b2lkICopcERldmljZSwgcE1nbXQpOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgZWxzZSBpZiAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0lORlJBU1RSVUNUVVJFKSB7CiAgICAgICAgIFBTYlNlbmROdWxsUGFja2V0KHBEZXZpY2UpOwogICAgIH0KLSAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IFRSVUU7CisgICAgcERldmljZS0+YlBXQml0T24gPSB0cnVlOwogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlBTOlBvd2VyIFNhdmluZyBNb2RlIEVuYWJsZS4uLiBcbiIpOwogICAgIHJldHVybjsKIH0KQEAgLTE2MSwxMiArMTYxLDEyIEBACiAgICAgLy8gc2V0IGFsd2F5cyBsaXN0ZW4gYmVhY29uCiAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9BTEJDTik7CiAKLSAgICBwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID0gRkFMU0U7CisgICAgcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IGZhbHNlOwogCiAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkgewogICAgICAgICBQU2JTZW5kTnVsbFBhY2tldChwRGV2aWNlKTsKICAgICB9Ci0gICAgcERldmljZS0+YlBXQml0T24gPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IGZhbHNlOwogICAgIHJldHVybjsKIH0KIApAQCAtMTc3LDM1ICsxNzcsMzUgQEAKICAqIENvbnNpZGVyIHRvIHBvd2VyIGRvd24gd2hlbiBubyBtb3JlIHBhY2tldHMgdG8gdHggb3IgcnguCiAgKgogICogUmV0dXJuIFZhbHVlOgotICogICAgVFJVRSwgaWYgcG93ZXIgZG93biBzdWNjZXNzCi0gKiAgICBGQUxTRSwgaWYgZmFpbAorICogICAgdHJ1ZSwgaWYgcG93ZXIgZG93biBzdWNjZXNzCisgKiAgICBmYWxzZSwgaWYgZmFpbAogLSovCiAKIAotQk9PTAorYm9vbAogUFNiQ29uc2lkZXJQb3dlckRvd24oCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgQk9PTCBiQ2hlY2tSeERNQSwKLSAgICBCT09MIGJDaGVja0NvdW50VG9XYWtlVXAKKyAgICBib29sIGJDaGVja1J4RE1BLAorICAgIGJvb2wgYkNoZWNrQ291bnRUb1dha2VVcAogICAgICkKIHsKICAgICBQU0RldmljZSAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBVSU5UICAgICAgICAgICAgdUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgdUlkeDsKIAogICAgIC8vIGNoZWNrIGlmIGFscmVhZHkgaW4gRG96ZSBtb2RlCiAgICAgaWYgKE1BQ2JJc1JlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9QUykpCi0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9JQlNTX1NUQSkgewogICAgICAgICAvLyBjaGVjayBpZiBpbiBUSU0gd2FrZSBwZXJpb2QKICAgICAgICAgaWYgKHBNZ210LT5iSW5USU1XYWtlKQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIGNoZWNrIHNjYW4gc3RhdGUKICAgICBpZiAocERldmljZS0+YkNtZFJ1bm5pbmcpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRnJvY2UgUFNFTiBvbgogICAgIE1BQ3ZSZWdCaXRzT24ocERldmljZS0+UG9ydE9mZnNldCwgTUFDX1JFR19QU0NUTCwgUFNDVExfUFNFTik7CkBAIC0yMTMsMjcgKzIxMywyNyBAQAogICAgIC8vIGNoZWNrIGlmIGFsbCBURCBhcmUgZW1wdHksCiAgICAgZm9yICh1SWR4ID0gMDsgdUlkeCA8IFRZUEVfTUFYVEQ7IHVJZHggKyspIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmlURFVzZWRbdUlkeF0gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBjaGVjayBpZiByeCBpc3IgaXMgY2xlYXIKICAgICBpZiAoYkNoZWNrUnhETUEgJiYKICAgICAgICAgKChwRGV2aWNlLT5kd0lzciYgSVNSX1JYRE1BMCkgIT0gMCkgJiYKICAgICAgICAgKChwRGV2aWNlLT5kd0lzciAmIElTUl9SWERNQTEpICE9IDApKXsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfTsKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9JQlNTX1NUQSkgewogICAgICAgICBpZiAoYkNoZWNrQ291bnRUb1dha2VVcCAmJgogICAgICAgICAgICAocE1nbXQtPndDb3VudFRvV2FrZVVwID09IDAgfHwgcE1nbXQtPndDb3VudFRvV2FrZVVwID09IDEpKSB7Ci0gICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIG5vIFR4LCBubyBSeCBpc3IsIG5vdyBnbyB0byBEb3plCiAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9HTzJET1pFKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJHbyB0byBEb3plIFpaWlpaWlpaWlpaWlpaWlxuIik7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtMjYyLDcgKzI2Miw3IEBACiAKICAgICBtZW1zZXQocE1nbXQtPnBieVBTUGFja2V0UG9vbCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9IRFJfQUREUjJfTEVOKTsKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieVBTUGFja2V0UG9vbDsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTIud0ZyYW1lQ3RsID0gY3B1X3RvX2xlMTYoCiAgICAgICAgICAoCiAgICAgICAgICBXTEFOX1NFVF9GQ19GVFlQRShXTEFOX1RZUEVfQ1RMKSB8CkBAIC0yOTYsNyArMjk2LDcgQEAKICAqICAgIE5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBQU2JTZW5kTnVsbFBhY2tldCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICkKQEAgLTMwNCwzMiArMzA0LDMyIEBACiAgICAgUFNEZXZpY2UgICAgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1SWR4OworICAgIHVuc2lnbmVkIGludCB1SWR4OwogCiAKLSAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IEZBTFNFKSB7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IGZhbHNlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgI2lmZGVmIFR4SW5TbGVlcAotICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpICYmCi0JICAocERldmljZS0+ZlR4RGF0YUluU2xlZXAgPT0gRkFMU0UpKXsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gZmFsc2UpICYmCisJICAocERldmljZS0+ZlR4RGF0YUluU2xlZXAgPT0gZmFsc2UpKXsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICNlbHNlCi0gICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IGZhbHNlKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocERldmljZS0+YkVuYWJsZVBTTW9kZSkgewogICAgICAgICBmb3IgKHVJZHggPSAwOyB1SWR4IDwgVFlQRV9NQVhURDsgdUlkeCArKykgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmlURFVzZWRbdUlkeF0gIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgbWVtc2V0KHBNZ210LT5wYnlQU1BhY2tldFBvb2wsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fTlVMTERBVEFfRlJfTUFYTEVOKTsKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieVBTUGFja2V0UG9vbDsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogCiAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUpIHsKIApAQCAtMzUwLDcgKzM1MCw3IEBACiAgICAgfQogCiAgICAgaWYocE1nbXQtPmVDdXJyTW9kZSAhPSBXTUFDX01PREVfSUJTU19TVEEpIHsKLSAgICAgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy53RnJhbWVDdGwgfD0gY3B1X3RvX2xlMTYoKFdPUkQpV0xBTl9TRVRfRkNfVE9EUygxKSk7CisgICAgICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMud0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClXTEFOX1NFVF9GQ19UT0RTKDEpKTsKICAgICB9CiAKICAgICBtZW1jcHkocFR4UGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSwgcE1nbXQtPmFieUN1cnJCU1NJRCwgV0xBTl9BRERSX0xFTik7CkBAIC0zNjEsNyArMzYxLDcgQEAKICAgICAvLyBzZW5kIHRoZSBmcmFtZQogICAgIGlmIChjc01nbXRfeG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpICE9IENNRF9TVEFUVVNfUEVORElORykgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTZW5kIE51bGwgUGFja2V0IGZhaWxlZCAhXG4iKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGVsc2UgewogCkBAIC0zNjksNyArMzY5LDcgQEAKICAgICB9CiAKIAotICAgIHJldHVybiBUUlVFIDsKKyAgICByZXR1cm4gdHJ1ZSA7CiB9CiAKIC8qKwpAQCAtMzgyLDcgKzM4Miw3IEBACiAgKgogLSovCiAKLUJPT0wKK2Jvb2wKIFBTYklzTmV4dFRCVFRXYWtlVXAoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQKICAgICApCkBAIC0zOTAsNyArMzkwLDcgQEAKIAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU01nbXRPYmplY3QgICAgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiV2FrZVVwID0gRkFMU0U7CisgICAgYm9vbCBiV2FrZVVwID0gZmFsc2U7CiAKICAgICBpZiAocE1nbXQtPndMaXN0ZW5JbnRlcnZhbCA+PSAyKSB7CiAgICAgICAgIGlmIChwTWdtdC0+d0NvdW50VG9XYWtlVXAgPT0gMCkgewpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgICAgIGlmIChwTWdtdC0+d0NvdW50VG9XYWtlVXAgPT0gMSkgewogICAgICAgICAgICAgLy8gVHVybiBvbiB3YWtlIHVwIHRvIGxpc3RlbiBuZXh0IGJlYWNvbgogICAgICAgICAgICAgTUFDdlJlZ0JpdHNPbihwRGV2aWNlLT5Qb3J0T2Zmc2V0LCBNQUNfUkVHX1BTQ1RMLCBQU0NUTF9MTkJDTik7Ci0gICAgICAgICAgICBiV2FrZVVwID0gVFJVRTsKKyAgICAgICAgICAgIGJXYWtlVXAgPSB0cnVlOwogICAgICAgICB9CiAKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Bvd2VyLmgKaW5kZXggYzBkYmUyMS4uMDEwMTNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9wb3dlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcG93ZXIuaApAQCAtNDgsMTEgKzQ4LDExIEBACiAvLyBQU0RldmljZSBwRGV2aWNlCiAvLyBQU0RldmljZSBoRGV2aWNlQ29udGV4dAogCi1CT09MCitib29sCiBQU2JDb25zaWRlclBvd2VyRG93bigKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKLSAgICBCT09MIGJDaGVja1J4RE1BLAotICAgIEJPT0wgYkNoZWNrQ291bnRUb1dha2VVcAorICAgIGJvb2wgYkNoZWNrUnhETUEsCisgICAgYm9vbCBiQ2hlY2tDb3VudFRvV2FrZVVwCiAgICAgKTsKIAogdm9pZApAQCAtNjMsNyArNjMsNyBAQAogdm9pZAogUFN2RW5hYmxlUG93ZXJTYXZpbmcoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgV09SRCB3TGlzdGVuSW50ZXJ2YWwKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWwKICAgICApOwogCiB2b2lkCkBAIC03MSwxMiArNzEsMTIgQEAKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFBTYlNlbmROdWxsUGFja2V0KAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0CiAgICAgKTsKIAotQk9PTAorYm9vbAogUFNiSXNOZXh0VEJUVFdha2VVcCgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yYzQuYwppbmRleCA0YTUzZjE1Li45ODU2YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmM0LmMKQEAgLTMyLDM4ICszMiwzOCBAQAogCiAjaW5jbHVkZSAicmM0LmgiCiAKLXZvaWQgcmM0X2luaXQoUFJDNEV4dCBwUkM0LCBQQllURSBwYnlLZXksIFVJTlQgY2JLZXlfbGVuKQordm9pZCByYzRfaW5pdChQUkM0RXh0IHBSQzQsIHVuc2lnbmVkIGNoYXIgKnBieUtleSwgdW5zaWduZWQgaW50IGNiS2V5X2xlbikKIHsKLSAgICBVSU5UICB1c3QxLCB1c3QyOwotICAgIFVJTlQgIGtleWluZGV4OwotICAgIFVJTlQgIHN0YXRlaW5kZXg7Ci0gICAgUEJZVEUgcGJ5c3Q7Ci0gICAgVUlOVCAgaWR4OworICAgIHVuc2lnbmVkIGludCB1c3QxLCB1c3QyOworICAgIHVuc2lnbmVkIGludCBrZXlpbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhdGVpbmRleDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlzdDsKKyAgICB1bnNpZ25lZCBpbnQgaWR4OwogCiAgICAgcGJ5c3QgPSBwUkM0LT5hYnlzdGF0ZTsKICAgICBwUkM0LT51eCA9IDA7CiAgICAgcFJDNC0+dXkgPSAwOwogICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgMjU2OyBpZHgrKykKLSAgICAgICAgcGJ5c3RbaWR4XSA9IChCWVRFKWlkeDsKKyAgICAgICAgcGJ5c3RbaWR4XSA9ICh1bnNpZ25lZCBjaGFyKWlkeDsKICAgICBrZXlpbmRleCA9IDA7CiAgICAgc3RhdGVpbmRleCA9IDA7CiAgICAgZm9yIChpZHggPSAwOyBpZHggPCAyNTY7IGlkeCsrKSB7CiAgICAgICAgIHVzdDEgPSBwYnlzdFtpZHhdOwogICAgICAgICBzdGF0ZWluZGV4ID0gKHN0YXRlaW5kZXggKyBwYnlLZXlba2V5aW5kZXhdICsgdXN0MSkgJiAweGZmOwogICAgICAgICB1c3QyID0gcGJ5c3Rbc3RhdGVpbmRleF07Ci0gICAgICAgIHBieXN0W3N0YXRlaW5kZXhdID0gKEJZVEUpdXN0MTsKLSAgICAgICAgcGJ5c3RbaWR4XSA9IChCWVRFKXVzdDI7CisgICAgICAgIHBieXN0W3N0YXRlaW5kZXhdID0gKHVuc2lnbmVkIGNoYXIpdXN0MTsKKyAgICAgICAgcGJ5c3RbaWR4XSA9ICh1bnNpZ25lZCBjaGFyKXVzdDI7CiAgICAgICAgIGlmICgrK2tleWluZGV4ID49IGNiS2V5X2xlbikKICAgICAgICAgICAgIGtleWluZGV4ID0gMDsKICAgICB9CiB9CiAKLVVJTlQgcmM0X2J5dGUoUFJDNEV4dCBwUkM0KQordW5zaWduZWQgaW50IHJjNF9ieXRlKFBSQzRFeHQgcFJDNCkKIHsKLSAgICBVSU5UIHV4OwotICAgIFVJTlQgdXk7Ci0gICAgVUlOVCB1c3R4LCB1c3R5OwotICAgIFBCWVRFIHBieXN0OworICAgIHVuc2lnbmVkIGludCB1eDsKKyAgICB1bnNpZ25lZCBpbnQgdXk7CisgICAgdW5zaWduZWQgaW50IHVzdHgsIHVzdHk7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5c3Q7CiAKICAgICBwYnlzdCA9IHBSQzQtPmFieXN0YXRlOwogICAgIHV4ID0gKHBSQzQtPnV4ICsgMSkgJiAweGZmOwpAQCAtNzIsMTYgKzcyLDE2IEBACiAgICAgdXN0eSA9IHBieXN0W3V5XTsKICAgICBwUkM0LT51eCA9IHV4OwogICAgIHBSQzQtPnV5ID0gdXk7Ci0gICAgcGJ5c3RbdXldID0gKEJZVEUpdXN0eDsKLSAgICBwYnlzdFt1eF0gPSAoQllURSl1c3R5OworICAgIHBieXN0W3V5XSA9ICh1bnNpZ25lZCBjaGFyKXVzdHg7CisgICAgcGJ5c3RbdXhdID0gKHVuc2lnbmVkIGNoYXIpdXN0eTsKIAogICAgIHJldHVybiBwYnlzdFsodXN0eCArIHVzdHkpICYgMHhmZl07CiB9CiAKLXZvaWQgcmM0X2VuY3J5cHQoUFJDNEV4dCBwUkM0LCBQQllURSBwYnlEZXN0LAotICAgICAgICAgICAgICAgICAgICAgUEJZVEUgcGJ5U3JjLCBVSU5UIGNiRGF0YV9sZW4pCit2b2lkIHJjNF9lbmNyeXB0KFBSQzRFeHQgcFJDNCwgdW5zaWduZWQgY2hhciAqcGJ5RGVzdCwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieVNyYywgdW5zaWduZWQgaW50IGNiRGF0YV9sZW4pCiB7Ci0gICAgVUlOVCBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAgICAgZm9yIChpaSA9IDA7IGlpIDwgY2JEYXRhX2xlbjsgaWkrKykKLSAgICAgICAgcGJ5RGVzdFtpaV0gPSAoQllURSkocGJ5U3JjW2lpXSBeIHJjNF9ieXRlKHBSQzQpKTsKKyAgICAgICAgcGJ5RGVzdFtpaV0gPSAodW5zaWduZWQgY2hhcikocGJ5U3JjW2lpXSBeIHJjNF9ieXRlKHBSQzQpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmM0LmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JjNC5oCmluZGV4IGU2NWNhZTYuLmFkMDRlMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmM0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yYzQuaApAQCAtMzUsMTMgKzM1LDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBUeXBlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBVSU5UIHV4OwotICAgIFVJTlQgdXk7Ci0gICAgQllURSBhYnlzdGF0ZVsyNTZdOworICAgIHVuc2lnbmVkIGludCB1eDsKKyAgICB1bnNpZ25lZCBpbnQgdXk7CisgICAgdW5zaWduZWQgY2hhciBhYnlzdGF0ZVsyNTZdOwogfSBSQzRFeHQsICpQUkM0RXh0OwogCi12b2lkIHJjNF9pbml0KFBSQzRFeHQgcFJDNCwgUEJZVEUgcGJ5S2V5LCBVSU5UIGNiS2V5X2xlbik7Ci1VSU5UIHJjNF9ieXRlKFBSQzRFeHQgcFJDNCk7Ci12b2lkIHJjNF9lbmNyeXB0KFBSQzRFeHQgcFJDNCwgUEJZVEUgcGJ5RGVzdCwgUEJZVEUgcGJ5U3JjLCBVSU5UIGNiRGF0YV9sZW4pOwordm9pZCByYzRfaW5pdChQUkM0RXh0IHBSQzQsIHVuc2lnbmVkIGNoYXIgKnBieUtleSwgdW5zaWduZWQgaW50IGNiS2V5X2xlbik7Cit1bnNpZ25lZCBpbnQgcmM0X2J5dGUoUFJDNEV4dCBwUkM0KTsKK3ZvaWQgcmM0X2VuY3J5cHQoUFJDNEV4dCBwUkM0LCB1bnNpZ25lZCBjaGFyICpwYnlEZXN0LCB1bnNpZ25lZCBjaGFyICpwYnlTcmMsIHVuc2lnbmVkIGludCBjYkRhdGFfbGVuKTsKIAogI2VuZGlmIC8vX19SQzRfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmMKaW5kZXggN2NiODZmZS4uYjhlYzc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuYwpAQCAtOTQsNyArOTQsNyBAQAogCiAKIAotY29uc3QgRFdPUkQgZHdBTDIyMzBJbml0VGFibGVbQ0JfQUwyMjMwX0lOSVRfU0VRXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgZHdBTDIyMzBJbml0VGFibGVbQ0JfQUwyMjMwX0lOSVRfU0VRXSA9IHsKICAgICAweDAzRjc5MDAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8KICAgICAweDAzMzMzMTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8KICAgICAweDAxQTAwMjAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8KQEAgLTExMiw3ICsxMTIsNyBAQAogICAgIDB4MDA1ODBGMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXCiAgICAgfTsKIAotY29uc3QgRFdPUkQgZHdBTDIyMzBDaGFubmVsVGFibGUwW0NCX01BWF9DSEFOTkVMXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgZHdBTDIyMzBDaGFubmVsVGFibGUwW0NCX01BWF9DSEFOTkVMXSA9IHsKICAgICAweDAzRjc5MDAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9IDEsIFRmID0gMjQxMk1IegogICAgIDB4MDNGNzkwMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gMiwgVGYgPSAyNDE3TUh6CiAgICAgMHgwM0U3OTAwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAzLCBUZiA9IDI0MjJNSHoKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIDB4MDNFN0MwMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXICAvLyBjaGFubmVsID0gMTQsIFRmID0gMjQxMk0KICAgICB9OwogCi1jb25zdCBEV09SRCBkd0FMMjIzMENoYW5uZWxUYWJsZTFbQ0JfTUFYX0NIQU5ORUxdID0geworY29uc3QgdW5zaWduZWQgbG9uZyBkd0FMMjIzMENoYW5uZWxUYWJsZTFbQ0JfTUFYX0NIQU5ORUxdID0gewogICAgIDB4MDMzMzMxMDArKEJZX0FMMjIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gMSwgVGYgPSAyNDEyTUh6CiAgICAgMHgwQjMzMzEwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAyLCBUZiA9IDI0MTdNSHoKICAgICAweDAzMzMzMTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9IDMsIFRmID0gMjQyMk1IegpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgMHgwNjY2NjEwMCsoQllfQUwyMjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cgIC8vIGNoYW5uZWwgPSAxNCwgVGYgPSAyNDEyTQogICAgIH07CiAKLURXT1JEIGR3QUwyMjMwUG93ZXJUYWJsZVtBTDIyMzBfUFdSX0lEWF9MRU5dID0gewordW5zaWduZWQgbG9uZyBkd0FMMjIzMFBvd2VyVGFibGVbQUwyMjMwX1BXUl9JRFhfTEVOXSA9IHsKICAgICAweDA0MDQwOTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywKICAgICAweDA0MDQxOTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywKICAgICAweDA0MDQyOTAwKyhCWV9BTDIyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywKQEAgLTIxNiw3ICsyMTYsNyBAQAogLy97eyBSb2JlcnRZdToyMDA1MDEwNAogLy8gNDBNSHogcmVmZXJlbmNlIGZyZXF1ZW5jeQogLy8gTmVlZCB0byBQdWxsIFBMTE9OKFBFMykgbG93IHdoZW4gd3JpdGluZyBjaGFubmVsIHJlZ2lzdGVycyB0aHJvdWdoIDMtd2lyZS4KLWNvbnN0IERXT1JEIGR3QUw3MjMwSW5pdFRhYmxlW0NCX0FMNzIzMF9JTklUX1NFUV0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUw3MjMwSW5pdFRhYmxlW0NCX0FMNzIzMF9JTklUX1NFUV0gPSB7CiAgICAgMHgwMDM3OTAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIENoYW5uZWwxIC8vIE5lZWQgbW9kaWZ5IGZvciAxMWEKICAgICAweDEzMzMzMTAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gQ2hhbm5lbDEgLy8gTmVlZCBtb2RpZnkgZm9yIDExYQogICAgIDB4ODQxRkYyMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhOiA0NTFGRTIKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIDB4MUFCQThGMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXICAvLyBOZWVkIG1vZGlmeSBmb3IgMTFhOiAxMkJBQ0YKICAgICB9OwogCi1jb25zdCBEV09SRCBkd0FMNzIzMEluaXRUYWJsZUFNb2RlW0NCX0FMNzIzMF9JTklUX1NFUV0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUw3MjMwSW5pdFRhYmxlQU1vZGVbQ0JfQUw3MjMwX0lOSVRfU0VRXSA9IHsKICAgICAweDBGRjUyMDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gQ2hhbm5lbDE4NCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFiL2cKICAgICAweDAwMDAwMTAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gQ2hhbm5lbDE4NCAvLyBOZWVkIG1vZGlmeSBmb3IgMTFiL2cKICAgICAweDQ1MUZFMjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gTmVlZCBtb2RpZnkgZm9yIDExYi9nCkBAIC0yNTksNyArMjU5LDcgQEAKICAgICB9OwogCiAKLWNvbnN0IERXT1JEIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMFtDQl9NQVhfQ0hBTk5FTF0gPSB7Citjb25zdCB1bnNpZ25lZCBsb25nIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMFtDQl9NQVhfQ0hBTk5FTF0gPSB7CiAgICAgMHgwMDM3OTAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMSwgVGYgPSAyNDEyTUh6CiAgICAgMHgwMDM3OTAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMiwgVGYgPSAyNDE3TUh6CiAgICAgMHgwMDM3OTAwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1csIC8vIGNoYW5uZWwgPSAgMywgVGYgPSAyNDIyTUh6CkBAIC0zMjUsNyArMzI1LDcgQEAKICAgICAweDBGRjYxMDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyAgLy8gY2hhbm5lbCA9IDE2NSwgVGYgPSA1ODI1TUh6ICg1NikKICAgICB9OwogCi1jb25zdCBEV09SRCBkd0FMNzIzMENoYW5uZWxUYWJsZTFbQ0JfTUFYX0NIQU5ORUxdID0geworY29uc3QgdW5zaWduZWQgbG9uZyBkd0FMNzIzMENoYW5uZWxUYWJsZTFbQ0JfTUFYX0NIQU5ORUxdID0gewogICAgIDB4MTMzMzMxMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDEsIFRmID0gMjQxMk1IegogICAgIDB4MUIzMzMxMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDIsIFRmID0gMjQxN01IegogICAgIDB4MDMzMzMxMDArKEJZX0FMNzIzMF9SRUdfTEVOPDwzKStJRlJFR0NUTF9SRUdXLCAvLyBjaGFubmVsID0gIDMsIFRmID0gMjQyMk1IegpAQCAtMzg5LDcgKzM4OSw3IEBACiAgICAgMHgwMkFBQTEwMCsoQllfQUw3MjMwX1JFR19MRU48PDMpK0lGUkVHQ1RMX1JFR1cgIC8vIGNoYW5uZWwgPSAxNjUsIFRmID0gNTgyNU1IeiAoNTYpCiAgICAgfTsKIAotY29uc3QgRFdPUkQgZHdBTDcyMzBDaGFubmVsVGFibGUyW0NCX01BWF9DSEFOTkVMXSA9IHsKK2NvbnN0IHVuc2lnbmVkIGxvbmcgZHdBTDcyMzBDaGFubmVsVGFibGUyW0NCX01BWF9DSEFOTkVMXSA9IHsKICAgICAweDdGRDc4NDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAxLCBUZiA9IDI0MTJNSHoKICAgICAweDdGRDc4NDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAyLCBUZiA9IDI0MTdNSHoKICAgICAweDdGRDc4NDAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVywgLy8gY2hhbm5lbCA9ICAzLCBUZiA9IDI0MjJNSHoKQEAgLTQ3MSwxNSArNDcxLDE1IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBzX2JBTDcyMzBJbml0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIHNfYkFMNzIzMEluaXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7CiAgICAgaW50ICAgICBpaTsKLSAgICBCT09MICAgIGJSZXN1bHQ7CisgICAgYm9vbCBiUmVzdWx0OwogCi0gICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYlJlc3VsdCA9IHRydWU7CiAKICAgICAvLzMtd2lyZSBjb250cm9sIGZvciBub3JtYWwgbW9kZQogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfU09GVFBXUkNUTCwgMCk7CkBAIC01MTcsMTEgKzUxNywxMSBAQAogfQogCiAvLyBOZWVkIHRvIFB1bGwgUExMT04gbG93IHdoZW4gd3JpdGluZyBjaGFubmVsIHJlZ2lzdGVycyB0aHJvdWdoIDMtd2lyZSBpbnRlcmZhY2UKLUJPT0wgc19iQUw3MjMwU2VsZWN0Q2hhbm5lbCAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q2hhbm5lbCkKK2Jvb2wgc19iQUw3MjMwU2VsZWN0Q2hhbm5lbCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNoYW5uZWwpCiB7Ci0gICAgQk9PTCAgICBiUmVzdWx0OworICAgIGJvb2wgYlJlc3VsdDsKIAotICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgLy8gUExMT04gT2ZmCiAgICAgTUFDdldvcmRSZWdCaXRzT2ZmKGR3SW9CYXNlLCBNQUNfUkVHX1NPRlRQV1JDVEwsIFNPRlRQV1JDVExfU1dQRTMpOwpAQCAtNTUyLDcgKzU1Miw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC01NjcsNyArNTY3LDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKQEAgLTU4NSw3ICs1ODUsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtNTk5LDcgKzU5OSw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC02MTksMTMgKzYxOSwxMyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgSUZSRmJXcml0ZUVtYmVkZWQgKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdEYXRhKQorYm9vbCBJRlJGYldyaXRlRW1iZWRlZCAodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgbG9uZyBkd0RhdGEpCiB7Ci0gICAgV09SRCAgICB3dzsKLSAgICBEV09SRCAgIGR3VmFsdWU7CisgICAgdW5zaWduZWQgc2hvcnQgd3c7CisgICAgdW5zaWduZWQgbG9uZyBkd1ZhbHVlOwogCiAgICAgVk5Tdk91dFBvcnREKGR3SW9CYXNlICsgTUFDX1JFR19JRlJFR0NUTCwgZHdEYXRhKTsKIApAQCAtNjM4LDkgKzYzOCw5IEBACiAKICAgICBpZiAod3cgPT0gV19NQVhfVElNRU9VVCkgewogLy8gICAgICAgIERCR19QT1JUODBfQUxXQVlTKDB4MzIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtNjU0LDcgKzY1NCw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC02NjgsNyArNjY4LDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKQEAgLTY4MSwxNSArNjgxLDE1IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBSRmJBTDIyMzBJbml0IChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIFJGYkFMMjIzMEluaXQgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UpCiB7CiAgICAgaW50ICAgICBpaTsKLSAgICBCT09MICAgIGJSZXN1bHQ7CisgICAgYm9vbCBiUmVzdWx0OwogCi0gICAgYlJlc3VsdCA9IFRSVUU7CisgICAgYlJlc3VsdCA9IHRydWU7CiAKICAgICAvLzMtd2lyZSBjb250cm9sIGZvciBub3JtYWwgbW9kZQogICAgIFZOU3ZPdXRQb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfU09GVFBXUkNUTCwgMCk7CkBAIC03MzQsMTEgKzczNCwxMSBAQAogICAgIHJldHVybiBiUmVzdWx0OwogfQogCi1CT09MIFJGYkFMMjIzMFNlbGVjdENoYW5uZWwgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNoYW5uZWwpCitib29sIFJGYkFMMjIzMFNlbGVjdENoYW5uZWwgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsKQogewotICAgIEJPT0wgICAgYlJlc3VsdDsKKyAgICBib29sIGJSZXN1bHQ7CiAKLSAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICBiUmVzdWx0ID0gdHJ1ZTsKIAogICAgIGJSZXN1bHQgJj0gSUZSRmJXcml0ZUVtYmVkZWQgKGR3SW9CYXNlLCBkd0FMMjIzMENoYW5uZWxUYWJsZTBbYnlDaGFubmVsLTFdKTsKICAgICBiUmVzdWx0ICY9IElGUkZiV3JpdGVFbWJlZGVkIChkd0lvQmFzZSwgZHdBTDIyMzBDaGFubmVsVGFibGUxW2J5Q2hhbm5lbC0xXSk7CkBAIC03NjEsNyArNzYxLDcgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCiAKQEAgLTc3Niw3ICs3NzYsNyBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIApAQCAtNzkwLDcgKzc5MCw3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwogCkBAIC04MDQsMTQgKzgwNCwxNCBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KLUJPT0wgUkZiSW5pdCAoCitib29sIFJGYkluaXQgKAogICAgIFBTRGV2aWNlICBwRGV2aWNlCiAgICAgKQogewotQk9PTCAgICBiUmVzdWx0ID0gVFJVRTsKK2Jvb2wgYlJlc3VsdCA9IHRydWU7CiAgICAgc3dpdGNoIChwRGV2aWNlLT5ieVJGVHlwZSkgewogICAgICAgICBjYXNlIFJGX0FJUk9IQSA6CiAgICAgICAgIGNhc2UgUkZfQUwyMjMwUzoKQEAgLTgyMywxMCArODIzLDEwIEBACiAgICAgICAgICAgICBiUmVzdWx0ID0gc19iQUw3MjMwSW5pdChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJGX05PVEhJTkcgOgotICAgICAgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgIGJSZXN1bHQgPSBGQUxTRTsKKyAgICAgICAgICAgIGJSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gYlJlc3VsdDsKQEAgLTg0MiwyMSArODQyLDIxIEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBSRmJTaHV0RG93biAoCitib29sIFJGYlNodXREb3duICgKICAgICBQU0RldmljZSAgcERldmljZQogICAgICkKIHsKLUJPT0wgICAgYlJlc3VsdCA9IFRSVUU7Citib29sIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgc3dpdGNoIChwRGV2aWNlLT5ieVJGVHlwZSkgewogICAgICAgICBjYXNlIFJGX0FJUk9IQTcyMzAgOgogICAgICAgICAgICAgYlJlc3VsdCA9IElGUkZiV3JpdGVFbWJlZGVkIChwRGV2aWNlLT5Qb3J0T2Zmc2V0LCAweDFBQkFFRjAwKyhCWV9BTDcyMzBfUkVHX0xFTjw8MykrSUZSRUdDVExfUkVHVyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICBiUmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgIGJSZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBiUmVzdWx0OwpAQCAtODcyLDEyICs4NzIsMTIgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIFJGYlNlbGVjdENoYW5uZWwgKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieVJGVHlwZSwgQllURSBieUNoYW5uZWwpCitib29sIFJGYlNlbGVjdENoYW5uZWwgKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSRlR5cGUsIHVuc2lnbmVkIGNoYXIgYnlDaGFubmVsKQogewotQk9PTCAgICBiUmVzdWx0ID0gVFJVRTsKK2Jvb2wgYlJlc3VsdCA9IHRydWU7CiAgICAgc3dpdGNoIChieVJGVHlwZSkgewogCiAgICAgICAgIGNhc2UgUkZfQUlST0hBIDoKQEAgLTg5MCwxMCArODkwLDEwIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgLy99fSBSb2JlcnRZdQogICAgICAgICBjYXNlIFJGX05PVEhJTkcgOgotICAgICAgICAgICAgYlJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYlJlc3VsdCA9IEZBTFNFOworICAgICAgICAgICAgYlJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBiUmVzdWx0OwpAQCAtOTExLDExICs5MTEsMTEgQEAKICAqIFJldHVybiBWYWx1ZTogTm9uZS4KICAqCiAgKi8KLUJPT0wgUkZ2V3JpdGVXYWtlUHJvZ1N5biAoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5UkZUeXBlLCBVSU5UIHVDaGFubmVsKQorYm9vbCBSRnZXcml0ZVdha2VQcm9nU3luICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlLCB1bnNpZ25lZCBpbnQgdUNoYW5uZWwpCiB7CiAgICAgaW50ICAgaWk7Ci0gICAgQllURSAgYnlJbml0Q291bnQgPSAwOwotICAgIEJZVEUgIGJ5U2xlZXBDb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieUluaXRDb3VudCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieVNsZWVwQ291bnQgPSAwOwogCiAgICAgVk5Tdk91dFBvcnRXKGR3SW9CYXNlICsgTUFDX1JFR19NSVNDRkZOREVYLCAwKTsKICAgICBzd2l0Y2ggKGJ5UkZUeXBlKSB7CkBAIC05MjMsMjAgKzkyMywyMCBAQAogICAgICAgICBjYXNlIFJGX0FMMjIzMFM6CiAKICAgICAgICAgICAgIGlmICh1Q2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBieUluaXRDb3VudCA9IENCX0FMMjIzMF9JTklUX1NFUSArIDI7IC8vIEluaXQgUmVnICsgQ2hhbm5lbCBSZWcgKDIpCiAgICAgICAgICAgICBieVNsZWVwQ291bnQgPSAwOwogICAgICAgICAgICAgaWYgKGJ5SW5pdENvdW50ID4gKE1JU0NGSUZPX1NZTkRBVEFTSVpFIC0gYnlTbGVlcENvdW50KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IENCX0FMMjIzMF9JTklUX1NFUTsgaWkrKyApIHsKLSAgICAgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIChXT1JEKShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDIyMzBJbml0VGFibGVbaWldKTsKKyAgICAgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwSW5pdFRhYmxlW2lpXSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIChXT1JEKShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDIyMzBDaGFubmVsVGFibGUwW3VDaGFubmVsLTFdKTsKKyAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDIyMzBDaGFubmVsVGFibGUwW3VDaGFubmVsLTFdKTsKICAgICAgICAgICAgIGlpICsrOwotICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMVt1Q2hhbm5lbC0xXSk7CisgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUwyMjMwQ2hhbm5lbFRhYmxlMVt1Q2hhbm5lbC0xXSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvL3t7IFJvYmVydFl1OiAyMDA1MDEwNApAQCAtOTQ1LDQyICs5NDUsNDIgQEAKICAgICAgICAgICAgIGJ5SW5pdENvdW50ID0gQ0JfQUw3MjMwX0lOSVRfU0VRICsgMzsgLy8gSW5pdCBSZWcgKyBDaGFubmVsIFJlZyAoMykKICAgICAgICAgICAgIGJ5U2xlZXBDb3VudCA9IDA7CiAgICAgICAgICAgICBpZiAoYnlJbml0Q291bnQgPiAoTUlTQ0ZJRk9fU1lOREFUQVNJWkUgLSBieVNsZWVwQ291bnQpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVDaGFubmVsIDw9IENCX01BWF9DSEFOTkVMXzI0RykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBDQl9BTDcyMzBfSU5JVF9TRVE7IGlpKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKFdPUkQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZVtpaV0pOworICAgICAgICAgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwSW5pdFRhYmxlW2lpXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IENCX0FMNzIzMF9JTklUX1NFUTsgaWkrKyApIHsKLSAgICAgICAgICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwSW5pdFRhYmxlQU1vZGVbaWldKTsKKyAgICAgICAgICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMEluaXRUYWJsZUFNb2RlW2lpXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIChXT1JEKShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBDaGFubmVsVGFibGUwW3VDaGFubmVsLTFdKTsKKyAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKHVuc2lnbmVkIHNob3J0KShNSVNDRklGT19TWU5EQVRBX0lEWCArIGlpKSwgZHdBTDcyMzBDaGFubmVsVGFibGUwW3VDaGFubmVsLTFdKTsKICAgICAgICAgICAgIGlpICsrOwotICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAoV09SRCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMVt1Q2hhbm5lbC0xXSk7CisgICAgICAgICAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsICh1bnNpZ25lZCBzaG9ydCkoTUlTQ0ZJRk9fU1lOREFUQV9JRFggKyBpaSksIGR3QUw3MjMwQ2hhbm5lbFRhYmxlMVt1Q2hhbm5lbC0xXSk7CiAgICAgICAgICAgICBpaSArKzsKLSAgICAgICAgICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgKFdPUkQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMENoYW5uZWxUYWJsZTJbdUNoYW5uZWwtMV0pOworICAgICAgICAgICAgTUFDdlNldE1JU0NGaWZvKGR3SW9CYXNlLCAodW5zaWduZWQgc2hvcnQpKE1JU0NGSUZPX1NZTkRBVEFfSURYICsgaWkpLCBkd0FMNzIzMENoYW5uZWxUYWJsZTJbdUNoYW5uZWwtMV0pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIC8vfX0gUm9iZXJ0WXUKIAogICAgICAgICBjYXNlIFJGX05PVEhJTkcgOgotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBNQUN2U2V0TUlTQ0ZpZm8oZHdJb0Jhc2UsIE1JU0NGSUZPX1NZTklORk9fSURYLCAoRFdPUkQpTUFLRVdPUkQoYnlTbGVlcENvdW50LCBieUluaXRDb3VudCkpOworICAgIE1BQ3ZTZXRNSVNDRmlmbyhkd0lvQmFzZSwgTUlTQ0ZJRk9fU1lOSU5GT19JRFgsICh1bnNpZ25lZCBsb25nIClNQUtFV09SRChieVNsZWVwQ291bnQsIGJ5SW5pdENvdW50KSk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTk5MywyNSArOTkzLDI1IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHN1Y2NlZWRlZDsgRkFMU0UgaWYgZmFpbGVkLgorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHN1Y2NlZWRlZDsgZmFsc2UgaWYgZmFpbGVkLgogICoKICAqLwotQk9PTCBSRmJTZXRQb3dlciAoCitib29sIFJGYlNldFBvd2VyICgKICAgICBQU0RldmljZSAgcERldmljZSwKLSAgICBVSU5UICAgICAgdVJBVEUsCi0gICAgVUlOVCAgICAgIHVDSAorICAgIHVuc2lnbmVkIGludCB1UkFURSwKKyAgICB1bnNpZ25lZCBpbnQgdUNICiAgICAgKQogewotQk9PTCAgICBiUmVzdWx0ID0gVFJVRTsKLUJZVEUgICAgYnlQd3IgPSAwOwotQllURSAgICBieURlYyA9IDA7Ci1CWVRFICAgIGJ5UHdyZEJtID0gMDsKK2Jvb2wgYlJlc3VsdCA9IHRydWU7Cit1bnNpZ25lZCBjaGFyIGJ5UHdyID0gMDsKK3Vuc2lnbmVkIGNoYXIgYnlEZWMgPSAwOwordW5zaWduZWQgY2hhciBieVB3cmRCbSA9IDA7CiAKICAgICBpZiAocERldmljZS0+ZHdEaWFnUmVmQ291bnQgIT0gMCkgewotICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICgodUNIIDwgMSkgfHwgKHVDSCA+IENCX01BWF9DSEFOTkVMKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHVSQVRFKSB7CkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogI2lmIDAKIAogICAgIC8vIDgwMi4xMWggVFBDCi0gICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSBUUlVFKSB7CisgICAgaWYgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSB7CiAgICAgICAgIC8vIGRvIG5vdCBvdmVyIGxvY2FsIGNvbnN0cmFpbnQKICAgICAgICAgaWYgKGJ5UHdyZEJtID4gcERldmljZS0+YWJ5TG9jYWxQd3JbdUNIXSkgewogICAgICAgICAgICAgcERldmljZS0+YnlDdXJQd3JkQm0gPSBwRGV2aWNlLT5hYnlMb2NhbFB3clt1Q0hdOwpAQCAtMTExMSwxMSArMTExMSwxMSBAQAogCiAvLyAgICBpZiAocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQjEpIHsKICAgICBpZiAocERldmljZS0+YnlDdXJQd3IgPT0gYnlQd3IpIHsKLSAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBiUmVzdWx0ID0gUkZiUmF3U2V0UG93ZXIocERldmljZSwgYnlQd3IsIHVSQVRFKTsKIC8vICAgIH0KLSAgICBpZiAoYlJlc3VsdCA9PSBUUlVFKSB7CisgICAgaWYgKGJSZXN1bHQgPT0gdHJ1ZSkgewogICAgICAgIHBEZXZpY2UtPmJ5Q3VyUHdyID0gYnlQd3I7CiAgICAgfQogICAgIHJldHVybiBiUmVzdWx0OwpAQCAtMTEzMSwyMSArMTEzMSwyMSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZWVkZWQ7IEZBTFNFIGlmIGZhaWxlZC4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZWVkZWQ7IGZhbHNlIGlmIGZhaWxlZC4KICAqCiAgKi8KIAotQk9PTCBSRmJSYXdTZXRQb3dlciAoCitib29sIFJGYlJhd1NldFBvd2VyICgKICAgICBQU0RldmljZSAgcERldmljZSwKLSAgICBCWVRFICAgICAgYnlQd3IsCi0gICAgVUlOVCAgICAgIHVSQVRFCisgICAgdW5zaWduZWQgY2hhciBieVB3ciwKKyAgICB1bnNpZ25lZCBpbnQgdVJBVEUKICAgICApCiB7Ci1CT09MICAgIGJSZXN1bHQgPSBUUlVFOwotRFdPUkQgICBkd01heDcyMzBQd3IgPSAwOworYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKK3Vuc2lnbmVkIGxvbmcgZHdNYXg3MjMwUHdyID0gMDsKIAogICAgIGlmIChieVB3ciA+PSAgcERldmljZS0+YnlNYXhQd3JMZXZlbCkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKIApAQCAtMTIwNCwxNCArMTIwNCwxNCBAQAogdm9pZAogUkZ2UlNTSVRvZEJtICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgICAgIGJ5Q3VyclJTU0ksCisgICAgdW5zaWduZWQgY2hhciBieUN1cnJSU1NJLAogICAgIGxvbmcgKiAgICBwbGRCbQogICAgICkKIHsKLSAgICBCWVRFIGJ5SWR4ID0gKCgoYnlDdXJyUlNTSSAmIDB4QzApID4+IDYpICYgMHgwMyk7Ci0gICAgTE9ORyBiID0gKGJ5Q3VyclJTU0kgJiAweDNGKTsKLSAgICBMT05HIGEgPSAwOwotICAgIEJZVEUgYWJ5QUlST0hBUkZbNF0gPSB7MCwgMTgsIDAsIDQwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SWR4ID0gKCgoYnlDdXJyUlNTSSAmIDB4QzApID4+IDYpICYgMHgwMyk7CisgICAgbG9uZyBiID0gKGJ5Q3VyclJTU0kgJiAweDNGKTsKKyAgICBsb25nIGEgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5QUlST0hBUkZbNF0gPSB7MCwgMTgsIDAsIDQwfTsKIAogICAgIHN3aXRjaCAocERldmljZS0+YnlSRlR5cGUpIHsKICAgICAgICAgY2FzZSBSRl9BSVJPSEE6CkBAIC0xMjMyLDExICsxMjMyLDExIEBACiAKIC8vIFBvc3QgcHJvY2Vzc2luZyBmb3IgdGhlIDExYi9nIGFuZCAxMWEuCiAvLyBmb3Igc2F2ZSB0aW1lIG9uIGNoYW5naW5nIFJlZzIsMyw1LDcsMTAsMTIsMTUKLUJPT0wgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzIChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlPbGRDaGFubmVsLCBCWVRFIGJ5TmV3Q2hhbm5lbCkKK2Jvb2wgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5T2xkQ2hhbm5lbCwgdW5zaWduZWQgY2hhciBieU5ld0NoYW5uZWwpCiB7Ci0gICAgQk9PTCAgICBiUmVzdWx0OworICAgIGJvb2wgYlJlc3VsdDsKIAotICAgIGJSZXN1bHQgPSBUUlVFOworICAgIGJSZXN1bHQgPSB0cnVlOwogCiAgICAgLy8gaWYgY2hhbmdlIGJldHdlZW4gMTEgYi9nIGFuZCAxMWEgbmVlZCB0byB1cGRhdGUgdGhlIGZvbGxvd2luZyByZWdpc3RlcgogICAgIC8vIENoYW5uZWwgSW5kZXggMX4xNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yZi5oCmluZGV4IDI1ZGZjNzkuLjFmOGQ4MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcmYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3JmLmgKQEAgLTc2LDI4ICs3NiwyOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1CT09MIElGUkZiV3JpdGVFbWJlZGVkKERXT1JEX1BUUiBkd0lvQmFzZSwgRFdPUkQgZHdEYXRhKTsKLUJPT0wgUkZiU2VsZWN0Q2hhbm5lbChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSRlR5cGUsIEJZVEUgYnlDaGFubmVsKTsKLUJPT0wgUkZiSW5pdCAoCitib29sIElGUkZiV3JpdGVFbWJlZGVkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgZHdEYXRhKTsKK2Jvb2wgUkZiU2VsZWN0Q2hhbm5lbCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5UkZUeXBlLCB1bnNpZ25lZCBjaGFyIGJ5Q2hhbm5lbCk7Citib29sIFJGYkluaXQgKAogICAgIFBTRGV2aWNlICBwRGV2aWNlCiAgICAgKTsKLUJPT0wgUkZ2V3JpdGVXYWtlUHJvZ1N5bihEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlSRlR5cGUsIFVJTlQgdUNoYW5uZWwpOwotQk9PTCBSRmJTZXRQb3dlcihQU0RldmljZSBwRGV2aWNlLCBVSU5UIHVSQVRFLCBVSU5UIHVDSCk7Ci1CT09MIFJGYlJhd1NldFBvd2VyKAorYm9vbCBSRnZXcml0ZVdha2VQcm9nU3luKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlSRlR5cGUsIHVuc2lnbmVkIGludCB1Q2hhbm5lbCk7Citib29sIFJGYlNldFBvd2VyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1UkFURSwgdW5zaWduZWQgaW50IHVDSCk7Citib29sIFJGYlJhd1NldFBvd2VyKAogICAgIFBTRGV2aWNlICBwRGV2aWNlLAotICAgIEJZVEUgICAgICBieVB3ciwKLSAgICBVSU5UICAgICAgdVJBVEUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UHdyLAorICAgIHVuc2lnbmVkIGludCB1UkFURQogICAgICk7CiAKIHZvaWQKIFJGdlJTU0lUb2RCbSgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIEJZVEUgICAgIGJ5Q3VyclJTU0ksCisgICAgdW5zaWduZWQgY2hhciBieUN1cnJSU1NJLAogICAgIGxvbmcgICAgKnBsZEJtCiAgICAgKTsKIAogLy97eyBSb2JlcnRZdTogMjAwNTAxMDQKLUJPT0wgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieU9sZENoYW5uZWwsIEJZVEUgYnlOZXdDaGFubmVsKTsKK2Jvb2wgUkZiQUw3MjMwU2VsZWN0Q2hhbm5lbFBvc3RQcm9jZXNzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlPbGRDaGFubmVsLCB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbCk7CiAvL319IFJvYmVydFl1CiAKICNlbmRpZiAvLyBfX1JGX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYwppbmRleCBhMDQ0NWMzLi5jOTIwY2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3J4dHguYwpAQCAtODAsMTYgKzgwLDE2IEBACiAjZGVmaW5lIENSSVRJQ0FMX1BBQ0tFVF9MRU4gICAgICAyNTYgICAgLy8gaWYgcGFja2V0IHNpemUgPCAyNTYgLT4gaW4tZGlyZWN0IHNlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBwYWNrZXQgc2l6ZSA+PSAyNTYgLT4gZGlyZWN0IHNlbmQKIAotY29uc3QgV09SRCB3VGltZVN0YW1wT2ZmWzJdW01BWF9SQVRFXSA9IHsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IHdUaW1lU3RhbXBPZmZbMl1bTUFYX1JBVEVdID0gewogICAgICAgICB7Mzg0LCAyODgsIDIyNiwgMjA5LCA1NCwgNDMsIDM3LCAzMSwgMjgsIDI1LCAyNCwgMjN9LCAvLyBMb25nIFByZWFtYmxlCiAgICAgICAgIHszODQsIDE5MiwgMTMwLCAxMTMsIDU0LCA0MywgMzcsIDMxLCAyOCwgMjUsIDI0LCAyM30sIC8vIFNob3J0IFByZWFtYmxlCiAgICAgfTsKIAotY29uc3QgV09SRCB3RkJfT3B0MFsyXVs1XSA9IHsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IHdGQl9PcHQwWzJdWzVdID0gewogICAgICAgICB7UkFURV8xMk0sIFJBVEVfMThNLCBSQVRFXzI0TSwgUkFURV8zNk0sIFJBVEVfNDhNfSwgLy8gZmFsbGJhY2tfcmF0ZTAKICAgICAgICAge1JBVEVfMTJNLCBSQVRFXzEyTSwgUkFURV8xOE0sIFJBVEVfMjRNLCBSQVRFXzM2TX0sIC8vIGZhbGxiYWNrX3JhdGUxCiAgICAgfTsKLWNvbnN0IFdPUkQgd0ZCX09wdDFbMl1bNV0gPSB7Citjb25zdCB1bnNpZ25lZCBzaG9ydCB3RkJfT3B0MVsyXVs1XSA9IHsKICAgICAgICAge1JBVEVfMTJNLCBSQVRFXzE4TSwgUkFURV8yNE0sIFJBVEVfMjRNLCBSQVRFXzM2TX0sIC8vIGZhbGxiYWNrX3JhdGUwCiAgICAgICAgIHtSQVRFXzZNICwgUkFURV82TSwgIFJBVEVfMTJNLCBSQVRFXzEyTSwgUkFURV8xOE19LCAvLyBmYWxsYmFja19yYXRlMQogICAgIH07CkBAIC0xMTgsMTIgKzExOCwxMiBAQAogdm9pZAogc192RmlsbFR4S2V5KAogICAgIFBTRGV2aWNlICAgcERldmljZSwKLSAgICBQQllURSAgICAgIHBieUJ1ZiwKLSAgICBQQllURSAgICAgIHBieUlWSGVhZCwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWYsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5SVZIZWFkLAogICAgIFBTS2V5SXRlbSAgcFRyYW5zbWl0S2V5LAotICAgIFBCWVRFICAgICAgcGJ5SGRyQnVmLAotICAgIFdPUkQgICAgICAgd1BheWxvYWRMZW4sCi0gICAgUEJZVEUgICAgICBwTUlDSERSCisgICAgdW5zaWduZWQgY2hhciAqcGJ5SGRyQnVmLAorICAgIHVuc2lnbmVkIHNob3J0IHdQYXlsb2FkTGVuLAorICAgIHVuc2lnbmVkIGNoYXIgKnBNSUNIRFIKICAgICApOwogCiAKQEAgLTEzMiw3NiArMTMyLDY1IEBACiB2b2lkCiBzX3ZGaWxsUlRTSGVhZCgKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCiAgICAgdm9pZCAqICAgICAgICAgICBwdlJUUywKLSAgICBVSU5UICAgICAgICAgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgQk9PTCAgICAgICAgICAgICBiTmVlZEFjaywKLSAgICBCT09MICAgICAgICAgICAgIGJEaXNDUkMsCisgICAgdW5zaWduZWQgaW50CWNiRnJhbWVMZW5ndGgsCisgICAgYm9vbCBiTmVlZEFjaywKKyAgICBib29sIGJEaXNDUkMsCiAgICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwKLSAgICBXT1JEICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5RkJPcHRpb24KKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUsCisgICAgdW5zaWduZWQgY2hhciBieUZCT3B0aW9uCiAgICAgKTsKIAogc3RhdGljCiB2b2lkCiBzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyKAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBCWVRFICAgICAgICAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgICAgICAgICAgcFR4QnVmSGVhZCwKICAgICB2b2lkICogICAgICAgICAgIHB2UnJ2VGltZSwKICAgICB2b2lkICogICAgICAgICAgIHB2UlRTLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZDVFMsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lU2l6ZSwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkQUNLLAotICAgIFVJTlQgICAgICAgICAgICAgdURNQUlkeCwKKyAgICB1bnNpZ25lZCBpbnQJY2JGcmFtZVNpemUsCisgICAgYm9vbCBiTmVlZEFDSywKKyAgICB1bnNpZ25lZCBpbnQJdURNQUlkeCwKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFdPUkQgICAgICAgICAgICAgd0N1cnJlbnRSYXRlCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlCiAgICAgKTsKIAogCiAKIHN0YXRpYyB2b2lkIHNfdkZpbGxGcmFnUGFyYW1ldGVyKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgcGJ5QnVmZmVyLAotICAgIFVJTlQgICAgIHVUeFR5cGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyLAorICAgIHVuc2lnbmVkIGludAl1VHhUeXBlLAogICAgIHZvaWQgKiAgIHB2dGRDdXJyLAotICAgIFdPUkQgICAgIHdGcmFnVHlwZSwKLSAgICBVSU5UICAgICBjYlJlcUNvdW50CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlLAorICAgIHVuc2lnbmVkIGludAljYlJlcUNvdW50CiAgICAgKTsKIAogCi1zdGF0aWMKLVVJTlQKLXNfY2JGaWxsVHhCdWZIZWFkICgKLSAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cGUsCi0gICAgUEJZVEUgICAgICAgICAgICBwYnlUeEJ1ZmZlckFkZHIsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lQm9keVNpemUsCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAotICAgIFBTVHhEZXNjICAgICAgICAgcEhlYWRURCwKLSAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIFBCWVRFICAgICAgICAgICAgcFBhY2tldCwKLSAgICBCT09MICAgICAgICAgICAgIGJOZWVkRW5jcnlwdCwKLSAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIHVOb2RlSW5kZXgsCi0gICAgUFVJTlQgICAgICAgICAgICBwdU1BQ2ZyYWdOdW0KLSAgICApOworc3RhdGljIHVuc2lnbmVkIGludAorc19jYkZpbGxUeEJ1ZkhlYWQoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsIHVuc2lnbmVkIGNoYXIgKnBieVR4QnVmZmVyQWRkciwKKwl1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplLCB1bnNpZ25lZCBpbnQgdURNQUlkeCwgUFNUeERlc2MgcEhlYWRURCwKKwlQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLCB1bnNpZ25lZCBjaGFyICpwUGFja2V0LCBib29sIGJOZWVkRW5jcnlwdCwKKwlQU0tleUl0ZW0gcFRyYW5zbWl0S2V5LCB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCwgdW5zaWduZWQgaW50ICpwdU1BQ2ZyYWdOdW0pOwogCiAKIHN0YXRpYwotVUlOVAordW5zaWduZWQgaW50CiBzX3VGaWxsRGF0YUhlYWQgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgIHBUeERhdGFIZWFkLAotICAgIFVJTlQgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgVUlOVCAgICAgdURNQUlkeCwKLSAgICBCT09MICAgICBiTmVlZEFjaywKLSAgICBVSU5UICAgICB1RnJhZ0lkeCwKLSAgICBVSU5UICAgICBjYkxhc3RGcmFnbWVudFNpemUsCi0gICAgVUlOVCAgICAgdU1BQ2ZyYWdOdW0sCi0gICAgQllURSAgICAgYnlGQk9wdGlvbiwKLSAgICBXT1JEICAgICB3Q3VycmVudFJhdGUKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBpbnQgdURNQUlkeCwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeCwKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ21lbnRTaXplLAorICAgIHVuc2lnbmVkIGludCB1TUFDZnJhZ051bSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlCiAgICAgKTsKIAogCkBAIC0yMTMsMjAgKzIwMiwyMCBAQAogdm9pZAogc192RmlsbFR4S2V5ICgKICAgICBQU0RldmljZSAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICBwYnlCdWYsCi0gICAgUEJZVEUgICAgICBwYnlJVkhlYWQsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWSGVhZCwKICAgICBQU0tleUl0ZW0gIHBUcmFuc21pdEtleSwKLSAgICBQQllURSAgICAgIHBieUhkckJ1ZiwKLSAgICBXT1JEICAgICAgIHdQYXlsb2FkTGVuLAotICAgIFBCWVRFICAgICAgcE1JQ0hEUgorICAgIHVuc2lnbmVkIGNoYXIgKnBieUhkckJ1ZiwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UGF5bG9hZExlbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwTUlDSERSCiAgICAgKQogewotICAgIFBEV09SRCAgICAgICAgICBwZHdJViA9IChQRFdPUkQpIHBieUlWSGVhZDsKLSAgICBQRFdPUkQgICAgICAgICAgcGR3RXh0SVYgPSAoUERXT1JEKSAoKFBCWVRFKXBieUlWSGVhZCs0KTsKLSAgICBXT1JEICAgICAgICAgICAgd1ZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgKnBkd0lWID0gKHVuc2lnbmVkIGxvbmcgKikgcGJ5SVZIZWFkOworICAgIHVuc2lnbmVkIGxvbmcgKnBkd0V4dElWID0gKHVuc2lnbmVkIGxvbmcgKikgKCh1bnNpZ25lZCBjaGFyICopcGJ5SVZIZWFkKzQpOworICAgIHVuc2lnbmVkIHNob3J0IHdWYWx1ZTsKICAgICBQUzgwMl8xMUhlYWRlciAgcE1BQ0hlYWRlciA9IChQUzgwMl8xMUhlYWRlcilwYnlIZHJCdWY7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3UmV2SVZDb3VudGVyOwotICAgIEJZVEUgICAgICAgICAgICBieUtleUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGR3UmV2SVZDb3VudGVyOworICAgIHVuc2lnbmVkIGNoYXIgYnlLZXlJbmRleCA9IDA7CiAKIAogCkBAIC0yNDAsMTMgKzIyOSwxMyBAQAogCiAgICAgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1dFUCkgewogICAgICAgICBpZiAocFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoID09IFdMQU5fV0VQMjMyX0tFWUxFTiApewotICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPmFieVBSTkcsIChQQllURSkmKGR3UmV2SVZDb3VudGVyKSwgMyk7CisgICAgICAgICAgICBtZW1jcHkocERldmljZS0+YWJ5UFJORywgKHVuc2lnbmVkIGNoYXIgKikmKGR3UmV2SVZDb3VudGVyKSwgMyk7CiAgICAgICAgICAgICBtZW1jcHkocERldmljZS0+YWJ5UFJORyszLCBwVHJhbnNtaXRLZXktPmFieUtleSwgcFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweShwYnlCdWYsIChQQllURSkmKGR3UmV2SVZDb3VudGVyKSwgMyk7CisgICAgICAgICAgICBtZW1jcHkocGJ5QnVmLCAodW5zaWduZWQgY2hhciAqKSYoZHdSZXZJVkNvdW50ZXIpLCAzKTsKICAgICAgICAgICAgIG1lbWNweShwYnlCdWYrMywgcFRyYW5zbWl0S2V5LT5hYnlLZXksIHBUcmFuc21pdEtleS0+dUtleUxlbmd0aCk7CiAgICAgICAgICAgICBpZihwVHJhbnNtaXRLZXktPnVLZXlMZW5ndGggPT0gV0xBTl9XRVA0MF9LRVlMRU4pIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkocGJ5QnVmKzgsIChQQllURSkmKGR3UmV2SVZDb3VudGVyKSwgMyk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHBieUJ1Zis4LCAodW5zaWduZWQgY2hhciAqKSYoZHdSZXZJVkNvdW50ZXIpLCAzKTsKICAgICAgICAgICAgICAgICBtZW1jcHkocGJ5QnVmKzExLCBwVHJhbnNtaXRLZXktPmFieUtleSwgcFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5hYnlQUk5HLCBwYnlCdWYsIDE2KTsKQEAgLTI3MCw3ICsyNTksNyBAQAogICAgICAgICAvLyBNYWtlIElWCiAgICAgICAgIG1lbWNweShwZHdJViwgcERldmljZS0+YWJ5UFJORywgMyk7CiAKLSAgICAgICAgKihwYnlJVkhlYWQrMykgPSAoQllURSkoKChieUtleUluZGV4IDw8IDYpICYgMHhjMCkgfCAweDIwKTsgLy8gMHgyMCBpcyBFeHRJVgorICAgICAgICAqKHBieUlWSGVhZCszKSA9ICh1bnNpZ25lZCBjaGFyKSgoKGJ5S2V5SW5kZXggPDwgNikgJiAweGMwKSB8IDB4MjApOyAvLyAweDIwIGlzIEV4dElWCiAgICAgICAgIC8vIEFwcGVuZCBJViZFeHRJViBhZnRlciBNYWMgSGVhZGVyCiAgICAgICAgICpwZHdFeHRJViA9IGNwdV90b19sZTMyKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNik7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8idkZpbGxUeEtleSgpLS0tLSBwZHdFeHRJVjogJWx4XG4iLCAqcGR3RXh0SVYpOwpAQCAtMjg0LDMzICsyNzMsMzMgQEAKIAogICAgICAgICAvLyBNYWtlIElWCiAgICAgICAgICpwZHdJViA9IDA7Ci0gICAgICAgICoocGJ5SVZIZWFkKzMpID0gKEJZVEUpKCgoYnlLZXlJbmRleCA8PCA2KSAmIDB4YzApIHwgMHgyMCk7IC8vIDB4MjAgaXMgRXh0SVYKLSAgICAgICAgKnBkd0lWIHw9IGNwdV90b19sZTE2KChXT1JEKShwVHJhbnNtaXRLZXktPndUU0MxNV8wKSk7CisgICAgICAgICoocGJ5SVZIZWFkKzMpID0gKHVuc2lnbmVkIGNoYXIpKCgoYnlLZXlJbmRleCA8PCA2KSAmIDB4YzApIHwgMHgyMCk7IC8vIDB4MjAgaXMgRXh0SVYKKyAgICAgICAgKnBkd0lWIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkocFRyYW5zbWl0S2V5LT53VFNDMTVfMCkpOwogICAgICAgICAvL0FwcGVuZCBJViZFeHRJViBhZnRlciBNYWMgSGVhZGVyCiAgICAgICAgICpwZHdFeHRJViA9IGNwdV90b19sZTMyKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNik7CiAKICAgICAgICAgLy9GaWxsIE1JQ0hEUjAKICAgICAgICAgKnBNSUNIRFIgPSAweDU5OwotICAgICAgICAqKChQQllURSkocE1JQ0hEUisxKSkgPSAwOyAvLyBUeFByaW9yaXR5CisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxKSkgPSAwOyAvLyBUeFByaW9yaXR5CiAgICAgICAgIG1lbWNweShwTUlDSERSKzIsICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pLCA2KTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrOCkpID0gSElCWVRFKEhJV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrOSkpID0gTE9CWVRFKEhJV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTApKSA9IEhJQllURShMT1dPUkQocFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2KSk7Ci0gICAgICAgICooKFBCWVRFKShwTUlDSERSKzExKSkgPSBMT0JZVEUoTE9XT1JEKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNikpOwotICAgICAgICAqKChQQllURSkocE1JQ0hEUisxMikpID0gSElCWVRFKHBUcmFuc21pdEtleS0+d1RTQzE1XzApOwotICAgICAgICAqKChQQllURSkocE1JQ0hEUisxMykpID0gTE9CWVRFKHBUcmFuc21pdEtleS0+d1RTQzE1XzApOwotICAgICAgICAqKChQQllURSkocE1JQ0hEUisxNCkpID0gSElCWVRFKHdQYXlsb2FkTGVuKTsKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTUpKSA9IExPQllURSh3UGF5bG9hZExlbik7CisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUis4KSkgPSBISUJZVEUoSElXT1JEKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNikpOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrOSkpID0gTE9CWVRFKEhJV09SRChwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTYpKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzEwKSkgPSBISUJZVEUoTE9XT1JEKHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNikpOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTEpKSA9IExPQllURShMT1dPUkQocFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2KSk7CisgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxMikpID0gSElCWVRFKHBUcmFuc21pdEtleS0+d1RTQzE1XzApOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTMpKSA9IExPQllURShwVHJhbnNtaXRLZXktPndUU0MxNV8wKTsKKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzE0KSkgPSBISUJZVEUod1BheWxvYWRMZW4pOworICAgICAgICAqKCh1bnNpZ25lZCBjaGFyICopKHBNSUNIRFIrMTUpKSA9IExPQllURSh3UGF5bG9hZExlbik7CiAKICAgICAgICAgLy9GaWxsIE1JQ0hEUjEKLSAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTYpKSA9IDA7IC8vIEhMRU5bMTU6OF0KKyAgICAgICAgKigodW5zaWduZWQgY2hhciAqKShwTUlDSERSKzE2KSkgPSAwOyAvLyBITEVOWzE1OjhdCiAgICAgICAgIGlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikgewotICAgICAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTcpKSA9IDI4OyAvLyBITEVOWzc6MF0KKyAgICAgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNykpID0gMjg7IC8vIEhMRU5bNzowXQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKigoUEJZVEUpKHBNSUNIRFIrMTcpKSA9IDIyOyAvLyBITEVOWzc6MF0KKyAgICAgICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikocE1JQ0hEUisxNykpID0gMjI7IC8vIEhMRU5bNzowXQogICAgICAgICB9CiAgICAgICAgIHdWYWx1ZSA9IGNwdV90b19sZTE2KHBNQUNIZWFkZXItPndGcmFtZUN0bCAmIDB4Qzc4Rik7Ci0gICAgICAgIG1lbWNweShwTUlDSERSKzE4LCAoUEJZVEUpJndWYWx1ZSwgMik7IC8vIE1TS0ZSQUNUTAorICAgICAgICBtZW1jcHkocE1JQ0hEUisxOCwgKHVuc2lnbmVkIGNoYXIgKikmd1ZhbHVlLCAyKTsgLy8gTVNLRlJBQ1RMCiAgICAgICAgIG1lbWNweShwTUlDSERSKzIwLCAmKHBNQUNIZWFkZXItPmFieUFkZHIxWzBdKSwgNik7CiAgICAgICAgIG1lbWNweShwTUlDSERSKzI2LCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSwgNik7CiAKQEAgLTMxOSw3ICszMDgsNyBAQAogICAgICAgICB3VmFsdWUgPSBwTUFDSGVhZGVyLT53U2VxQ3RsOwogICAgICAgICB3VmFsdWUgJj0gMHgwMDBGOwogICAgICAgICB3VmFsdWUgPSBjcHVfdG9fbGUxNih3VmFsdWUpOwotICAgICAgICBtZW1jcHkocE1JQ0hEUiszOCwgKFBCWVRFKSZ3VmFsdWUsIDIpOyAvLyBNU0tTRVFDVEwKKyAgICAgICAgbWVtY3B5KHBNSUNIRFIrMzgsICh1bnNpZ25lZCBjaGFyICopJndWYWx1ZSwgMik7IC8vIE1TS1NFUUNUTAogICAgICAgICBpZiAocERldmljZS0+YkxvbmdIZWFkZXIpIHsKICAgICAgICAgICAgIG1lbWNweShwTUlDSERSKzQwLCAmKHBNQUNIZWFkZXItPmFieUFkZHI0WzBdKSwgNik7CiAgICAgICAgIH0KQEAgLTMzMiwxMyArMzIxLDEzIEBACiBzX3ZTV2VuY3J5cHRpb24gKAogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZSwKICAgICBQU0tleUl0ZW0gICAgICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieVBheWxvYWRIZWFkLAotICAgIFdPUkQgICAgICAgICAgICAgICAgd1BheWxvYWRTaXplCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UGF5bG9hZEhlYWQsCisgICAgdW5zaWduZWQgc2hvcnQgd1BheWxvYWRTaXplCiAgICAgKQogewotICAgIFVJTlQgICBjYklDVmxlbiA9IDQ7Ci0gICAgRFdPUkQgIGR3SUNWID0gMHhGRkZGRkZGRkw7Ci0gICAgUERXT1JEIHBkd0lDVjsKKyAgICB1bnNpZ25lZCBpbnQgY2JJQ1ZsZW4gPSA0OworICAgIHVuc2lnbmVkIGxvbmcgZHdJQ1YgPSAweEZGRkZGRkZGTDsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdJQ1Y7CiAKICAgICBpZiAocFRyYW5zbWl0S2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKQEAgLTM0Nyw3ICszMzYsNyBAQAogICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgIC8vIEFwcGVuZCBJQ1YgYWZ0ZXIgcGF5bG9hZAogICAgICAgICBkd0lDViA9IENSQ2R3R2V0Q3JjMzJFeChwYnlQYXlsb2FkSGVhZCwgd1BheWxvYWRTaXplLCBkd0lDVik7Ly9JQ1YoUGF5bG9hZCkKLSAgICAgICAgcGR3SUNWID0gKFBEV09SRCkocGJ5UGF5bG9hZEhlYWQgKyB3UGF5bG9hZFNpemUpOworICAgICAgICBwZHdJQ1YgPSAodW5zaWduZWQgbG9uZyAqKShwYnlQYXlsb2FkSGVhZCArIHdQYXlsb2FkU2l6ZSk7CiAgICAgICAgIC8vIGZpbmFsbHksIHdlIG11c3QgaW52ZXJ0IGR3Q1JDIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKICAgICAgICAgKnBkd0lDViA9IGNwdV90b19sZTMyKH5kd0lDVik7CiAgICAgICAgIC8vIFJDNCBlbmNyeXB0aW9uCkBAIC0zNTgsNyArMzQ3LDcgQEAKICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAvL0FwcGVuZCBJQ1YgYWZ0ZXIgcGF5bG9hZAogICAgICAgICBkd0lDViA9IENSQ2R3R2V0Q3JjMzJFeChwYnlQYXlsb2FkSGVhZCwgd1BheWxvYWRTaXplLCBkd0lDVik7Ly9JQ1YoUGF5bG9hZCkKLSAgICAgICAgcGR3SUNWID0gKFBEV09SRCkocGJ5UGF5bG9hZEhlYWQgKyB3UGF5bG9hZFNpemUpOworICAgICAgICBwZHdJQ1YgPSAodW5zaWduZWQgbG9uZyAqKShwYnlQYXlsb2FkSGVhZCArIHdQYXlsb2FkU2l6ZSk7CiAgICAgICAgIC8vIGZpbmFsbHksIHdlIG11c3QgaW52ZXJ0IGR3Q1JDIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIKICAgICAgICAgKnBkd0lDViA9IGNwdV90b19sZTMyKH5kd0lDVik7CiAgICAgICAgIC8vIFJDNCBlbmNyeXB0aW9uCkBAIC0zNzcsMjUgKzM2NiwyNSBAQAogICAgICAgICAgICAgIFBLX1RZUEVfMTFHQSAgICAzCiAqLwogc3RhdGljCi1VSU5UCit1bnNpZ25lZCBpbnQKIHNfdUdldFR4UnN2VGltZSAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFICAgICBieVBrdFR5cGUsCi0gICAgVUlOVCAgICAgY2JGcmFtZUxlbmd0aCwKLSAgICBXT1JEICAgICB3UmF0ZSwKLSAgICBCT09MICAgICBiTmVlZEFjaworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIHVuc2lnbmVkIHNob3J0IHdSYXRlLAorICAgIGJvb2wgYk5lZWRBY2sKICAgICApCiB7Ci0gICAgVUlOVCB1RGF0YVRpbWUsIHVBY2tUaW1lOworICAgIHVuc2lnbmVkIGludCB1RGF0YVRpbWUsIHVBY2tUaW1lOwogCiAgICAgdURhdGFUaW1lID0gQkJ1R2V0RnJhbWVUaW1lKHBEZXZpY2UtPmJ5UHJlYW1ibGVUeXBlLCBieVBrdFR5cGUsIGNiRnJhbWVMZW5ndGgsIHdSYXRlKTsKICNpZmRlZglQTElDRV9ERUJVRwogCS8vcHJpbnRrKCJzX3VHZXRUeFJzdlRpbWUgaXMgJWRcbiIsdURhdGFUaW1lKTsKICNlbmRpZgogICAgIGlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUIpIHsvL2xsYixDQ0sgbW9kZQotICAgICAgICB1QWNrVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgKFdPUkQpcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUpOworICAgICAgICB1QWNrVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlKTsKICAgICB9IGVsc2Ugey8vMTFnIDIuNEcgT0ZETSBtb2RlICYgMTFhIDVHIE9GRE0gbW9kZQotICAgICAgICB1QWNrVGltZSA9IEJCdUdldEZyYW1lVGltZShwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSwgYnlQa3RUeXBlLCAxNCwgKFdPUkQpcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlKTsKKyAgICAgICAgdUFja1RpbWUgPSBCQnVHZXRGcmFtZVRpbWUocERldmljZS0+YnlQcmVhbWJsZVR5cGUsIGJ5UGt0VHlwZSwgMTQsICh1bnNpZ25lZCBzaG9ydClwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUpOwogICAgIH0KIAogICAgIGlmIChiTmVlZEFjaykgewpAQCAtNDA4LDE2ICszOTcsMTYgQEAKIAogLy9ieUZyZXFUeXBlOiAwPT41R0haIDE9PjIuNEdIWgogc3RhdGljCi1VSU5UCit1bnNpZ25lZCBpbnQKIHNfdUdldFJUU0NUU1JzdlRpbWUgKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSBieVJUU1JzdlR5cGUsCi0gICAgQllURSBieVBrdFR5cGUsCi0gICAgVUlOVCBjYkZyYW1lTGVuZ3RoLAotICAgIFdPUkQgd0N1cnJlbnRSYXRlCisgICAgdW5zaWduZWQgY2hhciBieVJUU1JzdlR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlCiAgICAgKQogewotICAgIFVJTlQgdVJydlRpbWUgICwgdVJUU1RpbWUsIHVDVFNUaW1lLCB1QWNrVGltZSwgdURhdGFUaW1lOworICAgIHVuc2lnbmVkIGludCB1UnJ2VGltZSAgLCB1UlRTVGltZSwgdUNUU1RpbWUsIHVBY2tUaW1lLCB1RGF0YVRpbWU7CiAKICAgICB1UnJ2VGltZSA9IHVSVFNUaW1lID0gdUNUU1RpbWUgPSB1QWNrVGltZSA9IHVEYXRhVGltZSA9IDA7CiAKQEAgLTQ1MCwyMiArNDM5LDIyIEBACiAKIC8vYnlGcmVxVHlwZSAwOiA1R0h6LCAxOjIuNEdoegogc3RhdGljCi1VSU5UCit1bnNpZ25lZCBpbnQKIHNfdUdldERhdGFEdXJhdGlvbiAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFICAgICBieUR1clR5cGUsCi0gICAgVUlOVCAgICAgY2JGcmFtZUxlbmd0aCwKLSAgICBCWVRFICAgICBieVBrdFR5cGUsCi0gICAgV09SRCAgICAgd1JhdGUsCi0gICAgQk9PTCAgICAgYk5lZWRBY2ssCi0gICAgVUlOVCAgICAgdUZyYWdJZHgsCi0gICAgVUlOVCAgICAgY2JMYXN0RnJhZ21lbnRTaXplLAotICAgIFVJTlQgICAgIHVNQUNmcmFnTnVtLAotICAgIEJZVEUgICAgIGJ5RkJPcHRpb24KKyAgICB1bnNpZ25lZCBjaGFyIGJ5RHVyVHlwZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeCwKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ21lbnRTaXplLAorICAgIHVuc2lnbmVkIGludCB1TUFDZnJhZ051bSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24KICAgICApCiB7Ci0gICAgQk9PTCBiTGFzdEZyYWcgPSAwOwotICAgIFVJTlQgdUFja1RpbWUgPTAsIHVOZXh0UGt0VGltZSA9IDA7CisgICAgYm9vbCBiTGFzdEZyYWcgPSAwOworICAgIHVuc2lnbmVkIGludCB1QWNrVGltZSA9MCwgdU5leHRQa3RUaW1lID0gMDsKIAogCiAKQEAgLTYxNCwyNSArNjAzLDI1IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotCUFTU0VSVChGQUxTRSk7CisJQVNTRVJUKGZhbHNlKTsKIAlyZXR1cm4gMDsKIH0KIAogCiAvL2J5RnJlcVR5cGU6IDA9PjVHSFogMT0+Mi40R0haCiBzdGF0aWMKLVVJTlQKK3Vuc2lnbmVkIGludAogc191R2V0UlRTQ1RTRHVyYXRpb24gKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgQllURSBieUR1clR5cGUsCi0gICAgVUlOVCBjYkZyYW1lTGVuZ3RoLAotICAgIEJZVEUgYnlQa3RUeXBlLAotICAgIFdPUkQgd1JhdGUsCi0gICAgQk9PTCBiTmVlZEFjaywKLSAgICBCWVRFIGJ5RkJPcHRpb24KKyAgICB1bnNpZ25lZCBjaGFyIGJ5RHVyVHlwZSwKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwZSwKKyAgICB1bnNpZ25lZCBzaG9ydCB3UmF0ZSwKKyAgICBib29sIGJOZWVkQWNrLAorICAgIHVuc2lnbmVkIGNoYXIgYnlGQk9wdGlvbgogICAgICkKIHsKLSAgICBVSU5UIHVDVFNUaW1lID0gMCwgdUR1clRpbWUgPSAwOworICAgIHVuc2lnbmVkIGludCB1Q1RTVGltZSA9IDAsIHVEdXJUaW1lID0gMDsKIAogCiAgICAgc3dpdGNoIChieUR1clR5cGUpIHsKQEAgLTcxOSwyMiArNzA4LDIyIEBACiAKIAogc3RhdGljCi1VSU5UCit1bnNpZ25lZCBpbnQKIHNfdUZpbGxEYXRhSGVhZCAoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFICAgICBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCiAgICAgdm9pZCAqICAgcFR4RGF0YUhlYWQsCi0gICAgVUlOVCAgICAgY2JGcmFtZUxlbmd0aCwKLSAgICBVSU5UICAgICB1RE1BSWR4LAotICAgIEJPT0wgICAgIGJOZWVkQWNrLAotICAgIFVJTlQgICAgIHVGcmFnSWR4LAotICAgIFVJTlQgICAgIGNiTGFzdEZyYWdtZW50U2l6ZSwKLSAgICBVSU5UICAgICB1TUFDZnJhZ051bSwKLSAgICBCWVRFICAgICBieUZCT3B0aW9uLAotICAgIFdPUkQgICAgIHdDdXJyZW50UmF0ZQorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorICAgIGJvb2wgYk5lZWRBY2ssCisgICAgdW5zaWduZWQgaW50IHVGcmFnSWR4LAorICAgIHVuc2lnbmVkIGludCBjYkxhc3RGcmFnbWVudFNpemUsCisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtLAorICAgIHVuc2lnbmVkIGNoYXIgYnlGQk9wdGlvbiwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUKICAgICApCiB7Ci0gICAgV09SRCAgd0xlbiA9IDB4MDAwMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCiAgICAgaWYgKHBUeERhdGFIZWFkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NDUsMTkgKzczNCwxOSBAQAogICAgICAgICAgICAgUFNUeERhdGFIZWFkX2cgcEJ1ZiA9IChQU1R4RGF0YUhlYWRfZylwVHhEYXRhSGVhZDsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVMZW5ndGgsIHdDdXJyZW50UmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9hKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYSA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYiA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgLy9HZXQgRHVyYXRpb24gYW5kIFRpbWVTdGFtcAotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2EgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BLCBjYkZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2EgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQSwgY2JGcmFtZUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnlGQk9wdGlvbikpOyAvLzE6IDIuNEdIegotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2IgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9CLCBjYkZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2IgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZUxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBLX1RZUEVfMTFCLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOZWVkQWNrLCB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8xOiAyLjQKQEAgLTc3MSwyMSArNzYwLDIxIEBACiAgICAgICAgICAgICBQU1R4RGF0YUhlYWRfZ19GQiBwQnVmID0gKFBTVHhEYXRhSGVhZF9nX0ZCKXBUeERhdGFIZWFkOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgd0N1cnJlbnRSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2EpLCAoUEJZVEUpJihwQnVmLT5ieVNpZ25hbEZpZWxkX2EpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2EpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9hKQogICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aF9hID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCBjYkZyYW1lTGVuZ3RoLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgUEtfVFlQRV8xMUIsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAoUEJZVEUpJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQogICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aF9iID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbiBhbmQgVGltZVN0YW1wCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8xOiAyLjRHSHoKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9CLCBjYkZyYW1lTGVuZ3RoLCBQS19UWVBFXzExQiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbikpOyAvLzE6IDIuNEdIegotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2FfZjAgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYV9mMCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMTogMi40R0h6Ci0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYV9mMSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0FfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hX2YxID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0FfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8xOiAyLjRHSHoKIAogICAgICAgICAgICAgcEJ1Zi0+d1RpbWVTdGFtcE9mZl9hID0gY3B1X3RvX2xlMTYod1RpbWVTdGFtcE9mZltwRGV2aWNlLT5ieVByZWFtYmxlVHlwZSUyXVt3Q3VycmVudFJhdGUlTUFYX1JBVEVdKTsKQEAgLTgwMCwxNiArNzg5LDE2IEBACiAgICAgICAgICAgICBQU1R4RGF0YUhlYWRfYV9GQiBwQnVmID0gKFBTVHhEYXRhSGVhZF9hX0ZCKXBUeERhdGFIZWFkOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgd0N1cnJlbnRSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uIGFuZCBUaW1lU3RhbXBPZmYKIAotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbikpOyAvLzA6IDVHSHoKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9mMCA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0FfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9mMCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24pKTsgLy8wOiA1R0h6Ci0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fZjEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9BX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fZjEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uKSk7IC8vMDogNUdIegogICAgICAgICAgICAgcEJ1Zi0+d1RpbWVTdGFtcE9mZiA9IGNwdV90b19sZTE2KHdUaW1lU3RhbXBPZmZbcERldmljZS0+YnlQcmVhbWJsZVR5cGUlMl1bd0N1cnJlbnRSYXRlJU1BWF9SQVRFXSk7CiAgICAgICAgICAgICByZXR1cm4gKHBCdWYtPndEdXJhdGlvbik7CkBAIC04MTcsMTIgKzgwNiwxMiBAQAogICAgICAgICAgICAgUFNUeERhdGFIZWFkX2FiIHBCdWYgPSAoUFNUeERhdGFIZWFkX2FiKXBUeERhdGFIZWFkOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgY2JGcmFtZUxlbmd0aCwgd0N1cnJlbnRSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uIGFuZCBUaW1lU3RhbXBPZmYKIAotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5RkJPcHRpb24pKTsKQEAgLTgzNSwxMSArODI0LDExIEBACiAgICAgICAgICAgICBQU1R4RGF0YUhlYWRfYWIgcEJ1ZiA9IChQU1R4RGF0YUhlYWRfYWIpcFR4RGF0YUhlYWQ7CiAgICAgICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCBjYkZyYW1lTGVuZ3RoLCB3Q3VycmVudFJhdGUsIGJ5UGt0VHlwZSwKLSAgICAgICAgICAgICAgICAoUFdPUkQpJih3TGVuKSwgKFBCWVRFKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAoUEJZVEUpJihwQnVmLT5ieVNpZ25hbEZpZWxkKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkKQogICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aCA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgLy9HZXQgRHVyYXRpb24gYW5kIFRpbWVTdGFtcE9mZgotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLAorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0IsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCB1RnJhZ0lkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5RkJPcHRpb24pKTsKQEAgLTg1NCwxOCArODQzLDE4IEBACiB2b2lkCiBzX3ZGaWxsUlRTSGVhZCAoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZSVFMsCi0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lTGVuZ3RoLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRBY2ssCi0gICAgQk9PTCAgICAgICAgICAgICBiRGlzQ1JDLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIGJvb2wgYk5lZWRBY2ssCisgICAgYm9vbCBiRGlzQ1JDLAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgV09SRCAgICAgICAgICAgICB3Q3VycmVudFJhdGUsCi0gICAgQllURSAgICAgICAgICAgICBieUZCT3B0aW9uCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlGQk9wdGlvbgogICAgICkKIHsKLSAgICBVSU5UIHVSVFNGcmFtZUxlbiA9IDIwOwotICAgIFdPUkQgIHdMZW4gPSAweDAwMDA7CisgICAgdW5zaWduZWQgaW50IHVSVFNGcmFtZUxlbiA9IDIwOworICAgIHVuc2lnbmVkIHNob3J0IHdMZW4gPSAweDAwMDA7CiAKICAgICBpZiAocHZSVFMgPT0gTlVMTCkKICAgICAJcmV0dXJuOwpAQCAtODgzLDE3ICs4NzIsMTcgQEAKICAgICAgICAgICAgIFBTUlRTX2cgcEJ1ZiA9IChQU1JUU19nKXB2UlRTOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgdVJUU0ZyYW1lTGVuLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgUEtfVFlQRV8xMUIsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAoUEJZVEUpJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQogICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aF9iID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1UlRTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9hKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYSA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgLy9HZXQgRHVyYXRpb24KLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzA6UlRTRHVyYXRpb25fYmIsIDE6Mi40RywgMTpDQ0tEYXRhCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYWEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzI6UlRTRHVyYXRpb25fYWEsIDE6Mi40RywgMiwzOiAyLjRHIE9GRE1EYXRhCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzE6UlRTRHVyYXRpb25fYmEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmIgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JCLCBjYkZyYW1lTGVuZ3RoLCBQS19UWVBFXzExQiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vMDpSVFNEdXJhdGlvbl9iYiwgMToyLjRHLCAxOkNDS0RhdGEKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzI6UlRTRHVyYXRpb25fYWEsIDE6Mi40RywgMiwzOiAyLjRHIE9GRE1EYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8xOlJUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQogCiAgICAgICAgICAgICBwQnVmLT5EYXRhLndEdXJhdGlvbklEID0gcEJ1Zi0+d0R1cmF0aW9uX2FhOwogICAgICAgICAgICAgLy9HZXQgUlRTIEZyYW1lIGJvZHkKQEAgLTkxNiwyMiArOTA1LDIyIEBACiAgICAgICAgICAgIFBTUlRTX2dfRkIgcEJ1ZiA9IChQU1JUU19nX0ZCKXB2UlRTOwogICAgICAgICAgICAgLy9HZXQgU2lnbmFsRmllbGQsU2VydmljZUZpZWxkLExlbmd0aAogICAgICAgICAgICAgQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIocERldmljZSwgdVJUU0ZyYW1lTGVuLCBwRGV2aWNlLT5ieVRvcENDS0Jhc2ljUmF0ZSwgUEtfVFlQRV8xMUIsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAoUEJZVEUpJihwQnVmLT5ieVNpZ25hbEZpZWxkX2IpCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIHNob3J0ICopJih3TGVuKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2VydmljZUZpZWxkX2IpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQogICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHBCdWYtPndUcmFuc21pdExlbmd0aF9iID0gY3B1X3RvX2xlMTYod0xlbik7CiAgICAgICAgICAgICBCQnZDYWN1bGF0ZVBhcmFtZXRlcihwRGV2aWNlLCB1UlRTRnJhbWVMZW4sIHBEZXZpY2UtPmJ5VG9wT0ZETUJhc2ljUmF0ZSwgYnlQa3RUeXBlLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9hKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9hKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYSkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYSA9IGNwdV90b19sZTE2KHdMZW4pOwogCiAgICAgICAgICAgICAvL0dldCBEdXJhdGlvbgotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JiID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JCLCBjYkZyYW1lTGVuZ3RoLCBQS19UWVBFXzExQiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vMDpSVFNEdXJhdGlvbl9iYiwgMToyLjRHLCAxOkNDS0RhdGEKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9hYSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMjpSVFNEdXJhdGlvbl9hYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8xOlJUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE1EYXRhCi0gICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYmFfZjAgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQkFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzQ6d1JUU0R1cmF0aW9uX2JhX2YwLCAxOjIuNEcsIDE6Q0NLRGF0YQotICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2FhX2YwID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy81OndSVFNEdXJhdGlvbl9hYV9mMCwgMToyLjRHLCAxOkNDS0RhdGEKLSAgICAgICAgICAgIHBCdWYtPndSVFNEdXJhdGlvbl9iYV9mMSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vNjp3UlRTRHVyYXRpb25fYmFfZjEsIDE6Mi40RywgMTpDQ0tEYXRhCi0gICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYWFfZjEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzc6d1JUU0R1cmF0aW9uX2FhX2YxLCAxOjIuNEcsIDE6Q0NLRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JiID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQiwgY2JGcmFtZUxlbmd0aCwgUEtfVFlQRV8xMUIsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzA6UlRTRHVyYXRpb25fYmIsIDE6Mi40RywgMTpDQ0tEYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYWEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8yOlJUU0R1cmF0aW9uX2FhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE1EYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8xOlJUU0R1cmF0aW9uX2JhLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE1EYXRhCisgICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYmFfZjAgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JBX0YwLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy80OndSVFNEdXJhdGlvbl9iYV9mMCwgMToyLjRHLCAxOkNDS0RhdGEKKyAgICAgICAgICAgIHBCdWYtPndSVFNEdXJhdGlvbl9hYV9mMCA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAgICAvLzU6d1JUU0R1cmF0aW9uX2FhX2YwLCAxOjIuNEcsIDE6Q0NLRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2JhX2YxID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9CQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7ICAgIC8vNjp3UlRTRHVyYXRpb25fYmFfZjEsIDE6Mi40RywgMTpDQ0tEYXRhCisgICAgICAgICAgICBwQnVmLT53UlRTRHVyYXRpb25fYWFfZjEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBX0YxLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgICAgLy83OndSVFNEdXJhdGlvbl9hYV9mMSwgMToyLjRHLCAxOkNDS0RhdGEKICAgICAgICAgICAgIHBCdWYtPkRhdGEud0R1cmF0aW9uSUQgPSBwQnVmLT53RHVyYXRpb25fYWE7CiAgICAgICAgICAgICAvL0dldCBSVFMgRnJhbWUgYm9keQogICAgICAgICAgICAgcEJ1Zi0+RGF0YS53RnJhbWVDb250cm9sID0gVFlQRV9DVExfUlRTOy8vMHgwMEI0CkBAIC05NTgsMTEgKzk0NywxMSBAQAogICAgICAgICAgICAgUFNSVFNfYWIgcEJ1ZiA9IChQU1JUU19hYilwdlJUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVSVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzA6UlRTRHVyYXRpb25fYWEsIDA6NUcsIDA6IDVHIE9GRE1EYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2FhLCAwOjVHLCAwOiA1RyBPRkRNRGF0YQogICAgIAkgICAgcEJ1Zi0+RGF0YS53RHVyYXRpb25JRCA9IHBCdWYtPndEdXJhdGlvbjsKICAgICAgICAgICAgIC8vR2V0IFJUUyBGcmFtZSBib2R5CiAgICAgICAgICAgICBwQnVmLT5EYXRhLndGcmFtZUNvbnRyb2wgPSBUWVBFX0NUTF9SVFM7Ly8weDAwQjQKQEAgLTk4NywxMyArOTc2LDEzIEBACiAgICAgICAgICAgICBQU1JUU19hX0ZCIHBCdWYgPSAoUFNSVFNfYV9GQilwdlJUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVSVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BPRkRNQmFzaWNSYXRlLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTZXJ2aWNlRmllbGQpLCAodW5zaWduZWQgY2hhciAqKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgICAgIC8vR2V0IER1cmF0aW9uCi0gICAgICAgICAgICBwQnVmLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzA6UlRTRHVyYXRpb25fYWEsIDA6NUcsIDA6IDVHIE9GRE1EYXRhCi0gICAgCSAgICBwQnVmLT53UlRTRHVyYXRpb25fZjAgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzU6UlRTRHVyYXRpb25fYWFfZjAsIDA6NUcsIDA6IDVHIE9GRE1EYXRhCi0gICAgCSAgICBwQnVmLT53UlRTRHVyYXRpb25fZjEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzc6UlRTRHVyYXRpb25fYWFfZjEsIDA6NUcsIDA6CisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0FBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2FhLCAwOjVHLCAwOiA1RyBPRkRNRGF0YQorICAgIAkgICAgcEJ1Zi0+d1JUU0R1cmF0aW9uX2YwID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIFJUU0RVUl9BQV9GMCwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vNTpSVFNEdXJhdGlvbl9hYV9mMCwgMDo1RywgMDogNUcgT0ZETURhdGEKKyAgICAJICAgIHBCdWYtPndSVFNEdXJhdGlvbl9mMSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBSVFNEVVJfQUFfRjEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzc6UlRTRHVyYXRpb25fYWFfZjEsIDA6NUcsIDA6CiAgICAgCSAgICBwQnVmLT5EYXRhLndEdXJhdGlvbklEID0gcEJ1Zi0+d0R1cmF0aW9uOwogICAgIAkgICAgLy9HZXQgUlRTIEZyYW1lIGJvZHkKICAgICAgICAgICAgIHBCdWYtPkRhdGEud0ZyYW1lQ29udHJvbCA9IFRZUEVfQ1RMX1JUUzsvLzB4MDBCNApAQCAtMTAxNywxMSArMTAwNiwxMSBAQAogICAgICAgICBQU1JUU19hYiBwQnVmID0gKFBTUlRTX2FiKXB2UlRTOwogICAgICAgICAvL0dldCBTaWduYWxGaWVsZCxTZXJ2aWNlRmllbGQsTGVuZ3RoCiAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVSVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBCdWYtPmJ5U2VydmljZUZpZWxkKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZCkKKyAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZCksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNpZ25hbEZpZWxkKQogICAgICAgICApOwogICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGggPSBjcHVfdG9fbGUxNih3TGVuKTsKICAgICAgICAgLy9HZXQgRHVyYXRpb24KLSAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JCLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2JiLCAxOjIuNEcsIDE6Q0NLRGF0YQorICAgICAgICBwQnVmLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgUlRTRFVSX0JCLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pKTsgLy8wOlJUU0R1cmF0aW9uX2JiLCAxOjIuNEcsIDE6Q0NLRGF0YQogICAgICAgICBwQnVmLT5EYXRhLndEdXJhdGlvbklEID0gcEJ1Zi0+d0R1cmF0aW9uOwogICAgICAgICAvL0dldCBSVFMgRnJhbWUgYm9keQogICAgICAgICBwQnVmLT5EYXRhLndGcmFtZUNvbnRyb2wgPSBUWVBFX0NUTF9SVFM7Ly8weDAwQjQKQEAgLTEwNDgsMTggKzEwMzcsMTggQEAKIHZvaWQKIHNfdkZpbGxDVFNIZWFkICgKICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgIFVJTlQgICAgIHVETUFJZHgsCi0gICAgQllURSAgICAgYnlQa3RUeXBlLAorICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLAogICAgIHZvaWQgKiAgIHB2Q1RTLAotICAgIFVJTlQgICAgIGNiRnJhbWVMZW5ndGgsCi0gICAgQk9PTCAgICAgYk5lZWRBY2ssCi0gICAgQk9PTCAgICAgYkRpc0NSQywKLSAgICBXT1JEICAgICB3Q3VycmVudFJhdGUsCi0gICAgQllURSAgICAgYnlGQk9wdGlvbgorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAorICAgIGJvb2wgYk5lZWRBY2ssCisgICAgYm9vbCBiRGlzQ1JDLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24KICAgICApCiB7Ci0gICAgVUlOVCB1Q1RTRnJhbWVMZW4gPSAxNDsKLSAgICBXT1JEICB3TGVuID0gMHgwMDAwOworICAgIHVuc2lnbmVkIGludCB1Q1RTRnJhbWVMZW4gPSAxNDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCiAgICAgaWYgKHB2Q1RTID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwpAQCAtMTA3NywyMSArMTA2NiwyMSBAQAogICAgICAgICAgICAgUFNDVFNfRkIgcEJ1ZiA9IChQU0NUU19GQilwdkNUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVDVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAKIAogICAgICAgICAgICAgcEJ1Zi0+d1RyYW5zbWl0TGVuZ3RoX2IgPSBjcHVfdG9fbGUxNih3TGVuKTsKIAotICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gKFdPUkQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgQ1RTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOyAvLzM6Q1RTRHVyYXRpb25fYmEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCisgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgPSAodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTRHVyYXRpb24ocERldmljZSwgQ1RTRFVSX0JBLCBjYkZyYW1lTGVuZ3RoLCBieVBrdFR5cGUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBY2ssIGJ5RkJPcHRpb24pOyAvLzM6Q1RTRHVyYXRpb25fYmEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCiAgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgKz0gcERldmljZS0+d0NUU0R1cmF0aW9uOwogICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYocEJ1Zi0+d0R1cmF0aW9uX2JhKTsKICAgICAgICAgICAgIC8vR2V0IENUU0R1cmF0aW9uX2JhX2YwCi0gICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjAgPSAoV09SRClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbik7IC8vODpDVFNEdXJhdGlvbl9iYV9mMCwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKKyAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMCA9ICh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkFfRjAsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbik7IC8vODpDVFNEdXJhdGlvbl9iYV9mMCwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKICAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMCArPSBwRGV2aWNlLT53Q1RTRHVyYXRpb247CiAgICAgICAgICAgICBwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjAgPSBjcHVfdG9fbGUxNihwQnVmLT53Q1RTRHVyYXRpb25fYmFfZjApOwogICAgICAgICAgICAgLy9HZXQgQ1RTRHVyYXRpb25fYmFfZjEKLSAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMSA9IChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIENUU0RVUl9CQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKTsgLy85OkNUU0R1cmF0aW9uX2JhX2YxLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQorICAgICAgICAgICAgcEJ1Zi0+d0NUU0R1cmF0aW9uX2JhX2YxID0gKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIENUU0RVUl9CQV9GMSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKTsgLy85OkNUU0R1cmF0aW9uX2JhX2YxLCAxOjIuNEcsIDIsMzoyLjRHIE9GRE0gRGF0YQogICAgICAgICAgICAgcEJ1Zi0+d0NUU0R1cmF0aW9uX2JhX2YxICs9IHBEZXZpY2UtPndDVFNEdXJhdGlvbjsKICAgICAgICAgICAgIHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMSA9IGNwdV90b19sZTE2KHBCdWYtPndDVFNEdXJhdGlvbl9iYV9mMSk7CiAgICAgICAgICAgICAvL0dldCBDVFMgRnJhbWUgYm9keQpAQCAtMTEwNCwxMSArMTA5MywxMSBAQAogICAgICAgICAgICAgUFNDVFMgcEJ1ZiA9IChQU0NUUylwdkNUUzsKICAgICAgICAgICAgIC8vR2V0IFNpZ25hbEZpZWxkLFNlcnZpY2VGaWVsZCxMZW5ndGgKICAgICAgICAgICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIHVDVFNGcmFtZUxlbiwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIFBLX1RZUEVfMTFCLAotICAgICAgICAgICAgICAgIChQV09SRCkmKHdMZW4pLCAoUEJZVEUpJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKFBCWVRFKSYocEJ1Zi0+YnlTaWduYWxGaWVsZF9iKQorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKSYod0xlbiksICh1bnNpZ25lZCBjaGFyICopJihwQnVmLT5ieVNlcnZpY2VGaWVsZF9iKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBCdWYtPmJ5U2lnbmFsRmllbGRfYikKICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBwQnVmLT53VHJhbnNtaXRMZW5ndGhfYiA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgICAgICAgICAgLy9HZXQgQ1RTRHVyYXRpb25fYmEKLSAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU0R1cmF0aW9uKHBEZXZpY2UsIENUU0RVUl9CQSwgY2JGcmFtZUxlbmd0aCwgYnlQa3RUeXBlLCB3Q3VycmVudFJhdGUsIGJOZWVkQWNrLCBieUZCT3B0aW9uKSk7IC8vMzpDVFNEdXJhdGlvbl9iYSwgMToyLjRHLCAyLDM6Mi40RyBPRkRNIERhdGEKKyAgICAgICAgICAgIHBCdWYtPndEdXJhdGlvbl9iYSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRSVFNDVFNEdXJhdGlvbihwRGV2aWNlLCBDVFNEVVJfQkEsIGNiRnJhbWVMZW5ndGgsIGJ5UGt0VHlwZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFjaywgYnlGQk9wdGlvbikpOyAvLzM6Q1RTRHVyYXRpb25fYmEsIDE6Mi40RywgMiwzOjIuNEcgT0ZETSBEYXRhCiAgICAgICAgICAgICBwQnVmLT53RHVyYXRpb25fYmEgKz0gcERldmljZS0+d0NUU0R1cmF0aW9uOwogICAgICAgICAgICAgcEJ1Zi0+d0R1cmF0aW9uX2JhID0gY3B1X3RvX2xlMTYocEJ1Zi0+d0R1cmF0aW9uX2JhKTsKIApAQCAtMTE0OCwyOCArMTEzNywyOCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogLSovCi0vLyBVSU5UICAgICAgICAgICAgY2JGcmFtZVNpemUsLy9IZHIrUGF5bG9hZCtGQ1MKKy8vIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZSwvL0hkcitQYXlsb2FkK0ZDUwogc3RhdGljCiB2b2lkCiBzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyICgKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cGUsCisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGUsCiAgICAgdm9pZCAqICAgICAgICAgICBwVHhCdWZIZWFkLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZScnZUaW1lLAogICAgIHZvaWQgKiAgICAgICAgICAgcHZSVFMsCiAgICAgdm9pZCAqICAgICAgICAgICBwdkNUUywKLSAgICBVSU5UICAgICAgICAgICAgIGNiRnJhbWVTaXplLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRBQ0ssCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZSwKKyAgICBib29sIGJOZWVkQUNLLAorICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgV09SRCAgICAgICAgICAgICB3Q3VycmVudFJhdGUKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUKICAgICApCiB7Ci0gICAgVUlOVCBjYk1BQ0hkTGVuID0gV0xBTl9IRFJfQUREUjNfTEVOOyAvLzI0Ci0gICAgV09SRCB3Rmlmb0N0bDsKLSAgICBCT09MIGJEaXNDUkMgPSBGQUxTRTsKLSAgICBCWVRFIGJ5RkJPcHRpb24gPSBBVVRPX0ZCX05PTkU7Ci0vLyAgICBXT1JEIHdDdXJyZW50UmF0ZSA9IHBEZXZpY2UtPndDdXJyZW50UmF0ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JNQUNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsgLy8yNAorICAgIHVuc2lnbmVkIHNob3J0IHdGaWZvQ3RsOworICAgIGJvb2wgYkRpc0NSQyA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIgYnlGQk9wdGlvbiA9IEFVVE9fRkJfTk9ORTsKKy8vICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZSA9IHBEZXZpY2UtPndDdXJyZW50UmF0ZTsKIAogICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJzX3ZHZW5lcmF0ZVR4UGFyYW1ldGVyLi4uXG4iKTsKICAgICBQU1R4QnVmSGVhZCBwRmlmb0hlYWQgPSAoUFNUeEJ1ZkhlYWQpcFR4QnVmSGVhZDsKQEAgLTExNzcsNyArMTE2Niw3IEBACiAgICAgd0ZpZm9DdGwgPSBwRmlmb0hlYWQtPndGSUZPQ3RsOwogCiAgICAgaWYgKHdGaWZvQ3RsICYgRklGT0NUTF9DUkNESVMpIHsKLSAgICAgICAgYkRpc0NSQyA9IFRSVUU7CisgICAgICAgIGJEaXNDUkMgPSB0cnVlOwogICAgIH0KIAogICAgIGlmICh3Rmlmb0N0bCAmIEZJRk9DVExfQVVUT19GQl8wKSB7CkBAIC0xMTk2LDExICsxMTg1LDExIEBACiAgICAgICAgICAgICAvL0ZpbGwgUnN2VGltZQogICAgICAgICAgICAgaWYgKHB2UnJ2VGltZSkgewogICAgICAgICAgICAgICAgIFBTUnJ2VGltZV9nUlRTIHBCdWYgPSAoUFNScnZUaW1lX2dSVFMpcHZScnZUaW1lOwotICAgICAgICAgICAgICAgIHBCdWYtPndSVFNUeFJydlRpbWVfYWEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDIsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMjpSVFNUeFJydlRpbWVfYWEsIDE6Mi40R0h6Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZV9iYSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8xOlJUU1R4UnJ2VGltZV9iYSwgMToyLjRHSHoKLSAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lX2JiID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAwLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzA6UlRTVHhScnZUaW1lX2JiLCAxOjIuNEdIegotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWVfYSA9IGNwdV90b19sZTE2KChXT1JEKSBzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMi40RyBPRkRNCi0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9iID0gY3B1X3RvX2xlMTYoKFdPUkQpIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKKyAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lX2FhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMiwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8yOlJUU1R4UnJ2VGltZV9hYSwgMToyLjRHSHoKKyAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lX2JhID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8xOlJUU1R4UnJ2VGltZV9iYSwgMToyLjRHSHoKKyAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lX2JiID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMCwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8wOlJUU1R4UnJ2VGltZV9iYiwgMToyLjRHSHoKKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lX2EgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJOZWVkQUNLKSk7Ly8yLjRHIE9GRE0KKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lX2IgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpIHNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHBEZXZpY2UtPmJ5VG9wQ0NLQmFzaWNSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vRmlsbCBSVFMKICAgICAgICAgICAgIHNfdkZpbGxSVFNIZWFkKHBEZXZpY2UsIGJ5UGt0VHlwZSwgcHZSVFMsIGNiRnJhbWVTaXplLCBiTmVlZEFDSywgYkRpc0NSQywgcHNFdGhIZWFkZXIsIHdDdXJyZW50UmF0ZSwgYnlGQk9wdGlvbik7CkBAIC0xMjEwLDkgKzExOTksOSBAQAogICAgICAgICAgICAgLy9GaWxsIFJzdlRpbWUKICAgICAgICAgICAgIGlmIChwdlJydlRpbWUpIHsKICAgICAgICAgICAgICAgICBQU1JydlRpbWVfZ0NUUyBwQnVmID0gKFBTUnJ2VGltZV9nQ1RTKXB2UnJ2VGltZTsKLSAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lX2EgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMi40RyBPRkRNCi0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9iID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFCLCBjYkZyYW1lU2l6ZSwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIGJOZWVkQUNLKSk7Ly8xOkNDSwotICAgICAgICAgICAgICAgIHBCdWYtPndDVFNUeFJydlRpbWVfYmEgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRSVFNDVFNSc3ZUaW1lKHBEZXZpY2UsIDMsIGJ5UGt0VHlwZSwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSkpOy8vMzpDVFNUeFJydlRpbWVfQmEsIDE6Mi40R0h6CisgICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZV9hID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJOZWVkQUNLKSk7Ly8yLjRHIE9GRE0KKyAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lX2IgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFCLCBjYkZyYW1lU2l6ZSwgcERldmljZS0+YnlUb3BDQ0tCYXNpY1JhdGUsIGJOZWVkQUNLKSk7Ly8xOkNDSworICAgICAgICAgICAgICAgIHBCdWYtPndDVFNUeFJydlRpbWVfYmEgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAzLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzM6Q1RTVHhScnZUaW1lX0JhLCAxOjIuNEdIegogICAgICAgICAgICAgfQogCiAKQEAgLTEyMjYsOCArMTIxNSw4IEBACiAgICAgICAgICAgICAvL0ZpbGwgUnN2VGltZQogICAgICAgICAgICAgaWYgKHB2UnJ2VGltZSkgewogICAgICAgICAgICAgICAgIFBTUnJ2VGltZV9hYiBwQnVmID0gKFBTUnJ2VGltZV9hYilwdlJydlRpbWU7Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1JUU1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMiwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8yOlJUU1R4UnJ2VGltZV9hYSwgMDo1R0h6Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJOZWVkQUNLKSk7Ly8wOk9GRE0KKyAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KXNfdUdldFJUU0NUU1JzdlRpbWUocERldmljZSwgMiwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlKSk7Ly8yOlJUU1R4UnJ2VGltZV9hYSwgMDo1R0h6CisgICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgYnlQa3RUeXBlLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMDpPRkRNCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvL0ZpbGwgUlRTCiAgICAgICAgICAgICBzX3ZGaWxsUlRTSGVhZChwRGV2aWNlLCBieVBrdFR5cGUsIHB2UlRTLCBjYkZyYW1lU2l6ZSwgYk5lZWRBQ0ssIGJEaXNDUkMsIHBzRXRoSGVhZGVyLCB3Q3VycmVudFJhdGUsIGJ5RkJPcHRpb24pOwpAQCAtMTIzNiw3ICsxMjI1LDcgQEAKICAgICAgICAgICAgIC8vRmlsbCBSc3ZUaW1lCiAgICAgICAgICAgICBpZiAocHZScnZUaW1lKSB7CiAgICAgICAgICAgICAgICAgUFNScnZUaW1lX2FiIHBCdWYgPSAoUFNScnZUaW1lX2FiKXB2UnJ2VGltZTsKLSAgICAgICAgICAgICAgICBwQnVmLT53VHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFBLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOyAvLzA6T0ZETQorICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFBLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOyAvLzA6T0ZETQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTI0Niw4ICsxMjM1LDggQEAKICAgICAgICAgICAgIC8vRmlsbCBSc3ZUaW1lCiAgICAgICAgICAgICBpZiAocHZScnZUaW1lKSB7CiAgICAgICAgICAgICAgICAgUFNScnZUaW1lX2FiIHBCdWYgPSAoUFNScnZUaW1lX2FiKXB2UnJ2VGltZTsKLSAgICAgICAgICAgICAgICBwQnVmLT53UlRTVHhScnZUaW1lID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAwLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzA6UlRTVHhScnZUaW1lX2JiLCAxOjIuNEdIegotICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigoV09SRClzX3VHZXRUeFJzdlRpbWUocERldmljZSwgUEtfVFlQRV8xMUIsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJOZWVkQUNLKSk7Ly8xOkNDSworICAgICAgICAgICAgICAgIHBCdWYtPndSVFNUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0UlRTQ1RTUnN2VGltZShwRGV2aWNlLCAwLCBieVBrdFR5cGUsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUpKTsvLzA6UlRTVHhScnZUaW1lX2JiLCAxOjIuNEdIegorICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFCLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOy8vMTpDQ0sKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vRmlsbCBSVFMKICAgICAgICAgICAgIHNfdkZpbGxSVFNIZWFkKHBEZXZpY2UsIGJ5UGt0VHlwZSwgcHZSVFMsIGNiRnJhbWVTaXplLCBiTmVlZEFDSywgYkRpc0NSQywgcHNFdGhIZWFkZXIsIHdDdXJyZW50UmF0ZSwgYnlGQk9wdGlvbik7CkBAIC0xMjU2LDI2ICsxMjQ1LDI2IEBACiAgICAgICAgICAgICAvL0ZpbGwgUnN2VGltZQogICAgICAgICAgICAgaWYgKHB2UnJ2VGltZSkgewogICAgICAgICAgICAgICAgIFBTUnJ2VGltZV9hYiBwQnVmID0gKFBTUnJ2VGltZV9hYilwdlJydlRpbWU7Ci0gICAgICAgICAgICAgICAgcEJ1Zi0+d1R4UnJ2VGltZSA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldFR4UnN2VGltZShwRGV2aWNlLCBQS19UWVBFXzExQiwgY2JGcmFtZVNpemUsIHdDdXJyZW50UmF0ZSwgYk5lZWRBQ0spKTsgLy8xOkNDSworICAgICAgICAgICAgICAgIHBCdWYtPndUeFJydlRpbWUgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0VHhSc3ZUaW1lKHBEZXZpY2UsIFBLX1RZUEVfMTFCLCBjYkZyYW1lU2l6ZSwgd0N1cnJlbnRSYXRlLCBiTmVlZEFDSykpOyAvLzE6Q0NLCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInNfdkdlbmVyYXRlVHhQYXJhbWV0ZXIgRU5ELlxuIik7CiB9CiAvKgotICAgIFBCWVRFIHBieUJ1ZmZlciwvL3BvaW50IHRvIHBUeEJ1ZkhlYWQKLSAgICBXT1JEICB3RnJhZ1R5cGUsLy8wMDpOb24tRnJhZywgMDE6U3RhcnQsIDAyOk1pZCwgMDM6TGFzdAotICAgIFVJTlQgIGNiRnJhZ21lbnRTaXplLC8vSGRyK3BheW9hZCtGQ1MKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsLy9wb2ludCB0byBwVHhCdWZIZWFkCisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlLC8vMDA6Tm9uLUZyYWcsIDAxOlN0YXJ0LCAwMjpNaWQsIDAzOkxhc3QKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFnbWVudFNpemUsLy9IZHIrcGF5b2FkK0ZDUwogKi8KIHN0YXRpYwogdm9pZAogc192RmlsbEZyYWdQYXJhbWV0ZXIoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBQQllURSAgICBwYnlCdWZmZXIsCi0gICAgVUlOVCAgICAgdVR4VHlwZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsCisgICAgdW5zaWduZWQgaW50IHVUeFR5cGUsCiAgICAgdm9pZCAqICAgcHZ0ZEN1cnIsCi0gICAgV09SRCAgICAgd0ZyYWdUeXBlLAotICAgIFVJTlQgICAgIGNiUmVxQ291bnQKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhZ1R5cGUsCisgICAgdW5zaWduZWQgaW50IGNiUmVxQ291bnQKICAgICApCiB7CiAgICAgUFNUeEJ1ZkhlYWQgcFR4QnVmSGVhZCA9IChQU1R4QnVmSGVhZCkgcGJ5QnVmZmVyOwpAQCAtMTI4OSw3ICsxMjc4LDcgQEAKICAgICAgICAgcHRkQ3Vyci0+bV93RklGT0N0bCA9IHBUeEJ1ZkhlYWQtPndGSUZPQ3RsOwogICAgICAgICBwdGRDdXJyLT5tX3dUaW1lU3RhbXAgPSBwVHhCdWZIZWFkLT53VGltZVN0YW1wOwogICAgICAgICAvL1NldCBUU1IxICYgUmVxQ291bnQgaW4gVHhEZXNjSGVhZAotICAgICAgICBwdGRDdXJyLT5tX3RkMVREMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNigoV09SRCkoY2JSZXFDb3VudCkpOworICAgICAgICBwdGRDdXJyLT5tX3RkMVREMS53UmVxQ291bnQgPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpKGNiUmVxQ291bnQpKTsKICAgICAgICAgaWYgKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIHsgLy9MYXN0IEZyYWdtZW50YXRpb24KICAgICAgICAgICAgIHB0ZEN1cnItPm1fdGQxVEQxLmJ5VENSIHw9IChUQ1JfU1RQIHwgVENSX0VEUCB8IEVETVNEVSk7CiAgICAgICAgIH0KQEAgLTEzMDEsNyArMTI5MCw3IEBACiAgICAgICAgIC8vUFNUeERlc2MgcHRkQ3VyciA9IChQU1R4RGVzYylzX3B2R2V0VHhEZXNjSGVhZChwRGV2aWNlLCB1VHhUeXBlLCB1Q3VySWR4KTsKICAgICAgICAgUFNUeERlc2MgcHRkQ3VyciA9IChQU1R4RGVzYylwdnRkQ3VycjsKICAgICAgICAgLy9TZXQgVFNSMSAmIFJlcUNvdW50IGluIFR4RGVzY0hlYWQKLSAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKFdPUkQpKGNiUmVxQ291bnQpKTsKKyAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYlJlcUNvdW50KSk7CiAgICAgICAgIGlmICh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9FTkRGUkFHKSB7IC8vTGFzdCBGcmFnbWVudGF0aW9uCiAgICAgICAgICAgICBwdGRDdXJyLT5tX3RkMVREMS5ieVRDUiB8PSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwogICAgICAgICB9CkBAIC0xMzEwLDgxICsxMjk5LDcwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAoV09SRCl3RnJhZ1R5cGU7Ly8weDAwMDE7IC8vMDAwMCAwMDAwIDAwMDAgMDAwMQorICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9ICh1bnNpZ25lZCBzaG9ydCl3RnJhZ1R5cGU7Ly8weDAwMDE7IC8vMDAwMCAwMDAwIDAwMDAgMDAwMQogCiAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInNfdkZpbGxGcmFnUGFyYW1ldGVyIEVORFxuIik7CiB9CiAKLXN0YXRpYwotVUlOVAotc19jYkZpbGxUeEJ1ZkhlYWQgKAotICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5UGt0VHlwZSwKLSAgICBQQllURSAgICAgICAgICAgIHBieVR4QnVmZmVyQWRkciwKLSAgICBVSU5UICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSwKLSAgICBVSU5UICAgICAgICAgICAgIHVETUFJZHgsCi0gICAgUFNUeERlc2MgICAgICAgICBwSGVhZFRELAotICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgUEJZVEUgICAgICAgICAgICBwUGFja2V0LAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRFbmNyeXB0LAotICAgIFBTS2V5SXRlbSAgICAgICAgcFRyYW5zbWl0S2V5LAotICAgIFVJTlQgICAgICAgICAgICAgdU5vZGVJbmRleCwKLSAgICBQVUlOVCAgICAgICAgICAgIHB1TUFDZnJhZ051bQotICAgICkKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NfY2JGaWxsVHhCdWZIZWFkKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLCB1bnNpZ25lZCBjaGFyICpwYnlUeEJ1ZmZlckFkZHIsCisJdW5zaWduZWQgaW50IGNiRnJhbWVCb2R5U2l6ZSwgdW5zaWduZWQgaW50IHVETUFJZHgsIFBTVHhEZXNjIHBIZWFkVEQsCisJUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlciwgdW5zaWduZWQgY2hhciAqcFBhY2tldCwgYm9vbCBiTmVlZEVuY3J5cHQsCisJUFNLZXlJdGVtIHBUcmFuc21pdEtleSwgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgsIHVuc2lnbmVkIGludCAqcHVNQUNmcmFnTnVtKQogewotICAgIFVJTlQgICAgICAgICAgIGNiTUFDSGRMZW47Ci0gICAgVUlOVCAgICAgICAgICAgY2JGcmFtZVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgY2JGcmFnbWVudFNpemU7IC8vSGRyKyhJVikrcGF5b2FkKyhNSUMpKyhJQ1YpK0ZDUwotICAgIFVJTlQgICAgICAgICAgIGNiRnJhZ1BheWxvYWRTaXplOwotICAgIFVJTlQgICAgICAgICAgIGNiTGFzdEZyYWdtZW50U2l6ZTsgLy9IZHIrKElWKStwYXlvYWQrKE1JQykrKElDVikrRkNTCi0gICAgVUlOVCAgICAgICAgICAgY2JMYXN0RnJhZ1BheWxvYWRTaXplOwotICAgIFVJTlQgICAgICAgICAgIHVGcmFnSWR4OwotICAgIFBCWVRFICAgICAgICAgIHBieVBheWxvYWRIZWFkOwotICAgIFBCWVRFICAgICAgICAgIHBieUlWSGVhZDsKLSAgICBQQllURSAgICAgICAgICBwYnlNYWNIZHI7Ci0gICAgV09SRCAgICAgICAgICAgd0ZyYWdUeXBlOyAvLzAwOk5vbi1GcmFnLCAwMTpTdGFydCwgMTA6TWlkLCAxMTpMYXN0Ci0gICAgVUlOVCAgICAgICAgICAgdUR1cmF0aW9uOwotICAgIFBCWVRFICAgICAgICAgIHBieUJ1ZmZlcjsKLS8vICAgIFVJTlQgICAgICAgICAgIHVLZXlFbnRyeUlkeCA9IE5VTV9LRVlfRU5UUlkrMTsKLS8vICAgIEJZVEUgICAgICAgICAgIGJ5S2V5U2VsID0gMHhGRjsKLSAgICBVSU5UICAgICAgICAgICBjYklWbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICBjYklDVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgY2JNSUNsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgIGNiRkNTbGVuID0gNDsKLSAgICBVSU5UICAgICAgICAgICBjYjgwMl8xX0hfbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICB1TGVuZ3RoID0gMDsKLSAgICBVSU5UICAgICAgICAgICB1VG1wTGVuID0gMDsKLS8vICAgIEJZVEUgICAgICAgICAgIGFieVRtcFs4XTsKLS8vICAgIERXT1JEICAgICAgICAgIGR3Q1JDOwotICAgIFVJTlQgICAgICAgICAgIGNiTUlDSERSID0gMDsKLSAgICBEV09SRCAgICAgICAgICBkd01JQ0tleTAsIGR3TUlDS2V5MTsKLSAgICBEV09SRCAgICAgICAgICBkd01JQ19Qcmlvcml0eTsKLSAgICBQRFdPUkQgICAgICAgICBwZHdNSUNfTDsKLSAgICBQRFdPUkQgICAgICAgICBwZHdNSUNfUjsKLSAgICBEV09SRCAgICAgICAgICBkd1NhZmVNSUNfTCwgZHdTYWZlTUlDX1I7IC8vRml4ICJMYXN0IEZyYWcgU2l6ZSIgPCAiTUlDIGxlbmd0aCIuCi0gICAgQk9PTCAgICAgICAgICAgYk1JQzJGcmFnID0gRkFMU0U7Ci0gICAgVUlOVCAgICAgICAgICAgdU1JQ0ZyYWdMZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgIHVNQUNmcmFnTnVtID0gMTsKLSAgICBVSU5UICAgICAgICAgICB1UGFkZGluZyA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgY2JSZXFDb3VudCA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiTUFDSGRMZW47CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVTaXplOworICAgIHVuc2lnbmVkIGludCBjYkZyYWdtZW50U2l6ZTsgLy9IZHIrKElWKStwYXlvYWQrKE1JQykrKElDVikrRkNTCisgICAgdW5zaWduZWQgaW50IGNiRnJhZ1BheWxvYWRTaXplOworICAgIHVuc2lnbmVkIGludCBjYkxhc3RGcmFnbWVudFNpemU7IC8vSGRyKyhJVikrcGF5b2FkKyhNSUMpKyhJQ1YpK0ZDUworICAgIHVuc2lnbmVkIGludCBjYkxhc3RGcmFnUGF5bG9hZFNpemU7CisgICAgdW5zaWduZWQgaW50IHVGcmFnSWR4OworICAgIHVuc2lnbmVkIGNoYXIgKnBieVBheWxvYWRIZWFkOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWSGVhZDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlNYWNIZHI7CisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlOyAvLzAwOk5vbi1GcmFnLCAwMTpTdGFydCwgMTA6TWlkLCAxMTpMYXN0CisgICAgdW5zaWduZWQgaW50IHVEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXI7CisvLyAgICB1bnNpZ25lZCBpbnQgdUtleUVudHJ5SWR4ID0gTlVNX0tFWV9FTlRSWSsxOworLy8gICAgdW5zaWduZWQgY2hhciBieUtleVNlbCA9IDB4RkY7CisgICAgdW5zaWduZWQgaW50IGNiSVZsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYklDVmxlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiTUlDbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JGQ1NsZW4gPSA0OworICAgIHVuc2lnbmVkIGludCBjYjgwMl8xX0hfbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdUxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVUbXBMZW4gPSAwOworLy8gICAgdW5zaWduZWQgY2hhciBhYnlUbXBbOF07CisvLyAgICB1bnNpZ25lZCBsb25nIGR3Q1JDOworICAgIHVuc2lnbmVkIGludCBjYk1JQ0hEUiA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBkd01JQ0tleTAsIGR3TUlDS2V5MTsKKyAgICB1bnNpZ25lZCBsb25nIGR3TUlDX1ByaW9yaXR5OworICAgIHVuc2lnbmVkIGxvbmcgKnBkd01JQ19MOworICAgIHVuc2lnbmVkIGxvbmcgKnBkd01JQ19SOworICAgIHVuc2lnbmVkIGxvbmcgZHdTYWZlTUlDX0wsIGR3U2FmZU1JQ19SOyAvL0ZpeCAiTGFzdCBGcmFnIFNpemUiIDwgIk1JQyBsZW5ndGgiLgorICAgIGJvb2wgYk1JQzJGcmFnID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IHVNSUNGcmFnTGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdU1BQ2ZyYWdOdW0gPSAxOworICAgIHVuc2lnbmVkIGludCB1UGFkZGluZyA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiUmVxQ291bnQgPSAwOwogCi0gICAgQk9PTCAgICAgICAgICAgYk5lZWRBQ0s7Ci0gICAgQk9PTCAgICAgICAgICAgYlJUUzsKLSAgICBCT09MICAgICAgICAgICBiSXNBZGhvYzsKLSAgICBQQllURSAgICAgICAgICBwYnlUeXBlOworICAgIGJvb2wgYk5lZWRBQ0s7CisgICAgYm9vbCBiUlRTOworICAgIGJvb2wgYklzQWRob2M7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHlwZTsKICAgICBQU1R4RGVzYyAgICAgICBwdGRDdXJyOwogICAgIFBTVHhCdWZIZWFkICAgIHBzVHhCdWZIZCA9IChQU1R4QnVmSGVhZCkgcGJ5VHhCdWZmZXJBZGRyOwotLy8gICAgVUlOVCAgICAgICAgICAgdG1wRGVzY0lkeDsKLSAgICBVSU5UICAgICAgICAgICBjYkhlYWRlckxlbmd0aCA9IDA7CisvLyAgICB1bnNpZ25lZCBpbnQgdG1wRGVzY0lkeDsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJMZW5ndGggPSAwOwogICAgIHZvaWQgKiAgICAgICAgIHB2UnJ2VGltZTsKICAgICBQU01JQ0hEUkhlYWQgICBwTUlDSERSOwogICAgIHZvaWQgKiAgICAgICAgIHB2UlRTOwogICAgIHZvaWQgKiAgICAgICAgIHB2Q1RTOwogICAgIHZvaWQgKiAgICAgICAgIHB2VHhEYXRhSGQ7Ci0gICAgV09SRCAgICAgICAgICAgd1R4QnVmU2l6ZTsgICAvLyBGRmluZm8gc2l6ZQotICAgIFVJTlQgICAgICAgICAgIHVUb3RhbENvcHlMZW5ndGggPSAwOwotICAgIEJZVEUgICAgICAgICAgIGJ5RkJPcHRpb24gPSBBVVRPX0ZCX05PTkU7Ci0gICAgQk9PTCAgICAgICAgICAgYklzV0VQMjU2ID0gRkFMU0U7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4QnVmU2l6ZTsgICAvLyBGRmluZm8gc2l6ZQorICAgIHVuc2lnbmVkIGludCB1VG90YWxDb3B5TGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RkJPcHRpb24gPSBBVVRPX0ZCX05PTkU7CisgICAgYm9vbCBiSXNXRVAyNTYgPSBmYWxzZTsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKIAogCkBAIC0xMzk0LDE5ICsxMzcyLDE2IEBACiAgICAgaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8CiAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApKSB7CiAKLSAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSB8fAotICAgICAgICAgICAgSVNfQlJPQURDQVNUX0FERFJFU1MoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpKSB7Ci0gICAgICAgICAgICBiTmVlZEFDSyA9IEZBTFNFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOwotICAgICAgICB9Ci0gICAgICAgIGJJc0FkaG9jID0gVFJVRTsKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpKQorCQliTmVlZEFDSyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiTmVlZEFDSyA9IHRydWU7CisgICAgICAgIGJJc0FkaG9jID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE1TRFVzIGluIEluZnJhIG1vZGUgYWx3YXlzIG5lZWQgQUNLCi0gICAgICAgIGJOZWVkQUNLID0gVFJVRTsKLSAgICAgICAgYklzQWRob2MgPSBGQUxTRTsKKyAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOworICAgICAgICBiSXNBZGhvYyA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmIChwRGV2aWNlLT5iTG9uZ0hlYWRlcikKQEAgLTE0MTUsMTIgKzEzOTAsMTIgQEAKICAgICAgICAgY2JNQUNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsKIAogCi0gICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSkgeworICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IHRydWUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkpIHsKICAgICAgICAgaWYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1dFUCkgewogICAgICAgICAgICAgY2JJVmxlbiA9IDQ7CiAgICAgICAgICAgICBjYklDVmxlbiA9IDQ7CiAgICAgICAgICAgICBpZiAocFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoID09IFdMQU5fV0VQMjMyX0tFWUxFTikgewotICAgICAgICAgICAgICAgIGJJc1dFUDI1NiA9IFRSVUU7CisgICAgICAgICAgICAgICAgYklzV0VQMjU2ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkgewpAQCAtMTQ0MywxNCArMTQxOCwxNCBAQAogCiAgICAgY2JGcmFtZVNpemUgPSBjYk1BQ0hkTGVuICsgY2JJVmxlbiArIChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgKyBjYklDVmxlbiArIGNiRkNTbGVuOwogCi0gICAgaWYgKChiTmVlZEFDSyA9PSBGQUxTRSkgfHwKKyAgICBpZiAoKGJOZWVkQUNLID09IGZhbHNlKSB8fAogICAgICAgICAoY2JGcmFtZVNpemUgPCBwRGV2aWNlLT53UlRTVGhyZXNob2xkKSB8fAogICAgICAgICAoKGNiRnJhbWVTaXplID49IHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkKSAmJiAocERldmljZS0+d0ZyYWdtZW50YXRpb25UaHJlc2hvbGQgPD0gcERldmljZS0+d1JUU1RocmVzaG9sZCkpCiAgICAgICAgICkgewotICAgICAgICBiUlRTID0gRkFMU0U7CisgICAgICAgIGJSVFMgPSBmYWxzZTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGJSVFMgPSBUUlVFOworICAgICAgICBiUlRTID0gdHJ1ZTsKICAgICAgICAgcHNUeEJ1ZkhkLT53RklGT0N0bCB8PSAoRklGT0NUTF9SVFMgfCBGSUZPQ1RMX0xSRVRSWSk7CiAgICAgfQogICAgIC8vCkBAIC0xNDY5LDcgKzE0NDQsNyBAQAogICAgIGlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUdCIHx8IGJ5UGt0VHlwZSA9PSBQS19UWVBFXzExR0EpIHsvLzgwMi4xMWcgcGFja2V0CiAKICAgICAgICAgaWYgKGJ5RkJPcHRpb24gPT0gQVVUT19GQl9OT05FKSB7Ci0gICAgICAgICAgICBpZiAoYlJUUyA9PSBUUlVFKSB7Ly9SVFNfbmVlZAorICAgICAgICAgICAgaWYgKGJSVFMgPT0gdHJ1ZSkgey8vUlRTX25lZWQKICAgICAgICAgICAgICAgICBwdlJydlRpbWUgPSAoUFNScnZUaW1lX2dSVFMpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplKTsKICAgICAgICAgICAgICAgICBwTUlDSERSID0gKFBTTUlDSERSSGVhZCkgKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUgKyBzaXplb2YoU1JydlRpbWVfZ1JUUykpOwogICAgICAgICAgICAgICAgIHB2UlRTID0gKFBTUlRTX2cpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2dSVFMpICsgY2JNSUNIRFIpOwpAQCAtMTQ4Nyw3ICsxNDYyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEF1dG8gRmFsbCBCYWNrCi0gICAgICAgICAgICBpZiAoYlJUUyA9PSBUUlVFKSB7Ly9SVFNfbmVlZAorICAgICAgICAgICAgaWYgKGJSVFMgPT0gdHJ1ZSkgey8vUlRTX25lZWQKICAgICAgICAgICAgICAgICBwdlJydlRpbWUgPSAoUFNScnZUaW1lX2dSVFMpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplKTsKICAgICAgICAgICAgICAgICBwTUlDSERSID0gKFBTTUlDSERSSGVhZCkgKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUgKyBzaXplb2YoU1JydlRpbWVfZ1JUUykpOwogICAgICAgICAgICAgICAgIHB2UlRTID0gKFBTUlRTX2dfRkIpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2dSVFMpICsgY2JNSUNIRFIpOwpAQCAtMTUwOCw3ICsxNDgzLDcgQEAKICAgICBlbHNlIHsvLzgwMi4xMWEvYiBwYWNrZXQKIAogICAgICAgICBpZiAoYnlGQk9wdGlvbiA9PSBBVVRPX0ZCX05PTkUpIHsKLSAgICAgICAgICAgIGlmIChiUlRTID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChiUlRTID09IHRydWUpIHsKICAgICAgICAgICAgICAgICBwdlJydlRpbWUgPSAoUFNScnZUaW1lX2FiKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSk7CiAgICAgICAgICAgICAgICAgcE1JQ0hEUiA9IChQU01JQ0hEUkhlYWQpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2FiKSk7CiAgICAgICAgICAgICAgICAgcHZSVFMgPSAoUFNSVFNfYWIpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2FiKSArIGNiTUlDSERSKTsKQEAgLTE1MjYsNyArMTUwMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBBdXRvIEZhbGwgQmFjawotICAgICAgICAgICAgaWYgKGJSVFMgPT0gVFJVRSkgey8vUlRTX25lZWQKKyAgICAgICAgICAgIGlmIChiUlRTID09IHRydWUpIHsvL1JUU19uZWVkCiAgICAgICAgICAgICAgICAgcHZScnZUaW1lID0gKFBTUnJ2VGltZV9hYikgKHBieVR4QnVmZmVyQWRkciArIHdUeEJ1ZlNpemUpOwogICAgICAgICAgICAgICAgIHBNSUNIRFIgPSAoUFNNSUNIRFJIZWFkKSAocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSArIHNpemVvZihTUnJ2VGltZV9hYikpOwogICAgICAgICAgICAgICAgIHB2UlRTID0gKFBTUlRTX2FfRkIpIChwYnlUeEJ1ZmZlckFkZHIgKyB3VHhCdWZTaXplICsgc2l6ZW9mKFNScnZUaW1lX2FiKSArIGNiTUlDSERSKTsKQEAgLTE1NDcsNDAgKzE1MjIsNDAgQEAKICAgICBtZW1zZXQoKHZvaWQgKikocGJ5VHhCdWZmZXJBZGRyICsgd1R4QnVmU2l6ZSksIDAsIChjYkhlYWRlckxlbmd0aCAtIHdUeEJ1ZlNpemUpKTsKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKKyAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogICAgICAgICBpZiAocERldmljZS0+cE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFOT05FKSB7Ci0gICAgICAgICAgICBkd01JQ0tleTAgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7Ci0gICAgICAgICAgICBkd01JQ0tleTEgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CisgICAgICAgICAgICBkd01JQ0tleTAgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7CisgICAgICAgICAgICBkd01JQ0tleTEgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHBUcmFuc21pdEtleS0+ZHdLZXlJbmRleCAmIEFVVEhFTlRJQ0FUT1JfS0VZKSAhPSAwKSB7Ci0gICAgICAgICAgICBkd01JQ0tleTAgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7Ci0gICAgICAgICAgICBkd01JQ0tleTEgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CisgICAgICAgICAgICBkd01JQ0tleTAgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7CisgICAgICAgICAgICBkd01JQ0tleTEgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkd01JQ0tleTAgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzI0XSk7Ci0gICAgICAgICAgICBkd01JQ0tleTEgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzI4XSk7CisgICAgICAgICAgICBkd01JQ0tleTAgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzI0XSk7CisgICAgICAgICAgICBkd01JQ0tleTEgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzI4XSk7CiAgICAgICAgIH0KICAgICAgICAgLy8gRE8gU29mdHdhcmUgTWljaGFlbAogICAgICAgICBNSUNfdkluaXQoZHdNSUNLZXkwLCBkd01JQ0tleTEpOwotICAgICAgICBNSUNfdkFwcGVuZCgoUEJZVEUpJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSksIDEyKTsKKyAgICAgICAgTUlDX3ZBcHBlbmQoKHVuc2lnbmVkIGNoYXIgKikmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSwgMTIpOwogICAgICAgICBkd01JQ19Qcmlvcml0eSA9IDA7Ci0gICAgICAgIE1JQ192QXBwZW5kKChQQllURSkmZHdNSUNfUHJpb3JpdHksIDQpOworICAgICAgICBNSUNfdkFwcGVuZCgodW5zaWduZWQgY2hhciAqKSZkd01JQ19Qcmlvcml0eSwgNCk7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTUlDIEtFWTogJWxYLCAlbFhcbiIsIGR3TUlDS2V5MCwgZHdNSUNLZXkxKTsKICAgICB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotICAgIHBieU1hY0hkciA9IChQQllURSkocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJMZW5ndGgpOwotICAgIHBieVBheWxvYWRIZWFkID0gKFBCWVRFKShwYnlNYWNIZHIgKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuKTsKLSAgICBwYnlJVkhlYWQgPSAoUEJZVEUpKHBieU1hY0hkciArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyk7CisgICAgcGJ5TWFjSGRyID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJMZW5ndGgpOworICAgIHBieVBheWxvYWRIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5TWFjSGRyICsgY2JNQUNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7CisgICAgcGJ5SVZIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5TWFjSGRyICsgY2JNQUNIZExlbiArIHVQYWRkaW5nKTsKIAotICAgIGlmICgoY2JGcmFtZVNpemUgPiBwRGV2aWNlLT53RnJhZ21lbnRhdGlvblRocmVzaG9sZCkgJiYgKGJOZWVkQUNLID09IFRSVUUpICYmIChiSXNXRVAyNTYgPT0gRkFMU0UpKSB7CisgICAgaWYgKChjYkZyYW1lU2l6ZSA+IHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkKSAmJiAoYk5lZWRBQ0sgPT0gdHJ1ZSkgJiYgKGJJc1dFUDI1NiA9PSBmYWxzZSkpIHsKICAgICAgICAgLy8gRnJhZ21lbnRhdGlvbgogICAgICAgICAvLyBGcmFnVGhyZXNob2xkID0gRnJhZ21lbnQgc2l6ZShIZHIrKElWKStmcmFnbWVudCBwYXlsb2FkKyhNSUMpKyhJQ1YpK0ZDUykKICAgICAgICAgY2JGcmFnbWVudFNpemUgPSBwRGV2aWNlLT53RnJhZ21lbnRhdGlvblRocmVzaG9sZDsKICAgICAgICAgY2JGcmFnUGF5bG9hZFNpemUgPSBjYkZyYWdtZW50U2l6ZSAtIGNiTUFDSGRMZW4gLSBjYklWbGVuIC0gY2JJQ1ZsZW4gLSBjYkZDU2xlbjsKICAgICAgICAgLy9GcmFnTnVtID0gKEZyYW1lU2l6ZS0oSGRyK0ZDUykpLyhGcmFnbWVudCBTaXplIC0oSHJkK0ZDUykpKQotICAgICAgICB1TUFDZnJhZ051bSA9IChXT1JEKSAoKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSAvIGNiRnJhZ1BheWxvYWRTaXplKTsKKyAgICAgICAgdU1BQ2ZyYWdOdW0gPSAodW5zaWduZWQgc2hvcnQpICgoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pIC8gY2JGcmFnUGF5bG9hZFNpemUpOwogICAgICAgICBjYkxhc3RGcmFnUGF5bG9hZFNpemUgPSAoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pICUgY2JGcmFnUGF5bG9hZFNpemU7CiAgICAgICAgIGlmIChjYkxhc3RGcmFnUGF5bG9hZFNpemUgPT0gMCkgewogICAgICAgICAgICAgY2JMYXN0RnJhZ1BheWxvYWRTaXplID0gY2JGcmFnUGF5bG9hZFNpemU7CkBAIC0xNjA2LDEzICsxNTgxLDEzIEBACiAgICAgICAgICAgICAgICAgdUR1cmF0aW9uID0gc191RmlsbERhdGFIZWFkKHBEZXZpY2UsIGJ5UGt0VHlwZSwgcHZUeERhdGFIZCwgY2JGcmFnbWVudFNpemUsIHVETUFJZHgsIGJOZWVkQUNLLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1RnJhZ0lkeCwgY2JMYXN0RnJhZ21lbnRTaXplLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbiwgcERldmljZS0+d0N1cnJlbnRSYXRlKTsKICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBUWCBNQUMgSGVhZGVyCi0gICAgICAgICAgICAgICAgdkdlbmVyYXRlTUFDSGVhZGVyKHBEZXZpY2UsIHBieU1hY0hkciwgKFdPUkQpdUR1cmF0aW9uLCBwc0V0aEhlYWRlciwgYk5lZWRFbmNyeXB0LAorICAgICAgICAgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCl1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmFnVHlwZSwgdURNQUlkeCwgdUZyYWdJZHgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vRmlsbCBUWEtFWQotICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplLCAoUEJZVEUpcE1JQ0hEUik7CisgICAgICAgICAgICAgICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSKTsKICAgICAgICAgICAgICAgICAgICAgLy9GaWxsIElWKEV4dElWLFJTTkhEUikKICAgICAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3VFNDNDdfMTYgPSBwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTY7CkBAIC0xNjI1LDEzICsxNjAwLDEzIEBACiAgICAgICAgICAgICAgICAgaWYgKG50b2hzKHBzRXRoSGVhZGVyLT53VHlwZSkgPiBFVEhfREFUQV9MRU4pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChwc0V0aEhlYWRlci0+d1R5cGUgPT0gVFlQRV9QS1RfSVBYKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgKHBzRXRoSGVhZGVyLT53VHlwZSA9PSBjcHVfdG9fbGUxNigweEYzODApKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChQQllURSkgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsWzBdLCA2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgodW5zaWduZWQgY2hhciAqKSAocGJ5UGF5bG9hZEhlYWQpLCAmcERldmljZS0+YWJ5U05BUF9CcmlkZ2V0dW5uZWxbMF0sIDYpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChQQllURSkgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MlswXSwgNik7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MlswXSwgNik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcGJ5VHlwZSA9IChQQllURSkgKHBieVBheWxvYWRIZWFkICsgNik7Ci0gICAgICAgICAgICAgICAgICAgIG1lbWNweShwYnlUeXBlLCAmKHBzRXRoSGVhZGVyLT53VHlwZSksIHNpemVvZihXT1JEKSk7CisgICAgICAgICAgICAgICAgICAgIHBieVR5cGUgPSAodW5zaWduZWQgY2hhciAqKSAocGJ5UGF5bG9hZEhlYWQgKyA2KTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBieVR5cGUsICYocHNFdGhIZWFkZXItPndUeXBlKSwgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICAgICAgICAgICAgICAgICAgIGNiODAyXzFfSF9sZW4gPSA4OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTY0MSwxNSArMTYxNiwxNSBAQAogICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgLy9GaWxsIE1JQ0hEUgogICAgICAgICAgICAgICAgIC8vaWYgKHBEZXZpY2UtPmJBRVMpIHsKLSAgICAgICAgICAgICAgICAvLyAgICBzX3ZGaWxsTUlDSERSKHBEZXZpY2UsIChQQllURSlwTUlDSERSLCBwYnlNYWNIZHIsIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplKTsKKyAgICAgICAgICAgICAgICAvLyAgICBzX3ZGaWxsTUlDSERSKHBEZXZpY2UsICh1bnNpZ25lZCBjaGFyICopcE1JQ0hEUiwgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUpOwogICAgICAgICAgICAgICAgIC8vfQogICAgICAgICAgICAgICAgIC8vY2JSZXFDb3VudCArPSBzX3VEb0VuY3J5cHRpb24ocERldmljZSwgcHNFdGhIZWFkZXIsICh2b2lkICopcHNUeEJ1ZkhkLCBieUtleVNlbCwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5UGF5bG9hZEhlYWQsIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplLCB1RE1BSWR4KTsKKyAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5UGF5bG9hZEhlYWQsICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSwgdURNQUlkeCk7CiAKIAogCi0gICAgICAgICAgICAgICAgLy9wYnlCdWZmZXIgPSAoUEJZVEUpcERldmljZS0+YWFtVHhCdWZbdURNQUlkeF1bdURlc2NJZHhdLnBieVZBZGRyOwotICAgICAgICAgICAgICAgIHBieUJ1ZmZlciA9IChQQllURSlwSGVhZFRELT5wVERJbmZvLT5idWY7CisgICAgICAgICAgICAgICAgLy9wYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3VEZXNjSWR4XS5wYnlWQWRkcjsKKyAgICAgICAgICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBIZWFkVEQtPnBUREluZm8tPmJ1ZjsKIAogICAgICAgICAgICAgICAgIHVMZW5ndGggPSBjYkhlYWRlckxlbmd0aCArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4gKyBjYjgwMl8xX0hfbGVuOwogICAgICAgICAgICAgICAgIC8vY29weSBUeEJ1ZmZlckhlYWRlciArIE1hY0hlYWRlciB0byBkZXNjCkBAIC0xNjYxLDcgKzE2MzYsNyBAQAogCiAgICAgICAgICAgICAgICAgdVRvdGFsQ29weUxlbmd0aCArPSBjYkZyYWdQYXlsb2FkU2l6ZSAtIGNiODAyXzFfSF9sZW47CiAKLSAgICAgICAgICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgeworICAgICAgICAgICAgICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IHRydWUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU3RhcnQgTUlDOiAlZFxuIiwgY2JGcmFnUGF5bG9hZFNpemUpOwogICAgICAgICAgICAgICAgICAgICBNSUNfdkFwcGVuZCgocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4pLCBjYkZyYWdQYXlsb2FkU2l6ZSk7CiAKQEAgLTE2NzIsNyArMTY0Nyw3IEBACiAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYk5lZWRFbmNyeXB0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCAocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4pLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCAocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4pLCAodW5zaWduZWQgc2hvcnQpY2JGcmFnUGF5bG9hZFNpemUpOwogICAgICAgICAgICAgICAgICAgICAgICAgY2JSZXFDb3VudCArPSBjYklDVmxlbjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTE3MTEsMTMgKzE2ODYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUZyYWdJZHgsIGNiTGFzdEZyYWdtZW50U2l6ZSwgdU1BQ2ZyYWdOdW0sIGJ5RkJPcHRpb24sIHBEZXZpY2UtPndDdXJyZW50UmF0ZSk7CiAKICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBUWCBNQUMgSGVhZGVyCi0gICAgICAgICAgICAgICAgdkdlbmVyYXRlTUFDSGVhZGVyKHBEZXZpY2UsIHBieU1hY0hkciwgKFdPUkQpdUR1cmF0aW9uLCBwc0V0aEhlYWRlciwgYk5lZWRFbmNyeXB0LAorICAgICAgICAgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCl1RHVyYXRpb24sIHBzRXRoSGVhZGVyLCBiTmVlZEVuY3J5cHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmFnVHlwZSwgdURNQUlkeCwgdUZyYWdJZHgpOwogCi0gICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vRmlsbCBUWEtFWQotICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsIChXT1JEKWNiTGFzdEZyYWdQYXlsb2FkU2l6ZSwgKFBCWVRFKXBNSUNIRFIpOworICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKikocHNUeEJ1ZkhkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JMYXN0RnJhZ1BheWxvYWRTaXplLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2OwpAQCAtMTczNCw4ICsxNzA5LDggQEAKIAogCiAKLSAgICAgICAgICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpcEhlYWRURC0+cFRESW5mby0+YnVmOwotICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKFBCWVRFKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3RtcERlc2NJZHhdLnBieVZBZGRyOworICAgICAgICAgICAgICAgIHBieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcEhlYWRURC0+cFRESW5mby0+YnVmOworICAgICAgICAgICAgICAgIC8vcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwRGV2aWNlLT5hYW1UeEJ1Zlt1RE1BSWR4XVt0bXBEZXNjSWR4XS5wYnlWQWRkcjsKIAogICAgICAgICAgICAgICAgIHVMZW5ndGggPSBjYkhlYWRlckxlbmd0aCArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW47CiAKQEAgLTE3NDMsNyArMTcxOCw3IEBACiAgICAgICAgICAgICAgICAgbWVtY3B5KHBieUJ1ZmZlciwgKHZvaWQgKilwc1R4QnVmSGQsIHVMZW5ndGgpOwogCiAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgUGFja2V0IGludG8gYSB0eCBCdWZmZXIKLSAgICAgICAgICAgICAgICBpZiAoYk1JQzJGcmFnID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgaWYgKGJNSUMyRnJhZyA9PSBmYWxzZSkgewogCiAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgocGJ5QnVmZmVyICsgdUxlbmd0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwUGFja2V0ICsgMTQgKyB1VG90YWxDb3B5TGVuZ3RoKSwKQEAgLTE3NTMsMzYgKzE3MjgsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgdVRtcExlbiA9IGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSAtIGNiTUlDbGVuOwogCiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IFRSVUUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKSB7CisgICAgICAgICAgICAgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJMQVNUOiB1TUlDRnJhZ0xlbjolZCwgY2JMYXN0RnJhZ1BheWxvYWRTaXplOiVkLCB1VG1wTGVuOiVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1TUlDRnJhZ0xlbiwgY2JMYXN0RnJhZ1BheWxvYWRTaXplLCB1VG1wTGVuKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoYk1JQzJGcmFnID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiTUlDMkZyYWcgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1VG1wTGVuICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHBieUJ1ZmZlciArIHVMZW5ndGgpLCB1VG1wTGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBkd01JQ19MID0gKFBEV09SRCkocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX1IgPSAoUERXT1JEKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbiArIDQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX0wgPSAodW5zaWduZWQgbG9uZyAqKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBwZHdNSUNfUiA9ICh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuICsgNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBNSUNfdkdldE1JQyhwZHdNSUNfTCwgcGR3TUlDX1IpOwogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJMYXN0IE1JQzolbFgsICVsWFxuIiwgKnBkd01JQ19MLCAqcGR3TUlDX1IpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVNSUNGcmFnTGVuID49IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoKFBCWVRFKSZkd1NhZmVNSUNfUiArICh1TUlDRnJhZ0xlbiAtIDQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoKHVuc2lnbmVkIGNoYXIgKikmZHdTYWZlTUlDX1IgKyAodU1JQ0ZyYWdMZW4gLSA0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNiTUlDbGVuIC0gdU1JQ0ZyYWdMZW4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkxBU1Q6IHVNSUNGcmFnTGVuID49IDQ6ICVYLCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKFBCWVRFKSgoUEJZVEUpJmR3U2FmZU1JQ19SICsgKHVNSUNGcmFnTGVuIC0gNCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgY2hhciAqKSZkd1NhZmVNSUNfUiArICh1TUlDRnJhZ0xlbiAtIDQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2JNSUNsZW4gLSB1TUlDRnJhZ0xlbikpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgocGJ5QnVmZmVyICsgdUxlbmd0aCksICgoUEJZVEUpJmR3U2FmZU1JQ19MICsgdU1JQ0ZyYWdMZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgocGJ5QnVmZmVyICsgdUxlbmd0aCksICgodW5zaWduZWQgY2hhciAqKSZkd1NhZmVNSUNfTCArIHVNSUNGcmFnTGVuKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNCAtIHVNSUNGcmFnTGVuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KChwYnlCdWZmZXIgKyB1TGVuZ3RoICsgKDQgLSB1TUlDRnJhZ0xlbikpLCAmZHdTYWZlTUlDX1IsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTEFTVDogdU1JQ0ZyYWdMZW4gPCA0OiAlWCwgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihQQllURSkoKFBCWVRFKSZkd1NhZmVNSUNfUiArIHVNSUNGcmFnTGVuIC0gNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopKCh1bnNpZ25lZCBjaGFyICopJmR3U2FmZU1JQ19SICsgdU1JQ0ZyYWdMZW4gLSA0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2JNSUNsZW4gLSB1TUlDRnJhZ0xlbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSArIDggKyAyNDsgaWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKChQQllURSkoKHBieUJ1ZmZlciArIHVMZW5ndGgpICsgaWkgLSA4IC0gMjQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKHVuc2lnbmVkIGNoYXIgKikoKHBieUJ1ZmZlciArIHVMZW5ndGgpICsgaWkgLSA4IC0gMjQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzk4LDcgKzE3NzMsNyBAQAogICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAoV09SRCljYkxhc3RGcmFnUGF5bG9hZFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgc192U1dlbmNyeXB0aW9uKHBEZXZpY2UsIHBUcmFuc21pdEtleSwgKHBieUJ1ZmZlciArIHVMZW5ndGgpLCAodW5zaWduZWQgc2hvcnQpY2JMYXN0RnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNiUmVxQ291bnQgKz0gY2JJQ1ZsZW47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xODQxLDE0ICsxODE2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVGcmFnSWR4LCBjYkxhc3RGcmFnbWVudFNpemUsIHVNQUNmcmFnTnVtLCBieUZCT3B0aW9uLCBwRGV2aWNlLT53Q3VycmVudFJhdGUpOwogCiAgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgVFggTUFDIEhlYWRlcgotICAgICAgICAgICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsIChXT1JEKXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKKyAgICAgICAgICAgICAgICB2R2VuZXJhdGVNQUNIZWFkZXIocERldmljZSwgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpdUR1cmF0aW9uLCBwc0V0aEhlYWRlciwgYk5lZWRFbmNyeXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RnJhZ1R5cGUsIHVETUFJZHgsIHVGcmFnSWR4KTsKIAogCi0gICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vRmlsbCBUWEtFWQotICAgICAgICAgICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplLCAoUEJZVEUpcE1JQ0hEUik7CisgICAgICAgICAgICAgICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uZHdUU0M0N18xNiA9IHBUcmFuc21pdEtleS0+ZHdUU0M0N18xNjsKQEAgLTE4NjIsMTQgKzE4MzcsMTQgQEAKICAgICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgIC8vRmlsbCBNSUNIRFIKICAgICAgICAgICAgICAgICAvL2lmIChwRGV2aWNlLT5iQUVTKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAoUEJZVEUpcE1JQ0hEUiwgcGJ5TWFjSGRyLCAoV09SRCljYkZyYWdQYXlsb2FkU2l6ZSk7CisgICAgICAgICAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIsIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgICAgICAvL2NiUmVxQ291bnQgKz0gc191RG9FbmNyeXB0aW9uKHBEZXZpY2UsIHBzRXRoSGVhZGVyLCAodm9pZCAqKXBzVHhCdWZIZCwgYnlLZXlTZWwsCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlQYXlsb2FkSGVhZCwgKFdPUkQpY2JGcmFnUGF5bG9hZFNpemUsIHVETUFJZHgpOworICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5UGF5bG9hZEhlYWQsICh1bnNpZ25lZCBzaG9ydCljYkZyYWdQYXlsb2FkU2l6ZSwgdURNQUlkeCk7CiAKIAotICAgICAgICAgICAgICAgIHBieUJ1ZmZlciA9IChQQllURSlwSGVhZFRELT5wVERJbmZvLT5idWY7Ci0gICAgICAgICAgICAgICAgLy9wYnlCdWZmZXIgPSAoUEJZVEUpcERldmljZS0+YWFtVHhCdWZbdURNQUlkeF1bdG1wRGVzY0lkeF0ucGJ5VkFkZHI7CisgICAgICAgICAgICAgICAgcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwSGVhZFRELT5wVERJbmZvLT5idWY7CisgICAgICAgICAgICAgICAgLy9wYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXBEZXZpY2UtPmFhbVR4QnVmW3VETUFJZHhdW3RtcERlc2NJZHhdLnBieVZBZGRyOwogCiAKICAgICAgICAgICAgICAgICB1TGVuZ3RoID0gY2JIZWFkZXJMZW5ndGggKyBjYk1BQ0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuOwpAQCAtMTg4NiwxNyArMTg2MSwxNyBAQAogCiAgICAgICAgICAgICAgICAgdVRvdGFsQ29weUxlbmd0aCArPSB1VG1wTGVuOwogCi0gICAgICAgICAgICAgICAgaWYgKChiTmVlZEVuY3J5cHQgPT0gVFJVRSkgJiYgKHBUcmFuc21pdEtleSAhPSBOVUxMKSAmJiAocFRyYW5zbWl0S2V5LT5ieUNpcGhlclN1aXRlID09IEtFWV9DVExfVEtJUCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSB0cnVlKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogCiAgICAgICAgICAgICAgICAgICAgIE1JQ192QXBwZW5kKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgdVRtcExlbik7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHVUbXBMZW4gPCBjYkZyYWdQYXlsb2FkU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYk1JQzJGcmFnID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJNSUMyRnJhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB1TUlDRnJhZ0xlbiA9IGNiRnJhZ1BheWxvYWRTaXplIC0gdVRtcExlbjsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh1TUlDRnJhZ0xlbiA8IGNiTUlDbGVuKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgcGR3TUlDX0wgPSAoUERXT1JEKShwYnlCdWZmZXIgKyB1TGVuZ3RoICsgdVRtcExlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZHdNSUNfUiA9IChQRFdPUkQpKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuICsgNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZHdNSUNfTCA9ICh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBkd01JQ19SID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4gKyA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIE1JQ192R2V0TUlDKHBkd01JQ19MLCBwZHdNSUNfUik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkd1NhZmVNSUNfTCA9ICpwZHdNSUNfTDsKICAgICAgICAgICAgICAgICAgICAgICAgIGR3U2FmZU1JQ19SID0gKnBkd01JQ19SOwpAQCAtMTkwNiw3ICsxODgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRmlsbCBNSUMgaW4gTWlkZGxlIGZyYWcgWyVkXVxuIiwgdU1JQ0ZyYWdMZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHVNSUNGcmFnTGVuOyBpaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKFBCWVRFKSgocGJ5QnVmZmVyICsgdUxlbmd0aCArIHVUbXBMZW4pICsgaWkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIlMDJ4ICIsICooKHVuc2lnbmVkIGNoYXIgKikoKHBieUJ1ZmZlciArIHVMZW5ndGggKyB1VG1wTGVuKSArIGlpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE5MTUsNyArMTg5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iTWlkZGxlIGZyYWcgbGVuOiAlZFxuIiwgdVRtcExlbik7CiAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHVUbXBMZW47IGlpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKChQQllURSkoKHBieUJ1ZmZlciArIHVMZW5ndGgpICsgaWkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigodW5zaWduZWQgY2hhciAqKSgocGJ5QnVmZmVyICsgdUxlbmd0aCkgKyBpaSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE5MjYsNyArMTkwMSw3IEBACiAKICAgICAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmJ5TG9jYWxJRCA8PSBSRVZfSURfVlQzMjUzX0ExKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYk5lZWRFbmNyeXB0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCAocGJ5QnVmZmVyICsgdUxlbmd0aCksIChXT1JEKWNiRnJhZ1BheWxvYWRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNfdlNXZW5jcnlwdGlvbihwRGV2aWNlLCBwVHJhbnNtaXRLZXksIChwYnlCdWZmZXIgKyB1TGVuZ3RoKSwgKHVuc2lnbmVkIHNob3J0KWNiRnJhZ1BheWxvYWRTaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNiUmVxQ291bnQgKz0gY2JJQ1ZsZW47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xOTYxLDcgKzE5MzYsNyBAQAogICAgICAgICB3RnJhZ1R5cGUgPSBGUkFHQ1RMX05PTkZSQUc7CiAKICAgICAgICAgLy9TZXQgRnJhZ0N0bCBpbiBUeEJ1ZmZlckhlYWQKLSAgICAgICAgcHNUeEJ1ZkhkLT53RnJhZ0N0bCB8PSAoV09SRCl3RnJhZ1R5cGU7CisgICAgICAgIHBzVHhCdWZIZC0+d0ZyYWdDdGwgfD0gKHVuc2lnbmVkIHNob3J0KXdGcmFnVHlwZTsKIAogICAgICAgICAvL0ZpbGwgRklGTyxScnZUaW1lLFJUUyxhbmQgQ1RTCiAgICAgICAgIHNfdkdlbmVyYXRlVHhQYXJhbWV0ZXIocERldmljZSwgYnlQa3RUeXBlLCAodm9pZCAqKXBzVHhCdWZIZCwgcHZScnZUaW1lLCBwdlJUUywgcHZDVFMsCkBAIC0xOTcxLDEzICsxOTQ2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB1TUFDZnJhZ051bSwgYnlGQk9wdGlvbiwgcERldmljZS0+d0N1cnJlbnRSYXRlKTsKIAogICAgICAgICAvLyBHZW5lcmF0ZSBUWCBNQUMgSGVhZGVyCi0gICAgICAgIHZHZW5lcmF0ZU1BQ0hlYWRlcihwRGV2aWNlLCBwYnlNYWNIZHIsIChXT1JEKXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKKyAgICAgICAgdkdlbmVyYXRlTUFDSGVhZGVyKHBEZXZpY2UsIHBieU1hY0hkciwgKHVuc2lnbmVkIHNob3J0KXVEdXJhdGlvbiwgcHNFdGhIZWFkZXIsIGJOZWVkRW5jcnlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGcmFnVHlwZSwgdURNQUlkeCwgMCk7CiAKLSAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSB7CisgICAgICAgIGlmIChiTmVlZEVuY3J5cHQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgLy9GaWxsIFRYS0VZCi0gICAgICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAoV09SRCljYkZyYW1lQm9keVNpemUsIChQQllURSlwTUlDSERSKTsKKyAgICAgICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShwc1R4QnVmSGQtPmFkd1R4S2V5KSwgcGJ5SVZIZWFkLCBwVHJhbnNtaXRLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFtZUJvZHlTaXplLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIpOwogCiAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVApIHsKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmR3VFNDNDdfMTYgPSBwVHJhbnNtaXRLZXktPmR3VFNDNDdfMTY7CkBAIC0xOTg5LDEzICsxOTY0LDEzIEBACiAgICAgICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gRVRIX0RBVEFfTEVOKSB7CiAgICAgICAgICAgICBpZiAoKHBzRXRoSGVhZGVyLT53VHlwZSA9PSBUWVBFX1BLVF9JUFgpIHx8CiAgICAgICAgICAgICAgICAgKHBzRXRoSGVhZGVyLT53VHlwZSA9PSBjcHVfdG9fbGUxNigweEYzODApKSkgewotICAgICAgICAgICAgICAgIG1lbWNweSgoUEJZVEUpIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSwgNik7CisgICAgICAgICAgICAgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopIChwYnlQYXlsb2FkSGVhZCksICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSwgNik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoKFBCWVRFKSAocGJ5UGF5bG9hZEhlYWQpLCAmcERldmljZS0+YWJ5U05BUF9SRkMxMDQyWzBdLCA2KTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikgKHBieVBheWxvYWRIZWFkKSwgJnBEZXZpY2UtPmFieVNOQVBfUkZDMTA0MlswXSwgNik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYnlUeXBlID0gKFBCWVRFKSAocGJ5UGF5bG9hZEhlYWQgKyA2KTsKLSAgICAgICAgICAgIG1lbWNweShwYnlUeXBlLCAmKHBzRXRoSGVhZGVyLT53VHlwZSksIHNpemVvZihXT1JEKSk7CisgICAgICAgICAgICBwYnlUeXBlID0gKHVuc2lnbmVkIGNoYXIgKikgKHBieVBheWxvYWRIZWFkICsgNik7CisgICAgICAgICAgICBtZW1jcHkocGJ5VHlwZSwgJihwc0V0aEhlYWRlci0+d1R5cGUpLCBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgICAgICAgICAgIGNiODAyXzFfSF9sZW4gPSA4OwogICAgICAgICB9CiAKQEAgLTIwMDYsMTEgKzE5ODEsMTEgQEAKICAgICAgICAgLy9GaWxsIE1JQ0hEUgogICAgICAgICAvL2lmIChwRGV2aWNlLT5iQUVTKSB7CiAgICAgICAgIC8vICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iRmlsbCBNSUNIRFIuLi5cbiIpOwotICAgICAgICAvLyAgICBzX3ZGaWxsTUlDSERSKHBEZXZpY2UsIChQQllURSlwTUlDSERSLCBwYnlNYWNIZHIsIChXT1JEKWNiRnJhbWVCb2R5U2l6ZSk7CisgICAgICAgIC8vICAgIHNfdkZpbGxNSUNIRFIocERldmljZSwgKHVuc2lnbmVkIGNoYXIgKilwTUlDSERSLCBwYnlNYWNIZHIsICh1bnNpZ25lZCBzaG9ydCljYkZyYW1lQm9keVNpemUpOwogICAgICAgICAvL30KIAotICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpcEhlYWRURC0+cFRESW5mby0+YnVmOwotICAgICAgICAvL3BieUJ1ZmZlciA9IChQQllURSlwRGV2aWNlLT5hYW1UeEJ1Zlt1RE1BSWR4XVt1RGVzY0lkeF0ucGJ5VkFkZHI7CisgICAgICAgIHBieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcEhlYWRURC0+cFRESW5mby0+YnVmOworICAgICAgICAvL3BieUJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopcERldmljZS0+YWFtVHhCdWZbdURNQUlkeF1bdURlc2NJZHhdLnBieVZBZGRyOwogCiAgICAgICAgIHVMZW5ndGggPSBjYkhlYWRlckxlbmd0aCArIGNiTUFDSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4gKyBjYjgwMl8xX0hfbGVuOwogCkBAIC0yMDIzLDI5ICsxOTk4LDI5IEBACiAgICAgICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSAtIGNiODAyXzFfSF9sZW4KICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICBpZiAoKGJOZWVkRW5jcnlwdCA9PSBUUlVFKSAmJiAocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSl7CisgICAgICAgIGlmICgoYk5lZWRFbmNyeXB0ID09IHRydWUpICYmIChwVHJhbnNtaXRLZXkgIT0gTlVMTCkgJiYgKHBUcmFuc21pdEtleS0+YnlDaXBoZXJTdWl0ZSA9PSBLRVlfQ1RMX1RLSVApKXsKIAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJMZW5ndGg6JWQsICVkXG4iLCBjYkZyYW1lQm9keVNpemUgLSBjYjgwMl8xX0hfbGVuLCB1TGVuZ3RoKTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCAoY2JGcmFtZUJvZHlTaXplIC0gY2I4MDJfMV9IX2xlbik7IGlpKyspIHsKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigoUEJZVEUpKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpKSkpOworICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iJTAyeCAiLCAqKCh1bnNpZ25lZCBjaGFyICopKChwYnlCdWZmZXIgKyB1TGVuZ3RoKSArIGlpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJcbiIpOwogICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuKSwgY2JGcmFtZUJvZHlTaXplKTsKIAotICAgICAgICAgICAgcGR3TUlDX0wgPSAoUERXT1JEKShwYnlCdWZmZXIgKyB1TGVuZ3RoIC0gY2I4MDJfMV9IX2xlbiArIGNiRnJhbWVCb2R5U2l6ZSk7Ci0gICAgICAgICAgICBwZHdNSUNfUiA9IChQRFdPUkQpKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuICsgY2JGcmFtZUJvZHlTaXplICsgNCk7CisgICAgICAgICAgICBwZHdNSUNfTCA9ICh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIHVMZW5ndGggLSBjYjgwMl8xX0hfbGVuICsgY2JGcmFtZUJvZHlTaXplKTsKKyAgICAgICAgICAgIHBkd01JQ19SID0gKHVuc2lnbmVkIGxvbmcgKikocGJ5QnVmZmVyICsgdUxlbmd0aCAtIGNiODAyXzFfSF9sZW4gKyBjYkZyYW1lQm9keVNpemUgKyA0KTsKIAogICAgICAgICAgICAgTUlDX3ZHZXRNSUMocGR3TUlDX0wsIHBkd01JQ19SKTsKICAgICAgICAgICAgIE1JQ192VW5Jbml0KCk7CiAKIAotICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICpwZHdNSUNfTCA9IDA7CiAgICAgICAgICAgICAgICAgKnBkd01JQ19SID0gMDsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iVHhNSUNGYWlsID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcERldmljZS0+YlR4TUlDRmFpbCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPInVMZW5ndGg6ICVkLCAlZFxuIiwgdUxlbmd0aCwgY2JGcmFtZUJvZHlTaXplKTsKQEAgLTIwNTMsNyArMjAyOCw3IEBACiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIk1JQzolbHgsICVseFxuIiwgKnBkd01JQ19MLCAqcGR3TUlDX1IpOwogLyoKICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IDg7IGlpKyspIHsKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigoKFBCWVRFKShwZHdNSUNfTCkgKyBpaSkpKTsKKyAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiUwMnggIiwgKigoKHVuc2lnbmVkIGNoYXIgKikocGR3TUlDX0wpICsgaWkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlxuIik7CiAqLwpAQCAtMjA2NCw3ICsyMDM5LDcgQEAKICAgICAgICAgaWYgKChwRGV2aWNlLT5ieUxvY2FsSUQgPD0gUkVWX0lEX1ZUMzI1M19BMSkpewogICAgICAgICAgICAgaWYgKGJOZWVkRW5jcnlwdCkgewogICAgICAgICAgICAgICAgIHNfdlNXZW5jcnlwdGlvbihwRGV2aWNlLCBwVHJhbnNtaXRLZXksIChwYnlCdWZmZXIgKyB1TGVuZ3RoIC0gY2I4MDJfMV9IX2xlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXT1JEKShjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgc2hvcnQpKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSk7CiAgICAgICAgICAgICAgICAgY2JSZXFDb3VudCArPSBjYklDVmxlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjA3OCw3ICsyMDUzLDcgQEAKICAgICAgICAgcHRkQ3Vyci0+YnVmZl9hZGRyID0gY3B1X3RvX2xlMzIocHRkQ3Vyci0+cFRESW5mby0+c2tiX2RtYSk7CiAgIAkgICAgLy9TZXQgVFNSMSAmIFJlcUNvdW50IGluIFR4RGVzY0hlYWQKICAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEuYnlUQ1IgfD0gKFRDUl9TVFAgfCBUQ1JfRURQIHwgRURNU0RVKTsKLSAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKFdPUkQpKGNiUmVxQ291bnQpKTsKKyAgICAgICAgcHRkQ3Vyci0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYlJlcUNvdW50KSk7CiAKICAgICAgICAgcERldmljZS0+aVREVXNlZFt1RE1BSWR4XSsrOwogCkBAIC0yMDk0LDI2ICsyMDY5LDE2IEBACiAKIAogdm9pZAotdkdlbmVyYXRlRklGT0hlYWRlciAoCi0gICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIEJZVEUgICAgICAgICAgICAgYnlQa3RUeXBlLAotICAgIFBCWVRFICAgICAgICAgICAgcGJ5VHhCdWZmZXJBZGRyLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRFbmNyeXB0LAotICAgIFVJTlQgICAgICAgICAgICAgY2JQYXlsb2FkU2l6ZSwKLSAgICBVSU5UICAgICAgICAgICAgIHVETUFJZHgsCi0gICAgUFNUeERlc2MgICAgICAgICBwSGVhZFRELAotICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgUEJZVEUgICAgICAgICAgICBwUGFja2V0LAotICAgIFBTS2V5SXRlbSAgICAgICAgcFRyYW5zbWl0S2V5LAotICAgIFVJTlQgICAgICAgICAgICAgdU5vZGVJbmRleCwKLSAgICBQVUlOVCAgICAgICAgICAgIHB1TUFDZnJhZ051bSwKLSAgICBQVUlOVCAgICAgICAgICAgIHBjYkhlYWRlclNpemUKLSAgICApCit2R2VuZXJhdGVGSUZPSGVhZGVyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlLCB1bnNpZ25lZCBjaGFyICpwYnlUeEJ1ZmZlckFkZHIsCisJYm9vbCBiTmVlZEVuY3J5cHQsIHVuc2lnbmVkIGludCBjYlBheWxvYWRTaXplLCB1bnNpZ25lZCBpbnQgdURNQUlkeCwKKwlQU1R4RGVzYyBwSGVhZFRELCBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLCB1bnNpZ25lZCBjaGFyICpwUGFja2V0LAorCVBTS2V5SXRlbSBwVHJhbnNtaXRLZXksIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4LCB1bnNpZ25lZCBpbnQgKnB1TUFDZnJhZ051bSwKKwl1bnNpZ25lZCBpbnQgKnBjYkhlYWRlclNpemUpCiB7Ci0gICAgVUlOVCAgICAgICAgICAgIHdUeEJ1ZlNpemU7ICAgICAgIC8vIEZGaW5mbyBzaXplCi0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkQUNLOwotICAgIEJPT0wgICAgICAgICAgICBiSXNBZGhvYzsKLSAgICBXT1JEICAgICAgICAgICAgY2JNYWNIZExlbjsKKyAgICB1bnNpZ25lZCBpbnQgd1R4QnVmU2l6ZTsgICAgICAgLy8gRkZpbmZvIHNpemUKKyAgICBib29sIGJOZWVkQUNLOworICAgIGJvb2wgYklzQWRob2M7CisgICAgdW5zaWduZWQgc2hvcnQgY2JNYWNIZExlbjsKICAgICBQU1R4QnVmSGVhZCAgICAgcFR4QnVmSGVhZCA9IChQU1R4QnVmSGVhZCkgcGJ5VHhCdWZmZXJBZGRyOwogCiAgICAgd1R4QnVmU2l6ZSA9IHNpemVvZihTVHhCdWZIZWFkKTsKQEAgLTIxMjMsMjIgKzIwODgsMjEgQEAKIAogICAgIGlmICgocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FESE9DKSB8fAogICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSkgewotICAgICAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpIHx8Ci0gICAgICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSkpIHsKLSAgICAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7CisgICAgICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcigmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSkpIHsKKyAgICAgICAgICAgIGJOZWVkQUNLID0gZmFsc2U7CiAgICAgICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCA9IHBUeEJ1ZkhlYWQtPndGSUZPQ3RsICYgKH5GSUZPQ1RMX05FRURBQ0spOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOworICAgICAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9ORUVEQUNLOwogICAgICAgICB9Ci0gICAgICAgIGJJc0FkaG9jID0gVFJVRTsKKyAgICAgICAgYklzQWRob2MgPSB0cnVlOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gTVNEVXMgaW4gSW5mcmEgbW9kZSBhbHdheXMgbmVlZCBBQ0sKLSAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOworICAgICAgICBiTmVlZEFDSyA9IHRydWU7CiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTkVFREFDSzsKLSAgICAgICAgYklzQWRob2MgPSBGQUxTRTsKKyAgICAgICAgYklzQWRob2MgPSBmYWxzZTsKICAgICB9CiAKIApAQCAtMjE2NSw3ICsyMTI5LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjNfTEVOOwogICAgIH0KLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBjcHVfdG9fbGUxNigoV09SRCkoY2JNYWNIZExlbiA8PCAxMCkpOworICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCkoY2JNYWNIZExlbiA8PCAxMCkpOwogCiAgICAgLy9TZXQgcGFja2V0IHR5cGUKICAgICBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFBKSB7Ly8wMDAwIDAwMDAgMDAwMCAwMDAwCkBAIC0yMTgxLDcgKzIxNDUsNyBAQAogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMXzExR0E7CiAgICAgfQogICAgIC8vU2V0IEZJRk9DVExfR3JwQWNrUG9saWN5Ci0gICAgaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gVFJVRSkgey8vMDAwMCAwMTAwIDAwMDAgMDAwMAorICAgIGlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IHRydWUpIHsvLzAwMDAgMDEwMCAwMDAwIDAwMDAKICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0JRklGT0NUTF9HUlBBQ0s7CiAgICAgfQogCkBAIC0yMTk1LDcgKzIxNTksNyBAQAogICAgIH0KIAogICAgIC8vU2V0IEZSQUdDVExfV0VQVFlQCi0gICAgcERldmljZS0+YkFFUyA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJBRVMgPSBmYWxzZTsKIAogICAgIC8vU2V0IEZSQUdDVExfV0VQVFlQCiAgICAgaWYgKHBEZXZpY2UtPmJ5TG9jYWxJRCA+IFJFVl9JRF9WVDMyNTNfQTEpIHsKQEAgLTIyNjcsMTMgKzIyMzEsMTMgQEAKIHZvaWQKIHZHZW5lcmF0ZU1BQ0hlYWRlciAoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAotICAgIFBCWVRFICAgICAgICAgICAgcGJ5QnVmZmVyQWRkciwKLSAgICBXT1JEICAgICAgICAgICAgIHdEdXJhdGlvbiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXJBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdEdXJhdGlvbiwKICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRFbmNyeXB0LAotICAgIFdPUkQgICAgICAgICAgICAgd0ZyYWdUeXBlLAotICAgIFVJTlQgICAgICAgICAgICAgdURNQUlkeCwKLSAgICBVSU5UICAgICAgICAgICAgIHVGcmFnSWR4CisgICAgYm9vbCBiTmVlZEVuY3J5cHQsCisgICAgdW5zaWduZWQgc2hvcnQgd0ZyYWdUeXBlLAorICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorICAgIHVuc2lnbmVkIGludCB1RnJhZ0lkeAogICAgICkKIHsKICAgICBQUzgwMl8xMUhlYWRlciAgcE1BQ0hlYWRlciA9IChQUzgwMl8xMUhlYWRlcilwYnlCdWZmZXJBZGRyOwpAQCAtMjMwNyw3ICsyMjcxLDcgQEAKICAgICB9CiAKICAgICBpZiAoYk5lZWRFbmNyeXB0KQotICAgICAgICBwTUFDSGVhZGVyLT53RnJhbWVDdGwgfD0gY3B1X3RvX2xlMTYoKFdPUkQpV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworICAgICAgICBwTUFDSGVhZGVyLT53RnJhbWVDdGwgfD0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KVdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKIAogICAgIHBNQUNIZWFkZXItPndEdXJhdGlvbklEID0gY3B1X3RvX2xlMTYod0R1cmF0aW9uKTsKIApAQCAtMjMxOSw3ICsyMjgzLDcgQEAKICAgICBwTUFDSGVhZGVyLT53U2VxQ3RsID0gY3B1X3RvX2xlMTYocERldmljZS0+d1NlcUNvdW50ZXIgPDwgNCk7CiAKICAgICAvL1NldCBGcmFnTnVtYmVyIGluIFNlcXVlbmNlIENvbnRyb2wKLSAgICBwTUFDSGVhZGVyLT53U2VxQ3RsIHw9IGNwdV90b19sZTE2KChXT1JEKXVGcmFnSWR4KTsKKyAgICBwTUFDSGVhZGVyLT53U2VxQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCl1RnJhZ0lkeCk7CiAKICAgICBpZiAoKHdGcmFnVHlwZSA9PSBGUkFHQ1RMX0VOREZSQUcpIHx8ICh3RnJhZ1R5cGUgPT0gRlJBR0NUTF9OT05GUkFHKSkgewogICAgICAgICBwRGV2aWNlLT53U2VxQ291bnRlcisrOwpAQCAtMjM0MCwzMiArMjMwNCwzMiBAQAogQ01EX1NUQVRVUyBjc01nbXRfeG1pdChQU0RldmljZSBwRGV2aWNlLCBQU1R4TWdtdFBhY2tldCBwUGFja2V0KSB7CiAKICAgICBQU1R4RGVzYyAgICAgICAgcEZyc3RURDsKLSAgICBCWVRFICAgICAgICAgICAgYnlQa3RUeXBlOwotICAgIFBCWVRFICAgICAgICAgICBwYnlUeEJ1ZmZlckFkZHI7CisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGU7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHhCdWZmZXJBZGRyOwogICAgIHZvaWQgKiAgICAgICAgICBwdlJUUzsKICAgICBQU0NUUyAgICAgICAgICAgcENUUzsKICAgICB2b2lkICogICAgICAgICAgcHZUeERhdGFIZDsKLSAgICBVSU5UICAgICAgICAgICAgdUR1cmF0aW9uOwotICAgIFVJTlQgICAgICAgICAgICBjYlJlcUNvdW50OworICAgIHVuc2lnbmVkIGludCB1RHVyYXRpb247CisgICAgdW5zaWduZWQgaW50IGNiUmVxQ291bnQ7CiAgICAgUFM4MDJfMTFIZWFkZXIgIHBNQUNIZWFkZXI7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplOwotICAgIEJPT0wgICAgICAgICAgICBiTmVlZEFDSzsKLSAgICBCT09MICAgICAgICAgICAgYklzUFNQT0xMID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZUJvZHlTaXplOworICAgIGJvb2wgYk5lZWRBQ0s7CisgICAgYm9vbCBiSXNQU1BPTEwgPSBmYWxzZTsKICAgICBQU1R4QnVmSGVhZCAgICAgcFR4QnVmSGVhZDsKLSAgICBVSU5UICAgICAgICAgICAgY2JGcmFtZVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSVZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgICBjYklDVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiTUlDbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgY2JGQ1NsZW4gPSA0OwotICAgIFVJTlQgICAgICAgICAgICB1UGFkZGluZyA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgIHdUeEJ1ZlNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiTWFjSGRMZW47CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVTaXplOworICAgIHVuc2lnbmVkIGludCBjYklWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JJQ1ZsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1JQ2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiRkNTbGVuID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgdVBhZGRpbmcgPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdUeEJ1ZlNpemU7CisgICAgdW5zaWduZWQgaW50IGNiTWFjSGRMZW47CiAgICAgU0V0aGVybmV0SGVhZGVyIHNFdGhIZWFkZXI7CiAgICAgdm9pZCAqICAgICAgICAgIHB2UnJ2VGltZTsKICAgICB2b2lkICogICAgICAgICAgcE1JQ0hEUjsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBXT1JEICAgICAgICAgICAgd0N1cnJlbnRSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VycmVudFJhdGUgPSBSQVRFXzFNOwogCiAKICAgICBpZiAoQVZBSUxfVEQocERldmljZSwgVFlQRV9UWERNQTApIDw9IDApIHsKQEAgLTIzNzMsNyArMjMzNyw3IEBACiAgICAgfQogCiAgICAgcEZyc3RURCA9IHBEZXZpY2UtPmFwQ3VyclREW1RZUEVfVFhETUEwXTsKLSAgICBwYnlUeEJ1ZmZlckFkZHIgPSAoUEJZVEUpcEZyc3RURC0+cFRESW5mby0+YnVmOworICAgIHBieVR4QnVmZmVyQWRkciA9ICh1bnNpZ25lZCBjaGFyICopcEZyc3RURC0+cFRESW5mby0+YnVmOwogICAgIGNiRnJhbWVCb2R5U2l6ZSA9IHBQYWNrZXQtPmNiUGF5bG9hZExlbjsKICAgICBwVHhCdWZIZWFkID0gKFBTVHhCdWZIZWFkKSBwYnlUeEJ1ZmZlckFkZHI7CiAgICAgd1R4QnVmU2l6ZSA9IHNpemVvZihTVHhCdWZIZWFkKTsKQEAgLTI0MjQsMTIgKzIzODgsMTAgQEAKICAgICBwVHhCdWZIZWFkLT53VGltZVN0YW1wID0gY3B1X3RvX2xlMTYoREVGQVVMVF9NR05fTElGRVRJTUVfUkVTXzY0dXMpOwogCiAKLSAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoJihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpIHx8Ci0gICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSkgewotICAgICAgICBiTmVlZEFDSyA9IEZBTFNFOwotICAgIH0KKyAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpKQorICAgICAgICBiTmVlZEFDSyA9IGZhbHNlOwogICAgIGVsc2UgewotICAgICAgICBiTmVlZEFDSyA9IFRSVUU7CisgICAgICAgIGJOZWVkQUNLID0gdHJ1ZTsKICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9ORUVEQUNLOwogICAgIH07CiAKQEAgLTI0NDEsNyArMjQwMyw3IEBACiAgICAgICAgIC8vcERldmljZS0+YnlQcmVhbWJsZVR5cGUgPSBQUkVBTUJMRV9MT05HOwogICAgICAgICAvLyBwcm9iZS1yZXNwb25zZSBkb24ndCByZXRyeQogICAgICAgICAvL2lmICgocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsICYgVFlQRV9TVUJUWVBFX01BU0spID09IFRZUEVfTUdNVF9QUk9CRV9SU1ApIHsKLSAgICAgICAgLy8gICAgIGJOZWVkQUNLID0gRkFMU0U7CisgICAgICAgIC8vICAgICBiTmVlZEFDSyA9IGZhbHNlOwogICAgICAgICAvLyAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgICY9ICh+RklGT0NUTF9ORUVEQUNLKTsKICAgICAgICAgLy99CiAgICAgfQpAQCAtMjQ0OSwxOSArMjQxMSwxOSBAQAogICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IChGSUZPQ1RMX0dFTklOVCB8IEZJRk9DVExfSVNETUEwKTsKIAogICAgIGlmICgocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsICYgVFlQRV9TVUJUWVBFX01BU0spID09IFRZUEVfQ1RMX1BTUE9MTCkgewotICAgICAgICBiSXNQU1BPTEwgPSBUUlVFOworICAgICAgICBiSXNQU1BPTEwgPSB0cnVlOwogICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjJfTEVOOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNiTWFjSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47CiAgICAgfQogCiAgICAgLy9TZXQgRlJBR0NUTF9NQUNIRENOVAotICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IGNwdV90b19sZTE2KChXT1JEKShjYk1hY0hkTGVuIDw8IDEwKSk7CisgICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYk1hY0hkTGVuIDw8IDEwKSk7CiAKICAgICAvLyBOb3RlczoKICAgICAvLyBBbHRob3VnaCBzcGVjIHNheXMgTU1QRFUgY2FuIGJlIGZyYWdtZW50ZWQ7IEluIG1vc3QgY2FzZSwKICAgICAvLyBubyBvbmUgd2lsbCBzZW5kIGEgTU1QRFUgdW5kZXIgZnJhZ21lbnRhdGlvbi4gV2l0aCBSVFMgbWF5IG9jY3VyLgotICAgIHBEZXZpY2UtPmJBRVMgPSBGQUxTRTsgIC8vU2V0IEZSQUdDVExfV0VQVFlQCisgICAgcERldmljZS0+YkFFUyA9IGZhbHNlOyAgLy9TZXQgRlJBR0NUTF9XRVBUWVAKIAogICAgIGlmIChXTEFOX0dFVF9GQ19JU1dFUChwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpICE9IDApIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpIHsKQEAgLTI0ODIsNyArMjQ0NCw3IEBACiAgICAgICAgICAgICBjYklWbGVuID0gODsvL1JTTiBIZWFkZXIKICAgICAgICAgICAgIGNiSUNWbGVuID0gODsvL01JQwogICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gRlJBR0NUTF9BRVM7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iQUVTID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJBRVMgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIC8vTUFDIEhlYWRlciBzaG91bGQgYmUgcGFkZGluZyAwIHRvIERXIGFsaWdubWVudC4KICAgICAgICAgdVBhZGRpbmcgPSA0IC0gKGNiTWFjSGRMZW4lNCk7CkBAIC0yNDkyLDcgKzI0NTQsNyBAQAogICAgIGNiRnJhbWVTaXplID0gY2JNYWNIZExlbiArIGNiRnJhbWVCb2R5U2l6ZSArIGNiSVZsZW4gKyBjYk1JQ2xlbiArIGNiSUNWbGVuICsgY2JGQ1NsZW47CiAKICAgICAvL1NldCBGSUZPQ1RMX0dycEFja1BvbGljeQotICAgIGlmIChwRGV2aWNlLT5iR3JwQWNrUG9saWN5ID09IFRSVUUpIHsvLzAwMDAgMDEwMCAwMDAwIDAwMDAKKyAgICBpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSB0cnVlKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9CUZJRk9DVExfR1JQQUNLOwogICAgIH0KICAgICAvL3RoZSByZXN0IG9mIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsOkZyYWdUeXAgd2lsbCBiZSBzZXQgbGF0ZXIgaW4gc192RmlsbEZyYWdQYXJhbWV0ZXIoKQpAQCAtMjUyMyw3ICsyNDg1LDcgQEAKICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAvLyAgICBObyBGcmFnbWVudGF0aW9uCiAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gKFdPUkQpRlJBR0NUTF9OT05GUkFHOworICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9ICh1bnNpZ25lZCBzaG9ydClGUkFHQ1RMX05PTkZSQUc7CiAKIAogICAgIC8vRmlsbCBGSUZPLFJydlRpbWUsUlRTLGFuZCBDVFMKQEAgLTI1MzksMTcgKzI1MDEsMTcgQEAKICAgICBjYlJlcUNvdW50ID0gY2JIZWFkZXJTaXplICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbiArIGNiRnJhbWVCb2R5U2l6ZTsKIAogICAgIGlmIChXTEFOX0dFVF9GQ19JU1dFUChwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwpICE9IDApIHsKLSAgICAgICAgUEJZVEUgICAgICAgICAgIHBieUlWSGVhZDsKLSAgICAgICAgUEJZVEUgICAgICAgICAgIHBieVBheWxvYWRIZWFkOwotICAgICAgICBQQllURSAgICAgICAgICAgcGJ5QlNTSUQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWSGVhZDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqcGJ5UGF5bG9hZEhlYWQ7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBieUJTU0lEOwogICAgICAgICBQU0tleUl0ZW0gICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKIAotICAgICAgICBwYnlJVkhlYWQgPSAoUEJZVEUpKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyk7Ci0gICAgICAgIHBieVBheWxvYWRIZWFkID0gKFBCWVRFKShwYnlUeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuKTsKKyAgICAgICAgcGJ5SVZIZWFkID0gKHVuc2lnbmVkIGNoYXIgKikocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplICsgY2JNYWNIZExlbiArIHVQYWRkaW5nKTsKKyAgICAgICAgcGJ5UGF5bG9hZEhlYWQgPSAodW5zaWduZWQgY2hhciAqKShwYnlUeEJ1ZmZlckFkZHIgKyBjYkhlYWRlclNpemUgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuKTsKIAogICAgICAgICAvL0ZpbGwgVFhLRVkKICAgICAgICAgLy9LeWxlOiBOZWVkIGZpeDogVEtJUCBhbmQgQUVTIGRpZCd0IGVuY3J5dCBNbnQgUGFja2V0LgotICAgICAgICAvL3NfdkZpbGxUeEtleShwRGV2aWNlLCAoUEJZVEUpcFR4QnVmSGVhZC0+YWR3VHhLZXksIE5VTEwpOworICAgICAgICAvL3NfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKXBUeEJ1ZkhlYWQtPmFkd1R4S2V5LCBOVUxMKTsKIAogICAgICAgICAvL0ZpbGwgSVYoRXh0SVYsUlNOSERSKQogICAgICAgICAvL3NfdkZpbGxQcmVQYXlsb2FkKHBEZXZpY2UsIHBieUlWSGVhZCwgTlVMTCk7CkBAIC0yNTU4LDE2ICsyNTIwLDE2IEBACiAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIC8vRmlsbCBNSUNIRFIKICAgICAgICAgLy9pZiAocERldmljZS0+YkFFUykgewotICAgICAgICAvLyAgICBzX3ZGaWxsTUlDSERSKHBEZXZpY2UsIChQQllURSlwTUlDSERSLCAoUEJZVEUpcE1BQ0hlYWRlciwgKFdPUkQpY2JGcmFtZUJvZHlTaXplKTsKKyAgICAgICAgLy8gICAgc192RmlsbE1JQ0hEUihwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIsICh1bnNpZ25lZCBjaGFyICopcE1BQ0hlYWRlciwgKHVuc2lnbmVkIHNob3J0KWNiRnJhbWVCb2R5U2l6ZSk7CiAgICAgICAgIC8vfQogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9JTkZSQVNUUlVDVFVSRSkgJiYKLSAgICAgICAgICAgICAgICAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpKSB7CisgICAgICAgICAgICAgICAgKHBEZXZpY2UtPmJMaW5rUGFzcyA9PSB0cnVlKSkgewogICAgICAgICAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QlNTSUQ7CiAgICAgICAgICAgICAgICAgLy8gZ2V0IHBhaXJ3aXNlIGtleQotICAgICAgICAgICAgICAgIGlmIChLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcGJ5QlNTSUQsIFBBSVJXSVNFX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgICAgICBpZiAoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBQQUlSV0lTRV9LRVksICZwVHJhbnNtaXRLZXkpID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBncm91cCBrZXkKLSAgICAgICAgICAgICAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iR2V0IEdUSy5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1NzgsMTkgKzI1NDAsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIGdldCBncm91cCBrZXkKICAgICAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkcjsKLSAgICAgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBGQUxTRSkgeworICAgICAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIktFWSBpcyBOVUxMLiBPUCBNb2RlWyVkXVxuIiwgcERldmljZS0+ZU9QTW9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iR2V0IEdUSy5cbiIpOwogICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlKEZBTFNFKTsKKyAgICAgICAgfSB3aGlsZShmYWxzZSk7CiAgICAgICAgIC8vRmlsbCBUWEtFWQotICAgICAgICBzX3ZGaWxsVHhLZXkocERldmljZSwgKFBCWVRFKShwVHhCdWZIZWFkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAotICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKXBNQUNIZWFkZXIsIChXT1JEKWNiRnJhbWVCb2R5U2l6ZSwgTlVMTCk7CisgICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShwVHhCdWZIZWFkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilwTUFDSGVhZGVyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFtZUJvZHlTaXplLCBOVUxMKTsKIAogICAgICAgICBtZW1jcHkocE1BQ0hlYWRlciwgcFBhY2tldC0+cDgwMjExSGVhZGVyLCBjYk1hY0hkTGVuKTsKLSAgICAgICAgbWVtY3B5KHBieVBheWxvYWRIZWFkLCAoKFBCWVRFKShwUGFja2V0LT5wODAyMTFIZWFkZXIpICsgY2JNYWNIZExlbiksCisgICAgICAgIG1lbWNweShwYnlQYXlsb2FkSGVhZCwgKCh1bnNpZ25lZCBjaGFyICopKHBQYWNrZXQtPnA4MDIxMUhlYWRlcikgKyBjYk1hY0hkTGVuKSwKICAgICAgICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNjIyLDcgKzI1ODQsNyBAQAogICAgIC8vU2V0IFRTUjEgJiBSZXFDb3VudCBpbiBUeERlc2NIZWFkCiAgICAgcEZyc3RURC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX1NUUCB8IFRDUl9FRFAgfCBFRE1TRFUpOwogICAgIHBGcnN0VEQtPnBUREluZm8tPnNrYl9kbWEgPSBwRnJzdFRELT5wVERJbmZvLT5idWZfZG1hOwotICAgIHBGcnN0VEQtPm1fdGQxVEQxLndSZXFDb3VudCA9IGNwdV90b19sZTE2KChXT1JEKShjYlJlcUNvdW50KSk7CisgICAgcEZyc3RURC0+bV90ZDFURDEud1JlcUNvdW50ID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KShjYlJlcUNvdW50KSk7CiAgICAgcEZyc3RURC0+YnVmZl9hZGRyID0gY3B1X3RvX2xlMzIocEZyc3RURC0+cFRESW5mby0+c2tiX2RtYSk7CiAgICAgcEZyc3RURC0+cFRESW5mby0+YnlGbGFncyA9IDA7CiAKQEAgLTI2MzAsNyArMjU5Miw3IEBACiAgICAgICAgIC8vIERpc2FibGUgUFMKICAgICAgICAgTUFDYlBTV2FrZXVwKHBEZXZpY2UtPlBvcnRPZmZzZXQpOwogICAgIH0KLSAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gZmFsc2U7CiAKICAgICB3bWIoKTsKICAgICBwRnJzdFRELT5tX3RkMFREMC5mMU93bmVyID0gT1dORURfQllfTklDOwpAQCAtMjY2MSwxNiArMjYyMywxNiBAQAogCiBDTURfU1RBVFVTIGNzQmVhY29uX3htaXQoUFNEZXZpY2UgcERldmljZSwgUFNUeE1nbXRQYWNrZXQgcFBhY2tldCkgewogCi0gICAgQllURSAgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgUEJZVEUgICAgICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpcERldmljZS0+dHhfYmVhY29uX2J1ZnM7Ci0gICAgVUlOVCAgICAgICAgICAgICBjYkZyYW1lU2l6ZSA9IHBQYWNrZXQtPmNiTVBEVUxlbiArIFdMQU5fRkNTX0xFTjsKLSAgICBVSU5UICAgICAgICAgICAgIGNiSGVhZGVyU2l6ZSA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgICB3VHhCdWZTaXplID0gc2l6ZW9mKFNUeFNob3J0QnVmSGVhZCk7CisgICAgdW5zaWduZWQgY2hhciBieVBrdFR5cGU7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKilwRGV2aWNlLT50eF9iZWFjb25fYnVmczsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFtZVNpemUgPSBwUGFja2V0LT5jYk1QRFVMZW4gKyBXTEFOX0ZDU19MRU47CisgICAgdW5zaWduZWQgaW50IGNiSGVhZGVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd1R4QnVmU2l6ZSA9IHNpemVvZihTVHhTaG9ydEJ1ZkhlYWQpOwogICAgIFBTVHhTaG9ydEJ1ZkhlYWQgcFR4QnVmSGVhZCA9IChQU1R4U2hvcnRCdWZIZWFkKSBwYnlCdWZmZXI7CiAgICAgUFNUeERhdGFIZWFkX2FiICBwVHhEYXRhSGVhZCA9IChQU1R4RGF0YUhlYWRfYWIpIChwYnlCdWZmZXIgKyB3VHhCdWZTaXplKTsKICAgICBQUzgwMl8xMUhlYWRlciAgIHBNQUNIZWFkZXI7Ci0gICAgV09SRCAgICAgICAgICAgICB3Q3VycmVudFJhdGU7Ci0gICAgV09SRCAgICAgICAgICAgICB3TGVuID0gMHgwMDAwOworICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyZW50UmF0ZTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGVuID0gMHgwMDAwOwogCiAKICAgICBtZW1zZXQocFR4QnVmSGVhZCwgMCwgd1R4QnVmU2l6ZSk7CkBAIC0yNjkzLDE3ICsyNjU1LDE3IEBACiAKICAgICAvL1NldCBwYWNrZXQgdHlwZSAmIEdldCBEdXJhdGlvbgogICAgIGlmIChieVBrdFR5cGUgPT0gUEtfVFlQRV8xMUEpIHsvLzAwMDAgMDAwMCAwMDAwIDAwMDAKLSAgICAgICAgcFR4RGF0YUhlYWQtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KChXT1JEKXNfdUdldERhdGFEdXJhdGlvbihwRGV2aWNlLCBEQVRBRFVSX0EsIGNiRnJhbWVTaXplLCBieVBrdFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0N1cnJlbnRSYXRlLCBGQUxTRSwgMCwgMCwgMSwgQVVUT19GQl9OT05FKSk7CisgICAgICAgIHBUeERhdGFIZWFkLT53RHVyYXRpb24gPSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQSwgY2JGcmFtZVNpemUsIGJ5UGt0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIGZhbHNlLCAwLCAwLCAxLCBBVVRPX0ZCX05PTkUpKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYnlQa3RUeXBlID09IFBLX1RZUEVfMTFCKSB7Ly8wMDAwIDAwMDEgMDAwMCAwMDAwCiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfMTFCOwotICAgICAgICBwVHhEYXRhSGVhZC0+d0R1cmF0aW9uID0gY3B1X3RvX2xlMTYoKFdPUkQpc191R2V0RGF0YUR1cmF0aW9uKHBEZXZpY2UsIERBVEFEVVJfQiwgY2JGcmFtZVNpemUsIGJ5UGt0VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Q3VycmVudFJhdGUsIEZBTFNFLCAwLCAwLCAxLCBBVVRPX0ZCX05PTkUpKTsKKyAgICAgICAgcFR4RGF0YUhlYWQtPndEdXJhdGlvbiA9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClzX3VHZXREYXRhRHVyYXRpb24ocERldmljZSwgREFUQURVUl9CLCBjYkZyYW1lU2l6ZSwgYnlQa3RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdDdXJyZW50UmF0ZSwgZmFsc2UsIDAsIDAsIDEsIEFVVE9fRkJfTk9ORSkpOwogICAgIH0KIAogICAgIEJCdkNhY3VsYXRlUGFyYW1ldGVyKHBEZXZpY2UsIGNiRnJhbWVTaXplLCB3Q3VycmVudFJhdGUsIGJ5UGt0VHlwZSwKLSAgICAgICAgKFBXT1JEKSYod0xlbiksIChQQllURSkmKHBUeERhdGFIZWFkLT5ieVNlcnZpY2VGaWVsZCksIChQQllURSkmKHBUeERhdGFIZWFkLT5ieVNpZ25hbEZpZWxkKQorICAgICAgICAodW5zaWduZWQgc2hvcnQgKikmKHdMZW4pLCAodW5zaWduZWQgY2hhciAqKSYocFR4RGF0YUhlYWQtPmJ5U2VydmljZUZpZWxkKSwgKHVuc2lnbmVkIGNoYXIgKikmKHBUeERhdGFIZWFkLT5ieVNpZ25hbEZpZWxkKQogICAgICk7CiAgICAgcFR4RGF0YUhlYWQtPndUcmFuc21pdExlbmd0aCA9IGNwdV90b19sZTE2KHdMZW4pOwogICAgIC8vR2V0IFRpbWVTdGFtcE9mZgpAQCAtMjczNiw0MSArMjY5OCwzOCBAQAogCiAKIAotVUlOVAordW5zaWduZWQgaW50CiBjYkdldEZyYWdDb3VudCAoCiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlLAogICAgIFBTS2V5SXRlbSAgICAgICAgcFRyYW5zbWl0S2V5LAotICAgIFVJTlQgICAgICAgICAgICAgY2JGcmFtZUJvZHlTaXplLAorICAgIHVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemUsCiAgICAgUFNFdGhlcm5ldEhlYWRlciBwc0V0aEhlYWRlcgogICAgICkKIHsKLSAgICBVSU5UICAgICAgICAgICBjYk1BQ0hkTGVuOwotICAgIFVJTlQgICAgICAgICAgIGNiRnJhbWVTaXplOwotICAgIFVJTlQgICAgICAgICAgIGNiRnJhZ21lbnRTaXplOyAvL0hkcisoSVYpK3BheW9hZCsoTUlDKSsoSUNWKStGQ1MKLSAgICBVSU5UICAgICAgICAgICBjYkZyYWdQYXlsb2FkU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICBjYkxhc3RGcmFnUGF5bG9hZFNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgY2JJVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgY2JJQ1ZsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgIGNiTUlDbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICBjYkZDU2xlbiA9IDQ7Ci0gICAgVUlOVCAgICAgICAgICAgdU1BQ2ZyYWdOdW0gPSAxOwotICAgIEJPT0wgICAgICAgICAgIGJOZWVkQUNLOworICAgIHVuc2lnbmVkIGludCBjYk1BQ0hkTGVuOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JGcmFnbWVudFNpemU7IC8vSGRyKyhJVikrcGF5b2FkKyhNSUMpKyhJQ1YpK0ZDUworICAgIHVuc2lnbmVkIGludCBjYkZyYWdQYXlsb2FkU2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2JMYXN0RnJhZ1BheWxvYWRTaXplOworICAgIHVuc2lnbmVkIGludCBjYklWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JJQ1ZsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1JQ2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiRkNTbGVuID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgdU1BQ2ZyYWdOdW0gPSAxOworICAgIGJvb2wgYk5lZWRBQ0s7CiAKIAogCiAgICAgaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8CiAgICAgICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApKSB7Ci0gICAgICAgIGlmIChJU19NVUxUSUNBU1RfQUREUkVTUygmKHBzRXRoSGVhZGVyLT5hYnlEc3RBZGRyWzBdKSkgfHwKLSAgICAgICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkgewotICAgICAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJOZWVkQUNLID0gVFJVRTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkclswXSkpKQorICAgICAgICAgICAgYk5lZWRBQ0sgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYk5lZWRBQ0sgPSB0cnVlOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gTVNEVXMgaW4gSW5mcmEgbW9kZSBhbHdheXMgbmVlZCBBQ0sKLSAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOworICAgICAgICBiTmVlZEFDSyA9IHRydWU7CiAgICAgfQogCiAgICAgaWYgKHBEZXZpY2UtPmJMb25nSGVhZGVyKQpAQCAtMjc3OSw3ICsyNzM4LDcgQEAKICAgICAgICAgY2JNQUNIZExlbiA9IFdMQU5fSERSX0FERFIzX0xFTjsKIAogCi0gICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IFRSVUUpIHsKKyAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPT0gdHJ1ZSkgewogCiAgICAgICAgIGlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSB8fApAQCAtMjgwOSwxMSArMjc2OCwxMSBAQAogCiAgICAgY2JGcmFtZVNpemUgPSBjYk1BQ0hkTGVuICsgY2JJVmxlbiArIChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgKyBjYklDVmxlbiArIGNiRkNTbGVuOwogCi0gICAgaWYgKChjYkZyYW1lU2l6ZSA+IHBEZXZpY2UtPndGcmFnbWVudGF0aW9uVGhyZXNob2xkKSAmJiAoYk5lZWRBQ0sgPT0gVFJVRSkpIHsKKyAgICBpZiAoKGNiRnJhbWVTaXplID4gcERldmljZS0+d0ZyYWdtZW50YXRpb25UaHJlc2hvbGQpICYmIChiTmVlZEFDSyA9PSB0cnVlKSkgewogICAgICAgICAvLyBGcmFnbWVudGF0aW9uCiAgICAgICAgIGNiRnJhZ21lbnRTaXplID0gcERldmljZS0+d0ZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAgICAgICAgIGNiRnJhZ1BheWxvYWRTaXplID0gY2JGcmFnbWVudFNpemUgLSBjYk1BQ0hkTGVuIC0gY2JJVmxlbiAtIGNiSUNWbGVuIC0gY2JGQ1NsZW47Ci0gICAgICAgIHVNQUNmcmFnTnVtID0gKFdPUkQpICgoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pIC8gY2JGcmFnUGF5bG9hZFNpemUpOworICAgICAgICB1TUFDZnJhZ051bSA9ICh1bnNpZ25lZCBzaG9ydCkgKChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgLyBjYkZyYWdQYXlsb2FkU2l6ZSk7CiAgICAgICAgIGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9IChjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikgJSBjYkZyYWdQYXlsb2FkU2l6ZTsKICAgICAgICAgaWYgKGNiTGFzdEZyYWdQYXlsb2FkU2l6ZSA9PSAwKSB7CiAgICAgICAgICAgICBjYkxhc3RGcmFnUGF5bG9hZFNpemUgPSBjYkZyYWdQYXlsb2FkU2l6ZTsKQEAgLTI4MjYsNTEgKzI3ODUsNTEgQEAKIAogCiB2b2lkCi12RE1BMF90eF84MDIxMShQU0RldmljZSAgcERldmljZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgUEJZVEUgcGJNUERVLCBVSU5UIGNiTVBEVUxlbikgewordkRNQTBfdHhfODAyMTEoUFNEZXZpY2UgIHBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKnBiTVBEVSwgdW5zaWduZWQgaW50IGNiTVBEVUxlbikgewogCiAgICAgUFNUeERlc2MgICAgICAgIHBGcnN0VEQ7Ci0gICAgQllURSAgICAgICAgICAgIGJ5UGt0VHlwZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5VHhCdWZmZXJBZGRyOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVR4QnVmZmVyQWRkcjsKICAgICB2b2lkICogICAgICAgICAgcHZSVFM7CiAgICAgdm9pZCAqICAgICAgICAgIHB2Q1RTOwogICAgIHZvaWQgKiAgICAgICAgICBwdlR4RGF0YUhkOwotICAgIFVJTlQgICAgICAgICAgICB1RHVyYXRpb247Ci0gICAgVUlOVCAgICAgICAgICAgIGNiUmVxQ291bnQ7CisgICAgdW5zaWduZWQgaW50IHVEdXJhdGlvbjsKKyAgICB1bnNpZ25lZCBpbnQgY2JSZXFDb3VudDsKICAgICBQUzgwMl8xMUhlYWRlciAgcE1BQ0hlYWRlcjsKLSAgICBVSU5UICAgICAgICAgICAgY2JIZWFkZXJTaXplOwotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lQm9keVNpemU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkQUNLOwotICAgIEJPT0wgICAgICAgICAgICBiSXNQU1BPTEwgPSBGQUxTRTsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemU7CisgICAgYm9vbCBiTmVlZEFDSzsKKyAgICBib29sIGJJc1BTUE9MTCA9IGZhbHNlOwogICAgIFBTVHhCdWZIZWFkICAgICBwVHhCdWZIZWFkOwotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lU2l6ZTsKLSAgICBVSU5UICAgICAgICAgICAgY2JJVmxlbiA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiSUNWbGVuID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgY2JNSUNsZW4gPSAwOwotICAgIFVJTlQgICAgICAgICAgICBjYkZDU2xlbiA9IDQ7Ci0gICAgVUlOVCAgICAgICAgICAgIHVQYWRkaW5nID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgY2JNSUNIRFIgPSAwOwotICAgIFVJTlQgICAgICAgICAgICB1TGVuZ3RoID0gMDsKLSAgICBEV09SRCAgICAgICAgICAgZHdNSUNLZXkwLCBkd01JQ0tleTE7Ci0gICAgRFdPUkQgICAgICAgICAgIGR3TUlDX1ByaW9yaXR5OwotICAgIFBEV09SRCAgICAgICAgICBwZHdNSUNfTDsKLSAgICBQRFdPUkQgICAgICAgICAgcGR3TUlDX1I7Ci0gICAgV09SRCAgICAgICAgICAgIHdUeEJ1ZlNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGNiTWFjSGRMZW47CisgICAgdW5zaWduZWQgaW50IGNiRnJhbWVTaXplOworICAgIHVuc2lnbmVkIGludCBjYklWbGVuID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY2JJQ1ZsZW4gPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1JQ2xlbiA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiRkNTbGVuID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgdVBhZGRpbmcgPSAwOworICAgIHVuc2lnbmVkIGludCBjYk1JQ0hEUiA9IDA7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIGxvbmcgZHdNSUNLZXkwLCBkd01JQ0tleTE7CisgICAgdW5zaWduZWQgbG9uZyBkd01JQ19Qcmlvcml0eTsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfTDsKKyAgICB1bnNpZ25lZCBsb25nICpwZHdNSUNfUjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3VHhCdWZTaXplOworICAgIHVuc2lnbmVkIGludCBjYk1hY0hkTGVuOwogICAgIFNFdGhlcm5ldEhlYWRlciBzRXRoSGVhZGVyOwogICAgIHZvaWQgKiAgICAgICAgICBwdlJydlRpbWU7CiAgICAgdm9pZCAqICAgICAgICAgIHBNSUNIRFI7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7Ci0gICAgV09SRCAgICAgICAgICAgIHdDdXJyZW50UmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJlbnRSYXRlID0gUkFURV8xTTsKICAgICBQVVdMQU5fODAyMTFIRFIgIHA4MDIxMUhlYWRlcjsKLSAgICBVSU5UICAgICAgICAgICAgIHVOb2RlSW5kZXggPSAwOwotICAgIEJPT0wgICAgICAgICAgICBiTm9kZUV4aXN0ID0gRkFMU0U7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOworICAgIGJvb2wgYk5vZGVFeGlzdCA9IGZhbHNlOwogICAgIFNLZXlJdGVtICAgICAgICBTVGVtcEtleTsKICAgICBQU0tleUl0ZW0gICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKLSAgICBQQllURSAgICAgICAgICAgcGJ5SVZIZWFkOwotICAgIFBCWVRFICAgICAgICAgICBwYnlQYXlsb2FkSGVhZDsKLSAgICBQQllURSAgICAgICAgICAgcGJ5TWFjSGRyOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUlWSGVhZDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlQYXlsb2FkSGVhZDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlNYWNIZHI7CiAKLSAgICBVSU5UICAgICAgICAgICAgY2JFeHRTdXBwUmF0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGNiRXh0U3VwcFJhdGUgPSAwOwogLy8gICAgUFdMQU5fSUUgICAgICAgIHBJdGVtOwogCiAKQEAgLTI4ODYsNyArMjg0NSw3IEBACiAKIAogICAgIHBGcnN0VEQgPSBwRGV2aWNlLT5hcEN1cnJURFtUWVBFX1RYRE1BMF07Ci0gICAgcGJ5VHhCdWZmZXJBZGRyID0gKFBCWVRFKXBGcnN0VEQtPnBUREluZm8tPmJ1ZjsKKyAgICBwYnlUeEJ1ZmZlckFkZHIgPSAodW5zaWduZWQgY2hhciAqKXBGcnN0VEQtPnBUREluZm8tPmJ1ZjsKICAgICBwVHhCdWZIZWFkID0gKFBTVHhCdWZIZWFkKSBwYnlUeEJ1ZmZlckFkZHI7CiAgICAgd1R4QnVmU2l6ZSA9IHNpemVvZihTVHhCdWZIZWFkKTsKICAgICBtZW1zZXQocFR4QnVmSGVhZCwgMCwgd1R4QnVmU2l6ZSk7CkBAIC0yOTM4LDIwICsyODk3LDE5IEBACiAgICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKIAogCi0gICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSB8fAotICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSkpIHsKLSAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKKyAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJihwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpKSB7CisgICAgICAgIGJOZWVkQUNLID0gZmFsc2U7CiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7Ci0gICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgIGJOb2RlRXhpc3QgPSB0cnVlOwogICAgICAgICB9OwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmJFbmFibGVIb3N0V0VQKSB7Ci0gICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwRGV2aWNlLT5wTWdtdCwgKFBCWVRFKShwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSksICZ1Tm9kZUluZGV4KSkKLSAgICAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChCU1NEQmJJc1NUQUluTm9kZURCKHBEZXZpY2UtPnBNZ210LCAodW5zaWduZWQgY2hhciAqKShwODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSksICZ1Tm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gdHJ1ZTsKICAgICAgICAgfTsKLSAgICAgICAgYk5lZWRBQ0sgPSBUUlVFOworICAgICAgICBiTmVlZEFDSyA9IHRydWU7CiAgICAgICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfTkVFREFDSzsKICAgICB9OwogCkBAIC0yOTY0LDcgKzI5MjIsNyBAQAogCiAgICAgICAgIC8vIHByb2JlLXJlc3BvbnNlIGRvbid0IHJldHJ5CiAgICAgICAgIC8vaWYgKChwODAyMTFIZWFkZXItPnNBNC53RnJhbWVDdGwgJiBUWVBFX1NVQlRZUEVfTUFTSykgPT0gVFlQRV9NR01UX1BST0JFX1JTUCkgewotICAgICAgICAvLyAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKKyAgICAgICAgLy8gICAgIGJOZWVkQUNLID0gZmFsc2U7CiAgICAgICAgIC8vICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCAgJj0gKH5GSUZPQ1RMX05FRURBQ0spOwogICAgICAgICAvL30KICAgICB9CkBAIC0yOTcyLDcgKzI5MzAsNyBAQAogICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IChGSUZPQ1RMX0dFTklOVCB8IEZJRk9DVExfSVNETUEwKTsKIAogICAgIGlmICgocDgwMjExSGVhZGVyLT5zQTQud0ZyYW1lQ3RsICYgVFlQRV9TVUJUWVBFX01BU0spID09IFRZUEVfQ1RMX1BTUE9MTCkgewotICAgICAgICBiSXNQU1BPTEwgPSBUUlVFOworICAgICAgICBiSXNQU1BPTEwgPSB0cnVlOwogICAgICAgICBjYk1hY0hkTGVuID0gV0xBTl9IRFJfQUREUjJfTEVOOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNiTWFjSGRMZW4gPSBXTEFOX0hEUl9BRERSM19MRU47CkBAIC0yOTk2LDEyICsyOTU0LDEyIEBACiAKIAogICAgIC8vU2V0IEZSQUdDVExfTUFDSERDTlQKLSAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBjcHVfdG9fbGUxNigoV09SRCljYk1hY0hkTGVuIDw8IDEwKTsKKyAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSBjcHVfdG9fbGUxNigodW5zaWduZWQgc2hvcnQpY2JNYWNIZExlbiA8PCAxMCk7CiAKICAgICAvLyBOb3RlczoKICAgICAvLyBBbHRob3VnaCBzcGVjIHNheXMgTU1QRFUgY2FuIGJlIGZyYWdtZW50ZWQ7IEluIG1vc3QgY2FzZSwKICAgICAvLyBubyBvbmUgd2lsbCBzZW5kIGEgTU1QRFUgdW5kZXIgZnJhZ21lbnRhdGlvbi4gV2l0aCBSVFMgbWF5IG9jY3VyLgotICAgIHBEZXZpY2UtPmJBRVMgPSBGQUxTRTsgIC8vU2V0IEZSQUdDVExfV0VQVFlQCisgICAgcERldmljZS0+YkFFUyA9IGZhbHNlOyAgLy9TZXQgRlJBR0NUTF9XRVBUWVAKIAogCiAgICAgaWYgKFdMQU5fR0VUX0ZDX0lTV0VQKHA4MDIxMUhlYWRlci0+c0E0LndGcmFtZUN0bCkgIT0gMCkgewpAQCAtMzAyNCw3ICsyOTgyLDcgQEAKICAgICAgICAgICAgIGNiSUNWbGVuID0gODsvL01JQwogICAgICAgICAgICAgY2JNSUNIRFIgPSBzaXplb2YoU01JQ0hEUkhlYWQpOwogICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZyYWdDdGwgfD0gRlJBR0NUTF9BRVM7Ci0gICAgICAgICAgICBwRGV2aWNlLT5iQUVTID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJBRVMgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIC8vTUFDIEhlYWRlciBzaG91bGQgYmUgcGFkZGluZyAwIHRvIERXIGFsaWdubWVudC4KICAgICAgICAgdVBhZGRpbmcgPSA0IC0gKGNiTWFjSGRMZW4lNCk7CkBAIC0zMDM0LDcgKzI5OTIsNyBAQAogICAgIGNiRnJhbWVTaXplID0gY2JNYWNIZExlbiArIGNiRnJhbWVCb2R5U2l6ZSArIGNiSVZsZW4gKyBjYk1JQ2xlbiArIGNiSUNWbGVuICsgY2JGQ1NsZW4gKyBjYkV4dFN1cHBSYXRlOwogCiAgICAgLy9TZXQgRklGT0NUTF9HcnBBY2tQb2xpY3kKLSAgICBpZiAocERldmljZS0+YkdycEFja1BvbGljeSA9PSBUUlVFKSB7Ly8wMDAwIDAxMDAgMDAwMCAwMDAwCisgICAgaWYgKHBEZXZpY2UtPmJHcnBBY2tQb2xpY3kgPT0gdHJ1ZSkgey8vMDAwMCAwMTAwIDAwMDAgMDAwMAogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PQlGSUZPQ1RMX0dSUEFDSzsKICAgICB9CiAgICAgLy90aGUgcmVzdCBvZiBwVHhCdWZIZWFkLT53RnJhZ0N0bDpGcmFnVHlwIHdpbGwgYmUgc2V0IGxhdGVyIGluIHNfdkZpbGxGcmFnUGFyYW1ldGVyKCkKQEAgLTMwNjcsNyArMzAyNSw3IEBACiAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgLy8gICAgTm8gRnJhZ21lbnRhdGlvbgogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHBUeEJ1ZkhlYWQtPndGcmFnQ3RsIHw9IChXT1JEKUZSQUdDVExfTk9ORlJBRzsKKyAgICBwVHhCdWZIZWFkLT53RnJhZ0N0bCB8PSAodW5zaWduZWQgc2hvcnQpRlJBR0NUTF9OT05GUkFHOwogCiAKICAgICAvL0ZpbGwgRklGTyxScnZUaW1lLFJUUyxhbmQgQ1RTCkBAIC0zMDgyLDkgKzMwNDAsOSBAQAogCiAgICAgY2JSZXFDb3VudCA9IGNiSGVhZGVyU2l6ZSArIGNiTWFjSGRMZW4gKyB1UGFkZGluZyArIGNiSVZsZW4gKyAoY2JGcmFtZUJvZHlTaXplICsgY2JNSUNsZW4pICsgY2JFeHRTdXBwUmF0ZTsKIAotICAgIHBieU1hY0hkciA9IChQQllURSkocGJ5VHhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLSAgICBwYnlQYXlsb2FkSGVhZCA9IChQQllURSkocGJ5TWFjSGRyICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbik7Ci0gICAgcGJ5SVZIZWFkID0gKFBCWVRFKShwYnlNYWNIZHIgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcpOworICAgIHBieU1hY0hkciA9ICh1bnNpZ25lZCBjaGFyICopKHBieVR4QnVmZmVyQWRkciArIGNiSGVhZGVyU2l6ZSk7CisgICAgcGJ5UGF5bG9hZEhlYWQgPSAodW5zaWduZWQgY2hhciAqKShwYnlNYWNIZHIgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcgKyBjYklWbGVuKTsKKyAgICBwYnlJVkhlYWQgPSAodW5zaWduZWQgY2hhciAqKShwYnlNYWNIZHIgKyBjYk1hY0hkTGVuICsgdVBhZGRpbmcpOwogCiAgICAgLy8gQ29weSB0aGUgUGFja2V0IGludG8gYSB0eCBCdWZmZXIKICAgICBtZW1jcHkocGJ5TWFjSGRyLCBwYk1QRFUsIGNiTWFjSGRMZW4pOwpAQCAtMzEyNywzMCArMzA4NSwzMCBAQAogCiAgICAgICAgIGlmICgocFRyYW5zbWl0S2V5ICE9IE5VTEwpICYmIChwVHJhbnNtaXRLZXktPmJ5Q2lwaGVyU3VpdGUgPT0gS0VZX0NUTF9US0lQKSkgewogCi0gICAgICAgICAgICBkd01JQ0tleTAgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7Ci0gICAgICAgICAgICBkd01JQ0tleTEgPSAqKFBEV09SRCkoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CisgICAgICAgICAgICBkd01JQ0tleTAgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzE2XSk7CisgICAgICAgICAgICBkd01JQ0tleTEgPSAqKHVuc2lnbmVkIGxvbmcgKikoJnBUcmFuc21pdEtleS0+YWJ5S2V5WzIwXSk7CiAKICAgICAgICAgICAgIC8vIERPIFNvZnR3YXJlIE1pY2hhZWwKICAgICAgICAgICAgIE1JQ192SW5pdChkd01JQ0tleTAsIGR3TUlDS2V5MSk7Ci0gICAgICAgICAgICBNSUNfdkFwcGVuZCgoUEJZVEUpJihzRXRoSGVhZGVyLmFieURzdEFkZHJbMF0pLCAxMik7CisgICAgICAgICAgICBNSUNfdkFwcGVuZCgodW5zaWduZWQgY2hhciAqKSYoc0V0aEhlYWRlci5hYnlEc3RBZGRyWzBdKSwgMTIpOwogICAgICAgICAgICAgZHdNSUNfUHJpb3JpdHkgPSAwOwotICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKFBCWVRFKSZkd01JQ19Qcmlvcml0eSwgNCk7CisgICAgICAgICAgICBNSUNfdkFwcGVuZCgodW5zaWduZWQgY2hhciAqKSZkd01JQ19Qcmlvcml0eSwgNCk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkRNQTBfdHhfODAyMTpNSUMgS0VZOiAlbFgsICVsWFxuIiwgZHdNSUNLZXkwLCBkd01JQ0tleTEpOwogCiAgICAgICAgICAgICB1TGVuZ3RoID0gY2JIZWFkZXJTaXplICsgY2JNYWNIZExlbiArIHVQYWRkaW5nICsgY2JJVmxlbjsKIAogICAgICAgICAgICAgTUlDX3ZBcHBlbmQoKHBieVR4QnVmZmVyQWRkciArIHVMZW5ndGgpLCBjYkZyYW1lQm9keVNpemUpOwogCi0gICAgICAgICAgICBwZHdNSUNfTCA9IChQRFdPUkQpKHBieVR4QnVmZmVyQWRkciArIHVMZW5ndGggKyBjYkZyYW1lQm9keVNpemUpOwotICAgICAgICAgICAgcGR3TUlDX1IgPSAoUERXT1JEKShwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoICsgY2JGcmFtZUJvZHlTaXplICsgNCk7CisgICAgICAgICAgICBwZHdNSUNfTCA9ICh1bnNpZ25lZCBsb25nICopKHBieVR4QnVmZmVyQWRkciArIHVMZW5ndGggKyBjYkZyYW1lQm9keVNpemUpOworICAgICAgICAgICAgcGR3TUlDX1IgPSAodW5zaWduZWQgbG9uZyAqKShwYnlUeEJ1ZmZlckFkZHIgKyB1TGVuZ3RoICsgY2JGcmFtZUJvZHlTaXplICsgNCk7CiAKICAgICAgICAgICAgIE1JQ192R2V0TUlDKHBkd01JQ19MLCBwZHdNSUNfUik7CiAgICAgICAgICAgICBNSUNfdlVuSW5pdCgpOwogCi0gICAgICAgICAgICBpZiAocERldmljZS0+YlR4TUlDRmFpbCA9PSBUUlVFKSB7CisgICAgICAgICAgICBpZiAocERldmljZS0+YlR4TUlDRmFpbCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgKnBkd01JQ19MID0gMDsKICAgICAgICAgICAgICAgICAqcGR3TUlDX1IgPSAwOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJUeE1JQ0ZhaWwgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iVHhNSUNGYWlsID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8idUxlbmd0aDogJWQsICVkXG4iLCB1TGVuZ3RoLCBjYkZyYW1lQm9keVNpemUpOwpAQCAtMzE2MCw4ICszMTE4LDggQEAKICAgICAgICAgfQogCiAKLSAgICAgICAgc192RmlsbFR4S2V5KHBEZXZpY2UsIChQQllURSkocFR4QnVmSGVhZC0+YWR3VHhLZXkpLCBwYnlJVkhlYWQsIHBUcmFuc21pdEtleSwKLSAgICAgICAgICAgICAgICAgICAgIHBieU1hY0hkciwgKFdPUkQpY2JGcmFtZUJvZHlTaXplLCAoUEJZVEUpcE1JQ0hEUik7CisgICAgICAgIHNfdkZpbGxUeEtleShwRGV2aWNlLCAodW5zaWduZWQgY2hhciAqKShwVHhCdWZIZWFkLT5hZHdUeEtleSksIHBieUlWSGVhZCwgcFRyYW5zbWl0S2V5LAorICAgICAgICAgICAgICAgICAgICAgcGJ5TWFjSGRyLCAodW5zaWduZWQgc2hvcnQpY2JGcmFtZUJvZHlTaXplLCAodW5zaWduZWQgY2hhciAqKXBNSUNIRFIpOwogCiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5kd1RTQzQ3XzE2ID0gcFRyYW5zbWl0S2V5LT5kd1RTQzQ3XzE2OwpAQCAtMzE2OSw3ICszMTI3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICgocERldmljZS0+YnlMb2NhbElEIDw9IFJFVl9JRF9WVDMyNTNfQTEpKSB7Ci0gICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCBwYnlQYXlsb2FkSGVhZCwgKFdPUkQpKGNiRnJhbWVCb2R5U2l6ZSArIGNiTUlDbGVuKSk7CisgICAgICAgICAgICBzX3ZTV2VuY3J5cHRpb24ocERldmljZSwgcFRyYW5zbWl0S2V5LCBwYnlQYXlsb2FkSGVhZCwgKHVuc2lnbmVkIHNob3J0KShjYkZyYW1lQm9keVNpemUgKyBjYk1JQ2xlbikpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMjA4LDcgKzMxNjYsNyBAQAogICAgICAgICAvLyBEaXNhYmxlIFBTCiAgICAgICAgIE1BQ2JQU1dha2V1cChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICB9Ci0gICAgcERldmljZS0+YlBXQml0T24gPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IGZhbHNlOwogCiAgICAgd21iKCk7CiAgICAgcEZyc3RURC0+bV90ZDBURDAuZjFPd25lciA9IE9XTkVEX0JZX05JQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvcnh0eC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmgKaW5kZXggYjAwOGZjMi4uZmE4MjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9yeHR4LmgKQEAgLTQwLDY3ICs0MCw0NyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKLXZvaWQgdkdlbmVyYXRlTUFDSGVhZGVyKAotICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgRFdPUkQgZHdUeEJ1ZmZlckFkZHIsCi0gICAgUEJZVEUgcGJ5U2tiRGF0YSwKLSAgICBVSU5UIGNiUGFja2V0U2l6ZSwKLSAgICBCT09MIGJETUEwVXNlZCwKLSAgICBQVUlOVCBwY2JIZWFkU2l6ZSwKLSAgICBQVUlOVCBwY2JBcHBlbmRQYXlsb2FkCi0gICAgICk7Cit2b2lkCit2R2VuZXJhdGVNQUNIZWFkZXIoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgbG9uZyBkd1R4QnVmZmVyQWRkciwgdW5zaWduZWQgY2hhciAqcGJ5U2tiRGF0YSwKKwl1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLCBib29sIGJETUEwVXNlZCwgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZSwKKwl1bnNpZ25lZCBpbnQgKnBjYkFwcGVuZFBheWxvYWQpOwogCi12b2lkIHZQcm9jZXNzUnhNQUNIZWFkZXIgKAotICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgRFdPUkQgZHdSeEJ1ZmZlckFkZHIsCi0gICAgVUlOVCBjYlBhY2tldFNpemUsCi0gICAgQk9PTCBiSXNXRVAsCi0gICAgUFVJTlQgcGNiSGVhZFNpemUKLSAgICApOwordm9pZAordlByb2Nlc3NSeE1BQ0hlYWRlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBsb25nIGR3UnhCdWZmZXJBZGRyLCB1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLAorCWJvb2wgYklzV0VQLCB1bnNpZ25lZCBpbnQgKnBjYkhlYWRTaXplKTsKICovCiAKIAogdm9pZAogdkdlbmVyYXRlTUFDSGVhZGVyICgKICAgICBQU0RldmljZSAgICAgICAgIHBEZXZpY2UsCi0gICAgUEJZVEUgICAgICAgICAgICBwYnlCdWZmZXJBZGRyLAotICAgIFdPUkQgICAgICAgICAgICAgd0R1cmF0aW9uLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUJ1ZmZlckFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uLAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgQk9PTCAgICAgICAgICAgICBiTmVlZEVuY3J5cHQsCi0gICAgV09SRCAgICAgICAgICAgICB3RnJhZ1R5cGUsCi0gICAgVUlOVCAgICAgICAgICAgICB1RE1BSWR4LAotICAgIFVJTlQgICAgICAgICAgICAgdUZyYWdJZHgKKyAgICBib29sIGJOZWVkRW5jcnlwdCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhZ1R5cGUsCisgICAgdW5zaWduZWQgaW50IHVETUFJZHgsCisgICAgdW5zaWduZWQgaW50IHVGcmFnSWR4CiAgICAgKTsKIAogCi1VSU5UCit1bnNpZ25lZCBpbnQKIGNiR2V0RnJhZ0NvdW50KAogICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKICAgICBQU0tleUl0ZW0gICAgICAgIHBUcmFuc21pdEtleSwKLSAgICBVSU5UICAgICAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSwKKyAgICB1bnNpZ25lZCBpbnQJY2JGcmFtZUJvZHlTaXplLAogICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIKICAgICApOwogCiAKIHZvaWQKLXZHZW5lcmF0ZUZJRk9IZWFkZXIgKAotICAgIFBTRGV2aWNlICAgICAgICAgcERldmljZSwKLSAgICBCWVRFICAgICAgICAgICAgIGJ5UGt0VHlwLAotICAgIFBCWVRFICAgICAgICAgICAgcGJ5VHhCdWZmZXJBZGRyLAotICAgIEJPT0wgICAgICAgICAgICAgYk5lZWRFbmNyeXB0LAotICAgIFVJTlQgICAgICAgICAgICAgY2JQYXlsb2FkU2l6ZSwKLSAgICBVSU5UICAgICAgICAgICAgIHVETUFJZHgsCi0gICAgUFNUeERlc2MgICAgICAgICBwSGVhZFRELAotICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIsCi0gICAgUEJZVEUgICAgICAgICAgICBwUGFja2V0LAotICAgIFBTS2V5SXRlbSAgICAgICAgcFRyYW5zbWl0S2V5LAotICAgIFVJTlQgICAgICAgICAgICAgdU5vZGVJbmRleCwKLSAgICBQVUlOVCAgICAgICAgICAgIHB1TUFDZnJhZ051bSwKLSAgICBQVUlOVCAgICAgICAgICAgIHBjYkhlYWRlclNpemUKLSAgICApOwordkdlbmVyYXRlRklGT0hlYWRlcihQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJ5UGt0VHlwLCB1bnNpZ25lZCBjaGFyICpwYnlUeEJ1ZmZlckFkZHIsCisJYm9vbCBiTmVlZEVuY3J5cHQsIHVuc2lnbmVkIGludAljYlBheWxvYWRTaXplLCB1bnNpZ25lZCBpbnQgdURNQUlkeCwgUFNUeERlc2MgcEhlYWRURCwKKwlQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyLCB1bnNpZ25lZCBjaGFyICpwUGFja2V0LCBQU0tleUl0ZW0gcFRyYW5zbWl0S2V5LAorCXVuc2lnbmVkIGludCB1Tm9kZUluZGV4LCB1bnNpZ25lZCBpbnQgKnB1TUFDZnJhZ051bSwgdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplKTsKIAogCi12b2lkIHZETUEwX3R4XzgwMjExKFBTRGV2aWNlICBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBQQllURSBwYk1QRFUsIFVJTlQgY2JNUERVTGVuKTsKK3ZvaWQgdkRNQTBfdHhfODAyMTEoUFNEZXZpY2UgIHBEZXZpY2UsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKnBiTVBEVSwgdW5zaWduZWQgaW50IGNiTVBEVUxlbik7CiBDTURfU1RBVFVTIGNzTWdtdF94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogQ01EX1NUQVRVUyBjc0JlYWNvbl94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5jCmluZGV4IDQxODU3NWYuLjZhMGEyMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5jCkBAIC03NiwxMiArNzYsMTIgQEAKICAqIFJldHVybiBWYWx1ZTogZGF0YSByZWFkCiAgKgogICovCi1CWVRFIFNST01ieVJlYWRFbWJlZGRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQpCit1bnNpZ25lZCBjaGFyIFNST01ieVJlYWRFbWJlZGRlZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q29udG50T2Zmc2V0KQogewotICAgIFdPUkQgICAgd0RlbGF5LCB3Tm9BQ0s7Ci0gICAgQllURSAgICBieVdhaXQ7Ci0gICAgQllURSAgICBieURhdGE7Ci0gICAgQllURSAgICBieU9yZzsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RGVsYXksIHdOb0FDSzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5V2FpdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnOwogCiAgICAgYnlEYXRhID0gMHhGRjsKICAgICBWTlN2SW5Qb3J0Qihkd0lvQmFzZSArIE1BQ19SRUdfSTJNQ0ZHLCAmYnlPcmcpOwpAQCAtMTIyLDE1ICsxMjIsMTUgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgc3VjY2VlZGVkOyBGQUxTRSBpZiBmYWlsZWQuCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgc3VjY2VlZGVkOyBmYWxzZSBpZiBmYWlsZWQuCiAgKgogICovCi1CT09MIFNST01iV3JpdGVFbWJlZGRlZChEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQsIEJZVEUgYnlEYXRhKQorYm9vbCBTUk9NYldyaXRlRW1iZWRkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieURhdGEpCiB7Ci0gICAgV09SRCAgICB3RGVsYXksIHdOb0FDSzsKLSAgICBCWVRFICAgIGJ5V2FpdDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RGVsYXksIHdOb0FDSzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5V2FpdDsKIAotICAgIEJZVEUgICAgYnlPcmc7CisgICAgdW5zaWduZWQgY2hhciBieU9yZzsKIAogICAgIFZOU3ZJblBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DRkcsICZieU9yZyk7CiAgICAgLyogdHVybiBvZmYgaGFyZHdhcmUgcmV0cnkgZm9yIGdldHRpbmcgTkFDSyAqLwpAQCAtMTU3LDEwICsxNTcsMTAgQEAKICAgICB9CiAgICAgaWYgKHdOb0FDSyA9PSBXX01BWF9JMkNSRVRSWSkgewogICAgICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0kyTUNGRywgYnlPcmcpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgVk5Tdk91dFBvcnRCKGR3SW9CYXNlICsgTUFDX1JFR19JMk1DRkcsIGJ5T3JnKTsKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC0xNzgsMTIgKzE3OCwxMiBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIFNST012UmVnQml0c09uKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieUJpdHMpCit2b2lkIFNST012UmVnQml0c09uKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlCaXRzKQogewotICAgIEJZVEUgICAgYnlPcmdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdEYXRhOwogCiAgICAgYnlPcmdEYXRhID0gU1JPTWJ5UmVhZEVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCk7Ci0gICAgU1JPTWJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCwoQllURSkoYnlPcmdEYXRhIHwgYnlCaXRzKSk7CisgICAgU1JPTWJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCwodW5zaWduZWQgY2hhcikoYnlPcmdEYXRhIHwgYnlCaXRzKSk7CiB9CiAKIApAQCAtMTk5LDEyICsxOTksMTIgQEAKICAqICAgICAgbm9uZQogICoKICAqLwotdm9pZCBTUk9NdlJlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5Qml0cykKK3ZvaWQgU1JPTXZSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlCaXRzKQogewotICAgIEJZVEUgICAgYnlPcmdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdEYXRhOwogCiAgICAgYnlPcmdEYXRhID0gU1JPTWJ5UmVhZEVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCk7Ci0gICAgU1JPTWJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCwoQllURSkoYnlPcmdEYXRhICYgKH5ieUJpdHMpKSk7CisgICAgU1JPTWJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCwodW5zaWduZWQgY2hhcikoYnlPcmdEYXRhICYgKH5ieUJpdHMpKSk7CiB9CiAKIApAQCAtMjE5LDEyICsyMTksMTIgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgYWxsIHRlc3QgYml0cyBvbjsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgYWxsIHRlc3QgYml0cyBvbjsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFNST01iSXNSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5VGVzdEJpdHMpCitib29sIFNST01iSXNSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKQogewotICAgIEJZVEUgICAgYnlPcmdEYXRhOworICAgIHVuc2lnbmVkIGNoYXIgYnlPcmdEYXRhOwogCiAgICAgYnlPcmdEYXRhID0gU1JPTWJ5UmVhZEVtYmVkZGVkKGR3SW9CYXNlLCBieUNvbnRudE9mZnNldCk7CiAgICAgcmV0dXJuIChieU9yZ0RhdGEgJiBieVRlc3RCaXRzKSA9PSBieVRlc3RCaXRzOwpAQCAtMjQyLDEyICsyNDIsMTIgQEAKICAqICBPdXQ6CiAgKiAgICAgIG5vbmUKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgYWxsIHRlc3QgYml0cyBvZmY7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIGFsbCB0ZXN0IGJpdHMgb2ZmOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgU1JPTWJJc1JlZ0JpdHNPZmYoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5VGVzdEJpdHMpCitib29sIFNST01iSXNSZWdCaXRzT2ZmKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgYnlDb250bnRPZmZzZXQsIHVuc2lnbmVkIGNoYXIgYnlUZXN0Qml0cykKIHsKLSAgICBCWVRFICAgIGJ5T3JnRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnRGF0YTsKIAogICAgIGJ5T3JnRGF0YSA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwgYnlDb250bnRPZmZzZXQpOwogICAgIHJldHVybiAhKGJ5T3JnRGF0YSAmIGJ5VGVzdEJpdHMpOwpAQCAtMjY2LDEzICsyNjYsMTMgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBTUk9NdlJlYWRBbGxDb250ZW50cyhEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUVlcHJvbVJlZ3MpCit2b2lkIFNST012UmVhZEFsbENvbnRlbnRzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUVlcHJvbVJlZ3MpCiB7CiAgICAgaW50ICAgICBpaTsKIAogICAgIC8qIGlpID0gUm9tIEFkZHJlc3MgKi8KICAgICBmb3IgKGlpID0gMDsgaWkgPCBFRVBfTUFYX0NPTlRFWFRfU0laRTsgaWkrKykgewotICAgICAgICAqcGJ5RWVwcm9tUmVncyA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwoQllURSkgaWkpOworICAgICAgICAqcGJ5RWVwcm9tUmVncyA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwodW5zaWduZWQgY2hhcikgaWkpOwogICAgICAgICBwYnlFZXByb21SZWdzKys7CiAgICAgfQogfQpAQCAtMjkxLDEzICsyOTEsMTMgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZQogICoKICAqLwotdm9pZCBTUk9NdldyaXRlQWxsQ29udGVudHMoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFZXByb21SZWdzKQordm9pZCBTUk9NdldyaXRlQWxsQ29udGVudHModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RWVwcm9tUmVncykKIHsKICAgICBpbnQgICAgIGlpOwogCiAgICAgLyogaWkgPSBSb20gQWRkcmVzcyAqLwogICAgIGZvciAoaWkgPSAwOyBpaSA8IEVFUF9NQVhfQ09OVEVYVF9TSVpFOyBpaSsrKSB7Ci0gICAgICAgIFNST01iV3JpdGVFbWJlZGRlZChkd0lvQmFzZSwoQllURSkgaWksICpwYnlFZXByb21SZWdzKTsKKyAgICAgICAgU1JPTWJXcml0ZUVtYmVkZGVkKGR3SW9CYXNlLCh1bnNpZ25lZCBjaGFyKSBpaSwgKnBieUVlcHJvbVJlZ3MpOwogICAgICAgICBwYnlFZXByb21SZWdzKys7CiAgICAgfQogfQpAQCAtMzE1LDkgKzMxNSw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgU1JPTXZSZWFkRXRoZXJBZGRyZXNzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RXRoZXJBZGRyZXNzKQordm9pZCBTUk9NdlJlYWRFdGhlckFkZHJlc3ModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RXRoZXJBZGRyZXNzKQogewotICAgIEJZVEUgICAgIGlpOworICAgIHVuc2lnbmVkIGNoYXIgaWk7CiAKICAgICAvKiBpaSA9IFJvbSBBZGRyZXNzICovCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgRVRIX0FMRU47IGlpKyspIHsKQEAgLTM0MCw5ICszNDAsOSBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi12b2lkIFNST012V3JpdGVFdGhlckFkZHJlc3MoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFdGhlckFkZHJlc3MpCit2b2lkIFNST012V3JpdGVFdGhlckFkZHJlc3ModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RXRoZXJBZGRyZXNzKQogewotICAgIEJZVEUgICAgIGlpOworICAgIHVuc2lnbmVkIGNoYXIgaWk7CiAKICAgICAvKiBpaSA9IFJvbSBBZGRyZXNzICovCiAgICAgZm9yIChpaSA9IDA7IGlpIDwgRVRIX0FMRU47IGlpKyspIHsKQEAgLTM2NCwxMSArMzY0LDExIEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUKICAqCiAgKi8KLXZvaWQgU1JPTXZSZWFkU3ViU3lzVmVuSWQoRFdPUkRfUFRSIGR3SW9CYXNlLCBQRFdPUkQgcGR3U3ViU3lzVmVuSWQpCit2b2lkIFNST012UmVhZFN1YlN5c1ZlbklkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgKnBkd1N1YlN5c1ZlbklkKQogewotICAgIFBCWVRFICAgcGJ5RGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEYXRhOwogCi0gICAgcGJ5RGF0YSA9IChQQllURSlwZHdTdWJTeXNWZW5JZDsKKyAgICBwYnlEYXRhID0gKHVuc2lnbmVkIGNoYXIgKilwZHdTdWJTeXNWZW5JZDsKICAgICAvKiBzdWIgdmVuZG9yICovCiAgICAgKnBieURhdGEgPSBTUk9NYnlSZWFkRW1iZWRkZWQoZHdJb0Jhc2UsIDYpOwogICAgICoocGJ5RGF0YSsxKSA9IFNST01ieVJlYWRFbWJlZGRlZChkd0lvQmFzZSwgNyk7CkBAIC0zODYsMTUgKzM4NiwxNSBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgU1JPTWJBdXRvTG9hZChEV09SRF9QVFIgZHdJb0Jhc2UpCitib29sIFNST01iQXV0b0xvYWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSkKIHsKLSAgICBCWVRFICAgIGJ5V2FpdDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5V2FpdDsKICAgICBpbnQgICAgIGlpOwogCi0gICAgQllURSAgICBieU9yZzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5T3JnOwogCiAgICAgVk5TdkluUG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0kyTUNGRywgJmJ5T3JnKTsKICAgICAvKiB0dXJuIG9uIGhhcmR3YXJlIHJldHJ5ICovCkBAIC00MTMsOCArNDEzLDggQEAKICAgICBWTlN2T3V0UG9ydEIoZHdJb0Jhc2UgKyBNQUNfUkVHX0kyTUNGRywgYnlPcmcpOwogCiAgICAgaWYgKGlpID09IEVFUF9NQVhfQ09OVEVYVF9TSVpFKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3Nyb20uaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5oCmluZGV4IGRiYjNmNWUuLjRjMjYxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvc3JvbS5oCkBAIC05NywzNCArOTcsMzQgQEAKIC8vICAgICAgMjA0OCBiaXRzID0gMjU2IGJ5dGVzID0gMTI4IHdvcmRzCiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU1Nyb21SZWcgewotICAgIEJZVEUgICAgYWJ5UEFSWzZdOyAgICAgICAgICAgICAgICAgIC8vIDB4MDAgKFdPUkQpCisgICAgdW5zaWduZWQgY2hhciBhYnlQQVJbNl07ICAgICAgICAgICAgICAgICAgLy8gMHgwMCAodW5zaWduZWQgc2hvcnQpCiAKLSAgICBXT1JEICAgIHdTVUJfVklEOyAgICAgICAgICAgICAgICAgICAvLyAweDAzIChXT1JEKQotICAgIFdPUkQgICAgd1NVQl9TSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgd1NVQl9WSUQ7ICAgICAgICAgICAgICAgICAgIC8vIDB4MDMgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIHNob3J0IHdTVUJfU0lEOwogCi0gICAgQllURSAgICBieUJDRkcwOyAgICAgICAgICAgICAgICAgICAgLy8gMHgwNSAoV09SRCkKLSAgICBCWVRFICAgIGJ5QkNGRzE7CisgICAgdW5zaWduZWQgY2hhciBieUJDRkcwOyAgICAgICAgICAgICAgICAgICAgLy8gMHgwNSAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieUJDRkcxOwogCi0gICAgQllURSAgICBieUZDUjA7ICAgICAgICAgICAgICAgICAgICAgLy8gMHgwNiAoV09SRCkKLSAgICBCWVRFICAgIGJ5RkNSMTsKLSAgICBCWVRFICAgIGJ5UE1DMDsgICAgICAgICAgICAgICAgICAgICAvLyAweDA3IChXT1JEKQotICAgIEJZVEUgICAgYnlQTUMxOwotICAgIEJZVEUgICAgYnlNQVhMQVQ7ICAgICAgICAgICAgICAgICAgIC8vIDB4MDggKFdPUkQpCi0gICAgQllURSAgICBieU1JTkdOVDsKLSAgICBCWVRFICAgIGJ5Q0ZHMDsgICAgICAgICAgICAgICAgICAgICAvLyAweDA5IChXT1JEKQotICAgIEJZVEUgICAgYnlDRkcxOwotICAgIFdPUkQgICAgd0NJU1BUUjsgICAgICAgICAgICAgICAgICAgIC8vIDB4MEEgKFdPUkQpCi0gICAgV09SRCAgICB3UnN2MDsgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwQiAoV09SRCkKLSAgICBXT1JEICAgIHdSc3YxOyAgICAgICAgICAgICAgICAgICAgICAvLyAweDBDIChXT1JEKQotICAgIEJZVEUgICAgYnlCQlBBSVI7ICAgICAgICAgICAgICAgICAgIC8vIDB4MEQgKFdPUkQpCi0gICAgQllURSAgICBieVJGVFlQRTsKLSAgICBCWVRFICAgIGJ5TWluQ2hhbm5lbDsgICAgICAgICAgICAgICAvLyAweDBFIChXT1JEKQotICAgIEJZVEUgICAgYnlNYXhDaGFubmVsOwotICAgIEJZVEUgICAgYnlTaWduYXR1cmU7ICAgICAgICAgICAgICAgIC8vIDB4MEYgKFdPUkQpCi0gICAgQllURSAgICBieUNoZWNrU3VtOworICAgIHVuc2lnbmVkIGNoYXIgYnlGQ1IwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDYgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlGQ1IxOworICAgIHVuc2lnbmVkIGNoYXIgYnlQTUMwOyAgICAgICAgICAgICAgICAgICAgIC8vIDB4MDcgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlQTUMxOworICAgIHVuc2lnbmVkIGNoYXIgYnlNQVhMQVQ7ICAgICAgICAgICAgICAgICAgIC8vIDB4MDggKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIGNoYXIgYnlNSU5HTlQ7CisgICAgdW5zaWduZWQgY2hhciBieUNGRzA7ICAgICAgICAgICAgICAgICAgICAgLy8gMHgwOSAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieUNGRzE7CisgICAgdW5zaWduZWQgc2hvcnQgd0NJU1BUUjsgICAgICAgICAgICAgICAgICAgIC8vIDB4MEEgKHVuc2lnbmVkIHNob3J0KQorICAgIHVuc2lnbmVkIHNob3J0IHdSc3YwOyAgICAgICAgICAgICAgICAgICAgICAvLyAweDBCICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBzaG9ydCB3UnN2MTsgICAgICAgICAgICAgICAgICAgICAgLy8gMHgwQyAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieUJCUEFJUjsgICAgICAgICAgICAgICAgICAgLy8gMHgwRCAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBieVJGVFlQRTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWluQ2hhbm5lbDsgICAgICAgICAgICAgICAvLyAweDBFICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWF4Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U2lnbmF0dXJlOyAgICAgICAgICAgICAgICAvLyAweDBGICh1bnNpZ25lZCBzaG9ydCkKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q2hlY2tTdW07CiAKLSAgICBCWVRFICAgIGFieVJlc2VydmVkMFs5Nl07ICAgICAgICAgICAvLyAweDEwIChXT1JEKQotICAgIEJZVEUgICAgYWJ5Q0lTWzEyOF07ICAgICAgICAgICAgICAgIC8vIDB4ODAgKFdPUkQpCisgICAgdW5zaWduZWQgY2hhciBhYnlSZXNlcnZlZDBbOTZdOyAgICAgICAgICAgLy8gMHgxMCAodW5zaWduZWQgc2hvcnQpCisgICAgdW5zaWduZWQgY2hhciBhYnlDSVNbMTI4XTsgICAgICAgICAgICAgICAgLy8gMHg4MCAodW5zaWduZWQgc2hvcnQpCiB9IFNTcm9tUmVnLCAqUFNTcm9tUmVnOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTM1LDIzICsxMzUsMjMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQllURSBTUk9NYnlSZWFkRW1iZWRkZWQoRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0KTsKLUJPT0wgU1JPTWJXcml0ZUVtYmVkZGVkKERXT1JEX1BUUiBkd0lvQmFzZSwgQllURSBieUNvbnRudE9mZnNldCwgQllURSBieURhdGEpOwordW5zaWduZWQgY2hhciBTUk9NYnlSZWFkRW1iZWRkZWQodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCk7Citib29sIFNST01iV3JpdGVFbWJlZGRlZCh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyIGJ5Q29udG50T2Zmc2V0LCB1bnNpZ25lZCBjaGFyIGJ5RGF0YSk7CiAKLXZvaWQgU1JPTXZSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5Qml0cyk7Ci12b2lkIFNST012UmVnQml0c09mZihEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQsIEJZVEUgYnlCaXRzKTsKK3ZvaWQgU1JPTXZSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieUJpdHMpOwordm9pZCBTUk9NdlJlZ0JpdHNPZmYodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieUJpdHMpOwogCi1CT09MIFNST01iSXNSZWdCaXRzT24oRFdPUkRfUFRSIGR3SW9CYXNlLCBCWVRFIGJ5Q29udG50T2Zmc2V0LCBCWVRFIGJ5VGVzdEJpdHMpOwotQk9PTCBTUk9NYklzUmVnQml0c09mZihEV09SRF9QVFIgZHdJb0Jhc2UsIEJZVEUgYnlDb250bnRPZmZzZXQsIEJZVEUgYnlUZXN0Qml0cyk7Citib29sIFNST01iSXNSZWdCaXRzT24odW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKK2Jvb2wgU1JPTWJJc1JlZ0JpdHNPZmYodW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciBieUNvbnRudE9mZnNldCwgdW5zaWduZWQgY2hhciBieVRlc3RCaXRzKTsKIAotdm9pZCBTUk9NdlJlYWRBbGxDb250ZW50cyhEV09SRF9QVFIgZHdJb0Jhc2UsIFBCWVRFIHBieUVlcHJvbVJlZ3MpOwotdm9pZCBTUk9NdldyaXRlQWxsQ29udGVudHMoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFZXByb21SZWdzKTsKK3ZvaWQgU1JPTXZSZWFkQWxsQ29udGVudHModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RWVwcm9tUmVncyk7Cit2b2lkIFNST012V3JpdGVBbGxDb250ZW50cyh1bnNpZ25lZCBsb25nIGR3SW9CYXNlLCB1bnNpZ25lZCBjaGFyICpwYnlFZXByb21SZWdzKTsKIAotdm9pZCBTUk9NdlJlYWRFdGhlckFkZHJlc3MoRFdPUkRfUFRSIGR3SW9CYXNlLCBQQllURSBwYnlFdGhlckFkZHJlc3MpOwotdm9pZCBTUk9NdldyaXRlRXRoZXJBZGRyZXNzKERXT1JEX1BUUiBkd0lvQmFzZSwgUEJZVEUgcGJ5RXRoZXJBZGRyZXNzKTsKK3ZvaWQgU1JPTXZSZWFkRXRoZXJBZGRyZXNzKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGNoYXIgKnBieUV0aGVyQWRkcmVzcyk7Cit2b2lkIFNST012V3JpdGVFdGhlckFkZHJlc3ModW5zaWduZWQgbG9uZyBkd0lvQmFzZSwgdW5zaWduZWQgY2hhciAqcGJ5RXRoZXJBZGRyZXNzKTsKIAotdm9pZCBTUk9NdlJlYWRTdWJTeXNWZW5JZChEV09SRF9QVFIgZHdJb0Jhc2UsIFBEV09SRCBwZHdTdWJTeXNWZW5JZCk7Cit2b2lkIFNST012UmVhZFN1YlN5c1ZlbklkKHVuc2lnbmVkIGxvbmcgZHdJb0Jhc2UsIHVuc2lnbmVkIGxvbmcgKnBkd1N1YlN5c1ZlbklkKTsKIAotQk9PTCBTUk9NYkF1dG9Mb2FkIChEV09SRF9QVFIgZHdJb0Jhc2UpOworYm9vbCBTUk9NYkF1dG9Mb2FkICh1bnNpZ25lZCBsb25nIGR3SW9CYXNlKTsKIAogI2VuZGlmIC8vIF9fRUVQUk9NX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90Y3JjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuYwppbmRleCA1ZjBjNzQ3Li5mOWMyOGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuYwpAQCAtNDIsNyArNDIsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLy8gMzItYml0IENSQyB0YWJsZQotc3RhdGljIGNvbnN0IERXT1JEIHNfYWR3Q3JjMzJUYWJsZVsyNTZdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgc19hZHdDcmMzMlRhYmxlWzI1Nl0gPSB7CiAgICAgMHgwMDAwMDAwMEwsIDB4NzcwNzMwOTZMLCAweEVFMEU2MTJDTCwgMHg5OTA5NTFCQUwsCiAgICAgMHgwNzZEQzQxOUwsIDB4NzA2QUY0OEZMLCAweEU5NjNBNTM1TCwgMHg5RTY0OTVBM0wsCiAgICAgMHgwRURCODgzMkwsIDB4NzlEQ0I4QTRMLCAweEUwRDVFOTFFTCwgMHg5N0QyRDk4OEwsCkBAIC0xMzIsMTMgKzEzMiwxMyBAQAogICogUmV0dXJuIFZhbHVlOiBDUkMtMzIKICAqCiAtKi8KLURXT1JEIENSQ2R3Q3JjMzIgKFBCWVRFIHBieURhdGEsIFVJTlQgY2JCeXRlLCBEV09SRCBkd0NyY1NlZWQpCit1bnNpZ25lZCBsb25nIENSQ2R3Q3JjMzIgKHVuc2lnbmVkIGNoYXIgKnBieURhdGEsIHVuc2lnbmVkIGludCBjYkJ5dGUsIHVuc2lnbmVkIGxvbmcgZHdDcmNTZWVkKQogewotICAgIERXT1JEIGR3Q3JjOworICAgIHVuc2lnbmVkIGxvbmcgZHdDcmM7CiAKICAgICBkd0NyYyA9IGR3Q3JjU2VlZDsKICAgICB3aGlsZSAoY2JCeXRlLS0pIHsKLSAgICAgICAgZHdDcmMgPSBzX2Fkd0NyYzMyVGFibGVbKEJZVEUpKChkd0NyYyBeICgqcGJ5RGF0YSkpICYgMHhGRildIF4gKGR3Q3JjID4+IDgpOworICAgICAgICBkd0NyYyA9IHNfYWR3Q3JjMzJUYWJsZVsodW5zaWduZWQgY2hhcikoKGR3Q3JjIF4gKCpwYnlEYXRhKSkgJiAweEZGKV0gXiAoZHdDcmMgPj4gOCk7CiAgICAgICAgIHBieURhdGErKzsKICAgICB9CiAKQEAgLTE2NCw3ICsxNjQsNyBAQAogICogUmV0dXJuIFZhbHVlOiBDUkMtMzIKICAqCiAtKi8KLURXT1JEIENSQ2R3R2V0Q3JjMzIgKFBCWVRFIHBieURhdGEsIFVJTlQgY2JCeXRlKQordW5zaWduZWQgbG9uZyBDUkNkd0dldENyYzMyICh1bnNpZ25lZCBjaGFyICpwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlKQogewogICAgIHJldHVybiB+Q1JDZHdDcmMzMihwYnlEYXRhLCBjYkJ5dGUsIDB4RkZGRkZGRkZMKTsKIH0KQEAgLTE5MCw3ICsxOTAsNyBAQAogICogUmV0dXJuIFZhbHVlOiBDUkMtMzIKICAqCiAtKi8KLURXT1JEIENSQ2R3R2V0Q3JjMzJFeChQQllURSBwYnlEYXRhLCBVSU5UIGNiQnl0ZSwgRFdPUkQgZHdQcmVDUkMpCit1bnNpZ25lZCBsb25nIENSQ2R3R2V0Q3JjMzJFeCh1bnNpZ25lZCBjaGFyICpwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlLCB1bnNpZ25lZCBsb25nIGR3UHJlQ1JDKQogewogICAgIHJldHVybiBDUkNkd0NyYzMyKHBieURhdGEsIGNiQnl0ZSwgZHdQcmVDUkMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90Y3JjLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuaAppbmRleCA1ZmFhNDhiLi5kMDQ0OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RjcmMuaApAQCAtNDMsOSArNDMsOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1EV09SRCBDUkNkd0NyYzMyKFBCWVRFIHBieURhdGEsIFVJTlQgY2JCeXRlLCBEV09SRCBkd0NyY1NlZWQpOwotRFdPUkQgQ1JDZHdHZXRDcmMzMihQQllURSBwYnlEYXRhLCBVSU5UIGNiQnl0ZSk7Ci1EV09SRCBDUkNkd0dldENyYzMyRXgoUEJZVEUgcGJ5RGF0YSwgVUlOVCBjYkJ5dGUsIERXT1JEIGR3UHJlQ1JDKTsKK3Vuc2lnbmVkIGxvbmcgQ1JDZHdDcmMzMih1bnNpZ25lZCBjaGFyICpwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlLCB1bnNpZ25lZCBsb25nIGR3Q3JjU2VlZCk7Cit1bnNpZ25lZCBsb25nIENSQ2R3R2V0Q3JjMzIodW5zaWduZWQgY2hhciAqcGJ5RGF0YSwgdW5zaWduZWQgaW50IGNiQnl0ZSk7Cit1bnNpZ25lZCBsb25nIENSQ2R3R2V0Q3JjMzJFeCh1bnNpZ25lZCBjaGFyICpwYnlEYXRhLCB1bnNpZ25lZCBpbnQgY2JCeXRlLCB1bnNpZ25lZCBsb25nIGR3UHJlQ1JDKTsKIAogI2VuZGlmIC8vIF9fVENSQ19IX18KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGV0aGVyLmMKaW5kZXggZDhiYTY3My4uMWNmODUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5jCkBAIC02MSwxNCArNjEsMTQgQEAKICAqIFJldHVybiBWYWx1ZTogSGFzaCB2YWx1ZQogICoKICAqLwotQllURSBFVEhieUdldEhhc2hJbmRleEJ5Q3JjMzIgKFBCWVRFIHBieU11bHRpQWRkcikKK3Vuc2lnbmVkIGNoYXIgRVRIYnlHZXRIYXNoSW5kZXhCeUNyYzMyICh1bnNpZ25lZCBjaGFyICpwYnlNdWx0aUFkZHIpCiB7CiAgICAgaW50ICAgICBpaTsKLSAgICBCWVRFICAgIGJ5VG1wSGFzaDsKLSAgICBCWVRFICAgIGJ5SGFzaCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieVRtcEhhc2g7CisgICAgdW5zaWduZWQgY2hhciBieUhhc2ggPSAwOwogCiAgICAgLy8gZ2V0IHRoZSBsZWFzdCA2LWJpdHMgZnJvbSBDUkMgZ2VuZXJhdG9yCi0gICAgYnlUbXBIYXNoID0gKEJZVEUpKENSQ2R3Q3JjMzIocGJ5TXVsdGlBZGRyLCBFVEhfQUxFTiwKKyAgICBieVRtcEhhc2ggPSAodW5zaWduZWQgY2hhcikoQ1JDZHdDcmMzMihwYnlNdWx0aUFkZHIsIEVUSF9BTEVOLAogICAgICAgICAgICAgMHhGRkZGRkZGRkwpICYgMHgzRik7CiAgICAgLy8gcmV2ZXJzZSBtb3N0IGJpdCB0byBsZWFzdCBiaXQKICAgICBmb3IgKGlpID0gMDsgaWkgPCAoc2l6ZW9mKGJ5VG1wSGFzaCkgKiA4KTsgaWkrKykgewpAQCAtOTMsMTcgKzkzLDE3IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIG9rOyBGQUxTRSBpZiBlcnJvci4KKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBvazsgZmFsc2UgaWYgZXJyb3IuCiAgKgogICovCi1CT09MIEVUSGJJc0J1ZmZlckNyYzMyT2sgKFBCWVRFIHBieUJ1ZmZlciwgVUlOVCBjYkZyYW1lTGVuZ3RoKQorYm9vbCBFVEhiSXNCdWZmZXJDcmMzMk9rICh1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoKQogewotICAgIERXT1JEIGR3Q1JDOworICAgIHVuc2lnbmVkIGxvbmcgZHdDUkM7CiAKICAgICBkd0NSQyA9IENSQ2R3R2V0Q3JjMzIocGJ5QnVmZmVyLCBjYkZyYW1lTGVuZ3RoIC0gNCk7Ci0gICAgaWYgKGNwdV90b19sZTMyKCooKFBEV09SRCkocGJ5QnVmZmVyICsgY2JGcmFtZUxlbmd0aCAtIDQpKSkgIT0gZHdDUkMpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChjcHVfdG9fbGUzMigqKCh1bnNpZ25lZCBsb25nICopKHBieUJ1ZmZlciArIGNiRnJhbWVMZW5ndGggLSA0KSkpICE9IGR3Q1JDKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGV0aGVyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RldGhlci5oCmluZGV4IDNjOWFjZDcuLjc4N2Q4ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGV0aGVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90ZXRoZXIuaApAQCAtMjksNyArMjksNyBAQAogI2lmbmRlZiBfX1RFVEhFUl9IX18KICNkZWZpbmUgX19URVRIRVJfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSAidHR5cGUuaCIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTM5LDEyICszOSw2IEBACiAjZGVmaW5lIFVfRVRIRVJfQUREUl9TVFJfTEVOIChFVEhfQUxFTiAqIDIgKyAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV0aGVybmV0IGFkZHJlc3Mgc3RyaW5nIGxlbmd0aAogCi0jZGVmaW5lIE1JTl9EQVRBX0xFTiAgICAgICAgNDYgICAgICAgICAgLy8gbWluIGRhdGEgbGVuZ3RoCi0KLSNkZWZpbmUgTUlOX1BBQ0tFVF9MRU4gICAgICAoTUlOX0RBVEFfTEVOICsgRVRIX0hMRU4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW4gdG90YWwgcGFja2V0IGxlbmd0aCAodHgpCi0KICNkZWZpbmUgTUFYX0xPT0tBSEVBRF9TSVpFICBFVEhfRlJBTUVfTEVOCiAKICNkZWZpbmUgVV9NVUxUSV9BRERSX0xFTiAgICA4ICAgICAgICAgICAvLyBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGgKQEAgLTE2MCw5ICsxNTQsOSBAQAogLy8gRXRoZXJuZXQgcGFja2V0CiAvLwogdHlwZWRlZiBzdHJ1Y3QgdGFnU0V0aGVybmV0SGVhZGVyIHsKLSAgICBCWVRFICAgIGFieURzdEFkZHJbRVRIX0FMRU5dOwotICAgIEJZVEUgICAgYWJ5U3JjQWRkcltFVEhfQUxFTl07Ci0gICAgV09SRCAgICB3VHlwZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieURzdEFkZHJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U3JjQWRkcltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1R5cGU7CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0V0aGVybmV0SGVhZGVyLCAqUFNFdGhlcm5ldEhlYWRlcjsKIApAQCAtMTcxLDkgKzE2NSw5IEBACiAvLyA4MDJfMyBwYWNrZXQKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTODAyXzNIZWFkZXIgewotICAgIEJZVEUgICAgYWJ5RHN0QWRkcltFVEhfQUxFTl07Ci0gICAgQllURSAgICBhYnlTcmNBZGRyW0VUSF9BTEVOXTsKLSAgICBXT1JEICAgIHdMZW47CisgICAgdW5zaWduZWQgY2hhciBhYnlEc3RBZGRyW0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNyY0FkZHJbRVRIX0FMRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdMZW47CiB9X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogUzgwMl8zSGVhZGVyLCAqUFM4MDJfM0hlYWRlcjsKIApAQCAtMTgxLDM3ICsxNzUsMTcgQEAKIC8vIDgwMl8xMSBwYWNrZXQKIC8vCiB0eXBlZGVmIHN0cnVjdCB0YWdTODAyXzExSGVhZGVyIHsKLSAgICBXT1JEICAgIHdGcmFtZUN0bDsKLSAgICBXT1JEICAgIHdEdXJhdGlvbklEOwotICAgIEJZVEUgICAgYWJ5QWRkcjFbRVRIX0FMRU5dOwotICAgIEJZVEUgICAgYWJ5QWRkcjJbRVRIX0FMRU5dOwotICAgIEJZVEUgICAgYWJ5QWRkcjNbRVRIX0FMRU5dOwotICAgIFdPUkQgICAgd1NlcUN0bDsKLSAgICBCWVRFICAgIGFieUFkZHI0W0VUSF9BTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RnJhbWVDdGw7CisgICAgdW5zaWduZWQgc2hvcnQgd0R1cmF0aW9uSUQ7CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMVtFVEhfQUxFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyMltFVEhfQUxFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlBZGRyM1tFVEhfQUxFTl07CisgICAgdW5zaWduZWQgc2hvcnQgd1NlcUN0bDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUFkZHI0W0VUSF9BTEVOXTsKIH1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTODAyXzExSGVhZGVyLCAqUFM4MDJfMTFIZWFkZXI7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vLyBGcmFtZSB0eXBlIG1hY3JvCi0KLSNkZWZpbmUgSVNfTVVMVElDQVNUX0FERFJFU1MocGJ5RXRoZXJBZGRyKSAgICAgICAgICBcCi0gICAgKCgqKFBCWVRFKShwYnlFdGhlckFkZHIpICYgMHgwMSkgPT0gMSkKLQotI2RlZmluZSBJU19CUk9BRENBU1RfQUREUkVTUyhwYnlFdGhlckFkZHIpICggICAgICAgIFwKLSAgICAoKihQRFdPUkQpKHBieUV0aGVyQWRkcikgPT0gMHhGRkZGRkZGRkwpICYmICAgICBcCi0gICAgKCooUFdPUkQpKChQQllURSkocGJ5RXRoZXJBZGRyKSArIDQpID09IDB4RkZGRikgXAotKQotCi0jZGVmaW5lIElTX05VTExfQUREUkVTUyhwYnlFdGhlckFkZHIpICggICAgICAgICAgICAgXAotICAgICgqKFBEV09SRCkocGJ5RXRoZXJBZGRyKSA9PSAwTCkgJiYgICAgICAgICAgICAgIFwKLSAgICAoKihQV09SRCkoKFBCWVRFKShwYnlFdGhlckFkZHIpICsgNCkgPT0gMCkgICAgICBcCi0pCi0KLSNkZWZpbmUgSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5QWRkcjEsIHBieUFkZHIyKSAoICBcCi0gICAgKCooUERXT1JEKShwYnlBZGRyMSkgPT0gKihQRFdPUkQpKHBieUFkZHIyKSkgJiYgXAotICAgICgqKFBXT1JEKSgoUEJZVEUpKHBieUFkZHIxKSArIDQpID09ICAgICAgICAgICAgIFwKLSAgICAqKFBXT1JEKSgoUEJZVEUpKHBieUFkZHIyKSArIDQpKSAgICAgICAgICAgICAgICBcCi0pCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIxOSw5ICsxOTMsOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1CWVRFIEVUSGJ5R2V0SGFzaEluZGV4QnlDcmMzMihQQllURSBwYnlNdWx0aUFkZHIpOwotLy9CWVRFIEVUSGJ5R2V0SGFzaEluZGV4QnlDcmMoUEJZVEUgcGJ5TXVsdGlBZGRyKTsKLUJPT0wgRVRIYklzQnVmZmVyQ3JjMzJPayhQQllURSBwYnlCdWZmZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCk7Cit1bnNpZ25lZCBjaGFyIEVUSGJ5R2V0SGFzaEluZGV4QnlDcmMzMih1bnNpZ25lZCBjaGFyICpwYnlNdWx0aUFkZHIpOworLy91bnNpZ25lZCBjaGFyIEVUSGJ5R2V0SGFzaEluZGV4QnlDcmModW5zaWduZWQgY2hhciAqcGJ5TXVsdGlBZGRyKTsKK2Jvb2wgRVRIYklzQnVmZmVyQ3JjMzJPayh1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIsIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoKTsKIAogI2VuZGlmIC8vIF9fVEVUSEVSX0hfXwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCmluZGV4IGY4M2FmNTkuLmVkM2VhYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5jCkBAIC01NSw3ICs1NSw3IEBACiAvKiBUaGUgMm5kIHRhYmxlIGlzIHRoZSBzYW1lIGFzIHRoZSAxc3QgYnV0IHdpdGggdGhlIHVwcGVyIGFuZCBsb3dlciAgICovCiAvKiBieXRlcyBzd2FwcGVkLiBUbyBhbGxvdyBhbiBlbmRpYW4gdG9sZXJhbnQgaW1wbGVtZW50YXRpb24sIHRoZSBieXRlICovCiAvKiBoYWx2ZXMgaGF2ZSBiZWVuIGV4cHJlc3NlZCBpbmRlcGVuZGVudGx5IGhlcmUuICAgICAgICAgICAgICAgICAgICAgICovCi1jb25zdCBCWVRFIFRLSVBfU2JveF9Mb3dlclsyNTZdID0geworY29uc3QgdW5zaWduZWQgY2hhciBUS0lQX1Nib3hfTG93ZXJbMjU2XSA9IHsKICAgICAweEE1LDB4ODQsMHg5OSwweDhELDB4MEQsMHhCRCwweEIxLDB4NTQsCiAgICAgMHg1MCwweDAzLDB4QTksMHg3RCwweDE5LDB4NjIsMHhFNiwweDlBLAogICAgIDB4NDUsMHg5RCwweDQwLDB4ODcsMHgxNSwweEVCLDB4QzksMHgwQiwKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAweEMzLDB4QjAsMHg3NywweDExLDB4Q0IsMHhGQywweEQ2LDB4M0EKIH07CiAKLWNvbnN0IEJZVEUgVEtJUF9TYm94X1VwcGVyWzI1Nl0gPSB7Citjb25zdCB1bnNpZ25lZCBjaGFyIFRLSVBfU2JveF9VcHBlclsyNTZdID0gewogICAgIDB4QzYsMHhGOCwweEVFLDB4RjYsMHhGRiwweEQ2LDB4REUsMHg5MSwKICAgICAweDYwLDB4MDIsMHhDRSwweDU2LDB4RTcsMHhCNSwweDRELDB4RUMsCiAgICAgMHg4RiwweDFGLDB4ODksMHhGQSwweEVGLDB4QjIsMHg4RSwweEZCLApAQCAtMTg0LDExICsxODQsMTEgQEAKICAqCiAgKi8KIHZvaWQgVEtJUHZNaXhLZXkoCi0gICAgUEJZVEUgICBwYnlUS2V5LAotICAgIFBCWVRFICAgcGJ5VEEsCi0gICAgV09SRCAgICB3VFNDMTVfMCwKLSAgICBEV09SRCAgIGR3VFNDNDdfMTYsCi0gICAgUEJZVEUgICBwYnlSQzRLZXkKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlUS2V5LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRBLAorICAgIHVuc2lnbmVkIHNob3J0IHdUU0MxNV8wLAorICAgIHVuc2lnbmVkIGxvbmcgZHdUU0M0N18xNiwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlSQzRLZXkKICAgICApCiB7CiAgICAgdW5zaWduZWQgaW50IHAxa1s1XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdGtpcC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmgKaW5kZXggM2RmYTdmNS4uZWI1OTUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90a2lwLmgKQEAgLTQ3LDExICs0NywxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCBUS0lQdk1peEtleSgKLSAgICBQQllURSAgIHBieVRLZXksCi0gICAgUEJZVEUgICBwYnlUQSwKLSAgICBXT1JEICAgIHdUU0MxNV8wLAotICAgIERXT1JEICAgZHdUU0M0N18xNiwKLSAgICBQQllURSAgIHBieVJDNEtleQorICAgIHVuc2lnbmVkIGNoYXIgKnBieVRLZXksCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VEEsCisgICAgdW5zaWduZWQgc2hvcnQgd1RTQzE1XzAsCisgICAgdW5zaWduZWQgbG9uZyBkd1RTQzQ3XzE2LAorICAgIHVuc2lnbmVkIGNoYXIgKnBieVJDNEtleQogICAgICk7CiAKICNlbmRpZiAvLyBfX1RLSVBfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RtYWNyby5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90bWFjcm8uaAppbmRleCBlOTZjMTQwLi5lOGIxNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3RtYWNyby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdG1hY3JvLmgKQEAgLTM0LDI3ICszNCwyNyBAQAogLyoqKioqKiBDb21tb24gaGVscGVyIG1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2lmICFkZWZpbmVkKExPQllURSkKLSNkZWZpbmUgTE9CWVRFKHcpICAgICAgICAgICAoKEJZVEUpKHcpKQorI2RlZmluZSBMT0JZVEUodykgICAgICAgICAgICgodW5zaWduZWQgY2hhcikodykpCiAjZW5kaWYKICNpZiAhZGVmaW5lZChISUJZVEUpCi0jZGVmaW5lIEhJQllURSh3KSAgICAgICAgICAgKChCWVRFKSgoKFdPUkQpKHcpID4+IDgpICYgMHhGRikpCisjZGVmaW5lIEhJQllURSh3KSAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIHNob3J0KSh3KSA+PiA4KSAmIDB4RkYpKQogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChMT1dPUkQpCi0jZGVmaW5lIExPV09SRChkKSAgICAgICAgICAgKChXT1JEKShkKSkKKyNkZWZpbmUgTE9XT1JEKGQpICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KShkKSkKICNlbmRpZgogI2lmICFkZWZpbmVkKEhJV09SRCkKLSNkZWZpbmUgSElXT1JEKGQpICAgICAgICAgICAoKFdPUkQpKCgoKERXT1JEKShkKSkgPj4gMTYpICYgMHhGRkZGKSkKKyNkZWZpbmUgSElXT1JEKGQpICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgoKCh1bnNpZ25lZCBsb25nKShkKSkgPj4gMTYpICYgMHhGRkZGKSkKICNlbmRpZgogCiAjZGVmaW5lIExPRFdPUkQocSkgICAgICAgICAgKChxKS51LmR3TG93RHdvcmQpCiAjZGVmaW5lIEhJRFdPUkQocSkgICAgICAgICAgKChxKS51LmR3SGlnaER3b3JkKQogCiAjaWYgIWRlZmluZWQoTUFLRVdPUkQpCi0jZGVmaW5lIE1BS0VXT1JEKGxiLCBoYikgICAgKChXT1JEKSgoKEJZVEUpKGxiKSkgfCAoKChXT1JEKSgoQllURSkoaGIpKSkgPDwgOCkpKQorI2RlZmluZSBNQUtFV09SRChsYiwgaGIpICAgICgodW5zaWduZWQgc2hvcnQpKCgodW5zaWduZWQgY2hhcikobGIpKSB8ICgoKHVuc2lnbmVkIHNob3J0KSgodW5zaWduZWQgY2hhcikoaGIpKSkgPDwgOCkpKQogI2VuZGlmCiAjaWYgIWRlZmluZWQoTUFLRURXT1JEKQotI2RlZmluZSBNQUtFRFdPUkQobHcsIGh3KSAgICgoRFdPUkQpKCgoV09SRCkobHcpKSB8ICgoKERXT1JEKSgoV09SRCkoaHcpKSkgPDwgMTYpKSkKKyNkZWZpbmUgTUFLRURXT1JEKGx3LCBodykgICAoKHVuc2lnbmVkIGxvbmcpKCgodW5zaWduZWQgc2hvcnQpKGx3KSkgfCAoKCh1bnNpZ25lZCBsb25nKSgodW5zaWduZWQgc2hvcnQpKGh3KSkpIDw8IDE2KSkpCiAjZW5kaWYKIAogI2VuZGlmIC8vIF9fVE1BQ1JPX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90dHlwZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS90dHlwZS5oCmluZGV4IDI5MjEwODMuLjM3YzhmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdHR5cGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3R0eXBlLmgKQEAgLTMzLDIzICszMywxMCBAQAogCiAvKioqKioqKiBDb21tb24gZGVmaW5pdGlvbnMgYW5kIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIE9VVAotI2RlZmluZSBPVVQKLSNlbmRpZgotCiAjaWZuZGVmIFR4SW5TbGVlcAogI2RlZmluZSBUeEluU2xlZXAKICNlbmRpZgogCi10eXBlZGVmIGludCAgICAgICAgICAgICBCT09MOwotCi0jaWYgIWRlZmluZWQoVFJVRSkKLSNkZWZpbmUgVFJVRSAgICAgICAgICAgIDEKLSNlbmRpZgotI2lmICFkZWZpbmVkKEZBTFNFKQotI2RlZmluZSBGQUxTRSAgICAgICAgICAgMAotI2VuZGlmCi0KIC8vMjAwNy0wODA5LTAxPEFkZD5ieSBNaWtlTGl1CiAjaWZuZGVmICB1cGRhdGVfQnNzTGlzdAogI2RlZmluZSB1cGRhdGVfQnNzTGlzdApAQCAtNjUsMTAgKzUyLDYgQEAKICNkZWZpbmUgQ2FsY3VfTGlua1F1YWwKICNlbmRpZgogCi0jaWZuZGVmIENhbGN1X0xpbmtRdWFsCi0jZGVmaW5lIENhbGN1X0xpbmtRdWFsCi0jZW5kaWYKLQogLyoqKioqKiBTaW1wbGUgdHlwZWRlZnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogVGhlc2UgbGluZXMgYXNzdW1lIHRoYXQgeW91ciBjb21waWxlcidzIGxvbmdzIGFyZSAzMiBiaXRzIGFuZApAQCAtNzYsMzcgKzU5LDEzIEBACiAgKiBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhleSdyZSBzaWduZWQgb3IgdW5zaWduZWQuCiAgKi8KIAotdHlwZWRlZiBzaWduZWQgY2hhciAgICAgICAgICAgICBJODsgICAgIC8qIDgtYml0IHNpZ25lZCBpbnRlZ2VyICovCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICAgICAgVTg7ICAgICAvKiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIFUxNjsgICAgLyogMTYtYml0IHVuc2lnbmVkIGludGVnZXIgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICAgVTMyOyAgICAvKiAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciAqLwotCi0KLXR5cGVkZWYgY2hhciAgICAgICAgICAgIENIQVI7Ci10eXBlZGVmIHNpZ25lZCBzaG9ydCAgICBTSE9SVDsKLXR5cGVkZWYgc2lnbmVkIGludCAgICAgIElOVDsKLXR5cGVkZWYgc2lnbmVkIGxvbmcgICAgIExPTkc7Ci0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgIFVDSEFSOwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgVVNIT1JUOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgVUlOVDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIFVMT05HOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJVUxPTkdMT05HOyAvLzY0IGJpdAotCi0KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgQllURTsgICAgICAgICAgIC8vICA4LWJpdAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgV09SRDsgICAgICAgICAgIC8vIDE2LWJpdAotdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgRFdPUkQ7ICAgICAgICAgIC8vIDMyLWJpdAotCiAvLyBRV09SRCBpcyBmb3IgdGhvc2Ugc2l0dWF0aW9uIHRoYXQgd2Ugd2FudAogLy8gYW4gOC1ieXRlLWFsaWduZWQgOCBieXRlIGxvbmcgc3RydWN0dXJlCiAvLyB3aGljaCBpcyBOT1QgcmVhbGx5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgogdHlwZWRlZiB1bmlvbiB0YWdVUXVhZFdvcmQgewogICAgIHN0cnVjdCB7Ci0gICAgICAgIERXT1JEICAgZHdMb3dEd29yZDsKLSAgICAgICAgRFdPUkQgICBkd0hpZ2hEd29yZDsKKyAgICAgICAgdW5zaWduZWQgaW50IGR3TG93RHdvcmQ7CisgICAgICAgIHVuc2lnbmVkIGludCBkd0hpZ2hEd29yZDsKICAgICB9IHU7CiAgICAgZG91YmxlICAgICAgRG9Ob3RVc2VUaGlzRmllbGQ7CiB9IFVRdWFkV29yZDsKQEAgLTExNCwxOCArNzMsNiBAQAogCiAvKioqKioqIENvbW1vbiBwb2ludGVyIHR5cGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBVTE9OR19QVFI7ICAgICAgLy8gMzItYml0Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBEV09SRF9QVFI7ICAgICAgLy8gMzItYml0Ci0KLS8vIGJvb2xlYW4gcG9pbnRlcgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgKiAgIFBVSU5UOwotCi10eXBlZGVmIEJZVEUgKiAgICAgICAgICAgUEJZVEU7Ci0KLXR5cGVkZWYgV09SRCAqICAgICAgICAgICBQV09SRDsKLQotdHlwZWRlZiBEV09SRCAqICAgICAgICAgIFBEV09SRDsKLQogdHlwZWRlZiBRV09SRCAqICAgICAgICAgIFBRV09SRDsKIAogI2VuZGlmIC8vIF9fVFRZUEVfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3VwYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS91cGMuaAppbmRleCBhY2QxYjY2Li45NTk2ZmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3VwYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdXBjLmgKQEAgLTc2LDM2ICs3NiwzNiBAQAogCiAKICNkZWZpbmUgVk5TdkluUG9ydEIoZHdJT0FkZHJlc3MsIHBieURhdGEpIHsgICAgICAgICAgICAgICAgICAgICBcCi0Jdm9sYXRpbGUgQllURSogcGJ5QWRkciA9ICgoUEJZVEUpKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgICAgXAorCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKiBwYnlBZGRyID0gKCh1bnNpZ25lZCBjaGFyICopKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgICAgXAogCSoocGJ5RGF0YSkgPSByZWFkYihwYnlBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKIAogI2RlZmluZSBWTlN2SW5Qb3J0Vyhkd0lPQWRkcmVzcywgcHdEYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgIFwKLQl2b2xhdGlsZSBXT1JEKiBwd0FkZHIgPSAoKFBXT1JEKShkd0lPQWRkcmVzcykpOyAgICAgICAgICAgICBcCisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnB3QWRkciA9ICgodW5zaWduZWQgc2hvcnQgKikoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICAgXAogCSoocHdEYXRhKSA9IHJlYWR3KHB3QWRkcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgVk5TdkluUG9ydEQoZHdJT0FkZHJlc3MsIHBkd0RhdGEpIHsgICAgICAgICAgICAgICAgICAgICBcCi0Jdm9sYXRpbGUgRFdPUkQqIHBkd0FkZHIgPSAoKFBEV09SRCkoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgXAorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnBkd0FkZHIgPSAoKHVuc2lnbmVkIGxvbmcgKikoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgXAogCSoocGR3RGF0YSkgPSByZWFkbChwZHdBZGRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKIAogI2RlZmluZSBWTlN2T3V0UG9ydEIoZHdJT0FkZHJlc3MsIGJ5RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB2b2xhdGlsZSBCWVRFKiBwYnlBZGRyID0gKChQQllURSkoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICBcCi0gICAgd3JpdGViKChCWVRFKWJ5RGF0YSwgcGJ5QWRkcik7CQkJCQkJCVwKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICogcGJ5QWRkciA9ICgodW5zaWduZWQgY2hhciAqKShkd0lPQWRkcmVzcykpOyAgICAgICAgICAgIFwKKyAgICB3cml0ZWIoKHVuc2lnbmVkIGNoYXIpYnlEYXRhLCBwYnlBZGRyKTsJCQkJCQkJXAogfQogCiAKICNkZWZpbmUgVk5Tdk91dFBvcnRXKGR3SU9BZGRyZXNzLCB3RGF0YSkgeyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9sYXRpbGUgV09SRCogcHdBZGRyID0gKChQV09SRCkoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgICAgXAotICAgIHdyaXRldygoV09SRCl3RGF0YSwgcHdBZGRyKTsJCQkJCQkJXAorICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwd0FkZHIgPSAoKHVuc2lnbmVkIHNob3J0ICopKGR3SU9BZGRyZXNzKSk7ICAgICAgICAgICAgIFwKKyAgICB3cml0ZXcoKHVuc2lnbmVkIHNob3J0KXdEYXRhLCBwd0FkZHIpOwkJCQkJCQlcCiB9CiAKICNkZWZpbmUgVk5Tdk91dFBvcnREKGR3SU9BZGRyZXNzLCBkd0RhdGEpIHsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdm9sYXRpbGUgRFdPUkQqIHBkd0FkZHIgPSAoKFBEV09SRCkoZHdJT0FkZHJlc3MpKTsgICAgICAgICAgXAotICAgIHdyaXRlbCgoRFdPUkQpZHdEYXRhLCBwZHdBZGRyKTsJCQkJCSAgICBcCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcGR3QWRkciA9ICgodW5zaWduZWQgbG9uZyAqKShkd0lPQWRkcmVzcykpOyAgICAgICAgICBcCisgICAgd3JpdGVsKCh1bnNpZ25lZCBsb25nKWR3RGF0YSwgcGR3QWRkcik7CQkJCQkgICAgXAogfQogCiAjZW5kaWYKQEAgLTE0MCw4ICsxNDAsOCBAQAogCiAKICNkZWZpbmUgUENBdkRlbGF5QnlJTyh1RGVsYXlVbml0KSB7ICAgICAgICAgICAgIFwKLSAgICBCWVRFICAgIGJ5RGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBVTE9ORyAgIGlpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RGF0YTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIGlpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAodURlbGF5VW5pdCA8PSA1MCkgeyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgdWRlbGF5KHVEZWxheVVuaXQpOyAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdm50d2lmaS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKaW5kZXggYjUyN2EwMS4uZmNmMjZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmMKQEAgLTEwMSw5ICsxMDEsOSBAQAogdm9pZAogVk5UV0lGSXZTZXRJQlNTUGFyYW1ldGVyICgKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBXT1JEICB3QmVhY29uUGVyaW9kLAotICAgIFdPUkQgIHdBVElNV2luZG93LAotICAgIFVJTlQgIHVDaGFubmVsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvblBlcmlvZCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QVRJTVdpbmRvdywKKyAgICB1bnNpZ25lZCBpbnQgdUNoYW5uZWwKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpcE1nbXRIYW5kbGU7CkBAIC0xNTAsNyArMTUwLDcgQEAKICAqIFJldHVybiBWYWx1ZTogY3VycmVudCBDaGFubmVsLgogICoKIC0qLwotVUlOVAordW5zaWduZWQgaW50CiBWTlRXSUZJcEdldEN1cnJlbnRDaGFubmVsICgKICAgICB2b2lkICpwTWdtdEhhbmRsZQogICAgICkKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogUmV0dXJuIFZhbHVlOiBjdXJyZW50IEFzc29jIElECiAgKgogLSovCi1XT1JECit1bnNpZ25lZCBzaG9ydAogVk5UV0lGSXdHZXRBc3NvY0lEICgKICAgICB2b2lkICpwTWdtdEhhbmRsZQogICAgICkKQEAgLTIwMiwxNSArMjAyLDE1IEBACiAgKiBSZXR1cm4gVmFsdWU6IG1heCBzdXBwb3J0IHJhdGUKICAqCiAtKi8KLUJZVEUKK3Vuc2lnbmVkIGNoYXIKIFZOVFdJRklieUdldE1heFN1cHBvcnRSYXRlICgKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTdXBwb3J0UmF0ZUlFcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBFeHRTdXBwb3J0UmF0ZUlFcwogICAgICkKIHsKLSAgICBCWVRFICAgIGJ5TWF4U3VwcG9ydFJhdGUgPSBSQVRFXzFNOwotICAgIEJZVEUgICAgYnlTdXBwb3J0UmF0ZSA9IFJBVEVfMU07Ci0gICAgVUlOVCAgICBpaSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieU1heFN1cHBvcnRSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U3VwcG9ydFJhdGUgPSBSQVRFXzFNOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CiAKICAgICBpZiAocFN1cHBvcnRSYXRlSUVzKSB7CiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHBTdXBwb3J0UmF0ZUlFcy0+bGVuOyBpaSsrKSB7CkBAIC0yNDgsMTYgKzI0OCwxNiBAQAogICogUmV0dXJuIFZhbHVlOiBtYXggc3VwcG9ydCByYXRlCiAgKgogLSovCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRBQ0tUeFJhdGUgKAotICAgIEJZVEUgYnlSeERhdGFSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlSeERhdGFSYXRlLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBvcnRSYXRlSUVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBvcnRSYXRlSUVzCiAgICAgKQogewotICAgIEJZVEUgICAgYnlNYXhBY2tSYXRlOwotICAgIEJZVEUgICAgYnlCYXNpY1JhdGU7Ci0gICAgVUlOVCAgICBpaTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWF4QWNrUmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QmFzaWNSYXRlOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIGlmIChieVJ4RGF0YVJhdGUgPD0gUkFURV8xMU0pIHsKICAgICAgICAgYnlNYXhBY2tSYXRlID0gUkFURV8xTTsKQEAgLTMxNyw5ICszMTcsOSBAQAogICAgIHBNZ210LT5lQXV0aGVuTW9kZSA9IGVBdXRoTW9kZTsKICAgICBpZiAoKGVBdXRoTW9kZSA9PSBXTUFDX0FVVEhfU0hBUkVLRVkpIHx8CiAgICAgICAgIChlQXV0aE1vZGUgPT0gV01BQ19BVVRIX0FVVE8pKSB7Ci0gICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBUUlVFOworICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSBmYWxzZTsKICAgICB9CiB9CiAKQEAgLTM1MCwxNSArMzUwLDE1IEBACiAgICAgaWYgKChlRW5jcnlwdGlvbk1vZGUgPT0gV01BQ19FTkNSWVBUSU9OX1dFUEVuYWJsZWQpIHx8CiAgICAgICAgIChlRW5jcnlwdGlvbk1vZGUgPT0gV01BQ19FTkNSWVBUSU9OX1RLSVBFbmFibGVkKSB8fAogICAgICAgICAoZUVuY3J5cHRpb25Nb2RlID09IFdNQUNfRU5DUllQVElPTl9BRVNFbmFibGVkKSApIHsKLSAgICAgICAgcE1nbXQtPmJQcml2YWN5SW52b2tlZCA9IFRSVUU7CisgICAgICAgIHBNZ210LT5iUHJpdmFjeUludm9rZWQgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHBNZ210LT5iUHJpdmFjeUludm9rZWQgPSBGQUxTRTsKKyAgICAgICAgcE1nbXQtPmJQcml2YWN5SW52b2tlZCA9IGZhbHNlOwogICAgIH0KIH0KIAogCiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliQ29uZmlnUGh5TW9kZSAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCiAgICAgQ0FSRF9QSFlfVFlQRSBlUGh5VHlwZQpAQCAtMzY4LDE0ICszNjgsMTQgQEAKIAogICAgIGlmICgoZVBoeVR5cGUgIT0gUEhZX1RZUEVfQVVUTykgJiYKICAgICAgICAgKGVQaHlUeXBlICE9IHBNZ210LT5lQ3VycmVudFBIWU1vZGUpKSB7Ci0gICAgICAgIGlmIChDQVJEYlNldFBoeVBhcmFtZXRlcihwTWdtdC0+cEFkYXB0ZXIsIGVQaHlUeXBlLCAwLCAwLCBOVUxMLCBOVUxMKT09VFJVRSkgeworICAgICAgICBpZiAoQ0FSRGJTZXRQaHlQYXJhbWV0ZXIocE1nbXQtPnBBZGFwdGVyLCBlUGh5VHlwZSwgMCwgMCwgTlVMTCwgTlVMTCk9PXRydWUpIHsKICAgICAgICAgICAgIHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPSBlUGh5VHlwZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHBNZ210LT5lQ29uZmlnUEhZTW9kZSA9IGVQaHlUeXBlOwotICAgIHJldHVybihUUlVFKTsKKyAgICByZXR1cm4odHJ1ZSk7CiB9CiAKIApAQCAtNDI1LDE2ICs0MjUsMTIgQEAKIC0qLwogCiB2b2lkCi1WTlRXSUZJdlF1ZXJ5QlNTTGlzdCAoCi0gICAgdm9pZCAqcE1nbXRIYW5kbGUsCi0gICAgUFVJTlQgICBwdUJTU0NvdW50LAotICAgIHZvaWQgKipwdkZpcnN0QlNTCi0gICAgKQorVk5UV0lGSXZRdWVyeUJTU0xpc3Qodm9pZCAqcE1nbXRIYW5kbGUsIHVuc2lnbmVkIGludCAqcHVCU1NDb3VudCwgdm9pZCAqKnB2Rmlyc3RCU1MpCiB7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgaWkgPSAwOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpcE1nbXRIYW5kbGU7CiAgICAgUEtub3duQlNTICAgICAgIHBCU1MgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICB1Q291bnQgPSAwOworICAgIHVuc2lnbmVkIGludCB1Q291bnQgPSAwOwogCiAgICAgKnB2Rmlyc3RCU1MgPSBOVUxMOwogCkBAIC00NzEsNyArNDY3LDcgQEAKICAgICAgICAgaWYgKHBCU1MgPiAmKHBNZ210LT5zQlNTTGlzdFtNQVhfQlNTX05VTV0pKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHBCU1MtPmJBY3RpdmUgPT0gVFJVRSkgeworICAgICAgICBpZiAocEJTUy0+YkFjdGl2ZSA9PSB0cnVlKSB7CiAgICAgICAgICAgICAqcHZOZXh0QlNTID0gcEJTUzsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDk3LDI0ICs0OTMsMjQgQEAKIHZvaWQKIFZOVFdJRkl2VXBkYXRlTm9kZVR4Q291bnRlcigKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBQQllURSAgICBwYnlEZXN0QWRkcmVzcywKLSAgICBCT09MICAgICBiVHhPaywKLSAgICBXT1JEICAgICB3UmF0ZSwKLSAgICBQQllURSAgICBwYnlUeEZhaWxDb3VudAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc3RBZGRyZXNzLAorICAgIGJvb2wgYlR4T2ssCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHhGYWlsQ291bnQKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClwTWdtdEhhbmRsZTsKLSAgICBVSU5UICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSB8fAogICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSkgewotICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGJ5RGVzdEFkZHJlc3MsICZ1Tm9kZUluZGV4KSA9PSBGQUxTRSkgeworICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcGJ5RGVzdEFkZHJlc3MsICZ1Tm9kZUluZGV4KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4QXR0ZW1wdHMrKzsKLSAgICBpZiAoYlR4T2sgPT0gVFJVRSkgeworICAgIGlmIChiVHhPayA9PSB0cnVlKSB7CiAgICAgICAgIC8vIHRyYW5zbWl0IHN1Y2Nlc3MsIFR4QXR0ZW1wdHMgYXQgbGVhc3QgcGx1cyBvbmUKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51VHhPa1tNQVhfUkFURV0rKzsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS51VHhPa1t3UmF0ZV0rKzsKQEAgLTUzMiwxOSArNTI4LDE5IEBACiB2b2lkCiBWTlRXSUZJdkdldFR4UmF0ZSgKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBQQllURSAgICBwYnlEZXN0QWRkcmVzcywKLSAgICBQV09SRCAgIHB3VHhEYXRhUmF0ZSwKLSAgICBQQllURSAgIHBieUFDS1JhdGUsCi0gICAgUEJZVEUgICBwYnlDQ0tCYXNpY1JhdGUsCi0gICAgUEJZVEUgICBwYnlPRkRNQmFzaWNSYXRlCisgICAgdW5zaWduZWQgY2hhciAqcGJ5RGVzdEFkZHJlc3MsCisgICAgdW5zaWduZWQgc2hvcnQgKnB3VHhEYXRhUmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlBQ0tSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUNDS0Jhc2ljUmF0ZSwKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlPRkRNQmFzaWNSYXRlCiAgICAgKQogewogICAgIFBTTWdtdE9iamVjdCAgICAgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KXBNZ210SGFuZGxlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3VHhEYXRhUmF0ZSA9IFJBVEVfMU07Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUFDS1JhdGUgPSBSQVRFXzFNOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDQ0tCYXNpY1JhdGUgPSBSQVRFXzFNOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlPRkRNQmFzaWNSYXRlID0gUkFURV8yNE07CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdUeERhdGFSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5QUNLUmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgY2hhciBieUNDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgY2hhciBieU9GRE1CYXNpY1JhdGUgPSBSQVRFXzI0TTsKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBTdXBwb3J0UmF0ZUlFcyA9IE5VTEw7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVJRXMgPSBOVUxMOwogCkBAIC01NzksMTIgKzU3NSwxMiBAQAogICAgICAgICBwU3VwcG9ydFJhdGVJRXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUykgcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXM7CiAgICAgICAgIHBFeHRTdXBwb3J0UmF0ZUlFcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKSBwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlczsKICAgICB9Ci0gICAgYnlBQ0tSYXRlID0gVk5UV0lGSWJ5R2V0QUNLVHhSYXRlKCAgKEJZVEUpIHdUeERhdGFSYXRlLAorICAgIGJ5QUNLUmF0ZSA9IFZOVFdJRklieUdldEFDS1R4UmF0ZSggICh1bnNpZ25lZCBjaGFyKSB3VHhEYXRhUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3VwcG9ydFJhdGVJRXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEV4dFN1cHBvcnRSYXRlSUVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBpZiAoYnlBQ0tSYXRlID4gKEJZVEUpIHdUeERhdGFSYXRlKSB7Ci0gICAgICAgIGJ5QUNLUmF0ZSA9IChCWVRFKSB3VHhEYXRhUmF0ZTsKKyAgICBpZiAoYnlBQ0tSYXRlID4gKHVuc2lnbmVkIGNoYXIpIHdUeERhdGFSYXRlKSB7CisgICAgICAgIGJ5QUNLUmF0ZSA9ICh1bnNpZ25lZCBjaGFyKSB3VHhEYXRhUmF0ZTsKICAgICB9CiAgICAgYnlDQ0tCYXNpY1JhdGUgPSBWTlRXSUZJYnlHZXRBQ0tUeFJhdGUoIFJBVEVfMTFNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3VwcG9ydFJhdGVJRXMsCkBAIC02MDEsMTUgKzU5NywxNSBAQAogICAgIHJldHVybjsKIH0KIAotQllURQordW5zaWduZWQgY2hhcgogVk5UV0lGSWJ5R2V0S2V5Q3lwaGVyKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIEJPT0wgICAgIGJHcm91cEtleQorICAgIGJvb2wgYkdyb3VwS2V5CiAgICAgKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpcE1nbXRIYW5kbGU7CiAKLSAgICBpZiAoYkdyb3VwS2V5ID09IFRSVUUpIHsKKyAgICBpZiAoYkdyb3VwS2V5ID09IHRydWUpIHsKICAgICAgICAgcmV0dXJuIChwTWdtdC0+YnlDU1NHSyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIChwTWdtdC0+YnlDU1NQSyk7CkBAIC02MTgsNyArNjE0LDcgQEAKIAogCiAvKgotQk9PTAorYm9vbAogVk5UV0lGSWJJbml0KAogICAgIHZvaWQgKnBBZGFwdGVySGFuZGxlciwKICAgICB2b2lkICoqcE1nbXRIYW5kbGVyCkBAIC02MjYsMTMgKzYyMiwxMyBAQAogewogCiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKIAogICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdClrbWFsbG9jKHNpemVvZihTTWdtdE9iamVjdCksIChpbnQpR0ZQX0FUT01JQyk7CiAgICAgaWYgKHBNZ210ID09IE5VTEwpIHsKICAgICAgICAgKnBNZ210SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG1lbXNldChwTWdtdCwgMCwgc2l6ZW9mKFNNZ210T2JqZWN0KSk7CkBAIC02NTIsNDEgKzY0OCw0MSBAQAogICAgIHBNZ210LT51Q21kRGVxdWV1ZUlkeCA9IDA7CiAgICAgcE1nbXQtPnVDbWRFbnF1ZXVlSWR4ID0gMDsKICAgICBwTWdtdC0+ZUNvbW1hbmRTdGF0ZSA9IFdMQU5fQ01EX1NUQVRFX0lETEU7Ci0gICAgcE1nbXQtPmJDbWRTdG9wID0gRkFMU0U7Ci0gICAgcE1nbXQtPmJDbWRSdW5uaW5nID0gRkFMU0U7CisgICAgcE1nbXQtPmJDbWRTdG9wID0gZmFsc2U7CisgICAgcE1nbXQtPmJDbWRSdW5uaW5nID0gZmFsc2U7CiAKICAgICAqcE1nbXRIYW5kbGVyID0gcE1nbXQ7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAqLwogCiAKIAotQk9PTAorYm9vbAogVk5UV0lGSWJTZXRQTUtJRENhY2hlICgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBVTE9ORyB1bENvdW50LAorICAgIHVuc2lnbmVkIGxvbmcgdWxDb3VudCwKICAgICB2b2lkICpwUE1LSURJbmZvCiAgICAgKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpIHBNZ210T2JqZWN0OwogCiAgICAgaWYgKHVsQ291bnQgPiBNQVhfUE1LSURfQ0FDSEUpIHsKLSAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgICAgIHJldHVybiAoZmFsc2UpOwogICAgIH0KICAgICBwTWdtdC0+Z3NQTUtJRENhY2hlLkJTU0lESW5mb0NvdW50ID0gdWxDb3VudDsKICAgICBtZW1jcHkocE1nbXQtPmdzUE1LSURDYWNoZS5CU1NJREluZm8sIHBQTUtJREluZm8sICh1bENvdW50KnNpemVvZihQTUtJREluZm8pKSk7Ci0gICAgcmV0dXJuIChUUlVFKTsKKyAgICByZXR1cm4gKHRydWUpOwogfQogCiAKIAotV09SRAordW5zaWduZWQgc2hvcnQKIFZOVFdJRkl3R2V0TWF4U3VwcG9ydFJhdGUoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QKICAgICApCiB7Ci0gICAgV09SRCB3UmF0ZSA9IFJBVEVfNTRNOworICAgIHVuc2lnbmVkIHNob3J0IHdSYXRlID0gUkFURV81NE07CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7CiAKICAgICBmb3Iod1JhdGUgPSBSQVRFXzU0TTsgd1JhdGUgPiBSQVRFXzFNOyB3UmF0ZS0tKSB7CkBAIC03MDUsNyArNzAxLDcgQEAKIHZvaWQKIFZOVFdJRkl2U2V0MTFoICgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCT09MICBiMTFoRW5hYmxlCisgICAgYm9vbCBiMTFoRW5hYmxlCiAgICAgKQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IChQU01nbXRPYmplY3QpIHBNZ210T2JqZWN0OwpAQCAtNzEzLDE5ICs3MDksMTkgQEAKICAgICBwTWdtdC0+YjExaEVuYWJsZSA9IGIxMWhFbmFibGU7CiB9CiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliTWVhc3VyZVJlcG9ydCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCT09MICBiRW5kT2ZSZXBvcnQsCisgICAgYm9vbCBiRW5kT2ZSZXBvcnQsCiAgICAgdm9pZCAqcHZNZWFzdXJlRUlELAotICAgIEJZVEUgIGJ5UmVwb3J0TW9kZSwKLSAgICBCWVRFICBieUJhc2ljTWFwLAotICAgIEJZVEUgIGJ5Q0NBRnJhY3Rpb24sCi0gICAgUEJZVEUgcGJ5UlBJcworICAgIHVuc2lnbmVkIGNoYXIgYnlSZXBvcnRNb2RlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlCYXNpY01hcCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NBRnJhY3Rpb24sCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UlBJcwogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdE9iamVjdDsKLSAgICBQQllURSAgICAgICAgICAgcGJ5Q3VycmVudEVJRCA9IChQQllURSkgKHBNZ210LT5wQ3Vyck1lYXN1cmVFSURSZXApOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUN1cnJlbnRFSUQgPSAodW5zaWduZWQgY2hhciAqKSAocE1nbXQtPnBDdXJyTWVhc3VyZUVJRFJlcCk7CiAKICAgICAvL3NwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgIGlmICgocHZNZWFzdXJlRUlEICE9IE5VTEwpICYmCkBAIC03NjUsNDkgKzc2MSw0OSBAQAogICAgICAgICBwTWdtdC0+dUxlbmd0aE9mUmVwRUlEcyArPSAoMiArIHBNZ210LT5wQ3Vyck1lYXN1cmVFSURSZXAtPmxlbik7CiAgICAgICAgIHBNZ210LT5wQ3Vyck1lYXN1cmVFSURSZXAgPSAoUFdMQU5fSUVfTUVBU1VSRV9SRVApIHBieUN1cnJlbnRFSUQ7CiAgICAgfQotICAgIGlmIChiRW5kT2ZSZXBvcnQgPT0gVFJVRSkgeworICAgIGlmIChiRW5kT2ZSZXBvcnQgPT0gdHJ1ZSkgewogICAgICAgICBJRUVFMTFoYk1TUlJlcFR4KHBNZ210KTsKICAgICB9CiAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgIHJldHVybiAoVFJVRSk7CisgICAgcmV0dXJuICh0cnVlKTsKIH0KIAogCi1CT09MCitib29sCiBWTlRXSUZJYkNoYW5uZWxTd2l0Y2goCiAgICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgQllURSAgYnlOZXdDaGFubmVsCisgICAgdW5zaWduZWQgY2hhciBieU5ld0NoYW5uZWwKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7CiAKICAgICAvL3NwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgIHBNZ210LT51Q3VyckNoYW5uZWwgPSBieU5ld0NoYW5uZWw7Ci0gICAgcE1nbXQtPmJTd2l0Y2hDaGFubmVsID0gRkFMU0U7CisgICAgcE1nbXQtPmJTd2l0Y2hDaGFubmVsID0gZmFsc2U7CiAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiB0cnVlOwogfQogCiAvKgotQk9PTAorYm9vbAogVk5UV0lGSWJSYWRhclByZXNlbnQoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgQllURSAgYnlDaGFubmVsCisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWwKICAgICApCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gKFBTTWdtdE9iamVjdCkgcE1nbXRPYmplY3Q7CiAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgJiYKLSAgICAgICAgKGJ5Q2hhbm5lbCA9PSAoQllURSkgcE1nbXQtPnVDdXJyQ2hhbm5lbCkgJiYKLSAgICAgICAgKHBNZ210LT5iU3dpdGNoQ2hhbm5lbCAhPSBUUlVFKSAmJgotICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkpIHsKLSAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5hYnlJQlNTREZTT3duZXIsIENBUkRwR2V0Q3VycmVudEFkZHJlc3MocE1nbXQtPnBBZGFwdGVyKSkpIHsKLSAgICAgICAgICAgIHBNZ210LT5ieU5ld0NoYW5uZWwgPSBDQVJEYnlBdXRvQ2hhbm5lbFNlbGVjdChwTWdtdC0+cEFkYXB0ZXIsKEJZVEUpIHBNZ210LT51Q3VyckNoYW5uZWwpOwotICAgICAgICAgICAgcE1nbXQtPmJTd2l0Y2hDaGFubmVsID0gVFJVRTsKKyAgICAgICAgKGJ5Q2hhbm5lbCA9PSAodW5zaWduZWQgY2hhcikgcE1nbXQtPnVDdXJyQ2hhbm5lbCkgJiYKKyAgICAgICAgKHBNZ210LT5iU3dpdGNoQ2hhbm5lbCAhPSB0cnVlKSAmJgorICAgICAgICAocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkpIHsKKyAgICAgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPmFieUlCU1NERlNPd25lciwgQ0FSRHBHZXRDdXJyZW50QWRkcmVzcyhwTWdtdC0+cEFkYXB0ZXIpKSkgeworICAgICAgICAgICAgcE1nbXQtPmJ5TmV3Q2hhbm5lbCA9IENBUkRieUF1dG9DaGFubmVsU2VsZWN0KHBNZ210LT5wQWRhcHRlciwodW5zaWduZWQgY2hhcikgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7CisgICAgICAgICAgICBwTWdtdC0+YlN3aXRjaENoYW5uZWwgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIEJFQUNPTmJTZW5kQmVhY29uKHBNZ210KTsKICAgICAgICAgQ0FSRGJDaGFubmVsU3dpdGNoKHBNZ210LT5wQWRhcHRlciwgMCwgcE1nbXQtPmJ5TmV3Q2hhbm5lbCwgMTApOwogICAgIH0KLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvdm50d2lmaS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKaW5kZXggYzkxZGZkNy4uZjQzMjdhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS92bnR3aWZpLmgKQEAgLTE0Myw5ICsxNDMsOSBAQAogdm9pZAogVk5UV0lGSXZTZXRJQlNTUGFyYW1ldGVyICgKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBXT1JEICB3QmVhY29uUGVyaW9kLAotICAgIFdPUkQgIHdBVElNV2luZG93LAotICAgIFVJTlQgIHVDaGFubmVsCisgICAgdW5zaWduZWQgc2hvcnQgd0JlYWNvblBlcmlvZCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3QVRJTVdpbmRvdywKKyAgICB1bnNpZ25lZCBpbnQgdUNoYW5uZWwKICAgICApOwogCiB2b2lkCkBAIC0xNTksMjUgKzE1OSwyNSBAQAogICAgIHZvaWQgKnBNZ210SGFuZGxlCiAgICAgKTsKIAotVUlOVAordW5zaWduZWQgaW50CiBWTlRXSUZJcEdldEN1cnJlbnRDaGFubmVsKAogICAgIHZvaWQgKnBNZ210SGFuZGxlCiAgICAgKTsKIAotV09SRAordW5zaWduZWQgc2hvcnQKIFZOVFdJRkl3R2V0QXNzb2NJRCAoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUKICAgICApOwogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRNYXhTdXBwb3J0UmF0ZSAoCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwU3VwcG9ydFJhdGVJRXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwRXh0U3VwcG9ydFJhdGVJRXMKICAgICApOwogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRBQ0tUeFJhdGUgKAotICAgIEJZVEUgYnlSeERhdGFSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlSeERhdGFSYXRlLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcFN1cHBvcnRSYXRlSUVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEV4dFN1cHBvcnRSYXRlSUVzCiAgICAgKTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogICAgICk7CiAKIAotQk9PTAorYm9vbAogVk5UV0lGSWJDb25maWdQaHlNb2RlKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAogICAgIENBUkRfUEhZX1RZUEUgZVBoeVR5cGUKQEAgLTIwOCwxNCArMjA4LDggQEAKICAgICApOwogCiB2b2lkCi1WTlRXSUZJdlF1ZXJ5QlNTTGlzdCgKLSAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBQVUlOVCAgIHB1QlNTQ291bnQsCi0gICAgdm9pZCAqKnB2Rmlyc3RCU1MKLSAgICApOwotCi0KLQorVk5UV0lGSXZRdWVyeUJTU0xpc3Qodm9pZCAqcE1nbXRIYW5kbGUsIHVuc2lnbmVkIGludCAqcHVCU1NDb3VudCwKKwkJdm9pZCAqKnB2Rmlyc3RCU1MpOwogCiB2b2lkCiBWTlRXSUZJdkdldE5leHRCU1MgKApAQCAtMjI5LDUyICsyMjMsNTIgQEAKIHZvaWQKIFZOVFdJRkl2VXBkYXRlTm9kZVR4Q291bnRlcigKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKLSAgICBQQllURSAgICBwYnlEZXN0QWRkcmVzcywKLSAgICBCT09MICAgICBiVHhPaywKLSAgICBXT1JEICAgICB3UmF0ZSwKLSAgICBQQllURSAgICBwYnlUeEZhaWxDb3VudAorICAgIHVuc2lnbmVkIGNoYXIgKnBieURlc3RBZGRyZXNzLAorICAgIGJvb2wgYlR4T2ssCisgICAgdW5zaWduZWQgc2hvcnQgd1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5VHhGYWlsQ291bnQKICAgICApOwogCiAKIHZvaWQKIFZOVFdJRkl2R2V0VHhSYXRlKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAotICAgIFBCWVRFICAgIHBieURlc3RBZGRyZXNzLAotICAgIFBXT1JEICAgcHdUeERhdGFSYXRlLAotICAgIFBCWVRFICAgcGJ5QUNLUmF0ZSwKLSAgICBQQllURSAgIHBieUNDS0Jhc2ljUmF0ZSwKLSAgICBQQllURSAgIHBieU9GRE1CYXNpY1JhdGUKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlEZXN0QWRkcmVzcywKKyAgICB1bnNpZ25lZCBzaG9ydCAqcHdUeERhdGFSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUFDS1JhdGUsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5Q0NLQmFzaWNSYXRlLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieU9GRE1CYXNpY1JhdGUKICAgICApOwogLyoKLUJPT0wKK2Jvb2wKIFZOVFdJRkliSW5pdCgKICAgICB2b2lkICpwQWRhcHRlckhhbmRsZXIsCiAgICAgdm9pZCAqKnBNZ210SGFuZGxlcgogICAgICk7CiAqLwogCi1CWVRFCit1bnNpZ25lZCBjaGFyCiBWTlRXSUZJYnlHZXRLZXlDeXBoZXIoCiAgICAgdm9pZCAqcE1nbXRIYW5kbGUsCi0gICAgQk9PTCAgICAgYkdyb3VwS2V5CisgICAgYm9vbCBiR3JvdXBLZXkKICAgICApOwogCiAKIAogCi1CT09MCitib29sCiBWTlRXSUZJYlNldFBNS0lEQ2FjaGUgKAogICAgIHZvaWQgKnBNZ210T2JqZWN0LAotICAgIFVMT05HIHVsQ291bnQsCisgICAgdW5zaWduZWQgbG9uZyB1bENvdW50LAogICAgIHZvaWQgKnBQTUtJREluZm8KICAgICApOwogCi1CT09MCitib29sCiBWTlRXSUZJYkNvbW1hbmRSdW5uaW5nICgKICAgICB2b2lkICpwTWdtdE9iamVjdAogICAgICk7CiAKLVdPUkQKK3Vuc2lnbmVkIHNob3J0CiBWTlRXSUZJd0dldE1heFN1cHBvcnRSYXRlKAogICAgIHZvaWQgKnBNZ210T2JqZWN0CiAgICAgKTsKQEAgLTI4MywzMCArMjc3LDMwIEBACiB2b2lkCiBWTlRXSUZJdlNldDExaCAoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgQk9PTCAgYjExaEVuYWJsZQorICAgIGJvb2wgYjExaEVuYWJsZQogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliTWVhc3VyZVJlcG9ydCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCT09MICBiRW5kT2ZSZXBvcnQsCisgICAgYm9vbCBiRW5kT2ZSZXBvcnQsCiAgICAgdm9pZCAqcHZNZWFzdXJlRUlELAotICAgIEJZVEUgIGJ5UmVwb3J0TW9kZSwKLSAgICBCWVRFICBieUJhc2ljTWFwLAotICAgIEJZVEUgIGJ5Q0NBRnJhY3Rpb24sCi0gICAgUEJZVEUgcGJ5UlBJcworICAgIHVuc2lnbmVkIGNoYXIgYnlSZXBvcnRNb2RlLAorICAgIHVuc2lnbmVkIGNoYXIgYnlCYXNpY01hcCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q0NBRnJhY3Rpb24sCisgICAgdW5zaWduZWQgY2hhciAqcGJ5UlBJcwogICAgICk7CiAKLUJPT0wKK2Jvb2wKIFZOVFdJRkliQ2hhbm5lbFN3aXRjaCgKICAgICB2b2lkICpwTWdtdE9iamVjdCwKLSAgICBCWVRFICBieU5ld0NoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TmV3Q2hhbm5lbAogICAgICk7CiAvKgotQk9PTAorYm9vbAogVk5UV0lGSWJSYWRhclByZXNlbnQoCiAgICAgdm9pZCAqcE1nbXRPYmplY3QsCi0gICAgQllURSAgYnlDaGFubmVsCisgICAgdW5zaWduZWQgY2hhciBieUNoYW5uZWwKICAgICApOwogKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYwppbmRleCAyODY2NWQ4Li5hYmQ2NzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgInJ4dHguaCIKICNpbmNsdWRlICJyZi5oIgogI2luY2x1ZGUgImlvd3BhLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC03Nyw3ICs3OCw3IEBACiBzX01nck1ha2VQcm9iZVJlcXVlc3QoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgUEJZVEUgcFNjYW5CU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwU2NhbkJTU0lELAogICAgIFBXTEFOX0lFX1NTSUQgcFNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKQEAgLTg1LDcgKzg2LDcgQEAKIAogCiBzdGF0aWMKLUJPT0wKK2Jvb2wKIHNfYkNvbW1hbmRDb21wbGV0ZSAoCiAgICAgUFNEZXZpY2UgcERldmljZQogICAgICk7CkBAIC0xMTYsNyArMTE3LDcgQEAKIHsKIAogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwotICAgIEJPT0wgICAgICAgICAgICBiU3RvcDsKKyAgICBib29sIGJTdG9wOwogCiAgICAgLyoKICAgICAgKiB0ZW1wb3JhcmlseSBzdG9wIEJlYWNvbiBwYWNrZXQgZm9yIEFkSG9jIFNlcnZlcgpAQCAtMTI5LDE4ICsxMzAsMTggQEAKICAgICAgKiAgICAgIG9yCiAgICAgICogICAgICAoMy4yKSBBZEhvYyBjaGFubmVsIGlzIGluIEEgbW9kZQogICAgICAqLwotICAgIGJTdG9wID0gRkFMU0U7CisgICAgYlN0b3AgPSBmYWxzZTsKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSAmJgogICAgIChwTWdtdC0+ZUN1cnJTdGF0ZSA+PSBXTUFDX1NUQVRFX1NUQVJURUQpKQogICAgIHsKICAgICAgICAgaWYgKChwTWdtdC0+dUlCU1NDaGFubmVsIDw9ICBDQl9NQVhfQ0hBTk5FTF8yNEcpICYmCiAgICAgICAgICAgICAgKHBNZ210LT51U2NhbkNoYW5uZWwgPiBDQl9NQVhfQ0hBTk5FTF8yNEcpKQogICAgICAgICB7Ci0gICAgICAgICAgICBiU3RvcCA9IFRSVUU7CisgICAgICAgICAgICBiU3RvcCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBNZ210LT51SUJTU0NoYW5uZWwgPiAgQ0JfTUFYX0NIQU5ORUxfMjRHKQogICAgICAgICB7Ci0gICAgICAgICAgICBiU3RvcCA9IFRSVUU7CisgICAgICAgICAgICBiU3RvcCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwOCwxNSArMjA5LDE1IEBACiAgICAgKQogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzFNLCAgIDJNLCAgIDVNLCAgIDExTSwgIDE4TSwgIDI0TSwgIDM2TSwgIDU0TQotICAgIEJZVEUgYWJ5Q3VyclN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKLSAgICBCWVRFIGFieUN1cnJFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTYsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NkN9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyckV4dFN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9FWFRTVVBQX1JBVEVTLCA0LCAweDBDLCAweDEyLCAweDE4LCAweDYwfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82TSwgICA5TSwgICAxMk0sICA0OE0KLSAgICBCWVRFIGFieUN1cnJTdXBwUmF0ZXNBW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwQywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2Q307Ci0gICAgQllURSBhYnlDdXJyU3VwcFJhdGVzQltdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OwotICAgIFBCWVRFICAgICAgICAgICBwYnlSYXRlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc0FbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTdXBwUmF0ZXNCW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgNCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNn07CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UmF0ZTsKICAgICBQU1R4TWdtdFBhY2tldCAgcFR4UGFja2V0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKIAogICAgIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFBKSB7CkBAIC0yNjksNyArMjcwLDcgQEAKIHNfTWdyTWFrZVByb2JlUmVxdWVzdCgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBQQllURSBwU2NhbkJTU0lELAorICAgIHVuc2lnbmVkIGNoYXIgKnBTY2FuQlNTSUQsCiAgICAgUFdMQU5fSUVfU1NJRCBwU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwpAQCAtMjgyLDggKzI4Myw4IEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fUFJPQkVSRVFfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9QUk9CRVJFUV9GUl9NQVhMRU47CiAgICAgdk1nckVuY29kZVByb2JlUmVxdWVzdCgmc0ZyYW1lKTsKICAgICBzRnJhbWUucEhkci0+c0EzLndGcmFtZUN0bCA9IGNwdV90b19sZTE2KApAQCAtMzIwLDE2ICszMjEsMTYgQEAKIHZvaWQKIHZDb21tYW5kVGltZXJXYWl0KAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFVJTlQgTVNlY29uZAorICAgIHVuc2lnbmVkIGludCBNU2Vjb25kCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogCiAgICAgaW5pdF90aW1lcigmcERldmljZS0+c1RpbWVyQ29tbWFuZCk7Ci0gICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2U7CiAgICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKXZDb21tYW5kVGltZXI7CiAgICAgLy8gUlVOX0FUIDoxIG1zZWMgfj0gKEhaLzEwMjQpCi0gICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5leHBpcmVzID0gKFVJTlQpUlVOX0FUKChNU2Vjb25kICogSFopID4+IDEwKTsKKyAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSAodW5zaWduZWQgaW50KVJVTl9BVCgoTVNlY29uZCAqIEhaKSA+PiAxMCk7CiAgICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKICAgICByZXR1cm47CiB9CkBAIC0zNDcsMTQgKzM0OCwxNCBAQAogICAgIFBXTEFOX0lFX1NTSUQgICBwSXRlbVNTSUQ7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJREN1cnI7CiAgICAgQ01EX1NUQVRVUyAgICAgIFN0YXR1czsKLSAgICBVSU5UICAgICAgICAgICAgaWk7Ci0gICAgQllURSAgICAgICAgICAgIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgdW5zaWduZWQgY2hhciBieU1hc2tbOF0gPSB7MSwgMiwgNCwgOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07CiAgICAgc3RydWN0IHNrX2J1ZmYgICpza2I7CiAKIAogICAgIGlmIChwRGV2aWNlLT5kd0RpYWdSZWZDb3VudCAhPSAwKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nICE9IFRSVUUpCisgICAgaWYgKHBEZXZpY2UtPmJDbWRSdW5uaW5nICE9IHRydWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtMzY0LDcgKzM2NSw3IEBACiAgICAgICAgIGNhc2UgV0xBTl9DTURfU0NBTl9TVEFSVDoKIAogCXBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzk2LDcgKzM5Nyw3IEBACiAKICAgICAgICAgICAgICAgICAvLyBTZXQgQmFzZWJhbmQncyBzZW5zaXRpdml0eSBiYWNrLgogICAgICAgICAgICAgICAgIC8vIFNldCBjaGFubmVsIGJhY2sKLSAgICAgICAgICAgICAgICBDQVJEYlNldENoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKKyAgICAgICAgICAgICAgICBzZXRfY2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51Q3VyckNoYW5uZWwpOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlNjYW5uaW5nLCBzZXQgYmFjayB0byBjaGFubmVsOiBbJWRdXG4iLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgICAgICAgICAgICAgQ0FSRGJTZXRCU1NJRChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5hYnlDdXJyQlNTSUQsIE9QX01PREVfQURIT0MpOwpAQCAtNDA4LDcgKzQwOSw3IEBACiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAvLzIwMDgtOC00IDxhZGQ+IGJ5IGNoZXN0ZXIKLSAgICAgICAgICAgICAgICAgaWYgKCFDaGFubmVsVmFsaWQocERldmljZS0+Ynlab25lVHlwZSwgcE1nbXQtPnVTY2FuQ2hhbm5lbCkpIHsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKHBNZ210LT51U2NhbkNoYW5uZWwpKSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkludmFsaWQgY2hhbm5lbCBwTWdtdC0+dVNjYW5DaGFubmVsID0gJWQgXG4iLHBNZ210LT51U2NhbkNoYW5uZWwpOwogICAgICAgICAgICAgICAgICAgICBzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzMSw3ICs0MzIsNyBAQAogCiAgICAgICAgICAgICAgICAgdkFkSG9jQmVhY29uU3RvcChwRGV2aWNlKTsKIAotICAgICAgICAgICAgICAgIGlmIChDQVJEYlNldENoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dVNjYW5DaGFubmVsKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVTY2FuQ2hhbm5lbCkgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlNDQU4gQ2hhbm5lbDogJWRcbiIsIHBNZ210LT51U2NhbkNoYW5uZWwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU0VUIFNDQU4gQ2hhbm5lbCBGYWlsOiAlZFxuIiwgcE1nbXQtPnVTY2FuQ2hhbm5lbCk7CkBAIC00NDEsNyArNDQyLDcgQEAKICAgICAgIC8vICAgICAgICAgIHByaW50aygiY2hlc3Rlci1jaD0lZFxuIixwTWdtdC0+dVNjYW5DaGFubmVsKTsKIAlwTWdtdC0+dVNjYW5DaGFubmVsKys7CiAvLzIwMDgtOC00IDxtb2RpZnk+IGJ5IGNoZXN0ZXIKLQkgaWYgKCFDaGFubmVsVmFsaWQocERldmljZS0+Ynlab25lVHlwZSwgcE1nbXQtPnVTY2FuQ2hhbm5lbCkgJiYKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKHBNZ210LT51U2NhbkNoYW5uZWwpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+dVNjYW5DaGFubmVsIDw9IHBEZXZpY2UtPmJ5TWF4Q2hhbm5lbCApewogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+dVNjYW5DaGFubmVsPXBEZXZpY2UtPmJ5TWF4Q2hhbm5lbCsxOwogCQkgcE1nbXQtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0NNRF9TQ0FOX0VORDsKQEAgLTQ0OSw3ICs0NTAsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogCi0gICAgICAgICAgICAgICAgaWYgKChwTWdtdC0+YjExaEVuYWJsZSA9PSBGQUxTRSkgfHwKKyAgICAgICAgICAgICAgICBpZiAoKHBNZ210LT5iMTFoRW5hYmxlID09IGZhbHNlKSB8fAogICAgICAgICAgICAgICAgICAgICAocE1nbXQtPnVTY2FuQ2hhbm5lbCA8IENCX01BWF9DSEFOTkVMXzI0RykpIHsKICAgICAgICAgICAgICAgICAgICAgc192UHJvYmVDaGFubmVsKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwpAQCAtNDY5LDcgKzQ3MCw3IEBACiAKICAgICAgICAgICAgIC8vIFNldCBCYXNlYmFuZCdzIHNlbnNpdGl2aXR5IGJhY2suCiAgICAgICAgICAgICAvLyBTZXQgY2hhbm5lbCBiYWNrCi0gICAgICAgICAgICBDQVJEYlNldENoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+dUN1cnJDaGFubmVsKTsKKyAgICAgICAgICAgIHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTY2FubmluZywgc2V0IGJhY2sgdG8gY2hhbm5lbDogWyVkXVxuIiwgcE1nbXQtPnVDdXJyQ2hhbm5lbCk7CiAgICAgICAgICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKICAgICAgICAgICAgICAgICBDQVJEYlNldEJTU0lEKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmFieUN1cnJCU1NJRCwgT1BfTU9ERV9BREhPQyk7CkBAIC01MDIsMTQgKzUwMywxNCBAQAogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU2VuZCBEaXNhc3NvY2lhdGlvbiBQYWNrZXQuLlxuIik7CiAgICAgICAgICAgICAgICAgLy8gcmVhc29uID0gOCA6IGRpc2Fzc29jIGJlY2F1c2Ugc3RhIGhhcyBsZWZ0CiAgICAgICAgICAgICAgICAgdk1nckRpc2Fzc29jQmVnaW5TdGEoKHZvaWQgKilwRGV2aWNlLCBwTWdtdCwgcE1nbXQtPmFieUN1cnJCU1NJRCwgKDgpLCAmU3RhdHVzKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAvLyB1bmxvY2sgY29tbWFuZCBidXN5CiAgICAgICAgICAgICAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEOwogICAgICAgICAgICAgICAgIHBJdGVtU1NJRC0+bGVuID0gMDsKICAgICAgICAgICAgICAgICBtZW1zZXQocEl0ZW1TU0lELT5hYnlTU0lELCAwLCBXTEFOX1NTSURfTUFYTEVOKTsKICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJTdGF0ZSA9IFdNQUNfU1RBVEVfSURMRTsKLSAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJBY3RpdmUgPSBGQUxTRTsKLS8vICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJCZWFjb25CdWZSZWFkeSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOworLy8gICAgICAgICAgICAgICAgcERldmljZS0+YkJlYWNvbkJ1ZlJlYWR5ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICBwRGV2aWNlLT5lQ29tbWFuZFN0YXRlID0gV0xBTl9ESVNBU1NPQ0lBVEVfV0FJVDsKQEAgLTUzOSw3ICs1NDAsNyBAQAogCiAgICAgICAgIGNhc2UgV0xBTl9DTURfU1NJRF9TVEFSVDoKICAgICAgICAgCXBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUmFkaW9PZmYgPT0gVFJVRSkgeworICAgICAgICAgICAgaWYgKHBEZXZpY2UtPmJSYWRpb09mZiA9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTczLDcgKzU3NCw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgc3RhdGUKICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwpAQCAtNjA3LDkgKzYwOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpewogICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS51SW5BY3RpdmVDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGJDbGVhckJTU0lEX1NDQU4ocERldmljZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjM1LDEyICs2MzYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocERldmljZS0+ZGV2KSl7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkRpc2Nvbm5lY3QgU1NJRCBub25lXG4iKTsKIAkJICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogICAgICAgICAgICAgICAgICAgCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC02ODUsNyArNjg2LDcgQEAKIAkgICAgICAgICAgcERldmljZS0+YnlMaW5rV2FpdENvdW50ID0gMDsKIAkJICNpZiAwCiAgICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogICAgICAgICAgICAgICAgICAgCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC03MDcsNyArNzA4LDcgQEAKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID49IFdNQUNfQVVUSF9XUEEpIHsKICAgICAgICAgICAgICAgICAgICAgS2V5YlJlbW92ZUFsbEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwRGV2aWNlLT5hYnlCU1NJRCwgcERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IFRSVUU7CisgICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxpbmtXYWl0Q291bnQgPSAwOwogICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKICAgICAgICAgICAgICAgICBiQ2xlYXJCU1NJRF9TQ0FOKHBEZXZpY2UpOwpAQCAtNzE5LDIwICs3MjAsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgIH0KIAkgICAgICNpZmRlZiBUeEluU2xlZXAKLQkJIGlmKHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciAhPSBGQUxTRSkgICB7ICAgIC8vVHhEYXRhVGltZXIgaXMgbm90IHRyaWdnZXJlZCBhdCB0aGUgZmlyc3QgdGltZQorCQkgaWYocERldmljZS0+SXNUeERhdGFUcmlnZ2VyICE9IGZhbHNlKSAgIHsgICAgLy9UeERhdGFUaW1lciBpcyBub3QgdHJpZ2dlcmVkIGF0IHRoZSBmaXJzdCB0aW1lCiAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludGsoIlJlLWluaXRpYWwgVHhEYXRhVGltZXIqKioqXG4iKTsKIAkJICAgIGRlbF90aW1lcigmcERldmljZS0+c1RpbWVyVHhEYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwotICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zVGltZXJUeERhdGEuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbilCU1N2U2Vjb25kVHhEYXRhOwogICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5leHBpcmVzID0gUlVOX0FUKDEwKkhaKTsgICAgICAvLzEwcyBjYWxsYmFjawotICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5uVHhEYXRhVGltZUNvdXQgPSAwOwogCQkgfQogCQkgZWxzZSB7CiAJCSAgIC8vIHByaW50aygibWlrZTotLT5GaXJzdCB0aW1lIHRyaWdlciBUaW1lclR4RGF0YSBJblNsZWVwXG4iKTsKIAkJIH0KLQkJcERldmljZS0+SXNUeERhdGFUcmlnZ2VyID0gVFJVRTsKKwkJcERldmljZS0+SXNUeERhdGFUcmlnZ2VyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBhZGRfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7CiAgICAgICAgICAgICAgI2VuZGlmCiAgICAgICAgICAgICB9CkBAIC03NDksNyArNzUwLDcgQEAKIAkgICAgICAgICAgcERldmljZS0+YnlMaW5rV2FpdENvdW50ID0gMDsKIAkJI2lmIDAKICAgICAgICAgICAgICAgICAgICAgICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9EUklWRVJfV0VYVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAgICAgICAgICAgICAgICAgICAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKQEAgLTc3MCwxNCArNzcxLDE0IEBACiAgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgIHBNZ210LT5lQ3Vyck1vZGUgPSBXTUFDX01PREVfU1RBTkRCWTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVAgPT0gVFJVRSkKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocERldmljZS0+YkVuYWJsZUhvc3RXRVAgPT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgQlNTdkNsZWFyTm9kZURCVGFibGUocERldmljZSwgMSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBCU1N2Q2xlYXJOb2RlREJUYWJsZShwRGV2aWNlLCAwKTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT51QXNzb2NDb3VudCA9IDA7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkZpeFJhdGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iRml4UmF0ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgdk1nckNyZWF0ZU93bklCU1MoKHZvaWQgKilwRGV2aWNlLCAmU3RhdHVzKTsKICAgICAgICAgICAgICAgICBpZiAoU3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUyl7CkBAIC03OTEsNyArNzkyLDcgQEAKICAgICAgICAgICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKXsKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBUUlVFOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwpAQCAtODAzLDEwICs4MDQsMTAgQEAKICAgICAgICAgICAgICAgICB3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnNUeFBTUXVldWUpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChza2JfcXVldWVfZW1wdHkoJnBNZ210LT5zTm9kZURCVGFibGVbMF0uc1R4UFNRdWV1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5hYnlQU1R4TWFwWzBdICY9IH5ieU1hc2tbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTW9yZURhdGEgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2VfZG1hMF94bWl0KHBEZXZpY2UsIHNrYiwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIk11bHRpY2FzdCBwcyB0eCBmYWlsIFxuIik7CkBAIC04MjYsMTAgKzgyNywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHR4IG1hcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5hYnlQU1R4TWFwW3BNZ210LT5zTm9kZURCVGFibGVbaWldLndBSUQgPj4gM10gJj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5ieU1hc2tbcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0ud0FJRCAmIDddOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJNb3JlRGF0YSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+Yk1vcmVEYXRhID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTW9yZURhdGEgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZXZpY2VfZG1hMF94bWl0KHBEZXZpY2UsIHNrYiwgaWkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAic3RhIHBzIHR4IGZhaWwgXG4iKTsKQEAgLTg0Niw3ICs4NDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfmJ5TWFza1twTWdtdC0+c05vZGVEQlRhYmxlW2lpXS53QUlEICYgN107CiAgICAgICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJJbmRleD0lZCBQUyBxdWV1ZSBjbGVhciBcbiIsIGlpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5iUnhQU1BvbGwgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYlJ4UFNQb2xsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC04NTYsNyArODU3LDcgQEAKIAogICAgICAgICBjYXNlIFdMQU5fQ01EX1JBRElPX1NUQVJUIDoKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iZUNvbW1hbmRTdGF0ZSA9PSBXTEFOX0NNRF9SQURJT19TVEFSVFxuIik7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvQ21kID09IFRSVUUpCisgICAgICAgICAgICBpZiAocERldmljZS0+YlJhZGlvQ21kID09IHRydWUpCiAgICAgICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT24ocERldmljZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgQ0FSRGJSYWRpb1Bvd2VyT2ZmKHBEZXZpY2UpOwpAQCAtODk2LDIzICs4OTcsMjMgQEAKIAogCiBzdGF0aWMKLUJPT0wKK2Jvb2wKIHNfYkNvbW1hbmRDb21wbGV0ZSAoCiAgICAgUFNEZXZpY2UgcERldmljZQogICAgICkKIHsKICAgICBQV0xBTl9JRV9TU0lEIHBTU0lEOwotICAgIEJPT0wgICAgICAgICAgYlJhZGlvQ21kID0gRkFMU0U7Ci0gICAgLy9XT1JEICAgICAgICAgIHdEZUF1dGhlblJlYXNvbiA9IDA7Ci0gICAgQk9PTCAgICAgICAgICBiRm9yY2VTQ0FOID0gVFJVRTsKKyAgICBib29sIGJSYWRpb0NtZCA9IGZhbHNlOworICAgIC8vdW5zaWduZWQgc2hvcnQgd0RlQXV0aGVuUmVhc29uID0gMDsKKyAgICBib29sIGJGb3JjZVNDQU4gPSB0cnVlOwogICAgIFBTTWdtdE9iamVjdCAgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKIAogCiAgICAgcERldmljZS0+ZUNvbW1hbmRTdGF0ZSA9IFdMQU5fQ01EX0lETEU7CiAgICAgaWYgKHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID09IENNRF9RX1NJWkUpIHsKICAgICAgICAgLy9Db21tYW5kIFF1ZXVlIEVtcHR5Ci0gICAgICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gRkFMU0U7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICBwRGV2aWNlLT5iQ21kUnVubmluZyA9IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHBEZXZpY2UtPmVDb21tYW5kID0gcERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWREZXF1ZXVlSWR4XS5lQ21kOwpAQCAtOTIxLDcgKzkyMiw3IEBACiAgICAgICAgIGJGb3JjZVNDQU4gPSBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZERlcXVldWVJZHhdLmJGb3JjZVNDQU47CiAgICAgICAgIEFERF9PTkVfV0lUSF9XUkFQX0FST1VORChwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeCwgQ01EX1FfU0laRSk7CiAgICAgICAgIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlKys7Ci0gICAgICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gVFJVRTsKKyAgICAgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKCBwRGV2aWNlLT5lQ29tbWFuZCApIHsKICAgICAgICAgICAgIGNhc2UgV0xBTl9DTURfQlNTSURfU0NBTjoKICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPImVDb21tYW5kU3RhdGU9IFdMQU5fQ01EX0JTU0lEX1NDQU5cbiIpOwpAQCAtOTMzLDcgKzkzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1lbXNldChwTWdtdC0+YWJ5U2NhblNTSUQsIDAsIFdMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDEpOwogICAgICAgICAgICAgICAgIH0KIC8qCi0gICAgICAgICAgICAgICAgaWYgKChiRm9yY2VTQ0FOID09IEZBTFNFKSAmJiAocERldmljZS0+YkxpbmtQYXNzID09IFRSVUUpKSB7CisgICAgICAgICAgICAgICAgaWYgKChiRm9yY2VTQ0FOID09IGZhbHNlKSAmJiAocERldmljZS0+YkxpbmtQYXNzID09IHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgocFNTSUQtPmxlbiA9PSAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+bGVuKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKCAhbWVtY21wKHBTU0lELT5hYnlTU0lELCAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+YWJ5U1NJRCwgcFNTSUQtPmxlbikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5lQ29tbWFuZFN0YXRlID0gV0xBTl9DTURfSURMRTsKQEAgLTk3NCwyNSArOTc1LDI1IEBACiAgICAgICAgIHZDb21tYW5kVGltZXJXYWl0KCh2b2lkICopcERldmljZSwgMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIAogCi1CT09MIGJTY2hlZHVsZUNvbW1hbmQgKAorYm9vbCBiU2NoZWR1bGVDb21tYW5kICgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBDTURfQ09ERSAgICBlQ29tbWFuZCwKLSAgICBQQllURSAgICAgICBwYnlJdGVtMAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUl0ZW0wCiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogCiAKICAgICBpZiAocERldmljZS0+Y2JGcmVlQ21kUXVldWUgPT0gMCkgewotICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIChmYWxzZSk7CiAgICAgfQogICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uZUNtZCA9IGVDb21tYW5kOwotICAgIHBEZXZpY2UtPmVDbWRRdWV1ZVtwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeF0uYkZvcmNlU0NBTiA9IFRSVUU7CisgICAgcERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4XS5iRm9yY2VTQ0FOID0gdHJ1ZTsKICAgICBtZW1zZXQocERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4XS5hYnlDbWREZXNpcmVTU0lELCAwICwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMSk7CiAKICAgICBpZiAocGJ5SXRlbTAgIT0gTlVMTCkgewpAQCAtMTAwMSw3ICsxMDAyLDcgQEAKICAgICAgICAgICAgIGNhc2UgV0xBTl9DTURfQlNTSURfU0NBTjoKICAgICAgICAgICAgICAgICBtZW1jcHkocERldmljZS0+ZUNtZFF1ZXVlW3BEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4XS5hYnlDbWREZXNpcmVTU0lELAogICAgICAgICAgICAgICAgICAgICAgICAgIHBieUl0ZW0wLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLmJGb3JjZVNDQU4gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLmJGb3JjZVNDQU4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSBXTEFOX0NNRF9TU0lEOgpAQCAtMTAxNCw3ICsxMDE1LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKIC8qCiAgICAgICAgICAgICBjYXNlIFdMQU5fQ01EX0RFQVVUSDoKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLndEZUF1dGhlblJlYXNvbiA9ICooKFBXT1JEKXBieUl0ZW0wKTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5lQ21kUXVldWVbcERldmljZS0+dUNtZEVucXVldWVJZHhdLndEZUF1dGhlblJlYXNvbiA9ICooKHVuc2lnbmVkIHNob3J0ICopcGJ5SXRlbTApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogKi8KIApAQCAtMTAzNywxMiArMTAzOCwxMiBAQAogICAgIEFERF9PTkVfV0lUSF9XUkFQX0FST1VORChwRGV2aWNlLT51Q21kRW5xdWV1ZUlkeCwgQ01EX1FfU0laRSk7CiAgICAgcERldmljZS0+Y2JGcmVlQ21kUXVldWUtLTsKIAotICAgIGlmIChwRGV2aWNlLT5iQ21kUnVubmluZyA9PSBGQUxTRSkgeworICAgIGlmIChwRGV2aWNlLT5iQ21kUnVubmluZyA9PSBmYWxzZSkgewogICAgICAgICBzX2JDb21tYW5kQ29tcGxldGUocERldmljZSk7CiAgICAgfQogICAgIGVsc2UgewogICAgIH0KLSAgICByZXR1cm4gKFRSVUUpOworICAgIHJldHVybiAodHJ1ZSk7CiAKIH0KIApAQCAtMTA1NywxNiArMTA1OCwxNiBAQAogICogIE91dDoKICAqICAgICAgbm9uZQogICoKLSAqIFJldHVybiBWYWx1ZTogVFJVRSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UKICAqCiAgKi8KLUJPT0wgYkNsZWFyQlNTSURfU0NBTiAoCitib29sIGJDbGVhckJTU0lEX1NDQU4gKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0CiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwotICAgIFVJTlQgICAgICAgICAgICB1Q21kRGVxdWV1ZUlkeCA9IHBEZXZpY2UtPnVDbWREZXF1ZXVlSWR4OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgdUNtZERlcXVldWVJZHggPSBwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeDsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKICAgICBpZiAoKHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlIDwgQ01EX1FfU0laRSkgJiYgKHVDbWREZXF1ZXVlSWR4ICE9IHBEZXZpY2UtPnVDbWRFbnF1ZXVlSWR4KSkgewogICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCAoQ01EX1FfU0laRSAtIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlKTsgaWkgKyspIHsKQEAgLTEwNzcsNyArMTA3OCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vbWlrZSBhZGQ6cmVzZXQgY29tbWFuZCB0aW1lcgpAQCAtMTA5MiwxNSArMTA5MywxNSBAQAogICAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKICAgLy9pbml0IHRpbWVyCiAgICAgICBpbml0X3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKLSAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmZ1bmN0aW9uID0gKFRpbWVyRnVuY3Rpb24pdkNvbW1hbmRUaW1lcjsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogICAgIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID0gQ01EX1FfU0laRTsKICAgICBwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeCA9IDA7CiAgICAgcERldmljZS0+dUNtZEVucXVldWVJZHggPSAwOwogICAgIHBEZXZpY2UtPmVDb21tYW5kU3RhdGUgPSBXTEFOX0NNRF9JRExFOwotICAgIHBEZXZpY2UtPmJDbWRSdW5uaW5nID0gRkFMU0U7Ci0gICAgcERldmljZS0+YkNtZENsZWFyID0gRkFMU0U7CisgICAgcERldmljZS0+YkNtZFJ1bm5pbmcgPSBmYWxzZTsKKyAgICBwRGV2aWNlLT5iQ21kQ2xlYXIgPSBmYWxzZTsKIH0KIAogCkBAIC0xMTI1LDE2ICsxMTI2LDE2IEBACiAKICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgICNpZiAxCi0gIGlmKCgocERldmljZS0+YkxpbmtQYXNzID09VFJVRSkmJihwTWdtdC0+ZUF1dGhlbk1vZGUgPCBXTUFDX0FVVEhfV1BBKSkgfHwgIC8vb3BlbiAmJiBzaGFyZWtleSBsaW5raW5nCi0gICAgICAocERldmljZS0+ZldQQV9BdXRoZW5lZCA9PSBUUlVFKSkgeyAgIC8vd3BhIGxpbmtpbmcKKyAgaWYoKChwRGV2aWNlLT5iTGlua1Bhc3MgPT10cnVlKSYmKHBNZ210LT5lQXV0aGVuTW9kZSA8IFdNQUNfQVVUSF9XUEEpKSB8fCAgLy9vcGVuICYmIHNoYXJla2V5IGxpbmtpbmcKKyAgICAgIChwRGV2aWNlLT5mV1BBX0F1dGhlbmVkID09IHRydWUpKSB7ICAgLy93cGEgbGlua2luZwogICNlbHNlCi0gIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyA9PVRSVUUpIHsKKyAgaWYocERldmljZS0+YkxpbmtQYXNzID09dHJ1ZSkgewogICNlbmRpZgogCiAgICAgICAgIC8vICAgcHJpbnRrKCJtaWtlOiVzLS0+SW5TbGVlcCBUeCBEYXRhIFByb2NlZHVyZVxuIixfX0ZVTkNUSU9OX18pOwotCSAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSBUUlVFOworCSAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSB0cnVlOwogCSAgUFNiU2VuZE51bGxQYWNrZXQocERldmljZSk7ICAgICAgLy9zZW5kIG51bGwgcGFja2V0Ci0JICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IEZBTFNFOworCSAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSBmYWxzZTsKICAgCX0KICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y21kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuaAppbmRleCBjM2M0MTgwLi42OWQ0ZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djbWQuaApAQCAtNzUsMTEgKzc1LDExIEBACiAKIHR5cGVkZWYgc3RydWN0IHRhZ0NNRF9JVEVNIHsKICAgICBDTURfQ09ERSBlQ21kOwotICAgIEJZVEUgICAgIGFieUNtZERlc2lyZVNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07Ci0gICAgQk9PTCAgICAgYk5lZWRSYWRpb09GRjsKLSAgICBXT1JEICAgICB3RGVBdXRoZW5SZWFzb247Ci0gICAgQk9PTCAgICAgYlJhZGlvQ21kOwotICAgIEJPT0wgICAgIGJGb3JjZVNDQU47CisgICAgdW5zaWduZWQgY2hhciBhYnlDbWREZXNpcmVTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIGJvb2wgYk5lZWRSYWRpb09GRjsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RGVBdXRoZW5SZWFzb247CisgICAgYm9vbCBiUmFkaW9DbWQ7CisgICAgYm9vbCBiRm9yY2VTQ0FOOwogfSBDTURfSVRFTSwgKlBDTURfSVRFTTsKIAogLy8gQ29tbWFuZCBzdGF0ZQpAQCAtMTE5LDIxICsxMTksMjEgQEAKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLUJPT0wgYkNsZWFyQlNTSURfU0NBTigKK2Jvb2wgYkNsZWFyQlNTSURfU0NBTigKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dAogICAgICk7CiAKLUJPT0wKK2Jvb2wKIGJTY2hlZHVsZUNvbW1hbmQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgQ01EX0NPREUgICAgZUNvbW1hbmQsCi0gICAgUEJZVEUgICAgICAgcGJ5SXRlbTAKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJdGVtMAogICAgICk7CiAKIHZvaWQKIHZDb21tYW5kVGltZXJXYWl0KAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAotICAgIFVJTlQgTVNlY29uZAorICAgIHVuc2lnbmVkIGludCBNU2Vjb25kCiAgICAgKTsKICNpZmRlZiBUeEluU2xlZXAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmMKaW5kZXggNjRhNjZiMi4uYzA5NjU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93Y3RsLmMKQEAgLTUyLDggKzUyLDggQEAKIAogLyoKICAqIERlc2NyaXB0aW9uOgotICogICAgICBTY2FuIFJ4IGNhY2hlLiAgUmV0dXJuIFRSVUUgaWYgcGFja2V0IGlzIGR1cGxpY2F0ZSwgZWxzZQotICogICAgICBpbnNlcnRzIGluIHJlY2VpdmUgY2FjaGUgYW5kIHJldHVybnMgRkFMU0UuCisgKiAgICAgIFNjYW4gUnggY2FjaGUuICBSZXR1cm4gdHJ1ZSBpZiBwYWNrZXQgaXMgZHVwbGljYXRlLCBlbHNlCisgKiAgICAgIGluc2VydHMgaW4gcmVjZWl2ZSBjYWNoZSBhbmQgcmV0dXJucyBmYWxzZS4KICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgpAQCAtNjIsMTQgKzYyLDE0IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIHBhY2tldCBkdXBsaWNhdGU7IG90aGVyd2lzZSBGQUxTRQorICogUmV0dXJuIFZhbHVlOiB0cnVlIGlmIHBhY2tldCBkdXBsaWNhdGU7IG90aGVyd2lzZSBmYWxzZQogICoKICAqLwogCi1CT09MIFdDVExiSXNEdXBsaWNhdGUgKFBTQ2FjaGUgcENhY2hlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKQorYm9vbCBXQ1RMYklzRHVwbGljYXRlIChQU0NhY2hlIHBDYWNoZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcikKIHsKLSAgICBVSU5UICAgICAgICAgICAgdUluZGV4OwotICAgIFVJTlQgICAgICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgdUluZGV4OworICAgIHVuc2lnbmVkIGludCBpaTsKICAgICBQU0NhY2hlRW50cnkgICAgcENhY2hlRW50cnk7CiAKICAgICBpZiAoSVNfRkNfUkVUUlkocE1BQ0hlYWRlcikpIHsKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBEVVBMSUNBVEVfUlhfQ0FDSEVfTEVOR1RIOyBpaSsrKSB7CiAgICAgICAgICAgICBwQ2FjaGVFbnRyeSA9ICYocENhY2hlLT5hc0NhY2hlRW50cnlbdUluZGV4XSk7CiAgICAgICAgICAgICBpZiAoKHBDYWNoZUVudHJ5LT53Rm1TZXF1ZW5jZSA9PSBwTUFDSGVhZGVyLT53U2VxQ3RsKSAmJgotICAgICAgICAgICAgICAgIChJU19FVEhfQUREUkVTU19FUVVBTCAoJihwQ2FjaGVFbnRyeS0+YWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpCisgICAgICAgICAgICAgICAgKCFjb21wYXJlX2V0aGVyX2FkZHIoJihwQ2FjaGVFbnRyeS0+YWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLyogRHVwbGljYXRlIG1hdGNoICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBRERfT05FX1dJVEhfV1JBUF9BUk9VTkQodUluZGV4LCBEVVBMSUNBVEVfUlhfQ0FDSEVfTEVOR1RIKTsKICAgICAgICAgfQpAQCAtOTEsNyArOTEsNyBAQAogICAgIHBDYWNoZUVudHJ5LT53Rm1TZXF1ZW5jZSA9IHBNQUNIZWFkZXItPndTZXFDdGw7CiAgICAgbWVtY3B5KCYocENhY2hlRW50cnktPmFieUFkZHIyWzBdKSwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSksIEVUSF9BTEVOKTsKICAgICBBRERfT05FX1dJVEhfV1JBUF9BUk9VTkQocENhY2hlLT51SW5QdHIsIERVUExJQ0FURV9SWF9DQUNIRV9MRU5HVEgpOwotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC0xMDgsMTMgKzEwOCwxMyBAQAogICogUmV0dXJuIFZhbHVlOiBpbmRleCBudW1iZXIgaW4gRGVmcmFnbWVudCBEYXRhYmFzZQogICoKICAqLwotVUlOVCBXQ1RMdVNlYXJjaERGQ0IgKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCit1bnNpZ25lZCBpbnQgV0NUTHVTZWFyY2hERkNCIChQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKQogewotVUlOVCBpaTsKK3Vuc2lnbmVkIGludCBpaTsKIAogICAgIGZvcihpaT0wO2lpPHBEZXZpY2UtPmNiREZDQjtpaSsrKSB7Ci0gICAgICAgIGlmICgocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICAoSVNfRVRIX0FERFJFU1NfRVFVQUwgKCYocERldmljZS0+c1J4REZDQltpaV0uYWJ5QWRkcjJbMF0pLCAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpCisgICAgICAgIGlmICgocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IHRydWUpICYmCisgICAgICAgICAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcigmKHBEZXZpY2UtPnNSeERGQ0JbaWldLmFieUFkZHIyWzBdKSwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSkpKQogICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgcmV0dXJuKGlpKTsKQEAgLTEzOCwxNyArMTM4LDE3IEBACiAgKiBSZXR1cm4gVmFsdWU6IGluZGV4IG51bWJlciBpbiBEZWZyYWdtZW50IERhdGFiYXNlCiAgKgogICovCi1VSU5UIFdDVEx1SW5zZXJ0REZDQiAoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcikKK3Vuc2lnbmVkIGludCBXQ1RMdUluc2VydERGQ0IgKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCiB7Ci1VSU5UIGlpOwordW5zaWduZWQgaW50IGlpOwogCiAgICAgaWYgKHBEZXZpY2UtPmNiRnJlZURGQ0IgPT0gMCkKICAgICAgICAgcmV0dXJuKHBEZXZpY2UtPmNiREZDQik7CiAgICAgZm9yKGlpPTA7aWk8cERldmljZS0+Y2JERkNCO2lpKyspIHsKLSAgICAgICAgaWYgKHBEZXZpY2UtPnNSeERGQ0JbaWldLmJJblVzZSA9PSBGQUxTRSkgeworICAgICAgICBpZiAocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IGZhbHNlKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5jYkZyZWVERkNCLS07CiAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS51TGlmZXRpbWUgPSBwRGV2aWNlLT5kd01heFJlY2VpdmVMaWZldGltZTsKLSAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbaWldLmJJblVzZSA9IFRSVUU7CisgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPSB0cnVlOwogICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltpaV0ud1NlcXVlbmNlID0gKHBNQUNIZWFkZXItPndTZXFDdGwgPj4gNCk7CiAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS53RnJhZ051bSA9IChwTUFDSGVhZGVyLT53U2VxQ3RsICYgMHgwMDBGKTsKICAgICAgICAgICAgIG1lbWNweSgmKHBEZXZpY2UtPnNSeERGQ0JbaWldLmFieUFkZHIyWzBdKSwgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSksIEVUSF9BTEVOKTsKQEAgLTE3MiwxNSArMTcyLDE1IEBACiAgKiAgT3V0OgogICogICAgICBub25lCiAgKgotICogUmV0dXJuIFZhbHVlOiBUUlVFIGlmIGl0IGlzIHZhbGlkIGZyYWdtZW50IHBhY2tldCBhbmQgd2UgaGF2ZSByZXNvdXJjZSB0byBkZWZyYWdtZW50OyBvdGhlcndpc2UgRkFMU0UKKyAqIFJldHVybiBWYWx1ZTogdHJ1ZSBpZiBpdCBpcyB2YWxpZCBmcmFnbWVudCBwYWNrZXQgYW5kIHdlIGhhdmUgcmVzb3VyY2UgdG8gZGVmcmFnbWVudDsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFdDVExiSGFuZGxlRnJhZ21lbnQgKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIsIFVJTlQgY2JGcmFtZUxlbmd0aCwgQk9PTCBiV0VQLCBCT09MIGJFeHRJVikKK2Jvb2wgV0NUTGJIYW5kbGVGcmFnbWVudCAoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlciwgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsIGJvb2wgYldFUCwgYm9vbCBiRXh0SVYpCiB7Ci1VSU5UICAgICAgICAgICAgdUhlYWRlclNpemU7Cit1bnNpZ25lZCBpbnQgdUhlYWRlclNpemU7CiAKIAotICAgIGlmIChiV0VQID09IFRSVUUpIHsKKyAgICBpZiAoYldFUCA9PSB0cnVlKSB7CiAgICAgICAgIHVIZWFkZXJTaXplID0gMjg7CiAgICAgICAgIGlmIChiRXh0SVYpCiAgICAgICAgIC8vIEV4dElWCkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHBEZXZpY2UtPnVDdXJyZW50REZDQklkeCA9IFdDVEx1SW5zZXJ0REZDQihwRGV2aWNlLCBwTUFDSGVhZGVyKTsKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q3VycmVudERGQ0JJZHggPT0gcERldmljZS0+Y2JERkNCKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIHJlc2VydmUgNCBieXRlIHRvIG1hdGNoIE1BQyBSWCBCdWZmZXIKLSAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLnBieVJ4QnVmZmVyID0gKFBCWVRFKSAocERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLnNrYi0+ZGF0YSArIDQpOworICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSAocERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLnNrYi0+ZGF0YSArIDQpOwogICAgICAgICBtZW1jcHkocERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLnBieVJ4QnVmZmVyLCBwTUFDSGVhZGVyLCBjYkZyYW1lTGVuZ3RoKTsKICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmNiRnJhbWVMZW5ndGggPSBjYkZyYW1lTGVuZ3RoOwogICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgKz0gY2JGcmFtZUxlbmd0aDsKICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLndGcmFnTnVtKys7CiAgICAgICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiRmlyc3QgcERldmljZS0+dUN1cnJlbnRERkNCSWR4PSAlZFxuIiwgcERldmljZS0+dUN1cnJlbnRERkNCSWR4KTsKLSAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuKGZhbHNlKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHBEZXZpY2UtPnVDdXJyZW50REZDQklkeCA9IFdDVEx1U2VhcmNoREZDQihwRGV2aWNlLCBwTUFDSGVhZGVyKTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgICAgICAgICAgICAgIChwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ud0ZyYWdOdW0gPT0gKHBNQUNIZWFkZXItPndTZXFDdGwgJiAweDAwMEYpKSAmJgogICAgICAgICAgICAgICAgICgocERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLmNiRnJhbWVMZW5ndGggKyBjYkZyYW1lTGVuZ3RoIC0gdUhlYWRlclNpemUpIDwgMjM0NikpIHsKIAotICAgICAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIsICgoUEJZVEUpIChwTUFDSGVhZGVyKSArIHVIZWFkZXJTaXplKSwgKGNiRnJhbWVMZW5ndGggLSB1SGVhZGVyU2l6ZSkpOworICAgICAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIsICgodW5zaWduZWQgY2hhciAqKSAocE1BQ0hlYWRlcikgKyB1SGVhZGVyU2l6ZSksIChjYkZyYW1lTGVuZ3RoIC0gdUhlYWRlclNpemUpKTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0uY2JGcmFtZUxlbmd0aCArPSAoY2JGcmFtZUxlbmd0aCAtIHVIZWFkZXJTaXplKTsKICAgICAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW3BEZXZpY2UtPnVDdXJyZW50REZDQklkeF0ucGJ5UnhCdWZmZXIgKz0gKGNiRnJhbWVMZW5ndGggLSB1SGVhZGVyU2l6ZSk7CiAgICAgICAgICAgICAgICAgcERldmljZS0+c1J4REZDQltwRGV2aWNlLT51Q3VycmVudERGQ0JJZHhdLndGcmFnTnVtKys7CkBAIC0yMjksMjEgKzIyOSwyMSBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gc2VxIGVycm9yIG9yIGZyYWcgIyBlcnJvciBmbHVzaCBERkNCCiAgICAgICAgICAgICAgICAgcERldmljZS0+Y2JGcmVlREZDQisrOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5iSW5Vc2UgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICByZXR1cm4oRkFMU0UpOworICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5iSW5Vc2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4oZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuKEZBTFNFKTsKKyAgICAgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKElTX0xBU1RfRlJBR01FTlRfUEtUKHBNQUNIZWFkZXIpKSB7CiAgICAgICAgICAgICAvL2VucSBkZWZyYWdjb250cm9sYmxvY2sKICAgICAgICAgICAgIHBEZXZpY2UtPmNiRnJlZURGQ0IrKzsKLSAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5iSW5Vc2UgPSBGQUxTRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPnNSeERGQ0JbcERldmljZS0+dUN1cnJlbnRERkNCSWR4XS5iSW5Vc2UgPSBmYWxzZTsKICAgICAgICAgICAgIC8vREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiTGFzdCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHg9ICVkXG4iLCBwRGV2aWNlLT51Q3VycmVudERGQ0JJZHgpOwotICAgICAgICAgICAgcmV0dXJuKFRSVUUpOworICAgICAgICAgICAgcmV0dXJuKHRydWUpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybihGQUxTRSk7CisgICAgICAgIHJldHVybihmYWxzZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3djdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2N0bC5oCmluZGV4IGExYWM0NzkuLmE5MmJiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd2N0bC5oCkBAIC05NywxMCArOTcsMTEgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBXQ1RMYklzRHVwbGljYXRlKFBTQ2FjaGUgcENhY2hlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKLUJPT0wgV0NUTGJIYW5kbGVGcmFnbWVudChQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyLCBVSU5UIGNiRnJhbWVMZW5ndGgsIEJPT0wgYldFUCwgQk9PTCBiRXh0SVYpOwotVUlOVCBXQ1RMdVNlYXJjaERGQ0IoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcik7Ci1VSU5UIFdDVEx1SW5zZXJ0REZDQihQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKK2Jvb2wgV0NUTGJJc0R1cGxpY2F0ZShQU0NhY2hlIHBDYWNoZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcik7Citib29sIFdDVExiSGFuZGxlRnJhZ21lbnQoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlciwKKwkJdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgsIGJvb2wgYldFUCwgYm9vbCBiRXh0SVYpOwordW5zaWduZWQgaW50IFdDVEx1U2VhcmNoREZDQihQU0RldmljZSBwRGV2aWNlLCBQUzgwMl8xMUhlYWRlciBwTUFDSGVhZGVyKTsKK3Vuc2lnbmVkIGludCBXQ1RMdUluc2VydERGQ0IoUFNEZXZpY2UgcERldmljZSwgUFM4MDJfMTFIZWFkZXIgcE1BQ0hlYWRlcik7CiAKICNlbmRpZiAvLyBfX1dDVExfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKaW5kZXggOGFmMzU2Zi4uZTU0MDExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJkZXNjLmgiCiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAiY2FyZC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKICNpbmNsdWRlICI4MDIxMWhkci5oIgogI2luY2x1ZGUgIjgwMjExbWdyLmgiCiAjaW5jbHVkZSAid21nci5oIgpAQCAtOTMsOSArOTQsOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLy8yMDA4LTgtNCA8YWRkPiBieSBjaGVzdGVyCi1zdGF0aWMgQk9PTCBDaGFubmVsRXhjZWVkWm9uZVR5cGUoCitzdGF0aWMgYm9vbCBDaGFubmVsRXhjZWVkWm9uZVR5cGUoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFIGJ5Q3VyckNoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwKICAgICApOwogCiAvLyBBc3NvY2lhdGlvbi9kaWFzc29jaWF0aW9uIGZ1bmN0aW9ucwpAQCAtMTA0LDkgKzEwNSw5IEBACiBzX01nck1ha2VBc3NvY1JlcXVlc3QoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgUEJZVEUgcERBZGRyLAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0xpc3RlbkludGVydmFsLAorICAgIHVuc2lnbmVkIGNoYXIgKnBEQWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0xpc3RlbkludGVydmFsLAogICAgIFBXTEFOX0lFX1NTSUQgcEN1cnJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCkBAIC0xMTgsNyArMTE5LDcgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgVUlOVCAgdU5vZGVJbmRleAorICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4CiAgICAgKTsKIAogc3RhdGljCkBAIC0xMjYsOSArMTI3LDkgQEAKIHNfTWdyTWFrZVJlQXNzb2NSZXF1ZXN0KAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFIHBEQWRkciwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdMaXN0ZW5JbnRlcnZhbCwKKyAgICB1bnNpZ25lZCBjaGFyICpwREFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdMaXN0ZW5JbnRlcnZhbCwKICAgICBQV0xBTl9JRV9TU0lEIHBDdXJyU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwpAQCAtMTQwLDcgKzE0MSw3IEBACiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCiAgICAgUFNSeE1nbXRQYWNrZXQgcFJ4UGFja2V0LAotICAgIEJPT0wgYlJlQXNzb2NUeXBlCisgICAgYm9vbCBiUmVBc3NvY1R5cGUKICAgICApOwogCiBzdGF0aWMKQEAgLTIyNSw3ICsyMjYsNyBAQAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAogICAgIFBTUnhNZ210UGFja2V0IHBSeFBhY2tldCwKLSAgICBCT09MIGJJblNjYW4KKyAgICBib29sIGJJblNjYW4KICAgICApOwogCiBzdGF0aWMKQEAgLTI0MCwxMiArMjQxLDEyIEBACiBzX01nck1ha2VCZWFjb24oCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3Q3VyckJlYWNvblBlcmlvZCwKLSAgICBVSU5UIHVDdXJyQ2hhbm5lbCwKLSAgICBXT1JEIHdDdXJyQVRJTVdpbm9kdywKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJCZWFjb25QZXJpb2QsCisgICAgdW5zaWduZWQgaW50IHVDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFUSU1XaW5vZHcsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCi0gICAgUEJZVEUgcEN1cnJCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwQ3VyckJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwogICAgICk7CkBAIC0yNTcsMTAgKzI1OCwxMCBAQAogc19NZ3JNYWtlQXNzb2NSZXNwb25zZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdBc3NvY1N0YXR1cywKLSAgICBXT1JEIHdBc3NvY0FJRCwKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzLAorICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY0FJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwRHN0QWRkciwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKICAgICApOwpAQCAtMjcxLDEwICsyNzIsMTAgQEAKIHNfTWdyTWFrZVJlQXNzb2NSZXNwb25zZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdBc3NvY1N0YXR1cywKLSAgICBXT1JEIHdBc3NvY0FJRCwKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzLAorICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY0FJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwRHN0QWRkciwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKICAgICApOwpAQCAtMjg1LDE2ICsyODYsMTYgQEAKIHNfTWdyTWFrZVByb2JlUmVzcG9uc2UoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3Q3VyckJlYWNvblBlcmlvZCwKLSAgICBVSU5UIHVDdXJyQ2hhbm5lbCwKLSAgICBXT1JEIHdDdXJyQVRJTVdpbm9kdywKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJCZWFjb25QZXJpb2QsCisgICAgdW5zaWduZWQgaW50IHVDdXJyQ2hhbm5lbCwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckFUSU1XaW5vZHcsCisgICAgdW5zaWduZWQgY2hhciAqcERzdEFkZHIsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCi0gICAgUEJZVEUgcEN1cnJCU1NJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwQ3VyckJTU0lELAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJTdXBwUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcywKLSAgICBCWVRFIGJ5UEhZVHlwZQorICAgIHVuc2lnbmVkIGNoYXIgYnlQSFlUeXBlCiAgICAgKTsKIAogLy8gcmVjZWl2ZWQgc3RhdHVzCkBAIC0zMDIsNyArMzAzLDcgQEAKIHZvaWQKIHNfdk1nckxvZ1N0YXR1cygKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3U3RhdHVzCisgICAgdW5zaWduZWQgc2hvcnQgd1N0YXR1cwogICAgICk7CiAKIApAQCAtMzEwLDE4ICszMTEsMTggQEAKIHZvaWQKIHNfdk1nclN5bmNoQlNTICgKICAgICBQU0RldmljZSAgICAgIHBEZXZpY2UsCi0gICAgVUlOVCAgICAgICAgICB1QlNTTW9kZSwKKyAgICB1bnNpZ25lZCBpbnQgdUJTU01vZGUsCiAgICAgUEtub3duQlNTICAgICBwQ3VyciwKICAgICBQQ01EX1NUQVRVUyAgcFN0YXR1cwogICAgICk7CiAKIAotc3RhdGljIEJPT0wKK3N0YXRpYyBib29sCiBzX2JDaXBoZXJNYXRjaCAoCiAgICAgUEtub3duQlNTICAgICAgICAgICAgICAgICAgICAgICAgcEJTU05vZGUsCiAgICAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgICAgRW5jU3RhdHVzLAotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5Q0NTUEssCi0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlDQ1NHSworICAgIHVuc2lnbmVkIGNoYXIgKnBieUNDU1BLLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUNDU0dLCiAgICAgKTsKIAogIHN0YXRpYyB2b2lkICBFbmN5cHRpb25fUmVidWlsZCgKQEAgLTM2OCw3ICszNjksNyBAQAogICAgIHBNZ210LT5ieUNTU1BLID0gS0VZX0NUTF9OT05FOwogICAgIHBNZ210LT5ieUNTU0dLID0gS0VZX0NUTF9OT05FOwogICAgIHBNZ210LT53SUJTU0JlYWNvblBlcmlvZCA9IERFRkFVTFRfSUJTU19CSTsKLSAgICBCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopcERldmljZSwgRkFMU0UpOworICAgIEJTU3ZDbGVhckJTU0xpc3QoKHZvaWQgKilwRGV2aWNlLCBmYWxzZSk7CiAKICAgICByZXR1cm47CiB9CkBAIC0zOTMsMjIgKzM5NCwyMiBAQAogCiAKICAgICBpbml0X3RpbWVyKCZwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2spOwotICAgIHBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjay5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgcE1nbXQtPnNUaW1lclNlY29uZENhbGxiYWNrLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcERldmljZTsKICAgICBwTWdtdC0+c1RpbWVyU2Vjb25kQ2FsbGJhY2suZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbilCU1N2U2Vjb25kQ2FsbEJhY2s7CiAgICAgcE1nbXQtPnNUaW1lclNlY29uZENhbGxiYWNrLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCiAgICAgaW5pdF90aW1lcigmcERldmljZS0+c1RpbWVyQ29tbWFuZCk7Ci0gICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5kYXRhID0gKFVMT05HKXBEZXZpY2U7CisgICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHBEZXZpY2U7CiAgICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKXZDb21tYW5kVGltZXI7CiAgICAgcERldmljZS0+c1RpbWVyQ29tbWFuZC5leHBpcmVzID0gUlVOX0FUKEhaKTsKIAogICAgI2lmZGVmIFR4SW5TbGVlcAogICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7Ci0gICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmRhdGEgPSAoVUxPTkcpcERldmljZTsKKyAgICBwRGV2aWNlLT5zVGltZXJUeERhdGEuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwRGV2aWNlOwogICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKUJTU3ZTZWNvbmRUeERhdGE7CiAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmV4cGlyZXMgPSBSVU5fQVQoMTAqSFopOyAgICAgIC8vMTBzIGNhbGxiYWNrCi0gICAgcERldmljZS0+ZlR4RGF0YUluU2xlZXAgPSBGQUxTRTsKLSAgICBwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IGZhbHNlOworICAgIHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IGZhbHNlOwogICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7CiAgICAjZW5kaWYKIApAQCAtNDQxLDcgKzQ0Miw3IEBACiAKICAgICBwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX1NUQU5EQlk7CiAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7Ci0gICAgcERldmljZS0+YkVuYWJsZVBTTW9kZSA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPSBmYWxzZTsKICAgICAvLyBUT0RPOiB0aW1lcgogCiAgICAgcmV0dXJuOwpAQCAtNDg3LDE1ICs0ODgsMTUgQEAKICAgICAvLyBFUlAgUGh5ICg4MDIuMTFnKSBzaG91bGQgc3VwcG9ydCBzaG9ydCBwcmVhbWJsZS4KICAgICBpZiAocE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9PSBQSFlfVFlQRV8xMUcpIHsKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwotICAgICAgICBpZiAoQ0FSRGJJc1Nob3JTbG90VGltZShwTWdtdC0+cEFkYXB0ZXIpID09IFRSVUUpIHsKKyAgICAgICAgaWYgKENBUkRiSXNTaG9yU2xvdFRpbWUocE1nbXQtPnBBZGFwdGVyKSA9PSB0cnVlKSB7CiAgICAgICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFCKSB7Ci0gICAgICAgIGlmIChDQVJEYklzU2hvcnRQcmVhbWJsZShwTWdtdC0+cEFkYXB0ZXIpID09IFRSVUUpIHsKKyAgICAgICAgaWYgKENBUkRiSXNTaG9ydFByZWFtYmxlKHBNZ210LT5wQWRhcHRlcikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKDEpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKQorICAgIGlmIChwTWdtdC0+YjExaEVuYWJsZSA9PSB0cnVlKQogICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvIHw9IFdMQU5fU0VUX0NBUF9JTkZPX1NQRUNUUlVNTU5HKDEpOwogCiAgICAgLyogYnVpbGQgYW4gYXNzb2NyZXEgZnJhbWUgYW5kIHNlbmQgaXQgKi8KQEAgLTU2NiwxNSArNTY3LDE1IEBACiAgICAgLy8gRVJQIFBoeSAoODAyLjExZykgc2hvdWxkIHN1cHBvcnQgc2hvcnQgcHJlYW1ibGUuCiAgICAgaWYgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFHKSB7CiAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRQUkVBTUJMRSgxKTsKLSAgICAgICAgaWYgKENBUkRiSXNTaG9yU2xvdFRpbWUocE1nbXQtPnBBZGFwdGVyKSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChDQVJEYklzU2hvclNsb3RUaW1lKHBNZ210LT5wQWRhcHRlcikgPT0gdHJ1ZSkgewogICAgICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFNMT1RUSU1FKDEpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExQikgewotICAgICAgICBpZiAoQ0FSRGJJc1Nob3J0UHJlYW1ibGUocE1nbXQtPnBBZGFwdGVyKSA9PSBUUlVFKSB7CisgICAgICAgIGlmIChDQVJEYklzU2hvcnRQcmVhbWJsZShwTWdtdC0+cEFkYXB0ZXIpID09IHRydWUpIHsKICAgICAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8gfD0gV0xBTl9TRVRfQ0FQX0lORk9fU0hPUlRQUkVBTUJMRSgxKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkKKyAgICBpZiAocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TUEVDVFJVTU1ORygxKTsKIAogCkBAIC02MTksOCArNjIwLDggQEAKIHZNZ3JEaXNhc3NvY0JlZ2luU3RhKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBQQllURSAgYWJ5RGVzdEFkZHJlc3MsCi0gICAgV09SRCAgICB3UmVhc29uLAorICAgIHVuc2lnbmVkIGNoYXIgKmFieURlc3RBZGRyZXNzLAorICAgIHVuc2lnbmVkIHNob3J0IHdSZWFzb24sCiAgICAgUENNRF9TVEFUVVMgcFN0YXR1cwogICAgICkKIHsKQEAgLTYzMCwxMCArNjMxLDEwIEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fRElTQVNTT0NfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogCiAgICAgLy8gU2V0dXAgdGhlIHNGcmFtZSBzdHJ1Y3R1cmUKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fRElTQVNTT0NfRlJfTUFYTEVOOwogCiAgICAgLy8gZm9ybWF0IGZpeGVkIGZpZWxkIGZyYW1lIHN0cnVjdHVyZQpAQCAtNjgzLDE3ICs2ODQsMTcgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgVUlOVCB1Tm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgKICAgICApCiB7CiAgICAgV0xBTl9GUl9BU1NPQ1JFUSAgICBzRnJhbWU7CiAgICAgQ01EX1NUQVRVUyAgICAgICAgICBTdGF0dXM7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQ7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3QXNzb2NTdGF0dXMgPSAwOwotICAgIFdPUkQgICAgICAgICAgICAgICAgd0Fzc29jQUlEID0gMDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47Ci0gICAgQllURSAgICAgICAgICAgICAgICBhYnlDdXJyU3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUN1cnJFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY1N0YXR1cyA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jQUlEID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTjsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CiAKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9FU1NfQVApCkBAIC03MDgsNyArNzA5LDcgQEAKICAgICBtZW1zZXQoYWJ5Q3VyclN1cHBSYXRlcywgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDEpOwogICAgIG1lbXNldChhYnlDdXJyRXh0U3VwcFJhdGVzLCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMSk7CiAgICAgc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKIAogICAgIHZNZ3JEZWNvZGVBc3NvY1JlcXVlc3QoJnNGcmFtZSk7CiAKQEAgLTcxNyw3ICs3MTgsNyBAQAogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndDYXBJbmZvID0gY3B1X3RvX2xlMTYoKnNGcmFtZS5wd0NhcEluZm8pOwogICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndMaXN0ZW5JbnRlcnZhbCA9IGNwdV90b19sZTE2KCpzRnJhbWUucHdMaXN0ZW5JbnRlcnZhbCk7CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlBTRW5hYmxlID0KLSAgICAgICAgICAgICAgICBXTEFOX0dFVF9GQ19QV1JNR1Qoc0ZyYW1lLnBIZHItPnNBMy53RnJhbWVDdGwpID8gVFJVRSA6IEZBTFNFOworICAgICAgICAgICAgICAgIFdMQU5fR0VUX0ZDX1BXUk1HVChzRnJhbWUucEhkci0+c0EzLndGcmFtZUN0bCkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgIC8vIFRvZG86IGNoZWNrIHN0YSBiYXNpYyByYXRlLCBpZiBhcCBjYW4ndCBzdXBwb3J0LCBzZXQgc3RhdHVzIGNvZGUKICAgICAgICAgaWYgKHBEZXZpY2UtPmVDdXJyZW50UEhZVHlwZSA9PSBQSFlfVFlQRV8xMUIpIHsKICAgICAgICAgICAgIHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU5fMTFCOwpAQCAtNzM5LDcgKzc0MCw3IEBACiAgICAgICAgIFJBVEV2UGFyc2VNYXhSYXRlKCh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKWFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylhYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIC8vIGRvIG5vdCBjaGFuZ2Ugb3VyIGJhc2ljIHJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAvLyBkbyBub3QgY2hhbmdlIG91ciBiYXNpYyByYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53U3VwcFJhdGUpLApAQCAtNzU4LDIwICs3NTksMjAgQEAKICAgICAgICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKCpzRnJhbWUucHdDYXBJbmZvKTsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRTbG90VGltZSA9CiAgICAgICAgICAgICAgICAgV0xBTl9HRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgqc0ZyYW1lLnB3Q2FwSW5mbyk7Ci0gICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9IChXT1JEKXVOb2RlSW5kZXg7CisgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9ICh1bnNpZ25lZCBzaG9ydCl1Tm9kZUluZGV4OwogICAgICAgICB3QXNzb2NTdGF0dXMgPSBXTEFOX01HTVRfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgICAgIHdBc3NvY0FJRCA9IChXT1JEKXVOb2RlSW5kZXg7CisgICAgICAgIHdBc3NvY0FJRCA9ICh1bnNpZ25lZCBzaG9ydCl1Tm9kZUluZGV4OwogICAgICAgICAvLyBjaGVjayBpZiBFUlAgc3VwcG9ydAogICAgICAgICBpZihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSA+IFJBVEVfMTFNKQotICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLmJFUlBFeGlzdCA9IFRSVUU7CisgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYkVSUEV4aXN0ID0gdHJ1ZTsKIAogICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUgPD0gUkFURV8xMU0pIHsKICAgICAgICAgICAgIC8vIEIgb25seSBTVEEgam9pbgotICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gVFJVRTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IHRydWU7CisgICAgICAgICAgICBwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID0gVFJVRTsKKyAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYlNob3J0UHJlYW1ibGUgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyAiQXNzb2NpYXRlIEFJRD0gJWQgXG4iLCB3QXNzb2NBSUQpOwpAQCAtODQ1LDE3ICs4NDYsMTcgQEAKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKICAgICBQU1J4TWdtdFBhY2tldCBwUnhQYWNrZXQsCi0gICAgVUlOVCB1Tm9kZUluZGV4CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgKICAgICApCiB7CiAgICAgV0xBTl9GUl9SRUFTU09DUkVRICAgIHNGcmFtZTsKICAgICBDTURfU1RBVFVTICAgICAgICAgIFN0YXR1czsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdBc3NvY1N0YXR1cyA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3QXNzb2NBSUQgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTjsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGFieUN1cnJTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTiArIDFdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NBSUQgPSAwOworICAgIHVuc2lnbmVkIGludAl1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyRXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKIAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlICE9IFdNQUNfTU9ERV9FU1NfQVApCiAgICAgICAgIHJldHVybjsKQEAgLTg2Niw3ICs4NjcsNyBAQAogICAgIC8vZGVjb2RlIHRoZSBmcmFtZQogICAgIG1lbXNldCgmc0ZyYW1lLCAwLCBzaXplb2YoV0xBTl9GUl9SRUFTU09DUkVRKSk7CiAgICAgc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICB2TWdyRGVjb2RlUmVhc3NvY1JlcXVlc3QoJnNGcmFtZSk7CiAKICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5lTm9kZVN0YXRlID49IE5PREVfQVVUSCkgewpAQCAtODc0LDcgKzg3NSw3IEBACiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0NhcEluZm8gPSBjcHVfdG9fbGUxNigqc0ZyYW1lLnB3Q2FwSW5mbyk7CiAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0xpc3RlbkludGVydmFsID0gY3B1X3RvX2xlMTYoKnNGcmFtZS5wd0xpc3RlbkludGVydmFsKTsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iUFNFbmFibGUgPQotICAgICAgICAgICAgICAgIFdMQU5fR0VUX0ZDX1BXUk1HVChzRnJhbWUucEhkci0+c0EzLndGcmFtZUN0bCkgPyBUUlVFIDogRkFMU0U7CisgICAgICAgICAgICAgICAgV0xBTl9HRVRfRkNfUFdSTUdUKHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsKSA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgLy8gVG9kbzogY2hlY2sgc3RhIGJhc2ljIHJhdGUsIGlmIGFwIGNhbid0IHN1cHBvcnQsIHNldCBzdGF0dXMgY29kZQogCiAgICAgICAgIGlmIChwRGV2aWNlLT5lQ3VycmVudFBIWVR5cGUgPT0gUEhZX1RZUEVfMTFCKSB7CkBAIC04OTgsNyArODk5LDcgQEAKICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoKHZvaWQgKilwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylhYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylhYnlDdXJyRXh0U3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsIC8vIGRvIG5vdCBjaGFuZ2Ugb3VyIGJhc2ljIHJhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAvLyBkbyBub3QgY2hhbmdlIG91ciBiYXNpYyByYXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53U3VwcFJhdGUpLApAQCAtOTE3LDIxICs5MTgsMjEgQEAKICAgICAgICAgICAgICAgICBXTEFOX0dFVF9DQVBfSU5GT19TSE9SVFBSRUFNQkxFKCpzRnJhbWUucHdDYXBJbmZvKTsKICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRTbG90VGltZSA9CiAgICAgICAgICAgICAgICAgV0xBTl9HRVRfQ0FQX0lORk9fU0hPUlRTTE9UVElNRSgqc0ZyYW1lLnB3Q2FwSW5mbyk7Ci0gICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9IChXT1JEKXVOb2RlSW5kZXg7CisgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud0FJRCA9ICh1bnNpZ25lZCBzaG9ydCl1Tm9kZUluZGV4OwogICAgICAgICB3QXNzb2NTdGF0dXMgPSBXTEFOX01HTVRfU1RBVFVTX1NVQ0NFU1M7Ci0gICAgICAgIHdBc3NvY0FJRCA9IChXT1JEKXVOb2RlSW5kZXg7CisgICAgICAgIHdBc3NvY0FJRCA9ICh1bnNpZ25lZCBzaG9ydCl1Tm9kZUluZGV4OwogCiAgICAgICAgIC8vIGlmIHN1cHB1cnQgRVJQCiAgICAgICAgIGlmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlID4gUkFURV8xMU0pCi0gICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYkVSUEV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iRVJQRXhpc3QgPSB0cnVlOwogCiAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSA8PSBSQVRFXzExTSkgewogICAgICAgICAgICAgLy8gQiBvbmx5IFNUQSBqb2luCi0gICAgICAgICAgICBwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPSBUUlVFOwotICAgICAgICAgICAgcERldmljZS0+Yk5vbkVSUFByZXNlbnQgPSBUUlVFOworICAgICAgICAgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9PSBGQUxTRSkgewotICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBUUlVFOworICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRQcmVhbWJsZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJSeCBSZUFzc29jaWF0ZSBBSUQ9ICVkIFxuIiwgd0Fzc29jQUlEKTsKQEAgLTk5NSwxMiArOTk2LDEyIEBACiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCiAgICAgUFNSeE1nbXRQYWNrZXQgcFJ4UGFja2V0LAotICAgIEJPT0wgYlJlQXNzb2NUeXBlCisgICAgYm9vbCBiUmVBc3NvY1R5cGUKICAgICApCiB7CiAgICAgV0xBTl9GUl9BU1NPQ1JFU1AgICBzRnJhbWU7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRDsKLSAgICBQQllURSAgIHBieUlFczsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJRXM7CiAgICAgdmlhd2dldF93cGFfaGVhZGVyICp3cGFoZHI7CiAKIApAQCAtMTAwOSw3ICsxMDEwLDcgQEAKICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfQVNTT0MpIHsKIAogICAgICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgICAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgICAgIC8vIGRlY29kZSB0aGUgZnJhbWUKICAgICAgICAgdk1nckRlY29kZUFzc29jUmVzcG9uc2UoJnNGcmFtZSk7CiAgICAgICAgIGlmICgoc0ZyYW1lLnB3Q2FwSW5mbyA9PSAwKSB8fApAQCAtMTA0NCw3ICsxMDQ1LDcgQEAKICAgICAgICAgICAgIEJTU3ZVcGRhdGVBUE5vZGUoKHZvaWQgKilwRGV2aWNlLCBzRnJhbWUucHdDYXBJbmZvLCBzRnJhbWUucFN1cHBSYXRlcywgc0ZyYW1lLnBFeHRTdXBwUmF0ZXMpOwogICAgICAgICAgICAgcEl0ZW1TU0lEID0gKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfSU5GTywgS0VSTl9JTkZPICJMaW5rIHdpdGggQVAoU1NJRCk6ICVzXG4iLCBwSXRlbVNTSUQtPmFieVNTSUQpOwotICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKyAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAgICAgICAgICAgICBwRGV2aWNlLT51QkJWR0FEaWZmQ291bnQgPSAwOwogICAgICAgICAgICAgaWYgKChwRGV2aWNlLT5iV1BBREVWVXApICYmIChwRGV2aWNlLT5za2IgIT0gTlVMTCkpIHsKIAkgIGlmKHNrYl90YWlscm9vbShwRGV2aWNlLT5za2IpIDwoc2l6ZW9mKHZpYXdnZXRfd3BhX2hlYWRlcikrcE1nbXQtPnNBc3NvY0luZm8uQXNzb2NJbmZvLlJlc3BvbnNlSUVMZW5ndGgrCkBAIC0xMDczLDkgKzEwNzQsOSBAQAogCiAvLzIwMDgtMDQwOS0wNywgPEFkZD4gYnkgRWluc24gTGl1CiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotCS8vaWYocERldmljZS0+YldQQURldkVuYWJsZSA9PSBUUlVFKQorCS8vaWYocERldmljZS0+YldQQURldkVuYWJsZSA9PSB0cnVlKQogCQl7Ci0JCUJZVEUgYnVmWzUxMl07CisJCXVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CiAJCXNpemVfdCBsZW47CiAJCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7CiAJCWludCB3ZV9ldmVudDsKQEAgLTExMjgsNyArMTEyOSw3IEBACiAvL25lZWQgY2xlYXIgZmxhZ3MgcmVsYXRlZCB0byBOZXR3b3JrbWFuYWdlcgogCiAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ3ZXh0Y291bnQgPSAwOwotICAgICAgICAgICAgICBwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID0gRkFMU0U7CisgICAgICAgICAgICAgIHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgogCiAKQEAgLTExNjMsOCArMTE2NCw4IEBACiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQVVUSEVOX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fQVVUSEVOX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlQXV0aGVuKCZzRnJhbWUpOwogICAgIC8qIGluc2VydCB2YWx1ZXMgKi8KQEAgLTEyMTIsOCArMTIxMyw4IEBACiB2TWdyRGVBdXRoZW5CZWdpblN0YSgKICAgICB2b2lkICpoRGV2aWNlQ29udGV4dCwKICAgICBQU01nbXRPYmplY3QgIHBNZ210LAotICAgIFBCWVRFICBhYnlEZXN0QWRkcmVzcywKLSAgICBXT1JEICAgIHdSZWFzb24sCisgICAgdW5zaWduZWQgY2hhciAqYWJ5RGVzdEFkZHJlc3MsCisgICAgdW5zaWduZWQgc2hvcnQgd1JlYXNvbiwKICAgICBQQ01EX1NUQVRVUyBwU3RhdHVzCiAgICAgKQogewpAQCAtMTIyNCw4ICsxMjI1LDggQEAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9ERUFVVEhFTl9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX0RFQVVUSEVOX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlRGVhdXRoZW4oJnNGcmFtZSk7CiAgICAgLyogaW5zZXJ0IHZhbHVlcyAqLwpAQCAtMTI4Miw3ICsxMjgzLDcgQEAKIAogICAgIC8vIGRlY29kZSB0aGUgZnJhbWUKICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHZNZ3JEZWNvZGVBdXRoZW4oJnNGcmFtZSk7CiAgICAgc3dpdGNoIChjcHVfdG9fbGUxNigoKihzRnJhbWUucHdBdXRoU2VxdWVuY2UgKSkpKXsKICAgICAgICAgY2FzZSAxOgpAQCAtMTMzMSw3ICsxMzMyLDcgQEAKICAgICAgKQogewogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVOb2RlSW5kZXg7CisgICAgdW5zaWduZWQgaW50CXVOb2RlSW5kZXg7CiAgICAgV0xBTl9GUl9BVVRIRU4gICAgICBzRnJhbWU7CiAgICAgUFNLZXlJdGVtICAgICAgICAgICBwVHJhbnNtaXRLZXk7CiAKQEAgLTEzNTMsOCArMTM1NCw4IEBACiAgICAgLy8gc2VuZCBhdXRoIHJlcGx5CiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0FVVEhFTl9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX0FVVEhFTl9GUl9NQVhMRU47CiAgICAgLy8gZm9ybWF0IGJ1ZmZlciBzdHJ1Y3R1cmUKICAgICB2TWdyRW5jb2RlQXV0aGVuKCZzRnJhbWUpOwpAQCAtMTM5Myw3ICsxMzk0LDcgQEAKICAgICAgICAgc0ZyYW1lLnBDaGFsbGVuZ2UtPmxlbiA9IFdMQU5fQ0hBTExFTkdFX0xFTjsKICAgICAgICAgbWVtc2V0KHBNZ210LT5hYnlDaGFsbGVuZ2UsIDAsIFdMQU5fQ0hBTExFTkdFX0xFTik7CiAgICAgICAgIC8vIGdldCBncm91cCBrZXkKLSAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBEZXZpY2UtPmFieUJyb2FkY2FzdEFkZHIsIEdST1VQX0tFWSwgJnBUcmFuc21pdEtleSkgPT0gVFJVRSkgeworICAgICAgICBpZihLZXliR2V0VHJhbnNtaXRLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkciwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSB0cnVlKSB7CiAgICAgICAgICAgICByYzRfaW5pdCgmcERldmljZS0+U0JveCwgcERldmljZS0+YWJ5UFJORywgcFRyYW5zbWl0S2V5LT51S2V5TGVuZ3RoKzMpOwogICAgICAgICAgICAgcmM0X2VuY3J5cHQoJnBEZXZpY2UtPlNCb3gsIHBNZ210LT5hYnlDaGFsbGVuZ2UsIHBNZ210LT5hYnlDaGFsbGVuZ2UsIFdMQU5fQ0hBTExFTkdFX0xFTik7CiAgICAgICAgIH0KQEAgLTE0NjYsOCArMTQ2Nyw4IEBACiAgICAgICAgICAgICBpZiAoY3B1X3RvX2xlMTYoKCoocEZyYW1lLT5wd1N0YXR1cykpKSA9PSBXTEFOX01HTVRfU1RBVFVTX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgICAgICAgICAgICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fQVVUSEVOX0ZSX01BWExFTik7Ci0gICAgICAgICAgICAgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKLSAgICAgICAgICAgICAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICAgICAgICAgICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICAgICAgICAgICAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgICAgICAgICAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fQVVUSEVOX0ZSX01BWExFTjsKICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgYnVmZmVyIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgIHZNZ3JFbmNvZGVBdXRoZW4oJnNGcmFtZSk7CkBAIC0xNTM5LDggKzE1NDAsOCBAQAogICAgICkKIHsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldCA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1U3RhdHVzQ29kZSA9IDAgOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IHVTdGF0dXNDb2RlID0gMCA7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOwogICAgIFdMQU5fRlJfQVVUSEVOICAgICAgc0ZyYW1lOwogCiAgICAgaWYgKCFXTEFOX0dFVF9GQ19JU1dFUChwRnJhbWUtPnBIZHItPnNBMy53RnJhbWVDdGwpKSB7CkBAIC0xNTczLDggKzE1NzQsOCBAQAogICAgIC8vIHNlbmQgYXV0aCByZXBseQogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BVVRIRU5fRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9BVVRIRU5fRlJfTUFYTEVOOwogICAgIC8vIGZvcm1hdCBidWZmZXIgc3RydWN0dXJlCiAgICAgdk1nckVuY29kZUF1dGhlbigmc0ZyYW1lKTsKQEAgLTE2NjYsNyArMTY2Nyw3IEBACiAgICAgKQogewogICAgIFdMQU5fRlJfRElTQVNTT0MgICAgc0ZyYW1lOwotICAgIFVJTlQgICAgICAgIHVOb2RlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4ID0gMDsKIC8vICAgIENNRF9TVEFUVVMgICAgICAgICAgQ21kU3RhdHVzOwogICAgIHZpYXdnZXRfd3BhX2hlYWRlciAqd3BhaGRyOwogCkBAIC0xNjc0LDcgKzE2NzUsNyBAQAogICAgICAgICAvLyBpZiBpcyBhY3RpbmcgYW4gQVAuLgogICAgICAgICAvLyBhIFNUQSBpcyBsZWF2aW5nIHRoaXMgQlNTLi4KICAgICAgICAgc0ZyYW1lLmxlbiA9IHBSeFBhY2tldC0+Y2JNUERVTGVuOwotICAgICAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICAgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgcFJ4UGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMiwgJnVOb2RlSW5kZXgpKSB7CiAgICAgICAgICAgICBCU1N2UmVtb3ZlT25lTm9kZShwRGV2aWNlLCB1Tm9kZUluZGV4KTsKICAgICAgICAgfQpAQCAtMTY4NCw3ICsxNjg1LDcgQEAKICAgICB9CiAgICAgZWxzZSBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSApewogICAgICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgICAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgICAgIHZNZ3JEZWNvZGVEaXNhc3NvY2lhdGlvbigmc0ZyYW1lKTsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gIkFQIGRpc2Fzc29jaWF0ZWQgbWUsIHJlYXNvbj0lZC5cbiIsIGNwdV90b19sZTE2KCooc0ZyYW1lLnB3UmVhc29uKSkpOwogICAgICAgICAvL1RPRE86IGRvIHNvbWV0aGluZyBsZXQgdXBwZXIgbGF5ZXIga25vdyBvcgpAQCAtMTcwOSw3ICsxNzEwLDcgQEAKICAgICAgICAgIH07CiAKICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgIHsKIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC0xNzQ1LDcgKzE3NDYsNyBAQAogICAgICkKIHsKICAgICBXTEFOX0ZSX0RFQVVUSEVOICAgIHNGcmFtZTsKLSAgICBVSU5UICAgICAgICB1Tm9kZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdU5vZGVJbmRleCA9IDA7CiAgICAgdmlhd2dldF93cGFfaGVhZGVyICp3cGFoZHI7CiAKIApAQCAtMTc1NCw3ICsxNzU1LDcgQEAKICAgICAgICAgLy8gaWYgaXMgYWN0aW5nIGFuIEFQLi4KICAgICAgICAgLy8gYSBTVEEgaXMgbGVhdmluZyB0aGlzIEJTUy4uCiAgICAgICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICAgICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgaWYgKEJTU0RCYklzU1RBSW5Ob2RlREIocE1nbXQsIHBSeFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjIsICZ1Tm9kZUluZGV4KSkgewogICAgICAgICAgICAgQlNTdlJlbW92ZU9uZU5vZGUocERldmljZSwgdU5vZGVJbmRleCk7CiAgICAgICAgIH0KQEAgLTE3NjUsMTcgKzE3NjYsMTcgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19TVEEgKSB7CiAgICAgICAgICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgICAgICAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICAgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgICAgIHZNZ3JEZWNvZGVEZWF1dGhlbigmc0ZyYW1lKTsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX05PVElDRSwgS0VSTl9JTkZPICAiQVAgZGVhdXRoZWQgbWUsIHJlYXNvbj0lZC5cbiIsIGNwdV90b19sZTE2KCgqKHNGcmFtZS5wd1JlYXNvbikpKSk7CiAgICAgICAgICAgICAvLyBUT0RPOiB1cGRhdGUgQlNTIGxpc3QgZm9yIHNwZWNpZmljIEJTU0lEIGlmIHByZS1hdXRoZW50aWNhdGlvbiBjYXNlCi0gICAgICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwoc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMywgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKKyAgICAgICAgICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHNGcmFtZS5wSGRyLT5zQTMuYWJ5QWRkcjMsIHBNZ210LT5hYnlDdXJyQlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5lQ3VyclN0YXRlID49IFdNQUNfU1RBVEVfQVVUSFBFTkRJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX1NUQU5EQlk7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCkBAIC0xNzk1LDcgKzE3OTYsNyBAQAogICAgICAgICAgICB9OwogCiAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCisgIC8vIGlmKHBEZXZpY2UtPmJXUEFTdXBwV2V4dEVuYWJsZWQgPT0gdHJ1ZSkKICAgICAgIHsKIAl1bmlvbiBpd3JlcV9kYXRhICB3cnF1OwogCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mICh3cnF1KSk7CkBAIC0xODI1LDIzICsxODI2LDIzIEBACiAgKiAgICAgICAgICAgICAgIFRydWU6ZXhjZWVkOwogICogICAgICAgICAgICAgICAgRmFsc2U6bm9ybWFsIGNhc2UKIC0qLwotc3RhdGljIEJPT0wKK3N0YXRpYyBib29sCiBDaGFubmVsRXhjZWVkWm9uZVR5cGUoCiAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICBCWVRFIGJ5Q3VyckNoYW5uZWwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwKICAgICApCiB7Ci0gIEJPT0wgZXhjZWVkPUZBTFNFOworICBib29sIGV4Y2VlZD1mYWxzZTsKIAogICBzd2l0Y2gocERldmljZS0+Ynlab25lVHlwZSkgewogICAJY2FzZSAweDAwOiAgICAgICAgICAgICAgICAgIC8vVVNBOjF+MTEKICAgICAgICAgICAgICAgICAgICAgIGlmKChieUN1cnJDaGFubmVsPDEpIHx8KGJ5Q3VyckNoYW5uZWw+MTEpKQotCSAgICAgICAgICAgICAgICBleGNlZWQgPSBUUlVFOworCSAgICAgICAgICAgICAgICBleGNlZWQgPSB0cnVlOwogCSAgICAgICAgIGJyZWFrOwogCWNhc2UgMHgwMTogICAgICAgICAgICAgICAgICAvL0phcGFuOjF+MTMKIAljYXNlIDB4MDI6ICAgICAgICAgICAgICAgICAgLy9FdXJvcGU6MX4xMwogICAgICAgICAgICAgICAgICAgICAgaWYoKGJ5Q3VyckNoYW5uZWw8MSkgfHwoYnlDdXJyQ2hhbm5lbD4xMykpCi0JICAgICAgICAgICAgICAgIGV4Y2VlZCA9IFRSVUU7CisJICAgICAgICAgICAgICAgIGV4Y2VlZCA9IHRydWU7CiAJICAgICAgICAgYnJlYWs7CiAJZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIC8vcmVzZXJ2ZSBmb3Igb3RoZXIgem9uZXR5cGUKIAkJYnJlYWs7CkBAIC0xODY4LDM5ICsxODY5LDM5IEBACiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCiAgICAgUFNSeE1nbXRQYWNrZXQgcFJ4UGFja2V0LAotICAgIEJPT0wgYkluU2NhbgorICAgIGJvb2wgYkluU2NhbgogICAgICkKIHsKIAogICAgIFBLbm93bkJTUyAgICAgICAgICAgcEJTU0xpc3Q7CiAgICAgV0xBTl9GUl9CRUFDT04gICAgICBzRnJhbWU7CiAgICAgUVdPUkQgICAgICAgICAgICAgICBxd1RTRk9mZnNldDsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJJc0JTU0lERXF1YWwgPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJJc1NTSURFcXVhbCA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlRTRkxhcmdlRGlmZiA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYlRTRk9mZnNldFBvc3RpdmUgPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJVcGRhdGVUU0YgPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJJc0FQQmVhY29uID0gRkFMU0U7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICBiSXNDaGFubmVsRXF1YWwgPSBGQUxTRTsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVMb2NhdGVCeXRlSW5kZXg7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVRJTUJpdE9uID0gMDsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdBSUROdW1iZXIgPSAwOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdU5vZGVJbmRleDsKKyAgICBib29sIGJJc0JTU0lERXF1YWwgPSBmYWxzZTsKKyAgICBib29sIGJJc1NTSURFcXVhbCA9IGZhbHNlOworICAgIGJvb2wgYlRTRkxhcmdlRGlmZiA9IGZhbHNlOworICAgIGJvb2wgYlRTRk9mZnNldFBvc3RpdmUgPSBmYWxzZTsKKyAgICBib29sIGJVcGRhdGVUU0YgPSBmYWxzZTsKKyAgICBib29sIGJJc0FQQmVhY29uID0gZmFsc2U7CisgICAgYm9vbCBiSXNDaGFubmVsRXF1YWwgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgdUxvY2F0ZUJ5dGVJbmRleDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5VElNQml0T24gPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdBSUROdW1iZXIgPSAwOworICAgIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4OwogICAgIFFXT1JEICAgICAgICAgICAgICAgcXdUaW1lc3RhbXAsIHF3TG9jYWxUU0Y7CiAgICAgUVdPUkQgICAgICAgICAgICAgICBxd0N1cnJUU0Y7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3U3RhcnRJbmRleCA9IDA7Ci0gICAgV09SRCAgICAgICAgICAgICAgICB3QUlESW5kZXggPSAwOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDdXJyQ2hhbm5lbCA9IHBSeFBhY2tldC0+YnlSeENoYW5uZWw7CisgICAgdW5zaWduZWQgc2hvcnQgd1N0YXJ0SW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IHdBSURJbmRleCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBieUN1cnJDaGFubmVsID0gcFJ4UGFja2V0LT5ieVJ4Q2hhbm5lbDsKICAgICBFUlBPYmplY3QgICAgICAgICAgIHNFUlA7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOwotICAgIEJPT0wgICAgICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBGQUxTRTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSBGQUxTRTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdVJhdGVMZW4gPSBXTEFOX1JBVEVTX01BWExFTjsKKyAgICBib29sIGJDaGFubmVsSGl0ID0gZmFsc2U7CisgICAgYm9vbCBiVXBkYXRlUGh5UGFyYW1ldGVyID0gZmFsc2U7CisgICAgdW5zaWduZWQgY2hhciBieUlFQ2hhbm5lbCA9IDA7CiAKIAogICAgIG1lbXNldCgmc0ZyYW1lLCAwLCBzaXplb2YoV0xBTl9GUl9CRUFDT04pKTsKICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogCiAgICAgLy8gZGVjb2RlIHRoZSBiZWFjb24gZnJhbWUKICAgICB2TWdyRGVjb2RlQmVhY29uKCZzRnJhbWUpOwpAQCAtMTkxNywyOSArMTkxOCwyOSBAQAogICAgIGlmIChzRnJhbWUucERTUGFybXMgIT0gTlVMTCkgewogICAgICAgICBpZiAoYnlDdXJyQ2hhbm5lbCA+IENCX01BWF9DSEFOTkVMXzI0RykgewogICAgICAgICAgICAgLy8gY2hhbm5lbCByZW1hcHBpbmcgdG8KLSAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gQ0FSRGJ5R2V0Q2hhbm5lbE1hcHBpbmcocERldmljZSwgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsLCBQSFlfVFlQRV8xMUEpOworICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBnZXRfY2hhbm5lbF9tYXBwaW5nKHBEZXZpY2UsIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCwgUEhZX1RZUEVfMTFBKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsOwogICAgICAgICB9CiAgICAgICAgIGlmIChieUN1cnJDaGFubmVsICE9IGJ5SUVDaGFubmVsKSB7CiAgICAgICAgICAgICAvLyBhZGp1c3QgY2hhbm5lbCBpbmZvLiBiY3Mgd2UgcmN2IGFkamNlbnQgY2hhbm5lbCBwYWtja2V0cwotICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBGQUxTRTsKKyAgICAgICAgICAgIGJDaGFubmVsSGl0ID0gZmFsc2U7CiAgICAgICAgICAgICBieUN1cnJDaGFubmVsID0gYnlJRUNoYW5uZWw7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBubyBEUyBjaGFubmVsIGluZm8KLSAgICAgICAgYkNoYW5uZWxIaXQgPSBUUlVFOworICAgICAgICBiQ2hhbm5lbEhpdCA9IHRydWU7CiAgICAgfQogLy8yMDA4LTA3MzAtMDE8QWRkPmJ5IE1pa2VMaXUKLWlmKENoYW5uZWxFeGNlZWRab25lVHlwZShwRGV2aWNlLGJ5Q3VyckNoYW5uZWwpPT1UUlVFKQoraWYoQ2hhbm5lbEV4Y2VlZFpvbmVUeXBlKHBEZXZpY2UsYnlDdXJyQ2hhbm5lbCk9PXRydWUpCiAgICAgICByZXR1cm47CiAKICAgICBpZiAoc0ZyYW1lLnBFUlAgIT0gTlVMTCkgewogICAgICAgICBzRVJQLmJ5RVJQID0gc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dDsKLSAgICAgICAgc0VSUC5iRVJQRXhpc3QgPSBUUlVFOworICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IHRydWU7CiAKICAgICB9IGVsc2UgewotICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IEZBTFNFOworICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IGZhbHNlOwogICAgICAgICBzRVJQLmJ5RVJQID0gMDsKICAgICB9CiAKQEAgLTE5OTMsOCArMTk5NCw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZihieUN1cnJDaGFubmVsID09IChCWVRFKXBNZ210LT51Q3VyckNoYW5uZWwpCi0gICAgICAgYklzQ2hhbm5lbEVxdWFsID0gVFJVRTsKKyAgICBpZihieUN1cnJDaGFubmVsID09ICh1bnNpZ25lZCBjaGFyKXBNZ210LT51Q3VyckNoYW5uZWwpCisgICAgICAgYklzQ2hhbm5lbEVxdWFsID0gdHJ1ZTsKIAogICAgIGlmIChiSXNDaGFubmVsRXF1YWwgJiYgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkpIHsKIApAQCAtMjAyMSw3ICsyMDIyLDcgQEAKICAgICAgICAgaWYgKFdMQU5fR0VUX0VSUF9VU0VfUFJPVEVDVElPTihwRGV2aWNlLT5ieUVSUEZsYWcpKXsKICAgICAgICAgICAgIGlmICghcERldmljZS0+YlByb3RlY3RNb2RlKSB7CiAgICAgICAgICAgICAgICAgIE1BQ3ZFbmFibGVQcm90ZWN0TUQocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDM1LDcgKzIwMzYsNyBAQAogICAgICAgICAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRCwKICAgICAgICAgICAgICAgIFdMQU5fQlNTSURfTEVOKSA9PSAwKSB7CiAKLSAgICAgICAgYklzQlNTSURFcXVhbCA9IFRSVUU7CisgICAgICAgIGJJc0JTU0lERXF1YWwgPSB0cnVlOwogCiAvLyAyMDA4LTA1LTIxIDxhZGQ+IGJ5IFJpY2hhcmR0YWkKICAgICAgICAgcERldmljZS0+dUN1cnJSU1NJID0gcFJ4UGFja2V0LT51UlNTSTsKQEAgLTIwNTIsMzAgKzIwNTMsMzAgQEAKICAgICAgICAgICAgICAgICAgICAoKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lEKS0+YWJ5U1NJRCwKICAgICAgICAgICAgICAgICAgICBzRnJhbWUucFNTSUQtPmxlbgogICAgICAgICAgICAgICAgICAgICkgPT0gMCkgewotICAgICAgICAgICAgYklzU1NJREVxdWFsID0gVFJVRTsKKyAgICAgICAgICAgIGJJc1NTSURFcXVhbCA9IHRydWU7CiAgICAgICAgIH07CiAgICAgfQogCi0gICAgaWYgKChXTEFOX0dFVF9DQVBfSU5GT19FU1MoKnNGcmFtZS5wd0NhcEluZm8pPT0gVFJVRSkgJiYKLSAgICAgICAgKGJJc0JTU0lERXF1YWwgPT0gVFJVRSkgJiYKLSAgICAgICAgKGJJc1NTSURFcXVhbCA9PSBUUlVFKSAmJgorICAgIGlmICgoV0xBTl9HRVRfQ0FQX0lORk9fRVNTKCpzRnJhbWUucHdDYXBJbmZvKT09IHRydWUpICYmCisgICAgICAgIChiSXNCU1NJREVxdWFsID09IHRydWUpICYmCisgICAgICAgIChiSXNTU0lERXF1YWwgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19TVEEpICYmCiAgICAgICAgIChwTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0FTU09DKSkgewogICAgICAgICAvLyBhZGQgc3RhdGUgY2hlY2sgdG8gcHJldmVudCByZWNvbm5lY3QgZmFpbCBzaW5jZSB3ZSdsbCByZWNlaXZlIEJlYWNvbgogCi0gICAgICAgIGJJc0FQQmVhY29uID0gVFJVRTsKKyAgICAgICAgYklzQVBCZWFjb24gPSB0cnVlOwogCiAgICAgICAgIGlmIChwQlNTTGlzdCAhPSBOVUxMKSB7CiAKICAgICAgICAgICAgIC8vIENvbXBhcmUgUEhZIHBhcmFtYXRlciBzZXR0aW5nCiAgICAgICAgICAgICBpZiAocE1nbXQtPndDdXJyQ2FwSW5mbyAhPSBwQlNTTGlzdC0+d0NhcEluZm8pIHsKLSAgICAgICAgICAgICAgICBiVXBkYXRlUGh5UGFyYW1ldGVyID0gVFJVRTsKKyAgICAgICAgICAgICAgICBiVXBkYXRlUGh5UGFyYW1ldGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvID0gcEJTU0xpc3QtPndDYXBJbmZvOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNGcmFtZS5wRVJQICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoKHNGcmFtZS5wRVJQLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9FUlApICYmCiAgICAgICAgICAgICAgICAgICAgIChwTWdtdC0+YnlFUlBDb250ZXh0ICE9IHNGcmFtZS5wRVJQLT5ieUNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJVcGRhdGVQaHlQYXJhbWV0ZXIgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBiVXBkYXRlUGh5UGFyYW1ldGVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmJ5RVJQQ29udGV4dCA9IHNGcmFtZS5wRVJQLT5ieUNvbnRleHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjA5NCw3ICsyMDk1LDcgQEAKICAgICAgICAgICAgIFJBVEV2UGFyc2VNYXhSYXRlKCAodm9pZCAqKXBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVswXS53TWF4QmFzaWNSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heFN1cHBSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1N1cHBSYXRlKSwKQEAgLTIxMDQsNyArMjEwNSw3IEBACiAjaWZkZWYJUExJQ0VfREVCVUcKIAkJLy9wcmludGsoIlJ4QmVhY29uOk1heFN1cHBSYXRlIGlzICVkXG4iLHBNZ210LT5zTm9kZURCVGFibGVbMF0ud01heFN1cHBSYXRlKTsKICNlbmRpZgotCQkJaWYgKGJVcGRhdGVQaHlQYXJhbWV0ZXIgPT0gVFJVRSkgeworCQkJaWYgKGJVcGRhdGVQaHlQYXJhbWV0ZXIgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIENBUkRiU2V0UGh5UGFyYW1ldGVyKCBwTWdtdC0+cEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VycmVudFBIWU1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT53Q3VyckNhcEluZm8sCkBAIC0yMTE1LDE5ICsyMTE2LDE5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc0ZyYW1lLnBJRV9Qb3dlckNvbnN0cmFpbnQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIENBUkR2U2V0UG93ZXJDb25zdHJhaW50KHBNZ210LT5wQWRhcHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURSkgcEJTU0xpc3QtPnVDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSBwQlNTTGlzdC0+dUNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0ZyYW1lLnBJRV9Qb3dlckNvbnN0cmFpbnQtPmJ5UG93ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHNGcmFtZS5wSUVfQ0hTVyAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgQ0FSRGJDaGFubmVsU3dpdGNoKCBwTWdtdC0+cEFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzRnJhbWUucElFX0NIU1ctPmJ5TW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBUkRieUdldENoYW5uZWxNYXBwaW5nKHBNZ210LT5wQWRhcHRlciwgc0ZyYW1lLnBJRV9DSFNXLT5ieU1vZGUsIHBNZ210LT5lQ3VycmVudFBIWU1vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2NoYW5uZWxfbWFwcGluZyhwTWdtdC0+cEFkYXB0ZXIsIHNGcmFtZS5wSUVfQ0hTVy0+YnlNb2RlLCBwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNGcmFtZS5wSUVfQ0hTVy0+YnlDb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgfSBlbHNlIGlmIChiSXNDaGFubmVsRXF1YWwgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICBDQVJEYlNldENoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwQlNTTGlzdC0+dUNoYW5uZWwpOworICAgICAgICAgICAgfSBlbHNlIGlmIChiSXNDaGFubmVsRXF1YWwgPT0gZmFsc2UpIHsKKyAgICAgICAgICAgICAgICBzZXRfY2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBCU1NMaXN0LT51Q2hhbm5lbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTQ4LDE3ICsyMTQ5LDE3IEBACiAgICAgLy8gY2hlY2sgaWYgYmVhY29uIFRTRiBsYXJnZXIgb3Igc21hbGwgdGhhbiBvdXIgbG9jYWwgVFNGCiAgICAgaWYgKEhJRFdPUkQocXdUaW1lc3RhbXApID09IEhJRFdPUkQocXdMb2NhbFRTRikpIHsKICAgICAgICAgaWYgKExPRFdPUkQocXdUaW1lc3RhbXApID49IExPRFdPUkQocXdMb2NhbFRTRikpIHsKLSAgICAgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gVFJVRTsKKyAgICAgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gRkFMU0U7CisgICAgICAgICAgICBiVFNGT2Zmc2V0UG9zdGl2ZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKEhJRFdPUkQocXdUaW1lc3RhbXApID4gSElEV09SRChxd0xvY2FsVFNGKSkgewotICAgICAgICBiVFNGT2Zmc2V0UG9zdGl2ZSA9IFRSVUU7CisgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoSElEV09SRChxd1RpbWVzdGFtcCkgPCBISURXT1JEKHF3TG9jYWxUU0YpKSB7Ci0gICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gRkFMU0U7CisgICAgICAgIGJUU0ZPZmZzZXRQb3N0aXZlID0gZmFsc2U7CiAgICAgfTsKIAogICAgIGlmIChiVFNGT2Zmc2V0UG9zdGl2ZSkgewpAQCAtMjE3MCwyMSArMjE3MSwyMSBAQAogCiAgICAgaWYgKEhJRFdPUkQocXdUU0ZPZmZzZXQpICE9IDAgfHwKICAgICAgICAgKExPRFdPUkQocXdUU0ZPZmZzZXQpID4gVFJJVklBTF9TWU5DX0RJRkZFUkVOQ0UgKSkgewotICAgICAgICAgYlRTRkxhcmdlRGlmZiA9IFRSVUU7CisgICAgICAgICBiVFNGTGFyZ2VEaWZmID0gdHJ1ZTsKICAgICB9CiAKIAogICAgIC8vIGlmIGluZnJhIG1vZGUKLSAgICBpZiAoYklzQVBCZWFjb24gPT0gVFJVRSkgeworICAgIGlmIChiSXNBUEJlYWNvbiA9PSB0cnVlKSB7CiAKICAgICAgICAgLy8gSW5mcmEgbW9kZTogTG9jYWwgVFNGIGFsd2F5cyBmb2xsb3cgQVAncyBUU0YgaWYgRGlmZmVyZW5jZSBodWdlLgogICAgICAgICBpZiAoYlRTRkxhcmdlRGlmZikKLSAgICAgICAgICAgIGJVcGRhdGVUU0YgPSBUUlVFOworICAgICAgICAgICAgYlVwZGF0ZVRTRiA9IHRydWU7CiAKLSAgICAgICAgaWYgKChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlID09IFRSVUUpICYmKHNGcmFtZS5wVElNICE9IDApKSB7CisgICAgICAgIGlmICgocERldmljZS0+YkVuYWJsZVBTTW9kZSA9PSB0cnVlKSAmJihzRnJhbWUucFRJTSAhPSAwKSkgewogCiAgICAgICAgICAgICAvLyBkZWFsIHdpdGggRFRJTSwgYW5hbHlzaXMgVElNCi0gICAgICAgICAgICBwTWdtdC0+Yk11bHRpY2FzdFRJTSA9IFdMQU5fTUdNVF9JU19NVUxUSUNBU1RfVElNKHNGcmFtZS5wVElNLT5ieUJpdE1hcEN0bCkgPyBUUlVFIDogRkFMU0UgOworICAgICAgICAgICAgcE1nbXQtPmJNdWx0aWNhc3RUSU0gPSBXTEFOX01HTVRfSVNfTVVMVElDQVNUX1RJTShzRnJhbWUucFRJTS0+YnlCaXRNYXBDdGwpID8gdHJ1ZSA6IGZhbHNlIDsKICAgICAgICAgICAgIHBNZ210LT5ieURUSU1Db3VudCA9IHNGcmFtZS5wVElNLT5ieURUSU1Db3VudDsKICAgICAgICAgICAgIHBNZ210LT5ieURUSU1QZXJpb2QgPSBzRnJhbWUucFRJTS0+YnlEVElNUGVyaW9kOwogICAgICAgICAgICAgd0FJRE51bWJlciA9IHBNZ210LT53Q3VyckFJRCAmIH4oQklUMTR8QklUMTUpOwpAQCAtMjE5OSwxOSArMjIwMCwxOSBAQAogICAgICAgICAgICAgICAgIC8vIGxlbiA9IGJ5RFRJTUNvdW50ICsgYnlEVElNUGVyaW9kICsgYnlEVElNUGVyaW9kICsgYnlWaXJ0Qml0TWFwWzB+MjUwXQogICAgICAgICAgICAgICAgIGlmIChzRnJhbWUucFRJTS0+bGVuID49ICh1TG9jYXRlQnl0ZUluZGV4ICsgNCkpIHsKICAgICAgICAgICAgICAgICAgICAgYnlUSU1CaXRPbiAgPSAoMHgwMSkgPDwgKCh3QUlETnVtYmVyKSAlIDgpOwotICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNID0gc0ZyYW1lLnBUSU0tPmJ5VmlydEJpdE1hcFt1TG9jYXRlQnl0ZUluZGV4XSAmIGJ5VElNQml0T24gPyBUUlVFIDogRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU0gPSBzRnJhbWUucFRJTS0+YnlWaXJ0Qml0TWFwW3VMb2NhdGVCeXRlSW5kZXhdICYgYnlUSU1CaXRPbiA/IHRydWUgOiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU0gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTSA9IGZhbHNlOwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaWYgKHBNZ210LT5iSW5USU0gfHwKICAgICAgICAgICAgICAgICAocE1nbXQtPmJNdWx0aWNhc3RUSU0gJiYgKHBNZ210LT5ieURUSU1Db3VudCA9PSAwKSkpIHsKLSAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNV2FrZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcE1nbXQtPmJJblRJTVdha2UgPSB0cnVlOwogICAgICAgICAgICAgICAgIC8vIHNlbmQgb3V0IHBzLXBvbGwgcGFja2V0CiAvLyAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046SW4gVElNXG4iKTsKICAgICAgICAgICAgICAgICBpZiAocE1nbXQtPmJJblRJTSkgewpAQCAtMjIyMSwxNCArMjIyMiwxNCBAQAogCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwTWdtdC0+YkluVElNV2FrZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIHBNZ210LT5iSW5USU1XYWtlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQkNOOiBOb3QgSW4gVElNLi5cbiIpOwotICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUFdCaXRPbiA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5iUFdCaXRPbiA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCQ046IFNlbmQgTnVsbCBQYWNrZXRcbiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoUFNiU2VuZE51bGxQYWNrZXQocERldmljZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKFBTYkNvbnNpZGVyUG93ZXJEb3duKHBEZXZpY2UsIEZBTFNFLCBGQUxTRSkpIHsKKyAgICAgICAgICAgICAgICBpZihQU2JDb25zaWRlclBvd2VyRG93bihwRGV2aWNlLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQkNOOiBQb3dlciBkb3duIG5vdy4uLlxuIik7CiAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KQEAgLTIyNDYsNyArMjI0Nyw3IEBACiAgICAgICAgICAgICAvLyBhZGhvYyBtb2RlOlRTRiB1cGRhdGVkIG9ubHkgd2hlbiBiZWFjb24gbGFyZ2VyIHRoZW4gbG9jYWwgVFNGCiAgICAgICAgICAgICBpZiAoYlRTRkxhcmdlRGlmZiAmJiBiVFNGT2Zmc2V0UG9zdGl2ZSAmJgogICAgICAgICAgICAgICAgIChwTWdtdC0+ZUN1cnJTdGF0ZSA9PSBXTUFDX1NUQVRFX0pPSU5URUQpKQotICAgICAgICAgICAgICAgIGJVcGRhdGVUU0YgPSBUUlVFOworICAgICAgICAgICAgICAgIGJVcGRhdGVUU0YgPSB0cnVlOwogCiAgICAgICAgICAgICAvLyBEdXJpbmcgZHBjLCBhbHJlYWR5IGluIHNwaW5sb2NrZWQuCiAgICAgICAgICAgICBpZiAoQlNTREJiSXNTVEFJbk5vZGVEQihwTWdtdCwgc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMiwgJnVOb2RlSW5kZXgpKSB7CkBAIC0yMjU5LDcgKzIyNjAsNyBAQAogICAgICAgICAgICAgICAgIFJBVEV2UGFyc2VNYXhSYXRlKCAodm9pZCAqKXBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heEJhc2ljUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4U3VwcFJhdGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud1N1cHBSYXRlKSwKQEAgLTIyODAsNyArMjI4MSw3IEBACiAgICAgICAgICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoICh2b2lkICopcERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJTdXBwUmF0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53TWF4QmFzaWNSYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLndNYXhTdXBwUmF0ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS53U3VwcFJhdGUpLApAQCAtMjMwMCw3ICsyMzAxLDcgQEAKIC8qCiAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iU2hvcnRTbG90VGltZSA9IFdMQU5fR0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoKnNGcmFtZS5wd0NhcEluZm8pOwogICAgICAgICAgICAgICAgIGlmKHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0ud01heFN1cHBSYXRlID4gUkFURV8xMU0pCi0gICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0uYkVSUEV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVt1Tm9kZUluZGV4XS5iRVJQRXhpc3QgPSB0cnVlOwogKi8KICAgICAgICAgICAgIH0KIApAQCAtMjMwOCwxMSArMjMwOSwxMSBAQAogICAgICAgICAgICAgaWYgKHBNZ210LT5lQ3VyclN0YXRlID09IFdNQUNfU1RBVEVfU1RBUlRFRCkgewogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkN1cnJlbnQgSUJTUyBTdGF0ZTogW1N0YXJ0ZWRdLi4uLi4uLi50bzogW0pvaW50ZWRdIFxuIik7CiAgICAgICAgICAgICAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0pPSU5URUQ7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YkxpbmtQYXNzID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHBEZXZpY2UtPmRldikpewogICAgICAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVJbkFjdGl2ZUNvdW50ID0gMDsKIAogICAgICAgICAgICAgfTsKQEAgLTIzOTIsMTYgKzIzOTMsMTYgQEAKIHsKICAgICBQU0RldmljZSAgICAgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CiAgICAgUFNNZ210T2JqZWN0ICAgICAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwotICAgIFdPUkQgICAgICAgICAgICAgICAgd01heEJhc2ljUmF0ZTsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdNYXhTdXBwUmF0ZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5VG9wQ0NLQmFzaWNSYXRlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlUb3BPRkRNQmFzaWNSYXRlOworICAgIHVuc2lnbmVkIHNob3J0IHdNYXhCYXNpY1JhdGU7CisgICAgdW5zaWduZWQgc2hvcnQgd01heFN1cHBSYXRlOworICAgIHVuc2lnbmVkIGNoYXIgYnlUb3BDQ0tCYXNpY1JhdGU7CisgICAgdW5zaWduZWQgY2hhciBieVRvcE9GRE1CYXNpY1JhdGU7CiAgICAgUVdPUkQgICAgICAgICAgICAgICBxd0N1cnJUU0Y7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICBpaTsKLSAgICBCWVRFICAgIGFieVJBVEVbXSA9IHsweDgyLCAweDg0LCAweDhCLCAweDk2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDLCAweDBDLCAweDEyLCAweDE4LCAweDYwfTsKLSAgICBCWVRFICAgIGFieUNDS19SQVRFW10gPSB7MHg4MiwgMHg4NCwgMHg4QiwgMHg5Nn07Ci0gICAgQllURSAgICBhYnlPRkRNX1JBVEVbXSA9IHsweDBDLCAweDEyLCAweDE4LCAweDI0LCAweDMwLCAweDQ4LCAweDYwLCAweDZDfTsKLSAgICBXT1JEICAgICAgICAgICAgICAgIHdTdXBwUmF0ZTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CisgICAgdW5zaWduZWQgY2hhciBhYnlSQVRFW10gPSB7MHg4MiwgMHg4NCwgMHg4QiwgMHg5NiwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2QywgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CisgICAgdW5zaWduZWQgY2hhciBhYnlDQ0tfUkFURVtdID0gezB4ODIsIDB4ODQsIDB4OEIsIDB4OTZ9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5T0ZETV9SQVRFW10gPSB7MHgwQywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2Q307CisgICAgdW5zaWduZWQgc2hvcnQgd1N1cHBSYXRlOwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiQ3JlYXRlIEJhc2ljIFNlcnZpY2UgU2V0IC4uLi4uLi5cbiIpOwogCkBAIC0yNDg2LDcgKzI0ODcsNyBAQAogICAgIC8vIHNldCBiYXNpYyByYXRlCiAKICAgICBSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAotICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyRXh0U3VwcFJhdGVzLCB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICZ3TWF4QmFzaWNSYXRlLCAmd01heFN1cHBSYXRlLCAmd1N1cHBSYXRlLAogICAgICAgICAgICAgICAgICAgICAgICZieVRvcENDS0Jhc2ljUmF0ZSwgJmJ5VG9wT0ZETUJhc2ljUmF0ZSk7CiAKQEAgLTI1MzMsMTIgKzI1MzQsMTIgQEAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfSUJTU19TVEEpIHsKIAogICAgICAgICAvLyBCU1NJRCBzZWxlY3RlZCBtdXN0IGJlIHJhbmRvbWl6ZWQgYXMgc3BlYyAxMS4xLjMKLSAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs1XSA9IChCWVRFKSAoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDAwMGZmKTsKLSAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs0XSA9IChCWVRFKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDBmZjAwKSA+PiA4KTsKLSAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFszXSA9IChCWVRFKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0gICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMl0gPSAoQllURSkoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwMDAwMGZmMCkgPj4gNCk7Ci0gICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMV0gPSAoQllURSkoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwMDBmZjAwMCkgPj4gMTIpOwotICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzBdID0gKEJZVEUpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MGZmMDAwMDApID4+IDIwKTsKKyAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs1XSA9ICh1bnNpZ25lZCBjaGFyKSAoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDAwMGZmKTsKKyAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwMDBmZjAwKSA+PiA4KTsKKyAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFszXSA9ICh1bnNpZ25lZCBjaGFyKSgoTE9EV09SRChxd0N1cnJUU0YpJiAweDAwZmYwMDAwKSA+PiAxNik7CisgICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMl0gPSAodW5zaWduZWQgY2hhcikoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwMDAwMGZmMCkgPj4gNCk7CisgICAgICAgIHBNZ210LT5hYnlDdXJyQlNTSURbMV0gPSAodW5zaWduZWQgY2hhcikoKExPRFdPUkQocXdDdXJyVFNGKSYgMHgwMDBmZjAwMCkgPj4gMTIpOworICAgICAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEWzBdID0gKHVuc2lnbmVkIGNoYXIpKChMT0RXT1JEKHF3Q3VyclRTRikmIDB4MGZmMDAwMDApID4+IDIwKTsKICAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs1XSBePSBwTWdtdC0+YWJ5TUFDQWRkclswXTsKICAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFs0XSBePSBwTWdtdC0+YWJ5TUFDQWRkclsxXTsKICAgICAgICAgcE1nbXQtPmFieUN1cnJCU1NJRFszXSBePSBwTWdtdC0+YWJ5TUFDQWRkclsyXTsKQEAgLTI2MTEsNyArMjYxMiw3IEBACiAKICAgICBDQVJEYlNldEJlYWNvblBlcmlvZChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT53SUJTU0JlYWNvblBlcmlvZCk7CiAgICAgLy8gc2V0IGNoYW5uZWwgYW5kIGNsZWFyIE5BVgotICAgIENBUkRiU2V0Q2hhbm5lbChwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT51SUJTU0NoYW5uZWwpOworICAgIHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPnVJQlNTQ2hhbm5lbCk7CiAgICAgcE1nbXQtPnVDdXJyQ2hhbm5lbCA9IHBNZ210LT51SUJTU0NoYW5uZWw7CiAKICAgICBpZiAoQ0FSRGJJc1Nob3J0UHJlYW1ibGUocE1nbXQtPnBBZGFwdGVyKSkgewpAQCAtMjYyMCw3ICsyNjIxLDcgQEAKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyAmPSAofldMQU5fU0VUX0NBUF9JTkZPX1NIT1JUUFJFQU1CTEUoMSkpOwogICAgIH0KIAotICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkgJiYKKyAgICBpZiAoKHBNZ210LT5iMTFoRW5hYmxlID09IHRydWUpICYmCiAgICAgICAgIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExQSkpIHsKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19TUEVDVFJVTU1ORygxKTsKICAgICB9IGVsc2UgewpAQCAtMjY2MSwyMCArMjY2MiwyMCBAQAogICAgIFBTRGV2aWNlICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBLbm93bkJTUyAgICAgICBwQ3VyciA9IE5VTEw7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpLCB1dTsKKyAgICB1bnNpZ25lZCBpbnQgaWksIHV1OwogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEl0ZW1SYXRlcyA9IE5VTEw7CiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwSXRlbUV4dFJhdGVzID0gTlVMTDsKICAgICBQV0xBTl9JRV9TU0lEICAgcEl0ZW1TU0lEOwotICAgIFVJTlQgICAgICAgICAgICB1UmF0ZUxlbiA9IFdMQU5fUkFURVNfTUFYTEVOOwotICAgIFdPUkQgICAgICAgICAgICB3TWF4QmFzaWNSYXRlID0gUkFURV8xTTsKLSAgICBXT1JEICAgICAgICAgICAgd01heFN1cHBSYXRlID0gUkFURV8xTTsKLSAgICBXT1JEICAgICAgICAgICAgd1N1cHBSYXRlOwotICAgIEJZVEUgICAgICAgICAgICBieVRvcENDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07Ci0gICAgQllURSAgICAgICAgICAgIGJ5VG9wT0ZETUJhc2ljUmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgaW50IHVSYXRlTGVuID0gV0xBTl9SQVRFU19NQVhMRU47CisgICAgdW5zaWduZWQgc2hvcnQgd01heEJhc2ljUmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgc2hvcnQgd01heFN1cHBSYXRlID0gUkFURV8xTTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3U3VwcFJhdGU7CisgICAgdW5zaWduZWQgY2hhciBieVRvcENDS0Jhc2ljUmF0ZSA9IFJBVEVfMU07CisgICAgdW5zaWduZWQgY2hhciBieVRvcE9GRE1CYXNpY1JhdGUgPSBSQVRFXzFNOwogCiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewotICAgICAgICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlID09IFRSVUUpCisgICAgICAgIGlmIChwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgPT0gdHJ1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjcwOCwxNCArMjcwOSwxNCBAQAogICAgIC8vIHBhdGNoIGZvciBDSVNDTyBtaWdyYXRpb24gbW9kZQogLyoKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX1RLSVAsIHBDdXJyKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChXUEFfU2VhcmNoUlNOKDAsIFdQQV9US0lQLCBwQ3VycikgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJObyBtYXRjaCBSU04gaW5mby4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrXG4iKTsKICAgICAgICAgICAgICAgICAgICAgLy8gZW5jcnlwdGlvbiBtb2RlIGVycm9yCiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX0FFU0NDTVAsIHBDdXJyKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChXUEFfU2VhcmNoUlNOKDAsIFdQQV9BRVNDQ01QLCBwQ3VycikgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJObyBtYXRjaCBSU04gaW5mby4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrXG4iKTsKICAgICAgICAgICAgICAgICAgICAgLy8gZW5jcnlwdGlvbiBtb2RlIGVycm9yCiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwpAQCAtMjcyNiw3ICsyNzI3LDcgQEAKICAgICAgICAgfQogCiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotCS8vaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQorCS8vaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSB0cnVlKQogICAgICAgICAgICAgRW5jeXB0aW9uX1JlYnVpbGQocERldmljZSwgcEN1cnIpOwogI2VuZGlmCiAgICAgICAgIC8vIEluZnJhc3RydWN0dXJlIEJTUwpAQCAtMjc2NCwxNSArMjc2NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1UmF0ZUxlbik7CiAgICAgICAgICAgICAvLyBTdHVmZmluZyBSYXRlIElFCiAgICAgICAgICAgICBpZiAoKHBJdGVtRXh0UmF0ZXMtPmxlbiA+IDApICYmIChwSXRlbVJhdGVzLT5sZW4gPCA4KSkgewotICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IChVSU5UKSg4IC0gcEl0ZW1SYXRlcy0+bGVuKTsgKSB7CisgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgKHVuc2lnbmVkIGludCkoOCAtIHBJdGVtUmF0ZXMtPmxlbik7ICkgewogICAgICAgICAgICAgICAgICAgICBwSXRlbVJhdGVzLT5hYnlSYXRlc1twSXRlbVJhdGVzLT5sZW4gKyBpaV0gPSBwSXRlbUV4dFJhdGVzLT5hYnlSYXRlc1tpaV07CiAgICAgICAgICAgICAgICAgICAgIGlpICsrOwogICAgICAgICAgICAgICAgICAgICBpZiAocEl0ZW1FeHRSYXRlcy0+bGVuIDw9IGlpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBJdGVtUmF0ZXMtPmxlbiArPSAoQllURSlpaTsKKyAgICAgICAgICAgICAgICBwSXRlbVJhdGVzLT5sZW4gKz0gKHVuc2lnbmVkIGNoYXIpaWk7CiAgICAgICAgICAgICAgICAgaWYgKHBJdGVtRXh0UmF0ZXMtPmxlbiAtIGlpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBwSXRlbUV4dFJhdGVzLT5sZW4gLT0gKEJZVEUpaWk7CisgICAgICAgICAgICAgICAgICAgIHBJdGVtRXh0UmF0ZXMtPmxlbiAtPSAodW5zaWduZWQgY2hhcilpaTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1dSA9IDA7IHV1IDwgcEl0ZW1FeHRSYXRlcy0+bGVuOyB1dSArKykgewogICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbdXVdID0gcEl0ZW1FeHRSYXRlcy0+YWJ5UmF0ZXNbdXUgKyBpaV07CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3ODEsNyArMjc4Miw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsIHBJdGVtUmF0ZXMsIHBJdGVtRXh0UmF0ZXMsIFRSVUUsCisgICAgICAgICAgICBSQVRFdlBhcnNlTWF4UmF0ZSgodm9pZCAqKXBEZXZpY2UsIHBJdGVtUmF0ZXMsIHBJdGVtRXh0UmF0ZXMsIHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd01heEJhc2ljUmF0ZSwgJndNYXhTdXBwUmF0ZSwgJndTdXBwUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieVRvcENDS0Jhc2ljUmF0ZSwgJmJ5VG9wT0ZETUJhc2ljUmF0ZSk7CiAKQEAgLTI4MDIsOSArMjgwMyw5IEBACiAgICAgICAgICAgICAvLyBBZGQgY3VycmVudCBCU1MgdG8gQ2FuZGlkYXRlIGxpc3QKICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgd29ya3MgZm9yIFdQQTIgQlNTLCBhbmQgV1BBMiBCU1MgY2hlY2sgbXVzdCBiZSBkb25lIGJlZm9yZS4KICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHsKLSAgICAgICAgICAgICAgICBCT09MIGJSZXN1bHQgPSBiQWRkX1BNS0lEX0NhbmRpZGF0ZSgodm9pZCAqKXBEZXZpY2UsIHBNZ210LT5hYnlDdXJyQlNTSUQsICZwQ3Vyci0+c1JTTkNhcE9iaik7CisgICAgICAgICAgICAgICAgYm9vbCBiUmVzdWx0ID0gYkFkZF9QTUtJRF9DYW5kaWRhdGUoKHZvaWQgKilwRGV2aWNlLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCAmcEN1cnItPnNSU05DYXBPYmopOwogICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iYkFkZF9QTUtJRF9DYW5kaWRhdGU6IDEoJWQpXG4iLCBiUmVzdWx0KTsKLSAgICAgICAgICAgICAgICBpZiAoYlJlc3VsdCA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChiUmVzdWx0ID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHZGbHVzaF9QTUtJRF9DYW5kaWRhdGUoKHZvaWQgKilwRGV2aWNlKTsKICAgICAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ2Rmx1c2hfUE1LSURfQ2FuZGlkYXRlOiA0XG4iKTsKICAgICAgICAgICAgICAgICAgICAgYkFkZF9QTUtJRF9DYW5kaWRhdGUoKHZvaWQgKilwRGV2aWNlLCBwTWdtdC0+YWJ5Q3VyckJTU0lELCAmcEN1cnItPnNSU05DYXBPYmopOwpAQCAtMjgzMSwxMyArMjgzMiwxMyBAQAogICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFOT05FKSB7CiAKICAgICAgICAgICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX1RLSVAsIHBDdXJyKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChXUEFfU2VhcmNoUlNOKDAsIFdQQV9US0lQLCBwQ3VycikgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZW5jcnlwdGlvbiBtb2RlIGVycm9yCiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFdQQV9TZWFyY2hSU04oMCwgV1BBX0FFU0NDTVAsIHBDdXJyKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgIGlmIChXUEFfU2VhcmNoUlNOKDAsIFdQQV9BRVNDQ01QLCBwQ3VycikgPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZW5jcnlwdGlvbiBtb2RlIGVycm9yCiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9JRExFOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yODY4LDcgKzI4NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdMQU5fUkFURVNfTUFYTEVOXzExQik7CiAgICAgICAgICAgICAvLyBzZXQgYmFzaWMgcmF0ZQogICAgICAgICAgICAgUkFURXZQYXJzZU1heFJhdGUoKHZvaWQgKilwRGV2aWNlLCAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFRSVUUsICZ3TWF4QmFzaWNSYXRlLCAmd01heFN1cHBSYXRlLCAmd1N1cHBSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgdHJ1ZSwgJndNYXhCYXNpY1JhdGUsICZ3TWF4U3VwcFJhdGUsICZ3U3VwcFJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnlUb3BDQ0tCYXNpY1JhdGUsICZieVRvcE9GRE1CYXNpY1JhdGUpOwogCiAgICAgICAgICAgICBwTWdtdC0+d0N1cnJDYXBJbmZvID0gcEN1cnItPndDYXBJbmZvOwpAQCAtMjg4Myw3ICsyODg0LDcgQEAKICAgICAgICAgICAgIHBNZ210LT5lQ3VyclN0YXRlID0gV01BQ19TVEFURV9TVEFSVEVEOwogICAgICAgICAgICAgLy8gQWRvcHQgQlNTIHN0YXRlIGluIEFkYXB0ZXIgRGV2aWNlIE9iamVjdAogICAgICAgICAgICAgLy9wRGV2aWNlLT5ieU9wTW9kZSA9IE9QX01PREVfQURIT0M7Ci0vLyAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IFRSVUU7CisvLyAgICAgICAgICAgIHBEZXZpY2UtPmJMaW5rUGFzcyA9IHRydWU7CiAvLyAgICAgICAgICAgIG1lbWNweShwRGV2aWNlLT5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lELCBXTEFOX0JTU0lEX0xFTik7CiAKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iSm9pbiBJQlNTIG9rOiUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4IFxuIiwKQEAgLTI5MjMsNyArMjkyNCw3IEBACiB2b2lkCiBzX3ZNZ3JTeW5jaEJTUyAoCiAgICAgUFNEZXZpY2UgICAgICBwRGV2aWNlLAotICAgIFVJTlQgICAgICAgICAgdUJTU01vZGUsCisgICAgdW5zaWduZWQgaW50IHVCU1NNb2RlLAogICAgIFBLbm93bkJTUyAgICAgcEN1cnIsCiAgICAgUENNRF9TVEFUVVMgIHBTdGF0dXMKICAgICApCkBAIC0yOTMyLDExICsyOTMzLDExIEBACiAgICAgUFNNZ210T2JqZWN0ICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogLy8gICAgaW50ICAgICBpaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8xTSwgICAyTSwgICA1TSwgICAxMU0sICAxOE0sICAyNE0sICAzNk0sICA1NE0KLSAgICBCWVRFIGFieUN1cnJTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2Q307Ci0gICAgQllURSBhYnlDdXJyRXh0U3VwcFJhdGVzR1tdID0ge1dMQU5fRUlEX0VYVFNVUFBfUkFURVMsIDQsIDB4MEMsIDB4MTIsIDB4MTgsIDB4NjB9OworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc0dbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA4LCAweDAyLCAweDA0LCAweDBCLCAweDE2LCAweDI0LCAweDMwLCAweDQ4LCAweDZDfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJFeHRTdXBwUmF0ZXNHW10gPSB7V0xBTl9FSURfRVhUU1VQUF9SQVRFUywgNCwgMHgwQywgMHgxMiwgMHgxOCwgMHg2MH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vNk0sICAgOU0sICAgMTJNLCAgNDhNCi0gICAgQllURSBhYnlDdXJyU3VwcFJhdGVzQVtdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDgsIDB4MEMsIDB4MTIsIDB4MTgsIDB4MjQsIDB4MzAsIDB4NDgsIDB4NjAsIDB4NkN9OwotICAgIEJZVEUgYWJ5Q3VyclN1cHBSYXRlc0JbXSA9IHtXTEFOX0VJRF9TVVBQX1JBVEVTLCA0LCAweDAyLCAweDA0LCAweDBCLCAweDE2fTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTdXBwUmF0ZXNBW10gPSB7V0xBTl9FSURfU1VQUF9SQVRFUywgOCwgMHgwQywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2Q307CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyU3VwcFJhdGVzQltdID0ge1dMQU5fRUlEX1NVUFBfUkFURVMsIDQsIDB4MDIsIDB4MDQsIDB4MEIsIDB4MTZ9OwogCiAKICAgICAqcFN0YXR1cyA9IENNRF9TVEFUVVNfRkFJTFVSRTsKQEAgLTI5NDQsNyArMjk0NSw3IEBACiAgICAgaWYgKHNfYkNpcGhlck1hdGNoKHBDdXJyLAogICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgJihwTWdtdC0+YnlDU1NQSyksCi0gICAgICAgICAgICAgICAgICAgICAgICYocE1nbXQtPmJ5Q1NTR0spKSA9PSBGQUxTRSkgeworICAgICAgICAgICAgICAgICAgICAgICAmKHBNZ210LT5ieUNTU0dLKSkgPT0gZmFsc2UpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAic19iQ2lwaGVyTWF0Y2ggRmFpbCAuLi4uLi4uXG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI5NTgsMTIgKzI5NTksMTIgQEAKICAgICB9CiAKICAgICAvLyBJbml0IHRoZSBCU1MgaW5mb3JtYXRpb25zCi0gICAgcERldmljZS0+YkNDSyA9IFRSVUU7Ci0gICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gRkFMU0U7CisgICAgcERldmljZS0+YkNDSyA9IHRydWU7CisgICAgcERldmljZS0+YlByb3RlY3RNb2RlID0gZmFsc2U7CiAgICAgTUFDdkRpc2FibGVQcm90ZWN0TUQocERldmljZS0+UG9ydE9mZnNldCk7Ci0gICAgcERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9IGZhbHNlOwogICAgIE1BQ3ZEaXNhYmxlQmFya2VyUHJlYW1ibGVNZChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKLSAgICBwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID0gZmFsc2U7CiAgICAgcERldmljZS0+YnlQcmVhbWJsZVR5cGUgPSAwOwogICAgIHBEZXZpY2UtPndCYXNpY1JhdGUgPSAwOwogICAgIC8vIFNldCBCYXNpYyBSYXRlCkBAIC0zMDQ2LDEyICszMDQ3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDdXJyLT5zRVJQLmJ5RVJQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApICE9IFRSVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApICE9IHRydWUpIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiPC0tLS1zX2JTeW5jaEJTUyBTZXQgUGh5IE1vZGUgRmFpbCBbJWRdXG4iLCBlUGh5VHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gc2V0IGNoYW5uZWwgYW5kIGNsZWFyIE5BVgotICAgIGlmIChDQVJEYlNldENoYW5uZWwocE1nbXQtPnBBZGFwdGVyLCBwQ3Vyci0+dUNoYW5uZWwpID09IEZBTFNFKSB7CisgICAgaWYgKHNldF9jaGFubmVsKHBNZ210LT5wQWRhcHRlciwgcEN1cnItPnVDaGFubmVsKSA9PSBmYWxzZSkgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICI8LS0tLXNfYlN5bmNoQlNTIFNldCBDaGFubmVsIFslZF1cbiIsIHBDdXJyLT51Q2hhbm5lbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDc3LDcgKzMwNzgsNyBAQAogICAgIHBNZ210LT51Q3VyckNoYW5uZWwgPSBwQ3Vyci0+dUNoYW5uZWw7CiAgICAgcE1nbXQtPmVDdXJyZW50UEhZTW9kZSA9IGVQaHlUeXBlOwogICAgIHBNZ210LT5ieUVSUENvbnRleHQgPSBwQ3Vyci0+c0VSUC5ieUVSUDsKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJTeW5jOlNldCB0byBjaGFubmVsID0gWyVkXVxuIiwgKElOVClwQ3Vyci0+dUNoYW5uZWwpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlN5bmM6U2V0IHRvIGNoYW5uZWwgPSBbJWRdXG4iLCAoaW50KXBDdXJyLT51Q2hhbm5lbCk7CiAKIAogICAgICpwU3RhdHVzID0gQ01EX1NUQVRVU19TVUNDRVNTOwpAQCAtMzA5NCwxOCArMzA5NSwxOCBAQAogICkKICB7CiAgIFBTTWdtdE9iamVjdCAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKLSAvLyBVSU5UICAgICAgICAgICAgaWkgLCB1U2FtZUJzc2lkTnVtPTA7CisgLy8gdW5zaWduZWQgaW50IGlpICwgdVNhbWVCc3NpZE51bT0wOwogCiAgICAgICAgIC8vICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICAgIC8vICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgLy8gICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwQ3Vyci0+YWJ5QlNTSUQpKSB7CisgICAgICAgICAgICAvLyAgICAgICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lEKSkgewogICAgICAgICAgICAgIC8vICAgICAgIHVTYW1lQnNzaWROdW0rKzsKICAgICAgICAgICAgICAgIC8vICAgfQogICAgICAgICAgICAvLyB9CiAgIC8vICAgaWYoIHVTYW1lQnNzaWROdW0+PTIpIHsJIC8vd2Ugb25seSBjaGVjayBBUCBpbiBoaWRkZW4gc3NzaWQgIG1vZGUKICAgICAgICAgaWYgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQVBTSykgfHwgICAgICAgICAgIC8vbmV0d29ya21hbmFnZXIgMC43LjAgZG9lcyBub3QgZ2l2ZSB0aGUgcGFpcndpc2Uta2V5IHNlbHNlY3Rpb24sCiAgICAgICAgICAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykpIHsgICAgICAgICAvLyBzbyB3ZSBuZWVkIHJlLXNlbHNlY3QgaXQgYWNjb3JkaW5nIHRvIHJlYWwgcGFpcndpc2Uta2V5IGluZm8uCi0gICAgICAgICAgICAgICBpZihwQ3Vyci0+YldQQVZhbGlkID09IFRSVUUpICB7ICAgLy9XUEEtUFNLCisgICAgICAgICAgICAgICBpZihwQ3Vyci0+YldQQVZhbGlkID09IHRydWUpICB7ICAgLy9XUEEtUFNLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEFQU0s7CiAJCSAgICBpZihwQ3Vyci0+YWJ5UEtUeXBlWzBdID09IFdQQV9US0lQKSB7CiAgICAgIAkJICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7ICAgIC8vVEtJUApAQCAtMzExNiw3ICszMTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRfSygiRW5jeXB0aW9uX1JlYnVpbGQtLS0+c3NpZCByZXNldCBjb25maWcgdG8gW1dQQVBTSy1BRVNdXG4iKTsKICAgICAgCQkgICAgIH0KICAgICAgICAgICAgICAgIAl9Ci0gICAgICAgICAgICAgICBlbHNlIGlmKHBDdXJyLT5iV1BBMlZhbGlkID09IFRSVUUpIHsgIC8vV1BBMi1QU0sKKyAgICAgICAgICAgICAgIGVsc2UgaWYocEN1cnItPmJXUEEyVmFsaWQgPT0gdHJ1ZSkgeyAgLy9XUEEyLVBTSwogICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5lQXV0aGVuTW9kZSA9IFdNQUNfQVVUSF9XUEEyUFNLOwogCQkgICAgICAgaWYocEN1cnItPmFieUNTU1BLWzBdID09IFdMQU5fMTFpX0NTU19US0lQKSB7CiAgICAgICAJCSAgICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOyAgICAgLy9US0lQCkBAIC0zMTUxLDEzICszMTUyLDEzIEBACiAgICAgUFdMQU5fSUVfVElNIHBUSU0KICAgICApCiB7Ci0gICAgQllURSAgICAgICAgYnlNYXNrWzhdID0gezEsIDIsIDQsIDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODB9OwotICAgIEJZVEUgICAgICAgIGJ5TWFwOwotICAgIFVJTlQgICAgICAgIGlpLCBqajsKLSAgICBCT09MICAgICAgICBiU3RhcnRGb3VuZCA9IEZBTFNFOwotICAgIEJPT0wgICAgICAgIGJNdWx0aWNhc3QgPSBGQUxTRTsKLSAgICBXT1JEICAgICAgICB3U3RhcnRJbmRleCA9IDA7Ci0gICAgV09SRCAgICAgICAgd0VuZEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWFza1s4XSA9IHsxLCAyLCA0LCA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWFwOworICAgIHVuc2lnbmVkIGludCBpaSwgamo7CisgICAgYm9vbCBiU3RhcnRGb3VuZCA9IGZhbHNlOworICAgIGJvb2wgYk11bHRpY2FzdCA9IGZhbHNlOworICAgIHVuc2lnbmVkIHNob3J0IHdTdGFydEluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3RW5kSW5kZXggPSAwOwogCiAKICAgICAvLyBGaW5kIHNpemUgb2YgcGFydGlhbCB2aXJ0dWFsIGJpdG1hcApAQCAtMzE2NywxMyArMzE2OCwxMyBAQAogICAgICAgICAgICAgLy8gTWFzayBvdXQgdGhlIGJyb2FkY2FzdCBiaXQgd2hpY2ggaXMgaW5kaWNhdGVkIHNlcGFyYXRlbHkuCiAgICAgICAgICAgICBiTXVsdGljYXN0ID0gKGJ5TWFwICYgYnlNYXNrWzBdKSAhPSAwOwogICAgICAgICAgICAgaWYoYk11bHRpY2FzdCkgewotICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUnhQU1BvbGwgPSBUUlVFOworICAgICAgICAgICAgICAgcE1nbXQtPnNOb2RlREJUYWJsZVswXS5iUnhQU1BvbGwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnlNYXAgPSAwOwogICAgICAgICB9CiAgICAgICAgIGlmIChieU1hcCkgewogICAgICAgICAgICAgaWYgKCFiU3RhcnRGb3VuZCkgewotICAgICAgICAgICAgICAgIGJTdGFydEZvdW5kID0gVFJVRTsKKyAgICAgICAgICAgICAgICBiU3RhcnRGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgd1N0YXJ0SW5kZXggPSBpaTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdFbmRJbmRleCA9IGlpOwpAQCAtMzIyNCwzMCArMzIyNSwzMCBAQAogc19NZ3JNYWtlQmVhY29uKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0N1cnJCZWFjb25QZXJpb2QsCi0gICAgVUlOVCB1Q3VyckNoYW5uZWwsCi0gICAgV09SRCB3Q3VyckFUSU1XaW5vZHcsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQmVhY29uUGVyaW9kLAorICAgIHVuc2lnbmVkIGludCB1Q3VyckNoYW5uZWwsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJBVElNV2lub2R3LAogICAgIFBXTEFOX0lFX1NTSUQgcEN1cnJTU0lELAotICAgIFBCWVRFIHBDdXJyQlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqcEN1cnJCU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKICAgICApCiB7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQgPSBOVUxMOwogICAgIFdMQU5fRlJfQkVBQ09OICAgICAgc0ZyYW1lOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYWJ5QnJvYWRjYXN0QWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwotICAgIFBCWVRFICAgICAgICAgICAgICAgcGJ5QnVmZmVyOwotICAgIFVJTlQgICAgICAgICAgICAgICAgdUxlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBhYnlCcm9hZGNhc3RBZGRyW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisgICAgdW5zaWduZWQgY2hhciAqcGJ5QnVmZmVyOworICAgIHVuc2lnbmVkIGludCB1TGVuZ3RoID0gMDsKICAgICBQV0xBTl9JRV9JQlNTX0RGUyAgIHBJQlNTREZTID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGlpOworICAgIHVuc2lnbmVkIGludCBpaTsKIAogICAgIC8vIHByZXBhcmUgYmVhY29uIGZyYW1lCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0JFQUNPTl9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAgICAgLy8gU2V0dXAgdGhlIHNGcmFtZSBzdHJ1Y3R1cmUuCi0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHNGcmFtZS5sZW4gPSBXTEFOX0JFQUNPTl9GUl9NQVhMRU47CiAgICAgdk1nckVuY29kZUJlYWNvbigmc0ZyYW1lKTsKICAgICAvLyBTZXR1cCB0aGUgaGVhZGVyCkBAIC0zMjU4LDcgKzMyNTksNyBAQAogICAgICAgICApKTsKIAogICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlUFNNb2RlKSB7Ci0gICAgICAgIHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KChXT1JEKVdMQU5fU0VUX0ZDX1BXUk1HVCgxKSk7CisgICAgICAgIHNGcmFtZS5wSGRyLT5zQTMud0ZyYW1lQ3RsIHw9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydClXTEFOX1NFVF9GQ19QV1JNR1QoMSkpOwogICAgIH0KIAogICAgIG1lbWNweSggc0ZyYW1lLnBIZHItPnNBMy5hYnlBZGRyMSwgYWJ5QnJvYWRjYXN0QWRkciwgV0xBTl9BRERSX0xFTik7CkBAIC0zMjg2LDcgKzMyODcsNyBAQAogICAgICAgICBzRnJhbWUubGVuICs9ICgxKSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICBzRnJhbWUucERTUGFybXMtPmJ5RWxlbWVudElEID0gV0xBTl9FSURfRFNfUEFSTVM7CiAgICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+bGVuID0gMTsKLSAgICAgICAgc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsID0gKEJZVEUpdUN1cnJDaGFubmVsOworICAgICAgICBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWwgPSAodW5zaWduZWQgY2hhcil1Q3VyckNoYW5uZWw7CiAgICAgfQogICAgIC8vIFRJTSBmaWVsZAogICAgIGlmIChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApIHsKQEAgLTMzMjksMjIgKzMzMzAsMjIgQEAKICAgICAgICAgICAgIC8vIFBhaXJ3aXNlIEtleSBDaXBoZXIgU3VpdGUKICAgICAgICAgICAgIHNGcmFtZS5wUlNOV1BBLT53UEtDb3VudCA9IDA7CiAgICAgICAgICAgICAvLyBBdXRoIEtleSBNYW5hZ2VtZW50IFN1aXRlCi0gICAgICAgICAgICAqKChQV09SRCkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuICsgc0ZyYW1lLnBSU05XUEEtPmxlbikpPTA7CisgICAgICAgICAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyBzRnJhbWUucFJTTldQQS0+bGVuKSk9MDsKICAgICAgICAgICAgIHNGcmFtZS5wUlNOV1BBLT5sZW4gKz0yOwogCiAgICAgICAgICAgICAvLyBSU04gQ2FwYWJpbGl0ZXMKLSAgICAgICAgICAgICooKFBXT1JEKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyBzRnJhbWUucFJTTldQQS0+bGVuKSk9MDsKKyAgICAgICAgICAgICooKHVuc2lnbmVkIHNob3J0ICopKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbiArIHNGcmFtZS5wUlNOV1BBLT5sZW4pKT0wOwogICAgICAgICAgICAgc0ZyYW1lLnBSU05XUEEtPmxlbiArPTI7CiAgICAgICAgICAgICBzRnJhbWUubGVuICs9IHNGcmFtZS5wUlNOV1BBLT5sZW4gKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gVFJVRSkgJiYKKyAgICBpZiAoKHBNZ210LT5iMTFoRW5hYmxlID09IHRydWUpICYmCiAgICAgICAgIChwTWdtdC0+ZUN1cnJlbnRQSFlNb2RlID09IFBIWV9UWVBFXzExQSkpIHsKICAgICAgICAgLy8gQ291bnRyeSBJRQotICAgICAgICBwYnlCdWZmZXIgPSAoUEJZVEUpKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7Ci0gICAgICAgIENBUkR2U2V0Q291bnRyeUlFKHBNZ210LT5wQWRhcHRlciwgcGJ5QnVmZmVyKTsKLSAgICAgICAgQ0FSRHZTZXRDb3VudHJ5SW5mbyhwTWdtdC0+cEFkYXB0ZXIsIFBIWV9UWVBFXzExQSwgcGJ5QnVmZmVyKTsKKyAgICAgICAgcGJ5QnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKKyAgICAgICAgc2V0X2NvdW50cnlfSUUocE1nbXQtPnBBZGFwdGVyLCBwYnlCdWZmZXIpOworICAgICAgICBzZXRfY291bnRyeV9pbmZvKHBNZ210LT5wQWRhcHRlciwgUEhZX1RZUEVfMTFBLCBwYnlCdWZmZXIpOwogICAgICAgICB1TGVuZ3RoICs9ICgoUFdMQU5fSUVfQ09VTlRSWSkgcGJ5QnVmZmVyKS0+bGVuICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgIHBieUJ1ZmZlciArPSAoKChQV0xBTl9JRV9DT1VOVFJZKSBwYnlCdWZmZXIpLT5sZW4gKyBXTEFOX0lFSERSX0xFTik7CiAgICAgICAgIC8vIFBvd2VyIENvbnN0cmFpbiBJRQpAQCAtMzM1MywxMiArMzM1NCwxMiBAQAogICAgICAgICAoKFBXTEFOX0lFX1BXX0NPTlNUKSBwYnlCdWZmZXIpLT5ieVBvd2VyID0gMDsKICAgICAgICAgcGJ5QnVmZmVyICs9ICgxKSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICB1TGVuZ3RoICs9ICgxKSArIFdMQU5fSUVIRFJfTEVOOwotICAgICAgICBpZiAocE1nbXQtPmJTd2l0Y2hDaGFubmVsID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBNZ210LT5iU3dpdGNoQ2hhbm5lbCA9PSB0cnVlKSB7CiAgICAgICAgICAgICAvLyBDaGFubmVsIFN3aXRjaCBJRQogICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9DSF9TV0lUQ0g7CiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5sZW4gPSAzOwogICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlNb2RlID0gMTsKLSAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmJ5Q2hhbm5lbCA9IENBUkRieUdldENoYW5uZWxOdW1iZXIocE1nbXQtPnBBZGFwdGVyLCBwTWdtdC0+YnlOZXdDaGFubmVsKTsKKyAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmJ5Q2hhbm5lbCA9IGdldF9jaGFubmVsX251bWJlcihwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5ieU5ld0NoYW5uZWwpOwogICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlDb3VudCA9IDA7CiAgICAgICAgICAgICBwYnlCdWZmZXIgKz0gKDMpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgICAgICB1TGVuZ3RoICs9ICgzKSArIFdMQU5fSUVIRFJfTEVOOwpAQCAtMzM4Miw3ICszMzgzLDcgQEAKICAgICAgICAgICAgIHBieUJ1ZmZlciArPSAoNykgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgICAgIHVMZW5ndGggKz0gKDcpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgICAgICBmb3IoaWk9Q0JfTUFYX0NIQU5ORUxfMjRHKzE7IGlpPD1DQl9NQVhfQ0hBTk5FTDsgaWkrKyApIHsKLSAgICAgICAgICAgICAgICBpZiAoQ0FSRGJHZXRDaGFubmVsTWFwSW5mbyhwTWdtdC0+cEFkYXB0ZXIsIGlpLCBwYnlCdWZmZXIsIHBieUJ1ZmZlcisxKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgaWYgKGdldF9jaGFubmVsX21hcF9pbmZvKHBNZ210LT5wQWRhcHRlciwgaWksIHBieUJ1ZmZlciwgcGJ5QnVmZmVyKzEpID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgcGJ5QnVmZmVyICs9IDI7CiAgICAgICAgICAgICAgICAgICAgIHVMZW5ndGggKz0gMjsKICAgICAgICAgICAgICAgICAgICAgcElCU1NERlMtPmxlbiArPSAyOwpAQCAtMzM5OCwxMSArMzM5OSwxMSBAQAogICAgICAgICBzRnJhbWUucEVSUC0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9FUlA7CiAgICAgICAgIHNGcmFtZS5wRVJQLT5sZW4gPSAxOwogICAgICAgICBzRnJhbWUucEVSUC0+YnlDb250ZXh0ID0gMDsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJQcm90ZWN0TW9kZSA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IHRydWUpCiAgICAgICAgICAgICBzRnJhbWUucEVSUC0+YnlDb250ZXh0IHw9IFdMQU5fRUlEX0VSUF9VU0VfUFJPVEVDVElPTjsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iTm9uRVJQUHJlc2VudCA9PSB0cnVlKQogICAgICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCB8PSBXTEFOX0VJRF9FUlBfTk9ORVJQX1BSRVNFTlQ7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9PSBUUlVFKQorICAgICAgICBpZiAocERldmljZS0+YkJhcmtlclByZWFtYmxlTWQgPT0gdHJ1ZSkKICAgICAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgfD0gV0xBTl9FSURfRVJQX0JBUktFUl9NT0RFOwogICAgIH0KICAgICBpZiAoKChQV0xBTl9JRV9TVVBQX1JBVEVTKXBDdXJyRXh0U3VwcFJhdGVzKS0+bGVuICE9IDApIHsKQEAgLTM0MTQsNyArMzQxNSw3IEBACiAgICAgICAgICAgICAgKTsKICAgICB9CiAgICAgLy8gaG9zdGFwZCB3cGEvd3BhMiBJRQotICAgIGlmICgocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX0FQKSAmJiAocERldmljZS0+YkVuYWJsZUhvc3RhcGQgPT0gVFJVRSkpIHsKKyAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkID09IHRydWUpKSB7CiAgICAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFOT05FKSB7CiAgICAgICAgICAgICAgaWYgKHBNZ210LT53V1BBSUVMZW4gIT0gMCkgewogICAgICAgICAgICAgICAgICBzRnJhbWUucFJTTiA9IChQV0xBTl9JRV9SU04pKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC0zNDUzLDMxICszNDU0LDMxIEBACiBzX01nck1ha2VQcm9iZVJlc3BvbnNlKAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFdPUkQgd0N1cnJDYXBJbmZvLAotICAgIFdPUkQgd0N1cnJCZWFjb25QZXJpb2QsCi0gICAgVUlOVCB1Q3VyckNoYW5uZWwsCi0gICAgV09SRCB3Q3VyckFUSU1XaW5vZHcsCi0gICAgUEJZVEUgcERzdEFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQmVhY29uUGVyaW9kLAorICAgIHVuc2lnbmVkIGludCB1Q3VyckNoYW5uZWwsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJBVElNV2lub2R3LAorICAgIHVuc2lnbmVkIGNoYXIgKnBEc3RBZGRyLAogICAgIFBXTEFOX0lFX1NTSUQgcEN1cnJTU0lELAotICAgIFBCWVRFIHBDdXJyQlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqcEN1cnJCU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMsCi0gICAgQllURSBieVBIWVR5cGUKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UEhZVHlwZQogICAgICkKIHsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldCA9IE5VTEw7CiAgICAgV0xBTl9GUl9QUk9CRVJFU1AgICBzRnJhbWU7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlCdWZmZXI7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICB1TGVuZ3RoID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IHVMZW5ndGggPSAwOwogICAgIFBXTEFOX0lFX0lCU1NfREZTICAgcElCU1NERlMgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7CisgICAgdW5zaWduZWQgaW50IGlpOwogCiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldChwVHhQYWNrZXQsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZS4KLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTjsKICAgICB2TWdyRW5jb2RlUHJvYmVSZXNwb25zZSgmc0ZyYW1lKTsKICAgICAvLyBTZXR1cCB0aGUgaGVhZGVyCkBAIC0zNDkzLDcgKzM0OTQsNyBAQAogICAgICpzRnJhbWUucHdDYXBJbmZvID0gY3B1X3RvX2xlMTYod0N1cnJDYXBJbmZvKTsKIAogICAgIGlmIChieVBIWVR5cGUgPT0gQkJfVFlQRV8xMUIpIHsKLSAgICAgICAgKnNGcmFtZS5wd0NhcEluZm8gJj0gY3B1X3RvX2xlMTYoKFdPUkQpfihXTEFOX1NFVF9DQVBfSU5GT19TSE9SVFNMT1RUSU1FKDEpKSk7CisgICAgICAgICpzRnJhbWUucHdDYXBJbmZvICY9IGNwdV90b19sZTE2KCh1bnNpZ25lZCBzaG9ydCl+KFdMQU5fU0VUX0NBUF9JTkZPX1NIT1JUU0xPVFRJTUUoMSkpKTsKICAgICB9CiAKICAgICAvLyBDb3B5IFNTSUQKQEAgLTM1MTgsNyArMzUxOSw3IEBACiAgICAgICAgIHNGcmFtZS5sZW4gKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+YnlFbGVtZW50SUQgPSBXTEFOX0VJRF9EU19QQVJNUzsKICAgICAgICAgc0ZyYW1lLnBEU1Bhcm1zLT5sZW4gPSAxOwotICAgICAgICBzRnJhbWUucERTUGFybXMtPmJ5Q3VyckNoYW5uZWwgPSAoQllURSl1Q3VyckNoYW5uZWw7CisgICAgICAgIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCA9ICh1bnNpZ25lZCBjaGFyKXVDdXJyQ2hhbm5lbDsKICAgICB9CiAKICAgICBpZiAocE1nbXQtPmVDdXJyTW9kZSAhPSBXTUFDX01PREVfRVNTX0FQKSB7CkBAIC0zNTM1LDIwICszNTM2LDIwIEBACiAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX0VSUDsKICAgICAgICAgc0ZyYW1lLnBFUlAtPmxlbiA9IDE7CiAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgPSAwOwotICAgICAgICBpZiAocERldmljZS0+YlByb3RlY3RNb2RlID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iUHJvdGVjdE1vZGUgPT0gdHJ1ZSkKICAgICAgICAgICAgIHNGcmFtZS5wRVJQLT5ieUNvbnRleHQgfD0gV0xBTl9FSURfRVJQX1VTRV9QUk9URUNUSU9OOwotICAgICAgICBpZiAocERldmljZS0+Yk5vbkVSUFByZXNlbnQgPT0gVFJVRSkKKyAgICAgICAgaWYgKHBEZXZpY2UtPmJOb25FUlBQcmVzZW50ID09IHRydWUpCiAgICAgICAgICAgICBzRnJhbWUucEVSUC0+YnlDb250ZXh0IHw9IFdMQU5fRUlEX0VSUF9OT05FUlBfUFJFU0VOVDsKLSAgICAgICAgaWYgKHBEZXZpY2UtPmJCYXJrZXJQcmVhbWJsZU1kID09IFRSVUUpCisgICAgICAgIGlmIChwRGV2aWNlLT5iQmFya2VyUHJlYW1ibGVNZCA9PSB0cnVlKQogICAgICAgICAgICAgc0ZyYW1lLnBFUlAtPmJ5Q29udGV4dCB8PSBXTEFOX0VJRF9FUlBfQkFSS0VSX01PREU7CiAgICAgfQogCi0gICAgaWYgKChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSAmJgorICAgIGlmICgocE1nbXQtPmIxMWhFbmFibGUgPT0gdHJ1ZSkgJiYKICAgICAgICAgKHBNZ210LT5lQ3VycmVudFBIWU1vZGUgPT0gUEhZX1RZUEVfMTFBKSkgewogICAgICAgICAvLyBDb3VudHJ5IElFCi0gICAgICAgIHBieUJ1ZmZlciA9IChQQllURSkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKLSAgICAgICAgQ0FSRHZTZXRDb3VudHJ5SUUocE1nbXQtPnBBZGFwdGVyLCBwYnlCdWZmZXIpOwotICAgICAgICBDQVJEdlNldENvdW50cnlJbmZvKHBNZ210LT5wQWRhcHRlciwgUEhZX1RZUEVfMTFBLCBwYnlCdWZmZXIpOworICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOworICAgICAgICBzZXRfY291bnRyeV9JRShwTWdtdC0+cEFkYXB0ZXIsIHBieUJ1ZmZlcik7CisgICAgICAgIHNldF9jb3VudHJ5X2luZm8ocE1nbXQtPnBBZGFwdGVyLCBQSFlfVFlQRV8xMUEsIHBieUJ1ZmZlcik7CiAgICAgICAgIHVMZW5ndGggKz0gKChQV0xBTl9JRV9DT1VOVFJZKSBwYnlCdWZmZXIpLT5sZW4gKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgcGJ5QnVmZmVyICs9ICgoKFBXTEFOX0lFX0NPVU5UUlkpIHBieUJ1ZmZlciktPmxlbiArIFdMQU5fSUVIRFJfTEVOKTsKICAgICAgICAgLy8gUG93ZXIgQ29uc3RyYWluIElFCkBAIC0zNTU3LDEyICszNTU4LDEyIEBACiAgICAgICAgICgoUFdMQU5fSUVfUFdfQ09OU1QpIHBieUJ1ZmZlciktPmJ5UG93ZXIgPSAwOwogICAgICAgICBwYnlCdWZmZXIgKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47CiAgICAgICAgIHVMZW5ndGggKz0gKDEpICsgV0xBTl9JRUhEUl9MRU47Ci0gICAgICAgIGlmIChwTWdtdC0+YlN3aXRjaENoYW5uZWwgPT0gVFJVRSkgeworICAgICAgICBpZiAocE1nbXQtPmJTd2l0Y2hDaGFubmVsID09IHRydWUpIHsKICAgICAgICAgICAgIC8vIENoYW5uZWwgU3dpdGNoIElFCiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX0NIX1NXSVRDSDsKICAgICAgICAgICAgICgoUFdMQU5fSUVfQ0hfU1cpIHBieUJ1ZmZlciktPmxlbiA9IDM7CiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieU1vZGUgPSAxOwotICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlDaGFubmVsID0gQ0FSRGJ5R2V0Q2hhbm5lbE51bWJlcihwTWdtdC0+cEFkYXB0ZXIsIHBNZ210LT5ieU5ld0NoYW5uZWwpOworICAgICAgICAgICAgKChQV0xBTl9JRV9DSF9TVykgcGJ5QnVmZmVyKS0+YnlDaGFubmVsID0gZ2V0X2NoYW5uZWxfbnVtYmVyKHBNZ210LT5wQWRhcHRlciwgcE1nbXQtPmJ5TmV3Q2hhbm5lbCk7CiAgICAgICAgICAgICAoKFBXTEFOX0lFX0NIX1NXKSBwYnlCdWZmZXIpLT5ieUNvdW50ID0gMDsKICAgICAgICAgICAgIHBieUJ1ZmZlciArPSAoMykgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgICAgIHVMZW5ndGggKz0gKDMpICsgV0xBTl9JRUhEUl9MRU47CkBAIC0zNTg2LDcgKzM1ODcsNyBAQAogICAgICAgICAgICAgcGJ5QnVmZmVyICs9ICg3KSArIFdMQU5fSUVIRFJfTEVOOwogICAgICAgICAgICAgdUxlbmd0aCArPSAoNykgKyBXTEFOX0lFSERSX0xFTjsKICAgICAgICAgICAgIGZvcihpaT1DQl9NQVhfQ0hBTk5FTF8yNEcrMTsgaWk8PUNCX01BWF9DSEFOTkVMOyBpaSsrICkgewotICAgICAgICAgICAgICAgIGlmIChDQVJEYkdldENoYW5uZWxNYXBJbmZvKHBNZ210LT5wQWRhcHRlciwgaWksIHBieUJ1ZmZlciwgcGJ5QnVmZmVyKzEpID09IFRSVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0X2NoYW5uZWxfbWFwX2luZm8ocE1nbXQtPnBBZGFwdGVyLCBpaSwgcGJ5QnVmZmVyLCBwYnlCdWZmZXIrMSkgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgICBwYnlCdWZmZXIgKz0gMjsKICAgICAgICAgICAgICAgICAgICAgdUxlbmd0aCArPSAyOwogICAgICAgICAgICAgICAgICAgICBwSUJTU0RGUy0+bGVuICs9IDI7CkBAIC0zNjA3LDcgKzM2MDgsNyBAQAogICAgIH0KIAogICAgIC8vIGhvc3RhcGQgd3BhL3dwYTIgSUUKLSAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgJiYgKHBEZXZpY2UtPmJFbmFibGVIb3N0YXBkID09IFRSVUUpKSB7CisgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9FU1NfQVApICYmIChwRGV2aWNlLT5iRW5hYmxlSG9zdGFwZCA9PSB0cnVlKSkgewogICAgICAgICAgaWYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBTk9ORSkgewogICAgICAgICAgICAgIGlmIChwTWdtdC0+d1dQQUlFTGVuICE9IDApIHsKICAgICAgICAgICAgICAgICAgc0ZyYW1lLnBSU04gPSAoUFdMQU5fSUVfUlNOKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOwpAQCAtMzY0Miw5ICszNjQzLDkgQEAKIHNfTWdyTWFrZUFzc29jUmVxdWVzdCgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBQQllURSBwREFkZHIsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3TGlzdGVuSW50ZXJ2YWwsCisgICAgdW5zaWduZWQgY2hhciAqcERBZGRyLAorICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQ2FwSW5mbywKKyAgICB1bnNpZ25lZCBzaG9ydCB3TGlzdGVuSW50ZXJ2YWwsCiAgICAgUFdMQU5fSUVfU1NJRCBwQ3VyclNTSUQsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKQEAgLTM2NTIsMTUgKzM2NTMsMTUgQEAKIHsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldCA9IE5VTEw7CiAgICAgV0xBTl9GUl9BU1NPQ1JFUSAgICBzRnJhbWU7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlJRXM7Ci0gICAgUEJZVEUgICAgICAgICAgICAgICBwYnlSU047CisgICAgdW5zaWduZWQgY2hhciAqcGJ5SUVzOworICAgIHVuc2lnbmVkIGNoYXIgKnBieVJTTjsKIAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0FTU09DUkVRX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZS4KLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOOwogICAgIC8vIGZvcm1hdCBmaXhlZCBmaWVsZCBmcmFtZSBzdHJ1Y3R1cmUKICAgICB2TWdyRW5jb2RlQXNzb2NSZXF1ZXN0KCZzRnJhbWUpOwpAQCAtMzcwOSw3ICszNzEwLDcgQEAKICAgICBwYnlJRXMgKz0gcEN1cnJSYXRlcy0+bGVuICsgV0xBTl9JRUhEUl9MRU47CiAKICAgICAvLyBmb3IgODAyLjExaAotICAgIGlmIChwTWdtdC0+YjExaEVuYWJsZSA9PSBUUlVFKSB7CisgICAgaWYgKHBNZ210LT5iMTFoRW5hYmxlID09IHRydWUpIHsKICAgICAgICAgaWYgKHNGcmFtZS5wQ3VyclBvd2VyQ2FwID09IE5VTEwpIHsKICAgICAgICAgICAgIHNGcmFtZS5wQ3VyclBvd2VyQ2FwID0gKFBXTEFOX0lFX1BXX0NBUCkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuKTsKICAgICAgICAgICAgIHNGcmFtZS5sZW4gKz0gKDIgKyBXTEFOX0lFSERSX0xFTik7CkBAIC0zNzIyLDcgKzM3MjMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChzRnJhbWUucEN1cnJTdXBwQ2ggPT0gTlVMTCkgewogICAgICAgICAgICAgc0ZyYW1lLnBDdXJyU3VwcENoID0gKFBXTEFOX0lFX1NVUFBfQ0gpKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7Ci0gICAgICAgICAgICBzRnJhbWUubGVuICs9IENBUkRieVNldFN1cHBvcnRDaGFubmVscyhwTWdtdC0+cEFkYXB0ZXIsKFBCWVRFKXNGcmFtZS5wQ3VyclN1cHBDaCk7CisgICAgICAgICAgICBzRnJhbWUubGVuICs9IHNldF9zdXBwb3J0X2NoYW5uZWxzKHBNZ210LT5wQWRhcHRlciwodW5zaWduZWQgY2hhciAqKXNGcmFtZS5wQ3VyclN1cHBDaCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3NjUsNyArMzc2Niw3IEBACiAgICAgICAgICAgICBzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbM10gPSBXUEFfTk9ORTsKICAgICAgICAgfQogICAgICAgICAvLyBBdXRoIEtleSBNYW5hZ2VtZW50IFN1aXRlCi0gICAgICAgIHBieVJTTiA9IChQQllURSkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuICsgMiArIHNGcmFtZS5wUlNOV1BBLT5sZW4pOworICAgICAgICBwYnlSU04gPSAodW5zaWduZWQgY2hhciAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyAyICsgc0ZyYW1lLnBSU05XUEEtPmxlbik7CiAgICAgICAgICpwYnlSU04rKz0weDAxOwogICAgICAgICAqcGJ5UlNOKys9MHgwMDsKICAgICAgICAgKnBieVJTTisrPTB4MDA7CkBAIC0zNzk5LDggKzM4MDAsOCBAQAogICAgIH0gZWxzZSBpZiAoKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHx8CiAgICAgICAgICAgICAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykpICYmCiAgICAgICAgICAgICAgICAocE1nbXQtPnBDdXJyQlNTICE9IE5VTEwpKSB7Ci0gICAgICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgICAgIFBXT1JEICAgICAgICAgICAgICAgcHdQTUtJRDsKKyAgICAgICAgdW5zaWduZWQgaW50IGlpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAqcHdQTUtJRDsKIAogICAgICAgICAvLyBXUEEgSUUKICAgICAgICAgc0ZyYW1lLnBSU04gPSAoUFdMQU5fSUVfUlNOKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOwpAQCAtMzg1NCw3ICszODU1LDcgQEAKICAgICAgICAgc0ZyYW1lLnBSU04tPmxlbiArPTY7CiAKICAgICAgICAgLy8gUlNOIENhcGFiaWxpdGVzCi0gICAgICAgIGlmIChwTWdtdC0+cEN1cnJCU1MtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgewogICAgICAgICAgICAgbWVtY3B5KCZzRnJhbWUucFJTTi0+YWJ5UlNOWzE2XSwgJnBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai53UlNOQ2FwLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNGcmFtZS5wUlNOLT5hYnlSU05bMTZdID0gMDsKQEAgLTM4NjIsMTAgKzM4NjMsMTAgQEAKICAgICAgICAgfQogICAgICAgICBzRnJhbWUucFJTTi0+bGVuICs9MjsKIAotICAgICAgICBpZiAoKHBEZXZpY2UtPmdzUE1LSUQuQlNTSURJbmZvQ291bnQgPiAwKSAmJiAocERldmljZS0+YlJvYW1pbmcgPT0gVFJVRSkgJiYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKKyAgICAgICAgaWYgKChwRGV2aWNlLT5nc1BNS0lELkJTU0lESW5mb0NvdW50ID4gMCkgJiYgKHBEZXZpY2UtPmJSb2FtaW5nID09IHRydWUpICYmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpKSB7CiAgICAgICAgICAgICAvLyBSU04gUE1LSUQKICAgICAgICAgICAgIHBieVJTTiA9ICZzRnJhbWUucFJTTi0+YWJ5UlNOWzE4XTsKLSAgICAgICAgICAgIHB3UE1LSUQgPSAoUFdPUkQpcGJ5UlNOOyAvLyBQb2ludCB0byBQTUtJRCBjb3VudAorICAgICAgICAgICAgcHdQTUtJRCA9ICh1bnNpZ25lZCBzaG9ydCAqKXBieVJTTjsgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKICAgICAgICAgICAgICpwd1BNS0lEID0gMDsgICAgICAgICAgICAvLyBJbml0aWFsaXplIFBNS0lEIGNvdW50CiAgICAgICAgICAgICBwYnlSU04gKz0gMjsgICAgICAgICAgICAgLy8gUG9pbnQgdG8gUE1LSUQgbGlzdAogICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgcERldmljZS0+Z3NQTUtJRC5CU1NJREluZm9Db3VudDsgaWkrKykgewpAQCAtMzkxNyw5ICszOTE4LDkgQEAKIHNfTWdyTWFrZVJlQXNzb2NSZXF1ZXN0KAogICAgIFBTRGV2aWNlIHBEZXZpY2UsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFIHBEQWRkciwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdMaXN0ZW5JbnRlcnZhbCwKKyAgICB1bnNpZ25lZCBjaGFyICpwREFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdMaXN0ZW5JbnRlcnZhbCwKICAgICBQV0xBTl9JRV9TU0lEIHBDdXJyU1NJRCwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyUmF0ZXMsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyckV4dFN1cHBSYXRlcwpAQCAtMzkyNywxNSArMzkyOCwxNSBAQAogewogICAgIFBTVHhNZ210UGFja2V0ICAgICAgcFR4UGFja2V0ID0gTlVMTDsKICAgICBXTEFOX0ZSX1JFQVNTT0NSRVEgIHNGcmFtZTsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieUlFczsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieVJTTjsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlJRXM7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UlNOOwogCiAKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieU1nbXRQYWNrZXRQb29sOwogICAgIG1lbXNldCggcFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX1JFQVNTT0NSRVFfRlJfTUFYTEVOKTsKLSAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOworICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwogICAgIC8qIFNldHVwIHRoZSBzRnJhbWUgc3RydWN0dXJlLiAqLwotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9SRUFTU09DUkVRX0ZSX01BWExFTjsKIAogICAgIC8vIGZvcm1hdCBmaXhlZCBmaWVsZCBmcmFtZSBzdHJ1Y3R1cmUKQEAgLTQwMjQsNyArNDAyNSw3IEBACiAgICAgICAgICAgICBzRnJhbWUucFJTTldQQS0+UEtTTGlzdFswXS5hYnlPVUlbM10gPSBXUEFfTk9ORTsKICAgICAgICAgfQogICAgICAgICAvLyBBdXRoIEtleSBNYW5hZ2VtZW50IFN1aXRlCi0gICAgICAgIHBieVJTTiA9IChQQllURSkoc0ZyYW1lLnBCdWYgKyBzRnJhbWUubGVuICsgMiArIHNGcmFtZS5wUlNOV1BBLT5sZW4pOworICAgICAgICBwYnlSU04gPSAodW5zaWduZWQgY2hhciAqKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4gKyAyICsgc0ZyYW1lLnBSU05XUEEtPmxlbik7CiAgICAgICAgICpwYnlSU04rKz0weDAxOwogICAgICAgICAqcGJ5UlNOKys9MHgwMDsKICAgICAgICAgKnBieVJTTisrPTB4MDA7CkBAIC00MDU1LDggKzQwNTYsOCBAQAogICAgIH0gZWxzZSBpZiAoKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpIHx8CiAgICAgICAgICAgICAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMlBTSykpICYmCiAgICAgICAgICAgICAgICAocE1nbXQtPnBDdXJyQlNTICE9IE5VTEwpKSB7Ci0gICAgICAgIFVJTlQgICAgICAgICAgICAgICAgaWk7Ci0gICAgICAgIFBXT1JEICAgICAgICAgICAgICAgcHdQTUtJRDsKKyAgICAgICAgdW5zaWduZWQgaW50IGlpOworICAgICAgICB1bnNpZ25lZCBzaG9ydCAqcHdQTUtJRDsKIAogICAgICAgICAvKiBXUEEgSUUgKi8KICAgICAgICAgc0ZyYW1lLnBSU04gPSAoUFdMQU5fSUVfUlNOKShzRnJhbWUucEJ1ZiArIHNGcmFtZS5sZW4pOwpAQCAtNDExMCw3ICs0MTExLDcgQEAKICAgICAgICAgc0ZyYW1lLnBSU04tPmxlbiArPTY7CiAKICAgICAgICAgLy8gUlNOIENhcGFiaWxpdGVzCi0gICAgICAgIGlmIChwTWdtdC0+cEN1cnJCU1MtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID09IFRSVUUpIHsKKyAgICAgICAgaWYgKHBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgewogICAgICAgICAgICAgbWVtY3B5KCZzRnJhbWUucFJTTi0+YWJ5UlNOWzE2XSwgJnBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai53UlNOQ2FwLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNGcmFtZS5wUlNOLT5hYnlSU05bMTZdID0gMDsKQEAgLTQxMTgsMTAgKzQxMTksMTAgQEAKICAgICAgICAgfQogICAgICAgICBzRnJhbWUucFJTTi0+bGVuICs9MjsKIAotICAgICAgICBpZiAoKHBEZXZpY2UtPmdzUE1LSUQuQlNTSURJbmZvQ291bnQgPiAwKSAmJiAocERldmljZS0+YlJvYW1pbmcgPT0gVFJVRSkgJiYgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKKyAgICAgICAgaWYgKChwRGV2aWNlLT5nc1BNS0lELkJTU0lESW5mb0NvdW50ID4gMCkgJiYgKHBEZXZpY2UtPmJSb2FtaW5nID09IHRydWUpICYmIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTIpKSB7CiAgICAgICAgICAgICAvLyBSU04gUE1LSUQKICAgICAgICAgICAgIHBieVJTTiA9ICZzRnJhbWUucFJTTi0+YWJ5UlNOWzE4XTsKLSAgICAgICAgICAgIHB3UE1LSUQgPSAoUFdPUkQpcGJ5UlNOOyAvLyBQb2ludCB0byBQTUtJRCBjb3VudAorICAgICAgICAgICAgcHdQTUtJRCA9ICh1bnNpZ25lZCBzaG9ydCAqKXBieVJTTjsgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKICAgICAgICAgICAgICpwd1BNS0lEID0gMDsgICAgICAgICAgICAvLyBJbml0aWFsaXplIFBNS0lEIGNvdW50CiAgICAgICAgICAgICBwYnlSU04gKz0gMjsgICAgICAgICAgICAgLy8gUG9pbnQgdG8gUE1LSUQgbGlzdAogICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgcERldmljZS0+Z3NQTUtJRC5CU1NJREluZm9Db3VudDsgaWkrKykgewpAQCAtNDE2OSwxMCArNDE3MCwxMCBAQAogc19NZ3JNYWtlQXNzb2NSZXNwb25zZSgKICAgICBQU0RldmljZSBwRGV2aWNlLAogICAgIFBTTWdtdE9iamVjdCBwTWdtdCwKLSAgICBXT1JEIHdDdXJyQ2FwSW5mbywKLSAgICBXT1JEIHdBc3NvY1N0YXR1cywKLSAgICBXT1JEIHdBc3NvY0FJRCwKLSAgICBQQllURSBwRHN0QWRkciwKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm8sCisgICAgdW5zaWduZWQgc2hvcnQgd0Fzc29jU3RhdHVzLAorICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY0FJRCwKKyAgICB1bnNpZ25lZCBjaGFyICpwRHN0QWRkciwKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyU3VwcFJhdGVzLAogICAgIFBXTEFOX0lFX1NVUFBfUkFURVMgcEN1cnJFeHRTdXBwUmF0ZXMKICAgICApCkBAIC00MTgzLDkgKzQxODQsOSBAQAogCiAgICAgcFR4UGFja2V0ID0gKFBTVHhNZ210UGFja2V0KXBNZ210LT5wYnlNZ210UGFja2V0UG9vbDsKICAgICBtZW1zZXQocFR4UGFja2V0LCAwLCBzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0FTU09DUkVRX0ZSX01BWExFTik7Ci0gICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgoUEJZVEUpcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKKyAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKCh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0ICsgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpKTsKICAgICAvLyBTZXR1cCB0aGUgc0ZyYW1lIHN0cnVjdHVyZQotICAgIHNGcmFtZS5wQnVmID0gKFBCWVRFKXBUeFBhY2tldC0+cDgwMjExSGVhZGVyOworICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICBzRnJhbWUubGVuID0gV0xBTl9SRUFTU09DUkVTUF9GUl9NQVhMRU47CiAgICAgdk1nckVuY29kZUFzc29jUmVzcG9uc2UoJnNGcmFtZSk7CiAgICAgLy8gU2V0dXAgdGhlIGhlYWRlcgpAQCAtNDIwMCw3ICs0MjAxLDcgQEAKIAogICAgICpzRnJhbWUucHdDYXBJbmZvID0gY3B1X3RvX2xlMTYod0N1cnJDYXBJbmZvKTsKICAgICAqc0ZyYW1lLnB3U3RhdHVzID0gY3B1X3RvX2xlMTYod0Fzc29jU3RhdHVzKTsKLSAgICAqc0ZyYW1lLnB3QWlkID0gY3B1X3RvX2xlMTYoKFdPUkQpKHdBc3NvY0FJRCB8IEJJVDE0IHwgQklUMTUpKTsKKyAgICAqc0ZyYW1lLnB3QWlkID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KSh3QXNzb2NBSUQgfCBCSVQxNCB8IEJJVDE1KSk7CiAKICAgICAvLyBDb3B5IHRoZSByYXRlIHNldAogICAgIHNGcmFtZS5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC00MjQzLDEwICs0MjQ0LDEwIEBACiBzX01nck1ha2VSZUFzc29jUmVzcG9uc2UoCiAgICAgUFNEZXZpY2UgcERldmljZSwKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCB3Q3VyckNhcEluZm8sCi0gICAgV09SRCB3QXNzb2NTdGF0dXMsCi0gICAgV09SRCB3QXNzb2NBSUQsCi0gICAgUEJZVEUgcERzdEFkZHIsCisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJDYXBJbmZvLAorICAgIHVuc2lnbmVkIHNob3J0IHdBc3NvY1N0YXR1cywKKyAgICB1bnNpZ25lZCBzaG9ydCB3QXNzb2NBSUQsCisgICAgdW5zaWduZWQgY2hhciAqcERzdEFkZHIsCiAgICAgUFdMQU5fSUVfU1VQUF9SQVRFUyBwQ3VyclN1cHBSYXRlcywKICAgICBQV0xBTl9JRV9TVVBQX1JBVEVTIHBDdXJyRXh0U3VwcFJhdGVzCiAgICAgKQpAQCAtNDI1Nyw5ICs0MjU4LDkgQEAKIAogICAgIHBUeFBhY2tldCA9IChQU1R4TWdtdFBhY2tldClwTWdtdC0+cGJ5TWdtdFBhY2tldFBvb2w7CiAgICAgbWVtc2V0KHBUeFBhY2tldCwgMCwgc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BU1NPQ1JFUV9GUl9NQVhMRU4pOwotICAgIHBUeFBhY2tldC0+cDgwMjExSGVhZGVyID0gKFBVV0xBTl84MDIxMUhEUikoKFBCWVRFKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CisgICAgcFR4UGFja2V0LT5wODAyMTFIZWFkZXIgPSAoUFVXTEFOXzgwMjExSERSKSgodW5zaWduZWQgY2hhciAqKXBUeFBhY2tldCArIHNpemVvZihTVHhNZ210UGFja2V0KSk7CiAgICAgLy8gU2V0dXAgdGhlIHNGcmFtZSBzdHJ1Y3R1cmUKLSAgICBzRnJhbWUucEJ1ZiA9IChQQllURSlwVHhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKKyAgICBzRnJhbWUucEJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcFR4UGFja2V0LT5wODAyMTFIZWFkZXI7CiAgICAgc0ZyYW1lLmxlbiA9IFdMQU5fUkVBU1NPQ1JFU1BfRlJfTUFYTEVOOwogICAgIHZNZ3JFbmNvZGVSZWFzc29jUmVzcG9uc2UoJnNGcmFtZSk7CiAgICAgLy8gU2V0dXAgdGhlIGhlYWRlcgpAQCAtNDI3NCw3ICs0Mjc1LDcgQEAKIAogICAgICpzRnJhbWUucHdDYXBJbmZvID0gY3B1X3RvX2xlMTYod0N1cnJDYXBJbmZvKTsKICAgICAqc0ZyYW1lLnB3U3RhdHVzID0gY3B1X3RvX2xlMTYod0Fzc29jU3RhdHVzKTsKLSAgICAqc0ZyYW1lLnB3QWlkID0gY3B1X3RvX2xlMTYoKFdPUkQpKHdBc3NvY0FJRCB8IEJJVDE0IHwgQklUMTUpKTsKKyAgICAqc0ZyYW1lLnB3QWlkID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIHNob3J0KSh3QXNzb2NBSUQgfCBCSVQxNCB8IEJJVDE1KSk7CiAKICAgICAvLyBDb3B5IHRoZSByYXRlIHNldAogICAgIHNGcmFtZS5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpKHNGcmFtZS5wQnVmICsgc0ZyYW1lLmxlbik7CkBAIC00MzIyLDE2ICs0MzIzLDE2IEBACiB7CiAgICAgUEtub3duQlNTICAgICAgICAgICBwQlNTTGlzdCA9IE5VTEw7CiAgICAgV0xBTl9GUl9QUk9CRVJFU1AgICBzRnJhbWU7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieUN1cnJDaGFubmVsID0gcFJ4UGFja2V0LT5ieVJ4Q2hhbm5lbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q3VyckNoYW5uZWwgPSBwUnhQYWNrZXQtPmJ5UnhDaGFubmVsOwogICAgIEVSUE9iamVjdCAgICAgICAgICAgc0VSUDsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gMDsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJDaGFubmVsSGl0ID0gVFJVRTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5SUVDaGFubmVsID0gMDsKKyAgICBib29sIGJDaGFubmVsSGl0ID0gdHJ1ZTsKIAogCiAgICAgbWVtc2V0KCZzRnJhbWUsIDAsIHNpemVvZihXTEFOX0ZSX1BST0JFUkVTUCkpOwogICAgIC8vIGRlY29kZSB0aGUgZnJhbWUKICAgICBzRnJhbWUubGVuID0gcFJ4UGFja2V0LT5jYk1QRFVMZW47Ci0gICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgc0ZyYW1lLnBCdWYgPSAodW5zaWduZWQgY2hhciAqKXBSeFBhY2tldC0+cDgwMjExSGVhZGVyOwogICAgIHZNZ3JEZWNvZGVQcm9iZVJlc3BvbnNlKCZzRnJhbWUpOwogCiAgICAgaWYgKChzRnJhbWUucHF3VGltZXN0YW1wID09IDApIHx8CkBAIC00MzUwLDI5ICs0MzUxLDI5IEBACiAgICAgaWYgKHNGcmFtZS5wRFNQYXJtcyAhPSAwKSB7CiAgICAgICAgIGlmIChieUN1cnJDaGFubmVsID4gQ0JfTUFYX0NIQU5ORUxfMjRHKSB7CiAgICAgICAgICAgICAvLyBjaGFubmVsIHJlbWFwcGluZyB0bwotICAgICAgICAgICAgYnlJRUNoYW5uZWwgPSBDQVJEYnlHZXRDaGFubmVsTWFwcGluZyhwTWdtdC0+cEFkYXB0ZXIsIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCwgUEhZX1RZUEVfMTFBKTsKKyAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gZ2V0X2NoYW5uZWxfbWFwcGluZyhwTWdtdC0+cEFkYXB0ZXIsIHNGcmFtZS5wRFNQYXJtcy0+YnlDdXJyQ2hhbm5lbCwgUEhZX1RZUEVfMTFBKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ5SUVDaGFubmVsID0gc0ZyYW1lLnBEU1Bhcm1zLT5ieUN1cnJDaGFubmVsOwogICAgICAgICB9CiAgICAgICAgIGlmIChieUN1cnJDaGFubmVsICE9IGJ5SUVDaGFubmVsKSB7CiAgICAgICAgICAgICAvLyBhZGp1c3QgY2hhbm5lbCBpbmZvLiBiY3Mgd2UgcmN2IGFkamNlbnQgY2hhbm5lbCBwYWtja2V0cwotICAgICAgICAgICAgYkNoYW5uZWxIaXQgPSBGQUxTRTsKKyAgICAgICAgICAgIGJDaGFubmVsSGl0ID0gZmFsc2U7CiAgICAgICAgICAgICBieUN1cnJDaGFubmVsID0gYnlJRUNoYW5uZWw7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBubyBEUyBjaGFubmVsIGluZm8KLSAgICAgICAgYkNoYW5uZWxIaXQgPSBUUlVFOworICAgICAgICBiQ2hhbm5lbEhpdCA9IHRydWU7CiAgICAgfQogCiAvLzIwMDgtMDczMC0wMTxBZGQ+YnkgTWlrZUxpdQotaWYoQ2hhbm5lbEV4Y2VlZFpvbmVUeXBlKHBEZXZpY2UsYnlDdXJyQ2hhbm5lbCk9PVRSVUUpCitpZihDaGFubmVsRXhjZWVkWm9uZVR5cGUocERldmljZSxieUN1cnJDaGFubmVsKT09dHJ1ZSkKICAgICAgIHJldHVybjsKIAogICAgIGlmIChzRnJhbWUucEVSUCAhPSBOVUxMKSB7CiAgICAgICAgIHNFUlAuYnlFUlAgPSBzRnJhbWUucEVSUC0+YnlDb250ZXh0OwotICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IFRSVUU7CisgICAgICAgIHNFUlAuYkVSUEV4aXN0ID0gdHJ1ZTsKICAgICB9IGVsc2UgewotICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IEZBTFNFOworICAgICAgICBzRVJQLmJFUlBFeGlzdCA9IGZhbHNlOwogICAgICAgICBzRVJQLmJ5RVJQID0gMDsKICAgICB9CiAKQEAgLTQ0NDgsNyArNDQ0OSw3IEBACiAgICAgV0xBTl9GUl9QUk9CRVJFUSAgICBzRnJhbWU7CiAgICAgQ01EX1NUQVRVUyAgICAgICAgICBTdGF0dXM7CiAgICAgUFNUeE1nbXRQYWNrZXQgICAgICBwVHhQYWNrZXQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICBieVBIWVR5cGUgPSBCQl9UWVBFXzExQjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UEhZVHlwZSA9IEJCX1RZUEVfMTFCOwogCiAgICAgLy8gU1RBIGluIEFkLWhvYyBtb2RlOiB3aGVuIGxhdGVzdCBUQlRUIGJlYWNvbiB0cmFuc21pdCBzdWNjZXNzLAogICAgIC8vIFNUQSBoYXZlIHRvIHJlc3BvbnNlIHRoaXMgcmVxdWVzdC4KQEAgLTQ0NTgsNyArNDQ1OSw3IEBACiAgICAgICAgIG1lbXNldCgmc0ZyYW1lLCAwLCBzaXplb2YoV0xBTl9GUl9QUk9CRVJFUSkpOwogICAgICAgICAvLyBkZWNvZGUgdGhlIGZyYW1lCiAgICAgICAgIHNGcmFtZS5sZW4gPSBwUnhQYWNrZXQtPmNiTVBEVUxlbjsKLSAgICAgICAgc0ZyYW1lLnBCdWYgPSAoUEJZVEUpcFJ4UGFja2V0LT5wODAyMTFIZWFkZXI7CisgICAgICAgIHNGcmFtZS5wQnVmID0gKHVuc2lnbmVkIGNoYXIgKilwUnhQYWNrZXQtPnA4MDIxMUhlYWRlcjsKICAgICAgICAgdk1nckRlY29kZVByb2JlUmVxdWVzdCgmc0ZyYW1lKTsKIC8qCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlByb2JlIHJlcXVlc3Qgcng6TUFDIGFkZHI6JTAyeC0lMDJ4LSUwMng9JTAyeC0lMDJ4LSUwMnggXG4iLApAQCAtNDQ5NSw3ICs0NDk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgIHNGcmFtZS5wSGRyLT5zQTMuYWJ5QWRkcjIsCiAgICAgICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NTSUQpcE1nbXQtPmFieUN1cnJTU0lELAotICAgICAgICAgICAgICAgICAgICAgIChQQllURSlwTWdtdC0+YWJ5Q3VyckJTU0lELAorICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopcE1nbXQtPmFieUN1cnJCU1NJRCwKICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyclN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1VQUF9SQVRFUylwTWdtdC0+YWJ5Q3VyckV4dFN1cHBSYXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgYnlQSFlUeXBlCkBAIC00NTQyLDggKzQ1NDMsOCBAQAogICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKLSAgICBCT09MICAgICAgICBiSW5TY2FuID0gRkFMU0U7Ci0gICAgVUlOVCAgICAgICAgdU5vZGVJbmRleCA9IDA7CisgICAgYm9vbCBiSW5TY2FuID0gZmFsc2U7CisgICAgdW5zaWduZWQgaW50IHVOb2RlSW5kZXggPSAwOwogICAgIE5PREVfU1RBVEUgIGVOb2RlU3RhdGUgPSAwOwogICAgIENNRF9TVEFUVVMgIFN0YXR1czsKIApAQCAtNDU3Nyw3ICs0NTc4LDcgQEAKICAgICAgICAgY2FzZSBXTEFOX0ZTVFlQRV9BU1NPQ1JFU1A6CiAgICAgICAgICAgICAvLyBGcmFtZSBDbGFzZSA9IDIKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInJ4IGFzc29jcmVzcDFcbiIpOwotICAgICAgICAgICAgc192TWdyUnhBc3NvY1Jlc3BvbnNlKHBEZXZpY2UsIHBNZ210LCBwUnhQYWNrZXQsIEZBTFNFKTsKKyAgICAgICAgICAgIHNfdk1nclJ4QXNzb2NSZXNwb25zZShwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCBmYWxzZSk7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCBhc3NvY3Jlc3AyXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC00NjAzLDcgKzQ2MDQsNyBAQAogICAgICAgICBjYXNlIFdMQU5fRlNUWVBFX1JFQVNTT0NSRVNQOgogICAgICAgICAgICAgLy8gRnJhbWUgQ2xhc2UgPSAyCiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCByZWFzc29jcmVzcFxuIik7Ci0gICAgICAgICAgICBzX3ZNZ3JSeEFzc29jUmVzcG9uc2UocERldmljZSwgcE1nbXQsIHBSeFBhY2tldCwgVFJVRSk7CisgICAgICAgICAgICBzX3ZNZ3JSeEFzc29jUmVzcG9uc2UocERldmljZSwgcE1nbXQsIHBSeFBhY2tldCwgdHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFdMQU5fRlNUWVBFX1BST0JFUkVROgpAQCAtNDYyMyw3ICs0NjI0LDcgQEAKICAgICAgICAgICAgIC8vIEZyYW1lIENsYXNlID0gMAogICAgICAgICAgICAgLy9EQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJyeCBiZWFjb25cbiIpOwogICAgICAgICAgICAgaWYgKHBNZ210LT5lU2NhblN0YXRlICE9IFdNQUNfTk9fU0NBTk5JTkcpIHsKLSAgICAgICAgICAgICAgICBiSW5TY2FuID0gVFJVRTsKKyAgICAgICAgICAgICAgICBiSW5TY2FuID0gdHJ1ZTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICBzX3ZNZ3JSeEJlYWNvbihwRGV2aWNlLCBwTWdtdCwgcFJ4UGFja2V0LCBiSW5TY2FuKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDY4MCwxMCArNDY4MSwxMCBAQAogICogIFByZXBhcmUgYmVhY29uIHRvIHNlbmQKICAqCiAgKiBSZXR1cm4gVmFsdWU6Ci0gKiAgICBUUlVFIGlmIHN1Y2Nlc3M7IEZBTFNFIGlmIGZhaWxlZC4KKyAqICAgIHRydWUgaWYgc3VjY2VzczsgZmFsc2UgaWYgZmFpbGVkLgogICoKIC0qLwotQk9PTAorYm9vbAogYk1nclByZXBhcmVCZWFjb25Ub1NlbmQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210CkBAIC00NjkyLDcgKzQ2OTMsNyBAQAogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZSA9IChQU0RldmljZSloRGV2aWNlQ29udGV4dDsKICAgICBQU1R4TWdtdFBhY2tldCAgICAgIHBUeFBhY2tldDsKIAotLy8gICAgcERldmljZS0+YkJlYWNvbkJ1ZlJlYWR5ID0gRkFMU0U7CisvLyAgICBwRGV2aWNlLT5iQmVhY29uQnVmUmVhZHkgPSBmYWxzZTsKICAgICBpZiAocERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgfHwgcERldmljZS0+YkVuYWJsZTgwMjF4KXsKICAgICAgICAgcE1nbXQtPndDdXJyQ2FwSW5mbyB8PSBXTEFOX1NFVF9DQVBfSU5GT19QUklWQUNZKDEpOwogICAgIH0KQEAgLTQ3MDgsMTggKzQ3MDksMTggQEAKICAgICAgICAgICAgICAgICAgIHBNZ210LT51Q3VyckNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICBwTWdtdC0+d0N1cnJBVElNV2luZG93LCAvLzAsCiAgICAgICAgICAgICAgICAgICAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQsCi0gICAgICAgICAgICAgICAgICAoUEJZVEUpcE1nbXQtPmFieUN1cnJCU1NJRCwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopcE1nbXQtPmFieUN1cnJCU1NJRCwKICAgICAgICAgICAgICAgICAgIChQV0xBTl9JRV9TVVBQX1JBVEVTKXBNZ210LT5hYnlDdXJyU3VwcFJhdGVzLAogICAgICAgICAgICAgICAgICAgKFBXTEFOX0lFX1NVUFBfUkFURVMpcE1nbXQtPmFieUN1cnJFeHRTdXBwUmF0ZXMKICAgICAgICAgICAgICAgICApOwogCiAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9JQlNTX1NUQSkgJiYKICAgICAgICAgKHBNZ210LT5hYnlDdXJyQlNTSURbMF0gPT0gMCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY3NCZWFjb25feG1pdChwRGV2aWNlLCBwVHhQYWNrZXQpOwogCi0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtNDc0MSw3ICs0NzQyLDcgQEAKIHZvaWQKIHNfdk1nckxvZ1N0YXR1cygKICAgICBQU01nbXRPYmplY3QgcE1nbXQsCi0gICAgV09SRCAgd1N0YXR1cworICAgIHVuc2lnbmVkIHNob3J0IHdTdGF0dXMKICAgICApCiB7CiAgICAgc3dpdGNoKCB3U3RhdHVzICl7CkBAIC00ODA3LDI0ICs0ODA4LDI0IEBACiAgKiBSZXR1cm4gVmFsdWU6IG5vbmUuCiAgKgogLSovCi1CT09MCitib29sCiBiQWRkX1BNS0lEX0NhbmRpZGF0ZSAoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgICAgICAgICAgcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCiAgICAgUFNSU05DYXBPYmplY3QgcHNSU05DYXBPYmoKICAgICApCiB7CiAgICAgUFNEZXZpY2UgICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBQTUtJRF9DQU5ESURBVEUgcENhbmRpZGF0ZUxpc3Q7Ci0gICAgVUlOVCAgICAgICAgICAgICBpaSA9IDA7CisgICAgdW5zaWduZWQgaW50IGlpID0gMDsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iYkFkZF9QTUtJRF9DYW5kaWRhdGUgU1RBUlQ6ICglZClcbiIsIChpbnQpcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKTsKIAogICAgIGlmICgocERldmljZSA9PSBOVUxMKSB8fCAocGJ5QlNTSUQgPT0gTlVMTCkgfHwgKHBzUlNOQ2FwT2JqID09IE5VTEwpKQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLk51bUNhbmRpZGF0ZXMgPj0gTUFYX1BNS0lETElTVCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKIAogCkBAIC00ODMyLDE4ICs0ODMzLDE4IEBACiAgICAgZm9yIChpaSA9IDA7IGlpIDwgcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzOyBpaSsrKSB7CiAgICAgICAgIHBDYW5kaWRhdGVMaXN0ID0gJnBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuQ2FuZGlkYXRlTGlzdFtpaV07CiAgICAgICAgIGlmICggIW1lbWNtcChwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTikpIHsKLSAgICAgICAgICAgIGlmICgocHNSU05DYXBPYmotPmJSU05DYXBFeGlzdCA9PSBUUlVFKSAmJiAocHNSU05DYXBPYmotPndSU05DYXAgJiBCSVQwKSkgeworICAgICAgICAgICAgaWYgKChwc1JTTkNhcE9iai0+YlJTTkNhcEV4aXN0ID09IHRydWUpICYmIChwc1JTTkNhcE9iai0+d1JTTkNhcCAmIEJJVDApKSB7CiAgICAgICAgICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzIHw9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQ7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBDYW5kaWRhdGVMaXN0LT5GbGFncyAmPSB+KE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5ldyBDYW5kaWRhdGUKICAgICBwQ2FuZGlkYXRlTGlzdCA9ICZwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLkNhbmRpZGF0ZUxpc3RbcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzXTsKLSAgICBpZiAoKHBzUlNOQ2FwT2JqLT5iUlNOQ2FwRXhpc3QgPT0gVFJVRSkgJiYgKHBzUlNOQ2FwT2JqLT53UlNOQ2FwICYgQklUMCkpIHsKKyAgICBpZiAoKHBzUlNOQ2FwT2JqLT5iUlNOQ2FwRXhpc3QgPT0gdHJ1ZSkgJiYgKHBzUlNOQ2FwT2JqLT53UlNOQ2FwICYgQklUMCkpIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzIHw9IE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcENhbmRpZGF0ZUxpc3QtPkZsYWdzICY9IH4oTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX1BSRUFVVEhfRU5BQkxFRCk7CkBAIC00ODUxLDcgKzQ4NTIsNyBAQAogICAgIG1lbWNweShwQ2FuZGlkYXRlTGlzdC0+QlNTSUQsIHBieUJTU0lELCBFVEhfQUxFTik7CiAgICAgcERldmljZS0+Z3NQTUtJRENhbmRpZGF0ZS5OdW1DYW5kaWRhdGVzKys7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJOdW1DYW5kaWRhdGVzOiVkXG4iLCAoaW50KXBEZXZpY2UtPmdzUE1LSURDYW5kaWRhdGUuTnVtQ2FuZGlkYXRlcyk7Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC00ODgxLDIwICs0ODgyLDIwIEBACiAgICAgbWVtc2V0KCZwRGV2aWNlLT5nc1BNS0lEQ2FuZGlkYXRlLCAwLCBzaXplb2YoU1BNS0lEQ2FuZGlkYXRlRXZlbnQpKTsKIH0KIAotc3RhdGljIEJPT0wKK3N0YXRpYyBib29sCiBzX2JDaXBoZXJNYXRjaCAoCiAgICAgUEtub3duQlNTICAgICAgICAgICAgICAgICAgICAgICAgcEJTU05vZGUsCiAgICAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgICAgRW5jU3RhdHVzLAotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgcGJ5Q0NTUEssCi0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICBwYnlDQ1NHSworICAgIHVuc2lnbmVkIGNoYXIgKnBieUNDU1BLLAorICAgIHVuc2lnbmVkIGNoYXIgKnBieUNDU0dLCiAgICAgKQogewotICAgIEJZVEUgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7Ci0gICAgQllURSBieUNpcGhlck1hc2sgPSAweDAwOworICAgIHVuc2lnbmVkIGNoYXIgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7CisgICAgdW5zaWduZWQgY2hhciBieUNpcGhlck1hc2sgPSAweDAwOwogICAgIGludCBpOwogCiAgICAgaWYgKHBCU1NOb2RlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gY2hlY2sgY2FwLiBvZiBCU1MKICAgICBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX1BSSVZBQ1kocEJTU05vZGUtPndDYXBJbmZvKSAhPSAwKSAmJgpAQCAtNDkwNCw3ICs0OTA1LDcgQEAKICAgICB9CiAKICAgICBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX1BSSVZBQ1kocEJTU05vZGUtPndDYXBJbmZvKSAhPSAwKSAmJgotICAgICAgICAocEJTU05vZGUtPmJXUEEyVmFsaWQgPT0gVFJVRSkgJiYKKyAgICAgICAgKHBCU1NOb2RlLT5iV1BBMlZhbGlkID09IHRydWUpICYmCiAgICAgICAgICAgLy8yMDA4MDEyMy0wMSw8QWRkPiBieSBFaW5zbiBMaXUKICAgICAgICAgKChFbmNTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCl8fChFbmNTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkpKSB7CiAgICAgICAgIC8vV1BBMgpAQCAtNDkzOCw3ICs0OTM5LDcgQEAKICAgICAgICAgfQogCiAgICAgfSBlbHNlIGlmICgoV0xBTl9HRVRfQ0FQX0lORk9fUFJJVkFDWShwQlNTTm9kZS0+d0NhcEluZm8pICE9IDApICYmCi0gICAgICAgICAgICAgICAgKHBCU1NOb2RlLT5iV1BBVmFsaWQgPT0gVFJVRSkgJiYKKyAgICAgICAgICAgICAgICAocEJTU05vZGUtPmJXUEFWYWxpZCA9PSB0cnVlKSAmJgogICAgICAgICAgICAgICAgICgoRW5jU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHx8IChFbmNTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkpKSB7CiAgICAgICAgIC8vV1BBCiAgICAgICAgIC8vIGNoZWNrIEdyb3VwIEtleSBDaXBoZXIKQEAgLTQ5NzgsOSArNDk3OSw5IEBACiAgICAgICAgICAgICAoYnlDaXBoZXJNYXNrID09IDApKSB7CiAgICAgICAgICAgICAqcGJ5Q0NTR0sgPSBLRVlfQ1RMX1dFUDsKICAgICAgICAgICAgICpwYnlDQ1NQSyA9IEtFWV9DVExfTk9ORTsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSBpZiAoRW5jU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHsKQEAgLTQ5ODgsNDUgKzQ5ODksNDUgQEAKICAgICAgICAgICAgIChieUNpcGhlck1hc2sgPT0gMCkpIHsKICAgICAgICAgICAgICpwYnlDQ1NHSyA9IEtFWV9DVExfVEtJUDsKICAgICAgICAgICAgICpwYnlDQ1NQSyA9IEtFWV9DVExfTk9ORTsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoKGJ5TXVsdGljYXN0Q2lwaGVyID09IEtFWV9DVExfV0VQKSAmJgogICAgICAgICAgICAgICAgICAgICgoYnlDaXBoZXJNYXNrICYgMHgwMikgIT0gMCkpIHsKICAgICAgICAgICAgICpwYnlDQ1NHSyA9IEtFWV9DVExfV0VQOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9US0lQOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICgoYnlNdWx0aWNhc3RDaXBoZXIgPT0gS0VZX0NUTF9US0lQKSAmJgogICAgICAgICAgICAgICAgICAgICgoYnlDaXBoZXJNYXNrICYgMHgwMikgIT0gMCkpIHsKICAgICAgICAgICAgICpwYnlDQ1NHSyA9IEtFWV9DVExfVEtJUDsKICAgICAgICAgICAgICpwYnlDQ1NQSyA9IEtFWV9DVExfVEtJUDsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKEVuY1N0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSB7CiAgICAgICAgIGlmICgoYnlNdWx0aWNhc3RDaXBoZXIgPT0gS0VZX0NUTF9DQ01QKSAmJgogICAgICAgICAgICAgKGJ5Q2lwaGVyTWFzayA9PSAwKSkgewogICAgICAgICAgICAgLy8gV2hlbiBDQ01QIGlzIGVuYWJsZSwgIlVzZSBncm91cCBjaXBoZXIgc3VpdGUiIHNoYWxsIG5vdCBiZSBhIHZhbGlkIG9wdGlvbi4KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIGlmICgoYnlNdWx0aWNhc3RDaXBoZXIgPT0gS0VZX0NUTF9XRVApICYmCiAgICAgICAgICAgICAgICAgICAgKChieUNpcGhlck1hc2sgJiAweDA0KSAhPSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9XRVA7CiAgICAgICAgICAgICAqcGJ5Q0NTUEsgPSBLRVlfQ1RMX0NDTVA7Ci0gICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKChieU11bHRpY2FzdENpcGhlciA9PSBLRVlfQ1RMX1RLSVApICYmCiAgICAgICAgICAgICAgICAgICAgKChieUNpcGhlck1hc2sgJiAweDA0KSAhPSAwKSkgewogICAgICAgICAgICAgKnBieUNDU0dLID0gS0VZX0NUTF9US0lQOwogICAgICAgICAgICAgKnBieUNDU1BLID0gS0VZX0NUTF9DQ01QOwotICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmICgoYnlNdWx0aWNhc3RDaXBoZXIgPT0gS0VZX0NUTF9DQ01QKSAmJgogICAgICAgICAgICAgICAgICAgICgoYnlDaXBoZXJNYXNrICYgMHgwNCkgIT0gMCkpIHsKICAgICAgICAgICAgICpwYnlDQ1NHSyA9IEtFWV9DVExfQ0NNUDsKICAgICAgICAgICAgICpwYnlDQ1NQSyA9IEtFWV9DVExfQ0NNUDsKLSAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93bWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaAppbmRleCA5YWU3ZTBkLi4xNDFlODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dtZ3IuaApAQCAtODMsNDcgKzgzLDQ3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lIHRpbWVyX2V4cGlyZSh0aW1lcixuZXh0X3RpY2spICAgbW9kX3RpbWVyKCZ0aW1lciwgUlVOX0FUKG5leHRfdGljaykpCi10eXBlZGVmIHZvaWQgKCpUaW1lckZ1bmN0aW9uKShVTE9ORyk7Cit0eXBlZGVmIHZvaWQgKCpUaW1lckZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKTsKIAogCiAvLysrKyBORElTIHJlbGF0ZWQKIAotdHlwZWRlZiBVQ0hBUiAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTWzZdOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIE5ESVNfODAyXzExX01BQ19BRERSRVNTWzZdOwogdHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FJX1JFUUZJCiB7Ci0gICAgVVNIT1JUIENhcGFiaWxpdGllczsKLSAgICBVU0hPUlQgTGlzdGVuSW50ZXJ2YWw7CisgICAgdW5zaWduZWQgc2hvcnQgQ2FwYWJpbGl0aWVzOworICAgIHVuc2lnbmVkIHNob3J0IExpc3RlbkludGVydmFsOwogICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICBDdXJyZW50QVBBZGRyZXNzOwogfSBORElTXzgwMl8xMV9BSV9SRVFGSSwgKlBORElTXzgwMl8xMV9BSV9SRVFGSTsKIAogdHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FJX1JFU0ZJCiB7Ci0gICAgVVNIT1JUIENhcGFiaWxpdGllczsKLSAgICBVU0hPUlQgU3RhdHVzQ29kZTsKLSAgICBVU0hPUlQgQXNzb2NpYXRpb25JZDsKKyAgICB1bnNpZ25lZCBzaG9ydCBDYXBhYmlsaXRpZXM7CisgICAgdW5zaWduZWQgc2hvcnQgU3RhdHVzQ29kZTsKKyAgICB1bnNpZ25lZCBzaG9ydCBBc3NvY2lhdGlvbklkOwogfSBORElTXzgwMl8xMV9BSV9SRVNGSSwgKlBORElTXzgwMl8xMV9BSV9SRVNGSTsKIAogdHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCiB7Ci0gICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGVuZ3RoOwotICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZVJlcXVlc3RGaXhlZElFczsKKyAgICB1bnNpZ25lZCBsb25nIExlbmd0aDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBBdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXM7CiAgICAgTkRJU184MDJfMTFfQUlfUkVRRkkgICAgUmVxdWVzdEZpeGVkSUVzOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRUxlbmd0aDsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBPZmZzZXRSZXF1ZXN0SUVzOwotICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZVJlc3BvbnNlRml4ZWRJRXM7CisgICAgdW5zaWduZWQgbG9uZyBSZXF1ZXN0SUVMZW5ndGg7CisgICAgdW5zaWduZWQgbG9uZyBPZmZzZXRSZXF1ZXN0SUVzOworICAgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgIEF2YWlsYWJsZVJlc3BvbnNlRml4ZWRJRXM7CiAgICAgTkRJU184MDJfMTFfQUlfUkVTRkkgICAgUmVzcG9uc2VGaXhlZElFczsKLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSZXNwb25zZUlFTGVuZ3RoOwotICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE9mZnNldFJlc3BvbnNlSUVzOworICAgIHVuc2lnbmVkIGxvbmcgUmVzcG9uc2VJRUxlbmd0aDsKKyAgICB1bnNpZ25lZCBsb25nIE9mZnNldFJlc3BvbnNlSUVzOwogfSBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiwgKlBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTjsKIAogCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NBc3NvY0luZm8gewogICAgIE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OICAgICBBc3NvY0luZm87Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFieUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU4rV0xBTl9CRUFDT05fRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU4rV0xBTl9CRUFDT05fRlJfTUFYTEVOXTsKICAgICAvLyBzdG9yZSBSZXFJRXMgc2V0IGJ5IE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04KLSAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdElFTGVuZ3RoOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnlSZXFJRXNbV0xBTl9CRUFDT05fRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBsb25nIFJlcXVlc3RJRUxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVJlcUlFc1tXTEFOX0JFQUNPTl9GUl9NQVhMRU5dOwogfSBTQXNzb2NJbmZvLCAqUFNBc3NvY0luZm87CiAvLy0tLQogCkBAIC0yMjQsOCArMjI0LDggQEAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeE1nbXRQYWNrZXQgewogCiAgICAgUFVXTEFOXzgwMjExSERSICAgICBwODAyMTFIZWFkZXI7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICBjYk1QRFVMZW47Ci0gICAgVUlOVCAgICAgICAgICAgICAgICBjYlBheWxvYWRMZW47CisgICAgdW5zaWduZWQgaW50IGNiTVBEVUxlbjsKKyAgICB1bnNpZ25lZCBpbnQgY2JQYXlsb2FkTGVuOwogCiB9IFNUeE1nbXRQYWNrZXQsICpQU1R4TWdtdFBhY2tldDsKIApAQCAtMjM1LDEyICsyMzUsMTIgQEAKIAogICAgIFBVV0xBTl84MDIxMUhEUiAgICAgcDgwMjExSGVhZGVyOwogICAgIFFXT1JEICAgICAgICAgICAgICAgcXdMb2NhbFRTRjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGNiTVBEVUxlbjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIGNiUGF5bG9hZExlbjsKLSAgICBVSU5UICAgICAgICAgICAgICAgIHVSU1NJOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlTUTsKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5UnhSYXRlOwotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlSeENoYW5uZWw7CisgICAgdW5zaWduZWQgaW50IGNiTVBEVUxlbjsKKyAgICB1bnNpZ25lZCBpbnQgY2JQYXlsb2FkTGVuOworICAgIHVuc2lnbmVkIGludCB1UlNTSTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5U1E7CisgICAgdW5zaWduZWQgY2hhciBieVJ4UmF0ZTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UnhDaGFubmVsOwogCiB9IFNSeE1nbXRQYWNrZXQsICpQU1J4TWdtdFBhY2tldDsKIApAQCAtMjUxLDcgKzI1MSw3IEBACiAKICAgICB2b2lkICogICAgICAgICAgICAgICAgICAgcEFkYXB0ZXI7CiAgICAgLy8gTUFDIGFkZHJlc3MKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlNQUNBZGRyW1dMQU5fQUREUl9MRU5dOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5TUFDQWRkcltXTEFOX0FERFJfTEVOXTsKIAogICAgIC8vIENvbmZpZ3VyYXRpb24gTW9kZQogICAgIFdNQUNfQ09ORklHX01PREUgICAgICAgIGVDb25maWdNb2RlOyAvLyBNQUMgcHJlLWNvbmZpZ2VkIG1vZGUKQEAgLTI2NCw4NiArMjY0LDg2IEBACiAgICAgV01BQ19CU1NfU1RBVEUgICAgICAgICAgZUN1cnJTdGF0ZTsgIC8vIE1BQyBjdXJyZW50IEJTUyBzdGF0ZQogCiAgICAgUEtub3duQlNTICAgICAgICAgICAgICAgcEN1cnJCU1M7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDU1NHSzsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieUNTU1BLOworICAgIHVuc2lnbmVkIGNoYXIgYnlDU1NHSzsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q1NTUEs7CiAKLS8vICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieU5ld1N1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKLS8vICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieU5ld0V4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOXTsKKy8vICAgIHVuc2lnbmVkIGNoYXIgYWJ5TmV3U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU5dOworLy8gICAgdW5zaWduZWQgY2hhciBhYnlOZXdFeHRTdXBwUmF0ZXNbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1JBVEVTX01BWExFTl07CiAKICAgICAvLyBDdXJyZW50IHN0YXRlIHZhcnMKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1Q3VyckNoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VyckV4dFN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VyclNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VyckJTU0lEW1dMQU5fQlNTSURfTEVOXTsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3Q3VyckNhcEluZm87Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0N1cnJBSUQ7Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0N1cnJBVElNV2luZG93OwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdDdXJyQmVhY29uUGVyaW9kOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJJc0RTOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5RVJQQ29udGV4dDsKKyAgICB1bnNpZ25lZCBpbnQJdUN1cnJDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyclN1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBhYnlDdXJyRXh0U3VwcFJhdGVzW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9SQVRFU19NQVhMRU4gKyAxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VyckJTU0lEW1dMQU5fQlNTSURfTEVOXTsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q3VyckNhcEluZm87CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJBSUQ7CisgICAgdW5zaWduZWQgc2hvcnQgd0N1cnJBVElNV2luZG93OworICAgIHVuc2lnbmVkIHNob3J0IHdDdXJyQmVhY29uUGVyaW9kOworICAgIGJvb2wgYklzRFM7CisgICAgdW5zaWduZWQgY2hhciBieUVSUENvbnRleHQ7CiAKICAgICBDTURfU1RBVEUgICAgICAgICAgICAgICBlQ29tbWFuZFN0YXRlOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVTY2FuQ2hhbm5lbDsKKyAgICB1bnNpZ25lZCBpbnQJdVNjYW5DaGFubmVsOwogCiAgICAgLy8gRGVzaXJlIGpvaW5uaW5nIEJTUyB2YXJzCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5RGVzaXJlU1NJRFtXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVCU1NJRFtXTEFOX0JTU0lEX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlEZXNpcmVTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5RGVzaXJlQlNTSURbV0xBTl9CU1NJRF9MRU5dOwogCiAgICAgLy8gQWRob2Mgb3IgQVAgY29uZmlndXJhdGlvbiB2YXJzCi0gIC8vQllURSAgICAgICAgICAgICAgICAgICAgYWJ5QWRIb2NTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdJQlNTQmVhY29uUGVyaW9kOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdJQlNTQVRJTVdpbmRvdzsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1SUJTU0NoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5SUJTU1N1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlBUEJCVHlwZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlXUEFJRVtNQVhfV1BBX0lFX0xFTl07Ci0gICAgV09SRCAgICAgICAgICAgICAgICAgICAgd1dQQUlFTGVuOworICAvL3Vuc2lnbmVkIGNoYXIgYWJ5QWRIb2NTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIHNob3J0IHdJQlNTQmVhY29uUGVyaW9kOworICAgIHVuc2lnbmVkIHNob3J0IHdJQlNTQVRJTVdpbmRvdzsKKyAgICB1bnNpZ25lZCBpbnQJdUlCU1NDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5SUJTU1N1cHBSYXRlc1tXTEFOX0lFSERSX0xFTiArIFdMQU5fUkFURVNfTUFYTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBieUFQQkJUeXBlOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5V1BBSUVbTUFYX1dQQV9JRV9MRU5dOworICAgIHVuc2lnbmVkIHNob3J0IHdXUEFJRUxlbjsKIAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVBc3NvY0NvdW50OwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJNb3JlRGF0YTsKKyAgICB1bnNpZ25lZCBpbnQJdUFzc29jQ291bnQ7CisgICAgYm9vbCBiTW9yZURhdGE7CiAKICAgICAvLyBTY2FuIHN0YXRlIHZhcnMKICAgICBXTUFDX1NDQU5fU1RBVEUgICAgICAgICBlU2NhblN0YXRlOwogICAgIFdNQUNfU0NBTl9UWVBFICAgICAgICAgIGVTY2FuVHlwZTsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1U2NhblN0YXJ0Q2g7Ci0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgdVNjYW5FbmRDaDsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3U2NhblN0ZXBzOwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVTY2FuQlNTVHlwZTsKKyAgICB1bnNpZ25lZCBpbnQJdVNjYW5TdGFydENoOworICAgIHVuc2lnbmVkIGludAl1U2NhbkVuZENoOworICAgIHVuc2lnbmVkIHNob3J0IHdTY2FuU3RlcHM7CisgICAgdW5zaWduZWQgaW50CXVTY2FuQlNTVHlwZTsKICAgICAvLyBEZXNpcmUgc2Nhbm5pZyB2YXJzCi0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5U2NhblNTSURbV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsgMV07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5U2NhbkJTU0lEW1dMQU5fQlNTSURfTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVNjYW5TU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5U2NhbkJTU0lEW1dMQU5fQlNTSURfTEVOXTsKIAogICAgIC8vIFByaXZhY3kKICAgICBXTUFDX0FVVEhFTlRJQ0FUSU9OX01PREUgZUF1dGhlbk1vZGU7CiAgICAgV01BQ19FTkNSWVBUSU9OX01PREUgICAgZUVuY3J5cHRpb25Nb2RlOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJTaGFyZUtleUFsZ29yaXRobTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlDaGFsbGVuZ2VbV0xBTl9DSEFMTEVOR0VfTEVOXTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUHJpdmFjeUludm9rZWQ7CisgICAgYm9vbCBiU2hhcmVLZXlBbGdvcml0aG07CisgICAgdW5zaWduZWQgY2hhciBhYnlDaGFsbGVuZ2VbV0xBTl9DSEFMTEVOR0VfTEVOXTsKKyAgICBib29sIGJQcml2YWN5SW52b2tlZDsKIAogICAgIC8vIFJlY2VpdmVkIGJlYWNvbiBzdGF0ZSB2YXJzCi0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYkluVElNOwotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGJNdWx0aWNhc3RUSU07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlEVElNQ291bnQ7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlEVElNUGVyaW9kOworICAgIGJvb2wgYkluVElNOworICAgIGJvb2wgYk11bHRpY2FzdFRJTTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RFRJTUNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgYnlEVElNUGVyaW9kOwogCiAgICAgLy8gUG93ZXIgc2F2aW5nIHN0YXRlIHZhcnMKICAgICBXTUFDX1BPV0VSX01PREUgICAgICAgICBlUFNNb2RlOwotICAgIFdPUkQgICAgICAgICAgICAgICAgICAgIHdMaXN0ZW5JbnRlcnZhbDsKLSAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3Q291bnRUb1dha2VVcDsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiSW5USU1XYWtlOwotICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBieVBTUGFja2V0UG9vbDsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBieVBTUGFja2V0UG9vbFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX05VTExEQVRBX0ZSX01BWExFTl07Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlJ4QmVhY29uSW5UQlRUV2FrZTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlQU1R4TWFwW01BWF9OT0RFX05VTSArIDFdOworICAgIHVuc2lnbmVkIHNob3J0IHdMaXN0ZW5JbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBzaG9ydCB3Q291bnRUb1dha2VVcDsKKyAgICBib29sIGJJblRJTVdha2U7CisgICAgdW5zaWduZWQgY2hhciAqcGJ5UFNQYWNrZXRQb29sOworICAgIHVuc2lnbmVkIGNoYXIgYnlQU1BhY2tldFBvb2xbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9OVUxMREFUQV9GUl9NQVhMRU5dOworICAgIGJvb2wgYlJ4QmVhY29uSW5UQlRUV2FrZTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVBTVHhNYXBbTUFYX05PREVfTlVNICsgMV07CiAKICAgICAvLyBtYW5hZ2VtZW50IGNvbW1hbmQgcmVsYXRlZAotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVDbWRCdXN5OwotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIHVDbWRIb3N0QVBCdXN5OworICAgIHVuc2lnbmVkIGludAl1Q21kQnVzeTsKKyAgICB1bnNpZ25lZCBpbnQJdUNtZEhvc3RBUEJ1c3k7CiAKICAgICAvLyBtYW5hZ2VtZW50IHBhY2tldCBwb29sCi0gICAgUEJZVEUgICAgICAgICAgICAgICAgICAgcGJ5TWdtdFBhY2tldFBvb2w7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlNZ210UGFja2V0UG9vbFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlNZ210UGFja2V0UG9vbDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5TWdtdFBhY2tldFBvb2xbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BM0ZSX01BWExFTl07CiAKIAogICAgIC8vIE9uZSBzZWNvbmQgY2FsbGJhY2sgdGltZXIKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAgICAgLy8gV1BBMiBQTUtJRCBDYWNoZQogICAgIFNQTUtJRENhY2hlICAgICAgICAgICAgIGdzUE1LSURDYWNoZTsKLSAgICBCT09MICAgICAgICAgICAgICAgICAgICBiUm9hbWluZzsKKyAgICBib29sIGJSb2FtaW5nOwogCiAgICAgLy8gcmF0ZSBmYWxsIGJhY2sgdmFycwogCkBAIC0zNzcsMTYgKzM3NywxNiBAQAogCiAKICAgICAvLyBmb3IgODAyLjExaAotICAgIEJPT0wgICAgICAgICAgICAgICAgICAgIGIxMWhFbmFibGU7Ci0gICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlN3aXRjaENoYW5uZWw7Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlOZXdDaGFubmVsOworICAgIGJvb2wgYjExaEVuYWJsZTsKKyAgICBib29sIGJTd2l0Y2hDaGFubmVsOworICAgIHVuc2lnbmVkIGNoYXIgYnlOZXdDaGFubmVsOwogICAgIFBXTEFOX0lFX01FQVNVUkVfUkVQICAgIHBDdXJyTWVhc3VyZUVJRFJlcDsKLSAgICBVSU5UICAgICAgICAgICAgICAgICAgICB1TGVuZ3RoT2ZSZXBFSURzOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGFieUN1cnJlbnRNU1JSZXFbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BM0ZSX01BWExFTl07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5Q3VycmVudE1TUlJlcFtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKLSAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlJRUNvdW50cnlbV0xBTl9BM0ZSX01BWExFTl07Ci0gICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5SUJTU0RGU093bmVyWzZdOwotICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5SUJTU0RGU1JlY292ZXJ5OworICAgIHVuc2lnbmVkIGludAl1TGVuZ3RoT2ZSZXBFSURzOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5Q3VycmVudE1TUlJlcVtzaXplb2YoU1R4TWdtdFBhY2tldCkgKyBXTEFOX0EzRlJfTUFYTEVOXTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUN1cnJlbnRNU1JSZXBbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BM0ZSX01BWExFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlJRUNvdW50cnlbV0xBTl9BM0ZSX01BWExFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlJQlNTREZTT3duZXJbNl07CisgICAgdW5zaWduZWQgY2hhciBieUlCU1NERlNSZWNvdmVyeTsKIAogICAgIHN0cnVjdCBza19idWZmICBza2I7CiAKQEAgLTQzMiw4ICs0MzIsOCBAQAogdk1nckRpc2Fzc29jQmVnaW5TdGEoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210LAotICAgIFBCWVRFICBhYnlEZXN0QWRkcmVzcywKLSAgICBXT1JEICAgIHdSZWFzb24sCisgICAgdW5zaWduZWQgY2hhciAqYWJ5RGVzdEFkZHJlc3MsCisgICAgdW5zaWduZWQgc2hvcnQgd1JlYXNvbiwKICAgICBQQ01EX1NUQVRVUyBwU3RhdHVzCiAgICAgKTsKIApAQCAtNDc1LDIyICs0NzUsMjIgQEAKIHZNZ3JEZUF1dGhlbkJlZ2luU3RhKAogICAgIHZvaWQgKmhEZXZpY2VDb250ZXh0LAogICAgIFBTTWdtdE9iamVjdCAgcE1nbXQsCi0gICAgUEJZVEUgICBhYnlEZXN0QWRkcmVzcywKLSAgICBXT1JEICAgIHdSZWFzb24sCisgICAgdW5zaWduZWQgY2hhciAqYWJ5RGVzdEFkZHJlc3MsCisgICAgdW5zaWduZWQgc2hvcnQgd1JlYXNvbiwKICAgICBQQ01EX1NUQVRVUyBwU3RhdHVzCiAgICAgKTsKIAotQk9PTAorYm9vbAogYk1nclByZXBhcmVCZWFjb25Ub1NlbmQoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCiAgICAgUFNNZ210T2JqZWN0IHBNZ210CiAgICAgKTsKIAogCi1CT09MCitib29sCiBiQWRkX1BNS0lEX0NhbmRpZGF0ZSAoCiAgICAgdm9pZCAqaERldmljZUNvbnRleHQsCi0gICAgUEJZVEUgICAgICAgICAgcGJ5QlNTSUQsCisgICAgdW5zaWduZWQgY2hhciAqcGJ5QlNTSUQsCiAgICAgUFNSU05DYXBPYmplY3QgcHNSU05DYXBPYmoKICAgICApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuYwppbmRleCBkYTVjODE0Li42MWFjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmMKQEAgLTQ1LDEyICs0NSwxMiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9JTkZPOwogCi1jb25zdCBCWVRFIGFieU9VSTAwWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAwIH07Ci1jb25zdCBCWVRFIGFieU9VSTAxWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAxIH07Ci1jb25zdCBCWVRFIGFieU9VSTAyWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAyIH07Ci1jb25zdCBCWVRFIGFieU9VSTAzWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAzIH07Ci1jb25zdCBCWVRFIGFieU9VSTA0WzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA0IH07Ci1jb25zdCBCWVRFIGFieU9VSTA1WzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA1IH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTAwWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAwIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTAxWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAxIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTAyWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAyIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTAzWzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAzIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTA0WzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA0IH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSTA1WzRdID0geyAweDAwLCAweDUwLCAweGYyLCAweDA1IH07CiAKIAogLyorCkBAIC04Myw5ICs4Myw5IEBACiAgICAgcEJTU0xpc3QtPndBdXRoQ291bnQgPSAwOwogICAgIHBCU1NMaXN0LT5ieURlZmF1bHRLX2FzX1BLID0gMDsKICAgICBwQlNTTGlzdC0+YnlSZXBsYXlJZHggPSAwOwotICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IEZBTFNFOworICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IGZhbHNlOwogICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLndSU05DYXAgPSAwOwotICAgIHBCU1NMaXN0LT5iV1BBVmFsaWQgPSBGQUxTRTsKKyAgICBwQlNTTGlzdC0+YldQQVZhbGlkID0gZmFsc2U7CiB9CiAKIApAQCAtMTEyLDcgKzExMiw3IEBACiB7CiAgICAgUFdMQU5fSUVfUlNOX0FVVEggIHBJRV9SU05fQXV0aCA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgICAgIGksIGosIG0sIG4gPSAwOwotICAgIFBCWVRFICAgICAgICAgICAgICBwYnlDYXBzOworICAgIHVuc2lnbmVkIGNoYXIgKnBieUNhcHM7CiAKICAgICBXUEFfQ2xlYXJSU04ocEJTU0xpc3QpOwogCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgaiA9IDA7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndQS0NvdW50OiAlZCwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpOiAlenVcbiIsIHBSU04tPndQS0NvdW50LCBzaXplb2YocEJTU0xpc3QtPmFieVBLVHlwZSkpOwotICAgICAgICAgICAgZm9yKGkgPSAwOyAoaSA8IHBSU04tPndQS0NvdW50KSAmJiAoaiA8IHNpemVvZihwQlNTTGlzdC0+YWJ5UEtUeXBlKS9zaXplb2YoQllURSkpOyBpKyspIHsKKyAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwUlNOLT53UEtDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU0xpc3QtPmFieVBLVHlwZSkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYocFJTTi0+bGVuID49IDEyK2kqNCs0KSB7IC8vb3VpMSg0KSt2ZXIoMikrR0tTKDQpK1BLU0NudCgyKStQS1MoNCppKQogICAgICAgICAgICAgICAgICAgICBpZiAoICFtZW1jbXAocFJTTi0+UEtTTGlzdFtpXS5hYnlPVUksIGFieU9VSTAwLCA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5hYnlQS1R5cGVbaisrXSA9IFdQQV9OT05FOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIC8vREJHX1BSTl9HUlAxNCgoImFieVBLVHlwZVslZF06ICVYXG4iLCBqLTEsIHBCU1NMaXN0LT5hYnlQS1R5cGVbai0xXSkpOwogICAgICAgICAgICAgfSAvL2ZvcgotICAgICAgICAgICAgcEJTU0xpc3QtPndQS0NvdW50ID0gKFdPUkQpajsKKyAgICAgICAgICAgIHBCU1NMaXN0LT53UEtDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClqOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3UEtDb3VudDogJWRcbiIsIHBCU1NMaXN0LT53UEtDb3VudCk7CiAgICAgICAgIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgICAgICBqID0gMDsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8id0F1dGhDb3VudDogJWQsIHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpOiAlenVcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJRV9SU05fQXV0aC0+d0F1dGhDb3VudCwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlBdXRoVHlwZSkpOwotICAgICAgICAgICAgZm9yKGkgPSAwOyAoaSA8IHBJRV9SU05fQXV0aC0+d0F1dGhDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU0xpc3QtPmFieUF1dGhUeXBlKS9zaXplb2YoQllURSkpOyBpKyspIHsKKyAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwSUVfUlNOX0F1dGgtPndBdXRoQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlBdXRoVHlwZSkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYocFJTTi0+bGVuID49IDE0KzQrKG0raSkqNCkgeyAvL291aTEoNCkrdmVyKDIpK0dLUyg0KStQS1NDbnQoMikrUEtTKDQqbSkrQUtDKDIpK0FLUyg0KmkpCiAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwSUVfUlNOX0F1dGgtPkF1dGhLU0xpc3RbaV0uYWJ5T1VJLCBhYnlPVUkwMSwgNCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+YWJ5QXV0aFR5cGVbaisrXSA9IFdQQV9BVVRIX0lFRUU4MDJfMVg7CkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICAvL0RCR19QUk5fR1JQMTQoKCJhYnlBdXRoVHlwZVslZF06ICVYXG4iLCBqLTEsIHBCU1NMaXN0LT5hYnlBdXRoVHlwZVtqLTFdKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZihqID4gMCkKLSAgICAgICAgICAgICAgICBwQlNTTGlzdC0+d0F1dGhDb3VudCA9IChXT1JEKWo7CisgICAgICAgICAgICAgICAgcEJTU0xpc3QtPndBdXRoQ291bnQgPSAodW5zaWduZWQgc2hvcnQpajsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8id0F1dGhDb3VudDogJWRcbiIsIHBCU1NMaXN0LT53QXV0aENvdW50KTsKICAgICAgICAgfQogCkBAIC0yMDcsMTcgKzIwNywxNyBAQAogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyIxNCs0KyhtK24pKjQ6ICVkXG4iLCAxNCs0KyhtK24pKjQpOwogCiAgICAgICAgICAgICBpZihwUlNOLT5sZW4rMiA+PSAxNCs0KyhtK24pKjQpIHsgLy9vdWkxKDQpK3ZlcigyKStHS1MoNCkrUEtTQ250KDIpK1BLUyg0Km0pK0FLQygyKStBS1MoNCpuKStDYXAoMikKLSAgICAgICAgICAgICAgICBwYnlDYXBzID0gKFBCWVRFKXBJRV9SU05fQXV0aC0+QXV0aEtTTGlzdFtuXS5hYnlPVUk7CisgICAgICAgICAgICAgICAgcGJ5Q2FwcyA9ICh1bnNpZ25lZCBjaGFyICopcElFX1JTTl9BdXRoLT5BdXRoS1NMaXN0W25dLmFieU9VSTsKICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+YnlEZWZhdWx0S19hc19QSyA9ICgqcGJ5Q2FwcykgJiBXUEFfR1JPVVBGTEFHOwogICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5ieVJlcGxheUlkeCA9IDIgPDwgKCgqcGJ5Q2FwcyA+PiBXUEFfUkVQTEFZQklUU1NISUZUKSAmIFdQQV9SRVBMQVlCSVRTKTsKLSAgICAgICAgICAgICAgICBwQlNTTGlzdC0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSBUUlVFOwotICAgICAgICAgICAgICAgIHBCU1NMaXN0LT5zUlNOQ2FwT2JqLndSU05DYXAgPSAqKFBXT1JEKXBieUNhcHM7CisgICAgICAgICAgICAgICAgcEJTU0xpc3QtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwQlNTTGlzdC0+c1JTTkNhcE9iai53UlNOQ2FwID0gKih1bnNpZ25lZCBzaG9ydCAqKXBieUNhcHM7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDE0KCgicGJ5Q2FwczogJVhcbiIsICpwYnlDYXBzKSk7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDE0KCgiYnlEZWZhdWx0S19hc19QSzogJVhcbiIsIHBCU1NMaXN0LT5ieURlZmF1bHRLX2FzX1BLKSk7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX0dSUDE0KCgiYnlSZXBsYXlJZHg6ICVYXG4iLCBwQlNTTGlzdC0+YnlSZXBsYXlJZHgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwQlNTTGlzdC0+YldQQVZhbGlkID0gVFJVRTsKKyAgICAgICAgcEJTU0xpc3QtPmJXUEFWYWxpZCA9IHRydWU7CiAgICAgfQogfQogCkBAIC0yMzcsMjQgKzIzNywyNCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lLgogICoKIC0qLwotQk9PTAorYm9vbAogV1BBX1NlYXJjaFJTTiAoCi0gICAgQllURSAgICAgICAgICAgICAgICBieUNtZCwKLSAgICBCWVRFICAgICAgICAgICAgICAgIGJ5RW5jcnlwdCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5Q21kLAorICAgIHVuc2lnbmVkIGNoYXIgYnlFbmNyeXB0LAogICAgIFBLbm93bkJTUyAgICAgICAgcEJTU0xpc3QKICAgICApCiB7CiAgICAgaW50IGlpOwotICAgIEJZVEUgYnlQS1R5cGUgPSBXUEFfTk9ORTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5UEtUeXBlID0gV1BBX05PTkU7CiAKLSAgICBpZiAocEJTU0xpc3QtPmJXUEFWYWxpZCA9PSBGQUxTRSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIGlmIChwQlNTTGlzdC0+YldQQVZhbGlkID09IGZhbHNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2goYnlDbWQpIHsKICAgICBjYXNlIDA6CiAKICAgICAgICAgaWYgKGJ5RW5jcnlwdCAhPSBwQlNTTGlzdC0+YnlHS1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKHBCU1NMaXN0LT53UEtDb3VudCA+IDApIHsKICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IHBCU1NMaXN0LT53UEtDb3VudDsgaWkgKyspIHsKQEAgLTI2OCw5ICsyNjgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgYnlQS1R5cGUgPSBXUEFfV0VQMTA0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJ5RW5jcnlwdCAhPSBieVBLVHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gdHJ1ZTsKIC8vICAgICAgICBpZiAocEJTU0xpc3QtPndBdXRoQ291bnQgPiAwKQogLy8gICAgICAgICAgICBmb3IgKGlpPTA7IGlpIDwgcEJTU0xpc3QtPndBdXRoQ291bnQ7IGlpICsrKQogLy8gICAgICAgICAgICAgICAgaWYgKGJ5QXV0aCA9PSBwQlNTTGlzdC0+YWJ5QXV0aFR5cGVbaWldKQpAQCAtMjgwLDcgKzI4MCw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8qKwpAQCAtMjk3LDIwICsyOTcsMjAgQEAKICAqIFJldHVybiBWYWx1ZTogbm9uZS4KICAqCiAtKi8KLUJPT0wKK2Jvb2wKIFdQQWJfSXNfUlNOICgKICAgICBQV0xBTl9JRV9SU05fRVhUIHBSU04KICAgICApCiB7CiAgICAgaWYgKHBSU04gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoKHBSU04tPmxlbiA+PSA2KSAmJiAvLyBvdWkxKDQpK3ZlcigyKQogICAgICAgICAocFJTTi0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfUlNOX1dQQSkgJiYgICFtZW1jbXAocFJTTi0+YWJ5T1VJLCBhYnlPVUkwMSwgNCkgJiYKICAgICAgICAgKHBSU04tPndWZXJzaW9uID09IDEpKSB7Ci0gICAgICAgIHJldHVybiBUUlVFOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhLmgKaW5kZXggODBkOTkwYi4uOTIxZmQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYS5oCkBAIC02OSwxNCArNjksMTQgQEAKICAgICBQV0xBTl9JRV9SU05fRVhUIHBSU04KICAgICApOwogCi1CT09MCitib29sCiBXUEFfU2VhcmNoUlNOKAotICAgIEJZVEUgICAgICAgICAgICAgICAgYnlDbWQsCi0gICAgQllURSAgICAgICAgICAgICAgICBieUVuY3J5cHQsCisgICAgdW5zaWduZWQgY2hhciBieUNtZCwKKyAgICB1bnNpZ25lZCBjaGFyIGJ5RW5jcnlwdCwKICAgICBQS25vd25CU1MgICAgICAgIHBCU1NMaXN0CiAgICAgKTsKIAotQk9PTAorYm9vbAogV1BBYl9Jc19SU04oCiAgICAgUFdMQU5fSUVfUlNOX0VYVCBwUlNOCiAgICAgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMKaW5kZXggN2E0MmEwYS4uODA1MTY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGEyLmMKQEAgLTQyLDE0ICs0MiwxNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1jb25zdCBCWVRFIGFieU9VSUdLWzRdICAgICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDAgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJV0VQNDBbNF0gICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMSB9OwotY29uc3QgQllURSBhYnlPVUlXRVAxMDRbNF0gID0geyAweDAwLCAweDBGLCAweEFDLCAweDA1IH07Ci1jb25zdCBCWVRFIGFieU9VSVRLSVBbNF0gICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDIgfTsKLWNvbnN0IEJZVEUgYWJ5T1VJQ0NNUFs0XSAgICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwNCB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlHS1s0XSAgICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAwIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSVdFUDQwWzRdICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDEgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJV0VQMTA0WzRdICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwNSB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlUS0lQWzRdICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAyIH07Citjb25zdCB1bnNpZ25lZCBjaGFyIGFieU9VSUNDTVBbNF0gICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDQgfTsKIAotY29uc3QgQllURSBhYnlPVUk4MDIxWFs0XSAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAxIH07Ci1jb25zdCBCWVRFIGFieU9VSVBTS1s0XSAgICAgPSB7IDB4MDAsIDB4MEYsIDB4QUMsIDB4MDIgfTsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgYWJ5T1VJODAyMVhbNF0gICA9IHsgMHgwMCwgMHgwRiwgMHhBQywgMHgwMSB9OworY29uc3QgdW5zaWduZWQgY2hhciBhYnlPVUlQU0tbNF0gICAgID0geyAweDAwLCAweDBGLCAweEFDLCAweDAyIH07CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTc5LDcgKzc5LDcgQEAKIHsKICAgICBpbnQgaWk7CiAKLSAgICBwQlNTTm9kZS0+YldQQTJWYWxpZCA9IEZBTFNFOworICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gZmFsc2U7CiAKICAgICBwQlNTTm9kZS0+YnlDU1NHSyA9IFdMQU5fMTFpX0NTU19DQ01QOwogICAgIGZvciAoaWk9MDsgaWkgPCA0OyBpaSArKykKQEAgLTg4LDcgKzg4LDcgQEAKICAgICBmb3IgKGlpPTA7IGlpIDwgNDsgaWkgKyspCiAgICAgICAgIHBCU1NOb2RlLT5hYnlBS01TU0F1dGhUeXBlW2lpXSA9IFdMQU5fMTFpX0FLTVNTXzgwMl8xWDsKICAgICBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50ID0gMTsKLSAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSBGQUxTRTsKKyAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai5iUlNOQ2FwRXhpc3QgPSBmYWxzZTsKICAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai53UlNOQ2FwID0gMDsKIH0KIApAQCAtMTE0LDkgKzExNCw5IEBACiAgICAgKQogewogICAgIGludCAgICAgICAgICAgICAgICAgaSwgajsKLSAgICBXT1JEICAgICAgICAgICAgICAgIG0gPSAwLCBuID0gMDsKLSAgICBQQllURSAgICAgICAgICAgICAgIHBieU9VSTsKLSAgICBCT09MICAgICAgICAgICAgICAgIGJVc2VHSyA9IEZBTFNFOworICAgIHVuc2lnbmVkIHNob3J0IG0gPSAwLCBuID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlPVUk7CisgICAgYm9vbCBiVXNlR0sgPSBmYWxzZTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iV1BBMl9QYXJzZVJTTjogWyVkXVxuIiwgcFJTTi0+bGVuKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAKICAgICBpZiAocFJTTi0+bGVuID09IDIpIHsgLy8gdmVyKDIpCiAgICAgICAgIGlmICgocFJTTi0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfUlNOKSAmJiAocFJTTi0+d1ZlcnNpb24gPT0gMSkpIHsKLSAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU5LDIxICsxNTksMjEgQEAKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyI4MDIuMTFpIENTUzogJVhcbiIsIHBCU1NOb2RlLT5ieUNTU0dLKTsKIAogICAgICAgICBpZiAocFJTTi0+bGVuID09IDYpIHsKLSAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gVFJVRTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT5iV1BBMlZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwUlNOLT5sZW4gPj0gOCkgeyAvLyB2ZXIoMikgKyBHSyg0KSArIFBLIGNvdW50KDIpCi0gICAgICAgICAgICBwQlNTTm9kZS0+d0NTU1BLQ291bnQgPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNF0pKTsKKyAgICAgICAgICAgIHBCU1NOb2RlLT53Q1NTUEtDb3VudCA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzRdKSk7CiAgICAgICAgICAgICBqID0gMDsKICAgICAgICAgICAgIHBieU9VSSA9ICYocFJTTi0+YWJ5UlNOWzZdKTsKIAotICAgICAgICAgICAgZm9yIChpID0gMDsgKGkgPCBwQlNTTm9kZS0+d0NTU1BLQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NOb2RlLT5hYnlDU1NQSykvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyAoaSA8IHBCU1NOb2RlLT53Q1NTUEtDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU05vZGUtPmFieUNTU1BLKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBpKyspIHsKIAogICAgICAgICAgICAgICAgIGlmIChwUlNOLT5sZW4gPj0gOCtpKjQrNCkgeyAvLyB2ZXIoMikrR0soNCkrUEtDbnQoMikrUEtTKDQqaSkKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBieU9VSSwgYWJ5T1VJR0ssIDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTm9kZS0+YWJ5Q1NTUEtbaisrXSA9IFdMQU5fMTFpX0NTU19VU0VfR1JPVVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiVXNlR0sgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYlVzZUdLID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIW1lbWNtcChwYnlPVUksIGFieU9VSVdFUDQwLCA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52aWFsaWQgQ1NTLCBjb250aW51ZSB0byBwYXJzaW5nCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFtZW1jbXAocGJ5T1VJLCBhYnlPVUlUS0lQLCA0KSkgewpAQCAtMTk1LDcgKzE5NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSAvL2ZvcgogCi0gICAgICAgICAgICBpZiAoYlVzZUdLID09IFRSVUUpIHsKKyAgICAgICAgICAgIGlmIChiVXNlR0sgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgIGlmIChqICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCBDU1MsIFRoaXMgc2hvdWxkIGJlIG9ubHkgUEsgQ1NTLgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMDksMTcgKzIwOSwxNyBAQAogICAgICAgICAgICAgICAgIC8vIGludmFsaWQgQ1NTLCBObyB2YWxpZCBQSy4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwQlNTTm9kZS0+d0NTU1BLQ291bnQgPSAoV09SRClqOworICAgICAgICAgICAgcEJTU05vZGUtPndDU1NQS0NvdW50ID0gKHVuc2lnbmVkIHNob3J0KWo7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndDU1NQS0NvdW50OiAlZFxuIiwgcEJTU05vZGUtPndDU1NQS0NvdW50KTsKICAgICAgICAgfQogCi0gICAgICAgIG0gPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNF0pKTsKKyAgICAgICAgbSA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzRdKSk7CiAKICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMCttKjQpIHsgLy8gdmVyKDIpICsgR0soNCkgKyBQSyBjb3VudCgyKSArIFBLUyg0Km0pICsgQUtNU1MgY291bnQoMikKLSAgICAgICAgICAgIHBCU1NOb2RlLT53QUtNU1NBdXRoQ291bnQgPSAqKChQV09SRCkgJihwUlNOLT5hYnlSU05bNis0Km1dKSk7OworICAgICAgICAgICAgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCA9ICooKHVuc2lnbmVkIHNob3J0ICopICYocFJTTi0+YWJ5UlNOWzYrNCptXSkpOzsKICAgICAgICAgICAgIGogPSAwOwogICAgICAgICAgICAgcGJ5T1VJID0gJihwUlNOLT5hYnlSU05bOCs0Km1dKTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IChpIDwgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU05vZGUtPmFieUFLTVNTQXV0aFR5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgeworICAgICAgICAgICAgZm9yIChpID0gMDsgKGkgPCBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50KSAmJiAoaiA8IHNpemVvZihwQlNTTm9kZS0+YWJ5QUtNU1NBdXRoVHlwZSkvc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMCsobStpKSo0KzQpIHsgLy8gdmVyKDIpK0dLKDQpK1BLQ250KDIpK1BLUyg0Km0pK0FLTVNTKDIpK0FLUyg0KmkpCiAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwYnlPVUksIGFieU9VSTgwMjFYLCA0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBCU1NOb2RlLT5hYnlBS01TU0F1dGhUeXBlW2orK10gPSBXTEFOXzExaV9BS01TU184MDJfMVg7CkBAIC0yMzIsMTcgKzIzMiwxNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBCU1NOb2RlLT53QUtNU1NBdXRoQ291bnQgPSAoV09SRClqOworICAgICAgICAgICAgcEJTU05vZGUtPndBS01TU0F1dGhDb3VudCA9ICh1bnNpZ25lZCBzaG9ydClqOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3QUtNU1NBdXRoQ291bnQ6ICVkXG4iLCBwQlNTTm9kZS0+d0FLTVNTQXV0aENvdW50KTsKIAotICAgICAgICAgICAgbiA9ICooKFBXT1JEKSAmKHBSU04tPmFieVJTTls2KzQqbV0pKTs7CisgICAgICAgICAgICBuID0gKigodW5zaWduZWQgc2hvcnQgKikgJihwUlNOLT5hYnlSU05bNis0Km1dKSk7OwogICAgICAgICAgICAgaWYgKHBSU04tPmxlbiA+PSAxMis0Km0rNCpuKSB7IC8vIHZlcigyKStHSyg0KStQS0NudCgyKStQS1MoNCptKStBS01TU0NudCgyKStBS01TUyg0Km4pK0NhcCgyKQotICAgICAgICAgICAgICAgIHBCU1NOb2RlLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgcEJTU05vZGUtPnNSU05DYXBPYmoud1JTTkNhcCA9ICooKFBXT1JEKSAmKHBSU04tPmFieVJTTls4KzQqbSs0Km5dKSk7CisgICAgICAgICAgICAgICAgcEJTU05vZGUtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBwQlNTTm9kZS0+c1JTTkNhcE9iai53UlNOQ2FwID0gKigodW5zaWduZWQgc2hvcnQgKikgJihwUlNOLT5hYnlSU05bOCs0Km0rNCpuXSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vaWdub3JlIFBNS0lEIGxpc3RzIGJjcyBvbmx5IChSZSlBc3NvY3JlcXVlc3QgaGFzIHRoaXMgZmllbGQKLSAgICAgICAgcEJTU05vZGUtPmJXUEEyVmFsaWQgPSBUUlVFOworICAgICAgICBwQlNTTm9kZS0+YldQQTJWYWxpZCA9IHRydWU7CiAgICAgfQogfQogCkBAIC0yNjEsMTYgKzI2MSwxNiBAQAogICogUmV0dXJuIFZhbHVlOiBsZW5ndGggb2YgSUVzLgogICoKIC0qLwotVUlOVAordW5zaWduZWQgaW50CiBXUEEydVNldElFcygKICAgICB2b2lkICpwTWdtdEhhbmRsZSwKICAgICBQV0xBTl9JRV9SU04gcFJTTklFcwogICAgICkKIHsKICAgICBQU01nbXRPYmplY3QgICAgcE1nbXQgPSAoUFNNZ210T2JqZWN0KSBwTWdtdEhhbmRsZTsKLSAgICBQQllURSAgICAgICAgICAgcGJ5QnVmZmVyID0gTlVMTDsKLSAgICBVSU5UICAgICAgICAgICAgaWkgPSAwOwotICAgIFBXT1JEICAgICAgICAgICBwd1BNS0lEID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCdWZmZXIgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBpaSA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgKnB3UE1LSUQgPSBOVUxMOwogCiAgICAgaWYgKHBSU05JRXMgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4oMCk7CkBAIC0yNzksNyArMjc5LDcgQEAKICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spKSAmJgogICAgICAgICAocE1nbXQtPnBDdXJyQlNTICE9IE5VTEwpKSB7CiAgICAgICAgIC8qIFdQQTIgSUUgKi8KLSAgICAgICAgcGJ5QnVmZmVyID0gKFBCWVRFKSBwUlNOSUVzOworICAgICAgICBwYnlCdWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBwUlNOSUVzOwogICAgICAgICBwUlNOSUVzLT5ieUVsZW1lbnRJRCA9IFdMQU5fRUlEX1JTTjsKICAgICAgICAgcFJTTklFcy0+bGVuID0gNjsgLy9WZXJzaW9uKDIpK0dLKDQpCiAgICAgICAgIHBSU05JRXMtPndWZXJzaW9uID0gMTsKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICBwUlNOSUVzLT5sZW4gKz02OwogCiAgICAgICAgIC8vIFJTTiBDYXBhYmlsaXRlcwotICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5zUlNOQ2FwT2JqLmJSU05DYXBFeGlzdCA9PSBUUlVFKSB7CisgICAgICAgIGlmIChwTWdtdC0+cEN1cnJCU1MtPnNSU05DYXBPYmouYlJTTkNhcEV4aXN0ID09IHRydWUpIHsKICAgICAgICAgICAgIG1lbWNweSgmcFJTTklFcy0+YWJ5UlNOWzE2XSwgJnBNZ210LT5wQ3VyckJTUy0+c1JTTkNhcE9iai53UlNOQ2FwLCAyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBSU05JRXMtPmFieVJTTlsxNl0gPSAwOwpAQCAtMzM5LDEwICszMzksMTAgQEAKICAgICAgICAgcFJTTklFcy0+bGVuICs9MjsKIAogICAgICAgICBpZiAoKHBNZ210LT5nc1BNS0lEQ2FjaGUuQlNTSURJbmZvQ291bnQgPiAwKSAmJgotICAgICAgICAgICAgKHBNZ210LT5iUm9hbWluZyA9PSBUUlVFKSAmJgorICAgICAgICAgICAgKHBNZ210LT5iUm9hbWluZyA9PSB0cnVlKSAmJgogICAgICAgICAgICAgKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfV1BBMikpIHsKICAgICAgICAgICAgIC8vIFJTTiBQTUtJRAotICAgICAgICAgICAgcHdQTUtJRCA9IChQV09SRCkoJnBSU05JRXMtPmFieVJTTlsxOF0pOyAgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKKyAgICAgICAgICAgIHB3UE1LSUQgPSAodW5zaWduZWQgc2hvcnQgKikoJnBSU05JRXMtPmFieVJTTlsxOF0pOyAgLy8gUG9pbnQgdG8gUE1LSUQgY291bnQKICAgICAgICAgICAgICpwd1BNS0lEID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBQTUtJRCBjb3VudAogICAgICAgICAgICAgcGJ5QnVmZmVyID0gJnBSU05JRXMtPmFieVJTTlsyMF07ICAgICAgICAgICAvLyBQb2ludCB0byBQTUtJRCBsaXN0CiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBwTWdtdC0+Z3NQTUtJRENhY2hlLkJTU0lESW5mb0NvdW50OyBpaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYTIuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCmluZGV4IDcyMDBkYjMuLjcxODIwOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhMi5oCkBAIC00MCwxMiArNDAsMTIgQEAKICNkZWZpbmUgTUFYX1BNS0lEX0NBQ0hFICAgICAgICAgMTYKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnc1BNS0lESW5mbyB7Ci0gICAgQllURSAgICBhYnlCU1NJRFs2XTsKLSAgICBCWVRFICAgIGFieVBNS0lEWzE2XTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUJTU0lEWzZdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5UE1LSURbMTZdOwogfSBQTUtJREluZm8sICpQUE1LSURJbmZvOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUE1LSURDYWNoZSB7Ci0gICAgVUxPTkcgICAgICAgQlNTSURJbmZvQ291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBCU1NJREluZm9Db3VudDsKICAgICBQTUtJREluZm8gICBCU1NJREluZm9bTUFYX1BNS0lEX0NBQ0hFXTsKIH0gU1BNS0lEQ2FjaGUsICpQU1BNS0lEQ2FjaGU7CiAKQEAgLTY5LDcgKzY5LDcgQEAKICAgICBQV0xBTl9JRV9SU04gICAgIHBSU04KICAgICApOwogCi1VSU5UCit1bnNpZ25lZCBpbnQKIFdQQTJ1U2V0SUVzKAogICAgIHZvaWQgKnBNZ210SGFuZGxlLAogICAgIFBXTEFOX0lFX1JTTiBwUlNOSUVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYwppbmRleCAyMmMyZmFiLi4wMTQyMzM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dwYWN0bC5jCkBAIC0xOTksMTYgKzE5OSwxNiBAQAogICoKICAqLwogCi0gaW50IHdwYV9zZXRfa2V5cyhQU0RldmljZSBwRGV2aWNlLCB2b2lkICpjdHgsIEJPT0wgIGZjcGZrZXJuZWwpCisgaW50IHdwYV9zZXRfa2V5cyhQU0RldmljZSBwRGV2aWNlLCB2b2lkICpjdHgsIGJvb2wgZmNwZmtlcm5lbCkKIHsKICAgICBzdHJ1Y3Qgdmlhd2dldF93cGFfcGFyYW0gKnBhcmFtPWN0eDsKICAgICBQU01nbXRPYmplY3QgcE1nbXQgPSBwRGV2aWNlLT5wTWdtdDsKLSAgICBEV09SRCAgIGR3S2V5SW5kZXggPSAwOwotICAgIEJZVEUgICAgYWJ5S2V5W01BWF9LRVlfTEVOXTsKLSAgICBCWVRFICAgIGFieVNlcVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgbG9uZyBkd0tleUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGFieUtleVtNQVhfS0VZX0xFTl07CisgICAgdW5zaWduZWQgY2hhciBhYnlTZXFbTUFYX0tFWV9MRU5dOwogICAgIFFXT1JEICAgS2V5UlNDOwogLy8gICAgTkRJU184MDJfMTFfS0VZX1JTQyBLZXlSU0M7Ci0gICAgQllURSAgICBieUtleURlY01vZGUgPSBLRVlfQ1RMX1dFUDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ5S2V5RGVjTW9kZSA9IEtFWV9DVExfV0VQOwogCWludCByZXQgPSAwOwogCWludCB1dSwgaWk7CiAKQEAgLTIxOSw5ICsyMTksOSBAQAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInBhcmFtLT51LndwYV9rZXkuYWxnX25hbWUgPSAlZCBcbiIsIHBhcmFtLT51LndwYV9rZXkuYWxnX25hbWUpOwogCWlmIChwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfTk9ORSkgewogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7Ci0gICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gRkFMU0U7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gZmFsc2U7CiAgICAgICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSAwOwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBGQUxTRTsKKyAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gZmFsc2U7CiAgICAgICAgIEtleXZSZW1vdmVBbGxXRVBLZXkoJihwRGV2aWNlLT5zS2V5KSwgcERldmljZS0+UG9ydE9mZnNldCk7CiAgICAgICAgIGZvciAodXU9MDsgdXU8TUFYX0tFWV9UQUJMRTsgdXUrKykgewogICAgICAgICAgICAgTUFDdkRpc2FibGVLZXlFbnRyeShwRGV2aWNlLT5Qb3J0T2Zmc2V0LCB1dSk7CkBAIC0yNDMsNyArMjQzLDcgQEAKIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgIAl9CiAKLSAgICBkd0tleUluZGV4ID0gKERXT1JEKShwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCk7CisgICAgZHdLZXlJbmRleCA9ICh1bnNpZ25lZCBsb25nKShwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCk7CiAKIAlpZiAocGFyYW0tPnUud3BhX2tleS5hbGdfbmFtZSA9PSBXUEFfQUxHX1dFUCkgewogICAgICAgICBpZiAoZHdLZXlJbmRleCA+IDMpIHsKQEAgLTI1MSw4ICsyNTEsOCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKHBhcmFtLT51LndwYV9rZXkuc2V0X3R4KSB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9IChCWVRFKWR3S2V5SW5kZXg7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YlRyYW5zbWl0S2V5ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpZHdLZXlJbmRleDsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSB0cnVlOwogCQkgICAgICAgIGR3S2V5SW5kZXggfD0gKDEgPDwgMzEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKQEAgLTI2Niw3ICsyNjYsNyBAQAogCiAgICAgICAgIH0KICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IFRSVUU7CisgICAgICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM1MSwyNiArMzUxLDI2IEBACiAgICAgfQogCiAgICAvLyBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MoJnBhcmFtLT5hZGRyWzBdKSB8fCAocGFyYW0tPmFkZHIgPT0gTlVMTCkpIHsKLSAgICAgICAgLy8gSWYgSVNfQlJPQURDQVNUX0FERFJFU1MsIHNldCB0aGUga2V5IGFzIGV2ZXJ5IGtleSBlbnRyeSdzIGdyb3VwIGtleS4KKyAgICBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoJnBhcmFtLT5hZGRyWzBdKSB8fCAocGFyYW0tPmFkZHIgPT0gTlVMTCkpIHsKKyAgICAgICAgLy8gSWYgaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIsIHNldCB0aGUga2V5IGFzIGV2ZXJ5IGtleSBlbnRyeSdzIGdyb3VwIGtleS4KICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR3JvdXBlIEtleSBBc3NpZ24uXG4iKTsKIAogICAgICAgICBpZiAoKEtleWJTZXRBbGxHcm91cEtleSgmKHBEZXZpY2UtPnNLZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3S2V5SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnUud3BhX2tleS5rZXlfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUEJZVEUpYWJ5S2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopYWJ5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5S2V5RGVjTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gVFJVRSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IHRydWUpICYmCiAgICAgICAgICAgICAoS2V5YlNldERlZmF1bHRLZXkoJihwRGV2aWNlLT5zS2V5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT51LndwYV9rZXkua2V5X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFFXT1JEKSAmKEtleVJTQyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKWFieUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UG9ydE9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IFRSVUUpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ5TG9jYWxJRCkgPT0gdHJ1ZSkgKSB7CiAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiR1JPVVAgS2V5IEFzc2lnbi5cbiIpOwogCiAgICAgICAgIH0gZWxzZSB7CkBAIC00MDAsMTUgKzQwMCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICBkd0tleUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIChQUVdPUkQpICYoS2V5UlNDKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKFBCWVRFKWFieUtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilhYnlLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICBieUtleURlY01vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Qb3J0T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgcERldmljZS0+YnlMb2NhbElEKSA9PSBUUlVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5ieUxvY2FsSUQpID09IHRydWUpIHsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlBhaXJ3aXNlIEtleSBTZXRcbiIpOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CisgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcigmcGFyYW0tPmFkZHJbMF0sIHBEZXZpY2UtPmFieUJTU0lEKSkgewogICAgICAgICAgICAgICAgIC8vREJHX1BSTl9XTEFOMDMoKCJyZXR1cm4gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBIC1LZXkgVGFibGUgRnVsbC4yXG4iKSk7CiAgICAgICAgICAgICAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwpAQCAtNDIyLDEwICs0MjIsMTAgQEAKICAgICAgICAgfQogICAgIH0gLy8gQlNTSUQgbm90IDB4ZmZmZmZmZmZmZmZmCiAgICAgaWYgKChyZXQgPT0gMCkgJiYgKChwYXJhbS0+dS53cGFfa2V5LnNldF90eCkgIT0gMCkpIHsKLSAgICAgICAgcERldmljZS0+YnlLZXlJbmRleCA9IChCWVRFKXBhcmFtLT51LndwYV9rZXkua2V5X2luZGV4OwotICAgICAgICBwRGV2aWNlLT5iVHJhbnNtaXRLZXkgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5ieUtleUluZGV4ID0gKHVuc2lnbmVkIGNoYXIpcGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXg7CisgICAgICAgIHBEZXZpY2UtPmJUcmFuc21pdEtleSA9IHRydWU7CiAgICAgfQotICAgIHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID0gVFJVRTsKKyAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgLy9zcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCiAvKgpAQCAtNDY1LDcgKzQ2NSw3IEBACiAJaW50IHJldCA9IDA7CiAKICAgICBwTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfT1BFTjsKLSAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gRkFMU0U7CisgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOwogCiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTYxMywxMyArNjEzLDEzIEBACiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgUFdMQU5fSUVfU1NJRCAgIHBJdGVtU1NJRDsKICAgICBQS25vd25CU1MgcEJTUzsKLQlQQllURSAgcEJ1ZjsKKwl1bnNpZ25lZCBjaGFyICpwQnVmOwogCWludCByZXQgPSAwOwogCXUxNiBjb3VudCA9IDA7CiAJdTE2IGlpLCBqajsKICNpZiAxCiAKLSAgICBQQllURSBwdGVtcEJTUzsKKyAgICB1bnNpZ25lZCBjaGFyICpwdGVtcEJTUzsKIAogCiAKQEAgLTYzOSw5ICs2MzksOSBAQAogCiAgICAgICAgICBmb3Ioamo9MDtqajxNQVhfQlNTX05VTS1paS0xO2pqKyspIHsKIAotICAgICAgICAgICBpZigocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlIT1UUlVFKSB8fAorICAgICAgICAgICBpZigocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlIT10cnVlKSB8fAogCi0gICAgICAgICAgICAgICAgKChwTWdtdC0+c0JTU0xpc3RbampdLnVSU1NJPnBNZ210LT5zQlNTTGlzdFtqaisxXS51UlNTSSkgJiYocE1nbXQtPnNCU1NMaXN0W2pqKzFdLmJBY3RpdmUhPUZBTFNFKSkpIHsKKyAgICAgICAgICAgICAgICAoKHBNZ210LT5zQlNTTGlzdFtqal0udVJTU0k+cE1nbXQtPnNCU1NMaXN0W2pqKzFdLnVSU1NJKSAmJihwTWdtdC0+c0JTU0xpc3RbamorMV0uYkFjdGl2ZSE9ZmFsc2UpKSkgewogCiAgICAgICAgICAgICAgICAgIG1lbWNweShwdGVtcEJTUywmcE1nbXQtPnNCU1NMaXN0W2pqXSxzaXplb2YoS25vd25CU1MpKTsKIApAQCAtNzEzLDcgKzcxMyw3IEBACiAgICAgICAgICAgICAgICAgc2Nhbl9idWYtPnJzbl9pZV9sZW4gPSBwQlNTLT53UlNOTGVuOwogICAgICAgICAgICAgICAgIG1lbWNweShzY2FuX2J1Zi0+cnNuX2llLCBwQlNTLT5ieVJTTklFLCBwQlNTLT53UlNOTGVuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjYW5fYnVmID0gKHN0cnVjdCB2aWF3Z2V0X3NjYW5fcmVzdWx0ICopKChQQllURSlzY2FuX2J1ZiArIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCkpOworICAgICAgICAgICAgc2Nhbl9idWYgPSAoc3RydWN0IHZpYXdnZXRfc2Nhbl9yZXN1bHQgKikoKHVuc2lnbmVkIGNoYXIgKilzY2FuX2J1ZiArIHNpemVvZihzdHJ1Y3Qgdmlhd2dldF9zY2FuX3Jlc3VsdCkpOwogICAgICAgICAgICAgamogKys7CiAgICAgICAgIH0KICAgICB9CkBAIC03NTIsMTAgKzc1MiwxMCBAQAogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBXTEFOX0lFX1NTSUQgICBwSXRlbVNTSUQ7Ci0gICAgQllURSAgICBhYnlOdWxsQWRkcltdID0gezB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwotICAgIEJZVEUgICAgYWJ5V1BBSUVbNjRdOworICAgIHVuc2lnbmVkIGNoYXIgYWJ5TnVsbEFkZHJbXSA9IHsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKyAgICB1bnNpZ25lZCBjaGFyIGFieVdQQUlFWzY0XTsKICAgICBpbnQgcmV0ID0gMDsKLSAgICBCT09MIGJXZXBFbmFibGVkPUZBTFNFOworICAgIGJvb2wgYldlcEVuYWJsZWQ9ZmFsc2U7CiAKIAkvLyBzZXQga2V5IHR5cGUgJiBhbGdvcml0aG0KICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwYWlyd2lzZV9zdWl0ZSA9ICVkXG4iLCBwYXJhbS0+dS53cGFfYXNzb2NpYXRlLnBhaXJ3aXNlX3N1aXRlKTsKQEAgLTgxNyw3ICs4MTcsNyBAQAogCWNhc2UgQ0lQSEVSX1dFUDQwOgogCWNhc2UgQ0lQSEVSX1dFUDEwNDoKIAkJcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwotCQliV2VwRW5hYmxlZD1UUlVFOworCQliV2VwRW5hYmxlZD10cnVlOwogCQlicmVhazsKIAljYXNlIENJUEhFUl9OT05FOgogCQlpZiAocGFyYW0tPnUud3BhX2Fzc29jaWF0ZS5ncm91cF9zdWl0ZSA9PSBDSVBIRVJfQ0NNUCkKQEAgLTgzNCwyNiArODM0LDI2IEBACiAgICAgICBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9TSEFSRUtFWSkgewogICAgICAgICAgICAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogICAgICAgICAgICAgLy9wTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfU0hBUkVLRVk7Ci0gICAgICAgICAgICBwTWdtdC0+YlNoYXJlS2V5QWxnb3JpdGhtID0gVFJVRTsKKyAgICAgICAgICAgIHBNZ210LT5iU2hhcmVLZXlBbGdvcml0aG0gPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgZWxzZSBpZiAocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9PUEVOKSB7CiAgICAgICAgICAgaWYoIWJXZXBFbmFibGVkKSAgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOwogCWVsc2UgcERldmljZS0+ZUVuY3J5cHRpb25TdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOwogICAgICAgICAgICAgLy9wTWdtdC0+ZUF1dGhlbk1vZGUgPSBXTUFDX0FVVEhfT1BFTjsKLSAgICAgICAgICAgIC8vcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOyAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL0ZpeCBPcGVuIG1vZGUsIFdFUCBlbmNyeXRpb24KKyAgICAgICAgICAgIC8vcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IGZhbHNlOyAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL0ZpeCBPcGVuIG1vZGUsIFdFUCBlbmNyeXRpb24KICAgICAgICAgICAgfQogLy9taWtlIHNhdmUgb2xkIGVuY3J5cHRpb24gc3RhdHVzCiAJcERldmljZS0+ZU9sZEVuY3J5cHRpb25TdGF0dXMgPSBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1czsKIAogICAgIGlmIChwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyAhPSAgTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKLSAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBUUlVFOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IHRydWU7CiAgICAgZWxzZQotICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOworICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IGZhbHNlOwogaWYgKCEoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfU0hBUkVLRVkpIHx8Ci0gICAgICAoKHBNZ210LT5lQXV0aGVuTW9kZSA9PSBXTUFDX0FVVEhfT1BFTikgJiYgKGJXZXBFbmFibGVkPT1UUlVFKSkpICkgIC8vRGF2aWRXYW5nICAvLzIwMDgwNzE3LTA2LDxNb2RpZnk+IGJ5IGNoZXN0ZXIvL05vdCB0byBpbml0aWFsIFdFUAorICAgICAgKChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX09QRU4pICYmIChiV2VwRW5hYmxlZD09dHJ1ZSkpKSApICAvL0RhdmlkV2FuZyAgLy8yMDA4MDcxNy0wNiw8TW9kaWZ5PiBieSBjaGVzdGVyLy9Ob3QgdG8gaW5pdGlhbCBXRVAKICAgICBLZXl2SW5pdFRhYmxlKCZwRGV2aWNlLT5zS2V5LCBwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBGQUxTRTsKKyAgICBwRGV2aWNlLT5iTGlua1Bhc3MgPSBmYWxzZTsKICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJCU1NJRCwgMCwgNik7CiAgICAgcE1nbXQtPmVDdXJyU3RhdGUgPSBXTUFDX1NUQVRFX0lETEU7CiAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwpAQCAtOTIyLDcgKzkyMiw3IEBACiAJY2FzZSBWSUFXR0VUX1NFVF9LRVk6CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlZJQVdHRVRfU0VUX0tFWSBcbiIpOwogCSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgcmV0ID0gd3BhX3NldF9rZXlzKHBEZXZpY2UsIHBhcmFtLCBGQUxTRSk7CisgICAgICAgIHJldCA9IHdwYV9zZXRfa2V5cyhwRGV2aWNlLCBwYXJhbSwgZmFsc2UpOwogICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmgKaW5kZXggYjBkOTJkNS4uZGJlOGU4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3BhY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cGFjdGwuaApAQCAtNTQsNyArNTQsNyBAQAogCiAKIAotdHlwZWRlZiBVTE9OR0xPTkcgICBORElTXzgwMl8xMV9LRVlfUlNDOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICBORElTXzgwMl8xMV9LRVlfUlNDOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02NCw3ICs2NCw3IEBACiAKIGludCB3cGFfc2V0X3dwYWRldihQU0RldmljZSBwRGV2aWNlLCBpbnQgdmFsKTsKIGludCB3cGFfaW9jdGwoUFNEZXZpY2UgcERldmljZSwgc3RydWN0IGl3X3BvaW50ICpwKTsKLWludCB3cGFfc2V0X2tleXMoUFNEZXZpY2UgcERldmljZSwgdm9pZCAqY3R4LCBCT09MICBmY3Bma2VybmVsKTsKK2ludCB3cGFfc2V0X2tleXMoUFNEZXZpY2UgcERldmljZSwgdm9pZCAqY3R4LCBib29sIGZjcGZrZXJuZWwpOwogCiAjZW5kaWYgLy8gX19XUEFDTF9IX18KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3JvdXRlLmMKaW5kZXggYmY5MmZiOS4uNjZlMmVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5jCkBAIC01Myw0NSArNTMsNDUgQEAKIAogLyoKICAqIERlc2NyaXB0aW9uOgotICogICAgICBSZWxheSBwYWNrZXQuICBSZXR1cm4gVFJVRSBpZiBwYWNrZXQgaXMgY29weSB0byBETUExCisgKiAgICAgIFJlbGF5IHBhY2tldC4gIFJldHVybiB0cnVlIGlmIHBhY2tldCBpcyBjb3B5IHRvIERNQTEKICAqCiAgKiBQYXJhbWV0ZXJzOgogICogIEluOgogICogICAgICBwRGV2aWNlICAgICAgICAgICAgIC0KICAqICAgICAgcGJ5U2tiRGF0YSAgICAgICAgICAtIHJ4IHBhY2tldCBza2IgZGF0YQogICogIE91dDoKLSAqICAgICAgVFVSRSwgRkFMU0UKKyAqICAgICAgdHJ1ZSwgZmFsc2UKICAqCi0gKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIEZBTFNFCisgKiBSZXR1cm4gVmFsdWU6IHRydWUgaWYgcGFja2V0IGR1cGxpY2F0ZTsgb3RoZXJ3aXNlIGZhbHNlCiAgKgogICovCi1CT09MIFJPVVRFYlJlbGF5IChQU0RldmljZSBwRGV2aWNlLCBQQllURSBwYnlTa2JEYXRhLCBVSU5UIHVEYXRhTGVuLCBVSU5UIHVOb2RlSW5kZXgpCitib29sIFJPVVRFYlJlbGF5IChQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBjaGFyICpwYnlTa2JEYXRhLCB1bnNpZ25lZCBpbnQgdURhdGFMZW4sIHVuc2lnbmVkIGludCB1Tm9kZUluZGV4KQogewogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9IHBEZXZpY2UtPnBNZ210OwogICAgIFBTVHhEZXNjICAgICAgICBwSGVhZFRELCBwTGFzdFREOwotICAgIFVJTlQgICAgICAgICAgICBjYkZyYW1lQm9keVNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIHVNQUNmcmFnTnVtOwotICAgIEJZVEUgICAgICAgICAgICBieVBrdFR5cGU7Ci0gICAgQk9PTCAgICAgICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IEZBTFNFOworICAgIHVuc2lnbmVkIGludCBjYkZyYW1lQm9keVNpemU7CisgICAgdW5zaWduZWQgaW50IHVNQUNmcmFnTnVtOworICAgIHVuc2lnbmVkIGNoYXIgYnlQa3RUeXBlOworICAgIGJvb2wgYk5lZWRFbmNyeXB0aW9uID0gZmFsc2U7CiAgICAgU0tleUl0ZW0gICAgICAgIFNUZW1wS2V5OwogICAgIFBTS2V5SXRlbSAgICAgICBwVHJhbnNtaXRLZXkgPSBOVUxMOwotICAgIFVJTlQgICAgICAgICAgICBjYkhlYWRlclNpemU7Ci0gICAgVUlOVCAgICAgICAgICAgIGlpOwotICAgIFBCWVRFICAgICAgICAgICBwYnlCU1NJRDsKKyAgICB1bnNpZ25lZCBpbnQgY2JIZWFkZXJTaXplOworICAgIHVuc2lnbmVkIGludCBpaTsKKyAgICB1bnNpZ25lZCBjaGFyICpwYnlCU1NJRDsKIAogCiAKIAogICAgIGlmIChBVkFJTF9URChwRGV2aWNlLCBUWVBFX0FDMERNQSk8PTApIHsKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUmVsYXkgY2FuJ3QgYWxsb2NhdGUgVEQxLi5cbiIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBwSGVhZFREID0gcERldmljZS0+YXBDdXJyVERbVFlQRV9BQzBETUFdOwogCiAgICAgcEhlYWRURC0+bV90ZDFURDEuYnlUQ1IgPSAoVENSX0VEUHxUQ1JfU1RQKTsKIAotICAgIG1lbWNweShwRGV2aWNlLT5zVHhFdGhIZWFkZXIuYWJ5RHN0QWRkciwgKFBCWVRFKXBieVNrYkRhdGEsIEVUSF9ITEVOKTsKKyAgICBtZW1jcHkocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIsICh1bnNpZ25lZCBjaGFyICopcGJ5U2tiRGF0YSwgRVRIX0hMRU4pOwogCiAgICAgY2JGcmFtZUJvZHlTaXplID0gdURhdGFMZW4gLSBFVEhfSExFTjsKIApAQCAtOTksMTIgKzk5LDEyIEBACiAgICAgICAgIGNiRnJhbWVCb2R5U2l6ZSArPSA4OwogICAgIH0KIAotICAgIGlmIChwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9PSBUUlVFKSB7Ci0gICAgICAgIGJOZWVkRW5jcnlwdGlvbiA9IFRSVUU7CisgICAgaWYgKHBEZXZpY2UtPmJFbmNyeXB0aW9uRW5hYmxlID09IHRydWUpIHsKKyAgICAgICAgYk5lZWRFbmNyeXB0aW9uID0gdHJ1ZTsKIAogICAgICAgICAvLyBnZXQgZ3JvdXAga2V5CiAgICAgICAgIHBieUJTU0lEID0gcERldmljZS0+YWJ5QnJvYWRjYXN0QWRkcjsKLSAgICAgICAgaWYoS2V5YkdldFRyYW5zbWl0S2V5KCYocERldmljZS0+c0tleSksIHBieUJTU0lELCBHUk9VUF9LRVksICZwVHJhbnNtaXRLZXkpID09IEZBTFNFKSB7CisgICAgICAgIGlmKEtleWJHZXRUcmFuc21pdEtleSgmKHBEZXZpY2UtPnNLZXkpLCBwYnlCU1NJRCwgR1JPVVBfS0VZLCAmcFRyYW5zbWl0S2V5KSA9PSBmYWxzZSkgewogICAgICAgICAgICAgcFRyYW5zbWl0S2V5ID0gTlVMTDsKICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0RFQlVHIktFWSBpcyBOVUxMLiBbJWRdXG4iLCBwRGV2aWNlLT5wTWdtdC0+ZUN1cnJNb2RlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEzMCwxNiArMTMwLDE2IEBACiAgICAgdU1BQ2ZyYWdOdW0gPSBjYkdldEZyYWdDb3VudChwRGV2aWNlLCBwVHJhbnNtaXRLZXksIGNiRnJhbWVCb2R5U2l6ZSwgJnBEZXZpY2UtPnNUeEV0aEhlYWRlcik7CiAKICAgICBpZiAodU1BQ2ZyYWdOdW0gPiBBVkFJTF9URChwRGV2aWNlLFRZUEVfQUMwRE1BKSkgewotICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgYnlQa3RUeXBlID0gKEJZVEUpcERldmljZS0+YnlQYWNrZXRUeXBlOworICAgIGJ5UGt0VHlwZSA9ICh1bnNpZ25lZCBjaGFyKXBEZXZpY2UtPmJ5UGFja2V0VHlwZTsKIAogICAgIGlmIChwRGV2aWNlLT5iRml4UmF0ZSkgewogICAgICAgICBpZiAocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQikgewogICAgICAgICAgICAgaWYgKHBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZSA+PSBSQVRFXzExTSkgewogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfMTFNOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAoV09SRClwRGV2aWNlLT51Q29ubmVjdGlvblJhdGU7CisgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKHVuc2lnbmVkIHNob3J0KXBEZXZpY2UtPnVDb25uZWN0aW9uUmF0ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgocERldmljZS0+ZUN1cnJlbnRQSFlUeXBlID09IFBIWV9UWVBFXzExQSkgJiYKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgICAgICAgICAgICAgIGlmIChwRGV2aWNlLT51Q29ubmVjdGlvblJhdGUgPj0gUkFURV81NE0pCiAgICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IFJBVEVfNTRNOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+d0N1cnJlbnRSYXRlID0gKFdPUkQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOworICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT53Q3VycmVudFJhdGUgPSAodW5zaWduZWQgc2hvcnQpcERldmljZS0+dUNvbm5lY3Rpb25SYXRlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgICAgIE1BQ2JQU1dha2V1cChwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICB9CiAKLSAgICBwRGV2aWNlLT5iUFdCaXRPbiA9IEZBTFNFOworICAgIHBEZXZpY2UtPmJQV0JpdE9uID0gZmFsc2U7CiAKICAgICBwTGFzdFREID0gcEhlYWRURDsKICAgICBmb3IgKGlpID0gMDsgaWkgPCB1TUFDZnJhZ051bTsgaWkrKykgewpAQCAtMTkyLDcgKzE5Miw3IEBACiAKICAgICBNQUN2VHJhbnNtaXRBQzAocERldmljZS0+UG9ydE9mZnNldCk7CiAKLSAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS93cm91dGUuaAppbmRleCAyOTVjZGM1Li4zNGY5ZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L3dyb3V0ZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvd3JvdXRlLmgKQEAgLTM5LDcgKzM5LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotQk9PTCBST1VURWJSZWxheSAoUFNEZXZpY2UgcERldmljZSwgUEJZVEUgcGJ5U2tiRGF0YSwgVUlOVCB1RGF0YUxlbiwgVUlOVCB1Tm9kZUluZGV4KTsKK2Jvb2wgUk9VVEViUmVsYXkgKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGNoYXIgKnBieVNrYkRhdGEsIHVuc2lnbmVkIGludCB1RGF0YUxlbiwgdW5zaWduZWQgaW50IHVOb2RlSW5kZXgpOwogCiAjZW5kaWYgLy8gX19XUk9VVEVfSF9fCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuYwppbmRleCBmMjRkYzU1Li5mY2VlYzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni84MDIxMW1nci5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKgogICogRmlsZTogODAyMTFtZ3IuYwogICoKLSAqIFB1cnBvc2U6IEhhbmRsZXMgdGhlIDgwMi4xMSBtYW5hZ21lbnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgdGhlIDgwMi4xMSBtYW5hZ2VtZW50IHN1cHBvcnQgZnVuY3Rpb25zCiAgKgogICogQXV0aG9yOiBMeW5kb24gQ2hlbgogICoKQEAgLTY3LDggKzY3LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87Ci0vL3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPU1TR19MRVZFTF9ERUJVRzsKK3N0YXRpYyBpbnQgICAgICAgICAgbXNnbGV2ZWwgICAgICAgICAgICAgICAgPSBNU0dfTEVWRUxfSU5GTzsKKy8qc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOyovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAKQEAgLTk2LDcgKzk2LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHF3VGltZXN0YW1wID0gKFBRV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9UUyk7CiAgICAgcEZyYW1lLT5wd0JlYWNvbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfVFMpOwogICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC0xMzgsODggKzEzOCw4NyBAQAogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0JFQUNPTl9PRkZfQ0FQSU5GTyk7CiAKLSAgICAvLyBJbmZvcm1hdGlvbiBlbGVtZW50cworICAgIC8qIEluZm9ybWF0aW9uIGVsZW1lbnRzICovCiAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKChQQllURSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKQogICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQkVBQ09OX09GRl9TU0lEKTsKLSAgICB3aGlsZSggKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pICl7CisgICAgd2hpbGUgKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogCiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0ZIX1BBUk1TOgotICAgICAgICAgICAgICAgIC8vcEZyYW1lLT5wRkhQYXJtcyA9IChQV0xBTl9JRV9GSF9QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRFNfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cERTUGFybXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wRFNQYXJtcyA9IChQV0xBTl9JRV9EU19QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfQ0ZfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cENGUGFybXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wQ0ZQYXJtcyA9IChQV0xBTl9JRV9DRl9QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19QQVJNUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUJTU1Bhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElCU1NQYXJtcyA9IChQV0xBTl9JRV9JQlNTX1BBUk1TKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9USU06Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFRJTSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBUSU0gPSAoUFdMQU5fSUVfVElNKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9GSF9QQVJNUzoKKyAgICAgICAgICAgIC8qIHBGcmFtZS0+cEZIUGFybXMgPSAoUFdMQU5fSUVfRkhfUEFSTVMpcEl0ZW07ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9EU19QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBEU1Bhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wRFNQYXJtcyA9IChQV0xBTl9JRV9EU19QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NGX1BBUk1TOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cENGUGFybXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBDRlBhcm1zID0gKFBXTEFOX0lFX0NGX1BBUk1TKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJQlNTUGFybXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJQlNTUGFybXMgPSAoUFdMQU5fSUVfSUJTU19QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1RJTToKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBUSU0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBUSU0gPSAoUFdMQU5fSUVfVElNKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU04gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU04gPSAoUFdMQU5fSUVfUlNOKXBJdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUlNOX1dQQToKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFdQQWJfSXNfUlNOKChQV0xBTl9JRV9SU05fRVhUKXBJdGVtKSA9PSBUUlVFKQotICAgICAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOV1BBID0gKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTjoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU04gPT0gTlVMTCkgCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVJQOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFUlAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wRVJQID0gKFBXTEFOX0lFX0VSUClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0VSUDoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFUlAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFUlAgPSAoUFdMQU5fSUVfRVJQKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NPVU5UUlk6ICAgICAgLy83Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NvdW50cnkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfQ291bnRyeSA9IChQV0xBTl9JRV9DT1VOVFJZKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NPVU5UUlk6ICAgICAgLyogNyAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NvdW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDogICAvLzMyCi0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPSAoUFdMQU5fSUVfUFdfQ09OU1QpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfUFdSX0NPTlNUUkFJTlQ6ICAgLyogMzIgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Qb3dlckNvbnN0cmFpbnQgPSAoUFdMQU5fSUVfUFdfQ09OU1QpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9DSF9TV0lUQ0g6ICAgIC8vMzcKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ0hTVyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9DSFNXID0gKFBXTEFOX0lFX0NIX1NXKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0NIX1NXSVRDSDogICAgLyogMzcgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9DSFNXID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfQ0hTVyA9IChQV0xBTl9JRV9DSF9TVylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1FVSUVUOiAgICAgICAgLy80MAotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9RdWlldCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9RdWlldCA9IChQV0xBTl9JRV9RVUlFVClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9RVUlFVDogICAgICAgIC8qIDQwICovCisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfUXVpZXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9RdWlldCA9IChQV0xBTl9JRV9RVUlFVClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfREZTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9JQlNTREZTID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0lCU1NERlMgPSAoUFdMQU5fSUVfSUJTU19ERlMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19ERlM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfSUJTU0RGUyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0lCU1NERlMgPSAoUFdMQU5fSUVfSUJTU19ERlMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiBiZWFjb24gZGVjb2RlLlxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlVucmVjb2duaXplZCBFSUQ9JWRkIGluIGJlYWNvbiBkZWNvZGUuXG4iLCBwSXRlbS0+YnlFbGVtZW50SUQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIH0KQEAgLTI5NSw3ICsyOTQsNyBAQAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3UmVhc29uID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fRElTQVNTT0NfT0ZGX1JFQVNPTik7CiAgICAgcEZyYW1lLT5sZW4gPSBXTEFOX0hEUl9BRERSM19MRU4gKyBXTEFOX0RJU0FTU09DX09GRl9SRUFTT04gKyBzaXplb2YoKihwRnJhbWUtPnB3UmVhc29uKSk7CkBAIC0zMjIsNyArMzIxLDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdSZWFzb24gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ESVNBU1NPQ19PRkZfUkVBU09OKTsKIApAQCAtMzQ3LDcgKzM0Niw3IEBACiAgICAgKQogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTM3Niw0NyArMzc1LDQ2IEBACiAgICAgUFdMQU5fSUUgICBwSXRlbTsKIAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9MSVNURU5fSU5UKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVRX09GRl9TU0lEKTsKIAogICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKLSAgICAgICAgc3dpdGNoIChwSXRlbS0+YnlFbGVtZW50SUQpewotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TU0lEOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTU0lEID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCkgeworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTiA9IChQV0xBTl9JRV9SU04pcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIlVucmVjb2duaXplZCBFSUQ9JWRkIGluIGFzc29jcmVxIGRlY29kZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiVW5yZWNvZ25pemVkIEVJRD0lZGQgaW4gYXNzb2NyZXEgZGVjb2RlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKICAgICB9CkBAIC00NDEsNyArNDM5LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNDc1LDcgKzQ3Myw3IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNDgzLDcgKzQ4MSw3IEBACiAgICAgcEZyYW1lLT5wd0FpZCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfQUlEKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FTU09DUkVTUF9PRkZfU1VQUF9SQVRFUyk7CiAKQEAgLTQ5Myw4ICs0OTEsNyBAQAogICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJwRnJhbWUtPnBFeHRTdXBwUmF0ZXM9WyVwXS5cbiIsIHBJdGVtKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgcEZyYW1lLT5wRXh0U3VwcFJhdGVzID0gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuOwpAQCAtNTE5LDcgKzUxNiw3IEBACiB7CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTU1Miw3ICs1NDksNyBAQAogICAgIFBXTEFOX0lFICAgcEl0ZW07CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd0xpc3RlbkludGVydmFsID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKQEAgLTU2MCw0MiArNTU3LDQxIEBACiAgICAgcEZyYW1lLT5wQWRkckN1cnJBUCA9IChQSUVFRV9BRERSKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9DVVJSX0FQKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVRX09GRl9TU0lEKTsKIAotICAgIHdoaWxlKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgeworICAgIHdoaWxlICgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpIHsKIAotICAgICAgICBzd2l0Y2ggKHBJdGVtLT5ieUVsZW1lbnRJRCl7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1NJRDoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTU0lEID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTjoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTldQQSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChXUEFiX0lzX1JTTigoUFdMQU5fSUVfUlNOX0VYVClwSXRlbSkgPT0gVFJVRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiByZWFzc29jcmVxIGRlY29kZS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJVbnJlY29nbml6ZWQgRUlEPSVkZCBpbiByZWFzc29jcmVxIGRlY29kZS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+YnlFbGVtZW50SUQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArIHBJdGVtLT5sZW4pOwogICAgIH0KQEAgLTY0NiwzMCArNjQyLDMwIEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpKTsKIAotICAgIHdoaWxlKCAoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikgKSB7CisgICAgd2hpbGUgKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgewogCiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wU1NJRCA9IChQV0xBTl9JRV9TU0lEKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wU1NJRCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFNTSUQgPSAoUFdMQU5fSUVfU1NJRClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRVhUU1VQUF9SQVRFUzoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wRXh0U3VwcFJhdGVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wRXh0U3VwcFJhdGVzID0gKFBXTEFOX0lFX1NVUFBfUkFURVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJCYWQgRUlEPSVkZCBpbiBwcm9iZXJlcVxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVxXG4iLCBwSXRlbS0+YnlFbGVtZW50SUQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBwSXRlbSA9IChQV0xBTl9JRSkoKChQQllURSlwSXRlbSkgKyAyICsgIHBJdGVtLT5sZW4pOwpAQCAtNjk3LDcgKzY5Myw3IEBACiB7CiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnBxd1RpbWVzdGFtcCA9IChQUVdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1BST0JFUkVTUF9PRkZfVFMpOwogICAgIHBGcmFtZS0+cHdCZWFjb25JbnRlcnZhbCA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC03MzQsNyArNzMwLDcgQEAKIAogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wcXdUaW1lc3RhbXAgPSAoUFFXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1RTKTsKICAgICBwRnJhbWUtPnB3QmVhY29uSW50ZXJ2YWwgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtNzQyLDgzICs3MzgsODIgQEAKICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX0NBUF9JTkZPKTsKIAotICAgIC8vIEluZm9ybWF0aW9uIGVsZW1lbnRzCisgICAgLyogSW5mb3JtYXRpb24gZWxlbWVudHMgKi8KICAgICBwSXRlbSA9IChQV0xBTl9JRSkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9QUk9CRVJFU1BfT0ZGX1NTSUQpOwogCi0gICAgd2hpbGUoICgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSApIHsKKyAgICB3aGlsZSAoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSB7CiAgICAgICAgIHN3aXRjaCAocEl0ZW0tPmJ5RWxlbWVudElEKSB7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NTSUQ6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9TU0lEOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFNTSUQgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTU0lEID0gKFBXTEFOX0lFX1NTSUQpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1NVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBTdXBwUmF0ZXMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBwRnJhbWUtPnBTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfRkhfUEFSTVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0RTX1BBUk1TOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBEU1Bhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cERTUGFybXMgPSAoUFdMQU5fSUVfRFNfUEFSTVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NGX1BBUk1TOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBDRlBhcm1zID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cENGUGFybXMgPSAoUFdMQU5fSUVfQ0ZfUEFSTVMpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfUEFSTVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElCU1NQYXJtcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJQlNTUGFybXMgPSAoUFdMQU5fSUVfSUJTU19QQVJNUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0ZIX1BBUk1TOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRFNfUEFSTVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wRFNQYXJtcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cERTUGFybXMgPSAoUFdMQU5fSUVfRFNfUEFSTVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9DRl9QQVJNUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBDRlBhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wQ0ZQYXJtcyA9IChQV0xBTl9JRV9DRl9QQVJNUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX0lCU1NfUEFSTVM6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUJTU1Bhcm1zID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUJTU1Bhcm1zID0gKFBXTEFOX0lFX0lCU1NfUEFSTVMpcEl0ZW07CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cFJTTiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTiA9IChQV0xBTl9JRV9SU04pcEl0ZW07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTEFOX0VJRF9SU05fV1BBOgotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBSU05XUEEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBSU05XUEEgPSAoUFdMQU5fSUVfUlNOX0VYVClwSXRlbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VSUDoKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wRVJQID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cEVSUCA9IChQV0xBTl9JRV9FUlApcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0VYVFNVUFBfUkFURVM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBFeHRTdXBwUmF0ZXMgPSAoUFdMQU5fSUVfU1VQUF9SQVRFUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9SU046CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wUlNOID0gKFBXTEFOX0lFX1JTTilwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1JTTl9XUEE6CisgICAgICAgICAgICBpZiAocEZyYW1lLT5wUlNOV1BBID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoV1BBYl9Jc19SU04oKFBXTEFOX0lFX1JTTl9FWFQpcEl0ZW0pID09IFRSVUUpCisgICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cFJTTldQQSA9IChQV0xBTl9JRV9SU05fRVhUKXBJdGVtOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfRVJQOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEVSUCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEVSUCA9IChQV0xBTl9JRV9FUlApcEl0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9FWFRTVVBQX1JBVEVTOgorICAgICAgICAgICAgaWYgKHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfQ09VTlRSWTogICAgICAvLzcKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ291bnRyeSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9Db3VudHJ5ID0gKFBXTEFOX0lFX0NPVU5UUlkpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfQ09VTlRSWTogICAgICAvKiA3ICovCisgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfQ291bnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0NvdW50cnkgPSAoUFdMQU5fSUVfQ09VTlRSWSlwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX1BXUl9DT05TVFJBSU5UOiAgIC8vMzIKLSAgICAgICAgICAgICAgICBpZiAocEZyYW1lLT5wSUVfUG93ZXJDb25zdHJhaW50ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9IChQV0xBTl9JRV9QV19DT05TVClwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDogICAvKiAzMiAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1Bvd2VyQ29uc3RyYWludCA9IChQV0xBTl9JRV9QV19DT05TVClwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFdMQU5fRUlEX0NIX1NXSVRDSDogICAgLy8zNwotICAgICAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9DSFNXID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX0NIU1cgPSAoUFdMQU5fSUVfQ0hfU1cpcEl0ZW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV0xBTl9FSURfQ0hfU1dJVENIOiAgICAvKiAzNyAqLworICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0NIU1cgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBwRnJhbWUtPnBJRV9DSFNXID0gKFBXTEFOX0lFX0NIX1NXKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfUVVJRVQ6ICAgICAgICAvLzQwCi0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX1F1aWV0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1F1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJdGVtOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdMQU5fRUlEX1FVSUVUOiAgICAgICAgLyogNDAgKi8KKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9RdWlldCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHBGcmFtZS0+cElFX1F1aWV0ID0gKFBXTEFOX0lFX1FVSUVUKXBJdGVtOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgV0xBTl9FSURfSUJTU19ERlM6Ci0gICAgICAgICAgICAgICAgaWYgKHBGcmFtZS0+cElFX0lCU1NERlMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfSUJTU0RGUyA9IChQV0xBTl9JRV9JQlNTX0RGUylwSXRlbTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXTEFOX0VJRF9JQlNTX0RGUzoKKyAgICAgICAgICAgIGlmIChwRnJhbWUtPnBJRV9JQlNTREZTID09IE5VTEwpCisgICAgICAgICAgICAgICAgcEZyYW1lLT5wSUVfSUJTU0RGUyA9IChQV0xBTl9JRV9JQlNTX0RGUylwSXRlbTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVzcFxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkJhZCBFSUQ9JWRkIGluIHByb2JlcmVzcFxuIiwgcEl0ZW0tPmJ5RWxlbWVudElEKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgcEl0ZW0gPSAoUFdMQU5fSUUpKCgoUEJZVEUpcEl0ZW0pICsgMiArICBwSXRlbS0+bGVuKTsKQEAgLTg0NSw3ICs4NDAsNyBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wd0F1dGhBbGdvcml0aG0gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9BVVRIX0FMRyk7CiAgICAgcEZyYW1lLT5wd0F1dGhTZXF1ZW5jZSA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC04NTMsNyArODQ4LDYgQEAKICAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMpOwogICAgIHBGcmFtZS0+bGVuID0gV0xBTl9IRFJfQUREUjNfTEVOICsgV0xBTl9BVVRIRU5fT0ZGX1NUQVRVUyArIHNpemVvZigqKHBGcmFtZS0+cHdTdGF0dXMpKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtODc4LDcgKzg3Miw3IEBACiAKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdBdXRoQWxnb3JpdGhtID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQVVUSF9BTEcpOwogICAgIHBGcmFtZS0+cHdBdXRoU2VxdWVuY2UgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtODg2LDE0ICs4ODAsMTIgQEAKICAgICBwRnJhbWUtPnB3U3RhdHVzID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fQVVUSEVOX09GRl9TVEFUVVMpOwogCi0gICAgLy8gSW5mb3JtYXRpb24gZWxlbWVudHMKKyAgICAvKiBJbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogICAgIHBJdGVtID0gKFBXTEFOX0lFKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0FVVEhFTl9PRkZfQ0hBTExFTkdFKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0NIQUxMRU5HRSkpIHsKKyAgICBpZiAoKCgoUEJZVEUpcEl0ZW0pIDwgKHBGcmFtZS0+cEJ1ZiArIHBGcmFtZS0+bGVuKSkgJiYgKHBJdGVtLT5ieUVsZW1lbnRJRCA9PSBXTEFOX0VJRF9DSEFMTEVOR0UpKQogICAgICAgICBwRnJhbWUtPnBDaGFsbGVuZ2UgPSAoUFdMQU5fSUVfQ0hBTExFTkdFKXBJdGVtOwotICAgIH0KLQogICAgIHJldHVybjsKIH0KIApAQCAtOTE2LDExICs5MDgsMTAgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdSZWFzb24gPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9ERUFVVEhFTl9PRkZfUkVBU09OKTsKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fREVBVVRIRU5fT0ZGX1JFQVNPTiArIHNpemVvZigqKHBGcmFtZS0+cHdSZWFzb24pKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtOTQzLDEwICs5MzQsOSBAQAogewogICAgIHBGcmFtZS0+cEhkciA9IChQVVdMQU5fODAyMTFIRFIpcEZyYW1lLT5wQnVmOwogCi0gICAgLy8gRml4ZWQgRmllbGRzCisgICAgLyogRml4ZWQgRmllbGRzICovCiAgICAgcEZyYW1lLT5wd1JlYXNvbiA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04pOwotCiAgICAgcmV0dXJuOwogfQogCkBAIC05NjksNyArOTU5LDcgQEAKIHsKICAgICBwRnJhbWUtPnBIZHIgPSAoUFVXTEFOXzgwMjExSERSKXBGcmFtZS0+cEJ1ZjsKIAotICAgIC8vIEZpeGVkIEZpZWxkcworICAgIC8qIEZpeGVkIEZpZWxkcyAqLwogICAgIHBGcmFtZS0+cHdDYXBJbmZvID0gKFBXT1JEKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9DQVBfSU5GTyk7CiAgICAgcEZyYW1lLT5wd1N0YXR1cyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCkBAIC05NzgsNyArOTY4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRCk7CiAKICAgICBwRnJhbWUtPmxlbiA9IFdMQU5fSERSX0FERFIzX0xFTiArIFdMQU5fUkVBU1NPQ1JFU1BfT0ZGX0FJRCArIHNpemVvZigqKHBGcmFtZS0+cHdBaWQpKTsKLQogICAgIHJldHVybjsKIH0KIApAQCAtMTAwNCw3ICs5OTMsNyBAQAogCiAgICAgcEZyYW1lLT5wSGRyID0gKFBVV0xBTl84MDIxMUhEUilwRnJhbWUtPnBCdWY7CiAKLSAgICAvLyBGaXhlZCBGaWVsZHMKKyAgICAvKiBGaXhlZCBGaWVsZHMgKi8KICAgICBwRnJhbWUtPnB3Q2FwSW5mbyA9IChQV09SRCkoV0xBTl9IRFJfQTNfREFUQV9QVFIoJihwRnJhbWUtPnBIZHItPnNBMykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQ0FQX0lORk8pOwogICAgIHBGcmFtZS0+cHdTdGF0dXMgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQpAQCAtMTAxMiwxNSArMTAwMSwxNCBAQAogICAgIHBGcmFtZS0+cHdBaWQgPSAoUFdPUkQpKFdMQU5fSERSX0EzX0RBVEFfUFRSKCYocEZyYW1lLT5wSGRyLT5zQTMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgV0xBTl9SRUFTU09DUkVTUF9PRkZfQUlEKTsKIAotICAgIC8vSW5mb3JtYXRpb24gZWxlbWVudHMKKyAgICAvKiBJbmZvcm1hdGlvbiBlbGVtZW50cyAqLwogICAgIHBGcmFtZS0+cFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKShXTEFOX0hEUl9BM19EQVRBX1BUUigmKHBGcmFtZS0+cEhkci0+c0EzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBXTEFOX1JFQVNTT0NSRVNQX09GRl9TVVBQX1JBVEVTKTsKIAogICAgIHBJdGVtID0gKFBXTEFOX0lFKShwRnJhbWUtPnBTdXBwUmF0ZXMpOwogICAgIHBJdGVtID0gKFBXTEFOX0lFKSgoKFBCWVRFKXBJdGVtKSArIDIgKyBwSXRlbS0+bGVuKTsKIAotICAgIGlmICgoKChQQllURSlwSXRlbSkgPCAocEZyYW1lLT5wQnVmICsgcEZyYW1lLT5sZW4pKSAmJiAocEl0ZW0tPmJ5RWxlbWVudElEID09IFdMQU5fRUlEX0VYVFNVUFBfUkFURVMpKSB7CisgICAgaWYgKCgoKFBCWVRFKXBJdGVtKSA8IChwRnJhbWUtPnBCdWYgKyBwRnJhbWUtPmxlbikpICYmIChwSXRlbS0+YnlFbGVtZW50SUQgPT0gV0xBTl9FSURfRVhUU1VQUF9SQVRFUykpCiAgICAgICAgIHBGcmFtZS0+cEV4dFN1cHBSYXRlcyA9IChQV0xBTl9JRV9TVVBQX1JBVEVTKXBJdGVtOwotICAgIH0KICAgICByZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2LzgwMjExbWdyLmgKaW5kZXggYzE0MGE5NS4uM2Q1N2Y3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni84MDIxMW1nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvODAyMTFtZ3IuaApAQCAtMTksNyArMTksNyBAQAogICoKICAqIEZpbGU6IDgwMjExbWdyLmgKICAqCi0gKiBQdXJwb3NlOiA4MDIuMTEgbWFuYWdtZW50IGZyYW1lcyBwcmUtZGVmaW5lcy4KKyAqIFB1cnBvc2U6IDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyBwcmUtZGVmaW5lcy4KICAqCiAgKgogICogQXV0aG9yOiBMeW5kb24gQ2hlbgpAQCAtMjIyLDQ2ICsyMjIsMzkgQEAKICNkZWZpbmUgTUVBU1VSRV9NT0RFX0lOQ0FQQUJMRSAgMHgwMgogI2RlZmluZSBNRUFTVVJFX01PREVfUkVGVVNFRCAgICAweDA0CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8vIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMKIAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUUsICpQV0xBTl9JRTsKIAotCiAvLyBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9TU0lEIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYWJ5U1NJRFsxXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfU1NJRCwgKlBXTEFOX0lFX1NTSUQ7CiAKLQogLy8gU3VwcG9ydGVkIFJhdGVzCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfU1VQUF9SQVRFUyB7CiAgICAgQllURSAgIGJ5RWxlbWVudElEOwogICAgIEJZVEUgICBsZW47CiAgICAgQllURSAgIGFieVJhdGVzWzFdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRV9TVVBQX1JBVEVTLCAgKlBXTEFOX0lFX1NVUFBfUkFURVM7CiAKLQotCiAvLyBGSCBQYXJhbWV0ZXIgU2V0CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IF9XTEFOX0lFX0ZIX1BBUk1TIHsKQEAgLTI3OSwxMCArMjcyLDkgQEAKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYnlDdXJyQ2hhbm5lbDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfRFNfUEFSTVMsICAqUFdMQU5fSUVfRFNfUEFSTVM7CiAKLQogLy8gQ0YgUGFyYW1ldGVyIFNldAogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCB0YWdXTEFOX0lFX0NGX1BBUk1TIHsKQEAgLTI5MiwxMCArMjg0LDkgQEAKICAgICBCWVRFICAgYnlDRlBQZXJpb2Q7CiAgICAgV09SRCAgIHdDRlBNYXhEdXJhdGlvbjsKICAgICBXT1JEICAgd0NGUER1clJlbWFpbmluZzsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfQ0ZfUEFSTVMsICAqUFdMQU5fSUVfQ0ZfUEFSTVM7CiAKLQogLy8gVElNCiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfVElNIHsKQEAgLTMwNSwzMCArMjk2LDI3IEBACiAgICAgQllURSAgIGJ5RFRJTVBlcmlvZDsKICAgICBCWVRFICAgYnlCaXRNYXBDdGw7CiAgICAgQllURSAgIGJ5VmlydEJpdE1hcFsxXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFdMQU5fSUVfVElNLCAgKlBXTEFOX0lFX1RJTTsKIAotCiAvLyBJQlNTIFBhcmFtZXRlciBTZXQKICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9JQlNTX1BBUk1TIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBXT1JEICAgd0FUSU1XaW5kb3c7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0lCU1NfUEFSTVMsICpQV0xBTl9JRV9JQlNTX1BBUk1TOwogCi0KIC8vIENoYWxsZW5nZSBUZXh0CiAjcHJhZ21hIHBhY2soMSkKIHR5cGVkZWYgc3RydWN0IHRhZ1dMQU5fSUVfQ0hBTExFTkdFIHsKICAgICBCWVRFICAgYnlFbGVtZW50SUQ7CiAgICAgQllURSAgIGxlbjsKICAgICBCWVRFICAgYWJ5Q2hhbGxlbmdlWzFdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogV0xBTl9JRV9DSEFMTEVOR0UsICAqUFdMQU5fSUVfQ0hBTExFTkdFOwogCi0KICNwcmFnbWEgcGFjaygxKQogdHlwZWRlZiBzdHJ1Y3QgdGFnV0xBTl9JRV9SU05fRVhUIHsKICAgICBCWVRFIGJ5RWxlbWVudElEOwpAQCAtMzkxLDEwICszNzksOSBAQAogICAgIEJZVEUgICBieUVsZW1lbnRJRDsKICAgICBCWVRFICAgbGVuOwogICAgIEJZVEUgICBieUNvbnRleHQ7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBXTEFOX0lFX0VSUCwgICpQV0xBTl9JRV9FUlA7CiAKLQogI3ByYWdtYSBwYWNrKDEpCiB0eXBlZGVmIHN0cnVjdCBfTUVBU0VVUkVfUkVRIHsKICAgICBCWVRFICAgICAgICAgICAgICAgIGJ5Q2hhbm5lbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYWVzX2NjbXAuYwppbmRleCBiM2QzNjdiLi5mN2EzYjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Flc19jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9hZXNfY2NtcC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZCB4b3JfMTI4KEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKK3N0YXRpYyB2b2lkIHhvcl8xMjgoQllURSAqYSwgQllURSAqYiwgQllURSAqb3V0KQogewogCVBEV09SRCBkd1B0ckEgPSAoUERXT1JEKSBhOwogCVBEV09SRCBkd1B0ckIgPSAoUERXT1JEKSBiOwpAQCAtMTE5LDcgKzExOSw3IEBACiB9CiAKIAotdm9pZCB4b3JfMzIoQllURSAqYSwgQllURSAqYiwgQllURSAqb3V0KQorc3RhdGljIHZvaWQgeG9yXzMyKEJZVEUgKmEsIEJZVEUgKmIsIEJZVEUgKm91dCkKIHsKIAlQRFdPUkQgZHdQdHJBID0gKFBEV09SRCkgYTsKIAlQRFdPUkQgZHdQdHJCID0gKFBEV09SRCkgYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuYwppbmRleCBkM2RlOTRmLi4yOTkwMjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jhc2ViYW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5jCkBAIC05ODksMTAgKzk4OSwxMCBAQAogICogUmV0dXJuIFZhbHVlOiBub25lCiAgKgogICovCi1CT09MCi1CQmJWVDMxODRJbml0IChQU0RldmljZSBwRGV2aWNlKQorCitCT09MIEJCYlZUMzE4NEluaXQoUFNEZXZpY2UgcERldmljZSkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAgICAgV09SRCAgICAgICAgICAgICAgICAgICAgd0xlbmd0aDsKICAgICBQQllURSAgICAgICAgICAgICAgICAgICBwYnlBZGRyOwogICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBieUFnYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYmFzZWJhbmQuaAppbmRleCBiYzQ2MzNkLi44ZGI4Y2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jhc2ViYW5kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9iYXNlYmFuZC5oCkBAIC0xMDQsMTYgKzEwNCwxMyBAQAogICAgICBXT1JEIHdSYXRlCiAgICAgKTsKIAotdm9pZAotQkJ2Q2FjdWxhdGVQYXJhbWV0ZXIgKAotICAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgIHVuc2lnbmVkIGludCBjYkZyYW1lTGVuZ3RoLAotICAgICAgV09SRCB3UmF0ZSwKLSAgICAgIEJZVEUgYnlQYWNrZXRUeXBlLAotICAgICBQV09SRCBwd1BoeUxlbiwKLSAgICAgUEJZVEUgcGJ5UGh5U3J2LAotICAgICBQQllURSBwYnlQaHlTZ24KLSAgICApOwordm9pZCBCQnZDYWN1bGF0ZVBhcmFtZXRlcihQU0RldmljZSBwRGV2aWNlLAorCQkJICB1bnNpZ25lZCBpbnQgY2JGcmFtZUxlbmd0aCwKKwkJCSAgV09SRCB3UmF0ZSwKKwkJCSAgQllURSBieVBhY2tldFR5cGUsCisJCQkgIFBXT1JEIHB3UGh5TGVuLAorCQkJICBQQllURSBwYnlQaHlTcnYsCisJCQkgIFBCWVRFIHBieVBoeVNnbik7CiAKIC8vIHRpbWVyIGZvciBhbnRlbm5hIGRpdmVyc2l0eQogCkBAIC0xMjgsNyArMTI1LDcgQEAKIHZvaWQgQkJ2U2V0U2hvcnRTbG90VGltZShQU0RldmljZSBwRGV2aWNlKTsKIHZvaWQgQkJ2U2V0VkdBR2Fpbk9mZnNldChQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5RGF0YSk7CiB2b2lkIEJCdlNldEFudGVubmFNb2RlKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlBbnRlbm5hTW9kZSk7Ci1CT09MIEJCYlZUMzE4NEluaXQgKFBTRGV2aWNlIHBEZXZpY2UpOworQk9PTCBCQmJWVDMxODRJbml0KFBTRGV2aWNlIHBEZXZpY2UpOwogdm9pZCBCQnZTZXREZWVwU2xlZXAoUFNEZXZpY2UgcERldmljZSk7CiB2b2lkIEJCdkV4aXREZWVwU2xlZXAoUFNEZXZpY2UgcERldmljZSk7CiB2b2lkIEJCdlVwZGF0ZVByZUVEVGhyZXNob2xkKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5jCmluZGV4IDM2ZWQ2MWIuLmE5ZjY4YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmMKQEAgLTkzLDEwICs5Myw3IEBACiAKIHZvaWQgc192Q2hlY2tTZW5zaXRpdml0eSh2b2lkICpoRGV2aWNlQ29udGV4dCk7CiB2b2lkIHNfdkNoZWNrUHJlRURUaHJlc2hvbGQodm9pZCAqaERldmljZUNvbnRleHQpOwotCi0jaWZkZWYgQ2FsY3VfTGlua1F1YWwKIHZvaWQgc191Q2FsY3VsYXRlTGlua1F1YWwodm9pZCAqaERldmljZUNvbnRleHQpOwotI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzNSw3ICsxMzIsNyBAQAogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJTU3BTZWFyY2hCU1NMaXN0IEJTU0lEWyUwMlggJTAyWCAlMDJYLSUwMlggJTAyWCAlMDJYXVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGJ5RGVzaXJlQlNTSUQsKihwYnlEZXNpcmVCU1NJRCsxKSwqKHBieURlc2lyZUJTU0lEKzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoocGJ5RGVzaXJlQlNTSUQrMyksKihwYnlEZXNpcmVCU1NJRCs0KSwqKHBieURlc2lyZUJTU0lEKzUpKTsKLSAgICAgICAgaWYgKCghSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5RGVzaXJlQlNTSUQpKSAmJgorCWlmICgoIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieURlc2lyZUJTU0lEKSkgJiYKIAkgICAgIChtZW1jbXAocGJ5RGVzaXJlQlNTSUQsIFplcm9CU1NJRCwgNikhPSAwKSl7CiAgICAgICAgICAgICBwYnlCU1NJRCA9IHBieURlc2lyZUJTU0lEOwogICAgICAgICB9CkBAIC0xNTYsNyArMTUzLDcgQEAKIAogICAgICAgICAgICAgaWYgKChwQ3VyckJTUy0+YkFjdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAocEN1cnJCU1MtPmJTZWxlY3RlZCA9PSBGQUxTRSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocEN1cnJCU1MtPmFieUJTU0lELCBwYnlCU1NJRCkpIHsKKwkJICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBDdXJyQlNTLT5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwU1NJRCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wYXJlIHNzaWQKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW1lbWNtcChwU1NJRC0+YWJ5U1NJRCwKQEAgLTI5Niw3ICsyOTMsOCBAQAogICAgIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7CiAgICAgICAgIGlmIChiS2VlcEN1cnJCU1NJRCkgewogICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQpKSB7CisJCSFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkgICAgcE1nbXQtPmFieUN1cnJCU1NJRCkpIHsKICAvL21pa2UgbWFyazogdGhlcmUgYXJlIHR3byBzYW1lIEJTU0lEIGluIGxpc3QgaWYgdGhhdCBBUCBpcyBpbiBoaWRkZW4gc3NpZCBtb2RlLG9uZSAncyBTU0lEIGlzIG51bGwsCiAgLy8gICAgICAgICAgICAgICAgIGJ1dCBvdGhlcidzIGlzIG9idmlvdXMsIHNvIGlmIGl0IGFjc3NvY2lhdGUgd2l0aCB5b3VyIFNUQSAgZXhhY3RseSx5b3UgbXVzdCBrZWVwIHR3bwogIC8vICAgICAgICAgICAgICAgICBvZiB0aGVtISEhISEhISEhCkBAIC0zNDEsNyArMzM5LDcgQEAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICBwQlNTTGlzdCA9ICYocE1nbXQtPnNCU1NMaXN0W2lpXSk7CiAgICAgICAgIGlmIChwQlNTTGlzdC0+YkFjdGl2ZSkgewotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBCU1NMaXN0LT5hYnlCU1NJRCwgYWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBTU0lELT5sZW4gPT0gKChQV0xBTl9JRV9TU0lEKXBCU1NMaXN0LT5hYnlTU0lEKS0+bGVuKXsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWNtcChwU1NJRC0+YWJ5U1NJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBXTEFOX0lFX1NTSUQpcEJTU0xpc3QtPmFieVNTSUQpLT5hYnlTU0lELApAQCAtNjk5LDEyICs2OTcsMTQgQEAKICAgICAgICAgcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnQgJT0gUlNTSV9TVEFUX0NPVU5UOwogICAgICAgICBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbcEJTU0xpc3QtPmJ5UlNTSVN0YXRDbnRdID0gbGRCbTsKICAgICAgICAgbGRCbVN1bSA9IDA7Ci0gICAgICAgIGZvcihpaT0wLCBqaj0wO2lpPFJTU0lfU1RBVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAocEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcEJTU0xpc3QtPmxkQm1NQVggPSBtYXgocEJTU0xpc3QtPmxkQm1BdmVyYWdlW2lpXSwgbGRCbSk7Ci0gICAgICAgICAgICAgICAgbGRCbVN1bSArPSBwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldOwotICAgICAgICAgICAgICAgIGpqKys7Ci0gICAgICAgICAgICB9CisJZm9yIChpaSA9IDAsIGpqID0gMDsgaWkgPCBSU1NJX1NUQVRfQ09VTlQ7IGlpKyspIHsKKwkJaWYgKHBCU1NMaXN0LT5sZEJtQXZlcmFnZVtpaV0gIT0gMCkgeworCQkJcEJTU0xpc3QtPmxkQm1NQVggPQorCQkJCW1heChwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKKwkJCWxkQm1TdW0gKz0KKwkJCQlwQlNTTGlzdC0+bGRCbUF2ZXJhZ2VbaWldOworCQkJamorKzsKKwkJfQogICAgICAgICB9CiAgICAgICAgIHBCU1NMaXN0LT5sZEJtQXZlclJhbmdlID0gbGRCbVN1bSAvamo7CiAgICAgfQpAQCAtNzE0LDI4ICs3MTQsNiBAQAogICAgICAgICBwQlNTTGlzdC0+dUlFTGVuZ3RoID0gV0xBTl9CRUFDT05fRlJfTUFYTEVOOwogICAgIG1lbWNweShwQlNTTGlzdC0+YWJ5SUVzLCBwYnlJRXMsIHBCU1NMaXN0LT51SUVMZW5ndGgpOwogCi0vL21pa2UgYWRkOiBpZiAgdGhlIEFQIGluIHRoaXMgcEJTU0xpc3QgaXMgaGlkZGVuIHNzaWQgYW5kIHdlIGNhbiBmaW5kIHR3byBvZiB0aGVtLAotLy8gICAgICAgICAgICAgICAgICB5b3UgbmVlZCB1cGdyYWRlIHRoZSBvdGhlciByZWxhdGVkIHBCU1NMaXN0IG9mIHdoaWNoIHNzaWQgaXMgb2J2aW91cywKLS8vICAgICAgICAgICAgICAgICAgZm9yIHRoZXNlIHR3byBBUCBpcyB0aGUgc2FtZSBvbmUhISEhCi0vKioqKioqKipqdWRnZSBieTpCU1NJRCBpcyB0aGUgc2FtZSxidXQgc3NpZCBpcyBkaWZmZXJlbnQhKioqKioqKioqKioqKioqKiovCi0jaWYgMAotICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKLSAgICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChwTWdtdC0+c0JTU0xpc3RbaWldLmFieUJTU0lELCBwQlNTTGlzdC0+YWJ5QlNTSUQpKSB7ICAgLy9CU1NJRCBpcyB0aGUgc2FtZSEKLSAgICAgICAgIGlmIChtZW1jbXAoKChQV0xBTl9JRV9TU0lEKXBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5U1NJRCktPmFieVNTSUQsICAgICAgICAgICAgICAgICAgLy9zc2lkIGlzIGRpZmZlcmVudD8/Ci0JCSAJICAgICAgKChQV0xBTl9JRV9TU0lEKXBCU1NMaXN0LT5hYnlTU0lEKS0+YWJ5U1NJRCwKLQkJIAkgICAgICAoKFBXTEFOX0lFX1NTSUQpcEJTU0xpc3QtPmFieVNTSUQpLT5sZW4pICE9IDApIHsKLSAgICAgICAgICAgICAgICAgIC8vcmVzZXJ2ZSB0ZW1wCi0gICAgICAgICAgICAgICBtZW1zZXQoYWJ5VG1wU1NJRCwwLHNpemVvZihhYnlUbXBTU0lEKSk7Ci0JICAgICAgbWVtY3B5KGFieVRtcFNTSUQscE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlTU0lELHNpemVvZihhYnlUbXBTU0lEKSk7Ci0JCSAgLy91cGdyYWRlIHRoZSBvdGhlciBvbmUgcEJTU0xpc3QKLQkgICAgICBtZW1jcHkoJihwTWdtdC0+c0JTU0xpc3RbaWldKSxwQlNTTGlzdCxzaXplb2YoS25vd25CU1MpKTsKLQkJICAvL3JlY292ZXIgc3NpZCBpbmZvCi0JICAgICAgbWVtY3B5KHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5U1NJRCxhYnlUbXBTU0lELHNpemVvZihhYnlUbXBTU0lEKSk7Ci0gICAgICAgICAgIH0KLSAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gVFJVRTsKIH0KIApAQCAtNzU1LDcgKzczMyw3IEBACiAKIEJPT0wgQlNTYklzU1RBSW5Ob2RlREIodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgICBQQllURSBhYnlEc3RBZGRyLAotCQkgICAgICAgUFVJTlQgcHVOb2RlSW5kZXgpCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwpAQCAtNzY0LDcgKzc0Miw4IEBACiAgICAgLy8gSW5kZXggPSAwIHJlc2VydmVkIGZvciBBUCBOb2RlCiAgICAgZm9yIChpaSA9IDE7IGlpIDwgKE1BWF9OT0RFX05VTSArIDEpOyBpaSsrKSB7CiAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlW2lpXS5iQWN0aXZlKSB7Ci0gICAgICAgICAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwoYWJ5RHN0QWRkciwgcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYWJ5TUFDQWRkcikpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoYWJ5RHN0QWRkciwKKwkJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVtpaV0uYWJ5TUFDQWRkcikpIHsKICAgICAgICAgICAgICAgICAqcHVOb2RlSW5kZXggPSBpaTsKICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTc4Niw3ICs3NjUsNyBAQAogICogICAgTm9uZQogICoKIC0qLwotdm9pZCBCU1N2Q3JlYXRlT25lTm9kZSh2b2lkICpoRGV2aWNlQ29udGV4dCwgUFVJTlQgcHVOb2RlSW5kZXgpCit2b2lkIEJTU3ZDcmVhdGVPbmVOb2RlKHZvaWQgKmhEZXZpY2VDb250ZXh0LCB1bnNpZ25lZCBpbnQgKnB1Tm9kZUluZGV4KQogewogCiAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpaERldmljZUNvbnRleHQ7CkBAIC0xMDIzLDcgKzEwMDIsNiBAQAogICAgCXBEZXZpY2UtPmJ5UmVBc3NvY0NvdW50ID0gMDsKIH0KIAotI2lmZGVmIFNuZEV2dF9Ub0FQSQogaWYoKHBNZ210LT5lQ3VyclN0YXRlIT1XTUFDX1NUQVRFX0FTU09DKSAmJgogICAgICAocE1nbXQtPmVMYXN0U3RhdGU9PVdNQUNfU1RBVEVfQVNTT0MpKQogewpAQCAtMTAzMywxMSArMTAxMSw4IEBACiAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocERldmljZS0+ZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CiB9CiAgcE1nbXQtPmVMYXN0U3RhdGUgPSBwTWdtdC0+ZUN1cnJTdGF0ZSA7Ci0jZW5kaWYKIAotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICBzX3VDYWxjdWxhdGVMaW5rUXVhbCgodm9pZCAqKXBEZXZpY2UpOwotI2VuZGlmCiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCAoTUFYX05PREVfTlVNICsgMSk7IGlpKyspIHsKIApAQCAtMTQyMiwyMSArMTM5NywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgKHdSYXRlIDwgUkFURV8xOE0pICkgewogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlWzBdLnVUeEZhaWxbd1JhdGVdKz1ieVR4UmV0cnk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMCkgewotICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkwW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwotICAgICAgICAgICAgICAgICAgICB9CisJCQlmb3IgKGlpID0gMDsgaWkgPCBieVR4UmV0cnk7IGlpKyspIHsKKwkJCQlpZiAoaWkgPCA1KQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dW2lpXTsKKwkJCQllbHNlCisJCQkJCXdGYWxsQmFja1JhdGUgPQorCQkJCQkJYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1bNF07CisJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS51VHhGYWlsW3dGYWxsQmFja1JhdGVdKys7CisJCQl9CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMSkgewotICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpIDwgNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MVt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkxW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwotICAgICAgICAgICAgICAgICAgICB9CisJCQlmb3IgKGlpID0gMDsgaWkgPCBieVR4UmV0cnk7IGlpKyspIHsKKwkJCQlpZiAoaWkgPCA1KQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTFbd1JhdGUtUkFURV8xOE1dW2lpXTsKKwkJCQllbHNlCisJCQkJCXdGYWxsQmFja1JhdGUgPQorCQkJCQkJYXdIV1JldHJ5MVt3UmF0ZS1SQVRFXzE4TV1bNF07CisJCQkJcE1nbXQtPnNOb2RlREJUYWJsZVswXS51VHhGYWlsW3dGYWxsQmFja1JhdGVdKys7CisJCQl9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTQ3NiwyMSArMTQ1NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICh3UmF0ZSA8IFJBVEVfMThNKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3UmF0ZV0rPWJ5VHhSZXRyeTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieUZhbGxCYWNrID09IEFVVE9fRkJfMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGlpPTA7aWk8YnlUeFJldHJ5O2lpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWkgPCA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3RmFsbEJhY2tSYXRlID0gYXdIV1JldHJ5MFt3UmF0ZS1SQVRFXzE4TV1baWldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZhbGxCYWNrUmF0ZSA9IGF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dWzRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOworCQkJZm9yIChpaSA9IDA7IGlpIDwgYnlUeFJldHJ5OyBpaSsrKSB7CisJCQkJaWYgKGlpIDwgNSkKKwkJCQkJd0ZhbGxCYWNrUmF0ZSA9CisJCQkJCQlhd0hXUmV0cnkwW3dSYXRlLVJBVEVfMThNXVtpaV07CisJCQkJZWxzZQorCQkJCQl3RmFsbEJhY2tSYXRlID0KKwkJCQkJCWF3SFdSZXRyeTBbd1JhdGUtUkFURV8xOE1dWzRdOworCQkJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5RmFsbEJhY2sgPT0gQVVUT19GQl8xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoaWk9MDtpaTxieVR4UmV0cnk7aWkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpaSA8IDUpCisJCSAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGJ5VHhSZXRyeTsgaWkrKykgeworCQkJaWYgKGlpIDwgNSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd0ZhbGxCYWNrUmF0ZSA9IGF3SFdSZXRyeTFbd1JhdGUtUkFURV8xOE1dW2lpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQllbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdGYWxsQmFja1JhdGUgPSBhd0hXUmV0cnkxW3dSYXRlLVJBVEVfMThNXVs0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTWdtdC0+c05vZGVEQlRhYmxlW3VOb2RlSW5kZXhdLnVUeEZhaWxbd0ZhbGxCYWNrUmF0ZV0rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCXBNZ210LT5zTm9kZURCVGFibGVbdU5vZGVJbmRleF0udVR4RmFpbFt3RmFsbEJhY2tSYXRlXSsrOworCQkgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwpAQCAtMTU4Nyw3ICsxNTY4LDYgQEAKICAgICB9CiB9CiAKLSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogdm9pZCBzX3VDYWxjdWxhdGVMaW5rUXVhbCh2b2lkICpoRGV2aWNlQ29udGV4dCkKIHsKICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwpAQCAtMTYzMiw3ICsxNjEyLDYgQEAKICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLlR4UmV0cnlPa0NvdW50ID0gMDsKICAgIHJldHVybjsKIH0KLSNlbmRpZgogCiB2b2lkIEJTU3ZDbGVhckFueUJTU0pvaW5SZWNvcmQodm9pZCAqaERldmljZUNvbnRleHQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Jzc2RiLmgKaW5kZXggOTY4NmQ4Ni4uYThmOTdlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ic3NkYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvYnNzZGIuaApAQCAtNDAsNyArNDAsNyBAQAogCiAjZGVmaW5lIE1BWF9OT0RFX05VTSAgICAgICAgICAgICA2NAogI2RlZmluZSBNQVhfQlNTX05VTSAgICAgICAgICAgICAgNDIKLSNkZWZpbmUgTE9TVF9CRUFDT05fQ09VTlQgICAgICAJIDEwICAgLy8gMTAgc2VjLCBYUCBkZWZpbmVkCisjZGVmaW5lIExPU1RfQkVBQ09OX0NPVU5UICAgICAgICAxMCAgIC8qIDEwIHNlYywgWFAgZGVmaW5lZCAqLwogI2RlZmluZSBNQVhfUFNfVFhfQlVGICAgICAgICAgICAgMzIgICAvLyBzdGEgbWF4IHBvd2VyIHNhdmluZyB0eCBidWYKICNkZWZpbmUgQURIT0NfTE9TVF9CRUFDT05fQ09VTlQgIDMwICAgLy8gMzAgc2VjLCBiZWFjb24gbG9zdCBmb3IgYWRob2Mgb25seQogI2RlZmluZSBNQVhfSU5BQ1RJVkVfQ09VTlQgICAgICAgMzAwICAvLyAzMDAgc2VjLCBpbmFjdGl2ZSBTVEEgbm9kZSByZWZyZXNoCkBAIC04MywxMyArODMsMTMgQEAKIHR5cGVkZWYgc3RydWN0IHRhZ1NFUlBPYmplY3QgewogICAgIEJPT0wgICAgYkVSUEV4aXN0OwogICAgIEJZVEUgICAgYnlFUlA7Ci19RVJQT2JqZWN0LCAqUEVSUE9iamVjdDsKK30gRVJQT2JqZWN0LCAqUEVSUE9iamVjdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlNOQ2FwT2JqZWN0IHsKICAgICBCT09MICAgIGJSU05DYXBFeGlzdDsKICAgICBXT1JEICAgIHdSU05DYXA7Ci19U1JTTkNhcE9iamVjdCwgKlBTUlNOQ2FwT2JqZWN0OworfSBTUlNOQ2FwT2JqZWN0LCAqUFNSU05DYXBPYmplY3Q7CiAKIC8vIEJTUyBpbmZvKEFQKQogI3ByYWdtYSBwYWNrKDEpCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICBTUlNOQ2FwT2JqZWN0ICAgc1JTTkNhcE9iajsKICAgICBCWVRFICAgICAgICAgICAgYWJ5SUVzWzEwMjRdOyAgIC8vIGRvbid0IG1vdmUgdGhpcyBmaWVsZCAhIQogCi19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBLbm93bkJTUyAsICpQS25vd25CU1M7CiAKIApAQCAtMjc4LDkgKzI3OCw5IEBACiAKIEJPT0wgQlNTYklzU1RBSW5Ob2RlREIodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgICBQQllURSBhYnlEc3RBZGRyLAotCQkgICAgICAgUFVJTlQgcHVOb2RlSW5kZXgpOworCQkgICAgICAgdW5zaWduZWQgaW50ICpwdU5vZGVJbmRleCk7CiAKLXZvaWQgQlNTdkNyZWF0ZU9uZU5vZGUodm9pZCAqaERldmljZUNvbnRleHQsIFBVSU5UIHB1Tm9kZUluZGV4KTsKK3ZvaWQgQlNTdkNyZWF0ZU9uZU5vZGUodm9pZCAqaERldmljZUNvbnRleHQsIHVuc2lnbmVkIGludCAqcHVOb2RlSW5kZXgpOwogCiB2b2lkIEJTU3ZVcGRhdGVBUE5vZGUodm9pZCAqaERldmljZUNvbnRleHQsCiAJCSAgICAgIFBXT1JEIHB3Q2FwSW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKaW5kZXggZmU0ZWM5MS4uMzViZjRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jYXJkLmMKQEAgLTQ1NywxMiArNDU3LDExIEBACiAgICAgYWJ5RGF0YVsxNF0gPSBhYnlTaWduYWxbM107CiAgICAgYWJ5RGF0YVsxNV0gPSBhYnlTZXJ2WzNdOwogCi0gICAgZm9yKGk9MDtpPDk7aSsrKSB7Ci0gICAgICAgIGFieURhdGFbMTYraSoyXSA9IGFieVR4UmF0ZVtpXTsKLSAgICAgICAgYWJ5RGF0YVsxNitpKjIrMV0gPSBhYnlSc3ZUaW1lW2ldOworICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKKwlhYnlEYXRhWzE2K2kqMl0gPSBhYnlUeFJhdGVbaV07CisJYWJ5RGF0YVsxNitpKjIrMV0gPSBhYnlSc3ZUaW1lW2ldOwogICAgIH0KIAotCiAgICAgQ09OVFJPTG5zUmVxdWVzdE91dChwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgTUFDX1JFR19SU1BJTkZfQl8xLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYwppbmRleCBmNDliNmUxLi42YWQwM2U0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2NoYW5uZWwuYwpAQCAtNDQxLDExICs0NDEsMTAgQEAKIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKICAgICBCT09MICAgICAgICBiTXVsdGlCYW5kID0gRkFMU0U7Ci0gICAgdW5zaWduZWQgaW50ICAgICAgICBpaTsKKyAgICB1bnNpZ25lZCBpbnQgaWk7CiAKLSAgICBmb3IoaWk9MTtpaTw9Q0JfTUFYX0NIQU5ORUw7aWkrKykgewotICAgICAgICBzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7Ci0gICAgfQorICAgIGZvciAoaWkgPSAxOyBpaSA8PSBDQl9NQVhfQ0hBTk5FTDsgaWkrKykKKwlzQ2hhbm5lbFRibFtpaV0uYlZhbGlkID0gRkFMU0U7CiAKICAgICBzd2l0Y2ggKHBEZXZpY2UtPmJ5UkZUeXBlKSB7CiAgICAgICAgIGNhc2UgUkZfQUwyMjMwOgpAQCAtNDY0LDQzICs0NjMsNDMgQEAKICAgICBpZiAoKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHx8CiAgICAgICAgIChwRGV2aWNlLT5iMTFoRWFibGUgPT0gVFJVRSkpIHsKICAgICAgICAgaWYgKGJNdWx0aUJhbmQgPT0gVFJVRSkgewotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUw7aWkrKykgewotICAgICAgICAgICAgICAgIHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7CisJCWZvciAoaWkgPSAwOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5T0ZETURlZmF1bHRQd3JbaWkrMV07CiAgICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieU9GRE1EZWZhdWx0UHdyW2lpKzFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUxfMjRHO2lpKyspIHsKKwkJfQorCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspIHsKICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07CiAgICAgICAgICAgICAgICAgLy9wRGV2aWNlLT5hYnlMb2NhbFB3cltpaSsxXSA9IHBEZXZpY2UtPmFieUNDS0RlZmF1bHRQd3JbaWkrMV07Ci0gICAgICAgICAgICB9CisJCX0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgc0NoYW5uZWxUYmxbaWkrMV0uYlZhbGlkID0gVFJVRTsKKwkJZm9yIChpaSA9IDA7IGlpIDwgQ0JfTUFYX0NIQU5ORUxfMjRHOyBpaSsrKSB7CisJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gcERldmljZS0+YWJ5Q0NLRGVmYXVsdFB3cltpaSsxXTsKLSAgICAgICAgICAgIH0KKwkJfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChwRGV2aWNlLT5ieVpvbmVUeXBlIDw9IENDT0RFX01BWCkgewogICAgICAgICBpZiAoYk11bHRpQmFuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBmb3IoaWk9MDtpaTxDQl9NQVhfQ0hBTk5FTDtpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTDsgaWkrKykgeworCQkJaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgeworCQkJCXNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCA9IFRSVUU7CiAgICAgICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5UmVnUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07CiAgICAgICAgICAgICAgICAgICAgIC8vcERldmljZS0+YWJ5TG9jYWxQd3JbaWkrMV0gPSBDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5ieVBvd2VyW2lpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJCQl9CisJCX0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvcihpaT0wO2lpPENCX01BWF9DSEFOTkVMXzI0RztpaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJDaGFubmVsSWR4TGlzdFtpaV0gIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOworCQlmb3IgKGlpID0gMDsgaWkgPCBDQl9NQVhfQ0hBTk5FTF8yNEc7IGlpKyspIHsKKwkJCWlmIChDaGFubmVsUnVsZVRhYltwRGV2aWNlLT5ieVpvbmVUeXBlXS5iQ2hhbm5lbElkeExpc3RbaWldICE9IDApIHsKKwkJCQlzQ2hhbm5lbFRibFtpaSsxXS5iVmFsaWQgPSBUUlVFOwogICAgICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9IENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmJ5UG93ZXJbaWldOwogICAgICAgICAgICAgICAgICAgICAvL3BEZXZpY2UtPmFieUxvY2FsUHdyW2lpKzFdID0gQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uYnlQb3dlcltpaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQkJfQorCQl9CiAgICAgICAgIH0KICAgICB9CiAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8iWm9uZT1bJWRdWyVjXVslY10hIVxuIixwRGV2aWNlLT5ieVpvbmVUeXBlLENoYW5uZWxSdWxlVGFiW3BEZXZpY2UtPmJ5Wm9uZVR5cGVdLmNoQ291bnRyeUNvZGVbMF0sQ2hhbm5lbFJ1bGVUYWJbcERldmljZS0+Ynlab25lVHlwZV0uY2hDb3VudHJ5Q29kZVsxXSk7Ci0gICAgZm9yKGlpPTA7aWk8Q0JfTUFYX0NIQU5ORUw7aWkrKykgeworICAgIGZvciAoaWkgPSAwOyBpaSA8IENCX01BWF9DSEFOTkVMOyBpaSsrKSB7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQ2hhbm5lbFslZF0gaXMgWyVkXVxuIixzQ2hhbm5lbFRibFtpaV0uYnlDaGFubmVsTnVtYmVyLHNDaGFubmVsVGJsW2lpKzFdLmJWYWxpZCk7CiAgICAgICAgIC8qaWYgKHBEZXZpY2UtPmFieVJlZ1B3cltpaSsxXSA9PSAwKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5hYnlSZWdQd3JbaWkrMV0gPSBwRGV2aWNlLT5hYnlPRkRNRGVmYXVsdFB3cltpaSsxXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY2hhbm5lbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKaW5kZXggOTFjMmZmYy4uZTdiM2MxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jaGFubmVsLmgKQEAgLTM1LDIzICszNSwyMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogdHlwZWRlZiBzdHJ1Y3QgdGFnU0NoYW5uZWxUYmxFbGVtZW50IHsKICAgICBCWVRFICAgIGJ5Q2hhbm5lbE51bWJlcjsKICAgICB1bnNpZ25lZCBpbnQgICAgdUZyZXF1ZW5jeTsKICAgICBCT09MICAgIGJWYWxpZDsKLX1TQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OworfSBTQ2hhbm5lbFRibEVsZW1lbnQsICpQU0NoYW5uZWxUYmxFbGVtZW50OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBCT09MICAgIENoYW5uZWxWYWxpZCh1bnNpZ25lZCBpbnQgQ291bnRyeUNvZGUsIHVuc2lnbmVkIGludCBDaGFubmVsTnVtKTsKIHZvaWQgICAgQ0h2SW5pdENoYW5uZWxUYWJsZSh2b2lkICpwRGV2aWNlSGFuZGxlcik7CiBCWVRFICAgIENIYnlHZXRDaGFubmVsTWFwcGluZyhCWVRFIGJ5Q2hhbm5lbE51bWJlcik7CiAKLUJPT0wKLUNIdkNoYW5uZWxHZXRMaXN0ICgKLSAgICAgIHVuc2lnbmVkIGludCAgICAgICB1Q291bnRyeUNvZGVJZHgsCi0gICAgIFBCWVRFICAgICAgcGJ5Q2hhbm5lbFRhYmxlCi0gICAgKTsKK0JPT0wgQ0h2Q2hhbm5lbEdldExpc3QodW5zaWduZWQgaW50IHVDb3VudHJ5Q29kZUlkeCwgUEJZVEUgcGJ5Q2hhbm5lbFRhYmxlKTsKIAotI2VuZGlmICAvKiBfUkVHVUxBVEVfSF8gKi8KKyNlbmRpZiAgLyogX0NIQU5ORUxfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKaW5kZXggOGFhYjY3MS4uNWQ4YzU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmMKQEAgLTcyLDcgKzcyLDcgQEAKIHZvaWQgQ29udHJvbHZSZWFkQnl0ZShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5UmVnVHlwZSwgQllURSBieVJlZ09mcywKIAkJCVBCWVRFIHBieURhdGEpCiB7Ci0JTlRTVEFUVVMJbnRTdGF0dXM7CisJaW50IG50U3RhdHVzOwogCUJZVEUJYnlEYXRhMTsKIAludFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLAogCQkJCQlNRVNTQUdFX1RZUEVfUkVBRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvY29udHJvbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKaW5kZXggMTQ2YjQ1MC4uYmJlNjEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9jb250cm9sLmgKQEAgLTM2LDE2ICszNiwxNCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjZGVmaW5lIENPTlRST0xuc1JlcXVlc3RPdXQoRGV2aWNlLCBSZXF1ZXN0LCBWYWx1ZSwgSW5kZXgsIExlbmd0aCwgQnVmZmVyKSBcCisJUElQRW5zQ29udHJvbE91dChEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCiAKLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdE91dCggRGV2aWNlLFJlcXVlc3QsVmFsdWUsSW5kZXgsTGVuZ3RoLEJ1ZmZlcikgXAotICAgICAgICBQSVBFbnNDb250cm9sT3V0KCBEZXZpY2UsUmVxdWVzdCxWYWx1ZSxJbmRleCxMZW5ndGgsQnVmZmVyKQorI2RlZmluZSBDT05UUk9MbnNSZXF1ZXN0T3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpIFwKKwlQSVBFbnNDb250cm9sT3V0QXN5bihEZXZpY2UsIFJlcXVlc3QsIFZhbHVlLCBJbmRleCwgTGVuZ3RoLCBCdWZmZXIpCiAKLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdE91dEFzeW4oIERldmljZSxSZXF1ZXN0LFZhbHVlLEluZGV4LExlbmd0aCxCdWZmZXIpIFwKLSAgICAgICAgUElQRW5zQ29udHJvbE91dEFzeW4oIERldmljZSxSZXF1ZXN0LFZhbHVlLEluZGV4LExlbmd0aCxCdWZmZXIpCi0KLSNkZWZpbmUgQ09OVFJPTG5zUmVxdWVzdEluKCBEZXZpY2UsUmVxdWVzdCxWYWx1ZSxJbmRleCxMZW5ndGgsQnVmZmVyKSBcCi0gICAgICAgIFBJUEVuc0NvbnRyb2xJbiggRGV2aWNlLFJlcXVlc3QsVmFsdWUsSW5kZXgsTGVuZ3RoLEJ1ZmZlcikKLQorI2RlZmluZSBDT05UUk9MbnNSZXF1ZXN0SW4oRGV2aWNlLCBSZXF1ZXN0LCBWYWx1ZSwgSW5kZXgsIExlbmd0aCwgQnVmZmVyKSBcCisJUElQRW5zQ29udHJvbEluKERldmljZSwgUmVxdWVzdCwgVmFsdWUsIEluZGV4LCBMZW5ndGgsIEJ1ZmZlcikKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kYXRhcmF0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kYXRhcmF0ZS5jCmluZGV4IDJlMTgzZGQuLjVjMjcxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGF0YXJhdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RhdGFyYXRlLmMKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBCWVRFICAgICAgICAgICAgaWk7CiAKICAgICAvLyBjbGVhciBzdGF0aXN0aWMgY291bnRlciBmb3IgYXV0b19yYXRlCi0gICAgZm9yKGlpPTA7aWk8PU1BWF9SQVRFO2lpKyspIHsKKyAgICBmb3IgKGlpID0gMDsgaWkgPD0gTUFYX1JBVEU7IGlpKyspIHsKICAgICAgICAgcHNOb2RlREJUYWJsZS0+dVR4T2tbaWldID0gMDsKICAgICAgICAgcHNOb2RlREJUYWJsZS0+dVR4RmFpbFtpaV0gPSAwOwogICAgIH0KQEAgLTMwOSw3ICszMDksNiBAQAogewogUFNEZXZpY2UgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpIHBEZXZpY2VIYW5kbGVyOwogUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7Ci0jaWYgMSAgLy9taWtlIGZpeGVkIG9sZDogdXNlIHBhY2tldCBsb3NlIHJhdGlvIGFsZ29yaXRobSB0byBjb250cm9sIHJhdGUKIFdPUkQgICAgICAgICAgICB3SWR4RG93blJhdGUgPSAwOwogdW5zaWduZWQgaW50ICAgICAgICAgICAgaWk7CiBCT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKQEAgLTMzNyw3ICszMzYsNyBAQAogICAgICAgICBwc05vZGVEQlRhYmxlLT51VGltZUNvdW50ID0gMDsKICAgICB9CiAKLSAgICBmb3IoaWk9MDtpaTxNQVhfUkFURTtpaSsrKSB7CisgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX1JBVEU7IGlpKyspIHsKICAgICAgICAgaWYgKHBzTm9kZURCVGFibGUtPndTdXBwUmF0ZSAmICgweDAwMDE8PGlpKSkgewogICAgICAgICAgICAgaWYgKGJBdXRvUmF0ZVtpaV0gPT0gVFJVRSkgewogICAgICAgICAgICAgICAgIHdJZHhVcFJhdGUgPSAoV09SRCkgaWk7CkBAIC0zNDcsNyArMzQ2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvcihpaT0wO2lpPD1wc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZTtpaSsrKSB7CisgICAgZm9yIChpaSA9IDA7IGlpIDw9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSsrKSB7CiAgICAgICAgIGlmICggKHBzTm9kZURCVGFibGUtPnVUeE9rW2lpXSAhPSAwKSB8fAogICAgICAgICAgICAgIChwc05vZGVEQlRhYmxlLT51VHhGYWlsW2lpXSAhPSAwKSApIHsKICAgICAgICAgICAgIGR3VGhyb3VnaHB1dFRibFtpaV0gKj0gcHNOb2RlREJUYWJsZS0+dVR4T2tbaWldOwpAQCAtMzYyLDcgKzM2MSw3IEBACiAgICAgZHdUaHJvdWdocHV0ID0gZHdUaHJvdWdocHV0VGJsW3BzTm9kZURCVGFibGUtPndUeERhdGFSYXRlXTsKIAogICAgIHdJZHhEb3duUmF0ZSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOwotICAgIGZvcihpaSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSA+IDA7KSB7CisgICAgZm9yIChpaSA9IHBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlOyBpaSA+IDA7KSB7CiAgICAgICAgIGlpLS07CiAgICAgICAgIGlmICggKGR3VGhyb3VnaHB1dFRibFtpaV0gPiBkd1Rocm91Z2hwdXQpICYmCiAgICAgICAgICAgICAgKGJBdXRvUmF0ZVtpaV09PVRSVUUpICkgewpAQCAtMzg5LDY2ICszODgsNiBAQAogICAgIHNfdlJlc2V0Q291bnRlcihwc05vZGVEQlRhYmxlKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJhdGU6ICVkLCBVOiVkLCBEOiVkXG4iLCAoaW50KXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlLCAoaW50KXdJZHhVcFJhdGUsIChpbnQpd0lkeERvd25SYXRlKTsKICAgICByZXR1cm47Ci0jZWxzZSAgLy9taWtlIGZpeGVkIG5ldzogdXNlIGRpZmZlci1zaWduYWwgc3RyZW5ndGggdG8gY29udHJvbCByYXRlCi1XT1JEICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IDA7Ci1CT09MICAgICAgICAgICAgYkF1dG9SYXRlW01BWF9SQVRFXSAgICA9IHtUUlVFLFRSVUUsVFJVRSxUUlVFLEZBTFNFLEZBTFNFLFRSVUUsVFJVRSxUUlVFLFRSVUUsVFJVRSxUUlVFfTsKLXVuc2lnbmVkIGludCAgICAgICAgICAgIGlpOwotbG9uZyAgbGRCbTsKLQotICAgIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSAhPSBXTUFDX05PX1NDQU5OSU5HKSB7Ci0gICAgICAgIC8vIERvbid0IGRvIEZhbGxiYWNrIHdoZW4gc2Nhbm5pbmcgQ2hhbm5lbAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yKGlpPTA7aWk8TUFYX1JBVEU7aWkrKykgewotICAgICAgICBpZiAocHNOb2RlREJUYWJsZS0+d1N1cHBSYXRlICYgKDB4MDAwMTw8aWkpKSB7Ci0gICAgICAgICAgICBpZiAoYkF1dG9SYXRlW2lpXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd0lkeFVwUmF0ZSA9IChXT1JEKSBpaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJBdXRvUmF0ZVtpaV0gPSBGQUxTRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgICAgUkZ2UlNTSVRvZEJtKHBEZXZpY2UsIChCWVRFKShwRGV2aWNlLT51Q3VyclJTU0kpLCAmbGRCbSk7Ci0KLQlpZiAobGRCbSA+IC01NSkgewotCQlpZiAoIHBzTm9kZURCVGFibGUtPndTdXBwUmF0ZSAmICgweDAwMDE8PFJBVEVfNTRNKSApICAvLzExYS9nCi0gICAgICAJCXsKLQkgIAkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzU0TTsKLQkJfQotCQllbHNleyAvLzExYgotCSAgCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfMTFNOwotCQl9Ci0JfQotCi1pZiAod0lkeFVwUmF0ZSA9PSBSQVRFXzU0TSApIHsgICAgIC8vMTFhL2cKLQkJaWYgKGxkQm0gPiAtNTYgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzU0TTsKLQkJZWxzZSBpZiAobGRCbSA+IC02MSApCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfNDhNOwotCQllbHNlIGlmIChsZEJtID4gLTY2ICkKLQkJCXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlID0gUkFURV8zNk07Ci0JCWVsc2UgaWYgKGxkQm0gPiAtNzIgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzI0TTsKLQkJZWxzZSBpZiAobGRCbSA+IC04MCApCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfNU07Ci0JCWVsc2UgewotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzFNOwotCQkJLy9pbmNyZWFzaW5nVkdBID0gVFJVRTsKLQkJfQotCX0KLQllbHNlIHsgIC8vMTFiCi0JCWlmIChsZEJtID4gLTY1ICkKLQkJCXBzTm9kZURCVGFibGUtPndUeERhdGFSYXRlID0gUkFURV8xMU07Ci0JCWVsc2UgaWYgKGxkQm0gPiAtNzUgKQotCQkJcHNOb2RlREJUYWJsZS0+d1R4RGF0YVJhdGUgPSBSQVRFXzVNOwotCQllbHNlCi0JCQlwc05vZGVEQlRhYmxlLT53VHhEYXRhUmF0ZSA9IFJBVEVfMU07Ci0JfQotCi0gICByZXR1cm47Ci0jZW5kaWYKIH0KIAogLyorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Rlc2MuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCmluZGV4IDA3Zjc5NGUuLjc2NzExMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGVzYy5oCkBAIC01MSw3ICs1MSw2IEBACiAKICNkZWZpbmUgTUFYX0lOVEVSUlVQVF9TSVpFICAgICAgICAgICAgICAzMgogCi0KICNkZWZpbmUgUlhfQkxPQ0tTICAgICAgICAgICA2NCAgICAgICAgICAvLyBmb3JtIDB4NjAgdG8gMHhBMAogI2RlZmluZSBUWF9CTE9DS1MgICAgICAgICAgIDMyICAgICAgICAgIC8vIGZyb20gMHhBMCB0byAweEMwCiAKQEAgLTYzLDggKzYyLDYgQEAKICNkZWZpbmUgQ0JfUkRfTlVNICAgICAgICAgICA2NCAgICAgICAgICAvLyBkZWZhdWx0ICMgb2YgUkQKICNkZWZpbmUgQ0JfVERfTlVNICAgICAgICAgICA2NCAgICAgICAgICAvLyBkZWZhdWx0ICMgb2YgVEQKIAotCi0KIC8vCiAvLyBCaXRzIGluIHRoZSBSU1IgcmVnaXN0ZXIKIC8vCkBAIC04Nyw3ICs4NCw2IEBACiAjZGVmaW5lIE5FV1JTUl9CQ05ISVRBSUQgICAgMHgwMiAgICAgICAgLy8gMDAwMCAwMDEwCiAjZGVmaW5lIE5FV1JTUl9CQ05ISVRBSUQwICAgMHgwMSAgICAgICAgLy8gMDAwMCAwMDAxCiAKLQogLy8KIC8vIEJpdHMgaW4gdGhlIFRTUiByZWdpc3RlcgogLy8KQEAgLTk2LDE3ICs5MiwxMyBAQAogI2RlZmluZSBUU1JfQUNLREFUQSAgICAgICAgIDB4MDIgICAgICAgIC8vIDAwMDAgMDAxMAogI2RlZmluZSBUU1JfVkFMSUQgICAgICAgICAgIDB4MDEgICAgICAgIC8vIDAwMDAgMDAwMQogCi0KICNkZWZpbmUgQ0JfUFJPVE9DT0xfUkVTRVJWRURfU0VDVElPTiAgICAxNgogCi0KLQogLy8gaWYgcmV0cnlzIGV4Y2VzcyAxNSB0aW1lcyAsIHR4IHdpbGwgYWJvcnQsIGFuZAogLy8gaWYgdHggZmlmbyB1bmRlcmZsb3csIHR4IHdpbGwgZmFpbAogLy8gd2Ugc2hvdWxkIHRyeSB0byByZXNlbmQgaXQKICNkZWZpbmUgQ0JfTUFYX1RYX0FCT1JUX1JFVFJZICAgMwogCi0KICNkZWZpbmUgRklGT0NUTF9BVVRPX0ZCXzEgICAweDEwMDAgLy8gMDAwMSAwMDAwIDAwMDAgMDAwMAogI2RlZmluZSBGSUZPQ1RMX0FVVE9fRkJfMCAgIDB4MDgwMCAvLyAwMDAwIDEwMDAgMDAwMCAwMDAwCiAjZGVmaW5lIEZJRk9DVExfR1JQQUNLICAgICAgMHgwNDAwIC8vIDAwMDAgMDEwMCAwMDAwIDAwMDAKQEAgLTEzNyw3ICsxMjksNiBAQAogI2RlZmluZSBGUkFHQ1RMX1NUQUZSQUcgICAgIDB4MDAwMSAvLyAwMDAwIDAwMDAgMDAwMCAwMDAxCiAjZGVmaW5lIEZSQUdDVExfTk9ORlJBRyAgICAgMHgwMDAwIC8vIDAwMDAgMDAwMCAwMDAwIDAwMDAKIAotCiAvLyNkZWZpbmUgVFlQRV9BQzBETUEgICAgIDAKIC8vI2RlZmluZSBUWVBFX1RYRE1BMCAgICAgMQogI2RlZmluZSBUWVBFX1RYRE1BMCAgICAgMApAQCAtMTUyLDggKzE0Myw2IEBACiAjZGVmaW5lIFRZUEVfUlhETUExICAgICAxCiAjZGVmaW5lIFRZUEVfTUFYUkQgICAgICAyCiAKLQotCiAvLyBURF9JTkZPIGZsYWdzIGNvbnRyb2wgYml0CiAjZGVmaW5lIFREX0ZMQUdTX05FVElGX1NLQiAgICAgICAgICAgICAgIDB4MDEgICAgICAgLy8gY2hlY2sgaWYgbmVlZCByZWxlYXNlIHNrYgogI2RlZmluZSBURF9GTEFHU19QUklWX1NLQiAgICAgICAgICAgICAgICAweDAyICAgICAgIC8vIGNoZWNrIGlmIGNhbGxlZCBmcm9tIHByaXZhdGUgc2tiKGhvc3RhcCkKQEAgLTE2Miw3ICsxNTEsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8vCiAvLyBSc3ZUaW1lIGJ1ZmZlciBoZWFkZXIKIC8vCkBAIC0xNzMsOCArMTYxLDkgQEAKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgV09SRCAgICAgICAgd1R4UnJ2VGltZV9iOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNScnZUaW1lX2dSVFMsICpQU1JydlRpbWVfZ1JUUzsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nUlRTICpQQ1NScnZUaW1lX2dSVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2dDVFMgewpAQCAtMTgyLDIyICsxNzEsMjUgQEAKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgV09SRCAgICAgICAgd1R4UnJ2VGltZV9iOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWVfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNScnZUaW1lX2dDVFMsICpQU1JydlRpbWVfZ0NUUzsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9nQ1RTICpQQ1NScnZUaW1lX2dDVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NScnZUaW1lX2FiIHsKICAgICBXT1JEICAgICAgICB3UlRTVHhScnZUaW1lOwogICAgIFdPUkQgICAgICAgIHdUeFJydlRpbWU7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hYiwgKlBTUnJ2VGltZV9hYjsKKwogdHlwZWRlZiBjb25zdCBTUnJ2VGltZV9hYiAqUENTUnJ2VGltZV9hYjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JydlRpbWVfYXRpbSB7CiAgICAgV09SRCAgICAgICAgd0NUU1R4UnJ2VGltZV9iYTsKICAgICBXT1JEICAgICAgICB3VHhScnZUaW1lX2E7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUnJ2VGltZV9hdGltLCAqUFNScnZUaW1lX2F0aW07CisKIHR5cGVkZWYgY29uc3QgU1JydlRpbWVfYXRpbSAqUENTUnJ2VGltZV9hdGltOwogCiAvLwpAQCAtMjA4LDggKzIwMCw5IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25JRDsKICAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKICAgICBCWVRFICAgIGFieVRBW0VUSF9BTEVOXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNEYXRhLCAqUFNSVFNEYXRhOworCiB0eXBlZGVmIGNvbnN0IFNSVFNEYXRhICpQQ1NSVFNEYXRhOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2cgewpAQCAtMjI0LDExICsyMTcsMTAgQEAKICAgICBXT1JEICAgICAgICB3RHVyYXRpb25fYmI7CiAgICAgV09SRCAgICAgICAgd1Jlc2VydmVkOwogICAgIFNSVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2csICpQU1JUU19nOwogdHlwZWRlZiBjb25zdCBTUlRTX2cgKlBDU1JUU19nOwogCi0KIHR5cGVkZWYgc3RydWN0IHRhZ1NSVFNfZ19GQiB7CiAgICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZF9iOwogICAgIEJZVEUgICAgICAgIGJ5U2VydmljZUZpZWxkX2I7CkBAIC0yNDUsMTAgKzIzNywxMCBAQAogICAgIFdPUkQgICAgICAgIHdSVFNEdXJhdGlvbl9iYV9mMTsKICAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fYWFfZjE7CiAgICAgU1JUU0RhdGEgICAgRGF0YTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNSVFNfZ19GQiwgKlBTUlRTX2dfRkI7Ci10eXBlZGVmIGNvbnN0IFNSVFNfZ19GQiAqUENTUlRTX2dfRkI7CiAKK3R5cGVkZWYgY29uc3QgU1JUU19nX0ZCICpQQ1NSVFNfZ19GQjsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU1JUU19hYiB7CiAgICAgQllURSAgICAgICAgYnlTaWduYWxGaWVsZDsKQEAgLTI1NywxMCArMjQ5LDEwIEBACiAgICAgV09SRCAgICAgICAgd0R1cmF0aW9uOwogICAgIFdPUkQgICAgICAgIHdSZXNlcnZlZDsKICAgICBTUlRTRGF0YSAgICBEYXRhOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1JUU19hYiwgKlBTUlRTX2FiOwotdHlwZWRlZiBjb25zdCBTUlRTX2FiICpQQ1NSVFNfYWI7CiAKK3R5cGVkZWYgY29uc3QgU1JUU19hYiAqUENTUlRTX2FiOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTUlRTX2FfRkIgewogICAgIEJZVEUgICAgICAgIGJ5U2lnbmFsRmllbGQ7CkBAIC0yNzEsOCArMjYzLDkgQEAKICAgICBXT1JEICAgICAgICB3UlRTRHVyYXRpb25fZjA7CiAgICAgV09SRCAgICAgICAgd1JUU0R1cmF0aW9uX2YxOwogICAgIFNSVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTUlRTX2FfRkIsICpQU1JUU19hX0ZCOworCiB0eXBlZGVmIGNvbnN0IFNSVFNfYV9GQiAqUENTUlRTX2FfRkI7CiAKIApAQCAtMjg0LDcgKzI3Nyw3IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25JRDsKICAgICBCWVRFICAgIGFieVJBW0VUSF9BTEVOXTsKICAgICBXT1JEICAgIHdSZXNlcnZlZDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNDVFNEYXRhLCAqUFNDVFNEYXRhOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTQ1RTIHsKQEAgLTI5NCw4ICsyODcsOSBAQAogICAgIFdPUkQgICAgICAgIHdEdXJhdGlvbl9iYTsKICAgICBXT1JEICAgICAgICB3UmVzZXJ2ZWQ7CiAgICAgU0NUU0RhdGEgICAgRGF0YTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNDVFMsICpQU0NUUzsKKwogdHlwZWRlZiBjb25zdCBTQ1RTICpQQ1NDVFM7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDVFNfRkIgewpAQCAtMzA3LDEwICszMDEsMTAgQEAKICAgICBXT1JEICAgICAgICB3Q1RTRHVyYXRpb25fYmFfZjA7CiAgICAgV09SRCAgICAgICAgd0NUU0R1cmF0aW9uX2JhX2YxOwogICAgIFNDVFNEYXRhICAgIERhdGE7Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTQ1RTX0ZCLCAqUFNDVFNfRkI7Ci10eXBlZGVmIGNvbnN0IFNDVFNfRkIgKlBDU0NUU19GQjsKIAordHlwZWRlZiBjb25zdCBTQ1RTX0ZCICpQQ1NDVFNfRkI7CiAKIC8vCiAvLyBUeCBGSUZPIGhlYWRlcgpAQCAtMzIxLDE0ICszMTUsMTQgQEAKICAgICBXT1JEICAgIHdUaW1lU3RhbXA7CiAgICAgV09SRCAgICB3RnJhZ0N0bDsKICAgICBXT1JEICAgIHdSZXNlcnZlZDsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeEJ1ZkhlYWQsICpQU1R4QnVmSGVhZDsKIHR5cGVkZWYgY29uc3QgU1R4QnVmSGVhZCAqUENTVHhCdWZIZWFkOwogCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhTaG9ydEJ1ZkhlYWQgewogICAgIFdPUkQgICAgd0ZJRk9DdGw7CiAgICAgV09SRCAgICB3VGltZVN0YW1wOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4U2hvcnRCdWZIZWFkLCAqUFNUeFNob3J0QnVmSGVhZDsKIHR5cGVkZWYgY29uc3QgU1R4U2hvcnRCdWZIZWFkICpQQ1NUeFNob3J0QnVmSGVhZDsKIApAQCAtMzQ2LDggKzM0MCw5IEBACiAgICAgV09SRCAgICB3RHVyYXRpb25fYTsKICAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYjsKICAgICBXT1JEICAgIHdUaW1lU3RhbXBPZmZfYTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2csICpQU1R4RGF0YUhlYWRfZzsKKwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nICpQQ1NUeERhdGFIZWFkX2c7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NUeERhdGFIZWFkX2dfRkIgewpAQCAtMzYzLDIyICszNTgsMjAgQEAKICAgICBXT1JEICAgIHdEdXJhdGlvbl9hX2YxOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9iOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZl9hOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1R4RGF0YUhlYWRfZ19GQiwgKlBTVHhEYXRhSGVhZF9nX0ZCOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9nX0ZCICpQQ1NUeERhdGFIZWFkX2dfRkI7CiAKLQogdHlwZWRlZiBzdHJ1Y3QgdGFnU1R4RGF0YUhlYWRfYWIgewogICAgIEJZVEUgICAgYnlTaWduYWxGaWVsZDsKICAgICBCWVRFICAgIGJ5U2VydmljZUZpZWxkOwogICAgIFdPUkQgICAgd1RyYW5zbWl0TGVuZ3RoOwogICAgIFdPUkQgICAgd0R1cmF0aW9uOwogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2FiLCAqUFNUeERhdGFIZWFkX2FiOwogdHlwZWRlZiBjb25zdCBTVHhEYXRhSGVhZF9hYiAqUENTVHhEYXRhSGVhZF9hYjsKIAotCiB0eXBlZGVmIHN0cnVjdCB0YWdTVHhEYXRhSGVhZF9hX0ZCIHsKICAgICBCWVRFICAgIGJ5U2lnbmFsRmllbGQ7CiAgICAgQllURSAgICBieVNlcnZpY2VGaWVsZDsKQEAgLTM4Nyw3ICszODAsNyBAQAogICAgIFdPUkQgICAgd1RpbWVTdGFtcE9mZjsKICAgICBXT1JEICAgIHdEdXJhdGlvbl9mMDsKICAgICBXT1JEICAgIHdEdXJhdGlvbl9mMTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNUeERhdGFIZWFkX2FfRkIsICpQU1R4RGF0YUhlYWRfYV9GQjsKIHR5cGVkZWYgY29uc3QgU1R4RGF0YUhlYWRfYV9GQiAqUENTVHhEYXRhSGVhZF9hX0ZCOwogCkBAIC0zOTgsMjMgKzM5MSwyMyBAQAogICAgIERXT1JEICAgYWR3SERSMFs0XTsKICAgICBEV09SRCAgIGFkd0hEUjFbNF07CiAgICAgRFdPUkQgICBhZHdIRFIyWzRdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU01JQ0hEUkhlYWQsICpQU01JQ0hEUkhlYWQ7CisKIHR5cGVkZWYgY29uc3QgU01JQ0hEUkhlYWQgKlBDU01JQ0hEUkhlYWQ7CiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NCRUFDT05DdGwgewogICAgIERXT1JEICAgQnVmUmVhZHkgOiAxOwotICAgIERXT1JEICAgVFNGICAgICAgOiAxNTsKLSAgICBEV09SRCAgIEJ1ZkxlbiAgIDogMTE7CisgICAgRFdPUkQgICBUU0YgOiAxNTsKKyAgICBEV09SRCAgIEJ1ZkxlbiA6IDExOwogICAgIERXT1JEICAgUmVzZXJ2ZWQgOiA1OwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0JFQUNPTkN0bDsKIAotCiB0eXBlZGVmIHN0cnVjdCB0YWdTU2VjcmV0S2V5IHsKICAgICBEV09SRCAgIGR3TG93RHdvcmQ7CiAgICAgQllURSAgICBieUhpZ2hCeXRlOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU1NlY3JldEtleTsKIAogdHlwZWRlZiBzdHJ1Y3QgdGFnU0tleUVudHJ5IHsKQEAgLTQyNiw3ICs0MTksNyBAQAogICAgIERXT1JEIGR3S2V5Mls0XTsKICAgICBEV09SRCBkd0tleTNbNF07CiAgICAgRFdPUkQgZHdLZXk0WzRdOwotfV9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKK30gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQogU0tleUVudHJ5OwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlLmgKaW5kZXggZWY5ZmQ5Ny4uYjk4NTJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RldmljZS5oCkBAIC03MSw5ICs3MSw2IEBACiAjZGVmaW5lIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKICNlbmRpZgogCi0vLzIwMDctMDkyMC0wMTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiBTbmRFdnRfVG9BUEkKLSNkZWZpbmUgU25kRXZ0X1RvQVBJCiAvL3BsZWFzZSBjb3B5IGJlbG93IG1hY3JvIHRvIGRyaXZlcl9ldmVudC5jIGZvciBBUEkKICNkZWZpbmUgUlRfSU5TTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMQogI2RlZmluZSBSVF9VUERFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMgpAQCAtODEsNyArNzgsNiBAQAogI2RlZmluZSBSVF9XUEFDT05ORUNURURfRVZFTlRfRkxBRyAgICAgICAgICAgICAweDAxMDQKICNkZWZpbmUgUlRfRE9XTkRFVl9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA1CiAjZGVmaW5lIFJUX1JNTU9EX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDYKLSNlbmRpZgogCiAvLwogLy8gZGV2aWNlIHNwZWNpZmljCkBAIC0xMDksNyArMTA1LDYgQEAKICNkZWZpbmUgTUFYX01VTFRJQ0FTVF9BRERSRVNTX05VTSAgICAgICAzMgogI2RlZmluZSBNVUxUSUNBU1RfQUREUkVTU19MSVNUX1NJWkUgICAgIChNQVhfTVVMVElDQVNUX0FERFJFU1NfTlVNICogRVRIX0FMRU4pCiAKLQogLy8jZGVmaW5lIE9QX01PREVfSU5GUkFTVFJVQ1RVUkUgIDAKIC8vI2RlZmluZSBPUF9NT0RFX0FESE9DICAgICAgICAgICAxCiAvLyNkZWZpbmUgT1BfTU9ERV9BUCAgICAgICAgICAgICAgMgpAQCAtMTMwLDggKzEyNSw2IEBACiAjZGVmaW5lIEtFWVNFTF9US0lQICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBLRVlTRUxfQ0NNUCAgICAgICAgICAgICAgICAgICAgIDMKIAotCi0KICNkZWZpbmUgQVVUT19GQl9OT05FICAgICAgICAgICAgMAogI2RlZmluZSBBVVRPX0ZCXzAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFVVE9fRkJfMSAgICAgICAgICAgICAgIDIKQEAgLTE2Miw4ICsxNTUsNiBAQAogI2RlZmluZSBCQl9WR0FfTEVWRUwgICAgICAgICAgICA0CiAjZGVmaW5lIEJCX1ZHQV9DSEFOR0VfVEhSRVNIT0xEIDMKIAotCi0KICNpZm5kZWYgUlVOX0FUCiAjZGVmaW5lIFJVTl9BVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKGppZmZpZXMrKHgpKQogI2VuZGlmCkBAIC0xNzUsMjQgKzE2NiwyMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFR5cGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIERCR19QUlQobCwgcCwgYXJncy4uLikge2lmIChsPD1tc2dsZXZlbCkgcHJpbnRrKCBwICwjI2FyZ3MpO30KLSNkZWZpbmUgUFJJTlRfSyhwLCBhcmdzLi4uKSB7aWYgKFBSSVZBVEVfTWVzc2FnZSkgcHJpbnRrKCBwICwjI2FyZ3MpO30KKyNkZWZpbmUgREJHX1BSVChsLCBwLCBhcmdzLi4uKSB7IGlmIChsIDw9IG1zZ2xldmVsKSBwcmludGsocCwgIyNhcmdzKTsgfQorI2RlZmluZSBQUklOVF9LKHAsIGFyZ3MuLi4pIHsgaWYgKFBSSVZBVEVfTWVzc2FnZSkgcHJpbnRrKHAsICMjYXJncyk7IH0KIAogdHlwZWRlZiBlbnVtIF9fZGV2aWNlX21zZ19sZXZlbCB7Ci0gICAgTVNHX0xFVkVMX0VSUj0wLCAgICAgICAgICAgIC8vRXJyb3JzIHRoYXQgd2lsbCBjYXVzZSBhYm5vcm1hbCBvcGVyYXRpb24uCi0gICAgTVNHX0xFVkVMX05PVElDRT0xLCAgICAgICAgIC8vU29tZSBlcnJvcnMgbmVlZCB1c2VycyB0byBiZSBub3RpZmllZC4KLSAgICBNU0dfTEVWRUxfSU5GTz0yLCAgICAgICAgICAgLy9Ob3JtYWwgbWVzc2FnZS4KLSAgICBNU0dfTEVWRUxfVkVSQk9TRT0zLCAgICAgICAgLy9XaWxsIHJlcG9ydCBhbGwgdHJpdmFsIGVycm9ycy4KLSAgICBNU0dfTEVWRUxfREVCVUc9NCAgICAgICAgICAgLy9Pbmx5IGZvciBkZWJ1ZyBwdXJwb3NlLgorCU1TR19MRVZFTF9FUlIgPSAwLCAgICAgICAgICAgIC8qIEVycm9ycyBjYXVzaW5nIGFibm9ybWFsIG9wZXJhdGlvbiAqLworCU1TR19MRVZFTF9OT1RJQ0UgPSAxLCAgICAgICAgIC8qIEVycm9ycyBuZWVkaW5nIHVzZXIgbm90aWZpY2F0aW9uICovCisJTVNHX0xFVkVMX0lORk8gPSAyLCAgICAgICAgICAgLyogTm9ybWFsIG1lc3NhZ2UuICovCisJTVNHX0xFVkVMX1ZFUkJPU0UgPSAzLCAgICAgICAgLyogV2lsbCByZXBvcnQgYWxsIHRyaXZhbCBlcnJvcnMuICovCisJTVNHX0xFVkVMX0RFQlVHID0gNCAgICAgICAgICAgLyogT25seSBmb3IgZGVidWcgcHVycG9zZS4gKi8KIH0gREVWSUNFX01TR19MRVZFTCwgKlBERVZJQ0VfTVNHX0xFVkVMOwogCiB0eXBlZGVmIGVudW0gX19kZXZpY2VfaW5pdF90eXBlIHsKLSAgICBERVZJQ0VfSU5JVF9DT0xEPTAsICAgICAgICAgLy8gY29sZCBpbml0Ci0gICAgREVWSUNFX0lOSVRfUkVTRVQsICAgICAgICAgIC8vIHJlc2V0IGluaXQgb3IgRHggdG8gRDAgcG93ZXIgcmVtYWluIGluaXQKLSAgICBERVZJQ0VfSU5JVF9EWFBMICAgICAgICAgICAgLy8gRHggdG8gRDAgcG93ZXIgbG9zdCBpbml0CisJREVWSUNFX0lOSVRfQ09MRCA9IDAsICAgICAgIC8qIGNvbGQgaW5pdCAqLworCURFVklDRV9JTklUX1JFU0VULCAgICAgICAgICAvKiByZXNldCBpbml0IG9yIER4IHRvIEQwIHBvd2VyIHJlbWFpbiAqLworCURFVklDRV9JTklUX0RYUEwgICAgICAgICAgICAvKiBEeCB0byBEMCBwb3dlciBsb3N0IGluaXQgKi8KIH0gREVWSUNFX0lOSVRfVFlQRSwgKlBERVZJQ0VfSU5JVF9UWVBFOwogCi0KIC8vVVNCCiAKIC8vCkBAIC0yMDMsOSArMTkzLDYgQEAKICAgICBDT05URVhUX01HTVRfUEFDS0VUCiB9IENPTlRFWFRfVFlQRTsKIAotCi0KLQogLy8gUkNCIChSZWNlaXZlIENvbnRyb2wgQmxvY2spCiB0eXBlZGVmIHN0cnVjdCBfUkNCCiB7CkBAIC0yMTksNyArMjA2LDYgQEAKIAogfSBSQ0IsICpQUkNCOwogCi0KIC8vIHVzZWQgdG8gdHJhY2sgYnVsayBvdXQgaXJwcwogdHlwZWRlZiBzdHJ1Y3QgX1VTQl9TRU5EX0NPTlRFWFQgewogICAgIHZvaWQgKnBEZXZpY2U7CkBAIC0yMzMsNyArMjE5LDYgQEAKICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBEYXRhW01BWF9UT1RBTF9TSVpFX1dJVEhfQUxMX0hFQURFUlNdOwogfSBVU0JfU0VORF9DT05URVhULCAqUFVTQl9TRU5EX0NPTlRFWFQ7CiAKLQogLyogc3RydWN0dXJlIGdvdCBmcm9tIGNvbmZpZ3VyYXRpb24gZmlsZSBhcyB1c2VyLWRlc2lyZWQgZGVmYXVsdCBzZXR0aW5ncyAqLwogdHlwZWRlZiBzdHJ1Y3QgX0RFRkFVTFRfQ09ORklHIHsKIAlzaWduZWQgaW50ICAgIFpvbmVUeXBlOwpAQCAtMjU0LDEyICsyMzksMTAgQEAKICAgICBCT09MICAgICAgICAgICAgYkluVXNlOwogfSBJTlRfQlVGRkVSLCAqUElOVF9CVUZGRVI7CiAKLQotCiAvLzA6MTFBIDE6MTFCIDI6MTFHCiB0eXBlZGVmIGVudW0gX1ZJQV9CQl9UWVBFCiB7Ci0gICAgQkJfVFlQRV8xMUE9MCwKKyAgICBCQl9UWVBFXzExQSA9IDAsCiAgICAgQkJfVFlQRV8xMUIsCiAgICAgQkJfVFlQRV8xMUcKIH0gVklBX0JCX1RZUEUsICpQVklBX0JCX1RZUEU7CkBAIC0yNjcsMjIgKzI1MCwxOCBAQAogLy8wOjExYSwxOjExYiwyOjExZ2Iob25seSBDQ0sgaW4gQmFzaWNSYXRlKSwzOjExZ2EoT0ZETSBpbiBCYXNpYyBSYXRlKQogdHlwZWRlZiBlbnVtIF9WSUFfUEtUX1RZUEUKIHsKLSAgICBQS19UWVBFXzExQT0wLAorICAgIFBLX1RZUEVfMTFBID0gMCwKICAgICBQS19UWVBFXzExQiwKICAgICBQS19UWVBFXzExR0IsCiAgICAgUEtfVFlQRV8xMUdBCiB9IFZJQV9QS1RfVFlQRSwgKlBWSUFfUEtUX1RZUEU7CiAKLQotCi0KIC8vKysgTkRJUyByZWxhdGVkCiAKICNkZWZpbmUgTkRJU19TVEFUVVMgICAgIGludAotI2RlZmluZSBOVFNUQVRVUyAgICAgICAgaW50CiAKIHR5cGVkZWYgZW51bSBfX0RFVklDRV9ORElTX1NUQVRVUyB7Ci0gICAgU1RBVFVTX1NVQ0NFU1M9MCwKKyAgICBTVEFUVVNfU1VDQ0VTUyA9IDAsCiAgICAgU1RBVFVTX0ZBSUxVUkUsCiAgICAgU1RBVFVTX1JFU09VUkNFUywKICAgICBTVEFUVVNfUEVORElORywKQEAgLTgxMCwxNyArNzg5LDEyIEBACiAgICAgLy8gY29tbWFuZCB0aW1lcgogICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHNUaW1lckNvbW1hbmQ7CiAKLS8vMjAwNy0wMTE1LTAxPEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiAgICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHNUaW1lclR4RGF0YTsKICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgICAgICAgICAgblR4RGF0YVRpbWVDb3V0OwogICAgICBCT09MICBmVHhEYXRhSW5TbGVlcDsKICAgICAgQk9PTCAgSXNUeERhdGFUcmlnZ2VyOwotI2VuZGlmCiAKLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogICAgIEJPT0wgIGZXUEFfQXV0aGVuZWQ7ICAgICAgICAgICAvL2lzIFdQQS9XUEEtUFNLIG9yIFdQQTIvV1BBMi1QU0sgYXV0aGVuPz8KLSNlbmRpZgogICAgIEJZVEUgICAgICAgICAgICBieVJlQXNzb2NDb3VudDsgICAvL21pa2UgYWRkOnJlLWFzc29jaWF0aW9uIHJldHJ5IHRpbWVzIQogICAgIEJZVEUgICAgICAgICAgICBieUxpbmtXYWl0Q291bnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZGV2aWNlX2NmZy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKaW5kZXggYzgxNjkwMS4uYTBiODIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kZXZpY2VfY2ZnLmgKQEAgLTc3LDI1ICs3NywyMCBAQAogLy9NYXg6IDIzNzg9MjMxMlBheWxvYWQgKyAzMEhEICs0Q1JDICsgMlBhZGRpbmcgKyA0TGVuICsgOFRTRiArIDRSU1IKICNkZWZpbmUgUEtUX0JVRl9TWiAgICAgICAgICAyMzkwCiAKLQogI2RlZmluZSBNQVhfVUlOVFMgICAgICAgICAgIDgKICNkZWZpbmUgT1BUSU9OX0RFRkFVTFQgICAgICB7IFswIC4uLiBNQVhfVUlOVFMtMV0gPSAtMX0KIAotCi0KLXR5cGVkZWYgZW51bSAgX2NoaXBfdHlwZXsKLSAgICBWVDMxODQ9MQordHlwZWRlZiBlbnVtICBfY2hpcF90eXBlIHsKKyAgICBWVDMxODQgPSAxCiB9IENISVBfVFlQRSwgKlBDSElQX1RZUEU7CiAKLQotCiAjaWZkZWYgVklBV0VUX0RFQlVHCiAjZGVmaW5lIEFTU0VSVCh4KSB7IFwKICAgICBpZiAoISh4KSkgeyBcCi0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiYXNzZXJ0aW9uICVzIGZhaWxlZDogZmlsZSAlcyBsaW5lICVkXG4iLCAjeCxcCisJcHJpbnRrKEtFUk5fRVJSICJhc3NlcnRpb24gJXMgZmFpbGVkOiBmaWxlICVzIGxpbmUgJWRcbiIsICN4LCBcCiAgICAgICAgIF9fRlVOQ1RJT05fXywgX19MSU5FX18pO1wKLSAgICAgICAgKihpbnQqKSAwPTA7XAotICAgIH1cCisJKihpbnQgKikgMCA9IDA7CQlcCisgICAgfSBcCiB9CiAjZGVmaW5lIERCR19QT1JUODAodmFsdWUpICAgICAgICAgICAgICAgICAgIG91dGIodmFsdWUsIDB4ODApCiAjZWxzZQpAQCAtMTAzLDUgKzk4LDQgQEAKICNkZWZpbmUgREJHX1BPUlQ4MCh2YWx1ZSkKICNlbmRpZgogCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZHBjLmMKaW5kZXggOWFmZTc2Yy4uNWU4ODM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9kcGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2RwYy5jCkBAIC04MCw3ICs4MCw3IEBACiB2b2lkCiBzX3ZHZXREQVNBKAogICAgICAgUEJZVEUgcGJ5UnhCdWZmZXJBZGRyLAotICAgICBQVUlOVCBwY2JIZWFkZXJTaXplLAorICAgICB1bnNpZ25lZCBpbnQgKnBjYkhlYWRlclNpemUsCiAgICAgIFBTRXRoZXJuZXRIZWFkZXIgcHNFdGhIZWFkZXIKICAgICApOwogCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLAogICAgICAgQk9PTCBiSXNXRVAsCiAgICAgICBCT09MIGJFeHRJViwKLSAgICAgUFVJTlQgcGNiSGVhZFNpemUKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZQogICAgICk7CiAKIHN0YXRpYyBCT09MIHNfYkFQTW9kZVJ4Q3RsKApAQCAtMTY3LDcgKzE2Nyw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgY2JQYWNrZXRTaXplLAogICAgICAgQk9PTCBiSXNXRVAsCiAgICAgICBCT09MIGJFeHRJViwKLSAgICAgUFVJTlQgcGNiSGVhZFNpemUKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkU2l6ZQogICAgICkKIHsKICAgICBQQllURSAgICAgICAgICAgcGJ5UnhCdWZmZXI7CkBAIC0xOTUsMTAgKzE5NSw5IEBACiAgICAgfTsKIAogICAgIHBieVJ4QnVmZmVyID0gKFBCWVRFKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKLSAgICBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX0JyaWRnZXR1bm5lbFswXSkpIHsKKyAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwYnlSeEJ1ZmZlciwgJnBEZXZpY2UtPmFieVNOQVBfQnJpZGdldHVubmVsWzBdKSkgewogICAgICAgICBjYkhlYWRlclNpemUgKz0gNjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoSVNfRVRIX0FERFJFU1NfRVFVQUwocGJ5UnhCdWZmZXIsICZwRGV2aWNlLT5hYnlTTkFQX1JGQzEwNDJbMF0pKSB7CisgICAgfSBlbHNlIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKHBieVJ4QnVmZmVyLCAmcERldmljZS0+YWJ5U05BUF9SRkMxMDQyWzBdKSkgewogICAgICAgICBjYkhlYWRlclNpemUgKz0gNjsKICAgICAgICAgcHdUeXBlID0gKFBXT1JEKSAocGJ5UnhCdWZmZXJBZGRyICsgY2JIZWFkZXJTaXplKTsKICAgICAgICAgaWYgKCgqcHdUeXBlIT0gVFlQRV9QS1RfSVBYKSAmJiAoKnB3VHlwZSAhPSBjcHVfdG9fbGUxNigweEYzODApKSkgewpAQCAtMjYyLDcgKzI2MSw3IEBACiB2b2lkCiBzX3ZHZXREQVNBICgKICAgICAgIFBCWVRFIHBieVJ4QnVmZmVyQWRkciwKLSAgICAgUFVJTlQgcGNiSGVhZGVyU2l6ZSwKKyAgICAgdW5zaWduZWQgaW50ICpwY2JIZWFkZXJTaXplLAogICAgICBQU0V0aGVybmV0SGVhZGVyIHBzRXRoSGVhZGVyCiAgICAgKQogewpAQCAtMzQzLDkgKzM0Miw3IEBACiAgICAgUEJZVEUgICAgICAgICAgIHBieVJ4U3RzOwogICAgIFBCWVRFICAgICAgICAgICBwYnlSeFJhdGU7CiAgICAgUEJZVEUgICAgICAgICAgIHBieVNROwotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICAgUEJZVEUgICAgICAgICAgIHBieTNTUTsKLSNlbmRpZgogICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGNiSGVhZGVyU2l6ZTsKICAgICBQU0tleUl0ZW0gICAgICAgcEtleSA9IE5VTEw7CiAgICAgV09SRCAgICAgICAgICAgIHdSeFRTQzE1XzAgPSAwOwpAQCAtNDE2LDcgKzQxMyw2IEBACiAgICAgd1BMQ1B3aXRoUGFkZGluZyA9ICggKCpwd1BMQ1BfTGVuZ3RoIC8gNCkgKyAoICgqcHdQTENQX0xlbmd0aCAlIDQpID8gMTowICkgKSAqNDsKIAogICAgIHBxd1RTRlRpbWUgPSAoUFFXT1JEKSAocGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyk7Ci0jaWZkZWYgQ2FsY3VfTGlua1F1YWwKICAgaWYocERldmljZS0+YnlCQlR5cGUgPT0gQkJfVFlQRV8xMUcpICB7CiAgICAgICBwYnkzU1EgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgMTI7CiAgICAgICBwYnlTUSA9IHBieTNTUTsKQEAgLTQyNSw5ICs0MjEsNiBAQAogICAgcGJ5U1EgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgODsKICAgIHBieTNTUSA9IHBieVNROwogICB9Ci0jZWxzZQotICAgIHBieVNRID0gcGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyArIDg7Ci0jZW5kaWYKICAgICBwYnlOZXdSc3IgPSBwYnlEQWRkcmVzcyArIDggKyB3UExDUHdpdGhQYWRkaW5nICsgOTsKICAgICBwYnlSU1NJID0gcGJ5REFkZHJlc3MgKyA4ICsgd1BMQ1B3aXRoUGFkZGluZyArIDEwOwogICAgIHBieVJzciA9IHBieURBZGRyZXNzICsgOCArIHdQTENQd2l0aFBhZGRpbmcgKyAxMTsKQEAgLTQ1MywyMSArNDQ2LDIyIEBACiAgICAgaWYgKChwTWdtdC0+ZUN1cnJNb2RlID09IFdNQUNfTU9ERV9TVEFOREJZKSB8fAogICAgICAgICAocE1nbXQtPmVDdXJyTW9kZSA9PSBXTUFDX01PREVfRVNTX1NUQSkpIHsKICAgICAgICBpZiAocE1nbXQtPnNOb2RlREJUYWJsZVswXS5iQWN0aXZlKSB7Ci0gICAgICAgICBpZihJU19FVEhfQUREUkVTU19FUVVBTCAocE1nbXQtPmFieUN1cnJCU1NJRCwgcE1BQ0hlYWRlci0+YWJ5QWRkcjIpICkgeworCSBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwTWdtdC0+YWJ5Q3VyckJTU0lELCBwTUFDSGVhZGVyLT5hYnlBZGRyMikpIHsKIAkgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgIT0gMCkKICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0udUluQWN0aXZlQ291bnQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghSVNfTVVMVElDQVNUX0FERFJFU1MocE1BQ0hlYWRlci0+YWJ5QWRkcjEpICYmICFJU19CUk9BRENBU1RfQUREUkVTUyhwTUFDSGVhZGVyLT5hYnlBZGRyMSkpIHsKKyAgICBpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBNQUNIZWFkZXItPmFieUFkZHIxKSAmJiAhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocE1BQ0hlYWRlci0+YWJ5QWRkcjEpKSB7CiAgICAgICAgIGlmICggV0NUTGJJc0R1cGxpY2F0ZSgmKHBEZXZpY2UtPnNEdXBSeENhY2hlKSwgKFBTODAyXzExSGVhZGVyKSBwYnlGcmFtZSkgKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5zODAyXzExQ291bnRlci5GcmFtZUR1cGxpY2F0ZUNvdW50Kys7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFJU19FVEhfQUREUkVTU19FUVVBTCAocERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIsIHBNQUNIZWFkZXItPmFieUFkZHIxKSApIHsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyLAorCQkJICAgICAgIHBNQUNIZWFkZXItPmFieUFkZHIxKSkgeworCQlyZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ3NSw3ICs0NjksOCBAQAogICAgIC8vIFVzZSBmb3IgVEtJUCBNSUMKICAgICBzX3ZHZXREQVNBKHBieUZyYW1lLCAmY2JIZWFkZXJTaXplLCAmcERldmljZS0+c1J4RXRoSGVhZGVyKTsKIAotICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTCgoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksIHBEZXZpY2UtPmFieUN1cnJlbnROZXRBZGRyKSkKKyAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcigoUEJZVEUpJihwRGV2aWNlLT5zUnhFdGhIZWFkZXIuYWJ5U3JjQWRkclswXSksCisJCQkgICAgcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHIpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICBpZiAoKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0VTU19BUCkgfHwgKHBNZ210LT5lQ3Vyck1vZGUgPT0gV01BQ19NT0RFX0lCU1NfU1RBKSkgewpAQCAtNTY4LDggKzU2Myw4IEBACiAgICAgLy8KICAgICAvLyBSWCBPSwogICAgIC8vCi0gICAgLy9yZW1vdmUgdGhlIENSQyBsZW5ndGgKLSAgICBGcmFtZVNpemUgLT0gVV9DUkNfTEVOOworICAgIC8qIHJlbW92ZSB0aGUgRkNTL0NSQyBsZW5ndGggKi8KKyAgICBGcmFtZVNpemUgLT0gRVRIX0ZDU19MRU47CiAKICAgICBpZiAoICEoKnBieVJzciAmIChSU1JfQUREUkJST0FEIHwgUlNSX0FERFJNVUxUSSkpICYmIC8vIHVuaWNhc3QgYWRkcmVzcwogICAgICAgICAoSVNfRlJBR01FTlRfUEtUKChwYnlGcmFtZSkpKQpAQCAtNzU4LDEwICs3NTMsMTEgQEAKICAgICAgICAgcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250Kys7CiAgICAgICAgIHBNZ210LT5wQ3VyckJTUy0+YnlSU1NJU3RhdENudCAlPSBSU1NJX1NUQVRfQ09VTlQ7CiAgICAgICAgIHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbcE1nbXQtPnBDdXJyQlNTLT5ieVJTU0lTdGF0Q250XSA9IGxkQm07Ci0gICAgICAgIGZvcihpaT0wO2lpPFJTU0lfU1RBVF9DT1VOVDtpaSsrKSB7Ci0gICAgICAgICAgICBpZiAocE1nbXQtPnBDdXJyQlNTLT5sZEJtQXZlcmFnZVtpaV0gIT0gMCkgewotICAgICAgICAgICAgcE1nbXQtPnBDdXJyQlNTLT5sZEJtTUFYID0gbWF4KHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKLSAgICAgICAgICAgIH0KKwlmb3IgKGlpID0gMDsgaWkgPCBSU1NJX1NUQVRfQ09VTlQ7IGlpKyspIHsKKwkJaWYgKHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldICE9IDApIHsKKwkJCXBNZ210LT5wQ3VyckJTUy0+bGRCbU1BWCA9CisJCQkJbWF4KHBNZ210LT5wQ3VyckJTUy0+bGRCbUF2ZXJhZ2VbaWldLCBsZEJtKTsKKwkJfQogICAgICAgICB9CiAgICAgfQogKi8KQEAgLTE0NDgsNyArMTQ0NCw3IEBACiAgICAgaWYgKEZyYW1lU2l6ZSA+IENCX01BWF9CVUZfU0laRSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8vIGNoZWNrIERBCi0gICAgaWYoSVNfTVVMVElDQVNUX0FERFJFU1MoKFBCWVRFKShza2ItPmRhdGErY2JIZWFkZXJPZmZzZXQpKSkgeworICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcigoUEJZVEUpKHNrYi0+ZGF0YStjYkhlYWRlck9mZnNldCkpKSB7CiAgICAgICAgaWYgKHBNZ210LT5zTm9kZURCVGFibGVbMF0uYlBTRW5hYmxlKSB7CiAKICAgICAgICAgICAgc2tiY3B5ID0gZGV2X2FsbG9jX3NrYigoaW50KXBEZXZpY2UtPnJ4X2J1Zl9zeik7CkBAIC0xNTIzLDcgKzE1MTksNyBAQAogdm9pZCBSWHZXb3JrSXRlbSh2b2lkICpDb250ZXh0KQogewogICAgIFBTRGV2aWNlIHBEZXZpY2UgPSAoUFNEZXZpY2UpIENvbnRleHQ7Ci0gICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzOworICAgIGludCBudFN0YXR1czsKICAgICBQUkNCICAgICAgICAgICAgcFJDQj1OVUxMOwogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyItLS0tPlJ4IFBvbGxpbmcgVGhyZWFkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvZmlybXdhcmUuYwppbmRleCBlMWY5NmQ3Li5lYmI5Yzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2Zpcm13YXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9maXJtd2FyZS5jCkBAIC04NDgsNyArODQ4LDcgQEAKICAgICAgUFNEZXZpY2UgcERldmljZQogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAKICAgICBudFN0YXR1cyA9IENPTlRST0xuc1JlcXVlc3RJbihwRGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1JFQUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pbnQuYwppbmRleCA4OWY1YjE4Li5jOTU4MzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmMKQEAgLTgyLDcgKzgyLDcgQEAKIHZvaWQgSU5UdldvcmtJdGVtKHZvaWQgKkNvbnRleHQpCiB7CiAJUFNEZXZpY2UgcERldmljZSA9IChQU0RldmljZSkgQ29udGV4dDsKLQlOVFNUQVRVUyBudFN0YXR1czsKKwlpbnQgbnRTdGF0dXM7CiAKIAlEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+SW50ZXJydXB0IFBvbGxpbmcgVGhyZWFkXG4iKTsKIApAQCAtOTIsMTAgKzkyLDkgQEAKIAlzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogfQogCi1OVFNUQVRVUwotSU5UbnNQcm9jZXNzRGF0YShQU0RldmljZSBwRGV2aWNlKQoraW50IElOVG5zUHJvY2Vzc0RhdGEoUFNEZXZpY2UgcERldmljZSkKIHsKLQlOVFNUQVRVUwlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAJUFNJTlREYXRhCXBJTlREYXRhOwogCVBTTWdtdE9iamVjdAlwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwU3RhdHMgPSAmcERldmljZS0+c3RhdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pbnQuaAppbmRleCBjZGYzNTUxLi4zMTc2YzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2ludC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW50LmgKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBCWVRFICAgIGJ5QUNLRmFpbDsKICAgICBCWVRFICAgIGJ5RkNTRXJyOwogICAgIEJZVEUgICAgYWJ5U1dbMl07Ci19X19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKQorfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCiBTSU5URGF0YSwgKlBTSU5URGF0YTsKIAogCkBAIC02OCwxMCArNjgsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCBJTlR2V29ya0l0ZW0odm9pZCAqQ29udGV4dCk7Ci0KLU5UU1RBVFVTCi1JTlRuc1Byb2Nlc3NEYXRhKAotICAgICAgUFNEZXZpY2UgcERldmljZQotICAgICk7CitpbnQgSU5UbnNQcm9jZXNzRGF0YShQU0RldmljZSBwRGV2aWNlKTsKIAogI2VuZGlmIC8qIF9fSU5UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2NtZC5oCmluZGV4IGZiYmExZDUuLjFjZTM5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY21kLmgKQEAgLTcwLDEwICs3MCwxMCBAQAogfSBXTUFDX0NNRCwgKlBXTUFDX0NNRDsKIAogdHlwZWRlZiBlbnVtIHRhZ1daT05FVFlQRSB7Ci0gIFpvbmVUeXBlX1VTQT0wLAotICBab25lVHlwZV9KYXBhbj0xLAotICBab25lVHlwZV9FdXJvcGU9MgotfVdaT05FVFlQRTsKKyAgWm9uZVR5cGVfVVNBID0gMCwKKyAgWm9uZVR5cGVfSmFwYW4gPSAxLAorICBab25lVHlwZV9FdXJvcGUgPSAyCit9IFdaT05FVFlQRTsKIAogI2RlZmluZSBBREhPQwkwCiAjZGVmaW5lIElORlJBCTEKQEAgLTgzLDkgKzgzLDkgQEAKICNkZWZpbmUgQURIT0NfU1RBUlRFRAkgICAxCiAjZGVmaW5lIEFESE9DX0pPSU5URUQJICAgMgogCi0jZGVmaW5lIFBIWTgwMjExYSAJICAgIDAKLSNkZWZpbmUgUEhZODAyMTFiICAgICAgIDEKLSNkZWZpbmUgUEhZODAyMTFnICAgICAgIDIKKyNkZWZpbmUgUEhZODAyMTFhIDAKKyNkZWZpbmUgUEhZODAyMTFiIDEKKyNkZWZpbmUgUEhZODAyMTFnIDIKIAogI2RlZmluZSBTU0lEX0lEICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgU1NJRF9NQVhMRU4gICAgICAgICAgICAzMgpAQCAtMTQzLDcgKzE0Myw2IEBACiAKIH0gU0NtZFpvbmVUeXBlU2V0LCAqUFNDbWRab25lVHlwZVNldDsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiB0eXBlZGVmIHN0cnVjdCB0YWdTV1BBUmVzdWx0IHsKICAgICAgICAgIGNoYXIJaWZuYW1lWzEwMF07CiAJdTggcHJvdG87CkBAIC0xNTEsNyArMTUwLDYgQEAKIAl1OCBlYXBfdHlwZTsKICAgICAgICAgIEJPT0wgYXV0aGVudGljYXRlZDsKIH0gU1dQQVJlc3VsdCwgKlBTV1BBUmVzdWx0OwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHRhZ1NDbWRTdGFydEFQIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb2N0bC5jCmluZGV4IDE5YTg0YjYuLmQ1MzI2MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvY3RsLmMKQEAgLTQ4LDkgKzQ4LDcgQEAKIC8vc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0RFQlVHOwogc3RhdGljIGludCAgICAgICAgICBtc2dsZXZlbCAgICAgICAgICAgICAgICA9TVNHX0xFVkVMX0lORk87CiAKLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogICAgIFNXUEFSZXN1bHQgd3BhX1Jlc3VsdDsKLSNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0yMzIsMTAgKzIzMCwxMCBAQAogICAgICAgICAgICAgcERldmljZS0+YkVuY3J5cHRpb25FbmFibGUgPSBGQUxTRTsKICAgICAgICAgICAgIHBEZXZpY2UtPmVFbmNyeXB0aW9uU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgICAgICAgICAgZm9yKHV1PTA7dXU8TUFYX0tFWV9UQUJMRTt1dSsrKQotICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7CisJICAgIGZvciAodXUgPSAwOyB1dSA8IE1BWF9LRVlfVEFCTEU7IHV1KyspCisJCU1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSwgdXUpOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIldFUCBmdW5jdGlvbiBkaXNhYmxlLiBcbiIpOworCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJXRVAgZnVuY3Rpb24gZGlzYWJsZS5cbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjU2LDcgKzY1NCw2IEBACiAgICAgICAgIHBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiAgICAgY2FzZSAweEZGOgogICAgICAgICBtZW1zZXQod3BhX1Jlc3VsdC5pZm5hbWUsMCxzaXplb2Yod3BhX1Jlc3VsdC5pZm5hbWUpKTsKIAkgICAgd3BhX1Jlc3VsdC5wcm90byA9IDA7CkBAIC02NzYsNyArNjczLDYgQEAKIC8vRGF2aWRXYW5nCiAKIGlmKHdwYV9SZXN1bHQuYXV0aGVudGljYXRlZD09VFJVRSkgewotICAgI2lmZGVmIFNuZEV2dF9Ub0FQSQogICAgewogICAgICB1bmlvbiBpd3JlcV9kYXRhICAgICAgd3JxdTsKIApAQCAtNjg3LDcgKzY4Myw2IEBACiAgICAgIHdycXUuZGF0YS5sZW5ndGggPXBJdGVtU1NJRC0+bGVuOwogICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CiAgICB9Ci0gICAjZW5kaWYKICAgICAgICAgIHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPSBUUlVFOyAgICAgICAgICAgLy9pcyBzdWNjZXNzZnVsIHBlZXIgdG8gd3BhX1Jlc3VsdC5hdXRoZW50aWNhdGVkPwogfQogCkBAIC03MDAsNyArNjk1LDYgQEAKIAogCXBSZXEtPndSZXN1bHQgPSAwOwogICAgICAgICBicmVhazsKLSNlbmRpZgogCiAgICAgZGVmYXVsdDoKICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiUHJpdmF0ZSBjb21tYW5kIG5vdCBzdXBwb3J0Li5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pb3dwYS5oCmluZGV4IGRhMDNlZGMuLjk1OWM4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaW93cGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2lvd3BhLmgKQEAgLTMxLDEwICszMSw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQogI2RlZmluZSBXUEFfSUVfTEVOIDY0CiAKLQogLy9XUEEgcmVsYXRlZAogLyoKIHR5cGVkZWYgZW51bSB7IFdQQV9BTEdfTk9ORSwgV1BBX0FMR19XRVAsIFdQQV9BTEdfVEtJUCwgV1BBX0FMR19DQ01QIH0gd3BhX2FsZzsKQEAgLTU0LDcgKzUyLDcgQEAKIAlWSUFXR0VUX1NFVF9EUk9QX1VORU5DUllQVCA9IDcsCiAJVklBV0dFVF9TRVRfREVBVVRIRU5USUNBVEUgPSA4LAogCVZJQVdHRVRfU0VUX0FTU09DSUFURSA9IDksCi0JVklBV0dFVF9TRVRfRElTQVNTT0NJQVRFPSAxMAorCVZJQVdHRVRfU0VUX0RJU0FTU09DSUFURSA9IDEwCiB9OwogCiAKQEAgLTc2LDggKzc0LDYgQEAKIAl1MTYgcmVzcF9pZV9sZW47CiB9IHZpYXdnZXRfd3BhX2hlYWRlcjsKIAotCi0KIHN0cnVjdCB2aWF3Z2V0X3dwYV9wYXJhbSB7CiAJdTMyIGNtZDsKIAl1OCBhZGRyWzZdOwpAQCAtODYsNDMgKzgyLDM3IEBACiAJCQl1OCBsZW47CiAJCQl1OCBkYXRhWzBdOwogCQl9IGdlbmVyaWNfZWxlbTsKLQogCQlzdHJ1Y3QgewotICAgICAgICAJdTggYnNzaWRbNl07CisJCQl1OCBic3NpZFs2XTsKIAkJCXU4IHNzaWRbMzJdOwogCQkJdTggc3NpZF9sZW47Ci0gICAgICAgIAl1OCAqd3BhX2llOwotICAgICAgICAJdTE2IHdwYV9pZV9sZW47Ci0gICAgICAgIAlpbnQgcGFpcndpc2Vfc3VpdGU7Ci0gICAgICAgIAlpbnQgZ3JvdXBfc3VpdGU7Ci0gICAgICAgIAlpbnQga2V5X21nbXRfc3VpdGU7Ci0gICAgICAgIAlpbnQgYXV0aF9hbGc7Ci0gICAgICAgIAlpbnQgbW9kZTsKLSAgICAgICAgICAgICAgICB1OCByb2FtX2RibTsgIC8vRGF2aWRXYW5nCisJCQl1OCAqd3BhX2llOworCQkJdTE2IHdwYV9pZV9sZW47CisJCQlpbnQgcGFpcndpc2Vfc3VpdGU7CisJCQlpbnQgZ3JvdXBfc3VpdGU7CisJCQlpbnQga2V5X21nbXRfc3VpdGU7CisJCQlpbnQgYXV0aF9hbGc7CisJCQlpbnQgbW9kZTsKKwkJCXU4IHJvYW1fZGJtOwogCQl9IHdwYV9hc3NvY2lhdGU7Ci0KIAkJc3RydWN0IHsKLQkgICAgICAgIGludCBhbGdfbmFtZTsKLQkgICAgICAgIHUxNiBrZXlfaW5kZXg7Ci0JICAgICAgICB1MTYgc2V0X3R4OwotCSAgICAgICAgdTggKnNlcTsKLQkgICAgICAgIHUxNiBzZXFfbGVuOwotCSAgICAgICAgdTggKmtleTsKLQkgICAgICAgIHUxNiBrZXlfbGVuOworCQkJaW50IGFsZ19uYW1lOworCQkJdTE2IGtleV9pbmRleDsKKwkJCXUxNiBzZXRfdHg7CisJCQl1OCAqc2VxOworCQkJdTE2IHNlcV9sZW47CisJCQl1OCAqa2V5OworCQkJdTE2IGtleV9sZW47CiAJCX0gd3BhX2tleTsKLQogCQlzdHJ1Y3QgewogCQkJdTggc3NpZF9sZW47CiAJCQl1OCBzc2lkWzMyXTsKIAkJfSBzY2FuX3JlcTsKLQogCQlzdHJ1Y3QgewogCQkJdTE2IHNjYW5fY291bnQ7CiAJCQl1OCAqYnVmOwogCQl9IHNjYW5fcmVzdWx0czsKLQogCX0gdTsKLQogfTsKIAogI3ByYWdtYSBwYWNrKDEpCkBAIC0xNDIsMTUgKzEzMiwxMiBAQAogCWludCBtYXhyYXRlOwogfTsKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IENsYXNzZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2VuZGlmIC8qIF9fSU9XUEFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmMKaW5kZXggZmE0MDUyMi4uMDE2YjhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaXdjdGwuYwpAQCAtODMsMzEgKzgzLDkgQEAKIAlsb25nIGxkQm07CiAKIAlwRGV2aWNlLT53c3RhdHMuc3RhdHVzID0gcERldmljZS0+ZU9QTW9kZTsKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKLQkgI2lmIDAKLQkgIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSB7Ci0JICAgICBpZihwRGV2aWNlLT5ieUN1cnJTUSA+IDEyMCkKLSAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMTAwOwotCSAgICAgZWxzZQotCQkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSBwRGV2aWNlLT5ieUN1cnJTUSoxMDAvMTIwOwotCSAgICB9Ci0JICBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFHKSB7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlDdXJyU1EgPCAyMCkKLQkJICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAxMDA7Ci0JICAgICAgIGVsc2UgaWYocERldmljZS0+YnlDdXJyU1EgPjk2KQotCQkgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSAgPSAwOwotCSAgICAgICBlbHNlCi0JCSAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gKDk2LXBEZXZpY2UtPmJ5Q3VyclNRKSoxMDAvNzY7Ci0JICAgfQotCSAgIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyAhPVRSVUUpCi0JICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMDsKLQkgICNlbmRpZgogCSAgIGlmKHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID4gMTAwKQogICAgCSAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA9IDEwMDsKICAgICAgICAgICAgICAgIHBEZXZpY2UtPndzdGF0cy5xdWFsLnF1YWwgPShCWVRFKSBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eTsKLQkjZWxzZQotCXBEZXZpY2UtPndzdGF0cy5xdWFsLnF1YWwgPSBwRGV2aWNlLT5ieUN1cnJTUTsKLQkjZW5kaWYKIAlSRnZSU1NJVG9kQm0ocERldmljZSwgKEJZVEUpKHBEZXZpY2UtPnVDdXJyUlNTSSksICZsZEJtKTsKIAlwRGV2aWNlLT53c3RhdHMucXVhbC5sZXZlbCA9IGxkQm07CiAJLy9wRGV2aWNlLT53c3RhdHMucXVhbC5sZXZlbCA9IDB4MTAwIC0gcERldmljZS0+dUN1cnJSU1NJOwpAQCAtMTMzLDE4ICsxMTEsOSBAQAogCQkJICAgICAgdm9pZCAqd3JxLAogCQkJICAgICAgY2hhciAqZXh0cmEpCiB7Ci0vLzIwMDgtMDQwOS0wMiwgPE1hcms+IGJ5IEVpbnNuIExpdQotLyoKLSNpZmRlZiBTYWZlX0Nsb3NlCi0gIFBTRGV2aWNlCSAgICAgICAgcERldmljZSA9IChQU0RldmljZSluZXRkZXZfcHJpdihkZXYpOwotICBpZiAoIShwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotKi8KLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgU0lPQ1NJV0NPTU1JVCBcbiIpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DU0lXQ09NTUlUXG4iKTsKIAogCXJldHVybiAwOwotCiB9CiAKIC8qCkBAIC0yMDksOSArMTc4LDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCi0jaWZkZWYgdXBkYXRlX0Jzc0xpc3QKIAlCU1N2Q2xlYXJCU1NMaXN0KCh2b2lkICopIHBEZXZpY2UsIHBEZXZpY2UtPmJMaW5rUGFzcyk7Ci0jZW5kaWYKIAogLy9taWtlIGFkZDogYWN0aXZlIHNjYW4gT1IgcGFzc2l2ZSBzY2FuIE9SIGRlc2lyZV9zc2lkIHNjYW4KICBpZih3cnEtPmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgewpAQCAtMjczLDE0ICsyNDAsNyBAQAogCWxvbmcgbGRCbTsKIAljaGFyIGJ1ZltNQVhfV1BBX0lFX0xFTiAqIDIgKyAzMF07CiAKLS8vMjAwOC0wNDA5LTAyLCA8TWFyaz4gYnkgRWluc24gTGl1Ci0vKgotI2lmZGVmIFNhZmVfQ2xvc2UKLSAgaWYgKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLSovCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdTQ0FOIFxuIik7CisgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdTQ0FOXG4iKTsKIAogICAgIGlmIChwTWdtdC0+ZVNjYW5TdGF0ZSA9PSAgV01BQ19JU19TQ0FOTklORykgewogICAgICAgICAvLyBJbiBzY2FubmluZy4uCkBAIC0zNDksMzkgKzMwOSw2IEBACiAJCQl9CiAJCQlpd2UudS5xdWFsLnVwZGF0ZWQ9NzsKIAotLy8yMDA4LTA0MDktMDEsIDxNYXJrPiBieSBFaW5zbiBMaXUKLS8qCi0vLzIwMDgtMDIyMC0wMywgPE1vZGlmeT4gIGJ5IEVpbnNuIExpdQotCWlmKHBEZXZpY2UtPmJMaW5rUGFzcz09IFRSVUUgJiYgSVNfRVRIX0FERFJFU1NfRVFVQUwocEJTUy0+YWJ5QlNTSUQsIHBNZ210LT5hYnlDdXJyQlNTSUQpKXsKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKLQkgI2lmIDAKLQkgIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFCKSB7Ci0JICAgICBpZihwRGV2aWNlLT5ieUN1cnJTUSA+IDEyMCkKLSAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMTAwOwotCSAgICAgZWxzZQotCQkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSBwRGV2aWNlLT5ieUN1cnJTUSoxMDAvMTIwOwotCSAgICB9Ci0JICBlbHNlIGlmKHBEZXZpY2UtPmJ5QkJUeXBlID09IEJCX1RZUEVfMTFHKSB7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+YnlDdXJyU1EgPCAyMCkKLQkJICAgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHkgPSAxMDA7Ci0JICAgICAgIGVsc2UgaWYocERldmljZS0+YnlDdXJyU1EgPjk2KQotCQkgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSAgPSAwOwotCSAgICAgICBlbHNlCi0JCSAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gKDk2LXBEZXZpY2UtPmJ5Q3VyclNRKSoxMDAvNzY7Ci0JICAgfQotCSAgIGlmKHBEZXZpY2UtPmJMaW5rUGFzcyAhPVRSVUUpCi0JICAgICAgIHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID0gMDsKLQkgICNlbmRpZgotCSAgIGlmKHBEZXZpY2UtPnNjU3RhdGlzdGljLkxpbmtRdWFsaXR5ID4gMTAwKQotICAgCSAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5MaW5rUXVhbGl0eSA9IDEwMDsKLSAgICAgICAgICAgICAgaXdlLnUucXVhbC5xdWFsID0oQllURSkgcERldmljZS0+c2NTdGF0aXN0aWMuTGlua1F1YWxpdHk7Ci0JI2Vsc2UKLQlpd2UudS5xdWFsLnF1YWwgPSBwRGV2aWNlLT5ieUN1cnJTUTsKLQkjZW5kaWYKLQkJfWVsc2UgewotCSAgICAgICAgaXdlLnUucXVhbC5xdWFsID0gMDsKLQkJfQotKi8KICAgICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwogICAgICAgIAkvL0FERCBlbmNyeXB0aW9uCiAgICAgICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwpAQCAtNjM0LDE2ICs1NjEsOCBAQAogCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwogCWludAkJaSxrOwogICAgIEJZVEUgYWJ5U3VwcG9ydGVkUmF0ZXNbMTNdPSB7MHgwMiwgMHgwNCwgMHgwQiwgMHgxNiwgMHgwYywgMHgxMiwgMHgxOCwgMHgyNCwgMHgzMCwgMHg0OCwgMHg2MCwgMHg2QywgMHg5MH07Ci0vLzIwMDgtMDQwOS0wMiwgPE1hcms+IGJ5IEVpbnNuIExpdQotLyoKLSAjaWZkZWYgU2FmZV9DbG9zZQotICBQU0RldmljZQkgICAgICAgIHBEZXZpY2UgPSAoUFNEZXZpY2UpbmV0ZGV2X3ByaXYoZGV2KTsKLSAgaWYgKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0jZW5kaWYKLSAqLwogCi0gICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiIFNJT0NHSVdSQU5HRSBcbiIpOworICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIiBTSU9DR0lXUkFOR0VcbiIpOwogCWlmICh3cnEtPnBvaW50ZXIpIHsKIAkJd3JxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKIAkJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CkBAIC02NTMsMjMgKzU3MiwxOSBAQAogCQkvLyBTaG91bGQgYmUgYmFzZWQgb24gY2FwX3JpZC5jb3VudHJ5IHRvIGdpdmUgb25seQogCQkvLyAgd2hhdCB0aGUgY3VycmVudCBjYXJkIHN1cHBvcnQKIAkJayA9IDA7Ci0JCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpICsgMTsgLy8gTGlzdCBpbmRleAogCQkJcmFuZ2UtPmZyZXFba10ubSA9IGZyZXF1ZW5jeV9saXN0W2ldICogMTAwMDAwOwogCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLy8gVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMAogCQl9CiAJCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKIAkJLy8gSHVtLi4uIFNob3VsZCBwdXQgdGhlIHJpZ2h0IHZhbHVlcyB0aGVyZQotCSAgICAgI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICAgICAgICAgICAgICAgIHJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOwotCSAgICAgI2Vsc2UKLQkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAyNTU7Ci0JICAgICAjZW5kaWYKIAkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKIAkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMDsKIAkJcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMjU1OwogCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlyYW5nZS0+Yml0cmF0ZVtpXSA9IGFieVN1cHBvcnRlZFJhdGVzW2ldICogNTAwMDAwOwogCQkJaWYocmFuZ2UtPmJpdHJhdGVbaV0gPT0gMCkKIAkJCQlicmVhazsKQEAgLTc2MSw3ICs2NzYsNyBAQAogCQltZW1jcHkocE1nbXQtPmFieURlc2lyZUJTU0lELCB3cnEtPnNhX2RhdGEsIDYpOwogCiAJLy9taWtlIDphZGQKLQkgaWYgKChJU19CUk9BRENBU1RfQUREUkVTUyhwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB8fAorCSBpZiAoKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBNZ210LT5hYnlEZXNpcmVCU1NJRCkpIHx8CiAJICAgICAobWVtY21wKHBNZ210LT5hYnlEZXNpcmVCU1NJRCwgWmVyb0JTU0lELCA2KSA9PSAwKSl7CiAJICAgICAgUFJJTlRfSygiU0lPQ1NJV0FQOmludmFsaWQgZGVzaXJlZCBCU1NJRCByZXR1cm4hXG4iKTsKICAgICAgICAgICAgICAgIHJldHVybiByYzsKQEAgLTc3Miw3ICs2ODcsOCBAQAogCQl1bnNpZ25lZCBpbnQgaWksIHVTYW1lQnNzaWROdW0gPSAwOwogICAgICAgICAgICAgICAgICAgZm9yIChpaSA9IDA7IGlpIDwgTUFYX0JTU19OVU07IGlpKyspIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+c0JTU0xpc3RbaWldLmJBY3RpdmUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQscE1nbXQtPmFieURlc2lyZUJTU0lEKSkgeworCQkJICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkJICAgICBwTWdtdC0+YWJ5RGVzaXJlQlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1U2FtZUJzc2lkTnVtKys7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9CkBAIC05NTcsNyArODczLDggQEAKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgYnkgbWVhbnMgb2YganVkZ2luZyBpZiB0aGVyZSBhcmUgdHdvIHNhbWUgQlNTSUQgZXhpc3QgaW4gbGlzdCA/CiAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICAgaWYgKHBNZ210LT5zQlNTTGlzdFtpaV0uYkFjdGl2ZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwgcEN1cnItPmFieUJTU0lEKSkgeworCQkJICFjb21wYXJlX2V0aGVyX2FkZHIocE1nbXQtPnNCU1NMaXN0W2lpXS5hYnlCU1NJRCwKKwkJCQkJICAgICBwQ3Vyci0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1U2FtZUJzc2lkTnVtKys7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDU3LDcgKzk3NCw3IEBACiAJCXU4CW5vcm12YWx1ZSA9ICh1OCkgKHdycS0+dmFsdWUvNTAwMDAwKTsKIAogCQkvLyBDaGVjayBpZiByYXRlIGlzIHZhbGlkCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlpZihub3JtdmFsdWUgPT0gYWJ5U3VwcG9ydGVkUmF0ZXNbaV0pIHsKIAkJCQlicmF0ZSA9IGk7CiAJCQkJYnJlYWs7CkBAIC0xMDY3LDcgKzk4NCw3IEBACiAJLy8gLTEgZGVzaWduZWQgdGhlIG1heCByYXRlIChtb3N0bHkgYXV0byBtb2RlKQogCWlmKHdycS0+dmFsdWUgPT0gLTEpIHsKIAkJLy8gR2V0IHRoZSBoaWdoZXN0IGF2YWlsYWJsZSByYXRlCi0JCWZvcihpID0gMCA7IGkgPCAxMyA7IGkrKykgeworCQlmb3IgKGkgPSAwIDsgaSA8IDEzIDsgaSsrKSB7CiAJCQlpZihhYnlTdXBwb3J0ZWRSYXRlc1tpXSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNDA1LDggKzEzMjIsOCBAQAogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CiAgICAgICAgIGlmIChwRGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpIHsKICAgICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotICAgICAgICAgICAgZm9yKHV1PTA7dXU8TUFYX0tFWV9UQUJMRTt1dSsrKQotICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7CisJICAgIGZvciAodXUgPSAwOyB1dSA8IE1BWF9LRVlfVEFCTEU7IHV1KyspCisJCU1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSwgdXUpOwogICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKICAgICAgICAgfQogCX0KQEAgLTE5MjYsMjYgKzE4NDMsNiBAQAogcGFyYW0tPnUud3BhX2tleS5zZXEgPSAodTggKilzZXE7CiBwYXJhbS0+dS53cGFfa2V5LnNlcV9sZW4gPSBzZXFfbGVuOwogCi0jaWYgMAotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID0lZFxuIixwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lKTsKLXByaW50aygicGFyYW0tPmFkZHI9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JICAgICAgcGFyYW0tPmFkZHJbMF0scGFyYW0tPmFkZHJbMV0scGFyYW0tPmFkZHJbMl0sCi0JICAgICAgcGFyYW0tPmFkZHJbM10scGFyYW0tPmFkZHJbNF0scGFyYW0tPmFkZHJbNV0pOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LnNldF90eCA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5zZXRfdHgpOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmtleV9pbmRleCA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5rZXlfaW5kZXgpOwotcHJpbnRrKCJwYXJhbS0+dS53cGFfa2V5LmtleV9sZW4gPSVkXG4iLHBhcmFtLT51LndwYV9rZXkua2V5X2xlbik7Ci1wcmludGsoInBhcmFtLT51LndwYV9rZXkua2V5ID0iKTsKLWZvcihpaT0wO2lpPHBhcmFtLT51LndwYV9rZXkua2V5X2xlbjtpaSsrKQotCXByaW50aygiJTAyeDoiLHBhcmFtLT51LndwYV9rZXkua2V5W2lpXSk7Ci0gICAgICAgICBwcmludGsoIlxuIik7Ci1wcmludGsoInBhcmFtLT51LndwYV9rZXkuc2VxX2xlbiA9JWRcbiIscGFyYW0tPnUud3BhX2tleS5zZXFfbGVuKTsKLXByaW50aygicGFyYW0tPnUud3BhX2tleS5zZXEgPSIpOwotZm9yKGlpPTA7aWk8cGFyYW0tPnUud3BhX2tleS5zZXFfbGVuO2lpKyspCi0JcHJpbnRrKCIlMDJ4OiIscGFyYW0tPnUud3BhX2tleS5zZXFbaWldKTsKLSAgICAgICAgIHByaW50aygiXG4iKTsKLQotcHJpbnRrKCIuLi4uLi4uLi4uLlxuIik7Ci0jZW5kaWYKIC8vKioqKnNldCBpZiBjdXJyZW50IGFjdGlvbiBpcyBOZXR3b3JrIE1hbmFnZXIgY291bnQ/PwogLy8qKioqdGhpcyBtZXRob2QgaXMgc28gZm9vbGlzaCxidXQgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Pz8/CiBpZihwYXJhbS0+dS53cGFfa2V5LmFsZ19uYW1lID09IFdQQV9BTEdfTk9ORSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9pd2N0bC5oCmluZGV4IGRmOWE0Y2YuLmQ2MDFlOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvaXdjdGwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2l3Y3RsLmgKQEAgLTMzLDE1ICszMywxMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IERlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0cnVjdCBpd19zdGF0aXN0aWNzICppd2N0bF9nZXRfd2lyZWxlc3Nfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXdjdGxfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgaXdjdGxfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9rZXkuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYva2V5LmMKaW5kZXggYjA4OTBjMS4uZDE4MWEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9rZXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L2tleS5jCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAqcEtleSA9IE5VTEw7CiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewogICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgaWYgKGR3S2V5SW5kZXggPT0gMHhGRkZGRkZGRikgewogICAgICAgICAgICAgICAgIGlmIChwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5LmJLZXlWYWxpZCA9PSBUUlVFKSB7CiAgICAgICAgICAgICAgICAgICAgICpwS2V5ID0gJihwVGFibGUtPktleVRhYmxlW2ldLlBhaXJ3aXNlS2V5KTsKQEAgLTI0NSw3ICsyNDUsNyBAQAogICAgICAgICAgICAgaiA9IGk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChwVGFibGUtPktleVRhYmxlW2ldLmJJblVzZSA9PSBUUlVFKSAmJgotICAgICAgICAgICAgSVNfRVRIX0FERFJFU1NfRVFVQUwocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCxwYnlCU1NJRCkpIHsKKwkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELCBwYnlCU1NJRCkpIHsKICAgICAgICAgICAgIC8vIGZvdW5kIHRhYmxlIGFscmVhZHkgZXhpc3QKICAgICAgICAgICAgIGlmICgoZHdLZXlJbmRleCAmIFBBSVJXSVNFX0tFWSkgIT0gMCkgewogICAgICAgICAgICAgICAgIC8vIFBhaXJ3aXNlIGtleQpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgaW50ICAgICBpOwogICAgIEJPT0wgICAgYlJldHVyblZhbHVlID0gRkFMU0U7CiAKLSAgICBpZiAoSVNfQlJPQURDQVNUX0FERFJFU1MocGJ5QlNTSUQpKSB7CisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieUJTU0lEKSkgewogICAgICAgICAvLyBkZWFsdGUgYWxsIGtleQogICAgICAgICBpZiAoKGR3S2V5SW5kZXggJiBQQUlSV0lTRV9LRVkpICE9IDApIHsKICAgICAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKQEAgLTQyNyw3ICs0MjcsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaT0wO2k8TUFYX0tFWV9UQUJMRTtpKyspIHsKICAgICAgICAgICAgIGlmICggKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisJCSAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogCiAgICAgICAgICAgICAgICAgaWYgKChkd0tleUluZGV4ICYgUEFJUldJU0VfS0VZKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uUGFpcndpc2VLZXkuYktleVZhbGlkID0gRkFMU0U7CkBAIC00ODMsMTEgKzQ4MywxMSBAQAogCiAgICAgZm9yIChpPTA7aTxNQVhfS0VZX1RBQkxFO2krKykgewogICAgICAgICBpZiAoKHBUYWJsZS0+S2V5VGFibGVbaV0uYkluVXNlID09IFRSVUUpICYmCi0gICAgICAgICAgICBJU19FVEhfQUREUkVTU19FUVVBTChwVGFibGUtPktleVRhYmxlW2ldLmFieUJTU0lELHBieUJTU0lEKSkgeworCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQsIHBieUJTU0lEKSkgewogICAgICAgICAgICAgcFRhYmxlLT5LZXlUYWJsZVtpXS5QYWlyd2lzZUtleS5iS2V5VmFsaWQgPSBGQUxTRTsKLSAgICAgICAgICAgIGZvcih1PTA7dTxNQVhfR1JPVVBfS0VZO3UrKykgewotICAgICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gRkFMU0U7Ci0gICAgICAgICAgICB9CisJICAgIGZvciAodSA9IDA7IHUgPCBNQVhfR1JPVVBfS0VZOyB1KyspCisJCXBUYWJsZS0+S2V5VGFibGVbaV0uR3JvdXBLZXlbdV0uYktleVZhbGlkID0gRkFMU0U7CisKICAgICAgICAgICAgIHBUYWJsZS0+S2V5VGFibGVbaV0uZHdHVEtleUluZGV4ID0gMDsKICAgICAgICAgICAgIHNfdkNoZWNrS2V5VGFibGVWYWxpZChwRGV2aWNlLCBwVGFibGUpOwogICAgICAgICAgICAgcmV0dXJuIChUUlVFKTsKQEAgLTUzMSwxOSArNTMxLDEzIEBACiAgICAgcmV0dXJuOwogfQogCi12b2lkIEtleXZSZW1vdmVBbGxXRVBLZXkoCi0gICAgdm9pZCAqcERldmljZUhhbmRsZXIsCi0gICAgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZQotICAgICkKK3ZvaWQgS2V5dlJlbW92ZUFsbFdFUEtleSh2b2lkICpwRGV2aWNlSGFuZGxlciwgUFNLZXlNYW5hZ2VtZW50IHBUYWJsZSkKIHsKLSAgICBQU0RldmljZSAgICBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlQU0RldmljZSBwRGV2aWNlID0gKFBTRGV2aWNlKSBwRGV2aWNlSGFuZGxlcjsKKwlpbnQgaTsKIAotICAgIGludCBpOwotCi0gICAgZm9yKGk9MDtpPE1BWF9HUk9VUF9LRVk7aSsrKSB7Ci0gICAgICAgIEtleXZSZW1vdmVXRVBLZXkocERldmljZSxwVGFibGUsIGkpOwotICAgIH0KLQorCWZvciAoaSA9IDA7IGkgPCBNQVhfR1JPVVBfS0VZOyBpKyspCisJCUtleXZSZW1vdmVXRVBLZXkocERldmljZSwgcFRhYmxlLCBpKTsKIH0KIAogLyoKQEAgLTU2Nyw3ICs1NjEsNyBAQAogICAgICpwS2V5ID0gTlVMTDsKICAgICBmb3IgKGk9MDtpPE1BWF9LRVlfVEFCTEU7aSsrKSB7CiAgICAgICAgIGlmICgocFRhYmxlLT5LZXlUYWJsZVtpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBUYWJsZS0+S2V5VGFibGVbaV0uYWJ5QlNTSUQscGJ5QlNTSUQpKSB7CisJICAgICFjb21wYXJlX2V0aGVyX2FkZHIocFRhYmxlLT5LZXlUYWJsZVtpXS5hYnlCU1NJRCwgcGJ5QlNTSUQpKSB7CiAKICAgICAgICAgICAgIGlmIChkd0tleVR5cGUgPT0gUEFJUldJU0VfS0VZKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5jCmluZGV4IDBhYjNkYjAuLjMzNjk4ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuYwpAQCAtMzA2LDggKzMwNiw4IEBACiAgICAgcGJ5RGF0YVs1XSA9IChCWVRFKShkd0RhdGEyPj44KTsKICAgICBwYnlEYXRhWzZdID0gKEJZVEUpKGR3RGF0YTI+PjE2KTsKICAgICBwYnlEYXRhWzddID0gKEJZVEUpKGR3RGF0YTI+PjI0KTsKLSAgICBmb3IoaWk9ODtpaTwyNDtpaSsrKQotICAgICAgICBwYnlEYXRhW2lpXSA9ICpwYnlLZXkrKzsKKyAgICBmb3IgKGlpID0gODsgaWkgPCAyNDsgaWkrKykKKwlwYnlEYXRhW2lpXSA9ICpwYnlLZXkrKzsKIAogICAgIENPTlRST0xuc1JlcXVlc3RPdXQocERldmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FU1NBR0VfVFlQRV9TRVRLRVksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWMuaAppbmRleCA3NzVjNzA5Li40OTFmZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21hYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFjLmgKQEAgLTQyMCwxMSArNDIwLDExIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgTUFDdlNldE11bHRpQWRkckJ5SGFzaCAoUFNEZXZpY2UgcERldmljZSwgQllURSBieUhhc2hJZHgpOwordm9pZCBNQUN2U2V0TXVsdGlBZGRyQnlIYXNoKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlIYXNoSWR4KTsKIHZvaWQgTUFDdldyaXRlTXVsdGlBZGRyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1Qnl0ZUlkeCwgQllURSBieURhdGEpOwotQk9PTCBNQUNiU2h1dGRvd24oUFNEZXZpY2UgcERldmljZSk7Owotdm9pZCBNQUN2U2V0QkJUeXBlKFBTRGV2aWNlIHBEZXZpY2UsQllURSBieVR5cGUpOwotdm9pZCBNQUN2U2V0TUlTQ0ZpZm8gKFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd09mZnNldCwgRFdPUkQgZHdEYXRhKTsKK0JPT0wgTUFDYlNodXRkb3duKFBTRGV2aWNlIHBEZXZpY2UpOwordm9pZCBNQUN2U2V0QkJUeXBlKFBTRGV2aWNlIHBEZXZpY2UsIEJZVEUgYnlUeXBlKTsKK3ZvaWQgTUFDdlNldE1JU0NGaWZvKFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd09mZnNldCwgRFdPUkQgZHdEYXRhKTsKIHZvaWQgTUFDdkRpc2FibGVLZXlFbnRyeShQU0RldmljZSBwRGV2aWNlLCB1bnNpZ25lZCBpbnQgdUVudHJ5SWR4KTsKIHZvaWQgTUFDdlNldEtleUVudHJ5KFBTRGV2aWNlIHBEZXZpY2UsIFdPUkQgd0tleUN0bCwgdW5zaWduZWQgaW50IHVFbnRyeUlkeCwKIAkJICAgICB1bnNpZ25lZCBpbnQgdUtleUlkeCwgUEJZVEUgcGJ5QWRkciwgUERXT1JEIHBkd0tleSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKaW5kZXggMDk4YjA0NS4uYzUyOGVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgQllURSAgICAgICAgICAgIGJ5QW50ZW5uYTsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBpaTsKICAgICBDTURfQ0FSRF9JTklUICAgc0luaXRDbWQ7Ci0gICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAgaW50IG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAgICAgUlNQX0NBUkRfSU5JVCAgIHNJbml0UnNwOwogICAgIFBTTWdtdE9iamVjdCAgICBwTWdtdCA9ICYocERldmljZS0+c01nbXRPYmopOwogICAgIEJZVEUgICAgICAgICAgICBieVRtcDsKQEAgLTQwNyw4ICs0MDcsOCBAQAogCiAgICAgc0luaXRDbWQuYnlJbml0Q2xhc3MgPSAoQllURSlJbml0VHlwZTsKICAgICBzSW5pdENtZC5iRXhpc3RTV05ldEFkZHIgPSAoQllURSkgcERldmljZS0+YkV4aXN0U1dOZXRBZGRyOwotICAgIGZvcihpaT0wO2lpPDY7aWkrKykKLSAgICAgICAgc0luaXRDbWQuYnlTV05ldEFkZHJbaWldID0gcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHJbaWldOworICAgIGZvciAoaWkgPSAwOyBpaSA8IDY7IGlpKyspCisJc0luaXRDbWQuYnlTV05ldEFkZHJbaWldID0gcERldmljZS0+YWJ5Q3VycmVudE5ldEFkZHJbaWldOwogICAgIHNJbml0Q21kLmJ5U2hvcnRSZXRyeUxpbWl0ID0gcERldmljZS0+YnlTaG9ydFJldHJ5TGltaXQ7CiAgICAgc0luaXRDbWQuYnlMb25nUmV0cnlMaW1pdCA9IHBEZXZpY2UtPmJ5TG9uZ1JldHJ5TGltaXQ7CiAKQEAgLTQ4NywxMCArNDg3LDEwIEBACiAgICAgICAgICAgaWYoKChwRGV2aWNlLT5hYnlFRVBST01bRUVQX09GU19aT05FVFlQRV0gPT0gWm9uZVR5cGVfSmFwYW4pIHx8CiAJICAgICAgICAocERldmljZS0+YWJ5RUVQUk9NW0VFUF9PRlNfWk9ORVRZUEVdID09IFpvbmVUeXBlX0V1cm9wZSkpJiYKIAkgICAgIChwRGV2aWNlLT5ieU9yaWdpbmFsWm9uZXR5cGUgPT0gWm9uZVR5cGVfVVNBKSkgewotCSAgICBmb3IoaWk9MTE7aWk8MTQ7aWkrKykgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPmFieUNDS1B3clRibFtpaV0gPSBwRGV2aWNlLT5hYnlDQ0tQd3JUYmxbMTBdOwotCSAgICAgICBwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbMTBdOwotCSAgICB9CisJCWZvciAoaWkgPSAxMTsgaWkgPCAxNDsgaWkrKykgeworCQkJcERldmljZS0+YWJ5Q0NLUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieUNDS1B3clRibFsxMF07CisJCQlwRGV2aWNlLT5hYnlPRkRNUHdyVGJsW2lpXSA9IHBEZXZpY2UtPmFieU9GRE1Qd3JUYmxbMTBdOworCQl9CiAJICB9CiAKICAgICAgICAgLy97eyBSb2JlcnRZdTogMjAwNDExMjQKQEAgLTcxOCwzMyArNzE4LDMyIEBACiAKIHN0YXRpYyBpbnQgdnQ2NjU2X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotIFBTRGV2aWNlICBwRGV2aWNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcERldmljZS0+ZGV2OworCVBTRGV2aWNlIGRldmljZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLSBwcmludGsoIlZOVFdVU0IgU3VzcGVuZCBTdGFydD09PT09PT5cbiIpOwotaWYoZGV2ICE9IE5VTEwpIHsKLSAgaWYocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQotICAgICBkZXZpY2VfY2xvc2UoZGV2KTsKLX0KKwlpZiAoIWRldmljZSB8fCAhZGV2aWNlLT5kZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0gdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0gcmV0dXJuIDA7CisJaWYgKGRldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKQorCQlkZXZpY2VfY2xvc2UoZGV2aWNlLT5kZXYpOworCisJdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2dDY2NTZfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotIFBTRGV2aWNlICBwRGV2aWNlID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcERldmljZS0+ZGV2OworCVBTRGV2aWNlIGRldmljZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKLSBwcmludGsoIlZOVFdVU0IgUmVzdW1lIFN0YXJ0PT09PT09PlxuIik7Ci0gaWYoZGV2ICE9IE5VTEwpIHsKLSAgdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7Ci0gIGlmKCEocERldmljZS0+ZmxhZ3MgJiBERVZJQ0VfRkxBR1NfT1BFTkVEKSkgewotICAgIGlmKGRldmljZV9vcGVuKGRldikhPTApCi0gICAgICAgIHByaW50aygiVk5UV1VTQiBSZXN1bWUgU3RhcnQ9PT09PT0+b3BlbiBmYWlsXG4iKTsKLSAgIH0KLSB9Ci0gcmV0dXJuIDA7CisJaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworCisJaWYgKCEoZGV2aWNlLT5mbGFncyAmIERFVklDRV9GTEFHU19PUEVORUQpKQorCQlkZXZpY2Vfb3BlbihkZXZpY2UtPmRldik7CisKKwlyZXR1cm4gMDsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpAQCAtNzU4LDkzICs3NTcsNzUgQEAKICAgICAubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRldmljZV9zZXRfbXVsdGksCiB9OwogCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0CiB2dDY2NTZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAl1OCBmYWtlX21hY1tFVEhfQUxFTl0gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX07CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwotICAgIGludCAgICAgICAgIHJjID0gMDsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gTlVMTDsKLSAgICBQU0RldmljZSAgICBwRGV2aWNlID0gTlVMTDsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOworCVBTRGV2aWNlIHBEZXZpY2UgPSBOVUxMOwogCisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyBWZXIuICVzXG4iLCBERVZJQ0VfRlVMTF9EUlZfTkFNLCBERVZJQ0VfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fTk9USUNFICJDb3B5cmlnaHQgKGMpIDIwMDQgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuXG4iKTsKIAotICAgIHByaW50ayhLRVJOX05PVElDRSAiJXMgVmVyLiAlc1xuIixERVZJQ0VfRlVMTF9EUlZfTkFNLCBERVZJQ0VfVkVSU0lPTik7Ci0gICAgcHJpbnRrKEtFUk5fTk9USUNFICJDb3B5cmlnaHQgKGMpIDIwMDQgVklBIE5ldHdvcmtpbmcgVGVjaG5vbG9naWVzLCBJbmMuXG4iKTsKKwl1ZGV2ID0gdXNiX2dldF9kZXYodWRldik7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKERFVklDRV9JTkZPKSk7CiAKLSAgdWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCWlmICghbmV0ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBERVZJQ0VfTkFNRSAiOiBhbGxvY2F0ZSBuZXQgZGV2aWNlIGZhaWxlZFxuIik7CisJCWtmcmVlKHBEZXZpY2UpOworCQlnb3RvIGVycl9ub21lbTsKKwl9CiAKLSAgICBuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoREVWSUNFX0lORk8pKTsKKwlwRGV2aWNlID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwltZW1zZXQocERldmljZSwgMCwgc2l6ZW9mKERFVklDRV9JTkZPKSk7CiAKLSAgICBpZiAobmV0ZGV2ID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICI6IGFsbG9jYXRlIG5ldCBkZXZpY2UgZmFpbGVkIFxuIik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotCSAgICBnb3RvIGVycl9ub21lbTsKLSAgICB9CisJcERldmljZS0+ZGV2ID0gbmV0ZGV2OworCXBEZXZpY2UtPnVzYiA9IHVkZXY7CiAKLSAgICBwRGV2aWNlID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLSAgICBtZW1zZXQocERldmljZSwgMCwgc2l6ZW9mKERFVklDRV9JTkZPKSk7CisJZGV2aWNlX3NldF9vcHRpb25zKHBEZXZpY2UpOworCXNwaW5fbG9ja19pbml0KCZwRGV2aWNlLT5sb2NrKTsKIAotICAgIHBEZXZpY2UtPmRldiA9IG5ldGRldjsKLSAgICBwRGV2aWNlLT51c2IgPSB1ZGV2OworCXBEZXZpY2UtPnR4XzgwMjExID0gZGV2aWNlX2RtYTBfdHhfODAyMTE7CisJcERldmljZS0+c01nbXRPYmoucEFkYXB0ZXIgPSAodm9pZCAqKSBwRGV2aWNlOwogCi0gICAgLy8gU2V0IGluaXRpYWwgc2V0dGluZ3MKLSAgICBkZXZpY2Vfc2V0X29wdGlvbnMocERldmljZSk7Ci0gICAgc3Bpbl9sb2NrX2luaXQoJnBEZXZpY2UtPmxvY2spOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZkZXZpY2VfbmV0ZGV2X29wczsKKwluZXRkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0KKwkJKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmaXdjdGxfaGFuZGxlcl9kZWY7CiAKLSAgICBwRGV2aWNlLT50eF84MDIxMSA9IGRldmljZV9kbWEwX3R4XzgwMjExOwotICAgIHBEZXZpY2UtPnNNZ210T2JqLnBBZGFwdGVyID0gKHZvaWQgKilwRGV2aWNlOwotCi0gICAgbmV0ZGV2LT5uZXRkZXZfb3BzICAgICAgICAgPSAmZGV2aWNlX25ldGRldl9vcHM7Ci0KLQluZXRkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZpd2N0bF9oYW5kbGVyX2RlZjsKLQotICAgLy8yMDA4LTA2MjMtMDE8UmVtYXJrPmJ5IE1pa2VMaXUKLSAgLy8yMDA3LTA4MjEtMDE8QWRkPmJ5IE1pa2VMaXUKLSAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgcERldmljZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBwRGV2aWNlKTsKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZpbnRmLT5kZXYpOwotICAgIG1lbWNweShwRGV2aWNlLT5kZXYtPmRldl9hZGRyLCBmYWtlX21hYywgRVRIX0FMRU4pOwotICAgIHJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7Ci0gICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICIgRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CisJbWVtY3B5KHBEZXZpY2UtPmRldi0+ZGV2X2FkZHIsIGZha2VfbWFjLCBFVEhfQUxFTik7CisJcmMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERFVklDRV9OQU1FICIgRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CiAJCWZyZWVfbmV0ZGV2KG5ldGRldik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJCWtmcmVlKHBEZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLS8vMjAwOC0wNy0yMS0wMTxBZGQ+YnkgTWlrZUxpdQotLy9yZWdpc3RlciB3cGFkZXYKLSNpZiAwCi0gICBpZih3cGFfc2V0X3dwYWRldihwRGV2aWNlLCAxKSE9MCkgewotICAgICBwcmludGsoIkZhaWwgdG8gUmVnaXN0ZXIgV1BBREVWP1xuIik7Ci0gICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KHBEZXZpY2UtPmRldik7Ci0gICAgICAgIGZyZWVfbmV0ZGV2KG5ldGRldik7Ci0gICAgICAgIGtmcmVlKHBEZXZpY2UpOwotICAgfQotI2VuZGlmCi0gICAgICAgICB1c2JfZGV2aWNlX3Jlc2V0KHBEZXZpY2UpOworCXVzYl9kZXZpY2VfcmVzZXQocERldmljZSk7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKLXsKLSAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7Ci0gIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLSAgd3JxdS5kYXRhLmZsYWdzID0gUlRfSU5TTU9EX0VWRU5UX0ZMQUc7Ci0gIHdycXUuZGF0YS5sZW5ndGggPUlGTkFNU0laOwotICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIHBEZXZpY2UtPmRldi0+bmFtZSk7Ci19Ci0jZW5kaWYKKwl7CisJCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQl3cnF1LmRhdGEuZmxhZ3MgPSBSVF9JTlNNT0RfRVZFTlRfRkxBRzsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IElGTkFNU0laOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwKKwkJCQkgICAgSVdFVkNVU1RPTSwKKwkJCQkgICAgJndycXUsCisJCQkJICAgIHBEZXZpY2UtPmRldi0+bmFtZSk7CisJfQogCiAJcmV0dXJuIDA7CiAKLQogZXJyX25vbWVtOgotIC8vMjAwOC0wOTIyLTAxPEFkZD5ieSBNaWtlTGl1LCBkZWNyZWFzZSB1c2IgY291bnRlci4KLSAgICB1c2JfcHV0X2Rldih1ZGV2KTsKKwl1c2JfcHV0X2Rldih1ZGV2KTsKIAotICAgIHJldHVybiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfQogCi0KIHN0YXRpYyB2b2lkIGRldmljZV9mcmVlX3R4X2J1ZnMoUFNEZXZpY2UgcERldmljZSkKIHsKICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwVHhDb250ZXh0OwpAQCAtMTA2NSw3ICsxMDQ2LDYgQEAKIHN0YXRpYyBpbnQgIGRldmljZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKICAgICBQU0RldmljZSAgICBwRGV2aWNlPShQU0RldmljZSkgbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmZGVmIFdQQV9TTV9UcmFuc3RhdHVzCiAgICAgIGV4dGVybiBTV1BBUmVzdWx0IHdwYV9SZXN1bHQ7CiAgICAgIG1lbXNldCh3cGFfUmVzdWx0LmlmbmFtZSwwLHNpemVvZih3cGFfUmVzdWx0LmlmbmFtZSkpOwogICAgICB3cGFfUmVzdWx0LnByb3RvID0gMDsKQEAgLTEwNzMsNyArMTA1Myw2IEBACiAgICAgIHdwYV9SZXN1bHQuZWFwX3R5cGUgPSAwOwogICAgICB3cGFfUmVzdWx0LmF1dGhlbnRpY2F0ZWQgPSBGQUxTRTsKICAgICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOwotI2VuZGlmCiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICIgZGV2aWNlX29wZW4uLi5cbiIpOwogCkBAIC0xMTcyLDE0ICsxMTUxLDEyIEBACiAgICAgbmV0aWZfc3RvcF9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgIHBEZXZpY2UtPmZsYWdzIHw9IERFVklDRV9GTEFHU19PUEVORUQ7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKIHsKICAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7CiAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfVVBERVZfRVZFTlRfRkxBRzsKICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwRGV2aWNlLT5kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKIH0KLSNlbmRpZgogCiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX29wZW4gc3VjY2Vzcy4uIFxuIik7CiAgICAgcmV0dXJuIDA7CkBAIC0xMjExLDE0ICsxMTg4LDEyIEBACiAgICAgaWYgKHBEZXZpY2UgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAKLSNpZmRlZiBTbmRFdnRfVG9BUEkKIHsKICAgdW5pb24gaXdyZXFfZGF0YSAgICAgIHdycXU7CiAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfRE9XTkRFVl9FVkVOVF9GTEFHOwogICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOwogfQotI2VuZGlmCiAKIC8vMjAwNy0xMTIxLTAyPEFkZD5ieSBFaW5zbkxpdQogICAgIGlmIChwRGV2aWNlLT5iTGlua1Bhc3MpIHsKQEAgLTEyMzQsMTAgKzEyMDksMTAgQEAKICAgICAgICAgcE1nbXQtPmJTaGFyZUtleUFsZ29yaXRobSA9IEZBTFNFOwogICAgICAgICBwRGV2aWNlLT5iRW5jcnlwdGlvbkVuYWJsZSA9IEZBTFNFOwogICAgICAgICBwRGV2aWNlLT5lRW5jcnlwdGlvblN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7Ci0gICAgICAgICAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLSAgICAgICAgICAgIGZvcih1dT0wO3V1PE1BWF9LRVlfVEFCTEU7dXUrKykKKwlzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKwlmb3IgKHV1ID0gMDsgdXUgPCBNQVhfS0VZX1RBQkxFOyB1dSsrKQogICAgICAgICAgICAgICAgIE1BQ3ZEaXNhYmxlS2V5RW50cnkocERldmljZSx1dSk7Ci0gICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKICAgICBpZiAoKHBEZXZpY2UtPmZsYWdzICYgREVWSUNFX0ZMQUdTX1VOUExVRykgPT0gRkFMU0UpIHsKICAgICAgICAgTUFDYlNodXRkb3duKHBEZXZpY2UpOwpAQCAtMTI1MCwxMCArMTIyNSw3IEBACiAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJDb21tYW5kKTsKICAgICBkZWxfdGltZXIoJnBNZ210LT5zVGltZXJTZWNvbmRDYWxsYmFjayk7CiAKLS8vMjAwNy0wMTE1LTAyPEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiAgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwotI2VuZGlmCiAKICAgICBpZiAocERldmljZS0+YkRpdmVyc2l0eVJlZ0N0bE9OKSB7CiAgICAgICAgIGRlbF90aW1lcigmcERldmljZS0+VGltZXJTUTNUbWF4MSk7CkBAIC0xMjkwLDExMiArMTI2Miw4MSBAQAogICAgIHJldHVybiAwOwogfQogCi0KIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2dDY2NTZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKKwlQU0RldmljZSBkZXZpY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JUFNEZXZpY2UgIHBEZXZpY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWlmICghZGV2aWNlKQorCQlyZXR1cm47CiAKLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZGlzY29ubmVjdDEuLiBcbiIpOwotICAgIGlmIChwRGV2aWNlID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKwl7CisJCXVuaW9uIGl3cmVxX2RhdGEgcmVxOworCQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCQlyZXEuZGF0YS5mbGFncyA9IFJUX1JNTU9EX0VWRU5UX0ZMQUc7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2aWNlLT5kZXYsIElXRVZDVVNUT00sICZyZXEsIE5VTEwpOworCX0KIAotI2lmZGVmIFNuZEV2dF9Ub0FQSQotewotICB1bmlvbiBpd3JlcV9kYXRhICAgICAgd3JxdTsKLSAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9STU1PRF9FVkVOVF9GTEFHOwotICB3aXJlbGVzc19zZW5kX2V2ZW50KHBEZXZpY2UtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIE5VTEwpOwotfQotI2VuZGlmCi0KLS8vMjAwOC0wNzE0LTAxPEFkZD5ieSBNaWtlTGl1Ci1kZXZpY2VfcmVsZWFzZV9XUEFERVYocERldmljZSk7CisJZGV2aWNlX3JlbGVhc2VfV1BBREVWKGRldmljZSk7CiAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotLy8yMDA4LTA5MjItMDE8QWRkPmJ5IE1pa2VMaXUsIGRlY3JlYXNlIHVzYiBjb3VudGVyLgotICAgICB1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKKwl1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpKTsKIAotICAgIHBEZXZpY2UtPmZsYWdzIHw9IERFVklDRV9GTEFHU19VTlBMVUc7Ci0gICAgaWYgKHBEZXZpY2UtPmRldiAhPSBOVUxMKSB7Ci0gICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gInVucmVnaXN0ZXJfbmV0ZGV2Li5cbiIpOwotICAgICAgICB1bnJlZ2lzdGVyX25ldGRldihwRGV2aWNlLT5kZXYpOworCWRldmljZS0+ZmxhZ3MgfD0gREVWSUNFX0ZMQUdTX1VOUExVRzsKIAotLy8yMDA4LTA3LTIxLTAxPEFkZD5ieSBNaWtlTGl1Ci0vL3VucmVnaXN0ZXIgd3BhZGV2Ci0gICBpZih3cGFfc2V0X3dwYWRldihwRGV2aWNlLCAwKSE9MCkKLSAgICAgcHJpbnRrKCJ1bnJlZ2lzdGVyIHdwYWRldiBmYWlsP1xuIik7Ci0KLSAgICAgICAgZnJlZV9uZXRkZXYocERldmljZS0+ZGV2KTsKLSAgICB9Ci0KLSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPICJkZXZpY2VfZGlzY29ubmVjdDMuLiBcbiIpOworCWlmIChkZXZpY2UtPmRldikgeworCQl1bnJlZ2lzdGVyX25ldGRldihkZXZpY2UtPmRldik7CisJCXdwYV9zZXRfd3BhZGV2KGRldmljZSwgMCk7CisJCWZyZWVfbmV0ZGV2KGRldmljZS0+ZGV2KTsKKwl9CiB9CiAKK3N0YXRpYyBpbnQgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlQU0RldmljZSBwRGV2aWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCXNwaW5fbG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwogCisJaWYgKHVubGlrZWx5KHBEZXZpY2UtPmJTdG9wVHgwUGt0KSkKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwllbHNlCisJCXZETUEwX3R4XzgwMjExKHBEZXZpY2UsIHNrYik7CiAKLXN0YXRpYyBpbnQgZGV2aWNlX2RtYTBfdHhfODAyMTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikgewotICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlPW5ldGRldl9wcml2KGRldik7Ci0gICAgUEJZVEUgICAgICAgICAgIHBiTVBEVTsKLSAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBjYk1QRFVMZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLQotICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gImRldmljZV9kbWEwX3R4XzgwMjExXG4iKTsKLSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKLQotICAgIGlmIChwRGV2aWNlLT5iU3RvcFR4MFBrdCA9PSBUUlVFKSB7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH07Ci0KLQotICAgIGNiTVBEVUxlbiA9IHNrYi0+bGVuOwotICAgIHBiTVBEVSA9IHNrYi0+ZGF0YTsKLQotICAgIHZETUEwX3R4XzgwMjExKHBEZXZpY2UsIHNrYik7Ci0KLSAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCi0gICAgcmV0dXJuIDA7Ci0KKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCitzdGF0aWMgaW50IGRldmljZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJUFNEZXZpY2UgcERldmljZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnBEZXZpY2UtPnN0YXRzOwogCi1zdGF0aWMgaW50ICBkZXZpY2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgUFNEZXZpY2UgICAgcERldmljZT1uZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiBwU3RhdHMgPSAmcERldmljZS0+c3RhdHM7CisJc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLSAgICBzcGluX2xvY2tfaXJxKCZwRGV2aWNlLT5sb2NrKTsKKwlpZiAoIXBEZXZpY2UtPmJMaW5rUGFzcykgeworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlnb3RvIG91dDsKKwl9CiAKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKHBEZXZpY2UtPmRldik7CisJaWYgKHBEZXZpY2UtPmJTdG9wRGF0YVBrdCkgeworCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlnb3RvIG91dDsKKwl9CiAKLSAgICBpZiAocERldmljZS0+YkxpbmtQYXNzID09IEZBTFNFKSB7Ci0gICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAocERldmljZS0+YlN0b3BEYXRhUGt0ID09IFRSVUUpIHsKLSAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgcFN0YXRzLT50eF9kcm9wcGVkKys7Ci0gICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIFRZUEVfQUMwRE1BLCBza2IpKSB7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQogCi0gICAgaWYobnNETUFfdHhfcGFja2V0KHBEZXZpY2UsIFRZUEVfQUMwRE1BLCBza2IpICE9MCkgeyAgLy9taWtlIGFkZDp4bWl0IGZhaWwhCi0gICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChwRGV2aWNlLT5kZXYpKQotICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKHBEZXZpY2UtPmRldik7Ci0gICAgfQorb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAKLSAgICBzcGluX3VubG9ja19pcnEoJnBEZXZpY2UtPmxvY2spOwotCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotCi0KIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBldGhlcm5ldF9wb2x5bm9taWFsID0gMHgwNGMxMWRiN1U7CiBzdGF0aWMgaW5saW5lIHUzMiBldGhlcl9jcmMoaW50IGxlbmd0aCwgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKQEAgLTE0NDcsMTIgKzEzODgsMTIgQEAKIAlyZXR1cm4gRkFMU0U7CiAKIC8vY2hlY2sgaWYgY3VycmVudCBjb25maWcgbGluZSBpcyBtYXJrZWQgYnkgIiMiID8/Ci1mb3IoaWk9MTs7aWkrKykgewotICBpZihtZW1jbXAoc3RhcnRfcC1paSwiXG4iLDEpPT0wKQotICAgICAgYnJlYWs7Ci0gIGlmKG1lbWNtcChzdGFydF9wLWlpLCIjIiwxKT09MCkKLSAgICAgIHJldHVybiBGQUxTRTsKLX0KKyAgICBmb3IgKGlpID0gMTsgOyBpaSsrKSB7CisJaWYgKG1lbWNtcChzdGFydF9wIC0gaWksICJcbiIsIDEpID09IDApCisJCWJyZWFrOworCWlmIChtZW1jbXAoc3RhcnRfcCAtIGlpLCAiIyIsIDEpID09IDApCisJCXJldHVybiBGQUxTRTsKKyAgICB9CiAKIC8vZmluZCB0YXJnZXQgc3RyaW5nIGVuZCBwb2ludAogICAgICBlbmRfcCA9IGtzdHJzdHIoc3RhcnRfcCwiXG4iKTsKQEAgLTE1ODUsNyArMTUyNiw2IEBACiAgfQogfQogCi0jaWYgMQogLy9nZXQgb3RoZXIgcGFyYW1ldGVyCiAgIHsKIAltZW1zZXQodG1wYnVmZmVyLDAsc2l6ZW9mKHRtcGJ1ZmZlcikpOwpAQCAtMTU5OCw3ICsxNTM4LDYgQEAKIAkgcERldmljZS0+Y29uZmlnX2ZpbGUuZUVuY3J5cHRpb25TdGF0dXM9IChpbnQpIHNpbXBsZV9zdHJ0b2wodG1wYnVmZmVyLCBOVUxMLCAxMCk7CiAgICAgICAgfQogICB9Ci0jZW5kaWYKIAogICBrZnJlZShidWZmZXIpOwogICByZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWliLmMKaW5kZXggYjY5NGZjOC4uOGE2ZWU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5jCkBAIC0zNDcsMTAgKzM0Nyw5IEBACiAgICAgaWYgKFdMQU5fR0VUX0ZDX01PUkVGUkFHKHBIZWFkZXItPndGcmFtZUN0bCkpCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcmFnbWVudCsrOwogCi0gICAgaWYgKGNiRnJhbWVMZW5ndGggPCBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICBpZiAoY2JGcmFtZUxlbmd0aCA8IEVUSF9aTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ1bnQrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoY2JGcmFtZUxlbmd0aCA9PSBNSU5fUEFDS0VUX0xFTiArIDQpIHsKKyAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPT0gRVRIX1pMRU4gKyA0KSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW42NCsrOwogICAgIH0KICAgICBlbHNlIGlmICgoNjUgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gMTI3KSkgewpAQCAtMzY0LDE3ICszNjMsMTQgQEAKICAgICB9CiAgICAgZWxzZSBpZiAoKDUxMiA8PSBjYkZyYW1lTGVuZ3RoKSAmJiAoY2JGcmFtZUxlbmd0aCA8PSAxMDIzKSkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzclJ4RnJtTGVuNTEyXzEwMjMrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKDEwMjQgPD0gY2JGcmFtZUxlbmd0aCkgJiYgKGNiRnJhbWVMZW5ndGggPD0gTUFYX1BBQ0tFVF9MRU4gKyA0KSkgeworICAgIH0gZWxzZSBpZiAoKDEwMjQgPD0gY2JGcmFtZUxlbmd0aCkgJiYKKwkgICAgICAgKGNiRnJhbWVMZW5ndGggPD0gRVRIX0ZSQU1FX0xFTiArIDQpKSB7CiAgICAgICAgIHBTdGF0aXN0aWMtPmR3UnNyUnhGcm1MZW4xMDI0XzE1MTgrKzsKLSAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBNQVhfUEFDS0VUX0xFTiArIDQpIHsKKyAgICB9IGVsc2UgaWYgKGNiRnJhbWVMZW5ndGggPiBFVEhfRlJBTUVfTEVOICsgNCkgewogICAgICAgICBwU3RhdGlzdGljLT5kd1JzckxvbmcrKzsKICAgICB9Ci0KIH0KIAotCi0KIC8qCiAgKiBEZXNjcmlwdGlvbjogVXBkYXRlIFJ4IFN0YXRpc3RpYyBDb3VudGVyIGFuZCBjb3B5IFJ4IGJ1ZmZlcgogICoKQEAgLTQ2NywxMiArNDYzLDEwIEBACiAgICAgfQogICAgIGlmICggIShieVRTUiAmIChUU1JfVE1PIHwgVFNSX1JFVFJZVE1PKSkpIHsKIAotI2lmZGVmIENhbGN1X0xpbmtRdWFsCiAgICBpZiAoYnlSZXR5Q250IDwgMikKICAgICAgICAgcFN0YXRpc3RpYy0+VHhOb1JldHJ5T2tDb3VudCArKzsKICAgIGVsc2UKICAgICAgICAgcFN0YXRpc3RpYy0+VHhSZXRyeU9rQ291bnQgKys7Ci0jZW5kaWYKIAogICAgICAgICBwU3RhdGlzdGljLT51bGxUc3JPSysrOwogICAgICAgICBwU3RhdGlzdGljLT5DdXN0b21TdGF0LnVsbFRzckFsbE9LKys7CkBAIC00OTMsOSArNDg3LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAKLSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgICBwU3RhdGlzdGljLT5UeEZhaWxDb3VudCArKzsKLSNlbmRpZgogCiAgICAgICAgIHBTdGF0aXN0aWMtPmR3VHNyRXJyKys7CiAgICAgICAgIGlmIChieVRTUiAmIFRTUl9SRVRSWVRNTykKQEAgLTU5MSwxMCArNTgzLDcgQEAKICAqCiAgKi8KIAotdm9pZAotU1RBdlVwZGF0ZVVTQkNvdW50ZXIoUFNVU0JDb3VudGVyIHBVc2JDb3VudGVyLAotICAgICAgICAgICAgICAgICAgICAgTlRTVEFUVVMgbnRTdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgICkKK3ZvaWQgU1RBdlVwZGF0ZVVTQkNvdW50ZXIoUFNVU0JDb3VudGVyIHBVc2JDb3VudGVyLCBpbnQgbnRTdGF0dXMpCiB7CiAKIC8vICAgIGlmICggbnRTdGF0dXMgPT0gVVNCRF9TVEFUVVNfQ1JDICkgewpAQCAtNjAyLDUgKzU5MSwzIEBACiAvLyAgICB9CiAKIH0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWIuaAppbmRleCAwNDU1ZWM5Li5hODljY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21pYi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWliLmgKQEAgLTM1Niw3ICszNTYsNiBAQAogCiAgICAgU0N1c3RvbUNvdW50ZXJzIEN1c3RvbVN0YXQ7CiAKLSAgICNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgIC8vVHggY291bnQ6CiAgIHVuc2lnbmVkIGxvbmcgVHhOb1JldHJ5T2tDb3VudDsgICAgICAgICAvKiBzdWNjZXNzIHR4IG5vIHJldHJ5ICEgKi8KICAgdW5zaWduZWQgbG9uZyBUeFJldHJ5T2tDb3VudDsgICAgICAgICAgIC8qIHN1Y2Nlc3MgdHggYnV0IHJldHJ5ICEgKi8KQEAgLTM2NywxMiArMzY2LDkgQEAKICAgICAgIC8vc3RhdGlzdGljCiAgICAgdW5zaWduZWQgbG9uZyBTaWduYWxTdHJlbjsKICAgICB1bnNpZ25lZCBsb25nIExpbmtRdWFsaXR5OwotICAgI2VuZGlmCiAKIH0gU1N0YXRDb3VudGVyLCAqUFNTdGF0Q291bnRlcjsKIAotI2RlZmluZSBOVFNUQVRVUyAgICAgICAgaW50Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgQ2xhc3NlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVmFyaWFibGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zODEsNyArMzc3LDkgQEAKIAogdm9pZCBTVEF2Q2xlYXJBbGxDb3VudGVyKFBTU3RhdENvdW50ZXIgcFN0YXRpc3RpYyk7CiAKLXZvaWQgU1RBdlVwZGF0ZUlzclN0YXRDb3VudGVyIChQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIEJZVEUgYnlJc3IwLCBCWVRFIGJ5SXNyMSk7Cit2b2lkIFNUQXZVcGRhdGVJc3JTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCisJCQkgICAgICBCWVRFIGJ5SXNyMCwKKwkJCSAgICAgIEJZVEUgYnlJc3IxKTsKIAogdm9pZCBTVEF2VXBkYXRlUkRTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsCiAJCQkgICAgIEJZVEUgYnlSU1IsIEJZVEUgYnlOZXdSU1IsIEJZVEUgYnlSeFN0cywKQEAgLTM5MywxNCArMzkxLDggQEAKIAkJCSAgICAgICBCWVRFIGJ5UnhSYXRlLCBQQllURSBwYnlCdWZmZXIsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNiRnJhbWVMZW5ndGgpOwogCi12b2lkCi1TVEF2VXBkYXRlVERTdGF0Q291bnRlciAoCi0gICAgUFNTdGF0Q291bnRlciAgIHBTdGF0aXN0aWMsCi0gICAgQllURSAgICAgICAgICAgIGJ5UGt0TnVtLAotICAgIEJZVEUgICAgICAgICAgICBieVJhdGUsCi0gICAgQllURSAgICAgICAgICAgIGJ5VFNSCi0gICAgKTsKLQordm9pZCBTVEF2VXBkYXRlVERTdGF0Q291bnRlcihQU1N0YXRDb3VudGVyIHBTdGF0aXN0aWMsIEJZVEUgYnlQa3ROdW0sCisJCQkgICAgIEJZVEUgYnlSYXRlLCBCWVRFIGJ5VFNSKTsKIAogdm9pZAogU1RBdlVwZGF0ZTgwMl8xMUNvdW50ZXIoCkBAIC00MTMsMTEgKzQwNSw2IEBACiAgICAgKTsKIAogdm9pZCBTVEF2Q2xlYXI4MDJfMTFDb3VudGVyKFBTRG90MTFDb3VudGVycyBwODAyXzExQ291bnRlcik7Ci0KLXZvaWQKLVNUQXZVcGRhdGVVU0JDb3VudGVyKAotICAgIFBTVVNCQ291bnRlciAgICBwVXNiQ291bnRlciwKLSAgICBOVFNUQVRVUyAgICAgICAgbnRTdGF0dXMKLSAgICApOwordm9pZCBTVEF2VXBkYXRlVVNCQ291bnRlcihQU1VTQkNvdW50ZXIgcFVzYkNvdW50ZXIsIGludCBudFN0YXR1cyk7CiAKICNlbmRpZiAvKiBfX01JQl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWljaGFlbC5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKaW5kZXggNjcxYThjZi4uNGQ0MTk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmMKQEAgLTc0LDcgKzc0LDcgQEAKIHsKIAlEV09SRCByZXMgPSAwOwogCXVuc2lnbmVkIGludCBpOwotCWZvcihpPTA7IGk8NDsgaSsrICkKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQlyZXMgfD0gKCpwKyspIDw8ICg4KmkpOwogCXJldHVybiByZXM7CiB9CkBAIC04Myw3ICs4Myw3IEBACiAvLyBDb252ZXJ0IGZyb20gRFdPUkQgdG8gQllURVtdIGluIGEgcG9ydGFibGUgd2F5CiB7CiAJdW5zaWduZWQgaW50IGk7Ci0JZm9yKGk9MDsgaTw0OyBpKysgKSB7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkqcCsrID0gKEJZVEUpICh2YWwgJiAweGZmKTsKIAkJdmFsID4+PSA4OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWljaGFlbC5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKaW5kZXggM2FiNjA5Mi4uODEzNTFmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9taWNoYWVsLmgKQEAgLTQ5LDggKzQ5LDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8vIFJvdGF0aW9uIGZ1bmN0aW9ucyBvbiAzMiBiaXQgdmFsdWVzCi0jZGVmaW5lIFJPTDMyKCBBLCBuICkgXAotICggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgICYgKCAoMVVMIDw8IChuKSkgLSAxICkgKSApCi0jZGVmaW5lIFJPUjMyKCBBLCBuICkgUk9MMzIoIChBKSwgMzItKG4pICkKKyNkZWZpbmUgUk9MMzIoQSwgbikgXAorICgoKEEpIDw8IChuKSkgfCAoKChBKT4+KDMyLShuKSkpICAmICgoMVVMIDw8IChuKSkgLSAxKSkpCisjZGVmaW5lIFJPUjMyKEEsIG4pIFJPTDMyKChBKSwgMzItKG4pKQogCiAjZW5kaWYgLyogX19NSUNIQUVMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5jCmluZGV4IDc2NmM1YmUuLjRkN2Q0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Bvd2VyLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKiBGaWxlOiBwb3dlci5jCiAgKgotICogUHVycG9zZTogSGFuZGxlcyA4MDIuMTEgcG93ZXIgbWFuYWdtZW50ICBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgODAyLjExIHBvd2VyIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucwogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KICAqCkBAIC0yOTAsMTcgKzI5MCwxMSBAQAogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0vLzIwMDctMDExNS0wMzxBZGQ+YnkgTWlrZUxpdQotI2lmZGVmIFR4SW5TbGVlcAogICAgICBpZiAoKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpICYmCiAJICAocERldmljZS0+ZlR4RGF0YUluU2xlZXAgPT0gRkFMU0UpKXsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KLSNlbHNlCi0gICAgaWYgKHBEZXZpY2UtPmJFbmFibGVQU01vZGUgPT0gRkFMU0UpIHsKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIH0KLSNlbmRpZgorCiAgICAgbWVtc2V0KHBNZ210LT5wYnlQU1BhY2tldFBvb2wsIDAsIHNpemVvZihTVHhNZ210UGFja2V0KSArIFdMQU5fTlVMTERBVEFfRlJfTUFYTEVOKTsKICAgICBwVHhQYWNrZXQgPSAoUFNUeE1nbXRQYWNrZXQpcE1nbXQtPnBieVBTUGFja2V0UG9vbDsKICAgICBwVHhQYWNrZXQtPnA4MDIxMUhlYWRlciA9IChQVVdMQU5fODAyMTFIRFIpKChQQllURSlwVHhQYWNrZXQgKyBzaXplb2YoU1R4TWdtdFBhY2tldCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9wb3dlci5oCmluZGV4IDUwNzkyYmIuLjQxYmZmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcG93ZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3Bvd2VyLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqCiAgKiBGaWxlOiBwb3dlci5oCiAgKgotICogUHVycG9zZTogSGFuZGxlcyA4MDIuMTEgcG93ZXIgbWFuYWdtZW50ICBmdW5jdGlvbnMKKyAqIFB1cnBvc2U6IEhhbmRsZXMgODAyLjExIHBvd2VyIG1hbmFnZW1lbnQgIGZ1bmN0aW9ucwogICoKICAqIEF1dGhvcjogTHluZG9uIENoZW4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JmLmgKaW5kZXggZDRmOGI5NC4uZjViYThmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9yZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcmYuaApAQCAtNjQsMTEgKzY0LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgRnVuY3Rpb25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIEJPT0wgSUZSRmJXcml0ZUVtYmVkZWQoUFNEZXZpY2UgcERldmljZSwgRFdPUkQgZHdEYXRhKTsKLUJPT0wgUkZiU2V0UG93ZXIgKAotICAgICAgUFNEZXZpY2UgIHBEZXZpY2UsCi0gICAgICB1bnNpZ25lZCBpbnQgICAgICB1UkFURSwKLSAgICAgIHVuc2lnbmVkIGludCAgICAgIHVDSAotICAgICk7CitCT09MIFJGYlNldFBvd2VyKFBTRGV2aWNlIHBEZXZpY2UsIHVuc2lnbmVkIGludCB1UkFURSwgdW5zaWduZWQgaW50IHVDSCk7CiAKIEJPT0wgUkZiUmF3U2V0UG93ZXIoCiAgICAgICBQU0RldmljZSAgcERldmljZSwKQEAgLTc2LDE3ICs3Miw4IEBACiAgICAgICB1bnNpZ25lZCBpbnQgICAgICB1UkFURQogICAgICk7CiAKLXZvaWQKLVJGdlJTU0lUb2RCbSAoCi0gICAgICBQU0RldmljZSBwRGV2aWNlLAotICAgICAgQllURSAgICAgYnlDdXJyUlNTSSwKLSAgICBsb25nICogICAgcGxkQm0KLSAgICApOwotCi12b2lkCi1SRmJSRlRhYmxlRG93bmxvYWQgKAotICAgICAgUFNEZXZpY2UgcERldmljZQotICAgICk7Cit2b2lkIFJGdlJTU0lUb2RCbShQU0RldmljZSBwRGV2aWNlLCBCWVRFIGJ5Q3VyclJTU0ksIGxvbmcgKnBsZEJtKTsKK3ZvaWQgUkZiUkZUYWJsZURvd25sb2FkKFBTRGV2aWNlIHBEZXZpY2UpOwogCiBCT09MIHNfYlZUMzIyNkQwXzExYkxvQ3VycmVudEFkanVzdCgKICAgICAgIFBTRGV2aWNlICAgIHBEZXZpY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JuZGlzLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3JuZGlzLmgKaW5kZXggYWM4NDJkZC4uZmNjZjdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9ybmRpcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcm5kaXMuaApAQCAtMTUyLDcgKzE1Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jZGVmaW5lIEVYQ0hfV09SRCh3KSAgICAgICAgKCAoV09SRCkoKFdPUkQpKHcpPDw4KSB8IChXT1JEKSgoV09SRCkodyk+PjgpICkKKyNkZWZpbmUgRVhDSF9XT1JEKHcpICgoV09SRCkoKFdPUkQpKHcpPDw4KSB8IChXT1JEKSgoV09SRCkodyk+PjgpKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IFZhcmlhYmxlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCmluZGV4IDNlN2U1NjYuLmRlY2EyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5jCkBAIC02MSwxMCArNjEsNyBAQAogI2luY2x1ZGUgInJmLmgiCiAjaW5jbHVkZSAiZGF0YXJhdGUuaCIKICNpbmNsdWRlICJ1c2JwaXBlLmgiCi0KLSNpZmRlZiBXUEFfU01fVHJhbnN0YXR1cwogI2luY2x1ZGUgImlvY21kLmgiCi0jZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFN0YXRpYyBEZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMzA0LDEwICszMDEsOSBAQAogewogICAgIFBTU3RhdENvdW50ZXIgICAgICAgICAgIHBTdGF0aXN0aWM9JihwRGV2aWNlLT5zY1N0YXRpc3RpYyk7CiAKLQotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUyhwYnlEZXN0QWRkcikpCisgICAgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+YWJ5VHhQa3RJbmZvW2J5UGt0TnVtXS5ieUJyb2FkTXVsdGlVbmkgPSBUWF9QS1RfQlJPQUQ7Ci0gICAgZWxzZSBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MocGJ5RGVzdEFkZHIpKQorICAgIGVsc2UgaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHBieURlc3RBZGRyKSkKICAgICAgICAgcFN0YXRpc3RpYy0+YWJ5VHhQa3RJbmZvW2J5UGt0TnVtXS5ieUJyb2FkTXVsdGlVbmkgPSBUWF9QS1RfTVVMVEk7CiAgICAgZWxzZQogICAgICAgICBwU3RhdGlzdGljLT5hYnlUeFBrdEluZm9bYnlQa3ROdW1dLmJ5QnJvYWRNdWx0aVVuaSA9IFRYX1BLVF9VTkk7CkBAIC0zMTksOSArMzE1LDYgQEAKIAkgICBFVEhfQUxFTik7CiB9CiAKLQotCi0KIHN0YXRpYwogdm9pZAogc192RmlsbFR4S2V5ICgKQEAgLTE0NzMsNyArMTQ2Niw3IEBACiAgICAgbWVtc2V0KHBUeEJ1ZkhlYWQsIDAsIHNpemVvZihUWF9CVUZGRVIpKTsKIAogICAgIC8vIEdldCBwa3QgdHlwZQotICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gTUFYX0RBVEFfTEVOKSB7CisgICAgaWYgKG50b2hzKHBzRXRoSGVhZGVyLT53VHlwZSkgPiBFVEhfREFUQV9MRU4pIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ID09IDApIHsKICAgICAgICAgICAgIGNiODAyXzFfSF9sZW4gPSA4OwogICAgICAgICB9IGVsc2UgewpAQCAtMTQ5MiwxNyArMTQ4NSwxNiBAQAogICAgICAgICBiTmVlZEFDSyA9IEZBTFNFOwogICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCA9IHBUeEJ1ZkhlYWQtPndGSUZPQ3RsICYgKH5GSUZPQ1RMX05FRURBQ0spOwogICAgIH0gZWxzZSB7IC8vaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ICE9IDApIHsKLSAgICAgICAgaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8Ci0gICAgICAgICAgICAocERldmljZS0+ZU9QTW9kZSA9PSBPUF9NT0RFX0FQKSkgewotICAgICAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSB8fAotICAgICAgICAgICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocHNFdGhIZWFkZXItPmFieURzdEFkZHJbMF0pKSkgewotICAgICAgICAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgPSBwVHhCdWZIZWFkLT53RklGT0N0bCAmICh+RklGT0NUTF9ORUVEQUNLKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGJOZWVkQUNLID0gVFJVRTsKLSAgICAgICAgICAgICAgICBwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7Ci0gICAgICAgICAgICB9CisJaWYgKChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQURIT0MpIHx8CisJICAgIChwRGV2aWNlLT5lT1BNb2RlID09IE9QX01PREVfQVApKSB7CisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwc0V0aEhlYWRlci0+YWJ5RHN0QWRkcikpIHsKKwkJCWJOZWVkQUNLID0gRkFMU0U7CisJCQlwVHhCdWZIZWFkLT53RklGT0N0bCA9CisJCQkJcFR4QnVmSGVhZC0+d0ZJRk9DdGwgJiAofkZJRk9DVExfTkVFREFDSyk7CisJCX0gZWxzZSB7CisJCQliTmVlZEFDSyA9IFRSVUU7CisJCQlwVHhCdWZIZWFkLT53RklGT0N0bCB8PSBGSUZPQ1RMX05FRURBQ0s7CisJCX0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIE1TRFVzIGluIEluZnJhIG1vZGUgYWx3YXlzIG5lZWQgQUNLCkBAIC0xNzA4LDcgKzE3MDAsNyBAQAogICAgIH0KIAogICAgIC8vIDgwMi4xSAotICAgIGlmIChudG9ocyhwc0V0aEhlYWRlci0+d1R5cGUpID4gTUFYX0RBVEFfTEVOKSB7CisgICAgaWYgKG50b2hzKHBzRXRoSGVhZGVyLT53VHlwZSkgPiBFVEhfREFUQV9MRU4pIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmR3RGlhZ1JlZkNvdW50ID09IDApIHsKICAgICAgICAgICAgIGlmICggKHBzRXRoSGVhZGVyLT53VHlwZSA9PSBUWVBFX1BLVF9JUFgpIHx8CiAgICAgICAgICAgICAgICAgIChwc0V0aEhlYWRlci0+d1R5cGUgPT0gY3B1X3RvX2xlMTYoMHhGMzgwKSkpIHsKQEAgLTIwMzcsOSArMjAyOSw3IEBACiAgICAgcFR4QnVmSGVhZC0+d0ZJRk9DdGwgfD0gRklGT0NUTF9UTU9FTjsKICAgICBwVHhCdWZIZWFkLT53VGltZVN0YW1wID0gY3B1X3RvX2xlMTYoREVGQVVMVF9NR05fTElGRVRJTUVfUkVTXzY0dXMpOwogCi0KLSAgICBpZiAoSVNfTVVMVElDQVNUX0FERFJFU1MoJihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMVswXSkpIHx8Ci0gICAgICAgIElTX0JST0FEQ0FTVF9BRERSRVNTKCYocFBhY2tldC0+cDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSkgeworICAgIGlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihwUGFja2V0LT5wODAyMTFIZWFkZXItPnNBMy5hYnlBZGRyMSkpIHsKICAgICAgICAgYk5lZWRBQ0sgPSBGQUxTRTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNDQ2LDkgKzI0MzYsNyBAQAogICAgIHBUeEJ1ZkhlYWQtPndGSUZPQ3RsIHw9IEZJRk9DVExfVE1PRU47CiAgICAgcFR4QnVmSGVhZC0+d1RpbWVTdGFtcCA9IGNwdV90b19sZTE2KERFRkFVTFRfTUdOX0xJRkVUSU1FX1JFU182NHVzKTsKIAotCi0gICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjFbMF0pKSB8fAotICAgICAgICBJU19CUk9BRENBU1RfQUREUkVTUygmKHA4MDIxMUhlYWRlci0+c0EzLmFieUFkZHIxWzBdKSkpIHsKKyAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocDgwMjExSGVhZGVyLT5zQTMuYWJ5QWRkcjEpKSB7CiAgICAgICAgIGJOZWVkQUNLID0gRkFMU0U7CiAgICAgICAgIGlmIChwRGV2aWNlLT5iRW5hYmxlSG9zdFdFUCkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CkBAIC0yNzQxLDE0ICsyNzI5LDcgQEAKICAqIFJldHVybiBWYWx1ZTogTlVMTAogICovCiAKLQotCi1OVFNUQVRVUwotbnNETUFfdHhfcGFja2V0KAotICAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgIHVuc2lnbmVkIGludCAgICB1RE1BSWR4LAotICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYgotICAgICkKK2ludCBuc0RNQV90eF9wYWNrZXQoUFNEZXZpY2UgcERldmljZSwgdW5zaWduZWQgaW50IHVETUFJZHgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAgICAgUFNNZ210T2JqZWN0ICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAgICAgdW5zaWduZWQgaW50IEJ5dGVzVG9Xcml0ZSA9IDAsIHVIZWFkZXJMZW4gPSAwOwpAQCAtMjc3MCw5ICsyNzUxLDYgQEAKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBzdGF0dXM7CiAgICAgV09SRCAgICAgICAgICAgIHdLZWVwUmF0ZSA9IHBEZXZpY2UtPndDdXJyZW50UmF0ZTsKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogcFN0YXRzID0gJnBEZXZpY2UtPnN0YXRzOwotLy8jaWZkZWYgV1BBX1NNX1RyYW5zdGF0dXMKLSAgLy8gIGV4dGVybiBTV1BBUmVzdWx0IHdwYV9SZXN1bHQ7Ci0vLyNlbmRpZgogICAgICBCT09MICAgICAgICAgICAgYlR4ZWFwb2xfa2V5ID0gRkFMU0U7CiAKIApAQCAtMjc4Myw3ICsyNzYxLDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKChQQllURSkoc2tiLT5kYXRhKSkpIHsKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoKFBCWVRFKShza2ItPmRhdGEpKSkgewogICAgICAgICAgICAgdU5vZGVJbmRleCA9IDA7CiAgICAgICAgICAgICBiTm9kZUV4aXN0ID0gVFJVRTsKICAgICAgICAgICAgIGlmIChwTWdtdC0+c05vZGVEQlRhYmxlWzBdLmJQU0VuYWJsZSkgewpAQCAtMjk3NSw3ICsyOTUzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHBEZXZpY2UtPmVPUE1vZGUgPT0gT1BfTU9ERV9BREhPQykgewogICAgICAgICAgICAgLy8gQWRob2MgVHggcmF0ZSBkZWNpZGVkIGZyb20gbm9kZSBEQgotICAgICAgICAgICAgaWYgKElTX01VTFRJQ0FTVF9BRERSRVNTKCYocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHJbMF0pKSkgeworCSAgICBpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocERldmljZS0+c1R4RXRoSGVhZGVyLmFieURzdEFkZHIpKSB7CiAgICAgICAgICAgICAgICAgLy8gTXVsdGljYXN0IHVzZSBoaWdoZXN0IGRhdGEgcmF0ZQogICAgICAgICAgICAgICAgIHBEZXZpY2UtPndDdXJyZW50UmF0ZSA9IHBNZ210LT5zTm9kZURCVGFibGVbMF0ud1R4RGF0YVJhdGU7CiAgICAgICAgICAgICAgICAgLy8gcHJlYW1ibGUgdHlwZQpAQCAtMzA3MSwyOCArMzA0OSwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogCi0jaWYgMAotICAgICAgICAgICAgaWYoKHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPT0gRkFMU0UpICYmCi0JCSgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spfHwocE1nbXQtPmVBdXRoZW5Nb2RlID0gV01BQ19BVVRIX1dQQTJQU0spKSl7Ci0gICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotICAgICAgICAgICAgICAgICAgcFN0YXRzLT50eF9kcm9wcGVkKys7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0JICAgICAgICBlbHNlIGlmIChwVHJhbnNtaXRLZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8icmV0dXJuIG5vIHR4IGtleVxuIik7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgICAgICAgICBwU3RhdHMtPnR4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0jZWxzZQogICAgICAgICAgICAgaWYgKHBUcmFuc21pdEtleSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJyZXR1cm4gbm8gdHgga2V5XG4iKTsKICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogICAgICAgICAgICAgICAgIHBTdGF0cy0+dHhfZHJvcHBlZCsrOwogICAgICAgICAgICAgICAgIHJldHVybiBTVEFUVVNfRkFJTFVSRTsKICAgICAgICAgICAgIH0KLSNlbmRpZgotCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMyNjEsNyArMzIyMyw4IEBACiAgICAgaWYgKHBEZXZpY2UtPndDdXJyZW50UmF0ZSA8PSBSQVRFXzExTSkKICAgICAgICAgYnlQa3RUeXBlID0gUEtfVFlQRV8xMUI7CiAKLSAgICBCeXRlc1RvV3JpdGUgPSB1RGF0YUxlbiArIFVfQ1JDX0xFTjsKKyAgICBCeXRlc1RvV3JpdGUgPSB1RGF0YUxlbiArIEVUSF9GQ1NfTEVOOworCiAgICAgLy8gQ29udmVydCB0aGUgcGFja2V0IHRvIGFuIHVzYiBmcmFtZSBhbmQgY29weSBpbnRvIG91ciBidWZmZXIKICAgICAvLyBhbmQgc2VuZCB0aGUgaXJwLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3J4dHguaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCmluZGV4IGY5MGRlNDIuLmY5OWFjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvcnh0eC5oCkBAIC02ODMsOSArNjgzLDkgQEAKICAgICApOwogCiB2b2lkIHZETUEwX3R4XzgwMjExKFBTRGV2aWNlICBwRGV2aWNlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLU5UU1RBVFVTIG5zRE1BX3R4X3BhY2tldChQU0RldmljZSAgcERldmljZSwKLQkJCSB1bnNpZ25lZCBpbnQgdURNQUlkeCwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBuc0RNQV90eF9wYWNrZXQoUFNEZXZpY2UgcERldmljZSwKKwkJICAgIHVuc2lnbmVkIGludCB1RE1BSWR4LAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBDTURfU1RBVFVTIGNzTWdtdF94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogQ01EX1NUQVRVUyBjc0JlYWNvbl94bWl0KFBTRGV2aWNlIHBEZXZpY2UsIFBTVHhNZ210UGFja2V0IHBQYWNrZXQpOwogQk9PTCBiUmVsYXlQYWNrZXRTZW5kKFBTRGV2aWNlIHBEZXZpY2UsIFBCWVRFIHBieVNrYkRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90ZXRoZXIuaAppbmRleCBkNjM1ODZkLi5iZTg3MDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RldGhlci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdGV0aGVyLmgKQEAgLTM2LDI1ICszNiwxMCBAQAogLy8KIC8vIGNvbnN0YW50cwogLy8KLSNkZWZpbmUgVV9DUkNfTEVOICAgICAgICAgICA0ICAgICAgICAgICAvLwogI2RlZmluZSBVX0VUSEVSX0FERFJfU1RSX0xFTiAoRVRIX0FMRU4gKiAyICsgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFdGhlcm5ldCBhZGRyZXNzIHN0cmluZyBsZW5ndGgKLQotI2RlZmluZSBNSU5fREFUQV9MRU4gICAgICAgIDQ2ICAgICAgICAgIC8vIG1pbiBkYXRhIGxlbmd0aAotI2RlZmluZSBNQVhfREFUQV9MRU4gICAgICAgIDE1MDAgICAgICAgIC8vIG1heCBkYXRhIGxlbmd0aAotCi0jZGVmaW5lIE1JTl9QQUNLRVRfTEVOICAgICAgKE1JTl9EQVRBX0xFTiArIEVUSF9ITEVOKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWluIHRvdGFsIHBhY2tldCBsZW5ndGggKHR4KQotI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAgICAgIChNQVhfREFUQV9MRU4gKyBFVEhfSExFTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxNTE0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHRvdGFsIHBhY2tldCBsZW5ndGggKHR4KQotCi0jZGVmaW5lIE1BWF9MT09LQUhFQURfU0laRSAgTUFYX1BBQ0tFVF9MRU4KLQogI2RlZmluZSBVX01VTFRJX0FERFJfTEVOICAgIDggICAgICAgICAgIC8vIG11bHRpY2FzdCBhZGRyZXNzIGxlbmd0aAogCi0KICNpZmRlZiBfX0JJR19FTkRJQU4KIAogI2RlZmluZSBUWVBFX1BLVF9JUCAgICAgICAgIDB4MDgwMCAgICAgIC8vCkBAIC0xNjgsNyArMTUzLDcgQEAKICAgICBCWVRFICAgIGFieURzdEFkZHJbRVRIX0FMRU5dOwogICAgIEJZVEUgICAgYWJ5U3JjQWRkcltFVEhfQUxFTl07CiAgICAgV09SRCAgICB3VHlwZTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFNFdGhlcm5ldEhlYWRlciwgKlBTRXRoZXJuZXRIZWFkZXI7CiAKIApAQCAtMTc5LDcgKzE2NCw3IEBACiAgICAgQllURSAgICBhYnlEc3RBZGRyW0VUSF9BTEVOXTsKICAgICBCWVRFICAgIGFieVNyY0FkZHJbRVRIX0FMRU5dOwogICAgIFdPUkQgICAgd0xlbjsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFM4MDJfM0hlYWRlciwgKlBTODAyXzNIZWFkZXI7CiAKIC8vCkBAIC0xOTMsMzAgKzE3OCwxMCBAQAogICAgIEJZVEUgICAgYWJ5QWRkcjNbRVRIX0FMRU5dOwogICAgIFdPUkQgICAgd1NlcUN0bDsKICAgICBCWVRFICAgIGFieUFkZHI0W0VUSF9BTEVOXTsKLX1fX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCit9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKIFM4MDJfMTFIZWFkZXIsICpQUzgwMl8xMUhlYWRlcjsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8vIEZyYW1lIHR5cGUgbWFjcm8KLQotI2RlZmluZSBJU19NVUxUSUNBU1RfQUREUkVTUyhwYnlFdGhlckFkZHIpICAgICAgICAgIFwKLSAgICAoKCooUEJZVEUpKHBieUV0aGVyQWRkcikgJiAweDAxKSA9PSAxKQotCi0jZGVmaW5lIElTX0JST0FEQ0FTVF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgXAotICAgICgqKFBEV09SRCkocGJ5RXRoZXJBZGRyKSA9PSAweEZGRkZGRkZGTCkgJiYgICAgIFwKLSAgICAoKihQV09SRCkoKFBCWVRFKShwYnlFdGhlckFkZHIpICsgNCkgPT0gMHhGRkZGKSBcCi0pCi0KLSNkZWZpbmUgSVNfTlVMTF9BRERSRVNTKHBieUV0aGVyQWRkcikgKCAgICAgICAgICAgICBcCi0gICAgKCooUERXT1JEKShwYnlFdGhlckFkZHIpID09IDBMKSAmJiAgICAgICAgICAgICAgXAotICAgICgqKFBXT1JEKSgoUEJZVEUpKHBieUV0aGVyQWRkcikgKyA0KSA9PSAwKSAgICAgIFwKLSkKLQotI2RlZmluZSBJU19FVEhfQUREUkVTU19FUVVBTChwYnlBZGRyMSwgcGJ5QWRkcjIpICggIFwKLSAgICAoKihQRFdPUkQpKHBieUFkZHIxKSA9PSAqKFBEV09SRCkocGJ5QWRkcjIpKSAmJiBcCi0gICAgKCooUFdPUkQpKChQQllURSkocGJ5QWRkcjEpICsgNCkgPT0gICAgICAgICAgICAgXAotICAgICooUFdPUkQpKChQQllURSkocGJ5QWRkcjIpICsgNCkpICAgICAgICAgICAgICAgIFwKLSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBDbGFzc2VzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYwppbmRleCBmODNhZjU5Li5hNmJkNTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3RraXAuYwpAQCAtMTI5LDggKzEyOSw2IEBACiAvL1NUS0lQS2V5TWFuYWdlbWVudCAgc1RLSVBLZXlUYWJsZVtNQVhfVEtJUF9LRVldOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgU3RhdGljIEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdW5zaWduZWQgaW50IHRraXBfc2JveCh1bnNpZ25lZCBpbnQgaW5kZXgpOwotdW5zaWduZWQgaW50IHJvdHIxKHVuc2lnbmVkIGludCBhKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBWYXJpYWJsZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTM5LDcgKzEzNyw3IEBACiAvKiBSZXR1cm5zIGEgMTYgYml0IHZhbHVlIGZyb20gYSA2NEsgZW50cnkgdGFibGUuIFRoZSBUYWJsZSAqLwogLyogaXMgc3ludGhlc2l6ZWQgZnJvbSB0d28gMjU2IGVudHJ5IGJ5dGUgd2lkZSB0YWJsZXMuICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11bnNpZ25lZCBpbnQgdGtpcF9zYm94KHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGtpcF9zYm94KHVuc2lnbmVkIGludCBpbmRleCkKIHsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXhfbG93OwogICAgIHVuc2lnbmVkIGludCBpbmRleF9oaWdoOwpAQCAtMTU1LDcgKzE1Myw3IEBACiB9OwogCiAKLXVuc2lnbmVkIGludCByb3RyMSh1bnNpZ25lZCBpbnQgYSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm90cjEodW5zaWduZWQgaW50IGEpCiB7CiAgICAgdW5zaWduZWQgaW50IGI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdHR5cGUuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdHR5cGUuaAppbmRleCBjMjdmOTg1Li44ZTk0NTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3R0eXBlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni90dHlwZS5oCkBAIC0zMSwyMyArMzEsNiBAQAogCiAvKioqKioqKiBDb21tb24gZGVmaW5pdGlvbnMgYW5kIHR5cGVkZWZzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vLzIwMDctMDExNS0wNTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiBUeEluU2xlZXAKLSNkZWZpbmUgVHhJblNsZWVwCi0jZW5kaWYKLQotLy9EYXZpZFdhbmcKLQotLy8yMDA3LTA4MTQtMDE8QWRkPmJ5IE1pa2VMaXUKLSNpZm5kZWYgU2FmZV9DbG9zZQotI2RlZmluZSBTYWZlX0Nsb3NlCi0jZW5kaWYKLQotLy8yMDA4LTAxMzEtMDI8QWRkPmJ5IE1pa2VMaXUKLSNpZm5kZWYgQWRob2NfU1RBCi0jZGVmaW5lIEFkaG9jX1NUQQotI2VuZGlmCi0KIHR5cGVkZWYgaW50ICAgICAgICAgICAgIEJPT0w7CiAKICNpZiAhZGVmaW5lZChUUlVFKQpAQCAtNTcsMTkgKzQwLDYgQEAKICNkZWZpbmUgRkFMU0UgICAgICAgICAgIDAKICNlbmRpZgogCi0vLzIwMDctMDgwOS0wMTxBZGQ+YnkgTWlrZUxpdQotI2lmbmRlZiAgdXBkYXRlX0Jzc0xpc3QKLSNkZWZpbmUgdXBkYXRlX0Jzc0xpc3QKLSNlbmRpZgotCi0jaWZuZGVmIFdQQV9TTV9UcmFuc3RhdHVzCi0jZGVmaW5lIFdQQV9TTV9UcmFuc3RhdHVzCi0jZW5kaWYKLQotI2lmbmRlZiBDYWxjdV9MaW5rUXVhbAotI2RlZmluZSBDYWxjdV9MaW5rUXVhbAotI2VuZGlmCi0KIC8qKioqKiogU2ltcGxlIHR5cGVkZWZzICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciAgIEJZVEU7ICAgICAgICAgICAvLyAgOC1iaXQKQEAgLTk0LDcgKzY0LDYgQEAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgIERXT1JEX1BUUjsgICAgICAvLyAzMi1iaXQKIAogLy8gYm9vbGVhbiBwb2ludGVyCi10eXBlZGVmIHVuc2lnbmVkIGludCAqICAgUFVJTlQ7CiAKIHR5cGVkZWYgQllURSAqICAgICAgICAgICBQQllURTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYwppbmRleCBmZDIzNTVlLi5hMzI3ODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3VzYnBpcGUuYwpAQCAtMTA3LDEwICsxMDcsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRXhwb3J0IEZ1bmN0aW9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0KLQotTlRTVEFUVVMKLVBJUEVuc0NvbnRyb2xPdXRBc3luKAoraW50IFBJUEVuc0NvbnRyb2xPdXRBc3luKAogICAgICBQU0RldmljZSAgICAgcERldmljZSwKICAgICAgQllURSAgICAgICAgIGJ5UmVxdWVzdCwKICAgICAgV09SRCAgICAgICAgIHdWYWx1ZSwKQEAgLTExOSw4ICsxMTYsNyBAQAogICAgICBQQllURSAgICAgICAgcGJ5QnVmZmVyCiAgICAgKQogewotICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgIG50U3RhdHVzOwotCisJaW50IG50U3RhdHVzOwogCiAgICAgaWYgKE1QX1RFU1RfRkxBRyhwRGV2aWNlLCBmTVBfRElTQ09OTkVDVEVEKSkKICAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwpAQCAtMTU2LDEyICsxNTIsNyBAQAogICAgIHJldHVybiBudFN0YXR1czsKIH0KIAotCi0KLQotCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbE91dCgKK2ludCBQSVBFbnNDb250cm9sT3V0KAogICAgICBQU0RldmljZSAgICAgcERldmljZSwKICAgICAgQllURSAgICAgICAgIGJ5UmVxdWVzdCwKICAgICAgV09SRCAgICAgICAgIHdWYWx1ZSwKQEAgLTE3MCwxMCArMTYxLDkgQEAKICAgICAgUEJZVEUgICAgICAgIHBieUJ1ZmZlcgogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gMDsKKwlpbnQgbnRTdGF0dXMgPSAwOwogICAgIGludCBpaTsKIAotCiAgICAgaWYgKE1QX1RFU1RfRkxBRyhwRGV2aWNlLCBmTVBfRElTQ09OTkVDVEVEKSkKICAgICAgICAgcmV0dXJuIFNUQVRVU19GQUlMVVJFOwogCkBAIC0yMTksMTEgKzIwOSw3IEBACiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCi0KLQotCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbEluKAoraW50IFBJUEVuc0NvbnRyb2xJbigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC0yMzIsNyArMjE4LDcgQEAKICAgICAgICBQQllURSAgIHBieUJ1ZmZlcgogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gMDsKKwlpbnQgbnRTdGF0dXMgPSAwOwogICAgIGludCBpaTsKIAogICAgIGlmIChNUF9URVNUX0ZMQUcocERldmljZSwgZk1QX0RJU0NPTk5FQ1RFRCkpCkBAIC0zNjAsMTMgKzM0Niw5IEBACiAgKiBSZXR1cm4gVmFsdWU6IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTIG9yIHJlc3VsdCBvZiBJb0NhbGxEcml2ZXIKICAqCiAgKi8KLU5UU1RBVFVTCi1QSVBFbnNJbnRlcnJ1cHRSZWFkKAotICAgICBQU0RldmljZSBwRGV2aWNlCi0gICAgKQoraW50IFBJUEVuc0ludGVycnVwdFJlYWQoUFNEZXZpY2UgcERldmljZSkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX0ZBSUxVUkU7Ci0KKyAgICBpbnQgbnRTdGF0dXMgPSBTVEFUVVNfRkFJTFVSRTsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5zX25zU3RhcnRJbnRlcnJ1cHRVc2JSZWFkKClcbiIpOwogCkBAIC0zODEsMjkgKzM2Myw2IEBACiAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSB1cmIsIHdlIHdpbGwgc2VuZCBhCiAgICAgLy8gcmVxdWVzdCB0byB0aGUgVVNCIGRldmljZSBvYmplY3QuCiAgICAgLy8KLSNpZiAwICAgICAgICAgICAgLy9yZXNlcnZlIGludCBVUkIgc3VibWl0Ci0JdXNiX2ZpbGxfaW50X3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+dXNiLAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUocERldmljZS0+dXNiLCAxKSwKLQkJCSAodm9pZCAqKSBwRGV2aWNlLT5pbnRCdWYucERhdGFCdWYsCi0JICAgICAgICAgICAgICAgICBNQVhfSU5URVJSVVBUX1NJWkUsCi0JICAgICAgICAgICAgICAgICBzX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWQsCi0JICAgICAgICAgICAgICAgICBwRGV2aWNlLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+aW50X2ludGVydmFsCi0JICAgICAgICAgICAgICAgICApOwotI2Vsc2UgICAgICAgICAgICAvL3JlcGxhY2UgaW50IFVSQiBzdWJtaXQgYnkgYnVsayB0cmFuc2ZlcgotI2lmbmRlZiBTYWZlX0Nsb3NlCi0JdXNiX2ZpbGxfaW50X3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+dXNiLAotCSAgICAgICAgICAgICAgICAgdXNiX3JjdmludHBpcGUocERldmljZS0+dXNiLCAxKSwKLQkJCSAodm9pZCAqKSBwRGV2aWNlLT5pbnRCdWYucERhdGFCdWYsCi0JICAgICAgICAgICAgICAgICBNQVhfSU5URVJSVVBUX1NJWkUsCi0JICAgICAgICAgICAgICAgICBzX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWQsCi0JICAgICAgICAgICAgICAgICBwRGV2aWNlLAotCSAgICAgICAgICAgICAgICAgcERldmljZS0+aW50X2ludGVydmFsCi0JICAgICAgICAgICAgICAgICApOwotI2Vsc2UKLQogICAgIHBEZXZpY2UtPnBJbnRlcnJ1cHRVUkItPmludGVydmFsID0gcERldmljZS0+aW50X2ludGVydmFsOwogCiB1c2JfZmlsbF9idWxrX3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLApAQCAtNDEzLDggKzM3Miw2IEBACiAJCU1BWF9JTlRFUlJVUFRfU0laRSwKIAkJc19uc0ludGVycnVwdFVzYklvQ29tcGxldGVSZWFkLAogCQlwRGV2aWNlKTsKLSNlbmRpZgotI2VuZGlmCiAKIAludFN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBEZXZpY2UtPnBJbnRlcnJ1cHRVUkIsIEdGUF9BVE9NSUMpOwogCWlmIChudFN0YXR1cyAhPSAwKSB7CkBAIC00NDgsOCArNDA1LDcgQEAKIAogewogICAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlOwotICAgIE5UU1RBVFVTICAgICAgICBudFN0YXR1czsKLQorICAgIGludCBudFN0YXR1czsKIAogICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iLS0tLT5zX25zSW50ZXJydXB0VXNiSW9Db21wbGV0ZVJlYWRcbiIpOwogICAgIC8vCkBAIC00OTUsMTMgKzQ1MSw2IEBACiAKIAogICAgIGlmIChwRGV2aWNlLT5mS2lsbEV2ZW50UG9sbGluZ1RocmVhZCAhPSBUUlVFKSB7Ci0gICAjaWYgMCAgICAgICAgICAgICAgIC8vcmVzZXJ2ZSBpbnQgVVJCIHN1Ym1pdAotCW50U3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAobnRTdGF0dXMgIT0gMCkgewotCSAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIlJlLVN1Ym1pdCBpbnQgVVJCIGZhaWxlZCAlZFxuIiwgbnRTdGF0dXMpOwotICAgIH0KLSAgICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVwbGFjZSBpbnQgVVJCIHN1Ym1pdCBieSBidWxrIHRyYW5zZmVyCi0gICAgI2lmZGVmIFNhZmVfQ2xvc2UKICAgICAgICB1c2JfZmlsbF9idWxrX3VyYihwRGV2aWNlLT5wSW50ZXJydXB0VVJCLAogCQkgICAgICBwRGV2aWNlLT51c2IsCiAJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwRGV2aWNlLT51c2IsIDEpLApAQCAtNTE0LDExICs0NjMsNiBAQAogCWlmIChudFN0YXR1cyAhPSAwKSB7CiAJICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iU3VibWl0IGludCBVUkIgZmFpbGVkICVkXG4iLCBudFN0YXR1cyk7CiAgICAgICAgICAgIH0KLQotICAgICNlbHNlCi0gICAgICAgIHRhc2tsZXRfc2NoZWR1bGUoJnBEZXZpY2UtPkV2ZW50V29ya0l0ZW0pOwotICAgICNlbmRpZgotI2VuZGlmCiAgICAgfQogICAgIC8vCiAgICAgLy8gV2UgcmV0dXJuIFNUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQgc28gdGhhdCB0aGUgY29tcGxldGlvbgpAQCAtNTQwLDEzICs0ODQsOSBAQAogICogUmV0dXJuIFZhbHVlOiBTVEFUVVNfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBvciByZXN1bHQgb2YgSW9DYWxsRHJpdmVyCiAgKgogICovCi1OVFNUQVRVUwotUElQRW5zQnVsa0luVXNiUmVhZCgKLSAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgUFJDQiAgICAgcFJDQgotICAgICkKK2ludCBQSVBFbnNCdWxrSW5Vc2JSZWFkKFBTRGV2aWNlIHBEZXZpY2UsIFBSQ0IgcFJDQikKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIG50U3RhdHVzPSAwOworCWludCBudFN0YXR1cyA9IDA7CiAgICAgc3RydWN0IHVyYiAgICAgICAgICAqcFVyYjsKIAogCkBAIC02MTYsOSArNTU2LDcgQEAKICAgICB1bnNpZ25lZCBsb25nICAgYnl0ZXNSZWFkOwogICAgIEJPT0wgICAgYkluZGljYXRlUmVjZWl2ZSA9IEZBTFNFOwogICAgIEJPT0wgICAgYlJlQWxsb2NTa2IgPSBGQUxTRTsKLSAgICBOVFNUQVRVUyAgICBzdGF0dXM7Ci0KLQorICAgIGludCBzdGF0dXM7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIi0tLS0+c19uc0J1bGtJblVzYklvQ29tcGxldGVSZWFkXG4iKTsKICAgICBzdGF0dXMgPSB1cmItPnN0YXR1czsKQEAgLTYyOCw5ICs1NjYsNyBAQAogICAgICAgICBwRGV2aWNlLT51bEJ1bGtJbkVycm9yKys7CiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iQlVMSyBJbiBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CiAKLSAgICAgCSNpZmRlZiBDYWxjdV9MaW5rUXVhbAogICAgICAgICAgICBwRGV2aWNlLT5zY1N0YXRpc3RpYy5SeEZjc0VyckNudCArKzsKLQkjZW5kaWYKIC8vdG9kby4uLnh4eHh4eAogLy8gICAgICAgIGlmIChzdGF0dXMgPT0gVVNCRF9TVEFUVVNfQ1JDKSB7CiAvLyAgICAgICAgICAgIHBEZXZpY2UtPnVsQnVsa0luQ29udENSQ0Vycm9yKys7CkBAIC02NDQsOSArNTgwLDcgQEAKICAgICAgICAgcERldmljZS0+dWxCdWxrSW5Db250Q1JDRXJyb3IgPSAwOwogICAgICAgICBwRGV2aWNlLT51bEJ1bGtJbkJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKLQkjaWZkZWYgQ2FsY3VfTGlua1F1YWwKICAgICAgICAgICAgcERldmljZS0+c2NTdGF0aXN0aWMuUnhPa0NudCArKzsKLQkjZW5kaWYKICAgICB9CiAKIApAQCAtNjkwLDcgKzYyNCw3IEBACiAgICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwQ29udGV4dAogICAgICkKIHsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBpbnQgc3RhdHVzOwogICAgIHN0cnVjdCB1cmIgICAgICAgICAgKnBVcmI7CiAKIApAQCAtNzcxLDcgKzcwNSw3IEBACiAgICAgKQogewogICAgIFBTRGV2aWNlICAgICAgICAgICAgcERldmljZTsKLSAgICBOVFNUQVRVUyAgICAgICAgICAgIHN0YXR1czsKKyAgICBpbnQgc3RhdHVzOwogICAgIENPTlRFWFRfVFlQRSAgICAgICAgQ29udGV4dFR5cGU7CiAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIHVsQnVmTGVuOwogICAgIFBVU0JfU0VORF9DT05URVhUICAgcENvbnRleHQ7CkBAIC04MDMsMTAgKzczNyw3IEBACiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8iV3JpdGUgJWQgYnl0ZXNcbiIsKGludCl1bEJ1Zkxlbik7CiAgICAgICAgIHBEZXZpY2UtPnVsQnVsa091dEJ5dGVzV3JpdGUgKz0gdWxCdWZMZW47CiAgICAgICAgIHBEZXZpY2UtPnVsQnVsa091dENvbnRDUkNFcnJvciA9IDA7Ci0JLy8yMDA3LTAxMTUtMDY8QWRkPmJ5IE1pa2VMaXUKLSAgICAgICAgICAgI2lmZGVmIFR4SW5TbGVlcAotICAgICAgICAgICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7Ci0gICAgICAgICAgICNlbmRpZgorCXBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7CiAKICAgICB9IGVsc2UgewogICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIkJVTEsgT3V0IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvdXNicGlwZS5oIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKaW5kZXggZjg1MmIzOS4uYjM2NzM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni91c2JwaXBlLmgKQEAgLTQxLDggKzQxLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotTlRTVEFUVVMKLVBJUEVuc0NvbnRyb2xPdXQoCitpbnQgUElQRW5zQ29udHJvbE91dCgKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC01MSwxMCArNTAsNyBAQAogICAgICBQQllURSAgICAgICAgcGJ5QnVmZmVyCiAgICAgKTsKIAotCi0KLU5UU1RBVFVTCi1QSVBFbnNDb250cm9sT3V0QXN5bigKK2ludCBQSVBFbnNDb250cm9sT3V0QXN5bigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC02Myw4ICs1OSw3IEBACiAgICAgIFBCWVRFICAgICAgICBwYnlCdWZmZXIKICAgICApOwogCi1OVFNUQVRVUwotUElQRW5zQ29udHJvbEluKAoraW50IFBJUEVuc0NvbnRyb2xJbigKICAgICAgUFNEZXZpY2UgICAgIHBEZXZpY2UsCiAgICAgIEJZVEUgICAgICAgICBieVJlcXVlc3QsCiAgICAgIFdPUkQgICAgICAgICB3VmFsdWUsCkBAIC03MywyNCArNjgsOCBAQAogICAgICAgIFBCWVRFICAgcGJ5QnVmZmVyCiAgICAgKTsKIAotCi0KLQotTlRTVEFUVVMKLVBJUEVuc0ludGVycnVwdFJlYWQoCi0gICAgIFBTRGV2aWNlIHBEZXZpY2UKLSAgICApOwotCi1OVFNUQVRVUwotUElQRW5zQnVsa0luVXNiUmVhZCgKLSAgICAgUFNEZXZpY2UgcERldmljZSwKLSAgICAgUFJDQiAgICAgcFJDQgotICAgICk7Ci0KLU5UU1RBVFVTCi1QSVBFbnNTZW5kQnVsa091dCgKLSAgICAgIFBTRGV2aWNlIHBEZXZpY2UsCi0gICAgICBQVVNCX1NFTkRfQ09OVEVYVCBwQ29udGV4dAotICAgICk7CitpbnQgUElQRW5zSW50ZXJydXB0UmVhZChQU0RldmljZSBwRGV2aWNlKTsKK2ludCBQSVBFbnNCdWxrSW5Vc2JSZWFkKFBTRGV2aWNlIHBEZXZpY2UsIFBSQ0IgcFJDQik7CitpbnQgUElQRW5zU2VuZEJ1bGtPdXQoUFNEZXZpY2UgcERldmljZSwgUFVTQl9TRU5EX0NPTlRFWFQgcENvbnRleHQpOwogCiAjZW5kaWYgLyogX19VU0JQSVBFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwppbmRleCA3MmUyMWI2Li42ODY3NDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuYwpAQCAtNTY1LDExICs1NjUsOSBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotLy8yMDA4MDEzMS0wMyw8QWRkPiBieSBNaWtlIExpdQotCSNpZmRlZiBBZGhvY19TVEEKICAgICAgICAgICAgIG1lbWNweShwTWdtdC0+YWJ5QWRIb2NTU0lELHBNZ210LT5hYnlEZXNpcmVTU0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQV0xBTl9JRV9TU0lEKXBNZ210LT5hYnlEZXNpcmVTU0lEKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwotCSNlbmRpZgorCiAgICAgICAgICAgICBwSXRlbVNTSUQgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5RGVzaXJlU1NJRDsKICAgICAgICAgICAgIHBJdGVtU1NJREN1cnIgPSAoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5Q3VyclNTSUQ7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIiBjbWQ6IGRlc2lyZSBzc2lkID0gJXNcbiIsIHBJdGVtU1NJRC0+YWJ5U1NJRCk7CkBAIC03MTYsMTggKzcxNCw2IEBACiAJICAgICAgIHJldHVybjsKIAkgICB9CiAJICAgICAgICAgIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7Ci0JCSAjaWYgMAotICAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYocERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9PSBUUlVFKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgCXVuaW9uIGl3cmVxX2RhdGEgIHdycXU7Ci0gICAgICAgICAgICAgICAgICAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2YgKHdycXUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLSAgICAgICAgICAgICAgICAgIAlwcmludGsoIndpcmVsZXNzX3NlbmRfZXZlbnQtLS0+U0lPQ0dJV0FQKGRpc2Fzc29jaWF0ZWQ6QVVUSEVOVElDQVRFX1dBSVRfdGltZW91dClcbiIpOwotICAgICAgICAgICAgICAgICAgCXdpcmVsZXNzX3NlbmRfZXZlbnQocERldmljZS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAjZW5kaWYKLQkgICAgICAgICAjZW5kaWYKIAogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NTQsOCArNzQwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShwRGV2aWNlLT5kZXYpOwogICAgICAgICAgICAgICAgIH0KIAotCS8vMjAwNy0wMTE1LTA3PEFkZD5ieSBNaWtlTGl1Ci0JICAgICAjaWZkZWYgVHhJblNsZWVwCiAJCSBpZihwRGV2aWNlLT5Jc1R4RGF0YVRyaWdnZXIgIT0gRkFMU0UpICAgeyAgICAvL1R4RGF0YVRpbWVyIGlzIG5vdCB0cmlnZ2VyZWQgYXQgdGhlIGZpcnN0IHRpbWUKICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50aygiUmUtaW5pdGlhbCBUeERhdGFUaW1lcioqKipcbiIpOwogCQkgICAgZGVsX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwpAQCAtNzcxLDcgKzc1NSw2IEBACiAJCSB9CiAJCXBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IFRSVUU7CiAgICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwotICAgICAgICAgICAgICNlbmRpZgogCiAgICAgICAgICAgICB9CiAJICAgZWxzZSBpZihwTWdtdC0+ZUN1cnJTdGF0ZSA8IFdNQUNfU1RBVEVfQVNTT0NQRU5ESU5HKSB7CkBAIC03ODUsMTggKzc2OCw2IEBACiAJICAgICAgIHJldHVybjsKIAkgICB9CiAJICAgICAgICAgIHBEZXZpY2UtPmJ5TGlua1dhaXRDb3VudCA9IDA7Ci0JCSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfRFJJVkVSX1dFWFRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAvLyBpZihwRGV2aWNlLT5iV1BBU3VwcFdleHRFbmFibGVkID09IFRSVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAJdW5pb24gaXdyZXFfZGF0YSAgd3JxdTsKLSAgICAgICAgICAgICAgICAgIAltZW1zZXQoJndycXUsIDAsIHNpemVvZiAod3JxdSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICB3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgICAgICAgICAgICAgICAgCXByaW50aygid2lyZWxlc3Nfc2VuZF9ldmVudC0tLT5TSU9DR0lXQVAoZGlzYXNzb2NpYXRlZDpBU1NPQ0lBVEVfV0FJVF90aW1lb3V0KVxuIik7Ci0gICAgICAgICAgICAgICAgICAJd2lyZWxlc3Nfc2VuZF9ldmVudChwRGV2aWNlLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICNlbmRpZgotCQkjZW5kaWYKIAogICAgICAgICAgICAgc19iQ29tbWFuZENvbXBsZXRlKHBEZXZpY2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05MDcsNyArODc4LDcgQEAKICAgICAgICAvLyAgICAgICAgIENBUkRiUmFkaW9Qb3dlck9mZihwRGV2aWNlKTsKICAgICAgICAvLzIwMDgtMDktMDk8QWRkPiBCWSBNaWtlOkhvdCBLZXkgZm9yIFJhZGlvIE9uL09mZgogICAgICAgIHsKLSAgICAgICAgTlRTVEFUVVMgICAgICAgIG50U3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisJICAgICAgIGludCBudFN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogICAgICAgICBCWVRFICAgICAgICAgICAgYnlUbXA7CiAKICAgICAgICAgbnRTdGF0dXMgPSBDT05UUk9MbnNSZXF1ZXN0SW4ocERldmljZSwKQEAgLTEzMDAsOCArMTI3MSw2IEBACiAgICAgcERldmljZS0+YkNtZENsZWFyID0gRkFMU0U7CiB9CiAKLS8vMjAwNy0wMTE1LTA4PEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiB2b2lkIEJTU3ZTZWNvbmRUeERhdGEodm9pZCAqaERldmljZUNvbnRleHQpCiB7CiAgIFBTRGV2aWNlICAgICAgICBwRGV2aWNlID0gKFBTRGV2aWNlKWhEZXZpY2VDb250ZXh0OwpAQCAtMTMyMCwxMiArMTI4OSw4IEBACiAKICAgc3Bpbl9sb2NrX2lycSgmcERldmljZS0+bG9jayk7CiAgIC8vaXMgd2FwX3N1cHBsaWNhbnQgcnVubmluZyBzdWNjZXNzZnVsIE9SIG9ubHkgb3BlbiAmJiBzaGFyZWtleSBtb2RlIQotICAjaWYgMQogICBpZigoKHBEZXZpY2UtPmJMaW5rUGFzcyA9PVRSVUUpJiYocE1nbXQtPmVBdXRoZW5Nb2RlIDwgV01BQ19BVVRIX1dQQSkpIHx8ICAvL29wZW4gJiYgc2hhcmVrZXkgbGlua2luZwogICAgICAgKHBEZXZpY2UtPmZXUEFfQXV0aGVuZWQgPT0gVFJVRSkpIHsgICAvL3dwYSBsaW5raW5nCi0gI2Vsc2UKLSAgaWYocERldmljZS0+YkxpbmtQYXNzID09VFJVRSkgewotICNlbmRpZgogICAgICAgICAvLyAgIHByaW50aygibWlrZTolcy0tPkluU2xlZXAgVHggRGF0YSBQcm9jZWR1cmVcbiIsX19GVU5DVElPTl9fKTsKIAkgIHBEZXZpY2UtPmZUeERhdGFJblNsZWVwID0gVFJVRTsKIAkgIFBTYlNlbmROdWxsUGFja2V0KHBEZXZpY2UpOyAgICAgIC8vc2VuZCBudWxsIHBhY2tldApAQCAtMTMzNyw1ICsxMzAyLDMgQEAKICAgYWRkX3RpbWVyKCZwRGV2aWNlLT5zVGltZXJUeERhdGEpOwogICByZXR1cm47CiB9Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93Y21kLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaAppbmRleCAwOWM0NDExLi5kMjRhNzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djbWQuaApAQCAtMTI4LDkgKzEyOCw2IEBACiAgICAgKTsKICovCiAKLS8vMjAwNy0wMTE1LTA5PEFkZD5ieSBNaWtlTGl1Ci0jaWZkZWYgVHhJblNsZWVwCiB2b2lkIEJTU3ZTZWNvbmRUeERhdGEodm9pZCAqaERldmljZUNvbnRleHQpOwotI2VuZGlmCiAKICNlbmRpZiAvKiBfX1dDTURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3djdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCmluZGV4IDg1N2NlMGIuLmMyMzFhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd2N0bC5jCkBAIC03OSw3ICs3OSw4IEBACiAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IERVUExJQ0FURV9SWF9DQUNIRV9MRU5HVEg7IGlpKyspIHsKICAgICAgICAgICAgIHBDYWNoZUVudHJ5ID0gJihwQ2FjaGUtPmFzQ2FjaGVFbnRyeVt1SW5kZXhdKTsKICAgICAgICAgICAgIGlmICgocENhY2hlRW50cnktPndGbVNlcXVlbmNlID09IHBNQUNIZWFkZXItPndTZXFDdGwpICYmCi0gICAgICAgICAgICAgICAgKElTX0VUSF9BRERSRVNTX0VRVUFMICgmKHBDYWNoZUVudHJ5LT5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkgJiYKKwkJKCFjb21wYXJlX2V0aGVyX2FkZHIoJihwQ2FjaGVFbnRyeS0+YWJ5QWRkcjJbMF0pLAorCQkJCSAgICAgJihwTUFDSGVhZGVyLT5hYnlBZGRyMlswXSkpKSAmJgogICAgICAgICAgICAgICAgIChMT0JZVEUocENhY2hlRW50cnktPndGcmFtZUN0bCkgPT0gTE9CWVRFKHBNQUNIZWFkZXItPndGcmFtZUN0bCkpCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgLyogRHVwbGljYXRlIG1hdGNoICovCkBAIC0xMTEsMjIgKzExMiwyMSBAQAogICogUmV0dXJuIFZhbHVlOiBpbmRleCBudW1iZXIgaW4gRGVmcmFnbWVudCBEYXRhYmFzZQogICoKICAqLworCiB1bnNpZ25lZCBpbnQgV0NUTHVTZWFyY2hERkNCKFBTRGV2aWNlIHBEZXZpY2UsIFBTODAyXzExSGVhZGVyIHBNQUNIZWFkZXIpCiB7CiAJdW5zaWduZWQgaW50IGlpOwogCi0gICAgZm9yKGlpPTA7aWk8cERldmljZS0+Y2JERkNCO2lpKyspIHsKLSAgICAgICAgaWYgKChwRGV2aWNlLT5zUnhERkNCW2lpXS5iSW5Vc2UgPT0gVFJVRSkgJiYKLSAgICAgICAgICAgIChJU19FVEhfQUREUkVTU19FUVVBTCAoJihwRGV2aWNlLT5zUnhERkNCW2lpXS5hYnlBZGRyMlswXSksICYocE1BQ0hlYWRlci0+YWJ5QWRkcjJbMF0pKSkKLSAgICAgICAgICAgICkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIHJldHVybihpaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuKHBEZXZpY2UtPmNiREZDQik7CisJZm9yIChpaSA9IDA7IGlpIDwgcERldmljZS0+Y2JERkNCOyBpaSsrKSB7CisJCWlmICgocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IFRSVUUpICYmCisJCSAgICAoIWNvbXBhcmVfZXRoZXJfYWRkcigmKHBEZXZpY2UtPnNSeERGQ0JbaWldLmFieUFkZHIyWzBdKSwKKwkJCQkJICAmKHBNQUNIZWFkZXItPmFieUFkZHIyWzBdKSkpKSB7CisJCQlyZXR1cm4gaWk7CisJCX0KKwl9CisJcmV0dXJuIHBEZXZpY2UtPmNiREZDQjsKIH0KIAotCiAvKgogICogRGVzY3JpcHRpb246CiAgKiAgICAgIEluc2VydCByZWNlaXZlZCBmcmFnbWVudCBwYWNrZXQgaW4gRGVmcmFnbWVudCBEYXRhYmFzZQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKICAgICBpZiAocERldmljZS0+Y2JGcmVlREZDQiA9PSAwKQogICAgICAgICByZXR1cm4ocERldmljZS0+Y2JERkNCKTsKLSAgICBmb3IoaWk9MDtpaTxwRGV2aWNlLT5jYkRGQ0I7aWkrKykgeworICAgIGZvciAoaWkgPSAwOyBpaSA8IHBEZXZpY2UtPmNiREZDQjsgaWkrKykgewogICAgICAgICBpZiAocERldmljZS0+c1J4REZDQltpaV0uYkluVXNlID09IEZBTFNFKSB7CiAgICAgICAgICAgICBwRGV2aWNlLT5jYkZyZWVERkNCLS07CiAgICAgICAgICAgICBwRGV2aWNlLT5zUnhERkNCW2lpXS51TGlmZXRpbWUgPSBwRGV2aWNlLT5kd01heFJlY2VpdmVMaWZldGltZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKaW5kZXggOTNjMTVmMC4uZTRlY2E5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93bWdyLmMKQEAgLTM1Myw5ICszNTMsOSBAQAogICAgIHBNZ210LT5wYnlQU1BhY2tldFBvb2wgPSAmcE1nbXQtPmJ5UFNQYWNrZXRQb29sWzBdOwogICAgIHBNZ210LT5wYnlNZ210UGFja2V0UG9vbCA9ICZwTWdtdC0+YnlNZ210UGFja2V0UG9vbFswXTsKICAgICBwTWdtdC0+dUN1cnJDaGFubmVsID0gcERldmljZS0+dUNoYW5uZWw7Ci0gICAgZm9yKGlpPTA7aWk8V0xBTl9CU1NJRF9MRU47aWkrKykgewotICAgICAgICBwTWdtdC0+YWJ5RGVzaXJlQlNTSURbaWldID0gMHhGRjsKLSAgICB9CisgICAgZm9yIChpaSA9IDA7IGlpIDwgV0xBTl9CU1NJRF9MRU47IGlpKyspCisJcE1nbXQtPmFieURlc2lyZUJTU0lEW2lpXSA9IDB4RkY7CisKICAgICBwTWdtdC0+c0Fzc29jSW5mby5Bc3NvY0luZm8uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKICAgICAvL21lbXNldChwTWdtdC0+YWJ5RGVzaXJlU1NJRCwgMCwgV0xBTl9JRUhEUl9MRU4gKyBXTEFOX1NTSURfTUFYTEVOICsxKTsKICAgICBwTWdtdC0+YnlDU1NQSyA9IEtFWV9DVExfTk9ORTsKQEAgLTM3Myw4ICszNzMsNiBAQAogICAgIHBEZXZpY2UtPnNUaW1lckNvbW1hbmQuZnVuY3Rpb24gPSAoVGltZXJGdW5jdGlvbil2UnVuQ29tbWFuZDsKICAgICBwRGV2aWNlLT5zVGltZXJDb21tYW5kLmV4cGlyZXMgPSBSVU5fQVQoSFopOwogCi0vLzIwMDctMDExNS0xMDxBZGQ+YnkgTWlrZUxpdQotICAgI2lmZGVmIFR4SW5TbGVlcAogICAgIGluaXRfdGltZXIoJnBEZXZpY2UtPnNUaW1lclR4RGF0YSk7CiAgICAgcERldmljZS0+c1RpbWVyVHhEYXRhLmRhdGEgPSAodW5zaWduZWQgbG9uZylwRGV2aWNlOwogICAgIHBEZXZpY2UtPnNUaW1lclR4RGF0YS5mdW5jdGlvbiA9IChUaW1lckZ1bmN0aW9uKUJTU3ZTZWNvbmRUeERhdGE7CkBAIC0zODIsNyArMzgwLDYgQEAKICAgICBwRGV2aWNlLT5mVHhEYXRhSW5TbGVlcCA9IEZBTFNFOwogICAgIHBEZXZpY2UtPklzVHhEYXRhVHJpZ2dlciA9IEZBTFNFOwogICAgIHBEZXZpY2UtPm5UeERhdGFUaW1lQ291dCA9IDA7Ci0gICAjZW5kaWYKIAogICAgIHBEZXZpY2UtPmNiRnJlZUNtZFF1ZXVlID0gQ01EX1FfU0laRTsKICAgICBwRGV2aWNlLT51Q21kRGVxdWV1ZUlkeCA9IDA7CkBAIC0xMDU2LDcgKzEwNTMsNiBAQAogCiAgICAgfQogCi0jaWYgMQogI2lmZGVmIFdQQV9TVVBQTElDQU5UX0RSSVZFUl9XRVhUX1NVUFBPUlQKIC8vbmVlZCBjbGVhciBmbGFncyByZWxhdGVkIHRvIE5ldHdvcmttYW5hZ2VyCiAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDAgPSBGQUxTRTsKQEAgLTEwNjUsNyArMTA2MSw2IEBACiAgICAgICAgICAgICAgIHBEZXZpY2UtPmJ3ZXh0c3RlcDMgPSBGQUxTRTsKICAgICAgICAgICAgICAgcERldmljZS0+YldQQVN1cHBXZXh0RW5hYmxlZCA9IEZBTFNFOwogI2VuZGlmCi0jZW5kaWYKIAogaWYocE1nbXQtPmVDdXJyU3RhdGUgPT0gV01BQ19TVEFURV9BU1NPQykKICAgICAgIHRpbWVyX2V4cGlyZShwRGV2aWNlLT5zVGltZXJDb21tYW5kLCAwKTsKQEAgLTE3MDUsNyArMTcwMCw4IEBACiAJICAgcERldmljZS0+ZldQQV9BdXRoZW5lZCA9IEZBTFNFOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfTk9USUNFLCBLRVJOX0lORk8gICJBUCBkZWF1dGhlZCBtZSwgcmVhc29uPSVkLlxuIiwgY3B1X3RvX2xlMTYoKCooc0ZyYW1lLnB3UmVhc29uKSkpKTsKICAgICAgICAgICAgIC8vIFRPRE86IHVwZGF0ZSBCU1MgbGlzdCBmb3Igc3BlY2lmaWMgQlNTSUQgaWYgcHJlLWF1dGhlbnRpY2F0aW9uIGNhc2UKLSAgICAgICAgICAgIGlmIChJU19FVEhfQUREUkVTU19FUVVBTChzRnJhbWUucEhkci0+c0EzLmFieUFkZHIzLCBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgeworCSAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihzRnJhbWUucEhkci0+c0EzLmFieUFkZHIzLAorCQkJCSAgICBwTWdtdC0+YWJ5Q3VyckJTU0lEKSkgewogICAgICAgICAgICAgICAgIGlmIChwTWdtdC0+ZUN1cnJTdGF0ZSA+PSBXTUFDX1NUQVRFX0FVVEhQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICAgICAgIHBNZ210LT5zTm9kZURCVGFibGVbMF0uYkFjdGl2ZSA9IEZBTFNFOwogICAgICAgICAgICAgICAgICAgICBwTWdtdC0+ZUN1cnJNb2RlID0gV01BQ19NT0RFX1NUQU5EQlk7CkBAIC0yNDcxLDExICsyNDY3LDggQEAKICAgICBwRGV2aWNlLT51Q3VyclJTU0kgPSAwOwogICAgIHBEZXZpY2UtPmJ5Q3VyclNRID0gMDsKIAotLy8yMDA4MDEzMS0wNCw8QWRkPiBieSBNaWtlIExpdQotI2lmZGVmIEFkaG9jX1NUQQogICAgIG1lbWNweShwTWdtdC0+YWJ5RGVzaXJlU1NJRCxwTWdtdC0+YWJ5QWRIb2NTU0lELAogICAgICAgICAgICAgICAgICAgICAgICgoUFdMQU5fSUVfU1NJRClwTWdtdC0+YWJ5QWRIb2NTU0lEKS0+bGVuICsgV0xBTl9JRUhEUl9MRU4pOwotI2VuZGlmCiAKICAgICBtZW1zZXQocE1nbXQtPmFieUN1cnJTU0lELCAwLCBXTEFOX0lFSERSX0xFTiArIFdMQU5fU1NJRF9NQVhMRU4gKyAxKTsKICAgICBtZW1jcHkocE1nbXQtPmFieUN1cnJTU0lELApAQCAtMzA5OSwxMiArMzA5Miw2IEBACiAgIFBTTWdtdE9iamVjdCAgcE1nbXQgPSAmKHBEZXZpY2UtPnNNZ210T2JqKTsKICAgLyogdW5zaWduZWQgaW50IGlpLCB1U2FtZUJzc2lkTnVtPTA7ICovCiAKLSAgICAgICAgLy8gIGZvciAoaWkgPSAwOyBpaSA8IE1BWF9CU1NfTlVNOyBpaSsrKSB7Ci0gICAgICAgICAgLy8gICBpZiAocE1nbXQtPnNCU1NMaXN0W2lpXS5iQWN0aXZlICYmCi0gICAgICAgICAgICAvLyAgICAgIElTX0VUSF9BRERSRVNTX0VRVUFMKHBNZ210LT5zQlNTTGlzdFtpaV0uYWJ5QlNTSUQsIHBDdXJyLT5hYnlCU1NJRCkpIHsKLSAgICAgICAgICAgICAvLyAgICAgICB1U2FtZUJzc2lkTnVtKys7Ci0gICAgICAgICAgICAgICAvLyAgIH0KLSAgICAgICAgICAgLy8gfQogICAvLyAgIGlmKCB1U2FtZUJzc2lkTnVtPj0yKSB7CSAvL3dlIG9ubHkgY2hlY2sgQVAgaW4gaGlkZGVuIHNzc2lkICBtb2RlCiAgICAgICAgIGlmICgocE1nbXQtPmVBdXRoZW5Nb2RlID09IFdNQUNfQVVUSF9XUEFQU0spIHx8ICAgICAgICAgICAvL25ldHdvcmttYW5hZ2VyIDAuNy4wIGRvZXMgbm90IGdpdmUgdGhlIHBhaXJ3aXNlLWtleSBzZWxzZWN0aW9uLAogICAgICAgICAgICAgIChwTWdtdC0+ZUF1dGhlbk1vZGUgPT0gV01BQ19BVVRIX1dQQTJQU0spKSB7ICAgICAgICAgLy8gc28gd2UgbmVlZCByZS1zZWxzZWN0IGl0IGFjY29yZGluZyB0byByZWFsIHBhaXJ3aXNlLWtleSBpbmZvLgpAQCAtNDc5NSwyMSArNDc4MiwyMSBAQAogICAgICAgICAgICAgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBjaGVjayBQYWlyd2lzZSBLZXkgQ2lwaGVyCi0gICAgICAgIGZvcihpPTA7aTxwQlNTTm9kZS0+d0NTU1BLQ291bnQ7aSsrKSB7Ci0gICAgICAgICAgICBpZiAoKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQNDApIHx8Ci0gICAgICAgICAgICAgICAgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQMTA0KSkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYXMgZGVmaW5lZCA4MDIuMTFpCi0gICAgICAgICAgICAgICAgYnlDaXBoZXJNYXNrIHw9IDB4MDE7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfVEtJUCkgewotICAgICAgICAgICAgICAgIGJ5Q2lwaGVyTWFzayB8PSAweDAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5Q1NTUEtbaV0gPT0gV0xBTl8xMWlfQ1NTX0NDTVApIHsKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgfD0gMHgwNDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19VU0VfR1JPVVApIHsKLSAgICAgICAgICAgICAgICAvLyB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgPSAwOwotICAgICAgICAgICAgICAgIGkgPSBwQlNTTm9kZS0+d0NTU1BLQ291bnQ7Ci0gICAgICAgICAgICB9CisJLyogY2hlY2sgUGFpcndpc2UgS2V5IENpcGhlciAqLworCWZvciAoaSA9IDA7IGkgPCBwQlNTTm9kZS0+d0NTU1BLQ291bnQ7IGkrKykgeworCQlpZiAoKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfV0VQNDApIHx8CisJCSAgICAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19XRVAxMDQpKSB7CisJCQkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGFzIGRlZmluZWQgODAyLjExaSAqLworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDE7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieUNTU1BLW2ldID09IFdMQU5fMTFpX0NTU19US0lQKSB7CisJCQlieUNpcGhlck1hc2sgfD0gMHgwMjsKKwkJfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5Q1NTUEtbaV0gPT0gV0xBTl8xMWlfQ1NTX0NDTVApIHsKKwkJCWJ5Q2lwaGVyTWFzayB8PSAweDA0OworCQl9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlDU1NQS1tpXSA9PSBXTEFOXzExaV9DU1NfVVNFX0dST1VQKSB7CisJCQkvKiB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMgKi8KKwkJCWJ5Q2lwaGVyTWFzayA9IDA7CisJCQlpID0gcEJTU05vZGUtPndDU1NQS0NvdW50OworCQl9CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSBpZiAoKFdMQU5fR0VUX0NBUF9JTkZPX1BSSVZBQ1kocEJTU05vZGUtPndDYXBJbmZvKSAhPSAwKSAmJgpAQCAtNDgyOCwxNyArNDgxNSwxNyBAQAogICAgICAgICAgICAgYnlNdWx0aWNhc3RDaXBoZXIgPSBLRVlfQ1RMX0lOVkFMSUQ7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBjaGVjayBQYWlyd2lzZSBLZXkgQ2lwaGVyCi0gICAgICAgIGZvcihpPTA7aTxwQlNTTm9kZS0+d1BLQ291bnQ7aSsrKSB7Ci0gICAgICAgICAgICBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfVEtJUCkgewotICAgICAgICAgICAgICAgIGJ5Q2lwaGVyTWFzayB8PSAweDAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwQlNTTm9kZS0+YWJ5UEtUeXBlW2ldID09IFdQQV9BRVNDQ01QKSB7Ci0gICAgICAgICAgICAgICAgYnlDaXBoZXJNYXNrIHw9IDB4MDQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBCU1NOb2RlLT5hYnlQS1R5cGVbaV0gPT0gV1BBX05PTkUpIHsKLSAgICAgICAgICAgICAgICAvLyB1c2UgZ3JvdXAga2V5IG9ubHkgaWdub3JlIGFsbCBvdGhlcnMKLSAgICAgICAgICAgICAgICBieUNpcGhlck1hc2sgPSAwOwotICAgICAgICAgICAgICAgIGkgPSBwQlNTTm9kZS0+d1BLQ291bnQ7Ci0gICAgICAgICAgICB9CisJLyogY2hlY2sgUGFpcndpc2UgS2V5IENpcGhlciAqLworCWZvciAoaSA9IDA7IGkgPCBwQlNTTm9kZS0+d1BLQ291bnQ7IGkrKykgeworCQlpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfVEtJUCkgeworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDI7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfQUVTQ0NNUCkgeworCQkJYnlDaXBoZXJNYXNrIHw9IDB4MDQ7CisJCX0gZWxzZSBpZiAocEJTU05vZGUtPmFieVBLVHlwZVtpXSA9PSBXUEFfTk9ORSkgeworCQkJLyogdXNlIGdyb3VwIGtleSBvbmx5IGlnbm9yZSBhbGwgb3RoZXJzICovCisJCQlieUNpcGhlck1hc2sgPSAwOworCQkJaSA9IHBCU1NOb2RlLT53UEtDb3VudDsKKwkJfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dtZ3IuaCBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCmluZGV4IDFlNWI5MTYuLjY4Mzg0MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd21nci5oCkBAIC04Miw3ICs4Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFeHBvcnQgVHlwZXMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvL21pa2UgZGVmaW5lOiBtYWtlIHRpbWVyICB0byBleHBpcmUgYWZ0ZXIgZGVzaXJlZCB0aW1lcwotI2RlZmluZSB0aW1lcl9leHBpcmUodGltZXIsbmV4dF90aWNrKSAgIG1vZF90aW1lcigmdGltZXIsIFJVTl9BVChuZXh0X3RpY2spKQorI2RlZmluZSB0aW1lcl9leHBpcmUodGltZXIsIG5leHRfdGljaykgbW9kX3RpbWVyKCZ0aW1lciwgUlVOX0FUKG5leHRfdGljaykpCiAKIHR5cGVkZWYgdm9pZCAoKlRpbWVyRnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwogCkBAIC0yNTksOSArMjU5LDcgQEAKICAgICAvLyBPcGVyYXRpb24gc3RhdGUgdmFyaWFibGVzCiAgICAgV01BQ19DVVJSRU5UX01PREUgICAgICAgZUN1cnJNb2RlOyAgIC8vIE1BQyBjdXJyZW50IGNvbm5lY3Rpb24gbW9kZQogICAgIFdNQUNfQlNTX1NUQVRFICAgICAgICAgIGVDdXJyU3RhdGU7ICAvLyBNQUMgY3VycmVudCBCU1Mgc3RhdGUKLSAgICAjaWZkZWYgU25kRXZ0X1RvQVBJCiAgICAgV01BQ19CU1NfU1RBVEUgICAgICAgICAgZUxhc3RTdGF0ZTsgIC8vIE1BQyBsYXN0IEJTUyBzdGF0ZQotICAgICNlbmRpZgogCiAgICAgUEtub3duQlNTICAgICAgICAgICAgICAgcEN1cnJCU1M7CiAgICAgQllURSAgICAgICAgICAgICAgICAgICAgYnlDU1NHSzsKQEAgLTI5MywxMCArMjkxLDcgQEAKICAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlEZXNpcmVCU1NJRFtXTEFOX0JTU0lEX0xFTl07CiAKIC8vcmVzdG9yZSBCU1MgaW5mbyBmb3IgQWQtSG9jIG1vZGUKLS8vMjAwODAxMzEtMDUsPEFkZD4gYnkgTWlrZSBMaXUKLSNpZmRlZiBBZGhvY19TVEEKICAgICAgQllURSAgICAgICAgICAgICAgICAgICAgYWJ5QWRIb2NTU0lEW1dMQU5fSUVIRFJfTEVOICsgV0xBTl9TU0lEX01BWExFTiArIDFdOwotI2VuZGlmCiAKICAgICAvLyBBZGhvYyBvciBBUCBjb25maWd1cmF0aW9uIHZhcnMKICAgICBXT1JEICAgICAgICAgICAgICAgICAgICB3SUJTU0JlYWNvblBlcmlvZDsKQEAgLTM0MywxMSArMzM4LDExIEBACiAgICAgQk9PTCAgICAgICAgICAgICAgICAgICAgYlJ4QmVhY29uSW5UQlRUV2FrZTsKICAgICBCWVRFICAgICAgICAgICAgICAgICAgICBhYnlQU1R4TWFwW01BWF9OT0RFX05VTSArIDFdOwogCi0gICAgLy8gbWFuYWdtZW50IGNvbW1hbmQgcmVsYXRlZAorICAgIC8vIG1hbmFnZW1lbnQgY29tbWFuZCByZWxhdGVkCiAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICB1Q21kQnVzeTsKICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHVDbWRIb3N0QVBCdXN5OwogCi0gICAgLy8gbWFuYWdtZW50IHBhY2tldCBwb29sCisgICAgLy8gbWFuYWdlbWVudCBwYWNrZXQgcG9vbAogICAgIFBCWVRFICAgICAgICAgICAgICAgICAgIHBieU1nbXRQYWNrZXRQb29sOwogICAgIEJZVEUgICAgICAgICAgICAgICAgICAgIGJ5TWdtdFBhY2tldFBvb2xbc2l6ZW9mKFNUeE1nbXRQYWNrZXQpICsgV0xBTl9BM0ZSX01BWExFTl07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYS5jCmluZGV4IDFmYTZjOWIuLmY0OTI3NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGEuYwpAQCAtMTQ4LDcgKzE0OCw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGogPSAwOwogICAgICAgICAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyJ3UEtDb3VudDogJWQsIHNpemVvZihwQlNTTGlzdC0+YWJ5UEtUeXBlKTogJXp1XG4iLCBwUlNOLT53UEtDb3VudCwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpKTsKLSAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwUlNOLT53UEtDb3VudCkgJiYgKGogPCBzaXplb2YocEJTU0xpc3QtPmFieVBLVHlwZSkvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisJICAgIGZvciAoaSA9IDA7IChpIDwgcFJTTi0+d1BLQ291bnQpICYmCisJCSAgIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlQS1R5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmKHBSU04tPmxlbiA+PSAxMitpKjQrNCkgeyAvL291aTEoNCkrdmVyKDIpK0dLUyg0KStQS1NDbnQoMikrUEtTKDQqaSkKICAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWVtY21wKHBSU04tPlBLU0xpc3RbaV0uYWJ5T1VJLCBhYnlPVUkwMCwgNCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBwQlNTTGlzdC0+YWJ5UEtUeXBlW2orK10gPSBXUEFfTk9ORTsKQEAgLTE4MCw3ICsxODEsOCBAQAogICAgICAgICAgICAgaiA9IDA7CiAgICAgICAgICAgICBEQkdfUFJUKE1TR19MRVZFTF9ERUJVRywgS0VSTl9JTkZPIndBdXRoQ291bnQ6ICVkLCBzaXplb2YocEJTU0xpc3QtPmFieUF1dGhUeXBlKTogJXp1XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwSUVfUlNOX0F1dGgtPndBdXRoQ291bnQsIHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpKTsKLSAgICAgICAgICAgIGZvcihpID0gMDsgKGkgPCBwSUVfUlNOX0F1dGgtPndBdXRoQ291bnQpICYmIChqIDwgc2l6ZW9mKHBCU1NMaXN0LT5hYnlBdXRoVHlwZSkvc2l6ZW9mKEJZVEUpKTsgaSsrKSB7CisJICAgIGZvciAoaSA9IDA7IChpIDwgcElFX1JTTl9BdXRoLT53QXV0aENvdW50KSAmJgorCQkgICAoaiA8IHNpemVvZihwQlNTTGlzdC0+YWJ5QXV0aFR5cGUpL3NpemVvZihCWVRFKSk7IGkrKykgewogICAgICAgICAgICAgICAgIGlmKHBSU04tPmxlbiA+PSAxNCs0KyhtK2kpKjQpIHsgLy9vdWkxKDQpK3ZlcigyKStHS1MoNCkrUEtTQ250KDIpK1BLUyg0Km0pK0FLQygyKStBS1MoNCppKQogICAgICAgICAgICAgICAgICAgICBpZiAoICFtZW1jbXAocElFX1JTTl9BdXRoLT5BdXRoS1NMaXN0W2ldLmFieU9VSSwgYWJ5T1VJMDEsIDQpKQogICAgICAgICAgICAgICAgICAgICAgICAgcEJTU0xpc3QtPmFieUF1dGhUeXBlW2orK10gPSBXUEFfQVVUSF9JRUVFODAyXzFYOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGEyLmggYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaAppbmRleCA0MjlhOTEwLi40NmMyOTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYTIuaApAQCAtNTgsMjEgKzU4LDkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEV4cG9ydCBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdm9pZAotV1BBMl9DbGVhclJTTiAoCi0gICAgIFBLbm93bkJTUyAgICAgICAgcEJTU05vZGUKLSAgICApOwordm9pZCBXUEEyX0NsZWFyUlNOKFBLbm93bkJTUyBwQlNTTm9kZSk7Cit2b2lkIFdQQTJ2UGFyc2VSU04oUEtub3duQlNTIHBCU1NOb2RlLCBQV0xBTl9JRV9SU04gcFJTTik7CiAKLXZvaWQKLVdQQTJ2UGFyc2VSU04gKAotICAgICBQS25vd25CU1MgICAgICAgIHBCU1NOb2RlLAotICAgICBQV0xBTl9JRV9SU04gICAgIHBSU04KLSAgICApOwotCi11bnNpZ25lZCBpbnQKLVdQQTJ1U2V0SUVzKAotCXZvaWQgKnBNZ210SGFuZGxlLAotICAgICBQV0xBTl9JRV9SU04gcFJTTklFcwotICAgICk7Cit1bnNpZ25lZCBpbnQgV1BBMnVTZXRJRXModm9pZCAqcE1nbXRIYW5kbGUsIFBXTEFOX0lFX1JTTiBwUlNOSUVzKTsKIAogI2VuZGlmIC8qIF9fV1BBMl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L3dwYWN0bC5jCmluZGV4IDk2MWY1ODMuLmI0MDdhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvd3BhY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni93cGFjdGwuYwpAQCAtMTg2LDcgKzE4Niw2IEBACiAJCXJldHVybiB3cGFfcmVsZWFzZV93cGFkZXYocERldmljZSk7CiB9CiAKLQogLyoKICAqIERlc2NyaXB0aW9uOgogICogICAgICBTZXQgV1BBIGFsZ29yaXRobSAmIGtleXMKQEAgLTM0OSw5ICszNDgsOCBAQAogICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICB9CiAKLQotICAgIGlmIChJU19CUk9BRENBU1RfQUREUkVTUygmcGFyYW0tPmFkZHJbMF0pIHx8IChwYXJhbS0+YWRkciA9PSBOVUxMKSkgewotICAgICAgICAvLyBJZiBJU19CUk9BRENBU1RfQUREUkVTUywgc2V0IHRoZSBrZXkgYXMgZXZlcnkga2V5IGVudHJ5J3MgZ3JvdXAga2V5LgorICAgIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigmcGFyYW0tPmFkZHJbMF0pIHx8IChwYXJhbS0+YWRkciA9PSBOVUxMKSkgeworCS8qIGlmIGJyb2FkY2FzdCwgc2V0IHRoZSBrZXkgYXMgZXZlcnkga2V5IGVudHJ5J3MgZ3JvdXAga2V5ICovCiAgICAgICAgIERCR19QUlQoTVNHX0xFVkVMX0RFQlVHLCBLRVJOX0lORk8gIkdyb3VwZSBLZXkgQXNzaWduLlxuIik7CiAKICAgICAgICAgaWYgKChLZXliU2V0QWxsR3JvdXBLZXkocERldmljZSwKQEAgLTQwNCw3ICs0MDIsNyBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBLZXkgVGFibGUgRnVsbAotICAgICAgICAgICAgaWYgKElTX0VUSF9BRERSRVNTX0VRVUFMKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CisJICAgIGlmICghY29tcGFyZV9ldGhlcl9hZGRyKCZwYXJhbS0+YWRkclswXSwgcERldmljZS0+YWJ5QlNTSUQpKSB7CiAgICAgICAgICAgICAgICAgLy9EQkdfUFJOX1dMQU4wMygoInJldHVybiBORElTX1NUQVRVU19JTlZBTElEX0RBVEEgLUtleSBUYWJsZSBGdWxsLjJcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKIApAQCAtNjQ3LDkgKzY0NSw5IEBACiAKICAgICBmb3IgKGlpID0gMDsgaWkgPCBNQVhfQlNTX05VTTsgaWkrKykgewogCi0gICAgICAgICBmb3Ioamo9MDtqajxNQVhfQlNTX05VTS1paS0xO2pqKyspIHsKKwlmb3IgKGpqID0gMDsgamogPCBNQVhfQlNTX05VTSAtIGlpIC0gMTsgamorKykgewogCi0gICAgICAgICAgIGlmKChwTWdtdC0+c0JTU0xpc3RbampdLmJBY3RpdmUhPVRSVUUpIHx8CisJCWlmICgocE1nbXQtPnNCU1NMaXN0W2pqXS5iQWN0aXZlICE9IFRSVUUpIHx8CiAKICAgICAgICAgICAgICAgICAoKHBNZ210LT5zQlNTTGlzdFtqal0udVJTU0k+cE1nbXQtPnNCU1NMaXN0W2pqKzFdLnVSU1NJKSAmJihwTWdtdC0+c0JTU0xpc3RbamorMV0uYkFjdGl2ZSE9RkFMU0UpKSkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWFjX3N0cnVjdHVyZXMuaAppbmRleCA3NDQxMDE1Li40MTUyNTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tYWNfc3RydWN0dXJlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21hY19zdHJ1Y3R1cmVzLmgKQEAgLTQxLDggKzQxLDEwIEBACiAjZGVmaW5lIERPVF8xMV9NQUNfSEVBREVSX1NJWkUJCTI0CiAjZGVmaW5lIERPVF8xMV9TTkFQX1NJWkUJCQk2CiAjZGVmaW5lIERPVF8xMV9EVVJBVElPTl9PRkZTRVQJCTIKLSNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIgLyogU2VxdWVuY2UgY29udHJvbCBvZmZzZXQgKi8KLSNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAgLyogVGhlIHN0YXJ0IG9mZnNldCBvZiA4MDIuMTEgRnJhbWUvLyAqLworLyogU2VxdWVuY2UgY29udHJvbCBvZmZzZXQgKi8KKyNkZWZpbmUgRE9UXzExX1NFUVVFTkNFX09GRlNFVAkJMjIKKy8qIFRoZSBzdGFydCBvZmZzZXQgb2YgODAyLjExIEZyYW1lLy8gKi8KKyNkZWZpbmUgRE9UXzExX1RZUEVfT0ZGU0VUCQkJMzAKICNkZWZpbmUgRE9UXzExX0RBVEFfT0ZGU0VUICAgICAgICAgIDI0CiAjZGVmaW5lIERPVF8xMV9EQV9PRkZTRVQJCQk0CiAjZGVmaW5lIERPVF8zX1RZUEVfQVJQCQkJCTB4ODBGMwpAQCAtOTgsMjggKzEwMCwyOCBAQAogI2RlZmluZSBFTEVNRU5UX0lEX0NGX1BBUkFNRVRFUl9TRVQgICAgICAgICA0CiAjZGVmaW5lIEVMRU1FTlRfSURfVElNICAgICAgICAgICAgICAgICAgICAgIDUKICNkZWZpbmUgRUxFTUVOVF9JRF9JQlNTX1BBUkFNRVRFUl9TRVQgICAgICAgNgotLy8gN34xNSByZXNlcnZlcmQKKy8qIDd+MTUgcmVzZXJ2ZXJkICovCiAjZGVmaW5lIEVMRU1FTlRfSURfQ0hBTExFTkdFX1RFWFQgICAgICAgICAgIDE2Ci0vLyAxN34zMSByZXNlcnZlZCBmb3IgY2hhbGxlbmdlIHRleHQgZXh0ZW5zaW9uCi0vLyAzMn4yNTUgcmVzZXJ2ZWQKLS8vLS0gIDExRyAgLS0KKy8qIDE3fjMxIHJlc2VydmVkIGZvciBjaGFsbGVuZ2UgdGV4dCBleHRlbnNpb24gKi8KKy8qIDMyfjI1NSByZXNlcnZlZCAqLworLyotLSAgMTFHICAtLSAqLwogI2RlZmluZSBFTEVNRU5UX0lEX0VSUF9JTkZPUk1BVElPTgkJCTQyCiAjZGVmaW5lIEVMRU1FTlRfSURfRVhURU5ERURfU1VQUE9SVEVEX1JBVEVTIDUwCiAKLS8vLS0gIFdQQSAgLS0KKy8qIC0tICBXUEEgIC0tICovCiAKICNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBCQkJCQkyMjEKICNpZmRlZiBfV1BBMl8KICNkZWZpbmUgRUxFTUVOVF9JRF9SU05fV1BBMgkJCQkgICAgNDgKLSNlbmRpZiAvL2VuZGlmIFdQQTIKKyNlbmRpZiAvKiBlbmRpZiBXUEEyICovCiAKICNkZWZpbmUgV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UICAgICgodTE2KSA2KQogI2RlZmluZSBXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVCAgKCh1MTYpIDIpCiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gIFJlYXNvbiBDb2RlIChUYWJsZSAxOCk6IGluZGljYXRlIHRoZSByZWFzb24gb2YgRGlzQXNzb2MsIERlQXV0aGVuCi0vLyAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqICBSZWFzb24gQ29kZSAoVGFibGUgMTgpOiBpbmRpY2F0ZSB0aGUgcmVhc29uIG9mIERpc0Fzc29jLCBEZUF1dGhlbgorKiAgbGVuZ3RoIG9mIFJlYXNvbkNvZGUgaXMgMiBPY3RzLgorKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAjZGVmaW5lIFJFQVNPTl9SRUFTRVJFRCAgICAgICAgICAgICAwCiAjZGVmaW5lIFJFQVNPTl9VTlNQRUNJRElFRCAgICAgICAgICAxCiAjZGVmaW5lIFJFQVNPTl9QUkVBVVRIX0lOVkFMSUQgICAgICAyCkBAIC0zODUsOSArMzg3LDExIEBACiAjaWZkZWYgX1dQQTJfCiAjZGVmaW5lIFZFUlNJT05fV1BBMiAgICAgICAgICAgIDEKICNlbmRpZiAvKiBlbmQgZGVmICBfV1BBMl8gKi8KLSNkZWZpbmUgT1VJX1dQQQkJCQkJMHgwMEYyNTAwMAkvKiBXUEEyLjAgT1VJPTAwOjUwOkYyLCB0aGUgTVNCIGlzIHJlc2VydmVkIGZvciBzdWl0ZSB0eXBlICovCisvKiBXUEEyLjAgT1VJPTAwOjUwOkYyLCB0aGUgTVNCIGlzIHJlc2VydmVkIGZvciBzdWl0ZSB0eXBlICovCisjZGVmaW5lIE9VSV9XUEEJCQkJCTB4MDBGMjUwMDAKICNpZmRlZiBfV1BBMl8KLSNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAkvKiBmb3Igd3BhMiBjaGFuZ2UgdG8gMHgwMEFDT0YwNCBieSBXcyAyNi8wNC8wNCAqLworLyogZm9yIHdwYTIgY2hhbmdlIHRvIDB4MDBBQ09GMDQgYnkgV3MgMjYvMDQvMDQgKi8KKyNkZWZpbmUgT1VJX1dQQTIJCQkJMHgwMEFDMEYwMAogI2VuZGlmIC8qIGVuZCBkZWYgX1dQQTJfICovCiAKICNkZWZpbmUgT1VJX1dQQV9BRERJVElPTkFMCQkweDAxCkBAIC00MDAsOCArNDA0LDggQEAKIAogI2RlZmluZSBXUEFfT1VJX0JJRyAgICAoKHUzMikgMHgwMUYyNTAwMCkvKiBhZGRlZCBieSB3cyAwOS8yMy8wNCAqLwogI2RlZmluZSBXUEFfT1VJX0xJVFRMRSAgKCh1MzIpIDB4MDFGMjUwMDEpLyogYWRkZWQgYnkgd3MgMDkvMjMvMDQgKi8KLQotI2RlZmluZSBXUEFfV1BTX09VSQkJCQljcHVfdG9fbGUzMigweDA0RjI1MDAwKSAvKiAyMDA2MTEwOCBGb3IgV1BTLiBJdCdzIGxpdHRsZSBlbmRpYW4uIEJpZyBlbmRpYW4gaXMgMHgwMDUwRjIwNCAqLworLyogMjAwNjExMDggRm9yIFdQUy4gSXQncyBsaXR0bGUgZW5kaWFuLiBCaWcgZW5kaWFuIGlzIDB4MDA1MEYyMDQgKi8KKyNkZWZpbmUgV1BBX1dQU19PVUkJCQkJY3B1X3RvX2xlMzIoMHgwNEYyNTAwMCkKIAogLyogLS0tLS1XUEEyLS0tLS0gKi8KICNpZmRlZiBfV1BBMl8KQEAgLTQyMCw3NSArNDI0LDY1IEBACiAjZGVmaW5lIE9VSV9DSVBIRVJfQ0NNUAkJCQkweDA0CiAjZGVmaW5lIE9VSV9DSVBIRVJfV0VQXzEwNAkJCTB4MDUKIAotc3RydWN0IHN1aXRlX3NlbGVjdG9yCi17Ci0JdW5pb24KLQl7CitzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3J7CisJdW5pb257CiAJCXU4CVZhbHVlWzRdOwotCQlzdHJ1Y3QgX1NVSVRfCi0JCXsKKwkJc3RydWN0IF9TVUlUXyB7CiAJCQl1OAlPVUlbM107CiAJCQl1OAlUeXBlOwotCQl9U3VpdFNlbGVjdG9yOworCQl9IFN1aXRTZWxlY3RvcjsKIAl9OwogfTsKIAotLy8tLSAgV1BBICAtLQotc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50Ci17CisvKiAtLSAgV1BBICAtLSAqLworc3RydWN0CVJTTl9JbmZvcm1hdGlvbl9FbGVtZW50ewogCXU4CQkJCQlFbGVtZW50X0lEOwogCXU4CQkJCQlMZW5ndGg7Ci0Jc3RydWN0IHN1aXRlX3NlbGVjdG9yCU91aVdQQUFkZGl0aW9uYWw7IC8qIFdQQSB2ZXJzaW9uIDIuMCBhZGRpdGlvbmFsIGZpZWxkLCBhbmQgc2hvdWxkIGJlIDAwOjUwOkYyOjAxICovCisgLyogV1BBIHZlcnNpb24gMi4wIGFkZGl0aW9uYWwgZmllbGQsIGFuZCBzaG91bGQgYmUgMDA6NTA6RjI6MDEgKi8KKwlzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3IJT3VpV1BBQWRkaXRpb25hbDsKIAl1MTYJCQkJCVZlcnNpb247CiAJc3RydWN0IHN1aXRlX3NlbGVjdG9yCQlHcm91cEtleVN1aXRlOwogCXUxNgkJCQkJUGFpcndpc2VLZXlTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcgkJUGFpcndpc2VLZXlTdWl0ZVsxXTsKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci1zdHJ1Y3QgUlNOX0F1dGhfU3ViX0luZm9ybWF0aW9uX0VsZW1lbnQKLXsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IFJTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50IHsKIAl1MTYJCQkJQXV0aEtleU1uZ3RTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcglBdXRoS2V5TW5ndFN1aXRlWzFdOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiAtLSAgV1BBMiAgLS0gKi8KLXN0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50Ci17Ci0gIHVuaW9uCi0gIHsKK3N0cnVjdCBSU05fQ2FwYWJpbGl0eV9FbGVtZW50IHsKKyAgdW5pb24gewogCXUxNglfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkJd1ZhbHVlOwogICAgICNpZmRlZiBfQklHX0VORElBTl8JIC8qIDIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbiAqLwotICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkKLSAgICB7Ci0gICAgCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQyIDogODsgLyogMjAwNTEyMDEgKi8KLQl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMSA6IDI7Ci0JdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBHVEtfUmVwbGF5X0NvdW50ZXIgOiAyOwotCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUFRLX1JlcGxheV9Db3VudGVyIDogMjsKLQl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlIDogMTsKLSAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aCA6IDE7Ci0gICAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CisgICAgc3RydWN0IF9SU05fQ2FwYWJpbGl0eSB7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDI6ODsgLyogMjAwNTEyMDEgKi8KKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJlc2VydmVkMToyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgR1RLX1JlcGxheV9Db3VudGVyOjI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXI6MjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlOjE7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQcmVfQXV0aDoxOworICAgIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSU05fQ2FwYWJpbGl0eTsKICAgICAjZWxzZQotICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkKLSAgICB7Ci0gICAgICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGggOiAxOwotICAgICAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlIDogMTsKLSAgICAgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXIgOiAyOwotCSAgICB1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlciA6IDI7Ci0JICAgIHUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxIDogMjsKLQkgICAgdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDIgOiA4OyAvKiAyMDA1MTIwMSAqLwotICAgIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIFJTTl9DYXBhYmlsaXR5OworICAgIHN0cnVjdCBfUlNOX0NhcGFiaWxpdHkgeworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUHJlX0F1dGg6MTsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIE5vX1BhaXJ3aXNlOjE7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBQVEtfUmVwbGF5X0NvdW50ZXI6MjsKKwl1MTYgICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgIEdUS19SZXBsYXlfQ291bnRlcjoyOworCXUxNiAgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUmVzZXJ2ZWQxOjI7CisJdTE2ICAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpICBSZXNlcnZlZDI6ODsgLyogMjAwNTEyMDEgKi8KKyAgICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgUlNOX0NhcGFiaWxpdHk7CiAgICAgI2VuZGlmCiAKLSAgfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7Ci19X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIDsKKyAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgOwogCiAjaWZkZWYgX1dQQTJfCi1zdHJ1Y3QgcG1raWQKLXsKK3N0cnVjdCBwbWtpZCB7CiAgIHU4IHBWYWx1ZVsxNl07CiB9OwogCi1zdHJ1Y3QJV1BBMl9SU05fSW5mb3JtYXRpb25fRWxlbWVudAoteworc3RydWN0CVdQQTJfUlNOX0luZm9ybWF0aW9uX0VsZW1lbnQgewogCXU4CQkJCQlFbGVtZW50X0lEOwogCXU4CQkJCQlMZW5ndGg7CiAJdTE2CQkJCQlWZXJzaW9uOwpAQCAtNDk2LDI5ICs0OTAsMjggQEAKIAl1MTYJCQkJCVBhaXJ3aXNlS2V5U3VpdGVDb3VudDsKIAlzdHJ1Y3Qgc3VpdGVfc2VsZWN0b3IJCVBhaXJ3aXNlS2V5U3VpdGVbMV07CiAKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IFdQQTJfUlNOX0F1dGhfU3ViX0luZm9ybWF0aW9uX0VsZW1lbnQKLXsKK3N0cnVjdCBXUEEyX1JTTl9BdXRoX1N1Yl9JbmZvcm1hdGlvbl9FbGVtZW50IHsKIAl1MTYJCQkJQXV0aEtleU1uZ3RTdWl0ZUNvdW50OwogCXN0cnVjdCBzdWl0ZV9zZWxlY3RvcglBdXRoS2V5TW5ndFN1aXRlWzFdOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKLXN0cnVjdCBQTUtJRF9JbmZvcm1hdGlvbl9FbGVtZW50Ci17CitzdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudCB7CiAJdTE2CQkJCVBNS0lEX0NvdW50OwogCXN0cnVjdCBwbWtpZCBwbWtpZFsxNl07Ci19X19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBlbmRkZWYgX1dQQTJfICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gTUFDIEZyYW1lIHN0cnVjdHVyZSAoZGlmZmVyZW50IHR5cGUpIGFuZCBzdWJmaWVsZCBzdHJ1Y3R1cmUKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0cnVjdCBNQUNfZnJhbWVfY29udHJvbAotewotICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOyAvKiBhIGNvbWJpbmF0aW9uIG9mIHRoZSBbUHJvdG9jb2wgVmVyc2lvbiwgQ29udHJvbCBUeXBlLCBDb250cm9sIFN1YnR5cGVdKi8KLSAgICAjaWZkZWYgX0JJR19FTkRJQU5fIC8qIDIwMDYwOTI3IGFkZCBieSBhbnNvbidzIGVuZGlhbiAqLworc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIHsKKy8qIGEgY29tYmluYXRpb24gb2YgdGhlIFtQcm90b2NvbCBWZXJzaW9uLCBDb250cm9sIFR5cGUsIENvbnRyb2wgU3VidHlwZV0qLworICAgIHU4ICAgIG1hY19mcmFtZV9pbmZvOworLyogMjAwNjA5MjcgYWRkIGJ5IGFuc29uJ3MgZW5kaWFuICovCisgICAgI2lmZGVmIF9CSUdfRU5ESUFOXwogICAgIHU4ICAgIG9yZGVyOjE7CiAgICAgdTggICAgV0VQOjE7CiAgICAgdTggICAgbW9yZV9kYXRhOjE7CkBAIC01NDAsNyArNTMzLDggQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgTWFuYWdlbWVudF9GcmFtZSB7Ci0gICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8qIDJCLCBUb0RTLEZyb21EUyxNb3JlRnJhZyxNb3JlRGF0YSxPcmRlcj0wICovCisvKiAyQiwgVG9EUyxGcm9tRFMsTW9yZUZyYWcsTW9yZURhdGEsT3JkZXI9MCAqLworICAgIHN0cnVjdCBNQUNfZnJhbWVfY29udHJvbCBmcmFtZV9jb250cm9sOwogICAgIHUxNgkJZHVyYXRpb247CiAgICAgdTgJCURBW01BQ19BRERSX0xFTkdUSF07CQkJLyogQWRkcjEgKi8KICAgICB1OAkJU0FbTUFDX0FERFJfTEVOR1RIXTsJCQkvKiBBZGRyMiAqLwpAQCAtNTUyLDcgKzU0Niw4IEBACiAKIC8qIFNXLU1BQyBkb24ndCBUeC9SeCBDb250cm9sLUZyYW1lLCBIVy1NQUMgZG8gaXQuICovCiBzdHJ1Y3QgQ29udHJvbF9GcmFtZSB7Ci0gICAgc3RydWN0IE1BQ19mcmFtZV9jb250cm9sIGZyYW1lX2NvbnRyb2w7IC8qIFRvRFMsRnJvbURTLE1vcmVGcmFnLFJldHJ5LE1vcmVEYXRhLFdFUCxPcmRlcj0wICovCisvKiBUb0RTLEZyb21EUyxNb3JlRnJhZyxSZXRyeSxNb3JlRGF0YSxXRVAsT3JkZXI9MCAqLworICAgIHN0cnVjdCBNQUNfZnJhbWVfY29udHJvbCBmcmFtZV9jb250cm9sOwogICAgIHUxNgkJZHVyYXRpb247CiAgICAgdTgJCVJBW01BQ19BRERSX0xFTkdUSF07CiAgICAgdTgJCVRBW01BQ19BRERSX0xFTkdUSF07CkBAIC02MjcsOCArNjIyLDkgQEAKICAgICB1MTYgICAgYWxnb3JpdGhtTnVtYmVyOwogICAgIHUxNiAgICBzZXF1ZW5jZU51bWJlcjsKICAgICB1MTYgICAgc3RhdHVzQ29kZTsKLSAgICAvKiBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCi0JLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OyAvLyB3a2NoZW4gYWRkZWQgKi8KKwkvKiBOQjogZG9uJ3QgaW5jbHVkZSBDaGFsbGVuZ2VUZXh0IGluIHRoaXMgc3RydWN0dXJlCisJLy8gc3RydWN0IENoYWxsZW5nZV9UZXh0X0VsZW1lbnQgc0NoYWxsZW5nZVRleHRFbGVtZW50OworCS8vIHdrY2hlbiBhZGRlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcGh5X2NhbGlicmF0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwppbmRleCA3ODkzNTg2Li41YzFmMDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYwpAQCAtMTksMjMgKzE5LDI1IEBACiAKIC8qKioqKioqKioqKioqKioqKiogTE9DQUwgQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBMT09QX1RJTUVTICAgICAgMjAKLSNkZWZpbmUgVVMgICAgICAgICAgICAgIDEwMDAvL01JQ1JPU0VDT05ECisjZGVmaW5lIFVTICAgICAgICAgICAgICAxMDAwLyogTUlDUk9TRUNPTkQqLwogCiAjZGVmaW5lIEFHX0NPTlNUICAgICAgICAwLjYwNzI1MjkzNTAKICNkZWZpbmUgRklYRUQoWCkgICAgICAgICgoczMyKSgoWCkgKiAzMjc2OC4wKSkKICNkZWZpbmUgREVHMlJBRChYKSAgICAgIDAuMDE3NDUzICogKFgpCiAKLXN0YXRpYyBjb25zdCBzMzIgQW5nbGVzW10gPQotewotICAgIEZJWEVEKERFRzJSQUQoNDUuMCkpLCAgICBGSVhFRChERUcyUkFEKDI2LjU2NSkpLCAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCi0gICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksIEZJWEVEKERFRzJSQUQoMy41NzYzMykpLCBGSVhFRChERUcyUkFEKDEuNzg5OTEpKSwKLSAgICBGSVhFRChERUcyUkFEKDAuODk1MTc0KSksRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLEZJWEVEKERFRzJSQUQoMC4yMjM4MTEpKSwKLSAgICBGSVhFRChERUcyUkFEKDAuMTExOTA2KSksRklYRUQoREVHMlJBRCgwLjA1NTk1MykpLEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQorc3RhdGljIGNvbnN0IHMzMiBBbmdsZXNbXSA9IHsKKyAgICBGSVhFRChERUcyUkFEKDQ1LjApKSwgICAgIEZJWEVEKERFRzJSQUQoMjYuNTY1KSksICAgRklYRUQoREVHMlJBRCgxNC4wMzYyKSksCisgICAgRklYRUQoREVHMlJBRCg3LjEyNTAyKSksICBGSVhFRChERUcyUkFEKDMuNTc2MzMpKSwgIEZJWEVEKERFRzJSQUQoMS43ODk5MSkpLAorICAgIEZJWEVEKERFRzJSQUQoMC44OTUxNzQpKSwgRklYRUQoREVHMlJBRCgwLjQ0NzYxNCkpLCBGSVhFRChERUcyUkFEKDAuMjIzODExKSksCisgICAgRklYRUQoREVHMlJBRCgwLjExMTkwNikpLCBGSVhFRChERUcyUkFEKDAuMDU1OTUzKSksIEZJWEVEKERFRzJSQUQoMC4wMjc5NzcpKQogfTsKIAogLyoqKioqKioqKioqKioqKioqKiBMT0NBTCBGVU5DVElPTiBERUNMQVJBVElPTiBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKiovCi0vL3ZvaWQgICAgX3BoeV9yZl93cml0ZV9kZWxheShzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpOwotLy92b2lkICAgIHBoeV9pbml0X3JmKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSk7CisKKy8qCisgKiB2b2lkICAgIF9waHlfcmZfd3JpdGVfZGVsYXkoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKyAqIHZvaWQgICAgcGh5X2luaXRfcmYoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKyAqLwogCiAvKioqKioqKioqKioqKioqKioqIEZVTkNUSU9OIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtNDYsOSArNDgsNyBAQAogICAgIHZhbCA9IChkYXRhICYgMHgwRkZGKTsKIAogICAgIGlmICgoZGF0YSAmIEJJVCgxMikpICE9IDApCi0gICAgewogICAgICAgICB2YWwgfD0gMHhGRkZGRjAwMDsKLSAgICB9CiAKICAgICByZXR1cm4gKChzMzIpIHZhbCk7CiB9CkBAIC01OCwxMyArNTgsOSBAQAogICAgIHUzMiAgICAgdmFsOwogCiAgICAgaWYgKGRhdGEgPiA0MDk1KQotICAgIHsKICAgICAgICAgZGF0YSA9IDQwOTU7Ci0gICAgfQogICAgIGVsc2UgaWYgKGRhdGEgPCAtNDA5NikKLSAgICB7CiAgICAgICAgIGRhdGEgPSAtNDA5NjsKLSAgICB9CiAKICAgICB2YWwgPSBkYXRhICYgMHgxRkZGOwogCkBAIC03OSw5ICs3NSw3IEBACiAgICAgdmFsID0gKGRhdGEgJiAweDAwMDcpOwogCiAgICAgaWYgKChkYXRhICYgQklUKDMpKSAhPSAwKQotICAgIHsKICAgICAgICAgdmFsIHw9IDB4RkZGRkZGRjg7Ci0gICAgfQogCiAgICAgcmV0dXJuIHZhbDsKIH0KQEAgLTkxLDEzICs4NSw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDcpCi0gICAgewogICAgICAgICBkYXRhID0gNzsKLSAgICB9CiAgICAgZWxzZSBpZiAoZGF0YSA8IC04KQotICAgIHsKICAgICAgICAgZGF0YSA9IC04OwotICAgIH0KIAogICAgIHZhbCA9IGRhdGEgJiAweDAwMEY7CiAKQEAgLTExMiw5ICsxMDIsNyBAQAogICAgIHZhbCA9IChkYXRhICYgMHgwMDBGKTsKIAogICAgIGlmICgoZGF0YSAmIEJJVCg0KSkgIT0gMCkKLSAgICB7CiAgICAgICAgIHZhbCB8PSAweEZGRkZGRkYwOwotICAgIH0KIAogICAgIHJldHVybiB2YWw7CiB9CkBAIC0xMjQsMTMgKzExMiw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDE1KQotICAgIHsKICAgICAgICAgZGF0YSA9IDE1OwotICAgIH0KICAgICBlbHNlIGlmIChkYXRhIDwgLTE2KQotICAgIHsKICAgICAgICAgZGF0YSA9IC0xNjsKLSAgICB9CiAKICAgICB2YWwgPSBkYXRhICYgMHgwMDFGOwogCkBAIC0xNDUsOSArMTI5LDcgQEAKICAgICB2YWwgPSAoZGF0YSAmIDB4MDAxRik7CiAKICAgICBpZiAoKGRhdGEgJiBCSVQoNSkpICE9IDApCi0gICAgewogICAgICAgICB2YWwgfD0gMHhGRkZGRkZFMDsKLSAgICB9CiAKICAgICByZXR1cm4gdmFsOwogfQpAQCAtMTU3LDEzICsxMzksOSBAQAogICAgIHUzMiAgICAgdmFsOwogCiAgICAgaWYgKGRhdGEgPiAzMSkKLSAgICB7CiAgICAgICAgIGRhdGEgPSAzMTsKLSAgICB9CiAgICAgZWxzZSBpZiAoZGF0YSA8IC0zMikKLSAgICB7CiAgICAgICAgIGRhdGEgPSAtMzI7Ci0gICAgfQogCiAgICAgdmFsID0gZGF0YSAmIDB4MDAzRjsKIApAQCAtMTc4LDkgKzE1Niw3IEBACiAgICAgdmFsID0gZGF0YSAmIDB4MDBGRjsKIAogICAgIGlmICgoZGF0YSAmIEJJVCg4KSkgIT0gMCkKLSAgICB7CiAgICAgICAgIHZhbCB8PSAweEZGRkZGRjAwOwotICAgIH0KIAogICAgIHJldHVybiB2YWw7CiB9CkBAIC0xOTAsMTMgKzE2Niw5IEBACiAgICAgdTMyICAgICB2YWw7CiAKICAgICBpZiAoZGF0YSA+IDI1NSkKLSAgICB7CiAgICAgICAgIGRhdGEgPSAyNTU7Ci0gICAgfQogICAgIGVsc2UgaWYgKGRhdGEgPCAtMjU2KQotICAgIHsKICAgICAgICAgZGF0YSA9IC0yNTY7Ci0gICAgfQogCiAgICAgdmFsID0gZGF0YSAmIDB4MDFGRjsKIApAQCAtMjA3LDIxICsxNzksMTkgQEAKIHMzMiBfZmxvb3IoczMyIG4pCiB7CiAgICAgaWYgKG4gPiAwKQotICAgIHsKLSAgICAgICAgbiArPSA1OwotICAgIH0KKwluICs9IDU7CiAgICAgZWxzZQotICAgIHsKICAgICAgICAgbiAtPSA1OwotICAgIH0KIAogICAgIHJldHVybiAobi8xMCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCi0vLyBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7Ci0vLyBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7CisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGlzIHNxYXJlLXJvb3QgZnVuY3Rpb24uCisgKiBzcXN1bSBpcyB0aGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgaXMgc3FfcnQ7CisgKiBUaGUgbWF4aW11bSBvZiBzcXN1bSA9IDJeMjcgLTE7CisgKi8KIHUzMiBfc3FydCh1MzIgc3FzdW0pCiB7CiAgICAgdTMyICAgICBzcV9ydDsKQEAgLTIzMiwxOCArMjAyLDE3IEBACiAgICAgaW50ICAgICBzdGVwOwogCiAgICAgZzQgPSAgc3FzdW0gLyAxMDAwMDAwMDA7Ci0gICAgZzMgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDApIC8xMDAwMDAwOwotICAgIGcyID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCkgLzEwMDAwOwotICAgIGcxID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwKSAvMTAwOworICAgIGczID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwKSAvIDEwMDAwMDA7CisgICAgZzIgPSAoc3FzdW0gLSBnNCoxMDAwMDAwMDAgLSBnMyoxMDAwMDAwKSAvIDEwMDAwOworICAgIGcxID0gKHNxc3VtIC0gZzQqMTAwMDAwMDAwIC0gZzMqMTAwMDAwMCAtIGcyKjEwMDAwKSAvIDEwMDsKICAgICBnMCA9IChzcXN1bSAtIGc0KjEwMDAwMDAwMCAtIGczKjEwMDAwMDAgLSBnMioxMDAwMCAtIGcxKjEwMCk7CiAKICAgICBuZXh0ID0gZzQ7CiAgICAgc3RlcCA9IDA7CiAgICAgc2VlZCA9IDA7Ci0gICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKLSAgICB7Ci0gICAgCXN0ZXArKzsKLSAgICAJc2VlZCsrOworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKKyAgICAgICAgc3RlcCsrOworICAgICAgICBzZWVkKys7CiAgICAgfQogCiAgICAgc3FfcnQgPSBzZWVkICogMTAwMDA7CkBAIC0yNTEsMjAgKzIyMCwxOCBAQAogCiAgICAgc3RlcCA9IDA7CiAgICAgc2VlZCA9IDIgKiBzZWVkICogMTA7Ci0gICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkKLSAgICB7CisgICAgd2hpbGUgKCgoc2VlZCsxKSooc3RlcCsxKSkgPD0gbmV4dCkgewogICAgICAgICBzdGVwKys7Ci0gICAgCXNlZWQrKzsKKyAgICAgICAgc2VlZCsrOwogICAgIH0KIAogICAgIHNxX3J0ID0gc3FfcnQgKyBzdGVwICogMTAwMDsKICAgICBuZXh0ID0gKG5leHQgLSBzZWVkICogc3RlcCkgKiAxMDAgKyBnMjsKICAgICBzZWVkID0gKHNlZWQgKyBzdGVwKSAqIDEwOwogICAgIHN0ZXAgPSAwOwotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwMDsKQEAgLTI3MiwyMSArMjM5LDE5IEBACiAgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKICAgICBzdGVwID0gMDsKIAotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcCAqIDEwOwotICAgIG5leHQgPSAobmV4dCAtIHNlZWQqIHN0ZXApICogMTAwICsgZzA7CisgICAgbmV4dCA9IChuZXh0IC0gc2VlZCAqIHN0ZXApICogMTAwICsgZzA7CiAgICAgc2VlZCA9IChzZWVkICsgc3RlcCkgKiAxMDsKICAgICBzdGVwID0gMDsKIAotICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpCi0gICAgeworICAgIHdoaWxlICgoKHNlZWQrMSkqKHN0ZXArMSkpIDw9IG5leHQpIHsKICAgICAgICAgc3RlcCsrOwotICAgIAlzZWVkKys7CisgICAgICAgIHNlZWQrKzsKICAgICB9CiAKICAgICBzcV9ydCA9IHNxX3J0ICsgc3RlcDsKQEAgLTMwMCwzOCArMjY1LDMxIEBACiAgICAgczMyIFgsIFksIFRhcmdldEFuZ2xlLCBDdXJyQW5nbGU7CiAgICAgdW5zaWduZWQgICAgU3RlcDsKIAotICAgIFg9RklYRUQoQUdfQ09OU1QpOyAgICAgIC8vIEFHX0NPTlNUICogY29zKDApCi0gICAgWT0wOyAgICAgICAgICAgICAgICAgICAgLy8gQUdfQ09OU1QgKiBzaW4oMCkKLSAgICBUYXJnZXRBbmdsZT1hYnMoYW5nbGUpOwotICAgIEN1cnJBbmdsZT0wOworICAgIFggPSBGSVhFRChBR19DT05TVCk7ICAgICAgLyogQUdfQ09OU1QgKiBjb3MoMCkgKi8KKyAgICBZID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIEFHX0NPTlNUICogc2luKDApICovCisgICAgVGFyZ2V0QW5nbGUgPSBhYnMoYW5nbGUpOworICAgIEN1cnJBbmdsZSA9IDA7CiAKLSAgICBmb3IgKFN0ZXA9MDsgU3RlcCA8IDEyOyBTdGVwKyspCi0gICAgeworICAgIGZvciAoU3RlcCA9IDA7IFN0ZXAgPCAxMjsgU3RlcCsrKSB7CiAJczMyIE5ld1g7CiAKLSAgICAgICAgaWYoVGFyZ2V0QW5nbGUgPiBDdXJyQW5nbGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5ld1g9WCAtIChZID4+IFN0ZXApOwotICAgICAgICAgICAgWT0oWCA+PiBTdGVwKSArIFk7Ci0gICAgICAgICAgICBYPU5ld1g7CisgICAgICAgIGlmIChUYXJnZXRBbmdsZSA+IEN1cnJBbmdsZSkgeworICAgICAgICAgICAgTmV3WCA9IFggLSAoWSA+PiBTdGVwKTsKKyAgICAgICAgICAgIFkgPSAoWCA+PiBTdGVwKSArIFk7CisgICAgICAgICAgICBYID0gTmV3WDsKICAgICAgICAgICAgIEN1cnJBbmdsZSArPSBBbmdsZXNbU3RlcF07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBOZXdYPVggKyAoWSA+PiBTdGVwKTsKLSAgICAgICAgICAgIFk9LShYID4+IFN0ZXApICsgWTsKLSAgICAgICAgICAgIFg9TmV3WDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5ld1ggPSBYICsgKFkgPj4gU3RlcCk7CisgICAgICAgICAgICBZID0gLShYID4+IFN0ZXApICsgWTsKKyAgICAgICAgICAgIFggPSBOZXdYOwogICAgICAgICAgICAgQ3VyckFuZ2xlIC09IEFuZ2xlc1tTdGVwXTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhbmdsZSA+IDApCi0gICAgeworICAgIGlmIChhbmdsZSA+IDApIHsKICAgICAgICAgKmNvcyA9IFg7CiAgICAgICAgICpzaW4gPSBZOwotICAgIH0KLSAgICBlbHNlCi0gICAgeworICAgIH0gZWxzZSB7CiAgICAgICAgICpjb3MgPSBYOwogICAgICAgICAqc2luID0gLVk7CiAgICAgfQpAQCAtMzQzLDcgKzMwMSw3IEBACiAJCW51bWJlciArPSAweDEwMDA7CiAJcmV0dXJuIFdiMzVSZWdfUmVhZFN5bmMocEh3RGF0YSwgbnVtYmVyLCBwVmFsdWUpOwogfQotI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApIGhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyICopX0MgKQorI2RlZmluZSBod19nZXRfZHh4X3JlZyhfQSwgX0IsIF9DKSBoYWxfZ2V0X2R4eF9yZWcoX0EsIF9CLCAodTMyICopX0MpCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyhzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IG51bWJlciwgdTMyIHZhbHVlKQogewpAQCAtMzU0LDcgKzMxMiw3IEBACiAJcmV0ID0gV2IzNVJlZ19Xcml0ZVN5bmMocEh3RGF0YSwgbnVtYmVyLCB2YWx1ZSk7CiAJcmV0dXJuIHJldDsKIH0KLSNkZWZpbmUgaHdfc2V0X2R4eF9yZWcoIF9BLCBfQiwgX0MgKSBoYWxfc2V0X2R4eF9yZWcoIF9BLCBfQiwgKHUzMilfQyApCisjZGVmaW5lIGh3X3NldF9keHhfcmVnKF9BLCBfQiwgX0MpIGhhbF9zZXRfZHh4X3JlZyhfQSwgX0IsICh1MzIpX0MpCiAKIAogdm9pZCBfcmVzZXRfcnhfY2FsKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKQEAgLTM2MywyNSArMzIxLDIwIEBACiAKIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAKLQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCXsKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqLwogCQl2YWwgJj0gMHhGRkZGMDAwMDsKLQl9Ci0JZWxzZSAvLyAybmQtY3V0Ci0JeworCWVsc2UgLyogMm5kLWN1dCAqLwogCQl2YWwgJj0gMHgwMDAwMDNGRjsKLQl9CiAKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKIH0KIAogCi0vLyAqKioqKioqKioqKipmb3Igd2luYm9uZCBjYWxpYnJhdGlvbioqKioqKioqKgotLy8KKy8qKioqKioqKioqKioqKmZvciB3aW5ib25kIGNhbGlicmF0aW9uKioqKioqKioqLwogCi0vLwotLy8KLS8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKIHsKICAgICB1MzIgICAgIHJlZ19hZ2NfY3RybDM7CkBAIC0zOTIsMzUgKzM0NSwzMSBAQAogICAgIFBIWV9ERUJVRygoIltDQUxdIC0+IFsxXV9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uKClcbiIpKTsKICAgICBwaHlfaW5pdF9yZihwaHdfZGF0YSk7CiAKLSAgICAvLyBzZXQgY2FsaWJyYXRpb24gY2hhbm5lbAotICAgIGlmKCAoUkZfV0JfMjQyID09IHBod19kYXRhLT5waHlfdHlwZSkgfHwKLQkJKFJGX1dCXzI0Ml8xID09IHBod19kYXRhLT5waHlfdHlwZSkgKSAvLyAyMDA2MDYxOS41IEFkZAotICAgIHsKLSAgICAgICAgaWYgKChmcmVxdWVuY3kgPj0gMjQxMikgJiYgKGZyZXF1ZW5jeSA8PSAyNDg0KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdzg5cmYyNDIgY2hhbmdlIGZyZXF1ZW5jeSB0byAyMzkwTWh6CisgICAgLyogc2V0IGNhbGlicmF0aW9uIGNoYW5uZWwgKi8KKyAgICBpZiAoKFJGX1dCXzI0MiA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpIHx8CisJCShSRl9XQl8yNDJfMSA9PSBwaHdfZGF0YS0+cGh5X3R5cGUpKSAvKiAyMDA2MDYxOS41IEFkZCAqL3sKKyAgICAgICAgaWYgKChmcmVxdWVuY3kgPj0gMjQxMikgJiYgKGZyZXF1ZW5jeSA8PSAyNDg0KSkgeworICAgICAgICAgICAgLyogdzg5cmYyNDIgY2hhbmdlIGZyZXF1ZW5jeSB0byAyMzkwTWh6ICovCiAgICAgICAgICAgICBQSFlfREVCVUcoKCJbQ0FMXSBXODlSRjI0Mi8xMUcvQ2hhbm5lbD0yMzkwTWh6XG4iKSk7CiAJCQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDMsICgzPDwyNCl8MHgwMjU1ODYpOwogCiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotCXsKKyAgICB9IGVsc2UgewogCiAJfQogCi0JLy8gcmVzZXQgY2FuY2VsX2RjX2lbOTo1XSBhbmQgY2FuY2VsX2RjX3FbNDowXSBpbiByZWdpc3RlciBEQ19DYW5jZWwKKwkvKiByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCAmdmFsKTsKIAl2YWwgJj0gfigweDAzRkYpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDVDLCB2YWwpOwogCi0JLy8gcmVzZXQgdGhlIFRYIGFuZCBSWCBJUSBjYWxpYnJhdGlvbiBkYXRhCisJLyogcmVzZXQgdGhlIFRYIGFuZCBSWCBJUSBjYWxpYnJhdGlvbiBkYXRhICovCiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIDApOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAwKTsKIAotCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLyogSVFfQWxwaGEgQ2hhbmdlZCAqLwogCi0JLy8gYS4gRGlzYWJsZSBBR0MKKwkvKiBhLiBEaXNhYmxlIEFHQyAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CiAJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOwogCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CkBAIC00MzAsNyArMzc5LDcgQEAKIAl2YWwgfD0gTUFTS19BR0NfRklYX0dBSU47CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDUsIHZhbCk7CiAKLQkvLyBiLiBUdXJuIG9mZiBCQiBSWAorCS8qIGIuIFR1cm4gb2ZmIEJCIFJYICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOwogCXJlZ19hX2FjcV9jdHJsIHw9IE1BU0tfQU1FUl9PRkZfUkVHOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOwpAQCAtNDM5LDkgKzM4OCw5IEBACiAJcmVnX2JfYWNxX2N0cmwgfD0gTUFTS19CTUVSX09GRl9SRUc7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCByZWdfYl9hY3FfY3RybCk7CiAKLQkvLyBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCi0JLy8gZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KLQkvLyAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEKKwkvKiBjLiBNYWtlIHN1cmUgTUFDIGlzIGluIHJlY2VpdmluZyBtb2RlCisJICogZC4gVHVybiBPTiBBREMgY2FsaWJyYXRpb24KKwkgKiAgICAtIEFEQyBjYWxpYnJhdG9yIGlzIHRyaWdnZXJlZCBieSB0aGlzIHNpZ25hbCByaXNpbmcgZnJvbSAwIHRvIDEgKi8KIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7CiAJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOwpAQCAtNDQ5LDcgKzM5OCw3IEBACiAJdmFsIHw9IE1BU0tfQURDX0RDX0NBTF9TVFI7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHZhbCk7CiAKLQkvLyBlLiBUaGUgcmVzdWx0IGFyZSBzaG93biBpbiAiYWRjX2RjX2NhbF9pWzg6MF0gYW5kIGFkY19kY19jYWxfcVs4OjBdIgorCS8qIGUuIFRoZSByZXN1bHQgYXJlIHNob3duIGluICJhZGNfZGNfY2FsX2lbODowXSBhbmQgYWRjX2RjX2NhbF9xWzg6MF0iICovCiAjaWZkZWYgX0RFQlVHCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19PRkZTRVRfUkVBRCwgJnZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgUkVHX09GRlNFVF9SRUFEID0gMHglMDhYXG4iLCB2YWwpKTsKQEAgLTQ2NCwyMyArNDEzLDIzIEBACiAJdmFsICY9IH5NQVNLX0FEQ19EQ19DQUxfU1RSOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCB2YWwpOwogCi0JLy8gZi4gVHVybiBvbiBCQiBSWAotCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BX0FDUV9DVFJMLCAmcmVnX2FfYWNxX2N0cmwpOworCS8qIGYuIFR1cm4gb24gQkIgUlggKi8KKwkvKiBod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FfQUNRX0NUUkwsICZyZWdfYV9hY3FfY3RybCk7ICovCiAJcmVnX2FfYWNxX2N0cmwgJj0gfk1BU0tfQU1FUl9PRkZfUkVHOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQV9BQ1FfQ1RSTCwgcmVnX2FfYWNxX2N0cmwpOwogCi0JLy9od19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsICZyZWdfYl9hY3FfY3RybCk7CisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19CX0FDUV9DVFJMLCAmcmVnX2JfYWNxX2N0cmwpOyAqLwogCXJlZ19iX2FjcV9jdHJsICY9IH5NQVNLX0JNRVJfT0ZGX1JFRzsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0JfQUNRX0NUUkwsIHJlZ19iX2FjcV9jdHJsKTsKIAotCS8vIGcuIEVuYWJsZSBBR0MKLQkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwkvKiBnLiBFbmFibGUgQUdDICovCisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOyAqLwogCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOwogCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfdHhpZGFjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpCiB7CiAJdTMyICAgICByZWdfYWdjX2N0cmwzOwpAQCAtNDk3LDIyICs0NDYsMjIgQEAKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IFsyXV90eGlkYWNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbigpXG4iKSk7CiAKLQkvLyBhLiBTZXQgdG8gIlRYIGNhbGlicmF0aW9uIG1vZGUiCisJLyogYS4gU2V0IHRvICJUWCBjYWxpYnJhdGlvbiBtb2RlIiAqLwogCi0JLy8weDAxIDB4RUUzRkMyICA7IDNCOEZGICA7IENhbGlicmF0aW9uICg2YSkuIGVuYWJsZSBUWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisJLyogMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cyAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMSwgKDE8PDI0KXwweEVFM0ZDMik7Ci0JLy8weDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdAorCS8qIDB4MEIgMHgxOTA1RDYgIDsgMDY0MTcgIDsgQ2FsaWJyYXRpb24gKDZiKS4gZW5hYmxlIFRYIEkvUSBjYWwgbG9vcCBzcXVhcmluZyBjaXJjdWl0ICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAxMSwgKDExPDwyNCl8MHgxOTAxRDYpOwotCS8vMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkCisJLyogMHgwNSAweDI0QzYwQSAgOyAwOTMxOCAgOyBDYWxpYnJhdGlvbiAoNmMpLiBzZXR0aW5nIFRYLVZHQSBnYWluOiBUWEdDSD0yICYgR1BLPTExMCAtLT4gdG8gYmUgb3B0aW1pemVkICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoNTw8MjQpfDB4MjRDNDhBKTsKLSAgICAvLzB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkCisgICAgICAgIC8qIDB4MDYgMHgwNjg4MEMgIDsgMDFBMjAgIDsgQ2FsaWJyYXRpb24gKDZkKS4gUlhHQ0g9MDA7IFJYR0NMPTEwMCAwMDAgKFJYVkdBPTMyKSAtLT4gdG8gYmUgb3B0aW1pemVkICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA2LCAoNjw8MjQpfDB4MDY4OTBDKTsKLQkvLzB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlCisJLyogMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDAsICgwPDwyNCl8MHhGREYxQzApOwogCi0JaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvLyBJUV9BbHBoYSBDaGFuZ2VkCisJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4MzAzMDMwMzApOyAvKiBJUV9BbHBoYSBDaGFuZ2VkICovCiAKLQkvLyBhLiBEaXNhYmxlIEFHQworCS8qIGEuIERpc2FibGUgQUdDICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKIAlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CiAJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKQEAgLTUyMiwxOSArNDcxLDE5IEBACiAJdmFsIHw9IE1BU0tfQUdDX0ZJWF9HQUlOOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkw1LCB2YWwpOwogCi0JLy8gYi4gc2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCBpcWNhbF90b25lWzM6Ml0gdG8gMAorCS8qIGIuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgyIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAgKi8KIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CiAKLQkvLyBtb2RlPTIsIHRvbmU9MAotCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyKTsKKwkvKiBtb2RlPTIsIHRvbmU9MCAqLworCS8qIHJlZ19tb2RlX2N0cmwgfD0gKE1BU0tfQ0FMSUJfU1RBUlR8Mik7ICovCiAKLQkvLyBtb2RlPTIsIHRvbmU9MQotCS8vcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwyfCgxPDwyKSk7CisJLyogbW9kZT0yLCB0b25lPTEgKi8KKwkvKiByZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDE8PDIpKTsgKi8KIAotCS8vIG1vZGU9MiwgdG9uZT0yCisJLyogbW9kZT0yLCB0b25lPTIgKi8KIAlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDJ8KDI8PDIpKTsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKQEAgLTU0MiwxMiArNDkxLDEwIEBACiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQotCXsKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKIAotCQkvLyBjLgotCQkvLyByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQkvKiBjLiByZXNldCBjYW5jZWxfZGNfaVs5OjVdIGFuZCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwpAQCAtNTYyLDcgKzUwOSw3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKIAkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwogCi0JCS8vIGQuCisJCS8qIGQuICovCiAJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX0lfU0hJRlQpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOwogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CkBAIC01NzcsMTggKzUyNCwxMiBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCiAJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKIAotCQkvLyBlLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQkvKiBlLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSSAqLwogCQlpZiAobWFnXzAgIT0gbWFnXzEpCi0JCXsKIAkJCWZpeF9jYW5jZWxfZGNfaSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKG1hZ18wID09IG1hZ18xKQotCQkJewogCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOwotCQkJfQotCiAJCQlmaXhfY2FuY2VsX2RjX2kgPSAwOwogCQl9CiAKQEAgLTU5NiwxMiArNTM3LDEwIEBACiAJCQkJICAgZml4X2NhbmNlbF9kY19pLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfaSkpKTsKIAogCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKLQkJewogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKLQlpZiAoIGxvb3AgPj0gMTkgKQorCWlmIChsb29wID49IDE5KQogCSAgIGZpeF9jYW5jZWxfZGNfaSA9IDA7CiAKIAlyZWdfZGNfY2FuY2VsICY9IH4oMHgwM0ZGKTsKQEAgLTYwOSwxMyArNTQ4LDEzIEBACiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwogCVBIWV9ERUJVRygoIltDQUxdICAgIERDX0NBTkNFTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQkvLyBnLgorCS8qIGcuICovCiAJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSkKIHsKIAl1MzIgICAgIHJlZ19hZ2NfY3RybDM7CkBAIC02MzEsMjAgKzU3MCwyMCBAQAogCWludCAgICAgbG9vcDsKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IFszXV90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uKClcbiIpKTsKLQkvLzB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMKKwkvKjB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOwotCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKKwkvKiAweDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTkwMUQ2KTsKLQkvLzB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZAorCS8qIDB4MDUgMHgyNEM2MEEgIDsgMDkzMTggIDsgQ2FsaWJyYXRpb24gKDZjKS4gc2V0dGluZyBUWC1WR0EgZ2FpbjogVFhHQ0g9MiAmIEdQSz0xMTAgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNSwgKDU8PDI0KXwweDI0QzQ4QSk7Ci0gICAgLy8weDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZAorICAgICAgICAvKiAweDA2IDB4MDY4ODBDICA7IDAxQTIwICA7IENhbGlicmF0aW9uICg2ZCkuIFJYR0NIPTAwOyBSWEdDTD0xMDAgMDAwIChSWFZHQT0zMikgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODkwQyk7Ci0JLy8weDAwIDB4RkRGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg2ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCS8qIDB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKIAotCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLy8gSVFfQWxwaGEgQ2hhbmdlZAorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDMwMzAzMDMwKTsgLyogSVFfQWxwaGEgQ2hhbmdlZCAqLwogCi0JLy8gYS4gRGlzYWJsZSBBR0MKKwkvKiBhLiBEaXNhYmxlIEFHQyAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmcmVnX2FnY19jdHJsMyk7CiAJcmVnX2FnY19jdHJsMyAmPSB+QklUKDIpOwogCXJlZ19hZ2NfY3RybDMgfD0gKE1BU0tfTE5BX0ZJWF9HQUlOfE1BU0tfQUdDX0ZJWCk7CkBAIC02NTQsMTEgKzU5MywxMSBAQAogCXZhbCB8PSBNQVNLX0FHQ19GSVhfR0FJTjsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX0FHQ19DVFJMNSwgdmFsKTsKIAotCS8vIGEuIHNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgaXFjYWxfdG9uZVszOjJdIHRvIDAKKwkvKiBhLiBzZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0IGlxY2FsX3RvbmVbMzoyXSB0byAwICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkvL3JlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CisJLyogcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsgKi8KIAlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9NT0RFKTsKIAlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDMpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKQEAgLTY2NywxMiArNjA2LDEwIEBACiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsICZyZWdfZGNfY2FuY2VsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHJlYWQpID0gMHglMDhYXG4iLCByZWdfZGNfY2FuY2VsKSk7CiAKLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKQotCXsKKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIsIGxvb3ApKTsKIAotCQkvLyBiLgotCQkvLyByZXNldCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbAorCQkvKiBiLiByZXNldCBjYW5jZWxfZGNfcVs0OjBdIGluIHJlZ2lzdGVyIERDX0NhbmNlbCAqLwogCQlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NUMsIHJlZ19kY19jYW5jZWwpOwpAQCAtNjg3LDcgKzYyNCw3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgIG1hZ18wPSVkIChpcWNhbF9pbWFnZV9pPSVkLCBpcWNhbF9pbWFnZV9xPSVkKVxuIiwKIAkJCQkgICBtYWdfMCwgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwogCi0JCS8vIGMuCisJCS8qIGMuICovCiAJCXJlZ19kY19jYW5jZWwgfD0gKDEgPDwgQ0FOQ0VMX0RDX1FfU0hJRlQpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBEQ19DQU5DRUwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX2RjX2NhbmNlbCkpOwogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1QywgcmVnX2RjX2NhbmNlbCk7CkBAIC03MDIsMTggKzYzOSwxMiBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBtYWdfMT0lZCAoaXFjYWxfaW1hZ2VfaT0lZCwgaXFjYWxfaW1hZ2VfcT0lZClcbiIsCiAJCQkJICAgbWFnXzEsIGlxY2FsX2ltYWdlX2ksIGlxY2FsX2ltYWdlX3EpKTsKIAotCQkvLyBkLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSQorCQkvKiBkLiBDYWxjdWxhdGUgdGhlIGNvcnJlY3QgREMgb2Zmc2V0IGNhbmNlbGxhdGlvbiB2YWx1ZSBmb3IgSSAqLwogCQlpZiAobWFnXzAgIT0gbWFnXzEpCi0JCXsKIAkJCWZpeF9jYW5jZWxfZGNfcSA9IChtYWdfMCoxMDAwMCkgLyAobWFnXzAqMTAwMDAgLSBtYWdfMSoxMDAwMCk7Ci0JCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKG1hZ18wID09IG1hZ18xKQotCQkJewogCQkJCVBIWV9ERUJVRygoIltDQUxdICAgKioqKiogbWFnXzAgPSBtYWdfMSAhIVxuIikpOwotCQkJfQotCiAJCQlmaXhfY2FuY2VsX2RjX3EgPSAwOwogCQl9CiAKQEAgLTcyMSwxMiArNjUyLDEwIEBACiAJCQkJICAgZml4X2NhbmNlbF9kY19xLCBfczMyX3RvX3M1KGZpeF9jYW5jZWxfZGNfcSkpKTsKIAogCQlpZiAoKGFicyhtYWdfMS1tYWdfMCkqNikgPiBtYWdfMCkKLQkJewogCQkJYnJlYWs7Ci0JCX0KIAl9CiAKLQlpZiAoIGxvb3AgPj0gMTkgKQorCWlmIChsb29wID49IDE5KQogCSAgIGZpeF9jYW5jZWxfZGNfcSA9IDA7CiAKIAlyZWdfZGNfY2FuY2VsICY9IH4oMHgwMDFGKTsKQEAgLTczNSwxMyArNjY0LDEzIEBACiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgRENfQ0FOQ0VMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19kY19jYW5jZWwpKTsKIAogCi0JLy8gZi4KKwkvKiBmLiAqLwogCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpOwogCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiB9CiAKLS8vMjAwNjA2MTIuMS5hIDIwMDYwNzE4LjEgTW9kaWZ5CisvKiAyMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkgKi8KIHU4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLAogCQkJCQkJICAgczMyIGFfMl90aHJlc2hvbGQsCiAJCQkJCQkgICBzMzIgYl8yX3RocmVzaG9sZCkKQEAgLTc2NSw3ICs2OTQsNyBAQAogCXMzMiAgICAgdGVtcDEsIHRlbXAyOwogCXUzMiAgICAgdmFsOwogCXUxNiAgICAgbG9vcDsKLQlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsIGlxY2FsX3RvbmVfcV9hdmc7CiAJdTggICAgICB2ZXJpZnlfY291bnQ7CiAJaW50IGNhcHR1cmVfdGltZTsKIApAQCAtNzgwLDE4ICs3MDksMTggQEAKIAogCWxvb3AgPSBMT09QX1RJTUVTOwogCi0Jd2hpbGUgKGxvb3AgPiAwKQotCXsKKwl3aGlsZSAobG9vcCA+IDApIHsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gWyVkLl0gPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPlxuIiwgKExPT1BfVElNRVMtbG9vcCsxKSkpOwogCi0JCWlxY2FsX3RvbmVfaV9hdmc9MDsKLQkJaXFjYWxfdG9uZV9xX2F2Zz0wOwotCQlpZiggIWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAweDAwKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCWlxY2FsX3RvbmVfaV9hdmcgPSAwOworCQlpcWNhbF90b25lX3FfYXZnID0gMDsKKwkJaWYgKCFod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgMHgwMCkpIC8qIDIwMDYwNzE4LjEgbW9kaWZ5ICovCiAJCQlyZXR1cm4gMDsKLQkJZm9yKGNhcHR1cmVfdGltZT0wO2NhcHR1cmVfdGltZTwxMDtjYXB0dXJlX3RpbWUrKykKLQkJewotCQkJLy8gYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bwotCQkJLy8gICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCWZvciAoY2FwdHVyZV90aW1lID0gMDsgY2FwdHVyZV90aW1lIDwgMTA7IGNhcHR1cmVfdGltZSsrKSB7CisJCQkvKgorCQkJICogYS4gU2V0IGlxY2FsX21vZGVbMTowXSB0byAweDIgYW5kIHNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MSB0bworCQkJICogICAgZW5hYmxlICJJUSBhbGlicmF0aW9uIE1vZGUgSUkiCisJCQkgKi8KIAkJCXJlZ19tb2RlX2N0cmwgJj0gfihNQVNLX0lRQ0FMX1RPTkVfU0VMfE1BU0tfSVFDQUxfTU9ERSk7CiAJCQlyZWdfbW9kZV9jdHJsICY9IH5NQVNLX0lRQ0FMX01PREU7CiAJCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOwpAQCAtNzk5LDcgKzcyOCw3IEBACiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JCQkvLyBiLgorCQkJLyogYi4gKi8KIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQ0FMSUJfUkVBRDEsICZ2YWwpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOwogCkBAIC04MTMsMjEgKzc0MiwyMyBAQAogCQkJaXFfbWFnXzBfdHggPSAoczMyKSBfc3FydChzcXN1bSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBpcV9tYWdfMF90eD0lZFxuIiwgaXFfbWFnXzBfdHgpKTsKIAotCQkJLy8gYy4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwCisJCQkvKiBjLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAgKi8KIAkJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JCQkvLyBkLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MyBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCi0JCQkvLyAgICBlbmFibGUgIklRIGFsaWJyYXRpb24gTW9kZSBJSSIKLQkJCS8vaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZ2YWwpOworCQkJLyoKKwkJCSAqIGQuIFNldCBpcWNhbF9tb2RlWzE6MF0gdG8gMHgzIGFuZCBzZXQgImNhbGliX3N0YXJ0IiB0byAweDEgdG8KKwkJCSAqICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkJICovCisJCQkvKiBod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnZhbCk7ICovCiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgJnJlZ19tb2RlX2N0cmwpOwogCQkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOwogCQkJcmVnX21vZGVfY3RybCB8PSAoTUFTS19DQUxJQl9TVEFSVHwweDAzKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJCS8vIGUuCisJCQkvKiBlLiAqLwogCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBDQUxJQl9SRUFEMSA9IDB4JTA4WFxuIiwgdmFsKSk7CiAKQEAgLTgzNSwxNCArNzY2LDExIEBACiAJCQlpcWNhbF90b25lX3EgPSBfczEzX3RvX3MzMigodmFsICYgMHgwM0ZGRTAwMCkgPj4gMTMpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfdG9uZV9pID0gJWQsIGlxY2FsX3RvbmVfcSA9ICVkXG4iLAogCQkJaXFjYWxfdG9uZV9pLCBpcWNhbF90b25lX3EpKTsKLQkJCWlmKCBjYXB0dXJlX3RpbWUgPT0gMCkKLQkJCXsKKwkJCWlmIChjYXB0dXJlX3RpbWUgPT0gMCkKIAkJCQljb250aW51ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpcWNhbF90b25lX2lfYXZnPSggaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX2kpL2NhcHR1cmVfdGltZTsKLQkJCQlpcWNhbF90b25lX3FfYXZnPSggaXFjYWxfdG9uZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICtpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKKwkJCWVsc2UgeworCQkJCWlxY2FsX3RvbmVfaV9hdmcgPSAoaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2ZyA9IChpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgKyBpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKIAkJCX0KIAkJfQogCkBAIC04NTcsMTEgKzc4NSwxMCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaV9iID0gJWQsIHJvdF9xX2IgPSAlZFxuIiwKIAkJCQkgICByb3RfaV9iLCByb3RfcV9iKSk7CiAKLQkJLy8gZi4KKwkJLyogZi4gKi8KIAkJZGl2aXNvciA9ICgoaXFfbWFnXzBfdHggKiBpcV9tYWdfMF90eCAqIDIpLzEwMjQgLSByb3RfaV9iKSAqIDI7CiAKLQkJaWYgKGRpdmlzb3IgPT0gMCkKLQkJeworCQlpZiAoZGl2aXNvciA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIGRpdmlzb3I9MCB0byBjYWxjdWxhdGUgRVBTIGFuZCBUSEVUQSAhIVxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CkBAIC04NzYsMTggKzgwMywxNiBAQAogCQlwaHdfZGF0YS0+aXFfcnNkbF9nYWluX3R4X2QyID0gYV8yOwogCQlwaHdfZGF0YS0+aXFfcnNkbF9waGFzZV90eF9kMiA9IGJfMjsKIAotCQkvL2lmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpCi0JCS8vaWYgKChhYnMoYV8yKSA8IDIwMCkgJiYgKGFicyhiXzIpIDwgMjAwKSkKLQkJaWYgKChhYnMoYV8yKSA8IGFfMl90aHJlc2hvbGQpICYmIChhYnMoYl8yKSA8IGJfMl90aHJlc2hvbGQpKQotCQl7CisJCS8qIGlmICgoYWJzKGFfMikgPCAxNTApICYmIChhYnMoYl8yKSA8IDEwMCkpICovCisJCS8qIGlmICgoYWJzKGFfMikgPCAyMDApICYmIChhYnMoYl8yKSA8IDIwMCkpICovCisJCWlmICgoYWJzKGFfMikgPCBhXzJfdGhyZXNob2xkKSAmJiAoYWJzKGJfMikgPCBiXzJfdGhyZXNob2xkKSkgewogCQkJdmVyaWZ5X2NvdW50Kys7CiAKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAKLQkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQotCQkJeworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpIHsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOwogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIChFUFMsVEhFVEEpIE9LICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTg5NSwzNyArODIwLDI5IEBACiAJCQl9CiAKIAkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UKLQkJeworCQl9IGVsc2UKIAkJCXZlcmlmeV9jb3VudCA9IDA7Ci0JCX0KIAogCQlfc2luX2NvcyhiXzIsICZzaW5fYiwgJmNvc19iKTsKIAkJX3Npbl9jb3MoYl8yKjIsICZzaW5fMmIsICZjb3NfMmIpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYi8yKT0lZCwgY29zKGIvMik9JWRcbiIsIHNpbl9iLCBjb3NfYikpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBzaW4oYik9JWQsIGNvcyhiKT0lZFxuIiwgc2luXzJiLCBjb3NfMmIpKTsKIAotCQlpZiAoY29zXzJiID09IDApCi0JCXsKKwkJaWYgKGNvc18yYiA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3R4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIGNvcyhiKT0wICEhXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLy8gMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAKKwkJLyogMTI4MCAqIDMyNzY4ID0gNDE5NDMwNDAgKi8KIAkJdGVtcDEgPSAoNDE5NDMwNDAvY29zXzJiKSpjb3NfYjsKIAotCQkvL3RlbXAyID0gKDQxOTQzMDQwL2Nvc18yYikqc2luX2IqKC0xKTsKLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQkvKiB0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7ICovCisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJZWxzZSAvKiAybmQtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MCo0L2Nvc18yYikqc2luX2IqKC0xKTsKLQkJfQogCiAJCXR4X2NhbF9mbHRfYlswXSA9IF9mbG9vcih0ZW1wMS8oMzI3NjgrYV8yKSk7CiAJCXR4X2NhbF9mbHRfYlsxXSA9IF9mbG9vcih0ZW1wMi8oMzI3NjgrYV8yKSk7CkBAIC05MzcsMzcgKzg1NCwzNCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfZmx0X2JbM10gPSAlZFxuIiwgdHhfY2FsX2ZsdF9iWzNdKSk7CiAKIAkJdHhfY2FsWzJdID0gdHhfY2FsX2ZsdF9iWzJdOwotCQl0eF9jYWxbMl0gPSB0eF9jYWxbMl0gKzM7CisJCXR4X2NhbFsyXSA9IHR4X2NhbFsyXSArIDM7CiAJCXR4X2NhbFsxXSA9IHR4X2NhbFsyXTsKIAkJdHhfY2FsWzNdID0gdHhfY2FsX2ZsdF9iWzNdIC0gMTI4OwotCQl0eF9jYWxbMF0gPSAtdHhfY2FsWzNdKzE7CisJCXR4X2NhbFswXSA9IC10eF9jYWxbM10gKyAxOwogCiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFswXSA9ICVkXG4iLCB0eF9jYWxbMF0pKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgdHhfY2FsWzFdID0gJWRcbiIsIHR4X2NhbFsxXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxbMl0gPSAlZFxuIiwgdHhfY2FsWzJdKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbFszXSA9ICVkXG4iLCB0eF9jYWxbM10pKTsKIAotCQkvL2lmICgodHhfY2FsWzBdID09IDApICYmICh0eF9jYWxbMV0gPT0gMCkgJiYKLQkJLy8gICAgKHR4X2NhbFsyXSA9PSAwKSAmJiAodHhfY2FsWzNdID09IDApKQotCQkvL3sKLQkJLy8gICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7Ci0JCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIENPTVBMRVRFICEhXG4iKSk7Ci0JCS8vICAgIFBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwotCQkvLyAgICByZXR1cm4gMDsKLQkJLy99CisJCS8qIGlmICgodHhfY2FsWzBdID09IDApICYmICh0eF9jYWxbMV0gPT0gMCkgJiYKKwkJICAgICAgKHR4X2NhbFsyXSA9PSAwKSAmJiAodHhfY2FsWzNdID09IDApKQorCQkgIHsgKi8KKwkJLyogICAgUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKioqKioqXG4iKSk7CisJCSAqICAgIFBIWV9ERUJVRygoIltDQUxdICoqIFRYX0lRX0NBTElCUkFUSU9OIENPTVBMRVRFICEhXG4iKSk7CisJCSAqICAgIFBIWV9ERUJVRygoIltDQUxdICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOworCQkgKiAgICByZXR1cm4gMDsKKwkJICB9ICovCiAKLQkJLy8gZy4KLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQkvKiBnLiAqLworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJdHhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4RjAwMDAwMDApID4+IDI4KTsKIAkJCXR4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDBGMDAwMDAwKSA+PiAyNCk7CiAJCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOwogCQkJdHhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwRjAwMDApID4+IDE2KTsKLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJeworCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCAmdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJdHhfY2FsX3JlZ1swXSA9IF9zNV90b19zMzIoKHZhbCAmIDB4RjgwMDAwMDApID4+IDI3KTsKQEAgLTk4MiwyMiArODk2LDE3IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHR4X2NhbF9yZWdbMl0gPSAlZFxuIiwgdHhfY2FsX3JlZ1syXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICB0eF9jYWxfcmVnWzNdID0gJWRcbiIsIHR4X2NhbF9yZWdbM10pKTsKIAotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7Ci0JCQlpZiAoKCh0eF9jYWxfcmVnWzBdPT03KSB8fCAodHhfY2FsX3JlZ1swXT09KC04KSkpICYmCi0JCQkJKCh0eF9jYWxfcmVnWzNdPT03KSB8fCAodHhfY2FsX3JlZ1szXT09KC04KSkpKQotCQkJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKKwkJCWlmICgoKHR4X2NhbF9yZWdbMF0gPT0gNykgfHwgKHR4X2NhbF9yZWdbMF0gPT0gKC04KSkpICYmCisJCQkJKCh0eF9jYWxfcmVnWzNdID09IDcpIHx8ICh0eF9jYWxfcmVnWzNdID09ICgtOCkpKSkgewogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJewotCQkJaWYgKCgodHhfY2FsX3JlZ1swXT09MzEpIHx8ICh0eF9jYWxfcmVnWzBdPT0oLTMyKSkpICYmCi0JCQkJKCh0eF9jYWxfcmVnWzNdPT0zMSkgfHwgKHR4X2NhbF9yZWdbM109PSgtMzIpKSkpCi0JCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0ICoveworCQkJaWYgKCgodHhfY2FsX3JlZ1swXSA9PSAzMSkgfHwgKHR4X2NhbF9yZWdbMF0gPT0gKC0zMikpKSAmJgorCQkJCSgodHhfY2FsX3JlZ1szXSA9PSAzMSkgfHwgKHR4X2NhbF9yZWdbM10gPT0gKC0zMikpKSkgewogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfdHhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gU0FUVUFUSU9OICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTEwMTQsOCArOTIzLDcgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgYXBwbHkgdHhfY2FsWzJdID0gJWRcbiIsIHR4X2NhbFsyXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSB0eF9jYWxbM10gPSAlZFxuIiwgdHhfY2FsWzNdKSk7CiAKLQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJeworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCXZhbCAmPSAweDAwMDBGRkZGOwogCQkJdmFsIHw9ICgoX3MzMl90b19zNCh0eF9jYWxbMF0pIDw8IDI4KXwKIAkJCQkJKF9zMzJfdG9fczQodHhfY2FsWzFdKSA8PCAyNCl8CkBAIC0xMDI0LDkgKzkzMiw3IEBACiAJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIENBTElCX0RBVEEgPSAweCUwOFhcbiIsIHZhbCkpOwogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJfSBlbHNlIC8qIDJuZC1jdXQgKi97CiAJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCXZhbCB8PSAoKF9zMzJfdG9fczUodHhfY2FsWzBdKSA8PCAyNyl8CiAJCQkJCShfczMyX3RvX3M2KHR4X2NhbFsxXSkgPDwgMjEpfApAQCAtMTAzNyw3ICs5NDMsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJLyogaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwICovCiAJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7CiAJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKQEAgLTEwNjEsMjYgKzk2NywyNiBAQAogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzRdX3R4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKIAotCS8vMHgwMSAweEVFM0ZDMiAgOyAzQjhGRiAgOyBDYWxpYnJhdGlvbiAoNmEpLiBlbmFibGUgVFggSVEgY2FsaWJyYXRpb24gbG9vcCBjaXJjdWl0cworCS8qIDB4MDEgMHhFRTNGQzIgIDsgM0I4RkYgIDsgQ2FsaWJyYXRpb24gKDZhKS4gZW5hYmxlIFRYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRTNGQzIpOwotCS8vMHgwQiAweDE5MDVENiAgOyAwNjQxNyAgOyBDYWxpYnJhdGlvbiAoNmIpLiBlbmFibGUgVFggSS9RIGNhbCBsb29wIHNxdWFyaW5nIGNpcmN1aXQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDE5QkRENik7IC8vIDIwMDYwNjEyLjEuYSAweDE5MDVENik7Ci0JLy8weDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM2MEEpOyAvLzB4MjRDNjBBIChoaWdoIHRlbXBlcmF0dXJlKQotICAgIC8vMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgzNDg4MEMpOyAvLyAyMDA2MDYxMi4xLmEgMHgwNjg5MEMpOwotCS8vMHgwMCAweEZERjFDMCAgOyAzRjdDNyAgOyBDYWxpYnJhdGlvbiAoNmUpLiB0dXJuIG9uIElRIGltYmFsYW5jZS9UZXN0IG1vZGUKKwkvKiAweDBCIDB4MTkwNUQ2ICA7IDA2NDE3ICA7IENhbGlicmF0aW9uICg2YikuIGVuYWJsZSBUWCBJL1EgY2FsIGxvb3Agc3F1YXJpbmcgY2lyY3VpdCAqLworCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMTEsICgxMTw8MjQpfDB4MTlCREQ2KTsgLyogMjAwNjA2MTIuMS5hIDB4MTkwNUQ2KTsgKi8KKwkvKiAweDA1IDB4MjRDNjBBICA7IDA5MzE4ICA7IENhbGlicmF0aW9uICg2YykuIHNldHRpbmcgVFgtVkdBIGdhaW46IFRYR0NIPTIgJiBHUEs9MTEwIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8MHgyNEM2MEEpOyAvKiAweDI0QzYwQSAoaGlnaCB0ZW1wZXJhdHVyZSkgKi8KKyAgICAgICAgLyogMHgwNiAweDA2ODgwQyAgOyAwMUEyMCAgOyBDYWxpYnJhdGlvbiAoNmQpLiBSWEdDSD0wMDsgUlhHQ0w9MTAwIDAwMCAoUlhWR0E9MzIpIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDYsICg2PDwyNCl8MHgzNDg4MEMpOyAvKiAyMDA2MDYxMi4xLmEgMHgwNjg5MEMpOyAqLworCS8qIDB4MDAgMHhGREYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDZlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkRGMUMwKTsKLQkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmYpLlNlbmQgdGVzdCBwYXR0ZXJuCi0JLy87IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKLQkvLzsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmgpLiBDYWN1bGF0ZSBUWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBUWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZQotCS8vcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAzLCAoMzw8MjQpfDB4MDI1NTg2KTsKKwkvKiA7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDZmKS5TZW5kIHRlc3QgcGF0dGVybiAqLworCS8qIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmcpLiBTZWFyY2ggUlhHQ0wgb3B0aW1hbCB2YWx1ZSAqLworCS8qIDsgW0JCLWNoaXBdOiBDYWxpYnJhdGlvbiAoNmgpLiBDYWN1bGF0ZSBUWC1wYXRoIElRIGltYmFsYW5jZSBhbmQgc2V0dGluZyBUWCBwYXRoIElRIGNvbXBlbnNhdGlvbiB0YWJsZSAqLworCS8qIHBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgMywgKDM8PDI0KXwweDAyNTU4Nik7ICovCiAKLQltc2xlZXAoMzApOyAvLyAyMDA2MDYxMi4xLmEgMzBtcyBkZWxheS4gQWRkIHRoZSBmb2xsb3cgMiBsaW5lcwotCS8vVG8gYWRqdXN0IFRYVkdBIHRvIGZpdCBpcV9tYWdfMCByYW5nZSBmcm9tIDEyNTAgfiAxNzUwCi0JYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoIHBod19kYXRhICk7CisJbXNsZWVwKDMwKTsgLyogMjAwNjA2MTIuMS5hIDMwbXMgZGVsYXkuIEFkZCB0aGUgZm9sbG93IDIgbGluZXMgKi8KKwkvKiBUbyBhZGp1c3QgVFhWR0EgdG8gZml0IGlxX21hZ18wIHJhbmdlIGZyb20gMTI1MCB+IDE3NTAgKi8KKwlhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhwaHdfZGF0YSk7CiAKLQkvLyBhLiBEaXNhYmxlIEFHQworCS8qIGEuIERpc2FibGUgQUdDICovCiAJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZyZWdfYWdjX2N0cmwzKTsKIAlyZWdfYWdjX2N0cmwzICY9IH5CSVQoMik7CiAJcmVnX2FnY19jdHJsMyB8PSAoTUFTS19MTkFfRklYX0dBSU58TUFTS19BR0NfRklYKTsKQEAgLTEwOTIsMTYgKzk5OCwxMiBAQAogCiAJcmVzdWx0ID0gX3R4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgMTUwLCAxMDApOwogCi0JaWYgKHJlc3VsdCA+IDApCi0JewotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJaWYgKHJlc3VsdCA+IDApIHsKKwkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8qIDFzdC1jdXQgKi97CiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0Ki97CiAJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDNDLCB2YWwpOwpAQCAtMTEwOSwzMiArMTAxMSwyNCBAQAogCiAJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDMwMCwgMjAwKTsKIAotCQlpZiAocmVzdWx0ID4gMCkKLQkJewotCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8vIDFzdC1jdXQKLQkJCXsKKwkJaWYgKHJlc3VsdCA+IDApIHsKKwkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCAmdmFsKTsKIAkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgdmFsKTsKLQkJCX0KLQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJeworCQkJfSBlbHNlIC8qIDJuZC1jdXQqL3sKIAkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CiAJCQl9CiAKIAkJCXJlc3VsdCA9IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQocGh3X2RhdGEsIDUwMCwgNDAwKTsKLQkJCWlmIChyZXN1bHQgPiAwKQotCQkJewotCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCQkJeworCQkJaWYgKHJlc3VsdCA+IDApIHsKKwkJCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwogCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsIHZhbCk7Ci0JCQkJfQotCQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJCXsKKwkJCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOwogCQkJCQl2YWwgJj0gMHgwMDAwMDNGRjsKIAkJCQkJaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsIHZhbCk7CkBAIC0xMTQzLDIwICsxMDM3LDE2IEBACiAKIAkJCQlyZXN1bHQgPSBfdHhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA3MDAsIDUwMCk7CiAKLQkJCQlpZiAocmVzdWx0ID4gMCkKLQkJCQl7CisJCQkJaWYgKHJlc3VsdCA+IDApIHsKIAkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF90eF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKIAkJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVFhfSVFfQ0FMSUJSQVRJT04gRkFJTFVSRSAhIVxuIikpOwogCQkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwogCi0JCQkJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCQkJCXsKKwkJCQkJaWYgKHBod19kYXRhLT5yZXZpc2lvbiA9PSAweDIwMDIpIC8qIDFzdC1jdXQgKi97CiAJCQkJCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCQkJCQl2YWwgJj0gMHgwMDAwRkZGRjsKIAkJCQkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQkJCQl9Ci0JCQkJCWVsc2UgLy8gMm5kLWN1dAotCQkJCQl7CisJCQkJCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQkJCQkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4M0MsICZ2YWwpOwogCQkJCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQkJCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgdmFsKTsKQEAgLTExNjYsMzAgKzEwNTYsMjcgQEAKIAkJfQogCX0KIAotCS8vIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MAorCS8qIGkuIFNldCAiY2FsaWJfc3RhcnQiIHRvIDB4MCAqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CiAJcmVnX21vZGVfY3RybCAmPSB+TUFTS19DQUxJQl9TVEFSVDsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMICh3cml0ZSkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIAotCS8vIGcuIEVuYWJsZSBBR0MKLQkvL2h3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCAmdmFsKTsKKwkvKiBnLiBFbmFibGUgQUdDICovCisJLyogaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19BR0NfQ1RSTDMsICZ2YWwpOyAqLwogCXJlZ19hZ2NfY3RybDMgfD0gQklUKDIpOwogCXJlZ19hZ2NfY3RybDMgJj0gfihNQVNLX0xOQV9GSVhfR0FJTnxNQVNLX0FHQ19GSVgpOwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfQUdDX0NUUkwzLCByZWdfYWdjX2N0cmwzKTsKIAogI2lmZGVmIF9ERUJVRwotCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JeworCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4NTQgPSAweCUwOFhcbiIsIHZhbCkpOwogCQl0eF9jYWxfcmVnWzBdID0gX3M0X3RvX3MzMigodmFsICYgMHhGMDAwMDAwMCkgPj4gMjgpOwogCQl0eF9jYWxfcmVnWzFdID0gX3M0X3RvX3MzMigodmFsICYgMHgwRjAwMDAwMCkgPj4gMjQpOwogCQl0eF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMEYwMDAwMCkgPj4gMjApOwogCQl0eF9jYWxfcmVnWzNdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDBGMDAwMCkgPj4gMTYpOwotCX0KLQllbHNlIC8vIDJuZC1jdXQKLQl7CisJfSBlbHNlIC8qIDJuZC1jdXQgKi8gewogCQlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHgzQywgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIDB4M0MgPSAweCUwOFhcbiIsIHZhbCkpOwogCQl0eF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOwpAQCAtMTIwNiwxMSArMTA5MywxMyBAQAogI2VuZGlmCiAKIAotCS8vIGZvciB0ZXN0IC0gQkVOCi0JLy8gUkYgQ29udHJvbCBPdmVycmlkZQorCS8qCisJICogZm9yIHRlc3QgLSBCRU4KKwkgKiBSRiBDb250cm9sIE92ZXJyaWRlCisJICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTE2IGZhY3RvciwgdTMyIGZyZXF1ZW5jeSkKIHsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC0xMjM2LDUxICsxMTI1LDQ5IEBACiAJdTMyICAgICBwd3JfaW1hZ2U7CiAJdTggICAgICB2ZXJpZnlfY291bnQ7CiAKLQlzMzIgICAgIGlxY2FsX3RvbmVfaV9hdmcsaXFjYWxfdG9uZV9xX2F2ZzsKLQlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLGlxY2FsX2ltYWdlX3FfYXZnOwotCXUxNgkJY2FwdHVyZV90aW1lOworCXMzMiAgICAgaXFjYWxfdG9uZV9pX2F2ZywgaXFjYWxfdG9uZV9xX2F2ZzsKKwlzMzIgICAgIGlxY2FsX2ltYWdlX2lfYXZnLCBpcWNhbF9pbWFnZV9xX2F2ZzsKKwl1MTYJY2FwdHVyZV90aW1lOwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uX2xvb3AoKVxuIikpOwogCVBIWV9ERUJVRygoIltDQUxdICoqIGZhY3RvciA9ICVkXG4iLCBmYWN0b3IpKTsKIAogCi0vLyBSRiBDb250cm9sIE92ZXJyaWRlCisvKiBSRiBDb250cm9sIE92ZXJyaWRlICovCiAJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4ODAsICZ2YWwpOwogCXZhbCB8PSBCSVQoMTkpOwogCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweDgwLCB2YWwpOwogCi0vLyBSRl9DdHJsCisvKiBSRl9DdHJsICovCiAJaHdfZ2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsICZ2YWwpOwogCXZhbCB8PSBCSVQoMCk7CiAJaHdfc2V0X2N4eF9yZWcocGh3X2RhdGEsIDB4RTQsIHZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gKiogUkZfQ1RSTCgweEU0KSA9IDB4JTA4WCIsIHZhbCkpOwogCi0JaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTgsIDB4NDQ0NDQ0NDQpOyAvLyBJUV9BbHBoYQorCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAweDQ0NDQ0NDQ0KTsgLyogSVFfQWxwaGEgKi8KIAotCS8vIGIuCisJLyogYi4gKi8KIAogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgTU9ERV9DVFJMIChyZWFkKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCiAJdmVyaWZ5X2NvdW50ID0gMDsKIAotCS8vZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykKLQkvL2ZvciAobG9vcCA9IDA7IGxvb3AgPCBMT09QX1RJTUVTOyBsb29wKyspCisJLyogZm9yIChsb29wID0gMDsgbG9vcCA8IDE7IGxvb3ArKykgKi8KKwkvKiBmb3IgKGxvb3AgPSAwOyBsb29wIDwgTE9PUF9USU1FUzsgbG9vcCsrKSAqLwogCWxvb3AgPSBMT09QX1RJTUVTOwotCXdoaWxlIChsb29wID4gMCkKLQl7CisJd2hpbGUgKGxvb3AgPiAwKSB7CiAJCVBIWV9ERUJVRygoIltDQUxdIFslZC5dIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD5cbiIsIChMT09QX1RJTUVTLWxvb3ArMSkpKTsKLQkJaXFjYWxfdG9uZV9pX2F2Zz0wOwotCQlpcWNhbF90b25lX3FfYXZnPTA7Ci0JCWlxY2FsX2ltYWdlX2lfYXZnPTA7Ci0JCWlxY2FsX2ltYWdlX3FfYXZnPTA7Ci0JCWNhcHR1cmVfdGltZT0wOworCQlpcWNhbF90b25lX2lfYXZnID0gMDsKKwkJaXFjYWxfdG9uZV9xX2F2ZyA9IDA7CisJCWlxY2FsX2ltYWdlX2lfYXZnID0gMDsKKwkJaXFjYWxfaW1hZ2VfcV9hdmcgPSAwOworCQljYXB0dXJlX3RpbWUgPSAwOwogCi0JCWZvcihjYXB0dXJlX3RpbWU9MDsgY2FwdHVyZV90aW1lPDEwOyBjYXB0dXJlX3RpbWUrKykKLQkJewotCQkvLyBpLiBTZXQgImNhbGliX3N0YXJ0IiB0byAweDAKKwkJZm9yIChjYXB0dXJlX3RpbWUgPSAwOyBjYXB0dXJlX3RpbWUgPCAxMDsgY2FwdHVyZV90aW1lKyspIHsKKwkJLyogaS4gU2V0ICJjYWxpYl9zdGFydCIgdG8gMHgwICovCiAJCXJlZ19tb2RlX2N0cmwgJj0gfk1BU0tfQ0FMSUJfU1RBUlQ7Ci0JCWlmKCAhaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpICkvLzIwMDYwNzE4LjEgbW9kaWZ5CisJCWlmICghaHdfc2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsIHJlZ19tb2RlX2N0cmwpKS8qMjAwNjA3MTguMSBtb2RpZnkgKi8KIAkJCXJldHVybiAwOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCkBAIC0xMjg5LDcgKzExNzYsNyBAQAogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJLy8gYy4KKwkJLyogYy4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIENBTElCX1JFQUQxID0gMHglMDhYXG4iLCB2YWwpKTsKIApAQCAtMTMwNSwxNiArMTE5MiwxMyBAQAogCQlpcWNhbF9pbWFnZV9xID0gX3MxM190b19zMzIoKHZhbCAmIDB4MDNGRkUwMDApID4+IDEzKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogaXFjYWxfaW1hZ2VfaSA9ICVkLCBpcWNhbF9pbWFnZV9xID0gJWRcbiIsCiAJCQkJICAgaXFjYWxfaW1hZ2VfaSwgaXFjYWxfaW1hZ2VfcSkpOwotCQkJaWYoIGNhcHR1cmVfdGltZSA9PSAwKQotCQkJeworCQkJaWYgKGNhcHR1cmVfdGltZSA9PSAwKQogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWlxY2FsX2ltYWdlX2lfYXZnPSggaXFjYWxfaW1hZ2VfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfaSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX2ltYWdlX3FfYXZnPSggaXFjYWxfaW1hZ2VfcV9hdmcqKGNhcHR1cmVfdGltZS0xKSAraXFjYWxfaW1hZ2VfcSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX3RvbmVfaV9hdmc9KCBpcWNhbF90b25lX2lfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfaSkvY2FwdHVyZV90aW1lOwotCQkJCWlxY2FsX3RvbmVfcV9hdmc9KCBpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgK2lxY2FsX3RvbmVfcSkvY2FwdHVyZV90aW1lOworCQkJZWxzZSB7CisJCQkJaXFjYWxfaW1hZ2VfaV9hdmcgPSAoaXFjYWxfaW1hZ2VfaV9hdmcqKGNhcHR1cmVfdGltZS0xKSArIGlxY2FsX2ltYWdlX2kpL2NhcHR1cmVfdGltZTsKKwkJCQlpcWNhbF9pbWFnZV9xX2F2ZyA9IChpcWNhbF9pbWFnZV9xX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfaW1hZ2VfcSkvY2FwdHVyZV90aW1lOworCQkJCWlxY2FsX3RvbmVfaV9hdmcgPSAoaXFjYWxfdG9uZV9pX2F2ZyooY2FwdHVyZV90aW1lLTEpICsgaXFjYWxfdG9uZV9pKS9jYXB0dXJlX3RpbWU7CisJCQkJaXFjYWxfdG9uZV9xX2F2ZyA9IChpcWNhbF90b25lX3FfYXZnKihjYXB0dXJlX3RpbWUtMSkgKyBpcWNhbF90b25lX3EpL2NhcHR1cmVfdGltZTsKIAkJCX0KIAkJfQogCkBAIC0xMzI0LDcgKzEyMDgsNyBAQAogCQlpcWNhbF90b25lX2kgPSBpcWNhbF90b25lX2lfYXZnOwogCQlpcWNhbF90b25lX3EgPSBpcWNhbF90b25lX3FfYXZnOwogCi0JCS8vIGQuCisJCS8qIGQuICovCiAJCXJvdF90b25lX2lfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX2kgKwogCQkJCQkJaXFjYWxfdG9uZV9xICogaXFjYWxfdG9uZV9xKSAvIDEwMjQ7CiAJCXJvdF90b25lX3FfYiA9IChpcWNhbF90b25lX2kgKiBpcWNhbF90b25lX3EgKiAoLTEpICsKQEAgLTEzMzksOSArMTIyMyw4IEBACiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHJvdF9pbWFnZV9pX2IgPSAlZFxuIiwgcm90X2ltYWdlX2lfYikpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiByb3RfaW1hZ2VfcV9iID0gJWRcbiIsIHJvdF9pbWFnZV9xX2IpKTsKIAotCQkvLyBmLgotCQlpZiAocm90X3RvbmVfaV9iID09IDApCi0JCXsKKwkJLyogZi4gKi8KKwkJaWYgKHJvdF90b25lX2lfYiA9PSAwKSB7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+IEVSUk9SICoqKioqKipcbiIpKTsKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIHJvdF90b25lX2lfYj0wIHRvIGNhbGN1bGF0ZSBFUFMgYW5kIFRIRVRBICEhXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTEzNjMsMjYgKzEyNDYsMjEgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIvMik9JWQsIGNvcyhiLzIpPSVkXG4iLCBzaW5fYiwgY29zX2IpKTsKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogc2luKGIpPSVkLCBjb3MoYik9JWRcbiIsIHNpbl8yYiwgY29zXzJiKSk7CiAKLQkJaWYgKGNvc18yYiA9PSAwKQotCQl7CisJCWlmIChjb3NfMmIgPT0gMCkgewogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiBFUlJPUiAqKioqKioqXG4iKSk7CiAJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBjb3MoYik9MCAhIVxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAJCQlicmVhazsKIAkJfQogCi0JCS8vIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwCisJCS8qIDEyODAgKiAzMjc2OCA9IDQxOTQzMDQwICovCiAJCXRlbXAxID0gKDQxOTQzMDQwL2Nvc18yYikqY29zX2I7CiAKLQkJLy90ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCXsKKwkJLyogdGVtcDIgPSAoNDE5NDMwNDAvY29zXzJiKSpzaW5fYiooLTEpOyAqLworCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikvKiAxc3QtY3V0ICovCiAJCQl0ZW1wMiA9ICg0MTk0MzA0MC9jb3NfMmIpKnNpbl9iKigtMSk7Ci0JCX0KLQkJZWxzZSAvLyAybmQtY3V0Ci0JCXsKKwkJZWxzZS8qIDJuZC1jdXQgKi8KIAkJCXRlbXAyID0gKDQxOTQzMDQwKjQvY29zXzJiKSpzaW5fYiooLTEpOwotCQl9CiAKIAkJcnhfY2FsX2ZsdF9iWzBdID0gX2Zsb29yKHRlbXAxLygzMjc2OCthXzIpKTsKIAkJcnhfY2FsX2ZsdF9iWzFdID0gX2Zsb29yKHRlbXAyLygzMjc2OC1hXzIpKTsKQEAgLTE0MDMsMjMgKzEyODEsMjEgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsWzJdID0gJWRcbiIsIHJ4X2NhbFsyXSkpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CiAKLQkJLy8gZS4KKwkJLyogZS4gKi8KIAkJcHdyX3RvbmUgPSAoaXFjYWxfdG9uZV9pKmlxY2FsX3RvbmVfaSArIGlxY2FsX3RvbmVfcSppcWNhbF90b25lX3EpOwogCQlwd3JfaW1hZ2UgPSAoaXFjYWxfaW1hZ2VfaSppcWNhbF9pbWFnZV9pICsgaXFjYWxfaW1hZ2VfcSppcWNhbF9pbWFnZV9xKSpmYWN0b3I7CiAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogcHdyX3RvbmUgID0gJWRcbiIsIHB3cl90b25lKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICoqIHB3cl9pbWFnZSAgPSAlZFxuIiwgcHdyX2ltYWdlKSk7CiAKLQkJaWYgKHB3cl90b25lID4gcHdyX2ltYWdlKQotCQl7CisJCWlmIChwd3JfdG9uZSA+IHB3cl9pbWFnZSkgewogCQkJdmVyaWZ5X2NvdW50Kys7CiAKIAkJCVBIWV9ERUJVRygoIltDQUxdICoqIDxfcnhfaXFfY2FsaWJyYXRpb25fbG9vcD4gKioqKioqKioqKioqKlxuIikpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogVkVSSUZZIE9LICMgJWQgISFcbiIsIHZlcmlmeV9jb3VudCkpOwogCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKSk7CiAKLQkJCWlmICh2ZXJpZnlfY291bnQgPiAyKQotCQkJeworCQkJaWYgKHZlcmlmeV9jb3VudCA+IDIpIHsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiA8X3J4X2lxX2NhbGlicmF0aW9uX2xvb3A+ICoqKioqKioqKlxuIikpOwogCQkJCVBIWV9ERUJVRygoIltDQUxdICoqIFJYX0lRX0NBTElCUkFUSU9OIE9LICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTE0MjgsMTkgKzEzMDQsMTYgQEAKIAogCQkJY29udGludWU7CiAJCX0KLQkJLy8gZy4KKwkJLyogZy4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiAweDU0ID0gMHglMDhYXG4iLCB2YWwpKTsKIAotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKIAkJCXJ4X2NhbF9yZWdbMV0gPSBfczRfdG9fczMyKCh2YWwgJiAweDAwMDAwRjAwKSA+PiAgOCk7CiAJCQlyeF9jYWxfcmVnWzJdID0gX3M0X3RvX3MzMigodmFsICYgMHgwMDAwMDBGMCkgPj4gIDQpOwogCQkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKLQkJfQotCQllbHNlIC8vIDJuZC1jdXQKLQkJeworCQl9IGVsc2UgLyogMm5kLWN1dCAqL3sKIAkJCXJ4X2NhbF9yZWdbMF0gPSBfczVfdG9fczMyKCh2YWwgJiAweEY4MDAwMDAwKSA+PiAyNyk7CiAJCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOwogCQkJcnhfY2FsX3JlZ1syXSA9IF9zNl90b19zMzIoKHZhbCAmIDB4MDAxRjgwMDApID4+IDE1KTsKQEAgLTE0NTIsMjIgKzEzMjUsMTcgQEAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgICAgcnhfY2FsX3JlZ1syXSA9ICVkXG4iLCByeF9jYWxfcmVnWzJdKSk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgICAgIHJ4X2NhbF9yZWdbM10gPSAlZFxuIiwgcnhfY2FsX3JlZ1szXSkpOwogCi0JCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvLyAxc3QtY3V0Ci0JCXsKLQkJCWlmICgoKHJ4X2NhbF9yZWdbMF09PTcpIHx8IChyeF9jYWxfcmVnWzBdPT0oLTgpKSkgJiYKLQkJCQkoKHJ4X2NhbF9yZWdbM109PTcpIHx8IChyeF9jYWxfcmVnWzNdPT0oLTgpKSkpCi0JCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICoveworCQkJaWYgKCgocnhfY2FsX3JlZ1swXSA9PSA3KSB8fCAocnhfY2FsX3JlZ1swXSA9PSAoLTgpKSkgJiYKKwkJCQkoKHJ4X2NhbF9yZWdbM10gPT0gNykgfHwgKHJ4X2NhbF9yZWdbM10gPT0gKC04KSkpKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7Ci0JCQlpZiAoKChyeF9jYWxfcmVnWzBdPT0zMSkgfHwgKHJ4X2NhbF9yZWdbMF09PSgtMzIpKSkgJiYKLQkJCQkoKHJ4X2NhbF9yZWdbM109PTMxKSB8fCAocnhfY2FsX3JlZ1szXT09KC0zMikpKSkKLQkJCXsKKwkJfSBlbHNlIC8qIDJuZC1jdXQgKi97CisJCQlpZiAoKChyeF9jYWxfcmVnWzBdID09IDMxKSB8fCAocnhfY2FsX3JlZ1swXSA9PSAoLTMyKSkpICYmCisJCQkJKChyeF9jYWxfcmVnWzNdID09IDMxKSB8fCAocnhfY2FsX3JlZ1szXSA9PSAoLTMyKSkpKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbl9sb29wPiAqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBTQVRVQVRJT04gISFcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIikpOwpAQCAtMTQ4NSwxNyArMTM1MywxNCBAQAogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAgICBhcHBseSByeF9jYWxbM10gPSAlZFxuIiwgcnhfY2FsWzNdKSk7CiAKIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIDB4NTQsICZ2YWwpOwotCQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCQl7CisJCWlmIChwaHdfZGF0YS0+cmV2aXNpb24gPT0gMHgyMDAyKSAvKiAxc3QtY3V0ICovewogCQkJdmFsICY9IDB4MDAwMEZGRkY7CiAJCQl2YWwgfD0gKChfczMyX3RvX3M0KHJ4X2NhbFswXSkgPDwgMTIpfAogCQkJCQkoX3MzMl90b19zNChyeF9jYWxbMV0pIDw8ICA4KXwKIAkJCQkJKF9zMzJfdG9fczQocnhfY2FsWzJdKSA8PCAgNCl8CiAJCQkJCShfczMyX3RvX3M0KHJ4X2NhbFszXSkpKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwotCQl9Ci0JCWVsc2UgLy8gMm5kLWN1dAotCQl7CisJCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQkJdmFsICY9IDB4MDAwMDAzRkY7CiAJCQl2YWwgfD0gKChfczMyX3RvX3M1KHJ4X2NhbFswXSkgPDwgMjcpfAogCQkJCQkoX3MzMl90b19zNihyeF9jYWxbMV0pIDw8IDIxKXwKQEAgLTE1MDMsNyArMTM2OCw3IEBACiAJCQkJCShfczMyX3RvX3M1KHJ4X2NhbFszXSkgPDwgMTApKTsKIAkJCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCAweDU0LCB2YWwpOwogCi0JCQlpZiggbG9vcCA9PSAzICkKKwkJCWlmIChsb29wID09IDMpCiAJCQlyZXR1cm4gMDsKIAkJfQogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBDQUxJQl9EQVRBID0gMHglMDhYXG4iLCB2YWwpKTsKQEAgLTE1MTQsMTIgKzEzNzksMTIgQEAKIAlyZXR1cm4gMTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7Ci0vLyBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aHNpIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlCisvKiBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aGlzIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlICovCiAjaWZkZWYgX0RFQlVHCiAJczMyICAgICByeF9jYWxfcmVnWzRdOwogCXUzMiAgICAgdmFsOwpAQCAtMTUyOCwzNyArMTM5MywzNCBAQAogCXU4ICAgICAgcmVzdWx0OwogCiAJUEhZX0RFQlVHKCgiW0NBTF0gLT4gWzVdX3J4X2lxX2NhbGlicmF0aW9uKClcbiIpKTsKLS8vIGEuIFNldCBSRklDIHRvICJSWCBjYWxpYnJhdGlvbiBtb2RlIgotCS8vOyAtLS0tLSBDYWxpYnJhdGlvbiAoNykuIFJYIHBhdGggSVEgaW1iYWxhbmNlIGNhbGlicmF0aW9uIGxvb3AKLQkvLwkweDAxIDB4RkZCRkMyICA7IDNGRUZGICA7IENhbGlicmF0aW9uICg3YSkuIGVuYWJsZSBSWCBJUSBjYWxpYnJhdGlvbiBsb29wIGNpcmN1aXRzCisvKiBhLiBTZXQgUkZJQyB0byAiUlggY2FsaWJyYXRpb24gbW9kZSIgKi8KKwkvKiA7IC0tLS0tIENhbGlicmF0aW9uICg3KS4gUlggcGF0aCBJUSBpbWJhbGFuY2UgY2FsaWJyYXRpb24gbG9vcCAqLworCS8qCTB4MDEgMHhGRkJGQzIgIDsgM0ZFRkYgIDsgQ2FsaWJyYXRpb24gKDdhKS4gZW5hYmxlIFJYIElRIGNhbGlicmF0aW9uIGxvb3AgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDEsICgxPDwyNCl8MHhFRkJGQzIpOwotCS8vCTB4MEIgMHgxQTAxRDYgIDsgMDY4MTcgIDsgQ2FsaWJyYXRpb24gKDdiKS4gZW5hYmxlIFJYIEkvUSBjYWwgbG9vcCBTVzEgY2lyY3VpdAorCS8qCTB4MEIgMHgxQTAxRDYgIDsgMDY4MTcgIDsgQ2FsaWJyYXRpb24gKDdiKS4gZW5hYmxlIFJYIEkvUSBjYWwgbG9vcCBTVzEgY2lyY3VpdHMgKi8KIAlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDExLCAoMTE8PDI0KXwweDFBMDVENik7Ci0JLy8weDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQKLQlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCl8IHBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwpOwotCS8vMHgwNiAweDA2ODQwQyAgOyAwMUExMCAgOyBDYWxpYnJhdGlvbiAoN2QpLiBSWEdDSD0wMDsgUlhHQ0w9MDEwIDAwMCAoUlhWR0EpIC0tPiB0byBiZSBvcHRpbWl6ZWQKKwkvKiAweDA1IDB4MjQ4NDhBICA7IDA5MjEyICA7IENhbGlicmF0aW9uICg3YykuIHNldHRpbmcgVFgtVkdBIGdhaW4gKFRYR0NIKSB0byAyIC0tPiB0byBiZSBvcHRpbWl6ZWQgKi8KKwlwaHlfc2V0X3JmX2RhdGEocGh3X2RhdGEsIDUsICg1PDwyNCkgfCBwaHdfZGF0YS0+dHh2Z2Ffc2V0dGluZ19mb3JfY2FsKTsKKwkvKiAweDA2IDB4MDY4NDBDICA7IDAxQTEwICA7IENhbGlicmF0aW9uICg3ZCkuIFJYR0NIPTAwOyBSWEdDTD0wMTAgMDAwIChSWFZHQSkgLS0+IHRvIGJlIG9wdGltaXplZCAqLwogCXBoeV9zZXRfcmZfZGF0YShwaHdfZGF0YSwgNiwgKDY8PDI0KXwweDA2ODM0Qyk7Ci0JLy8weDAwIDB4RkZGMUMwICA7IDNGN0M3ICA7IENhbGlicmF0aW9uICg3ZSkuIHR1cm4gb24gSVEgaW1iYWxhbmNlL1Rlc3QgbW9kZQorCS8qIDB4MDAgMHhGRkYxQzAgIDsgM0Y3QzcgIDsgQ2FsaWJyYXRpb24gKDdlKS4gdHVybiBvbiBJUSBpbWJhbGFuY2UvVGVzdCBtb2RlICovCiAJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCAwLCAoMDw8MjQpfDB4RkZGMUMwKTsKIAotCS8vICA7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdmKS4gU2VuZCB0ZXN0IHBhdHRlcm4KLQkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdnKS4gU2VhcmNoIFJYR0NMIG9wdGltYWwgdmFsdWUKLQkvLwk7IFtCQi1jaGlwXTogQ2FsaWJyYXRpb24gKDdoKS4gQ2FjdWxhdGUgUlgtcGF0aCBJUSBpbWJhbGFuY2UgYW5kIHNldHRpbmcgUlggcGF0aCBJUSBjb21wZW5zYXRpb24gdGFibGUKKwkvKiAgOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZikuIFNlbmQgdGVzdCBwYXR0ZXJuICovCisJLyoJOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3ZykuIFNlYXJjaCBSWEdDTCBvcHRpbWFsIHZhbHVlICovCisJLyoJOyBbQkItY2hpcF06IENhbGlicmF0aW9uICg3aCkuIENhY3VsYXRlIFJYLXBhdGggSVEgaW1iYWxhbmNlIGFuZCBzZXR0aW5nIFJYIHBhdGggSVEgY29tcGVuc2F0aW9uIHRhYmxlICovCiAKIAlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCAxMjU4OSwgZnJlcXVlbmN5KTsKIAotCWlmIChyZXN1bHQgPiAwKQotCXsKKwlpZiAocmVzdWx0ID4gMCkgewogCQlfcmVzZXRfcnhfY2FsKHBod19kYXRhKTsKIAkJcmVzdWx0ID0gX3J4X2lxX2NhbGlicmF0aW9uX2xvb3Bfd2luYm9uZChwaHdfZGF0YSwgNzk0MywgZnJlcXVlbmN5KTsKIAotCQlpZiAocmVzdWx0ID4gMCkKLQkJeworCQlpZiAocmVzdWx0ID4gMCkgewogCQkJX3Jlc2V0X3J4X2NhbChwaHdfZGF0YSk7CiAJCQlyZXN1bHQgPSBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHBod19kYXRhLCA1MDExLCBmcmVxdWVuY3kpOwogCi0JCQlpZiAocmVzdWx0ID4gMCkKLQkJCXsKKwkJCWlmIChyZXN1bHQgPiAwKSB7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKiogPF9yeF9pcV9jYWxpYnJhdGlvbj4gKioqKioqKioqKioqKipcbiIpKTsKIAkJCQlQSFlfREVCVUcoKCJbQ0FMXSAqKiBSWF9JUV9DQUxJQlJBVElPTiBGQUlMVVJFICEhXG4iKSk7CiAJCQkJUEhZX0RFQlVHKCgiW0NBTF0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpKTsKQEAgLTE1NzEsMTUgKzE0MzMsMTIgQEAKIAlod19nZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1NCwgJnZhbCk7CiAJUEhZX0RFQlVHKCgiW0NBTF0gICAgKiogMHg1NCA9IDB4JTA4WFxuIiwgdmFsKSk7CiAKLQlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLy8gMXN0LWN1dAotCXsKKwlpZiAocGh3X2RhdGEtPnJldmlzaW9uID09IDB4MjAwMikgLyogMXN0LWN1dCAqL3sKIAkJcnhfY2FsX3JlZ1swXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMEYwMDApID4+IDEyKTsKIAkJcnhfY2FsX3JlZ1sxXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDBGMDApID4+ICA4KTsKIAkJcnhfY2FsX3JlZ1syXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwRjApID4+ICA0KTsKIAkJcnhfY2FsX3JlZ1szXSA9IF9zNF90b19zMzIoKHZhbCAmIDB4MDAwMDAwMEYpKTsKLQl9Ci0JZWxzZSAvLyAybmQtY3V0Ci0JeworCX0gZWxzZSAvKiAybmQtY3V0ICovewogCQlyeF9jYWxfcmVnWzBdID0gX3M1X3RvX3MzMigodmFsICYgMHhGODAwMDAwMCkgPj4gMjcpOwogCQlyeF9jYWxfcmVnWzFdID0gX3M2X3RvX3MzMigodmFsICYgMHgwN0UwMDAwMCkgPj4gMjEpOwogCQlyeF9jYWxfcmVnWzJdID0gX3M2X3RvX3MzMigodmFsICYgMHgwMDFGODAwMCkgPj4gMTUpOwpAQCAtMTU5NCw3ICsxNDUzLDcgQEAKIAogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBwaHlfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAJdTMyICAgICByZWdfbW9kZV9jdHJsOwpAQCAtMTYwMiw3ICsxNDYxLDcgQEAKIAogCVBIWV9ERUJVRygoIltDQUxdIC0+IHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKClcbiIpKTsKIAotCS8vIDIwMDQwNzAxIDEuMS4yNS4xMDAwIGtldmluCisJLyogMjAwNDA3MDEgMS4xLjI1LjEwMDAga2V2aW4gKi8KIAlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgJm1hY19jdHJsKTsKIAlod19nZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHhFNCwgJnJmX2N0cmwpOwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCAweDU4LCAmaXFfYWxwaGEpOwpAQCAtMTYxMCw3MiArMTQ2OSw3MSBAQAogCiAKIAlfcnhhZGNfZGNfb2Zmc2V0X2NhbmNlbGxhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOwotCS8vX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOwotCS8vX3R4cWRhY19kY19vZmZzZXRfY2FjZWxsYXRpb25fd2luYm9uZChwaHdfZGF0YSk7CisJLyogX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOyAqLworCS8qIF90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOyAqLwogCiAJX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQocGh3X2RhdGEpOwogCV9yeF9pcV9jYWxpYnJhdGlvbl93aW5ib25kKHBod19kYXRhLCBmcmVxdWVuY3kpOwogCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCWh3X2dldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCAmcmVnX21vZGVfY3RybCk7Ci0JcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFfE1BU0tfQ0FMSUJfU1RBUlQpOyAvLyBzZXQgd2hlbiBmaW5pc2gKKwlyZWdfbW9kZV9jdHJsICY9IH4oTUFTS19JUUNBTF9UT05FX1NFTHxNQVNLX0lRQ0FMX01PREV8TUFTS19DQUxJQl9TVEFSVCk7IC8qIHNldCB3aGVuIGZpbmlzaCAqLwogCWh3X3NldF9keHhfcmVnKHBod19kYXRhLCBSRUdfTU9ERV9DVFJMLCByZWdfbW9kZV9jdHJsKTsKIAlQSFlfREVCVUcoKCJbQ0FMXSAgICBNT0RFX0NUUkwgKHdyaXRlKSA9IDB4JTA4WFxuIiwgcmVnX21vZGVfY3RybCkpOwogCi0JLy8gaS4gU2V0IFJGSUMgdG8gIk5vcm1hbCBtb2RlIgorCS8qIGkuIFNldCBSRklDIHRvICJOb3JtYWwgbW9kZSIgKi8KIAlod19zZXRfY3h4X3JlZyhwaHdfZGF0YSwgMHg4MCwgbWFjX2N0cmwpOwogCWh3X3NldF9jeHhfcmVnKHBod19kYXRhLCAweEU0LCByZl9jdHJsKTsKIAlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgMHg1OCwgaXFfYWxwaGEpOwogCiAKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJcGh5X2luaXRfcmYocGh3X2RhdGEpOwogCiB9CiAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIHBoeV9zZXRfcmZfZGF0YSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApCisvKioqKioqKioqKioqKioqKioqLwordm9pZCBwaHlfc2V0X3JmX2RhdGEoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHUzMiBpbmRleCwgdTMyIHZhbHVlKQogewotICAgdTMyIGx0bXA9MDsKKyAgIHUzMiBsdG1wID0gMDsKIAotICAgIHN3aXRjaCggcEh3RGF0YS0+cGh5X3R5cGUgKQotCXsKLQkJY2FzZSBSRl9NQVhJTV8yODI1OgotCQljYXNlIFJGX01BWElNX1YxOiAvLyAxMWcgV2luYm9uZCAybmQgQkIod2l0aCBQaHkgYm9hcmQgKHYxKSArIE1heGltIDMzMSkKLQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7Ci0JCQlicmVhazsKKyAgICBzd2l0Y2ggKHBId0RhdGEtPnBoeV90eXBlKSB7CisgICAgY2FzZSBSRl9NQVhJTV8yODI1OgorICAgIGNhc2UgUkZfTUFYSU1fVjE6IC8qIDExZyBXaW5ib25kIDJuZCBCQih3aXRoIFBoeSBib2FyZCAodjEpICsgTWF4aW0gMzMxKSAqLworICAgICAgICAgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAxOCk7CisgICAgICAgICAgICBicmVhazsKIAotCQljYXNlIFJGX01BWElNXzI4Mjc6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9NQVhJTV8yODI3OgorICAgICAgICAgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAxOCk7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfTUFYSU1fMjgyODoKLQkJCWx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSggdmFsdWUsIDE4ICk7Ci0JCQlicmVhazsKKyAgICBjYXNlIFJGX01BWElNXzI4Mjg6CisJICAgIGx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZSh2YWx1ZSwgMTgpOworCSAgICBicmVhazsKIAotCQljYXNlIFJGX01BWElNXzI4Mjk6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAxOCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9NQVhJTV8yODI5OgorCSAgICBsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UodmFsdWUsIDE4KTsKKwkgICAgYnJlYWs7CiAKLQkJY2FzZSBSRl9BSVJPSEFfMjIzMDoKLQkJY2FzZSBSRl9BSVJPSEFfMjIzMFM6IC8vIDIwMDYwNDIwIEFkZCB0aGlzCi0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoIHZhbHVlLCAyMCApOwotCQkJYnJlYWs7CisgICAgY2FzZSBSRl9BSVJPSEFfMjIzMDoKKyAgICBjYXNlIFJGX0FJUk9IQV8yMjMwUzogLyogMjAwNjA0MjAgQWRkIHRoaXMgKi8KKwkgICAgbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyMCA8PCAyNCkgfCBCaXRSZXZlcnNlKHZhbHVlLCAyMCk7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfQUlST0hBXzcyMzA6Ci0JCQlsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICh2YWx1ZSYweGZmZmZmZik7Ci0JCQlicmVhazsKKyAgICBjYXNlIFJGX0FJUk9IQV83MjMwOgorCSAgICBsdG1wID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDI0IDw8IDI0KSB8ICh2YWx1ZSYweGZmZmZmZik7CisJICAgIGJyZWFrOwogCi0JCWNhc2UgUkZfV0JfMjQyOgotCQljYXNlIFJGX1dCXzI0Ml8xOiAvLyAyMDA2MDYxOS41IEFkZAotCQkJbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCBCaXRSZXZlcnNlKCB2YWx1ZSwgMjQgKTsKLQkJCWJyZWFrOwotCX0KKyAgICBjYXNlIFJGX1dCXzI0MjoKKyAgICBjYXNlIFJGX1dCXzI0Ml8xOi8qIDIwMDYwNjE5LjUgQWRkICovCisJICAgIGx0bXAgPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjQgPDwgMjQpIHwgQml0UmV2ZXJzZSh2YWx1ZSwgMjQpOworCSAgICBicmVhazsKKyAgICB9CiAKLQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwODY0LCBsdG1wICk7CisJV2IzNVJlZ19Xcml0ZVN5bmMocEh3RGF0YSwgMHgwODY0LCBsdG1wKTsKIH0KIAotLy8gMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbAorLyogMjAwNjA3MTcgbW9kaWZ5IGFzIEJydWNlJ3MgbWFpbCAqLwogdW5zaWduZWQgY2hhciBhZGp1c3RfVFhWR0FfZm9yX2lxX21hZyhzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpCiB7CiAJaW50IGluaXRfdHh2Z2EgPSAwOwpAQCAtMTY4NSwyNiArMTU0MywyNyBAQAogCXMzMiAgICAgaXFjYWxfdG9uZV9xMDsKIAl1MzIgICAgIHNxc3VtOwogCXMzMiAgICAgaXFfbWFnXzBfdHg7Ci0JdTgJCXJlZ19zdGF0ZTsKLQlpbnQJCWN1cnJlbnRfdHh2Z2E7CisJdTgJcmVnX3N0YXRlOworCWludAljdXJyZW50X3R4dmdhOwogCiAKIAlyZWdfc3RhdGUgPSAwOwotCWZvciggaW5pdF90eHZnYT0wOyBpbml0X3R4dmdhPDEwOyBpbml0X3R4dmdhKyspCi0JewotCQljdXJyZW50X3R4dmdhID0gKCAweDI0QzQwQXwoaW5pdF90eHZnYTw8NikgKTsKLQkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoKDU8PDI0KXxjdXJyZW50X3R4dmdhKSApOworCWZvciAoaW5pdF90eHZnYSA9IDA7IGluaXRfdHh2Z2EgPCAxMDsgaW5pdF90eHZnYSsrKSB7CisJCWN1cnJlbnRfdHh2Z2EgPSAoMHgyNEM0MEF8KGluaXRfdHh2Z2E8PDYpKTsKKwkJcGh5X3NldF9yZl9kYXRhKHBod19kYXRhLCA1LCAoKDU8PDI0KXxjdXJyZW50X3R4dmdhKSk7CiAJCXBod19kYXRhLT50eHZnYV9zZXR0aW5nX2Zvcl9jYWwgPSBjdXJyZW50X3R4dmdhOwogCi0JCW1zbGVlcCgzMCk7IC8vIDIwMDYwNjEyLjEuYQorCQltc2xlZXAoMzApOy8qIDIwMDYwNjEyLjEuYSAqLwogCi0JCWlmKCAhaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKSApIC8vIDIwMDYwNzE4LjEgbW9kaWZ5CisJCWlmICghaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19NT0RFX0NUUkwsICZyZWdfbW9kZV9jdHJsKSkvKiAyMDA2MDcxOC4xIG1vZGlmeSAqLwogCQkJcmV0dXJuIGZhbHNlOwogCiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAocmVhZCkgPSAweCUwOFhcbiIsIHJlZ19tb2RlX2N0cmwpKTsKIAotCQkvLyBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCi0JCS8vICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkvKgorCQkgKiBhLiBTZXQgaXFjYWxfbW9kZVsxOjBdIHRvIDB4MiBhbmQgc2V0ICJjYWxpYl9zdGFydCIgdG8gMHgxIHRvCisJCSAqICAgIGVuYWJsZSAiSVEgYWxpYnJhdGlvbiBNb2RlIElJIgorCQkgKi8KIAkJcmVnX21vZGVfY3RybCAmPSB+KE1BU0tfSVFDQUxfVE9ORV9TRUx8TUFTS19JUUNBTF9NT0RFKTsKIAkJcmVnX21vZGVfY3RybCAmPSB+TUFTS19JUUNBTF9NT0RFOwogCQlyZWdfbW9kZV9jdHJsIHw9IChNQVNLX0NBTElCX1NUQVJUfDB4MDIpOwpAQCAtMTcxMiwxNSArMTU3MSwxNSBAQAogCQlod19zZXRfZHh4X3JlZyhwaHdfZGF0YSwgUkVHX01PREVfQ1RSTCwgcmVnX21vZGVfY3RybCk7CiAJCVBIWV9ERUJVRygoIltDQUxdICAgIE1PREVfQ1RSTCAod3JpdGUpID0gMHglMDhYXG4iLCByZWdfbW9kZV9jdHJsKSk7CiAKLQkJdWRlbGF5KDEpOyAvLyAyMDA2MDYxMi4xLmEKKwkJdWRlbGF5KDEpOy8qIDIwMDYwNjEyLjEuYSAqLwogCi0JCXVkZWxheSgzMDApOyAvLyAyMDA2MDYxMi4xLmEKKwkJdWRlbGF5KDMwMCk7LyogMjAwNjA2MTIuMS5hICovCiAKLQkJLy8gYi4KKwkJLyogYi4gKi8KIAkJaHdfZ2V0X2R4eF9yZWcocGh3X2RhdGEsIFJFR19DQUxJQl9SRUFEMSwgJnZhbCk7CiAKIAkJUEhZX0RFQlVHKCgiW0NBTF0gICAgQ0FMSUJfUkVBRDEgPSAweCUwOFhcbiIsIHZhbCkpOwotCQl1ZGVsYXkoMzAwKTsgLy8gMjAwNjA2MTIuMS5hCisJCXVkZWxheSgzMDApOy8qIDIwMDYwNjEyLjEuYSAqLwogCiAJCWlxY2FsX3RvbmVfaTAgPSBfczEzX3RvX3MzMih2YWwgJiAweDAwMDAxRkZGKTsKIAkJaXFjYWxfdG9uZV9xMCA9IF9zMTNfdG9fczMyKCh2YWwgJiAweDAzRkZFMDAwKSA+PiAxMyk7CkBAIC0xNzMxLDIzICsxNTkwLDE4IEBACiAJCWlxX21hZ18wX3R4ID0gKHMzMikgX3NxcnQoc3FzdW0pOwogCQlQSFlfREVCVUcoKCJbQ0FMXSAgICAqKiBhdXRvX2FkanVzdF90eHZnYV9mb3JfaXFfbWFnXzBfdHg9JWRcbiIsIGlxX21hZ18wX3R4KSk7CiAKLQkJaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCQlpZiAoaXFfbWFnXzBfdHggPj0gNzAwICYmIGlxX21hZ18wX3R4IDw9IDE3NTApCiAJCQlicmVhazsKLQkJZWxzZSBpZihpcV9tYWdfMF90eCA+IDE3NTApCi0JCXsKLQkJCWluaXRfdHh2Z2E9LTI7CisJCWVsc2UgaWYgKGlxX21hZ18wX3R4ID4gMTc1MCkgeworCQkJaW5pdF90eHZnYSA9IC0yOwogCQkJY29udGludWU7Ci0JCX0KLQkJZWxzZQorCQl9IGVsc2UKIAkJCWNvbnRpbnVlOwogCiAJfQogCi0JaWYoIGlxX21hZ18wX3R4Pj03MDAgJiYgaXFfbWFnXzBfdHg8PTE3NTAgKQorCWlmIChpcV9tYWdfMF90eCA+PSA3MDAgJiYgaXFfbWFnXzBfdHggPD0gMTc1MCkKIAkJcmV0dXJuIHRydWU7CiAJZWxzZQogCQlyZXR1cm4gZmFsc2U7CiB9Ci0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCmluZGV4IGQ5YTgxMjguLjk5MGY5ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCkBAIC05NjYsNDIgKzk2Niw0MiBAQAogCXN3aXRjaCAocEh3RGF0YS0+cGh5X3R5cGUpIHsKIAljYXNlIFJGX01BWElNXzI4MjU6CiAJY2FzZSBSRl9NQVhJTV9WMTogLyogMTFnIFdpbmJvbmQgMm5kIEJCKHdpdGggUGh5IGJvYXJkICh2MSkgKyBNYXhpbSAzMzEpICovCi0JCW51bWJlciA9IHNpemVvZihtYXgyODI1X3JmX2RhdGEpIC8gc2l6ZW9mKG1heDI4MjVfcmZfZGF0YVswXSk7CisJCW51bWJlciA9IEFSUkFZX1NJWkUobWF4MjgyNV9yZl9kYXRhKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjVfcmZfZGF0YVtpXTsgLyogQmFja3VwIFJmIHBhcmFtZXRlciAqLwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZShtYXgyODI1X3JmX2RhdGFbaV0sIDE4KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX01BWElNXzI4Mjc6Ci0JCW51bWJlciA9IHNpemVvZihtYXgyODI3X3JmX2RhdGEpIC8gc2l6ZW9mKG1heDI4MjdfcmZfZGF0YVswXSk7CisJCW51bWJlciA9IEFSUkFZX1NJWkUobWF4MjgyN19yZl9kYXRhKTsKIAkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCQlwSHdEYXRhLT5waHlfcGFyYVtpXSA9IG1heDI4MjdfcmZfZGF0YVtpXTsKIAkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UobWF4MjgyN19yZl9kYXRhW2ldLCAxOCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBSRl9NQVhJTV8yODI4OgotCQludW1iZXIgPSBzaXplb2YobWF4MjgyOF9yZl9kYXRhKSAvIHNpemVvZihtYXgyODI4X3JmX2RhdGFbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKG1heDI4MjhfcmZfZGF0YSk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBtYXgyODI4X3JmX2RhdGFbaV07CiAJCQlwbHRtcFtpXSA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgxOCA8PCAyNCkgfCBCaXRSZXZlcnNlKG1heDI4MjhfcmZfZGF0YVtpXSwgMTgpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkZfTUFYSU1fMjgyOToKLQkJbnVtYmVyID0gc2l6ZW9mKG1heDI4MjlfcmZfZGF0YSkgLyBzaXplb2YobWF4MjgyOV9yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShtYXgyODI5X3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gbWF4MjgyOV9yZl9kYXRhW2ldOwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMTggPDwgMjQpIHwgQml0UmV2ZXJzZShtYXgyODI5X3JmX2RhdGFbaV0sIDE4KTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX0FJUk9IQV8yMjMwOgotCQludW1iZXIgPSBzaXplb2YoYWwyMjMwX3JmX2RhdGEpIC8gc2l6ZW9mKGFsMjIzMF9yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDIyMzBfcmZfZGF0YSk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCQkJcEh3RGF0YS0+cGh5X3BhcmFbaV0gPSBhbDIyMzBfcmZfZGF0YVtpXTsKIAkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDIwIDw8IDI0KSB8IEJpdFJldmVyc2UoYWwyMjMwX3JmX2RhdGFbaV0sIDIwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJGX0FJUk9IQV8yMjMwUzoKLQkJbnVtYmVyID0gc2l6ZW9mKGFsMjIzMHNfcmZfZGF0YSkgLyBzaXplb2YoYWwyMjMwc19yZl9kYXRhWzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDIyMzBzX3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCXBId0RhdGEtPnBoeV9wYXJhW2ldID0gYWwyMjMwc19yZl9kYXRhW2ldOwogCQkJcGx0bXBbaV0gPSAoMSA8PCAzMSkgfCAoMCA8PCAzMCkgfCAoMjAgPDwgMjQpIHwgQml0UmV2ZXJzZShhbDIyMzBzX3JmX2RhdGFbaV0sIDIwKTsKQEAgLTEwMTMsMTIgKzEwMTMsMTIgQEAKIAkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwogCQlwcmludGsoIiogUExMX09OICAgIGxvd1xuIik7CiAJCSNlbmRpZgotCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjQpIC8gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKKwkJbnVtYmVyID0gQVJSQVlfU0laRShhbDcyMzBfcmZfZGF0YV8yNCk7CiAJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKIAkJYnJlYWs7CiAJY2FzZSBSRl9XQl8yNDI6CiAJY2FzZSBSRl9XQl8yNDJfMToKLQkJbnVtYmVyID0gc2l6ZW9mKHc4OXJmMjQyX3JmX2RhdGEpIC8gc2l6ZW9mKHc4OXJmMjQyX3JmX2RhdGFbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKHc4OXJmMjQyX3JmX2RhdGEpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKIAkJCWx0bXAgPSB3ODlyZjI0Ml9yZl9kYXRhW2ldOwogCQkJaWYgKGkgPT0gNCkgeyAvKiBVcGRhdGUgdGhlIFZDTyB0cmltIGZyb20gRUVQUk9NICovCkBAIC0xMTE5LDcgKzExMTksNyBAQAogCQlwcmludGsoIiogUExMX09OICAgIGxvd1xuIik7CiAJCSNlbmRpZgogCi0JCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkgLyBzaXplb2YoYWw3MjMwX3JmX2RhdGFfNTBbMF0pOworCQludW1iZXIgPSBBUlJBWV9TSVpFKGFsNzIzMF9yZl9kYXRhXzUwKTsKIAkJU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzUwKHBId0RhdGEsIHBsdG1wLCBudW1iZXIpOwogCQkvKiBXcml0ZSB0byByZWdpc3Rlci4gbnVtYmVyIG11c3QgbGVzcyBhbmQgZXF1YWwgdGhhbiAxNiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspCkBAIC0xNzQ3LDcgKzE3NDcsNyBAQAogCQkJCXBsdG1wW2ldID0gKDEgPDwgMzEpIHwgKDAgPDwgMzApIHwgKDE4IDw8IDI0KSB8IEJpdFJldmVyc2UobWF4MjgyOV9jaGFubmVsX2RhdGFfMjRbQ2hhbm5lbC5DaGFuTm8tMV1baV0sIDE4KTsKIAkJCVdiMzVSZWdfQnVyc3RXcml0ZShwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCAzLCBOT19JTkNSRU1FTlQpOwogCQl9IGVsc2UgaWYgKENoYW5uZWwuYmFuZCA9PSBCQU5EX1RZUEVfT0ZETV81KSB7Ci0JCQljb3VudCA9IHNpemVvZihtYXgyODI5X2NoYW5uZWxfZGF0YV81MCkgLyBzaXplb2YobWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbMF0pOworCQkJY291bnQgPSBBUlJBWV9TSVpFKG1heDI4MjlfY2hhbm5lbF9kYXRhXzUwKTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJCQlpZiAobWF4MjgyOV9jaGFubmVsX2RhdGFfNTBbaV1bMF0gPT0gQ2hhbm5lbC5DaGFuTm8pIHsKQEAgLTE3ODMsMTMgKzE3ODMsMTMgQEAKIAkJCQkvKiBVcGRhdGUgQkIgcmVnaXN0ZXIgKi8KIAkJCQlCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMChwSHdEYXRhKTsKIAotCQkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkgLyBzaXplb2YoYWw3MjMwX3JmX2RhdGFfMjRbMF0pOworCQkJCW51bWJlciA9IEFSUkFZX1NJWkUoYWw3MjMwX3JmX2RhdGFfMjQpOwogCQkJCVNldF9DaGFuSW5kZXBfUmZEYXRhX2FsNzIzMF8yNChwSHdEYXRhLCBwbHRtcCwgbnVtYmVyKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogVXBkYXRlIEJCIHJlZ2lzdGVyICovCiAJCQkJQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAocEh3RGF0YSk7CiAKLQkJCQludW1iZXIgPSBzaXplb2YoYWw3MjMwX3JmX2RhdGFfNTApIC8gc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKKwkJCQludW1iZXIgPSBBUlJBWV9TSVpFKGFsNzIzMF9yZl9kYXRhXzUwKTsKIAkJCQlTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAocEh3RGF0YSwgcGx0bXAsIG51bWJlcik7CiAJCQl9CiAKQEAgLTE4MTQsNyArMTgxNCw3IEBACiAJCQkJV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NjQsIGx0bXApOwogCQkJfQogCi0JCQljb3VudCA9IHNpemVvZihhbDcyMzBfY2hhbm5lbF9kYXRhXzUpIC8gc2l6ZW9mKGFsNzIzMF9jaGFubmVsX2RhdGFfNVswXSk7CisJCQljb3VudCA9IEFSUkFZX1NJWkUoYWw3MjMwX2NoYW5uZWxfZGF0YV81KTsKIAogCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJCQlpZiAoYWw3MjMwX2NoYW5uZWxfZGF0YV81W2ldWzBdID09IENoYW5uZWwuQ2hhbk5vKSB7CkBAIC0xOTc4LDcgKzE5NzgsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZihhbDIyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWwyMjMwX3R4dmdhX2RhdGFbMF0pOworCWNvdW50ID0gQVJSQVlfU0laRShhbDIyMzBfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGFsMjIzMF90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQogCQkJYnJlYWs7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZihhbDcyMzBfdHh2Z2FfZGF0YSkgLyBzaXplb2YoYWw3MjMwX3R4dmdhX2RhdGFbMF0pOworCWNvdW50ID0gQVJSQVlfU0laRShhbDcyMzBfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGFsNzIzMF90eHZnYV9kYXRhW2ldWzFdID49IGluZGV4KQogCQkJYnJlYWs7CkBAIC0yMDEzLDcgKzIwMTMsNyBAQAogCXUzMglQb3dlckRhdGE7CiAJdTgJaSwgY291bnQ7CiAKLQljb3VudCA9IHNpemVvZih3ODlyZjI0Ml90eHZnYV9kYXRhKSAvIHNpemVvZih3ODlyZjI0Ml90eHZnYV9kYXRhWzBdKTsKKwljb3VudCA9IEFSUkFZX1NJWkUodzg5cmYyNDJfdHh2Z2FfZGF0YSk7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKHc4OXJmMjQyX3R4dmdhX2RhdGFbaV1bMV0gPj0gaW5kZXgpCiAJCQlicmVhazsKQEAgLTIxODQsMTQgKzIxODQsMTQgQEAKIAkvKiBBZGp1c3QgV0JfMjQyIHRvIFdCXzI0Ml8xIFR4VmdhIHNjYWxlICovCiAJaWYgKHBId0RhdGEtPnBoeV90eXBlID09IFJGX1dCXzI0MikgewogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7IC8qIE9ubHkgMjQxMiAyNDM3IDI0NjIgMjQ4NCBjYXNlIG11c3QgYmUgbW9kaWZpZWQgKi8KLQkJCWZvciAoaiA9IDA7IGogPCAoc2l6ZW9mKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKSAvIHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1swXSkpOyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nKTsgaisrKSB7CiAJCQkJaWYgKHBjdG1wW2ldIDwgKHU4KSB3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZ1tqXVsxXSkgewogCQkJCQlwY3RtcFtpXSA9ICh1OCkgdzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbal1bMF07CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGogPT0gKHNpemVvZih3ODlyZjI0Ml90eHZnYV9vbGRfbWFwcGluZykgLyBzaXplb2Yodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmdbMF0pKSkKKwkJCWlmIChqID09IEFSUkFZX1NJWkUodzg5cmYyNDJfdHh2Z2Ffb2xkX21hcHBpbmcpKQogCQkJCXBjdG1wW2ldID0gKHU4KXc4OXJmMjQyX3R4dmdhX29sZF9tYXBwaW5nW2otMV1bMF07CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCAyNTFjYWEwLi5hYmFhMDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCU1kc19pbml0aWFsKHByaXYpOwogCiAJLyoKLQkgKiBJZiBubyB1c2VyLWRlZmluZWQgYWRkcmVzcyBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUgYWRkcmVzc3MKKwkgKiBJZiBubyB1c2VyLWRlZmluZWQgYWRkcmVzcyBpbiB0aGUgcmVnaXN0cnksIHVzZSB0aGUgYWRkcmVzcwogCSAqICJidXJuZWQiIG9uIHRoZSBOSUMgaW5zdGVhZC4KIAkgKi8KIAlwTWFjQWRkciA9IHByaXYtPnNMb2NhbFBhcmEuVGhpc01hY0FkZHJlc3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi9oY2YuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZi5jCmluZGV4IDM5MDYyOGMuLmM0ZmUwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL2hjZi5jCkBAIC01MDIsNyArNTAyLDcgQEAKICNlbmRpZiAvLyBNU0ZfQ09NUE9ORU5UX0lECiAJTlVMTAkJCQkJCQkJCS8vZW5kc2VudGluZWwKICAgfTsKLSNkZWZpbmUgeHh4eF9QUklfSURFTlRJVFlfT0ZGU0VUCShzaXplb2YoeHh4eCkvc2l6ZW9mKHh4eHhbMF0pIC0gMykKKyNkZWZpbmUgeHh4eF9QUklfSURFTlRJVFlfT0ZGU0VUCShBUlJBWV9TSVpFKHh4eHgpIC0gMykKIAogI2VuZGlmIC8vIE1TRl9DT01QT05FTlRfSUQgLyBIQ0ZfRVhUX01CCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL21kZC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvbWRkLmgKaW5kZXggYjQ1YzdkZC4uYjUwYjdiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvbWRkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvbWRkLmgKQEAgLTcyNywxMCArNzI3LDEwIEBACiAjZGVmaW5lIENGR19GQ0JFCTB4RkNCRQkvL0ZXIGNvZGVzIGFoZWFkIG9mIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uLCBzbyA/Pz8/Pz8/CiAjZGVmaW5lIENGR19GQ0JGCTB4RkNCRgkvL0ZXIGNvZGVzIGFoZWFkIG9mIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uLCBzbyA/Pz8/Pz8/CiAKLSNkZWZpbmUgQ0ZHX0hBTkRPVkVSX0FERFIJCQkJMHhGQ0MwCQkvL1tBUF0gU3RhdGlvbiBNQUMgQWRycmVzcyByZS1hc3NvY2lhdGVkIHdpdGggb3RoZXIgQVAKKyNkZWZpbmUgQ0ZHX0hBTkRPVkVSX0FERFIJCQkJMHhGQ0MwCQkvL1tBUF0gU3RhdGlvbiBNQUMgQWRkcmVzcyByZS1hc3NvY2lhdGVkIHdpdGggb3RoZXIgQVAKICNkZWZpbmUgQ0ZHX1NDQU5fQ0hBTk5FTAkJCQkweEZDQzIJCS8vQ2hhbm5lbCBzZXQgZm9yIGhvc3QgcmVxdWVzdGVkIHNjYW4KIC8vOz8jZGVmaW5lIENGR19TQ0FOX0NIQU5ORUxfTUFTSwkJCTB4RkNDMgkJLy8gY29udGFpbnMKLSNkZWZpbmUgQ0ZHX0RJU0FTU09DSUFURV9BRERSCQkJMHhGQ0M0CQkvL1tBUF0gU3RhdGlvbiBNQUMgQWRycmVzcyB0byBiZSBkaXNhc3NvY2lhdGVkCisjZGVmaW5lIENGR19ESVNBU1NPQ0lBVEVfQUREUgkJCTB4RkNDNAkJLy9bQVBdIFN0YXRpb24gTUFDIEFkZHJlc3MgdG8gYmUgZGlzYXNzb2NpYXRlZAogI2RlZmluZSBDRkdfUFJPQkVfREFUQV9SQVRFCQkJCTB4RkNDNQkJLy9XQVJQIGNvbm5lY3Rpb24gY29udHJvbAogI2RlZmluZSBDRkdfRlJBTUVfQlVSU1RfTElNSVQJCQkweEZDQzYJCS8vCiAjZGVmaW5lIENGR19DT0VYSVNURU5TRV9CRUhBVklPVVIJCTB4RkNDNwkJLy9bQVBdCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuYwppbmRleCAxMGFiZDQwLi4xOWMzMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2NzLmMKQEAgLTIzLDcgKzIzLDcgQEAKICAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KICAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICAqCi0gKiBDb3B5cmlnaHQgqSAyMDAzIEFnZXJlIFN5c3RlbXMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFnZXJlIFN5c3RlbXMgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDQsNyArNDQsNyBAQAogICoKICAqIERpc2NsYWltZXIKICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCiAgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCiAgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgpAQCAtODMsNyArODMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KQEAgLTEzMywzNiArMTMyLDM1IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCB3bF9hZGFwdGVyX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXY7Ci0gICAgc3RydWN0IHdsX3ByaXZhdGUJKmxwOwotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAgICpkZXY7CisJc3RydWN0IHdsX3ByaXZhdGUgICAqbHA7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfYXR0YWNoIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOworCURCR19GVU5DKCJ3bF9hZGFwdGVyX2F0dGFjaCIpOworCURCR19FTlRFUihEYmdJbmZvKTsKIAotICAgIGRldiA9IHdsX2RldmljZV9hbGxvYygpOwotICAgIGlmKGRldiA9PSBOVUxMKSB7Ci0gICAgICAgIERCR19FUlJPUiggRGJnSW5mbywgIndsX2RldmljZV9hbGxvYyByZXR1cm5lZCBOVUxMXG4iKTsKLQlyZXR1cm4gLUVOT01FTTsKLSAgICB9CisJZGV2ID0gd2xfZGV2aWNlX2FsbG9jKCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCURCR19FUlJPUihEYmdJbmZvLCAid2xfZGV2aWNlX2FsbG9jIHJldHVybmVkIE5VTExcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKLSAgICBsaW5rLT5pby5OdW1Qb3J0czEgICAgICA9IEhDRl9OVU1fSU9fUE9SVFM7Ci0gICAgbGluay0+aW8uQXR0cmlidXRlczEgICAgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7Ci0gICAgbGluay0+aW8uSU9BZGRyTGluZXMgICAgPSA2OwotICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyAgID0gQ09ORl9FTkFCTEVfSVJROwotICAgIGxpbmstPmNvbmYuSW50VHlwZSAgICAgID0gSU5UX01FTU9SWV9BTkRfSU87Ci0gICAgbGluay0+Y29uZi5Db25maWdJbmRleCAgPSA1OwotICAgIGxpbmstPmNvbmYuUHJlc2VudCAgICAgID0gUFJFU0VOVF9PUFRJT047CisJbGluay0+cmVzb3VyY2VbMF0tPmVuZCAgPSBIQ0ZfTlVNX0lPX1BPUlRTOworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncz0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPmNvbmYuQXR0cmlidXRlcyAgID0gQ09ORl9FTkFCTEVfSVJROworCWxpbmstPmNvbmYuSW50VHlwZSAgICAgID0gSU5UX01FTU9SWV9BTkRfSU87CisJbGluay0+Y29uZi5Db25maWdJbmRleCAgPSA1OworCWxpbmstPmNvbmYuUHJlc2VudCAgICAgID0gUFJFU0VOVF9PUFRJT047CiAKLSAgICBsaW5rLT5wcml2ID0gZGV2OwotICAgIGxwID0gd2xfcHJpdihkZXYpOwotICAgIGxwLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gZGV2OworCWxwID0gd2xfcHJpdihkZXYpOworCWxwLT5saW5rID0gbGluazsKIAotICAgIHdsX2FkYXB0ZXJfaW5zZXJ0KGxpbmspOworCXdsX2FkYXB0ZXJfaW5zZXJ0KGxpbmspOwogCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0gICAgcmV0dXJuIDA7Ci19IC8vIHdsX2FkYXB0ZXJfYXR0YWNoCisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybiAwOworfSAvKiB3bF9hZGFwdGVyX2F0dGFjaCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC0xOTAsMjUgKzE4OCwyNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIHdsX2FkYXB0ZXJfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICAgKmRldiA9IGxpbmstPnByaXY7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN0cnVjdCBuZXRfZGV2aWNlICAgKmRldiA9IGxpbmstPnByaXY7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9kZXRhY2giKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CisJREJHX1BBUkFNKERiZ0luZm8sICJsaW5rIiwgIjB4JXAiLCBsaW5rKTsKIAotICAgIERCR19GVU5DKCAid2xfYWRhcHRlcl9kZXRhY2giICk7Ci0gICAgREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0gICAgREJHX1BBUkFNKCBEYmdJbmZvLCAibGluayIsICIweCVwIiwgbGluayApOworCXdsX2FkYXB0ZXJfcmVsZWFzZShsaW5rKTsKIAotICAgIHdsX2FkYXB0ZXJfcmVsZWFzZShsaW5rKTsKKwlpZiAoZGV2KSB7CisJCXVucmVnaXN0ZXJfd2xhZ3Nfc3lzZnMoZGV2KTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwl9CiAKLSAgICBpZiAoZGV2KSB7Ci0JdW5yZWdpc3Rlcl93bGFnc19zeXNmcyhkZXYpOwotCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgfQorCXdsX2RldmljZV9kZWFsbG9jKGRldik7CiAKLSAgICB3bF9kZXZpY2VfZGVhbGxvYyhkZXYpOwotCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci19IC8vIHdsX2FkYXB0ZXJfZGV0YWNoCisJREJHX0xFQVZFKERiZ0luZm8pOworfSAvKiB3bF9hZGFwdGVyX2RldGFjaCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC0yMzIsMzMgKzIyOSwzMyBAQAogICogICAgICBOL0EKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCB3bF9hZGFwdGVyX3JlbGVhc2UoIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rICkKK3ZvaWQgd2xfYWRhcHRlcl9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIERCR19GVU5DKCAid2xfYWRhcHRlcl9yZWxlYXNlIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19QQVJBTSggRGJnSW5mbywgImxpbmsiLCAiMHglcCIsIGxpbmspOworCURCR19GVU5DKCJ3bF9hZGFwdGVyX3JlbGVhc2UiKTsKKwlEQkdfRU5URVIoRGJnSW5mbyk7CisJREJHX1BBUkFNKERiZ0luZm8sICJsaW5rIiwgIjB4JXAiLCBsaW5rKTsKIAotICAgIC8qIFN0b3AgaGFyZHdhcmUgKi8KLSAgICB3bF9yZW1vdmUobGluay0+cHJpdik7CisJLyogU3RvcCBoYXJkd2FyZSAqLworCXdsX3JlbW92ZShsaW5rLT5wcml2KTsKIAotICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CiAKLSAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLX0gLy8gd2xfYWRhcHRlcl9yZWxlYXNlCisJREJHX0xFQVZFKERiZ0luZm8pOworfSAvKiB3bF9hZGFwdGVyX3JlbGVhc2UgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgd2xfYWRhcHRlcl9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwogCi0gICAgLy9pZiAobGluay0+b3BlbikgeworCS8qIGlmIChsaW5rLT5vcGVuKSB7ICovCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCXdsX3N1c3BlbmQoZGV2KTsKLS8vLy8gQ0hFQ0shICAgICAgICAgICAgcGNtY2lhX3JlbGVhc2VfY29uZmlndXJhdGlvbihsaW5rLT5oYW5kbGUpOwotICAgIC8vfQorCS8qIENIRUNLISBwY21jaWFfcmVsZWFzZV9jb25maWd1cmF0aW9uKGxpbmstPmhhbmRsZSk7ICovCisJLyogfSAqLwogCi0gICAgcmV0dXJuIDA7Ci19IC8vIHdsX2FkYXB0ZXJfc3VzcGVuZAorCXJldHVybiAwOworfSAvKiB3bF9hZGFwdGVyX3N1c3BlbmQgKi8KIAogc3RhdGljIGludCB3bF9hZGFwdGVyX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKQEAgLTI2NiwxMCArMjYzLDEwIEBACiAKIAl3bF9yZXN1bWUoZGV2KTsKIAotCW5ldGlmX2RldmljZV9hdHRhY2goIGRldiApOworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAogCXJldHVybiAwOwotfSAvLyB3bF9hZGFwdGVyX3Jlc3VtZQorfSAvKiB3bF9hZGFwdGVyX3Jlc3VtZSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJd2xfYWRhcHRlcl9pbnNlcnQoKQpAQCAtMjkxLDYwICsyODgsNjAgQEAKICAqICAgICAgTi9BCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgd2xfYWRhcHRlcl9pbnNlcnQoIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rICkKK3ZvaWQgd2xfYWRhcHRlcl9pbnNlcnQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgICAgICAgKmRldjsKLSAgICBpbnQgaTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICByZXQ7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGk7CisJaW50IHJldDsKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgIERCR19GVU5DKCAid2xfYWRhcHRlcl9pbnNlcnQiICk7Ci0gICAgREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0gICAgREJHX1BBUkFNKCBEYmdJbmZvLCAibGluayIsICIweCVwIiwgbGluayApOworCURCR19GVU5DKCJ3bF9hZGFwdGVyX2luc2VydCIpOworCURCR19FTlRFUihEYmdJbmZvKTsKKwlEQkdfUEFSQU0oRGJnSW5mbywgImxpbmsiLCAiMHglcCIsIGxpbmspOwogCi0gICAgZGV2ICAgICA9IGxpbmstPnByaXY7CisJZGV2ICAgICA9IGxpbmstPnByaXY7CiAKLSAgICAvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KLSAgICBsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisJbGluay0+aW9fbGluZXMgPSA2OwogCi0gICAgcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKLSAgICBpZiAocmV0ICE9IDApCi0gICAgICAgIGdvdG8gZmFpbGVkOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmspOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsZWQ7CiAKLSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgKHZvaWQgKikgd2xfaXNyKTsKLSAgICBpZiAocmV0ICE9IDApCi0gICAgICAgIGdvdG8gZmFpbGVkOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAodm9pZCAqKSB3bF9pc3IpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsZWQ7CiAKLSAgICByZXQgPSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKTsKLSAgICBpZiAocmV0ICE9IDApCi0gICAgICAgIGdvdG8gZmFpbGVkOworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsZWQ7CiAKLSAgICBkZXYtPmlycSAgICAgICAgPSBsaW5rLT5pcnE7Ci0gICAgZGV2LT5iYXNlX2FkZHIgID0gbGluay0+aW8uQmFzZVBvcnQxOworCWRldi0+aXJxICAgICAgICA9IGxpbmstPmlycTsKKwlkZXYtPmJhc2VfYWRkciAgPSBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQ7CiAKLSAgICBTRVRfTkVUREVWX0RFVihkZXYsICZsaW5rLT5kZXYpOwotICAgIGlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7Ci0JcHJpbnRrKCIlczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iLCBNT0RVTEVfTkFNRSk7Ci0JZ290byBmYWlsZWQ7Ci0gICAgfQorCVNFVF9ORVRERVZfREVWKGRldiwgJmxpbmstPmRldik7CisJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKKwkJcHJpbnRrKCIlczogcmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iLCBNT0RVTEVfTkFNRSk7CisJCWdvdG8gZmFpbGVkOworCX0KIAotICAgIHJlZ2lzdGVyX3dsYWdzX3N5c2ZzKGRldik7CisJcmVnaXN0ZXJfd2xhZ3Nfc3lzZnMoZGV2KTsKIAotICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBXaXJlbGVzcywgaW9fYWRkciAlIzAzbHgsIGlycSAlZCwgIiJtYWNfYWRkcmVzcyAiLAotICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEpOwotICAgIGZvciggaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrICkgewotICAgICAgICBwcmludGsoIiUwMlglYyIsIGRldi0+ZGV2X2FkZHJbaV0sICgoaSA8IChFVEhfQUxFTi0xKSkgPyAnOicgOiAnXG4nKSk7Ci0gICAgfQorCXByaW50ayhLRVJOX0lORk8gIiVzOiBXaXJlbGVzcywgaW9fYWRkciAlIzAzbHgsIGlycSAlZCwgIiJtYWNfYWRkcmVzcyAiLAorCQlkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSk7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCXByaW50aygiJTAyWCVjIiwgZGV2LT5kZXZfYWRkcltpXSwgKChpIDwgKEVUSF9BTEVOLTEpKSA/ICc6JyA6ICdcbicpKTsKIAotICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgIHJldHVybjsKKwlEQkdfTEVBVkUoRGJnSW5mbyk7CisJcmV0dXJuOwogCiBmYWlsZWQ6Ci0gICAgd2xfYWRhcHRlcl9yZWxlYXNlKCBsaW5rICk7CisJd2xfYWRhcHRlcl9yZWxlYXNlKGxpbmspOwogCi0gICAgREJHX0xFQVZFKERiZ0luZm8pOwotICAgIHJldHVybjsKLX0gLy8gd2xfYWRhcHRlcl9pbnNlcnQKKwlEQkdfTEVBVkUoRGJnSW5mbyk7CisJcmV0dXJuOworfSAvKiB3bF9hZGFwdGVyX2luc2VydCAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC0zNjcsMzggKzM2NCwzNiBAQAogICogICAgICBlcnJubyB2YWx1ZSBvdGhlcndpc2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHdsX2FkYXB0ZXJfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCitpbnQgd2xfYWRhcHRlcl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPmxpbms7Ci0gICAgaW50ICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICBpbnQgICAgICAgICBoY2Zfc3RhdHVzID0gSENGX1NVQ0NFU1M7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCXN0cnVjdCB3bF9wcml2YXRlICpscCA9IHdsX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxwLT5saW5rOworCWludCByZXN1bHQgPSAwOworCWludCBoY2Zfc3RhdHVzID0gSENGX1NVQ0NFU1M7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9vcGVuIik7CisJREJHX0VOVEVSKERiZ0luZm8pOworCURCR19QUklOVCgiJXNcbiIsIFZFUlNJT05fSU5GTyk7CisJREJHX1BBUkFNKERiZ0luZm8sICJkZXYiLCAiJXMgKDB4JXApIiwgZGV2LT5uYW1lLCBkZXYpOwogCi0gICAgREJHX0ZVTkMoICJ3bF9hZGFwdGVyX29wZW4iICk7Ci0gICAgREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0JREJHX1BSSU5UKCAiJXNcbiIsIFZFUlNJT05fSU5GTyApOwotICAgIERCR19QQVJBTSggRGJnSW5mbywgImRldiIsICIlcyAoMHglcCkiLCBkZXYtPm5hbWUsIGRldiApOworCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSB7CisJCURCR19MRUFWRShEYmdJbmZvKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0gICAgaWYoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkKLSAgICB7Ci0gICAgICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJbGluay0+b3BlbisrOwogCi0gICAgbGluay0+b3BlbisrOworCWhjZl9zdGF0dXMgPSB3bF9vcGVuKGRldik7CiAKLSAgICBoY2Zfc3RhdHVzID0gd2xfb3BlbiggZGV2ICk7CisJaWYgKGhjZl9zdGF0dXMgIT0gSENGX1NVQ0NFU1MpIHsKKwkJbGluay0+b3Blbi0tOworCQlyZXN1bHQgPSAtRU5PREVWOworCX0KIAotICAgIGlmKCBoY2Zfc3RhdHVzICE9IEhDRl9TVUNDRVNTICkgewotICAgICAgICBsaW5rLT5vcGVuLS07Ci0gICAgICAgIHJlc3VsdCA9IC1FTk9ERVY7Ci0gICAgfQotCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gLy8gd2xfYWRhcHRlcl9vcGVuCisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybiByZXN1bHQ7Cit9IC8qIHdsX2FkYXB0ZXJfb3BlbiAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC00MjEsNTYgKzQxNiw1NSBAQAogICogICAgICBlcnJubyB2YWx1ZSBvdGhlcndpc2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IHdsX2FkYXB0ZXJfY2xvc2UoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQoraW50IHdsX2FkYXB0ZXJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgPSB3bF9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+bGluazsKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJc3RydWN0IHdsX3ByaXZhdGUgKmxwID0gd2xfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbHAtPmxpbms7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9jbG9zZSIpOworCURCR19FTlRFUihEYmdJbmZvKTsKKwlEQkdfUEFSQU0oRGJnSW5mbywgImRldiIsICIlcyAoMHglcCkiLCBkZXYtPm5hbWUsIGRldik7CiAKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfY2xvc2UiICk7Ci0gICAgREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0gICAgREJHX1BBUkFNKCBEYmdJbmZvLCAiZGV2IiwgIiVzICgweCVwKSIsIGRldi0+bmFtZSwgZGV2ICk7CisJaWYgKGxpbmsgPT0gTlVMTCkgeworCQlEQkdfTEVBVkUoRGJnSW5mbyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotICAgIGlmKCBsaW5rID09IE5VTEwgKSB7Ci0gICAgICAgIERCR19MRUFWRSggRGJnSW5mbyApOwotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICB9CisJREJHX1RSQUNFKERiZ0luZm8sICIlczogU2h1dHRpbmcgZG93biBhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKKwl3bF9jbG9zZShkZXYpOwogCi0gICAgREJHX1RSQUNFKCBEYmdJbmZvLCAiJXM6IFNodXR0aW5nIGRvd24gYWRhcHRlci5cbiIsIGRldi0+bmFtZSApOwotICAgIHdsX2Nsb3NlKCBkZXYgKTsKKwlsaW5rLT5vcGVuLS07CiAKLSAgICBsaW5rLT5vcGVuLS07Ci0KLSAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLSAgICByZXR1cm4gMDsKLX0gLy8gd2xfYWRhcHRlcl9jbG9zZQorCURCR19MRUFWRShEYmdJbmZvKTsKKwlyZXR1cm4gMDsKK30gLyogd2xfYWRhcHRlcl9jbG9zZSAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHdsX2FkYXB0ZXJfaWRzW10gPSB7Ci0jaWYgISAoKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUpCisjaWYgISgoSENGX1RZUEUpICYgSENGX1RZUEVfSElJNSkKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNTYsIDB4MDAwMyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFnZXJlIFN5c3RlbXMiLCAiV2lyZWxlc3MgUEMgQ2FyZCBNb2RlbCAwMTEwIiwKLQkJCSAgICAweDMzMTAzYTliLCAweGUxNzViMGRkKSwKKwkJCQkweDMzMTAzYTliLCAweGUxNzViMGRkKSwKICNlbHNlCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTU2LCAweDAwMDQpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMaW5rc3lzIiwgIldDRjU0R19XaXJlbGVzcy1HX0NvbXBhY3RGbGFzaF9DYXJkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MzNjYzgxLCAweDk4YTU5OWUxKSwKLSNlbmRpZiAgLy8gKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUKKwkJCQkweDA3MzNjYzgxLCAweDk4YTU5OWUxKSwKKyNlbmRpZiAgLyogKEhDRl9UWVBFKSAmIEhDRl9UWVBFX0hJSTUgKi8KIAlQQ01DSUFfREVWSUNFX05VTEwsCi0JfTsKK307CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgd2xfYWRhcHRlcl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgd2xhZ3M0OV9kcml2ZXIgPSB7Ci0gICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0gICAgLmRydiAgICAgICAgICAgID0gewotCS5uYW1lICAgPSBEUklWRVJfTkFNRSwKLSAgICB9LAotICAgIC5wcm9iZQk9IHdsX2FkYXB0ZXJfYXR0YWNoLAotICAgIC5yZW1vdmUJPSB3bF9hZGFwdGVyX2RldGFjaCwKLSAgICAuaWRfdGFibGUJPSB3bF9hZGFwdGVyX2lkcywKLSAgICAuc3VzcGVuZAk9IHdsX2FkYXB0ZXJfc3VzcGVuZCwKLSAgICAucmVzdW1lCT0gd2xfYWRhcHRlcl9yZXN1bWUsCisJLm93bmVyCSAgICA9IFRISVNfTU9EVUxFLAorCS5kcnYJICAgID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCX0sCisJLnByb2JlCSAgICA9IHdsX2FkYXB0ZXJfYXR0YWNoLAorCS5yZW1vdmUJICAgID0gd2xfYWRhcHRlcl9kZXRhY2gsCisJLmlkX3RhYmxlICAgPSB3bF9hZGFwdGVyX2lkcywKKwkuc3VzcGVuZCAgICA9IHdsX2FkYXB0ZXJfc3VzcGVuZCwKKwkucmVzdW1lCSAgICA9IHdsX2FkYXB0ZXJfcmVzdW1lLAogfTsKIAogCkBAIC00OTMsMjEgKzQ4NywyMCBAQAogICogICAgICAtMSBvbiBlcnJvcgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgd2xfYWRhcHRlcl9pbml0X21vZHVsZSggdm9pZCApCitpbnQgd2xfYWRhcHRlcl9pbml0X21vZHVsZSh2b2lkKQogewotICAgIGludCByZXQ7Ci0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWludCByZXQ7CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKwlEQkdfRlVOQygid2xfYWRhcHRlcl9pbml0X21vZHVsZSIpOworCURCR19FTlRFUihEYmdJbmZvKTsKKwlEQkdfVFJBQ0UoRGJnSW5mbywgIndsX2FkYXB0ZXJfaW5pdF9tb2R1bGUoKSAtLSBQQ01DSUFcbiIpOwogCi0gICAgREJHX0ZVTkMoICJ3bF9hZGFwdGVyX2luaXRfbW9kdWxlIiApOwotICAgIERCR19FTlRFUiggRGJnSW5mbyApOwotICAgIERCR19UUkFDRSggRGJnSW5mbywgIndsX2FkYXB0ZXJfaW5pdF9tb2R1bGUoKSAtLSBQQ01DSUFcbiIgKTsKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZ3bGFnczQ5X2RyaXZlcik7CiAKLSAgICByZXQgPSBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZ3bGFnczQ5X2RyaXZlcik7Ci0KLSAgICBEQkdfTEVBVkUoIERiZ0luZm8gKTsKLSAgICByZXR1cm4gcmV0OwotfSAvLyB3bF9hZGFwdGVyX2luaXRfbW9kdWxlCisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybiByZXQ7Cit9IC8qIHdsX2FkYXB0ZXJfaW5pdF9tb2R1bGUgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIApAQCAtNTI4LDE4ICs1MjEsMTggQEAKICAqICAgICAgTi9BCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgd2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZSggdm9pZCApCit2b2lkIHdsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLSAgICBEQkdfRlVOQyggIndsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUiICk7Ci0gICAgREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0gICAgREJHX1RSQUNFKCBEYmdJbmZvLCAid2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZSgpIC0tIFBDTUNJQVxuIiApOworCURCR19GVU5DKCJ3bF9hZGFwdGVyX2NsZWFudXBfbW9kdWxlIik7CisJREJHX0VOVEVSKERiZ0luZm8pOworCURCR19UUkFDRShEYmdJbmZvLCAid2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZSgpIC0tIFBDTUNJQVxuIik7CiAKIAotICAgIHBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmd2xhZ3M0OV9kcml2ZXIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmd2xhZ3M0OV9kcml2ZXIpOwogCi0gICAgREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0gICAgcmV0dXJuOwotfSAvLyB3bF9hZGFwdGVyX2NsZWFudXBfbW9kdWxlCisJREJHX0xFQVZFKERiZ0luZm8pOworCXJldHVybjsKK30gLyogd2xfYWRhcHRlcl9jbGVhbnVwX21vZHVsZSAqLwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogCkBAIC01NjIsMTcgKzU1NSwxNiBAQAogICogICAgICAwIG90aGVyd2lzZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQgd2xfYWRhcHRlcl9pc19vcGVuKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKK2ludCB3bF9hZGFwdGVyX2lzX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgPSB3bF9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+bGluazsKKwlzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgPSB3bF9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBscC0+bGluazsKIAotICAgIGlmKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQorCQlyZXR1cm4gMDsKIAotICAgIHJldHVybiggbGluay0+b3BlbiApOwotfSAvLyB3bF9hZGFwdGVyX2lzX29wZW4KKwlyZXR1cm4gbGluay0+b3BlbjsKK30gLyogd2xfYWRhcHRlcl9pc19vcGVuICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAKQEAgLTU5Niw5NyArNTg4LDk1IEBACiAgKiAgICAgIGEgcG9pbnRlciB0byBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBlcnJvcihzKQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1jb25zdCBjaGFyKiBEYmdFdmVudCggaW50IG1hc2sgKQorY29uc3QgY2hhciAqRGJnRXZlbnQoaW50IG1hc2spCiB7Ci0gICAgc3RhdGljIGNoYXIgRGJnQnVmZmVyWzI1Nl07Ci0gICAgY2hhciAqcEJ1ZjsKLSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJc3RhdGljIGNoYXIgRGJnQnVmZmVyWzI1Nl07CisJY2hhciAqcEJ1ZjsKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCXBCdWYgICAgPSBEYmdCdWZmZXI7CisJKnBCdWYgICA9ICdcMCc7CiAKIAotICAgIHBCdWYgICAgPSBEYmdCdWZmZXI7Ci0gICAgKnBCdWYgICA9ICdcMCc7CisJaWYgKG1hc2sgJiBDU19FVkVOVF9XUklURV9QUk9URUNUKQorCQlzdHJjYXQocEJ1ZiwgIldSSVRFX1BST1RFQ1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0NBUkRfTE9DSykKKwkJc3RyY2F0KHBCdWYsICJDQVJEX0xPQ0sgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OKQorCQlzdHJjYXQocEJ1ZiwgIkNBUkRfSU5TRVJUSU9OICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9DQVJEX1JFTU9WQUwpCisJCXN0cmNhdChwQnVmLCAiQ0FSRF9SRU1PVkFMICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9CQVRURVJZX0RFQUQpCisJCXN0cmNhdChwQnVmLCAiQkFUVEVSWV9ERUFEICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9CQVRURVJZX0xPVykKKwkJc3RyY2F0KHBCdWYsICJCQVRURVJZX0xPVyAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfUkVBRFlfQ0hBTkdFKQorCQlzdHJjYXQocEJ1ZiwgIlJFQURZX0NIQU5HRSAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfQ0FSRF9ERVRFQ1QpCisJCXN0cmNhdChwQnVmLCAiQ0FSRF9ERVRFQ1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX1JFU0VUX1JFUVVFU1QpCisJCXN0cmNhdChwQnVmLCAiUkVTRVRfUkVRVUVTVCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfUkVTRVRfUEhZU0lDQUwpCisJCXN0cmNhdChwQnVmLCAiUkVTRVRfUEhZU0lDQUwgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0NBUkRfUkVTRVQpCisJCXN0cmNhdChwQnVmLCAiQ0FSRF9SRVNFVCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfUkVHSVNUUkFUSU9OX0NPTVBMRVRFKQorCQlzdHJjYXQocEJ1ZiwgIlJFR0lTVFJBVElPTl9DT01QTEVURSAiKTsKKworCS8qIGlmIChtYXNrICYgQ1NfRVZFTlRfUkVTRVRfQ09NUExFVEUpCisJCXN0cmNhdChwQnVmLCAiUkVTRVRfQ09NUExFVEUgIik7ICovCisKKwlpZiAobWFzayAmIENTX0VWRU5UX1BNX1NVU1BFTkQpCisJCXN0cmNhdChwQnVmLCAiUE1fU1VTUEVORCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfUE1fUkVTVU1FKQorCQlzdHJjYXQocEJ1ZiwgIlBNX1JFU1VNRSAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfSU5TRVJUSU9OX1JFUVVFU1QpCisJCXN0cmNhdChwQnVmLCAiSU5TRVJUSU9OX1JFUVVFU1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0VKRUNUSU9OX1JFUVVFU1QpCisJCXN0cmNhdChwQnVmLCAiRUpFQ1RJT05fUkVRVUVTVCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfTVREX1JFUVVFU1QpCisJCXN0cmNhdChwQnVmLCAiTVREX1JFUVVFU1QgIik7CisKKwlpZiAobWFzayAmIENTX0VWRU5UX0VSQVNFX0NPTVBMRVRFKQorCQlzdHJjYXQocEJ1ZiwgIkVSQVNFX0NPTVBMRVRFICIpOworCisJaWYgKG1hc2sgJiBDU19FVkVOVF9SRVFVRVNUX0FUVEVOVElPTikKKwkJc3RyY2F0KHBCdWYsICJSRVFVRVNUX0FUVEVOVElPTiAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfQ0JfREVURUNUKQorCQlzdHJjYXQocEJ1ZiwgIkNCX0RFVEVDVCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfM1ZDQVJEKQorCQlzdHJjYXQocEJ1ZiwgIjNWQ0FSRCAiKTsKKworCWlmIChtYXNrICYgQ1NfRVZFTlRfWFZDQVJEKQorCQlzdHJjYXQocEJ1ZiwgIlhWQ0FSRCAiKTsKIAogCi0gICAgaWYoIG1hc2sgJiBDU19FVkVOVF9XUklURV9QUk9URUNUICkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiV1JJVEVfUFJPVEVDVCAiICk7CisJaWYgKCpwQnVmKSB7CisJCXBCdWZbc3RybGVuKHBCdWYpIC0gMV0gPSAnXDAnOworCX0gZWxzZSB7CisJCWlmIChtYXNrICE9IDB4MCkKKwkJCXNwcmludGYocEJ1ZiwgIjw8MHglMDh4Pj4iLCBtYXNrKTsKKwl9CiAKLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQ0FSRF9MT0NLKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJDQVJEX0xPQ0sgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0NBUkRfSU5TRVJUSU9OKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJDQVJEX0lOU0VSVElPTiAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJDQVJEX1JFTU9WQUwgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0JBVFRFUllfREVBRCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQkFUVEVSWV9ERUFEICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9CQVRURVJZX0xPVykKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQkFUVEVSWV9MT1cgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1JFQURZX0NIQU5HRSkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUkVBRFlfQ0hBTkdFICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9DQVJEX0RFVEVDVCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0FSRF9ERVRFQ1QgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1JFU0VUX1JFUVVFU1QpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIlJFU0VUX1JFUVVFU1QgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1JFU0VUX1BIWVNJQ0FMKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJSRVNFVF9QSFlTSUNBTCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQ0FSRF9SRVNFVCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiQ0FSRF9SRVNFVCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfUkVHSVNUUkFUSU9OX0NPTVBMRVRFKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJSRUdJU1RSQVRJT05fQ09NUExFVEUgIiApOwotCi0gICAgLy8gaWYobWFzayAmIENTX0VWRU5UX1JFU0VUX0NPTVBMRVRFKQotICAgIC8vICAgICBzdHJjYXQoIHBCdWYsICJSRVNFVF9DT01QTEVURSAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfUE1fU1VTUEVORCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiUE1fU1VTUEVORCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfUE1fUkVTVU1FKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJQTV9SRVNVTUUgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX0lOU0VSVElPTl9SRVFVRVNUKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJJTlNFUlRJT05fUkVRVUVTVCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiRUpFQ1RJT05fUkVRVUVTVCAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfTVREX1JFUVVFU1QpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIk1URF9SRVFVRVNUICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9FUkFTRV9DT01QTEVURSkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiRVJBU0VfQ09NUExFVEUgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UX1JFUVVFU1RfQVRURU5USU9OKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJSRVFVRVNUX0FUVEVOVElPTiAiICk7Ci0KLSAgICBpZihtYXNrICYgQ1NfRVZFTlRfQ0JfREVURUNUKQotICAgICAgICBzdHJjYXQoIHBCdWYsICJDQl9ERVRFQ1QgIiApOwotCi0gICAgaWYobWFzayAmIENTX0VWRU5UXzNWQ0FSRCkKLSAgICAgICAgc3RyY2F0KCBwQnVmLCAiM1ZDQVJEICIgKTsKLQotICAgIGlmKG1hc2sgJiBDU19FVkVOVF9YVkNBUkQpCi0gICAgICAgIHN0cmNhdCggcEJ1ZiwgIlhWQ0FSRCAiICk7Ci0KLQotICAgIGlmKCAqcEJ1ZiApIHsKLSAgICAgICAgcEJ1ZltzdHJsZW4ocEJ1ZikgLSAxXSA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYoIG1hc2sgIT0gMHgwICkgewotICAgICAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIjw8MHglMDh4Pj4iLCBtYXNrICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcEJ1ZjsKLX0gLy8gRGJnRXZlbnQKKwlyZXR1cm4gcEJ1ZjsKK30gLyogRGJnRXZlbnQgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNlbmRpZiAgLyogREJHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfY3MuaAppbmRleCBhOWI4ODI4Li4yMWYxN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9jcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2NzLmgKQEAgLTcyLDggKzcyLDYgQEAKIAogdm9pZCB3bF9hZGFwdGVyX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOwogCi1pbnQgd2xfYWRhcHRlcl9ldmVudChldmVudF90IGV2ZW50LCBpbnQgcHJpb3JpdHksIGV2ZW50X2NhbGxiYWNrX2FyZ3NfdCAqYXJncyApOwotCiBpbnQgd2xfYWRhcHRlcl9pbml0X21vZHVsZSggdm9pZCApOwogCiB2b2lkIHdsX2FkYXB0ZXJfY2xlYW51cF9tb2R1bGUoIHZvaWQgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2ludGVybmFsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9pbnRlcm5hbC5oCmluZGV4IGQ5YTBhZDAuLjAyZjBhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfaW50ZXJuYWwuaApAQCAtNjksNyArNjksNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaWZkZWYgQlVTX1BDTUNJQQotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCmluZGV4IDFhYTYxZGIuLmUyYTdhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCkBAIC0xOTA1LDggKzE5MDUsOCBAQAogICAgIERCR19GVU5DKCJ3bF9yeCIpCiAgICAgREJHX1BBUkFNKERiZ0luZm8sICJkZXYiLCAiJXMgKDB4JXApIiwgZGV2LT5uYW1lLCBkZXYpOwogCi0gICAgaWYoKCggbHAgPSAoc3RydWN0IHdsX3ByaXZhdGUgKilkZXYtPnByaXYgKSAhPSBOVUxMICkgJiYKLSAgICAgICAgICAhKCBscC0+ZmxhZ3MgJiBXVkxBTjJfVUlMX0JVU1kgKSkgeworICAgIGlmKCgoIGxwID0gZGV2LT5wcml2ICkgIT0gTlVMTCApICYmCisJISggbHAtPmZsYWdzICYgV1ZMQU4yX1VJTF9CVVNZICkpIHsKIAogI2lmZGVmIFVTRV9SVFMKICAgICAgICAgaWYoIGxwLT51c2VSVFMgPT0gMSApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmMKaW5kZXggNjc1MWI0Yi4uMDIwYjE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmMKQEAgLTExNyw5ICsxMTcsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3bF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7IFdMX0xLTV9QQ0lfVkVORE9SX0lELCBXTF9MS01fUENJX0RFVklDRV9JRF8wLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF9BZ2VyZV9TeXN0ZW1zX01pbmlfUENJX1YxIH0sCi0gICAgeyBXTF9MS01fUENJX1ZFTkRPUl9JRCwgV0xfTEtNX1BDSV9ERVZJQ0VfSURfMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQWdlcmVfU3lzdGVtc19NaW5pX1BDSV9WMSB9LAotICAgIHsgV0xfTEtNX1BDSV9WRU5ET1JfSUQsIFdMX0xLTV9QQ0lfREVWSUNFX0lEXzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX0FnZXJlX1N5c3RlbXNfTWluaV9QQ0lfVjEgfSwKKwl7IFBDSV9WRU5ET1JfSURfV0xfTEtNLCBQQ0lfREVWSUNFX0lEX1dMX0xLTV8wLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfQWdlcmVfU3lzdGVtc19NaW5pX1BDSV9WMSB9LAorCXsgUENJX1ZFTkRPUl9JRF9XTF9MS00sIFBDSV9ERVZJQ0VfSURfV0xfTEtNXzEsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF9BZ2VyZV9TeXN0ZW1zX01pbmlfUENJX1YxIH0sCisJeyBQQ0lfVkVORE9SX0lEX1dMX0xLTSwgUENJX0RFVklDRV9JRF9XTF9MS01fMiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX0FnZXJlX1N5c3RlbXNfTWluaV9QQ0lfVjEgfSwKKwogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC00NjUsNyArNDY5LDcgQEAKICAgICBmcmVlX2lycSggZGV2LT5pcnEsIGRldiApOwogCiAjaWZkZWYgRU5BQkxFX0RNQQotICAgIHdsX3BjaV9kbWFfZnJlZSggcGRldiwgKHN0cnVjdCB3bF9wcml2YXRlICopZGV2LT5wcml2ICk7CisgICAgd2xfcGNpX2RtYV9mcmVlKCBwZGV2LCBkZXYtPnByaXYgKTsKICNlbmRpZgogCiAgICAgd2xfZGV2aWNlX2RlYWxsb2MoIGRldiApOwpAQCAtNTM0LDcgKzUzOCw3IEBACiAKICNpZmRlZiBFTkFCTEVfRE1BCiAgICAgLyogQWxsb2NhdGUgRE1BIERlc2NyaXB0b3JzICovCi0gICAgaWYoIHdsX3BjaV9kbWFfYWxsb2MoIHBkZXYsIChzdHJ1Y3Qgd2xfcHJpdmF0ZSAqKWRldi0+cHJpdiApIDwgMCApIHsKKyAgICBpZiggd2xfcGNpX2RtYV9hbGxvYyggcGRldiwgZGV2LT5wcml2ICkgPCAwICkgewogICAgICAgICBEQkdfRVJST1IoIERiZ0luZm8sICJDb3VsZCBub3QgYWxsb2NhdGUgRE1BIGRlc2NyaXB0b3IgbWVtb3J5ISEhXG4iICk7CiAgICAgICAgIERCR19MRUFWRSggRGJnSW5mbyApOwogICAgICAgICByZXR1cm4gLUVOT01FTTsKQEAgLTU3MCw3ICs1NzQsNyBAQAogCX0KIAogICAgIC8qIE1ha2Ugc3VyZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIHByb3Blcmx5IGZvciBDYXJkQnVzICovCi0gICAgbHAgPSAoc3RydWN0IHdsX3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgbHAgPSBkZXYtPnByaXY7CiAKICAgICBpZiggbHAtPmhjZkN0eC5JRkJfQnVzVHlwZSA9PSBDRkdfTklDX0JVU19UWVBFX0NBUkRCVVMgfHwKIAkgICAgbHAtPmhjZkN0eC5JRkJfQnVzVHlwZSA9PSBDRkdfTklDX0JVU19UWVBFX1BDSSAJCSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuaAppbmRleCAxOGQ3YjUxLi5jZWEwNGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuaApAQCAtNjcsMTAgKzY3LDEwIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogIGNvbnN0YW50IGRlZmluaXRpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBXTF9MS01fUENJX1ZFTkRPUl9JRCAgICAweDExQzEgIC8vIEx1Y2VudCBNaWNyb2VsZWN0cm9uaWNzCi0jZGVmaW5lIFdMX0xLTV9QQ0lfREVWSUNFX0lEXzAgIDB4QUIzMCAgLy8gTWluaSBQQ0kKLSNkZWZpbmUgV0xfTEtNX1BDSV9ERVZJQ0VfSURfMSAgMHhBQjM0ICAvLyBNaW5pIFBDSQotI2RlZmluZSBXTF9MS01fUENJX0RFVklDRV9JRF8yICAweEFCMTEgIC8vIFdBUlAgQ2FyZEJ1cworI2RlZmluZSBQQ0lfVkVORE9SX0lEV0xfTEtNICAgICAweDExQzEgIC8qIEx1Y2VudCBNaWNyb2VsZWN0cm9uaWNzICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0xfTEtNXzAgIDB4QUIzMCAgLyogTWluaSBQQ0kgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XTF9MS01fMSAgMHhBQjM0ICAvKiBNaW5pIFBDSSAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dMX0xLTV8yICAweEFCMTEgIC8qIFdBUlAgQ2FyZEJ1cyAqLwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJvZmlsZS5jCmluZGV4IDI5MmQ1NzkuLjdhMTMzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcm9maWxlLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCURCR19FTlRFUihEYmdJbmZvKTsKIAogCS8qIEdldCB0aGUgd2F2ZWxhbiBzcGVjaWZpYyBpbmZvIGZvciB0aGlzIGRldmljZSAqLwotCXd2bGFuX2NvbmZpZyA9IChzdHJ1Y3Qgd2xfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKwl3dmxhbl9jb25maWcgPSBkZXYtPnByaXY7CiAJaWYgKHd2bGFuX2NvbmZpZyA9PSBOVUxMKSB7CiAJCURCR19FUlJPUihEYmdJbmZvLCAiV2F2ZWxhbiBzcGVjaWZpYyBpbmZvIHN0cnVjdCBub3QgcHJlc2VudD9cbiIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMKaW5kZXggYmJkYjk5Ny4uY2U4ZWQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuYwpAQCAtMjU5LDQxICsyNTksNiBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgloZXhkaWdpdDJpbnQoKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgREVTQ1JJUFRJT046Ci0gKgotICogICAgICBDb252ZXJ0cyBhIGhleGFkZWNpbWFsIGRpZ2l0IGNoYXJhY3RlciB0byBhbiBpbnRlZ2VyCi0gKgotICogIFBBUkFNRVRFUlM6Ci0gKgotICogICAgICBjICAgLSB0aGUgaGV4YWRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyCi0gKgotICogIFJFVFVSTlM6Ci0gKgotICogICAgICB0aGUgY29udmVydGVkIGludGVnZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGhleGRpZ2l0MmludCggY2hhciBjICkKLXsKLSAgIGlmKCBjID49ICcwJyAmJiBjIDw9ICc5JyApCi0gICAgICAgcmV0dXJuIGMgLSAnMCc7Ci0KLSAgIGlmKCBjID49ICdBJyAmJiBjIDw9ICdGJyApCi0gICAgICAgcmV0dXJuIGMgLSAnQScgKyAxMDsKLQotICAgaWYoIGMgPj0gJ2EnICYmIGMgPD0gJ2YnICkKLSAgICAgICByZXR1cm4gYyAtICdhJyArIDEwOwotCi0gICByZXR1cm4gMDsKLX0gLy8gaGV4ZGlnaXQyaW50Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJa2V5X3N0cmluZzJrZXkoKQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0zMjgsNyArMjkzLDcgQEAKICAgICAgICAgcCA9IChjaGFyICopa2V5LT5rZXk7CiAKICAgICAgICAgZm9yKCBpID0gMjsgaSA8IGw7IGkrPTIgKSB7Ci0gICAgICAgICAgICpwKysgPSAoIGhleGRpZ2l0MmludCgga3NbaV0gKSA8PCA0ICkgKyBoZXhkaWdpdDJpbnQgKGtzW2krMV0gKTsKKwkJCSpwKysgPSAoaGV4X3RvX2Jpbihrc1tpXSkgPDwgNCkgKyBoZXhfdG9fYmluKGtzW2krMV0pOwogICAgICAgICAgICBuKys7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5oCmluZGV4IDU2MWU4NWIuLmJhNTM3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmgKQEAgLTcxLDggKzcxLDYgQEAKIAogdm9pZCBrZXlfc3RyaW5nMmtleSggY2hhciAqa3MsIEtFWV9TVFJDVCAqa2V5ICk7CiAKLWludCBoZXhkaWdpdDJpbnQoIGNoYXIgYyApOwotCiB2b2lkIHdsX2hjZl9lcnJvciggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGhjZlN0YXR1cyApOwogCiB2b2lkIHdsX2VuZGlhbl90cmFuc2xhdGVfZXZlbnQoIGx0dl90ICpwTHR2ICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwppbmRleCA4MmZjYzE2Li40MjZkNGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFJJU00yX1VTQgogCXRyaXN0YXRlICJQcmlzbTIuNS8zIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXTEFOICYmIFVTQgorCWRlcGVuZHMgb24gV0xBTiAmJiBVU0IgJiYgQ0ZHODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQppbmRleCA1ZWRhYzVjLi5kYjVkNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9NYWtlZmlsZQpAQCAtNCw1ICs0LDQgQEAKIAkJcDgwMjExY29udi5vIFwKIAkJcDgwMjExcmVxLm8gXAogCQlwODAyMTF3ZXAubyBcCi0JCXA4MDIxMXdleHQubyBcCiAJCXA4MDIxMW5ldGRldi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjhjMzBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYwpAQCAtMCwwICsxLDc2MCBAQAorLyogY2ZnODAyMTEgSW50ZXJmYWNlIGZvciBwcmlzbTJfdXNiIG1vZHVsZSAqLworCisKKy8qIFByaXNtMiBjaGFubmVsbC9mcmVxdWVuY3kvYml0cmF0ZSBkZWNsYXJhdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgcHJpc20yX2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIHByaXNtMl9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCB9LAorCXsgLmJpdHJhdGUgPSAyMCB9LAorCXsgLmJpdHJhdGUgPSA1NSB9LAorCXsgLmJpdHJhdGUgPSAxMTAgfQorfTsKKworI2RlZmluZSBQUklTTTJfTlVNX0NJUEhFUl9TVUlURVMgMgorc3RhdGljIGNvbnN0IHUzMiBwcmlzbTJfY2lwaGVyX3N1aXRlc1tQUklTTTJfTlVNX0NJUEhFUl9TVUlURVNdID0geworCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAorCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNAorfTsKKworCisvKiBwcmlzbTIgZGV2aWNlIHByaXZhdGUgZGF0YSAqLworc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlIHsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzW0FSUkFZX1NJWkUocHJpc20yX2NoYW5uZWxzKV07CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUocHJpc20yX3JhdGVzKV07CisKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7Cit9OworCitzdGF0aWMgY29uc3Qgdm9pZCAqIGNvbnN0IHByaXNtMl93aXBoeV9wcml2aWQgPSAmcHJpc20yX3dpcGh5X3ByaXZpZDsKKworCisvKiBIZWxwZXIgRnVuY3Rpb25zICovCitzdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyKGludCBwcmlzbTJfcmVzdWx0KQoreworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChwcmlzbTJfcmVzdWx0KSB7CisJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOgorCQllcnIgPSAtRUlPOworCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGRpZCwgdTMyIGRhdGEpCit7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgKm1pYml0ZW0gPSAocDgwMjExaXRlbV91aW50MzJfdCAqKSAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0tPmRpZCA9IGRpZDsKKwltaWJpdGVtLT5kYXRhID0gZGF0YTsKKworCXJldHVybiBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKK30KKworc3RhdGljIGludCBwcmlzbTJfZG9taWJzZXRfcHN0cjMyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIHUzMiBkaWQsIHU4IGxlbiwgdTggKmRhdGEpCit7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgbXNnOworCXA4MDIxMWl0ZW1fcHN0cjMyX3QgKm1pYml0ZW0gPSAocDgwMjExaXRlbV9wc3RyMzJfdCAqKSAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0tPmRpZCA9IGRpZDsKKwltaWJpdGVtLT5kYXRhLmxlbiA9IGxlbjsKKwltZW1jcHkobWliaXRlbS0+ZGF0YS5kYXRhLCBkYXRhLCBsZW4pOworCisJcmV0dXJuIHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOworfQorCisKKy8qIFRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zLCBjYWxsZWQgYnkgdGhlIGNmZzgwMjExIGxheWVyICovCitpbnQgcHJpc20yX2NoYW5nZV92aXJ0dWFsX2ludGYoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKKwkJCSAgICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwl1MzIgZGF0YTsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBKQorCQkJZ290byBleGl0OworCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBOworCQlkYXRhID0gMDsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAod2xhbmRldi0+bWFjbW9kZSA9PSBXTEFOX01BQ01PREVfRVNTX1NUQSkKKwkJCWdvdG8gZXhpdDsKKwkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfU1RBOworCQlkYXRhID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3BlcmF0aW9uIG1vZGU6ICVkIG5vdCBzdXBwb3J0XG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIFNldCBPcGVyYXRpb24gbW9kZSB0byB0aGUgUE9SVCBUWVBFIFJJRCAqLworCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsIGRhdGEpOworCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gdHlwZTsKKworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcHJpc20yX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXUzMiBkaWQ7CisKKwlpbnQgZXJyID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXN3aXRjaCAocGFyYW1zLT5jaXBoZXIpIHsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisJCQkJCQlrZXlfaW5kZXgpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBleGl0OworCisJCS8qIHNlbmQga2V5IHRvIGRyaXZlciAqLworCQlzd2l0Y2ggKGtleV9pbmRleCkgeworCQljYXNlIDA6CisJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7CisJCQlicmVhazsKKworCQljYXNlIDE6CisJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQlicmVhazsKKworCQljYXNlIDI6CisJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisJCQlicmVhazsKKworCQljYXNlIDM6CisJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF9wc3RyMzIod2xhbmRldiwgZGlkLCBwYXJhbXMtPmtleV9sZW4sIHBhcmFtcy0+a2V5KTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiVW5zdXBwb3J0ZWQgY2lwaGVyIHN1aXRlXG4iKTsKKwkJcmVzdWx0ID0gMTsKKwl9CisKK2V4aXQ6CisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwcmlzbTJfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICB1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLAorCQkgICB2b2lkICgqY2FsbGJhY2spKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMqKSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGtleV9wYXJhbXMgcGFyYW1zOworCWludCBsZW47CisKKwlpZiAoa2V5X2luZGV4ID49IE5VTV9XRVBLRVlTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlbiA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2tleV9pbmRleF07CisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKworCWlmIChsZW4gPT0gMTMpCisJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJZWxzZSBpZiAobGVuID09IDUpCisJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJZWxzZQorCQlyZXR1cm4gLUVOT0VOVDsKKwlwYXJhbXMua2V5X2xlbiA9IGxlbjsKKwlwYXJhbXMua2V5ID0gd2xhbmRldi0+d2VwX2tleXNba2V5X2luZGV4XTsKKworCWNhbGxiYWNrKGNvb2tpZSwgJnBhcmFtcyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHByaXNtMl9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHU4IGtleV9pbmRleCwgY29uc3QgdTggKm1hY19hZGRyKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwl1MzIgZGlkOworCWludCBlcnIgPSAwOworCWludCByZXN1bHQgPSAwOworCisJLyogVGhlcmUgaXMgbm8gZGlyZWN0IHdheSBpbiB0aGUgaGFyZHdhcmUgKEFGQUlLKSBvZiByZW1vdmluZworCSAgIGEga2V5LCBzbyB3ZSB3aWxsIGNoZWF0IGJ5IHNldHRpbmcgdGhlIGtleSB0byBhIGJvZ3VzIHZhbHVlICovCisJLyogc2VuZCBrZXkgdG8gZHJpdmVyICovCisJc3dpdGNoIChrZXlfaW5kZXgpIHsKKwljYXNlIDA6CisJCWRpZCA9CisJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlkaWQgPQorCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJZGlkID0KKwkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJYnJlYWs7CisKKwljYXNlIDM6CisJCWRpZCA9CisJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF9wc3RyMzIod2xhbmRldiwgZGlkLCAxMywgIjAwMDAwMDAwMDAwMDAiKTsKKworZXhpdDoKKwlpZiAocmVzdWx0KQorCQllcnIgPSAtRUZBVUxUOworCisJcmV0dXJuIGVycjsKK30KKworaW50IHByaXNtMl9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHU4IGtleV9pbmRleCkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisKKwlpbnQgZXJyID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorCQlrZXlfaW5kZXgpOworCisJaWYgKHJlc3VsdCkKKwkJZXJyID0gLUVGQVVMVDsKKworCXJldHVybiBlcnI7Cit9CisKKworaW50IHByaXNtMl9nZXRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSBxdWFsaXR5OworCWludCByZXN1bHQ7CisKKwltZW1zZXQoc2luZm8sIDAsIHNpemVvZigqc2luZm8pKTsKKworCWlmICgod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIGJ1aWxkIHJlcXVlc3QgbWVzc2FnZSAqLworCXF1YWxpdHkubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OworCXF1YWxpdHkuZGJtLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CisJcXVhbGl0eS5kYm0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCisJLyogc2VuZCBtZXNzYWdlIHRvIG5zZCAqLworCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXN1bHQgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAoc3RydWN0IHA4MDIxMW1zZyAqKSAmcXVhbGl0eSk7CisKKworCWlmIChyZXN1bHQgPT0gMCkgeworCQlzaW5mby0+dHhyYXRlLmxlZ2FjeSA9IHF1YWxpdHkudHhyYXRlLmRhdGE7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJCXNpbmZvLT5zaWduYWwgPSBxdWFsaXR5LmxldmVsLmRhdGE7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgcHJpc20yX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgcHJpc20yX3dpcGh5X3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuIG1zZzE7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgbXNnMjsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCWludCBudW1ic3MgPSAwOworCWludCBpID0gMDsKKwl1OCBpZV9idWZbNDZdOworCWludCBpZV9sZW47CisKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCAmJiBwcml2LT5zY2FuX3JlcXVlc3QgIT0gcmVxdWVzdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9FU1NfQVApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gcmVxdWVzdDsKKworCW1lbXNldCgmbXNnMSwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbikpOworCW1zZzEubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuOworCW1zZzEuYnNzdHlwZS5kYXRhID0gUDgwMjExRU5VTV9ic3N0eXBlX2FueTsKKworCW1lbXNldCgmKG1zZzEuYnNzaWQuZGF0YSksIDB4RkYsIHNpemVvZihwODAyMTFpdGVtX3BzdHI2X3QpKTsKKwltc2cxLmJzc2lkLmRhdGEubGVuID0gNjsKKworCWlmIChyZXF1ZXN0LT5uX3NzaWRzID4gMCkgeworCQltc2cxLnNjYW50eXBlLmRhdGEgPSBQODAyMTFFTlVNX3NjYW50eXBlX2FjdGl2ZTsKKwkJbXNnMS5zc2lkLmRhdGEubGVuID0gcmVxdWVzdC0+c3NpZHMtPnNzaWRfbGVuOworCQltZW1jcHkobXNnMS5zc2lkLmRhdGEuZGF0YSwgcmVxdWVzdC0+c3NpZHMtPnNzaWQsIHJlcXVlc3QtPnNzaWRzLT5zc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJbXNnMS5zY2FudHlwZS5kYXRhID0gMDsKKwl9CisJbXNnMS5wcm9iZWRlbGF5LmRhdGEgPSAwOworCisJZm9yIChpID0gMDsKKwkJKGkgPCByZXF1ZXN0LT5uX2NoYW5uZWxzKSAmJiBpIDwgQVJSQVlfU0laRShwcmlzbTJfY2hhbm5lbHMpOworCQlpKyspCisJCW1zZzEuY2hhbm5lbGxpc3QuZGF0YS5kYXRhW2ldID0KKwkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChyZXF1ZXN0LT5jaGFubmVsc1tpXS0+Y2VudGVyX2ZyZXEpOworCW1zZzEuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSByZXF1ZXN0LT5uX2NoYW5uZWxzOworCisJbXNnMS5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOworCW1zZzEubWluY2hhbm5lbHRpbWUuZGF0YSA9IDIwMDsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cxKTsKKwlpZiAocmVzdWx0KSB7CisJCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyKG1zZzEucmVzdWx0Y29kZS5kYXRhKTsKKwkJZ290byBleGl0OworCX0KKwkvKiBOb3cgcmV0cmlldmUgc2NhbiByZXN1bHRzICovCisJbnVtYnNzID0gbXNnMS5udW1ic3MuZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1ic3M7IGkrKykgeworCQltZW1zZXQoJm1zZzIsIDAsIHNpemVvZihtc2cyKSk7CisJCW1zZzIubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHM7CisJCW1zZzIuYnNzaW5kZXguZGF0YSA9IGk7CisKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZzIpOworCQlpZiAoKHJlc3VsdCAhPSAwKSB8fAorCQkgICAgKG1zZzIucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSkgeworCQkJYnJlYWs7CisJCX0KKworCQlpZV9idWZbMF0gPSBXTEFOX0VJRF9TU0lEOworCQlpZV9idWZbMV0gPSBtc2cyLnNzaWQuZGF0YS5sZW47CisJCWllX2xlbiA9IGllX2J1ZlsxXSArIDI7CisJCW1lbWNweSgmaWVfYnVmWzJdLCAmKG1zZzIuc3NpZC5kYXRhLmRhdGEpLCBtc2cyLnNzaWQuZGF0YS5sZW4pOworCQljZmc4MDIxMV9pbmZvcm1fYnNzKHdpcGh5LAorCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEobXNnMi5kc2NoYW5uZWwuZGF0YSkpLAorCQkJKGNvbnN0IHU4ICopICYobXNnMi5ic3NpZC5kYXRhLmRhdGEpLAorCQkJbXNnMi50aW1lc3RhbXAuZGF0YSwgbXNnMi5jYXBpbmZvLmRhdGEsCisJCQltc2cyLmJlYWNvbnBlcmlvZC5kYXRhLAorCQkJaWVfYnVmLAorCQkJaWVfbGVuLAorCQkJKG1zZzIuc2lnbmFsLmRhdGEgLSA2NTUzNikgKiAxMDAsIC8qIENvbnZlcnNpb24gdG8gc2lnbmVkIHR5cGUgKi8KKwkJCUdGUF9LRVJORUwKKwkJKTsKKwl9CisKKwlpZiAocmVzdWx0KQorCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cyLnJlc3VsdGNvZGUuZGF0YSk7CisKK2V4aXQ6CisJY2ZnODAyMTFfc2Nhbl9kb25lKHJlcXVlc3QsIGVyciA/IDEgOiAwKTsKKwlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK2ludCBwcmlzbTJfc2V0X3dpcGh5X3BhcmFtcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgcHJpc20yX3dpcGh5X3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBwcml2LT53bGFuZGV2OworCXUzMiBkYXRhOworCWludCByZXN1bHQ7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQpIHsKKwkJaWYgKHdpcGh5LT5ydHNfdGhyZXNob2xkID09IC0xKQorCQkJZGF0YSA9IDIzNDc7CisJCWVsc2UKKwkJCWRhdGEgPSB3aXBoeS0+cnRzX3RocmVzaG9sZDsKKworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZCwKKwkJCQkJCWRhdGEpOworCQlpZiAocmVzdWx0KSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBleGl0OworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9GUkFHX1RIUkVTSE9MRCkgeworCQlpZiAod2lwaHktPmZyYWdfdGhyZXNob2xkID09IC0xKQorCQkJZGF0YSA9IDIzNDY7CisJCWVsc2UKKwkJCWRhdGEgPSB3aXBoeS0+ZnJhZ190aHJlc2hvbGQ7CisKKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAorCQkJCQkJZGF0YSk7CisJCWlmIChyZXN1bHQpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKK2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IHByaXNtMl9jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQoreworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzbWUtPmNoYW5uZWw7CisJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4gbXNnX2pvaW47CisJdTMyIGRpZDsKKwlpbnQgbGVuZ3RoID0gc21lLT5zc2lkX2xlbjsKKwlpbnQgY2hhbiA9IC0xOworCWludCBpc193ZXAgPSAoc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwKSB8fAorCSAgICAoc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCk7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCS8qIFNldCB0aGUgY2hhbm5lbCAqLworCWlmIChjaGFubmVsKSB7CisJCWNoYW4gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKKwkJCQkJCWNoYW4pOworCQlpZiAocmVzdWx0KQorCQkJZ290byBleGl0OworCX0KKworCS8qIFNldCB0aGUgYXV0aG9yaXNhdGlvbiAqLworCWlmICgoc21lLT5hdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSkgfHwKKwkJKChzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQykgJiYgIWlzX3dlcCkpCisJCQltc2dfam9pbi5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisJZWxzZSBpZiAoKHNtZS0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSkgfHwKKwkJKChzbWUtPmF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQykgJiYgaXNfd2VwKSkKKwkJCW1zZ19qb2luLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIlVuaGFuZGxlZCBhdXRob3Jpc2F0aW9uIHR5cGUgZm9yIGNvbm5lY3QgKCVkKVxuIiwKKwkJCXNtZS0+YXV0aF90eXBlKTsKKworCS8qIFNldCB0aGUgZW5jcnlwdGlvbiAtIHdlIG9ubHkgc3VwcG9ydCB3ZXAgKi8KKwlpZiAoaXNfd2VwKSB7CisJCWlmIChzbWUtPmtleSkgeworCQkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCURJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKwkJCQlzbWUtPmtleV9pZHgpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGV4aXQ7CisKKwkJCS8qIHNlbmQga2V5IHRvIGRyaXZlciAqLworCQkJc3dpdGNoIChzbWUtPmtleV9pZHgpIHsKKwkJCWNhc2UgMDoKKwkJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMToKKwkJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMjoKKwkJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzoKKwkJCQlkaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF9wc3RyMzIod2xhbmRldiwgZGlkLCBzbWUtPmtleV9sZW4sICh1OCAqKSBzbWUtPmtleSk7CisJCQlpZiAocmVzdWx0KQorCQkJCWdvdG8gZXhpdDsKKworCQl9CisKKwkJLyogQXNzdW1lIHdlIHNob3VsZCBzZXQgcHJpdmFjeSBpbnZva2VkIGFuZCBleGNsdWRlIHVuZW5jcnlwdGVkCisJCSAgIFdlIGNvdWxkIHBvc3NpYmx5IHVzZSBzbWUtPnByaXZhY3kgaGVyZSwgYnV0IHRoZSBhc3N1bXB0aW9uCisJCSAgIHNlZW1zIHJlYXNvbmFibGUgYW55d2F5ICovCisJCXJlc3VsdCA9IHByaXNtMl9kb21pYnNldF91aW50MzIod2xhbmRldiwKKwkJCQkJCURJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCQkJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJCQkJCQlQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBleGl0OworCisJfSBlbHNlIHsKKwkJLyogQXNzdW1lIHdlIHNob3VsZCB1bnNldCBwcml2YWN5IGludm9rZWQKKwkJICAgYW5kIGV4Y2x1ZGUgdW5lbmNyeXB0ZWQgKi8KKwkJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQkJCQkJRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJCQkJCQlQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKworCQlyZXN1bHQgPSBwcmlzbTJfZG9taWJzZXRfdWludDMyKHdsYW5kZXYsCisJCQkJCQlESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJCQkJCQlQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWdvdG8gZXhpdDsKKworCX0KKworCS8qIE5vdyBkbyB0aGUgYWN0dWFsIGpvaW4uIE5vdGUgdGhlcmUgaXMgbm8gd2F5IHRoYXQgSSBjYW4KKwkgICBzZWUgdG8gcmVxdWVzdCBhIHNwZWNpZmljIGJzc2lkICovCisJbXNnX2pvaW4ubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKwltZW1jcHkobXNnX2pvaW4uc3NpZC5kYXRhLmRhdGEsIHNtZS0+c3NpZCwgbGVuZ3RoKTsKKwltc2dfam9pbi5zc2lkLmRhdGEubGVuID0gbGVuZ3RoOworCisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZ19qb2luKTsKKworZXhpdDoKKwlpZiAocmVzdWx0KQorCQllcnIgPSAtRUZBVUxUOworCisJcmV0dXJuIGVycjsKK30KKworaW50IHByaXNtMl9kaXNjb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHUxNiByZWFzb25fY29kZSkKK3sKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4gbXNnX2pvaW47CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCisJLyogRG8gYSBqb2luLCB3aXRoIGEgYm9ndXMgc3NpZC4gVGhhdHMgdGhlIG9ubHkgd2F5IEkgY2FuIHRoaW5rIG9mICovCisJbXNnX2pvaW4ubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CisKKwltZW1jcHkobXNnX2pvaW4uc3NpZC5kYXRhLmRhdGEsICItLS0iLCAzKTsKKwltc2dfam9pbi5zc2lkLmRhdGEubGVuID0gMzsKKworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2dfam9pbik7CisKKwlpZiAocmVzdWx0KQorCQllcnIgPSAtRUZBVUxUOworCisJcmV0dXJuIGVycjsKK30KKworCitpbnQgcHJpc20yX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworaW50IHByaXNtMl9sZWF2ZV9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisKK2ludCBwcmlzbTJfc2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gbmw4MDIxMV90eF9wb3dlcl9zZXR0aW5nIHR5cGUsCisJCQlpbnQgbWJtKQoreworCXN0cnVjdCBwcmlzbTJfd2lwaHlfcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IHByaXYtPndsYW5kZXY7CisJdTMyIGRhdGE7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKKworCWlmICh0eXBlID09IE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDKQorCQlkYXRhID0gMzA7CisJZWxzZQorCQlkYXRhID0gTUJNX1RPX0RCTShtYm0pOworCisJcmVzdWx0ID0gcHJpc20yX2RvbWlic2V0X3VpbnQzMih3bGFuZGV2LAorCQlESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsLAorCQlkYXRhKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcHJpc20yX2dldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgKmRibSkKK3sKKwlzdHJ1Y3QgcHJpc20yX3dpcGh5X3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBwcml2LT53bGFuZGV2OworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0IG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1fdWludDMyX3QgKikgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOworCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0tPmRpZCA9CisJICAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CisKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KKworCSpkYm0gPSBtaWJpdGVtLT5kYXRhOworCitleGl0OgorCXJldHVybiBlcnI7Cit9CisKKworCisKKy8qIEludGVyZmFjZSBjYWxsYmFjayBmdW5jdGlvbnMsIHBhc3NpbmcgZGF0YSBiYWNrIHVwIHRvIHRoZSBjZmc4MDIxMSBsYXllciAqLwordm9pZCBwcmlzbTJfY29ubmVjdF9yZXN1bHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCBmYWlsZWQpCit7CisJdTE2IHN0YXR1cyA9IGZhaWxlZCA/IFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUgOiBXTEFOX1NUQVRVU19TVUNDRVNTOworCisJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQod2xhbmRldi0+bmV0ZGV2LCB3bGFuZGV2LT5ic3NpZCwKKwkJCQlOVUxMLCAwLCBOVUxMLCAwLCBzdGF0dXMsIEdGUF9LRVJORUwpOworfQorCit2b2lkIHByaXNtMl9kaXNjb25uZWN0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZCh3bGFuZGV2LT5uZXRkZXYsIDAsIE5VTEwsCisJCTAsIEdGUF9LRVJORUwpOworfQorCit2b2lkIHByaXNtMl9yb2FtZWQod2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCWNmZzgwMjExX3JvYW1lZCh3bGFuZGV2LT5uZXRkZXYsIHdsYW5kZXYtPmJzc2lkLAorCQlOVUxMLCAwLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKK30KKworCisvKiBTdHJ1Y3R1cmVzIGZvciBkZWNsYXJpbmcgd2lwaHkgaW50ZXJmYWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNmZzgwMjExX29wcyBwcmlzbTJfdXNiX2NmZ19vcHMgPSB7CisJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBwcmlzbTJfY2hhbmdlX3ZpcnR1YWxfaW50ZiwKKwkuYWRkX2tleSA9IHByaXNtMl9hZGRfa2V5LAorCS5nZXRfa2V5ID0gcHJpc20yX2dldF9rZXksCisJLmRlbF9rZXkgPSBwcmlzbTJfZGVsX2tleSwKKwkuc2V0X2RlZmF1bHRfa2V5ID0gcHJpc20yX3NldF9kZWZhdWx0X2tleSwKKwkuZ2V0X3N0YXRpb24gPSBwcmlzbTJfZ2V0X3N0YXRpb24sCisJLnNjYW4gPSBwcmlzbTJfc2NhbiwKKwkuc2V0X3dpcGh5X3BhcmFtcyA9IHByaXNtMl9zZXRfd2lwaHlfcGFyYW1zLAorCS5jb25uZWN0ID0gcHJpc20yX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QgPSBwcmlzbTJfZGlzY29ubmVjdCwKKwkuam9pbl9pYnNzID0gcHJpc20yX2pvaW5faWJzcywKKwkubGVhdmVfaWJzcyA9IHByaXNtMl9sZWF2ZV9pYnNzLAorCS5zZXRfdHhfcG93ZXIgPSBwcmlzbTJfc2V0X3R4X3Bvd2VyLAorCS5nZXRfdHhfcG93ZXIgPSBwcmlzbTJfZ2V0X3R4X3Bvd2VyLAorfTsKKworCisvKiBGdW5jdGlvbnMgdG8gY3JlYXRlL2ZyZWUgd2lwaHkgaW50ZXJmYWNlICovCitzdHJ1Y3Qgd2lwaHkgKndsYW5fY3JlYXRlX3dpcGh5KHN0cnVjdCBkZXZpY2UgKmRldiwgd2xhbmRldmljZV90ICp3bGFuZGV2KQoreworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJc3RydWN0IHByaXNtMl93aXBoeV9wcml2YXRlICpwcml2OworCXdpcGh5ID0gd2lwaHlfbmV3KCZwcmlzbTJfdXNiX2NmZ19vcHMsIHNpemVvZihzdHJ1Y3QgcHJpc20yX3dpcGh5X3ByaXZhdGUpKTsKKwlpZiAoIXdpcGh5KQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlwcml2LT53bGFuZGV2ID0gd2xhbmRldjsKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHByaXNtMl9jaGFubmVscywgc2l6ZW9mKHByaXNtMl9jaGFubmVscykpOworCW1lbWNweShwcml2LT5yYXRlcywgcHJpc20yX3JhdGVzLCBzaXplb2YocHJpc20yX3JhdGVzKSk7CisJcHJpdi0+YmFuZC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzOworCXByaXYtPmJhbmQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocHJpc20yX2NoYW5uZWxzKTsKKwlwcml2LT5iYW5kLmJpdHJhdGVzID0gcHJpdi0+cmF0ZXM7CisJcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShwcmlzbTJfcmF0ZXMpOworCXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCisJc2V0X3dpcGh5X2Rldih3aXBoeSwgZGV2KTsKKwl3aXBoeS0+cHJpdmlkID0gcHJpc20yX3dpcGh5X3ByaXZpZDsKKwl3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXdpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQkgfCBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCXdpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX01CTTsKKwl3aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gUFJJU00yX05VTV9DSVBIRVJfU1VJVEVTOworCXdpcGh5LT5jaXBoZXJfc3VpdGVzID0gcHJpc20yX2NpcGhlcl9zdWl0ZXM7CisKKwlpZiAod2lwaHlfcmVnaXN0ZXIod2lwaHkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gd2lwaHk7Cit9CisKKwordm9pZCB3bGFuX2ZyZWVfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwl3aXBoeV91bnJlZ2lzdGVyKHdpcGh5KTsKKwl3aXBoeV9mcmVlKHdpcGh5KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAppbmRleCAxZmE0MmUwLi5mYTk0YTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC0xMjg0LDYgKzEyODQsOCBAQAogCXUxNiBsaW5rX3N0YXR1c19uZXc7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBhdXRocTsKIAorCXUzMiB0eHJhdGU7CisKIAkvKiBBbmQgaGVyZSB3ZSBoYXZlIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBpbiBwcml2ICovCiAKIAkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KQEAgLTE0MDcsNyArMTQwOSw3IEBACiBpbnQgaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7CiBpbnQKIGhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKKwkJICAgICB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLCBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApOwogdm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAogaW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwppbmRleCBhNDFkYjVkLi5lYTgxY2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKQEAgLTI3MDYsOCArMjcwNiw4IEBACiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCi0JCQkgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKKwkJCSB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJIHN0cnVjdCBwODAyMTFfbWV0YXdlcCAqcDgwMjExX3dlcCkKIHsKIAlpbnQgdXNicGt0bGVuID0gc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCk7CiAJaW50IHJlc3VsdDsKQEAgLTI3NTIsNyArMjc1Miw3IEBACiAKIAkvKiBjb3B5IHRoZSBoZWFkZXIgb3ZlciB0byB0aGUgdHhkZXNjICovCiAJbWVtY3B5KCYoaHctPnR4YnVmZi50eGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpLCBwODAyMTFfaGRyLAotCSAgICAgICBzaXplb2YocDgwMjExX2hkcl90KSk7CisJICAgICAgIHNpemVvZih1bmlvbiBwODAyMTFfaGRyKSk7CiAKIAkvKiBpZiB3ZSdyZSB1c2luZyBob3N0IFdFUCwgaW5jcmVhc2Ugc2l6ZSBieSBJVitJQ1YgKi8KIAlpZiAocDgwMjExX3dlcC0+ZGF0YSkgewpAQCAtMjgwNSwxMSArMjgwNSwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYKLQkgICAgLyogTm90ZSB0aGUgYml0d2lzZSBPUiwgbm90IHRoZSBsb2dpY2FsIE9SLiAqLwotCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfAotCSAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpKSB7Ci0JCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CisJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkKSB7CisJCWludCBzY2hlZDsKKworCQlzY2hlZCA9ICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOworCQlzY2hlZCB8PSAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKTsKKwkJaWYgKHNjaGVkKQorCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzQ3MSw3ICszNDczLDcgQEAKIAloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSBza2ItPmRhdGE7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJaW50IGhkcmxlbjsKLQlwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YTsKKwlzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqcnhtZXRhOwogCXUxNiBkYXRhX2xlbjsKIAl1MTYgZmM7CiAKQEAgLTM1ODgsMTQgKzM1OTAsMTQgQEAKIAlkYXRhbGVuID0gbGUxNl90b19jcHUocnhkZXNjLT5kYXRhX2xlbik7CiAKIAkvKiBBbGxvY2F0ZSBhbiBpbmQgbWVzc2FnZStmcmFtZXNpemUgc2tiICovCi0Jc2tibGVuID0gc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkgKyBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCXNrYmxlbiA9IHNpemVvZihzdHJ1Y3QgcDgwMjExX2NhcGhkcikgKyBoZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOwogCiAJLyogc2FuaXR5IGNoZWNrIHRoZSBsZW5ndGggKi8KIAlpZiAoc2tibGVuID4KLQkgICAgKHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKKwkgICAgKHNpemVvZihzdHJ1Y3QgcDgwMjExX2NhcGhkcikgKwogCSAgICAgV0xBTl9IRFJfQTRfTEVOICsgV0xBTl9EQVRBX01BWExFTiArIFdMQU5fQ1JDX0xFTikpIHsKIAkJcHJfZGVidWcoIm92ZXJsZW4gZnJtOiBsZW49JXpkXG4iLAotCQkJIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJCSBza2JsZW4gLSBzaXplb2Yoc3RydWN0IHA4MDIxMV9jYXBoZHIpKTsKIAl9CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbik7CkBAIC0zNjA5LDEzICszNjExLDEzIEBACiAJLyogb25seSBwcmVwZW5kIHRoZSBwcmlzbSBoZWFkZXIgaWYgaW4gdGhlIHJpZ2h0IG1vZGUgKi8KIAlpZiAoKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNKSAmJgogCSAgICAoaHctPnNuaWZmaGRyICE9IDApKSB7Ci0JCXA4MDIxMV9jYXBoZHJfdCAqY2FwaGRyOworCQlzdHJ1Y3QgcDgwMjExX2NhcGhkciAqY2FwaGRyOwogCQkvKiBUaGUgTkVXIGhlYWRlciBmb3JtYXQhICovCi0JCWRhdGFwID0gc2tiX3B1dChza2IsIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKLQkJY2FwaGRyID0gKHA4MDIxMV9jYXBoZHJfdCAqKSBkYXRhcDsKKwkJZGF0YXAgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBwODAyMTFfY2FwaGRyKSk7CisJCWNhcGhkciA9IChzdHJ1Y3QgcDgwMjExX2NhcGhkciAqKSBkYXRhcDsKIAogCQljYXBoZHItPnZlcnNpb24gPSBodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOwotCQljYXBoZHItPmxlbmd0aCA9IGh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwkJY2FwaGRyLT5sZW5ndGggPSBodG9ubChzaXplb2Yoc3RydWN0IHA4MDIxMV9jYXBoZHIpKTsKIAkJY2FwaGRyLT5tYWN0aW1lID0gX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKIAkJY2FwaGRyLT5ob3N0dGltZSA9IF9fY3B1X3RvX2JlNjQoamlmZmllcyk7CiAJCWNhcGhkci0+cGh5dHlwZSA9IGh0b25sKDQpOwkvKiBkc3NfZG90MTFfYiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCmluZGV4IDA1OWUxNTAuLjgzODc5ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKQEAgLTEwMywxNSArMTAzLDE1IEBACiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBldGhjb252LAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKKwkJCXN0cnVjdCBza19idWZmICpza2IsIHVuaW9uIHA4MDIxMV9oZHIgKnA4MDIxMV9oZHIsCisJCQlzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApCiB7CiAKIAl1MTYgZmM7CiAJdTE2IHByb3RvOwotCXdsYW5fZXRoaGRyX3QgZV9oZHI7Ci0Jd2xhbl9sbGNfdCAqZV9sbGM7Ci0Jd2xhbl9zbmFwX3QgKmVfc25hcDsKKwlzdHJ1Y3Qgd2xhbl9ldGhoZHIgZV9oZHI7CisJc3RydWN0IHdsYW5fbGxjICplX2xsYzsKKwlzdHJ1Y3Qgd2xhbl9zbmFwICplX3NuYXA7CiAJaW50IGZvbzsKIAogCW1lbWNweSgmZV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKGVfaGRyKSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogCQkJLyogdGFjayBvbiBTTkFQICovCiAJCQllX3NuYXAgPQotCQkJICAgICh3bGFuX3NuYXBfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQkJICAgIChzdHJ1Y3Qgd2xhbl9zbmFwICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCB3bGFuX3NuYXApKTsKIAkJCWVfc25hcC0+dHlwZSA9IGh0b25zKHByb3RvKTsKIAkJCWlmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaAogCQkJICAgICYmIHA4MDIxMV9zdHRfZmluZHByb3RvKHByb3RvKSkgewpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIAkJCS8qIHRhY2sgb24gbGxjICovCiAJCQllX2xsYyA9Ci0JCQkgICAgKHdsYW5fbGxjX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCQkJICAgIChzdHJ1Y3Qgd2xhbl9sbGMgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IHdsYW5fbGxjKSk7CiAJCQllX2xsYy0+ZHNhcCA9IDB4QUE7CS8qIFNOQVAsIHNlZSBJRUVFIDgwMiAqLwogCQkJZV9sbGMtPnNzYXAgPSAweEFBOwogCQkJZV9sbGMtPmN0bCA9IDB4MDM7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAogLyogamtyaWVnbDogZnJvbSBvcmlub2NvLCBtb2RpZmllZCAqLwogc3RhdGljIHZvaWQgb3Jpbm9jb19zcHlfZ2F0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgY2hhciAqbWFjLAotCQkJICAgICAgIHA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhKQorCQkJICAgICAgIHN0cnVjdCBwODAyMTFfcnhtZXRhICpyeG1ldGEpCiB7CiAJaW50IGk7CiAKQEAgLTI4MCwxNyArMjgwLDE3IEBACiAJdW5zaWduZWQgaW50IHBheWxvYWRfb2Zmc2V0OwogCXU4IGRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwogCXU4IHNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXA4MDIxMV9oZHJfdCAqd19oZHI7Ci0Jd2xhbl9ldGhoZHJfdCAqZV9oZHI7Ci0Jd2xhbl9sbGNfdCAqZV9sbGM7Ci0Jd2xhbl9zbmFwX3QgKmVfc25hcDsKKwl1bmlvbiBwODAyMTFfaGRyICp3X2hkcjsKKwlzdHJ1Y3Qgd2xhbl9ldGhoZHIgKmVfaGRyOworCXN0cnVjdCB3bGFuX2xsYyAqZV9sbGM7CisJc3RydWN0IHdsYW5fc25hcCAqZV9zbmFwOwogCiAJaW50IGZvbzsKIAogCXBheWxvYWRfbGVuZ3RoID0gc2tiLT5sZW4gLSBXTEFOX0hEUl9BM19MRU4gLSBXTEFOX0NSQ19MRU47CiAJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BM19MRU47CiAKLQl3X2hkciA9IChwODAyMTFfaGRyX3QgKikgc2tiLT5kYXRhOworCXdfaGRyID0gKHVuaW9uIHA4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCiAJLyogc2V0dXAgc29tZSB2YXJzIGZvciBjb252ZW5pZW5jZSAqLwogCWZjID0gbGUxNl90b19jcHUod19oZHItPmEzLmZjKTsKQEAgLTM0NSwxNCArMzQ1LDE0IEBACiAJCXdsYW5kZXYtPnJ4LmRlY3J5cHQrKzsKIAl9CiAKLQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7CisJZV9oZHIgPSAoc3RydWN0IHdsYW5fZXRoaGRyICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7CiAKLQllX2xsYyA9ICh3bGFuX2xsY190ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7CisJZV9sbGMgPSAoc3RydWN0IHdsYW5fbGxjICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCk7CiAJZV9zbmFwID0KLQkgICAgKHdsYW5fc25hcF90ICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHNpemVvZih3bGFuX2xsY190KSk7CisJICAgIChzdHJ1Y3Qgd2xhbl9zbmFwICopIChza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIHNpemVvZihzdHJ1Y3Qgd2xhbl9sbGMpKTsKIAogCS8qIFRlc3QgZm9yIHRoZSB2YXJpb3VzIGVuY29kaW5ncyAqLwotCWlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fZXRoaGRyX3QpKSAmJgorCWlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCB3bGFuX2V0aGhkcikpICYmCiAJICAgIChlX2xsYy0+ZHNhcCAhPSAweGFhIHx8IGVfbGxjLT5zc2FwICE9IDB4YWEpICYmCiAJICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CiAJICAgICAobWVtY21wKHNhZGRyLCBlX2hkci0+c2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApKSkgewpAQCAtMzcyLDcgKzM3Miw3IEBACiAJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOwogCi0JfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHdsYW5fbGxjKSArIHNpemVvZihzdHJ1Y3Qgd2xhbl9zbmFwKSkKIAkJICAgJiYgKGVfbGxjLT5kc2FwID09IDB4YWEpICYmIChlX2xsYy0+c3NhcCA9PSAweGFhKQogCQkgICAmJiAoZV9sbGMtPmN0bCA9PSAweDAzKQogCQkgICAmJgpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOwogCiAJCS8qIGNyZWF0ZSA4MDIuMyBoZWFkZXIgYXQgYmVnaW5uaW5nIG9mIHNrYi4gKi8KLQkJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CisJCWVfaGRyID0gKHN0cnVjdCB3bGFuX2V0aGhkciAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CiAJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOwogCQllX2hkci0+dHlwZSA9IGh0b25zKHBheWxvYWRfbGVuZ3RoKTsKQEAgLTQwNiw3ICs0MDYsNyBAQAogCQkvKiBjaG9wIG9mZiB0aGUgODAyLjExIENSQyAqLwogCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gV0xBTl9DUkNfTEVOKTsKIAotCX0gZWxzZSBpZiAoKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2xsY190KSArIHNpemVvZih3bGFuX3NuYXBfdCkpCisJfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCB3bGFuX2xsYykgKyBzaXplb2Yoc3RydWN0IHdsYW5fc25hcCkpCiAJCSAgICYmIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJiAoZV9sbGMtPnNzYXAgPT0gMHhhYSkKIAkJICAgJiYgKGVfbGxjLT5jdGwgPT0gMHgwMykpIHsKIAkJcHJfZGVidWcoIjgwMi4xaC9SRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKQEAgLTQxNCwxMyArNDE0LDEzIEBACiAJCS8qIGJ1aWxkIGEgRElYSUkgKyBSRkM4OTQgKi8KIAogCQkvKiBUZXN0IGZvciBhbiBvdmVybGVuZ3RoIGZyYW1lICovCi0JCWlmICgocGF5bG9hZF9sZW5ndGggLSBzaXplb2Yod2xhbl9sbGNfdCkgLSBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQlpZiAoKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCB3bGFuX2xsYykgLSBzaXplb2Yoc3RydWN0IHdsYW5fc25hcCkpCiAJCSAgICA+IG5ldGRldi0+bXR1KSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KIAkJCXByaW50ayhLRVJOX0VSUiAiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCi0JCQkgICAgICAgKGxvbmcgaW50KShwYXlsb2FkX2xlbmd0aCAtIHNpemVvZih3bGFuX2xsY190KSAtCi0JCQkJCSAgc2l6ZW9mKHdsYW5fc25hcF90KSksIG5ldGRldi0+bXR1KTsKKwkJCSAgICAgICAobG9uZyBpbnQpKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCB3bGFuX2xsYykgLQorCQkJCQkgIHNpemVvZihzdHJ1Y3Qgd2xhbl9zbmFwKSksIG5ldGRldi0+bXR1KTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTQyOCwxMyArNDI4LDEzIEBACiAJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOwogCiAJCS8qIGNob3AgbGxjIGhlYWRlciBmcm9tIHNrYi4gKi8KLQkJc2tiX3B1bGwoc2tiLCBzaXplb2Yod2xhbl9sbGNfdCkpOworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgd2xhbl9sbGMpKTsKIAogCQkvKiBjaG9wIHNuYXAgaGVhZGVyIGZyb20gc2tiLiAqLwotCQlza2JfcHVsbChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgd2xhbl9zbmFwKSk7CiAKIAkJLyogY3JlYXRlIDgwMi4zIGhlYWRlciBhdCBiZWdpbm5pbmcgb2Ygc2tiLiAqLwotCQllX2hkciA9ICh3bGFuX2V0aGhkcl90ICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKKwkJZV9oZHIgPSAoc3RydWN0IHdsYW5fZXRoaGRyICopIHNrYl9wdXNoKHNrYiwgV0xBTl9FVEhIRFJfTEVOKTsKIAkJZV9oZHItPnR5cGUgPSBlX3NuYXAtPnR5cGU7CiAJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCXNrYl9wdWxsKHNrYiwgcGF5bG9hZF9vZmZzZXQpOwogCiAJCS8qIGNyZWF0ZSA4MDIuMyBoZWFkZXIgYXQgYmVnaW5uaW5nIG9mIHNrYi4gKi8KLQkJZV9oZHIgPSAod2xhbl9ldGhoZHJfdCAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CisJCWVfaGRyID0gKHN0cnVjdCB3bGFuX2V0aGhkciAqKSBza2JfcHVzaChza2IsIFdMQU5fRVRISERSX0xFTik7CiAJCW1lbWNweShlX2hkci0+ZGFkZHIsIGRhZGRyLCBXTEFOX0VUSEFERFJfTEVOKTsKIAkJbWVtY3B5KGVfaGRyLT5zYWRkciwgc2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pOwogCQllX2hkci0+dHlwZSA9IGh0b25zKHBheWxvYWRfbGVuZ3RoKTsKQEAgLTU0Miw4ICs1NDIsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHA4MDIxMXNrYl9yeG1ldGFfZGV0YWNoKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcDgwMjExX3J4bWV0YV90ICpyeG1ldGE7Ci0JcDgwMjExX2ZybW1ldGFfdCAqZnJtbWV0YTsKKwlzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqcnhtZXRhOworCXN0cnVjdCBwODAyMTFfZnJtbWV0YSAqZnJtbWV0YTsKIAogCS8qIFNhbml0eSBjaGVja3MgKi8KIAlpZiAoc2tiID09IE5VTEwpIHsJLyogYmFkIHNrYiAqLwpAQCAtNTg5LDggKzU4OSw4IEBACiBpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExX3J4bWV0YV90ICpyeG1ldGE7Ci0JcDgwMjExX2ZybW1ldGFfdCAqZnJtbWV0YTsKKwlzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqcnhtZXRhOworCXN0cnVjdCBwODAyMTFfZnJtbWV0YSAqZnJtbWV0YTsKIAogCS8qIElmIHRoZXNlIGFscmVhZHkgaGF2ZSBtZXRhZGF0YSwgd2UgZXJyb3Igb3V0ISAqLwogCWlmIChQODAyMTFTS0JfUlhNRVRBKHNrYikgIT0gTlVMTCkgewpAQCAtNjAxLDcgKzYwMSw3IEBACiAJfQogCiAJLyogQWxsb2NhdGUgdGhlIHJ4bWV0YSAqLwotCXJ4bWV0YSA9IGt6YWxsb2Moc2l6ZW9mKHA4MDIxMV9yeG1ldGFfdCksIEdGUF9BVE9NSUMpOworCXJ4bWV0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwODAyMTFfcnhtZXRhKSwgR0ZQX0FUT01JQyk7CiAKIAlpZiAocnhtZXRhID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCkBAIC02MTUsOCArNjE1LDggQEAKIAlyeG1ldGEtPmhvc3R0aW1lID0gamlmZmllczsKIAogCS8qIE92ZXJsYXkgYSBmcm1tZXRhX3Qgb250byBza2ItPmNiICovCi0JbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihwODAyMTFfZnJtbWV0YV90KSk7Ci0JZnJtbWV0YSA9IChwODAyMTFfZnJtbWV0YV90ICopIChza2ItPmNiKTsKKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHN0cnVjdCBwODAyMTFfZnJtbWV0YSkpOworCWZybW1ldGEgPSAoc3RydWN0IHA4MDIxMV9mcm1tZXRhICopIChza2ItPmNiKTsKIAlmcm1tZXRhLT5tYWdpYyA9IFA4MDIxMV9GUk1NRVRBX01BR0lDOwogCWZybW1ldGEtPnJ4ID0gcnhtZXRhOwogZXhpdDoKQEAgLTY0MSw3ICs2NDEsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHA4MDIxMXNrYl9mcmVlKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXA4MDIxMV9mcm1tZXRhX3QgKm1ldGE7CisJc3RydWN0IHA4MDIxMV9mcm1tZXRhICptZXRhOwogCiAJbWV0YSA9IFA4MDIxMVNLQl9GUk1NRVRBKHNrYik7CiAJaWYgKG1ldGEgJiYgbWV0YS0+cngpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKaW5kZXggNmZlMTYzYi4uZWNhMDM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaApAQCAtNjMsMTcgKzYzLDE3IEBACiAKICNkZWZpbmUgUDgwMjExQ0FQVFVSRV9WRVJTSU9OCTB4ODAyMTEwMDEKIAotI2RlZmluZQlQODAyMTFfRlJNTUVUQV9NQUdJQwkJMHg4MDIxMTAKKyNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJMHg4MDIxMTAKIAogI2RlZmluZSBQODAyMTFTS0JfRlJNTUVUQShzKSBcCi0JKCgoKChwODAyMTFfZnJtbWV0YV90ICopKChzKS0+Y2IpKS0+bWFnaWMpID09IFA4MDIxMV9GUk1NRVRBX01BR0lDKSA/IFwKLQkJKChwODAyMTFfZnJtbWV0YV90ICopKChzKS0+Y2IpKSA6IFwKKwkoKCgoKHN0cnVjdCBwODAyMTFfZnJtbWV0YSAqKSgocyktPmNiKSktPm1hZ2ljKSA9PSBQODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCisJCSgoc3RydWN0IHA4MDIxMV9mcm1tZXRhICopKChzKS0+Y2IpKSA6IFwKIAkJKE5VTEwpKQogCiAjZGVmaW5lIFA4MDIxMVNLQl9SWE1FVEEocykgXAotCShQODAyMTFTS0JfRlJNTUVUQSgocykpID8gIFA4MDIxMVNLQl9GUk1NRVRBKChzKSktPnJ4IDogKChwODAyMTFfcnhtZXRhX3QgKikoTlVMTCkpKQorCShQODAyMTFTS0JfRlJNTUVUQSgocykpID8gIFA4MDIxMVNLQl9GUk1NRVRBKChzKSktPnJ4IDogKChzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqKShOVUxMKSkpCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9yeG1ldGEgeworc3RydWN0IHA4MDIxMV9yeG1ldGEgewogCXN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2OwogCiAJdTY0IG1hY3RpbWU7CQkvKiBIaS1yZXogTUFDLXN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KQEAgLTg3LDEyICs4NywxMiBAQAogCXVuc2lnbmVkIGludCBwcmVhbWJsZTsJLyogUDgwMjExRU5VTV9wcmVhbWJsZXR5cGVfKiAqLwogCXVuc2lnbmVkIGludCBlbmNvZGluZzsJLyogUDgwMjExRU5VTV9lbmNvZGluZ18qICovCiAKLX0gcDgwMjExX3J4bWV0YV90OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybW1ldGEgeworc3RydWN0IHA4MDIxMV9mcm1tZXRhIHsKIAl1bnNpZ25lZCBpbnQgbWFnaWM7Ci0JcDgwMjExX3J4bWV0YV90ICpyeDsKLX0gcDgwMjExX2ZybW1ldGFfdDsKKwlzdHJ1Y3QgcDgwMjExX3J4bWV0YSAqcng7Cit9OwogCiB2b2lkIHA4MDIxMXNrYl9mcmVlKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBwODAyMTFza2JfcnhtZXRhX2F0dGFjaChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xMDEsNyArMTAxLDcgQEAKIC8qCiAgKiBGcmFtZSBjYXB0dXJlIGhlYWRlci4gIChTZWUgZG9jL2NhcHR1cmVmcm0udHh0KQogICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyIHsKK3N0cnVjdCBwODAyMTFfY2FwaGRyIHsKIAl1MzIgdmVyc2lvbjsKIAl1MzIgbGVuZ3RoOwogCXU2NCBtYWN0aW1lOwpAQCAtMTE2LDM2ICsxMTYsMzYgQEAKIAlzMzIgc3NpX25vaXNlOwogCXUzMiBwcmVhbWJsZTsKIAl1MzIgZW5jb2Rpbmc7Ci19IHA4MDIxMV9jYXBoZHJfdDsKK307CiAKIC8qIGJ1ZmZlciBmcmVlIG1ldGhvZCBwb2ludGVyIHR5cGUgKi8KIHR5cGVkZWYgdm9pZCAoKmZyZWVidWZfbWV0aG9kX3QpICh2b2lkICpidWYsIGludCBzaXplKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgeworc3RydWN0IHA4MDIxMV9tZXRhd2VwIHsKIAl2b2lkICpkYXRhOwogCXU4IGl2WzRdOwogCXU4IGljdls0XTsKLX0gcDgwMjExX21ldGF3ZXBfdDsKK307CiAKIC8qIGxvY2FsIGV0aGVyIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2V0aGhkciB7CitzdHJ1Y3Qgd2xhbl9ldGhoZHIgewogCXU4IGRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwogCXU4IHNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwogCXUxNiB0eXBlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9ldGhoZHJfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBsb2NhbCBsbGMgaGVhZGVyIHR5cGUgKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fbGxjIHsKK3N0cnVjdCB3bGFuX2xsYyB7CiAJdTggZHNhcDsKIAl1OCBzc2FwOwogCXU4IGN0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fbGxjX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogbG9jYWwgc25hcCBoZWFkZXIgdHlwZSAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9zbmFwIHsKK3N0cnVjdCB3bGFuX3NuYXAgewogCXU4IG91aVtXTEFOX0lFRUVfT1VJX0xFTl07CiAJdTE2IHR5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX3NuYXBfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBDaXJjdWxhciBpbmNsdWRlIHRyaWNrICovCiBzdHJ1Y3Qgd2xhbmRldmljZTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgc2tiX2V0aGVyX3RvX3A4MDIxMShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCi0JCQlwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKKwkJCXN0cnVjdCBza19idWZmICpza2IsIHVuaW9uIHA4MDIxMV9oZHIgKnA4MDIxMV9oZHIsCisJCQlzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApOwogCiBpbnQgcDgwMjExX3N0dF9maW5kcHJvdG8odTE2IHByb3RvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaGRyLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaAppbmRleCA0MTlkZTRkLi4xZjZlNGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaApAQCAtOTQsNyArOTQsNyBAQAogCiAvKiBDb250cm9sICovCiAjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCQkweDgKLSNkZWZpbmUgV0xBTl9GU1RZUEVfQkxPQ0tBQ0sgIAkJMHg5CisjZGVmaW5lIFdMQU5fRlNUWVBFX0JMT0NLQUNLCQkweDkKICNkZWZpbmUgV0xBTl9GU1RZUEVfUFNQT0xMCQkweDBhCiAjZGVmaW5lIFdMQU5fRlNUWVBFX1JUUwkJCTB4MGIKICNkZWZpbmUgV0xBTl9GU1RZUEVfQ1RTCQkJMHgwYwpAQCAtMTMzLDEzICsxMzMsMTMgQEAKIAogI2RlZmluZSBXTEFOX0dFVF9GQ19GVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUKDIpIHwgQklUKDMpKSkgPj4gMikKICNkZWZpbmUgV0xBTl9HRVRfRkNfRlNUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoNCl8QklUKDUpfEJJVCg2KXxCSVQoNykpKSA+PiA0KQotI2RlZmluZSBXTEFOX0dFVF9GQ19UT0RTKG4pIAkoKCgodTE2KShuKSkgJiAoQklUKDgpKSkgPj4gOCkKKyNkZWZpbmUgV0xBTl9HRVRfRkNfVE9EUyhuKQkoKCgodTE2KShuKSkgJiAoQklUKDgpKSkgPj4gOCkKICNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoOSkpKSA+PiA5KQogI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKQkoKCgodTE2KShuKSkgJiAoQklUKDE0KSkpID4+IDE0KQogCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZUWVBFKG4pCSgoKHUxNikobikpIDw8IDIpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZTVFlQRShuKQkoKCh1MTYpKG4pKSA8PCA0KQotI2RlZmluZSBXTEFOX1NFVF9GQ19UT0RTKG4pIAkoKCh1MTYpKG4pKSA8PCA4KQorI2RlZmluZSBXTEFOX1NFVF9GQ19UT0RTKG4pCSgoKHUxNikobikpIDw8IDgpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZST01EUyhuKQkoKCh1MTYpKG4pKSA8PCA5KQogI2RlZmluZSBXTEFOX1NFVF9GQ19JU1dFUChuKQkoKCh1MTYpKG4pKSA8PCAxNCkKIApAQCAtMTQ3LDE2ICsxNDcsMTYgQEAKIAogLyogR2VuZXJpYyA4MDIuMTEgSGVhZGVyIHR5cGVzICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMgeworc3RydWN0IHA4MDIxMV9oZHJfYTMgewogCXUxNiBmYzsKIAl1MTYgZHVyOwogCXU4IGExW0VUSF9BTEVOXTsKIAl1OCBhMltFVEhfQUxFTl07CiAJdTggYTNbRVRIX0FMRU5dOwogCXUxNiBzZXE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX2EzX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hNCB7CitzdHJ1Y3QgcDgwMjExX2hkcl9hNCB7CiAJdTE2IGZjOwogCXUxNiBkdXI7CiAJdTggYTFbRVRIX0FMRU5dOwpAQCAtMTY0LDE4ICsxNjQsMTggQEAKIAl1OCBhM1tFVEhfQUxFTl07CiAJdTE2IHNlcTsKIAl1OCBhNFtFVEhfQUxFTl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX2E0X3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyIHsKLQlwODAyMTFfaGRyX2EzX3QgYTM7Ci0JcDgwMjExX2hkcl9hNF90IGE0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExX2hkcl90OwordW5pb24gcDgwMjExX2hkciB7CisJc3RydWN0IHA4MDIxMV9oZHJfYTMgYTM7CisJc3RydWN0IHA4MDIxMV9oZHJfYTQgYTQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRnJhbWUgYW5kIGhlYWRlciBsZW5ndGggbWFjcm9zICovCiAKICNkZWZpbmUgV0xBTl9DVExfRlJBTUVMRU4oZnN0eXBlKSAoXAogCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCT8gMjQgOiBcCi0JKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQkxPQ0tBQ0sgICAJPyAxNTIgOiBcCisJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfQkxPQ0tBQ0sJPyAxNTIgOiBcCiAJKGZzdHlwZSkgPT0gV0xBTl9GU1RZUEVfUFNQT0xMCQk/IDIwIDogXAogCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX1JUUwkJPyAyMCA6IFwKIAkoZnN0eXBlKSA9PSBXTEFOX0ZTVFlQRV9DVFMJCT8gMTQgOiBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaAppbmRleCA2NGNhN2Y5Li4wZDQ3NzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKQEAgLTc4LDEyICs3OCwxMiBAQAogLyogIGFyZ3VtZW50IHRvIHRoZSBpb2N0bCBzeXN0ZW0gY2FsbCB3aGVuIGlzc3VpbmcgYSByZXF1ZXN0IHRvICovCiAvKiAgdGhlIHA4MDIxMSBtb2R1bGUuICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMWlvY3RsX3JlcSB7CitzdHJ1Y3QgcDgwMjExaW9jdGxfcmVxIHsKIAljaGFyIG5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJY2FkZHJfdCBkYXRhOwogCXUzMiBtYWdpYzsKIAl1MTYgbGVuOwogCXUzMiByZXN1bHQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpb2N0bF9yZXFfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX1A4MDIxMUlPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaAppbmRleCBiOWJhZGNmLi5jNWYxYTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCkBAIC02Miw3ICs2Miw3IEBACiAvKiByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeSBsaXN0IG1ldGFkYXRhLCBncm91cCBsaXN0IG1ldGFkYXRhLCAqLwogLyogYW5kIGRhdGEgaXRlbSBtZXRhZGF0YSBmb3IgYm90aCBNaWIgYW5kIE1lc3NhZ2VzLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhIHsKK3N0cnVjdCBwODAyMTFtZXRhIHsKIAljaGFyICpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KIAl1MzIgZGlkOwkJLyogcGFydGlhbCBkaWQgKi8KIAl1MzIgZmxhZ3M7CQkvKiBzZXQgb2YgdmFyaW91cyBmbGFnIGJpdHMgKi8KQEAgLTc1LDE2ICs3NSwxNiBAQAogCXA4MDIxMV90b3RleHRfdCB0b3RleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwogCXA4MDIxMV9mcm9tdGV4dF90IGZyb210ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KIAlwODAyMTFfdmFsaWRfdCB2YWxpZGZ1bnB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi19IHA4MDIxMW1ldGFfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IGdycGxpc3RpdGVtIHsKK3N0cnVjdCBncnBsaXN0aXRlbSB7CiAJY2hhciAqbmFtZTsKLQlwODAyMTFtZXRhX3QgKml0ZW1saXN0OwotfSBncnBsaXN0aXRlbV90OworCXN0cnVjdCBwODAyMTFtZXRhICppdGVtbGlzdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtIHsKK3N0cnVjdCBjYXRsaXN0aXRlbSB7CiAJY2hhciAqbmFtZTsKLQlncnBsaXN0aXRlbV90ICpncnBsaXN0OwotfSBjYXRsaXN0aXRlbV90OworCXN0cnVjdCBncnBsaXN0aXRlbSAqZ3JwbGlzdDsKK307CiAKICNlbmRpZiAvKiBfUDgwMjExTUVUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKaW5kZXggZGIxMjcxMy4uYThhNGUzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaApAQCAtNDcsMjMgKzQ3LDIzIEBACiAjaWZuZGVmIF9QODAyMTFNS01FVEFTVFJVQ1RfSAogI2RlZmluZSBfUDgwMjExTUtNRVRBU1RSVUNUX0gKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCB7CitzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCXA4MDIxMWl0ZW1fdW5rMzkyX3QgbWliYXR0cmlidXRlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IHsKK3N0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJcDgwMjExaXRlbV91bmszOTJfdCBtaWJhdHRyaWJ1dGU7CiAJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuIHsKK3N0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtODEsOSArODEsOSBAQAogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IG51bWJzczsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGFwcGVuZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyB7CitzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMTEzLDYgKzExMyw3IEBACiAJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxhYmxlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgY2Zwb2xscmVxOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcHJpdmFjeTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNhcGluZm87CiAJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUxOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMjsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTM7CkBAIC0xMjksOSArMTMwLDkgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IHN1cHByYXRlNjsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHN1cHByYXRlNzsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHN1cHByYXRlODsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQgeworc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydCB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMTY3LDE3ICsxNjgsMTcgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTc7CiAJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU4OwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSB7CitzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJcDgwMjExaXRlbV91aW50MzJfdCBpZnN0YXRlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmIHsKK3N0cnVjdCBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZiB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMTg5LDE4ICsxOTAsMTggQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IHN0cmlwZmNzOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcGFja2V0X3RydW5jOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwIHsKK3N0cnVjdCBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXAgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7CiAJcDgwMjExaXRlbV91aW50MzJfdCBkZWNyeXB0OwogCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5jcnlwdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IHsKK3N0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMjA5LDkgKzIxMCwxMCBAQAogCXA4MDIxMWl0ZW1fdWludDMyX3QgbGluazsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGxldmVsOwogCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OworCXA4MDIxMWl0ZW1fdWludDMyX3QgdHhyYXRlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4geworc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW4gewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKQEAgLTIxOSwyNiArMjIxLDI2IEBACiAJdTggcGFkXzE5RFszXTsKIAlwODAyMTFpdGVtX3VpbnQzMl90IGF1dGh0eXBlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYSB7CitzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKIAlwODAyMTFpdGVtX3VuazEwMjRfdCBwZGE7CiAJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGUgeworc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5hYmxlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgZXhlYWRkcjsKIAlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGVfdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUgeworc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwpAQCAtMjQ2LDE3ICsyNDgsMTcgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IGxlbjsKIAlwODAyMTFpdGVtX3VuazQwOTZfdCBkYXRhOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIHsKK3N0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZSB7CiAJdTMyIG1zZ2NvZGU7CiAJdTMyIG1zZ2xlbjsKIAl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5hYmxlOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgeworc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIHsKIAl1MzIgbXNnY29kZTsKIAl1MzIgbXNnbGVuOwogCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CkBAIC0yNjQsNiArMjY2LDYgQEAKIAlwODAyMTFpdGVtX3VpbnQzMl90IGxlbjsKIAlwODAyMTFpdGVtX3VuazQwOTZfdCBkYXRhOwogCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKaW5kZXggZGViNTJmNS4uM2I1ZTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaApAQCAtMjk4LDcgKzI5OCw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsJCS8qIERPRVMgTk9UIGluY2x1ZGUgQ1JDICEhISEgKi8KIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC0zMTAsNyArMzEwLDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTMzMyw3ICszMzMsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAKQEAgLTM0OSw3ICszNDksNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC0zODEsNyArMzgxLDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTM5OCw3ICszOTgsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC00MzMsNyArNDMzLDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXUxNiB0eXBlOwogCXUxNiBsZW47CiAJdTggKmJ1ZjsKLQlwODAyMTFfaGRyX3QgKmhkcjsKKwl1bmlvbiBwODAyMTFfaGRyICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwogCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJdTE2IHR5cGU7CiAJdTE2IGxlbjsKIAl1OCAqYnVmOwotCXA4MDIxMV9oZHJfdCAqaGRyOworCXVuaW9uIHA4MDIxMV9oZHIgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCiAJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCkBAIC00ODYsNyArNDg2LDcgQEAKIAl1MTYgdHlwZTsKIAl1MTYgbGVuOwogCXU4ICpidWY7Ci0JcDgwMjExX2hkcl90ICpoZHI7CisJdW5pb24gcDgwMjExX2hkciAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KIAl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKaW5kZXggYzY5MWQzZS4uOGUwZjlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbXNnLmgKQEAgLTUwLDEwICs1MCwxMCBAQAogCiAjZGVmaW5lIFdMQU5fREVWTkFNRUxFTl9NQVgJMTYKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnIHsKK3N0cnVjdCBwODAyMTFtc2cgewogCXUzMiBtc2djb2RlOwogCXUzMiBtc2dsZW47CiAJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ190OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNlbmRpZiAvKiBfUDgwMjExTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKaW5kZXggNzYzYWIxMS4uYWExNzkyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC03NSw2ICs3NSw3IEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtODcsNiArODgsOCBAQAogI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKICNpbmNsdWRlICJwODAyMTFtZXRhZGVmLmgiCiAKKyNpbmNsdWRlICJjZmc4MDIxMS5jIgorCiAvKiBTdXBwb3J0IGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgcDgwMjExbmV0ZGV2X3J4X2JoKHVuc2lnbmVkIGxvbmcgYXJnKTsKIApAQCAtMjYxLDcgKzI2NCw3IEBACiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBhcmc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJbmV0ZGV2aWNlX3QgKmRldiA9IHdsYW5kZXYtPm5ldGRldjsKLQlwODAyMTFfaGRyX2EzX3QgKmhkcjsKKwlzdHJ1Y3QgcDgwMjExX2hkcl9hMyAqaGRyOwogCXUxNiBmYzsKIAogCS8qIExldCdzIGVtcHR5IG91ciBvdXIgcXVldWUgKi8KQEAgLTI4NSw3ICsyODgsNyBAQAogCQkJCW5ldGlmX3J4X25pKHNrYik7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewotCQkJCWhkciA9IChwODAyMTFfaGRyX2EzX3QgKikgc2tiLT5kYXRhOworCQkJCWhkciA9IChzdHJ1Y3QgcDgwMjExX2hkcl9hMyAqKSBza2ItPmRhdGE7CiAJCQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZjKTsKIAkJCQlpZiAocDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXYsIGZjKSkgewogCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0zNDcsOCArMzUwLDggQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgdHhyZXN1bHQgPSAtMTsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7Ci0JcDgwMjExX2hkcl90IHA4MDIxMV9oZHI7Ci0JcDgwMjExX21ldGF3ZXBfdCBwODAyMTFfd2VwOworCXVuaW9uIHA4MDIxMV9oZHIgcDgwMjExX2hkcjsKKwlzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgcDgwMjExX3dlcDsKIAogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTM1OCw4ICszNjEsOCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAKLQltZW1zZXQoJnA4MDIxMV9oZHIsIDAsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKLQltZW1zZXQoJnA4MDIxMV93ZXAsIDAsIHNpemVvZihwODAyMTFfbWV0YXdlcF90KSk7CisJbWVtc2V0KCZwODAyMTFfaGRyLCAwLCBzaXplb2YodW5pb24gcDgwMjExX2hkcikpOworCW1lbXNldCgmcDgwMjExX3dlcCwgMCwgc2l6ZW9mKHN0cnVjdCBwODAyMTFfbWV0YXdlcCkpOwogCiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgewogCQlwcl9kZWJ1ZygiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOwpAQCAtMzk4LDggKzQwMSw4IEBACiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCQkvKiBtb3ZlIHRoZSBoZWFkZXIgb3ZlciAqLwotCQltZW1jcHkoJnA4MDIxMV9oZHIsIHNrYi0+ZGF0YSwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwotCQlza2JfcHVsbChza2IsIHNpemVvZihwODAyMTFfaGRyX3QpKTsKKwkJbWVtY3B5KCZwODAyMTFfaGRyLCBza2ItPmRhdGEsIHNpemVvZih1bmlvbiBwODAyMTFfaGRyKSk7CisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHVuaW9uIHA4MDIxMV9oZHIpKTsKIAl9IGVsc2UgewogCQlpZiAoc2tiX2V0aGVyX3RvX3A4MDIxMQogCQkgICAgKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYiwgJnA4MDIxMV9oZHIsCkBAIC01NTcsNyArNTYwLDcgQEAKIHN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9kb19pb2N0bChuZXRkZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQlwODAyMTFpb2N0bF9yZXFfdCAqcmVxID0gKHA4MDIxMWlvY3RsX3JlcV90ICopIGlmcjsKKwlzdHJ1Y3QgcDgwMjExaW9jdGxfcmVxICpyZXEgPSAoc3RydWN0IHA4MDIxMWlvY3RsX3JlcSAqKSBpZnI7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCXU4ICptc2didWY7CiAKQEAgLTYwNCw3ICs2MDcsOCBAQAogCQlyZXN1bHQgPSAtRU5PTUVNOwogCX0KIGJhaWw6Ci0JcmV0dXJuIHJlc3VsdDsJCS8qIElmIGFsbG9jYXRlLGNvcHlmcm9tIG9yIGNvcHl0byBmYWlscywgcmV0dXJuIGVycm5vICovCisJLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYzNSw3ICs2MzksNyBAQAogc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyhuZXRkZXZpY2VfdCAqZGV2LCB2b2lkICphZGRyKQogewogCXN0cnVjdCBzb2NrYWRkciAqbmV3X2FkZHIgPSBhZGRyOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBkb3QxMXJlcTsKKwlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCBkb3QxMXJlcTsKIAlwODAyMTFpdGVtX3VuazM5Ml90ICptaWJhdHRyOwogCXA4MDIxMWl0ZW1fcHN0cjZfdCAqbWFjYWRkcjsKIAlwODAyMTFpdGVtX3VpbnQzMl90ICpyZXN1bHRjb2RlOwpAQCAtNjUxLDkgKzY1NSw5IEBACiAJcmVzdWx0Y29kZSA9ICZkb3QxMXJlcS5yZXN1bHRjb2RlOwogCiAJLyogU2V0IHVwIGEgZG90MTFyZXFfbWlic2V0ICovCi0JbWVtc2V0KCZkb3QxMXJlcSwgMCwgc2l6ZW9mKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCkpOworCW1lbXNldCgmZG90MTFyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCkpOwogCWRvdDExcmVxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwotCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpOworCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCk7CiAJbWVtY3B5KGRvdDExcmVxLmRldm5hbWUsCiAJICAgICAgICgod2xhbmRldmljZV90ICopIGRldi0+bWxfcHJpdiktPm5hbWUsIFdMQU5fREVWTkFNRUxFTl9NQVggLSAxKTsKIApAQCAtNzMyLDYgKzczNiw3IEBACiAqIEFyZ3VtZW50czoKICoJd2xhbmRldgkJcHRyIHRvIHRoZSB3bGFuZGV2IHN0cnVjdHVyZSBmb3IgdGhlCiAqCQkJaW50ZXJmYWNlLgorKglwaHlzZGV2CQlwdHIgdG8gdXNiIGRldmljZQogKiBSZXR1cm5zOgogKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZS4KICogQ2FsbCBDb250ZXh0OgpAQCAtNzQwLDEwICs3NDUsMTIgQEAKICoJY29tcGlsZWQgZHJpdmVycywgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpbiB0aGUKICoJY29udGV4dCBvZiB0aGUga2VybmVsIHN0YXJ0dXAgY29kZS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQoraW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgZGV2aWNlICpwaHlzZGV2KQogewogCWludCByZXN1bHQgPSAwOwotCW5ldGRldmljZV90ICpkZXY7CisJbmV0ZGV2aWNlX3QgKm5ldGRldjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAKIAkvKiBTZXQgdXAgdGhlIHdsYW5kZXYgKi8KIAl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKQEAgLTc1NSwyMCArNzYyLDMwIEBACiAJdGFza2xldF9pbml0KCZ3bGFuZGV2LT5yeF9iaCwKIAkJICAgICBwODAyMTFuZXRkZXZfcnhfYmgsICh1bnNpZ25lZCBsb25nKXdsYW5kZXYpOwogCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHdpcGh5IHN0cnVjdCAqLworCXdpcGh5ID0gd2xhbl9jcmVhdGVfd2lwaHkocGh5c2Rldiwgd2xhbmRldik7CisJaWYgKHdpcGh5ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2Mgd2lwaHkuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIHN0cnVjdCBkZXZpY2UgKi8KLQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgIndsYW4lZCIsIGV0aGVyX3NldHVwKTsKLQlpZiAoZGV2ID09IE5VTEwpIHsKKwluZXRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCB3aXJlbGVzc19kZXYpLCAid2xhbiVkIiwgZXRoZXJfc2V0dXApOworCWlmIChuZXRkZXYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKKwkJd2xhbl9mcmVlX3dpcGh5KHdpcGh5KTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewotCQl3bGFuZGV2LT5uZXRkZXYgPSBkZXY7Ci0JCWRldi0+bWxfcHJpdiA9IHdsYW5kZXY7Ci0JCWRldi0+bmV0ZGV2X29wcyA9ICZwODAyMTFfbmV0ZGV2X29wczsKKwkJd2xhbmRldi0+bmV0ZGV2ID0gbmV0ZGV2OworCQluZXRkZXYtPm1sX3ByaXYgPSB3bGFuZGV2OworCQluZXRkZXYtPm5ldGRldl9vcHMgPSAmcDgwMjExX25ldGRldl9vcHM7CisJCXdkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQl3ZGV2LT53aXBoeSA9IHdpcGh5OworCQl3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOworCQluZXRkZXYtPmllZWU4MDIxMV9wdHIgPSB3ZGV2OwogCi0JCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKLQotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNzk3LDE0ICs4MTQsMTQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAogCXRhc2tsZXRfa2lsbCgmd2xhbmRldi0+cnhfYmgpOwogCi0JaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOwotCQlyZXN1bHQgPSAxOwotCX0gZWxzZSB7CisJaWYgKHdsYW5kZXYtPm5ldGRldikgeworCQl3ZGV2ID0gbmV0ZGV2X3ByaXYod2xhbmRldi0+bmV0ZGV2KTsKKwkJaWYgKHdkZXYtPndpcGh5KQorCQkJd2xhbl9mcmVlX3dpcGh5KHdkZXYtPndpcGh5KTsKIAkJZnJlZV9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKIAkJd2xhbmRldi0+bmV0ZGV2ID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCmluZGV4IDNjOGM2NDguLjFlYzMzNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCkBAIC0xNDgsNiArMTQ4LDcgQEAKICNkZWZpbmUgTUFYX0tFWUxFTiAzMgogCiAjZGVmaW5lIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLIChCSVQoMSl8QklUKDApKQorI2RlZmluZSBIT1NUV0VQX1NIQVJFREtFWSBCSVQoMykKICNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQoNCkKICNkZWZpbmUgSE9TVFdFUF9FTkNSWVBUICBCSVQoNSkKICNkZWZpbmUgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCBCSVQoNikKQEAgLTE4Myw5ICsxODQsOSBAQAogCWludCAoKmNsb3NlKSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwogCXZvaWQgKCpyZXNldCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKIAlpbnQgKCp0eGZyYW1lKSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCi0JCQlwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKLQlpbnQgKCptbG1lcmVxdWVzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKKwkJCXVuaW9uIHA4MDIxMV9oZHIgKnA4MDIxMV9oZHIsCisJCQlzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApOworCWludCAoKm1sbWVyZXF1ZXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBwODAyMTFtc2cgKm1zZyk7CiAJaW50ICgqc2V0X211bHRpY2FzdF9saXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsCiAJCQkJICAgbmV0ZGV2aWNlX3QgKmRldik7CiAJdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CkBAIC0yMzMsNyArMjM0LDcgQEAKIGludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHU4ICpkc3QsIHUzMiBsZW4sIGludCBrZXludW0sCiAJCXU4ICppdiwgdTggKmljdik7CiAKLWludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBkZXZpY2UgKnBoeXNkZXYpOwogaW50IHdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogaW50IHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIGludCB1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKaW5kZXggMjA3ZjA4MC4uMTc5MTk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKQEAgLTcyLDkgKzcyLDkgQEAKICNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCiAjaW5jbHVkZSAicDgwMjExcmVxLmgiCiAKLXN0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKK3N0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgcDgwMjExbXNnICptc2cpOwogc3RhdGljIGludCBwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICptaWJfbXNnLAorCQkJCSAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0ICptaWJfbXNnLAogCQkJCSAgIGludCBpc2dldCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTYsNyArOTYsNyBAQAogaW50IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMW1zZ190ICptc2cgPSAocDgwMjExbXNnX3QgKikgbXNnYnVmOworCXN0cnVjdCBwODAyMTFtc2cgKm1zZyA9IChzdHJ1Y3QgcDgwMjExbXNnICopIG1zZ2J1ZjsKIAogCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgTVNEIGlzIHJ1bm5pbmcgKi8KIAlpZiAoISgod2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfSFdQUkVTRU5UICYmCkBAIC0xNTAsMTMgKzE1MCwxMyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCVByb2Nlc3MgdGhyZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHA4MDIxMXJlcV9oYW5kbGVtc2cod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQorc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBwODAyMTFtc2cgKm1zZykKIHsKIAlzd2l0Y2ggKG1zZy0+bXNnY29kZSkgewogCiAJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXA6ewotCQkJcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QgKnJlcSA9Ci0JCQkgICAgKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICopIG1zZzsKKwkJCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXAgKnJlcSA9CisJCQkgICAgKHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXAgKikgbXNnOwogCQkJd2xhbmRldi0+aG9zdHdlcCAmPQogCQkJICAgIH4oSE9TVFdFUF9ERUNSWVBUIHwgSE9TVFdFUF9FTkNSWVBUKTsKIAkJCWlmIChyZXEtPmRlY3J5cHQuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCkBAIC0xNjksOCArMTY5LDggQEAKIAljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJnZXQ6CiAJY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0OnsKIAkJCWludCBpc2dldCA9IChtc2ctPm1zZ2NvZGUgPT0gRElEbXNnX2RvdDExcmVxX21pYmdldCk7Ci0JCQlwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2cgPQotCQkJICAgIChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOworCQkJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXQgKm1pYl9tc2cgPQorCQkJICAgIChzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCAqKSBtc2c7CiAJCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtaWJfbXNnLCBpc2dldCk7CiAJCX0KIAlkZWZhdWx0OgpAQCAtMTgxLDcgKzE4MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LAotCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZywKKwkJCQkgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCAqbWliX21zZywKIAkJCQkgICBpbnQgaXNnZXQpCiB7CiAJcDgwMjExaXRlbWRfdCAqbWliaXRlbSA9IChwODAyMTFpdGVtZF90ICopIG1pYl9tc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODcxOTRkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OTAgKzAsMCBAQAotLyogc3JjL3A4MDIxMS9wODAyMTF3ZXh0LmMKLSoKLSogR2x1ZSBjb2RlIHRvIG1ha2UgbGludXgtd2xhbi1uZyBhIGhhcHB5IHdpcmVsZXNzIGV4dGVuc2lvbiBjYW1wZXIuCi0qCi0qIG9yaWdpbmFsIGF1dGhvcjogIFJleWsgRmxvZXRlciA8cmV5a0BzeW5hY2suZGU+Ci0qIENvbXBsZXRlbHkgcmUtd3JpdHRlbiBieSBTb2xvbW9uIFBlYWNoeSA8c29sb21vbkBsaW51eC13bGFuLmNvbT4KLSoKLSogQ29weXJpZ2h0IChDKSAyMDAyIEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLQotI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCi0jaW5jbHVkZSAicDgwMjExaGRyLmgiCi0jaW5jbHVkZSAicDgwMjExY29udi5oIgotI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKLSNpbmNsdWRlICJwODAyMTFtc2cuaCIKLSNpbmNsdWRlICJwODAyMTFtZXRhc3RydWN0LmgiCi0jaW5jbHVkZSAicDgwMjExbWV0YWRlZi5oIgotI2luY2x1ZGUgInA4MDIxMW5ldGRldi5oIgotI2luY2x1ZGUgInA4MDIxMWlvY3RsLmgiCi0jaW5jbHVkZSAicDgwMjExcmVxLmgiCi0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKTsKLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCk7Ci0KLXN0YXRpYyB1OCBwODAyMTFfbWh6X3RvX2NoYW5uZWwodTE2IG1oeikKLXsKLQlpZiAobWh6ID49IDUwMDApCi0JCXJldHVybiAobWh6IC0gNTAwMCkgLyA1OwotCi0JaWYgKG1oeiA9PSAyNDg0KQotCQlyZXR1cm4gMTQ7Ci0KLQlpZiAobWh6ID49IDI0MDcpCi0JCXJldHVybiAobWh6IC0gMjQwNykgLyA1OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1MTYgcDgwMjExX2NoYW5uZWxfdG9fbWh6KHU4IGNoLCBpbnQgZG90MTFhKQotewotCi0JaWYgKGNoID09IDApCi0JCXJldHVybiAwOwotCWlmIChjaCA+IDIwMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiA1RyAqLwotCWlmIChkb3QxMWEpCi0JCXJldHVybiA1MDAwICsgKDUgKiBjaCk7Ci0KLQkvKiAyLjRHICovCi0JaWYgKGNoID09IDE0KQotCQlyZXR1cm4gMjQ4NDsKLQotCWlmICgoY2ggPCAxNCkgJiYgKGNoID4gMCkpCi0JCXJldHVybiAyNDA3ICsgKDUgKiBjaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogdGFrZW4gZnJvbSBvcmlub2NvLmMgOy0pICovCi1zdGF0aWMgY29uc3QgbG9uZyBwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcVtdID0gewotCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAotfTsKLQotI2RlZmluZSBOVU1fQ0hBTk5FTFMgQVJSQVlfU0laRShwODAyMTF3ZXh0X2NoYW5uZWxfZnJlcSkKLQotLyogc3RlYWwgYSBzcGFyZSBiaXQgdG8gc3RvcmUgdGhlIHNoYXJlZC9vcGVuc3lzdGVtcyBzdGF0ZS4KLSAgIHNob3VsZCBkZWZhdWx0IHRvIG9wZW4gaWYgbm90IHNldCAqLwotI2RlZmluZSBIT1NUV0VQX1NIQVJFREtFWSBCSVQoMykKLQotc3RhdGljIGludCBxdWFsX2FzX3BlcmNlbnQoaW50IHNucikKLXsKLQlpZiAoc25yIDw9IDApCi0JCXJldHVybiAwOwotCWlmIChzbnIgPD0gNDApCi0JCXJldHVybiBzbnIgKiA1IC8gMjsKLQlyZXR1cm4gMTAwOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGRpZCwgdTMyIGRhdGEpCi17Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICptaWJpdGVtID0KLQkJKHA4MDIxMWl0ZW1fdWludDMyX3QgKikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOwotCWludCByZXN1bHQ7Ci0KLQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0JbWVtc2V0KG1pYml0ZW0sIDAsIHNpemVvZigqbWliaXRlbSkpOwotCW1pYml0ZW0tPmRpZCA9IGRpZDsKLQltaWJpdGVtLT5kYXRhID0gZGF0YTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBnZXQgYSAzMiBiaXQgbWliIHZhbHVlCi0gKi8KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZGlkLCB1MzIgKmRhdGEpCi17Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICptaWJpdGVtID0KLQkJKHA4MDIxMWl0ZW1fdWludDMyX3QgKikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOwotCWludCByZXN1bHQ7Ci0KLQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7Ci0JbWVtc2V0KG1pYml0ZW0sIDAsIHNpemVvZigqbWliaXRlbSkpOwotCW1pYml0ZW0tPmRpZCA9IGRpZDsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQlpZiAoIXJlc3VsdCkKLQkJKmRhdGEgPSBtaWJpdGVtLT5kYXRhOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKLXsKLQlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOwotCXN0cnVjdCBpd19wb2ludCBkYXRhOwotCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07Ci0KLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCi0JLyogR2V0IEVTU0lEICovCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9naXdlc3NpZCh3bGFuZGV2LT5uZXRkZXYsIE5VTEwsICZkYXRhLCBzc2lkKTsKLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkpCi0JCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKLQllbHNlCi0JCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07Ci0KLQltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47Ci0KLQkvKiBUcmltIHRoZSBsYXN0ICdcMCcgdG8gZml0IHRoZSBTU0lEIGZvcm1hdCAqLwotCi0JaWYgKGRhdGEubGVuZ3RoICYmIHNzaWRbZGF0YS5sZW5ndGggLSAxXSA9PSAnXDAnKQotCQlkYXRhLmxlbmd0aCA9IGRhdGEubGVuZ3RoIC0gMTsKLQotCW1lbWNweShtc2cuc3NpZC5kYXRhLmRhdGEsIHNzaWQsIGRhdGEubGVuZ3RoKTsKLQltc2cuc3NpZC5kYXRhLmxlbiA9IGRhdGEubGVuZ3RoOwotCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0KLQlyZXR1cm4gZXJyOwotCi19Ci0KLS8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzICpwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqZGV2KQotewotCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgcXVhbGl0eTsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7Ci0JaW50IHJldHZhbDsKLQotCS8qIENoZWNrICovCi0JaWYgKCh3bGFuZGV2ID09IE5VTEwpIHx8ICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBYWFggT25seSB2YWxpZCBpbiBzdGF0aW9uIG1vZGUgKi8KLQl3c3RhdHMtPnN0YXR1cyA9IDA7Ci0KLQkvKiBidWlsZCByZXF1ZXN0IG1lc3NhZ2UgKi8KLQlxdWFsaXR5Lm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTsKLQlxdWFsaXR5LmRibS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwotCXF1YWxpdHkuZGJtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQotCS8qIHNlbmQgbWVzc2FnZSB0byBuc2QgKi8KLQlpZiAod2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QgKikgJnF1YWxpdHkpOwotCi0Jd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOwkvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLwotCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsJLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KLQl3c3RhdHMtPnF1YWwubm9pc2UgPSBxdWFsaXR5Lm5vaXNlLmRhdGE7CS8qIGluc3RhbnQgbm9pc2UgbGV2ZWwgKi8KLQotCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gd2xhbmRldi0+cnguZGVjcnlwdF9lcnI7Ci0Jd3N0YXRzLT5kaXNjYXJkLm53aWQgPSAwOwotCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKLQotCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CS8qIGluY29tcGxldGUgZnJhZ21lbnRzICovCi0Jd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSAwOwkvKiB0eCByZXRyaWVzLiAqLwotCXdzdGF0cy0+bWlzcy5iZWFjb24gPSAwOwotCi0JcmV0dXJuIHdzdGF0czsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd25hbWUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdfcGFyYW0gcmF0ZTsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9naXdyYXRlKGRldiwgTlVMTCwgJnJhdGUsIE5VTEwpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0Jc3dpdGNoIChyYXRlLnZhbHVlKSB7Ci0JY2FzZSAxMDAwMDAwOgotCWNhc2UgMjAwMDAwMDoKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1EUyIpOwotCQlicmVhazsKLQljYXNlIDU1MDAwMDA6Ci0JY2FzZSAxMTAwMDAwMDoKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMS1iIik7Ci0JCWJyZWFrOwotCX0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2ZyZXEobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKLQkJCQkgICAmdmFsdWUpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICh2YWx1ZSA+IE5VTV9DSEFOTkVMUykgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogY29udmVydCBpbnRvIGZyZXF1ZW5jeSBpbnN0ZWFkIG9mIGEgY2hhbm5lbCAqLwotCWZyZXEtPmUgPSAxOwotCWZyZXEtPm0gPSBwODAyMTFfY2hhbm5lbF90b19taHoodmFsdWUsIDApICogMTAwMDAwOwotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdmcmVxKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKChmcmVxLT5lID09IDApICYmIChmcmVxLT5tIDw9IDEwMDApKQotCQl2YWx1ZSA9IGZyZXEtPm07Ci0JZWxzZQotCQl2YWx1ZSA9IHA4MDIxMV9taHpfdG9fY2hhbm5lbChmcmVxLT5tKTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkgICAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAotCQkJICAgICB2YWx1ZSk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd21vZGUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCi0Jc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7Ci0JY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6Ci0JCSptb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJYnJlYWs7Ci0JY2FzZSBXTEFOX01BQ01PREVfRVNTX1NUQToKLQkJKm1vZGUgPSBJV19NT0RFX0lORlJBOwotCQlicmVhazsKLQljYXNlIFdMQU5fTUFDTU9ERV9FU1NfQVA6Ci0JCSptb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIE5vdCBzZXQgeWV0LiAqLwotCQkqbW9kZSA9IElXX01PREVfQVVUTzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd21vZGUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICgqbW9kZSAhPSBJV19NT0RFX0FESE9DICYmICptb2RlICE9IElXX01PREVfSU5GUkEgJiYKLQkgICAgKm1vZGUgIT0gSVdfTU9ERV9NQVNURVIpIHsKLQkJZXJyID0gKC1FT1BOT1RTVVBQKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIE9wZXJhdGlvbiBtb2RlIGlzIHRoZSBzYW1lIHdpdGggY3VycmVudCBtb2RlICovCi0JaWYgKCptb2RlID09IHdsYW5kZXYtPm1hY21vZGUpCi0JCWdvdG8gZXhpdDsKLQotCXN3aXRjaCAoKm1vZGUpIHsKLQljYXNlIElXX01PREVfQURIT0M6Ci0JCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfSUJTU19TVEE7Ci0JCWJyZWFrOwotCWNhc2UgSVdfTU9ERV9JTkZSQToKLQkJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9FU1NfU1RBOwotCQlicmVhazsKLQljYXNlIElXX01PREVfTUFTVEVSOgotCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0VTU19BUDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogTm90IHNldCB5ZXQuICovCi0JCXByaW50ayhLRVJOX0lORk8gIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JLyogU2V0IE9wZXJhdGlvbiBtb2RlIHRvIHRoZSBQT1JUIFRZUEUgUklEICovCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQlESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQb3J0VHlwZSwKLQkJCQkoKm1vZGUgPT0gSVdfTU9ERV9BREhPQykgPyAwIDogMSk7Ci0JaWYgKHJlc3VsdCkKLQkJZXJyID0gLUVGQVVMVDsKLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JhbmdlKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopZXh0cmE7Ci0JaW50IGksIHZhbDsKLQotCS8qIGZvciBiYWNrd2FyZCBjb21wYXRhYmlsaXR5IHNldCBzaXplIGFuZCB6ZXJvIGV2ZXJ5dGhpbmcgd2UgZG9uJ3QgdW5kZXJzdGFuZCAqLwotCWRhdGEtPmxlbmd0aCA9IHNpemVvZigqcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwotCi0JcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKLQkvKiBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4gKi8KLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOwotCi0JcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+bWluX3JldHJ5ID0gMDsKLQlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotCi0JcmFuZ2UtPmV2ZW50X2NhcGFbMF0gPSAoSVdfRVZFTlRfQ0FQQV9LXzAgfAkvKiBtb2RlL2ZyZXEvc3NpZCAqLwotCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXQVApIHwKLQkJCQlJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKLQlyYW5nZS0+ZXZlbnRfY2FwYVsxXSA9IElXX0VWRU5UX0NBUEFfS18xOwkvKiBlbmNvZGUgKi8KLQlyYW5nZS0+ZXZlbnRfY2FwYVs0XSA9IChJV19FVkVOVF9DQVBBX01BU0soSVdFVlFVQUwpIHwKLQkJCQlJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkpOwotCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKLQotCS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCi0JdmFsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKLQkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gaSArIDE7Ci0JCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW2ldICogMTAwMDAwOwotCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAxOwotCQl2YWwrKzsKLQl9Ci0KLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKLQotCS8qIE1heCBvZiAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKLQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAwOwotCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7Ci0JcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKLQkvKiBYWFggdGhlc2UgbmVlZCB0byBiZSBuc2Qtc3BlY2lmaWMhICovCi0KLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBOVU1fV0VQS0VZUzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQotCS8qIFhYWCB3aGF0IGFib3V0IG51bV9iaXRyYXRlcy90aHJvdWdocHV0PyAqLwotCXJhbmdlLT5udW1fYml0cmF0ZXMgPSAwOwotCi0JLyogZXN0aW1hdGVkIG1heCB0aHJvdWdocHV0ICovCi0JLyogWFhYIG5lZWQgdG8gY2FwIGl0IGlmIHdlJ3JlIHJ1bm5pbmcgYXQgfjJNYnBzLi4gKi8KLQlyYW5nZS0+dGhyb3VnaHB1dCA9IDU1MDAwMDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2FwKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCi0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCi0JbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdlbmNvZGUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCBlcnIgPSAwOwotCWludCBpOwotCi0JaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JZXJxLT5mbGFncyA9IDA7Ci0KLQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JZWxzZQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQotCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCi0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JZWxzZQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwotCi0JaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0KLQlpZiAoaSA9PSAtMSkKLQkJaSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKLQotCWlmICgoaSA8IDApIHx8IChpID49IE5VTV9XRVBLRVlTKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZXJxLT5mbGFncyB8PSBpICsgMTsKLQotCS8qIGNvcHkgdGhlIGtleSBmcm9tIHRoZSBkcml2ZXIgY2FjaGUgYXMgdGhlIGtleXMgYXJlIHJlYWQtb25seSBNSUJzICovCi0JZXJxLT5sZW5ndGggPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpXTsKLQltZW1jcHkoa2V5LCB3bGFuZGV2LT53ZXBfa2V5c1tpXSwgZXJxLT5sZW5ndGgpOwotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdlbmNvZGUobmV0ZGV2aWNlX3QgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7Ci0JcDgwMjExaXRlbV9wc3RyMzJfdCBwc3RyOwotCi0JaW50IGVyciA9IDA7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IGk7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogQ2hlY2sgdGhlIEtleSBpbmRleCBmaXJzdC4gKi8KLQlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOwotCWlmIChpKSB7Ci0JCWlmICgoaSA8IDEpIHx8IChpID4gTlVNX1dFUEtFWVMpKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBleGl0OwotCQl9IGVsc2UgewotCQkJaS0tOwotCQl9Ci0JCS8qIFNldCBjdXJyZW50IGtleSBudW1iZXIgb25seSBpZiBubyBrZXlzIGFyZSBnaXZlbiAqLwotCQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgewotCQkJcmVzdWx0ID0KLQkJCQlwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkJICBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCi0JCQkJCQkgIGkpOwotCi0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJZXJyID0gLUVGQVVMVDsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCS8qIFVzZSBkZWZhdWx0a2V5IGlmIG5vIEtleSBJbmRleCAqLwotCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwotCX0KLQotCS8qIENoZWNrIGlmIHRoZXJlIGlzIG5vIGtleSBpbmZvcm1hdGlvbiBpbiB0aGUgaXdjb25maWcgcmVxdWVzdCAqLwotCWlmICgoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCkgewotCi0JCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAqIElmIHRoZXJlIGlzIFdFUCBLZXkgZm9yIHNldHRpbmcsIGNoZWNrIHRoZSBLZXkgSW5mb3JtYXRpb24KLQkJICogYW5kIHRoZW4gc2V0IGl0IHRvIHRoZSBmaXJtd2FyZS4KLQkJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0JCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKLQkJCS8qIGNvcHkgdGhlIGtleSBmcm9tIHRoZSBkcml2ZXIgY2FjaGUgYXMgdGhlIGtleXMgYXJlIHJlYWQtb25seSBNSUJzICovCi0JCQl3bGFuZGV2LT53ZXBfa2V5bGVuc1tpXSA9IGVycS0+bGVuZ3RoOwotCQkJbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2ldLCBrZXksIGVycS0+bGVuZ3RoKTsKLQotCQkJLyogUHJlcGFyZSBkYXRhIHN0cnV0dXJlIGZvciBwODAyMTFyZXFfZG9yZXF1ZXN0LiAqLwotCQkJbWVtY3B5KHBzdHIuZGF0YS5kYXRhLCBrZXksIGVycS0+bGVuZ3RoKTsKLQkJCXBzdHIuZGF0YS5sZW4gPSBlcnEtPmxlbmd0aDsKLQotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIDA6Ci0JCQkJcHN0ci5kaWQgPQotCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMToKLQkJCQlwc3RyLmRpZCA9Ci0JCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAyOgotCQkJCXBzdHIuZGlkID0KLQkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDM6Ci0JCQkJcHN0ci5kaWQgPQotCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0KLQkJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmcHN0ciwgc2l6ZW9mKHBzdHIpKTsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwotCi0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJZXJyID0gLUVGQVVMVDsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8qIENoZWNrIHRoZSBQcml2YWN5SW52b2tlZCBmbGFnICovCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKLQkJcmVzdWx0ID0KLQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKLQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9Ci0JCSAgICBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCi0JCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotCX0KLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCS8qICBUaGUgIHNlY3VyaXR5ICBtb2RlICBtYXkgIGJlIG9wZW4gb3IgcmVzdHJpY3RlZCwgYW5kIGl0cyBtZWFuaW5nCi0JICAgZGVwZW5kcyBvbiB0aGUgY2FyZCB1c2VkLiBXaXRoICBtb3N0ICBjYXJkcywgIGluICBvcGVuICBtb2RlICBubwotCSAgIGF1dGhlbnRpY2F0aW9uICBpcyAgdXNlZCAgYW5kICB0aGUgIGNhcmQgIG1heSAgYWxzbyAgYWNjZXB0IG5vbi0KLQkgICBlbmNyeXB0ZWQgc2Vzc2lvbnMsIHdoZXJlYXMgaW4gcmVzdHJpY3RlZCAgbW9kZSAgb25seSAgZW5jcnlwdGVkCi0JICAgc2Vzc2lvbnMgIGFyZSAgYWNjZXB0ZWQgIGFuZCB0aGUgY2FyZCB3aWxsIHVzZSBhdXRoZW50aWNhdGlvbiBpZgotCSAgIGF2YWlsYWJsZS4KLQkgKi8KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7Ci0JCXJlc3VsdCA9Ci0JCSAgICBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLQl9IGVsc2UgaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgewotCQlyZXN1bHQgPQotCQkgICAgcDgwMjExd2V4dF9zZXRtaWIod2xhbmRldiwKLQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKLQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwotCX0KLQotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotZXhpdDoKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0KLQlpZiAod2xhbmRldi0+c3NpZC5sZW4pIHsKLQkJZGF0YS0+bGVuZ3RoID0gd2xhbmRldi0+c3NpZC5sZW47Ci0JCWRhdGEtPmZsYWdzID0gMTsKLQkJbWVtY3B5KGVzc2lkLCB3bGFuZGV2LT5zc2lkLmRhdGEsIGRhdGEtPmxlbmd0aCk7Ci0JCWVzc2lkW2RhdGEtPmxlbmd0aF0gPSAwOwotCX0gZWxzZSB7Ci0JCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOwotCQlkYXRhLT5sZW5ndGggPSAwOwotCQlkYXRhLT5mbGFncyA9IDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdlc3NpZChuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90IG1zZzsKLQotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JaW50IGxlbmd0aCA9IGRhdGEtPmxlbmd0aDsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfU0hBUkVES0VZKQotCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7Ci0JZWxzZQotCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOwotCi0JbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOwotCi0JLyogVHJpbSB0aGUgbGFzdCAnXDAnIHRvIGZpdCB0aGUgU1NJRCBmb3JtYXQgKi8KLQlpZiAobGVuZ3RoICYmIGVzc2lkW2xlbmd0aCAtIDFdID09ICdcMCcpCi0JCWxlbmd0aC0tOwotCi0JbWVtY3B5KG1zZy5zc2lkLmRhdGEuZGF0YSwgZXNzaWQsIGxlbmd0aCk7Ci0JbXNnLnNzaWQuZGF0YS5sZW4gPSBsZW5ndGg7Ci0KLQlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLCBlc3NpZCk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Ci0JcHJfZGVidWcoImF1dG9qb2luX3NzaWQgJWRcbiIsIHJlc3VsdCk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2NvbW1pdChuZXRkZXZpY2VfdCAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogQXV0byBKb2luICovCi0JZXJyID0gcDgwMjExd2V4dF9hdXRvam9pbih3bGFuZGV2KTsKLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cmF0ZShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2LCBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLCAmdmFsdWUpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCXJycS0+Zml4ZWQgPSAwOwkJLyogY2FuIGl0IGNoYW5nZT8gKi8KLQlycnEtPmRpc2FibGVkID0gMDsKLQlycnEtPnZhbHVlID0gMDsKLQotI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzEJCQkoKHUxNikxKQotI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzIJCQkoKHUxNikyKQotI2RlZmluZQkJSEZBMzg0eF9SQVRFQklUXzVkb3Q1CQkJKCh1MTYpNCkKLSNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xMQkJCSgodTE2KTgpCi0KLQlzd2l0Y2ggKHZhbHVlKSB7Ci0JY2FzZSBIRkEzODR4X1JBVEVCSVRfMToKLQkJcnJxLT52YWx1ZSA9IDEwMDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSEZBMzg0eF9SQVRFQklUXzI6Ci0JCXJycS0+dmFsdWUgPSAyMDAwMDAwOwotCQlicmVhazsKLQljYXNlIEhGQTM4NHhfUkFURUJJVF81ZG90NToKLQkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgSEZBMzg0eF9SQVRFQklUXzExOgotCQlycnEtPnZhbHVlID0gMTEwMDAwMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3cnRzKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X2dldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcnRzLT52YWx1ZSA9IHZhbHVlOwotCXJ0cy0+ZGlzYWJsZWQgPSAocnRzLT52YWx1ZSA9PSAyMzQ3KTsKLQlydHMtPmZpeGVkID0gMTsKLQotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3cnRzKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChydHMtPmRpc2FibGVkKQotCQl2YWx1ZSA9IDIzNDc7Ci0JZWxzZQotCQl2YWx1ZSA9IHJ0cy0+dmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAotCQkJCSAgIHZhbHVlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZnJhZy0+dmFsdWUgPSB2YWx1ZTsKLQlmcmFnLT5kaXNhYmxlZCA9IChmcmFnLT52YWx1ZSA9PSAyMzQ2KTsKLQlmcmFnLT5maXhlZCA9IDE7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd2ZyYWcobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCWludCB2YWx1ZTsKLQotCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7Ci0JCWVyciA9ICgtRU9QTk9UU1VQUCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZnJhZy0+ZGlzYWJsZWQpCi0JCXZhbHVlID0gMjM0NjsKLQllbHNlCi0JCXZhbHVlID0gZnJhZy0+dmFsdWU7Ci0KLQlyZXN1bHQgPSBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCi0JCQkJICAgICAgdmFsdWUpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLSNpZm5kZWYgSVdfUkVUUllfTE9ORwotI2RlZmluZSBJV19SRVRSWV9MT05HIElXX1JFVFJZX01BWAotI2VuZGlmCi0KLSNpZm5kZWYgSVdfUkVUUllfU0hPUlQKLSNkZWZpbmUgSVdfUkVUUllfU0hPUlQgSVdfUkVUUllfTUlOCi0jZW5kaWYKLQotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdTE2IHNob3J0cmV0cnksIGxvbmdyZXRyeSwgbGlmZXRpbWU7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCwKLQkJCQkgICAmdmFsdWUpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCXNob3J0cmV0cnkgPSB2YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdCwKLQkJCQkgICAmdmFsdWUpOwotCWlmIChyZXN1bHQpIHsKLQkJZXJyID0gLUVGQVVMVDsKLQkJZ290byBleGl0OwotCX0KLQotCWxvbmdyZXRyeSA9IHZhbHVlOwotCi0JcmVzdWx0ID0gcDgwMjExd2V4dF9nZXRtaWIod2xhbmRldiwKLQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAotCQkJCSAgICZ2YWx1ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbGlmZXRpbWUgPSB2YWx1ZTsKLQotCXJycS0+ZGlzYWJsZWQgPSAwOwotCi0JaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKLQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOwotCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDI0OwotCX0gZWxzZSB7Ci0JCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykgewotCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKLQkJCXJycS0+dmFsdWUgPSBsb25ncmV0cnk7Ci0JCX0gZWxzZSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JCQlycnEtPnZhbHVlID0gc2hvcnRyZXRyeTsKLQkJCWlmIChzaG9ydHJldHJ5ICE9IGxvbmdyZXRyeSkKLQkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOwotCQl9Ci0JfQotCi1leGl0OgotCXJldHVybiBlcnI7Ci0KLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3JldHJ5KG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwotCWludCByZXN1bHQ7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgaW50IHZhbHVlOwotCi0JaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLQkJZXJyID0gKC1FT1BOT1RTVVBQKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChycnEtPmRpc2FibGVkKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0KLQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkgewotCi0JCXZhbHVlID0gcnJxLT52YWx1ZSAvPSAxMDI0OwotCQlyZXN1bHQgPSBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAotCQkJCQkgICB2YWx1ZSk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCWVyciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpIHsKLQkJCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAotCQkJCQkJICAgcnJxLT52YWx1ZSk7Ci0KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQllcnIgPSAtRUZBVUxUOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KLQkJfQotCi0JCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpIHsKLQkJCXJlc3VsdCA9IHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVNob3J0UmV0cnlMaW1pdCwKLQkJCQkJCSAgIHJycS0+dmFsdWUpOwotCi0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJZXJyID0gLUVGQVVMVDsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLQotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3dHhwb3cobmV0ZGV2aWNlX3QgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7Ci0JaW50IHJlc3VsdDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0KLQlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKHJycS0+Zml4ZWQgPT0gMCkKLQkJdmFsdWUgPSAzMDsKLQllbHNlCi0JCXZhbHVlID0gcnJxLT52YWx1ZTsKLQlyZXN1bHQgPSBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCSAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCi0JCQkJICAgdmFsdWUpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGludCB2YWx1ZTsKLQotCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2V0bWliKHdsYW5kZXYsCi0JCQkJICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKLQkJCQkgICAmdmFsdWUpOwotCi0JaWYgKHJlc3VsdCkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JLyogWFhYIGhhbmRsZSBPRkYgYnkgc2V0dGluZyBkaXNhYmxlZCA9IDE7ICovCi0KLQlycnEtPmZsYWdzID0gMDsJCS8qIElXX1RYUE9XX0RCTTsgKi8KLQlycnEtPmRpc2FibGVkID0gMDsKLQlycnEtPmZpeGVkID0gMDsKLQlycnEtPnZhbHVlID0gdmFsdWU7Ci0KLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwODAyMTF3ZXh0X3Npd3NweShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOwotCWludCBudW1iZXIgPSBzcnEtPmxlbmd0aDsKLQlpbnQgaTsKLQotCS8qIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyICovCi0JbWVtY3B5KGFkZHJlc3MsIGV4dHJhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAqIG51bWJlcik7Ci0KLQl3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKLQotCWlmIChudW1iZXIgPiAwKSB7Ci0KLQkJLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCi0JCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewotCi0JCQltZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIGFkZHJlc3NbaV0uc2FfZGF0YSwKLQkJCSAgICAgICBFVEhfQUxFTik7Ci0JCX0KLQotCQkvKiByZXNldCBzdGF0cyAqLwotCQltZW1zZXQod2xhbmRldi0+c3B5X3N0YXQsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogSVdfTUFYX1NQWSk7Ci0KLQkJLyogc2V0IG51bWJlciBvZiBhZGRyZXNzZXMgKi8KLQkJd2xhbmRldi0+c3B5X251bWJlciA9IG51bWJlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogamtyaWVnbDogZnJvbSBvcmlub2NvLCBtb2RpZmllZCAqLwotc3RhdGljIGludCBwODAyMTF3ZXh0X2dpd3NweShuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCi0Jc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07Ci0Jc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07Ci0JaW50IG51bWJlcjsKLQlpbnQgaTsKLQotCW51bWJlciA9IHdsYW5kZXYtPnNweV9udW1iZXI7Ci0KLQlpZiAobnVtYmVyID4gMCkgewotCi0JCS8qIHBvcHVsYXRlIGFkZHJlc3MgYW5kIHNweSBzdHJ1Y3QncyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKLQkJCW1lbWNweShhZGRyZXNzW2ldLnNhX2RhdGEsIHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLAotCQkJICAgICAgIEVUSF9BTEVOKTsKLQkJCWFkZHJlc3NbaV0uc2FfZmFtaWx5ID0gQUZfVU5JWDsKLQkJCW1lbWNweSgmc3B5X3N0YXRbaV0sICZ3bGFuZGV2LT5zcHlfc3RhdFtpXSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKTsKLQkJfQotCi0JCS8qIHJlc2V0IHVwZGF0ZSBmbGFnICovCi0JCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykKLQkJCXdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAwOwotCX0KLQotCS8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLwotCXNycS0+bGVuZ3RoID0gbnVtYmVyOwotCW1lbWNweShleHRyYSwgYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBudW1iZXIpOwotCW1lbWNweShleHRyYSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyLCBzcHlfc3RhdCwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIG51bWJlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwcmlzbTJfcmVzdWx0MmVycihpbnQgcHJpc20yX3Jlc3VsdCkKLXsKLQlpbnQgZXJyID0gMDsKLQotCXN3aXRjaCAocHJpc20yX3Jlc3VsdCkgewotCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczoKLQkJZXJyID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZToKLQkJZXJyID0gLUVJTzsKLQkJYnJlYWs7Ci0JY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDoKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdzY2FuKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90IG1zZzsKLQlpbnQgcmVzdWx0OwotCWludCBlcnIgPSAwOwotCWludCBpID0gMDsKLQotCWlmICh3bGFuZGV2LT5tYWNtb2RlID09IFdMQU5fTUFDTU9ERV9FU1NfQVApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOwotCQllcnIgPSAoLUVPUE5PVFNVUFApOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbWVtc2V0KCZtc2csIDB4MDAsIHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90KSk7Ci0JbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2NhbjsKLQltc2cuYnNzdHlwZS5kYXRhID0gUDgwMjExRU5VTV9ic3N0eXBlX2FueTsKLQotCW1lbXNldCgmKG1zZy5ic3NpZC5kYXRhKSwgMHhGRiwgc2l6ZW9mKHA4MDIxMWl0ZW1fcHN0cjZfdCkpOwotCW1zZy5ic3NpZC5kYXRhLmxlbiA9IDY7Ci0KLQltc2cuc2NhbnR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlOwotCW1zZy5wcm9iZWRlbGF5LmRhdGEgPSAwOwotCi0JZm9yIChpID0gMTsgaSA8PSAxNDsgaSsrKQotCQltc2cuY2hhbm5lbGxpc3QuZGF0YS5kYXRhW2kgLSAxXSA9IGk7Ci0JbXNnLmNoYW5uZWxsaXN0LmRhdGEubGVuID0gMTQ7Ci0KLQltc2cubWF4Y2hhbm5lbHRpbWUuZGF0YSA9IDI1MDsKLQltc2cubWluY2hhbm5lbHRpbWUuZGF0YSA9IDIwMDsKLQotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwotCWlmIChyZXN1bHQpCi0JCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyKG1zZy5yZXN1bHRjb2RlLmRhdGEpOwotCi1leGl0OgotCXJldHVybiBlcnI7Ci19Ci0KLS8qIEhlbHBlciB0byB0cmFuc2xhdGUgc2NhbiBpbnRvIFdpcmVsZXNzIEV4dGVuc2lvbnMgc2NhbiByZXN1bHRzLgotICogSW5zcGlyZWQgYnkgdGhlIHByaXNtNTQgY29kZSwgd2hpY2ggd2FzIGluIHR1cm4gaW5zcGlyZWQgYnkgdGhlCi0gKiBhaXJvIGRyaXZlciBjb2RlLgotICovCi1zdGF0aWMgY2hhciAqd2V4dF90cmFuc2xhdGVfYnNzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJY2hhciAqZW5kX2J1ZiwKLQkJCQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKmJzcykKLXsKLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0KLQkvKiBUaGUgZmlyc3QgZW50cnkgbXVzdCBiZSB0aGUgTUFDIGFkZHJlc3MgKi8KLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLmRhdGEuZGF0YSwgV0xBTl9CU1NJRF9MRU4pOwotCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JY3VycmVudF9ldiA9Ci0JICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIFRoZSBmb2xsb3dpbmcgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgc2FtZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KLQotCS8qIFRoZSBFU1NJRC4gKi8KLQlpZiAoYnNzLT5zc2lkLmRhdGEubGVuID4gMCkgewotCQljaGFyIGVzc2lkW0lXX0VTU0lEX01BWF9TSVpFICsgMV07Ci0JCWludCBzaXplOwotCi0JCXNpemUgPQotCQkgICAgbWluX3QodW5zaWduZWQgc2hvcnQsIElXX0VTU0lEX01BWF9TSVpFLAotCQkJICBic3MtPnNzaWQuZGF0YS5sZW4pOwotCQltZW1zZXQoJmVzc2lkLCAwLCBzaXplb2YoZXNzaWQpKTsKLQkJbWVtY3B5KCZlc3NpZCwgYnNzLT5zc2lkLmRhdGEuZGF0YSwgc2l6ZSk7Ci0JCXByX2RlYnVnKCIgZXNzaWQgc2l6ZSA9ICVkXG4iLCBzaXplKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzaXplOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQkJY3VycmVudF9ldiA9Ci0JCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgJmVzc2lkWzBdKTsKLQkJcHJfZGVidWcoIiBlc3NpZCBzaXplIE9LLlxuIik7Ci0JfQotCi0Jc3dpdGNoIChic3MtPmJzc3R5cGUuZGF0YSkgewotCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlOgotCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWJyZWFrOwotCi0JY2FzZSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQ6Ci0JCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWl3ZS51Lm1vZGUgPSAwOwotCQlicmVhazsKLQl9Ci0JaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCWlmIChpd2UudS5tb2RlKQotCQljdXJyZW50X2V2ID0KLQkJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSBJV19FVl9VSU5UX0xFTik7Ci0KLQkvKiBFbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpZiAoYnNzLT5wcml2YWN5LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7Ci0JZWxzZQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQljdXJyZW50X2V2ID0KLQkgICAgaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgTlVMTCk7Ci0KLQkvKiBBZGQgZnJlcXVlbmN5LiAoc2hvcnQpIGJzcy0+Y2hhbm5lbCBpcyB0aGUgZnJlcXVlbmN5IGluIE1IeiAqLwotCWl3ZS51LmZyZXEubSA9IGJzcy0+ZHNjaGFubmVsLmRhdGE7Ci0JaXdlLnUuZnJlcS5lID0gMDsKLQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JY3VycmVudF9ldiA9Ci0JICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJIElXX0VWX0ZSRVFfTEVOKTsKLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWwuZGF0YTsKLQlpd2UudS5xdWFsLm5vaXNlID0gYnNzLT5ub2lzZS5kYXRhOwotCS8qIGRvIGEgc2ltcGxlIFNOUiBmb3IgcXVhbGl0eSAqLwotCWl3ZS51LnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChic3MtPnNpZ25hbC5kYXRhIC0gYnNzLT5ub2lzZS5kYXRhKTsKLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JY3VycmVudF9ldiA9Ci0JICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJIElXX0VWX1FVQUxfTEVOKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfZ2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190IG1zZzsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgZXJyID0gMDsKLQlpbnQgaSA9IDA7Ci0JaW50IHNjYW5fZ29vZCA9IDA7Ci0JY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwotCi0JLyogU2luY2Ugd2lyZWxlc3MgdG9vbHMgZG9lc24ndCByZWFsbHkgaGF2ZSBhIHdheSBvZiBwYXNzaW5nIGhvdwotCSAqIG1hbnkgc2NhbiByZXN1bHRzIHJlc3VsdHMgdGhlcmUgd2VyZSBiYWNrIGhlcmUsIGtlZXAgZ3JhYmJpbmcgdGhlbQotCSAqIHVudGlsIHdlIGZhaWwuCi0JICovCi0JZG8gewotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwotCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHM7Ci0JCW1zZy5ic3NpbmRleC5kYXRhID0gaTsKLQotCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKLQkJaWYgKChyZXN1bHQgIT0gMCkgfHwKLQkJICAgIChtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSkgewotCQkJYnJlYWs7Ci0JCX0KLQotCQljdXJyZW50X2V2ID0KLQkJICAgIHdleHRfdHJhbnNsYXRlX2JzcyhpbmZvLCBjdXJyZW50X2V2LAotCQkJCSAgICAgICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZtc2cpOwotCQlzY2FuX2dvb2QgPSAxOwotCQlpKys7Ci0JfSB3aGlsZSAoaSA8IElXX01BWF9BUCk7Ci0KLQlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotCXNycS0+ZmxhZ3MgPSAwOwkJLyogdG9kbyAqLwotCi0JaWYgKHJlc3VsdCAmJiAhc2Nhbl9nb29kKQotCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cucmVzdWx0Y29kZS5kYXRhKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIGV4dHJhIHdpcmVsZXNzIGV4dGVuc2lvbnMgc3R1ZmYgdG8gc3VwcG9ydCBOZXR3b3JrTWFuYWdlciAoSSBob3BlKSAqLwotCi0vKiBTSU9DU0lXRU5DT0RFRVhUICovCi1zdGF0aWMgaW50IHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7Ci0JcDgwMjExaXRlbV9wc3RyMzJfdCAqcHN0cjsKLQotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0JaW50IGlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQotCXByX2RlYnVnKCJzZXRfZW5jb2RlX2V4dCBmbGFnc1slZF0gYWxnWyVkXSBrZXlsZW5bJWRdXG4iLAotCQkgZXh0LT5leHRfZmxhZ3MsIChpbnQpZXh0LT5hbGcsIChpbnQpZXh0LT5rZXlfbGVuKTsKLQotCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKSB7Ci0JCS8qIHNldCBkZWZhdWx0IGtleSA/IEknbSBub3Qgc3VyZSBpZiB0aGlzIHRoZSB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlICovCi0KLQkJaWYgKGlkeCkgewotCQkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQllbHNlCi0JCQkJaWR4LS07Ci0JCX0KLQkJcHJfZGVidWcoInNldHRpbmcgZGVmYXVsdCBrZXkgKCVkKVxuIiwgaWR4KTsKLQkJcmVzdWx0ID0KLQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCi0JCQkJCSBpZHgpOwotCQlpZiAocmVzdWx0KQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7Ci0JCWlmIChleHQtPmFsZyAhPSBJV19FTkNPREVfQUxHX1dFUCkgewotCQkJcHJfZGVidWcoImFza2VkIHRvIHNldCBhIG5vbiB3ZXAga2V5IDooXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChpZHgpIHsKLQkJCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZWxzZQotCQkJCWlkeC0tOwotCQl9Ci0JCXByX2RlYnVnKCJTZXQgV0VQIGtleSAoJWQpXG4iLCBpZHgpOwotCQl3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdID0gZXh0LT5rZXlfbGVuOwotCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7Ci0KLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKLQkJcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90ICopICZtc2cubWliYXR0cmlidXRlLmRhdGE7Ci0JCW1lbWNweShwc3RyLT5kYXRhLmRhdGEsIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCQlwc3RyLT5kYXRhLmxlbiA9IGV4dC0+a2V5X2xlbjsKLQkJc3dpdGNoIChpZHgpIHsKLQkJY2FzZSAwOgotCQkJcHN0ci0+ZGlkID0KLQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJcHN0ci0+ZGlkID0KLQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJcHN0ci0+ZGlkID0KLQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcHN0ci0+ZGlkID0KLQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7Ci0JCXByX2RlYnVnKCJyZXN1bHQgKCVkKVxuIiwgcmVzdWx0KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwotc3RhdGljIGludCBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQotCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IG1heF9sZW47Ci0JaW50IGlkeDsKLQotCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBmbGFnc1slZF0gYWxnWyVkXSBrZXlsZW5bJWRdXG4iLAotCQkgZXh0LT5leHRfZmxhZ3MsIChpbnQpZXh0LT5hbGcsIChpbnQpZXh0LT5rZXlfbGVuKTsKLQotCW1heF9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwotCWlmIChtYXhfbGVuIDw9IDApIHsKLQkJcHJfZGVidWcoImdldF9lbmNvZGVleHQgbWF4X2xlbiBbJWRdIGludmFsaWRcbiIsIG1heF9sZW4pOwotCQlyZXN1bHQgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQotCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBpbmRleCBbJWRdXG4iLCBpZHgpOwotCi0JaWYgKGlkeCkgewotCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUykgewotCQkJcHJfZGVidWcoImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsCi0JCQkJIGlkeCk7Ci0JCQlyZXN1bHQgPSAtRUlOVkFMOwotCQkJZ290byBleGl0OwotCQl9Ci0JCWlkeC0tOwotCX0gZWxzZSB7Ci0JCS8qIGRlZmF1bHQga2V5ID8gbm90IHN1cmUgd2hhdCB0byBkbyAqLwotCQkvKiB3aWxsIGp1c3QgdXNlIGtleVswXSBmb3Igbm93ICEgRklYIE1FICovCi0JfQotCi0JZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKLQltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwotCi0JZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKLQlleHQtPmtleV9sZW4gPSB3bGFuZGV2LT53ZXBfa2V5bGVuc1tpZHhdOwotCW1lbWNweShleHQtPmtleSwgd2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXlfbGVuKTsKLQotCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKLWV4aXQ6Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotCWludCByZXN1bHQgPSAwOwotCi0JcHJfZGVidWcoInNldF9pd2F1dGggZmxhZ3NbJWRdXG4iLCAoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCXByX2RlYnVnKCJkcm9wX3VuZW5jcnlwdGVkICVkXG4iLCBwYXJhbS0+dmFsdWUpOwotCQlpZiAocGFyYW0tPnZhbHVlKQotCQkJcmVzdWx0ID0KLQkJCSAgICBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKLQkJCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotCQllbHNlCi0JCQlyZXN1bHQgPQotCQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JCXByX2RlYnVnKCJwcml2YWN5IGludm9rZWQgJWRcbiIsIHBhcmFtLT52YWx1ZSk7Ci0JCWlmIChwYXJhbS0+dmFsdWUpCi0JCQlyZXN1bHQgPQotCQkJICAgIHA4MDIxMXdleHRfc2V0bWliKHdsYW5kZXYsCi0JCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCi0JCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLQkJZWxzZQotCQkJcmVzdWx0ID0KLQkJCSAgICBwODAyMTF3ZXh0X3NldG1pYih3bGFuZGV2LAotCQkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAotCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwotCi0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKLQkJCXByX2RlYnVnKCJzZXQgb3Blbl9zeXN0ZW1cbiIpOwotCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+SE9TVFdFUF9TSEFSRURLRVk7Ci0JCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgewotCQkJcHJfZGVidWcoInNldCBzaGFyZWQga2V5XG4iKTsKLQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8ga25vdyAgKi8KLQkJCXByX2RlYnVnKCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIsIHBhcmFtLT52YWx1ZSk7Ci0JCQlyZXN1bHQgPSAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwotCWludCByZXN1bHQgPSAwOwotCi0JcHJfZGVidWcoImdldF9pd2F1dGggZmxhZ3NbJWRdXG4iLCAoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCXBhcmFtLT52YWx1ZSA9Ci0JCSAgICB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgPyAxIDogMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgotCQlwYXJhbS0+dmFsdWUgPQotCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgPyAxIDogMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCXBhcmFtLT52YWx1ZSA9Ci0JCSAgICB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgPwotCQkgICAgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSA6IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLSNkZWZpbmUgSVdfSU9DVEwoeCkgWyh4KS1TSU9DU0lXQ09NTUlUXQotCi1zdGF0aWMgaXdfaGFuZGxlciBwODAyMTF3ZXh0X2hhbmRsZXJzW10gPSB7Ci0JSVdfSU9DVEwoU0lPQ1NJV0NPTU1JVCkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdjb21taXQsCi0JSVdfSU9DVEwoU0lPQ0dJV05BTUUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwKLS8qIFNJT0NTSVdOV0lELFNJT0NHSVdOV0lEICovCi0JSVdfSU9DVEwoU0lPQ1NJV0ZSRVEpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJlcSwKLQlJV19JT0NUTChTSU9DR0lXRlJFUSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmVxLAotCUlXX0lPQ1RMKFNJT0NTSVdNT0RFKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd21vZGUsCi0JSVdfSU9DVEwoU0lPQ0dJV01PREUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bW9kZSwKLS8qIFNJT0NTSVdTRU5TLFNJT0NHSVdTRU5TLFNJT0NTSVdSQU5HRSAqLwotCUlXX0lPQ1RMKFNJT0NHSVdSQU5HRSkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYW5nZSwKLS8qIFNJT0NTSVdQUklWLFNJT0NHSVdQUklWLFNJT0NTSVdTVEFUUyxTSU9DR0lXU1RBVFMgKi8KLQlJV19JT0NUTChTSU9DU0lXU1BZKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NweSwKLQlJV19JT0NUTChTSU9DR0lXU1BZKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NweSwKLS8qIFNJT0NTSVdBUCAqLwotCUlXX0lPQ1RMKFNJT0NHSVdBUCkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdhcCwKLS8qIFNJT0NHSVdBUExJU1QgKi8KLQlJV19JT0NUTChTSU9DU0lXU0NBTikgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdzY2FuLAotCUlXX0lPQ1RMKFNJT0NHSVdTQ0FOKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NjYW4sCi0JSVdfSU9DVEwoU0lPQ1NJV0VTU0lEKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2Vzc2lkLAotCUlXX0lPQ1RMKFNJT0NHSVdFU1NJRCkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwKLS8qIFNJT0NTSVdOSUNLTiAqLwotCUlXX0lPQ1RMKFNJT0NHSVdOSUNLTikgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwKLS8qIFNJT0NTSVdSQVRFICovCi0JSVdfSU9DVEwoU0lPQ0dJV1JBVEUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmF0ZSwKLQlJV19JT0NUTChTSU9DU0lXUlRTKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3J0cywKLQlJV19JT0NUTChTSU9DR0lXUlRTKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3J0cywKLQlJV19JT0NUTChTSU9DU0lXRlJBRykgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmFnLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkFHKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyYWcsCi0JSVdfSU9DVEwoU0lPQ1NJV1RYUE9XKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3R4cG93LAotCUlXX0lPQ1RMKFNJT0NHSVdUWFBPVykgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXd0eHBvdywKLQlJV19JT0NUTChTSU9DU0lXUkVUUlkpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cmV0cnksCi0JSVdfSU9DVEwoU0lPQ0dJV1JFVFJZKSA9IChpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JldHJ5LAotCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZW5jb2RlLAotCUlXX0lPQ1RMKFNJT0NHSVdFTkNPREUpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZW5jb2RlLAotLyogU0lPQ1NJV1BPV0VSLFNJT0NHSVdQT1dFUiAqLwotLyogV1BBIG9wZXJhdGlvbnMgKi8KLS8qIFNJT0NTSVdHRU5JRSxTSU9DR0lXR0VOSUUgZ2VuZXJpYyBJRSAqLwotCUlXX0lPQ1RMKFNJT0NTSVdBVVRIKSA9IChpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9zZXRfaXdhdXRoLCAvKnNldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLwotCUlXX0lPQ1RMKFNJT0NHSVdBVVRIKSA9IChpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9nZXRfaXdhdXRoLCAvKmdldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLwotCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREVFWFQpID0gKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dCwgLypzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCi0JSVdfSU9DVEwoU0lPQ0dJV0VOQ09ERUVYVCkgPSAoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9nZXRfZW5jb2RlZXh0LCAvKmdldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KLS8qIFNJT0NTSVdQTUtTQSAgICAgIFBNS1NBIGNhY2hlIG9wZXJhdGlvbiAqLwotfTsKLQotc3RydWN0IGl3X2hhbmRsZXJfZGVmIHA4MDIxMXdleHRfaGFuZGxlcl9kZWYgPSB7Ci0JLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocDgwMjExd2V4dF9oYW5kbGVycyksCi0JLnN0YW5kYXJkID0gcDgwMjExd2V4dF9oYW5kbGVycywKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMKLX07Ci0KLWludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQgYXNzb2MpCi17Ci0JdW5pb24gaXdyZXFfZGF0YSBkYXRhOwotCi0JLyogU2VuZCB0aGUgYXNzb2NpYXRpb24gc3RhdGUgZmlyc3QgKi8KLQlkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWlmIChhc3NvYykKLQkJbWVtY3B5KGRhdGEuYXBfYWRkci5zYV9kYXRhLCB3bGFuZGV2LT5ic3NpZCwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtc2V0KGRhdGEuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0KLQlpZiAod2xhbl93ZXh0X3dyaXRlKQotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHdsYW5kZXYtPm5ldGRldiwgU0lPQ0dJV0FQLCAmZGF0YSwgTlVMTCk7Ci0KLQlpZiAoIWFzc29jKQotCQlnb3RvIGRvbmU7Ci0KLQkvKiBYWFggc2VuZCBhc3NvY2lhdGlvbiBkYXRhLCBsaWtlIElFcywgZXRjIGV0Yy4gKi8KLQotZG9uZToKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCmluZGV4IGQyMGM4NzkuLmZkNWRkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwpAQCAtNzMsMjYgKzczLDI2IEBACiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogTG9jYWwgVHlwZXMgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgczNkYXRhcmVjIHsKK3N0cnVjdCBzM2RhdGFyZWMgewogCXUzMiBsZW47CiAJdTMyIGFkZHI7CiAJdTggY2hlY2tzdW07CiAJdTggKmRhdGE7Ci19IHMzZGF0YXJlY190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgczNwbHVncmVjIHsKK3N0cnVjdCBzM3BsdWdyZWMgewogCXUzMiBpdGVtY29kZTsKIAl1MzIgYWRkcjsKIAl1MzIgbGVuOwotfSBzM3BsdWdyZWNfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IHMzY3JjcmVjIHsKK3N0cnVjdCBzM2NyY3JlYyB7CiAJdTMyIGFkZHI7CiAJdTMyIGxlbjsKIAl1bnNpZ25lZCBpbnQgZG93cml0ZTsKLX0gczNjcmNyZWNfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IHMzaW5mb3JlYyB7CitzdHJ1Y3QgczNpbmZvcmVjIHsKIAl1MTYgbGVuOwogCXUxNiB0eXBlOwogCXVuaW9uIHsKQEAgLTEwMSwyMCArMTAxLDIwIEBACiAJCXUxNiBidWlsZHNlcTsKIAkJaGZhMzg0eF9jb21waWRlbnRfdCBwbGF0Zm9ybTsKIAl9IGluZm87Ci19IHMzaW5mb3JlY190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgcGRhIHsKK3N0cnVjdCBwZGEgewogCXU4IGJ1ZltIRkEzODR4X1BEQV9MRU5fTUFYXTsKIAloZmEzODR4X3BkcmVjX3QgKnJlY1tIRkEzODR4X1BEQV9SRUNTX01BWF07CiAJdW5zaWduZWQgaW50IG5yZWM7Ci19IHBkYV90OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgaW1nY2h1bmsgeworc3RydWN0IGltZ2NodW5rIHsKIAl1MzIgYWRkcjsJLyogc3RhcnQgYWRkcmVzcyAqLwogCXUzMiBsZW47CS8qIGluIGJ5dGVzICovCiAJdTE2IGNyYzsJLyogQ1JDIHZhbHVlIChpZiBpdCBmYWxscyBhdCBhIGNodW5rIGJvdW5kYXJ5KSAqLwogCXU4ICpkYXRhOwotfSBpbWdjaHVua190OworfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwpAQCAtMTI0LDI2ICsxMjQsMjYgQEAKIAogLyogRGF0YSByZWNvcmRzICovCiB1bnNpZ25lZCBpbnQgbnMzZGF0YTsKLXMzZGF0YXJlY190IHMzZGF0YVtTM0RBVEFfTUFYXTsKK3N0cnVjdCBzM2RhdGFyZWMgczNkYXRhW1MzREFUQV9NQVhdOwogCiAvKiBQbHVnIHJlY29yZHMgKi8KIHVuc2lnbmVkIGludCBuczNwbHVnOwotczNwbHVncmVjX3QgczNwbHVnW1MzUExVR19NQVhdOworc3RydWN0IHMzcGx1Z3JlYyBzM3BsdWdbUzNQTFVHX01BWF07CiAKIC8qIENSQyByZWNvcmRzICovCiB1bnNpZ25lZCBpbnQgbnMzY3JjOwotczNjcmNyZWNfdCBzM2NyY1tTM0NSQ19NQVhdOworc3RydWN0IHMzY3JjcmVjIHMzY3JjW1MzQ1JDX01BWF07CiAKIC8qIEluZm8gcmVjb3JkcyAqLwogdW5zaWduZWQgaW50IG5zM2luZm87Ci1zM2luZm9yZWNfdCBzM2luZm9bUzNJTkZPX01BWF07CitzdHJ1Y3QgczNpbmZvcmVjIHMzaW5mb1tTM0lORk9fTUFYXTsKIAogLyogUzcgcmVjb3JkICh0aGVyZSBfYmV0dGVyXyBiZSBvbmx5IG9uZSkgKi8KIHUzMiBzdGFydGFkZHI7CiAKIC8qIExvYWQgaW1hZ2UgY2h1bmtzICovCiB1bnNpZ25lZCBpbnQgbmZjaHVua3M7Ci1pbWdjaHVua190IGZjaHVua1tDSFVOS1NfTUFYXTsKK3N0cnVjdCBpbWdjaHVuayBmY2h1bmtbQ0hVTktTX01BWF07CiAKIC8qIE5vdGUgdGhhdCBmb3IgdGhlIGZvbGxvd2luZyBwZHJlY190IGFycmF5cywgdGhlIGxlbiBhbmQgY29kZSAqLwogLyogICBmaWVsZHMgYXJlIHN0b3JlZCBpbiBIT1NUIGJ5dGUgb3JkZXIuIFRoZSBta3Bkcmxpc3QoKSBmdW5jdGlvbiAqLwpAQCAtMTUxLDcgKzE1MSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUERBLCBidWlsdCBmcm9tIFtjYXJkfG5ld2ZpbGVdK1thZGRmaWxlMSthZGRmaWxlMi4uLl0gKi8KIAotcGRhX3QgcGRhOworc3RydWN0IHBkYSBwZGE7CiBoZmEzODR4X2NvbXBpZGVudF90IG5pY2lkOwogaGZhMzg0eF9jYXBsZXZlbF90IHJmaWQ7CiBoZmEzODR4X2NhcGxldmVsX3QgbWFjaWQ7CkBAIC0xNjUsMjEgKzE2NSwyMSBAQAogCiBzdGF0aWMgaW50IHJlYWRfZndmaWxlKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmZwdHIpOwogCi1zdGF0aWMgaW50IG1raW1hZ2UoaW1nY2h1bmtfdCAqY2xpc3QsIHVuc2lnbmVkIGludCAqY2NudCk7CitzdGF0aWMgaW50IG1raW1hZ2Uoc3RydWN0IGltZ2NodW5rICpjbGlzdCwgdW5zaWduZWQgaW50ICpjY250KTsKIAotc3RhdGljIGludCByZWFkX2NhcmRwZGEocGRhX3QgKnBkYSwgd2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgcmVhZF9jYXJkcGRhKHN0cnVjdCBwZGEgKnBkYSwgd2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAotc3RhdGljIGludCBta3Bkcmxpc3QocGRhX3QgKnBkYSk7CitzdGF0aWMgaW50IG1rcGRybGlzdChzdHJ1Y3QgcGRhICpwZGEpOwogCi1zdGF0aWMgaW50IHBsdWdpbWFnZShpbWdjaHVua190ICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywKLQkgICAgICBzM3BsdWdyZWNfdCAqczNwbHVnLCB1bnNpZ25lZCBpbnQgbnMzcGx1ZywgcGRhX3QgKiBwZGEpOworc3RhdGljIGludCBwbHVnaW1hZ2Uoc3RydWN0IGltZ2NodW5rICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywKKwkgICAgICBzdHJ1Y3QgczNwbHVncmVjICpzM3BsdWcsIHVuc2lnbmVkIGludCBuczNwbHVnLCBzdHJ1Y3QgcGRhICogcGRhKTsKIAotc3RhdGljIGludCBjcmNpbWFnZShpbWdjaHVua190ICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywKLQkgICAgIHMzY3JjcmVjX3QgKnMzY3JjLCB1bnNpZ25lZCBpbnQgbnMzY3JjKTsKK3N0YXRpYyBpbnQgY3JjaW1hZ2Uoc3RydWN0IGltZ2NodW5rICpmY2h1bmssIHVuc2lnbmVkIGludCBuZmNodW5rcywKKwkgICAgIHN0cnVjdCBzM2NyY3JlYyAqczNjcmMsIHVuc2lnbmVkIGludCBuczNjcmMpOwogCi1zdGF0aWMgaW50IHdyaXRlaW1hZ2Uod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbWdjaHVua190ICpmY2h1bmssCitzdGF0aWMgaW50IHdyaXRlaW1hZ2Uod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywKIAkgICAgICAgdW5zaWduZWQgaW50IG5mY2h1bmtzKTsKLXN0YXRpYyB2b2lkIGZyZWVfY2h1bmtzKGltZ2NodW5rX3QgKmZjaHVuaywgdW5zaWduZWQgaW50ICpuZmNodW5rcyk7CitzdGF0aWMgdm9pZCBmcmVlX2NodW5rcyhzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50ICpuZmNodW5rcyk7CiAKIHN0YXRpYyB2b2lkIGZyZWVfc3JlY3Modm9pZCk7CiAKQEAgLTIzOSw3ICsyMzksNyBAQAogaW50IHByaXNtMl9md2FwcGx5KGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqcmZwdHIsIHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKIAlzaWduZWQgaW50IHJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90IGdldG1zZzsKKwlzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldCBnZXRtc2c7CiAJcDgwMjExaXRlbWRfdCAqaXRlbTsKIAl1MzIgKmRhdGE7CiAKQEAgLTM3NSw4ICszNzUsOCBAQAogKgkwCXN1Y2Nlc3MKICoJfjAJZmFpbHVyZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgY3JjaW1hZ2UoaW1nY2h1bmtfdCAqZmNodW5rLCB1bnNpZ25lZCBpbnQgbmZjaHVua3MsIHMzY3JjcmVjX3QgKnMzY3JjLAotCSAgICAgdW5zaWduZWQgaW50IG5zM2NyYykKK2ludCBjcmNpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAorCSAgICAgc3RydWN0IHMzY3JjcmVjICpzM2NyYywgdW5zaWduZWQgaW50IG5zM2NyYykKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgaTsKQEAgLTM5NywxNSArMzk3LDE0IEBACiAJCWZvciAoYyA9IDA7IGMgPCBuZmNodW5rczsgYysrKSB7CiAJCQljc3RhcnQgPSBmY2h1bmtbY10uYWRkcjsKIAkJCWNlbmQgPSBmY2h1bmtbY10uYWRkciArIGZjaHVua1tjXS5sZW47Ci0JCQkvKiAgdGhlIGxpbmUgYmVsb3cgZG9lcyBhbiBhZGRyZXNzICYgbGVuIG1hdGNoIHNlYXJjaCAqLwotCQkJLyogIHVuZm9ydHVuYXRlbHksIEkndmUgZm91bmQgdGhhdCB0aGUgbGVuIGZpZWxkcyBvZiAqLwotCQkJLyogIHNvbWUgY3JjIHJlY29yZHMgZG9uJ3QgbWF0Y2ggd2l0aCB0aGUgbGVuZ3RoIG9mICovCi0JCQkvKiAgdGhlIGFjdHVhbCBkYXRhLCBzbyB3ZSdyZSBub3QgY2hlY2tpbmcgcmlnaHQgKi8KLQkJCS8qICBub3cgKi8KLQkJCS8qIGlmICggY3Jjc3RhcnQtMiA+PSBjc3RhcnQgJiYgY3JjZW5kIDw9IGNlbmQgKSBicmVhazsgKi8KKwkJCS8qIHRoZSBsaW5lIGJlbG93IGRvZXMgYW4gYWRkcmVzcyAmIGxlbiBtYXRjaCBzZWFyY2ggKi8KKwkJCS8qIHVuZm9ydHVuYXRlbHksIEkndmUgZm91bmQgdGhhdCB0aGUgbGVuIGZpZWxkcyBvZiAqLworCQkJLyogc29tZSBjcmMgcmVjb3JkcyBkb24ndCBtYXRjaCB3aXRoIHRoZSBsZW5ndGggb2YgKi8KKwkJCS8qIHRoZSBhY3R1YWwgZGF0YSwgc28gd2UncmUgbm90IGNoZWNraW5nIHJpZ2h0IG5vdyAqLworCQkJLyogaWYgKGNyY3N0YXJ0LTIgPj0gY3N0YXJ0ICYmIGNyY2VuZCA8PSBjZW5kKSBicmVhazsgKi8KIAogCQkJLyogbm90ZSB0aGUgLTIgYmVsb3csIGl0J3MgdG8gbWFrZSBzdXJlIHRoZSBjaHVuayBoYXMgKi8KLQkJCS8qICAgc3BhY2UgZm9yIHRoZSBDUkMgdmFsdWUgKi8KKwkJCS8qIHNwYWNlIGZvciB0aGUgQ1JDIHZhbHVlICovCiAJCQlpZiAoY3Jjc3RhcnQgLSAyID49IGNzdGFydCAmJiBjcmNzdGFydCA8IGNlbmQpCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTQ0MCw3ICs0MzksNyBAQAogKiBSZXR1cm5zOgogKglub3RoaW5nCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgZnJlZV9jaHVua3MoaW1nY2h1bmtfdCAqZmNodW5rLCB1bnNpZ25lZCBpbnQgKm5mY2h1bmtzKQordm9pZCBmcmVlX2NodW5rcyhzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50ICpuZmNodW5rcykKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgKm5mY2h1bmtzOyBpKyspIHsKQEAgLTQ5MCw3ICs0ODksNyBAQAogKgkwCS0gc3VjY2VzcwogKgl+MAktIGZhaWx1cmUgKHByb2JhYmx5IGFuIGVycm5vKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgbWtpbWFnZShpbWdjaHVua190ICpjbGlzdCwgdW5zaWduZWQgaW50ICpjY250KQoraW50IG1raW1hZ2Uoc3RydWN0IGltZ2NodW5rICpjbGlzdCwgdW5zaWduZWQgaW50ICpjY250KQogewogCWludCByZXN1bHQgPSAwOwogCWludCBpOwpAQCAtNTgzLDcgKzU4Miw3IEBACiAqCTAJLSBzdWNjZXNzCiAqCX4wCS0gZmFpbHVyZSAocHJvYmFibHkgYW4gZXJybm8pCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBta3Bkcmxpc3QocGRhX3QgKnBkYSkKK2ludCBta3Bkcmxpc3Qoc3RydWN0IHBkYSAqcGRhKQogewogCWludCByZXN1bHQgPSAwOwogCXUxNiAqcGRhMTYgPSAodTE2ICopIHBkYS0+YnVmOwpAQCAtNjU2LDggKzY1NSw4IEBACiAqCTAJc3VjY2VzcwogKgl+MAlmYWlsdXJlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBwbHVnaW1hZ2UoaW1nY2h1bmtfdCAqZmNodW5rLCB1bnNpZ25lZCBpbnQgbmZjaHVua3MsCi0JICAgICAgczNwbHVncmVjX3QgKnMzcGx1ZywgdW5zaWduZWQgaW50IG5zM3BsdWcsIHBkYV90ICogcGRhKQoraW50IHBsdWdpbWFnZShzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywgdW5zaWduZWQgaW50IG5mY2h1bmtzLAorCSAgICAgIHN0cnVjdCBzM3BsdWdyZWMgKnMzcGx1ZywgdW5zaWduZWQgaW50IG5zM3BsdWcsIHN0cnVjdCBwZGEgKiBwZGEpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJaW50IGk7CQkJLyogcGx1ZyBpbmRleCAqLwpAQCAtNjc1LDcgKzY3NCw3IEBACiAJCXBzdGFydCA9IHMzcGx1Z1tpXS5hZGRyOwogCQlwZW5kID0gczNwbHVnW2ldLmFkZHIgKyBzM3BsdWdbaV0ubGVuOwogCQkvKiBmaW5kIHRoZSBtYXRjaGluZyBQRFIgKG9yIGZpbGVuYW1lKSAqLwotCQlpZiAoczNwbHVnW2ldLml0ZW1jb2RlICE9IDB4ZmZmZmZmZmZVTCkgewkvKiBub3QgZmlsZW5hbWUgKi8KKwkJaWYgKHMzcGx1Z1tpXS5pdGVtY29kZSAhPSAweGZmZmZmZmZmVUwpIHsgLyogbm90IGZpbGVuYW1lICovCiAJCQlmb3IgKGogPSAwOyBqIDwgcGRhLT5ucmVjOyBqKyspIHsKIAkJCQlpZiAoczNwbHVnW2ldLml0ZW1jb2RlID09CiAJCQkJICAgIGxlMTZfdG9fY3B1KHBkYS0+cmVjW2pdLT5jb2RlKSkKQEAgLTY4NCw3ICs2ODMsNyBAQAogCQl9IGVsc2UgewogCQkJaiA9IC0xOwogCQl9Ci0JCWlmIChqID49IHBkYS0+bnJlYyAmJiBqICE9IC0xKSB7CS8qICBpZiBubyBtYXRjaGluZyBQRFIsIGZhaWwgKi8KKwkJaWYgKGogPj0gcGRhLT5ucmVjICYmIGogIT0gLTEpIHsgLyogIGlmIG5vIG1hdGNoaW5nIFBEUiwgZmFpbCAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJ3YXJuaW5nOiBGYWlsZWQgdG8gZmluZCBQRFIgZm9yICIKIAkJCSAgICAgICAicGx1Z3JlYyAweCUwNHguXG4iLCBzM3BsdWdbaV0uaXRlbWNvZGUpOwpAQCAtNzY0LDEwICs3NjMsMTAgQEAKICoJMAktIHN1Y2Nlc3MKICoJfjAJLSBmYWlsdXJlIChwcm9iYWJseSBhbiBlcnJubykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHJlYWRfY2FyZHBkYShwZGFfdCAqcGRhLCB3bGFuZGV2aWNlX3QgKndsYW5kZXYpCitpbnQgcmVhZF9jYXJkcGRhKHN0cnVjdCBwZGEgKnBkYSwgd2xhbmRldmljZV90ICp3bGFuZGV2KQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QgbXNnOworCXN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYSBtc2c7CiAKIAkvKiBzZXQgdXAgdGhlIG1zZyAqLwogCW1zZy5tc2djb2RlID0gRElEbXNnX3AycmVxX3JlYWRwZGE7CkBAIC04MzksNyArODM4LDcgQEAKICogICAgICAgICAgICAgICAgc3Nzc3R0dHRkZC4uZGQKICogICAgICAgICAgICAgICAgcyAtIFNpemUgaW4gd29yZHMgKGxpdHRsZSBlbmRpYW4pCiAqICAgICAgICAgICAgICAgIHQgLSBJbmZvIHR5cGUgKGxpdHRsZSBlbmRpYW4pLCBzZWUgI2RlZmluZXMgYW5kCi0qICAgICAgICAgICAgICAgICAgICBzM2luZm9yZWNfdCBmb3IgZGV0YWlscyBhYm91dCB0eXBlcy4KKyogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzM2luZm9yZWMgZm9yIGRldGFpbHMgYWJvdXQgdHlwZXMuCiAqICAgICAgICAgICAgICAgIGQgLSAocyAtIDEpIGxpdHRsZSBlbmRpYW4gd29yZHMgZ2l2aW5nIHRoZSBjb250ZW50cyBvZgogKiAgICAgICAgICAgICAgICAgICAgdGhlIGdpdmVuIGluZm8gdHlwZS4KICoKQEAgLTk3OCwxMyArOTc3LDEzIEBACiAqCTAJc3VjY2VzcwogKgl+MAlmYWlsdXJlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCB3cml0ZWltYWdlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaW1nY2h1bmtfdCAqZmNodW5rLAoraW50IHdyaXRlaW1hZ2Uod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgaW1nY2h1bmsgKmZjaHVuaywKIAkgICAgICAgdW5zaWduZWQgaW50IG5mY2h1bmtzKQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90IHJzdGF0ZW1zZzsKLQlwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdCByd3JpdGVtc2c7Ci0JcDgwMjExbXNnX3QgKm1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZSByc3RhdGVtc2c7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZSByd3JpdGVtc2c7CisJc3RydWN0IHA4MDIxMW1zZyAqbXNncDsKIAl1MzIgcmVzdWx0Y29kZTsKIAlpbnQgaTsKIAlpbnQgajsKQEAgLTEwMzAsNyArMTAyOSw3IEBACiAJcnN0YXRlbXNnLmVuYWJsZS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwogCXJzdGF0ZW1zZy5leGVhZGRyLmRhdGEgPSBzdGFydGFkZHI7CiAKLQltc2dwID0gKHA4MDIxMW1zZ190ICopICZyc3RhdGVtc2c7CisJbXNncCA9IChzdHJ1Y3QgcDgwMjExbXNnICopICZyc3RhdGVtc2c7CiAJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2LCBtc2dwKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMTA1MiwxMSArMTA1MSwxMiBAQAogCQlud3JpdGVzICs9IChmY2h1bmtbaV0ubGVuICUgV1JJVEVTSVpFX01BWCkgPyAxIDogMDsKIAkJY3Vycm9mZiA9IDA7CiAJCWZvciAoaiA9IDA7IGogPCBud3JpdGVzOyBqKyspIHsKLQkJCWN1cnJsZW4gPQotCQkJICAgIChmY2h1bmtbaV0ubGVuIC0gKFdSSVRFU0laRV9NQVggKiBqKSkgPgotCQkJICAgIFdSSVRFU0laRV9NQVggPyBXUklURVNJWkVfTUFYIDogKGZjaHVua1tpXS5sZW4gLQotCQkJCQkJCSAgICAgKFdSSVRFU0laRV9NQVggKgotCQkJCQkJCSAgICAgIGopKTsKKwkJCS8qIFRPRE8gTW92ZSB0aGlzIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gKi8KKwkJCWludCBsZW5sZWZ0ID0gZmNodW5rW2ldLmxlbiAtIChXUklURVNJWkVfTUFYICogaik7CisJCQlpZiAoZmNodW5rW2ldLmxlbiA+IFdSSVRFU0laRV9NQVgpCisJCQkJY3VycmxlbiA9IFdSSVRFU0laRV9NQVg7CisJCQllbHNlCisJCQkJY3VycmxlbiA9IGxlbmxlZnQ7CiAJCQljdXJyb2ZmID0gaiAqIFdSSVRFU0laRV9NQVg7CiAJCQljdXJyZGFkZHIgPSBmY2h1bmtbaV0uYWRkciArIGN1cnJvZmY7CiAJCQkvKiBTZXR1cCB0aGUgbWVzc2FnZSAqLwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIAkJCSAgICAoIlNlbmRpbmcgeHh4ZGxfd3JpdGUgbWVzc2FnZSBhZGRyPSUwNnggbGVuPSVkLlxuIiwKIAkJCSAgICAgY3VycmRhZGRyLCBjdXJybGVuKTsKIAotCQkJbXNncCA9IChwODAyMTFtc2dfdCAqKSAmcndyaXRlbXNnOworCQkJbXNncCA9IChzdHJ1Y3QgcDgwMjExbXNnICopICZyd3JpdGVtc2c7CiAJCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXYsIG1zZ3ApOwogCiAJCQkvKiBDaGVjayB0aGUgcmVzdWx0cyAqLwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAlyc3RhdGVtc2cuZW5hYmxlLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwogCXJzdGF0ZW1zZy5leGVhZGRyLmRhdGEgPSAwOwogCi0JbXNncCA9IChwODAyMTFtc2dfdCAqKSAmcnN0YXRlbXNnOworCW1zZ3AgPSAoc3RydWN0IHA4MDIxMW1zZyAqKSAmcnN0YXRlbXNnOwogCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNncCk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwppbmRleCA0ZDFjZGZjLi4wNDUxNGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90ICptc2cgPSBtc2dwOworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiAqbXNnID0gbXNncDsKIAl1MTYgcm9hbWluZ21vZGUsIHdvcmQ7CiAJaW50IGksIHRpbWVvdXQ7CiAJaW50IGlzdG1wZW5hYmxlID0gMDsKQEAgLTM2MSwxMyArMzYxLDEzIEBACiBpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqcmVxOworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzICpyZXE7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90ICppdGVtID0gTlVMTDsKIAogCWludCBjb3VudDsKIAotCXJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKKwlyZXEgPSAoc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMgKikgbXNncDsKIAogCXJlcS0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKQEAgLTQ2Myw2ICs0NjMsOCBAQAogCiAJLyogY2FwaW5mbyBiaXRzICovCiAJY291bnQgPSBsZTE2X3RvX2NwdShpdGVtLT5jYXBpbmZvKTsKKwlyZXEtPmNhcGluZm8uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+Y2FwaW5mby5kYXRhID0gY291bnQ7CiAKIAkvKiBwcml2YWN5IGZsYWcgKi8KIAlyZXEtPnByaXZhY3kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNTExLDcgKzUxMyw3IEBACiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0X3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydCAqbXNnID0gbXNncDsKIAogCXA4MDIxMXBzdHJkX3QgKnBzdHI7CiAJdTggYnl0ZWJ1Zls4MF07CkBAIC02ODcsNyArNjg5LDcgQEAKIGludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewogCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhICptc2cgPSBtc2dwOwogCWludCByZXN1bHQ7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgY29sbGVjdGluZyB0aGUgUERBIHdoZW4gaW4gdGhlIEZXTE9BRApAQCAtNzUzLDcgKzc1NSw3IEBACiBpbnQgcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZSAqbXNnID0gbXNncDsKIAogCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9GV0xPQUQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC04MDksNyArODExLDcgQEAKIGludCBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKIAloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlICptc2cgPSBtc2dwOwogCXUzMiBhZGRyOwogCXUzMiBsZW47CiAJdTggKmJ1ZjsKQEAgLTg3Miw3ICs4NzQsNyBAQAogewogCWludCByZXN1bHQgPSAwOwogCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlICptc2cgPSBtc2dwOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTk0Miw3ICs5NDQsNyBAQAogaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdCAqbXNnID0gbXNncDsKKwlzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUgKm1zZyA9IG1zZ3A7CiAJdTMyIGFkZHI7CiAJdTMyIGxlbjsKIAl1OCAqYnVmOwpAQCAtMTAwNiw3ICsxMDA4LDcgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAl1MTYgcmVnOwogCXUxNiBwb3J0X3R5cGU7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICptc2cgPSBtc2dwOworCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luICptc2cgPSBtc2dwOwogCXA4MDIxMXBzdHJkX3QgKnBzdHI7CiAJdTggYnl0ZWJ1ZlsyNTZdOwogCWhmYTM4NHhfYnl0ZXN0cl90ICpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QgKikgYnl0ZWJ1ZjsKQEAgLTEwNzQsNyArMTA3Niw3IEBACiBpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewogCWludCByZXN1bHQgPSAwOwotCXA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmICptc2cgPSBtc2dwOwogCiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJdTE2IHdvcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCmluZGV4IDBiMGVjOWMuLmQzYTA2ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCkBAIC03OSw3ICs3OSw3IEBACiAjZGVmaW5lICBGX1JFQUQgICAgICAgMHgyCS8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KICNkZWZpbmUgIEZfV1JJVEUgICAgICAweDQJLyogTUlCIG1heSBiZSB3cml0dGVuLiAqLwogCi10eXBlZGVmIHN0cnVjdCBtaWJyZWMgeworc3RydWN0IG1pYnJlYyB7CiAJdTMyIGRpZDsKIAl1MTYgZmxhZzsKIAl1MTYgcGFybTE7CkBAIC04OSw2MyArODksNjMgQEAKIAkJICAgICBpbnQgaXNnZXQsCiAJCSAgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkgICAgIGhmYTM4NHhfdCAqaHcsCi0JCSAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwotfSBtaWJyZWNfdDsKKwkJICAgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLCB2b2lkICpkYXRhKTsKK307CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCSAgIGludCBpc2dldCwKIAkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgaGZhMzg0eF90ICpodywKLQkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLAogCQkJCSAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkgICAgaW50IGlzZ2V0LAogCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCSAgICBoZmEzODR4X3QgKmh3LAotCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKKwkJCSAgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLCB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkgIGludCBpc2dldCwKIAkJCSAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJICBoZmEzODR4X3QgKmh3LAotCQkJICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7CisJCQkgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCQkgICBpbnQgaXNnZXQsCiAJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgIGhmYTM4NHhfdCAqaHcsCi0JCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZywKIAkJCQkgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCQkgICAgaW50IGlzZ2V0LAogCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgIGhmYTM4NHhfdCAqaHcsCi0JCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLAogCQkJCSAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCQlpbnQgaXNnZXQsCiAJCQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkJaGZhMzg0eF90ICpodywKLQkJCQkJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJCXZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCQkJICAgIGludCBpc2dldCwKIAkJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkJICAgIGhmYTM4NHhfdCAqaHcsCi0JCQkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJCSAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkgIGludCBpc2dldCwKIAkJCSAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJICBoZmEzODR4X3QgKmh3LAotCQkJICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7CisJCQkgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgbWlicmVjX3QgbWlidGFiW10gPSB7CitzdGF0aWMgc3RydWN0IG1pYnJlYyBtaWJ0YWJbXSA9IHsKIAogCS8qIGRvdDExc210IE1JQidzICovCiAJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MCwKQEAgLTI2MSwxMSArMjYxLDExIEBACiB7CiAJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJaW50IHJlc3VsdCwgaXNnZXQ7Ci0JbWlicmVjX3QgKm1pYjsKKwlzdHJ1Y3QgbWlicmVjICptaWI7CiAKIAl1MTYgd2hpY2g7CiAKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZyA9IG1zZ3A7CisJc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXQgKm1zZyA9IG1zZ3A7CiAJcDgwMjExaXRlbWRfdCAqbWliaXRlbTsKIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC0zNzEsMTEgKzM3MSwxMSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCSAgIGludCBpc2dldCwKIAkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgaGZhMzg0eF90ICpodywKLQkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLAogCQkJCSAgIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTQyMSwxMSArNDIxLDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl91aW50MzIoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJICAgIGludCBpc2dldCwKIAkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkgICAgaGZhMzg0eF90ICpodywKLQkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSkKKwkJCSAgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLCB2b2lkICpkYXRhKQogewogCWludCByZXN1bHQ7CiAJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CkBAIC00NjgsMTEgKzQ2OCwxMSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcobWlicmVjX3QgKm1pYiwKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJICBpbnQgaXNnZXQsCiAJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCSAgaGZhMzg0eF90ICpodywKLQkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCisJCQkgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKIAl1MzIgKnVpbnQzMiA9ICh1MzIgKikgZGF0YTsKQEAgLTUyNSwxMSArNTI1LDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleShtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleShzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJICAgaW50IGlzZ2V0LAogCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICBoZmEzODR4X3QgKmh3LAotCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCSAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtNTc1LDExICs1NzUsMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdmFjeWludm9rZWQoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCSAgICBpbnQgaXNnZXQsCiAJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICAgaGZhMzg0eF90ICpodywKLQkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTYyMSwxMSArNjIxLDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoc3RydWN0IG1pYnJlYyAqbWliLAogCQkJCQlpbnQgaXNnZXQsCiAJCQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkJaGZhMzg0eF90ICpodywKLQkJCQkJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0ICptc2csCiAJCQkJCXZvaWQgKmRhdGEpCiB7CiAJaW50IHJlc3VsdDsKQEAgLTY2MCwxMSArNjYwLDExIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZChtaWJyZWNfdCAqbWliLAorc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZChzdHJ1Y3QgbWlicmVjICptaWIsCiAJCQkJCSAgICBpbnQgaXNnZXQsCiAJCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJCSAgICBoZmEzODR4X3QgKmh3LAotCQkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCSAgICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLAogCQkJCQkgICAgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmVzdWx0OwpAQCAtNzA5LDExICs3MDksMTEgQEAKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KG1pYnJlY190ICptaWIsCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2KHN0cnVjdCBtaWJyZWMgKm1pYiwKIAkJCSAgaW50IGlzZ2V0LAogCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkgIGhmYTM4NHhfdCAqaHcsCi0JCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQorCQkJICBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldCAqbXNnLCB2b2lkICpkYXRhKQogewogCXA4MDIxMXBzdHJkX3QgKnBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSBkYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCmluZGV4IDZjZDA5MzUuLmVkNzUxZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC04Myw4ICs4Myw2IEBACiAjaW5jbHVkZSAiaGZhMzg0eC5oIgogI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKIAotI2RlZmluZSB3bGFuX2hleGNoYXIoeCkgKCgoeCkgPCAweDBhKSA/ICgnMCcgKyAoeCkpIDogKCdhJyArICgoeCkgLSAweDBhKSkpCi0KIC8qIENyZWF0ZSBhIHN0cmluZyBvZiBwcmludGFibGUgY2hhcnMgZnJvbSBzb21ldGhpbmcgdGhhdCBtaWdodCBub3QgYmUgKi8KIC8qIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3RyIGJlIDQqbGVuICsgMSBieXRlcyBsb25nICovCiAjZGVmaW5lIHdsYW5fbWtwcmludHN0cihidWYsIGJ1Zmxlbiwgc3RyLCBzdHJsZW4pIFwKQEAgLTk5LDggKzk3LDggQEAKIAkJfSBlbHNlIHsgXAogCQkJKHN0cilbal0gPSAnXFwnOyBcCiAJCQkoc3RyKVtqKzFdID0gJ3gnOyBcCi0JCQkoc3RyKVtqKzJdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4ZjApID4+IDQpOyBcCi0JCQkoc3RyKVtqKzNdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4MGYpKTsgXAorCQkJKHN0cilbaisyXSA9IGhleF9hc2NfaGkoKGJ1ZilbaV0pOyBcCisJCQkoc3RyKVtqKzNdID0gaGV4X2FzY19sbygoYnVmKVtpXSk7IFwKIAkJCWogKz0gNDsgXAogCQl9IFwKIAl9IFwKQEAgLTEyNCwxMyArMTIyLDE3IEBACiAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAordm9pZCBwcmlzbTJfY29ubmVjdF9yZXN1bHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCBmYWlsZWQpOwordm9pZCBwcmlzbTJfZGlzY29ubmVjdGVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHByaXNtMl9yb2FtZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKKwogc3RhdGljIGludCBwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogc3RhdGljIGludCBwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwogc3RhdGljIGludCBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKLQkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci1zdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworCQkJICAgICB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJICAgICBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApOworc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgcDgwMjExbXNnICptc2cpOwogc3RhdGljIGludCBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKIHN0YXRpYyBpbnQgcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiBzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KTsKQEAgLTI2Niw4ICsyNjgsOCBAQAogKglwcm9jZXNzIHRocmVhZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV90eGZyYW1lKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJICAgICBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQorCQkJICAgICB1bmlvbiBwODAyMTFfaGRyICpwODAyMTFfaGRyLAorCQkJICAgICBzdHJ1Y3QgcDgwMjExX21ldGF3ZXAgKnA4MDIxMV93ZXApCiB7CiAJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAlpbnQgcmVzdWx0OwpAQCAtMzA3LDcgKzMwOSw3IEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcyB0aHJlYWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQorc3RhdGljIGludCBwcmlzbTJzdGFfbWxtZXJlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3QgcDgwMjExbXNnICptc2cpCiB7CiAJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIApAQCAtMzY0LDkgKzM2Niw5IEBACiAJCWJyZWFrOwkJLyogaWdub3JlIG1lLiAqLwogCWNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlOgogCQl7Ci0JCQlwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCAqaWZzdGF0ZW1zZzsKKwkJCXN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUgKmlmc3RhdGVtc2c7CiAJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBpZnN0YXRlIHJlcXVlc3RcbiIpOwotCQkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCAqKSBtc2c7CisJCQlpZnN0YXRlbXNnID0gKHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGUgKikgbXNnOwogCQkJcmVzdWx0ID0KIAkJCSAgICBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2LAogCQkJCQkgICAgICBpZnN0YXRlbXNnLT5pZnN0YXRlLmRhdGEpOwpAQCAtMzg1LDExICszODcsMTEgQEAKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKIAljYXNlIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OnsKLQkJCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgKnF1YWxtc2c7CisJCQlzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgKnF1YWxtc2c7CiAKIAkJCXByX2RlYnVnKCJSZWNlaXZlZCBjb21tc3F1YWxpdHkgcmVxdWVzdFxuIik7CiAKLQkJCXF1YWxtc2cgPSAocDgwMjExbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfdCAqKSBtc2c7CisJCQlxdWFsbXNnID0gKHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eSAqKSBtc2c7CiAKIAkJCXF1YWxtc2ctPmxpbmsuc3RhdHVzID0KIAkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC00MDEsNiArNDAzLDcgQEAKIAkJCXF1YWxtc2ctPmxpbmsuZGF0YSA9IGxlMTZfdG9fY3B1KGh3LT5xdWFsLkNRX2N1cnJCU1MpOwogCQkJcXVhbG1zZy0+bGV2ZWwuZGF0YSA9IGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFTTF9jdXJyQlNTKTsKIAkJCXF1YWxtc2ctPm5vaXNlLmRhdGEgPSBsZTE2X3RvX2NwdShody0+cXVhbC5BTkxfY3VyckZDKTsKKwkJCXF1YWxtc2ctPnR4cmF0ZS5kYXRhID0gaHctPnR4cmF0ZTsKIAogCQkJYnJlYWs7CiAJCX0KQEAgLTEzMDAsNiArMTMwMyw5IEBACiAJCQkgICAgKHBvcnRzdGF0dXMgPT0gSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUykgPwogCQkJICAgIFdMQU5fTUFDTU9ERV9JQlNTX1NUQSA6IFdMQU5fTUFDTU9ERV9FU1NfU1RBOwogCisJCQkvKiBzaWduYWwgYmFjayB1cCB0byBjZmc4MDIxMSBsYXllciAqLworCQkJcHJpc20yX2Nvbm5lY3RfcmVzdWx0KHdsYW5kZXYsIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOworCiAJCQkvKiBHZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB0aGUgY29tbXMgcXVhbGl0eSBzdHVmZiAqLwogCQkJcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcigmaHctPmNvbW1zcXVhbF9iaCk7CiAJCX0KQEAgLTEzMTUsMjUgKzEzMjEsMTYgQEAKIAkJICogSW5kaWNhdGUgRGVhdXRoZW50aWNhdGlvbgogCQkgKiBCbG9jayBUcmFuc21pdHMsIElnbm9yZSByZWNlaXZlcyBvZiBkYXRhIGZyYW1lcwogCQkgKi8KLQkJaWYgKGh3LT5qb2luX2FwID09IDIpIHsKLQkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7Ci0JCQlqb2lucmVxID0gaHctPmpvaW5yZXE7Ci0JCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KLQkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCi0JCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKLQkJCQkJICAgICAgICZqb2lucmVxLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOKTsKKwkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpCiAJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEIChyZS1zdWJtaXR0aW5nIGpvaW4pXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKQotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgImxpbmtzdGF0dXM9RElTQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKLQkJfQorCQkJICAgICAgICJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CiAJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKIAogCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOwogCisJCS8qIHNpZ25hbCBiYWNrIHVwIHRvIGNmZzgwMjExIGxheWVyICovCisJCXByaXNtMl9kaXNjb25uZWN0ZWQod2xhbmRldik7CisKIAkJYnJlYWs7CiAKIAljYXNlIEhGQTM4NHhfTElOS19BUF9DSEFOR0U6CkBAIC0xMzc2LDYgKzEzNzMsOSBAQAogCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CiAKKwkJLyogc2lnbmFsIGJhY2sgdXAgdG8gY2ZnODAyMTEgbGF5ZXIgKi8KKwkJcHJpc20yX3JvYW1lZCh3bGFuZGV2KTsKKwogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9MSU5LX0FQX09VVE9GUkFOR0U6CkBAIC0xNDM1LDYgKzE0MzUsOSBAQAogCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKHdsYW5kZXYtPm5ldGRldik7CiAKKwkJLyogc2lnbmFsIGJhY2sgdXAgdG8gY2ZnODAyMTEgbGF5ZXIgKi8KKwkJcHJpc20yX2Nvbm5lY3RfcmVzdWx0KHdsYW5kZXYsIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CisKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTQ0Niw3ICsxNDQ5LDYgQEAKIAl9CiAKIAl3bGFuZGV2LT5saW5rc3RhdHVzID0gKGh3LT5saW5rX3N0YXR1cyA9PSBIRkEzODR4X0xJTktfQ09OTkVDVEVEKTsKLQlwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldiwgd2xhbmRldi0+bGlua3N0YXR1cyk7CiAKIGZhaWxlZDoKIAlyZXR1cm47CkBAIC0xOTg1LDYgKzE5ODcsOSBAQAogCWhmYTM4NHhfdCAqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CiAJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCXN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0IG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90ICptaWJpdGVtID0gKHA4MDIxMWl0ZW1fdWludDMyX3QgKikKKwkJCQkJCSZtc2cubWliYXR0cmlidXRlLmRhdGE7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAoaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKQEAgLTIwMTMsNiArMjAxOCwzNCBAQAogCQkJIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKIAl9CiAKKwkvKiBHZXQgdGhlIHNpZ25hbCByYXRlICovCisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1pYml0ZW0tPmRpZCA9IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CisKKwlpZiAocmVzdWx0KSB7CisJCXByX2RlYnVnKCJnZXQgc2lnbmFsIHJhdGUgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCSByZXN1bHQpOworCQlnb3RvIGRvbmU7CisJfQorCisJc3dpdGNoIChtaWJpdGVtLT5kYXRhKSB7CisJY2FzZSBIRkEzODR4X1JBVEVCSVRfMToKKwkJaHctPnR4cmF0ZSA9IDEwOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfUkFURUJJVF8yOgorCQlody0+dHhyYXRlID0gMjA7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzVkb3Q1OgorCQlody0+dHhyYXRlID0gNTU7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9SQVRFQklUXzExOgorCQlody0+dHhyYXRlID0gMTEwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiQmFkIHJhdGViaXQgKCVkKVxuIiwgbWliaXRlbS0+ZGF0YSk7CisJfQorCiAJLyogTGFzdGx5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgQlNTSUQgZGlkbid0IGNoYW5nZSBvbiB1cyAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCiAJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKaW5kZXggZjVjZmY3NS4uNGVmYTAyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCX0KIAlodyA9IHdsYW5kZXYtPnByaXY7CiAKLQlpZiAod2xhbl9zZXR1cCh3bGFuZGV2KSAhPSAwKSB7CisJaWYgKHdsYW5fc2V0dXAod2xhbmRldiwgJihpbnRlcmZhY2UtPmRldikpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogd2xhbl9zZXR1cCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ODAzZGQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfWEdJX0gKLSNkZWZpbmUgX1hHSV9ICi0KLSNpZiAxCi0jZGVmaW5lIFRXREVCVUcoeCkKLSNlbHNlCi0jZGVmaW5lIFRXREVCVUcoeCkgcHJpbnRrKEtFUk5fSU5GTyB4ICJcbiIpOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5jCmluZGV4IDg2ZWMzNDIuLjc5NTQ5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfYWNjZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmMKQEAgLTM3LDM3ICszNywxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotLyoKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDxsaW51eC9YR0lmYi5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2aWRlby9YR0lmYi5oPgotI2VuZGlmCi0qLwogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2VuZGlmCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDx2aWRlby9mYmNvbi5oPgotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjguaD4KLSNpbmNsdWRlIDx2aWRlby9mYmNvbi1jZmIxNi5oPgotI2luY2x1ZGUgPHZpZGVvL2ZiY29uLWNmYjI0Lmg+Ci0jaW5jbHVkZSA8dmlkZW8vZmJjb24tY2ZiMzIuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAib3NkZWYuaCIKICNpbmNsdWRlICJ2Z2F0eXBlcy5oIgogI2luY2x1ZGUgInZiX3N0cnVjdC5oIgogI2luY2x1ZGUgIlhHSWZiLmgiCiAjaW5jbHVkZSAiWEdJX2FjY2VsLmgiCiAKLQotZXh0ZXJuIHN0cnVjdCAgICAgdmlkZW9faW5mbyB4Z2lfdmlkZW9faW5mbzsKLWV4dGVybiBpbnQgWEdJZmJfYWNjZWw7Ci0KIHN0YXRpYyBjb25zdCBpbnQgWEdJQUxVQ29udltdID0KIHsKICAgICAweDAwLCAgICAgICAvKiBkZXN0ID0gMDsgICAgICAgICAgICAwLCAgICAgIEdYY2xlYXIsICAgICAgICAwICovCkBAIC0xMDgsMTA5ICs4OCwxNyBAQAogICAgIDB4RkYsICAgICAgIC8qIGRlc3QgPSAweEZGOyAgICAgICAgIDEsICAgICAgR1hzZXQsICAgICAgICAgIDB4RiAqLwogfTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMzQpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBteXJvcHNbXSA9IHsKICAgIAkzLCAxMCwgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMwogICAgfTsKLSNlbmRpZgogCiAvKiAzMDAgc2VyaWVzICovCi0jaWYgMAotc3RhdGljIHZvaWQKLVhHSTMwMFN5bmModm9pZCkKLXsKLQlYR0kzMDBJZGxlCi19Ci0jZW5kaWYKIHN0YXRpYyB2b2lkCiBYR0kzMTBTeW5jKHZvaWQpCiB7CiAJWEdJMzEwSWRsZQogfQotI2lmIDAKLXN0YXRpYyB2b2lkCi1YR0kzMDBTZXR1cEZvclNjcmVlblRvU2NyZWVuQ29weShpbnQgeGRpciwgaW50IHlkaXIsIGludCByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwbGFuZW1hc2ssIGludCB0cmFuc19jb2xvcikKLXsKLQlYR0kzMDBTZXR1cERTVENvbG9yRGVwdGgoeGdpX3ZpZGVvX2luZm8uRHN0Q29sb3IpOwotCVhHSTMwMFNldHVwU1JDUGl0Y2goeGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aCkKLQlYR0kzMDBTZXR1cERTVFJlY3QoeGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aCwgMHhGRkYpCiAKLQlpZih0cmFuc19jb2xvciAhPSAtMSkgewotCQlYR0kzMDBTZXR1cFJPUCgweDBBKQotCQlYR0kzMDBTZXR1cFNSQ1RyYW5zKHRyYW5zX2NvbG9yKQotCQlYR0kzMDBTZXR1cENNREZsYWcoVFJBTlNQQVJFTlRfQklUQkxUKQotCX0gZWxzZSB7Ci0JICAgICAgICBYR0kzMDBTZXR1cFJPUChYR0lBTFVDb252W3JvcF0pCi0JfQotCWlmKHhkaXIgPiAwKSB7Ci0JCVhHSTMwMFNldHVwQ01ERmxhZyhYX0lOQykKLQl9Ci0JaWYoeWRpciA+IDApIHsKLQkJWEdJMzAwU2V0dXBDTURGbGFnKFlfSU5DKQotCX0KLX0KLQotc3RhdGljIHZvaWQKLVhHSTMwMFN1YnNlcXVlbnRTY3JlZW5Ub1NjcmVlbkNvcHkoaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBkc3RfeCwgaW50IGRzdF95LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0JbG9uZyBzcmNiYXNlLCBkc3RiYXNlOwotCi0Jc3JjYmFzZSA9IGRzdGJhc2UgPSAwOwotCWlmIChzcmNfeSA+PSAyMDQ4KSB7Ci0JCXNyY2Jhc2UgPSB4Z2lfdmlkZW9faW5mby52aWRlb19saW5lbGVuZ3RoICogc3JjX3k7Ci0JCXNyY195ID0gMDsKLQl9Ci0JaWYgKGRzdF95ID49IDIwNDgpIHsKLQkJZHN0YmFzZSA9IHhnaV92aWRlb19pbmZvLnZpZGVvX2xpbmVsZW5ndGggKiBkc3RfeTsKLQkJZHN0X3kgPSAwOwotCX0KLQotCVhHSTMwMFNldHVwU1JDQmFzZShzcmNiYXNlKTsKLQlYR0kzMDBTZXR1cERTVEJhc2UoZHN0YmFzZSk7Ci0KLQlpZighKHhnaV92aWRlb19pbmZvLkNvbW1hbmRSZWcgJiBYX0lOQykpICB7Ci0JCXNyY194ICs9IHdpZHRoLTE7Ci0JCWRzdF94ICs9IHdpZHRoLTE7Ci0JfQotCWlmKCEoeGdpX3ZpZGVvX2luZm8uQ29tbWFuZFJlZyAmIFlfSU5DKSkgIHsKLQkJc3JjX3kgKz0gaGVpZ2h0LTE7Ci0JCWRzdF95ICs9IGhlaWdodC0xOwotCX0KLQlYR0kzMDBTZXR1cFJlY3Qod2lkdGgsIGhlaWdodCkKLQlYR0kzMDBTZXR1cFNSQ1hZKHNyY194LCBzcmNfeSkKLQlYR0kzMDBTZXR1cERTVFhZKGRzdF94LCBkc3RfeSkKLQlYR0kzMDBEb0NNRAotfQotCi1zdGF0aWMgdm9pZAotWEdJMzAwU2V0dXBGb3JTb2xpZEZpbGwoaW50IGNvbG9yLCBpbnQgcm9wLCB1bnNpZ25lZCBpbnQgcGxhbmVtYXNrKQotewotCVhHSTMwMFNldHVwUEFURkcoY29sb3IpCi0JWEdJMzAwU2V0dXBEU1RSZWN0KHhnaV92aWRlb19pbmZvLnZpZGVvX2xpbmVsZW5ndGgsIDB4RkZGKQotCVhHSTMwMFNldHVwRFNUQ29sb3JEZXB0aCh4Z2lfdmlkZW9faW5mby5Ec3RDb2xvcik7Ci0JWEdJMzAwU2V0dXBST1AoWEdJUGF0QUxVQ29udltyb3BdKQotCVhHSTMwMFNldHVwQ01ERmxhZyhQQVRGRykKLX0KLQotc3RhdGljIHZvaWQKLVhHSTMwMFN1YnNlcXVlbnRTb2xpZEZpbGxSZWN0KGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQotewotCWxvbmcgZHN0YmFzZTsKLQotCWRzdGJhc2UgPSAwOwotCWlmKHkgPj0gMjA0OCkgewotCQlkc3RiYXNlID0geGdpX3ZpZGVvX2luZm8udmlkZW9fbGluZWxlbmd0aCAqIHk7Ci0JCXkgPSAwOwotCX0KLQlYR0kzMDBTZXR1cERTVEJhc2UoZHN0YmFzZSkKLQlYR0kzMDBTZXR1cERTVFhZKHgseSkKLQlYR0kzMDBTZXR1cFJlY3QodyxoKQotCVhHSTMwMFNldHVwQ01ERmxhZyhYX0lOQyB8IFlfSU5DIHwgQklUQkxUKQotCVhHSTMwMERvQ01ECi19Ci0jZW5kaWYKIC8qIDMxMC8zMjUgc2VyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZApAQCAtMzI2LDggKzIxNCw2IEBACiAKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMzQpICAvKiAtLS0gS0VSTkVMIDIuNS4zNCBhbmQgbGF0ZXIgLS0tICovCi0KIGludCBmYmNvbl9YR0lfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKICAgICBpZighWEdJZmJfYWNjZWwpIHJldHVybiAwOwpAQCAtMzk5LDE5OCArMjg1LDUgQEAKIAogfQogCi0jZW5kaWYKLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDUsMzMpICAvKiAtLS0tLS0gS0VSTkVMIDwyLjUuMzQgLS0tLS0tICovCi0KLXZvaWQgZmJjb25fWEdJX2Jtb3ZlKHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3JjeSwgaW50IHNyY3gsCi0JCQkgICAgaW50IGRzdHksIGludCBkc3R4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCi17Ci0gICAgICAgIGludCB4ZGlyLCB5ZGlyOwotCUNSSVRGTEFHUwotCi0JaWYoIXhnaV92aWRlb19pbmZvLmFjY2VsKSB7Ci0JICAgIHN3aXRjaCh4Z2lfdmlkZW9faW5mby52aWRlb19icHApIHsKLQkgICAgY2FzZSA4OgotI2lmZGVmIEZCQ09OX0hBU19DRkI4Ci0JICAgICAgIGZiY29uX2NmYjhfYm1vdmUocCwgc3JjeSwgc3JjeCwgZHN0eSwgZHN0eCwgaGVpZ2h0LCB3aWR0aCk7Ci0jZW5kaWYKLQkgICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgMTY6Ci0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci0JICAgICAgIGZiY29uX2NmYjE2X2Jtb3ZlKHAsIHNyY3ksIHNyY3gsIGRzdHksIGRzdHgsIGhlaWdodCwgd2lkdGgpOwotI2VuZGlmCi0JICAgICAgIGJyZWFrOwotCSAgICBjYXNlIDMyOgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCSAgICAgICBmYmNvbl9jZmIzMl9ibW92ZShwLCBzcmN5LCBzcmN4LCBkc3R5LCBkc3R4LCBoZWlnaHQsIHdpZHRoKTsKLSNlbmRpZgotCSAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQkgICAgcmV0dXJuOwotCX0KLQotCXNyY3ggKj0gZm9udHdpZHRoKHApOwotCXNyY3kgKj0gZm9udGhlaWdodChwKTsKLQlkc3R4ICo9IGZvbnR3aWR0aChwKTsKLQlkc3R5ICo9IGZvbnRoZWlnaHQocCk7Ci0Jd2lkdGggKj0gZm9udHdpZHRoKHApOwotCWhlaWdodCAqPSBmb250aGVpZ2h0KHApOwotCi0JaWYoc3JjeCA8IGRzdHgpIHhkaXIgPSAwOwotCWVsc2UgICAgICAgICAgICB4ZGlyID0gMTsKLQlpZihzcmN5IDwgZHN0eSkgeWRpciA9IDA7Ci0JZWxzZSAgICAgICAgICAgIHlkaXIgPSAxOwotCi0KLQkgICBDUklUQkVHSU4KLQkgICBYR0kzMTBTZXR1cEZvclNjcmVlblRvU2NyZWVuQ29weSh4ZGlyLCB5ZGlyLCAzLCAwLCAtMSk7Ci0JICAgWEdJMzEwU3Vic2VxdWVudFNjcmVlblRvU2NyZWVuQ29weShzcmN4LCBzcmN5LCBkc3R4LCBkc3R5LCB3aWR0aCwgaGVpZ2h0KTsKLQkgICBDUklURU5ECi0JICAgWEdJMzEwU3luYygpOwotI2lmIDAKLQkgICBwcmludGsoS0VSTl9JTkZPICJYR0lfYm1vdmUgc3ggJWQgc3kgJWQgZHggJWQgZHkgJWQgdyAlZCBoICVkXG4iLAotCQlzcmN4LCBzcmN5LCBkc3R4LCBkc3R5LCB3aWR0aCwgaGVpZ2h0KTsKLSNlbmRpZgotCi19Ci0KLQotc3RhdGljIHZvaWQgZmJjb25fWEdJX2NsZWFyKHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwKLQkJCWludCBzcmN5LCBpbnQgc3JjeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgY29sb3IpCi17Ci0JQ1JJVEZMQUdTCi0KLQlzcmN4ICo9IGZvbnR3aWR0aChwKTsKLQlzcmN5ICo9IGZvbnRoZWlnaHQocCk7Ci0Jd2lkdGggKj0gZm9udHdpZHRoKHApOwotCWhlaWdodCAqPSBmb250aGVpZ2h0KHApOwotCi0KLQkgICBDUklUQkVHSU4KLQkgICBYR0kzMTBTZXR1cEZvclNvbGlkRmlsbChjb2xvciwgMywgMCk7Ci0JICAgWEdJMzEwU3Vic2VxdWVudFNvbGlkRmlsbFJlY3Qoc3JjeCwgc3JjeSwgd2lkdGgsIGhlaWdodCk7Ci0JICAgQ1JJVEVORAotCSAgIFhHSTMxMFN5bmMoKTsKLQotfQotCi12b2lkIGZiY29uX1hHSV9jbGVhcjgoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJaW50IHNyY3ksIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCi17Ci0JdTMyIGJneDsKLQotCWlmKCF4Z2lfdmlkZW9faW5mby5hY2NlbCkgewotI2lmZGVmIEZCQ09OX0hBU19DRkI4Ci0JICAgIGZiY29uX2NmYjhfY2xlYXIoY29ucCwgcCwgc3JjeSwgc3JjeCwgaGVpZ2h0LCB3aWR0aCk7Ci0jZW5kaWYKLQkgICAgcmV0dXJuOwotCX0KLQotCWJneCA9IGF0dHJfYmdjb2xfZWMocCwgY29ucCk7Ci0JZmJjb25fWEdJX2NsZWFyKGNvbnAsIHAsIHNyY3ksIHNyY3gsIGhlaWdodCwgd2lkdGgsIGJneCk7Ci19Ci0KLXZvaWQgZmJjb25fWEdJX2NsZWFyMTYoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJaW50IHNyY3ksIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCi17Ci0JdTMyIGJneDsKLQlpZigheGdpX3ZpZGVvX2luZm8uYWNjZWwpIHsKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYKLQkgICAgZmJjb25fY2ZiMTZfY2xlYXIoY29ucCwgcCwgc3JjeSwgc3JjeCwgaGVpZ2h0LCB3aWR0aCk7Ci0jZW5kaWYKLQkgICAgcmV0dXJuOwotCX0KLQotCWJneCA9ICgodV9pbnQxNl90KilwLT5kaXNwc3dfZGF0YSlbYXR0cl9iZ2NvbF9lYyhwLCBjb25wKV07Ci0JZmJjb25fWEdJX2NsZWFyKGNvbnAsIHAsIHNyY3ksIHNyY3gsIGhlaWdodCwgd2lkdGgsIGJneCk7Ci19Ci0KLXZvaWQgZmJjb25fWEdJX2NsZWFyMzIoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAotCQkJaW50IHNyY3ksIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCi17Ci0JdTMyIGJneDsKLQotCWlmKCF4Z2lfdmlkZW9faW5mby5hY2NlbCkgewotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotCSAgICBmYmNvbl9jZmIzMl9jbGVhcihjb25wLCBwLCBzcmN5LCBzcmN4LCBoZWlnaHQsIHdpZHRoKTsKLSNlbmRpZgotCSAgICByZXR1cm47Ci0JfQotCi0JYmd4ID0gKCh1X2ludDMyX3QqKXAtPmRpc3Bzd19kYXRhKVthdHRyX2JnY29sX2VjKHAsIGNvbnApXTsKLQlmYmNvbl9YR0lfY2xlYXIoY29ucCwgcCwgc3JjeSwgc3JjeCwgaGVpZ2h0LCB3aWR0aCwgYmd4KTsKLX0KLQotdm9pZCBmYmNvbl9YR0lfcmV2YyhzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHNyY3gsIGludCBzcmN5KQotewotCUNSSVRGTEFHUwotCi0JaWYoIXhnaV92aWRlb19pbmZvLmFjY2VsKSB7Ci0JICAgIHN3aXRjaCh4Z2lfdmlkZW9faW5mby52aWRlb19icHApIHsKLQkgICAgY2FzZSAxNjoKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMTYKLQkgICAgICAgZmJjb25fY2ZiMTZfcmV2YyhwLCBzcmN4LCBzcmN5KTsKLSNlbmRpZgotCSAgICAgICBicmVhazsKLQkgICAgY2FzZSAzMjoKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMzIKLQkgICAgICAgZmJjb25fY2ZiMzJfcmV2YyhwLCBzcmN4LCBzcmN5KTsKLSNlbmRpZgotCSAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQkgICAgcmV0dXJuOwotCX0KLQotCXNyY3ggKj0gZm9udHdpZHRoKHApOwotCXNyY3kgKj0gZm9udGhlaWdodChwKTsKLQotCi0JICAgQ1JJVEJFR0lOCi0JICAgWEdJMzEwU2V0dXBGb3JTb2xpZEZpbGwoMCwgMHgwYSwgMCk7Ci0JICAgWEdJMzEwU3Vic2VxdWVudFNvbGlkRmlsbFJlY3Qoc3JjeCwgc3JjeSwgZm9udHdpZHRoKHApLCBmb250aGVpZ2h0KHApKTsKLQkgICBDUklURU5ECi0JICAgWEdJMzEwU3luYygpOwotCi19Ci0KLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCOAotc3RydWN0IGRpc3BsYXlfc3dpdGNoIGZiY29uX1hHSTggPSB7Ci0Jc2V0dXA6CQkJZmJjb25fY2ZiOF9zZXR1cCwKLQlibW92ZToJCQlmYmNvbl9YR0lfYm1vdmUsCi0JY2xlYXI6CQkJZmJjb25fWEdJX2NsZWFyOCwKLQlwdXRjOgkJCWZiY29uX2NmYjhfcHV0YywKLQlwdXRjczoJCQlmYmNvbl9jZmI4X3B1dGNzLAotCXJldmM6CQkJZmJjb25fY2ZiOF9yZXZjLAotCWNsZWFyX21hcmdpbnM6CQlmYmNvbl9jZmI4X2NsZWFyX21hcmdpbnMsCi0JZm9udHdpZHRobWFzazoJCUZPTlRXSURUSCg0KXxGT05UV0lEVEgoOCl8Rk9OVFdJRFRIKDEyKXxGT05UV0lEVEgoMTYpCi19OwotI2VuZGlmCi0jaWZkZWYgRkJDT05fSEFTX0NGQjE2Ci1zdHJ1Y3QgZGlzcGxheV9zd2l0Y2ggZmJjb25fWEdJMTYgPSB7Ci0Jc2V0dXA6CQkJZmJjb25fY2ZiMTZfc2V0dXAsCi0JYm1vdmU6CQkJZmJjb25fWEdJX2Jtb3ZlLAotCWNsZWFyOgkJCWZiY29uX1hHSV9jbGVhcjE2LAotCXB1dGM6CQkJZmJjb25fY2ZiMTZfcHV0YywKLQlwdXRjczoJCQlmYmNvbl9jZmIxNl9wdXRjcywKLQlyZXZjOgkJCWZiY29uX1hHSV9yZXZjLAotCWNsZWFyX21hcmdpbnM6CQlmYmNvbl9jZmIxNl9jbGVhcl9tYXJnaW5zLAotCWZvbnR3aWR0aG1hc2s6CQlGT05UV0lEVEgoNCl8Rk9OVFdJRFRIKDgpfEZPTlRXSURUSCgxMil8Rk9OVFdJRFRIKDE2KQotfTsKLSNlbmRpZgotI2lmZGVmIEZCQ09OX0hBU19DRkIzMgotc3RydWN0IGRpc3BsYXlfc3dpdGNoIGZiY29uX1hHSTMyID0gewotCXNldHVwOgkJCWZiY29uX2NmYjMyX3NldHVwLAotCWJtb3ZlOgkJCWZiY29uX1hHSV9ibW92ZSwKLQljbGVhcjoJCQlmYmNvbl9YR0lfY2xlYXIzMiwKLQlwdXRjOgkJCWZiY29uX2NmYjMyX3B1dGMsCi0JcHV0Y3M6CQkJZmJjb25fY2ZiMzJfcHV0Y3MsCi0JcmV2YzoJCQlmYmNvbl9YR0lfcmV2YywKLQljbGVhcl9tYXJnaW5zOgkJZmJjb25fY2ZiMzJfY2xlYXJfbWFyZ2lucywKLQlmb250d2lkdGhtYXNrOgkJRk9OVFdJRFRIKDQpfEZPTlRXSURUSCg4KXxGT05UV0lEVEgoMTIpfEZPTlRXSURUSCgxNikKLX07Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEtFUk5FTCBWRVJTSU9OICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5oCmluZGV4IDA0ZTEyNjcuLjI4YzA1Nzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJX2FjY2VsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9hY2NlbC5oCkBAIC00OTEsMjEgKzQ5MSw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgdmlkZW9faW5mbyB4Z2lfdmlkZW9faW5mbzsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDUsMzMpCi12b2lkIGZiY29uX1hHSV9ibW92ZShzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHNyY3ksIGludCBzcmN4LCBpbnQgZHN0eSwKLSAgICAgICAgICAgICAgICAgICAgIGludCBkc3R4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotdm9pZCBmYmNvbl9YR0lfcmV2YyhzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IHNyY3ksIGludCBzcmN4KTsKLXZvaWQgZmJjb25fWEdJX2NsZWFyOChzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsIGludCBzcmN5LAotICAgICAgICAgICAgICAgICAgICAgIGludCBzcmN4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwotdm9pZCBmYmNvbl9YR0lfY2xlYXIxNihzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsIGludCBzcmN5LAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKLXZvaWQgZmJjb25fWEdJX2NsZWFyMzIoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3JjeSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY3gsIGludCBoZWlnaHQsIGludCB3aWR0aCk7Ci0jZW5kaWYKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDM0KQogZXh0ZXJuIGludCBYR0lmYl9hY2NlbDsKIHZvaWQgZmJjb25fWEdJX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpOwogdm9pZCBmYmNvbl9YR0lfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSk7Ci0jZW5kaWYKKwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbi5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKaW5kZXggNGY0MTcxZS4uZmQxMTUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluLmgKQEAgLTQyLDE3ICs0MiwxMCBAQAogCiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw4KQogI2RlZmluZSBYR0lfSU9UWVBFMSB2b2lkIF9faW9tZW0KICNkZWZpbmUgWEdJX0lPVFlQRTIgX19pb21lbQogI2RlZmluZSBYR0lJTklUU1RBVElDIHN0YXRpYwotI2Vsc2UKLSNkZWZpbmUgWEdJX0lPVFlQRTEgdW5zaWduZWQgY2hhcgotI2RlZmluZSBYR0lfSU9UWVBFMgotI2RlZmluZSBYR0lJTklUU1RBVElDCi0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIHhnaWZiX3BjaV90YWJsZVtdID0gewogCiAJeyBQQ0lfVkVORE9SX0lEX1hHLCBQQ0lfREVWSUNFX0lEX1hHXzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKQEAgLTYzLDcgKzU2LDcgQEAKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB4Z2lmYl9wY2lfdGFibGUpOwotI2VuZGlmCisKIC8qIFRvIGJlIGluY2x1ZGVkIGluIGZiLmggKi8KICNpZm5kZWYgRkJfQUNDRUxfWEdJX0dMQU1PVVJfMgogI2RlZmluZSBGQl9BQ0NFTF9YR0lfR0xBTU9VUl8yICA0MAkvKiBYR0kgMzE1LCA2NTAsIDc0MAkJKi8KQEAgLTI1NSw5ICsyNDgsNiBAQAogI2RlZmluZSBCUklfRFJBTV9TSVpFXzMyTUIgICAgICAgIDB4MDQKICNkZWZpbmUgQlJJX0RSQU1fU0laRV82NE1CICAgICAgICAweDA1CiAKLSNkZWZpbmUgSFdfREVWSUNFX0VYVEVOU0lPTgkgIFhHSV9IV19ERVZJQ0VfSU5GTwotI2RlZmluZSBQSFdfREVWSUNFX0VYVEVOU0lPTiAgICAgIFBYR0lfSFdfREVWSUNFX0lORk8KLQogI2RlZmluZSBTUl9CVUZGRVJfU0laRSAgICAgICAgICAgIDUKICNkZWZpbmUgQ1JfQlVGRkVSX1NJWkUgICAgICAgICAgICA1CiAKQEAgLTMwMCwxMSArMjkwLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKiBGYmNvbiB2YXJpYWJsZXMgKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiBzdGF0aWMgc3RydWN0IGZiX2luZm8qIGZiX2luZm87Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBmYl9pbmZvIFhHSV9mYl9pbmZvOwotI2VuZGlmCiAKIAogc3RhdGljIGludCAgICB2aWRlb190eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwpAQCAtMzM2LDEyICszMjIsOCBAQAogCS52c3luY19sZW4JPSAwLAogCS5zeW5jCQk9IDAsCiAJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JLnJlc2VydmVkCT0gezAsIDAsIDAsIDAsIDAsIDB9Ci0jZW5kaWYKIH07CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiBzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIFhHSWZiX2ZpeCA9IHsKIAkuaWQJCT0gIlhHSSIsCiAJLnR5cGUJCT0gRkJfVFlQRV9QQUNLRURfUElYRUxTLApAQCAtMzUwLDI4ICszMzIsNyBAQAogfTsKIHN0YXRpYyBjaGFyIG15aWRbMjBdOwogc3RhdGljIHUzMiBwc2V1ZG9fcGFsZXR0ZVsxN107Ci0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotc3RhdGljIHN0cnVjdCBkaXNwbGF5IFhHSV9kaXNwOwotCi1zdGF0aWMgc3RydWN0IGRpc3BsYXlfc3dpdGNoIFhHSWZiX3N3OwotCi1zdGF0aWMgc3RydWN0IHsKLQl1MTYgYmx1ZSwgZ3JlZW4sIHJlZCwgcGFkOwotfSBYR0lfcGFsZXR0ZVsyNTZdOwotCi1zdGF0aWMgdW5pb24gewotI2lmZGVmIEZCQ09OX0hBU19DRkIxNgotCXUxNiBjZmIxNlsxNl07Ci0jZW5kaWYKLSNpZmRlZiBGQkNPTl9IQVNfQ0ZCMzIKLQl1MzIgY2ZiMzJbMTZdOwotI2VuZGlmCi19IFhHSV9mYmNvbl9jbWFwOwotCi1zdGF0aWMgaW50IFhHSWZiX2ludmVyc2UgPSAwOwotI2VuZGlmCiAKIC8qIGRpc3BsYXkgc3RhdHVzICovCiBzdGF0aWMgaW50IFhHSWZiX29mZiA9IDA7CkBAIC0zODAsOSArMzQxLDYgQEAKIHN0YXRpYyBpbnQgWEdJdmdhX2VuYWJsZWQgPSAwOwogc3RhdGljIGludCBYR0lmYl91c2Vyb20gPSAwOwogLy9zdGF0aWMgaW50IFhHSWZiX3VzZW9lbSA9IC0xOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotc3RhdGljIGludCBjdXJyY29uID0gMDsKLSNlbmRpZgogCiAvKiBnbG9iYWwgZmxhZ3MgKi8KIHN0YXRpYyBpbnQgWEdJZmJfcmVnaXN0ZXJlZDsKQEAgLTQxNSwxMCArMzczLDEwIEBACiAvKiBYR0lmYl9pbmZvIFhHSWZiaW5mbzsgKi8KIAogLyogVFc6IEhhcmR3YXJlIGV4dGVuc2lvbjsgY29udGFpbnMgZGF0YSBvbiBoYXJkd2FyZSAqLwotSFdfREVWSUNFX0VYVEVOU0lPTiBYR0lod19leHQ7CitzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvIFhHSWh3X2V4dDsKIAogLyogVFc6IFhHSSBwcml2YXRlIHN0cnVjdHVyZSAqLwotVkJfREVWSUNFX0lORk8gIFhHSV9QcjsKK3N0cnVjdCB2Yl9kZXZpY2VfaW5mbyAgWEdJX1ByOwogCiAvKiBjYXJkIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIFhHSWZiX21taW9fc2l6ZSA9IDA7CkBAIC01MzAsMjkgKzQ4OCwyMSBAQAogCiAvKiBtb2RlLXJlbGF0ZWQgdmFyaWFibGVzICovCiAjaWZkZWYgTU9EVUxFCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogc3RhdGljIGludCB4Z2lmYl9tb2RlX2lkeCA9IDE7CiAjZWxzZQotc3RhdGljIGludCBYR0lmYl9tb2RlX2lkeCA9IE1PREVfSU5ERVhfTk9ORTsgIC8qIERvbid0IHVzZSBhIG1vZGUgYnkgZGVmYXVsdCBpZiB3ZSBhcmUgYSBtb2R1bGUgKi8KLSNlbmRpZgotI2Vsc2UKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiBzdGF0aWMgaW50IHhnaWZiX21vZGVfaWR4ID0gLTE7ICAgICAgICAgICAgICAgLyogVXNlIGEgZGVmYXVsdCBtb2RlIGlmIHdlIGFyZSBpbnNpZGUgdGhlIGtlcm5lbCAqLwotI2Vsc2UKLXN0YXRpYyBpbnQgWEdJZmJfbW9kZV9pZHggPSAtMTsKLSNlbmRpZgogI2VuZGlmCiB1OCAgWEdJZmJfbW9kZV9ubyAgPSAwOwogdTggIFhHSWZiX3JhdGVfaWR4ID0gMDsKIAogLyogVFc6IENSMzYgZXZhbHVhdGlvbiAqLwotY29uc3QgVVNIT1JUIFhHSTMwMHBhbmVsdHlwZVtdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IFhHSTMwMHBhbmVsdHlwZVtdID0KICAgICB7IExDRF9VTktOT1dOLCAgIExDRF84MDB4NjAwLCAgTENEXzEwMjR4NzY4LCAgTENEXzEyODB4MTAyNCwKICAgICAgIExDRF8xMjgweDk2MCwgIExDRF82NDB4NDgwLCAgTENEXzEwMjR4NjAwLCAgTENEXzExNTJ4NzY4LAogICAgICAgIExDRF8xMDI0eDc2OCwgTENEXzEwMjR4NzY4LCAgTENEXzEwMjR4NzY4LAogICAgICAgTENEXzEwMjR4NzY4LCAgTENEXzEwMjR4NzY4LCBMQ0RfMTAyNHg3NjgsICBMQ0RfMTAyNHg3NjggfTsKIAotY29uc3QgVVNIT1JUIFhHSTMxMHBhbmVsdHlwZVtdID0KK2NvbnN0IHVuc2lnbmVkIHNob3J0IFhHSTMxMHBhbmVsdHlwZVtdID0KICAgICB7IExDRF9VTktOT1dOLCAgIExDRF84MDB4NjAwLCAgTENEXzEwMjR4NzY4LCAgTENEXzEyODB4MTAyNCwKICAgICAgIExDRF82NDB4NDgwLCAgIExDRF8xMDI0eDYwMCwgTENEXzExNTJ4ODY0LCAgTENEXzEyODB4OTYwLAogICAgICAgTENEXzExNTJ4NzY4LCAgTENEXzE0MDB4MTA1MCxMQ0RfMTI4MHg3NjgsICBMQ0RfMTYwMHgxMjAwLApAQCAtNjQ4LDE3ICs1OTgsNiBAQAogCXsgMCwgICAgICAwLCAgICAgICIiICAgICAgICwgIiIgICAgICAgfQogfTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotLyogT2Zmc2NyZWVuIGxheW91dCAqLwotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9HTFlJTkZPIHsKLQl1bnNpZ25lZCBjaGFyIGNoOwotCWludCBmb250d2lkdGg7Ci0JaW50IGZvbnRoZWlnaHQ7Ci0JdTggZ21hc2tbNzJdOwotCWludCBuZ21hc2s7Ci19IFhHSV9HTFlJTkZPOwotI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IF9YR0lfT0ggewogCXN0cnVjdCBfWEdJX09IICpwb2hfbmV4dDsKIAlzdHJ1Y3QgX1hHSV9PSCAqcG9oX3ByZXY7CkBAIC04NTIsNTAgKzc5MSw2IEBACiAKIAogLyogZmJkZXYgcm91dGluZXMgKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICAgICBpbnQJWEdJZmJfaW5pdCh2b2lkKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9nZXRfZml4KHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LAotCQkJICAgICAgaW50IGNvbiwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9nZXRfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICAgaW50IGNvbiwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9zZXRfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJICAgICAgaW50IGNvbiwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkICAgICBYR0lmYl9jcnRjX3RvX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfZ2V0X2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsCi0JCQkgICAgICAgaW50IGtzcGMsCi0JCQkgICAgICAgaW50IGNvbiwKLQkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfc2V0X2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsCi0JCQkgICAgICAgaW50IGtzcGMsCi0JCQkgICAgICAgaW50IGNvbiwKLQkJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfdXBkYXRlX3ZhcihpbnQgY29uLAotCQkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50ICAgICAgWEdJZmJfc3dpdGNoKGludCBjb24sCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkICAgICBYR0lmYl9ibGFuayhpbnQgYmxhbmssCi0JCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgICAgIFhHSWZiX3NldF9kaXNwKGludCBjb24sCi0JCQkgICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotc3RhdGljIGludCAgICAgIFhHSV9nZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkICpyZWQsIHVuc2lnbmVkICpncmVlbiwKLQkJCSAgICAgIHVuc2lnbmVkICpibHVlLCB1bnNpZ25lZCAqdHJhbnNwLAotCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwotc3RhdGljIHZvaWQgICAgIFhHSWZiX2RvX2luc3RhbGxfY21hcChpbnQgY29uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCAgICAgWEdJX2dldF9nbHlwaChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhHSV9HTFlJTkZPICpnbHkpOwotc3RhdGljIGludCAJWEdJZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotc3RhdGljIGludCAgICAgIFhHSWZiX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICAgICAgCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbiwKLQkJICAgICAgIAkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotI2VuZGlmCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiBYR0lJTklUU1RBVElDIGludCBfX2luaXQgeGdpZmJfaW5pdCh2b2lkKTsKIHN0YXRpYyBpbnQgICAgICBYR0lmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgICAgICBYR0lmYl9ibGFuayhpbnQgYmxhbmssCkBAIC05MDcsMzYgKzgwMiwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpOwogZXh0ZXJuIHZvaWQgICAgIGZiY29uX1hHSV9jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGZiX2NvcHlhcmVhICphcmVhKTsKLSNpZiAwCi1leHRlcm4gdm9pZCAgICAgY2ZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwotI2VuZGlmCiBleHRlcm4gaW50ICAgICAgZmJjb25fWEdJX3N5bmMoc3RydWN0IGZiX2luZm8gKmluZm8pOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKIHN0YXRpYyBpbnQgWEdJZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpOwotI2Vsc2UKLXN0YXRpYyBpbnQgICAgICBYR0lmYl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCSAJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIAkgICAgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZywKLQkJICAgICAgIAkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwotI2VuZGlmCiAKIC8qCiBleHRlcm4gaW50CVhHSWZiX21vZGVfcmF0ZV90b19kY2xvY2soVkJfREVWSUNFX0lORk8gKlhHSV9QciwKLQkJCSAgICAgIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKIAkJCSAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZW5vLCB1bnNpZ25lZCBjaGFyIHJhdGVpbmRleCk7Ci1leHRlcm4gaW50ICAgICAgWEdJZmJfbW9kZV9yYXRlX3RvX2RkYXRhKFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sCitleHRlcm4gaW50ICAgICAgWEdJZmJfbW9kZV9yYXRlX3RvX2RkYXRhKFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAogCQkJIHVuc2lnbmVkIGNoYXIgbW9kZW5vLCB1bnNpZ25lZCBjaGFyIHJhdGVpbmRleCwKIAkJCSB1bnNpZ25lZCBpbnQgKmxlZnRfbWFyZ2luLCB1bnNpZ25lZCBpbnQgKnJpZ2h0X21hcmdpbiwKIAkJCSB1bnNpZ25lZCBpbnQgKnVwcGVyX21hcmdpbiwgdW5zaWduZWQgaW50ICpsb3dlcl9tYXJnaW4sCiAJCQkgdW5zaWduZWQgaW50ICpoc3luY19sZW4sIHVuc2lnbmVkIGludCAqdnN5bmNfbGVuLAogCQkJIHVuc2lnbmVkIGludCAqc3luYywgdW5zaWduZWQgaW50ICp2bW9kZSk7CiAqLwotI2VuZGlmCi0JCQlleHRlcm4gICBCT09MRUFOICBYR0lfU2VhcmNoTW9kZUlEKCBVU0hPUlQgTW9kZU5vLFVTSE9SVCAgKk1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIFhHSV9TZWFyY2hNb2RlSUQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCXVuc2lnbmVkIHNob3J0ICpNb2RlSWRJbmRleCwKKwkJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CiBzdGF0aWMgaW50ICAgICAgWEdJZmJfZ2V0X2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IGNvbiwKIAkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIApAQCAtOTU2LDEwICs4NDAsMTAgQEAKIHN0YXRpYyB2b2lkICAgICBYR0lmYl9wcmVfc2V0bW9kZSh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICBYR0lmYl9wb3N0X3NldG1vZGUodm9pZCk7CiAKLXN0YXRpYyBCT09MRUFOICBYR0lmYl9DaGVja1ZCUmV0cmFjZSh2b2lkKTsKLXN0YXRpYyBCT09MRUFOICBYR0lmYmNoZWNrdnJldHJhY2VjcnQyKHZvaWQpOwotc3RhdGljIEJPT0xFQU4gIFhHSWZiY2hlY2t2cmV0cmFjZWNydDEodm9pZCk7Ci1zdGF0aWMgQk9PTEVBTiAgWEdJZmJfYnJpZGdlaXNzbGF2ZSh2b2lkKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICBYR0lmYl9DaGVja1ZCUmV0cmFjZSh2b2lkKTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICBYR0lmYmNoZWNrdnJldHJhY2VjcnQyKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGNoYXIgIFhHSWZiY2hlY2t2cmV0cmFjZWNydDEodm9pZCk7CitzdGF0aWMgdW5zaWduZWQgY2hhciAgWEdJZmJfYnJpZGdlaXNzbGF2ZSh2b2lkKTsKIAogc3RydWN0IFhHSV9tZW1yZXEgewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwpAQCAtOTk0LDMwICs4NzgsNDAgQEAKIHN0YXRpYyB2b2lkICAgICBYR0lmYl9mcmVlX25vZGUoWEdJX09IICpwb2gpOwogCiAvKiBJbnRlcm5hbCByb3V0aW5lcyB0byBhY2Nlc3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KLUJPT0xFQU4gICAgICAgICBYR0lmYl9xdWVyeV9WR0FfY29uZmlnX3NwYWNlKFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSWh3X2V4dCwKLQkgICAgICAgICAgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyAqdmFsdWUpOwordW5zaWduZWQgY2hhciBYR0lmYl9xdWVyeV9WR0FfY29uZmlnX3NwYWNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lod19leHQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHNldCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqdmFsdWUpOwogLy9CT09MRUFOICAgICAgICAgWEdJZmJfcXVlcnlfbm9ydGhfYnJpZGdlX3NwYWNlKFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSWh3X2V4dCwKIC8vCSAgICAgICAgIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzZXQsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKTsKIAogCiAvKiBSb3V0aW5lcyBmcm9tIGluaXQuYy9pbml0MzAxLmMgKi8KLWV4dGVybiB2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKFVDSEFSLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLWV4dGVybiBCT09MRUFOICBYR0lJbml0TmV3KFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24pOwotZXh0ZXJuIEJPT0xFQU4gIFhHSVNldE1vZGVOZXcoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgVVNIT1JUIE1vZGVObyk7CitleHRlcm4gdm9pZCAgICAgSW5pdFRvMzMwUG9pbnRlcih1bnNpZ25lZCBjaGFyLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgIFhHSUluaXROZXcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgWEdJU2V0TW9kZU5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8pOwogLy9leHRlcm4gdm9pZCAgICAgWEdJX1NldEVuYWJsZURzdG4oVkJfREVWSUNFX0lORk8gKlhHSV9Qcik7Ci1leHRlcm4gdm9pZCAgICAgWEdJX0xvbmdXYWl0KFZCX0RFVklDRV9JTkZPICpYR0lfUHIpOwotZXh0ZXJuIFVTSE9SVCAgIFhHSV9HZXRSYXRlUHRyQ1JUMiggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSwgVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKK2V4dGVybiB2b2lkICAgICBYR0lfTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFhHSV9HZXRSYXRlUHRyQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwKKwkJCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIC8qIFRXOiBDaHJvbnRlbCBUViBmdW5jdGlvbnMgKi8KLWV4dGVybiBVU0hPUlQgCVhHSV9HZXRDSDcwMHgoVkJfREVWSUNFX0lORk8gKlhHSV9QciwgVVNIT1JUIHRlbXBieCk7Ci1leHRlcm4gdm9pZCAJWEdJX1NldENINzAweChWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVU0hPUlQgdGVtcGJ4KTsKLWV4dGVybiBVU0hPUlQgCVhHSV9HZXRDSDcwMXgoVkJfREVWSUNFX0lORk8gKlhHSV9QciwgVVNIT1JUIHRlbXBieCk7Ci1leHRlcm4gdm9pZCAJWEdJX1NldENINzAxeChWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVU0hPUlQgdGVtcGJ4KTsKLWV4dGVybiB2b2lkICAgICBYR0lfU2V0Q0g3MHh4QU5ET1IoVkJfREVWSUNFX0lORk8gKlhHSV9QciwgVVNIT1JUIHRlbXBheCxVU0hPUlQgdGVtcGJoKTsKLWV4dGVybiB2b2lkICAgICBYR0lfRERDMkRlbGF5KFZCX0RFVklDRV9JTkZPICpYR0lfUHIsIFVTSE9SVCBkZWxheXRpbWUpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFhHSV9HZXRDSDcwMHgoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCk7CitleHRlcm4gdm9pZCBYR0lfU2V0Q0g3MDB4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYngpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IFhHSV9HZXRDSDcwMXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCk7CitleHRlcm4gdm9pZCBYR0lfU2V0Q0g3MDF4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYngpOworZXh0ZXJuIHZvaWQgWEdJX1NldENINzB4eEFORE9SKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLAorCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYmgpOworZXh0ZXJuIHZvaWQgWEdJX0REQzJEZWxheShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwgdW5zaWduZWQgc2hvcnQgZGVsYXl0aW1lKTsKIAogLyogVFc6IFNlbnNpbmcgcm91dGluZXMgKi8KIHZvaWQgICAgICAgICAgICBYR0lfU2Vuc2UzMHgodm9pZCk7CiBpbnQgICAgICAgICAgICAgWEdJRG9TZW5zZShpbnQgdGVtcGJsLCBpbnQgdGVtcGJoLCBpbnQgdGVtcGNsLCBpbnQgdGVtcGNoKTsKIAotZXh0ZXJuIFhHSTIxX0xWRFNDYXBTdHJ1Y3QgWEdJMjFfTENEQ2FwTGlzdFsxM107CitleHRlcm4gc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QgWEdJMjFfTENEQ2FwTGlzdFsxM107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi9YR0lfbWFpbl8yNi5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMKaW5kZXggODY3MDEyYi4uOTc2YzM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSV9tYWluXzI2LmMKQEAgLTI4LDkgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi0jaW5jbHVkZSAib3NkZWYuaCIKIAogCiAjaWZuZGVmIFhHSUZCX1BBTgpAQCAtMTY0LDE2ICsxNjEsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tIEhhcmR3YXJlIEFjY2VzcyBSb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWZkZWYgTElOVVhfS0VSTkVMCiBpbnQKLVhHSWZiX21vZGVfcmF0ZV90b19kY2xvY2soVkJfREVWSUNFX0lORk8gKlhHSV9QciwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwKK1hHSWZiX21vZGVfcmF0ZV90b19kY2xvY2soc3RydWN0IHZiX2RldmljZV9pbmZvICpYR0lfUHIsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAogCQkJICB1bnNpZ25lZCBjaGFyIG1vZGVubywgdW5zaWduZWQgY2hhciByYXRlaW5kZXgpCiB7Ci0gICAgVVNIT1JUIE1vZGVObyA9IG1vZGVubzsKLSAgICBVU0hPUlQgTW9kZUlkSW5kZXggPSAwLCBDbG9ja0luZGV4ID0gMDsKLSAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8gPSBtb2Rlbm87CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXggPSAwLCBDbG9ja0luZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggPSAwOwogCi0gICAgLypVTE9ORyAgdGVtcCA9IDA7Ki8KKyAgICAvKnVuc2lnbmVkIGxvbmcgIHRlbXAgPSAwOyovCiAgICAgaW50ICAgIENsb2NrOwogICAgIFhHSV9Qci0+Uk9NQWRkciAgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZTsKICAgICBJbml0VG8zMzBQb2ludGVyKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlLCBYR0lfUHIgKSA7CkBAIC0yMDEsMTYgKzE5NywxNiBAQAogfQogCiBpbnQKLVhHSWZiX21vZGVfcmF0ZV90b19kZGF0YShWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLAorWEdJZmJfbW9kZV9yYXRlX3RvX2RkYXRhKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqWEdJX1ByLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKIAkJCSB1bnNpZ25lZCBjaGFyIG1vZGVubywgdW5zaWduZWQgY2hhciByYXRlaW5kZXgsCiAJCQkgdTMyICpsZWZ0X21hcmdpbiwgdTMyICpyaWdodF9tYXJnaW4sCiAJCQkgdTMyICp1cHBlcl9tYXJnaW4sIHUzMiAqbG93ZXJfbWFyZ2luLAogCQkJIHUzMiAqaHN5bmNfbGVuLCB1MzIgKnZzeW5jX2xlbiwKIAkJCSB1MzIgKnN5bmMsIHUzMiAqdm1vZGUpCiB7Ci0gICAgVVNIT1JUIE1vZGVObyA9IG1vZGVubzsKLSAgICBVU0hPUlQgTW9kZUlkSW5kZXggPSAwLCBpbmRleCA9IDA7Ci0gICAgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vID0gbW9kZW5vOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4ID0gMCwgaW5kZXggPSAwOworICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCA9IDA7CiAKICAgICB1bnNpZ25lZCBzaG9ydCBWUkUsIFZCRSwgVlJTLCBWQlMsIFZERSwgVlQ7CiAgICAgdW5zaWduZWQgc2hvcnQgSFJFLCBIQkUsIEhSUywgSEJTLCBIREUsIEhUOwpAQCAtMzc1LDI2ICszNzEsMTMgQEAKICAgICAgIH0KICAgICB9CiAKLSNpZiAwICAvKiBUaGF0J3MgYnVsbHNoaXQsIG9ubHkgdGhlIHJlc29sdXRpb24gbmVlZHMgdG8gYmUgc2hpZnRlZCAqLwotICAgIGlmKCgqdm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PSBGQl9WTU9ERV9JTlRFUkxBQ0VEKSB7Ci0gICAgICAgKnVwcGVyX21hcmdpbiA8PD0gMTsKLSAgICAgICAqbG93ZXJfbWFyZ2luIDw8PSAxOwotICAgICAgICp2c3luY19sZW4gPDw9IDE7Ci0gICAgfSBlbHNlIGlmKCgqdm1vZGUgJiBGQl9WTU9ERV9NQVNLKSA9PSBGQl9WTU9ERV9ET1VCTEUpIHsKLSAgICAgICAqdXBwZXJfbWFyZ2luID4+PSAxOwotICAgICAgICpsb3dlcl9tYXJnaW4gPj49IDE7Ci0gICAgICAgKnZzeW5jX2xlbiA+Pj0gMTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiAxOwogfQogCi0jZW5kaWYKIAogCiAKLXZvaWQgWEdJUmVnSW5pdChWQl9ERVZJQ0VfSU5GTyAqWEdJX1ByLCBVTE9ORyBCYXNlQWRkcikKK3ZvaWQgWEdJUmVnSW5pdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKlhHSV9QciwgdW5zaWduZWQgbG9uZyBCYXNlQWRkcikKIHsKICAgIFhHSV9Qci0+UmVsSU8gPSBCYXNlQWRkcjsKICAgIFhHSV9Qci0+UDNjNCA9IEJhc2VBZGRyICsgMHgxNDsKQEAgLTQzMiw4ICs0MTUsOCBAQAogCiAvKiAtLS0tLS0tLS0tLS0gSW50ZXJmYWNlIGZvciBpbml0ICYgbW9kZSBzd2l0Y2hpbmcgY29kZSAtLS0tLS0tLS0tLS0tICovCiAKLUJPT0xFQU4KLVhHSWZiX3F1ZXJ5X1ZHQV9jb25maWdfc3BhY2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJaHdfZXh0LAordW5zaWduZWQgY2hhcgorWEdJZmJfcXVlcnlfVkdBX2NvbmZpZ19zcGFjZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJaHdfZXh0LAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyAqdmFsdWUpCiB7CiAJc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKQEAgLTQ0NSwxMCArNDI4LDEwIEBACiAJCURQUklOVEsoIlhHSWZiOiBTZXQgb2Zmc2V0IDB4JWx4IHRvIDB4JWx4XG4iLCBvZmZzZXQsICp2YWx1ZSk7CiAKIAlpZiAoIWluaXQpIHsKLQkJaW5pdCA9IFRSVUU7CisJCWluaXQgPSAxOwogCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9YRywgeGdpX3ZpZGVvX2luZm8uY2hpcF9pZCwgcGRldik7CiAJCWlmIChwZGV2KSB7Ci0JCQl2YWxpZF9wZGV2ID0gVFJVRTsKKwkJCXZhbGlkX3BkZXYgPSAxOwogCQkJcGNpX2Rldl9wdXQocGRldik7CiAJCX0KIAl9CkBAIC00NTYsNyArNDM5LDcgQEAKIAlpZiAoIXZhbGlkX3BkZXYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlhHSWZiOiBDYW4ndCBmaW5kIFhHSSAlZCBWR0EgZGV2aWNlLlxuIiwKIAkJCQl4Z2lfdmlkZW9faW5mby5jaGlwX2lkKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoc2V0ID09IDApCkBAIC00NjQsMTAgKzQ0NywxMCBAQAogCWVsc2UKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBvZmZzZXQsICh1MzIpKCp2YWx1ZSkpOwogCi0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIDE7CiB9CiAKLS8qQk9PTEVBTiBYR0lmYl9xdWVyeV9ub3J0aF9icmlkZ2Vfc3BhY2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJaHdfZXh0LAorLyp1bnNpZ25lZCBjaGFyIFhHSWZiX3F1ZXJ5X25vcnRoX2JyaWRnZV9zcGFjZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJaHdfZXh0LAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyAqdmFsdWUpCiB7CiAJc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKQEAgLTQ3NSw3ICs0NTgsNyBAQAogCXUxNiBuYnJpZGdlX2lkID0gMDsKIAogCWlmICghaW5pdCkgewotCQlpbml0ID0gVFJVRTsKKwkJaW5pdCA9IDE7CiAJCXN3aXRjaCAoeGdpX3ZpZGVvX2luZm8uY2hpcCkgewogCQljYXNlIFhHSV81NDA6CiAJCQluYnJpZGdlX2lkID0gUENJX0RFVklDRV9JRF9YR181NDA7CkBAIC01MDIsMTMgKzQ4NSwxMyBAQAogCiAJCXBkZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TSSwgbmJyaWRnZV9pZCwgcGRldik7CiAJCWlmIChwZGV2KQotCQkJdmFsaWRfcGRldiA9IFRSVUU7CisJCQl2YWxpZF9wZGV2ID0gMTsKIAl9CiAKIAlpZiAoIXZhbGlkX3BkZXYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlhHSWZiOiBDYW4ndCBmaW5kIFhHSSAlZCBOb3J0aCBCcmlkZ2UgZGV2aWNlLlxuIiwKIAkJCQluYnJpZGdlX2lkKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoc2V0ID09IDApCkBAIC01MTYsNyArNDk5LDcgQEAKIAllbHNlCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgb2Zmc2V0LCAodTMyKSgqdmFsdWUpKTsKIAotCXJldHVybiBUUlVFOworCXJldHVybiAxOwogfQogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlcm5hbCBoZWxwZXIgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYyNyw3ICs2MTAsOCBAQAogICAgICAgICAgICAgICAgIGkgKz0gMjU7CiAgICAgICAgICAgICAgICAgai0tOwogICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgfSB3aGlsZSAoIChqPjApICYmICggayA8IChzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKFhHSTIxX0xWRFNDYXBTdHJ1Y3QpKSApICk7CisJfSB3aGlsZSAoKGogPiAwKSAmJgorCQkgKGsgPCAoc2l6ZW9mKFhHSTIxX0xDRENhcExpc3QpL3NpemVvZihzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCkpKSk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTk1NCw0NiArOTM4LDUyIEBACiAJfQogfQogCi1zdGF0aWMgQk9PTEVBTiBYR0lmYl9icmlkZ2Vpc3NsYXZlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lmYl9icmlkZ2Vpc3NsYXZlKHZvaWQpCiB7CiAgICB1bnNpZ25lZCBjaGFyIHVzU2NyYXRjaFAxXzAwOwogCi0gICBpZih4Z2lfdmlkZW9faW5mby5oYXNWQiA9PSBIQVNWQl9OT05FKSByZXR1cm4gRkFMU0U7CisgICBpZiAoeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfTk9ORSkKKwkgICByZXR1cm4gMDsKIAogICAgaW5YR0lJRFhSRUcoWEdJUEFSVDEsMHgwMCx1c1NjcmF0Y2hQMV8wMCk7Ci0gICBpZiggKHVzU2NyYXRjaFAxXzAwICYgMHg1MCkgPT0gMHgxMCkgIHsKLQkgICByZXR1cm4gVFJVRTsKLSAgIH0gZWxzZSB7Ci0gICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgIH0KKyAgIGlmICgodXNTY3JhdGNoUDFfMDAgJiAweDUwKSA9PSAweDEwKQorCSAgIHJldHVybiAxOworICAgZWxzZQorCSAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgQk9PTEVBTiBYR0lmYmNoZWNrdnJldHJhY2VjcnQxKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBYR0lmYmNoZWNrdnJldHJhY2VjcnQxKHZvaWQpCiB7CiAgICB1bnNpZ25lZCBjaGFyIHRlbXA7CiAKICAgIGluWEdJSURYUkVHKFhHSUNSLDB4MTcsdGVtcCk7Ci0gICBpZighKHRlbXAgJiAweDgwKSkgcmV0dXJuIEZBTFNFOworICAgaWYgKCEodGVtcCAmIDB4ODApKQorCSAgIHJldHVybiAwOwogCiAKICAgIGluWEdJSURYUkVHKFhHSVNSLDB4MWYsdGVtcCk7Ci0gICBpZih0ZW1wICYgMHhjMCkgcmV0dXJuIEZBTFNFOworICAgaWYgKHRlbXAgJiAweGMwKQorCSAgIHJldHVybiAwOwogCi0KLSAgIGlmKGluWEdJUkVHKFhHSUlOUFNUQVQpICYgMHgwOCkgcmV0dXJuIFRSVUU7Ci0gICBlbHNlIAkJCSAgIHJldHVybiBGQUxTRTsKKyAgIGlmIChpblhHSVJFRyhYR0lJTlBTVEFUKSAmIDB4MDgpCisJICAgcmV0dXJuIDE7CisgICBlbHNlCisJICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBCT09MRUFOIFhHSWZiY2hlY2t2cmV0cmFjZWNydDIodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIFhHSWZiY2hlY2t2cmV0cmFjZWNydDIodm9pZCkKIHsKICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKLSAgIGlmKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX05PTkUpIHJldHVybiBGQUxTRTsKKyAgIGlmICh4Z2lfdmlkZW9faW5mby5oYXNWQiA9PSBIQVNWQl9OT05FKQorCSAgIHJldHVybiAwOwogICAgaW5YR0lJRFhSRUcoWEdJUEFSVDEsIDB4MzAsIHRlbXApOwotICAgaWYodGVtcCAmIDB4MDIpIHJldHVybiBGQUxTRTsKLSAgIGVsc2UgCSAgIHJldHVybiBUUlVFOworICAgaWYgKHRlbXAgJiAweDAyKQorCSAgIHJldHVybiAwOworICAgZWxzZQorCSAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgQk9PTEVBTiBYR0lmYl9DaGVja1ZCUmV0cmFjZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgWEdJZmJfQ2hlY2tWQlJldHJhY2Uodm9pZCkKIHsKICAgIGlmKHhnaV92aWRlb19pbmZvLmRpc3Bfc3RhdGUgJiBESVNQVFlQRV9ESVNQMikgewogICAgICAgaWYoWEdJZmJfYnJpZGdlaXNzbGF2ZSgpKSB7CkBAIC0xMzUwLDExICsxMzQwLDcgQEAKIC8vCXByaW50aygiWEdJZmI6IGluc2lkZSBzZXRfcGFyXG4iKTsKICAgICAgICAgaWYoKGVyciA9IFhHSWZiX2RvX3NldF92YXIoJmluZm8tPnZhciwgMSwgaW5mbykpKQogCQlyZXR1cm4gZXJyOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxMCkKLQlYR0lmYl9nZXRfZml4KCZpbmZvLT5maXgsIGluZm8tPmN1cnJjb24sIGluZm8pOwotI2Vsc2UKIAlYR0lmYl9nZXRfZml4KCZpbmZvLT5maXgsIC0xLCBpbmZvKTsKLSNlbmRpZgogLy8JcHJpbnRrKCJYR0lmYjplbmQgb2Ygc2V0X3BhclxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTQwLDU4ICsxNTI2LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgMAotc3RhdGljIGludCBYR0lmYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKLQl1bnNpZ25lZCBsb25nIG9mZjsKLQl1MzIgbGVuLCBtbWlvX29mZjsKIAotCURFQlVHUFJOKCJpbnNpZGUgbW1hcCIpOwotCWlmKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkgIHJldHVybiAtRUlOVkFMOwotCi0Jb2ZmID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCi0Jc3RhcnQgPSAodW5zaWduZWQgbG9uZykgeGdpX3ZpZGVvX2luZm8udmlkZW9fYmFzZTsKLQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgeGdpX3ZpZGVvX2luZm8udmlkZW9fc2l6ZSk7Ci0Jc3RhcnQgJj0gUEFHRV9NQVNLOwotI2lmIDAKLQlpZiAob2ZmID49IGxlbikgewotCQlvZmYgLT0gbGVuOwotI2VuZGlmCi0JLyogQnkgSmFrZSBQYWdlOiBUcmVhdCBtbWFwIHJlcXVlc3Qgd2l0aCBvZmZzZXQgYmV5b25kIGhlYXBzdGFydAotCSAqICAgICAgICAgICAgICAgYXMgcmVxdWVzdCBmb3IgbWFwcGluZyB0aGUgbW1pbyBhcmVhCi0JICovCi0JI2lmIDEKLQltbWlvX29mZiA9IFBBR0VfQUxJR04oKHN0YXJ0ICYgflBBR0VfTUFTSykgKyB4Z2lfdmlkZW9faW5mby5oZWFwc3RhcnQpOwotCWlmKG9mZiA+PSBtbWlvX29mZikgewotCQlvZmYgLT0gbW1pb19vZmY7Ci0JCWlmKGluZm8tPnZhci5hY2NlbF9mbGFncykgcmV0dXJuIC1FSU5WQUw7Ci0KLQkJc3RhcnQgPSAodW5zaWduZWQgbG9uZykgeGdpX3ZpZGVvX2luZm8ubW1pb19iYXNlOwotCQlsZW4gPSBQQUdFX0FMSUdOKChzdGFydCAmIH5QQUdFX01BU0spICsgWEdJZmJfbW1pb19zaXplKTsKLQl9Ci0Jc3RhcnQgJj0gUEFHRV9NQVNLOwotCSNlbmRpZgotCWlmKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgKyBvZmYpID4gbGVuKQlyZXR1cm4gLUVJTlZBTDsKLQotCW9mZiArPSBzdGFydDsKLQl2bWEtPnZtX3Bnb2ZmID0gb2ZmID4+IFBBR0VfU0hJRlQ7Ci0Jdm1hLT52bV9mbGFncyB8PSBWTV9JTzsgICAvKiBieSBKYWtlIFBhZ2U7IGlzIHRoYXQgcmVhbGx5IG5lZWRlZD8gKi8KLQotI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPiAzKQotCQlwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSB8PSBfUEFHRV9QQ0Q7Ci0jZW5kaWYKLQlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgb2ZmID4+IFBBR0VfU0hJRlQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCQl2bWEtPnZtX3BhZ2VfcHJvdCkpCi0JCXJldHVybiAtRUFHQUlOOwotCi0gICAgICAgIERFQlVHUFJOKCJlbmQgb2YgbW1hcCIpOwotCXJldHVybiAwOwotfQotI2VuZGlmCiBzdGF0aWMgaW50IFhHSWZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJdTggcmVnOwpAQCAtMTYxMCwxNSArMTU0NSw4IEBACiB9CiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMTUpCiBzdGF0aWMgaW50IFhHSWZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotI2Vsc2UKLXN0YXRpYyBpbnQgWEdJZmJfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywKLQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotI2VuZGlmCi0KIHsKIAlERUJVR1BSTigiaW5zaWRlIGlvY3RsIik7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTE2ODcsNyArMTYxNSw3IEBACiAJCWJyZWFrOwogCSAgIGNhc2UgWEdJRkJfR0VUX0lORk86ICAvKiBUVzogTmV3IGZvciBjb21tdW5pY2F0aW9uIHdpdGggWCBkcml2ZXIgKi8KIAkgICAgICAgIHsKLQkJCVhHSWZiX2luZm8gKnggPSAoWEdJZmJfaW5mbyAqKWFyZzsKKwkJCXN0cnVjdCBYR0lmYl9pbmZvICp4ID0gKHN0cnVjdCBYR0lmYl9pbmZvICopYXJnOwogCiAJCQkvL3gtPlhHSWZiX2lkID0gWEdJRkJfSUQ7CiAJCQl4LT5YR0lmYl92ZXJzaW9uID0gVkVSX01BSk9SOwpAQCAtMTc4Niw5ICsxNzE0LDYgQEAKIAkuZmJfZmlsbHJlY3QgID0gZmJjb25fWEdJX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYSAgPSBmYmNvbl9YR0lfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQotCS5mYl9jdXJzb3IgICAgPSBzb2Z0X2N1cnNvciwKLSNlbmRpZgogCS5mYl9zeW5jICAgICAgPSBmYmNvbl9YR0lfc3luYywKIAkuZmJfaW9jdGwgICAgID0JWEdJZmJfaW9jdGwsCiAvLwkuZmJfbW1hcCAgICAgID0JWEdJZmJfbW1hcCwKQEAgLTIwMDgsOSArMTkzMyw5IEBACiAJCWJyZWFrOwogCSAgIGRlZmF1bHQ6CiAJCXhnaV92aWRlb19pbmZvLmhhc1ZCID0gSEFTVkJfTk9ORTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIDE7CiB9CiAKIApAQCAtMjY2NCwxMyArMjU4OSw3IEBACiBzdGF0aWMgdm9pZCBYR0lmYl9wb3N0X3NldG1vZGUodm9pZCkKIHsKIAl1OCByZWc7Ci0JQk9PTEVBTiBkb2l0ID0gVFJVRTsKLSNpZiAwCS8qIFRXOiBXcm9uZzogSXMgbm90IGluIE1NSU8gc3BhY2UsIGJ1dCBpbiBSQU0gKi8KLQkvKiBCYWNrdXAgbW9kZSBudW1iZXIgdG8gTU1JTyBzcGFjZSAqLwotCWlmKHhnaV92aWRlb19pbmZvLm1taW9fdmJhc2UpIHsKLQkgICoodm9sYXRpbGUgdTggKikoKCh1OCopeGdpX3ZpZGVvX2luZm8ubW1pb192YmFzZSkgKyAweDQ0OSkgPSAodW5zaWduZWQgY2hhcilYR0lmYl9tb2RlX25vOwotCX0KLSNlbmRpZgorCXVuc2lnbmVkIGNoYXIgZG9pdCA9IDE7CiAvKglvdXRYR0lJRFhSRUcoWEdJU1IsSU5EX1hHSV9QQVNTV09SRCxYR0lfUEFTU1dPUkQpOwogCW91dFhHSUlEWFJFRyhYR0lDUiwweDEzLDB4MDApOwogCXNldFhHSUlEWFJFRyhYR0lTUiwweDBFLDB4RjAsMHgwMSk7CkBAIC0yNjc4LDExICsyNTk3LDExIEBACiAJaWYgKHhnaV92aWRlb19pbmZvLnZpZGVvX2JwcCA9PSA4KSB7CiAJCS8qIFRXOiBXZSBjYW4ndCBzd2l0Y2ggb2ZmIENSVDEgb24gTFZEUy9DaHJvbnRlbCBpbiA4YnBwIE1vZGVzICovCiAJCWlmICgoeGdpX3ZpZGVvX2luZm8uaGFzVkIgPT0gSEFTVkJfTFZEUykgfHwgKHhnaV92aWRlb19pbmZvLmhhc1ZCID09IEhBU1ZCX0xWRFNfQ0hST05URUwpKSB7Ci0JCQlkb2l0ID0gRkFMU0U7CisJCQlkb2l0ID0gMDsKIAkJfQogCQkvKiBUVzogV2UgY2FuJ3Qgc3dpdGNoIG9mZiBDUlQxIG9uIDMwMUItREggaW4gOGJwcCBNb2RlcyBpZiB1c2luZyBMQ0QgKi8KIAkJaWYgICh4Z2lfdmlkZW9faW5mby5kaXNwX3N0YXRlICYgRElTUFRZUEVfTENEKSAgewotCSAgICAgICAgCWRvaXQgPSBGQUxTRTsKKwkJCWRvaXQgPSAwOwogCSAgICAgICAgfQogCX0KIApAQCAtMjY5MSwxNCArMjYxMCwxNSBAQAogCQlpblhHSUlEWFJFRyhYR0lQQVJUMSwgMHgwMCwgcmVnKTsKIAogCi0JCWlmKChyZWcgJiAweDUwKSA9PSAweDEwKSB7Ci0JCQlkb2l0ID0gRkFMU0U7Ci0JCX0KKwkJaWYgKChyZWcgJiAweDUwKSA9PSAweDEwKQorCQkJZG9pdCA9IDA7CiAKLQl9IGVsc2UgWEdJZmJfY3J0MW9mZiA9IDA7CisKKwl9IGVsc2UKKwkJWEdJZmJfY3J0MW9mZiA9IDA7CiAKIAlpblhHSUlEWFJFRyhYR0lDUiwgMHgxNywgcmVnKTsKLQlpZigoWEdJZmJfY3J0MW9mZikgJiYgKGRvaXQpKQorCWlmICgoWEdJZmJfY3J0MW9mZikgJiYgKGRvaXQpKQogCQlyZWcgJj0gfjB4ODA7CiAJZWxzZQogCQlyZWcgfD0gMHg4MDsKQEAgLTI5MDcsNyArMjgyNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIFZCSU9TX0JVRls2NTUzNV07CiAKLXVuc2lnbmVkIGNoYXIqIGF0dGVtcHRfbWFwX3JvbShzdHJ1Y3QgcGNpX2RldiAqZGV2LHZvaWQgKmNvcHlfYWRkcmVzcykKK3Vuc2lnbmVkIGNoYXIgKmF0dGVtcHRfbWFwX3JvbShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpjb3B5X2FkZHJlc3MpCiB7CiAgICAgdTMyIHJvbV9zaXplICAgICAgPSAwOwogICAgIHUzMiByb21fYWRkcmVzcyAgID0gMDsKQEAgLTI5NjIsMTUgKzI4ODIsOSBAQAogCiAJWEdJZmJfcmVnaXN0ZXJlZCA9IDA7CiAKLQltZW1zZXQoJlhHSWh3X2V4dCwgMCwgc2l6ZW9mKEhXX0RFVklDRV9FWFRFTlNJT04pKTsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwzKSkKKwltZW1zZXQoJlhHSWh3X2V4dCwgMCwgc2l6ZW9mKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8pKTsKIAkgIGZiX2luZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGZiX2luZm8pLCAmcGRldi0+ZGV2KTsKIAkgIGlmKCFmYl9pbmZvKSByZXR1cm4gLUVOT01FTTsKLSNlbHNlCi0JICBYR0lfZmJfaW5mbyA9IGttYWxsb2MoIHNpemVvZihzdHJ1Y3QgZmJfaW5mbyksIEdGUF9LRVJORUwpOwotCSAgaWYoIVhHSV9mYl9pbmZvKSByZXR1cm4gLUVOT01FTTsKLQkgIG1lbXNldChYR0lfZmJfaW5mbywgMCwgIHNpemVvZihzdHJ1Y3QgZmJfaW5mbykpOwotI2VuZGlmCiAKICAgCXhnaV92aWRlb19pbmZvLmNoaXBfaWQgPSBwZGV2LT5kZXZpY2U7CiAJICBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsJnhnaV92aWRlb19pbmZvLnJldmlzaW9uX2lkKTsKQEAgLTI5ODgsMTQgKzI5MDIsMTUgQEAKIAkgIHhnaV92aWRlb19pbmZvLm1taW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKIAkgIFhHSWZiX21taW9fc2l6ZSA9ICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOwogCSAgeGdpX3ZpZGVvX2luZm8udmdhX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMikgKyAweDMwOwotCSAgWEdJaHdfZXh0LnBqSU9BZGRyZXNzID0gKFBVQ0hBUil4Z2lfdmlkZW9faW5mby52Z2FfYmFzZTsKKwkgIFhHSWh3X2V4dC5waklPQWRkcmVzcyA9ICh1bnNpZ25lZCBjaGFyICopeGdpX3ZpZGVvX2luZm8udmdhX2Jhc2U7CiAJICAvL1hHSV9Qci5SZWxJTyAgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwgMTI4KSArIDB4MzA7Ci0JICBwcmludGsoIlhHSWZiOiBSZWxvY2F0ZSBJTyBhZGRyZXNzOiAlbHggWyUwOGx4XSBcbiIsICh1bnNpZ25lZCBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAyKSwgWEdJX1ByLlJlbElPKTsKKwkgIHByaW50aygiWEdJZmI6IFJlbG9jYXRlIElPIGFkZHJlc3M6ICVseCBbJTA4bHhdXG4iLAorCQkgKHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpLCBYR0lfUHIuUmVsSU8pOwogCiAJICBpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJICAgICAgICAgIHJldHVybiAtRUlPOwogCi0gICAgWEdJUmVnSW5pdCgmWEdJX1ByLCAoVUxPTkcpWEdJaHdfZXh0LnBqSU9BZGRyZXNzKTsKKyAgICBYR0lSZWdJbml0KCZYR0lfUHIsICh1bnNpZ25lZCBsb25nKVhHSWh3X2V4dC5waklPQWRkcmVzcyk7CiAKICAgICBvdXRYR0lJRFhSRUcoWEdJU1IsIElORF9YR0lfUEFTU1dPUkQsIFhHSV9QQVNTV09SRCk7CiAgICAgaW5YR0lJRFhSRUcoWEdJU1IsIElORF9YR0lfUEFTU1dPUkQsIHJlZzEpOwpAQCAtMzA1Miw3ICsyOTY3LDcgQEAKIAkJICAgY2FzZSBYRzIwOgogCQkgICBjYXNlIFhHMjE6CiAgICAgICAgICAgICAgICAgICAgY2FzZSBYRzI3OgotICAgICAgICAgICAgICAgICAgIFhHSWh3X2V4dC5iSW50ZWdyYXRlZE1NRW5hYmxlZCA9IFRSVUU7CisJCQkgICBYR0lod19leHQuYkludGVncmF0ZWRNTUVuYWJsZWQgPSAxOwogCQkJYnJlYWs7CiAKIAkJICAgZGVmYXVsdDoKQEAgLTMwODAsNyArMjk5NSw3IEBACiAJICBzdHJjcHkoWEdJaHdfZXh0LnN6VkJJT1NWZXIsICIwLjg0Iik7CiAKIAotICAgIFhHSWh3X2V4dC5wU1IgPSB2bWFsbG9jKHNpemVvZihYR0lfRFNSZWcpICogU1JfQlVGRkVSX1NJWkUpOworICAgIFhHSWh3X2V4dC5wU1IgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgWEdJX0RTUmVnKSAqIFNSX0JVRkZFUl9TSVpFKTsKIAkgIGlmIChYR0lod19leHQucFNSID09IE5VTEwpCiAJICB7CiAJCSAgICBwcmludGsoS0VSTl9FUlIgIlhHSWZiOiBGYXRhbCBlcnJvcjogQWxsb2NhdGluZyBTUlJlZyBzcGFjZSBmYWlsZWQuXG4iKTsKQEAgLTMwODgsNyArMzAwMyw3IEBACiAJICB9CiAJICBYR0lod19leHQucFNSWzBdLmpJZHggPSBYR0lod19leHQucFNSWzBdLmpWYWwgPSAweEZGOwogCi0JICBYR0lod19leHQucENSID0gdm1hbGxvYyhzaXplb2YoWEdJX0RTUmVnKSAqIENSX0JVRkZFUl9TSVpFKTsKKwkgIFhHSWh3X2V4dC5wQ1IgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgWEdJX0RTUmVnKSAqIENSX0JVRkZFUl9TSVpFKTsKIAkgIGlmIChYR0lod19leHQucENSID09IE5VTEwpCiAJICB7CiAJICAgICAgdmZyZWUoWEdJaHdfZXh0LnBTUik7CkBAIC0zMjE4LDcgKzMxMzMsNyBAQAogCQkgICAgeGdpX3ZpZGVvX2luZm8uZGlzcF9zdGF0ZSA9IERJU1BUWVBFX0xDRDsKICAgICAgICAgCSAgICBpZiAoIVhHSWZiX0dldFhHMjFMVkRTRGF0YSgpKSB7CiAJCQkgICAgaW50IG07Ci0JCQkgICAgZm9yIChtPTA7IG0gPCBzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKFhHSTIxX0xWRFNDYXBTdHJ1Y3QpOyBtKyspIHsKKwkJCSAgICBmb3IgKG0gPSAwOyBtIDwgc2l6ZW9mKFhHSTIxX0xDRENhcExpc3QpL3NpemVvZihzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCk7IG0rKykgewogCQkJCSAgICBpZiAoKFhHSTIxX0xDRENhcExpc3RbbV0uTFZEU0hERSA9PSBYR0liaW9zX21vZGVbeGdpZmJfbW9kZV9pZHhdLnhyZXMpICYmCiAJCQkJCShYR0kyMV9MQ0RDYXBMaXN0W21dLkxWRFNWREUgPT0gWEdJYmlvc19tb2RlW3hnaWZiX21vZGVfaWR4XS55cmVzKSkgewogCQkJCQkJWEdJTmV3X1NldFJlZzEoIFhHSV9Qci5QM2Q0ICwgMHgzNiwgbSkgOwpAQCAtMzM0MSwxNCArMzI1NiwxNCBAQAogCSAgICAgICAgICBpblhHSUlEWFJFRyhYR0lDUiwweDM4LHRtcCk7CiAJCSAgICAgIGlmKCh0bXAgJiAweDAzKSA9PSAweDAzKQogCQkgICAgICB7Ci0vLwkJICAgICAgICAgIFhHSV9Qci5YR0lfVXNlTENEQSA9IFRSVUU7CisvKgkJICAgICAgICAgIFhHSV9Qci5YR0lfVXNlTENEQSA9IDE7ICovCiAJCSAgICAgIH1lbHNlCiAJCSAgICAgIHsKIAkJICAgICAvLyAgQ3VycmVudGx5IG9uIExDREE/IChTb21lIG5ld2VyIEJJT1NlcyBzZXQgRDAgaW4gQ1IzNSkKIAkJICAgICAgICAgaW5YR0lJRFhSRUcoWEdJQ1IsMHgzNSx0bXApOwogCQkgICAgICAgICBpZih0bXAgJiAweDAxKQogCQkgICAgICAgICB7Ci0vLwkJICAgICAgICAgICAgICBYR0lfUHIuWEdJX1VzZUxDREEgPSBUUlVFOworLyoJCSAgICAgICAgICAgICAgWEdJX1ByLlhHSV9Vc2VMQ0RBID0gMTsgKi8KIAkJICAgICAgICAgICB9ZWxzZQogCQkgICAgICAgICAgIHsKIAkJICAgICAgICAgICAgICAgaW5YR0lJRFhSRUcoWEdJQ1IsMHgzMCx0bXApOwpAQCAtMzM1Nyw3ICszMjcyLDcgQEAKIAkJICAgICAgICAgICAgICAgICAgIGluWEdJSURYUkVHKFhHSVBBUlQxLDB4MTMsdG1wKTsKIAkJCSAgICAgICAgICAgICAgIGlmKHRtcCAmIDB4MDQpCiAJCQkgICAgICAgICAgICAgICB7Ci0vLwkJCSAgICAgICAgICAgICAgICBYR0lfUHIuWEdJX1VzZUxDREEgPSBUUlVFOworLyoJCQkgICAgICAgICAgICAgICAgWEdJX1ByLlhHSV9Vc2VMQ0RBID0gMTsgKi8KIAkJCSAgICAgICAgICAgICAgIH0KIAkJICAgICAgICAgICAgICAgfQogCQkgICAgICAgICAgIH0KQEAgLTM0NjIsMjAgKzMzNzcsNiBAQAogCiAJICAgICAgICB9CiAKLQotI2lmIDAKLSNpZmRlZiBYR0lGQl9QQU4KLQkJaWYoWEdJZmJfeXBhbikgewotCSAgICAJCWRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA9Ci0JCQkJeGdpX3ZpZGVvX2luZm8uaGVhcHN0YXJ0IC8gKGRlZmF1bHRfdmFyLnhyZXMgKiAoZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPj4gMykpOwotCSAgICAJCWlmKGRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA8PSBkZWZhdWx0X3Zhci55cmVzKSB7Ci0JICAgICAgICAJCWRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA9IGRlZmF1bHRfdmFyLnlyZXM7Ci0JICAgIAkJfQotCQl9Ci0jZW5kaWYKLSNlbmRpZgotCi0KIAkJeGdpX3ZpZGVvX2luZm8uYWNjZWwgPSAwOwogCQlpZihYR0lmYl9hY2NlbCkgewogCQkgICB4Z2lfdmlkZW9faW5mby5hY2NlbCA9IC0xOwpAQCAtMzUxMSw3ICszNDEyLDggQEAKIAogCQlYR0lmYl9yZWdpc3RlcmVkID0gMTsKIAotCQlwcmludGsoS0VSTl9JTkZPICJYR0lmYjogSW5zdGFsbGVkIFhHSUZCX0dFVF9JTkZPIGlvY3RsICgleClcbiIsIFhHSUZCX0dFVF9JTkZPKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiWEdJZmI6IEluc3RhbGxlZCBYR0lGQl9HRVRfSU5GTyBpb2N0bCAoJWx4KVxuIiwKKwkJICAgICAgIFhHSUZCX0dFVF9JTkZPKTsKIAogLyoJCXByaW50ayhLRVJOX0lORk8gIlhHSWZiOiAyRCBhY2NlbGVyYXRpb24gaXMgJXMsIHNjcm9sbGluZyBtb2RlICVzXG4iLAogCQkgICAgIFhHSWZiX2FjY2VsID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKQEAgLTM1MzgsMTEgKzM0NDAsNyBAQAogCS8qIFVucmVnaXN0ZXIgdGhlIGZyYW1lYnVmZmVyICovCiAvLwlpZih4Z2lfdmlkZW9faW5mby5yZWdpc3RlcmVkKSB7CiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJfaW5mbyk7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMykpCiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJfaW5mbyk7Ci0jZWxzZQotCQlrZnJlZShmYl9pbmZvKTsKLSNlbmRpZgogLy8JfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwpAQCAtMzU1OCw3ICszNDU2LDYgQEAKIAogWEdJSU5JVFNUQVRJQyBpbnQgX19pbml0IHhnaWZiX2luaXQodm9pZCkKIHsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOCkKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9uID0gTlVMTDsKIApAQCAtMzU2NiwxNSArMzQ2MywxMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlYR0lmYl9zZXR1cChvcHRpb24pOwogI2VuZGlmCi0jZW5kaWYKIAlyZXR1cm4ocGNpX3JlZ2lzdGVyX2RyaXZlcigmeGdpZmJfZHJpdmVyKSk7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsOCkKKwogI2lmbmRlZiBNT0RVTEUKIG1vZHVsZV9pbml0KHhnaWZiX2luaXQpOwogI2VuZGlmCi0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgTU9EVUxFICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL1hHSWZiLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaAppbmRleCA0MWJmMTYzLi5lZjg2YTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvWEdJZmIuaApAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBYR0lGQl9JRCAgICAgICAgICAweDUzNDk1MzQ2ICAgIC8qIElkZW50aWZ5IG15c2VsZiB3aXRoICdYR0lGJyAqLwogI2VuZGlmCiAKLXR5cGVkZWYgZW51bSBfWEdJX0NISVBfVFlQRSB7CitlbnVtIFhHSV9DSElQX1RZUEUgewogICAgIFhHSV9WR0FMZWdhY3kgPSAwLAogICAgIFhHSV8zMDAsCiAgICAgWEdJXzYzMCwKQEAgLTUzLDkgKzUzLDkgQEAKICAgICBYRzIxLAogICAgIFhHMjcsCiAgICAgTUFYX1hHSV9DSElQCi19IFhHSV9DSElQX1RZUEU7Cit9OwogCi10eXBlZGVmIGVudW0gX1RWVFlQRSB7CitlbnVtIHhnaV90dnR5cGUgewogCVRWTU9ERV9OVFNDID0gMCwKIAlUVk1PREVfUEFMLAogCVRWTU9ERV9ISVZJU0lPTiwKQEAgLTYzLDEzICs2MywxMSBAQAogICAgIAlUVlRZUEVfUEFMTiwJLy8gdmlja2lAMDMwMjI2CiAgICAgCVRWVFlQRV9OVFNDSiwJLy8gdmlja2lAMDMwMjI2CiAJVFZNT0RFX1RPVEFMCi19IFhHSV9UVl9UWVBFOworfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfWEdJRkJfSU5GTyBYR0lmYl9pbmZvOwotc3RydWN0IF9YR0lGQl9JTkZPIHsKLQotdW5zaWduZWQgbG9uZyBYR0lmYl9pZDsKK3N0cnVjdCBYR0lmYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIFhHSWZiX2lkOwogIAlpbnQgICAgY2hpcF9pZDsJCQkvKiBQQ0kgSUQgb2YgZGV0ZWN0ZWQgY2hpcCAqLwogCWludCAgICBtZW1vcnk7CQkJLyogdmlkZW8gbWVtb3J5IGluIEtCIHdoaWNoIFhHSWZiIG1hbmFnZXMgKi8KIAlpbnQgICAgaGVhcHN0YXJ0OyAgICAgICAgICAgICAgIC8qIGhlYXAgc3RhcnQgKD0gWEdJZmIgIm1lbSIgYXJndW1lbnQpIGluIEtCICovCkBAIC05Nyw3ICs5NSw3IEBACiAKIAogCi10eXBlZGVmIGVudW0gX1RWUExVR1RZUEUgewkvLyB2aWNraUAwMzAyMjYKK2VudW0geGdpX3R2X3BsdWcgewkvKiB2aWNraUAwMzAyMjYgKi8KIC8vCVRWUExVR19MZWdhY3kgPSAwLAogLy8JVFZQTFVHX0NPTVBPU0lURSwKIC8vCVRWUExVR19TVklERU8sCkBAIC0xMTMsNyArMTExLDcgQEAKICAgICAJVFZQTFVHX1lQQlBSXzc1MFAgPSA3LAogICAgIAlUVlBMVUdfWVBCUFJfMTA4MGkgPSA4LAogCVRWUExVR19UT1RBTAotfSBYR0lfVFZfUExVRzsKK307CiAKIAogc3RydWN0IG1vZGVfaW5mbyB7CkBAIC0xMzIsMTAgKzEzMCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwogCXVuc2lnbmVkIGludCAgbWVtX3NpemU7CiAJdW5zaWduZWQgbG9uZyBkaXNwX3N0YXRlOwotCVhHSV9DSElQX1RZUEUgY2hpcDsKKwllbnVtIFhHSV9DSElQX1RZUEUgY2hpcDsKIAl1bnNpZ25lZCBjaGFyIGhhc1ZCOwotCVhHSV9UVl9UWVBFIFRWX3R5cGU7Ci0JWEdJX1RWX1BMVUcgVFZfcGx1ZzsKKwllbnVtIHhnaV90dnR5cGUgVFZfdHlwZTsKKwllbnVtIHhnaV90dl9wbHVnIFRWX3BsdWc7CiAJdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwogCWNoYXIgcmVzZXJ2ZWRbMjU2XTsKIH07CkBAIC0xODQsNyArMTgyLDcgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciBUVl90eXBlOwogICAgICAgICB1bnNpZ25lZCBjaGFyIFRWX3BsdWc7CiAKLSAgICAgICAgWEdJX0NISVBfVFlQRSBjaGlwOworCWVudW0gWEdJX0NISVBfVFlQRSBjaGlwOwogICAgICAgICB1bnNpZ25lZCBjaGFyIHJldmlzaW9uX2lkOwogCiAgICAgICAgIHVuc2lnbmVkIHNob3J0IERzdENvbG9yOwpAQCAtMjA3LDkgKzIwNSw0IEBACiAKIGV4dGVybiBzdHJ1Y3QgdmlkZW9faW5mbyB4Z2lfdmlkZW9faW5mbzsKIAotI2lmZGVmIF9fS0VSTkVMX18KLS8vZXh0ZXJuIHZvaWQgeGdpX21hbGxvYyhzdHJ1Y3QgeGdpX21lbXJlcSAqcmVxKTsKLWV4dGVybiB2b2lkIHhnaV9mcmVlKHVuc2lnbmVkIGxvbmcgYmFzZSk7Ci1leHRlcm4gdm9pZCB4Z2lfZGlzcGluZm8oc3RydWN0IGFwX2RhdGEgKnJlYyk7Ci0jZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL29zZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvb3NkZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJjN2QzYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvb3NkZWYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0jaWZuZGVmIF9PU0RFRl9IXwotI2RlZmluZSBfT1NERUZfSF8KLQotLyogI2RlZmluZSBXSU5DRV9IRUFERVIqLwotLyojZGVmaW5lIFdJTjIwMDAqLwotLyogI2RlZmluZSBUQyAqLwotI2RlZmluZSBMSU5VWF9LRVJORUwKLS8qICNkZWZpbmUgTElOVVhfWEY4NiAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBMSU5VWF9LRVJORUwKLS8vI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2VuZGlmCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgVEMKLSNlbmRpZgotI2lmZGVmIFdJTjIwMDAKLSNlbmRpZgotI2lmZGVmIFdJTkNFX0hFQURFUgotI2VuZGlmCi0jaWZkZWYgTElOVVhfWEY4NgotI2RlZmluZSBMSU5VWAotI2VuZGlmCi0jaWZkZWYgTElOVVhfS0VSTkVMCi0jZGVmaW5lIExJTlVYCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgVEMKLSNkZWZpbmUgWEdJX1NldE1lbW9yeShNZW1vcnlBZGRyZXNzLE1lbW9yeVNpemUsdmFsdWUpIG1lbXNldChNZW1vcnlBZGRyZXNzLCB2YWx1ZSwgTWVtb3J5U2l6ZSk7Ci0jZW5kaWYKLSNpZmRlZiBXSU4yMDAwCi0jZGVmaW5lIFhHSV9TZXRNZW1vcnkoTWVtb3J5QWRkcmVzcyxNZW1vcnlTaXplLHZhbHVlKSBNZW1GaWxsKChQVk9JRCkgTWVtb3J5QWRkcmVzcywoVUxPTkcpIE1lbW9yeVNpemUsKFVDSEFSKSB2YWx1ZSk7Ci0jZW5kaWYKLSNpZmRlZiBXSU5DRV9IRUFERVIKLSNkZWZpbmUgWEdJX1NldE1lbW9yeShNZW1vcnlBZGRyZXNzLE1lbW9yeVNpemUsdmFsdWUpIG1lbXNldChNZW1vcnlBZGRyZXNzLCB2YWx1ZSwgTWVtb3J5U2l6ZSk7Ci0jZW5kaWYKLSNpZmRlZiBMSU5VWF9YRjg2Ci0jZGVmaW5lIFhHSV9TZXRNZW1vcnkoTWVtb3J5QWRkcmVzcyxNZW1vcnlTaXplLHZhbHVlKSBtZW1zZXQoTWVtb3J5QWRkcmVzcywgdmFsdWUsIE1lbW9yeVNpemUpCi0jZW5kaWYKLSNpZmRlZiBMSU5VWF9LRVJORUwKLSNkZWZpbmUgWEdJX1NldE1lbW9yeShNZW1vcnlBZGRyZXNzLE1lbW9yeVNpemUsdmFsdWUpIG1lbXNldChNZW1vcnlBZGRyZXNzLCB2YWx1ZSwgTWVtb3J5U2l6ZSkKLSNlbmRpZgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgVEMKLSNkZWZpbmUgWEdJX01lbW9yeUNvcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkgbWVtbW92ZShEZXN0aW5hdGlvbiwgU29ydWNlLCBMZW5ndGgpOwotI2VuZGlmCi0jaWZkZWYgV0lOMjAwMAotI2RlZmluZSBYR0lfTWVtb3J5Q29weShEZXN0aW5hdGlvbixTb3J1Y2UsTGVuZ3RoKSAgLypWaWRlb1BvcnRNb3ZlTWVtb3J5KChQVUNIQVIpRGVzdGluYXRpb24gLCBTb3J1Y2UsbGVuZ3RoKTsqLwotI2VuZGlmCi0jaWZkZWYgV0lOQ0VfSEVBREVSCi0jZGVmaW5lIFhHSV9NZW1vcnlDb3B5KERlc3RpbmF0aW9uLFNvcnVjZSxMZW5ndGgpIG1lbW1vdmUoRGVzdGluYXRpb24sIFNvcnVjZSwgTGVuZ3RoKTsKLSNlbmRpZgotI2lmZGVmIExJTlVYX1hGODYKLSNkZWZpbmUgWEdJX01lbW9yeUNvcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkgbWVtY3B5KERlc3RpbmF0aW9uLFNvcnVjZSxMZW5ndGgpCi0jZW5kaWYKLSNpZmRlZiBMSU5VWF9LRVJORUwKLSNkZWZpbmUgWEdJX01lbW9yeUNvcHkoRGVzdGluYXRpb24sU29ydWNlLExlbmd0aCkgbWVtY3B5KERlc3RpbmF0aW9uLFNvcnVjZSxMZW5ndGgpCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBPdXRQb3J0Qnl0ZQotI3VuZGVmIE91dFBvcnRCeXRlCi0jZW5kaWYgLyogT3V0UG9ydEJ5dGUgKi8KLQotI2lmZGVmIE91dFBvcnRXb3JkCi0jdW5kZWYgT3V0UG9ydFdvcmQKLSNlbmRpZiAvKiBPdXRQb3J0V29yZCAqLwotCi0jaWZkZWYgT3V0UG9ydExvbmcKLSN1bmRlZiBPdXRQb3J0TG9uZwotI2VuZGlmIC8qIE91dFBvcnRMb25nICovCi0KLSNpZmRlZiBJblBvcnRCeXRlCi0jdW5kZWYgSW5Qb3J0Qnl0ZQotI2VuZGlmIC8qIEluUG9ydEJ5dGUgKi8KLQotI2lmZGVmIEluUG9ydFdvcmQKLSN1bmRlZiBJblBvcnRXb3JkCi0jZW5kaWYgLyogSW5Qb3J0V29yZCAqLwotCi0jaWZkZWYgSW5Qb3J0TG9uZwotI3VuZGVmIEluUG9ydExvbmcKLSNlbmRpZiAvKiBJblBvcnRMb25nICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFRDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIFRDCi0jZGVmaW5lIE91dFBvcnRCeXRlKHAsdikgb3V0cCgodW5zaWduZWQgc2hvcnQpKHApLCh1bnNpZ25lZCBjaGFyKSh2KSkKLSNkZWZpbmUgT3V0UG9ydFdvcmQocCx2KSBvdXRwKCh1bnNpZ25lZCBzaG9ydCkocCksKHVuc2lnbmVkIHNob3J0KSh2KSkKLSNkZWZpbmUgT3V0UG9ydExvbmcocCx2KSBvdXRwKCh1bnNpZ25lZCBzaG9ydCkocCksKHVuc2lnbmVkIGxvbmcpKHYpKQotI2RlZmluZSBJblBvcnRCeXRlKHApICAgIGlucCgodW5zaWduZWQgc2hvcnQpKHApKQotI2RlZmluZSBJblBvcnRXb3JkKHApICAgIGlucCgodW5zaWduZWQgc2hvcnQpKHApKQotI2RlZmluZSBJblBvcnRMb25nKHApICAgICgoaW5wKCh1bnNpZ25lZCBzaG9ydCkocCsyKSk8PDE2KSB8IGlucCgodW5zaWduZWQgc2hvcnQpKHApKSkKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBMSU5VWCBYRjg2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBMSU5VWF9YRjg2Ci0jZGVmaW5lIE91dFBvcnRCeXRlKHAsdikgb3V0YigoQ0FSRDE2KShwKSwoQ0FSRDgpKHYpKQotI2RlZmluZSBPdXRQb3J0V29yZChwLHYpIG91dHcoKENBUkQxNikocCksKENBUkQxNikodikpCi0jZGVmaW5lIE91dFBvcnRMb25nKHAsdikgb3V0bCgoQ0FSRDE2KShwKSwoQ0FSRDMyKSh2KSkKLSNkZWZpbmUgSW5Qb3J0Qnl0ZShwKSAgICBpbmIoKENBUkQxNikocCkpCi0jZGVmaW5lIEluUG9ydFdvcmQocCkgICAgaW53KChDQVJEMTYpKHApKQotI2RlZmluZSBJblBvcnRMb25nKHApICAgIGlubCgoQ0FSRDE2KShwKSkKLSNlbmRpZgotCi0jaWZkZWYgTElOVVhfS0VSTkVMCi0jZGVmaW5lIE91dFBvcnRCeXRlKHAsdikgb3V0YigodTgpKHYpLChwKSkKLSNkZWZpbmUgT3V0UG9ydFdvcmQocCx2KSBvdXR3KCh1MTYpKHYpLChwKSkKLSNkZWZpbmUgT3V0UG9ydExvbmcocCx2KSBvdXRsKCh1MzIpKHYpLChwKSkKLSNkZWZpbmUgSW5Qb3J0Qnl0ZShwKSAgICBpbmIocCkKLSNkZWZpbmUgSW5Qb3J0V29yZChwKSAgICBpbncocCkKLSNkZWZpbmUgSW5Qb3J0TG9uZyhwKSAgICBpbmwocCkKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBXSU4gMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZmRlZiBXSU4yMDAwCi0jZGVmaW5lIE91dFBvcnRCeXRlKHAsdikgVmlkZW9Qb3J0V3JpdGVQb3J0VWNoYXIgKChQVUNIQVIpIChwKSwgKFVDSEFSKSAodikpCi0jZGVmaW5lIE91dFBvcnRXb3JkKHAsdikgVmlkZW9Qb3J0V3JpdGVQb3J0VXNob3J0KChQVVNIT1JUKSAocCksIChVU0hPUlQpICh2KSkKLSNkZWZpbmUgT3V0UG9ydExvbmcocCx2KSBWaWRlb1BvcnRXcml0ZVBvcnRVbG9uZyAoKFBVTE9ORykgKHApLCAoVUxPTkcpICh2KSkKLSNkZWZpbmUgSW5Qb3J0Qnl0ZShwKSAgICBWaWRlb1BvcnRSZWFkUG9ydFVjaGFyICAoKFBVQ0hBUikgKHApKQotI2RlZmluZSBJblBvcnRXb3JkKHApICAgIFZpZGVvUG9ydFJlYWRQb3J0VXNob3J0ICgoUFVTSE9SVCkgKHApKQotI2RlZmluZSBJblBvcnRMb25nKHApICAgIFZpZGVvUG9ydFJlYWRQb3J0VWxvbmcgICgoUFVMT05HKSAocCkpCi0jZW5kaWYKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBXSU4gQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZkZWYgV0lOQ0VfSEVBREVSCi0jZGVmaW5lIE91dFBvcnRCeXRlKHAsdikgV1JJVEVfUE9SVF9VQ0hBUiAoKFBVQ0hBUikgKHApLCAoVUNIQVIpICh2KSkKLSNkZWZpbmUgT3V0UG9ydFdvcmQocCx2KSBXUklURV9QT1JUX1VTSE9SVCgoUFVTSE9SVCkgKHApLCAoVVNIT1JUKSAodikpCi0jZGVmaW5lIE91dFBvcnRMb25nKHAsdikgV1JJVEVfUE9SVF9VTE9ORyAoKFBVTE9ORykgKHApLCAoVUxPTkcpICh2KSkKLSNkZWZpbmUgSW5Qb3J0Qnl0ZShwKSAgICBSRUFEX1BPUlRfVUNIQVIgICgoUFVDSEFSKSAocCkpCi0jZGVmaW5lIEluUG9ydFdvcmQocCkgICAgUkVBRF9QT1JUX1VTSE9SVCAoKFBVU0hPUlQpIChwKSkKLSNkZWZpbmUgSW5Qb3J0TG9uZyhwKSAgICBSRUFEX1BPUlRfVUxPTkcgICgoUFVMT05HKSAocCkpCi0jZW5kaWYKLSNlbmRpZiAvLyBfT1NERUZfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9kZWYuaAppbmRleCAxN2E3YWRhLi40ZGUxODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2RlZi5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBOZXdTY3JhdGNoCiAjZW5kaWYKIC8qIHNoYW1wb28gKi8KLSNpZmRlZiBMSU5VWF9LRVJORUwKKwogI2RlZmluZSBTRVFfQUREUkVTU19QT1JUCSAgMHgwMDE0CiAjZGVmaW5lIFNFUV9EQVRBX1BPUlQJCSAgMHgwMDE1CiAjZGVmaW5lIE1JU0NfT1VUUFVUX1JFR19SRUFEX1BPUlQgMHgwMDFDCkBAIC0xNyw3ICsxNyw3IEBACiAjZGVmaW5lIENSVENfQUREUkVTU19QT1JUX0NPTE9SICAgMHgwMDI0CiAjZGVmaW5lIFZJREVPX1NVQlNZU1RFTV9FTkFCTEVfUE9SVCAweDAwMTMKICNkZWZpbmUgUENJX0NPTU1BTkQJCTB4MDQKLSNlbmRpZgorCiAvKiB+c2hhbXBvbyAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuYyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuYwppbmRleCA0OWIzOWVlLi4xZWNmOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5jCkBAIC0xLDQwICsxLDcgQEAKLSNpbmNsdWRlICJvc2RlZi5oIgotCi0KLQotCi0jaWZkZWYgV0lOMjAwMAotCi0jaW5jbHVkZSA8ZGRlcnJvci5oPgotI2luY2x1ZGUgPGRldmlvY3RsLmg+Ci0jaW5jbHVkZSA8bWluaXBvcnQuaD4KLSNpbmNsdWRlIDxudGRkdmRlby5oPgotI2luY2x1ZGUgPHZpZGVvLmg+Ci0jaW5jbHVkZSAieGdpdi5oIgotI2luY2x1ZGUgImRkX2kyYy5oIgotI2luY2x1ZGUgInRvb2xzLmgiCi0jZW5kaWYgLyogV0lOMjAwMCAqLwotCi0jaWZkZWYgTElOVVhfWEY4NgotI2luY2x1ZGUgInhmODYuaCIKLSNpbmNsdWRlICJ4Zjg2UGNpSW5mby5oIgotI2luY2x1ZGUgInhnaS5oIgotI2luY2x1ZGUgInhnaV9yZWdzLmgiCi0jZW5kaWYKLQotI2lmZGVmIExJTlVYX0tFUk5FTAogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgIlhHSWZiLmgiCi0vKiNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0jaW5jbHVkZSA8dmlkZW8vWEdJZmIuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bGludXgvWEdJZmIuaD4KLSNlbmRpZiovCi0jZW5kaWYKLQotCiAKICNpbmNsdWRlICJ2Yl9kZWYuaCIKICNpbmNsdWRlICJ2Z2F0eXBlcy5oIgpAQCAtNDIsNDMgKzksMzMgQEAKICNpbmNsdWRlICJ2Yl91dGlsLmgiCiAjaW5jbHVkZSAidmJfc2V0bW9kZS5oIgogI2luY2x1ZGUgInZiX2V4dC5oIgotZXh0ZXJuICAgVUNIQVIgWEdJMzMwX1NvZnRTZXR0aW5nOwotZXh0ZXJuICAgVUNIQVIgWEdJMzMwX091dHB1dFNlbGVjdDsKLWV4dGVybiAgIFVTSE9SVCBYR0kzMzBfUkdCU2Vuc2VEYXRhMjsKLWV4dGVybiAgIFVTSE9SVCBYR0kzMzBfWUNTZW5zZURhdGEyOwotZXh0ZXJuICAgVVNIT1JUIFhHSTMzMF9WaWRlb1NlbnNlRGF0YTI7Ci0jaWZkZWYgV0lOMjAwMAotZXh0ZXJuICAgVUNIQVIgU2Vuc2VDSFRWKFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFKTsgICAgICAgLyogMjAwNy8wNS8xNyBCaWxseSAqLwotI2VuZGlmCi12b2lkICAgICBYR0lfR2V0U2Vuc2VTdGF0dXMoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotQk9PTEVBTiAgWEdJTmV3X0dldFBhbmVsSUQoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJTmV3X1NlbnNlTENEKFBYR0lfSFdfREVWSUNFX0lORk8sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJTmV3X0dldExDREREQ0luZm8oUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIFhHSVNldERQTVMoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUgLCBVTE9ORyBWRVNBX1BPV0VSX1NUQVRFICkgOwotQk9PTEVBTiAgWEdJTmV3X0JyaWRnZUlzRW5hYmxlKFBYR0lfSFdfREVWSUNFX0lORk8sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLUJPT0xFQU4gIFhHSU5ld19TZW5zZShVU0hPUlQgdGVtcGJ4LFVTSE9SVCB0ZW1wY3gsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSU5ld19TZW5zZUhpVFYoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApIDsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgWEdJMzMwX1NvZnRTZXR0aW5nOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciBYR0kzMzBfT3V0cHV0U2VsZWN0OworZXh0ZXJuICAgdW5zaWduZWQgc2hvcnQgWEdJMzMwX1JHQlNlbnNlRGF0YTI7CitleHRlcm4gICB1bnNpZ25lZCBzaG9ydCBYR0kzMzBfWUNTZW5zZURhdGEyOworZXh0ZXJuICAgdW5zaWduZWQgc2hvcnQgWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMjsKK3ZvaWQgICAgIFhHSV9HZXRTZW5zZVN0YXR1cyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSU5ld19HZXRQYW5lbElEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU2Vuc2VMQ0Qoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRMQ0RERENJbmZvKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCBYR0lTZXREUE1TKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLAorCQl1bnNpZ25lZCBsb25nIFZFU0FfUE9XRVJfU1RBVEUpOwordW5zaWduZWQgY2hhciBYR0lOZXdfQnJpZGdlSXNFbmFibGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciBYR0lOZXdfU2Vuc2UodW5zaWduZWQgc2hvcnQgdGVtcGJ4LCB1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X1NlbnNlSGlUVihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAlEeW5hbWljIFNlbnNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkIFhHSV9XYWl0RGlzcGxheSh2b2lkKTsKLUJPT0xFQU4gWEdJX0lzMzAxQyhQVkJfREVWSUNFX0lORk8pOwotQk9PTEVBTiBYR0lfSXMzMDFMVihQVkJfREVWSUNFX0lORk8pOwordW5zaWduZWQgY2hhciBYR0lfSXMzMDFDKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK3Vuc2lnbmVkIGNoYXIgWEdJX0lzMzAxTFYoc3RydWN0IHZiX2RldmljZV9pbmZvICopOwogCi0jaWZkZWYgV0lOMjAwMAotVUNIQVIgWEdJX1NlbnNlTENEKFBIV19ERVZJQ0VfRVhURU5TSU9OLCBQVkJfREVWSUNFX0lORk8pOwotVUNIQVIgWEdJX0dldExDREREQ0luZm8oUEhXX0RFVklDRV9FWFRFTlNJT04sUFZCX0RFVklDRV9JTkZPKTsKLQotZXh0ZXJuIEJPT0wgYkdldERkY0luZm8oCi1QSFdfREVWSUNFX0VYVEVOU0lPTiAgcEhXREUsCi1VTE9ORyAgICAgICAgICAgICAgICAgdWxXaGljaE9uZSwKLVBVQ0hBUiAgICAgICAgICAgICAgICBwalF1ZXJ5QnVmZmVyLAotVUxPTkcgICAgICAgICAgICAgICAgIHVsQnVmZmVyU2l6ZQotICAgKTsKLQotI2VuZGlmCiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC04Nyw5ICs0NCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSU5ld19JczMwMUIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0lzMzAxQihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGZsYWcgOworICAgIHVuc2lnbmVkIHNob3J0IGZsYWcgOwogCiAgICAgZmxhZyA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDAxICkgOwogCkBAIC0xMDUsNyArNjIsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfSXMzMDFDKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9JczMwMUMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGlmICggKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwMSApICYgMHhGMCApID09IDB4QzAgKQogICAgICAgICByZXR1cm4oIDEgKSA7CkBAIC0xMjYsNyArODMsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfSXMzMDFMViggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfSXMzMDFMVihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwMSApID49IDB4RDAgKQogICAgIHsKQEAgLTE0NSw5ICsxMDIsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJTmV3X1NlbnNlKCAgVVNIT1JUIHRlbXBieCAsIFVTSE9SVCB0ZW1wY3gsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X1NlbnNlKHVuc2lnbmVkIHNob3J0IHRlbXBieCwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwgaSAsIHRlbXBjaCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCwgaSwgdGVtcGNoOwogCiAgICAgdGVtcCA9IHRlbXBieCAmIDB4RkYgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDExICwgdGVtcCApIDsKQEAgLTE2OSwyODQgKzEyOCw2IEBACiAgICAgICAgIHJldHVybiggMCApIDsKIH0KIAotI2lmZGVmIFdJTjIwMDAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb24gOiBYR0lfU2Vuc2VMQ0QgKi8KLS8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6ICovCi0vKiBEZXNjcmlwdGlvbiA6ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSV9TZW5zZUxDRCggUEhXX0RFVklDRV9FWFRFTlNJT04gcEhXREUsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQotewotICAgIFVTSE9SVCB0ZW1wYXggLCB0ZW1wYnggLCB0ZW1wY3ggOwotICAgIFVDSEFSIFNvZnRTZXR0aW5nID0gWEdJMzMwX1NvZnRTZXR0aW5nIDsKLQotICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgKCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWICkgKQotICAgICAgICByZXR1cm4oIDEgKSA7Ci0KLQotICAgIGlmICggU29mdFNldHRpbmcgJiBIb3RQbHVnRnVuY3Rpb24gKQkvKiBIb3QgUGx1ZyBEZXRlY3Rpb24gKi8KLSAgICB7Ci0gICAgICAgIFhHSU5ld19TZXRSZWdBTkQoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MEYgLCAweDNGICkgOwotICAgICAgICB0ZW1wYnggPSAwIDsKLSAgICAgICAgdGVtcGN4ID0gMHg5MDEwIDsKLSAgICAgICAgaWYgKCBYR0lOZXdfU2Vuc2UoIHRlbXBieCAsIHRlbXBjeCwgcFZCSW5mbyApICkKLSAgICAgICAgICAgIHJldHVybiggMSApIDsKLQotICAgICAgICByZXR1cm4oIDAgKSA7Ci0gICAgfQotICAgIGVsc2UJLyogR2V0IExDRCBJbmZvIGZyb20gRURJRCAqLwotICAgICAgICByZXR1cm4oWEdJX0dldExDREREQ0luZm8ocEhXREUsIHBWQkluZm8pKTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEZ1bmN0aW9uIDogWEdJX0dldExDREREQ0luZm8gKi8KLS8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6ICovCi0vKiBEZXNjcmlwdGlvbiA6ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSV9HZXRMQ0RERENJbmZvKCBQSFdfREVWSUNFX0VYVEVOU0lPTiBwSFdERSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQotewotICAgIFVDSEFSIHRlbXBhaCAsIHRlbXBibCAsIHRlbXBiaCA7Ci0gICAgVVNIT1JUIHRlbXBieCAsIHRlbXAgOwotICAgIFVDSEFSIHBqRURJREJ1ZlsgMjU2IF0gOwotICAgIFVMT05HIHVsQnVmZmVyU2l6ZSA9IDI1NiA7Ci0gICAgVUNIQVIgYk1BU0tfT1VUUFVUU1RBVEVfQ1JUMkxDRCA9IDIgOyAvKiAwNDIzIHNoYW1wb28gKi8KLQotICAgIGJHZXREZGNJbmZvKCBwSFdERSAsIE1BU0tfT1VUUFVUU1RBVEVfQ1JUMkxDRCAsIHBqRURJREJ1ZiAsIHVsQnVmZmVyU2l6ZSApIDsKLSAgICBpZiAoICggKiggKCBQVUxPTkcgKXBqRURJREJ1ZiApID09IDB4RkZGRkZGMDAgKSAmJiAoICooICggUFVMT05HICkoIHBqRURJREJ1ZiArIDQgKSApID09IDB4MDBGRkZGRkYgKSApCi0gICAgewotICAgICAgICB0ZW1wYWggPSBQYW5lbDEwMjR4NzY4IDsKLSAgICAgICAgdGVtcGJsPSggKiggcGpFRElEQnVmICsgMHgzQSApICkgJiAweGYwIDsKLQotICAgICAgICBpZiAoIHRlbXBibCAhPSAweDQwICkKLSAgICAgICAgewotICAgICAgICAgICAgdGVtcGFoID0gUGFuZWwxNjAweDEyMDAgOwotICAgICAgICAgICAgaWYgKCB0ZW1wYmwgIT0gMHg2MCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGVtcGFoID0gUGFuZWwxMjgweDEwMjQgOwotICAgICAgICAgICAgICAgIHRlbXBiaCA9ICggKiggcGpFRElEQnVmICsgMHgzQiApICkgOwotICAgICAgICAgICAgICAgIGlmICggdGVtcGJoICE9IDB4MDAgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcGFoID0gUGFuZWwxMjgweDk2MCA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdGVtcGJoICE9IDB4MEMwICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGJ4ID0gKCAoICooIHBqRURJREJ1ZiArIDB4MjQgKSApIDw8IDggKSB8ICggKiggcGpFRElEQnVmICsgMHgyMyApICkgOwotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGFoID0gUGFuZWwxMjgweDEwMjQgOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCB0ZW1wYnggJiAweDAxMDAgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGFoID0gUGFuZWwxMDI0eDc2OCA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCB0ZW1wYnggJiAweDBFMDAgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wYWggPSBQYW5lbDEyODB4MTAyNCA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCB0ZW1wYnggJiAweDAwRkYgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gU2NhbGluZ0xDRCA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlAzZDQgLCAweDM3ICwgdGVtcCApIDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDM2ICwgKCB+MHgwNyApICwgdGVtcGFoICkgOwotICAgICAgICB0ZW1wYWggPSAoICggKiggcGpFRElEQnVmICsgMHg0NyApICkgJiAweDA2ICkgOwkJLyogUG9sYXJpdHkgKi8KLSAgICAgICAgdGVtcGFoID0gKCB0ZW1wYWggXiAweDA2ICkgPDwgNCA7Ci0gICAgICAgIHRlbXBhaCB8PSBMQ0RTeW5jIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNyAsICggfkxDRFN5bmNCaXQgKSAsIHRlbXBhaCApIDsKLSAgICAgICAgdGVtcGJoPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MzYgKSA7Ci0gICAgICAgIHRlbXBiaCAmPSAweDA3IDsKLSAgICAgICAgaWYgKCB0ZW1wYmggPT0gUGFuZWwxMjgweDk2MCApCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNyAsIDB4MEUgKSA7Ci0gICAgfQotICAgIGVsc2UgaWYgKCAqcGpFRElEQnVmID09IDB4MjAgKQotICAgIHsKLSAgICAgICAgdGVtcGFoID0gUGFuZWwxMDI0eDc2OCA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4MzYgLCAoIH4weDA3ICkgLCB0ZW1wYWggKSA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiggMCApIDsKLSAgICB9Ci0KLSAgICByZXR1cm4oIDEgKSA7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbiA6IFhHSV9EeVNlbnNlICovCi0vKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiAqLwotLyogRGVzY3JpcHRpb24gOiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9EeVNlbnNlKCBQSFdfREVWSUNFX0VYVEVOU0lPTiBwSFdERSAsIFBVQ0hBUiB1akNvbm5lY3RTdGF0dXMpCi17Ci0gICAgVUNIQVIgcHJlX0NSRCxwcmVfU1IxRSAsIHByZV9QYXJ0Ml8wICwgcHJlX1BhcnQ0X0QgOwotICAgIFVTSE9SVCB0ZW1wYXggLCB0ZW1wYnggLCB0ZW1wY3ggLCBwdXNoYXggLCB0ZW1wIDsKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKLSAgICBVQ0hBUiBPdXRwdXRTZWxlY3QgPSBYR0kzMzBfT3V0cHV0U2VsZWN0IDsKLSAgICBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uPSBwSFdERS0+cFhHSUhXREUgOwotICAgIFVDSEFSICAgYkNvbm5lY3RTdGF0dXMgPSAwIDsKLSAgICBwVkJJbmZvLT5CYXNlQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7Ci0gICAgcFZCSW5mby0+Uk9NQWRkciAgPSBwSFdERS0+cGpWaXJ0dWFsUm9tQmFzZSA7Ci0KLSAgICBwVkJJbmZvLT5QM2MyID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDEyIDsKLSAgICBwVkJJbmZvLT5QM2M0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDE0IDsKLSAgICBwVkJJbmZvLT5QM2Q0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDI0IDsKLSAgICBwVkJJbmZvLT5QYXJ0MlBvcnQgPSBwVkJJbmZvLT5CYXNlQWRkciArIFhHSV9DUlQyX1BPUlRfMTAgOwotICAgIHBWQkluZm8tPlBhcnQ0UG9ydCA9IHBWQkluZm8tPkJhc2VBZGRyICsgWEdJX0NSVDJfUE9SVF8xNCA7Ci0gICAgcHVzaGF4ID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDE3ICkgOwkvKiAwNTEyIEZpeCBEeXNlbnNlIGhhbmdlZCAqLwotICAgIHRlbXAgPSAoIHB1c2hheCAmIDB4MDBGRiApIHwgMHg4MCA7Ci0gICAgWEdJTmV3X1NldFJlZ09SKCBwVkJJbmZvLT5QM2Q0ICwgMHgxNyAsIHRlbXAgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDA1ICwgMHg4NiApIDsKLSAgICAvKiBiZWdpbm5pbmcgb2YgZHluYW1pYyBzZW5zZSBDUlQxICovCi0KLSAgICBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID0gMDsKLSAgICBpZiAocEhXREUtPmJDSDcwMDcpCi0gICAgewotICAgIAlJbml0VG8zMzBQb2ludGVyKCBwSFdERS0+cFhHSUhXREUtPmpDaGlwVHlwZSwgcFZCSW5mbyApIDsKLSAgICAgICAgSHdEZXZpY2VFeHRlbnNpb24tPnBEZXZpY2UgPSAoUFZPSUQpcEhXREU7Ci0gICAgICAgIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAxOwotICAgICAgICAvKiBbQmlsbHldIDIwMDcvMDUvMTQgRm9yIENINzAwNyAqLwotICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgPSBTZW5zZUNIVFYoSHdEZXZpY2VFeHRlbnNpb24tPnBEZXZpY2UpIDsgLyogMDcvMDUvMjggKi8KLSAgICAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzMiAsIH4weDAzICwgKFVDSEFSKWJDb25uZWN0U3RhdHVzICkgOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmKCggcEhXREUtPmpDaGlwSUQgPj0gWEc0MCApIHx8ICggcEhXREUtPmpDaGlwSUQgPj0gWEcyMCApKQotICAgIHsKLQotICAgICAgICBpZiAoIHBIV0RFLT5qQ2hpcElEID49IFhHNDAgKQotICAgIAkgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDU3ICwgMHg0QSApIDsJLyogd3JpdGUgc2Vuc2UgcGF0dGVybiAzMC0+NGEgKi8KLSAgICAJZWxzZQotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDU3ICwgMHg1RiApIDsJLyogd3JpdGUgc2Vuc2UgcGF0dGVybiAqLwotCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4NTMgLCAweEZGICwgMHgwMiApIDsJLyogZW5hYmxlIHNlbnNlIERBQyAqLwotICAgICAgICBYR0lfV2FpdERpc3BseShwVkJJbmZvKSA7Ci0KLSAgICAgICAgaWYoWEdJTmV3X0dldFJlZzIoIHBWQkluZm8tPlAzYzIgKSAmIDB4MTAgKQotICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgfD0gTW9uaXRvcjFTZW5zZSA7Ci0KLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORCggcFZCSW5mby0+UDNkNCAsIDB4NTMgLCAweEZEICkgOwkvKiBkaXNhYmxlIHNlbnNlIERBQyAqLwotICAgICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QM2Q0ICwgMHg1NyAsIDB4MDAgKSA7CS8qIGNsZWFyIHNlbnNlIHBhdHRlcm4gKi8KLQotCi0gICAgICAgIC8qIC0tLS0tLS0tLS0gRW5kIG9mIGR5bmFtaWMgc2Vuc2UgQ1JUMSAtLS0tLS0tLS0tLSAqLwotCi0gICAgICAgIC8qIC0tLS0tLS0tLS0gYmVnaW5uaW5nIG9mIGR5bmFtaWMgc2Vuc2UgVkIgLS0tLS0tLS0tLS0tICovCi0gICAgICAgIHByZV9TUjFFID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFFICkgOwotICAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlAzYzQgLCAweDFFICwgMHgyMCApIDsJLyogRW5hYmxlIENSVDIsd29yay1hLXJvdW5kIGZvciAzMDFCLzMwMUxWLzMwMkxWICovCi0gICAgICAgIHByZV9QYXJ0Ml8wID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDAgKSA7Ci0gICAgICAgIHByZV9QYXJ0NF9EID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MEQgKSA7Ci0KLSAgICAgICAgaWYgKCBYR0lfSXMzMDFDKCBwVkJJbmZvICkgKQkvKiAzMDFDIG9ubHkgKi8KLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRCAsIH4weDA3ICwgMHgwMSApIDsJLyogU2V0IFBhcnQ0IDB4MEQgRFsyOjBdIHRvIDAwMWIgKi8KLQotICAgICAgICAvKiB0ZW1wYXggPSAwIDsgKi8KLSAgICAgICAgaWYgKCAhWEdJX0lzMzAxTFYoIHBWQkluZm8gKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgdGVtcGJ4ID0gWEdJMzMwX1JHQlNlbnNlRGF0YTIgOwotICAgICAgICAgICAgdGVtcGN4ID0gMHgwRTA4IDsKLSAgICAgICAgICAgIGlmKFhHSU5ld19TZW5zZSggdGVtcGJ4ICwgdGVtcGN4LCBwVkJJbmZvICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJDb25uZWN0U3RhdHVzIHw9IE1vbml0b3IyU2Vuc2UgOwotICAgICAgICAgICAgICAgIGlmICggT3V0cHV0U2VsZWN0ICYgU2V0U0NBUlRPdXRwdXQgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXMgXj0gKCBNb25pdG9yMlNlbnNlIHwgU0NBUlRTZW5zZSApIDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBYR0lfSXMzMDFDKCBwVkJJbmZvICkgKQkvKiAzMDFDIG9ubHkgKi8KLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRCAsIDB4MDQgKSA7CS8qIFNldCBQYXJ0NCAweDBEIERbMl09MSBmb3IgZHluYW1pYyBzZW5zZSAqLwotCi0gICAgICAgIGlmICggKCBYR0lOZXdfSXMzMDFCKCBwVkJJbmZvICkgKSApCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDAgLCAweDBDICkgOyAgICAvKiA/Pz8/Pz8/Pz8gKi8KLQotCWlmICggWEdJTmV3X1NlbnNlSGlUViggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvKSApCQkvKiBhZGQgYnkga3VrdSBmb3IgRHlzZW5zZSBIaVRWIC8vc3RhcnQgKi8KLQl7Ci0JICAgIGJDb25uZWN0U3RhdHVzfD0gWVBiUHJTZW5zZSA7Ci0JfQotCWVsc2UKLQl7Ci0gICAgICAgIHRlbXBieCA9IFhHSTMzMF9ZQ1NlbnNlRGF0YTIgOwkvKiBZL0MgU2Vuc2UgRGF0YSBQdHIgKi8KLSAgICAgICAgdGVtcGN4ID0gMHgwNjA0IDsKLSAgICAgICAgaWYgKCBYR0lOZXdfU2Vuc2UoIHRlbXBieCAsIHRlbXBjeCAsIHBWQkluZm8pICkKLSAgICAgICAgICAgIGJDb25uZWN0U3RhdHVzIHw9IFNWSURFT1NlbnNlIDsKLQotICAgICAgICBpZiAoIE91dHB1dFNlbGVjdCAmIEJvYXJkVFZUeXBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGVtcGJ4ID0gWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMiA7Ci0gICAgICAgICAgICB0ZW1wY3ggPSAweDA4MDQgOwotICAgICAgICAgICAgaWYgKCBYR0lOZXdfU2Vuc2UodGVtcGJ4ICwgdGVtcGN4LCBwVkJJbmZvKSApCi0gICAgICAgICAgICAgICAgYkNvbm5lY3RTdGF0dXN8PSBBVklERU9TZW5zZSA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICEoIGJDb25uZWN0U3RhdHVzICYgU1ZJREVPU2Vuc2UgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGVtcGJ4ID0gWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMiA7Ci0gICAgICAgICAgICAgICAgdGVtcGN4ID0gMHgwODA0IDsKLSAgICAgICAgICAgICAgICBpZiAoIFhHSU5ld19TZW5zZSggdGVtcGJ4ICwgdGVtcGN4LCBwVkJJbmZvICkgKQotICAgICAgICAgICAgICAgICAgICBiQ29ubmVjdFN0YXR1cyB8PSBBVklERU9TZW5zZSA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAJfSAvKiBlbmQgKi8KLSAgICAgICAgLyogRHlTZW5zZVZCQ250ICovCi0KLSAgICAgICAgdGVtcGJ4ID0gMCA7Ci0gICAgICAgIHRlbXBjeCA9IDAgOwotICAgICAgICBYR0lOZXdfU2Vuc2UodGVtcGJ4ICwgdGVtcGN4LCBwVkJJbmZvICkgOwotCi0gICAgICAgIGlmICggISggYkNvbm5lY3RTdGF0dXMgJiBNb25pdG9yMlNlbnNlICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIFhHSV9TZW5zZUxDRCggcEhXREUgLCBwVkJJbmZvICkgKQotICAgICAgICAgICAgICAgIGJDb25uZWN0U3RhdHVzIHw9IExDRFNlbnNlIDsKLSAgICAgICAgfQotCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4MzIgLCB+KCBBVklERU9TZW5zZSB8IFNWSURFT1NlbnNlIHwgTENEU2Vuc2UgfCBNb25pdG9yMlNlbnNlIHwgTW9uaXRvcjFTZW5zZSApICwgYkNvbm5lY3RTdGF0dXMgKSA7Ci0KLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MEQgLCBwcmVfUGFydDRfRCApIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDAgLCBwcmVfUGFydDJfMCApIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFFICwgcHJlX1NSMUUgKSA7Ci0KLSAgICAgICAgaWYgKCBYR0lfSXMzMDFDKCBwVkJJbmZvICkgKQkvKiAzMDFDIG9ubHkgKi8KLSAgICAgICAgewotICAgICAgICAgICAgdGVtcGF4ID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDAgKSA7Ci0gICAgICAgICAgICBpZiAoIHRlbXBheCAmIDB4MjAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFJlc2V0IFZCUHJvICovCi0gICAgICAgICAgICAgICAgZm9yKCB0ZW1wY3ggPSAyIDsgdGVtcGN4ID4gMCA7IHRlbXBjeC0tICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBheCBePSAweDIwIDsKLSAgICAgICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDAgLCB0ZW1wYXggKSA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIEVuZCBvZiBkeW5hbWljIHNlbnNlIFZCICovCi0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIFhHSV9TZW5zZUNSVDEocFZCSW5mbykgOwotICAgICAgICBYR0lfR2V0U2Vuc2VTdGF0dXMoIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvICkgOwkvKiBzZW5zZSBDUlQyICovCi0gICAgICAgIGJDb25uZWN0U3RhdHVzID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDMyICkgOwotICAgIH0KLSAgICB0ZW1wID0gcHVzaGF4ICYgMHgwMEZGIDsJCS8qIDA1MTIgRml4IER5c2Vuc2UgaGFuZ2VkICovCi0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDE3ICwgdGVtcCApIDsKLSAgICBpZiAoIGJDb25uZWN0U3RhdHVzICkKLSAgICB7Ci0gICAgICAgICp1akNvbm5lY3RTdGF0dXMgPSBiQ29ubmVjdFN0YXR1cyA7Ci0gICAgICAgIHJldHVybiggMSApIDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4oIDAgKSA7Ci19Ci0KLSNlbmRpZiAvKiBXSU4yMDAwICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gOiBYR0lTZXREUE1TICovCkBAIC00NTQsMTMgKzEzNSwxNCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVk9JRCBYR0lTZXREUE1TKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFICwgVUxPTkcgVkVTQV9QT1dFUl9TVEFURSApCit2b2lkIFhHSVNldERQTVMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsCisJCXVuc2lnbmVkIGxvbmcgVkVTQV9QT1dFUl9TVEFURSkKIHsKLSAgICBVU0hPUlQgTW9kZU5vLCBNb2RlSWRJbmRleCA7Ci0gICAgVUNIQVIgIHRlbXAgOwotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOwotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKFVMT05HKXBYR0lIV0RFLT5waklPQWRkcmVzcyA7CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCBNb2RlSWRJbmRleDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXA7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKXBYR0lIV0RFLT5waklPQWRkcmVzcyA7CiAgICAgcFZCSW5mby0+Uk9NQWRkciAgPSBwWEdJSFdERS0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAKIApAQCAtNTI3LDE4ICsyMDksMTggQEAKICAgICB9CiAKICAgICBpZiAoIFZFU0FfUE9XRVJfU1RBVEUgPT0gMHgwMDAwMDQwMCApCi0gICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzMSAsICggVUNIQVIgKSggWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MzEgKSAmIDB4RkUgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDMxLCAodW5zaWduZWQgY2hhcikoWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDMxKSAmIDB4RkUpKTsKICAgICBlbHNlCi0gICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzMSAsICggVUNIQVIgKSggWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MzEgKSB8IDB4MDEgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDMxLCAodW5zaWduZWQgY2hhcikoWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDMxKSB8IDB4MDEpKTsKIAotICAgIHRlbXAgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MWYgKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MWYpOwogICAgIHRlbXAgJj0gMHgzZiA7CiAgICAgc3dpdGNoICggVkVTQV9QT1dFUl9TVEFURSApCiAgICAgewogICAgICAgICBjYXNlIDB4MDAwMDAwMDA6IC8qIG9uICovCiAgICAgICAgICAgICBpZiAoICggcFhHSUhXREUtPnVqVkJDaGlwSUQgPT0gVkJfQ0hJUF8zMDEgKSB8fCAoIHBYR0lIV0RFLT51alZCQ2hpcElEID09IFZCX0NISVBfMzAyICkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxZiAsICggVUNIQVIgKSggdGVtcCB8IDB4MDAgKSApIDsKKwkJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxZiwgKHVuc2lnbmVkIGNoYXIpKHRlbXAgfCAweDAwKSk7CiAgICAgICAgICAgICAgICAgWEdJX0VuYWJsZUJyaWRnZSggcFhHSUhXREUsIHBWQkluZm8gKSA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC01OTYsNyArMjc4LDcgQEAKICAgICAgICAgICAgICAgICBYR0lfRGlzcGxheU9mZiggcFhHSUhXREUsIHBWQkluZm8gKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFmICwgKCBVQ0hBUiApKCB0ZW1wIHwgMHg0MCApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFmLCAodW5zaWduZWQgY2hhcikodGVtcCB8IDB4NDApKTsKICAgICAgICAgICAgIGJyZWFrIDsKICAgICAgICAgY2FzZSAweDAwMDAwMjAwOiAvKiBzdXNwZW5kICovCiAgICAgICAgICAgICBpZiAoIHBYR0lIV0RFLT5qQ2hpcFR5cGUgPT0gWEcyMSApCkBAIC02MDksMTIgKzI5MSwxMiBAQAogICAgICAgICAgICAgICAgIFhHSV9EaXNwbGF5T2ZmKCBwWEdJSFdERSwgcFZCSW5mbyApOwogICAgICAgICAgICAgICAgIFhHSV9YRzI3QkxTaWduYWxWREQoIDB4MjAgLCAweDAwLCBwVkJJbmZvICkgOyAvKiBMVkRTIHNpZ25hbCBvZmYgKi8KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxZiAsICggVUNIQVIgKSggdGVtcCB8IDB4ODAgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgxZiwgKHVuc2lnbmVkIGNoYXIpKHRlbXAgfCAweDgwKSk7CiAgICAgICAgICAgICBicmVhayA7CiAgICAgICAgIGNhc2UgMHgwMDAwMDQwMDogLyogb2ZmICovCiAgICAgICAgICAgICBpZiAoIChwWEdJSFdERS0+dWpWQkNoaXBJRCA9PSBWQl9DSElQXzMwMSApIHx8ICggcFhHSUhXREUtPnVqVkJDaGlwSUQgPT0gVkJfQ0hJUF8zMDIgKSApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFmICwgKCBVQ0hBUiApKCB0ZW1wIHwgMHhjMCApICkgOworCQlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFmLCAodW5zaWduZWQgY2hhcikodGVtcCB8IDB4YzApKTsKICAgICAgICAgICAgICAgICBYR0lfRGlzYWJsZUJyaWRnZSggcFhHSUhXREUsIHBWQkluZm8gKSA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC02NzcsMTIgKzM1OSwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0U2Vuc2VTdGF0dXMoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX0dldFNlbnNlU3RhdHVzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCA9IDAgLCB0ZW1wYnggLCB0ZW1wY3ggLCB0ZW1wICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggPSAwICwgdGVtcGJ4ICwgdGVtcGN4ICwgdGVtcCAsCiAgICAgICAgICAgIFAycmVnMCA9IDAgLCBTZW5zZU1vZGVObyA9IDAgLCBPdXRwdXRTZWxlY3QgPSAqcFZCSW5mby0+cE91dHB1dFNlbGVjdCAsCiAgICAgICAgICAgIE1vZGVJZEluZGV4ICwgaSA7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAKICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9MVkRTID09IDEgKQogICAgIHsKQEAgLTg3NiwxMCArNTU4LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJTmV3X1NlbnNlTENEKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19TZW5zZUxDRChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgLyogVVNIT1JUIFNvZnRTZXR0aW5nIDsgKi8KLSAgICBVU0hPUlQgdGVtcCA7CisgICAgLyogdW5zaWduZWQgc2hvcnQgU29mdFNldHRpbmcgOyAqLworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgOwogCiAgICAgaWYgKCAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPj0gWEcyMCApIHx8ICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzQwICkgKQogICAgICAgICB0ZW1wID0gMCA7CkBAIC04OTksOSArNTgyLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJTmV3X0dldExDREREQ0luZm8oIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRMQ0RERENJbmZvKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgOwogCiAgICAgLyogYWRkIGxjZCBzZW5zZSAqLwogICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPnVsQ1JUMkxDRFR5cGUgPT0gTENEX1VOS05PV04gKQpAQCAtOTEwLDcgKzU5Myw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHRlbXAgPSAoIFVTSE9SVCApSHdEZXZpY2VFeHRlbnNpb24tPnVsQ1JUMkxDRFR5cGUgOworCSAgICB0ZW1wID0gKHVuc2lnbmVkIHNob3J0KUh3RGV2aWNlRXh0ZW5zaW9uLT51bENSVDJMQ0RUeXBlIDsKICAgICAgICAgc3dpdGNoKCBId0RldmljZUV4dGVuc2lvbi0+dWxDUlQyTENEVHlwZSApCiAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgTENEX0lOVkFMSUQ6CkBAIC05NTIsMjYgKzYzNSwyNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfR2V0UGFuZWxJRChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRQYW5lbElEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgUGFuZWxUeXBlVGFibGVbIDE2IF0gPSB7IFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTAwICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTAxICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTAyICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDY0MHg0ODAgIHwgX1BhbmVsVHlwZTAzICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA0ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA1ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA2ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMjRCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA3ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTA4ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA5ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTBBICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBCICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBDICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMjRCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBEICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBFICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBGIH0gOwotICAgIFVTSE9SVCB0ZW1wYXggLCB0ZW1wYnggLCB0ZW1wIDsKLSAgICAvKiBVU0hPUlQgcmV0dXJuX2ZsYWcgOyAqLworCXVuc2lnbmVkIHNob3J0IFBhbmVsVHlwZVRhYmxlWzE2XSA9IHsKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsODAweDYwMCAgfCBfUGFuZWxUeXBlMDAsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTAxLAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWw4MDB4NjAwICB8IF9QYW5lbFR5cGUwMiwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsNjQweDQ4MCAgfCBfUGFuZWxUeXBlMDMsCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA0LAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwNSwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDYsCisJCVN5bmNOTiB8IFBhbmVsUkdCMjRCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTA3LAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWw4MDB4NjAwICB8IF9QYW5lbFR5cGUwOCwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMDksCisJCVN5bmNOTiB8IFBhbmVsUkdCMThCaXQgfCBQYW5lbDgwMHg2MDAgIHwgX1BhbmVsVHlwZTBBLAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwQiwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEMsCisJCVN5bmNOTiB8IFBhbmVsUkdCMjRCaXQgfCBQYW5lbDEwMjR4NzY4IHwgX1BhbmVsVHlwZTBELAorCQlTeW5jTk4gfCBQYW5lbFJHQjE4Qml0IHwgUGFuZWwxMDI0eDc2OCB8IF9QYW5lbFR5cGUwRSwKKwkJU3luY05OIHwgUGFuZWxSR0IxOEJpdCB8IFBhbmVsMTAyNHg3NjggfCBfUGFuZWxUeXBlMEYgfTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLCB0ZW1wYngsIHRlbXA7CisgICAgLyogdW5zaWduZWQgc2hvcnQgcmV0dXJuX2ZsYWcgOyAqLwogCiAgICAgdGVtcGF4ID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFBICkgOwogICAgIHRlbXBieCA9IHRlbXBheCAmIDB4MUUgOwpAQCAtMTAyNCw5ICs3MDgsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfQnJpZGdlSXNFbmFibGUoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lOZXdfQnJpZGdlSXNFbmFibGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZmxhZyA7CisgICAgdW5zaWduZWQgc2hvcnQgZmxhZyA7CiAKICAgICBpZiAoIFhHSV9CcmlkZ2VJc09uKCBwVkJJbmZvICkgPT0gMCApCiAgICAgewpAQCAtMTA1MSw5ICs3MzUsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfU2Vuc2VIaVRWKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lOZXdfU2Vuc2VIaVRWKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsIHRlbXBjeCAsIHRlbXAgLCBpICwgdGVtcGNoOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsIHRlbXBjeCAsIHRlbXAgLCBpICwgdGVtcGNoOwogCiAgICAgdGVtcGJ4ID0gKnBWQkluZm8tPnBZQ1NlbnNlRGF0YTIgOwogCkBAIC0xMTMyLDE0ICs4MTYsMTQgQEAKIDsJCSAgICAgRFg6IFBBbmVsIFYuIHJlc29sdXRpb24KIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLXZvaWQgWEdJX1hHMjFGdW4xNFN1YjcwKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyAsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cyApCit2b2lkIFhHSV9YRzIxRnVuMTRTdWI3MChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKIHsKIAotICAgIFVTSE9SVCBNb2RlSWRJbmRleDsKLSAgICBVU0hPUlQgTW9kZU5vOworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4OworICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObzsKIAotICAgIFVTSE9SVCBFTW9kZUNvdW50OwotICAgIFVTSE9SVCBsdmRzdGFibGVpbmRleDsKKyAgICB1bnNpZ25lZCBzaG9ydCBFTW9kZUNvdW50OworICAgIHVuc2lnbmVkIHNob3J0IGx2ZHN0YWJsZWluZGV4OwogCiAgICAgbHZkc3RhYmxlaW5kZXggPSBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoIHBWQkluZm8gKTsKICAgICBwQmlvc0FyZ3VtZW50cy0+aC5ibCA9IDB4ODE7CkBAIC0xMTUzLDcgKzgzNyw3IEBACiAgICAgICAgIE1vZGVObyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEOwogICAgICAgICBpZiAoIHBWQkluZm8tPkVNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IDB4RkYgKQogICAgICAgICB7Ci0gICAgICAgICAgICBwQmlvc0FyZ3VtZW50cy0+aC5iaCA9IChVQ0hBUikgRU1vZGVDb3VudDsKKwkgICAgcEJpb3NBcmd1bWVudHMtPmguYmggPSAodW5zaWduZWQgY2hhcikgRU1vZGVDb3VudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoICFYR0lfWEcyMUNoZWNrTFZEU01vZGUoIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvKSApCkBAIC0xMTc1LDEzICs4NTksMTMgQEAKIDsKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLXZvaWQgWEdJX1hHMjFGdW4xNFN1YjcxKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyAsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cyApCit2b2lkIFhHSV9YRzIxRnVuMTRTdWI3MShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKIHsKIAotICAgIFVTSE9SVCBFTW9kZUNvdW50OwotICAgIFVTSE9SVCBNb2RlSWRJbmRleCxyZXNpbmRleDsKLSAgICBVU0hPUlQgTW9kZU5vOwotICAgIFVTSE9SVCBFTW9kZUluZGV4ID0gcEJpb3NBcmd1bWVudHMtPmguYmg7CisgICAgdW5zaWduZWQgc2hvcnQgRU1vZGVDb3VudDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgcmVzaW5kZXg7CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vOworICAgIHVuc2lnbmVkIHNob3J0IEVNb2RlSW5kZXggPSBwQmlvc0FyZ3VtZW50cy0+aC5iaDsKIAogICAgIEVNb2RlQ291bnQgPSAwOwogICAgIGZvciggTW9kZUlkSW5kZXggPSAwIDsgOyAgTW9kZUlkSW5kZXggKysgKQpAQCAtMTE5OSw3ICs4ODMsNyBAQAogICAgICAgICBpZiAoRU1vZGVDb3VudCA9PSBFTW9kZUluZGV4KQogICAgICAgICB7CiAgICAgICAgICAgICByZXNpbmRleCA9IFhHSV9HZXRSZXNJbmZvKCBNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbyApIDsKLSAgICAgICAgICAgIHBCaW9zQXJndW1lbnRzLT5oLmJsID0gKFVDSEFSKSBNb2RlTm87CisJICAgIHBCaW9zQXJndW1lbnRzLT5oLmJsID0gKHVuc2lnbmVkIGNoYXIpIE1vZGVObzsKICAgICAgICAgICAgIHBCaW9zQXJndW1lbnRzLT54LmN4ID0gcFZCSW5mby0+TW9kZVJlc0luZm9bIHJlc2luZGV4IF0uSFRvdGFsIDsJCQkgIC8qIHhyZXMtPmF4ICovCiAgICAgICAgICAgICBwQmlvc0FyZ3VtZW50cy0+eC5keCA9IHBWQkluZm8tPk1vZGVSZXNJbmZvWyByZXNpbmRleCBdLlZUb3RhbCA7CQkJICAvKiB5cmVzLT5ieCAqLwogICAgICAgICAgICAgcEJpb3NBcmd1bWVudHMtPnguYXggPSAweDAwMTQ7CkBAIC0xMjIxLDEwICs5MDUsMTAgQEAKIDsKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLXZvaWQgWEdJX1hHMjFGdW4xNFN1YjcyKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyAsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cyApCit2b2lkIFhHSV9YRzIxRnVuMTRTdWI3MihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKIHsKLSAgICBVU0hPUlQgTW9kZUlkSW5kZXgscmVzaW5kZXg7Ci0gICAgVVNIT1JUIE1vZGVObzsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgcmVzaW5kZXg7CisgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vOwogCiAKICAgICBNb2RlTm8gPSBwQmlvc0FyZ3VtZW50cy0+aC5ibCA7CkBAIC0xMjgwLDExICs5NjQsMTEgQEAKIDsgICAgICAgICAgICAgICAgICAgICAgIEJYWzZdOiAqVmFsdWUxIERbNl0gUGFuZWwgSC4gUG9sYXJpdHkKIDstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KLXZvaWQgWEdJX1hHMjFGdW4xNFN1YjczKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyAsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cyApCit2b2lkIFhHSV9YRzIxRnVuMTRTdWI3MyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKIHsKLSAgICBVQ0hBUiBTZWxlY3Q7CisgICAgdW5zaWduZWQgY2hhciBTZWxlY3Q7CiAKLSAgICBVU0hPUlQgbHZkc3RhYmxlaW5kZXg7CisgICAgdW5zaWduZWQgc2hvcnQgbHZkc3RhYmxlaW5kZXg7CiAKICAgICBsdmRzdGFibGVpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleCggcFZCSW5mbyApOwogICAgIFNlbGVjdCA9IHBCaW9zQXJndW1lbnRzLT5oLmJsOwpAQCAtMTMxNCwxMCArOTk4LDEwIEBACiB9CiAKIAotdm9pZCBYR0lfWEcyMUZ1bjE0KCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFLCBQWDg2X1JFR1MgcEJpb3NBcmd1bWVudHMpCit2b2lkIFhHSV9YRzIxRnVuMTQoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsIFBYODZfUkVHUyBwQmlvc0FyZ3VtZW50cykKIHsKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOwogCiAgICAgcFZCSW5mby0+SUZfREVGX0xWRFMgPSAwIDsKICAgICBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA1ID0gMCA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfZXh0LmgKaW5kZXggOWE3MmY1ZS4uNWNjNGQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2V4dC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9leHQuaApAQCAtMiwxNSArMiwxNyBAQAogI2RlZmluZSAgX1ZCRVhUXwogCiBzdHJ1Y3QgRFdPUkRSRUdTIHsKLSAgICBVTE9ORyAgICBFYXgsIEVieCwgRWN4LCBFZHgsIEVzaSwgRWRpLCBFYnA7CisgICAgdW5zaWduZWQgbG9uZyAgICBFYXgsIEVieCwgRWN4LCBFZHgsIEVzaSwgRWRpLCBFYnA7CiB9OwogCiBzdHJ1Y3QgV09SRFJFR1MgewotICAgIFVTSE9SVCAgICBheCwgaGlfYXgsIGJ4LCBoaV9ieCwgY3gsIGhpX2N4LCBkeCwgaGlfZHgsIHNpLCBoaV9zaSwgZGkgLGhpX2RpLCBicCwgaGlfYnA7CisgICAgdW5zaWduZWQgc2hvcnQgYXgsIGhpX2F4LCBieCwgaGlfYngsIGN4LCBoaV9jeCwgZHgsIGhpX2R4LCBzaSwKKwkgICAgaGlfc2ksIGRpLCBoaV9kaSwgYnAsIGhpX2JwOwogfTsKIAogc3RydWN0IEJZVEVSRUdTIHsKLSAgICBVQ0hBUiAgIGFsLCBhaCwgaGlfYWwsIGhpX2FoLCBibCwgYmgsIGhpX2JsLCBoaV9iaCwgY2wsIGNoLCBoaV9jbCwgaGlfY2gsIGRsLCBkaCwgaGlfZGwsIGhpX2RoOworICAgICB1bnNpZ25lZCBjaGFyIGFsLCBhaCwgaGlfYWwsIGhpX2FoLCBibCwgYmgsIGhpX2JsLCBoaV9iaCwgY2wsIGNoLAorCSAgICAgaGlfY2wsIGhpX2NoLCBkbCwgZGgsIGhpX2RsLCBoaV9kaDsKIH07CiAKIHR5cGVkZWYgdW5pb24gICBfWDg2X1JFR1MgICAgewpAQCAtMTksMTQgKzIxLDE0IEBACiAgICAgc3RydWN0ICBCWVRFUkVHUyBoOwogfSBYODZfUkVHUywgKlBYODZfUkVHUzsKIAotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjFGdW4xNCggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSwgUFg4Nl9SRUdTIHBCaW9zQXJndW1lbnRzKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSVNldERQTVMoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUgLCBVTE9ORyBWRVNBX1BPV0VSX1NUQVRFICkgOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFNlbnNlU3RhdHVzKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRNb2RlU2NyYXRjaCAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApIDsKLWV4dGVybiAgIHZvaWQgCSAgUmVhZFZCSU9TVGFibERhdGEoIFVDSEFSIENoaXBUeXBlICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuICAgVVNIT1JUICAgWEdJTmV3X1NlbnNlTENEKFBYR0lfSFdfREVWSUNFX0lORk8sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotI2lmZGVmIFdJTjIwMDAKLWV4dGVybiAgIEJPT0xFQU4gIFhHSV9EeVNlbnNlKCBQSFdfREVWSUNFX0VYVEVOU0lPTiBwSFdERSAsIFBVQ0hBUiB1akNvbm5lY3RTdGF0dXMgKTsKLSNlbmRpZiAvKiBXSU4yMDAwICovCitleHRlcm4gICB2b2lkICAgICBYR0lfWEcyMUZ1bjE0KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLCBQWDg2X1JFR1MgcEJpb3NBcmd1bWVudHMpOworZXh0ZXJuIHZvaWQgWEdJU2V0RFBNUyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpwWEdJSFdERSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgVkVTQV9QT1dFUl9TVEFURSk7CitleHRlcm4gICB2b2lkICAgICBYR0lfR2V0U2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0TW9kZVNjcmF0Y2goc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykgOworZXh0ZXJuIHZvaWQgUmVhZFZCSU9TVGFibERhdGEodW5zaWduZWQgY2hhciBDaGlwVHlwZSwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgWEdJTmV3X1NlbnNlTENEKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwKKwkJCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5jCmluZGV4IGI4NWNhOWIuLmUwMjcyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuYwpAQCAtMSwyOSArMSw5IEBACi0jaW5jbHVkZSAib3NkZWYuaCIKICNpbmNsdWRlICJ2Z2F0eXBlcy5oIgogCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPiAvKiB1ZGVsYXkgKi8KICNpbmNsdWRlICJYR0lmYi5oIgotLyojaWYgTElOVVhfVkVSU3hJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpbmNsdWRlIDx2aWRlby9YR0lmYi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxsaW51eC9YR0lmYi5oPgotI2VuZGlmICovCi0jZW5kaWYKLQotI2lmZGVmIFdJTjIwMDAKLSNpbmNsdWRlIDxkZGVycm9yLmg+Ci0jaW5jbHVkZSA8ZGV2aW9jdGwuaD4KLSNpbmNsdWRlIDxtaW5pcG9ydC5oPgotI2luY2x1ZGUgPG50ZGR2ZGVvLmg+Ci0jaW5jbHVkZSA8dmlkZW8uaD4KLSNpbmNsdWRlICJ4Z2l2LmgiCi0jaW5jbHVkZSAiZGRfaTJjLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNlbmRpZgogCiAjaW5jbHVkZSAidmJfZGVmLmgiCiAjaW5jbHVkZSAidmJfc3RydWN0LmgiCkBAIC0zMiwxMjMgKzEyLDEwNSBAQAogI2luY2x1ZGUgInZiX2luaXQuaCIKICNpbmNsdWRlICJ2Yl9leHQuaCIKIAotI2lmZGVmIExJTlVYX1hGODYKLSNpbmNsdWRlICJ4Zjg2LmgiCi0jaW5jbHVkZSAieGY4NlBjaUluZm8uaCIKLSNpbmNsdWRlICJ4Z2kuaCIKLSNpbmNsdWRlICJ4Z2lfcmVncy5oIgotI2VuZGlmCiAKLSNpZmRlZiBMSU5VWF9LRVJORUwKICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2VuZGlmCiAKIAogCiAKLVVDSEFSICAgIFhHSU5ld19DaGFubmVsQUIsWEdJTmV3X0RhdGFCdXNXaWR0aDsKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0NoYW5uZWxBQiwgWEdJTmV3X0RhdGFCdXNXaWR0aDsKIAotVVNIT1JUIFhHSU5ld19EUkFNVHlwZVsxN11bNV09e3sweDBDLDB4MEEsMHgwMiwweDQwLDB4Mzl9LHsweDBELDB4MEEsMHgwMSwweDQwLDB4NDh9LAotICAgICAgICAgICAgICAgICAgICAgezB4MEMsMHgwOSwweDAyLDB4MjAsMHgzNX0sezB4MEQsMHgwOSwweDAxLDB4MjAsMHg0NH0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwQywweDA4LDB4MDIsMHgxMCwweDMxfSx7MHgwRCwweDA4LDB4MDEsMHgxMCwweDQwfSwKLSAgICAgICAgICAgICAgICAgICAgIHsweDBDLDB4MEEsMHgwMSwweDIwLDB4MzR9LHsweDBDLDB4MDksMHgwMSwweDA4LDB4MzJ9LAotICAgICAgICAgICAgICAgICAgICAgezB4MEIsMHgwOCwweDAyLDB4MDgsMHgyMX0sezB4MEMsMHgwOCwweDAxLDB4MDgsMHgzMH0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwQSwweDA4LDB4MDIsMHgwNCwweDExfSx7MHgwQiwweDBBLDB4MDEsMHgxMCwweDI4fSwKLSAgICAgICAgICAgICAgICAgICAgIHsweDA5LDB4MDgsMHgwMiwweDAyLDB4MDF9LHsweDBCLDB4MDksMHgwMSwweDA4LDB4MjR9LAotICAgICAgICAgICAgICAgICAgICAgezB4MEIsMHgwOCwweDAxLDB4MDQsMHgyMH0sezB4MEEsMHgwOCwweDAxLDB4MDIsMHgxMH0sCi0gICAgICAgICAgICAgICAgICAgICB7MHgwOSwweDA4LDB4MDEsMHgwMSwweDAwfX07Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfRFJBTVR5cGVbMTddWzVdID0geworCXsweDBDLCAweDBBLCAweDAyLCAweDQwLCAweDM5fSwgezB4MEQsIDB4MEEsIDB4MDEsIDB4NDAsIDB4NDh9LAorCXsweDBDLCAweDA5LCAweDAyLCAweDIwLCAweDM1fSwgezB4MEQsIDB4MDksIDB4MDEsIDB4MjAsIDB4NDR9LAorCXsweDBDLCAweDA4LCAweDAyLCAweDEwLCAweDMxfSwgezB4MEQsIDB4MDgsIDB4MDEsIDB4MTAsIDB4NDB9LAorCXsweDBDLCAweDBBLCAweDAxLCAweDIwLCAweDM0fSwgezB4MEMsIDB4MDksIDB4MDEsIDB4MDgsIDB4MzJ9LAorCXsweDBCLCAweDA4LCAweDAyLCAweDA4LCAweDIxfSwgezB4MEMsIDB4MDgsIDB4MDEsIDB4MDgsIDB4MzB9LAorCXsweDBBLCAweDA4LCAweDAyLCAweDA0LCAweDExfSwgezB4MEIsIDB4MEEsIDB4MDEsIDB4MTAsIDB4Mjh9LAorCXsweDA5LCAweDA4LCAweDAyLCAweDAyLCAweDAxfSwgezB4MEIsIDB4MDksIDB4MDEsIDB4MDgsIDB4MjR9LAorCXsweDBCLCAweDA4LCAweDAxLCAweDA0LCAweDIwfSwgezB4MEEsIDB4MDgsIDB4MDEsIDB4MDIsIDB4MTB9LAorCXsweDA5LCAweDA4LCAweDAxLCAweDAxLCAweDAwfSB9OwogCi1VU0hPUlQgWEdJTmV3X1NEUkRSQU1fVFlQRVsxM11bNV09Ci17Ci17IDIsMTIsIDksNjQsMHgzNX0sCi17IDEsMTMsIDksNjQsMHg0NH0sCi17IDIsMTIsIDgsMzIsMHgzMX0sCi17IDIsMTEsIDksMzIsMHgyNX0sCi17IDEsMTIsIDksMzIsMHgzNH0sCi17IDEsMTMsIDgsMzIsMHg0MH0sCi17IDIsMTEsIDgsMTYsMHgyMX0sCi17IDEsMTIsIDgsMTYsMHgzMH0sCi17IDEsMTEsIDksMTYsMHgyNH0sCi17IDEsMTEsIDgsIDgsMHgyMH0sCi17IDIsIDksIDgsIDQsMHgwMX0sCi17IDEsMTAsIDgsIDQsMHgxMH0sCi17IDEsIDksIDgsIDIsMHgwMH0KLX07Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU0RSRFJBTV9UWVBFWzEzXVs1XSA9IHsKKwl7IDIsIDEyLCA5LCA2NCwgMHgzNX0sCisJeyAxLCAxMywgOSwgNjQsIDB4NDR9LAorCXsgMiwgMTIsIDgsIDMyLCAweDMxfSwKKwl7IDIsIDExLCA5LCAzMiwgMHgyNX0sCisJeyAxLCAxMiwgOSwgMzIsIDB4MzR9LAorCXsgMSwgMTMsIDgsIDMyLCAweDQwfSwKKwl7IDIsIDExLCA4LCAxNiwgMHgyMX0sCisJeyAxLCAxMiwgOCwgMTYsIDB4MzB9LAorCXsgMSwgMTEsIDksIDE2LCAweDI0fSwKKwl7IDEsIDExLCA4LCAgOCwgMHgyMH0sCisJeyAyLCAgOSwgOCwgIDQsIDB4MDF9LAorCXsgMSwgMTAsIDgsICA0LCAweDEwfSwKKwl7IDEsICA5LCA4LCAgMiwgMHgwMH0gfTsKIAotVVNIT1JUIFhHSU5ld19ERFJEUkFNX1RZUEVbNF1bNV09Ci17Ci17IDIsMTIsIDksNjQsMHgzNX0sCi17IDIsMTIsIDgsMzIsMHgzMX0sCi17IDIsMTEsIDgsMTYsMHgyMX0sCi17IDIsIDksIDgsIDQsMHgwMX0KLX07Ci1VU0hPUlQgWEdJTmV3X0REUkRSQU1fVFlQRTM0MFs0XVs1XT0KLXsKLXsgMiwxMywgOSw2NCwweDQ1fSwKLXsgMiwxMiwgOSwzMiwweDM1fSwKLXsgMiwxMiwgOCwxNiwweDMxfSwKLXsgMiwxMSwgOCwgOCwweDIxfQotfTsKLVVTSE9SVCBYR0lOZXdfRERSRFJBTV9UWVBFMjBbMTJdWzVdPQotewoteyAyLDE0LDExLDEyOCwweDVEfSwKLXsgMiwxNCwxMCw2NCwweDU5fSwKLXsgMiwxMywxMSw2NCwweDREfSwKLXsgMiwxNCwgOSwzMiwweDU1fSwKLXsgMiwxMywxMCwzMiwweDQ5fSwKLXsgMiwxMiwxMSwzMiwweDNEfSwKLXsgMiwxNCwgOCwxNiwweDUxfSwKLXsgMiwxMywgOSwxNiwweDQ1fSwKLXsgMiwxMiwxMCwxNiwweDM5fSwKLXsgMiwxMywgOCwgOCwweDQxfSwKLXsgMiwxMiwgOSwgOCwweDM1fSwKLXsgMiwxMiwgOCwgNCwweDMxfQotfTsKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19ERFJEUkFNX1RZUEVbNF1bNV0gPSB7CisJeyAyLCAxMiwgOSwgNjQsIDB4MzV9LAorCXsgMiwgMTIsIDgsIDMyLCAweDMxfSwKKwl7IDIsIDExLCA4LCAxNiwgMHgyMX0sCisJeyAyLCAgOSwgOCwgIDQsIDB4MDF9IH07CiAKLXZvaWQgICAgIFhHSU5ld19TZXREUkFNU2l6ZV8zNDAoUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPKTsKLXZvaWQgICAgIFhHSU5ld19TZXREUkFNU2l6ZV8zMTAoUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPKTsKLXZvaWQgICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gKTsKLXZvaWQgICAgIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyKFBWQl9ERVZJQ0VfSU5GTyApOwotdm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIzNDAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKTsKLXZvaWQgCSBYR0lOZXdfU2V0RFJBTURlZmF1bHRSZWdpc3RlcjM0MChQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBVTE9ORywgUFZCX0RFVklDRV9JTkZPICk7Ci1VQ0hBUiAgICBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJSW5pdE5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbikgOwordW5zaWduZWQgc2hvcnQgWEdJTmV3X0REUkRSQU1fVFlQRTM0MFs0XVs1XSA9IHsKKwl7IDIsIDEzLCA5LCA2NCwgMHg0NX0sCisJeyAyLCAxMiwgOSwgMzIsIDB4MzV9LAorCXsgMiwgMTIsIDgsIDE2LCAweDMxfSwKKwl7IDIsIDExLCA4LCAgOCwgMHgyMX0gfTsKIAotaW50ICAgICAgWEdJTmV3X0REUlNpemluZzM0MCggUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPICk7Ci12b2lkICAgICBYR0lOZXdfRGlzYWJsZVJlZnJlc2goIFBYR0lfSFdfREVWSUNFX0lORk8gLFBWQl9ERVZJQ0VfSU5GTykgOwotdm9pZCAgICAgWEdJTmV3X0NoZWNrQnVzV2lkdGhfMzEwKCBQVkJfREVWSUNFX0lORk8pIDsKLWludCAgICAgIFhHSU5ld19TRFJTaXppbmcoUFZCX0RFVklDRV9JTkZPKTsKLWludCAgICAgIFhHSU5ld19ERFJTaXppbmcoIFBWQl9ERVZJQ0VfSU5GTyApOwotdm9pZCAgICAgWEdJTmV3X0VuYWJsZVJlZnJlc2goIFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfRERSRFJBTV9UWVBFMjBbMTJdWzVdID0geworCXsgMiwgMTQsIDExLCAxMjgsIDB4NUR9LAorCXsgMiwgMTQsIDEwLCA2NCwgMHg1OX0sCisJeyAyLCAxMywgMTEsIDY0LCAweDREfSwKKwl7IDIsIDE0LCAgOSwgMzIsIDB4NTV9LAorCXsgMiwgMTMsIDEwLCAzMiwgMHg0OX0sCisJeyAyLCAxMiwgMTEsIDMyLCAweDNEfSwKKwl7IDIsIDE0LCAgOCwgMTYsIDB4NTF9LAorCXsgMiwgMTMsICA5LCAxNiwgMHg0NX0sCisJeyAyLCAxMiwgMTAsIDE2LCAweDM5fSwKKwl7IDIsIDEzLCAgOCwgIDgsIDB4NDF9LAorCXsgMiwgMTIsICA5LCAgOCwgMHgzNX0sCisJeyAyLCAxMiwgIDgsICA0LCAweDMxfSB9OworCit2b2lkICAgICBYR0lOZXdfU2V0RFJBTVNpemVfMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X1NldERSQU1TaXplXzMxMChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK3ZvaWQgICAgIFhHSU5ld19TZXRNZW1vcnlDbG9jayhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIoc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIzNDAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOwordm9pZCBYR0lOZXdfU2V0RFJBTURlZmF1bHRSZWdpc3RlcjM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRYRzIwRFJBTVR5cGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciBYR0lJbml0TmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKTsKKworaW50ICAgICAgWEdJTmV3X0REUlNpemluZzM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK3ZvaWQgICAgIFhHSU5ld19EaXNhYmxlUmVmcmVzaChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKSA7Cit2b2lkICAgICBYR0lOZXdfQ2hlY2tCdXNXaWR0aF8zMTAoc3RydWN0IHZiX2RldmljZV9pbmZvICopIDsKK2ludCAgICAgIFhHSU5ld19TRFJTaXppbmcoc3RydWN0IHZiX2RldmljZV9pbmZvICopOworaW50ICAgICAgWEdJTmV3X0REUlNpemluZyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7Cit2b2lkICAgICBYR0lOZXdfRW5hYmxlUmVmcmVzaChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKIGludCAgICAgIFhHSU5ld19SQU1UeXBlOyAgICAgICAgICAgICAgICAgIC8qaW50ICAgICAgTW9kZUlET2Zmc2V0LFN0YW5kVGFibGUsQ1JUMVRhYmxlLFNjcmVlbk9mZnNldCxSRUZJbmRleDsqLwotVUxPTkcJIFVOSVJPTTsJCQkgIC8qIFVOSVJPTSAqLwotQk9PTEVBTiAgQ2hrTEZCKCBQVkJfREVWSUNFX0lORk8gKTsKLXZvaWQgICAgIFhHSU5ld19EZWxheTE1dXMoVUxPTkcpOwotdm9pZCAgICAgU2V0UG93ZXJDb25zdW1lIChQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVMT05HIFhHSV9QM2Q0UG9ydCk7Ci12b2lkIAkgUmVhZFZCSU9TVGFibERhdGEoIFVDSEFSIENoaXBUeXBlICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSU5ld19ERFIxeF9NUlNfWEcyMCggVUxPTkcgUDNjNCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKTsKLXZvaWQgICAgIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjcoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKTsKLXZvaWQgCSBYR0lOZXdfQ2hrU2Vuc2VTdGF0dXMgKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKSA7Ci12b2lkICAgICBYR0lOZXdfU2V0TW9kZVNjcmF0Y2ggKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKSA7Ci12b2lkICAgICBYR0lOZXdfR2V0WEcyMVNlbnNlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKSA7Ci1VQ0hBUiAgICBHZXRYRzIxRlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSU5ld19HZXRYRzI3U2Vuc2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pIDsKLVVDSEFSICAgIEdldFhHMjdGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwordW5zaWduZWQgbG9uZwkgVU5JUk9NOwkJCSAgLyogVU5JUk9NICovCit1bnNpZ25lZCBjaGFyICBDaGtMRkIoc3RydWN0IHZiX2RldmljZV9pbmZvICopOwordm9pZCAgICAgWEdJTmV3X0RlbGF5MTV1cyh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgICAgIFNldFBvd2VyQ29uc3VtZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSB1bnNpZ25lZCBsb25nIFhHSV9QM2Q0UG9ydCk7Cit2b2lkICAgICBSZWFkVkJJT1NUYWJsRGF0YSh1bnNpZ25lZCBjaGFyIENoaXBUeXBlLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJTmV3X0REUjF4X01SU19YRzIwKHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pOwordm9pZCAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyNyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7Cit2b2lkICAgICBYR0lOZXdfQ2hrU2Vuc2VTdGF0dXMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykgOwordm9pZCAgICAgWEdJTmV3X1NldE1vZGVTY3JhdGNoKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pIDsKK3ZvaWQgICAgIFhHSU5ld19HZXRYRzIxU2Vuc2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykgOwordW5zaWduZWQgY2hhciAgICBHZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lOZXdfR2V0WEcyN1NlbnNlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pIDsKK3Vuc2lnbmVkIGNoYXIgICAgR2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCi0jaWZkZWYgV0lOMjAwMAotLyogW0JpbGx5XSAyMDA3LzA1LzIwIEZvciBDSDcwMDcgKi8KLWV4dGVybiAgVUNIQVIgQ0g3MDA3VFZSZWdfVU5UU0NbXVs4XSxDSDcwMDdUVlJlZ19PTlRTQ1tdWzhdLENINzAwN1RWUmVnX1VQQUxbXVs4XSxDSDcwMDdUVlJlZ19PUEFMW11bOF07Ci1leHRlcm4gIFVDSEFSIFhHSTcwMDdfQ0hUVlZDTEtVTlRTQ1tdLFhHSTcwMDdfQ0hUVlZDTEtPTlRTQ1tdLFhHSTcwMDdfQ0hUVlZDTEtVUEFMW10sWEdJNzAwN19DSFRWVkNMS09QQUxbXTsKLSNlbmRpZgotCi0jaWZkZWYgTElOVVhfS0VSTkVMCi12b2lkIERlbGF5VVMoVUxPTkcgTWljcm9TZWNvbmRzKQordm9pZCBEZWxheVVTKHVuc2lnbmVkIGxvbmcgTWljcm9TZWNvbmRzKQogewogCXVkZWxheShNaWNyb1NlY29uZHMpOwogfQotI2VuZGlmCisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBGdW5jdGlvbiA6IFhHSUluaXROZXcgKi8KQEAgLTE1Niw0NiArMTE4LDQ0IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSUluaXROZXcoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKQordW5zaWduZWQgY2hhciBYR0lJbml0TmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKQogewogCi0gICAgVkJfREVWSUNFX0lORk8gVkJJTkY7Ci0gICAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gPSAmVkJJTkY7Ci0gICAgVUNIQVIgICBpICwgdGVtcCA9IDAgLCB0ZW1wMSA7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKKyAgICB1bnNpZ25lZCBjaGFyICAgaSwgdGVtcCA9IDAsIHRlbXAxIDsKICAgICAgLy8gICAgICAgVkJJT1NWZXJzaW9uWyA1IF0gOwotICAgIFBVQ0hBUiAgdm9sYXRpbGUgcFZpZGVvTWVtb3J5OworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBWaWRlb01lbW9yeTsKIAotICAgIC8qIFVMT05HIGosIGsgOyAqLworICAgIC8qIHVuc2lnbmVkIGxvbmcgaiwgayA7ICovCiAKLSAgICBQWEdJX0RTUmVnIHBTUiA7CisgICAgc3RydWN0IFhHSV9EU1JlZyAqcFNSIDsKIAotICAgIFVMT05HIFRlbXAgOworICAgIHVuc2lnbmVkIGxvbmcgVGVtcCA7CiAKICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwogCiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKIAotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKFVMT05HKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CisgICAgcFZCSW5mby0+QmFzZUFkZHIgPSAodW5zaWduZWQgbG9uZylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOwogCi0gICAgcFZpZGVvTWVtb3J5ID0gKCBQVUNIQVIgKXBWQkluZm8tPlJPTUFkZHI7CisgICAgcFZpZGVvTWVtb3J5ID0gKHVuc2lnbmVkIGNoYXIgKilwVkJJbmZvLT5ST01BZGRyOwogCiAKIC8vICAgIE5ld2RlYnVnY29kZSggMHg5OSApIDsKIAogCiAgICAvKiBpZiAoIHBWQkluZm8tPlJPTUFkZHIgPT0gMCApICovCi0gICAvKiByZXR1cm4oIEZBTFNFICkgOyAqLworICAgLyogcmV0dXJuKCAwICkgOyAqLwogCi0gICAgaWYgKCBwVkJJbmZvLT5GQkFkZHIgPT0gMCApCi17CisgICAgaWYgKHBWQkluZm8tPkZCQWRkciA9PSAwKSB7CiAgICAgICAgcHJpbnRrKCJcbiBwVkJJbmZvLT5GQkFkZHIgPT0gMCAiKTsKLSAgICAgICByZXR1cm4oIEZBTFNFICkgOwotfQorICAgICAgIHJldHVybiAwOworICAgIH0KIHByaW50aygiMSIpOwotICAgIGlmICggcFZCSW5mby0+QmFzZUFkZHIgPT0gMCApCi17Ci0gICAgICAgcHJpbnRrKCJcbnBWQkluZm8tPkJhc2VBZGRyID09IDAgIik7Ci0gICAgICAgIHJldHVybiggRkFMU0UgKSA7CitpZiAocFZCSW5mby0+QmFzZUFkZHIgPT0gMCkgeworCXByaW50aygiXG5wVkJJbmZvLT5CYXNlQWRkciA9PSAwICIpOworCXJldHVybiAwOwogfQogcHJpbnRrKCIyIik7CiAKQEAgLTIwNSwxMiArMTY1LDkgQEAKIHByaW50aygiMyIpOwogCiBpZiAoICFId0RldmljZUV4dGVuc2lvbi0+YkludGVncmF0ZWRNTUVuYWJsZWQgKQotewotICAgICAgICByZXR1cm4oIEZBTFNFICkgOwkvKiBhbGFuICovCi19Ci1wcmludGsoIjQiKTsKKwlyZXR1cm4gMDsJLyogYWxhbiAqLwogCi0vLyAgICBYR0lfTWVtb3J5Q29weSggVkJJT1NWZXJzaW9uICwgSHdEZXZpY2VFeHRlbnNpb24tPnN6VkJJT1NWZXIgLCA0ICkgOworcHJpbnRrKCI0Iik7CiAKICAvLyAgIFZCSU9TVmVyc2lvblsgNCBdID0gMHgwIDsKIApAQCAtNDA3LDggKzM2NCw4IEBACiAgICAgWEdJX1VuTG9ja0NSVDIoIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvKSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MFBvcnQgLCAweDNGICwgMHhFRiAsIDB4MDAgKSA7CS8qIGFsYW4sIGRpc2FibGUgVmlkZW9DYXB0dXJlICovCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDAgLCAweDAwICkgOwotICAgIHRlbXAxID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDdCICkgOwkJLyogY2hrIGlmIEJDTEs+PTEwME1IeiAqLwotICAgIHRlbXAgPSAoIFVDSEFSICkoICggdGVtcDEgPj4gNCApICYgMHgwRiApIDsKKyAgICB0ZW1wMSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4N0IpOwkvKiBjaGsgaWYgQkNMSz49MTAwTUh6ICovCisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSgodGVtcDEgPj4gNCkgJiAweDBGKTsKIAogCiAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDAyICwgKCAqcFZCSW5mby0+cENSVDJEYXRhXzFfMiApICkgOwpAQCAtNDYwLDE1ICs0MTcsMTQgQEAKICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDgzICwgMHgwMCApIDsKIHByaW50aygiMTgxIik7CiAKLSAgICBpZiAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5iU2tpcFNlbnNlID09IEZBTFNFICkKLSAgICB7Ci1wcmludGsoIjE4MiIpOworaWYgKEh3RGV2aWNlRXh0ZW5zaW9uLT5iU2tpcFNlbnNlID09IDApIHsKKwlwcmludGsoIjE4MiIpOwogCiAgICAgICAgIFhHSV9TZW5zZUNSVDEocFZCSW5mbykgOwogCi1wcmludGsoIjE4MyIpOworCXByaW50aygiMTgzIik7CiAgICAgICAgIC8qIFhHSU5ld19EZXRlY3RNb25pdG9yKCBId0RldmljZUV4dGVuc2lvbiApIDsgKi8KLXBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAwOworCXBWQkluZm8tPklGX0RFRl9DSDcwMDcgPSAwOwogICAgICAgICBpZiAoICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzIxICkgJiYgKHBWQkluZm8tPklGX0RFRl9DSDcwMDcpICkKICAgICAgICAgewogcHJpbnRrKCIxODQiKTsKQEAgLTUwNCw4ICs0NjAsNyBAQAogCiAgICAgICAgIFhHSU5ld19TZXREUkFNRGVmYXVsdFJlZ2lzdGVyMzQwKCBId0RldmljZUV4dGVuc2lvbiAsICBwVkJJbmZvLT5QM2Q0LCAgcFZCSW5mbyApIDsKIAotICAgICAgICBpZiAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5iU2tpcERyYW1TaXppbmcgPT0gVFJVRSApCi0gICAgICAgIHsKKwlpZiAoSHdEZXZpY2VFeHRlbnNpb24tPmJTa2lwRHJhbVNpemluZyA9PSAxKSB7CiAgICAgICAgICAgICBwU1IgPSBId0RldmljZUV4dGVuc2lvbi0+cFNSIDsKICAgICAgICAgICAgIGlmICggcFNSIT1OVUxMICkKICAgICAgICAgICAgIHsKQEAgLTUxOSwxNSArNDc0LDYgQEAKICAgICAgICAgfSAgIAkvKiBTa2lwRHJhbVNpemluZyAqLwogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSNpZiAwCi0gICAgICAgICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA9PSBYRzIwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIAlYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTMgLCBwVkJJbmZvLT5TUjE1WzBdW1hHSU5ld19SQU1UeXBlXSApIDsKLSAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTQgLCBwVkJJbmZvLT5TUjE1WzFdW1hHSU5ld19SQU1UeXBlXSApIDsKLSAgICAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjAgLCAweDIwICkgOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotI2VuZGlmCiB7CiBwcmludGsoIjIwIik7CiAKQEAgLTU0NCw3ICs0OTAsNyBAQAogICAgIC8qIFNldERlZkV4dDJSZWdzIGJlZ2luICovCiAvKgogICAgIEFHUCA9IDEgOwotICAgIHRlbXAgPSggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzQSApIDsKKyAgICB0ZW1wID0odW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDNBKSA7CiAgICAgdGVtcCAmPSAweDMwIDsKICAgICBpZiAoIHRlbXAgPT0gMHgzMCApCiAgICAgICAgIEFHUCA9IDAgOwpAQCAtNTYzLDcgKzUwOSw3IEBACiAvLyAgICBUZW1wID0gKCBJblBvcnRMb25nKCAweGNmYyApICYgMHhGRkZGICkgOwogLy8gICAgaWYgKCBUZW1wID09IDB4MTAzOSApCiAvLyAgICB7Ci0gICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMiAsICggVUNIQVIgKSggKCAqcFZCSW5mby0+cFNSMjIgKSAmIDB4RkUgKSApIDsKKwlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDIyLCAodW5zaWduZWQgY2hhcikoKCpwVkJJbmZvLT5wU1IyMikgJiAweEZFKSk7CiAvLyAgICB9CiAvLyAgICBlbHNlCiAvLyAgICB7CkBAIC01ODUsNyArNTMxLDcgQEAKIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNCAsIDB4MzEpOwogcHJpbnRrKCIyNSIpOwogCi0gICAgcmV0dXJuKCBUUlVFICkgOworcmV0dXJuIDE7CiB9IC8qIGVuZCBvZiBpbml0ICovCiAKIApAQCAtNjAwLDkgKzU0NiwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJTmV3X0dldFhHMjBEUkFNVHlwZSggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lOZXdfR2V0WEcyMERSQU1UeXBlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRhdGEsIHRlbXAgOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSwgdGVtcDsKIAogICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA8IFhHMjAgKQogICAgIHsKQEAgLTY3MCw5ICs2MTcsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJTmV3X0dldDMxMERSQU1UeXBlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lOZXdfR2V0MzEwRFJBTVR5cGUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRhdGEgOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSA7CiAKICAgLyogaW5kZXggPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUEgKSA7ICovCiAgIC8qIGluZGV4ICY9IDA3IDsgKi8KQEAgLTY5NCw3ICs2NDEsNyBAQAogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgotdm9pZCBYR0lOZXdfRGVsYXkxNXVzKFVMT05HIHVsTWljcnNvU2VjKQordm9pZCBYR0lOZXdfRGVsYXkxNXVzKHVuc2lnbmVkIGxvbmcgdWxNaWNyc29TZWMpCiB7CiB9CiAqLwpAQCAtNzA2LDkgKzY1Myw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TRFJfTVJTKCAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lOZXdfU0RSX01SUyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgOwogCiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNiApIDsKICAgICBkYXRhICY9IDB4M0YgOyAgICAgICAgICAvKiBTUjE2IEQ3PTAsRDY9MCAqLwpAQCAtNzI2LDcgKzY3Myw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIxeF9NUlNfMzQwKCBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIxeF9NUlNfMzQwKHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIFhHSU5ld19TZXRSZWcxKCBQM2M0ICwgMHgxOCAsIDB4MDEgKSA7CiAgICAgWEdJTmV3X1NldFJlZzEoIFAzYzQgLCAweDE5ICwgMHgyMCApIDsKQEAgLTc2NCw3ICs3MTEsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSMnhfTVJTXzM0MCggVUxPTkcgUDNjNCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSMnhfTVJTXzM0MCh1bnNpZ25lZCBsb25nIFAzYzQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnMSggUDNjNCAsIDB4MTggLCAweDAwICkgOwogICAgIFhHSU5ld19TZXRSZWcxKCBQM2M0ICwgMHgxOSAsIDB4MjAgKSA7CkBAIC03OTMsOSArNzQwLDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFJJSV9Cb290dXBfWEcyNyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsICBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFJJSV9Cb290dXBfWEcyNyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIFAzZDQgPSBQM2M0ICsgMHgxMCA7CisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUDNjNCArIDB4MTAgOwogICAgIFhHSU5ld19SQU1UeXBlID0gKCBpbnQgKVhHSU5ld19HZXRYRzIwRFJBTVR5cGUoIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKICAgICBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKIApAQCAtODcxLDkgKzgxOSwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSMl9NUlNfWEcyMCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsICBVTE9ORyBQM2M0ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIyX01SU19YRzIwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICB1bnNpZ25lZCBsb25nIFAzYzQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyBQM2Q0ID0gUDNjNCArIDB4MTAgOworICAgIHVuc2lnbmVkIGxvbmcgUDNkNCA9IFAzYzQgKyAweDEwIDsKIAogICAgIFhHSU5ld19SQU1UeXBlID0gKCBpbnQgKVhHSU5ld19HZXRYRzIwRFJBTVR5cGUoIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKICAgICBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKQEAgLTkyMyw5ICs4NzIsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0REUjJfTVJTX1hHMjcoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCAgVUxPTkcgUDNjNCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSMl9NUlNfWEcyNyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSAgdW5zaWduZWQgbG9uZyBQM2M0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUxPTkcgUDNkNCA9IFAzYzQgKyAweDEwIDsKKyAgICB1bnNpZ25lZCBsb25nIFAzZDQgPSBQM2M0ICsgMHgxMCA7CiAKICAgICAgWEdJTmV3X1JBTVR5cGUgPSAoIGludCApWEdJTmV3X0dldFhHMjBEUkFNVHlwZSggSHdEZXZpY2VFeHRlbnNpb24gLCBwVkJJbmZvICkgOwogICAgICBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKQEAgLTEwMDEsOSArOTUxLDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIxeF9EZWZhdWx0UmVnaXN0ZXIoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCAgVUxPTkcgUG9ydCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRERSMXhfRGVmYXVsdFJlZ2lzdGVyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgdW5zaWduZWQgbG9uZyBQb3J0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUxPTkcgUDNkNCA9IFBvcnQgLAorICAgIHVuc2lnbmVkIGxvbmcgUDNkNCA9IFBvcnQgLAogICAgICAgICAgICBQM2M0ID0gUG9ydCAtIDB4MTAgOwogCiAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID49IFhHMjAgKQpAQCAtMTA2MSw5ICsxMDEyLDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19ERFIyeF9EZWZhdWx0UmVnaXN0ZXIoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCAgVUxPTkcgUG9ydCAsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19ERFIyeF9EZWZhdWx0UmVnaXN0ZXIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICB1bnNpZ25lZCBsb25nIFBvcnQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyBQM2Q0ID0gUG9ydCAsCisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUG9ydCAsCiAgICAgICAgICAgIFAzYzQgPSBQb3J0IC0gMHgxMCA7CiAKICAgICBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soIEh3RGV2aWNlRXh0ZW5zaW9uICwgcFZCSW5mbyApIDsKQEAgLTExMTIsOSArMTA2NCwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSMl9EZWZhdWx0UmVnaXN0ZXIoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFVMT05HIFBvcnQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUjJfRGVmYXVsdFJlZ2lzdGVyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSB1bnNpZ25lZCBsb25nIFBvcnQsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyBQM2Q0ID0gUG9ydCAsCisgICAgdW5zaWduZWQgbG9uZyBQM2Q0ID0gUG9ydCAsCiAgICAgICAgICAgIFAzYzQgPSBQb3J0IC0gMHgxMCA7CiAKICAgICAvKiBrZWVwIGZvbGxvd2luZyBzZXR0aW5nIHNlcXVlbmNlLCBlYWNoIHNldHRpbmcgaW4gdGhlIHNhbWUgcmVnIGluc2VydCBpZGxlICovCkBAIC0xMTUwLDEyICsxMTAzLDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXREUkFNRGVmYXVsdFJlZ2lzdGVyMzQwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgIFVMT05HIFBvcnQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X1NldERSQU1EZWZhdWx0UmVnaXN0ZXIzNDAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBQb3J0LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgdGVtcCAsIHRlbXAxICwgdGVtcDIgLCB0ZW1wMyAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wLCB0ZW1wMSwgdGVtcDIsIHRlbXAzICwKICAgICAgICAgICBpICwgaiAsIGsgOwogCi0gICAgVUxPTkcgUDNkNCA9IFBvcnQgLAorICAgIHVuc2lnbmVkIGxvbmcgUDNkNCA9IFBvcnQgLAogICAgICAgICAgICBQM2M0ID0gUG9ydCAtIDB4MTAgOwogCiAgICAgWEdJTmV3X1NldFJlZzEoIFAzZDQgLCAweDZEICwgcFZCSW5mby0+Q1I0MFsgOCBdWyBYR0lOZXdfUkFNVHlwZSBdICkgOwpAQCAtMTI5MywxMSArMTI0NywxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSX01SUyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUl9NUlMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKIAotICAgIFBVQ0hBUiB2b2xhdGlsZSBwVmlkZW9NZW1vcnkgPSAoIFBVQ0hBUiApcFZCSW5mby0+Uk9NQWRkciA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqcFZpZGVvTWVtb3J5ID0gKHVuc2lnbmVkIGNoYXIgKilwVkJJbmZvLT5ST01BZGRyOwogCiAgICAgLyogU1IxNiA8LSAxRixERiwyRixBRiAqLwogICAgIC8qIHlyaXZlciBtb2RpZmllZCBTUjE2IDwtIDBGLERGLDBGLEFGICovCkBAIC0xMzYxLDExICsxMzE1LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19WZXJpZnlNY2xrKCBQWEdJX0hXX0RFVklDRV9JTkZPICBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfVmVyaWZ5TWNsayhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFBVQ0hBUiBwVmlkZW9NZW1vcnkgPSBwVkJJbmZvLT5GQkFkZHIgOwotICAgIFVDSEFSIGkgLCBqIDsKLSAgICBVU0hPUlQgVGVtcCAsIFNSMjEgOworICAgIHVuc2lnbmVkIGNoYXIgKnBWaWRlb01lbW9yeSA9IHBWQkluZm8tPkZCQWRkciA7CisgICAgdW5zaWduZWQgY2hhciBpLCBqIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBUZW1wICwgU1IyMSA7CiAKICAgICBwVmlkZW9NZW1vcnlbIDAgXSA9IDB4YWEgOyAJCS8qIGFsYW4gKi8KICAgICBwVmlkZW9NZW1vcnlbIDE2IF0gPSAweDU1IDsgCS8qIG5vdGU6IFBDSSByZWFkIGNhY2hlIGlzIG9mZiAqLwpAQCAtMTQwNyw5ICsxMzYxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldERSQU1TaXplXzM0MCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfU2V0RFJBTVNpemVfMzQwKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUICBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgZGF0YSA7CiAKICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwogICAgIHBWQkluZm8tPkZCQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7CkBAIC0xNDE4LDcgKzEzNzIsNyBAQAogCiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIxICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMSAsICggVVNIT1JUICkoIGRhdGEgJiAweERGICkgKSA7CS8qIGRpc2FibGUgcmVhZCBjYWNoZSAqLworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MjEsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSAmIDB4REYpKTsJLyogZGlzYWJsZSByZWFkIGNhY2hlICovCiAgICAgWEdJX0Rpc3BsYXlPZmYoIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvICk7CiAKICAgICAvKmRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MSApIDsqLwpAQCAtMTQyNiw4ICsxMzgwLDcgQEAKICAgICAvKlhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwMSAsIGRhdGEgKSA7Ki8JCQkvKiBUdXJuIE9GRiBEaXNwbGF5ICovCiAgICAgWEdJTmV3X0REUlNpemluZzM0MCggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7CiAgICAgZGF0YT1YR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjEgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIxICwgKCBVU0hPUlQgKSggZGF0YSB8IDB4MjAgKSApIDsJLyogZW5hYmxlIHJlYWQgY2FjaGUgKi8KLQorICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MjEsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSB8IDB4MjApKTsgLyogZW5hYmxlIHJlYWQgY2FjaGUgKi8KIH0KIAogCkBAIC0xNDM3LDkgKzEzOTAsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0RFJBTVNpemVfMzEwKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19TZXREUkFNU2l6ZV8zMTAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CiAgICAgcFZCSW5mby0+Uk9NQWRkciAgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSAsCiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKICNpZmRlZiBYR0kzMDEKQEAgLTE0NTUsNyArMTQwOCw3IEBACiAgICAgWEdJU2V0TW9kZU5ldyggSHdEZXZpY2VFeHRlbnNpb24gLCAweDJlICkgOwogCiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgyMSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MjEgLCAoIFVTSE9SVCApKCBkYXRhICYgMHhERiApICkgOwkvKiBkaXNhYmxlIHJlYWQgY2FjaGUgKi8KKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDIxLCAodW5zaWduZWQgc2hvcnQpKGRhdGEgJiAweERGKSk7CS8qIGRpc2FibGUgcmVhZCBjYWNoZSAqLwogCiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxICkgOwogICAgIGRhdGEgfD0gMHgyMCA7CkBAIC0xNDY0LDcgKzE0MTcsNyBAQAogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTYgKSA7CiAKIAotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNiAsICggVVNIT1JUICkoIGRhdGEgfCAweDBGICkgKSA7CQkvKiBhc3N1bWUgbG93ZXN0IHNwZWVkIERSQU0gKi8KKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDE2LCAodW5zaWduZWQgc2hvcnQpKGRhdGEgfCAweDBGKSk7CS8qIGFzc3VtZSBsb3dlc3Qgc3BlZWQgRFJBTSAqLwogCiAgICAgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIoIHBWQkluZm8gKSA7CiAgICAgWEdJTmV3X0Rpc2FibGVSZWZyZXNoKCBId0RldmljZUV4dGVuc2lvbiwgcFZCSW5mbyApIDsKQEAgLTE0ODUsMTEgKzE0MzgsMTEgQEAKIAogCiAKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTYgLCBwVkJJbmZvLT5TUjE1WyAxIF1bIFhHSU5ld19SQU1UeXBlIF0gKSA7CS8qIHJlc3RvcmUgU1IxNiAqLworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MTYsIHBWQkluZm8tPlNSMTVbMV1bWEdJTmV3X1JBTVR5cGVdKTsgLyogcmVzdG9yZSBTUjE2ICovCiAKICAgICBYR0lOZXdfRW5hYmxlUmVmcmVzaCggIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvICkgOwogICAgIGRhdGE9WEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLDB4MjEgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDIxICwgKCBVU0hPUlQgKSggZGF0YSB8IDB4MjAgKSApIDsJLyogZW5hYmxlIHJlYWQgY2FjaGUgKi8KKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDIxLCAodW5zaWduZWQgc2hvcnQpKGRhdGEgfCAweDIwKSk7CS8qIGVuYWJsZSByZWFkIGNhY2hlICovCiB9CiAKIApAQCAtMTUwMSwxNCArMTQ1NCwxNCBAQAogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIzNDAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKQordm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcjM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikKIHsKLSAgICBVQ0hBUiBkYXRhIDsKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGEgOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyBWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8gPSAmVkJJTkY7CiAgICAgcFZCSW5mby0+Uk9NQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpcnR1YWxSb21CYXNlIDsKICAgICBwVkJJbmZvLT5GQkFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaWRlb01lbW9yeUFkZHJlc3MgOwotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKFVMT05HKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CisgICAgcFZCSW5mby0+QmFzZUFkZHIgPSAodW5zaWduZWQgbG9uZylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOwogICAgIHBWQkluZm8tPklTWFBET1MgPSAwIDsKIAogICAgIHBWQkluZm8tPlAzYzQgPSBwVkJJbmZvLT5CYXNlQWRkciArIDB4MTQgOwpAQCAtMTU1NSw3ICsxNTA4LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3RlcihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCBYR0lOZXdfR2V0MzEwRFJBTVR5cGUoIHBWQkluZm8gKSA8IDIgKQogICAgIHsKQEAgLTE1NzUsOSArMTUyOCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19EaXNhYmxlUmVmcmVzaCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRGlzYWJsZVJlZnJlc2goc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0ICBkYXRhIDsKIAogCiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxQiApIDsKQEAgLTE1OTMsNyArMTU0Niw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19FbmFibGVSZWZyZXNoKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19FbmFibGVSZWZyZXNoKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUIgLCBwVkJJbmZvLT5TUjE1WyAzIF1bIFhHSU5ld19SQU1UeXBlIF0gKSA7CS8qIFNSMUIgKi8KQEAgLTE2MDgsOSArMTU2MSwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRGlzYWJsZUNoYW5uZWxJbnRlcmxlYXZpbmcoIGludCBpbmRleCAsIFVTSE9SVCBYR0lOZXdfRERSRFJBTV9UWVBFW11bIDUgXSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRGlzYWJsZUNoYW5uZWxJbnRlcmxlYXZpbmcoaW50IGluZGV4LAorCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBYR0lOZXdfRERSRFJBTV9UWVBFW11bNV0sCisJCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE1ICkgOwogICAgIGRhdGEgJj0gMHgxRiA7CkBAIC0xNjQyLDkgKzE1OTcsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldERSQU1TaXppbmdUeXBlKCBpbnQgaW5kZXggLCBVU0hPUlQgRFJBTVRZUEVfVEFCTEVbXVsgNSBdICxQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X1NldERSQU1TaXppbmdUeXBlKGludCBpbmRleCwKKwkJCSAgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGE7CiAKICAgICBkYXRhID0gRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDQgXSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2M0ICwgMHgxMyAsIDB4ODAgLCBkYXRhICkgOwpAQCAtMTY1OSwxMiArMTYxNiwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfQ2hlY2tCdXNXaWR0aF8zMTAoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0NoZWNrQnVzV2lkdGhfMzEwKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7Ci0gICAgUFVMT05HIHZvbGF0aWxlIHBWaWRlb01lbW9yeSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcFZpZGVvTWVtb3J5IDsKIAotICAgIHBWaWRlb01lbW9yeSA9IChQVUxPTkcpIHBWQkluZm8tPkZCQWRkcjsKKyAgICBwVmlkZW9NZW1vcnkgPSAodW5zaWduZWQgbG9uZyAqKSBwVkJJbmZvLT5GQkFkZHI7CiAKICAgICBpZiAoIFhHSU5ld19HZXQzMTBEUkFNVHlwZSggcFZCSW5mbyApIDwgMiApCiAgICAgewpAQCAtMTY5MCw3ICsxNjQ3LDcgQEAKICAgICAgICAgICAgIFhHSU5ld19EYXRhQnVzV2lkdGggPSA2NCA7CiAgICAgICAgICAgICBYR0lOZXdfQ2hhbm5lbEFCID0gMCA7CiAgICAgICAgICAgICBkYXRhPVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNCApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNCAsICggVVNIT1JUICkoIGRhdGEgJiAweEZEICkgKSA7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MTQsICh1bnNpZ25lZCBzaG9ydCkoZGF0YSAmIDB4RkQpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICggKCBwVmlkZW9NZW1vcnlbIDEgXSAhPSAweDQ1Njc4OUFCTCApIHx8ICggcFZpZGVvTWVtb3J5WyAwIF0gIT0gMHgwMTIzNDU2N0wgKSApCkBAIC0xNjk5LDcgKzE2NTYsOCBAQAogICAgICAgICAgICAgWEdJTmV3X0RhdGFCdXNXaWR0aCA9IDY0IDsKICAgICAgICAgICAgIFhHSU5ld19DaGFubmVsQUIgPSAxIDsKICAgICAgICAgICAgIGRhdGE9WEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDE0ICwgKCBVU0hPUlQgKSggKCBkYXRhICYgMHhGRCApIHwgMHgwMSApICkgOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDE0LAorCQkJICAgKHVuc2lnbmVkIHNob3J0KSgoZGF0YSAmIDB4RkQpIHwgMHgwMSkpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIDsKQEAgLTE3OTIsOSArMTc1MCwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19TZXRSYW5rKCBpbnQgaW5kZXggLCBVQ0hBUiBSYW5rTm8gLCBVQ0hBUiBYR0lOZXdfQ2hhbm5lbEFCICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19TZXRSYW5rKGludCBpbmRleCwKKwkJICAgdW5zaWduZWQgY2hhciBSYW5rTm8sCisJCSAgIHVuc2lnbmVkIGNoYXIgWEdJTmV3X0NoYW5uZWxBQiwKKwkJICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhOwogICAgIGludCBSYW5rU2l6ZSA7CiAKICAgICBpZiAoICggUmFua05vID09IDIgKSAmJiAoIERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAwIF0gPT0gMiApICkKQEAgLTE4MjksOSArMTc5MSwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19TZXRERFJDaGFubmVsKCBpbnQgaW5kZXggLCBVQ0hBUiBDaGFubmVsTm8gLCBVQ0hBUiBYR0lOZXdfQ2hhbm5lbEFCICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19TZXRERFJDaGFubmVsKGludCBpbmRleCwKKwkJCSB1bnNpZ25lZCBjaGFyIENoYW5uZWxObywKKwkJCSB1bnNpZ25lZCBjaGFyIFhHSU5ld19DaGFubmVsQUIsCisJCQkgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUICBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhOwogICAgIGludCBSYW5rU2l6ZSA7CiAKICAgICBSYW5rU2l6ZSA9IERSQU1UWVBFX1RBQkxFW2luZGV4XVszXS8yICogWEdJTmV3X0RhdGFCdXNXaWR0aC8zMjsKQEAgLTE4NjUsMzAgKzE4MzEsMjkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tDb2x1bW4oIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19DaGVja0NvbHVtbihpbnQgaW5kZXgsCisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCBpIDsKLSAgICBVTE9ORyBJbmNyZW1lbnQgLCBQb3NpdGlvbiA7CisgICAgdW5zaWduZWQgbG9uZyBJbmNyZW1lbnQgLCBQb3NpdGlvbiA7CiAKICAgICAvKiBJbmNyZW1lbnQgPSAxIDw8ICggRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDIgXSArIFhHSU5ld19EYXRhQnVzV2lkdGggLyA2NCArIDEgKSA7ICovCiAgICAgSW5jcmVtZW50ID0gMSA8PCAoIDEwICsgWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDY0ICkgOwogCiAgICAgZm9yKCBpID0gMCAsIFBvc2l0aW9uID0gMCA7IGkgPCAyIDsgaSsrICkKICAgICB7Ci0gICAgICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSA9IFBvc2l0aW9uIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKwkgICAgKigodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpID0gUG9zaXRpb247CisJICAgIFBvc2l0aW9uICs9IEluY3JlbWVudCA7CiAgICAgfQogCi0jaWZkZWYgV0lOMjAwMCAgLyogY2hpYXdlbiBmb3IgbGludXggc29sdXRpb24gKi8KLSAgICBEZWxheVVTKCAxMDAgKSA7Ci0jZW5kaWYKIAogICAgIGZvciggaSA9IDAgLCBQb3NpdGlvbiA9IDAgOyBpIDwgMiA7IGkrKyApCiAgICAgewogICAgICAgICAvKiBpZiAoIHBWQkluZm8tPkZCQWRkclsgUG9zaXRpb24gXSAhPSBQb3NpdGlvbiApICovCi0gICAgICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApICE9IFBvc2l0aW9uICkKLSAgICAgICAgICAgIHJldHVybiggMCApIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKwkgICAgaWYgKCgqKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSAhPSBQb3NpdGlvbikKKwkJICAgIHJldHVybiAwOworCSAgICBQb3NpdGlvbiArPSBJbmNyZW1lbnQ7CiAgICAgfQogICAgIHJldHVybiggMSApIDsKIH0KQEAgLTE5MDAsMjYgKzE4NjUsMjggQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tCYW5rcyggaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrQmFua3MoaW50IGluZGV4LAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50IGkgOwotICAgIFVMT05HIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKKyAgICB1bnNpZ25lZCBsb25nIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKIAogICAgIEluY3JlbWVudCA9IDEgPDwgKCBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMiBdICsgWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDY0ICsgMiApIDsKIAogICAgIGZvciggaSA9IDAgLCBQb3NpdGlvbiA9IDAgOyBpIDwgNCA7IGkrKyApCiAgICAgewogICAgICAgICAvKiBwVkJJbmZvLT5GQkFkZHJbIFBvc2l0aW9uIF0gPSBQb3NpdGlvbiA7ICovCi0gICAgICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSA9IFBvc2l0aW9uIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKwkgICAgKigodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpID0gUG9zaXRpb247CisJICAgIFBvc2l0aW9uICs9IEluY3JlbWVudCA7CiAgICAgfQogCiAgICAgZm9yKCBpID0gMCAsIFBvc2l0aW9uID0gMCA7IGkgPCA0IDsgaSsrICkKICAgICB7CiAgICAgICAgIC8qIGlmIChwVkJJbmZvLT5GQkFkZHJbIFBvc2l0aW9uIF0gIT0gUG9zaXRpb24gKSAqLwotICAgICAgICBpZiAoICggKiggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSAhPSBQb3NpdGlvbiApCi0gICAgICAgICAgICByZXR1cm4oIDAgKSA7Ci0gICAgICAgIFBvc2l0aW9uICs9IEluY3JlbWVudCA7CisJICAgIGlmICgoKih1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgIT0gUG9zaXRpb24pCisJCSAgICByZXR1cm4gMDsKKwkgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50OwogICAgIH0KICAgICByZXR1cm4oIDEgKSA7CiB9CkBAIC0xOTMxLDEwICsxODk4LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X0NoZWNrUmFuayggaW50IFJhbmtObyAsIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19DaGVja1JhbmsoaW50IFJhbmtObywgaW50IGluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCBpIDsKLSAgICBVTE9ORyBJbmNyZW1lbnQgLCBQb3NpdGlvbiA7CisgICAgdW5zaWduZWQgbG9uZyBJbmNyZW1lbnQgLCBQb3NpdGlvbiA7CiAKICAgICBJbmNyZW1lbnQgPSAxIDw8ICggRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDIgXSArIERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAxIF0gKwogICAgICAgICAgICAgICAgICAgRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDAgXSArIFhHSU5ld19EYXRhQnVzV2lkdGggLyA2NCArIFJhbmtObyApIDsKQEAgLTE5NDIsMTggKzE5MTEsMTggQEAKICAgICBmb3IoIGkgPSAwICwgUG9zaXRpb24gPSAwIDsgaSA8IDIgOyBpKysgKQogICAgIHsKICAgICAgICAgLyogcFZCSW5mby0+RkJBZGRyWyBQb3NpdGlvbiBdID0gUG9zaXRpb24gOyAqLwotICAgICAgICAvKiAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKSApID0gUG9zaXRpb24gOyAqLwotICAgICAgICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgPSBQb3NpdGlvbiA7Ci0gICAgICAgIFBvc2l0aW9uICs9IEluY3JlbWVudCA7CisgICAgICAgIC8qICooICh1bnNpZ25lZCBsb25nICopKCBwVkJJbmZvLT5GQkFkZHIgKSApID0gUG9zaXRpb24gOyAqLworCSAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgPSBQb3NpdGlvbjsKKwkgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50OwogICAgIH0KIAogICAgIGZvciggaSA9IDAgLCBQb3NpdGlvbiA9IDAgOyBpIDwgMiA7IGkrKyApCiAgICAgewogICAgICAgICAvKiBpZiAoIHBWQkluZm8tPkZCQWRkclsgUG9zaXRpb24gXSAhPSBQb3NpdGlvbiApICovCi0gICAgICAgIC8qIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICkgKSAhPSBQb3NpdGlvbiApICovCi0gICAgICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApICE9IFBvc2l0aW9uICkKLSAgICAgICAgICAgIHJldHVybiggMCApIDsKLSAgICAgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50IDsKKyAgICAgICAgLyogaWYgKCAoICoodW5zaWduZWQgbG9uZyAqKSggcFZCSW5mby0+RkJBZGRyICkgKSAhPSBQb3NpdGlvbiApICovCisJICAgIGlmICgoKih1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgIT0gUG9zaXRpb24pCisJCSAgICByZXR1cm4gMDsKKwkgICAgUG9zaXRpb24gKz0gSW5jcmVtZW50OwogICAgIH0KICAgICByZXR1cm4oIDEgKTsKIH0KQEAgLTE5NjUsMTAgKzE5MzQsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tERFJSYW5rKCBpbnQgUmFua05vICwgaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0NoZWNrRERSUmFuayhpbnQgUmFua05vLCBpbnQgaW5kZXgsCisJCQl1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkJc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVMT05HIEluY3JlbWVudCAsIFBvc2l0aW9uIDsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgbG9uZyBJbmNyZW1lbnQgLCBQb3NpdGlvbiA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CiAKICAgICBJbmNyZW1lbnQgPSAxIDw8ICggRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDIgXSArIERSQU1UWVBFX1RBQkxFWyBpbmRleCBdWyAxIF0gKwogICAgICAgICAgICAgICAgICAgICAgICBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMCBdICsgWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDY0ICsgUmFua05vICkgOwpAQCAtMTk3NiwxOCArMTk0NywxOCBAQAogICAgIEluY3JlbWVudCArPSBJbmNyZW1lbnQgLyAyIDsKIAogICAgIFBvc2l0aW9uID0gMDsKLSAgICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiArIDAgKSApID0gMHgwMTIzNDU2NyA7Ci0gICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyAxICkgKSA9IDB4NDU2Nzg5QUIgOwotICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMiApICkgPSAweDU1NTU1NTU1IDsKLSAgICAqKCAoIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiArIDMgKSApID0gMHg1NTU1NTU1NSA7Ci0gICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKyA0ICkgKSA9IDB4QUFBQUFBQUEgOwotICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgNSApICkgPSAweEFBQUFBQUFBIDsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMCkpID0gMHgwMTIzNDU2NzsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMSkpID0gMHg0NTY3ODlBQjsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMikpID0gMHg1NTU1NTU1NTsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgMykpID0gMHg1NTU1NTU1NTsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgNCkpID0gMHhBQUFBQUFBQTsKKyAgICAqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICsgNSkpID0gMHhBQUFBQUFBQTsKIAotICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgMSApICkgPT0gMHg0NTY3ODlBQiApCi0gICAgICAgIHJldHVybiggMSApIDsKKyAgICBpZiAoKCoodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyAxKSkgPT0gMHg0NTY3ODlBQikKKwkgICAgcmV0dXJuIDE7CiAKLSAgICBpZiAoICggKiggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIDAgKSApID09IDB4MDEyMzQ1NjcgKQotICAgICAgICByZXR1cm4oIDAgKSA7CisgICAgaWYgKCgqKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgMCkpID09IDB4MDEyMzQ1NjcpCisJICAgIHJldHVybiAwOwogCiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNCApIDsKICAgICBkYXRhICY9IDB4RjMgOwpAQCAtMjAwNyw3ICsxOTc4LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tSYW5rcyggaW50IFJhbmtObyAsIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19DaGVja1JhbmtzKGludCBSYW5rTm8sIGludCBpbmRleCwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgRFJBTVRZUEVfVEFCTEVbXVs1XSwKKwkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCByIDsKIApAQCAtMjAzMyw3ICsyMDA2LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfQ2hlY2tERFJSYW5rcyggaW50IFJhbmtObyAsIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19DaGVja0REUlJhbmtzKGludCBSYW5rTm8sIGludCBpbmRleCwKKwkJCSB1bnNpZ25lZCBzaG9ydCBEUkFNVFlQRV9UQUJMRVtdWzVdLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpbnQgciA7CiAKQEAgLTIwNTksMTAgKzIwMzQsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBYR0lOZXdfU0RSU2l6aW5nKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19TRFJTaXppbmcoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCAgICBpIDsKLSAgICBVQ0hBUiAgaiA7CisgICAgdW5zaWduZWQgY2hhciAgaiA7CiAKICAgICBmb3IoIGkgPSAwIDsgaSA8IDEzIDsgaSsrICkKICAgICB7CkBAIC0yMDcwLDcgKzIwNDUsOCBAQAogCiAgICAgICAgIGZvciggaiA9IDIgOyBqID4gMCA7IGotLSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggIVhHSU5ld19TZXRSYW5rKCBpICwgKCBVQ0hBUiApaiAsIFhHSU5ld19DaGFubmVsQUIgLCBYR0lOZXdfU0RSRFJBTV9UWVBFICwgcFZCSW5mbykgKQorCSAgICBpZiAoIVhHSU5ld19TZXRSYW5rKGksICh1bnNpZ25lZCBjaGFyKWosIFhHSU5ld19DaGFubmVsQUIsCisJCQkJIFhHSU5ld19TRFJEUkFNX1RZUEUsIHBWQkluZm8pKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlIDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTIwODksMTEgKzIwNjUsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lOZXdfU2V0RFJBTVNpemVSZWcoIGludCBpbmRleCAsIFVTSE9SVCBEUkFNVFlQRV9UQUJMRVtdWyA1IF0sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgc2hvcnQgWEdJTmV3X1NldERSQU1TaXplUmVnKGludCBpbmRleCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCQkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgPSAwICwgbWVtc2l6ZSA9IDAgOworICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgPSAwICwgbWVtc2l6ZSA9IDA7CiAgICAgaW50IFJhbmtTaXplIDsKLSAgICBVQ0hBUiBDaGFubmVsTm8gOworICAgIHVuc2lnbmVkIGNoYXIgQ2hhbm5lbE5vIDsKIAogICAgIFJhbmtTaXplID0gRFJBTVRZUEVfVEFCTEVbIGluZGV4IF1bIDMgXSAqIFhHSU5ld19EYXRhQnVzV2lkdGggLyAzMiA7CiAgICAgZGF0YSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxMyApIDsKQEAgLTIxMzgsMTEgKzIxMTYsMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lOZXdfU2V0RFJBTVNpemUyMFJlZyggaW50IGluZGV4ICwgVVNIT1JUIERSQU1UWVBFX1RBQkxFW11bIDUgXSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfU2V0RFJBTVNpemUyMFJlZyhpbnQgaW5kZXgsCisJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IERSQU1UWVBFX1RBQkxFW11bNV0sCisJCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA9IDAgLCBtZW1zaXplID0gMCA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA9IDAgLCBtZW1zaXplID0gMDsKICAgICBpbnQgUmFua1NpemUgOwotICAgIFVDSEFSIENoYW5uZWxObyA7CisgICAgdW5zaWduZWQgY2hhciBDaGFubmVsTm8gOwogCiAgICAgUmFua1NpemUgPSBEUkFNVFlQRV9UQUJMRVsgaW5kZXggXVsgMyBdICogWEdJTmV3X0RhdGFCdXNXaWR0aCAvIDggOwogICAgIGRhdGEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MTMgKSA7CkBAIC0yMTg4LDMxICsyMTY4LDMyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X1JlYWRXcml0ZVJlc3QoIFVTSE9SVCBTdG9wQWRkciAsIFVTSE9SVCBTdGFydEFkZHIsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQoraW50IFhHSU5ld19SZWFkV3JpdGVSZXN0KHVuc2lnbmVkIHNob3J0IFN0b3BBZGRyLCB1bnNpZ25lZCBzaG9ydCBTdGFydEFkZHIsCisJCQkgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCBpIDsKLSAgICBVTE9ORyBQb3NpdGlvbiA9IDAgOworICAgIHVuc2lnbmVkIGxvbmcgUG9zaXRpb24gPSAwIDsKIAotICAgKiggKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApID0gUG9zaXRpb24gOworICAgICooKHVuc2lnbmVkIGxvbmcgKikocFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24pKSA9IFBvc2l0aW9uOwogCiAgICAgZm9yKCBpID0gU3RhcnRBZGRyIDsgaSA8PSBTdG9wQWRkciA7IGkrKyApCiAgICAgewogICAgICAgICBQb3NpdGlvbiA9IDEgPDwgaSA7Ci0gICAgICAgICooICggUFVMT05HICkoIHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uICkgKSA9IFBvc2l0aW9uIDsKKwkqKCh1bnNpZ25lZCBsb25nICopKHBWQkluZm8tPkZCQWRkciArIFBvc2l0aW9uKSkgPSBQb3NpdGlvbjsKICAgICB9CiAKICAgICBEZWxheVVTKCA1MDAgKSA7CS8qIFtWaWNlbnRdIDIwMDQvMDQvMTYuIEZpeCAjMTc1OSBNZW1vcnkgU2l6ZSBlcnJvciBpbiBNdWx0aS1BZGFwdGVyLiAqLwogCiAgICAgUG9zaXRpb24gPSAwIDsKIAotICAgaWYgKCAoICooIFBVTE9ORyApKCBwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbiApICkgIT0gUG9zaXRpb24gKQotICAgICAgICByZXR1cm4oIDAgKSA7CisgICBpZiAoKCoodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpICE9IFBvc2l0aW9uKQorCSAgIHJldHVybiAwOwogCiAgICAgZm9yKCBpID0gU3RhcnRBZGRyIDsgaSA8PSBTdG9wQWRkciA7IGkrKyApCiAgICAgewogICAgICAgICBQb3NpdGlvbiA9IDEgPDwgaSA7Ci0gICAgICAgIGlmICggKCAqKCBQVUxPTkcgKSggcFZCSW5mby0+RkJBZGRyICsgUG9zaXRpb24gKSApICE9IFBvc2l0aW9uICkKLSAgICAgICAgICAgIHJldHVybiggMCApIDsKKwlpZiAoKCoodW5zaWduZWQgbG9uZyAqKShwVkJJbmZvLT5GQkFkZHIgKyBQb3NpdGlvbikpICE9IFBvc2l0aW9uKQorCQlyZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuKCAxICkgOwogfQpAQCAtMjIyNCw5ICsyMjA1LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSU5ld19DaGVja0ZyZXF1ZW5jZSggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lOZXdfQ2hlY2tGcmVxdWVuY2Uoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRhdGEgOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDk3ICkgOwogCkBAIC0yMjQ3LDkgKzIyMjgsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfQ2hlY2tDaGFubmVsKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0NoZWNrQ2hhbm5lbChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIGRhdGE7CisgICAgdW5zaWduZWQgY2hhciBkYXRhOwogCiAgICAgc3dpdGNoKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlICkKICAgICB7CkBAIC0yNTI4LDEwICsyNTA5LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgWEdJTmV3X0REUlNpemluZzM0MCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0REUlNpemluZzM0MChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGludCBpIDsKLSAgICBVU0hPUlQgbWVtc2l6ZSAsIGFkZHIgOworICAgIHVuc2lnbmVkIHNob3J0IG1lbXNpemUgLCBhZGRyIDsKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxNSAsIDB4MDAgKSA7CS8qIG5vbmludGVybGVhdmluZyAqLwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgxQyAsIDB4MDAgKSA7CS8qIG5vbnRpbGluZyAqLwpAQCAtMjU0OCw3ICsyNTI5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlIDsKIAogICAgICAgICBhZGRyID0gbWVtc2l6ZSArICggWEdJTmV3X0NoYW5uZWxBQiAtIDIgKSArIDIwIDsKLSAgICAgICAgaWYgKCAoIEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEgKSA8ICggVUxPTkcgKSggMSA8PCBhZGRyICkgKQorCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPCAodW5zaWduZWQgbG9uZykoMSA8PCBhZGRyKSkKICAgICAgICAgICAgIGNvbnRpbnVlIDsKIAogICAgICAgICBpZiAoIFhHSU5ld19SZWFkV3JpdGVSZXN0KCBhZGRyICwgNSwgcFZCSW5mbyApID09IDEgKQpAQCAtMjU2Niw3ICsyNTQ3LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlIDsKIAogICAgICAgICBhZGRyID0gbWVtc2l6ZSArICggWEdJTmV3X0NoYW5uZWxBQiAtIDIgKSArIDIwIDsKLSAgICAgICAgaWYgKCAoIEh3RGV2aWNlRXh0ZW5zaW9uLT51bFZpZGVvTWVtb3J5U2l6ZSAtIDEgKSA8ICggVUxPTkcgKSggMSA8PCBhZGRyICkgKQorCWlmICgoSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIC0gMSkgPCAodW5zaWduZWQgbG9uZykoMSA8PCBhZGRyKSkKICAgICAgICAgICAgIGNvbnRpbnVlIDsKIAogICAgICAgICBpZiAoIFhHSU5ld19SZWFkV3JpdGVSZXN0KCBhZGRyICwgOSwgcFZCSW5mbyApID09IDEgKQpAQCAtMjU4MywxMCArMjU2NCwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IFhHSU5ld19ERFJTaXppbmcoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitpbnQgWEdJTmV3X0REUlNpemluZyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaW50ICAgIGkgOwotICAgIFVDSEFSICBqIDsKKyAgICB1bnNpZ25lZCBjaGFyICBqIDsKIAogICAgIGZvciggaSA9IDAgOyBpIDwgNCA7IGkrKyApCiAgICAgewpAQCAtMjU5NSw3ICsyNTc2LDggQEAKICAgICAgICAgZm9yKCBqID0gMiA7IGogPiAwIDsgai0tICkKICAgICAgICAgewogICAgICAgICAgICAgWEdJTmV3X1NldEREUkNoYW5uZWwoIGkgLCBqICwgWEdJTmV3X0NoYW5uZWxBQiAsIFhHSU5ld19ERFJEUkFNX1RZUEUgLCBwVkJJbmZvICkgOwotICAgICAgICAgICAgaWYgKCAhWEdJTmV3X1NldFJhbmsoIGkgLCAoIFVDSEFSIClqICwgWEdJTmV3X0NoYW5uZWxBQiAsIFhHSU5ld19ERFJEUkFNX1RZUEUsIHBWQkluZm8gKSApCisJICAgIGlmICghWEdJTmV3X1NldFJhbmsoaSwgKHVuc2lnbmVkIGNoYXIpaiwgWEdJTmV3X0NoYW5uZWxBQiwKKwkJCQlYR0lOZXdfRERSRFJBTV9UWVBFLCBwVkJJbmZvKSkKICAgICAgICAgICAgICAgICBjb250aW51ZSA7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yNjEzLDcgKzI1OTUsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfU2V0TWVtb3J5Q2xvY2soc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogCkBAIC0yNjM0LDkgKzI2MTYsNyBAQAogICAgICAgaWYgKCAoIHBWQkluZm8tPk1DTEtEYXRhWyBYR0lOZXdfUkFNVHlwZSBdLlNSMjggPT0gMHgxQyApICYmICggcFZCSW5mby0+TUNMS0RhdGFbIFhHSU5ld19SQU1UeXBlIF0uU1IyOSA9PSAweDAxICkKICAgICAgICAgJiYgKCAoICggcFZCSW5mby0+RUNMS0RhdGFbIFhHSU5ld19SQU1UeXBlIF0uU1IyRSA9PSAweDFDICkgJiYgKCBwVkJJbmZvLT5FQ0xLRGF0YVsgWEdJTmV3X1JBTVR5cGUgXS5TUjJGID09IDB4MDEgKSApCiAgICAgICAgIHx8ICggKCBwVkJJbmZvLT5FQ0xLRGF0YVsgWEdJTmV3X1JBTVR5cGUgXS5TUjJFID09IDB4MjIgKSAmJiAoIHBWQkluZm8tPkVDTEtEYXRhWyBYR0lOZXdfUkFNVHlwZSBdLlNSMkYgPT0gMHgwMSApICkgKSApCi0gICAgICB7Ci0gICAgICAJWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDMyICwgKCAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzIgKSAmIDB4RkMgKSB8IDB4MDIgKSA7Ci0gICAgICB9CisJICAgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgzMiwgKCh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MzIpICYgMHhGQykgfCAweDAyKTsKICAgICB9CiB9CiAKQEAgLTI2NDcsMTIgKzI2MjcsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gQ2hrTEZCKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIENoa0xGQihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgaWYgKCBMRkJEUkFNVHJhcCAmIFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg3OCApICkKLSAgICAgICAgcmV0dXJuKCBUUlVFICkgOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKCBGQUxTRSApOworCWlmIChMRkJEUkFNVHJhcCAmIFhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQgLCAweDc4KSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKIH0KIAogCkBAIC0yNjY0LDE3ICsyNjQ0LDE4IEBACiAvKiBpbiBzZWNvbmQgY2hpcCwgYXNzdW1lIENSIEExIERbNl09IjEiIGluIHRoaXMgY2FzZSAqLwogLyogb3V0cHV0IDogbm9uZSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFNldFBvd2VyQ29uc3VtZSAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVTE9ORyBYR0lfUDNkNFBvcnQgKQordm9pZCBTZXRQb3dlckNvbnN1bWUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgdW5zaWduZWQgbG9uZyBYR0lfUDNkNFBvcnQpCiB7Ci0gICAgVUxPTkcgICBsVGVtcCA7Ci0gICAgVUNIQVIgICBiVGVtcDsKKyAgICB1bnNpZ25lZCBsb25nICAgbFRlbXAgOworICAgIHVuc2lnbmVkIGNoYXIgICBiVGVtcDsKIAogICAgIEh3RGV2aWNlRXh0ZW5zaW9uLT5wUXVlcnlWR0FDb25maWdTcGFjZSggSHdEZXZpY2VFeHRlbnNpb24gLCAweDA4ICwgMCAsICZsVGVtcCApIDsgLyogR2V0ICovCiAgICAgaWYgKChsVGVtcCYweEZGKT09MCkKICAgICB7CiAgICAgICAgIC8qIHNldCBDUjU4IERbNV09MCBEWzNdPTAgKi8KICAgICAgICAgWEdJTmV3X1NldFJlZ0FORCggWEdJX1AzZDRQb3J0ICwgMHg1OCAsIDB4RDcgKSA7Ci0gICAgICAgIGJUZW1wID0gKFVDSEFSKSBYR0lOZXdfR2V0UmVnMSggWEdJX1AzZDRQb3J0ICwgMHhDQiApIDsKKwliVGVtcCA9ICh1bnNpZ25lZCBjaGFyKSBYR0lOZXdfR2V0UmVnMShYR0lfUDNkNFBvcnQsIDB4Q0IpOwogICAgIAlpZiAoYlRlbXAmMHgyMCkKICAgICAJewogICAgICAgICAgICAgaWYgKCEoYlRlbXAmMHgxMCkpCkBAIC0yNjkyLDE1ICsyNjczLDEzIEBACiB9CiAKIAotCi0jaWYgZGVmaW5lZChMSU5VWF9YRjg2KXx8ZGVmaW5lZChMSU5VWF9LRVJORUwpCi12b2lkIFhHSU5ld19Jbml0VkJJT1NEYXRhKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfSW5pdFZCSU9TRGF0YShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCi0JLyogVUxPTkcgUk9NQWRkciA9IChVTE9ORylId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZTsgKi8KKwkvKiB1bnNpZ25lZCBsb25nIFJPTUFkZHIgPSAodW5zaWduZWQgbG9uZylId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZTsgKi8KICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwogICAgIHBWQkluZm8tPkZCQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAgICAgcFZCSW5mby0+SVNYUERPUyA9IDAgOwogCiAgICAgcFZCSW5mby0+UDNjNCA9IHBWQkluZm8tPkJhc2VBZGRyICsgMHgxNCA7CkBAIC0yNzM2LDcgKzI3MTUsNiBAQAogCX0KIAogfQotI2VuZGlmIC8qIEZvciBMaW51eCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEZ1bmN0aW9uIDogUmVhZFZCSU9TVGFibERhdGEgKi8KQEAgLTI3NDQsMjAwICsyNzIyLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFJlYWRWQklPU1RhYmxEYXRhKCBVQ0hBUiBDaGlwVHlwZSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBSZWFkVkJJT1NUYWJsRGF0YSh1bnNpZ25lZCBjaGFyIENoaXBUeXBlLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgUFVDSEFSICB2b2xhdGlsZSBwVmlkZW9NZW1vcnkgPSAoIFBVQ0hBUiApcFZCSW5mby0+Uk9NQWRkciA7Ci0gICAgVUxPTkcgICBpIDsKLSAgICBVQ0hBUiAgIGogLCBrIDsKLSNpZiAwCi0gICAgVUxPTkcgICBpaSAsIGpqIDsKLSAgICBpID0gcFZpZGVvTWVtb3J5WyAweDFDRiBdIHwgKCBwVmlkZW9NZW1vcnlbIDB4MUQwIF0gPDwgOCApIDsJCS8qIFVuaVJPTSAqLwotICAgIGlmICggaSAhPSAwICkKLSAgICAgICAgVU5JUk9NID0gMSA7Ci0KLSAgICBpaSA9IDB4OTAgOwotICAgIGZvciggamogPSAweDAwIDsgamogPCAweDA4IDsgamorKyApCi0gICAgewotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVsgamogXS5TUjI4ID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsKLSAgICAgICAgcFZCSW5mby0+TUNMS0RhdGFbIGpqIF0uU1IyOSA9IHBWaWRlb01lbW9yeVsgaWkgKyAxXSA7Ci0gICAgICAgIHBWQkluZm8tPk1DTEtEYXRhWyBqaiBdLlNSMkEgPSBwVmlkZW9NZW1vcnlbIGlpICsgMl0gOwotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YVsgamogXS5DTE9DSyA9IHBWaWRlb01lbW9yeVsgaWkgKyAzIF0gfCAoIHBWaWRlb01lbW9yeVsgaWkgKyA0IF0gPDwgOCApIDsKLSAgICAgICAgaWkgKz0gMHgwNSA7Ci0gICAgfQotCi0gICAgaWkgPSAweEI4IDsKLSAgICBmb3IoIGpqID0gMHgwMCA7IGpqIDwgMHgwOCA7IGpqKysgKQotICAgIHsKLSAgICAgICAgcFZCSW5mby0+RUNMS0RhdGFbIGpqIF0uU1IyRSA9IHBWaWRlb01lbW9yeVsgaWkgXSA7Ci0gICAgICAgIHBWQkluZm8tPkVDTEtEYXRhWyBqaiBdLlNSMkY9cFZpZGVvTWVtb3J5WyBpaSArIDEgXSA7Ci0gICAgICAgIHBWQkluZm8tPkVDTEtEYXRhWyBqaiBdLlNSMzA9IHBWaWRlb01lbW9yeVsgaWkgKyAyIF0gOwotICAgICAgICBwVkJJbmZvLT5FQ0xLRGF0YVsgamogXS5DTE9DSz0gcFZpZGVvTWVtb3J5WyBpaSArIDMgXSB8ICggcFZpZGVvTWVtb3J5WyBpaSArIDQgXSA8PCA4ICkgOwotICAgICAgICBpaSArPSAweDA1IDsKLSAgICB9Ci0KLSAgICAvKiBWb2xhcmkgY3VzdG9taXplIGRhdGEgYXJlYSBzdGFydCAqLwotICAgIC8qIGlmICggQ2hpcFR5cGUgPT0gWEc0MCApICovCi0gICAgaWYgKCBDaGlwVHlwZSA+PSBYRzQwICkKLSAgICB7Ci0gICAgICAgIGlpID0gMHhFMCA7Ci0gICAgICAgIGZvciggamogPSAweDAwIDsgamogPCAweDAzIDsgamorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDAgXSA9IHBWaWRlb01lbW9yeVsgaWkgXSA7CQkvKiBTUjEzLCBTUjE0LCBhbmQgU1IxOCAqLwotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMSBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDEgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyAyIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMiBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDMgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAzIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNCBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDQgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA1IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDYgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA2IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDcgXSA7Ci0gICAgICAgICAgICBpaSArPSAweDA4IDsKLSAgICAgICAgfQotICAgICAgICBpaSA9IDB4MTEwIDsKLSAgICAgICAgamogPSAweDAzIDsKLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMCBdID0gcFZpZGVvTWVtb3J5WyBpaSBdIDsJCS8qIFNSMUIgKi8KLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgMSBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDEgXSA7Ci0gICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDIgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAyIF0gOwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyAzIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMyBdIDsKLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNCBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDQgXSA7Ci0gICAgICAgIHBWQkluZm8tPlNSMTVbIGpqIF1bIDUgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA1IF0gOwotICAgICAgICBwVkJJbmZvLT5TUjE1WyBqaiBdWyA2IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNiBdIDsKLSAgICAgICAgcFZCSW5mby0+U1IxNVsgamogXVsgNyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDcgXSA7Ci0KLSAgICAgICAgKnBWQkluZm8tPnBTUjA3ID0gcFZpZGVvTWVtb3J5WyAweDc0IF0gOwotICAgICAgICAqcFZCSW5mby0+cFNSMUYgPSBwVmlkZW9NZW1vcnlbIDB4NzUgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IyMSA9IHBWaWRlb01lbW9yeVsgMHg3NiBdIDsKLSAgICAgICAgKnBWQkluZm8tPnBTUjIyID0gcFZpZGVvTWVtb3J5WyAweDc3IF0gOwotICAgICAgICAqcFZCSW5mby0+cFNSMjMgPSBwVmlkZW9NZW1vcnlbIDB4NzggXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IyNCA9IHBWaWRlb01lbW9yeVsgMHg3OSBdIDsKLSAgICAgICAgcFZCSW5mby0+U1IyNVsgMCBdID0gcFZpZGVvTWVtb3J5WyAweDdBIF0gOwotICAgICAgICAqcFZCSW5mby0+cFNSMzEgPSBwVmlkZW9NZW1vcnlbIDB4N0IgXSA7Ci0gICAgICAgICpwVkJJbmZvLT5wU1IzMiA9IHBWaWRlb01lbW9yeVsgMHg3QyBdIDsKLSAgICAgICAgKnBWQkluZm8tPnBTUjMzID0gcFZpZGVvTWVtb3J5WyAweDdEIF0gOwotICAgICAgICBpaSA9IDB4RjggOwotCi0gICAgICAgIGZvciggamogPSAwIDsgamogPCAzIDsgamorKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDAgXSA9IHBWaWRlb01lbW9yeVsgaWkgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqaiBdWyAxIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDIgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAyIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgamogXVsgMyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDMgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqaiBdWyA0IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNCBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGpqIF1bIDUgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA1IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgamogXVsgNiBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDYgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqaiBdWyA3IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNyBdIDsKLSAgICAgICAgICAgIGlpICs9IDB4MDggOwotICAgICAgICB9Ci0KLSAgICAgICAgaWkgPSAweDExOCA7Ci0gICAgICAgIGZvciggaiA9IDMgOyBqIDwgMjQgOyBqKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDAgXSA9IHBWaWRlb01lbW9yeVsgaWkgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDEgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyAxIF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgaiBdWyAyIF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgMiBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgMyBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDMgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDQgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA0IF0gOwotICAgICAgICAgICAgcFZCSW5mby0+Q1I0MFsgaiBdWyA1IF0gPSBwVmlkZW9NZW1vcnlbIGlpICsgNSBdIDsKLSAgICAgICAgICAgIHBWQkluZm8tPkNSNDBbIGogXVsgNiBdID0gcFZpZGVvTWVtb3J5WyBpaSArIDYgXSA7Ci0gICAgICAgICAgICBwVkJJbmZvLT5DUjQwWyBqIF1bIDcgXSA9IHBWaWRlb01lbW9yeVsgaWkgKyA3IF0gOwotICAgICAgICAgICAgaWkgKz0gMHgwOCA7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gcFZpZGVvTWVtb3J5WyAweDFDMCBdIHwgKCBwVmlkZW9NZW1vcnlbIDB4MUMxIF0gPDwgOCApIDsKLQotICAgICAgICBmb3IoIGogPSAwIDsgaiA8IDggOyBqKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IoIGsgPSAwIDsgayA8IDQgOyBrKysgKQotICAgICAgICAgICAgICAgIHBWQkluZm8tPkNSNkJbIGogXVsgayBdID0gcFZpZGVvTWVtb3J5WyBpICsgNCAqIGogKyBrIF0gOwotICAgICAgICB9Ci0KLSAgICAgICAgaSA9IHBWaWRlb01lbW9yeVsgMHgxQzIgXSB8ICggcFZpZGVvTWVtb3J5WyAweDFDMyBdIDw8IDggKSA7Ci0KLSAgICAgICAgZm9yKCBqID0gMCA7IGogPCA4IDsgaisrICkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yKCBrID0gMCA7IGsgPCA0IDsgaysrICkKLSAgICAgICAgICAgICAgICBwVkJJbmZvLT5DUjZFWyBqIF1bIGsgXSA9IHBWaWRlb01lbW9yeVsgaSArIDQgKiBqICsgayBdIDsKLSAgICAgICAgfQotCi0gICAgICAgIGkgPSBwVmlkZW9NZW1vcnlbIDB4MUM0IF0gfCAoIHBWaWRlb01lbW9yeVsgMHgxQzUgXSA8PCA4ICkgOwotICAgICAgICBmb3IoIGogPSAwIDsgaiA8IDggOyBqKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IoIGsgPSAwIDsgayA8IDMyIDsgaysrICkKLSAgICAgICAgICAgICAgICBwVkJJbmZvLT5DUjZGWyBqIF1bIGsgXSA9IHBWaWRlb01lbW9yeVsgaSArIDMyICogaiArIGsgXSA7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gcFZpZGVvTWVtb3J5WyAweDFDNiBdIHwgKCBwVmlkZW9NZW1vcnlbIDB4MUM3IF0gPDwgOCApIDsKLQotICAgICAgICBmb3IoIGogPSAwIDsgaiA8IDggOyBqKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IoIGsgPSAwIDsgayA8IDIgOyBrKysgKQotICAgICAgICAgICAgICAgIHBWQkluZm8tPkNSODlbIGogXVsgayBdID0gcFZpZGVvTWVtb3J5WyBpICsgMiAqIGogKyBrIF0gOwotICAgICAgICB9Ci0KLSAgICAgICAgaSA9IHBWaWRlb01lbW9yeVsgMHgxQzggXSB8ICggcFZpZGVvTWVtb3J5WyAweDFDOSBdIDw8IDggKSA7Ci0gICAgICAgIGZvciggaiA9IDAgOyBqIDwgMTIgOyBqKysgKQotICAgICAgICAgICAgcFZCSW5mby0+QUdQUmVnWyBqIF0gPSBwVmlkZW9NZW1vcnlbIGkgKyBqIF0gOwotCi0gICAgICAgIGkgPSBwVmlkZW9NZW1vcnlbIDB4MUNGIF0gfCAoIHBWaWRlb01lbW9yeVsgMHgxRDAgXSA8PCA4ICkgOwotICAgICAgICBmb3IoIGogPSAwIDsgaiA8IDQgOyBqKysgKQotICAgICAgICAgICAgcFZCSW5mby0+U1IxNlsgaiBdID0gcFZpZGVvTWVtb3J5WyBpICsgaiBdIDsKLQotICAgICAgICBpZiAoIENoaXBUeXBlID09IFhHMjEgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocFZpZGVvTWVtb3J5WyAweDY3IF0gJiAweDgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wRFZPU2V0dGluZyA9IHBWaWRlb01lbW9yeVsgMHg2NyBdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCAocFZpZGVvTWVtb3J5WyAweDY3IF0gJiAweEMwKSA9PSAweEMwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcFZCSW5mby0+cENSMkUgPSBwVmlkZW9NZW1vcnlbIGkgKyA0IF0gOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1IyRiA9IHBWaWRlb01lbW9yeVsgaSArIDUgXSA7Ci0gICAgICAgICAgICAgICAgKnBWQkluZm8tPnBDUjQ2ID0gcFZpZGVvTWVtb3J5WyBpICsgNiBdIDsKLSAgICAgICAgICAgICAgICAqcFZCSW5mby0+cENSNDcgPSBwVmlkZW9NZW1vcnlbIGkgKyA3IF0gOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBDaGlwVHlwZSA9PSBYRzI3ICkKLSAgICAgICAgewotICAgICAgICAgICAgamogPSBpK2o7Ci0gICAgICAgICAgICBmb3IoIGkgPSAwIDsgaSA8PSAweEIgOyBpKyssamorKyApCi0gICAgICAgICAgICAgIHBWQkluZm8tPnBDUkQwW2ldID0gcFZpZGVvTWVtb3J5WyBqaiBdIDsKLSAgICAgICAgICAgIGZvciggaSA9IDB4MCA7IGkgPD0gMHgxIDsgaSsrLGpqKysgKQotICAgICAgICAgICAgICBwVkJJbmZvLT5wQ1JERVtpXSA9IHBWaWRlb01lbW9yeVsgamogXSA7Ci0KLSAgICAgICAgICAgICpwVkJJbmZvLT5wU1I0MCA9IHBWaWRlb01lbW9yeVsgamogXSA7Ci0gICAgICAgICAgICBqaisrOwotICAgICAgICAgICAgKnBWQkluZm8tPnBTUjQxID0gcFZpZGVvTWVtb3J5WyBqaiBdIDsKLQotICAgICAgICAgICAgaWYgKHBWaWRlb01lbW9yeVsgMHg2NyBdICYgMHg4MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAqcFZCSW5mby0+cERWT1NldHRpbmcgPSBwVmlkZW9NZW1vcnlbIDB4NjcgXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggKHBWaWRlb01lbW9yeVsgMHg2NyBdICYgMHhDMCkgPT0gMHhDMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgamorKzsKLSAgICAgICAgICAgICAgICAqcFZCSW5mby0+cENSMkUgPSBwVmlkZW9NZW1vcnlbIGpqIF0gOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1IyRiA9IHBWaWRlb01lbW9yeVsgamogKyAxIF0gOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1I0NiA9IHBWaWRlb01lbW9yeVsgamogKyAyIF0gOwotICAgICAgICAgICAgICAgICpwVkJJbmZvLT5wQ1I0NyA9IHBWaWRlb01lbW9yeVsgamogKyAzIF0gOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICAqcFZCSW5mby0+cENSQ0YgPSBwVmlkZW9NZW1vcnlbIDB4MUNBIF0gOwotICAgICAgICAqcFZCSW5mby0+cFhHSU5ld19EUkFNVHlwZURlZmluaXRpb24gPSBwVmlkZW9NZW1vcnlbIDB4MUNCIF0gOwotICAgICAgICAqcFZCSW5mby0+cFhHSU5ld19JMkNEZWZpbml0aW9uID0gcFZpZGVvTWVtb3J5WyAweDFEMSBdIDsKLSAgICAgICAgaWYgKCBDaGlwVHlwZSA+PSBYRzIwICkKLSAgICAgICAgewotICAgICAgICAgICAqcFZCSW5mby0+cFhHSU5ld19DUjk3ID0gcFZpZGVvTWVtb3J5WyAweDFEMiBdIDsKLSAgICAgICAgICAgaWYgKCBDaGlwVHlwZSA9PSBYRzI3ICkKLSAgICAgICAgICAgewotICAgICAgICAgICAgICpwVkJJbmZvLT5wU1IzNiA9IHBWaWRlb01lbW9yeVsgMHgxRDMgXSA7Ci0gICAgICAgICAgICAgKnBWQkluZm8tPnBDUjhGID0gcFZpZGVvTWVtb3J5WyAweDFENSBdIDsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Ci0jZW5kaWYKKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwVmlkZW9NZW1vcnkgPSAodW5zaWduZWQgY2hhciAqKXBWQkluZm8tPlJPTUFkZHI7CisgICAgdW5zaWduZWQgbG9uZyAgIGkgOworICAgIHVuc2lnbmVkIGNoYXIgICBqLCBrIDsKICAgICAvKiBWb2xhcmkgY3VzdG9taXplIGRhdGEgYXJlYSBlbmQgKi8KIAogICAgIGlmICggQ2hpcFR5cGUgPT0gWEcyMSApCkBAIC0yOTcyLDcgKzI3NjEsOCBAQAogICAgICAgICAgICAgICAgIGkgKz0gMjU7CiAgICAgICAgICAgICAgICAgai0tOwogICAgICAgICAgICAgICAgIGsrKzsKLSAgICAgICAgICAgICAgfSB3aGlsZSAoIChqPjApICYmICggayA8IChzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKFhHSTIxX0xWRFNDYXBTdHJ1Y3QpKSApICk7CisJICAgICAgfSB3aGlsZSAoKGogPiAwKSAmJgorCQkgICAgICAgKGsgPCAoc2l6ZW9mKFhHSTIxX0xDRENhcExpc3QpL3NpemVvZihzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0zMDAzLDcgKzI3OTMsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfRERSMXhfTVJTX1hHMjAoIFVMT05HIFAzYzQgLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0REUjF4X01SU19YRzIwKHVuc2lnbmVkIGxvbmcgUDNjNCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCiAgICAgWEdJTmV3X1NldFJlZzEoIFAzYzQgLCAweDE4ICwgMHgwMSApIDsKQEAgLTMwMzksMTMgKzI4MjksMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyMCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit2b2lkIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjAoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pCiB7Ci0gICAgVkJfREVWSUNFX0lORk8gVkJJTkY7Ci0gICAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gPSAmVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwogICAgIHBWQkluZm8tPkZCQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgcFZCSW5mby0+QmFzZUFkZHIgPSAoVUxPTkcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKKyAgICBwVkJJbmZvLT5CYXNlQWRkciA9ICh1bnNpZ25lZCBsb25nKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CiAgICAgcFZCSW5mby0+SVNYUERPUyA9IDAgOwogCiAgICAgcFZCSW5mby0+UDNjNCA9IHBWQkluZm8tPkJhc2VBZGRyICsgMHgxNCA7CkBAIC0zMDc4LDEzICsyODY4LDEzIEBACiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFCICwgMHgwMyApIDsKIH0KIAotdm9pZCBYR0lOZXdfU2V0RFJBTU1vZGVSZWdpc3Rlcl9YRzI3KCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICkKK3ZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyNyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikKIHsKLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOwogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKLSAgICBwVkJJbmZvLT5CYXNlQWRkciA9IChVTE9ORylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOworICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKHVuc2lnbmVkIGxvbmcpSHdEZXZpY2VFeHRlbnNpb24tPnBqSU9BZGRyZXNzIDsKICAgICBwVkJJbmZvLT5JU1hQRE9TID0gMCA7CiAKICAgICBwVkJJbmZvLT5QM2M0ID0gcFZCSW5mby0+QmFzZUFkZHIgKyAweDE0IDsKQEAgLTMxMjAsMTMgKzI5MTAsMTIgQEAKIAogfQogLyoKLXZvaWQgWEdJTmV3X1NldERSQU1Nb2RlUmVnaXN0ZXJfWEcyNyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApCit2b2lkIFhHSU5ld19TZXREUkFNTW9kZVJlZ2lzdGVyX1hHMjcoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pCiB7Ci0jaWZuZGVmIExJTlVYX1hGODYKLSAgICBVQ0hBUiBkYXRhIDsKLSNlbmRpZgotICAgIFZCX0RFVklDRV9JTkZPIFZCSU5GOwotICAgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvID0gJlZCSU5GOworCisgICAgdW5zaWduZWQgY2hhciBkYXRhIDsKKyAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gVkJJTkY7CisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvID0gJlZCSU5GOwogICAgIHBWQkluZm8tPlJPTUFkZHIgPSBId0RldmljZUV4dGVuc2lvbi0+cGpWaXJ0dWFsUm9tQmFzZSA7CiAgICAgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsKICAgICBwVkJJbmZvLT5CYXNlQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CkBAIC0zMTY4LDkgKzI5NTcsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19DaGtTZW5zZVN0YXR1cyAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0Noa1NlbnNlU3RhdHVzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieD0wICwgdGVtcCAsIHRlbXBjeCAsIENSM0NEYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCA9IDAsIHRlbXAsIHRlbXBjeCwgQ1IzQ0RhdGE7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDMyICkgOwogCkBAIC0zMjI5LDkgKzMwMTgsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRNb2RlU2NyYXRjaCAoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSU5ld19TZXRNb2RlU2NyYXRjaChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwgdGVtcGNsID0gMCAsIHRlbXBjaCA9IDAgLCBDUjMxRGF0YSAsIENSMzhEYXRhOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgLCB0ZW1wY2wgPSAwICwgdGVtcGNoID0gMCAsIENSMzFEYXRhICwgQ1IzOERhdGE7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDNkICkgOwogICAgIHRlbXAgfD0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDNlICkgPDwgOCA7CkBAIC0zMzI2LDIzICszMTE1LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0dldFhHMjFTZW5zZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0dldFhHMjFTZW5zZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIFRlbXA7Ci0gICAgUFVDSEFSICB2b2xhdGlsZSBwVmlkZW9NZW1vcnkgPSAoIFBVQ0hBUiApcFZCSW5mby0+Uk9NQWRkciA7CisgICAgdW5zaWduZWQgY2hhciBUZW1wOworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnBWaWRlb01lbW9yeSA9ICh1bnNpZ25lZCBjaGFyICopcFZCSW5mby0+Uk9NQWRkcjsKIAogICAgIHBWQkluZm8tPklGX0RFRl9MVkRTID0gMCA7CiAKLSNpZmRlZiBXSU4yMDAwCi0gICBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID0gMCA7Ci0gICAgaWYgKCAoIHBWaWRlb01lbW9yeVsgMHg2NSBdICYgMHgwMiApICkJCQkvKiBGb3IgWEcyMSBDSDcwMDcgKi8KLSAgICB7Ci0gICAgICAgIC8qIFZpZGVvRGVidWdQcmludCgoMCwgIlJlYWRWQklPU1RhYmxEYXRhOiBwVmlkZW9NZW1vcnlbIDB4NjUgXSA9JXhcbiIscFZpZGVvTWVtb3J5WyAweDY1IF0pKTsgKi8KLSAgICAgICAgcFZCSW5mby0+SUZfREVGX0NINzAwNyA9IDEgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBbQmlsbHldIDA3LzA1LzAzICovCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNkNCAsIDB4MzggLCB+MHhFMCAsIDB4NjAgKSA7IC8qIENINzAwNyBvbiBjaGlwICovCi0gICAgfQotICAgIGVsc2UKLSNlbmRpZgogI2lmIDEKICAgICBpZiAoKCBwVmlkZW9NZW1vcnlbIDB4NjUgXSAmIDB4MDEgKSApCQkJLyogRm9yIFhHMjEgTFZEUyAqLwogICAgIHsKQEAgLTMzNzgsOSArMzE1Nyw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0dldFhHMjdTZW5zZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJTmV3X0dldFhHMjdTZW5zZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIFRlbXAsYkNSNEE7CisJdW5zaWduZWQgY2hhciBUZW1wLCBiQ1I0QTsKIAogICAgICBwVkJJbmZvLT5JRl9ERUZfTFZEUyA9IDAgOwogICAgICBiQ1I0QSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSApIDsKQEAgLTM0MDIsOSArMzE4MSw5IEBACiAKIH0KIAotVUNIQVIgR2V0WEcyMUZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgR2V0WEcyMUZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgQ1IzOCxDUjRBLHRlbXA7CisJdW5zaWduZWQgY2hhciBDUjM4LCBDUjRBLCB0ZW1wOwogCiAgICAgQ1I0QSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSApIDsKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDRBICwgfjB4MTAgLCAweDEwICkgOyAvKiBlbmFibGUgR1BJT0UgcmVhZCAqLwpAQCAtMzQyMiw5ICszMjAxLDkgQEAKICAgICByZXR1cm4gdGVtcDsKIH0KIAotVUNIQVIgR2V0WEcyN0ZQQml0cyhQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgR2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgQ1I0QSx0ZW1wOworCXVuc2lnbmVkIGNoYXIgQ1I0QSwgdGVtcDsKIAogICAgIENSNEEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NEEgKSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSAsIH4weDAzICwgMHgwMyApIDsgLyogZW5hYmxlIEdQSU9BL0IvQyByZWFkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5oIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX2luaXQuaAppbmRleCAxZjM5ZDljLi5iNDczNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfaW5pdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9pbml0LmgKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmICBfVkJJTklUXwogI2RlZmluZSAgX1ZCSU5JVF8KLWV4dGVybiAgIEJPT0xFQU4gICAgWEdJSW5pdE5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiApIDsKLWV4dGVybiBYR0kyMV9MVkRTQ2FwU3RydWN0ICBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgICAgWEdJSW5pdE5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbikgOworZXh0ZXJuIHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0ICBYR0kyMV9MQ0RDYXBMaXN0WzEzXTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCmluZGV4IGJkN2Y3MzguLmQ5MGJmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwpAQCAtMSw0MyArMSw5IEBACi0jaW5jbHVkZSAib3NkZWYuaCIKIAotI2lmZGVmIFRDCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjb25pby5oPgotI2luY2x1ZGUgPGRvcy5oPgotI2VuZGlmCi0KLQotI2lmZGVmIExJTlVYX1hGODYKLSNpbmNsdWRlICJ4Zjg2LmgiCi0jaW5jbHVkZSAieGY4NlBjaUluZm8uaCIKLSNpbmNsdWRlICJ4Z2kuaCIKLSNpbmNsdWRlICJ4Z2lfcmVncy5oIgotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlICJYR0lmYi5oIgotLyojaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotI2luY2x1ZGUgPHZpZGVvL1hHSWZiLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGxpbnV4L1hHSWZiLmg+Ci0jZW5kaWYqLwotI2VuZGlmCiAKLSNpZmRlZiBXSU4yMDAwCi0jaW5jbHVkZSA8ZGRlcnJvci5oPgotI2luY2x1ZGUgPGRldmlvY3RsLmg+Ci0jaW5jbHVkZSA8bWluaXBvcnQuaD4KLSNpbmNsdWRlIDxudGRkdmRlby5oPgotI2luY2x1ZGUgPHZpZGVvLmg+Ci0KLSNpbmNsdWRlICJ4Z2l2LmgiCi0jaW5jbHVkZSAiZGRfaTJjLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNlbmRpZgogCiAjaW5jbHVkZSAidmJfZGVmLmgiCiAjaW5jbHVkZSAidmdhdHlwZXMuaCIKQEAgLTU0LDE5NCArMjAsMjE4IEBACiAKIAogCi1CT09MRUFOICBYR0lfSXNMQ0REdWFsTGluayhQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lfU2V0Q1JUMkdyb3VwMzAxKFVTSE9SVCBNb2RlTm8sIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJX0JhY2tsaWdodEJ5RHJ2KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9Jc0xDRER1YWxMaW5rKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfU2V0Q1JUMkdyb3VwMzAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfQmFja2xpZ2h0QnlEcnYoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAotQk9PTEVBTiAgWEdJX0lzTENET04oUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJX0Rpc2FibGVDaElTTENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9FbmFibGVDaElTTENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9BanVzdENSVDJSYXRlKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsVVNIT1JUICppLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lfU2VhcmNoTW9kZUlEKCBVU0hPUlQgTW9kZU5vLFVTSE9SVCAgKk1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1CT09MRUFOICBYR0lfR2V0TENESW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotQk9PTEVBTiAgWEdJU2V0TW9kZU5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBNb2RlTm8gKSA7Ci1CT09MRUFOICBYR0lfQnJpZGdlSXNPbihQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VQ0hBUiAgICBYR0lfR2V0TW9kZVB0ciggVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldE9mZnNldChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldFJhdGVQdHJDUlQyKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFLCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotVVNIT1JUICAgWEdJX0dldFJlc0luZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVTSE9SVCAgIFhHSV9HZXRDb2xvckRlcHRoKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVTSE9SVCAgIFhHSV9HZXRWR0FIVDIoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVVNIT1JUICAgWEdJX0dldFZDTEsyUHRyKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfVkJMb25nV2FpdChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2F2ZUNSVDJJbmZvKFVTSE9SVCBNb2RlTm8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9HZXRDUlQyRGF0YShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0Q1JUMlJlc0luZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9QcmVTZXRHcm91cDEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEdyb3VwMShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0TG9ja1JlZ3MoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldExDRFJlZ3MoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEdyb3VwMihVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRHcm91cDMoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRHcm91cDQoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0R3JvdXA1KFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkKiAgICBYR0lfR2V0TGNkUHRyKFVTSE9SVCBCWCwgIFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCogICAgWEdJX0dldFRWUHRyKFVTSE9SVCBCWCwgVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9GaXJlUFdERW5hYmxlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgCSBYR0lfRW5hYmxlR2F0aW5nQ1JUKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgCSBYR0lfRGlzYWJsZUdhdGluZ0NSVChQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkIAkgWEdJX1NldFBhbmVsRGVsYXkoVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9TZXRQYW5lbFBvd2VyKFVTSE9SVCB0ZW1wYWgsVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAJIFhHSV9FbmFibGVQV0QoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgCSBYR0lfRGlzYWJsZVBXRCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0F1dG9UaHJlc2hvbGQoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRUYXA0UmVncyggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0lzTENET04oc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9EaXNhYmxlQ2hJU0xDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0VuYWJsZUNoSVNMQ0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9BanVzdENSVDJSYXRlKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJICAgdW5zaWduZWQgc2hvcnQgKmksIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfU2VhcmNoTW9kZUlEKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgdW5zaWduZWQgc2hvcnQgKk1vZGVJZEluZGV4LAorCQkJICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJX0dldExDREluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgWEdJU2V0TW9kZU5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfQnJpZGdlSXNPbihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgICBYR0lfR2V0TW9kZVB0cih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0T2Zmc2V0KHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0UmF0ZVB0ckNSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsCisJCQkJICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCQkgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0UmVzSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0Q29sb3JEZXB0aCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgc2hvcnQgWEdJX0dldFZHQUhUMihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgc2hvcnQgWEdJX0dldFZDTEsyUHRyKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9WQkxvbmdXYWl0KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2F2ZUNSVDJJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRDUlQyRGF0YSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0Q1JUMlJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9QcmVTZXRHcm91cDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHcm91cDEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRMb2NrUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldExDRFJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHcm91cDIodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHcm91cDModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHcm91cDQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRHcm91cDUodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgICpYR0lfR2V0TGNkUHRyKHVuc2lnbmVkIHNob3J0IEJYLCAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgKlhHSV9HZXRUVlB0cih1bnNpZ25lZCBzaG9ydCBCWCwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0ZpcmVQV0RFbmFibGUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9FbmFibGVHYXRpbmdDUlQoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRGlzYWJsZUdhdGluZ0NSVChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRQYW5lbERlbGF5KHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRQYW5lbFBvd2VyKHVuc2lnbmVkIHNob3J0IHRlbXBhaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0VuYWJsZVBXRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0Rpc2FibGVQV0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9BdXRvVGhyZXNob2xkKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0VGFwNFJlZ3Moc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAotdm9pZCAgICAgWEdJX0Rpc3BsYXlPbihQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfRGlzcGxheU9mZiggUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQxR3JvdXAoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WEcyMUNSVEMoVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0WEcyMUxDRChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFVTSE9SVCBNb2RlTm8pOwotdm9pZCAgICAgWEdJX1NldFhHMjdDUlRDKFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFhHMjdMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgTW9kZU5vKTsKLXZvaWQJIFhHSV9VcGRhdGVYRzIxQ1JUQyhVU0hPUlQgTW9kZU5vLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbywgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCk7Ci12b2lkICAgICBYR0lfV2FpdERpc3BseShQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2Vuc2VDUlQxKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRTZXFSZWdzKFVTSE9SVCBNb2RlTm8sVVNIT1JUIFN0YW5kVGFibGVJbmRleCxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldE1pc2NSZWdzKFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRDUlRDUmVncyhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRBVFRSZWdzKFVTSE9SVCBNb2RlTm8sVVNIT1JUIFN0YW5kVGFibGVJbmRleCxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9TZXRHUkNSZWdzKFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9DbGVhckV4dDFSZWdzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9EaXNwbGF5T24oc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0Rpc3BsYXlPZmYoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVDFHcm91cChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzIxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0WEcyMUxDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgdW5zaWduZWQgc2hvcnQgTW9kZU5vKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzI3Q1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0WEcyN0xDRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgdW5zaWduZWQgc2hvcnQgTW9kZU5vKTsKK3ZvaWQJIFhHSV9VcGRhdGVYRzIxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4KTsKK3ZvaWQgICAgIFhHSV9XYWl0RGlzcGx5KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2Vuc2VDUlQxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0U2VxUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0TWlzY1JlZ3ModW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVENSZWdzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0QVRUUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0R1JDUmVncyh1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfQ2xlYXJFeHQxUmVncyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCi12b2lkICAgICBYR0lfU2V0U3luYyhVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQxQ1JUQyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24pOwotdm9pZCAgICAgWEdJX1NldENSVDFUaW1pbmdfSChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQxVGltaW5nX1YoVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBNb2RlTm8sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDFERShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDFWQ0xLKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDFGSUZPKFVTSE9SVCBNb2RlTm8sUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDFNb2RlUmVncyhQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFZDTEtTdGF0ZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFVTSE9SVCBNb2RlTm8sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0U3luYyh1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMUNSVEModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxVGltaW5nX0goc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbik7Cit2b2lkICAgICBYR0lfU2V0Q1JUMVRpbWluZ19WKHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMURFKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMVZDTEsodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxRklGTyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldENSVDFNb2RlUmVncyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFZDTEtTdGF0ZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLXZvaWQgICAgIFhHSV9Mb2FkREFDKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9Xcml0ZURBQyhVU0hPUlQgZGwsIFVTSE9SVCBhaCwgVVNIT1JUIGFsLCBVU0hPUlQgZGgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLS8qdm9pZCAgICAgWEdJX0NsZWFyQnVmZmVyKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ki8KLXZvaWQgICAgIFhHSV9TZXRMQ0RBR3JvdXAoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldExWRFNSZXNJbmZvKCBVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldExWRFNEYXRhKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9Nb2RDUlQxUmVncyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRMVkRTUmVncyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfVXBkYXRlTW9kZUluZm8oUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFZHQVR5cGUoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFZCVHlwZShQVkJfREVWSUNFX0lORk8gIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFZCSW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfR2V0VFZJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMkVDTEsoIFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKTsKLXZvaWQgICAgIEluaXRUbzMzMFBvaW50ZXIoVUNIQVIsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldExDRFN5bmMoVVNIT1JUKiBIU3luY1dpZHRoLCBVU0hPUlQqIFZTeW5jV2lkdGgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgCSBYR0lfRGlzYWJsZUJyaWRnZShQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAJIFhHSV9FbmFibGVCcmlkZ2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldENSVDJWQ0xLKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9PRU0zMTBTZXR0aW5nKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0RGVsYXlDb21wKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRMQ0RDYXAoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldExDRENhcF9BKFVTSE9SVCB0ZW1wY3gsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldExDRENhcF9CKFVTSE9SVCB0ZW1wY3gsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgU2V0U3BlY3RydW0oUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldEFudGlGbGlja2VyKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0RWRnZUVuaGFuY2UoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9TZXRQaGFzZUluY3IoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFlGaWx0ZXIoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9HZXRUVlB0ckluZGV4MihVU0hPUlQqIHRlbXBieCxVQ0hBUiogdGVtcGNsLFVDSEFSKiB0ZW1wY2gsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVTSE9SVCAgIFhHSV9HZXRUVlB0ckluZGV4KCAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9TZXRDUlQyTW9kZVJlZ3MoVVNIT1JUIE1vZGVObyxQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotdm9pZCAgICAgWEdJX0Nsb3NlQ1JUQyhQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfT3BlbkNSVEMoUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFJBTURBQzJEQVRBKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9VbkxvY2tDUlQyKFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9Mb2NrQ1JUMihQWEdJX0hXX0RFVklDRV9JTkZPLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lOZXdfRW5hYmxlQ1JUMihQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lOZXdfTENEX1dhaXRfVGltZShVQ0hBUiBEZWxheVRpbWUsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9Mb25nV2FpdChQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfU2V0Q1JUMU9mZnNldCggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci12b2lkICAgICBYR0lfR2V0TENEVkNMS1B0cihVQ0hBUiogZGlfMCxVQ0hBUiAqZGlfMSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVUNIQVIgICAgWEdJX0dldFZDTEtQdHIoVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX0dldFZDTEtMZW4oVUNIQVIgdGVtcGFsLFVDSEFSKiBkaV8wLFVDSEFSKiBkaV8xLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VU0hPUlQgICBYR0lfR2V0TENEQ2FwUHRyKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVVTSE9SVCAgIFhHSV9HZXRMQ0RDYXBQdHIxKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCogWEdJX0dldFRhcDRQdHIoVVNIT1JUIHRlbXBjeCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFhHMjFGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1NldFhHMjdGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotVUNIQVIgICAgWEdJX1hHMjFHZXRQU0NWYWx1ZShQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1VQ0hBUiAgICBYR0lfWEcyN0dldFBTQ1ZhbHVlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLXZvaWQgICAgIFhHSV9YRzIxQkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci12b2lkICAgICBYR0lfWEcyN0JMU2lnbmFsVkREKFVTSE9SVCB0ZW1wYmgsVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotdm9pZCAgICAgWEdJX1hHMjFTZXRQYW5lbERlbGF5KFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLUJPT0xFQU4gIFhHSV9YRzIxQ2hlY2tMVkRTTW9kZShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLXZvaWQgICAgIFhHSV9TZXRYRzIxTFZEU1BhcmEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci12b2lkICAgICBYR0lfU2V0WEcyN0xWRFNQYXJhKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwotVUNIQVIgICAgWEdJX1NldERlZmF1bHRWQ0xLKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApOwordm9pZCAgICAgWEdJX0xvYWREQUModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9Xcml0ZURBQyh1bnNpZ25lZCBzaG9ydCBkbCwgdW5zaWduZWQgc2hvcnQgYWgsIHVuc2lnbmVkIHNob3J0IGFsLCB1bnNpZ25lZCBzaG9ydCBkaCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKKy8qdm9pZCAgICAgWEdJX0NsZWFyQnVmZmVyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Ki8KK3ZvaWQgICAgIFhHSV9TZXRMQ0RBR3JvdXAodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0TFZEU1Jlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldExWRFNEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9Nb2RDUlQxUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldExWRFNSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9VcGRhdGVNb2RlSW5mbyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRWR0FUeXBlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFZCVHlwZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFZCSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9HZXRUVkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQyRUNMSyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0TENEU3luYyh1bnNpZ25lZCBzaG9ydCAqSFN5bmNXaWR0aCwgdW5zaWduZWQgc2hvcnQgKlZTeW5jV2lkdGgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfRGlzYWJsZUJyaWRnZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9FbmFibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMlZDTEsodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX09FTTMxMFNldHRpbmcodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXREZWxheUNvbXAoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRMQ0RDYXAoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRMQ0RDYXBfQSh1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0TENEQ2FwX0IodW5zaWduZWQgc2hvcnQgdGVtcGN4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgU2V0U3BlY3RydW0oc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRBbnRpRmxpY2tlcih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldEVkZ2VFbmhhbmNlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0UGhhc2VJbmNyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0WUZpbHRlcih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFRWUHRySW5kZXgyKHVuc2lnbmVkIHNob3J0ICp0ZW1wYngsIHVuc2lnbmVkIGNoYXIqIHRlbXBjbCwKKwkJCSAgICB1bnNpZ25lZCBjaGFyICp0ZW1wY2gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCAgIFhHSV9HZXRUVlB0ckluZGV4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0Q1JUMk1vZGVSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0Nsb3NlQ1JUQyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfT3BlbkNSVEMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFJBTURBQzJEQVRBKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9VbkxvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9Mb2NrQ1JUMihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lOZXdfRW5hYmxlQ1JUMihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJTmV3X0xDRF9XYWl0X1RpbWUodW5zaWduZWQgY2hhciBEZWxheVRpbWUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRDUlQxT2Zmc2V0KHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfR2V0TENEVkNMS1B0cih1bnNpZ25lZCBjaGFyICpkaV8wLCB1bnNpZ25lZCBjaGFyICpkaV8xLAorCQkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgICAgWEdJX0dldFZDTEtQdHIodW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkJCXVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX0dldFZDTEtMZW4odW5zaWduZWQgY2hhciB0ZW1wYWwsIHVuc2lnbmVkIGNoYXIgKmRpXzAsCisJCQl1bnNpZ25lZCBjaGFyICpkaV8xLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgc2hvcnQgICBYR0lfR2V0TENEQ2FwUHRyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBzaG9ydCAgIFhHSV9HZXRMQ0RDYXBQdHIxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0ICpYR0lfR2V0VGFwNFB0cih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfU2V0WEcyMUZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1NldFhHMjdGUEJpdHMoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgICAgWEdJX1hHMjFHZXRQU0NWYWx1ZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordW5zaWduZWQgY2hhciAgICBYR0lfWEcyN0dldFBTQ1ZhbHVlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit2b2lkICAgICBYR0lfWEcyMUJMU2lnbmFsVkREKHVuc2lnbmVkIHNob3J0IHRlbXBiaCwgdW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwordm9pZCAgICAgWEdJX1hHMjdCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9YRzIxU2V0UGFuZWxEZWxheSh1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7Cit1bnNpZ25lZCBjaGFyICBYR0lfWEcyMUNoZWNrTFZEU01vZGUodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzIxTFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3ZvaWQgICAgIFhHSV9TZXRYRzI3TFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK3Vuc2lnbmVkIGNoYXIgIFhHSV9TZXREZWZhdWx0VkNMSyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOwogCi1leHRlcm4gICB2b2lkIAkgIFJlYWRWQklPU1RhYmxEYXRhKCBVQ0hBUiBDaGlwVHlwZSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLSNpZmRlZiBXSU4yMDAwCi0vKiBbQmlsbHldIDIwMDcvMDUvMTcgRm9yIENINzAwNyAqLwotZXh0ZXJuICBVQ0hBUiBDSDcwMDdUVlJlZ19VTlRTQ1tdWzhdLENINzAwN1RWUmVnX09OVFNDW11bOF0sQ0g3MDA3VFZSZWdfVVBBTFtdWzhdLENINzAwN1RWUmVnX09QQUxbXVs4XTsKLWV4dGVybiAgVUNIQVIgQ0g3MDA3VFZDUlQxVU5UU0NfSFtdWzEwXSxDSDcwMDdUVkNSVDFPTlRTQ19IW11bMTBdLENINzAwN1RWQ1JUMVVQQUxfSFtdWzEwXSxDSDcwMDdUVkNSVDFPUEFMX0hbXVsxMF0gOwotZXh0ZXJuICBVQ0hBUiBDSDcwMDdUVkNSVDFVTlRTQ19WW11bMTBdLENINzAwN1RWQ1JUMU9OVFNDX1ZbXVsxMF0sQ0g3MDA3VFZDUlQxVVBBTF9WW11bMTBdLENINzAwN1RWQ1JUMU9QQUxfVltdWzEwXSA7Ci1leHRlcm4gIFVDSEFSIFhHSTcwMDdfQ0hUVlZDTEtVTlRTQ1tdLFhHSTcwMDdfQ0hUVlZDTEtPTlRTQ1tdLFhHSTcwMDdfQ0hUVlZDTEtVUEFMW10sWEdJNzAwN19DSFRWVkNMS09QQUxbXTsKK2V4dGVybiB2b2lkIFJlYWRWQklPU1RhYmxEYXRhKHVuc2lnbmVkIGNoYXIgQ2hpcFR5cGUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLWV4dGVybiAgQk9PTEVBTiBYR0lfWEcyMUNoZWNrQ0g3MDA3VFZNb2RlKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApIDsKLWV4dGVybiAgdm9pZCBTZXRDSDcwMDdSZWdzKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkgOwotZXh0ZXJuICBWUF9TVEFUVVMgVHVybk9uQ0g3MDA3KFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFKSA7Ci1leHRlcm4gIFZQX1NUQVRVUyBUdXJuT2ZmQ0g3MDA3KFBIV19ERVZJQ0VfRVhURU5TSU9OIHBIV0RFKSA7Ci1leHRlcm4gIEJPT0xFQU4gSXNDSDcwMDdUVk1vZGUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pIDsKLSNlbmRpZgotCi0vKiBVU0hPUlQgWEdJTmV3X2ZsYWdfY2xlYXJidWZmZXI7IDA6IG5vIGNsZWFyIGZyYW1lIGJ1ZmZlciAxOmNsZWFyIGZyYW1lIGJ1ZmZlciAqLworLyogdW5zaWduZWQgc2hvcnQgWEdJTmV3X2ZsYWdfY2xlYXJidWZmZXI7IDA6IG5vIGNsZWFyIGZyYW1lIGJ1ZmZlciAxOmNsZWFyIGZyYW1lIGJ1ZmZlciAqLwogCiAKK3Vuc2lnbmVkIHNob3J0IFhHSU5ld19NREFfREFDW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LCAweDE1LAorCTB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsCisJMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsIDB4MTUsCisJMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwgMHgxNSwKKwkweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGLCAweDNGfTsKIAordW5zaWduZWQgc2hvcnQgWEdJTmV3X0NHQV9EQUNbXSA9IHsKKwkweDAwLCAweDEwLCAweDA0LCAweDE0LCAweDAxLCAweDExLCAweDA5LCAweDE1LAorCTB4MDAsIDB4MTAsIDB4MDQsIDB4MTQsIDB4MDEsIDB4MTEsIDB4MDksIDB4MTUsCisJMHgyQSwgMHgzQSwgMHgyRSwgMHgzRSwgMHgyQiwgMHgzQiwgMHgyRiwgMHgzRiwKKwkweDJBLCAweDNBLCAweDJFLCAweDNFLCAweDJCLCAweDNCLCAweDJGLCAweDNGLAorCTB4MDAsIDB4MTAsIDB4MDQsIDB4MTQsIDB4MDEsIDB4MTEsIDB4MDksIDB4MTUsCisJMHgwMCwgMHgxMCwgMHgwNCwgMHgxNCwgMHgwMSwgMHgxMSwgMHgwOSwgMHgxNSwKKwkweDJBLCAweDNBLCAweDJFLCAweDNFLCAweDJCLCAweDNCLCAweDJGLCAweDNGLAorCTB4MkEsIDB4M0EsIDB4MkUsIDB4M0UsIDB4MkIsIDB4M0IsIDB4MkYsIDB4M0Z9OwogCit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfRUdBX0RBQ1tdID0geworCTB4MDAsIDB4MTAsIDB4MDQsIDB4MTQsIDB4MDEsIDB4MTEsIDB4MDUsIDB4MTUsCisJMHgyMCwgMHgzMCwgMHgyNCwgMHgzNCwgMHgyMSwgMHgzMSwgMHgyNSwgMHgzNSwKKwkweDA4LCAweDE4LCAweDBDLCAweDFDLCAweDA5LCAweDE5LCAweDBELCAweDFELAorCTB4MjgsIDB4MzgsIDB4MkMsIDB4M0MsIDB4MjksIDB4MzksIDB4MkQsIDB4M0QsCisJMHgwMiwgMHgxMiwgMHgwNiwgMHgxNiwgMHgwMywgMHgxMywgMHgwNywgMHgxNywKKwkweDIyLCAweDMyLCAweDI2LCAweDM2LCAweDIzLCAweDMzLCAweDI3LCAweDM3LAorCTB4MEEsIDB4MUEsIDB4MEUsIDB4MUUsIDB4MEIsIDB4MUIsIDB4MEYsIDB4MUYsCisJMHgyQSwgMHgzQSwgMHgyRSwgMHgzRSwgMHgyQiwgMHgzQiwgMHgyRiwgMHgzRn07CiAKLVVTSE9SVCBYR0lOZXdfTURBX0RBQ1tdPXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAgICAgICAgICAgICAweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsCi0gICAgICAgICAgICAgICAweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsCi0gICAgICAgICAgICAgICAweDNGLDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRiwweDNGLDB4M0YsCi0gICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAgICAgICAgICAgICAweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsCi0gICAgICAgICAgICAgICAweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsCi0gICAgICAgICAgICAgICAweDNGLDB4M0YsMHgzRiwweDNGLDB4M0YsMHgzRiwweDNGLDB4M0Z9OwotCi1VU0hPUlQgWEdJTmV3X0NHQV9EQUNbXT17MHgwMCwweDEwLDB4MDQsMHgxNCwweDAxLDB4MTEsMHgwOSwweDE1LAotICAgICAgICAgICAgICAgMHgwMCwweDEwLDB4MDQsMHgxNCwweDAxLDB4MTEsMHgwOSwweDE1LAotICAgICAgICAgICAgICAgMHgyQSwweDNBLDB4MkUsMHgzRSwweDJCLDB4M0IsMHgyRiwweDNGLAotICAgICAgICAgICAgICAgMHgyQSwweDNBLDB4MkUsMHgzRSwweDJCLDB4M0IsMHgyRiwweDNGLAotICAgICAgICAgICAgICAgMHgwMCwweDEwLDB4MDQsMHgxNCwweDAxLDB4MTEsMHgwOSwweDE1LAotICAgICAgICAgICAgICAgMHgwMCwweDEwLDB4MDQsMHgxNCwweDAxLDB4MTEsMHgwOSwweDE1LAotICAgICAgICAgICAgICAgMHgyQSwweDNBLDB4MkUsMHgzRSwweDJCLDB4M0IsMHgyRiwweDNGLAotICAgICAgICAgICAgICAgMHgyQSwweDNBLDB4MkUsMHgzRSwweDJCLDB4M0IsMHgyRiwweDNGfTsKLQotVVNIT1JUIFhHSU5ld19FR0FfREFDW109ezB4MDAsMHgxMCwweDA0LDB4MTQsMHgwMSwweDExLDB4MDUsMHgxNSwKLSAgICAgICAgICAgICAgIDB4MjAsMHgzMCwweDI0LDB4MzQsMHgyMSwweDMxLDB4MjUsMHgzNSwKLSAgICAgICAgICAgICAgIDB4MDgsMHgxOCwweDBDLDB4MUMsMHgwOSwweDE5LDB4MEQsMHgxRCwKLSAgICAgICAgICAgICAgIDB4MjgsMHgzOCwweDJDLDB4M0MsMHgyOSwweDM5LDB4MkQsMHgzRCwKLSAgICAgICAgICAgICAgIDB4MDIsMHgxMiwweDA2LDB4MTYsMHgwMywweDEzLDB4MDcsMHgxNywKLSAgICAgICAgICAgICAgIDB4MjIsMHgzMiwweDI2LDB4MzYsMHgyMywweDMzLDB4MjcsMHgzNywKLSAgICAgICAgICAgICAgIDB4MEEsMHgxQSwweDBFLDB4MUUsMHgwQiwweDFCLDB4MEYsMHgxRiwKLSAgICAgICAgICAgICAgIDB4MkEsMHgzQSwweDJFLDB4M0UsMHgyQiwweDNCLDB4MkYsMHgzRn07Ci0KLVVTSE9SVCBYR0lOZXdfVkdBX0RBQ1tdPXsweDAwLDB4MTAsMHgwNCwweDE0LDB4MDEsMHgxMSwweDA5LDB4MTUsCi0gICAgICAgICAgICAgICAweDJBLDB4M0EsMHgyRSwweDNFLDB4MkIsMHgzQiwweDJGLDB4M0YsCi0gICAgICAgICAgICAgICAweDAwLDB4MDUsMHgwOCwweDBCLDB4MEUsMHgxMSwweDE0LDB4MTgsCi0gICAgICAgICAgICAgICAweDFDLDB4MjAsMHgyNCwweDI4LDB4MkQsMHgzMiwweDM4LDB4M0YsCi0KLSAgICAgICAgICAgICAgIDB4MDAsMHgxMCwweDFGLDB4MkYsMHgzRiwweDFGLDB4MjcsMHgyRiwKLSAgICAgICAgICAgICAgIDB4MzcsMHgzRiwweDJELDB4MzEsMHgzNiwweDNBLDB4M0YsMHgwMCwKLSAgICAgICAgICAgICAgIDB4MDcsMHgwRSwweDE1LDB4MUMsMHgwRSwweDExLDB4MTUsMHgxOCwKLSAgICAgICAgICAgICAgIDB4MUMsMHgxNCwweDE2LDB4MTgsMHgxQSwweDFDLDB4MDAsMHgwNCwKLSAgICAgICAgICAgICAgIDB4MDgsMHgwQywweDEwLDB4MDgsMHgwQSwweDBDLDB4MEUsMHgxMCwKLSAgICAgICAgICAgICAgIDB4MEIsMHgwQywweDBELDB4MEYsMHgxMH07Cit1bnNpZ25lZCBzaG9ydCBYR0lOZXdfVkdBX0RBQ1tdID0geworCTB4MDAsIDB4MTAsIDB4MDQsIDB4MTQsIDB4MDEsIDB4MTEsIDB4MDksIDB4MTUsCisJMHgyQSwgMHgzQSwgMHgyRSwgMHgzRSwgMHgyQiwgMHgzQiwgMHgyRiwgMHgzRiwKKwkweDAwLCAweDA1LCAweDA4LCAweDBCLCAweDBFLCAweDExLCAweDE0LCAweDE4LAorCTB4MUMsIDB4MjAsIDB4MjQsIDB4MjgsIDB4MkQsIDB4MzIsIDB4MzgsIDB4M0YsCisJMHgwMCwgMHgxMCwgMHgxRiwgMHgyRiwgMHgzRiwgMHgxRiwgMHgyNywgMHgyRiwKKwkweDM3LCAweDNGLCAweDJELCAweDMxLCAweDM2LCAweDNBLCAweDNGLCAweDAwLAorCTB4MDcsIDB4MEUsIDB4MTUsIDB4MUMsIDB4MEUsIDB4MTEsIDB4MTUsIDB4MTgsCisJMHgxQywgMHgxNCwgMHgxNiwgMHgxOCwgMHgxQSwgMHgxQywgMHgwMCwgMHgwNCwKKwkweDA4LCAweDBDLCAweDEwLCAweDA4LCAweDBBLCAweDBDLCAweDBFLCAweDEwLAorCTB4MEIsIDB4MEMsIDB4MEQsIDB4MEYsIDB4MTB9OwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjUwLDM1ICsyNDAsMzUgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgSW5pdFRvMzMwUG9pbnRlciggVUNIQVIgQ2hpcFR5cGUgLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIgQ2hpcFR5cGUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBwVkJJbmZvLT5TTW9kZUlEVGFibGUgPSAoWEdJX1N0U3RydWN0ICopIFhHSTMzMF9TTW9kZUlEVGFibGUgOwotICAgIHBWQkluZm8tPlN0YW5kVGFibGUgPSAoWEdJX1N0YW5kVGFibGVTdHJ1Y3QgKikgWEdJMzMwX1N0YW5kVGFibGUgOwotICAgIHBWQkluZm8tPkVNb2RlSURUYWJsZSA9IChYR0lfRXh0U3RydWN0ICopIFhHSTMzMF9FTW9kZUlEVGFibGUgOwotICAgIHBWQkluZm8tPlJlZkluZGV4ID0gKFhHSV9FeHQyU3RydWN0ICopIFhHSTMzMF9SZWZJbmRleCA7Ci0gICAgcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlID0gKFhHSV9DUlQxVGFibGVTdHJ1Y3QgKikgWEdJX0NSVDFUYWJsZSA7CisgICAgcFZCSW5mby0+U01vZGVJRFRhYmxlID0gKHN0cnVjdCBYR0lfU3RTdHJ1Y3QgKikgWEdJMzMwX1NNb2RlSURUYWJsZSA7CisgICAgcFZCSW5mby0+U3RhbmRUYWJsZSA9IChzdHJ1Y3QgWEdJX1N0YW5kVGFibGVTdHJ1Y3QgKikgWEdJMzMwX1N0YW5kVGFibGUgOworICAgIHBWQkluZm8tPkVNb2RlSURUYWJsZSA9IChzdHJ1Y3QgWEdJX0V4dFN0cnVjdCAqKSBYR0kzMzBfRU1vZGVJRFRhYmxlIDsKKyAgICBwVkJJbmZvLT5SZWZJbmRleCA9IChzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QgKikgWEdJMzMwX1JlZkluZGV4IDsKKyAgICBwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGUgPSAoc3RydWN0IFhHSV9DUlQxVGFibGVTdHJ1Y3QgKikgWEdJX0NSVDFUYWJsZSA7CiAKICAgICAvKiBhZGQgZm9yIG5ldyBVTklWR0FCSU9TICovCi0gICAgLyogWEdJTmV3X1VCTENERGF0YVRhYmxlID0gKFhHSV9MQ0REYXRhVGFibFN0cnVjdCAqKSBYR0lfTENERGF0YVRhYmxlIDsgKi8KKyAgICAvKiBYR0lOZXdfVUJMQ0REYXRhVGFibGUgPSAoc3RydWN0IFhHSV9MQ0REYXRhVGFibFN0cnVjdCAqKSBYR0lfTENERGF0YVRhYmxlIDsgKi8KICAgICAvKiBYR0lOZXdfVUJUVkRhdGFUYWJsZSA9IChYR0lfVFZEYXRhVGFibFN0cnVjdCAqKSBYR0lfVFZEYXRhVGFibGUgOyAqLwogCiAKICAgICBpZiAoIENoaXBUeXBlID49IFhHNDAgKQogICAgIHsKLSAgICAgICAgcFZCSW5mby0+TUNMS0RhdGEgPSAoWEdJX01DTEtEYXRhU3RydWN0ICopIFhHSTM0ME5ld19NQ0xLRGF0YSA7Ci0gICAgICAgIHBWQkluZm8tPkVDTEtEYXRhID0gKFhHSV9FQ0xLRGF0YVN0cnVjdCAqKSBYR0kzNDBfRUNMS0RhdGEgOworCXBWQkluZm8tPk1DTEtEYXRhID0gKHN0cnVjdCBYR0lfTUNMS0RhdGFTdHJ1Y3QgKikgWEdJMzQwTmV3X01DTEtEYXRhOworCXBWQkluZm8tPkVDTEtEYXRhID0gKHN0cnVjdCBYR0lfRUNMS0RhdGFTdHJ1Y3QgKikgWEdJMzQwX0VDTEtEYXRhOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBwVkJJbmZvLT5NQ0xLRGF0YSA9IChYR0lfTUNMS0RhdGFTdHJ1Y3QgKikgWEdJMzMwTmV3X01DTEtEYXRhIDsKLSAgICAgICAgcFZCSW5mby0+RUNMS0RhdGEgPSAoWEdJX0VDTEtEYXRhU3RydWN0ICopIFhHSTMzMF9FQ0xLRGF0YSA7CisJcFZCSW5mby0+TUNMS0RhdGEgPSAoc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCAqKSBYR0kzMzBOZXdfTUNMS0RhdGE7CisJcFZCSW5mby0+RUNMS0RhdGEgPSAoc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCAqKSBYR0kzMzBfRUNMS0RhdGE7CiAgICAgfQogCi0gICAgcFZCSW5mby0+VkNMS0RhdGEgPSAoWEdJX1ZDTEtEYXRhU3RydWN0ICopIFhHSV9WQ0xLRGF0YSA7Ci0gICAgcFZCSW5mby0+VkJWQ0xLRGF0YSA9IChYR0lfVkJWQ0xLRGF0YVN0cnVjdCAqKSBYR0lfVkJWQ0xLRGF0YSA7CisgICAgcFZCSW5mby0+VkNMS0RhdGEgPSAoc3RydWN0IFhHSV9WQ0xLRGF0YVN0cnVjdCAqKSBYR0lfVkNMS0RhdGEgOworICAgIHBWQkluZm8tPlZCVkNMS0RhdGEgPSAoc3RydWN0IFhHSV9WQlZDTEtEYXRhU3RydWN0ICopIFhHSV9WQlZDTEtEYXRhIDsKICAgICBwVkJJbmZvLT5TY3JlZW5PZmZzZXQgPSBYR0kzMzBfU2NyZWVuT2Zmc2V0IDsKLSAgICBwVkJJbmZvLT5TdFJlc0luZm8gPSAoWEdJX1N0UmVzSW5mb1N0cnVjdCAqKSBYR0kzMzBfU3RSZXNJbmZvIDsKLSAgICBwVkJJbmZvLT5Nb2RlUmVzSW5mbyA9IChYR0lfTW9kZVJlc0luZm9TdHJ1Y3QgKikgWEdJMzMwX01vZGVSZXNJbmZvIDsKKyAgICBwVkJJbmZvLT5TdFJlc0luZm8gPSAoc3RydWN0IFhHSV9TdFJlc0luZm9TdHJ1Y3QgKikgWEdJMzMwX1N0UmVzSW5mbyA7CisgICAgcFZCSW5mby0+TW9kZVJlc0luZm8gPSAoc3RydWN0IFhHSV9Nb2RlUmVzSW5mb1N0cnVjdCAqKSBYR0kzMzBfTW9kZVJlc0luZm8gOwogCiAgICAgcFZCSW5mby0+cE91dHB1dFNlbGVjdCA9ICZYR0kzMzBfT3V0cHV0U2VsZWN0IDsKICAgICBwVkJJbmZvLT5wU29mdFNldHRpbmcgPSAmWEdJMzMwX1NvZnRTZXR0aW5nIDsKQEAgLTM0Miw5ICszMzIsOSBAQAogICAgIHBWQkluZm8tPlJlbjc1MHBHcm91cDMgPSBYR0kzMzBfUmVuNzUwcEdyb3VwMyA7CiAKIAotICAgIHBWQkluZm8tPlRpbWluZ0ggPSAoWEdJX1RpbWluZ0hTdHJ1Y3QgKikgWEdJX1RpbWluZ0ggOwotICAgIHBWQkluZm8tPlRpbWluZ1YgPSAoWEdJX1RpbWluZ1ZTdHJ1Y3QgKikgWEdJX1RpbWluZ1YgOwotICAgIHBWQkluZm8tPlVwZGF0ZUNSVDEgPSAoWEdJX1hHMjFDUlQxU3RydWN0ICopIFhHSV9VcGRhdGVDUlQxVGFibGUgOworICAgIHBWQkluZm8tPlRpbWluZ0ggPSAoc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0ICopIFhHSV9UaW1pbmdIIDsKKyAgICBwVkJJbmZvLT5UaW1pbmdWID0gKHN0cnVjdCBYR0lfVGltaW5nVlN0cnVjdCAqKSBYR0lfVGltaW5nViA7CisgICAgcFZCSW5mby0+VXBkYXRlQ1JUMSA9IChzdHJ1Y3QgWEdJX1hHMjFDUlQxU3RydWN0ICopIFhHSV9VcGRhdGVDUlQxVGFibGUgOwogCiAgICAgcFZCSW5mby0+Q0hUVlZDTEtVTlRTQyA9IFhHSTMzMF9DSFRWVkNMS1VOVFNDIDsKICAgICBwVkJJbmZvLT5DSFRWVkNMS09OVFNDID0gWEdJMzMwX0NIVFZWQ0xLT05UU0MgOwpAQCAtMzcxLDcgKzM2MSw3IEBACiAKICAgICBpZiAoIENoaXBUeXBlID09IFhHMjcgKQogICAgIHsKLSAgICAgICAgcFZCSW5mby0+TUNMS0RhdGEgPSAoWEdJX01DTEtEYXRhU3RydWN0ICopIFhHSTI3TmV3X01DTEtEYXRhIDsKKwlwVkJJbmZvLT5NQ0xLRGF0YSA9IChzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0ICopIFhHSTI3TmV3X01DTEtEYXRhOwogICAgICAgICBwVkJJbmZvLT5DUjQwID0gWEdJMjdfY3I0MSA7CiAgICAgCXBWQkluZm8tPnBYR0lOZXdfQ1I5NyA9ICZYRzI3X0NSOTcgOwogICAgIAlwVkJJbmZvLT5wU1IzNiA9ICZYRzI3X1NSMzYgOwpAQCAtNDA1LDE0ICszOTUsMTUgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJU2V0TW9kZU5ldyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBNb2RlTm8gKQordW5zaWduZWQgY2hhciBYR0lTZXRNb2RlTmV3KHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObykKIHsKLSAgICBVU0hPUlQgTW9kZUlkSW5kZXggOwotICAgICAgICAvKiBQVUNIQVIgcFZCSW5mby0+RkJBZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlkZW9NZW1vcnlBZGRyZXNzIDsgKi8KLSAgICBWQl9ERVZJQ0VfSU5GTyBWQklORjsKLSAgICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyA9ICZWQklORjsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCA7CisgICAgICAgIC8qIHVuc2lnbmVkIGNoYXIgKnBWQkluZm8tPkZCQWRkciA9IEh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7ICovCisgICAgc3RydWN0IHZiX2RldmljZV9pbmZvIFZCSU5GOworICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyA9ICZWQklORjsKICAgICBwVkJJbmZvLT5ST01BZGRyID0gSHdEZXZpY2VFeHRlbnNpb24tPnBqVmlydHVhbFJvbUJhc2UgOwotICAgIHBWQkluZm8tPkJhc2VBZGRyID0gKFVMT05HKUh3RGV2aWNlRXh0ZW5zaW9uLT5waklPQWRkcmVzcyA7CisgICAgcFZCSW5mby0+QmFzZUFkZHIgPSAodW5zaWduZWQgbG9uZylId0RldmljZUV4dGVuc2lvbi0+cGpJT0FkZHJlc3MgOwogICAgIHBWQkluZm8tPklGX0RFRl9MVkRTID0gMCA7CiAgICAgcFZCSW5mby0+SUZfREVGX0NINzAwNSA9IDAgOwogICAgIHBWQkluZm8tPklGX0RFRl9MQ0RBID0gMSA7CkBAIC00ODUsOSArNDc2LDYgQEAKICAgICBYR0lfR2V0VkJUeXBlKCBwVkJJbmZvICkgOwogCiAgICAgSW5pdFRvMzMwUG9pbnRlciggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSwgcFZCSW5mbyApIDsKLSNpZmRlZiBXSU4yMDAwCi0gICAgUmVhZFZCSU9TVGFibERhdGEoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgLCBwVkJJbmZvKSA7Ci0jZW5kaWYKICAgICBpZiAoIE1vZGVObyAmIDB4ODAgKQogICAgIHsKICAgICAgICAgTW9kZU5vID0gTW9kZU5vICYgMHg3RiA7CkBAIC01NjAsMzAgKzU0OCw5IEBACiAgICAgfQkvKiAhWEcyMCAqLwogICAgIGVsc2UKICAgICB7Ci0jaWZkZWYgV0lOMjAwMAotICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCi0gICAgICAgIHsKLQotICAgICAgICAgICAgVmlkZW9EZWJ1Z1ByaW50KCgwLCAiWEdJU2V0TW9kZU5ldzogcFZCSWZvLT5JRl9ERUZfQ0g3MDA3PT0xXG4iKSk7Ci0gICAgICAgICAgICBwVkJJbmZvLT5WQlR5cGUgPSBWQl9DSDcwMDcgOwotICAgICAgICAgICAgWEdJX0dldFZCSW5mbyhNb2RlTm8gLCBNb2RlSWRJbmRleCAsIEh3RGV2aWNlRXh0ZW5zaW9uLCBwVkJJbmZvICkgOwotICAgICAgICAgICAgWEdJX0dldFRWSW5mbyhNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbyApIDsKLSAgICAgICAgICAgIFhHSV9HZXRMQ0RJbmZvKE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwotICAgICAgICAgICAgaWYoICEoWEdJX1hHMjFDaGVja0NINzAwN1RWTW9kZShNb2RlTm8sIE1vZGVJZEluZGV4LCBwVkJJbmZvICkpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotCi0gICAgICAgIGlmICggcFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggIVhHSV9YRzIxQ2hlY2tMVkRTTW9kZShNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgaWYgKHBWQkluZm8tPklGX0RFRl9MVkRTID09IDEpCisJCSAgICBpZiAoIVhHSV9YRzIxQ2hlY2tMVkRTTW9kZShNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbykpCisJCQkgICAgcmV0dXJuIDA7CiAKICAgICAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgICAgIHsKQEAgLTY0Miw3ICs2MDksNyBAQAogICAgIFhHSV9Mb2NrQ1JUMiggSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7CiB9CiAKLSAgICByZXR1cm4oIFRSVUUgKSA7CisgICAgcmV0dXJuIDE7CiB9CiAKIApAQCAtNjUyLDE0ICs2MTksMTYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFHcm91cCggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFHcm91cChzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXggLAorICAgIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCAsCiAgICAgICAgICAgIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsCiAgICAgICAgICAgIGIzQ0MgLAogICAgICAgICAgICB0ZW1wIDsKIAotICAgIFVTSE9SVCBYR0lOZXdfUDNjYyA9ICBwVkJJbmZvLT5QM2NjOworICAgIHVuc2lnbmVkIHNob3J0IFhHSU5ld19QM2NjID0gIHBWQkluZm8tPlAzY2M7CiAKICAgICAvKiBYR0lOZXdfQ1JUMU1vZGUgPSBNb2RlTm8gOyAvLyBTYXZlTW9kZUlEICovCiAgICAgU3RhbmRUYWJsZUluZGV4ID0gWEdJX0dldE1vZGVQdHIoIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwpAQCAtNzEwLDE0ICs2NzksMTQgQEAKICAgICAJewogICAgIAkgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDJCICwgMHg0RSkgOwogICAgIAkgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDJDICwgMHhFOSkgOwotICAgIAkgICAgYjNDQyA9KFVDSEFSKSBYR0lOZXdfR2V0UmVnMihYR0lOZXdfUDNjYykgOworCSAgICBiM0NDID0gKHVuc2lnbmVkIGNoYXIpIFhHSU5ld19HZXRSZWcyKFhHSU5ld19QM2NjKSA7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMyhYR0lOZXdfUDNjYyAsICAoYjNDQyB8PSAweDBDKSApIDsKICAgICAJfQogICAgIAllbHNlIGlmICggKCBNb2RlTm8gPT0gMHgwNCkgfCAoIE1vZGVObyA9PSAweDA1KSB8ICggTW9kZU5vID09IDB4MEQpICkKICAgICAJewogICAgIAkgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDJCICwgMHgxQikgOwogICAgIAkgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDJDICwgMHhFMykgOwotICAgIAkgICAgYjNDQyA9IChVQ0hBUilYR0lOZXdfR2V0UmVnMihYR0lOZXdfUDNjYykgOworCSAgICBiM0NDID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzIoWEdJTmV3X1AzY2MpIDsKICAgICAJICAgIFhHSU5ld19TZXRSZWczKFhHSU5ld19QM2NjICwgIChiM0NDIHw9IDB4MEMpICkgOwogICAgIAl9CiAgICAgfQpAQCAtNzYzLDEzICs3MzIsNiBAQAogCiAgICAgWEdJX0xvYWREQUMoIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwogICAgIC8qIFhHSV9DbGVhckJ1ZmZlciggSHdEZXZpY2VFeHRlbnNpb24gLCBNb2RlTm8sIHBWQkluZm8gKSA7ICovCi0jaWZkZWYgV0lOMjAwMAotICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEgKSAgLyogW0JpbGx5XSAgMjAwNy8wNS8xNCAgKi8KLSAgIHsKLSAgICAgICBWaWRlb0RlYnVnUHJpbnQoKDAsICJYR0lfU2V0Q1JUMUdyb3VwOiBWQkluZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsKLSAgICAgICBTZXRDSDcwMDdSZWdzKEh3RGV2aWNlRXh0ZW5zaW9uLCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7IC8qIDA3LzA1LzI4ICovCi0gICB9Ci0jZW5kaWYKIH0KIAogCkBAIC03NzksOSArNzQxLDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VQ0hBUiBYR0lfR2V0TW9kZVB0ciggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfR2V0TW9kZVB0cih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBpbmRleCA7CisgICAgdW5zaWduZWQgY2hhciBpbmRleCA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICAgICAgaW5kZXggPSBwVkJJbmZvLT5TTW9kZUlEVGFibGVbIE1vZGVJZEluZGV4IF0uU3RfU3RUYWJsZUluZGV4IDsKQEAgLTgwMiw3ICs3NjUsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLypVQ0hBUiBYR0lfU2V0QklPU0RhdGEoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggKQorLyp1bnNpZ25lZCBjaGFyIFhHSV9TZXRCSU9TRGF0YSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4KQogewogICAgIHJldHVybiggMCApIDsKIH0KQEAgLTgxNCw3ICs3NzcsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLypVQ0hBUiBYR0lfQ2xlYXJCYW5rUmVncyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCApCisvKnVuc2lnbmVkIGNoYXIgWEdJX0NsZWFyQmFua1JlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCkKIHsKICAgICByZXR1cm4oIDAgKSA7CiB9CkBAIC04MjYsMTIgKzc4OSwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0U2VxUmVncyggIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgU3RhbmRUYWJsZUluZGV4ICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRTZXFSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wYWggLAorICAgIHVuc2lnbmVkIGNoYXIgdGVtcGFoICwKICAgICAgICAgICBTUmRhdGEgOwogCi0gICAgVVNIT1JUIGkgLAorICAgIHVuc2lnbmVkIHNob3J0IGkgLAogICAgICAgICAgICBtb2RlZmxhZyA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKQEAgLTg3Myw5ICs4MzcsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0TWlzY1JlZ3MoIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldE1pc2NSZWdzKHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIE1pc2NkYXRhIDsKKyAgICB1bnNpZ25lZCBjaGFyIE1pc2NkYXRhIDsKIAogICAgIE1pc2NkYXRhID0gcFZCSW5mby0+U3RhbmRUYWJsZVsgU3RhbmRUYWJsZUluZGV4IF0uTUlTQyA7CS8qIEdldCBNaXNjIGZyb20gZmlsZSAqLwogLyoKQEAgLTg5OCwxMiArODYyLDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlRDUmVncyggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVENSZWdzKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIENSVENkYXRhIDsKLSAgICBVU0hPUlQgaSA7CisgICAgdW5zaWduZWQgY2hhciBDUlRDZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgaSA7CiAKLSAgICBDUlRDZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsKKyAgICBDUlRDZGF0YSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MTEpOwogICAgIENSVENkYXRhICY9IDB4N2YgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSAsIENSVENkYXRhICkgOwkJLyogVW5sb2NrIENSVEMgKi8KIApAQCAtOTMzLDExICs4OTgsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEFUVFJlZ3MoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgU3RhbmRUYWJsZUluZGV4ICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRBVFRSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgU3RhbmRUYWJsZUluZGV4LAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBBUmRhdGEgOwotICAgIFVTSE9SVCBpICwKLSAgICAgICAgICAgbW9kZWZsYWcgOworICAgIHVuc2lnbmVkIGNoYXIgQVJkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpLCBtb2RlZmxhZzsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgICAgICBtb2RlZmxhZyA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5TdF9Nb2RlRmxhZyA7CkBAIC05ODMsMTAgKzk0OCwxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0R1JDUmVncyggVVNIT1JUIFN0YW5kVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0R1JDUmVncyh1bnNpZ25lZCBzaG9ydCBTdGFuZFRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBHUmRhdGEgOwotICAgIFVTSE9SVCBpIDsKKyAgICB1bnNpZ25lZCBjaGFyIEdSZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgaSA7CiAKICAgICBmb3IoIGkgPSAwIDsgaSA8PSAweDA4IDsgaSsrICkKICAgICB7CkBAIC05OTYsNyArOTYxLDcgQEAKIAogICAgIGlmICggcFZCSW5mby0+TW9kZVR5cGUgPiBNb2RlVkdBICkKICAgICB7Ci0gICAgICAgIEdSZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2NlICwgMHgwNSApIDsKKwlHUmRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2NlLCAweDA1KTsKICAgICAgICAgR1JkYXRhICY9IDB4QkYgOwkJCQkJCS8qIDI1NiBjb2xvciBkaXNhYmxlICovCiAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2NlICwgMHgwNSAsIEdSZGF0YSApIDsKICAgICB9CkBAIC0xMDA5LDkgKzk3NCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9DbGVhckV4dDFSZWdzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfQ2xlYXJFeHQxUmVncyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgOworICAgIHVuc2lnbmVkIHNob3J0IGkgOwogCiAgICAgZm9yKCBpID0gMHgwQSA7IGkgPD0gMHgwRSA7IGkrKyApCiAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgaSAsIDB4MDAgKSA7CS8qIENsZWFyIFNSMEEtU1IwRSAqLwpAQCAtMTAyNCw3ICs5ODksNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJX1NldERlZmF1bHRWQ0xLKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9TZXREZWZhdWx0VkNMSyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDMxICwgfjB4MzAgLCAweDIwICkgOwpAQCAtMTA0NiwxMyArMTAxMSwxNSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRSYXRlUHRyQ1JUMiggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSwgVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgc2hvcnQgWEdJX0dldFJhdGVQdHJDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLAorCQkJCSAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJCSAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkJICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgU0hPUlQgIExDRFJlZnJlc2hJbmRleFtdID0geyAweDAwICwgMHgwMCAsIDB4MDMgLCAweDAxIH0gLAorICAgIHNob3J0IExDRFJlZnJlc2hJbmRleFtdID0geyAweDAwICwgMHgwMCAsIDB4MDMgLCAweDAxIH0gLAogICAgICAgICAgICBMQ0RBUmVmcmVzaEluZGV4W10gPSB7IDB4MDAgLCAweDAwICwgMHgwMyAsIDB4MDEgLCAweDAxICwgMHgwMSAsIDB4MDEgfSA7CiAKLSAgICBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgaSAsCi0gICAgICAgICBtb2RlZmxhZyAsIGluZGV4ICwgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBpLCBtb2RlZmxhZywgaW5kZXgsIHRlbXA7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC0xMTgzLDEzICsxMTUwLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9BanVzdENSVDJSYXRlKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFVTSE9SVCAqaSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfQWp1c3RDUlQyUmF0ZSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCXVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCQl1bnNpZ25lZCBzaG9ydCAqaSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYXggLAotICAgICAgICAgICB0ZW1wYnggLAotICAgICAgICAgICByZXNpbmZvICwKLSAgICAgICAgICAgbW9kZWZsYWcgLAotICAgICAgICAgICBpbmZvZmxhZyA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4LCB0ZW1wYngsIHJlc2luZm8sIG1vZGVmbGFnLCBpbmZvZmxhZzsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgIHsKQEAgLTEzNTksOSArMTMyNCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRTeW5jKFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFN5bmModW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHN5bmMgLAorICAgIHVuc2lnbmVkIHNob3J0IHN5bmMgLAogICAgICAgICAgICB0ZW1wIDsKIAogICAgIHN5bmMgPSBwVkJJbmZvLT5SZWZJbmRleFsgUmVmcmVzaFJhdGVUYWJsZUluZGV4IF0uRXh0X0luZm9GbGFnID4+IDggOwkvKiBkaSsweDAwICovCkBAIC0xMzc4LDE3ICsxMzQzLDE4IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQxQ1JUQyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKQordm9pZCBYR0lfU2V0Q1JUMUNSVEModW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLAorCQkgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uKQogewotICAgIFVDSEFSICBpbmRleCAsCi0gICAgICAgICAgIGRhdGEgOwotCi0gICAgVVNIT1JUIGkgOworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXgsIGRhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgaTsKIAogICAgIGluZGV4ID0gcFZCSW5mby0+UmVmSW5kZXhbIFJlZnJlc2hSYXRlVGFibGVJbmRleCBdLkV4dF9DUlQxQ1JUQyA7CS8qIEdldCBpbmRleCAqLwogICAgIGluZGV4ID0gaW5kZXgmSW5kZXhNYXNrIDsKIAotICAgIGRhdGEgPSggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsKKyAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSk7CiAgICAgZGF0YSAmPSAweDdGIDsKICAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LDB4MTEsZGF0YSk7CQkJCS8qIFVubG9jayBDUlRDICovCiAKQEAgLTE0MTYsMTYgKzEzODIsMTYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFUaW1pbmdfSCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8sIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gKQordm9pZCBYR0lfU2V0Q1JUMVRpbWluZ19IKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24pCiB7Ci0gICAgVUNIQVIgZGF0YSAsIGRhdGExLCBwdXNoYXg7Ci0gICAgVVNIT1JUIGkgLCBqIDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGEsIGRhdGExLCBwdXNoYXg7CisgICAgdW5zaWduZWQgc2hvcnQgaSwgajsKIAogICAgIC8qIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg1MSAsIDAgKSA7ICovCiAgICAgLyogWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDU2ICwgMCApIDsgKi8KICAgICAvKiBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLDB4MTEgLCAweDdmICwgMHgwMCApIDsgKi8KIAotICAgIGRhdGEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTEgKSA7CQkvKiB1bmxvY2sgY3IwLTcgKi8KKyAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSk7IC8qIHVubG9jayBjcjAtNyAqLwogICAgIGRhdGEgJj0gMHg3RiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICwgZGF0YSApIDsKIApAQCAtMTQzNSwxNiArMTQwMSwxNiBAQAogICAgIGZvciggaSA9IDB4MDEgOyBpIDw9IDB4MDQgOyBpKysgKQogICAgIHsKICAgICAgICAgZGF0YSA9IHBWQkluZm8tPlRpbWluZ0hbIDAgXS5kYXRhWyBpIF0gOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUICkoIGkgKyAxICkgLCBkYXRhICkgOworCVhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0LCAodW5zaWduZWQgc2hvcnQpKGkgKyAxKSwgZGF0YSk7CiAgICAgfQogCiAgICAgZm9yKCBpID0gMHgwNSA7IGkgPD0gMHgwNiA7IGkrKyApCiAgICAgewogICAgICAgICBkYXRhID0gcFZCSW5mby0+VGltaW5nSFsgMCBdLmRhdGFbIGkgXTsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCggVVNIT1JUICkoIGkgKyA2ICkgLCBkYXRhICkgOworCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsICh1bnNpZ25lZCBzaG9ydCkoaSArIDYpLCBkYXRhKTsKICAgICB9CiAKLSAgICBqID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDBlICkgOworICAgIGogPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDBlKTsKICAgICBqICY9IDB4MUYgOwogICAgIGRhdGEgPSBwVkJJbmZvLT5UaW1pbmdIWyAwIF0uZGF0YVsgNyBdIDsKICAgICBkYXRhICY9IDB4RTAgOwpAQCAtMTQ1MywxNyArMTQxOSwxNyBAQAogCiAgICAgaWYgKCBId0RldmljZUV4dGVuc2lvbi0+akNoaXBUeXBlID49IFhHMjAgKQogICAgIHsKLSAgICAJZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgwNCApIDsKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgwNCk7CiAgICAgCWRhdGEgPSBkYXRhIC0gMSA7CiAgICAgCVhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgwNCAsIGRhdGEgKSA7Ci0gICAgCWRhdGEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MDUgKSA7CisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MDUpOwogICAgIAlkYXRhMSA9IGRhdGEgOwogICAgIAlkYXRhMSAmPSAweEUwIDsKICAgICAJZGF0YSAmPSAweDFGIDsKICAgICAJaWYgKCBkYXRhID09IDAgKQogICAgIAl7CiAgICAgCSAgICBwdXNoYXggPSBkYXRhIDsKLSAgICAJICAgIGRhdGEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MGMgKSA7CisJICAgIGRhdGEgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDBjKTsKICAgICAJICAgIGRhdGEgJj0gMHhGQiA7CiAgICAgCSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MGMgLCBkYXRhICkgOwogICAgIAkgICAgZGF0YSA9IHB1c2hheCA7CkBAIC0xNDcxLDcgKzE0MzcsNyBAQAogICAgIAlkYXRhID0gZGF0YSAtIDEgOwogICAgIAlkYXRhIHw9IGRhdGExIDsKICAgICAJWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA1ICwgZGF0YSApIDsKLSAgICAJZGF0YSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwZSApIDsKKwlkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwZSk7CiAgICAgCWRhdGEgPSBkYXRhID4+IDUgOwogICAgIAlkYXRhID0gZGF0YSArIDMgOwogICAgIAlpZiAoIGRhdGEgPiA3ICkKQEAgLTE0ODgsMTAgKzE0NTQsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFUaW1pbmdfViggVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIE1vZGVObyxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQxVGltaW5nX1YodW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgdW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBkYXRhIDsKLSAgICBVU0hPUlQgaSAsIGogOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCBpLCBqOwogCiAgICAgLyogWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUxICwgMCApIDsgKi8KICAgICAvKiBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTYgLCAwICkgOyAqLwpAQCAtMTUwMCwyMiArMTQ2OCwyMiBAQAogICAgIGZvciggaSA9IDB4MDAgOyBpIDw9IDB4MDEgOyBpKysgKQogICAgIHsKICAgICAgICAgZGF0YSA9IHBWQkluZm8tPlRpbWluZ1ZbIDAgXS5kYXRhWyBpIF0gOwotICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsICggVVNIT1JUICkoIGkgKyA2ICkgLCBkYXRhICkgOworCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsICh1bnNpZ25lZCBzaG9ydCkoaSArIDYpLCBkYXRhKTsKICAgICB9CiAKICAgICBmb3IoIGkgPSAweDAyIDsgaSA8PSAweDAzIDsgaSsrICkKICAgICB7CiAgICAgICAgIGRhdGEgPSBwVkJJbmZvLT5UaW1pbmdWWyAwIF0uZGF0YVsgaSBdIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAoIFVTSE9SVCApKCBpICsgMHgwZSApICwgZGF0YSApIDsKKwlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAodW5zaWduZWQgc2hvcnQpKGkgKyAweDBlKSwgZGF0YSk7CiAgICAgfQogCiAgICAgZm9yKCBpID0gMHgwNCA7IGkgPD0gMHgwNSA7IGkrKyApCiAgICAgewogICAgICAgICBkYXRhID0gcFZCSW5mby0+VGltaW5nVlsgMCBdLmRhdGFbIGkgXSA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgKCBVU0hPUlQgKSggaSArIDB4MTEgKSAsIGRhdGEgKSA7CisJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgKHVuc2lnbmVkIHNob3J0KShpICsgMHgxMSksIGRhdGEpOwogICAgIH0KIAotICAgIGogPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MGEgKSA7CisgICAgaiA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MGEpOwogICAgIGogJj0gMHhDMCA7CiAgICAgZGF0YSA9IHBWQkluZm8tPlRpbWluZ1ZbIDAgXS5kYXRhWyA2IF0gOwogICAgIGRhdGEgJj0gMHgzRiA7CkBAIC0xNTM1LDcgKzE1MDMsNyBAQAogICAgIGlmICggaSApCiAgICAgICAgIGRhdGEgfD0gMHg4MCA7CiAKLSAgICBqID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA5ICkgOworICAgIGogPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDA5KTsKICAgICBqICY9IDB4NUYgOwogICAgIGRhdGEgfD0gaiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDA5ICwgZGF0YSApIDsKQEAgLTE1NDgsMTAgKzE1MTYsMTIgQEAKIC8qIE91dHB1dCA6IEZpbGwgQ1JUIEhzeW5jL1ZzeW5jIHRvIFNSMkUvU1IyRi9TUjMwL1NSMzMvU1IzNC9TUjNGICovCiAvKiBEZXNjcmlwdGlvbiA6IFNldCBMQ0QgdGltaW5nICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFhHMjFDUlRDKFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRYRzIxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gIFVDSEFSIFN0YW5kVGFibGVJbmRleCwgaW5kZXgsIFRlbXBheCwgVGVtcGJ4LCBUZW1wY3gsIFRlbXBkeCA7Ci0gIFVTSE9SVCBUZW1wMSwgVGVtcDIsIFRlbXAzIDsKKyAgdW5zaWduZWQgY2hhciBTdGFuZFRhYmxlSW5kZXgsIGluZGV4LCBUZW1wYXgsIFRlbXBieCwgVGVtcGN4LCBUZW1wZHg7CisgIHVuc2lnbmVkIHNob3J0IFRlbXAxLCBUZW1wMiwgVGVtcDM7CiAKICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgIHsKQEAgLTE1ODAsNyArMTU1MCw3IEBACiAgICAgVGVtcGR4IHw9IFRlbXBjeCA7CQkJCQkJCS8qIFRlbXBkeDogVlJTWzg6MV0gKi8KICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzQgLCBUZW1wZHggKSA7ICAgIAkJLyogU1IzNFs3OjBdOiBWUlNbODoxXSAqLwogCi0gICAgVGVtcDEgPSBUZW1wY3ggPDwgMSA7CQkJCQkJLyogVGVtcDFbOF06IFZSU1s4XSBVQ0hBUiAtPiBVU0hPUlQgKi8KKyAgICBUZW1wMSA9IFRlbXBjeCA8PCAxIDsJCQkJCQkvKiBUZW1wMVs4XTogVlJTWzhdIHVuc2lnbmVkIGNoYXIgLT4gdW5zaWduZWQgc2hvcnQgKi8KICAgICBUZW1wMSB8PSBUZW1wYnggOwkJCQkJCQkvKiBUZW1wMVs4OjBdOiBWUlNbODowXSAqLwogICAgIFRlbXBheCAmPSAweDgwIDsJCQkJCQkJLyogVGVtcGF4WzddOiBDUjdbN10gKi8KICAgICBUZW1wMiA9IFRlbXBheCA8PCAyIDsJCQkJCQkvKiBUZW1wMls5XTogVlJTWzldICovCkBAIC0xNTk0LDExICsxNTY0LDExIEBACiAgICAgaWYgKCBUZW1wYXggPCBUZW1wMyApCQkJCQkJLyogVlJFWzM6MF08VlJTWzM6MF0gKi8KICAgICAgIFRlbXAyIHw9IDB4MTAgOwkJCQkJCQkvKiBUZW1wMjogVlJFICsgMHgxMCAqLwogICAgIFRlbXAyICY9IDB4RkYgOwkJCQkJCQkvKiBUZW1wMls3OjBdOiBWUkVbNzowXSAqLwotICAgIFRlbXBheCA9IChVQ0hBUilUZW1wMiA7CQkJCQkJLyogVGVtcGF4Wzc6MF06IFZSRVs3OjBdICovCisgICAgVGVtcGF4ID0gKHVuc2lnbmVkIGNoYXIpVGVtcDI7CQkJCQkvKiBUZW1wYXhbNzowXTogVlJFWzc6MF0gKi8KICAgICBUZW1wYXggPDw9IDIgOwkJCQkJCQkvKiBUZW1wYXggPDwgMjogVlJFWzU6MF0gKi8KICAgICBUZW1wMSAmPSAweDYwMCA7CQkJCQkJCS8qIFRlbXAxWzEwOjldOiBWUlNbMTA6OV0gKi8KICAgICBUZW1wMSA+Pj0gOSA7CQkJCQkJCS8qIFsxMDo5XS0+WzE6MF0gKi8KLSAgICBUZW1wYnggPSAoVUNIQVIpVGVtcDEgOwkJCQkJCS8qIFRlbXBieFsxOjBdOiBWUlNbMTA6OV0gKi8KKyAgICBUZW1wYnggPSAodW5zaWduZWQgY2hhcilUZW1wMTsJCQkJCS8qIFRlbXBieFsxOjBdOiBWUlNbMTA6OV0gKi8KICAgICBUZW1wYXggfD0gVGVtcGJ4IDsJCQkJCQkJLyogVlJFWzU6MF1WUlNbMTA6OV0gKi8KICAgICBUZW1wYXggJj0gMHg3RiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDNGICwgVGVtcGF4ICkgOyAgIAkJLyogU1IzRiBEWzc6Ml0tPlZSRSBEWzE6MF0tPlZSUyAqLwpAQCAtMTYzMiw3ICsxNjAyLDcgQEAKICAgICAgIFRlbXAyIHw9IDB4NDAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlbXAyICsgMHg0MCAqLwogCiAgICAgVGVtcDIgJj0gMHhGRiA7Ci0gICAgVGVtcGF4ID0gKFVDSEFSKVRlbXAyIDsJCQkJCQkvKiBUZW1wYXg6IEhSRVs3OjBdICovCisgICAgVGVtcGF4ID0gKHVuc2lnbmVkIGNoYXIpVGVtcDI7CQkJCQkvKiBUZW1wYXg6IEhSRVs3OjBdICovCiAgICAgVGVtcGF4IDw8PSAyIDsJCQkJCQkJLyogVGVtcGF4Wzc6Ml06IEhSRVs1OjBdICovCiAgICAgVGVtcGR4ID4+PSA2IDsJCQkJCQkJLyogVGVtcGR4Wzc6Nl0tPlsxOjBdIEhSU1s5OjhdICovCiAgICAgVGVtcGF4IHw9IFRlbXBkeCA7CQkJCQkJCS8qIEhSRVs1OjBdSFJTWzk6OF0gKi8KQEAgLTE2NzYsMjAgKzE2NDYsMjIgQEAKICAgICAgIFRlbXAyIHw9IDB4MjAgOwkJCQkJCQkvKiBWUkUgKyAweDIwICovCiAKICAgICBUZW1wMiAmPSAweEZGIDsKLSAgICBUZW1wYXggPSAoVUNIQVIpVGVtcDIgOwkJCQkJCS8qIFRlbXBheDogVlJFWzc6MF0gKi8KKyAgICBUZW1wYXggPSAodW5zaWduZWQgY2hhcilUZW1wMjsJCQkJCS8qIFRlbXBheDogVlJFWzc6MF0gKi8KICAgICBUZW1wYXggPDw9IDIgOwkJCQkJCQkvKiBUZW1wYXhbNzowXTsgVlJFWzU6MF0wMCAqLwogICAgIFRlbXAxICY9IDB4NjAwIDsJCQkJCQkJLyogVGVtcDFbMTA6OV06IFZSU1sxMDo5XSAqLwogICAgIFRlbXAxID4+PSA5IDsgIAkJCQkJCQkvKiBUZW1wMVsxOjBdOiBWUlNbMTA6OV0gKi8KLSAgICBUZW1wYnggPSAoVUNIQVIpVGVtcDEgOworICAgIFRlbXBieCA9ICh1bnNpZ25lZCBjaGFyKVRlbXAxOwogICAgIFRlbXBheCB8PSBUZW1wYnggOwkJCQkJCQkvKiBUZW1wYXhbNzowXTogVlJFWzU6MF1WUlNbMTA6OV0gKi8KICAgICBUZW1wYXggJj0gMHg3RiA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDNGICwgVGVtcGF4ICkgOyAgIAkJLyogU1IzRiBEWzc6Ml0tPlZSRSBEWzE6MF0tPlZSUyAqLwogICB9CiB9CiAKLXZvaWQgWEdJX1NldFhHMjdDUlRDKFVTSE9SVCBNb2RlTm8sIFVTSE9SVCBNb2RlSWRJbmRleCwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRYRzI3Q1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gIFVTSE9SVCBTdGFuZFRhYmxlSW5kZXgsIGluZGV4LCBUZW1wYXgsIFRlbXBieCwgVGVtcGN4LCBUZW1wZHggOworCXVuc2lnbmVkIHNob3J0IFN0YW5kVGFibGVJbmRleCwgaW5kZXgsIFRlbXBheCwgVGVtcGJ4LCBUZW1wY3gsIFRlbXBkeDsKIAogICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgewpAQCAtMTcyNiw3ICsxNjk4LDcgQEAKICAgICBUZW1wYnggfD0gVGVtcGF4IDsJCQkJCQkJLyogVGVtcGJ4Wzk6MF06IFZSRVs5OjBdICovCiAgICAgaWYgKCBUZW1wYXggPD0gKFRlbXBjeCAmIDB4MEYpICkJCQkJCS8qIFZSRVszOjBdPD1WUlNbMzowXSAqLwogICAgICAgVGVtcGJ4IHw9IDB4MTAgOwkJCQkJCQkvKiBUZW1wYng6IFZSRSArIDB4MTAgKi8KLSAgICBUZW1wYXggPSAoVUNIQVIpVGVtcGJ4ICYgMHhGRjsJCQkJCS8qIFRlbXBheFs3OjBdOiBWUkVbNzowXSAqLworICAgIFRlbXBheCA9ICh1bnNpZ25lZCBjaGFyKVRlbXBieCAmIDB4RkY7CQkJCS8qIFRlbXBheFs3OjBdOiBWUkVbNzowXSAqLwogICAgIFRlbXBheCA8PD0gMiA7CQkJCQkJCS8qIFRlbXBheCA8PCAyOiBWUkVbNTowXSAqLwogICAgIFRlbXBjeCA9IChUZW1wY3gmMHg2MDApPj44OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVtcGN4IFZSU1sxMDo5XSAqLwogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UDNjNCAsIDB4M0YgLCB+MHhGQywgVGVtcGF4ICkgOyAgICAgICAgLyogU1IzRiBEWzc6Ml0tPlZSRSBEWzU6MF0gKi8KQEAgLTE4MTAsMTAgKzE3ODIsMTIgQEAKIC8qIE91dHB1dCA6IEZDTEsgZHV0eSBjeWNsZSwgRkNMSyBkZWxheSBjb21wZW5zYXRpb24gKi8KIC8qIERlc2NyaXB0aW9uIDogQWxsIHZhbHVlcyBzZXQgemVybyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRYRzIxTENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsVVNIT1JUIE1vZGVObykKK3ZvaWQgWEdJX1NldFhHMjFMQ0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLAorCQkgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vKQogewotICBVU0hPUlQgRGF0YSAsIFRlbXAgLCBiM0NDIDsKLSAgVVNIT1JUIFhHSV9QM2NjIDsKKwl1bnNpZ25lZCBzaG9ydCBEYXRhLCBUZW1wLCBiM0NDOworCXVuc2lnbmVkIHNob3J0IFhHSV9QM2NjOwogCiAgIFhHSV9QM2NjID0gcFZCSW5mby0+UDNjYyA7CiAKQEAgLTE4NDQsNyArMTgxOCw3IEBACiAKICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgIHsKLSAgICBiM0NDID0gKFVDSEFSKSBYR0lOZXdfR2V0UmVnMiggWEdJX1AzY2MgKSA7CisgICAgYjNDQyA9ICh1bnNpZ25lZCBjaGFyKSBYR0lOZXdfR2V0UmVnMihYR0lfUDNjYyk7CiAgICAgaWYgKCBiM0NDICYgMHg0MCApCiAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlAzYzQgLCAweDMwICwgMHgyMCApIDsgLyogSHN5bmMgcG9sYXJpdHkgKi8KICAgICBpZiAoIGIzQ0MgJiAweDgwICkKQEAgLTE4NjAsMTAgKzE4MzQsMTIgQEAKICAgfQogfQogCi12b2lkIFhHSV9TZXRYRzI3TENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvLFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsVVNIT1JUIE1vZGVObykKK3ZvaWQgWEdJX1NldFhHMjdMQ0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvLAorCQkgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vKQogewotICBVU0hPUlQgRGF0YSAsIFRlbXAgLCBiM0NDIDsKLSAgVVNIT1JUIFhHSV9QM2NjIDsKKyAgdW5zaWduZWQgc2hvcnQgRGF0YSAsIFRlbXAgLCBiM0NDIDsKKyAgdW5zaWduZWQgc2hvcnQgWEdJX1AzY2MgOwogCiAgIFhHSV9QM2NjID0gcFZCSW5mby0+UDNjYyA7CiAKQEAgLTE4OTYsNyArMTg3Miw3IEBACiAKICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgIHsKLSAgICBiM0NDID0gKFVDSEFSKSBYR0lOZXdfR2V0UmVnMiggWEdJX1AzY2MgKSA7CisgICAgYjNDQyA9ICh1bnNpZ25lZCBjaGFyKSBYR0lOZXdfR2V0UmVnMihYR0lfUDNjYyk7CiAgICAgaWYgKCBiM0NDICYgMHg0MCApCiAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlAzYzQgLCAweDMwICwgMHgyMCApIDsgLyogSHN5bmMgcG9sYXJpdHkgKi8KICAgICBpZiAoIGIzQ0MgJiAweDgwICkKQEAgLTE5MTgsNyArMTg5NCw5IEBACiAvKiBPdXRwdXQgOiBDUlQxIENSVEMgKi8KIC8qIERlc2NyaXB0aW9uIDogTW9kaWZ5IENSVDEgSHN5bmMvVnN5bmMgdG8gZml4IExDRCBtb2RlIHRpbWluZyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9VcGRhdGVYRzIxQ1JUQyggVVNIT1JUIE1vZGVObyAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCApCit2b2lkIFhHSV9VcGRhdGVYRzIxQ1JUQyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8sCisJCQl1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgpCiB7CiAgIGludCBpICwgaW5kZXggPSAtMTsKIApAQCAtMTk2MSwxNiArMTkzOSwxNSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMURFKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQxREUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCByZXNpbmRleCAsCi0gICAgICAgICAgIHRlbXBheCAsCi0gICAgICAgICAgIHRlbXBieCAsCi0gICAgICAgICAgIHRlbXBjeCAsCi0gICAgICAgICAgIHRlbXAgLAotICAgICAgICAgICBtb2RlZmxhZyA7CisJdW5zaWduZWQgc2hvcnQgcmVzaW5kZXgsIHRlbXBheCwgdGVtcGJ4LCB0ZW1wY3gsIHRlbXAsIG1vZGVmbGFnOwogCi0gICAgVUNIQVIgZGF0YSA7CisgICAgdW5zaWduZWQgY2hhciBkYXRhOwogCiAgICAgcmVzaW5kZXggPSBYR0lfR2V0UmVzSW5mbyggTW9kZU5vICwgTW9kZUlkSW5kZXgsIHBWQkluZm8gKSA7CiAKQEAgLTIwMTMsMTMgKzE5OTAsMTMgQEAKICAgICB0ZW1wYXggLT0gMSA7CiAgICAgdGVtcGJ4IC09IDEgOwogICAgIHRlbXBjeCA9IHRlbXBheCA7Ci0gICAgdGVtcCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsKLSAgICBkYXRhID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDExICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDExKTsKKyAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSk7CiAgICAgZGF0YSAmPSAweDdGIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTEgLCBkYXRhICkgOwkJLyogVW5sb2NrIENSVEMgKi8KLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MDEgLCAoIFVTSE9SVCApKCB0ZW1wY3ggJiAweGZmICkgKSA7Ci0gICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgwYiAsIH4weDBjICwgKCBVU0hPUlQgKSggKCB0ZW1wY3ggJiAweDBmZjAwICkgPj4gMTAgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTIgLCAoIFVTSE9SVCApKCB0ZW1wYnggJiAweGZmICkgKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHgwMSwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wY3ggJiAweGZmKSk7CisgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlAzZDQsIDB4MGIsIH4weDBjLCAodW5zaWduZWQgc2hvcnQpKCh0ZW1wY3ggJiAweDBmZjAwKSA+PiAxMCkpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MTIsICh1bnNpZ25lZCBzaG9ydCkodGVtcGJ4ICYgMHhmZikpOwogICAgIHRlbXBheCA9IDAgOwogICAgIHRlbXBieCA9IHRlbXBieCA+PiA4IDsKIApAQCAtMjAzMCw3ICsyMDA3LDcgQEAKICAgICAgICAgdGVtcGF4IHw9IDB4NDAgOwogCiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgwNyAsIH4weDQyICwgdGVtcGF4ICkgOwotICAgIGRhdGEgPSggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgwNyApIDsKKyAgICBkYXRhID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgwNyk7CiAgICAgZGF0YSAmPSAweEZGIDsKICAgICB0ZW1wYXggPSAwIDsKIApAQCAtMjA0OCw5ICsyMDI1LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgCVhHSV9HZXRSZXNJbmZvKFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCByZXNpbmRleCA7CisJdW5zaWduZWQgc2hvcnQgcmVzaW5kZXg7CiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKICAgICB7CkBAIC0yMDcwLDkgKzIwNDksMTMgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDFPZmZzZXQoICBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCAsCiAgICAgICAgICAgIGFoICwKICAgICAgICAgICAgYWwgLAogICAgICAgICAgICB0ZW1wMiAsCkBAIC0yMTMxLDcgKzIxMTQsNyBAQAogICAgIGkgfD0gdGVtcCA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDBFICwgaSApIDsKIAotICAgIHRlbXAgPSggVUNIQVIgKXRlbXAyIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpdGVtcDI7CiAgICAgdGVtcCAmPSAweEZGIDsJCS8qIGFsICovCiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDEzICwgdGVtcCApIDsKIApAQCAtMjE2MywxMSArMjE0NiwxMyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMVZDTEsoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLAotICAgICAgICAgICAgICAgICAgICAgICAgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFWQ0xLKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBpbmRleCAsIGRhdGEgOwotICAgIFVTSE9SVCB2Y2xraW5kZXggOworCXVuc2lnbmVkIGNoYXIgaW5kZXgsIGRhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgdmNsa2luZGV4IDsKIAogICAgIGlmICggcFZCSW5mby0+SUZfREVGX0xWRFMgPT0gMSApCiAgICAgewpAQCAtMjIyNCw5ICsyMjA5LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQxRklGTyggVVNIT1JUIE1vZGVObyAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMUZJRk8odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7CisgICAgdW5zaWduZWQgc2hvcnQgZGF0YSA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDNEICkgOwogICAgIGRhdGEgJj0gMHhmZSA7CkBAIC0yMjczLDEwICsyMjYwLDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRDUlQxTW9kZVJlZ3MoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldENSVDFNb2RlUmVncyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJCSB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgLAorICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgLAogICAgICAgICAgICBkYXRhMiAsCiAgICAgICAgICAgIGRhdGEzICwKICAgICAgICAgICAgaW5mb2ZsYWcgPSAwICwKQEAgLTI0MTEsMTMgKzI0MDAsMTYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldFZDTEtTdGF0ZSggIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRWQ0xLU3RhdGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgLAorICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgLAogICAgICAgICAgICBkYXRhMiA9IDAgOwotICAgIFNIT1JUICBWQ0xLIDsKKyAgICBzaG9ydCBWQ0xLIDsKIAotICAgIFVDSEFSICBpbmRleCA7CisgICAgdW5zaWduZWQgY2hhciBpbmRleDsKIAogICAgIGlmICggTW9kZU5vIDw9IDB4MTMgKQogICAgICAgICBWQ0xLID0gMCA7CkBAIC0yNDc1LDkgKzI0NjcsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyp2b2lkIFhHSV9WZXNhTG93UmVzb2x1dGlvbiggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCisvKnZvaWQgWEdJX1Zlc2FMb3dSZXNvbHV0aW9uKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgbW9kZWZsYWc7CisgICAgdW5zaWduZWQgc2hvcnQgbW9kZWZsYWc7CiAKICAgICBpZiAoIE1vZGVObyA+IDB4MTMgKQogICAgICAgICBtb2RlZmxhZyA9IHBWQkluZm8tPkVNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5FeHRfTW9kZUZsYWcgOwpAQCAtMjUxOCw5ICsyNTEwLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9Mb2FkREFDKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0xvYWREQUModW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGRhdGEgLCBkYXRhMiAsIHRpbWUgLAorICAgIHVuc2lnbmVkIHNob3J0IGRhdGEgLCBkYXRhMiAsIHRpbWUgLAogICAgICAgICAgICBpICAsIGogLCBrICwgbSAsIG4gLCBvICwKICAgICAgICAgICAgc2kgLCBkaSAsIGJ4ICwgZGwgLCBhbCAsIGFoICwgZGggLAogICAgICAgICAgICAqdGFibGUgPSBOVUxMIDsKQEAgLTI2MjcsOSArMjYyMSwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfV3JpdGVEQUMoIFVTSE9SVCBkbCAsIFVTSE9SVCBhaCAsIFVTSE9SVCBhbCAsIFVTSE9SVCBkaCxQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9Xcml0ZURBQyh1bnNpZ25lZCBzaG9ydCBkbCwgdW5zaWduZWQgc2hvcnQgYWgsCisJCSAgdW5zaWduZWQgc2hvcnQgYWwsIHVuc2lnbmVkIHNob3J0IGRoLAorCQkgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCAsIGJoICwgYmwgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgLCBiaCAsIGJsIDsKIAogICAgIGJoID0gYWggOwogICAgIGJsID0gYWwgOwpAQCAtMjY1Miw3MCArMjY0OCwyNCBAQAogICAgICAgICAgICAgYmggPSB0ZW1wIDsKICAgICAgICAgfQogICAgIH0KLSAgICBYR0lOZXdfU2V0UmVnMyggcFZCSW5mby0+UDNjOSAsICggVVNIT1JUIClkaCApIDsKLSAgICBYR0lOZXdfU2V0UmVnMyggcFZCSW5mby0+UDNjOSAsICggVVNIT1JUICliaCApIDsKLSAgICBYR0lOZXdfU2V0UmVnMyggcFZCSW5mby0+UDNjOSAsICggVVNIT1JUIClibCApIDsKKyAgICBYR0lOZXdfU2V0UmVnMyhwVkJJbmZvLT5QM2M5LCAodW5zaWduZWQgc2hvcnQpZGgpOworICAgIFhHSU5ld19TZXRSZWczKHBWQkluZm8tPlAzYzksICh1bnNpZ25lZCBzaG9ydCliaCk7CisgICAgWEdJTmV3X1NldFJlZzMocFZCSW5mby0+UDNjOSwgKHVuc2lnbmVkIHNob3J0KWJsKTsKIH0KIAotI2lmIDAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb24gOiBYR0lfQ2xlYXJCdWZmZXIgKi8KLS8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6ICovCi0vKiBEZXNjcmlwdGlvbiA6ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0NsZWFyQnVmZmVyKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIE1vZGVObywgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKQotewotICAgIFBWT0lEIFZpZGVvTWVtb3J5QWRkcmVzcyA9ICggUFZPSUQgKUh3RGV2aWNlRXh0ZW5zaW9uLT5walZpZGVvTWVtb3J5QWRkcmVzcyA7Ci0gICAgVUxPTkcgQWRhcHRlck1lbW9yeVNpemUgID0gKCBVTE9ORyApSHdEZXZpY2VFeHRlbnNpb24tPnVsVmlkZW9NZW1vcnlTaXplIDsKLSAgICBQVVNIT1JUIHBCdWZmZXIgOwotI2lmbmRlZiBMSU5VWF9YRjg2Ci0gICAgaW50IGkgOwotI2VuZGlmCi0KLSAgICBpZiAoIHBWQkluZm8tPk1vZGVUeXBlID49IE1vZGVFR0EgKQotICAgIHsKLSAgICAgICAgaWYgKCBNb2RlTm8gPiAweDEzICkKLSAgICAgICAgewotICAgICAgICAgICAgQWRhcHRlck1lbW9yeVNpemUgPSAweDQwMDAwIDsJLyogY2xlYXIgMjU2ayAqLwotICAgICAgICAgICAgLyogR2V0RFJBTVNpemUoIEh3RGV2aWNlRXh0ZW5zaW9uICkgOyAqLwotICAgICAgICAgICAgWEdJX1NldE1lbW9yeSggVmlkZW9NZW1vcnlBZGRyZXNzICwgQWRhcHRlck1lbW9yeVNpemUgLCAwICkgOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotLyoKLSAgICAgICAgICAgIHBCdWZmZXIgPSBWaWRlb01lbW9yeUFkZHJlc3MgOwotICAgICAgICAgICAgZm9yKCBpID0gMCA7IGkgPCAweDQwMDAgOyBpKysgKQotICAgICAgICAgICAgICAgIHBCdWZmZXJbIGkgXSA9IDB4MDAwMCA7Ci0qLwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBCdWZmZXIgPSBWaWRlb01lbW9yeUFkZHJlc3MgOwotICAgICAgICBpZiAoIHBWQkluZm8tPk1vZGVUeXBlIDwgTW9kZUNHQSApCi0gICAgICAgIHsKLS8qCi0gICAgICAgICAgICBmb3IgKCBpID0gMCA7IGkgPCAweDQwMDAgOyBpKysgKQotICAgICAgICAgICAgICAgIHBCdWZmZXJbIGkgXSA9IDB4MDcyMCA7Ci0qLwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFhHSV9TZXRNZW1vcnkoIFZpZGVvTWVtb3J5QWRkcmVzcyAsIDB4ODAwMCAsIDAgKSA7Ci0gICAgfQotfQotCi0jZW5kaWYKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gOiBYR0lfU2V0TENEQUdyb3VwICovCiAvKiBJbnB1dCA6ICovCiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRMQ0RBR3JvdXAoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKQordm9pZCBYR0lfU2V0TENEQUdyb3VwKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCA7Ci0gICAgLyogVVNIT1JUIHRlbXAgOyAqLworICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCA7CisgICAgLyogdW5zaWduZWQgc2hvcnQgdGVtcCA7ICovCiAKICAgICAvKiBwVkJJbmZvLT5TZWxlY3RDUlQyUmF0ZSA9IDAgOyAqLwogCkBAIC0yNzM1LDkgKzI2ODUsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldExWRFNSZXNJbmZvKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9HZXRMVkRTUmVzSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQl1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCXN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgcmVzaW5kZXggLCB4cmVzICwgeXJlcyAsIG1vZGVmbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCByZXNpbmRleCAsIHhyZXMgLCB5cmVzICwgbW9kZWZsYWcgOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewpAQCAtMjgwMywxNyArMjc1NSwyMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0TFZEU0RhdGEoICBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX0dldExWRFNEYXRhKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggOwotICAgIFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAqTENEUHRyID0gTlVMTCA7Ci0gICAgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICAqVFZQdHIgPSBOVUxMIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggOworICAgIHN0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgKkxDRFB0ciA9IE5VTEwgOworICAgIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgICpUVlB0ciA9IE5VTEwgOwogCiAgICAgdGVtcGJ4ID0gMiA7CiAKICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmICggU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvTENEQSApICkKICAgICB7Ci0gICAgICAgIExDRFB0ciA9ICggWEdJMzMwX0xWRFNEYXRhU3RydWN0ICogKVhHSV9HZXRMY2RQdHIoIHRlbXBieCwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pIDsKKwlMQ0RQdHIgPSAoc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAqKVhHSV9HZXRMY2RQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgICAgICBwVkJJbmZvLT5WR0FIVCA9IExDRFB0ci0+VkdBSFQgOwogICAgICAgICBwVkJJbmZvLT5WR0FWVCA9IExDRFB0ci0+VkdBVlQgOwogICAgICAgICBwVkJJbmZvLT5IVCA9IExDRFB0ci0+TENESFQgOwpAQCAtMjgyMyw3ICsyNzc4LDcgQEAKICAgICB7CiAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYgKQogICAgICAgICB7Ci0gICAgICAgICAgICBUVlB0ciA9ICggWEdJMzMwX0NIVFZEYXRhU3RydWN0ICogKVhHSV9HZXRUVlB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisJICAgIFRWUHRyID0gKHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgICAgICAgICAgcFZCSW5mby0+VkdBSFQgPSBUVlB0ci0+VkdBSFQgOwogICAgICAgICAgICAgcFZCSW5mby0+VkdBVlQgPSBUVlB0ci0+VkdBVlQgOwogICAgICAgICAgICAgcFZCSW5mby0+SFQgPSBUVlB0ci0+TENESFQgOwpAQCAtMjg2NiwxNiArMjgyMSwxOCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfTW9kQ1JUMVJlZ3MoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLAotICAgICAgICAgICAgICAgICAgICAgICAgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvICkKK3ZvaWQgWEdJX01vZENSVDFSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBpbmRleCA7Ci0gICAgVVNIT1JUIHRlbXBieCAsIGkgOwotICAgIFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICAqTENEUHRyID0gTlVMTCA7Ci0gICAgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgICpMQ0RQdHIxID1OVUxMIDsKLSAgICAvKiBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKlRWUHRyID0gTlVMTCA7ICovCi0gICAgWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QgKkNINzAwN1RWX1RpbWluZ0hQdHIgPSBOVUxMOwotICAgIFhHSV9DSDcwMDdUVl9UaW1pbmdWU3RydWN0ICpDSDcwMDdUVl9UaW1pbmdWUHRyID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4OworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsIGkgOworICAgIHN0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgKkxDRFB0ciA9IE5VTEw7CisgICAgc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0ICAqTENEUHRyMSA9IE5VTEw7CisgICAgLyogc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAqVFZQdHIgPSBOVUxMIDsgKi8KKyAgICBzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QgKkNINzAwN1RWX1RpbWluZ0hQdHIgPSBOVUxMOworICAgIHN0cnVjdCBYR0lfQ0g3MDA3VFZfVGltaW5nVlN0cnVjdCAqQ0g3MDA3VFZfVGltaW5nVlB0ciA9IE5VTEw7CiAKICAgICBpZiggTW9kZU5vIDw9IDB4MTMgKQogICAgICAgICBpbmRleCA9IHBWQkluZm8tPlNNb2RlSURUYWJsZVsgTW9kZUlkSW5kZXggXS5TdF9DUlQyQ1JUQyA7CkBAIC0yODkwLDcgKzI4NDcsNyBAQAogCiAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBMQ0RQdHIgPSAoIFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICogKVhHSV9HZXRMY2RQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOworCSAgICBMQ0RQdHIgPSAoc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICopWEdJX0dldExjZFB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAKICAgICAgICAgICAgIGZvciggaSA9IDAgOyBpIDwgOCA7IGkrKyApCiAgICAgICAgICAgICAgICAgcFZCSW5mby0+VGltaW5nSFsgMCBdLmRhdGFbIGkgXSA9IExDRFB0clsgMCBdLlJlZ1sgaSBdIDsKQEAgLTI5MDAsNyArMjg1Nyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENINzAwN1RWX1RpbWluZ0hQdHIgPSAoIFhHSV9DSDcwMDdUVl9UaW1pbmdIU3RydWN0ICopWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJQ0g3MDA3VFZfVGltaW5nSFB0ciA9IChzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QgKilYR0lfR2V0VFZQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogCiAgICAgICAgICAgICAgICAgZm9yKCBpID0gMCA7IGkgPCA4IDsgaSsrICkKICAgICAgICAgICAgICAgICAgICAgcFZCSW5mby0+VGltaW5nSFsgMCBdLmRhdGFbIGkgXSA9IENINzAwN1RWX1RpbWluZ0hQdHJbIDAgXS5kYXRhWyBpIF0gOwpAQCAtMjkxMCw3ICsyODY3LDcgQEAKICAgICAgICAgLyogaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDE3ID09IDEgKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWICkKLSAgICAgICAgICAgICAgICBUVlB0ciA9ICggWEdJMzMwX0NIVFZEYXRhU3RydWN0ICopWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJVFZQdHIgPSAoIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOwogICAgICAgICB9ICovCiAKICAgICAgICAgWEdJX1NldENSVDFUaW1pbmdfSChwVkJJbmZvLEh3RGV2aWNlRXh0ZW5zaW9uKSA7CkBAIC0yOTI1LDcgKzI4ODIsNyBAQAogCiAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBMQ0RQdHIxID0gKCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCAqIClYR0lfR2V0TGNkUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkgICAgTENEUHRyMSA9IChzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKICAgICAgICAgICAgIGZvciggaSA9IDAgOyBpIDwgNyA7IGkrKyApCiAgICAgICAgICAgICAgICAgcFZCSW5mby0+VGltaW5nVlsgMCBdLmRhdGFbIGkgXSA9IExDRFB0cjFbIDAgXS5SZWdbIGkgXSA7CiAgICAgICAgIH0KQEAgLTI5MzQsNyArMjg5MSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvVFYgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENINzAwN1RWX1RpbWluZ1ZQdHIgPSAoIFhHSV9DSDcwMDdUVl9UaW1pbmdWU3RydWN0ICopWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJQ0g3MDA3VFZfVGltaW5nVlB0ciA9IChzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QgKilYR0lfR2V0VFZQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogCiAgICAgICAgICAgICAgICAgZm9yKCBpID0gMCA7IGkgPCA3IDsgaSsrICkKICAgICAgICAgICAgICAgICAgICAgcFZCSW5mby0+VGltaW5nVlsgMCBdLmRhdGFbIGkgXSA9IENINzAwN1RWX1RpbWluZ1ZQdHJbIDAgXS5kYXRhWyBpIF0gOwpAQCAtMjk0Myw3ICsyOTAwLDcgQEAKICAgICAgICAgLyogaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDE3ID09IDEgKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb1RWICkKLSAgICAgICAgICAgICAgICBUVlB0ciA9ICggWEdJMzMwX0NIVFZEYXRhU3RydWN0ICopWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwkJVFZQdHIgPSAoIHN0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgKilYR0lfR2V0VFZQdHIoIHRlbXBieCAsIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvICkgOwogICAgICAgICB9ICovCiAKICAgICAgICAgWEdJX1NldENSVDFUaW1pbmdfViggTW9kZUlkSW5kZXggLCBNb2RlTm8gLCBwVkJJbmZvKSA7CkBAIC0yOTY2LDEyICsyOTIzLDE0IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRMVkRTUmVncyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9TZXRMVkRTUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsIHRlbXBheCAsIHRlbXBjeCAsIHRlbXBkeCAsIHB1c2gxICwgcHVzaDIgLCBtb2RlZmxhZyA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwgdGVtcGF4ICwgdGVtcGN4ICwgdGVtcGR4ICwgcHVzaDEgLCBwdXNoMiAsIG1vZGVmbGFnIDsKICAgICB1bnNpZ25lZCBsb25nIHRlbXAgLCB0ZW1wMSAsIHRlbXAyICwgdGVtcDMgLCBwdXNoMyA7Ci0gICAgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgICpMQ0RQdHIgPSBOVUxMIDsKLSAgICBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgICpMQ0RQdHIxID0gTlVMTCA7CisgICAgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICAqTENEUHRyID0gTlVMTCA7CisgICAgc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgKkxDRFB0cjEgPSBOVUxMIDsKIAogICAgIGlmICggTW9kZU5vID4gMHgxMyApCiAgICAgICAgIG1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLkV4dF9Nb2RlRmxhZyA7CkBAIC0yOTg1LDE2ICsyOTQ0LDE2IEBACiAgICAgICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9PRU1VdGlsID09IDEgKQogICAgICAgICAgICAgewogICAgIAkgICAgICAgIHRlbXBieCA9IDggOwotICAgIAkgICAgICAgIExDRFB0ciA9ICggWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisJCUxDRFB0ciA9IChzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCAoIHBWQkluZm8tPklGX0RFRl9PRU1VdGlsID09IDAgKSB8fCAoIExDRFB0ciA9PSAwICkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBieCA9IDMgOwogICAgICAgICAgICAgICAgIGlmICggcFZCSW5mby0+TENESW5mbyAmIEVuYWJsZVNjYWxpbmdMQ0QgKQotICAgICAgICAgICAgICAgICAgICBMQ0RQdHIxID0gKCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisJCSAgICBMQ0RQdHIxID0gKHN0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgKilYR0lfR2V0TGNkUHRyKHRlbXBieCwgTW9kZU5vLCBNb2RlSWRJbmRleCwgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBwVkJJbmZvKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIExDRFB0ciA9ICggWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisJCSAgICBMQ0RQdHIgPSAoc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICopWEdJX0dldExjZFB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFhHSV9HZXRMQ0RTeW5jKCAmdGVtcGF4ICwgJnRlbXBieCAscFZCSW5mbykgOwpAQCAtMzA1Niw4ICszMDE1LDggQEAKICAgICAgICAgICAgIHRlbXBjeCA9IHRlbXBjeCA+PiAzIDsKICAgICAgICAgICAgIHRlbXBieCA9IHRlbXBieCA+PiAzIDsKIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MTYgLCAoIFVTSE9SVCApKCB0ZW1wYnggJiAweGZmICkgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxNyAsICggVVNIT1JUICkoIHRlbXBjeCAmIDB4ZmYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDE2LCAodW5zaWduZWQgc2hvcnQpKHRlbXBieCAmIDB4ZmYpKTsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDE3LCAodW5zaWduZWQgc2hvcnQpKHRlbXBjeCAmIDB4ZmYpKTsKIAogICAgICAgICAgICAgdGVtcGF4ID0gcFZCSW5mby0+SFQgOwogCkBAIC0zMDg1LDcgKzMwNDQsNyBAQAogICAgICAgICAgICAgdGVtcGF4IHw9IHRlbXBjeCA7CiAKICAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDE1ICwgdGVtcGF4ICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MTQgLCAoIFVTSE9SVCApKCB0ZW1wYnggJiAweGZmICkgKSA7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxNCwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wYnggJiAweGZmKSk7CiAKICAgICAgICAgICAgIHRlbXBheCA9IHBWQkluZm8tPlZUIDsKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+TENESW5mbyAmIEVuYWJsZVNjYWxpbmdMQ0QgKQpAQCAtMzA5OSwxMyArMzA1OCwxMyBAQAogICAgICAgICAgICAgaWYgKCB0ZW1wY3ggPj0gdGVtcGF4ICkKICAgICAgICAgICAgICAgICB0ZW1wY3ggLT0gdGVtcGF4IDsKIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MWIgLCAoIFVTSE9SVCApKCB0ZW1wYnggJiAweGZmICkgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxYyAsICggVVNIT1JUICkoIHRlbXBjeCAmIDB4ZmYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDFiLCAodW5zaWduZWQgc2hvcnQpKHRlbXBieCAmIDB4ZmYpKTsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDFjLCAodW5zaWduZWQgc2hvcnQpKHRlbXBjeCAmIDB4ZmYpKTsKIAogICAgICAgICAgICAgdGVtcGJ4ID0gKCB0ZW1wYnggPj4gOCApICYgMHgwNyA7CiAgICAgICAgICAgICB0ZW1wY3ggPSAoIHRlbXBjeCA+PiA4ICkgJiAweDA3IDsKIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MWQgLCAoIFVTSE9SVCApKCAoIHRlbXBjeCA8PCAzICkgfCB0ZW1wYnggKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDFkLCAodW5zaWduZWQgc2hvcnQpKCh0ZW1wY3ggPDwgMykgfCB0ZW1wYngpKTsKIAogICAgICAgICAgICAgdGVtcGF4ID0gcFZCSW5mby0+VlQgOwogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5MQ0RJbmZvICYgRW5hYmxlU2NhbGluZ0xDRCApCkBAIC0zMTIzLDggKzMwODIsOCBAQAogICAgICAgICAgICAgaWYgKCB0ZW1wY3ggPj0gdGVtcGF4ICkKICAgICAgICAgICAgICAgICB0ZW1wY3ggLT0gdGVtcGF4IDsKIAotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MTggLCAoIFVTSE9SVCApKCB0ZW1wYnggJiAweGZmICkgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MTkgLCB+MHgwZiAsICggVVNIT1JUICkoIHRlbXBjeCAmIDB4MGYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDE4LCAodW5zaWduZWQgc2hvcnQpKHRlbXBieCAmIDB4ZmYpKTsKKwkgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxOSwgfjB4MGYsICh1bnNpZ25lZCBzaG9ydCkodGVtcGN4ICYgMHgwZikpOwogCiAgICAgICAgICAgICB0ZW1wYXggPSAoICggdGVtcGJ4ID4+IDggKSAmIDB4MDcgKSA8PCAzIDsKIApAQCAtMzE0NSw3ICszMTA0LDcgQEAKICAgICAgICAgICAgIHRlbXAgPSB0ZW1wYXggOyAgICAgICAgICAgIC8qIDA0MzAgeWxzaGllaCAqLwogICAgICAgICAgICAgdGVtcDEgPSAoIHRlbXAgPDwgMTggKSAvIHRlbXBieCA7CiAKLSAgICAgICAgICAgIHRlbXBkeCA9ICggVVNIT1JUICkoICggdGVtcCA8PCAxOCApICUgdGVtcGJ4ICkgOworCSAgICB0ZW1wZHggPSAodW5zaWduZWQgc2hvcnQpKCh0ZW1wIDw8IDE4KSAlIHRlbXBieCk7CiAKICAgICAgICAgICAgIGlmICggdGVtcGR4ICE9IDAgKQogICAgICAgICAgICAgdGVtcDEgKz0gMSA7CkBAIC0zMTUzLDEwICszMTEyLDEwIEBACiAgICAgICAgICAgICB0ZW1wMiA9IHRlbXAxIDsKICAgICAgICAgICAgIHB1c2gzID0gdGVtcDIgOwogCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgzNyAsICggVVNIT1JUICkoIHRlbXAyICYgMHhmZiApICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MzYgLCAoIFVTSE9SVCApKCAoIHRlbXAyID4+IDggKSAmIDB4ZmYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDM3LCAodW5zaWduZWQgc2hvcnQpKHRlbXAyICYgMHhmZikpOworCSAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MzYsICh1bnNpZ25lZCBzaG9ydCkoKHRlbXAyID4+IDgpICYgMHhmZikpOwogCi0gICAgICAgICAgICB0ZW1wYnggPSAoIFVTSE9SVCApKCB0ZW1wMiA+PiAxNiApIDsKKwkgICAgdGVtcGJ4ID0gKHVuc2lnbmVkIHNob3J0KSh0ZW1wMiA+PiAxNik7CiAgICAgICAgICAgICB0ZW1wYXggPSB0ZW1wYnggJiAweDAzIDsKIAogICAgICAgICAgICAgdGVtcGJ4ID0gcFZCSW5mby0+VkdBVkRFIDsKQEAgLTMxNjgsMTAgKzMxMjcsMTAgQEAKICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgVkJfWEdJMzAxQyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcDIgPSBwdXNoMyA7Ci0gICAgICAJICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgzYyAsICggVVNIT1JUICkoIHRlbXAyICYgMHhmZiApICkgOwotICAgICAgCSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4M2IgLCAoIFVTSE9SVCApKCAoIHRlbXAyID4+IDggKSAmIDB4ZmYgKSApIDsKLSAgICAgIAkgICAgICAgIHRlbXBieCA9ICggVVNIT1JUICkoIHRlbXAyID4+IDE2ICkgOwotICAgICAgCSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDNhICwgfjB4YzAgLCAoIFVTSE9SVCApKCAoIHRlbXBieCAmIDB4ZmYgKSA8PCA2ICkgKSA7CisJCVhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgzYywgKHVuc2lnbmVkIHNob3J0KSh0ZW1wMiAmIDB4ZmYpKTsKKwkJWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDRQb3J0LCAweDNiLCAodW5zaWduZWQgc2hvcnQpKCh0ZW1wMiA+PiA4KSAmIDB4ZmYpKTsKKwkJdGVtcGJ4ID0gKHVuc2lnbmVkIHNob3J0KSh0ZW1wMiA+PiAxNik7CisJCVhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4M2EsIH4weGMwLCAodW5zaWduZWQgc2hvcnQpKCh0ZW1wYnggJiAweGZmKSA8PCA2KSk7CiAKICAgICAgICAgICAgICAgICB0ZW1wY3ggPSBwVkJJbmZvLT5WR0FWREUgOwogICAgICAgICAgICAgICAgIGlmICggdGVtcGN4ID09IHBWQkluZm8tPlZERSApCkBAIC0zMTg1LDcgKzMxNDQsNyBAQAogCiAgICAgICAgICAgICB0ZW1wMSA9IHRlbXBjeCA8PCAxNiA7CiAKLSAgICAgICAgICAgIHRlbXBheCA9ICggVVNIT1JUICkoIHRlbXAxIC8gdGVtcGJ4ICkgOworCSAgICB0ZW1wYXggPSAodW5zaWduZWQgc2hvcnQpKHRlbXAxIC8gdGVtcGJ4KTsKIAogICAgICAgICAgICAgaWYgKCAoIHRlbXBieCAmIDB4ZmZmZiApID09ICggdGVtcGN4ICYgMHhmZmZmICkgKQogICAgICAgICAgICAgICAgIHRlbXBheCA9IDY1NTM1IDsKQEAgLTMxOTksMjggKzMxNTgsMjggQEAKIAogICAgICAgICAgICAgdGVtcDMgPSAoIHRlbXAzICYgMHhmZmZmMDAwMCApICsgKCB0ZW1wMSAmIDB4ZmZmZiApIDsKIAotICAgICAgICAgICAgdGVtcGF4ID0gKCBVU0hPUlQgKSggdGVtcDMgJiAweGZmICkgOworCSAgICB0ZW1wYXggPSAodW5zaWduZWQgc2hvcnQpKHRlbXAzICYgMHhmZik7CiAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxZiAsIHRlbXBheCApIDsKIAogICAgICAgICAgICAgdGVtcDEgPSBwVkJJbmZvLT5WR0FWREUgPDwgMTggOwogICAgICAgICAgICAgdGVtcDEgPSB0ZW1wMSAvIHB1c2gzIDsKLSAgICAgICAgICAgIHRlbXBieCA9ICggVVNIT1JUICkoIHRlbXAxICYgMHhmZmZmICkgOworCSAgICB0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpKHRlbXAxICYgMHhmZmZmKTsKIAogICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5MQ0RSZXNJbmZvID09IFBhbmVsMTAyNHg3NjggKQogICAgICAgICAgICAgICAgIHRlbXBieCAtPSAxIDsKIAogICAgICAgICAgICAgdGVtcGF4ID0gKCAoIHRlbXBieCA+PiA4ICkgJiAweGZmICkgPDwgMyA7Ci0gICAgICAgICAgICB0ZW1wYXggfD0gKCBVU0hPUlQgKSggKCB0ZW1wMyA+PiA4ICkgJiAweDA3ICkgOwotICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MjAgLCAoIFVTSE9SVCApKCB0ZW1wYXggJiAweGZmICkgKSA7Ci0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMSAsICggVVNIT1JUICkoIHRlbXBieCAmIDB4ZmYgKSApIDsKKwkgICAgdGVtcGF4IHw9ICh1bnNpZ25lZCBzaG9ydCkoKHRlbXAzID4+IDgpICYgMHgwNyk7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgyMCwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wYXggJiAweGZmKSk7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgyMSwgKHVuc2lnbmVkIHNob3J0KSh0ZW1wYnggJiAweGZmKSk7CiAKICAgICAgICAgICAgIHRlbXAzID0gdGVtcDMgPj4gMTYgOwogCiAgICAgICAgICAgICBpZiAoIG1vZGVmbGFnICYgSGFsZkRDTEsgKQogICAgICAgICAgICAgICAgIHRlbXAzID0gdGVtcDMgPj4gMSA7CiAKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MjIgLCAoIFVTSE9SVCApKCAoIHRlbXAzID4+IDggKSAmIDB4ZmYgKSApIDsKLSAgICAgICAgICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MjMgLCAoIFVTSE9SVCApKCB0ZW1wMyAmIDB4ZmYgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDFQb3J0ICwgMHgyMiwgKHVuc2lnbmVkIHNob3J0KSgodGVtcDMgPj4gOCkgJiAweGZmKSk7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MjMsICh1bnNpZ25lZCBzaG9ydCkodGVtcDMgJiAweGZmKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMjMyLDkgKzMxOTEsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMkVDTEsoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKQordm9pZCBYR0lfU2V0Q1JUMkVDTEsodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgZGlfMCAsIGRpXzEgLCB0ZW1wYWwgOworICAgIHVuc2lnbmVkIGNoYXIgZGlfMCwgZGlfMSwgdGVtcGFsOwogICAgIGludCBpIDsKIAogICAgIHRlbXBhbCA9IFhHSV9HZXRWQ0xLUHRyKCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbyApIDsKQEAgLTMyNDMsNyArMzIwMiw3IEBACiAKICAgICBmb3IoIGkgPSAwIDsgaSA8IDQgOyBpKysgKQogICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHgzMSAsIH4weDMwICwgKCBVU0hPUlQgKSggMHgxMCAqIGkgKSApIDsKKwlYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UDNkNCwgMHgzMSwgfjB4MzAsICh1bnNpZ25lZCBzaG9ydCkoMHgxMCAqIGkpKTsKICAgICAgICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEgKQogICAgICAgICB7CiAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MmIgLCBkaV8wICkgOwpAQCAtMzI2OSw5ICszMjI4LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1VwZGF0ZU1vZGVJbmZvKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9VcGRhdGVNb2RlSW5mbyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wY2wgLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBjbCAsCiAgICAgICAgICAgIHRlbXBjaCAsCiAgICAgICAgICAgIHRlbXAgLAogICAgICAgICAgICB0ZW1wYmwgLApAQCAtMzM3Nyw3ICszMzM2LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFZHQVR5cGUoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbykKK3ZvaWQgWEdJX0dldFZHQVR5cGUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICAvKgogICAgIGlmICggSHdEZXZpY2VFeHRlbnNpb24tPmpDaGlwVHlwZSA+PSBYRzIwICkKQEAgLTMzOTksOSArMzM1OCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRWQlR5cGUoUFZCX0RFVklDRV9JTkZPICBwVkJJbmZvKQordm9pZCBYR0lfR2V0VkJUeXBlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZmxhZyAsIHRlbXBieCAsIHRlbXBhaCA7CisgICAgdW5zaWduZWQgc2hvcnQgZmxhZyAsIHRlbXBieCAsIHRlbXBhaCA7CiAKICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCiAgICAgewpAQCAtMzQ2Miw5ICszNDIxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFZCSW5mbyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyAgcFZCSW5mbyApCit2b2lkIFhHSV9HZXRWQkluZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLAogICAgICAgICAgICBwdXNoICwKICAgICAgICAgICAgdGVtcGJ4ICwKICAgICAgICAgICAgdGVtcCAsCkBAIC0zNzAzLDkgKzM2NjIsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0VFZJbmZvKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICxQVkJfREVWSUNFX0lORk8gIHBWQkluZm8gKQordm9pZCBYR0lfR2V0VFZJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCAsCiAgICAgICAgICAgIHRlbXBieCA9IDAgLAogICAgICAgICAgICByZXNpbmZvID0gMCAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKQEAgLTM4MzgsOSArMzc5NywxMCBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfR2V0TENESW5mbyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSV9HZXRMQ0RJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCAsCiAgICAgICAgICAgIHRlbXBheCAsCiAgICAgICAgICAgIHRlbXBieCAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKQEAgLTQwNDcsOTYgKzQwMDcsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX1NlYXJjaE1vZGVJRCggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCAqTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIGNoYXIgWEdJX1NlYXJjaE1vZGVJRCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgKk1vZGVJZEluZGV4LAorCQkJICAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAotI2lmZGVmIFRDCiAKLSAgICBpZiAoIE1vZGVObyA8PSA1ICkKLSAgICAgICAgTW9kZU5vIHw9IDEgOwotCi0gICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCi0gICAgewotICAgICAgICAvKiBmb3IgKCpNb2RlSWRJbmRleD0wOypNb2RlSWRJbmRleDxzaXplb2YocFZCSW5mby0+U01vZGVJRFRhYmxlKS9zaXplb2YoWEdJX1N0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLwotICAgICAgICBmb3IoICpNb2RlSWRJbmRleCA9IDAgOyA7ICggKk1vZGVJZEluZGV4ICkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+U01vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5TdF9Nb2RlSUQgPT0gTW9kZU5vICkKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPlNNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uU3RfTW9kZUlEID09IDB4RkYgKQotICAgICAgICAgICAgICAgIHJldHVybiggRkFMU0UgKSA7Ci0gICAgICAgIH0KLQotICAgICAgICBWR0FfSU5GTyA9ICggUFVDSEFSIClNS19GUCggMCAsIDB4NDg5ICkgOwotCi0gICAgICAgIGlmICggTW9kZU5vID09IDB4MDcgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICggKlZHQV9JTkZPICYgMHgxMCApICE9IDAgKQotICAgICAgICAgICAgICAgICggKk1vZGVJZEluZGV4ICkrKyA7IC8qIDQwMCBsaW5lcyAqLwotICAgICAgICAgICAgLyogZWxzZSAzNTAgbGluZXMgKi8KLSAgICAgICAgfQotCi0gICAgICAgIGlmICggTW9kZU5vIDw9IDMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICggKlZHQV9JTkZPICYgMHg4MCApID09IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICggKk1vZGVJZEluZGV4ICkrKyA7Ci0gICAgICAgICAgICAgICAgaWYgKCAoICpWR0FfSU5GTyAmIDB4MTAgKSAhPSAwICkKLSAgICAgICAgICAgICAgICAgICAgKCAqTW9kZUlkSW5kZXggKSsrIDsgLyogNDAwIGxpbmVzICovCi0gICAgICAgICAgICAgICAgLyogZWxzZSAzNTAgbGluZXMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGVsc2UgMjAwIGxpbmVzICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgLyogZm9yICgqTW9kZUlkSW5kZXg9MDsqTW9kZUlkSW5kZXg8c2l6ZW9mKHBWQkluZm8tPkVNb2RlSURUYWJsZSkvc2l6ZW9mKFhHSV9FeHRTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCi0gICAgICAgIGZvciggKk1vZGVJZEluZGV4ID0gMCA7IDsgKCAqTW9kZUlkSW5kZXggKSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5FTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLkV4dF9Nb2RlSUQgPT0gTW9kZU5vICkKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPkVNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uRXh0X01vZGVJRCA9PSAweEZGICkKLSAgICAgICAgICAgICAgICByZXR1cm4oIEZBTFNFICkgOwotICAgICAgICB9Ci0gICAgfQotCi0KLSNlbmRpZgotCi0jaWZkZWYgV0lOMjAwMAotCi0gICAgaWYgKCBNb2RlTm8gPD0gNSApCi0gICAgICAgIE1vZGVObyB8PSAxIDsKLSAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKLSAgICB7Ci0gICAgICAgIC8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5TTW9kZUlEVGFibGUpL3NpemVvZihYR0lfU3RTdHJ1Y3QpOygqTW9kZUlkSW5kZXgpKyspICovCi0gICAgICAgIGZvciggKk1vZGVJZEluZGV4ID0gMCA7IDsgKCAqTW9kZUlkSW5kZXggKSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwVkJJbmZvLT5TTW9kZUlEVGFibGVbICpNb2RlSWRJbmRleCBdLlN0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+U01vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5TdF9Nb2RlSUQgPT0gMHhGRiApCi0gICAgICAgICAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggTW9kZU5vID09IDB4MDcgKQotICAgICAgICAgICAgKCAqTW9kZUlkSW5kZXggKSsrIDsgLyogNDAwIGxpbmVzICovCi0KLSAgICAgICAgaWYgKCBNb2RlTm8gPD0zICkKLSAgICAgICAgICAgICggKk1vZGVJZEluZGV4ICkgKz0gMiA7IC8qIDQwMCBsaW5lcyAqLwotICAgICAgICAvKiBlbHNlIDM1MCBsaW5lcyAqLwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBmb3IgKCpNb2RlSWRJbmRleD0wOypNb2RlSWRJbmRleDxzaXplb2YocFZCSW5mby0+RU1vZGVJRFRhYmxlKS9zaXplb2YoWEdJX0V4dFN0cnVjdCk7KCpNb2RlSWRJbmRleCkrKykgKi8KLSAgICAgICAgZm9yKCAqTW9kZUlkSW5kZXggPSAwIDsgOyAoICpNb2RlSWRJbmRleCApKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPkVNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uRXh0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IDB4RkYgKQotICAgICAgICAgICAgICAgIHJldHVybiggRkFMU0UgKSA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNlbmRpZgogCiAjaWZkZWYgTElOVVggLyogY2hpYXdlbiBmb3IgbGludXggc29sdXRpb24gKi8KIApAQCAtNDE0NCwxMyArNDAyMCwxMyBAQAogICAgICAgICBNb2RlTm8gfD0gMSA7CiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewotICAgICAgICAvKiBmb3IgKCpNb2RlSWRJbmRleD0wOypNb2RlSWRJbmRleDxzaXplb2YocFZCSW5mby0+U01vZGVJRFRhYmxlKS9zaXplb2YoWEdJX1N0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLworCS8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5TTW9kZUlEVGFibGUpL3NpemVvZihzdHJ1Y3QgWEdJX1N0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLwogICAgICAgICBmb3IoICpNb2RlSWRJbmRleCA9IDAgOyA7ICggKk1vZGVJZEluZGV4ICkrKyApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+U01vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5TdF9Nb2RlSUQgPT0gTW9kZU5vICkKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPlNNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uU3RfTW9kZUlEID09IDB4RkYgKQotICAgICAgICAgICAgICAgIHJldHVybiggRkFMU0UgKSA7CisJCWlmIChwVkJJbmZvLT5TTW9kZUlEVGFibGVbKk1vZGVJZEluZGV4XS5TdF9Nb2RlSUQgPT0gTW9kZU5vKQorCQkJYnJlYWs7CisJCWlmIChwVkJJbmZvLT5TTW9kZUlEVGFibGVbKk1vZGVJZEluZGV4XS5TdF9Nb2RlSUQgPT0gMHhGRikKKwkJCXJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCBNb2RlTm8gPT0gMHgwNyApCkBAIC00MTYyLDE5ICs0MDM4LDE5IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5FTW9kZUlEVGFibGUpL3NpemVvZihYR0lfRXh0U3RydWN0KTsoKk1vZGVJZEluZGV4KSsrKSAqLworCS8qIGZvciAoKk1vZGVJZEluZGV4PTA7Kk1vZGVJZEluZGV4PHNpemVvZihwVkJJbmZvLT5FTW9kZUlEVGFibGUpL3NpemVvZihzdHJ1Y3QgWEdJX0V4dFN0cnVjdCk7KCpNb2RlSWRJbmRleCkrKykgKi8KICAgICAgICAgZm9yKCAqTW9kZUlkSW5kZXggPSAwIDsgOyAoICpNb2RlSWRJbmRleCApKysgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIHBWQkluZm8tPkVNb2RlSURUYWJsZVsgKk1vZGVJZEluZGV4IF0uRXh0X01vZGVJRCA9PSBNb2RlTm8gKQotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGlmICggcFZCSW5mby0+RU1vZGVJRFRhYmxlWyAqTW9kZUlkSW5kZXggXS5FeHRfTW9kZUlEID09IDB4RkYgKQotICAgICAgICAgICAgICAgIHJldHVybiggRkFMU0UgKSA7CisJCWlmIChwVkJJbmZvLT5FTW9kZUlEVGFibGVbKk1vZGVJZEluZGV4XS5FeHRfTW9kZUlEID09IE1vZGVObykKKwkJCWJyZWFrOworCQlpZiAocFZCSW5mby0+RU1vZGVJRFRhYmxlWypNb2RlSWRJbmRleF0uRXh0X01vZGVJRCA9PSAweEZGKQorCQkJcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKICNlbmRpZgogCi0gICAgcmV0dXJuKCBUUlVFICkgOworICAgIHJldHVybiAxOwogfQogCiAKQEAgLTQxODgsOSArNDA2NCwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lOZXdfQ2hlY2tNZW1vcnlTaXplKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSU5ld19DaGVja01lbW9yeVNpemUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCQkgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgbWVtb3J5c2l6ZSAsCisgICAgdW5zaWduZWQgc2hvcnQgbWVtb3J5c2l6ZSAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgdGVtcCAsCiAgICAgICAgICAgIHRlbXAxICwKQEAgLTQxOTksNyArNDA3OCw3IEBACiAvKiAgaWYgKCAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEdJXzY1MCApIHx8CiAgICAgICAgICAoIEh3RGV2aWNlRXh0ZW5zaW9uLT5qQ2hpcFR5cGUgPT0gWEdJXzY1ME0gKSApCiAgICAgewotICAgICAgICByZXR1cm4oIFRSVUUgKSA7CisJcmV0dXJuIDE7CiAgICAgfSAqLwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCkBAIC00MjU3LDEwICs0MTM2LDEwIEBACiAgICAgICAgICAgICB0ZW1wIDw8PSAxIDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoIHRlbXAgPCBtZW1vcnlzaXplICkKLSAgICAgICAgcmV0dXJuKCBGQUxTRSApIDsKKyAgICBpZiAodGVtcCA8IG1lbW9yeXNpemUpCisJICAgIHJldHVybiAwOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuKCBUUlVFICkgOworCSAgICByZXR1cm4gMTsKIH0KIAogCkBAIC00MjcwLDEwICs0MTQ5LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKnZvaWQgWEdJTmV3X0lzTG93UmVzb2x1dGlvbiggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgQk9PTEVBTiBYR0lOZXdfQ2hlY2tNZW1vcnlTaXplKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCisvKnZvaWQgWEdJTmV3X0lzTG93UmVzb2x1dGlvbih1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBjaGFyIFhHSU5ld19DaGVja01lbW9yeVNpemUoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZGF0YSA7Ci0gICAgVVNIT1JUIE1vZGVGbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBkYXRhIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBNb2RlRmxhZyA7CiAKICAgICBkYXRhID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDBGICkgOwogICAgIGRhdGEgJj0gMHg3RiA7CkBAIC00MzAyLDcgKzQxODEsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRGlzcGxheU9uKCBQWEdJX0hXX0RFVklDRV9JTkZPIHBYR0lIV0RFICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfRGlzcGxheU9uKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UDNjNCwweDAxLDB4REYsMHgwMCk7CkBAIC00MzMxLDEyICs0MjEwLDYgQEAKIAogICAgIGlmIChwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEpIC8qIFtCaWxseV0gMDcvMDUvMjMgRm9yIENINzAwNyAqLwogICAgIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgICAgaWYgKCBJc0NINzAwN1RWTW9kZSggcFZCSW5mbyApICkKLSAgICAgICB7Ci0gICAgICAgICAgIFR1cm5PbkNINzAwNyhwWEdJSFdERS0+cERldmljZSkgOyAvKiAwNy8wNS8yOCAqLwotICAgICAgIH0KLSNlbmRpZgogCiAgICAgfQogCkBAIC00MzcyLDcgKzQyNDUsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRGlzcGxheU9mZiggUFhHSV9IV19ERVZJQ0VfSU5GTyBwWEdJSFdERSAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX0Rpc3BsYXlPZmYoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqcFhHSUhXREUsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAogICAgIGlmICggcFhHSUhXREUtPmpDaGlwVHlwZSA9PSBYRzIxICkKQEAgLTQzOTIsOSArNDI2NSw2IEBACiAgICAgewogICAgICAgIC8qIGlmKCBJc0NINzAwN1RWTW9kZSggcFZCSW5mbyApID09IDAgKSAqLwogICAgICAgIHsKLSNpZmRlZiBXSU4yMDAwCi0gICAgICAgICBUdXJuT2ZmQ0g3MDA3KHBYR0lIV0RFLT5wRGV2aWNlKSA7ICAvKiAwNy8wNS8yOCAqLwotI2VuZGlmCiAgICAgICAgfQogICAgIH0KIApAQCAtNDQyMyw3ICs0MjkzLDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IGNoaWF3ZW4gZm9yIHNlbnNlY3J0MSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9XYWl0RGlzcGx5KCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9XYWl0RGlzcGx5KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICB3aGlsZSggKCBYR0lOZXdfR2V0UmVnMiggcFZCSW5mby0+UDNkYSApICYgMHgwMSApICkKICAgICAgICAgYnJlYWsgOwpAQCAtNDQzOSw1OCArNDMwOSw1OSBAQAogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgWEdJX1NlbnNlQ1JUMSggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfU2Vuc2VDUlQxKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUlRDRGF0YVsgMTcgXSA9IHsgMHg1RiAsIDB4NEYgLCAweDUwICwgMHg4MiAsIDB4NTUgLCAweDgxICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQiAsIDB4M0UgLCAweEU5ICwgMHgwQiAsIDB4REYgLCAweEU3ICwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNCAsIDB4MDAgLCAweDAwICwgMHgwNSAsIDB4MDAgfSA7CisJdW5zaWduZWQgY2hhciBDUlRDRGF0YVsxN10gPSB7CisJCTB4NUYgLCAweDRGICwgMHg1MCAsIDB4ODIgLCAweDU1ICwgMHg4MSAsCisJCTB4MEIgLCAweDNFICwgMHhFOSAsIDB4MEIgLCAweERGICwgMHhFNyAsCisJCTB4MDQgLCAweDAwICwgMHgwMCAsIDB4MDUgLCAweDAwIH07CiAKLSAgICBVQ0hBUiBTUjAxID0gMCAsIFNSMUYgPSAwICwgU1IwNyA9IDAgLCBTUjA2ID0gMCA7CisJdW5zaWduZWQgY2hhciBTUjAxID0gMCwgU1IxRiA9IDAsIFNSMDcgPSAwLCBTUjA2ID0gMDsKIAotICAgIFVDSEFSIENSMTcgLCBDUjYzICwgU1IzMSA7Ci0gICAgVVNIT1JUIHRlbXAgOwotICAgIFVDSEFSIERBQ19URVNUX1BBUk1TWyAzIF0gPSB7IDB4MEYgLCAweDBGICwgMHgwRiB9IDsKKwl1bnNpZ25lZCBjaGFyIENSMTcsIENSNjMsIFNSMzE7CisJdW5zaWduZWQgc2hvcnQgdGVtcCA7CisJdW5zaWduZWQgY2hhciBEQUNfVEVTVF9QQVJNU1szXSA9IHsgMHgwRiwgMHgwRiwgMHgwRiB9IDsKIAogICAgIGludCBpIDsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDUgLCAweDg2ICkgOwogCiAgICAgLyogWzIwMDQvMDUvMDZdIFZpY2VudCB0byBmaXggWEc0MiBzaW5nbGUgTENEIHNlbnNlIHRvIENSVCtMQ0QgKi8KICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NTcgLCAweDRBICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg1MyAsICggVUNIQVIgKSggWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUzICkgfCAweDAyICkgKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHg1MywgKHVuc2lnbmVkIGNoYXIpKFhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4NTMpIHwgMHgwMikpOwogCi0gICAgU1IzMSA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzMSApIDsKLSAgICBDUjYzID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDYzICkgOwotICAgIFNSMDEgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDEgKSA7CisgICAgU1IzMSA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MzEpOworICAgIENSNjMgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2Q0LCAweDYzKTsKKyAgICBTUjAxID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwMSk7CiAKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDEgLCAoIFVDSEFSICkoIFNSMDEgJiAweERGICkgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDYzICwgKCBVQ0hBUiApKCBDUjYzICYgMHhCRiApICkgOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MDEsICh1bnNpZ25lZCBjaGFyKShTUjAxICYgMHhERikpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4NjMsICh1bnNpZ25lZCBjaGFyKShDUjYzICYgMHhCRikpOwogCi0gICAgQ1IxNyA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxNyApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTcgLCAoIFVDSEFSICkoIENSMTcgfCAweDgwICkgKSA7CisgICAgQ1IxNyA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MTcpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4MTcsICh1bnNpZ25lZCBjaGFyKShDUjE3IHwgMHg4MCkpIDsKIAotICAgIFNSMUYgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUYgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFGICwgKCBVQ0hBUiApKCBTUjFGIHwgMHgwNCApICkgOworICAgIFNSMUYgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFGKTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDFGLCAodW5zaWduZWQgY2hhcikoU1IxRiB8IDB4MDQpKTsKIAotICAgIFNSMDcgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDcgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDA3ICwgKCBVQ0hBUiApKCBTUjA3ICYgMHhGQiApICkgOwotICAgIFNSMDYgPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MDYgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDA2ICwgKCBVQ0hBUiApKCBTUjA2ICYgMHhDMyApICkgOworICAgIFNSMDcgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDA3KTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QM2M0LCAweDA3LCAodW5zaWduZWQgY2hhcikoU1IwNyAmIDB4RkIpKTsKKyAgICBTUjA2ID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwNik7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwNiwgKHVuc2lnbmVkIGNoYXIpKFNSMDYgJiAweEMzKSk7CiAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MTEgLCAweDAwICkgOwogCiAgICAgZm9yKCBpID0gMCA7IGkgPCA4IDsgaSsrICkKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAoIFVTSE9SVCApaSAsIENSVENEYXRhWyBpIF0gKSA7CisJICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzZDQsICh1bnNpZ25lZCBzaG9ydClpLCBDUlRDRGF0YVtpXSk7CiAKICAgICBmb3IoIGkgPSA4IDsgaSA8IDExIDsgaSsrICkKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAoIFVTSE9SVCApKCBpICsgOCApICwgQ1JUQ0RhdGFbIGkgXSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgKHVuc2lnbmVkIHNob3J0KShpICsgOCksIENSVENEYXRhW2ldKTsKIAogICAgIGZvciggaSA9IDExIDsgaSA8IDEzIDsgaSsrICkKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAoIFVTSE9SVCApKCBpICsgNCApICwgQ1JUQ0RhdGFbIGkgXSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgKHVuc2lnbmVkIHNob3J0KShpICsgNCksIENSVENEYXRhW2ldKTsKIAogICAgIGZvciggaSA9IDEzIDsgaSA8IDE2IDsgaSsrICkKLSAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAoIFVTSE9SVCApKCBpIC0gMyApICwgQ1JUQ0RhdGFbIGkgXSApIDsKKwkgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgKHVuc2lnbmVkIHNob3J0KShpIC0gMyksIENSVENEYXRhW2ldKTsKIAotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgwRSAsICggVUNIQVIgKSggQ1JUQ0RhdGFbIDE2IF0gJiAweEUwICkgKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNjNCwgMHgwRSwgKHVuc2lnbmVkIGNoYXIpKENSVENEYXRhWzE2XSAmIDB4RTApKTsKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2M0ICwgMHgzMSAsIDB4MDAgKSA7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDJCICwgMHgxQiApIDsKQEAgLTQ1MDAsOSArNDM3MSw5IEBACiAKICAgICBmb3IoIGkgPSAwIDsgaSA8IDI1NiA7IGkrKyApCiAgICAgewotICAgICAgICBYR0lOZXdfU2V0UmVnMyggKCBwVkJJbmZvLT5QM2M4ICsgMSApICwgKCBVQ0hBUiApREFDX1RFU1RfUEFSTVNbIDAgXSApIDsKLSAgICAgICAgWEdJTmV3X1NldFJlZzMoICggcFZCSW5mby0+UDNjOCArIDEgKSAsICggVUNIQVIgKURBQ19URVNUX1BBUk1TWyAxIF0gKSA7Ci0gICAgICAgIFhHSU5ld19TZXRSZWczKCAoIHBWQkluZm8tPlAzYzggKyAxICkgLCAoIFVDSEFSIClEQUNfVEVTVF9QQVJNU1sgMiBdICkgOworCVhHSU5ld19TZXRSZWczKChwVkJJbmZvLT5QM2M4ICsgMSksICh1bnNpZ25lZCBjaGFyKURBQ19URVNUX1BBUk1TWzBdKTsKKwlYR0lOZXdfU2V0UmVnMygocFZCSW5mby0+UDNjOCArIDEpLCAodW5zaWduZWQgY2hhcilEQUNfVEVTVF9QQVJNU1sxXSk7CisJWEdJTmV3X1NldFJlZzMoKHBWQkluZm8tPlAzYzggKyAxKSwgKHVuc2lnbmVkIGNoYXIpREFDX1RFU1RfUEFSTVNbMl0pOwogICAgIH0KIAogICAgIFhHSV9WQkxvbmdXYWl0KCBwVkJJbmZvICkgOwpAQCAtNDUzOCwxNDggKzQ0MDksMTggQEAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzEgLCBTUjMxICkgOwogCiAgICAgLyogWzIwMDQvMDUvMTFdIFZpY2VudCAqLwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg1MyAsICggVUNIQVIgKSggWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDUzICkgJiAweEZEICkgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDFGICwgKCBVQ0hBUiApIFNSMUYgKSA7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UDNkNCwgMHg1MywKKwkJICAgKHVuc2lnbmVkIGNoYXIpKFhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4NTMpICYgMHhGRCkpOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MUYsICh1bnNpZ25lZCBjaGFyKVNSMUYpOwogfQogCiAKIAogCiAKLSNpZmRlZiBUQwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBGdW5jdGlvbiA6IElOVDFBUmV0dXJuQ29kZSAqLwotLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogKi8KLS8qIERlc2NyaXB0aW9uIDogKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IElOVDFBUmV0dXJuQ29kZSggdW5pb24gUkVHUyByZWdzICkKLXsKLSAgICBpZiAoIHJlZ3MueC5jZmxhZyApCi0gICAgewotICAgICAgICAvKiBwcmludGYoICJFcnJvciB0byBmaW5kIHBjaSBkZXZpY2UhXG4iICkgOyAqLwotICAgICAgICByZXR1cm4oIDEgKSA7Ci0gICAgfQotCi0gICAgc3dpdGNoKHJlZ3MuaC5haCkKLSAgICB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDA7Ci0gICAgICAgICAgICBicmVhayA7Ci0gICAgICAgIGNhc2UgMHg4MToKLSAgICAgICAgICAgIHByaW50ZiggIkZ1bmN0aW9uIG5vdCBzdXBwb3J0XG4iICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBjYXNlIDB4ODM6Ci0gICAgICAgICAgICBwcmludGYoICJiYWQgdmVuZG9yIGlkXG4iICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBjYXNlIDB4ODY6Ci0gICAgICAgICAgICBwcmludGYoICJkZXZpY2Ugbm90IGZvdW5kXG4iICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBjYXNlIDB4ODc6Ci0gICAgICAgICAgICBwcmludGYoICJiYWQgcmVnaXN0ZXIgbnVtYmVyXG4iICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBjYXNlIDB4ODg6Ci0gICAgICAgICAgICBwcmludGYoICJzZXQgZmFpbGVkXG4iICkgOwotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICBjYXNlIDB4ODk6Ci0gICAgICAgICAgICBwcmludGYoICJidWZmZXIgdG9vIHNtYWxsIiApIDsKLSAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrIDsKLSAgICB9Ci0gICAgcmV0dXJuKCAxICkgOwotfQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogRnVuY3Rpb24gOiBGaW5kUENJSU9CYXNlICovCi0vKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiAqLwotLyogRGVzY3JpcHRpb24gOiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi11bnNpZ25lZCBGaW5kUENJSU9CYXNlKCB1bnNpZ25lZCBpbmRleCAsIHVuc2lnbmVkIGRldmljZWlkICkKLXsKLSAgICB1bmlvbiBSRUdTIHJlZ3MgOwotCi0gICAgcmVncy5oLmFoID0gMHhiMSA7CS8qIFBDSV9GVU5DVElPTl9JRCAqLwotICAgIHJlZ3MuaC5hbCA9IDB4MDIgOwkvKiBGSU5EX1BDSV9ERVZJQ0UgKi8KLSAgICByZWdzLnguY3ggPSBkZXZpY2VpZCA7Ci0gICAgcmVncy54LmR4ID0gMHgxMDM5IDsKLSAgICByZWdzLnguc2kgPSBpbmRleCA7CS8qIGZpbmQgbi10aCBkZXZpY2UgKi8KLQotICAgIGludDg2KCAweDFBICwgJnJlZ3MgLCAmcmVncyApIDsKLQotICAgIGlmICggSU5UMUFSZXR1cm5Db2RlKCByZWdzICkgIT0gMCApCi0gICAgICAgIHJldHVybiggMCApIDsKLQotICAgIC8qIHJlZ3MuaC5iaCBidXMgbnVtYmVyICovCi0gICAgLyogcmVncy5oLmJsIGRldmljZSBudW1iZXIgKi8KLSAgICByZWdzLmguYWggPSAweGIxIDsgIC8qIFBDSV9GVU5DVElPTl9JRCAqLwotICAgIHJlZ3MuaC5hbCA9IDB4MDkgOyAgLyogUkVBRF9DT05GSUdfV09SRCAqLwotICAgIHJlZ3MueC5jeCA9IGRldmljZWlkIDsKLSAgICByZWdzLnguZHggPSAweDEwMzkgOwotICAgIHJlZ3MueC5kaSA9IDB4MTggOyAgLyogcmVnaXN0ZXIgbnVtYmVyICovCi0gICAgaW50ODYoIDB4MUEgLCAmcmVncyAsICZyZWdzICkgOwotCi0gICAgaWYgKCBJTlQxQVJldHVybkNvZGUoIHJlZ3MgKSAhPSAwICkKLSAgICAgICAgcmV0dXJuKCAwICkgOwotCi0gICAgcmV0dXJuKCByZWdzLnguY3ggKSA7Ci19Ci0KLSNlbmRpZgogCiAKIAotI2lmZGVmIFRDCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIEZ1bmN0aW9uIDogbWFpbiAqLwotLyogSW5wdXQgOiAqLwotLyogT3V0cHV0IDogKi8KLS8qIERlc2NyaXB0aW9uIDogKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uIDsKLSAgICBVU0hPUlQgdGVtcCA7Ci0gICAgVVNIT1JUIE1vZGVObyA7Ci0KLSAgICAvKiBId0RldmljZUV4dGVuc2lvbi5walZpcnR1YWxSb21CYXNlID0oUFVDSEFSKSBNS19GUCgweEMwMDAsMCk7ICovCi0gICAgLyogSHdEZXZpY2VFeHRlbnNpb24ucGpWaWRlb01lbW9yeUFkZHJlc3MgPSAoUFVDSEFSKU1LX0ZQKDB4QTAwMCwwKTsgKi8KLQotCi0gICAgSHdEZXZpY2VFeHRlbnNpb24ucGpJT0FkZHJlc3MgPSAoIEZpbmRQQ0lJT0Jhc2UoIDAgLDB4NjMwMCApICYgMHhGRjgwICkgKyAweDMwIDsKLSAgICBId0RldmljZUV4dGVuc2lvbi5qQ2hpcFR5cGUgPSBYR0lfMzQwIDsKLQotCi0KLSAgICAvKiBId0RldmljZUV4dGVuc2lvbi5waklPQWRkcmVzcyA9ICggRmluZFBDSUlPQmFzZSggMCAsIDB4NTMxNSApICYgMHhGRjgwICkgKyAweDMwIDsgKi8KLQotICAgIEh3RGV2aWNlRXh0ZW5zaW9uLnBqSU9BZGRyZXNzID0gKCBGaW5kUENJSU9CYXNlKCAwICwgMHgzMzAgKSAmIDB4RkY4MCApICsgMHgzMCA7Ci0gICAgSHdEZXZpY2VFeHRlbnNpb24uakNoaXBUeXBlID0gWEdJXzM0MCA7Ci0KLQotICAgIEh3RGV2aWNlRXh0ZW5zaW9uLnVqVkJDaGlwSUQgPSBWQl9DSElQXzMwMSA7Ci0gICAgU3RyQ3B5KEh3RGV2aWNlRXh0ZW5zaW9uLnN6VkJJT1NWZXIgLCAiMC44NCIgKSA7Ci0gICAgSHdEZXZpY2VFeHRlbnNpb24uYlNraXBEcmFtU2l6aW5nID0gRkFMU0UgOwotICAgIEh3RGV2aWNlRXh0ZW5zaW9uLnVsVmlkZW9NZW1vcnlTaXplID0gMCA7Ci0KLSAgICBpZiAoIGFyZ2MgPT0gMiApCi0gICAgewotICAgICAgICBNb2RlTm8gPSBhdG9pKCBhcmd2WyAxIF0gKSA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIE1vZGVObyA9IDB4MmUgOwotICAgICAgICAvKiBNb2RlTm8gPSAweDM3IDsgMTAyNHg3Njh4IDRicHAgKi8KLSAgICAgICAgLyogTW9kZU5vID0gMHgzOCA7IDEwMjR4NzY4eCA4YnBwICovCi0gICAgICAgIC8qIE1vZGVObyA9IDB4NEEgOyAxMDI0eDc2OHggMTZicHAgKi8KLSAgICAgICAgLyogTW9kZU5vID0gMHg0NyA7IDgwMHg2MDB4IDE2YnBwICovCi0gICAgfQotCi0gICAgLyogWEdJSW5pdE5ldyggJkh3RGV2aWNlRXh0ZW5zaW9uICkgOyAqLwotICAgIFhHSVNldE1vZGVOZXcoICZId0RldmljZUV4dGVuc2lvbiAsIE1vZGVObyApIDsKLX0KLSNlbmRpZgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDY4OCw3ICs0NDI5LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1dhaXREaXNwbGF5KCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9XYWl0RGlzcGxheShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgd2hpbGUoICEoIFhHSU5ld19HZXRSZWcyKCBwVkJJbmZvLT5QM2RhICkgJiAweDAxICkgKSA7CiAKQEAgLTQ3MDQsOSArNDQ0NSwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfU2V0Q1JUMkdyb3VwMzAxKCBVU0hPUlQgTW9kZU5vICwgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfU2V0Q1JUMkdyb3VwMzAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJCSAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsCiAgICAgICAgICAgIE1vZGVJZEluZGV4ICwKICAgICAgICAgICAgUmVmcmVzaFJhdGVUYWJsZUluZGV4IDsKIApAQCAtNDczOSw3ICs0NDgyLDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0F1dG9UaHJlc2hvbGQoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9BdXRvVGhyZXNob2xkKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBpZiAoICEoIHBWQkluZm8tPlNldEZsYWcgJiBXaW45eERPU01vZGUgKSApCiAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDEgLCAweDQwICkgOwpAQCAtNDc1Miw5ICs0NDk1LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NhdmVDUlQySW5mbyggVVNIT1JUIE1vZGVObyAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2F2ZUNSVDJJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wMSAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcDEgLAogICAgICAgICAgICB0ZW1wMiA7CiAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MzQgLCBNb2RlTm8gKSA7ICAvKiByZXNlcnZlIENSMzQgZm9yIENSVDEgTW9kZSBObyAqLwpAQCAtNDc3MCw5ICs0NTEzLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRDUlQyUmVzSW5mbyggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfR2V0Q1JUMlJlc0luZm8odW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHhyZXMgLAorICAgIHVuc2lnbmVkIHNob3J0IHhyZXMgLAogICAgICAgICAgICB5cmVzICwKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICByZXNpbmRleCA7CkBAIC00ODY3LDcgKzQ2MTIsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfSXNMQ0REdWFsTGluayggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordW5zaWduZWQgY2hhciBYR0lfSXNMQ0REdWFsTGluayhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBpZiAoICggKCAoIHBWQkluZm8tPlZCSW5mbyAmIFNldENSVDJUb0xDRCApIHwgU2V0Q1JUMlRvTENEQSApICkgJiYgKCBwVkJJbmZvLT5MQ0RJbmZvICYgU2V0TENERHVhbExpbmsgKSApIC8qIHNoYW1wb28wMTI5ICovCkBAIC00ODgzLDE1ICs0NjI4LDE1IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRDUlQyRGF0YSggIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9HZXRDUlQyRGF0YSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ID0gMCwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggPSAwLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICBtb2RlZmxhZyAsCiAgICAgICAgICAgIHJlc2luZm8gOwogCi0gICAgWEdJX0xDRERhdGFTdHJ1Y3QgKkxDRFB0ciA9IE5VTEwgOwotICAgIFhHSV9UVkRhdGFTdHJ1Y3QgICpUVlB0ciA9IE5VTEwgOworICAgIHN0cnVjdCBYR0lfTENERGF0YVN0cnVjdCAqTENEUHRyID0gTlVMTCA7CisgICAgc3RydWN0IFhHSV9UVkRhdGFTdHJ1Y3QgICpUVlB0ciA9IE5VTEwgOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewpAQCAtNDkxNyw3ICs0NjYyLDcgQEAKIAogICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgKCBTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBICkgKQogICAgIHsKLSAgICAgICAgTENEUHRyID0gKFhHSV9MQ0REYXRhU3RydWN0KiApWEdJX0dldExjZFB0ciggdGVtcGJ4LCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwlMQ0RQdHIgPSAoc3RydWN0IFhHSV9MQ0REYXRhU3RydWN0ICopWEdJX0dldExjZFB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAKICAgICAgICAgcFZCSW5mby0+UlZCSENNQVggPSBMQ0RQdHItPlJWQkhDTUFYIDsKICAgICAgICAgcFZCSW5mby0+UlZCSENGQUNUID0gTENEUHRyLT5SVkJIQ0ZBQ1QgOwpAQCAtNTAyMSw3ICs0NzY2LDcgQEAKICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmICggU2V0Q1JUMlRvVFYgKSApCiAgICAgewogICAgICAgICB0ZW1wYnggPSA0IDsKLSAgICAgICAgVFZQdHIgPSAoIFhHSV9UVkRhdGFTdHJ1Y3QgKiApWEdJX0dldFRWUHRyKCB0ZW1wYnggLCBNb2RlTm8gLCBNb2RlSWRJbmRleCAsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyApIDsKKwlUVlB0ciA9IChzdHJ1Y3QgWEdJX1RWRGF0YVN0cnVjdCAqKVhHSV9HZXRUVlB0cih0ZW1wYngsIE1vZGVObywgTW9kZUlkSW5kZXgsIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgcFZCSW5mbyk7CiAKICAgICAgICAgcFZCSW5mby0+UlZCSENNQVggPSBUVlB0ci0+UlZCSENNQVggOwogICAgICAgICBwVkJJbmZvLT5SVkJIQ0ZBQ1QgPSBUVlB0ci0+UlZCSENGQUNUIDsKQEAgLTUxMDksMTEgKzQ4NTQsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMlZDTEsoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQyVkNMSyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBkaV8wICwKLSAgICAgICAgICBkaV8xICwKLSAgICAgICAgICB0ZW1wYWwgOworCXVuc2lnbmVkIGNoYXIgZGlfMCwgZGlfMSwgdGVtcGFsOwogCiAgICAgdGVtcGFsID0gWEdJX0dldFZDTEtQdHIoIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIE1vZGVObyAsIE1vZGVJZEluZGV4LCBwVkJJbmZvICkgOwogICAgIFhHSV9HZXRWQ0xLTGVuKCB0ZW1wYWwsICZkaV8wICwgJmRpXzEsIHBWQkluZm8gKSA7CkBAIC01MTQ2LDkgKzQ4ODksMTAgQEAKIC8qIE91dHB1dCA6IGFsIC0+IFZDTEsgSW5kZXggKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfR2V0TENEVkNMS1B0ciggVUNIQVIqIGRpXzAgLCBVQ0hBUiAqZGlfMSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfR2V0TENEVkNMS1B0cih1bnNpZ25lZCBjaGFyICpkaV8wLCB1bnNpZ25lZCBjaGFyICpkaV8xLAorCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgaW5kZXggOwogCiAgICAgaWYgKCBwVkJJbmZvLT5WQkluZm8gJiAoIFNldENSVDJUb0xDRCB8IFNldENSVDJUb0xDREEgKSApCiAgICAgewpAQCAtNTE4MiwxNyArNDkyNiwxNiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVUNIQVIgWEdJX0dldFZDTEtQdHIoVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSV9HZXRWQ0xLUHRyKHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJCSAgICAgdW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogCi0gICAgVVNIT1JUIGluZGV4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCAsCiAgICAgICAgICAgIG1vZGVmbGFnIDsKLSNpZm5kZWYgTElOVVhfWEY4NgotICAgIFVTSE9SVCB0ZW1wYnggOwotI2VuZGlmCi0KLSAgICBVQ0hBUiB0ZW1wYWwgOwotICAgIFVDSEFSICpDSFRWVkNMS1B0ciA9IE5VTEwgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCA7CisgICAgdW5zaWduZWQgY2hhciB0ZW1wYWw7CisgICAgdW5zaWduZWQgY2hhciAqQ0hUVlZDTEtQdHIgPSBOVUxMOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgICAgIG1vZGVmbGFnID0gcFZCSW5mby0+U01vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLlN0X01vZGVGbGFnIDsgICAgICAvKiBzaStTdF9SZXNJbmZvICovCkBAIC01MzQ0LDcgKzUwODcsNyBAQAogCiAgICAgfQogCi0gICAgdGVtcGFsID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzIoICggcFZCSW5mby0+UDNjYSArIDB4MDIgKSApIDsKKyAgICB0ZW1wYWwgPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMigocFZCSW5mby0+UDNjYSArIDB4MDIpKTsKICAgICB0ZW1wYWwgPSB0ZW1wYWwgPj4gMiA7CiAgICAgdGVtcGFsICY9IDB4MDMgOwogCkBAIC01MzY1LDE5ICs1MTA4LDIwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRWQ0xLTGVuKFVDSEFSIHRlbXBhbCxVQ0hBUiogZGlfMCxVQ0hBUiogZGlfMSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9HZXRWQ0xLTGVuKHVuc2lnbmVkIGNoYXIgdGVtcGFsLCB1bnNpZ25lZCBjaGFyICpkaV8wLAorCQkgICAgdW5zaWduZWQgY2hhciAqZGlfMSwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGlmICggcFZCSW5mby0+SUZfREVGX0NINzAwNyA9PSAxICkgLyogW0JpbGx5XSAyMDA3LzA1LzE2ICovCiAgICAgewogICAgICAgIC8qIFZpZGVvRGVidWdQcmludCgoMCwgIlhHSV9HZXRWQ0xLTGVuOiBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3PT0xXG4iKSk7ICovCi0gICAgICAgICpkaV8wID0gKCBVQ0hBUiApWEdJX0NINzAwN1ZDTEtEYXRhWyB0ZW1wYWwgXS5TUjJCIDsKLSAgICAgICAgKmRpXzEgPSAoIFVDSEFSIClYR0lfQ0g3MDA3VkNMS0RhdGFbIHRlbXBhbCBdLlNSMkMgOworCSpkaV8wID0gKHVuc2lnbmVkIGNoYXIpWEdJX0NINzAwN1ZDTEtEYXRhW3RlbXBhbF0uU1IyQjsKKwkqZGlfMSA9ICh1bnNpZ25lZCBjaGFyKVhHSV9DSDcwMDdWQ0xLRGF0YVt0ZW1wYWxdLlNSMkM7CiAgICAgfQogICAgIGVsc2UgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMSB8IFZCX1hHSTMwMUIgfCBWQl9YR0kzMDJCIHwgVkJfWEdJMzAxTFYgfCBWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMgKSApCiAgICAgewogICAgICAgICBpZiAoICggISggcFZCSW5mby0+VkJJbmZvICYgU2V0Q1JUMlRvTENEQSApICkgJiYgKCBwVkJJbmZvLT5TZXRGbGFnICYgUHJvZ3JhbW1pbmdDUlQyICkgKQogICAgICAgICB7Ci0gICAgICAgICAgICAqZGlfMCA9ICggVUNIQVIgKVhHSV9WQlZDTEtEYXRhWyB0ZW1wYWwgXS5TUjJCIDsKKwkgICAgKmRpXzAgPSAodW5zaWduZWQgY2hhcilYR0lfVkJWQ0xLRGF0YVt0ZW1wYWxdLlNSMkI7CiAgICAgICAgICAgICAqZGlfMSA9IFhHSV9WQlZDTEtEYXRhWyB0ZW1wYWwgXS5TUjJDIDsKICAgICAgICAgfQogICAgIH0KQEAgLTUzOTUsMTEgKzUxMzksMTQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDJPZmZzZXQoIFVTSE9SVCBNb2RlTm8gLAotCQkJCSAgIFVTSE9SVCBNb2RlSWRJbmRleCAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggLCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRDUlQyT2Zmc2V0KHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCSAgICAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIG9mZnNldCA7Ci0gICAgVUNIQVIgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgb2Zmc2V0IDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXA7CiAKICAgICBpZiAoIHBWQkluZm8tPlZCSW5mbyAmIFNldEluU2xhdmVNb2RlICkKICAgICB7CkBAIC01NDA3LDEyICs1MTU0LDEyIEBACiAgICAgfQogCiAgICAgb2Zmc2V0ID0gWEdJX0dldE9mZnNldCggIE1vZGVObyAsIE1vZGVJZEluZGV4ICwgUmVmcmVzaFJhdGVUYWJsZUluZGV4ICwgSHdEZXZpY2VFeHRlbnNpb24sIHBWQkluZm8gKSA7Ci0gICAgdGVtcCA9ICggVUNIQVIgKSggb2Zmc2V0ICYgMHhGRiApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpKG9mZnNldCAmIDB4RkYpOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDA3ICwgdGVtcCApIDsKLSAgICB0ZW1wID0oIFVDSEFSKSggKCBvZmZzZXQgJiAweEZGMDAgKSA+PiA4ICkgOwotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDA5ICwgdGVtcCApIDsKLSAgICB0ZW1wID0oIFVDSEFSICkoICggKCBvZmZzZXQgPj4gMyApICYgMHhGRiApICsgMSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgwMyAsIHRlbXAgKSA7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSgob2Zmc2V0ICYgMHhGRjAwKSA+PiA4KTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDA5ICwgdGVtcCk7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSgoKG9mZnNldCA+PiAzKSAmIDB4RkYpICsgMSkgOworICAgIFhHSU5ld19TZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgwMywgdGVtcCk7CiB9CiAKIApAQCAtNTQyMiw5ICs1MTY5LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0T2Zmc2V0KFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbixQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRPZmZzZXQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wICwKICAgICAgICAgICAgY29sb3JkZXB0aCAsCiAgICAgICAgICAgIG1vZGVpbmZvICwKICAgICAgICAgICAgaW5kZXggLApAQCAtNTQ3MSw3ICs1MjE4LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldENSVDJGSUZPKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldENSVDJGSUZPKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgwMSAsIDB4M0IgKSA7CQkJLyogdGhyZXNob2xkIGhpZ2ggLGRpc2FibGUgYXV0byB0aHJlc2hvbGQgKi8KICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MDIgLCB+KCAweDNGICkgLCAweDA0ICkgOwkvKiB0aHJlc2hvbGQgbG93IGRlZmF1bHQgMDRoICovCkBAIC01NDg0LDEwICs1MjMxLDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9QcmVTZXRHcm91cDEoVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfUHJlU2V0R3JvdXAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGN4ID0gMCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGN4ID0gMCAsCiAgICAgICAgICAgIENSVDFJbmRleCA9IDAgLAogICAgICAgICAgICByZXNpbmZvID0gMCA7CiAKQEAgLTU1MTgsMTAgKzUyNjcsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEdyb3VwMSggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFVTSE9SVCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldEdyb3VwMSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwKKwkJICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgPSAwICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wID0gMCAsCiAgICAgICAgICAgIHRlbXBheCA9IDAgLAogICAgICAgICAgICB0ZW1wYnggPSAwICwKICAgICAgICAgICAgdGVtcGN4ID0gMCAsCkBAIC01Njk0LDEwICs1NDQ1LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkICBYR0lfU2V0TG9ja1JlZ3MoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCAgWEdJX1NldExvY2tSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgICAgIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCSAgICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgcHVzaDEgLAorICAgIHVuc2lnbmVkIHNob3J0IHB1c2gxICwKICAgICAgICAgICAgcHVzaDIgLAogICAgICAgICAgICB0ZW1wYXggLAogICAgICAgICAgICB0ZW1wYnggPSAwICwKQEAgLTYxNDEsMTAgKzU4OTQsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEdyb3VwMiggVVNIT1JUIE1vZGVObywgVVNIT1JUIE1vZGVJZEluZGV4LCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAotICAgICAgICAgICAgICAgICAgICBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRHcm91cDIodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpICwKKyAgICB1bnNpZ25lZCBzaG9ydCBpICwKICAgICAgICAgICAgaiAsCiAgICAgICAgICAgIHRlbXBheCAsCiAgICAgICAgICAgIHRlbXBieCAsCkBAIC02MTU1LDkgKzU5MDgsOSBAQAogICAgICAgICAgICBtb2RlZmxhZyAsCiAgICAgICAgICAgIHJlc2luZm8gLAogICAgICAgICAgICBjcnQyY3J0YyA7Ci0gICAgVUNIQVIgKlRpbWluZ1BvaW50IDsKKyAgICB1bnNpZ25lZCBjaGFyICpUaW1pbmdQb2ludCA7CiAKLSAgICBVTE9ORyBsb25ndGVtcCAsCisgICAgdW5zaWduZWQgbG9uZyBsb25ndGVtcCAsCiAgICAgICAgICAgdGVtcGVheCAsCiAgICAgICAgICAgdGVtcGVieCAsCiAgICAgICAgICAgdGVtcDIgLApAQCAtNjI2Niw3ICs2MDE5LDcgQEAKICAgICAgICAgdGVtcGF4ID0gKCB0ZW1wYXggJiAweDAwRkYgKSB8ICggKCB0ZW1wYXggJiAweDAwRkYgKSA8PCA4ICkgOwogICAgICAgICBwdXNoMSA9IHRlbXBheCA7CiAgICAgICAgIHRlbXAgPSAoIHRlbXBheCAmIDB4RkYwMCApID4+IDggOwotICAgICAgICB0ZW1wICs9ICggVVNIT1JUIClUaW1pbmdQb2ludFsgMCBdIDsKKwl0ZW1wICs9ICh1bnNpZ25lZCBzaG9ydClUaW1pbmdQb2ludFswXTsKIAogICAgICAgICBpZiAoIHBWQkluZm8tPlZCVHlwZSAmICggVkJfWEdJMzAxQiB8IFZCX1hHSTMwMkIgfCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQyApICkKICAgICAgICAgewpAQCAtNjU0Myw3ICs2Mjk2LDcgQEAKICAgICAgICAgICAgIHRlbXBlYXggKz0gMSA7CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wYXggPSAoIFVTSE9SVCApdGVtcGVheCA7CisJdGVtcGF4ID0gKHVuc2lnbmVkIHNob3J0KXRlbXBlYXg7CiAKIAkvKiAzMDFiICovCiAgICAgICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgKCBWQl9YR0kzMDFCIHwgVkJfWEdJMzAyQiB8IFZCX1hHSTMwMUxWIHwgVkJfWEdJMzAyTFYgfCBWQl9YR0kzMDFDICkgKQpAQCAtNjU1Myw4ICs2MzA2LDggQEAKICAgICAgICAgLyogZW5kIDMwMWIgKi8KIAogICAgICAgICB0ZW1wYnggPSBwdXNoMSA7Ci0gICAgICAgIHRlbXBieCA9KCBVU0hPUlQgKSggKCAoIHRlbXBlYXggJiAweDAwMDBGRjAwICkgJiAweDFGMDAgKSB8ICggdGVtcGJ4ICYgMHgwMEZGICkgKSA7Ci0gICAgICAgIHRlbXBheCA9KCBVU0hPUlQgKSggKCAoIHRlbXBlYXggJiAweDAwMDAwMEZGICkgPDwgOCApIHwgKCB0ZW1wYXggJiAweDAwRkYgKSApIDsKKwl0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpKCgodGVtcGVheCAmIDB4MDAwMEZGMDApICYgMHgxRjAwKSB8ICh0ZW1wYnggJiAweDAwRkYpKTsKKwl0ZW1wYXggPSAodW5zaWduZWQgc2hvcnQpKCgodGVtcGVheCAmIDB4MDAwMDAwRkYpIDw8IDgpIHwgKHRlbXBheCAmIDB4MDBGRikpOwogICAgICAgICB0ZW1wID0gKCB0ZW1wYXggJiAweEZGMDAgKSA+PiA4IDsKICAgICB9CiAgICAgZWxzZQpAQCAtNjYwNyw3ICs2MzYwLDcgQEAKIAogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDRkICwgdGVtcCApIDsKICAgICB0ZW1wPVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDQzICkgOwkJLyogMzAxYiBjaGFuZ2UgKi8KLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHg0MyAsICggVVNIT1JUICkoIHRlbXAgLSAzICkgKSA7CisgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4NDMsICh1bnNpZ25lZCBzaG9ydCkoIHRlbXAgLSAzICkgKSA7CiAKICAgICBpZiAoICEoIHBWQkluZm8tPlRWSW5mbyAmICggU2V0WVBiUHJNb2RlNTI1cCB8IFNldFlQYlByTW9kZTc1MHAgKSApICkKICAgICB7CkBAIC02NjMxLDcgKzYzODQsNyBAQAogCiAgICAgaWYgKCBwVkJJbmZvLT5UVkluZm8gJiBTZXRQQUxNVFYgKQogICAgIHsKLSAgICAgICAgdGVtcGF4ID0gKCBVQ0hBUiApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MDEgKSA7CisJdGVtcGF4ID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UGFydDJQb3J0LCAweDAxKTsKICAgICAgICAgdGVtcGF4LS0gOwogICAgICAgICBYR0lOZXdfU2V0UmVnQU5EKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDAxICwgdGVtcGF4ICkgOwogCkBAIC02NjYwLDkgKzY0MTMsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCAgWEdJX1NldExDRFJlZ3MoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkICBYR0lfU2V0TENEUmVncyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHB1c2gxICwKKyAgICB1bnNpZ25lZCBzaG9ydCBwdXNoMSAsCiAgICAgICAgICAgIHB1c2gyICwKICAgICAgICAgICAgcHVzaGJ4ICwKICAgICAgICAgICAgdGVtcGF4ICwKQEAgLTY2NzYsNyArNjQyOSw3IEBACiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgQ1JUMUluZGV4IDsKIAotICAgIFhHSV9MQ0REZXNTdHJ1Y3QgKkxDREJEZXNQdHIgPSBOVUxMIDsKKyAgICBzdHJ1Y3QgWEdJX0xDRERlc1N0cnVjdCAqTENEQkRlc1B0ciA9IE5VTEwgOwogCiAKICAgICBpZiAoIE1vZGVObyA8PSAweDEzICkKQEAgLTY3NDYsNyArNjQ5OSw3IEBACiAKICAgICAvKiBDdXN0b21pemVkIExDREIgRGVzIG5vIGFkZCAqLwogICAgIHRlbXBieCA9IDUgOwotICAgIExDREJEZXNQdHIgPSAoIFhHSV9MQ0REZXNTdHJ1Y3QgKiApWEdJX0dldExjZFB0ciggdGVtcGJ4ICwgTW9kZU5vICwgTW9kZUlkSW5kZXggLCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8gKSA7CisgICAgTENEQkRlc1B0ciA9IChzdHJ1Y3QgWEdJX0xDRERlc1N0cnVjdCAqKVhHSV9HZXRMY2RQdHIodGVtcGJ4LCBNb2RlTm8sIE1vZGVJZEluZGV4LCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHBWQkluZm8pOwogICAgIHRlbXBhaCA9IHBWQkluZm8tPkxDRFJlc0luZm8gOwogICAgIHRlbXBhaCAmPSBQYW5lbFJlc0luZm8gOwogCkBAIC02OTE0LDEzICs2NjY3LDE0IEBACiAvKiBPdXRwdXQgOiBkaSAtPiBUYXA0IFJlZy4gU2V0dGluZyBQb2ludGVyICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCogWEdJX0dldFRhcDRQdHIoVVNIT1JUIHRlbXBjeCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0ICpYR0lfR2V0VGFwNFB0cih1bnNpZ25lZCBzaG9ydCB0ZW1wY3gsCisJCQkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKICAgICAgICAgICAgaSA7CiAKLSAgICBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlRhcDRUaW1pbmdQdHIgOworICAgIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlRhcDRUaW1pbmdQdHIgOwogCiAgICAgaWYgKCB0ZW1wY3ggPT0gMCApCiAgICAgewpAQCAtNjk3NCwxMiArNjcyOCwxMiBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0VGFwNFJlZ3MoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0VGFwNFJlZ3Moc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpICwKKyAgICB1bnNpZ25lZCBzaG9ydCBpICwKICAgICAgICAgICAgaiA7CiAKLSAgICBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlRhcDRUaW1pbmdQdHIgOworICAgIHN0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgKlRhcDRUaW1pbmdQdHIgOwogCiAgICAgaWYgKCAhKCBwVkJJbmZvLT5WQlR5cGUgJiBWQl9YR0kzMDFDICkgKQogICAgICAgICByZXR1cm4gOwpAQCAtNzAxMiwxMSArNjc2NiwxMSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0R3JvdXAzKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldEdyb3VwMyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGk7Ci0gICAgVUNIQVIgKnRlbXBkaTsKLSAgICBVU0hPUlQgIG1vZGVmbGFnOworICAgIHVuc2lnbmVkIHNob3J0IGk7CisgICAgdW5zaWduZWQgY2hhciAqdGVtcGRpOworICAgIHVuc2lnbmVkIHNob3J0ICBtb2RlZmxhZzsKIAogICAgIGlmKE1vZGVObzw9MHgxMykKICAgICB7CkBAIC03MDk5LDE2ICs2ODUzLDE2IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRHcm91cDQoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldEdyb3VwNCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4ICwKICAgICAgICAgICAgdGVtcGN4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKICAgICAgICAgICAgbW9kZWZsYWcgLAogICAgICAgICAgICB0ZW1wICwKICAgICAgICAgICAgdGVtcDIgOwogCi0gICAgVUxPTkcgdGVtcGVieCAsCisgICAgdW5zaWduZWQgbG9uZyB0ZW1wZWJ4ICwKICAgICAgICAgICB0ZW1wZWF4ICwKICAgICAgICAgICB0ZW1wbG9uZyA7CiAKQEAgLTcyMzAsMTIgKzY5ODQsMTIgQEAKICAgICB9CiAKIAotICAgIHRlbXAgPSAoIFVTSE9SVCApKCB0ZW1wZWJ4ICYgMHgwMDAwMDBGRiApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIHNob3J0KSh0ZW1wZWJ4ICYgMHgwMDAwMDBGRik7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MUIgLCB0ZW1wICkgOwogCi0gICAgdGVtcCA9ICggVVNIT1JUICkoICggdGVtcGVieCAmIDB4MDAwMEZGMDAgKSA+PiA4ICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgc2hvcnQpKCh0ZW1wZWJ4ICYgMHgwMDAwRkYwMCkgPj4gOCk7CiAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQ0UG9ydCAsIDB4MUEgLCB0ZW1wICkgOwotICAgIHRlbXBieCA9ICggVVNIT1JUICkoIHRlbXBlYnggPj4gMTYgKSA7CisgICAgdGVtcGJ4ID0gKHVuc2lnbmVkIHNob3J0KSh0ZW1wZWJ4ID4+IDE2KTsKICAgICB0ZW1wID0gdGVtcGJ4ICYgMHgwMEZGIDsKICAgICB0ZW1wID0gdGVtcCA8PCA0IDsKICAgICB0ZW1wIHw9ICggKCB0ZW1wY3ggJiAweEZGMDAgKSA+PiA4ICkgOwpAQCAtNzM1MCw5ICs3MTA0LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEdyb3VwNSggVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0R3JvdXA1KHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgUGluZGV4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCBQaW5kZXggLAogICAgICAgICAgICBQZGF0YSA7CiAKICAgICBQaW5kZXggPSBwVkJJbmZvLT5QYXJ0NVBvcnQgOwpAQCAtNzM3NSw5ICs3MTI5LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkKiBYR0lfR2V0TGNkUHRyKCBVU0hPUlQgQlggLCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCAqWEdJX0dldExjZFB0cih1bnNpZ25lZCBzaG9ydCBCWCwKKwkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkgICAgdW5zaWduZWQgc2hvcnQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LAorCQkgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpICwKKyAgICB1bnNpZ25lZCBzaG9ydCBpICwKICAgICAgICAgICAgdGVtcGR4ICwKICAgICAgICAgICAgdGVtcGN4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKQEAgLTczODUsNyArNzE0Myw3IEBACiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgdGFibGUgOwogCi0gICAgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0ICp0ZW1wZGkgPSAwIDsKKyAgICBzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0ICp0ZW1wZGkgPSAwIDsKIAogCiAgICAgdGVtcGJ4ID0gQlg7CkBAIC03ODc3LDEwICs3NjM1LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkKiBYR0lfR2V0VFZQdHIgKFVTSE9SVCBCWCxVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkICpYR0lfR2V0VFZQdHIodW5zaWduZWQgc2hvcnQgQlgsIHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJICAgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCSAgIHVuc2lnbmVkIHNob3J0IFJlZnJlc2hSYXRlVGFibGVJbmRleCwKKwkJICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpICwgdGVtcGR4ICwgdGVtcGJ4ICwgdGVtcGFsICwgbW9kZWZsYWcgLCB0YWJsZSA7Ci0gICAgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgKnRlbXBkaSA9IDAgOworICAgIHVuc2lnbmVkIHNob3J0IGkgLCB0ZW1wZHggLCB0ZW1wYnggLCB0ZW1wYWwgLCBtb2RlZmxhZyAsIHRhYmxlIDsKKyAgICBzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgKnRlbXBkaSA9IDAgOwogCiAgICAgdGVtcGJ4ID0gQlggOwogCkBAIC03OTU1LDUzICs3NzE2LDkgQEAKIAogICAgIGlmICggdGFibGUgPT0gMHgwMCApIC8qIDA3LzA1LzIyICovCiAgICAgewotI2lmZGVmIFdJTjIwMDAKLSAgICAgICAgaWYgKCBwVkJJbmZvLT5JRl9ERUZfQ0g3MDA3ID09IDEgKQotICAgICAgICB7Ci0gICAgICAgICAgc3dpdGNoKCB0ZW1wZGlbIGkgXS5EQVRBUFRSICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVkNSVDFVTlRTQ19IWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxT05UU0NfSFsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWQ1JUMVVQQUxfSFsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWQ1JUMU9QQUxfSFsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogICAgIGVsc2UgaWYgKCB0YWJsZSA9PSAweDAxICkKICAgICB7Ci0jaWZkZWYgV0lOMjAwMAotICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICBzd2l0Y2goIHRlbXBkaVsgaSBdLkRBVEFQVFIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWQ1JUMVVOVFNDX1ZbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVkNSVDFPTlRTQ19WWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxVVBBTF9WWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZDUlQxT1BBTF9WWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgZWxzZSBpZiAoIHRhYmxlID09IDB4MDQgKQogICAgIHsKQEAgLTgwNzUsNDkgKzc3OTIsNiBAQAogICAgIH0KICAgICBlbHNlIGlmKCB0YWJsZSA9PSAweDA2ICkKICAgICB7Ci0jaWZkZWYgV0lOMjAwMAotICAgICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9DSDcwMDcgPT0gMSApCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBWaWRlb0RlYnVnUHJpbnQoKDAsICJYR0lfR2V0VFZQdHI6IHBWQkluZm8tPklGX0RFRl9DSDcwMDc9PTFcbiIpKTsgKi8KLSAgICAgICAgICBzd2l0Y2goIHRlbXBkaVsgaSBdLkRBVEFQVFIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJkNINzAwN1RWUmVnX1VOVFNDWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZSZWdfT05UU0NbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICZDSDcwMDdUVlJlZ19VUEFMWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiAmQ0g3MDA3VFZSZWdfT1BBTFsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCggdGVtcGRpWyBpIF0uREFUQVBUUiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJlhHSV9DSFRWUmVnVU5UU0NbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICByZXR1cm4gJlhHSV9DSFRWUmVnT05UU0NbIHRlbXBhbCBdIDsKLSAgICAgICAgICAgICAgICBicmVhayA7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gJlhHSV9DSFRWUmVnVVBBTFsgdGVtcGFsIF0gOwotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHJldHVybiAmWEdJX0NIVFZSZWdPUEFMWyB0ZW1wYWwgXSA7Ci0gICAgICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrIDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogICAgIHJldHVybiggMCApIDsKIH0KQEAgLTgxMjYsMTggKzc4MDAsMTggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gOiBYR0lfQmFja2xpZ2h0QnlEcnYgKi8KIC8qIElucHV0IDogKi8KLS8qIE91dHB1dCA6IFRSVUUgLT4gU2tpcCBiYWNrbGlnaHQgY29udHJvbCAqLworLyogT3V0cHV0IDogMSAtPiBTa2lwIGJhY2tsaWdodCBjb250cm9sICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0JhY2tsaWdodEJ5RHJ2KCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9CYWNrbGlnaHRCeURydihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgdGVtcGFoIDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBhaCA7CiAKLSAgICB0ZW1wYWggPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4M0EgKSA7Ci0gICAgaWYgKCB0ZW1wYWggJiBCYWNrbGlnaHRDb250cm9sQml0ICkKLSAgICAgICAgcmV0dXJuIFRSVUUgOworICAgIHRlbXBhaCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzZDQsIDB4M0EpIDsKKyAgICBpZiAodGVtcGFoICYgQmFja2xpZ2h0Q29udHJvbEJpdCkKKwkgICAgcmV0dXJuIDE7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRkFMU0UgOworCSAgICByZXR1cm4gMDsKIH0KIAogCkBAIC04MTQ4LDcgKzc4MjIsNyBAQAogLyogRGVzY3JpcHRpb24gOiBUdXJuIG9mZiBWREQgJiBCYWNrbGlnaHQgOiBGaXJlIGRpc2FibGUgcHJvY2VkdXJlICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCi12b2lkIFhHSV9GaXJlUFdERGlzYWJsZSggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfRmlyZVBXRERpc2FibGUoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyNiAsIDB4MDAgLCAweEZDICkgOwogfQpAQCAtODE2MCw3ICs3ODM0LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IFR1cm4gb24gVkREICYgQmFja2xpZ2h0IDogRmlyZSBlbmFibGUgcHJvY2VkdXJlICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0ZpcmVQV0RFbmFibGUoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfRmlyZVBXREVuYWJsZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDI2ICwgMHgwMyAsIDB4RkMgKSA7CiB9CkBAIC04MTcyLDcgKzc4NDYsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRW5hYmxlR2F0aW5nQ1JUKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfRW5hYmxlR2F0aW5nQ1JUKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2Q0ICwgMHg2MyAsIDB4QkYgLCAweDQwICkgOwogfQpAQCAtODE4NCw3ICs3ODU4LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0Rpc2FibGVHYXRpbmdDUlQoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9EaXNhYmxlR2F0aW5nQ1JUKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzZDQgLCAweDYzICwgMHhCRiAsIDB4MDAgKSA7CkBAIC04MjAxLDkgKzc4NzUsOSBAQAogLyogOiBibCA6IDMgOyBUMyA6IHRoZSBkdXJhdGlvbiBiZXR3ZWVuIENQTCBvZmYgYW5kIHNpZ25hbCBvZmYgKi8KIC8qIDogYmwgOiA0IDsgVDQgOiB0aGUgZHVyYXRpb24gc2lnbmFsIG9mZiBhbmQgVmRkIG9mZiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRQYW5lbERlbGF5KFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0UGFuZWxEZWxheSh1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgaW5kZXggOworICAgIHVuc2lnbmVkIHNob3J0IGluZGV4IDsKIAogICAgIGluZGV4ID0gWEdJX0dldExDRENhcFB0cihwVkJJbmZvKSA7CiAKQEAgLTgyMzEsNyArNzkwNSw3IEBACiAvKiA9IDEwMTFiID0gMEJoIDsgQmFja2xpZ2h0IG9mZiwgUG93ZXIgb24gKi8KIC8qID0gMTExMWIgPSAwRmggOyBCYWNrbGlnaHQgb2ZmLCBQb3dlciBvZmYgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0UGFuZWxQb3dlcihVU0hPUlQgdGVtcGFoLFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0UGFuZWxQb3dlcih1bnNpZ25lZCBzaG9ydCB0ZW1wYWgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgKCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQyApICkKICAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0NFBvcnQgLCAweDI2ICwgdGVtcGJsICwgdGVtcGFoICkgOwpAQCAtODIzOSwxMCArNzkxMywxMCBAQAogICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDExICwgdGVtcGJsICwgdGVtcGFoICkgOwogfQogCi1VQ0hBUiBYRzIxR1BJT0RhdGFUcmFuc2ZlcihVQ0hBUiB1akRhdGUpCit1bnNpZ25lZCBjaGFyIFhHMjFHUElPRGF0YVRyYW5zZmVyKHVuc2lnbmVkIGNoYXIgdWpEYXRlKQogewotICAgIFVDSEFSICB1alJldCA9IDA7Ci0gICAgVUNIQVIgIGkgPSAwOworICAgIHVuc2lnbmVkIGNoYXIgIHVqUmV0ID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyICBpID0gMDsKIAogICAgIGZvciAoaT0wOyBpPDg7IGkrKykKIAl7CkBAIC04MjYwLDkgKzc5MzQsOSBAQAogLyogICAgICBibFsxXSA6IExWRFMgYmFja2xpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgYmxbMF0gOiBMVkRTIFZERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotVUNIQVIgWEdJX1hHMjFHZXRQU0NWYWx1ZShQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJX1hHMjFHZXRQU0NWYWx1ZShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgQ1I0QSx0ZW1wOworICAgIHVuc2lnbmVkIGNoYXIgQ1I0QSwgdGVtcDsKIAogICAgIENSNEEgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NEEgKSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORCggcFZCSW5mby0+UDNkNCAsIDB4NEEgLCB+MHgyMyApIDsgLyogZW5hYmxlIEdQSU8gd3JpdGUgKi8KQEAgLTgyODEsOSArNzk1NSw5IEBACiAvKiAgICAgIGJsWzFdIDogTFZEUyBiYWNrbGlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICBibFswXSA6IExWRFMgVkREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1VQ0hBUiBYR0lfWEcyN0dldFBTQ1ZhbHVlKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lfWEcyN0dldFBTQ1ZhbHVlKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUjRBLENSQjQsdGVtcDsKKyAgICB1bnNpZ25lZCBjaGFyIENSNEEsIENSQjQsIHRlbXA7CiAKICAgICBDUjRBID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgLCAweDRBICkgOwogICAgIFhHSU5ld19TZXRSZWdBTkQoIHBWQkluZm8tPlAzZDQgLCAweDRBICwgfjB4MEMgKSA7IC8qIGVuYWJsZSBHUElPIHdyaXRlICovCkBAIC04MzA2LDkgKzc5ODAsOSBAQAogLyogICAgICAgICAgMDAwMDEwYiA6IGNsZWFyIGJpdCAxLCB0byBzZXQgYml0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgIDAwMDAwMWIgOiBjbGVhciBiaXQgMCwgdG8gc2V0IGJpdDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBYR0lfWEcyMUJMU2lnbmFsVkREKFVTSE9SVCB0ZW1wYmgsVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9YRzIxQkxTaWduYWxWREQodW5zaWduZWQgc2hvcnQgdGVtcGJoLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiBDUjRBLHRlbXA7CisgICAgdW5zaWduZWQgY2hhciBDUjRBLCB0ZW1wOwogCiAgICAgQ1I0QSA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHg0QSApIDsKICAgICB0ZW1wYmggJj0gMHgyMzsKQEAgLTgzMzEsMTAgKzgwMDUsMTAgQEAKICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4NDggLCB0ZW1wICkgOwogfQogCi12b2lkIFhHSV9YRzI3QkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1hHMjdCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVDSEFSIENSNEEsdGVtcDsKLSAgICBVU0hPUlQgdGVtcGJoMCx0ZW1wYmwwOworICAgIHVuc2lnbmVkIGNoYXIgQ1I0QSwgdGVtcDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYmgwLCB0ZW1wYmwwOwogCiAgICAgdGVtcGJoMCA9IHRlbXBiaDsKICAgICB0ZW1wYmwwID0gdGVtcGJsOwpAQCAtODM2MiwxNSArODAzNiwxMyBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgaW5kZXggOwogCiAgICAgaW5kZXggPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAsIDB4MzYgKSA7Ci0gICAgaWYgKGluZGV4PHNpemVvZihYR0kyMV9MQ0RDYXBMaXN0KS9zaXplb2YoWEdJMjFfTFZEU0NhcFN0cnVjdCkpCi0gICAgewotICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KKyAgICBpZiAoaW5kZXggPCBzaXplb2YoWEdJMjFfTENEQ2FwTGlzdCkvc2l6ZW9mKHN0cnVjdCBYR0kyMV9MVkRTQ2FwU3RydWN0KSkKKwkgICAgcmV0dXJuIGluZGV4OwogICAgIHJldHVybiAwOwogfQogCkBAIC04Mzg0LDkgKzgwNTYsOSBAQAogLyogOiBibCA6IDMgOyBUMyA6IHRoZSBkdXJhdGlvbiBiZXR3ZWVuIENQTCBvZmYgYW5kIHNpZ25hbCBvZmYgKi8KIC8qIDogYmwgOiA0IDsgVDQgOiB0aGUgZHVyYXRpb24gc2lnbmFsIG9mZiBhbmQgVmRkIG9mZiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9YRzIxU2V0UGFuZWxEZWxheShVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1hHMjFTZXRQYW5lbERlbGF5KHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgaW5kZXggOwogCiAgICAgaW5kZXggPSBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoIHBWQkluZm8gKTsKICAgICBpZiAoIHRlbXBibCA9PSAxICkKQEAgLTg0MDIsOSArODA3NCwxMSBAQAogICAgICAgICBYR0lOZXdfTENEX1dhaXRfVGltZSggcFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFsgaW5kZXggXS5QU0NfUzQsIHBWQkluZm8gKSA7CiB9CiAKLUJPT0xFQU4gWEdJX1hHMjFDaGVja0xWRFNNb2RlKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9YRzIxQ2hlY2tMVkRTTW9kZSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LAorCQkJCSAgICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHhyZXMgLAorICAgIHVuc2lnbmVkIHNob3J0IHhyZXMgLAogICAgICAgICAgICB5cmVzICwKICAgICAgICAgICAgY29sb3JkZXB0aCAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKQEAgLTg0NDUsMTAgKzgxMTksMTAgQEAKIAogICAgIGx2ZHN0YWJsZWluZGV4ID0gWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KCBwVkJJbmZvICk7CiAgICAgaWYgKCB4cmVzID4gKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNIREUpICkKLSAgICAgIHJldHVybiBGQUxTRTsKKwkgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIHlyZXMgPiAocFZCSW5mby0+WEcyMV9MVkRTQ2FwTGlzdFtsdmRzdGFibGVpbmRleF0uTFZEU1ZERSkgKQotICAgICAgcmV0dXJuIEZBTFNFOworCSAgICByZXR1cm4gMDsKIAogICAgIGlmICggTW9kZU5vID4gMHgxMyApCiAgICAgewpAQCAtODQ1NiwxOCArODEzMCwxNyBAQAogICAgICAgICAgICAoIHlyZXMgIT0gKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNWREUpKSApCiAgICAgICB7CiAgICAgICAgICAgY29sb3JkZXB0aCA9IFhHSV9HZXRDb2xvckRlcHRoKCBNb2RlTm8gLCBNb2RlSWRJbmRleCwgcFZCSW5mbyApIDsKLSAgICAgICAgICBpZiAoIGNvbG9yZGVwdGggPiAyICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgICAgfQorCSAgaWYgKGNvbG9yZGVwdGggPiAyKQorCQkgIHJldHVybiAwOworCiAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBUUlVFOworICAgIHJldHVybiAxOwogfQogCi12b2lkIFhHSV9TZXRYRzIxRlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0WEcyMUZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgdGVtcDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXA7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlAzZDQgICwgMHgzNyApIDsgIC8qIERbMF0gMTogMThiaXQgKi8KICAgICB0ZW1wID0gKCB0ZW1wICYgMSApIDw8IDY7CkBAIC04NDc2LDkgKzgxNDksOSBAQAogCiB9CiAKLXZvaWQgWEdJX1NldFhHMjdGUEJpdHMoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRYRzI3RlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wOworICAgIHVuc2lnbmVkIGNoYXIgdGVtcDsKIAogICAgIHRlbXAgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNkNCAgLCAweDM3ICkgOyAgLyogRFsxOjBdIDAxOiAxOGJpdCwgMDA6IGR1YWwgMTIsIDEwOiBzaW5nbGUgMjQgKi8KICAgICB0ZW1wID0gKCB0ZW1wICYgMyApIDw8IDY7CkBAIC04NDg3LDI3ICs4MTYwLDI4IEBACiAKIH0KIAotdm9pZCBYR0lfU2V0WEcyMUxWRFNQYXJhKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRYRzIxTFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgdGVtcCxNaXNjZGF0YTsKLSAgICBVU0hPUlQgeHJlcyAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wLCBNaXNjZGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCB4cmVzICwKICAgICAgICAgICAgeXJlcyAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgcmVzaW5kZXggLAogICAgICAgICAgICBsdmRzdGFibGVpbmRleCA7Ci0gICAgVVNIT1JUIExWRFNIVCxMVkRTSEJTLExWRFNIUlMsTFZEU0hSRSxMVkRTSEJFOwotICAgIFVTSE9SVCBMVkRTVlQsTFZEU1ZCUyxMVkRTVlJTLExWRFNWUkUsTFZEU1ZCRTsKLSAgICBVU0hPUlQgdmFsdWU7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU0hULExWRFNIQlMsTFZEU0hSUyxMVkRTSFJFLExWRFNIQkU7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU1ZULExWRFNWQlMsTFZEU1ZSUyxMVkRTVlJFLExWRFNWQkU7CisgICAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAKICAgICBsdmRzdGFibGVpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleCggcFZCSW5mbyApOwogCi0gICAgdGVtcCA9IChVQ0hBUikgKCAoIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIChMQ0RQb2xhcml0eSA8PCA4ICkgKSA+PiA4ICk7CisgICAgdGVtcCA9ICh1bnNpZ25lZCBjaGFyKSAoKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIChMQ0RQb2xhcml0eSA8PCA4KSkgPj4gOCk7CiAgICAgdGVtcCAmPSBMQ0RQb2xhcml0eTsKLSAgICBNaXNjZGF0YSA9KFVDSEFSKSBYR0lOZXdfR2V0UmVnMihwVkJJbmZvLT5QM2NjKSA7CisgICAgTWlzY2RhdGEgPSAodW5zaWduZWQgY2hhcikgWEdJTmV3X0dldFJlZzIocFZCSW5mby0+UDNjYykgOwogCiAgICAgWEdJTmV3X1NldFJlZzMoIHBWQkluZm8tPlAzYzIgLCAoTWlzY2RhdGEgJiAweDNGKSB8IHRlbXAgKSA7CiAKLSAgICB0ZW1wID0gKFVDSEFSKSAoIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIExDRFBvbGFyaXR5ICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcikgKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIExDRFBvbGFyaXR5KSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2M0ICwgMHgzNSAsIH4weDgwICwgdGVtcCYweDgwICkgOyAgICAgIC8qIFNSMzVbN10gRlAgVlN5bmMgcG9sYXJpdHkgKi8KICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDMwICwgfjB4MjAgLCAodGVtcCYweDQwKT4+MSApIDsgICAvKiBTUjMwWzVdIEZQIEhTeW5jIHBvbGFyaXR5ICovCiAKQEAgLTg1NjMsNyArODIzNyw3IEBACiAKICAgICBMVkRTVkJFID0gTFZEU1ZCUyArIExWRFNWVCAtIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNWREUgOwogCi0gICAgdGVtcCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSkgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSAsIHRlbXAgJiAweDdmICkgOwkJLyogVW5sb2NrIENSVEMgKi8KIAogICAgIGlmICghKCBtb2RlZmxhZyAmIENoYXJ4OERvdCApKQpAQCAtODY3MCwyNiArODM0NCwyNyBAQAogfQogCiAvKiBubyBzaGFkb3cgY2FzZSAqLwotdm9pZCBYR0lfU2V0WEcyN0xWRFNQYXJhKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRYRzI3TFZEU1BhcmEodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVUNIQVIgdGVtcCxNaXNjZGF0YTsKLSAgICBVU0hPUlQgeHJlcyAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wLCBNaXNjZGF0YTsKKyAgICB1bnNpZ25lZCBzaG9ydCB4cmVzICwKICAgICAgICAgICAgeXJlcyAsCiAgICAgICAgICAgIG1vZGVmbGFnICwKICAgICAgICAgICAgcmVzaW5kZXggLAogICAgICAgICAgICBsdmRzdGFibGVpbmRleCA7Ci0gICAgVVNIT1JUIExWRFNIVCxMVkRTSEJTLExWRFNIUlMsTFZEU0hSRSxMVkRTSEJFOwotICAgIFVTSE9SVCBMVkRTVlQsTFZEU1ZCUyxMVkRTVlJTLExWRFNWUkUsTFZEU1ZCRTsKLSAgICBVU0hPUlQgdmFsdWU7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU0hULExWRFNIQlMsTFZEU0hSUyxMVkRTSFJFLExWRFNIQkU7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU1ZULExWRFNWQlMsTFZEU1ZSUyxMVkRTVlJFLExWRFNWQkU7CisgICAgdW5zaWduZWQgc2hvcnQgdmFsdWU7CiAKICAgICBsdmRzdGFibGVpbmRleCA9IFhHSV9HZXRMVkRTT0VNVGFibGVJbmRleCggcFZCSW5mbyApOwotICAgIHRlbXAgPSAoVUNIQVIpICggKCBwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTX0NhcGFiaWxpdHkgJiAoTENEUG9sYXJpdHkgPDwgOCApICkgPj4gOCApOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcikgKChwVkJJbmZvLT5YRzIxX0xWRFNDYXBMaXN0W2x2ZHN0YWJsZWluZGV4XS5MVkRTX0NhcGFiaWxpdHkgJiAoTENEUG9sYXJpdHkgPDwgOCkpID4+IDgpOwogICAgIHRlbXAgJj0gTENEUG9sYXJpdHk7Ci0gICAgTWlzY2RhdGEgPShVQ0hBUikgWEdJTmV3X0dldFJlZzIocFZCSW5mby0+UDNjYykgOworICAgIE1pc2NkYXRhID0gKHVuc2lnbmVkIGNoYXIpIFhHSU5ld19HZXRSZWcyKHBWQkluZm8tPlAzY2MpOwogCiAgICAgWEdJTmV3X1NldFJlZzMoIHBWQkluZm8tPlAzYzIgLCAoTWlzY2RhdGEgJiAweDNGKSB8IHRlbXAgKSA7CiAKLSAgICB0ZW1wID0gKFVDSEFSKSAoIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIExDRFBvbGFyaXR5ICkgOworICAgIHRlbXAgPSAodW5zaWduZWQgY2hhcikgKHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNfQ2FwYWJpbGl0eSAmIExDRFBvbGFyaXR5KSA7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2M0ICwgMHgzNSAsIH4weDgwICwgdGVtcCYweDgwICkgOyAgICAgIC8qIFNSMzVbN10gRlAgVlN5bmMgcG9sYXJpdHkgKi8KICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlAzYzQgLCAweDMwICwgfjB4MjAgLCAodGVtcCYweDQwKT4+MSApIDsgICAvKiBTUjMwWzVdIEZQIEhTeW5jIHBvbGFyaXR5ICovCiAKQEAgLTg3NDUsNyArODQyMCw3IEBACiAKICAgICBMVkRTVkJFID0gTFZEU1ZCUyArIExWRFNWVCAtIHBWQkluZm8tPlhHMjFfTFZEU0NhcExpc3RbbHZkc3RhYmxlaW5kZXhdLkxWRFNWREUgOwogCi0gICAgdGVtcCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSApIDsKKyAgICB0ZW1wID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UDNkNCwgMHgxMSkgOwogICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgxMSAsIHRlbXAgJiAweDdmICkgOwkJLyogVW5sb2NrIENSVEMgKi8KIAogICAgIGlmICghKCBtb2RlZmxhZyAmIENoYXJ4OERvdCApKQpAQCAtODg1MywyMSArODUyOCwyMSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBGdW5jdGlvbiA6IFhHSV9Jc0xDRE9OICovCiAvKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiBGQUxTRSA6IFNraXAgUFNDIENvbnRyb2wgKi8KLS8qIFRSVUU6IERpc2FibGUgUFNDICovCisvKiBPdXRwdXQgOiAwIDogU2tpcCBQU0MgQ29udHJvbCAqLworLyogMTogRGlzYWJsZSBQU0MgKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotQk9PTEVBTiBYR0lfSXNMQ0RPTihQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3Vuc2lnbmVkIGNoYXIgWEdJX0lzTENET04oc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYXggOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBheCA7CiAKICAgICB0ZW1wYXggPSBwVkJJbmZvLT5WQkluZm8gOwogICAgIGlmICggdGVtcGF4ICYgU2V0Q1JUMlRvRHVhbEVkZ2UgKQotICAgICAgICByZXR1cm4gRkFMU0UgOworCSAgICByZXR1cm4gMDsKICAgICBlbHNlIGlmICggdGVtcGF4ICYgKCBEaXNhYmxlQ1JUMkRpc3BsYXkgfCBTd2l0Y2hUb0NSVDIgfCBTZXRTaW11U2Nhbk1vZGUgKSApCi0gICAgICAgIHJldHVybiBUUlVFIDsKKwkgICAgcmV0dXJuIDE7CiAKLSAgICByZXR1cm4gRkFMU0UgOworICAgIHJldHVybiAwOwogfQogCiAKQEAgLTg4NzcsOSArODU1Miw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9FbmFibGVQV0QoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9FbmFibGVQV0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpbmRleCAsCisgICAgdW5zaWduZWQgc2hvcnQgaW5kZXggLAogICAgICAgICAgICB0ZW1wIDsKIAogICAgIGluZGV4ID0gWEdJX0dldExDRENhcFB0cihwVkJJbmZvKSA7CkBAIC04ODk5LDcgKzg1NzQsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfRGlzYWJsZVBXRCggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfRGlzYWJsZVBXRChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZ0FORCggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgyNyAsIDB4N0YgKSA7CS8qIGRpc2FibGUgUFdEICovCiB9CkBAIC04OTA4LDMwICs4NTgzLDMwIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEZ1bmN0aW9uIDogWEdJX0Rpc2FibGVDaElTTENEICovCiAvKiBJbnB1dCA6ICovCi0vKiBPdXRwdXQgOiBGQUxTRSAtPiBOb3QgTENEIE1vZGUgKi8KKy8qIE91dHB1dCA6IDAgLT4gTm90IExDRCBNb2RlICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0Rpc2FibGVDaElTTENEKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgY2hhciBYR0lfRGlzYWJsZUNoSVNMQ0Qoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCAsCiAgICAgICAgICAgIHRlbXBhaCA7CiAKICAgICB0ZW1wYnggPSBwVkJJbmZvLT5TZXRGbGFnICYgKCBEaXNhYmxlQ2hBIHwgRGlzYWJsZUNoQiApIDsKLSAgICB0ZW1wYWggPSB+KCAoIFVTSE9SVCApWEdJTmV3X0dldFJlZzEoIHBWQkluZm8tPlBhcnQxUG9ydCAgLCAweDJFICkgKSA7CisgICAgdGVtcGFoID0gfigodW5zaWduZWQgc2hvcnQpIFhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgyRSkpOwogCiAgICAgaWYgKCB0ZW1wYnggJiAoIEVuYWJsZUNoQSB8IERpc2FibGVDaEEgKSApCiAgICAgewogICAgICAgICBpZiAoICEoIHRlbXBhaCAmIDB4MDggKSApCQkvKiBDaGsgTENEQSBNb2RlICovCi0gICAgICAgICAgICByZXR1cm4gRkFMU0UgOworCQlyZXR1cm4gMCA7CiAgICAgfQogCiAgICAgaWYgKCAhKCB0ZW1wYnggJiAoIEVuYWJsZUNoQiB8IERpc2FibGVDaEIgKSApICkKLSAgICAgICAgcmV0dXJuIEZBTFNFIDsKKwkgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIHRlbXBhaCAmIDB4MDEgKSAgICAgICAvKiBDaGsgTENEQiBNb2RlICovCi0gICAgICAgIHJldHVybiBUUlVFIDsKKwkgICAgcmV0dXJuIDE7CiAKLSAgICByZXR1cm4gRkFMU0UgOworICAgIHJldHVybiAwOwogfQogCiAKQEAgLTg5NDEsMjggKzg2MTYsMjggQEAKIC8qIE91dHB1dCA6IDAgLT4gTm90IExDRCBtb2RlICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLUJPT0xFQU4gWEdJX0VuYWJsZUNoSVNMQ0QoUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBjaGFyIFhHSV9FbmFibGVDaElTTENEKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggLAogICAgICAgICAgICB0ZW1wYWggOwogCiAKICAgICB0ZW1wYnggPSBwVkJJbmZvLT5TZXRGbGFnICYgKCBFbmFibGVDaEEgfCBFbmFibGVDaEIgKSA7Ci0gICAgdGVtcGFoID0gfiggKCBVU0hPUlQgKVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDJFICkgKSA7CisgICAgdGVtcGFoID0gfiggKHVuc2lnbmVkIHNob3J0KVhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDJFICkgKSA7CiAKICAgICBpZiAoIHRlbXBieCAmICggRW5hYmxlQ2hBIHwgRGlzYWJsZUNoQSApICkKICAgICB7CiAgICAgICAgIGlmICggISggdGVtcGFoICYgMHgwOCApICkJCS8qIENoayBMQ0RBIE1vZGUgKi8KLSAgICAgICAgICAgIHJldHVybiBGQUxTRSA7CisJCXJldHVybiAwOwogICAgIH0KIAogICAgIGlmICggISggdGVtcGJ4ICYgKCBFbmFibGVDaEIgfCBEaXNhYmxlQ2hCICkgKSApCi0gICAgICAgIHJldHVybiBGQUxTRSA7CisJICAgIHJldHVybiAwOwogCiAgICAgaWYgKCB0ZW1wYWggJiAweDAxICkgICAgICAgLyogQ2hrIExDREIgTW9kZSAqLwotICAgICAgICByZXR1cm4gVFJVRSA7CisJICAgIHJldHVybiAxOwogCi0gICAgcmV0dXJuIEZBTFNFIDsKKyAgICByZXR1cm4gMDsKIH0KIAogCkBAIC04OTcyLDkgKzg2NDcsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRMQ0RDYXBQdHIoICBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0TENEQ2FwUHRyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVQ0hBUiB0ZW1wYWwgLAorICAgIHVuc2lnbmVkIGNoYXIgdGVtcGFsICwKICAgICAgICAgICB0ZW1wYWggLAogICAgICAgICAgIHRlbXBibCAsCiAgICAgICAgICAgaSA7CkBAIC05MDExLDkgKzg2ODYsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotVVNIT1JUIFhHSV9HZXRMQ0RDYXBQdHIxKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0TENEQ2FwUHRyMShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBhaCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGFoICwKICAgICAgICAgICAgdGVtcGFsICwKICAgICAgICAgICAgdGVtcGJsICwKICAgICAgICAgICAgaSA7CkBAIC05MDU2LDkgKzg3MzEsMTAgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldExDRFN5bmMoIFVTSE9SVCogSFN5bmNXaWR0aCAsIFVTSE9SVCogVlN5bmNXaWR0aCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfR2V0TENEU3luYyh1bnNpZ25lZCBzaG9ydCAqSFN5bmNXaWR0aCAsIHVuc2lnbmVkIHNob3J0ICpWU3luY1dpZHRoLAorCQkgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBJbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgSW5kZXggOwogCiAgICAgSW5kZXggPSBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pIDsKICAgICAqSFN5bmNXaWR0aCA9IHBWQkluZm8tPkxDRENhcExpc3RbIEluZGV4IF0uTENEX0hTeW5jV2lkdGggOwpAQCAtOTA3NSw5ICs4NzUxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0VuYWJsZUJyaWRnZSggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiAsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfRW5hYmxlQnJpZGdlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBibCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJsICwKICAgICAgICAgICAgdGVtcGFoIDsKIAogICAgIGlmICggcFZCSW5mby0+U2V0RmxhZyA9PSBXaW45eERPU01vZGUgKQpAQCAtOTE0Niw3ICs4ODIyLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCAoIHBWQkluZm8tPlNldEZsYWcgJiBFbmFibGVDaEIgKSB8fCAoIHBWQkluZm8tPlZCSW5mbyAmICggU2V0Q1JUMlRvTENEIHwgU2V0Q1JUMlRvVFYgfCBTZXRDUlQyVG9SQU1EQUMgKSApICkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ZW1wYWggPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MzIgKSA7CisJCXRlbXBhaCA9ICh1bnNpZ25lZCBjaGFyKVhHSU5ld19HZXRSZWcxKHBWQkluZm8tPlAzYzQsIDB4MzIpOwogICAgICAgICAgICAgICAgIHRlbXBhaCAmPSAweERGOwogICAgICAgICAgICAgICAgIGlmICggcFZCSW5mby0+VkJJbmZvICYgU2V0SW5TbGF2ZU1vZGUgKQogICAgICAgICAgICAgICAgIHsKQEAgLTkxNTYsOCArODgzMiw3IEBACiAgICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlAzYzQgLCAweDMyICwgdGVtcGFoICkgOwogICAgICAgICAgICAgICAgIFhHSU5ld19TZXRSZWdPUiggcFZCSW5mby0+UDNjNCAsIDB4MUUgLCAweDIwICkgOwogCi0KLSAgICAgICAgICAgICAgICB0ZW1wYWggPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyRSApIDsKKwkJdGVtcGFoID0gKHVuc2lnbmVkIGNoYXIpWEdJTmV3X0dldFJlZzEocFZCSW5mby0+UGFydDFQb3J0LCAweDJFKTsKIAogICAgICAgICAgICAgICAgIGlmICggISggdGVtcGFoICYgMHg4MCApICkKICAgICAgICAgICAgICAgICAgICAgWEdJTmV3X1NldFJlZ09SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDJFICwgMHg4MCApIDsgICAJLyogQlZCRE9FTkFCTEUgPSAxICovCkBAIC05MjM4LDcgKzg5MTMsNyBAQAogCiAKIAotICAgICAgICB0ZW1wYWggPSAoIFVDSEFSIClYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgyRSApIDsKKwl0ZW1wYWggPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMShwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MkUpOwogICAgICAgICBpZiAoICEoIHRlbXBhaCAmIDB4ODAgKSApCiAgICAgICAgICAgICBYR0lOZXdfU2V0UmVnT1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MkUgLCAweDgwICkgOwkvKiBCVkJET0VOQUJMRSA9IDEgKi8KIApAQCAtOTI4OSw5ICs4OTY0LDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0Rpc2FibGVCcmlkZ2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9EaXNhYmxlQnJpZGdlKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBheCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGF4ICwKICAgICAgICAgICAgdGVtcGJ4ICwKICAgICAgICAgICAgdGVtcGFoID0gMCAsCiAgICAgICAgICAgIHRlbXBibCA9IDAgOwpAQCAtOTQ3MCw5ICs5MTQ1LDkgQEAKIC8qIEEgOiBFeHQ3NTBwICovCiAvKiBCIDogU3Q3NTBwICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0VFZQdHJJbmRleCggIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3Vuc2lnbmVkIHNob3J0IFhHSV9HZXRUVlB0ckluZGV4KHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ID0gMCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ID0gMCA7CiAKICAgICBpZiAoIHBWQkluZm8tPlRWSW5mbyAmIFNldFBBTFRWICkKICAgICAgICAgdGVtcGJ4ID0gMiA7CkBAIC05NDk3LDcgKzkxNzIsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogQ3VzdG9taXplZCBQYXJhbS4gZm9yIDMwMSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9PRU0zMTBTZXR0aW5nKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX09FTTMxMFNldHRpbmcodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewogICAgIGlmICggcFZCSW5mby0+U2V0RmxhZyAmIFdpbjl4RE9TTW9kZSApCiAgICAgICAgIHJldHVybiA7CkBAIC05NTI3LDExICs5MjAyLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXREZWxheUNvbXAoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldERlbGF5Q29tcChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCA7CiAKLSAgICBVQ0hBUiAgdGVtcGFoICwKKyAgICB1bnNpZ25lZCBjaGFyICB0ZW1wYWggLAogICAgICAgICAgICB0ZW1wYmwgLAogICAgICAgICAgICB0ZW1wYmggOwogCkBAIC05NjA1LDkgKzkyODAsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0TENEQ2FwKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9TZXRMQ0RDYXAoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wY3ggOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBjeCA7CiAKICAgICB0ZW1wY3ggPSBwVkJJbmZvLT5MQ0RDYXBMaXN0WyBYR0lfR2V0TENEQ2FwUHRyKHBWQkluZm8pIF0uTENEX0NhcGFiaWxpdHkgOwogCkBAIC05NjE2LDEwICs5MjkxLDEyIEBACiAgICAgICAgIGlmICggcFZCSW5mby0+VkJUeXBlICYgKCBWQl9YR0kzMDFMViB8IFZCX1hHSTMwMkxWIHwgVkJfWEdJMzAxQyApICkKICAgICAgICAgeyAgICAgICAgCQkJCS8qIDMwMUxWLzMwMkxWIG9ubHkgKi8KICAgICAgICAgICAgIC8qIFNldCAzMDFMViBDYXBhYmlsaXR5ICovCi0gICAgICAgICAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgyNCAsICggVUNIQVIgKSggdGVtcGN4ICYgMHgxRiApICkgOworCQlYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0NFBvcnQsIDB4MjQsICh1bnNpZ25lZCBjaGFyKSh0ZW1wY3ggJiAweDFGKSk7CiAJfQogICAgICAgICAvKiBWQiBEcml2aW5nICovCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDRQb3J0ICwgMHgwRCAsIH4oICggRW5hYmxlVkJDTEtEUlZMT1cgfCBFbmFibGVQTExTUExPVyApID4+IDggKSAsICggVVNIT1JUICkoICggdGVtcGN4ICYgKCBFbmFibGVWQkNMS0RSVkxPVyB8IEVuYWJsZVBMTFNQTE9XICkgKSA+PiA4ICkgKSA7CisJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQ0UG9ydCwgMHgwRCwKKwkJCSAgIH4oKEVuYWJsZVZCQ0xLRFJWTE9XIHwgRW5hYmxlUExMU1BMT1cpID4+IDgpLAorCQkJICAgKHVuc2lnbmVkIHNob3J0KSgodGVtcGN4ICYgKEVuYWJsZVZCQ0xLRFJWTE9XIHwgRW5hYmxlUExMU1BMT1cpKSA+PiA4KSk7CiAgICAgfQogCiAgICAgaWYgKCBwVkJJbmZvLT5WQlR5cGUgJiAoIFZCX1hHSTMwMUIgfCBWQl9YR0kzMDJCIHwgVkJfWEdJMzAxTFYgfCBWQl9YR0kzMDJMViB8IFZCX1hHSTMwMUMgKSApCkBAIC05NjQ2LDMyICs5MzIzLDM0IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRMQ0RDYXBfQShVU0hPUlQgdGVtcGN4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0TENEQ2FwX0EodW5zaWduZWQgc2hvcnQgdGVtcGN4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXAgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgOwogCiAgICAgdGVtcCA9IFhHSU5ld19HZXRSZWcxKCBwVkJJbmZvLT5QM2Q0ICwgMHgzNyApIDsKIAogICAgIGlmICggdGVtcCAmIExDRFJHQjE4Qml0ICkKICAgICB7Ci0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxOSAsIDB4MEYgLCAoIFVTSE9SVCApKCAweDIwIHwgKCB0ZW1wY3ggJiAweDAwQzAgKSApICkgOyAvKiBFbmFibGUgRGl0aGVyICovCisJWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwgMHgxOSwgMHgwRiwKKwkJCSAgICh1bnNpZ25lZCBzaG9ydCkoMHgyMCB8ICh0ZW1wY3ggJiAweDAwQzApKSk7IC8qIEVuYWJsZSBEaXRoZXIgKi8KICAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDFBICwgMHg3RiAsIDB4ODAgKSA7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDFQb3J0ICwgMHgxOSAsIDB4MEYgLCAoIFVTSE9SVCApKCAweDMwIHwgKCB0ZW1wY3ggJiAweDAwQzAgKSApICkgOworCVhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MVBvcnQsIDB4MTksIDB4MEYsCisJCQkgICAodW5zaWduZWQgc2hvcnQpKDB4MzAgfCAodGVtcGN4ICYgMHgwMEMwKSkpOwogICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MUEgLCAweDdGICwgMHgwMCApIDsKICAgICB9CiAKIC8qCiAgICAgaWYgKCB0ZW1wY3ggJiBFbmFibGVMQ0QyNGJwcCApCS8vIDI0Yml0cwogICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwweDE5LCAweDBGLChVU0hPUlQpKDB4MzB8KHRlbXBjeCYweDAwQzApKSApOworCVhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MVBvcnQsMHgxOSwgMHgwRiwodW5zaWduZWQgc2hvcnQpKDB4MzB8KHRlbXBjeCYweDAwQzApKSApOwogICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IocFZCSW5mby0+UGFydDFQb3J0LDB4MUEsMHg3RiwweDAwKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQxUG9ydCwweDE5LCAweDBGLChVU0hPUlQpKDB4MjB8KHRlbXBjeCYweDAwQzApKSApOy8vRW5hYmxlIERpdGhlcgorCVhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MVBvcnQsMHgxOSwgMHgwRiwodW5zaWduZWQgc2hvcnQpKDB4MjB8KHRlbXBjeCYweDAwQzApKSApOyAvLyBFbmFibGUgRGl0aGVyCiAgICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MVBvcnQsMHgxQSwweDdGLDB4ODApOwogICAgIH0KICovCkBAIC05Njg0LDEyICs5MzYzLDE0IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRMQ0RDYXBfQihVU0hPUlQgdGVtcGN4LFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfU2V0TENEQ2FwX0IodW5zaWduZWQgc2hvcnQgdGVtcGN4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgaWYgKCB0ZW1wY3ggJiBFbmFibGVMQ0QyNGJwcCApCS8qIDI0Yml0cyAqLwotICAgICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MUEgLCAweEUwICwgKCBVU0hPUlQgKSggKCAoIHRlbXBjeCAmIDB4MDBmZiApID4+IDYgKSB8IDB4MGMgKSApIDsKKwkgICAgWEdJTmV3X1NldFJlZ0FORE9SKHBWQkluZm8tPlBhcnQyUG9ydCwgMHgxQSwgMHhFMCwKKwkJCSAgICAgICAodW5zaWduZWQgc2hvcnQpKCgodGVtcGN4ICYgMHgwMGZmKSA+PiA2KSB8IDB4MGMpKTsKICAgICBlbHNlCi0gICAgICAgIFhHSU5ld19TZXRSZWdBTkRPUiggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgxQSAsIDB4RTAgLCAoIFVTSE9SVCApKCAoICggdGVtcGN4ICYgMHgwMGZmICkgPj4gNiApIHwgMHgxOCApICkgOyAvKiBFbmFibGUgRGl0aGVyICovCisJICAgIFhHSU5ld19TZXRSZWdBTkRPUihwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MUEsIDB4RTAsCisJCQkgICAgICAgKHVuc2lnbmVkIHNob3J0KSgoKHRlbXBjeCAmIDB4MDBmZikgPj4gNikgfCAweDE4KSk7IC8qIEVuYWJsZSBEaXRoZXIgKi8KIH0KIAogCkBAIC05Njk5LDkgKzkzODAsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBTZXRTcGVjdHJ1bSggUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBTZXRTcGVjdHJ1bShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGluZGV4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpbmRleCA7CiAKICAgICBpbmRleCA9IFhHSV9HZXRMQ0RDYXBQdHIocFZCSW5mbykgOwogCkBAIC05NzI1LDEyICs5NDA2LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiBTZXQgVFYgQ3VzdG9taXplZCBQYXJhbS4gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0QW50aUZsaWNrZXIoIFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldEFudGlGbGlja2VyKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsCisJCQlzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwKICAgICAgICAgICAgaW5kZXggOwogCi0gICAgVUNIQVIgdGVtcGFoIDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBhaCA7CiAKICAgICBpZiAocFZCSW5mby0+VFZJbmZvICYgKCBTZXRZUGJQck1vZGU1MjVwIHwgU2V0WVBiUHJNb2RlNzUwcCApICkKICAgICAgICAgcmV0dXJuIDsKQEAgLTk3NjEsMTIgKzk0NDMsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1NldEVkZ2VFbmhhbmNlKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRFZGdlRW5oYW5jZSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCAsCisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4ICwKICAgICAgICAgICAgaW5kZXggOwogCi0gICAgVUNIQVIgdGVtcGFoIDsKKyAgICB1bnNpZ25lZCBjaGFyIHRlbXBhaCA7CiAKIAogICAgIHRlbXBieCA9IFhHSV9HZXRUVlB0ckluZGV4KHBWQkluZm8gKSA7CkBAIC05Nzk1LDIyICs5NDc3LDI2IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRQaGFzZUluY3IoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1NldFBoYXNlSW5jcihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4IDsKIAotICAgIFVDSEFSIHRlbXBjbCAsCisgICAgdW5zaWduZWQgY2hhciB0ZW1wY2wgLAogICAgICAgICAgIHRlbXBjaCA7CiAKLSAgICBVTE9ORyB0ZW1wRGF0YSA7CisgICAgdW5zaWduZWQgbG9uZyB0ZW1wRGF0YSA7CiAKICAgICBYR0lfR2V0VFZQdHJJbmRleDIoICZ0ZW1wYnggLCAmdGVtcGNsICwgJnRlbXBjaCwgcFZCSW5mbyApIDsgLyogYngsIGNsLCBjaCAqLwogICAgIHRlbXBEYXRhID0gVFZQaGFzZUxpc3RbIHRlbXBieCBdIDsKIAotICAgIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MlBvcnQgLCAweDMxICwgKCBVU0hPUlQgKSggdGVtcERhdGEgJiAweDAwMDAwMEZGICkgKSA7Ci0gICAgWEdJTmV3X1NldFJlZzEoIHBWQkluZm8tPlBhcnQyUG9ydCAsIDB4MzIgLCAoIFVTSE9SVCApKCAoIHRlbXBEYXRhICYgMHgwMDAwRkYwMCApID4+IDggKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgzMyAsICggVVNIT1JUICkoICggdGVtcERhdGEgJiAweDAwRkYwMDAwICkgPj4gMTYgKSApIDsKLSAgICBYR0lOZXdfU2V0UmVnMSggcFZCSW5mby0+UGFydDJQb3J0ICwgMHgzNCAsICggVVNIT1JUICkoICggdGVtcERhdGEgJiAweEZGMDAwMDAwICkgPj4gMjQgKSApIDsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MzEsCisJCSAgICh1bnNpZ25lZCBzaG9ydCkodGVtcERhdGEgJiAweDAwMDAwMEZGKSk7CisgICAgWEdJTmV3X1NldFJlZzEocFZCSW5mby0+UGFydDJQb3J0LCAweDMyLAorCQkgICAodW5zaWduZWQgc2hvcnQpKCh0ZW1wRGF0YSAmIDB4MDAwMEZGMDApID4+IDgpKTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MzMsCisJCSAgICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBEYXRhICYgMHgwMEZGMDAwMCkgPj4gMTYpKTsKKyAgICBYR0lOZXdfU2V0UmVnMShwVkJJbmZvLT5QYXJ0MlBvcnQsIDB4MzQsCisJCSAgICh1bnNpZ25lZCBzaG9ydCkoKHRlbXBEYXRhICYgMHhGRjAwMDAwMCkgPj4gMjQpKTsKIH0KIAogCkBAIC05ODIwLDEyICs5NTA2LDEzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9TZXRZRmlsdGVyKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbykKK3ZvaWQgWEdJX1NldFlGaWx0ZXIodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJICAgIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggLAogICAgICAgICAgICBpbmRleCA7CiAKLSAgICBVQ0hBUiB0ZW1wY2wgLAorICAgIHVuc2lnbmVkIGNoYXIgdGVtcGNsICwKICAgICAgICAgICB0ZW1wY2ggLAogICAgICAgICAgIHRlbXBhbCAsCiAgICAgICAgICAgKmZpbHRlclB0ciA7CkBAIC05OTI0LDcgKzk2MTEsOCBAQAogLyogMSA6IDMwMUIvMzAyQi8zMDFMVi8zMDJMViAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSV9HZXRUVlB0ckluZGV4MihVU0hPUlQqIHRlbXBieCxVQ0hBUiogdGVtcGNsLFVDSEFSKiB0ZW1wY2gsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfR2V0VFZQdHJJbmRleDIodW5zaWduZWQgc2hvcnQgKnRlbXBieCwgdW5zaWduZWQgY2hhciAqdGVtcGNsLAorCQkJdW5zaWduZWQgY2hhciAqdGVtcGNoLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgKnRlbXBieCA9IDAgOwogICAgICp0ZW1wY2wgPSAwIDsKQEAgLTk5NjYsMTIgKzk2NTQsMTQgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6IE9yaWdpbiBjb2RlIGZvciBjcnQyZ3JvdXAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfU2V0Q1JUMk1vZGVSZWdzKFVTSE9SVCBNb2RlTm8sUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSV9TZXRDUlQyTW9kZVJlZ3ModW5zaWduZWQgc2hvcnQgTW9kZU5vLAorCQkJIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLAorCQkJIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJsIDsKLSAgICBTSE9SVCAgdGVtcGNsIDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwgOworICAgIHNob3J0ICB0ZW1wY2wgOwogCi0gICAgVUNIQVIgIHRlbXBhaCA7CisgICAgdW5zaWduZWQgY2hhciAgdGVtcGFoIDsKIAogICAgIC8qIFhHSU5ld19TZXRSZWcxKCBwVkJJbmZvLT5QYXJ0MVBvcnQgLCAweDAzICwgMHgwMCApIDsgLy8gZml4IHdyaXRlIHBhcnQxIGluZGV4IDAgQlREUkFNIGJpdCBCdWcgKi8KICAgICB0ZW1wYWg9MDsKQEAgLTEwMTk1LDkgKzk4ODUsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfQ2xvc2VDUlRDKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9DbG9zZUNSVEMoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGJ4IDsKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYnggOwogCiAgICAgdGVtcGJ4ID0gMCA7CiAKQEAgLTEwMjE0LDkgKzk5MDQsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfT3BlbkNSVEMoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX09wZW5DUlRDKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIHRlbXBieCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcGJ4IDsKIAogICAgIHRlbXBieCA9IDAgOwogCkBAIC0xMDIzMCw5ICs5OTIwLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0dldFJBTURBQzJEQVRBKFVTSE9SVCBNb2RlTm8gLCBVU0hPUlQgTW9kZUlkSW5kZXggLCBVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit2b2lkIFhHSV9HZXRSQU1EQUMyREFUQSh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgdGVtcGF4ICwKKyAgICB1bnNpZ25lZCBzaG9ydCB0ZW1wYXggLAogICAgICAgICAgICB0ZW1wYnggLAogICAgICAgICAgICB0ZW1wMSAsCiAgICAgICAgICAgIHRlbXAyICwKQEAgLTEwMjU3LDE1ICs5OTQ3LDE1IEBACiAgICAgICAgIG1vZGVmbGFnID0gcFZCSW5mby0+RU1vZGVJRFRhYmxlWyBNb2RlSWRJbmRleCBdLkV4dF9Nb2RlRmxhZyA7CiAgICAgICAgIENSVDFJbmRleCA9IHBWQkluZm8tPlJlZkluZGV4WyBSZWZyZXNoUmF0ZVRhYmxlSW5kZXggXS5FeHRfQ1JUMUNSVEMgOwogICAgICAgICBDUlQxSW5kZXggJj0gSW5kZXhNYXNrIDsKLSAgICAgICAgdGVtcDEgPSAoIFVTSE9SVCApcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlWyBDUlQxSW5kZXggXS5DUlsgMCBdIDsKLSAgICAgICAgdGVtcDIgPSAoIFVTSE9SVCApcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlWyBDUlQxSW5kZXggXS5DUlsgNSBdIDsKKwl0ZW1wMSA9ICh1bnNpZ25lZCBzaG9ydClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUlswXTsKKwl0ZW1wMiA9ICh1bnNpZ25lZCBzaG9ydClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbQ1JUMUluZGV4XS5DUls1XTsKIAl0ZW1wYXggPSAoIHRlbXAxICYgMHhGRiApIHwgKCAoIHRlbXAyICYgMHgwMyApIDw8IDggKSA7Ci0gICAgICAgIHRlbXBieCA9ICggVVNIT1JUIClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbIENSVDFJbmRleCBdLkNSWyA4IF0gOwotICAgICAgICB0ZW1wY3ggPSAoIFVTSE9SVCApcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlWyBDUlQxSW5kZXggXS5DUlsgMTQgXSA8PCA4IDsKKwl0ZW1wYnggPSAodW5zaWduZWQgc2hvcnQpcFZCSW5mby0+WEdJTkVXVUJfQ1JUMVRhYmxlW0NSVDFJbmRleF0uQ1JbOF07CisJdGVtcGN4ID0gKHVuc2lnbmVkIHNob3J0KXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzE0XSA8PCA4OwogCXRlbXBjeCAmPSAweDAxMDAgOwogCXRlbXBjeCA9IHRlbXBjeCA8PCAyIDsKIAl0ZW1wYnggfD0gdGVtcGN4OwotICAgICAgICB0ZW1wMSA9ICggVVNIT1JUIClwVkJJbmZvLT5YR0lORVdVQl9DUlQxVGFibGVbIENSVDFJbmRleCBdLkNSWyA5IF0gOworCXRlbXAxID0gKHVuc2lnbmVkIHNob3J0KXBWQkluZm8tPlhHSU5FV1VCX0NSVDFUYWJsZVtDUlQxSW5kZXhdLkNSWzldOwogICAgIH0KIAogICAgIGlmICggdGVtcDEgJiAweDAxICkKQEAgLTEwMjk1LDExICs5OTg1LDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJX0dldENvbG9yRGVwdGgoVVNIT1JUIE1vZGVObyAsIFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0Q29sb3JEZXB0aCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIENvbG9yRGVwdGhbIDYgXSA9IHsgMSAsIDIgLCA0ICwgNCAsIDYgLCA4IH0gOwotICAgIFNIT1JUICBpbmRleCA7Ci0gICAgVVNIT1JUIG1vZGVmbGFnIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBDb2xvckRlcHRoWyA2IF0gPSB7IDEgLCAyICwgNCAsIDQgLCA2ICwgOCB9IDsKKyAgICBzaG9ydCBpbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgbW9kZWZsYWcgOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewpAQCAtMTAzMjYsNyArMTAwMTYsNyBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lfVW5Mb2NrQ1JUMiggUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1VuTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MmYgLCAweEZGICwgMHgwMSApIDsKQEAgLTEwMzQwLDcgKzEwMDMwLDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0xvY2tDUlQyKCBQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCAgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKQordm9pZCBYR0lfTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sICBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAKICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoIHBWQkluZm8tPlBhcnQxUG9ydCAsIDB4MkYgLCAweEZFICwgMHgwMCApIDsKQEAgLTEwMzU1LDcgKzEwMDQ1LDcgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X0VuYWJsZUNSVDIoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lOZXdfRW5hYmxlQ1JUMihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7CiAgICAgWEdJTmV3X1NldFJlZ0FORE9SKCBwVkJJbmZvLT5QM2M0ICwgMHgxRSAsIDB4RkYgLCAweDIwICkgOwogfQpAQCAtMTAzNjgsMTIgKzEwMDU4LDEyIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19MQ0RfV2FpdF9UaW1lKFVDSEFSIERlbGF5VGltZSwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pCit2b2lkIFhHSU5ld19MQ0RfV2FpdF9UaW1lKHVuc2lnbmVkIGNoYXIgRGVsYXlUaW1lLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pCiB7Ci0gICAgVVNIT1JUIGkgLAorICAgIHVuc2lnbmVkIHNob3J0IGkgLAogICAgICAgICAgICBqIDsKIAotICAgIFVMT05HIHRlbXAgLAorICAgIHVuc2lnbmVkIGxvbmcgdGVtcCAsCiAgICAgICAgICAgZmxhZyA7CiAKICAgICBmbGFnID0gMCA7CkBAIC0xMDQwNSw5ICsxMDA5NSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1CT09MRUFOIFhHSV9CcmlkZ2VJc09uKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBjaGFyIFhHSV9CcmlkZ2VJc09uKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVU0hPUlQgZmxhZyA7CisgICAgdW5zaWduZWQgc2hvcnQgZmxhZyA7CiAKICAgICBpZiAoIHBWQkluZm8tPklGX0RFRl9MVkRTID09IDEgKQogICAgIHsKQEAgLTEwNDMxLDkgKzEwMTIxLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX0xvbmdXYWl0KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordm9pZCBYR0lfTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCBpIDsKKyAgICB1bnNpZ25lZCBzaG9ydCBpIDsKIAogICAgIGkgPSBYR0lOZXdfR2V0UmVnMSggcFZCSW5mby0+UDNjNCAsIDB4MUYgKSA7CiAKQEAgLTEwNDYwLDkgKzEwMTUwLDkgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJX1ZCTG9uZ1dhaXQoIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICkKK3ZvaWQgWEdJX1ZCTG9uZ1dhaXQoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYWwgLAorICAgIHVuc2lnbmVkIHNob3J0IHRlbXBhbCAsCiAgICAgICAgICAgIHRlbXAgLAogICAgICAgICAgICBpICwKICAgICAgICAgICAgaiA7CkBAIC0xMDUxOSwxNiArMTAyMDksMTYgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVTSE9SVCBYR0lfR2V0VkdBSFQyKCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyApCit1bnNpZ25lZCBzaG9ydCBYR0lfR2V0VkdBSFQyKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKLSAgICBVTE9ORyB0ZW1wYXggLAorICAgIHVuc2lnbmVkIGxvbmcgdGVtcGF4ICwKICAgICAgICAgICB0ZW1wYnggOwogCiAgICAgdGVtcGJ4ID0gKCAoIHBWQkluZm8tPlZHQVZUIC0gcFZCSW5mby0+VkdBVkRFICkgKiBwVkJJbmZvLT5SVkJIQ01BWCApICYgMHhGRkZGIDsKICAgICB0ZW1wYXggPSAoIHBWQkluZm8tPlZUIC0gcFZCSW5mby0+VkRFICkgKiBwVkJJbmZvLT5SVkJIQ0ZBQ1QgOwogICAgIHRlbXBheCA9ICggdGVtcGF4ICogcFZCSW5mby0+SFQgKSAvdGVtcGJ4IDsKIAotICAgIHJldHVybiggKCBVU0hPUlQgKXRlbXBheCApIDsKKyAgICByZXR1cm4oICh1bnNpZ25lZCBzaG9ydCl0ZW1wYXggKSA7CiB9CiAKIApAQCAtMTA1MzgsMTkgKzEwMjI4LDIzIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VU0hPUlQgWEdJX0dldFZDTEsyUHRyKCBVU0hPUlQgTW9kZU5vICwgVVNIT1JUIE1vZGVJZEluZGV4ICwgVVNIT1JUIFJlZnJlc2hSYXRlVGFibGVJbmRleCAsIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKQordW5zaWduZWQgc2hvcnQgWEdJX0dldFZDTEsyUHRyKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBNb2RlSWRJbmRleCwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsCisJCQkgICAgICAgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sCisJCQkgICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKQogewotICAgIFVTSE9SVCB0ZW1wYnggOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXBieCA7CiAKLSAgICBVU0hPUlQgTENEWGxhdDFWQ0xLWyA0IF0gPSB7IFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgfSA7Ci0gICAgVVNIT1JUIExDRFhsYXQyVkNMS1sgNCBdID0geyBWQ0xLMTA4XzIgKyA1ICwgVkNMSzEwOF8yICsgNSAsIFZDTEsxMDhfMiArIDUgLCBWQ0xLMTA4XzIgKyA1IH0gOwotICAgIFVTSE9SVCBMVkRTWGxhdDFWQ0xLWyA0IF0gPSB7IFZDTEs0MCAsIFZDTEs0MCAsIFZDTEs0MCAsIFZDTEs0MCB9IDsKLSAgICBVU0hPUlQgTFZEU1hsYXQyVkNMS1sgNCBdID0geyBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyIH0gOwotICAgIFVTSE9SVCBMVkRTWGxhdDNWQ0xLWyA0IF0gPSB7IFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgfSA7CisgICAgdW5zaWduZWQgc2hvcnQgTENEWGxhdDFWQ0xLWyA0IF0gPSB7IFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgfSA7CisgICAgdW5zaWduZWQgc2hvcnQgTENEWGxhdDJWQ0xLWyA0IF0gPSB7IFZDTEsxMDhfMiArIDUgLCBWQ0xLMTA4XzIgKyA1ICwgVkNMSzEwOF8yICsgNSAsIFZDTEsxMDhfMiArIDUgfSA7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU1hsYXQxVkNMS1sgNCBdID0geyBWQ0xLNDAgLCBWQ0xLNDAgLCBWQ0xLNDAgLCBWQ0xLNDAgfSA7CisgICAgdW5zaWduZWQgc2hvcnQgTFZEU1hsYXQyVkNMS1sgNCBdID0geyBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyIH0gOworICAgIHVuc2lnbmVkIHNob3J0IExWRFNYbGF0M1ZDTEtbIDQgXSA9IHsgVkNMSzY1ICsgMiAsIFZDTEs2NSArIDIgLCBWQ0xLNjUgKyAyICwgVkNMSzY1ICsgMiB9IDsKIAotICAgIFVTSE9SVCBDUlQySW5kZXggLCBWQ0xLSW5kZXggOwotICAgIFVTSE9SVCBtb2RlZmxhZyAsIHJlc2luZm8gOwotICAgIFVDSEFSICpDSFRWVkNMS1B0ciA9IE5VTEwgOworICAgIHVuc2lnbmVkIHNob3J0IENSVDJJbmRleCAsIFZDTEtJbmRleCA7CisgICAgdW5zaWduZWQgc2hvcnQgbW9kZWZsYWcgLCByZXNpbmZvIDsKKyAgICB1bnNpZ25lZCBjaGFyICpDSFRWVkNMS1B0ciA9IE5VTEwgOwogCiAgICAgaWYgKCBNb2RlTm8gPD0gMHgxMyApCiAgICAgewpAQCAtMTA2NjUsNyArMTAzNTksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewkvKiBmb3IgQ1JUMiAqLwotICAgICAgICAgICAgICAgIFZDTEtJbmRleCA9ICggVUNIQVIgKVhHSU5ld19HZXRSZWcyKCAoIHBWQkluZm8tPlAzY2EgKyAweDAyICkgKSA7CS8qIFBvcnQgM2NjaCAqLworCQlWQ0xLSW5kZXggPSAodW5zaWduZWQgY2hhcilYR0lOZXdfR2V0UmVnMigocFZCSW5mby0+UDNjYSArIDB4MDIpKTsJLyogUG9ydCAzY2NoICovCiAJCVZDTEtJbmRleCA9ICggKCBWQ0xLSW5kZXggPj4gMiApICYgMHgwMyApIDsKICAgICAgICAgICAgICAgICBpZiAoIE1vZGVObyA+IDB4MTMgKQogICAgICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5oCmluZGV4IDA5NzUzZDcuLjBkY2MyOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuaApAQCAtMSw0MCArMSw0MiBAQAogI2lmbmRlZiAgX1ZCU0VUTU9ERV8KICNkZWZpbmUgIF9WQlNFVE1PREVfCiAKLWV4dGVybiAgIHZvaWQgICAgIEluaXRUbzMzMFBvaW50ZXIoVUNIQVIsUFZCX0RFVklDRV9JTkZPKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9VbkxvY2tDUlQyKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0xvY2tDUlQyKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0xvbmdXYWl0KCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRDUlQyTW9kZVJlZ3MoVVNIT1JUIE1vZGVObyxQWEdJX0hXX0RFVklDRV9JTkZPLCAgUFZCX0RFVklDRV9JTkZPICApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc2FibGVCcmlkZ2UoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAJICBYR0lfRW5hYmxlQnJpZGdlKFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc3BsYXlPZmYoIFBYR0lfSFdfREVWSUNFX0lORk8sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc3BsYXlPbiggUFhHSV9IV19ERVZJQ0VfSU5GTywgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkJUeXBlKFBWQl9ERVZJQ0VfSU5GTyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfU2Vuc2VDUlQxKFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFZHQVR5cGUoUFhHSV9IV19ERVZJQ0VfSU5GTyBId0RldmljZUV4dGVuc2lvbiwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkJJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFRWSW5mbyhVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfU2V0Q1JUMU9mZnNldChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxVU0hPUlQgUmVmcmVzaFJhdGVUYWJsZUluZGV4LFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NldExDREFHcm91cChVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCxQWEdJX0hXX0RFVklDRV9JTkZPIEh3RGV2aWNlRXh0ZW5zaW9uLCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9XYWl0RGlzcGx5KCBQVkJfREVWSUNFX0lORk8gKTsKLWV4dGVybiAgIFVTSE9SVCAgIFhHSV9HZXRSZXNJbmZvKFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBJbml0VG8zMzBQb2ludGVyKHVuc2lnbmVkIGNoYXIsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9VbkxvY2tDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfTG9ja0NSVDIoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9Mb25nV2FpdChzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2V0Q1JUMk1vZGVSZWdzKHVuc2lnbmVkIHNob3J0IE1vZGVObywKKwkJCQkgICAgICBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosCisJCQkJICAgICAgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc2FibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9FbmFibGVCcmlkZ2Uoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9EaXNwbGF5T2ZmKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0Rpc3BsYXlPbihzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICosIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9HZXRWQlR5cGUoc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX1NlbnNlQ1JUMShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfR2V0VkdBVHlwZShzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFZCSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgc3RydWN0IHZiX2RldmljZV9pbmZvICopOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX0dldFRWSW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2V0Q1JUMU9mZnNldCh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCB1bnNpZ25lZCBzaG9ydCBSZWZyZXNoUmF0ZVRhYmxlSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2V0TENEQUdyb3VwKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKkh3RGV2aWNlRXh0ZW5zaW9uLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB2b2lkICAgICBYR0lfV2FpdERpc3BseShzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB1bnNpZ25lZCBzaG9ydCAgIFhHSV9HZXRSZXNJbmZvKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CiAKLWV4dGVybiAgIEJPT0xFQU4gIFhHSVNldE1vZGVOZXcoIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24gLCBVU0hPUlQgTW9kZU5vICkgOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciAgWEdJU2V0TW9kZU5ldyhzdHJ1Y3QgeGdpX2h3X2RldmljZV9pbmZvICpId0RldmljZUV4dGVuc2lvbiwgdW5zaWduZWQgc2hvcnQgTW9kZU5vKSA7CiAKLWV4dGVybiAgIEJPT0xFQU4gIFhHSV9TZWFyY2hNb2RlSUQoIFVTSE9SVCBNb2RlTm8sVVNIT1JUICAqTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyApOwotZXh0ZXJuICAgQk9PTEVBTiAgWEdJX0dldExDREluZm8oVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICBCT09MRUFOICBYR0lfQnJpZGdlSXNPbiggUFZCX0RFVklDRV9JTkZPICk7Ci1leHRlcm4gICBCT09MRUFOICBYR0lfU2V0Q1JUMkdyb3VwMzAxKFVTSE9SVCBNb2RlTm8sIFBYR0lfSFdfREVWSUNFX0lORk8gSHdEZXZpY2VFeHRlbnNpb24sIFBWQl9ERVZJQ0VfSU5GTyk7Ci1leHRlcm4gICBVU0hPUlQgICBYR0lfR2V0UmF0ZVB0ckNSVDIoIFBYR0lfSFdfREVWSUNFX0lORk8gcFhHSUhXREUsIFVTSE9SVCBNb2RlTm8sVVNIT1JUIE1vZGVJZEluZGV4LCBQVkJfREVWSUNFX0lORk8gKTsKK2V4dGVybiAgIHVuc2lnbmVkIGNoYXIgIFhHSV9TZWFyY2hNb2RlSUQodW5zaWduZWQgc2hvcnQgTW9kZU5vLCB1bnNpZ25lZCBzaG9ydCAgKk1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfR2V0TENESW5mbyh1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfQnJpZGdlSXNPbihzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CitleHRlcm4gICB1bnNpZ25lZCBjaGFyICBYR0lfU2V0Q1JUMkdyb3VwMzAxKHVuc2lnbmVkIHNob3J0IE1vZGVObywgc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqSHdEZXZpY2VFeHRlbnNpb24sIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqKTsKK2V4dGVybiAgIHVuc2lnbmVkIHNob3J0ICAgWEdJX0dldFJhdGVQdHJDUlQyKHN0cnVjdCB4Z2lfaHdfZGV2aWNlX2luZm8gKnBYR0lIV0RFLCB1bnNpZ25lZCBzaG9ydCBNb2RlTm8sIHVuc2lnbmVkIHNob3J0IE1vZGVJZEluZGV4LCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKik7CiAKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzIxRlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzI3RlBCaXRzKFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9YRzIxQkxTaWduYWxWREQoVVNIT1JUIHRlbXBiaCxVU0hPUlQgdGVtcGJsLCBQVkJfREVWSUNFX0lORk8gcFZCSW5mbyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lfWEcyN0JMU2lnbmFsVkREKFVTSE9SVCB0ZW1wYmgsVVNIT1JUIHRlbXBibCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8pOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjFTZXRQYW5lbERlbGF5KFVTSE9SVCB0ZW1wYmwsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKLWV4dGVybiAgIEJPT0xFQU4gIFhHSV9YRzIxQ2hlY2tMVkRTTW9kZShVU0hPUlQgTW9kZU5vLFVTSE9SVCBNb2RlSWRJbmRleCwgUFZCX0RFVklDRV9JTkZPIHBWQkluZm8gKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzIxTFZEU1BhcmEoVVNIT1JUIE1vZGVObyxVU0hPUlQgTW9kZUlkSW5kZXgsIFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvICk7Ci1leHRlcm4gICBVU0hPUlQgWEdJX0dldExWRFNPRU1UYWJsZUluZGV4KFBWQl9ERVZJQ0VfSU5GTyBwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9TZXRYRzIxRlBCaXRzKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2V0WEcyN0ZQQml0cyhzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuICAgdm9pZCAgICAgWEdJX1hHMjFCTFNpZ25hbFZERCh1bnNpZ25lZCBzaG9ydCB0ZW1wYmgsIHVuc2lnbmVkIHNob3J0IHRlbXBibCwgc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSV9YRzI3QkxTaWduYWxWREQodW5zaWduZWQgc2hvcnQgdGVtcGJoLCB1bnNpZ25lZCBzaG9ydCB0ZW1wYmwsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBYR0lfWEcyMVNldFBhbmVsRGVsYXkodW5zaWduZWQgc2hvcnQgdGVtcGJsLCBzdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKnBWQkluZm8pOworZXh0ZXJuICAgdW5zaWduZWQgY2hhciAgWEdJX1hHMjFDaGVja0xWRFNNb2RlKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB2b2lkICAgICBYR0lfU2V0WEcyMUxWRFNQYXJhKHVuc2lnbmVkIHNob3J0IE1vZGVObywgdW5zaWduZWQgc2hvcnQgTW9kZUlkSW5kZXgsIHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbyk7CitleHRlcm4gICB1bnNpZ25lZCBzaG9ydCBYR0lfR2V0TFZEU09FTVRhYmxlSW5kZXgoc3RydWN0IHZiX2RldmljZV9pbmZvICpwVkJJbmZvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc3RydWN0LmgKaW5kZXggYmIyNWMwZS4uOWM2ZTBjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3N0cnVjdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zdHJ1Y3QuaApAQCAtMTAsNTI1ICsxMCw1MTggQEAKIAogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfUGFuZWxEZWxheVRibFN0cnVjdAorc3RydWN0IFhHSV9QYW5lbERlbGF5VGJsU3RydWN0CiB7Ci0gVUNIQVIgdGltZXJbMl07Ci19IFhHSV9QYW5lbERlbGF5VGJsU3RydWN0OworIHVuc2lnbmVkIGNoYXIgdGltZXJbMl07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0xDRERhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfTENERGF0YVN0cnVjdAogewotIFVTSE9SVCBSVkJIQ01BWDsKLSBVU0hPUlQgUlZCSENGQUNUOwotIFVTSE9SVCBWR0FIVDsKLSBVU0hPUlQgVkdBVlQ7Ci0gVVNIT1JUIExDREhUOwotIFVTSE9SVCBMQ0RWVDsKLX0gWEdJX0xDRERhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgUlZCSENNQVg7CisgdW5zaWduZWQgc2hvcnQgUlZCSENGQUNUOworIHVuc2lnbmVkIHNob3J0IFZHQUhUOworIHVuc2lnbmVkIHNob3J0IFZHQVZUOworIHVuc2lnbmVkIHNob3J0IExDREhUOworIHVuc2lnbmVkIHNob3J0IExDRFZUOworfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdAogewotIFVDSEFSIFJlZ1s4XTsKLX0gWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3Q7Ci10eXBlZGVmIHN0cnVjdCBfWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QKKyB1bnNpZ25lZCBjaGFyIFJlZ1s4XTsKK307CisKK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdAogewotIFVDSEFSIFJlZ1s3XTsKLX0gWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBSZWdbN107Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfVFZEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX1RWRGF0YVN0cnVjdAogewotIFVTSE9SVCBSVkJIQ01BWDsKLSBVU0hPUlQgUlZCSENGQUNUOwotIFVTSE9SVCBWR0FIVDsKLSBVU0hPUlQgVkdBVlQ7Ci0gVVNIT1JUIFRWSERFOwotIFVTSE9SVCBUVlZERTsKLSBVU0hPUlQgUlZCSFJTOwotIFVDSEFSIEZsaWNrZXJNb2RlOwotIFVTSE9SVCBIQUxGUlZCSFJTOwotIFVDSEFSIFJZMUNPRTsKLSBVQ0hBUiBSWTJDT0U7Ci0gVUNIQVIgUlkzQ09FOwotIFVDSEFSIFJZNENPRTsKLX0gWEdJX1RWRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ01BWDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ0ZBQ1Q7CisgdW5zaWduZWQgc2hvcnQgVkdBSFQ7CisgdW5zaWduZWQgc2hvcnQgVkdBVlQ7CisgdW5zaWduZWQgc2hvcnQgVFZIREU7CisgdW5zaWduZWQgc2hvcnQgVFZWREU7CisgdW5zaWduZWQgc2hvcnQgUlZCSFJTOworIHVuc2lnbmVkIGNoYXIgRmxpY2tlck1vZGU7CisgdW5zaWduZWQgc2hvcnQgSEFMRlJWQkhSUzsKKyB1bnNpZ25lZCBjaGFyIFJZMUNPRTsKKyB1bnNpZ25lZCBjaGFyIFJZMkNPRTsKKyB1bnNpZ25lZCBjaGFyIFJZM0NPRTsKKyB1bnNpZ25lZCBjaGFyIFJZNENPRTsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTFZEU0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfTFZEU0RhdGFTdHJ1Y3QKIHsKLSBVU0hPUlQgVkdBSFQ7Ci0gVVNIT1JUIFZHQVZUOwotIFVTSE9SVCBMQ0RIVDsKLSBVU0hPUlQgTENEVlQ7Ci19IFhHSV9MVkRTRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTFZEU0Rlc1N0cnVjdAorc3RydWN0IFhHSV9MVkRTRGVzU3RydWN0CiB7Ci0gVVNIT1JUIExDREhERVM7Ci0gVVNIT1JUIExDRFZERVM7Ci19IFhHSV9MVkRTRGVzU3RydWN0OworIHVuc2lnbmVkIHNob3J0IExDREhERVM7CisgdW5zaWduZWQgc2hvcnQgTENEVkRFUzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTFZEU0NSVDFEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX0xWRFNDUlQxRGF0YVN0cnVjdAogewotIFVDSEFSIENSWzE1XTsKLX0gWEdJX0xWRFNDUlQxRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIENSWzE1XTsKK307CiAKIC8qYWRkIGZvciBMQ0RBKi8KIAotCi10eXBlZGVmIHN0cnVjdCBfWEdJX1N0U3RydWN0CitzdHJ1Y3QgWEdJX1N0U3RydWN0CiB7Ci0gVUNIQVIgU3RfTW9kZUlEOwotIFVTSE9SVCBTdF9Nb2RlRmxhZzsKLSBVQ0hBUiBTdF9TdFRhYmxlSW5kZXg7Ci0gVUNIQVIgU3RfQ1JUMkNSVEM7Ci0gVUNIQVIgU3RfQ1JUMkNSVEMyOwotIFVDSEFSIFN0X1Jlc0luZm87Ci0gVUNIQVIgVkJfU3RUVkZsaWNrZXJJbmRleDsKLSBVQ0hBUiBWQl9TdFRWRWRnZUluZGV4OwotIFVDSEFSIFZCX1N0VFZZRmlsdGVySW5kZXg7Ci19IFhHSV9TdFN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIFN0X01vZGVJRDsKKyB1bnNpZ25lZCBzaG9ydCBTdF9Nb2RlRmxhZzsKKyB1bnNpZ25lZCBjaGFyIFN0X1N0VGFibGVJbmRleDsKKyB1bnNpZ25lZCBjaGFyIFN0X0NSVDJDUlRDOworIHVuc2lnbmVkIGNoYXIgU3RfQ1JUMkNSVEMyOworIHVuc2lnbmVkIGNoYXIgU3RfUmVzSW5mbzsKKyB1bnNpZ25lZCBjaGFyIFZCX1N0VFZGbGlja2VySW5kZXg7CisgdW5zaWduZWQgY2hhciBWQl9TdFRWRWRnZUluZGV4OworIHVuc2lnbmVkIGNoYXIgVkJfU3RUVllGaWx0ZXJJbmRleDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfU3RhbmRUYWJsZVN0cnVjdAorc3RydWN0IFhHSV9TdGFuZFRhYmxlU3RydWN0CiB7Ci0gVUNIQVIgQ1JUX0NPTFM7Ci0gVUNIQVIgUk9XUzsKLSBVQ0hBUiBDSEFSX0hFSUdIVDsKLSBVU0hPUlQgQ1JUX0xFTjsKLSBVQ0hBUiBTUls0XTsKLSBVQ0hBUiBNSVNDOwotIFVDSEFSIENSVENbMHgxOV07Ci0gVUNIQVIgQVRUUlsweDE0XTsKLSBVQ0hBUiBHUkNbOV07Ci19IFhHSV9TdGFuZFRhYmxlU3RydWN0OworIHVuc2lnbmVkIGNoYXIgQ1JUX0NPTFM7CisgdW5zaWduZWQgY2hhciBST1dTOworIHVuc2lnbmVkIGNoYXIgQ0hBUl9IRUlHSFQ7CisgdW5zaWduZWQgc2hvcnQgQ1JUX0xFTjsKKyB1bnNpZ25lZCBjaGFyIFNSWzRdOworIHVuc2lnbmVkIGNoYXIgTUlTQzsKKyB1bnNpZ25lZCBjaGFyIENSVENbMHgxOV07CisgdW5zaWduZWQgY2hhciBBVFRSWzB4MTRdOworIHVuc2lnbmVkIGNoYXIgR1JDWzldOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9FeHRTdHJ1Y3QKK3N0cnVjdCBYR0lfRXh0U3RydWN0CiB7Ci0gVUNIQVIgRXh0X01vZGVJRDsKLSBVU0hPUlQgRXh0X01vZGVGbGFnOwotIFVTSE9SVCBFeHRfTW9kZUluZm87Ci0gVVNIT1JUIEV4dF9Qb2ludDsKLSBVU0hPUlQgRXh0X1ZFU0FJRDsKLSBVQ0hBUiBFeHRfVkVTQU1FTVNpemU7Ci0gVUNIQVIgRXh0X1JFU0lORk87Ci0gVUNIQVIgVkJfRXh0VFZGbGlja2VySW5kZXg7Ci0gVUNIQVIgVkJfRXh0VFZFZGdlSW5kZXg7Ci0gVUNIQVIgVkJfRXh0VFZZRmlsdGVySW5kZXg7Ci0gVUNIQVIgUkVGaW5kZXg7Ci19IFhHSV9FeHRTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBFeHRfTW9kZUlEOworIHVuc2lnbmVkIHNob3J0IEV4dF9Nb2RlRmxhZzsKKyB1bnNpZ25lZCBzaG9ydCBFeHRfTW9kZUluZm87CisgdW5zaWduZWQgc2hvcnQgRXh0X1BvaW50OworIHVuc2lnbmVkIHNob3J0IEV4dF9WRVNBSUQ7CisgdW5zaWduZWQgY2hhciBFeHRfVkVTQU1FTVNpemU7CisgdW5zaWduZWQgY2hhciBFeHRfUkVTSU5GTzsKKyB1bnNpZ25lZCBjaGFyIFZCX0V4dFRWRmxpY2tlckluZGV4OworIHVuc2lnbmVkIGNoYXIgVkJfRXh0VFZFZGdlSW5kZXg7CisgdW5zaWduZWQgY2hhciBWQl9FeHRUVllGaWx0ZXJJbmRleDsKKyB1bnNpZ25lZCBjaGFyIFJFRmluZGV4OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9FeHQyU3RydWN0CitzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QKIHsKLSBVU0hPUlQgRXh0X0luZm9GbGFnOwotIFVDSEFSIEV4dF9DUlQxQ1JUQzsKLSBVQ0hBUiBFeHRfQ1JUVkNMSzsKLSBVQ0hBUiBFeHRfQ1JUMkNSVEM7Ci0gVUNIQVIgRXh0X0NSVDJDUlRDMjsKLSBVQ0hBUiAgTW9kZUlEOwotIFVTSE9SVCBYUmVzOwotIFVTSE9SVCBZUmVzOwotIC8qIFVTSE9SVCBST01fT0ZGU0VUOyAqLwotfSBYR0lfRXh0MlN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBFeHRfSW5mb0ZsYWc7CisgdW5zaWduZWQgY2hhciBFeHRfQ1JUMUNSVEM7CisgdW5zaWduZWQgY2hhciBFeHRfQ1JUVkNMSzsKKyB1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzsKKyB1bnNpZ25lZCBjaGFyIEV4dF9DUlQyQ1JUQzI7CisgdW5zaWduZWQgY2hhciAgTW9kZUlEOworIHVuc2lnbmVkIHNob3J0IFhSZXM7CisgdW5zaWduZWQgc2hvcnQgWVJlczsKKyAvKiB1bnNpZ25lZCBzaG9ydCBST01fT0ZGU0VUOyAqLworfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfWEdJX01DTEtEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0CiB7Ci0gVUNIQVIgU1IyOCxTUjI5LFNSMkE7Ci0gVVNIT1JUIENMT0NLOwotfSBYR0lfTUNMS0RhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBTUjI4LCBTUjI5LCBTUjJBOworIHVuc2lnbmVkIHNob3J0IENMT0NLOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9FQ0xLRGF0YVN0cnVjdAorc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdAogewotIFVDSEFSIFNSMkUsU1IyRixTUjMwOwotIFVTSE9SVCBDTE9DSzsKLX0gWEdJX0VDTEtEYXRhU3RydWN0OworIHVuc2lnbmVkIGNoYXIgU1IyRSwgU1IyRiwgU1IzMDsKKyB1bnNpZ25lZCBzaG9ydCBDTE9DSzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfVkNMS0RhdGFTdHJ1Y3QKK3N0cnVjdCBYR0lfVkNMS0RhdGFTdHJ1Y3QKIHsKLSBVQ0hBUiBTUjJCLFNSMkM7Ci0gVVNIT1JUIENMT0NLOwotfSBYR0lfVkNMS0RhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBTUjJCLCBTUjJDOworIHVuc2lnbmVkIHNob3J0IENMT0NLOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9WQlZDTEtEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QKIHsKLSBVQ0hBUiBQYXJ0NF9BLFBhcnQ0X0I7Ci0gVVNIT1JUIENMT0NLOwotfSBYR0lfVkJWQ0xLRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyIFBhcnQ0X0EsIFBhcnQ0X0I7CisgdW5zaWduZWQgc2hvcnQgQ0xPQ0s7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX1N0UmVzSW5mb1N0cnVjdAorc3RydWN0IFhHSV9TdFJlc0luZm9TdHJ1Y3QKIHsKLSBVU0hPUlQgSFRvdGFsOwotIFVTSE9SVCBWVG90YWw7Ci19IFhHSV9TdFJlc0luZm9TdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgSFRvdGFsOworIHVuc2lnbmVkIHNob3J0IFZUb3RhbDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTW9kZVJlc0luZm9TdHJ1Y3QKK3N0cnVjdCBYR0lfTW9kZVJlc0luZm9TdHJ1Y3QKIHsKLSBVU0hPUlQgSFRvdGFsOwotIFVTSE9SVCBWVG90YWw7Ci0gVUNIQVIgIFhDaGFyOwotIFVDSEFSICBZQ2hhcjsKLX0gWEdJX01vZGVSZXNJbmZvU3RydWN0OworIHVuc2lnbmVkIHNob3J0IEhUb3RhbDsKKyB1bnNpZ25lZCBzaG9ydCBWVG90YWw7CisgdW5zaWduZWQgY2hhciAgWENoYXI7CisgdW5zaWduZWQgY2hhciAgWUNoYXI7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX0xDRE5CRGVzU3RydWN0CitzdHJ1Y3QgWEdJX0xDRE5CRGVzU3RydWN0CiB7Ci0gIFVDSEFSIE5CWzEyXTsKLX0gWEdJX0xDRE5CRGVzU3RydWN0OworICB1bnNpZ25lZCBjaGFyIE5CWzEyXTsKK307CiAgLyphZGQgZm9yIG5ldyBVTklWR0FCSU9TKi8KLXR5cGVkZWYgc3RydWN0IF9YR0lfTENERGVzU3RydWN0CitzdHJ1Y3QgWEdJX0xDRERlc1N0cnVjdAogewotIFVTSE9SVCBMQ0RIREVTOwotIFVTSE9SVCBMQ0RIUlM7Ci0gVVNIT1JUIExDRFZERVM7Ci0gVVNIT1JUIExDRFZSUzsKLX0gWEdJX0xDRERlc1N0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIREVTOworIHVuc2lnbmVkIHNob3J0IExDREhSUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOworIHVuc2lnbmVkIHNob3J0IExDRFZSUzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTENERGF0YVRhYmxTdHJ1Y3QKK3N0cnVjdCBYR0lfTENERGF0YVRhYmxTdHJ1Y3QKIHsKLSBVQ0hBUiAgUEFORUxJRDsKLSBVU0hPUlQgTUFTSzsKLSBVU0hPUlQgQ0FQOwotIFVTSE9SVCBEQVRBUFRSOwotfSBYR0lfTENERGF0YVRhYmxTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciAgUEFORUxJRDsKKyB1bnNpZ25lZCBzaG9ydCBNQVNLOworIHVuc2lnbmVkIHNob3J0IENBUDsKKyB1bnNpZ25lZCBzaG9ydCBEQVRBUFRSOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9UVlRhYmxEYXRhU3RydWN0CitzdHJ1Y3QgWEdJX1RWVGFibERhdGFTdHJ1Y3QKIHsKLSBVU0hPUlQgTUFTSzsKLSBVU0hPUlQgQ0FQOwotIFVTSE9SVCBEQVRBUFRSOwotfSBYR0lfVFZEYXRhVGFibFN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBNQVNLOworIHVuc2lnbmVkIHNob3J0IENBUDsKKyB1bnNpZ25lZCBzaG9ydCBEQVRBUFRSOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9MQ0REZXNEYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QKIHsKLSBVU0hPUlQgTENESERFUzsKLSBVU0hPUlQgTENESFJTOwotIFVTSE9SVCBMQ0RWREVTOwotIFVTSE9SVCBMQ0RWUlM7Ci19IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0OworIHVuc2lnbmVkIHNob3J0IExDREhERVM7CisgdW5zaWduZWQgc2hvcnQgTENESFJTOworIHVuc2lnbmVkIHNob3J0IExDRFZERVM7CisgdW5zaWduZWQgc2hvcnQgTENEVlJTOworfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX0xWRFNEYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0CiB7Ci0gVVNIT1JUIFZHQUhUOwotIFVTSE9SVCBWR0FWVDsKLSBVU0hPUlQgTENESFQ7Ci0gVVNIT1JUIExDRFZUOwotfSBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3Q7CisgdW5zaWduZWQgc2hvcnQgVkdBSFQ7CisgdW5zaWduZWQgc2hvcnQgVkdBVlQ7CisgdW5zaWduZWQgc2hvcnQgTENESFQ7CisgdW5zaWduZWQgc2hvcnQgTENEVlQ7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX0xDRERlc0RhdGFTdHJ1Y3QyCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyCiB7Ci0gVVNIT1JUIExDREhERVM7Ci0gVVNIT1JUIExDREhSUzsKLSBVU0hPUlQgTENEVkRFUzsKLSBVU0hPUlQgTENEVlJTOwotIFVTSE9SVCBMQ0RIU3luYzsKLSBVU0hPUlQgTENEVlN5bmM7Ci19IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MjsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIREVTOworIHVuc2lnbmVkIHNob3J0IExDREhSUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWREVTOworIHVuc2lnbmVkIHNob3J0IExDRFZSUzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIU3luYzsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWU3luYzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfTENERGF0YVN0cnVjdAorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0CiB7Ci0gVVNIT1JUIFJWQkhDTUFYOwotIFVTSE9SVCBSVkJIQ0ZBQ1Q7Ci0gVVNIT1JUIFZHQUhUOwotIFVTSE9SVCBWR0FWVDsKLSBVU0hPUlQgTENESFQ7Ci0gVVNIT1JUIExDRFZUOwotfSBYR0kzMzBfTENERGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ01BWDsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIQ0ZBQ1Q7CisgdW5zaWduZWQgc2hvcnQgVkdBSFQ7CisgdW5zaWduZWQgc2hvcnQgVkdBVlQ7CisgdW5zaWduZWQgc2hvcnQgTENESFQ7CisgdW5zaWduZWQgc2hvcnQgTENEVlQ7Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfVFZEYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdAogewotIFVTSE9SVCBSVkJIQ01BWDsKLSBVU0hPUlQgUlZCSENGQUNUOwotIFVTSE9SVCBWR0FIVDsKLSBVU0hPUlQgVkdBVlQ7Ci0gVVNIT1JUIFRWSERFOwotIFVTSE9SVCBUVlZERTsKLSBVU0hPUlQgUlZCSFJTOwotIFVDSEFSIEZsaWNrZXJNb2RlOwotIFVTSE9SVCBIQUxGUlZCSFJTOwotfSBYR0kzMzBfVFZEYXRhU3RydWN0OworIHVuc2lnbmVkIHNob3J0IFJWQkhDTUFYOworIHVuc2lnbmVkIHNob3J0IFJWQkhDRkFDVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBUVkhERTsKKyB1bnNpZ25lZCBzaG9ydCBUVlZERTsKKyB1bnNpZ25lZCBzaG9ydCBSVkJIUlM7CisgdW5zaWduZWQgY2hhciBGbGlja2VyTW9kZTsKKyB1bnNpZ25lZCBzaG9ydCBIQUxGUlZCSFJTOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSTMzMF9MQ0REYXRhVGFibFN0cnVjdAorc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdAogewotIFVDSEFSICBQQU5FTElEOwotIFVTSE9SVCBNQVNLOwotIFVTSE9SVCBDQVA7Ci0gVVNIT1JUIERBVEFQVFI7Ci19IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdDsKKyB1bnNpZ25lZCBjaGFyICBQQU5FTElEOworIHVuc2lnbmVkIHNob3J0IE1BU0s7CisgdW5zaWduZWQgc2hvcnQgQ0FQOworIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdAogewotIFVTSE9SVCBNQVNLOwotIFVTSE9SVCBDQVA7Ci0gVVNIT1JUIERBVEFQVFI7Ci19IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0OworIHVuc2lnbmVkIHNob3J0IE1BU0s7CisgdW5zaWduZWQgc2hvcnQgQ0FQOworIHVuc2lnbmVkIHNob3J0IERBVEFQVFI7Cit9OwogCiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QKK3N0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QKIHsKLSBVU0hPUlQgVkdBSFQ7Ci0gVVNIT1JUIFZHQVZUOwotIFVTSE9SVCBMQ0RIVDsKLSBVU0hPUlQgTENEVlQ7Ci19IFhHSTMzMF9DSFRWRGF0YVN0cnVjdDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FIVDsKKyB1bnNpZ25lZCBzaG9ydCBWR0FWVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RIVDsKKyB1bnNpZ25lZCBzaG9ydCBMQ0RWVDsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfVGltaW5nSFN0cnVjdAorc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0CiB7Ci0gIFVDSEFSIGRhdGFbOF07Ci19IFhHSV9UaW1pbmdIU3RydWN0OworICB1bnNpZ25lZCBjaGFyIGRhdGFbOF07Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJX1RpbWluZ1ZTdHJ1Y3QKK3N0cnVjdCBYR0lfVGltaW5nVlN0cnVjdAogewotICBVQ0hBUiBkYXRhWzddOwotfSBYR0lfVGltaW5nVlN0cnVjdDsKKyAgdW5zaWduZWQgY2hhciBkYXRhWzddOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9DSDcwMDdUVl9UaW1pbmdIU3RydWN0CitzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ0hTdHJ1Y3QKIHsKLSAgVUNIQVIgZGF0YVsxMF07Ci19IFhHSV9DSDcwMDdUVl9UaW1pbmdIU3RydWN0OworICB1bnNpZ25lZCBjaGFyIGRhdGFbMTBdOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9DSDcwMDdUVl9UaW1pbmdWU3RydWN0CitzdHJ1Y3QgWEdJX0NINzAwN1RWX1RpbWluZ1ZTdHJ1Y3QKIHsKLSAgVUNIQVIgZGF0YVsxMF07Ci19IFhHSV9DSDcwMDdUVl9UaW1pbmdWU3RydWN0OworICB1bnNpZ25lZCBjaGFyIGRhdGFbMTBdOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9YRzIxQ1JUMVN0cnVjdAorc3RydWN0IFhHSV9YRzIxQ1JUMVN0cnVjdAogewotIFVDSEFSIE1vZGVJRCxDUjAyLENSMDMsQ1IxNSxDUjE2OwotfSBYR0lfWEcyMUNSVDFTdHJ1Y3Q7CisgdW5zaWduZWQgY2hhciBNb2RlSUQsIENSMDIsIENSMDMsIENSMTUsIENSMTY7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0CiB7Ci0gVUNIQVIgUmVnWzE2XTsKLX0gWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0OworIHVuc2lnbmVkIGNoYXIgUmVnWzE2XTsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMzBfTENEQ2FwU3RydWN0CitzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdAogewotIAkJVUNIQVIgICAgICBMQ0RfSUQ7Ci0gICAgICAgICAgICAgICAgVVNIT1JUICAgICBMQ0RfQ2FwYWJpbGl0eTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIExDRF9TZXRGbGFnOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENEX0RlbGF5Q29tcGVuc2F0aW9uOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENEX0hTeW5jV2lkdGg7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ0RfVlN5bmNXaWR0aDsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIExDRF9WQ0xLOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENEQV9WQ0xLRGF0YTE7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBMQ0RBX1ZDTEtEYXRhMjsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIExDVUNIQVJfVkNMS0RhdGExOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgTENVQ0hBUl9WQ0xLRGF0YTI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzE7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzM7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzQ7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzU7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQV0RfMkI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQV0RfMkM7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQV0RfMkQ7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQV0RfMkU7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQV0RfMkY7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBTcGVjdHJ1bV8zMTsKLSAgICAgICAgICAgICAgICBVQ0hBUiAgICAgIFNwZWN0cnVtXzMyOwotICAgICAgICAgICAgICAgIFVDSEFSICAgICAgU3BlY3RydW1fMzM7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBTcGVjdHJ1bV8zNDsKLX0gWEdJMzMwX0xDRENhcFN0cnVjdDsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RfSUQ7CisJCXVuc2lnbmVkIHNob3J0CSAgIExDRF9DYXBhYmlsaXR5OworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9TZXRGbGFnOworCQl1bnNpZ25lZCBjaGFyCSAgIExDRF9EZWxheUNvbXBlbnNhdGlvbjsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RfSFN5bmNXaWR0aDsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RfVlN5bmNXaWR0aDsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RfVkNMSzsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RBX1ZDTEtEYXRhMTsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ0RBX1ZDTEtEYXRhMjsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ1VDSEFSX1ZDTEtEYXRhMTsKKwkJdW5zaWduZWQgY2hhcgkgICBMQ1VDSEFSX1ZDTEtEYXRhMjsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzE7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MyOworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMzsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzQ7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1M1OworCQl1bnNpZ25lZCBjaGFyCSAgIFBXRF8yQjsKKwkJdW5zaWduZWQgY2hhcgkgICBQV0RfMkM7CisJCXVuc2lnbmVkIGNoYXIJICAgUFdEXzJEOworCQl1bnNpZ25lZCBjaGFyCSAgIFBXRF8yRTsKKwkJdW5zaWduZWQgY2hhcgkgICBQV0RfMkY7CisJCXVuc2lnbmVkIGNoYXIJICAgU3BlY3RydW1fMzE7CisJCXVuc2lnbmVkIGNoYXIJICAgU3BlY3RydW1fMzI7CisJCXVuc2lnbmVkIGNoYXIJICAgU3BlY3RydW1fMzM7CisJCXVuc2lnbmVkIGNoYXIJICAgU3BlY3RydW1fMzQ7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfWEdJMjFfTFZEU0NhcFN0cnVjdAorc3RydWN0IFhHSTIxX0xWRFNDYXBTdHJ1Y3QKIHsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNfQ2FwYWJpbGl0eTsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNIVDsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNWVDsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNIREU7Ci0gICAgICAgICAgICAgICAgVVNIT1JUICAgICBMVkRTVkRFOwotICAgICAgICAgICAgICAgIFVTSE9SVCAgICAgTFZEU0hGUDsKLSAgICAgICAgICAgICAgICBVU0hPUlQgICAgIExWRFNWRlA7Ci0gICAgICAgICAgICAgICAgVVNIT1JUICAgICBMVkRTSFNZTkM7Ci0gICAgICAgICAgICAgICAgVVNIT1JUICAgICBMVkRTVlNZTkM7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBWQ0xLRGF0YTE7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBWQ0xLRGF0YTI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzE7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzI7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzM7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzQ7Ci0gICAgICAgICAgICAgICAgVUNIQVIgICAgICBQU0NfUzU7Ci19IFhHSTIxX0xWRFNDYXBTdHJ1Y3Q7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNfQ2FwYWJpbGl0eTsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU0hUOworCQl1bnNpZ25lZCBzaG9ydAkgICBMVkRTVlQ7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNIREU7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNWREU7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNIRlA7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNWRlA7CisJCXVuc2lnbmVkIHNob3J0CSAgIExWRFNIU1lOQzsKKwkJdW5zaWduZWQgc2hvcnQJICAgTFZEU1ZTWU5DOworCQl1bnNpZ25lZCBjaGFyCSAgIFZDTEtEYXRhMTsKKwkJdW5zaWduZWQgY2hhcgkgICBWQ0xLRGF0YTI7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1MxOworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TMjsKKwkJdW5zaWduZWQgY2hhcgkgICBQU0NfUzM7CisJCXVuc2lnbmVkIGNoYXIJICAgUFNDX1M0OworCQl1bnNpZ25lZCBjaGFyCSAgIFBTQ19TNTsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfQ1JUMVRhYmxlU3RydWN0CitzdHJ1Y3QgWEdJX0NSVDFUYWJsZVN0cnVjdAogewotICBVQ0hBUiBDUlsxNl07Ci19IFhHSV9DUlQxVGFibGVTdHJ1Y3Q7CisgIHVuc2lnbmVkIGNoYXIgQ1JbMTZdOworfTsKIAogCi10eXBlZGVmIHN0cnVjdCBfWEdJMzMwX1ZDTEtEYXRhU3RydWN0CitzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0CiB7Ci0gICAgVUNIQVIgU1IyQixTUjJDOwotICAgIFVTSE9SVCBDTE9DSzsKLX0gWEdJMzMwX1ZDTEtEYXRhU3RydWN0OworICAgIHVuc2lnbmVkIGNoYXIgU1IyQiwgU1IyQzsKKyAgICB1bnNpZ25lZCBzaG9ydCBDTE9DSzsKK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QKK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QKIHsKLSAgICBVU0hPUlQgREU7Ci0gICAgVUNIQVIgIFJlZ1s2NF07ICAgLyogQzAtRkYgKi8KLX0gWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0OworICAgIHVuc2lnbmVkIHNob3J0IERFOworICAgIHVuc2lnbmVkIGNoYXIgIFJlZ1s2NF07ICAgLyogQzAtRkYgKi8KK307CiAKLXR5cGVkZWYgc3RydWN0IF9YR0lfTmV3X1N0YW5kVGFibGVTdHJ1Y3QKK3N0cnVjdCBYR0lfTmV3X1N0YW5kVGFibGVTdHJ1Y3QKIHsKLQlVQ0hBUiAgQ1JUX0NPTFM7Ci0JVUNIQVIgIFJPV1M7Ci0JVUNIQVIgIENIQVJfSEVJR0hUOwotCVVTSE9SVCBDUlRfTEVOOwotCVVDSEFSICBTUls0XTsKLQlVQ0hBUiAgTUlTQzsKLQlVQ0hBUiAgQ1JUQ1sweDE5XTsKLQlVQ0hBUiAgQVRUUlsweDE0XTsKLQlVQ0hBUiAgR1JDWzldOwotfSBYR0lfTmV3X1N0YW5kVGFibGVTdHJ1Y3Q7CisJdW5zaWduZWQgY2hhciAgQ1JUX0NPTFM7CisJdW5zaWduZWQgY2hhciAgUk9XUzsKKwl1bnNpZ25lZCBjaGFyICBDSEFSX0hFSUdIVDsKKwl1bnNpZ25lZCBzaG9ydCBDUlRfTEVOOworCXVuc2lnbmVkIGNoYXIgIFNSWzRdOworCXVuc2lnbmVkIGNoYXIgIE1JU0M7CisJdW5zaWduZWQgY2hhciAgQ1JUQ1sweDE5XTsKKwl1bnNpZ25lZCBjaGFyICBBVFRSWzB4MTRdOworCXVuc2lnbmVkIGNoYXIgIEdSQ1s5XTsKK307CiAKLXR5cGVkZWYgVUNIQVIgRFJBTThUeXBlWzhdOwotdHlwZWRlZiBVQ0hBUiBEUkFNNFR5cGVbNF07Ci10eXBlZGVmIFVDSEFSIERSQU0zMlR5cGVbMzJdOwotdHlwZWRlZiBVQ0hBUiBEUkFNMlR5cGVbMl07Ci0KLXR5cGVkZWYgc3RydWN0IF9WQl9ERVZJQ0VfSU5GTyAgVkJfREVWSUNFX0lORk87Ci10eXBlZGVmIFZCX0RFVklDRV9JTkZPICoJUFZCX0RFVklDRV9JTkZPOwotCi1zdHJ1Y3QgX1ZCX0RFVklDRV9JTkZPCitzdHJ1Y3QgdmJfZGV2aWNlX2luZm8KIHsKLSAgICBCT09MRUFOICBJU1hQRE9TOwotICAgIFVMT05HICAgUDNjNCxQM2Q0LFAzYzAsUDNjZSxQM2MyLFAzY2M7Ci0gICAgVUxPTkcgICBQM2NhLFAzYzYsUDNjNyxQM2M4LFAzYzksUDNkYTsKLSAgICBVTE9ORyAgIFBhcnQwUG9ydCxQYXJ0MVBvcnQsUGFydDJQb3J0OwotICAgIFVMT05HICAgUGFydDNQb3J0LFBhcnQ0UG9ydCxQYXJ0NVBvcnQ7Ci0gICAgVVNIT1JUICAgUlZCSENGQUNULFJWQkhDTUFYLFJWQkhSUzsKLSAgICBVU0hPUlQgICBWR0FWVCxWR0FIVCxWR0FWREUsVkdBSERFOwotICAgIFVTSE9SVCAgIFZULEhULFZERSxIREU7Ci0gICAgVVNIT1JUICAgTENESFJTLExDRFZSUyxMQ0RIREVTLExDRFZERVM7CisgICAgdW5zaWduZWQgY2hhciAgSVNYUERPUzsKKyAgICB1bnNpZ25lZCBsb25nICAgUDNjNCxQM2Q0LFAzYzAsUDNjZSxQM2MyLFAzY2M7CisgICAgdW5zaWduZWQgbG9uZyAgIFAzY2EsUDNjNixQM2M3LFAzYzgsUDNjOSxQM2RhOworICAgIHVuc2lnbmVkIGxvbmcgICBQYXJ0MFBvcnQsUGFydDFQb3J0LFBhcnQyUG9ydDsKKyAgICB1bnNpZ25lZCBsb25nICAgUGFydDNQb3J0LFBhcnQ0UG9ydCxQYXJ0NVBvcnQ7CisgICAgdW5zaWduZWQgc2hvcnQgICBSVkJIQ0ZBQ1QsUlZCSENNQVgsUlZCSFJTOworICAgIHVuc2lnbmVkIHNob3J0ICAgVkdBVlQsVkdBSFQsVkdBVkRFLFZHQUhERTsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIFZULEhULFZERSxIREU7CisgICAgdW5zaWduZWQgc2hvcnQgICBMQ0RIUlMsTENEVlJTLExDREhERVMsTENEVkRFUzsKIAotICAgIFVTSE9SVCAgIE1vZGVUeXBlOwotICAgIFVTSE9SVCAgIElGX0RFRl9MVkRTLElGX0RFRl9UUlVNUElPTixJRl9ERUZfRFNUTjsvKiAsSUZfREVGX0ZTVE47IGFkZCBmb3IgZHN0biAqLwotICAgIFVTSE9SVCAgIElGX0RFRl9DUlQyTW9uaXRvcixJRl9ERUZfVmlkZW9DYXB0dXJlOwotICAgIFVTSE9SVCAgIElGX0RFRl9MQ0RBLElGX0RFRl9DSDcwMTcsSUZfREVGX1lQYlByLElGX0RFRl9TY2FsZUxDRCxJRl9ERUZfT0VNVXRpbCxJRl9ERUZfUFdEOwotICAgIFVTSE9SVCAgIElGX0RFRl9FeHBMaW5rOwotICAgIFVTSE9SVCAgIElGX0RFRl9DSDcwMDUsSUZfREVGX0hpVmlzaW9uOwotICAgIFVTSE9SVCAgIElGX0RFRl9DSDcwMDc7IC8qIEJpbGx5IDIwMDcvMDUvMDMgKi8KLSAgICBVU0hPUlQgICBMQ0RSZXNJbmZvLExDRFR5cGVJbmZvLCBWQlR5cGU7LyozMDFiKi8KLSAgICBVU0hPUlQgICBWQkluZm8sVFZJbmZvLExDREluZm8sIFNldF9WR0FUeXBlOwotICAgIFVTSE9SVCAgIFZCRXh0SW5mbzsvKjMwMWx2Ki8KLSAgICBVU0hPUlQgICBTZXRGbGFnOwotICAgIFVTSE9SVCAgIE5ld0ZsaWNrZXJNb2RlOwotICAgIFVTSE9SVCAgIFNlbGVjdENSVDJSYXRlOworICAgIHVuc2lnbmVkIHNob3J0ICAgTW9kZVR5cGU7CisgICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfTFZEUyxJRl9ERUZfVFJVTVBJT04sSUZfREVGX0RTVE47LyogLElGX0RFRl9GU1ROOyBhZGQgZm9yIGRzdG4gKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DUlQyTW9uaXRvcixJRl9ERUZfVmlkZW9DYXB0dXJlOworICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0xDREEsSUZfREVGX0NINzAxNyxJRl9ERUZfWVBiUHIsSUZfREVGX1NjYWxlTENELElGX0RFRl9PRU1VdGlsLElGX0RFRl9QV0Q7CisgICAgdW5zaWduZWQgc2hvcnQgICBJRl9ERUZfRXhwTGluazsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIElGX0RFRl9DSDcwMDUsSUZfREVGX0hpVmlzaW9uOworICAgIHVuc2lnbmVkIHNob3J0ICAgSUZfREVGX0NINzAwNzsgLyogQmlsbHkgMjAwNy8wNS8wMyAqLworICAgIHVuc2lnbmVkIHNob3J0ICAgTENEUmVzSW5mbyxMQ0RUeXBlSW5mbywgVkJUeXBlOy8qMzAxYiovCisgICAgdW5zaWduZWQgc2hvcnQgICBWQkluZm8sVFZJbmZvLExDREluZm8sIFNldF9WR0FUeXBlOworICAgIHVuc2lnbmVkIHNob3J0ICAgVkJFeHRJbmZvOy8qMzAxbHYqLworICAgIHVuc2lnbmVkIHNob3J0ICAgU2V0RmxhZzsKKyAgICB1bnNpZ25lZCBzaG9ydCAgIE5ld0ZsaWNrZXJNb2RlOworICAgIHVuc2lnbmVkIHNob3J0ICAgU2VsZWN0Q1JUMlJhdGU7CiAKLSAgICBQVUNIQVIgUk9NQWRkcjsKLSAgICBQVUNIQVIgRkJBZGRyOwotICAgIFVMT05HIEJhc2VBZGRyOwotICAgIFVMT05HIFJlbElPOworICAgIHVuc2lnbmVkIGNoYXIgKlJPTUFkZHI7CisgICAgdW5zaWduZWQgY2hhciAqRkJBZGRyOworICAgIHVuc2lnbmVkIGxvbmcgQmFzZUFkZHI7CisgICAgdW5zaWduZWQgbG9uZyBSZWxJTzsKIAotICAgIERSQU00VHlwZSAgKkNSNkI7Ci0gICAgRFJBTTRUeXBlICAqQ1I2RTsKLSAgICBEUkFNMzJUeXBlICpDUjZGOwotICAgIERSQU0yVHlwZSAgKkNSODk7CisJdW5zaWduZWQgY2hhciAoKkNSNkIpWzRdOworCXVuc2lnbmVkIGNoYXIgKCpDUjZFKVs0XTsKKwl1bnNpZ25lZCBjaGFyICgqQ1I2RilbMzJdOworCXVuc2lnbmVkIGNoYXIgKCpDUjg5KVsyXTsKIAotICAgIERSQU04VHlwZSAgKlNSMTU7IC8qIHBvaW50ZXIgOiBwb2ludCB0byBhcnJheSAqLwotICAgIERSQU04VHlwZSAgKkNSNDA7Ci0gICAgVUNIQVIgICpwU29mdFNldHRpbmc7Ci0gICAgVUNIQVIgICpwT3V0cHV0U2VsZWN0OworCXVuc2lnbmVkIGNoYXIgKCpTUjE1KVs4XTsKKwl1bnNpZ25lZCBjaGFyICgqQ1I0MClbOF07CiAKLSAgICBVU0hPUlQgKnBSR0JTZW5zZURhdGE7Ci0gICAgVVNIT1JUICpwUkdCU2Vuc2VEYXRhMjsgLyozMDFiKi8KLSAgICBVU0hPUlQgKnBWaWRlb1NlbnNlRGF0YTsKLSAgICBVU0hPUlQgKnBWaWRlb1NlbnNlRGF0YTI7Ci0gICAgVVNIT1JUICpwWUNTZW5zZURhdGE7Ci0gICAgVVNIT1JUICpwWUNTZW5zZURhdGEyOworICAgIHVuc2lnbmVkIGNoYXIgICpwU29mdFNldHRpbmc7CisgICAgdW5zaWduZWQgY2hhciAgKnBPdXRwdXRTZWxlY3Q7CiAKLSAgICBVQ0hBUiAgKnBTUjA3OwotICAgIFVDSEFSICAqQ1I0OTsKLSAgICBVQ0hBUiAgKnBTUjFGOwotICAgIFVDSEFSICAqQUdQUmVnOwotICAgIFVDSEFSICAqU1IxNjsKLSAgICBVQ0hBUiAgKnBTUjIxOwotICAgIFVDSEFSICAqcFNSMjI7Ci0gICAgVUNIQVIgICpwU1IyMzsKLSAgICBVQ0hBUiAgKnBTUjI0OwotICAgIFVDSEFSICAqU1IyNTsKLSAgICBVQ0hBUiAgKnBTUjMxOwotICAgIFVDSEFSICAqcFNSMzI7Ci0gICAgVUNIQVIgICpwU1IzMzsKLSAgICBVQ0hBUiAgKnBTUjM2OyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIFVDSEFSICAqcENSQ0Y7Ci0gICAgVUNIQVIgICpwQ1JEMDsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KLSAgICBVQ0hBUiAgKnBDUkRFOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIFVDSEFSICAqcENSOEY7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCi0gICAgVUNIQVIgICpwU1I0MDsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KLSAgICBVQ0hBUiAgKnBTUjQxOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLwotICAgIFVDSEFSICAqcERWT1NldHRpbmc7Ci0gICAgVUNIQVIgICpwQ1IyRTsKLSAgICBVQ0hBUiAgKnBDUjJGOwotICAgIFVDSEFSICAqcENSNDY7Ci0gICAgVUNIQVIgICpwQ1I0NzsKLSAgICBVQ0hBUiAgKnBDUlQyRGF0YV8xXzI7Ci0gICAgVUNIQVIgICpwQ1JUMkRhdGFfNF9EOwotICAgIFVDSEFSICAqcENSVDJEYXRhXzRfRTsKLSAgICBVQ0hBUiAgKnBDUlQyRGF0YV80XzEwOwotICAgIFhHSV9NQ0xLRGF0YVN0cnVjdCAgKk1DTEtEYXRhOwotICAgIFhHSV9FQ0xLRGF0YVN0cnVjdCAgKkVDTEtEYXRhOworICAgIHVuc2lnbmVkIHNob3J0ICpwUkdCU2Vuc2VEYXRhOworICAgIHVuc2lnbmVkIHNob3J0ICpwUkdCU2Vuc2VEYXRhMjsgLyozMDFiKi8KKyAgICB1bnNpZ25lZCBzaG9ydCAqcFZpZGVvU2Vuc2VEYXRhOworICAgIHVuc2lnbmVkIHNob3J0ICpwVmlkZW9TZW5zZURhdGEyOworICAgIHVuc2lnbmVkIHNob3J0ICpwWUNTZW5zZURhdGE7CisgICAgdW5zaWduZWQgc2hvcnQgKnBZQ1NlbnNlRGF0YTI7CiAKLSAgICBVQ0hBUiAgICpYR0lfVFZEZWxheUxpc3Q7Ci0gICAgVUNIQVIgICAqWEdJX1RWRGVsYXlMaXN0MjsKLSAgICBVQ0hBUiAgICpDSFRWVkNMS1VOVFNDOwotICAgIFVDSEFSICAgKkNIVFZWQ0xLT05UU0M7Ci0gICAgVUNIQVIgICAqQ0hUVlZDTEtVUEFMOwotICAgIFVDSEFSICAgKkNIVFZWQ0xLT1BBTDsKLSAgICBVQ0hBUiAgICpOVFNDVGltaW5nOwotICAgIFVDSEFSICAgKlBBTFRpbWluZzsKLSAgICBVQ0hBUiAgICpIaVRWRXh0VGltaW5nOwotICAgIFVDSEFSICAgKkhpVFZTdDFUaW1pbmc7Ci0gICAgVUNIQVIgICAqSGlUVlN0MlRpbWluZzsKLSAgICBVQ0hBUiAgICpIaVRWVGV4dFRpbWluZzsKLSAgICBVQ0hBUiAgICpZUGJQcjc1MHBUaW1pbmc7Ci0gICAgVUNIQVIgICAqWVBiUHI1MjVwVGltaW5nOwotICAgIFVDSEFSICAgKllQYlByNTI1aVRpbWluZzsKLSAgICBVQ0hBUiAgICpIaVRWR3JvdXAzRGF0YTsKLSAgICBVQ0hBUiAgICpIaVRWR3JvdXAzU2ltdTsKLSAgICBVQ0hBUiAgICpIaVRWR3JvdXAzVGV4dDsKLSAgICBVQ0hBUiAgICpSZW41MjVwR3JvdXAzOwotICAgIFVDSEFSICAgKlJlbjc1MHBHcm91cDM7Ci0gICAgVUNIQVIgICAqU2NyZWVuT2Zmc2V0OwotICAgIFVDSEFSICAgKnBYR0lOZXdfRFJBTVR5cGVEZWZpbml0aW9uOwotICAgIFVDSEFSICAgKnBYR0lOZXdfSTJDRGVmaW5pdGlvbiA7Ci0gICAgVUNIQVIgICAqcFhHSU5ld19DUjk3IDsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMDc7CisgICAgdW5zaWduZWQgY2hhciAgKkNSNDk7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjFGOworICAgIHVuc2lnbmVkIGNoYXIgICpBR1BSZWc7CisgICAgdW5zaWduZWQgY2hhciAgKlNSMTY7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjIxOworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IyMjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMjM7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjI0OworICAgIHVuc2lnbmVkIGNoYXIgICpTUjI1OworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IzMTsKKyAgICB1bnNpZ25lZCBjaGFyICAqcFNSMzI7CisgICAgdW5zaWduZWQgY2hhciAgKnBTUjMzOworICAgIHVuc2lnbmVkIGNoYXIgICpwU1IzNjsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAqcENSQ0Y7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUkQwOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JERTsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAqcENSOEY7ICAgICAgLyogYWxhbiAxMi8wNy8yMDA2ICovCisgICAgdW5zaWduZWQgY2hhciAgKnBTUjQwOyAgICAgIC8qIGFsYW4gMTIvMDcvMjAwNiAqLworICAgIHVuc2lnbmVkIGNoYXIgICpwU1I0MTsgICAgICAvKiBhbGFuIDEyLzA3LzIwMDYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAqcERWT1NldHRpbmc7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUjJFOworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1IyRjsKKyAgICB1bnNpZ25lZCBjaGFyICAqcENSNDY7CisgICAgdW5zaWduZWQgY2hhciAgKnBDUjQ3OworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JUMkRhdGFfMV8yOworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JUMkRhdGFfNF9EOworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JUMkRhdGFfNF9FOworICAgIHVuc2lnbmVkIGNoYXIgICpwQ1JUMkRhdGFfNF8xMDsKKyAgICBzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0ICAqTUNMS0RhdGE7CisgICAgc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCAgKkVDTEtEYXRhOwogCi0gICAgWEdJMzMwX0xDRENhcFN0cnVjdCAgKkxDRENhcExpc3Q7Ci0gICAgWEdJMjFfTFZEU0NhcFN0cnVjdCAgKlhHMjFfTFZEU0NhcExpc3Q7CisgICAgdW5zaWduZWQgY2hhciAgICpYR0lfVFZEZWxheUxpc3Q7CisgICAgdW5zaWduZWQgY2hhciAgICpYR0lfVFZEZWxheUxpc3QyOworICAgIHVuc2lnbmVkIGNoYXIgICAqQ0hUVlZDTEtVTlRTQzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkNIVFZWQ0xLT05UU0M7CisgICAgdW5zaWduZWQgY2hhciAgICpDSFRWVkNMS1VQQUw7CisgICAgdW5zaWduZWQgY2hhciAgICpDSFRWVkNMS09QQUw7CisgICAgdW5zaWduZWQgY2hhciAgICpOVFNDVGltaW5nOworICAgIHVuc2lnbmVkIGNoYXIgICAqUEFMVGltaW5nOworICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVkV4dFRpbWluZzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZTdDFUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpIaVRWU3QyVGltaW5nOworICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVlRleHRUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpZUGJQcjc1MHBUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpZUGJQcjUyNXBUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpZUGJQcjUyNWlUaW1pbmc7CisgICAgdW5zaWduZWQgY2hhciAgICpIaVRWR3JvdXAzRGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICAgKkhpVFZHcm91cDNTaW11OworICAgIHVuc2lnbmVkIGNoYXIgICAqSGlUVkdyb3VwM1RleHQ7CisgICAgdW5zaWduZWQgY2hhciAgICpSZW41MjVwR3JvdXAzOworICAgIHVuc2lnbmVkIGNoYXIgICAqUmVuNzUwcEdyb3VwMzsKKyAgICB1bnNpZ25lZCBjaGFyICAgKlNjcmVlbk9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKnBYR0lOZXdfRFJBTVR5cGVEZWZpbml0aW9uOworICAgIHVuc2lnbmVkIGNoYXIgICAqcFhHSU5ld19JMkNEZWZpbml0aW9uIDsKKyAgICB1bnNpZ25lZCBjaGFyICAgKnBYR0lOZXdfQ1I5NyA7CiAKLSAgICBYR0lfVGltaW5nSFN0cnVjdCAgKlRpbWluZ0g7Ci0gICAgWEdJX1RpbWluZ1ZTdHJ1Y3QgICpUaW1pbmdWOworICAgIHN0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICAqTENEQ2FwTGlzdDsKKyAgICBzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCAgKlhHMjFfTFZEU0NhcExpc3Q7CiAKLSAgICBYR0lfU3RTdHJ1Y3QgICAgICAgICAgKlNNb2RlSURUYWJsZTsKLSAgICBYR0lfU3RhbmRUYWJsZVN0cnVjdCAgKlN0YW5kVGFibGU7Ci0gICAgWEdJX0V4dFN0cnVjdCAgICAgICAgICpFTW9kZUlEVGFibGU7Ci0gICAgWEdJX0V4dDJTdHJ1Y3QgICAgICAgICpSZWZJbmRleDsKKyAgICBzdHJ1Y3QgWEdJX1RpbWluZ0hTdHJ1Y3QgICpUaW1pbmdIOworICAgIHN0cnVjdCBYR0lfVGltaW5nVlN0cnVjdCAgKlRpbWluZ1Y7CisKKyAgICBzdHJ1Y3QgWEdJX1N0U3RydWN0ICAgICAgICAgICpTTW9kZUlEVGFibGU7CisgICAgc3RydWN0IFhHSV9TdGFuZFRhYmxlU3RydWN0ICAqU3RhbmRUYWJsZTsKKyAgICBzdHJ1Y3QgWEdJX0V4dFN0cnVjdCAgICAgICAgICpFTW9kZUlEVGFibGU7CisgICAgc3RydWN0IFhHSV9FeHQyU3RydWN0ICAgICAgICAqUmVmSW5kZXg7CiAgICAgLyogWEdJTmV3X0NSVDFUYWJsZVN0cnVjdCAqQ1JUMVRhYmxlOyAqLwotICAgIFhHSV9DUlQxVGFibGVTdHJ1Y3QgICAgKlhHSU5FV1VCX0NSVDFUYWJsZTsKLSAgICBYR0lfVkNMS0RhdGFTdHJ1Y3QgICAgKlZDTEtEYXRhOwotICAgIFhHSV9WQlZDTEtEYXRhU3RydWN0ICAqVkJWQ0xLRGF0YTsKLSAgICBYR0lfU3RSZXNJbmZvU3RydWN0ICAgKlN0UmVzSW5mbzsKLSAgICBYR0lfTW9kZVJlc0luZm9TdHJ1Y3QgKk1vZGVSZXNJbmZvOwotICAgIFhHSV9YRzIxQ1JUMVN0cnVjdAkgICpVcGRhdGVDUlQxOwotfTsgIC8qIF9WQl9ERVZJQ0VfSU5GTyAqLworICAgIHN0cnVjdCBYR0lfQ1JUMVRhYmxlU3RydWN0ICAgICpYR0lORVdVQl9DUlQxVGFibGU7CisgICAgc3RydWN0IFhHSV9WQ0xLRGF0YVN0cnVjdCAgICAqVkNMS0RhdGE7CisgICAgc3RydWN0IFhHSV9WQlZDTEtEYXRhU3RydWN0ICAqVkJWQ0xLRGF0YTsKKyAgICBzdHJ1Y3QgWEdJX1N0UmVzSW5mb1N0cnVjdCAgICpTdFJlc0luZm87CisgICAgc3RydWN0IFhHSV9Nb2RlUmVzSW5mb1N0cnVjdCAqTW9kZVJlc0luZm87CisgICAgc3RydWN0IFhHSV9YRzIxQ1JUMVN0cnVjdAkgICpVcGRhdGVDUlQxOworfTsgIC8qIF9zdHJ1Y3QgdmJfZGV2aWNlX2luZm8gKi8KIAogCi10eXBlZGVmIHN0cnVjdAorc3RydWN0IFRpbWluZ0luZm8KIHsKLSAgICBVU0hPUlQgICAgSG9yaXpvbnRhbF9BQ1RJVkU7Ci0gICAgVVNIT1JUICAgIEhvcml6b250YWxfRlA7Ci0gICAgVVNIT1JUICAgIEhvcml6b250YWxfU1lOQzsKLSAgICBVU0hPUlQgICAgSG9yaXpvbnRhbF9CUDsKLSAgICBVU0hPUlQgICAgVmVydGljYWxfQUNUSVZFOwotICAgIFVTSE9SVCAgICBWZXJ0aWNhbF9GUDsKLSAgICBVU0hPUlQgICAgVmVydGljYWxfU1lOQzsKLSAgICBVU0hPUlQgICAgVmVydGljYWxfQlA7CisgICAgdW5zaWduZWQgc2hvcnQgICAgSG9yaXpvbnRhbF9BQ1RJVkU7CisgICAgdW5zaWduZWQgc2hvcnQgICAgSG9yaXpvbnRhbF9GUDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBIb3Jpem9udGFsX1NZTkM7CisgICAgdW5zaWduZWQgc2hvcnQgICAgSG9yaXpvbnRhbF9CUDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9BQ1RJVkU7CisgICAgdW5zaWduZWQgc2hvcnQgICAgVmVydGljYWxfRlA7CisgICAgdW5zaWduZWQgc2hvcnQgICAgVmVydGljYWxfU1lOQzsKKyAgICB1bnNpZ25lZCBzaG9ydCAgICBWZXJ0aWNhbF9CUDsKICAgICBkb3VibGUgICAgRENMSzsKLSAgICBVQ0hBUiAgICAgRnJhbWVSYXRlOwotICAgIFVDSEFSICAgICBJbnRlcmxhY2U7Ci0gICAgVVNIT1JUICAgIE1hcmdpbjsKLX0gVGltaW5nSW5mbzsKKyAgICB1bnNpZ25lZCBjaGFyICAgICBGcmFtZVJhdGU7CisgICAgdW5zaWduZWQgY2hhciAgICAgSW50ZXJsYWNlOworICAgIHVuc2lnbmVkIHNob3J0ICAgIE1hcmdpbjsKK307CiAKICNkZWZpbmUgX1ZCX1NUUlVDVF8KICNlbmRpZiAvKiBfVkJfU1RSVUNUXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3RhYmxlLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaAppbmRleCA3ODFjYWVmLi41MTBlZjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdGFibGUuaApAQCAtMSw3ICsxLDcgQEAKICNkZWZpbmUgIFRhcDQKIAogCi1YR0lfTUNMS0RhdGFTdHJ1Y3QgWEdJMzMwTmV3X01DTEtEYXRhW109CitzdHJ1Y3QgWEdJX01DTEtEYXRhU3RydWN0IFhHSTMzME5ld19NQ0xLRGF0YVtdID0KIHsKICB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCiAgeyAweDVjLDB4MjMsMHgwMSwxNjZ9LApAQCAtMTMsNyArMTMsNyBAQAogIHsgMHgyOSwweDAxLDB4ODEsMzAwfQogfTsKIC8veWlsaW4gbW9kaWZ5IGZvciB4Z2kyMAotWEdJX01DTEtEYXRhU3RydWN0IFhHSTM0ME5ld19NQ0xLRGF0YVtdPQorc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kzNDBOZXdfTUNMS0RhdGFbXSA9CiB7CiAgeyAweDE2LDB4MDEsMHgwMSwxNjZ9LAogIHsgMHgxOSwweDAyLDB4MDEsMTI0fSwKQEAgLTI1LDcgKzI1LDcgQEAKICB7IDB4NWMsMHgyMywweDAxLDE2Nn0KIH07CiAKLVhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kyN05ld19NQ0xLRGF0YVtdPQorc3RydWN0IFhHSV9NQ0xLRGF0YVN0cnVjdCBYR0kyN05ld19NQ0xLRGF0YVtdID0KIHsKICB7IDB4NWMsMHgyMywweDAxLDE2Nn0sCiAgeyAweDE5LDB4MDIsMHgwMSwxMjR9LApAQCAtMzcsNyArMzcsNyBAQAogIHsgMHg1YywweDIzLDB4MDEsMTY2fQogfTsKIAotWEdJX0VDTEtEYXRhU3RydWN0IFhHSTMzMF9FQ0xLRGF0YVtdPQorc3RydWN0IFhHSV9FQ0xLRGF0YVN0cnVjdCBYR0kzMzBfRUNMS0RhdGFbXSA9CiB7CiAgeyAweDdjLDB4MDgsMHgwMSwyMDB9LAogIHsgMHg3YywweDA4LDB4MDEsMjAwfSwKQEAgLTQ5LDcgKzQ5LDcgQEAKICB7IDB4MjksMHgwMSwweDgxLDMwMH0KIH07CiAvL3lpbGluIG1vZGlmeSBmb3IgeGdpMjAKLVhHSV9FQ0xLRGF0YVN0cnVjdCBYR0kzNDBfRUNMS0RhdGFbXT0KK3N0cnVjdCBYR0lfRUNMS0RhdGFTdHJ1Y3QgWEdJMzQwX0VDTEtEYXRhW10gPQogewogIHsgMHg1YywweDIzLDB4MDEsMTY2fSwKICB7IDB4NTUsMHg4NCwweDAxLDEyM30sCkBAIC02MywxNCArNjMsMTQgQEAKIAogCiAKLVVDSEFSIFhHSTM0MF9TUjEzWzRdWzhdPXsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX1NSMTNbNF1bOF0gPSB7CiB7MHgzNSwweDQ1LDB4YjEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiBTUjEzICovCiB7MHg0MSwweDUxLDB4NWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiBTUjE0ICovCiB7MHgzMSwweDQyLDB4NDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiBTUjE4ICovCiB7MHgwMywweDAzLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfS8qIFNSMUIgKi8KIH07CiAKLVVDSEFSIFhHSTM0MF9jcjQxWzI0XVs4XT0KK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX2NyNDFbMjRdWzhdID0KIHt7MHgyMCwweDUwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAwIENSNDEgKi8KIHsweGM0LDB4NDAsMHg4NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEgQ1I4QSAqLwogezB4YzQsMHg0MCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMiBDUjhCICovCkBAIC05OCw3ICs5OCw3IEBACiB9OwogCiAKLVVDSEFSIFhHSTI3X2NyNDFbMjRdWzhdPQordW5zaWduZWQgY2hhciBYR0kyN19jcjQxWzI0XVs4XSA9CiB7CiB7MHgyMCwweDQwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAwIENSNDEgKi8KIHsweEM0LDB4NDAsMHg4NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEgQ1I4QSAqLwpAQCAtMTI2LDM3ICsxMjYsNyBAQAogezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0vKiAyMyBDUkM1ICovCiB9OwogCi0KLSNpZiAwCi1VQ0hBUiBYR0kyN19jcjQxWzI0XVs4XT0KLXsKLXsweDIwLDB4NjAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDAgQ1I0MSAqLwotezB4MDQsMHg0NCwweDg0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogMSBDUjhBICovCi17MHgwNCwweDQwLDB4ODQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiAyIENSOEIgKi8KLXsweGI1LDB4MDMsMHhhNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDMgQ1I0MFs3XSxDUjk5WzI6MF0sQ1I0NVszOjBdKi8KLXsweGYwLDB4ZjUsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDQgQ1I1OSAqLwotezB4YTQsMHgxQywweDI0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogNSBDUjY4ICovCi17MHg3NywweDc3LDB4NDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA2IENSNjkgKi8KLXsweDc3LDB4NzcsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDcgQ1I2QSAqLwotezB4ZmYsMHhmZiwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sLyogOCBDUjZEICovCi17MHg1NSwweDU1LDB4NTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwvKiA5IENSODAgKi8KLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEwIENSODEgKi8KLXsweDQ4LDB4YTgsMHg0OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDExIENSODIgKi8KLXsweDc3LDB4ODgsMHg3NywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEyIENSODUgKi8KLXsweDg4LDB4ODgsMHg4OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDEzIENSODYgKi8KLXsweDQ0LDB4MzIsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE0IENSOTAgKi8KLXsweDQ0LDB4MzMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE1IENSOTEgKi8KLXsweDA3LDB4MDcsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE2IENSOTIgKi8KLXsweDQ0LDB4NjMsMHg0NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE3IENSOTMgKi8KLXsweDBBLDB4MTQsMHgwQSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE4IENSOTQgKi8KLXsweDBDLDB4MEIsMHgwQywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDE5IENSOTUgKi8KLXsweDA1LDB4MjIsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIwIENSOTYgKi8KLXsweGYwLDB4ZjAsMHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIxIENSQzMgKi8KLXsweDAzLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LC8qIDIyIENSQzQgKi8KLXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LyogMjMgQ1JDNSAqLwotfTsKLSNlbmRpZgotVUNIQVIgWEdJMzQwX0NSNkJbOF1bNF09ewordW5zaWduZWQgY2hhciBYR0kzNDBfQ1I2Qls4XVs0XSA9IHsKIHsweGFhLDB4YWEsMHhhYSwweGFhfSwKIHsweGFhLDB4YWEsMHhhYSwweGFhfSwKIHsweGFhLDB4YWEsMHhhYSwweGFhfSwKQEAgLTE2Nyw3ICsxMzcsNyBAQAogezB4MDAsMHgwMCwweDAwLDB4MDB9CiB9OwogCi1VQ0hBUiBYR0kzNDBfQ1I2RVs4XVs0XT17Cit1bnNpZ25lZCBjaGFyIFhHSTM0MF9DUjZFWzhdWzRdID0gewogezB4MDAsMHgwMCwweDAwLDB4MDB9LAogezB4MDAsMHgwMCwweDAwLDB4MDB9LAogezB4MDAsMHgwMCwweDAwLDB4MDB9LApAQCAtMTc4LDcgKzE0OCw3IEBACiB7MHgwMCwweDAwLDB4MDAsMHgwMH0KIH07CiAKLVVDSEFSIFhHSTM0MF9DUjZGWzhdWzMyXT17Cit1bnNpZ25lZCBjaGFyIFhHSTM0MF9DUjZGWzhdWzMyXSA9IHsKIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAogezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCiB7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKQEAgLTE4OSw3ICsxNTksNyBAQAogezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0KIH07CiAKLVVDSEFSIFhHSTM0MF9DUjg5WzhdWzJdPXsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX0NSODlbOF1bMl0gPSB7CiB7MHgwMCwweDAwfSwKIHsweDAwLDB4MDB9LAogezB4MDAsMHgwMH0sCkBAIC0yMDAsMTEgKzE3MCwxMiBAQAogezB4MDAsMHgwMH0KIH07CiAJCQkgLyogQ1I0NyxDUjQ4LENSNDksQ1I0QSxDUjRCLENSNEMsQ1I3MCxDUjcxLENSNzQsQ1I3NSxDUjc2LENSNzcgKi8KLVVDSEFSIFhHSTM0MF9BR1BSZWdbMTJdPXsweDI4LDB4MjMsMHgwMCwweDIwLDB4MDAsMHgyMCwweDAwLDB4MDUsMHhkMCwweDEwLDB4MTAsMHgwMH07Cit1bnNpZ25lZCBjaGFyIFhHSTM0MF9BR1BSZWdbMTJdID0gezB4MjgsIDB4MjMsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjAsIDB4MDAsCisJCQkJICAgMHgwNSwgMHhkMCwgMHgxMCwgMHgxMCwgMHgwMH07CiAKLVVDSEFSIFhHSTM0MF9TUjE2WzRdPXsweDAzLDB4ODMsMHgwMywweDgzfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzQwX1NSMTZbNF0gPSB7MHgwMywgMHg4MywgMHgwMywgMHg4M307CiAKLVVDSEFSIFhHSTMzMF9TUjE1XzFbOF1bOF09ewordW5zaWduZWQgY2hhciBYR0kzMzBfU1IxNV8xWzhdWzhdID0gewogezB4MCwweDAsMHgwMCwweDAwLDB4MjAsMHgyMCwweDAwLDB4MDB9LAogezB4NSwweDE1LDB4MTUsMHgxNSwweDE1LDB4MTUsMHgwMCwweDAwfSwKIHsweGJhLDB4YmEsMHhiYSwweGJhLDB4QkEsMHhCQSwweDAwLDB4MDB9LApAQCAtMjE1LDcgKzE4Niw3IEBACiB7MHgwLDB4YTUsMHhmYiwweGY2LDB4RjYsMHhGNiwweDAwLDB4MDB9CiB9OwogCi1VQ0hBUiBYR0kzMzBfY3I0MF8xWzE1XVs4XT17Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9jcjQwXzFbMTVdWzhdID0gewogezB4NjYsMHg0MCwweDQwLDB4MjgsMHgyNCwweDI0LDB4MDAsMHgwMH0sCiB7MHg2NiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKIHsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LApAQCAtMjMzLDE0ICsyMDQsMTQgQEAKIHsweDAwLDB4QTIsMHgwMCwweDAwLDB4QTIsMHhBMiwweDAwLDB4MDB9LAogfTsKIAotVUNIQVIgWEdJMzMwX3NyMjVbXT17MHgwMCwweDB9OwotVUNIQVIgWEdJMzMwX3NyMzE9MHhjMDsKLVVDSEFSIFhHSTMzMF9zcjMyPTB4MTE7Ci1VQ0hBUiBYR0kzMzBfU1IzMz0weDAwOwotVUNIQVIgWEc0MF9DUkNGPTB4MTM7Ci1VQ0hBUiBYRzQwX0RSQU1UeXBlRGVmaW5pdGlvbj0weEZGIDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX3NyMjVbXSA9IHsweDAwLCAweDB9OwordW5zaWduZWQgY2hhciBYR0kzMzBfc3IzMSA9IDB4YzA7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9zcjMyID0gMHgxMTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NSMzMgPSAweDAwOwordW5zaWduZWQgY2hhciBYRzQwX0NSQ0YgPSAweDEzOwordW5zaWduZWQgY2hhciBYRzQwX0RSQU1UeXBlRGVmaW5pdGlvbiA9IDB4RkYgOwogCi1YR0lfU3RTdHJ1Y3QgWEdJMzMwX1NNb2RlSURUYWJsZVtdPQorc3RydWN0IFhHSV9TdFN0cnVjdCBYR0kzMzBfU01vZGVJRFRhYmxlW10gPQogewogIHsweDAxLDB4OTIwOCwweDAxLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMSwweDAwfSwKICB7MHgwMSwweDEyMTAsMHgxNCwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDEsMHgwMH0sCkBAIC0yNjUsNyArMjM2LDcgQEAKIH07CiAKIAotWEdJX0V4dFN0cnVjdCAgWEdJMzMwX0VNb2RlSURUYWJsZVtdPQorc3RydWN0IFhHSV9FeHRTdHJ1Y3QgIFhHSTMzMF9FTW9kZUlEVGFibGVbXSA9CiB7CiAgezB4NmEsMHgyMjEyLDB4MDQwNywweDNhODEsMHgwMTAyLDB4MDgsMHgwNywweDAwLDB4MDAsMHgwNywweDBlfSwKICB7MHgyZSwweDBhMWIsMHgwMzA2LDB4M2E1NywweDAxMDEsMHgwOCwweDA2LDB4MDAsMHgwMCwweDA1LDB4MDZ9LApAQCAtMzM3LDcgKzMwOCw3IEBACiAgezB4ZmYsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfQogfTsKIAotWEdJX1N0YW5kVGFibGVTdHJ1Y3QgWEdJMzMwX1N0YW5kVGFibGVbXT0KK3N0cnVjdCBYR0lfU3RhbmRUYWJsZVN0cnVjdCBYR0kzMzBfU3RhbmRUYWJsZVtdID0KIHsKIC8qIE1EXzBfMjAwICovCiAgewpAQCAtNzc1LDEzICs3NDYsMTMgQEAKICB9CiB9OwogCi1YR0lfVGltaW5nSFN0cnVjdCBYR0lfVGltaW5nSFtdPQorc3RydWN0IFhHSV9UaW1pbmdIU3RydWN0IFhHSV9UaW1pbmdIW10gPQoge3t7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfX19OwogCi1YR0lfVGltaW5nVlN0cnVjdCBYR0lfVGltaW5nVltdPQorc3RydWN0IFhHSV9UaW1pbmdWU3RydWN0IFhHSV9UaW1pbmdWW10gPQoge3t7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH19fTsKIAotWEdJX1hHMjFDUlQxU3RydWN0IFhHSV9VcGRhdGVDUlQxVGFibGVbXT0KK3N0cnVjdCBYR0lfWEcyMUNSVDFTdHJ1Y3QgWEdJX1VwZGF0ZUNSVDFUYWJsZVtdID0KIHsKICB7MHgwMSwweDI3LDB4OTEsMHg4ZiwweGMwfSwJLyogMDAgKi8KICB7MHgwMywweDRmLDB4ODMsMHg4ZiwweGMwfSwJLyogMDEgKi8KQEAgLTgwMiw3ICs3NzMsNyBAQAogIHsweDU5LDB4MjcsMHg5MSwweDhmLDB4YzB9CS8qIDE2ICovCiB9OwogCi1YR0lfQ1JUMVRhYmxlU3RydWN0IFhHSV9DUlQxVGFibGVbXT0KK3N0cnVjdCBYR0lfQ1JUMVRhYmxlU3RydWN0IFhHSV9DUlQxVGFibGVbXSA9CiB7CiAge3sweDJkLDB4MjgsMHg5MCwweDJjLDB4OTAsMHgwMCwweDA0LDB4MDAsCiAgICAgMHhiZiwweDFmLDB4OWMsMHg4ZSwweDk2LDB4YjksMHgzMH19LCAvKiAweDAgKi8KQEAgLTk1MCw3ICs5MjEsNyBAQAogICAgIDB4MDMsMHhERSwweEMwLDB4ODQsMHhCRiwweDA0LDB4OTB9fSAgLyogMHg0NyAqLwogfTsKIAotWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnVU5UU0NbXSA9IHsKK3N0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdVTlRTQ1tdID0gewogICAgICAgICAgICAgICAgIC8qIEluZGV4OjAwMGgsMDAxaCwwMDJoLDAwNGgsMDAzaCwwMDVoLDAwNmgsMDA3aCwwMDhoLDAxNWgsMDFGaCwwMENoLDAwRGgsMDBFaCwwMEZoLDAxMGggKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NEEsMHg3NywweEJCLDB4OTQsMHg4NCwweDQ4LDB4RkUsMHg1MCwweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDAwICg2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDRBLDB4NzcsMHhCQiwweDk0LDB4ODQsMHg0OCwweEZFLDB4NTAsMHgwNCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxICB9fSwvKiAwMSAoNjQweDM1MCkgKi8KQEAgLTk2MSw3ICs5MzIsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhFRSwweDc3LDB4QkIsMHg2NiwweDg3LDB4MzIsMHgwMSwweDVBLDB4MDQsMHgwMCwweDgwLDB4MUIsMHhENCwweDJGLDB4NkYsMHgwMCAgfX0vKiAwNiAoMTAyNHg3NjgpIDs7NS82LzAyICovCiAgICAgICAgICAgfTsKIAotWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnT05UU0NbXT0geworc3RydWN0IFhHSTMzMF9DSFRWUmVnRGF0YVN0cnVjdCBYR0lfQ0hUVlJlZ09OVFNDW10gPSB7CiAgICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwaCwwMDFoLDAwMmgsMDA0aCwwMDNoLDAwNWgsMDA2aCwwMDdoLDAwOGgsMDE1aCwwMUZoLDAwQ2gsMDBEaCwwMEVoLDAwRmgsMDEwaCAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0OSwweDc3LDB4QkIsMHg3QiwweDg0LDB4MzQsMHgwMCwweDUwLDB4MDQsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSAgfX0sLyogMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDksMHg3NywweEJCLDB4N0IsMHg4NCwweDM0LDB4MDAsMHg1MCwweDA0LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDAxICg2NDB4MzUwKSAqLwpAQCAtOTcyLDcgKzk0Myw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweEVELDB4NzcsMHhCQiwweDY2LDB4OEMsMHgyMSwweDAyLDB4NUEsMHgwNCwweDAwLDB4ODAsMHgxRiwweEEwLDB4N0UsMHg3MywweDAwICB9fS8qIDA2ICgxMDI0eDc2OCkgOzs1LzYvMDIgKi8KICAgICAgICAgICB9OwogCi1YR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdVUEFMW109ICB7CitzdHJ1Y3QgWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnVVBBTFtdID0gewogICAgICAgICAgICAgICAgIC8qIEluZGV4OjAwMGgsMDAxaCwwMDJoLDAwNGgsMDAzaCwwMDVoLDAwNmgsMDA3aCwwMDhoLDAxNWgsMDFGaCwwMENoLDAwRGgsMDBFaCwwMEZoLDAxMGggKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDEsMHg3RiwweEI3LDB4MzQsMHhBRCwweDUwLDB4MzQsMHg4MywweDA1LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDsgMDAgKDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4NDEsMHg3RiwweEI3LDB4ODAsMHg4NSwweDUwLDB4MDAsMHg4MywweDA1LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEgIH19LC8qIDsgMDEgKDY0MHgzNTApICovCkBAIC05ODMsNyArOTU0LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4RTUsMHg3RiwweEI3LDB4MUQsMHhBNywweDNFLDB4MDQsMHg1QSwweDA1LDB4MDAsMHg4MCwweDIwLDB4M0UsMHhFNCwweDIyLDB4MDAgIH19LyogOyAwNiAoMTAyNHg3NjgpIDs7MS8xMi8wMiAqLwogCSAgfTsKIAotWEdJMzMwX0NIVFZSZWdEYXRhU3RydWN0IFhHSV9DSFRWUmVnT1BBTFtdPXsKK3N0cnVjdCBYR0kzMzBfQ0hUVlJlZ0RhdGFTdHJ1Y3QgWEdJX0NIVFZSZWdPUEFMW10gPSB7CiAgICAgICAgICAgICAgICAgLyogSW5kZXg6MDAwLDB4MDEsMHgwMiwweDA0LDB4MDMsMHgwNSwweDA2LDB4MDcsMHgwOCwweDE1LDB4MUYsMHgwQywweDBELDB4MEUsMHgwRiwweDEwaCAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHgzNiwweEFELDB4NTAsMHgzNCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSB9fSwvKiAwMCAoNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0MSwweDdGLDB4QjcsMHg4NiwweDg1LDB4NTAsMHgwMCwweDgzLDB4MDUsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSB9fSwvKiAwMSAoNjQweDM1MCkgKi8KQEAgLTk5NCwxNCArOTY1LDE0IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweEU0LDB4N0YsMHhCNywweDFFLDB4QUYsMHgyOSwweDM3LDB4NUEsMHgwNSwweDAwLDB4ODAsMHgyNSwweDhDLDB4QjIsMHgyQSwweDAwIH19LyogMDYgKDEwMjR4NzY4KSA7OzEvMTIvMDIgKi8KIAkgICAgIH07CiAKLVVDSEFSIFhHSV9DSDcwMTdMVjEwMjR4NzY4W109ezB4NjAsMHgwMiwweDAwLDB4MDcsMHg0MCwweEVELDB4QTMsCi0gICAgICAgICAgICAgICAgICAgCQkJMHhDOCwweEM3LDB4QUMsMHhFMCwweDAyfTsKLVVDSEFSIFhHSV9DSDcwMTdMVjE0MDB4MTA1MFtdPXsweDYwLDB4MDMsMHgxMSwweDAwLDB4NDAsMHhFMywweEFELAotICAgICAgICAgICAgICAgICAgIAkJCTB4REIsMHhGNiwweEFDLDB4RTAsMHgwMn07Cit1bnNpZ25lZCBjaGFyIFhHSV9DSDcwMTdMVjEwMjR4NzY4W10gPSB7MHg2MCwgMHgwMiwgMHgwMCwgMHgwNywgMHg0MCwgMHhFRCwgMHhBMywKKwkJCQkJMHhDOCwgMHhDNywgMHhBQywgMHhFMCwgMHgwMn07Cit1bnNpZ25lZCBjaGFyIFhHSV9DSDcwMTdMVjE0MDB4MTA1MFtdID0gezB4NjAsIDB4MDMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4RTMsIDB4QUQsCisJCQkJCSAweERCLCAweEY2LCAweEFDLCAweEUwLCAweDAyfTsKIAogCiAvKmFkZCBmb3IgbmV3IFVOSVZHQUJJT1MqLwotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEwMjR4NzY4RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMDI0eDc2OERhdGFbXSA9CiB7CiAgeyAgIDYyLCAgMjUsIDgwMCwgNTQ2LDEzNDQsIDgwNn0sCiAgeyAgIDMyLCAgMTUsIDkzMCwgNTQ2LDEzNDQsIDgwNn0sCkBAIC0xMDEyLDcgKzk4Myw3IEBACiAgeyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfRXh0TENEMTAyNHg3NjhEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OERhdGFbXSA9CiB7CiAgeyAgIDQyLCAgMjUsMTUzNiwgNDE5LDEzNDQsIDgwNn0sIC8qIHsgMTIsIDUsIDg5NiwgNTEyLDEzNDQsIDgwNn0sIC8vIGFsYW4gMDkvMTIvMjAwMyAqLwogIHsgICA0OCwgIDI1LDE1MzYsIDM2OSwxMzQ0LCA4MDZ9LCAvKiB7IDEyLCA1LCA4OTYsIDUxMCwxMzQ0LCA4MDZ9LCAvLyBhbGFuIDA5LzEyLzIwMDMgKi8KQEAgLTEwMjksNyArMTAwMCw3IEBACiAgeyAgICAxLCAgIDEsMTM0NCwgODA2LDEzNDQsIDgwNn0KIH07CiAKLS8qWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdDJMQ0QxMDI0eDc2OERhdGFbXT0KKy8qc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3QyTENEMTAyNHg3NjhEYXRhW10gPQogewogIHsgICA2MiwgIDI1LCA4MDAsIDU0NiwxMzQ0LCA4MDZ9LAogIHsgICAzMiwgIDE1LCA5MzAsIDU0NiwxMzQ0LCA4MDZ9LApAQCAtMTA0MCw3ICsxMDExLDcgQEAKICB7ICAgIDEsICAgMSwxMzQ0LCA4MDYsMTM0NCwgODA2fQogfTsqLwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEwMjR4NzY4RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfQ2V0TENEMTAyNHg3NjhEYXRhW10gPQogewogCXsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgICAxLDEsMTM0NCw4MDYsMTM0NCw4MDYgICAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMDUxLDcgKzEwMjIsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDEzNDQsODA2LDEzNDQsODA2ICAgICAgICAgICB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNERhdGFbXSA9CiB7CiAgeyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCiAgeyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCkBAIC0xMDYzLDcgKzEwMzQsNyBAQAogIHsgICAgMSwgICAxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9CiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEyODB4MTAyNERhdGFbXSA9CiB7CiAgeyAgMjExLCAgNjAsMTAyNCwgNTAxLDE2ODgsMTA2Nn0sCiAgeyAgMjExLCAgNjAsMTAyNCwgNTA4LDE2ODgsMTA2Nn0sCkBAIC0xMDc1LDcgKzEwNDYsNyBAQAogIHsgICAgMSwgICAxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9CiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0MkxDRDEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0MkxDRDEyODB4MTAyNERhdGFbXSA9CiB7CiAgeyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCiAgeyAgIDIyLCAgIDUsIDgwMCwgNTEwLDE2NTAsMTA4OH0sCkBAIC0xMDg3LDcgKzEwNTgsNyBAQAogIHsgICAgMSwgICAxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9CiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEyODB4MTAyNERhdGFbXSA9CiB7CiAJeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTAwLDcgKzEwNzEsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9IC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxNDAweDEwNTBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDE0MDB4MTA1MERhdGFbXSA9CiB7CiAJeyAgICAgICAgIDIxMSwxMDAsMjEwMCw0MDgsMTY4OCwxMDY2ICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgICAyMTEsNjQsMTUzNiwzNTgsMTY4OCwxMDY2ICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTEzLDcgKzEwODQsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDE0MDB4MTA1MERhdGFbXSA9CiB7CiAJeyAgICAgICAgIDIxMSwxMDAsMjEwMCw0MDgsMTY4OCwxMDY2ICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgICAyMTEsNjQsMTUzNiwzNTgsMTY4OCwxMDY2ICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTI2LDcgKzEwOTcsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9ICAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDE2MDB4MTIwMERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDE2MDB4MTIwMERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAgICA0LDEsMTYyMCw0MjAsMjE2MCwxMjUwICAgICAgICAgIH0sIC8qIHsgMywxLDIxNjAsNDI1LDIxNjAsMTI1MCB9LCAvLyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgLy8gYWxhbiAxMC8xNC8yMDAzICovCiAgICAgICAgIHsgICAgICAgICAyNyw3LDE5MjAsMzc1LDIxNjAsMTI1MCAgICAgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTQwLDcgKzExMTEsNyBAQAogICAgICAgICB7ICAgICAgICAgMSwxLDIxNjAsMTI1MCwyMTYwLDEyNTAgICAgICAgICB9ICAvKiAwOSAoMTYwMHgxMjAweDYwSHopIDszMDJsdiAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDE2MDB4MTIwMERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTYwMHgxMjAwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgICAgIDI3LDQsODAwLDUwMCwyMTYwLDEyNTAgICAgICAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgICAgIDI3LDQsODAwLDUwMCwyMTYwLDEyNTAgICAgICAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTE1NCw3ICsxMTI1LDcgQEAKICAgICAgICAgeyAgICAgICAgIDEsMSwyMTYwLDEyNTAsMjE2MCwxMjUwICAgICAgICAgfSAvKiAwOSAoMTYwMHgxMjAwKSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxNDAweDEwNTBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxNDAweDEwNTBEYXRhW10gPQogewogCXsgICAgICAgICAxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgICAgMSwxLDE2ODgsMTA2NiwxNjg4LDEwNjYgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTE2Nyw3ICsxMTM4LDcgQEAKICAgICAgICAgeyAgICAgICAgIDEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9Ob1NjYWxpbmdEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9Ob1NjYWxpbmdEYXRhW10gPQogewogIHsgICAgMSwgICAxLCA4MDAsIDQ0OSwgODAwLCA0NDl9LAogIHsgICAgMSwgICAxLCA4MDAsIDQ0OSwgODAwLCA0NDl9LApAQCAtMTE3OSw3ICsxMTUwLDcgQEAKICB7ICAgIDEsICAgMSwxNjg4LDEwNjYsMTY4OCwxMDY2fQogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMDI0eDc2OHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0V4dExDRDEwMjR4NzY4eDc1RGF0YVtdID0KIHsKICAgICAgICAgezQyLDI1LDE1MzYsNDE5LDEzNDQsODA2IH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs0OCwyNSwxNTM2LDM2OSwxMzQ0LDgwNiB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMTkwLDcgKzExNjEsNyBAQAogICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwICAgfSAgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMDI0eDc2OHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX1N0TENEMTAyNHg3Njh4NzVEYXRhW10gPQogewogICAgICAgICB7NDIsMjUsMTUzNiw0MTksMTM0NCw4MDYgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezQ4LDI1LDE1MzYsMzY5LDEzNDQsODA2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyMDEsNyArMTE3Miw3IEBACiAgICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMDI0eDc2OHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVN0cnVjdCAgWEdJX0NldExDRDEwMjR4NzY4eDc1RGF0YVtdID0KIHsKICAgICAgICAgezEsMSwxMzEyLDgwMCwxMzEyLDgwMH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxLDEsMTMxMiw4MDAsMTMxMiw4MDB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMjEyLDcgKzExODMsNyBAQAogICAgICAgICB7MSwxLDEzMTIsODAwLDEzMTIsODAwfSAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMjgweDEwMjR4NzVEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9FeHRMQ0QxMjgweDEwMjR4NzVEYXRhW10gPQogewogICAgICAgICB7MjExLDYwLDEwMjQsNTAxLDE2ODgsMTA2NiAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsyMTEsNjAsMTAyNCw1MDgsMTY4OCwxMDY2ICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTIyNCw3ICsxMTk1LDcgQEAKICAgICAgICAgezEsMSwxNjg4LDEwNjYsMTY4OCwxMDY2ICAgICB9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfU3RMQ0QxMjgweDEwMjR4NzVEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9TdExDRDEyODB4MTAyNHg3NURhdGFbXSA9CiB7CiAgICAgICAgIHsyMTEsNjAsMTAyNCw1MDEsMTY4OCwxMDY2IH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsyMTEsNjAsMTAyNCw1MDgsMTY4OCwxMDY2IH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyMzYsNyArMTIwNyw3IEBACiAgICAgICAgIHsxLDEsMTY4OCwxMDY2LDE2ODgsMTA2NiAgIH0gIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMjgweDEwMjR4NzVEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFTdHJ1Y3QgIFhHSV9DZXRMQ0QxMjgweDEwMjR4NzVEYXRhW10gPQogewogICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMjQ4LDcgKzEyMTksNyBAQAogICAgICAgICB7MSwxLDE2ODgsMTA2NiwxNjg4LDEwNjZ9ICAvKiA7IDA3ICgxMjgweDEwMjR4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfTm9TY2FsaW5nRGF0YXg3NVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhU3RydWN0ICBYR0lfTm9TY2FsaW5nRGF0YXg3NVtdID0KIHsKICAgICAgICAgezEsMSw4MDAsNDQ5LDgwMCw0NDkgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezEsMSw4MDAsNDQ5LDgwMCw0NDkgICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTI2Myw3ICsxMjM0LDcgQEAKICAgICAgICAgezEsMSwxNjg4LDgwNiwxNjg4LDgwNiAgfSAgLyogOyAwQSAoMTI4MHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTAyNHg3NjhEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMDI0eDc2OERhdGFbXSA9CiB7CiAgICB7ICA5LDEwNTcsMCwgNzcxICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgeyAgOSwxMDU3LDAsIDc3MSAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTI3NCw3ICsxMjQ1LDcgQEAKICAgIHsgIDksMTA1Nyw4MDUsIDc3MCAgfSAgLyogOyAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTAyNHg3NjhEYXRhW10gPQogewogICAgICAgICB7IDksMTA1Nyw3MzcsNzAzICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyA5LDEwNTcsNjg2LDY1MSAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyODUsNyArMTI1Niw3IEBACiAgICAgICAgIHsgOSwxMDU3LDgwNSw3NzAgICB9ICAvKiA7IDA2ICgxMDI0eDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMDI0eDc2OERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERlczEwMjR4NzY4RGF0YVtdID0KIHsKICAgICAgICAJeyAgICAgIDExNTIsODU2LDYyMiw1ODcgICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTE1Miw4NTYsNTk3LDU2MiAgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEyOTYsNyArMTI2Nyw3IEBACiAgICAgICAgIHsgICAgICAwLDEwNDgsODA1LDc3MCAgIH0gIC8qIDsgMDYgKDEwMjR4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCBYR0lfRXh0TENERExEZXMxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX0V4dExDRERMRGVzMTI4MHgxMDI0RGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDE4LDEzNDYsOTgxLDk0MCAgICAgfSwvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDE4LDEzNDYsOTI2LDg2NSAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTMwOCw3ICsxMjc5LDcgQEAKICAgICAgICAgeyAgICAgIDE4LDEzNDYsMTA2NSwxMDI0ICAgICB9LyogMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX1N0TENERExEZXMxMjgweDEwMjREYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgWEdJX1N0TENERExEZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTgsMTM0Niw5NzAsOTA3ICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTgsMTM0Niw5MTcsODU0ICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzIwLDcgKzEyOTEsNyBAQAogICAgICAgICB7ICAgICAgMTgsMTM0NiwxMDY1LDEwMjQgICAgIH0vKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0NldExDRERMRGVzMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERExEZXMxMjgweDEwMjREYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDc1Miw3MTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzI5LDY4OCAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTMzMiw3ICsxMzAzLDcgQEAKICAgICAgICAgeyAgICAgIDE4LDEzNDYsMTA2NSwxMDI0ICAgIH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTI4MHgxMDI0RGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDksMTMzNyw5ODEsOTQwICAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDEzMzcsOTI2LDg4NCAgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApIGFsYW4sIDIwMDMvMDkvMzAgKi8KQEAgLTEzNDQsNyArMTMxNSw3IEBACiAgICAgICAgIHsgICAgICA5LDEzMzcsMTA2NSwxMDI0ICAgIH0gIC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczEyODB4MTAyNERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTI4MHgxMDI0RGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDksMTMzNyw5NzAsOTA3ICAgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDEzMzcsOTE3LDg1NCAgICB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzU2LDcgKzEzMjcsNyBAQAogICAgICAgICB7ICAgICAgOSwxMzM3LDEwNjUsMTAyNCAgICB9ICAvKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTI4MHgxMDI0RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTI4MHgxMDI0RGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDEzNjgsMTAwOCw3NTIsNzExICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTM2OCwxMDA4LDcyOSw2ODggICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTEzNjgsNyArMTMzOSw3IEBACiAgICAgICAgIHsgICAgICA5LDEzMzcsMTA2NSwxMDI0ICAgIH0gIC8qIDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0RETERlczE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxNDAweDEwNTBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTM4MSw3ICsxMzUyLDcgQEAKICAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxNDAweDEwNTBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0RETERlczE0MDB4MTA1MERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICAxOCwxNDY0LDAsMTA1MSAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xMzk0LDcgKzEzNjUsNyBAQAogICAgICAgICB7ICAgICAgMTgsMTQ2NCwwLDEwNTEgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERlczE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTQwMHgxMDUwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNDA3LDcgKzEzNzgsNyBAQAogICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSAvKiAwOCAoMTQwMHgxMDUweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczE0MDB4MTA1MERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczE0MDB4MTA1MERhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgICA5LDE0NTUsMCwxMDUxICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgOSwxNDU1LDAsMTA1MSAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTQyMCw3ICsxMzkxLDcgQEAKICAgICAgICAgeyAgICAgIDksMTQ1NSwwLDEwNTEgICAgIH0gLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhW10gPQogewogICAgICAgICB7ICAgICAgMTMwOCwxMDY4LDc4MSw3NjYgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxMzA4LDEwNjgsNzgxLDc2NiAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTQzMyw3ICsxNDA0LDcgQEAKICAgICAgICAgeyAgICAgIDE4LDE0NjQsMCwxMDUxICAgIH0gLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxNDAweDEwNTBEYXRhMltdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERGVzMTQwMHgxMDUwRGF0YTJbXSA9CiB7CiAgICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTQ0NCw3ICsxNDE1LDcgQEAKIAogCiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERExEZXMxNjAweDEyMDBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0RETERlczE2MDB4MTIwMERhdGFbXSA9CiB7CiAJeyAgICAgIDE4LDE2ODIsMCwxMjAxICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTgsMTY4MiwwLDEyMDEgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE0NTgsNyArMTQyOSw3IEBACiAgICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9ICAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxNjAweDEyMDBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERMRGVzMTYwMHgxMjAwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDE4LDE2ODIsMTE1MCwxMTAxICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMTgsMTY4MiwxMDgzLDEwMzQgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE0NzIsNyArMTQ0Myw3IEBACiAgICAgICAgIHsgICAgICAxOCwxNjgyLDAsMTIwMSAgICB9IC8qIDA5ICgxNjAweDEyMDB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTYwMHgxMjAwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTYwMHgxMjAwRGF0YVtdID0KIHsKICAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICA5LDE2NzMsMCwxMjAxICAgICB9LC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNDg2LDcgKzE0NTcsNyBAQAogICAgICAgICB7ICAgICAgOSwxNjczLDAsMTIwMSAgICAgfSAvKiAwOSAoMTYwMHgxMjAweDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTYwMHgxMjAwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxNjAweDEyMDBEYXRhW10gPQogewogCXsgICAgICA5LDE2NzMsMTE1MCwxMTAxICAgICB9LC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgOSwxNjczLDEwODMsMTAzNCAgICAgfSwvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTUwMCw3ICsxNDcxLDcgQEAKICAgICAgICAgeyAgICAgIDksMTY3MywwLDEyMDEgICAgIH0gLyogMDkgKDE2MDB4MTIwMHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyICBYR0lfTm9TY2FsaW5nRGVzRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgWEdJX05vU2NhbGluZ0Rlc0RhdGFbXSA9CiB7CiAgICAgICAgIHsgICAgIDksNjU3LDQ0OCw0MDUsOTYsMiAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgIDksNjU3LDQ0OCwzNTUsOTYsMiAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1MTUsNyArMTQ4Niw3IEBACiAgICAgICAgIHsgICAgIDksMTMzNywwLDc3MSwxMTIsNiAgfSAgLyogMEEgKDEyODB4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERlczEwMjR4NzY4eDc1RGF0YVtdPQkJLyogOzsxMDI0eDc2OHg3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9CQkvKiA7OzEwMjR4NzY4eDc1SHogKi8KIHsKICAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs5LDEwNDksMCw3Njl9LCAgICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTI2LDcgKzE0OTcsNyBAQAogICAgICAgICB7OSwxMDQ5LDAsNzY5fSAgICAgLyogOyAwNiAoMTAyNHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMDI0eDc2OHg3NURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTAyNHg3Njh4NzVEYXRhW10gPQogewogICAgICAgICB7OSwxMDQ5LDAsNzY5fSwgICAgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezksMTA0OSwwLDc2OX0sICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1MzcsNyArMTUwOCw3IEBACiAgICAgICAgIHs5LDEwNDksMCw3Njl9ICAgICAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMDI0eDc2OHg3NURhdGFbXT0JLyogOzsxMDI0eDc2OHg3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMDI0eDc2OHg3NURhdGFbXSA9CS8qIDs7MTAyNHg3Njh4NzVIeiAqLwogewogICAgICAgICB7MTE1Miw4NTYsNjIyLDU4N30sICAgICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTE1Miw4NTYsNTk3LDU2Mn0sICAgICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTQ4LDcgKzE1MTksNyBAQAogICAgICAgICB7OSwxMDQ5LDAsNzY5fSAJICAgCS8qIDsgMDYgKDEwMjR4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTI4MHgxMDI0eDc1RGF0YVtdPSAgICAgICAgIC8qIDs7MTI4MHgxMDI0eDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX0V4dExDRERMRGVzMTI4MHgxMDI0eDc1RGF0YVtdID0gICAgICAgICAvKiA7OzEyODB4MTAyNHg3NUh6ICovCiB7CiAgICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0sLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTU2MCw3ICsxNTMxLDcgQEAKICAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9TdExDRERMRGVzMTI4MHgxMDI0eDc1RGF0YVtdID0KIHsKICAgICAgICAgezE4LDEzMTQsMCwxMDI1ICAgICB9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxOCwxMzE0LDAsMTAyNSAgICAgfSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTcyLDcgKzE1NDMsNyBAQAogICAgICAgICB7MTgsMTMxNCwwLDEwMjUgICAgIH0vKiA7IDA3ICgxMjgweDEwMjR4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfQ2V0TENERExEZXMxMjgweDEwMjR4NzVEYXRhW109CS8qIDEyODB4MTAyNHg3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0RETERlczEyODB4MTAyNHg3NURhdGFbXSA9CS8qIDEyODB4MTAyNHg3NUh6ICovCiB7CiAgICAgICAgIHsxMzY4LDEwMDgsNzUyLDcxMX0sICAgIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsxMzY4LDEwMDgsNzI5LDY4OH0sICAgIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE1ODQsNyArMTU1NSw3IEBACiAgICAgICAgIHsxOCwxMzE0LDAsMTAyNX0gICAgIAkgIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9FeHRMQ0REZXMxMjgweDEwMjR4NzVEYXRhW109ICAgICAgICAgLyogOzsxMjgweDEwMjR4NzVIeiAqLworc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfRXh0TENERGVzMTI4MHgxMDI0eDc1RGF0YVtdID0gICAgICAgICAvKiA7OzEyODB4MTAyNHg3NUh6ICovCiB7CiAJezksMTMwNSwwLDEwMjV9LC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs5LDEzMDUsMCwxMDI1fSwvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNTk2LDcgKzE1NjcsNyBAQAogICAgICAgICB7OSwxMzA1LDAsMTAyNX0gLyogOyAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdCAgWEdJX1N0TENERGVzMTI4MHgxMDI0eDc1RGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0ICBYR0lfU3RMQ0REZXMxMjgweDEwMjR4NzVEYXRhW10gPQogewogCXs5LDEzMDUsMCwxMDI1fSwvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7OSwxMzA1LDAsMTAyNX0sLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTYwOCw3ICsxNTc5LDcgQEAKICAgICAgICAgezksMTMwNSwwLDEwMjV9IC8qIDsgMDcgKDEyODB4MTAyNHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMjgweDEwMjR4NzVEYXRhW109CS8qIDEyODB4MTAyNHg3NUh6ICovCitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QgIFhHSV9DZXRMQ0REZXMxMjgweDEwMjR4NzVEYXRhW10gPQkvKiAxMjgweDEwMjR4NzVIeiAqLwogewogICAgICAgICB7MTM2OCwxMDA4LDc1Miw3MTF9LCAgICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTM2OCwxMDA4LDcyOSw2ODh9LCAgICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNjIwLDcgKzE1OTEsNyBAQAogICAgICAgICB7OSwxMzA1LDAsMTAyNX0gICAgIAkgIC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyIFhHSV9Ob1NjYWxpbmdEZXNEYXRheDc1W109IC8qIFNjYWxpbmcgTENEIDc1SHogKi8KK3N0cnVjdCBYR0kzMzBfTENERGF0YURlc1N0cnVjdDIgWEdJX05vU2NhbGluZ0Rlc0RhdGF4NzVbXSA9IC8qIFNjYWxpbmcgTENEIDc1SHogKi8KIHsKIAl7OSw2NTcsNDQ4LDQwNSw5NiwyfSwgICAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7OSw2NTcsNDQ4LDM1NSw5NiwyfSwgICAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNjM1LDcgKzE2MDYsNyBAQAogICAgICAgICB7OSwxMzM3LDAsNzcxLDExMiw2fSAgICAvKiA7IDBBICgxMjgweDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0UEFMRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFBBTERhdGFbXSA9CiB7CiAgeyAgICAxLCAgIDEsIDg2NCwgNTI1LDEyNzAsIDQwMCwgMTAwLCAgIDAsIDc2MH0sCiAgeyAgICAxLCAgIDEsIDg2NCwgNTI1LDEyNzAsIDM1MCwgMTAwLCAgIDAsIDc2MH0sCkBAIC0xNjQ1LDcgKzE2MTYsNyBAQAogIHsgICAgMSwgICAxLCA4NjQsIDUyNSwxMjcwLCA2MDAsICA1MCwgICAwLCAgIDB9CiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0UEFMRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRQQUxEYXRhW10gPQogewogIHsgICAgMiwgICAxLDEwODAsIDQ2MywxMjcwLCA1MDAsICA1MCwgICAwLCAgNTB9LAogIHsgICAxNSwgICA3LDExNTIsIDQxMywxMjcwLCA1MDAsICA1MCwgICAwLCAgNTB9LApAQCAtMTY1Nyw3ICsxNjI4LDcgQEAKICB7ICAgIDMsICAgMiwxMDgwLCA2MTksMTI3MCwgNTQwLCA0MzgsICAgMCwgNDM4fQogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0TlRTQ0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3ROVFNDRGF0YVtdID0KIHsKICB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDAwLCAgNTAsICAgMCwgNzYwfSwKICB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgMzUwLCAgNTAsICAgMCwgNjQwfSwKQEAgLTE2NjYsNyArMTYzNyw3IEBACiAgeyAgICAxLCAgIDEsIDg1OCwgNTI1LDEyNzAsIDQ4MCwgICAwLCAgIDAsIDc2MH0KIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHROVFNDRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHROVFNDRGF0YVtdID0KIHsKICB7ICAgIDksICA1LCAxMDAxLCA0NTMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKICB7ICAgMTIsICA1LCAgODU4LCA0MDMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKQEAgLTE2NzksNyArMTY1MCw3IEBACiAgeyAgICAzLCAgIDIsMTAwMSwgNTMzLDEyNzAsIDQyMCwgICAwLCAgIDAsICAgMH0KIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdDFIaVRWRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdDFIaVRWRGF0YVtdID0KIHsKICAgICAJeyAgICAgICAgMSwxLDg5Miw1NjMsNjkwLDgwMCwwLDAsMCAgICAgICAgICAgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgICAxLDEsODkyLDU2Myw2OTAsNzAwLDAsMCwwICAgICAgICAgICAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTE2ODksNyArMTY2MCw3IEBACiAgICAgICAgIHsgICAgICAgIDgsNSwxMDUwLDY4MywxNjQ4LDk2MCwweDE1MCwxLDAgICAgICAgICB9ICAvKiAwNSAoNDAweDMwMCw4MDB4NjAwKSAqLwogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0MkhpVFZEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0MkhpVFZEYXRhW10gPQogewogICAgICAgICB7ICAgICAgICAzLDEsODQwLDQ4MywxNjQ4LDk2MCwweDAzMiwwLDAgICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgIDEsMSw4OTIsNTYzLDY5MCw3MDAsMCwwLDAgICAgICAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTcwMCw3ICsxNjcxLDcgQEAKIAogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dEhpVFZEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dEhpVFZEYXRhW10gPQogewogICAgICAgICB7ICAgICAgICA2LDEsODQwLDU2MywxNjMyLDk2MCwwLDAsMCAgICAgICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgIDMsMSw5NjAsNTYzLDE2MzIsOTYwLDAsMCwwICAgICAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMTcxNiw3ICsxNjg3LDcgQEAKIAogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1aURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0WVBiUHI1MjVpRGF0YVtdID0KIHsKICB7ICAgIDksICA1LCAxMDAxLCA0NTMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKICB7ICAgMTIsICA1LCAgODU4LCA0MDMsMTI3MCwgNDIwLCAxNzEsICAgMCwgMTcxfSwKQEAgLTE3MjksNyArMTcwMCw3IEBACiAgeyAgICAzLCAgIDIsMTAwMSwgNTMzLDEyNTAsIDQyMCwgICAwLCAgIDAsICAgMH0KIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFlQYlByNTI1aURhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjUyNWlEYXRhW10gPQogewogIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCA0MDAsICA1MCwgICAwLCA3NjB9LAogIHsgICAgMSwgICAxLCA4NTgsIDUyNSwxMjcwLCAzNTAsICA1MCwgICAwLCA2NDB9LApAQCAtMTczOCw3ICsxNzA5LDcgQEAKICB7ICAgIDEsICAgMSwgODU4LCA1MjUsMTI3MCwgNDgwLCAgIDAsICAgMCwgNzYwfSwKIH07CiAKLVhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9FeHRZUGJQcjUyNXBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNTI1cERhdGFbXSA9CiB7CiAgeyAgICA5LCAgNSwgMTAwMSwgNDUzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCiAgeyAgIDEyLCAgNSwgIDg1OCwgNDAzLDEyNzAsIDQyMCwgMTcxLCAgIDAsIDE3MX0sCkBAIC0xNzUxLDcgKzE3MjIsNyBAQAogIHsgICAgMywgICAyLDEwMDEsIDUzMywxMjcwLCA0MjAsICAgMCwgICAwLCAgIDB9CiAgfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI1MjVwRGF0YVtdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFTdHJ1Y3QgIFhHSV9TdFlQYlByNTI1cERhdGFbXSA9CiB7CiAgeyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDQwMCwgIDUwLCAgIDAsIDc2MH0sCiAgeyAgICAxLCAgIDEsMTcxNiwgNTI1LDEyNzAsIDM1MCwgIDUwLCAgIDAsIDY0MH0sCkBAIC0xNzYwLDcgKzE3MzEsNyBAQAogIHsgICAgMSwgICAxLDE3MTYsIDUyNSwxMjcwLCA0ODAsICAgMCwgICAwLCA3NjB9LAogfTsKIAotWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX0V4dFlQYlByNzUwcERhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfRXh0WVBiUHI3NTBwRGF0YVtdID0KIHsKICB7ICAgIDMsICAgMSwgOTM1LCA0NzAsMTEzMCwgNjgwLCAgNTAsICAgMCwgICAwfSwgICAgICAgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgeyAgIDI0LCAgIDcsIDkzNSwgNDIwLDExMzAsIDY4MCwgIDUwLCAgIDAsICAgMH0sICAgICAgIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0xNzc1LDcgKzE3NDYsNyBAQAogIHsgICAxMCwgICA5LDEzMjAsIDgzMCwxMTMwLCA2NDAsICA1MCwgICAwLCAgIDB9CiB9OwogCi1YR0kzMzBfVFZEYXRhU3RydWN0ICBYR0lfU3RZUGJQcjc1MHBEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVN0cnVjdCAgWEdJX1N0WVBiUHI3NTBwRGF0YVtdID0KIHsKICB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgNDAwLCAgNTAsICAgMCwgNzYwfSwKICB7ICAgIDEsICAgMSwxNjUwLCA3NTAsMTI4MCwgMzUwLCAgNTAsICAgMCwgNjQwfSwKQEAgLTE3ODQsNyArMTc1NSw3IEBACiAgeyAgICAxLCAgIDEsMTY1MCwgNzUwLDEyODAsIDQ4MCwgICAwLCAgIDAsIDc2MH0sCiB9OwogCi1VQ0hBUiBYR0kzMzBfTlRTQ1RpbWluZ1tdID0gewordW5zaWduZWQgY2hhciBYR0kzMzBfTlRTQ1RpbWluZ1tdID0gewogICAweDE3LDB4MWQsMHgwMywweDA5LDB4MDUsMHgwNiwweDBjLDB4MGMsCiAgIDB4OTQsMHg0OSwweDAxLDB4MGEsMHgwNiwweDBkLDB4MDQsMHgwYSwKICAgMHgwNiwweDE0LDB4MGQsMHgwNCwweDBhLDB4MDAsMHg4NSwweDFiLApAQCAtMTc5NCw3ICsxNzY1LDcgQEAKICAgMHg2MCwweDgwLDB4MTQsMHg5MCwweDhjLDB4NjAsMHgxNCwweDUwLAogICAweDAwLDB4NDAsMHg0NCwweDAwLDB4ZGIsMHgwMiwweDNiLDB4MDB9OwogCi1VQ0hBUiBYR0kzMzBfUEFMVGltaW5nW10gPSB7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9QQUxUaW1pbmdbXSA9IHsKICAgMHgyMSwweDVBLDB4MzUsMHg2ZSwweDA0LDB4MzgsMHgzZCwweDcwLAogICAweDk0LDB4NDksMHgwMSwweDEyLDB4MDYsMHgzZSwweDM1LDB4NmQsCiAgIDB4MDYsMHgxNCwweDNlLDB4MzUsMHg2ZCwweDAwLDB4NDUsMHgyYiwKQEAgLTE4MDQsNyArMTc3NSw3IEBACiAgIDB4NjAsMHg4MCwweDE0LDB4OTAsMHg4YywweDYwLDB4MTQsMHg2MywKICAgMHgwMCwweDQwLDB4M2UsMHgwMCwweGUxLDB4MDIsMHgyOCwweDAwfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZFeHRUaW1pbmdbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWRXh0VGltaW5nW10gPQogewogICAgICAgMHgyRCwweDYwLDB4MkMsMHg1RiwweDA4LDB4MzEsMHgzQSwweDY0LAogICAgICAgMHgyOCwweDAyLDB4MDEsMHgzRCwweDA2LDB4M0UsMHgzNSwweDZELApAQCAtMTgxOCw3ICsxNzg5LDcgQEAKIAogfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZTdDFUaW1pbmdbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9IaVRWU3QxVGltaW5nW10gPQogewogICAgICAgMHgzMiwweDY1LDB4MkMsMHg1RiwweDA4LDB4MzEsMHgzQSwweDY1LAogICAgICAgMHgyOCwweDAyLDB4MDEsMHgzRCwweDA2LDB4M0UsMHgzNSwweDZELApAQCAtMTgzMSw3ICsxODAyLDcgQEAKICAgICAgIDB4MEUsMHgwMCwweGZjLDB4ZmYsMHgyZCwweDAwCiB9OwogCi1VQ0hBUiBYR0kzMzBfSGlUVlN0MlRpbWluZ1tdID0KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZTdDJUaW1pbmdbXSA9CiB7CiAgICAgICAweDMyLDB4NjUsMHgyQywweDVGLDB4MDgsMHgzMSwweDNBLDB4NjQsCiAgICAgICAweDI4LDB4MDIsMHgwMSwweDNELDB4MDYsMHgzRSwweDM1LDB4NkQsCkBAIC0xODQ0LDcgKzE4MTUsNyBAQAogICAgICAgMHgyNywweDAwLDB4RkMsMHhmZiwweDZhLDB4MDAKIH07CiAKLVVDSEFSIFhHSTMzMF9IaVRWVGV4dFRpbWluZ1tdID0KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0hpVFZUZXh0VGltaW5nW10gPQogewogICAgICAgMHgzMiwweDY1LDB4MkMsMHg1RiwweDA4LDB4MzEsMHgzQSwweDY1LAogICAgICAgMHgyOCwweDAyLDB4MDEsMHgzRCwweDA2LDB4M0UsMHgzNSwweDZELApAQCAtMTg1Nyw3ICsxODI4LDcgQEAKICAgICAgIDB4MTEsMHgwMCwweEZDLDB4RkYsMHgzMiwweDAwCiB9OwogCi1VQ0hBUiBYR0kzMzBfWVBiUHI3NTBwVGltaW5nW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfWVBiUHI3NTBwVGltaW5nW10gPQogewogICAgICAgMHgzMCwweDFkLDB4ZTgsMHgwOSwweDA5LDB4ZWQsMHgwYywweDBjLAogICAgICAgMHg5OCwweDBhLDB4MDEsMHgwYywweDA2LDB4MGQsMHgwNCwweDBhLApAQCAtMTg3MCw3ICsxODQxLDcgQEAKICAgICAgIDB4MTEsMHgwMCwweGZjLDB4ZmYsMHgzMiwweDAwCiB9OwogCi1VQ0hBUiBYR0kzMzBfWVBiUHI1MjVwVGltaW5nW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfWVBiUHI1MjVwVGltaW5nW10gPQogewogICAgICAgMHgzRSwweDExLDB4MDYsMHgwOSwweDBiLDB4MGMsMHgwYywweDBjLAogICAgICAgMHg5OCwweDBhLDB4MDEsMHgwZCwweDA2LDB4MGQsMHgwNCwweDBhLApAQCAtMTg4Myw3ICsxODU0LDcgQEAKICAgICAgIDB4MTEsMHgwMCwweEZDLDB4RkYsMHgzMiwweDAwCiB9OwogCi1VQ0hBUiBYR0kzMzBfWVBiUHI1MjVpVGltaW5nW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfWVBiUHI1MjVpVGltaW5nW10gPQogewogICAgICAgMHgxQiwweDIxLDB4MDMsMHgwOSwweDA1LDB4MDYsMHgwQywweDBDLAogICAgICAgMHg5NCwweDQ5LDB4MDEsMHgwQSwweDA2LDB4MEQsMHgwNCwweDBBLApAQCAtMTg5Nyw3ICsxODY4LDcgQEAKIAogfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZHcm91cDNEYXRhW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkdyb3VwM0RhdGFbXSA9CiB7CiAgICAgICAweDAwLDB4MUEsMHgyMiwweDYzLDB4NjIsMHgyMiwweDA4LDB4NUYsCiAgICAgICAweDA1LDB4MjEsMHhCMiwweEIyLDB4NTUsMHg3NywweDJBLDB4QTYsCkBAIC0xOTA5LDcgKzE4ODAsNyBAQAogICAgICAgMHgxOCwweDA1LDB4MTgsMHgwNSwweDRDLDB4QTgsMHgwMQogfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZHcm91cDNTaW11W10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkdyb3VwM1NpbXVbXSA9CiB7CiAgICAgICAweDAwLDB4MUEsMHgyMiwweDYzLDB4NjIsMHgyMiwweDA4LDB4OTUsCiAgICAgICAweERCLDB4MjAsMHhCOCwweEI4LDB4NTUsMHg0NywweDJBLDB4QTYsCkBAIC0xOTIxLDcgKzE4OTIsNyBAQAogICAgICAgMHgxOCwweDA1LDB4MTgsMHgwNSwweDRDLDB4QTgsMHgwMQogfTsKIAotVUNIQVIgWEdJMzMwX0hpVFZHcm91cDNUZXh0W10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfSGlUVkdyb3VwM1RleHRbXSA9CiB7CiAgICAgICAweDAwLDB4MUEsMHgyMiwweDYzLDB4NjIsMHgyMiwweDA4LDB4QTcsCiAgICAgICAweEY1LDB4MjAsMHhDRSwweENFLDB4NTUsMHg0NywweDJBLDB4QTYsCkBAIC0xOTMzLDcgKzE5MDQsNyBAQAogICAgICAgMHgxOCwweDA1LDB4MTgsMHgwNSwweDRDLDB4QTgsMHgwMQogfTsKIAotVUNIQVIgWEdJMzMwX1JlbjUyNXBHcm91cDNbXSA9Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9SZW41MjVwR3JvdXAzW10gPQogewogICAweDAwLDB4MTQsMHgxNSwweDI1LDB4NTUsMHgxNSwweDBiLDB4MTMsCiAgIDB4QjEsMHg0MSwweDYyLDB4NjIsMHhGRiwweEY0LDB4NDUsMHhhNiwKQEAgLTE5NDUsNyArMTkxNiw3IEBACiAgIDB4MWEsMHgxRiwweDI1LDB4MmEsMHg0QywweEFBLDB4MDEKIH07CiAKLVVDSEFSIFhHSTMzMF9SZW43NTBwR3JvdXAzW10gPQordW5zaWduZWQgY2hhciBYR0kzMzBfUmVuNzUwcEdyb3VwM1tdID0KIHsKICAgMHgwMCwweDE0LDB4MTUsMHgyNSwweDU1LDB4MTUsMHgwYiwweDdhLAogICAweDU0LDB4NDEsMHhFNywweEU3LDB4RkYsMHhGNCwweDQ1LDB4YTYsCkBAIC0xOTU3LDcgKzE5MjgsNyBAQAogICAweDE4LDB4MUQsMHgyMywweDI4LDB4NEMsMHhBQSwweDAxCiB9OwogCi1YR0lfUGFuZWxEZWxheVRibFN0cnVjdCBYR0kzMzBfUGFuZWxEZWxheVRibFtdPQorc3RydWN0IFhHSV9QYW5lbERlbGF5VGJsU3RydWN0IFhHSTMzMF9QYW5lbERlbGF5VGJsW10gPQogewoge3sweDAwLDB4MDB9fSwKIHt7MHgwMCwweDAwfX0sCkBAIC0xOTc3LDcgKzE5NDgsNyBAQAoge3sweDAwLDB4MDB9fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzMyMHg0ODBEYXRhXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTMzIweDQ4MERhdGFfMVtdID0KIHsKICB7ODQ4LCA0MzMsNDAwLDUyNX0sCiAgezg0OCwgMzg5LDQwMCw1MjV9LApAQCAtMTk5MCw3ICsxOTYxLDcgQEAKICB7ODAwLCA1MjUsMTAwMCwgNjM1fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzgwMHg2MDBEYXRhXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTODAweDYwMERhdGFfMVtdID0KIHsKICB7ODQ4LCA0MzMsMTA2MCwgNjI5fSwKICB7ODQ4LCAzODksMTA2MCwgNjI5fSwKQEAgLTIwMDMsNyArMTk3NCw3IEBACiAgezgwMCwgNTI1LDEwMDAsIDYzNX0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM4MDB4NjAwRGF0YV8yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0kzMzBfTFZEUzgwMHg2MDBEYXRhXzJbXSA9CiB7CiAgezEwNTYsIDYyOCwxMDU2LCA2Mjh9LAogIHsxMDU2LCA2MjgsMTA1NiwgNjI4fSwKQEAgLTIwMTYsNyArMTk4Nyw3IEBACiAgezgwMCwgNTI1LDEwMDAsIDYzNX0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMDI0eDc2OERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMDI0eDc2OERhdGFfMVtdID0KIHsKICB7IDk2MCAsIDQzOCAsIDEzNDQgLCA4MDYgfSAsCS8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogIHsgOTYwICwgMzg4ICwgMTM0NCAsIDgwNiB9ICwJLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIwMjgsNyArMTk5OSw3IEBACiB9OwogCiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMDI0eDc2OERhdGFfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMDI0eDc2OERhdGFfMltdID0KIHsKICB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCiAgezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LApAQCAtMjA0MSw3ICsyMDEyLDcgQEAKICB7ODAwLCA1MjUsMTI4MCwgODEzfQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4MTAyNERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDEwMjREYXRhXzFbXSA9CiB7CiAgezEwNDgsIDQ0MiwxNjg4LCAxMDY2fSwKICB7MTA0OCwgMzkyLDE2ODgsIDEwNjZ9LApAQCAtMjA1Myw3ICsyMDI0LDcgQEAKICB7MTY4OCwgMTA2NiwxNjg4LCAxMDY2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4MTAyNERhdGFfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDEwMjREYXRhXzJbXSA9CiB7CiAgezEzNDQsIDgwNiwxMzQ0LCA4MDZ9LAogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKQEAgLTIwNjYsNyArMjAzNyw3IEBACiAgezgwMCwgNTI1LDEyODAsIDgxM30KIH07CiAvKgotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4RGF0YV8xW10gPQogewogIHs3NjgsNDM4LDE0MDgsODA2fSwKICB7NzY4LDM4OCwxNDA4LDgwNn0sCkBAIC0yMDc5LDcgKzIwNTAsNyBAQAogIHsxNDA4LDgwNiwxNDA4LDgwNn0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OERhdGFfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OERhdGFfMltdID0KIHsKICB7MTQwOCwgODA2LDE0MDgsIDgwNn0sCiAgezE0MDgsIDgwNiwxNDA4LCA4MDZ9LApAQCAtMjA5Miw3ICsyMDYzLDcgQEAKICB7MTQwOCwgODA2LDE0MDgsIDgwNn0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OE5EYXRhXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhORGF0YV8xW10gPQogewogIHs3MDQsIDQzOCwxMzQ0LCA4MDZ9LAogIHs3MDQsIDM4OCwxMzQ0LCA4MDZ9LApAQCAtMjEwNSw3ICsyMDc2LDcgQEAKICB7MTM0NCwgODA2LDEzNDQsIDgwNn0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OE5EYXRhXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhORGF0YV8yW10gPQogewogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fSwKICB7MTM0NCwgODA2LDEzNDQsIDgwNn0sCkBAIC0yMTE4LDcgKzIwODksNyBAQAogIHsxMzQ0LCA4MDYsMTM0NCwgODA2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4U0RhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxMjgweDc2OFNEYXRhXzFbXSA9CiB7CiAgezEwNDgsNDM4LDE2ODgsODA2fSwKICB7MTA0OCwzODgsMTY4OCw4MDZ9LApAQCAtMjEzMSw3ICsyMTAyLDcgQEAKICB7MTY4OCw4MDYsMTY4OCw4MDZ9CiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTI4MHg3NjhTRGF0YV8yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzEyODB4NzY4U0RhdGFfMltdID0KIHsKICB7MTY4OCw4MDYsMTY4OCw4MDZ9LAogIHsxNjg4LDgwNiwxNjg4LDgwNn0sCkBAIC0yMTQ0LDcgKzIxMTUsNyBAQAogIHsxNjg4LDgwNiwxNjg4LDgwNn0KIH07CiAqLwotWEdJMzMwX0xWRFNEYXRhU3RydWN0ICBYR0lfTFZEUzE0MDB4MTA1MERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxNDAweDEwNTBEYXRhXzFbXSA9CiB7CiAgezkyOCw0MTYsMTY4OCwxMDY2fSwKICB7OTI4LDM2NiwxNjg4LDEwNjZ9LApAQCAtMjE1Nyw3ICsyMTI4LDcgQEAKICB7MTY4OCwxMDY2LDE2ODgsMTA2Nn0KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJX0xWRFMxNDAweDEwNTBEYXRhXzJbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSV9MVkRTMTQwMHgxMDUwRGF0YV8yW10gPQogewogIHsxNjg4LDEwNjYsMTY4OCwxMDY2fSwKICB7MTY4OCwxMDY2LDE2ODgsMTA2Nn0sCkBAIC0yMTcwLDcgKzIxNDEsNyBAQAogIHsxNjg4LDEwNjYsMTY4OCwxMDY2fQogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTYwMHgxMjAwRGF0YV8xW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTYwMHgxMjAwRGF0YV8xW10gPQogeyAgICAgIC8qIDs7W3ljY2hlbl0gMTIvMDUvMDIgTENESFR4TENEVlQ9MjA0OHgxMzIwICovCiAgICAgICAgIHsgICAgICAgIDEwODgsNTIwLDIwNDgsMTMyMCAgICAgIH0sLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgIDEwODgsNDcwLDIwNDgsMTMyMCAgICAgIH0sLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIxODQsNyArMjE1NSw3IEBACiAgICAgICAgIHsgICAgICAgIDIwNDgsMTMyMCwyMDQ4LDEzMjAgICAgIH0gLyogMDkgKDE2MDB4MTIwMCkgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEU05vU2NhbGluZ0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFNOb1NjYWxpbmdEYXRhW10gPQogewogICAgICAgICB7ICAgICAgICA4MDAsNDQ5LDgwMCw0NDkgICAgICAgICAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAgIDgwMCw0NDksODAwLDQ0OSAgICAgICAgICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjE5OSw3ICsyMTcwLDcgQEAKICAgICAgICAgeyAgICAgICAgMTY4OCw4MDYsMTY4OCw4MDYgICAgICAgICAgIH0gIC8qIDBBICgxMjgweDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEYXRhXzF4NzVbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMXg3NVtdID0KIHsKIAl7OTYwLDQzOCwxMzEyLDgwMCAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHs5NjAsMzg4LDEzMTIsODAwICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjIxMSw3ICsyMTgyLDcgQEAKIH07CiAKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEYXRhXzJ4NzVbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERhdGFfMng3NVtdID0KIHsKICAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjIyMiw3ICsyMTkzLDcgQEAKICAgICAgICAgezEzMTIsODAwLDEzMTIsODAwfSwgLyogOyAwNiAoNTEyeDM4NCwxMDI0eDc2OCkgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERhdGFfMXg3NVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERhdGFfMXg3NVtdID0KIHsKICAgICAgICAgezEwNDgsNDQyLDE2ODgsMTA2NiAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezEwNDgsMzkyLDE2ODgsMTA2NiAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjIzNCw3ICsyMjA1LDcgQEAKICAgICAgICAgezE2ODgsMTA2NiwxNjg4LDEwNjYgfSwgLyogOyAwNjsgMDcgKDY0MHg1MTIsMTI4MHgxMDI0KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8yeDc1W109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGF0YV8yeDc1W10gPQogewogICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjQ2LDcgKzIyMTcsNyBAQAogICAgICAgICB7MTY4OCwxMDY2LDE2ODgsMTA2NiB9LCAvKiA7IDA2OyAwNyAoNjQweDUxMiwxMjgweDEwMjQpICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFNOb1NjYWxpbmdEYXRheDc1W109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTTm9TY2FsaW5nRGF0YXg3NVtdID0KIHsKICAgICAgICAgezgwMCw0NDksODAwLDQ0OSAgICAgfSwgLyogOyAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgezgwMCw0NDksODAwLDQ0OSAgICAgfSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjI2MSw3ICsyMjMyLDcgQEAKICAgICAgICAgezE2ODgsODA2LDE2ODgsODA2ICAgfSwgLyogOyAwQSAoMTI4MHg3Njh4NzVIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18xW10gPQogewogCXsgICAgICAwLDEwNDgsICAgMCwgNzcxICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDAsMTA0OCwgICAwLCA3NzEgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjcyLDcgKzIyNDMsNyBAQAogICAgICAgICB7ICAgICAgMCwxMDQ4LCA4MDUsIDc3MCAgICAgfSAgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCiB9IDsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMltdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzJbXSA9CiB7CiAgICAgCXsgICAgICAxMTQyLCA4NTYsIDYyMiwgNTg3ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDExNDIsIDg1NiwgNTk3LCA1NjIgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMjgzLDcgKzIyNTQsNyBAQAogICAgICAgICB7ICAgICAgICAgMCwxMDQ4LCA4MDUsIDc3MSAgICAgfSAgLyogMDYgKDEwMjR4NzY4eDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18zW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfM1tdID0KIHsKICAgICAJeyAgICAgICAzMjAsICAyNCwgNjIyLCA1ODcgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgIDMyMCwgIDI0LCA1OTcsIDU2MiAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIyOTIsNyArMjI2Myw3IEBACiAgICAgICAgIHsgICAgICAgMzIwLCAgMjQsIDcyMiwgNjg3ICAgICB9ICAvKiAwNCAoNjQweDQ4MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREZXNfMVtdID0KIHsKICAgICAJeyAgICAgIDAsMTMyOCwgICAgMCwgMTAyNSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAwLDEzMjgsICAgIDAsIDEwMjUgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMzA1LDcgKzIyNzYsNyBAQAogfTsKIAogIC8qIFRoZSBEaXNwbGF5IHNldHRpbmcgZm9yIERFIE1vZGUgUGFuZWwgKi8KLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTI4MHgxMDI0RGVzXzJbXSA9CiB7CiAgICAgCXsgICAgICAxMzY4LDEwMDgsNzUyLDcxMSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAxMzY4LDEwMDgsNzI5LDY4OCAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzMTcsNyArMjI4OCw3IEBACiAgICAgICAgIHsgICAgICAwMDAwLDEzMjgsMCwxMDI1ICAgICB9ICAvKiAwNyAoMTI4MHgxMDI0eDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNDAweDEwNTBEZXNfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzE0MDB4MTA1MERlc18xW10gPQogewogICAgIAl7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSwgLyogMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHsgICAgICAwLDE0NDgsMCwxMDUxICAgICB9LCAvKiAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjMzMCw3ICsyMzAxLDcgQEAKICAgICAgICAgeyAgICAgIDAsMTQ0OCwwLDEwNTEgICAgIH0gIC8qIDA4ICgxNDAweDEwNTB4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzE0MDB4MTA1MERlc18yW109CitzdHJ1Y3QgWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTQwMHgxMDUwRGVzXzJbXSA9CiB7CiAgICAgCXsgICAgICAxMzA4LDEwNjgsIDc4MSwgNzY2ICAgICB9LCAvKiAwMCAoMzIweDIwMCwzMjB4NDAwLDY0MHgyMDAsNjQweDQwMCkgKi8KICAgICAgICAgeyAgICAgIDEzMDgsMTA2OCwgNzgxLCA3NjYgICAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMzQzLDcgKzIzMTQsNyBAQAogICAgICAgICB7ICAgICAgMCwxNDQ4LDAsMTA1MSAgICAgfSAgLyogMDggKDE0MDB4MTA1MHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTYwMHgxMjAwRGVzXzFbXT0KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxNjAweDEyMDBEZXNfMVtdID0KIHsKICAgICAJeyAgICAgIDAsMTY2NCwwLDEyMDEgICAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAgMCwxNjY0LDAsMTIwMSAgICAgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzNTksNyArMjMzMCw3IEBACiAKIAogCi1YR0kzMzBfTENERGF0YURlc1N0cnVjdDIgIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YVtdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiAgWEdJX0xWRFNOb1NjYWxpbmdEZXNEYXRhW10gPQogewogICAgIAl7ICAgICAwLCA2NDgsIDQ0OCwgNDA1LCAgOTYsICAgMiAgIH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7ICAgICAwLCA2NDgsIDQ0OCwgMzU1LCAgOTYsICAgMiAgIH0sIC8qIDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMzc0LDcgKzIzNDUsNyBAQAogICAgICAgICB7ICAgICAwLDEzMjgsMCwwNzcxLCAxMTIsICAgNiAgIH0gIC8qIDBBICgxMjgweDc2OHg2MEh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMXg3NVtdPQkJCS8qIDsgMTAyNHg3NjggRnVsbC1zY3JlZW4gKi8KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18xeDc1W10gPQkJCS8qIDsgMTAyNHg3NjggRnVsbC1zY3JlZW4gKi8KIHsKICAgICAgICAgezAsMTA0MCwwLDc2OX0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHswLDEwNDAsMCw3Njl9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yMzg1LDcgKzIzNTYsNyBAQAogICAgICAgICB7MCwxMDQwLDAsNzY5fSAvKiA7IDA2ICgxMDI0eDc2OHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xWRFNEYXRhU3RydWN0IFhHSV9MVkRTMTAyNHg3NjhEZXNfMng3NVtdPSAvKiA7IDEwMjR4NzY4IGNlbnRlci1zY3JlZW4gKEVuaC4gTW9kZSkgKi8KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMDI0eDc2OERlc18yeDc1W10gPSAvKiA7IDEwMjR4NzY4IGNlbnRlci1zY3JlZW4gKEVuaC4gTW9kZSkgKi8KIHsKICAgICAgICAgezExNDIsIDg1Niw2MjIsNTg3IH0sIC8qIDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTE0MiwgODU2LDU5Nyw1NjIgfSwgLyogMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTIzOTYsNyArMjM2Nyw3IEBACiAgICAgICAgIHsgICAwLDEwNDgsODA1LDc3MSB9ICAvKiAwNiAoMTAyNHg3Njh4NjBIeikgKi8KIH07CiAKLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzN4NzVbXT0gLyogOyAxMDI0eDc2OCBjZW50ZXItc2NyZWVuIChTdC5Nb2RlKSAqLworc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEwMjR4NzY4RGVzXzN4NzVbXSA9IC8qIDsgMTAyNHg3NjggY2VudGVyLXNjcmVlbiAoU3QuTW9kZSkgKi8KIHsKICAgICAgICAgezMyMCwyNCw2MjIsNTg3ICB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MzIwLDI0LDU5Nyw1NjIgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTI0MDUsNyArMjM3Niw3IEBACiAgICAgICAgIHszMjAsMjQsNzIyLDY4NyAgfSAvKiA7IDA0ICg2NDB4NDgweDYwSHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREZXNfMXg3NVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18xeDc1W10gPQogewogICAgICAgICB7MCwxMjk2LDAsMTAyNX0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgIHswLDEyOTYsMCwxMDI1fSwgLyogOyAwMSAoMzIweDM1MCw2NDB4MzUwKSAqLwpAQCAtMjQxOCw3ICsyMzg5LDcgQEAKIH07CiAKIC8qIFRoZSBEaXNwbGF5IHNldHRpbmcgZm9yIERFIE1vZGUgUGFuZWwgKi8KLVhHSTMzMF9MVkRTRGF0YVN0cnVjdCBYR0lfTFZEUzEyODB4MTAyNERlc18yeDc1W109ICAgLyogW3ljY2hlbl0gMDIvMTgvMDMgU2V0IERFIGFzIGRlZmF1bHQgKi8KK3N0cnVjdCBYR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgWEdJX0xWRFMxMjgweDEwMjREZXNfMng3NVtdID0gICAvKiBbeWNjaGVuXSAwMi8xOC8wMyBTZXQgREUgYXMgZGVmYXVsdCAqLwogewogICAgICAgICB7MTM2OCw5NzYsNzUyLDcxMSB9LCAvKiA7IDAwICgzMjB4MjAwLDMyMHg0MDAsNjQweDIwMCw2NDB4NDAwKSAqLwogICAgICAgICB7MTM2OCw5NzYsNzI5LDY4OCB9LCAvKiA7IDAxICgzMjB4MzUwLDY0MHgzNTApICovCkBAIC0yNDMwLDcgKzI0MDEsNyBAQAogICAgICAgICB7MCwxMjk2LDAsMTAyNSAgICB9IC8qIDsgMDcgKDEyODB4MTAyNHg3NUh6KSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFEZXNTdHJ1Y3QyIFhHSV9MVkRTTm9TY2FsaW5nRGVzRGF0YXg3NVtdPSAgLyogU2NhbGluZyBMQ0QgNzVIeiAqLworc3RydWN0IFhHSTMzMF9MQ0REYXRhRGVzU3RydWN0MiBYR0lfTFZEU05vU2NhbGluZ0Rlc0RhdGF4NzVbXSA9ICAvKiBTY2FsaW5nIExDRCA3NUh6ICovCiB7CiAgICAgICAgeyAwLDY0OCw0NDgsNDA1LDk2LDIgIH0sIC8qIDsgMDAgKDMyMHgyMDAsMzIweDQwMCw2NDB4MjAwLDY0MHg0MDApICovCiAgICAgICAgeyAwLDY0OCw0NDgsMzU1LDk2LDIgIH0sIC8qIDsgMDEgKDMyMHgzNTAsNjQweDM1MCkgKi8KQEAgLTI0NDUsNyArMjQxNiw3IEBACiAgICAgICAgeyAwLDEzMjgsMCw3NzEsMTEyLDYgIH0gIC8qIDsgMEEgKDEyODB4NzY4eDc1SHopICovCiB9OwogCi1YR0kzMzBfTFZEU0RhdGFTdHJ1Y3QgIFhHSTMzMF9MVkRTNjQweDQ4MERhdGFfMVtdPQorc3RydWN0IFhHSTMzMF9MVkRTRGF0YVN0cnVjdCAgWEdJMzMwX0xWRFM2NDB4NDgwRGF0YV8xW10gPQogewogIHs4MDAsIDQ0OSwgODAwLCA0NDl9LAogIHs4MDAsIDQ0OSwgODAwLCA0NDl9LApAQCAtMjQ1OCw3ICsyNDI5LDcgQEAKICB7MTA1NiwgNjI4LDEwNTYsIDYyOH0KIH07CiAKLVhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZVTlRTQ0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWVU5UU0NEYXRhW10gPQogewogIHs4NDAsIDYwMCwgODQwLCA2MDB9LAogIHs4NDAsIDYwMCwgODQwLCA2MDB9LApAQCAtMjQ2OCw3ICsyNDM5LDcgQEAKICB7MTA2NCwgNzUwLDEwNjQsIDc1MH0KIH07CiAKLVhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZPTlRTQ0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfQ0hUVkRhdGFTdHJ1Y3QgIFhHSV9DSFRWT05UU0NEYXRhW10gPQogewogIHs4NDAsIDUyNSwgODQwLCA1MjV9LAogIHs4NDAsIDUyNSwgODQwLCA1MjV9LApAQCAtMjQ3OCw3ICsyNDQ5LDcgQEAKICB7MTA0MCwgNzAwLDEwNDAsIDcwMH0KIH07CiAKLVhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZVUEFMRGF0YVtdPQorc3RydWN0IFhHSTMzMF9DSFRWRGF0YVN0cnVjdCAgWEdJX0NIVFZVUEFMRGF0YVtdID0KIHsKICB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCiAgezEwMDgsIDYyNSwxMDA4LCA2MjV9LApAQCAtMjQ4OCw3ICsyNDU5LDcgQEAKICB7OTM2LCA4MzYsIDkzNiwgODM2fQogfTsKIAotWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9QQUxEYXRhW109CitzdHJ1Y3QgWEdJMzMwX0NIVFZEYXRhU3RydWN0ICBYR0lfQ0hUVk9QQUxEYXRhW10gPQogewogIHsxMDA4LCA2MjUsMTAwOCwgNjI1fSwKICB7MTAwOCwgNjI1LDEwMDgsIDYyNX0sCkBAIC0yNDk4LDcgKzI0NjksNyBAQAogIHs5NjAsIDc1MCwgOTYwLCA3NTB9CiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMV9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSFtdID0KIHsKIAkgICAgICAgIC8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0QiwweDI3LDB4OEYsMHgzMiwweDFCLDB4MDAsMHg0NSwweDAwIH19LCAvKiAwMCAoMzIweCkgKi8KQEAgLTI1MTEsNyArMjQ4Miw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweEEzLDB4N0YsMHg4NywweDg2LDB4OTcsMHgwMCwweDAyLDB4MDAgfX0gLyogMDcgKDEwMjR4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0hbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfSFtdID0KIHsKIAkJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDU2LDB4MjcsMHg5QSwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwpAQCAtMjUyNSw3ICsyNDk2LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTgsMHgxNiwweDAwLDB4MDcsMHgwMCB9fSAvKiAwOCAoMTI4MHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTAyNHg3NjhfMl9IW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSFtdID0KIHsKIAkJLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDYzLDB4MjcsMHg4NywweDNCLDB4OEMsMHgwMCwweDAxLDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwpAQCAtMjUzOCw3ICsyNTA5LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4QTMsMHg3RiwweDg3LDB4ODYsMHg5NywweDAwLDB4MDIsMHgwMCB9fSAvKiAwNyAoMTAyNHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCAgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfSFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0ICBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IW10gPQogewogICAgICAgICAgICAgICAgIC8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3RSwweDNCLDB4OUEsMHg0NCwweDEyLDB4MDAsMHgwMSwweDAwIH19LCAvKiAwMCAoMzIweCkgKi8KQEAgLTI1NTIsNyArMjUyMyw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4OUYsMHg5MiwweEE4LDB4MTYsMHgwMCwweDA3LDB4MDAgfX0gLyogMDggKDEyODB4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzFfSFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8xX0hbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDQ3LDB4MjcsMHg4QiwweDJDLDB4MUEsMHgwMCwweDA1LDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg0NywweDI3LDB4OEIsMHgzMCwweDFFLDB4MDAsMHgwNSwweDAwIH19LCAvKiAwMSAoMzYweCkgKi8KQEAgLTI1NjYsNyArMjUzNyw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4QUUsMHg5MiwweEIzLDB4MDEsMHgwMCwweDAzLDB4MDAgfX0gLyogMDkgKDE0MDB4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfSFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8yX0hbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDc2LDB4M0YsMHg4MywweDQ1LDB4OEMsMHgwMCwweDQxLDB4MDAgfX0sIC8qIDAwICgzMjB4KSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg3NiwweDNGLDB4ODMsMHg0NSwweDhDLDB4MDAsMHg0MSwweDAwIH19LCAvKiAwMSAoMzYweCkgKi8KQEAgLTI1ODAsNyArMjU1MSw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweENFLDB4QUUsMHg5MiwweEJDLDB4MEEsMHgwMCwweDAzLDB4MDAgfX0gLyogMDkgKDE0MDB4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfSFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE2MDB4MTIwMF8xX0hbXSA9CiAvKiA7MzAybHYgY2hhbm5lbEEgW3ljY2hlbl0gMTIvMDUvMDIgTENESFQ9MjA0OCAqLwogeyAgIC8qIDsgQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDVCLDB4MjcsMHg5RiwweDMyLDB4MEEsMHgwMCwweDAxLDB4MDAgfX0sLyogMDAgKDMyMHgpICovCkBAIC0yNTk2LDcgKzI1NjcsNyBAQAogCQl7eyAgICAgIDB4RkIsMHhDNywweDlGLDB4QzksMHg4MSwweDAwLDB4MDcsMHgwMCB9fSAvKiAwQSAoMTYwMHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1ZbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1ZbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQStDUjA5KDUtPjcpICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDk3LDB4MUYsMHg2MCwweDg3LDB4NUQsMHg4MywweDEwICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHhCNCwweDFGLDB4OTIsMHg4OSwweDhGLDB4QjUsMHgzMCAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KQEAgLTI2MDUsNyArMjU3Niw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweDI0LDB4RjUsMHgwMiwweDg4LDB4RkYsMHgyNSwweDkwICAgICAgfX0gLyogMDQgKHg3NjgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX1ZbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX1ZbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyNCwweEJCLDB4MzEsMHg4NywweDVELDB4MjUsMHgzMCAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjQsMHhCQiwweDRBLDB4ODAsMHg4RiwweDI1LDB4MzAgICAgICB9fSwgLyogMDEgKHg0MDApICovCkBAIC0yNjE0LDcgKzI1ODUsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyNCwweEY1LDB4MDIsMHg4OCwweEZGLDB4MjUsMHg5MCAgICAgIH19IC8qIDA0ICh4NzY4KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX1ZbXSA9CiB7ICAgICAgICAgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgIDB4ODYsMHgxRiwweDVFLDB4ODIsMHg1RCwweDg3LDB4MDAgICAgIH19LCAvKiAwMCAoeDM1MCkgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgICAweEI4LDB4MUYsMHg5MCwweDg0LDB4OEYsMHhCOSwweDMwICAgICB9fSwgLyogMDEgKHg0MDApICovCkBAIC0yNjI0LDcgKzI1OTUsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgIH19IC8qIDA1ICh4MTAyNCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1ZbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9WW10gPQogeyAgICAgICAgICAgICAgIC8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEEgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHhEMiwweEFGLDB4ODMsMHhBRSwweEQ4LDB4QTEgICAgICB9fSwgLyogMDAgKHgzNTApICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4RDIsMHhDOCwweDhDLDB4QzcsMHhGMiwweDgxICAgICAgfX0sIC8qIDAxICh4NDAwKSAqLwpAQCAtMjYzNCw3ICsyNjA1LDcgQEAKICAgICAgICAgICAgICAgICB7eyAgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgICB9fSAvKiAwNSAoeDEwMjQpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExNDAweDEwNTBfMV9WW109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzFfVltdID0KIHsgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDZDLDB4MUYsMHg2MCwweDg0LDB4NUQsMHg2RCwweDEwICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHg5RSwweDFGLDB4OTMsMHg4NiwweDhGLDB4OUYsMHgzMCAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KQEAgLTI2NDUsNyArMjYxNiw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4MTAsMHgxQSwweDgwLDB4MTksMHgyOSwweDBGICAgICAgfX0gLyogMDYgKHgxMDUwKSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTQwMHgxMDUwXzJfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE0MDB4MTA1MF8yX1ZbXSA9CiB7ICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4OTIsMHhCNiwweDgzLDB4QjUsMHhDRiwweDgxICAgICAgfX0sIC8qIDAwICh4MzUwKSAqLwogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyOCwweDkyLDB4RDUsMHg4MiwweEQ0LDB4RUUsMHg4MSAgICAgIH19LCAvKiAwMSAoeDQwMCkgKi8KQEAgLTI2NTYsNyArMjYyNyw3IEBACiAgICAgICAgICAgICAgICAge3sgICAgICAweDI4LDB4MTAsMHgxQSwweDg3LDB4MTksMHgyOSwweDhGICAgICAgfX0gLyogMDYgKHgxMDUwKSAqLwogfTsKIAotWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTYwMHgxMjAwXzFfVltdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTE2MDB4MTIwMF8xX1ZbXSA9CiB7CiAgICAgICAgICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBK0NSMDkoNS0+NykgKi8KICAgICAgICAgICAgICAgICB7eyAgICAgIDB4ZDQsMHgxRiwweDgxLDB4ODQsMHg1RCwweGQ1LDB4MTAgICAgICB9fSwgLyogMDAgKHgzNTApICovCkBAIC0yNjY5LDcgKzI2NDAsNyBAQAogICAgICAgICAgICAgICAgIHt7ICAgICAgMHgyNiwweDExLDB4ZDMsMHg4NiwweGFGLDB4MjcsMHgzZiAgICAgIH19IC8qIDA3ICh4MTIwMCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSHg3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSHg3NVtdID0KIHsgCS8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwogICAgIHt7ICAgICAgMHg0QiwweDI3LDB4OEYsMHgzMiwweDFCLDB4MDAsMHg0NSwweDAwIH19LC8qIDsgMDAgKDMyMHgpICovCiAgICAge3sgICAgICAweDRCLDB4MjcsMHg4RiwweDJCLDB4MDMsMHgwMCwweDQ0LDB4MDAgfX0sLyogOyAwMSAoMzYweCkgKi8KQEAgLTI2ODEsNyArMjY1Miw3IEBACiAgICAge3sgICAgICAweDlGLDB4N0YsMHg4MywweDg1LDB4OTEsMHgwMCwweDAyLDB4MDAgfX0gLyogOyAwNyAoMTAyNHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1Z4NzVbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMDI0eDc2OF8xX1Z4NzVbXSA9CiB7CS8qIENSMDYsQ1IwNyxDUjEwLENSMTEsQ1IxNSxDUjE2LFNSMEErQ1IwOSg1LT43KSAqLwogICAgIHt7ICAgICAgMHg5NywweDFGLDB4NjAsMHg4NywweDVELDB4ODMsMHgxMCAgICAgIH19LC8qIDsgMDAgKHgzNTApICovCiAgICAge3sgICAgICAweEI0LDB4MUYsMHg5MiwweDg5LDB4OEYsMHhCNSwweDMwICAgICAgfX0sLyogOyAwMSAoeDQwMCkgKi8KQEAgLTI2OTAsNyArMjY2MSw3IEBACiAgICAge3sgICAgICAweDFFLDB4RjUsMHgwMCwweDgzLDB4RkYsMHgxRiwweDkwICAgICAgfX0gLyogOyAwNCAoeDc2OCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSHg3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfSHg3NVtdID0KIHsgICAgICAgLyogQ1IwMCxDUjAyLENSMDMsQ1IwNCxDUjA1LFNSMEIsU1IwQyxTUjBFICovCiAgICAge3sgICAgICAweDYzLDB4MjcsMHg4NywweDNCLDB4OEMsMHgwMCwweDAxLDB4MDAgfX0sLyogOyAwMCAoMzIweCkgKi8KICAgICB7eyAgICAgIDB4NjMsMHgyNywweDg3LDB4M0IsMHg4QywweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAxICgzNjB4KSAqLwpAQCAtMjcwMiw3ICsyNjczLDcgQEAKICAgICB7eyAgICAgIDB4QTMsMHg3RiwweDg3LDB4ODYsMHg5NywweDAwLDB4MDIsMHgwMCB9fSAvKiA7IDA3ICgxMDI0eCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVng3NVtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzJfVng3NVtdID0KIHsgICAgICAgLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwogICAgIHt7ICAgICAgMHgyNCwweEJCLDB4MzEsMHg4NywweDVELDB4MjUsMHgzMCAgICAgIH19LC8qIDsgMDAgKHgzNTApICovCiAgICAge3sgICAgICAweDI0LDB4QkIsMHg0QSwweDgwLDB4OEYsMHgyNSwweDMwICAgICAgfX0sLyogOyAwMSAoeDQwMCkgKi8KQEAgLTI3MTEsNyArMjY4Miw3IEBACiAgICAge3sgICAgICAweDI0LDB4RjUsMHgwMiwweDg4LDB4RkYsMHgyNSwweDkwICAgICAgfX0gLyogOyAwNCAoeDc2OCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMUhEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8xX0h4NzVbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9IeDc1W10gPQogeyAgICAgIC8qIENSMDAsQ1IwMixDUjAzLENSMDQsQ1IwNSxTUjBCLFNSMEMsU1IwRSAqLwogICAgIHt7ICAgICAgMHg1NiwweDI3LDB4OUEsMHgzMCwweDFFLDB4MDAsMHgwNSwweDAwIH19LC8qIDsgMDAgKDMyMHgpICovCiAgICAge3sgICAgICAweDU2LDB4MjcsMHg5QSwweDMwLDB4MUUsMHgwMCwweDA1LDB4MDAgfX0sLyogOyAwMSAoMzYweCkgKi8KQEAgLTI3MjQsNyArMjY5NSw3IEBACiAgICAge3sgICAgICAweENFLDB4OUYsMHg5MiwweEE1LDB4MTcsMHgwMCwweDA3LDB4MDAgfX0gLyogOyAwOCAoMTI4MHgpICovCiB9OwogCi1YR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMV9WeDc1W109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxVkRhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzFfVng3NVtdID0KIHsJLyogQ1IwNixDUjA3LENSMTAsQ1IxMSxDUjE1LENSMTYsU1IwQSAqLwogICAgIHt7ICAgICAgMHg4NiwweEQxLDB4QkMsMHg4MCwweEJCLDB4RTUsMHgwMCAgICAgIH19LC8qIDsgMDAgKHgzNTApICovCiAgICAge3sgICAgICAweEI4LDB4MUYsMHg5MCwweDg0LDB4OEYsMHhCOSwweDMwICAgICAgfX0sLyogOyAwMSAoeDQwMCkgKi8KQEAgLTI3MzQsNyArMjcwNSw3IEBACiAgICAge3sgICAgICAweDI4LDB4NUEsMHgxMywweDg3LDB4RkYsMHgyOSwweEE5ICAgICAgfX0gLyogOyAwNSAoeDEwMjQpICovCiB9OwogCi1YR0lfTFZEU0NSVDFIRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9IeDc1W109CitzdHJ1Y3QgWEdJX0xWRFNDUlQxSERhdGFTdHJ1Y3QgWEdJX0xWRFNDUlQxMTI4MHgxMDI0XzJfSHg3NVtdID0KIHsKIAkvKiBDUjAwLENSMDIsQ1IwMyxDUjA0LENSMDUsU1IwQixTUjBDLFNSMEUgKi8KICAgICB7eyAgICAgIDB4N0UsMHgzQiwweDlBLDB4NDQsMHgxMiwweDAwLDB4MDEsMHgwMCB9fSwvKiA7IDAwICgzMjB4KSAqLwpAQCAtMjc0OCw3ICsyNzE5LDcgQEAKICAgICB7eyAgICAgIDB4Q0UsMHg5RiwweDkyLDB4QTgsMHgxNiwweDAwLDB4MDcsMHgwMCB9fSAvKiA7IDA4ICgxMjgweCkgKi8KIH07CiAKLVhHSV9MVkRTQ1JUMVZEYXRhU3RydWN0IFhHSV9MVkRTQ1JUMTEyODB4MTAyNF8yX1Z4NzVbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFWRGF0YVN0cnVjdCBYR0lfTFZEU0NSVDExMjgweDEwMjRfMl9WeDc1W10gPQogewogICAgICAgICAvKiBDUjA2LENSMDcsQ1IxMCxDUjExLENSMTUsQ1IxNixTUjBBICovCiAgICAgIHt7ICAgICAweDI4LDB4RDIsMHhBRiwweDgzLDB4QUUsMHhEOCwweEExICAgICB9fSwvKiA7IDAwICh4MzUwKSAqLwpAQCAtMjc1OSw3ICsyNzMwLDcgQEAKICAgICAge3sgICAgIDB4MjgsMHg1QSwweDEzLDB4ODcsMHhGRiwweDI5LDB4QTkgICAgIH19IC8qIDsgMDUgKHgxMDI0KSAqLwogfTsKIAotWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxVU5UU0NbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFVTlRTQ1tdID0KIHsKICB7ezB4NjQsMHg0ZiwweDg4LDB4NTYsMHg5ZiwweDU2LDB4M2UsCiAgICAgMHhlOCwweDg0LDB4OGYsMHg1NywweDIwLDB4MDAsMHgwMSwweDAwIH19LApAQCAtMjc3NSw3ICsyNzQ2LDcgQEAKICAgIDB4OTAsMHg4YywweDU3LDB4ZWQsMHgyMCwweDAwLDB4MDYsMHgwMSB9fQogfTsKIAotWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxT05UU0NbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFPTlRTQ1tdID0KIHsKICB7ezB4NjQsMHg0ZiwweDg4LDB4NWEsMHg5ZiwweDBiLDB4M2UsCiAgICAgMHhjMCwweDg0LDB4OGYsMHgwYywweDIwLDB4MDAsMHgwMSwweDAwIH19LApAQCAtMjc5MSw3ICsyNzYyLDcgQEAKICAgIDB4N2YsMHg4NiwweDU3LDB4YmIsMHgwMCwweDAwLDB4MDYsMHgwMSB9fQogfTsKIAotWEdJX0xWRFNDUlQxRGF0YVN0cnVjdCAgWEdJX0NIVFZDUlQxVVBBTFtdPQorc3RydWN0IFhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMVVQQUxbXSA9CiB7CiAge3sweDc5LDB4NGYsMHg5ZCwweDVhLDB4OTAsMHg2ZiwweDNlLAogICAgIDB4ZjgsMHg4MywweDhmLDB4NzAsMHgyMCwweDAwLDB4MDUsMHgwMCB9fSwKQEAgLTI4MDcsNyArMjc3OCw3IEBACiAgICAweGM4LDB4OGMsMHg1NywweGU5LDB4MjAsMHgwMCwweDA1LDB4MDEgfX0KIH07CiAKLVhHSV9MVkRTQ1JUMURhdGFTdHJ1Y3QgIFhHSV9DSFRWQ1JUMU9QQUxbXT0KK3N0cnVjdCBYR0lfTFZEU0NSVDFEYXRhU3RydWN0ICBYR0lfQ0hUVkNSVDFPUEFMW10gPQogewogIHt7MHg3OSwweDRmLDB4OWQsMHg1YSwweDkwLDB4NmYsMHgzZSwKICAgICAweGYwLDB4ODMsMHg4ZiwweDcwLDB4MjAsMHgwMCwweDA1LDB4MDAgfX0sCkBAIC0yODI0LDcgKzI3OTUsNyBAQAogfTsKIAogLyphZGQgZm9yIG5ldyBVTklWR0FCSU9TKi8KLVhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfTENERGF0YVRhYmxlW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REYXRhVGFibGVbXSA9CiB7CiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDEsMH0sICAvKiBYR0lfRXh0TENEMTAyNHg3NjhEYXRhICovCiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOSwweDAwMDAsMX0sICAvKiBYR0lfU3RMQ0QxMDI0eDc2OERhdGEgKi8KQEAgLTI4NDgsNyArMjgxOSw3IEBACiAgIHsweEZGLDB4MDAwMCwweDAwMDAsMH0gICAJCS8qIEVuZCBvZiB0YWJsZSAqLwogfTsKIAotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9MQ0REZXNEYXRhVGFibGVbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0xDRERlc0RhdGFUYWJsZVtdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE5LDB4MDAwMSwwfSwgLyogWEdJX0V4dExDRERlczEwMjR4NzY4RGF0YSAqLwogICB7UGFuZWwxMDI0eDc2OCwweDAwMTksMHgwMDAwLDF9LCAvKiBYR0lfU3RMQ0REZXMxMDI0eDc2OERhdGEgKi8KQEAgLTI4NzMsNyArMjg0NCw3IEBACiAgIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KIH07CiAKLVhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENEQ1JUMVB0cl9IW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX0hbXSA9CiB7CiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMDAsMH0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfSCAqLwogICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDEwLDF9LCAvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX0ggKi8KQEAgLTI4ODksNyArMjg2MCw3IEBACiAgIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KIH07CiAKLVhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENEQ1JUMVB0cl9WW109CitzdHJ1Y3QgWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExMQ0RDUlQxUHRyX1ZbXSA9CiB7CiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMDAsMH0sIC8qIFhHSV9MVkRTQ1JUMTEwMjR4NzY4XzFfViAqLwogICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDEwLDF9LCAvKiBYR0lfTFZEU0NSVDExMDI0eDc2OF8yX1YgKi8KQEAgLTI5MDUsNyArMjg3Niw3IEBACiAgIHsweEZGLDB4MDAwMCwweDAwMDAsMH0KIH07CiAKLVhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGF0YVB0cltdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMTENERGF0YVB0cltdID0KIHsKICAge1BhbmVsMTAyNHg3NjgsMHgwMDE4LDB4MDAwMCwwfSwgLyogWEdJX0xWRFMxMDI0eDc2OERhdGFfMSAqLwogICB7UGFuZWwxMDI0eDc2OCwweDAwMTgsMHgwMDEwLDF9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGF0YV8yICovCkBAIC0yOTIzLDcgKzI4OTQsNyBAQAogICB7MHhGRiwweDAwMDAsMHgwMDAwLDB9CiB9OwogCi1YR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTExDRERlc0RhdGFQdHJbXT0KK3N0cnVjdCBYR0kzMzBfTENERGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTExDRERlc0RhdGFQdHJbXSA9CiB7CiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAxOCwweDAwMDAsMH0sIC8qIFhHSV9MVkRTMTAyNHg3NjhEZXNfMSAqLwogICB7UGFuZWwxMDI0eDc2OCwweDA2MTgsMHgwNDEwLDF9LCAvKiBYR0lfTFZEUzEwMjR4NzY4RGVzXzMgKi8KQEAgLTI5NDMsMTQgKzI5MTQsMTQgQEAKICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfQogfTsKIAotWEdJMzMwX0xDRERhdGFUYWJsU3RydWN0IFhHSV9FUExDSExDRFJlZ1B0cltdPQorc3RydWN0IFhHSTMzMF9MQ0REYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hMQ0RSZWdQdHJbXSA9CiB7CiAgIHtQYW5lbDEwMjR4NzY4LDB4MDAwMCwweDAwMDAsMH0sIC8qIFhHSV9DSDcwMTdMVjEwMjR4NzY4ICovCiAgIHtQYW5lbDE0MDB4MTA1MCwweDAwMDAsMHgwMDAwLDF9LCAvKiBYR0lfQ0g3MDE3TFYxNDAweDEwNTAgKi8KICAgezB4RkYsMHgwMDAwLDB4MDAwMCwwfQogfTsKIAotWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX1RWRGF0YVRhYmxlW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX1RWRGF0YVRhYmxlW10gPQogewogIHsweDA5RTEsMHgwMDAxLDB9LAkvKiBYR0lfRXh0UEFMRGF0YSAqLwogIHsweDA5RTEsMHgwMDAwLDF9LAkvKiBYR0lfRXh0TlRTQ0RhdGEgKi8KQEAgLTI5NjgsNyArMjkzOSw3IEBACiAgezB4ZmZmZiwweDAwMDAsMTJ9ICAJLyogRU5EICovCiB9OwogCi1VU0hPUlQgVFZMZW5MaXN0W109Cit1bnNpZ25lZCBzaG9ydCBUVkxlbkxpc3RbXSA9CiB7CiAgICBMVkRTQ1JUMUxlbl9ILAogICAgTFZEU0NSVDFMZW5fViwKQEAgLTI5ODEsNyArMjk1Miw3IEBACiB9IDsKIAogLyogQ2hyb250ZWwgNzAxNyBUViBDUlQxIFRpbWluZyBMaXN0ICovCi1YR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hUVkNSVDFQdHJbXT0KK3N0cnVjdCBYR0kzMzBfVFZEYXRhVGFibFN0cnVjdCBYR0lfRVBMQ0hUVkNSVDFQdHJbXSA9CiB7CiAgIHsweDAwMTEsMHgwMDAwLDB9LCAvKiBYR0lfQ0hUVkNSVDFVTlRTQyAqLwogICB7MHgwMDExLDB4MDAxMCwxfSwgLyogWEdJX0NIVFZDUlQxT05UU0MgKi8KQEAgLTI5OTEsNyArMjk2Miw3IEBACiB9OwogCiAvKiA7O0Nocm9udGVsIDcwMTcgVFYgVGltaW5nIExpc3QgKi8KLVhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWRGF0YVB0cltdPQorc3RydWN0IFhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWRGF0YVB0cltdID0KIHsKICAgezB4MDAxMSwweDAwMDAsMH0sIC8qIFhHSV9DSFRWVU5UU0NEYXRhICovCiAgIHsweDAwMTEsMHgwMDEwLDF9LCAvKiBYR0lfQ0hUVk9OVFNDRGF0YSAqLwpAQCAtMzAwMSw3ICsyOTcyLDcgQEAKIH07CiAKIC8qIDs7Q2hyb250ZWwgNzAxNyBUViBSZWcuIExpc3QgKi8KLVhHSTMzMF9UVkRhdGFUYWJsU3RydWN0IFhHSV9FUExDSFRWUmVnUHRyW109CitzdHJ1Y3QgWEdJMzMwX1RWRGF0YVRhYmxTdHJ1Y3QgWEdJX0VQTENIVFZSZWdQdHJbXSA9CiB7CiAgIHsweDAwMTEsMHgwMDAwLDB9LCAvKiBYR0lfQ0hUVlJlZ1VOVFNDICovCiAgIHsweDAwMTEsMHgwMDEwLDF9LCAvKiBYR0lfQ0hUVlJlZ09OVFNDICovCkBAIC0zMDEwLDcgKzI5ODEsNyBAQAogICB7MHhGRkZGLDB4MDAwMCw0fQogfTsKIAotVVNIT1JUIExDRExlbkxpc3RbXT0KK3Vuc2lnbmVkIHNob3J0IExDRExlbkxpc3RbXSA9CiB7CiAgICBMVkRTQ1JUMUxlbl9ILAogICAgTFZEU0NSVDFMZW5fViwKQEAgLTMwMjQsNyArMjk5NSw3IEBACiAgICAwCiB9IDsKIAotWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJNjYwX0xDRERMQ2FwTGlzdFtdPSAgLyogNjYwLCBEdWFsIGxpbmsgKi8KK3N0cnVjdCBYR0kzMzBfTENEQ2FwU3RydWN0ICBYR0k2NjBfTENERExDYXBMaXN0W10gPSAgLyogNjYwLCBEdWFsIGxpbmsgKi8KIHsKIC8qIExDRENhcDEwMjR4NzY4ICovCiAJCXtQYW5lbDEwMjR4NzY4LCBEZWZhdWx0TENEQ2FwLCAwLCAweDAxNCwgMHg4OCwgMHgwNiwgVkNMSzY1LApAQCAtMzA1Niw3ICszMDI3LDcgQEAKIAkJMHgzMCwgMHgxMCwgMHg1QSwgMHgxMCwgMHgxMCwgMHgwQSwgMHhDMCwgMHgyOCwgMHgxMH0KIH07CiAKLVhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSV9MQ0RETENhcExpc3RbXT0gIC8qIER1YWwgbGluayBvbmx5ICovCitzdHJ1Y3QgWEdJMzMwX0xDRENhcFN0cnVjdCAgWEdJX0xDRERMQ2FwTGlzdFtdID0gIC8qIER1YWwgbGluayBvbmx5ICovCiB7CiAvKiBMQ0RDYXAxMDI0eDc2OCAqLwogCQl7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTIsIDB4ODgsIDB4MDYsIFZDTEs2NSwKQEAgLTMwODgsNyArMzA1OSw3IEBACiAJCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CiB9OwogCi1YR0kzMzBfTENEQ2FwU3RydWN0ICBYR0k2NjBfTENEQ2FwTGlzdFtdPQorc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSTY2MF9MQ0RDYXBMaXN0W10gPQogewogLyogTENEQ2FwMTAyNHg3NjggKi8KICAgICAgICAgICAgICAgICB7UGFuZWwxMDI0eDc2OCwgRGVmYXVsdExDRENhcCwgMCwgMHgwMTQsIDB4ODgsIDB4MDYsIFZDTEs2NSwKQEAgLTMxMjAsNyArMzA5MSw3IEBACiAJCTB4MzAsIDB4MTAsIDB4NUEsIDB4MTAsIDB4MTAsIDB4MEEsIDB4QzAsIDB4MjgsIDB4MTB9CiB9OwogCi1YR0kzMzBfTENEQ2FwU3RydWN0ICBYR0lfTENEQ2FwTGlzdFtdPQorc3RydWN0IFhHSTMzMF9MQ0RDYXBTdHJ1Y3QgIFhHSV9MQ0RDYXBMaXN0W10gPQogewogLyogTENEQ2FwMTAyNHg3NjggKi8KIAkJe1BhbmVsMTAyNHg3NjgsIERlZmF1bHRMQ0RDYXAsIDAsIDB4MDEyLCAweDg4LCAweDA2LCBWQ0xLNjUsCkBAIC0zMTUyLDcgKzMxMjMsNyBAQAogCQkweDMwLCAweDEwLCAweDVBLCAweDEwLCAweDEwLCAweDBBLCAweEMwLCAweDI4LCAweDEwfQogfTsKIAotWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0W109CitzdHJ1Y3QgWEdJMjFfTFZEU0NhcFN0cnVjdCBYR0kyMV9MQ0RDYXBMaXN0W10gPQogewogICAgIHtEaXNhYmxlTENEMjRicHAgKyBMQ0RQb2xhcml0eSwKICAgICAgMjE2MCwxMjUwLDE2MDAsMTIwMCwgIDY0LCAgMSwgIDE5MiwgICAzLApAQCAtMzE4MSw3ICszMTUyLDcgQEAKIAogfTsKIAotWEdJX0V4dDJTdHJ1Y3QgWEdJMzMwX1JlZkluZGV4W109CitzdHJ1Y3QgWEdJX0V4dDJTdHJ1Y3QgWEdJMzMwX1JlZkluZGV4W10gPQogewoge1N1cHBvcnQzMkJwcCArIFN1cHBvcnRBbGxDUlQyICsgU3luY1BOLAkJCVJFUzMyMHgyMDAsCSBWQ0xLMjVfMTc1LCAweDAwLDB4MTAsMHg1OSwgMzIwLCAyMDB9LC8qIDAwICovCiB7U3VwcG9ydDMyQnBwICsgU3VwcG9ydEFsbENSVDIgKyBTeW5jUE4sCQkJUkVTMzIweDIwMCwJIFZDTEsyNV8xNzUsIDB4MDAsMHgxMCwweDAwLCAzMjAsIDQwMH0sLyogMDEgKi8KQEAgLTMyNjAsNyArMzIzMSw3IEBACiAKIAogCi1YR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSTMzMF9WQ0xLRGF0YVtdID0KIHsKICB7IDB4MWIsMHhlMSwgMjV9LCAvKiAweDAgKi8KICB7IDB4NGUsMHhlNCwgMjh9LCAvKiAweDEgKi8KQEAgLTMzNDQsNyArMzMxNSw3IEBACiAgeyAweDNiLDB4NjEsMTA4fSAgLyogMHg0ZiAqLwogfTsKIAotWEdJX1ZCVkNMS0RhdGFTdHJ1Y3QgWEdJMzMwX1ZCVkNMS0RhdGFbXT0KK3N0cnVjdCBYR0lfVkJWQ0xLRGF0YVN0cnVjdCBYR0kzMzBfVkJWQ0xLRGF0YVtdID0KIHsKICB7IDB4MWIsMHhlMSwgMjV9LCAvKiAweDAgKi8KICB7IDB4NGUsMHhlNCwgMjh9LCAvKiAweDEgKi8KQEAgLTM0MjIsOSArMzM5MywxMSBAQAogIHsgMHg3MCwweDQ0LDEwOH0sIC8qIDB4NDkgY2hpYXdlbiBmb3IgMTQwMHgxMDUwKi8KIH07CiAKLVVDSEFSIFhHSTMzMF9TY3JlZW5PZmZzZXRbXT17IDB4MTQsMHgxOSwweDIwLDB4MjgsMHgzMiwweDQwLDB4NTAsMHg2NCwweDc4LDB4ODAsMHgyZCwweDM1LDB4NTcsMHg0OCB9OwordW5zaWduZWQgY2hhciBYR0kzMzBfU2NyZWVuT2Zmc2V0W10gPSB7IDB4MTQsIDB4MTksIDB4MjAsIDB4MjgsIDB4MzIsIDB4NDAsCisJCQkJCTB4NTAsIDB4NjQsIDB4NzgsIDB4ODAsIDB4MmQsIDB4MzUsCisJCQkJCTB4NTcsIDB4NDh9OwogCi1YR0lfU3RSZXNJbmZvU3RydWN0IFhHSTMzMF9TdFJlc0luZm9bXT0KK3N0cnVjdCBYR0lfU3RSZXNJbmZvU3RydWN0IFhHSTMzMF9TdFJlc0luZm9bXSA9CiB7CiAgeyA2NDAsNDAwfSwKICB7IDY0MCwzNTB9LApAQCAtMzQzMyw3ICszNDA2LDcgQEAKICB7IDY0MCw0ODB9CiB9OwogCi1YR0lfTW9kZVJlc0luZm9TdHJ1Y3QgWEdJMzMwX01vZGVSZXNJbmZvW109CitzdHJ1Y3QgWEdJX01vZGVSZXNJbmZvU3RydWN0IFhHSTMzMF9Nb2RlUmVzSW5mb1tdID0KIHsKICB7ICAzMjAsIDIwMCwgOCwgOH0sCiAgeyAgMzIwLCAyNDAsIDgsIDh9LApAQCAtMzQ2MCwxMCArMzQzMywxMCBAQAogIHsgMTE1MiwgODY0LCA4LDE2fQogfTsKIAotVUNIQVIgWEdJMzMwX091dHB1dFNlbGVjdCA9MHg0MDsKLVVDSEFSIFhHSTMzMF9Tb2Z0U2V0dGluZyA9IDB4MzA7Ci1VQ0hBUiBYR0kzMzBfU1IwNz0weDE4OwotVUNIQVIgWEdJMzMwTmV3X1NSMTVbOF1bOF09ewordW5zaWduZWQgY2hhciBYR0kzMzBfT3V0cHV0U2VsZWN0ID0gMHg0MDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NvZnRTZXR0aW5nID0gMHgzMDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NSMDcgPSAweDE4OwordW5zaWduZWQgY2hhciBYR0kzMzBOZXdfU1IxNVs4XVs4XSA9IHsKIHsweDAsMHg0LDB4NjAsMHg2MH0sCiB7MHhmLDB4ZiwweGYsMHhmfSwKIHsweGJhLDB4YmEsMHhiYSwweGJhfSwKQEAgLTM0NzQsNyArMzQ0Nyw3IEBACiB7MHgwLDB4YTUsMHhmYiwweGY2fQogfTsKIAotVUNIQVIgWEdJMzMwTmV3X0NSNDBbNV1bOF09ewordW5zaWduZWQgY2hhciBYR0kzMzBOZXdfQ1I0MFs1XVs4XSA9IHsKIHsweDc3LDB4NzcsMHg0NCwweDQ0fSwKIHsweDc3LDB4NzcsMHg0NCwweDQ0fSwKIHsweDAsMHgwLDB4MCwweDB9LApAQCAtMzQ4Miw2MyArMzQ1NSw2MyBAQAogezB4MCwweDAsMHhmMCwweGY4fQogfTsKIAotVUNIQVIgWEdJMzMwX0NSNDlbXT17MHhhYSwweDg4fTsKLVVDSEFSIFhHSTMzMF9TUjFGPTB4MDsKLVVDSEFSIFhHSTMzMF9TUjIxPTB4YTM7Ci1VQ0hBUiBYR0kzMzBfNjUwX1NSMjE9MHhhNzsKLVVDSEFSIFhHSTMzMF9TUjIyPTB4ZmI7Ci1VQ0hBUiBYR0kzMzBfU1IyMz0weGY2OwotVUNIQVIgWEdJMzMwX1NSMjQ9MHhkOwordW5zaWduZWQgY2hhciBYR0kzMzBfQ1I0OVtdID0gezB4YWEsIDB4ODh9OwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IxRiA9IDB4MDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NSMjEgPSAweGEzOwordW5zaWduZWQgY2hhciBYR0kzMzBfNjUwX1NSMjEgPSAweGE3OwordW5zaWduZWQgY2hhciBYR0kzMzBfU1IyMiA9IDB4ZmI7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9TUjIzID0gMHhmNjsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1NSMjQgPSAweGQ7CiAKLVVDSEFSIFhHSTY2MF9TUjIxPTB4YTM7LyogMjAwMy4wMzEyICovCi1VQ0hBUiBYR0k2NjBfU1IyMj0weGYzOy8qIDIwMDMuMDMxMiAqLwordW5zaWduZWQgY2hhciBYR0k2NjBfU1IyMSA9IDB4YTM7LyogMjAwMy4wMzEyICovCit1bnNpZ25lZCBjaGFyIFhHSTY2MF9TUjIyID0gMHhmMzsvKiAyMDAzLjAzMTIgKi8KIAotVUNIQVIgWEdJMzMwX0xWRFNfU1IzMj0weDAwOyAgIC8qIHlubGFpIGZvciA2NTAgTFZEUyAqLwotVUNIQVIgWEdJMzMwX0xWRFNfU1IzMz0weDAwOwkvKiBjaGlhd2VuIGZvciA2NTAgTFZEUyAqLwotVUNIQVIgWEdJMzMwXzY1MF9TUjMxPTB4NDA7Ci1VQ0hBUiBYR0kzMzBfNjUwX1NSMzM9MHgwNDsKLVVDSEFSIFhHSTMzMF9DUlQyRGF0YV8xXzIgPSAweDA7Ci1VQ0hBUiBYR0kzMzBfQ1JUMkRhdGFfNF9EID0gMHgwOwotVUNIQVIgWEdJMzMwX0NSVDJEYXRhXzRfRSA9IDB4MDsKLVVDSEFSIFhHSTMzMF9DUlQyRGF0YV80XzEwID0gMHg4MDsKLVVTSE9SVCBYR0kzMzBfUkdCU2Vuc2VEYXRhID0gMHhkMTsKLVVTSE9SVCBYR0kzMzBfVmlkZW9TZW5zZURhdGEgPSAweGI5OwotVVNIT1JUIFhHSTMzMF9ZQ1NlbnNlRGF0YSA9IDB4YjM7Ci1VU0hPUlQgWEdJMzMwX1JHQlNlbnNlRGF0YTIgPSAweDAxOTA7ICAgICAvKjMwMWIqLwotVVNIT1JUIFhHSTMzMF9WaWRlb1NlbnNlRGF0YTIgPSAweDAxMTA7Ci1VU0hPUlQgWEdJMzMwX1lDU2Vuc2VEYXRhMiA9IDB4MDE2QjsKLVVDSEFSIFhHSTMzMF9OVFNDUGhhc2VbXSA9IHsweDIxLDB4ZWQsMHg4YSwweDh9OwotVUNIQVIgWEdJMzMwX1BBTFBoYXNlW10gPSB7MHgyYSwweDUsMHhkMywweDB9OwotVUNIQVIgWEdJMzMwX05UU0NQaGFzZTJbXSA9IHsweDIxLDB4RjAsMHg3QiwweEQ2fTsvKjMwMWIqLwotVUNIQVIgWEdJMzMwX1BBTFBoYXNlMltdID0gezB4MmEsMHgwOSwweDg2LDB4ZTl9OwotVUNIQVIgWEdJMzMwX1BBTE1QaGFzZVtdID0gezB4MjEsMHhFNCwweDJFLDB4OUJ9OyAgIC8qcGFsbW4qLwotVUNIQVIgWEdJMzMwX1BBTE5QaGFzZVtdID0gezB4MjEsMHhGNCwweDNFLDB4QkF9OwotVUNIQVIgWEc0MF9JMkNEZWZpbml0aW9uID0gMHgwMCA7Ci1VQ0hBUiBYRzIwX0NSOTcgPSAweDEwIDsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0xWRFNfU1IzMiA9IDB4MDA7ICAgLyogeW5sYWkgZm9yIDY1MCBMVkRTICovCit1bnNpZ25lZCBjaGFyIFhHSTMzMF9MVkRTX1NSMzMgPSAweDAwOwkvKiBjaGlhd2VuIGZvciA2NTAgTFZEUyAqLwordW5zaWduZWQgY2hhciBYR0kzMzBfNjUwX1NSMzEgPSAweDQwOwordW5zaWduZWQgY2hhciBYR0kzMzBfNjUwX1NSMzMgPSAweDA0OwordW5zaWduZWQgY2hhciBYR0kzMzBfQ1JUMkRhdGFfMV8yID0gMHgwOwordW5zaWduZWQgY2hhciBYR0kzMzBfQ1JUMkRhdGFfNF9EID0gMHgwOwordW5zaWduZWQgY2hhciBYR0kzMzBfQ1JUMkRhdGFfNF9FID0gMHgwOwordW5zaWduZWQgY2hhciBYR0kzMzBfQ1JUMkRhdGFfNF8xMCA9IDB4ODA7Cit1bnNpZ25lZCBzaG9ydCBYR0kzMzBfUkdCU2Vuc2VEYXRhID0gMHhkMTsKK3Vuc2lnbmVkIHNob3J0IFhHSTMzMF9WaWRlb1NlbnNlRGF0YSA9IDB4Yjk7Cit1bnNpZ25lZCBzaG9ydCBYR0kzMzBfWUNTZW5zZURhdGEgPSAweGIzOwordW5zaWduZWQgc2hvcnQgWEdJMzMwX1JHQlNlbnNlRGF0YTIgPSAweDAxOTA7ICAgICAvKjMwMWIqLwordW5zaWduZWQgc2hvcnQgWEdJMzMwX1ZpZGVvU2Vuc2VEYXRhMiA9IDB4MDExMDsKK3Vuc2lnbmVkIHNob3J0IFhHSTMzMF9ZQ1NlbnNlRGF0YTIgPSAweDAxNkI7Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9OVFNDUGhhc2VbXSA9IHsweDIxLCAweGVkLCAweDhhLCAweDh9OwordW5zaWduZWQgY2hhciBYR0kzMzBfUEFMUGhhc2VbXSA9IHsweDJhLCAweDUsIDB4ZDMsIDB4MH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9OVFNDUGhhc2UyW10gPSB7MHgyMSwgMHhGMCwgMHg3QiwgMHhENn07LyozMDFiKi8KK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX1BBTFBoYXNlMltdID0gezB4MmEsIDB4MDksIDB4ODYsIDB4ZTl9OwordW5zaWduZWQgY2hhciBYR0kzMzBfUEFMTVBoYXNlW10gPSB7MHgyMSwgMHhFNCwgMHgyRSwgMHg5Qn07ICAgLypwYWxtbiovCit1bnNpZ25lZCBjaGFyIFhHSTMzMF9QQUxOUGhhc2VbXSA9IHsweDIxLCAweEY0LCAweDNFLCAweEJBfTsKK3Vuc2lnbmVkIGNoYXIgWEc0MF9JMkNEZWZpbml0aW9uID0gMHgwMCA7Cit1bnNpZ25lZCBjaGFyIFhHMjBfQ1I5NyA9IDB4MTAgOwogCi1VQ0hBUiBYRzIxX0RWT1NldHRpbmcgPSAweDAwIDsKLVVDSEFSIFhHMjFfQ1IyRSA9IDB4MDAgOwotVUNIQVIgWEcyMV9DUjJGID0gMHgwMCA7Ci1VQ0hBUiBYRzIxX0NSNDYgPSAweDAwIDsKLVVDSEFSIFhHMjFfQ1I0NyA9IDB4MDAgOwordW5zaWduZWQgY2hhciBYRzIxX0RWT1NldHRpbmcgPSAweDAwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyMV9DUjJFID0gMHgwMCA7Cit1bnNpZ25lZCBjaGFyIFhHMjFfQ1IyRiA9IDB4MDAgOwordW5zaWduZWQgY2hhciBYRzIxX0NSNDYgPSAweDAwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyMV9DUjQ3ID0gMHgwMCA7CiAKLVVDSEFSIFhHMjdfQ1I5NyA9IDB4QzEgOwotVUNIQVIgWEcyN19TUjM2ID0gMHgzMCA7Ci1VQ0hBUiBYRzI3X0NSOEYgPSAweDBDIDsKLVVDSEFSIFhHMjdfQ1JEMFtdID0gezAsMCwwLDAsMCwwLDAsMHg4MiwweDAwLDB4NjYsMHgwMSwweDAwfSA7Ci1VQ0hBUiBYRzI3X0NSREVbXSA9IHswLDB9IDsKLVVDSEFSIFhHMjdfU1I0MCA9IDB4MDQgOwotVUNIQVIgWEcyN19TUjQxID0gMHgwMCA7Cit1bnNpZ25lZCBjaGFyIFhHMjdfQ1I5NyA9IDB4QzEgOwordW5zaWduZWQgY2hhciBYRzI3X1NSMzYgPSAweDMwIDsKK3Vuc2lnbmVkIGNoYXIgWEcyN19DUjhGID0gMHgwQyA7Cit1bnNpZ25lZCBjaGFyIFhHMjdfQ1JEMFtdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4ODIsIDB4MDAsIDB4NjYsIDB4MDEsIDB4MDB9OwordW5zaWduZWQgY2hhciBYRzI3X0NSREVbXSA9IHswLCAwfTsKK3Vuc2lnbmVkIGNoYXIgWEcyN19TUjQwID0gMHgwNCA7Cit1bnNpZ25lZCBjaGFyIFhHMjdfU1I0MSA9IDB4MDAgOwogCi1VQ0hBUiBYR0kzMzBfQ0hUVlZDTEtVTlRTQ1tdPXsweDAwIH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DSFRWVkNMS1VOVFNDW10gPSB7MHgwMH07CiAKLVVDSEFSIFhHSTMzMF9DSFRWVkNMS09OVFNDW109ezB4MDAgfTsKK3Vuc2lnbmVkIGNoYXIgWEdJMzMwX0NIVFZWQ0xLT05UU0NbXSA9IHsweDAwfTsKIAotVUNIQVIgWEdJMzMwX0NIVFZWQ0xLVVBBTFtdPXsweDAwIH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DSFRWVkNMS1VQQUxbXSA9IHsweDAwfTsKIAotVUNIQVIgWEdJMzMwX0NIVFZWQ0xLT1BBTFtdPXsweDAwIH07Cit1bnNpZ25lZCBjaGFyIFhHSTMzMF9DSFRWVkNMS09QQUxbXSA9IHsweDAwfTsKIAotVUNIQVIgWEdJNzAwN19DSFRWVkNMS1VOVFNDW109e0NINzAwN1RWVkNMSzMwXzIsCit1bnNpZ25lZCBjaGFyIFhHSTcwMDdfQ0hUVlZDTEtVTlRTQ1tdID0ge0NINzAwN1RWVkNMSzMwXzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzBfMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMF8yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMwXzIsCkBAIC0zNTQ2LDcgKzM1MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzQ3XzgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAKLVVDSEFSIFhHSTcwMDdfQ0hUVlZDTEtPTlRTQ1tdPXtDSDcwMDdUVlZDTEsyNl80LAordW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLT05UU0NbXSA9IHtDSDcwMDdUVlZDTEsyNl80LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzI2XzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMjZfNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEsyNl80LApAQCAtMzU1NCw3ICszNTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEs0M182CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogCi1VQ0hBUiBYR0k3MDA3X0NIVFZWQ0xLVVBBTFtdPXtDSDcwMDdUVlZDTEszMV81LAordW5zaWduZWQgY2hhciBYR0k3MDA3X0NIVFZWQ0xLVVBBTFtdID0ge0NINzAwN1RWVkNMSzMxXzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCkBAIC0zNTYyLDcgKzM1MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIAotVUNIQVIgWEdJNzAwN19DSFRWVkNMS09QQUxbXT17Q0g3MDA3VFZWQ0xLMzFfNSwKK3Vuc2lnbmVkIGNoYXIgWEdJNzAwN19DSFRWVkNMS09QQUxbXSA9IHtDSDcwMDdUVlZDTEszMV81LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0g3MDA3VFZWQ0xLMzFfNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzMxXzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDcwMDdUVlZDTEszMV81LApAQCAtMzU3MCw3ICszNTQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENINzAwN1RWVkNMSzM2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAKLVhHSTMzMF9WQ0xLRGF0YVN0cnVjdCBYR0lfQ0g3MDA3VkNMS0RhdGFbXT0KK3N0cnVjdCBYR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX0NINzAwN1ZDTEtEYXRhW10gPQogewogIHsgMHg2MCwweDM2LDMwfSwgIC8qIDAgMzAuMiBNSFogKi8KICB7IDB4NDAsMHg0QSwyOH0sICAvKiAxIDI4LjE5IE1IWiAqLwpAQCAtMzU4NSw3ICszNTU4LDcgQEAKICB7IDB4RkYsMHgwMCwwIH0gICAvKiBFbmQgbWFyayAgICAgICovCiB9OwogCi1YR0kzMzBfVkNMS0RhdGFTdHJ1Y3QgWEdJX1ZDTEtEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9WQ0xLRGF0YVtdID0KIHsKICAgICAgICAgICAgICAgIAkvKiBTUjJCLFNSMkMsU1IyRCAqLwogIAkJeyAgICAgIDB4MUIsMHhFMSwyNSAgICAgICAgICAgICAgIH0sLyogMDAgKDI1LjE3NU1IeikgKi8KQEAgLTM3ODYsNyArMzc1OSw3IEBACiAgICAgICAgICAgICAgICAgeyAgICAgIDB4RkYsMHgwMCwwICAgICAgICAgICAgICAgIH0vKiBFbmQgbWFyayAqLwogIH0gIDsKIAotWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9WQlZDTEtEYXRhW109CitzdHJ1Y3QgWEdJMzMwX1ZDTEtEYXRhU3RydWN0IFhHSV9WQlZDTEtEYXRhW10gPQogewogICAgICAgICAgICAgICAgIHsgICAgICAweDFCLDB4RTEsMjUgICAgICAgICAgICAgICB9LC8qIDAwICgyNS4xNzVNSHopICovCiAKQEAgLTM5ODcsNyArMzk2MCw3IEBACiAgICAgICAgICAgICAgICAgeyAgICAgIDB4RkYsMHgwMCwwICAgICAgICAgICAgICAgIH0gICAgICAvKiBFbmQgbWFyayAqLwogfTsKIAotVUNIQVIgWEdJNjYwX1RWRGVsYXlMaXN0W109Cit1bnNpZ25lZCBjaGFyIFhHSTY2MF9UVkRlbGF5TGlzdFtdID0KIHsKICAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgMCBFeHROVFNDRGVsYXkgKi8KICAgICAgICAgICAweDQ0LCAgICAgICAgICAgIC8qIDsgMSBTdE5UU0NEZWxheSAqLwpAQCAtNDAwMyw3ICszOTc2LDcgQEAKICAgICAgICAgICAweDQ0ICAgICAgICAgICAgIC8qIDsgQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KIH07CiAKLVVDSEFSIFhHSTY2MF9UVkRlbGF5TGlzdDJbXT0KK3Vuc2lnbmVkIGNoYXIgWEdJNjYwX1RWRGVsYXlMaXN0MltdID0KIHsKICAgICAgICAgICAweDQ0LCAgICAgICAgICAgLyogOyAwIEV4dE5UU0NEZWxheSAqLwogICAgICAgICAgIDB4NDQsICAgICAgICAgICAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KQEAgLTQwMTksNyArMzk5Miw3IEBACiAgICAgICAgICAgMHg0NCAgICAgICAgICAgIC8qIDsgQiBTdFlQYlByRGVhbHkoNzUwcCkgKi8KIH07CiAKLVVDSEFSIFhHSTMwMVRWRGVsYXlMaXN0W109Cit1bnNpZ25lZCBjaGFyIFhHSTMwMVRWRGVsYXlMaXN0W10gPQogewogCTB4MjIsICAgICAgICAgICAgLyogOyAwIEV4dE5UU0NEZWxheSAqLwogCTB4MjIsICAgICAgICAgICAgLyogOyAxIFN0TlRTQ0RlbGF5ICovCkBAIC00MDM1LDcgKzQwMDgsNyBAQAogCTB4MjIgICAgICAgICAgICAvKiBCIFN0WVBiUHJEZWFseSg3NTBwKSAqLwogfTsKIAotVUNIQVIgWEdJMzAxVFZEZWxheUxpc3QyW109Cit1bnNpZ25lZCBjaGFyIFhHSTMwMVRWRGVsYXlMaXN0MltdID0KIHsKIAkweDIyLCAgICAgICAgICAgLyogOyAwIEV4dE5UU0NEZWxheSAqLwogCTB4MjIsICAgICAgICAgICAvKiA7IDEgU3ROVFNDRGVsYXkgKi8KQEAgLTQwNTIsNyArNDAyNSw3IEBACiB9OwogCiAKLVVDSEFSIFRWQW50aUZsaWNrTGlzdFtdPQordW5zaWduZWQgY2hhciBUVkFudGlGbGlja0xpc3RbXSA9CiB7LyogTlRTQ0FudGlGbGlja2VyICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwNCwgICAgICAgICAgIC8qIDsgMCBBZGFwdGl2ZSAqLwogICAgICAgICAgICAgICAgICAgICAgIDB4MDAsICAgICAgICAgICAvKiA7IDEgbmV3IGFudGktZmxpY2tlciA/ICovCkBAIC00MDY1LDcgKzQwMzgsNyBAQAogfTsKIAogCi1VQ0hBUiBUVkVkZ2VMaXN0W109Cit1bnNpZ25lZCBjaGFyIFRWRWRnZUxpc3RbXSA9CiB7CiAgICAgICAweDAwLCAgICAgICAgICAgIC8qIDsgMCBOVFNDIE5vIEVkZ2UgZW5oYW5jZSAqLwogICAgICAgMHgwNCwgICAgICAgICAgICAvKiA7IDEgTlRTQyBBZGFwdGl2ZSBFZGdlIGVuaGFuY2UgKi8KQEAgLTQwNzUsNyArNDA0OCw3IEBACiAgICAgICAweDAwICAgICAgICAgICAgIC8qIDsgMSBIaVRWICovCiB9OwogCi1VTE9ORyBUVlBoYXNlTGlzdFtdPQordW5zaWduZWQgbG9uZyBUVlBoYXNlTGlzdFtdID0KIHsgICAgICAweDA4QkFFRDIxLCAvKiA7IDAgTlRTQyBwaGFzZSAqLwogICAgICAgIDB4MDBFMzA1MkEsIC8qIDsgMSBQQUwgcGhhc2UgKi8KICAgICAgICAweDlCMkVFNDIxLCAvKiA7IDIgUEFMLU0gcGhhc2UgKi8KQEAgLTQwOTIsNyArNDA2NSw3IEBACiAgICAgICAgMHhFMDBBODMxRSAgLyogOyBEIFBBTC1NIDEwMjR4NzY4ICovCiB9OwogCi1VQ0hBUiBOVFNDWUZpbHRlcjFbXT0KK3Vuc2lnbmVkIGNoYXIgTlRTQ1lGaWx0ZXIxW10gPQogewogCQkgICAgICAweDAwLDB4RjQsMHgxMCwweDM4ICAgICAsLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCAgICAgLC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwpAQCAtNDEwMyw3ICs0MDc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAweEVCLDB4MTUsMHgyNSwweEY2ICAgICAvKiA2IDogODAweCBncmEuIG1vZGUgKi8KIH07CiAKLVVDSEFSIFBBTFlGaWx0ZXIxW109Cit1bnNpZ25lZCBjaGFyIFBBTFlGaWx0ZXIxW10gPQogewogCQkgICAgICAweDAwLDB4RjQsMHgxMCwweDM4LCAvKiAwIDogMzIweCB0ZXh0IG1vZGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4RjQsMHgxMCwweDM4ICAgICAsLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTE0LDcgKzQwODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkMsMHhGQiwweDE0LDB4MkEgICAgIC8qIDYgOiA4MDB4IGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgUEFMTVlGaWx0ZXIxW109Cit1bnNpZ25lZCBjaGFyIFBBTE1ZRmlsdGVyMVtdID0KIHsKIAkJICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTI2LDcgKzQwOTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYgIC8qIEVuZCBvZiBUYWJsZSAqLwogfTsKIAotVUNIQVIgUEFMTllGaWx0ZXIxW109Cit1bnNpZ25lZCBjaGFyIFBBTE5ZRmlsdGVyMVtdID0KIHsKIAkJICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweEY0LDB4MTAsMHgzOCwgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTM4LDcgKzQxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYgIC8qIEVuZCBvZiBUYWJsZSAqLwogfTsKIAotVUNIQVIgTlRTQ1lGaWx0ZXIyW109Cit1bnNpZ25lZCBjaGFyIE5UU0NZRmlsdGVyMltdID0KIHsKIAkJICAgICAgMHhGRiwweDAzLDB4MDIsMHhGNiwweEZDLDB4MjcsMHg0NiwgLyogMCA6IDMyMHggdGV4dCBtb2RlICovCiAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwweDAyLDB4RkUsMHhGNywweDAzLDB4MjcsMHgzQywgLyogMSA6IDM2MHggdGV4dCBtb2RlICovCkBAIC00MTUwLDcgKzQxMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgUEFMWUZpbHRlcjJbXT0KK3Vuc2lnbmVkIGNoYXIgUEFMWUZpbHRlcjJbXSA9CiB7CiAJCSAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwogICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwpAQCAtNDE2Miw3ICs0MTM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGQywweDAwLDB4MEYsMHgyMiwweDI4ICAvKiA3IDogMTAyNHhncmEuIG1vZGUgKi8KIH07CiAKLVVDSEFSIFBBTE1ZRmlsdGVyMltdPQordW5zaWduZWQgY2hhciBQQUxNWUZpbHRlcjJbXSA9CiB7CiAJCSAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwogICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwpAQCAtNDE3NCw3ICs0MTQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGQywweDAwLDB4MEYsMHgyMiwweDI4ICAvKiA3IDogMTAyNHhncmEuIG1vZGUgKi8KIH07CiAKLVVDSEFSIFBBTE5ZRmlsdGVyMltdPQordW5zaWduZWQgY2hhciBQQUxOWUZpbHRlcjJbXSA9CiB7CiAJCSAgICAgIDB4RkYsMHgwMywweDAyLDB4RjYsMHhGQywweDI3LDB4NDYsIC8qIDAgOiAzMjB4IHRleHQgbW9kZSAqLwogICAgICAgICAgICAgICAgICAgICAgIDB4MDEsMHgwMiwweEZFLDB4RjcsMHgwMywweDI3LDB4M0MsIC8qIDEgOiAzNjB4IHRleHQgbW9kZSAqLwpAQCAtNDE4NiwxNCArNDE1OSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZDLDB4MDAsMHgwRiwweDIyLDB4MjggIC8qIDcgOiAxMDI0eGdyYS4gbW9kZSAqLwogfTsKIAotVUNIQVIgWEdJX05UU0MxMDI0QWRqVGltZVtdPQordW5zaWduZWQgY2hhciBYR0lfTlRTQzEwMjRBZGpUaW1lW10gPQogewogICAgICAgMHhhNywweDA3LDB4ZjIsMHg2ZSwweDE3LDB4OGIsMHg3MywweDUzLAogICAgICAgMHgxMywweDQwLDB4MzQsMHhGNCwweDYzLDB4QkIsMHhDQywweDdBLAogICAgICAgMHg1OCwweGU0LDB4NzMsMHhkMCwweDEzCiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgSGlUVlRhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgSGlUVlRhcDRUaW1pbmdbXSA9CiB7CiAJezAsewogCTB4MDAsMHgyMCwweDAwLDB4MDAsMHg3RiwweDIwLDB4MDIsMHg3RiwgLyogOyBDMC1DNyAqLwpAQCAtNDIwOCw3ICs0MTgxLDcgQEAKIAl9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgRW5sYXJnZVRhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgRW5sYXJnZVRhcDRUaW1pbmdbXSA9CiB7CiAJezAsewogCTB4MDAsMHgyMCwweDAwLDB4MDAsMHg3RiwweDIwLDB4MDIsMHg3RiwgLyogOyBDMC1DNyAqLwpAQCAtNDIyMyw3ICs0MTk2LDcgQEAKIAl9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgTm9TY2FsZVRhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgTm9TY2FsZVRhcDRUaW1pbmdbXSA9CiB7CiAJezAsewogCTB4MDAsMHgyMCwweDAwLDB4MDAsMHg3RiwweDIwLDB4MDIsMHg3RiwgLyogOyBDMC1DNyAqLwpAQCAtNDIzOCw3ICs0MjExLDcgQEAKIAl9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgUEFMVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBQQUxUYXA0VGltaW5nW10gPQogewogCXs2MDAsICB7CiAgICAgICAgICAgICAgICAgMHgwNSwweDE5LDB4MDUsMHg3RCwweDAzLDB4MTksMHgwNiwweDdFLCAvKiA7IEMwLUM3ICovCkBAIC00Mjc2LDcgKzQyNDksNyBAQAogICAgICAgICB9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgTlRTQ1RhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgTlRTQ1RhcDRUaW1pbmdbXSA9CiB7CiAJezQ4MCwJewogICAgICAgICAgICAgICAJMHgwNCwweDFBLDB4MDQsMHg3RSwweDAzLDB4MUEsMHgwNiwweDdELCAvKiA7IEMwLUM3ICovCkBAIC00MzE0LDcgKzQyODcsNyBAQAogICAgICAgICB9CiB9OwogCi1YR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgWVBiUHI1MjVwVGFwNFRpbWluZ1tdPQorc3RydWN0IFhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjUyNXBUYXA0VGltaW5nW10gPQogewogCXs0ODAsCXsKICAgICAgICAgICAgICAgCTB4MDQsMHgxQSwweDA0LDB4N0UsMHgwMywweDFBLDB4MDYsMHg3RCwgLyogOyBDMC1DNyAqLwpAQCAtNDM1Miw3ICs0MzI1LDcgQEAKICAgICAgICAgfQogfTsKIAotWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNTI1aVRhcDRUaW1pbmdbXT0KK3N0cnVjdCBYR0kzMDFDX1RhcDRUaW1pbmdTdHJ1Y3QgWVBiUHI1MjVpVGFwNFRpbWluZ1tdID0KIHsKIAl7NDgwLAl7CiAgICAgICAgICAgICAgIAkweDA0LDB4MUEsMHgwNCwweDdFLDB4MDMsMHgxQSwweDA2LDB4N0QsIC8qIDsgQzAtQzcgKi8KQEAgLTQzOTAsNyArNDM2Myw3IEBACiAgICAgICAgIH0KIH07CiAKLVhHSTMwMUNfVGFwNFRpbWluZ1N0cnVjdCBZUGJQcjc1MHBUYXA0VGltaW5nW109CitzdHJ1Y3QgWEdJMzAxQ19UYXA0VGltaW5nU3RydWN0IFlQYlByNzUwcFRhcDRUaW1pbmdbXSA9CiB7ICAgICAgICB7MHhGRkZGLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgMHgwNSwweDE5LDB4MDUsMHg3RCwweDAzLDB4MTksMHgwNiwweDdFLCAvKiA7IEMwLUM3ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuYwppbmRleCA4NzUzMWI0Li4yYzQwMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmMKQEAgLTEsNTQgKzEsMjUgQEAKLSNpbmNsdWRlICJvc2RlZi5oIgogI2luY2x1ZGUgInZiX2RlZi5oIgogI2luY2x1ZGUgInZnYXR5cGVzLmgiCiAjaW5jbHVkZSAidmJfc3RydWN0LmgiCiAKLSNpZmRlZiBMSU5VWF9LRVJORUwKICNpbmNsdWRlICJYR0lmYi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jZW5kaWYKIAotI2lmZGVmIFRDCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjb25pby5oPgotI2luY2x1ZGUgPGRvcy5oPgotI2VuZGlmCi0KLSNpZmRlZiBXSU4yMDAwCi0jaW5jbHVkZSA8ZGRlcnJvci5oPgotI2luY2x1ZGUgPGRldmlvY3RsLmg+Ci0jaW5jbHVkZSA8bWluaXBvcnQuaD4KLSNpbmNsdWRlIDxudGRkdmRlby5oPgotI2luY2x1ZGUgPHZpZGVvLmg+Ci0KLSNpbmNsdWRlICJ4Z2l2LmgiCi0jaW5jbHVkZSAiZGRfaTJjLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNlbmRpZgotCi0jaWZkZWYgTElOVVhfWEY4NgotI2luY2x1ZGUgInhmODYuaCIKLSNpbmNsdWRlICJ4Zjg2UGNpSW5mby5oIgotI2luY2x1ZGUgInhnaS5oIgotI2luY2x1ZGUgInhnaV9yZWdzLmgiCi0jZW5kaWYKLQotCi0KLQotdm9pZCBYR0lOZXdfU2V0UmVnMSggVUxPTkcgLCBVU0hPUlQgLCBVU0hPUlQgKSA7Ci12b2lkIFhHSU5ld19TZXRSZWcyKCBVTE9ORyAsIFVTSE9SVCAsIFVTSE9SVCApIDsKLXZvaWQgWEdJTmV3X1NldFJlZzMoIFVMT05HICwgVVNIT1JUICkgOwotdm9pZCBYR0lOZXdfU2V0UmVnNCggVUxPTkcgLCBVTE9ORyApIDsKLVVDSEFSIFhHSU5ld19HZXRSZWcxKCBVTE9ORyAsIFVTSE9SVCkgOwotVUNIQVIgWEdJTmV3X0dldFJlZzIoIFVMT05HICkgOwotVUxPTkcgWEdJTmV3X0dldFJlZzMoIFVMT05HICkgOwotdm9pZCBYR0lOZXdfQ2xlYXJEQUMoIFBVQ0hBUiApIDsKLXZvaWQgICAgIFhHSU5ld19TZXRSZWdBTkRPUihVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YUFORCxVU0hPUlQgRGF0YU9SKTsKLXZvaWQgICAgIFhHSU5ld19TZXRSZWdPUihVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YU9SKTsKLXZvaWQgICAgIFhHSU5ld19TZXRSZWdBTkQoVUxPTkcgUG9ydCxVU0hPUlQgSW5kZXgsVVNIT1JUIERhdGFBTkQpOwordm9pZCBYR0lOZXdfU2V0UmVnMSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIHNob3J0LHVuc2lnbmVkIHNob3J0KTsKK3ZvaWQgWEdJTmV3X1NldFJlZzIodW5zaWduZWQgbG9uZyx1bnNpZ25lZCBzaG9ydCx1bnNpZ25lZCBzaG9ydCk7Cit2b2lkIFhHSU5ld19TZXRSZWczKHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgc2hvcnQpOwordm9pZCBYR0lOZXdfU2V0UmVnNCh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgY2hhciBYR0lOZXdfR2V0UmVnMSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCk7Cit1bnNpZ25lZCBjaGFyIFhHSU5ld19HZXRSZWcyKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBYR0lOZXdfR2V0UmVnMyh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgWEdJTmV3X0NsZWFyREFDKHVuc2lnbmVkIGNoYXIgKik7Cit2b2lkIFhHSU5ld19TZXRSZWdBTkRPUih1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsCisJCQl1bnNpZ25lZCBzaG9ydCBEYXRhQU5ELHVuc2lnbmVkIHNob3J0IERhdGFPUik7Cit2b2lkIFhHSU5ld19TZXRSZWdPUih1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsCisJCSAgICAgdW5zaWduZWQgc2hvcnQgRGF0YU9SKTsKK3ZvaWQgWEdJTmV3X1NldFJlZ0FORCh1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IERhdGFBTkQpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTcsMTUgKzI4LDEwIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiBTUiBDUlRDIEdSICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXZvaWQgWEdJTmV3X1NldFJlZzEoIFVMT05HIHBvcnQgLCBVU0hPUlQgaW5kZXggLCBVU0hPUlQgZGF0YSApCit2b2lkIFhHSU5ld19TZXRSZWcxKCB1bnNpZ25lZCBsb25nIHBvcnQgLCB1bnNpZ25lZCBzaG9ydCBpbmRleCAsIHVuc2lnbmVkIHNob3J0IGRhdGEgKQogewotI2lmZGVmIExJTlVYX1hGODYKLSAgICBPdXRQb3J0Qnl0ZSggKCBQVUNIQVIgKShVTE9ORylwb3J0ICwgaW5kZXggKSA7Ci0gICAgT3V0UG9ydEJ5dGUoICggUFVDSEFSICkoVUxPTkcpcG9ydCArIDEgLCBkYXRhICkgOwotI2Vsc2UKLSAgICBPdXRQb3J0Qnl0ZSggcG9ydCAsIGluZGV4ICkgOwotICAgIE91dFBvcnRCeXRlKCBwb3J0ICsgMSAsIGRhdGEgKSA7Ci0jZW5kaWYKKwlvdXRiKGluZGV4LCBwb3J0KTsKKwlvdXRiKGRhdGEsIHBvcnQgKyAxKTsKIH0KIAogCkBAIC03NSw5ICs0MSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiBBUiggM0MwICkgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyp2b2lkIFhHSU5ld19TZXRSZWcyKCBVTE9ORyBwb3J0ICwgVVNIT1JUIGluZGV4ICwgVVNIT1JUIGRhdGEgKQorLyp2b2lkIFhHSU5ld19TZXRSZWcyKCB1bnNpZ25lZCBsb25nIHBvcnQgLCB1bnNpZ25lZCBzaG9ydCBpbmRleCAsIHVuc2lnbmVkIHNob3J0IGRhdGEgKQogewotICAgIEluUG9ydEJ5dGUoICggUFVDSEFSIClwb3J0ICsgMHgzZGEgLSAweDNjMCApIDsKKyAgICBJblBvcnRCeXRlKChQIHVuc2lnbmVkIGNoYXIgKXBvcnQgKyAweDNkYSAtIDB4M2MwKSA7CiAgICAgT3V0UG9ydEJ5dGUoIFhHSU5ld19QM2MwICwgaW5kZXggKSA7CiAgICAgT3V0UG9ydEJ5dGUoIFhHSU5ld19QM2MwICwgZGF0YSApIDsKICAgICBPdXRQb3J0Qnl0ZSggWEdJTmV3X1AzYzAgLCAweDIwICkgOwpAQCAtOTAsOSArNTYsOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0UmVnMyggVUxPTkcgcG9ydCAsIFVTSE9SVCBkYXRhICkKK3ZvaWQgWEdJTmV3X1NldFJlZzMoIHVuc2lnbmVkIGxvbmcgcG9ydCAsIHVuc2lnbmVkIHNob3J0IGRhdGEgKQogewotICAgIE91dFBvcnRCeXRlKCBwb3J0ICwgZGF0YSApIDsKKwlvdXRiKGRhdGEsIHBvcnQpOwogfQogCiAKQEAgLTEwMiw5ICs2OCw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRSZWc0KCBVTE9ORyBwb3J0ICwgVUxPTkcgZGF0YSApCit2b2lkIFhHSU5ld19TZXRSZWc0KCB1bnNpZ25lZCBsb25nIHBvcnQgLCB1bnNpZ25lZCBsb25nIGRhdGEgKQogewotICAgIE91dFBvcnRMb25nKCBwb3J0ICwgZGF0YSApIDsKKwlvdXRsKGRhdGEsIHBvcnQpOwogfQogCiAKQEAgLTExNCwxOCArODAsMTIgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSU5ld19HZXRSZWcxKCBVTE9ORyBwb3J0ICwgVVNIT1JUIGluZGV4ICkKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldFJlZzEodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBzaG9ydCBpbmRleCkKIHsKLSAgICBVQ0hBUiBkYXRhIDsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGEgOwogCi0jaWZkZWYgTElOVVhfWEY4NgotICAgIE91dFBvcnRCeXRlKCAoIFBVQ0hBUiApKFVMT05HKXBvcnQgLCBpbmRleCApIDsKLSAgICBkYXRhID0gSW5Qb3J0Qnl0ZSggKCBQVUNIQVIgKShVTE9ORylwb3J0ICsgMSApIDsKLSNlbHNlCi0gICAgT3V0UG9ydEJ5dGUoIHBvcnQgLCBpbmRleCApIDsKLSAgICBkYXRhID0gSW5Qb3J0Qnl0ZSggcG9ydCArIDEgKSA7Ci0jZW5kaWYKLQorICAgIG91dGIoaW5kZXgsIHBvcnQpOworICAgIGRhdGEgPSBpbmIocG9ydCArIDEpIDsKICAgICByZXR1cm4oIGRhdGEgKSA7CiB9CiAKQEAgLTEzNiwxMSArOTYsMTEgQEAKIC8qIE91dHB1dCA6ICovCiAvKiBEZXNjcmlwdGlvbiA6ICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLVVDSEFSIFhHSU5ld19HZXRSZWcyKCBVTE9ORyBwb3J0ICkKK3Vuc2lnbmVkIGNoYXIgWEdJTmV3X0dldFJlZzIodW5zaWduZWQgbG9uZyBwb3J0KQogewotICAgIFVDSEFSIGRhdGEgOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YSA7CiAKLSAgICBkYXRhID0gSW5Qb3J0Qnl0ZSggcG9ydCApIDsKKyAgICBkYXRhID0gaW5iKHBvcnQpIDsKIAogICAgIHJldHVybiggZGF0YSApIDsKIH0KQEAgLTE1MiwxMSArMTEyLDExIEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1VTE9ORyBYR0lOZXdfR2V0UmVnMyggVUxPTkcgcG9ydCApCit1bnNpZ25lZCBsb25nIFhHSU5ld19HZXRSZWczKCB1bnNpZ25lZCBsb25nIHBvcnQgKQogewotICAgIFVMT05HIGRhdGEgOworICAgIHVuc2lnbmVkIGxvbmcgZGF0YSA7CiAKLSAgICBkYXRhID0gSW5Qb3J0TG9uZyggcG9ydCApIDsKKyAgICBkYXRhID0gaW5sKHBvcnQpIDsKIAogICAgIHJldHVybiggZGF0YSApIDsKIH0KQEAgLTE2OSw5ICsxMjksOSBAQAogLyogT3V0cHV0IDogKi8KIC8qIERlc2NyaXB0aW9uIDogKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZCBYR0lOZXdfU2V0UmVnQU5ET1IoIFVMT05HIFBvcnQgLCBVU0hPUlQgSW5kZXggLCBVU0hPUlQgRGF0YUFORCAsIFVTSE9SVCBEYXRhT1IgKQordm9pZCBYR0lOZXdfU2V0UmVnQU5ET1IoIHVuc2lnbmVkIGxvbmcgUG9ydCAsIHVuc2lnbmVkIHNob3J0IEluZGV4ICwgdW5zaWduZWQgc2hvcnQgRGF0YUFORCAsIHVuc2lnbmVkIHNob3J0IERhdGFPUiApCiB7Ci0gICAgVVNIT1JUIHRlbXAgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgOwogCiAgICAgdGVtcCA9IFhHSU5ld19HZXRSZWcxKCBQb3J0ICwgSW5kZXggKSA7CQkvKiBYR0lOZXdfUGFydDFQb3J0IGluZGV4IDAyICovCiAgICAgdGVtcCA9ICggdGVtcCAmICggRGF0YUFORCApICkgfCBEYXRhT1IgOwpAQCAtMTg1LDkgKzE0NSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRSZWdBTkQoVUxPTkcgUG9ydCxVU0hPUlQgSW5kZXgsVVNIT1JUIERhdGFBTkQpCit2b2lkIFhHSU5ld19TZXRSZWdBTkQodW5zaWduZWQgbG9uZyBQb3J0LHVuc2lnbmVkIHNob3J0IEluZGV4LHVuc2lnbmVkIHNob3J0IERhdGFBTkQpCiB7Ci0gICAgVVNIT1JUIHRlbXAgOworICAgIHVuc2lnbmVkIHNob3J0IHRlbXAgOwogCiAgICAgdGVtcCA9IFhHSU5ld19HZXRSZWcxKCBQb3J0ICwgSW5kZXggKSA7CS8qIFhHSU5ld19QYXJ0MVBvcnQgaW5kZXggMDIgKi8KICAgICB0ZW1wICY9IERhdGFBTkQgOwpAQCAtMjAxLDkgKzE2MSw5IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIFhHSU5ld19TZXRSZWdPUiggVUxPTkcgUG9ydCAsIFVTSE9SVCBJbmRleCAsIFVTSE9SVCBEYXRhT1IgKQordm9pZCBYR0lOZXdfU2V0UmVnT1IoIHVuc2lnbmVkIGxvbmcgUG9ydCAsIHVuc2lnbmVkIHNob3J0IEluZGV4ICwgdW5zaWduZWQgc2hvcnQgRGF0YU9SICkKIHsKLSAgICBVU0hPUlQgdGVtcCA7CisgICAgdW5zaWduZWQgc2hvcnQgdGVtcCA7CiAKICAgICB0ZW1wID0gWEdJTmV3X0dldFJlZzEoIFBvcnQgLCBJbmRleCApIDsJLyogWEdJTmV3X1BhcnQxUG9ydCBpbmRleCAwMiAqLwogICAgIHRlbXAgfD0gRGF0YU9SIDsKQEAgLTIxOSwyOSArMTc5LDE0IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHZvaWQgTmV3RGVsYXlTZWNvbmRzKCBpbnQgc2Vjb25kcyApCiB7Ci0jaWZkZWYgV0lOMjAwMAotICAgIGludCBqIDsKLSNlbmRpZgogICAgIGludCBpIDsKIAogCiAgICAgZm9yKCBpID0gMCA7IGkgPCBzZWNvbmRzIDsgaSsrICkKICAgICB7Ci0jaWZkZWYgVEMKLSAgICAgICAgZGVsYXkoIDEwMDAgKSA7Ci0jZW5kaWYKIAotI2lmZGVmIFdJTjIwMDAKIAotICAgICAgICBmb3IgKCBqID0gMCA7IGogPCAyMDAwMCA7IGorKyApCi0gICAgICAgICAgICBWaWRlb1BvcnRTdGFsbEV4ZWN1dGlvbiggNTAgKSA7Ci0jZW5kaWYKIAotI2lmZGVmIFdJTkNFX0hFQURFUgotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwKLSNlbmRpZgogICAgIH0KIH0KIApAQCAtMjUyLDcgKzE5Nyw3IEBACiAvKiBPdXRwdXQgOiAqLwogLyogRGVzY3JpcHRpb24gOiAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi12b2lkIE5ld2RlYnVnY29kZSggVUNIQVIgY29kZSApCit2b2lkIE5ld2RlYnVnY29kZSh1bnNpZ25lZCBjaGFyIGNvZGUpCiB7CiAvLyAgICBPdXRQb3J0Qnl0ZSAoIDB4ODAgLCBjb2RlICkgOwogICAgIC8qIE91dFBvcnRCeXRlICggMHgzMDAgLCBjb2RlICkgOyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl91dGlsLmgKaW5kZXggOTE3NzlkOC4uMTU2ZjY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3V0aWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfdXRpbC5oCkBAIC0xLDE1ICsxLDE1IEBACiAjaWZuZGVmIF9WQlVUSUxfCiAjZGVmaW5lIF9WQlVUSUxfCiBleHRlcm4gICB2b2lkICAgICBOZXdEZWxheVNlY29uZHMoIGludCApOwotZXh0ZXJuICAgdm9pZCAgICAgTmV3ZGVidWdjb2RlKCBVQ0hBUiApOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZzEoVUxPTkcsIFVTSE9SVCwgVVNIT1JUKTsKLWV4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWczKFVMT05HLCBVU0hPUlQpOwotZXh0ZXJuICAgVUNIQVIgICAgWEdJTmV3X0dldFJlZzEoVUxPTkcsIFVTSE9SVCk7Ci1leHRlcm4gICBVQ0hBUiAgICBYR0lOZXdfR2V0UmVnMihVTE9ORyk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnNChVTE9ORywgVUxPTkcpOwotZXh0ZXJuICAgVUxPTkcgICAgWEdJTmV3X0dldFJlZzMoVUxPTkcpOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZ09SKFVMT05HIFBvcnQsVVNIT1JUIEluZGV4LFVTSE9SVCBEYXRhT1IpOwotZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZ0FORChVTE9ORyBQb3J0LFVTSE9SVCBJbmRleCxVU0hPUlQgRGF0YUFORCk7Ci1leHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnQU5ET1IoVUxPTkcgUG9ydCxVU0hPUlQgSW5kZXgsVVNIT1JUIERhdGFBTkQsVVNIT1JUIERhdGFPUik7CitleHRlcm4gICB2b2lkICAgICBOZXdkZWJ1Z2NvZGUodW5zaWduZWQgY2hhcik7CitleHRlcm4gICB2b2lkICAgICBYR0lOZXdfU2V0UmVnMSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZzModW5zaWduZWQgbG9uZywgdW5zaWduZWQgc2hvcnQpOworZXh0ZXJuICAgIHVuc2lnbmVkIGNoYXIgICAgIFhHSU5ld19HZXRSZWcxKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiAgICB1bnNpZ25lZCBjaGFyICAgICBYR0lOZXdfR2V0UmVnMih1bnNpZ25lZCBsb25nKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWc0KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuICAgdW5zaWduZWQgbG9uZyAgICBYR0lOZXdfR2V0UmVnMyh1bnNpZ25lZCBsb25nKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWdPUih1bnNpZ25lZCBsb25nIFBvcnQsdW5zaWduZWQgc2hvcnQgSW5kZXgsdW5zaWduZWQgc2hvcnQgRGF0YU9SKTsKK2V4dGVybiAgIHZvaWQgICAgIFhHSU5ld19TZXRSZWdBTkQodW5zaWduZWQgbG9uZyBQb3J0LHVuc2lnbmVkIHNob3J0IEluZGV4LHVuc2lnbmVkIHNob3J0IERhdGFBTkQpOworZXh0ZXJuICAgdm9pZCAgICAgWEdJTmV3X1NldFJlZ0FORE9SKHVuc2lnbmVkIGxvbmcgUG9ydCx1bnNpZ25lZCBzaG9ydCBJbmRleCx1bnNpZ25lZCBzaG9ydCBEYXRhQU5ELHVuc2lnbmVkIHNob3J0IERhdGFPUik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZnYXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAppbmRleCAyOTVlYTg2Li5kZjgzOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmdhdHlwZXMuaApAQCAtMiwxMzYgKzIsMTQgQEAKICNpZm5kZWYgX1ZHQVRZUEVTXwogI2RlZmluZSBfVkdBVFlQRVNfCiAKLSNpbmNsdWRlICJvc2RlZi5oIgotCi0jaWZkZWYgTElOVVhfWEY4NgotI2luY2x1ZGUgInhmODZWZXJzaW9uLmgiCi0jaW5jbHVkZSAieGY4NlBjaS5oIgotI2VuZGlmCi0KLSNpZmRlZiBMSU5VWF9LRVJORUwgIC8qIFdlIGRvbid0IHdhbnQgdGhlIFggZHJpdmVyIHRvIGRlcGVuZCBvbiBrZXJuZWwgc291cmNlICovCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNlbmRpZgotCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICAgMAotI2VuZGlmCi0KLSNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFICAgIDEKLSNlbmRpZgotCi0jaWZuZGVmIE5VTEwKLSNkZWZpbmUgTlVMTCAgICAwCi0jZW5kaWYKLQotI2lmbmRlZiBDSEFSCi10eXBlZGVmIGNoYXIgQ0hBUjsKLSNlbmRpZgotCi0jaWZuZGVmIFNIT1JUCi10eXBlZGVmIHNob3J0IFNIT1JUOwotI2VuZGlmCi0KLSNpZm5kZWYgTE9ORwotdHlwZWRlZiBsb25nICBMT05HOwotI2VuZGlmCi0KLSNpZm5kZWYgVUNIQVIKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBVQ0hBUjsKLSNlbmRpZgotCi0jaWZuZGVmIFVTSE9SVAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVU0hPUlQ7Ci0jZW5kaWYKLQotI2lmbmRlZiBVTE9ORwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HOwotI2VuZGlmCi0KLSNpZm5kZWYgUFVDSEFSCi10eXBlZGVmIFVDSEFSICpQVUNIQVI7Ci0jZW5kaWYKLQotI2lmbmRlZiBQVVNIT1JUCi10eXBlZGVmIFVTSE9SVCAqUFVTSE9SVDsKLSNlbmRpZgotCi0jaWZuZGVmIFBMT05HVQotdHlwZWRlZiBVTE9ORyAqUFVMT05HOwotI2VuZGlmCi0KLSNpZm5kZWYgVk9JRAotdHlwZWRlZiB2b2lkIFZPSUQ7Ci0jZW5kaWYKLQotI2lmbmRlZiBQVk9JRAotdHlwZWRlZiB2b2lkICpQVk9JRDsKLSNlbmRpZgotCi0jaWZuZGVmIEJPT0xFQU4KLXR5cGVkZWYgVUNIQVIgQk9PTEVBTjsKLSNlbmRpZgotLyoKLSNpZm5kZWYgYm9vbAotdHlwZWRlZiBVQ0hBUiBib29sOwotI2VuZGlmCi0qLwotI2lmZGVmIExJTlVYX0tFUk5FTAotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhHSUlPQUREUkVTUzsKLSNlbmRpZgotCi0jaWZkZWYgTElOVVhfWEY4NgotI2lmIFhGODZfVkVSU0lPTl9DVVJSRU5UIDwgWEY4Nl9WRVJTSU9OX05VTUVSSUMoNCwyLDAsMCwwKQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIElPQUREUkVTUzsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBYR0lJT0FERFJFU1M7Ci0jZWxzZQotdHlwZWRlZiBJT0FERFJFU1MgWEdJSU9BRERSRVNTOwotI2VuZGlmCi0jZW5kaWYKIAogI2lmbmRlZiBWQklPU19WRVJfTUFYX0xFTkdUSAotI2RlZmluZSBWQklPU19WRVJfTUFYX0xFTkdUSCAgICA0Ci0jZW5kaWYKLQotI2lmbmRlZiBXSU4yMDAwCi0KLSNpZm5kZWYgTElOVVhfS0VSTkVMICAgLyogRm9yIHRoZSBsaW51eCBrZXJuZWwsIHRoaXMgaXMgZGVmaW5lZCBpbiB4Z2lmYi5oICovCi0jaWZuZGVmIFhHSV9DSElQX1RZUEUKLXR5cGVkZWYgZW51bSBfWEdJX0NISVBfVFlQRSB7Ci0gICAgWEdJX1ZHQUxlZ2FjeSA9IDAsCi0jaWZkZWYgTElOVVhfWEY4NgotICAgIFhHSV81MzAsCi0gICAgWEdJX09MRCwKLSNlbmRpZgotICAgIFhHSV8zMDAsCi0gICAgWEdJXzYzMCwKLSAgICBYR0lfNjQwLAotICAgIFhHSV8zMTVILAotICAgIFhHSV8zMTUsCi0gICAgWEdJXzMxNVBSTywKLSAgICBYR0lfNTUwLAotICAgIFhHSV82NTAsCi0gICAgWEdJXzY1ME0sCi0gICAgWEdJXzc0MCwKLSAgICBYR0lfMzMwLAotICAgIFhHSV82NjEsCi0gICAgWEdJXzY2MCwKLSAgICBYR0lfNzYwLAotICAgIFhHNDAgPSAzMiwKLSAgICBYRzQxLAotICAgIFhHNDIsCi0gICAgWEc0NSwKLSAgICBYRzIwID0gNDgsCi0gICAgWEcyMSwKLSAgICBYRzI3LAotICAgIE1BWF9YR0lfQ0hJUAotfSBYR0lfQ0hJUF9UWVBFOwotI2VuZGlmCisjZGVmaW5lIFZCSU9TX1ZFUl9NQVhfTEVOR1RIICAgIDUKICNlbmRpZgogCiAjaWZuZGVmIFhHSV9WQl9DSElQX1RZUEUKLXR5cGVkZWYgZW51bSBfWEdJX1ZCX0NISVBfVFlQRSB7CitlbnVtIFhHSV9WQl9DSElQX1RZUEUgewogICAgIFZCX0NISVBfTGVnYWN5ID0gMCwKICAgICBWQl9DSElQXzMwMSwKICAgICBWQl9DSElQXzMwMUIsCkBAIC0xNDMsMTEgKzIxLDExIEBACiAgICAgVkJfQ0hJUF8zMDJFTFYsCiAgICAgVkJfQ0hJUF9VTktOT1dOLCAvKiBvdGhlciB2aWRlbyBicmlkZ2Ugb3Igbm8gdmlkZW8gYnJpZGdlICovCiAgICAgTUFYX1ZCX0NISVAKLX0gWEdJX1ZCX0NISVBfVFlQRTsKK307CiAjZW5kaWYKIAogI2lmbmRlZiBYR0lfTENEX1RZUEUKLXR5cGVkZWYgZW51bSBfWEdJX0xDRF9UWVBFIHsKK2VudW0gWEdJX0xDRF9UWVBFIHsKICAgICBMQ0RfSU5WQUxJRCA9IDAsCiAgICAgTENEXzMyMHg0ODAsICAgICAgIC8qIEZTVE4sIERTVE4gKi8KICAgICBMQ0RfNjQweDQ4MCwKQEAgLTE3MSwxNTUgKzQ5LDkwIEBACiAgICAgTENEXzIwNDh4MTUzNiwKICAgICBMQ0RfQ1VTVE9NLAogICAgIExDRF9VTktOT1dOCi19IFhHSV9MQ0RfVFlQRTsKK307CiAjZW5kaWYKIAotI2VuZGlmICAgLyogbm90IFdJTjIwMDAgKi8KLQotI2lmbmRlZiBQWEdJX0RTUmVnCi10eXBlZGVmIHN0cnVjdCBfWEdJX0RTUmVnCitzdHJ1Y3QgWEdJX0RTUmVnCiB7Ci0gIFVDSEFSICBqSWR4OwotICBVQ0hBUiAgalZhbDsKLX0gWEdJX0RTUmVnLCAqUFhHSV9EU1JlZzsKLSNlbmRpZgorICB1bnNpZ25lZCBjaGFyICBqSWR4OworICB1bnNpZ25lZCBjaGFyICBqVmFsOworfTsKIAotI2lmbmRlZiBYR0lfSFdfREVWSUNFX0lORk8KLQotdHlwZWRlZiBzdHJ1Y3QgX1hHSV9IV19ERVZJQ0VfSU5GTyAgWEdJX0hXX0RFVklDRV9JTkZPLCAqUFhHSV9IV19ERVZJQ0VfSU5GTzsKLQotdHlwZWRlZiBCT09MRUFOICgqUFhHSV9RVUVSWVNQQUNFKSAgIChQWEdJX0hXX0RFVklDRV9JTkZPLCBVTE9ORywgVUxPTkcsIFVMT05HICopOwotCi1zdHJ1Y3QgX1hHSV9IV19ERVZJQ0VfSU5GTworc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbwogewotICAgIFVMT05HICB1bEV4dGVybmFsQ2hpcDsgICAgICAgLyogTk8gVkIgb3Igb3RoZXIgdmlkZW8gYnJpZGdlKi8KKyAgICB1bnNpZ25lZCBsb25nICB1bEV4dGVybmFsQ2hpcDsgICAgICAgLyogTk8gVkIgb3Igb3RoZXIgdmlkZW8gYnJpZGdlKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIHVqVkJDaGlwSUQgPSBWQl9DSElQX1VOS05PV04sICovCi0jaWZkZWYgTElOVVhfWEY4NgotICAgIFBDSVRBRyBQY2lUYWc7CQkgLyogUENJIFRhZyAqLwotI2VuZGlmCiAKLSAgICBQVUNIQVIgIHBqVmlydHVhbFJvbUJhc2U7ICAgIC8qIFJPTSBpbWFnZSAqLworICAgIHVuc2lnbmVkIGNoYXIgKnBqVmlydHVhbFJvbUJhc2U7ICAgIC8qIFJPTSBpbWFnZSAqLwogCi0gICAgQk9PTEVBTiBVc2VST007CQkgLyogVXNlIHRoZSBST00gaW1hZ2UgaWYgcHJvdmlkZWQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIFVzZVJPTTsJCSAvKiBVc2UgdGhlIFJPTSBpbWFnZSBpZiBwcm92aWRlZCAqLwogCi0gICAgUFZPSUQgICBwRGV2aWNlOworICAgIHZvaWQgKnBEZXZpY2U7CiAKLSAgICBQVUNIQVIgIHBqVmlkZW9NZW1vcnlBZGRyZXNzOy8qIGJhc2UgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyAqLworICAgIHVuc2lnbmVkIGNoYXIgKnBqVmlkZW9NZW1vcnlBZGRyZXNzOy8qIGJhc2UgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb2YgTGluZWFyIFZHQSBtZW1vcnkgKi8KIAotICAgIFVMT05HICB1bFZpZGVvTWVtb3J5U2l6ZTsgICAgLyogc2l6ZSwgaW4gYnl0ZXMsIG9mIHRoZSBtZW1vcnkgb24gdGhlIGJvYXJkICovCisgICAgdW5zaWduZWQgbG9uZyAgdWxWaWRlb01lbW9yeVNpemU7ICAgIC8qIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgbWVtb3J5IG9uIHRoZSBib2FyZCAqLwogCi0gICAgUFVDSEFSIHBqSU9BZGRyZXNzOyAgICAgICAgICAvKiBiYXNlIEkvTyBhZGRyZXNzIG9mIFZHQSBwb3J0cyAoMHgzQjApICovCisgICAgdW5zaWduZWQgY2hhciAqcGpJT0FkZHJlc3M7ICAgICAgICAgIC8qIGJhc2UgSS9PIGFkZHJlc3Mgb2YgVkdBIHBvcnRzICgweDNCMCkgKi8KIAotICAgIFBVQ0hBUiBwakN1c3RvbWl6ZWRST01JbWFnZTsKKyAgICB1bnNpZ25lZCBjaGFyICpwakN1c3RvbWl6ZWRST01JbWFnZTsKIAotICAgIFBVQ0hBUiBwajJuZFZpZGVvTWVtb3J5QWRkcmVzczsKLSAgICBVTE9ORyAgdWwybmRWaWRlb01lbW9yeVNpemU7CisgICAgdW5zaWduZWQgY2hhciAqcGoybmRWaWRlb01lbW9yeUFkZHJlc3M7CisgICAgdW5zaWduZWQgbG9uZyAgdWwybmRWaWRlb01lbW9yeVNpemU7CiAKLSAgICBQVUNIQVIgcGoybmRJT0FkZHJlc3M7Ci0vKiNpZm5kZWYgV0lOMjAwMAotICAgIFhHSUlPQUREUkVTUyBwaklPQWRkcmVzczsgICAvLyAgYmFzZSBJL08gYWRkcmVzcyBvZiBWR0EgcG9ydHMgKDB4M0IwKQotI2VuZGlmICovCi0gICAgVUNIQVIgIGpDaGlwVHlwZTsgICAgICAgICAgICAvKiBVc2VkIHRvIElkZW50aWZ5IEdyYXBoaWNzIENoaXAgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpwajJuZElPQWRkcmVzczsKKyAgICB1bnNpZ25lZCBjaGFyICBqQ2hpcFR5cGU7ICAgICAgICAgICAgLyogVXNlZCB0byBJZGVudGlmeSBHcmFwaGljcyBDaGlwICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIlhHSV9DSElQX1RZUEUiICovCiAKLSAgICBVQ0hBUiAgakNoaXBSZXZpc2lvbjsgICAgICAgIC8qIFVzZWQgdG8gSWRlbnRpZnkgR3JhcGhpY3MgQ2hpcCBSZXZpc2lvbiAqLworICAgIHVuc2lnbmVkIGNoYXIgIGpDaGlwUmV2aXNpb247ICAgICAgICAvKiBVc2VkIHRvIElkZW50aWZ5IEdyYXBoaWNzIENoaXAgUmV2aXNpb24gKi8KIAotICAgIFVDSEFSICB1alZCQ2hpcElEOyAgICAgICAgICAgLyogdGhlIElEIG9mIHZpZGVvIGJyaWRnZSAqLworICAgIHVuc2lnbmVkIGNoYXIgIHVqVkJDaGlwSUQ7ICAgICAgICAgICAvKiB0aGUgSUQgb2YgdmlkZW8gYnJpZGdlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiWEdJX1ZCX0NISVBfVFlQRSIgKi8KIAotICAgIEJPT0xFQU4gICAgYk5ld1NjcmF0Y2g7CisgICAgdW5zaWduZWQgY2hhciAgICBiTmV3U2NyYXRjaDsKIAotICAgIFVMT05HICB1bENSVDJMQ0RUeXBlOyAgICAgICAgLyogZGVmaW5lZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworICAgIHVuc2lnbmVkIGxvbmcgIHVsQ1JUMkxDRFR5cGU7ICAgICAgICAvKiBkZWZpbmVkIGluIHRoZSBkYXRhIHN0cnVjdHVyZSB0eXBlICovCiAKLSAgICBVTE9ORyB1c0V4dGVybmFsQ2hpcDsgICAgICAgLyogTk8gVkIgb3Igb3RoZXIgdmlkZW8gYnJpZGdlIChvdGhlciB0aGFuICAqLworICAgIHVuc2lnbmVkIGxvbmcgdXNFeHRlcm5hbENoaXA7ICAgICAgIC8qIE5PIFZCIG9yIG90aGVyIHZpZGVvIGJyaWRnZSAob3RoZXIgdGhhbiAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB2aWRlbyBicmlkZ2UpICovCiAKLSAgICBCT09MRUFOIGJJbnRlZ3JhdGVkTU1FbmFibGVkOy8qIHN1cHBvcnRpbmcgaW50ZWdyYXRpb24gTU0gZW5hYmxlICovCisgICAgdW5zaWduZWQgY2hhciBiSW50ZWdyYXRlZE1NRW5hYmxlZDsvKiBzdXBwb3J0aW5nIGludGVncmF0aW9uIE1NIGVuYWJsZSAqLwogCi0gICAgQk9PTEVBTiBiU2tpcERyYW1TaXppbmc7ICAgICAvKiBUcnVlOiBTa2lwIHZpZGVvIG1lbW9yeSBzaXppbmcuICovCisgICAgdW5zaWduZWQgY2hhciBiU2tpcERyYW1TaXppbmc7ICAgICAvKiBUcnVlOiBTa2lwIHZpZGVvIG1lbW9yeSBzaXppbmcuICovCiAKLSAgICBCT09MRUFOIGJTa2lwU2Vuc2U7CisgICAgdW5zaWduZWQgY2hhciBiU2tpcFNlbnNlOwogCi0gICAgQk9PTEVBTiBiSXNQb3dlclNhdmluZzsgICAgIC8qIFRydWU6IFhHSUluaXQoKSBpcyBpbnZva2VkIGJ5IHBvd2VyIG1hbmFnZW1lbnQsCisgICAgdW5zaWduZWQgY2hhciBiSXNQb3dlclNhdmluZzsgICAgIC8qIFRydWU6IFhHSUluaXQoKSBpcyBpbnZva2VkIGJ5IHBvd2VyIG1hbmFnZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBieSAybmQgYWRhcHRlcidzIGluaXRpYWx6YXRpb24gKi8KIAotICAgIFBYR0lfRFNSZWcgIHBTUjsgICAgICAgICAgICAgLyogcmVzdG9yZSBTUiByZWdpc3RlcnMgaW4gaW5pdGlhbCBmdW5jdGlvbi4gKi8KKyAgICBzdHJ1Y3QgWEdJX0RTUmVnICAqcFNSOyAgICAgICAgICAgICAvKiByZXN0b3JlIFNSIHJlZ2lzdGVycyBpbiBpbml0aWFsIGZ1bmN0aW9uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGRhdGEgOihpZHgsIHZhbCkgPSAgKEZGLCBGRikuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlIDogcmVzdG9yZSBTUiByZWdpc3RlcnMgaWYgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiU2tpcERyYW1TaXppbmcgPSBUUlVFICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiU2tpcERyYW1TaXppbmcgPSAxICovCiAKLSAgICBQWEdJX0RTUmVnICBwQ1I7ICAgICAgICAgICAgIC8qIHJlc3RvcmUgQ1IgcmVnaXN0ZXJzIGluIGluaXRpYWwgZnVuY3Rpb24uICovCisgICAgc3RydWN0IFhHSV9EU1JlZyAgKnBDUjsgICAgICAgICAgICAgLyogcmVzdG9yZSBDUiByZWdpc3RlcnMgaW4gaW5pdGlhbCBmdW5jdGlvbi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBkYXRhIDooaWR4LCB2YWwpID0gIChGRiwgRkYpICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3RlIDogcmVzdG9yZSBjUiByZWdpc3RlcnMgaWYgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiU2tpcERyYW1TaXppbmcgPSBUUlVFICovCi0vKgotI2VuZGlmCi0qLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYlNraXBEcmFtU2l6aW5nID0gMSAqLwogCi0gICAgUFhHSV9RVUVSWVNQQUNFICBwUXVlcnlWR0FDb25maWdTcGFjZTsKKwl1bnNpZ25lZCBjaGFyKCpwUXVlcnlWR0FDb25maWdTcGFjZSkoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKik7CiAKLSAgICBQWEdJX1FVRVJZU1BBQ0UgIHBRdWVyeU5vcnRoQnJpZGdlU3BhY2U7CisJdW5zaWduZWQgY2hhcigqcFF1ZXJ5Tm9ydGhCcmlkZ2VTcGFjZSkoc3RydWN0IHhnaV9od19kZXZpY2VfaW5mbyAqLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICopOwogCi0gICAgVUNIQVIgIHN6VkJJT1NWZXJbVkJJT1NfVkVSX01BWF9MRU5HVEhdOworICAgIHVuc2lnbmVkIGNoYXIgc3pWQklPU1ZlcltWQklPU19WRVJfTUFYX0xFTkdUSF07CiAKIH07Ci0jZW5kaWYKIAogLyogQWRkdGlvbmFsIElPQ1RMIGZvciBjb21tdW5pY2F0aW9uIHhnaWZiIDw+IFggZHJpdmVyICAgICAgICAqLwogLyogSWYgY2hhbmdpbmcgdGhpcywgeGdpZmIuaCBtdXN0IGFsc28gYmUgY2hhbmdlZCAoZm9yIHhnaWZiKSAqLwogCi0jaWZkZWYgTElOVVhfWEY4NiAgLyogV2UgZG9uJ3Qgd2FudCB0aGUgWCBkcml2ZXIgdG8gZGVwZW5kIG9uIHRoZSBrZXJuZWwgc291cmNlICovCi0KLS8qIGlvY3RsIGZvciBpZGVudGlmeWluZyBhbmQgZ2l2aW5nIHNvbWUgaW5mbyAoZXNwLiBtZW1vcnkgaGVhcCBzdGFydCkgKi8KLSNkZWZpbmUgWEdJRkJfR0VUX0lORk8gICAgMHg4MDA0NmVmOCAgLyogV293LCB3aGF0IGEgdGVycmlibGUgaGFjay4uLiAqLwotCi0vKiBTdHJ1Y3R1cmUgYXJndW1lbnQgZm9yIFhHSUZCX0dFVF9JTkZPIGlvY3RsICAqLwotdHlwZWRlZiBzdHJ1Y3QgX1hHSUZCX0lORk8geGdpZmJfaW5mbywgKnB4Z2lmYl9pbmZvOwotCi1zdHJ1Y3QgX1hHSUZCX0lORk8gewotCUNBUkQzMiAJeGdpZmJfaWQ7ICAgICAgICAgCS8qIGZvciBpZGVudGlmeWluZyB4Z2lmYiAqLwotI2lmbmRlZiBYR0lGQl9JRAotI2RlZmluZSBYR0lGQl9JRAkgIDB4NTM0OTUzNDYgICAgLyogSWRlbnRpZnkgbXlzZWxmIHdpdGggJ1hHSUYnICovCi0jZW5kaWYKLSAJQ0FSRDMyIAljaGlwX2lkOwkJLyogUENJIElEIG9mIGRldGVjdGVkIGNoaXAgKi8KLQlDQVJEMzIJbWVtb3J5OwkJCS8qIHZpZGVvIG1lbW9yeSBpbiBLQiB3aGljaCB4Z2lmYiBtYW5hZ2VzICovCi0JQ0FSRDMyCWhlYXBzdGFydDsgICAgICAgICAgICAgCS8qIGhlYXAgc3RhcnQgKD0geGdpZmIgIm1lbSIgYXJndW1lbnQpIGluIEtCICovCi0JQ0FSRDggCWZidmlkbW9kZTsJCS8qIGN1cnJlbnQgeGdpZmIgbW9kZSAqLwotCi0JQ0FSRDggCXhnaWZiX3ZlcnNpb247Ci0JQ0FSRDgJeGdpZmJfcmV2aXNpb247Ci0JQ0FSRDggCXhnaWZiX3BhdGNobGV2ZWw7Ci0KLQlDQVJEOCAJeGdpZmJfY2FwczsJCS8qIHhnaWZiJ3MgY2FwYWJpbGl0aWVzICovCi0KLQlDQVJEMzIgCXhnaWZiX3RxbGVuOwkJLyogdHVyYm8gcXVldWUgbGVuZ3RoIChpbiBLQikgKi8KLQotCUNBUkQzMiAJeGdpZmJfcGNpYnVzOyAgICAgIAkvKiBUaGUgY2FyZCdzIFBDSSBJRCAqLwotCUNBUkQzMiAJeGdpZmJfcGNpc2xvdDsKLQlDQVJEMzIgCXhnaWZiX3BjaWZ1bmM7Ci0KLQlDQVJEOCAJeGdpZmJfbGNkcGRjOwotCi0JQ0FSRDgJeGdpZmJfbGNkYTsKLQotCUNBUkQzMgl4Z2lmYl92YmZsYWdzOwotCUNBUkQzMgl4Z2lmYl9jdXJyZW50dmJmbGFnczsKLQotCUNBUkQzMiAJeGdpZmJfc2NhbGVsY2Q7Ci0JQ0FSRDMyIAl4Z2lmYl9zcGVjaWFsdGltaW5nOwotCi0JQ0FSRDggCXhnaWZiX2hhdmVlbWk7Ci0JQ0FSRDggCXhnaWZiX2VtaTMwLHhnaWZiX2VtaTMxLHhnaWZiX2VtaTMyLHhnaWZiX2VtaTMzOwotCUNBUkQ4IAl4Z2lmYl9oYXZlZW1pbGNkOwotCi0JQ0FSRDggCXhnaWZiX2xjZHBkY2E7Ci0KLQlDQVJEOCByZXNlcnZlZFsyMTJdOyAJCS8qIGZvciBmdXR1cmUgdXNlICovCi19OwotI2VuZGlmCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvenJhbS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjU0YWUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0vS2NvbmZpZwpAQCAtMCwwICsxLDI5IEBACitjb25maWcgWlJBTQorCXRyaXN0YXRlICJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEJMT0NLCisJc2VsZWN0IExaT19DT01QUkVTUworCXNlbGVjdCBMWk9fREVDT01QUkVTUworCWRlZmF1bHQgbgorCWhlbHAKKwkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIGNhbGxlZCAvZGV2L3pyYW1YIChYID0gMCwgMSwgLi4uKS4KKwkgIFBhZ2VzIHdyaXR0ZW4gdG8gdGhlc2UgZGlza3MgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnkKKwkgIGl0c2VsZi4gVGhlc2UgZGlza3MgYWxsb3cgdmVyeSBmYXN0IEkvTyBhbmQgY29tcHJlc3Npb24gcHJvdmlkZXMKKwkgIGdvb2QgYW1vdW50cyBvZiBtZW1vcnkgc2F2aW5ncy4KKworCSAgSXQgaGFzIHNldmVyYWwgdXNlIGNhc2VzLCBmb3IgZXhhbXBsZTogL3RtcCBzdG9yYWdlLCB1c2UgYXMgc3dhcAorCSAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS4KKworCSAgU2VlIHpyYW0udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCSAgUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tLworCitjb25maWcgWlJBTV9TVEFUUworCWJvb2wgIkVuYWJsZSBzdGF0aXN0aWNzIGZvciBjb21wcmVzc2VkIFJBTSBkaXNrcyIKKwlkZXBlbmRzIG9uIFpSQU0KKwlkZWZhdWx0IHkKKwloZWxwCisJICBFbmFibGUgc3RhdGlzdGljcyBjb2xsZWN0aW9uIGZvciBjb21wcmVzc2VkIFJBTSBkZXZpY2VzLiBTdGF0aXN0aWNzCisJICBhcmUgZXhwb3J0ZWQgdGhyb3VnaCBpb2N0bCBpbnRlcmZhY2UsIHNvIHlvdSBoYXZlIHRvIHVzZSB6cmFtY29uZmlnCisJICBwcm9ncmFtIHRvIGdldCB0aGVtLiBUaGlzIGFkZHMgb25seSBhIG1pbmltYWwgb3ZlcmhlYWQuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJjMDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorenJhbS1vYmpzCTo9CXpyYW1fZHJ2Lm8geHZtYWxsb2MubworCitvYmotJChDT05GSUdfWlJBTSkJKz0JenJhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvenJhbS94dm1hbGxvYy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaCBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3h2bWFsbG9jLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvenJhbS94dm1hbGxvYy5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2NfaW50LmggYi9kcml2ZXJzL3N0YWdpbmcvenJhbS94dm1hbGxvY19pbnQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jX2ludC5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvenJhbS94dm1hbGxvY19pbnQuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbS50eHQgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBlZGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbS50eHQKQEAgLTAsMCArMSw2MiBAQAorenJhbTogQ29tcHJlc3NlZCBSQU0gYmFzZWQgYmxvY2sgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQcm9qZWN0IGhvbWU6IGh0dHA6Ly9jb21wY2FjaGUuZ29vZ2xlY29kZS5jb20vCisKKyogSW50cm9kdWN0aW9uCisKK1RoZSB6cmFtIG1vZHVsZSBjcmVhdGVzIFJBTSBiYXNlZCBibG9jayBkZXZpY2VzOiAvZGV2L3JhbVggKFggPSAwLCAxLCAuLi4pLgorUGFnZXMgd3JpdHRlbiB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluIG1lbW9yeSBpdHNlbGYuCitUaGVzZSBkaXNrcyBhbGxvdyB2ZXJ5IGZhc3QgSS9PIGFuZCBjb21wcmVzc2lvbiBwcm92aWRlcyBnb29kIGFtb3VudHMgb2YKK21lbW9yeSBzYXZpbmdzLgorCitTZWUgcHJvamVjdCBob21lIGZvciB1c2UgY2FzZXMsIHBlcmZvcm1hbmNlIG51bWJlcnMgYW5kIGEgbG90IG1vcmUuCisKK0luZGl2aWR1YWwgenJhbSBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCBpbml0aWFsaXplZCB1c2luZyB6cmFtY29uZmlnCit1c2Vyc3BhY2UgdXRpbGl0eSBhcyBzaG93biBpbiBleGFtcGxlcyBiZWxvdy4gU2VlIHpyYW1jb25maWcgbWFuIHBhZ2UgZm9yCittb3JlIGRldGFpbHMuCisKKyogVXNhZ2UKKworRm9sbG93aW5nIHNob3dzIGEgdHlwaWNhbCBzZXF1ZW5jZSBvZiBzdGVwcyBmb3IgdXNpbmcgenJhbS4KKworMSkgTG9hZCBNb2R1bGVzOgorCW1vZHByb2JlIHpyYW0gbnVtX2RldmljZXM9NAorCVRoaXMgY3JlYXRlcyA0ICh1bmluaXRpYWxpemVkKSBkZXZpY2VzOiAvZGV2L3pyYW17MCwxLDIsM30KKwkobnVtX2RldmljZXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLiBEZWZhdWx0OiAxKQorCisyKSBJbml0aWFsaXplOgorCVVzZSB6cmFtY29uZmlnIHV0aWxpdHkgdG8gY29uZmlndXJlIGFuZCBpbml0aWFsaXplIGluZGl2aWR1YWwKKwl6cmFtIGRldmljZXMuIEZvciBleGFtcGxlOgorCXpyYW1jb25maWcgL2Rldi96cmFtMCAtLWluaXQgIyB1c2VzIGRlZmF1bHQgdmFsdWUgb2YgZGlza3NpemVfa2IKKwl6cmFtY29uZmlnIC9kZXYvenJhbTEgLS1kaXNrc2l6ZV9rYj0xMDI0MDAgIyAxMDBNQiAvZGV2L3pyYW0xCisKKwkqU2VlIHpyYW1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMqCisKKzMpIEFjdGl2YXRlOgorCW1rc3dhcCAvZGV2L3pyYW0wCisJc3dhcG9uIC9kZXYvenJhbTAKKworCW1rZnMuZXh0NCAvZGV2L3pyYW0xCisJbW91bnQgL2Rldi96cmFtMSAvdG1wCisKKzQpIFN0YXRzOgorCXpyYW1jb25maWcgL2Rldi96cmFtMCAtLXN0YXRzCisJenJhbWNvbmZpZyAvZGV2L3pyYW0xIC0tc3RhdHMKKworNSkgRGVhY3RpdmF0ZToKKwlzd2Fwb2ZmIC9kZXYvenJhbTAKKwl1bW91bnQgL2Rldi96cmFtMQorCis2KSBSZXNldDoKKwl6cmFtY29uZmlnIC9kZXYvenJhbTAgLS1yZXNldAorCXpyYW1jb25maWcgL2Rldi96cmFtMSAtLXJlc2V0CisJKFRoaXMgZnJlZXMgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGdpdmVuIGRldmljZSkuCisKKworUGxlYXNlIHJlcG9ydCBhbnkgcHJvYmxlbXMgYXQ6CisgLSBNYWlsaW5nIGxpc3Q6IGxpbnV4LW1tLWNjIGF0IGxhcHRvcCBkb3Qgb3JnCisgLSBJc3N1ZSB0cmFja2VyOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY29tcGNhY2hlL2lzc3Vlcy9saXN0CisKK05pdGluIEd1cHRhCituZ3VwdGFAdmZsYXJlLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkNGQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKQEAgLTAsMCArMSw4MDUgQEAKKy8qCisgKiBDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCisgKgorICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCisgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzLWNsYXVzZSBCU0QgTGljZW5zZQorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCisgKgorICogUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tCisgKi8KKworI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAienJhbSIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2x6by5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgInpyYW1fZHJ2LmgiCisKKy8qIEdsb2JhbHMgKi8KK3N0YXRpYyBpbnQgenJhbV9tYWpvcjsKK3N0YXRpYyBzdHJ1Y3QgenJhbSAqZGV2aWNlczsKKworLyogTW9kdWxlIHBhcmFtcyAoZG9jdW1lbnRhdGlvbiBhdCBlbmQpICovCitzdGF0aWMgdW5zaWduZWQgaW50IG51bV9kZXZpY2VzOworCitzdGF0aWMgaW50IHpyYW1fdGVzdF9mbGFnKHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsCisJCQllbnVtIHpyYW1fcGFnZWZsYWdzIGZsYWcpCit7CisJcmV0dXJuIHpyYW0tPnRhYmxlW2luZGV4XS5mbGFncyAmIEJJVChmbGFnKTsKK30KKworc3RhdGljIHZvaWQgenJhbV9zZXRfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LAorCQkJZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKQoreworCXpyYW0tPnRhYmxlW2luZGV4XS5mbGFncyB8PSBCSVQoZmxhZyk7Cit9CisKK3N0YXRpYyB2b2lkIHpyYW1fY2xlYXJfZmxhZyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LAorCQkJZW51bSB6cmFtX3BhZ2VmbGFncyBmbGFnKQoreworCXpyYW0tPnRhYmxlW2luZGV4XS5mbGFncyAmPSB+QklUKGZsYWcpOworfQorCitzdGF0aWMgaW50IHBhZ2VfemVyb19maWxsZWQodm9pZCAqcHRyKQoreworCXVuc2lnbmVkIGludCBwb3M7CisJdW5zaWduZWQgbG9uZyAqcGFnZTsKKworCXBhZ2UgPSAodW5zaWduZWQgbG9uZyAqKXB0cjsKKworCWZvciAocG9zID0gMDsgcG9zICE9IFBBR0VfU0laRSAvIHNpemVvZigqcGFnZSk7IHBvcysrKSB7CisJCWlmIChwYWdlW3Bvc10pCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgenJhbV9zZXRfZGlza3NpemUoc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCB0b3RhbHJhbV9ieXRlcykKK3sKKwlpZiAoIXpyYW0tPmRpc2tzaXplKSB7CisJCXByX2luZm8oCisJCSJkaXNrIHNpemUgbm90IHByb3ZpZGVkLiBZb3UgY2FuIHVzZSBkaXNrc2l6ZV9rYiBtb2R1bGUgIgorCQkicGFyYW0gdG8gc3BlY2lmeSBzaXplLlxuVXNpbmcgZGVmYXVsdDogKCV1JSUgb2YgUkFNKS5cbiIsCisJCWRlZmF1bHRfZGlza3NpemVfcGVyY19yYW0KKwkJKTsKKwkJenJhbS0+ZGlza3NpemUgPSBkZWZhdWx0X2Rpc2tzaXplX3BlcmNfcmFtICoKKwkJCQkJKHRvdGFscmFtX2J5dGVzIC8gMTAwKTsKKwl9CisKKwlpZiAoenJhbS0+ZGlza3NpemUgPiAyICogKHRvdGFscmFtX2J5dGVzKSkgeworCQlwcl9pbmZvKAorCQkiVGhlcmUgaXMgbGl0dGxlIHBvaW50IGNyZWF0aW5nIGEgenJhbSBvZiBncmVhdGVyIHRoYW4gIgorCQkidHdpY2UgdGhlIHNpemUgb2YgbWVtb3J5IHNpbmNlIHdlIGV4cGVjdCBhIDI6MSBjb21wcmVzc2lvbiAiCisJCSJyYXRpby4gTm90ZSB0aGF0IHpyYW0gdXNlcyBhYm91dCAwLjElJSBvZiB0aGUgc2l6ZSBvZiAiCisJCSJ0aGUgZGlzayB3aGVuIG5vdCBpbiB1c2Ugc28gYSBodWdlIHpyYW0gaXMgIgorCQkid2FzdGVmdWwuXG4iCisJCSJcdE1lbW9yeSBTaXplOiAlenUga0JcbiIKKwkJIlx0U2l6ZSB5b3Ugc2VsZWN0ZWQ6ICV6dSBrQlxuIgorCQkiQ29udGludWluZyBhbnl3YXkgLi4uXG4iLAorCQl0b3RhbHJhbV9ieXRlcyA+PiAxMCwgenJhbS0+ZGlza3NpemUKKwkJKTsKKwl9CisKKwl6cmFtLT5kaXNrc2l6ZSAmPSBQQUdFX01BU0s7Cit9CisKK3N0YXRpYyB2b2lkIHpyYW1faW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCB6cmFtICp6cmFtLAorCQkJc3RydWN0IHpyYW1faW9jdGxfc3RhdHMgKnMpCit7CisJcy0+ZGlza3NpemUgPSB6cmFtLT5kaXNrc2l6ZTsKKworI2lmIGRlZmluZWQoQ09ORklHX1pSQU1fU1RBVFMpCisJeworCXN0cnVjdCB6cmFtX3N0YXRzICpycyA9ICZ6cmFtLT5zdGF0czsKKwlzaXplX3Qgc3VjY193cml0ZXMsIG1lbV91c2VkOworCXVuc2lnbmVkIGludCBnb29kX2NvbXByZXNzX3BlcmMgPSAwLCBub19jb21wcmVzc19wZXJjID0gMDsKKworCW1lbV91c2VkID0geHZfZ2V0X3RvdGFsX3NpemVfYnl0ZXMoenJhbS0+bWVtX3Bvb2wpCisJCQkrIChycy0+cGFnZXNfZXhwYW5kIDw8IFBBR0VfU0hJRlQpOworCXN1Y2Nfd3JpdGVzID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPm51bV93cml0ZXMpIC0KKwkJCXpyYW1fc3RhdDY0X3JlYWQoenJhbSwgJnJzLT5mYWlsZWRfd3JpdGVzKTsKKworCWlmIChzdWNjX3dyaXRlcyAmJiBycy0+cGFnZXNfc3RvcmVkKSB7CisJCWdvb2RfY29tcHJlc3NfcGVyYyA9IHJzLT5nb29kX2NvbXByZXNzICogMTAwCisJCQkJCS8gcnMtPnBhZ2VzX3N0b3JlZDsKKwkJbm9fY29tcHJlc3NfcGVyYyA9IHJzLT5wYWdlc19leHBhbmQgKiAxMDAKKwkJCQkJLyBycy0+cGFnZXNfc3RvcmVkOworCX0KKworCXMtPm51bV9yZWFkcyA9IHpyYW1fc3RhdDY0X3JlYWQoenJhbSwgJnJzLT5udW1fcmVhZHMpOworCXMtPm51bV93cml0ZXMgPSB6cmFtX3N0YXQ2NF9yZWFkKHpyYW0sICZycy0+bnVtX3dyaXRlcyk7CisJcy0+ZmFpbGVkX3JlYWRzID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPmZhaWxlZF9yZWFkcyk7CisJcy0+ZmFpbGVkX3dyaXRlcyA9IHpyYW1fc3RhdDY0X3JlYWQoenJhbSwgJnJzLT5mYWlsZWRfd3JpdGVzKTsKKwlzLT5pbnZhbGlkX2lvID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPmludmFsaWRfaW8pOworCXMtPm5vdGlmeV9mcmVlID0genJhbV9zdGF0NjRfcmVhZCh6cmFtLCAmcnMtPm5vdGlmeV9mcmVlKTsKKwlzLT5wYWdlc196ZXJvID0gcnMtPnBhZ2VzX3plcm87CisKKwlzLT5nb29kX2NvbXByZXNzX3BjdCA9IGdvb2RfY29tcHJlc3NfcGVyYzsKKwlzLT5wYWdlc19leHBhbmRfcGN0ID0gbm9fY29tcHJlc3NfcGVyYzsKKworCXMtPnBhZ2VzX3N0b3JlZCA9IHJzLT5wYWdlc19zdG9yZWQ7CisJcy0+cGFnZXNfdXNlZCA9IG1lbV91c2VkID4+IFBBR0VfU0hJRlQ7CisJcy0+b3JpZ19kYXRhX3NpemUgPSBycy0+cGFnZXNfc3RvcmVkIDw8IFBBR0VfU0hJRlQ7CisJcy0+Y29tcHJfZGF0YV9zaXplID0gcnMtPmNvbXByX3NpemU7CisJcy0+bWVtX3VzZWRfdG90YWwgPSBtZW1fdXNlZDsKKwl9CisjZW5kaWYgLyogQ09ORklHX1pSQU1fU1RBVFMgKi8KK30KKworc3RhdGljIHZvaWQgenJhbV9mcmVlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHNpemVfdCBpbmRleCkKK3sKKwl1MzIgY2xlbjsKKwl2b2lkICpvYmo7CisKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHpyYW0tPnRhYmxlW2luZGV4XS5wYWdlOworCXUzMiBvZmZzZXQgPSB6cmFtLT50YWJsZVtpbmRleF0ub2Zmc2V0OworCisJaWYgKHVubGlrZWx5KCFwYWdlKSkgeworCQkvKgorCQkgKiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB6ZXJvIGZpbGxlZCBwYWdlcy4KKwkJICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgorCQkgKi8KKwkJaWYgKHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pKSB7CisJCQl6cmFtX2NsZWFyX2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fWkVSTyk7CisJCQl6cmFtX3N0YXRfZGVjKCZ6cmFtLT5zdGF0cy5wYWdlc196ZXJvKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHVubGlrZWx5KHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCkpKSB7CisJCWNsZW4gPSBQQUdFX1NJWkU7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQl6cmFtX2NsZWFyX2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKTsKKwkJenJhbV9zdGF0X2RlYygmenJhbS0+c3RhdHMucGFnZXNfZXhwYW5kKTsKKwkJZ290byBvdXQ7CisJfQorCisJb2JqID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApICsgb2Zmc2V0OworCWNsZW4gPSB4dl9nZXRfb2JqZWN0X3NpemUob2JqKSAtIHNpemVvZihzdHJ1Y3Qgem9ial9oZWFkZXIpOworCWt1bm1hcF9hdG9taWMob2JqLCBLTV9VU0VSMCk7CisKKwl4dl9mcmVlKHpyYW0tPm1lbV9wb29sLCBwYWdlLCBvZmZzZXQpOworCWlmIChjbGVuIDw9IFBBR0VfU0laRSAvIDIpCisJCXpyYW1fc3RhdF9kZWMoJnpyYW0tPnN0YXRzLmdvb2RfY29tcHJlc3MpOworCitvdXQ6CisJenJhbS0+c3RhdHMuY29tcHJfc2l6ZSAtPSBjbGVuOworCXpyYW1fc3RhdF9kZWMoJnpyYW0tPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CisKKwl6cmFtLT50YWJsZVtpbmRleF0ucGFnZSA9IE5VTEw7CisJenJhbS0+dGFibGVbaW5kZXhdLm9mZnNldCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV96ZXJvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdm9pZCAqdXNlcl9tZW07CisKKwl1c2VyX21lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwltZW1zZXQodXNlcl9tZW0sIDAsIFBBR0VfU0laRSk7CisJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOworCisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV91bmNvbXByZXNzZWRfcGFnZShzdHJ1Y3QgenJhbSAqenJhbSwKKwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdTMyIGluZGV4KQoreworCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbTsKKworCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWNtZW0gPSBrbWFwX2F0b21pYyh6cmFtLT50YWJsZVtpbmRleF0ucGFnZSwgS01fVVNFUjEpICsKKwkJCXpyYW0tPnRhYmxlW2luZGV4XS5vZmZzZXQ7CisKKwltZW1jcHkodXNlcl9tZW0sIGNtZW0sIFBBR0VfU0laRSk7CisJa3VubWFwX2F0b21pYyh1c2VyX21lbSwgS01fVVNFUjApOworCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOworCisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyBpbnQgenJhbV9yZWFkKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisKKwlpbnQgaTsKKwl1MzIgaW5kZXg7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisKKwl6cmFtX3N0YXQ2NF9pbmMoenJhbSwgJnpyYW0tPnN0YXRzLm51bV9yZWFkcyk7CisKKwlpbmRleCA9IGJpby0+Ymlfc2VjdG9yID4+IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQ7CisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpKSB7CisJCWludCByZXQ7CisJCXNpemVfdCBjbGVuOworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJc3RydWN0IHpvYmpfaGVhZGVyICp6aGVhZGVyOworCQl1bnNpZ25lZCBjaGFyICp1c2VyX21lbSwgKmNtZW07CisKKwkJcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisKKwkJaWYgKHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pKSB7CisJCQloYW5kbGVfemVyb19wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZXF1ZXN0ZWQgcGFnZSBpcyBub3QgcHJlc2VudCBpbiBjb21wcmVzc2VkIGFyZWEgKi8KKwkJaWYgKHVubGlrZWx5KCF6cmFtLT50YWJsZVtpbmRleF0ucGFnZSkpIHsKKwkJCXByX2RlYnVnKCJSZWFkIGJlZm9yZSB3cml0ZTogc2VjdG9yPSVsdSwgc2l6ZT0ldSIsCisJCQkJKHVsb25nKShiaW8tPmJpX3NlY3RvciksIGJpby0+Ymlfc2l6ZSk7CisJCQkvKiBEbyBub3RoaW5nICovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCBzaW5jZSBpdCdzIGluY29tcHJlc3NpYmxlICovCisJCWlmICh1bmxpa2VseSh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSkgeworCQkJaGFuZGxlX3VuY29tcHJlc3NlZF9wYWdlKHpyYW0sIHBhZ2UsIGluZGV4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXNlcl9tZW0gPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCWNsZW4gPSBQQUdFX1NJWkU7CisKKwkJY21lbSA9IGttYXBfYXRvbWljKHpyYW0tPnRhYmxlW2luZGV4XS5wYWdlLCBLTV9VU0VSMSkgKworCQkJCXpyYW0tPnRhYmxlW2luZGV4XS5vZmZzZXQ7CisKKwkJcmV0ID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKAorCQkJY21lbSArIHNpemVvZigqemhlYWRlciksCisJCQl4dl9nZXRfb2JqZWN0X3NpemUoY21lbSkgLSBzaXplb2YoKnpoZWFkZXIpLAorCQkJdXNlcl9tZW0sICZjbGVuKTsKKworCQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CisJCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOworCisJCS8qIFNob3VsZCBORVZFUiBoYXBwZW4uIFJldHVybiBiaW8gZXJyb3IgaWYgaXQgZG9lcy4gKi8KKwkJaWYgKHVubGlrZWx5KHJldCAhPSBMWk9fRV9PSykpIHsKKwkJCXByX2VycigiRGVjb21wcmVzc2lvbiBmYWlsZWQhIGVycj0lZCwgcGFnZT0ldVxuIiwKKwkJCQlyZXQsIGluZGV4KTsKKwkJCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMuZmFpbGVkX3JlYWRzKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJCWluZGV4Kys7CisJfQorCisJc2V0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKKwliaW9fZW5kaW8oYmlvLCAwKTsKKwlyZXR1cm4gMDsKKworb3V0OgorCWJpb19pb19lcnJvcihiaW8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpyYW1fd3JpdGUoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlpbnQgaTsKKwl1MzIgaW5kZXg7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisKKwl6cmFtX3N0YXQ2NF9pbmMoenJhbSwgJnpyYW0tPnN0YXRzLm51bV93cml0ZXMpOworCisJaW5kZXggPSBiaW8tPmJpX3NlY3RvciA+PiBTRUNUT1JTX1BFUl9QQUdFX1NISUZUOworCisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpKSB7CisJCWludCByZXQ7CisJCXUzMiBvZmZzZXQ7CisJCXNpemVfdCBjbGVuOworCQlzdHJ1Y3Qgem9ial9oZWFkZXIgKnpoZWFkZXI7CisJCXN0cnVjdCBwYWdlICpwYWdlLCAqcGFnZV9zdG9yZTsKKwkJdW5zaWduZWQgY2hhciAqdXNlcl9tZW0sICpjbWVtLCAqc3JjOworCisJCXBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzcmMgPSB6cmFtLT5jb21wcmVzc19idWZmZXI7CisKKwkJLyoKKwkJICogU3lzdGVtIG92ZXJ3cml0ZXMgdW51c2VkIHNlY3RvcnMuIEZyZWUgbWVtb3J5IGFzc29jaWF0ZWQKKwkJICogd2l0aCB0aGlzIHNlY3RvciBub3cuCisJCSAqLworCQlpZiAoenJhbS0+dGFibGVbaW5kZXhdLnBhZ2UgfHwKKwkJCQl6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKSkKKwkJCXpyYW1fZnJlZV9wYWdlKHpyYW0sIGluZGV4KTsKKworCQltdXRleF9sb2NrKCZ6cmFtLT5sb2NrKTsKKworCQl1c2VyX21lbSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJaWYgKHBhZ2VfemVyb19maWxsZWQodXNlcl9tZW0pKSB7CisJCQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CisJCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOworCQkJenJhbV9zdGF0X2luYygmenJhbS0+c3RhdHMucGFnZXNfemVybyk7CisJCQl6cmFtX3NldF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pOworCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSBsem8xeF8xX2NvbXByZXNzKHVzZXJfbWVtLCBQQUdFX1NJWkUsIHNyYywgJmNsZW4sCisJCQkJCXpyYW0tPmNvbXByZXNzX3dvcmttZW0pOworCisJCWt1bm1hcF9hdG9taWModXNlcl9tZW0sIEtNX1VTRVIwKTsKKworCQlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZ6cmFtLT5sb2NrKTsKKwkJCXByX2VycigiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcbiIsIHJldCk7CisJCQl6cmFtX3N0YXQ2NF9pbmMoenJhbSwgJnpyYW0tPnN0YXRzLmZhaWxlZF93cml0ZXMpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBQYWdlIGlzIGluY29tcHJlc3NpYmxlLiBTdG9yZSBpdCBhcy1pcyAodW5jb21wcmVzc2VkKQorCQkgKiBzaW5jZSB3ZSBkbyBub3Qgd2FudCB0byByZXR1cm4gdG9vIG1hbnkgZGlzayB3cml0ZQorCQkgKiBlcnJvcnMgd2hpY2ggaGFzIHNpZGUgZWZmZWN0IG9mIGhhbmdpbmcgdGhlIHN5c3RlbS4KKwkJICovCisJCWlmICh1bmxpa2VseShjbGVuID4gbWF4X3pwYWdlX3NpemUpKSB7CisJCQljbGVuID0gUEFHRV9TSVpFOworCQkJcGFnZV9zdG9yZSA9IGFsbG9jX3BhZ2UoR0ZQX05PSU8gfCBfX0dGUF9ISUdITUVNKTsKKwkJCWlmICh1bmxpa2VseSghcGFnZV9zdG9yZSkpIHsKKwkJCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOworCQkJCXByX2luZm8oIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciAiCisJCQkJCSJpbmNvbXByZXNzaWJsZSBwYWdlOiAldVxuIiwgaW5kZXgpOworCQkJCXpyYW1fc3RhdDY0X2luYyh6cmFtLAorCQkJCQkmenJhbS0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCW9mZnNldCA9IDA7CisJCQl6cmFtX3NldF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCk7CisJCQl6cmFtX3N0YXRfaW5jKCZ6cmFtLT5zdGF0cy5wYWdlc19leHBhbmQpOworCQkJenJhbS0+dGFibGVbaW5kZXhdLnBhZ2UgPSBwYWdlX3N0b3JlOworCQkJc3JjID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQkJZ290byBtZW1zdG9yZTsKKwkJfQorCisJCWlmICh4dl9tYWxsb2MoenJhbS0+bWVtX3Bvb2wsIGNsZW4gKyBzaXplb2YoKnpoZWFkZXIpLAorCQkJCSZ6cmFtLT50YWJsZVtpbmRleF0ucGFnZSwgJm9mZnNldCwKKwkJCQlHRlBfTk9JTyB8IF9fR0ZQX0hJR0hNRU0pKSB7CisJCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOworCQkJcHJfaW5mbygiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbXByZXNzZWQgIgorCQkJCSJwYWdlOiAldSwgc2l6ZT0lenVcbiIsIGluZGV4LCBjbGVuKTsKKwkJCXpyYW1fc3RhdDY0X2luYyh6cmFtLCAmenJhbS0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CisJCQlnb3RvIG91dDsKKwkJfQorCittZW1zdG9yZToKKwkJenJhbS0+dGFibGVbaW5kZXhdLm9mZnNldCA9IG9mZnNldDsKKworCQljbWVtID0ga21hcF9hdG9taWMoenJhbS0+dGFibGVbaW5kZXhdLnBhZ2UsIEtNX1VTRVIxKSArCisJCQkJenJhbS0+dGFibGVbaW5kZXhdLm9mZnNldDsKKworI2lmIDAKKwkJLyogQmFjay1yZWZlcmVuY2UgbmVlZGVkIGZvciBtZW1vcnkgZGVmcmFnbWVudGF0aW9uICovCisJCWlmICghenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKSkgeworCQkJemhlYWRlciA9IChzdHJ1Y3Qgem9ial9oZWFkZXIgKiljbWVtOworCQkJemhlYWRlci0+dGFibGVfaWR4ID0gaW5kZXg7CisJCQljbWVtICs9IHNpemVvZigqemhlYWRlcik7CisJCX0KKyNlbmRpZgorCisJCW1lbWNweShjbWVtLCBzcmMsIGNsZW4pOworCisJCWt1bm1hcF9hdG9taWMoY21lbSwgS01fVVNFUjEpOworCQlpZiAodW5saWtlbHkoenJhbV90ZXN0X2ZsYWcoenJhbSwgaW5kZXgsIFpSQU1fVU5DT01QUkVTU0VEKSkpCisJCQlrdW5tYXBfYXRvbWljKHNyYywgS01fVVNFUjApOworCisJCS8qIFVwZGF0ZSBzdGF0cyAqLworCQl6cmFtLT5zdGF0cy5jb21wcl9zaXplICs9IGNsZW47CisJCXpyYW1fc3RhdF9pbmMoJnpyYW0tPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CisJCWlmIChjbGVuIDw9IFBBR0VfU0laRSAvIDIpCisJCQl6cmFtX3N0YXRfaW5jKCZ6cmFtLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKKworCQltdXRleF91bmxvY2soJnpyYW0tPmxvY2spOworCQlpbmRleCsrOworCX0KKworCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CisJYmlvX2VuZGlvKGJpbywgMCk7CisJcmV0dXJuIDA7CisKK291dDoKKwliaW9faW9fZXJyb3IoYmlvKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIHJlcXVlc3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgcGFnZSBhbGlnbmVkLgorICovCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9pb19yZXF1ZXN0KHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJaWYgKHVubGlrZWx5KAorCQkoYmlvLT5iaV9zZWN0b3IgPj0gKHpyYW0tPmRpc2tzaXplID4+IFNFQ1RPUl9TSElGVCkpIHx8CisJCShiaW8tPmJpX3NlY3RvciAmIChTRUNUT1JTX1BFUl9QQUdFIC0gMSkpIHx8CisJCShiaW8tPmJpX3NpemUgJiAoUEFHRV9TSVpFIC0gMSkpKSkgeworCisJCXJldHVybiAwOworCX0KKworCS8qIEkvTyByZXF1ZXN0IGlzIHZhbGlkICovCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBIYW5kbGVyIGZ1bmN0aW9uIGZvciBhbGwgenJhbSBJL08gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyBpbnQgenJhbV9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHpyYW0gKnpyYW0gPSBxdWV1ZS0+cXVldWVkYXRhOworCisJaWYgKHVubGlrZWx5KCF6cmFtLT5pbml0X2RvbmUpKSB7CisJCWJpb19pb19lcnJvcihiaW8pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXZhbGlkX2lvX3JlcXVlc3QoenJhbSwgYmlvKSkgeworCQl6cmFtX3N0YXQ2NF9pbmMoenJhbSwgJnpyYW0tPnN0YXRzLmludmFsaWRfaW8pOworCQliaW9faW9fZXJyb3IoYmlvKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChiaW9fZGF0YV9kaXIoYmlvKSkgeworCWNhc2UgUkVBRDoKKwkJcmV0ID0genJhbV9yZWFkKHpyYW0sIGJpbyk7CisJCWJyZWFrOworCisJY2FzZSBXUklURToKKwkJcmV0ID0genJhbV93cml0ZSh6cmFtLCBiaW8pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZXNldF9kZXZpY2Uoc3RydWN0IHpyYW0gKnpyYW0pCit7CisJc2l6ZV90IGluZGV4OworCisJLyogRG8gbm90IGFjY2VwdCBhbnkgbmV3IEkvTyByZXF1ZXN0ICovCisJenJhbS0+aW5pdF9kb25lID0gMDsKKworCS8qIEZyZWUgdmFyaW91cyBwZXItZGV2aWNlIGJ1ZmZlcnMgKi8KKwlrZnJlZSh6cmFtLT5jb21wcmVzc193b3JrbWVtKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXpyYW0tPmNvbXByZXNzX2J1ZmZlciwgMSk7CisKKwl6cmFtLT5jb21wcmVzc193b3JrbWVtID0gTlVMTDsKKwl6cmFtLT5jb21wcmVzc19idWZmZXIgPSBOVUxMOworCisJLyogRnJlZSBhbGwgcGFnZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhpcyB6cmFtIGRldmljZSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHpyYW0tPmRpc2tzaXplID4+IFBBR0VfU0hJRlQ7IGluZGV4KyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCXUxNiBvZmZzZXQ7CisKKwkJcGFnZSA9IHpyYW0tPnRhYmxlW2luZGV4XS5wYWdlOworCQlvZmZzZXQgPSB6cmFtLT50YWJsZVtpbmRleF0ub2Zmc2V0OworCisJCWlmICghcGFnZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh1bmxpa2VseSh6cmFtX3Rlc3RfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9VTkNPTVBSRVNTRUQpKSkKKwkJCV9fZnJlZV9wYWdlKHBhZ2UpOworCQllbHNlCisJCQl4dl9mcmVlKHpyYW0tPm1lbV9wb29sLCBwYWdlLCBvZmZzZXQpOworCX0KKworCXZmcmVlKHpyYW0tPnRhYmxlKTsKKwl6cmFtLT50YWJsZSA9IE5VTEw7CisKKwl4dl9kZXN0cm95X3Bvb2woenJhbS0+bWVtX3Bvb2wpOworCXpyYW0tPm1lbV9wb29sID0gTlVMTDsKKworCS8qIFJlc2V0IHN0YXRzICovCisJbWVtc2V0KCZ6cmFtLT5zdGF0cywgMCwgc2l6ZW9mKHpyYW0tPnN0YXRzKSk7CisKKwl6cmFtLT5kaXNrc2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgenJhbV9pb2N0bF9pbml0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSkKK3sKKwlpbnQgcmV0OworCXNpemVfdCBudW1fcGFnZXM7CisKKwlpZiAoenJhbS0+aW5pdF9kb25lKSB7CisJCXByX2luZm8oIkRldmljZSBhbHJlYWR5IGluaXRpYWxpemVkIVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJenJhbV9zZXRfZGlza3NpemUoenJhbSwgdG90YWxyYW1fcGFnZXMgPDwgUEFHRV9TSElGVCk7CisKKwl6cmFtLT5jb21wcmVzc193b3JrbWVtID0ga3phbGxvYyhMWk8xWF9NRU1fQ09NUFJFU1MsIEdGUF9LRVJORUwpOworCWlmICghenJhbS0+Y29tcHJlc3Nfd29ya21lbSkgeworCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgY29tcHJlc3NvciB3b3JraW5nIG1lbW9yeSFcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJenJhbS0+Y29tcHJlc3NfYnVmZmVyID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX1pFUk8sIDEpOworCWlmICghenJhbS0+Y29tcHJlc3NfYnVmZmVyKSB7CisJCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBjb21wcmVzc29yIGJ1ZmZlciBzcGFjZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwludW1fcGFnZXMgPSB6cmFtLT5kaXNrc2l6ZSA+PiBQQUdFX1NISUZUOworCXpyYW0tPnRhYmxlID0gdm1hbGxvYyhudW1fcGFnZXMgKiBzaXplb2YoKnpyYW0tPnRhYmxlKSk7CisJaWYgKCF6cmFtLT50YWJsZSkgeworCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgenJhbSBhZGRyZXNzIHRhYmxlXG4iKTsKKwkJLyogVG8gcHJldmVudCBhY2Nlc3NpbmcgdGFibGUgZW50cmllcyBkdXJpbmcgY2xlYW51cCAqLworCQl6cmFtLT5kaXNrc2l6ZSA9IDA7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJbWVtc2V0KHpyYW0tPnRhYmxlLCAwLCBudW1fcGFnZXMgKiBzaXplb2YoKnpyYW0tPnRhYmxlKSk7CisKKwlzZXRfY2FwYWNpdHkoenJhbS0+ZGlzaywgenJhbS0+ZGlza3NpemUgPj4gU0VDVE9SX1NISUZUKTsKKworCS8qIHpyYW0gZGV2aWNlcyBzb3J0IG9mIHJlc2VtYmxlcyBub24tcm90YXRpb25hbCBkaXNrcyAqLworCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfTk9OUk9ULCB6cmFtLT5kaXNrLT5xdWV1ZSk7CisKKwl6cmFtLT5tZW1fcG9vbCA9IHh2X2NyZWF0ZV9wb29sKCk7CisJaWYgKCF6cmFtLT5tZW1fcG9vbCkgeworCQlwcl9lcnIoIkVycm9yIGNyZWF0aW5nIG1lbW9yeSBwb29sXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCXpyYW0tPmluaXRfZG9uZSA9IDE7CisKKwlwcl9kZWJ1ZygiSW5pdGlhbGl6YXRpb24gZG9uZSFcbiIpOworCXJldHVybiAwOworCitmYWlsOgorCXJlc2V0X2RldmljZSh6cmFtKTsKKworCXByX2VycigiSW5pdGlhbGl6YXRpb24gZmFpbGVkOiBlcnI9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB6cmFtX2lvY3RsX3Jlc2V0X2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSkKK3sKKwlpZiAoenJhbS0+aW5pdF9kb25lKQorCQlyZXNldF9kZXZpY2UoenJhbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6cmFtX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAwOworCXNpemVfdCBkaXNrc2l6ZV9rYjsKKworCXN0cnVjdCB6cmFtICp6cmFtID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFpSQU1JT19TRVRfRElTS1NJWkVfS0I6CisJCWlmICh6cmFtLT5pbml0X2RvbmUpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZGlza3NpemVfa2IsICh2b2lkICopYXJnLAorCQkJCQkJX0lPQ19TSVpFKGNtZCkpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJenJhbS0+ZGlza3NpemUgPSBkaXNrc2l6ZV9rYiA8PCAxMDsKKwkJcHJfaW5mbygiRGlzayBzaXplIHNldCB0byAlenUga0JcbiIsIGRpc2tzaXplX2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIFpSQU1JT19HRVRfU1RBVFM6CisJeworCQlzdHJ1Y3QgenJhbV9pb2N0bF9zdGF0cyAqc3RhdHM7CisJCWlmICghenJhbS0+aW5pdF9kb25lKSB7CisJCQlyZXQgPSAtRU5PVFRZOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhdHMgPSBremFsbG9jKHNpemVvZigqc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGF0cykgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXpyYW1faW9jdGxfZ2V0X3N0YXRzKHpyYW0sIHN0YXRzKTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgc3RhdHMsIHNpemVvZigqc3RhdHMpKSkgeworCQkJa2ZyZWUoc3RhdHMpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWtmcmVlKHN0YXRzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgWlJBTUlPX0lOSVQ6CisJCXJldCA9IHpyYW1faW9jdGxfaW5pdF9kZXZpY2UoenJhbSk7CisJCWJyZWFrOworCisJY2FzZSBaUkFNSU9fUkVTRVQ6CisJCS8qIERvIG5vdCByZXNldCBhbiBhY3RpdmUgZGV2aWNlISAqLworCQlpZiAoYmRldi0+YmRfaG9sZGVycykgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBNYWtlIHN1cmUgYWxsIHBlbmRpbmcgSS9PIGlzIGZpbmlzaGVkICovCisJCWlmIChiZGV2KQorCQkJZnN5bmNfYmRldihiZGV2KTsKKworCQlyZXQgPSB6cmFtX2lvY3RsX3Jlc2V0X2RldmljZSh6cmFtKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCJJbnZhbGlkIGlvY3RsICV1XG4iLCBjbWQpOworCQlyZXQgPSAtRU5PVFRZOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgenJhbV9zbG90X2ZyZWVfbm90aWZ5KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisJc3RydWN0IHpyYW0gKnpyYW07CisKKwl6cmFtID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXpyYW1fZnJlZV9wYWdlKHpyYW0sIGluZGV4KTsKKwl6cmFtX3N0YXQ2NF9pbmMoenJhbSwgJnpyYW0tPnN0YXRzLm5vdGlmeV9mcmVlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB6cmFtX2Rldm9wcyA9IHsKKwkuaW9jdGwgPSB6cmFtX2lvY3RsLAorCS5zd2FwX3Nsb3RfZnJlZV9ub3RpZnkgPSB6cmFtX3Nsb3RfZnJlZV9ub3RpZnksCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZShzdHJ1Y3QgenJhbSAqenJhbSwgaW50IGRldmljZV9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2luaXQoJnpyYW0tPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZ6cmFtLT5zdGF0NjRfbG9jayk7CisKKwl6cmFtLT5xdWV1ZSA9IGJsa19hbGxvY19xdWV1ZShHRlBfS0VSTkVMKTsKKwlpZiAoIXpyYW0tPnF1ZXVlKSB7CisJCXByX2VycigiRXJyb3IgYWxsb2NhdGluZyBkaXNrIHF1ZXVlIGZvciBkZXZpY2UgJWRcbiIsCisJCQlkZXZpY2VfaWQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHpyYW0tPnF1ZXVlLCB6cmFtX21ha2VfcmVxdWVzdCk7CisJenJhbS0+cXVldWUtPnF1ZXVlZGF0YSA9IHpyYW07CisKKwkgLyogZ2VuZGlzayBzdHJ1Y3R1cmUgKi8KKwl6cmFtLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIXpyYW0tPmRpc2spIHsKKwkJYmxrX2NsZWFudXBfcXVldWUoenJhbS0+cXVldWUpOworCQlwcl93YXJuaW5nKCJFcnJvciBhbGxvY2F0aW5nIGRpc2sgc3RydWN0dXJlIGZvciBkZXZpY2UgJWRcbiIsCisJCQlkZXZpY2VfaWQpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl6cmFtLT5kaXNrLT5tYWpvciA9IHpyYW1fbWFqb3I7CisJenJhbS0+ZGlzay0+Zmlyc3RfbWlub3IgPSBkZXZpY2VfaWQ7CisJenJhbS0+ZGlzay0+Zm9wcyA9ICZ6cmFtX2Rldm9wczsKKwl6cmFtLT5kaXNrLT5xdWV1ZSA9IHpyYW0tPnF1ZXVlOworCXpyYW0tPmRpc2stPnByaXZhdGVfZGF0YSA9IHpyYW07CisJc25wcmludGYoenJhbS0+ZGlzay0+ZGlza19uYW1lLCAxNiwgInpyYW0lZCIsIGRldmljZV9pZCk7CisKKwkvKiBBY3R1YWwgY2FwYWNpdHkgc2V0IHVzaW5nIFpSQU1JT19TRVRfRElTS1NJWkVfS0IgaW9jdGwgKi8KKwlzZXRfY2FwYWNpdHkoenJhbS0+ZGlzaywgMCk7CisKKwkvKgorCSAqIFRvIGVuc3VyZSB0aGF0IHdlIGFsd2F5cyBnZXQgUEFHRV9TSVpFIGFsaWduZWQKKwkgKiBhbmQgbipQQUdFX1NJWkVEIHNpemVkIEkvTyByZXF1ZXN0cy4KKwkgKi8KKwlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZSh6cmFtLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKwlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHpyYW0tPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9pb19taW4oenJhbS0+ZGlzay0+cXVldWUsIFBBR0VfU0laRSk7CisJYmxrX3F1ZXVlX2lvX29wdCh6cmFtLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKworCWFkZF9kaXNrKHpyYW0tPmRpc2spOworCisJenJhbS0+aW5pdF9kb25lID0gMDsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZGV2aWNlKHN0cnVjdCB6cmFtICp6cmFtKQoreworCWlmICh6cmFtLT5kaXNrKSB7CisJCWRlbF9nZW5kaXNrKHpyYW0tPmRpc2spOworCQlwdXRfZGlzayh6cmFtLT5kaXNrKTsKKwl9CisKKwlpZiAoenJhbS0+cXVldWUpCisJCWJsa19jbGVhbnVwX3F1ZXVlKHpyYW0tPnF1ZXVlKTsKK30KKworc3RhdGljIGludCBfX2luaXQgenJhbV9pbml0KHZvaWQpCit7CisJaW50IHJldCwgZGV2X2lkOworCisJaWYgKG51bV9kZXZpY2VzID4gbWF4X251bV9kZXZpY2VzKSB7CisJCXByX3dhcm5pbmcoIkludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzOiAldVxuIiwKKwkJCQludW1fZGV2aWNlcyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXpyYW1fbWFqb3IgPSByZWdpc3Rlcl9ibGtkZXYoMCwgInpyYW0iKTsKKwlpZiAoenJhbV9tYWpvciA8PSAwKSB7CisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBnZXQgbWFqb3IgbnVtYmVyXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW51bV9kZXZpY2VzKSB7CisJCXByX2luZm8oIm51bV9kZXZpY2VzIG5vdCBzcGVjaWZpZWQuIFVzaW5nIGRlZmF1bHQ6IDFcbiIpOworCQludW1fZGV2aWNlcyA9IDE7CisJfQorCisJLyogQWxsb2NhdGUgdGhlIGRldmljZSBhcnJheSBhbmQgaW5pdGlhbGl6ZSBlYWNoIG9uZSAqLworCXByX2luZm8oIkNyZWF0aW5nICV1IGRldmljZXMgLi4uXG4iLCBudW1fZGV2aWNlcyk7CisJZGV2aWNlcyA9IGt6YWxsb2MobnVtX2RldmljZXMgKiBzaXplb2Yoc3RydWN0IHpyYW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldmljZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB1bnJlZ2lzdGVyOworCX0KKworCWZvciAoZGV2X2lkID0gMDsgZGV2X2lkIDwgbnVtX2RldmljZXM7IGRldl9pZCsrKSB7CisJCXJldCA9IGNyZWF0ZV9kZXZpY2UoJmRldmljZXNbZGV2X2lkXSwgZGV2X2lkKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZV9kZXZpY2VzOworCX0KKworCXJldHVybiAwOworCitmcmVlX2RldmljZXM6CisJd2hpbGUgKGRldl9pZCkKKwkJZGVzdHJveV9kZXZpY2UoJmRldmljZXNbLS1kZXZfaWRdKTsKK3VucmVnaXN0ZXI6CisJdW5yZWdpc3Rlcl9ibGtkZXYoenJhbV9tYWpvciwgInpyYW0iKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgenJhbV9leGl0KHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IHpyYW0gKnpyYW07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RldmljZXM7IGkrKykgeworCQl6cmFtID0gJmRldmljZXNbaV07CisKKwkJZGVzdHJveV9kZXZpY2UoenJhbSk7CisJCWlmICh6cmFtLT5pbml0X2RvbmUpCisJCQlyZXNldF9kZXZpY2UoenJhbSk7CisJfQorCisJdW5yZWdpc3Rlcl9ibGtkZXYoenJhbV9tYWpvciwgInpyYW0iKTsKKworCWtmcmVlKGRldmljZXMpOworCXByX2RlYnVnKCJDbGVhbnVwIGRvbmUhXG4iKTsKK30KKworbW9kdWxlX3BhcmFtKG51bV9kZXZpY2VzLCB1aW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobnVtX2RldmljZXMsICJOdW1iZXIgb2YgenJhbSBkZXZpY2VzIik7CisKK21vZHVsZV9pbml0KHpyYW1faW5pdCk7Cittb2R1bGVfZXhpdCh6cmFtX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CitNT0RVTEVfQVVUSE9SKCJOaXRpbiBHdXB0YSA8bmd1cHRhQHZmbGFyZS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbXByZXNzZWQgUkFNIEJsb2NrIERldmljZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1Zjk3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCisgKgorICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCisgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzLWNsYXVzZSBCU0QgTGljZW5zZQorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCisgKgorICogUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tCisgKi8KKworI2lmbmRlZiBfWlJBTV9EUlZfSF8KKyNkZWZpbmUgX1pSQU1fRFJWX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlICJ6cmFtX2lvY3RsLmgiCisjaW5jbHVkZSAieHZtYWxsb2MuaCIKKworLyoKKyAqIFNvbWUgYXJiaXRyYXJ5IHZhbHVlLiBUaGlzIGlzIGp1c3QgdG8gY2F0Y2gKKyAqIGludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzIG1vZHVsZSBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfbnVtX2RldmljZXMgPSAzMjsKKworLyoKKyAqIFN0b3JlZCBhdCBiZWdpbm5pbmcgb2YgZWFjaCBjb21wcmVzc2VkIG9iamVjdC4KKyAqCisgKiBJdCBzdG9yZXMgYmFjay1yZWZlcmVuY2UgdG8gdGFibGUgZW50cnkgd2hpY2ggcG9pbnRzIHRvIHRoaXMKKyAqIG9iamVjdC4gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBwb3J0IG1lbW9yeSBkZWZyYWdtZW50YXRpb24uCisgKi8KK3N0cnVjdCB6b2JqX2hlYWRlciB7CisjaWYgMAorCXUzMiB0YWJsZV9pZHg7CisjZW5kaWYKK307CisKKy8qLS0gQ29uZmlndXJhYmxlIHBhcmFtZXRlcnMgKi8KKworLyogRGVmYXVsdCB6cmFtIGRpc2sgc2l6ZTogMjUlIG9mIHRvdGFsIFJBTSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRfZGlza3NpemVfcGVyY19yYW0gPSAyNTsKKworLyoKKyAqIFBhZ2VzIHRoYXQgY29tcHJlc3MgdG8gc2l6ZSBncmVhdGVyIHRoYW4gdGhpcyBhcmUgc3RvcmVkCisgKiB1bmNvbXByZXNzZWQgaW4gbWVtb3J5LgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4X3pwYWdlX3NpemUgPSBQQUdFX1NJWkUgLyA0ICogMzsKKworLyoKKyAqIE5PVEU6IG1heF96cGFnZV9zaXplIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvOgorICogICBYVl9NQVhfQUxMT0NfU0laRSAtIHNpemVvZihzdHJ1Y3Qgem9ial9oZWFkZXIpCisgKiBvdGhlcndpc2UsIHh2X21hbGxvYygpIHdvdWxkIGFsd2F5cyByZXR1cm4gZmFpbHVyZS4KKyAqLworCisvKi0tIEVuZCBvZiBjb25maWd1cmFibGUgcGFyYW1zICovCisKKyNkZWZpbmUgU0VDVE9SX1NISUZUCQk5CisjZGVmaW5lIFNFQ1RPUl9TSVpFCQkoMSA8PCBTRUNUT1JfU0hJRlQpCisjZGVmaW5lIFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQJKFBBR0VfU0hJRlQgLSBTRUNUT1JfU0hJRlQpCisjZGVmaW5lIFNFQ1RPUlNfUEVSX1BBR0UJKDEgPDwgU0VDVE9SU19QRVJfUEFHRV9TSElGVCkKKworLyogRmxhZ3MgZm9yIHpyYW0gcGFnZXMgKHRhYmxlW3BhZ2Vfbm9dLmZsYWdzKSAqLworZW51bSB6cmFtX3BhZ2VmbGFncyB7CisJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkICovCisJWlJBTV9VTkNPTVBSRVNTRUQsCisKKwkvKiBQYWdlIGNvbnNpc3RzIGVudGlyZWx5IG9mIHplcm9zICovCisJWlJBTV9aRVJPLAorCisJX19OUl9aUkFNX1BBR0VGTEFHUywKK307CisKKy8qLS0gRGF0YSBzdHJ1Y3R1cmVzICovCisKKy8qIEFsbG9jYXRlZCBmb3IgZWFjaCBkaXNrIHBhZ2UgKi8KK3N0cnVjdCB0YWJsZSB7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTE2IG9mZnNldDsKKwl1OCBjb3VudDsJLyogb2JqZWN0IHJlZiBjb3VudCAobm90IHlldCB1c2VkKSAqLworCXU4IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7CisKK3N0cnVjdCB6cmFtX3N0YXRzIHsKKwkvKiBiYXNpYyBzdGF0cyAqLworCXNpemVfdCBjb21wcl9zaXplOwkvKiBjb21wcmVzc2VkIHNpemUgb2YgcGFnZXMgc3RvcmVkIC0KKwkJCQkgKiBuZWVkZWQgdG8gZW5mb3JjZSBtZW1saW1pdCAqLworCS8qIG1vcmUgc3RhdHMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19aUkFNX1NUQVRTKQorCXU2NCBudW1fcmVhZHM7CQkvKiBmYWlsZWQgKyBzdWNjZXNzZnVsICovCisJdTY0IG51bV93cml0ZXM7CQkvKiAtLWRvLS0gKi8KKwl1NjQgZmFpbGVkX3JlYWRzOwkvKiBzaG91bGQgTkVWRVIhIGhhcHBlbiAqLworCXU2NCBmYWlsZWRfd3JpdGVzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KKwl1NjQgaW52YWxpZF9pbzsJCS8qIG5vbi1wYWdlLWFsaWduZWQgSS9PIHJlcXVlc3RzICovCisJdTY0IG5vdGlmeV9mcmVlOwkvKiBuby4gb2Ygc3dhcCBzbG90IGZyZWUgbm90aWZpY2F0aW9ucyAqLworCXUzMiBwYWdlc196ZXJvOwkJLyogbm8uIG9mIHplcm8gZmlsbGVkIHBhZ2VzICovCisJdTMyIHBhZ2VzX3N0b3JlZDsJLyogbm8uIG9mIHBhZ2VzIGN1cnJlbnRseSBzdG9yZWQgKi8KKwl1MzIgZ29vZF9jb21wcmVzczsJLyogJSBvZiBwYWdlcyB3aXRoIGNvbXByZXNzaW9uIHJhdGlvPD01MCUgKi8KKwl1MzIgcGFnZXNfZXhwYW5kOwkvKiAlIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzICovCisjZW5kaWYKK307CisKK3N0cnVjdCB6cmFtIHsKKwlzdHJ1Y3QgeHZfcG9vbCAqbWVtX3Bvb2w7CisJdm9pZCAqY29tcHJlc3Nfd29ya21lbTsKKwl2b2lkICpjb21wcmVzc19idWZmZXI7CisJc3RydWN0IHRhYmxlICp0YWJsZTsKKwlzcGlubG9ja190IHN0YXQ2NF9sb2NrOwkvKiBwcm90ZWN0IDY0LWJpdCBzdGF0cyAqLworCXN0cnVjdCBtdXRleCBsb2NrOwkvKiBwcm90ZWN0IGNvbXByZXNzaW9uIGJ1ZmZlcnMgYWdhaW5zdAorCQkJCSAqIGNvbmN1cnJlbnQgd3JpdGVzICovCisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOworCXN0cnVjdCBnZW5kaXNrICpkaXNrOworCWludCBpbml0X2RvbmU7CisJLyoKKwkgKiBUaGlzIGlzIHRoZSBsaW1pdCBvbiBhbW91bnQgb2YgKnVuY29tcHJlc3NlZCogd29ydGggb2YgZGF0YQorCSAqIHdlIGNhbiBzdG9yZSBpbiBhIGRpc2suCisJICovCisJc2l6ZV90IGRpc2tzaXplOwkvKiBieXRlcyAqLworCisJc3RydWN0IHpyYW1fc3RhdHMgc3RhdHM7Cit9OworCisvKi0tICovCisKKy8qIERlYnVnZ2luZyBhbmQgU3RhdHMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19aUkFNX1NUQVRTKQorc3RhdGljIHZvaWQgenJhbV9zdGF0X2luYyh1MzIgKnYpCit7CisJKnYgPSAqdiArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHpyYW1fc3RhdF9kZWModTMyICp2KQoreworCSp2ID0gKnYgLSAxOworfQorCitzdGF0aWMgdm9pZCB6cmFtX3N0YXQ2NF9pbmMoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCAqdikKK3sKKwlzcGluX2xvY2soJnpyYW0tPnN0YXQ2NF9sb2NrKTsKKwkqdiA9ICp2ICsgMTsKKwlzcGluX3VubG9jaygmenJhbS0+c3RhdDY0X2xvY2spOworfQorCitzdGF0aWMgdTY0IHpyYW1fc3RhdDY0X3JlYWQoc3RydWN0IHpyYW0gKnpyYW0sIHU2NCAqdikKK3sKKwl1NjQgdmFsOworCisJc3Bpbl9sb2NrKCZ6cmFtLT5zdGF0NjRfbG9jayk7CisJdmFsID0gKnY7CisJc3Bpbl91bmxvY2soJnpyYW0tPnN0YXQ2NF9sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisjZWxzZQorI2RlZmluZSB6cmFtX3N0YXRfaW5jKHYpCisjZGVmaW5lIHpyYW1fc3RhdF9kZWModikKKyNkZWZpbmUgenJhbV9zdGF0NjRfaW5jKHIsIHYpCisjZGVmaW5lIHpyYW1fc3RhdDY0X3JlYWQociwgdikKKyNlbmRpZiAvKiBDT05GSUdfWlJBTV9TVEFUUyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1faW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1faW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQxNWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9pb2N0bC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCisgKgorICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCisgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiAzLWNsYXVzZSBCU0QgTGljZW5zZQorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wCisgKgorICogUHJvamVjdCBob21lOiBodHRwOi8vY29tcGNhY2hlLmdvb2dsZWNvZGUuY29tCisgKi8KKworI2lmbmRlZiBfWlJBTV9JT0NUTF9IXworI2RlZmluZSBfWlJBTV9JT0NUTF9IXworCitzdHJ1Y3QgenJhbV9pb2N0bF9zdGF0cyB7CisJdTY0IGRpc2tzaXplOwkJLyogZGlza3NpemUgaW4gYnl0ZXMgKHVzZXIgc3BlY2lmaWVzIGluIEtCKSAqLworCXU2NCBudW1fcmVhZHM7CQkvKiBmYWlsZWQgKyBzdWNjZXNzZnVsICovCisJdTY0IG51bV93cml0ZXM7CQkvKiAtLWRvLS0gKi8KKwl1NjQgZmFpbGVkX3JlYWRzOwkvKiBzaG91bGQgTkVWRVIhIGhhcHBlbiAqLworCXU2NCBmYWlsZWRfd3JpdGVzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KKwl1NjQgaW52YWxpZF9pbzsJCS8qIG5vbi1wYWdlLWFsaWduZWQgSS9PIHJlcXVlc3RzICovCisJdTY0IG5vdGlmeV9mcmVlOwkvKiBuby4gb2Ygc3dhcCBzbG90IGZyZWUgbm90aWZpY2F0aW9ucyAqLworCXUzMiBwYWdlc196ZXJvOwkJLyogbm8uIG9mIHplcm8gZmlsbGVkIHBhZ2VzICovCisJdTMyIGdvb2RfY29tcHJlc3NfcGN0OwkvKiBuby4gb2YgcGFnZXMgd2l0aCBjb21wcmVzc2lvbiByYXRpbzw9NTAlICovCisJdTMyIHBhZ2VzX2V4cGFuZF9wY3Q7CS8qIG5vLiBvZiBpbmNvbXByZXNzaWJsZSBwYWdlcyAqLworCXUzMiBwYWdlc19zdG9yZWQ7CisJdTMyIHBhZ2VzX3VzZWQ7CisJdTY0IG9yaWdfZGF0YV9zaXplOworCXU2NCBjb21wcl9kYXRhX3NpemU7CisJdTY0IG1lbV91c2VkX3RvdGFsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKKyNkZWZpbmUgWlJBTUlPX1NFVF9ESVNLU0laRV9LQglfSU9XKCd6JywgMCwgc2l6ZV90KQorI2RlZmluZSBaUkFNSU9fR0VUX1NUQVRTCV9JT1IoJ3onLCAxLCBzdHJ1Y3QgenJhbV9pb2N0bF9zdGF0cykKKyNkZWZpbmUgWlJBTUlPX0lOSVQJCV9JTygneicsIDIpCisjZGVmaW5lIFpSQU1JT19SRVNFVAkJX0lPKCd6JywgMykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMgYi9kcml2ZXJzL3RlbGVwaG9ueS9peGpfcGNtY2lhLmMKaW5kZXggOTljYjIyNC4uYTE5MDBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy90ZWxlcGhvbnkvaXhqX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvdGVsZXBob255L2l4al9wY21jaWEuYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KQEAgLTMzLDkgKzMyLDggQEAKIHsKIAlkZXZfZGJnKCZwX2Rldi0+ZGV2LCAiaXhqX2F0dGFjaCgpXG4iKTsKIAkvKiBDcmVhdGUgbmV3IGl4aiBkZXZpY2UgKi8KLQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uQXR0cmlidXRlczIgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQlwX2Rldi0+aW8uSU9BZGRyTGluZXMgPSAzOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgfD0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPnJlc291cmNlWzFdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKIAlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CiAJcF9kZXYtPnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhqX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghcF9kZXYtPnByaXYpIHsKQEAgLTEyMSwxMyArMTE5LDE0IEBACiB7CiAJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC0+aW8ubndpbiA+IDApKSB7CiAJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC0+aW87Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPmlvX2xpbmVzID0gMzsKIAkJaWYgKGlvLT5ud2luID09IDIpIHsKLQkJCXBfZGV2LT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7Ci0JCQlwX2Rldi0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQlwX2Rldi0+cmVzb3VyY2VbMV0tPnN0YXJ0ID0gaW8tPndpblsxXS5iYXNlOworCQkJcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSBpby0+d2luWzFdLmxlbjsKIAkJfQotCQlpZiAoIXBjbWNpYV9yZXF1ZXN0X2lvKHBfZGV2LCAmcF9kZXYtPmlvKSkKKwkJaWYgKCFwY21jaWFfcmVxdWVzdF9pbyhwX2RldikpCiAJCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNTEsNyArMTUwLDggQEAKIAkvKgogIAkgKglSZWdpc3RlciB0aGUgY2FyZCB3aXRoIHRoZSBjb3JlLgogCSAqLwotCWogPSBpeGpfcGNtY2lhX3Byb2JlKGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aW8uQmFzZVBvcnQxICsgMHgxMCk7CisJaiA9IGl4al9wY21jaWFfcHJvYmUobGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgICBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQgKyAweDEwKTsKIAogCWluZm8tPm5kZXYgPSAxOwogCWl4al9nZXRfc2VyaWFsKGxpbmssIGopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX2NpZi5jIGIvZHJpdmVycy91aW8vdWlvX2NpZi5jCmluZGV4IDM3MWY4N2YuLmE4ZWEyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19jaWYuYworKysgYi9kcml2ZXJzL3Vpby91aW9fY2lmLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAl9CiAJaW5mby0+dmVyc2lvbiA9ICIwLjAuMSI7CiAJaW5mby0+aXJxID0gZGV2LT5pcnE7Ci0JaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEOworCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCWluZm8tPmhhbmRsZXIgPSBoaWxzY2hlcl9oYW5kbGVyOwogCiAJaWYgKHVpb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+ZGV2LCBpbmZvKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKaW5kZXggNjFlNTY5ZC4uNzE3NGQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKQEAgLTE1NSw3ICsxNTUsNiBAQAogCSAqIEludGVycnVwdCBzaGFyaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAJICovCiAKLQl1aW9pbmZvLT5pcnFfZmxhZ3MgfD0gSVJRRl9ESVNBQkxFRDsKIAl1aW9pbmZvLT5oYW5kbGVyID0gdWlvX3BkcnZfZ2VuaXJxX2hhbmRsZXI7CiAJdWlvaW5mby0+aXJxY29udHJvbCA9IHVpb19wZHJ2X2dlbmlycV9pcnFjb250cm9sOwogCXVpb2luZm8tPm9wZW4gPSB1aW9fcGRydl9nZW5pcnFfb3BlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMgYi9kcml2ZXJzL3Vpby91aW9fc2VyY29zMy5jCmluZGV4IDNkNDYxY2QuLmExODdmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpb19zZXJjb3MzLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3NlcmNvczMuYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAJaW5mby0+bmFtZSA9ICJTZXJjb3NfSUlJX1BDSSI7CiAJaW5mby0+dmVyc2lvbiA9ICIwLjAuMSI7CiAJaW5mby0+aXJxID0gZGV2LT5pcnE7Ci0JaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEOworCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwogCWluZm8tPmhhbmRsZXIgPSBzZXJjb3MzX2hhbmRsZXI7CiAJaW5mby0+aXJxY29udHJvbCA9IHNlcmNvczNfaXJxY29udHJvbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCA4MGI0MDA4Li4yMzlmMDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtNDEsNyArNDEsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUwpCSs9IHNlcmlhbC8KIAogb2JqLSQoQ09ORklHX1VTQikJCSs9IG1pc2MvCi1vYmoteQkJCQkrPSBlYXJseS8KK29iai0kKENPTkZJR19FQVJMWV9QUklOVEtfREJHUCkJKz0gZWFybHkvCiAKIG9iai0kKENPTkZJR19VU0JfQVRNKQkJKz0gYXRtLwogb2JqLSQoQ09ORklHX1VTQl9TUEVFRFRPVUNIKQkrPSBhdG0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKaW5kZXggMTAxZmZjOS4uNTkzZmM1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYwpAQCAtNTY0LDcgKzU2NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgY3hhY3J1X3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsCi0JCQkJIGludCogYWN0dWFsX2xlbmd0aCkKKwkJCQkgaW50ICphY3R1YWxfbGVuZ3RoKQogewogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCkBAIC05NTIsNyArOTUyLDcgQEAKIAkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihhZGRyKSwgKF9fbGUzMiAqKShidWYgKyBvZmZiKSk7CiAJCW9mZmIgKz0gNDsKIAkJYWRkciArPSBsOwotCQlpZihsKQorCQlpZiAobCkKIAkJCW1lbWNweShidWYgKyBvZmZiLCBkYXRhICsgb2ZmZCwgbCk7CiAJCWlmIChsIDwgc3RyaWRlKQogCQkJbWVtc2V0KGJ1ZiArIG9mZmIgKyBsLCAwLCBzdHJpZGUgLSBsKTsKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCQkJfQogCQkJb2ZmYiA9IDA7CiAJCX0KLQl9IHdoaWxlKG9mZmQgPCBzaXplKTsKKwl9IHdoaWxlIChvZmZkIDwgc2l6ZSk7CiAJZGJnKCJzZW50IGZ3ICUjeCIsIGZ3KTsKIAogCXJldCA9IDA7CkBAIC0xMDQzLDggKzEwNDMsNyBAQAogCWlmIChpbnN0YW5jZS0+bW9kZW1fdHlwZS0+Ym9vdF9yb21fcGF0Y2gpIHsKIAkJdmFsID0gY3B1X3RvX2xlMzIoQlJfQUREUik7CiAJCXJldCA9IGN4YWNydV9mdyh1c2JfZGV2LCBGV19XUklURV9NRU0sIDB4MiwgMHgwLCBCUl9TVEFDS19BRERSLCAodTggKikgJnZhbCwgNCk7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXJldCA9IGN4YWNydV9mdyh1c2JfZGV2LCBGV19HT1RPX01FTSwgMHgwLCAweDAsIEZXX0FERFIsIE5VTEwsIDApOwogCX0KIAlpZiAocmV0KSB7CkBAIC0xMDY4LDcgKzEwNjcsNyBAQAogfQogCiBzdGF0aWMgaW50IGN4YWNydV9maW5kX2Zpcm13YXJlKHN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UsCi0JCQkJY2hhciogcGhhc2UsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3X3ApCisJCQkJY2hhciAqcGhhc2UsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3X3ApCiB7CiAJc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0gPSBpbnN0YW5jZS0+dXNiYXRtOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1c2JhdG0tPnVzYl9pbnRmLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9hdG0vc3BlZWR0Y2guYyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCmluZGV4IDgwZjk2MTcuLjQ3MTZlNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS9zcGVlZHRjaC5jCkBAIC03NTMsMTEgKzc1MywxMyBAQAogCS5pZF90YWJsZQk9IHNwZWVkdGNoX3VzYl9pZHMKIH07CiAKLXN0YXRpYyB2b2lkIHNwZWVkdGNoX3JlbGVhc2VfaW50ZXJmYWNlcyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgaW50IG51bV9pbnRlcmZhY2VzKSB7CitzdGF0aWMgdm9pZCBzcGVlZHRjaF9yZWxlYXNlX2ludGVyZmFjZXMoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCisJCQkJCWludCBudW1faW50ZXJmYWNlcykKK3sKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqY3VyX2ludGY7CiAJaW50IGk7CiAKLQlmb3IoaSA9IDA7IGkgPCBudW1faW50ZXJmYWNlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZXJmYWNlczsgaSsrKQogCQlpZiAoKGN1cl9pbnRmID0gdXNiX2lmbnVtX3RvX2lmKHVzYl9kZXYsIGkpKSkgewogCQkJdXNiX3NldF9pbnRmZGF0YShjdXJfaW50ZiwgTlVMTCk7CiAJCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZzcGVlZHRjaF91c2JfZHJpdmVyLCBjdXJfaW50Zik7CkBAIC03OTIsNyArNzk0LDcgQEAKIAogCS8qIGNsYWltIGFsbCBpbnRlcmZhY2VzICovCiAKLQlmb3IgKGk9MDsgaSA8IG51bV9pbnRlcmZhY2VzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVyZmFjZXM7IGkrKykgewogCQljdXJfaW50ZiA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCBpKTsKIAogCQlpZiAoKGkgIT0gaWZudW0pICYmIGN1cl9pbnRmKSB7CkBAIC04NDIsNyArODQ0LDcgQEAKIAogCQl1c2VfaXNvYyA9IDA7IC8qIGZhbGwgYmFjayB0byBidWxrIGlmIGVuZHBvaW50IG5vdCBmb3VuZCAqLwogCi0JCWZvciAoaT0wOyBpPGRlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgewogCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludF9kZXNjID0gJmRlc2MtPmVuZHBvaW50W2ldLmRlc2M7CiAKIAkJCWlmICgoZW5kcG9pbnRfZGVzYy0+YkVuZHBvaW50QWRkcmVzcyA9PSB0YXJnZXRfYWRkcmVzcykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCmluZGV4IGViYWU5NDQuLjViM2Y1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtMjQzNiw3ICsyNDM3LDYgQEAKIAogLyogUmV0cmlldmUgdGhlIGRldmljZSBFbmQgU3lzdGVtIElkZW50aWZpZXIgKE1BQykgKi8KIAotI2RlZmluZSBodG9pKHgpIChpc2RpZ2l0KHgpID8geC0nMCcgOiB0b3VwcGVyKHgpLSdBJysxMCkKIHN0YXRpYyBpbnQgdWVhX2dldGVzaShzdHJ1Y3QgdWVhX3NvZnRjICpzYywgdV9jaGFyICogZXNpKQogewogCXVuc2lnbmVkIGNoYXIgbWFjX3N0clsyICogRVRIX0FMRU4gKyAxXTsKQEAgLTI0NDcsNyArMjQ0Nyw4IEBACiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCi0JCWVzaVtpXSA9IGh0b2kobWFjX3N0clsyICogaV0pICogMTYgKyBodG9pKG1hY19zdHJbMiAqIGkgKyAxXSk7CisJCWVzaVtpXSA9IGhleF90b19iaW4obWFjX3N0clsyICogaV0pICogMTYgKworCQkJIGhleF90b19iaW4obWFjX3N0clsyICogaSArIDFdKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCmluZGV4IDliNTNlOGQuLjA1YmY1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKQEAgLTg0LDggKzg0LDggQEAKIAogI2lmZGVmIFZFUkJPU0VfREVCVUcKIHN0YXRpYyBpbnQgdXNiYXRtX3ByaW50X3BhY2tldChjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKLSNkZWZpbmUgUEFDS0VUREVCVUcoYXJnLi4uKQl1c2JhdG1fcHJpbnRfcGFja2V0IChhcmcpCi0jZGVmaW5lIHZkYmcoYXJnLi4uKQkJZGJnIChhcmcpCisjZGVmaW5lIFBBQ0tFVERFQlVHKGFyZy4uLikJdXNiYXRtX3ByaW50X3BhY2tldChhcmcpCisjZGVmaW5lIHZkYmcoYXJnLi4uKQkJZGJnKGFyZykKICNlbHNlCiAjZGVmaW5lIFBBQ0tFVERFQlVHKGFyZy4uLikKICNkZWZpbmUgdmRiZyhhcmcuLi4pCkBAIC0yNzMsOCArMjczLDcgQEAKIAogCWlmICh1bmxpa2VseShzdGF0dXMpICYmCiAJCQkoIShjaGFubmVsLT51c2JhdG0tPmZsYWdzICYgVURTTF9JR05PUkVfRUlMU0VRKSB8fAotCQkJIHN0YXR1cyAhPSAtRUlMU0VRICkpCi0JeworCQkJIHN0YXR1cyAhPSAtRUlMU0VRKSkgewogCQlpZiAoc3RhdHVzID09IC1FU0hVVERPV04pCiAJCQlyZXR1cm47CiAKQEAgLTQ5NCw3ICs0OTMsNyBAQAogCQlwdHIgKz0gZGF0YV9sZW47CiAJCV9fc2tiX3B1bGwoc2tiLCBkYXRhX2xlbik7CiAKLQkJaWYoIWxlZnQpCisJCWlmICghbGVmdCkKIAkJCWNvbnRpbnVlOwogCiAJCW1lbXNldChwdHIsIDAsIGxlZnQpOwpAQCAtNTA2LDcgKzUwNSw3IEBACiAJCQl0cmFpbGVyWzJdID0gY3RybC0+bGVuID4+IDg7CiAJCQl0cmFpbGVyWzNdID0gY3RybC0+bGVuOwogCi0JCQljdHJsLT5jcmMgPSB+IGNyYzMyX2JlKGN0cmwtPmNyYywgcHRyLCBsZWZ0IC0gNCk7CisJCQljdHJsLT5jcmMgPSB+Y3JjMzJfYmUoY3RybC0+Y3JjLCBwdHIsIGxlZnQgLSA0KTsKIAogCQkJdHJhaWxlcls0XSA9IGN0cmwtPmNyYyA+PiAyNDsKIAkJCXRyYWlsZXJbNV0gPSBjdHJsLT5jcmMgPj4gMTY7CkBAIC01MTYsOCArNTE1LDcgQEAKIAkJCXRhcmdldFszXSB8PSAweDI7CS8qIGFkanVzdCBQVEkgKi8KIAogCQkJY3RybC0+bGVuID0gMDsJCS8qIHRhZyB0aGlzIHNrYiBmaW5pc2hlZCAqLwotCQl9Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQljdHJsLT5jcmMgPSBjcmMzMl9iZShjdHJsLT5jcmMsIHB0ciwgbGVmdCk7CiAJfQogCkBAIC0xMTQ2LDcgKzExNDQsNyBAQAogCWluc3RhbmNlLT50eF9jaGFubmVsLmVuZHBvaW50ID0gdXNiX3NuZGJ1bGtwaXBlKHVzYl9kZXYsIGRyaXZlci0+YnVsa19vdXQpOwogCiAJLyogdHggYnVmZmVyIHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG11bHRpcGxlIG9mIHRoZSBzdHJpZGUgKi8KLQlpbnN0YW5jZS0+dHhfY2hhbm5lbC5idWZfc2l6ZSA9IG1heCAoaW5zdGFuY2UtPnR4X2NoYW5uZWwuc3RyaWRlLAorCWluc3RhbmNlLT50eF9jaGFubmVsLmJ1Zl9zaXplID0gbWF4KGluc3RhbmNlLT50eF9jaGFubmVsLnN0cmlkZSwKIAkJCXNuZF9idWZfYnl0ZXMgLSAoc25kX2J1Zl9ieXRlcyAlIGluc3RhbmNlLT50eF9jaGFubmVsLnN0cmlkZSkpOwogCiAJLyogcnggYnVmZmVyIHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIG11bHRpcGxlIG9mIHRoZSBlbmRwb2ludCBtYXhwYWNrZXQgKi8KQEAgLTExNTksNyArMTE1Nyw3IEBACiAJCWdvdG8gZmFpbF91bmJpbmQ7CiAJfQogCi0JbnVtX3BhY2tldHMgPSBtYXggKDFVLCAocmN2X2J1Zl9ieXRlcyArIG1heHBhY2tldCAvIDIpIC8gbWF4cGFja2V0KTsgLyogcm91bmQgKi8KKwludW1fcGFja2V0cyA9IG1heCgxVSwgKHJjdl9idWZfYnl0ZXMgKyBtYXhwYWNrZXQgLyAyKSAvIG1heHBhY2tldCk7IC8qIHJvdW5kICovCiAKIAlpZiAobnVtX3BhY2tldHMgKiBtYXhwYWNrZXQgPiBVRFNMX01BWF9CVUZfU0laRSkKIAkJbnVtX3BhY2tldHMtLTsKQEAgLTEyNjIsNyArMTI2MCw3IEBACiAJCXVzYl9mcmVlX3VyYihpbnN0YW5jZS0+dXJic1tpXSk7CiAJfQogCi0Ja2ZyZWUgKGluc3RhbmNlKTsKKwlrZnJlZShpbnN0YW5jZSk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xMzkwLDkgKzEzODgsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47KSB7CiAJCWJ1ZmZlclswXSA9ICdcMCc7CiAJCXNwcmludGYoYnVmZmVyLCAiJS4zZCA6IiwgaSk7Ci0JCWZvciAoaiA9IDA7IChqIDwgMTYpICYmIChpIDwgbGVuKTsgaisrLCBpKyspIHsKKwkJZm9yIChqID0gMDsgKGogPCAxNikgJiYgKGkgPCBsZW4pOyBqKyssIGkrKykKIAkJCXNwcmludGYoYnVmZmVyLCAiJXMgJTIuMngiLCBidWZmZXIsIGRhdGFbaV0pOwotCQl9CiAJCWRiZygiJXMiLCBidWZmZXIpOwogCX0KIAlyZXR1cm4gaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaCBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAppbmRleCAwODYzZjg1Li41ZmM0ODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCkBAIC00OCw3ICs0OCw3IEBACiAJCQlkZXZfd2FybigmKGluc3RhbmNlKS0+dXNiX2ludGYtPmRldiwJCVwKIAkJCQkgImZhaWxlZCBhc3NlcnRpb24gJyVzJyBhdCBsaW5lICVkIiwJXAogCQkJCSBfX3N0cmluZ2lmeSh4KSwgX19MSU5FX18pOwkJXAotCX0gd2hpbGUoMCkKKwl9IHdoaWxlICgwKQogI2VuZGlmCiAKICNkZWZpbmUgdXNiX2VycihpbnN0YW5jZSwgZm9ybWF0LCBhcmcuLi4pCVwKQEAgLTU5LDcgKzU5LDcgQEAKIAlkZXZfd2FybigmKGluc3RhbmNlKS0+dXNiX2ludGYtPmRldiAsIGZvcm1hdCAsICMjIGFyZykKICNpZmRlZiBERUJVRwogI2RlZmluZSB1c2JfZGJnKGluc3RhbmNlLCBmb3JtYXQsIGFyZy4uLikJXAotICAgICAgICBkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCAmKGluc3RhbmNlKS0+dXNiX2ludGYtPmRldiAsIGZvcm1hdCAsICMjIGFyZykKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCAmKGluc3RhbmNlKS0+dXNiX2ludGYtPmRldiAsIGZvcm1hdCAsICMjIGFyZykKICNlbHNlCiAjZGVmaW5lIHVzYl9kYmcoaW5zdGFuY2UsIGZvcm1hdCwgYXJnLi4uKQlcCiAJZG8ge30gd2hpbGUgKDApCkBAIC0xMDQsMjEgKzEwNCwyMSBAQAogLyoKICogIEFzc3VtaW5nIGFsbCBtZXRob2RzIGV4aXN0IGFuZCBzdWNjZWVkLCB0aGV5IGFyZSBjYWxsZWQgaW4gdGhpcyBvcmRlcjoKICoKLSogIAliaW5kLCBoZWF2eV9pbml0LCBhdG1fc3RhcnQsIC4uLiwgYXRtX3N0b3AsIHVuYmluZAorKgliaW5kLCBoZWF2eV9pbml0LCBhdG1fc3RhcnQsIC4uLiwgYXRtX3N0b3AsIHVuYmluZAogKi8KIAogc3RydWN0IHVzYmF0bV9kcml2ZXIgewogCWNvbnN0IGNoYXIgKmRyaXZlcl9uYW1lOwogCiAJLyogaW5pdCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgb3IgY2F1c2UgcHJvYmUoKSBmYWlsdXJlICovCi0gICAgICAgIGludCAoKmJpbmQpIChzdHJ1Y3QgdXNiYXRtX2RhdGEgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwKKwlpbnQgKCpiaW5kKSAoc3RydWN0IHVzYmF0bV9kYXRhICosIHN0cnVjdCB1c2JfaW50ZXJmYWNlICosCiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKIAogCS8qIGFkZGl0aW9uYWwgZGV2aWNlIGluaXRpYWxpemF0aW9uIHRoYXQgaXMgdG9vIHNsb3cgdG8gYmUgZG9uZSBpbiBwcm9iZSgpICovCi0gICAgICAgIGludCAoKmhlYXZ5X2luaXQpIChzdHJ1Y3QgdXNiYXRtX2RhdGEgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisJaW50ICgqaGVhdnlfaW5pdCkgKHN0cnVjdCB1c2JhdG1fZGF0YSAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKIAogCS8qIGNsZWFudXAgZGV2aWNlIC4uLiBjYW4gc2xlZXAsIGJ1dCBjYW4ndCBmYWlsICovCi0gICAgICAgIHZvaWQgKCp1bmJpbmQpIChzdHJ1Y3QgdXNiYXRtX2RhdGEgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CisJdm9pZCAoKnVuYmluZCkgKHN0cnVjdCB1c2JhdG1fZGF0YSAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKIAogCS8qIGluaXQgQVRNIGRldmljZSAuLi4gY2FuIHNsZWVwLCBvciBjYXVzZSBBVE0gaW5pdGlhbGl6YXRpb24gZmFpbHVyZSAqLwogCWludCAoKmF0bV9zdGFydCkgKHN0cnVjdCB1c2JhdG1fZGF0YSAqLCBzdHJ1Y3QgYXRtX2RldiAqKTsKQEAgLTEyNiw5ICsxMjYsOSBAQAogCS8qIGNsZWFudXAgQVRNIGRldmljZSAuLi4gY2FuIHNsZWVwLCBidXQgY2FuJ3QgZmFpbCAqLwogCXZvaWQgKCphdG1fc3RvcCkgKHN0cnVjdCB1c2JhdG1fZGF0YSAqLCBzdHJ1Y3QgYXRtX2RldiAqKTsKIAotICAgICAgICBpbnQgYnVsa19pbjsJLyogYnVsayByeCBlbmRwb2ludCAqLwotICAgICAgICBpbnQgaXNvY19pbjsJLyogaXNvY2hyb25vdXMgcnggZW5kcG9pbnQgKi8KLSAgICAgICAgaW50IGJ1bGtfb3V0OwkvKiBidWxrIHR4IGVuZHBvaW50ICovCisJaW50IGJ1bGtfaW47CS8qIGJ1bGsgcnggZW5kcG9pbnQgKi8KKwlpbnQgaXNvY19pbjsJLyogaXNvY2hyb25vdXMgcnggZW5kcG9pbnQgKi8KKwlpbnQgYnVsa19vdXQ7CS8qIGJ1bGsgdHggZW5kcG9pbnQgKi8KIAogCXVuc2lnbmVkIHJ4X3BhZGRpbmc7CiAJdW5zaWduZWQgdHhfcGFkZGluZzsKQEAgLTE1Niw3ICsxNTYsNyBAQAogc3RydWN0IHVzYmF0bV9kYXRhIHsKIAkvKioqKioqKioqKioqKioqKioqCiAJKiAgcHVibGljIGZpZWxkcyAgKgotICAgICAgICAqKioqKioqKioqKioqKioqKiovCisJKioqKioqKioqKioqKioqKioqLwogCiAJLyogbWluaSBkcml2ZXIgKi8KIAlzdHJ1Y3QgdXNiYXRtX2RyaXZlciAqZHJpdmVyOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkqICBwcml2YXRlIGZpZWxkcyAtIGRvIG5vdCB1c2UgICoKLSAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKIAlzdHJ1Y3QgbXV0ZXggc2VyaWFsaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS94dXNiYXRtLmMKaW5kZXggMTdkMTY3Yi4uNDhlZTBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3h1c2JhdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0veHVzYmF0bS5jCkBAIC00OSwxMyArNDksMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB4dXNiYXRtX3VzYl9pZHNbWFVTQkFUTV9EUklWRVJTX01BWCArIDFdOwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHh1c2JhdG1fdXNiX2RyaXZlcjsKIAotc3RhdGljIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp4dXNiYXRtX2ZpbmRfaW50ZiAoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIGludCBhbHRzZXR0aW5nLCB1OCBlcCkKK3N0YXRpYyBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqeHVzYmF0bV9maW5kX2ludGYoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIGludCBhbHRzZXR0aW5nLCB1OCBlcCkKIHsKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAJaW50IGksIGo7CiAKLQlmb3IoaSA9IDA7IGkgPCB1c2JfZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspCiAJCWlmICgoaW50ZiA9IHVzYl9kZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldKSAmJiAoYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGludGYsIGFsdHNldHRpbmcpKSkKIAkJCWZvciAoaiA9IDA7IGogPCBhbHQtPmRlc2MuYk51bUVuZHBvaW50czsgaisrKQogCQkJCWlmIChhbHQtPmVuZHBvaW50W2pdLmRlc2MuYkVuZHBvaW50QWRkcmVzcyA9PSBlcCkKQEAgLTYzLDcgKzYzLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCB4dXNiYXRtX2NhcHR1cmVfaW50ZiAoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0sIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LAorc3RhdGljIGludCB4dXNiYXRtX2NhcHR1cmVfaW50ZihzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bSwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsCiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgYWx0c2V0dGluZywgaW50IGNsYWltKQogewogCWludCBpZm51bSA9IGludGYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKQEAgLTgwLDcgKzgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeHVzYmF0bV9yZWxlYXNlX2ludGYgKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgaW50IGNsYWltZWQpCitzdGF0aWMgdm9pZCB4dXNiYXRtX3JlbGVhc2VfaW50ZihzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGludCBjbGFpbWVkKQogewogCWlmIChjbGFpbWVkKSB7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCXVzYl9kYmcodXNiYXRtLCAiJXMgZW50ZXJlZFxuIiwgX19mdW5jX18pOwogCi0JZm9yKGkgPSAwOyBpIDwgdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdXNiX2Rldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmN1cl9pbnRmID0gdXNiX2Rldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CiAKIAkJaWYgKGN1cl9pbnRmICYmICh1c2JfZ2V0X2ludGZkYXRhKGN1cl9pbnRmKSA9PSB1c2JhdG0pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWhjZC5jIGIvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1oY2QuYwppbmRleCBhMjJiODg3Li5kM2UxMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtaGNkLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCWlmICh1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKQogCQlyZXR1cm47CiAKLQlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkKKwlpZiAoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpCiAJCXJldHVybjsKIAogCS8qIEhhbmRsZSBTdGFydCBvZiBmcmFtZSBldmVudHMgKi8KQEAgLTI4Miw3ICsyODIsNyBAQAogewogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7Ci0JaGNkLT5wb2xsX3JoID0gMTsKKwlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IDg5ZDI2MGQuLjE4MzNiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTYzNiwxOSArNjM2LDEzIEBACiAKIHN0YXRpYyBpbnQgYWNtX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKLXN0YXRpYyB2b2lkIGFjbV9wb3J0X2Rvd24oc3RydWN0IGFjbSAqYWNtLCBpbnQgZHJhaW4pCitzdGF0aWMgdm9pZCBhY21fcG9ydF9kb3duKHN0cnVjdCBhY20gKmFjbSkKIHsKIAlpbnQgaSwgbnIgPSBhY20tPnJ4X2J1ZmxpbWl0OwogCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOwogCWlmIChhY20tPmRldikgewogCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoYWNtLT5jb250cm9sKTsKIAkJYWNtX3NldF9jb250cm9sKGFjbSwgYWNtLT5jdHJsb3V0ID0gMCk7Ci0JCS8qIHRyeSBsZXR0aW5nIHRoZSBsYXN0IHdyaXRlcyBkcmFpbiBuYXR1cmFsbHkgKi8KLQkJaWYgKGRyYWluKSB7Ci0JCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhY20tPmRyYWluX3dhaXQsCi0JCQkJKEFDTV9OVyA9PSBhY21fd2JfaXNfYXZhaWwoYWNtKSkgfHwgIWFjbS0+ZGV2LAotCQkJCQlBQ01fQ0xPU0VfVElNRU9VVCAqIEhaKTsKLQkJfQogCQl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKIAkJZm9yIChpID0gMDsgaSA8IEFDTV9OVzsgaSsrKQogCQkJdXNiX2tpbGxfdXJiKGFjbS0+d2JbaV0udXJiKTsKQEAgLTY2NCw3ICs2NTgsNyBAQAogewogCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJdHR5X3BvcnRfaGFuZ3VwKCZhY20tPnBvcnQpOwotCWFjbV9wb3J0X2Rvd24oYWNtLCAwKTsKKwlhY21fcG9ydF9kb3duKGFjbSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjbV90dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCkBAIC02ODUsNyArNjc5LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIAkJcmV0dXJuOwogCX0KLQlhY21fcG9ydF9kb3duKGFjbSwgMCk7CisJYWNtX3BvcnRfZG93bihhY20pOwogCXR0eV9wb3J0X2Nsb3NlX2VuZCgmYWNtLT5wb3J0LCB0dHkpOwogCXR0eV9wb3J0X3R0eV9zZXQoJmFjbS0+cG9ydCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwppbmRleCA4NGY5ZTUyLi5lMzI1MTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICogLT5sb2NrIGxvY2tzIHdoYXQgaW50ZXJydXB0IGFjY2Vzc2VzLgogICovCiBzdHJ1Y3QgdXNibHAgewotCXN0cnVjdCB1c2JfZGV2aWNlIAkqZGV2OwkJCS8qIFVTQiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZQkqZGV2OwkJCS8qIFVTQiBkZXZpY2UgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXdtdXQ7CiAJc3RydWN0IG11dGV4CQltdXQ7CiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIGxvY2tzIHJjb21wbGV0ZSwgd2NvbXBsZXRlICovCkBAIC0xNjksNyArMTY5LDggQEAKIH07CiAKICNpZmRlZiBERUJVRwotc3RhdGljIHZvaWQgdXNibHBfZHVtcChzdHJ1Y3QgdXNibHAgKnVzYmxwKSB7CitzdGF0aWMgdm9pZCB1c2JscF9kdW1wKHN0cnVjdCB1c2JscCAqdXNibHApCit7CiAJaW50IHA7CiAKIAlkYmcoInVzYmxwPTB4JXAiLCB1c2JscCk7CkBAIC0yMTYsOCArMjE3LDggQEAKIAl7IDB4MDNmMCwgMHgwMzA0LCBVU0JMUF9RVUlSS19CSURJUiB9LCAvKiBIUCBEZXNrSmV0IDgxMEMvODEyQyAqLwogCXsgMHgwM2YwLCAweDA0MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODMwQyAqLwogCXsgMHgwM2YwLCAweDA1MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODg1QyAqLwotCXsgMHgwM2YwLCAweDA2MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODQwQyAqLyAgIAotCXsgMHgwM2YwLCAweDA4MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODE2QyAqLyAgIAorCXsgMHgwM2YwLCAweDA2MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODQwQyAqLworCXsgMHgwM2YwLCAweDA4MDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tKZXQgODE2QyAqLwogCXsgMHgwM2YwLCAweDExMDQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIEhQIERlc2tqZXQgOTU5QyAqLwogCXsgMHgwNDA5LCAweGVmYmUsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTkwMCAoSFAgT0VNKSAqLwogCXsgMHgwNDA5LCAweGJlZjQsIFVTQkxQX1FVSVJLX0JJRElSIH0sIC8qIE5FQyBQaWN0eTc2MCAoSFAgT0VNKSAqLwpAQCAtMjU0LDkgKzI1NSw4IEBACiAJLyogSGlnaCBieXRlIGhhcyB0aGUgaW50ZXJmYWNlIGluZGV4LgogCSAgIExvdyBieXRlIGhhcyB0aGUgYWx0ZXJuYXRlIHNldHRpbmcuCiAJICovCi0JaWYgKChyZXF1ZXN0ID09IFVTQkxQX1JFUV9HRVRfSUQpICYmICh0eXBlID09IFVTQl9UWVBFX0NMQVNTKSkgewotCSAgaW5kZXggPSAodXNibHAtPmlmbnVtPDw4KXx1c2JscC0+cHJvdG9jb2xbdXNibHAtPmN1cnJlbnRfcHJvdG9jb2xdLmFsdF9zZXR0aW5nOwotCX0KKwlpZiAoKHJlcXVlc3QgPT0gVVNCTFBfUkVRX0dFVF9JRCkgJiYgKHR5cGUgPT0gVVNCX1RZUEVfQ0xBU1MpKQorCQlpbmRleCA9ICh1c2JscC0+aWZudW08PDgpfHVzYmxwLT5wcm90b2NvbFt1c2JscC0+Y3VycmVudF9wcm90b2NvbF0uYWx0X3NldHRpbmc7CiAKIAlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2codXNibHAtPmRldiwKIAkJZGlyID8gdXNiX3JjdmN0cmxwaXBlKHVzYmxwLT5kZXYsIDApIDogdXNiX3NuZGN0cmxwaXBlKHVzYmxwLT5kZXYsIDApLApAQCAtMzcyLDcgKzM3Miw3IEBACiAJcmV0dXJuIG5ld2VycjsKIH0KIAotc3RhdGljIGludCBoYW5kbGVfYmlkaXIgKHN0cnVjdCB1c2JscCAqdXNibHApCitzdGF0aWMgaW50IGhhbmRsZV9iaWRpcihzdHJ1Y3QgdXNibHAgKnVzYmxwKQogewogCWlmICh1c2JscC0+YmlkaXIgJiYgdXNibHAtPnVzZWQpIHsKIAkJaWYgKHVzYmxwX3N1Ym1pdF9yZWFkKHVzYmxwKSA8IDApCkBAIC0zOTUsMTQgKzM5NSwxMyBAQAogCWlmIChtaW5vciA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JbXV0ZXhfbG9jayAoJnVzYmxwX211dGV4KTsKKwltdXRleF9sb2NrKCZ1c2JscF9tdXRleCk7CiAKIAlyZXR2YWwgPSAtRU5PREVWOwogCWludGYgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnVzYmxwX2RyaXZlciwgbWlub3IpOwotCWlmICghaW50ZikgeworCWlmICghaW50ZikKIAkJZ290byBvdXQ7Ci0JfQotCXVzYmxwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CisJdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCWlmICghdXNibHAgfHwgIXVzYmxwLT5kZXYgfHwgIXVzYmxwLT5wcmVzZW50KQogCQlnb3RvIG91dDsKIApAQCAtNDMzLDE4ICs0MzIsMTggQEAKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrICgmdXNibHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmdXNibHBfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIHVzYmxwX2NsZWFudXAgKHN0cnVjdCB1c2JscCAqdXNibHApCitzdGF0aWMgdm9pZCB1c2JscF9jbGVhbnVwKHN0cnVjdCB1c2JscCAqdXNibHApCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAidXNibHAlZDogcmVtb3ZlZFxuIiwgdXNibHAtPm1pbm9yKTsKIAogCWtmcmVlKHVzYmxwLT5yZWFkYnVmKTsKLQlrZnJlZSAodXNibHAtPmRldmljZV9pZF9zdHJpbmcpOwotCWtmcmVlICh1c2JscC0+c3RhdHVzYnVmKTsKLQlrZnJlZSAodXNibHApOworCWtmcmVlKHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nKTsKKwlrZnJlZSh1c2JscC0+c3RhdHVzYnVmKTsKKwlrZnJlZSh1c2JscCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYmxwX3VubGlua191cmJzKHN0cnVjdCB1c2JscCAqdXNibHApCkBAIC00NTgsMTQgKzQ1NywxNCBAQAogCiAJdXNibHAtPmZsYWdzICY9IH5MUF9BQk9SVDsKIAotCW11dGV4X2xvY2sgKCZ1c2JscF9tdXRleCk7CisJbXV0ZXhfbG9jaygmdXNibHBfbXV0ZXgpOwogCXVzYmxwLT51c2VkID0gMDsKIAlpZiAodXNibHAtPnByZXNlbnQpIHsKIAkJdXNibHBfdW5saW5rX3VyYnModXNibHApOwogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNibHAtPmludGYpOwotCX0gZWxzZSAJCS8qIGZpbmlzaCBjbGVhbnVwIGZyb20gZGlzY29ubmVjdCAqLwotCQl1c2JscF9jbGVhbnVwICh1c2JscCk7Ci0JbXV0ZXhfdW5sb2NrICgmdXNibHBfbXV0ZXgpOworCX0gZWxzZQkJLyogZmluaXNoIGNsZWFudXAgZnJvbSBkaXNjb25uZWN0ICovCisJCXVzYmxwX2NsZWFudXAodXNibHApOworCW11dGV4X3VubG9jaygmdXNibHBfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC00OTUsMTkwICs0OTQsMTkwIEBACiAJaW50IHR3b2ludHNbMl07CiAJaW50IHJldHZhbCA9IDA7CiAKLQltdXRleF9sb2NrICgmdXNibHAtPm11dCk7CisJbXV0ZXhfbG9jaygmdXNibHAtPm11dCk7CiAJaWYgKCF1c2JscC0+cHJlc2VudCkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJZGJnKCJ1c2JscF9pb2N0bDogY21kPTB4JXggKCVjIG5yPSVkIGxlbj0lZCBkaXI9JWQpIiwgY21kLCBfSU9DX1RZUEUoY21kKSwKLQkJX0lPQ19OUihjbWQpLCBfSU9DX1NJWkUoY21kKSwgX0lPQ19ESVIoY21kKSApOworCQlfSU9DX05SKGNtZCksIF9JT0NfU0laRShjbWQpLCBfSU9DX0RJUihjbWQpKTsKIAogCWlmIChfSU9DX1RZUEUoY21kKSA9PSAnUCcpCS8qIG5ldy1zdHlsZSBpb2N0bCBudW1iZXIgKi8KIAogCQlzd2l0Y2ggKF9JT0NfTlIoY21kKSkgewogCi0JCQljYXNlIElPQ05SX0dFVF9ERVZJQ0VfSUQ6IC8qIGdldCB0aGUgREVWSUNFX0lEIHN0cmluZyAqLwotCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCkgewotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQorCQljYXNlIElPQ05SX0dFVF9ERVZJQ0VfSUQ6IC8qIGdldCB0aGUgREVWSUNFX0lEIHN0cmluZyAqLworCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEKSB7CisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAKLQkJCQlsZW5ndGggPSB1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHVzYmxwKTsKLQkJCQlpZiAobGVuZ3RoIDwgMCkgewotCQkJCQlyZXR2YWwgPSBsZW5ndGg7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9Ci0JCQkJaWYgKGxlbmd0aCA+IF9JT0NfU0laRShjbWQpKQotCQkJCQlsZW5ndGggPSBfSU9DX1NJWkUoY21kKTsgLyogdHJ1bmNhdGUgKi8KKwkJCWxlbmd0aCA9IHVzYmxwX2NhY2hlX2RldmljZV9pZF9zdHJpbmcodXNibHApOworCQkJaWYgKGxlbmd0aCA8IDApIHsKKwkJCQlyZXR2YWwgPSBsZW5ndGg7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJaWYgKGxlbmd0aCA+IF9JT0NfU0laRShjbWQpKQorCQkJCWxlbmd0aCA9IF9JT0NfU0laRShjbWQpOyAvKiB0cnVuY2F0ZSAqLwogCi0JCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLAotCQkJCQkJdXNibHAtPmRldmljZV9pZF9zdHJpbmcsCi0JCQkJCQkodW5zaWduZWQgbG9uZykgbGVuZ3RoKSkgewotCQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQorCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgYXJnLAorCQkJCQl1c2JscC0+ZGV2aWNlX2lkX3N0cmluZywKKwkJCQkJKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCkpIHsKKwkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAotCQkJCWJyZWFrOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgSU9DTlJfR0VUX1BST1RPQ09MUzoKLQkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKLQkJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KKwkJY2FzZSBJT0NOUl9HRVRfUFJPVE9DT0xTOgorCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEIHx8CisJCQkgICAgX0lPQ19TSVpFKGNtZCkgPCBzaXplb2YodHdvaW50cykpIHsKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAotCQkJCXR3b2ludHNbMF0gPSB1c2JscC0+Y3VycmVudF9wcm90b2NvbDsKLQkJCQl0d29pbnRzWzFdID0gMDsKLQkJCQlmb3IgKGkgPSBVU0JMUF9GSVJTVF9QUk9UT0NPTDsKLQkJCQkgICAgIGkgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTDsgaSsrKSB7Ci0JCQkJCWlmICh1c2JscC0+cHJvdG9jb2xbaV0uYWx0X3NldHRpbmcgPj0gMCkKLQkJCQkJCXR3b2ludHNbMV0gfD0gKDE8PGkpOwotCQkJCX0KKwkJCXR3b2ludHNbMF0gPSB1c2JscC0+Y3VycmVudF9wcm90b2NvbDsKKwkJCXR3b2ludHNbMV0gPSAwOworCQkJZm9yIChpID0gVVNCTFBfRklSU1RfUFJPVE9DT0w7CisJCQkgICAgIGkgPD0gVVNCTFBfTEFTVF9QUk9UT0NPTDsgaSsrKSB7CisJCQkJaWYgKHVzYmxwLT5wcm90b2NvbFtpXS5hbHRfc2V0dGluZyA+PSAwKQorCQkJCQl0d29pbnRzWzFdIHw9ICgxPDxpKTsKKwkJCX0KIAotCQkJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLAotCQkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAotCQkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgewotCQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQorCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopdHdvaW50cywKKwkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJZ290byBkb25lOworCQkJfQogCi0JCQkJYnJlYWs7CisJCQlicmVhazsKIAotCQkJY2FzZSBJT0NOUl9TRVRfUFJPVE9DT0w6Ci0JCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19XUklURSkgewotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQorCQljYXNlIElPQ05SX1NFVF9QUk9UT0NPTDoKKwkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUpIHsKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAogI2lmZGVmIERFQlVHCi0JCQkJaWYgKGFyZyA9PSAtMTApIHsKLQkJCQkJdXNibHBfZHVtcCh1c2JscCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwkJCWlmIChhcmcgPT0gLTEwKSB7CisJCQkJdXNibHBfZHVtcCh1c2JscCk7CisJCQkJYnJlYWs7CisJCQl9CiAjZW5kaWYKIAotCQkJCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKLQkJCQlyZXR2YWwgPSB1c2JscF9zZXRfcHJvdG9jb2wodXNibHAsIGFyZyk7Ci0JCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQkJdXNibHBfc2V0X3Byb3RvY29sKHVzYmxwLAotCQkJCQkJdXNibHAtPmN1cnJlbnRfcHJvdG9jb2wpOwotCQkJCX0KLQkJCQlicmVhazsKKwkJCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKKwkJCXJldHZhbCA9IHVzYmxwX3NldF9wcm90b2NvbCh1c2JscCwgYXJnKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CisJCQkJdXNibHBfc2V0X3Byb3RvY29sKHVzYmxwLAorCQkJCQl1c2JscC0+Y3VycmVudF9wcm90b2NvbCk7CisJCQl9CisJCQlicmVhazsKIAotCQkJY2FzZSBJT0NOUl9IUF9TRVRfQ0hBTk5FTDoKLQkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1dSSVRFIHx8Ci0JCQkJICAgIGxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpICE9IDB4MDNGMCB8fAotCQkJCSAgICB1c2JscC0+cXVpcmtzICYgVVNCTFBfUVVJUktfQklESVIpIHsKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KKwkJY2FzZSBJT0NOUl9IUF9TRVRfQ0hBTk5FTDoKKwkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUgfHwKKwkJCSAgICBsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSAhPSAweDAzRjAgfHwKKwkJCSAgICB1c2JscC0+cXVpcmtzICYgVVNCTFBfUVVJUktfQklESVIpIHsKKwkJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAotCQkJCWVyciA9IHVzYmxwX2hwX2NoYW5uZWxfY2hhbmdlX3JlcXVlc3QodXNibHAsCi0JCQkJCWFyZywgJm5ld0NoYW5uZWwpOwotCQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJCWRldl9lcnIoJnVzYmxwLT5kZXYtPmRldiwKLQkJCQkJCSJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgotCQkJCQkJIkhQIGNoYW5uZWxcbiIsCi0JCQkJCQl1c2JscC0+bWlub3IsIGVycik7Ci0JCQkJCXJldHZhbCA9IC1FSU87Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9CisJCQllcnIgPSB1c2JscF9ocF9jaGFubmVsX2NoYW5nZV9yZXF1ZXN0KHVzYmxwLAorCQkJCWFyZywgJm5ld0NoYW5uZWwpOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlkZXZfZXJyKCZ1c2JscC0+ZGV2LT5kZXYsCisJCQkJCSJ1c2JscCVkOiBlcnJvciA9ICVkIHNldHRpbmcgIgorCQkJCQkiSFAgY2hhbm5lbFxuIiwKKwkJCQkJdXNibHAtPm1pbm9yLCBlcnIpOworCQkJCXJldHZhbCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQogCi0JCQkJZGJnKCJ1c2JscCVkIHJlcXVlc3RlZC9nb3QgSFAgY2hhbm5lbCAlbGQvJWQiLAotCQkJCQl1c2JscC0+bWlub3IsIGFyZywgbmV3Q2hhbm5lbCk7Ci0JCQkJYnJlYWs7CisJCQlkYmcoInVzYmxwJWQgcmVxdWVzdGVkL2dvdCBIUCBjaGFubmVsICVsZC8lZCIsCisJCQkJdXNibHAtPm1pbm9yLCBhcmcsIG5ld0NoYW5uZWwpOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgSU9DTlJfR0VUX0JVU19BRERSRVNTOgotCQkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAotCQkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgewotCQkJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQorCQljYXNlIElPQ05SX0dFVF9CVVNfQUREUkVTUzoKKwkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfUkVBRCB8fAorCQkJICAgIF9JT0NfU0laRShjbWQpIDwgc2l6ZW9mKHR3b2ludHMpKSB7CisJCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAKLQkJCQl0d29pbnRzWzBdID0gdXNibHAtPmRldi0+YnVzLT5idXNudW07Ci0JCQkJdHdvaW50c1sxXSA9IHVzYmxwLT5kZXYtPmRldm51bTsKLQkJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywKLQkJCQkJCSh1bnNpZ25lZCBjaGFyICopdHdvaW50cywKLQkJCQkJCXNpemVvZih0d29pbnRzKSkpIHsKLQkJCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KKwkJCXR3b2ludHNbMF0gPSB1c2JscC0+ZGV2LT5idXMtPmJ1c251bTsKKwkJCXR3b2ludHNbMV0gPSB1c2JscC0+ZGV2LT5kZXZudW07CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywKKwkJCQkJKHVuc2lnbmVkIGNoYXIgKil0d29pbnRzLAorCQkJCQlzaXplb2YodHdvaW50cykpKSB7CisJCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CiAKLQkJCQlkYmcoInVzYmxwJWQgaXMgYnVzPSVkLCBkZXZpY2U9JWQiLAotCQkJCQl1c2JscC0+bWlub3IsIHR3b2ludHNbMF0sIHR3b2ludHNbMV0pOwotCQkJCWJyZWFrOworCQkJZGJnKCJ1c2JscCVkIGlzIGJ1cz0lZCwgZGV2aWNlPSVkIiwKKwkJCQl1c2JscC0+bWlub3IsIHR3b2ludHNbMF0sIHR3b2ludHNbMV0pOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgSU9DTlJfR0VUX1ZJRF9QSUQ6Ci0JCQkJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19SRUFEIHx8Ci0JCQkJICAgIF9JT0NfU0laRShjbWQpIDwgc2l6ZW9mKHR3b2ludHMpKSB7Ci0JCQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9CisJCWNhc2UgSU9DTlJfR0VUX1ZJRF9QSUQ6CisJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX1JFQUQgfHwKKwkJCSAgICBfSU9DX1NJWkUoY21kKSA8IHNpemVvZih0d29pbnRzKSkgeworCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQogCi0JCQkJdHdvaW50c1swXSA9IGxlMTZfdG9fY3B1KHVzYmxwLT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOwotCQkJCXR3b2ludHNbMV0gPSBsZTE2X3RvX2NwdSh1c2JscC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCi0JCQkJCQkodW5zaWduZWQgY2hhciAqKXR3b2ludHMsCi0JCQkJCQlzaXplb2YodHdvaW50cykpKSB7Ci0JCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9CisJCQl0d29pbnRzWzBdID0gbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJCQl0d29pbnRzWzFdID0gbGUxNl90b19jcHUodXNibHAtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsCisJCQkJCSh1bnNpZ25lZCBjaGFyICopdHdvaW50cywKKwkJCQkJc2l6ZW9mKHR3b2ludHMpKSkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJZ290byBkb25lOworCQkJfQogCi0JCQkJZGJnKCJ1c2JscCVkIGlzIFZJRD0weCU0LjRYLCBQSUQ9MHglNC40WCIsCi0JCQkJCXVzYmxwLT5taW5vciwgdHdvaW50c1swXSwgdHdvaW50c1sxXSk7Ci0JCQkJYnJlYWs7CisJCQlkYmcoInVzYmxwJWQgaXMgVklEPTB4JTQuNFgsIFBJRD0weCU0LjRYIiwKKwkJCQl1c2JscC0+bWlub3IsIHR3b2ludHNbMF0sIHR3b2ludHNbMV0pOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgSU9DTlJfU09GVF9SRVNFVDoKLQkJCQlpZiAoX0lPQ19ESVIoY21kKSAhPSBfSU9DX05PTkUpIHsKLQkJCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlyZXR2YWwgPSB1c2JscF9yZXNldCh1c2JscCk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHZhbCA9IC1FTk9UVFk7CisJCWNhc2UgSU9DTlJfU09GVF9SRVNFVDoKKwkJCWlmIChfSU9DX0RJUihjbWQpICE9IF9JT0NfTk9ORSkgeworCQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcmV0dmFsID0gdXNibHBfcmVzZXQodXNibHApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR2YWwgPSAtRU5PVFRZOwogCQl9CiAJZWxzZQkvKiBvbGQtc3R5bGUgaW9jdGwgdmFsdWUgKi8KIAkJc3dpdGNoIChjbWQpIHsKIAotCQkJY2FzZSBMUEdFVFNUQVRVUzoKLQkJCQlpZiAoKHJldHZhbCA9IHVzYmxwX3JlYWRfc3RhdHVzKHVzYmxwLCB1c2JscC0+c3RhdHVzYnVmKSkpIHsKLQkJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKLQkJCQkJCXByaW50ayhLRVJOX0VSUiAidXNibHAlZDoiCi0JCQkJCQkgICAgImZhaWxlZCByZWFkaW5nIHByaW50ZXIgc3RhdHVzICglZClcbiIsCi0JCQkJCQkgICAgdXNibHAtPm1pbm9yLCByZXR2YWwpOwotCQkJCQlyZXR2YWwgPSAtRUlPOwotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJfQotCQkJCXN0YXR1cyA9ICp1c2JscC0+c3RhdHVzYnVmOwotCQkJCWlmIChjb3B5X3RvX3VzZXIgKCh2b2lkIF9fdXNlciAqKWFyZywgJnN0YXR1cywgc2l6ZW9mKGludCkpKQotCQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJCWJyZWFrOworCQljYXNlIExQR0VUU1RBVFVTOgorCQkJaWYgKChyZXR2YWwgPSB1c2JscF9yZWFkX3N0YXR1cyh1c2JscCwgdXNibHAtPnN0YXR1c2J1ZikpKSB7CisJCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JscCVkOiIKKwkJCQkJICAgICJmYWlsZWQgcmVhZGluZyBwcmludGVyIHN0YXR1cyAoJWQpXG4iLAorCQkJCQkgICAgdXNibHAtPm1pbm9yLCByZXR2YWwpOworCQkJCXJldHZhbCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCQkJc3RhdHVzID0gKnVzYmxwLT5zdGF0dXNidWY7CisJCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnN0YXR1cywgc2l6ZW9mKGludCkpKQorCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlicmVhazsKIAotCQkJY2FzZSBMUEFCT1JUOgotCQkJCWlmIChhcmcpCi0JCQkJCXVzYmxwLT5mbGFncyB8PSBMUF9BQk9SVDsKLQkJCQllbHNlCi0JCQkJCXVzYmxwLT5mbGFncyAmPSB+TFBfQUJPUlQ7Ci0JCQkJYnJlYWs7CisJCWNhc2UgTFBBQk9SVDoKKwkJCWlmIChhcmcpCisJCQkJdXNibHAtPmZsYWdzIHw9IExQX0FCT1JUOworCQkJZWxzZQorCQkJCXVzYmxwLT5mbGFncyAmPSB+TFBfQUJPUlQ7CisJCQlicmVhazsKIAotCQkJZGVmYXVsdDoKLQkJCQlyZXR2YWwgPSAtRU5PVFRZOworCQlkZWZhdWx0OgorCQkJcmV0dmFsID0gLUVOT1RUWTsKIAkJfQogCiBkb25lOgotCW11dGV4X3VubG9jayAoJnVzYmxwLT5tdXQpOworCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtODQwLDcgKzgzOSw3IEBACiAJfQogCiBkb25lOgotCW11dGV4X3VubG9jayAoJnVzYmxwLT5tdXQpOworCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xMDIzLDcgKzEwMjIsNyBAQAogICogd2hpbGUgeW91IGFyZSBzZW5kaW5nIHByaW50IGRhdGEsIGFuZCB5b3UgZG9uJ3QgdHJ5IHRvIHF1ZXJ5IHRoZQogICogcHJpbnRlciBzdGF0dXMgZXZlcnkgY291cGxlIG9mIG1pbGxpc2Vjb25kcywgeW91IHdpbGwgcHJvYmFibHkgYmUgT0suCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNibHBfcXVpcmtzIChfX3UxNiB2ZW5kb3IsIF9fdTE2IHByb2R1Y3QpCitzdGF0aWMgdW5zaWduZWQgaW50IHVzYmxwX3F1aXJrcyhfX3UxNiB2ZW5kb3IsIF9fdTE2IHByb2R1Y3QpCiB7CiAJaW50IGk7CiAKQEAgLTEwMzEsNyArMTAzMCw3IEBACiAJCWlmICh2ZW5kb3IgPT0gcXVpcmtfcHJpbnRlcnNbaV0udmVuZG9ySWQgJiYKIAkJICAgIHByb2R1Y3QgPT0gcXVpcmtfcHJpbnRlcnNbaV0ucHJvZHVjdElkKQogCQkJcmV0dXJuIHF1aXJrX3ByaW50ZXJzW2ldLnF1aXJrczsKLSAJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2MSw3ICsxMDYwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHVzYmxwX3Nob3dfaWVlZTEyODRfaWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCWlmICh1c2JscC0+ZGV2aWNlX2lkX3N0cmluZ1swXSA9PSAwICYmCiAJICAgIHVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nWzFdID09IDApCkBAIC0xMDc1LDcgKzEwNzQsNyBAQAogc3RhdGljIGludCB1c2JscF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldiAoaW50Zik7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJc3RydWN0IHVzYmxwICp1c2JscDsKIAlpbnQgcHJvdG9jb2w7CiAJaW50IHJldHZhbDsKQEAgLTEwODksNyArMTA4OCw3IEBACiAJfQogCXVzYmxwLT5kZXYgPSBkZXY7CiAJbXV0ZXhfaW5pdCgmdXNibHAtPndtdXQpOwotCW11dGV4X2luaXQgKCZ1c2JscC0+bXV0KTsKKwltdXRleF9pbml0KCZ1c2JscC0+bXV0KTsKIAlzcGluX2xvY2tfaW5pdCgmdXNibHAtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnVzYmxwLT5yd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNibHAtPnd3YWl0KTsKQEAgLTExNTMsNyArMTE1Miw3IEBACiAJdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCAwKTsKICNlbmRpZgogCi0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgdXNibHApOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdXNibHApOwogCiAJdXNibHAtPnByZXNlbnQgPSAxOwogCkBAIC0xMTc3LDcgKzExNzYsNyBAQAogCXJldHVybiAwOwogCiBhYm9ydF9pbnRmZGF0YToKLQl1c2Jfc2V0X2ludGZkYXRhIChpbnRmLCBOVUxMKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaWVlZTEyODRfaWQpOwogYWJvcnQ6CiAJa2ZyZWUodXNibHAtPnJlYWRidWYpOwpAQCAtMTM0MCwzNSArMTMzOSwzNSBAQAogCiBzdGF0aWMgdm9pZCB1c2JscF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNibHBfY2xhc3MpOwogCiAJaWYgKCF1c2JscCB8fCAhdXNibHAtPmRldikgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJib2d1cyBkaXNjb25uZWN0XG4iKTsKLQkJQlVHICgpOworCQlCVUcoKTsKIAl9CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKIAotCW11dGV4X2xvY2sgKCZ1c2JscF9tdXRleCk7Ci0JbXV0ZXhfbG9jayAoJnVzYmxwLT5tdXQpOworCW11dGV4X2xvY2soJnVzYmxwX211dGV4KTsKKwltdXRleF9sb2NrKCZ1c2JscC0+bXV0KTsKIAl1c2JscC0+cHJlc2VudCA9IDA7CiAJd2FrZV91cCgmdXNibHAtPnd3YWl0KTsKIAl3YWtlX3VwKCZ1c2JscC0+cndhaXQpOwotCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CiAKIAl1c2JscF91bmxpbmtfdXJicyh1c2JscCk7Ci0JbXV0ZXhfdW5sb2NrICgmdXNibHAtPm11dCk7CisJbXV0ZXhfdW5sb2NrKCZ1c2JscC0+bXV0KTsKIAogCWlmICghdXNibHAtPnVzZWQpCi0JCXVzYmxwX2NsZWFudXAgKHVzYmxwKTsKLQltdXRleF91bmxvY2sgKCZ1c2JscF9tdXRleCk7CisJCXVzYmxwX2NsZWFudXAodXNibHApOworCW11dGV4X3VubG9jaygmdXNibHBfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHVzYmxwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewotCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKICNpZiAwIC8qIFhYWCBEbyB3ZSB3YW50IHRoaXM/IFdoYXQgaWYgc29tZW9uZSBpcyByZWFkaW5nLCBzaG91bGQgd2UgZmFpbD8gKi8KQEAgLTEzODIsMTAgKzEzODEsMTAgQEAKIAogc3RhdGljIGludCB1c2JscF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IHVzYmxwICp1c2JscCA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCWludCByOwogCi0JciA9IGhhbmRsZV9iaWRpciAodXNibHApOworCXIgPSBoYW5kbGVfYmlkaXIodXNibHApOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0xNDAxLDcgKzE0MDAsNyBAQAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYmxwX2lkcyk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNibHBfaWRzKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmxwX2RyaXZlciA9IHsKIAkubmFtZSA9CQkidXNibHAiLApAQCAtMTQyNiw4ICsxNDI1LDggQEAKIG1vZHVsZV9pbml0KHVzYmxwX2luaXQpOwogbW9kdWxlX2V4aXQodXNibHBfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKLU1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogbW9kdWxlX3BhcmFtKHByb3RvX2JpYXMsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOwogTU9EVUxFX1BBUk1fREVTQyhwcm90b19iaWFzLCAiRmF2b3VyaXRlIHByb3RvY29sIG51bWJlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IGMyZjYyYTMuLmYxYWFmZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTE2NjgsMTMgKzE2NjgsMTAgQEAKIAlkZWZhdWx0OgogCQlpZiAoaW50Zi0+ZGV2LmRyaXZlcikKIAkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7Ci0JCWlmIChkcml2ZXIgPT0gTlVMTCB8fCBkcml2ZXItPmlvY3RsID09IE5VTEwpIHsKKwkJaWYgKGRyaXZlciA9PSBOVUxMIHx8IGRyaXZlci0+dW5sb2NrZWRfaW9jdGwgPT0gTlVMTCkgewogCQkJcmV0dmFsID0gLUVOT1RUWTsKIAkJfSBlbHNlIHsKLQkJCS8qIGtlZXAgQVBJIHRoYXQgZ3VhcmFudGVlcyBCS0wgKi8KLQkJCWxvY2tfa2VybmVsKCk7Ci0JCQlyZXR2YWwgPSBkcml2ZXItPmlvY3RsKGludGYsIGN0bC0+aW9jdGxfY29kZSwgYnVmKTsKLQkJCXVubG9ja19rZXJuZWwoKTsKKwkJCXJldHZhbCA9IGRyaXZlci0+dW5sb2NrZWRfaW9jdGwoaW50ZiwgY3RsLT5pb2N0bF9jb2RlLCBidWYpOwogCQkJaWYgKHJldHZhbCA9PSAtRU5PSU9DVExDTUQpCiAJCQkJcmV0dmFsID0gLUVOT1RUWTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKaW5kZXggYTZiZDUzYS4uZDdhNDQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCkBAIC0xNzQyLDkgKzE3NDIsOCBAQAogCQl9CiAKIAkJLyogUHJldmVudCB0aGUgcGFyZW50IGZyb20gc3VzcGVuZGluZyBpbW1lZGlhdGVseSBhZnRlciAqLwotCQllbHNlIGlmICh1ZGV2LT5wYXJlbnQpIHsKKwkJZWxzZSBpZiAodWRldi0+cGFyZW50KQogCQkJdWRldi0+cGFyZW50LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQl9CiAJfQogCiAJLyogUnVudGltZSBzdXNwZW5kIGZvciBhIFVTQiBpbnRlcmZhY2UgZG9lc24ndCBtZWFuIGFueXRoaW5nLiAqLwpAQCAtMTc4NiwyMSArMTc4NSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdXNiX2J1c19wbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdXNiX2J1c19wbV9vcHMgPSB7CiAJLnJ1bnRpbWVfc3VzcGVuZCA9CXVzYl9ydW50aW1lX3N1c3BlbmQsCiAJLnJ1bnRpbWVfcmVzdW1lID0JdXNiX3J1bnRpbWVfcmVzdW1lLAogCS5ydW50aW1lX2lkbGUgPQkJdXNiX3J1bnRpbWVfaWRsZSwKIH07CiAKLSNlbHNlCi0KLSNkZWZpbmUgdXNiX2J1c19wbV9vcHMJKCooc3RydWN0IGRldl9wbV9vcHMgKikgTlVMTCkKLQogI2VuZGlmIC8qIENPTkZJR19VU0JfU1VTUEVORCAqLwogCiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0gewogCS5uYW1lID0JCSJ1c2IiLAogCS5tYXRjaCA9CXVzYl9kZXZpY2VfbWF0Y2gsCiAJLnVldmVudCA9CXVzYl91ZXZlbnQsCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECiAJLnBtID0JCSZ1c2JfYnVzX3BtX29wcywKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCA0Zjg0YTQxLi4zNzg4ZTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC05NiwxNiArOTYsMjEgQEAKIAogCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgotCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCisJCWlmIChlcC0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpCisJCQkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KIAkJCWludGVydmFsID0gZXAtPmRlc2MtPmJJbnRlcnZhbDsKIAkJYnJlYWs7CisKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CiAJCWludGVydmFsID0gMSA8PCAoZXAtPmRlc2MtPmJJbnRlcnZhbCAtIDEpOwogCQlicmVhazsKKwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKLQkJaWYgKGVwLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCAmJiAhaW4pIC8qIHVmcmFtZXMgcGVyIE5BSyAqLworCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIICYmICFpbikKKwkJCS8qIHVmcmFtZXMgcGVyIE5BSyAqLwogCQkJaW50ZXJ2YWwgPSBlcC0+ZGVzYy0+YkludGVydmFsOwogCQlicmVhazsKKwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgogCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQkJaW50ZXJ2YWwgPSAxIDw8IChlcC0+ZGVzYy0+YkludGVydmFsIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCmluZGV4IDlhMzRjY2IuLjY5ZWNkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCkBAIC0xMDUsOCArMTA1LDEwIEBACiAJCS8qIFdoZW4gdGhlIGZpcnN0IGNvbmZpZydzIGZpcnN0IGludGVyZmFjZSBpcyBvbmUgb2YgTWljcm9zb2Z0J3MKIAkJICogcGV0IG5vbnN0YW5kYXJkIEV0aGVybmV0LW92ZXItVVNCIHByb3RvY29scywgaWdub3JlIGl0IHVubGVzcwogCQkgKiB0aGlzIGtlcm5lbCBoYXMgZW5hYmxlZCB0aGUgbmVjZXNzYXJ5IGhvc3Qgc2lkZSBkcml2ZXIuCisJCSAqIEJ1dDogRG9uJ3QgaWdub3JlIGl0IGlmIGl0J3MgdGhlIG9ubHkgY29uZmlnLgogCQkgKi8KLQkJaWYgKGkgPT0gMCAmJiBkZXNjICYmIChpc19ybmRpcyhkZXNjKSB8fCBpc19hY3RpdmVzeW5jKGRlc2MpKSkgeworCQlpZiAoaSA9PSAwICYmIG51bV9jb25maWdzID4gMSAmJiBkZXNjICYmCisJCQkJKGlzX3JuZGlzKGRlc2MpIHx8IGlzX2FjdGl2ZXN5bmMoZGVzYykpKSB7CiAjaWYgIWRlZmluZWQoQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCkgJiYgIWRlZmluZWQoQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVF9NT0RVTEUpCiAJCQljb250aW51ZTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IDFjZjJkMWUuLmMzZjk4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC02NiwxMCArNjYsNyBAQAogCSAqIHZpY2UgdmVyc2EuCiAJICovCiAJY29tcGFuaW9uID0gTlVMTDsKLQlmb3IgKDs7KSB7Ci0JCWNvbXBhbmlvbiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGNvbXBhbmlvbik7Ci0JCWlmICghY29tcGFuaW9uKQotCQkJYnJlYWs7CisJZm9yX2VhY2hfcGNpX2Rldihjb21wYW5pb24pIHsKIAkJaWYgKGNvbXBhbmlvbi0+YnVzICE9IHBkZXYtPmJ1cyB8fAogCQkJCVBDSV9TTE9UKGNvbXBhbmlvbi0+ZGV2Zm4pICE9IHNsb3QpCiAJCQljb250aW51ZTsKQEAgLTI1MCw2ICsyNDcsOSBAQAogCWlmIChyZXR2YWwgIT0gMCkKIAkJZ290byBlcnI0OwogCXNldF9oc19jb21wYW5pb24oZGV2LCBoY2QpOworCisJaWYgKHBjaV9kZXZfcnVuX3dha2UoZGV2KSkKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZkZXYtPmRldik7CiAJcmV0dXJuIHJldHZhbDsKIAogIGVycjQ6CkBAIC0yOTIsNiArMjkyLDE3IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybjsKIAorCWlmIChwY2lfZGV2X3J1bl93YWtlKGRldikpCisJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZkZXYtPmRldik7CisKKwkvKiBGYWtlIGFuIGludGVycnVwdCByZXF1ZXN0IGluIG9yZGVyIHRvIGdpdmUgdGhlIGRyaXZlciBhIGNoYW5jZQorCSAqIHRvIHRlc3Qgd2hldGhlciB0aGUgY29udHJvbGxlciBoYXJkd2FyZSBoYXMgYmVlbiByZW1vdmVkIChlLmcuLAorCSAqIGNhcmRidXMgcGh5c2ljYWwgZWplY3QpLgorCSAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJdXNiX2hjZF9pcnEoMCwgaGNkKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCWlmIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUVNT1JZKSB7CiAJCWlvdW5tYXAoaGNkLT5yZWdzKTsKQEAgLTMxNywxMiArMzI4LDM0IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybjsKIAotCWlmIChoY2QtPmRyaXZlci0+c2h1dGRvd24pCisJaWYgKHRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSAmJgorCQkJaGNkLT5kcml2ZXItPnNodXRkb3duKQogCQloY2QtPmRyaXZlci0+c2h1dGRvd24oaGNkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RfcGNpX3NodXRkb3duKTsKIAotI2lmZGVmCUNPTkZJR19QTV9TTEVFUAorI2lmZGVmCUNPTkZJR19QTV9PUFMKKworI2lmZGVmCUNPTkZJR19QUENfUE1BQworc3RhdGljIHZvaWQgcG93ZXJtYWNfc2V0X2FzaWMoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGludCBlbmFibGUpCit7CisJLyogRW5hbmJsZSBvciBkaXNhYmxlIEFTSUMgY2xvY2tzIGZvciBVU0IgKi8KKwlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpIHsKKwkJc3RydWN0IGRldmljZV9ub2RlCSpvZl9ub2RlOworCisJCW9mX25vZGUgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGNpX2Rldik7CisJCWlmIChvZl9ub2RlKQorCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfVVNCX0VOQUJMRSwKKwkJCQkJb2Zfbm9kZSwgMCwgZW5hYmxlKTsKKwl9Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3dlcm1hY19zZXRfYXNpYyhzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgaW50IGVuYWJsZSkKK3t9CisKKyNlbmRpZgkvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAogc3RhdGljIGludCBjaGVja19yb290X2h1Yl9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMzM3LDcgKzM3MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGNkX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc3VzcGVuZF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGRvX3dha2V1cCkKIHsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CkBAIC0zNTIsMTMgKzM4NSwyMSBAQAogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKLQkvKiBXZSBtaWdodCBhbHJlYWR5IGJlIHN1c3BlbmRlZCAocnVudGltZSBQTSAtLSBub3QgeWV0IHdyaXR0ZW4pICovCi0JaWYgKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwKQotCQlyZXR1cm4gcmV0dmFsOwotCiAJaWYgKGhjZC0+ZHJpdmVyLT5wY2lfc3VzcGVuZCkgewotCQlyZXR2YWwgPSBoY2QtPmRyaXZlci0+cGNpX3N1c3BlbmQoaGNkKTsKKwkJLyogT3B0aW1pemF0aW9uOiBEb24ndCBzdXNwZW5kIGlmIGEgcm9vdC1odWIgd2FrZXVwIGlzCisJCSAqIHBlbmRpbmcgYW5kIGl0IHdvdWxkIGNhdXNlIHRoZSBIQ0QgdG8gd2FrZSB1cCBhbnl3YXkuCisJCSAqLworCQlpZiAoZG9fd2FrZXVwICYmIEhDRF9XQUtFVVBfUEVORElORyhoY2QpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnBjaV9zdXNwZW5kKGhjZCwgZG9fd2FrZXVwKTsKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGhjZC0+ZHJpdmVyLT5wY2lfc3VzcGVuZCwgcmV0dmFsKTsKKworCQkvKiBDaGVjayBhZ2FpbiBpbiBjYXNlIHdha2V1cCByYWNlZCB3aXRoIHBjaV9zdXNwZW5kICovCisJCWlmIChyZXR2YWwgPT0gMCAmJiBkb193YWtldXAgJiYgSENEX1dBS0VVUF9QRU5ESU5HKGhjZCkpIHsKKwkJCWlmIChoY2QtPmRyaXZlci0+cGNpX3Jlc3VtZSkKKwkJCQloY2QtPmRyaXZlci0+cGNpX3Jlc3VtZShoY2QsIGZhbHNlKTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJfQogCQlpZiAocmV0dmFsKQogCQkJcmV0dXJuIHJldHZhbDsKIAl9CkBAIC0zNzQsNiArNDE1LDQ4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIGludCByZXN1bWVfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGV2ZW50KQoreworCXN0cnVjdCBwY2lfZGV2CQkqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlpbnQJCQlyZXR2YWw7CisKKwlpZiAoaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9TVVNQRU5ERUQpIHsKKwkJZGV2X2RiZyhkZXYsICJjYW4ndCByZXN1bWUsIG5vdCBzdXNwZW5kZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCByZS1lbmFibGUgYWZ0ZXIgcmVzdW1lLCAlZCFcbiIsIHJldHZhbCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGNpX2Rldik7CisKKwljbGVhcl9iaXQoSENEX0ZMQUdfU0FXX0lSUSwgJmhjZC0+ZmxhZ3MpOworCisJaWYgKGhjZC0+ZHJpdmVyLT5wY2lfcmVzdW1lKSB7CisJCWlmIChldmVudCAhPSBQTV9FVkVOVF9BVVRPX1JFU1VNRSkKKwkJCXdhaXRfZm9yX2NvbXBhbmlvbnMocGNpX2RldiwgaGNkKTsKKworCQlyZXR2YWwgPSBoY2QtPmRyaXZlci0+cGNpX3Jlc3VtZShoY2QsCisJCQkJZXZlbnQgPT0gUE1fRVZFTlRfUkVTVE9SRSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIoZGV2LCAiUENJIHBvc3QtcmVzdW1lIGVycm9yICVkIVxuIiwgcmV0dmFsKTsKKwkJCXVzYl9oY19kaWVkKGhjZCk7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworI2lmZGVmCUNPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgaW50IGhjZF9wY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHN1c3BlbmRfY29tbW9uKGRldiwgZGV2aWNlX21heV93YWtldXAoZGV2KSk7Cit9CisKIHN0YXRpYyBpbnQgaGNkX3BjaV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CkBAIC00MDgsMTYgKzQ5MSw3IEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCi0JLyogRGlzYWJsZSBBU0lDIGNsb2NrcyBmb3IgVVNCICovCi0JaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7Ci0JCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKLQotCQlvZl9ub2RlID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBjaV9kZXYpOwotCQlpZiAob2Zfbm9kZSkKLQkJCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1VTQl9FTkFCTEUsIG9mX25vZGUsIDAsIDApOwotCX0KLSNlbmRpZgorCXBvd2VybWFjX3NldF9hc2ljKHBjaV9kZXYsIDApOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQyNSw2OSArNDk5LDYzIEBACiB7CiAJc3RydWN0IHBjaV9kZXYJCSpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCi0jaWZkZWYgQ09ORklHX1BQQ19QTUFDCi0JLyogUmVlbmFibGUgQVNJQyBjbG9ja3MgZm9yIFVTQiAqLwotCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7Ci0KLQkJb2Zfbm9kZSA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwY2lfZGV2KTsKLQkJaWYgKG9mX25vZGUpCi0JCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9VU0JfRU5BQkxFLAotCQkJCQkJb2Zfbm9kZSwgMCwgMSk7Ci0JfQotI2VuZGlmCisJcG93ZXJtYWNfc2V0X2FzaWMocGNpX2RldiwgMSk7CiAKIAkvKiBHbyBiYWNrIHRvIEQwIGFuZCBkaXNhYmxlIHJlbW90ZSB3YWtldXAgKi8KIAlwY2lfYmFja19mcm9tX3NsZWVwKHBjaV9kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlc3VtZV9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGhpYmVybmF0ZWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYJCSpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOwotCWludAkJCXJldHZhbDsKLQotCWlmIChoY2QtPnN0YXRlICE9IEhDX1NUQVRFX1NVU1BFTkRFRCkgewotCQlkZXZfZGJnKGRldiwgImNhbid0IHJlc3VtZSwgbm90IHN1c3BlbmRlZCFcbiIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlkZXZfZXJyKGRldiwgImNhbid0IHJlLWVuYWJsZSBhZnRlciByZXN1bWUsICVkIVxuIiwgcmV0dmFsKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKLQotCWNsZWFyX2JpdChIQ0RfRkxBR19TQVdfSVJRLCAmaGNkLT5mbGFncyk7Ci0KLQlpZiAoaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUpIHsKLQkJLyogVGhpcyBjYWxsIHNob3VsZCBiZSBtYWRlIG9ubHkgZHVyaW5nIHN5c3RlbSByZXN1bWUsCi0JCSAqIG5vdCBkdXJpbmcgcnVudGltZSByZXN1bWUuCi0JCSAqLwotCQl3YWl0X2Zvcl9jb21wYW5pb25zKHBjaV9kZXYsIGhjZCk7Ci0KLQkJcmV0dmFsID0gaGNkLT5kcml2ZXItPnBjaV9yZXN1bWUoaGNkLCBoaWJlcm5hdGVkKTsKLQkJaWYgKHJldHZhbCkgewotCQkJZGV2X2VycihkZXYsICJQQ0kgcG9zdC1yZXN1bWUgZXJyb3IgJWQhXG4iLCByZXR2YWwpOwotCQkJdXNiX2hjX2RpZWQoaGNkKTsKLQkJfQotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBzdGF0aWMgaW50IGhjZF9wY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcmVzdW1lX2NvbW1vbihkZXYsIGZhbHNlKTsKKwlyZXR1cm4gcmVzdW1lX2NvbW1vbihkZXYsIFBNX0VWRU5UX1JFU1VNRSk7CiB9CiAKIHN0YXRpYyBpbnQgaGNkX3BjaV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gcmVzdW1lX2NvbW1vbihkZXYsIHRydWUpOworCXJldHVybiByZXN1bWVfY29tbW9uKGRldiwgUE1fRVZFTlRfUkVTVE9SRSk7CiB9CiAKKyNlbHNlCisKKyNkZWZpbmUgaGNkX3BjaV9zdXNwZW5kCQlOVUxMCisjZGVmaW5lIGhjZF9wY2lfc3VzcGVuZF9ub2lycQlOVUxMCisjZGVmaW5lIGhjZF9wY2lfcmVzdW1lX25vaXJxCU5VTEwKKyNkZWZpbmUgaGNkX3BjaV9yZXN1bWUJCU5VTEwKKyNkZWZpbmUgaGNkX3BjaV9yZXN0b3JlCQlOVUxMCisKKyNlbmRpZgkvKiBDT05GSUdfUE1fU0xFRVAgKi8KKworI2lmZGVmCUNPTkZJR19QTV9SVU5USU1FCisKK3N0YXRpYyBpbnQgaGNkX3BjaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludAlyZXR2YWw7CisKKwlyZXR2YWwgPSBzdXNwZW5kX2NvbW1vbihkZXYsIHRydWUpOworCWlmIChyZXR2YWwgPT0gMCkKKwkJcG93ZXJtYWNfc2V0X2FzaWModG9fcGNpX2RldihkZXYpLCAwKTsKKwlkZXZfZGJnKGRldiwgImhjZF9wY2lfcnVudGltZV9zdXNwZW5kOiAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGhjZF9wY2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludAlyZXR2YWw7CisKKwlwb3dlcm1hY19zZXRfYXNpYyh0b19wY2lfZGV2KGRldiksIDEpOworCXJldHZhbCA9IHJlc3VtZV9jb21tb24oZGV2LCBQTV9FVkVOVF9BVVRPX1JFU1VNRSk7CisJZGV2X2RiZyhkZXYsICJoY2RfcGNpX3J1bnRpbWVfcmVzdW1lOiAlZFxuIiwgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjZWxzZQorCisjZGVmaW5lIGhjZF9wY2lfcnVudGltZV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgaGNkX3BjaV9ydW50aW1lX3Jlc3VtZQlOVUxMCisKKyNlbmRpZgkvKiBDT05GSUdfUE1fUlVOVElNRSAqLworCiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB1c2JfaGNkX3BjaV9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBoY2RfcGNpX3N1c3BlbmQsCiAJLnN1c3BlbmRfbm9pcnEJPSBoY2RfcGNpX3N1c3BlbmRfbm9pcnEsCkBAIC01MDEsNyArNTY5LDkgQEAKIAkucG93ZXJvZmZfbm9pcnEJPSBoY2RfcGNpX3N1c3BlbmRfbm9pcnEsCiAJLnJlc3RvcmVfbm9pcnEJPSBoY2RfcGNpX3Jlc3VtZV9ub2lycSwKIAkucmVzdG9yZQk9IGhjZF9wY2lfcmVzdG9yZSwKKwkucnVudGltZV9zdXNwZW5kID0gaGNkX3BjaV9ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lCT0gaGNkX3BjaV9ydW50aW1lX3Jlc3VtZSwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3BjaV9wbV9vcHMpOwogCi0jZW5kaWYJLyogQ09ORklHX1BNX1NMRUVQICovCisjZW5kaWYJLyogQ09ORklHX1BNX09QUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggMTI3NDJmMS4uNWNjYTAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCWNoYXIJCWJ1ZmZlcls2XTsJLyogQW55IHJvb3QgaHVicyB3aXRoID4gMzEgcG9ydHM/ICovCiAKLQlpZiAodW5saWtlbHkoIWhjZC0+cmhfcmVnaXN0ZXJlZCkpCisJaWYgKHVubGlrZWx5KCFoY2QtPnJoX3BvbGxhYmxlKSkKIAkJcmV0dXJuOwogCWlmICghaGNkLT51c2VzX25ld19wb2xsaW5nICYmICFoY2QtPnN0YXR1c191cmIpCiAJCXJldHVybjsKQEAgLTY3OSw3ICs2NzksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIAkJdXJiID0gaGNkLT5zdGF0dXNfdXJiOwogCQlpZiAodXJiKSB7Ci0JCQloY2QtPnBvbGxfcGVuZGluZyA9IDA7CisJCQljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJCQloY2QtPnN0YXR1c191cmIgPSBOVUxMOwogCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbGVuZ3RoOwogCQkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWZmZXIsIGxlbmd0aCk7CkBAIC02OTAsNyArNjkwLDcgQEAKIAkJCXNwaW5fbG9jaygmaGNkX3Jvb3RfaHViX2xvY2spOwogCQl9IGVsc2UgewogCQkJbGVuZ3RoID0gMDsKLQkJCWhjZC0+cG9sbF9wZW5kaW5nID0gMTsKKwkJCXNldF9iaXQoSENEX0ZMQUdfUE9MTF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIAl9CkBAIC02OTksNyArNjk5LDcgQEAKIAkgKiBleGNlZWQgdGhhdCBsaW1pdCBpZiBIWiBpcyAxMDAuIFRoZSBtYXRoIGlzIG1vcmUgY2x1bmt5IHRoYW4KIAkgKiBtYXliZSBleHBlY3RlZCwgdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGltZXJzIGZvciBVU0IgZGV2aWNlcwogCSAqIGZpcmUgYXQgdGhlIHNhbWUgdGltZSB0byBnaXZlIHRoZSBDUFUgYSBicmVhayBpbmJldHdlZW4gKi8KLQlpZiAoaGNkLT51c2VzX25ld19wb2xsaW5nID8gaGNkLT5wb2xsX3JoIDoKKwlpZiAoaGNkLT51c2VzX25ld19wb2xsaW5nID8gSENEX1BPTExfUkgoaGNkKSA6CiAJCQkobGVuZ3RoID09IDAgJiYgaGNkLT5zdGF0dXNfdXJiICE9IE5VTEwpKQogCQltb2RfdGltZXIgKCZoY2QtPnJoX3RpbWVyLCAoamlmZmllcy8oSFovNCkgKyAxKSAqIChIWi80KSk7CiB9CkBAIC03MzYsNyArNzM2LDcgQEAKIAkJbW9kX3RpbWVyKCZoY2QtPnJoX3RpbWVyLCAoamlmZmllcy8oSFovNCkgKyAxKSAqIChIWi80KSk7CiAKIAkvKiBJZiBhIHN0YXR1cyBjaGFuZ2UgaGFzIGFscmVhZHkgb2NjdXJyZWQsIHJlcG9ydCBpdCBBU0FQICovCi0JZWxzZSBpZiAoaGNkLT5wb2xsX3BlbmRpbmcpCisJZWxzZSBpZiAoSENEX1BPTExfUEVORElORyhoY2QpKQogCQltb2RfdGltZXIoJmhjZC0+cmhfdGltZXIsIGppZmZpZXMpOwogCXJldHZhbCA9IDA7CiAgZG9uZToKQEAgLTExNTAsOCArMTE1MCw3IEBACiAJICogZmluaXNoIHVubGlua2luZyB0aGUgaW5pdGlhbCBmYWlsZWQgdXNiX3NldF9hZGRyZXNzKCkKIAkgKiBvciBkZXZpY2UgZGVzY3JpcHRvciBmZXRjaC4KIAkgKi8KLQlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX1NBV19JUlEsICZoY2QtPmZsYWdzKSAmJgotCQkJIWlzX3Jvb3RfaHViKHVyYi0+ZGV2KSkgeworCWlmICghSENEX1NBV19JUlEoaGNkKSAmJiAhaXNfcm9vdF9odWIodXJiLT5kZXYpKSB7CiAJCWRldl93YXJuKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiVW5saW5rIGFmdGVyIG5vLUlSUT8gICIKIAkJCSJDb250cm9sbGVyIGlzIHByb2JhYmx5IHVzaW5nIHRoZSB3cm9uZyBJUlEuXG4iKTsKIAkJc2V0X2JpdChIQ0RfRkxBR19TQVdfSVJRLCAmaGNkLT5mbGFncyk7CkBAIC0xMjE5LDYgKzEyMTgsMTEgQEAKIHsKIAl1bnNpZ25lZCBjaGFyICp2YWRkcjsKIAorCWlmICgqdmFkZHJfaGFuZGxlID09IE5VTEwpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAl2YWRkciA9IGhjZF9idWZmZXJfYWxsb2MoYnVzLCBzaXplICsgc2l6ZW9mKHZhZGRyKSwKIAkJCQkgbWVtX2ZsYWdzLCBkbWFfaGFuZGxlKTsKIAlpZiAoIXZhZGRyKQpAQCAtMTk0MSw2ICsxOTQ1LDcgQEAKIAogCWRldl9kYmcoJnJoZGV2LT5kZXYsICJ1c2IgJXMlc1xuIiwKIAkJCShtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPID8gImF1dG8tIiA6ICIiKSwgInJlc3VtZSIpOworCWNsZWFyX2JpdChIQ0RfRkxBR19XQUtFVVBfUEVORElORywgJmhjZC0+ZmxhZ3MpOwogCWlmICghaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUpCiAJCXJldHVybiAtRU5PRU5UOwogCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1JVTk5JTkcpCkBAIC0xOTk0LDggKzE5OTksMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwotCWlmIChoY2QtPnJoX3JlZ2lzdGVyZWQpCisJaWYgKGhjZC0+cmhfcmVnaXN0ZXJlZCkgeworCQlzZXRfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJCXF1ZXVlX3dvcmsocG1fd3EsICZoY2QtPndha2V1cF93b3JrKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmhjZF9yb290X2h1Yl9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfaGNkX3Jlc3VtZV9yb290X2h1Yik7CkBAIC0yMDYzLDggKzIwNzAsNyBAQAogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCWlmICh1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQgfHwKLQkJICAgICAhdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSkgeworCWlmICh1bmxpa2VseShoY2QtPnN0YXRlID09IEhDX1NUQVRFX0hBTFQgfHwgIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpKSB7CiAJCXJjID0gSVJRX05PTkU7CiAJfSBlbHNlIGlmIChoY2QtPmRyaXZlci0+aXJxKGhjZCkgPT0gSVJRX05PTkUpIHsKIAkJcmMgPSBJUlFfTk9ORTsKQEAgLTIwNzksNiArMjA4NSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RfaXJxKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjA5OCw3ICsyMTA1LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIAlpZiAoaGNkLT5yaF9yZWdpc3RlcmVkKSB7Ci0JCWhjZC0+cG9sbF9yaCA9IDA7CisJCWNsZWFyX2JpdChIQ0RfRkxBR19QT0xMX1JILCAmaGNkLT5mbGFncyk7CiAKIAkJLyogbWFrZSBraHViZCBjbGVhbiB1cCBvbGQgdXJicyBhbmQgZGV2aWNlcyAqLwogCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSAoaGNkLT5zZWxmLnJvb3RfaHViLApAQCAtMjIxNyw2ICsyMjI0LDcgQEAKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NhdGVfcm9vdF9odWI7CiAJfQorCWhjZC0+c2VsZi5yb290X2h1YiA9IHJoZGV2OwogCiAJc3dpdGNoIChoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTUFTSykgewogCWNhc2UgSENEX1VTQjExOgpAQCAtMjIyOSw5ICsyMjM3LDggQEAKIAkJcmhkZXYtPnNwZWVkID0gVVNCX1NQRUVEX1NVUEVSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlnb3RvIGVycl9hbGxvY2F0ZV9yb290X2h1YjsKKwkJZ290byBlcnJfc2V0X3JoX3NwZWVkOwogCX0KLQloY2QtPnNlbGYucm9vdF9odWIgPSByaGRldjsKIAogCS8qIHdha2V1cCBmbGFnIGluaXQgZGVmYXVsdHMgdG8gImV2ZXJ5dGhpbmcgd29ya3MiIGZvciByb290IGh1YnMsCiAJICogYnV0IGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0IGluIHJlc2V0KCkgaWYgbmVlZGVkLCBhbG9uZyB3aXRoCkBAIC0yMjQ2LDYgKzIyNTMsNyBAQAogCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiY2FuJ3Qgc2V0dXBcbiIpOwogCQlnb3RvIGVycl9oY2RfZHJpdmVyX3NldHVwOwogCX0KKwloY2QtPnJoX3BvbGxhYmxlID0gMTsKIAogCS8qIE5PVEU6IHJvb3QgaHViIGFuZCBjb250cm9sbGVyIGNhcGFiaWxpdGllcyBtYXkgbm90IGJlIHRoZSBzYW1lICovCiAJaWYgKGRldmljZV9jYW5fd2FrZXVwKGhjZC0+c2VsZi5jb250cm9sbGVyKQpAQCAtMjMwMCwyMyArMjMwOCwzOCBAQAogCQkgICAgICAgcmV0dmFsKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfYXR0cl9ncm91cDsKIAl9Ci0JaWYgKGhjZC0+dXNlc19uZXdfcG9sbGluZyAmJiBoY2QtPnBvbGxfcmgpCisJaWYgKGhjZC0+dXNlc19uZXdfcG9sbGluZyAmJiBIQ0RfUE9MTF9SSChoY2QpKQogCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CiAJcmV0dXJuIHJldHZhbDsKIAogZXJyb3JfY3JlYXRlX2F0dHJfZ3JvdXA6CisJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCisJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9RVUlFU0NJTkc7CisJc3Bpbl9sb2NrX2lycSgmaGNkX3Jvb3RfaHViX2xvY2spOworCWhjZC0+cmhfcmVnaXN0ZXJlZCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZoY2Rfcm9vdF9odWJfbG9jayk7CisKKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKKwljYW5jZWxfd29ya19zeW5jKCZoY2QtPndha2V1cF93b3JrKTsKKyNlbmRpZgogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKLQl1c2JfZGlzY29ubmVjdCgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKwl1c2JfZGlzY29ubmVjdCgmcmhkZXYpOwkJLyogU2V0cyByaGRldiB0byBOVUxMICovCiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiBlcnJfcmVnaXN0ZXJfcm9vdF9odWI6CisJaGNkLT5yaF9wb2xsYWJsZSA9IDA7CisJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmaGNkLT5yaF90aW1lcik7CiAJaGNkLT5kcml2ZXItPnN0b3AoaGNkKTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKIGVycl9oY2RfZHJpdmVyX3N0YXJ0OgogCWlmIChoY2QtPmlycSA+PSAwKQogCQlmcmVlX2lycShpcnFudW0sIGhjZCk7CiBlcnJfcmVxdWVzdF9pcnE6CiBlcnJfaGNkX2RyaXZlcl9zZXR1cDoKLQloY2QtPnNlbGYucm9vdF9odWIgPSBOVUxMOwotCXVzYl9wdXRfZGV2KHJoZGV2KTsKK2Vycl9zZXRfcmhfc3BlZWQ6CisJdXNiX3B1dF9kZXYoaGNkLT5zZWxmLnJvb3RfaHViKTsKIGVycl9hbGxvY2F0ZV9yb290X2h1YjoKIAl1c2JfZGVyZWdpc3Rlcl9idXMoJmhjZC0+c2VsZik7CiBlcnJfcmVnaXN0ZXJfYnVzOgpAQCAtMjMzNSw4ICsyMzU4LDEzIEBACiAgKi8KIHZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYgPSBoY2QtPnNlbGYucm9vdF9odWI7CisKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgInJlbW92ZSwgc3RhdGUgJXhcbiIsIGhjZC0+c3RhdGUpOwogCisJdXNiX2dldF9kZXYocmhkZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcmhkZXYtPmRldi5rb2JqLCAmdXNiX2J1c19hdHRyX2dyb3VwKTsKKwogCWlmIChIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKIAkJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1FVSUVTQ0lORzsKIApAQCAtMjM0OSwxOSArMjM3NywzMCBAQAogCWNhbmNlbF93b3JrX3N5bmMoJmhjZC0+d2FrZXVwX3dvcmspOwogI2VuZGlmCiAKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LmtvYmosICZ1c2JfYnVzX2F0dHJfZ3JvdXApOwogCW11dGV4X2xvY2soJnVzYl9idXNfbGlzdF9sb2NrKTsKLQl1c2JfZGlzY29ubmVjdCgmaGNkLT5zZWxmLnJvb3RfaHViKTsKKwl1c2JfZGlzY29ubmVjdCgmcmhkZXYpOwkJLyogU2V0cyByaGRldiB0byBOVUxMICovCiAJbXV0ZXhfdW5sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAKKwkvKiBQcmV2ZW50IGFueSBtb3JlIHJvb3QtaHViIHN0YXR1cyBjYWxscyBmcm9tIHRoZSB0aW1lci4KKwkgKiBUaGUgSENEIG1pZ2h0IHN0aWxsIHJlc3RhcnQgdGhlIHRpbWVyIChpZiBhIHBvcnQgc3RhdHVzIGNoYW5nZQorCSAqIGludGVycnVwdCBvY2N1cnMpLCBidXQgdXNiX2hjZF9wb2xsX3JoX3N0YXR1cygpIHdvbid0IGludm9rZQorCSAqIHRoZSBodWJfc3RhdHVzX2RhdGEoKSBjYWxsYmFjay4KKwkgKi8KKwloY2QtPnJoX3BvbGxhYmxlID0gMDsKKwljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKKwogCWhjZC0+ZHJpdmVyLT5zdG9wKGhjZCk7CiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX0hBTFQ7CiAKLQloY2QtPnBvbGxfcmggPSAwOworCS8qIEluIGNhc2UgdGhlIEhDRCByZXN0YXJ0ZWQgdGhlIHRpbWVyLCBzdG9wIGl0IGFnYWluLiAqLworCWNsZWFyX2JpdChIQ0RfRkxBR19QT0xMX1JILCAmaGNkLT5mbGFncyk7CiAJZGVsX3RpbWVyX3N5bmMoJmhjZC0+cmhfdGltZXIpOwogCiAJaWYgKGhjZC0+aXJxID49IDApCiAJCWZyZWVfaXJxKGhjZC0+aXJxLCBoY2QpOworCisJdXNiX3B1dF9kZXYoaGNkLT5zZWxmLnJvb3RfaHViKTsKIAl1c2JfZGVyZWdpc3Rlcl9idXMoJmhjZC0+c2VsZik7CiAJaGNkX2J1ZmZlcl9kZXN0cm95KGhjZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCA3MGNjY2M3Li44NGMxODk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiZGV2aWNlX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CkBAIC0xMjk0LDYgKzEyOTUsNyBAQAogCXJldHVybiAtRU5PREVWOwogfQogCisvKiBObyBCS0wgbmVlZGVkICovCiBzdGF0aWMgaW50CiBodWJfaW9jdGwoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLCB2b2lkICp1c2VyX2RhdGEpCiB7CkBAIC0xODAxLDcgKzE4MDMsNiBAQAogCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmdWRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2VuYWJsZSgmdWRldi0+ZGV2KTsKIAotCXVzYl9kZXRlY3RfcXVpcmtzKHVkZXYpOwogCWVyciA9IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHVkZXYpOwkvKiBSZWFkIGRlc2NyaXB0b3JzICovCiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDsKQEAgLTI4ODAsNyArMjg4MSw5IEBACiAJfQogCiAJcmV0dmFsID0gMDsKLQorCS8qIG5vdGlmeSBIQ0QgdGhhdCB3ZSBoYXZlIGEgZGV2aWNlIGNvbm5lY3RlZCBhbmQgYWRkcmVzc2VkICovCisJaWYgKGhjZC0+ZHJpdmVyLT51cGRhdGVfZGV2aWNlKQorCQloY2QtPmRyaXZlci0+dXBkYXRlX2RldmljZShoY2QsIHVkZXYpOwogZmFpbDoKIAlpZiAocmV0dmFsKSB7CiAJCWh1Yl9wb3J0X2Rpc2FibGUoaHViLCBwb3J0MSwgMCk7CkBAIC0zMTExLDYgKzMxMTQsMTAgQEAKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGxvb3A7CiAKKwkJdXNiX2RldGVjdF9xdWlya3ModWRldik7CisJCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfREVMQVlfSU5JVCkKKwkJCW1zbGVlcCgxMDAwKTsKKwogCQkvKiBjb25zZWN1dGl2ZSBidXMtcG93ZXJlZCBodWJzIGFyZW4ndCByZWxpYWJsZTsgdGhleSBjYW4KIAkJICogdmlvbGF0ZSB0aGUgdm9sdGFnZSBkcm9wIGJ1ZGdldC4gIGlmIHRoZSBuZXcgY2hpbGQgaGFzCiAJCSAqIGEgInBvd2VyZWQiIExFRCwgdXNlcnMgc2hvdWxkIG5vdGljZSB3ZSBkaWRuJ3QgZW5hYmxlIGl0CkBAIC0zNDYzLDcgKzM0NzAsNyBAQAogCS5yZXNldF9yZXN1bWUgPQlodWJfcmVzZXRfcmVzdW1lLAogCS5wcmVfcmVzZXQgPQlodWJfcHJlX3Jlc2V0LAogCS5wb3N0X3Jlc2V0ID0JaHViX3Bvc3RfcmVzZXQsCi0JLmlvY3RsID0JaHViX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGh1Yl9pb2N0bCwKIAkuaWRfdGFibGUgPQlodWJfaWRfdGFibGUsCiAJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKaW5kZXggMWEyNzYxOC4uMDk1ZmE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYwpAQCAtMjY1LDEzICsyNjUsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlsb2NrX2tlcm5lbCgpOwotCiAJaWYgKHVzYmZzX21vdW50ICYmIHVzYmZzX21vdW50LT5tbnRfc2IpCiAJCXVwZGF0ZV9zYih1c2Jmc19tb3VudC0+bW50X3NiKTsKIAotCXVubG9ja19rZXJuZWwoKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCBkYjk5YzA4Li4yNTcxOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKQEAgLTM4LDYgKzM4LDkgQEAKIAkvKiBDcmVhdGl2ZSBTQiBBdWRpZ3kgMiBOWCAqLwogCXsgVVNCX0RFVklDRSgweDA0MWUsIDB4MzAyMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKIAorCS8qIExvZ2l0ZWNoIEhhcm1vbnkgNzAwLXNlcmllcyAqLworCXsgVVNCX0RFVklDRSgweDA0NmQsIDB4YzEyMiksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19ERUxBWV9JTklUIH0sCisKIAkvKiBQaGlsaXBzIFBTQzgwNSBhdWRpbyBkZXZpY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDAxNTUpLCAuZHJpdmVyX2luZm8gPSBVU0JfUVVJUktfUkVTRVRfUkVTVU1FIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCmluZGV4IDdjMDU1NTUuLjQxOWU2YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtMTM3LDYgKzEzNywxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2FuY2hvcl91cmIpOwogCisvKiBDYWxsZXJzIG11c3QgaG9sZCBhbmNob3ItPmxvY2sgKi8KK3N0YXRpYyB2b2lkIF9fdXNiX3VuYW5jaG9yX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCB1c2JfYW5jaG9yICphbmNob3IpCit7CisJdXJiLT5hbmNob3IgPSBOVUxMOworCWxpc3RfZGVsKCZ1cmItPmFuY2hvcl9saXN0KTsKKwl1c2JfcHV0X3VyYih1cmIpOworCWlmIChsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkKKwkJd2FrZV91cCgmYW5jaG9yLT53YWl0KTsKK30KKwogLyoqCiAgKiB1c2JfdW5hbmNob3JfdXJiIC0gdW5hbmNob3JzIGFuIFVSQgogICogQHVyYjogcG9pbnRlciB0byB0aGUgdXJiIHRvIGFuY2hvcgpAQCAtMTU2LDE3ICsxNjYsMTQgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwotCWlmICh1bmxpa2VseShhbmNob3IgIT0gdXJiLT5hbmNob3IpKSB7Ci0JCS8qIHdlJ3ZlIGxvc3QgdGhlIHJhY2UgdG8gYW5vdGhlciB0aHJlYWQgKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0JdXJiLT5hbmNob3IgPSBOVUxMOwotCWxpc3RfZGVsKCZ1cmItPmFuY2hvcl9saXN0KTsKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGNvdWxkIGJlIGNvbXBldGluZyB3aXRoIGFub3RoZXIgdGhyZWFkIHdoaWNoCisJICogaGFzIHRoZSBzYW1lIGludGVudGlvbi4gVG8gcHJvdGVjdCB0aGUgdXJiIGZyb20gYmVpbmcgdW5hbmNob3JlZAorCSAqIHR3aWNlLCBvbmx5IHRoZSB3aW5uZXIgb2YgdGhlIHJhY2UgZ2V0cyB0aGUgam9iLgorCSAqLworCWlmIChsaWtlbHkoYW5jaG9yID09IHVyYi0+YW5jaG9yKSkKKwkJX191c2JfdW5hbmNob3JfdXJiKHVyYiwgYW5jaG9yKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKLQl1c2JfcHV0X3VyYih1cmIpOwotCWlmIChsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkKLQkJd2FrZV91cCgmYW5jaG9yLT53YWl0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl91bmFuY2hvcl91cmIpOwogCkBAIC03NDksMjAgKzc1NiwxMSBAQAogdm9pZCB1c2JfdW5saW5rX2FuY2hvcmVkX3VyYnMoc3RydWN0IHVzYl9hbmNob3IgKmFuY2hvcikKIHsKIAlzdHJ1Y3QgdXJiICp2aWN0aW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmFuY2hvci0+dXJiX2xpc3QpKSB7Ci0JCXZpY3RpbSA9IGxpc3RfZW50cnkoYW5jaG9yLT51cmJfbGlzdC5wcmV2LCBzdHJ1Y3QgdXJiLAotCQkJCSAgICBhbmNob3JfbGlzdCk7Ci0JCXVzYl9nZXRfdXJiKHZpY3RpbSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwotCQkvKiB0aGlzIHdpbGwgdW5hbmNob3IgdGhlIFVSQiAqLworCXdoaWxlICgodmljdGltID0gdXNiX2dldF9mcm9tX2FuY2hvcihhbmNob3IpKSAhPSBOVUxMKSB7CiAJCXVzYl91bmxpbmtfdXJiKHZpY3RpbSk7CiAJCXVzYl9wdXRfdXJiKHZpY3RpbSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW5jaG9yLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdW5saW5rX2FuY2hvcmVkX3VyYnMpOwogCkBAIC03OTksMTIgKzc5NywxMSBAQAogCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QubmV4dCwgc3RydWN0IHVyYiwKIAkJCQkgICAgYW5jaG9yX2xpc3QpOwogCQl1c2JfZ2V0X3VyYih2aWN0aW0pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKLQkJdXNiX3VuYW5jaG9yX3VyYih2aWN0aW0pOworCQlfX3VzYl91bmFuY2hvcl91cmIodmljdGltLCBhbmNob3IpOwogCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOwogCQl2aWN0aW0gPSBOVUxMOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiB2aWN0aW07CiB9CkBAIC04MjYsMTIgKzgyMyw3IEBACiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhbmNob3ItPnVyYl9saXN0KSkgewogCQl2aWN0aW0gPSBsaXN0X2VudHJ5KGFuY2hvci0+dXJiX2xpc3QucHJldiwgc3RydWN0IHVyYiwKIAkJCQkgICAgYW5jaG9yX2xpc3QpOwotCQl1c2JfZ2V0X3VyYih2aWN0aW0pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKLQkJLyogdGhpcyBtYXkgZnJlZSB0aGUgVVJCICovCi0JCXVzYl91bmFuY2hvcl91cmIodmljdGltKTsKLQkJdXNiX3B1dF91cmIodmljdGltKTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFuY2hvci0+bG9jaywgZmxhZ3MpOworCQlfX3VzYl91bmFuY2hvcl91cmIodmljdGltLCBhbmNob3IpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbmNob3ItPmxvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCmluZGV4IDVhZTE0ZjYuLmZkZDQxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwpAQCAtMzE3LDEwICszMTcsNiBAQAogCS5yZXN0b3JlID0JdXNiX2Rldl9yZXN0b3JlLAogfTsKIAotI2Vsc2UKLQotI2RlZmluZSB1c2JfZGV2aWNlX3BtX29wcwkoKihzdHJ1Y3QgZGV2X3BtX29wcyAqKSBOVUxMKQotCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIApAQCAtMzM4LDcgKzMzNCw5IEBACiAJLnJlbGVhc2UgPQl1c2JfcmVsZWFzZV9kZXYsCiAJLnVldmVudCA9CXVzYl9kZXZfdWV2ZW50LAogCS5kZXZub2RlID0gCXVzYl9kZXZub2RlLAorI2lmZGVmIENPTkZJR19QTQogCS5wbSA9CQkmdXNiX2RldmljZV9wbV9vcHMsCisjZW5kaWYKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA1OTFhZTlmLi5jZDI3ZjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNzE0LDYgKzcxNCw3IEBACiBjb25maWcgVVNCX0ZVTkNUSU9ORlMKIAl0cmlzdGF0ZSAiRnVuY3Rpb24gRmlsZXN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBVU0JfRlVOQ1RJT05GU19HRU5FUklDIGlmICEoVVNCX0ZVTkNUSU9ORlNfRVRIIHx8IFVTQl9GVU5DVElPTkZTX1JORElTKQogCWhlbHAKIAkgIFRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIChGdW5jdGlvRlMpIGxldHMgb25lIGNyZWF0ZSBVU0IKIAkgIGNvbXBvc2l0ZSBmdW5jdGlvbnMgaW4gdXNlciBzcGFjZSBpbiB0aGUgc2FtZSB3YXkgYXMgR2FkZ2V0RlMKQEAgLTcyMiwzMSArNzIzLDMxIEBACiAJICBpbXBsZW1lbnRlZCBpbiBrZXJuZWwgc3BhY2UgKGZvciBpbnN0YW5jZSBFdGhlcm5ldCwgc2VyaWFsIG9yCiAJICBtYXNzIHN0b3JhZ2UpIGFuZCBvdGhlciBhcmUgaW1wbGVtZW50ZWQgaW4gdXNlciBzcGFjZS4KIAorCSAgSWYgeW91IHNheSAieSIgb3IgIm0iIGhlcmUgeW91IHdpbGwgYmUgYWJsZSB3aGF0IGtpbmQgb2YKKwkgIGNvbmZpZ3VyYXRpb25zIHRoZSBnYWRnZXQgd2lsbCBwcm92aWRlLgorCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQKIAkgIGEgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfZmZzIi4KIAogY29uZmlnIFVTQl9GVU5DVElPTkZTX0VUSAotCWJvb2wgIkluY2x1ZGUgQ0RDIEVDTSAoRXRoZXJuZXQpIGZ1bmN0aW9uIgorCWJvb2wgIkluY2x1ZGUgY29uZmlndXJhdGlvbiB3aXRoIENEQyBFQ00gKEV0aGVybmV0KSIKIAlkZXBlbmRzIG9uIFVTQl9GVU5DVElPTkZTICYmIE5FVAogCWhlbHAKLQkgIEluY2x1ZGUgYW4gQ0RDIEVDTSAoRXRoZXJuZXQpIGZ1bmNpb24gaW4gdGhlIENEQyBFQ00gKEZ1bmNpb24pCi0JICBGaWxlc3lzdGVtLiAgSWYgeW91IGFsc28gc2F5ICJ5IiB0byB0aGUgUk5ESVMgcXVlcnkgYmVsb3cgdGhlCi0JICBnYWRnZXQgd2lsbCBoYXZlIHR3byBjb25maWd1cmF0aW9ucy4KKwkgIEluY2x1ZGUgYSBjb25maWd1cmF0aW9uIHdpdGggQ0RDIEVDTSBmdW5jaW9uIChFdGhlcm5ldCkgYW5kIHRoZQorCSAgRnVuY2lvbiBGaWxlc3lzdGVtLgogCiBjb25maWcgVVNCX0ZVTkNUSU9ORlNfUk5ESVMKLQlib29sICJJbmNsdWRlIFJORElTIChFdGhlcm5ldCkgZnVuY3Rpb24iCisJYm9vbCAiSW5jbHVkZSBjb25maWd1cmF0aW9uIHdpdGggUk5ESVMgKEV0aGVybmV0KSIKIAlkZXBlbmRzIG9uIFVTQl9GVU5DVElPTkZTICYmIE5FVAogCWhlbHAKLQkgIEluY2x1ZGUgYW4gUk5ESVMgKEV0aGVybmV0KSBmdW5jaW9uIGluIHRoZSBGdW5jaW9uIEZpbGVzeXN0ZW0uCi0JICBJZiB5b3UgYWxzbyBzYXkgInkiIHRvIHRoZSBDREMgRUNNIHF1ZXJ5IGFib3ZlIHRoZSBnYWRnZXQgd2lsbAotCSAgaGF2ZSB0d28gY29uZmlndXJhdGlvbnMuCisJICBJbmNsdWRlIGEgY29uZmlndXJhdGlvbiB3aXRoIFJORElTIGZ1bmNpb24gKEV0aGVybmV0KSBhbmQgdGhlIEZpbGVzeXN0ZW0uCiAKIGNvbmZpZyBVU0JfRlVOQ1RJT05GU19HRU5FUklDCiAJYm9vbCAiSW5jbHVkZSAncHVyZScgY29uZmlndXJhdGlvbiIKLQlkZXBlbmRzIG9uIFVTQl9GVU5DVElPTkZTICYmIChVU0JfRlVOQ1RJT05GU19FVEggfHwgVVNCX0ZVTkNUSU9ORlNfUk5ESVMpCisJZGVwZW5kcyBvbiBVU0JfRlVOQ1RJT05GUwogCWhlbHAKLQkgIEluY2x1ZGUgYSBjb25maWd1cmF0aW9uIHdpdGggRnVuY3Rpb25GUyBhbmQgbm8gRXRoZXJuZXQKLQkgIGNvbmZpZ3VyYXRpb24uCisJICBJbmNsdWRlIGEgY29uZmlndXJhdGlvbiB3aXRoIHRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIGFsb25lIHdpdGgKKwkgIG5vIEV0aGVybmV0IGludGVyZmFjZS4KIAogY29uZmlnIFVTQl9GSUxFX1NUT1JBR0UKIAl0cmlzdGF0ZSAiRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQiCkBAIC04NjMsNiArODY0LDcgQEAKIGNvbmZpZyBVU0JfR19NVUxUSQogCXRyaXN0YXRlICJNdWx0aWZ1bmN0aW9uIENvbXBvc2l0ZSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBCTE9DSyAmJiBORVQKKwlzZWxlY3QgVVNCX0dfTVVMVElfQ0RDIGlmICFVU0JfR19NVUxUSV9STkRJUwogCWhlbHAKIAkgIFRoZSBNdWx0aWZ1bmN0aW9uIENvbXBvc2l0ZSBHYWRnZXQgcHJvdmlkZXMgRXRoZXJuZXQgKFJORElTCiAJICBhbmQvb3IgQ0RDIEV0aGVybmV0KSwgbWFzcyBzdG9yYWdlIGFuZCBBQ00gc2VyaWFsIGxpbmsKQEAgLTkxMyw2ICs5MTUsMzQgQEAKIAkgIFNheSAieSIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yICJtIiB0byBidWlsZCBhCiAJICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZ19oaWQiLgogCitjb25maWcgVVNCX0dfREJHUAorCXRyaXN0YXRlICJFSENJIERlYnVnIERldmljZSBHYWRnZXQiCisJaGVscAorCSAgVGhpcyBnYWRnZXQgZW11bGF0ZXMgYW4gRUhDSSBEZWJ1ZyBkZXZpY2UuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQKKwkgIHRvIGludGVyYWN0IHdpdGggYW4gRUhDSSBEZWJ1ZyBQb3J0LgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfZGJncCIuCisKK2lmIFVTQl9HX0RCR1AKK2Nob2ljZQorCXByb21wdCAiRUhDSSBEZWJ1ZyBEZXZpY2UgbW9kZSIKKwlkZWZhdWx0IFVTQl9HX0RCR1BfU0VSSUFMCisKK2NvbmZpZyBVU0JfR19EQkdQX1BSSU5USworCWRlcGVuZHMgb24gVVNCX0dfREJHUAorCWJvb2wgInByaW50ayIKKwloZWxwCisJICBEaXJlY3RseSBwcmludGsoKSByZWNlaXZlZCBkYXRhLiBObyBpbnRlcmFjdGlvbi4KKworY29uZmlnIFVTQl9HX0RCR1BfU0VSSUFMCisJZGVwZW5kcyBvbiBVU0JfR19EQkdQCisJYm9vbCAic2VyaWFsIgorCWhlbHAKKwkgIFVzZXJsYW5kIGNhbiBpbnRlcmFjdCB1c2luZyAvZGV2L3R0eUdTeHh4LgorZW5kY2hvaWNlCitlbmRpZgorCiAjIHB1dCBkcml2ZXJzIHRoYXQgbmVlZCBpc29jaHJvbm91cyB0cmFuc2ZlciBzdXBwb3J0IChmb3IgYXVkaW8KICMgb3IgdmlkZW8gY2xhc3MgZ2FkZ2V0IGRyaXZlcnMpLCBvciBzcGVjaWZpYyBoYXJkd2FyZSwgaGVyZS4KIGNvbmZpZyBVU0JfR19XRUJDQU0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQppbmRleCA5YmNkZTExLi4yNzI4M2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCkBAIC00NCw2ICs0NCw3IEBACiBnX2NkYy1vYmpzCQkJOj0gY2RjMi5vCiBnX211bHRpLW9ianMJCQk6PSBtdWx0aS5vCiBnX2hpZC1vYmpzCQkJOj0gaGlkLm8KK2dfZGJncC1vYmpzCQkJOj0gZGJncC5vCiBnX25va2lhLW9ianMJCQk6PSBub2tpYS5vCiBnX3dlYmNhbS1vYmpzCQkJOj0gd2ViY2FtLm8KIApAQCAtNTIsNyArNTMsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9FVEgpCQkrPSBnX2V0aGVyLm8KIG9iai0kKENPTkZJR19VU0JfR0FER0VURlMpCSs9IGdhZGdldGZzLm8KIG9iai0kKENPTkZJR19VU0JfRlVOQ1RJT05GUykJKz0gZ19mZnMubwotb2JqLSQoQ09ORklHX1VTQl9FVEhfRlVOQ1RJT05GUykJKz0gZ19ldGhfZmZzLm8KIG9iai0kKENPTkZJR19VU0JfRklMRV9TVE9SQUdFKQkrPSBnX2ZpbGVfc3RvcmFnZS5vCiBvYmotJChDT05GSUdfVVNCX01BU1NfU1RPUkFHRSkJKz0gZ19tYXNzX3N0b3JhZ2Uubwogb2JqLSQoQ09ORklHX1VTQl9HX1NFUklBTCkJKz0gZ19zZXJpYWwubwpAQCAtNjAsNiArNjAsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9NSURJX0dBREdFVCkJKz0gZ19taWRpLm8KIG9iai0kKENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSkgKz0gZ19jZGMubwogb2JqLSQoQ09ORklHX1VTQl9HX0hJRCkJCSs9IGdfaGlkLm8KK29iai0kKENPTkZJR19VU0JfR19EQkdQKQkrPSBnX2RiZ3Aubwogb2JqLSQoQ09ORklHX1VTQl9HX01VTFRJKQkrPSBnX211bHRpLm8KIG9iai0kKENPTkZJR19VU0JfR19OT0tJQSkJKz0gZ19ub2tpYS5vCiBvYmotJChDT05GSUdfVVNCX0dfV0VCQ0FNKQkrPSBnX3dlYmNhbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXVkaW8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCmluZGV4IGE2MmFmN2IuLmI3NDRjY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdWRpby5jCkBAIC04OSw3ICs4OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1ZGlvX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCitzdGF0aWMgaW50IF9fcmVmIGF1ZGlvX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CiAJLyogRklYTUUgYWxsb2MgaUNvbmZpZ3VyYXRpb24gc3RyaW5nLCBzZXQgaXQgaW4gYy0+c3RyaW5ncyAqLwogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2luaXQgYXVkaW9fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitzdGF0aWMgaW50IF9fcmVmIGF1ZGlvX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCWludAkJCWdjbnVtOwogCWludAkJCXN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCmluZGV4IDkyODEzN2QuLjFmNWJhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAvKgogICogV2UgX2Fsd2F5c18gaGF2ZSBib3RoIENEQyBFQ00gYW5kIENEQyBBQ00gZnVuY3Rpb25zLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBjZGNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3N0YXRpYyBpbnQgX19yZWYgY2RjX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CiAJaW50CXN0YXR1czsKIApAQCAtMTU5LDcgKzE1OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0IGNkY19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3N0YXRpYyBpbnQgX19yZWYgY2RjX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCWludAkJCWdjbnVtOwogCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKaW5kZXggMzkxZDE2OS4uZTQ4M2Y4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwpAQCAtNjczLDIwICs2NzMsODMgQEAKICAqIHN0cmluZyBJRHMuICBEcml2ZXJzIGZvciBmdW5jdGlvbnMsIGNvbmZpZ3VyYXRpb25zLCBvciBnYWRnZXRzIHdpbGwKICAqIHRoZW4gc3RvcmUgdGhhdCBJRCBpbiB0aGUgYXBwcm9wcmlhdGUgZGVzY3JpcHRvcnMgYW5kIHN0cmluZyB0YWJsZS4KICAqCi0gKiBBbGwgc3RyaW5nIGlkZW50aWZpZXIgc2hvdWxkIGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIHJvdXRpbmUsIHRvCi0gKiBlbnN1cmUgdGhhdCBmb3IgZXhhbXBsZSBkaWZmZXJlbnQgZnVuY3Rpb25zIGRvbid0IHdyb25nbHkgYXNzaWduCi0gKiBkaWZmZXJlbnQgbWVhbmluZ3MgdG8gdGhlIHNhbWUgaWRlbnRpZmllci4KKyAqIEFsbCBzdHJpbmcgaWRlbnRpZmllciBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMsCisgKiBAdXNiX3N0cmluZ19pZHNfdGFiKCkgb3IgQHVzYl9zdHJpbmdfaWRzX24oKSByb3V0aW5lLCB0byBlbnN1cmUKKyAqIHRoYXQgZm9yIGV4YW1wbGUgZGlmZmVyZW50IGZ1bmN0aW9ucyBkb24ndCB3cm9uZ2x5IGFzc2lnbiBkaWZmZXJlbnQKKyAqIG1lYW5pbmdzIHRvIHRoZSBzYW1lIGlkZW50aWZpZXIuCiAgKi8KIGludCB1c2Jfc3RyaW5nX2lkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpZiAoY2Rldi0+bmV4dF9zdHJpbmdfaWQgPCAyNTQpIHsKLQkJLyogc3RyaW5nIGlkIDAgaXMgcmVzZXJ2ZWQgKi8KKwkJLyogc3RyaW5nIGlkIDAgaXMgcmVzZXJ2ZWQgYnkgVVNCIHNwZWMgZm9yIGxpc3Qgb2YKKwkJICogc3VwcG9ydGVkIGxhbmd1YWdlcyAqLworCQkvKiAyNTUgcmVzZXJ2ZWQgYXMgd2VsbD8gLS0gbWluYTg2ICovCiAJCWNkZXYtPm5leHRfc3RyaW5nX2lkKys7CiAJCXJldHVybiBjZGV2LT5uZXh0X3N0cmluZ19pZDsKIAl9CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKKy8qKgorICogdXNiX3N0cmluZ19pZHMoKSAtIGFsbG9jYXRlIHVudXNlZCBzdHJpbmcgSURzIGluIGJhdGNoCisgKiBAY2RldjogdGhlIGRldmljZSB3aG9zZSBzdHJpbmcgZGVzY3JpcHRvciBJRHMgYXJlIGJlaW5nIGFsbG9jYXRlZAorICogQHN0cjogYW4gYXJyYXkgb2YgdXNiX3N0cmluZyBvYmplY3RzIHRvIGFzc2lnbiBudW1iZXJzIHRvCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIEB1c2Jfc3RyaW5nX2lkcygpIGlzIGNhbGxlZCBmcm9tIGJpbmQoKSBjYWxsYmFja3MgdG8gYWxsb2NhdGUKKyAqIHN0cmluZyBJRHMuICBEcml2ZXJzIGZvciBmdW5jdGlvbnMsIGNvbmZpZ3VyYXRpb25zLCBvciBnYWRnZXRzIHdpbGwKKyAqIHRoZW4gY29weSBJRHMgZnJvbSB0aGUgc3RyaW5nIHRhYmxlIHRvIHRoZSBhcHByb3ByaWF0ZSBkZXNjcmlwdG9ycworICogYW5kIHN0cmluZyB0YWJsZSBmb3Igb3RoZXIgbGFuZ3VhZ2VzLgorICoKKyAqIEFsbCBzdHJpbmcgaWRlbnRpZmllciBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMsCisgKiBAdXNiX3N0cmluZ19pZCgpIG9yIEB1c2Jfc3RyaW5nX2lkc19uKCkgcm91dGluZSwgdG8gZW5zdXJlIHRoYXQgZm9yCisgKiBleGFtcGxlIGRpZmZlcmVudCBmdW5jdGlvbnMgZG9uJ3Qgd3JvbmdseSBhc3NpZ24gZGlmZmVyZW50IG1lYW5pbmdzCisgKiB0byB0aGUgc2FtZSBpZGVudGlmaWVyLgorICovCitpbnQgdXNiX3N0cmluZ19pZHNfdGFiKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldiwgc3RydWN0IHVzYl9zdHJpbmcgKnN0cikKK3sKKwlpbnQgbmV4dCA9IGNkZXYtPm5leHRfc3RyaW5nX2lkOworCisJZm9yICg7IHN0ci0+czsgKytzdHIpIHsKKwkJaWYgKHVubGlrZWx5KG5leHQgPj0gMjU0KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlzdHItPmlkID0gKytuZXh0OworCX0KKworCWNkZXYtPm5leHRfc3RyaW5nX2lkID0gbmV4dDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHVzYl9zdHJpbmdfaWRzX24oKSAtIGFsbG9jYXRlIHVudXNlZCBzdHJpbmcgSURzIGluIGJhdGNoCisgKiBAY2RldjogdGhlIGRldmljZSB3aG9zZSBzdHJpbmcgZGVzY3JpcHRvciBJRHMgYXJlIGJlaW5nIGFsbG9jYXRlZAorICogQG46IG51bWJlciBvZiBzdHJpbmcgSURzIHRvIGFsbG9jYXRlCisgKiBDb250ZXh0OiBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGdhZGdldCBzZXR1cAorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IHJlcXVlc3RlZCBJRC4gIFRoaXMgSUQgYW5kIG5leHQgQG4tMSBJRHMgYXJlIG5vdworICogdmFsaWQgSURzLiAgQXQgbGVhc3QgcHJvdmlkaW5kIHRoYXQgQG4gaXMgbm9uIHpvcmUgYmVjYXVzZSBpZiBpdAorICogaXMsIHJldHVybnMgbGFzdCByZXF1ZXN0ZWQgSUQgd2hpY2ggaXMgbm93IHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uLgorICoKKyAqIEB1c2Jfc3RyaW5nX2lkc19uKCkgaXMgY2FsbGVkIGZyb20gYmluZCgpIGNhbGxiYWNrcyB0byBhbGxvY2F0ZQorICogc3RyaW5nIElEcy4gIERyaXZlcnMgZm9yIGZ1bmN0aW9ucywgY29uZmlndXJhdGlvbnMsIG9yIGdhZGdldHMgd2lsbAorICogdGhlbiBzdG9yZSB0aGF0IElEIGluIHRoZSBhcHByb3ByaWF0ZSBkZXNjcmlwdG9ycyBhbmQgc3RyaW5nIHRhYmxlLgorICoKKyAqIEFsbCBzdHJpbmcgaWRlbnRpZmllciBzaG91bGQgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMsCisgKiBAdXNiX3N0cmluZ19pZCgpIG9yIEB1c2Jfc3RyaW5nX2lkc19uKCkgcm91dGluZSwgdG8gZW5zdXJlIHRoYXQgZm9yCisgKiBleGFtcGxlIGRpZmZlcmVudCBmdW5jdGlvbnMgZG9uJ3Qgd3JvbmdseSBhc3NpZ24gZGlmZmVyZW50IG1lYW5pbmdzCisgKiB0byB0aGUgc2FtZSBpZGVudGlmaWVyLgorICovCitpbnQgdXNiX3N0cmluZ19pZHNfbihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmMsIHVuc2lnbmVkIG4pCit7CisJdW5zaWduZWQgbmV4dCA9IGMtPm5leHRfc3RyaW5nX2lkOworCWlmICh1bmxpa2VseShuID4gMjU0IHx8ICh1bnNpZ25lZCluZXh0ICsgbiA+IDI1NCkpCisJCXJldHVybiAtRU5PREVWOworCWMtPm5leHRfc3RyaW5nX2lkICs9IG47CisJcmV0dXJuIG5leHQgKyAxOworfQorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIGNvbXBvc2l0ZV9zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpCkBAIC04OTMsNiArOTU2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCWlmIChjZGV2LT5jb25maWcpCiAJCXJlc2V0X2NvbmZpZyhjZGV2KTsKKwlpZiAoY29tcG9zaXRlLT5kaXNjb25uZWN0KQorCQljb21wb3NpdGUtPmRpc2Nvbm5lY3QoY2Rldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZGJncC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2RiZ3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ1MGEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2RiZ3AuYwpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIGRiZ3AuYyAtLSBFSENJIERlYnVnIFBvcnQgZGV2aWNlIGdhZGdldAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuZSBEdXZlcmdlcgorICoKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqCisgKi8KKworLyogdmVyYm9zZSBtZXNzYWdlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisKKy8qIFNlZSBjb21tZW50cyBpbiAiemVyby5jIiAqLworI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1NFUklBTAorI2luY2x1ZGUgInVfc2VyaWFsLmMiCisjZW5kaWYKKworI2RlZmluZSBEUklWRVJfVkVORE9SX0lECTB4MDUyNSAvKiBOZXRDaGlwICovCisjZGVmaW5lIERSSVZFUl9QUk9EVUNUX0lECTB4YzBkZSAvKiB1bmRlZmluZWQgKi8KKworI2RlZmluZSBVU0JfREVCVUdfTUFYX1BBQ0tFVF9TSVpFICAgICA4CisjZGVmaW5lIERCR1BfUkVRX0VQMF9MRU4gICAgICAgICAgICAgIDEyOAorI2RlZmluZSBEQkdQX1JFUV9MRU4gICAgICAgICAgICAgICAgICA1MTIKKworc3RhdGljIHN0cnVjdCBkYmdwIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldCAgKmdhZGdldDsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgdXNiX2VwICAgICAgKmlfZXA7CisJc3RydWN0IHVzYl9lcCAgICAgICpvX2VwOworI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1NFUklBTAorCXN0cnVjdCBnc2VyaWFsICAgICAqc2VyaWFsOworI2VuZGlmCit9IGRiZ3A7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0geworCS5iTGVuZ3RoID0gc2l6ZW9mIGRldmljZV9kZXNjLAorCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfREVWSUNFLAorCS5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJEZXZpY2VDbGFzcyA9CVVTQl9DTEFTU19WRU5ET1JfU1BFQywKKwkuaWRWZW5kb3IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfSUQpLAorCS5pZFByb2R1Y3QgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX0lEKSwKKwkuYk51bUNvbmZpZ3VyYXRpb25zID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RlYnVnX2Rlc2NyaXB0b3IgZGJnX2Rlc2MgPSB7CisJLmJMZW5ndGggPSBzaXplb2YgZGJnX2Rlc2MsCisJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9ERUJVRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaV9kZXNjID0geworCS5iTGVuZ3RoID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKKwkuYm1BdHRyaWJ1dGVzID0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkuYkVuZHBvaW50QWRkcmVzcyA9IFVTQl9ESVJfSU4sCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIG9fZGVzYyA9IHsKKwkuYkxlbmd0aCA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfRU5EUE9JTlQsCisJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX09VVCwKK307CisKKyNpZmRlZiBDT05GSUdfVVNCX0dfREJHUF9QUklOVEsKK3N0YXRpYyBpbnQgZGJncF9jb25zdW1lKGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworCWNoYXIgYzsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCWMgPSBidWZbbGVuLTFdOworCWlmIChjICE9IDApCisJCWJ1ZltsZW4tMV0gPSAwOworCisJcHJpbnRrKEtFUk5fTk9USUNFICIlcyVjIiwgYnVmLCBjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kaXNhYmxlX2VwKHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWlmIChlcCAmJiBlcC0+ZHJpdmVyX2RhdGEgPT0gZGJncC5nYWRnZXQpIHsKKwkJdXNiX2VwX2Rpc2FibGUoZXApOworCQllcC0+ZHJpdmVyX2RhdGEgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgZGJncF9kaXNhYmxlX2VwKHZvaWQpCit7CisJX19kaXNhYmxlX2VwKGRiZ3AuaV9lcCk7CisJX19kaXNhYmxlX2VwKGRiZ3Aub19lcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRiZ3BfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWludCBzdHA7CisJaW50IGVyciA9IDA7CisJaW50IHN0YXR1cyA9IHJlcS0+c3RhdHVzOworCisJaWYgKGVwID09IGRiZ3AuaV9lcCkgeworCQlzdHAgPSAxOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXN0cCA9IDI7CisJCWdvdG8gcmVsZWFzZV9yZXE7CisJfQorCisJZGJncF9jb25zdW1lKHJlcS0+YnVmLCByZXEtPmFjdHVhbCk7CisKKwlyZXEtPmxlbmd0aCA9IERCR1BfUkVRX0xFTjsKKwllcnIgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJaWYgKGVyciA8IDApIHsKKwkJc3RwID0gMzsKKwkJZ290byByZWxlYXNlX3JlcTsKKwl9CisKKwlyZXR1cm47CisKK3JlbGVhc2VfcmVxOgorCWtmcmVlKHJlcS0+YnVmKTsKKwl1c2JfZXBfZnJlZV9yZXF1ZXN0KGRiZ3Aub19lcCwgcmVxKTsKKwlkYmdwX2Rpc2FibGVfZXAoKTsKK2ZhaWw6CisJZGV2X2RiZygmZGJncC5nYWRnZXQtPmRldiwKKwkJImNvbXBsZXRlOiBmYWlsdXJlICglZDolZCkgPT0+ICVkXG4iLCBzdHAsIGVyciwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBkYmdwX2VuYWJsZV9lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXApCit7CisJaW50IGVyciwgc3RwOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCisJcmVxID0gdXNiX2VwX2FsbG9jX3JlcXVlc3QoZXAsIEdGUF9LRVJORUwpOworCWlmICghcmVxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXN0cCA9IDE7CisJCWdvdG8gZmFpbF8xOworCX0KKworCXJlcS0+YnVmID0ga21hbGxvYyhEQkdQX1JFUV9MRU4sIEdGUF9LRVJORUwpOworCWlmICghcmVxLT5idWYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJc3RwID0gMjsKKwkJZ290byBmYWlsXzI7CisJfQorCisJcmVxLT5jb21wbGV0ZSA9IGRiZ3BfY29tcGxldGU7CisJcmVxLT5sZW5ndGggPSBEQkdQX1JFUV9MRU47CisJZXJyID0gdXNiX2VwX3F1ZXVlKGVwLCByZXEsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgPCAwKSB7CisJCXN0cCA9IDM7CisJCWdvdG8gZmFpbF8zOworCX0KKworCXJldHVybiAwOworCitmYWlsXzM6CisJa2ZyZWUocmVxLT5idWYpOworZmFpbF8yOgorCXVzYl9lcF9mcmVlX3JlcXVlc3QoZGJncC5vX2VwLCByZXEpOworZmFpbF8xOgorCWRldl9kYmcoJmRiZ3AuZ2FkZ2V0LT5kZXYsCisJCSJlbmFibGUgZXAgcmVxOiBmYWlsdXJlICglZDolZClcbiIsIHN0cCwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZW5hYmxlX2VwKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJaW50IGVyciA9IHVzYl9lcF9lbmFibGUoZXAsIGRlc2MpOworCWVwLT5kcml2ZXJfZGF0YSA9IGRiZ3AuZ2FkZ2V0OworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9lbmFibGVfZXAodm9pZCkKK3sKKwlpbnQgZXJyLCBzdHA7CisKKwllcnIgPSBfX2VuYWJsZV9lcChkYmdwLmlfZXAsICZpX2Rlc2MpOworCWlmIChlcnIgPCAwKSB7CisJCXN0cCA9IDE7CisJCWdvdG8gZmFpbF8xOworCX0KKworCWVyciA9IF9fZW5hYmxlX2VwKGRiZ3Aub19lcCwgJm9fZGVzYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc3RwID0gMjsKKwkJZ290byBmYWlsXzI7CisJfQorCisJZXJyID0gZGJncF9lbmFibGVfZXBfcmVxKGRiZ3Aub19lcCk7CisJaWYgKGVyciA8IDApIHsKKwkJc3RwID0gMzsKKwkJZ290byBmYWlsXzM7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfMzoKKwlfX2Rpc2FibGVfZXAoZGJncC5vX2VwKTsKK2ZhaWxfMjoKKwlfX2Rpc2FibGVfZXAoZGJncC5pX2VwKTsKK2ZhaWxfMToKKwlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAiZW5hYmxlIGVwOiBmYWlsdXJlICglZDolZClcbiIsIHN0cCwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRiZ3BfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1BSSU5USworCWRiZ3BfZGlzYWJsZV9lcCgpOworI2Vsc2UKKwlnc2VyaWFsX2Rpc2Nvbm5lY3QoZGJncC5zZXJpYWwpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGRiZ3BfdW5iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisjaWZkZWYgQ09ORklHX1VTQl9HX0RCR1BfU0VSSUFMCisJa2ZyZWUoZGJncC5zZXJpYWwpOworI2VuZGlmCisJaWYgKGRiZ3AucmVxKSB7CisJCWtmcmVlKGRiZ3AucmVxLT5idWYpOworCQl1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0+ZXAwLCBkYmdwLnJlcSk7CisJfQorCisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2luaXQgZGJncF9jb25maWd1cmVfZW5kcG9pbnRzKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJaW50IHN0cDsKKworCXVzYl9lcF9hdXRvY29uZmlnX3Jlc2V0KGdhZGdldCk7CisKKwlkYmdwLmlfZXAgPSB1c2JfZXBfYXV0b2NvbmZpZyhnYWRnZXQsICZpX2Rlc2MpOworCWlmICghZGJncC5pX2VwKSB7CisJCXN0cCA9IDE7CisJCWdvdG8gZmFpbF8xOworCX0KKworCWRiZ3AuaV9lcC0+ZHJpdmVyX2RhdGEgPSBnYWRnZXQ7CisJaV9kZXNjLndNYXhQYWNrZXRTaXplID0KKwkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVCVUdfTUFYX1BBQ0tFVF9TSVpFKTsKKworCWRiZ3Aub19lcCA9IHVzYl9lcF9hdXRvY29uZmlnKGdhZGdldCwgJm9fZGVzYyk7CisJaWYgKCFkYmdwLm9fZXApIHsKKwkJZGJncC5pX2VwLT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJCXN0cCA9IDI7CisJCWdvdG8gZmFpbF8yOworCX0KKworCWRiZ3Aub19lcC0+ZHJpdmVyX2RhdGEgPSBnYWRnZXQ7CisJb19kZXNjLndNYXhQYWNrZXRTaXplID0KKwkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVCVUdfTUFYX1BBQ0tFVF9TSVpFKTsKKworCWRiZ19kZXNjLmJEZWJ1Z0luRW5kcG9pbnQgPSBpX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4N2Y7CisJZGJnX2Rlc2MuYkRlYnVnT3V0RW5kcG9pbnQgPSBvX2Rlc2MuYkVuZHBvaW50QWRkcmVzcyAmIDB4N2Y7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dfREJHUF9TRVJJQUwKKwlkYmdwLnNlcmlhbC0+aW4gPSBkYmdwLmlfZXA7CisJZGJncC5zZXJpYWwtPm91dCA9IGRiZ3Aub19lcDsKKworCWRiZ3Auc2VyaWFsLT5pbl9kZXNjID0gJmlfZGVzYzsKKwlkYmdwLnNlcmlhbC0+b3V0X2Rlc2MgPSAmb19kZXNjOworCisJaWYgKGdzZXJpYWxfc2V0dXAoZ2FkZ2V0LCAxKSA8IDApIHsKKwkJc3RwID0gMzsKKwkJZ290byBmYWlsXzM7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfMzoKKwlkYmdwLm9fZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK2ZhaWxfMjoKKwlkYmdwLmlfZXAtPmRyaXZlcl9kYXRhID0gTlVMTDsKK2ZhaWxfMToKKwlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAiZXAgY29uZmlnOiBmYWlsdXJlICglZClcbiIsIHN0cCk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRiZ3BfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCWludCBlcnIsIHN0cDsKKworCWRiZ3AuZ2FkZ2V0ID0gZ2FkZ2V0OworCisJZGJncC5yZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChnYWRnZXQtPmVwMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYmdwLnJlcSkgeworCQllcnIgPSAtRU5PTUVNOworCQlzdHAgPSAxOworCQlnb3RvIGZhaWw7CisJfQorCisJZGJncC5yZXEtPmJ1ZiA9IGttYWxsb2MoREJHUF9SRVFfRVAwX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYmdwLnJlcS0+YnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXN0cCA9IDI7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkYmdwLnJlcS0+bGVuZ3RoID0gREJHUF9SRVFfRVAwX0xFTjsKKwlnYWRnZXQtPmVwMC0+ZHJpdmVyX2RhdGEgPSBnYWRnZXQ7CisKKyNpZmRlZiBDT05GSUdfVVNCX0dfREJHUF9TRVJJQUwKKwlkYmdwLnNlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBnc2VyaWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYmdwLnNlcmlhbCkgeworCQlzdHAgPSAzOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorI2VuZGlmCisJZXJyID0gZGJncF9jb25maWd1cmVfZW5kcG9pbnRzKGdhZGdldCk7CisJaWYgKGVyciA8IDApIHsKKwkJc3RwID0gNDsKKwkJZ290byBmYWlsOworCX0KKworCWRldl9kYmcoJmRiZ3AuZ2FkZ2V0LT5kZXYsICJiaW5kOiBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlkZXZfZGJnKCZnYWRnZXQtPmRldiwgImJpbmQ6IGZhaWx1cmUgKCVkOiVkKVxuIiwgc3RwLCBlcnIpOworCWRiZ3BfdW5iaW5kKGdhZGdldCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZGJncF9zZXR1cF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwKKwkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAic2V0dXAgY29tcGxldGU6ICVkLCAlZC8lZFxuIiwKKwkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgZGJncF9zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJsKQoreworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gZGJncC5yZXE7CisJdTggcmVxdWVzdCA9IGN0cmwtPmJSZXF1ZXN0OworCXUxNiB2YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJdTE2IGxlbmd0aCA9IGxlMTZfdG9fY3B1KGN0cmwtPndMZW5ndGgpOworCWludCBlcnIgPSAwOworCXZvaWQgKmRhdGE7CisJdTE2IGxlbjsKKworCWdhZGdldC0+ZXAwLT5kcml2ZXJfZGF0YSA9IGdhZGdldDsKKworCWlmIChyZXF1ZXN0ID09IFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IpIHsKKwkJc3dpdGNoICh2YWx1ZT4+OCkgeworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAic2V0dXA6IGRlc2MgZGV2aWNlXG4iKTsKKwkJCWxlbiA9IHNpemVvZiBkZXZpY2VfZGVzYzsKKwkJCWRhdGEgPSAmZGV2aWNlX2Rlc2M7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfRFRfREVCVUc6CisJCQlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAic2V0dXA6IGRlc2MgZGVidWdcbiIpOworCQkJbGVuID0gc2l6ZW9mIGRiZ19kZXNjOworCQkJZGF0YSA9ICZkYmdfZGVzYzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZ290byBmYWlsOworCQl9CisJfSBlbHNlIGlmIChyZXF1ZXN0ID09IFVTQl9SRVFfU0VUX0ZFQVRVUkUgJiYKKwkJICAgdmFsdWUgPT0gVVNCX0RFVklDRV9ERUJVR19NT0RFKSB7CisJCWxlbiA9IDA7CisJCWRhdGEgPSBOVUxMOworCQlkZXZfZGJnKCZkYmdwLmdhZGdldC0+ZGV2LCAic2V0dXA6IGZlYXQgZGVidWdcbiIpOworI2lmZGVmIENPTkZJR19VU0JfR19EQkdQX1BSSU5USworCQllcnIgPSBkYmdwX2VuYWJsZV9lcCgpOworI2Vsc2UKKwkJZXJyID0gZ3NlcmlhbF9jb25uZWN0KGRiZ3Auc2VyaWFsLCAwKTsKKyNlbmRpZgorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9IGVsc2UKKwkJZ290byBmYWlsOworCisJaWYgKGxlbiA+PSAwKSB7CisJCXJlcS0+bGVuZ3RoID0gbWluKGxlbmd0aCwgbGVuKTsKKwkJcmVxLT56ZXJvID0gbGVuIDwgcmVxLT5sZW5ndGg7CisJCWlmIChkYXRhICYmIHJlcS0+bGVuZ3RoKQorCQkJbWVtY3B5KHJlcS0+YnVmLCBkYXRhLCByZXEtPmxlbmd0aCk7CisKKwkJcmVxLT5jb21wbGV0ZSA9IGRiZ3Bfc2V0dXBfY29tcGxldGU7CisJCXJldHVybiB1c2JfZXBfcXVldWUoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJfQorCitmYWlsOgorCWRldl9kYmcoJmRiZ3AuZ2FkZ2V0LT5kZXYsCisJCSJzZXR1cDogZmFpbHVyZSByZXEgJXggdiAleFxuIiwgcmVxdWVzdCwgdmFsdWUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZGJncF9kcml2ZXIgPSB7CisJLmZ1bmN0aW9uID0gImRiZ3AiLAorCS5zcGVlZCA9IFVTQl9TUEVFRF9ISUdILAorCS5iaW5kID0gZGJncF9iaW5kLAorCS51bmJpbmQgPSBkYmdwX3VuYmluZCwKKwkuc2V0dXAgPSBkYmdwX3NldHVwLAorCS5kaXNjb25uZWN0ID0gZGJncF9kaXNjb25uZWN0LAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJkYmdwIgorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkYmdwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoJmRiZ3BfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRiZ3BfZXhpdCh2b2lkKQoreworCXVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoJmRiZ3BfZHJpdmVyKTsKKyNpZmRlZiBDT05GSUdfVVNCX0dfREJHUF9TRVJJQUwKKwlnc2VyaWFsX2NsZWFudXAoKTsKKyNlbmRpZgorfQorCitNT0RVTEVfQVVUSE9SKCJTdGVwaGFuZSBEdXZlcmdlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworbW9kdWxlX2luaXQoZGJncF9pbml0KTsKK21vZHVsZV9leGl0KGRiZ3BfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggNGY5ZTU3OC4uZGM2NTQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAKIAlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmR1bS0+bG9jaywgZmxhZ3MpOwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKQorCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSkKIAkJZ290byBkb25lOwogCiAJaWYgKGR1bS0+cmVzdW1pbmcgJiYgdGltZV9hZnRlcl9lcSAoamlmZmllcywgZHVtLT5yZV90aW1lb3V0KSkgewpAQCAtMTU4OCw3ICsxNTg4LDcgQEAKIAlpbnQJCXJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKQorCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSkKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAKIAlkdW0gPSBoY2RfdG9fZHVtbXkgKGhjZCk7CkBAIC0xNzM5LDcgKzE3MzksNyBAQAogCWRldl9kYmcgKCZoY2QtPnNlbGYucm9vdF9odWItPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKLQlpZiAoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkgeworCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSkgewogCQlyYyA9IC1FU0hVVERPV047CiAJfSBlbHNlIHsKIAkJZHVtLT5yaF9zdGF0ZSA9IERVTU1ZX1JIX1JVTk5JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDQwMGY4MDMuLjExNGZhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0yMzcsNyArMjM3LDcgQEAKICAqIHRoZSBmaXJzdCBvbmUgcHJlc2VudC4gIFRoYXQncyB0byBtYWtlIE1pY3Jvc29mdCdzIGRyaXZlcnMgaGFwcHksCiAgKiBhbmQgdG8gZm9sbG93IERPQ1NJUyAxLjAgKGNhYmxlIG1vZGVtIHN0YW5kYXJkKS4KICAqLwotc3RhdGljIGludCBfX2luaXQgcm5kaXNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3N0YXRpYyBpbnQgX19yZWYgcm5kaXNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAkvKiBGSVhNRSBhbGxvYyBpQ29uZmlndXJhdGlvbiBzdHJpbmcsIHNldCBpdCBpbiBjLT5zdHJpbmdzICovCiAKQEAgLTI3MCw3ICsyNzAsNyBAQAogLyoKICAqIFdlIF9hbHdheXNfIGhhdmUgYW4gRUNNLCBDREMgU3Vic2V0LCBvciBFRU0gY29uZmlndXJhdGlvbi4KICAqLwotc3RhdGljIGludCBfX2luaXQgZXRoX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCitzdGF0aWMgaW50IF9fcmVmIGV0aF9kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQogewogCS8qIEZJWE1FIGFsbG9jIGlDb25maWd1cmF0aW9uIHN0cmluZywgc2V0IGl0IGluIGMtPnN0cmluZ3MgKi8KIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0IGV0aF9iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3N0YXRpYyBpbnQgX19yZWYgZXRoX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCWludAkJCWdjbnVtOwogCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYXVkaW8uYwppbmRleCBiOTExMTVmLi4xZjQ4Y2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hdWRpby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2F1ZGlvLmMKQEAgLTYxLDcgKzYxLDcgQEAKICNkZWZpbmUgVUFDX0RUX1RPVEFMX0xFTkdUSCAoVUFDX0RUX0FDX0hFQURFUl9MRU5HVEggKyBVQUNfRFRfSU5QVVRfVEVSTUlOQUxfU0laRSBcCiAJKyBVQUNfRFRfT1VUUFVUX1RFUk1JTkFMX1NJWkUgKyBVQUNfRFRfRkVBVFVSRV9VTklUX1NJWkUoMCkpCiAvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXzIgYWNfaGVhZGVyX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhYzFfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMiBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX0xFTkdUSCwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0hFQURFUiwKQEAgLTEyNSw3ICsxMjUsNyBAQAogfTsKIAogI2RlZmluZSBPVVRQVVRfVEVSTUlOQUxfSUQJMwotc3RhdGljIHN0cnVjdCB1YWNfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3JfdjEgb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CitzdGF0aWMgc3RydWN0IHVhYzFfb3V0cHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3Igb3V0cHV0X3Rlcm1pbmFsX2Rlc2MgPSB7CiAJLmJMZW5ndGgJCT0gVUFDX0RUX09VVFBVVF9URVJNSU5BTF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUJPSBVQUNfT1VUUFVUX1RFUk1JTkFMLApAQCAtMTU1LDcgKzE1NSw3IEBACiB9OwogCiAvKiBCLjQuMiAgQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YxIGFzX2hlYWRlcl9kZXNjID0geworc3RhdGljIHN0cnVjdCB1YWMxX2FzX2hlYWRlcl9kZXNjcmlwdG9yIGFzX2hlYWRlcl9kZXNjID0gewogCS5iTGVuZ3RoID0JCVVBQ19EVF9BU19IRUFERVJfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVUFDX0FTX0dFTkVSQUwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9mcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZnMuYwppbmRleCAyYWFhMGY3Li5lNGY1OTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9mcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2ZzLmMKQEAgLTcxNCw5ICs3MTQsNyBAQAogCQlzdHJ1Y3QgZmZzX2Z1bmN0aW9uICpmdW5jID0gZmZzLT5mdW5jOwogCQlyZXQgPSBmdW5jID8gZmZzX2Z1bmNfcmV2bWFwX2ludGYoZnVuYywgdmFsdWUpIDogLUVOT0RFVjsKIAl9IGVsc2UgaWYgKGdhZGdldC0+b3BzLT5pb2N0bCkgewotCQlsb2NrX2tlcm5lbCgpOwogCQlyZXQgPSBnYWRnZXQtPm9wcy0+aW9jdGwoZ2FkZ2V0LCBjb2RlLCB2YWx1ZSk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAl9IGVsc2UgewogCQlyZXQgPSAtRU5PVFRZOwogCX0KQEAgLTEzNzcsNyArMTM3NSw4IEBACiAKIHN0YXRpYyBpbnQgZnVuY3Rpb25mc19iaW5kKHN0cnVjdCBmZnNfZGF0YSAqZmZzLCBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7Ci0JdW5zaWduZWQgaSwgY291bnQ7CisJc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqKmxhbmc7CisJaW50IGZpcnN0X2lkOwogCiAJRU5URVIoKTsKIApAQCAtMTM4NSw3ICsxMzg0LDkgQEAKIAkJIHx8IHRlc3RfYW5kX3NldF9iaXQoRkZTX0ZMX0JPVU5ELCAmZmZzLT5mbGFncykpKQogCQlyZXR1cm4gLUVCQURGRDsKIAotCWZmc19kYXRhX2dldChmZnMpOworCWZpcnN0X2lkID0gdXNiX3N0cmluZ19pZHNfbihjZGV2LCBmZnMtPnN0cmluZ3NfY291bnQpOworCWlmICh1bmxpa2VseShmaXJzdF9pZCA8IDApKQorCQlyZXR1cm4gZmlyc3RfaWQ7CiAKIAlmZnMtPmVwMHJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGNkZXYtPmdhZGdldC0+ZXAwLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWZmcy0+ZXAwcmVxKSkKQEAgLTEzOTMsMjUgKzEzOTQsMTYgQEAKIAlmZnMtPmVwMHJlcS0+Y29tcGxldGUgPSBmZnNfZXAwX2NvbXBsZXRlOwogCWZmcy0+ZXAwcmVxLT5jb250ZXh0ID0gZmZzOwogCi0JLyogR2V0IHN0cmluZ3MgaWRlbnRpZmllcnMgKi8KLQlmb3IgKGNvdW50ID0gZmZzLT5zdHJpbmdzX2NvdW50LCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLQkJc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqKmxhbmc7Ci0KLQkJaW50IGlkID0gdXNiX3N0cmluZ19pZChjZGV2KTsKLQkJaWYgKHVubGlrZWx5KGlkIDwgMCkpIHsKLQkJCXVzYl9lcF9mcmVlX3JlcXVlc3QoY2Rldi0+Z2FkZ2V0LT5lcDAsIGZmcy0+ZXAwcmVxKTsKLQkJCWZmcy0+ZXAwcmVxID0gTlVMTDsKLQkJCXJldHVybiBpZDsKLQkJfQotCi0JCWxhbmcgPSBmZnMtPnN0cmluZ3RhYnM7Ci0JCWRvIHsKLQkJCSgqbGFuZyktPnN0cmluZ3NbaV0uaWQgPSBpZDsKLQkJCSsrbGFuZzsKLQkJfSB3aGlsZSAoKmxhbmcpOworCWxhbmcgPSBmZnMtPnN0cmluZ3RhYnM7CisJZm9yIChsYW5nID0gZmZzLT5zdHJpbmd0YWJzOyAqbGFuZzsgKytsYW5nKSB7CisJCXN0cnVjdCB1c2Jfc3RyaW5nICpzdHIgPSAoKmxhbmcpLT5zdHJpbmdzOworCQlpbnQgaWQgPSBmaXJzdF9pZDsKKwkJZm9yICg7IHN0ci0+czsgKytpZCwgKytzdHIpCisJCQlzdHItPmlkID0gaWQ7CiAJfQogCiAJZmZzLT5nYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CisJZmZzX2RhdGFfZ2V0KGZmcyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODAsOSArMTQ3Miw5IEBACiB9CiAKIAotc3RhdGljIGludCBmdW5jdGlvbmZzX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCi0JCQkgIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKLQkJCSAgc3RydWN0IGZmc19kYXRhICpmZnMpCitzdGF0aWMgaW50IGZ1bmN0aW9uZnNfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LAorCQkJCSAgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLAorCQkJCSAgc3RydWN0IGZmc19kYXRhICpmZnMpCiB7CiAJc3RydWN0IGZmc19mdW5jdGlvbiAqZnVuYzsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfaGlkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9oaWQuYwppbmRleCAxZTAwZmY5Li41M2UxMjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9oaWQuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9oaWQuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiBzdGF0aWMgc3NpemVfdCBmX2hpZGdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwdHIpCiB7Ci0Jc3RydWN0IGZfaGlkZwkqaGlkZyAgICAgPSAoc3RydWN0IGZfaGlkZyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZl9oaWRnCSpoaWRnICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyCQkqdG1wX2J1ZmYgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKQEAgLTIwMCw3ICsyMDAsNyBAQAogc3RhdGljIHNzaXplX3QgZl9oaWRnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZwKQogewotCXN0cnVjdCBmX2hpZGcgKmhpZGcgID0gKHN0cnVjdCBmX2hpZGcgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZfaGlkZyAqaGlkZyAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3NpemVfdCBzdGF0dXMgPSAtRU5PTUVNOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQpAQCAtMjU3LDcgKzI1Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZl9oaWRnX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0Jc3RydWN0IGZfaGlkZwkqaGlkZyAgPSAoc3RydWN0IGZfaGlkZyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZl9oaWRnCSpoaWRnICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQJcmV0ID0gMDsKIAogCXBvbGxfd2FpdChmaWxlLCAmaGlkZy0+cmVhZF9xdWV1ZSwgd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYwppbmRleCBlOTFkMWIxLi40MzIyNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9faW5pdCBsb29wYmFja19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCitzdGF0aWMgaW50IF9fcmVmIGxvb3BiYWNrX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlzdHJ1Y3QgZl9sb29wYmFjawkqbG9vcDsKIAlpbnQJCQlzdGF0dXM7CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGxvb3BiYWNrX2RyaXZlciA9IHsKK3N0YXRpYyAgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGxvb3BiYWNrX2RyaXZlciA9IHsKIAkubGFiZWwJCT0gImxvb3BiYWNrIiwKIAkuc3RyaW5ncwk9IGxvb3BiYWNrX3N0cmluZ3MsCiAJLmJpbmQJCT0gbG9vcGJhY2tfYmluZF9jb25maWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IDRjZTg5OWMuLjMyY2NlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0zMTYsNiArMzE2LDI3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdHJ1Y3QgZnNnX2RldjsKK3N0cnVjdCBmc2dfY29tbW9uOworCisvKiBGU0YgY2FsbGJhY2sgZnVuY3Rpb25zICovCitzdHJ1Y3QgZnNnX29wZXJhdGlvbnMgeworCS8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aHJlYWQgZXhpdHMuICBJZiBubworCSAqIGNhbGxiYWNrIGlzIHNldCBvciBpdCByZXR1cm5zIHZhbHVlIGxvd2VyIHRoZW4gemVybyBNU0YKKwkgKiB3aWxsIGZvcmNlIGVqZWN0IGFsbCBMVU5zIGl0IG9wZXJhdGVzIG9uIChpbmNsdWRpbmcgdGhvc2UKKwkgKiBtYXJrZWQgYXMgbm9uLXJlbW92YWJsZSBvciB3aXRoIHByZXZlbnRfbWVkaXVtX3JlbW92YWwgZmxhZworCSAqIHNldCkuICovCisJaW50ICgqdGhyZWFkX2V4aXRzKShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKTsKKworCS8qIENhbGxlZCBwcmlvciB0byBlamVjdGlvbi4gIE5lZ2F0aXZlIHJldHVybiBtZWFucyBlcnJvciwKKwkgKiB6ZXJvIG1lYW5zIHRvIGNvbnRpbnVlIHdpdGggZWplY3Rpb24sIHBvc2l0aXZlIG1lYW5zIG5vdCB0bworCSAqIGVqZWN0LiAqLworCWludCAoKnByZV9lamVjdCkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwKKwkJCSBzdHJ1Y3QgZnNnX2x1biAqbHVuLCBpbnQgbnVtKTsKKwkvKiBDYWxsZWQgYWZ0ZXIgZWplY3Rpb24uICBOZWdhdGl2ZSByZXR1cm4gbWVhbnMgZXJyb3IsIHplcm8KKwkgKiBvciBwb3NpdGl2ZSBpcyBqdXN0IGEgc3VjY2Vzcy4gKi8KKwlpbnQgKCpwb3N0X2VqZWN0KShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLAorCQkJICBzdHJ1Y3QgZnNnX2x1biAqbHVuLCBpbnQgbnVtKTsKK307CiAKIAogLyogRGF0YSBzaGFyZWQgYnkgYWxsIHRoZSBGU0cgaW5zdGFuY2VzLiAqLwpAQCAtMzMzLDcgKzM1NCw2IEBACiAJc3RydWN0IHVzYl9lcAkJKmVwMDsJCS8qIENvcHkgb2YgZ2FkZ2V0LT5lcDAgKi8KIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJKmVwMHJlcTsJLyogQ29weSBvZiBjZGV2LT5yZXEgKi8KIAl1bnNpZ25lZCBpbnQJCWVwMF9yZXFfdGFnOwotCWNvbnN0IGNoYXIJCSplcDByZXFfbmFtZTsKIAogCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19maWxsOwogCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90b19kcmFpbjsKQEAgLTM2OSw4ICszODksOCBAQAogCXN0cnVjdCBjb21wbGV0aW9uCXRocmVhZF9ub3RpZmllcjsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZF90YXNrOwogCi0JLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRocmVhZCBleGl0cy4gKi8KLQlpbnQJCQkoKnRocmVhZF9leGl0cykoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbik7CisJLyogQ2FsbGJhY2sgZnVuY3Rpb25zLiAqLworCWNvbnN0IHN0cnVjdCBmc2dfb3BlcmF0aW9ucwkqb3BzOwogCS8qIEdhZGdldCdzIHByaXZhdGUgZGF0YS4gKi8KIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsKIApAQCAtMzk0LDEyICs0MTQsOCBAQAogCWNvbnN0IGNoYXIJCSpsdW5fbmFtZV9mb3JtYXQ7CiAJY29uc3QgY2hhcgkJKnRocmVhZF9uYW1lOwogCi0JLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRocmVhZCBleGl0cy4gIElmIG5vCi0JICogY2FsbGJhY2sgaXMgc2V0IG9yIGl0IHJldHVybnMgdmFsdWUgbG93ZXIgdGhlbiB6ZXJvIE1TRgotCSAqIHdpbGwgZm9yY2UgZWplY3QgYWxsIExVTnMgaXQgb3BlcmF0ZXMgb24gKGluY2x1ZGluZyB0aG9zZQotCSAqIG1hcmtlZCBhcyBub24tcmVtb3ZhYmxlIG9yIHdpdGggcHJldmVudF9tZWRpdW1fcmVtb3ZhbCBmbGFnCi0JICogc2V0KS4gKi8KLQlpbnQJCQkoKnRocmVhZF9leGl0cykoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbik7CisJLyogQ2FsbGJhY2sgZnVuY3Rpb25zLiAqLworCWNvbnN0IHN0cnVjdCBmc2dfb3BlcmF0aW9ucwkqb3BzOwogCS8qIEdhZGdldCdzIHByaXZhdGUgZGF0YS4gKi8KIAl2b2lkCQkJKnByaXZhdGVfZGF0YTsKIApAQCAtNDM1LDYgKzQ1MSw3IEBACiAJaWYgKGNvbW1vbi0+ZnNnKQogCQlyZXR1cm4gMTsKIAlFUlJPUihjb21tb24sICJjb21tb24tPmZzZyBpcyBOVUxMIGluICVzIGF0ICV1XG4iLCBmdW5jLCBsaW5lKTsKKwlXQVJOX09OKDEpOwogCXJldHVybiAwOwogfQogCkBAIC02MjMsOCArNjQwLDYgQEAKIAogCQkvKiBSZXNwb25kIHdpdGggZGF0YS9zdGF0dXMgKi8KIAkJcmVxLT5sZW5ndGggPSBtaW4oKHUxNikxLCB3X2xlbmd0aCk7Ci0JCWZzZy0+Y29tbW9uLT5lcDByZXFfbmFtZSA9Ci0JCQljdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOID8gImVwMC1pbiIgOiAiZXAwLW91dCI7CiAJCXJldHVybiBlcDBfcXVldWUoZnNnLT5jb21tb24pOwogCX0KIApAQCAtMTM5NSw0MyArMTQxMCw1NSBAQAogCX0gZWxzZSBpZiAoIWN1cmx1bi0+cmVtb3ZhYmxlKSB7CiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfQ09NTUFORDsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbG9laiA9IGNvbW1vbi0+Y21uZFs0XSAmIDB4MDI7Ci0Jc3RhcnQgPSBjb21tb24tPmNtbmRbNF0gJiAweDAxOwotCi0JLyogZWplY3QgY29kZSBmcm9tIGZpbGVfc3RvcmFnZS5jOmRvX3N0YXJ0X3N0b3AoKSAqLwotCi0JaWYgKChjb21tb24tPmNtbmRbMV0gJiB+MHgwMSkgIT0gMCB8fAkgIC8qIE1hc2sgYXdheSBJbW1lZCAqLwotCQkoY29tbW9uLT5jbW5kWzRdICYgfjB4MDMpICE9IDApIHsgLyogTWFzayBMb0VqLCBTdGFydCAqLworCX0gZWxzZSBpZiAoKGNvbW1vbi0+Y21uZFsxXSAmIH4weDAxKSAhPSAwIHx8IC8qIE1hc2sgYXdheSBJbW1lZCAqLworCQkgICAoY29tbW9uLT5jbW5kWzRdICYgfjB4MDMpICE9IDApIHsgLyogTWFzayBMb0VqLCBTdGFydCAqLwogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFzdGFydCkgewotCQkvKiBBcmUgd2UgYWxsb3dlZCB0byB1bmxvYWQgdGhlIG1lZGlhPyAqLwotCQlpZiAoY3VybHVuLT5wcmV2ZW50X21lZGl1bV9yZW1vdmFsKSB7Ci0JCQlMREJHKGN1cmx1biwgInVubG9hZCBhdHRlbXB0IHByZXZlbnRlZFxuIik7Ci0JCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19NRURJVU1fUkVNT1ZBTF9QUkVWRU5URUQ7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAobG9laikgewkvKiBTaW11bGF0ZSBhbiB1bmxvYWQvZWplY3QgKi8KLQkJCXVwX3JlYWQoJmNvbW1vbi0+ZmlsZXNlbSk7Ci0JCQlkb3duX3dyaXRlKCZjb21tb24tPmZpbGVzZW0pOwotCQkJZnNnX2x1bl9jbG9zZShjdXJsdW4pOwotCQkJdXBfd3JpdGUoJmNvbW1vbi0+ZmlsZXNlbSk7Ci0JCQlkb3duX3JlYWQoJmNvbW1vbi0+ZmlsZXNlbSk7Ci0JCX0KLQl9IGVsc2UgeworCWxvZWogID0gY29tbW9uLT5jbW5kWzRdICYgMHgwMjsKKwlzdGFydCA9IGNvbW1vbi0+Y21uZFs0XSAmIDB4MDE7CiAKLQkJLyogT3VyIGVtdWxhdGlvbiBkb2Vzbid0IHN1cHBvcnQgbW91bnRpbmc7IHRoZSBtZWRpdW0gaXMKLQkJICogYXZhaWxhYmxlIGZvciB1c2UgYXMgc29vbiBhcyBpdCBpcyBsb2FkZWQuICovCisJLyogT3VyIGVtdWxhdGlvbiBkb2Vzbid0IHN1cHBvcnQgbW91bnRpbmc7IHRoZSBtZWRpdW0gaXMKKwkgKiBhdmFpbGFibGUgZm9yIHVzZSBhcyBzb29uIGFzIGl0IGlzIGxvYWRlZC4gKi8KKwlpZiAoc3RhcnQpIHsKIAkJaWYgKCFmc2dfbHVuX2lzX29wZW4oY3VybHVuKSkgewogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAwOworCisJLyogQXJlIHdlIGFsbG93ZWQgdG8gdW5sb2FkIHRoZSBtZWRpYT8gKi8KKwlpZiAoY3VybHVuLT5wcmV2ZW50X21lZGl1bV9yZW1vdmFsKSB7CisJCUxEQkcoY3VybHVuLCAidW5sb2FkIGF0dGVtcHQgcHJldmVudGVkXG4iKTsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTUVESVVNX1JFTU9WQUxfUFJFVkVOVEVEOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWxvZWopCisJCXJldHVybiAwOworCisJLyogU2ltdWxhdGUgYW4gdW5sb2FkL2VqZWN0ICovCisJaWYgKGNvbW1vbi0+b3BzICYmIGNvbW1vbi0+b3BzLT5wcmVfZWplY3QpIHsKKwkJaW50IHIgPSBjb21tb24tPm9wcy0+cHJlX2VqZWN0KGNvbW1vbiwgY3VybHVuLAorCQkJCQkgICAgICAgY3VybHVuIC0gY29tbW9uLT5sdW5zKTsKKwkJaWYgKHVubGlrZWx5KHIgPCAwKSkKKwkJCXJldHVybiByOworCQllbHNlIGlmIChyKQorCQkJcmV0dXJuIDA7CisJfQorCisJdXBfcmVhZCgmY29tbW9uLT5maWxlc2VtKTsKKwlkb3duX3dyaXRlKCZjb21tb24tPmZpbGVzZW0pOworCWZzZ19sdW5fY2xvc2UoY3VybHVuKTsKKwl1cF93cml0ZSgmY29tbW9uLT5maWxlc2VtKTsKKwlkb3duX3JlYWQoJmNvbW1vbi0+ZmlsZXNlbSk7CisKKwlyZXR1cm4gY29tbW9uLT5vcHMgJiYgY29tbW9uLT5vcHMtPnBvc3RfZWplY3QKKwkJPyBtaW4oMCwgY29tbW9uLT5vcHMtPnBvc3RfZWplY3QoY29tbW9uLCBjdXJsdW4sCisJCQkJCQkgY3VybHVuIC0gY29tbW9uLT5sdW5zKSkKKwkJOiAwOwogfQogCiAKQEAgLTI2MTAsNyArMjYzNyw4IEBACiAJY29tbW9uLT50aHJlYWRfdGFzayA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZjb21tb24tPmxvY2spOwogCi0JaWYgKCFjb21tb24tPnRocmVhZF9leGl0cyB8fCBjb21tb24tPnRocmVhZF9leGl0cyhjb21tb24pIDwgMCkgeworCWlmICghY29tbW9uLT5vcHMgfHwgIWNvbW1vbi0+b3BzLT50aHJlYWRfZXhpdHMKKwkgfHwgY29tbW9uLT5vcHMtPnRocmVhZF9leGl0cyhjb21tb24pIDwgMCkgewogCQlzdHJ1Y3QgZnNnX2x1biAqY3VybHVuID0gY29tbW9uLT5sdW5zOwogCQl1bnNpZ25lZCBpID0gY29tbW9uLT5ubHVuczsKIApAQCAtMjY4Niw2ICsyNzE0LDcgQEAKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDA7CiAJfQogCisJY29tbW9uLT5vcHMgPSBjZmctPm9wczsKIAljb21tb24tPnByaXZhdGVfZGF0YSA9IGNmZy0+cHJpdmF0ZV9kYXRhOwogCiAJY29tbW9uLT5nYWRnZXQgPSBnYWRnZXQ7CkBAIC0yODA3LDcgKzI4MzYsNiBAQAogCiAKIAkvKiBUZWxsIHRoZSB0aHJlYWQgdG8gc3RhcnQgd29ya2luZyAqLwotCWNvbW1vbi0+dGhyZWFkX2V4aXRzID0gY2ZnLT50aHJlYWRfZXhpdHM7CiAJY29tbW9uLT50aHJlYWRfdGFzayA9CiAJCWt0aHJlYWRfY3JlYXRlKGZzZ19tYWluX3RocmVhZCwgY29tbW9uLAogCQkJICAgICAgIE9SKGNmZy0+dGhyZWFkX25hbWUsICJmaWxlLXN0b3JhZ2UiKSk7CkBAIC0yOTkwLDkgKzMwMTgsOSBAQAogCU5VTEwsCiB9OwogCi1zdGF0aWMgaW50IGZzZ19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LAotCQkgICBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsCi0JCSAgIHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCitzdGF0aWMgaW50IGZzZ19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCQkgICBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsCisJCQkgICBzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQogewogCXN0cnVjdCBmc2dfZGV2ICpmc2c7CiAJaW50IHJjOwpAQCAtMzAyNCw2ICszMDUyLDEzIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW5saW5lIGludCBfX2RlcHJlY2F0ZWQgX19tYXliZV91bnVzZWQKK2ZzZ19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LAorCXN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKKwlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXJldHVybiBmc2dfYmluZF9jb25maWcoY2RldiwgYywgY29tbW9uKTsKK30KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBNb2R1bGUgcGFyYW1ldGVycyAqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzA5Niw4ICszMTMxLDggQEAKIAljZmctPnByb2R1Y3RfbmFtZSA9IDA7CiAJY2ZnLT5yZWxlYXNlID0gMHhmZmZmOwogCi0JY2ZnLT50aHJlYWRfZXhpdHMgPSAwOwotCWNmZy0+cHJpdmF0ZV9kYXRhID0gMDsKKwljZmctPm9wcyA9IE5VTEw7CisJY2ZnLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCiAJLyogRmluYWxpc2UgKi8KIAljZmctPmNhbl9zdGFsbCA9IHBhcmFtcy0+c3RhbGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKaW5kZXggNmQzY2M0NC4uNjg1ZDc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0IHNvdXJjZXNpbmtfYmluZF9jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQorc3RhdGljIGludCBfX3JlZiBzb3VyY2VzaW5rX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlzdHJ1Y3QgZl9zb3VyY2VzaW5rCSpzczsKIAlpbnQJCQlzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggYjQ5ZDg2ZS4uYTg1N2I3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtNTYsNyArNTYsNyBAQAogICogZm9sbG93aW5nIHByb3RvY29sczogUkJDICgweDAxKSwgQVRBUEkgb3IgU0ZGLTgwMjBpICgweDAyKSwgUUlDLTE1NyAoMGMwMyksCiAgKiBVRkkgKDB4MDQpLCBTRkYtODA3MGkgKDB4MDUpLCBhbmQgdHJhbnNwYXJlbnQgU0NTSSAoMHgwNiksIHNlbGVjdGVkIGJ5CiAgKiB0aGUgb3B0aW9uYWwgInByb3RvY29sIiBtb2R1bGUgcGFyYW1ldGVyLiAgSW4gYWRkaXRpb24sIHRoZSBkZWZhdWx0Ci0gKiBWZW5kb3IgSUQsIFByb2R1Y3QgSUQsIGFuZCByZWxlYXNlIG51bWJlciBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAqIFZlbmRvciBJRCwgUHJvZHVjdCBJRCwgcmVsZWFzZSBudW1iZXIgYW5kIHNlcmlhbCBudW1iZXIgY2FuIGJlIG92ZXJyaWRkZW4uCiAgKgogICogVGhlcmUgaXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbG9naWNhbCB1bml0cyAoTFVOcyksIGVhY2ggb2Ygd2hpY2ggaGFzCiAgKiBpdHMgb3duIGJhY2tpbmcgZmlsZS4gIFRoZSBudW1iZXIgb2YgTFVOcyBjYW4gYmUgc2V0IHVzaW5nIHRoZSBvcHRpb25hbApAQCAtOTMsNiArOTMsOCBAQAogICoJcmVtb3ZhYmxlCQlEZWZhdWx0IGZhbHNlLCBib29sZWFuIGZvciByZW1vdmFibGUgbWVkaWEKICAqCWx1bnM9TgkJCURlZmF1bHQgTiA9IG51bWJlciBvZiBmaWxlbmFtZXMsIG51bWJlciBvZgogICoJCQkJCUxVTnMgdG8gc3VwcG9ydAorICoJbm9mdWE9YlssYi4uLl0JCURlZmF1bHQgZmFsc2UsIGJvb2xlYW5zIGZvciBpZ25vcmUgRlVBIGZsYWcKKyAqCQkJCQlpbiBTQ1NJIFdSSVRFKDEwLDEyKSBjb21tYW5kcwogICoJc3RhbGwJCQlEZWZhdWx0IGRldGVybWluZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIG9mCiAgKgkJCQkJVVNCIGRldmljZSBjb250cm9sbGVyICh1c3VhbGx5IHRydWUpLAogICoJCQkJCWJvb2xlYW4gdG8gcGVybWl0IHRoZSBkcml2ZXIgdG8gaGFsdApAQCAtMTA2LDE3ICsxMDgsMTggQEAKICAqCXZlbmRvcj0weFZWVlYJCURlZmF1bHQgMHgwNTI1IChOZXRDaGlwKSwgVVNCIFZlbmRvciBJRAogICoJcHJvZHVjdD0weFBQUFAJCURlZmF1bHQgMHhhNGE1IChGU0cpLCBVU0IgUHJvZHVjdCBJRAogICoJcmVsZWFzZT0weFJSUlIJCU92ZXJyaWRlIHRoZSBVU0IgcmVsZWFzZSBudW1iZXIgKGJjZERldmljZSkKKyAqCXNlcmlhbD1ISEhILi4uCQlPdmVycmlkZSBzZXJpYWwgbnVtYmVyIChzdHJpbmcgb2YgaGV4IGNoYXJzKQogICoJYnVmbGVuPU4JCURlZmF1bHQgTj0xNjM4NCwgYnVmZmVyIHNpemUgdXNlZCAod2lsbCBiZQogICoJCQkJCXJvdW5kZWQgZG93biB0byBhIG11bHRpcGxlIG9mCiAgKgkJCQkJUEFHRV9DQUNIRV9TSVpFKQogICoKICAqIElmIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldCwgb25seSB0aGUgImZpbGUiLCAicm8iLAotICogInJlbW92YWJsZSIsICJsdW5zIiwgInN0YWxsIiwgYW5kICJjZHJvbSIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOyBkZWZhdWx0Ci0gKiB2YWx1ZXMgYXJlIHVzZWQgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4KKyAqICJyZW1vdmFibGUiLCAibHVucyIsICJub2Z1YSIsICJzdGFsbCIsIGFuZCAiY2Ryb20iIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTsKKyAqIGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkIGZvciBldmVyeXRoaW5nIGVsc2UuCiAgKgogICogVGhlIHBhdGhuYW1lcyBvZiB0aGUgYmFja2luZyBmaWxlcyBhbmQgdGhlIHJvIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgaW4KLSAqIHRoZSBhdHRyaWJ1dGUgZmlsZXMgImZpbGUiIGFuZCAicm8iIGluIHRoZSBsdW48bj4gc3ViZGlyZWN0b3J5IG9mIHRoZQotICogZ2FkZ2V0J3Mgc3lzZnMgZGlyZWN0b3J5LiAgSWYgdGhlICJyZW1vdmFibGUiIG9wdGlvbiBpcyBzZXQsIHdyaXRpbmcgdG8KKyAqIHRoZSBhdHRyaWJ1dGUgZmlsZXMgImZpbGUiLCAibm9mdWEiLCBhbmQgInJvIiBpbiB0aGUgbHVuPG4+IHN1YmRpcmVjdG9yeSBvZgorICogdGhlIGdhZGdldCdzIHN5c2ZzIGRpcmVjdG9yeS4gIElmIHRoZSAicmVtb3ZhYmxlIiBvcHRpb24gaXMgc2V0LCB3cml0aW5nIHRvCiAgKiB0aGVzZSBmaWxlcyB3aWxsIHNpbXVsYXRlIGVqZWN0aW5nL2xvYWRpbmcgdGhlIG1lZGl1bSAod3JpdGluZyBhbiBlbXB0eQogICogbGluZSBtZWFucyBlamVjdCkgYW5kIGFkanVzdGluZyBhIHdyaXRlLWVuYWJsZSB0YWIuICBDaGFuZ2VzIHRvIHRoZSBybwogICogc2V0dGluZyBhcmUgbm90IGFsbG93ZWQgd2hlbiB0aGUgbWVkaXVtIGlzIGxvYWRlZCBvciBpZiBDRC1ST00gZW11bGF0aW9uCkBAIC0yNzAsNiArMjczLDggQEAKIAogI2RlZmluZSBEUklWRVJfREVTQwkJIkZpbGUtYmFja2VkIFN0b3JhZ2UgR2FkZ2V0IgogI2RlZmluZSBEUklWRVJfTkFNRQkJImdfZmlsZV9zdG9yYWdlIgorLyogRFJJVkVSX1ZFUlNJT04gbXVzdCBiZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMgbG9uZywgYXMgaXQgaXMgdXNlZAorICogdG8gZ2VuZXJhdGUgYSBmYWxsYmFjayBzZXJpYWwgbnVtYmVyLiAqLwogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjIwIE5vdmVtYmVyIDIwMDgiCiAKIHN0YXRpYyAgICAgICBjaGFyIGZzZ19zdHJpbmdfbWFudWZhY3R1cmVyWzY0XTsKQEAgLTMwMSw4ICszMDYsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgewogCWNoYXIJCSpmaWxlW0ZTR19NQVhfTFVOU107CiAJaW50CQlyb1tGU0dfTUFYX0xVTlNdOworCWludAkJbm9mdWFbRlNHX01BWF9MVU5TXTsKIAl1bnNpZ25lZCBpbnQJbnVtX2ZpbGVuYW1lczsKIAl1bnNpZ25lZCBpbnQJbnVtX3JvczsKKwl1bnNpZ25lZCBpbnQJbnVtX25vZnVhczsKIAl1bnNpZ25lZCBpbnQJbmx1bnM7CiAKIAlpbnQJCXJlbW92YWJsZTsKQEAgLTMxNCw2ICszMjEsNyBAQAogCXVuc2lnbmVkIHNob3J0CXZlbmRvcjsKIAl1bnNpZ25lZCBzaG9ydAlwcm9kdWN0OwogCXVuc2lnbmVkIHNob3J0CXJlbGVhc2U7CisJY2hhcgkJKnNlcmlhbDsKIAl1bnNpZ25lZCBpbnQJYnVmbGVuOwogCiAJaW50CQl0cmFuc3BvcnRfdHlwZTsKQEAgLTM0MSw2ICszNDksMTAgQEAKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChybywgbW9kX2RhdGEucm8sIGJvb2wsICZtb2RfZGF0YS5udW1fcm9zLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Mocm8sICJ0cnVlIHRvIGZvcmNlIHJlYWQtb25seSIpOwogCittb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobm9mdWEsIG1vZF9kYXRhLm5vZnVhLCBib29sLCAmbW9kX2RhdGEubnVtX25vZnVhcywKKwkJU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG5vZnVhLCAidHJ1ZSB0byBpZ25vcmUgU0NTSSBXUklURSgxMCwxMikgRlVBIGJpdCIpOworCiBtb2R1bGVfcGFyYW1fbmFtZWQobHVucywgbW9kX2RhdGEubmx1bnMsIHVpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhsdW5zLCAibnVtYmVyIG9mIExVTnMiKTsKIApAQCAtMzUzLDYgKzM2NSw4IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoY2Ryb20sIG1vZF9kYXRhLmNkcm9tLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2Ryb20sICJ0cnVlIHRvIGVtdWxhdGUgY2Ryb20gaW5zdGVhZCBvZiBkaXNrIik7CiAKK21vZHVsZV9wYXJhbV9uYW1lZChzZXJpYWwsIG1vZF9kYXRhLnNlcmlhbCwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhzZXJpYWwsICJVU0Igc2VyaWFsIG51bWJlciIpOwogCiAvKiBJbiB0aGUgbm9uLVRFU1QgdmVyc2lvbiwgb25seSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgbGlzdGVkIGFib3ZlCiAgKiBhcmUgYXZhaWxhYmxlLiAqLwpAQCAtMTI3Miw3ICsxMjg2LDggQEAKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpIHsJLy8gRlVBCisJCS8qIEZVQSAqLworCQlpZiAoIWN1cmx1bi0+bm9mdWEgJiYgKGZzZy0+Y21uZFsxXSAmIDB4MDgpKSB7CiAJCQlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAkJCWN1cmx1bi0+ZmlscC0+Zl9mbGFncyB8PSBPX0RTWU5DOwogCQkJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKQEAgLTMxMjYsNiArMzE0MSw3IEBACiAKIC8qIFRoZSB3cml0ZSBwZXJtaXNzaW9ucyBhbmQgc3RvcmVfeHh4IHBvaW50ZXJzIGFyZSBzZXQgaW4gZnNnX2JpbmQoKSAqLwogc3RhdGljIERFVklDRV9BVFRSKHJvLCAwNDQ0LCBmc2dfc2hvd19ybywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobm9mdWEsIDA2NDQsIGZzZ19zaG93X25vZnVhLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWxlLCAwNDQ0LCBmc2dfc2hvd19maWxlLCBOVUxMKTsKIAogCkBAIC0zMTk3LDYgKzMyMTMsNyBAQAogewogCWludAlwcm90OwogCWludAlnY251bTsKKwlpbnQJaTsKIAogCS8qIFN0b3JlIHRoZSBkZWZhdWx0IHZhbHVlcyAqLwogCW1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID0gVVNCX1BSX0JVTEs7CkBAIC0zMjcyLDEzICszMjg5LDY1IEBACiAJCUVSUk9SKGZzZywgImludmFsaWQgYnVmbGVuXG4iKTsKIAkJcmV0dXJuIC1FVE9PU01BTEw7CiAJfQorCiAjZW5kaWYgLyogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCAqLwogCisJLyogU2VyaWFsIHN0cmluZyBoYW5kbGluZy4KKwkgKiBPbiBhIHJlYWwgZGV2aWNlLCB0aGUgc2VyaWFsIHN0cmluZyB3b3VsZCBiZSBsb2FkZWQKKwkgKiBmcm9tIHBlcm1hbmVudCBzdG9yYWdlLiAqLworCWlmIChtb2RfZGF0YS5zZXJpYWwpIHsKKwkJY29uc3QgY2hhciAqY2g7CisJCXVuc2lnbmVkIGxlbiA9IDA7CisKKwkJLyogU2FuaXR5IGNoZWNrIDoKKwkJICogVGhlIENCW0ldIHNwZWNpZmljYXRpb24gbGltaXRzIHRoZSBzZXJpYWwgc3RyaW5nIHRvCisJCSAqIDEyIHVwcGVyY2FzZSBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzLgorCQkgKiBCQkIgbmVlZCBhdCBsZWFzdCAxMiB1cHBlcmNhc2UgaGV4YWRlY2ltYWwgY2hhcmFjdGVycywKKwkJICogd2l0aCBhIG1heGltdW0gb2YgMTI2LiAqLworCQlmb3IgKGNoID0gbW9kX2RhdGEuc2VyaWFsOyAqY2g7ICsrY2gpIHsKKwkJCSsrbGVuOworCQkJaWYgKCgqY2ggPCAnMCcgfHwgKmNoID4gJzknKSAmJgorCQkJICAgICgqY2ggPCAnQScgfHwgKmNoID4gJ0YnKSkgeyAvKiBub3QgdXBwZXJjYXNlIGhleCAqLworCQkJCVdBUk5JTkcoZnNnLAorCQkJCQkiSW52YWxpZCBzZXJpYWwgc3RyaW5nIGNoYXJhY3RlcjogJWM7ICIKKwkJCQkJIkZhaWxpbmcgYmFjayB0byBkZWZhdWx0XG4iLAorCQkJCQkqY2gpOworCQkJCWdvdG8gZmlsbF9zZXJpYWw7CisJCQl9CisJCX0KKwkJaWYgKGxlbiA+IDEyNiB8fAorCQkgICAgKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlID09IFVTQl9QUl9CVUxLICYmIGxlbiA8IDEyKSB8fAorCQkgICAgKG1vZF9kYXRhLnRyYW5zcG9ydF90eXBlICE9IFVTQl9QUl9CVUxLICYmIGxlbiA+IDEyKSkgeworCQkJV0FSTklORyhmc2csCisJCQkJIkludmFsaWQgc2VyaWFsIHN0cmluZyBsZW5ndGg7ICIKKwkJCQkiRmFpbGluZyBiYWNrIHRvIGRlZmF1bHRcbiIpOworCQkJZ290byBmaWxsX3NlcmlhbDsKKwkJfQorCQlmc2dfc3RyaW5nc1tGU0dfU1RSSU5HX1NFUklBTCAtIDFdLnMgPSBtb2RfZGF0YS5zZXJpYWw7CisJfSBlbHNlIHsKKwkJV0FSTklORyhmc2csCisJCQkiVXNlcnNwYWNlIGZhaWxlZCB0byBwcm92aWRlIHNlcmlhbCBudW1iZXI7ICIKKwkJCSJGYWlsaW5nIGJhY2sgdG8gZGVmYXVsdFxuIik7CitmaWxsX3NlcmlhbDoKKwkJLyogU2VyaWFsIG51bWJlciBub3Qgc3BlY2lmaWVkIG9yIGludmFsaWQsIG1ha2Ugb3VyIG93bi4KKwkJICogV2UganVzdCBlbmNvZGUgaXQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gc3RyaW5nLAorCQkgKiAxMiBjaGFyYWN0ZXJzIHRvIGNvbXBseSB3aXRoIGJvdGggQ0JbSV0gYW5kIEJCQiBzcGVjLgorCQkgKiBXYXJuaW5nIDogVHdvIGRldmljZXMgcnVubmluZyB0aGUgc2FtZSBrZXJuZWwgd2lsbCBoYXZlCisJCSAqIHRoZSBzYW1lIGZhbGxiYWNrIHNlcmlhbCBudW1iZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSArPSAyKSB7CisJCQl1bnNpZ25lZCBjaGFyCWMgPSBEUklWRVJfVkVSU0lPTltpIC8gMl07CisKKwkJCWlmICghYykKKwkJCQlicmVhazsKKwkJCXNwcmludGYoJmZzZ19zdHJpbmdfc2VyaWFsW2ldLCAiJTAyWCIsIGMpOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBfX2luaXQgZnNnX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3N0YXRpYyBpbnQgX19yZWYgZnNnX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKIHsKIAlzdHJ1Y3QgZnNnX2RldgkJKmZzZyA9IHRoZV9mc2c7CiAJaW50CQkJcmM7CkBAIC0zMzA1LDYgKzMzNzQsMTAgQEAKIAkJfQogCX0KIAorCS8qIE9ubHkgZm9yIHJlbW92YWJsZSBtZWRpYT8gKi8KKwlkZXZfYXR0cl9ub2Z1YS5hdHRyLm1vZGUgPSAwNjQ0OworCWRldl9hdHRyX25vZnVhLnN0b3JlID0gZnNnX3N0b3JlX25vZnVhOworCiAJLyogRmluZCBvdXQgaG93IG1hbnkgTFVOcyB0aGVyZSBzaG91bGQgYmUgKi8KIAlpID0gbW9kX2RhdGEubmx1bnM7CiAJaWYgKGkgPT0gMCkKQEAgLTMzMzAsNiArMzQwMyw3IEBACiAJCWN1cmx1bi0+cm8gPSBtb2RfZGF0YS5jZHJvbSB8fCBtb2RfZGF0YS5yb1tpXTsKIAkJY3VybHVuLT5pbml0aWFsbHlfcm8gPSBjdXJsdW4tPnJvOwogCQljdXJsdW4tPnJlbW92YWJsZSA9IG1vZF9kYXRhLnJlbW92YWJsZTsKKwkJY3VybHVuLT5ub2Z1YSA9IG1vZF9kYXRhLm5vZnVhW2ldOwogCQljdXJsdW4tPmRldi5yZWxlYXNlID0gbHVuX3JlbGVhc2U7CiAJCWN1cmx1bi0+ZGV2LnBhcmVudCA9ICZnYWRnZXQtPmRldjsKIAkJY3VybHVuLT5kZXYuZHJpdmVyID0gJmZzZ19kcml2ZXIuZHJpdmVyOwpAQCAtMzM0NCw2ICszNDE4LDggQEAKIAkJaWYgKChyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsCiAJCQkJCSZkZXZfYXR0cl9ybykpICE9IDAgfHwKIAkJCQkocmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfbm9mdWEpKSAhPSAwIHx8CisJCQkJKHJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjdXJsdW4tPmRldiwKIAkJCQkJJmRldl9hdHRyX2ZpbGUpKSAhPSAwKSB7CiAJCQlkZXZpY2VfdW5yZWdpc3RlcigmY3VybHVuLT5kZXYpOwogCQkJZ290byBvdXQ7CkBAIC0zNDQ3LDE2ICszNTIzLDYgQEAKIAkJCWluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJCWdhZGdldC0+bmFtZSk7CiAKLQkvKiBPbiBhIHJlYWwgZGV2aWNlLCBzZXJpYWxbXSB3b3VsZCBiZSBsb2FkZWQgZnJvbSBwZXJtYW5lbnQKLQkgKiBzdG9yYWdlLiAgV2UganVzdCBlbmNvZGUgaXQgZnJvbSB0aGUgZHJpdmVyIHZlcnNpb24gc3RyaW5nLiAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgZnNnX3N0cmluZ19zZXJpYWwgLSAyOyBpICs9IDIpIHsKLQkJdW5zaWduZWQgY2hhcgkJYyA9IERSSVZFUl9WRVJTSU9OW2kgLyAyXTsKLQotCQlpZiAoIWMpCi0JCQlicmVhazsKLQkJc3ByaW50ZigmZnNnX3N0cmluZ19zZXJpYWxbaV0sICIlMDJYIiwgYyk7Ci0JfQotCiAJZnNnLT50aHJlYWRfdGFzayA9IGt0aHJlYWRfY3JlYXRlKGZzZ19tYWluX3RocmVhZCwgZnNnLAogCQkJImZpbGUtc3RvcmFnZS1nYWRnZXQiKTsKIAlpZiAoSVNfRVJSKGZzZy0+dGhyZWFkX3Rhc2spKSB7CkBAIC0zNDc4LDggKzM1NDQsOCBAQAogCQkJCWlmIChJU19FUlIocCkpCiAJCQkJCXAgPSBOVUxMOwogCQkJfQotCQkJTElORk8oY3VybHVuLCAicm89JWQsIGZpbGU6ICVzXG4iLAotCQkJCQljdXJsdW4tPnJvLCAocCA/IHAgOiAiKGVycm9yKSIpKTsKKwkJCUxJTkZPKGN1cmx1biwgInJvPSVkLCBub2Z1YT0lZCwgZmlsZTogJXNcbiIsCisJCQkgICAgICBjdXJsdW4tPnJvLCBjdXJsdW4tPm5vZnVhLCAocCA/IHAgOiAiKGVycm9yKSIpKTsKIAkJfQogCX0KIAlrZnJlZShwYXRoYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX2Zmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKaW5kZXggZDFhZjI1My4uYTk0NzRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfZmZzLmMKQEAgLTMyLDEyICszMiwxMyBAQAogIyAgaW5jbHVkZSAidV9ldGhlci5jIgogCiBzdGF0aWMgdTggZ2ZzX2hvc3RhZGRyW0VUSF9BTEVOXTsKLSNlbHNlCi0jICBpZiAhZGVmaW5lZCBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfR0VORVJJQwotIyAgICBkZWZpbmUgQ09ORklHX1VTQl9GVU5DVElPTkZTX0dFTkVSSUMKKyMgIGlmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19FVEgKK3N0YXRpYyBpbnQgZXRoX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgdTggZXRoYWRkcltFVEhfQUxFTl0pOwogIyAgZW5kaWYKKyNlbHNlCiAjICBkZWZpbmUgZ2V0aGVyX2NsZWFudXAoKSBkbyB7IH0gd2hpbGUgKDApCiAjICBkZWZpbmUgZ2V0aGVyX3NldHVwKGdhZGdldCwgaG9zdGFkZHIpICAgKChpbnQpMCkKKyMgIGRlZmluZSBnZnNfaG9zdGFkZHIgTlVMTAogI2VuZGlmCiAKICNpbmNsdWRlICJmX2ZzLmMiCkBAIC0xMDcsMTUgKzEwOCw3IEBACiBlbnVtIHsKIAlHRlNfU1RSSU5HX01BTlVGQUNUVVJFUl9JRFgsCiAJR0ZTX1NUUklOR19QUk9EVUNUX0lEWCwKLSNpZmRlZiBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfUk5ESVMKLQlHRlNfU1RSSU5HX1JORElTX0NPTkZJR19JRFgsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfRVRICi0JR0ZTX1NUUklOR19FQ01fQ09ORklHX0lEWCwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19HRU5FUklDCi0JR0ZTX1NUUklOR19HRU5FUklDX0NPTkZJR19JRFgsCi0jZW5kaWYKKwlHRlNfU1RSSU5HX0ZJUlNUX0NPTkZJR19JRFgsCiB9OwogCiBzdGF0aWMgICAgICAgY2hhciBnZnNfbWFudWZhY3R1cmVyWzUwXTsKQEAgLTEyNiwxMyArMTE5LDEzIEBACiAJW0dGU19TVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0ucyA9IGdmc19tYW51ZmFjdHVyZXIsCiAJW0dGU19TVFJJTkdfUFJPRFVDVF9JRFhdLnMgPSBnZnNfZHJpdmVyX2Rlc2MsCiAjaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX1JORElTCi0JW0dGU19TVFJJTkdfUk5ESVNfQ09ORklHX0lEWF0ucyA9ICJGdW5jdGlvbkZTICsgUk5ESVMiLAorCXsgLnMgPSAiRnVuY3Rpb25GUyArIFJORElTIiB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX0VUSAotCVtHRlNfU1RSSU5HX0VDTV9DT05GSUdfSURYXS5zID0gIkZ1bmN0aW9uRlMgKyBFQ00iLAorCXsgLnMgPSAiRnVuY3Rpb25GUyArIEVDTSIgfSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19HRU5FUklDCi0JW0dGU19TVFJJTkdfR0VORVJJQ19DT05GSUdfSURYXS5zID0gIkZ1bmN0aW9uRlMiLAorCXsgLnMgPSAiRnVuY3Rpb25GUyIgfSwKICNlbmRpZgogCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KIH07CkBAIC0xNDYsNTkgKzEzOSwzMyBAQAogfTsKIAogCisKK3N0cnVjdCBnZnNfY29uZmlndXJhdGlvbiB7CisJc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGM7CisJaW50ICgqZXRoKShzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4ICpldGhhZGRyKTsKK30gZ2ZzX2NvbmZpZ3VyYXRpb25zW10gPSB7CiAjaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX1JORElTCi1zdGF0aWMgaW50IGdmc19kb19ybmRpc19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBnZnNfcm5kaXNfY29uZmlnX2RyaXZlciA9IHsKLQkubGFiZWwJCQk9ICJGdW5jdGlvbkZTICsgUk5ESVMiLAotCS5iaW5kCQkJPSBnZnNfZG9fcm5kaXNfY29uZmlnLAotCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMSwKLQkvKiAuaUNvbmZpZ3VyYXRpb24JPSBEWU5BTUlDICovCi0JLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCi19OwotIyAgZGVmaW5lIGdmc19hZGRfcm5kaXNfY29uZmlnKGNkZXYpIFwKLQl1c2JfYWRkX2NvbmZpZyhjZGV2LCAmZ2ZzX3JuZGlzX2NvbmZpZ19kcml2ZXIpCi0jZWxzZQotIyAgZGVmaW5lIGdmc19hZGRfcm5kaXNfY29uZmlnKGNkZXYpIDAKKwl7CisJCS5ldGgJCT0gcm5kaXNfYmluZF9jb25maWcsCisJfSwKICNlbmRpZgogCi0KICNpZmRlZiBDT05GSUdfVVNCX0ZVTkNUSU9ORlNfRVRICi1zdGF0aWMgaW50IGdmc19kb19lY21fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gZ2ZzX2VjbV9jb25maWdfZHJpdmVyID0gewotCS5sYWJlbAkJCT0gIkZ1bmN0aW9uRlMgKyBFQ00iLAotCS5iaW5kCQkJPSBnZnNfZG9fZWNtX2NvbmZpZywKLQkuYkNvbmZpZ3VyYXRpb25WYWx1ZQk9IDEsCi0JLyogLmlDb25maWd1cmF0aW9uCT0gRFlOQU1JQyAqLwotCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotfTsKLSMgIGRlZmluZSBnZnNfYWRkX2VjbV9jb25maWcoY2RldikgXAotCXVzYl9hZGRfY29uZmlnKGNkZXYsICZnZnNfZWNtX2NvbmZpZ19kcml2ZXIpCi0jZWxzZQotIyAgZGVmaW5lIGdmc19hZGRfZWNtX2NvbmZpZyhjZGV2KSAwCisJeworCQkuZXRoCQk9IGV0aF9iaW5kX2NvbmZpZywKKwl9LAogI2VuZGlmCiAKLQogI2lmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19HRU5FUklDCi1zdGF0aWMgaW50IGdmc19kb19nZW5lcmljX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIGdmc19nZW5lcmljX2NvbmZpZ19kcml2ZXIgPSB7Ci0JLmxhYmVsCQkJPSAiRnVuY3Rpb25GUyIsCi0JLmJpbmQJCQk9IGdmc19kb19nZW5lcmljX2NvbmZpZywKLQkuYkNvbmZpZ3VyYXRpb25WYWx1ZQk9IDIsCi0JLyogLmlDb25maWd1cmF0aW9uCT0gRFlOQU1JQyAqLwotCS5ibUF0dHJpYnV0ZXMJCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSLAotfTsKLSMgIGRlZmluZSBnZnNfYWRkX2dlbmVyaWNfY29uZmlnKGNkZXYpIFwKLQl1c2JfYWRkX2NvbmZpZyhjZGV2LCAmZ2ZzX2dlbmVyaWNfY29uZmlnX2RyaXZlcikKLSNlbHNlCi0jICBkZWZpbmUgZ2ZzX2FkZF9nZW5lcmljX2NvbmZpZyhjZGV2KSAwCisJeworCX0sCiAjZW5kaWYKK307CiAKIAogc3RhdGljIGludCBnZnNfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpOwogc3RhdGljIGludCBnZnNfdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CitzdGF0aWMgaW50IGdmc19kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciBnZnNfZHJpdmVyID0gewogCS5uYW1lCQk9IGdmc19zaG9ydF9uYW1lLApAQCAtMjY3LDcgKzIzNCw3IEBACiAKIHN0YXRpYyBpbnQgZ2ZzX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCUVOVEVSKCk7CiAKQEAgLTI4NCw1NyArMjUxLDMyIEBACiAJc25wcmludGYoZ2ZzX21hbnVmYWN0dXJlciwgc2l6ZW9mIGdmc19tYW51ZmFjdHVyZXIsICIlcyAlcyB3aXRoICVzIiwKIAkJIGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkJIGNkZXYtPmdhZGdldC0+bmFtZSk7Ci0JcmV0ID0gdXNiX3N0cmluZ19pZChjZGV2KTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCWdvdG8gZXJyb3I7Ci0JZ2ZzX3N0cmluZ3NbR0ZTX1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5pZCA9IHJldDsKLQlnZnNfZGV2X2Rlc2MuaU1hbnVmYWN0dXJlciA9IHJldDsKIAotCXJldCA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJcmV0ID0gdXNiX3N0cmluZ19pZHNfdGFiKGNkZXYsIGdmc19zdHJpbmdzKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCWdvdG8gZXJyb3I7Ci0JZ2ZzX3N0cmluZ3NbR0ZTX1NUUklOR19QUk9EVUNUX0lEWF0uaWQgPSByZXQ7Ci0JZ2ZzX2Rldl9kZXNjLmlQcm9kdWN0ID0gcmV0OwogCi0jaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX1JORElTCi0JcmV0ID0gdXNiX3N0cmluZ19pZChjZGV2KTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCWdvdG8gZXJyb3I7Ci0JZ2ZzX3N0cmluZ3NbR0ZTX1NUUklOR19STkRJU19DT05GSUdfSURYXS5pZCA9IHJldDsKLQlnZnNfcm5kaXNfY29uZmlnX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IHJldDsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX0VUSAotCXJldCA9IHVzYl9zdHJpbmdfaWQoY2Rldik7Ci0JaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlnb3RvIGVycm9yOwotCWdmc19zdHJpbmdzW0dGU19TVFJJTkdfRUNNX0NPTkZJR19JRFhdLmlkID0gcmV0OwotCWdmc19lY21fY29uZmlnX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IHJldDsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX0dFTkVSSUMKLQlyZXQgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkKLQkJZ290byBlcnJvcjsKLQlnZnNfc3RyaW5nc1tHRlNfU1RSSU5HX0dFTkVSSUNfQ09ORklHX0lEWF0uaWQgPSByZXQ7Ci0JZ2ZzX2dlbmVyaWNfY29uZmlnX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IHJldDsKLSNlbmRpZgorCWdmc19kZXZfZGVzYy5pTWFudWZhY3R1cmVyID0gZ2ZzX3N0cmluZ3NbR0ZTX1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5pZDsKKwlnZnNfZGV2X2Rlc2MuaVByb2R1Y3QgICAgICA9IGdmc19zdHJpbmdzW0dGU19TVFJJTkdfUFJPRFVDVF9JRFhdLmlkOwogCiAJcmV0ID0gZnVuY3Rpb25mc19iaW5kKGdmc19mZnNfZGF0YSwgY2Rldik7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlnb3RvIGVycm9yOwogCi0JcmV0ID0gZ2ZzX2FkZF9ybmRpc19jb25maWcoY2Rldik7Ci0JaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlnb3RvIGVycm9yX3VuYmluZDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnZnNfY29uZmlndXJhdGlvbnMpOyArK2kpIHsKKwkJc3RydWN0IGdmc19jb25maWd1cmF0aW9uICpjID0gZ2ZzX2NvbmZpZ3VyYXRpb25zICsgaTsKIAotCXJldCA9IGdmc19hZGRfZWNtX2NvbmZpZyhjZGV2KTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCWdvdG8gZXJyb3JfdW5iaW5kOworCQlyZXQgPSBHRlNfU1RSSU5HX0ZJUlNUX0NPTkZJR19JRFggKyBpOworCQljLT5jLmxhYmVsCQkJPSBnZnNfc3RyaW5nc1tyZXRdLnM7CisJCWMtPmMuaUNvbmZpZ3VyYXRpb24JCT0gZ2ZzX3N0cmluZ3NbcmV0XS5pZDsKKwkJYy0+Yy5iaW5kCQkJPSBnZnNfZG9fY29uZmlnOworCQljLT5jLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxICsgaTsKKwkJYy0+Yy5ibUF0dHJpYnV0ZXMJCT0gVVNCX0NPTkZJR19BVFRfU0VMRlBPV0VSOwogCi0JcmV0ID0gZ2ZzX2FkZF9nZW5lcmljX2NvbmZpZyhjZGV2KTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCi0JCWdvdG8gZXJyb3JfdW5iaW5kOworCQlyZXQgPSB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmYy0+Yyk7CisJCWlmICh1bmxpa2VseShyZXQgPCAwKSkKKwkJCWdvdG8gZXJyb3JfdW5iaW5kOworCX0KIAogCXJldHVybiAwOwogCkBAIC0zNjgsMTAgKzMxMCwxMCBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19nZnNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywKLQkJCSAgIGludCAoKmV0aCkoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCB1OCAqZXRoYWRkciksCi0JCQkgICB1OCAqZXRoYWRkcikKK3N0YXRpYyBpbnQgZ2ZzX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CisJc3RydWN0IGdmc19jb25maWd1cmF0aW9uICpnYyA9CisJCWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgZ2ZzX2NvbmZpZ3VyYXRpb24sIGMpOwogCWludCByZXQ7CiAKIAlpZiAoV0FSTl9PTighZ2ZzX2Zmc19kYXRhKSkKQEAgLTM4MiwxMyArMzI0LDEzIEBACiAJCWMtPmJtQXR0cmlidXRlcyB8PSBVU0JfQ09ORklHX0FUVF9XQUtFVVA7CiAJfQogCi0JaWYgKGV0aCkgewotCQlyZXQgPSBldGgoYywgZXRoYWRkcik7CisJaWYgKGdjLT5ldGgpIHsKKwkJcmV0ID0gZ2MtPmV0aChjLCBnZnNfaG9zdGFkZHIpOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IGZ1bmN0aW9uZnNfYWRkKGMtPmNkZXYsIGMsIGdmc19mZnNfZGF0YSk7CisJcmV0ID0gZnVuY3Rpb25mc19iaW5kX2NvbmZpZyhjLT5jZGV2LCBjLCBnZnNfZmZzX2RhdGEpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDA2LDMyICszNDgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19STkRJUwotc3RhdGljIGludCBnZnNfZG9fcm5kaXNfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKLXsKLQlFTlRFUigpOwotCi0JcmV0dXJuIF9fZ2ZzX2RvX2NvbmZpZyhjLCBybmRpc19iaW5kX2NvbmZpZywgZ2ZzX2hvc3RhZGRyKTsKLX0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1VTQl9GVU5DVElPTkZTX0VUSAotc3RhdGljIGludCBnZnNfZG9fZWNtX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCitzdGF0aWMgaW50IGV0aF9iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHU4IGV0aGFkZHJbRVRIX0FMRU5dKQogewotCUVOVEVSKCk7Ci0KLQlyZXR1cm4gX19nZnNfZG9fY29uZmlnKGMsCi0JCQkgICAgICAgY2FuX3N1cHBvcnRfZWNtKGMtPmNkZXYtPmdhZGdldCkKLQkJCSAgICAgPyBlY21fYmluZF9jb25maWcgOiBnZXRoX2JpbmRfY29uZmlnLAotCQkJICAgICAgIGdmc19ob3N0YWRkcik7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfRlVOQ1RJT05GU19HRU5FUklDCi1zdGF0aWMgaW50IGdmc19kb19nZW5lcmljX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCi17Ci0JRU5URVIoKTsKLQotCXJldHVybiBfX2dmc19kb19jb25maWcoYywgTlVMTCwgTlVMTCk7CisJcmV0dXJuIGNhbl9zdXBwb3J0X2VjbShjLT5jZGV2LT5nYWRnZXQpCisJCT8gZWNtX2JpbmRfY29uZmlnKGMsIGV0aGFkZHIpCisJCTogZ2V0aF9iaW5kX2NvbmZpZyhjLCBldGhhZGRyKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwppbmRleCAyYjU2Y2U2Li4xYjQxM2E1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiB9OwogCiAvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXzEgYWNfaGVhZGVyX2Rlc2MgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVhYzFfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfMSBhY19oZWFkZXJfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVQUNfRFRfQUNfSEVBREVSX1NJWkUoMSksCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogLyoKICAqIENyZWF0ZXMgYW4gb3V0cHV0IGVuZHBvaW50LCBhbmQgaW5pdGlhbGl6ZXMgb3V0cHV0IHBvcnRzLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBnbWlkaV9iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCitzdGF0aWMgaW50IF9fcmVmIGdtaWRpX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKIHsKIAlzdHJ1Y3QgZ21pZGlfZGV2aWNlICpkZXY7CiAJc3RydWN0IHVzYl9lcCAqaW5fZXAsICpvdXRfZXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaGlkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaGlkLmMKaW5kZXggNzc1NzIyNi4uNzM1NDk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2hpZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9oaWQuYwpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9faW5pdCBkb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQorc3RhdGljIGludCBfX3JlZiBkb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQogewogCXN0cnVjdCBoaWRnX2Z1bmNfbm9kZSAqZTsKIAlpbnQgZnVuYyA9IDAsIHN0YXR1cyA9IDA7CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBHYWRnZXQgQmluZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGhpZF9iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3N0YXRpYyBpbnQgX19yZWYgaGlkX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCBkZThhODM4Li5mYzM1NDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMTI5OSwxMSArMTI5OSw5IEBACiAJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0+Z2FkZ2V0OwogCWxvbmcgcmV0ID0gLUVOT1RUWTsKIAotCWlmIChnYWRnZXQtPm9wcy0+aW9jdGwpIHsKLQkJbG9ja19rZXJuZWwoKTsKKwlpZiAoZ2FkZ2V0LT5vcHMtPmlvY3RsKQogCQlyZXQgPSBnYWRnZXQtPm9wcy0+aW9jdGwgKGdhZGdldCwgY29kZSwgdmFsdWUpOwotCQl1bmxvY2tfa2VybmVsKCk7Ci0JfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg2NywxMyArMTg2NSw5IEBACiAJYnVmICs9IDQ7CiAJbGVuZ3RoIC09IDQ7CiAKLQlrYnVmID0ga21hbGxvYyAobGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChjb3B5X2Zyb21fdXNlciAoa2J1ZiwgYnVmLCBsZW5ndGgpKSB7Ci0JCWtmcmVlIChrYnVmKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQorCWtidWYgPSBtZW1kdXBfdXNlcihidWYsIGxlbmd0aCk7CisJaWYgKElTX0VSUihrYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIoa2J1Zik7CiAKIAlzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKIAl2YWx1ZSA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGFuZ3dlbGxfdWRjLmMKaW5kZXggYTM5MTM1MS4uYzJkMmEyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xhbmd3ZWxsX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sYW5nd2VsbF91ZGMuYwpAQCAtODQyLDkgKzg0Miw5IEBACiAJCVZEQkcoZGV2LCAicmVxLT5tYXBwZWQgPSAwXG4iKTsKIAl9CiAKLQlEQkcoZGV2LCAiJXMgcXVldWUgcmVxICVwLCBsZW4gJXUsIGJ1ZiAlcCwgZG1hIDB4JTA4eFxuIiwKLQkJCV9lcC0+bmFtZSwKLQkJCV9yZXEsIF9yZXEtPmxlbmd0aCwgX3JlcS0+YnVmLCBfcmVxLT5kbWEpOworCURCRyhkZXYsICIlcyBxdWV1ZSByZXEgJXAsIGxlbiAldSwgYnVmICVwLCBkbWEgMHglMDhsbHhcbiIsCisJICAgIF9lcC0+bmFtZSwKKwkgICAgX3JlcSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYsICh1bnNpZ25lZCBsb25nIGxvbmcpX3JlcS0+ZG1hKTsKIAogCV9yZXEtPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAlfcmVxLT5hY3R1YWwgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jCmluZGV4IDcwNWNjMWYuLjU4NWYyNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tYXNzX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbWFzc19zdG9yYWdlLmMKQEAgLTE0MSw5ICsxNDEsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbXNnX2RvX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCitzdGF0aWMgaW50IF9fcmVmIG1zZ19kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQogewotCXN0cnVjdCBmc2dfY29tbW9uICpjb21tb247CisJc3RhdGljIGNvbnN0IHN0cnVjdCBmc2dfb3BlcmF0aW9ucyBvcHMgPSB7CisJCS50aHJlYWRfZXhpdHMgPSBtc2dfdGhyZWFkX2V4aXRzLAorCX07CisJc3RhdGljIHN0cnVjdCBmc2dfY29tbW9uIGNvbW1vbjsKKworCXN0cnVjdCBmc2dfY29tbW9uICpyZXRwOwogCXN0cnVjdCBmc2dfY29uZmlnIGNvbmZpZzsKIAlpbnQgcmV0OwogCkBAIC0xNTMsMTMgKzE1OCwxNCBAQAogCX0KIAogCWZzZ19jb25maWdfZnJvbV9wYXJhbXMoJmNvbmZpZywgJm1vZF9kYXRhKTsKLQljb25maWcudGhyZWFkX2V4aXRzID0gbXNnX3RocmVhZF9leGl0czsKLQljb21tb24gPSBmc2dfY29tbW9uX2luaXQoMCwgYy0+Y2RldiwgJmNvbmZpZyk7Ci0JaWYgKElTX0VSUihjb21tb24pKQotCQlyZXR1cm4gUFRSX0VSUihjb21tb24pOworCWNvbmZpZy5vcHMgPSAmb3BzOwogCi0JcmV0ID0gZnNnX2FkZChjLT5jZGV2LCBjLCBjb21tb24pOwotCWZzZ19jb21tb25fcHV0KGNvbW1vbik7CisJcmV0cCA9IGZzZ19jb21tb25faW5pdCgmY29tbW9uLCBjLT5jZGV2LCAmY29uZmlnKTsKKwlpZiAoSVNfRVJSKHJldHApKQorCQlyZXR1cm4gUFRSX0VSUihyZXRwKTsKKworCXJldCA9IGZzZ19iaW5kX2NvbmZpZyhjLT5jZGV2LCBjLCAmY29tbW9uKTsKKwlmc2dfY29tbW9uX3B1dCgmY29tbW9uKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzYsNyArMTgyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogR2FkZ2V0IEJpbmQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLXN0YXRpYyBpbnQgX19pbml0IG1zZ19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3N0YXRpYyBpbnQgX19yZWYgbXNnX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQogewogCXN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQgPSBjZGV2LT5nYWRnZXQ7CiAJaW50IHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdWx0aS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKaW5kZXggYTkzMGQ3Zi4uNzk1ZDc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogCiAjaWYgZGVmaW5lZCBVU0JfRVRIX1JORElTCkBAIC0zNSwxNCArMzYsMTMgQEAKIAogCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiTXVsdGlmdW5jdGlvbiBDb21wb3NpdGUgR2FkZ2V0IgotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjIwMDkvMDcvMjEiCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiTWljaGFsIE5hemFyZXdpY3oiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBNVUxUSV9WRU5ET1JfTlVNCTB4MDUyNQkvKiBYWFggTmV0Q2hpcCAqLwotI2RlZmluZSBNVUxUSV9QUk9EVUNUX05VTQkweGE0YWIJLyogWFhYICovCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQWxsIHRoZSBmaWxlcy4uLiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKICAqIGtidWlsZCBpcyBub3QgdmVyeSBjb29wZXJhdGl2ZSB3aXRoIHJlc3BlY3QgdG8gbGlua2luZyBzZXBhcmF0ZWx5CkBAIC01Nyw2ICs1Nyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmMiCiAjaW5jbHVkZSAiZXBhdXRvY29uZi5jIgogCisjaW5jbHVkZSAiZl9tYXNzX3N0b3JhZ2UuYyIKKwogI2luY2x1ZGUgInVfc2VyaWFsLmMiCiAjaW5jbHVkZSAiZl9hY20uYyIKIApAQCAtNjgsMTMgKzcwLDI0IEBACiAjZW5kaWYKICNpbmNsdWRlICJ1X2V0aGVyLmMiCiAKLSN1bmRlZiBEQkcgICAgIC8qIHVfZXRoZXIuYyBoYXMgYnJva2VuIGlkZWEgYWJvdXQgbWFjcm9zICovCi0jdW5kZWYgVkRCRyAgICAvKiBzbyBjbGVhbiB1cCBhZnRlciBpdCAqLwotI3VuZGVmIEVSUk9SCi0jdW5kZWYgSU5GTwotI2luY2x1ZGUgImZfbWFzc19zdG9yYWdlLmMiCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBEZXZpY2UgRGVzY3JpcHRvciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1VTFRJX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIFhYWCBOZXRDaGlwICovCisjZGVmaW5lIE1VTFRJX1BST0RVQ1RfTlVNCTB4YTRhYgkvKiBYWFggKi8KKworCitlbnVtIHsKKwlfX01VTFRJX05PX0NPTkZJRywKKyNpZmRlZiBDT05GSUdfVVNCX0dfTVVMVElfUk5ESVMKKwlNVUxUSV9STkRJU19DT05GSUdfTlVNLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9HX01VTFRJX0NEQworCU1VTFRJX0NEQ19DT05GSUdfTlVNLAorI2VuZGlmCit9OworCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIGRldmljZV9kZXNjID0gewogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKQEAgLTgyLDgwICs5NSw4MiBAQAogCiAJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCi0JLyogLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwgKi8KLQkvKiAuYkRldmljZVN1YkNsYXNzID0JMCwgKi8KLQkvKiAuYkRldmljZVByb3RvY29sID0JMCwgKi8KLQkuYkRldmljZUNsYXNzID0JCTB4RUYsCisJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfTUlTQyAvKiAweEVGICovLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkyLAogCS5iRGV2aWNlUHJvdG9jb2wgPQkxLAotCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwogCiAJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLiAgKi8KIAkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoTVVMVElfVkVORE9SX05VTSksCiAJLmlkUHJvZHVjdCA9CQljcHVfdG9fbGUxNihNVUxUSV9QUk9EVUNUX05VTSksCi0JLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCi0JLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCi0JLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwotCS8qIE5PIFNFUklBTCBOVU1CRVIgKi8KLQkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yIG90Z19kZXNjcmlwdG9yID0gewotCS5iTGVuZ3RoID0JCXNpemVvZiBvdGdfZGVzY3JpcHRvciwKLQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKLQotCS8qIFJFVklTSVQgU1JQLW9ubHkgaGFyZHdhcmUgaXMgcG9zc2libGUsIGFsdGhvdWdoCi0JICogaXQgd291bGQgbm90IGJlIGNhbGxlZCAiT1RHIiAuLi4KLQkgKi8KLQkuYm1BdHRyaWJ1dGVzID0JCVVTQl9PVEdfU1JQIHwgVVNCX09UR19ITlAsCi19OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqb3RnX2Rlc2NbXSA9IHsKLQkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAmb3RnX2Rlc2NyaXB0b3IsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikgJihzdHJ1Y3QgdXNiX290Z19kZXNjcmlwdG9yKXsKKwkJLmJMZW5ndGggPQkJc2l6ZW9mKHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IpLAorCQkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX09URywKKworCQkvKgorCQkgKiBSRVZJU0lUIFNSUC1vbmx5IGhhcmR3YXJlIGlzIHBvc3NpYmxlLCBhbHRob3VnaAorCQkgKiBpdCB3b3VsZCBub3QgYmUgY2FsbGVkICJPVEciIC4uLgorCQkgKi8KKwkJLmJtQXR0cmlidXRlcyA9CQlVU0JfT1RHX1NSUCB8IFVTQl9PVEdfSE5QLAorCX0sCiAJTlVMTCwKIH07CiAKIAotLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KLQotI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWAkJMAotI2RlZmluZSBTVFJJTkdfUFJPRFVDVF9JRFgJCTEKK2VudW0geworCU1VTFRJX1NUUklOR19NQU5VRkFDVFVSRVJfSURYLAorCU1VTFRJX1NUUklOR19QUk9EVUNUX0lEWCwKKyNpZmRlZiBDT05GSUdfVVNCX0dfTVVMVElfUk5ESVMKKwlNVUxUSV9TVFJJTkdfUk5ESVNfQ09ORklHX0lEWCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfR19NVUxUSV9DREMKKwlNVUxUSV9TVFJJTkdfQ0RDX0NPTkZJR19JRFgsCisjZW5kaWYKK307CiAKIHN0YXRpYyBjaGFyIG1hbnVmYWN0dXJlcls1MF07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3N0cmluZyBzdHJpbmdzX2RldltdID0gewotCVtTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0ucyA9IG1hbnVmYWN0dXJlciwKLQlbU1RSSU5HX1BST0RVQ1RfSURYXS5zID0gRFJJVkVSX0RFU0MsCisJW01VTFRJX1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5zID0gbWFudWZhY3R1cmVyLAorCVtNVUxUSV9TVFJJTkdfUFJPRFVDVF9JRFhdLnMgICAgICA9IERSSVZFUl9ERVNDLAorI2lmZGVmIENPTkZJR19VU0JfR19NVUxUSV9STkRJUworCVtNVUxUSV9TVFJJTkdfUk5ESVNfQ09ORklHX0lEWF0ucyA9ICJNdWx0aWZ1bmN0aW9uIHdpdGggUk5ESVMiLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1VTQl9HX01VTFRJX0NEQworCVtNVUxUSV9TVFJJTkdfQ0RDX0NPTkZJR19JRFhdLnMgICA9ICJNdWx0aWZ1bmN0aW9uIHdpdGggQ0RDIEVDTSIsCisjZW5kaWYKIAl7ICB9IC8qIGVuZCBvZiBsaXN0ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWJfZGV2ID0gewotCS5sYW5ndWFnZQk9IDB4MDQwOSwJLyogZW4tdXMgKi8KLQkuc3RyaW5ncwk9IHN0cmluZ3NfZGV2LAotfTsKLQogc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmluZ3MgKmRldl9zdHJpbmdzW10gPSB7Ci0JJnN0cmluZ3RhYl9kZXYsCisJJihzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzKXsKKwkJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCQkuc3RyaW5ncwk9IHN0cmluZ3NfZGV2LAorCX0sCiAJTlVMTCwKIH07CiAKLXN0YXRpYyB1OCBob3N0YWRkcltFVEhfQUxFTl07CiAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHN0cnVjdCBmc2dfbW9kdWxlX3BhcmFtZXRlcnMgbW9kX2RhdGEgPSB7Ci0JLnN0YWxsID0gMQotfTsKLUZTR19NT0RVTEVfUEFSQU1FVEVSUygvKiBubyBwcmVmaXggKi8sIG1vZF9kYXRhKTsKK3N0YXRpYyBzdHJ1Y3QgZnNnX21vZHVsZV9wYXJhbWV0ZXJzIGZzZ19tb2RfZGF0YSA9IHsgLnN0YWxsID0gMSB9OworRlNHX01PRFVMRV9QQVJBTUVURVJTKC8qIG5vIHByZWZpeCAqLywgZnNnX21vZF9kYXRhKTsKIAotc3RhdGljIHN0cnVjdCBmc2dfY29tbW9uICpmc2dfY29tbW9uOworc3RhdGljIHN0cnVjdCBmc2dfY29tbW9uIGZzZ19jb21tb247CiAKK3N0YXRpYyB1OCBob3N0YWRkcltFVEhfQUxFTl07CisKKworLyoqKioqKioqKiogUk5ESVMgKioqKioqKioqKi8KIAogI2lmZGVmIFVTQl9FVEhfUk5ESVMKIAotc3RhdGljIGludCBfX2luaXQgcm5kaXNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3N0YXRpYyBfX3JlZiBpbnQgcm5kaXNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlpbnQgcmV0OwogCkBAIC0xNzIsMjYgKzE4Nyw0MiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZnNnX2FkZChjLT5jZGV2LCBjLCBmc2dfY29tbW9uKTsKKwlyZXQgPSBmc2dfYmluZF9jb25maWcoYy0+Y2RldiwgYywgJmZzZ19jb21tb24pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gcm5kaXNfY29uZmlnX2RyaXZlciA9IHsKLQkubGFiZWwJCQk9ICJNdWx0aWZ1bmN0aW9uIENvbXBvc2l0ZSAoUk5ESVMgKyBNUyArIEFDTSkiLAotCS5iaW5kCQkJPSBybmRpc19kb19jb25maWcsCi0JLmJDb25maWd1cmF0aW9uVmFsdWUJPSAyLAotCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KLQkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLX07CitzdGF0aWMgaW50IHJuZGlzX2NvbmZpZ19yZWdpc3RlcihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJc3RhdGljIHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiBjb25maWcgPSB7CisJCS5iaW5kCQkJPSBybmRpc19kb19jb25maWcsCisJCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gTVVMVElfUk5ESVNfQ09ORklHX05VTSwKKwkJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJfTsKKworCWNvbmZpZy5sYWJlbCAgICAgICAgICA9IHN0cmluZ3NfZGV2W01VTFRJX1NUUklOR19STkRJU19DT05GSUdfSURYXS5zOworCWNvbmZpZy5pQ29uZmlndXJhdGlvbiA9IHN0cmluZ3NfZGV2W01VTFRJX1NUUklOR19STkRJU19DT05GSUdfSURYXS5pZDsKKworCXJldHVybiB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmY29uZmlnKTsKK30KKworI2Vsc2UKKworc3RhdGljIGludCBybmRpc19jb25maWdfcmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCXJldHVybiAwOworfQogCiAjZW5kaWYKIAorCisvKioqKioqKioqKiBDREMgRUNNICoqKioqKioqKiovCisKICNpZmRlZiBDT05GSUdfVVNCX0dfTVVMVElfQ0RDCiAKLXN0YXRpYyBpbnQgX19pbml0IGNkY19kb19jb25maWcoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjKQorc3RhdGljIF9fcmVmIGludCBjZGNfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlpbnQgcmV0OwogCkBAIC0yMDgsMjAgKzIzOSwzMyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZnNnX2FkZChjLT5jZGV2LCBjLCBmc2dfY29tbW9uKTsKKwlyZXQgPSBmc2dfYmluZF9jb25maWcoYy0+Y2RldiwgYywgJmZzZ19jb21tb24pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gY2RjX2NvbmZpZ19kcml2ZXIgPSB7Ci0JLmxhYmVsCQkJPSAiTXVsdGlmdW5jdGlvbiBDb21wb3NpdGUgKENEQyArIE1TICsgQUNNKSIsCi0JLmJpbmQJCQk9IGNkY19kb19jb25maWcsCi0JLmJDb25maWd1cmF0aW9uVmFsdWUJPSAxLAotCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KLQkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKLX07CitzdGF0aWMgaW50IGNkY19jb25maWdfcmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCXN0YXRpYyBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gY29uZmlnID0geworCQkuYmluZAkJCT0gY2RjX2RvX2NvbmZpZywKKwkJLmJDb25maWd1cmF0aW9uVmFsdWUJPSBNVUxUSV9DRENfQ09ORklHX05VTSwKKwkJLmJtQXR0cmlidXRlcwkJPSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIsCisJfTsKKworCWNvbmZpZy5sYWJlbCAgICAgICAgICA9IHN0cmluZ3NfZGV2W01VTFRJX1NUUklOR19DRENfQ09ORklHX0lEWF0uczsKKwljb25maWcuaUNvbmZpZ3VyYXRpb24gPSBzdHJpbmdzX2RldltNVUxUSV9TVFJJTkdfQ0RDX0NPTkZJR19JRFhdLmlkOworCisJcmV0dXJuIHVzYl9hZGRfY29uZmlnKGNkZXYsICZjb25maWcpOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IGNkY19jb25maWdfcmVnaXN0ZXIoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCXJldHVybiAwOworfQogCiAjZW5kaWYKIApAQCAtMjMwLDcgKzI3NCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEdhZGdldCBCaW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi1zdGF0aWMgaW50IF9faW5pdCBtdWx0aV9iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3N0YXRpYyBpbnQgX19yZWYgbXVsdGlfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKIAlpbnQgc3RhdHVzLCBnY251bTsKQEAgLTI1Miw2NyArMjk2LDU2IEBACiAJCWdvdG8gZmFpbDA7CiAKIAkvKiBzZXQgdXAgbWFzcyBzdG9yYWdlIGZ1bmN0aW9uICovCi0JZnNnX2NvbW1vbiA9IGZzZ19jb21tb25fZnJvbV9wYXJhbXMoMCwgY2RldiwgJm1vZF9kYXRhKTsKLQlpZiAoSVNfRVJSKGZzZ19jb21tb24pKSB7Ci0JCXN0YXR1cyA9IFBUUl9FUlIoZnNnX2NvbW1vbik7Ci0JCWdvdG8gZmFpbDE7CisJeworCQl2b2lkICpyZXRwOworCQlyZXRwID0gZnNnX2NvbW1vbl9mcm9tX3BhcmFtcygmZnNnX2NvbW1vbiwgY2RldiwgJmZzZ19tb2RfZGF0YSk7CisJCWlmIChJU19FUlIocmV0cCkpIHsKKwkJCXN0YXR1cyA9IFBUUl9FUlIocmV0cCk7CisJCQlnb3RvIGZhaWwxOworCQl9CiAJfQogCi0KKwkvKiBzZXQgYmNkRGV2aWNlICovCiAJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7Ci0JaWYgKGdjbnVtID49IDApCisJaWYgKGdjbnVtID49IDApIHsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHgwMzAwIHwgZ2NudW0pOwotCWVsc2UgewotCQkvKiBXZSBhc3N1bWUgdGhhdCBjYW5fc3VwcG9ydF9lY20oKSB0ZWxscyB0aGUgdHJ1dGg7Ci0JCSAqIGJ1dCBpZiB0aGUgY29udHJvbGxlciBpc24ndCByZWNvZ25pemVkIGF0IGFsbCB0aGVuCi0JCSAqIHRoYXQgYXNzdW1wdGlvbiBpcyBhIGJpdCBtb3JlIGxpa2VseSB0byBiZSB3cm9uZy4KLQkJICovCi0JCVdBUk5JTkcoY2RldiwgImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKLQkJICAgICAgICBnYWRnZXQtPm5hbWUpOworCX0gZWxzZSB7CisJCVdBUk5JTkcoY2RldiwgImNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwgZ2FkZ2V0LT5uYW1lKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKIAl9CiAKLQotCS8qIEFsbG9jYXRlIHN0cmluZyBkZXNjcmlwdG9yIG51bWJlcnMgLi4uIG5vdGUgdGhhdCBzdHJpbmcKLQkgKiBjb250ZW50cyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY29tcG9zaXRlX2RldiBnbHVlLgotCSAqLwotCi0JLyogZGV2aWNlIGRlc2NyaXB0b3Igc3RyaW5nczogbWFudWZhY3R1cmVyLCBwcm9kdWN0ICovCisJLyogYWxsb2NhdGUgc3RyaW5nIGRlc2NyaXB0b3IgbnVtYmVycyAqLwogCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mIG1hbnVmYWN0dXJlciwgIiVzICVzIHdpdGggJXMiLAogCSAgICAgICAgIGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKIAkgICAgICAgICBnYWRnZXQtPm5hbWUpOwotCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCWdvdG8gZmFpbDI7Ci0Jc3RyaW5nc19kZXZbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLmlkID0gc3RhdHVzOwotCWRldmljZV9kZXNjLmlNYW51ZmFjdHVyZXIgPSBzdGF0dXM7CiAKLQlzdGF0dXMgPSB1c2Jfc3RyaW5nX2lkKGNkZXYpOwotCWlmIChzdGF0dXMgPCAwKQorCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWRzX3RhYihjZGV2LCBzdHJpbmdzX2Rldik7CisJaWYgKHVubGlrZWx5KHN0YXR1cyA8IDApKQogCQlnb3RvIGZhaWwyOwotCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lEWF0uaWQgPSBzdGF0dXM7Ci0JZGV2aWNlX2Rlc2MuaVByb2R1Y3QgPSBzdGF0dXM7CiAKLSNpZmRlZiBVU0JfRVRIX1JORElTCi0JLyogcmVnaXN0ZXIgb3VyIGZpcnN0IGNvbmZpZ3VyYXRpb24gKi8KLQlzdGF0dXMgPSB1c2JfYWRkX2NvbmZpZyhjZGV2LCAmcm5kaXNfY29uZmlnX2RyaXZlcik7Ci0JaWYgKHN0YXR1cyA8IDApCisJZGV2aWNlX2Rlc2MuaU1hbnVmYWN0dXJlciA9CisJCXN0cmluZ3NfZGV2W01VTFRJX1NUUklOR19NQU5VRkFDVFVSRVJfSURYXS5pZDsKKwlkZXZpY2VfZGVzYy5pUHJvZHVjdCAgICAgID0KKwkJc3RyaW5nc19kZXZbTVVMVElfU1RSSU5HX1BST0RVQ1RfSURYXS5pZDsKKworCS8qIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zICovCisJc3RhdHVzID0gcm5kaXNfY29uZmlnX3JlZ2lzdGVyKGNkZXYpOworCWlmICh1bmxpa2VseShzdGF0dXMgPCAwKSkKIAkJZ290byBmYWlsMjsKLSNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1VTQl9HX01VTFRJX0NEQwotCS8qIHJlZ2lzdGVyIG91ciBzZWNvbmQgY29uZmlndXJhdGlvbiAqLwotCXN0YXR1cyA9IHVzYl9hZGRfY29uZmlnKGNkZXYsICZjZGNfY29uZmlnX2RyaXZlcik7Ci0JaWYgKHN0YXR1cyA8IDApCisJc3RhdHVzID0gY2RjX2NvbmZpZ19yZWdpc3RlcihjZGV2KTsKKwlpZiAodW5saWtlbHkoc3RhdHVzIDwgMCkpCiAJCWdvdG8gZmFpbDI7Ci0jZW5kaWYKIAotCWRldl9pbmZvKCZnYWRnZXQtPmRldiwgRFJJVkVSX0RFU0MgIiwgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKLQlmc2dfY29tbW9uX3B1dChmc2dfY29tbW9uKTsKKwkvKiB3ZSdyZSBkb25lICovCisJZGV2X2luZm8oJmdhZGdldC0+ZGV2LCBEUklWRVJfREVTQyAiXG4iKTsKKwlmc2dfY29tbW9uX3B1dCgmZnNnX2NvbW1vbik7CiAJcmV0dXJuIDA7CiAKKworCS8qIGVycm9yIHJlY292ZXJ5ICovCiBmYWlsMjoKLQlmc2dfY29tbW9uX3B1dChmc2dfY29tbW9uKTsKKwlmc2dfY29tbW9uX3B1dCgmZnNnX2NvbW1vbik7CiBmYWlsMToKIAlnc2VyaWFsX2NsZWFudXAoKTsKIGZhaWwwOgpAQCAtMzM5LDE4ICszNzIsMTUgQEAKIAkudW5iaW5kCQk9IF9fZXhpdF9wKG11bHRpX3VuYmluZCksCiB9OwogCi1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0FVVEhPUigiTWljaGFsIE5hemFyZXdpY3oiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGludCBfX2luaXQgZ19tdWx0aV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBtdWx0aV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJm11bHRpX2RyaXZlcik7CiB9Ci1tb2R1bGVfaW5pdChnX211bHRpX2luaXQpOworbW9kdWxlX2luaXQobXVsdGlfaW5pdCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBnX211bHRpX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdWx0aV9leGl0KHZvaWQpCiB7CiAJdXNiX2NvbXBvc2l0ZV91bnJlZ2lzdGVyKCZtdWx0aV9kcml2ZXIpOwogfQotbW9kdWxlX2V4aXQoZ19tdWx0aV9jbGVhbnVwKTsKK21vZHVsZV9leGl0KG11bHRpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggNGMzYWM1Yy4uY2YyNDFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC03MCw2ICs3MCw3IEBACiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiUHJpbnRlciBHYWRnZXQiCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMjAwNyBPQ1QgMDYiCiAKK3N0YXRpYyBERUZJTkVfTVVURVgocHJpbnRlcl9tdXRleCk7CiBzdGF0aWMgY29uc3QgY2hhciBzaG9ydG5hbWUgW10gPSAicHJpbnRlciI7CiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOwogCkBAIC00NzYsNyArNDc3LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlpbnQJCQlyZXQgPSAtRUJVU1k7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJnByaW50ZXJfbXV0ZXgpOwogCWRldiA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgcHJpbnRlcl9kZXYsIHByaW50ZXJfY2Rldik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CkBAIC00OTIsNyArNDkzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAogCURCRyhkZXYsICJwcmludGVyX29wZW4gcmV0dXJuZWQgJXhcbiIsIHJldCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmcHJpbnRlcl9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIAlzZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0LCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19yZWYKIHByaW50ZXJfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQogewogCXN0cnVjdCBwcmludGVyX2RldgkqZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCmluZGV4IDI2MTkzZWMuLjUyMWViZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKQEAgLTEyLDYgKzEyLDggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogKi8KIAorI2RlZmluZSBERUJVRworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTIzLDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiL2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9nYWRnZXQuaD4KQEAgLTMzLDYgKzM2LDcgQEAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtdXNiLWhzb3RnLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXN5cy5oPgogI2luY2x1ZGUgPHBsYXQvdWRjLWhzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KIAogI2RlZmluZSBETUFfQUREUl9JTlZBTElEICh+KChkbWFfYWRkcl90KTApKQogCkBAIC05MSw3ICs5NSw5IEBACiAgKiBGb3IgcGVyaW9kaWMgSU4gZW5kcG9pbnRzLCB3ZSBoYXZlIGZpZm9fc2l6ZSBhbmQgZmlmb19sb2FkIHRvIHRyeQogICogYW5kIGtlZXAgdHJhY2sgb2YgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBwZXJpb2RpYyBGSUZPIGZvciBlYWNoCiAgKiBvZiB0aGVzZSBhcyB3ZSBkb24ndCBoYXZlIGEgc3RhdHVzIHJlZ2lzdGVyIHRoYXQgdGVsbHMgdXMgaG93IG11Y2gKLSAqIGlzIGluIGVhY2ggb2YgdGhlbS4KKyAqIGlzIGluIGVhY2ggb2YgdGhlbS4gKG5vdGUsIHRoaXMgbWF5IGFjdHVhbGx5IGJlIHVzZWxlc3MgaW5mb3JtYXRpb24KKyAqIGFzIGluIHNoYXJlZC1maWZvIG1vZGUgcGVyaW9kaWMgaW4gYWN0cyBsaWtlIGEgc2luZ2xlLWZyYW1lIHBhY2tldAorICogYnVmZmVyIHRoYW4gYSBmaWZvKQogICovCiBzdHJ1Y3QgczNjX2hzb3RnX2VwIHsKIAlzdHJ1Y3QgdXNiX2VwCQllcDsKQEAgLTEyOCw2ICsxMzQsNyBAQAogICogQHJlZ3M6IFRoZSBtZW1vcnkgYXJlYSBtYXBwZWQgZm9yIGFjY2Vzc2luZyByZWdpc3RlcnMuCiAgKiBAcmVnc19yZXM6IFRoZSByZXNvdXJjZSB0aGF0IHdhcyBhbGxvY2F0ZWQgd2hlbiBjbGFpbWluZyByZWdpc3RlciBzcGFjZS4KICAqIEBpcnE6IFRoZSBJUlEgbnVtYmVyIHdlIGFyZSB1c2luZworICogQGRlZGljYXRlZF9maWZvczogU2V0IGlmIHRoZSBoYXJkd2FyZSBoYXMgZGVkaWNhdGVkIElOLUVQIGZpZm9zLgogICogQGRlYnVnX3Jvb3Q6IHJvb3QgZGlyZWN0cm9yeSBmb3IgZGVidWdmcy4KICAqIEBkZWJ1Z19maWxlOiBtYWluIHN0YXR1cyBmaWxlIGZvciBkZWJ1Z2ZzLgogICogQGRlYnVnX2ZpZm86IEZJRk8gc3RhdHVzIGZpbGUgZm9yIGRlYnVnZnMuCkBAIC0xNDUsNiArMTUyLDkgQEAKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwogCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3NfcmVzOwogCWludAkJCWlycTsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCisJdW5zaWduZWQgaW50CQlkZWRpY2F0ZWRfZmlmb3M6MTsKIAogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19yb290OwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19maWxlOwpAQCAtMzEwLDExICszMjAsMTEgQEAKIAkJaHNvdGctPnJlZ3MgKyBTM0NfR05QVFhGU0laKTsKIAkqLwogCi0JLyogc2V0IEZJRk8gc2l6ZXMgdG8gMjA0OC8weDFDMCAqLworCS8qIHNldCBGSUZPIHNpemVzIHRvIDIwNDgvMTAyNCAqLwogCiAJd3JpdGVsKDIwNDgsIGhzb3RnLT5yZWdzICsgUzNDX0dSWEZTSVopOwogCXdyaXRlbChTM0NfR05QVFhGU0laX05QVHhGU3RBZGRyKDIwNDgpIHwKLQkgICAgICAgUzNDX0dOUFRYRlNJWl9OUFR4RkRlcCgweDFDMCksCisJICAgICAgIFMzQ19HTlBUWEZTSVpfTlBUeEZEZXAoMTAyNCksCiAJICAgICAgIGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWik7CiAKIAkvKiBhcmFuZ2UgYWxsIHRoZSByZXN0IG9mIHRoZSBUWCBGSUZPcywgYXMgc29tZSB2ZXJzaW9ucyBvZiB0aGlzCkBAIC00NjQsNyArNDc0LDcgQEAKIAlpZiAodG9fd3JpdGUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocGVyaW9kaWMpIHsKKwlpZiAocGVyaW9kaWMgJiYgIWhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MpIHsKIAkJdTMyIGVwc2l6ZSA9IHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBUU0laKGhzX2VwLT5pbmRleCkpOwogCQlpbnQgc2l6ZV9sZWZ0OwogCQlpbnQgc2l6ZV9kb25lOwpAQCAtNDc0LDYgKzQ4NCwxNCBAQAogCiAJCXNpemVfbGVmdCA9IFMzQ19EeEVQVFNJWl9YZmVyU2l6ZV9HRVQoZXBzaXplKTsKIAorCQkvKiBpZiBzaGFyZWQgZmlmbywgd2UgY2Fubm90IHdyaXRlIGFueXRoaW5nIHVudGlsIHRoZQorCQkgKiBwcmV2aW91cyBkYXRhIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudC4KKwkJICovCisJCWlmIChoc19lcC0+Zmlmb19sb2FkICE9IDApIHsKKwkJCXMzY19oc290Z19lbl9nc2ludChoc290ZywgUzNDX0dJTlRTVFNfUFR4RkVtcCk7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCiAJCWRldl9kYmcoaHNvdGctPmRldiwgIiVzOiBsZWZ0PSVkLCBsb2FkPSVkLCBmaWZvPSVkLCBzaXplICVkXG4iLAogCQkJX19mdW5jX18sIHNpemVfbGVmdCwKIAkJCWhzX2VwLT5zaXplX2xvYWRlZCwgaHNfZXAtPmZpZm9fbG9hZCwgaHNfZXAtPmZpZm9fc2l6ZSk7CkBAIC00OTQsNiArNTEyLDExIEBACiAJCQlzM2NfaHNvdGdfZW5fZ3NpbnQoaHNvdGcsIFMzQ19HSU5UU1RTX1BUeEZFbXApOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KKwl9IGVsc2UgaWYgKGhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MgJiYgaHNfZXAtPmluZGV4ICE9IDApIHsKKwkJY2FuX3dyaXRlID0gcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRFRYRlNUUyhoc19lcC0+aW5kZXgpKTsKKworCQljYW5fd3JpdGUgJj0gMHhmZmZmOworCQljYW5fd3JpdGUgKj0gNDsKIAl9IGVsc2UgewogCQlpZiAoUzNDX0dOUFRYU1RTX05QVHhRU3BjQXZhaWxfR0VUKGducHR4c3RzKSA9PSAwKSB7CiAJCQlkZXZfZGJnKGhzb3RnLT5kZXYsCkBAIC01MDUsNiArNTI4LDcgQEAKIAkJfQogCiAJCWNhbl93cml0ZSA9IFMzQ19HTlBUWFNUU19OUFR4RlNwY0F2YWlsX0dFVChnbnB0eHN0cyk7CisJCWNhbl93cml0ZSAqPSA0OwkvKiBmaWZvIHNpemUgaXMgaW4gMzJiaXQgcXVhbnRpdGllcy4gKi8KIAl9CiAKIAlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogR05QVFhTVFM9JTA4eCwgY2FuPSVkLCB0bz0lZCwgbXBzICVkXG4iLApAQCAtNTE3LDYgKzU0MSwxNyBAQAogCWlmIChjYW5fd3JpdGUgPiA1MTIpCiAJCWNhbl93cml0ZSA9IDUxMjsKIAorCS8qIGxpbWl0IHRoZSB3cml0ZSB0byBvbmUgbWF4LXBhY2tldCBzaXplIHdvcnRoIG9mIGRhdGEsIGJ1dCBhbGxvdworCSAqIHRoZSB0cmFuc2ZlciB0byByZXR1cm4gdGhhdCBpdCBkaWQgbm90IHJ1biBvdXQgb2YgZmlmbyBzcGFjZQorCSAqIGRvaW5nIGl0LiAqLworCWlmICh0b193cml0ZSA+IGhzX2VwLT5lcC5tYXhwYWNrZXQpIHsKKwkJdG9fd3JpdGUgPSBoc19lcC0+ZXAubWF4cGFja2V0OworCisJCXMzY19oc290Z19lbl9nc2ludChoc290ZywKKwkJCQkgICBwZXJpb2RpYyA/IFMzQ19HSU5UU1RTX1BUeEZFbXAgOgorCQkJCSAgIFMzQ19HSU5UU1RTX05QVHhGRW1wKTsKKwl9CisKIAkvKiBzZWUgaWYgd2UgY2FuIHdyaXRlIGRhdGEgKi8KIAogCWlmICh0b193cml0ZSA+IGNhbl93cml0ZSkgewpAQCAtNTc5LDEyICs2MTQsMTAgQEAKIAkJbWF4c2l6ZSA9IFMzQ19EeEVQVFNJWl9YZmVyU2l6ZV9MSU1JVCArIDE7CiAJCW1heHBrdCA9IFMzQ19EeEVQVFNJWl9Qa3RDbnRfTElNSVQgKyAxOwogCX0gZWxzZSB7CisJCW1heHNpemUgPSA2NCs2NDsKIAkJaWYgKGhzX2VwLT5kaXJfaW4pIHsKLQkJCS8qIG1heHNpemUgPSBTM0NfRElFUFRTSVowX1hmZXJTaXplX0xJTUlUICsgMTsgKi8KLQkJCW1heHNpemUgPSA2NCs2NCsxOwogCQkJbWF4cGt0ID0gUzNDX0RJRVBUU0laMF9Qa3RDbnRfTElNSVQgKyAxOwogCQl9IGVsc2UgewotCQkJbWF4c2l6ZSA9IDB4M2Y7CiAJCQltYXhwa3QgPSAyOwogCQl9CiAJfQpAQCAtMTM1Myw2ICsxMzg2LDkgQEAKIAlyZWFkX3B0ciA9IGhzX3JlcS0+cmVxLmFjdHVhbDsKIAltYXhfcmVxID0gaHNfcmVxLT5yZXEubGVuZ3RoIC0gcmVhZF9wdHI7CiAKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogcmVhZCAlZC8lZCwgZG9uZSAlZC8lZFxuIiwKKwkJX19mdW5jX18sIHRvX3JlYWQsIG1heF9yZXEsIHJlYWRfcHRyLCBoc19yZXEtPnJlcS5sZW5ndGgpOworCiAJaWYgKHRvX3JlYWQgPiBtYXhfcmVxKSB7CiAJCS8qIG1vcmUgZGF0YSBhcHBlYXJlZCB0aGFuIHdlIHdoZXJlIHdpbGxpbmcKIAkJICogdG8gZGVhbCB3aXRoIGluIHRoaXMgcmVxdWVzdC4KQEAgLTEzNjIsOSArMTM5OCw2IEBACiAJCVdBUk5fT05fT05DRSgxKTsKIAl9CiAKLQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogcmVhZCAlZC8lZCwgZG9uZSAlZC8lZFxuIiwKLQkJX19mdW5jX18sIHRvX3JlYWQsIG1heF9yZXEsIHJlYWRfcHRyLCBoc19yZXEtPnJlcS5sZW5ndGgpOwotCiAJaHNfZXAtPnRvdGFsX2RhdGEgKz0gdG9fcmVhZDsKIAloc19yZXEtPnJlcS5hY3R1YWwgKz0gdG9fcmVhZDsKIAl0b19yZWFkID0gRElWX1JPVU5EX1VQKHRvX3JlYWQsIDQpOwpAQCAtMTQzMyw5ICsxNDY2LDExIEBACiBzdGF0aWMgdm9pZCBzM2NfaHNvdGdfaGFuZGxlX291dGRvbmUoc3RydWN0IHMzY19oc290ZyAqaHNvdGcsCiAJCQkJICAgICBpbnQgZXBudW0sIGJvb2wgd2FzX3NldHVwKQogeworCXUzMiBlcHNpemUgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQVFNJWihlcG51bSkpOwogCXN0cnVjdCBzM2NfaHNvdGdfZXAgKmhzX2VwID0gJmhzb3RnLT5lcHNbZXBudW1dOwogCXN0cnVjdCBzM2NfaHNvdGdfcmVxICpoc19yZXEgPSBoc19lcC0+cmVxOwogCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxID0gJmhzX3JlcS0+cmVxOworCXVuc2lnbmVkIHNpemVfbGVmdCA9IFMzQ19EeEVQVFNJWl9YZmVyU2l6ZV9HRVQoZXBzaXplKTsKIAlpbnQgcmVzdWx0ID0gMDsKIAogCWlmICghaHNfcmVxKSB7CkBAIC0xNDQ0LDkgKzE0NzksNyBAQAogCX0KIAogCWlmICh1c2luZ19kbWEoaHNvdGcpKSB7Ci0JCXUzMiBlcHNpemUgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQVFNJWihlcG51bSkpOwogCQl1bnNpZ25lZCBzaXplX2RvbmU7Ci0JCXVuc2lnbmVkIHNpemVfbGVmdDsKIAogCQkvKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHRyYW5zZmVyIGJ5IGNoZWNraW5nIGhvdyBtdWNoCiAJCSAqIGlzIGxlZnQgaW4gdGhlIGVuZHBvaW50IHNpemUgcmVnaXN0ZXIgYW5kIHRoZW4gd29ya2luZyBpdApAQCAtMTQ1NiwxNCArMTQ4OSwxOCBAQAogCQkgKiBzbyBtYXkgb3ZlcnNob290L3VuZGVyc2hvb3QgdGhlIHRyYW5zZmVyLgogCQkgKi8KIAotCQlzaXplX2xlZnQgPSBTM0NfRHhFUFRTSVpfWGZlclNpemVfR0VUKGVwc2l6ZSk7Ci0KIAkJc2l6ZV9kb25lID0gaHNfZXAtPnNpemVfbG9hZGVkIC0gc2l6ZV9sZWZ0OwogCQlzaXplX2RvbmUgKz0gaHNfZXAtPmxhc3RfbG9hZDsKIAogCQlyZXEtPmFjdHVhbCA9IHNpemVfZG9uZTsKIAl9CiAKKwkvKiBpZiB0aGVyZSBpcyBtb3JlIHJlcXVlc3QgdG8gZG8sIHNjaGVkdWxlIG5ldyB0cmFuc2ZlciAqLworCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoICYmIHNpemVfbGVmdCA9PSAwKSB7CisJCXMzY19oc290Z19zdGFydF9yZXEoaHNvdGcsIGhzX2VwLCBoc19yZXEsIHRydWUpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHJlcS0+YWN0dWFsIDwgcmVxLT5sZW5ndGggJiYgcmVxLT5zaG9ydF9ub3Rfb2spIHsKIAkJZGV2X2RiZyhoc290Zy0+ZGV2LCAiJXM6IGdvdCAlZC8lZCAoc2hvcnQgbm90IG9rKSA9PiBlcnJvclxuIiwKIAkJCV9fZnVuY19fLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOwpAQCAtMTc1OCw3ICsxNzk1LDcgQEAKIAkJaWYgKGRpcl9pbikgewogCQkJczNjX2hzb3RnX2NvbXBsZXRlX2luKGhzb3RnLCBoc19lcCk7CiAKLQkJCWlmIChpZHggPT0gMCkKKwkJCWlmIChpZHggPT0gMCAmJiAhaHNfZXAtPnJlcSkKIAkJCQlzM2NfaHNvdGdfZW5xdWV1ZV9zZXR1cChoc290Zyk7CiAJCX0gZWxzZSBpZiAodXNpbmdfZG1hKGhzb3RnKSkgewogCQkJLyogV2UncmUgdXNpbmcgRE1BLCB3ZSBuZWVkIHRvIGZpcmUgYW4gT3V0RG9uZSBoZXJlCkBAIC0xODE4LDYgKzE4NTUsMTUgQEAKIAkJCQkgX19mdW5jX18sIGlkeCk7CiAJCQljbGVhciB8PSBTM0NfRElFUE1TS19JTlRrbkVQTWlzTXNrOwogCQl9CisKKwkJLyogRklGTyBoYXMgc3BhY2Ugb3IgaXMgZW1wdHkgKHNlZSBHQUhCQ0ZHKSAqLworCQlpZiAoaHNvdGctPmRlZGljYXRlZF9maWZvcyAmJgorCQkgICAgaW50cyAmIFMzQ19ESUVQTVNLX1R4RklGT0VtcHR5KSB7CisJCQlkZXZfZGJnKGhzb3RnLT5kZXYsICIlczogZXAlZDogVHhGSUZPRW1wdHlcbiIsCisJCQkJX19mdW5jX18sIGlkeCk7CisJCQlzM2NfaHNvdGdfdHJ5dHgoaHNvdGcsIGhzX2VwKTsKKwkJCWNsZWFyIHw9IFMzQ19ESUVQTVNLX1R4RklGT0VtcHR5OworCQl9CiAJfQogCiAJd3JpdGVsKGNsZWFyLCBoc290Zy0+cmVncyArIGVwaW50X3JlZyk7CkBAIC0yMDcxLDE3ICsyMTE3LDEyIEBACiAJCWtpbGxfYWxsX3JlcXVlc3RzKGhzb3RnLCAmaHNvdGctPmVwc1swXSwgLUVDT05OUkVTRVQsIHRydWUpOwogCiAJCS8qIGl0IHNlZW1zIGFmdGVyIGEgcmVzZXQgd2UgY2FuIGVuZCB1cCB3aXRoIGEgc2l0dWF0aW9uCi0JCSAqIHdoZXJlIHRoZSBUWEZJRk8gc3RpbGwgaGFzIGRhdGEgaW4gaXQuLi4gdHJ5IGZsdXNoaW5nCi0JCSAqIGl0IHRvIHJlbW92ZSBhbnl0aGluZyB0aGF0IG1heSBzdGlsbCBiZSBpbiBpdC4KKwkJICogd2hlcmUgdGhlIFRYRklGTyBzdGlsbCBoYXMgZGF0YSBpbiBpdC4uLiB0aGUgZG9jcworCQkgKiBzdWdnZXN0IHJlc2V0dGluZyBhbGwgdGhlIGZpZm9zLCBzbyB1c2UgdGhlIGluaXRfZmlmbworCQkgKiBjb2RlIHRvIHJlbGF5b3V0IGFuZCBmbHVzaCB0aGUgZmlmb3MuCiAJCSAqLwogCi0JCWlmICgxKSB7Ci0JCQl3cml0ZWwoUzNDX0dSU1RDVExfVHhGTnVtKDApIHwgUzNDX0dSU1RDVExfVHhGRmxzaCwKLQkJCSAgICAgICBoc290Zy0+cmVncyArIFMzQ19HUlNUQ1RMKTsKLQotCQkJZGV2X2luZm8oaHNvdGctPmRldiwgIkdOUFRYU1RTPSUwOHhcbiIsCi0JCQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYU1RTKSk7Ci0JCX0KKwkJczNjX2hzb3RnX2luaXRfZmlmbyhoc290Zyk7CiAKIAkJczNjX2hzb3RnX2VucXVldWVfc2V0dXAoaHNvdGcpOwogCkBAIC0yMjc0LDYgKzIzMTUsMTIgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogaWYgdGhlIGhhcmR3YXJlIGhhcyBkZWRpY2F0ZWQgZmlmb3MsIHdlIG11c3QgZ2l2ZSBlYWNoIElOIEVQCisJICogYSB1bmlxdWUgdHgtZmlmbyBldmVuIGlmIGl0IGlzIG5vbi1wZXJpb2RpYy4KKwkgKi8KKwlpZiAoZGlyX2luICYmIGhzb3RnLT5kZWRpY2F0ZWRfZmlmb3MpCisJCWVwY3RybCB8PSBTM0NfRHhFUENUTF9UeEZOdW0oaW5kZXgpOworCiAJLyogZm9yIG5vbiBjb250cm9sIGVuZHBvaW50cywgc2V0IFBJRCB0byBEMCAqLwogCWlmIChpbmRleCkKIAkJZXBjdHJsIHw9IFMzQ19EeEVQQ1RMX1NldEQwUElEOwpAQCAtMjU2Myw3ICsyNjEwLDggQEAKIAogCXdyaXRlbChTM0NfRElFUE1TS19UaW1lT1VUTXNrIHwgUzNDX0RJRVBNU0tfQUhCRXJyTXNrIHwKIAkgICAgICAgUzNDX0RJRVBNU0tfSU5Ua25FUE1pc01zayB8Ci0JICAgICAgIFMzQ19ESUVQTVNLX0VQRGlzYmxkTXNrIHwgUzNDX0RJRVBNU0tfWGZlckNvbXBsTXNrLAorCSAgICAgICBTM0NfRElFUE1TS19FUERpc2JsZE1zayB8IFMzQ19ESUVQTVNLX1hmZXJDb21wbE1zayB8CisJICAgICAgICgoaHNvdGctPmRlZGljYXRlZF9maWZvcykgPyBTM0NfRElFUE1TS19UeEZJRk9FbXB0eSA6IDApLAogCSAgICAgICBoc290Zy0+cmVncyArIFMzQ19ESUVQTVNLKTsKIAogCS8qIGRvbid0IG5lZWQgWGZlckNvbXBsLCB3ZSBnZXQgdGhhdCBmcm9tIFJYRklGTyBpbiBzbGF2ZSBtb2RlLiBJbgpAQCAtMjczMiw3ICsyNzgwLDcgQEAKIAkgKi8KIAogCXB0eGZpZm8gPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19EUFRYRlNJWm4oZXBudW0pKTsKLQloc19lcC0+Zmlmb19zaXplID0gUzNDX0RQVFhGU0labl9EUFR4RlNpemVfR0VUKHB0eGZpZm8pOworCWhzX2VwLT5maWZvX3NpemUgPSBTM0NfRFBUWEZTSVpuX0RQVHhGU2l6ZV9HRVQocHR4ZmlmbykgKiA0OwogCiAJLyogaWYgd2UncmUgdXNpbmcgZG1hLCB3ZSBuZWVkIHRvIHNldCB0aGUgbmV4dC1lbmRwb2ludCBwb2ludGVyCiAJICogdG8gYmUgc29tZXRoaW5nIHZhbGlkLgpAQCAtMjc1MywxMyArMjgwMSwzMyBAQAogICovCiBzdGF0aWMgdm9pZCBzM2NfaHNvdGdfb3RncmVzZXQoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7Ci0JdTMyIG9zYzsKKwlzdHJ1Y3QgY2xrICp4dXNieHRpOworCXUzMiBwd3IsIG9zYzsKIAotCXdyaXRlbCgwLCBTM0NfUEhZUFdSKTsKKwlwd3IgPSByZWFkbChTM0NfUEhZUFdSKTsKKwlwd3IgJj0gfjB4MTk7CisJd3JpdGVsKHB3ciwgUzNDX1BIWVBXUik7CiAJbWRlbGF5KDEpOwogCiAJb3NjID0gaHNvdGctPnBsYXQtPmlzX29zYyA/IFMzQ19QSFlDTEtfRVhUX09TQyA6IDA7CiAKKwl4dXNieHRpID0gY2xrX2dldChoc290Zy0+ZGV2LCAieHVzYnh0aSIpOworCWlmICh4dXNieHRpICYmICFJU19FUlIoeHVzYnh0aSkpIHsKKwkJc3dpdGNoIChjbGtfZ2V0X3JhdGUoeHVzYnh0aSkpIHsKKwkJY2FzZSAxMipNSFo6CisJCQlvc2MgfD0gUzNDX1BIWUNMS19DTEtTRUxfMTJNOworCQkJYnJlYWs7CisJCWNhc2UgMjQqTUhaOgorCQkJb3NjIHw9IFMzQ19QSFlDTEtfQ0xLU0VMXzI0TTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIDQ4Kk1IWjoKKwkJCS8qIGRlZmF1bHQgcmVmZXJlbmNlIGNsb2NrICovCisJCQlicmVhazsKKwkJfQorCQljbGtfcHV0KHh1c2J4dGkpOworCX0KKwogCXdyaXRlbChvc2MgfCAweDEwLCBTM0NfUEhZQ0xLKTsKIAogCS8qIGlzc3VlIGEgZnVsbCBzZXQgb2YgcmVzZXRzIHRvIHRoZSBvdGcgYW5kIGNvcmUgKi8KQEAgLTI3NzIsNiArMjg0MCw4IEBACiAKIHN0YXRpYyB2b2lkIHMzY19oc290Z19pbml0KHN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnKQogeworCXUzMiBjZmc0OworCiAJLyogdW5tYXNrIHN1YnNldCBvZiBlbmRwb2ludCBpbnRlcnJ1cHRzICovCiAKIAl3cml0ZWwoUzNDX0RJRVBNU0tfVGltZU9VVE1zayB8IFMzQ19ESUVQTVNLX0FIQkVyck1zayB8CkBAIC0yODA3LDYgKzI4NzcsMTQgQEAKIAogCXdyaXRlbCh1c2luZ19kbWEoaHNvdGcpID8gUzNDX0dBSEJDRkdfRE1BRW4gOiAweDAsCiAJICAgICAgIGhzb3RnLT5yZWdzICsgUzNDX0dBSEJDRkcpOworCisJLyogY2hlY2sgaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqLworCisJY2ZnNCA9IHJlYWRsKGhzb3RnLT5yZWdzICsgMHg1MCk7CisJaHNvdGctPmRlZGljYXRlZF9maWZvcyA9IChjZmc0ID4+IDI1KSAmIDE7CisKKwlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiJXMgZmlmb3NcbiIsCisJCSBoc290Zy0+ZGVkaWNhdGVkX2ZpZm9zID8gImRlZGljYXRlZCIgOiAic2hhcmVkIik7CiB9CiAKIHN0YXRpYyB2b2lkIHMzY19oc290Z19kdW1wKHN0cnVjdCBzM2NfaHNvdGcgKmhzb3RnKQpAQCAtMzE4MSwxMyArMzI1OSwyMCBAQAogCWhzb3RnLT5kZXYgPSBkZXY7CiAJaHNvdGctPnBsYXQgPSBwbGF0OwogCisJaHNvdGctPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm90ZyIpOworCWlmIChJU19FUlIoaHNvdGctPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IG90ZyBjbG9ja1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX21lbTsKKwl9CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoc290Zyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgcmVnaXN0ZXIgcmVzb3VyY2UgMFxuIik7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX21lbTsKKwkJZ290byBlcnJfY2xrOwogCX0KIAogCWhzb3RnLT5yZWdzX3JlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCkBAIC0zMTk1LDcgKzMyODAsNyBAQAogCWlmICghaHNvdGctPnJlZ3NfcmVzKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBlcnJfbWVtOworCQlnb3RvIGVycl9jbGs7CiAJfQogCiAJaHNvdGctPnJlZ3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC0zMjQ4LDYgKzMzMzMsOCBAQAogCiAJLyogcmVzZXQgdGhlIHN5c3RlbSAqLwogCisJY2xrX2VuYWJsZShoc290Zy0+Y2xrKTsKKwogCXMzY19oc290Z19nYXRlKHBkZXYsIHRydWUpOwogCiAJczNjX2hzb3RnX290Z3Jlc2V0KGhzb3RnKTsKQEAgLTMyNzEsNyArMzM1OCw4IEBACiBlcnJfcmVnc19yZXM6CiAJcmVsZWFzZV9yZXNvdXJjZShoc290Zy0+cmVnc19yZXMpOwogCWtmcmVlKGhzb3RnLT5yZWdzX3Jlcyk7Ci0KK2Vycl9jbGs6CisJY2xrX3B1dChoc290Zy0+Y2xrKTsKIGVycl9tZW06CiAJa2ZyZWUoaHNvdGcpOwogCXJldHVybiByZXQ7CkBAIC0zMjkzLDYgKzMzODEsOSBAQAogCiAJczNjX2hzb3RnX2dhdGUocGRldiwgZmFsc2UpOwogCisJY2xrX2Rpc2FibGUoaHNvdGctPmNsayk7CisJY2xrX3B1dChoc290Zy0+Y2xrKTsKKwogCWtmcmVlKGhzb3RnKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwppbmRleCBmNDZhNjA5Li5iMjJlZWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2luaXQgc2VyaWFsX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3N0YXRpYyBpbnQgX19yZWYgc2VyaWFsX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAl1bnNpZ25lZCBpOwogCWludCBzdGF0dXMgPSAwOwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGdzX2JpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQorc3RhdGljIGludCBfX3JlZiBnc19iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpbnQJCQlnY251bTsKIAlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gY2Rldi0+Z2FkZ2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYwppbmRleCAwNGM0NjJmLi40ODRhY2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYwpAQCAtNTcsMTAgKzU3LDEyIEBACiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAKLS8qIFRoYW5rcyB0byBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgorLyoKKyAqIFRoYW5rcyB0byBOZXRDaGlwIFRlY2hub2xvZ2llcyBmb3IgZG9uYXRpbmcgdGhpcyBwcm9kdWN0IElELgogICoKICAqIERPIE5PVCBSRVVTRSBUSEVTRSBJRHMgd2l0aCBhbnkgb3RoZXIgZHJpdmVyISEgIEV2ZXIhIQotICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuICovCisgKiBJbnN0ZWFkOiAgYWxsb2NhdGUgeW91ciBvd24sIHVzaW5nIG5vcm1hbCBVU0ItSUYgcHJvY2VkdXJlcy4KKyAqLwogI2RlZmluZSBGU0dfVkVORE9SX0lECTB4MDUyNQkvKiBOZXRDaGlwICovCiAjZGVmaW5lIEZTR19QUk9EVUNUX0lECTB4YTRhNQkvKiBMaW51eC1VU0IgRmlsZS1iYWNrZWQgU3RvcmFnZSBHYWRnZXQgKi8KIApAQCAtODQsMTQgKzg2LDI3IEBACiAjZGVmaW5lIExXQVJOKGx1biwgZm10LCBhcmdzLi4uKSAgZGV2X3dhcm4oJihsdW4pLT5kZXYsIGZtdCwgIyMgYXJncykKICNkZWZpbmUgTElORk8obHVuLCBmbXQsIGFyZ3MuLi4pICBkZXZfaW5mbygmKGx1biktPmRldiwgZm10LCAjIyBhcmdzKQogCi0vKiBLZWVwIHRob3NlIG1hY3JvcyBpbiBzeW5jIHdpdGggdGhvcyBpbgotICogaW5jbHVkZS9saW51eC91YnMvY29tcG9zaXRlLmggb3IgZWxzZSBHQ0Mgd2lsbCBjb21wbGFpbi4gIElmIHRoZXkKKy8qCisgKiBLZWVwIHRob3NlIG1hY3JvcyBpbiBzeW5jIHdpdGggdGhvc2UgaW4KKyAqIGluY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIG9yIGVsc2UgR0NDIHdpbGwgY29tcGxhaW4uICBJZiB0aGV5CiAgKiBhcmUgaWRlbnRpY2FsICh0aGUgc2FtZSBuYW1lcyBvZiBhcmd1bWVudHMsIHdoaXRlIHNwYWNlcyBpbiB0aGUKICAqIHNhbWUgcGxhY2VzKSBHQ0Mgd2lsbCBhbGxvdyByZWRlZmluaXRpb24gb3RoZXJ3aXNlIChldmVuIGlmIHNvbWUKLSAqIHdoaXRlIHNwYWNlIGlzIHJlbW92ZWQgb3IgYWRkZWQpIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuICBObwotICogY2hlY2tpbmcgaWYgdGhvc2Ugc3ltYm9scyBpcyBkZWZpbmVkIGlzIHBlcmZvcm1lZCBiZWNhdXNlIHdhcm5pbmcKLSAqIGlzIGRlc2lyZWQgd2hlbiB0aG9zZSBtYWNyb3Mgd2VyZSBkZWZpbmVkIGJ5IHNvbWVvbmUgZWxzZSB0byBtZWFuCi0gKiBzb21ldGhpbmcgZWxzZS4gKi8KKyAqIHdoaXRlIHNwYWNlIGlzIHJlbW92ZWQgb3IgYWRkZWQpIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQuCisgKgorICogVGhvc2UgbWFjcm9zIGFyZSBuZWVkZWQgaGVyZSBiZWNhdXNlIEZpbGUgU3RvcmFnZSBHYWRnZXQgZG9lcyBub3QKKyAqIGluY2x1ZGUgdGhlIGNvbXBvc2l0ZS5oIGhlYWRlci4gIEZvciBjb21wb3NpdGUgZ2FkZ2V0cyB0aG9zZSBtYWNyb3MKKyAqIGFyZSByZWR1bmRhbnQgc2luY2UgY29tcG9zaXRlLmggaXMgaW5jbHVkZWQgYW55IHdheS4KKyAqCisgKiBPbmUgY291bGQgY2hlY2sgd2hldGhlciB0aG9zZSBtYWNyb3MgYXJlIGFscmVhZHkgZGVmaW5lZCAod2hpY2gKKyAqIHdvdWxkIGluZGljYXRlIGNvbXBvc2l0ZS5oIGhhZCBiZWVuIGluY2x1ZGVkKSBvciBub3QgKHdoaWNoIHdvdWxkCisgKiBpbmRpY2F0ZSB3ZSB3ZXJlIGluIEZTRykgYnV0IHRoaXMgaXMgbm90IGRvbmUgYmVjYXVzZSBhIHdhcm5pbmcgaXMKKyAqIGRlc2lyZWQgaWYgZGVmaW5pdGlvbnMgaGVyZSBkaWZmZXIgZnJvbSB0aGUgb25lcyBpbiBjb21wb3NpdGUuaC4KKyAqCisgKiBXZSB3YW50IHRoZSBkZWZpbml0aW9ucyB0byBtYXRjaCBhbmQgYmUgdGhlIHNhbWUgaW4gRmlsZSBTdG9yYWdlCisgKiBHYWRnZXQgYXMgd2VsbCBhcyBNYXNzIFN0b3JhZ2UgRnVuY3Rpb24gKGFuZCBzbyBjb21wb3NpdGUgZ2FkZ2V0cworICogdXNpbmcgTVNGKS4gIElmIHNvbWVvbmUgY2hhbmdlcyB0aGVtIGluIGNvbXBvc2l0ZS5oIGl0IHdpbGwgcHJvZHVjZQorICogYSB3YXJuaW5nIGluIHRoaXMgZmlsZSB3aGVuIGJ1aWxkaW5nIE1TRi4KKyAqLwogI2RlZmluZSBEQkcoZCwgZm10LCBhcmdzLi4uKSAgICAgZGV2X2RiZygmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIFZEQkcoZCwgZm10LCBhcmdzLi4uKSAgICBkZXZfdmRiZygmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIEVSUk9SKGQsIGZtdCwgYXJncy4uLikgICBkZXZfZXJyKCYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKQEAgLTI2OSw2ICsyODQsNyBAQAogCXVuc2lnbmVkIGludAlwcmV2ZW50X21lZGl1bV9yZW1vdmFsOjE7CiAJdW5zaWduZWQgaW50CXJlZ2lzdGVyZWQ6MTsKIAl1bnNpZ25lZCBpbnQJaW5mb192YWxpZDoxOworCXVuc2lnbmVkIGludAlub2Z1YToxOwogCiAJdTMyCQlzZW5zZV9kYXRhOwogCXUzMgkJc2Vuc2VfZGF0YV9pbmZvOwpAQCAtMzEzLDkgKzMyOSwxMSBAQAogCWVudW0gZnNnX2J1ZmZlcl9zdGF0ZQkJc3RhdGU7CiAJc3RydWN0IGZzZ19idWZmaGQJCSpuZXh0OwogCi0JLyogVGhlIE5ldENoaXAgMjI4MCBpcyBmYXN0ZXIsIGFuZCBoYW5kbGVzIHNvbWUgcHJvdG9jb2wgZmF1bHRzCisJLyoKKwkgKiBUaGUgTmV0Q2hpcCAyMjgwIGlzIGZhc3RlciwgYW5kIGhhbmRsZXMgc29tZSBwcm90b2NvbCBmYXVsdHMKIAkgKiBiZXR0ZXIsIGlmIHdlIGRvbid0IHN1Ym1pdCBhbnkgc2hvcnQgYnVsay1vdXQgcmVhZCByZXF1ZXN0cy4KLQkgKiBTbyB3ZSB3aWxsIHJlY29yZCB0aGUgaW50ZW5kZWQgcmVxdWVzdCBsZW5ndGggaGVyZS4gKi8KKwkgKiBTbyB3ZSB3aWxsIHJlY29yZCB0aGUgaW50ZW5kZWQgcmVxdWVzdCBsZW5ndGggaGVyZS4KKwkgKi8KIAl1bnNpZ25lZCBpbnQJCQlidWxrX291dF9pbnRlbmRlZF9sZW5ndGg7CiAKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSppbnJlcTsKQEAgLTM5NSw4ICs0MTMsMTAgQEAKIAkuaUludGVyZmFjZSA9CQlGU0dfU1RSSU5HX0lOVEVSRkFDRSwKIH07CiAKLS8qIFRocmVlIGZ1bGwtc3BlZWQgZW5kcG9pbnQgZGVzY3JpcHRvcnM6IGJ1bGstaW4sIGJ1bGstb3V0LAotICogYW5kIGludGVycnVwdC1pbi4gKi8KKy8qCisgKiBUaHJlZSBmdWxsLXNwZWVkIGVuZHBvaW50IGRlc2NyaXB0b3JzOiBidWxrLWluLCBidWxrLW91dCwgYW5kCisgKiBpbnRlcnJ1cHQtaW4uCisgKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgogZnNnX2ZzX2J1bGtfaW5fZGVzYyA9IHsKQEAgLTQ1OSw3ICs0NzksNyBAQAogICoKICAqIFRoYXQgbWVhbnMgYWx0ZXJuYXRlIGVuZHBvaW50IGRlc2NyaXB0b3JzIChiaWdnZXIgcGFja2V0cykKICAqIGFuZCBhICJkZXZpY2UgcXVhbGlmaWVyIiAuLi4gcGx1cyBtb3JlIGNvbnN0cnVjdGlvbiBvcHRpb25zCi0gKiBmb3IgdGhlIGNvbmZpZyBkZXNjcmlwdG9yLgorICogZm9yIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IKIGZzZ19oc19idWxrX2luX2Rlc2MgPSB7CkBAIC01NDcsOCArNTY3LDEwIEBACiAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBJZiB0aGUgbmV4dCB0d28gcm91dGluZXMgYXJlIGNhbGxlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQsCi0gKiB0aGUgY2FsbGVyIG11c3Qgb3duIGZzZy0+ZmlsZXNlbSBmb3Igd3JpdGluZy4gKi8KKy8qCisgKiBJZiB0aGUgbmV4dCB0d28gcm91dGluZXMgYXJlIGNhbGxlZCB3aGlsZSB0aGUgZ2FkZ2V0IGlzIHJlZ2lzdGVyZWQsCisgKiB0aGUgY2FsbGVyIG11c3Qgb3duIGZzZy0+ZmlsZXNlbSBmb3Igd3JpdGluZy4KKyAqLwogCiBzdGF0aWMgaW50IGZzZ19sdW5fb3BlbihzdHJ1Y3QgZnNnX2x1biAqY3VybHVuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKQEAgLTU4Nyw4ICs2MDksMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgZmlsZSwgaXQncyBubyBnb29kLgotCSAqIElmIHdlIGNhbid0IHdyaXRlIHRoZSBmaWxlLCB1c2UgaXQgcmVhZC1vbmx5LiAqLworCS8qCisJICogSWYgd2UgY2FuJ3QgcmVhZCB0aGUgZmlsZSwgaXQncyBubyBnb29kLgorCSAqIElmIHdlIGNhbid0IHdyaXRlIHRoZSBmaWxlLCB1c2UgaXQgcmVhZC1vbmx5LgorCSAqLwogCWlmICghZmlscC0+Zl9vcCB8fCAhKGZpbHAtPmZfb3AtPnJlYWQgfHwgZmlscC0+Zl9vcC0+YWlvX3JlYWQpKSB7CiAJCUxJTkZPKGN1cmx1biwgImZpbGUgbm90IHJlYWRhYmxlOiAlc1xuIiwgZmlsZW5hbWUpOwogCQlnb3RvIG91dDsKQEAgLTY0Niw4ICs2NzAsMTAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogU3luYyB0aGUgZmlsZSBkYXRhLCBkb24ndCBib3RoZXIgd2l0aCB0aGUgbWV0YWRhdGEuCi0gKiBUaGlzIGNvZGUgd2FzIGNvcGllZCBmcm9tIGZzL2J1ZmZlci5jOnN5c19mZGF0YXN5bmMoKS4gKi8KKy8qCisgKiBTeW5jIHRoZSBmaWxlIGRhdGEsIGRvbid0IGJvdGhlciB3aXRoIHRoZSBtZXRhZGF0YS4KKyAqIFRoaXMgY29kZSB3YXMgY29waWVkIGZyb20gZnMvYnVmZmVyLmM6c3lzX2ZkYXRhc3luYygpLgorICovCiBzdGF0aWMgaW50IGZzZ19sdW5fZnN5bmNfc3ViKHN0cnVjdCBmc2dfbHVuICpjdXJsdW4pCiB7CiAJc3RydWN0IGZpbGUJKmZpbHAgPSBjdXJsdW4tPmZpbHA7CkBAIC02ODksNiArNzE1LDE0IEBACiAJCQkJICA6IGN1cmx1bi0+aW5pdGlhbGx5X3JvKTsKIH0KIAorc3RhdGljIHNzaXplX3QgZnNnX3Nob3dfbm9mdWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gZnNnX2x1bl9mcm9tX2RldihkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGN1cmx1bi0+bm9mdWEpOworfQorCiBzdGF0aWMgc3NpemVfdCBmc2dfc2hvd19maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgIGNoYXIgKmJ1ZikKIHsKQEAgLTcyMywyNiArNzU3LDQ3IEBACiAJc3NpemVfdAkJcmMgPSBjb3VudDsKIAlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gZnNnX2x1bl9mcm9tX2RldihkZXYpOwogCXN0cnVjdCByd19zZW1hcGhvcmUJKmZpbGVzZW0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQJCWk7CisJdW5zaWduZWQgbG9uZwlybzsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaSkgIT0gMSkKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAyLCAmcm8pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFsbG93IHRoZSB3cml0ZS1lbmFibGUgc3RhdHVzIHRvIGNoYW5nZSBvbmx5IHdoaWxlIHRoZSBiYWNraW5nIGZpbGUKLQkgKiBpcyBjbG9zZWQuICovCisJLyoKKwkgKiBBbGxvdyB0aGUgd3JpdGUtZW5hYmxlIHN0YXR1cyB0byBjaGFuZ2Ugb25seSB3aGlsZSB0aGUKKwkgKiBiYWNraW5nIGZpbGUgaXMgY2xvc2VkLgorCSAqLwogCWRvd25fcmVhZChmaWxlc2VtKTsKIAlpZiAoZnNnX2x1bl9pc19vcGVuKGN1cmx1bikpIHsKIAkJTERCRyhjdXJsdW4sICJyZWFkLW9ubHkgc3RhdHVzIGNoYW5nZSBwcmV2ZW50ZWRcbiIpOwogCQlyYyA9IC1FQlVTWTsKIAl9IGVsc2UgewotCQljdXJsdW4tPnJvID0gISFpOwotCQljdXJsdW4tPmluaXRpYWxseV9ybyA9ICEhaTsKKwkJY3VybHVuLT5ybyA9IHJvOworCQljdXJsdW4tPmluaXRpYWxseV9ybyA9IHJvOwogCQlMREJHKGN1cmx1biwgInJlYWQtb25seSBzdGF0dXMgc2V0IHRvICVkXG4iLCBjdXJsdW4tPnJvKTsKIAl9CiAJdXBfcmVhZChmaWxlc2VtKTsKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGZzZ19zdG9yZV9ub2Z1YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZzZ19sdW4JKmN1cmx1biA9IGZzZ19sdW5fZnJvbV9kZXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nCW5vZnVhOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMiwgJm5vZnVhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTeW5jIGRhdGEgd2hlbiBzd2l0Y2hpbmcgZnJvbSBhc3luYyBtb2RlIHRvIHN5bmMgKi8KKwlpZiAoIW5vZnVhICYmIGN1cmx1bi0+bm9mdWEpCisJCWZzZ19sdW5fZnN5bmNfc3ViKGN1cmx1bik7CisKKwljdXJsdW4tPm5vZnVhID0gbm9mdWE7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGZzZ19zdG9yZV9maWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCmluZGV4IDFkYTc1NWEuLjZiYjg3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtNzA0LDE3ICs3MDQsNiBAQAogbW9kdWxlX3BhcmFtKGhvc3RfYWRkciwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhob3N0X2FkZHIsICJIb3N0IEV0aGVybmV0IEFkZHJlc3MiKTsKIAotCi1zdGF0aWMgdTggX19pbml0IG5pYmJsZSh1bnNpZ25lZCBjaGFyIGMpCi17Ci0JaWYgKGlzZGlnaXQoYykpCi0JCXJldHVybiBjIC0gJzAnOwotCWMgPSB0b3VwcGVyKGMpOwotCWlmIChpc3hkaWdpdChjKSkKLQkJcmV0dXJuIDEwICsgYyAtICdBJzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBnZXRfZXRoZXJfYWRkcihjb25zdCBjaGFyICpzdHIsIHU4ICpkZXZfYWRkcikKIHsKIAlpZiAoc3RyKSB7CkBAIC03MjUsOCArNzE0LDggQEAKIAogCQkJaWYgKCgqc3RyID09ICcuJykgfHwgKCpzdHIgPT0gJzonKSkKIAkJCQlzdHIrKzsKLQkJCW51bSA9IG5pYmJsZSgqc3RyKyspIDw8IDQ7Ci0JCQludW0gfD0gKG5pYmJsZSgqc3RyKyspKTsKKwkJCW51bSA9IGhleF90b19iaW4oKnN0cisrKSA8PCA0OworCQkJbnVtIHw9IGhleF90b19iaW4oKnN0cisrKTsKIAkJCWRldl9hZGRyIFtpXSA9IG51bTsKIAkJfQogCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXZfYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCmluZGV4IDNlOGRjYjUuLjAxZTUzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCkBAIC0xOCw2ICsxOCw3IEBACiAvKiAjZGVmaW5lIFZFUkJPU0VfREVCVUcgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC93ZWJjYW0uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC93ZWJjYW0uYwppbmRleCAyODhkMjExLi5kZTFkZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvd2ViY2FtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3dlYmNhbS5jCkBAIC0zMDgsNyArMzA4LDcgQEAKICAqIFVTQiBjb25maWd1cmF0aW9uCiAgKi8KIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19yZWYKIHdlYmNhbV9jb25maWdfYmluZChzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7CiAJcmV0dXJuIHV2Y19iaW5kX2NvbmZpZyhjLCB1dmNfY29udHJvbF9jbHMsIHV2Y19mc19zdHJlYW1pbmdfY2xzLApAQCAtMzMwLDcgKzMzMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0CitzdGF0aWMgaW50IF9fcmVmCiB3ZWJjYW1fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCmluZGV4IDgwNzI4MGQuLmNmMzUzOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19pbml0IHplcm9fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCitzdGF0aWMgaW50IF9fcmVmIHplcm9fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJaW50CQkJZ2NudW07CiAJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCBmODY1YmUyLi4yZDkyNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC03Miw4ICs3Miw5IEBACiAJICBmcm9tIEFSQywgYW5kIGhhcyBzaW5jZSBjaGFuZ2VkIGhhbmRzIGEgZmV3IHRpbWVzLgogCiBjb25maWcgVVNCX0VIQ0lfVFRfTkVXU0NIRUQKLQlib29sICJJbXByb3ZlZCBUcmFuc2FjdGlvbiBUcmFuc2xhdG9yIHNjaGVkdWxpbmcgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0JfRUhDSV9IQ0QgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiSW1wcm92ZWQgVHJhbnNhY3Rpb24gVHJhbnNsYXRvciBzY2hlZHVsaW5nIgorCWRlcGVuZHMgb24gVVNCX0VIQ0lfSENECisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBjaGFuZ2VzIHRoZSBwZXJpb2RpYyBzY2hlZHVsaW5nIGNvZGUgdG8gZmlsbCBtb3JlIG9mIHRoZSBsb3cKIAkgIGFuZCBmdWxsIHNwZWVkIGJhbmR3aWR0aCBhdmFpbGFibGUgZnJvbSB0aGUgVHJhbnNhY3Rpb24gVHJhbnNsYXRvcgpAQCAtODQsOSArODUsMTEgQEAKIAkgIElmIHlvdSBoYXZlIG11bHRpcGxlIHBlcmlvZGljIGxvdy9mdWxsc3BlZWQgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYQogCSAgaGlnaHNwZWVkIFVTQiBodWIgd2hpY2ggaXMgY29ubmVjdGVkIHRvIGEgaGlnaHNwZWVkIFVTQiBIb3N0CiAJICBDb250cm9sbGVyLCBhbmQgc29tZSBvZiB0aG9zZSBkZXZpY2VzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5Ci0JICAocG9zc2libHkgZHVlIHRvICJFTk9TUEMiIG9yICItMjgiIGVycm9ycyksIHNheSBZLgorCSAgKHBvc3NpYmx5IGR1ZSB0byAiRU5PU1BDIiBvciAiLTI4IiBlcnJvcnMpLCBzYXkgWS4gIENvbnZlcnNlbHksIGlmCisJICB5b3UgaGF2ZSBvbmx5IG9uZSBzdWNoIGRldmljZSBhbmQgaXQgZG9lc24ndCB3b3JrLCB5b3UgY291bGQgdHJ5CisJICBzYXlpbmcgTi4KIAotCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBVU0JfRUhDSV9CSUdfRU5ESUFOX01NSU8KIAlib29sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggZmFhNjE3NC4uMmJhZjhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwotCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2kpOworCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKaW5kZXggODc0ZDIwMC4uNzZiN2ZkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwpAQCAtOTgsMTMgKzk4LDE4IEBACiAJCQlIQ0NfNjRCSVRfQUREUihwYXJhbXMpID8gIiA2NCBiaXQgYWRkciIgOiAiIik7CiAJfSBlbHNlIHsKIAkJZWhjaV9kYmcgKGVoY2ksCi0JCQkiJXMgaGNjX3BhcmFtcyAlMDR4IHRocmVzaCAlZCB1ZnJhbWVzICVzJXMlc1xuIiwKKwkJCSIlcyBoY2NfcGFyYW1zICUwNHggdGhyZXNoICVkIHVmcmFtZXMgJXMlcyVzJXMlcyVzJXNcbiIsCiAJCQlsYWJlbCwKIAkJCXBhcmFtcywKIAkJCUhDQ19JU09DX1RIUkVTKHBhcmFtcyksCiAJCQlIQ0NfUEdNX0ZSQU1FTElTVExFTihwYXJhbXMpID8gIjI1Ni81MTIvMTAyNCIgOiAiMTAyNCIsCiAJCQlIQ0NfQ0FOUEFSSyhwYXJhbXMpID8gIiBwYXJrIiA6ICIiLAotCQkJSENDXzY0QklUX0FERFIocGFyYW1zKSA/ICIgNjQgYml0IGFkZHIiIDogIiIpOworCQkJSENDXzY0QklUX0FERFIocGFyYW1zKSA/ICIgNjQgYml0IGFkZHIiIDogIiIsCisJCQlIQ0NfTFBNKHBhcmFtcykgPyAiIExQTSIgOiAiIiwKKwkJCUhDQ19QRVJfUE9SVF9DSEFOR0VfRVZFTlQocGFyYW1zKSA/ICIgcHBjZSIgOiAiIiwKKwkJCUhDQ19IV19QUkVGRVRDSChwYXJhbXMpID8gIiBodyBwcmVmZXRjaCIgOiAiIiwKKwkJCUhDQ18zMkZSQU1FX1BFUklPRElDX0xJU1QocGFyYW1zKSA/CisJCQkJIiAzMiBwZXJpZGljIGxpc3QiIDogIiIpOwogCX0KIH0KICNlbHNlCkBAIC0xOTEsOCArMTk2LDkgQEAKIGRiZ19zdGF0dXNfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBzdGF0dXMpCiB7CiAJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCi0JCSIlcyVzc3RhdHVzICUwNHglcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCSIlcyVzc3RhdHVzICUwNHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzIiwKIAkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBzdGF0dXMsCisJCShzdGF0dXMgJiBTVFNfUFBDRV9NQVNLKSA/ICIgUFBDRSIgOiAiIiwKIAkJKHN0YXR1cyAmIFNUU19BU1MpID8gIiBBc3luYyIgOiAiIiwKIAkJKHN0YXR1cyAmIFNUU19QU1MpID8gIiBQZXJpb2RpYyIgOiAiIiwKIAkJKHN0YXR1cyAmIFNUU19SRUNMKSA/ICIgUmVjbCIgOiAiIiwKQEAgLTIxMCw4ICsyMTYsOSBAQAogZGJnX2ludHJfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBlbmFibGUpCiB7CiAJcmV0dXJuIHNjbnByaW50ZiAoYnVmLCBsZW4sCi0JCSIlcyVzaW50cmVuYWJsZSAlMDJ4JXMlcyVzJXMlcyVzIiwKKwkJIiVzJXNpbnRyZW5hYmxlICUwMnglcyVzJXMlcyVzJXMlcyIsCiAJCWxhYmVsLCBsYWJlbCBbMF0gPyAiICIgOiAiIiwgZW5hYmxlLAorCQkoZW5hYmxlICYgU1RTX1BQQ0VfTUFTSykgPyAiIFBQQ0UiIDogIiIsCiAJCShlbmFibGUgJiBTVFNfSUFBKSA/ICIgSUFBIiA6ICIiLAogCQkoZW5hYmxlICYgU1RTX0ZBVEFMKSA/ICIgRkFUQUwiIDogIiIsCiAJCShlbmFibGUgJiBTVFNfRkxSKSA/ICIgRkxSIiA6ICIiLApAQCAtMjI4LDkgKzIzNSwxNSBAQAogZGJnX2NvbW1hbmRfYnVmIChjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgY29uc3QgY2hhciAqbGFiZWwsIHUzMiBjb21tYW5kKQogewogCXJldHVybiBzY25wcmludGYgKGJ1ZiwgbGVuLAotCQkiJXMlc2NvbW1hbmQgJTA2eCAlcz0lZCBpdGhyZXNoPSVkJXMlcyVzJXMgcGVyaW9kPSVzJXMgJXMiLAorCQkiJXMlc2NvbW1hbmQgJTA3eCAlcyVzJXMlcyVzJXM9JWQgaXRocmVzaD0lZCVzJXMlcyVzICIKKwkJInBlcmlvZD0lcyVzICVzIiwKIAkJbGFiZWwsIGxhYmVsIFswXSA/ICIgIiA6ICIiLCBjb21tYW5kLAotCQkoY29tbWFuZCAmIENNRF9QQVJLKSA/ICJwYXJrIiA6ICIocGFyaykiLAorCQkoY29tbWFuZCAmIENNRF9ISVJEKSA/ICIgSElSRCIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfUFBDRUUpID8gIiBQUENFRSIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfRlNQKSA/ICIgRlNQIiA6ICIiLAorCQkoY29tbWFuZCAmIENNRF9BU1BFKSA/ICIgQVNQRSIgOiAiIiwKKwkJKGNvbW1hbmQgJiBDTURfUFNQRSkgPyAiIFBTUEUiIDogIiIsCisJCShjb21tYW5kICYgQ01EX1BBUkspID8gIiBwYXJrIiA6ICIocGFyaykiLAogCQlDTURfUEFSS19DTlQgKGNvbW1hbmQpLAogCQkoY29tbWFuZCA+PiAxNikgJiAweDNmLAogCQkoY29tbWFuZCAmIENNRF9MUkVTRVQpID8gIiBMUmVzZXQiIDogIiIsCkBAIC0yNTcsMTEgKzI3MCwyMiBAQAogCX0KIAogCXJldHVybiBzY25wcmludGYgKGJ1ZiwgbGVuLAotCQkiJXMlc3BvcnQgJWQgc3RhdHVzICUwNnglcyVzIHNpZz0lcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisJCSIlcyVzcG9ydDolZCBzdGF0dXMgJTA2eCAlZCAlcyVzJXMlcyVzJXMgIgorCQkic2lnPSVzJXMlcyVzJXMlcyVzJXMlcyVzJXMiLAogCQlsYWJlbCwgbGFiZWwgWzBdID8gIiAiIDogIiIsIHBvcnQsIHN0YXR1cywKKwkJc3RhdHVzPj4yNSwvKmRldmljZSBhZGRyZXNzICovCisJCShzdGF0dXMgJiBQT1JUX1NTVFMpPj4yMyA9PSBQT1JUU0NfU1VTUEVORF9TVFNfQUNLID8KKwkJCQkJCSIgQUNLIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9TU1RTKT4+MjMgPT0gUE9SVFNDX1NVU1BFTkRfU1RTX05ZRVQgPworCQkJCQkJIiBOWUVUIiA6ICIiLAorCQkoc3RhdHVzICYgUE9SVF9TU1RTKT4+MjMgPT0gUE9SVFNDX1NVU1BFTkRfU1RTX1NUQUxMID8KKwkJCQkJCSIgU1RBTEwiIDogIiIsCisJCShzdGF0dXMgJiBQT1JUX1NTVFMpPj4yMyA9PSBQT1JUU0NfU1VTUEVORF9TVFNfRVJSID8KKwkJCQkJCSIgRVJSIiA6ICIiLAogCQkoc3RhdHVzICYgUE9SVF9QT1dFUikgPyAiIFBPV0VSIiA6ICIiLAogCQkoc3RhdHVzICYgUE9SVF9PV05FUikgPyAiIE9XTkVSIiA6ICIiLAogCQlzaWcsCisJCShzdGF0dXMgJiBQT1JUX0xQTSkgPyAiIExQTSIgOiAiIiwKIAkJKHN0YXR1cyAmIFBPUlRfUkVTRVQpID8gIiBSRVNFVCIgOiAiIiwKIAkJKHN0YXR1cyAmIFBPUlRfU1VTUEVORCkgPyAiIFNVU1BFTkQiIDogIiIsCiAJCShzdGF0dXMgJiBQT1JUX1JFU1VNRSkgPyAiIFJFU1VNRSIgOiAiIiwKQEAgLTMzMCw2ICszNTQsMTMgQEAKIHN0YXRpYyBpbnQgZGVidWdfcGVyaW9kaWNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgaW50IGRlYnVnX3JlZ2lzdGVyc19vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgZGVidWdfYXN5bmNfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGRlYnVnX2xwbV9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyBzc2l6ZV90IGRlYnVnX2xwbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIHNzaXplX3QgZGVidWdfbHBtX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworc3RhdGljIGludCBkZWJ1Z19scG1fY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCiBzdGF0aWMgc3NpemVfdCBkZWJ1Z19vdXRwdXQoc3RydWN0IGZpbGUqLCBjaGFyIF9fdXNlciosIHNpemVfdCwgbG9mZl90Kik7CiBzdGF0aWMgaW50IGRlYnVnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIApAQCAtMzUxLDYgKzM4MiwxMyBAQAogCS5yZWFkCQk9IGRlYnVnX291dHB1dCwKIAkucmVsZWFzZQk9IGRlYnVnX2Nsb3NlLAogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2xwbV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkZWJ1Z19scG1fb3BlbiwKKwkucmVhZAkJPSBkZWJ1Z19scG1fcmVhZCwKKwkud3JpdGUJCT0gZGVidWdfbHBtX3dyaXRlLAorCS5yZWxlYXNlCT0gZGVidWdfbHBtX2Nsb3NlLAorfTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmVoY2lfZGVidWdfcm9vdDsKIApAQCAtNjc0LDcgKzcxMiw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXNpemUgPSBzY25wcmludGYgKG5leHQsIHNpemUsCiAJCQkiYnVzICVzLCBkZXZpY2UgJXNcbiIKIAkJCSIlc1xuIgpAQCAtOTE3LDUxICs5NTUsMTI3IEBACiAJcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YSA/IDAgOiAtRU5PTUVNOwogfQogCitzdGF0aWMgaW50IGRlYnVnX2xwbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfbHBtX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWJ1Z19scG1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCS8qIFRPRE86IHNob3cgbHBtIHN0YXRzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRlYnVnX2xwbV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IGVoY2lfaGNkCQkqZWhjaTsKKwljaGFyIGJ1Zls1MF07CisJc2l6ZV90IGxlbjsKKwl1MzIgdGVtcDsKKwl1bnNpZ25lZCBsb25nIHBvcnQ7CisJdTMyIF9faW9tZW0JKnBvcnRzYyA7CisJdTMyIHBhcmFtczsKKworCWhjZCA9IGJ1c190b19oY2QoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwllaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZbbGVuIC0gMV0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAiZW5hYmxlIiwgNSkgPT0gMCkgeworCQlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmICsgNywgMTAsICZwb3J0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwYXJhbXMgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5jYXBzLT5oY3NfcGFyYW1zKTsKKwkJaWYgKHBvcnQgPiBIQ1NfTl9QT1JUUyhwYXJhbXMpKSB7CisJCQllaGNpX2RiZyhlaGNpLCAiRVJSOiBMUE0gb24gYmFkIHBvcnQgJWx1XG4iLCBwb3J0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXBvcnRzYyA9ICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1twb3J0LTFdOworCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCBwb3J0c2MpOworCQlpZiAoISh0ZW1wICYgUE9SVF9ERVZfQUREUikpIHsKKwkJCWVoY2lfZGJnKGVoY2ksICJMUE06IG5vIGRldmljZSBhdHRhY2hlZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQl0ZW1wIHw9IFBPUlRfTFBNOworCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wLCBwb3J0c2MpOworCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZSBlbmFibGUgTFBNIGZvciBwb3J0ICVsdVxuIiwgcG9ydCk7CisJfSBlbHNlIGlmIChzdHJuY21wKGJ1ZiwgImhpcmQ9IiwgNSkgPT0gMCkgeworCQl1bnNpZ25lZCBsb25nIGhpcmQ7CisJCWlmIChzdHJpY3Rfc3RydG91bChidWYgKyA1LCAxNiwgJmhpcmQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0lORk8gInNldHRpbmcgaGlyZCAlcyAlbHVcbiIsIGJ1ZiArIDYsIGhpcmQpOworCQl0ZW1wID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+Y29tbWFuZCk7CisJCXRlbXAgJj0gfkNNRF9ISVJEOworCQl0ZW1wIHw9IGhpcmQgPDwgMjQ7CisJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAsICZlaGNpLT5yZWdzLT5jb21tYW5kKTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiZGlzYWJsZSIsIDcpID09IDApIHsKKwkJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiArIDgsIDEwLCAmcG9ydCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CisJCWlmIChwb3J0ID4gSENTX05fUE9SVFMocGFyYW1zKSkgeworCQkJZWhjaV9kYmcoZWhjaSwgIkVSUjogTFBNIG9mZiBiYWQgcG9ydCAlbHVcbiIsIHBvcnQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJcG9ydHNjID0gJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzW3BvcnQtMV07CisJCXRlbXAgPSBlaGNpX3JlYWRsKGVoY2ksIHBvcnRzYyk7CisJCWlmICghKHRlbXAgJiBQT1JUX0RFVl9BRERSKSkgeworCQkJZWhjaV9kYmcoZWhjaSwgIkVSUjogbm8gZGV2aWNlIGF0dGFjaGVkXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCXRlbXAgJj0gflBPUlRfTFBNOworCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wLCBwb3J0c2MpOworCQlwcmludGsoS0VSTl9JTkZPICJkaXNhYmxlZCBMUE0gZm9yIHBvcnQgJWx1XG4iLCBwb3J0KTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyAoc3RydWN0IGVoY2lfaGNkICplaGNpKQogewogCXN0cnVjdCB1c2JfYnVzICpidXMgPSAmZWhjaV90b19oY2QoZWhjaSktPnNlbGY7CiAKIAllaGNpLT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoYnVzLT5idXNfbmFtZSwgZWhjaV9kZWJ1Z19yb290KTsKIAlpZiAoIWVoY2ktPmRlYnVnX2RpcikKLQkJZ290byBkaXJfZXJyb3I7CisJCXJldHVybjsKIAotCWVoY2ktPmRlYnVnX2FzeW5jID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYXN5bmMiLCBTX0lSVUdPLAotCQkJCQkJZWhjaS0+ZGVidWdfZGlyLCBidXMsCi0JCQkJCQkmZGVidWdfYXN5bmNfZm9wcyk7Ci0JaWYgKCFlaGNpLT5kZWJ1Z19hc3luYykKLQkJZ290byBhc3luY19lcnJvcjsKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFzeW5jIiwgU19JUlVHTywgZWhjaS0+ZGVidWdfZGlyLCBidXMsCisJCQkJCQkmZGVidWdfYXN5bmNfZm9wcykpCisJCWdvdG8gZmlsZV9lcnJvcjsKIAotCWVoY2ktPmRlYnVnX3BlcmlvZGljID0gZGVidWdmc19jcmVhdGVfZmlsZSgicGVyaW9kaWMiLCBTX0lSVUdPLAotCQkJCQkJICAgZWhjaS0+ZGVidWdfZGlyLCBidXMsCi0JCQkJCQkgICAmZGVidWdfcGVyaW9kaWNfZm9wcyk7Ci0JaWYgKCFlaGNpLT5kZWJ1Z19wZXJpb2RpYykKLQkJZ290byBwZXJpb2RpY19lcnJvcjsKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoInBlcmlvZGljIiwgU19JUlVHTywgZWhjaS0+ZGVidWdfZGlyLCBidXMsCisJCQkJCQkmZGVidWdfcGVyaW9kaWNfZm9wcykpCisJCWdvdG8gZmlsZV9lcnJvcjsKIAotCWVoY2ktPmRlYnVnX3JlZ2lzdGVycyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlZ2lzdGVycyIsIFNfSVJVR08sCi0JCQkJCQkgICAgZWhjaS0+ZGVidWdfZGlyLCBidXMsCi0JCQkJCQkgICAgJmRlYnVnX3JlZ2lzdGVyc19mb3BzKTsKLQlpZiAoIWVoY2ktPmRlYnVnX3JlZ2lzdGVycykKLQkJZ290byByZWdpc3RlcnNfZXJyb3I7CisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLCBlaGNpLT5kZWJ1Z19kaXIsIGJ1cywKKwkJCQkJCSAgICAmZGVidWdfcmVnaXN0ZXJzX2ZvcHMpKQorCQlnb3RvIGZpbGVfZXJyb3I7CisKKwlpZiAoIWRlYnVnZnNfY3JlYXRlX2ZpbGUoImxwbSIsIFNfSVJVR098U19JV1VHTywgZWhjaS0+ZGVidWdfZGlyLCBidXMsCisJCQkJCQkgICAgJmRlYnVnX2xwbV9mb3BzKSkKKwkJZ290byBmaWxlX2Vycm9yOworCiAJcmV0dXJuOwogCi1yZWdpc3RlcnNfZXJyb3I6Ci0JZGVidWdmc19yZW1vdmUoZWhjaS0+ZGVidWdfcGVyaW9kaWMpOwotcGVyaW9kaWNfZXJyb3I6Ci0JZGVidWdmc19yZW1vdmUoZWhjaS0+ZGVidWdfYXN5bmMpOwotYXN5bmNfZXJyb3I6Ci0JZGVidWdmc19yZW1vdmUoZWhjaS0+ZGVidWdfZGlyKTsKLWRpcl9lcnJvcjoKLQllaGNpLT5kZWJ1Z19wZXJpb2RpYyA9IE5VTEw7Ci0JZWhjaS0+ZGVidWdfYXN5bmMgPSBOVUxMOwotCWVoY2ktPmRlYnVnX2RpciA9IE5VTEw7CitmaWxlX2Vycm9yOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShlaGNpLT5kZWJ1Z19kaXIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7Ci0JZGVidWdmc19yZW1vdmUoZWhjaS0+ZGVidWdfcmVnaXN0ZXJzKTsKLQlkZWJ1Z2ZzX3JlbW92ZShlaGNpLT5kZWJ1Z19wZXJpb2RpYyk7Ci0JZGVidWdmc19yZW1vdmUoZWhjaS0+ZGVidWdfYXN5bmMpOwotCWRlYnVnZnNfcmVtb3ZlKGVoY2ktPmRlYnVnX2Rpcik7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGVoY2ktPmRlYnVnX2Rpcik7CiB9CiAKICNlbmRpZiAvKiBTVFVCX0RFQlVHX0ZJTEVTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKaW5kZXggNWNkOTY3ZC4uYTQxNjQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwpAQCAtMzEzLDcgKzMxMyw4IEBACiAJc3RydWN0IGVoY2lfZnNsICplaGNpX2ZzbCA9IGhjZF90b19laGNpX2ZzbChoY2QpOwogCXZvaWQgX19pb21lbSAqbm9uX2VoY2kgPSBoY2QtPnJlZ3M7CiAKLQllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChoY2RfdG9fZWhjaShoY2QpKTsKKwllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChoY2RfdG9fZWhjaShoY2QpLAorCQkJZGV2aWNlX21heV93YWtldXAoZGV2KSk7CiAJaWYgKCFmc2xfZGVlcF9zbGVlcCgpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCmluZGV4IGEzZWYyYTkuLjM0YTkyOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtNzgsNyArNzksMTMgQEAKICNkZWZpbmUJRUhDSV9UVU5FX1JMX1RUCQkwCiAjZGVmaW5lCUVIQ0lfVFVORV9NVUxUX0hTCTEJLyogMS0zIHRyYW5zYWN0aW9ucy91ZnJhbWU7IDQuMTAuMyAqLwogI2RlZmluZQlFSENJX1RVTkVfTVVMVF9UVAkxCi0jZGVmaW5lCUVIQ0lfVFVORV9GTFMJCTIJLyogKHNtYWxsKSAyNTYgZnJhbWUgc2NoZWR1bGUgKi8KKy8qCisgKiBTb21lIGRyaXZlcnMgdGhpbmsgaXQncyBzYWZlIHRvIHNjaGVkdWxlIGlzb2Nocm9ub3VzIHRyYW5zZmVycyBtb3JlIHRoYW4KKyAqIDI1NiBtcyBpbnRvIHRoZSBmdXR1cmUgKHBhcnRseSBhcyBhIHJlc3VsdCBvZiBhbiBvbGQgYnVnIGluIHRoZSBzY2hlZHVsaW5nCisgKiBjb2RlKS4gIEluIGFuIGF0dGVtcHQgdG8gYXZvaWQgdHJvdWJsZSwgd2Ugd2lsbCB1c2UgYSBtaW5pbXVtIHNjaGVkdWxpbmcKKyAqIGxlbmd0aCBvZiA1MTIgZnJhbWVzIGluc3RlYWQgb2YgMjU2LgorICovCisjZGVmaW5lCUVIQ0lfVFVORV9GTFMJCTEJLyogKG1lZGl1bSkgNTEyLWZyYW1lIHNjaGVkdWxlICovCiAKICNkZWZpbmUgRUhDSV9JQUFfTVNFQ1MJCTEwCQkvKiBhcmJpdHJhcnkgKi8KICNkZWZpbmUgRUhDSV9JT19KSUZGSUVTCQkoSFovMTApCQkvKiBpbyB3YXRjaGRvZyA+IGlycV90aHJlc2ggKi8KQEAgLTEwMCw2ICsxMDcsMTEgQEAKIG1vZHVsZV9wYXJhbSAoaWdub3JlX29jLCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MgKGlnbm9yZV9vYywgImlnbm9yZSBib2d1cyBoYXJkd2FyZSBvdmVyY3VycmVudCBpbmRpY2F0aW9ucyIpOwogCisvKiBmb3IgbGluayBwb3dlciBtYW5hZ2VtZW50KExQTSkgZmVhdHVyZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBoaXJkOworbW9kdWxlX3BhcmFtKGhpcmQsIGludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGhpcmQsICJob3N0IGluaXRpYXRlZCByZXN1bWUgZHVyYXRpb24sICsxIGZvciBlYWNoIDc1dXNcbiIpOworCiAjZGVmaW5lCUlOVFJfTUFTSyAoU1RTX0lBQSB8IFNUU19GQVRBTCB8IFNUU19QQ0QgfCBTVFNfRVJSIHwgU1RTX0lOVCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTMwNCw2ICszMTYsNyBAQAogc3RhdGljIHZvaWQgZWhjaV93b3JrKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSk7CiAKICNpbmNsdWRlICJlaGNpLWh1Yi5jIgorI2luY2x1ZGUgImVoY2ktbHBtLmMiCiAjaW5jbHVkZSAiZWhjaS1tZW0uYyIKICNpbmNsdWRlICJlaGNpLXEuYyIKICNpbmNsdWRlICJlaGNpLXNjaGVkLmMiCkBAIC01NzcsNiArNTkwLDExIEBACiAJaWYgKGxvZzJfaXJxX3RocmVzaCA8IDAgfHwgbG9nMl9pcnFfdGhyZXNoID4gNikKIAkJbG9nMl9pcnFfdGhyZXNoID0gMDsKIAl0ZW1wID0gMSA8PCAoMTYgKyBsb2cyX2lycV90aHJlc2gpOworCWlmIChIQ0NfUEVSX1BPUlRfQ0hBTkdFX0VWRU5UKGhjY19wYXJhbXMpKSB7CisJCWVoY2ktPmhhc19wcGNkID0gMTsKKwkJZWhjaV9kYmcoZWhjaSwgImVuYWJsZSBwZXItcG9ydCBjaGFuZ2UgZXZlbnRcbiIpOworCQl0ZW1wIHw9IENNRF9QUENFRTsKKwl9CiAJaWYgKEhDQ19DQU5QQVJLKGhjY19wYXJhbXMpKSB7CiAJCS8qIEhXIGRlZmF1bHQgcGFyayA9PSAzLCBvbiBoYXJkd2FyZSB0aGF0IHN1cHBvcnRzIGl0IChsaWtlCiAJCSAqIE5WaWRpYSBhbmQgQUxJIHNpbGljb24pLCBtYXhpbWl6ZXMgdGhyb3VnaHB1dCBvbiB0aGUgYXN5bmMKQEAgLTYwMywxMCArNjIxLDIyIEBACiAJCWRlZmF1bHQ6CUJVRygpOwogCQl9CiAJfQorCWlmIChIQ0NfTFBNKGhjY19wYXJhbXMpKSB7CisJCS8qIHN1cHBvcnQgbGluayBwb3dlciBtYW5hZ2VtZW50IEVIQ0kgMS4xIGFkZGVuZHVtICovCisJCWVoY2lfZGJnKGVoY2ksICJzdXBwb3J0IGxwbVxuIik7CisJCWVoY2ktPmhhc19scG0gPSAxOworCQlpZiAoaGlyZCA+IDB4ZikgeworCQkJZWhjaV9kYmcoZWhjaSwgImhpcmQgJWQgaW52YWxpZCwgdXNlIGRlZmF1bHQgMCIsCisJCQloaXJkKTsKKwkJCWhpcmQgPSAwOworCQl9CisJCXRlbXAgfD0gaGlyZCA8PCAyNDsKKwl9CiAJZWhjaS0+Y29tbWFuZCA9IHRlbXA7CiAKIAkvKiBBY2NlcHQgYXJiaXRyYXJpbHkgbG9uZyBzY2F0dGVyLWdhdGhlciBsaXN0cyAqLwotCWhjZC0+c2VsZi5zZ190YWJsZXNpemUgPSB+MDsKKwlpZiAoIShoY2QtPmRyaXZlci0+ZmxhZ3MgJiBIQ0RfTE9DQUxfTUVNKSkKKwkJaGNkLT5zZWxmLnNnX3RhYmxlc2l6ZSA9IH4wOwogCXJldHVybiAwOwogfQogCkBAIC02MTksNyArNjQ5LDYgQEAKIAl1MzIJCQloY2NfcGFyYW1zOwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKLQloY2QtPnBvbGxfcmggPSAwOwogCiAJLyogRUhDSSBzcGVjIHNlY3Rpb24gNC4xICovCiAJaWYgKChyZXR2YWwgPSBlaGNpX3Jlc2V0KGVoY2kpKSAhPSAwKSB7CkBAIC03NjQsNiArNzkzLDcgQEAKIAkvKiByZW1vdGUgd2FrZXVwIFs0LjMuMV0gKi8KIAlpZiAoc3RhdHVzICYgU1RTX1BDRCkgewogCQl1bnNpZ25lZAlpID0gSENTX05fUE9SVFMgKGVoY2ktPmhjc19wYXJhbXMpOworCQl1MzIJCXBwY2QgPSAwOwogCiAJCS8qIGtpY2sgcm9vdCBodWIgbGF0ZXIgKi8KIAkJcGNkX3N0YXR1cyA9IHN0YXR1czsKQEAgLTc3Miw5ICs4MDIsMTggQEAKIAkJaWYgKCEoY21kICYgQ01EX1JVTikpCiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCisJCS8qIGdldCBwZXItcG9ydCBjaGFuZ2UgZGV0ZWN0IGJpdHMgKi8KKwkJaWYgKGVoY2ktPmhhc19wcGNkKQorCQkJcHBjZCA9IHN0YXR1cyA+PiAxNjsKKwogCQl3aGlsZSAoaS0tKSB7Ci0JCQlpbnQgcHN0YXR1cyA9IGVoY2lfcmVhZGwoZWhjaSwKLQkJCQkJCSAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXMgW2ldKTsKKwkJCWludCBwc3RhdHVzOworCisJCQkvKiBsZXZlcmFnZSBwZXItcG9ydCBjaGFuZ2UgYml0cyBmZWF0dXJlICovCisJCQlpZiAoZWhjaS0+aGFzX3BwY2QgJiYgIShwcGNkICYgKDEgPDwgaSkpKQorCQkJCWNvbnRpbnVlOworCQkJcHN0YXR1cyA9IGVoY2lfcmVhZGwoZWhjaSwKKwkJCQkJICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1tpXSk7CiAKIAkJCWlmIChwc3RhdHVzICYgUE9SVF9PV05FUikKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCBlN2QzZDhkLi43OTZlYTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZWhjaV9hZGp1c3RfcG9ydF93YWtldXBfZmxhZ3Moc3RydWN0IGVoY2lfaGNkICplaGNpLAotCQlib29sIHN1c3BlbmRpbmcpCisJCWJvb2wgc3VzcGVuZGluZywgYm9vbCBkb193YWtldXApCiB7CiAJaW50CQlwb3J0OwogCXUzMgkJdGVtcDsKQEAgLTExNyw4ICsxMTcsNyBAQAogCSAqIHdoZW4gdGhlIGNvbnRyb2xsZXIgaXMgc3VzcGVuZGVkIG9yIHJlc3VtZWQuICBJbiBhbGwgb3RoZXIKIAkgKiBjYXNlcyB0aGV5IGRvbid0IG5lZWQgdG8gYmUgY2hhbmdlZC4KIAkgKi8KLQlpZiAoIWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwIHx8Ci0JCQlkZXZpY2VfbWF5X3dha2V1cChlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyKSkKKwlpZiAoIWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLnJvb3RfaHViLT5kb19yZW1vdGVfd2FrZXVwIHx8IGRvX3dha2V1cCkKIAkJcmV0dXJuOwogCiAJLyogY2xlYXIgcGh5IGxvdy1wb3dlciBtb2RlIGJlZm9yZSBjaGFuZ2luZyB3YWtldXAgZmxhZ3MgKi8KQEAgLTE2Nyw2ICsxNjYsMTAgQEAKIAkJCWVoY2lfd3JpdGVsKGVoY2ksIHRlbXAgfCBIT1NUUENfUEhDRCwgaG9zdHBjX3JlZyk7CiAJCX0KIAl9CisKKwkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KKwlpZiAoIXN1c3BlbmRpbmcgJiYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cykgJiBTVFNfUENEKSkKKwkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoZWhjaV90b19oY2QoZWhjaSkpOwogfQogCiBzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCkBAIC0zMTYsNyArMzE5LDcgQEAKIAlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIGVoY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CiAJc3Bpbl9sb2NrX2lycSAoJmVoY2ktPmxvY2spOwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmZWhjaS0+bG9jayk7CiAJCXJldHVybiAtRVNIVVRET1dOOwogCX0KQEAgLTYwMyw2ICs2MDYsNyBAQAogCXUzMgkJbWFzazsKIAlpbnQJCXBvcnRzLCBpLCByZXR2YWwgPSAxOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJdTMyCQlwcGNkID0gMDsKIAogCS8qIGlmICFVU0JfU1VTUEVORCwgcm9vdCBodWIgdGltZXJzIHdvbid0IGdldCBzaHV0IGRvd24gLi4uICovCiAJaWYgKCFIQ19JU19SVU5OSU5HKGhjZC0+c3RhdGUpKQpAQCAtNjMyLDcgKzYzNiwxNSBAQAogCiAJLyogcG9ydCBOIGNoYW5nZXMgKGJpdCBOKT8gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKworCS8qIGdldCBwZXItcG9ydCBjaGFuZ2UgZGV0ZWN0IGJpdHMgKi8KKwlpZiAoZWhjaS0+aGFzX3BwY2QpCisJCXBwY2QgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5zdGF0dXMpID4+IDE2OworCiAJZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsKKwkJLyogbGV2ZXJhZ2UgcGVyLXBvcnQgY2hhbmdlIGJpdHMgZmVhdHVyZSAqLworCQlpZiAoZWhjaS0+aGFzX3BwY2QgJiYgIShwcGNkICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CiAJCXRlbXAgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1cyBbaV0pOwogCiAJCS8qCkBAIC03OTAsNiArODAyLDExIEBACiAJCQkJCSAgc3RhdHVzX3JlZyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJCWlmIChlaGNpLT5oYXNfbHBtKSB7CisJCQkJLyogY2xlYXIgUE9SVFNDIGJpdHMgb24gZGlzY29ubmVjdCAqLworCQkJCXRlbXAgJj0gflBPUlRfTFBNOworCQkJCXRlbXAgJj0gflBPUlRfREVWX0FERFI7CisJCQl9CiAJCQllaGNpX3dyaXRlbChlaGNpLCAodGVtcCAmIH5QT1JUX1JXQ19CSVRTKSB8IFBPUlRfQ1NDLAogCQkJCQlzdGF0dXNfcmVnKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWxwbS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWxwbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDRkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbHBtLmMKQEAgLTAsMCArMSw4MyBAQAorLyogZWhjaS1scG0uYyBFSENJIEhDRCBMUE0gc3VwcG9ydCBjb2RlCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDEwLCAgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IEphY29iIFBhbiA8amFjb2IuanVuLnBhbkBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKiB0aGlzIGZpbGUgaXMgcGFydCBvZiBlaGNpLWhjZC5jICovCitzdGF0aWMgaW50IGVoY2lfbHBtX3NldF9kYShzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBkZXZfYWRkciwgaW50IHBvcnRfbnVtKQoreworCXUzMiBfX2lvbWVtIHBvcnRzYzsKKworCWVoY2lfZGJnKGVoY2ksICJzZXQgZGV2IGFkZHJlc3MgJWQgZm9yIHBvcnQgJWRcbiIsIGRldl9hZGRyLCBwb3J0X251bSk7CisJaWYgKHBvcnRfbnVtID4gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcykpIHsKKwkJZWhjaV9kYmcoZWhjaSwgImludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnRfbnVtKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXBvcnRzYyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzW3BvcnRfbnVtLTFdKTsKKwlwb3J0c2MgJj0gflBPUlRfREVWX0FERFI7CisJcG9ydHNjIHw9IGRldl9hZGRyPDwyNTsKKwllaGNpX3dyaXRlbChlaGNpLCBwb3J0c2MsICZlaGNpLT5yZWdzLT5wb3J0X3N0YXR1c1twb3J0X251bS0xXSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBzdXBwb3J0IExQTQorICogaWYgeWVzLCBtYXJrIHRoZSBQT1JUU0MgcmVnaXN0ZXIgd2l0aCBQT1JUX0xQTSBiaXQKKyAqLworc3RhdGljIGludCBlaGNpX2xwbV9jaGVjayhzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIGludCBwb3J0KQoreworCXUzMiBfX2lvbWVtCSpwb3J0c2MgOworCXUzMiB2YWwzMjsKKwlpbnQgcmV0dmFsOworCisJcG9ydHNjID0gJmVoY2ktPnJlZ3MtPnBvcnRfc3RhdHVzW3BvcnQtMV07CisJdmFsMzIgPSBlaGNpX3JlYWRsKGVoY2ksIHBvcnRzYyk7CisJaWYgKCEodmFsMzIgJiBQT1JUX0RFVl9BRERSKSkgeworCQllaGNpX2RiZyhlaGNpLCAiTFBNOiBubyBkZXZpY2UgYXR0YWNoZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJdmFsMzIgfD0gUE9SVF9MUE07CisJZWhjaV93cml0ZWwoZWhjaSwgdmFsMzIsIHBvcnRzYyk7CisJbXNsZWVwKDUpOworCXZhbDMyIHw9IFBPUlRfU1VTUEVORDsKKwllaGNpX2RiZyhlaGNpLCAiU2VuZGluZyBMUE0gMHglMDh4IHRvIHBvcnQgJWRcbiIsIHZhbDMyLCBwb3J0KTsKKwllaGNpX3dyaXRlbChlaGNpLCB2YWwzMiwgcG9ydHNjKTsKKwkvKiB3YWl0IGZvciBBQ0sgKi8KKwltc2xlZXAoMTApOworCXJldHZhbCA9IGhhbmRzaGFrZShlaGNpLCAmZWhjaS0+cmVncy0+cG9ydF9zdGF0dXNbcG9ydC0xXSwgUE9SVF9TU1RTLAorCQkJUE9SVFNDX1NVU1BFTkRfU1RTX0FDSywgMTI1KTsKKwlkYmdfcG9ydChlaGNpLCAiTFBNIiwgcG9ydCwgdmFsMzIpOworCWlmIChyZXR2YWwgIT0gLUVUSU1FRE9VVCkgeworCQllaGNpX2RiZyhlaGNpLCAiTFBNOiBkZXZpY2UgQUNLIGZvciBMUE1cbiIpOworCQl2YWwzMiB8PSBQT1JUX0xQTTsKKwkJLyoKKwkJICogbm93IGRldmljZSBzaG91bGQgYmUgaW4gTDEgc2xlZXAsIGxldCdzIHdha2UgdXAgdGhlIGRldmljZQorCQkgKiBzbyB0aGF0IHdlIGNhbiBjb21wbGV0ZSBlbnVtZXJhdGlvbi4KKwkJICovCisJCWVoY2lfd3JpdGVsKGVoY2ksIHZhbDMyLCBwb3J0c2MpOworCQltc2xlZXAoMTApOworCQl2YWwzMiB8PSBQT1JUX1JFU1VNRTsKKwkJZWhjaV93cml0ZWwoZWhjaSwgdmFsMzIsIHBvcnRzYyk7CisJfSBlbHNlIHsKKwkJZWhjaV9kYmcoZWhjaSwgIkxQTTogZGV2aWNlIGRvZXMgbm90IEFDSywgZGlzYWJsZSBMUE0gJWRcbiIsCisJCQlyZXR2YWwpOworCQl2YWwzMiAmPSB+UE9SVF9MUE07CisJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCWVoY2lfd3JpdGVsKGVoY2ksIHZhbDMyLCBwb3J0c2MpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCA1NDUwZTYyLi4xMTZhZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogLyoKQEAgLTIzNiw2ICsyMzcsMzUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQgb21hcF9laGNpX3NvZnRfcGh5X3Jlc2V0KHN0cnVjdCBlaGNpX2hjZF9vbWFwICpvbWFwLCB1OCBwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOworCXVuc2lnbmVkIHJlZyA9IDA7CisKKwlyZWcgPSBVTFBJX0ZVTkNfQ1RSTF9SRVNFVAorCQkvKiBGVU5DVElPTl9DVFJMX1NFVCByZWdpc3RlciAqLworCQl8IChVTFBJX1NFVChVTFBJX0ZVTkNfQ1RSTCkgPDwgRUhDSV9JTlNOUkVHMDVfVUxQSV9SRUdBRERfU0hJRlQpCisJCS8qIFdyaXRlICovCisJCXwgKDIgPDwgRUhDSV9JTlNOUkVHMDVfVUxQSV9PUFNFTF9TSElGVCkKKwkJLyogUE9SVG4gKi8KKwkJfCAoKHBvcnQgKyAxKSA8PCBFSENJX0lOU05SRUcwNV9VTFBJX1BPUlRTRUxfU0hJRlQpCisJCS8qIHN0YXJ0IFVMUEkgYWNjZXNzKi8KKwkJfCAoMSA8PCBFSENJX0lOU05SRUcwNV9VTFBJX0NPTlRST0xfU0hJRlQpOworCisJZWhjaV9vbWFwX3dyaXRlbChvbWFwLT5laGNpX2Jhc2UsIEVIQ0lfSU5TTlJFRzA1X1VMUEksIHJlZyk7CisKKwkvKiBXYWl0IGZvciBVTFBJIGFjY2VzcyBjb21wbGV0aW9uICovCisJd2hpbGUgKChlaGNpX29tYXBfcmVhZGwob21hcC0+ZWhjaV9iYXNlLCBFSENJX0lOU05SRUcwNV9VTFBJKQorCQkJJiAoMSA8PCBFSENJX0lOU05SRUcwNV9VTFBJX0NPTlRST0xfU0hJRlQpKSkgeworCQljcHVfcmVsYXgoKTsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJZGV2X2RiZyhvbWFwLT5kZXYsICJwaHkgcmVzZXQgb3BlcmF0aW9uIHRpbWVkIG91dFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwogLyogb21hcF9zdGFydF9laGMKICAqCS0gU3RhcnQgdGhlIFRJIFVTQkhPU1QgY29udHJvbGxlcgogICovCkBAIC00MjUsNiArNDU1LDEyIEBACiAJCQlncGlvX3NldF92YWx1ZShvbWFwLT5yZXNldF9ncGlvX3BvcnRbMV0sIDEpOwogCX0KIAorCS8qIFNvZnQgcmVzZXQgdGhlIFBIWSB1c2luZyBQSFkgcmVzZXQgY29tbWFuZCBvdmVyIFVMUEkgKi8KKwlpZiAob21hcC0+cG9ydF9tb2RlWzBdID09IEVIQ0lfSENEX09NQVBfTU9ERV9QSFkpCisJCW9tYXBfZWhjaV9zb2Z0X3BoeV9yZXNldChvbWFwLCAwKTsKKwlpZiAob21hcC0+cG9ydF9tb2RlWzFdID09IEVIQ0lfSENEX09NQVBfTU9ERV9QSFkpCisJCW9tYXBfZWhjaV9zb2Z0X3BoeV9yZXNldChvbWFwLCAxKTsKKwogCXJldHVybiAwOwogCiBlcnJfc3lzX3N0YXR1czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCBkNDNkMTc2Li41OGI3MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfVkVORE9SX0lEX0lOVEVMOgogCQllaGNpLT5uZWVkX2lvX3dhdGNoZG9nID0gMDsKKwkJZWhjaS0+ZnNfaV90aHJlc2ggPSAxOwogCQlpZiAocGRldi0+ZGV2aWNlID09IDB4MjdjYykgewogCQkJZWhjaS0+YnJva2VuX3BlcmlvZGljID0gMTsKIAkJCWVoY2lfaW5mbyhlaGNpLCAidXNpbmcgYnJva2VuIHBlcmlvZGljIHdvcmthcm91bmRcbiIpOwpAQCAtMjc3LDcgKzI3OCw3IEBACiAgKiBBbHNvIHRoZXkgZGVwZW5kIG9uIHNlcGFyYXRlIHJvb3QgaHViIHN1c3BlbmQvcmVzdW1lLgogICovCiAKLXN0YXRpYyBpbnQgZWhjaV9wY2lfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQorc3RhdGljIGludCBlaGNpX3BjaV9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QsIGJvb2wgZG9fd2FrZXVwKQogewogCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwpAQCAtMjkxLDcgKzI5Miw3IEBACiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKLQllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpKTsKKwllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpLCBkb193YWtldXApOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCkBAIC0zNjEsNiArMzYyLDIyIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBlaGNpX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwlpbnQgcmMgPSAwOworCisJaWYgKCF1ZGV2LT5wYXJlbnQpIC8qIHVkZXYgaXMgcm9vdCBodWIgaXRzZWxmLCBpbXBvc3NpYmxlICovCisJCXJjID0gLTE7CisJLyogd2Ugb25seSBzdXBwb3J0IGxwbSBkZXZpY2UgY29ubmVjdGVkIHRvIHJvb3QgaHViIHlldCAqLworCWlmIChlaGNpLT5oYXNfbHBtICYmICF1ZGV2LT5wYXJlbnQtPnBhcmVudCkgeworCQlyYyA9IGVoY2lfbHBtX3NldF9kYShlaGNpLCB1ZGV2LT5kZXZudW0sIHVkZXYtPnBvcnRudW0pOworCQlpZiAoIXJjKQorCQkJcmMgPSBlaGNpX2xwbV9jaGVjayhlaGNpLCB1ZGV2LT5wb3J0bnVtKTsKKwl9CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX3BjaV9oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAogCS5wcm9kdWN0X2Rlc2MgPQkJIkVIQ0kgSG9zdCBDb250cm9sbGVyIiwKQEAgLTQwNyw2ICs0MjQsMTEgQEAKIAkucmVsaW5xdWlzaF9wb3J0ID0JZWhjaV9yZWxpbnF1aXNoX3BvcnQsCiAJLnBvcnRfaGFuZGVkX292ZXIgPQllaGNpX3BvcnRfaGFuZGVkX292ZXIsCiAKKwkvKgorCSAqIGNhbGwgYmFjayB3aGVuIGRldmljZSBjb25uZWN0ZWQgYW5kIGFkZHJlc3NlZAorCSAqLworCS51cGRhdGVfZGV2aWNlID0JZWhjaV91cGRhdGVfZGV2aWNlLAorCiAJLmNsZWFyX3R0X2J1ZmZlcl9jb21wbGV0ZQk9IGVoY2lfY2xlYXJfdHRfYnVmZmVyX2NvbXBsZXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggMTFhNzljNC4uMjMzYzI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0xMTI2LDggKzExMjYsNyBAQAogI2VuZGlmCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsCi0JCQkgICAgICAgJmVoY2lfdG9faGNkKGVoY2kpLT5mbGFncykpKSB7CisJaWYgKHVubGlrZWx5KCFIQ0RfSFdfQUNDRVNTSUJMRShlaGNpX3RvX2hjZChlaGNpKSkpKSB7CiAJCXJjID0gLUVTSFVURE9XTjsKIAkJZ290byBkb25lOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggODA1ZWM2My4uYTkyNTI2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTg4MCw4ICs4ODAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsCi0JCQkmZWhjaV90b19oY2QoZWhjaSktPmZsYWdzKSkpIHsKKwlpZiAodW5saWtlbHkoIUhDRF9IV19BQ0NFU1NJQkxFKGVoY2lfdG9faGNkKGVoY2kpKSkpIHsKIAkJc3RhdHVzID0gLUVTSFVURE9XTjsKIAkJZ290byBkb25lX25vdF9saW5rZWQ7CiAJfQpAQCAtMTA3NSwxNSArMTA3NCw2IEBACiAJCWlmIChzdHJlYW0tPmVwKQogCQkJc3RyZWFtLT5lcC0+aGNwcml2ID0gTlVMTDsKIAotCQlpZiAoc3RyZWFtLT5yZXNjaGVkdWxlZCkgewotCQkJZWhjaV9pbmZvIChlaGNpLCAiZXAlZCVzLWlzbyByZXNjaGVkdWxlZCAiCi0JCQkJIiVsdSB0aW1lcyBpbiAlbHUgc2Vjb25kc1xuIiwKLQkJCQlzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MsIGlzX2luID8gImluIiA6ICJvdXQiLAotCQkJCXN0cmVhbS0+cmVzY2hlZHVsZWQsCi0JCQkJKChqaWZmaWVzIC0gc3RyZWFtLT5zdGFydCkvSFopCi0JCQkJKTsKLQkJfQotCiAJCWtmcmVlKHN0cmVhbSk7CiAJfQogfQpAQCAtMTM5NiwzMCArMTM4NiwyNSBAQAogCXN0cnVjdCBlaGNpX2lzb19zdHJlYW0JKnN0cmVhbQogKQogewotCXUzMgkJCW5vdywgbmV4dCwgc3RhcnQsIHBlcmlvZDsKKwl1MzIJCQlub3csIG5leHQsIHN0YXJ0LCBwZXJpb2QsIHNwYW47CiAJaW50CQkJc3RhdHVzOwogCXVuc2lnbmVkCQltb2QgPSBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDM7CiAJc3RydWN0IGVoY2lfaXNvX3NjaGVkCSpzY2hlZCA9IHVyYi0+aGNwcml2OwotCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKIAotCWlmIChzY2hlZC0+c3BhbiA+IChtb2QgLSBTQ0hFRFVMRV9TTE9QKSkgeworCXBlcmlvZCA9IHVyYi0+aW50ZXJ2YWw7CisJc3BhbiA9IHNjaGVkLT5zcGFuOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpIHsKKwkJcGVyaW9kIDw8PSAzOworCQlzcGFuIDw8PSAzOworCX0KKworCWlmIChzcGFuID4gbW9kIC0gU0NIRURVTEVfU0xPUCkgewogCQllaGNpX2RiZyAoZWhjaSwgImlzbyByZXF1ZXN0ICVwIHRvbyBsb25nXG4iLCB1cmIpOwogCQlzdGF0dXMgPSAtRUZCSUc7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlpZiAoKHN0cmVhbS0+ZGVwdGggKyBzY2hlZC0+c3BhbikgPiBtb2QpIHsKLQkJZWhjaV9kYmcgKGVoY2ksICJyZXF1ZXN0ICVwIHdvdWxkIG92ZXJmbG93ICglZCslZD4lZClcbiIsCi0JCQl1cmIsIHN0cmVhbS0+ZGVwdGgsIHNjaGVkLT5zcGFuLCBtb2QpOwotCQlzdGF0dXMgPSAtRUZCSUc7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQlwZXJpb2QgPSB1cmItPmludGVydmFsOwotCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCi0JCXBlcmlvZCA8PD0gMzsKLQotCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKKwlub3cgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCkgJiAobW9kIC0gMSk7CiAKIAkvKiBUeXBpY2FsIGNhc2U6IHJldXNlIGN1cnJlbnQgc2NoZWR1bGUsIHN0cmVhbSBpcyBzdGlsbCBhY3RpdmUuCiAJICogSG9wZWZ1bGx5IHRoZXJlIGFyZSBubyBnYXBzIGZyb20gdGhlIGhvc3QgZmFsbGluZyBiZWhpbmQKQEAgLTE0MjcsMzQgKzE0MTIsMzUgQEAKIAkgKiBzbG90IGluIHRoZSBzY2hlZHVsZSwgaW1wbGljaXRseSBhc3N1bWluZyBVUkJfSVNPX0FTQVAuCiAJICovCiAJaWYgKGxpa2VseSAoIWxpc3RfZW1wdHkgKCZzdHJlYW0tPnRkX2xpc3QpKSkgewotCQlwZGV2ID0gdG9fcGNpX2RldihlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyKTsKLQkJc3RhcnQgPSBzdHJlYW0tPm5leHRfdWZyYW1lOworCQl1MzIJZXhjZXNzOwogCiAJCS8qIEZvciBoaWdoIHNwZWVkIGRldmljZXMsIGFsbG93IHNjaGVkdWxpbmcgd2l0aGluIHRoZQotCQkgKiBpc29jaHJvbm91cyBzY2hlZHVsaW5nIHRocmVzaG9sZC4gIEZvciBmdWxsIHNwZWVkIGRldmljZXMsCi0JCSAqIGRvbid0LiAoV29yayBhcm91bmQgZm9yIEludGVsIElDSDkgYnVnLikKKwkJICogaXNvY2hyb25vdXMgc2NoZWR1bGluZyB0aHJlc2hvbGQuICBGb3IgZnVsbCBzcGVlZCBkZXZpY2VzCisJCSAqIGFuZCBJbnRlbCBQQ0ktYmFzZWQgY29udHJvbGxlcnMsIGRvbid0ICh3b3JrIGFyb3VuZCBmb3IKKwkJICogSW50ZWwgSUNIOSBidWcpLgogCQkgKi8KLQkJaWYgKCFzdHJlYW0tPmhpZ2hzcGVlZCAmJgotCQkJCXBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKQorCQlpZiAoIXN0cmVhbS0+aGlnaHNwZWVkICYmIGVoY2ktPmZzX2lfdGhyZXNoKQogCQkJbmV4dCA9IG5vdyArIGVoY2ktPmlfdGhyZXNoOwogCQllbHNlCiAJCQluZXh0ID0gbm93OwogCi0JCS8qIEZlbGwgYmVoaW5kIChieSB1cCB0byB0d2ljZSB0aGUgc2xvcCBhbW91bnQpPyAqLwotCQlpZiAoKChzdGFydCAtIG5leHQpICYgKG1vZCAtIDEpKSA+PQotCQkJCW1vZCAtIDIgKiBTQ0hFRFVMRV9TTE9QKQotCQkJc3RhcnQgKz0gcGVyaW9kICogRElWX1JPVU5EX1VQKAotCQkJCQkobmV4dCAtIHN0YXJ0KSAmIChtb2QgLSAxKSwKLQkJCQkJcGVyaW9kKTsKLQotCQkvKiBUcmllZCB0byBzY2hlZHVsZSB0b28gZmFyIGludG8gdGhlIGZ1dHVyZT8gKi8KLQkJaWYgKHVubGlrZWx5KCgoc3RhcnQgLSBub3cpICYgKG1vZCAtIDEpKSArIHNjaGVkLT5zcGFuCi0JCQkJCT49IG1vZCAtIDIgKiBTQ0hFRFVMRV9TTE9QKSkgeworCQkvKiBGZWxsIGJlaGluZCAoYnkgdXAgdG8gdHdpY2UgdGhlIHNsb3AgYW1vdW50KT8KKwkJICogV2UgZGVjaWRlIGJhc2VkIG9uIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGN1cnJlbnRseS1zY2hlZHVsZWQKKwkJICogc2xvdCwgbm90IHRoZSB0aW1lIG9mIHRoZSBuZXh0IGF2YWlsYWJsZSBzbG90LgorCQkgKi8KKwkJZXhjZXNzID0gKHN0cmVhbS0+bmV4dF91ZnJhbWUgLSBwZXJpb2QgLSBuZXh0KSAmIChtb2QgLSAxKTsKKwkJaWYgKGV4Y2VzcyA+PSBtb2QgLSAyICogU0NIRURVTEVfU0xPUCkKKwkJCXN0YXJ0ID0gbmV4dCArIGV4Y2VzcyAtIG1vZCArIHBlcmlvZCAqCisJCQkJCURJVl9ST1VORF9VUChtb2QgLSBleGNlc3MsIHBlcmlvZCk7CisJCWVsc2UKKwkJCXN0YXJ0ID0gbmV4dCArIGV4Y2VzcyArIHBlcmlvZDsKKwkJaWYgKHN0YXJ0IC0gbm93ID49IG1vZCkgeworCQkJZWhjaV9kYmcoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCVkKyVkID49ICVkKVxuIiwKKwkJCQkJdXJiLCBzdGFydCAtIG5vdyAtIHBlcmlvZCwgcGVyaW9kLAorCQkJCQltb2QpOwogCQkJc3RhdHVzID0gLUVGQklHOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCXN0cmVhbS0+bmV4dF91ZnJhbWUgPSBzdGFydDsKLQkJZ290byByZWFkeTsKIAl9CiAKIAkvKiBuZWVkIHRvIHNjaGVkdWxlOyB3aGVuJ3MgdGhlIG5leHQgKHUpZnJhbWUgd2UgY291bGQgc3RhcnQ/CkBAIC0xNDYzLDUxICsxNDQ5LDYwIEBACiAJICogY2FuIGFsc28gaGVscCBoaWdoIGJhbmR3aWR0aCBpZiB0aGUgZG1hIGFuZCBpcnEgbG9hZHMgZG9uJ3QKIAkgKiBqdW1wIHVudGlsIGFmdGVyIHRoZSBxdWV1ZSBpcyBwcmltZWQuCiAJICovCi0Jc3RhcnQgPSBTQ0hFRFVMRV9TTE9QICsgKG5vdyAmIH4weDA3KTsKLQlzdGFydCAlPSBtb2Q7Ci0Jc3RyZWFtLT5uZXh0X3VmcmFtZSA9IHN0YXJ0OworCWVsc2UgeworCQlzdGFydCA9IFNDSEVEVUxFX1NMT1AgKyAobm93ICYgfjB4MDcpOwogCi0JLyogTk9URTogIGFzc3VtZXMgVVJCX0lTT19BU0FQLCB0byBsaW1pdCBjb21wbGV4aXR5L2J1Z3MgKi8KKwkJLyogTk9URTogIGFzc3VtZXMgVVJCX0lTT19BU0FQLCB0byBsaW1pdCBjb21wbGV4aXR5L2J1Z3MgKi8KIAotCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KLQlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKLQkJaW50CQllbm91Z2hfc3BhY2U7CisJCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KKwkJbmV4dCA9IHN0YXJ0ICsgcGVyaW9kOworCQlmb3IgKDsgc3RhcnQgPCBuZXh0OyBzdGFydCsrKSB7CiAKLQkJLyogY2hlY2sgc2NoZWR1bGU6IGVub3VnaCBzcGFjZT8gKi8KLQkJaWYgKHN0cmVhbS0+aGlnaHNwZWVkKQotCQkJZW5vdWdoX3NwYWNlID0gaXRkX3Nsb3Rfb2sgKGVoY2ksIG1vZCwgc3RhcnQsCi0JCQkJCXN0cmVhbS0+dXNlY3MsIHBlcmlvZCk7Ci0JCWVsc2UgewotCQkJaWYgKChzdGFydCAlIDgpID49IDYpCi0JCQkJY29udGludWU7Ci0JCQllbm91Z2hfc3BhY2UgPSBzaXRkX3Nsb3Rfb2sgKGVoY2ksIG1vZCwgc3RyZWFtLAotCQkJCQlzdGFydCwgc2NoZWQsIHBlcmlvZCk7CisJCQkvKiBjaGVjayBzY2hlZHVsZTogZW5vdWdoIHNwYWNlPyAqLworCQkJaWYgKHN0cmVhbS0+aGlnaHNwZWVkKSB7CisJCQkJaWYgKGl0ZF9zbG90X29rKGVoY2ksIG1vZCwgc3RhcnQsCisJCQkJCQlzdHJlYW0tPnVzZWNzLCBwZXJpb2QpKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKChzdGFydCAlIDgpID49IDYpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChzaXRkX3Nsb3Rfb2soZWhjaSwgbW9kLCBzdHJlYW0sCisJCQkJCQlzdGFydCwgc2NoZWQsIHBlcmlvZCkpCisJCQkJCWJyZWFrOworCQkJfQogCQl9CiAKLQkJLyogc2NoZWR1bGUgaXQgaGVyZSBpZiB0aGVyZSdzIGVub3VnaCBiYW5kd2lkdGggKi8KLQkJaWYgKGVub3VnaF9zcGFjZSkgewotCQkJc3RyZWFtLT5uZXh0X3VmcmFtZSA9IHN0YXJ0ICUgbW9kOwotCQkJZ290byByZWFkeTsKKwkJLyogbm8gcm9vbSBpbiB0aGUgc2NoZWR1bGUgKi8KKwkJaWYgKHN0YXJ0ID09IG5leHQpIHsKKwkJCWVoY2lfZGJnKGVoY2ksICJpc28gcmVzY2hlZCBmdWxsICVwIChub3cgJWQgbWF4ICVkKVxuIiwKKwkJCQl1cmIsIG5vdywgbm93ICsgbW9kKTsKKwkJCXN0YXR1cyA9IC1FTk9TUEM7CisJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAKLQkvKiBubyByb29tIGluIHRoZSBzY2hlZHVsZSAqLwotCWVoY2lfZGJnIChlaGNpLCAiaXNvICVzc2NoZWQgZnVsbCAlcCAobm93ICVkIG1heCAlZClcbiIsCi0JCWxpc3RfZW1wdHkgKCZzdHJlYW0tPnRkX2xpc3QpID8gIiIgOiAicmUiLAotCQl1cmIsIG5vdywgbm93ICsgbW9kKTsKLQlzdGF0dXMgPSAtRU5PU1BDOworCS8qIFRyaWVkIHRvIHNjaGVkdWxlIHRvbyBmYXIgaW50byB0aGUgZnV0dXJlPyAqLworCWlmICh1bmxpa2VseShzdGFydCAtIG5vdyArIHNwYW4gLSBwZXJpb2QKKwkJCQk+PSBtb2QgLSAyICogU0NIRURVTEVfU0xPUCkpIHsKKwkJZWhjaV9kYmcoZWhjaSwgInJlcXVlc3QgJXAgd291bGQgb3ZlcmZsb3cgKCVkKyVkID49ICVkKVxuIiwKKwkJCQl1cmIsIHN0YXJ0IC0gbm93LCBzcGFuIC0gcGVyaW9kLAorCQkJCW1vZCAtIDIgKiBTQ0hFRFVMRV9TTE9QKTsKKwkJc3RhdHVzID0gLUVGQklHOworCQlnb3RvIGZhaWw7CisJfQogCi1mYWlsOgotCWlzb19zY2hlZF9mcmVlIChzdHJlYW0sIHNjaGVkKTsKLQl1cmItPmhjcHJpdiA9IE5VTEw7Ci0JcmV0dXJuIHN0YXR1czsKKwlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQgJiAobW9kIC0gMSk7CiAKLXJlYWR5OgogCS8qIHJlcG9ydCBoaWdoIHNwZWVkIHN0YXJ0IGluIHVmcmFtZXM7IGZ1bGwgc3BlZWQsIGluIGZyYW1lcyAqLwogCXVyYi0+c3RhcnRfZnJhbWUgPSBzdHJlYW0tPm5leHRfdWZyYW1lOwogCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCiAJCXVyYi0+c3RhcnRfZnJhbWUgPj49IDM7CiAJcmV0dXJuIDA7CisKKyBmYWlsOgorCWlzb19zY2hlZF9mcmVlKHN0cmVhbSwgc2NoZWQpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTYwMiw3ICsxNTk3LDcgQEAKIAlzdHJ1Y3QgZWhjaV9pc29fc2NoZWQJKmlzb19zY2hlZCA9IHVyYi0+aGNwcml2OwogCXN0cnVjdCBlaGNpX2l0ZAkJKml0ZDsKIAotCW5leHRfdWZyYW1lID0gc3RyZWFtLT5uZXh0X3VmcmFtZSAlIG1vZDsKKwluZXh0X3VmcmFtZSA9IHN0cmVhbS0+bmV4dF91ZnJhbWUgJiAobW9kIC0gMSk7CiAKIAlpZiAodW5saWtlbHkgKGxpc3RfZW1wdHkoJnN0cmVhbS0+dGRfbGlzdCkpKSB7CiAJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmJhbmR3aWR0aF9hbGxvY2F0ZWQKQEAgLTE2MTMsNyArMTYwOCw2IEBACiAJCQkoc3RyZWFtLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikgPyAiaW4iIDogIm91dCIsCiAJCQl1cmItPmludGVydmFsLAogCQkJbmV4dF91ZnJhbWUgPj4gMywgbmV4dF91ZnJhbWUgJiAweDcpOwotCQlzdHJlYW0tPnN0YXJ0ID0gamlmZmllczsKIAl9CiAJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOwogCkBAIC0xNjM5LDE0ICsxNjMzLDEzIEBACiAJCWl0ZF9wYXRjaChlaGNpLCBpdGQsIGlzb19zY2hlZCwgcGFja2V0LCB1ZnJhbWUpOwogCiAJCW5leHRfdWZyYW1lICs9IHN0cmVhbS0+aW50ZXJ2YWw7Ci0JCXN0cmVhbS0+ZGVwdGggKz0gc3RyZWFtLT5pbnRlcnZhbDsKLQkJbmV4dF91ZnJhbWUgJT0gbW9kOworCQluZXh0X3VmcmFtZSAmPSBtb2QgLSAxOwogCQlwYWNrZXQrKzsKIAogCQkvKiBsaW5rIGNvbXBsZXRlZCBpdGRzIGludG8gdGhlIHNjaGVkdWxlICovCiAJCWlmICgoKG5leHRfdWZyYW1lID4+IDMpICE9IGZyYW1lKQogCQkJCXx8IHBhY2tldCA9PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7Ci0JCQlpdGRfbGluayAoZWhjaSwgZnJhbWUgJSBlaGNpLT5wZXJpb2RpY19zaXplLCBpdGQpOworCQkJaXRkX2xpbmsoZWhjaSwgZnJhbWUgJiAoZWhjaS0+cGVyaW9kaWNfc2l6ZSAtIDEpLCBpdGQpOwogCQkJaXRkID0gTlVMTDsKIAkJfQogCX0KQEAgLTE2OTUsNyArMTY4OCw2IEBACiAKIAkJdCA9IGhjMzJfdG9fY3B1cChlaGNpLCAmaXRkLT5od190cmFuc2FjdGlvbiBbdWZyYW1lXSk7CiAJCWl0ZC0+aHdfdHJhbnNhY3Rpb24gW3VmcmFtZV0gPSAwOwotCQlzdHJlYW0tPmRlcHRoIC09IHN0cmVhbS0+aW50ZXJ2YWw7CiAKIAkJLyogcmVwb3J0IHRyYW5zZmVyIHN0YXR1cyAqLwogCQlpZiAodW5saWtlbHkgKHQgJiBJU09fRVJSUykpIHsKQEAgLTE4MTUsOCArMTgwNyw3IEBACiAKIAkvKiBzY2hlZHVsZSAuLi4gbmVlZCB0byBsb2NrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZlaGNpLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLAotCQkJICAgICAgICZlaGNpX3RvX2hjZChlaGNpKS0+ZmxhZ3MpKSkgeworCWlmICh1bmxpa2VseSghSENEX0hXX0FDQ0VTU0lCTEUoZWhjaV90b19oY2QoZWhjaSkpKSkgewogCQlzdGF0dXMgPSAtRVNIVVRET1dOOwogCQlnb3RvIGRvbmVfbm90X2xpbmtlZDsKIAl9CkBAIC0yMDI0LDkgKzIwMTUsOCBAQAogCQkJInNjaGVkIGRldnAgJXMgZXAlZCVzLWlzbyBbJWRdICVkbXMvJTA0eFxuIiwKIAkJCXVyYi0+ZGV2LT5kZXZwYXRoLCBzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiAweDBmLAogCQkJKHN0cmVhbS0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pID8gImluIiA6ICJvdXQiLAotCQkJKG5leHRfdWZyYW1lID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSwKKwkJCShuZXh0X3VmcmFtZSA+PiAzKSAmIChlaGNpLT5wZXJpb2RpY19zaXplIC0gMSksCiAJCQlzdHJlYW0tPmludGVydmFsLCBoYzMyX3RvX2NwdShlaGNpLCBzdHJlYW0tPnNwbGl0cykpOwotCQlzdHJlYW0tPnN0YXJ0ID0gamlmZmllczsKIAl9CiAJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcysrOwogCkBAIC0yMDQ3LDEzICsyMDM3LDEyIEBACiAJCXNpdGQtPnVyYiA9IHVyYjsKIAogCQlzaXRkX3BhdGNoKGVoY2ksIHN0cmVhbSwgc2l0ZCwgc2NoZWQsIHBhY2tldCk7Ci0JCXNpdGRfbGluayAoZWhjaSwgKG5leHRfdWZyYW1lID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZSwKKwkJc2l0ZF9saW5rKGVoY2ksIChuZXh0X3VmcmFtZSA+PiAzKSAmIChlaGNpLT5wZXJpb2RpY19zaXplIC0gMSksCiAJCQkJc2l0ZCk7CiAKIAkJbmV4dF91ZnJhbWUgKz0gc3RyZWFtLT5pbnRlcnZhbCA8PCAzOwotCQlzdHJlYW0tPmRlcHRoICs9IHN0cmVhbS0+aW50ZXJ2YWwgPDwgMzsKIAl9Ci0Jc3RyZWFtLT5uZXh0X3VmcmFtZSA9IG5leHRfdWZyYW1lICUgbW9kOworCXN0cmVhbS0+bmV4dF91ZnJhbWUgPSBuZXh0X3VmcmFtZSAmIChtb2QgLSAxKTsKIAogCS8qIGRvbid0IG5lZWQgdGhhdCBzY2hlZHVsZSBkYXRhIGFueSBtb3JlICovCiAJaXNvX3NjaGVkX2ZyZWUgKHN0cmVhbSwgc2NoZWQpOwpAQCAtMjExMSw3ICsyMTAwLDYgQEAKIAkJZGVzYy0+YWN0dWFsX2xlbmd0aCA9IGRlc2MtPmxlbmd0aCAtIFNJVERfTEVOR1RIKHQpOwogCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gZGVzYy0+YWN0dWFsX2xlbmd0aDsKIAl9Ci0Jc3RyZWFtLT5kZXB0aCAtPSBzdHJlYW0tPmludGVydmFsIDw8IDM7CiAKIAkvKiBoYW5kbGUgY29tcGxldGlvbiBub3c/ICovCiAJaWYgKCh1cmJfaW5kZXggKyAxKSAhPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKQpAQCAtMjIwMSw4ICsyMTg5LDcgQEAKIAogCS8qIHNjaGVkdWxlIC4uLiBuZWVkIHRvIGxvY2sgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsCi0JCQkgICAgICAgJmVoY2lfdG9faGNkKGVoY2kpLT5mbGFncykpKSB7CisJaWYgKHVubGlrZWx5KCFIQ0RfSFdfQUNDRVNTSUJMRShlaGNpX3RvX2hjZChlaGNpKSkpKSB7CiAJCXN0YXR1cyA9IC1FU0hVVERPV047CiAJCWdvdG8gZG9uZV9ub3RfbGlua2VkOwogCX0KQEAgLTIyNjMsNyArMjI1MCw3IEBACiAJbm93X3VmcmFtZSA9IGVoY2ktPm5leHRfdWZyYW1lOwogCWlmIChIQ19JU19SVU5OSU5HKGVoY2lfdG9faGNkKGVoY2kpLT5zdGF0ZSkpIHsKIAkJY2xvY2sgPSBlaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5mcmFtZV9pbmRleCk7Ci0JCWNsb2NrX2ZyYW1lID0gKGNsb2NrID4+IDMpICUgZWhjaS0+cGVyaW9kaWNfc2l6ZTsKKwkJY2xvY2tfZnJhbWUgPSAoY2xvY2sgPj4gMykgJiAoZWhjaS0+cGVyaW9kaWNfc2l6ZSAtIDEpOwogCX0gZWxzZSAgewogCQljbG9jayA9IG5vd191ZnJhbWUgKyBtb2QgLSAxOwogCQljbG9ja19mcmFtZSA9IC0xOwpAQCAtMjI3Miw3ICsyMjU5LDcgQEAKIAkJZnJlZV9jYWNoZWRfbGlzdHMoZWhjaSk7CiAJCWVoY2ktPmNsb2NrX2ZyYW1lID0gY2xvY2tfZnJhbWU7CiAJfQotCWNsb2NrICU9IG1vZDsKKwljbG9jayAmPSBtb2QgLSAxOwogCWNsb2NrX2ZyYW1lID0gY2xvY2sgPj4gMzsKIAogCWZvciAoOzspIHsKQEAgLTIzNjEsNyArMjM0OCw3IEBACiAJCQkJICogZnJhbWUgaXMgY3VycmVudC4KIAkJCQkgKi8KIAkJCQlpZiAoKChmcmFtZSA9PSBjbG9ja19mcmFtZSkgfHwKLQkJCQkgICAgICgoKGZyYW1lICsgMSkgJSBlaGNpLT5wZXJpb2RpY19zaXplKQorCQkJCSAgICAgKCgoZnJhbWUgKyAxKSAmIChlaGNpLT5wZXJpb2RpY19zaXplIC0gMSkpCiAJCQkJICAgICAgPT0gY2xvY2tfZnJhbWUpKQogCQkJCSAgICAmJiBsaXZlCiAJCQkJICAgICYmIChxLnNpdGQtPmh3X3Jlc3VsdHMgJgpAQCAtMjQyOCw3ICsyNDE1LDggQEAKIAkJCQkJfHwgZWhjaS0+cGVyaW9kaWNfc2NoZWQgPT0gMCkKIAkJCQlicmVhazsKIAkJCWVoY2ktPm5leHRfdWZyYW1lID0gbm93X3VmcmFtZTsKLQkJCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKKwkJCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAmCisJCQkJCShtb2QgLSAxKTsKIAkJCWlmIChub3dfdWZyYW1lID09IG5vdykKIAkJCQlicmVhazsKIApAQCAtMjQ0MSw3ICsyNDI5LDcgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCW5vd191ZnJhbWUrKzsKLQkJCW5vd191ZnJhbWUgJT0gbW9kOworCQkJbm93X3VmcmFtZSAmPSBtb2QgLSAxOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAppbmRleCA2NTBhNjg3Li5iZGU4MjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaApAQCAtMTMwLDYgKzEzMCw3IEBACiAJdW5zaWduZWQJCWhhc19hbWNjX3VzYjIzOjE7CiAJdW5zaWduZWQJCW5lZWRfaW9fd2F0Y2hkb2c6MTsKIAl1bnNpZ25lZAkJYnJva2VuX3BlcmlvZGljOjE7CisJdW5zaWduZWQJCWZzX2lfdGhyZXNoOjE7CS8qIEludGVsIGlzbyBzY2hlZHVsaW5nICovCiAKIAkvKiByZXF1aXJlZCBmb3IgdXNiMzIgcXVpcmsgKi8KIAkjZGVmaW5lIE9IQ0lfQ1RSTF9IQ0ZTICAgICAgICAgICgzIDw8IDYpCkBAIC0xNDAsNyArMTQxLDggQEAKIAkjZGVmaW5lIE9IQ0lfSENDVFJMX0xFTiAgICAgICAgIDB4NAogCV9faGMzMgkJCSpvaGNpX2hjY3RybF9yZWc7CiAJdW5zaWduZWQJCWhhc19ob3N0cGM6MTsKLQorCXVuc2lnbmVkCQloYXNfbHBtOjE7ICAvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCAqLworCXVuc2lnbmVkCQloYXNfcHBjZDoxOyAvKiBzdXBwb3J0IHBlci1wb3J0IGNoYW5nZSBiaXRzICovCiAJdTgJCQlzYnJuOwkJLyogcGFja2VkIHJlbGVhc2UgbnVtYmVyICovCiAKIAkvKiBpcnEgc3RhdGlzdGljcyAqLwpAQCAtMTU0LDkgKzE1Niw2IEBACiAJLyogZGVidWcgZmlsZXMgKi8KICNpZmRlZiBERUJVRwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19kaXI7Ci0Jc3RydWN0IGRlbnRyeQkJKmRlYnVnX2FzeW5jOwotCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19wZXJpb2RpYzsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdfcmVnaXN0ZXJzOwogI2VuZGlmCiB9OwogCkBAIC00MDEsMTUgKzQwMCwxMiBAQAogCXUzMgkJCXJlZmNvdW50OwogCXU4CQkJYkVuZHBvaW50QWRkcmVzczsKIAl1OAkJCWhpZ2hzcGVlZDsKLQl1MTYJCQlkZXB0aDsJCS8qIGRlcHRoIGluIHVmcmFtZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXRkX2xpc3Q7CS8qIHF1ZXVlZCBpdGRzL3NpdGRzICovCiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CS8qIGxpc3Qgb2YgdW51c2VkIGl0ZHMvc2l0ZHMgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwogCiAJLyogb3V0cHV0IG9mIChyZSlzY2hlZHVsaW5nICovCi0JdW5zaWduZWQgbG9uZwkJc3RhcnQ7CQkvKiBqaWZmaWVzICovCi0JdW5zaWduZWQgbG9uZwkJcmVzY2hlZHVsZWQ7CiAJaW50CQkJbmV4dF91ZnJhbWU7CiAJX19oYzMyCQkJc3BsaXRzOwogCkBAIC01MzgsMTEgKzUzNCwxMSBAQAogCiAvKiBQcmVwYXJlIHRoZSBQT1JUU0Mgd2FrZXVwIGZsYWdzIGR1cmluZyBjb250cm9sbGVyIHN1c3BlbmQvcmVzdW1lICovCiAKLSNkZWZpbmUgZWhjaV9wcmVwYXJlX3BvcnRzX2Zvcl9jb250cm9sbGVyX3N1c3BlbmQoZWhjaSkJCVwKLQkJZWhjaV9hZGp1c3RfcG9ydF93YWtldXBfZmxhZ3MoZWhjaSwgdHJ1ZSk7CisjZGVmaW5lIGVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRvX3dha2V1cCkJXAorCQllaGNpX2FkanVzdF9wb3J0X3dha2V1cF9mbGFncyhlaGNpLCB0cnVlLCBkb193YWtldXApOwogCi0jZGVmaW5lIGVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9yZXN1bWUoZWhjaSkJCVwKLQkJZWhjaV9hZGp1c3RfcG9ydF93YWtldXBfZmxhZ3MoZWhjaSwgZmFsc2UpOworI2RlZmluZSBlaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfcmVzdW1lKGVoY2kpCQkJXAorCQllaGNpX2FkanVzdF9wb3J0X3dha2V1cF9mbGFncyhlaGNpLCBmYWxzZSwgZmFsc2UpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jIGIvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYwppbmRleCAzNTc0MmY4Li45YmZhYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCQlnb3RvIGVycm9yX3NldF9jbHVzdGVyX2lkOwogCiAJdXNiX2hjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7Ci0JdXNiX2hjZC0+cG9sbF9yaCA9IDE7CisJc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JILCAmdXNiX2hjZC0+ZmxhZ3MpOwogCXVzYl9oY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAlyZXN1bHQgPSAwOwogb3V0OgpAQCAtNzc2LDcgKzc3Niw3IEBACiAJCWdvdG8gZXJyb3JfYWxsb2M7CiAJfQogCXVzYl9oY2QtPndpcmVsZXNzID0gMTsKLQl1c2JfaGNkLT5mbGFncyB8PSBIQ0RfRkxBR19TQVdfSVJROworCXNldF9iaXQoSENEX0ZMQUdfU0FXX0lSUSwgJnVzYl9oY2QtPmZsYWdzKTsKIAl3dXNiaGMgPSB1c2JfaGNkX3RvX3d1c2JoYyh1c2JfaGNkKTsKIAlod2FoYyA9IGNvbnRhaW5lcl9vZih3dXNiaGMsIHN0cnVjdCBod2FoYywgd3VzYmhjKTsKIAlod2FoY19pbml0KGh3YWhjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCmluZGV4IGNhMGU5OGQuLjNlNTYzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycSgmaW14MjEtPmxvY2spOwotCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAkJc3Bpbl9sb2NrX2lycSgmaW14MjEtPmxvY2spOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaAppbmRleCBkOTk1MzUxLi4wZjk3ODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaApAQCAtOCwyOSArOCw3IEBACiAvKgogICogUGxhdGZvcm0gc3BlY2lmaWMgY29tcGlsZSB0aW1lIG9wdGlvbnMKICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfS0FSTykKLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gva2Fyby5oPgotCi0jZGVmaW5lIFVTRV8zMkJJVAkJMQotCi0KLS8qIFRoZXNlIG9wdGlvbnMgYXJlIG11dHVhbGx5IGVjbHVzaXZlICovCi0jZGVmaW5lIFVTRV9QTEFURk9STV9ERUxBWQkxCi0jZGVmaW5lIFVTRV9OREVMQVkJCTAKLS8qCi0gKiBNQVhfUk9PVF9QT1JUUzogTnVtYmVyIG9mIGRvd25zdHJlYW0gcG9ydHMKLSAqCi0gKiBUaGUgY2hpcCBoYXMgdHdvIFVTQiBwb3J0cywgb25lIG9mIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkIGFzCi0gKiBhbiBVU0IgZGV2aWNlIHBvcnQsIHNvIHRoZSB2YWx1ZSBvZiB0aGlzIGNvbnN0YW50IGlzIGltcGxlbWVudGF0aW9uCi0gKiBzcGVjaWZpYy4KLSAqLwotI2RlZmluZSBNQVhfUk9PVF9QT1JUUwkJMgotI2RlZmluZSBEVU1NWV9ERUxBWV9BQ0NFU1MgZG8ge30gd2hpbGUgKDApCi0KLS8qIGluc2VydCBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3Igb3RoZXIgbWFjaGluZXMgaGVyZSAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pCisjaWYgZGVmaW5lZChDT05GSUdfQkxBQ0tGSU4pCiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2RlZmluZSBVU0VfMzJCSVQJCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCBkYmNhZmEyLi5kMWEzZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC00ODIsNyArNDgyLDYgQEAKIAl1MzIgY2hpcGlkOwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKLQloY2QtPnBvbGxfcmggPSAwOwogCiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CiAJaXNwMTc2MF9lbmFibGVfaW50ZXJydXB0cyhoY2QpOwpAQCAtMTQ1MCw3ICsxNDQ5LDcgQEAKIAllcG51bSA9IHVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmcHJpdl90b19oY2QocHJpdiktPmZsYWdzKSkgeworCWlmICghSENEX0hXX0FDQ0VTU0lCTEUocHJpdl90b19oY2QocHJpdikpKSB7CiAJCXJjID0gLUVTSFVURE9XTjsKIAkJZ290byBkb25lOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwppbmRleCA4YWQyNDQxLi4zNmFiZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC02NDUsNyArNjQ1LDcgQEAKIAkJaGNkLT5wcm9kdWN0X2Rlc2MsCiAJCWhjZF9uYW1lKTsKIAotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXNpemUgLT0gc2NucHJpbnRmIChuZXh0LCBzaXplLAogCQkJIlNVU1BFTkRFRCAobm8gcmVnaXN0ZXIgYWNjZXNzKVxuIik7CiAJCWdvdG8gZG9uZTsKQEAgLTY4Nyw3ICs2ODcsNyBAQAogCW5leHQgKz0gdGVtcDsKIAogCXRlbXAgPSBzY25wcmludGYgKG5leHQsIHNpemUsICJodWIgcG9sbCB0aW1lciAlc1xuIiwKLQkJCW9oY2lfdG9faGNkKG9oY2kpLT5wb2xsX3JoID8gIk9OIiA6ICJvZmYiKTsKKwkJCUhDRF9QT0xMX1JIKG9oY2lfdG9faGNkKG9oY2kpKSA/ICJPTiIgOiAib2ZmIik7CiAJc2l6ZSAtPSB0ZW1wOwogCW5leHQgKz0gdGVtcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDAyODY0YTIuLmMzYjRjY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCiAJLyogZG9uJ3Qgc3VibWl0IHRvIGEgZGVhZCBIQyAqLwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSB7CisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC02ODUsNyArNjg1LDcgQEAKIAl9CiAKIAkvKiB1c2UgcmhzYyBpcnFzIGFmdGVyIGtodWJkIGlzIGZ1bGx5IGluaXRpYWxpemVkICovCi0JaGNkLT5wb2xsX3JoID0gMTsKKwlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKIAloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOwogCiAJLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCkBAIC04MjIsNyArODIyLDcgQEAKIAllbHNlIGlmIChpbnRzICYgT0hDSV9JTlRSX1JEKSB7CiAJCW9oY2lfdmRiZyhvaGNpLCAicmVzdW1lIGRldGVjdFxuIik7CiAJCW9oY2lfd3JpdGVsKG9oY2ksIE9IQ0lfSU5UUl9SRCwgJnJlZ3MtPmludHJzdGF0dXMpOwotCQloY2QtPnBvbGxfcmggPSAxOworCQlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKIAkJaWYgKG9oY2ktPmF1dG9zdG9wKSB7CiAJCQlzcGluX2xvY2sgKCZvaGNpLT5sb2NrKTsKIAkJCW9oY2lfcmhfcmVzdW1lIChvaGNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA2NWNhYzhjLi5jZGRjZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAogCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKIAotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSkKKwlpZiAodW5saWtlbHkoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpKQogCQlyYyA9IC1FU0hVVERPV047CiAJZWxzZQogCQlyYyA9IG9oY2lfcmhfc3VzcGVuZCAob2hjaSwgMCk7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAogCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKIAotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpKSkKKwlpZiAodW5saWtlbHkoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpKQogCQlyYyA9IC1FU0hVVERPV047CiAJZWxzZQogCQlyYyA9IG9oY2lfcmhfcmVzdW1lIChvaGNpKTsKQEAgLTM1NSw2ICszNTUsMTEgQEAKIAkJb2hjaV9yZWFkbChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7CiAJCW1zbGVlcCgyMCk7CiAJfQorCisJLyogRG9lcyB0aGUgcm9vdCBodWIgaGF2ZSBhIHBvcnQgd2FrZXVwIHBlbmRpbmc/ICovCisJaWYgKG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpICYKKwkJCShPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfUkhTQykpCisJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGhjZCk7CiB9CiAKIC8qIENhcnJ5IG91dCBwb2xsaW5nLSwgYXV0b3N0b3AtLCBhbmQgYXV0b3Jlc3VtZS1yZWxhdGVkIHN0YXRlIGNoYW5nZXMgKi8KQEAgLTM2NCw3ICszNjksNyBAQAogCWludAlwb2xsX3JoID0gMTsKIAlpbnQJcmhzY19lbmFibGU7CiAKLQkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSENTIGluIHRoZSBpbnRlcnJ1cHQKKwkvKiBTb21lIGJyb2tlbiBjb250cm9sbGVycyBuZXZlciB0dXJuIG9mZiBSSFNDIGluIHRoZSBpbnRlcnJ1cHQKIAkgKiBzdGF0dXMgcmVnaXN0ZXIuICBGb3IgdGhlaXIgc2FrZSB3ZSB3b24ndCByZS1lbmFibGUgUkhTQwogCSAqIGludGVycnVwdHMgaWYgdGhlIGludGVycnVwdCBiaXQgaXMgYWxyZWFkeSBhY3RpdmUuCiAJICovCkBAIC00ODksNyArNDk0LDcgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKQogCQlnb3RvIGRvbmU7CiAKIAkvKiB1bmRvY3VtZW50ZWQgZXJyYXR1bSBzZWVuIG9uIGF0IGxlYXN0IHJldiBEICovCkBAIC01MzMsOCArNTM4LDEyIEBACiAJCX0KIAl9CiAKLQloY2QtPnBvbGxfcmggPSBvaGNpX3Jvb3RfaHViX3N0YXRlX2NoYW5nZXMob2hjaSwgY2hhbmdlZCwKLQkJCWFueV9jb25uZWN0ZWQsIHJoc2Nfc3RhdHVzKTsKKwlpZiAob2hjaV9yb290X2h1Yl9zdGF0ZV9jaGFuZ2VzKG9oY2ksIGNoYW5nZWQsCisJCQlhbnlfY29ubmVjdGVkLCByaHNjX3N0YXR1cykpCisJCXNldF9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOworCWVsc2UKKwkJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKKwogCiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC03MDEsNyArNzEwLDcgQEAKIAl1MzIJCXRlbXA7CiAJaW50CQlyZXR2YWwgPSAwOwogCi0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpKQorCWlmICh1bmxpa2VseSghSENEX0hXX0FDQ0VTU0lCTEUoaGNkKSkpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCiAJc3dpdGNoICh0eXBlUmVxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKaW5kZXggYjhhMTE0OC4uNmJkYzhiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKICNpZmRlZglDT05GSUdfUE0KIAotc3RhdGljIGludCBvaGNpX3BjaV9zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpCitzdGF0aWMgaW50IG9oY2lfcGNpX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBkb193YWtldXApCiB7CiAJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zc2IuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zc2IuYwppbmRleCAyM2ZkNmE4Li40OGVlNjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3NiLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNzYi5jCkBAIC05Myw4ICs5MywxMSBAQAogewogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBzc2JfZ2V0X2RydmRhdGEoZGV2KTsKIAorCWlmIChoY2QtPmRyaXZlci0+c2h1dGRvd24pCisJCWhjZC0+ZHJpdmVyLT5zaHV0ZG93bihoY2QpOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCXVzYl9wdXRfaGNkKGhjZCk7CiAJc3NiX2RldmljZV9kaXNhYmxlKGRldiwgMCk7CiB9CkBAIC0xMDYsMTAgKzEwOSw1MiBAQAogCWludCBlcnIgPSAtRU5PTUVNOwogCXUzMiB0bXAsIGZsYWdzID0gMDsKIAotCWlmIChkZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1VTQjExX0hPU1RERVYpCi0JCWZsYWdzIHw9IFNTQl9PSENJX1RNU0xPV19IT1NUTU9ERTsKKwlpZiAoZG1hX3NldF9tYXNrKGRldi0+ZG1hX2RldiwgRE1BX0JJVF9NQVNLKDMyKSkgfHwKKwkgICAgZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldi0+ZG1hX2RldiwgRE1BX0JJVF9NQVNLKDMyKSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXNzYl9kZXZpY2VfZW5hYmxlKGRldiwgZmxhZ3MpOworCWlmIChkZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1VTQjExX0hPU1RERVYpIHsKKwkJLyogUHV0IHRoZSBkZXZpY2UgaW50byBob3N0LW1vZGUuICovCisJCWZsYWdzIHw9IFNTQl9PSENJX1RNU0xPV19IT1NUTU9ERTsKKwkJc3NiX2RldmljZV9lbmFibGUoZGV2LCBmbGFncyk7CisJfSBlbHNlIGlmIChkZXYtPmlkLmNvcmVpZCA9PSBTU0JfREVWX1VTQjIwX0hPU1QpIHsKKwkJLyoKKwkJICogVVNCIDIuMCBzcGVjaWFsIGNvbnNpZGVyYXRpb25zOgorCQkgKgorCQkgKiBJbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgU1NCIHJlc2V0IHNlcXVlbmNlLCB0aGUgSG9zdAorCQkgKiBDb250cm9sIFJlZ2lzdGVyIG11c3QgYmUgcHJvZ3JhbW1lZCB0byBicmluZyB0aGUgVVNCIGNvcmUKKwkJICogYW5kIHZhcmlvdXMgcGh5IGNvbXBvbmVudHMgb3V0IG9mIHJlc2V0LgorCQkgKi8KKwkJc3NiX2RldmljZV9lbmFibGUoZGV2LCAwKTsKKwkJc3NiX3dyaXRlMzIoZGV2LCAweDIwMCwgMHg3ZmYpOworCisJCS8qIENoYW5nZSBGbHVzaCBjb250cm9sIHJlZyAqLworCQl0bXAgPSBzc2JfcmVhZDMyKGRldiwgMHg0MDApOworCQl0bXAgJj0gfjg7CisJCXNzYl93cml0ZTMyKGRldiwgMHg0MDAsIHRtcCk7CisJCXRtcCA9IHNzYl9yZWFkMzIoZGV2LCAweDQwMCk7CisKKwkJLyogQ2hhbmdlIFNoaW0gY29udHJvbCByZWcgKi8KKwkJdG1wID0gc3NiX3JlYWQzMihkZXYsIDB4MzA0KTsKKwkJdG1wICY9IH4weDEwMDsKKwkJc3NiX3dyaXRlMzIoZGV2LCAweDMwNCwgdG1wKTsKKwkJdG1wID0gc3NiX3JlYWQzMihkZXYsIDB4MzA0KTsKKworCQl1ZGVsYXkoMSk7CisKKwkJLyogV29yayBhcm91bmQgZm9yIDUzNTQgZmFpbHVyZXMgKi8KKwkJaWYgKGRldi0+aWQucmV2aXNpb24gPT0gMiAmJiBkZXYtPmJ1cy0+Y2hpcF9pZCA9PSAweDUzNTQpIHsKKwkJCS8qIENoYW5nZSBzeW4wMSByZWcgKi8KKwkJCXRtcCA9IDB4MDBmZTAwZmU7CisJCQlzc2Jfd3JpdGUzMihkZXYsIDB4ODk0LCB0bXApOworCisJCQkvKiBDaGFuZ2Ugc3luMDMgcmVnICovCisJCQl0bXAgPSBzc2JfcmVhZDMyKGRldiwgMHg4OWMpOworCQkJdG1wIHw9IDB4MTsKKwkJCXNzYl93cml0ZTMyKGRldiwgMHg4OWMsIHRtcCk7CisJCX0KKwl9IGVsc2UKKwkJc3NiX2RldmljZV9lbmFibGUoZGV2LCAwKTsKIAogCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZzc2Jfb2hjaV9oY19kcml2ZXIsIGRldi0+ZGV2LAogCQkJZGV2X25hbWUoZGV2LT5kZXYpKTsKQEAgLTIwMCw2ICsyNDUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzc2JfZGV2aWNlX2lkIHNzYl9vaGNpX3RhYmxlW10gPSB7CiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWX1VTQjExX0hPU1RERVYsIFNTQl9BTllfUkVWKSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfVVNCMTFfSE9TVCwgU1NCX0FOWV9SRVYpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl9VU0IyMF9IT1NULCBTU0JfQU5ZX1JFViksCiAJU1NCX0RFVlRBQkxFX0VORAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc3NiLCBzc2Jfb2hjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwppbmRleCBmNjA4ZGZkLi5kOWM4NWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKQEAgLTE2NDEsOCArMTY0MSw3IEBACiAjZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZveHUtPmxvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsCi0JCQkgICAgICAgJm94dV90b19oY2Qob3h1KS0+ZmxhZ3MpKSkgeworCWlmICh1bmxpa2VseSghSENEX0hXX0FDQ0VTU0lCTEUob3h1X3RvX2hjZChveHUpKSkpIHsKIAkJcmMgPSAtRVNIVVRET1dOOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjIwOSw4ICsyMjA4LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZveHUtPmxvY2ssIGZsYWdzKTsKIAotCWlmICh1bmxpa2VseSghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwKLQkJCSAgICAgICAmb3h1X3RvX2hjZChveHUpLT5mbGFncykpKSB7CisJaWYgKHVubGlrZWx5KCFIQ0RfSFdfQUNDRVNTSUJMRShveHVfdG9faGNkKG94dSkpKSkgewogCQlzdGF0dXMgPSAtRVNIVVRET1dOOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMjcxNSw3ICsyNzEzLDYgQEAKIAl1MzIgdGVtcCwgaGNjX3BhcmFtczsKIAogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7Ci0JaGNkLT5wb2xsX3JoID0gMDsKIAogCS8qIEVIQ0kgc3BlYyBzZWN0aW9uIDQuMSAqLwogCXJldHZhbCA9IGVoY2lfcmVzZXQob3h1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGJjZjlmMGUuLjk5MGYwNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtODEzLDggKzgxMywxMSBAQAogI2VuZGlmCiAKIAkvKiBhdm9pZCBhbGwgYWxsb2NhdGlvbnMgd2l0aGluIHNwaW5sb2NrcyAqLwotCWlmICghaGVwLT5oY3ByaXYpCisJaWYgKCFoZXAtPmhjcHJpdikgewogCQllcCA9IGt6YWxsb2Moc2l6ZW9mICplcCwgbWVtX2ZsYWdzKTsKKwkJaWYgKGVwID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2w4MTEtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMV9jcy5jCmluZGV4IDU4Y2I3M2MuLjBlMTNhMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTFfY3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExX2NzLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CkBAIC00Myw4ICs0Miw2IEBACiAvKiBWQVJJQUJMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtERVZfTkFNRV9MRU5dICA9ICJzbDgxMV9jcyI7Ci0KIHR5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CiAJc3RydWN0IHBjbWNpYV9kZXZpY2UJKnBfZGV2OwogfSBsb2NhbF9pbmZvX3Q7CkBAIC0xNjUsMTYgKzE2MiwxNiBAQAogCXBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwogCiAJLyogSU8gd2luZG93IHNldHRpbmdzICovCi0JcF9kZXYtPmlvLk51bVBvcnRzMSA9IHBfZGV2LT5pby5OdW1Qb3J0czIgPSAwOworCXBfZGV2LT5yZXNvdXJjZVswXS0+ZW5kID0gcF9kZXYtPnJlc291cmNlWzFdLT5lbmQgPSAwOwogCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQtPmlvLm53aW4gPiAwKSkgewogCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQtPmlvOworCQlwX2Rldi0+aW9fbGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKIAotCQlwX2Rldi0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKLQkJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7Ci0JCXBfZGV2LT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7Ci0JCXBfZGV2LT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCA9IGlvLT53aW5bMF0uYmFzZTsKKwkJcF9kZXYtPnJlc291cmNlWzBdLT5lbmQgPSBpby0+d2luWzBdLmxlbjsKIAotCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYsICZwX2Rldi0+aW8pOworCQlyZXR1cm4gcGNtY2lhX3JlcXVlc3RfaW8ocF9kZXYpOwogCX0KIAlwY21jaWFfZGlzYWJsZV9kZXZpY2UocF9kZXYpOwogCXJldHVybiAtRU5PREVWOwpAQCAtMTkyLDcgKzE4OSw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJLyogcmVxdWlyZSBhbiBJUlEgYW5kIHR3byByZWdpc3RlcnMgKi8KLQlpZiAoIWxpbmstPmlvLk51bVBvcnRzMSB8fCBsaW5rLT5pby5OdW1Qb3J0czEgPCAyKQorCWlmIChyZXNvdXJjZV9zaXplKGxpbmstPnJlc291cmNlWzBdKSA8IDIpCiAJCWdvdG8gZmFpbGVkOwogCiAJaWYgKCFsaW5rLT5pcnEpCkBAIC0yMDcsMTEgKzIwNCwxMCBAQAogCWlmIChsaW5rLT5jb25mLlZwcCkKIAkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwLzEwLCBsaW5rLT5jb25mLlZwcCUxMCk7CiAJcHJpbnRrKCIsIGlycSAlZCIsIGxpbmstPmlycSk7Ci0JcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7CisJcHJpbnRrKCIsIGlvICVwUiIsIGxpbmstPnJlc291cmNlWzBdKTsKIAlwcmludGsoIlxuIik7CiAKLQlpZiAoc2w4MTFfaGNfaW5pdChwYXJlbnQsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKQorCWlmIChzbDgxMV9oY19pbml0KHBhcmVudCwgbGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LCBsaW5rLT5pcnEpCiAJCQk8IDApIHsKIGZhaWxlZDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2w4MTFfY3NfY29uZmlnIGZhaWxlZFxuIik7CkBAIC0yNDYsNyArMjQyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBzbDgxMV9jc19kcml2ZXIgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5kcnYJCT0gewotCQkubmFtZQk9IChjaGFyICopZHJpdmVyX25hbWUsCisJCS5uYW1lCT0gInNsODExX2NzIiwKIAl9LAogCS5wcm9iZQkJPSBzbDgxMV9jc19wcm9iZSwKIAkucmVtb3ZlCQk9IHNsODExX2NzX2RldGFjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKaW5kZXggOThjZjBiMi4uNmU3ZmI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2luY2x1ZGUgInVoY2ktaGNkLmgiCiAKLSNkZWZpbmUgdWhjaV9kZWJ1Z19vcGVyYXRpb25zICgqIChjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopIE5VTEwpCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqdWhjaV9kZWJ1Z2ZzX3Jvb3Q7CiAKICNpZmRlZiBERUJVRwpAQCAtNDk1LDE4ICs0OTQsMTYgQEAKIHsKIAlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBpbm9kZS0+aV9wcml2YXRlOwogCXN0cnVjdCB1aGNpX2RlYnVnICp1cDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9ja19rZXJuZWwoKTsKIAl1cCA9IGttYWxsb2Moc2l6ZW9mKCp1cCksIEdGUF9LRVJORUwpOwogCWlmICghdXApCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCXVwLT5kYXRhID0ga21hbGxvYyhNQVhfT1VUUFVULCBHRlBfS0VSTkVMKTsKIAlpZiAoIXVwLT5kYXRhKSB7CiAJCWtmcmVlKHVwKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXVwLT5zaXplID0gMDsKQEAgLTUxNywxMCArNTE0LDcgQEAKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHVwOwogCi0JcmV0ID0gMDsKLW91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvZmZfdCB1aGNpX2RlYnVnX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQpAQCAtNTI4LDkgKzUyMiw5IEBACiAJc3RydWN0IHVoY2lfZGVidWcgKnVwOwogCWxvZmZfdCBuZXcgPSAtMTsKIAotCWxvY2tfa2VybmVsKCk7CiAJdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwkvKiBYWFg6IGF0b21pYyA2NGJpdCBzZWVrIGFjY2VzcywgYnV0IHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQgaW4gdGhlIFZGUyAqLwogCXN3aXRjaCAod2hlbmNlKSB7CiAJY2FzZSAwOgogCQluZXcgPSBvZmY7CkBAIC01MzksMTEgKzUzMywxMCBAQAogCQluZXcgPSBmaWxlLT5mX3BvcyArIG9mZjsKIAkJYnJlYWs7CiAJfQotCWlmIChuZXcgPCAwIHx8IG5ldyA+IHVwLT5zaXplKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKworCWlmIChuZXcgPCAwIHx8IG5ldyA+IHVwLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOworCiAJcmV0dXJuIChmaWxlLT5mX3BvcyA9IG5ldyk7CiB9CiAKQEAgLTU2NCw3ICs1NTcsNiBAQAogCXJldHVybiAwOwogfQogCi0jdW5kZWYgdWhjaV9kZWJ1Z19vcGVyYXRpb25zCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1aGNpX2RlYnVnX29wZXJhdGlvbnMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJdWhjaV9kZWJ1Z19vcGVuLApAQCAtNTcyLDYgKzU2NCw3IEBACiAJLnJlYWQgPQkJdWhjaV9kZWJ1Z19yZWFkLAogCS5yZWxlYXNlID0JdWhjaV9kZWJ1Z19yZWxlYXNlLAogfTsKKyNkZWZpbmUgVUhDSV9ERUJVR19PUFMKIAogI2VuZGlmCS8qIENPTkZJR19ERUJVR19GUyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggNjYzN2U1Mi4uZjUyZDA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJdWhjaS0+cmhfc3RhdGUgPSBVSENJX1JIX1JFU0VUOwogCXVoY2ktPmlzX3N0b3BwZWQgPSBVSENJX0lTX1NUT1BQRUQ7CiAJdWhjaV90b19oY2QodWhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKLQl1aGNpX3RvX2hjZCh1aGNpKS0+cG9sbF9yaCA9IDA7CisJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZ1aGNpX3RvX2hjZCh1aGNpKS0+ZmxhZ3MpOwogCiAJdWhjaS0+ZGVhZCA9IDA7CQkvKiBGdWxsIHJlc2V0IHJlc3VycmVjdHMgdGhlIGNvbnRyb2xsZXIgKi8KIH0KQEAgLTE3Niw2ICsxNzYsOCBAQAogICovCiBzdGF0aWMgdm9pZCBjb25maWd1cmVfaGMoc3RydWN0IHVoY2lfaGNkICp1aGNpKQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSk7CisKIAkvKiBTZXQgdGhlIGZyYW1lIGxlbmd0aCB0byB0aGUgZGVmYXVsdDogMSBtcyBleGFjdGx5ICovCiAJb3V0YihVU0JTT0ZfREVGQVVMVCwgdWhjaS0+aW9fYWRkciArIFVTQlNPRik7CiAKQEAgLTE5MSw4ICsxOTMsMTEgQEAKIAltYigpOwogCiAJLyogRW5hYmxlIFBJUlEgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSksIFVTQkxFR1NVUCwKLQkJCVVTQkxFR1NVUF9ERUZBVUxUKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgVVNCTEVHU1VQLCBVU0JMRUdTVVBfREVGQVVMVCk7CisKKwkvKiBEaXNhYmxlIHBsYXRmb3JtLXNwZWNpZmljIG5vbi1QTUUjIHdha2V1cCAqLworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFVTQlJFU19JTlRFTCwgMCk7CiB9CiAKIApAQCAtMzQ0LDcgKzM0OSwxMCBAQAogCS8qIElmIGludGVycnVwdHMgZG9uJ3Qgd29yayBhbmQgcmVtb3RlIHdha2V1cCBpcyBlbmFibGVkIHRoZW4KIAkgKiB0aGUgc3VzcGVuZGVkIHJvb3QgaHViIG5lZWRzIHRvIGJlIHBvbGxlZC4KIAkgKi8KLQl1aGNpX3RvX2hjZCh1aGNpKS0+cG9sbF9yaCA9ICghaW50X2VuYWJsZSAmJiB3YWtldXBfZW5hYmxlKTsKKwlpZiAoIWludF9lbmFibGUgJiYgd2FrZXVwX2VuYWJsZSkKKwkJc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JILCAmdWhjaV90b19oY2QodWhjaSktPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChIQ0RfRkxBR19QT0xMX1JILCAmdWhjaV90b19oY2QodWhjaSktPmZsYWdzKTsKIAogCXVoY2lfc2Nhbl9zY2hlZHVsZSh1aGNpKTsKIAl1aGNpX2ZzYnJfb2ZmKHVoY2kpOwpAQCAtMzYzLDcgKzM3MSw3IEBACiAJCQl1aGNpLT5pb19hZGRyICsgVVNCSU5UUik7CiAJbWIoKTsKIAl1aGNpLT5yaF9zdGF0ZSA9IFVIQ0lfUkhfUlVOTklORzsKLQl1aGNpX3RvX2hjZCh1aGNpKS0+cG9sbF9yaCA9IDE7CisJc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JILCAmdWhjaV90b19oY2QodWhjaSktPmZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgd2FrZXVwX3JoKHN0cnVjdCB1aGNpX2hjZCAqdWhjaSkKQEAgLTU4OSw3ICs1OTcsNyBAQAogCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CiAJaW50IHJldHZhbCA9IC1FQlVTWTsKIAlpbnQgaTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IGRlbnRyeSBfX21heWJlX3VudXNlZCAqZGVudHJ5OwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKIApAQCAtNTk5LDE4ICs2MDcsMTYgQEAKIAlJTklUX0xJU1RfSEVBRCgmdWhjaS0+aWRsZV9xaF9saXN0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1aGNpLT53YWl0cWgpOwogCi0JaWYgKERFQlVHX0NPTkZJR1VSRUQpIHsKLQkJZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShoY2QtPnNlbGYuYnVzX25hbWUsCi0JCQkJU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIHVoY2lfZGVidWdmc19yb290LAotCQkJCXVoY2ksICZ1aGNpX2RlYnVnX29wZXJhdGlvbnMpOwotCQlpZiAoIWRlbnRyeSkgewotCQkJZGV2X2Vycih1aGNpX2Rldih1aGNpKSwgImNvdWxkbid0IGNyZWF0ZSB1aGNpICIKLQkJCQkJImRlYnVnZnMgZW50cnlcbiIpOwotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyX2NyZWF0ZV9kZWJ1Z19lbnRyeTsKLQkJfQotCQl1aGNpLT5kZW50cnkgPSBkZW50cnk7CisjaWZkZWYgVUhDSV9ERUJVR19PUFMKKwlkZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGhjZC0+c2VsZi5idXNfbmFtZSwKKwkJCVNfSUZSRUd8U19JUlVHT3xTX0lXVVNSLCB1aGNpX2RlYnVnZnNfcm9vdCwKKwkJCXVoY2ksICZ1aGNpX2RlYnVnX29wZXJhdGlvbnMpOworCWlmICghZGVudHJ5KSB7CisJCWRldl9lcnIodWhjaV9kZXYodWhjaSksICJjb3VsZG4ndCBjcmVhdGUgdWhjaSBkZWJ1Z2ZzIGVudHJ5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQorCXVoY2ktPmRlbnRyeSA9IGRlbnRyeTsKKyNlbmRpZgogCiAJdWhjaS0+ZnJhbWUgPSBkbWFfYWxsb2NfY29oZXJlbnQodWhjaV9kZXYodWhjaSksCiAJCQlVSENJX05VTUZSQU1FUyAqIHNpemVvZigqdWhjaS0+ZnJhbWUpLApAQCAtNjkxLDcgKzY5Nyw5IEBACiAKIAljb25maWd1cmVfaGModWhjaSk7CiAJdWhjaS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCXNwaW5fbG9ja19pcnEoJnVoY2ktPmxvY2spOwogCXN0YXJ0X3JoKHVoY2kpOworCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CiAJcmV0dXJuIDA7CiAKIC8qCkBAIC03MjIsNyArNzMwLDYgQEAKIGVycl9hbGxvY19mcmFtZToKIAlkZWJ1Z2ZzX3JlbW92ZSh1aGNpLT5kZW50cnkpOwogCi1lcnJfY3JlYXRlX2RlYnVnX2VudHJ5OgogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTczMSw3ICs3MzgsNyBAQAogCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGhjZF90b191aGNpKGhjZCk7CiAKIAlzcGluX2xvY2tfaXJxKCZ1aGNpLT5sb2NrKTsKLQlpZiAodGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpICYmICF1aGNpLT5kZWFkKQorCWlmIChIQ0RfSFdfQUNDRVNTSUJMRShoY2QpICYmICF1aGNpLT5kZWFkKQogCQl1aGNpX2hjX2RpZWQodWhjaSk7CiAJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmdWhjaS0+bG9jayk7CkBAIC03NDgsNyArNzU1LDcgQEAKIAlpbnQgcmMgPSAwOwogCiAJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKQogCQlyYyA9IC1FU0hVVERPV047CiAJZWxzZSBpZiAodWhjaS0+ZGVhZCkKIAkJOwkJLyogRGVhZCBjb250cm9sbGVycyB0ZWxsIG5vIHRhbGVzICovCkBAIC03NzUsNyArNzgyLDcgQEAKIAlpbnQgcmMgPSAwOwogCiAJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKQogCQlyYyA9IC1FU0hVVERPV047CiAJZWxzZSBpZiAoIXVoY2ktPmRlYWQpCiAJCXdha2V1cF9yaCh1aGNpKTsKQEAgLTc4MywxNSArNzkwLDE2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHVoY2lfcGNpX3N1c3BlbmQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3N0YXRpYyBpbnQgdWhjaV9wY2lfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBib29sIGRvX3dha2V1cCkKIHsKIAlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBoY2RfdG9fdWhjaShoY2QpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldih1aGNpX2Rldih1aGNpKSk7CiAJaW50IHJjID0gMDsKIAogCWRldl9kYmcodWhjaV9kZXYodWhjaSksICIlc1xuIiwgX19mdW5jX18pOwogCiAJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykgfHwgdWhjaS0+ZGVhZCkKKwlpZiAoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkgfHwgdWhjaS0+ZGVhZCkKIAkJZ290byBkb25lX29rYXk7CQkvKiBBbHJlYWR5IHN1c3BlbmRlZCBvciBkZWFkICovCiAKIAlpZiAodWhjaS0+cmhfc3RhdGUgPiBVSENJX1JIX1NVU1BFTkRFRCkgewpAQCAtODAzLDExICs4MTEsMTUgQEAKIAkvKiBBbGwgUENJIGhvc3QgY29udHJvbGxlcnMgYXJlIHJlcXVpcmVkIHRvIGRpc2FibGUgSVJRIGdlbmVyYXRpb24KIAkgKiBhdCB0aGUgc291cmNlLCBzbyB3ZSBtdXN0IHR1cm4gb2ZmIFBJUlEuCiAJICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRvX3BjaV9kZXYodWhjaV9kZXYodWhjaSkpLCBVU0JMRUdTVVAsIDApOwotCW1iKCk7Ci0JaGNkLT5wb2xsX3JoID0gMDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgVVNCTEVHU1VQLCAwKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOwogCi0JLyogRklYTUU6IEVuYWJsZSBub24tUE1FIyByZW1vdGUgd2FrZXVwPyAqLworCS8qIEVuYWJsZSBwbGF0Zm9ybS1zcGVjaWZpYyBub24tUE1FIyB3YWtldXAgKi8KKwlpZiAoZG9fd2FrZXVwKSB7CisJCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCkKKwkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBVU0JSRVNfSU5URUwsCisJCQkJCVVTQlBPUlQxRU4gfCBVU0JQT1JUMkVOKTsKKwl9CiAKIGRvbmVfb2theToKIAljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwpAQCAtODI2LDcgKzgzOCw2IEBACiAJICogZXZlbiBpZiB0aGUgY29udHJvbGxlciB3YXMgZGVhZC4KIAkgKi8KIAlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKLQltYigpOwogCiAJc3Bpbl9sb2NrX2lycSgmdWhjaS0+bG9jayk7CiAKQEAgLTgzNCw4ICs4NDUsNiBAQAogCWlmIChoaWJlcm5hdGVkKQogCQl1aGNpX2hjX2RpZWQodWhjaSk7CiAKLQkvKiBGSVhNRTogRGlzYWJsZSBub24tUE1FIyByZW1vdGUgd2FrZXVwPyAqLwotCiAJLyogVGhlIGZpcm13YXJlIG9yIGEgYm9vdCBrZXJuZWwgbWF5IGhhdmUgY2hhbmdlZCB0aGUgY29udHJvbGxlcgogCSAqIHNldHRpbmdzIGR1cmluZyBhIHN5c3RlbSB3YWtldXAuICBDaGVjayBpdCBhbmQgcmVjb25maWd1cmUKIAkgKiB0byBhdm9pZCBwcm9ibGVtcy4KQEAgLTg0NSwyMiArODU0LDIwIEBACiAJLyogSWYgdGhlIGNvbnRyb2xsZXIgd2FzIGRlYWQgYmVmb3JlLCBpdCdzIGJhY2sgYWxpdmUgbm93ICovCiAJY29uZmlndXJlX2hjKHVoY2kpOwogCi0JaWYgKHVoY2ktPnJoX3N0YXRlID09IFVIQ0lfUkhfUkVTRVQpIHsKLQotCQkvKiBUaGUgY29udHJvbGxlciBoYWQgdG8gYmUgcmVzZXQgKi8KKwkvKiBUZWxsIHRoZSBjb3JlIGlmIHRoZSBjb250cm9sbGVyIGhhZCB0byBiZSByZXNldCAqLworCWlmICh1aGNpLT5yaF9zdGF0ZSA9PSBVSENJX1JIX1JFU0VUKQogCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihoY2QtPnNlbGYucm9vdF9odWIpOwotCQlzdXNwZW5kX3JoKHVoY2ksIFVIQ0lfUkhfU1VTUEVOREVEKTsKLQl9CiAKIAlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOwogCiAJLyogSWYgaW50ZXJydXB0cyBkb24ndCB3b3JrIGFuZCByZW1vdGUgd2FrZXVwIGlzIGVuYWJsZWQgdGhlbgogCSAqIHRoZSBzdXNwZW5kZWQgcm9vdCBodWIgbmVlZHMgdG8gYmUgcG9sbGVkLgogCSAqLwotCWlmICghdWhjaS0+UkRfZW5hYmxlICYmIGhjZC0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCkgewotCQloY2QtPnBvbGxfcmggPSAxOwotCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7Ci0JfQorCWlmICghdWhjaS0+UkRfZW5hYmxlICYmIGhjZC0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCkKKwkJc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JILCAmaGNkLT5mbGFncyk7CisKKwkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCAyNmJkMWIyLi40OWJmMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC02NywxMiArNjcsMTcgQEAKICNkZWZpbmUgICBVU0JQT1JUU0NfUkVTMwkweDQwMDAJLyogcmVzZXJ2ZWQsIHdyaXRlIHplcm9lcyAqLwogI2RlZmluZSAgIFVTQlBPUlRTQ19SRVM0CTB4ODAwMAkvKiByZXNlcnZlZCwgd3JpdGUgemVyb2VzICovCiAKLS8qIExlZ2FjeSBzdXBwb3J0IHJlZ2lzdGVyICovCisvKiBQQ0kgbGVnYWN5IHN1cHBvcnQgcmVnaXN0ZXIgKi8KICNkZWZpbmUgVVNCTEVHU1VQCQkweGMwCiAjZGVmaW5lICAgVVNCTEVHU1VQX0RFRkFVTFQJMHgyMDAwCS8qIG9ubHkgUElSUSBlbmFibGUgc2V0ICovCiAjZGVmaW5lICAgVVNCTEVHU1VQX1JXQwkJMHg4ZjAwCS8qIHRoZSBSL1dDIGJpdHMgKi8KICNkZWZpbmUgICBVU0JMRUdTVVBfUk8JCTB4NTA0MAkvKiBSL08gYW5kIHJlc2VydmVkIGJpdHMgKi8KIAorLyogUENJIEludGVsLXNwZWNpZmljIHJlc3VtZS1lbmFibGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVVNCUkVTX0lOVEVMCQkweGM0CisjZGVmaW5lICAgVVNCUE9SVDFFTgkJMHgwMQorI2RlZmluZSAgIFVTQlBPUlQyRU4JCTB4MDIKKwogI2RlZmluZSBVSENJX1BUUl9CSVRTCQljcHVfdG9fbGUzMigweDAwMEYpCiAjZGVmaW5lIFVIQ0lfUFRSX1RFUk0JCWNwdV90b19sZTMyKDB4MDAwMSkKICNkZWZpbmUgVUhDSV9QVFJfUUgJCWNwdV90b19sZTMyKDB4MDAwMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwppbmRleCA4MjcwMDU1Li42ZDU5YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdWhjaS0+bG9jaywgZmxhZ3MpOwogCiAJdWhjaV9zY2FuX3NjaGVkdWxlKHVoY2kpOwotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpIHx8IHVoY2ktPmRlYWQpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpIHx8IHVoY2ktPmRlYWQpCiAJCWdvdG8gZG9uZTsKIAl1aGNpX2NoZWNrX3BvcnRzKHVoY2kpOwogCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICAgY2FzZSBVSENJX1JIX1NVU1BFTkRJTkc6CiAJICAgIGNhc2UgVUhDSV9SSF9TVVNQRU5ERUQ6CiAJCS8qIGlmIHBvcnQgY2hhbmdlLCBhc2sgdG8gYmUgcmVzdW1lZCAqLwotCQlpZiAoc3RhdHVzKQorCQlpZiAoc3RhdHVzIHx8IHVoY2ktPnJlc3VtaW5nX3BvcnRzKQogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAkJYnJlYWs7CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogCXUxNiB3UG9ydENoYW5nZSwgd1BvcnRTdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghdGVzdF9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpIHx8IHVoY2ktPmRlYWQpCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpIHx8IHVoY2ktPmRlYWQpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVoY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCmluZGV4IGFjZDU4MmMuLmQzYWRlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJcWgtPnVubGlua19mcmFtZSA9IHVoY2ktPmZyYW1lX251bWJlcjsKIAogCS8qIEZvcmNlIGFuIGludGVycnVwdCBzbyB3ZSBrbm93IHdoZW4gdGhlIFFIIGlzIGZ1bGx5IHVubGlua2VkICovCi0JaWYgKGxpc3RfZW1wdHkoJnVoY2ktPnNrZWxfdW5saW5rX3FoLT5ub2RlKSkKKwlpZiAobGlzdF9lbXB0eSgmdWhjaS0+c2tlbF91bmxpbmtfcWgtPm5vZGUpIHx8IHVoY2ktPmlzX3N0b3BwZWQpCiAJCXVoY2lfc2V0X25leHRfaW50ZXJydXB0KHVoY2kpOwogCiAJLyogTW92ZSB0aGUgUUggZnJvbSBpdHMgb2xkIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgdW5saW5raW5nIGxpc3QgKi8KQEAgLTE2NjcsNyArMTY2Nyw3IEBACiAJCQlxaC0+YWR2YW5jZV9qaWZmaWVzID0gamlmZmllczsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlyZXQgPSAwOworCQlyZXQgPSB1aGNpLT5pc19zdG9wcGVkOwogCX0KIAogCS8qIFRoZSBxdWV1ZSBoYXNuJ3QgYWR2YW5jZWQ7IGNoZWNrIGZvciB0aW1lb3V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvaGNkLmMKaW5kZXggZTBkMzQwMS4uNzJiNjg5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9oY2QuYwpAQCAtNjgsNyArNjgsNyBAQAogCXdoY193cml0ZV93dXNiY21kKHdoYywgV1VTQkNNRF9SVU4sIFdVU0JDTURfUlVOKTsKIAogCXVzYl9oY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOwotCXVzYl9oY2QtPnBvbGxfcmggPSAxOworCXNldF9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJnVzYl9oY2QtPmZsYWdzKTsKIAl1c2JfaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcXNldC5jCmluZGV4IGFiNWExNGYuLmRjMGFiODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9xc2V0LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3FzZXQuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAJCQkgICAgfHwgKHByZXZfZW5kICYgKFdIQ0lfUEFHRV9TSVpFLTEpKQogCQkJICAgIHx8IChkbWFfYWRkciAmIChXSENJX1BBR0VfU0laRS0xKSkKIAkJCSAgICB8fCBzdGQtPmxlbiArIFdIQ0lfUEFHRV9TSVpFID4gUVREX01BWF9YRkVSX1NJWkUpIHsKLQkJCQlpZiAoc3RkLT5sZW4gJSBxc2V0LT5tYXhfcGFja2V0ICE9IDApCisJCQkJaWYgKHN0ZCAmJiBzdGQtPmxlbiAlIHFzZXQtPm1heF9wYWNrZXQgIT0gMCkKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJc3RkID0gcXNldF9uZXdfc3RkKHdoYywgcXNldCwgdXJiLCBtZW1fZmxhZ3MpOwogCQkJCWlmIChzdGQgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDJlYjY1OGQuLjRlNTEzNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTM5MSw0OSArMzkxLDYgQEAKIAlyZXR1cm4gZXAtPnN0cmVhbV9pbmZvLT5zdHJlYW1fcmluZ3Nbc3RyZWFtX2lkXTsKIH0KIAotc3RydWN0IHhoY2lfcmluZyAqeGhjaV90cmlhZF90b190cmFuc2Zlcl9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJdW5zaWduZWQgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCwKLQkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCkKLXsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKLQotCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07Ci0JLyogQ29tbW9uIGNhc2U6IG5vIHN0cmVhbXMgKi8KLQlpZiAoIShlcC0+ZXBfc3RhdGUgJiBFUF9IQVNfU1RSRUFNUykpCi0JCXJldHVybiBlcC0+cmluZzsKLQotCWlmIChzdHJlYW1faWQgPT0gMCkgewotCQl4aGNpX3dhcm4oeGhjaSwKLQkJCQkiV0FSTjogU2xvdCBJRCAldSwgZXAgaW5kZXggJXUgaGFzIHN0cmVhbXMsICIKLQkJCQkiYnV0IFVSQiBoYXMgbm8gc3RyZWFtIElELlxuIiwKLQkJCQlzbG90X2lkLCBlcF9pbmRleCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChzdHJlYW1faWQgPCBlcC0+c3RyZWFtX2luZm8tPm51bV9zdHJlYW1zKQotCQlyZXR1cm4gZXAtPnN0cmVhbV9pbmZvLT5zdHJlYW1fcmluZ3Nbc3RyZWFtX2lkXTsKLQotCXhoY2lfd2Fybih4aGNpLAotCQkJIldBUk46IFNsb3QgSUQgJXUsIGVwIGluZGV4ICV1IGhhcyAiCi0JCQkic3RyZWFtIElEcyAxIHRvICV1IGFsbG9jYXRlZCwgIgotCQkJImJ1dCBzdHJlYW0gSUQgJXUgaXMgcmVxdWVzdGVkLlxuIiwKLQkJCXNsb3RfaWQsIGVwX2luZGV4LAotCQkJZXAtPnN0cmVhbV9pbmZvLT5udW1fc3RyZWFtcyAtIDEsCi0JCQlzdHJlYW1faWQpOwotCXJldHVybiBOVUxMOwotfQotCi0vKiBHZXQgdGhlIHJpZ2h0IHJpbmcgZm9yIHRoZSBnaXZlbiBVUkIuCi0gKiBJZiB0aGUgZW5kcG9pbnQgc3VwcG9ydHMgc3RyZWFtcywgYm91bmRhcnkgY2hlY2sgdGhlIFVSQidzIHN0cmVhbSBJRC4KLSAqIElmIHRoZSBlbmRwb2ludCBkb2Vzbid0IHN1cHBvcnQgc3RyZWFtcywgcmV0dXJuIHRoZSBzaW5ndWxhciBlbmRwb2ludCByaW5nLgotICovCi1zdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX3VyYl90b190cmFuc2Zlcl9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJc3RydWN0IHVyYiAqdXJiKQotewotCXJldHVybiB4aGNpX3RyaWFkX3RvX3RyYW5zZmVyX3JpbmcoeGhjaSwgdXJiLT5kZXYtPnNsb3RfaWQsCi0JCXhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KCZ1cmItPmVwLT5kZXNjKSwgdXJiLT5zdHJlYW1faWQpOwotfQotCiAjaWZkZWYgQ09ORklHX1VTQl9YSENJX0hDRF9ERUJVR0dJTkcKIHN0YXRpYyBpbnQgeGhjaV90ZXN0X3JhZGl4X3RyZWUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbXMsCkBAIC0xMTEyLDggKzEwNjksMTggQEAKIAllcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgdmlydF9kZXYtPmluX2N0eCwgZXBfaW5kZXgpOwogCiAJLyogU2V0IHVwIHRoZSBlbmRwb2ludCByaW5nICovCi0JdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3JpbmcgPQotCQl4aGNpX3JpbmdfYWxsb2MoeGhjaSwgMSwgdHJ1ZSwgbWVtX2ZsYWdzKTsKKwkvKgorCSAqIElzb2Nocm9ub3VzIGVuZHBvaW50IHJpbmcgbmVlZHMgYmlnZ2VyIHNpemUgYmVjYXVzZSBvbmUgaXNvYyBVUkIKKwkgKiBjYXJyaWVzIG11bHRpcGxlIHBhY2tldHMgYW5kIGl0IHdpbGwgaW5zZXJ0IG11bHRpcGxlIHRkcyB0byB0aGUKKwkgKiByaW5nLgorCSAqIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggZHluYW1pYyByaW5nIHJlc2l6aW5nIGluIHRoZSBmdXR1cmUuCisJICovCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJmVwLT5kZXNjKSkKKwkJdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3JpbmcgPQorCQkJeGhjaV9yaW5nX2FsbG9jKHhoY2ksIDgsIHRydWUsIG1lbV9mbGFncyk7CisJZWxzZQorCQl2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5uZXdfcmluZyA9CisJCQl4aGNpX3JpbmdfYWxsb2MoeGhjaSwgMSwgdHJ1ZSwgbWVtX2ZsYWdzKTsKIAlpZiAoIXZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLm5ld19yaW5nKSB7CiAJCS8qIEF0dGVtcHQgdG8gdXNlIHRoZSByaW5nIGNhY2hlICovCiAJCWlmICh2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZCA9PSAwKQpAQCAtMTEyNCw2ICsxMDkxLDcgQEAKIAkJdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQtLTsKIAkJeGhjaV9yZWluaXRfY2FjaGVkX3JpbmcoeGhjaSwgdmlydF9kZXYtPmVwc1tlcF9pbmRleF0ubmV3X3JpbmcpOwogCX0KKwl2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5za2lwID0gZmFsc2U7CiAJZXBfcmluZyA9IHZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLm5ld19yaW5nOwogCWVwX2N0eC0+ZGVxID0gZXBfcmluZy0+Zmlyc3Rfc2VnLT5kbWEgfCBlcF9yaW5nLT5jeWNsZV9zdGF0ZTsKIApAQCAtMTM4OSw2ICsxMzU3LDIyIEBACiAJcmV0dXJuIGNvbW1hbmQ7CiB9CiAKK3ZvaWQgeGhjaV91cmJfZnJlZV9wcml2KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdikKK3sKKwlpbnQgbGFzdDsKKworCWlmICghdXJiX3ByaXYpCisJCXJldHVybjsKKworCWxhc3QgPSB1cmJfcHJpdi0+bGVuZ3RoIC0gMTsKKwlpZiAobGFzdCA+PSAwKSB7CisJCWludAlpOworCQlmb3IgKGkgPSAwOyBpIDw9IGxhc3Q7IGkrKykKKwkJCWtmcmVlKHVyYl9wcml2LT50ZFtpXSk7CisJfQorCWtmcmVlKHVyYl9wcml2KTsKK30KKwogdm9pZCB4aGNpX2ZyZWVfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXN0cnVjdCB4aGNpX2NvbW1hbmQgKmNvbW1hbmQpCiB7CkBAIC0xNTg4LDcgKzE1NzIsNyBAQAogCXVuc2lnbmVkIGludCBudW1fdGVzdHM7CiAJaW50IGksIHJldDsKIAotCW51bV90ZXN0cyA9IHNpemVvZihzaW1wbGVfdGVzdF92ZWN0b3IpIC8gc2l6ZW9mKHNpbXBsZV90ZXN0X3ZlY3RvclswXSk7CisJbnVtX3Rlc3RzID0gQVJSQVlfU0laRShzaW1wbGVfdGVzdF92ZWN0b3IpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdGVzdHM7IGkrKykgewogCQlyZXQgPSB4aGNpX3Rlc3RfdHJiX2luX3RkKHhoY2ksCiAJCQkJeGhjaS0+ZXZlbnRfcmluZy0+Zmlyc3Rfc2VnLApAQCAtMTYwMSw3ICsxNTg1LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JbnVtX3Rlc3RzID0gc2l6ZW9mKGNvbXBsZXhfdGVzdF92ZWN0b3IpIC8gc2l6ZW9mKGNvbXBsZXhfdGVzdF92ZWN0b3JbMF0pOworCW51bV90ZXN0cyA9IEFSUkFZX1NJWkUoY29tcGxleF90ZXN0X3ZlY3Rvcik7CiAJZm9yIChpID0gMDsgaSA8IG51bV90ZXN0czsgaSsrKSB7CiAJCXJldCA9IHhoY2lfdGVzdF90cmJfaW5fdGQoeGhjaSwKIAkJCQljb21wbGV4X3Rlc3RfdmVjdG9yW2ldLmlucHV0X3NlZywKQEAgLTE2MTcsNiArMTYwMSwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB4aGNpX3NldF9oY19ldmVudF9kZXEoc3RydWN0IHhoY2lfaGNkICp4aGNpKQoreworCXU2NCB0ZW1wOworCWRtYV9hZGRyX3QgZGVxOworCisJZGVxID0geGhjaV90cmJfdmlydF90b19kbWEoeGhjaS0+ZXZlbnRfcmluZy0+ZGVxX3NlZywKKwkJCXhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWUpOworCWlmIChkZXEgPT0gMCAmJiAhaW5faW50ZXJydXB0KCkpCisJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBzb21ldGhpbmcgd3Jvbmcgd2l0aCBTVyBldmVudCByaW5nICIKKwkJCQkiZGVxdWV1ZSBwdHIuXG4iKTsKKwkvKiBVcGRhdGUgSEMgZXZlbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KKwl0ZW1wID0geGhjaV9yZWFkXzY0KHhoY2ksICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7CisJdGVtcCAmPSBFUlNUX1BUUl9NQVNLOworCS8qIERvbid0IGNsZWFyIHRoZSBFSEIgYml0ICh3aGljaCBpcyBSVzFDKSBiZWNhdXNlCisJICogdGhlcmUgbWlnaHQgYmUgbW9yZSBldmVudHMgdG8gc2VydmljZS4KKwkgKi8KKwl0ZW1wICY9IH5FUlNUX0VIQjsKKwl4aGNpX2RiZyh4aGNpLCAiLy8gV3JpdGUgZXZlbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIsICIKKwkJCSJwcmVzZXJ2aW5nIEVIQiBiaXRcbiIpOworCXhoY2lfd3JpdGVfNjQoeGhjaSwgKCh1NjQpIGRlcSAmICh1NjQpIH5FUlNUX1BUUl9NQVNLKSB8IHRlbXAsCisJCQkmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworfQorCiAKIGludCB4aGNpX21lbV9pbml0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZ2ZwX3QgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKaW5kZXggMTE0ODJiNi4uZjdlZmUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwpAQCAtNTMsNiArNTMsNyBAQAogCXN0cnVjdCB4aGNpX2hjZAkJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwogCXN0cnVjdCBwY2lfZGV2CQkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCWludAkJCXJldHZhbDsKKwl1MzIJCQl0ZW1wOwogCiAJaGNkLT5zZWxmLnNnX3RhYmxlc2l6ZSA9IFRSQlNfUEVSX1NFR01FTlQgLSAyOwogCkBAIC05Myw2ICs5NCwxNCBAQAogCQlyZXR1cm4gcmV0dmFsOwogCXhoY2lfZGJnKHhoY2ksICJSZXNldCBjb21wbGV0ZVxuIik7CiAKKwl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+Y2FwX3JlZ3MtPmhjY19wYXJhbXMpOworCWlmIChIQ0NfNjRCSVRfQUREUih0ZW1wKSkgeworCQl4aGNpX2RiZyh4aGNpLCAiRW5hYmxpbmcgNjQtYml0IERNQSBhZGRyZXNzZXMuXG4iKTsKKwkJZG1hX3NldF9tYXNrKGhjZC0+c2VsZi5jb250cm9sbGVyLCBETUFfQklUX01BU0soNjQpKTsKKwl9IGVsc2UgeworCQlkbWFfc2V0X21hc2soaGNkLT5zZWxmLmNvbnRyb2xsZXIsIERNQV9CSVRfTUFTSygzMikpOworCX0KKwogCXhoY2lfZGJnKHhoY2ksICJDYWxsaW5nIEhDRCBpbml0XG4iKTsKIAkvKiBJbml0aWFsaXplIEhDRCBhbmQgaG9zdCBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlcy4gKi8KIAlyZXR2YWwgPSB4aGNpX2luaXQoaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCmluZGV4IGJmYzk5YTkuLmJjM2Y0ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYwpAQCAtMzAxLDI4ICszMDEsNiBAQAogCXJldHVybiAxOwogfQogCi12b2lkIHhoY2lfc2V0X2hjX2V2ZW50X2RlcShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCi17Ci0JdTY0IHRlbXA7Ci0JZG1hX2FkZHJfdCBkZXE7Ci0KLQlkZXEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYSh4aGNpLT5ldmVudF9yaW5nLT5kZXFfc2VnLAotCQkJeGhjaS0+ZXZlbnRfcmluZy0+ZGVxdWV1ZSk7Ci0JaWYgKGRlcSA9PSAwICYmICFpbl9pbnRlcnJ1cHQoKSkKLQkJeGhjaV93YXJuKHhoY2ksICJXQVJOIHNvbWV0aGluZyB3cm9uZyB3aXRoIFNXIGV2ZW50IHJpbmcgIgotCQkJCSJkZXF1ZXVlIHB0ci5cbiIpOwotCS8qIFVwZGF0ZSBIQyBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciAqLwotCXRlbXAgPSB4aGNpX3JlYWRfNjQoeGhjaSwgJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKLQl0ZW1wICY9IEVSU1RfUFRSX01BU0s7Ci0JLyogRG9uJ3QgY2xlYXIgdGhlIEVIQiBiaXQgKHdoaWNoIGlzIFJXMUMpIGJlY2F1c2UKLQkgKiB0aGVyZSBtaWdodCBiZSBtb3JlIGV2ZW50cyB0byBzZXJ2aWNlLgotCSAqLwotCXRlbXAgJj0gfkVSU1RfRUhCOwotCXhoY2lfZGJnKHhoY2ksICIvLyBXcml0ZSBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciwgcHJlc2VydmluZyBFSEIgYml0XG4iKTsKLQl4aGNpX3dyaXRlXzY0KHhoY2ksICgodTY0KSBkZXEgJiAodTY0KSB+RVJTVF9QVFJfTUFTSykgfCB0ZW1wLAotCQkJJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKLX0KLQogLyogUmluZyB0aGUgaG9zdCBjb250cm9sbGVyIGRvb3JiZWxsIGFmdGVyIHBsYWNpbmcgYSBjb21tYW5kIG9uIHRoZSByaW5nICovCiB2b2lkIHhoY2lfcmluZ19jbWRfZGIoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewpAQCAtMzU5LDExICszMzcsNiBAQAogCQlmaWVsZCA9IHhoY2lfcmVhZGwoeGhjaSwgZGJfYWRkcikgJiBEQl9NQVNLOwogCQlmaWVsZCB8PSBFUElfVE9fREIoZXBfaW5kZXgpIHwgU1RSRUFNX0lEX1RPX0RCKHN0cmVhbV9pZCk7CiAJCXhoY2lfd3JpdGVsKHhoY2ksIGZpZWxkLCBkYl9hZGRyKTsKLQkJLyogRmx1c2ggUENJIHBvc3RlZCB3cml0ZXMgLSBGSVhNRSBNYXR0aGV3IFdpbGNveCBzYXlzIHRoaXMKLQkJICogaXNuJ3QgdGltZS1jcml0aWNhbCBhbmQgd2Ugc2hvdWxkbid0IG1ha2UgdGhlIENQVSB3YWl0IGZvcgotCQkgKiB0aGUgZmx1c2guCi0JCSAqLwotCQl4aGNpX3JlYWRsKHhoY2ksIGRiX2FkZHIpOwogCX0KIH0KIApAQCAtNDE5LDYgKzM5Miw1MCBAQAogCXJldHVybiBjdXJfc2VnOwogfQogCisKK3N0YXRpYyBzdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX3RyaWFkX3RvX3RyYW5zZmVyX3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAorCQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKQoreworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOworCisJZXAgPSAmeGhjaS0+ZGV2c1tzbG90X2lkXS0+ZXBzW2VwX2luZGV4XTsKKwkvKiBDb21tb24gY2FzZTogbm8gc3RyZWFtcyAqLworCWlmICghKGVwLT5lcF9zdGF0ZSAmIEVQX0hBU19TVFJFQU1TKSkKKwkJcmV0dXJuIGVwLT5yaW5nOworCisJaWYgKHN0cmVhbV9pZCA9PSAwKSB7CisJCXhoY2lfd2Fybih4aGNpLAorCQkJCSJXQVJOOiBTbG90IElEICV1LCBlcCBpbmRleCAldSBoYXMgc3RyZWFtcywgIgorCQkJCSJidXQgVVJCIGhhcyBubyBzdHJlYW0gSUQuXG4iLAorCQkJCXNsb3RfaWQsIGVwX2luZGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHN0cmVhbV9pZCA8IGVwLT5zdHJlYW1faW5mby0+bnVtX3N0cmVhbXMpCisJCXJldHVybiBlcC0+c3RyZWFtX2luZm8tPnN0cmVhbV9yaW5nc1tzdHJlYW1faWRdOworCisJeGhjaV93YXJuKHhoY2ksCisJCQkiV0FSTjogU2xvdCBJRCAldSwgZXAgaW5kZXggJXUgaGFzICIKKwkJCSJzdHJlYW0gSURzIDEgdG8gJXUgYWxsb2NhdGVkLCAiCisJCQkiYnV0IHN0cmVhbSBJRCAldSBpcyByZXF1ZXN0ZWQuXG4iLAorCQkJc2xvdF9pZCwgZXBfaW5kZXgsCisJCQllcC0+c3RyZWFtX2luZm8tPm51bV9zdHJlYW1zIC0gMSwKKwkJCXN0cmVhbV9pZCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEdldCB0aGUgcmlnaHQgcmluZyBmb3IgdGhlIGdpdmVuIFVSQi4KKyAqIElmIHRoZSBlbmRwb2ludCBzdXBwb3J0cyBzdHJlYW1zLCBib3VuZGFyeSBjaGVjayB0aGUgVVJCJ3Mgc3RyZWFtIElELgorICogSWYgdGhlIGVuZHBvaW50IGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1zLCByZXR1cm4gdGhlIHNpbmd1bGFyIGVuZHBvaW50IHJpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX3VyYl90b190cmFuc2Zlcl9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVyYiAqdXJiKQoreworCXJldHVybiB4aGNpX3RyaWFkX3RvX3RyYW5zZmVyX3JpbmcoeGhjaSwgdXJiLT5kZXYtPnNsb3RfaWQsCisJCXhoY2lfZ2V0X2VuZHBvaW50X2luZGV4KCZ1cmItPmVwLT5kZXNjKSwgdXJiLT5zdHJlYW1faWQpOworfQorCiAvKgogICogTW92ZSB0aGUgeEhDJ3MgZW5kcG9pbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgcGFzdCBjdXJfdGQuCiAgKiBSZWNvcmQgdGhlIG5ldyBzdGF0ZSBvZiB0aGUgeEhDJ3MgZW5kcG9pbnQgcmluZyBkZXF1ZXVlIHNlZ21lbnQsCkBAIC01NzgsMTYgKzU5NSwyNCBAQAogCQlzdHJ1Y3QgeGhjaV90ZCAqY3VyX3RkLCBpbnQgc3RhdHVzLCBjaGFyICphZGplY3RpdmUpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCB1cmIJKnVyYjsKKwlzdHJ1Y3QgdXJiX3ByaXYJKnVyYl9wcml2OwogCi0JY3VyX3RkLT51cmItPmhjcHJpdiA9IE5VTEw7Ci0JdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCBjdXJfdGQtPnVyYik7Ci0JeGhjaV9kYmcoeGhjaSwgIkdpdmViYWNrICVzIFVSQiAlcFxuIiwgYWRqZWN0aXZlLCBjdXJfdGQtPnVyYik7CisJdXJiID0gY3VyX3RkLT51cmI7CisJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwl1cmJfcHJpdi0+dGRfY250Kys7CiAKLQlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7Ci0JdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCBjdXJfdGQtPnVyYiwgc3RhdHVzKTsKLQlrZnJlZShjdXJfdGQpOwotCXNwaW5fbG9jaygmeGhjaS0+bG9jayk7Ci0JeGhjaV9kYmcoeGhjaSwgIiVzIFVSQiBnaXZlbiBiYWNrXG4iLCBhZGplY3RpdmUpOworCS8qIE9ubHkgZ2l2ZWJhY2sgdXJiIHdoZW4gdGhpcyBpcyB0aGUgbGFzdCB0ZCBpbiB1cmIgKi8KKwlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKSB7CisJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKwkJeGhjaV9kYmcoeGhjaSwgIkdpdmViYWNrICVzIFVSQiAlcFxuIiwgYWRqZWN0aXZlLCB1cmIpOworCisJCXNwaW5fdW5sb2NrKCZ4aGNpLT5sb2NrKTsKKwkJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJCXhoY2lfdXJiX2ZyZWVfcHJpdih4aGNpLCB1cmJfcHJpdik7CisJCXNwaW5fbG9jaygmeGhjaS0+bG9jayk7CisJCXhoY2lfZGJnKHhoY2ksICIlcyBVUkIgZ2l2ZW4gYmFja1xuIiwgYWRqZWN0aXZlKTsKKwl9CiB9CiAKIC8qCkBAIC0xMTMyLDcgKzExNTcsNiBAQAogCiAJLyogVXBkYXRlIGV2ZW50IHJpbmcgZGVxdWV1ZSBwb2ludGVyIGJlZm9yZSBkcm9wcGluZyB0aGUgbG9jayAqLwogCWluY19kZXEoeGhjaSwgeGhjaS0+ZXZlbnRfcmluZywgdHJ1ZSk7Ci0JeGhjaV9zZXRfaGNfZXZlbnRfZGVxKHhoY2kpOwogCiAJc3Bpbl91bmxvY2soJnhoY2ktPmxvY2spOwogCS8qIFBhc3MgdGhpcyB1cCB0byB0aGUgY29yZSAqLwpAQCAtMTI1OCw2ICsxMjgyLDQyMSBAQAogfQogCiAvKgorICogRmluaXNoIHRoZSB0ZCBwcm9jZXNzaW5nLCByZW1vdmUgdGhlIHRkIGZyb20gdGQgbGlzdDsKKyAqIFJldHVybiAxIGlmIHRoZSB1cmIgY2FuIGJlIGdpdmVuIGJhY2suCisgKi8KK3N0YXRpYyBpbnQgZmluaXNoX3RkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdGQgKnRkLAorCXVuaW9uIHhoY2lfdHJiICpldmVudF90cmIsIHN0cnVjdCB4aGNpX3RyYW5zZmVyX2V2ZW50ICpldmVudCwKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCwgaW50ICpzdGF0dXMsIGJvb2wgc2tpcCkKK3sKKwlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqeGRldjsKKwlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXVuc2lnbmVkIGludCBzbG90X2lkOworCWludCBlcF9pbmRleDsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OworCWludCByZXQgPSAwOworCXN0cnVjdCB1cmJfcHJpdgkqdXJiX3ByaXY7CisJdTMyIHRyYl9jb21wX2NvZGU7CisKKwlzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKTsKKwl4ZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKKwllcF9pbmRleCA9IFRSQl9UT19FUF9JRChldmVudC0+ZmxhZ3MpIC0gMTsKKwllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CisJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKKwl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKTsKKworCWlmIChza2lwKQorCQlnb3RvIHRkX2NsZWFudXA7CisKKwlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NUT1BfSU5WQUwgfHwKKwkJCXRyYl9jb21wX2NvZGUgPT0gQ09NUF9TVE9QKSB7CisJCS8qIFRoZSBFbmRwb2ludCBTdG9wIENvbW1hbmQgY29tcGxldGlvbiB3aWxsIHRha2UgY2FyZSBvZiBhbnkKKwkJICogc3RvcHBlZCBURHMuICBBIHN0b3BwZWQgVEQgbWF5IGJlIHJlc3RhcnRlZCwgc28gZG9uJ3QgdXBkYXRlCisJCSAqIHRoZSByaW5nIGRlcXVldWUgcG9pbnRlciBvciB0YWtlIHRoaXMgVEQgb2ZmIGFueSBsaXN0cyB5ZXQuCisJCSAqLworCQllcC0+c3RvcHBlZF90ZCA9IHRkOworCQllcC0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfU1RBTEwpIHsKKwkJCS8qIFRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgZnJvbSB0aGUgZHJpdmVyJ3MKKwkJCSAqIHBlcnNwZWN0aXZlLCBidXQgd2UgbmVlZCB0byBpc3N1ZSBhIHNldCBkZXF1ZXVlCisJCQkgKiBjb21tYW5kIGZvciB0aGlzIHN0YWxsZWQgZW5kcG9pbnQgdG8gbW92ZSB0aGUgZGVxdWV1ZQorCQkJICogcG9pbnRlciBwYXN0IHRoZSBURC4gIFdlIGNhbid0IGRvIHRoYXQgaGVyZSBiZWNhdXNlCisJCQkgKiB0aGUgaGFsdCBjb25kaXRpb24gbXVzdCBiZSBjbGVhcmVkIGZpcnN0LiAgTGV0IHRoZQorCQkJICogVVNCIGNsYXNzIGRyaXZlciBjbGVhciB0aGUgc3RhbGwgbGF0ZXIuCisJCQkgKi8KKwkJCWVwLT5zdG9wcGVkX3RkID0gdGQ7CisJCQllcC0+c3RvcHBlZF90cmIgPSBldmVudF90cmI7CisJCQllcC0+c3RvcHBlZF9zdHJlYW0gPSBlcF9yaW5nLT5zdHJlYW1faWQ7CisJCX0gZWxzZSBpZiAoeGhjaV9yZXF1aXJlc19tYW51YWxfaGFsdF9jbGVhbnVwKHhoY2ksCisJCQkJCWVwX2N0eCwgdHJiX2NvbXBfY29kZSkpIHsKKwkJCS8qIE90aGVyIHR5cGVzIG9mIGVycm9ycyBoYWx0IHRoZSBlbmRwb2ludCwgYnV0IHRoZQorCQkJICogY2xhc3MgZHJpdmVyIGRvZXNuJ3QgY2FsbCB1c2JfcmVzZXRfZW5kcG9pbnQoKSB1bmxlc3MKKwkJCSAqIHRoZSBlcnJvciBpcyAtRVBJUEUuICBDbGVhciB0aGUgaGFsdGVkIHN0YXR1cyBpbiB0aGUKKwkJCSAqIHhIQ0kgaGFyZHdhcmUgbWFudWFsbHkuCisJCQkgKi8KKwkJCXhoY2lfY2xlYW51cF9oYWx0ZWRfZW5kcG9pbnQoeGhjaSwKKwkJCQkJc2xvdF9pZCwgZXBfaW5kZXgsIGVwX3JpbmctPnN0cmVhbV9pZCwKKwkJCQkJdGQsIGV2ZW50X3RyYik7CisJCX0gZWxzZSB7CisJCQkvKiBVcGRhdGUgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KKwkJCXdoaWxlIChlcF9yaW5nLT5kZXF1ZXVlICE9IHRkLT5sYXN0X3RyYikKKwkJCQlpbmNfZGVxKHhoY2ksIGVwX3JpbmcsIGZhbHNlKTsKKwkJCWluY19kZXEoeGhjaSwgZXBfcmluZywgZmFsc2UpOworCQl9CisKK3RkX2NsZWFudXA6CisJCS8qIENsZWFuIHVwIHRoZSBlbmRwb2ludCdzIFREIGxpc3QgKi8KKwkJdXJiID0gdGQtPnVyYjsKKwkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKworCQkvKiBEbyBvbmUgbGFzdCBjaGVjayBvZiB0aGUgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aC4KKwkJICogSWYgdGhlIGhvc3QgY29udHJvbGxlciBzYWlkIHdlIHRyYW5zZmVycmVkIG1vcmUgZGF0YSB0aGFuCisJCSAqIHRoZSBidWZmZXIgbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGggd2lsbCBiZSBhIHZlcnkgYmlnCisJCSAqIG51bWJlciAoc2luY2UgaXQncyB1bnNpZ25lZCkuICBQbGF5IGl0IHNhZmUgYW5kIHNheSB3ZSBkaWRuJ3QKKwkJICogdHJhbnNmZXIgYW55dGhpbmcuCisJCSAqLworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7CisJCQl4aGNpX3dhcm4oeGhjaSwgIlVSQiB0cmFuc2ZlciBsZW5ndGggaXMgd3JvbmcsICIKKwkJCQkJInhIQyBpc3N1ZT8gcmVxLiBsZW4gPSAldSwgIgorCQkJCQkiYWN0LiBsZW4gPSAldVxuIiwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJKnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQllbHNlCisJCQkJKnN0YXR1cyA9IDA7CisJCX0KKwkJbGlzdF9kZWwoJnRkLT50ZF9saXN0KTsKKwkJLyogV2FzIHRoaXMgVEQgc2xhdGVkIHRvIGJlIGNhbmNlbGxlZCBidXQgY29tcGxldGVkIGFueXdheT8gKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpKQorCQkJbGlzdF9kZWwoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisKKwkJdXJiX3ByaXYtPnRkX2NudCsrOworCQkvKiBHaXZlYmFjayB0aGUgdXJiIHdoZW4gYWxsIHRoZSB0ZHMgYXJlIGNvbXBsZXRlZCAqLworCQlpZiAodXJiX3ByaXYtPnRkX2NudCA9PSB1cmJfcHJpdi0+bGVuZ3RoKQorCQkJcmV0ID0gMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvY2VzcyBjb250cm9sIHRkcywgdXBkYXRlIHVyYiBzdGF0dXMgYW5kIGFjdHVhbF9sZW5ndGguCisgKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19jdHJsX3RkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdGQgKnRkLAorCXVuaW9uIHhoY2lfdHJiICpldmVudF90cmIsIHN0cnVjdCB4aGNpX3RyYW5zZmVyX2V2ZW50ICpldmVudCwKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCwgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnhkZXY7CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwl1bnNpZ25lZCBpbnQgc2xvdF9pZDsKKwlpbnQgZXBfaW5kZXg7CisJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CisJdTMyIHRyYl9jb21wX2NvZGU7CisKKwlzbG90X2lkID0gVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKTsKKwl4ZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKKwllcF9pbmRleCA9IFRSQl9UT19FUF9JRChldmVudC0+ZmxhZ3MpIC0gMTsKKwllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CisJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKKwl0cmJfY29tcF9jb2RlID0gR0VUX0NPTVBfQ09ERShldmVudC0+dHJhbnNmZXJfbGVuKTsKKworCXhoY2lfZGVidWdfdHJiKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWUpOworCXN3aXRjaCAodHJiX2NvbXBfY29kZSkgeworCWNhc2UgQ09NUF9TVUNDRVNTOgorCQlpZiAoZXZlbnRfdHJiID09IGVwX3JpbmctPmRlcXVldWUpIHsKKwkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogU3VjY2VzcyBvbiBjdHJsIHNldHVwIFRSQiAiCisJCQkJCSJ3aXRob3V0IElPQyBzZXQ/P1xuIik7CisJCQkqc3RhdHVzID0gLUVTSFVURE9XTjsKKwkJfSBlbHNlIGlmIChldmVudF90cmIgIT0gdGQtPmxhc3RfdHJiKSB7CisJCQl4aGNpX3dhcm4oeGhjaSwgIldBUk46IFN1Y2Nlc3Mgb24gY3RybCBkYXRhIFRSQiAiCisJCQkJCSJ3aXRob3V0IElPQyBzZXQ/P1xuIik7CisJCQkqc3RhdHVzID0gLUVTSFVURE9XTjsKKwkJfSBlbHNlIHsKKwkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGNvbnRyb2wgdHJhbnNmZXIhXG4iKTsKKwkJCSpzdGF0dXMgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgQ09NUF9TSE9SVF9UWDoKKwkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBzaG9ydCB0cmFuc2ZlciBvbiBjb250cm9sIGVwXG4iKTsKKwkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKKwkJCSpzdGF0dXMgPSAtRVJFTU9URUlPOworCQllbHNlCisJCQkqc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKCF4aGNpX3JlcXVpcmVzX21hbnVhbF9oYWx0X2NsZWFudXAoeGhjaSwKKwkJCQkJZXBfY3R4LCB0cmJfY29tcF9jb2RlKSkKKwkJCWJyZWFrOworCQl4aGNpX2RiZyh4aGNpLCAiVFJCIGVycm9yIGNvZGUgJXUsICIKKwkJCQkiaGFsdGVkIGVuZHBvaW50IGluZGV4ID0gJXVcbiIsCisJCQkJdHJiX2NvbXBfY29kZSwgZXBfaW5kZXgpOworCQkvKiBlbHNlIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ09NUF9TVEFMTDoKKwkJLyogRGlkIHdlIHRyYW5zZmVyIHBhcnQgb2YgdGhlIGRhdGEgKG1pZGRsZSkgcGhhc2U/ICovCisJCWlmIChldmVudF90cmIgIT0gZXBfcmluZy0+ZGVxdWV1ZSAmJgorCQkJCWV2ZW50X3RyYiAhPSB0ZC0+bGFzdF90cmIpCisJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KKwkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoCisJCQkJLSBUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCQllbHNlCisJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKworCQl4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHhoY2ksCisJCQlzbG90X2lkLCBlcF9pbmRleCwgMCwgdGQsIGV2ZW50X3RyYik7CisJCXJldHVybiBmaW5pc2hfdGQoeGhjaSwgdGQsIGV2ZW50X3RyYiwgZXZlbnQsIGVwLCBzdGF0dXMsIHRydWUpOworCX0KKwkvKgorCSAqIERpZCB3ZSB0cmFuc2ZlciBhbnkgZGF0YSwgZGVzcGl0ZSB0aGUgZXJyb3JzIHRoYXQgbWlnaHQgaGF2ZQorCSAqIGhhcHBlbmVkPyAgSS5lLiBkaWQgd2UgZ2V0IHBhc3QgdGhlIHNldHVwIHN0YWdlPworCSAqLworCWlmIChldmVudF90cmIgIT0gZXBfcmluZy0+ZGVxdWV1ZSkgeworCQkvKiBUaGUgZXZlbnQgd2FzIGZvciB0aGUgc3RhdHVzIHN0YWdlICovCisJCWlmIChldmVudF90cmIgPT0gdGQtPmxhc3RfdHJiKSB7CisJCQlpZiAodGQtPnVyYi0+YWN0dWFsX2xlbmd0aCAhPSAwKSB7CisJCQkJLyogRG9uJ3Qgb3ZlcndyaXRlIGEgcHJldmlvdXNseSBzZXQgZXJyb3IgY29kZQorCQkJCSAqLworCQkJCWlmICgoKnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MgfHwgKnN0YXR1cyA9PSAwKSAmJgorCQkJCQkJKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzCisJCQkJCQkgJiBVUkJfU0hPUlRfTk9UX09LKSkKKwkJCQkJLyogRGlkIHdlIGFscmVhZHkgc2VlIGEgc2hvcnQgZGF0YQorCQkJCQkgKiBzdGFnZT8gKi8KKwkJCQkJKnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQl9IGVsc2UgeworCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQorCQkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkJfQorCQl9IGVsc2UgeworCQkvKiBNYXliZSB0aGUgZXZlbnQgd2FzIGZvciB0aGUgZGF0YSBzdGFnZT8gKi8KKwkJCWlmICh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RPUF9JTlZBTCkgeworCQkJCS8qIFdlIGRpZG4ndCBzdG9wIG9uIGEgbGluayBUUkIgaW4gdGhlIG1pZGRsZSAqLworCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQorCQkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKwkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKKwkJCQl4aGNpX2RiZyh4aGNpLCAiV2FpdGluZyBmb3Igc3RhdHVzICIKKwkJCQkJCSJzdGFnZSBldmVudFxuIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCBmYWxzZSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGlzb2Nocm9ub3VzIHRkcywgdXBkYXRlIHVyYiBwYWNrZXQgc3RhdHVzIGFuZCBhY3R1YWxfbGVuZ3RoLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfaXNvY190ZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3RkICp0ZCwKKwl1bmlvbiB4aGNpX3RyYiAqZXZlbnRfdHJiLCBzdHJ1Y3QgeGhjaV90cmFuc2Zlcl9ldmVudCAqZXZlbnQsCisJc3RydWN0IHhoY2lfdmlydF9lcCAqZXAsIGludCAqc3RhdHVzKQoreworCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKKwlpbnQgaWR4OworCWludCBsZW4gPSAwOworCWludCBza2lwX3RkID0gMDsKKwl1bmlvbiB4aGNpX3RyYiAqY3VyX3RyYjsKKwlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpjdXJfc2VnOworCXUzMiB0cmJfY29tcF9jb2RlOworCisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCXVyYl9wcml2ID0gdGQtPnVyYi0+aGNwcml2OworCWlkeCA9IHVyYl9wcml2LT50ZF9jbnQ7CisKKwlpZiAoZXAtPnNraXApIHsKKwkJLyogVGhlIHRyYW5zZmVyIGlzIHBhcnRseSBkb25lICovCisJCSpzdGF0dXMgPSAtRVhERVY7CisJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLUVYREVWOworCX0gZWxzZSB7CisJCS8qIGhhbmRsZSBjb21wbGV0aW9uIGNvZGUgKi8KKwkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CisJCWNhc2UgQ09NUF9TVUNDRVNTOgorCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPSAwOworCQkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgaXNvYyB0cmFuc2ZlciFcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUF9TSE9SVF9UWDoKKwkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5zdGF0dXMgPQorCQkJCQkgLUVSRU1PVEVJTzsKKwkJCWVsc2UKKwkJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBDT01QX0JXX09WRVI6CisJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FQ09NTTsKKwkJCXNraXBfdGQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgQ09NUF9CVUZGX09WRVI6CisJCWNhc2UgQ09NUF9CQUJCTEU6CisJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CisJCQlza2lwX3RkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIENPTVBfU1RBTEw6CisJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLnN0YXR1cyA9IC1FUFJPVE87CisJCQlza2lwX3RkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIENPTVBfU1RPUDoKKwkJY2FzZSBDT01QX1NUT1BfSU5WQUw6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uc3RhdHVzID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGNhbGMgYWN0dWFsIGxlbmd0aCAqLworCWlmIChlcC0+c2tpcCkgeworCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmFjdHVhbF9sZW5ndGggPSAwOworCQlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCB0cnVlKTsKKwl9CisKKwlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NVQ0NFU1MgfHwgc2tpcF90ZCA9PSAxKSB7CisJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW2lkeF0uYWN0dWFsX2xlbmd0aCA9CisJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmxlbmd0aDsKKwkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQorCQkJdGQtPnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaWR4XS5sZW5ndGg7CisJfSBlbHNlIHsKKwkJZm9yIChjdXJfdHJiID0gZXBfcmluZy0+ZGVxdWV1ZSwKKwkJICAgICBjdXJfc2VnID0gZXBfcmluZy0+ZGVxX3NlZzsgY3VyX3RyYiAhPSBldmVudF90cmI7CisJCSAgICAgbmV4dF90cmIoeGhjaSwgZXBfcmluZywgJmN1cl9zZWcsICZjdXJfdHJiKSkgeworCQkJaWYgKChjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzNdICYKKwkJCSBUUkJfVFlQRV9CSVRNQVNLKSAhPSBUUkJfVFlQRShUUkJfVFJfTk9PUCkgJiYKKwkJCSAgICAoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCisJCQkgVFJCX1RZUEVfQklUTUFTSykgIT0gVFJCX1RZUEUoVFJCX0xJTkspKQorCQkJCWxlbiArPQorCQkJCSAgICBUUkJfTEVOKGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pOworCQl9CisJCWxlbiArPSBUUkJfTEVOKGN1cl90cmItPmdlbmVyaWMuZmllbGRbMl0pIC0KKwkJCVRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7CisKKwkJaWYgKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVE9QX0lOVkFMKSB7CisJCQl0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdLmFjdHVhbF9sZW5ndGggPSBsZW47CisJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKKwkJfQorCX0KKworCWlmICgoaWR4ID09IHVyYl9wcml2LT5sZW5ndGggLSAxKSAmJiAqc3RhdHVzID09IC1FSU5QUk9HUkVTUykKKwkJKnN0YXR1cyA9IDA7CisKKwlyZXR1cm4gZmluaXNoX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LCBlcCwgc3RhdHVzLCBmYWxzZSk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGJ1bGsgYW5kIGludGVycnVwdCB0ZHMsIHVwZGF0ZSB1cmIgc3RhdHVzIGFuZCBhY3R1YWxfbGVuZ3RoLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfYnVsa19pbnRyX3RkKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfdGQgKnRkLAorCXVuaW9uIHhoY2lfdHJiICpldmVudF90cmIsIHN0cnVjdCB4aGNpX3RyYW5zZmVyX2V2ZW50ICpldmVudCwKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCwgaW50ICpzdGF0dXMpCit7CisJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKKwl1bmlvbiB4aGNpX3RyYiAqY3VyX3RyYjsKKwlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpjdXJfc2VnOworCXUzMiB0cmJfY29tcF9jb2RlOworCisJZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCXRyYl9jb21wX2NvZGUgPSBHRVRfQ09NUF9DT0RFKGV2ZW50LT50cmFuc2Zlcl9sZW4pOworCisJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CisJY2FzZSBDT01QX1NVQ0NFU1M6CisJCS8qIERvdWJsZSBjaGVjayB0aGF0IHRoZSBIVyB0cmFuc2ZlcnJlZCBldmVyeXRoaW5nLiAqLworCQlpZiAoZXZlbnRfdHJiICE9IHRkLT5sYXN0X3RyYikgeworCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOIFN1Y2Nlc3NmdWwgY29tcGxldGlvbiAiCisJCQkJCSJvbiBzaG9ydCBUWFxuIik7CisJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQorCQkJCSpzdGF0dXMgPSAtRVJFTU9URUlPOworCQkJZWxzZQorCQkJCSpzdGF0dXMgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJnRkLT51cmItPmVwLT5kZXNjKSkKKwkJCQl4aGNpX2RiZyh4aGNpLCAiU3VjY2Vzc2Z1bCBidWxrICIKKwkJCQkJCSJ0cmFuc2ZlciFcbiIpOworCQkJZWxzZQorCQkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGludGVycnVwdCAiCisJCQkJCQkidHJhbnNmZXIhXG4iKTsKKwkJCSpzdGF0dXMgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgQ09NUF9TSE9SVF9UWDoKKwkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKKwkJCSpzdGF0dXMgPSAtRVJFTU9URUlPOworCQllbHNlCisJCQkqc3RhdHVzID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogT3RoZXJzIGFscmVhZHkgaGFuZGxlZCBhYm92ZSAqLworCQlicmVhazsKKwl9CisJZGV2X2RiZygmdGQtPnVyYi0+ZGV2LT5kZXYsCisJCQkiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCisJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKKwkJCXRkLT51cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKSk7CisJLyogRmFzdCBwYXRoIC0gd2FzIHRoaXMgdGhlIGxhc3QgVFJCIGluIHRoZSBURCBmb3IgdGhpcyBVUkI/ICovCisJaWYgKGV2ZW50X3RyYiA9PSB0ZC0+bGFzdF90cmIpIHsKKwkJaWYgKFRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbikgIT0gMCkgeworCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9CisJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtCisJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKKwkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwKKwkJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCXhoY2lfd2Fybih4aGNpLCAiSEMgZ2F2ZSBiYWQgbGVuZ3RoICIKKwkJCQkJCSJvZiAlZCBieXRlcyBsZWZ0XG4iLAorCQkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKSk7CisJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKKwkJCQkJKnN0YXR1cyA9IC1FUkVNT1RFSU87CisJCQkJZWxzZQorCQkJCQkqc3RhdHVzID0gMDsKKwkJCX0KKwkJCS8qIERvbid0IG92ZXJ3cml0ZSBhIHByZXZpb3VzbHkgc2V0IGVycm9yIGNvZGUgKi8KKwkJCWlmICgqc3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkJCSpzdGF0dXMgPSAtRVJFTU9URUlPOworCQkJCWVsc2UKKwkJCQkJKnN0YXR1cyA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KKwkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkJLyogSWdub3JlIGEgc2hvcnQgcGFja2V0IGNvbXBsZXRpb24gaWYgdGhlCisJCQkgKiB1bnRyYW5zZmVycmVkIGxlbmd0aCB3YXMgemVyby4KKwkJCSAqLworCQkJaWYgKCpzdGF0dXMgPT0gLUVSRU1PVEVJTykKKwkJCQkqc3RhdHVzID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFNsb3cgcGF0aCAtIHdhbGsgdGhlIGxpc3QsIHN0YXJ0aW5nIGZyb20gdGhlIGRlcXVldWUKKwkJICogcG9pbnRlciwgdG8gZ2V0IHRoZSBhY3R1YWwgbGVuZ3RoIHRyYW5zZmVycmVkLgorCQkgKi8KKwkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJCWZvciAoY3VyX3RyYiA9IGVwX3JpbmctPmRlcXVldWUsIGN1cl9zZWcgPSBlcF9yaW5nLT5kZXFfc2VnOworCQkJCWN1cl90cmIgIT0gZXZlbnRfdHJiOworCQkJCW5leHRfdHJiKHhoY2ksIGVwX3JpbmcsICZjdXJfc2VnLCAmY3VyX3RyYikpIHsKKwkJCWlmICgoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCisJCQkgVFJCX1RZUEVfQklUTUFTSykgIT0gVFJCX1RZUEUoVFJCX1RSX05PT1ApICYmCisJCQkgICAgKGN1cl90cmItPmdlbmVyaWMuZmllbGRbM10gJgorCQkJIFRSQl9UWVBFX0JJVE1BU0spICE9IFRSQl9UWVBFKFRSQl9MSU5LKSkKKwkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9CisJCQkJCVRSQl9MRU4oY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsyXSk7CisJCX0KKwkJLyogSWYgdGhlIHJpbmcgZGlkbid0IHN0b3Agb24gYSBMaW5rIG9yIE5vLW9wIFRSQiwgYWRkCisJCSAqIGluIHRoZSBhY3R1YWwgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSB0aGUgTm9ybWFsIFRSQgorCQkgKi8KKwkJaWYgKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVE9QX0lOVkFMKQorCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQorCQkJCVRSQl9MRU4oY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsyXSkgLQorCQkJCVRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJfQorCisJcmV0dXJuIGZpbmlzaF90ZCh4aGNpLCB0ZCwgZXZlbnRfdHJiLCBldmVudCwgZXAsIHN0YXR1cywgZmFsc2UpOworfQorCisvKgogICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvbmRpdGlvbiwgaXQgbWVhbnMgaXQgZ290IGEgVHJhbnNmZXIKICAqIGV2ZW50IHdpdGggYSBjb3JydXB0ZWQgU2xvdCBJRCwgRW5kcG9pbnQgSUQsIG9yIFRSQiBETUEgYWRkcmVzcy4KICAqIEF0IHRoaXMgcG9pbnQsIHRoZSBob3N0IGNvbnRyb2xsZXIgaXMgcHJvYmFibHkgaG9zZWQgYW5kIHNob3VsZCBiZSByZXNldC4KQEAgLTEyNzYsMTAgKzE3MTUsMTEgQEAKIAl1bmlvbiB4aGNpX3RyYiAqZXZlbnRfdHJiOwogCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CiAJaW50IHN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2OwogCXN0cnVjdCB4aGNpX2VwX2N0eCAqZXBfY3R4OwogCXUzMiB0cmJfY29tcF9jb2RlOworCWludCByZXQgPSAwOwogCi0JeGhjaV9kYmcoeGhjaSwgIkluICVzXG4iLCBfX2Z1bmNfXyk7CiAJc2xvdF9pZCA9IFRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyk7CiAJeGRldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CiAJaWYgKCF4ZGV2KSB7CkBAIC0xMjkzLDUxICsxNzMzLDE2IEBACiAJZXAgPSAmeGRldi0+ZXBzW2VwX2luZGV4XTsKIAllcF9yaW5nID0geGhjaV9kbWFfdG9fdHJhbnNmZXJfcmluZyhlcCwgZXZlbnQtPmJ1ZmZlcik7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKLQlpZiAoIWVwX3JpbmcgfHwgKGVwX2N0eC0+ZXBfaW5mbyAmIEVQX1NUQVRFX01BU0spID09IEVQX1NUQVRFX0RJU0FCTEVEKSB7CisJaWYgKCFlcF9yaW5nIHx8CisJCShlcF9jdHgtPmVwX2luZm8gJiBFUF9TVEFURV9NQVNLKSA9PSBFUF9TVEFURV9ESVNBQkxFRCkgewogCQl4aGNpX2Vycih4aGNpLCAiRVJST1IgVHJhbnNmZXIgZXZlbnQgZm9yIGRpc2FibGVkIGVuZHBvaW50ICIKIAkJCQkib3IgaW5jb3JyZWN0IHN0cmVhbSByaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJZXZlbnRfZG1hID0gZXZlbnQtPmJ1ZmZlcjsKLQkvKiBUaGlzIFRSQiBzaG91bGQgYmUgaW4gdGhlIFREIGF0IHRoZSBoZWFkIG9mIHRoaXMgcmluZydzIFREIGxpc3QgKi8KLQl4aGNpX2RiZyh4aGNpLCAiJXMgLSBjaGVja2luZyBmb3IgbGlzdCBlbXB0eVxuIiwgX19mdW5jX18pOwotCWlmIChsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkgewotCQl4aGNpX3dhcm4oeGhjaSwgIldBUk4gRXZlbnQgVFJCIGZvciBzbG90ICVkIGVwICVkIHdpdGggbm8gVERzIHF1ZXVlZD9cbiIsCi0JCQkJVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKSwgZXBfaW5kZXgpOwotCQl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgVFJCIHdpdGggVFJCIHR5cGUgSUQgJXVcbiIsCi0JCQkJKHVuc2lnbmVkIGludCkgKGV2ZW50LT5mbGFncyAmIFRSQl9UWVBFX0JJVE1BU0spPj4xMCk7Ci0JCXhoY2lfcHJpbnRfdHJiX29mZnNldHMoeGhjaSwgKHVuaW9uIHhoY2lfdHJiICopIGV2ZW50KTsKLQkJdXJiID0gTlVMTDsKLQkJZ290byBjbGVhbnVwOwotCX0KLQl4aGNpX2RiZyh4aGNpLCAiJXMgLSBnZXR0aW5nIGxpc3QgZW50cnlcbiIsIF9fZnVuY19fKTsKLQl0ZCA9IGxpc3RfZW50cnkoZXBfcmluZy0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgeGhjaV90ZCwgdGRfbGlzdCk7Ci0KLQkvKiBJcyB0aGlzIGEgVFJCIGluIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIFREPyAqLwotCXhoY2lfZGJnKHhoY2ksICIlcyAtIGxvb2tpbmcgZm9yIFREXG4iLCBfX2Z1bmNfXyk7Ci0JZXZlbnRfc2VnID0gdHJiX2luX3RkKGVwX3JpbmctPmRlcV9zZWcsIGVwX3JpbmctPmRlcXVldWUsCi0JCQl0ZC0+bGFzdF90cmIsIGV2ZW50X2RtYSk7Ci0JeGhjaV9kYmcoeGhjaSwgIiVzIC0gZm91bmQgZXZlbnRfc2VnID0gJXBcbiIsIF9fZnVuY19fLCBldmVudF9zZWcpOwotCWlmICghZXZlbnRfc2VnKSB7Ci0JCS8qIEhDIGlzIGJ1c3RlZCwgZ2l2ZSB1cCEgKi8KLQkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SIFRyYW5zZmVyIGV2ZW50IFRSQiBETUEgcHRyIG5vdCBwYXJ0IG9mIGN1cnJlbnQgVERcbiIpOwotCQlyZXR1cm4gLUVTSFVURE9XTjsKLQl9Ci0JZXZlbnRfdHJiID0gJmV2ZW50X3NlZy0+dHJic1soZXZlbnRfZG1hIC0gZXZlbnRfc2VnLT5kbWEpIC8gc2l6ZW9mKCpldmVudF90cmIpXTsKLQl4aGNpX2RiZyh4aGNpLCAiRXZlbnQgVFJCIHdpdGggVFJCIHR5cGUgSUQgJXVcbiIsCi0JCQkodW5zaWduZWQgaW50KSAoZXZlbnQtPmZsYWdzICYgVFJCX1RZUEVfQklUTUFTSyk+PjEwKTsKLQl4aGNpX2RiZyh4aGNpLCAiT2Zmc2V0IDB4MDAgKGJ1ZmZlciBsbykgPSAweCV4XG4iLAotCQkJbG93ZXJfMzJfYml0cyhldmVudC0+YnVmZmVyKSk7Ci0JeGhjaV9kYmcoeGhjaSwgIk9mZnNldCAweDA0IChidWZmZXIgaGkpID0gMHgleFxuIiwKLQkJCXVwcGVyXzMyX2JpdHMoZXZlbnQtPmJ1ZmZlcikpOwotCXhoY2lfZGJnKHhoY2ksICJPZmZzZXQgMHgwOCAodHJhbnNmZXIgbGVuZ3RoKSA9IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KSBldmVudC0+dHJhbnNmZXJfbGVuKTsKLQl4aGNpX2RiZyh4aGNpLCAiT2Zmc2V0IDB4MEMgKGZsYWdzKSA9IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KSBldmVudC0+ZmxhZ3MpOwotCi0JLyogTG9vayBmb3IgY29tbW9uIGVycm9yIGNhc2VzICovCiAJdHJiX2NvbXBfY29kZSA9IEdFVF9DT01QX0NPREUoZXZlbnQtPnRyYW5zZmVyX2xlbik7CisJLyogTG9vayBmb3IgY29tbW9uIGVycm9yIGNhc2VzICovCiAJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7CiAJLyogU2tpcCBjb2RlcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZyBkZXBlbmRpbmcgb24KIAkgKiB0cmFuc2ZlciB0eXBlCkBAIC0xMzczLDI3OCArMTc3OCwxNTYgQEAKIAkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBIQyBjb3VsZG4ndCBhY2Nlc3MgbWVtIGZhc3QgZW5vdWdoXG4iKTsKIAkJc3RhdHVzID0gLUVOT1NSOwogCQlicmVhazsKKwljYXNlIENPTVBfQldfT1ZFUjoKKwkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBiYW5kd2lkdGggb3ZlcnJ1biBldmVudCBvbiBlbmRwb2ludFxuIik7CisJCWJyZWFrOworCWNhc2UgQ09NUF9CVUZGX09WRVI6CisJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogYnVmZmVyIG92ZXJydW4gZXZlbnQgb24gZW5kcG9pbnRcbiIpOworCQlicmVhazsKKwljYXNlIENPTVBfVU5ERVJSVU46CisJCS8qCisJCSAqIFdoZW4gdGhlIElzb2NoIHJpbmcgaXMgZW1wdHksIHRoZSB4SEMgd2lsbCBnZW5lcmF0ZQorCQkgKiBhIFJpbmcgT3ZlcnJ1biBFdmVudCBmb3IgSU4gSXNvY2ggZW5kcG9pbnQgb3IgUmluZworCQkgKiBVbmRlcnJ1biBFdmVudCBmb3IgT1VUIElzb2NoIGVuZHBvaW50LgorCQkgKi8KKwkJeGhjaV9kYmcoeGhjaSwgInVuZGVycnVuIGV2ZW50IG9uIGVuZHBvaW50XG4iKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkKKwkJCXhoY2lfZGJnKHhoY2ksICJVbmRlcnJ1biBFdmVudCBmb3Igc2xvdCAlZCBlcCAlZCAiCisJCQkJCSJzdGlsbCB3aXRoIFREcyBxdWV1ZWQ/XG4iLAorCQkJCVRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyksIGVwX2luZGV4KTsKKwkJZ290byBjbGVhbnVwOworCWNhc2UgQ09NUF9PVkVSUlVOOgorCQl4aGNpX2RiZyh4aGNpLCAib3ZlcnJ1biBldmVudCBvbiBlbmRwb2ludFxuIik7CisJCWlmICghbGlzdF9lbXB0eSgmZXBfcmluZy0+dGRfbGlzdCkpCisJCQl4aGNpX2RiZyh4aGNpLCAiT3ZlcnJ1biBFdmVudCBmb3Igc2xvdCAlZCBlcCAlZCAiCisJCQkJCSJzdGlsbCB3aXRoIFREcyBxdWV1ZWQ/XG4iLAorCQkJCVRSQl9UT19TTE9UX0lEKGV2ZW50LT5mbGFncyksIGVwX2luZGV4KTsKKwkJZ290byBjbGVhbnVwOworCWNhc2UgQ09NUF9NSVNTRURfSU5UOgorCQkvKgorCQkgKiBXaGVuIGVuY291bnRlciBtaXNzZWQgc2VydmljZSBlcnJvciwgb25lIG9yIG1vcmUgaXNvYyB0ZHMKKwkJICogbWF5IGJlIG1pc3NlZCBieSB4SEMuCisJCSAqIFNldCBza2lwIGZsYWcgb2YgdGhlIGVwX3Jpbmc7IENvbXBsZXRlIHRoZSBtaXNzZWQgdGRzIGFzCisJCSAqIHNob3J0IHRyYW5zZmVyIHdoZW4gcHJvY2VzcyB0aGUgZXBfcmluZyBuZXh0IHRpbWUuCisJCSAqLworCQllcC0+c2tpcCA9IHRydWU7CisJCXhoY2lfZGJnKHhoY2ksICJNaXNzIHNlcnZpY2UgaW50ZXJ2YWwgZXJyb3IsIHNldCBza2lwIGZsYWdcbiIpOworCQlnb3RvIGNsZWFudXA7CiAJZGVmYXVsdDoKIAkJaWYgKHhoY2lfaXNfdmVuZG9yX2luZm9fY29kZSh4aGNpLCB0cmJfY29tcF9jb2RlKSkgewogCQkJc3RhdHVzID0gMDsKIAkJCWJyZWFrOwogCQl9Ci0JCXhoY2lfd2Fybih4aGNpLCAiRVJST1IgVW5rbm93biBldmVudCBjb25kaXRpb24sIEhDIHByb2JhYmx5IGJ1c3RlZFxuIik7Ci0JCXVyYiA9IE5VTEw7CisJCXhoY2lfd2Fybih4aGNpLCAiRVJST1IgVW5rbm93biBldmVudCBjb25kaXRpb24sIEhDIHByb2JhYmx5ICIKKwkJCQkiYnVzdGVkXG4iKTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQkvKiBOb3cgdXBkYXRlIHRoZSB1cmIncyBhY3R1YWxfbGVuZ3RoIGFuZCBnaXZlIGJhY2sgdG8gdGhlIGNvcmUgKi8KLQkvKiBXYXMgdGhpcyBhIGNvbnRyb2wgdHJhbnNmZXI/ICovCi0JaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnRkLT51cmItPmVwLT5kZXNjKSkgewotCQl4aGNpX2RlYnVnX3RyYih4aGNpLCB4aGNpLT5ldmVudF9yaW5nLT5kZXF1ZXVlKTsKLQkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7Ci0JCWNhc2UgQ09NUF9TVUNDRVNTOgotCQkJaWYgKGV2ZW50X3RyYiA9PSBlcF9yaW5nLT5kZXF1ZXVlKSB7Ci0JCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBTdWNjZXNzIG9uIGN0cmwgc2V0dXAgVFJCIHdpdGhvdXQgSU9DIHNldD8/XG4iKTsKLQkJCQlzdGF0dXMgPSAtRVNIVVRET1dOOwotCQkJfSBlbHNlIGlmIChldmVudF90cmIgIT0gdGQtPmxhc3RfdHJiKSB7Ci0JCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOOiBTdWNjZXNzIG9uIGN0cmwgZGF0YSBUUkIgd2l0aG91dCBJT0Mgc2V0Pz9cbiIpOwotCQkJCXN0YXR1cyA9IC1FU0hVVERPV047Ci0JCQl9IGVsc2UgewotCQkJCXhoY2lfZGJnKHhoY2ksICJTdWNjZXNzZnVsIGNvbnRyb2wgdHJhbnNmZXIhXG4iKTsKLQkJCQlzdGF0dXMgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ09NUF9TSE9SVF9UWDoKLQkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogc2hvcnQgdHJhbnNmZXIgb24gY29udHJvbCBlcFxuIik7Ci0JCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQotCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87Ci0JCQllbHNlCi0JCQkJc3RhdHVzID0gMDsKLQkJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQlpZiAoIXhoY2lfcmVxdWlyZXNfbWFudWFsX2hhbHRfY2xlYW51cCh4aGNpLAotCQkJCQkJZXBfY3R4LCB0cmJfY29tcF9jb2RlKSkKLQkJCQlicmVhazsKLQkJCXhoY2lfZGJnKHhoY2ksICJUUkIgZXJyb3IgY29kZSAldSwgIgotCQkJCQkiaGFsdGVkIGVuZHBvaW50IGluZGV4ID0gJXVcbiIsCi0JCQkJCXRyYl9jb21wX2NvZGUsIGVwX2luZGV4KTsKLQkJCS8qIGVsc2UgZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgQ09NUF9TVEFMTDoKLQkJCS8qIERpZCB3ZSB0cmFuc2ZlciBwYXJ0IG9mIHRoZSBkYXRhIChtaWRkbGUpIHBoYXNlPyAqLwotCQkJaWYgKGV2ZW50X3RyYiAhPSBlcF9yaW5nLT5kZXF1ZXVlICYmCi0JCQkJCWV2ZW50X3RyYiAhPSB0ZC0+bGFzdF90cmIpCi0JCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9Ci0JCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKLQkJCQkJLSBUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOwotCQkJZWxzZQotCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPSAwOwotCi0JCQl4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHhoY2ksCi0JCQkJCXNsb3RfaWQsIGVwX2luZGV4LCAwLCB0ZCwgZXZlbnRfdHJiKTsKLQkJCWdvdG8gdGRfY2xlYW51cDsKLQkJfQotCQkvKgotCQkgKiBEaWQgd2UgdHJhbnNmZXIgYW55IGRhdGEsIGRlc3BpdGUgdGhlIGVycm9ycyB0aGF0IG1pZ2h0IGhhdmUKLQkJICogaGFwcGVuZWQ/ICBJLmUuIGRpZCB3ZSBnZXQgcGFzdCB0aGUgc2V0dXAgc3RhZ2U/CisJZG8geworCQkvKiBUaGlzIFRSQiBzaG91bGQgYmUgaW4gdGhlIFREIGF0IHRoZSBoZWFkIG9mIHRoaXMgcmluZydzCisJCSAqIFREIGxpc3QuCiAJCSAqLwotCQlpZiAoZXZlbnRfdHJiICE9IGVwX3JpbmctPmRlcXVldWUpIHsKLQkJCS8qIFRoZSBldmVudCB3YXMgZm9yIHRoZSBzdGF0dXMgc3RhZ2UgKi8KLQkJCWlmIChldmVudF90cmIgPT0gdGQtPmxhc3RfdHJiKSB7Ci0JCQkJaWYgKHRkLT51cmItPmFjdHVhbF9sZW5ndGggIT0gMCkgewotCQkJCQkvKiBEb24ndCBvdmVyd3JpdGUgYSBwcmV2aW91c2x5IHNldCBlcnJvciBjb2RlICovCi0JCQkJCWlmICgoc3RhdHVzID09IC1FSU5QUk9HUkVTUyB8fAotCQkJCQkJCQlzdGF0dXMgPT0gMCkgJiYKLQkJCQkJCQkodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MKLQkJCQkJCQkgJiBVUkJfU0hPUlRfTk9UX09LKSkKLQkJCQkJCS8qIERpZCB3ZSBhbHJlYWR5IHNlZSBhIHNob3J0IGRhdGEgc3RhZ2U/ICovCi0JCQkJCQlzdGF0dXMgPSAtRVJFTU9URUlPOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQotCQkJCQkJdGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJLyogTWF5YmUgdGhlIGV2ZW50IHdhcyBmb3IgdGhlIGRhdGEgc3RhZ2U/ICovCi0JCQkJaWYgKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVE9QX0lOVkFMKSB7Ci0JCQkJCS8qIFdlIGRpZG4ndCBzdG9wIG9uIGEgbGluayBUUkIgaW4gdGhlIG1pZGRsZSAqLwotCQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0KLQkJCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQotCQkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKLQkJCQkJeGhjaV9kYmcoeGhjaSwgIldhaXRpbmcgZm9yIHN0YXR1cyBzdGFnZSBldmVudFxuIik7Ci0JCQkJCXVyYiA9IE5VTEw7Ci0JCQkJCWdvdG8gY2xlYW51cDsKLQkJCQl9CisJCWlmIChsaXN0X2VtcHR5KCZlcF9yaW5nLT50ZF9saXN0KSkgeworCQkJeGhjaV93YXJuKHhoY2ksICJXQVJOIEV2ZW50IFRSQiBmb3Igc2xvdCAlZCBlcCAlZCAiCisJCQkJCSJ3aXRoIG5vIFREcyBxdWV1ZWQ/XG4iLAorCQkJCSAgVFJCX1RPX1NMT1RfSUQoZXZlbnQtPmZsYWdzKSwgZXBfaW5kZXgpOworCQkJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IFRSQiB3aXRoIFRSQiB0eXBlIElEICV1XG4iLAorCQkJICAodW5zaWduZWQgaW50KSAoZXZlbnQtPmZsYWdzICYgVFJCX1RZUEVfQklUTUFTSyk+PjEwKTsKKwkJCXhoY2lfcHJpbnRfdHJiX29mZnNldHMoeGhjaSwgKHVuaW9uIHhoY2lfdHJiICopIGV2ZW50KTsKKwkJCWlmIChlcC0+c2tpcCkgeworCQkJCWVwLT5za2lwID0gZmFsc2U7CisJCQkJeGhjaV9kYmcoeGhjaSwgInRkX2xpc3QgaXMgZW1wdHkgd2hpbGUgc2tpcCAiCisJCQkJCQkiZmxhZyBzZXQuIENsZWFyIHNraXAgZmxhZy5cbiIpOwogCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoICh0cmJfY29tcF9jb2RlKSB7Ci0JCWNhc2UgQ09NUF9TVUNDRVNTOgotCQkJLyogRG91YmxlIGNoZWNrIHRoYXQgdGhlIEhXIHRyYW5zZmVycmVkIGV2ZXJ5dGhpbmcuICovCi0JCQlpZiAoZXZlbnRfdHJiICE9IHRkLT5sYXN0X3RyYikgewotCQkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBTdWNjZXNzZnVsIGNvbXBsZXRpb24gIgotCQkJCQkJIm9uIHNob3J0IFRYXG4iKTsKLQkJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQotCQkJCQlzdGF0dXMgPSAtRVJFTU9URUlPOwotCQkJCWVsc2UKLQkJCQkJc3RhdHVzID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoJnRkLT51cmItPmVwLT5kZXNjKSkKLQkJCQkJeGhjaV9kYmcoeGhjaSwgIlN1Y2Nlc3NmdWwgYnVsayAiCi0JCQkJCQkJInRyYW5zZmVyIVxuIik7Ci0JCQkJZWxzZQotCQkJCQl4aGNpX2RiZyh4aGNpLCAiU3VjY2Vzc2Z1bCBpbnRlcnJ1cHQgIgotCQkJCQkJCSJ0cmFuc2ZlciFcbiIpOwotCQkJCXN0YXR1cyA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QX1NIT1JUX1RYOgotCQkJaWYgKHRkLT51cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX1NIT1JUX05PVF9PSykKLQkJCQlzdGF0dXMgPSAtRVJFTU9URUlPOwotCQkJZWxzZQotCQkJCXN0YXR1cyA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qIE90aGVycyBhbHJlYWR5IGhhbmRsZWQgYWJvdmUgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWRldl9kYmcoJnRkLT51cmItPmRldi0+ZGV2LAotCQkJCSJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKLQkJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKLQkJCQl0ZC0+dXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAotCQkJCXRkLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKSk7Ci0JCS8qIEZhc3QgcGF0aCAtIHdhcyB0aGlzIHRoZSBsYXN0IFRSQiBpbiB0aGUgVEQgZm9yIHRoaXMgVVJCPyAqLwotCQlpZiAoZXZlbnRfdHJiID09IHRkLT5sYXN0X3RyYikgewotCQkJaWYgKFRSQl9MRU4oZXZlbnQtPnRyYW5zZmVyX2xlbikgIT0gMCkgewotCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPQotCQkJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KLQkJCQkJVFJCX0xFTihldmVudC0+dHJhbnNmZXJfbGVuKTsKLQkJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8Ci0JCQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCQkJCXhoY2lfd2Fybih4aGNpLCAiSEMgZ2F2ZSBiYWQgbGVuZ3RoICIKLQkJCQkJCQkib2YgJWQgYnl0ZXMgbGVmdFxuIiwKLQkJCQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pKTsKLQkJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JCQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmCi0JCQkJCQkJVVJCX1NIT1JUX05PVF9PSykKLQkJCQkJCXN0YXR1cyA9IC1FUkVNT1RFSU87Ci0JCQkJCWVsc2UKLQkJCQkJCXN0YXR1cyA9IDA7Ci0JCQkJfQotCQkJCS8qIERvbid0IG92ZXJ3cml0ZSBhIHByZXZpb3VzbHkgc2V0IGVycm9yIGNvZGUgKi8KLQkJCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQkJCQlpZiAodGQtPnVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKQotCQkJCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKLQkJCQkJZWxzZQotCQkJCQkJc3RhdHVzID0gMDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXRkLT51cmItPmFjdHVhbF9sZW5ndGggPSB0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwotCQkJCS8qIElnbm9yZSBhIHNob3J0IHBhY2tldCBjb21wbGV0aW9uIGlmIHRoZQotCQkJCSAqIHVudHJhbnNmZXJyZWQgbGVuZ3RoIHdhcyB6ZXJvLgotCQkJCSAqLwotCQkJCWlmIChzdGF0dXMgPT0gLUVSRU1PVEVJTykKLQkJCQkJc3RhdHVzID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFNsb3cgcGF0aCAtIHdhbGsgdGhlIGxpc3QsIHN0YXJ0aW5nIGZyb20gdGhlIGRlcXVldWUKLQkJCSAqIHBvaW50ZXIsIHRvIGdldCB0aGUgYWN0dWFsIGxlbmd0aCB0cmFuc2ZlcnJlZC4KLQkJCSAqLwotCQkJdW5pb24geGhjaV90cmIgKmN1cl90cmI7Ci0JCQlzdHJ1Y3QgeGhjaV9zZWdtZW50ICpjdXJfc2VnOwotCi0JCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQkJCWZvciAoY3VyX3RyYiA9IGVwX3JpbmctPmRlcXVldWUsIGN1cl9zZWcgPSBlcF9yaW5nLT5kZXFfc2VnOwotCQkJCQljdXJfdHJiICE9IGV2ZW50X3RyYjsKLQkJCQkJbmV4dF90cmIoeGhjaSwgZXBfcmluZywgJmN1cl9zZWcsICZjdXJfdHJiKSkgewotCQkJCWlmICgoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCi0JCQkJIFRSQl9UWVBFX0JJVE1BU0spICE9IFRSQl9UWVBFKFRSQl9UUl9OT09QKSAmJgotCQkJCSAgICAoY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFszXSAmCi0JCQkJIFRSQl9UWVBFX0JJVE1BU0spICE9IFRSQl9UWVBFKFRSQl9MSU5LKSkKLQkJCQkJdGQtPnVyYi0+YWN0dWFsX2xlbmd0aCArPQotCQkJCQkJVFJCX0xFTihjdXJfdHJiLT5nZW5lcmljLmZpZWxkWzJdKTsKLQkJCX0KLQkJCS8qIElmIHRoZSByaW5nIGRpZG4ndCBzdG9wIG9uIGEgTGluayBvciBOby1vcCBUUkIsIGFkZAotCQkJICogaW4gdGhlIGFjdHVhbCBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBOb3JtYWwgVFJCCi0JCQkgKi8KLQkJCWlmICh0cmJfY29tcF9jb2RlICE9IENPTVBfU1RPUF9JTlZBTCkKLQkJCQl0ZC0+dXJiLT5hY3R1YWxfbGVuZ3RoICs9Ci0JCQkJCVRSQl9MRU4oY3VyX3RyYi0+Z2VuZXJpYy5maWVsZFsyXSkgLQotCQkJCQlUUkJfTEVOKGV2ZW50LT50cmFuc2Zlcl9sZW4pOwotCQl9Ci0JfQotCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfU1RPUF9JTlZBTCB8fAotCQkJdHJiX2NvbXBfY29kZSA9PSBDT01QX1NUT1ApIHsKLQkJLyogVGhlIEVuZHBvaW50IFN0b3AgQ29tbWFuZCBjb21wbGV0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIGFueQotCQkgKiBzdG9wcGVkIFREcy4gIEEgc3RvcHBlZCBURCBtYXkgYmUgcmVzdGFydGVkLCBzbyBkb24ndCB1cGRhdGUKLQkJICogdGhlIHJpbmcgZGVxdWV1ZSBwb2ludGVyIG9yIHRha2UgdGhpcyBURCBvZmYgYW55IGxpc3RzIHlldC4KLQkJICovCi0JCWVwLT5zdG9wcGVkX3RkID0gdGQ7Ci0JCWVwLT5zdG9wcGVkX3RyYiA9IGV2ZW50X3RyYjsKLQl9IGVsc2UgewotCQlpZiAodHJiX2NvbXBfY29kZSA9PSBDT01QX1NUQUxMKSB7Ci0JCQkvKiBUaGUgdHJhbnNmZXIgaXMgY29tcGxldGVkIGZyb20gdGhlIGRyaXZlcidzCi0JCQkgKiBwZXJzcGVjdGl2ZSwgYnV0IHdlIG5lZWQgdG8gaXNzdWUgYSBzZXQgZGVxdWV1ZQotCQkJICogY29tbWFuZCBmb3IgdGhpcyBzdGFsbGVkIGVuZHBvaW50IHRvIG1vdmUgdGhlIGRlcXVldWUKLQkJCSAqIHBvaW50ZXIgcGFzdCB0aGUgVEQuICBXZSBjYW4ndCBkbyB0aGF0IGhlcmUgYmVjYXVzZQotCQkJICogdGhlIGhhbHQgY29uZGl0aW9uIG11c3QgYmUgY2xlYXJlZCBmaXJzdC4gIExldCB0aGUKLQkJCSAqIFVTQiBjbGFzcyBkcml2ZXIgY2xlYXIgdGhlIHN0YWxsIGxhdGVyLgotCQkJICovCi0JCQllcC0+c3RvcHBlZF90ZCA9IHRkOwotCQkJZXAtPnN0b3BwZWRfdHJiID0gZXZlbnRfdHJiOwotCQkJZXAtPnN0b3BwZWRfc3RyZWFtID0gZXBfcmluZy0+c3RyZWFtX2lkOwotCQl9IGVsc2UgaWYgKHhoY2lfcmVxdWlyZXNfbWFudWFsX2hhbHRfY2xlYW51cCh4aGNpLAotCQkJCQllcF9jdHgsIHRyYl9jb21wX2NvZGUpKSB7Ci0JCQkvKiBPdGhlciB0eXBlcyBvZiBlcnJvcnMgaGFsdCB0aGUgZW5kcG9pbnQsIGJ1dCB0aGUKLQkJCSAqIGNsYXNzIGRyaXZlciBkb2Vzbid0IGNhbGwgdXNiX3Jlc2V0X2VuZHBvaW50KCkgdW5sZXNzCi0JCQkgKiB0aGUgZXJyb3IgaXMgLUVQSVBFLiAgQ2xlYXIgdGhlIGhhbHRlZCBzdGF0dXMgaW4gdGhlCi0JCQkgKiB4SENJIGhhcmR3YXJlIG1hbnVhbGx5LgotCQkJICovCi0JCQl4aGNpX2NsZWFudXBfaGFsdGVkX2VuZHBvaW50KHhoY2ksCi0JCQkJCXNsb3RfaWQsIGVwX2luZGV4LCBlcF9yaW5nLT5zdHJlYW1faWQsIHRkLCBldmVudF90cmIpOwotCQl9IGVsc2UgewotCQkJLyogVXBkYXRlIHJpbmcgZGVxdWV1ZSBwb2ludGVyICovCi0JCQl3aGlsZSAoZXBfcmluZy0+ZGVxdWV1ZSAhPSB0ZC0+bGFzdF90cmIpCi0JCQkJaW5jX2RlcSh4aGNpLCBlcF9yaW5nLCBmYWxzZSk7Ci0JCQlpbmNfZGVxKHhoY2ksIGVwX3JpbmcsIGZhbHNlKTsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAotdGRfY2xlYW51cDoKLQkJLyogQ2xlYW4gdXAgdGhlIGVuZHBvaW50J3MgVEQgbGlzdCAqLwotCQl1cmIgPSB0ZC0+dXJiOwotCQkvKiBEbyBvbmUgbGFzdCBjaGVjayBvZiB0aGUgYWN0dWFsIHRyYW5zZmVyIGxlbmd0aC4KLQkJICogSWYgdGhlIGhvc3QgY29udHJvbGxlciBzYWlkIHdlIHRyYW5zZmVycmVkIG1vcmUgZGF0YSB0aGFuCi0JCSAqIHRoZSBidWZmZXIgbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGggd2lsbCBiZSBhIHZlcnkgYmlnCi0JCSAqIG51bWJlciAoc2luY2UgaXQncyB1bnNpZ25lZCkuICBQbGF5IGl0IHNhZmUgYW5kIHNheSB3ZSBkaWRuJ3QKLQkJICogdHJhbnNmZXIgYW55dGhpbmcuCi0JCSAqLwotCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKSB7Ci0JCQl4aGNpX3dhcm4oeGhjaSwgIlVSQiB0cmFuc2ZlciBsZW5ndGggaXMgd3JvbmcsICIKLQkJCQkJInhIQyBpc3N1ZT8gcmVxLiBsZW4gPSAldSwgIgotCQkJCQkiYWN0LiBsZW4gPSAldVxuIiwKLQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQkJCWlmICh0ZC0+dXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCi0JCQkJc3RhdHVzID0gLUVSRU1PVEVJTzsKLQkJCWVsc2UKLQkJCQlzdGF0dXMgPSAwOworCQl0ZCA9IGxpc3RfZW50cnkoZXBfcmluZy0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgeGhjaV90ZCwgdGRfbGlzdCk7CisJCS8qIElzIHRoaXMgYSBUUkIgaW4gdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgVEQ/ICovCisJCWV2ZW50X3NlZyA9IHRyYl9pbl90ZChlcF9yaW5nLT5kZXFfc2VnLCBlcF9yaW5nLT5kZXF1ZXVlLAorCQkJCXRkLT5sYXN0X3RyYiwgZXZlbnRfZG1hKTsKKwkJaWYgKGV2ZW50X3NlZyAmJiBlcC0+c2tpcCkgeworCQkJeGhjaV9kYmcoeGhjaSwgIkZvdW5kIHRkLiBDbGVhciBza2lwIGZsYWcuXG4iKTsKKwkJCWVwLT5za2lwID0gZmFsc2U7CiAJCX0KLQkJbGlzdF9kZWwoJnRkLT50ZF9saXN0KTsKLQkJLyogV2FzIHRoaXMgVEQgc2xhdGVkIHRvIGJlIGNhbmNlbGxlZCBidXQgY29tcGxldGVkIGFueXdheT8gKi8KLQkJaWYgKCFsaXN0X2VtcHR5KCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QpKQotCQkJbGlzdF9kZWwoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisJCWlmICghZXZlbnRfc2VnICYmCisJCSAgICghZXAtPnNraXAgfHwgIXVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJnRkLT51cmItPmVwLT5kZXNjKSkpIHsKKwkJCS8qIEhDIGlzIGJ1c3RlZCwgZ2l2ZSB1cCEgKi8KKwkJCXhoY2lfZXJyKHhoY2ksICJFUlJPUiBUcmFuc2ZlciBldmVudCBUUkIgRE1BIHB0ciBub3QgIgorCQkJCQkicGFydCBvZiBjdXJyZW50IFREXG4iKTsKKwkJCXJldHVybiAtRVNIVVRET1dOOworCQl9CiAKLQkJLyogTGVhdmUgdGhlIFREIGFyb3VuZCBmb3IgdGhlIHJlc2V0IGVuZHBvaW50IGZ1bmN0aW9uIHRvIHVzZQotCQkgKiAoYnV0IG9ubHkgaWYgaXQncyBub3QgYSBjb250cm9sIGVuZHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5Ci0JCSAqIHF1ZXVlZCB0aGUgU2V0IFRSIGRlcXVldWUgcG9pbnRlciBjb21tYW5kIGZvciBzdGFsbGVkCi0JCSAqIGNvbnRyb2wgZW5kcG9pbnRzKS4KLQkJICovCi0JCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSB8fAotCQkJKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVEFMTCAmJgotCQkJCXRyYl9jb21wX2NvZGUgIT0gQ09NUF9CQUJCTEUpKSB7Ci0JCQlrZnJlZSh0ZCk7CisJCWlmIChldmVudF9zZWcpIHsKKwkJCWV2ZW50X3RyYiA9ICZldmVudF9zZWctPnRyYnNbKGV2ZW50X2RtYSAtCisJCQkJCSBldmVudF9zZWctPmRtYSkgLyBzaXplb2YoKmV2ZW50X3RyYildOworCQkJLyoKKwkJCSAqIE5vLW9wIFRSQiBzaG91bGQgbm90IHRyaWdnZXIgaW50ZXJydXB0cy4KKwkJCSAqIElmIGV2ZW50X3RyYiBpcyBhIG5vLW9wIFRSQiwgaXQgbWVhbnMgdGhlCisJCQkgKiBjb3JyZXNwb25kaW5nIFREIGhhcyBiZWVuIGNhbmNlbGxlZC4gSnVzdCBpZ25vcmUKKwkJCSAqIHRoZSBURC4KKwkJCSAqLworCQkJaWYgKChldmVudF90cmItPmdlbmVyaWMuZmllbGRbM10gJiBUUkJfVFlQRV9CSVRNQVNLKQorCQkJCQkgPT0gVFJCX1RZUEUoVFJCX1RSX05PT1ApKSB7CisJCQkJeGhjaV9kYmcoeGhjaSwgImV2ZW50X3RyYiBpcyBhIG5vLW9wIFRSQi4gIgorCQkJCQkJIlNraXAgaXRcbiIpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KIAkJfQotCQl1cmItPmhjcHJpdiA9IE5VTEw7Ci0JfQorCisJCS8qIE5vdyB1cGRhdGUgdGhlIHVyYidzIGFjdHVhbF9sZW5ndGggYW5kIGdpdmUgYmFjayB0bworCQkgKiB0aGUgY29yZQorCQkgKi8KKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnRkLT51cmItPmVwLT5kZXNjKSkKKwkJCXJldCA9IHByb2Nlc3NfY3RybF90ZCh4aGNpLCB0ZCwgZXZlbnRfdHJiLCBldmVudCwgZXAsCisJCQkJCQkgJnN0YXR1cyk7CisJCWVsc2UgaWYgKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoJnRkLT51cmItPmVwLT5kZXNjKSkKKwkJCXJldCA9IHByb2Nlc3NfaXNvY190ZCh4aGNpLCB0ZCwgZXZlbnRfdHJiLCBldmVudCwgZXAsCisJCQkJCQkgJnN0YXR1cyk7CisJCWVsc2UKKwkJCXJldCA9IHByb2Nlc3NfYnVsa19pbnRyX3RkKHhoY2ksIHRkLCBldmVudF90cmIsIGV2ZW50LAorCQkJCQkJIGVwLCAmc3RhdHVzKTsKKwogY2xlYW51cDoKLQlpbmNfZGVxKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmcsIHRydWUpOwotCXhoY2lfc2V0X2hjX2V2ZW50X2RlcSh4aGNpKTsKKwkJLyoKKwkJICogRG8gbm90IHVwZGF0ZSBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciBpZiBlcC0+c2tpcCBpcyBzZXQuCisJCSAqIFdpbGwgcm9sbCBiYWNrIHRvIGNvbnRpbnVlIHByb2Nlc3MgbWlzc2VkIHRkcy4KKwkJICovCisJCWlmICh0cmJfY29tcF9jb2RlID09IENPTVBfTUlTU0VEX0lOVCB8fCAhZXAtPnNraXApIHsKKwkJCWluY19kZXEoeGhjaSwgeGhjaS0+ZXZlbnRfcmluZywgdHJ1ZSk7CisJCX0KIAotCS8qIEZJWE1FIGZvciBtdWx0aS1URCBVUkJzICh3aG8gaGF2ZSBidWZmZXJzIGJpZ2dlciB0aGFuIDY0TUIpICovCi0JaWYgKHVyYikgewotCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh4aGNpX3RvX2hjZCh4aGNpKSwgdXJiKTsKLQkJeGhjaV9kYmcoeGhjaSwgIkdpdmViYWNrIFVSQiAlcCwgbGVuID0gJWQsIHN0YXR1cyA9ICVkXG4iLAotCQkJCXVyYiwgdXJiLT5hY3R1YWxfbGVuZ3RoLCBzdGF0dXMpOwotCQlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7Ci0JCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHhoY2lfdG9faGNkKHhoY2kpLCB1cmIsIHN0YXR1cyk7Ci0JCXNwaW5fbG9jaygmeGhjaS0+bG9jayk7Ci0JfQorCQlpZiAocmV0KSB7CisJCQl1cmIgPSB0ZC0+dXJiOworCQkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwkJCS8qIExlYXZlIHRoZSBURCBhcm91bmQgZm9yIHRoZSByZXNldCBlbmRwb2ludCBmdW5jdGlvbgorCQkJICogdG8gdXNlKGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGEgY29udHJvbCBlbmRwb2ludCwKKwkJCSAqIHNpbmNlIHdlIGFscmVhZHkgcXVldWVkIHRoZSBTZXQgVFIgZGVxdWV1ZSBwb2ludGVyCisJCQkgKiBjb21tYW5kIGZvciBzdGFsbGVkIGNvbnRyb2wgZW5kcG9pbnRzKS4KKwkJCSAqLworCQkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnVyYi0+ZXAtPmRlc2MpIHx8CisJCQkJKHRyYl9jb21wX2NvZGUgIT0gQ09NUF9TVEFMTCAmJgorCQkJCQl0cmJfY29tcF9jb2RlICE9IENPTVBfQkFCQkxFKSkKKwkJCQl4aGNpX3VyYl9mcmVlX3ByaXYoeGhjaSwgdXJiX3ByaXYpOworCisJCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh4aGNpX3RvX2hjZCh4aGNpKSwgdXJiKTsKKwkJCXhoY2lfZGJnKHhoY2ksICJHaXZlYmFjayBVUkIgJXAsIGxlbiA9ICVkLCAiCisJCQkJCSJzdGF0dXMgPSAlZFxuIiwKKwkJCQkJdXJiLCB1cmItPmFjdHVhbF9sZW5ndGgsIHN0YXR1cyk7CisJCQlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7CisJCQl1c2JfaGNkX2dpdmViYWNrX3VyYih4aGNpX3RvX2hjZCh4aGNpKSwgdXJiLCBzdGF0dXMpOworCQkJc3Bpbl9sb2NrKCZ4aGNpLT5sb2NrKTsKKwkJfQorCisJLyoKKwkgKiBJZiBlcC0+c2tpcCBpcyBzZXQsIGl0IG1lYW5zIHRoZXJlIGFyZSBtaXNzZWQgdGRzIG9uIHRoZQorCSAqIGVuZHBvaW50IHJpbmcgbmVlZCB0byB0YWtlIGNhcmUgb2YuCisJICogUHJvY2VzcyB0aGVtIGFzIHNob3J0IHRyYW5zZmVyIHVudGlsIHJlYWNoIHRoZSB0ZCBwb2ludGVkIGJ5CisJICogdGhlIGV2ZW50LgorCSAqLworCX0gd2hpbGUgKGVwLT5za2lwICYmIHRyYl9jb21wX2NvZGUgIT0gQ09NUF9NSVNTRURfSU5UKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjUyLDcgKzE5MzUsNyBAQAogICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFsbCBPUy1vd25lZCBldmVudHMgb24gdGhlIGV2ZW50IHJpbmcuICBJdCBtYXkgZHJvcAogICogeGhjaS0+bG9jayBiZXR3ZWVuIGV2ZW50IHByb2Nlc3NpbmcgKGUuZy4gdG8gcGFzcyB1cCBwb3J0IHN0YXR1cyBjaGFuZ2VzKS4KICAqLwotdm9pZCB4aGNpX2hhbmRsZV9ldmVudChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCitzdGF0aWMgdm9pZCB4aGNpX2hhbmRsZV9ldmVudChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7CiAJdW5pb24geGhjaV90cmIgKmV2ZW50OwogCWludCB1cGRhdGVfcHRycyA9IDE7CkBAIC0xNzEwLDE1ICsxOTkzLDEzMCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVwZGF0ZV9wdHJzKSB7Ci0JCS8qIFVwZGF0ZSBTVyBhbmQgSEMgZXZlbnQgcmluZyBkZXF1ZXVlIHBvaW50ZXIgKi8KKwlpZiAodXBkYXRlX3B0cnMpCisJCS8qIFVwZGF0ZSBTVyBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciAqLwogCQlpbmNfZGVxKHhoY2ksIHhoY2ktPmV2ZW50X3JpbmcsIHRydWUpOwotCQl4aGNpX3NldF9oY19ldmVudF9kZXEoeGhjaSk7Ci0JfQorCiAJLyogQXJlIHRoZXJlIG1vcmUgaXRlbXMgb24gdGhlIGV2ZW50IHJpbmc/ICovCiAJeGhjaV9oYW5kbGVfZXZlbnQoeGhjaSk7CiB9CiAKKy8qCisgKiB4SENJIHNwZWMgc2F5cyB3ZSBjYW4gZ2V0IGFuIGludGVycnVwdCwgYW5kIGlmIHRoZSBIQyBoYXMgYW4gZXJyb3IgY29uZGl0aW9uLAorICogd2UgbWlnaHQgZ2V0IGJhZCBkYXRhIG91dCBvZiB0aGUgZXZlbnQgcmluZy4gIFNlY3Rpb24gNC4xMC4yLjcgaGFzIGEgbGlzdCBvZgorICogaW5kaWNhdG9ycyBvZiBhbiBldmVudCBUUkIgZXJyb3IsIGJ1dCB3ZSBjaGVjayB0aGUgc3RhdHVzICpmaXJzdCogdG8gYmUgc2FmZS4KKyAqLworaXJxcmV0dXJuX3QgeGhjaV9pcnEoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXUzMiBzdGF0dXM7CisJdW5pb24geGhjaV90cmIgKnRyYjsKKwl1NjQgdGVtcF82NDsKKwl1bmlvbiB4aGNpX3RyYiAqZXZlbnRfcmluZ19kZXE7CisJZG1hX2FkZHJfdCBkZXE7CisKKwlzcGluX2xvY2soJnhoY2ktPmxvY2spOworCXRyYiA9IHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWU7CisJLyogQ2hlY2sgaWYgdGhlIHhIQyBnZW5lcmF0ZWQgdGhlIGludGVycnVwdCwgb3IgdGhlIGlycSBpcyBzaGFyZWQgKi8KKwlzdGF0dXMgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmIChzdGF0dXMgPT0gMHhmZmZmZmZmZikKKwkJZ290byBod19kaWVkOworCisJaWYgKCEoc3RhdHVzICYgU1RTX0VJTlQpKSB7CisJCXNwaW5fdW5sb2NrKCZ4aGNpLT5sb2NrKTsKKwkJeGhjaV93YXJuKHhoY2ksICJTcHVyaW91cyBpbnRlcnJ1cHQuXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwl4aGNpX2RiZyh4aGNpLCAib3AgcmVnIHN0YXR1cyA9ICUwOHhcbiIsIHN0YXR1cyk7CisJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmcgZGVxdWV1ZSBwdHI6XG4iKTsKKwl4aGNpX2RiZyh4aGNpLCAiQCVsbHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQl4aGNpX3RyYl92aXJ0X3RvX2RtYSh4aGNpLT5ldmVudF9yaW5nLT5kZXFfc2VnLCB0cmIpLAorCQkJbG93ZXJfMzJfYml0cyh0cmItPmxpbmsuc2VnbWVudF9wdHIpLAorCQkJdXBwZXJfMzJfYml0cyh0cmItPmxpbmsuc2VnbWVudF9wdHIpLAorCQkJKHVuc2lnbmVkIGludCkgdHJiLT5saW5rLmludHJfdGFyZ2V0LAorCQkJKHVuc2lnbmVkIGludCkgdHJiLT5saW5rLmNvbnRyb2wpOworCisJaWYgKHN0YXR1cyAmIFNUU19GQVRBTCkgeworCQl4aGNpX3dhcm4oeGhjaSwgIldBUk5JTkc6IEhvc3QgU3lzdGVtIEVycm9yXG4iKTsKKwkJeGhjaV9oYWx0KHhoY2kpOworaHdfZGllZDoKKwkJeGhjaV90b19oY2QoeGhjaSktPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKwkJc3Bpbl91bmxvY2soJnhoY2ktPmxvY2spOworCQlyZXR1cm4gLUVTSFVURE9XTjsKKwl9CisKKwkvKgorCSAqIENsZWFyIHRoZSBvcCByZWcgaW50ZXJydXB0IHN0YXR1cyBmaXJzdCwKKwkgKiBzbyB3ZSBjYW4gcmVjZWl2ZSBpbnRlcnJ1cHRzIGZyb20gb3RoZXIgTVNJLVggaW50ZXJydXB0ZXJzLgorCSAqIFdyaXRlIDEgdG8gY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMuCisJICovCisJc3RhdHVzIHw9IFNUU19FSU5UOworCXhoY2lfd3JpdGVsKHhoY2ksIHN0YXR1cywgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7CisJLyogRklYTUUgd2hlbiBNU0ktWCBpcyBzdXBwb3J0ZWQgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZWN0b3JzICovCisJLyogQ2xlYXIgdGhlIE1TSS1YIGV2ZW50IGludGVycnVwdCBzdGF0dXMgKi8KKworCWlmIChoY2QtPmlycSAhPSAtMSkgeworCQl1MzIgaXJxX3BlbmRpbmc7CisJCS8qIEFja25vd2xlZGdlIHRoZSBQQ0kgaW50ZXJydXB0ICovCisJCWlycV9wZW5kaW5nID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+aXJfc2V0LT5pcnFfcGVuZGluZyk7CisJCWlycV9wZW5kaW5nIHw9IDB4MzsKKwkJeGhjaV93cml0ZWwoeGhjaSwgaXJxX3BlbmRpbmcsICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKKwl9CisKKwlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgeworCQl4aGNpX2RiZyh4aGNpLCAieEhDSSBkeWluZywgaWdub3JpbmcgaW50ZXJydXB0LiAiCisJCQkJIlNob3VsZG4ndCBJUlFzIGJlIGRpc2FibGVkP1xuIik7CisJCS8qIENsZWFyIHRoZSBldmVudCBoYW5kbGVyIGJ1c3kgZmxhZyAoUlcxQyk7CisJCSAqIHRoZSBldmVudCByaW5nIHNob3VsZCBiZSBlbXB0eS4KKwkJICovCisJCXRlbXBfNjQgPSB4aGNpX3JlYWRfNjQoeGhjaSwgJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCB0ZW1wXzY0IHwgRVJTVF9FSEIsCisJCQkJJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKKwkJc3Bpbl91bmxvY2soJnhoY2ktPmxvY2spOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlldmVudF9yaW5nX2RlcSA9IHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWU7CisJLyogRklYTUUgdGhpcyBzaG91bGQgYmUgYSBkZWxheWVkIHNlcnZpY2Ugcm91dGluZQorCSAqIHRoYXQgY2xlYXJzIHRoZSBFSEIuCisJICovCisJeGhjaV9oYW5kbGVfZXZlbnQoeGhjaSk7CisKKwl0ZW1wXzY0ID0geGhjaV9yZWFkXzY0KHhoY2ksICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7CisJLyogSWYgbmVjZXNzYXJ5LCB1cGRhdGUgdGhlIEhXJ3MgdmVyc2lvbiBvZiB0aGUgZXZlbnQgcmluZyBkZXEgcHRyLiAqLworCWlmIChldmVudF9yaW5nX2RlcSAhPSB4aGNpLT5ldmVudF9yaW5nLT5kZXF1ZXVlKSB7CisJCWRlcSA9IHhoY2lfdHJiX3ZpcnRfdG9fZG1hKHhoY2ktPmV2ZW50X3JpbmctPmRlcV9zZWcsCisJCQkJeGhjaS0+ZXZlbnRfcmluZy0+ZGVxdWV1ZSk7CisJCWlmIChkZXEgPT0gMCkKKwkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTiBzb21ldGhpbmcgd3Jvbmcgd2l0aCBTVyBldmVudCAiCisJCQkJCSJyaW5nIGRlcXVldWUgcHRyLlxuIik7CisJCS8qIFVwZGF0ZSBIQyBldmVudCByaW5nIGRlcXVldWUgcG9pbnRlciAqLworCQl0ZW1wXzY0ICY9IEVSU1RfUFRSX01BU0s7CisJCXRlbXBfNjQgfD0gKCh1NjQpIGRlcSAmICh1NjQpIH5FUlNUX1BUUl9NQVNLKTsKKwl9CisKKwkvKiBDbGVhciB0aGUgZXZlbnQgaGFuZGxlciBidXN5IGZsYWcgKFJXMUMpOyBldmVudCByaW5nIGlzIGVtcHR5LiAqLworCXRlbXBfNjQgfD0gRVJTVF9FSEI7CisJeGhjaV93cml0ZV82NCh4aGNpLCB0ZW1wXzY0LCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCisJc3Bpbl91bmxvY2soJnhoY2ktPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpcnFyZXR1cm5fdCB4aGNpX21zaV9pcnEoaW50IGlycSwgc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpcnFyZXR1cm5fdCByZXQ7CisKKwlzZXRfYml0KEhDRF9GTEFHX1NBV19JUlEsICZoY2QtPmZsYWdzKTsKKworCXJldCA9IHhoY2lfaXJxKGhjZCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKioqKgkJRW5kcG9pbnQgUmluZyBPcGVyYXRpb25zCSoqKiovCiAKIC8qCkBAIC0xODI3LDEwICsyMjI1LDEyIEBACiAJCXVuc2lnbmVkIGludCBzdHJlYW1faWQsCiAJCXVuc2lnbmVkIGludCBudW1fdHJicywKIAkJc3RydWN0IHVyYiAqdXJiLAotCQlzdHJ1Y3QgeGhjaV90ZCAqKnRkLAorCQl1bnNpZ25lZCBpbnQgdGRfaW5kZXgsCiAJCWdmcF90IG1lbV9mbGFncykKIHsKIAlpbnQgcmV0OworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJc3RydWN0IHhoY2lfdGQJKnRkOwogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CiAJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHggPSB4aGNpX2dldF9lcF9jdHgoeGhjaSwgeGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwogCkBAIC0xODQ2LDI0ICsyMjQ2LDI5IEBACiAJCQludW1fdHJicywgbWVtX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCSp0ZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4aGNpX3RkKSwgbWVtX2ZsYWdzKTsKLQlpZiAoISp0ZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JSU5JVF9MSVNUX0hFQUQoJigqdGQpLT50ZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmKCp0ZCktPmNhbmNlbGxlZF90ZF9saXN0KTsKIAotCXJldCA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAoeGhjaV90b19oY2QoeGhjaSksIHVyYik7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJa2ZyZWUoKnRkKTsKLQkJcmV0dXJuIHJldDsKKwl1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCXRkID0gdXJiX3ByaXYtPnRkW3RkX2luZGV4XTsKKworCUlOSVRfTElTVF9IRUFEKCZ0ZC0+dGRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnRkLT5jYW5jZWxsZWRfdGRfbGlzdCk7CisKKwlpZiAodGRfaW5kZXggPT0gMCkgeworCQlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKHhoY2lfdG9faGNkKHhoY2kpLCB1cmIpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJeGhjaV91cmJfZnJlZV9wcml2KHhoY2ksIHVyYl9wcml2KTsKKwkJCXVyYi0+aGNwcml2ID0gTlVMTDsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKLQkoKnRkKS0+dXJiID0gdXJiOwotCXVyYi0+aGNwcml2ID0gKHZvaWQgKikgKCp0ZCk7CisJdGQtPnVyYiA9IHVyYjsKIAkvKiBBZGQgdGhpcyBURCB0byB0aGUgdGFpbCBvZiB0aGUgZW5kcG9pbnQgcmluZydzIFREIGxpc3QgKi8KLQlsaXN0X2FkZF90YWlsKCYoKnRkKS0+dGRfbGlzdCwgJmVwX3JpbmctPnRkX2xpc3QpOwotCSgqdGQpLT5zdGFydF9zZWcgPSBlcF9yaW5nLT5lbnFfc2VnOwotCSgqdGQpLT5maXJzdF90cmIgPSBlcF9yaW5nLT5lbnF1ZXVlOworCWxpc3RfYWRkX3RhaWwoJnRkLT50ZF9saXN0LCAmZXBfcmluZy0+dGRfbGlzdCk7CisJdGQtPnN0YXJ0X3NlZyA9IGVwX3JpbmctPmVucV9zZWc7CisJdGQtPmZpcnN0X3RyYiA9IGVwX3JpbmctPmVucXVldWU7CisKKwl1cmJfcHJpdi0+dGRbdGRfaW5kZXhdID0gdGQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMDIsNiArMjQwNyw3IEBACiB7CiAJc3RydWN0IHhoY2lfcmluZyAqZXBfcmluZzsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYnM7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgbnVtX3NnczsKQEAgLTIwMjIsOSArMjQyOCwxMyBAQAogCiAJdHJiX2J1ZmZfbGVuID0gcHJlcGFyZV90cmFuc2Zlcih4aGNpLCB4aGNpLT5kZXZzW3Nsb3RfaWRdLAogCQkJZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkLAotCQkJbnVtX3RyYnMsIHVyYiwgJnRkLCBtZW1fZmxhZ3MpOworCQkJbnVtX3RyYnMsIHVyYiwgMCwgbWVtX2ZsYWdzKTsKIAlpZiAodHJiX2J1ZmZfbGVuIDwgMCkKIAkJcmV0dXJuIHRyYl9idWZmX2xlbjsKKworCXVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJdGQgPSB1cmJfcHJpdi0+dGRbMF07CisKIAkvKgogCSAqIERvbid0IGdpdmUgdGhlIGZpcnN0IFRSQiB0byB0aGUgaGFyZHdhcmUgKGJ5IHRvZ2dsaW5nIHRoZSBjeWNsZSBiaXQpCiAJICogdW50aWwgd2UndmUgZmluaXNoZWQgY3JlYXRpbmcgYWxsIHRoZSBvdGhlciBUUkJzLiAgVGhlIHJpbmcncyBjeWNsZQpAQCAtMjE0NSw2ICsyNTU1LDcgQEAKIAkJc3RydWN0IHVyYiAqdXJiLCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KQogewogCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdjsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJaW50IG51bV90cmJzOwogCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmI7CkBAIC0yMTkwLDEwICsyNjAxLDEzIEBACiAKIAlyZXQgPSBwcmVwYXJlX3RyYW5zZmVyKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0sCiAJCQllcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQludW1fdHJicywgdXJiLCAmdGQsIG1lbV9mbGFncyk7CisJCQludW1fdHJicywgdXJiLCAwLCBtZW1fZmxhZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwl0ZCA9IHVyYl9wcml2LT50ZFswXTsKKwogCS8qCiAJICogRG9uJ3QgZ2l2ZSB0aGUgZmlyc3QgVFJCIHRvIHRoZSBoYXJkd2FyZSAoYnkgdG9nZ2xpbmcgdGhlIGN5Y2xlIGJpdCkKIAkgKiB1bnRpbCB3ZSd2ZSBmaW5pc2hlZCBjcmVhdGluZyBhbGwgdGhlIG90aGVyIFRSQnMuICBUaGUgcmluZydzIGN5Y2xlCkBAIC0yMjc5LDYgKzI2OTMsNyBAQAogCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmI7CiAJaW50IHN0YXJ0X2N5Y2xlOwogCXUzMiBmaWVsZCwgbGVuZ3RoX2ZpZWxkOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CiAJc3RydWN0IHhoY2lfdGQgKnRkOwogCiAJZXBfcmluZyA9IHhoY2lfdXJiX3RvX3RyYW5zZmVyX3JpbmcoeGhjaSwgdXJiKTsKQEAgLTIzMDYsMTAgKzI3MjEsMTMgQEAKIAkJbnVtX3RyYnMrKzsKIAlyZXQgPSBwcmVwYXJlX3RyYW5zZmVyKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0sCiAJCQllcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQludW1fdHJicywgdXJiLCAmdGQsIG1lbV9mbGFncyk7CisJCQludW1fdHJicywgdXJiLCAwLCBtZW1fZmxhZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCisJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwl0ZCA9IHVyYl9wcml2LT50ZFswXTsKKwogCS8qCiAJICogRG9uJ3QgZ2l2ZSB0aGUgZmlyc3QgVFJCIHRvIHRoZSBoYXJkd2FyZSAoYnkgdG9nZ2xpbmcgdGhlIGN5Y2xlIGJpdCkKIAkgKiB1bnRpbCB3ZSd2ZSBmaW5pc2hlZCBjcmVhdGluZyBhbGwgdGhlIG90aGVyIFRSQnMuICBUaGUgcmluZydzIGN5Y2xlCkBAIC0yMzY2LDYgKzI3ODQsMjI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY291bnRfaXNvY190cmJzX25lZWRlZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB1cmIgKnVyYiwgaW50IGkpCit7CisJaW50IG51bV90cmJzID0gMDsKKwl1NjQgYWRkciwgdGRfbGVuLCBydW5uaW5nX3RvdGFsOworCisJYWRkciA9ICh1NjQpICh1cmItPnRyYW5zZmVyX2RtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0KTsKKwl0ZF9sZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKworCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtCisJCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCWlmIChydW5uaW5nX3RvdGFsICE9IDApCisJCW51bV90cmJzKys7CisKKwl3aGlsZSAocnVubmluZ190b3RhbCA8IHRkX2xlbikgeworCQludW1fdHJicysrOworCQlydW5uaW5nX3RvdGFsICs9IFRSQl9NQVhfQlVGRl9TSVpFOworCX0KKworCXJldHVybiBudW1fdHJiczsKK30KKworLyogVGhpcyBpcyBmb3IgaXNvYyB0cmFuc2ZlciAqLworc3RhdGljIGludCB4aGNpX3F1ZXVlX2lzb2NfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCisJCXN0cnVjdCB1cmIgKnVyYiwgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCkKK3sKKwlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJc3RydWN0IHhoY2lfdGQgKnRkOworCWludCBudW1fdGRzLCB0cmJzX3Blcl90ZDsKKwlzdHJ1Y3QgeGhjaV9nZW5lcmljX3RyYiAqc3RhcnRfdHJiOworCWJvb2wgZmlyc3RfdHJiOworCWludCBzdGFydF9jeWNsZTsKKwl1MzIgZmllbGQsIGxlbmd0aF9maWVsZDsKKwlpbnQgcnVubmluZ190b3RhbCwgdHJiX2J1ZmZfbGVuLCB0ZF9sZW4sIHRkX3JlbWFpbl9sZW4sIHJldDsKKwl1NjQgc3RhcnRfYWRkciwgYWRkcjsKKwlpbnQgaSwgajsKKworCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CisKKwludW1fdGRzID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwlpZiAobnVtX3RkcyA8IDEpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIklzb2MgVVJCIHdpdGggemVybyBwYWNrZXRzP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghaW5faW50ZXJydXB0KCkpCisJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIgorCQkJCSIgYWRkciA9ICUjbGx4LCBudW1fdGRzID0gJWRcbiIsCisJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl1cmItPnRyYW5zZmVyX2RtYSwKKwkJCQludW1fdGRzKTsKKworCXN0YXJ0X2FkZHIgPSAodTY0KSB1cmItPnRyYW5zZmVyX2RtYTsKKwlzdGFydF90cmIgPSAmZXBfcmluZy0+ZW5xdWV1ZS0+Z2VuZXJpYzsKKwlzdGFydF9jeWNsZSA9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOworCisJLyogUXVldWUgdGhlIGZpcnN0IFRSQiwgZXZlbiBpZiBpdCdzIHplcm8tbGVuZ3RoICovCisJZm9yIChpID0gMDsgaSA8IG51bV90ZHM7IGkrKykgeworCQlmaXJzdF90cmIgPSB0cnVlOworCisJCXJ1bm5pbmdfdG90YWwgPSAwOworCQlhZGRyID0gc3RhcnRfYWRkciArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQl0ZF9sZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKwkJdGRfcmVtYWluX2xlbiA9IHRkX2xlbjsKKworCQl0cmJzX3Blcl90ZCA9IGNvdW50X2lzb2NfdHJic19uZWVkZWQoeGhjaSwgdXJiLCBpKTsKKworCQlyZXQgPSBwcmVwYXJlX3RyYW5zZmVyKHhoY2ksIHhoY2ktPmRldnNbc2xvdF9pZF0sIGVwX2luZGV4LAorCQkJCXVyYi0+c3RyZWFtX2lkLCB0cmJzX3Blcl90ZCwgdXJiLCBpLCBtZW1fZmxhZ3MpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwkJdGQgPSB1cmJfcHJpdi0+dGRbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IHRyYnNfcGVyX3RkOyBqKyspIHsKKwkJCXUzMiByZW1haW5kZXIgPSAwOworCQkJZmllbGQgPSAwOworCisJCQlpZiAoZmlyc3RfdHJiKSB7CisJCQkJLyogUXVldWUgdGhlIGlzb2MgVFJCICovCisJCQkJZmllbGQgfD0gVFJCX1RZUEUoVFJCX0lTT0MpOworCQkJCS8qIEFzc3VtZSBVUkJfSVNPX0FTQVAgaXMgc2V0ICovCisJCQkJZmllbGQgfD0gVFJCX1NJQTsKKwkJCQlpZiAoaSA+IDApCisJCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOworCQkJCWZpcnN0X3RyYiA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBRdWV1ZSBvdGhlciBub3JtYWwgVFJCcyAqLworCQkJCWZpZWxkIHw9IFRSQl9UWVBFKFRSQl9OT1JNQUwpOworCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOworCQkJfQorCisJCQkvKiBDaGFpbiBhbGwgdGhlIFRSQnMgdG9nZXRoZXI7IGNsZWFyIHRoZSBjaGFpbiBiaXQgaW4KKwkJCSAqIHRoZSBsYXN0IFRSQiB0byBpbmRpY2F0ZSBpdCdzIHRoZSBsYXN0IFRSQiBpbiB0aGUKKwkJCSAqIGNoYWluLgorCQkJICovCisJCQlpZiAoaiA8IHRyYnNfcGVyX3RkIC0gMSkgeworCQkJCWZpZWxkIHw9IFRSQl9DSEFJTjsKKwkJCX0gZWxzZSB7CisJCQkJdGQtPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKKwkJCQlmaWVsZCB8PSBUUkJfSU9DOworCQkJfQorCisJCQkvKiBDYWxjdWxhdGUgVFJCIGxlbmd0aCAqLworCQkJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQorCQkJCShhZGRyICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCQlpZiAodHJiX2J1ZmZfbGVuID4gdGRfcmVtYWluX2xlbikKKwkJCQl0cmJfYnVmZl9sZW4gPSB0ZF9yZW1haW5fbGVuOworCisJCQlyZW1haW5kZXIgPSB4aGNpX3RkX3JlbWFpbmRlcih0ZF9sZW4gLSBydW5uaW5nX3RvdGFsKTsKKwkJCWxlbmd0aF9maWVsZCA9IFRSQl9MRU4odHJiX2J1ZmZfbGVuKSB8CisJCQkJcmVtYWluZGVyIHwKKwkJCQlUUkJfSU5UUl9UQVJHRVQoMCk7CisJCQlxdWV1ZV90cmIoeGhjaSwgZXBfcmluZywgZmFsc2UsIGZhbHNlLAorCQkJCWxvd2VyXzMyX2JpdHMoYWRkciksCisJCQkJdXBwZXJfMzJfYml0cyhhZGRyKSwKKwkJCQlsZW5ndGhfZmllbGQsCisJCQkJLyogV2UgYWx3YXlzIHdhbnQgdG8ga25vdyBpZiB0aGUgVFJCIHdhcyBzaG9ydCwKKwkJCQkgKiBvciB3ZSB3b24ndCBnZXQgYW4gZXZlbnQgd2hlbiBpdCBjb21wbGV0ZXMuCisJCQkJICogKFVubGVzcyB3ZSB1c2UgZXZlbnQgZGF0YSBUUkJzLCB3aGljaCBhcmUgYQorCQkJCSAqIHdhc3RlIG9mIHNwYWNlIGFuZCBIQyByZXNvdXJjZXMuKQorCQkJCSAqLworCQkJCWZpZWxkIHwgVFJCX0lTUCk7CisJCQlydW5uaW5nX3RvdGFsICs9IHRyYl9idWZmX2xlbjsKKworCQkJYWRkciArPSB0cmJfYnVmZl9sZW47CisJCQl0ZF9yZW1haW5fbGVuIC09IHRyYl9idWZmX2xlbjsKKwkJfQorCisJCS8qIENoZWNrIFREIGxlbmd0aCAqLworCQlpZiAocnVubmluZ190b3RhbCAhPSB0ZF9sZW4pIHsKKwkJCXhoY2lfZXJyKHhoY2ksICJJU09DIFREIGxlbmd0aCB1bm1hdGNoXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJd21iKCk7CisJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKworCXJpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHVyYi0+c3RyZWFtX2lkKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIHRyYW5zZmVyIHJpbmcgdG8gZ3VhcmFudGVlIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGUgdXJiLgorICogVXBkYXRlIElTTyBVUkIgc3RhcnRfZnJhbWUgYW5kIGludGVydmFsLgorICogVXBkYXRlIGludGVydmFsIGFzIHhoY2lfcXVldWVfaW50cl90eCBkb2VzLiBKdXN0IHVzZSB4aGNpIGZyYW1lX2luZGV4IHRvCisgKiB1cGRhdGUgdGhlIHVyYi0+c3RhcnRfZnJhbWUgYnkgbm93LgorICogQWx3YXlzIGFzc3VtZSBVUkJfSVNPX0FTQVAgc2V0LCBhbmQgTkVWRVIgdXNlIHVyYi0+c3RhcnRfZnJhbWUgYXMgaW5wdXQuCisgKi8KK2ludCB4aGNpX3F1ZXVlX2lzb2NfdHhfcHJlcGFyZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IG1lbV9mbGFncywKKwkJc3RydWN0IHVyYiAqdXJiLCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KQoreworCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp4ZGV2OworCXN0cnVjdCB4aGNpX3JpbmcgKmVwX3Jpbmc7CisJc3RydWN0IHhoY2lfZXBfY3R4ICplcF9jdHg7CisJaW50IHN0YXJ0X2ZyYW1lOworCWludCB4aGNpX2ludGVydmFsOworCWludCBlcF9pbnRlcnZhbDsKKwlpbnQgbnVtX3RkcywgbnVtX3RyYnMsIGk7CisJaW50IHJldDsKKworCXhkZXYgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdOworCWVwX3JpbmcgPSB4ZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmc7CisJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIHhkZXYtPm91dF9jdHgsIGVwX2luZGV4KTsKKworCW51bV90cmJzID0gMDsKKwludW1fdGRzID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3RkczsgaSsrKQorCQludW1fdHJicyArPSBjb3VudF9pc29jX3RyYnNfbmVlZGVkKHhoY2ksIHVyYiwgaSk7CisKKwkvKiBDaGVjayB0aGUgcmluZyB0byBndWFyYW50ZWUgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSB3aG9sZSB1cmIuCisJICogRG8gbm90IGluc2VydCBhbnkgdGQgb2YgdGhlIHVyYiB0byB0aGUgcmluZyBpZiB0aGUgY2hlY2sgZmFpbGVkLgorCSAqLworCXJldCA9IHByZXBhcmVfcmluZyh4aGNpLCBlcF9yaW5nLCBlcF9jdHgtPmVwX2luZm8gJiBFUF9TVEFURV9NQVNLLAorCQkJCW51bV90cmJzLCBtZW1fZmxhZ3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzdGFydF9mcmFtZSA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPnJ1bl9yZWdzLT5taWNyb2ZyYW1lX2luZGV4KTsKKwlzdGFydF9mcmFtZSAmPSAweDNmZmY7CisKKwl1cmItPnN0YXJ0X2ZyYW1lID0gc3RhcnRfZnJhbWU7CisJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XIHx8CisJCQl1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCXVyYi0+c3RhcnRfZnJhbWUgPj49IDM7CisKKwl4aGNpX2ludGVydmFsID0gRVBfSU5URVJWQUxfVE9fVUZSQU1FUyhlcF9jdHgtPmVwX2luZm8pOworCWVwX2ludGVydmFsID0gdXJiLT5pbnRlcnZhbDsKKwkvKiBDb252ZXJ0IHRvIG1pY3JvZnJhbWVzICovCisJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XIHx8CisJCQl1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwpCisJCWVwX2ludGVydmFsICo9IDg7CisJLyogRklYTUUgY2hhbmdlIHRoaXMgdG8gYSB3YXJuaW5nIGFuZCBhIHN1Z2dlc3Rpb24gdG8gdXNlIHRoZSBuZXcgQVBJCisJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgorCSAqLworCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7CisJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKKwkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgorCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCisJCQkJCWVwX2ludGVydmFsLAorCQkJCQllcF9pbnRlcnZhbCA9PSAxID8gIiIgOiAicyIsCisJCQkJCXhoY2lfaW50ZXJ2YWwsCisJCQkJCXhoY2lfaW50ZXJ2YWwgPT0gMSA/ICIiIDogInMiKTsKKwkJdXJiLT5pbnRlcnZhbCA9IHhoY2lfaW50ZXJ2YWw7CisJCS8qIENvbnZlcnQgYmFjayB0byBmcmFtZXMgZm9yIExTL0ZTIGRldmljZXMgKi8KKwkJaWYgKHVyYi0+ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfTE9XIHx8CisJCQkJdXJiLT5kZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKQorCQkJdXJiLT5pbnRlcnZhbCAvPSA4OworCX0KKwlyZXR1cm4geGhjaV9xdWV1ZV9pc29jX3R4KHhoY2ksIEdGUF9BVE9NSUMsIHVyYiwgc2xvdF9pZCwgZXBfaW5kZXgpOworfQorCiAvKioqKgkJQ29tbWFuZCBSaW5nIE9wZXJhdGlvbnMJCSoqKiovCiAKIC8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIHF1ZXVlaW5nIGEgY29tbWFuZCBUUkIgb24gdGhlIGNvbW1hbmQgcmluZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKaW5kZXggMzk5OGY3Mi4uZDVjNTUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xNzEsMjIgKzE3Miw4NCBAQAogCXJldHVybiBoYW5kc2hha2UoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cywgU1RTX0NOUiwgMCwgMjUwICogMTAwMCk7CiB9CiAKLQotI2lmIDAKLS8qIFNldCB1cCBNU0ktWCB0YWJsZSBmb3IgZW50cnkgMCAobWF5IGNsYWltIG90aGVyIGVudHJpZXMgbGF0ZXIpICovCi1zdGF0aWMgaW50IHhoY2lfc2V0dXBfbXNpeChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCisvKgorICogRnJlZSBJUlFzCisgKiBmcmVlIGFsbCBJUlFzIHJlcXVlc3QKKyAqLworc3RhdGljIHZvaWQgeGhjaV9mcmVlX2lycShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7Ci0JaW50IHJldDsKKwlpbnQgaTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CiAKLQl4aGNpLT5tc2l4X2NvdW50ID0gMDsKLQkvKiBYWFg6IGRpZCBJIGRvIHRoaXMgcmlnaHQ/ICBpeGdiZSBkb2VzIGtjYWxsb2MgZm9yIG1vcmUgdGhhbiBvbmUgKi8KLQl4aGNpLT5tc2l4X2VudHJpZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksIEdGUF9LRVJORUwpOworCS8qIHJldHVybiBpZiB1c2luZyBsZWdhY3kgaW50ZXJydXB0ICovCisJaWYgKHhoY2lfdG9faGNkKHhoY2kpLT5pcnEgPj0gMCkKKwkJcmV0dXJuOworCisJaWYgKHhoY2ktPm1zaXhfZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+bXNpeF9jb3VudDsgaSsrKQorCQkJaWYgKHhoY2ktPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpCisJCQkJZnJlZV9pcnEoeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3RvciwKKwkJCQkJCXhoY2lfdG9faGNkKHhoY2kpKTsKKwl9IGVsc2UgaWYgKHBkZXYtPmlycSA+PSAwKQorCQlmcmVlX2lycShwZGV2LT5pcnEsIHhoY2lfdG9faGNkKHhoY2kpKTsKKworCXJldHVybjsKK30KKworLyoKKyAqIFNldCB1cCBNU0kKKyAqLworc3RhdGljIGludCB4aGNpX3NldHVwX21zaShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGNpX2RldiAgKnBkZXYgPSB0b19wY2lfZGV2KHhoY2lfdG9faGNkKHhoY2kpLT5zZWxmLmNvbnRyb2xsZXIpOworCisJcmV0ID0gcGNpX2VuYWJsZV9tc2kocGRldik7CisJaWYgKHJldCkgeworCQl4aGNpX2Vycih4aGNpLCAiZmFpbGVkIHRvIGFsbG9jYXRlIE1TSSBlbnRyeVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCAoaXJxX2hhbmRsZXJfdCl4aGNpX21zaV9pcnEsCisJCQkJMCwgInhoY2lfaGNkIiwgeGhjaV90b19oY2QoeGhjaSkpOworCWlmIChyZXQpIHsKKwkJeGhjaV9lcnIoeGhjaSwgImRpc2FibGUgTVNJIGludGVycnVwdFxuIik7CisJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IHVwIE1TSS1YCisgKi8KK3N0YXRpYyBpbnQgeGhjaV9zZXR1cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisKKwkvKgorCSAqIGNhbGN1bGF0ZSBudW1iZXIgb2YgbXNpLXggdmVjdG9ycyBzdXBwb3J0ZWQuCisJICogLSBIQ1NfTUFYX0lOVFJTOiB0aGUgbWF4IG51bWJlciBvZiBpbnRlcnJ1cHRzIHRoZSBob3N0IGNhbiBoYW5kbGUsCisJICogICB3aXRoIG1heCBudW1iZXIgb2YgaW50ZXJydXB0ZXJzIGJhc2VkIG9uIHRoZSB4aGNpIEhDU1BBUkFNUzEuCisJICogLSBudW1fb25saW5lX2NwdXM6IG1heGltdW0gbXNpLXggdmVjdG9ycyBwZXIgQ1BVcyBjb3JlLgorCSAqICAgQWRkIGFkZGl0aW9uYWwgMSB2ZWN0b3IgdG8gZW5zdXJlIGFsd2F5cyBhdmFpbGFibGUgaW50ZXJydXB0LgorCSAqLworCXhoY2ktPm1zaXhfY291bnQgPSBtaW4obnVtX29ubGluZV9jcHVzKCkgKyAxLAorCQkJCUhDU19NQVhfSU5UUlMoeGhjaS0+aGNzX3BhcmFtczEpKTsKKworCXhoY2ktPm1zaXhfZW50cmllcyA9CisJCWttYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpKnhoY2ktPm1zaXhfY291bnQsCisJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCF4aGNpLT5tc2l4X2VudHJpZXMpIHsKIAkJeGhjaV9lcnIoeGhjaSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0ktWCBlbnRyaWVzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXhoY2ktPm1zaXhfZW50cmllc1swXS5lbnRyeSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+bXNpeF9jb3VudDsgaSsrKSB7CisJCXhoY2ktPm1zaXhfZW50cmllc1tpXS5lbnRyeSA9IGk7CisJCXhoY2ktPm1zaXhfZW50cmllc1tpXS52ZWN0b3IgPSAwOworCX0KIAogCXJldCA9IHBjaV9lbmFibGVfbXNpeChwZGV2LCB4aGNpLT5tc2l4X2VudHJpZXMsIHhoY2ktPm1zaXhfY291bnQpOwogCWlmIChyZXQpIHsKQEAgLTE5NCwyMCArMjU3LDE5IEBACiAJCWdvdG8gZnJlZV9lbnRyaWVzOwogCX0KIAotCS8qCi0JICogUGFzcyB0aGUgeGhjaSBwb2ludGVyIHZhbHVlIGFzIHRoZSByZXF1ZXN0X2lycSAiY29va2llIi4KLQkgKiBJZiBtb3JlIGlycXMgYXJlIGFkZGVkLCB0aGlzIHdpbGwgbmVlZCB0byBiZSB1bmlxdWUgZm9yIGVhY2ggb25lLgotCSAqLwotCXJldCA9IHJlcXVlc3RfaXJxKHhoY2ktPm1zaXhfZW50cmllc1swXS52ZWN0b3IsICZ4aGNpX2lycSwgMCwKLQkJCSJ4SENJIiwgeGhjaV90b19oY2QoeGhjaSkpOwotCWlmIChyZXQpIHsKLQkJeGhjaV9lcnIoeGhjaSwgIkZhaWxlZCB0byBhbGxvY2F0ZSBNU0ktWCBpbnRlcnJ1cHRcbiIpOwotCQlnb3RvIGRpc2FibGVfbXNpeDsKKwlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+bXNpeF9jb3VudDsgaSsrKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKHhoY2ktPm1zaXhfZW50cmllc1tpXS52ZWN0b3IsCisJCQkJKGlycV9oYW5kbGVyX3QpeGhjaV9tc2lfaXJxLAorCQkJCTAsICJ4aGNpX2hjZCIsIHhoY2lfdG9faGNkKHhoY2kpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZGlzYWJsZV9tc2l4OwogCX0KLQl4aGNpX2RiZyh4aGNpLCAiRmluaXNoZWQgc2V0dGluZyB1cCBNU0ktWFxuIik7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OwogCiBkaXNhYmxlX21zaXg6CisJeGhjaV9lcnIoeGhjaSwgImRpc2FibGUgTVNJLVggaW50ZXJydXB0XG4iKTsKKwl4aGNpX2ZyZWVfaXJxKHhoY2kpOwogCXBjaV9kaXNhYmxlX21zaXgocGRldik7CiBmcmVlX2VudHJpZXM6CiAJa2ZyZWUoeGhjaS0+bXNpeF9lbnRyaWVzKTsKQEAgLTIxNSwyMSArMjc3LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogWFhYOiBjb2RlIGR1cGxpY2F0aW9uOyBjYW4geGhjaV9zZXR1cF9tc2l4IGNhbGwgdGhpcz8gKi8KIC8qIEZyZWUgYW55IElSUXMgYW5kIGRpc2FibGUgTVNJLVggKi8KIHN0YXRpYyB2b2lkIHhoY2lfY2xlYW51cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7Ci0JaWYgKCF4aGNpLT5tc2l4X2VudHJpZXMpCi0JCXJldHVybjsKIAotCWZyZWVfaXJxKHhoY2ktPm1zaXhfZW50cmllc1swXS52ZWN0b3IsIHhoY2kpOwotCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0Ja2ZyZWUoeGhjaS0+bXNpeF9lbnRyaWVzKTsKLQl4aGNpLT5tc2l4X2VudHJpZXMgPSBOVUxMOwotCXhoY2lfZGJnKHhoY2ksICJGaW5pc2hlZCBjbGVhbmluZyB1cCBNU0ktWFxuIik7CisJeGhjaV9mcmVlX2lycSh4aGNpKTsKKworCWlmICh4aGNpLT5tc2l4X2VudHJpZXMpIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChwZGV2KTsKKwkJa2ZyZWUoeGhjaS0+bXNpeF9lbnRyaWVzKTsKKwkJeGhjaS0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKwl9IGVsc2UgeworCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJfQorCisJcmV0dXJuOwogfQotI2VuZGlmCiAKIC8qCiAgKiBJbml0aWFsaXplIG1lbW9yeSBmb3IgSENEIGFuZCB4SEMgKG9uZS10aW1lIGluaXQpLgpAQCAtMjU3LDEwMCArMzIxLDggQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKgotICogQ2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0IHdoZW4gdGhlcmUgbWlnaHQgYmUgd29yawotICogcXVldWVkIG9uIHRoZSBldmVudCByaW5nCi0gKgotICogeGhjaS0+bG9jayBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLgotICovCi1zdGF0aWMgdm9pZCB4aGNpX3dvcmsoc3RydWN0IHhoY2lfaGNkICp4aGNpKQotewotCXUzMiB0ZW1wOwotCXU2NCB0ZW1wXzY0OwotCi0JLyoKLQkgKiBDbGVhciB0aGUgb3AgcmVnIGludGVycnVwdCBzdGF0dXMgZmlyc3QsCi0JICogc28gd2UgY2FuIHJlY2VpdmUgaW50ZXJydXB0cyBmcm9tIG90aGVyIE1TSS1YIGludGVycnVwdGVycy4KLQkgKiBXcml0ZSAxIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzLgotCSAqLwotCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwotCXRlbXAgfD0gU1RTX0VJTlQ7Ci0JeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cyk7Ci0JLyogRklYTUUgd2hlbiBNU0ktWCBpcyBzdXBwb3J0ZWQgYW5kIHRoZXJlIGFyZSBtdWx0aXBsZSB2ZWN0b3JzICovCi0JLyogQ2xlYXIgdGhlIE1TSS1YIGV2ZW50IGludGVycnVwdCBzdGF0dXMgKi8KLQotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+aXJfc2V0LT5pcnFfcGVuZGluZyk7Ci0JdGVtcCB8PSAweDM7Ci0JeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCS8qIEZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQl4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQotCWlmICh4aGNpLT54aGNfc3RhdGUgJiBYSENJX1NUQVRFX0RZSU5HKQotCQl4aGNpX2RiZyh4aGNpLCAieEhDSSBkeWluZywgaWdub3JpbmcgaW50ZXJydXB0LiAiCi0JCQkJIlNob3VsZG4ndCBJUlFzIGJlIGRpc2FibGVkP1xuIik7Ci0JZWxzZQotCQkvKiBGSVhNRSB0aGlzIHNob3VsZCBiZSBhIGRlbGF5ZWQgc2VydmljZSByb3V0aW5lCi0JCSAqIHRoYXQgY2xlYXJzIHRoZSBFSEIuCi0JCSAqLwotCQl4aGNpX2hhbmRsZV9ldmVudCh4aGNpKTsKLQotCS8qIENsZWFyIHRoZSBldmVudCBoYW5kbGVyIGJ1c3kgZmxhZyAoUlcxQyk7IHRoZSBldmVudCByaW5nIHNob3VsZCBiZSBlbXB0eS4gKi8KLQl0ZW1wXzY0ID0geGhjaV9yZWFkXzY0KHhoY2ksICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCB0ZW1wXzY0IHwgRVJTVF9FSEIsICZ4aGNpLT5pcl9zZXQtPmVyc3RfZGVxdWV1ZSk7Ci0JLyogRmx1c2ggcG9zdGVkIHdyaXRlcyAtLSBGSVhNRSBpcyB0aGlzIG5lY2Vzc2FyeT8gKi8KLQl4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLX0KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoKLSAqIHhIQ0kgc3BlYyBzYXlzIHdlIGNhbiBnZXQgYW4gaW50ZXJydXB0LCBhbmQgaWYgdGhlIEhDIGhhcyBhbiBlcnJvciBjb25kaXRpb24sCi0gKiB3ZSBtaWdodCBnZXQgYmFkIGRhdGEgb3V0IG9mIHRoZSBldmVudCByaW5nLiAgU2VjdGlvbiA0LjEwLjIuNyBoYXMgYSBsaXN0IG9mCi0gKiBpbmRpY2F0b3JzIG9mIGFuIGV2ZW50IFRSQiBlcnJvciwgYnV0IHdlIGNoZWNrIHRoZSBzdGF0dXMgKmZpcnN0KiB0byBiZSBzYWZlLgotICovCi1pcnFyZXR1cm5fdCB4aGNpX2lycShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQotewotCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Ci0JdTMyIHRlbXAsIHRlbXAyOwotCXVuaW9uIHhoY2lfdHJiICp0cmI7Ci0KLQlzcGluX2xvY2soJnhoY2ktPmxvY2spOwotCXRyYiA9IHhoY2ktPmV2ZW50X3JpbmctPmRlcXVldWU7Ci0JLyogQ2hlY2sgaWYgdGhlIHhIQyBnZW5lcmF0ZWQgdGhlIGludGVycnVwdCwgb3IgdGhlIGlycSBpcyBzaGFyZWQgKi8KLQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+c3RhdHVzKTsKLQl0ZW1wMiA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYgJiYgdGVtcDIgPT0gMHhmZmZmZmZmZikKLQkJZ290byBod19kaWVkOwotCi0JaWYgKCEodGVtcCAmIFNUU19FSU5UKSAmJiAhRVJfSVJRX1BFTkRJTkcodGVtcDIpKSB7Ci0JCXNwaW5fdW5sb2NrKCZ4aGNpLT5sb2NrKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQl4aGNpX2RiZyh4aGNpLCAib3AgcmVnIHN0YXR1cyA9ICUwOHhcbiIsIHRlbXApOwotCXhoY2lfZGJnKHhoY2ksICJpciBzZXQgaXJxX3BlbmRpbmcgPSAlMDh4XG4iLCB0ZW1wMik7Ci0JeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmcgZGVxdWV1ZSBwdHI6XG4iKTsKLQl4aGNpX2RiZyh4aGNpLCAiQCVsbHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpeGhjaV90cmJfdmlydF90b19kbWEoeGhjaS0+ZXZlbnRfcmluZy0+ZGVxX3NlZywgdHJiKSwKLQkJCWxvd2VyXzMyX2JpdHModHJiLT5saW5rLnNlZ21lbnRfcHRyKSwKLQkJCXVwcGVyXzMyX2JpdHModHJiLT5saW5rLnNlZ21lbnRfcHRyKSwKLQkJCSh1bnNpZ25lZCBpbnQpIHRyYi0+bGluay5pbnRyX3RhcmdldCwKLQkJCSh1bnNpZ25lZCBpbnQpIHRyYi0+bGluay5jb250cm9sKTsKLQotCWlmICh0ZW1wICYgU1RTX0ZBVEFMKSB7Ci0JCXhoY2lfd2Fybih4aGNpLCAiV0FSTklORzogSG9zdCBTeXN0ZW0gRXJyb3JcbiIpOwotCQl4aGNpX2hhbHQoeGhjaSk7Ci1od19kaWVkOgotCQl4aGNpX3RvX2hjZCh4aGNpKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOwotCQlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7Ci0JCXJldHVybiAtRVNIVVRET1dOOwotCX0KLQotCXhoY2lfd29yayh4aGNpKTsKLQlzcGluX3VubG9jaygmeGhjaS0+bG9jayk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19CiAKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwogdm9pZCB4aGNpX2V2ZW50X3Jpbmdfd29yayh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTQyMywyMSArMzk1LDM2IEBACiB7CiAJdTMyIHRlbXA7CiAJdTY0IHRlbXBfNjQ7CisJdTMyIHJldDsKIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXN0cnVjdCBwY2lfZGV2ICAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CiAJdm9pZCAoKmRvb3JiZWxsKShzdHJ1Y3QgeGhjaV9oY2QgKikgPSBOVUxMOwogCiAJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKLQloY2QtPnBvbGxfcmggPSAwOwogCiAJeGhjaV9kYmcoeGhjaSwgInhoY2lfcnVuXG4iKTsKLSNpZiAwCS8qIEZJWE1FOiBNU0kgbm90IHNldHVwIHlldCAqLwotCS8qIERvIHRoaXMgYXQgdGhlIHZlcnkgbGFzdCBtaW51dGUgKi8KLQlyZXQgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiByZXQ7CisJLyogdW5yZWdpc3RlciB0aGUgbGVnYWN5IGludGVycnVwdCAqLworCWlmIChoY2QtPmlycSkKKwkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CisJaGNkLT5pcnEgPSAtMTsKIAotCXJldHVybiAtRU5PU1lTOwotI2VuZGlmCisJcmV0ID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOworCWlmIChyZXQpCisJCS8qIGZhbGwgYmFjayB0byBtc2kqLworCQlyZXQgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKKworCWlmIChyZXQpIHsKKwkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLworCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOworCQlpZiAocmV0KSB7CisJCQl4aGNpX2Vycih4aGNpLCAicmVxdWVzdCBpbnRlcnJ1cHQgJWQgZmFpbGVkXG4iLAorCQkJCQlwZGV2LT5pcnEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQloY2QtPmlycSA9IHBkZXYtPmlycTsKKwl9CisKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwogCWluaXRfdGltZXIoJnhoY2ktPmV2ZW50X3JpbmdfdGltZXIpOwogCXhoY2ktPmV2ZW50X3JpbmdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB4aGNpOwpAQCAtNDk1LDcgKzQ4Miw2IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXhoY2lfZGJnKHhoY2ksICIvLyBAJXAgPSAweCV4XG4iLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCwgdGVtcCk7CiAJaWYgKGRvb3JiZWxsKQogCQkoKmRvb3JiZWxsKSh4aGNpKTsKIAlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9ORUNfSE9TVCkKQEAgLTUyMiwxMSArNTA4LDkgQEAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAl4aGNpX2hhbHQoeGhjaSk7CiAJeGhjaV9yZXNldCh4aGNpKTsKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCi0jaWYgMAkvKiBObyBNU0kgeWV0ICovCi0JeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwogCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwogCXhoY2ktPnpvbWJpZSA9IDE7CkBAIC01NjAsMTEgKzU0NCw4IEBACiAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAl4aGNpX2hhbHQoeGhjaSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKLQotI2lmIDAKIAl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKLSNlbmRpZgorCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9zaHV0ZG93biBjb21wbGV0ZWQgLSBzdGF0dXMgPSAleFxuIiwKIAkJICAgIHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cykpOwpAQCAtNzIwLDcgKzcwMSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgZXBfaW5kZXg7Ci0KKwlzdHJ1Y3QgdXJiX3ByaXYJKnVyYl9wcml2OworCWludCBzaXplLCBpOwogCiAJaWYgKCF1cmIgfHwgeGhjaV9jaGVja19hcmdzKGhjZCwgdXJiLT5kZXYsIHVyYi0+ZXAsIHRydWUsIF9fZnVuY19fKSA8PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczNCwxMiArNzE2LDM2IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JaWYgKCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpIHsKKwlpZiAoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpIHsKIAkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKIAkJCXhoY2lfZGJnKHhoY2ksICJ1cmIgc3VibWl0dGVkIGR1cmluZyBQQ0kgc3VzcGVuZFxuIik7CiAJCXJldCA9IC1FU0hVVERPV047CiAJCWdvdG8gZXhpdDsKIAl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmdXJiLT5lcC0+ZGVzYykpCisJCXNpemUgPSB1cmItPm51bWJlcl9vZl9wYWNrZXRzOworCWVsc2UKKwkJc2l6ZSA9IDE7CisKKwl1cmJfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmJfcHJpdikgKworCQkJCSAgc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeGhjaV90ZCAqKSwgbWVtX2ZsYWdzKTsKKwlpZiAoIXVyYl9wcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJdXJiX3ByaXYtPnRkW2ldID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHhoY2lfdGQpLCBtZW1fZmxhZ3MpOworCQlpZiAoIXVyYl9wcml2LT50ZFtpXSkgeworCQkJdXJiX3ByaXYtPmxlbmd0aCA9IGk7CisJCQl4aGNpX3VyYl9mcmVlX3ByaXYoeGhjaSwgdXJiX3ByaXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwl1cmJfcHJpdi0+bGVuZ3RoID0gc2l6ZTsKKwl1cmJfcHJpdi0+dGRfY250ID0gMDsKKwl1cmItPmhjcHJpdiA9IHVyYl9wcml2OworCiAJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woJnVyYi0+ZXAtPmRlc2MpKSB7CiAJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbWF4IHBhY2tldCBzaXplIGZvciB0aGUgZGVmYXVsdCBjb250cm9sCiAJCSAqIGVuZHBvaW50IGNoYW5nZWQgZHVyaW5nIEZTIGRldmljZSBlbnVtZXJhdGlvbgpAQCAtNzg4LDExICs3OTQsMTggQEAKIAkJCQlzbG90X2lkLCBlcF9pbmRleCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykKKwkJCWdvdG8gZHlpbmc7CisJCXJldCA9IHhoY2lfcXVldWVfaXNvY190eF9wcmVwYXJlKHhoY2ksIEdGUF9BVE9NSUMsIHVyYiwKKwkJCQlzbG90X2lkLCBlcF9pbmRleCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAl9CiBleGl0OgogCXJldHVybiByZXQ7CiBkeWluZzoKKwl4aGNpX3VyYl9mcmVlX3ByaXYoeGhjaSwgdXJiX3ByaXYpOworCXVyYi0+aGNwcml2ID0gTlVMTDsKIAl4aGNpX2RiZyh4aGNpLCAiRXAgMHgleDogVVJCICVwIHN1Ym1pdHRlZCBmb3IgIgogCQkJIm5vbi1yZXNwb25zaXZlIHhIQ0kgaG9zdC5cbiIsCiAJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsIHVyYik7CkBAIC04MDAsNiArODEzLDQ3IEBACiAJcmV0dXJuIC1FU0hVVERPV047CiB9CiAKKy8qIEdldCB0aGUgcmlnaHQgcmluZyBmb3IgdGhlIGdpdmVuIFVSQi4KKyAqIElmIHRoZSBlbmRwb2ludCBzdXBwb3J0cyBzdHJlYW1zLCBib3VuZGFyeSBjaGVjayB0aGUgVVJCJ3Mgc3RyZWFtIElELgorICogSWYgdGhlIGVuZHBvaW50IGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1zLCByZXR1cm4gdGhlIHNpbmd1bGFyIGVuZHBvaW50IHJpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX3VyYl90b190cmFuc2Zlcl9yaW5nKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKKwkJc3RydWN0IHVyYiAqdXJiKQoreworCXVuc2lnbmVkIGludCBzbG90X2lkOworCXVuc2lnbmVkIGludCBlcF9pbmRleDsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkOworCXN0cnVjdCB4aGNpX3ZpcnRfZXAgKmVwOworCisJc2xvdF9pZCA9IHVyYi0+ZGV2LT5zbG90X2lkOworCWVwX2luZGV4ID0geGhjaV9nZXRfZW5kcG9pbnRfaW5kZXgoJnVyYi0+ZXAtPmRlc2MpOworCXN0cmVhbV9pZCA9IHVyYi0+c3RyZWFtX2lkOworCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07CisJLyogQ29tbW9uIGNhc2U6IG5vIHN0cmVhbXMgKi8KKwlpZiAoIShlcC0+ZXBfc3RhdGUgJiBFUF9IQVNfU1RSRUFNUykpCisJCXJldHVybiBlcC0+cmluZzsKKworCWlmIChzdHJlYW1faWQgPT0gMCkgeworCQl4aGNpX3dhcm4oeGhjaSwKKwkJCQkiV0FSTjogU2xvdCBJRCAldSwgZXAgaW5kZXggJXUgaGFzIHN0cmVhbXMsICIKKwkJCQkiYnV0IFVSQiBoYXMgbm8gc3RyZWFtIElELlxuIiwKKwkJCQlzbG90X2lkLCBlcF9pbmRleCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdHJlYW1faWQgPCBlcC0+c3RyZWFtX2luZm8tPm51bV9zdHJlYW1zKQorCQlyZXR1cm4gZXAtPnN0cmVhbV9pbmZvLT5zdHJlYW1fcmluZ3Nbc3RyZWFtX2lkXTsKKworCXhoY2lfd2Fybih4aGNpLAorCQkJIldBUk46IFNsb3QgSUQgJXUsIGVwIGluZGV4ICV1IGhhcyAiCisJCQkic3RyZWFtIElEcyAxIHRvICV1IGFsbG9jYXRlZCwgIgorCQkJImJ1dCBzdHJlYW0gSUQgJXUgaXMgcmVxdWVzdGVkLlxuIiwKKwkJCXNsb3RfaWQsIGVwX2luZGV4LAorCQkJZXAtPnN0cmVhbV9pbmZvLT5udW1fc3RyZWFtcyAtIDEsCisJCQlzdHJlYW1faWQpOworCXJldHVybiBOVUxMOworfQorCiAvKgogICogUmVtb3ZlIHRoZSBVUkIncyBURCBmcm9tIHRoZSBlbmRwb2ludCByaW5nLiAgVGhpcyBtYXkgY2F1c2UgdGhlIEhDIHRvIHN0b3AKICAqIFVTQiB0cmFuc2ZlcnMsIHBvdGVudGlhbGx5IHN0b3BwaW5nIGluIHRoZSBtaWRkbGUgb2YgYSBUUkIgYnVmZmVyLiAgVGhlIEhDCkBAIC04MzQsOSArODg4LDEwIEBACiBpbnQgeGhjaV91cmJfZGVxdWV1ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAJdTMyIHRlbXA7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpOworCXN0cnVjdCB1cmJfcHJpdgkqdXJiX3ByaXY7CiAJc3RydWN0IHhoY2lfdGQgKnRkOwogCXVuc2lnbmVkIGludCBlcF9pbmRleDsKIAlzdHJ1Y3QgeGhjaV9yaW5nICplcF9yaW5nOwpAQCAtODUxLDEyICs5MDYsMTIgQEAKIAl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+c3RhdHVzKTsKIAlpZiAodGVtcCA9PSAweGZmZmZmZmZmKSB7CiAJCXhoY2lfZGJnKHhoY2ksICJIVyBkaWVkLCBmcmVlaW5nIFRELlxuIik7Ci0JCXRkID0gKHN0cnVjdCB4aGNpX3RkICopIHVyYi0+aGNwcml2OworCQl1cmJfcHJpdiA9IHVyYi0+aGNwcml2OwogCiAJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQl1c2JfaGNkX2dpdmViYWNrX3VyYih4aGNpX3RvX2hjZCh4aGNpKSwgdXJiLCAtRVNIVVRET1dOKTsKLQkJa2ZyZWUodGQpOworCQl4aGNpX3VyYl9mcmVlX3ByaXYoeGhjaSwgdXJiX3ByaXYpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAoeGhjaS0+eGhjX3N0YXRlICYgWEhDSV9TVEFURV9EWUlORykgewpAQCAtODg0LDkgKzkzOSwxNCBAQAogCiAJeGhjaV9kYmcoeGhjaSwgIkVuZHBvaW50IHJpbmc6XG4iKTsKIAl4aGNpX2RlYnVnX3JpbmcoeGhjaSwgZXBfcmluZyk7Ci0JdGQgPSAoc3RydWN0IHhoY2lfdGQgKikgdXJiLT5oY3ByaXY7CiAKLQlsaXN0X2FkZF90YWlsKCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QsICZlcC0+Y2FuY2VsbGVkX3RkX2xpc3QpOworCXVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisKKwlmb3IgKGkgPSB1cmJfcHJpdi0+dGRfY250OyBpIDwgdXJiX3ByaXYtPmxlbmd0aDsgaSsrKSB7CisJCXRkID0gdXJiX3ByaXYtPnRkW2ldOworCQlsaXN0X2FkZF90YWlsKCZ0ZC0+Y2FuY2VsbGVkX3RkX2xpc3QsICZlcC0+Y2FuY2VsbGVkX3RkX2xpc3QpOworCX0KKwogCS8qIFF1ZXVlIGEgc3RvcCBlbmRwb2ludCBjb21tYW5kLCBidXQgb25seSBpZiB0aGlzIGlzCiAJICogdGhlIGZpcnN0IGNhbmNlbGxhdGlvbiB0byBiZSBoYW5kbGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCA2YzdlMzQzLi4zNGE2MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNzIwLDYgKzcyMCwxNCBAQAogCXN0cnVjdCB0aW1lcl9saXN0CXN0b3BfY21kX3RpbWVyOwogCWludAkJCXN0b3BfY21kc19wZW5kaW5nOwogCXN0cnVjdCB4aGNpX2hjZAkJKnhoY2k7CisJLyoKKwkgKiBTb21ldGltZXMgdGhlIHhIQyBjYW4gbm90IHByb2Nlc3MgaXNvY2hyb25vdXMgZW5kcG9pbnQgcmluZyBxdWlja2x5CisJICogZW5vdWdoLCBhbmQgaXQgd2lsbCBtaXNzIHNvbWUgaXNvYyB0ZHMgb24gdGhlIHJpbmcgYW5kIGdlbmVyYXRlCisJICogYSBNaXNzZWQgU2VydmljZSBFcnJvciBFdmVudC4KKwkgKiBTZXQgc2tpcCBmbGFnIHdoZW4gcmVjZWl2ZSBhIE1pc3NlZCBTZXJ2aWNlIEVycm9yIEV2ZW50IGFuZAorCSAqIHByb2Nlc3MgdGhlIG1pc3NlZCB0ZHMgb24gdGhlIGVuZHBvaW50IHJpbmcuCisJICovCisJYm9vbAkJCXNraXA7CiB9OwogCiBzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSB7CkBAIC05MTEsNiArOTE5LDkgQEAKIC8qIENvbnRyb2wgdHJhbnNmZXIgVFJCIHNwZWNpZmljIGZpZWxkcyAqLwogI2RlZmluZSBUUkJfRElSX0lOCQkoMTw8MTYpCiAKKy8qIElzb2Nocm9ub3VzIFRSQiBzcGVjaWZpYyBmaWVsZHMgKi8KKyNkZWZpbmUgVFJCX1NJQQkJCSgxPDwzMSkKKwogc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgewogCXUzMiBmaWVsZFs0XTsKIH07CkBAIC0xMDgyLDYgKzEwOTMsMTIgQEAKIAlkbWFfYWRkcl90ICpzcF9kbWFfYnVmZmVyczsKIH07CiAKK3N0cnVjdCB1cmJfcHJpdiB7CisJaW50CWxlbmd0aDsKKwlpbnQJdGRfY250OworCXN0cnVjdAl4aGNpX3RkCSp0ZFswXTsKK307CisKIC8qCiAgKiBFYWNoIHNlZ21lbnQgdGFibGUgZW50cnkgaXMgNCozMmJpdHMgbG9uZy4gIDFLIHNlZW1zIGxpa2UgYW4gb2sgc2l6ZToKICAqICgxSyBieXRlcyAqIDhieXRlcy9iaXQpIC8gKDQqMzIgYml0cykgPSA2NCBzZWdtZW50IGVudHJpZXMgaW4gdGhlIHRhYmxlLApAQCAtMTEzMCw3ICsxMTQ3LDcgQEAKIAlpbnQJCXBhZ2Vfc2l6ZTsKIAkvKiBWYWxpZCB2YWx1ZXMgYXJlIDEyIHRvIDIwLCBpbmNsdXNpdmUgKi8KIAlpbnQJCXBhZ2Vfc2hpZnQ7Ci0JLyogb25seSBvbmUgTVNJIHZlY3RvciBmb3Igbm93LCBidXQgbWlnaHQgbmVlZCBtb3JlIGxhdGVyICovCisJLyogbXNpLXggdmVjdG9ycyAqLwogCWludAkJbXNpeF9jb3VudDsKIAlzdHJ1Y3QgbXNpeF9lbnRyeQkqbXNpeF9lbnRyaWVzOwogCS8qIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMTMyNywxMSArMTM0NCw2IEBACiBzdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKAogCQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCwKIAkJdTY0IGFkZHJlc3MpOwotc3RydWN0IHhoY2lfcmluZyAqeGhjaV91cmJfdG9fdHJhbnNmZXJfcmluZyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCXN0cnVjdCB1cmIgKnVyYik7Ci1zdHJ1Y3QgeGhjaV9yaW5nICp4aGNpX3RyaWFkX3RvX3RyYW5zZmVyX3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAotCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAotCQl1bnNpZ25lZCBpbnQgc3RyZWFtX2lkKTsKIHN0cnVjdCB4aGNpX3JpbmcgKnhoY2lfc3RyZWFtX2lkX3RvX3JpbmcoCiAJCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCwKQEAgLTEzMzksNiArMTM1MSw3IEBACiBzdHJ1Y3QgeGhjaV9jb21tYW5kICp4aGNpX2FsbG9jX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQlib29sIGFsbG9jYXRlX2luX2N0eCwgYm9vbCBhbGxvY2F0ZV9jb21wbGV0aW9uLAogCQlnZnBfdCBtZW1fZmxhZ3MpOwordm9pZCB4aGNpX3VyYl9mcmVlX3ByaXYoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2KTsKIHZvaWQgeGhjaV9mcmVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kKTsKIApAQCAtMTM1OCw2ICsxMzcxLDcgQEAKIHZvaWQgeGhjaV9zaHV0ZG93bihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKIGludCB4aGNpX2dldF9mcmFtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKIGlycXJldHVybl90IHhoY2lfaXJxKHN0cnVjdCB1c2JfaGNkICpoY2QpOworaXJxcmV0dXJuX3QgeGhjaV9tc2lfaXJxKGludCBpcnEsIHN0cnVjdCB1c2JfaGNkICpoY2QpOwogaW50IHhoY2lfYWxsb2NfZGV2KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIHZvaWQgeGhjaV9mcmVlX2RldihzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBpbnQgeGhjaV9hbGxvY19zdHJlYW1zKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LApAQCAtMTM4Niw4ICsxNDAwLDYgQEAKIGludCB4aGNpX2lzX3ZlbmRvcl9pbmZvX2NvZGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1bnNpZ25lZCBpbnQgdHJiX2NvbXBfY29kZSk7CiB2b2lkIHhoY2lfcmluZ19jbWRfZGIoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgKnhoY2lfc2V0dXBfb25lX25vb3Aoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKLXZvaWQgeGhjaV9oYW5kbGVfZXZlbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKLXZvaWQgeGhjaV9zZXRfaGNfZXZlbnRfZGVxKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiBpbnQgeGhjaV9xdWV1ZV9zbG90X2NvbnRyb2woc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgdHJiX3R5cGUsIHUzMiBzbG90X2lkKTsKIGludCB4aGNpX3F1ZXVlX2FkZHJlc3NfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgZG1hX2FkZHJfdCBpbl9jdHhfcHRyLAogCQl1MzIgc2xvdF9pZCk7CkBAIC0xNDAxLDYgKzE0MTMsOCBAQAogCQlpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4KTsKIGludCB4aGNpX3F1ZXVlX2ludHJfdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsIHN0cnVjdCB1cmIgKnVyYiwKIAkJaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7CitpbnQgeGhjaV9xdWV1ZV9pc29jX3R4X3ByZXBhcmUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBnZnBfdCBtZW1fZmxhZ3MsCisJCXN0cnVjdCB1cmIgKnVyYiwgaW50IHNsb3RfaWQsIHVuc2lnbmVkIGludCBlcF9pbmRleCk7CiBpbnQgeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCiAJCXUzMiBzbG90X2lkLCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKTsKIGludCB4aGNpX3F1ZXVlX2V2YWx1YXRlX2NvbnRleHQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwppbmRleCA4MmUxNjYzLi5hZWNmMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTY1MCw3ICs2NTAsNyBAQAogCiBzdGF0aWMgaW50IGZ0ZGlfZWxhbl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSAoc3RydWN0IHVzYl9mdGRpICopZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAgICAgICAgIGlmIChmdGRpID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgICAgIHVwKCZmdGRpLT5zd19sb2NrKTsgICAgICAgIC8qIGRlY3JlbWVudCB0aGUgY291bnQgb24gb3VyIGRldmljZSAqLwpAQCAtNjczLDcgKzY3Myw3IEBACiAgICAgICAgIGludCBieXRlc19yZWFkID0gMDsKICAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7CiAgICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKLSAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gKHN0cnVjdCB1c2JfZnRkaSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jIGIvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYwppbmRleCA3ZGM5ZDNjLi4yZGU0OWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaW93YXJyaW9yLmg+CiAKQEAgLTYxLDYgKzYxLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoaW93YXJyaW9yX211dGV4KTsKIHN0YXRpYyBpbnQgZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1Zz0xIGVuYWJsZXMgZGVidWdnaW5nIG1lc3NhZ2VzIik7CkBAIC0yODIsNyArMjgzLDcgQEAKIAlpbnQgcmVhZF9pZHg7CiAJaW50IG9mZnNldDsKIAotCWRldiA9IChzdHJ1Y3QgaW93YXJyaW9yICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwogCWlmIChkZXYgPT0gTlVMTCB8fCAhZGV2LT5wcmVzZW50KQpAQCAtMzQ4LDcgKzM0OSw3IEBACiAJY2hhciAqYnVmID0gTlVMTDsJLyogZm9yIElPVzI0IGFuZCBJT1c1NiB3ZSBuZWVkIGEgYnVmZmVyICovCiAJc3RydWN0IHVyYiAqaW50X291dF91cmIgPSBOVUxMOwogCi0JZGV2ID0gKHN0cnVjdCBpb3dhcnJpb3IgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCkBAIC00ODMsNyArNDg0LDcgQEAKIAlpbnQgcmV0dmFsOwogCWludCBpb19yZXM7CQkvKiBjaGVja3MgZm9yIGJ5dGVzIHJlYWQvd3JpdHRlbiBhbmQgY29weV90by9mcm9tX3VzZXIgcmVzdWx0cyAqLwogCi0JZGV2ID0gKHN0cnVjdCBpb3dhcnJpb3IgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00OTMsNyArNDk0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZpb3dhcnJpb3JfbXV0ZXgpOwogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCkBAIC01ODUsNyArNTg2LDcgQEAKIGVycm9yX291dDoKIAkvKiB1bmxvY2sgdGhlIGRldmljZSAqLwogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW93YXJyaW9yX211dGV4KTsKIAlrZnJlZShidWZmZXIpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC02MDIsMTIgKzYwMywxMiBAQAogCiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW93YXJyaW9yX211dGV4KTsKIAlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmlvd2Fycmlvcl9kcml2ZXIsIHN1Ym1pbm9yKTsKIAlpZiAoIWludGVyZmFjZSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaW93YXJyaW9yX211dGV4KTsKIAkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLCBfX2Z1bmNfXywKIAkJICAgIHN1Ym1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02MTcsNyArNjE4LDcgQEAKIAlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJaWYgKCFkZXYpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpb3dhcnJpb3Jfb3Blbl9kaXNjX2xvY2spOwotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmaW93YXJyaW9yX211dGV4KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC02NDQsNyArNjQ1LDcgQEAKIAogb3V0OgogCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmaW93YXJyaW9yX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC02NTYsNyArNjU3LDcgQEAKIAlzdHJ1Y3QgaW93YXJyaW9yICpkZXY7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkZXYgPSAoc3RydWN0IGlvd2FycmlvciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IDg1NDdiZjkuLjY0ODJjNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAKIAlkYmcoMiwgIiVzOiBlbnRlciIsIF9fZnVuY19fKTsKIAotCWRldiA9IChzdHJ1Y3QgbGVnb191c2JfdG93ZXIgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRiZygxLCAiJXM6IG9iamVjdCBpcyBOVUxMIiwgX19mdW5jX18pOwpAQCAtNTk3LDcgKzU5Nyw3IEBACiAKIAlkYmcoMiwgIiVzOiBlbnRlciwgY291bnQgPSAlWmQiLCBfX2Z1bmNfXywgY291bnQpOwogCi0JZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrKSkgewpAQCAtNjg2LDcgKzY4Niw3IEBACiAKIAlkYmcoMiwgIiVzOiBlbnRlciwgY291bnQgPSAlWmQiLCBfX2Z1bmNfXywgY291bnQpOwogCi0JZGV2ID0gKHN0cnVjdCBsZWdvX3VzYl90b3dlciAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggYTg1NzcxYi4uY2MxM2FlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CkBAIC03Miw2ICs3Miw3IEBACiAJc3RydWN0IG11dGV4IGxvY2s7ICAgICAgICAgIC8qIGdlbmVyYWwgcmFjZSBhdm9pZGFuY2UgKi8KIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgocmlvNTAwX211dGV4KTsKIHN0YXRpYyBzdHJ1Y3QgcmlvX3VzYl9kYXRhIHJpb19pbnN0YW5jZTsKIAogc3RhdGljIGludCBvcGVuX3JpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTc5LDEyICs4MCwxMiBAQAogCXN0cnVjdCByaW9fdXNiX2RhdGEgKnJpbyA9ICZyaW9faW5zdGFuY2U7CiAKIAkvKiBhZ2FpbnN0IGRpc2Nvbm5lY3QoKSAqLwotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcmlvNTAwX211dGV4KTsKIAltdXRleF9sb2NrKCYocmlvLT5sb2NrKSk7CiAKIAlpZiAocmlvLT5pc29wZW4gfHwgIXJpby0+cHJlc2VudCkgewogCQltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJnJpbzUwMF9tdXRleCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXJpby0+aXNvcGVuID0gMTsKQEAgLTk0LDcgKzk1LDcgQEAKIAltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKIAogCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBvcGVuZWQuXG4iKTsKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZyaW81MDBfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTEsNyArNDkyLDcgQEAKIAlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmcmlvNTAwX211dGV4KTsKIAlpZiAocmlvKSB7CiAJCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3Jpb19jbGFzcyk7CiAKQEAgLTUwMSw3ICs1MDIsNyBAQAogCQkJLyogYmV0dGVyIGxldCBpdCBmaW5pc2ggLSB0aGUgcmVsZWFzZSB3aWxsIGRvIHdoYXRzIG5lZWRlZCAqLwogCQkJcmlvLT5yaW9fZGV2ID0gTlVMTDsKIAkJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwotCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJbXV0ZXhfdW5sb2NrKCZyaW81MDBfbXV0ZXgpOwogCQkJcmV0dXJuOwogCQl9CiAJCWtmcmVlKHJpby0+aWJ1Zik7CkBAIC01MTIsNyArNTEzLDcgQEAKIAkJcmlvLT5wcmVzZW50ID0gMDsKIAkJbXV0ZXhfdW5sb2NrKCYocmlvLT5sb2NrKSk7CiAJfQotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJnJpbzUwMF9tdXRleCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCByaW9fdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKaW5kZXggZDI1ODE0Yy4uNzBkMDBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiLmMKQEAgLTI0ODcsNyArMjQ4Nyw3IEBACiB7CiAJc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqc2lzdXNiOwogCi0JaWYgKCEoc2lzdXNiID0gKHN0cnVjdCBzaXN1c2JfdXNiX2RhdGEgKilmaWxlLT5wcml2YXRlX2RhdGEpKQorCWlmICghKHNpc3VzYiA9IGZpbGUtPnByaXZhdGVfZGF0YSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmc2lzdXNiLT5sb2NrKTsKQEAgLTI1MTksNyArMjUxOSw3IEBACiAJdTE2IGJ1ZjE2OwogCXUzMiBidWYzMiwgYWRkcmVzczsKIAotCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwlpZiAoIShzaXN1c2IgPSBmaWxlLT5wcml2YXRlX2RhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnNpc3VzYi0+bG9jayk7CkBAIC0yNjYxLDcgKzI2NjEsNyBAQAogCXUxNiBidWYxNjsKIAl1MzIgYnVmMzIsIGFkZHJlc3M7CiAKLQlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJaWYgKCEoc2lzdXNiID0gZmlsZS0+cHJpdmF0ZV9kYXRhKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZzaXN1c2ItPmxvY2spOwpAQCAtMjgwNCw3ICsyODA0LDcgQEAKIAlzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICpzaXN1c2I7CiAJbG9mZl90IHJldDsKIAotCWlmICghKHNpc3VzYiA9IChzdHJ1Y3Qgc2lzdXNiX3VzYl9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhKSkKKwlpZiAoIShzaXN1c2IgPSBmaWxlLT5wcml2YXRlX2RhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnNpc3VzYi0+bG9jayk7CkBAIC0yOTY5LDcgKzI5NjksNyBAQAogCWxvbmcgcmV0dmFsID0gMDsKIAl1MzIgX191c2VyICphcmdwID0gKHUzMiBfX3VzZXIgKilhcmc7CiAKLQlpZiAoIShzaXN1c2IgPSAoc3RydWN0IHNpc3VzYl91c2JfZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YSkpCisJaWYgKCEoc2lzdXNiID0gZmlsZS0+cHJpdmF0ZV9kYXRhKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZzaXN1c2ItPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggNzgyOGM3Ni4uZDAwZGRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzAsNiArMjksNyBAQAogI2RlZmluZSBJT0NUTF9HRVRfRFJWX1ZFUlNJT04JMgogCiAKK3N0YXRpYyBERUZJTkVfTVVURVgobGNkX211dGV4KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgLmlkVmVuZG9yID0gMHgxMEQyLCAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiwgfSwKIAl7IH0sCkBAIC03NCwxMiArNzQsMTIgQEAKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCWludCBzdWJtaW5vciwgcjsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmbGNkX211dGV4KTsKIAlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmxjZF9kcml2ZXIsIHN1Ym1pbm9yKTsKIAlpZiAoIWludGVyZmFjZSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmbGNkX211dGV4KTsKIAkJZXJyICgiVVNCTENEOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAogCQkgICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtODksNyArODksNyBAQAogCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAlpZiAoIWRldikgewogCQltdXRleF91bmxvY2soJm9wZW5fZGlzY19tdXRleCk7Ci0JCXVubG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfdW5sb2NrKCZsY2RfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTEwMSwxMyArMTAxLDEzIEBACiAJciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRlcmZhY2UpOwogCWlmIChyIDwgMCkgewogCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBsY2RfZGVsZXRlKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmxjZF9tdXRleCk7CiAJCXJldHVybiByOwogCX0KIAogCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwotCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmxjZF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNiw3ICsxMTYsNyBAQAogewogCXN0cnVjdCB1c2JfbGNkICpkZXY7CiAKLQlkZXYgPSAoc3RydWN0IHVzYl9sY2QgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogCWludCByZXR2YWwgPSAwOwogCWludCBieXRlc19yZWFkOwogCi0JZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCS8qIGRvIGEgYmxvY2tpbmcgYnVsayByZWFkIHRvIGdldCBkYXRhIGZyb20gdGhlIGRldmljZSAqLwogCXJldHZhbCA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsIApAQCAtMTU4LDIwICsxNTgsMjAgQEAKIAl1MTYgYmNkRGV2aWNlOwogCWNoYXIgYnVmWzMwXTsKIAotCWRldiA9IChzdHJ1Y3QgdXNiX2xjZCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSU9DVExfR0VUX0hBUkRfVkVSU0lPTjoKLQkJbG9ja19rZXJuZWwoKTsKKwkJbXV0ZXhfbG9jaygmbGNkX211dGV4KTsKIAkJYmNkRGV2aWNlID0gbGUxNl90b19jcHUoKGRldi0+dWRldiktPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKIAkJc3ByaW50ZihidWYsIiUxZCUxZC4lMWQlMWQiLAogCQkJKGJjZERldmljZSAmIDB4RjAwMCk+PjEyLAogCQkJKGJjZERldmljZSAmIDB4RjAwKT4+OCwKIAkJCShiY2REZXZpY2UgJiAweEYwKT4+NCwKIAkJCShiY2REZXZpY2UgJiAweEYpKTsKLQkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmxjZF9tdXRleCk7CiAJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLGJ1ZixzdHJsZW4oYnVmKSkhPTApCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CkBAIC0yMTcsNyArMjE3LDcgQEAKIAlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwogCWNoYXIgKmJ1ZiA9IE5VTEw7CiAJCi0JZGV2ID0gKHN0cnVjdCB1c2JfbGNkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkKIAkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLwogCWlmIChjb3VudCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwppbmRleCAxNmRmZmU5Li5lZWYzNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCQkJCWlzb19vdXQgPSBlOwogCQkJfQogCQl9Ci0JCWlmICgoaW4gJiYgb3V0KSAgfHwgIChpc29faW4gJiYgaXNvX291dCkpCisJCWlmICgoaW4gJiYgb3V0KSAgfHwgIGlzb19pbiB8fCBpc29fb3V0KQogCQkJZ290byBmb3VuZDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjIsNiArMTYyLDkgQEAKIAkJZGV2LT5pbl9pc29fcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSAodWRldiwKIAkJCQlpc29faW4tPmRlc2MuYkVuZHBvaW50QWRkcmVzcwogCQkJCQkmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJfQorCisJaWYgKGlzb19vdXQpIHsKIAkJZGV2LT5pc29fb3V0ID0gJmlzb19vdXQtPmRlc2M7CiAJCWRldi0+b3V0X2lzb19waXBlID0gdXNiX3NuZGlzb2NwaXBlICh1ZGV2LAogCQkJCWlzb19vdXQtPmRlc2MuYkVuZHBvaW50QWRkcmVzcwpAQCAtMTM3OCw3ICsxMzgxLDYgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCXNpbXBsZV9mcmVlX3VyYiAodXJiKTsKIAogCWN0eC0+cGVuZGluZy0tOwogCWlmIChjdHgtPnBlbmRpbmcgPT0gMCkgewpAQCAtMTQ5NSw2ICsxNDk3LDcgQEAKIAkJCX0KIAogCQkJc2ltcGxlX2ZyZWVfdXJiICh1cmJzIFtpXSk7CisJCQl1cmJzW2ldID0gTlVMTDsKIAkJCWNvbnRleHQucGVuZGluZy0tOwogCQkJY29udGV4dC5zdWJtaXRfZXJyb3IgPSAxOwogCQkJYnJlYWs7CkBAIC0xNTA0LDYgKzE1MDcsMTAgQEAKIAogCXdhaXRfZm9yX2NvbXBsZXRpb24gKCZjb250ZXh0LmRvbmUpOwogCisJZm9yIChpID0gMDsgaSA8IHBhcmFtLT5zZ2xlbjsgaSsrKSB7CisJCWlmICh1cmJzW2ldKQorCQkJc2ltcGxlX2ZyZWVfdXJiKHVyYnNbaV0pOworCX0KIAkvKgogCSAqIElzb2Nocm9ub3VzIHRyYW5zZmVycyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBzb21ldGltZXMuICBBcyBhbgogCSAqIGFyYml0cmFyeSBsaW1pdCwgd2Ugd2lsbCByZXBvcnQgYW4gZXJyb3IgaWYgYW55IHN1Ym1pc3Npb25zCkBAIC0xNTQ4LDYgKzE1NTUsNyBAQAogICogb2ZmIGp1c3Qga2lsbGluZyB0aGUgdXNlcnNwYWNlIHRhc2sgYW5kIHdhaXRpbmcgZm9yIGl0IHRvIGV4aXQuCiAgKi8KIAorLyogTm8gQktMIG5lZWRlZCAqLwogc3RhdGljIGludAogdXNidGVzdF9pb2N0bCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBjb2RlLCB2b2lkICpidWYpCiB7CkBAIC0yMTcwLDcgKzIxNzgsNyBAQAogCS5uYW1lID0JCSJ1c2J0ZXN0IiwKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl1c2J0ZXN0X3Byb2JlLAotCS5pb2N0bCA9CXVzYnRlc3RfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsID0gdXNidGVzdF9pb2N0bCwKIAkuZGlzY29ubmVjdCA9CXVzYnRlc3RfZGlzY29ubmVjdCwKIAkuc3VzcGVuZCA9CXVzYnRlc3Rfc3VzcGVuZCwKIAkucmVzdW1lID0JdXNidGVzdF9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA2MWM3NmIxLi40NGNiMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTY0NiwxNyArNjQ2LDE0IEBACiAJc2l6ZV90IHNpemU7CiAJaW50IHJjOwogCi0JbG9ja19rZXJuZWwoKTsKIAltdXRleF9sb2NrKCZtb25fbG9jayk7CiAJaWYgKChtYnVzID0gbW9uX2J1c19sb29rdXAoaW1pbm9yKGlub2RlKSkpID09IE5VTEwpIHsKIAkJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmIChtYnVzICE9ICZtb25fYnVzMCAmJiBtYnVzLT51X2J1cyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogY29uc2lzdGVuY3kgZXJyb3Igb24gb3BlblxuIik7CiAJCW11dGV4X3VubG9jaygmbW9uX2xvY2spOwotCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNjg5LDcgKzY4Niw2IEBACiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBycDsKIAltdXRleF91bmxvY2soJm1vbl9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiAKIGVycl9hbGxvY2J1ZmY6CkBAIC02OTgsNyArNjk0LDYgQEAKIAlrZnJlZShycCk7CiBlcnJfYWxsb2M6CiAJbXV0ZXhfdW5sb2NrKCZtb25fbG9jayk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByYzsKIH0KIApAQCAtOTU0LDcgKzk0OSw3IEBACiAKIC8qCiAgKi8KLXN0YXRpYyBpbnQgbW9uX2Jpbl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBtb25fYmluX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCS8vIHN0cnVjdCBtb25fYnVzKiBtYnVzID0gcnAtPnIubV9idXM7CkBAIC0xMDA5LDcgKzEwMDQsNyBAQAogCiAJCW11dGV4X2xvY2soJnJwLT5mZXRjaF9sb2NrKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKLQkJbW9uX2ZyZWVfYnVmZihycC0+Yl92ZWMsIHNpemUvQ0hVTktfU0laRSk7CisJCW1vbl9mcmVlX2J1ZmYocnAtPmJfdmVjLCBycC0+Yl9zaXplL0NIVU5LX1NJWkUpOwogCQlrZnJlZShycC0+Yl92ZWMpOwogCQlycC0+Yl92ZWMgID0gdmVjOwogCQlycC0+Yl9zaXplID0gc2l6ZTsKQEAgLTEwOTQsMTkgKzEwODksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBsb25nIG1vbl9iaW5fdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJldDsKLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gbW9uX2Jpbl9pb2N0bChmaWxlLCBjbWQsIGFyZyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogc3RhdGljIGxvbmcgbW9uX2Jpbl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC0xMjUwLDcgKzEyMzIsNyBAQAogCS5yZWFkID0JCW1vbl9iaW5fcmVhZCwKIAkvKiAud3JpdGUgPQltb25fdGV4dF93cml0ZSwgKi8KIAkucG9sbCA9CQltb25fYmluX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsID0gbW9uX2Jpbl91bmxvY2tlZF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBtb25fYmluX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0JbW9uX2Jpbl9jb21wYXRfaW9jdGwsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDNiNzk1YzUuLjU0MGM3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtNzA0LDcgKzcwNCw2IEBACiAjaWZkZWYgQ09ORklHX1VTQl9NVVNCX0hEUkNfSENECiAJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfQ09OTkVDVCkgewogCQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXVzYl90b19oY2QobXVzYik7Ci0JCXZvaWQgX19pb21lbSAqbWJhc2UgPSBtdXNiLT5tcmVnczsKIAogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAJCW11c2ItPmlzX2FjdGl2ZSA9IDE7CkBAIC03MTcsOSArNzE2LDkgQEAKIAkJaWYgKGlzX3BlcmlwaGVyYWxfYWN0aXZlKG11c2IpKSB7CiAJCQkvKiBSRVZJU0lUIEhOUDsganVzdCBmb3JjZSBkaXNjb25uZWN0ICovCiAJCX0KLQkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfSU5UUlRYRSwgbXVzYi0+ZXBtYXNrKTsKLQkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0JfSU5UUlJYRSwgbXVzYi0+ZXBtYXNrICYgMHhmZmZlKTsKLQkJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5UUlVTQkUsIDB4ZjcpOworCQltdXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9JTlRSVFhFLCBtdXNiLT5lcG1hc2spOworCQltdXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9JTlRSUlhFLCBtdXNiLT5lcG1hc2sgJiAweGZmZmUpOworCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9JTlRSVVNCRSwgMHhmNyk7CiAjZW5kaWYKIAkJbXVzYi0+cG9ydDFfc3RhdHVzICY9IH4oVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQKIAkJCQkJfFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RlYnVnZnMuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kZWJ1Z2ZzLmMKaW5kZXggYmJhNzZhZi4uYzc5YTVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZGVidWdmcy5jCkBAIC05MiwyOSArOTIsMjkgQEAKIAl7ICJMU19FT0YxIiwJCTB4N0UsCTggfSwKIAl7ICJTT0ZUX1JTVCIsCQkweDdGLAk4IH0sCiAJeyAiRE1BX0NOVExjaDAiLAkweDIwNCwJMTYgfSwKLQl7ICJETUFfQUREUmNoMCIsCTB4MjA4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoMCIsCTB4MjBDLAkxNiB9LAorCXsgIkRNQV9BRERSY2gwIiwJMHgyMDgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2gwIiwJMHgyMEMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDEiLAkweDIxNCwJMTYgfSwKLQl7ICJETUFfQUREUmNoMSIsCTB4MjE4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoMSIsCTB4MjFDLAkxNiB9LAorCXsgIkRNQV9BRERSY2gxIiwJMHgyMTgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2gxIiwJMHgyMUMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDIiLAkweDIyNCwJMTYgfSwKLQl7ICJETUFfQUREUmNoMiIsCTB4MjI4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoMiIsCTB4MjJDLAkxNiB9LAorCXsgIkRNQV9BRERSY2gyIiwJMHgyMjgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2gyIiwJMHgyMkMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDMiLAkweDIzNCwJMTYgfSwKLQl7ICJETUFfQUREUmNoMyIsCTB4MjM4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoMyIsCTB4MjNDLAkxNiB9LAorCXsgIkRNQV9BRERSY2gzIiwJMHgyMzgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2gzIiwJMHgyM0MsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDQiLAkweDI0NCwJMTYgfSwKLQl7ICJETUFfQUREUmNoNCIsCTB4MjQ4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoNCIsCTB4MjRDLAkxNiB9LAorCXsgIkRNQV9BRERSY2g0IiwJMHgyNDgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2g0IiwJMHgyNEMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDUiLAkweDI1NCwJMTYgfSwKLQl7ICJETUFfQUREUmNoNSIsCTB4MjU4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoNSIsCTB4MjVDLAkxNiB9LAorCXsgIkRNQV9BRERSY2g1IiwJMHgyNTgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2g1IiwJMHgyNUMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDYiLAkweDI2NCwJMTYgfSwKLQl7ICJETUFfQUREUmNoNiIsCTB4MjY4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoNiIsCTB4MjZDLAkxNiB9LAorCXsgIkRNQV9BRERSY2g2IiwJMHgyNjgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2g2IiwJMHgyNkMsCTMyIH0sCiAJeyAiRE1BX0NOVExjaDciLAkweDI3NCwJMTYgfSwKLQl7ICJETUFfQUREUmNoNyIsCTB4Mjc4LAkxNiB9LAotCXsgIkRNQV9DT1VOVGNoNyIsCTB4MjdDLAkxNiB9LAorCXsgIkRNQV9BRERSY2g3IiwJMHgyNzgsCTMyIH0sCisJeyAiRE1BX0NPVU5UY2g3IiwJMHgyN0MsCTMyIH0sCiAJeyAgfQkvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXRfZXAwLmMKaW5kZXggMjFiOTc4OC4uNTliZWY4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldF9lcDAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0X2VwMC5jCkBAIC00MDIsNiArNDAyLDkgQEAKIAkJCQkJbXVzYi0+Zy5hX2FsdF9obnBfc3VwcG9ydCA9IDE7CiAJCQkJCWJyZWFrOwogI2VuZGlmCisJCQkJY2FzZSBVU0JfREVWSUNFX0RFQlVHX01PREU6CisJCQkJCWhhbmRsZWQgPSAwOworCQkJCQlicmVhazsKIHN0YWxsOgogCQkJCWRlZmF1bHQ6CiAJCQkJCWhhbmRsZWQgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKaW5kZXggOTJlODVlMC4uNDMyMzNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdXNiLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkpIHsKKwlpZiAodW5saWtlbHkoIUhDRF9IV19BQ0NFU1NJQkxFKGhjZCkpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm11c2ItPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FU0hVVERPV047CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5kZXggZGM2NmU0My4uNmRjMTA3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC0xNzMsMTAgKzE3Myw3IEBACiAJbXVzYl9jaGFubmVsLT5tYXhfcGFja2V0X3N6ID0gcGFja2V0X3N6OwogCWNoYW5uZWwtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19CVVNZOwogCi0JaWYgKChtb2RlID09IDEpICYmIChsZW4gPj0gcGFja2V0X3N6KSkKLQkJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCAxLCBkbWFfYWRkciwgbGVuKTsKLQllbHNlCi0JCWNvbmZpZ3VyZV9jaGFubmVsKGNoYW5uZWwsIHBhY2tldF9zeiwgMCwgZG1hX2FkZHIsIGxlbik7CisJY29uZmlndXJlX2NoYW5uZWwoY2hhbm5lbCwgcGFja2V0X3N6LCBtb2RlLCBkbWFfYWRkciwgbGVuKTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCmluZGV4IGUwNmQ2NWUuLjIxMTFhMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8cGxhdC9tdXguaD4KLQogI2luY2x1ZGUgIm11c2JfY29yZS5oIgogI2luY2x1ZGUgIm9tYXAyNDMwLmgiCiAKQEAgLTE5NCwxMCArMTkyLDYgQEAKIAl1MzIgbDsKIAlzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmRhdGEgPSBib2FyZF9kYXRhOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLQlvbWFwX2NmZ19yZWcoQUU1XzI0MzBfVVNCMEhTX1NUUCk7Ci0jZW5kaWYKLQogCS8qIFdlIHJlcXVpcmUgc29tZSBraW5kIG9mIGV4dGVybmFsIHRyYW5zY2VpdmVyLCBob29rZWQKIAkgKiB1cCB0aHJvdWdoIFVMUEkuICBUV0w0MDMwLWZhbWlseSBQTUlDcyBpbmNsdWRlIG9uZSwKIAkgKiB3aGljaCBuZWVkcyBhIGRyaXZlciwgZHJpdmVycyBhcmVuJ3QgYWx3YXlzIG5lZWRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKaW5kZXggM2QyZDNlNS4uM2IxMjg5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivb3RnL0tjb25maWcKQEAgLTQ5LDggKzQ5LDYgQEAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgVUxQSSBjb25uZWN0ZWQgVVNCIE9URyB0cmFuc2NlaXZlcnMgd2hpY2gKIAkgIGFyZSBsaWtlbHkgZm91bmQgb24gZW1iZWRkZWQgYm9hcmRzLgogCi0JICBUaGUgb25seSBjaGlwIGN1cnJlbnRseSBzdXBwb3J0ZWQgaXMgTlhQJ3MgSVNQMTUwNAotCiBjb25maWcgVFdMNDAzMF9VU0IKIAl0cmlzdGF0ZSAiVFdMNDAzMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgogCWRlcGVuZHMgb24gVFdMNDAzMF9DT1JFICYmIFJFR1VMQVRPUl9UV0w0MDMwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jIGIvZHJpdmVycy91c2Ivb3RnL3VscGkuYwppbmRleCBkMzMxYjIyLi5jY2M4MTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCisrKyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKQEAgLTMxLDMwICszMSwxMTAgQEAKIAogI2RlZmluZSBVTFBJX0lEKHZlbmRvciwgcHJvZHVjdCkgKCgodmVuZG9yKSA8PCAxNikgfCAocHJvZHVjdCkpCiAKLSNkZWZpbmUgVFJfRkxBRyhmbGFncywgYSwgYikJKCgoZmxhZ3MpICYgYSkgPyBiIDogMCkKLQogLyogVUxQSSBoYXJkY29kZWQgSURzLCB1c2VkIGZvciBwcm9iaW5nICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHVscGlfaWRzW10gPSB7CiAJVUxQSV9JRCgweDA0Y2MsIDB4MTUwNCksCS8qIE5YUCBJU1AxNTA0ICovCisJVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICAgICAgICAvKiBTTVNDIFVTQjMzMTkgKi8KIH07CiAKLXN0YXRpYyBpbnQgdWxwaV9zZXRfZmxhZ3Moc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQorc3RhdGljIGludCB1bHBpX3NldF9vdGdfZmxhZ3Moc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IFVMUElfT1RHX0NUUkxfRFBfUFVMTERPV04gfAorCQkJICAgICBVTFBJX09UR19DVFJMX0RNX1BVTExET1dOOworCisJaWYgKG90Zy0+ZmxhZ3MgJiBVTFBJX09UR19JRF9QVUxMVVApCisJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfSURfUFVMTFVQOworCisJLyoKKwkgKiBVTFBJIFNwZWNpZmljYXRpb24gcmV2LjEuMSBkZWZhdWx0CisJICogZm9yIERwL0RtUHVsbGRvd24gaXMgZW5hYmxlZC4KKwkgKi8KKwlpZiAob3RnLT5mbGFncyAmIFVMUElfT1RHX0RQX1BVTExET1dOX0RJUykKKwkJZmxhZ3MgJj0gflVMUElfT1RHX0NUUkxfRFBfUFVMTERPV047CisKKwlpZiAob3RnLT5mbGFncyAmIFVMUElfT1RHX0RNX1BVTExET1dOX0RJUykKKwkJZmxhZ3MgJj0gflVMUElfT1RHX0NUUkxfRE1fUFVMTERPV047CisKKwlpZiAob3RnLT5mbGFncyAmIFVMUElfT1RHX0VYVFZCVVNJTkQpCisJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfRVhUVkJVU0lORDsKKworCXJldHVybiBvdGdfaW9fd3JpdGUob3RnLCBmbGFncywgVUxQSV9PVEdfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgdWxwaV9zZXRfZmNfZmxhZ3Moc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQogewogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAKLQlpZiAob3RnLT5mbGFncyAmIFVTQl9PVEdfUFVMTFVQX0lEKQotCQlmbGFncyB8PSBVTFBJX09UR19DVFJMX0lEX1BVTExVUDsKKwkvKgorCSAqIFVMUEkgU3BlY2lmaWNhdGlvbiByZXYuMS4xIGRlZmF1bHQKKwkgKiBmb3IgWGN2clNlbGVjdCBpcyBGdWxsIFNwZWVkLgorCSAqLworCWlmIChvdGctPmZsYWdzICYgVUxQSV9GQ19IUykKKwkJZmxhZ3MgfD0gVUxQSV9GVU5DX0NUUkxfSElHSF9TUEVFRDsKKwllbHNlIGlmIChvdGctPmZsYWdzICYgVUxQSV9GQ19MUykKKwkJZmxhZ3MgfD0gVUxQSV9GVU5DX0NUUkxfTE9XX1NQRUVEOworCWVsc2UgaWYgKG90Zy0+ZmxhZ3MgJiBVTFBJX0ZDX0ZTNExTKQorCQlmbGFncyB8PSBVTFBJX0ZVTkNfQ1RSTF9GUzRMUzsKKwllbHNlCisJCWZsYWdzIHw9IFVMUElfRlVOQ19DVFJMX0ZVTExfU1BFRUQ7CiAKLQlpZiAob3RnLT5mbGFncyAmIFVTQl9PVEdfUFVMTERPV05fRE0pCi0JCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfRE1fUFVMTERPV047CisJaWYgKG90Zy0+ZmxhZ3MgJiBVTFBJX0ZDX1RFUk1TRUwpCisJCWZsYWdzIHw9IFVMUElfRlVOQ19DVFJMX1RFUk1TRUxFQ1Q7CiAKLQlpZiAob3RnLT5mbGFncyAmIFVTQl9PVEdfUFVMTERPV05fRFApCi0JCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfRFBfUFVMTERPV047CisJLyoKKwkgKiBVTFBJIFNwZWNpZmljYXRpb24gcmV2LjEuMSBkZWZhdWx0CisJICogZm9yIE9wTW9kZSBpcyBOb3JtYWwgT3BlcmF0aW9uLgorCSAqLworCWlmIChvdGctPmZsYWdzICYgVUxQSV9GQ19PUF9OT0RSVikKKwkJZmxhZ3MgfD0gVUxQSV9GVU5DX0NUUkxfT1BNT0RFX05PTkRSSVZJTkc7CisJZWxzZSBpZiAob3RnLT5mbGFncyAmIFVMUElfRkNfT1BfRElTX05SWkkpCisJCWZsYWdzIHw9IFVMUElfRlVOQ19DVFJMX09QTU9ERV9ESVNBQkxFX05SWkk7CisJZWxzZSBpZiAob3RnLT5mbGFncyAmIFVMUElfRkNfT1BfTlNZTkNfTkVPUCkKKwkJZmxhZ3MgfD0gVUxQSV9GVU5DX0NUUkxfT1BNT0RFX05PU1lOQ19OT0VPUDsKKwllbHNlCisJCWZsYWdzIHw9IFVMUElfRlVOQ19DVFJMX09QTU9ERV9OT1JNQUw7CiAKLQlpZiAob3RnLT5mbGFncyAmIFVTQl9PVEdfRVhUX1ZCVVNfSU5ESUNBVE9SKQotCQlmbGFncyB8PSBVTFBJX09UR19DVFJMX0VYVFZCVVNJTkQ7CisJLyoKKwkgKiBVTFBJIFNwZWNpZmljYXRpb24gcmV2LjEuMSBkZWZhdWx0CisJICogZm9yIFN1c3BlbmRNIGlzIFBvd2VyZWQuCisJICovCisJZmxhZ3MgfD0gVUxQSV9GVU5DX0NUUkxfU1VTUEVORE07CiAKLQlyZXR1cm4gb3RnX2lvX3dyaXRlKG90ZywgZmxhZ3MsIFVMUElfU0VUKFVMUElfT1RHX0NUUkwpKTsKKwlyZXR1cm4gb3RnX2lvX3dyaXRlKG90ZywgZmxhZ3MsIFVMUElfRlVOQ19DVFJMKTsKK30KKworc3RhdGljIGludCB1bHBpX3NldF9pY19mbGFncyhzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKworCWlmIChvdGctPmZsYWdzICYgVUxQSV9JQ19BVVRPUkVTVU1FKQorCQlmbGFncyB8PSBVTFBJX0lGQ19DVFJMX0FVVE9SRVNVTUU7CisKKwlpZiAob3RnLT5mbGFncyAmIFVMUElfSUNfRVhUVkJVU19JTkRJTlYpCisJCWZsYWdzIHw9IFVMUElfSUZDX0NUUkxfRVhURVJOQUxfVkJVUzsKKworCWlmIChvdGctPmZsYWdzICYgVUxQSV9JQ19JTkRfUEFTU1RIUlUpCisJCWZsYWdzIHw9IFVMUElfSUZDX0NUUkxfUEFTU1RIUlU7CisKKwlpZiAob3RnLT5mbGFncyAmIFVMUElfSUNfUFJPVEVDVF9ESVMpCisJCWZsYWdzIHw9IFVMUElfSUZDX0NUUkxfUFJPVEVDVF9JRkNfRElTQUJMRTsKKworCXJldHVybiBvdGdfaW9fd3JpdGUob3RnLCBmbGFncywgVUxQSV9JRkNfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgdWxwaV9zZXRfZmxhZ3Moc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1bHBpX3NldF9vdGdfZmxhZ3Mob3RnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdWxwaV9zZXRfaWNfZmxhZ3Mob3RnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHVscGlfc2V0X2ZjX2ZsYWdzKG90Zyk7CiB9CiAKIHN0YXRpYyBpbnQgdWxwaV9pbml0KHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKQEAgLTgxLDYgKzE2MSwzMSBAQAogCXJldHVybiAtRU5PREVWOwogfQogCitzdGF0aWMgaW50IHVscGlfc2V0X2hvc3Qoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCBzdHJ1Y3QgdXNiX2J1cyAqaG9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBvdGdfaW9fcmVhZChvdGcsIFVMUElfSUZDX0NUUkwpOworCisJaWYgKCFob3N0KSB7CisJCW90Zy0+aG9zdCA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCW90Zy0+aG9zdCA9IGhvc3Q7CisKKwlmbGFncyAmPSB+KFVMUElfSUZDX0NUUkxfNl9QSU5fU0VSSUFMX01PREUgfAorCQkgICBVTFBJX0lGQ19DVFJMXzNfUElOX1NFUklBTF9NT0RFIHwKKwkJICAgVUxQSV9JRkNfQ1RSTF9DQVJLSVRNT0RFKTsKKworCWlmIChvdGctPmZsYWdzICYgVUxQSV9JQ182UElOX1NFUklBTCkKKwkJZmxhZ3MgfD0gVUxQSV9JRkNfQ1RSTF82X1BJTl9TRVJJQUxfTU9ERTsKKwllbHNlIGlmIChvdGctPmZsYWdzICYgVUxQSV9JQ18zUElOX1NFUklBTCkKKwkJZmxhZ3MgfD0gVUxQSV9JRkNfQ1RSTF8zX1BJTl9TRVJJQUxfTU9ERTsKKwllbHNlIGlmIChvdGctPmZsYWdzICYgVUxQSV9JQ19DQVJLSVQpCisJCWZsYWdzIHw9IFVMUElfSUZDX0NUUkxfQ0FSS0lUTU9ERTsKKworCXJldHVybiBvdGdfaW9fd3JpdGUob3RnLCBmbGFncywgVUxQSV9JRkNfQ1RSTCk7Cit9CisKIHN0YXRpYyBpbnQgdWxwaV9zZXRfdmJ1cyhzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIGJvb2wgb24pCiB7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gb3RnX2lvX3JlYWQob3RnLCBVTFBJX09UR19DVFJMKTsKQEAgLTg4LDE0ICsxOTMsMTQgQEAKIAlmbGFncyAmPSB+KFVMUElfT1RHX0NUUkxfRFJWVkJVUyB8IFVMUElfT1RHX0NUUkxfRFJWVkJVU19FWFQpOwogCiAJaWYgKG9uKSB7Ci0JCWlmIChvdGctPmZsYWdzICYgVVNCX09UR19EUlZfVkJVUykKKwkJaWYgKG90Zy0+ZmxhZ3MgJiBVTFBJX09UR19EUlZWQlVTKQogCQkJZmxhZ3MgfD0gVUxQSV9PVEdfQ1RSTF9EUlZWQlVTOwogCi0JCWlmIChvdGctPmZsYWdzICYgVVNCX09UR19EUlZfVkJVU19FWFQpCisJCWlmIChvdGctPmZsYWdzICYgVUxQSV9PVEdfRFJWVkJVU19FWFQpCiAJCQlmbGFncyB8PSBVTFBJX09UR19DVFJMX0RSVlZCVVNfRVhUOwogCX0KIAotCXJldHVybiBvdGdfaW9fd3JpdGUob3RnLCBmbGFncywgVUxQSV9TRVQoVUxQSV9PVEdfQ1RSTCkpOworCXJldHVybiBvdGdfaW9fd3JpdGUob3RnLCBmbGFncywgVUxQSV9PVEdfQ1RSTCk7CiB9CiAKIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKgpAQCAtMTEyLDYgKzIxNyw3IEBACiAJb3RnLT5mbGFncwk9IGZsYWdzOwogCW90Zy0+aW9fb3BzCT0gb3BzOwogCW90Zy0+aW5pdAk9IHVscGlfaW5pdDsKKwlvdGctPnNldF9ob3N0CT0gdWxwaV9zZXRfaG9zdDsKIAlvdGctPnNldF92YnVzCT0gdWxwaV9zZXRfdmJ1czsKIAogCXJldHVybiBvdGc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGJkOGFhYjAuLjkxNmIyYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC02NDIsNiArNjQyLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB6aW8uCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1NTVTEwMAorCXRyaXN0YXRlICJVU0IgUXVhdGVjaCBTU1UtMTAwIFNpbmdsZSBQb3J0IFNlcmlhbCBEcml2ZXIiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFF1YXRlY2ggU1NVLTEwMCBzaW5nbGUKKwkgIHBvcnQgdXNiIHRvIHNlcmlhbCBhZGFwdGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzc3UxMDAuCisKIGNvbmZpZyBVU0JfU0VSSUFMX0RFQlVHCiAJdHJpc3RhdGUgIlVTQiBEZWJ1Z2dpbmcgRGV2aWNlIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQppbmRleCBlNTRjNzI4Li40MGViZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCkBAIC01MSw2ICs1MSw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9TSUVNRU5TX01QSSkJCSs9IHNpZW1lbnNfbXBpLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTKQkJKz0gc2llcnJhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUpCQkrPSBzcGNwOHg1Lm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1NTVTEwMCkJCQkrPSBzc3UxMDAubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MKQkJCSs9IHN5bWJvbHNlcmlhbC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9XV0FOKQkJCSs9IHVzYl93d2FuLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1RJKQkJCSs9IHRpX3VzYl8zNDEwXzUwNTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDhiOGM3OTcuLjJiZWY0NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTEyNiw2ICsxMjYsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxODQzLCAweDAyMDApIH0sIC8qIFZhaXNhbGEgVVNCIEluc3RydW1lbnQgQ2FibGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxOEVGLCAweEUwMEYpIH0sIC8qIEVMViBVU0ItSTJDLUludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4OTUwMCkgfSwgLyogRFc3MDAgR1BTIFVTQiBpbnRlcmZhY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNkRDLCAweDAwMTApIH0sIC8qIFctSUUtTkUtUiBQbGVpbiAmIEJhdXMgR21iSCBQTDUxMiBQb3dlciBTdXBwbHkgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNkRDLCAweDAwMTEpIH0sIC8qIFctSUUtTkUtUiBQbGVpbiAmIEJhdXMgR21iSCBSQ00gUmVtb3RlIENvbnRyb2wgZm9yIE1BUkFUT04gUG93ZXIgU3VwcGx5ICovCisJeyBVU0JfREVWSUNFKDB4MTZEQywgMHgwMDEyKSB9LCAvKiBXLUlFLU5FLVIgUGxlaW4gJiBCYXVzIEdtYkggTVBPRCBNdWx0aSBDaGFubmVsIFBvd2VyIFN1cHBseSAqLworCXsgVVNCX0RFVklDRSgweDE2REMsIDB4MDAxNSkgfSwgLyogVy1JRS1ORS1SIFBsZWluICYgQmF1cyBHbWJIIENNTCBDb250cm9sLCBNb25pdG9yaW5nIGFuZCBEYXRhIExvZ2dlciAqLwogCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGZkMzVmNzMuLmI5MjA3MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTYwOSw4ICs2MDksMTAgQEAKIHN0YXRpYyB2b2lkIGRpZ2lfd2FrZXVwX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCXR0eV93YWtldXAodHR5KTsKLQl0dHlfa3JlZl9wdXQodHR5KTsKKwlpZiAodHR5KSB7CisJCXR0eV93YWtldXAodHR5KTsKKwkJdHR5X2tyZWZfcHV0KHR0eSk7CisJfQogfQogCiAKQEAgLTE2ODIsNyArMTY4NCw3IEBACiAJCXByaXYtPmRwX3Rocm90dGxlX3Jlc3RhcnQgPSAxOwogCiAJLyogcmVjZWl2ZSBkYXRhICovCi0JaWYgKG9wY29kZSA9PSBESUdJX0NNRF9SRUNFSVZFX0RBVEEpIHsKKwlpZiAodHR5ICYmIG9wY29kZSA9PSBESUdJX0NNRF9SRUNFSVZFX0RBVEEpIHsKIAkJLyogZ2V0IGZsYWcgZnJvbSBwb3J0X3N0YXR1cyAqLwogCQlmbGFnID0gMDsKIApAQCAtMTc2MywxMCArMTc2NSwxMiBAQAogCQkJcmV0dXJuIC0xOwogCiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCiAJCXJ0cyA9IDA7Ci0JCXJ0cyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFM7CisJCWlmICh0dHkpCisJCQlydHMgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTOwogCQkKLQkJaWYgKG9wY29kZSA9PSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFMpIHsKKwkJaWYgKHR0eSAmJiBvcGNvZGUgPT0gRElHSV9DTURfUkVBRF9JTlBVVF9TSUdOQUxTKSB7CiAJCQlzcGluX2xvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7CiAJCQkvKiBjb252ZXJ0IGZyb20gZGlnaSBmbGFncyB0byB0ZXJtaW94IGZsYWdzICovCiAJCQlpZiAodmFsICYgRElHSV9SRUFEX0lOUFVUX1NJR05BTFNfQ1RTKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGUyOThkYzQuLmViMTJkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0xNTcsNiArMTU3LDkgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV81X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV82X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfU0NTX0RFVklDRV83X1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVVNJTlRfQ0FUX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVVNJTlRfV0tFWV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1VTSU5UX1JTMjMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfQUNUWldBVkVfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9JUlRSQU5TX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSVBMVVNfUElEKSB9LApAQCAtNzQ2LDYgKzc0OSw3IEBACiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBYVkVSVkVfU0lHTkFMWVpFUl9TSDRfUElEKSwKIAkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX2p0YWdfcXVpcmsgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIFNFR1dBWV9STVAyMDBfUElEKSB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggZDAxOTQ2ZC4uNmU2MTJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApAQCAtNDAsNiArNDAsMTEgQEAKIAogI2RlZmluZSBGVERJX05YVENBTV9QSUQJCTB4QUJCOCAvKiBOWFRDYW0gZm9yIE1pbmRzdG9ybXMgTlhUICovCiAKKy8qIFVTIEludGVyZmFjZSBOYXZpZ2F0b3IgKGh0dHA6Ly93d3cudXNpbnRlcmZhY2UuY29tLykgKi8KKyNkZWZpbmUgRlRESV9VU0lOVF9DQVRfUElECTB4YjgxMAkvKiBOYXZpZ2F0b3IgQ0FUIGFuZCAybmQgUFRUIGxpbmVzICovCisjZGVmaW5lIEZURElfVVNJTlRfV0tFWV9QSUQJMHhiODExCS8qIE5hdmlnYXRvciBXS0VZIGFuZCBGU0sgbGluZXMgKi8KKyNkZWZpbmUgRlRESV9VU0lOVF9SUzIzMl9QSUQJMHhiODEyCS8qIE5hdmlnYXRvciBSUzIzMiBhbmQgQ09ORklHIGxpbmVzICovCisKIC8qIE9PQ0RsaW5rIGJ5IEpvZXJuIEthaXBmIDxqb2VybmtAd2ViLmRlPgogICogKGh0dHA6Ly93d3cuam9lcm5vbmxpbmUuZGUvZHcvZG9rdS5waHA/aWQ9c3RhcnQmaWR4PXByb2plY3RzOm9vY2RsaW5rKSAqLwogI2RlZmluZSBGVERJX09PQ0RMSU5LX1BJRAkweGJhZjgJLyogQW1vbnRlYyBKVEFHa2V5ICovCkBAIC0xMDMyLDMgKzEwMzcsOCBAQAogI2RlZmluZSBYVkVSVkVfU0lHTkFMWVpFUl9TSDJfUElECTB4QkNBMgogI2RlZmluZSBYVkVSVkVfU0lHTkFMWVpFUl9TSDRfUElECTB4QkNBNAogCisvKgorICogU2Vnd2F5IFJvYm90aWMgTW9iaWxpdHkgUGxhdGZvcm0gVVNCIGludGVyZmFjZSAodXNpbmcgVklEIDB4MDQwMykKKyAqIFN1Ym1pdHRlZCBieSBKb2huIEcuIFJvZ2VycworICovCisjZGVmaW5lIFNFR1dBWV9STVAyMDBfUElECTB4ZTcyOQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggYTgxN2NlZC4uY2E5MmY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0yMDgsMTggKzIwOCwyMyBAQAogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGNvdW50OwogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIGNvdW50LAogCQkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dHhfYnl0ZXMgKz0gY291bnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJY2xlYXJfYml0KGksICZwb3J0LT53cml0ZV91cmJzX2ZyZWUpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGVycm9yIHN1Ym1pdHRpbmcgdXJiOiAlZFxuIiwKIAkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworCQlzZXRfYml0KGksICZwb3J0LT53cml0ZV91cmJzX2ZyZWUpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlwb3J0LT50eF9ieXRlcyAtPSBjb3VudDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCiAJCWNsZWFyX2JpdF91bmxvY2soVVNCX1NFUklBTF9XUklURV9CVVNZLCAmcG9ydC0+ZmxhZ3MpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQljbGVhcl9iaXQoaSwgJnBvcnQtPndyaXRlX3VyYnNfZnJlZSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCXBvcnQtPnR4X2J5dGVzICs9IGNvdW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFRyeSBzZW5kaW5nIG9mZiBhbm90aGVyIHVyYiwgdW5sZXNzIGluIGlycSBjb250ZXh0IChpbiB3aGljaCBjYXNlCiAJICogdGhlcmUgd2lsbCBiZSBubyBmcmVlIHVyYikuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCmluZGV4IDBmY2EyNjUuLmRjNDdmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jCkBAIC0xMjk4LDcgKzEyOTgsNyBAQAogCQkJCWtmcmVlKGhlYWRlcik7CiAJCQkJa2ZyZWUocm9tX2Rlc2MpOwogCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwotCQkJCXJldHVybiBzdGF0dXM7CisJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKIAkJCS8qIHZlcmlmeSB0aGUgd3JpdGUgLS0gbXVzdCBkbyB0aGlzIGluIG9yZGVyIGZvcgpAQCAtMTMyMSw3ICsxMzIxLDcgQEAKIAkJCQlrZnJlZShoZWFkZXIpOwogCQkJCWtmcmVlKHJvbV9kZXNjKTsKIAkJCQlrZnJlZSh0aV9tYW51Zl9kZXNjKTsKLQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCiAJCQlrZnJlZSh2aGVhZGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDI4OTEzZmEuLjQ3MzU5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNTM0LDcgKzUzNCw2IEBACiAJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA5KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHg0NTA1LCAweDAwMTApIH0sIC8qIFNtYXJ0cGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHg1RTA0LCAweENFMDApIH0sIC8qIFNBR0VNIFdpcmVsZXNzIEFzc2lzdGFudCAqLwotCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MDBDRikgfSwgLyogSFRDIHNtYXJ0cGhvbmUgbW9kZW1zICovCiAJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwppbmRleCA3NDU1MWNiLi5lZmM3MjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBJbmZpbml0eSBVbmxpbWl0ZWQgVVNCIFBob2VuaXggZHJpdmVyCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEphbWVzIENvdXJ0aWVyLUR1dHRvbiAoSmFtZXNAc3VwZXJidWcuY28udWspCisKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGFpbiBEZWdyZWZmZSAoZWN6ZW1hQGVjemUuY29tKQogICoKICAqIE9yaWdpbmFsIGNvZGUgdGFrZW4gZnJvbSBpdXV0b29sIChDb3B5cmlnaHQgKEMpIDIwMDYgSnVhbiBDYXJsb3MgQm9ycsODwqFzKQpAQCAtNDAsNyArNDIsNyBAQAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KICAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTEiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xMiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkluZmluaXR5IFVTQiBVbmxpbWl0ZWQgUGhvZW5peCBkcml2ZXIiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewpAQCAtODEsNiArODMsOSBAQAogCXU4ICpkYmdidWY7CQkvKiBkZWJ1ZyBidWZmZXIgKi8KIAl1OCBsZW47CiAJaW50IHZjYzsJCS8qIHZjYyAoZWl0aGVyIDMgb3IgNSBWKSAqLworCXUzMiBiYXVkOworCXUzMiBib29zdDsKKwl1MzIgY2xrOwogfTsKIAogCkBAIC0xNTcsMTMgKzE2MiwxNCBAQAogCSAgICBwb3J0LT5udW1iZXIsIHNldCwgY2xlYXIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoc2V0ICYgVElPQ01fUlRTKQotCQlwcml2LT50aW9zdGF0dXMgPSBUSU9DTV9SVFM7CiAKLQlpZiAoIShzZXQgJiBUSU9DTV9SVFMpICYmIHByaXYtPnRpb3N0YXR1cyA9PSBUSU9DTV9SVFMpIHsKKwlpZiAoKHNldCAmIFRJT0NNX1JUUykgJiYgIShwcml2LT50aW9zdGF0dXMgPT0gVElPQ01fUlRTKSkgewogCQlkYmcoIiVzIFRJT0NNU0VUIFJFU0VUIGNhbGxlZCAhISEiLCBfX2Z1bmNfXyk7CiAJCXByaXYtPnJlc2V0ID0gMTsKIAl9CisJaWYgKHNldCAmIFRJT0NNX1JUUykKKwkJcHJpdi0+dGlvc3RhdHVzID0gVElPQ01fUlRTOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtODUxLDIwICs4NTcsMjQgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGl1dV91YXJ0X2JhdWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTMyIGJhdWQsCitzdGF0aWMgaW50IGl1dV91YXJ0X2JhdWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgdTMyIGJhdWRfYmFzZSwKIAkJCSB1MzIgKmFjdHVhbCwgdTggcGFyaXR5KQogewogCWludCBzdGF0dXM7CisJdTMyIGJhdWQ7CiAJdTggKmRhdGFvdXQ7CiAJdTggRGF0YUNvdW50ID0gMDsKIAl1OCBUMUZyZWt2ZW5zID0gMDsKIAl1OCBUMXJlbG9hZCA9IDA7CiAJdW5zaWduZWQgaW50IFQxRnJla3ZlbnNIWiA9IDA7CiAKKwlkYmcoIiVzIC0gZW50ZXIgYmF1ZF9iYXNlPSVkIiwgX19mdW5jX18sIGJhdWRfYmFzZSk7CiAJZGF0YW91dCA9IGttYWxsb2Moc2l6ZW9mKHU4KSAqIDUsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkYXRhb3V0KQogCQlyZXR1cm4gLUVOT01FTTsKKwkvKmJhdWQgPSAoKChwcml2LT5jbGsgLyAzNSkgKiBiYXVkX2Jhc2UpIC8gMTAwMDAwKTsgKi8KKwliYXVkID0gYmF1ZF9iYXNlOwogCiAJaWYgKGJhdWQgPCAxMjAwIHx8IGJhdWQgPiAyMzA0MDApIHsKIAkJa2ZyZWUoZGF0YW91dCk7CkBAIC05NDgsMTUgKzk1OCwyMCBAQAogCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQogewogCWNvbnN0IHUzMiBzdXBwb3J0ZWRfbWFzayA9IENNU1BBUnxQQVJFTkJ8UEFST0REOwotCisJc3RydWN0IGl1dV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCXVuc2lnbmVkIGludCBjZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlpbnQgc3RhdHVzOwogCXUzMiBhY3R1YWw7CiAJdTMyIHBhcml0eTsKIAlpbnQgY3NpemUgPSBDUzc7Ci0JaW50IGJhdWQgPSA5NjAwOwkvKiBGaXhlZCBmb3IgdGhlIG1vbWVudCAqLworCWludCBiYXVkOwogCXUzMiBuZXd2YWwgPSBjZmxhZyAmIHN1cHBvcnRlZF9tYXNrOwogCisJLyogSnVzdCB1c2UgdGhlIG9zcGVlZC4gaXNwZWVkIHNob3VsZCBiZSB0aGUgc2FtZS4gKi8KKwliYXVkID0gdHR5LT50ZXJtaW9zLT5jX29zcGVlZDsKKworCWRiZygiJXMgLSBlbnRlciBjX29zcGVlZCBvciBiYXVkPSVkIiwgX19mdW5jX18sIGJhdWQpOworCiAJLyogY29tcHV0ZSB0aGUgcGFyaXR5IHBhcmFtZXRlciAqLwogCXBhcml0eSA9IDA7CiAJaWYgKGNmbGFnICYgQ01TUEFSKSB7CS8qIFVzaW5nIG1hcmsgc3BhY2UgKi8KQEAgLTk3NiwxNSArOTkxLDE1IEBACiAKIAkvKiBzZXQgaXQgKi8KIAlzdGF0dXMgPSBpdXVfdWFydF9iYXVkKHBvcnQsCi0JCQkoY2xvY2ttb2RlID09IDIpID8gMTY0NTcgOiA5NjAwICogYm9vc3QgLyAxMDAsCisJCQliYXVkICogcHJpdi0+Ym9vc3QgLyAxMDAsCiAJCQkmYWN0dWFsLCBwYXJpdHkpOwogCiAJLyogc2V0IHRoZSB0ZXJtaW9zIHZhbHVlIHRvIHRoZSByZWFsIG9uZSwgc28gdGhlIHVzZXIgbm93IHdoYXQgaGFzCiAJICogY2hhbmdlZC4gV2Ugc3VwcG9ydCBmZXcgZmllbGRzIHNvIGl0cyBlYXNpZXMgdG8gY29weSB0aGUgb2xkIGh3CiAJICogc2V0dGluZ3MgYmFjayBvdmVyIGFuZCB0aGVuIGFkanVzdCB0aGVtCiAJICovCi0gCWlmIChvbGRfdGVybWlvcykKLSAJCXR0eV90ZXJtaW9zX2NvcHlfaHcodHR5LT50ZXJtaW9zLCBvbGRfdGVybWlvcyk7CisJaWYgKG9sZF90ZXJtaW9zKQorCQl0dHlfdGVybWlvc19jb3B5X2h3KHR0eS0+dGVybWlvcywgb2xkX3Rlcm1pb3MpOwogCWlmIChzdGF0dXMgIT0gMCkJLyogU2V0IGZhaWxlZCAtIHJldHVybiBvbGQgYml0cyAqLwogCQlyZXR1cm47CiAJLyogUmUtZW5jb2RlIHNwZWVkLCBwYXJpdHkgYW5kIGNzaXplICovCkBAIC0xMDE4LDYgKzEwMzMsNyBAQAogCiBzdGF0aWMgdm9pZCBpdXVfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJZGJnKCIlcyAtIGVudGVyIiwgX19mdW5jX18pOwogCSoodHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKIAl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBDTE9DQUwgfCBDUkVBRCB8IENTOCB8IEI5NjAwCiAJCQkJfCBUSU9DTV9DVFMgfCBDU1RPUEIgfCBQQVJFTkI7CkBAIC0xMDMzLDEwICsxMDQ5LDE2IEBACiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAl1OCAqYnVmOwogCWludCByZXN1bHQ7CisJaW50IGJhdWQ7CiAJdTMyIGFjdHVhbDsKIAlzdHJ1Y3QgaXV1X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKLQlkYmcoIiVzIC0gIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwliYXVkID0gdHR5LT50ZXJtaW9zLT5jX29zcGVlZDsKKwl0dHktPnRlcm1pb3MtPmNfaXNwZWVkID0gYmF1ZDsKKwkvKiBSZS1lbmNvZGUgc3BlZWQgKi8KKwl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOworCisJZGJnKCIlcyAtICBwb3J0ICVkLCBiYXVkICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgYmF1ZCk7CiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPndyaXRlX3VyYi0+cGlwZSk7CiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIHBvcnQtPnJlYWRfdXJiLT5waXBlKTsKIApAQCAtMTA3MSwyMyArMTA5MywyOSBAQAogCWl1dV91YXJ0X29uKHBvcnQpOwogCWlmIChib29zdCA8IDEwMCkKIAkJYm9vc3QgPSAxMDA7CisJcHJpdi0+Ym9vc3QgPSBib29zdDsKKwlwcml2LT5iYXVkID0gYmF1ZDsKIAlzd2l0Y2ggKGNsb2NrbW9kZSkgewogCWNhc2UgMjoJCS8qICAzLjY4MCBNaHogKi8KKwkJcHJpdi0+Y2xrID0gSVVVX0NMS18zNjgwMDAwOwogCQlpdXVfY2xrKHBvcnQsIElVVV9DTEtfMzY4MDAwMCAqIGJvb3N0IC8gMTAwKTsKIAkJcmVzdWx0ID0KLQkJICAgIGl1dV91YXJ0X2JhdWQocG9ydCwgOTYwMCAqIGJvb3N0IC8gMTAwLCAmYWN0dWFsLAorCQkgICAgaXV1X3VhcnRfYmF1ZChwb3J0LCBiYXVkICogYm9vc3QgLyAxMDAsICZhY3R1YWwsCiAJCQkJICBJVVVfUEFSSVRZX0VWRU4pOwogCQlicmVhazsKIAljYXNlIDM6CQkvKiAgNi4wMCBNaHogKi8KIAkJaXV1X2Nsayhwb3J0LCBJVVVfQ0xLXzYwMDAwMDAgKiBib29zdCAvIDEwMCk7CisJCXByaXYtPmNsayA9IElVVV9DTEtfNjAwMDAwMDsKKwkJLyogUmF0aW8gb2YgNjAwMDAwMCB0byAzNTAwMDAwIGZvciBiYXVkIDk2MDAgKi8KIAkJcmVzdWx0ID0KIAkJICAgIGl1dV91YXJ0X2JhdWQocG9ydCwgMTY0NTcgKiBib29zdCAvIDEwMCwgJmFjdHVhbCwKIAkJCQkgIElVVV9QQVJJVFlfRVZFTik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CQkvKiAgMy41NzkgTWh6ICovCiAJCWl1dV9jbGsocG9ydCwgSVVVX0NMS18zNTc5MDAwICogYm9vc3QgLyAxMDApOworCQlwcml2LT5jbGsgPSBJVVVfQ0xLXzM1NzkwMDA7CiAJCXJlc3VsdCA9Ci0JCSAgICBpdXVfdWFydF9iYXVkKHBvcnQsIDk2MDAgKiBib29zdCAvIDEwMCwgJmFjdHVhbCwKKwkJICAgIGl1dV91YXJ0X2JhdWQocG9ydCwgYmF1ZCAqIGJvb3N0IC8gMTAwLCAmYWN0dWFsLAogCQkJCSAgSVVVX1BBUklUWV9FVkVOKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA1Y2QzMGU0Li45ZmM2ZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0xNDUsNyArMTQ1LDEwIEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNECQkJMHgxNDNECiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNFCQkJMHgxNDNFCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNGCQkJMHgxNDNGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0s0NTA1CQkJMHgxNDY0CisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0szNzY1CQkJMHgxNDY1CiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNEFDCQkJMHgxNEFDCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0VUUzEyMjAJCQkweDE4MDMKIAogI2RlZmluZSBRVUFOVEFfVkVORE9SX0lECQkJMHgwNDA4CiAjZGVmaW5lIFFVQU5UQV9QUk9EVUNUX1ExMDEJCQkweEVBMDIKQEAgLTI2NCw5ICsyNjcsNiBAQAogI2RlZmluZSBCQU5EUklDSF9QUk9EVUNUXzEwMTEJCQkweDEwMTEKICNkZWZpbmUgQkFORFJJQ0hfUFJPRFVDVF8xMDEyCQkJMHgxMDEyCiAKLSNkZWZpbmUgQU1PSV9WRU5ET1JfSUQJCQkweDE2MTQKLSNkZWZpbmUgQU1PSV9QUk9EVUNUXzk1MDgJCQkweDA4MDAKLQogI2RlZmluZSBRVUFMQ09NTV9WRU5ET1JfSUQJCQkweDA1QzYKIAogI2RlZmluZSBDTU9URUNIX1ZFTkRPUl9JRAkJCTB4MTZkOApAQCAtNDgyLDggKzQ4MiwxMCBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0QsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNGLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfSzQ1MDUsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9LMzc2NSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0VUUzEyMjAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNEFDKSB9LAotCXsgVVNCX0RFVklDRShBTU9JX1ZFTkRPUl9JRCwgQU1PSV9QUk9EVUNUXzk1MDgpIH0sCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2NDApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2NDAvWFY2MjAgKi8KIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCwgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVjYyMCkgfSwgLyogTm92YXRlbCBNZXJsaW4gVjYyMC9TNjIwICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y3NDApIH0sIC8qIE5vdmF0ZWwgTWVybGluIEVYNzIwL1Y3NDAvWDcyMCAqLwpAQCAtMTAxNyw2ICsxMDE5LDEzIEBACiAJCXNlcmlhbC0+aW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gMHhmZikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBEb24ndCBiaW5kIG5ldHdvcmsgaW50ZXJmYWNlcyBvbiBIdWF3ZWkgSzM3NjUgJiBLNDUwNSAqLworCWlmIChzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBIVUFXRUlfVkVORE9SX0lEICYmCisJCShzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gSFVBV0VJX1BST0RVQ1RfSzM3NjUgfHwKKwkJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBIVUFXRUlfUFJPRFVDVF9LNDUwNSkgJiYKKwkJc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlkYXRhID0gc2VyaWFsLT5wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl93d2FuX2ludGZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NzdTEwMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NzdTEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODJkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3N1MTAwLmMKQEAgLTAsMCArMSw2OTggQEAKKy8qCisgKiB1c2Itc2VyaWFsIGRyaXZlciBmb3IgUXVhdGVjaCBTU1UtMTAwCisgKgorICogYmFzZWQgb24gZnRkaV9zaW8uYyBhbmQgdGhlIG9yaWdpbmFsIHNlcnF0X3VzYi5jIGZyb20gUXVhdGVjaAorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNkZWZpbmUgUVRfT1BFTl9DTE9TRV9DSEFOTkVMICAgICAgIDB4Y2EKKyNkZWZpbmUgUVRfU0VUX0dFVF9ERVZJQ0UgICAgICAgICAgIDB4YzIKKyNkZWZpbmUgUVRfU0VUX0dFVF9SRUdJU1RFUiAgICAgICAgIDB4YzAKKyNkZWZpbmUgUVRfR0VUX1NFVF9QUkVCVUZfVFJJR19MVkwgIDB4Y2MKKyNkZWZpbmUgUVRfU0VUX0FURiAgICAgICAgICAgICAgICAgIDB4Y2QKKyNkZWZpbmUgUVRfR0VUX1NFVF9VQVJUICAgICAgICAgICAgIDB4YzEKKyNkZWZpbmUgUVRfVFJBTlNGRVJfSU4gICAgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgUVRfSFdfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzUKKyNkZWZpbmUgUVRfU1dfRkxPV19DT05UUk9MX01BU0sgICAgIDB4YzYKKworI2RlZmluZSBNT0RFTV9DVExfUkVHSVNURVIgICAgICAgICAweDA0CisjZGVmaW5lIE1PREVNX1NUQVRVU19SRUdJU1RFUiAgICAgIDB4MDYKKworCisjZGVmaW5lIFNFUklBTF9MU1JfT0UgICAgICAgMHgwMgorI2RlZmluZSBTRVJJQUxfTFNSX1BFICAgICAgIDB4MDQKKyNkZWZpbmUgU0VSSUFMX0xTUl9GRSAgICAgICAweDA4CisjZGVmaW5lIFNFUklBTF9MU1JfQkkgICAgICAgMHgxMAorCisjZGVmaW5lIFNFUklBTF9MU1JfVEVNVCAgICAgMHg0MAorCisjZGVmaW5lICBTRVJJQUxfTUNSX0RUUiAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBTRVJJQUxfTUNSX1JUUyAgICAgICAgICAgICAweDAyCisjZGVmaW5lICBTRVJJQUxfTUNSX0xPT1AgICAgICAgICAgICAweDEwCisKKyNkZWZpbmUgIFNFUklBTF9NU1JfQ1RTICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgIFNFUklBTF9NU1JfQ0QgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgIFNFUklBTF9NU1JfUkkgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgIFNFUklBTF9NU1JfRFNSICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgIFNFUklBTF9NU1JfTUFTSyAgICAgICAgICAgIDB4ZjAKKworI2RlZmluZSAgU0VSSUFMX0NSVFNDVFMgKChTRVJJQUxfTUNSX1JUUyA8PCA4KSB8IFNFUklBTF9NU1JfQ1RTKQorCisjZGVmaW5lICBTRVJJQUxfOF9EQVRBICAgICAgICAgICAgICAweDAzCisjZGVmaW5lICBTRVJJQUxfN19EQVRBICAgICAgICAgICAgICAweDAyCisjZGVmaW5lICBTRVJJQUxfNl9EQVRBICAgICAgICAgICAgICAweDAxCisjZGVmaW5lICBTRVJJQUxfNV9EQVRBICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgIFNFUklBTF9PRERfUEFSSVRZICAgICAgICAgIDBYMDgKKyNkZWZpbmUgIFNFUklBTF9FVkVOX1BBUklUWSAgICAgICAgIDBYMTgKKworI2RlZmluZSAgTUFYX0JBVURfUkFURSAgICAgICAgICAgICAgNDYwODAwCisKKyNkZWZpbmUgQVRDX0RJU0FCTEVEICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgRFVQTU9ERV9CSVRTICAgICAgICAweGMwCisjZGVmaW5lIFJSX0JJVFMgICAgICAgICAgICAgMHgwMworI2RlZmluZSBMT09QTU9ERV9CSVRTICAgICAgIDB4NDEKKyNkZWZpbmUgUlMyMzJfTU9ERSAgICAgICAgICAweDAwCisjZGVmaW5lIFJUU0NUU19UT19DT05ORUNUT1IgMHg0MAorI2RlZmluZSBDTEtTX1g0ICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRlVMTFBXUkJJVCAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE5FWFRfQk9BUkRfUE9XRVJfQklUICAgICAgICAweDAwMDAwMDA0CisKK3N0YXRpYyBpbnQgZGVidWcgPSAxOworCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4xIgorI2RlZmluZSBEUklWRVJfREVTQyAiUXVhdGVjaCBTU1UtMTAwIFVTQiB0byBTZXJpYWwgRHJpdmVyIgorCisjZGVmaW5lCVVTQl9WRU5ET1JfSURfUVVBVEVDSAkweDA2MWQJLyogUXVhdGVjaCBWSUQgKi8KKyNkZWZpbmUgUVVBVEVDSF9TU1UxMDAJMHhDMDIwCS8qIFNTVTEwMCAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIFFVQVRFQ0hfU1NVMTAwKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3N1MTAwX2RyaXZlciA9IHsKKwkubmFtZQkJCSAgICAgICA9ICJzc3UxMDAiLAorCS5wcm9iZQkJCSAgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCSAgICAgICA9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJCSAgICAgICA9IGlkX3RhYmxlLAorCS5zdXNwZW5kCQkgICAgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJCSAgICAgICA9IHVzYl9zZXJpYWxfcmVzdW1lLAorCS5ub19keW5hbWljX2lkCQkgICAgICAgPSAxLAorCS5zdXBwb3J0c19hdXRvc3VzcGVuZAkgICAgICAgPSAxLAorfTsKKworc3RydWN0IHNzdTEwMF9wb3J0X3ByaXZhdGUgeworCXU4IHNoYWRvd0xTUjsKKwl1OCBzaGFkb3dNU1I7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KKwl1bnNpZ25lZCBzaG9ydCBtYXhfcGFja2V0X3NpemU7Cit9OworCitzdGF0aWMgdm9pZCBzc3UxMDBfcmVsZWFzZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBzc3UxMDBfcG9ydF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKCpzZXJpYWwtPnBvcnQpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3N1MTAwX2NvbnRyb2xfbXNnKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJICAgICB1OCByZXF1ZXN0LCB1MTYgZGF0YSwgdTE2IGluZGV4KQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgICByZXF1ZXN0LCAweDQwLCBkYXRhLCBpbmRleCwKKwkJCSAgICAgICBOVUxMLCAwLCAzMDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzc3UxMDBfc2V0ZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4ICpkYXRhKQoreworCXUxNiB4ID0gKCh1MTYpKGRhdGFbMV0gPDwgOCkgfCAodTE2KShkYXRhWzBdKSk7CisKKwlyZXR1cm4gc3N1MTAwX2NvbnRyb2xfbXNnKGRldiwgUVRfU0VUX0dFVF9ERVZJQ0UsIHgsIDApOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHNzdTEwMF9nZXRkZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggKmRhdGEpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgIFFUX1NFVF9HRVRfREVWSUNFLCAweGMwLCAwLCAwLAorCQkJICAgICAgIGRhdGEsIDMsIDMwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNzdTEwMF9nZXRyZWdpc3RlcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWFydCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCQkgICAgIHU4ICpkYXRhKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgICBRVF9TRVRfR0VUX1JFR0lTVEVSLCAweGMwLCByZWcsCisJCQkgICAgICAgdWFydCwgZGF0YSwgc2l6ZW9mKCpkYXRhKSwgMzAwKTsKKworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IHNzdTEwMF9zZXRyZWdpc3RlcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWFydCwKKwkJCQkgICAgIHUxNiBkYXRhKQoreworCXUxNiB2YWx1ZSA9IChkYXRhIDw8IDgpIHwgTU9ERU1fQ1RMX1JFR0lTVEVSOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAgIFFUX1NFVF9HRVRfUkVHSVNURVIsIDB4NDAsIHZhbHVlLCB1YXJ0LAorCQkJICAgICAgIE5VTEwsIDAsIDMwMCk7CisKK30KKworI2RlZmluZSBzZXRfbWN0cmwoZGV2LCBzZXQpCQl1cGRhdGVfbWN0cmwoKGRldiksIChzZXQpLCAwKQorI2RlZmluZSBjbGVhcl9tY3RybChkZXYsIGNsZWFyKQl1cGRhdGVfbWN0cmwoKGRldiksIDAsIChjbGVhcikpCisKKy8qIHRoZXNlIGRvIG5vdCBkZWFsIHdpdGggZGV2aWNlIHRoYXQgaGF2ZSBtb3JlIHRoYW4gMSBwb3J0ICovCitzdGF0aWMgaW5saW5lIGludCB1cGRhdGVfbWN0cmwoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJdW5zaWduZWQgdXJiX3ZhbHVlOworCWludCByZXN1bHQ7CisKKwlpZiAoKChzZXQgfCBjbGVhcikgJiAoVElPQ01fRFRSIHwgVElPQ01fUlRTKSkgPT0gMCkgeworCQlkYmcoIiVzIC0gRFRSfFJUUyBub3QgYmVpbmcgc2V0fGNsZWFyZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOwkvKiBubyBjaGFuZ2UgKi8KKwl9CisKKwljbGVhciAmPSB+c2V0OwkvKiAnc2V0JyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgJ2NsZWFyJyAqLworCXVyYl92YWx1ZSA9IDA7CisJaWYgKHNldCAmIFRJT0NNX0RUUikKKwkJdXJiX3ZhbHVlIHw9IFNFUklBTF9NQ1JfRFRSOworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCXVyYl92YWx1ZSB8PSBTRVJJQUxfTUNSX1JUUzsKKworCXJlc3VsdCA9IHNzdTEwMF9zZXRyZWdpc3RlcihkZXYsIDAsIHVyYl92YWx1ZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgRXJyb3IgZnJvbSBNT0RFTV9DVFJMIHVyYiIsIF9fZnVuY19fKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc3N1MTAwX2luaXRkZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKK3sKKwl1OCAqZGF0YTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlkYXRhID0ga3phbGxvYygzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzdWx0ID0gc3N1MTAwX2dldGRldmljZShkZXYsIGRhdGEpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRiZygiJXMgLSBnZXRfZGV2aWNlIGZhaWxlZCAlaSIsIF9fZnVuY19fLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkYXRhWzFdICY9IH5GVUxMUFdSQklUOworCisJcmVzdWx0ID0gc3N1MTAwX3NldGRldmljZShkZXYsIGRhdGEpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRiZygiJXMgLSBzZXRkZXZpY2UgZmFpbGVkICVpIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWdvdG8gb3V0OworCX0KKworCXJlc3VsdCA9IHNzdTEwMF9jb250cm9sX21zZyhkZXYsIFFUX0dFVF9TRVRfUFJFQlVGX1RSSUdfTFZMLCAxMjgsIDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRiZygiJXMgLSBzZXQgcHJlYnVmZmVyIGxldmVsIGZhaWxlZCAlaSIsIF9fZnVuY19fLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9TRVRfQVRGLCBBVENfRElTQUJMRUQsIDApOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWRiZygiJXMgLSBzZXQgQVRGcHJlYnVmZmVyIGxldmVsIGZhaWxlZCAlaSIsIF9fZnVuY19fLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXN1bHQgPSBzc3UxMDBfZ2V0ZGV2aWNlKGRldiwgZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGJnKCIlcyAtIGdldF9kZXZpY2UgZmFpbGVkICVpIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWdvdG8gb3V0OworCX0KKworCWRhdGFbMF0gJj0gfihSUl9CSVRTIHwgRFVQTU9ERV9CSVRTKTsKKwlkYXRhWzBdIHw9IENMS1NfWDQ7CisJZGF0YVsxXSAmPSB+KExPT1BNT0RFX0JJVFMpOworCWRhdGFbMV0gfD0gUlMyMzJfTU9ERTsKKworCXJlc3VsdCA9IHNzdTEwMF9zZXRkZXZpY2UoZGV2LCBkYXRhKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkYmcoIiVzIC0gc2V0ZGV2aWNlIGZhaWxlZCAlaSIsIF9fZnVuY19fLCByZXN1bHQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJlc3VsdDsKKworfQorCisKK3N0YXRpYyB2b2lkIHNzdTEwMF9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJICAgICAgIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zID0gdHR5LT50ZXJtaW9zOworCXUxNiBiYXVkLCBkaXZpc29yLCByZW1haW5kZXI7CisJdW5zaWduZWQgaW50IGNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKKwl1MTYgdXJiX3ZhbHVlID0gMDsgLyogd2lsbCBob2xkIHRoZSBuZXcgZmxhZ3MgKi8KKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpCisJCQl1cmJfdmFsdWUgfD0gU0VSSUFMX09ERF9QQVJJVFk7CisJCWVsc2UKKwkJCXVyYl92YWx1ZSB8PSBTRVJJQUxfRVZFTl9QQVJJVFk7CisJfQorCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzU6CisJCXVyYl92YWx1ZSB8PSBTRVJJQUxfNV9EQVRBOworCQlicmVhazsKKwljYXNlIENTNjoKKwkJdXJiX3ZhbHVlIHw9IFNFUklBTF82X0RBVEE7CisJCWJyZWFrOworCWNhc2UgQ1M3OgorCQl1cmJfdmFsdWUgfD0gU0VSSUFMXzdfREFUQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIENTODoKKwkJdXJiX3ZhbHVlIHw9IFNFUklBTF84X0RBVEE7CisJCWJyZWFrOworCX0KKworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkKKwkJYmF1ZCA9IDk2MDA7CisKKwlkYmcoIiVzIC0gZ290IGJhdWQgPSAlZFxuIiwgX19mdW5jX18sIGJhdWQpOworCisKKwlkaXZpc29yID0gTUFYX0JBVURfUkFURSAvIGJhdWQ7CisJcmVtYWluZGVyID0gTUFYX0JBVURfUkFURSAlIGJhdWQ7CisJaWYgKCgocmVtYWluZGVyICogMikgPj0gYmF1ZCkgJiYgKGJhdWQgIT0gMTEwKSkKKwkJZGl2aXNvcisrOworCisJdXJiX3ZhbHVlID0gdXJiX3ZhbHVlIDw8IDg7CisKKwlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9HRVRfU0VUX1VBUlQsIGRpdmlzb3IsIHVyYl92YWx1ZSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSBzZXQgdWFydCBmYWlsZWQiLCBfX2Z1bmNfXyk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9IV19GTE9XX0NPTlRST0xfTUFTSywKKwkJCQkJICAgIFNFUklBTF9DUlRTQ1RTLCAwKTsKKwllbHNlCisJCXJlc3VsdCA9IHNzdTEwMF9jb250cm9sX21zZyhkZXYsIFFUX0hXX0ZMT1dfQ09OVFJPTF9NQVNLLAorCQkJCQkgICAgMCwgMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSBzZXQgSFcgZmxvdyBjb250cm9sIGZhaWxlZCIsIF9fZnVuY19fKTsKKworCWlmIChJX0lYT0ZGKHR0eSkgfHwgSV9JWE9OKHR0eSkpIHsKKwkJdTE2IHggPSAoKHUxNikoU1RBUlRfQ0hBUih0dHkpIDw8IDgpIHwgKHUxNikoU1RPUF9DSEFSKHR0eSkpKTsKKworCQlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9TV19GTE9XX0NPTlRST0xfTUFTSywKKwkJCQkJICAgIHgsIDApOworCX0gZWxzZQorCQlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9TV19GTE9XX0NPTlRST0xfTUFTSywKKwkJCQkJICAgIDAsIDApOworCisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSBzZXQgU1cgZmxvdyBjb250cm9sIGZhaWxlZCIsIF9fZnVuY19fKTsKKworfQorCisKK3N0YXRpYyBpbnQgc3N1MTAwX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IHNzdTEwMF9wb3J0X3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdTggKmRhdGE7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlkYXRhID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksCisJCQkJIFFUX09QRU5fQ0xPU0VfQ0hBTk5FTCwKKwkJCQkgUVRfVFJBTlNGRVJfSU4sIDB4MDEsCisJCQkJIDAsIGRhdGEsIDIsIDMwMCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGJnKCIlcyAtIG9wZW4gZmFpbGVkICVpIiwgX19mdW5jX18sIHJlc3VsdCk7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXByaXYtPnNoYWRvd0xTUiA9IGRhdGFbMF0gICYgKFNFUklBTF9MU1JfT0UgfCBTRVJJQUxfTFNSX1BFIHwKKwkJCQkgICAgICBTRVJJQUxfTFNSX0ZFIHwgU0VSSUFMX0xTUl9CSSk7CisKKwlwcml2LT5zaGFkb3dNU1IgPSBkYXRhWzFdICAmIChTRVJJQUxfTVNSX0NUUyB8IFNFUklBTF9NU1JfRFNSIHwKKwkJCQkgICAgICBTRVJJQUxfTVNSX1JJIHwgU0VSSUFMX01TUl9DRCk7CisKKwlrZnJlZShkYXRhKTsKKworLyogc2V0IHRvIDk2MDAgKi8KKwlyZXN1bHQgPSBzc3UxMDBfY29udHJvbF9tc2coZGV2LCBRVF9HRVRfU0VUX1VBUlQsIDB4MzAsIDB4MDMwMCk7CisJaWYgKHJlc3VsdCA8IDApCisJCWRiZygiJXMgLSBzZXQgdWFydCBmYWlsZWQiLCBfX2Z1bmNfXyk7CisKKwlpZiAodHR5KQorCQlzc3UxMDBfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCB0dHktPnRlcm1pb3MpOworCisJcmV0dXJuIHVzYl9zZXJpYWxfZ2VuZXJpY19vcGVuKHR0eSwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzdTEwMF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisJdXNiX3NlcmlhbF9nZW5lcmljX2Nsb3NlKHBvcnQpOworfQorCitzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmICghcmV0aW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoJnRtcCwgMCwgc2l6ZW9mKHRtcCkpOworCXRtcC5saW5lCQk9IHBvcnQtPnNlcmlhbC0+bWlub3I7CisJdG1wLnBvcnQJCT0gMDsKKwl0bXAuaXJxCQkJPSAwOworCXRtcC5mbGFncwkJPSBBU1lOQ19TS0lQX1RFU1QgfCBBU1lOQ19BVVRPX0lSUTsKKwl0bXAueG1pdF9maWZvX3NpemUJPSBwb3J0LT5idWxrX291dF9zaXplOworCXRtcC5iYXVkX2Jhc2UJCT0gOTYwMDsKKwl0bXAuY2xvc2VfZGVsYXkJCT0gNSpIWjsKKwl0bXAuY2xvc2luZ193YWl0CT0gMzAqSFo7CisKKwlpZiAoY29weV90b191c2VyKHJldGluZm8sICZ0bXAsIHNpemVvZigqcmV0aW5mbykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc3UxMDBfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3N1MTAwX3BvcnRfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWRiZygiJXMgY21kIDB4JTA0eCIsIF9fZnVuY19fLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlyZXR1cm4gZ2V0X3NlcmlhbF9pbmZvKHBvcnQsCisJCQkJICAgICAgIChzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKikgYXJnKTsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJd2hpbGUgKHByaXYgIT0gTlVMTCkgeworCQkJdTggcHJldk1TUiA9IHByaXYtPnNoYWRvd01TUiAmIFNFUklBTF9NU1JfTUFTSzsKKwkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKwkJCS8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi8KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJZWxzZSB7CisJCQkJdTggZGlmZiA9IChwcml2LT5zaGFkb3dNU1IgJiBTRVJJQUxfTVNSX01BU0spIF4gcHJldk1TUjsKKwkJCQlpZiAoIWRpZmYpCisJCQkJCXJldHVybiAtRUlPOyAvKiBubyBjaGFuZ2UgPT4gZXJyb3IgKi8KKworCQkJCS8qIFJldHVybiAwIGlmIGNhbGxlciB3YW50ZWQgdG8ga25vdyBhYm91dAorCQkJCSAgIHRoZXNlIGJpdHMgKi8KKworCQkJCWlmICgoKGFyZyAmIFRJT0NNX1JORykgJiYgKGRpZmYgJiBTRVJJQUxfTVNSX1JJKSkgfHwKKwkJCQkgICAgKChhcmcgJiBUSU9DTV9EU1IpICYmIChkaWZmICYgU0VSSUFMX01TUl9EU1IpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAmJiAoZGlmZiAmIFNFUklBTF9NU1JfQ0QpKSB8fAorCQkJCSAgICAoKGFyZyAmIFRJT0NNX0NUUykgJiYgKGRpZmYgJiBTRVJJQUxfTVNSX0NUUykpKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWRiZygiJXMgYXJnIG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgdm9pZCBzc3UxMDBfc2V0X21heF9wYWNrZXRfc2l6ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzc3UxMDBfcG9ydF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBzZXJpYWwtPmRldjsKKworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBzZXJpYWwtPmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwX2Rlc2MgPSAmaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMV0uZGVzYzsKKworCXVuc2lnbmVkIG51bV9lbmRwb2ludHM7CisJaW50IGk7CisKKwludW1fZW5kcG9pbnRzID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iTnVtRW5kcG9pbnRzOworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJOdW1iZXIgb2YgZW5kcG9pbnRzICVkXG4iLCBudW1fZW5kcG9pbnRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZW5kcG9pbnRzOyBpKyspIHsKKwkJZGV2X2luZm8oJnVkZXYtPmRldiwgIkVuZHBvaW50ICVkIE1heFBhY2tldFNpemUgJWRcbiIsIGkrMSwKKwkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemUpOworCQllcF9kZXNjID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50W2ldLmRlc2M7CisJfQorCisJLyogc2V0IG1heCBwYWNrZXQgc2l6ZSBiYXNlZCBvbiBkZXNjcmlwdG9yICovCisJcHJpdi0+bWF4X3BhY2tldF9zaXplID0gZXBfZGVzYy0+d01heFBhY2tldFNpemU7CisKKwlkZXZfaW5mbygmdWRldi0+ZGV2LCAiU2V0dGluZyBNYXhQYWNrZXRTaXplICVkXG4iLCBwcml2LT5tYXhfcGFja2V0X3NpemUpOworfQorCitzdGF0aWMgaW50IHNzdTEwMF9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3Qgc3N1MTAwX3BvcnRfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKnNlcmlhbC0+cG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuXG4iLCBfX2Z1bmNfXywKKwkJCXNpemVvZigqcHJpdikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOworCisJc3N1MTAwX3NldF9tYXhfcGFja2V0X3NpemUocG9ydCk7CisKKwlyZXR1cm4gc3N1MTAwX2luaXRkZXZpY2Uoc2VyaWFsLT5kZXYpOworfQorCitzdGF0aWMgaW50IHNzdTEwMF90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdTggKmQ7CisJaW50IHI7CisKKwlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCisJciA9IHNzdTEwMF9nZXRyZWdpc3RlcihkZXYsIDAsIE1PREVNX0NUTF9SRUdJU1RFUiwgZCk7CisJaWYgKHIgPCAwKQorCQlnb3RvIG1nZXRfb3V0OworCisJciA9IHNzdTEwMF9nZXRyZWdpc3RlcihkZXYsIDAsIE1PREVNX1NUQVRVU19SRUdJU1RFUiwgZCsxKTsKKwlpZiAociA8IDApCisJCWdvdG8gbWdldF9vdXQ7CisKKwlyID0gKGRbMF0gJiBTRVJJQUxfTUNSX0RUUiA/IFRJT0NNX0RUUiA6IDApIHwKKwkJKGRbMF0gJiBTRVJJQUxfTUNSX1JUUyA/IFRJT0NNX1JUUyA6IDApIHwKKwkJKGRbMV0gJiBTRVJJQUxfTVNSX0NUUyA/IFRJT0NNX0NUUyA6IDApIHwKKwkJKGRbMV0gJiBTRVJJQUxfTVNSX0NEID8gVElPQ01fQ0FSIDogMCkgfAorCQkoZFsxXSAmIFNFUklBTF9NU1JfUkkgPyBUSU9DTV9SSSA6IDApIHwKKwkJKGRbMV0gJiBTRVJJQUxfTVNSX0RTUiA/IFRJT0NNX0RTUiA6IDApOworCittZ2V0X291dDoKKwlrZnJlZShkKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBzc3UxMDBfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCisJZGJnKCIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiB1cGRhdGVfbWN0cmwoZGV2LCBzZXQsIGNsZWFyKTsKK30KKworc3RhdGljIHZvaWQgc3N1MTAwX2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IG9uKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKworCWRiZygiJXNcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7CisJaWYgKCFwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQkvKiBEaXNhYmxlIGZsb3cgY29udHJvbCAqLworCQlpZiAoIW9uICYmCisJCSAgICBzc3UxMDBfc2V0cmVnaXN0ZXIoZGV2LCAwLCAwKSA8IDApCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJlcnJvciBmcm9tIGZsb3djb250cm9sIHVyYlxuIik7CisJCS8qIGRyb3AgUlRTIGFuZCBEVFIgKi8KKwkJaWYgKG9uKQorCQkJc2V0X21jdHJsKGRldiwgVElPQ01fRFRSIHwgVElPQ01fUlRTKTsKKwkJZWxzZQorCQkJY2xlYXJfbWN0cmwoZGV2LCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMpOworCX0KKwltdXRleF91bmxvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgc3N1MTAwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBzc3UxMDBfcG9ydF9wcml2YXRlICpwcml2LAorCQkJCSBjaGFyICpwYWNrZXQsIGludCBsZW4pCit7CisJaW50IGk7CisJY2hhciBmbGFnOworCWNoYXIgKmNoOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChsZW4gPCA0KSB7CisJCWRiZygiJXMgLSBtYWxmb3JtZWQgcGFja2V0IiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHBhY2tldFswXSA9PSAweDFiKSAmJiAocGFja2V0WzFdID09IDB4MWIpICYmCisJICAgICgocGFja2V0WzJdID09IDB4MDApIHx8IChwYWNrZXRbMl0gPT0gMHgwMSkpKSB7CisJCWlmIChwYWNrZXRbMl0gPT0gMHgwMCkKKwkJCXByaXYtPnNoYWRvd0xTUiA9IHBhY2tldFszXSAmIChTRVJJQUxfTFNSX09FIHwKKwkJCQkJCSAgICAgICBTRVJJQUxfTFNSX1BFIHwKKwkJCQkJCSAgICAgICBTRVJJQUxfTFNSX0ZFIHwKKwkJCQkJCSAgICAgICBTRVJJQUxfTFNSX0JJKTsKKworCQlpZiAocGFja2V0WzJdID09IDB4MDEpIHsKKwkJCXByaXYtPnNoYWRvd01TUiA9IHBhY2tldFszXTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQl9CisKKwkJbGVuIC09IDQ7CisJCWNoID0gcGFja2V0ICsgNDsKKwl9IGVsc2UKKwkJY2ggPSBwYWNrZXQ7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CS8qIHN0YXR1cyBvbmx5ICovCisKKwlpZiAocG9ydC0+cG9ydC5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgY2grKykgeworCQkJaWYgKCF1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHR0eSwgcG9ydCwgKmNoKSkKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksICpjaCwgZmxhZyk7CisJCX0KKwl9IGVsc2UKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgY2gsIGZsYWcsIGxlbik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgdm9pZCBzc3UxMDBfcHJvY2Vzc19yZWFkX3VyYihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc3N1MTAwX3BvcnRfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwljaGFyICpkYXRhID0gKGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWludCBjb3VudCA9IDA7CisJaW50IGk7CisJaW50IGxlbjsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwlpZiAoIXR0eSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgaSArPSBwcml2LT5tYXhfcGFja2V0X3NpemUpIHsKKwkJbGVuID0gbWluX3QoaW50LCB1cmItPmFjdHVhbF9sZW5ndGggLSBpLCBwcml2LT5tYXhfcGFja2V0X3NpemUpOworCQljb3VudCArPSBzc3UxMDBfcHJvY2Vzc19wYWNrZXQodHR5LCBwb3J0LCBwcml2LCAmZGF0YVtpXSwgbGVuKTsKKwl9CisKKwlpZiAoY291bnQpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzc3UxMDBfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJzc3UxMDAiLAorCX0sCisJLmRlc2NyaXB0aW9uCSAgICAgPSBEUklWRVJfREVTQywKKwkuaWRfdGFibGUJICAgICA9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyCSAgICAgPSAmc3N1MTAwX2RyaXZlciwKKwkubnVtX3BvcnRzCSAgICAgPSAxLAorCS5idWxrX2luX3NpemUgICAgICAgID0gMjU2LAorCS5idWxrX291dF9zaXplICAgICAgID0gMjU2LAorCS5vcGVuCQkgICAgID0gc3N1MTAwX29wZW4sCisJLmNsb3NlCQkgICAgID0gc3N1MTAwX2Nsb3NlLAorCS5hdHRhY2ggICAgICAgICAgICAgID0gc3N1MTAwX2F0dGFjaCwKKwkucmVsZWFzZSAgICAgICAgICAgICA9IHNzdTEwMF9yZWxlYXNlLAorCS5kdHJfcnRzICAgICAgICAgICAgID0gc3N1MTAwX2R0cl9ydHMsCisJLnByb2Nlc3NfcmVhZF91cmIgICAgPSBzc3UxMDBfcHJvY2Vzc19yZWFkX3VyYiwKKwkudGlvY21nZXQgICAgICAgICAgICA9IHNzdTEwMF90aW9jbWdldCwKKwkudGlvY21zZXQgICAgICAgICAgICA9IHNzdTEwMF90aW9jbXNldCwKKwkuaW9jdGwgICAgICAgICAgICAgICA9IHNzdTEwMF9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgICAgICAgICA9IHNzdTEwMF9zZXRfdGVybWlvcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNzdTEwMF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiByZWdpc3RlciB3aXRoIHVzYi1zZXJpYWwgKi8KKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZzc3UxMDBfZGV2aWNlKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9zaW9fcmVnaXN0ZXI7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnNzdTEwMF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3VzYl9yZWdpc3RlcjoKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnNzdTEwMF9kZXZpY2UpOworZmFpbGVkX3VzYl9zaW9fcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNzdTEwMF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNzdTEwMF9kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmc3N1MTAwX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHNzdTEwMF9pbml0KTsKK21vZHVsZV9leGl0KHNzdTEwMF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IDk0MWMyZDQuLjJhOTgyZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtNjUzLDYgKzY1Myw3IEBACiAJcmV0dXJuIGlkOwogfQogCisvKiBDYWxsZXIgbXVzdCBob2xkIHRhYmxlX2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgKnNlYXJjaF9zZXJpYWxfZGV2aWNlKAogCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CkBAIC03MTgsMTcgKzcxOSwyMyBAQAogCWludCBudW1fcG9ydHMgPSAwOwogCWludCBtYXhfZW5kcG9pbnRzOwogCi0JbG9ja19rZXJuZWwoKTsgLyogZ3VhcmQgYWdhaW5zdCB1bmxvYWRpbmcgYSBzZXJpYWwgZHJpdmVyIG1vZHVsZSAqLworCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwogCXR5cGUgPSBzZWFyY2hfc2VyaWFsX2RldmljZShpbnRlcmZhY2UpOwogCWlmICghdHlwZSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CiAJCWRiZygibm9uZSBtYXRjaGVkIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmICghdHJ5X21vZHVsZV9nZXQodHlwZS0+ZHJpdmVyLm93bmVyKSkgeworCQltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm1vZHVsZSBnZXQgZmFpbGVkLCBleGl0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCW11dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisKIAlzZXJpYWwgPSBjcmVhdGVfc2VyaWFsKGRldiwgaW50ZXJmYWNlLCB0eXBlKTsKIAlpZiAoIXNlcmlhbCkgewotCQl1bmxvY2tfa2VybmVsKCk7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTczNywyMCArNzQ0LDExIEBACiAJaWYgKHR5cGUtPnByb2JlKSB7CiAJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKIAotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPmRyaXZlci5vd25lcikpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAotCQkJCSJtb2R1bGUgZ2V0IGZhaWxlZCwgZXhpdGluZ1xuIik7Ci0JCQlrZnJlZShzZXJpYWwpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQogCQlpZCA9IGdldF9pZmFjZV9pZCh0eXBlLCBpbnRlcmZhY2UpOwogCQlyZXR2YWwgPSB0eXBlLT5wcm9iZShzZXJpYWwsIGlkKTsKIAkJbW9kdWxlX3B1dCh0eXBlLT5kcml2ZXIub3duZXIpOwogCiAJCWlmIChyZXR2YWwpIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCWRiZygic3ViIGRyaXZlciByZWplY3RlZCBkZXZpY2UiKTsKIAkJCWtmcmVlKHNlcmlhbCk7CiAJCQlyZXR1cm4gcmV0dmFsOwpAQCAtODIyLDcgKzgyMCw2IEBACiAJCSAqIHByb3Blcmx5IGR1cmluZyBhIGxhdGVyIGludm9jYXRpb24gb2YgdXNiX3NlcmlhbF9wcm9iZQogCQkgKi8KIAkJaWYgKG51bV9idWxrX2luID09IDAgfHwgbnVtX2J1bGtfb3V0ID09IDApIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIlBMLTIzMDMgaGFjazogZGVzY3JpcHRvcnMgbWF0Y2hlZCBidXQgZW5kcG9pbnRzIGRpZCBub3RcbiIpOwogCQkJa2ZyZWUoc2VyaWFsKTsKIAkJCXJldHVybiAtRU5PREVWOwpAQCAtODM1LDcgKzgzMiw2IEBACiAJaWYgKHR5cGUgPT0gJnVzYl9zZXJpYWxfZ2VuZXJpY19kZXZpY2UpIHsKIAkJbnVtX3BvcnRzID0gbnVtX2J1bGtfb3V0OwogCQlpZiAobnVtX3BvcnRzID09IDApIHsKLQkJCXVubG9ja19rZXJuZWwoKTsKIAkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAogCQkJICAgICJHZW5lcmljIGRldmljZSB3aXRoIG5vIGJ1bGsgb3V0LCBub3QgYWxsb3dlZC5cbiIpOwogCQkJa2ZyZWUoc2VyaWFsKTsKQEAgLTg0Nyw3ICs4NDMsNiBAQAogCQkvKiBpZiB0aGlzIGRldmljZSB0eXBlIGhhcyBhIGNhbGNfbnVtX3BvcnRzIGZ1bmN0aW9uLCBjYWxsIGl0ICovCiAJCWlmICh0eXBlLT5jYWxjX251bV9wb3J0cykgewogCQkJaWYgKCF0cnlfbW9kdWxlX2dldCh0eXBlLT5kcml2ZXIub3duZXIpKSB7Ci0JCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAogCQkJCQkibW9kdWxlIGdldCBmYWlsZWQsIGV4aXRpbmdcbiIpOwogCQkJCWtmcmVlKHNlcmlhbCk7CkBAIC04NzgsNyArODczLDYgQEAKIAltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIG51bV9pbnRlcnJ1cHRfb3V0KTsKIAltYXhfZW5kcG9pbnRzID0gbWF4KG1heF9lbmRwb2ludHMsIChpbnQpc2VyaWFsLT5udW1fcG9ydHMpOwogCXNlcmlhbC0+bnVtX3BvcnRfcG9pbnRlcnMgPSBtYXhfZW5kcG9pbnRzOwotCXVubG9ja19rZXJuZWwoKTsKIAogCWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2UiLAogCQkJCQkJX19mdW5jX18sIG1heF9lbmRwb2ludHMpOwpAQCAtMTA3Nyw2ICsxMDcxLDggQEAKIAkJZGV2X3NldF9uYW1lKCZwb3J0LT5kZXYsICJ0dHlVU0IlZCIsIHBvcnQtPm51bWJlcik7CiAJCWRiZyAoIiVzIC0gcmVnaXN0ZXJpbmcgJXMiLCBfX2Z1bmNfXywgZGV2X25hbWUoJnBvcnQtPmRldikpOwogCQlwb3J0LT5kZXZfc3RhdGUgPSBQT1JUX1JFR0lTVEVSSU5HOworCQlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1c3BlbmQoJnBvcnQtPmRldik7CisKIAkJcmV0dmFsID0gZGV2aWNlX2FkZCgmcG9ydC0+ZGV2KTsKIAkJaWYgKHJldHZhbCkgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiRXJyb3IgcmVnaXN0ZXJpbmcgcG9ydCBkZXZpY2UsICIKQEAgLTEzNDksNiArMTM0NSw3IEBACiAJCWRyaXZlci0+ZGVzY3JpcHRpb24gPSBkcml2ZXItPmRyaXZlci5uYW1lOwogCiAJLyogQWRkIHRoaXMgZGV2aWNlIHRvIG91ciBsaXN0IG9mIGRldmljZXMgKi8KKwltdXRleF9sb2NrKCZ0YWJsZV9sb2NrKTsKIAlsaXN0X2FkZCgmZHJpdmVyLT5kcml2ZXJfbGlzdCwgJnVzYl9zZXJpYWxfZHJpdmVyX2xpc3QpOwogCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9idXNfcmVnaXN0ZXIoZHJpdmVyKTsKQEAgLTEzNjAsNiArMTM1Nyw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIlVTQiBTZXJpYWwgc3VwcG9ydCByZWdpc3RlcmVkIGZvciAlc1xuIiwKIAkJCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOwogCisJbXV0ZXhfdW5sb2NrKCZ0YWJsZV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9yZWdpc3Rlcik7CkBAIC0xMzcwLDggKzEzNjgsMTAgQEAKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiVVNCIFNlcmlhbCBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwKIAkgICAgICAgZGV2aWNlLT5kZXNjcmlwdGlvbik7CisJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CiAJbGlzdF9kZWwoJmRldmljZS0+ZHJpdmVyX2xpc3QpOwogCXVzYl9zZXJpYWxfYnVzX2RlcmVnaXN0ZXIoZGV2aWNlKTsKKwltdXRleF91bmxvY2soJnRhYmxlX2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9kZXJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9mcmVlY29tLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwppbmRleCA1NGNjOTQyLi42NTQyY2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJLyogVGhlIGZpcm13YXJlIHdpbGwgdGltZS1vdXQgY29tbWFuZHMgYWZ0ZXIgMjAgc2Vjb25kcy4gU29tZSBjb21tYW5kcwogCSAqIGNhbiBsZWdpdGltYXRlbHkgdGFrZSBsb25nZXIgdGhhbiB0aGlzLCBzbyB3ZSB1c2UgYSBkaWZmZXJlbnQKIAkgKiBjb21tYW5kIHRoYXQgb25seSB3YWl0cyBmb3IgdGhlIGludGVycnVwdCBhbmQgdGhlbiBzZW5kcyBzdGF0dXMsCi0JICogd2l0aG91dCBoYXZpbmcgdG8gc2VuZCBhIG5ldyBBVEFQSSBjb21tYW5kIHRvIHRoZSBkZXZpY2UuIAorCSAqIHdpdGhvdXQgaGF2aW5nIHRvIHNlbmQgYSBuZXcgQVRBUEkgY29tbWFuZCB0byB0aGUgZGV2aWNlLgogCSAqCiAJICogTk9URTogVGhlcmUgaXMgc29tZSBpbmRpY2F0aW9uIHRoYXQgYSBkYXRhIHRyYW5zZmVyIGFmdGVyIGEgdGltZW91dAogCSAqIG1heSBub3Qgd29yaywgYnV0IHRoYXQgaXMgYSBjb25kaXRpb24gdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLgpAQCAtMzI0LDE0ICszMjQsMTQgQEAKIAogCS8qIEZpbmQgdGhlIGxlbmd0aCB3ZSBkZXNpcmUgdG8gcmVhZC4gKi8KIAlzd2l0Y2ggKHNyYi0+Y21uZFswXSkgewotCQljYXNlIElOUVVJUlk6Ci0JCWNhc2UgUkVRVUVTVF9TRU5TRToJCS8qIDE2IG9yIDE4IGJ5dGVzPyBzcGVjIHNheXMgMTgsIGxvdHMgb2YgZGV2aWNlcyBvbmx5IGhhdmUgMTYgKi8KLQkJY2FzZSBNT0RFX1NFTlNFOgotCQljYXNlIE1PREVfU0VOU0VfMTA6Ci0JCQlsZW5ndGggPSBsZTE2X3RvX2NwdShmc3QtPkNvdW50KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbGVuZ3RoID0gc2NzaV9idWZmbGVuKHNyYik7CisJY2FzZSBJTlFVSVJZOgorCWNhc2UgUkVRVUVTVF9TRU5TRToJLyogMTYgb3IgMTggYnl0ZXM/IHNwZWMgc2F5cyAxOCwgbG90cyBvZiBkZXZpY2VzIG9ubHkgaGF2ZSAxNiAqLworCWNhc2UgTU9ERV9TRU5TRToKKwljYXNlIE1PREVfU0VOU0VfMTA6CisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGZzdC0+Q291bnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsZW5ndGggPSBzY3NpX2J1ZmZsZW4oc3JiKTsKIAl9CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGFtb3VudCBpcyBsZWdhbCAqLwpAQCAtNDE0LDcgKzQxNCw3IEBACiAJCS8qIHNob3VsZCBuZXZlciBoaXQgaGVyZSAtLSBmaWx0ZXJlZCBpbiB1c2IuYyAqLwogCQlVU19ERUJVR1AgKCJmcmVlY29tIHVuaW1wbGVtZW50ZWQgZGlyZWN0aW9uOiAlZFxuIiwKIAkJCQl1cy0+c3JiLT5zY19kYXRhX2RpcmVjdGlvbik7Ci0JCS8vIFJldHVybiBmYWlsLCBTQ1NJIHNlZW1zIHRvIGhhbmRsZSB0aGlzIGJldHRlci4KKwkJLyogUmV0dXJuIGZhaWwsIFNDU0kgc2VlbXMgdG8gaGFuZGxlIHRoaXMgYmV0dGVyLiAqLwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0ZBSUxFRDsKIAkJYnJlYWs7CiAJfQpAQCAtNDk0LDggKzQ5NCw3IEBACiAJCQkJb2Zmc2V0ID0gMDsKIAkJCX0KIAkJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiUwOHg6IiwgaSk7Ci0JCX0KLQkJZWxzZSBpZiAoKGkgJiA3KSA9PSAwKSB7CisJCX0gZWxzZSBpZiAoKGkgJiA3KSA9PSAwKSB7CiAJCQlvZmZzZXQgKz0gc3ByaW50ZiAobGluZStvZmZzZXQsICIgLSIpOwogCQl9CiAJCW9mZnNldCArPSBzcHJpbnRmIChsaW5lK29mZnNldCwgIiAlMDJ4IiwgYnVmZmVyW2ldICYgMHhmZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCBlOWNiYzE0Li42Yjk5ODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTE0NTYsOCArMTQ1Niw3IEBACiAJaW50IHJldFN0YXR1cyA9IElTRDIwMF9HT09EOwogCXN0cnVjdCBpc2QyMDBfaW5mbyAqaW5mbzsKIAotCWluZm8gPSAoc3RydWN0IGlzZDIwMF9pbmZvICopCi0JCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaXNkMjAwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlzZDIwMF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXRTdGF0dXMgPSBJU0QyMDBfRVJST1I7CiAJZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwppbmRleCBhN2QwYmY5Li45MGJiMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKQEAgLTMzNiw2ICszMzYsNyBAQAogCQllbHNlIHsKIAkJCVVTX0RFQlVHKHVzYl9zdG9yX3Nob3dfY29tbWFuZCh1cy0+c3JiKSk7CiAJCQl1cy0+cHJvdG9faGFuZGxlcih1cy0+c3JiLCB1cyk7CisJCQl1c2JfbWFya19sYXN0X2J1c3kodXMtPnB1c2JfZGV2KTsKIAkJfQogCiAJCS8qIGxvY2sgYWNjZXNzIHRvIHRoZSBzdGF0ZSAqLwpAQCAtODQ1LDYgKzg0Niw3IEBACiAJCS8qIFNob3VsZCB3ZSB1bmJpbmQgaWYgbm8gZGV2aWNlcyB3ZXJlIGRldGVjdGVkPyAqLwogCX0KIAorCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSh1cy0+cHVzYl9pbnRmKTsKIAljb21wbGV0ZV9hbmRfZXhpdCgmdXMtPnNjYW5uaW5nX2RvbmUsIDApOwogfQogCkBAIC05NjgsNiArOTcwLDcgQEAKIAkJZ290byBCYWREZXZpY2U7CiAJfQogCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSh1cy0+cHVzYl9pbnRmKTsKIAl3YWtlX3VwX3Byb2Nlc3ModGgpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDQwLDYgKzEwNDMsNyBAQAogCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCiAJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAogCS5pZF90YWJsZSA9CXVzYl9zdG9yYWdlX3VzYl9pZHMsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIAkuc29mdF91bmJpbmQgPQkxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBkMTEwNTg4Li41NTI2NzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtMTQyLDcgKzE0Miw3IEBACiB7CiAJc3RydWN0IHVzYl9za2VsICpkZXY7CiAKLQlkZXYgPSAoc3RydWN0IHVzYl9za2VsICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlzdHJ1Y3QgdXNiX3NrZWwgKmRldjsKIAlpbnQgcmVzOwogCi0JZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAJaW50IHJ2OwogCWJvb2wgb25nb2luZ19pbzsKIAotCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJLyogaWYgd2UgY2Fubm90IHJlYWQgYXQgYWxsLCByZXR1cm4gRU9GICovCiAJaWYgKCFkZXYtPmJ1bGtfaW5fdXJiIHx8ICFjb3VudCkKQEAgLTQwMSw3ICs0MDEsNyBAQAogCWNoYXIgKmJ1ZiA9IE5VTEw7CiAJc2l6ZV90IHdyaXRlc2l6ZSA9IG1pbihjb3VudCwgKHNpemVfdClNQVhfVFJBTlNGRVIpOwogCi0JZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAkvKiB2ZXJpZnkgdGhhdCB3ZSBhY3R1YWxseSBoYXZlIHNvbWUgZGF0YSB0byB3cml0ZSAqLwogCWlmIChjb3VudCA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDdiMTFlYTYuLjhiMzFmZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAKIGNvbmZpZyBGQl9WSUEKICAgICAgICB0cmlzdGF0ZSAiVklBIFVuaUNocm9tZSAoUHJvKSBhbmQgQ2hyb21lOSBkaXNwbGF5IHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBGQiAmJiBQQ0kKKyAgICAgICBkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiBYODYKICAgICAgICBzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAgICAgICAgc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogICAgICAgIHNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC0xODk2LDYgKzE4OTYsMTMgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFNIX01JUElfRFNJCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIChTVVBFUkggfHwgQVJDSF9TSE1PQklMRSkgJiYgSEFWRV9DTEsKKworY29uZmlnIFNIX0xDRF9NSVBJX0RTSQorCWJvb2wKKwogY29uZmlnIEZCX1NIX01PQklMRV9MQ0RDCiAJdHJpc3RhdGUgIlN1cGVySCBNb2JpbGUgTENEQyBmcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgKFNVUEVSSCB8fCBBUkNIX1NITU9CSUxFKSAmJiBIQVZFX0NMSwpAQCAtMTkwNCw5ICsxOTExLDE3IEBACiAJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKIAlzZWxlY3QgRkJfU1lTX0ZPUFMKIAlzZWxlY3QgRkJfREVGRVJSRURfSU8KKwlzZWxlY3QgU0hfTUlQSV9EU0kgaWYgU0hfTENEX01JUElfRFNJCiAJLS0taGVscC0tLQogCSAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgdGhlIG9uLWNoaXAgU0gtTW9iaWxlIExDRCBjb250cm9sbGVyLgogCitjb25maWcgRkJfU0hfTU9CSUxFX0hETUkKKwl0cmlzdGF0ZSAiU3VwZXJIIE1vYmlsZSBIRE1JIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCX1NIX01PQklMRV9MQ0RDCisJc2VsZWN0IEZCX01PREVfSEVMUEVSUworCS0tLWhlbHAtLS0KKwkgIERyaXZlciBmb3IgdGhlIG9uLWNoaXAgU0gtTW9iaWxlIEhETUkgY29udHJvbGxlci4KKwogY29uZmlnIEZCX1RNSU8KIAl0cmlzdGF0ZSAiVG9zaGliYSBNb2JpbGUgSU8gRnJhbWVCdWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIE1GRF9DT1JFCkBAIC0xOTMxLDcgKzE5NDYsNyBAQAogCiBjb25maWcgRkJfUzNDCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzNDIGZyYW1lYnVmZmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiBBUkNIX1MzQzY0WFgKKwlkZXBlbmRzIG9uIEZCICYmIFMzQ19ERVZfRkIKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCBmNTZhOWNhLi40ODVlOGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTEyMyw2ICsxMjMsOCBAQAogb2JqLSQoQ09ORklHX0ZCX1BTMykJCSAgKz0gcHMzZmIubwogb2JqLSQoQ09ORklHX0ZCX1NNNTAxKSAgICAgICAgICAgICs9IHNtNTAxZmIubwogb2JqLSQoQ09ORklHX0ZCX1hJTElOWCkgICAgICAgICAgICs9IHhpbGlueGZiLm8KK29iai0kKENPTkZJR19TSF9NSVBJX0RTSSkJICArPSBzaF9taXBpX2RzaS5vCitvYmotJChDT05GSUdfRkJfU0hfTU9CSUxFX0hETUkpCSAgKz0gc2hfbW9iaWxlX2hkbWkubwogb2JqLSQoQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDKQkgICs9IHNoX21vYmlsZV9sY2RjZmIubwogb2JqLSQoQ09ORklHX0ZCX09NQVApICAgICAgICAgICAgICs9IG9tYXAvCiBvYmoteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gb21hcDIvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCmluZGV4IDhlOGYxOGQuLjVhMzVmMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCiBjb25maWcgVkdBX0NPTlNPTEUKIAlib29sICJWR0EgdGV4dCBjb25zb2xlIiBpZiBFTUJFRERFRCB8fCAhWDg2Ci0JZGVwZW5kcyBvbiAhQVJDSF9BQ09STiAmJiAhQVJDSF9FQlNBMTEwICYmICE0eHggJiYgITh4eCAmJiAhU1BBUkMgJiYgIU02OEsgJiYgIVBBUklTQyAmJiAhRlJWICYmICFBUkNIX1ZFUlNBVElMRSAmJiAhU1VQRVJIICYmICFCTEFDS0ZJTiAmJiAhQVZSMzIgJiYgIU1OMTAzMDAKKwlkZXBlbmRzIG9uICE0eHggJiYgITh4eCAmJiAhU1BBUkMgJiYgIU02OEsgJiYgIVBBUklTQyAmJiAhRlJWICYmICFTVVBFUkggJiYgIUJMQUNLRklOICYmICFBVlIzMiAmJiAhTU4xMDMwMCAmJiAoIUFSTSB8fCBBUkNIX0ZPT1RCUklER0UgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfTkVUV0lOREVSKQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIExpbnV4IGluIHRleHQgbW9kZSB0aHJvdWdoIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvYml0YmxpdC5jCmluZGV4IGFmODg2NTEuLjI4YjFhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9iaXRibGl0LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2JpdGJsaXQuYwpAQCAtMjIsNyArMjIsNyBAQAogLyoKICAqIEFjY2VsZXJhdGVkIGhhbmRsZXJzLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2F0dHIodTggKmRzdCwgdTggKnNyYywgaW50IGF0dHJpYnV0ZSwKK3N0YXRpYyB2b2lkIHVwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCiAJCQkgICAgICAgc3RydWN0IHZjX2RhdGEgKnZjKQogewogCWludCBpLCBvZmZzZXQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDNiM2Y1NzQuLjg0Zjg0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yODMsMTAgKzI4MywxMSBAQAogCXN0cnVjdCBmYmNvbl9vcHMgKm9wcyA9IGluZm8tPmZiY29uX3BhcjsKIAogCXJldHVybiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcgfHwKLQkJdmMtPnZjX21vZGUgIT0gS0RfVEVYVCB8fCBvcHMtPmdyYXBoaWNzKTsKKwkJdmMtPnZjX21vZGUgIT0gS0RfVEVYVCB8fCBvcHMtPmdyYXBoaWNzKSAmJgorCQkhdnRfZm9yY2Vfb29wc19vdXRwdXQodmMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfY29sb3Ioc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yKHN0cnVjdCB2Y19kYXRhICp2Yywgc3RydWN0IGZiX2luZm8gKmluZm8sCiAJICAgICAgdTE2IGMsIGludCBpc19mZykKIHsKIAlpbnQgZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCk7CkBAIC0xMDczLDYgKzEwNzQsNyBAQAogCWlmIChwLT51c2VyZm9udCkKIAkJY2hhcmNudCA9IEZOVENIQVJDTlQocC0+Zm9udGRhdGEpOwogCisJdmMtPnZjX3BhbmljX2ZvcmNlX3dyaXRlID0gISEoaW5mby0+ZmxhZ3MgJiBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVCk7CiAJdmMtPnZjX2Nhbl9kb19jb2xvciA9IChmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCkhPTEpOwogCXZjLT52Y19jb21wbGVtZW50X21hc2sgPSB2Yy0+dmNfY2FuX2RvX2NvbG9yID8gMHg3NzAwIDogMHgwODAwOwogCWlmIChjaGFyY250ID09IDI1NikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2Njdy5jCmluZGV4IGQxMzU2NzEuLjQxYjMyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jY3cuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb25fY2N3LmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFJvdGF0aW9uIDI3MCBkZWdyZWVzCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGNjd191cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLAorc3RhdGljIHZvaWQgY2N3X3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCiAJCQkJICBzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJaW50IGksIGosIG9mZnNldCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl9jdy5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMKaW5kZXggMTI2MTEwZi4uNmE3Mzc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX2N3LmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFJvdGF0aW9uIDkwIGRlZ3JlZXMKICAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3dfdXBkYXRlX2F0dHIodTggKmRzdCwgdTggKnNyYywgaW50IGF0dHJpYnV0ZSwKK3N0YXRpYyB2b2lkIGN3X3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCiAJCQkJICBzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJaW50IGksIGosIG9mZnNldCA9ICh2Yy0+dmNfZm9udC5oZWlnaHQgPCAxMCkgPyAxIDogMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbl91ZC5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3VkLmMKaW5kZXggOTNhM2U3My4uZmYwODcyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3VkLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uX3VkLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIFJvdGF0aW9uIDE4MCBkZWdyZWVzCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHVkX3VwZGF0ZV9hdHRyKHU4ICpkc3QsIHU4ICpzcmMsIGludCBhdHRyaWJ1dGUsCitzdGF0aWMgdm9pZCB1ZF91cGRhdGVfYXR0cih1OCAqZHN0LCB1OCAqc3JjLCBpbnQgYXR0cmlidXRlLAogCQkJCSAgc3RydWN0IHZjX2RhdGEgKnZjKQogewogCWludCBpLCBvZmZzZXQgPSAodmMtPnZjX2ZvbnQuaGVpZ2h0IDwgMTApID8gMSA6IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggMTgyZGQ2Zi4uNTRlMzJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMTEwOCw3ICsxMTA4LDYgQEAKIAkJY2hhcm1hcCArPSA0ICogY21hcHN6OwogI2VuZGlmCiAKLQl1bmxvY2tfa2VybmVsKCk7CiAJc3Bpbl9sb2NrX2lycSgmdmdhX2xvY2spOwogCS8qIEZpcnN0LCB0aGUgU2VxdWVuY2VyICovCiAJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfUkVTRVQsIDB4MSk7CkBAIC0xMTkyLDcgKzExOTEsNiBAQAogCQl2Z2Ffd2F0dHIoc3RhdGUtPnZnYWJhc2UsIFZHQV9BUl9FTkFCTEVfRElTUExBWSwgMCk7CQogCX0KIAlzcGluX3VubG9ja19pcnEoJnZnYV9sb2NrKTsKLQlsb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggNGE1NmY0Ni4uODE1Zjg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZWZpZmJfZGVmaW5lZCBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBlZmlmYl9kZWZpbmVkIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVywKIAkuaGVpZ2h0CQkJPSAtMSwKIAkud2lkdGgJCQk9IC0xLApAQCAtMjcsNyArMjcsNyBAQAogCS52bW9kZQkJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZWZpZmJfZml4IF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGVmaWZiX2ZpeCBfX2RldmluaXRkYXRhID0gewogCS5pZAkJCT0gIkVGSSBWR0EiLAogCS50eXBlCQkJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCiAJLmFjY2VsCQkJPSBGQl9BQ0NFTF9OT05FLApAQCAtNTksNyArNTksNyBAQAogCWludCBzdHJpZGU7CiAJaW50IHdpZHRoOwogCWludCBoZWlnaHQ7Ci19IGRtaV9saXN0W10gPSB7Cit9IGRtaV9saXN0W10gX19pbml0ZGF0YSA9IHsKIAlbTV9JMTddID0geyAiaTE3IiwgMHg4MDAxMDAwMCwgMTQ3MiAqIDQsIDE0NDAsIDkwMCB9LAogCVtNX0kyMF0gPSB7ICJpMjAiLCAweDgwMDEwMDAwLCAxNzI4ICogNCwgMTY4MCwgMTA1MCB9LCAvKiBndWVzcyAqLwogCVtNX0kyMF9TUl0gPSB7ICJpbWFjNyIsIDB4NDAwMTAwMDAsIDE3MjggKiA0LCAxNjgwLCAxMDUwIH0sCkBAIC04Myw3ICs4Myw3IEBACiAJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCBuYW1lKSB9LAkJXAogCSAgJmRtaV9saXN0W2VudW1pZF0gfQogCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBkbWlfc3lzdGVtX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgZG1pX3N5c3RlbV90YWJsZVtdIF9faW5pdGNvbnN0ID0gewogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM0LDEiLCBNX0kxNyksCiAJLyogQXQgbGVhc3Qgb25lIG9mIHRoZXNlIHR3byB3aWxsIGJlIHJpZ2h0OyBtYXliZSBib3RoPyAqLwogCUVGSUZCX0RNSV9TWVNURU1fSUQoIkFwcGxlIENvbXB1dGVyLCBJbmMuIiwgImlNYWM1LDEiLCBNX0kyMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggNzMxZmNlNi4uYjA2NjQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTM2Miw2ICsxMzYyLDcgQEAKIAl2bWEtPnZtX3Bnb2ZmID0gb2ZmID4+IFBBR0VfU0hJRlQ7CiAJLyogVGhpcyBpcyBhbiBJTyBtYXAgLSB0ZWxsIG1heWR1bXAgdG8gc2tpcCB0aGlzIFZNQSAqLwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRDsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7CiAJZmJfcGdwcm90ZWN0KGZpbGUsIHZtYSwgb2ZmKTsKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgb2ZmID4+IFBBR0VfU0hJRlQsCiAJCQkgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpKQpAQCAtMTc4Niw3ICsxNzg3LDcgQEAKIGludCBmYl9nZXRfb3B0aW9ucyhjaGFyICpuYW1lLCBjaGFyICoqb3B0aW9uKQogewogCWNoYXIgKm9wdCwgKm9wdGlvbnMgPSBOVUxMOwotCWludCBvcHRfbGVuLCByZXR2YWwgPSAwOworCWludCByZXR2YWwgPSAwOwogCWludCBuYW1lX2xlbiA9IHN0cmxlbihuYW1lKSwgaTsKIAogCWlmIChuYW1lX2xlbiAmJiBvZm9ubHkgJiYgc3RybmNtcChuYW1lLCAib2ZmYiIsIDQpKQpAQCAtMTc5Niw4ICsxNzk3LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IEZCX01BWDsgaSsrKSB7CiAJCQlpZiAodmlkZW9fb3B0aW9uc1tpXSA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwotCQkJb3B0X2xlbiA9IHN0cmxlbih2aWRlb19vcHRpb25zW2ldKTsKLQkJCWlmICghb3B0X2xlbikKKwkJCWlmICghdmlkZW9fb3B0aW9uc1tpXVswXSkKIAkJCQljb250aW51ZTsKIAkJCW9wdCA9IHZpZGVvX29wdGlvbnNbaV07CiAJCQlpZiAoIXN0cm5jbXAobmFtZSwgb3B0LCBuYW1lX2xlbikgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaWdhZmIuYyBiL2RyaXZlcnMvdmlkZW8vaWdhZmIuYwppbmRleCAxNWQyMDAxLi5kODg1Yzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2lnYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9pZ2FmYi5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotaW50IF9faW5pdCBpZ2FmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpZ2FmYl9pbml0KHZvaWQpCiB7CiAgICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvOwogICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTUzMSw2ICs1MzEsNyBAQAogCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIAkJa2ZyZWUocGFyLT5tbWFwX21hcCk7CiAJCWtmcmVlKGluZm8pOworCQlyZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAjaWZkZWYgQ09ORklHX1NQQVJDCkBAIC01NTYsNyArNTU3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBpZ2FmYl9zZXR1cChjaGFyICpvcHRpb25zKQorc3RhdGljIGludCBfX2luaXQgaWdhZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKICAgICBjaGFyICp0aGlzX29wdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IDQzZjA2MzkuLjVjMzYzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTQwLDYgKzQwLDEyIEBACiAgKi8KICNkZWZpbmUgREVCVUdfVkFSIDEKIAorI2lmIGRlZmluZWQoQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRV9NT0RVTEUpICYmIFwKKwkJZGVmaW5lZChDT05GSUdfRkJfSU1YX01PRFVMRSkpCisjZGVmaW5lIFBXTVJfQkFDS0xJR0hUX0FWQUlMQUJMRQorI2VuZGlmCisKICNkZWZpbmUgRFJJVkVSX05BTUUgImlteC1mYiIKIAogI2RlZmluZSBMQ0RDX1NTQQkweDAwCkBAIC0xNzUsNyArMTgxLDkgQEAKIAogCXN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlICptb2RlOwogCWludAkJCW51bV9tb2RlczsKKyNpZmRlZiBQV01SX0JBQ0tMSUdIVF9BVkFJTEFCTEUKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisjZW5kaWYKIAogCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7CiAJdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKQEAgLTQ1MCw4ICs0NTgsNyBAQAogCXJldHVybiAwOwogfQogCi0KLQorI2lmZGVmIFBXTVJfQkFDS0xJR0hUX0FWQUlMQUJMRQogc3RhdGljIGludCBpbXhmYl9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCiB7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGJsX2dldF9kYXRhKGJsKTsKQEAgLTUxNiw2ICs1MjMsNyBAQAogCWlmIChmYmktPmJsKQogCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZmJpLT5ibCk7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoc3RydWN0IGlteGZiX2luZm8gKmZiaSkKIHsKQEAgLTY0Nyw2ICs2NTUsOSBAQAogCQkJZmJpLT5yZWdzICsgTENEQ19TSVpFKTsKIAogCXdyaXRlbChmYmktPnBjciwgZmJpLT5yZWdzICsgTENEQ19QQ1IpOworI2lmbmRlZiBQV01SX0JBQ0tMSUdIVF9BVkFJTEFCTEUKKwl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOworI2VuZGlmCiAJd3JpdGVsKGZiaS0+bHNjcjEsIGZiaS0+cmVncyArIExDRENfTFNDUjEpOwogCXdyaXRlbChmYmktPmRtYWNyLCBmYmktPnJlZ3MgKyBMQ0RDX0RNQUNSKTsKIApAQCAtODQ3LDcgKzg1OCw5IEBACiAKIAlpbXhmYl9lbmFibGVfY29udHJvbGxlcihmYmkpOwogCWZiaS0+cGRldiA9IHBkZXY7CisjaWZkZWYgUFdNUl9CQUNLTElHSFRfQVZBSUxBQkxFCiAJaW14ZmJfaW5pdF9iYWNrbGlnaHQoZmJpKTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiAKQEAgLTg4NSw3ICs4OTgsOSBAQAogCiAJaW14ZmJfZGlzYWJsZV9jb250cm9sbGVyKGZiaSk7CiAKKyNpZmRlZiBQV01SX0JBQ0tMSUdIVF9BVkFJTEFCTEUKIAlpbXhmYl9leGl0X2JhY2tsaWdodChmYmkpOworI2VuZGlmCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKaW5kZXggYzFmZjI3MS4uN2MzMTZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYwpAQCAtMTg3LDEwICsxODcsOCBAQAogCiBzdGF0aWMgdm9pZCBtZGRpX2hhbmRsZV9yZXZfZGF0YV9hdmFpbChzdHJ1Y3QgbWRkaV9pbmZvICptZGRpKQogewotCXVuaW9uIG1kZGlfcmV2ICpyZXYgPSBtZGRpLT5yZXZfZGF0YTsKIAl1aW50MzJfdCByZXZfZGF0YV9jb3VudDsKIAl1aW50MzJfdCByZXZfY3JjX2Vycl9jb3VudDsKLQlpbnQgaTsKIAlzdHJ1Y3QgcmVnX3JlYWRfaW5mbyAqcmk7CiAJc2l6ZV90IHByZXZfb2Zmc2V0OwogCXVpbnQxNl90IGxlbmd0aDsKQEAgLTY3MCw3ICs2NjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtZGRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZGRpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1zbV9tZGRpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1kZGlfaW5mbyAqbWRkaSA9ICZtZGRpX2luZm9bcGRldi0+aWRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwppbmRleCAxOWMwMWM2Li4zYzI4ZGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwpAQCAtMjU4LDcgKzI1OCw2IEBACiB7CiAJaW50IHB1dF9uZWVkZWQsIHJldCA9IDA7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0JdW5zaWduZWQgbG9uZyB2c3RhcnQ7CiAKIAlmaWxlID0gZmdldF9saWdodChpbWctPm1lbW9yeV9pZCwgJnB1dF9uZWVkZWQpOwogCWlmIChmaWxlID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Fwb2xsb24uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYXBvbGxvbi5jCmluZGV4IDJiZTk0ZWIuLjEwNDU5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYXBvbGxvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYXBvbGxvbi5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxwbGF0L211eC5oPgogCiAjaW5jbHVkZSAib21hcGZiLmgiCiAKQEAgLTM0LDggKzMzLDYgQEAKIHN0YXRpYyBpbnQgYXBvbGxvbl9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAogCQkJCXN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldikKIHsKLQkvKiBjb25maWd1cmUgTENEIFBXUl9FTiAqLwotCW9tYXBfY2ZnX3JlZyhNMjFfMjQyWF9HUElPMTEpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jCmluZGV4IGFhZjVkMzAuLmUxYzc2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdGFhbC5jCkBAIC0yOCwxMiArMjgsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDxwbGF0L25va2lhLWRzaS1wYW5lbC5oPgogCiAvKiBEU0kgVmlydHVhbCBjaGFubmVsLiBIYXJkY29kZWQgZm9yIG5vdy4gKi8KICNkZWZpbmUgVENIIDAKQEAgLTYyLDExICs2MywxMzYgQEAKICNkZWZpbmUgRENTX0dFVF9JRDIJCTB4ZGIKICNkZWZpbmUgRENTX0dFVF9JRDMJCTB4ZGMKIAotLyogI2RlZmluZSBUQUFMX1VTRV9FU0RfQ0hFQ0sgKi8KICNkZWZpbmUgVEFBTF9FU0RfQ0hFQ0tfUEVSSU9ECW1zZWNzX3RvX2ppZmZpZXMoNTAwMCkKIAorc3RhdGljIGlycXJldHVybl90IHRhYWxfdGVfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgdGFhbF90ZV90aW1lb3V0X3dvcmtfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyBpbnQgX3RhYWxfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOwogCitzdHJ1Y3QgcGFuZWxfcmVndWxhdG9yIHsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbWluX3VWOworCWludCBtYXhfdVY7Cit9OworCitzdGF0aWMgdm9pZCBmcmVlX3JlZ3VsYXRvcnMoc3RydWN0IHBhbmVsX3JlZ3VsYXRvciAqcmVndWxhdG9ycywgaW50IG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCS8qIGRpc2FibGUvcHV0IGluIHJldmVyc2Ugb3JkZXIgKi8KKwkJcmVndWxhdG9yX2Rpc2FibGUocmVndWxhdG9yc1tuIC0gaSAtIDFdLnJlZ3VsYXRvcik7CisJCXJlZ3VsYXRvcl9wdXQocmVndWxhdG9yc1tuIC0gaSAtIDFdLnJlZ3VsYXRvcik7CisJfQorfQorCitzdGF0aWMgaW50IGluaXRfcmVndWxhdG9ycyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQlzdHJ1Y3QgcGFuZWxfcmVndWxhdG9yICpyZWd1bGF0b3JzLCBpbnQgbikKK3sKKwlpbnQgciwgaSwgdjsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3RydWN0IHJlZ3VsYXRvciAqcmVnOworCisJCXJlZyA9IHJlZ3VsYXRvcl9nZXQoJmRzc2Rldi0+ZGV2LCByZWd1bGF0b3JzW2ldLm5hbWUpOworCQlpZiAoSVNfRVJSKHJlZykpIHsKKwkJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3IgJXNcbiIsCisJCQkJcmVndWxhdG9yc1tpXS5uYW1lKTsKKwkJCXIgPSBQVFJfRVJSKHJlZyk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCS8qIEZJWE1FOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZml4ZWQgdnMuIHZhcmlhYmxlIHJlZ3VsYXRvcnMgKi8KKwkJdiA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShyZWcpOworCQlpZiAodiA8IHJlZ3VsYXRvcnNbaV0ubWluX3VWIHx8IHYgPiByZWd1bGF0b3JzW2ldLm1heF91VikgeworCQkJciA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShyZWcsIHJlZ3VsYXRvcnNbaV0ubWluX3VWLAorCQkJCQkJcmVndWxhdG9yc1tpXS5tYXhfdVYpOworCQkJaWYgKHIpIHsKKwkJCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byBzZXQgcmVndWxhdG9yICVzIHZvbHRhZ2VcbiIsCisJCQkJCXJlZ3VsYXRvcnNbaV0ubmFtZSk7CisJCQkJcmVndWxhdG9yX3B1dChyZWcpOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJciA9IHJlZ3VsYXRvcl9lbmFibGUocmVnKTsKKwkJaWYgKHIpIHsKKwkJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3IgJXNcbiIsCisJCQkJcmVndWxhdG9yc1tpXS5uYW1lKTsKKwkJCXJlZ3VsYXRvcl9wdXQocmVnKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcmVndWxhdG9yc1tpXS5yZWd1bGF0b3IgPSByZWc7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlmcmVlX3JlZ3VsYXRvcnMocmVndWxhdG9ycywgaSk7CisKKwlyZXR1cm4gcjsKK30KKworLyoqCisgKiBzdHJ1Y3QgcGFuZWxfY29uZmlnIC0gcGFuZWwgY29uZmlndXJhdGlvbgorICogQG5hbWU6IHBhbmVsIG5hbWUKKyAqIEB0eXBlOiBwYW5lbCB0eXBlCisgKiBAdGltaW5nczogcGFuZWwgcmVzb2x1dGlvbgorICogQHNsZWVwOiB2YXJpb3VzIHBhbmVsIHNwZWNpZmljIGRlbGF5cywgcGFzc2VkIHRvIG1zbGVlcCgpIGlmIG5vbi16ZXJvCisgKiBAcmVzZXRfc2VxdWVuY2U6IHJlc2V0IHNlcXVlbmNlIHRpbWluZ3MsIHBhc3NlZCB0byB1ZGVsYXkoKSBpZiBub24temVybworICogQHJlZ3VsYXRvcnM6IGFycmF5IG9mIHBhbmVsIHJlZ3VsYXRvcnMKKyAqIEBudW1fcmVndWxhdG9yczogbnVtYmVyIG9mIHJlZ3VsYXRvcnMgaW4gdGhlIGFycmF5CisgKi8KK3N0cnVjdCBwYW5lbF9jb25maWcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHR5cGU7CisKKwlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHRpbWluZ3M7CisKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgc2xlZXBfaW47CisJCXVuc2lnbmVkIGludCBzbGVlcF9vdXQ7CisJCXVuc2lnbmVkIGludCBod19yZXNldDsKKwkJdW5zaWduZWQgaW50IGVuYWJsZV90ZTsKKwl9IHNsZWVwOworCisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IGhpZ2g7CisJCXVuc2lnbmVkIGludCBsb3c7CisJfSByZXNldF9zZXF1ZW5jZTsKKworCXN0cnVjdCBwYW5lbF9yZWd1bGF0b3IgKnJlZ3VsYXRvcnM7CisJaW50IG51bV9yZWd1bGF0b3JzOworfTsKKworZW51bSB7CisJUEFORUxfVEFBTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGFuZWxfY29uZmlnIHBhbmVsX2NvbmZpZ3NbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ0YWFsIiwKKwkJLnR5cGUJCT0gUEFORUxfVEFBTCwKKwkJLnRpbWluZ3MJPSB7CisJCQkueF9yZXMJCT0gODY0LAorCQkJLnlfcmVzCQk9IDQ4MCwKKwkJfSwKKwkJLnNsZWVwCQk9IHsKKwkJCS5zbGVlcF9pbgk9IDUsCisJCQkuc2xlZXBfb3V0CT0gNSwKKwkJCS5od19yZXNldAk9IDUsCisJCQkuZW5hYmxlX3RlCT0gMTAwLCAvKiBwb3NzaWJsZSBwYW5lbCBidWcgKi8KKwkJfSwKKwkJLnJlc2V0X3NlcXVlbmNlCT0geworCQkJLmhpZ2gJCT0gMTAsCisJCQkubG93CQk9IDEwLAorCQl9LAorCX0sCit9OworCiBzdHJ1Y3QgdGFhbF9kYXRhIHsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIApAQCAtODQsOCArMjEwLDE1IEBACiAJYm9vbCBtaXJyb3I7CiAKIAlib29sIHRlX2VuYWJsZWQ7Ci0JYm9vbCB1c2VfZXh0X3RlOwotCXN0cnVjdCBjb21wbGV0aW9uIHRlX2NvbXBsZXRpb247CisKKwlhdG9taWNfdCBkb191cGRhdGU7CisJc3RydWN0IHsKKwkJdTE2IHg7CisJCXUxNiB5OworCQl1MTYgdzsKKwkJdTE2IGg7CisJfSB1cGRhdGVfcmVnaW9uOworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGVfdGltZW91dF93b3JrOwogCiAJYm9vbCB1c2VfZHNpX2JsOwogCkBAIC05Niw4ICsyMjksMTYgQEAKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICplc2Rfd3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBlc2Rfd29yazsKKworCXN0cnVjdCBwYW5lbF9jb25maWcgKnBhbmVsX2NvbmZpZzsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5va2lhX2RzaV9wYW5lbF9kYXRhCisqZ2V0X3BhbmVsX2RhdGEoY29uc3Qgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXJldHVybiAoc3RydWN0IG5va2lhX2RzaV9wYW5lbF9kYXRhICopIGRzc2Rldi0+ZGF0YTsKK30KKwogc3RhdGljIHZvaWQgdGFhbF9lc2Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiBzdGF0aWMgdm9pZCBod19ndWFyZF9zdGFydChzdHJ1Y3QgdGFhbF9kYXRhICp0ZCwgaW50IGd1YXJkX21zZWMpCkBAIC0xNTksNyArMzAwLDggQEAKIAogCWh3X2d1YXJkX3N0YXJ0KHRkLCAxMjApOwogCi0JbXNsZWVwKDUpOworCWlmICh0ZC0+cGFuZWxfY29uZmlnLT5zbGVlcC5zbGVlcF9pbikKKwkJbXNsZWVwKHRkLT5wYW5lbF9jb25maWctPnNsZWVwLnNsZWVwX2luKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc2LDcgKzMxOCw4IEBACiAKIAlod19ndWFyZF9zdGFydCh0ZCwgMTIwKTsKIAotCW1zbGVlcCg1KTsKKwlpZiAodGQtPnBhbmVsX2NvbmZpZy0+c2xlZXAuc2xlZXBfb3V0KQorCQltc2xlZXAodGQtPnBhbmVsX2NvbmZpZy0+c2xlZXAuc2xlZXBfb3V0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjc5LDYgKzQyMiw3IEBACiB7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKwlzdHJ1Y3Qgbm9raWFfZHNpX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEgPSBnZXRfcGFuZWxfZGF0YShkc3NkZXYpOwogCWludCByOwogCWludCBsZXZlbDsKIApAQCAtMjkwLDI0ICs0MzQsMjYgQEAKIAogCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAidXBkYXRlIGJyaWdodG5lc3MgdG8gJWRcbiIsIGxldmVsKTsKIAorCW11dGV4X2xvY2soJnRkLT5sb2NrKTsKKwogCWlmICh0ZC0+dXNlX2RzaV9ibCkgewogCQlpZiAodGQtPmVuYWJsZWQpIHsKIAkJCWRzaV9idXNfbG9jaygpOwogCQkJciA9IHRhYWxfZGNzX3dyaXRlXzEoRENTX0JSSUdIVE5FU1MsIGxldmVsKTsKIAkJCWRzaV9idXNfdW5sb2NrKCk7Ci0JCQlpZiAocikKLQkJCQlyZXR1cm4gcjsKKwkJfSBlbHNlIHsKKwkJCXIgPSAwOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKCFkc3NkZXYtPnNldF9iYWNrbGlnaHQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlyID0gZHNzZGV2LT5zZXRfYmFja2xpZ2h0KGRzc2RldiwgbGV2ZWwpOwotCQlpZiAocikKLQkJCXJldHVybiByOworCQlpZiAoIXBhbmVsX2RhdGEtPnNldF9iYWNrbGlnaHQpCisJCQlyID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJciA9IHBhbmVsX2RhdGEtPnNldF9iYWNrbGlnaHQoZHNzZGV2LCBsZXZlbCk7CiAJfQogCi0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZ0ZC0+bG9jayk7CisKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCB0YWFsX2JsX2dldF9pbnRlbnNpdHkoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldikKQEAgLTM0NCwxNiArNDkwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCB0YWFsX3RlX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IGRhdGE7Ci0Jc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKLQotCWNvbXBsZXRlX2FsbCgmdGQtPnRlX2NvbXBsZXRpb24pOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCiBzdGF0aWMgc3NpemVfdCB0YWFsX251bV9lcnJvcnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zNjIsNiArNDk4LDggQEAKIAl1OCBlcnJvcnM7CiAJaW50IHI7CiAKKwltdXRleF9sb2NrKCZ0ZC0+bG9jayk7CisKIAlpZiAodGQtPmVuYWJsZWQpIHsKIAkJZHNpX2J1c19sb2NrKCk7CiAJCXIgPSB0YWFsX2Rjc19yZWFkXzEoRENTX1JFQURfTlVNX0VSUk9SUywgJmVycm9ycyk7CkBAIC0zNzAsNiArNTA4LDggQEAKIAkJciA9IC1FTk9ERVY7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZ0ZC0+bG9jayk7CisKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTM4NCw2ICs1MjQsOCBAQAogCXU4IGlkMSwgaWQyLCBpZDM7CiAJaW50IHI7CiAKKwltdXRleF9sb2NrKCZ0ZC0+bG9jayk7CisKIAlpZiAodGQtPmVuYWJsZWQpIHsKIAkJZHNpX2J1c19sb2NrKCk7CiAJCXIgPSB0YWFsX2dldF9pZCgmaWQxLCAmaWQyLCAmaWQzKTsKQEAgLTM5Miw2ICs1MzQsOCBAQAogCQlyID0gLUVOT0RFVjsKIAl9CiAKKwltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKKwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtNDQxLDYgKzU4NSw4IEBACiAJaWYgKGkgPT0gQVJSQVlfU0laRShjYWJjX21vZGVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZ0ZC0+bG9jayk7CisKIAlpZiAodGQtPmVuYWJsZWQpIHsKIAkJZHNpX2J1c19sb2NrKCk7CiAJCWlmICghdGQtPmNhYmNfYnJva2VuKQpAQCAtNDUwLDYgKzU5Niw4IEBACiAKIAl0ZC0+Y2FiY19tb2RlID0gaTsKIAorCW11dGV4X3VubG9jaygmdGQtPmxvY2spOworCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC00ODgsNDcgKzYzNiw5MyBAQAogCS5hdHRycyA9IHRhYWxfYXR0cnMsCiB9OwogCitzdGF0aWMgdm9pZCB0YWFsX2h3X3Jlc2V0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCXN0cnVjdCBub2tpYV9kc2lfcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSA9IGdldF9wYW5lbF9kYXRhKGRzc2Rldik7CisKKwlpZiAocGFuZWxfZGF0YS0+cmVzZXRfZ3BpbyA9PSAtMSkKKwkJcmV0dXJuOworCisJZ3Bpb19zZXRfdmFsdWUocGFuZWxfZGF0YS0+cmVzZXRfZ3BpbywgMSk7CisJaWYgKHRkLT5wYW5lbF9jb25maWctPnJlc2V0X3NlcXVlbmNlLmhpZ2gpCisJCXVkZWxheSh0ZC0+cGFuZWxfY29uZmlnLT5yZXNldF9zZXF1ZW5jZS5oaWdoKTsKKwkvKiByZXNldCB0aGUgcGFuZWwgKi8KKwlncGlvX3NldF92YWx1ZShwYW5lbF9kYXRhLT5yZXNldF9ncGlvLCAwKTsKKwkvKiBhc3NlcnQgcmVzZXQgKi8KKwlpZiAodGQtPnBhbmVsX2NvbmZpZy0+cmVzZXRfc2VxdWVuY2UubG93KQorCQl1ZGVsYXkodGQtPnBhbmVsX2NvbmZpZy0+cmVzZXRfc2VxdWVuY2UubG93KTsKKwlncGlvX3NldF92YWx1ZShwYW5lbF9kYXRhLT5yZXNldF9ncGlvLCAxKTsKKwkvKiB3YWl0IGFmdGVyIHJlbGVhc2luZyByZXNldCAqLworCWlmICh0ZC0+cGFuZWxfY29uZmlnLT5zbGVlcC5od19yZXNldCkKKwkJbXNsZWVwKHRkLT5wYW5lbF9jb25maWctPnNsZWVwLmh3X3Jlc2V0KTsKK30KKwogc3RhdGljIGludCB0YWFsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQ7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2OwotCWludCByOwotCi0JY29uc3Qgc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0YWFsX3BhbmVsX3RpbWluZ3MgPSB7Ci0JCS54X3JlcwkJPSA4NjQsCi0JCS55X3JlcwkJPSA0ODAsCi0JfTsKKwlzdHJ1Y3Qgbm9raWFfZHNpX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEgPSBnZXRfcGFuZWxfZGF0YShkc3NkZXYpOworCXN0cnVjdCBwYW5lbF9jb25maWcgKnBhbmVsX2NvbmZpZyA9IE5VTEw7CisJaW50IHIsIGk7CiAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInByb2JlXG4iKTsKIAorCWlmICghcGFuZWxfZGF0YSB8fCAhcGFuZWxfZGF0YS0+bmFtZSkgeworCQlyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFuZWxfY29uZmlncyk7IGkrKykgeworCQlpZiAoc3RyY21wKHBhbmVsX2RhdGEtPm5hbWUsIHBhbmVsX2NvbmZpZ3NbaV0ubmFtZSkgPT0gMCkgeworCQkJcGFuZWxfY29uZmlnID0gJnBhbmVsX2NvbmZpZ3NbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcGFuZWxfY29uZmlnKSB7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKIAlkc3NkZXYtPnBhbmVsLmNvbmZpZyA9IE9NQVBfRFNTX0xDRF9URlQ7Ci0JZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gdGFhbF9wYW5lbF90aW1pbmdzOworCWRzc2Rldi0+cGFuZWwudGltaW5ncyA9IHBhbmVsX2NvbmZpZy0+dGltaW5nczsKIAlkc3NkZXYtPmN0cmwucGl4ZWxfc2l6ZSA9IDI0OwogCiAJdGQgPSBremFsbG9jKHNpemVvZigqdGQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRkKSB7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjA7CisJCWdvdG8gZXJyOwogCX0KIAl0ZC0+ZHNzZGV2ID0gZHNzZGV2OworCXRkLT5wYW5lbF9jb25maWcgPSBwYW5lbF9jb25maWc7CiAKIAltdXRleF9pbml0KCZ0ZC0+bG9jayk7CiAKKwlhdG9taWNfc2V0KCZ0ZC0+ZG9fdXBkYXRlLCAwKTsKKworCXIgPSBpbml0X3JlZ3VsYXRvcnMoZHNzZGV2LCBwYW5lbF9jb25maWctPnJlZ3VsYXRvcnMsCisJCQlwYW5lbF9jb25maWctPm51bV9yZWd1bGF0b3JzKTsKKwlpZiAocikKKwkJZ290byBlcnJfcmVnOworCiAJdGQtPmVzZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ0YWFsX2VzZCIpOwogCWlmICh0ZC0+ZXNkX3dxID09IE5VTEwpIHsKIAkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJjYW4ndCBjcmVhdGUgRVNEIHdvcmtxdWV1ZVxuIik7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyX3dxOwogCX0KIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZ0ZC0+ZXNkX3dvcmssIHRhYWxfZXNkX3dvcmspOwogCiAJZGV2X3NldF9kcnZkYXRhKCZkc3NkZXYtPmRldiwgdGQpOwogCisJdGFhbF9od19yZXNldChkc3NkZXYpOworCiAJLyogaWYgbm8gcGxhdGZvcm0gc2V0X2JhY2tsaWdodCgpIGRlZmluZWQsIHByZXN1bWUgRFNJIGJhY2tsaWdodAogCSAqIGNvbnRyb2wgKi8KIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7Ci0JaWYgKCFkc3NkZXYtPnNldF9iYWNrbGlnaHQpCisJaWYgKCFwYW5lbF9kYXRhLT5zZXRfYmFja2xpZ2h0KQogCQl0ZC0+dXNlX2RzaV9ibCA9IHRydWU7CiAKIAlpZiAodGQtPnVzZV9kc2lfYmwpCkBAIC01MzksNyArNzMzLDcgQEAKIAkJCQkJICAmdGFhbF9ibF9vcHMsICZwcm9wcyk7CiAJaWYgKElTX0VSUihibGRldikpIHsKIAkJciA9IFBUUl9FUlIoYmxkZXYpOwotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyX2JsOwogCX0KIAogCXRkLT5ibGRldiA9IGJsZGV2OwpAQCAtNTUzLDEzICs3NDcsMTMgQEAKIAogCXRhYWxfYmxfdXBkYXRlX3N0YXR1cyhibGRldik7CiAKLQlpZiAoZHNzZGV2LT5waHkuZHNpLmV4dF90ZSkgewotCQlpbnQgZ3BpbyA9IGRzc2Rldi0+cGh5LmRzaS5leHRfdGVfZ3BpbzsKKwlpZiAocGFuZWxfZGF0YS0+dXNlX2V4dF90ZSkgeworCQlpbnQgZ3BpbyA9IHBhbmVsX2RhdGEtPmV4dF90ZV9ncGlvOwogCiAJCXIgPSBncGlvX3JlcXVlc3QoZ3BpbywgInRhYWwgaXJxIik7CiAJCWlmIChyKSB7CiAJCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgIkdQSU8gcmVxdWVzdCBmYWlsZWRcbiIpOwotCQkJZ290byBlcnIzOworCQkJZ290byBlcnJfZ3BpbzsKIAkJfQogCiAJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOwpAQCAtNTcxLDQ5ICs3NjUsNTIgQEAKIAkJaWYgKHIpIHsKIAkJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiSVJRIHJlcXVlc3QgZmFpbGVkXG4iKTsKIAkJCWdwaW9fZnJlZShncGlvKTsKLQkJCWdvdG8gZXJyMzsKKwkJCWdvdG8gZXJyX2lycTsKIAkJfQogCi0JCWluaXRfY29tcGxldGlvbigmdGQtPnRlX2NvbXBsZXRpb24pOworCQlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZ0ZC0+dGVfdGltZW91dF93b3JrLAorCQkJCQl0YWFsX3RlX3RpbWVvdXRfd29ya19jYWxsYmFjayk7CiAKLQkJdGQtPnVzZV9leHRfdGUgPSB0cnVlOworCQlkZXZfZGJnKCZkc3NkZXYtPmRldiwgIlVzaW5nIEdQSU8gVEVcbiIpOwogCX0KIAogCXIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRzc2Rldi0+ZGV2LmtvYmosICZ0YWFsX2F0dHJfZ3JvdXApOwogCWlmIChyKSB7CiAJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlc1xuIik7Ci0JCWdvdG8gZXJyNDsKKwkJZ290byBlcnJfc3lzZnM7CiAJfQogCiAJcmV0dXJuIDA7Ci1lcnI0OgotCWlmICh0ZC0+dXNlX2V4dF90ZSkgewotCQlpbnQgZ3BpbyA9IGRzc2Rldi0+cGh5LmRzaS5leHRfdGVfZ3BpbzsKLQkJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3BpbyksIGRzc2Rldik7Ci0JCWdwaW9fZnJlZShncGlvKTsKLQl9Ci1lcnIzOgorZXJyX3N5c2ZzOgorCWlmIChwYW5lbF9kYXRhLT51c2VfZXh0X3RlKQorCQlmcmVlX2lycShncGlvX3RvX2lycShwYW5lbF9kYXRhLT5leHRfdGVfZ3BpbyksIGRzc2Rldik7CitlcnJfaXJxOgorCWlmIChwYW5lbF9kYXRhLT51c2VfZXh0X3RlKQorCQlncGlvX2ZyZWUocGFuZWxfZGF0YS0+ZXh0X3RlX2dwaW8pOworZXJyX2dwaW86CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsZGV2KTsKLWVycjI6Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0ZC0+ZXNkX3dvcmspOworZXJyX2JsOgogCWRlc3Ryb3lfd29ya3F1ZXVlKHRkLT5lc2Rfd3EpOwotZXJyMToKK2Vycl93cToKKwlmcmVlX3JlZ3VsYXRvcnMocGFuZWxfY29uZmlnLT5yZWd1bGF0b3JzLCBwYW5lbF9jb25maWctPm51bV9yZWd1bGF0b3JzKTsKK2Vycl9yZWc6CiAJa2ZyZWUodGQpOwotZXJyMDoKK2VycjoKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgdGFhbF9yZW1vdmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJc3RydWN0IG5va2lhX2RzaV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhID0gZ2V0X3BhbmVsX2RhdGEoZHNzZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxkZXY7CiAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInJlbW92ZVxuIik7CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRzc2Rldi0+ZGV2LmtvYmosICZ0YWFsX2F0dHJfZ3JvdXApOwogCi0JaWYgKHRkLT51c2VfZXh0X3RlKSB7Ci0JCWludCBncGlvID0gZHNzZGV2LT5waHkuZHNpLmV4dF90ZV9ncGlvOworCWlmIChwYW5lbF9kYXRhLT51c2VfZXh0X3RlKSB7CisJCWludCBncGlvID0gcGFuZWxfZGF0YS0+ZXh0X3RlX2dwaW87CiAJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGdwaW8pLCBkc3NkZXYpOwogCQlncGlvX2ZyZWUoZ3Bpbyk7CiAJfQpAQCAtNjIzLDkgKzgyMCwxNSBAQAogCXRhYWxfYmxfdXBkYXRlX3N0YXR1cyhibGRldik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsZGV2KTsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdGQtPmVzZF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZ0ZC0+ZXNkX3dvcmspOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHRkLT5lc2Rfd3EpOwogCisJLyogcmVzZXQsIHRvIGJlIHN1cmUgdGhhdCB0aGUgcGFuZWwgaXMgaW4gYSB2YWxpZCBzdGF0ZSAqLworCXRhYWxfaHdfcmVzZXQoZHNzZGV2KTsKKworCWZyZWVfcmVndWxhdG9ycyh0ZC0+cGFuZWxfY29uZmlnLT5yZWd1bGF0b3JzLAorCQkJdGQtPnBhbmVsX2NvbmZpZy0+bnVtX3JlZ3VsYXRvcnMpOworCiAJa2ZyZWUodGQpOwogfQogCkBAIC02MzUsMjMgKzgzOCwxNCBAQAogCXU4IGlkMSwgaWQyLCBpZDM7CiAJaW50IHI7CiAKLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpIHsKLQkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogaXQgc2VlbXMgd2UgaGF2ZSB0byB3YWl0IGEgYml0IHVudGlsIHRhYWwgaXMgcmVhZHkgKi8KLQltc2xlZXAoNSk7Ci0KLQlkc2lfYnVzX2xvY2soKTsKLQogCXIgPSBvbWFwZHNzX2RzaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOwogCWlmIChyKSB7CiAJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBEU0lcbiIpOwogCQlnb3RvIGVycjA7CiAJfQogCisJdGFhbF9od19yZXNldChkc3NkZXYpOworCiAJb21hcGRzc19kc2lfdmNfZW5hYmxlX2hzKFRDSCwgZmFsc2UpOwogCiAJciA9IHRhYWxfc2xlZXBfb3V0KHRkKTsKQEAgLTY2MiwzNCArODU2LDQ3IEBACiAJaWYgKHIpCiAJCWdvdG8gZXJyOwogCi0JLyogb24gZWFybHkgcmV2aXNpb25zIENBQkMgaXMgYnJva2VuICovCi0JaWYgKGlkMiA9PSAweDAwIHx8IGlkMiA9PSAweGZmIHx8IGlkMiA9PSAweDgxKQorCS8qIG9uIGVhcmx5IFRhYWwgcmV2aXNpb25zIENBQkMgaXMgYnJva2VuICovCisJaWYgKHRkLT5wYW5lbF9jb25maWctPnR5cGUgPT0gUEFORUxfVEFBTCAmJgorCQkoaWQyID09IDB4MDAgfHwgaWQyID09IDB4ZmYgfHwgaWQyID09IDB4ODEpKQogCQl0ZC0+Y2FiY19icm9rZW4gPSB0cnVlOwogCi0JdGFhbF9kY3Nfd3JpdGVfMShEQ1NfQlJJR0hUTkVTUywgMHhmZik7Ci0JdGFhbF9kY3Nfd3JpdGVfMShEQ1NfQ1RSTF9ESVNQTEFZLCAoMTw8MikgfCAoMTw8NSkpOyAvKiBCTCB8IEJDVFJMICovCisJciA9IHRhYWxfZGNzX3dyaXRlXzEoRENTX0JSSUdIVE5FU1MsIDB4ZmYpOworCWlmIChyKQorCQlnb3RvIGVycjsKIAotCXRhYWxfZGNzX3dyaXRlXzEoRENTX1BJWEVMX0ZPUk1BVCwgMHg3KTsgLyogMjRiaXQvcGl4ZWwgKi8KKwlyID0gdGFhbF9kY3Nfd3JpdGVfMShEQ1NfQ1RSTF9ESVNQTEFZLAorCQkJKDE8PDIpIHwgKDE8PDUpKTsJLyogQkwgfCBCQ1RSTCAqLworCWlmIChyKQorCQlnb3RvIGVycjsKIAotCXRhYWxfc2V0X2FkZHJfbW9kZSh0ZC0+cm90YXRlLCB0ZC0+bWlycm9yKTsKLQlpZiAoIXRkLT5jYWJjX2Jyb2tlbikKLQkJdGFhbF9kY3Nfd3JpdGVfMShEQ1NfV1JJVEVfQ0FCQywgdGQtPmNhYmNfbW9kZSk7CisJciA9IHRhYWxfZGNzX3dyaXRlXzEoRENTX1BJWEVMX0ZPUk1BVCwgMHg3KTsgLyogMjRiaXQvcGl4ZWwgKi8KKwlpZiAocikKKwkJZ290byBlcnI7CiAKLQl0YWFsX2Rjc193cml0ZV8wKERDU19ESVNQTEFZX09OKTsKKwlyID0gdGFhbF9zZXRfYWRkcl9tb2RlKHRkLT5yb3RhdGUsIHRkLT5taXJyb3IpOworCWlmIChyKQorCQlnb3RvIGVycjsKKworCWlmICghdGQtPmNhYmNfYnJva2VuKSB7CisJCXIgPSB0YWFsX2Rjc193cml0ZV8xKERDU19XUklURV9DQUJDLCB0ZC0+Y2FiY19tb2RlKTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjsKKwl9CisKKwlyID0gdGFhbF9kY3Nfd3JpdGVfMChEQ1NfRElTUExBWV9PTik7CisJaWYgKHIpCisJCWdvdG8gZXJyOwogCiAJciA9IF90YWFsX2VuYWJsZV90ZShkc3NkZXYsIHRkLT50ZV9lbmFibGVkKTsKIAlpZiAocikKIAkJZ290byBlcnI7CiAKLSNpZmRlZiBUQUFMX1VTRV9FU0RfQ0hFQ0sKLQlxdWV1ZV9kZWxheWVkX3dvcmsodGQtPmVzZF93cSwgJnRkLT5lc2Rfd29yaywgVEFBTF9FU0RfQ0hFQ0tfUEVSSU9EKTsKLSNlbmRpZgotCiAJdGQtPmVuYWJsZWQgPSAxOwogCiAJaWYgKCF0ZC0+aW50cm9fcHJpbnRlZCkgewotCQlkZXZfaW5mbygmZHNzZGV2LT5kZXYsICJyZXZpc2lvbiAlMDJ4LiUwMnguJTAyeFxuIiwKLQkJCQlpZDEsIGlkMiwgaWQzKTsKKwkJZGV2X2luZm8oJmRzc2Rldi0+ZGV2LCAiJXMgcGFuZWwgcmV2aXNpb24gJTAyeC4lMDJ4LiUwMnhcbiIsCisJCQl0ZC0+cGFuZWxfY29uZmlnLT5uYW1lLCBpZDEsIGlkMiwgaWQzKTsKIAkJaWYgKHRkLT5jYWJjX2Jyb2tlbikKIAkJCWRldl9pbmZvKCZkc3NkZXYtPmRldiwKIAkJCQkJIm9sZCBUYWFsIHZlcnNpb24sIENBQkMgZGlzYWJsZWRcbiIpOwpAQCAtNjk4LDQ2ICs5MDUsNDQgQEAKIAogCW9tYXBkc3NfZHNpX3ZjX2VuYWJsZV9ocyhUQ0gsIHRydWUpOwogCi0JZHNpX2J1c191bmxvY2soKTsKLQogCXJldHVybiAwOwogZXJyOgorCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZXJyb3Igd2hpbGUgZW5hYmxpbmcgcGFuZWwsIGlzc3VpbmcgSFcgcmVzZXRcbiIpOworCisJdGFhbF9od19yZXNldChkc3NkZXYpOworCiAJb21hcGRzc19kc2lfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CiBlcnIwOgotCWRzaV9idXNfdW5sb2NrKCk7Ci0JaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKLQkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7Ci0KIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgdGFhbF9wb3dlcl9vZmYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJaW50IHI7CiAKLQlkc2lfYnVzX2xvY2soKTsKKwlyID0gdGFhbF9kY3Nfd3JpdGVfMChEQ1NfRElTUExBWV9PRkYpOworCWlmICghcikgeworCQlyID0gdGFhbF9zbGVlcF9pbih0ZCk7CisJCS8qIEhBQ0s6IHdhaXQgYSBiaXQgc28gdGhhdCB0aGUgbWVzc2FnZSBnb2VzIHRocm91Z2ggKi8KKwkJbXNsZWVwKDEwKTsKKwl9CiAKLQljYW5jZWxfZGVsYXllZF93b3JrKCZ0ZC0+ZXNkX3dvcmspOwotCi0JdGFhbF9kY3Nfd3JpdGVfMChEQ1NfRElTUExBWV9PRkYpOwotCXRhYWxfc2xlZXBfaW4odGQpOwotCi0JLyogd2FpdCBhIGJpdCBzbyB0aGF0IHRoZSBtZXNzYWdlIGdvZXMgdGhyb3VnaCAqLwotCW1zbGVlcCgxMCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmZHNzZGV2LT5kZXYsCisJCQkJImVycm9yIGRpc2FibGluZyBwYW5lbCwgaXNzdWluZyBIVyByZXNldFxuIik7CisJCXRhYWxfaHdfcmVzZXQoZHNzZGV2KTsKKwl9CiAKIAlvbWFwZHNzX2RzaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKIAotCWlmIChkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUpCi0JCWRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZShkc3NkZXYpOwotCiAJdGQtPmVuYWJsZWQgPSAwOwotCi0JZHNpX2J1c191bmxvY2soKTsKIH0KIAogc3RhdGljIGludCB0YWFsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKwlzdHJ1Y3Qgbm9raWFfZHNpX3BhbmVsX2RhdGEgKnBhbmVsX2RhdGEgPSBnZXRfcGFuZWxfZGF0YShkc3NkZXYpOwogCWludCByOwogCiAJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJlbmFibGVcbiIpOwpAQCAtNzQ5LDEwICs5NTQsMTkgQEAKIAkJZ290byBlcnI7CiAJfQogCisJZHNpX2J1c19sb2NrKCk7CisKIAlyID0gdGFhbF9wb3dlcl9vbihkc3NkZXYpOworCisJZHNpX2J1c191bmxvY2soKTsKKwogCWlmIChyKQogCQlnb3RvIGVycjsKIAorCWlmIChwYW5lbF9kYXRhLT51c2VfZXNkX2NoZWNrKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsodGQtPmVzZF93cSwgJnRkLT5lc2Rfd29yaywKKwkJCQlUQUFMX0VTRF9DSEVDS19QRVJJT0QpOworCiAJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwogCiAJbXV0ZXhfdW5sb2NrKCZ0ZC0+bG9jayk7CkBAIC03NzIsOSArOTg2LDE1IEBACiAKIAltdXRleF9sb2NrKCZ0ZC0+bG9jayk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZ0ZC0+ZXNkX3dvcmspOworCisJZHNpX2J1c19sb2NrKCk7CisKIAlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKIAkJdGFhbF9wb3dlcl9vZmYoZHNzZGV2KTsKIAorCWRzaV9idXNfdW5sb2NrKCk7CisKIAlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKIAogCW11dGV4X3VubG9jaygmdGQtPmxvY2spOwpAQCAtNzk0LDcgKzEwMTQsMTQgQEAKIAkJZ290byBlcnI7CiAJfQogCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmdGQtPmVzZF93b3JrKTsKKworCWRzaV9idXNfbG9jaygpOworCiAJdGFhbF9wb3dlcl9vZmYoZHNzZGV2KTsKKworCWRzaV9idXNfdW5sb2NrKCk7CisKIAlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7CiAKIAltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKQEAgLTgwOCw2ICsxMDM1LDcgQEAKIHN0YXRpYyBpbnQgdGFhbF9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJc3RydWN0IG5va2lhX2RzaV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhID0gZ2V0X3BhbmVsX2RhdGEoZHNzZGV2KTsKIAlpbnQgcjsKIAogCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAicmVzdW1lXG4iKTsKQEAgLTgxOSw4ICsxMDQ3LDIwIEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWRzaV9idXNfbG9jaygpOworCiAJciA9IHRhYWxfcG93ZXJfb24oZHNzZGV2KTsKLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlkc2lfYnVzX3VubG9jaygpOworCisJaWYgKHIpIHsKKwkJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CisJfSBlbHNlIHsKKwkJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCQlpZiAocGFuZWxfZGF0YS0+dXNlX2VzZF9jaGVjaykKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayh0ZC0+ZXNkX3dxLCAmdGQtPmVzZF93b3JrLAorCQkJCQlUQUFMX0VTRF9DSEVDS19QRVJJT0QpOworCX0KIAogCW11dGV4X3VubG9jaygmdGQtPmxvY2spOwogCkBAIC04MzcsMTAgKzEwNzcsNTIgQEAKIAlkc2lfYnVzX3VubG9jaygpOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgdGFhbF90ZV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSBkYXRhOworCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJaW50IG9sZDsKKwlpbnQgcjsKKworCW9sZCA9IGF0b21pY19jbXB4Y2hnKCZ0ZC0+ZG9fdXBkYXRlLCAxLCAwKTsKKworCWlmIChvbGQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmdGQtPnRlX3RpbWVvdXRfd29yayk7CisKKwkJciA9IG9tYXBfZHNpX3VwZGF0ZShkc3NkZXYsIFRDSCwKKwkJCQl0ZC0+dXBkYXRlX3JlZ2lvbi54LAorCQkJCXRkLT51cGRhdGVfcmVnaW9uLnksCisJCQkJdGQtPnVwZGF0ZV9yZWdpb24udywKKwkJCQl0ZC0+dXBkYXRlX3JlZ2lvbi5oLAorCQkJCXRhYWxfZnJhbWVkb25lX2NiLCBkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK2VycjoKKwlkZXZfZXJyKCZkc3NkZXYtPmRldiwgInN0YXJ0IHVwZGF0ZSBmYWlsZWRcbiIpOworCWRzaV9idXNfdW5sb2NrKCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB0YWFsX3RlX3RpbWVvdXRfd29ya19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRhYWxfZGF0YSwKKwkJCQkJdGVfdGltZW91dF93b3JrLndvcmspOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRkLT5kc3NkZXY7CisKKwlkZXZfZXJyKCZkc3NkZXYtPmRldiwgIlRFIG5vdCByZWNlaXZlZCBmb3IgMjUwbXMhXG4iKTsKKworCWF0b21pY19zZXQoJnRkLT5kb191cGRhdGUsIDApOworCWRzaV9idXNfdW5sb2NrKCk7Cit9CisKIHN0YXRpYyBpbnQgdGFhbF91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAogCQkJCSAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCkKIHsKIAlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCXN0cnVjdCBub2tpYV9kc2lfcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSA9IGdldF9wYW5lbF9kYXRhKGRzc2Rldik7CiAJaW50IHI7CiAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInVwZGF0ZSAlZCwgJWQsICVkIHggJWRcbiIsIHgsIHksIHcsIGgpOwpAQCAtODUzLDcgKzExMzUsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyID0gb21hcF9kc2lfcHJlcGFyZV91cGRhdGUoZHNzZGV2LCAmeCwgJnksICZ3LCAmaCk7CisJciA9IG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKGRzc2RldiwgJngsICZ5LCAmdywgJmgsIHRydWUpOwogCWlmIChyKQogCQlnb3RvIGVycjsKIApAQCAtODYxLDEwICsxMTQzLDIxIEBACiAJaWYgKHIpCiAJCWdvdG8gZXJyOwogCi0JciA9IG9tYXBfZHNpX3VwZGF0ZShkc3NkZXYsIFRDSCwgeCwgeSwgdywgaCwKLQkJCXRhYWxfZnJhbWVkb25lX2NiLCBkc3NkZXYpOwotCWlmIChyKQotCQlnb3RvIGVycjsKKwlpZiAodGQtPnRlX2VuYWJsZWQgJiYgcGFuZWxfZGF0YS0+dXNlX2V4dF90ZSkgeworCQl0ZC0+dXBkYXRlX3JlZ2lvbi54ID0geDsKKwkJdGQtPnVwZGF0ZV9yZWdpb24ueSA9IHk7CisJCXRkLT51cGRhdGVfcmVnaW9uLncgPSB3OworCQl0ZC0+dXBkYXRlX3JlZ2lvbi5oID0gaDsKKwkJYmFycmllcigpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRkLT50ZV90aW1lb3V0X3dvcmssCisJCQkJbXNlY3NfdG9famlmZmllcygyNTApKTsKKwkJYXRvbWljX3NldCgmdGQtPmRvX3VwZGF0ZSwgMSk7CisJfSBlbHNlIHsKKwkJciA9IG9tYXBfZHNpX3VwZGF0ZShkc3NkZXYsIFRDSCwgeCwgeSwgdywgaCwKKwkJCQl0YWFsX2ZyYW1lZG9uZV9jYiwgZHNzZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjsKKwl9CiAKIAkvKiBub3RlOiBubyBidXNfdW5sb2NrIGhlcmUuIHVubG9jayBpcyBpbiBmcmFtZWRvbmVfY2IgKi8KIAltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKQEAgLTg5NCwyMCArMTE4NywxOSBAQAogc3RhdGljIGludCBfdGFhbF9lbmFibGVfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCXN0cnVjdCBub2tpYV9kc2lfcGFuZWxfZGF0YSAqcGFuZWxfZGF0YSA9IGdldF9wYW5lbF9kYXRhKGRzc2Rldik7CiAJaW50IHI7CiAKLQl0ZC0+dGVfZW5hYmxlZCA9IGVuYWJsZTsKLQogCWlmIChlbmFibGUpCiAJCXIgPSB0YWFsX2Rjc193cml0ZV8xKERDU19URUFSX09OLCAwKTsKIAllbHNlCiAJCXIgPSB0YWFsX2Rjc193cml0ZV8wKERDU19URUFSX09GRik7CiAKLQlvbWFwZHNzX2RzaV9lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOworCWlmICghcGFuZWxfZGF0YS0+dXNlX2V4dF90ZSkKKwkJb21hcGRzc19kc2lfZW5hYmxlX3RlKGRzc2RldiwgZW5hYmxlKTsKIAotCS8qIFhYWCBmb3Igc29tZSByZWFzb24sIERTSSBURSBicmVha3MgaWYgd2UgZG9uJ3Qgd2FpdCBoZXJlLgotCSAqIFBhbmVsIGJ1Zz8gTmVlZHMgbW9yZSBzdHVkeWluZyAqLwotCW1zbGVlcCgxMDApOworCWlmICh0ZC0+cGFuZWxfY29uZmlnLT5zbGVlcC5lbmFibGVfdGUpCisJCW1zbGVlcCh0ZC0+cGFuZWxfY29uZmlnLT5zbGVlcC5lbmFibGVfdGUpOwogCiAJcmV0dXJuIHI7CiB9CkBAIC05MTgsMTAgKzEyMTAsMjYgQEAKIAlpbnQgcjsKIAogCW11dGV4X2xvY2soJnRkLT5sb2NrKTsKKworCWlmICh0ZC0+dGVfZW5hYmxlZCA9PSBlbmFibGUpCisJCWdvdG8gZW5kOworCiAJZHNpX2J1c19sb2NrKCk7CiAKLQlyID0gX3RhYWxfZW5hYmxlX3RlKGRzc2RldiwgZW5hYmxlKTsKKwlpZiAodGQtPmVuYWJsZWQpIHsKKwkJciA9IF90YWFsX2VuYWJsZV90ZShkc3NkZXYsIGVuYWJsZSk7CisJCWlmIChyKQorCQkJZ290byBlcnI7CisJfQogCisJdGQtPnRlX2VuYWJsZWQgPSBlbmFibGU7CisKKwlkc2lfYnVzX3VubG9jaygpOworZW5kOgorCW11dGV4X3VubG9jaygmdGQtPmxvY2spOworCisJcmV0dXJuIDA7CitlcnI6CiAJZHNpX2J1c191bmxvY2soKTsKIAltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKIApAQCAtOTQ4LDYgKzEyNTYsMTAgQEAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInJvdGF0ZSAlZFxuIiwgcm90YXRlKTsKIAogCW11dGV4X2xvY2soJnRkLT5sb2NrKTsKKworCWlmICh0ZC0+cm90YXRlID09IHJvdGF0ZSkKKwkJZ290byBlbmQ7CisKIAlkc2lfYnVzX2xvY2soKTsKIAogCWlmICh0ZC0+ZW5hYmxlZCkgewpAQCAtOTU5LDYgKzEyNzEsNyBAQAogCXRkLT5yb3RhdGUgPSByb3RhdGU7CiAKIAlkc2lfYnVzX3VubG9jaygpOworZW5kOgogCW11dGV4X3VubG9jaygmdGQtPmxvY2spOwogCXJldHVybiAwOwogZXJyOgpAQCAtOTg3LDYgKzEzMDAsMTAgQEAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgIm1pcnJvciAlZFxuIiwgZW5hYmxlKTsKIAogCW11dGV4X2xvY2soJnRkLT5sb2NrKTsKKworCWlmICh0ZC0+bWlycm9yID09IGVuYWJsZSkKKwkJZ290byBlbmQ7CisKIAlkc2lfYnVzX2xvY2soKTsKIAlpZiAodGQtPmVuYWJsZWQpIHsKIAkJciA9IHRhYWxfc2V0X2FkZHJfbW9kZSh0ZC0+cm90YXRlLCBlbmFibGUpOwpAQCAtOTk3LDYgKzEzMTQsNyBAQAogCXRkLT5taXJyb3IgPSBlbmFibGU7CiAKIAlkc2lfYnVzX3VubG9jaygpOworZW5kOgogCW11dGV4X3VubG9jaygmdGQtPmxvY2spOwogCXJldHVybiAwOwogZXJyOgpAQCAtMTAyNCwyMyArMTM0MiwzMCBAQAogCWludCByOwogCiAJbXV0ZXhfbG9jaygmdGQtPmxvY2spOworCisJaWYgKCF0ZC0+ZW5hYmxlZCkgeworCQlyID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKwogCWRzaV9idXNfbG9jaygpOwogCiAJciA9IHRhYWxfZGNzX3JlYWRfMShEQ1NfR0VUX0lEMSwgJmlkMSk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycjI7CiAJciA9IHRhYWxfZGNzX3JlYWRfMShEQ1NfR0VUX0lEMiwgJmlkMik7CiAJaWYgKHIpCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycjI7CiAJciA9IHRhYWxfZGNzX3JlYWRfMShEQ1NfR0VUX0lEMywgJmlkMyk7CiAJaWYgKHIpCi0JCWdvdG8gZXJyOworCQlnb3RvIGVycjI7CiAKIAlkc2lfYnVzX3VubG9jaygpOwogCW11dGV4X3VubG9jaygmdGQtPmxvY2spOwogCXJldHVybiAwOwotZXJyOgorZXJyMjoKIAlkc2lfYnVzX3VubG9jaygpOworZXJyMToKIAltdXRleF91bmxvY2soJnRkLT5sb2NrKTsKIAlyZXR1cm4gcjsKIH0KQEAgLTExMjgsNiArMTQ1Myw3IEBACiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRhYWxfZGF0YSwKIAkJCWVzZF93b3JrLndvcmspOwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRkLT5kc3NkZXY7CisJc3RydWN0IG5va2lhX2RzaV9wYW5lbF9kYXRhICpwYW5lbF9kYXRhID0gZ2V0X3BhbmVsX2RhdGEoZHNzZGV2KTsKIAl1OCBzdGF0ZTEsIHN0YXRlMjsKIAlpbnQgcjsKIApAQCAtMTE2OCw3ICsxNDk0LDcgQEAKIAl9CiAJLyogU2VsZi1kaWFnbm9zdGljcyByZXN1bHQgaXMgYWxzbyBzaG93biBvbiBURSBHUElPIGxpbmUuIFdlIG5lZWQKIAkgKiB0byByZS1lbmFibGUgVEUgYWZ0ZXIgc2VsZiBkaWFnbm9zdGljcyAqLwotCWlmICh0ZC0+dXNlX2V4dF90ZSAmJiB0ZC0+dGVfZW5hYmxlZCkgeworCWlmICh0ZC0+dGVfZW5hYmxlZCAmJiBwYW5lbF9kYXRhLT51c2VfZXh0X3RlKSB7CiAJCXIgPSB0YWFsX2Rjc193cml0ZV8xKERDU19URUFSX09OLCAwKTsKIAkJaWYgKHIpCiAJCQlnb3RvIGVycjsKQEAgLTExODQsNiArMTUxMCw3IEBACiAJZGV2X2VycigmZHNzZGV2LT5kZXYsICJwZXJmb3JtaW5nIExDRCByZXNldFxuIik7CiAKIAl0YWFsX3Bvd2VyX29mZihkc3NkZXYpOworCXRhYWxfaHdfcmVzZXQoZHNzZGV2KTsKIAl0YWFsX3Bvd2VyX29uKGRzc2Rldik7CiAKIAlkc2lfYnVzX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10b3Bwb2x5LXRkbzM1cy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10b3Bwb2x5LXRkbzM1cy5jCmluZGV4IGZhNDM0Y2EuLmUzMjBlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdG9wcG9seS10ZG8zNXMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRvcHBvbHktdGRvMzVzLmMKQEAgLTczLDggKzczLDEyIEBACiAKIHN0YXRpYyBpbnQgdG9wcG9seV90ZG9fcGFuZWxfcHJvYmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVCB8IE9NQVBfRFNTX0xDRF9JVlMgfAotCQlPTUFQX0RTU19MQ0RfSUhTOworCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVCB8CisJCQkgICAgICAgT01BUF9EU1NfTENEX0lWUyB8CisJCQkgICAgICAgT01BUF9EU1NfTENEX0lIUyB8CisJCQkgICAgICAgT01BUF9EU1NfTENEX0lQQyB8CisJCQkgICAgICAgT01BUF9EU1NfTENEX09OT0ZGOworCiAJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gdG9wcG9seV90ZG9fcGFuZWxfdGltaW5nczsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMKaW5kZXggZTc3N2UzNS4uNWVjZGMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KIAogI2luY2x1ZGUgPHBsYXQvc3JhbS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KQEAgLTMzNSw3ICszMzYsNyBAQAogdm9pZCBkaXNwY19yZXN0b3JlX2NvbnRleHQodm9pZCkKIHsKIAlSUihTWVNDT05GSUcpOwotCVJSKElSUUVOQUJMRSk7CisJLypSUihJUlFFTkFCTEUpOyovCiAJLypSUihDT05UUk9MKTsqLwogCVJSKENPTkZJRyk7CiAJUlIoREVGQVVMVF9DT0xPUjApOwpAQCAtNDcyLDYgKzQ3MywxNSBAQAogCiAJLyogZW5hYmxlIGxhc3QsIGJlY2F1c2UgTENEICYgRElHSVQgZW5hYmxlIGFyZSBoZXJlICovCiAJUlIoQ09OVFJPTCk7CisKKwkvKiBjbGVhciBzcHVyaW91cyBTWU5DX0xPU1RfRElHSVQgaW50ZXJydXB0cyAqLworCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19JUlFTVEFUVVMsIERJU1BDX0lSUV9TWU5DX0xPU1RfRElHSVQpOworCisJLyoKKwkgKiBlbmFibGUgbGFzdCBzbyBJUlFzIHdvbid0IHRyaWdnZXIgYmVmb3JlCisJICogdGhlIGNvbnRleHQgaXMgZnVsbHkgcmVzdG9yZWQKKwkgKi8KKwlSUihJUlFFTkFCTEUpOwogfQogCiAjdW5kZWYgU1IKQEAgLTMwMTksNyArMzAyOSw3IEBACiAJdTMyIGlycXN0YXR1cyA9IERJU1BDX0lSUV9WU1lOQzsKIAlpbnQgaTsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJV0FSTl9PTighaW5faW50ZXJydXB0KCkpOwogCiAJZm9yIChpID0gMDsgaSA8IERJU1BDX01BWF9OUl9JU1JTOyBpKyspIHsKIAkJc3RydWN0IG9tYXBfZGlzcGNfaXNyX2RhdGEgKmlzcl9kYXRhOwpAQCAtMzAzMSw4ICszMDQxLDYgQEAKIAkJaWYgKGlzcl9kYXRhLT5tYXNrICYgaXJxc3RhdHVzKQogCQkJaXNyX2RhdGEtPmlzcihpc3JfZGF0YS0+YXJnLCBpcnFzdGF0dXMpOwogCX0KLQotCWxvY2FsX2lycV9lbmFibGUoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMKaW5kZXggZWY4Yzg1Mi4uMjJkZDdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BsYXkuYwpAQCAtODIsNiArODIsOSBAQAogCWludCB2YWwsIHI7CiAJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlOwogCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X3VwZGF0ZV9tb2RlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJc3dpdGNoICh2YWwpIHsKQEAgLTM0Myw3ICszNDYsNiBAQAogCWNhc2UgT01BUF9ESVNQTEFZX1RZUEVfVkVOQzoKIAljYXNlIE9NQVBfRElTUExBWV9UWVBFX1NESToKIAkJcmV0dXJuIDI0OwotCQlyZXR1cm4gMjQ7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYwppbmRleCAzYWYyMDdiLi5iM2ZhM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYwpAQCAtMTY1LDYgKzE2NSwxNCBAQAogI2RlZmluZSBEU0lfQ0lPX0lSUV9FUlJDT05URU5USU9OTFAxXzMJKDEgPDwgMjUpCiAjZGVmaW5lIERTSV9DSU9fSVJRX1VMUFNBQ1RJVkVOT1RfQUxMMAkoMSA8PCAzMCkKICNkZWZpbmUgRFNJX0NJT19JUlFfVUxQU0FDVElWRU5PVF9BTEwxCSgxIDw8IDMxKQorI2RlZmluZSBEU0lfQ0lPX0lSUV9FUlJPUl9NQVNLIFwKKwkoRFNJX0NJT19JUlFfRVJSU1lOQ0VTQzEgfCBEU0lfQ0lPX0lSUV9FUlJTWU5DRVNDMiB8IFwKKwkgRFNJX0NJT19JUlFfRVJSU1lOQ0VTQzMgfCBEU0lfQ0lPX0lSUV9FUlJFU0MxIHwgRFNJX0NJT19JUlFfRVJSRVNDMiB8IFwKKwkgRFNJX0NJT19JUlFfRVJSRVNDMyB8IERTSV9DSU9fSVJRX0VSUkNPTlRST0wxIHwgXAorCSBEU0lfQ0lPX0lSUV9FUlJDT05UUk9MMiB8IERTSV9DSU9fSVJRX0VSUkNPTlRST0wzIHwgXAorCSBEU0lfQ0lPX0lSUV9FUlJDT05URU5USU9OTFAwXzEgfCBEU0lfQ0lPX0lSUV9FUlJDT05URU5USU9OTFAxXzEgfCBcCisJIERTSV9DSU9fSVJRX0VSUkNPTlRFTlRJT05MUDBfMiB8IERTSV9DSU9fSVJRX0VSUkNPTlRFTlRJT05MUDFfMiB8IFwKKwkgRFNJX0NJT19JUlFfRVJSQ09OVEVOVElPTkxQMF8zIHwgRFNJX0NJT19JUlFfRVJSQ09OVEVOVElPTkxQMV8zKQogCiAjZGVmaW5lIERTSV9EVF9EQ1NfU0hPUlRfV1JJVEVfMAkweDA1CiAjZGVmaW5lIERTSV9EVF9EQ1NfU0hPUlRfV1JJVEVfMQkweDE1CkBAIC0yMzIsMTMgKzI0MCwxNSBAQAogCXVuc2lnbmVkIHBsbF9sb2NrZWQ7CiAKIAlzdHJ1Y3QgY29tcGxldGlvbiBidGFfY29tcGxldGlvbjsKKwl2b2lkICgqYnRhX2NhbGxiYWNrKSh2b2lkKTsKIAogCWludCB1cGRhdGVfY2hhbm5lbDsKIAlzdHJ1Y3QgZHNpX3VwZGF0ZV9yZWdpb24gdXBkYXRlX3JlZ2lvbjsKIAogCWJvb2wgdGVfZW5hYmxlZDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCBmcmFtZWRvbmVfd29yazsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworCiAJdm9pZCAoKmZyYW1lZG9uZV9jYWxsYmFjaykoaW50LCB2b2lkICopOwogCXZvaWQgKmZyYW1lZG9uZV9kYXRhOwogCkBAIC01MDksOSArNTE5LDEzIEBACiAJCWRzc19jb2xsZWN0X2lycV9zdGF0cyh2Y3N0YXR1cywgZHNpLmlycV9zdGF0cy52Y19pcnFzW2ldKTsKICNlbmRpZgogCi0JCWlmICh2Y3N0YXR1cyAmIERTSV9WQ19JUlFfQlRBKQorCQlpZiAodmNzdGF0dXMgJiBEU0lfVkNfSVJRX0JUQSkgewogCQkJY29tcGxldGUoJmRzaS5idGFfY29tcGxldGlvbik7CiAKKwkJCWlmIChkc2kuYnRhX2NhbGxiYWNrKQorCQkJCWRzaS5idGFfY2FsbGJhY2soKTsKKwkJfQorCiAJCWlmICh2Y3N0YXR1cyAmIERTSV9WQ19JUlFfRVJST1JfTUFTSykgewogCQkJRFNTRVJSKCJEU0kgVkMoJWQpIGVycm9yLCB2YyBpcnFzdGF0dXMgJXhcbiIsCiAJCQkJICAgICAgIGksIHZjc3RhdHVzKTsKQEAgLTUzNiw4ICs1NTAsMTIgQEAKIAkJLyogZmx1c2ggcG9zdGVkIHdyaXRlICovCiAJCWRzaV9yZWFkX3JlZyhEU0lfQ09NUExFWElPX0lSUV9TVEFUVVMpOwogCi0JCURTU0VSUigiRFNJIENJTyBlcnJvciwgY2lvIGlycXN0YXR1cyAleFxuIiwgY2lvc3RhdHVzKTsKLQkJcHJpbnRfaXJxX3N0YXR1c19jaW8oY2lvc3RhdHVzKTsKKwkJaWYgKGNpb3N0YXR1cyAmIERTSV9DSU9fSVJRX0VSUk9SX01BU0spIHsKKwkJCURTU0VSUigiRFNJIENJTyBlcnJvciwgY2lvIGlycXN0YXR1cyAleFxuIiwgY2lvc3RhdHVzKTsKKwkJCXByaW50X2lycV9zdGF0dXNfY2lvKGNpb3N0YXR1cyk7CisJCX0gZWxzZSBpZiAoZGVidWdfaXJxKSB7CisJCQlwcmludF9pcnFfc3RhdHVzX2NpbyhjaW9zdGF0dXMpOworCQl9CiAJfQogCiAJZHNpX3dyaXRlX3JlZyhEU0lfSVJRU1RBVFVTLCBpcnFzdGF0dXMgJiB+RFNJX0lSUV9DSEFOTkVMX01BU0spOwpAQCAtNTg0LDExICs2MDIsOCBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCiAJCWRzaV93cml0ZV9yZWcoRFNJX1ZDX0lSUUVOQUJMRShpKSwgbCk7CiAKLQkvKiBYWFggem9uZGEgcmVzcG9uZHMgaW5jb3JyZWN0bHksIGNhdXNpbmcgY29udHJvbCBlcnJvcjoKLQkgICBFeGl0IGZyb20gTFAtRVNDIG1vZGUgdG8gTFAxMSB1c2VzIHdyb25nIHRyYW5zaXRpb24gc3RhdGVzIG9uIHRoZQotCSAgIGRhdGEgbGluZXMgTFAwIGFuZCBMTjAuICovCi0JZHNpX3dyaXRlX3JlZyhEU0lfQ09NUExFWElPX0lSUV9FTkFCTEUsCi0JCQktMSAmICh+RFNJX0NJT19JUlFfRVJSQ09OVFJPTDIpKTsKKwlsID0gRFNJX0NJT19JUlFfRVJST1JfTUFTSzsKKwlkc2lfd3JpdGVfcmVnKERTSV9DT01QTEVYSU9fSVJRX0VOQUJMRSwgbCk7CiB9CiAKIHN0YXRpYyB1MzIgZHNpX2dldF9lcnJvcnModm9pZCkKQEAgLTEwOTgsNiArMTExMyw3IEBACiAJaWYgKHdhaXRfZm9yX2JpdF9jaGFuZ2UoRFNJX1BMTF9TVEFUVVMsIDAsIDEpICE9IDEpIHsKIAkJRFNTRVJSKCJQTEwgbm90IGNvbWluZyBvdXQgb2YgcmVzZXQuXG4iKTsKIAkJciA9IC1FTk9ERVY7CisJCWRpc3BjX3Bja19mcmVlX2VuYWJsZSgwKTsKIAkJZ290byBlcnIxOwogCX0KIApAQCAtMTc0MCw0MiArMTc1Niw1MiBAQAogCWRzaS52Y1tjaGFubmVsXS5tb2RlID0gRFNJX1ZDX01PREVfTDQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV92Y19jb25maWdfbDQoaW50IGNoYW5uZWwpCitzdGF0aWMgaW50IGRzaV92Y19jb25maWdfbDQoaW50IGNoYW5uZWwpCiB7CiAJaWYgKGRzaS52Y1tjaGFubmVsXS5tb2RlID09IERTSV9WQ19NT0RFX0w0KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJRFNTREJHRigiJWQiLCBjaGFubmVsKTsKIAogCWRzaV92Y19lbmFibGUoY2hhbm5lbCwgMCk7CiAKLQlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMTUsIDE1KSkgLyogVkNfQlVTWSAqLworCS8qIFZDX0JVU1kgKi8KKwlpZiAod2FpdF9mb3JfYml0X2NoYW5nZShEU0lfVkNfQ1RSTChjaGFubmVsKSwgMTUsIDApICE9IDApIHsKIAkJRFNTRVJSKCJ2YyglZCkgYnVzeSB3aGVuIHRyeWluZyB0byBjb25maWcgZm9yIEw0XG4iLCBjaGFubmVsKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJUkVHX0ZMRF9NT0QoRFNJX1ZDX0NUUkwoY2hhbm5lbCksIDAsIDEsIDEpOyAvKiBTT1VSQ0UsIDAgPSBMNCAqLwogCiAJZHNpX3ZjX2VuYWJsZShjaGFubmVsLCAxKTsKIAogCWRzaS52Y1tjaGFubmVsXS5tb2RlID0gRFNJX1ZDX01PREVfTDQ7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHNpX3ZjX2NvbmZpZ192cChpbnQgY2hhbm5lbCkKK3N0YXRpYyBpbnQgZHNpX3ZjX2NvbmZpZ192cChpbnQgY2hhbm5lbCkKIHsKIAlpZiAoZHNpLnZjW2NoYW5uZWxdLm1vZGUgPT0gRFNJX1ZDX01PREVfVlApCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlEU1NEQkdGKCIlZCIsIGNoYW5uZWwpOwogCiAJZHNpX3ZjX2VuYWJsZShjaGFubmVsLCAwKTsKIAotCWlmIChSRUdfR0VUKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAxNSwgMTUpKSAvKiBWQ19CVVNZICovCisJLyogVkNfQlVTWSAqLworCWlmICh3YWl0X2Zvcl9iaXRfY2hhbmdlKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAxNSwgMCkgIT0gMCkgewogCQlEU1NFUlIoInZjKCVkKSBidXN5IHdoZW4gdHJ5aW5nIHRvIGNvbmZpZyBmb3IgVlBcbiIsIGNoYW5uZWwpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAlSRUdfRkxEX01PRChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMSwgMSwgMSk7IC8qIFNPVVJDRSwgMSA9IHZpZGVvIHBvcnQgKi8KIAogCWRzaV92Y19lbmFibGUoY2hhbm5lbCwgMSk7CiAKIAlkc2kudmNbY2hhbm5lbF0ubW9kZSA9IERTSV9WQ19NT0RFX1ZQOworCisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTg1NCwxOSArMTg4MCwxOSBAQAogCQl1MzIgdmFsOwogCQl1OCBkdDsKIAkJdmFsID0gZHNpX3JlYWRfcmVnKERTSV9WQ19TSE9SVF9QQUNLRVRfSEVBREVSKGNoYW5uZWwpKTsKLQkJRFNTREJHKCJcdHJhd3ZhbCAlIzA4eFxuIiwgdmFsKTsKKwkJRFNTRVJSKCJcdHJhd3ZhbCAlIzA4eFxuIiwgdmFsKTsKIAkJZHQgPSBGTERfR0VUKHZhbCwgNSwgMCk7CiAJCWlmIChkdCA9PSBEU0lfRFRfUlhfQUNLX1dJVEhfRVJSKSB7CiAJCQl1MTYgZXJyID0gRkxEX0dFVCh2YWwsIDIzLCA4KTsKIAkJCWRzaV9zaG93X3J4X2Fja193aXRoX2VycihlcnIpOwogCQl9IGVsc2UgaWYgKGR0ID09IERTSV9EVF9SWF9TSE9SVF9SRUFEXzEpIHsKLQkJCURTU0RCRygiXHREQ1Mgc2hvcnQgcmVzcG9uc2UsIDEgYnl0ZTogJSN4XG4iLAorCQkJRFNTRVJSKCJcdERDUyBzaG9ydCByZXNwb25zZSwgMSBieXRlOiAlI3hcbiIsCiAJCQkJCUZMRF9HRVQodmFsLCAyMywgOCkpOwogCQl9IGVsc2UgaWYgKGR0ID09IERTSV9EVF9SWF9TSE9SVF9SRUFEXzIpIHsKLQkJCURTU0RCRygiXHREQ1Mgc2hvcnQgcmVzcG9uc2UsIDIgYnl0ZTogJSN4XG4iLAorCQkJRFNTRVJSKCJcdERDUyBzaG9ydCByZXNwb25zZSwgMiBieXRlOiAlI3hcbiIsCiAJCQkJCUZMRF9HRVQodmFsLCAyMywgOCkpOwogCQl9IGVsc2UgaWYgKGR0ID09IERTSV9EVF9SWF9EQ1NfTE9OR19SRUFEKSB7Ci0JCQlEU1NEQkcoIlx0RENTIGxvbmcgcmVzcG9uc2UsIGxlbiAlZFxuIiwKKwkJCURTU0VSUigiXHREQ1MgbG9uZyByZXNwb25zZSwgbGVuICVkXG4iLAogCQkJCQlGTERfR0VUKHZhbCwgMjMsIDgpKTsKIAkJCWRzaV92Y19mbHVzaF9sb25nX2RhdGEoY2hhbm5lbCk7CiAJCX0gZWxzZSB7CkBAIC0yMDg3LDYgKzIxMTMsMTMgQEAKIAlpZiAocikKIAkJZ290byBlcnI7CiAKKwlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMjAsIDIwKSkgewkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLworCQlEU1NFUlIoInJ4IGZpZm8gbm90IGVtcHR5IGFmdGVyIHdyaXRlLCBkdW1waW5nIGRhdGE6XG4iKTsKKwkJZHNpX3ZjX2ZsdXNoX3JlY2VpdmVfZGF0YShjaGFubmVsKTsKKwkJciA9IC1FSU87CisJCWdvdG8gZXJyOworCX0KKwogCXJldHVybiAwOwogZXJyOgogCURTU0VSUigiZHNpX3ZjX2Rjc193cml0ZShjaCAlZCwgY21kIDB4JTAyeCwgbGVuICVkKSBmYWlsZWRcbiIsCkBAIC0yMjMzLDExICsyMjY2LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRzaV92Y19kY3NfcmVhZF8xKTsKIAotaW50IGRzaV92Y19kY3NfcmVhZF8yKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1MTYgKmRhdGEpCitpbnQgZHNpX3ZjX2Rjc19yZWFkXzIoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQsIHU4ICpkYXRhMSwgdTggKmRhdGEyKQogeworCXU4IGJ1ZlsyXTsKIAlpbnQgcjsKIAotCXIgPSBkc2lfdmNfZGNzX3JlYWQoY2hhbm5lbCwgZGNzX2NtZCwgKHU4ICopZGF0YSwgMik7CisJciA9IGRzaV92Y19kY3NfcmVhZChjaGFubmVsLCBkY3NfY21kLCBidWYsIDIpOwogCiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKQEAgLTIyNDUsMjMxICsyMjc5LDEyMiBAQAogCWlmIChyICE9IDIpCiAJCXJldHVybiAtRUlPOwogCisJKmRhdGExID0gYnVmWzBdOworCSpkYXRhMiA9IGJ1ZlsxXTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3JlYWRfMik7CiAKIGludCBkc2lfdmNfc2V0X21heF9yeF9wYWNrZXRfc2l6ZShpbnQgY2hhbm5lbCwgdTE2IGxlbikKIHsKLQlpbnQgcjsKLQlyID0gZHNpX3ZjX3NlbmRfc2hvcnQoY2hhbm5lbCwgRFNJX0RUX1NFVF9NQVhfUkVUX1BLR19TSVpFLAorCXJldHVybiBkc2lfdmNfc2VuZF9zaG9ydChjaGFubmVsLCBEU0lfRFRfU0VUX01BWF9SRVRfUEtHX1NJWkUsCiAJCQlsZW4sIDApOwotCi0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JciA9IGRzaV92Y19zZW5kX2J0YV9zeW5jKGNoYW5uZWwpOwotCi0JcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MKGRzaV92Y19zZXRfbWF4X3J4X3BhY2tldF9zaXplKTsKIAotc3RhdGljIHZvaWQgZHNpX3NldF9scF9yeF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgbnMpCitzdGF0aWMgdm9pZCBkc2lfc2V0X2xwX3J4X3RpbWVvdXQodW5zaWduZWQgdGlja3MsIGJvb2wgeDQsIGJvb2wgeDE2KQogewotCXUzMiByOwotCXVuc2lnbmVkIHg0LCB4MTY7CiAJdW5zaWduZWQgbG9uZyBmY2s7Ci0JdW5zaWduZWQgbG9uZyB0aWNrczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RpY2tzOworCXUzMiByOworCisJQlVHX09OKHRpY2tzID4gMHgxZmZmKTsKIAogCS8qIHRpY2tzIGluIERTSV9GQ0sgKi8KLQogCWZjayA9IGRzaV9mY2xrX3JhdGUoKTsKLQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDA7Ci0JeDQgPSAwOwotCXgxNiA9IDA7Ci0KLQlpZiAodGlja3MgPiAweDFmZmYpIHsKLQkJdGlja3MgPSAoZmNrIC8gMTAwMCAvIDEwMDApICogbnMgLyAxMDAwIC8gNDsKLQkJeDQgPSAxOwotCQl4MTYgPSAwOwotCX0KLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDAgLyAxNjsKLQkJeDQgPSAwOwotCQl4MTYgPSAxOwotCX0KLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDAgLyAoNCAqIDE2KTsKLQkJeDQgPSAxOwotCQl4MTYgPSAxOwotCX0KLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQlEU1NXQVJOKCJMUF9UWF9UTyBvdmVyIGxpbWl0LCBzZXR0aW5nIGl0IHRvIG1heFxuIik7Ci0JCXRpY2tzID0gMHgxZmZmOwotCQl4NCA9IDE7Ci0JCXgxNiA9IDE7Ci0JfQogCiAJciA9IGRzaV9yZWFkX3JlZyhEU0lfVElNSU5HMik7CiAJciA9IEZMRF9NT0QociwgMSwgMTUsIDE1KTsJLyogTFBfUlhfVE8gKi8KLQlyID0gRkxEX01PRChyLCB4MTYsIDE0LCAxNCk7CS8qIExQX1JYX1RPX1gxNiAqLwotCXIgPSBGTERfTU9EKHIsIHg0LCAxMywgMTMpOwkvKiBMUF9SWF9UT19YNCAqLworCXIgPSBGTERfTU9EKHIsIHgxNiA/IDEgOiAwLCAxNCwgMTQpOwkvKiBMUF9SWF9UT19YMTYgKi8KKwlyID0gRkxEX01PRChyLCB4NCA/IDEgOiAwLCAxMywgMTMpOwkvKiBMUF9SWF9UT19YNCAqLwogCXIgPSBGTERfTU9EKHIsIHRpY2tzLCAxMiwgMCk7CS8qIExQX1JYX0NPVU5URVIgKi8KIAlkc2lfd3JpdGVfcmVnKERTSV9USU1JTkcyLCByKTsKIAotCURTU0RCRygiTFBfUlhfVE8gJWx1IG5zICglI2x4IHRpY2tzJXMlcylcbiIsCi0JCQkodGlja3MgKiAoeDE2ID8gMTYgOiAxKSAqICh4NCA/IDQgOiAxKSAqIDEwMDApIC8KLQkJCShmY2sgLyAxMDAwIC8gMTAwMCksCi0JCQl0aWNrcywgeDQgPyAiIHg0IiA6ICIiLCB4MTYgPyAiIHgxNiIgOiAiIik7CisJdG90YWxfdGlja3MgPSB0aWNrcyAqICh4MTYgPyAxNiA6IDEpICogKHg0ID8gNCA6IDEpOworCisJRFNTREJHKCJMUF9SWF9UTyAlbHUgdGlja3MgKCUjeCVzJXMpID0gJWx1IG5zXG4iLAorCQkJdG90YWxfdGlja3MsCisJCQl0aWNrcywgeDQgPyAiIHg0IiA6ICIiLCB4MTYgPyAiIHgxNiIgOiAiIiwKKwkJCSh0b3RhbF90aWNrcyAqIDEwMDApIC8gKGZjayAvIDEwMDAgLyAxMDAwKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV9zZXRfdGFfdGltZW91dCh1bnNpZ25lZCBsb25nIG5zKQorc3RhdGljIHZvaWQgZHNpX3NldF90YV90aW1lb3V0KHVuc2lnbmVkIHRpY2tzLCBib29sIHg4LCBib29sIHgxNikKIHsKLQl1MzIgcjsKLQl1bnNpZ25lZCB4OCwgeDE2OwogCXVuc2lnbmVkIGxvbmcgZmNrOwotCXVuc2lnbmVkIGxvbmcgdGlja3M7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90aWNrczsKKwl1MzIgcjsKKworCUJVR19PTih0aWNrcyA+IDB4MWZmZik7CiAKIAkvKiB0aWNrcyBpbiBEU0lfRkNLICovCiAJZmNrID0gZHNpX2ZjbGtfcmF0ZSgpOwotCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMDsKLQl4OCA9IDA7Ci0JeDE2ID0gMDsKLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDAgLyA4OwotCQl4OCA9IDE7Ci0JCXgxNiA9IDA7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvIDE2OwotCQl4OCA9IDA7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvICg4ICogMTYpOwotCQl4OCA9IDE7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCURTU1dBUk4oIlRBX1RPIG92ZXIgbGltaXQsIHNldHRpbmcgaXQgdG8gbWF4XG4iKTsKLQkJdGlja3MgPSAweDFmZmY7Ci0JCXg4ID0gMTsKLQkJeDE2ID0gMTsKLQl9CiAKIAlyID0gZHNpX3JlYWRfcmVnKERTSV9USU1JTkcxKTsKIAlyID0gRkxEX01PRChyLCAxLCAzMSwgMzEpOwkvKiBUQV9UTyAqLwotCXIgPSBGTERfTU9EKHIsIHgxNiwgMzAsIDMwKTsJLyogVEFfVE9fWDE2ICovCi0JciA9IEZMRF9NT0QociwgeDgsIDI5LCAyOSk7CS8qIFRBX1RPX1g4ICovCisJciA9IEZMRF9NT0QociwgeDE2ID8gMSA6IDAsIDMwLCAzMCk7CS8qIFRBX1RPX1gxNiAqLworCXIgPSBGTERfTU9EKHIsIHg4ID8gMSA6IDAsIDI5LCAyOSk7CS8qIFRBX1RPX1g4ICovCiAJciA9IEZMRF9NT0QociwgdGlja3MsIDI4LCAxNik7CS8qIFRBX1RPX0NPVU5URVIgKi8KIAlkc2lfd3JpdGVfcmVnKERTSV9USU1JTkcxLCByKTsKIAotCURTU0RCRygiVEFfVE8gJWx1IG5zICglI2x4IHRpY2tzJXMlcylcbiIsCi0JCQkodGlja3MgKiAoeDE2ID8gMTYgOiAxKSAqICh4OCA/IDggOiAxKSAqIDEwMDApIC8KLQkJCShmY2sgLyAxMDAwIC8gMTAwMCksCi0JCQl0aWNrcywgeDggPyAiIHg4IiA6ICIiLCB4MTYgPyAiIHgxNiIgOiAiIik7CisJdG90YWxfdGlja3MgPSB0aWNrcyAqICh4MTYgPyAxNiA6IDEpICogKHg4ID8gOCA6IDEpOworCisJRFNTREJHKCJUQV9UTyAlbHUgdGlja3MgKCUjeCVzJXMpID0gJWx1IG5zXG4iLAorCQkJdG90YWxfdGlja3MsCisJCQl0aWNrcywgeDggPyAiIHg4IiA6ICIiLCB4MTYgPyAiIHgxNiIgOiAiIiwKKwkJCSh0b3RhbF90aWNrcyAqIDEwMDApIC8gKGZjayAvIDEwMDAgLyAxMDAwKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV9zZXRfc3RvcF9zdGF0ZV9jb3VudGVyKHVuc2lnbmVkIGxvbmcgbnMpCitzdGF0aWMgdm9pZCBkc2lfc2V0X3N0b3Bfc3RhdGVfY291bnRlcih1bnNpZ25lZCB0aWNrcywgYm9vbCB4NCwgYm9vbCB4MTYpCiB7Ci0JdTMyIHI7Ci0JdW5zaWduZWQgeDQsIHgxNjsKIAl1bnNpZ25lZCBsb25nIGZjazsKLQl1bnNpZ25lZCBsb25nIHRpY2tzOworCXVuc2lnbmVkIGxvbmcgdG90YWxfdGlja3M7CisJdTMyIHI7CisKKwlCVUdfT04odGlja3MgPiAweDFmZmYpOwogCiAJLyogdGlja3MgaW4gRFNJX0ZDSyAqLwotCiAJZmNrID0gZHNpX2ZjbGtfcmF0ZSgpOwotCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMDsKLQl4NCA9IDA7Ci0JeDE2ID0gMDsKLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDAgLyA0OwotCQl4NCA9IDE7Ci0JCXgxNiA9IDA7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvIDE2OwotCQl4NCA9IDA7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvICg0ICogMTYpOwotCQl4NCA9IDE7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCURTU1dBUk4oIlNUT1BfU1RBVEVfQ09VTlRFUl9JTyBvdmVyIGxpbWl0LCAiCi0JCQkJInNldHRpbmcgaXQgdG8gbWF4XG4iKTsKLQkJdGlja3MgPSAweDFmZmY7Ci0JCXg0ID0gMTsKLQkJeDE2ID0gMTsKLQl9CiAKIAlyID0gZHNpX3JlYWRfcmVnKERTSV9USU1JTkcxKTsKIAlyID0gRkxEX01PRChyLCAxLCAxNSwgMTUpOwkvKiBGT1JDRV9UWF9TVE9QX01PREVfSU8gKi8KLQlyID0gRkxEX01PRChyLCB4MTYsIDE0LCAxNCk7CS8qIFNUT1BfU1RBVEVfWDE2X0lPICovCi0JciA9IEZMRF9NT0QociwgeDQsIDEzLCAxMyk7CS8qIFNUT1BfU1RBVEVfWDRfSU8gKi8KKwlyID0gRkxEX01PRChyLCB4MTYgPyAxIDogMCwgMTQsIDE0KTsJLyogU1RPUF9TVEFURV9YMTZfSU8gKi8KKwlyID0gRkxEX01PRChyLCB4NCA/IDEgOiAwLCAxMywgMTMpOwkvKiBTVE9QX1NUQVRFX1g0X0lPICovCiAJciA9IEZMRF9NT0QociwgdGlja3MsIDEyLCAwKTsJLyogU1RPUF9TVEFURV9DT1VOVEVSX0lPICovCiAJZHNpX3dyaXRlX3JlZyhEU0lfVElNSU5HMSwgcik7CiAKLQlEU1NEQkcoIlNUT1BfU1RBVEVfQ09VTlRFUiAlbHUgbnMgKCUjbHggdGlja3MlcyVzKVxuIiwKLQkJCSh0aWNrcyAqICh4MTYgPyAxNiA6IDEpICogKHg0ID8gNCA6IDEpICogMTAwMCkgLwotCQkJKGZjayAvIDEwMDAgLyAxMDAwKSwKLQkJCXRpY2tzLCB4NCA/ICIgeDQiIDogIiIsIHgxNiA/ICIgeDE2IiA6ICIiKTsKKwl0b3RhbF90aWNrcyA9IHRpY2tzICogKHgxNiA/IDE2IDogMSkgKiAoeDQgPyA0IDogMSk7CisKKwlEU1NEQkcoIlNUT1BfU1RBVEVfQ09VTlRFUiAlbHUgdGlja3MgKCUjeCVzJXMpID0gJWx1IG5zXG4iLAorCQkJdG90YWxfdGlja3MsCisJCQl0aWNrcywgeDQgPyAiIHg0IiA6ICIiLCB4MTYgPyAiIHgxNiIgOiAiIiwKKwkJCSh0b3RhbF90aWNrcyAqIDEwMDApIC8gKGZjayAvIDEwMDAgLyAxMDAwKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV9zZXRfaHNfdHhfdGltZW91dCh1bnNpZ25lZCBsb25nIG5zKQorc3RhdGljIHZvaWQgZHNpX3NldF9oc190eF90aW1lb3V0KHVuc2lnbmVkIHRpY2tzLCBib29sIHg0LCBib29sIHgxNikKIHsKLQl1MzIgcjsKLQl1bnNpZ25lZCB4NCwgeDE2OwogCXVuc2lnbmVkIGxvbmcgZmNrOwotCXVuc2lnbmVkIGxvbmcgdGlja3M7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90aWNrczsKKwl1MzIgcjsKKworCUJVR19PTih0aWNrcyA+IDB4MWZmZik7CiAKIAkvKiB0aWNrcyBpbiBUeEJ5dGVDbGtIUyAqLwotCiAJZmNrID0gZHNpX2dldF90eGJ5dGVjbGtocygpOwotCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMDsKLQl4NCA9IDA7Ci0JeDE2ID0gMDsKLQotCWlmICh0aWNrcyA+IDB4MWZmZikgewotCQl0aWNrcyA9IChmY2sgLyAxMDAwIC8gMTAwMCkgKiBucyAvIDEwMDAgLyA0OwotCQl4NCA9IDE7Ci0JCXgxNiA9IDA7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvIDE2OwotCQl4NCA9IDA7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCXRpY2tzID0gKGZjayAvIDEwMDAgLyAxMDAwKSAqIG5zIC8gMTAwMCAvICg0ICogMTYpOwotCQl4NCA9IDE7Ci0JCXgxNiA9IDE7Ci0JfQotCi0JaWYgKHRpY2tzID4gMHgxZmZmKSB7Ci0JCURTU1dBUk4oIkhTX1RYX1RPIG92ZXIgbGltaXQsIHNldHRpbmcgaXQgdG8gbWF4XG4iKTsKLQkJdGlja3MgPSAweDFmZmY7Ci0JCXg0ID0gMTsKLQkJeDE2ID0gMTsKLQl9CiAKIAlyID0gZHNpX3JlYWRfcmVnKERTSV9USU1JTkcyKTsKIAlyID0gRkxEX01PRChyLCAxLCAzMSwgMzEpOwkvKiBIU19UWF9UTyAqLwotCXIgPSBGTERfTU9EKHIsIHgxNiwgMzAsIDMwKTsJLyogSFNfVFhfVE9fWDE2ICovCi0JciA9IEZMRF9NT0QociwgeDQsIDI5LCAyOSk7CS8qIEhTX1RYX1RPX1g4ICg0IHJlYWxseSkgKi8KKwlyID0gRkxEX01PRChyLCB4MTYgPyAxIDogMCwgMzAsIDMwKTsJLyogSFNfVFhfVE9fWDE2ICovCisJciA9IEZMRF9NT0QociwgeDQgPyAxIDogMCwgMjksIDI5KTsJLyogSFNfVFhfVE9fWDggKDQgcmVhbGx5KSAqLwogCXIgPSBGTERfTU9EKHIsIHRpY2tzLCAyOCwgMTYpOwkvKiBIU19UWF9UT19DT1VOVEVSICovCiAJZHNpX3dyaXRlX3JlZyhEU0lfVElNSU5HMiwgcik7CiAKLQlEU1NEQkcoIkhTX1RYX1RPICVsdSBucyAoJSNseCB0aWNrcyVzJXMpXG4iLAotCQkJKHRpY2tzICogKHgxNiA/IDE2IDogMSkgKiAoeDQgPyA0IDogMSkgKiAxMDAwKSAvCi0JCQkoZmNrIC8gMTAwMCAvIDEwMDApLAotCQkJdGlja3MsIHg0ID8gIiB4NCIgOiAiIiwgeDE2ID8gIiB4MTYiIDogIiIpOworCXRvdGFsX3RpY2tzID0gdGlja3MgKiAoeDE2ID8gMTYgOiAxKSAqICh4NCA/IDQgOiAxKTsKKworCURTU0RCRygiSFNfVFhfVE8gJWx1IHRpY2tzICglI3glcyVzKSA9ICVsdSBuc1xuIiwKKwkJCXRvdGFsX3RpY2tzLAorCQkJdGlja3MsIHg0ID8gIiB4NCIgOiAiIiwgeDE2ID8gIiB4MTYiIDogIiIsCisJCQkodG90YWxfdGlja3MgKiAxMDAwKSAvIChmY2sgLyAxMDAwIC8gMTAwMCkpOwogfQogc3RhdGljIGludCBkc2lfcHJvdG9fY29uZmlnKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKQEAgLTI0ODcsMTAgKzI0MTIsMTAgQEAKIAkJCURTSV9GSUZPX1NJWkVfMzIpOwogCiAJLyogWFhYIHdoYXQgdmFsdWVzIGZvciB0aGUgdGltZW91dHM/ICovCi0JZHNpX3NldF9zdG9wX3N0YXRlX2NvdW50ZXIoMTAwMCk7Ci0JZHNpX3NldF90YV90aW1lb3V0KDY0MDAwMDApOwotCWRzaV9zZXRfbHBfcnhfdGltZW91dCg0ODAwMCk7Ci0JZHNpX3NldF9oc190eF90aW1lb3V0KDEwMDAwMDApOworCWRzaV9zZXRfc3RvcF9zdGF0ZV9jb3VudGVyKDB4MTAwMCwgZmFsc2UsIGZhbHNlKTsKKwlkc2lfc2V0X3RhX3RpbWVvdXQoMHgxZmZmLCB0cnVlLCB0cnVlKTsKKwlkc2lfc2V0X2xwX3J4X3RpbWVvdXQoMHgxZmZmLCB0cnVlLCB0cnVlKTsKKwlkc2lfc2V0X2hzX3R4X3RpbWVvdXQoMHgxZmZmLCB0cnVlLCB0cnVlKTsKIAogCXN3aXRjaCAoZHNzZGV2LT5jdHJsLnBpeGVsX3NpemUpIHsKIAljYXNlIDE2OgpAQCAtMjc1OSw2ICsyNjg0LDcgQEAKIAl1bnNpZ25lZCBwYWNrZXRfcGF5bG9hZDsKIAl1bnNpZ25lZCBwYWNrZXRfbGVuOwogCXUzMiBsOworCWludCByOwogCWNvbnN0IHVuc2lnbmVkIGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CiAJLyogbGluZSBidWZmZXIgaXMgMTAyNCB4IDI0Yml0cyAqLwogCS8qIFhYWDogZm9yIHNvbWUgcmVhc29uIHVzaW5nIGZ1bGwgYnVmZmVyIHNpemUgY2F1c2VzIGNvbnNpZGVyYWJsZSBUWApAQCAtMjgwOSw4ICsyNzM1LDkgQEAKIAogCWRzaV9wZXJmX21hcmtfc3RhcnQoKTsKIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZHNpLmZyYW1lZG9uZV90aW1lb3V0X3dvcmssCisJciA9IHF1ZXVlX2RlbGF5ZWRfd29yayhkc2kud29ya3F1ZXVlLCAmZHNpLmZyYW1lZG9uZV90aW1lb3V0X3dvcmssCiAJCQltc2Vjc190b19qaWZmaWVzKDI1MCkpOworCUJVR19PTihyID09IDApOwogCiAJZHNzX3N0YXJ0X3VwZGF0ZShkc3NkZXYpOwogCkBAIC0yODM0LDEwNyArMjc2MSwxMDggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBkc2lfaGFuZGxlX2ZyYW1lZG9uZShpbnQgZXJyb3IpCit7CisJY29uc3QgaW50IGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZkc2kuZnJhbWVkb25lX3RpbWVvdXRfd29yayk7CisKKwlkc2lfdmNfZGlzYWJsZV9idGFfaXJxKGNoYW5uZWwpOworCisJLyogU0lETEVNT0RFIGJhY2sgdG8gc21hcnQtaWRsZSAqLworCWRpc3BjX2VuYWJsZV9zaWRsZSgpOworCisJZHNpLmJ0YV9jYWxsYmFjayA9IE5VTEw7CisKKwlpZiAoZHNpLnRlX2VuYWJsZWQpIHsKKwkJLyogZW5hYmxlIExQX1JYX1RPIGFnYWluIGFmdGVyIHRoZSBURSAqLworCQlSRUdfRkxEX01PRChEU0lfVElNSU5HMiwgMSwgMTUsIDE1KTsgLyogTFBfUlhfVE8gKi8KKwl9CisKKwkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLworCWlmIChSRUdfR0VUKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAyMCwgMjApKSB7CisJCURTU0VSUigiUmVjZWl2ZWQgZXJyb3IgZHVyaW5nIGZyYW1lIHRyYW5zZmVyOlxuIik7CisJCWRzaV92Y19mbHVzaF9yZWNlaXZlX2RhdGEoY2hhbm5lbCk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IC1FSU87CisJfQorCisJZHNpLmZyYW1lZG9uZV9jYWxsYmFjayhlcnJvciwgZHNpLmZyYW1lZG9uZV9kYXRhKTsKKworCWlmICghZXJyb3IpCisJCWRzaV9wZXJmX3Nob3coIkRJU1BDIik7Cit9CisKIHN0YXRpYyB2b2lkIGRzaV9mcmFtZWRvbmVfdGltZW91dF93b3JrX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgcjsKLQljb25zdCBpbnQgY2hhbm5lbCA9IGRzaS51cGRhdGVfY2hhbm5lbDsKKwkvKiBYWFggV2hpbGUgZXh0cmVtZWx5IHVubGlrZWx5LCB3ZSBjb3VsZCBnZXQgRlJBTUVET05FIGludGVycnVwdCBhZnRlcgorCSAqIDI1MG1zIHdoaWNoIHdvdWxkIGNvbmZsaWN0IHdpdGggdGhpcyB0aW1lb3V0IHdvcmsuIFdoYXQgc2hvdWxkIGJlCisJICogZG9uZSBpcyBmaXJzdCBjYW5jZWwgdGhlIHRyYW5zZmVyIG9uIHRoZSBIVywgYW5kIHRoZW4gY2FuY2VsIHRoZQorCSAqIHBvc3NpYmx5IHNjaGVkdWxlZCBmcmFtZWRvbmUgd29yay4gSG93ZXZlciwgY2FuY2VsbGluZyB0aGUgdHJhbnNmZXIKKwkgKiBvbiB0aGUgSFcgaXMgYnVnZ3ksIGFuZCB3b3VsZCBwcm9iYWJseSByZXF1aXJlIHJlc2V0dGluZyB0aGUgd2hvbGUKKwkgKiBEU0kgKi8KIAogCURTU0VSUigiRnJhbWVkb25lIG5vdCByZWNlaXZlZCBmb3IgMjUwbXMhXG4iKTsKIAotCS8qIFNJRExFTU9ERSBiYWNrIHRvIHNtYXJ0LWlkbGUgKi8KLQlkaXNwY19lbmFibGVfc2lkbGUoKTsKLQotCWlmIChkc2kudGVfZW5hYmxlZCkgewotCQkvKiBlbmFibGUgTFBfUlhfVE8gYWdhaW4gYWZ0ZXIgdGhlIFRFICovCi0JCVJFR19GTERfTU9EKERTSV9USU1JTkcyLCAxLCAxNSwgMTUpOyAvKiBMUF9SWF9UTyAqLwotCX0KLQotCS8qIFNlbmQgQlRBIGFmdGVyIHRoZSBmcmFtZS4gV2UgbmVlZCB0aGlzIGZvciB0aGUgVEUgdG8gd29yaywgYXMgVEUKLQkgKiB0cmlnZ2VyIGlzIG9ubHkgc2VudCBmb3IgQlRBcyB3aXRob3V0IHByZWNlZGluZyBwYWNrZXQuIFRodXMgd2UgbmVlZAotCSAqIHRvIEJUQSBhZnRlciB0aGUgcGl4ZWwgcGFja2V0cyBzbyB0aGF0IG5leHQgQlRBIHdpbGwgY2F1c2UgVEUKLQkgKiB0cmlnZ2VyLgotCSAqCi0JICogVGhpcyBpcyBub3QgbmVlZGVkIHdoZW4gVEUgaXMgbm90IGluIHVzZSwgYnV0IHdlIGRvIGl0IGFueXdheSB0bwotCSAqIG1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFuc2ZlciBoYXMgYmVlbiBjb21wbGV0ZWQuIEl0IHdvdWxkIGJlIG1vcmUKLQkgKiBvcHRpbWFsLCBidXQgbW9yZSBjb21wbGV4LCB0byB3YWl0IG9ubHkganVzdCBiZWZvcmUgc3RhcnRpbmcgbmV4dAotCSAqIHRyYW5zZmVyLiAqLwotCXIgPSBkc2lfdmNfc2VuZF9idGFfc3luYyhjaGFubmVsKTsKLQlpZiAocikKLQkJRFNTRVJSKCJCVEEgYWZ0ZXIgZnJhbWVkb25lIGZhaWxlZFxuIik7Ci0KLQkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLwotCWlmIChSRUdfR0VUKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAyMCwgMjApKSB7Ci0JCURTU0VSUigiUmVjZWl2ZWQgZXJyb3IgZHVyaW5nIGZyYW1lIHRyYW5zZmVyOlxuIik7Ci0JCWRzaV92Y19mbHVzaF9yZWNlaXZlX2RhdGEoY2hhbm5lbCk7Ci0JfQotCi0JZHNpLmZyYW1lZG9uZV9jYWxsYmFjaygtRVRJTUVET1VULCBkc2kuZnJhbWVkb25lX2RhdGEpOworCWRzaV9oYW5kbGVfZnJhbWVkb25lKC1FVElNRURPVVQpOwogfQogCi1zdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX2lycV9jYWxsYmFjayh2b2lkICpkYXRhLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIGRzaV9mcmFtZWRvbmVfYnRhX2NhbGxiYWNrKHZvaWQpCiB7Ci0JLyogTm90ZTogV2UgZ2V0IEZSQU1FRE9ORSB3aGVuIERJU1BDIGhhcyBmaW5pc2hlZCBzZW5kaW5nIHBpeGVscyBhbmQKLQkgKiB0dXJucyBpdHNlbGYgb2ZmLiBIb3dldmVyLCBEU0kgc3RpbGwgaGFzIHRoZSBwaXhlbHMgaW4gaXRzIGJ1ZmZlcnMsCi0JICogYW5kIGlzIHNlbmRpbmcgdGhlIGRhdGEuCi0JICovCi0KLQkvKiBTSURMRU1PREUgYmFjayB0byBzbWFydC1pZGxlICovCi0JZGlzcGNfZW5hYmxlX3NpZGxlKCk7Ci0KLQlzY2hlZHVsZV93b3JrKCZkc2kuZnJhbWVkb25lX3dvcmspOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfaGFuZGxlX2ZyYW1lZG9uZSh2b2lkKQotewotCWludCByOwotCWNvbnN0IGludCBjaGFubmVsID0gZHNpLnVwZGF0ZV9jaGFubmVsOwotCi0JRFNTREJHKCJGUkFNRURPTkVcbiIpOwotCi0JaWYgKGRzaS50ZV9lbmFibGVkKSB7Ci0JCS8qIGVuYWJsZSBMUF9SWF9UTyBhZ2FpbiBhZnRlciB0aGUgVEUgKi8KLQkJUkVHX0ZMRF9NT0QoRFNJX1RJTUlORzIsIDEsIDE1LCAxNSk7IC8qIExQX1JYX1RPICovCi0JfQotCi0JLyogU2VuZCBCVEEgYWZ0ZXIgdGhlIGZyYW1lLiBXZSBuZWVkIHRoaXMgZm9yIHRoZSBURSB0byB3b3JrLCBhcyBURQotCSAqIHRyaWdnZXIgaXMgb25seSBzZW50IGZvciBCVEFzIHdpdGhvdXQgcHJlY2VkaW5nIHBhY2tldC4gVGh1cyB3ZSBuZWVkCi0JICogdG8gQlRBIGFmdGVyIHRoZSBwaXhlbCBwYWNrZXRzIHNvIHRoYXQgbmV4dCBCVEEgd2lsbCBjYXVzZSBURQotCSAqIHRyaWdnZXIuCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBuZWVkZWQgd2hlbiBURSBpcyBub3QgaW4gdXNlLCBidXQgd2UgZG8gaXQgYW55d2F5IHRvCi0JICogbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zZmVyIGhhcyBiZWVuIGNvbXBsZXRlZC4gSXQgd291bGQgYmUgbW9yZQotCSAqIG9wdGltYWwsIGJ1dCBtb3JlIGNvbXBsZXgsIHRvIHdhaXQgb25seSBqdXN0IGJlZm9yZSBzdGFydGluZyBuZXh0Ci0JICogdHJhbnNmZXIuICovCi0JciA9IGRzaV92Y19zZW5kX2J0YV9zeW5jKGNoYW5uZWwpOwotCWlmIChyKQotCQlEU1NFUlIoIkJUQSBhZnRlciBmcmFtZWRvbmUgZmFpbGVkXG4iKTsKLQotCS8qIFJYX0ZJRk9fTk9UX0VNUFRZICovCi0JaWYgKFJFR19HRVQoRFNJX1ZDX0NUUkwoY2hhbm5lbCksIDIwLCAyMCkpIHsKLQkJRFNTRVJSKCJSZWNlaXZlZCBlcnJvciBkdXJpbmcgZnJhbWUgdHJhbnNmZXI6XG4iKTsKLQkJZHNpX3ZjX2ZsdXNoX3JlY2VpdmVfZGF0YShjaGFubmVsKTsKLQl9CisJZHNpX2hhbmRsZV9mcmFtZWRvbmUoMCk7CiAKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0ZBS0VfVlNZTkMKIAlkaXNwY19mYWtlX3ZzeW5jX2lycSgpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGRzaV9mcmFtZWRvbmVfd29ya19jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX2lycV9jYWxsYmFjayh2b2lkICpkYXRhLCB1MzIgbWFzaykKIHsKLQlEU1NEQkdGKCk7CisJY29uc3QgaW50IGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CisJaW50IHI7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRzaS5mcmFtZWRvbmVfdGltZW91dF93b3JrKTsKKwkvKiBOb3RlOiBXZSBnZXQgRlJBTUVET05FIHdoZW4gRElTUEMgaGFzIGZpbmlzaGVkIHNlbmRpbmcgcGl4ZWxzIGFuZAorCSAqIHR1cm5zIGl0c2VsZiBvZmYuIEhvd2V2ZXIsIERTSSBzdGlsbCBoYXMgdGhlIHBpeGVscyBpbiBpdHMgYnVmZmVycywKKwkgKiBhbmQgaXMgc2VuZGluZyB0aGUgZGF0YS4KKwkgKi8KIAotCWRzaV9oYW5kbGVfZnJhbWVkb25lKCk7CisJaWYgKGRzaS50ZV9lbmFibGVkKSB7CisJCS8qIGVuYWJsZSBMUF9SWF9UTyBhZ2FpbiBhZnRlciB0aGUgVEUgKi8KKwkJUkVHX0ZMRF9NT0QoRFNJX1RJTUlORzIsIDEsIDE1LCAxNSk7IC8qIExQX1JYX1RPICovCisJfQogCi0JZHNpX3BlcmZfc2hvdygiRElTUEMiKTsKKwkvKiBTZW5kIEJUQSBhZnRlciB0aGUgZnJhbWUuIFdlIG5lZWQgdGhpcyBmb3IgdGhlIFRFIHRvIHdvcmssIGFzIFRFCisJICogdHJpZ2dlciBpcyBvbmx5IHNlbnQgZm9yIEJUQXMgd2l0aG91dCBwcmVjZWRpbmcgcGFja2V0LiBUaHVzIHdlIG5lZWQKKwkgKiB0byBCVEEgYWZ0ZXIgdGhlIHBpeGVsIHBhY2tldHMgc28gdGhhdCBuZXh0IEJUQSB3aWxsIGNhdXNlIFRFCisJICogdHJpZ2dlci4KKwkgKgorCSAqIFRoaXMgaXMgbm90IG5lZWRlZCB3aGVuIFRFIGlzIG5vdCBpbiB1c2UsIGJ1dCB3ZSBkbyBpdCBhbnl3YXkgdG8KKwkgKiBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNmZXIgaGFzIGJlZW4gY29tcGxldGVkLiBJdCB3b3VsZCBiZSBtb3JlCisJICogb3B0aW1hbCwgYnV0IG1vcmUgY29tcGxleCwgdG8gd2FpdCBvbmx5IGp1c3QgYmVmb3JlIHN0YXJ0aW5nIG5leHQKKwkgKiB0cmFuc2Zlci4KKwkgKgorCSAqIEFsc28sIGFzIHRoZXJlJ3Mgbm8gaW50ZXJydXB0IHRlbGxpbmcgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGJlZW4KKwkgKiBkb25lIGFuZCB0aGUgY2hhbm5lbCBjb3VsZCBiZSByZWNvbmZpZ3VyZWQsIHRoZSBvbmx5IHdheSBpcyB0bworCSAqIGJ1c3lsb29wIHVudGlsIFRFX1NJWkUgaXMgemVyby4gV2l0aCBCVEEgd2UgY2FuIGRvIHRoaXMKKwkgKiBhc3luY2hyb25vdXNseS4KKwkgKiAqLwogCi0JZHNpLmZyYW1lZG9uZV9jYWxsYmFjaygwLCBkc2kuZnJhbWVkb25lX2RhdGEpOworCWRzaS5idGFfY2FsbGJhY2sgPSBkc2lfZnJhbWVkb25lX2J0YV9jYWxsYmFjazsKKworCWJhcnJpZXIoKTsKKworCWRzaV92Y19lbmFibGVfYnRhX2lycShjaGFubmVsKTsKKworCXIgPSBkc2lfdmNfc2VuZF9idGEoY2hhbm5lbCk7CisJaWYgKHIpIHsKKwkJRFNTRVJSKCJCVEEgYWZ0ZXIgZnJhbWVkb25lIGZhaWxlZFxuIik7CisJCWRzaV9oYW5kbGVfZnJhbWVkb25lKC1FSU8pOworCX0KIH0KIAogaW50IG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCQkgICAgdTE2ICp4LCB1MTYgKnksIHUxNiAqdywgdTE2ICpoKQorCQkJCSAgICB1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgsCisJCQkJICAgIGJvb2wgZW5sYXJnZV91cGRhdGVfYXJlYSkKIHsKIAl1MTYgZHcsIGRoOwogCkBAIC0yOTU4LDcgKzI4ODYsOCBAQAogCWRzaV9wZXJmX21hcmtfc2V0dXAoKTsKIAogCWlmIChkc3NkZXYtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgewotCQlkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoZHNzZGV2LCB4LCB5LCB3LCBoKTsKKwkJZHNzX3NldHVwX3BhcnRpYWxfcGxhbmVzKGRzc2RldiwgeCwgeSwgdywgaCwKKwkJCQllbmxhcmdlX3VwZGF0ZV9hcmVhKTsKIAkJZGlzcGNfc2V0X2xjZF9zaXplKCp3LCAqaCk7CiAJfQogCkBAIC0yOTczLDYgKzI5MDIsMTIgQEAKIHsKIAlkc2kudXBkYXRlX2NoYW5uZWwgPSBjaGFubmVsOwogCisJLyogT01BUCBEU1MgY2Fubm90IHNlbmQgdXBkYXRlcyBvZiBvZGQgd2lkdGhzLgorCSAqIG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKCkgbWFrZXMgdGhlIHdpZHRocyBldmVuLCBidXQgYWRkIGEgQlVHX09OCisJICogaGVyZSB0byBtYWtlIHN1cmUgd2UgY2F0Y2ggZXJyb25lb3VzIHVwZGF0ZXMuIE90aGVyd2lzZSB3ZSdsbCBvbmx5CisJICogc2VlIHJhdGhlciBvYnNjdXJlIEhXIGVycm9yIGhhcHBlbmluZywgYXMgRFNTIGhhbHRzLiAqLworCUJVR19PTih4ICUgMiA9PSAxKTsKKwogCWlmIChkc3NkZXYtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgewogCQlkc2kuZnJhbWVkb25lX2NhbGxiYWNrID0gY2FsbGJhY2s7CiAJCWRzaS5mcmFtZWRvbmVfZGF0YSA9IGRhdGE7CkBAIC0yOTg1LDcgKzI5MjAsMTIgQEAKIAogCQlkc2lfdXBkYXRlX3NjcmVlbl9kaXNwYyhkc3NkZXYsIHgsIHksIHcsIGgpOwogCX0gZWxzZSB7Ci0JCWRzaV91cGRhdGVfc2NyZWVuX2w0KGRzc2RldiwgeCwgeSwgdywgaCk7CisJCWludCByOworCisJCXIgPSBkc2lfdXBkYXRlX3NjcmVlbl9sNChkc3NkZXYsIHgsIHksIHcsIGgpOworCQlpZiAocikKKwkJCXJldHVybiByOworCiAJCWRzaV9wZXJmX3Nob3coIkw0Iik7CiAJCWNhbGxiYWNrKDAsIGRhdGEpOwogCX0KQEAgLTMwNDgsOCArMjk4OCwxMCBAQAogCWNpbmZvLnJlZ20zID0gZHNzZGV2LT5waHkuZHNpLmRpdi5yZWdtMzsKIAljaW5mby5yZWdtNCA9IGRzc2Rldi0+cGh5LmRzaS5kaXYucmVnbTQ7CiAJciA9IGRzaV9jYWxjX2Nsb2NrX3JhdGVzKCZjaW5mbyk7Ci0JaWYgKHIpCisJaWYgKHIpIHsKKwkJRFNTRVJSKCJGYWlsZWQgdG8gY2FsYyBkc2kgY2xvY2tzXG4iKTsKIAkJcmV0dXJuIHI7CisJfQogCiAJciA9IGRzaV9wbGxfc2V0X2Nsb2NrX2RpdigmY2luZm8pOwogCWlmIChyKSB7CkBAIC0zMTQ3LDYgKzMwODksMTMgQEAKIAogc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfdW5pbml0X2RzaShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CisJLyogZGlzYWJsZSBpbnRlcmZhY2UgKi8KKwlkc2lfaWZfZW5hYmxlKDApOworCWRzaV92Y19lbmFibGUoMCwgMCk7CisJZHNpX3ZjX2VuYWJsZSgxLCAwKTsKKwlkc2lfdmNfZW5hYmxlKDIsIDApOworCWRzaV92Y19lbmFibGUoMywgMCk7CisKIAlkc3Nfc2VsZWN0X2Rpc3BjX2Nsa19zb3VyY2UoRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEspOwogCWRzc19zZWxlY3RfZHNpX2Nsa19zb3VyY2UoRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEspOwogCWRzaV9jb21wbGV4aW9fdW5pbml0KCk7CkBAIC0zMjU3LDcgKzMyMDYsNyBAQAogCWJ1cnN0X3NpemVfYnl0ZXMgPSAxNiAqIDMyIC8gODsKIAogCSpmaWZvX2hpZ2ggPSBmaWZvX3NpemUgLSBidXJzdF9zaXplX2J5dGVzOwotCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemVfYnl0ZXMgKiA4OworCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemVfYnl0ZXMgKiAyOwogfQogCiBpbnQgZHNpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCkBAIC0zMjc0LDYgKzMyMjMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBkc2lfd2FpdF9kc2kxX3BsbF9hY3RpdmUodm9pZCkKK3sKKwlpZiAod2FpdF9mb3JfYml0X2NoYW5nZShEU0lfUExMX1NUQVRVUywgNywgMSkgIT0gMSkKKwkJRFNTRVJSKCJEU0kxIFBMTCBjbG9jayBub3QgYWN0aXZlXG4iKTsKK30KKwordm9pZCBkc2lfd2FpdF9kc2kyX3BsbF9hY3RpdmUodm9pZCkKK3sKKwlpZiAod2FpdF9mb3JfYml0X2NoYW5nZShEU0lfUExMX1NUQVRVUywgOCwgMSkgIT0gMSkKKwkJRFNTRVJSKCJEU0kyIFBMTCBjbG9jayBub3QgYWN0aXZlXG4iKTsKK30KKwogaW50IGRzaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdTMyIHJldjsKQEAgLTMyOTIsNyArMzI1MywxMCBAQAogCW11dGV4X2luaXQoJmRzaS5sb2NrKTsKIAlzZW1hX2luaXQoJmRzaS5idXNfbG9jaywgMSk7CiAKLQlJTklUX1dPUksoJmRzaS5mcmFtZWRvbmVfd29yaywgZHNpX2ZyYW1lZG9uZV93b3JrX2NhbGxiYWNrKTsKKwlkc2kud29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImRzaSIpOworCWlmIChkc2kud29ya3F1ZXVlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZHNpLmZyYW1lZG9uZV90aW1lb3V0X3dvcmssCiAJCQlkc2lfZnJhbWVkb25lX3RpbWVvdXRfd29ya19jYWxsYmFjayk7CiAKQEAgLTMzMjgsNiArMzI5Miw3IEBACiBlcnIyOgogCWlvdW5tYXAoZHNpLmJhc2UpOwogZXJyMToKKwlkZXN0cm95X3dvcmtxdWV1ZShkc2kud29ya3F1ZXVlKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMzMzNSw2ICszMzAwLDggQEAKIHsKIAlpb3VubWFwKGRzaS5iYXNlKTsKIAorCWRlc3Ryb3lfd29ya3F1ZXVlKGRzaS53b3JrcXVldWUpOworCiAJRFNTREJHKCJvbWFwX2RzaV9leGl0XG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwppbmRleCAyNGIxODI1Li43N2MzNjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuYwpAQCAtMjY1LDYgKzI2NSw5IEBACiAKIAliID0gY2xrX3NyYyA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyA/IDAgOiAxOwogCisJaWYgKGNsa19zcmMgPT0gRFNTX1NSQ19EU0kxX1BMTF9GQ0xLKQorCQlkc2lfd2FpdF9kc2kxX3BsbF9hY3RpdmUoKTsKKwogCVJFR19GTERfTU9EKERTU19DT05UUk9MLCBiLCAwLCAwKTsJLyogRElTUENfQ0xLX1NXSVRDSCAqLwogCiAJZHNzLmRpc3BjX2Nsa19zb3VyY2UgPSBjbGtfc3JjOwpAQCAtMjc5LDYgKzI4Miw5IEBACiAKIAliID0gY2xrX3NyYyA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyA/IDAgOiAxOwogCisJaWYgKGNsa19zcmMgPT0gRFNTX1NSQ19EU0kyX1BMTF9GQ0xLKQorCQlkc2lfd2FpdF9kc2kyX3BsbF9hY3RpdmUoKTsKKwogCVJFR19GTERfTU9EKERTU19DT05UUk9MLCBiLCAxLCAxKTsJLyogRFNJX0NMS19TV0lUQ0ggKi8KIAogCWRzcy5kc2lfY2xrX3NvdXJjZSA9IGNsa19zcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaCBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCmluZGV4IDc4NmY0MzMuLjVjNzk0MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCkBAIC0xOTksNyArMTk5LDggQEAKIHZvaWQgZHNzX3VuaW5pdF9vdmVybGF5X21hbmFnZXJzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogaW50IGRzc19tZ3Jfd2FpdF9mb3JfZ29fb3ZsKHN0cnVjdCBvbWFwX292ZXJsYXkgKm92bCk7CiB2b2lkIGRzc19zZXR1cF9wYXJ0aWFsX3BsYW5lcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQkJdTE2ICp4LCB1MTYgKnksIHUxNiAqdywgdTE2ICpoKTsKKwkJCQl1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgsCisJCQkJYm9vbCBlbmxhcmdlX3VwZGF0ZV9hcmVhKTsKIHZvaWQgZHNzX3N0YXJ0X3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogCiAvKiBvdmVybGF5ICovCkBAIC0yODEsNiArMjgyLDggQEAKIHZvaWQgZHNpX2dldF9vdmVybGF5X2ZpZm9fdGhyZXNob2xkcyhlbnVtIG9tYXBfcGxhbmUgcGxhbmUsCiAJCXUzMiBmaWZvX3NpemUsIGVudW0gb21hcF9idXJzdF9zaXplICpidXJzdF9zaXplLAogCQl1MzIgKmZpZm9fbG93LCB1MzIgKmZpZm9faGlnaCk7Cit2b2lkIGRzaV93YWl0X2RzaTFfcGxsX2FjdGl2ZSh2b2lkKTsKK3ZvaWQgZHNpX3dhaXRfZHNpMl9wbGxfYWN0aXZlKHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGRzaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0yODksNiArMjkyLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZHNpX2V4aXQodm9pZCkKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd2FpdF9kc2kxX3BsbF9hY3RpdmUodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfd2FpdF9kc2kyX3BsbF9hY3RpdmUodm9pZCkKK3sKK30KICNlbmRpZgogCiAvKiBEUEkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYwppbmRleCA5ZTFmYmU1Li42YTY0OWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvbWFuYWdlci5jCkBAIC00NDAsNiArNDQwLDEwIEBACiAKIAkvKiBtYW51YWwgdXBkYXRlIHJlZ2lvbiAqLwogCXUxNiB4LCB5LCB3LCBoOworCisJLyogZW5sYXJnZSB0aGUgdXBkYXRlIGFyZWEgaWYgdGhlIHVwZGF0ZSBhcmVhIGNvbnRhaW5zIHNjYWxlZAorCSAqIG92ZXJsYXlzICovCisJYm9vbCBlbmxhcmdlX3VwZGF0ZV9hcmVhOwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC01MjUsNyArNTI5LDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSBtZ3ItPmRldmljZTsKIAotCWlmICghZHNzZGV2KQorCWlmICghZHNzZGV2IHx8IGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCiAJCXJldHVybiAwOwogCiAJaWYgKGRzc2Rldi0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DKSB7CkBAIC01OTYsMTEgKzYwMCwxNCBAQAogCWludCByOwogCWludCBpOwogCi0JaWYgKCFvdmwtPm1hbmFnZXIgfHwgIW92bC0+bWFuYWdlci0+ZGV2aWNlKQorCWlmICghb3ZsLT5tYW5hZ2VyKQogCQlyZXR1cm4gMDsKIAogCWRzc2RldiA9IG92bC0+bWFuYWdlci0+ZGV2aWNlOwogCisJaWYgKCFkc3NkZXYgfHwgZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZHNzZGV2LT50eXBlID09IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpIHsKIAkJaXJxID0gRElTUENfSVJRX0VWU1lOQ19PREQgfCBESVNQQ19JUlFfRVZTWU5DX0VWRU47CiAJCWNoYW5uZWwgPSBPTUFQX0RTU19DSEFOTkVMX0RJR0lUOwpAQCAtNzE4LDYgKzcyNSw3IEBACiAJdTE2IHgsIHksIHcsIGg7CiAJdTMyIHBhZGRyOwogCWludCByOworCXUxNiBvcmlnX3csIG9yaWdfaCwgb3JpZ19vdXR3LCBvcmlnX291dGg7CiAKIAlEU1NEQkdGKCIlZCIsIHBsYW5lKTsKIApAQCAtNzM4LDggKzc0NiwxNiBAQAogCW91dGggPSBjLT5vdXRfaGVpZ2h0ID09IDAgPyBjLT5oZWlnaHQgOiBjLT5vdXRfaGVpZ2h0OwogCXBhZGRyID0gYy0+cGFkZHI7CiAKKwlvcmlnX3cgPSB3OworCW9yaWdfaCA9IGg7CisJb3JpZ19vdXR3ID0gb3V0dzsKKwlvcmlnX291dGggPSBvdXRoOworCiAJaWYgKGMtPm1hbnVhbF91cGRhdGUgJiYgbWMtPmRvX21hbnVhbF91cGRhdGUpIHsKIAkJdW5zaWduZWQgYnBwOworCQl1bnNpZ25lZCBzY2FsZV94X20gPSB3LCBzY2FsZV94X2QgPSBvdXR3OworCQl1bnNpZ25lZCBzY2FsZV95X20gPSBoLCBzY2FsZV95X2QgPSBvdXRoOworCiAJCS8qIElmIHRoZSBvdmVybGF5IGlzIG91dHNpZGUgdGhlIHVwZGF0ZSByZWdpb24sIGRpc2FibGUgaXQgKi8KIAkJaWYgKCFyZWN0YW5nbGVfaW50ZXJzZWN0cyhtYy0+eCwgbWMtPnksIG1jLT53LCBtYy0+aCwKIAkJCQkJeCwgeSwgb3V0dywgb3V0aCkpIHsKQEAgLTc3MCwzOCArNzg2LDQ3IEBACiAJCQlCVUcoKTsKIAkJfQogCi0JCWlmIChkaXNwY19pc19vdmVybGF5X3NjYWxlZChjKSkgewotCQkJLyogSWYgdGhlIG92ZXJsYXkgaXMgc2NhbGVkLCB0aGUgdXBkYXRlIGFyZWEgaGFzCi0JCQkgKiBhbHJlYWR5IGJlZW4gZW5sYXJnZWQgdG8gY292ZXIgdGhlIHdob2xlIG92ZXJsYXkuIFdlCi0JCQkgKiBvbmx5IG5lZWQgdG8gYWRqdXN0IHgveSBoZXJlICovCi0JCQl4ID0gYy0+cG9zX3ggLSBtYy0+eDsKLQkJCXkgPSBjLT5wb3NfeSAtIG1jLT55OworCQlpZiAobWMtPnggPiBjLT5wb3NfeCkgeworCQkJeCA9IDA7CisJCQlvdXR3IC09IChtYy0+eCAtIGMtPnBvc194KTsKKwkJCXBhZGRyICs9IChtYy0+eCAtIGMtPnBvc194KSAqCisJCQkJc2NhbGVfeF9tIC8gc2NhbGVfeF9kICogYnBwIC8gODsKIAkJfSBlbHNlIHsKLQkJCWlmIChtYy0+eCA+IGMtPnBvc194KSB7Ci0JCQkJeCA9IDA7Ci0JCQkJdyAtPSAobWMtPnggLSBjLT5wb3NfeCk7Ci0JCQkJcGFkZHIgKz0gKG1jLT54IC0gYy0+cG9zX3gpICogYnBwIC8gODsKLQkJCX0gZWxzZSB7Ci0JCQkJeCA9IGMtPnBvc194IC0gbWMtPng7Ci0JCQl9CisJCQl4ID0gYy0+cG9zX3ggLSBtYy0+eDsKKwkJfQogCi0JCQlpZiAobWMtPnkgPiBjLT5wb3NfeSkgewotCQkJCXkgPSAwOwotCQkJCWggLT0gKG1jLT55IC0gYy0+cG9zX3kpOwotCQkJCXBhZGRyICs9IChtYy0+eSAtIGMtPnBvc195KSAqIGMtPnNjcmVlbl93aWR0aCAqCi0JCQkJCWJwcCAvIDg7Ci0JCQl9IGVsc2UgewotCQkJCXkgPSBjLT5wb3NfeSAtIG1jLT55OwotCQkJfQorCQlpZiAobWMtPnkgPiBjLT5wb3NfeSkgeworCQkJeSA9IDA7CisJCQlvdXRoIC09IChtYy0+eSAtIGMtPnBvc195KTsKKwkJCXBhZGRyICs9IChtYy0+eSAtIGMtPnBvc195KSAqCisJCQkJc2NhbGVfeV9tIC8gc2NhbGVfeV9kICoKKwkJCQljLT5zY3JlZW5fd2lkdGggKiBicHAgLyA4OworCQl9IGVsc2UgeworCQkJeSA9IGMtPnBvc195IC0gbWMtPnk7CisJCX0KIAotCQkJaWYgKG1jLT53IDwgKHgrdykpCi0JCQkJdyAtPSAoeCt3KSAtIChtYy0+dyk7CisJCWlmIChtYy0+dyA8ICh4ICsgb3V0dykpCisJCQlvdXR3IC09ICh4ICsgb3V0dykgLSAobWMtPncpOwogCi0JCQlpZiAobWMtPmggPCAoeStoKSkKLQkJCQloIC09ICh5K2gpIC0gKG1jLT5oKTsKKwkJaWYgKG1jLT5oIDwgKHkgKyBvdXRoKSkKKwkJCW91dGggLT0gKHkgKyBvdXRoKSAtIChtYy0+aCk7CiAKLQkJCW91dHcgPSB3OwotCQkJb3V0aCA9IGg7CisJCXcgPSB3ICogb3V0dyAvIG9yaWdfb3V0dzsKKwkJaCA9IGggKiBvdXRoIC8gb3JpZ19vdXRoOworCisJCS8qIFlVViBtb2RlIG92ZXJsYXkncyBpbnB1dCB3aWR0aCBoYXMgdG8gYmUgZXZlbiBhbmQgdGhlCisJCSAqIGFsZ29yaXRobSBhYm92ZSBtYXkgYWRqdXN0IHRoZSB3aWR0aCB0byBiZSBvZGQuCisJCSAqCisJCSAqIEhlcmUgd2UgYWRqdXN0IHRoZSB3aWR0aCBpZiBuZWVkZWQsIHByZWZlcnJpbmcgdG8gaW5jcmVhc2UKKwkJICogdGhlIHdpZHRoIGlmIHRoZSBvcmlnaW5hbCB3aWR0aCB3YXMgYmlnZ2VyLgorCQkgKi8KKwkJaWYgKCh3ICYgMSkgJiYKKwkJCQkoYy0+Y29sb3JfbW9kZSA9PSBPTUFQX0RTU19DT0xPUl9ZVVYyIHx8CisJCQkJIGMtPmNvbG9yX21vZGUgPT0gT01BUF9EU1NfQ09MT1JfVVlWWSkpIHsKKwkJCWlmIChvcmlnX3cgPiB3KQorCQkJCXcgKz0gMTsKKwkJCWVsc2UKKwkJCQl3IC09IDE7CiAJCX0KIAl9CiAKQEAgLTk2MCw3ICs5ODUsNyBAQAogLyogQ29uZmlndXJlIGRpc3BjIGZvciBwYXJ0aWFsIHVwZGF0ZS4gUmV0dXJuIHBvc3NpYmx5IG1vZGlmaWVkIHVwZGF0ZQogICogYXJlYSAqLwogdm9pZCBkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQl1MTYgKnhpLCB1MTYgKnlpLCB1MTYgKndpLCB1MTYgKmhpKQorCQl1MTYgKnhpLCB1MTYgKnlpLCB1MTYgKndpLCB1MTYgKmhpLCBib29sIGVubGFyZ2VfdXBkYXRlX2FyZWEpCiB7CiAJc3RydWN0IG92ZXJsYXlfY2FjaGVfZGF0YSAqb2M7CiAJc3RydWN0IG1hbmFnZXJfY2FjaGVfZGF0YSAqbWM7CkBAIC05NjksNiArOTk0LDcgQEAKIAlpbnQgaTsKIAl1MTYgeCwgeSwgdywgaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgYXJlYV9jaGFuZ2VkOwogCiAJeCA9ICp4aTsKIAl5ID0gKnlpOwpAQCAtOTg5LDczICsxMDE1LDkxIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZHNzX2NhY2hlLmxvY2ssIGZsYWdzKTsKIAotCS8qIFdlIG5lZWQgdG8gc2hvdyB0aGUgd2hvbGUgb3ZlcmxheSBpZiBpdCBpcyBzY2FsZWQuIFNvIGxvb2sgZm9yCi0JICogdGhvc2UsIGFuZCBtYWtlIHRoZSB1cGRhdGUgYXJlYSBsYXJnZXIgaWYgZm91bmQuCi0JICogQWxzbyBtYXJrIHRoZSBvdmVybGF5IGNhY2hlIGRpcnR5ICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9vdmxzOyArK2kpIHsKLQkJdW5zaWduZWQgeDEsIHkxLCB4MiwgeTI7Ci0JCXVuc2lnbmVkIG91dHcsIG91dGg7CisJLyoKKwkgKiBFeGVjdXRlIHRoZSBvdXRlciBsb29wIHVudGlsIHRoZSBpbm5lciBsb29wIGhhcyBjb21wbGV0ZWQKKwkgKiBvbmNlIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgdXBkYXRlIGFyZWEuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdAorCSAqIGFsbCBzY2FsZWQgb3ZlcmxheXMgZW5kIHVwIGNvbXBsZXRlbHkgd2l0aGluIHRoZSB1cGRhdGUgYXJlYS4KKwkgKi8KKwlkbyB7CisJCWFyZWFfY2hhbmdlZCA9IGZhbHNlOwogCi0JCW9jID0gJmRzc19jYWNoZS5vdmVybGF5X2NhY2hlW2ldOworCQkvKiBXZSBuZWVkIHRvIHNob3cgdGhlIHdob2xlIG92ZXJsYXkgaWYgaXQgaXMgc2NhbGVkLiBTbyBsb29rCisJCSAqIGZvciB0aG9zZSwgYW5kIG1ha2UgdGhlIHVwZGF0ZSBhcmVhIGxhcmdlciBpZiBmb3VuZC4KKwkJICogQWxzbyBtYXJrIHRoZSBvdmVybGF5IGNhY2hlIGRpcnR5ICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fb3ZsczsgKytpKSB7CisJCQl1bnNpZ25lZCB4MSwgeTEsIHgyLCB5MjsKKwkJCXVuc2lnbmVkIG91dHcsIG91dGg7CiAKLQkJaWYgKG9jLT5jaGFubmVsICE9IG1nci0+aWQpCi0JCQljb250aW51ZTsKKwkJCW9jID0gJmRzc19jYWNoZS5vdmVybGF5X2NhY2hlW2ldOwogCi0JCW9jLT5kaXJ0eSA9IHRydWU7CisJCQlpZiAob2MtPmNoYW5uZWwgIT0gbWdyLT5pZCkKKwkJCQljb250aW51ZTsKIAotCQlpZiAoIW9jLT5lbmFibGVkKQotCQkJY29udGludWU7CisJCQlvYy0+ZGlydHkgPSB0cnVlOwogCi0JCWlmICghZGlzcGNfaXNfb3ZlcmxheV9zY2FsZWQob2MpKQotCQkJY29udGludWU7CisJCQlpZiAoIWVubGFyZ2VfdXBkYXRlX2FyZWEpCisJCQkJY29udGludWU7CiAKLQkJb3V0dyA9IG9jLT5vdXRfd2lkdGggPT0gMCA/IG9jLT53aWR0aCA6IG9jLT5vdXRfd2lkdGg7Ci0JCW91dGggPSBvYy0+b3V0X2hlaWdodCA9PSAwID8gb2MtPmhlaWdodCA6IG9jLT5vdXRfaGVpZ2h0OworCQkJaWYgKCFvYy0+ZW5hYmxlZCkKKwkJCQljb250aW51ZTsKIAotCQkvKiBpcyB0aGUgb3ZlcmxheSBvdXRzaWRlIHRoZSB1cGRhdGUgcmVnaW9uPyAqLwotCQlpZiAoIXJlY3RhbmdsZV9pbnRlcnNlY3RzKHgsIHksIHcsIGgsCi0JCQkJCW9jLT5wb3NfeCwgb2MtPnBvc195LAotCQkJCQlvdXR3LCBvdXRoKSkKLQkJCWNvbnRpbnVlOworCQkJaWYgKCFkaXNwY19pc19vdmVybGF5X3NjYWxlZChvYykpCisJCQkJY29udGludWU7CiAKLQkJLyogaWYgdGhlIG92ZXJsYXkgdG90YWxseSBpbnNpZGUgdGhlIHVwZGF0ZSByZWdpb24/ICovCi0JCWlmIChyZWN0YW5nbGVfc3Vic2V0KG9jLT5wb3NfeCwgb2MtPnBvc195LCBvdXR3LCBvdXRoLAotCQkJCQl4LCB5LCB3LCBoKSkKLQkJCWNvbnRpbnVlOworCQkJb3V0dyA9IG9jLT5vdXRfd2lkdGggPT0gMCA/CisJCQkJb2MtPndpZHRoIDogb2MtPm91dF93aWR0aDsKKwkJCW91dGggPSBvYy0+b3V0X2hlaWdodCA9PSAwID8KKwkJCQlvYy0+aGVpZ2h0IDogb2MtPm91dF9oZWlnaHQ7CiAKLQkJaWYgKHggPiBvYy0+cG9zX3gpCi0JCQl4MSA9IG9jLT5wb3NfeDsKLQkJZWxzZQotCQkJeDEgPSB4OworCQkJLyogaXMgdGhlIG92ZXJsYXkgb3V0c2lkZSB0aGUgdXBkYXRlIHJlZ2lvbj8gKi8KKwkJCWlmICghcmVjdGFuZ2xlX2ludGVyc2VjdHMoeCwgeSwgdywgaCwKKwkJCQkJCW9jLT5wb3NfeCwgb2MtPnBvc195LAorCQkJCQkJb3V0dywgb3V0aCkpCisJCQkJY29udGludWU7CiAKLQkJaWYgKHkgPiBvYy0+cG9zX3kpCi0JCQl5MSA9IG9jLT5wb3NfeTsKLQkJZWxzZQotCQkJeTEgPSB5OworCQkJLyogaWYgdGhlIG92ZXJsYXkgdG90YWxseSBpbnNpZGUgdGhlIHVwZGF0ZSByZWdpb24/ICovCisJCQlpZiAocmVjdGFuZ2xlX3N1YnNldChvYy0+cG9zX3gsIG9jLT5wb3NfeSwgb3V0dywgb3V0aCwKKwkJCQkJCXgsIHksIHcsIGgpKQorCQkJCWNvbnRpbnVlOwogCi0JCWlmICgoeCArIHcpIDwgKG9jLT5wb3NfeCArIG91dHcpKQotCQkJeDIgPSBvYy0+cG9zX3ggKyBvdXR3OwotCQllbHNlCi0JCQl4MiA9IHggKyB3OworCQkJaWYgKHggPiBvYy0+cG9zX3gpCisJCQkJeDEgPSBvYy0+cG9zX3g7CisJCQllbHNlCisJCQkJeDEgPSB4OwogCi0JCWlmICgoeSArIGgpIDwgKG9jLT5wb3NfeSArIG91dGgpKQotCQkJeTIgPSBvYy0+cG9zX3kgKyBvdXRoOwotCQllbHNlCi0JCQl5MiA9IHkgKyBoOworCQkJaWYgKHkgPiBvYy0+cG9zX3kpCisJCQkJeTEgPSBvYy0+cG9zX3k7CisJCQllbHNlCisJCQkJeTEgPSB5OwogCi0JCXggPSB4MTsKLQkJeSA9IHkxOwotCQl3ID0geDIgLSB4MTsKLQkJaCA9IHkyIC0geTE7CisJCQlpZiAoKHggKyB3KSA8IChvYy0+cG9zX3ggKyBvdXR3KSkKKwkJCQl4MiA9IG9jLT5wb3NfeCArIG91dHc7CisJCQllbHNlCisJCQkJeDIgPSB4ICsgdzsKIAotCQltYWtlX2V2ZW4oJngsICZ3KTsKKwkJCWlmICgoeSArIGgpIDwgKG9jLT5wb3NfeSArIG91dGgpKQorCQkJCXkyID0gb2MtPnBvc195ICsgb3V0aDsKKwkJCWVsc2UKKwkJCQl5MiA9IHkgKyBoOwogCi0JCURTU0RCRygiY2hhbmdpbmcgdXBkIGFyZWEgZHVlIHRvIG92bCglZCkgc2NhbGluZyAlZCwlZCAlZHglZFxuIiwKKwkJCXggPSB4MTsKKwkJCXkgPSB5MTsKKwkJCXcgPSB4MiAtIHgxOworCQkJaCA9IHkyIC0geTE7CisKKwkJCW1ha2VfZXZlbigmeCwgJncpOworCisJCQlEU1NEQkcoImNoYW5naW5nIHVwZCBhcmVhIGR1ZSB0byBvdmwoJWQpICIKKwkJCSAgICAgICAic2NhbGluZyAlZCwlZCAlZHglZFxuIiwKIAkJCQlpLCB4LCB5LCB3LCBoKTsKLQl9CisKKwkJCWFyZWFfY2hhbmdlZCA9IHRydWU7CisJCX0KKwl9IHdoaWxlIChhcmVhX2NoYW5nZWQpOwogCiAJbWMgPSAmZHNzX2NhY2hlLm1hbmFnZXJfY2FjaGVbbWdyLT5pZF07CiAJbWMtPmRvX21hbnVhbF91cGRhdGUgPSB0cnVlOworCW1jLT5lbmxhcmdlX3VwZGF0ZV9hcmVhID0gZW5sYXJnZV91cGRhdGVfYXJlYTsKIAltYy0+eCA9IHg7CiAJbWMtPnkgPSB5OwogCW1jLT53ID0gdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYwppbmRleCA4MjMzNjU4Li4yNDRkY2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9vdmVybGF5LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvb3ZlcmxheS5jCkBAIC02NSw3ICs2NSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2Rzc19nZXRfbnVtX292ZXJsYXlfbWFuYWdlcnMoKTsgKytpKSB7CiAJCQltZ3IgPSBvbWFwX2Rzc19nZXRfb3ZlcmxheV9tYW5hZ2VyKGkpOwogCi0JCQlpZiAoc3RybmNtcChidWYsIG1nci0+bmFtZSwgbGVuKSA9PSAwKQorCQkJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgbWdyLT5uYW1lKSkKIAkJCQlicmVhazsKIAogCQkJbWdyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYwppbmRleCBjYzIzZjUzLi5iYmU2MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCkBAIC04ODYsNyArODg2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZHNzZGV2LT5tYW5hZ2VyLT5jYXBzICYgT01BUF9EU1NfT1ZMX01HUl9DQVBfRElTUEMpIHsKLQkJZHNzX3NldHVwX3BhcnRpYWxfcGxhbmVzKGRzc2RldiwgeCwgeSwgdywgaCk7CisJCWRzc19zZXR1cF9wYXJ0aWFsX3BsYW5lcyhkc3NkZXYsIHgsIHksIHcsIGgsIHRydWUpOwogCQlkaXNwY19zZXRfbGNkX3NpemUoKncsICpoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKaW5kZXggOWM3MzYxOC4uNmY0MzU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKQEAgLTM0LDEyICszNCwzNyBAQAogCiAjaW5jbHVkZSAib21hcGZiLmgiCiAKK3N0YXRpYyB1OCBnZXRfbWVtX2lkeChzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkpCit7CisJaWYgKG9mYmktPmlkID09IG9mYmktPnJlZ2lvbi0+aWQpCisJCXJldHVybiAwOworCisJcmV0dXJuIE9NQVBGQl9NRU1fSURYX0VOQUJMRUQgfCBvZmJpLT5yZWdpb24tPmlkOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiAqZ2V0X21lbV9yZWdpb24oc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLAorCQkJCQkJIHU4IG1lbV9pZHgpCit7CisJc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiA9IG9mYmktPmZiZGV2OworCisJaWYgKG1lbV9pZHggJiBPTUFQRkJfTUVNX0lEWF9FTkFCTEVEKQorCQltZW1faWR4ICY9IE9NQVBGQl9NRU1fSURYX01BU0s7CisJZWxzZQorCQltZW1faWR4ID0gb2ZiaS0+aWQ7CisKKwlpZiAobWVtX2lkeCA+PSBmYmRldi0+bnVtX2ZicykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gJmZiZGV2LT5yZWdpb25zW21lbV9pZHhdOworfQorCiBzdGF0aWMgaW50IG9tYXBmYl9zZXR1cF9wbGFuZShzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBzdHJ1Y3Qgb21hcGZiX3BsYW5lX2luZm8gKnBpKQogewogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOwogCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYgPSBvZmJpLT5mYmRldjsKIAlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmw7Ci0Jc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvIGluZm87CisJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvIG9sZF9pbmZvOworCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKm9sZF9yZywgKm5ld19yZzsKIAlpbnQgciA9IDA7CiAKIAlEQkcoIm9tYXBmYl9zZXR1cF9wbGFuZVxuIik7CkBAIC01MiwzNiArNzcsMTA2IEBACiAJLyogWFhYIHVzZXMgb25seSB0aGUgZmlyc3Qgb3ZlcmxheSAqLwogCW92bCA9IG9mYmktPm92ZXJsYXlzWzBdOwogCi0JaWYgKHBpLT5lbmFibGVkICYmICFvZmJpLT5yZWdpb24uc2l6ZSkgeworCW9sZF9yZyA9IG9mYmktPnJlZ2lvbjsKKwluZXdfcmcgPSBnZXRfbWVtX3JlZ2lvbihvZmJpLCBwaS0+bWVtX2lkeCk7CisJaWYgKCFuZXdfcmcpIHsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRha2UgdGhlIGxvY2tzIGluIGEgc3BlY2lmaWMgb3JkZXIgdG8ga2VlcCBsb2NrZGVwIGhhcHB5ICovCisJaWYgKG9sZF9yZy0+aWQgPCBuZXdfcmctPmlkKSB7CisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvbGRfcmcpOworCQlvbWFwZmJfZ2V0X21lbV9yZWdpb24obmV3X3JnKTsKKwl9IGVsc2UgaWYgKG5ld19yZy0+aWQgPCBvbGRfcmctPmlkKSB7CisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihuZXdfcmcpOworCQlvbWFwZmJfZ2V0X21lbV9yZWdpb24ob2xkX3JnKTsKKwl9IGVsc2UKKwkJb21hcGZiX2dldF9tZW1fcmVnaW9uKG9sZF9yZyk7CisKKwlpZiAocGktPmVuYWJsZWQgJiYgIW5ld19yZy0+c2l6ZSkgewogCQkvKgogCQkgKiBUaGlzIHBsYW5lJ3MgbWVtb3J5IHdhcyBmcmVlZCwgY2FuJ3QgZW5hYmxlIGl0CiAJCSAqIHVudGlsIGl0J3MgcmVhbGxvY2F0ZWQuCiAJCSAqLwogCQlyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJCWdvdG8gcHV0X21lbTsKIAl9CiAKLQlvdmwtPmdldF9vdmVybGF5X2luZm8ob3ZsLCAmaW5mbyk7CisJb3ZsLT5nZXRfb3ZlcmxheV9pbmZvKG92bCwgJm9sZF9pbmZvKTsKIAotCWluZm8ucG9zX3ggPSBwaS0+cG9zX3g7Ci0JaW5mby5wb3NfeSA9IHBpLT5wb3NfeTsKLQlpbmZvLm91dF93aWR0aCA9IHBpLT5vdXRfd2lkdGg7Ci0JaW5mby5vdXRfaGVpZ2h0ID0gcGktPm91dF9oZWlnaHQ7Ci0JaW5mby5lbmFibGVkID0gcGktPmVuYWJsZWQ7CisJaWYgKG9sZF9yZyAhPSBuZXdfcmcpIHsKKwkJb2ZiaS0+cmVnaW9uID0gbmV3X3JnOworCQlzZXRfZmJfZml4KGZiaSk7CisJfQogCi0JciA9IG92bC0+c2V0X292ZXJsYXlfaW5mbyhvdmwsICZpbmZvKTsKLQlpZiAocikKLQkJZ290byBvdXQ7CisJaWYgKHBpLT5lbmFibGVkKSB7CisJCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyBpbmZvOwogCi0JaWYgKG92bC0+bWFuYWdlcikgewotCQlyID0gb3ZsLT5tYW5hZ2VyLT5hcHBseShvdmwtPm1hbmFnZXIpOworCQlyID0gb21hcGZiX3NldHVwX292ZXJsYXkoZmJpLCBvdmwsIHBpLT5wb3NfeCwgcGktPnBvc195LAorCQkJcGktPm91dF93aWR0aCwgcGktPm91dF9oZWlnaHQpOwogCQlpZiAocikKLQkJCWdvdG8gb3V0OworCQkJZ290byB1bmRvOworCisJCW92bC0+Z2V0X292ZXJsYXlfaW5mbyhvdmwsICZpbmZvKTsKKworCQlpZiAoIWluZm8uZW5hYmxlZCkgeworCQkJaW5mby5lbmFibGVkID0gcGktPmVuYWJsZWQ7CisJCQlyID0gb3ZsLT5zZXRfb3ZlcmxheV9pbmZvKG92bCwgJmluZm8pOworCQkJaWYgKHIpCisJCQkJZ290byB1bmRvOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvIGluZm87CisKKwkJb3ZsLT5nZXRfb3ZlcmxheV9pbmZvKG92bCwgJmluZm8pOworCisJCWluZm8uZW5hYmxlZCA9IHBpLT5lbmFibGVkOworCQlpbmZvLnBvc194ID0gcGktPnBvc194OworCQlpbmZvLnBvc195ID0gcGktPnBvc195OworCQlpbmZvLm91dF93aWR0aCA9IHBpLT5vdXRfd2lkdGg7CisJCWluZm8ub3V0X2hlaWdodCA9IHBpLT5vdXRfaGVpZ2h0OworCisJCXIgPSBvdmwtPnNldF9vdmVybGF5X2luZm8ob3ZsLCAmaW5mbyk7CisJCWlmIChyKQorCQkJZ290byB1bmRvOwogCX0KIAotb3V0OgotCWlmIChyKQotCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJzZXR1cF9wbGFuZSBmYWlsZWRcbiIpOworCWlmIChvdmwtPm1hbmFnZXIpCisJCW92bC0+bWFuYWdlci0+YXBwbHkob3ZsLT5tYW5hZ2VyKTsKKworCS8qIFJlbGVhc2UgdGhlIGxvY2tzIGluIGEgc3BlY2lmaWMgb3JkZXIgdG8ga2VlcCBsb2NrZGVwIGhhcHB5ICovCisJaWYgKG9sZF9yZy0+aWQgPiBuZXdfcmctPmlkKSB7CisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvbGRfcmcpOworCQlvbWFwZmJfcHV0X21lbV9yZWdpb24obmV3X3JnKTsKKwl9IGVsc2UgaWYgKG5ld19yZy0+aWQgPiBvbGRfcmctPmlkKSB7CisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihuZXdfcmcpOworCQlvbWFwZmJfcHV0X21lbV9yZWdpb24ob2xkX3JnKTsKKwl9IGVsc2UKKwkJb21hcGZiX3B1dF9tZW1fcmVnaW9uKG9sZF9yZyk7CisKKwlyZXR1cm4gMDsKKworIHVuZG86CisJaWYgKG9sZF9yZyAhPSBuZXdfcmcpIHsKKwkJb2ZiaS0+cmVnaW9uID0gb2xkX3JnOworCQlzZXRfZmJfZml4KGZiaSk7CisJfQorCisJb3ZsLT5zZXRfb3ZlcmxheV9pbmZvKG92bCwgJm9sZF9pbmZvKTsKKyBwdXRfbWVtOgorCS8qIFJlbGVhc2UgdGhlIGxvY2tzIGluIGEgc3BlY2lmaWMgb3JkZXIgdG8ga2VlcCBsb2NrZGVwIGhhcHB5ICovCisJaWYgKG9sZF9yZy0+aWQgPiBuZXdfcmctPmlkKSB7CisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvbGRfcmcpOworCQlvbWFwZmJfcHV0X21lbV9yZWdpb24obmV3X3JnKTsKKwl9IGVsc2UgaWYgKG5ld19yZy0+aWQgPiBvbGRfcmctPmlkKSB7CisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihuZXdfcmcpOworCQlvbWFwZmJfcHV0X21lbV9yZWdpb24ob2xkX3JnKTsKKwl9IGVsc2UKKwkJb21hcGZiX3B1dF9tZW1fcmVnaW9uKG9sZF9yZyk7Cisgb3V0OgorCWRldl9lcnIoZmJkZXYtPmRldiwgInNldHVwX3BsYW5lIGZhaWxlZFxuIik7CisKIAlyZXR1cm4gcjsKIH0KIApAQCAtOTIsOCArMTg3LDggQEAKIAlpZiAob2ZiaS0+bnVtX292ZXJsYXlzICE9IDEpIHsKIAkJbWVtc2V0KHBpLCAwLCBzaXplb2YoKnBpKSk7CiAJfSBlbHNlIHsKLQkJc3RydWN0IG9tYXBfb3ZlcmxheV9pbmZvICpvdmxpOwogCQlzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvdmw7CisJCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyAqb3ZsaTsKIAogCQlvdmwgPSBvZmJpLT5vdmVybGF5c1swXTsKIAkJb3ZsaSA9ICZvdmwtPmluZm87CkBAIC0xMDMsNiArMTk4LDcgQEAKIAkJcGktPmVuYWJsZWQgPSBvdmxpLT5lbmFibGVkOwogCQlwaS0+Y2hhbm5lbF9vdXQgPSAwOyAvKiB4eHggKi8KIAkJcGktPm1pcnJvciA9IDA7CisJCXBpLT5tZW1faWR4ID0gZ2V0X21lbV9pZHgob2ZiaSk7CiAJCXBpLT5vdXRfd2lkdGggPSBvdmxpLT5vdXRfd2lkdGg7CiAJCXBpLT5vdXRfaGVpZ2h0ID0gb3ZsaS0+b3V0X2hlaWdodDsKIAl9CkBAIC0xMTUsNyArMjExLDcgQEAKIAlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAlzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2ID0gb2ZiaS0+ZmJkZXY7CiAJc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiAqcmc7Ci0JaW50IHIsIGk7CisJaW50IHIgPSAwLCBpOwogCXNpemVfdCBzaXplOwogCiAJaWYgKG1pLT50eXBlID4gT01BUEZCX01FTVRZUEVfTUFYKQpAQCAtMTIzLDIyICsyMTksNDQgQEAKIAogCXNpemUgPSBQQUdFX0FMSUdOKG1pLT5zaXplKTsKIAotCXJnID0gJm9mYmktPnJlZ2lvbjsKKwlyZyA9IG9mYmktPnJlZ2lvbjsKIAotCWZvciAoaSA9IDA7IGkgPCBvZmJpLT5udW1fb3ZlcmxheXM7IGkrKykgewotCQlpZiAob2ZiaS0+b3ZlcmxheXNbaV0tPmluZm8uZW5hYmxlZCkKLQkJCXJldHVybiAtRUJVU1k7CisJZG93bl93cml0ZV9uZXN0ZWQoJnJnLT5sb2NrLCByZy0+aWQpOworCWF0b21pY19pbmMoJnJnLT5sb2NrX2NvdW50KTsKKworCWlmIChhdG9taWNfcmVhZCgmcmctPm1hcF9jb3VudCkpIHsKKwkJciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fZmJzOyBpKyspIHsKKwkJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpMiA9IEZCMk9GQihmYmRldi0+ZmJzW2ldKTsKKwkJaW50IGo7CisKKwkJaWYgKG9mYmkyLT5yZWdpb24gIT0gcmcpCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgb2ZiaTItPm51bV9vdmVybGF5czsgaisrKSB7CisJCQlpZiAob2ZiaTItPm92ZXJsYXlzW2pdLT5pbmZvLmVuYWJsZWQpIHsKKwkJCQlyID0gLUVCVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CiAJfQogCiAJaWYgKHJnLT5zaXplICE9IHNpemUgfHwgcmctPnR5cGUgIT0gbWktPnR5cGUpIHsKIAkJciA9IG9tYXBmYl9yZWFsbG9jX2ZibWVtKGZiaSwgc2l6ZSwgbWktPnR5cGUpOwogCQlpZiAocikgewogCQkJZGV2X2VycihmYmRldi0+ZGV2LCAicmVhbGxvYyBmYm1lbSBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIHI7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXJldHVybiAwOworIG91dDoKKwlhdG9taWNfZGVjKCZyZy0+bG9ja19jb3VudCk7CisJdXBfd3JpdGUoJnJnLT5sb2NrKTsKKworCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IG9tYXBmYl9xdWVyeV9tZW0oc3RydWN0IGZiX2luZm8gKmZiaSwgc3RydWN0IG9tYXBmYl9tZW1faW5mbyAqbWkpCkBAIC0xNDYsMTIgKzI2NCwxNCBAQAogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOwogCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnOwogCi0JcmcgPSAmb2ZiaS0+cmVnaW9uOworCXJnID0gb21hcGZiX2dldF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CiAJbWVtc2V0KG1pLCAwLCBzaXplb2YoKm1pKSk7CiAKIAltaS0+c2l6ZSA9IHJnLT5zaXplOwogCW1pLT50eXBlID0gcmctPnR5cGU7CiAKKwlvbWFwZmJfcHV0X21lbV9yZWdpb24ocmcpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5MCw2ICs2MTAsNyBAQAogCQlzdHJ1Y3Qgb21hcGZiX3ZyYW1faW5mbwkJdnJhbV9pbmZvOwogCQlzdHJ1Y3Qgb21hcGZiX3RlYXJzeW5jX2luZm8JdGVhcnN5bmNfaW5mbzsKIAkJc3RydWN0IG9tYXBmYl9kaXNwbGF5X2luZm8JZGlzcGxheV9pbmZvOworCQl1MzIJCQkJY3J0OwogCX0gcDsKIAogCWludCByID0gMDsKQEAgLTY0OCw2ICs3NjksMTcgQEAKIAkJCXIgPSAtRUZBVUxUOwogCQlicmVhazsKIAorCWNhc2UgRkJJT19XQUlURk9SVlNZTkM6CisJCWlmIChnZXRfdXNlcihwLmNydCwgKF9fdTMyIF9fdXNlciAqKWFyZykpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHAuY3J0ICE9IDApIHsKKwkJCXIgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKwkJLyogRkFMTFRIUk9VR0ggKi8KKwogCWNhc2UgT01BUEZCX1dBSVRGT1JWU1lOQzoKIAkJREJHKCJpb2N0bCBXQUlURk9SVlNZTkNcbiIpOwogCQlpZiAoIWRpc3BsYXkpIHsKQEAgLTczOCw3ICs4NzAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIWRpc3BsYXktPmRyaXZlci0+ZW5hYmxlX3RlKSB7CisJCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+ZHJpdmVyLT5lbmFibGVfdGUpIHsKIAkJCXIgPSAtRU5PREVWOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jCmluZGV4IDRiNDUwNmQuLjA0MDM0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBvbWFwZmJfZ2V0X3ZyZmJfb2Zmc2V0KGNvbnN0IHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSwgaW50IHJvdCkKIHsKLQljb25zdCBzdHJ1Y3QgdnJmYiAqdnJmYiA9ICZvZmJpLT5yZWdpb24udnJmYjsKKwljb25zdCBzdHJ1Y3QgdnJmYiAqdnJmYiA9ICZvZmJpLT5yZWdpb24tPnZyZmI7CiAJdW5zaWduZWQgb2Zmc2V0OwogCiAJc3dpdGNoIChyb3QpIHsKQEAgLTE4NSwyNyArMTg1LDI3IEBACiBzdGF0aWMgdTMyIG9tYXBmYl9nZXRfcmVnaW9uX3JvdF9wYWRkcihjb25zdCBzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmksIGludCByb3QpCiB7CiAJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpIHsKLQkJcmV0dXJuIG9mYmktPnJlZ2lvbi52cmZiLnBhZGRyW3JvdF0KKwkJcmV0dXJuIG9mYmktPnJlZ2lvbi0+dnJmYi5wYWRkcltyb3RdCiAJCQkrIG9tYXBmYl9nZXRfdnJmYl9vZmZzZXQob2ZiaSwgcm90KTsKIAl9IGVsc2UgewotCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnBhZGRyOworCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLT5wYWRkcjsKIAl9CiB9CiAKIHN0YXRpYyB1MzIgb21hcGZiX2dldF9yZWdpb25fcGFkZHIoY29uc3Qgc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpKQogewogCWlmIChvZmJpLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9WUkZCKQotCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnZyZmIucGFkZHJbMF07CisJCXJldHVybiBvZmJpLT5yZWdpb24tPnZyZmIucGFkZHJbMF07CiAJZWxzZQotCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnBhZGRyOworCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLT5wYWRkcjsKIH0KIAogc3RhdGljIHZvaWQgX19pb21lbSAqb21hcGZiX2dldF9yZWdpb25fdmFkZHIoY29uc3Qgc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpKQogewogCWlmIChvZmJpLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9WUkZCKQotCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnZyZmIudmFkZHJbMF07CisJCXJldHVybiBvZmJpLT5yZWdpb24tPnZyZmIudmFkZHJbMF07CiAJZWxzZQotCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLnZhZGRyOworCQlyZXR1cm4gb2ZiaS0+cmVnaW9uLT52YWRkcjsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwZmJfY29sb3Jtb2RlIG9tYXBmYl9jb2xvcm1vZGVzW10gPSB7CkBAIC00NTAsNyArNDUwLDcgQEAKIHN0YXRpYyBpbnQgY2hlY2tfZmJfc2l6ZShjb25zdCBzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmksCiAJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQogewotCXVuc2lnbmVkIGxvbmcgbWF4X2ZyYW1lX3NpemUgPSBvZmJpLT5yZWdpb24uc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9mcmFtZV9zaXplID0gb2ZiaS0+cmVnaW9uLT5zaXplOwogCWludCBieXRlc3BwID0gdmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzOwogCXVuc2lnbmVkIGxvbmcgbGluZV9zaXplID0gdmFyLT54cmVzX3ZpcnR1YWwgKiBieXRlc3BwOwogCkBAIC00OTcsNyArNDk3LDcgQEAKIHN0YXRpYyBpbnQgc2V0dXBfdnJmYl9yb3RhdGlvbihzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOwotCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnID0gJm9mYmktPnJlZ2lvbjsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZyA9IG9mYmktPnJlZ2lvbjsKIAlzdHJ1Y3QgdnJmYiAqdnJmYiA9ICZyZy0+dnJmYjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZmYmktPnZhcjsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKQEAgLTU1OCw5ICs1NTgsOSBAQAogCQlyZXR1cm4gcjsKIAogCS8qIHVzZWQgYnkgb3Blbi93cml0ZSBpbiBmYm1lbS5jICovCi0JZmJpLT5zY3JlZW5fYmFzZSA9IG9mYmktPnJlZ2lvbi52cmZiLnZhZGRyWzBdOworCWZiaS0+c2NyZWVuX2Jhc2UgPSBvZmJpLT5yZWdpb24tPnZyZmIudmFkZHJbMF07CiAKLQlmaXgtPnNtZW1fc3RhcnQgPSBvZmJpLT5yZWdpb24udnJmYi5wYWRkclswXTsKKwlmaXgtPnNtZW1fc3RhcnQgPSBvZmJpLT5yZWdpb24tPnZyZmIucGFkZHJbMF07CiAKIAlzd2l0Y2ggKHZhci0+bm9uc3RkKSB7CiAJY2FzZSBPTUFQRkJfQ09MT1JfWVVWNDIyOgpAQCAtNTk5LDcgKzU5OSw3IEBACiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CiAJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiaSk7Ci0Jc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiAqcmcgPSAmb2ZiaS0+cmVnaW9uOworCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnID0gb2ZiaS0+cmVnaW9uOwogCiAJREJHKCJzZXRfZmJfZml4XG4iKTsKIApAQCAtNjY4LDggKzY2OCw3IEBACiAKIAlEQkcoImNoZWNrX2ZiX3ZhciAlZFxuIiwgb2ZiaS0+aWQpOwogCi0JaWYgKG9mYmktPnJlZ2lvbi5zaXplID09IDApCi0JCXJldHVybiAwOworCVdBUk5fT04oIWF0b21pY19yZWFkKCZvZmJpLT5yZWdpb24tPmxvY2tfY291bnQpKTsKIAogCXIgPSBmYl9tb2RlX3RvX2Rzc19tb2RlKHZhciwgJm1vZGUpOwogCWlmIChyKSB7CkBAIC02ODQsMTMgKzY4MywxNCBAQAogCQl9CiAJfQogCi0JaWYgKHZhci0+cm90YXRlIDwgMCB8fCB2YXItPnJvdGF0ZSA+IDMpCisJaWYgKHZhci0+cm90YXRlID4gMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY2hlY2tfZmJfcmVzX2JvdW5kcyh2YXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjaGVja19mYl9zaXplKG9mYmksIHZhcikpCisJLyogV2hlbiBubyBtZW1vcnkgaXMgYWxsb2NhdGVkIGlnbm9yZSB0aGUgc2l6ZSBjaGVjayAqLworCWlmIChvZmJpLT5yZWdpb24tPnNpemUgIT0gMCAmJiBjaGVja19mYl9zaXplKG9mYmksIHZhcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZhci0+eHJlcyArIHZhci0+eG9mZnNldCA+IHZhci0+eHJlc192aXJ0dWFsKQpAQCAtODIyLDkgKzgyMiw0MyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG9tYXBmYl9jYWxjX2FkZHIoY29uc3Qgc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsCisJCQkgICAgIGludCByb3RhdGlvbiwgdTMyICpwYWRkciwgdm9pZCBfX2lvbWVtICoqdmFkZHIpCit7CisJdTMyIGRhdGFfc3RhcnRfcDsKKwl2b2lkIF9faW9tZW0gKmRhdGFfc3RhcnRfdjsKKwlpbnQgb2Zmc2V0OworCisJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpIHsKKwkJZGF0YV9zdGFydF9wID0gb21hcGZiX2dldF9yZWdpb25fcm90X3BhZGRyKG9mYmksIHJvdGF0aW9uKTsKKwkJZGF0YV9zdGFydF92ID0gTlVMTDsKKwl9IGVsc2UgeworCQlkYXRhX3N0YXJ0X3AgPSBvbWFwZmJfZ2V0X3JlZ2lvbl9wYWRkcihvZmJpKTsKKwkJZGF0YV9zdGFydF92ID0gb21hcGZiX2dldF9yZWdpb25fdmFkZHIob2ZiaSk7CisJfQorCisJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpCisJCW9mZnNldCA9IGNhbGNfcm90YXRpb25fb2Zmc2V0X3ZyZmIodmFyLCBmaXgsIHJvdGF0aW9uKTsKKwllbHNlCisJCW9mZnNldCA9IGNhbGNfcm90YXRpb25fb2Zmc2V0X2RtYSh2YXIsIGZpeCwgcm90YXRpb24pOworCisJZGF0YV9zdGFydF9wICs9IG9mZnNldDsKKwlkYXRhX3N0YXJ0X3YgKz0gb2Zmc2V0OworCisJaWYgKG9mZnNldCkKKwkJREJHKCJvZmZzZXQgJWQsICVkID0gJWRcbiIsCisJCSAgICB2YXItPnhvZmZzZXQsIHZhci0+eW9mZnNldCwgb2Zmc2V0KTsKKworCURCRygicGFkZHIgJXgsIHZhZGRyICVwXG4iLCBkYXRhX3N0YXJ0X3AsIGRhdGFfc3RhcnRfdik7CisKKwkqcGFkZHIgPSBkYXRhX3N0YXJ0X3A7CisJKnZhZGRyID0gZGF0YV9zdGFydF92OworfQogCiAvKiBzZXR1cCBvdmVybGF5IGFjY29yZGluZyB0byB0aGUgZmIgKi8KLXN0YXRpYyBpbnQgb21hcGZiX3NldHVwX292ZXJsYXkoc3RydWN0IGZiX2luZm8gKmZiaSwgc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsLAoraW50IG9tYXBmYl9zZXR1cF9vdmVybGF5KHN0cnVjdCBmYl9pbmZvICpmYmksIHN0cnVjdCBvbWFwX292ZXJsYXkgKm92bCwKIAkJdTE2IHBvc3gsIHUxNiBwb3N5LCB1MTYgb3V0dywgdTE2IG91dGgpCiB7CiAJaW50IHIgPSAwOwpAQCAtODMyLDkgKzg2Niw4IEBACiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CiAJZW51bSBvbWFwX2NvbG9yX21vZGUgbW9kZSA9IDA7Ci0JaW50IG9mZnNldDsKLQl1MzIgZGF0YV9zdGFydF9wOwotCXZvaWQgX19pb21lbSAqZGF0YV9zdGFydF92OworCXUzMiBkYXRhX3N0YXJ0X3AgPSAwOworCXZvaWQgX19pb21lbSAqZGF0YV9zdGFydF92ID0gTlVMTDsKIAlzdHJ1Y3Qgb21hcF9vdmVybGF5X2luZm8gaW5mbzsKIAlpbnQgeHJlcywgeXJlczsKIAlpbnQgc2NyZWVuX3dpZHRoOwpAQCAtODQyLDYgKzg3NSw4IEBACiAJaW50IHJvdGF0aW9uID0gdmFyLT5yb3RhdGU7CiAJaW50IGk7CiAKKwlXQVJOX09OKCFhdG9taWNfcmVhZCgmb2ZiaS0+cmVnaW9uLT5sb2NrX2NvdW50KSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgb2ZiaS0+bnVtX292ZXJsYXlzOyBpKyspIHsKIAkJaWYgKG92bCAhPSBvZmJpLT5vdmVybGF5c1tpXSkKIAkJCWNvbnRpbnVlOwpAQCAtODYxLDI4ICs4OTYsOSBAQAogCQl5cmVzID0gdmFyLT55cmVzOwogCX0KIAotCi0JaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpIHsKLQkJZGF0YV9zdGFydF9wID0gb21hcGZiX2dldF9yZWdpb25fcm90X3BhZGRyKG9mYmksIHJvdGF0aW9uKTsKLQkJZGF0YV9zdGFydF92ID0gTlVMTDsKLQl9IGVsc2UgewotCQlkYXRhX3N0YXJ0X3AgPSBvbWFwZmJfZ2V0X3JlZ2lvbl9wYWRkcihvZmJpKTsKLQkJZGF0YV9zdGFydF92ID0gb21hcGZiX2dldF9yZWdpb25fdmFkZHIob2ZiaSk7Ci0JfQotCi0JaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpCi0JCW9mZnNldCA9IGNhbGNfcm90YXRpb25fb2Zmc2V0X3ZyZmIodmFyLCBmaXgsIHJvdGF0aW9uKTsKLQllbHNlCi0JCW9mZnNldCA9IGNhbGNfcm90YXRpb25fb2Zmc2V0X2RtYSh2YXIsIGZpeCwgcm90YXRpb24pOwotCi0JZGF0YV9zdGFydF9wICs9IG9mZnNldDsKLQlkYXRhX3N0YXJ0X3YgKz0gb2Zmc2V0OwotCi0JaWYgKG9mZnNldCkKLQkJREJHKCJvZmZzZXQgJWQsICVkID0gJWRcbiIsCi0JCQkJdmFyLT54b2Zmc2V0LCB2YXItPnlvZmZzZXQsIG9mZnNldCk7Ci0KLQlEQkcoInBhZGRyICV4LCB2YWRkciAlcFxuIiwgZGF0YV9zdGFydF9wLCBkYXRhX3N0YXJ0X3YpOworCWlmIChvZmJpLT5yZWdpb24tPnNpemUpCisJCW9tYXBmYl9jYWxjX2FkZHIob2ZiaSwgdmFyLCBmaXgsIHJvdGF0aW9uLAorCQkJCSAmZGF0YV9zdGFydF9wLCAmZGF0YV9zdGFydF92KTsKIAogCXIgPSBmYl9tb2RlX3RvX2Rzc19tb2RlKHZhciwgJm1vZGUpOwogCWlmIChyKSB7CkBAIC05NTQsMTIgKzk3MCwxNCBAQAogCQlmaWxsX2ZiKGZiaSk7CiAjZW5kaWYKIAorCVdBUk5fT04oIWF0b21pY19yZWFkKCZvZmJpLT5yZWdpb24tPmxvY2tfY291bnQpKTsKKwogCWZvciAoaSA9IDA7IGkgPCBvZmJpLT5udW1fb3ZlcmxheXM7IGkrKykgewogCQlvdmwgPSBvZmJpLT5vdmVybGF5c1tpXTsKIAogCQlEQkcoImFwcGx5X2NoYW5nZXMsIGZiICVkLCBvdmwgJWRcbiIsIG9mYmktPmlkLCBvdmwtPmlkKTsKIAotCQlpZiAob2ZiaS0+cmVnaW9uLnNpemUgPT0gMCkgeworCQlpZiAob2ZiaS0+cmVnaW9uLT5zaXplID09IDApIHsKIAkJCS8qIHRoZSBmYiBpcyBub3QgYXZhaWxhYmxlLiBkaXNhYmxlIHRoZSBvdmVybGF5ICovCiAJCQlvbWFwZmJfb3ZlcmxheV9lbmFibGUob3ZsLCAwKTsKIAkJCWlmICghaW5pdCAmJiBvdmwtPm1hbmFnZXIpCkBAIC0xMDA3LDM2ICsxMDI1LDQ4IEBACiAgKiBETyBOT1QgTU9ESUZZIFBBUiAqLwogc3RhdGljIGludCBvbWFwZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogeworCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOwogCWludCByOwogCiAJREJHKCJjaGVja192YXIoJWQpXG4iLCBGQjJPRkIoZmJpKS0+aWQpOwogCisJb21hcGZiX2dldF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAlyID0gY2hlY2tfZmJfdmFyKGZiaSwgdmFyKTsKIAorCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJcmV0dXJuIHI7CiB9CiAKIC8qIHNldCB0aGUgdmlkZW8gbW9kZSBhY2NvcmRpbmcgdG8gaW5mby0+dmFyICovCiBzdGF0aWMgaW50IG9tYXBmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7CisJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiaSk7CiAJaW50IHI7CiAKIAlEQkcoInNldF9wYXIoJWQpXG4iLCBGQjJPRkIoZmJpKS0+aWQpOwogCisJb21hcGZiX2dldF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAlzZXRfZmJfZml4KGZiaSk7CiAKIAlyID0gc2V0dXBfdnJmYl9yb3RhdGlvbihmYmkpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBvdXQ7CiAKIAlyID0gb21hcGZiX2FwcGx5X2NoYW5nZXMoZmJpLCAwKTsKIAorIG91dDoKKwlvbWFwZmJfcHV0X21lbV9yZWdpb24ob2ZiaS0+cmVnaW9uKTsKKwogCXJldHVybiByOwogfQogCiBzdGF0aWMgaW50IG9tYXBmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAkJc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKKwlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gbmV3X3ZhcjsKIAlpbnQgcjsKIApAQCAtMTA1MiwyMyArMTA4MiwzMSBAQAogCiAJZmJpLT52YXIgPSBuZXdfdmFyOwogCisJb21hcGZiX2dldF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAlyID0gb21hcGZiX2FwcGx5X2NoYW5nZXMoZmJpLCAwKTsKIAorCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIG1tYXBfdXNlcl9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IChzdHJ1Y3Qgb21hcGZiX2luZm8gKil2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCi0JYXRvbWljX2luYygmb2ZiaS0+bWFwX2NvdW50KTsKKwlvbWFwZmJfZ2V0X21lbV9yZWdpb24ocmcpOworCWF0b21pY19pbmMoJnJnLT5tYXBfY291bnQpOworCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihyZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1tYXBfdXNlcl9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSAoc3RydWN0IG9tYXBmYl9pbmZvICopdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiAqcmcgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAotCWF0b21pY19kZWMoJm9mYmktPm1hcF9jb3VudCk7CisJb21hcGZiX2dldF9tZW1fcmVnaW9uKHJnKTsKKwlhdG9taWNfZGVjKCZyZy0+bWFwX2NvdW50KTsKKwlvbWFwZmJfcHV0X21lbV9yZWdpb24ocmcpOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CkBAIC0xMDgwLDkgKzExMTgsMTEgQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCA9ICZmYmktPmZpeDsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZzsKIAl1bnNpZ25lZCBsb25nIG9mZjsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCXUzMiBsZW47CisJaW50IHIgPSAtRUlOVkFMOwogCiAJaWYgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTEwOTAsMTIgKzExMzAsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJb2ZmID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCisJcmcgPSBvbWFwZmJfZ2V0X21lbV9yZWdpb24ob2ZiaS0+cmVnaW9uKTsKKwogCXN0YXJ0ID0gb21hcGZiX2dldF9yZWdpb25fcGFkZHIob2ZiaSk7CiAJbGVuID0gZml4LT5zbWVtX2xlbjsKIAlpZiAob2ZmID49IGxlbikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CiAJaWYgKCh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQgKyBvZmYpID4gbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKIAogCW9mZiArPSBzdGFydDsKIApAQCAtMTEwNSwxMyArMTE0NywyNSBAQAogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRDsKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLT52bV9wYWdlX3Byb3QpOwogCXZtYS0+dm1fb3BzID0gJm1tYXBfdXNlcl9vcHM7Ci0Jdm1hLT52bV9wcml2YXRlX2RhdGEgPSBvZmJpOworCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gcmc7CiAJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIG9mZiA+PiBQQUdFX1NISUZULAotCQkJICAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGFnZV9wcm90KSkKLQkJcmV0dXJuIC1FQUdBSU47CisJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAorCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkgeworCQlyID0gLUVBR0FJTjsKKwkJZ290byBlcnJvcjsKKwl9CisKIAkvKiB2bV9vcHMub3BlbiB3b24ndCBiZSBjYWxsZWQgZm9yIG1tYXAgaXRzZWxmLiAqLwotCWF0b21pY19pbmMoJm9mYmktPm1hcF9jb3VudCk7CisJYXRvbWljX2luYygmcmctPm1hcF9jb3VudCk7CisKKwlvbWFwZmJfcHV0X21lbV9yZWdpb24ocmcpOworCiAJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlvbWFwZmJfcHV0X21lbV9yZWdpb24ob2ZiaS0+cmVnaW9uKTsKKworCXJldHVybiByOwogfQogCiAvKiBTdG9yZSBhIHNpbmdsZSBjb2xvciBwYWxldHRlIGVudHJ5IGludG8gYSBwc2V1ZG8gcGFsZXR0ZSBvciB0aGUgaGFyZHdhcmUKQEAgLTExNTQsMTEgKzEyMDgsNiBAQAogCQlpZiAociAhPSAwKQogCQkJYnJlYWs7CiAKLQkJaWYgKHJlZ25vIDwgMCkgewotCQkJciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCiAJCWlmIChyZWdubyA8IDE2KSB7CiAJCQl1MTYgcGFsOwogCQkJcGFsID0gKChyZWQgPj4gKDE2IC0gdmFyLT5yZWQubGVuZ3RoKSkgPDwKQEAgLTEyMTcsNiArMTI2Niw5IEBACiAJaW50IGRvX3VwZGF0ZSA9IDA7CiAJaW50IHIgPSAwOwogCisJaWYgKCFkaXNwbGF5KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW9tYXBmYl9sb2NrKGZiZGV2KTsKIAogCXN3aXRjaCAoYmxhbmspIHsKQEAgLTEzMDAsNyArMTM1Miw5IEBACiAJc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiA9IG9mYmktPmZiZGV2OwogCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnOwogCi0JcmcgPSAmb2ZiaS0+cmVnaW9uOworCXJnID0gb2ZiaS0+cmVnaW9uOworCisJV0FSTl9PTihhdG9taWNfcmVhZCgmcmctPm1hcF9jb3VudCkpOwogCiAJaWYgKHJnLT5wYWRkcikKIAkJaWYgKG9tYXBfdnJhbV9mcmVlKHJnLT5wYWRkciwgcmctPnNpemUpKQpAQCAtMTM1NSw4ICsxNDA5LDE1IEBACiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKIAlpbnQgcjsKIAotCXJnID0gJm9mYmktPnJlZ2lvbjsKLQltZW1zZXQocmcsIDAsIHNpemVvZigqcmcpKTsKKwlyZyA9IG9mYmktPnJlZ2lvbjsKKworCXJnLT5wYWRkciA9IDA7CisJcmctPnZhZGRyID0gTlVMTDsKKwltZW1zZXQoJnJnLT52cmZiLCAwLCBzaXplb2YgcmctPnZyZmIpOworCXJnLT5zaXplID0gMDsKKwlyZy0+dHlwZSA9IDA7CisJcmctPmFsbG9jID0gZmFsc2U7CisJcmctPm1hcCA9IGZhbHNlOwogCiAJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CiAKQEAgLTE2MDksNyArMTY3MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fZmJzOyBpKyspIHsKIAkJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiZGV2LT5mYnNbaV0pOwogCQlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZzsKLQkJcmcgPSAmb2ZiaS0+cmVnaW9uOworCQlyZyA9IG9mYmktPnJlZ2lvbjsKIAogCQlEQkcoInJlZ2lvbiVkIHBoeXMgJTA4eCB2aXJ0ICVwIHNpemU9JWx1XG4iLAogCQkJCWksCkBAIC0xNjI2LDcgKzE2ODcsNyBAQAogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOwogCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYgPSBvZmJpLT5mYmRldjsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5ID0gZmIyZGlzcGxheShmYmkpOwotCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnID0gJm9mYmktPnJlZ2lvbjsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZyA9IG9mYmktPnJlZ2lvbjsKIAl1bnNpZ25lZCBsb25nIG9sZF9zaXplID0gcmctPnNpemU7CiAJdW5zaWduZWQgbG9uZyBvbGRfcGFkZHIgPSByZy0+cGFkZHI7CiAJaW50IG9sZF90eXBlID0gcmctPnR5cGU7CkBAIC0xNzA5LDcgKzE3NzAsNyBAQAogCWZiaS0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUOwogCWZiaS0+cHNldWRvX3BhbGV0dGUgPSBmYmRldi0+cHNldWRvX3BhbGV0dGU7CiAKLQlpZiAob2ZiaS0+cmVnaW9uLnNpemUgPT0gMCkgeworCWlmIChvZmJpLT5yZWdpb24tPnNpemUgPT0gMCkgewogCQljbGVhcl9mYl9pbmZvKGZiaSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTE4NzEsNiArMTkzMiwxMCBAQAogCQlvZmJpLT5mYmRldiA9IGZiZGV2OwogCQlvZmJpLT5pZCA9IGk7CiAKKwkJb2ZiaS0+cmVnaW9uID0gJmZiZGV2LT5yZWdpb25zW2ldOworCQlvZmJpLT5yZWdpb24tPmlkID0gaTsKKwkJaW5pdF9yd3NlbSgmb2ZiaS0+cmVnaW9uLT5sb2NrKTsKKwogCQkvKiBhc3NpZ24gdGhlc2UgZWFybHksIHNvIHRoYXQgZmIgYWxsb2MgY2FuIHVzZSB0aGVtICovCiAJCW9mYmktPnJvdGF0aW9uX3R5cGUgPSBkZWZfdnJmYiA/IE9NQVBfRFNTX1JPVF9WUkZCIDoKIAkJCU9NQVBfRFNTX1JPVF9ETUE7CkBAIC0xOTAwLDcgKzE5NjUsMTMgQEAKIAogCS8qIHNldHVwIGZiX2luZm9zICovCiAJZm9yIChpID0gMDsgaSA8IGZiZGV2LT5udW1fZmJzOyBpKyspIHsKLQkJciA9IG9tYXBmYl9mYl9pbml0KGZiZGV2LCBmYmRldi0+ZmJzW2ldKTsKKwkJc3RydWN0IGZiX2luZm8gKmZiaSA9IGZiZGV2LT5mYnNbaV07CisJCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCQlyID0gb21hcGZiX2ZiX2luaXQoZmJkZXYsIGZiaSk7CisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJCWlmIChyKSB7CiAJCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgZmJfaW5mb1xuIik7CiAJCQlyZXR1cm4gcjsKQEAgLTE5MjEsMjAgKzE5OTIsMTkgQEAKIAlEQkcoImZyYW1lYnVmZmVycyByZWdpc3RlcmVkXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBmYmRldi0+bnVtX2ZiczsgaSsrKSB7Ci0JCXIgPSBvbWFwZmJfYXBwbHlfY2hhbmdlcyhmYmRldi0+ZmJzW2ldLCAxKTsKKwkJc3RydWN0IGZiX2luZm8gKmZiaSA9IGZiZGV2LT5mYnNbaV07CisJCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCQlyID0gb21hcGZiX2FwcGx5X2NoYW5nZXMoZmJpLCAxKTsKKwkJb21hcGZiX3B1dF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAkJaWYgKHIpIHsKIAkJCWRldl9lcnIoZmJkZXYtPmRldiwgImZhaWxlZCB0byBjaGFuZ2UgbW9kZVxuIik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KIAotCURCRygiY3JlYXRlIHN5c2ZzIGZvciBmYnNcbiIpOwotCXIgPSBvbWFwZmJfY3JlYXRlX3N5c2ZzKGZiZGV2KTsKLQlpZiAocikgewotCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJpZXNcbiIpOwotCQlyZXR1cm4gcjsKLQl9Ci0KIAkvKiBFbmFibGUgZmIwICovCiAJaWYgKGZiZGV2LT5udW1fZmJzID4gMCkgewogCQlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJkZXYtPmZic1swXSk7CkBAIC0xOTY4LDExICsyMDM4LDExIEBACiAjaWZkZWYgQ09ORklHX09NQVAyX0RTU19WRU5DCiAJaWYgKHN0cmNtcChtb2RlX3N0ciwgInBhbCIpID09IDApIHsKIAkJKnRpbWluZ3MgPSBvbWFwX2Rzc19wYWxfdGltaW5nczsKLQkJKmJwcCA9IDA7CisJCSpicHAgPSAyNDsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChzdHJjbXAobW9kZV9zdHIsICJudHNjIikgPT0gMCkgewogCQkqdGltaW5ncyA9IG9tYXBfZHNzX250c2NfdGltaW5nczsKLQkJKmJwcCA9IDA7CisJCSpicHAgPSAyNDsKIAkJcmV0dXJuIDA7CiAJfQogI2VuZGlmCkBAIC0yMjIwLDYgKzIyOTAsMTMgQEAKIAkJfQogCX0KIAorCURCRygiY3JlYXRlIHN5c2ZzIGZvciBmYnNcbiIpOworCXIgPSBvbWFwZmJfY3JlYXRlX3N5c2ZzKGZiZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKGZiZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJpZXNcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCiAJcmV0dXJuIDA7CiAKIGNsZWFudXA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItc3lzZnMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1zeXNmcy5jCmluZGV4IDUxNzkyMTkuLjZmOWM3MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1zeXNmcy5jCkBAIC00OSw2ICs0OSw3IEBACiB7CiAJc3RydWN0IGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCXN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnOwogCWVudW0gb21hcF9kc3Nfcm90YXRpb25fdHlwZSByb3RfdHlwZTsKIAlpbnQgcjsKIApAQCAtNjQsOSArNjUsMTEgQEAKIAlpZiAocm90X3R5cGUgPT0gb2ZiaS0+cm90YXRpb25fdHlwZSkKIAkJZ290byBvdXQ7CiAKLQlpZiAob2ZiaS0+cmVnaW9uLnNpemUpIHsKKwlyZyA9IG9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCisJaWYgKHJnLT5zaXplKSB7CiAJCXIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OworCQlnb3RvIHB1dF9yZWdpb247CiAJfQogCiAJb2ZiaS0+cm90YXRpb25fdHlwZSA9IHJvdF90eXBlOwpAQCAtNzUsNiArNzgsOCBAQAogCSAqIFNpbmNlIHRoZSBWUkFNIGZvciB0aGlzIEZCIGlzIG5vdCBhbGxvY2F0ZWQgYXQgdGhlIG1vbWVudCB3ZSBkb24ndAogCSAqIG5lZWQgdG8gZG8gYW55IGZ1cnRoZXIgcGFyYW1ldGVyIGNoZWNraW5nIGF0IHRoaXMgcG9pbnQuCiAJICovCitwdXRfcmVnaW9uOgorCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihyZyk7CiBvdXQ6CiAJdW5sb2NrX2ZiX2luZm8oZmJpKTsKIApAQCAtOTcsNyArMTAyLDcgQEAKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiaSk7Ci0JYm9vbCBtaXJyb3I7CisJdW5zaWduZWQgbG9uZyBtaXJyb3I7CiAJaW50IHI7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIG5ld192YXI7CiAKQEAgLTExMSw2ICsxMTYsOCBAQAogCiAJb2ZiaS0+bWlycm9yID0gbWlycm9yOwogCisJb21hcGZiX2dldF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAltZW1jcHkoJm5ld192YXIsICZmYmktPnZhciwgc2l6ZW9mKG5ld192YXIpKTsKIAlyID0gY2hlY2tfZmJfdmFyKGZiaSwgJm5ld192YXIpOwogCWlmIChyKQpAQCAtMTI1LDYgKzEzMiw4IEBACiAKIAlyID0gY291bnQ7CiBvdXQ6CisJb21hcGZiX3B1dF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAl1bmxvY2tfZmJfaW5mbyhmYmkpOwogCiAJcmV0dXJuIHI7CkBAIC0yNjMsMTEgKzI3MiwxNSBAQAogCiAJCURCRygiZGV0YWNoaW5nICVkXG4iLCBvZmJpLT5vdmVybGF5c1tpXS0+aWQpOwogCisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJCW9tYXBmYl9vdmVybGF5X2VuYWJsZShvdmwsIDApOwogCiAJCWlmIChvdmwtPm1hbmFnZXIpCiAJCQlvdmwtPm1hbmFnZXItPmFwcGx5KG92bC0+bWFuYWdlcik7CiAKKwkJb21hcGZiX3B1dF9tZW1fcmVnaW9uKG9mYmktPnJlZ2lvbik7CisKIAkJZm9yICh0ID0gaSArIDE7IHQgPCBvZmJpLT5udW1fb3ZlcmxheXM7IHQrKykgewogCQkJb2ZiaS0+cm90YXRpb25bdC0xXSA9IG9mYmktPnJvdGF0aW9uW3RdOwogCQkJb2ZiaS0+b3ZlcmxheXNbdC0xXSA9IG9mYmktPm92ZXJsYXlzW3RdOwpAQCAtMzAwLDcgKzMxMywxMiBAQAogCX0KIAogCWlmIChhZGRlZCkgeworCQlvbWFwZmJfZ2V0X21lbV9yZWdpb24ob2ZiaS0+cmVnaW9uKTsKKwogCQlyID0gb21hcGZiX2FwcGx5X2NoYW5nZXMoZmJpLCAwKTsKKworCQlvbWFwZmJfcHV0X21lbV9yZWdpb24ob2ZiaS0+cmVnaW9uKTsKKwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTM4OCw3ICs0MDYsMTIgQEAKIAkJZm9yIChpID0gMDsgaSA8IG51bV9vdmxzOyArK2kpCiAJCQlvZmJpLT5yb3RhdGlvbltpXSA9IHJvdGF0aW9uW2ldOwogCisJCW9tYXBmYl9nZXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJCXIgPSBvbWFwZmJfYXBwbHlfY2hhbmdlcyhmYmksIDApOworCisJCW9tYXBmYl9wdXRfbWVtX3JlZ2lvbihvZmJpLT5yZWdpb24pOworCiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAKQEAgLTQwOCw3ICs0MzEsNyBAQAogCXN0cnVjdCBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsdVxuIiwgb2ZiaS0+cmVnaW9uLnNpemUpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsdVxuIiwgb2ZiaS0+cmVnaW9uLT5zaXplKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNDE2LDYgKzQzOSw4IEBACiB7CiAJc3RydWN0IGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSA9IEZCMk9GQihmYmkpOworCXN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYgPSBvZmJpLT5mYmRldjsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZzsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJaW50IHI7CiAJaW50IGk7CkBAIC00MjUsMTUgKzQ1MCwzMyBAQAogCWlmICghbG9ja19mYl9pbmZvKGZiaSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZm9yIChpID0gMDsgaSA8IG9mYmktPm51bV9vdmVybGF5czsgaSsrKSB7Ci0JCWlmIChvZmJpLT5vdmVybGF5c1tpXS0+aW5mby5lbmFibGVkKSB7Ci0JCQlyID0gLUVCVVNZOwotCQkJZ290byBvdXQ7CisJcmcgPSBvZmJpLT5yZWdpb247CisKKwlkb3duX3dyaXRlX25lc3RlZCgmcmctPmxvY2ssIHJnLT5pZCk7CisJYXRvbWljX2luYygmcmctPmxvY2tfY291bnQpOworCisJaWYgKGF0b21pY19yZWFkKCZyZy0+bWFwX2NvdW50KSkgeworCQlyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZmJkZXYtPm51bV9mYnM7IGkrKykgeworCQlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkyID0gRkIyT0ZCKGZiZGV2LT5mYnNbaV0pOworCQlpbnQgajsKKworCQlpZiAob2ZiaTItPnJlZ2lvbiAhPSByZykKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBvZmJpMi0+bnVtX292ZXJsYXlzOyBqKyspIHsKKwkJCWlmIChvZmJpMi0+b3ZlcmxheXNbal0tPmluZm8uZW5hYmxlZCkgeworCQkJCXIgPSAtRUJVU1k7CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KIAl9CiAKLQlpZiAoc2l6ZSAhPSBvZmJpLT5yZWdpb24uc2l6ZSkgewotCQlyID0gb21hcGZiX3JlYWxsb2NfZmJtZW0oZmJpLCBzaXplLCBvZmJpLT5yZWdpb24udHlwZSk7CisJaWYgKHNpemUgIT0gb2ZiaS0+cmVnaW9uLT5zaXplKSB7CisJCXIgPSBvbWFwZmJfcmVhbGxvY19mYm1lbShmYmksIHNpemUsIG9mYmktPnJlZ2lvbi0+dHlwZSk7CiAJCWlmIChyKSB7CiAJCQlkZXZfZXJyKGRldiwgInJlYWxsb2MgZmJtZW0gZmFpbGVkXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtNDQyLDYgKzQ4NSw5IEBACiAKIAlyID0gY291bnQ7CiBvdXQ6CisJYXRvbWljX2RlYygmcmctPmxvY2tfY291bnQpOworCXVwX3dyaXRlKCZyZy0+bG9jayk7CisKIAl1bmxvY2tfZmJfaW5mbyhmYmkpOwogCiAJcmV0dXJuIHI7CkBAIC00NTMsNyArNDk5LDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiaSk7CiAKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMHhcbiIsIG9mYmktPnJlZ2lvbi5wYWRkcik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJTB4XG4iLCBvZmJpLT5yZWdpb24tPnBhZGRyKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd192aXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTQ2Miw3ICs1MDgsNyBAQAogCXN0cnVjdCBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkgPSBGQjJPRkIoZmJpKTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwXG4iLCBvZmJpLT5yZWdpb24udmFkZHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwXG4iLCBvZmJpLT5yZWdpb24tPnZhZGRyKTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIG9tYXBmYl9hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLmggYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaAppbmRleCBjZDU0ZmRiLi4xMzA1ZmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaAorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaApAQCAtMjcsNiArMjcsOCBAQAogI2RlZmluZSBERUJVRwogI2VuZGlmCiAKKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorCiAjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKICNpZmRlZiBERUJVRwpAQCAtNDQsNiArNDYsNyBAQAogI2RlZmluZSBPTUFQRkJfTUFYX09WTF9QRVJfRkIgMwogCiBzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uIHsKKwlpbnQgICAgICAgICAgICAgaWQ7CiAJdTMyCQlwYWRkcjsKIAl2b2lkIF9faW9tZW0JKnZhZGRyOwogCXN0cnVjdCB2cmZiCXZyZmI7CkBAIC01MSwxMyArNTQsMTUgQEAKIAl1OAkJdHlwZTsJCS8qIE9NQVBGQl9QTEFORV9NRU1fKiAqLwogCWJvb2wJCWFsbG9jOwkJLyogYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgKi8KIAlib29sCQltYXA7CQkvKiBrZXJuZWwgbWFwcGVkIGJ5IHRoZSBkcml2ZXIgKi8KKwlhdG9taWNfdAltYXBfY291bnQ7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSBsb2NrOworCWF0b21pY190CWxvY2tfY291bnQ7CiB9OwogCiAvKiBhcHBlbmRlZCB0byBmYl9pbmZvICovCiBzdHJ1Y3Qgb21hcGZiX2luZm8gewogCWludCBpZDsKLQlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uIHJlZ2lvbjsKLQlhdG9taWNfdCBtYXBfY291bnQ7CisJc3RydWN0IG9tYXBmYjJfbWVtX3JlZ2lvbiAqcmVnaW9uOwogCWludCBudW1fb3ZlcmxheXM7CiAJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZlcmxheXNbT01BUEZCX01BWF9PVkxfUEVSX0ZCXTsKIAlzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2OwpAQCAtNzYsNiArODEsNyBAQAogCiAJdW5zaWduZWQgbnVtX2ZiczsKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJzWzEwXTsKKwlzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uIHJlZ2lvbnNbMTBdOwogCiAJdW5zaWduZWQgbnVtX2Rpc3BsYXlzOwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXlzWzEwXTsKQEAgLTExNyw2ICsxMjMsOSBAQAogaW50IGRzc19tb2RlX3RvX2ZiX21vZGUoZW51bSBvbWFwX2NvbG9yX21vZGUgZHNzbW9kZSwKIAkJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKTsKIAoraW50IG9tYXBmYl9zZXR1cF9vdmVybGF5KHN0cnVjdCBmYl9pbmZvICpmYmksIHN0cnVjdCBvbWFwX292ZXJsYXkgKm92bCwKKwkJdTE2IHBvc3gsIHUxNiBwb3N5LCB1MTYgb3V0dywgdTE2IG91dGgpOworCiAvKiBmaW5kIHRoZSBkaXNwbGF5IGNvbm5lY3RlZCB0byB0aGlzIGZiLCBpZiBhbnkgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZmIyZGlzcGxheShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewpAQCAtMTQ4LDggKzE1NywyNCBAQAogCXN0cnVjdCBvbWFwX292ZXJsYXlfaW5mbyBpbmZvOwogCiAJb3ZsLT5nZXRfb3ZlcmxheV9pbmZvKG92bCwgJmluZm8pOworCWlmIChpbmZvLmVuYWJsZWQgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKIAlpbmZvLmVuYWJsZWQgPSBlbmFibGU7CiAJcmV0dXJuIG92bC0+c2V0X292ZXJsYXlfaW5mbyhvdmwsICZpbmZvKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICoKK29tYXBmYl9nZXRfbWVtX3JlZ2lvbihzdHJ1Y3Qgb21hcGZiMl9tZW1fcmVnaW9uICpyZykKK3sKKwlkb3duX3JlYWRfbmVzdGVkKCZyZy0+bG9jaywgcmctPmlkKTsKKwlhdG9taWNfaW5jKCZyZy0+bG9ja19jb3VudCk7CisJcmV0dXJuIHJnOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcGZiX3B1dF9tZW1fcmVnaW9uKHN0cnVjdCBvbWFwZmIyX21lbV9yZWdpb24gKnJnKQoreworCWF0b21pY19kZWMoJnJnLT5sb2NrX2NvdW50KTsKKwl1cF9yZWFkKCZyZy0+bG9jayk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MtZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKaW5kZXggOTY4MmVjYy4uZjlhY2E5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jCkBAIC0xLDcgKzEsNyBAQAogLyogbGludXgvZHJpdmVycy92aWRlby9zM2MtZmIuYwogICoKICAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDgtMjAxMCBTaW10ZWMgRWxlY3Ryb25pY3MKICAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwogICoKQEAgLTksNyArOSw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0SW9uLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjEsOSArMjEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtZmItdjQuaD4KICNpbmNsdWRlIDxwbGF0L2ZiLmg+CiAKIC8qIFRoaXMgZHJpdmVyIHdpbGwgZXhwb3J0IGEgbnVtYmVyIG9mIGZyYW1lYnVmZmVyIGludGVyZmFjZXMgZGVwZW5kaW5nCkBAIC0zNiw5ICszOCw5IEBACiAgKiBvdXRwdXQgdGltaW5ncyBhbmQgYXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBvdXRwdXQgcG93ZXItZG93biBzdGF0ZS4KICovCiAKLS8qIG5vdGUsIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgYXJlIGRlcml2ZWQgZnJvbSBpbmNsdWRpbmcKLSAqIDxtYWNoL3JlZ3MtZmIuaD4gYXMgdGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb2RlCi0gKiBpcyBiZWluZyBidWlsdCBmb3IuCisvKiBub3RlLCB0aGUgcHJldmlvdXMgdXNlIG9mIDxtYWNoL3JlZ3MtZmIuaD4gdG8gZ2V0IHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKyAqIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHVzaW5nIHRoZSBwbGF0Zm9ybSBkZXZpY2UgbmFtZSB0byBwaWNrIHRoZSBjb3JyZWN0CisgKiBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBzeXN0ZW0uCiAqLwogCiAjaWZkZWYgQ09ORklHX0ZCX1MzQ19ERUJVR19SRUdXUklURQpAQCAtNDgsMTMgKzUwLDEwOCBAQAogCV9fcmF3X3dyaXRlbCh2LCByKTsgfSB3aGlsZSgwKQogI2VuZGlmIC8qIEZCX1MzQ19ERUJVR19SRUdXUklURSAqLwogCisvKiBpcnFfZmxhZ3MgYml0cyAqLworI2RlZmluZSBTM0NfRkJfVlNZTkNfSVJRX0VOCTAKKworI2RlZmluZSBWU1lOQ19USU1FT1VUX01TRUMgNTAKKwogc3RydWN0IHMzY19mYjsKIAorI2RlZmluZSBWQUxJRF9CUFAoeCkgKDEgPDwgKCh4KSAtIDEpKQorCisjZGVmaW5lIE9TRF9CQVNFKHdpbiwgdmFyaWFudCkgKCh2YXJpYW50KS5vc2QgKyAoKHdpbikgKiAodmFyaWFudCkub3NkX3N0cmlkZSkpCisjZGVmaW5lIFZJRE9TRF9BKHdpbiwgdmFyaWFudCkgKE9TRF9CQVNFKHdpbiwgdmFyaWFudCkgKyAweDAwKQorI2RlZmluZSBWSURPU0RfQih3aW4sIHZhcmlhbnQpIChPU0RfQkFTRSh3aW4sIHZhcmlhbnQpICsgMHgwNCkKKyNkZWZpbmUgVklET1NEX0Mod2luLCB2YXJpYW50KSAoT1NEX0JBU0Uod2luLCB2YXJpYW50KSArIDB4MDgpCisjZGVmaW5lIFZJRE9TRF9EKHdpbiwgdmFyaWFudCkgKE9TRF9CQVNFKHdpbiwgdmFyaWFudCkgKyAweDBDKQorCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfdmFyaWFudCAtIGZiIHZhcmlhbnQgaW5mb3JtYXRpb24KKyAqIEBpc18yNDQzOiBTZXQgaWYgUzNDMjQ0My9TM0MyNDE2IHN0eWxlIGhhcmR3YXJlLgorICogQG5yX3dpbmRvd3M6IFRoZSBudW1iZXIgb2Ygd2luZG93cy4KKyAqIEB2aWR0Y29uOiBUaGUgYmFzZSBmb3IgdGhlIFZJRFRDT054IHJlZ2lzdGVycworICogQHdpbmNvbjogVGhlIGJhc2UgZm9yIHRoZSBXSU54Q09OIHJlZ2lzdGVycy4KKyAqIEB3aW5tYXA6IFRoZSBiYXNlIGZvciB0aGUgV0lOeE1BUCByZWdpc3RlcnMuCisgKiBAa2V5Y29uOiBUaGUgYWJzZSBmb3IgdGhlIFd4S0VZQ09OIHJlZ2lzdGVycy4KKyAqIEBidWZfc3RhcnQ6IE9mZnNldCBvZiBidWZmZXIgc3RhcnQgcmVnaXN0ZXJzLgorICogQGJ1Zl9zaXplOiBPZmZzZXQgb2YgYnVmZmVyIHNpemUgcmVnaXN0ZXJzLgorICogQGJ1Zl9lbmQ6IE9mZnNldCBvZiBidWZmZXIgZW5kIHJlZ2lzdGVycy4KKyAqIEBvc2Q6IFRoZSBiYXNlIGZvciB0aGUgT1NEIHJlZ2lzdGVycy4KKyAqIEBwYWxldHRlOiBBZGRyZXNzIG9mIHBhbGV0dGUgbWVtb3J5LCBvciAwIGlmIG5vbmUuCisgKiBAaGFzX3BydGNvbjogU2V0IGlmIGhhcyBQUlRDT04gcmVnaXN0ZXIuCisgKiBAaGFzX3NoYWRvd2NvbjogU2V0IGlmIGhhcyBTSEFET1dDT04gcmVnaXN0ZXIuCisgKi8KK3N0cnVjdCBzM2NfZmJfdmFyaWFudCB7CisJdW5zaWduZWQgaW50CWlzXzI0NDM6MTsKKwl1bnNpZ25lZCBzaG9ydAlucl93aW5kb3dzOworCXVuc2lnbmVkIHNob3J0CXZpZHRjb247CisJdW5zaWduZWQgc2hvcnQJd2luY29uOworCXVuc2lnbmVkIHNob3J0CXdpbm1hcDsKKwl1bnNpZ25lZCBzaG9ydAlrZXljb247CisJdW5zaWduZWQgc2hvcnQJYnVmX3N0YXJ0OworCXVuc2lnbmVkIHNob3J0CWJ1Zl9lbmQ7CisJdW5zaWduZWQgc2hvcnQJYnVmX3NpemU7CisJdW5zaWduZWQgc2hvcnQJb3NkOworCXVuc2lnbmVkIHNob3J0CW9zZF9zdHJpZGU7CisJdW5zaWduZWQgc2hvcnQJcGFsZXR0ZVtTM0NfRkJfTUFYX1dJTl07CisKKwl1bnNpZ25lZCBpbnQJaGFzX3BydGNvbjoxOworCXVuc2lnbmVkIGludAloYXNfc2hhZG93Y29uOjE7Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfd2luX3ZhcmlhbnQKKyAqIEBoYXNfb3NkX2M6IFNldCBpZiBoYXMgT1NEIEMgcmVnaXN0ZXIuCisgKiBAaGFzX29zZF9kOiBTZXQgaWYgaGFzIE9TRCBEIHJlZ2lzdGVyLgorICogQGhhc19vc2RfYWxwaGE6IFNldCBpZiBjYW4gY2hhbmdlIGFscGhhIHRyYW5zcGFyZW5jeSBmb3IgYSB3aW5kb3cuCisgKiBAcGFsZXR0ZV9zejogU2l6ZSBvZiBwYWxldHRlIGluIGVudHJpZXMuCisgKiBAcGFsZXR0ZV8xNmJwcDogU2V0IGlmIHBhbGV0dGUgaXMgMTZiaXRzIHdpZGUuCisgKiBAb3NkX3NpemVfb2ZmOiBJZiAhPSAwLCBzdXBwb3J0cyBzZXR0aW5nIHVwIE9TRCBmb3IgYSB3aW5kb3c7IHRoZSBhcHByb3ByaWF0ZQorICogICAgICAgICAgICAgICAgcmVnaXN0ZXIgaXMgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZyb20gT1NEX0JBU0UuCisgKiBAdmFsaWRfYnBwOiAxIGJpdCBwZXIgQlBQIHNldHRpbmcgdG8gc2hvdyB2YWxpZCBiaXRzLXBlci1waXhlbC4KKyAqCisgKiB2YWxpZF9icHAgYml0IHggaXMgc2V0IGlmICh4KzEpQlBQIGlzIHN1cHBvcnRlZC4KKyAqLworc3RydWN0IHMzY19mYl93aW5fdmFyaWFudCB7CisJdW5zaWduZWQgaW50CWhhc19vc2RfYzoxOworCXVuc2lnbmVkIGludAloYXNfb3NkX2Q6MTsKKwl1bnNpZ25lZCBpbnQJaGFzX29zZF9hbHBoYToxOworCXVuc2lnbmVkIGludAlwYWxldHRlXzE2YnBwOjE7CisJdW5zaWduZWQgc2hvcnQJb3NkX3NpemVfb2ZmOworCXVuc2lnbmVkIHNob3J0CXBhbGV0dGVfc3o7CisJdTMyCQl2YWxpZF9icHA7Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSAtIHBlci1kZXZpY2UgdHlwZSBkcml2ZXIgZGF0YSBmb3IgaW5pdCB0aW1lLgorICogQHZhcmlhbnQ6IFRoZSB2YXJpYW50IGluZm9ybWF0aW9uIGZvciB0aGlzIGRyaXZlci4KKyAqIEB3aW46IFRoZSB3aW5kb3cgaW5mb3JtYXRpb24gZm9yIGVhY2ggd2luZG93LgorICovCitzdHJ1Y3QgczNjX2ZiX2RyaXZlcmRhdGEgeworCXN0cnVjdCBzM2NfZmJfdmFyaWFudAl2YXJpYW50OworCXN0cnVjdCBzM2NfZmJfd2luX3ZhcmlhbnQgKndpbltTM0NfRkJfTUFYX1dJTl07Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfcGFsZXR0ZSAtIHBhbGV0dGUgaW5mb3JtYXRpb24KKyAqIEByOiBSZWQgYml0ZmllbGQuCisgKiBAZzogR3JlZW4gYml0ZmllbGQuCisgKiBAYjogQmx1ZSBiaXRmaWVsZC4KKyAqIEBhOiBBbHBoYSBiaXRmaWVsZC4KKyAqLworc3RydWN0IHMzY19mYl9wYWxldHRlIHsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJcjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJZzsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYTsKK307CisKIC8qKgogICogc3RydWN0IHMzY19mYl93aW4gLSBwZXIgd2luZG93IHByaXZhdGUgZGF0YSBmb3IgZWFjaCBmcmFtZWJ1ZmZlci4KICAqIEB3aW5kYXRhOiBUaGUgcGxhdGZvcm0gZGF0YSBzdXBwbGllZCBmb3IgdGhlIHdpbmRvdyBjb25maWd1cmF0aW9uLgogICogQHBhcmVudDogVGhlIGhhcmR3YXJlIHRoYXQgdGhpcyB3aW5kb3cgaXMgcGFydCBvZi4KICAqIEBmYmluZm86IFBvaW50ZXIgcGFjayB0byB0aGUgZnJhbWVidWZmZXIgaW5mbyBmb3IgdGhpcyB3aW5kb3cuCisgKiBAdmFyaW50OiBUaGUgdmFyaWFudCBpbmZvcm1hdGlvbiBmb3IgdGhpcyB3aW5kb3cuCiAgKiBAcGFsZXR0ZV9idWZmZXI6IEJ1ZmZlci9jYWNoZSB0byBob2xkIHBhbGV0dGUgZW50cmllcy4KICAqIEBwc2V1ZG9fcGFsZXR0ZTogRm9yIHVzZSBpbiBUUlVFQ09MT1VSIG1vZGVzIGZvciBlbnRyaWVzIDAuLjE1LwogICogQGluZGV4OiBUaGUgd2luZG93IG51bWJlciBvZiB0aGlzIHdpbmRvdy4KQEAgLTY1LDYgKzE2Miw3IEBACiAJc3RydWN0IHMzY19mYgkJKnBhcmVudDsKIAlzdHJ1Y3QgZmJfaW5mbwkJKmZiaW5mbzsKIAlzdHJ1Y3QgczNjX2ZiX3BhbGV0dGUJIHBhbGV0dGU7CisJc3RydWN0IHMzY19mYl93aW5fdmFyaWFudCB2YXJpYW50OwogCiAJdTMyCQkJKnBhbGV0dGVfYnVmZmVyOwogCXUzMgkJCSBwc2V1ZG9fcGFsZXR0ZVsxNl07CkBAIC03MiwzNyArMTcwLDU0IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBzM2NfZmJfdnN5bmMgLSB2c3luYyBpbmZvcm1hdGlvbgorICogQHdhaXQ6CWEgcXVldWUgZm9yIHByb2Nlc3NlcyB3YWl0aW5nIGZvciB2c3luYworICogQGNvdW50Ogl2c3luYyBpbnRlcnJ1cHQgY291bnQKKyAqLworc3RydWN0IHMzY19mYl92c3luYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKKwl1bnNpZ25lZCBpbnQJCWNvdW50OworfTsKKworLyoqCiAgKiBzdHJ1Y3QgczNjX2ZiIC0gb3ZlcmFsbCBoYXJkd2FyZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKICAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB3ZSBib3VuZCB0bywgZm9yIHByaW50aW5nLCBldGMuCiAgKiBAcmVnc19yZXM6IFRoZSByZXNvdXJjZSB3ZSBjbGFpbWVkIGZvciB0aGUgSU8gcmVnaXN0ZXJzLgogICogQGJ1c19jbGs6IFRoZSBjbGsgKGhjbGspIGZlZWRpbmcgb3VyIGludGVyZmFjZSBhbmQgcG9zc2libHkgcGl4Y2xrLgogICogQHJlZ3M6IFRoZSBtYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICogQHZhcmlhbnQ6IFZhcmlhbnQgaW5mb3JtYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUuCiAgKiBAZW5hYmxlZDogQSBiaXRtYXNrIG9mIGVuYWJsZWQgaGFyZHdhcmUgd2luZG93cy4KICAqIEBwZGF0YTogVGhlIHBsYXRmb3JtIGNvbmZpZ3VyYXRpb24gZGF0YSBwYXNzZWQgd2l0aCB0aGUgZGV2aWNlLgogICogQHdpbmRvd3M6IFRoZSBoYXJkd2FyZSB3aW5kb3dzIHRoYXQgaGF2ZSBiZWVuIGNsYWltZWQuCisgKiBAaXJxX25vOiBJUlEgbGluZSBudW1iZXIKKyAqIEBpcnFfZmxhZ3M6IGlycSBmbGFncworICogQHZzeW5jX2luZm86IFZTWU5DLXJlbGF0ZWQgaW5mb3JtYXRpb24gKGNvdW50LCBxdWV1ZXMuLi4pCiAgKi8KIHN0cnVjdCBzM2NfZmIgewogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IHJlc291cmNlCQkqcmVnc19yZXM7CiAJc3RydWN0IGNsawkJKmJ1c19jbGs7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKKwlzdHJ1Y3QgczNjX2ZiX3ZhcmlhbnQJIHZhcmlhbnQ7CiAKIAl1bnNpZ25lZCBjaGFyCQkgZW5hYmxlZDsKIAogCXN0cnVjdCBzM2NfZmJfcGxhdGRhdGEJKnBkYXRhOwogCXN0cnVjdCBzM2NfZmJfd2luCSp3aW5kb3dzW1MzQ19GQl9NQVhfV0lOXTsKKworCWludAkJCSBpcnFfbm87CisJdW5zaWduZWQgbG9uZwkJIGlycV9mbGFnczsKKwlzdHJ1Y3QgczNjX2ZiX3ZzeW5jCSB2c3luY19pbmZvOwogfTsKIAogLyoqCi0gKiBzM2NfZmJfd2luX2hhc19wYWxldHRlKCkgLSBkZXRlcm1pbmUgaWYgYSBtb2RlIGhhcyBhIHBhbGV0dGUKLSAqIEB3aW46IFRoZSB3aW5kb3cgbnVtYmVyIGJlaW5nIHF1ZXJpZWQuCi0gKiBAYnBwOiBUaGUgbnVtYmVyIG9mIGJpdHMgcGVyIHBpeGVsIHRvIHRlc3QuCi0gKgotICogV29yayBvdXQgaWYgdGhlIGdpdmVuIHdpbmRvdyBzdXBwb3J0cyBwYWxsZXRpc2VkIGRhdGEgYXQgdGhlIHNwZWNpZmllZCBicHAuCisgKiBzM2NfZmJfdmFsaWRhdGVfd2luX2JwcCAtIHZhbGlkYXRlIHRoZSBiaXRzLXBlci1waXhlbCBmb3IgdGhpcyBtb2RlLgorICogQHdpbjogVGhlIGRldmljZSB3aW5kb3cuCisgKiBAYnBwOiBUaGUgYml0IGRlcHRoLgogICovCi1zdGF0aWMgaW50IHMzY19mYl93aW5faGFzX3BhbGV0dGUodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKK3N0YXRpYyBib29sIHMzY19mYl92YWxpZGF0ZV93aW5fYnBwKHN0cnVjdCBzM2NfZmJfd2luICp3aW4sIHVuc2lnbmVkIGludCBicHApCiB7Ci0JcmV0dXJuIHMzY19mYl93aW5fcGFsX3NpemUod2luKSA8PSAoMSA8PCBicHApOworCXJldHVybiB3aW4tPnZhcmlhbnQudmFsaWRfYnBwICYgVkFMSURfQlBQKGJwcCk7CiB9CiAKIC8qKgpAQCAtMTI1LDcgKzI0MCw3IEBACiAJdmFyLT54cmVzX3ZpcnR1YWwgPSBtYXgoKHVuc2lnbmVkIGludCl3aW5kYXRhLT52aXJ0dWFsX3gsIHZhci0+eHJlcyk7CiAJdmFyLT55cmVzX3ZpcnR1YWwgPSBtYXgoKHVuc2lnbmVkIGludCl3aW5kYXRhLT52aXJ0dWFsX3ksIHZhci0+eXJlcyk7CiAKLQlpZiAoIXMzY19mYl92YWxpZGF0ZV93aW5fYnBwKHdpbi0+aW5kZXgsIHZhci0+Yml0c19wZXJfcGl4ZWwpKSB7CisJaWYgKCFzM2NfZmJfdmFsaWRhdGVfd2luX2JwcCh3aW4sIHZhci0+Yml0c19wZXJfcGl4ZWwpKSB7CiAJCWRldl9kYmcoc2ZiLT5kZXYsICJ3aW4gJWQ6IHVuc3VwcG9ydGVkIGJwcCAlZFxuIiwKIAkJCXdpbi0+aW5kZXgsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0MCw3ICsyNTUsNyBAQAogCWNhc2UgMjoKIAljYXNlIDQ6CiAJY2FzZSA4OgotCQlpZiAoIXMzY19mYl93aW5faGFzX3BhbGV0dGUod2luLT5pbmRleCwgdmFyLT5iaXRzX3Blcl9waXhlbCkpIHsKKwkJaWYgKHNmYi0+dmFyaWFudC5wYWxldHRlW3dpbi0+aW5kZXhdICE9IDApIHsKIAkJCS8qIG5vbiBwYWxsZXRpc2VkLCBBOjEsUjoyLEc6MyxCOjIgbW9kZSAqLwogCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDQ7CiAJCQl2YXItPmdyZWVuLm9mZnNldAk9IDI7CkBAIC0yNTUsNiArMzcwLDY2IEBACiB9CiAKIC8qKgorICogdmlkb3NkX3NldF9zaXplKCkgLSBzZXQgT1NEIHNpemUgZm9yIGEgd2luZG93CisgKgorICogQHdpbjogdGhlIHdpbmRvdyB0byBzZXQgT1NEIHNpemUgZm9yCisgKiBAc2l6ZTogT1NEIHNpemUgcmVnaXN0ZXIgdmFsdWUKKyAqLworc3RhdGljIHZvaWQgdmlkb3NkX3NldF9zaXplKHN0cnVjdCBzM2NfZmJfd2luICp3aW4sIHUzMiBzaXplKQoreworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCisJLyogT1NEIGNhbiBiZSBzZXQgdXAgaWYgb3NkX3NpemVfb2ZmICE9IDAgZm9yIHRoaXMgd2luZG93ICovCisJaWYgKHdpbi0+dmFyaWFudC5vc2Rfc2l6ZV9vZmYpCisJCXdyaXRlbChzaXplLCBzZmItPnJlZ3MgKyBPU0RfQkFTRSh3aW4tPmluZGV4LCBzZmItPnZhcmlhbnQpCisJCQkJKyB3aW4tPnZhcmlhbnQub3NkX3NpemVfb2ZmKTsKK30KKworLyoqCisgKiB2aWRvc2Rfc2V0X2FscGhhKCkgLSBzZXQgYWxwaGEgdHJhbnNwYXJlbmN5IGZvciBhIHdpbmRvdworICoKKyAqIEB3aW46IHRoZSB3aW5kb3cgdG8gc2V0IE9TRCBzaXplIGZvcgorICogQGFscGhhOiBhbHBoYSByZWdpc3RlciB2YWx1ZQorICovCitzdGF0aWMgdm9pZCB2aWRvc2Rfc2V0X2FscGhhKHN0cnVjdCBzM2NfZmJfd2luICp3aW4sIHUzMiBhbHBoYSkKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSB3aW4tPnBhcmVudDsKKworCWlmICh3aW4tPnZhcmlhbnQuaGFzX29zZF9hbHBoYSkKKwkJd3JpdGVsKGFscGhhLCBzZmItPnJlZ3MgKyBWSURPU0RfQyh3aW4tPmluZGV4LCBzZmItPnZhcmlhbnQpKTsKK30KKworLyoqCisgKiBzaGFkb3dfcHJvdGVjdF93aW4oKSAtIGRpc2FibGUgdXBkYXRpbmcgdmFsdWVzIGZyb20gc2hhZG93IHJlZ2lzdGVycyBhdCB2c3luYworICoKKyAqIEB3aW46IHdpbmRvdyB0byBwcm90ZWN0IHJlZ2lzdGVycyBmb3IKKyAqIEBwcm90ZWN0OiAxIHRvIHByb3RlY3QgKGRpc2FibGUgdXBkYXRlcykKKyAqLworc3RhdGljIHZvaWQgc2hhZG93X3Byb3RlY3Rfd2luKHN0cnVjdCBzM2NfZmJfd2luICp3aW4sIGJvb2wgcHJvdGVjdCkKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSB3aW4tPnBhcmVudDsKKwl1MzIgcmVnOworCisJaWYgKHByb3RlY3QpIHsKKwkJaWYgKHNmYi0+dmFyaWFudC5oYXNfcHJ0Y29uKSB7CisJCQl3cml0ZWwoUFJUQ09OX1BST1RFQ1QsIHNmYi0+cmVncyArIFBSVENPTik7CisJCX0gZWxzZSBpZiAoc2ZiLT52YXJpYW50Lmhhc19zaGFkb3djb24pIHsKKwkJCXJlZyA9IHJlYWRsKHNmYi0+cmVncyArIFNIQURPV0NPTik7CisJCQl3cml0ZWwocmVnIHwgU0hBRE9XQ09OX1dJTnhfUFJPVEVDVCh3aW4tPmluZGV4KSwKKwkJCQlzZmItPnJlZ3MgKyBTSEFET1dDT04pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNmYi0+dmFyaWFudC5oYXNfcHJ0Y29uKSB7CisJCQl3cml0ZWwoMCwgc2ZiLT5yZWdzICsgUFJUQ09OKTsKKwkJfSBlbHNlIGlmIChzZmItPnZhcmlhbnQuaGFzX3NoYWRvd2NvbikgeworCQkJcmVnID0gcmVhZGwoc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwkJCXdyaXRlbChyZWcgJiB+U0hBRE9XQ09OX1dJTnhfUFJPVEVDVCh3aW4tPmluZGV4KSwKKwkJCQlzZmItPnJlZ3MgKyBTSEFET1dDT04pOworCQl9CisJfQorfQorCisvKioKICAqIHMzY19mYl9zZXRfcGFyKCkgLSBmcmFtZWJ1ZmZlciByZXF1ZXN0IHRvIHNldCBuZXcgZnJhbWVidWZmZXIgc3RhdGUuCiAgKiBAaW5mbzogVGhlIGZyYW1lYnVmZmVyIHRvIGNoYW5nZS4KICAqCkBAIC0yNjYsMTQgKzQ0MSwxNyBAQAogCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CiAJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CiAJdm9pZCBfX2lvbWVtICpyZWdzID0gc2ZiLT5yZWdzOworCXZvaWQgX19pb21lbSAqYnVmID0gcmVnczsKIAlpbnQgd2luX25vID0gd2luLT5pbmRleDsKLQl1MzIgb3NkY19kYXRhID0gMDsKKwl1MzIgYWxwaGEgPSAwOwogCXUzMiBkYXRhOwogCXUzMiBwYWdld2lkdGg7CiAJaW50IGNsa2RpdjsKIAogCWRldl9kYmcoc2ZiLT5kZXYsICJzZXR0aW5nIGZyYW1lYnVmZmVyIHBhcmFtZXRlcnNcbiIpOwogCisJc2hhZG93X3Byb3RlY3Rfd2luKHdpbiwgMSk7CisKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDMyOgogCWNhc2UgMjQ6CkBAIC0yODIsNyArNDYwLDcgQEAKIAkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJaWYgKHMzY19mYl93aW5faGFzX3BhbGV0dGUod2luX25vLCA4KSkKKwkJaWYgKHdpbi0+dmFyaWFudC5wYWxldHRlX3N6ID49IDI1NikKIAkJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CiAJCWVsc2UKIAkJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwpAQCAtMjk3LDEyICs0NzUsMTUgQEAKIAogCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwpIC8gODsKIAorCWluZm8tPmZpeC54cGFuc3RlcCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgPiBpbmZvLT52YXIueHJlcyA/IDEgOiAwOworCWluZm8tPmZpeC55cGFuc3RlcCA9IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgPiBpbmZvLT52YXIueXJlcyA/IDEgOiAwOworCiAJLyogZGlzYWJsZSB0aGUgd2luZG93IHdoaWxzdCB3ZSB1cGRhdGUgaXQgKi8KIAl3cml0ZWwoMCwgcmVncyArIFdJTkNPTih3aW5fbm8pKTsKIAotCS8qIHVzZSB3aW5kb3cgMCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBsY2Qgb3V0cHV0IHRpbWluZ3MgKi8KKwkvKiB1c2UgcGxhdGZvcm0gc3BlY2lmaWVkIHdpbmRvdyBhcyB0aGUgYmFzaXMgZm9yIHRoZSBsY2QgdGltaW5ncyAqLwogCi0JaWYgKHdpbl9ubyA9PSAwKSB7CisJaWYgKHdpbl9ubyA9PSBzZmItPnBkYXRhLT5kZWZhdWx0X3dpbikgewogCQljbGtkaXYgPSBzM2NfZmJfY2FsY19waXhjbGsoc2ZiLCB2YXItPnBpeGNsb2NrKTsKIAogCQlkYXRhID0gc2ZiLT5wZGF0YS0+dmlkY29uMDsKQEAgLTMxNSw2ICs0OTYsOSBAQAogCiAJCS8qIHdyaXRlIHRoZSB0aW1pbmcgZGF0YSB0byB0aGUgcGFuZWwgKi8KIAorCQlpZiAoc2ZiLT52YXJpYW50LmlzXzI0NDMpCisJCQlkYXRhIHw9ICgxIDw8IDUpOworCiAJCWRhdGEgfD0gVklEQ09OMF9FTlZJRCB8IFZJRENPTjBfRU5WSURfRjsKIAkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURDT04wKTsKIApAQCAtMzIyLDUzICs1MDYsNTQgQEAKIAkJICAgICAgIFZJRFRDT04wX1ZGUEQodmFyLT5sb3dlcl9tYXJnaW4gLSAxKSB8CiAJCSAgICAgICBWSURUQ09OMF9WU1BXKHZhci0+dnN5bmNfbGVuIC0gMSk7CiAKLQkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURUQ09OMCk7CisJCXdyaXRlbChkYXRhLCByZWdzICsgc2ZiLT52YXJpYW50LnZpZHRjb24pOwogCiAJCWRhdGEgPSBWSURUQ09OMV9IQlBEKHZhci0+bGVmdF9tYXJnaW4gLSAxKSB8CiAJCSAgICAgICBWSURUQ09OMV9IRlBEKHZhci0+cmlnaHRfbWFyZ2luIC0gMSkgfAogCQkgICAgICAgVklEVENPTjFfSFNQVyh2YXItPmhzeW5jX2xlbiAtIDEpOwogCi0JCXdyaXRlbChkYXRhLCByZWdzICsgVklEVENPTjEpOworCQkvKiBWSURUQ09OMSAqLworCQl3cml0ZWwoZGF0YSwgcmVncyArIHNmYi0+dmFyaWFudC52aWR0Y29uICsgNCk7CiAKIAkJZGF0YSA9IFZJRFRDT04yX0xJTkVWQUwodmFyLT55cmVzIC0gMSkgfAogCQkgICAgICAgVklEVENPTjJfSE9aVkFMKHZhci0+eHJlcyAtIDEpOwotCQl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFRDT04yKTsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgK3NmYi0+dmFyaWFudC52aWR0Y29uICsgOCApOwogCX0KIAogCS8qIHdyaXRlIHRoZSBidWZmZXIgYWRkcmVzcyAqLwogCi0Jd3JpdGVsKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCByZWdzICsgVklEV19CVUZfU1RBUlQod2luX25vKSk7CisJLyogc3RhcnQgYW5kIGVuZCByZWdpc3RlcnMgc3RyaWRlIGlzIDggKi8KKwlidWYgPSByZWdzICsgd2luX25vICogODsKKworCXdyaXRlbChpbmZvLT5maXguc21lbV9zdGFydCwgYnVmICsgc2ZiLT52YXJpYW50LmJ1Zl9zdGFydCk7CiAKIAlkYXRhID0gaW5mby0+Zml4LnNtZW1fc3RhcnQgKyBpbmZvLT5maXgubGluZV9sZW5ndGggKiB2YXItPnlyZXM7Ci0Jd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURXX0JVRl9FTkQod2luX25vKSk7CisJd3JpdGVsKGRhdGEsIGJ1ZiArIHNmYi0+dmFyaWFudC5idWZfZW5kKTsKIAogCXBhZ2V3aWR0aCA9ICh2YXItPnhyZXMgKiB2YXItPmJpdHNfcGVyX3BpeGVsKSA+PiAzOwogCWRhdGEgPSBWSURXX0JVRl9TSVpFX09GRlNFVChpbmZvLT5maXgubGluZV9sZW5ndGggLSBwYWdld2lkdGgpIHwKIAkgICAgICAgVklEV19CVUZfU0laRV9QQUdFV0lEVEgocGFnZXdpZHRoKTsKLQl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFdfQlVGX1NJWkUod2luX25vKSk7CisJd3JpdGVsKGRhdGEsIHJlZ3MgKyBzZmItPnZhcmlhbnQuYnVmX3NpemUgKyAod2luX25vICogNCkpOwogCiAJLyogd3JpdGUgJ09TRCcgcmVnaXN0ZXJzIHRvIGNvbnRyb2wgcG9zaXRpb24gb2YgZnJhbWVidWZmZXIgKi8KIAogCWRhdGEgPSBWSURPU0R4QV9UT1BMRUZUX1goMCkgfCBWSURPU0R4QV9UT1BMRUZUX1koMCk7Ci0Jd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfQSh3aW5fbm8pKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRE9TRF9BKHdpbl9ubywgc2ZiLT52YXJpYW50KSk7CiAKIAlkYXRhID0gVklET1NEeEJfQk9UUklHSFRfWChzM2NfZmJfYWxpZ25fd29yZCh2YXItPmJpdHNfcGVyX3BpeGVsLAogCQkJCQkJICAgICB2YXItPnhyZXMgLSAxKSkgfAogCSAgICAgICBWSURPU0R4Ql9CT1RSSUdIVF9ZKHZhci0+eXJlcyAtIDEpOwogCi0Jd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfQih3aW5fbm8pKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRE9TRF9CKHdpbl9ubywgc2ZiLT52YXJpYW50KSk7CiAKIAlkYXRhID0gdmFyLT54cmVzICogdmFyLT55cmVzOwogCi0Jb3NkY19kYXRhID0gVklESVNEMTRDX0FMUEhBMV9SKDB4ZikgfAorCWFscGhhID0gVklESVNEMTRDX0FMUEhBMV9SKDB4ZikgfAogCQlWSURJU0QxNENfQUxQSEExX0coMHhmKSB8CiAJCVZJRElTRDE0Q19BTFBIQTFfQigweGYpOwogCi0JaWYgKHMzY19mYl9oYXNfb3NkX2Qod2luX25vKSkgewotCQl3cml0ZWwoZGF0YSwgcmVncyArIFZJRE9TRF9EKHdpbl9ubykpOwotCQl3cml0ZWwob3NkY19kYXRhLCByZWdzICsgVklET1NEX0Mod2luX25vKSk7Ci0JfSBlbHNlCi0JCXdyaXRlbChkYXRhLCByZWdzICsgVklET1NEX0Mod2luX25vKSk7CisJdmlkb3NkX3NldF9hbHBoYSh3aW4sIGFscGhhKTsKKwl2aWRvc2Rfc2V0X3NpemUod2luLCBkYXRhKTsKIAogCWRhdGEgPSBXSU5DT054X0VOV0lOOwogCkBAIC00MjQsMTMgKzYwOSwxNSBAQAogCQllbHNlCiAJCQlkYXRhIHw9IFdJTkNPTjBfQlBQTU9ERV8yNEJQUF84ODg7CiAKKwkJZGF0YSB8PSBXSU5DT054X1dTV1A7CiAJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7CiAJCWJyZWFrOwogCX0KIAotCS8qIEl0IGhhcyBubyBjb2xvciBrZXkgY29udHJvbCByZWdpc3RlciBmb3Igd2luZG93MCAqLworCS8qIEVuYWJsZSB0aGUgY29sb3VyIGtleWluZyBmb3IgdGhlIHdpbmRvdyBiZWxvdyB0aGlzIG9uZSAqLwogCWlmICh3aW5fbm8gPiAwKSB7CiAJCXUzMiBrZXljb24wX2RhdGEgPSAwLCBrZXljb24xX2RhdGEgPSAwOworCQl2b2lkIF9faW9tZW0gKmtleWNvbiA9IHJlZ3MgKyBzZmItPnZhcmlhbnQua2V5Y29uOwogCiAJCWtleWNvbjBfZGF0YSA9IH4oV3hLRVlDT04wX0tFWUJMX0VOIHwKIAkJCQlXeEtFWUNPTjBfS0VZRU5fRiB8CkBAIC00MzgsMTIgKzYyNSwyMyBAQAogCiAJCWtleWNvbjFfZGF0YSA9IFd4S0VZQ09OMV9DT0xWQUwoMHhmZmZmZmYpOwogCi0JCXdyaXRlbChrZXljb24wX2RhdGEsIHJlZ3MgKyBXeEtFWUNPTnkod2luX25vLTEsIDApKTsKLQkJd3JpdGVsKGtleWNvbjFfZGF0YSwgcmVncyArIFd4S0VZQ09OeSh3aW5fbm8tMSwgMSkpOworCQlrZXljb24gKz0gKHdpbl9ubyAtIDEpICogODsKKworCQl3cml0ZWwoa2V5Y29uMF9kYXRhLCBrZXljb24gKyBXS0VZQ09OMCk7CisJCXdyaXRlbChrZXljb24xX2RhdGEsIGtleWNvbiArIFdLRVlDT04xKTsKIAl9CiAKLQl3cml0ZWwoZGF0YSwgcmVncyArIFdJTkNPTih3aW5fbm8pKTsKLQl3cml0ZWwoMHgwLCByZWdzICsgV0lOeE1BUCh3aW5fbm8pKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIHNmYi0+dmFyaWFudC53aW5jb24gKyAod2luX25vICogNCkpOworCXdyaXRlbCgweDAsIHJlZ3MgKyBzZmItPnZhcmlhbnQud2lubWFwICsgKHdpbl9ubyAqIDQpKTsKKworCS8qIEVuYWJsZSBETUEgY2hhbm5lbCBmb3IgdGhpcyB3aW5kb3cgKi8KKwlpZiAoc2ZiLT52YXJpYW50Lmhhc19zaGFkb3djb24pIHsKKwkJZGF0YSA9IHJlYWRsKHNmYi0+cmVncyArIFNIQURPV0NPTik7CisJCWRhdGEgfD0gU0hBRE9XQ09OX0NIeF9FTkFCTEUod2luX25vKTsKKwkJd3JpdGVsKGRhdGEsIHNmYi0+cmVncyArIFNIQURPV0NPTik7CisJfQorCisJc2hhZG93X3Byb3RlY3Rfd2luKHdpbiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3MCw3ICs2NjgsNyBAQAogCXZvaWQgX19pb21lbSAqcGFscmVnOwogCXUzMiBwYWxjb247CiAKLQlwYWxyZWcgPSBzZmItPnJlZ3MgKyBzM2NfZmJfcGFsX3JlZyh3aW4tPmluZGV4LCByZWcpOworCXBhbHJlZyA9IHNmYi0+cmVncyArIHNmYi0+dmFyaWFudC5wYWxldHRlW3dpbi0+aW5kZXhdOwogCiAJZGV2X2RiZyhzZmItPmRldiwgIiVzOiB3aW4gJWQsIHJlZyAlZCAoJXApOiAlMDh4XG4iLAogCQlfX2Z1bmNfXywgd2luLT5pbmRleCwgcmVnLCBwYWxyZWcsIHZhbHVlKTsKQEAgLTQ4MCwxMCArNjc4LDEwIEBACiAJcGFsY29uID0gcmVhZGwoc2ZiLT5yZWdzICsgV1BBTENPTik7CiAJd3JpdGVsKHBhbGNvbiB8IFdQQUxDT05fUEFMX1VQREFURSwgc2ZiLT5yZWdzICsgV1BBTENPTik7CiAKLQlpZiAoczNjX2ZiX3BhbF9pczE2KHdpbi0+aW5kZXgpKQotCQl3cml0ZXcodmFsdWUsIHBhbHJlZyk7CisJaWYgKHdpbi0+dmFyaWFudC5wYWxldHRlXzE2YnBwKQorCQl3cml0ZXcodmFsdWUsIHBhbHJlZyArIChyZWcgKiAyKSk7CiAJZWxzZQotCQl3cml0ZWwodmFsdWUsIHBhbHJlZyk7CisJCXdyaXRlbCh2YWx1ZSwgcGFscmVnICsgKHJlZyAqIDQpKTsKIAogCXdyaXRlbChwYWxjb24sIHNmYi0+cmVncyArIFdQQUxDT04pOwogfQpAQCAtNTMyLDcgKzczMCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6Ci0JCWlmIChyZWdubyA8IHMzY19mYl93aW5fcGFsX3NpemUod2luLT5pbmRleCkpIHsKKwkJaWYgKHJlZ25vIDwgd2luLT52YXJpYW50LnBhbGV0dGVfc3opIHsKIAkJCXZhbCAgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgJndpbi0+cGFsZXR0ZS5yKTsKIAkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCAmd2luLT5wYWxldHRlLmcpOwogCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJndpbi0+cGFsZXR0ZS5iKTsKQEAgLTU5MSw3ICs3ODksNyBAQAogCiAJZGV2X2RiZyhzZmItPmRldiwgImJsYW5rIG1vZGUgJWRcbiIsIGJsYW5rX21vZGUpOwogCi0Jd2luY29uID0gcmVhZGwoc2ZiLT5yZWdzICsgV0lOQ09OKGluZGV4KSk7CisJd2luY29uID0gcmVhZGwoc2ZiLT5yZWdzICsgc2ZiLT52YXJpYW50LndpbmNvbiArIChpbmRleCAqIDQpKTsKIAogCXN3aXRjaCAoYmxhbmtfbW9kZSkgewogCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgpAQCAtNjAyLDExICs4MDAsMTEgQEAKIAljYXNlIEZCX0JMQU5LX05PUk1BTDoKIAkJLyogZGlzYWJsZSB0aGUgRE1BIGFuZCBkaXNwbGF5IDB4MCAoYmxhY2spICovCiAJCXdyaXRlbChXSU54TUFQX01BUCB8IFdJTnhNQVBfTUFQX0NPTE9VUigweDApLAotCQkgICAgICAgc2ZiLT5yZWdzICsgV0lOeE1BUChpbmRleCkpOworCQkgICAgICAgc2ZiLT5yZWdzICsgc2ZiLT52YXJpYW50Lndpbm1hcCArIChpbmRleCAqIDQpKTsKIAkJYnJlYWs7CiAKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6Ci0JCXdyaXRlbCgweDAsIHNmYi0+cmVncyArIFdJTnhNQVAoaW5kZXgpKTsKKwkJd3JpdGVsKDB4MCwgc2ZiLT5yZWdzICsgc2ZiLT52YXJpYW50Lndpbm1hcCArIChpbmRleCAqIDQpKTsKIAkJd2luY29uIHw9IFdJTkNPTnhfRU5XSU47CiAJCXNmYi0+ZW5hYmxlZCB8PSAoMSA8PCBpbmRleCk7CiAJCWJyZWFrOwpAQCAtNjE3LDcgKzgxNSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCXdyaXRlbCh3aW5jb24sIHNmYi0+cmVncyArIFdJTkNPTihpbmRleCkpOworCXdyaXRlbCh3aW5jb24sIHNmYi0+cmVncyArIHNmYi0+dmFyaWFudC53aW5jb24gKyAoaW5kZXggKiA0KSk7CiAKIAkvKiBDaGVjayB0aGUgZW5hYmxlZCBzdGF0ZSB0byBzZWUgaWYgd2UgbmVlZCB0byBiZSBydW5uaW5nIHRoZQogCSAqIG1haW4gTENEIGludGVyZmFjZSwgYXMgaWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSB3aW5kb3dzIHRoZW4KQEAgLTYzNiwxMiArODM0LDE4NSBAQAogCS8qIHdlJ3JlIHN0dWNrIHdpdGggdGhpcyB1bnRpbCB3ZSBjYW4gZG8gc29tZXRoaW5nIGFib3V0IG92ZXJyaWRpbmcKIAkgKiB0aGUgcG93ZXIgY29udHJvbCB1c2luZyB0aGUgYmxhbmtpbmcgZXZlbnQgZm9yIGEgc2luZ2xlIGZiLgogCSAqLwotCWlmIChpbmRleCA9PSAwKQorCWlmIChpbmRleCA9PSBzZmItPnBkYXRhLT5kZWZhdWx0X3dpbikKIAkJczNjX2ZiX2VuYWJsZShzZmIsIGJsYW5rX21vZGUgIT0gRkJfQkxBTktfUE9XRVJET1dOID8gMSA6IDApOwogCiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogczNjX2ZiX3Bhbl9kaXNwbGF5KCkgLSBQYW4gdGhlIGRpc3BsYXkuCisgKgorICogTm90ZSB0aGF0IHRoZSBvZmZzZXRzIGNhbiBiZSB3cml0dGVuIHRvIHRoZSBkZXZpY2UgYXQgYW55IHRpbWUsIGFzIHRoZWlyCisgKiB2YWx1ZXMgYXJlIGxhdGNoZWQgYXQgZWFjaCB2c3luYyBhdXRvbWF0aWNhbGx5LiBUaGlzIGFsc28gbWVhbnMgdGhhdCBvbmx5CisgKiB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBoYXZlIGFueSBlZmZlY3Qgb24gbmV4dCB2c3luYywgYnV0CisgKiB0aGVyZSBpcyBubyBuZWVkIHRvIHNsZWVwIHdhaXRpbmcgZm9yIGl0IHRvIHByZXZlbnQgdGVhcmluZy4KKyAqCisgKiBAdmFyOiBUaGUgc2NyZWVuIGluZm9ybWF0aW9uIHRvIHZlcmlmeS4KKyAqIEBpbmZvOiBUaGUgZnJhbWVidWZmZXIgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHMzY19mYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4JPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYiAqc2ZiCT0gd2luLT5wYXJlbnQ7CisJdm9pZCBfX2lvbWVtICpidWYJPSBzZmItPnJlZ3MgKyB3aW4tPmluZGV4ICogODsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfYm9mZiwgZW5kX2JvZmY7CisKKwkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBkaXNwbGF5ZWQgYXJlYSAqLworCXN0YXJ0X2JvZmYgPSB2YXItPnlvZmZzZXQgKiBpbmZvLT5maXgubGluZV9sZW5ndGg7CisJLyogWCBvZmZzZXQgZGVwZW5kcyBvbiB0aGUgY3VycmVudCBicHAgKi8KKwlpZiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID49IDgpIHsKKwkJc3RhcnRfYm9mZiArPSB2YXItPnhvZmZzZXQgKiAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID4+IDMpOworCX0gZWxzZSB7CisJCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJCWNhc2UgNDoKKwkJCXN0YXJ0X2JvZmYgKz0gdmFyLT54b2Zmc2V0ID4+IDE7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RhcnRfYm9mZiArPSB2YXItPnhvZmZzZXQgPj4gMjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzdGFydF9ib2ZmICs9IHZhci0+eG9mZnNldCA+PiAzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKHNmYi0+ZGV2LCAiaW52YWxpZCBicHBcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIHRoZSBlbmQgb2YgdGhlIGRpc3BsYXllZCBhcmVhICovCisJZW5kX2JvZmYgPSBzdGFydF9ib2ZmICsgdmFyLT55cmVzICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoOworCisJLyogVGVtcG9yYXJpbHkgdHVybiBvZmYgcGVyLXZzeW5jIHVwZGF0ZSBmcm9tIHNoYWRvdyByZWdpc3RlcnMgdW50aWwKKwkgKiBib3RoIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB1cGRhdGVkIHRvIHByZXZlbnQgY29ycnVwdGlvbiAqLworCXNoYWRvd19wcm90ZWN0X3dpbih3aW4sIDEpOworCisJd3JpdGVsKGluZm8tPmZpeC5zbWVtX3N0YXJ0ICsgc3RhcnRfYm9mZiwgYnVmICsgc2ZiLT52YXJpYW50LmJ1Zl9zdGFydCk7CisJd3JpdGVsKGluZm8tPmZpeC5zbWVtX3N0YXJ0ICsgZW5kX2JvZmYsIGJ1ZiArIHNmYi0+dmFyaWFudC5idWZfZW5kKTsKKworCXNoYWRvd19wcm90ZWN0X3dpbih3aW4sIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX2VuYWJsZV9pcnEoKSAtIGVuYWJsZSBmcmFtZWJ1ZmZlciBpbnRlcnJ1cHRzCisgKiBAc2ZiOiBtYWluIGhhcmR3YXJlIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIHMzY19mYl9lbmFibGVfaXJxKHN0cnVjdCBzM2NfZmIgKnNmYikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZmItPnJlZ3M7CisJdTMyIGlycV9jdHJsX3JlZzsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChTM0NfRkJfVlNZTkNfSVJRX0VOLCAmc2ZiLT5pcnFfZmxhZ3MpKSB7CisJCS8qIElSUSBkaXNhYmxlZCwgZW5hYmxlIGl0ICovCisJCWlycV9jdHJsX3JlZyA9IHJlYWRsKHJlZ3MgKyBWSURJTlRDT04wKTsKKworCQlpcnFfY3RybF9yZWcgfD0gVklESU5UQ09OMF9JTlRfRU5BQkxFOworCQlpcnFfY3RybF9yZWcgfD0gVklESU5UQ09OMF9JTlRfRlJBTUU7CisKKwkJaXJxX2N0cmxfcmVnICY9IH5WSURJTlRDT04wX0ZSQU1FU0VMMF9NQVNLOworCQlpcnFfY3RybF9yZWcgfD0gVklESU5UQ09OMF9GUkFNRVNFTDBfVlNZTkM7CisJCWlycV9jdHJsX3JlZyAmPSB+VklESU5UQ09OMF9GUkFNRVNFTDFfTUFTSzsKKwkJaXJxX2N0cmxfcmVnIHw9IFZJRElOVENPTjBfRlJBTUVTRUwxX05PTkU7CisKKwkJd3JpdGVsKGlycV9jdHJsX3JlZywgcmVncyArIFZJRElOVENPTjApOworCX0KK30KKworLyoqCisgKiBzM2NfZmJfZGlzYWJsZV9pcnEoKSAtIGRpc2FibGUgZnJhbWVidWZmZXIgaW50ZXJydXB0cworICogQHNmYjogbWFpbiBoYXJkd2FyZSBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfZGlzYWJsZV9pcnEoc3RydWN0IHMzY19mYiAqc2ZiKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHNmYi0+cmVnczsKKwl1MzIgaXJxX2N0cmxfcmVnOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTM0NfRkJfVlNZTkNfSVJRX0VOLCAmc2ZiLT5pcnFfZmxhZ3MpKSB7CisJCS8qIElSUSBlbmFibGVkLCBkaXNhYmxlIGl0ICovCisJCWlycV9jdHJsX3JlZyA9IHJlYWRsKHJlZ3MgKyBWSURJTlRDT04wKTsKKworCQlpcnFfY3RybF9yZWcgJj0gflZJRElOVENPTjBfSU5UX0ZSQU1FOworCQlpcnFfY3RybF9yZWcgJj0gflZJRElOVENPTjBfSU5UX0VOQUJMRTsKKworCQl3cml0ZWwoaXJxX2N0cmxfcmVnLCByZWdzICsgVklESU5UQ09OMCk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgczNjX2ZiX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gZGV2X2lkOworCXZvaWQgX19pb21lbSAgKnJlZ3MgPSBzZmItPnJlZ3M7CisJdTMyIGlycV9zdHNfcmVnOworCisJaXJxX3N0c19yZWcgPSByZWFkbChyZWdzICsgVklESU5UQ09OMSk7CisKKwlpZiAoaXJxX3N0c19yZWcgJiBWSURJTlRDT04xX0lOVF9GUkFNRSkgeworCisJCS8qIFZTWU5DIGludGVycnVwdCwgYWNjZXB0IGl0ICovCisJCXdyaXRlbChWSURJTlRDT04xX0lOVF9GUkFNRSwgcmVncyArIFZJRElOVENPTjEpOworCisJCXNmYi0+dnN5bmNfaW5mby5jb3VudCsrOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNmYi0+dnN5bmNfaW5mby53YWl0KTsKKwl9CisKKwkvKiBXZSBvbmx5IHN1cHBvcnQgd2FpdGluZyBmb3IgVlNZTkMgZm9yIG5vdywgc28gaXQncyBzYWZlCisJICogdG8gYWx3YXlzIGRpc2FibGUgaXJxcyBoZXJlLgorCSAqLworCXMzY19mYl9kaXNhYmxlX2lycShzZmIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHMzY19mYl93YWl0X2Zvcl92c3luYygpIC0gc2xlZXAgdW50aWwgbmV4dCBWU1lOQyBpbnRlcnJ1cHQgb3IgdGltZW91dAorICogQHNmYjogbWFpbiBoYXJkd2FyZSBzdGF0ZQorICogQGNydGM6IGhlYWQgaW5kZXguCisgKi8KK3N0YXRpYyBpbnQgczNjX2ZiX3dhaXRfZm9yX3ZzeW5jKHN0cnVjdCBzM2NfZmIgKnNmYiwgdTMyIGNydGMpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwlpbnQgcmV0OworCisJaWYgKGNydGMgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljb3VudCA9IHNmYi0+dnN5bmNfaW5mby5jb3VudDsKKwlzM2NfZmJfZW5hYmxlX2lycShzZmIpOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNmYi0+dnN5bmNfaW5mby53YWl0LAorCQkJCSAgICAgICBjb3VudCAhPSBzZmItPnZzeW5jX2luZm8uY291bnQsCisJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoVlNZTkNfVElNRU9VVF9NU0VDKSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19mYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisJaW50IHJldDsKKwl1MzIgY3J0YzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGQklPX1dBSVRGT1JWU1lOQzoKKwkJaWYgKGdldF91c2VyKGNydGMsICh1MzIgX191c2VyICopYXJnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gczNjX2ZiX3dhaXRfZm9yX3ZzeW5jKHNmYiwgY3J0Yyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9UVFk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCBmYl9vcHMgczNjX2ZiX29wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmZiX2NoZWNrX3Zhcgk9IHMzY19mYl9jaGVja192YXIsCkBAIC02NTEsOSArMTAyMiwzMyBAQAogCS5mYl9maWxscmVjdAk9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisJLmZiX3Bhbl9kaXNwbGF5CT0gczNjX2ZiX3Bhbl9kaXNwbGF5LAorCS5mYl9pb2N0bAk9IHMzY19mYl9pb2N0bCwKIH07CiAKIC8qKgorICogczNjX2ZiX21pc3NpbmdfcGl4Y2xvY2soKSAtIGNhbGN1bGF0ZXMgcGl4ZWwgY2xvY2sKKyAqIEBtb2RlOiBUaGUgdmlkZW8gbW9kZSB0byBjaGFuZ2UuCisgKgorICogQ2FsY3VsYXRlIHRoZSBwaXhlbCBjbG9jayB3aGVuIG5vbmUgaGFzIGJlZW4gZ2l2ZW4gdGhyb3VnaCBwbGF0Zm9ybSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgczNjX2ZiX21pc3NpbmdfcGl4Y2xvY2soc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSkKK3sKKwl1NjQgcGl4Y2xrID0gMTAwMDAwMDAwMDAwMFVMTDsKKwl1MzIgZGl2OworCisJZGl2ICA9IG1vZGUtPmxlZnRfbWFyZ2luICsgbW9kZS0+aHN5bmNfbGVuICsgbW9kZS0+cmlnaHRfbWFyZ2luICsKKwkgICAgICAgbW9kZS0+eHJlczsKKwlkaXYgKj0gbW9kZS0+dXBwZXJfbWFyZ2luICsgbW9kZS0+dnN5bmNfbGVuICsgbW9kZS0+bG93ZXJfbWFyZ2luICsKKwkgICAgICAgbW9kZS0+eXJlczsKKwlkaXYgKj0gbW9kZS0+cmVmcmVzaCA/IDogNjA7CisKKwlkb19kaXYocGl4Y2xrLCBkaXYpOworCisJbW9kZS0+cGl4Y2xvY2sgPSBwaXhjbGs7Cit9CisKKy8qKgogICogczNjX2ZiX2FsbG9jX21lbW9yeSgpIC0gYWxsb2NhdGUgZGlzcGxheSBtZW1vcnkgZm9yIGZyYW1lYnVmZmVyIHdpbmRvdwogICogQHNmYjogVGhlIGJhc2UgcmVzb3VyY2VzIGZvciB0aGUgaGFyZHdhcmUuCiAgKiBAd2luOiBUaGUgd2luZG93IHRvIGluaXRpYWxpc2UgbWVtb3J5IGZvci4KQEAgLTcxMSw3ICsxMTA2LDggQEAKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqZmJpID0gd2luLT5mYmluZm87CiAKLQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoc2ZiLT5kZXYsIFBBR0VfQUxJR04oZmJpLT5maXguc21lbV9sZW4pLAorCWlmIChmYmktPnNjcmVlbl9iYXNlKQorCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoc2ZiLT5kZXYsIFBBR0VfQUxJR04oZmJpLT5maXguc21lbV9sZW4pLAogCQkJICAgICAgZmJpLT5zY3JlZW5fYmFzZSwgZmJpLT5maXguc21lbV9zdGFydCk7CiB9CiAKQEAgLTcyNCw5ICsxMTIwLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHMzY19mYl9yZWxlYXNlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHN0cnVjdCBzM2NfZmJfd2luICp3aW4pCiB7CisJdTMyIGRhdGE7CisKIAlpZiAod2luLT5mYmluZm8pIHsKKwkJaWYgKHNmYi0+dmFyaWFudC5oYXNfc2hhZG93Y29uKSB7CisJCQlkYXRhID0gcmVhZGwoc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwkJCWRhdGEgJj0gflNIQURPV0NPTl9DSHhfRU5BQkxFKHdpbi0+aW5kZXgpOworCQkJZGF0YSAmPSB+U0hBRE9XQ09OX0NIeF9MT0NBTF9FTkFCTEUod2luLT5pbmRleCk7CisJCQl3cml0ZWwoZGF0YSwgc2ZiLT5yZWdzICsgU0hBRE9XQ09OKTsKKwkJfQogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHdpbi0+ZmJpbmZvKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZ3aW4tPmZiaW5mby0+Y21hcCk7CisJCWlmICh3aW4tPmZiaW5mby0+Y21hcC5sZW4pCisJCQlmYl9kZWFsbG9jX2NtYXAoJndpbi0+ZmJpbmZvLT5jbWFwKTsKIAkJczNjX2ZiX2ZyZWVfbWVtb3J5KHNmYiwgd2luKTsKIAkJZnJhbWVidWZmZXJfcmVsZWFzZSh3aW4tPmZiaW5mbyk7CiAJfQpAQCAtNzM1LDEyICsxMTQwLDE0IEBACiAvKioKICAqIHMzY19mYl9wcm9iZV93aW4oKSAtIHJlZ2lzdGVyIGFuIGhhcmR3YXJlIHdpbmRvdwogICogQHNmYjogVGhlIGJhc2UgcmVzb3VyY2VzIGZvciB0aGUgaGFyZHdhcmUKKyAqIEB2YXJpYW50OiBUaGUgdmFyaWFudCBpbmZvcm1hdGlvbiBmb3IgdGhpcyB3aW5kb3cuCiAgKiBAcmVzOiBQb2ludGVyIHRvIHdoZXJlIHRvIHBsYWNlIHRoZSByZXN1bHRhbnQgd2luZG93LgogICoKICAqIEFsbG9jYXRlIGFuZCBkbyB0aGUgYmFzaWMgaW5pdGlhbGlzYXRpb24gZm9yIG9uZSBvZiB0aGUgaGFyZHdhcmUncyBncmFwaGljcwogICogd2luZG93cy4KICAqLwogc3RhdGljIGludCBfX2RldmluaXQgczNjX2ZiX3Byb2JlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHVuc2lnbmVkIGludCB3aW5fbm8sCisJCQkJICAgICAgc3RydWN0IHMzY19mYl93aW5fdmFyaWFudCAqdmFyaWFudCwKIAkJCQkgICAgICBzdHJ1Y3QgczNjX2ZiX3dpbiAqKnJlcykKIHsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKQEAgLTc1MSw5ICsxMTU4LDExIEBACiAJaW50IHBhbGV0dGVfc2l6ZTsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZyhzZmItPmRldiwgInByb2Jpbmcgd2luZG93ICVkXG4iLCB3aW5fbm8pOworCWRldl9kYmcoc2ZiLT5kZXYsICJwcm9iaW5nIHdpbmRvdyAlZCwgdmFyaWFudCAlcFxuIiwgd2luX25vLCB2YXJpYW50KTsKIAotCXBhbGV0dGVfc2l6ZSA9IHMzY19mYl93aW5fcGFsX3NpemUod2luX25vKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZmItPnZzeW5jX2luZm8ud2FpdCk7CisKKwlwYWxldHRlX3NpemUgPSB2YXJpYW50LT5wYWxldHRlX3N6ICogNDsKIAogCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2ZiX3dpbikgKwogCQkJCSAgIHBhbGV0dGVfc2l6ZSAqIHNpemVvZih1MzIpLCBzZmItPmRldik7CkBAIC03NzAsNyArMTE3OSw5IEBACiAJV0FSTl9PTih3aW5kYXRhLT53aW5fbW9kZS55cmVzID09IDApOwogCiAJd2luID0gZmJpbmZvLT5wYXI7CisJKnJlcyA9IHdpbjsKIAl2YXIgPSAmZmJpbmZvLT52YXI7CisJd2luLT52YXJpYW50ID0gKnZhcmlhbnQ7CiAJd2luLT5mYmluZm8gPSBmYmluZm87CiAJd2luLT5wYXJlbnQgPSBzZmI7CiAJd2luLT53aW5kYXRhID0gd2luZGF0YTsKQEAgLTc4NCw3ICsxMTk1LDI0IEBACiAJfQogCiAJLyogc2V0dXAgdGhlIHIvYi9nIHBvc2l0aW9ucyBmb3IgdGhlIHdpbmRvdydzIHBhbGV0dGUgKi8KLQlzM2NfZmJfaW5pdF9wYWxldHRlKHdpbl9ubywgJndpbi0+cGFsZXR0ZSk7CisJaWYgKHdpbi0+dmFyaWFudC5wYWxldHRlXzE2YnBwKSB7CisJCS8qIFNldCBSR0IgNTo2OjUgYXMgZGVmYXVsdCAqLworCQl3aW4tPnBhbGV0dGUuci5vZmZzZXQgPSAxMTsKKwkJd2luLT5wYWxldHRlLnIubGVuZ3RoID0gNTsKKwkJd2luLT5wYWxldHRlLmcub2Zmc2V0ID0gNTsKKwkJd2luLT5wYWxldHRlLmcubGVuZ3RoID0gNjsKKwkJd2luLT5wYWxldHRlLmIub2Zmc2V0ID0gMDsKKwkJd2luLT5wYWxldHRlLmIubGVuZ3RoID0gNTsKKworCX0gZWxzZSB7CisJCS8qIFNldCA4YnBwIG9yIDhicHAgYW5kIDFiaXQgYWxwaGEgKi8KKwkJd2luLT5wYWxldHRlLnIub2Zmc2V0ID0gMTY7CisJCXdpbi0+cGFsZXR0ZS5yLmxlbmd0aCA9IDg7CisJCXdpbi0+cGFsZXR0ZS5nLm9mZnNldCA9IDg7CisJCXdpbi0+cGFsZXR0ZS5nLmxlbmd0aCA9IDg7CisJCXdpbi0+cGFsZXR0ZS5iLm9mZnNldCA9IDA7CisJCXdpbi0+cGFsZXR0ZS5iLmxlbmd0aCA9IDg7CisJfQogCiAJLyogc2V0dXAgdGhlIGluaXRpYWwgdmlkZW8gbW9kZSBmcm9tIHRoZSB3aW5kb3cgKi8KIAlmYl92aWRlb21vZGVfdG9fdmFyKCZmYmluZm8tPnZhciwgaW5pdG1vZGUpOwpAQCAtODA4LDcgKzEyMzYsNyBAQAogCiAJLyogY3JlYXRlIGluaXRpYWwgY29sb3VyIG1hcCAqLwogCi0JcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpbmZvLT5jbWFwLCBzM2NfZmJfd2luX3BhbF9zaXplKHdpbl9ubyksIDEpOworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaW5mby0+Y21hcCwgd2luLT52YXJpYW50LnBhbGV0dGVfc3osIDEpOwogCWlmIChyZXQgPT0gMCkKIAkJZmJfc2V0X2NtYXAoJmZiaW5mby0+Y21hcCwgZmJpbmZvKTsKIAllbHNlCkBAIC04MjYsNyArMTI1NCw2IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JKnJlcyA9IHdpbjsKIAlkZXZfaW5mbyhzZmItPmRldiwgIndpbmRvdyAlZDogZmIgJXNcbiIsIHdpbl9ubywgZmJpbmZvLT5maXguaWQpOwogCiAJcmV0dXJuIDA7CkBAIC04NDIsMTggKzEyNjksMTkgQEAKIHN0YXRpYyB2b2lkIHMzY19mYl9jbGVhcl93aW4oc3RydWN0IHMzY19mYiAqc2ZiLCBpbnQgd2luKQogewogCXZvaWQgX19pb21lbSAqcmVncyA9IHNmYi0+cmVnczsKKwl1MzIgcmVnOwogCi0Jd3JpdGVsKDAsIHJlZ3MgKyBXSU5DT04od2luKSk7Ci0Jd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV3hLRVlDT055KHdpbiwgMCkpOwotCXdyaXRlbCgweGZmZmZmZiwgcmVncyArIFd4S0VZQ09OeSh3aW4sIDEpKTsKLQotCXdyaXRlbCgwLCByZWdzICsgVklET1NEX0Eod2luKSk7Ci0Jd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQih3aW4pKTsKLQl3cml0ZWwoMCwgcmVncyArIFZJRE9TRF9DKHdpbikpOworCXdyaXRlbCgwLCByZWdzICsgc2ZiLT52YXJpYW50LndpbmNvbiArICh3aW4gKiA0KSk7CisJd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQSh3aW4sIHNmYi0+dmFyaWFudCkpOworCXdyaXRlbCgwLCByZWdzICsgVklET1NEX0Iod2luLCBzZmItPnZhcmlhbnQpKTsKKwl3cml0ZWwoMCwgcmVncyArIFZJRE9TRF9DKHdpbiwgc2ZiLT52YXJpYW50KSk7CisJcmVnID0gcmVhZGwocmVncyArIFNIQURPV0NPTik7CisJd3JpdGVsKHJlZyAmIH5TSEFET1dDT05fV0lOeF9QUk9URUNUKHdpbiksIHJlZ3MgKyBTSEFET1dDT04pOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgczNjX2ZiX2RyaXZlcmRhdGEgKmZiZHJ2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQ7CiAJc3RydWN0IHMzY19mYiAqc2ZiOwpAQCAtODYxLDYgKzEyODksMTMgQEAKIAlpbnQgd2luOwogCWludCByZXQgPSAwOwogCisJZmJkcnYgPSAoc3RydWN0IHMzY19mYl9kcml2ZXJkYXRhICopcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoZmJkcnYtPnZhcmlhbnQubnJfd2luZG93cyA+IFMzQ19GQl9NQVhfV0lOKSB7CisJCWRldl9lcnIoZGV2LCAidG9vIG1hbnkgd2luZG93cywgY2Fubm90IGF0dGFjaFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKCFwZCkgewogCQlkZXZfZXJyKGRldiwgIm5vIHBsYXRmb3JtIGRhdGEgc3BlY2lmaWVkXG4iKTsKQEAgLTg3Myw4ICsxMzA4LDExIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWRldl9kYmcoZGV2LCAiYWxsb2NhdGUgbmV3IGZyYW1lYnVmZmVyICVwXG4iLCBzZmIpOworCiAJc2ZiLT5kZXYgPSBkZXY7CiAJc2ZiLT5wZGF0YSA9IHBkOworCXNmYi0+dmFyaWFudCA9IGZiZHJ2LT52YXJpYW50OwogCiAJc2ZiLT5idXNfY2xrID0gY2xrX2dldChkZXYsICJsY2QiKTsKIAlpZiAoSVNfRVJSKHNmYi0+YnVzX2NsaykpIHsKQEAgLTkwNiw2ICsxMzQ0LDIwIEBACiAJCWdvdG8gZXJyX3JlcV9yZWdpb247CiAJfQogCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhY3F1aXJlIGlycSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCXNmYi0+aXJxX25vID0gcmVzLT5zdGFydDsKKwlyZXQgPSByZXF1ZXN0X2lycShzZmItPmlycV9ubywgczNjX2ZiX2lycSwKKwkJCSAgMCwgInMzY19mYiIsIHNmYik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImlycSByZXF1ZXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCiAJZGV2X2RiZyhkZXYsICJnb3QgcmVzb3VyY2VzIChyZWdzICVwKSwgcHJvYmluZyB3aW5kb3dzXG4iLCBzZmItPnJlZ3MpOwogCiAJLyogc2V0dXAgZ3BpbyBhbmQgb3V0cHV0IHBvbGFyaXR5IGNvbnRyb2xzICovCkBAIC05MTYsMjEgKzEzNjgsMzQgQEAKIAogCS8qIHplcm8gYWxsIHdpbmRvd3MgYmVmb3JlIHdlIGRvIGFueXRoaW5nICovCiAKLQlmb3IgKHdpbiA9IDA7IHdpbiA8IFMzQ19GQl9NQVhfV0lOOyB3aW4rKykKKwlmb3IgKHdpbiA9IDA7IHdpbiA8IGZiZHJ2LT52YXJpYW50Lm5yX3dpbmRvd3M7IHdpbisrKQogCQlzM2NfZmJfY2xlYXJfd2luKHNmYiwgd2luKTsKIAorCS8qIGluaXRpYWxpc2UgY29sb3VyIGtleSBjb250cm9scyAqLworCWZvciAod2luID0gMDsgd2luIDwgKGZiZHJ2LT52YXJpYW50Lm5yX3dpbmRvd3MgLSAxKTsgd2luKyspIHsKKwkJdm9pZCBfX2lvbWVtICpyZWdzID0gc2ZiLT5yZWdzICsgc2ZiLT52YXJpYW50LmtleWNvbjsKKworCQlyZWdzICs9ICh3aW4gKiA4KTsKKwkJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV0tFWUNPTjApOworCQl3cml0ZWwoMHhmZmZmZmYsIHJlZ3MgKyBXS0VZQ09OMSk7CisJfQorCiAJLyogd2UgaGF2ZSB0aGUgcmVnaXN0ZXIgc2V0dXAsIHN0YXJ0IGFsbG9jYXRpbmcgZnJhbWVidWZmZXJzICovCiAKLQlmb3IgKHdpbiA9IDA7IHdpbiA8IFMzQ19GQl9NQVhfV0lOOyB3aW4rKykgeworCWZvciAod2luID0gMDsgd2luIDwgZmJkcnYtPnZhcmlhbnQubnJfd2luZG93czsgd2luKyspIHsKIAkJaWYgKCFwZC0+d2luW3dpbl0pCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBzM2NfZmJfcHJvYmVfd2luKHNmYiwgd2luLCAmc2ZiLT53aW5kb3dzW3dpbl0pOworCQlpZiAoIXBkLT53aW5bd2luXS0+d2luX21vZGUucGl4Y2xvY2spCisJCQlzM2NfZmJfbWlzc2luZ19waXhjbG9jaygmcGQtPndpblt3aW5dLT53aW5fbW9kZSk7CisKKwkJcmV0ID0gczNjX2ZiX3Byb2JlX3dpbihzZmIsIHdpbiwgZmJkcnYtPndpblt3aW5dLAorCQkJCSAgICAgICAmc2ZiLT53aW5kb3dzW3dpbl0pOwogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyAlZFxuIiwgd2luKTsKIAkJCWZvciAoOyB3aW4gPj0gMDsgd2luLS0pCiAJCQkJczNjX2ZiX3JlbGVhc2Vfd2luKHNmYiwgc2ZiLT53aW5kb3dzW3dpbl0pOwotCQkJZ290byBlcnJfaW9yZW1hcDsKKwkJCWdvdG8gZXJyX2lycTsKIAkJfQogCX0KIApAQCAtOTM4LDYgKzE0MDMsOSBAQAogCiAJcmV0dXJuIDA7CiAKK2Vycl9pcnE6CisJZnJlZV9pcnEoc2ZiLT5pcnFfbm8sIHNmYik7CisKIGVycl9pb3JlbWFwOgogCWlvdW5tYXAoc2ZiLT5yZWdzKTsKIApAQCAtOTcwLDYgKzE0MzgsOCBAQAogCQlpZiAoc2ZiLT53aW5kb3dzW3dpbl0pCiAJCQlzM2NfZmJfcmVsZWFzZV93aW4oc2ZiLCBzZmItPndpbmRvd3Nbd2luXSk7CiAKKwlmcmVlX2lycShzZmItPmlycV9ubywgc2ZiKTsKKwogCWlvdW5tYXAoc2ZiLT5yZWdzKTsKIAogCWNsa19kaXNhYmxlKHNmYi0+YnVzX2Nsayk7CkBAIC0xMDE2LDkgKzE0ODYsMTcgQEAKIAl3cml0ZWwocGQtPnZpZGNvbjEsIHNmYi0+cmVncyArIFZJRENPTjEpOwogCiAJLyogemVybyBhbGwgd2luZG93cyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgKi8KLQlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IFMzQ19GQl9NQVhfV0lOOyB3aW5fbm8rKykKKwlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IHNmYi0+dmFyaWFudC5ucl93aW5kb3dzOyB3aW5fbm8rKykKIAkJczNjX2ZiX2NsZWFyX3dpbihzZmIsIHdpbl9ubyk7CiAKKwlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IHNmYi0+dmFyaWFudC5ucl93aW5kb3dzIC0gMTsgd2luX25vKyspIHsKKwkJdm9pZCBfX2lvbWVtICpyZWdzID0gc2ZiLT5yZWdzICsgc2ZiLT52YXJpYW50LmtleWNvbjsKKworCQlyZWdzICs9ICh3aW5fbm8gKiA4KTsKKwkJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV0tFWUNPTjApOworCQl3cml0ZWwoMHhmZmZmZmYsIHJlZ3MgKyBXS0VZQ09OMSk7CisJfQorCiAJLyogcmVzdG9yZSBmcmFtZWJ1ZmZlcnMgKi8KIAlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IFMzQ19GQl9NQVhfV0lOOyB3aW5fbm8rKykgewogCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKQEAgLTEwMzYsMTEgKzE1MTQsMjA4IEBACiAjZGVmaW5lIHMzY19mYl9yZXN1bWUgIE5VTEwKICNlbmRpZgogCisKKyNkZWZpbmUgVkFMSURfQlBQMTI0IChWQUxJRF9CUFAoMSkgfCBWQUxJRF9CUFAoMikgfCBWQUxJRF9CUFAoNCkpCisjZGVmaW5lIFZBTElEX0JQUDEyNDggKFZBTElEX0JQUDEyNCB8IFZBTElEX0JQUCg4KSkKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfd2luX3ZhcmlhbnQgczNjX2ZiX2RhdGFfNjR4eF93aW5zW10gPSB7CisJWzBdID0geworCQkuaGFzX29zZF9jCT0gMSwKKwkJLm9zZF9zaXplX29mZgk9IDB4OCwKKwkJLnBhbGV0dGVfc3oJPSAyNTYsCisJCS52YWxpZF9icHAJPSBWQUxJRF9CUFAxMjQ4IHwgVkFMSURfQlBQKDE2KSB8IFZBTElEX0JQUCgyNCksCisJfSwKKwlbMV0gPSB7CisJCS5oYXNfb3NkX2MJPSAxLAorCQkuaGFzX29zZF9kCT0gMSwKKwkJLm9zZF9zaXplX29mZgk9IDB4MTIsCisJCS5oYXNfb3NkX2FscGhhCT0gMSwKKwkJLnBhbGV0dGVfc3oJPSAyNTYsCisJCS52YWxpZF9icHAJPSAoVkFMSURfQlBQMTI0OCB8IFZBTElEX0JQUCgxNikgfAorCQkJCSAgIFZBTElEX0JQUCgxOCkgfCBWQUxJRF9CUFAoMTkpIHwKKwkJCQkgICBWQUxJRF9CUFAoMjQpIHwgVkFMSURfQlBQKDI1KSksCisJfSwKKwlbMl0gPSB7CisJCS5oYXNfb3NkX2MJPSAxLAorCQkuaGFzX29zZF9kCT0gMSwKKwkJLm9zZF9zaXplX29mZgk9IDB4MTIsCisJCS5oYXNfb3NkX2FscGhhCT0gMSwKKwkJLnBhbGV0dGVfc3oJPSAxNiwKKwkJLnBhbGV0dGVfMTZicHAJPSAxLAorCQkudmFsaWRfYnBwCT0gKFZBTElEX0JQUDEyNDggfCBWQUxJRF9CUFAoMTYpIHwKKwkJCQkgICBWQUxJRF9CUFAoMTgpIHwgVkFMSURfQlBQKDE5KSB8CisJCQkJICAgVkFMSURfQlBQKDI0KSB8IFZBTElEX0JQUCgyNSkpLAorCX0sCisJWzNdID0geworCQkuaGFzX29zZF9jCT0gMSwKKwkJLmhhc19vc2RfYWxwaGEJPSAxLAorCQkucGFsZXR0ZV9zegk9IDE2LAorCQkucGFsZXR0ZV8xNmJwcAk9IDEsCisJCS52YWxpZF9icHAJPSAoVkFMSURfQlBQMTI0ICB8IFZBTElEX0JQUCgxNikgfAorCQkJCSAgIFZBTElEX0JQUCgxOCkgfCBWQUxJRF9CUFAoMTkpIHwKKwkJCQkgICBWQUxJRF9CUFAoMjQpIHwgVkFMSURfQlBQKDI1KSksCisJfSwKKwlbNF0gPSB7CisJCS5oYXNfb3NkX2MJPSAxLAorCQkuaGFzX29zZF9hbHBoYQk9IDEsCisJCS5wYWxldHRlX3N6CT0gNCwKKwkJLnBhbGV0dGVfMTZicHAJPSAxLAorCQkudmFsaWRfYnBwCT0gKFZBTElEX0JQUCgxKSB8IFZBTElEX0JQUCgyKSB8CisJCQkJICAgVkFMSURfQlBQKDE2KSB8IFZBTElEX0JQUCgxOCkgfAorCQkJCSAgIFZBTElEX0JQUCgyNCkgfCBWQUxJRF9CUFAoMjUpKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSBzM2NfZmJfZGF0YV82NHh4ID0geworCS52YXJpYW50ID0geworCQkubnJfd2luZG93cwk9IDUsCisJCS52aWR0Y29uCT0gVklEVENPTjAsCisJCS53aW5jb24JCT0gV0lOQ09OKDApLAorCQkud2lubWFwCQk9IFdJTnhNQVAoMCksCisJCS5rZXljb24JCT0gV0tFWUNPTiwKKwkJLm9zZAkJPSBWSURPU0RfQkFTRSwKKwkJLm9zZF9zdHJpZGUJPSAxNiwKKwkJLmJ1Zl9zdGFydAk9IFZJRFdfQlVGX1NUQVJUKDApLAorCQkuYnVmX3NpemUJPSBWSURXX0JVRl9TSVpFKDApLAorCQkuYnVmX2VuZAk9IFZJRFdfQlVGX0VORCgwKSwKKworCQkucGFsZXR0ZSA9IHsKKwkJCVswXSA9IDB4NDAwLAorCQkJWzFdID0gMHg4MDAsCisJCQlbMl0gPSAweDMwMCwKKwkJCVszXSA9IDB4MzIwLAorCQkJWzRdID0gMHgzNDAsCisJCX0sCisKKwkJLmhhc19wcnRjb24JPSAxLAorCX0sCisJLndpblswXQk9ICZzM2NfZmJfZGF0YV82NHh4X3dpbnNbMF0sCisJLndpblsxXQk9ICZzM2NfZmJfZGF0YV82NHh4X3dpbnNbMV0sCisJLndpblsyXQk9ICZzM2NfZmJfZGF0YV82NHh4X3dpbnNbMl0sCisJLndpblszXQk9ICZzM2NfZmJfZGF0YV82NHh4X3dpbnNbM10sCisJLndpbls0XQk9ICZzM2NfZmJfZGF0YV82NHh4X3dpbnNbNF0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19mYl9kcml2ZXJkYXRhIHMzY19mYl9kYXRhX3M1cGMxMDAgPSB7CisJLnZhcmlhbnQgPSB7CisJCS5ucl93aW5kb3dzCT0gNSwKKwkJLnZpZHRjb24JPSBWSURUQ09OMCwKKwkJLndpbmNvbgkJPSBXSU5DT04oMCksCisJCS53aW5tYXAJCT0gV0lOeE1BUCgwKSwKKwkJLmtleWNvbgkJPSBXS0VZQ09OLAorCQkub3NkCQk9IFZJRE9TRF9CQVNFLAorCQkub3NkX3N0cmlkZQk9IDE2LAorCQkuYnVmX3N0YXJ0CT0gVklEV19CVUZfU1RBUlQoMCksCisJCS5idWZfc2l6ZQk9IFZJRFdfQlVGX1NJWkUoMCksCisJCS5idWZfZW5kCT0gVklEV19CVUZfRU5EKDApLAorCisJCS5wYWxldHRlID0geworCQkJWzBdID0gMHgyNDAwLAorCQkJWzFdID0gMHgyODAwLAorCQkJWzJdID0gMHgyYzAwLAorCQkJWzNdID0gMHgzMDAwLAorCQkJWzRdID0gMHgzNDAwLAorCQl9LAorCisJCS5oYXNfcHJ0Y29uCT0gMSwKKwl9LAorCS53aW5bMF0JPSAmczNjX2ZiX2RhdGFfNjR4eF93aW5zWzBdLAorCS53aW5bMV0JPSAmczNjX2ZiX2RhdGFfNjR4eF93aW5zWzFdLAorCS53aW5bMl0JPSAmczNjX2ZiX2RhdGFfNjR4eF93aW5zWzJdLAorCS53aW5bM10JPSAmczNjX2ZiX2RhdGFfNjR4eF93aW5zWzNdLAorCS53aW5bNF0JPSAmczNjX2ZiX2RhdGFfNjR4eF93aW5zWzRdLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSBzM2NfZmJfZGF0YV9zNXB2MjEwID0geworCS52YXJpYW50ID0geworCQkubnJfd2luZG93cwk9IDUsCisJCS52aWR0Y29uCT0gVklEVENPTjAsCisJCS53aW5jb24JCT0gV0lOQ09OKDApLAorCQkud2lubWFwCQk9IFdJTnhNQVAoMCksCisJCS5rZXljb24JCT0gV0tFWUNPTiwKKwkJLm9zZAkJPSBWSURPU0RfQkFTRSwKKwkJLm9zZF9zdHJpZGUJPSAxNiwKKwkJLmJ1Zl9zdGFydAk9IFZJRFdfQlVGX1NUQVJUKDApLAorCQkuYnVmX3NpemUJPSBWSURXX0JVRl9TSVpFKDApLAorCQkuYnVmX2VuZAk9IFZJRFdfQlVGX0VORCgwKSwKKworCQkucGFsZXR0ZSA9IHsKKwkJCVswXSA9IDB4MjQwMCwKKwkJCVsxXSA9IDB4MjgwMCwKKwkJCVsyXSA9IDB4MmMwMCwKKwkJCVszXSA9IDB4MzAwMCwKKwkJCVs0XSA9IDB4MzQwMCwKKwkJfSwKKworCQkuaGFzX3NoYWRvd2Nvbgk9IDEsCisJfSwKKwkud2luWzBdCT0gJnMzY19mYl9kYXRhXzY0eHhfd2luc1swXSwKKwkud2luWzFdCT0gJnMzY19mYl9kYXRhXzY0eHhfd2luc1sxXSwKKwkud2luWzJdCT0gJnMzY19mYl9kYXRhXzY0eHhfd2luc1syXSwKKwkud2luWzNdCT0gJnMzY19mYl9kYXRhXzY0eHhfd2luc1szXSwKKwkud2luWzRdCT0gJnMzY19mYl9kYXRhXzY0eHhfd2luc1s0XSwKK307CisKKy8qIFMzQzI0NDMvUzNDMjQxNiBzdHlsZSBoYXJkd2FyZSAqLworc3RhdGljIHN0cnVjdCBzM2NfZmJfZHJpdmVyZGF0YSBzM2NfZmJfZGF0YV9zM2MyNDQzID0geworCS52YXJpYW50ID0geworCQkubnJfd2luZG93cwk9IDIsCisJCS5pc18yNDQzCT0gMSwKKworCQkudmlkdGNvbgk9IDB4MDgsCisJCS53aW5jb24JCT0gMHgxNCwKKwkJLndpbm1hcAkJPSAweGQwLAorCQkua2V5Y29uCQk9IDB4YjAsCisJCS5vc2QJCT0gMHgyOCwKKwkJLm9zZF9zdHJpZGUJPSAxMiwKKwkJLmJ1Zl9zdGFydAk9IDB4NjQsCisJCS5idWZfc2l6ZQk9IDB4OTQsCisJCS5idWZfZW5kCT0gMHg3YywKKworCQkucGFsZXR0ZSA9IHsKKwkJCVswXSA9IDB4NDAwLAorCQkJWzFdID0gMHg4MDAsCisJCX0sCisJfSwKKwkud2luWzBdID0gJihzdHJ1Y3QgczNjX2ZiX3dpbl92YXJpYW50KSB7CisJCS5wYWxldHRlX3N6CT0gMjU2LAorCQkudmFsaWRfYnBwCT0gVkFMSURfQlBQMTI0OCB8IFZBTElEX0JQUCgxNikgfCBWQUxJRF9CUFAoMjQpLAorCX0sCisJLndpblsxXSA9ICYoc3RydWN0IHMzY19mYl93aW5fdmFyaWFudCkgeworCQkuaGFzX29zZF9jCT0gMSwKKwkJLmhhc19vc2RfYWxwaGEJPSAxLAorCQkucGFsZXR0ZV9zegk9IDI1NiwKKwkJLnZhbGlkX2JwcAk9IChWQUxJRF9CUFAxMjQ4IHwgVkFMSURfQlBQKDE2KSB8CisJCQkJICAgVkFMSURfQlBQKDE4KSB8IFZBTElEX0JQUCgxOSkgfAorCQkJCSAgIFZBTElEX0JQUCgyNCkgfCBWQUxJRF9CUFAoMjUpIHwKKwkJCQkgICBWQUxJRF9CUFAoMjgpKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjX2ZiX2RyaXZlcl9pZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJzM2MtZmIiLAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmczNjX2ZiX2RhdGFfNjR4eCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzNXBjMTAwLWZiIiwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJnMzY19mYl9kYXRhX3M1cGMxMDAsCisJfSwgeworCQkubmFtZQkJPSAiczVwdjIxMC1mYiIsCisJCS5kcml2ZXJfZGF0YQk9ICh1bnNpZ25lZCBsb25nKSZzM2NfZmJfZGF0YV9zNXB2MjEwLAorCX0sIHsKKwkJLm5hbWUJCT0gInMzYzI0NDMtZmIiLAorCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmczNjX2ZiX2RhdGFfczNjMjQ0MywKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHMzY19mYl9kcml2ZXJfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2ZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjX2ZiX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjX2ZiX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBzM2NfZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzY19mYl9yZXN1bWUsCisJLmlkX3RhYmxlCT0gczNjX2ZiX2RyaXZlcl9pZHMsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInMzYy1mYiIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zaF9taXBpX2RzaS5jIGIvZHJpdmVycy92aWRlby9zaF9taXBpX2RzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTljZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL3NoX21pcGlfZHNpLmMKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBSZW5lc2FzIFNILW1vYmlsZSBNSVBJIERTSSBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfbGNkYy5oPgorCisjZGVmaW5lIENNVFNSVENUUgkweDgwZDAKKyNkZWZpbmUgQ01UU1JUUkVRCTB4ODA3MAorCisjZGVmaW5lIERTSUlOVEUJCTB4MDA2MAorCisvKiBFLmcuLCBzaDczNzIgaGFzIDIgTUlQSS1EU0lzIC0gb25lIGZvciBlYWNoIExDREMgKi8KKyNkZWZpbmUgTUFYX1NIX01JUElfRFNJIDIKKworc3RydWN0IHNoX21pcGkgeworCXZvaWQgX19pb21lbQkqYmFzZTsKKwlzdHJ1Y3QgY2xrCSpkc2l0X2NsazsKKwlzdHJ1Y3QgY2xrCSpkc2lwX2NsazsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWlwaSAqbWlwaV9kc2lbTUFYX1NIX01JUElfRFNJXTsKKworLyogUHJvdGVjdCB0aGUgYWJvdmUgYXJyYXkgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoYXJyYXlfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfbWlwaSAqc2hfbWlwaV9ieV9oYW5kbGUoaW50IGhhbmRsZSkKK3sKKwlpZiAoaGFuZGxlID49IEFSUkFZX1NJWkUobWlwaV9kc2kpIHx8IGhhbmRsZSA8IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIG1pcGlfZHNpW2hhbmRsZV07Cit9CisKK3N0YXRpYyBpbnQgc2hfbWlwaV9zZW5kX3Nob3J0KHN0cnVjdCBzaF9taXBpICptaXBpLCB1OCBkc2lfY21kLAorCQkJICAgICAgdTggY21kLCB1OCBwYXJhbSkKK3sKKwl1MzIgZGF0YSA9IChkc2lfY21kIDw8IDI0KSB8IChjbWQgPDwgMTYpIHwgKHBhcmFtIDw8IDgpOworCWludCBjbnQgPSAxMDA7CisKKwkvKiB0cmFuc21pdCBhIHNob3J0IHBhY2tldCB0byBMQ0QgcGFuZWwgKi8KKwlpb3dyaXRlMzIoMSB8IGRhdGEsIG1pcGktPmJhc2UgKyAweDgwZDApOyAvKiBDTVRTUlRDVFIgKi8KKwlpb3dyaXRlMzIoMSwgbWlwaS0+YmFzZSArIDB4ODA3MCk7IC8qIENNVFNSVFJFUSAqLworCisJd2hpbGUgKChpb3JlYWQzMihtaXBpLT5iYXNlICsgMHg4MDcwKSAmIDEpICYmIC0tY250KQorCQl1ZGVsYXkoMSk7CisKKwlyZXR1cm4gY250ID8gMCA6IC1FVElNRURPVVQ7Cit9CisKKyNkZWZpbmUgTENEX0NIQU4yTUlQSShjKSAoKGMpIDwgTENEQ19DSEFOX01BSU5MQ0QgfHwgKGMpID4gTENEQ19DSEFOX1NVQkxDRCA/IFwKKwkJCQktRUlOVkFMIDogKGMpIC0gMSkKKworc3RhdGljIGludCBzaF9taXBpX2RjcyhpbnQgaGFuZGxlLCB1OCBjbWQpCit7CisJc3RydWN0IHNoX21pcGkgKm1pcGkgPSBzaF9taXBpX2J5X2hhbmRsZShMQ0RfQ0hBTjJNSVBJKGhhbmRsZSkpOworCWlmICghbWlwaSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHNoX21pcGlfc2VuZF9zaG9ydChtaXBpLCBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEUsIGNtZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgc2hfbWlwaV9kY3NfcGFyYW0oaW50IGhhbmRsZSwgdTggY21kLCB1OCBwYXJhbSkKK3sKKwlzdHJ1Y3Qgc2hfbWlwaSAqbWlwaSA9IHNoX21pcGlfYnlfaGFuZGxlKExDRF9DSEFOMk1JUEkoaGFuZGxlKSk7CisJaWYgKCFtaXBpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gc2hfbWlwaV9zZW5kX3Nob3J0KG1pcGksIE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTSwgY21kLAorCQkJCSAgcGFyYW0pOworfQorCitzdGF0aWMgdm9pZCBzaF9taXBpX2RzaV9lbmFibGUoc3RydWN0IHNoX21pcGkgKm1pcGksIGJvb2wgZW5hYmxlKQoreworCS8qCisJICogZW5hYmxlIExDREMgZGF0YSB0eCwgdHJhbnNpdGlvbiB0byBMUFMgYWZ0ZXIgY29tcGxldGlvbiBvZiBlYWNoIEhTCisJICogcGFja2V0CisJICovCisJaW93cml0ZTMyKDB4MDAwMDAwMDIgfCBlbmFibGUsIG1pcGktPmJhc2UgKyAweDgwMDApOyAvKiBEVENUUiAqLworfQorCitzdGF0aWMgdm9pZCBzaF9taXBpX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX21pcGkgKm1pcGkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNoX21pcGlfZHNpX2VuYWJsZShtaXBpLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1pcGlfZGlzcGxheV9vbih2b2lkICphcmcsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzaF9taXBpICptaXBpID0gYXJnOworCisJc2hfbWlwaV9kc2lfZW5hYmxlKG1pcGksIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBtaXBpX2Rpc3BsYXlfb2ZmKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2hfbWlwaSAqbWlwaSA9IGFyZzsKKworCXNoX21pcGlfZHNpX2VuYWJsZShtaXBpLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX21pcGlfc2V0dXAoc3RydWN0IHNoX21pcGkgKm1pcGksCisJCQkJc3RydWN0IHNoX21pcGlfZHNpX2luZm8gKnBkYXRhKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IG1pcGktPmJhc2U7CisJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnICpjaCA9IHBkYXRhLT5sY2RfY2hhbjsKKwl1MzIgcGN0eXBlLCBkYXRhdHlwZSwgcGl4Zm10OworCXUzMiBsaW5lbGVuZ3RoOworCWJvb2wgeXV2OworCisJLyogU2VsZWN0IGRhdGEgZm9ybWF0ICovCisJc3dpdGNoIChwZGF0YS0+ZGF0YV9mb3JtYXQpIHsKKwljYXNlIE1JUElfUkdCODg4OgorCQlwY3R5cGUgPSAwOworCQlkYXRhdHlwZSA9IE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMjQ7CisJCXBpeGZtdCA9IE1JUElfRENTX1BJWEVMX0ZNVF8yNEJJVDsKKwkJbGluZWxlbmd0aCA9IGNoLT5sY2RfY2ZnLnhyZXMgKiAzOworCQl5dXYgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX1JHQjU2NToKKwkJcGN0eXBlID0gMTsKKwkJZGF0YXR5cGUgPSBNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzE2OworCQlwaXhmbXQgPSBNSVBJX0RDU19QSVhFTF9GTVRfMTZCSVQ7CisJCWxpbmVsZW5ndGggPSBjaC0+bGNkX2NmZy54cmVzICogMjsKKwkJeXV2ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTUlQSV9SR0I2NjZfTFA6CisJCXBjdHlwZSA9IDI7CisJCWRhdGF0eXBlID0gTUlQSV9EU0lfUElYRUxfU1RSRUFNXzNCWVRFXzE4OworCQlwaXhmbXQgPSBNSVBJX0RDU19QSVhFTF9GTVRfMjRCSVQ7CisJCWxpbmVsZW5ndGggPSBjaC0+bGNkX2NmZy54cmVzICogMzsKKwkJeXV2ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTUlQSV9SR0I2NjY6CisJCXBjdHlwZSA9IDM7CisJCWRhdGF0eXBlID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8xODsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzE4QklUOworCQlsaW5lbGVuZ3RoID0gKGNoLT5sY2RfY2ZnLnhyZXMgKiAxOCArIDcpIC8gODsKKwkJeXV2ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTUlQSV9CR1I4ODg6CisJCXBjdHlwZSA9IDg7CisJCWRhdGF0eXBlID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8yNDsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzI0QklUOworCQlsaW5lbGVuZ3RoID0gY2gtPmxjZF9jZmcueHJlcyAqIDM7CisJCXl1diA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIE1JUElfQkdSNTY1OgorCQlwY3R5cGUgPSA5OworCQlkYXRhdHlwZSA9IE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTY7CisJCXBpeGZtdCA9IE1JUElfRENTX1BJWEVMX0ZNVF8xNkJJVDsKKwkJbGluZWxlbmd0aCA9IGNoLT5sY2RfY2ZnLnhyZXMgKiAyOworCQl5dXYgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0JHUjY2Nl9MUDoKKwkJcGN0eXBlID0gMHhhOworCQlkYXRhdHlwZSA9IE1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xODsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzI0QklUOworCQlsaW5lbGVuZ3RoID0gY2gtPmxjZF9jZmcueHJlcyAqIDM7CisJCXl1diA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIE1JUElfQkdSNjY2OgorCQlwY3R5cGUgPSAweGI7CisJCWRhdGF0eXBlID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8xODsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzE4QklUOworCQlsaW5lbGVuZ3RoID0gKGNoLT5sY2RfY2ZnLnhyZXMgKiAxOCArIDcpIC8gODsKKwkJeXV2ID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgTUlQSV9ZVVlWOgorCQlwY3R5cGUgPSA0OworCQlkYXRhdHlwZSA9IE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fWUNCQ1IxNjsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzE2QklUOworCQlsaW5lbGVuZ3RoID0gY2gtPmxjZF9jZmcueHJlcyAqIDI7CisJCXl1diA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgTUlQSV9VWVZZOgorCQlwY3R5cGUgPSA1OworCQlkYXRhdHlwZSA9IE1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fWUNCQ1IxNjsKKwkJcGl4Zm10ID0gTUlQSV9EQ1NfUElYRUxfRk1UXzE2QklUOworCQlsaW5lbGVuZ3RoID0gY2gtPmxjZF9jZmcueHJlcyAqIDI7CisJCXl1diA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgTUlQSV9ZVVY0MjBfTDoKKwkJcGN0eXBlID0gNjsKKwkJZGF0YXR5cGUgPSBNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNX1lDQkNSMTI7CisJCXBpeGZtdCA9IE1JUElfRENTX1BJWEVMX0ZNVF8xMkJJVDsKKwkJbGluZWxlbmd0aCA9IChjaC0+bGNkX2NmZy54cmVzICogMTIgKyA3KSAvIDg7CisJCXl1diA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgTUlQSV9ZVVY0MjA6CisJCXBjdHlwZSA9IDc7CisJCWRhdGF0eXBlID0gTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV9ZQ0JDUjEyOworCQlwaXhmbXQgPSBNSVBJX0RDU19QSVhFTF9GTVRfMTJCSVQ7CisJCS8qIExlbmd0aCBvZiBVL1YgbGluZSAqLworCQlsaW5lbGVuZ3RoID0gKGNoLT5sY2RfY2ZnLnhyZXMgKyAxKSAvIDI7CisJCXl1diA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoeXV2ICYmIGNoLT5pbnRlcmZhY2VfdHlwZSAhPSBZVVY0MjIpIHx8CisJICAgICgheXV2ICYmIGNoLT5pbnRlcmZhY2VfdHlwZSAhPSBSR0IyNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcmVzZXQgRFNJIGxpbmsgKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDAwMSwgYmFzZSk7IC8qIFNZU0NUUkwgKi8KKwkvKiBIb2xkIHJlc2V0IGZvciAxMDAgY3ljbGVzIG9mIHRoZSBzbG93ZXN0IG9mIGJ1cywgSFMgYnl0ZSBhbmQgTFAgY2xvY2sgKi8KKwl1ZGVsYXkoNTApOworCWlvd3JpdGUzMigweDAwMDAwMDAwLCBiYXNlKTsgLyogU1lTQ1RSTCAqLworCisJLyogc2V0dXAgRFNJIGxpbmsgKi8KKworCS8qCisJICogRGVmYXVsdCA9IFVMUFMgZW5hYmxlIHwKKwkgKglDb250ZW50aW9uIGRldGVjdGlvbiBlbmFibGVkIHwKKwkgKglFb1QgcGFja2V0IHRyYW5zbWlzc2lvbiBlbmFibGUgfAorCSAqCUNSQyBjaGVjayBlbmFibGUgfAorCSAqCUVDQyBjaGVjayBlbmFibGUKKwkgKiBhZGRpdGlvbmFsbHkgZW5hYmxlIGZpcnN0IHR3byBsYW5lcworCSAqLworCWlvd3JpdGUzMigweDAwMDAzNzAzLCBiYXNlICsgMHgwNCk7IC8qIFNZU0NPTkYgKi8KKwkvKgorCSAqIFRfd2FrZXVwID0gMHg3MDAwCisJICogVF9ocy10cmFpbCA9IDMKKwkgKiBUX2hzLXByZXBhcmUgPSAzCisJICogVF9jbGstdHJhaWwgPSAzCisJICogVF9jbGstcHJlcGFyZSA9IDIKKwkgKi8KKwlpb3dyaXRlMzIoMHg3MDAwMzMzMiwgYmFzZSArIDB4MDgpOyAvKiBUSU1TRVQgKi8KKwkvKiBubyByZXNwb25zZXMgcmVxdWVzdGVkICovCisJaW93cml0ZTMyKDB4MDAwMDAwMDAsIGJhc2UgKyAweDE4KTsgLyogUkVTUkVRU0VUMCAqLworCS8qIHJlcXVlc3QgcmVzcG9uc2UgdG8gcGFja2V0cyBvZiB0eXBlIDB4MjggKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDEwMCwgYmFzZSArIDB4MWMpOyAvKiBSRVNSRVFTRVQxICovCisJLyogSGlnaC1zcGVlZCB0cmFuc21pc3Npb24gdGltZW91dCwgZGVmYXVsdCAweGZmZmZmZmZmICovCisJaW93cml0ZTMyKDB4MGZmZmZmZmYsIGJhc2UgKyAweDIwKTsgLyogSFNUVE9WU0VUICovCisJLyogTFAgcmVjZXB0aW9uIHRpbWVvdXQsIGRlZmF1bHQgMHhmZmZmZmZmZiAqLworCWlvd3JpdGUzMigweDBmZmZmZmZmLCBiYXNlICsgMHgyNCk7IC8qIExQUlRPVlNFVCAqLworCS8qIFR1cm4tYXJvdW5kIHRpbWVvdXQsIGRlZmF1bHQgMHhmZmZmZmZmZiAqLworCWlvd3JpdGUzMigweDBmZmZmZmZmLCBiYXNlICsgMHgyOCk7IC8qIFRBVE9WU0VUICovCisJLyogUGVyaXBoZXJhbCByZXNldCB0aW1lb3V0LCBkZWZhdWx0IDB4ZmZmZmZmZmYgKi8KKwlpb3dyaXRlMzIoMHgwZmZmZmZmZiwgYmFzZSArIDB4MmMpOyAvKiBQUlRPVlNFVCAqLworCS8qIEVuYWJsZSB0aW1lb3V0IGNvdW50ZXJzICovCisJaW93cml0ZTMyKDB4MDAwMDBmMDAsIGJhc2UgKyAweDMwKTsgLyogRFNJQ1RSTCAqLworCS8qIEludGVycnVwdHMgbm90IHVzZWQsIGRpc2FibGUgYWxsICovCisJaW93cml0ZTMyKDAsIGJhc2UgKyBEU0lJTlRFKTsKKwkvKiBEU0ktVHggYmlhcyBvbiAqLworCWlvd3JpdGUzMigweDAwMDAwMDAxLCBiYXNlICsgMHg3MCk7IC8qIFBIWUNUUkwgKi8KKwl1ZGVsYXkoMjAwKTsKKwkvKiBEZWFzc2VydCByZXNldHMsIHBvd2VyIG9uLCBzZXQgbXVsdGlwbGllciAqLworCWlvd3JpdGUzMigweDAzMDcwYjAxLCBiYXNlICsgMHg3MCk7IC8qIFBIWUNUUkwgKi8KKworCS8qIHNldHVwIGwtYnJpZGdlICovCisKKwkvKgorCSAqIEVuYWJsZSB0cmFuc21pc3Npb24gb2YgYWxsIHBhY2tldHMsCisJICogdHJhbnNtaXQgTFBTIGFmdGVyIGVhY2ggSFMgcGFja2V0IGNvbXBsZXRpb24KKwkgKi8KKwlpb3dyaXRlMzIoMHgwMDAwMDAwNiwgYmFzZSArIDB4ODAwMCk7IC8qIERUQ1RSICovCisJLyogVlNZTkMgd2lkdGggPSAyICg8PCAxNykgKi8KKwlpb3dyaXRlMzIoMHgwMDA0MDAwMCB8IChwY3R5cGUgPDwgMTIpIHwgZGF0YXR5cGUsIGJhc2UgKyAweDgwMjApOyAvKiBWTUNUUjEgKi8KKwkvKgorCSAqIE5vbi1idXJzdCBtb2RlIHdpdGggc3luYyBwdWxzZXM6IFZTRSBhbmQgSFNFIGFyZSBvdXRwdXQsCisJICogSFNBIHBlcmlvZCBhbGxvd2VkLCBubyBjb21tYW5kcyBpbiBMUAorCSAqLworCWlvd3JpdGUzMigweDAwZTAwMDAwLCBiYXNlICsgMHg4MDI0KTsgLyogVk1DVFIyICovCisJLyoKKwkgKiAweDY2MCA9IDE2MzIgYnl0ZXMgcGVyIGxpbmUgKFJHQjI0LCA1NDQgcGl4ZWxzOiBzZWUKKwkgKiBzaF9tb2JpbGVfbGNkY19pbmZvLmNoWzBdLmxjZF9jZmcueHJlcyksIEhTQUxFTiA9IDEgLSBkZWZhdWx0CisJICogKHVudXNlZCwgc2luY2UgVk1DVFIyW0hTQUJNXSA9IDApCisJICovCisJaW93cml0ZTMyKDEgfCAobGluZWxlbmd0aCA8PCAxNiksIGJhc2UgKyAweDgwMjgpOyAvKiBWTUxFTjEgKi8KKworCW1zbGVlcCg1KTsKKworCS8qIHNldHVwIExDRCBwYW5lbCAqLworCisJLyogY2YuIGRyaXZlcnMvdmlkZW8vb21hcC9sY2RfbWlwaWQuYyAqLworCXNoX21pcGlfZGNzKGNoLT5jaGFuLCBNSVBJX0RDU19FWElUX1NMRUVQX01PREUpOworCW1zbGVlcCgxMjApOworCS8qCisJICogWzddIC0gUGFnZSBBZGRyZXNzIE1vZGUKKwkgKiBbNl0gLSBDb2x1bW4gQWRkcmVzcyBNb2RlCisJICogWzVdIC0gUGFnZSAvIENvbHVtbiBBZGRyZXNzIE1vZGUKKwkgKiBbNF0gLSBEaXNwbGF5IERldmljZSBMaW5lIFJlZnJlc2ggT3JkZXIKKwkgKiBbM10gLSBSR0IvQkdSIE9yZGVyCisJICogWzJdIC0gRGlzcGxheSBEYXRhIExhdGNoIERhdGEgT3JkZXIKKwkgKiBbMV0gLSBGbGlwIEhvcml6b250YWwKKwkgKiBbMF0gLSBGbGlwIFZlcnRpY2FsCisJICovCisJc2hfbWlwaV9kY3NfcGFyYW0oY2gtPmNoYW4sIE1JUElfRENTX1NFVF9BRERSRVNTX01PREUsIDB4MDApOworCS8qIGNmLiBzZXRfZGF0YV9saW5lcygpICovCisJc2hfbWlwaV9kY3NfcGFyYW0oY2gtPmNoYW4sIE1JUElfRENTX1NFVF9QSVhFTF9GT1JNQVQsCisJCQkgIHBpeGZtdCA8PCA0KTsKKwlzaF9taXBpX2RjcyhjaC0+Y2hhbiwgTUlQSV9EQ1NfU0VUX0RJU1BMQVlfT04pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX21pcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfbWlwaSAqbWlwaTsKKwlzdHJ1Y3Qgc2hfbWlwaV9kc2lfaW5mbyAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJdW5zaWduZWQgbG9uZyByYXRlLCBmX2N1cnJlbnQ7CisJaW50IGlkeCA9IHBkZXYtPmlkLCByZXQ7CisJY2hhciBkc2lwX2Nsa1tdID0gImRzaS5wX2NsayI7CisKKwlpZiAoIXJlcyB8fCBpZHggPj0gQVJSQVlfU0laRShtaXBpX2RzaSkgfHwgIXBkYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJmFycmF5X2xvY2spOworCWlmIChpZHggPCAwKQorCQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUobWlwaV9kc2kpICYmIG1pcGlfZHNpW2lkeF07IGlkeCsrKQorCQkJOworCisJaWYgKGlkeCA9PSBBUlJBWV9TSVpFKG1pcGlfZHNpKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZWZpbmRzbG90OworCX0KKworCW1pcGkgPSBremFsbG9jKHNpemVvZigqbWlwaSksIEdGUF9LRVJORUwpOworCWlmICghbWlwaSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVhbGxvYzsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1JUEkgcmVnaXN0ZXIgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcmVxcmVnOworCX0KKworCW1pcGktPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFtaXBpLT5iYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZW1hcDsKKwl9CisKKwltaXBpLT5kc2l0X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImRzaXRfY2xrIik7CisJaWYgKElTX0VSUihtaXBpLT5kc2l0X2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihtaXBpLT5kc2l0X2Nsayk7CisJCWdvdG8gZWNsa3RnZXQ7CisJfQorCisJZl9jdXJyZW50ID0gY2xrX2dldF9yYXRlKG1pcGktPmRzaXRfY2xrKTsKKwkvKiA4ME1IeiByZXF1aXJlZCBieSB0aGUgZGF0YXNoZWV0ICovCisJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKG1pcGktPmRzaXRfY2xrLCA4MDAwMDAwMCk7CisJaWYgKHJhdGUgPiAwICYmIHJhdGUgIT0gZl9jdXJyZW50KQorCQlyZXQgPSBjbGtfc2V0X3JhdGUobWlwaS0+ZHNpdF9jbGssIHJhdGUpOworCWVsc2UKKwkJcmV0ID0gcmF0ZTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlc2V0dHJhdGU7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJEU0ktVCBjbGsgJWx1IC0+ICVsdVxuIiwgZl9jdXJyZW50LCByYXRlKTsKKworCXNwcmludGYoZHNpcF9jbGssICJkc2klMS4xZHBfY2xrIiwgaWR4KTsKKwltaXBpLT5kc2lwX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgZHNpcF9jbGspOworCWlmIChJU19FUlIobWlwaS0+ZHNpcF9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIobWlwaS0+ZHNpcF9jbGspOworCQlnb3RvIGVjbGtwZ2V0OworCX0KKworCWZfY3VycmVudCA9IGNsa19nZXRfcmF0ZShtaXBpLT5kc2lwX2Nsayk7CisJLyogQmV0d2VlbiAxMCBhbmQgNTBNSHogKi8KKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUobWlwaS0+ZHNpcF9jbGssIDI0MDAwMDAwKTsKKwlpZiAocmF0ZSA+IDAgJiYgcmF0ZSAhPSBmX2N1cnJlbnQpCisJCXJldCA9IGNsa19zZXRfcmF0ZShtaXBpLT5kc2lwX2NsaywgcmF0ZSk7CisJZWxzZQorCQlyZXQgPSByYXRlOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVzZXRwcmF0ZTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIkRTSS1QIGNsayAlbHUgLT4gJWx1XG4iLCBmX2N1cnJlbnQsIHJhdGUpOworCisJbXNsZWVwKDEwKTsKKworCXJldCA9IGNsa19lbmFibGUobWlwaS0+ZHNpdF9jbGspOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVjbGt0b247CisKKwlyZXQgPSBjbGtfZW5hYmxlKG1pcGktPmRzaXBfY2xrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlY2xrcG9uOworCisJbWlwaV9kc2lbaWR4XSA9IG1pcGk7CisKKwlyZXQgPSBzaF9taXBpX3NldHVwKG1pcGksIHBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlbWlwaXNldHVwOworCisJbXV0ZXhfdW5sb2NrKCZhcnJheV9sb2NrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtaXBpKTsKKworCS8qIFNldCB1cCBMQ0RDIGNhbGxiYWNrcyAqLworCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmJvYXJkX2RhdGEgPSBtaXBpOworCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmRpc3BsYXlfb24gPSBtaXBpX2Rpc3BsYXlfb247CisJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuZGlzcGxheV9vZmYgPSBtaXBpX2Rpc3BsYXlfb2ZmOworCisJcmV0dXJuIDA7CisKK2VtaXBpc2V0dXA6CisJbWlwaV9kc2lbaWR4XSA9IE5VTEw7CisJY2xrX2Rpc2FibGUobWlwaS0+ZHNpcF9jbGspOworZWNsa3BvbjoKKwljbGtfZGlzYWJsZShtaXBpLT5kc2l0X2Nsayk7CitlY2xrdG9uOgorZXNldHByYXRlOgorCWNsa19wdXQobWlwaS0+ZHNpcF9jbGspOworZWNsa3BnZXQ6Citlc2V0dHJhdGU6CisJY2xrX3B1dChtaXBpLT5kc2l0X2Nsayk7CitlY2xrdGdldDoKKwlpb3VubWFwKG1pcGktPmJhc2UpOworZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2VyZXFyZWc6CisJa2ZyZWUobWlwaSk7CitlYWxsb2M6CitlZmluZHNsb3Q6CisJbXV0ZXhfdW5sb2NrKCZhcnJheV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNoX21pcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX21pcGlfZHNpX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXN0cnVjdCBzaF9taXBpICptaXBpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGksIHJldDsKKworCW11dGV4X2xvY2soJmFycmF5X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWlwaV9kc2kpICYmIG1pcGlfZHNpW2ldICE9IG1pcGk7IGkrKykKKwkJOworCisJaWYgKGkgPT0gQVJSQVlfU0laRShtaXBpX2RzaSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCQltaXBpX2RzaVtpXSA9IE5VTEw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZhcnJheV9sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuZGlzcGxheV9vbiA9IE5VTEw7CisJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuZGlzcGxheV9vZmYgPSBOVUxMOworCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmJvYXJkX2RhdGEgPSBOVUxMOworCisJY2xrX2Rpc2FibGUobWlwaS0+ZHNpcF9jbGspOworCWNsa19kaXNhYmxlKG1pcGktPmRzaXRfY2xrKTsKKwljbGtfcHV0KG1pcGktPmRzaXRfY2xrKTsKKwljbGtfcHV0KG1pcGktPmRzaXBfY2xrKTsKKwlpb3VubWFwKG1pcGktPmJhc2UpOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKG1pcGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX21pcGlfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19leGl0X3Aoc2hfbWlwaV9yZW1vdmUpLAorCS5zaHV0ZG93bgk9IHNoX21pcGlfc2h1dGRvd24sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic2gtbWlwaS1kc2kiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9taXBpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzaF9taXBpX2RyaXZlciwgc2hfbWlwaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChzaF9taXBpX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfbWlwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX21pcGlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNoX21pcGlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggLyBBUk0tc2htb2JpbGUgTUlQSSBEU0kgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMgYi9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZkZTA4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYwpAQCAtMCwwICsxLDEwMjggQEAKKy8qCisgKiBTSC1Nb2JpbGUgSGlnaC1EZWZpbml0aW9uIE11bHRpbWVkaWEgSW50ZXJmYWNlIChIRE1JKSBkcml2ZXIKKyAqIGZvciBTTElTSERNSTEzVCBhbmQgU0xJUEhETUlUIElQIGNvcmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDx2aWRlby9zaF9tb2JpbGVfaGRtaS5oPgorI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CisKKyNkZWZpbmUgSERNSV9TWVNURU1fQ1RSTAkJCTB4MDAgLyogU3lzdGVtIGNvbnRyb2wgKi8KKyNkZWZpbmUgSERNSV9MX1JfREFUQV9TV0FQX0NUUkxfUlBLVAkJMHgwMSAvKiBML1IgZGF0YSBzd2FwIGNvbnRyb2wsCisJCQkJCQkJYml0cyAxOS4uMTYgb2YgMjAtYml0IE4gZm9yIEF1ZGlvIENsb2NrIFJlZ2VuZXJhdGlvbiBwYWNrZXQgKi8KKyNkZWZpbmUgSERNSV8yMF9CSVRfTl9GT1JfQVVESU9fUlBLVF8xNV84CTB4MDIgLyogYml0cyAxNS4uOCBvZiAyMC1iaXQgTiBmb3IgQXVkaW8gQ2xvY2sgUmVnZW5lcmF0aW9uIHBhY2tldCAqLworI2RlZmluZSBIRE1JXzIwX0JJVF9OX0ZPUl9BVURJT19SUEtUXzdfMAkweDAzIC8qIGJpdHMgNy4uMCBvZiAyMC1iaXQgTiBmb3IgQXVkaW8gQ2xvY2sgUmVnZW5lcmF0aW9uIHBhY2tldCAqLworI2RlZmluZSBIRE1JX1NQRElGX0FVRElPX1NBTVBfRlJFUV9DVFMJCTB4MDQgLyogU1BESUYgYXVkaW8gc2FtcGxpbmcgZnJlcXVlbmN5LAorCQkJCQkJCWJpdHMgMTkuLjE2IG9mIEludGVybmFsIENUUyAqLworI2RlZmluZSBIRE1JX0lOVEVSTkFMX0NUU18xNV84CQkJMHgwNSAvKiBiaXRzIDE1Li44IG9mIEludGVybmFsIENUUyAqLworI2RlZmluZSBIRE1JX0lOVEVSTkFMX0NUU183XzAJCQkweDA2IC8qIGJpdHMgNy4uMCBvZiBJbnRlcm5hbCBDVFMgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9DVFNfMTlfMTYJCQkweDA3IC8qIEV4dGVybmFsIENUUyAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX0NUU18xNV84CQkJMHgwOCAvKiBFeHRlcm5hbCBDVFMgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9DVFNfN18wCQkJMHgwOSAvKiBFeHRlcm5hbCBDVFMgKi8KKyNkZWZpbmUgSERNSV9BVURJT19TRVRUSU5HXzEJCQkweDBBIC8qIEF1ZGlvIHNldHRpbmcuMSAqLworI2RlZmluZSBIRE1JX0FVRElPX1NFVFRJTkdfMgkJCTB4MEIgLyogQXVkaW8gc2V0dGluZy4yICovCisjZGVmaW5lIEhETUlfSTJTX0FVRElPX1NFVAkJCTB4MEMgLyogSTJTIGF1ZGlvIHNldHRpbmcgKi8KKyNkZWZpbmUgSERNSV9EU0RfQVVESU9fU0VUCQkJMHgwRCAvKiBEU0QgYXVkaW8gc2V0dGluZyAqLworI2RlZmluZSBIRE1JX0RFQlVHX01PTklUT1JfMQkJCTB4MEUgLyogRGVidWcgbW9uaXRvci4xICovCisjZGVmaW5lIEhETUlfREVCVUdfTU9OSVRPUl8yCQkJMHgwRiAvKiBEZWJ1ZyBtb25pdG9yLjIgKi8KKyNkZWZpbmUgSERNSV9JMlNfSU5QVVRfUElOX1NXQVAJCQkweDEwIC8qIEkyUyBpbnB1dCBwaW4gc3dhcCAqLworI2RlZmluZSBIRE1JX0FVRElPX1NUQVRVU19CSVRTX1NFVFRJTkdfMQkweDExIC8qIEF1ZGlvIHN0YXR1cyBiaXRzIHNldHRpbmcuMSAqLworI2RlZmluZSBIRE1JX0FVRElPX1NUQVRVU19CSVRTX1NFVFRJTkdfMgkweDEyIC8qIEF1ZGlvIHN0YXR1cyBiaXRzIHNldHRpbmcuMiAqLworI2RlZmluZSBIRE1JX0NBVEVHT1JZX0NPREUJCQkweDEzIC8qIENhdGVnb3J5IGNvZGUgKi8KKyNkZWZpbmUgSERNSV9TT1VSQ0VfTlVNX0FVRElPX1dPUkRfTEVOCQkweDE0IC8qIFNvdXJjZSBudW1iZXIvQXVkaW8gd29yZCBsZW5ndGggKi8KKyNkZWZpbmUgSERNSV9BVURJT19WSURFT19TRVRUSU5HXzEJCTB4MTUgLyogQXVkaW8vVmlkZW8gc2V0dGluZy4xICovCisjZGVmaW5lIEhETUlfVklERU9fU0VUVElOR18xCQkJMHgxNiAvKiBWaWRlbyBzZXR0aW5nLjEgKi8KKyNkZWZpbmUgSERNSV9ERUVQX0NPTE9SX01PREVTCQkJMHgxNyAvKiBEZWVwIENvbG9yIE1vZGVzICovCisKKy8qIDEyIDE2LSBhbmQgMTAtYml0IENvbG9yIHNwYWNlIGNvbnZlcnNpb24gcGFyYW1ldGVyczogMHgxOC4uMHgyZiAqLworI2RlZmluZSBIRE1JX0NPTE9SX1NQQUNFX0NPTlZFUlNJT05fUEFSQU1FVEVSUwkweDE4CisKKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9WSURFT19QQVJBTV9TRVRUSU5HUwkweDMwIC8qIEV4dGVybmFsIHZpZGVvIHBhcmFtZXRlciBzZXR0aW5ncyAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX0hfVE9UQUxfN18wCQkweDMxIC8qIEV4dGVybmFsIGhvcml6b250YWwgdG90YWwgKExTQikgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9IX1RPVEFMXzExXzgJCTB4MzIgLyogRXh0ZXJuYWwgaG9yaXpvbnRhbCB0b3RhbCAoTVNCKSAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX0hfQkxBTktfN18wCQkweDMzIC8qIEV4dGVybmFsIGhvcml6b250YWwgYmxhbmsgKExTQikgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9IX0JMQU5LXzlfOAkJMHgzNCAvKiBFeHRlcm5hbCBob3Jpem9udGFsIGJsYW5rIChNU0IpICovCisjZGVmaW5lIEhETUlfRVhURVJOQUxfSF9ERUxBWV83XzAJCTB4MzUgLyogRXh0ZXJuYWwgaG9yaXpvbnRhbCBkZWxheSAoTFNCKSAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX0hfREVMQVlfOV84CQkweDM2IC8qIEV4dGVybmFsIGhvcml6b250YWwgZGVsYXkgKE1TQikgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9IX0RVUkFUSU9OXzdfMAkJMHgzNyAvKiBFeHRlcm5hbCBob3Jpem9udGFsIGR1cmF0aW9uIChMU0IpICovCisjZGVmaW5lIEhETUlfRVhURVJOQUxfSF9EVVJBVElPTl85XzgJCTB4MzggLyogRXh0ZXJuYWwgaG9yaXpvbnRhbCBkdXJhdGlvbiAoTVNCKSAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX1ZfVE9UQUxfN18wCQkweDM5IC8qIEV4dGVybmFsIHZlcnRpY2FsIHRvdGFsIChMU0IpICovCisjZGVmaW5lIEhETUlfRVhURVJOQUxfVl9UT1RBTF85XzgJCTB4M0EgLyogRXh0ZXJuYWwgdmVydGljYWwgdG90YWwgKE1TQikgKi8KKyNkZWZpbmUgSERNSV9BVURJT19WSURFT19TRVRUSU5HXzIJCTB4M0IgLyogQXVkaW8vVmlkZW8gc2V0dGluZy4yICovCisjZGVmaW5lIEhETUlfRVhURVJOQUxfVl9CTEFOSwkJCTB4M0QgLyogRXh0ZXJuYWwgdmVydGljYWwgYmxhbmsgKi8KKyNkZWZpbmUgSERNSV9FWFRFUk5BTF9WX0RFTEFZCQkJMHgzRSAvKiBFeHRlcm5hbCB2ZXJ0aWNhbCBkZWxheSAqLworI2RlZmluZSBIRE1JX0VYVEVSTkFMX1ZfRFVSQVRJT04JCTB4M0YgLyogRXh0ZXJuYWwgdmVydGljYWwgZHVyYXRpb24gKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9NQU5VQUxfU0VORF9DT05UUk9MCTB4NDAgLyogQ29udHJvbCBwYWNrZXQgbWFudWFsIHNlbmQgY29udHJvbCAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0FVVE9fU0VORAkJCTB4NDEgLyogQ29udHJvbCBwYWNrZXQgYXV0byBzZW5kIHdpdGggVlNZTkMgY29udHJvbCAqLworI2RlZmluZSBIRE1JX0FVVE9fQ0hFQ0tTVU1fT1BUSU9OCQkweDQyIC8qIEF1dG8gY2hlY2tzdW0gb3B0aW9uICovCisjZGVmaW5lIEhETUlfVklERU9fU0VUVElOR18yCQkJMHg0NSAvKiBWaWRlbyBzZXR0aW5nLjIgKi8KKyNkZWZpbmUgSERNSV9PVVRQVVRfT1BUSU9OCQkJMHg0NiAvKiBPdXRwdXQgb3B0aW9uICovCisjZGVmaW5lIEhETUlfU0xJUEhETUlUX1BBUkFNX09QVElPTgkJMHg1MSAvKiBTTElQSERNSVQgcGFyYW1ldGVyIG9wdGlvbiAqLworI2RlZmluZSBIRE1JX0hTWU5DX1BNRU5UX0FUX0VNQl83XzAJCTB4NTIgLyogSFNZTkMgcGxhY2VtZW50IGF0IGVtYmVkZGVkIHN5bmMgKExTQikgKi8KKyNkZWZpbmUgSERNSV9IU1lOQ19QTUVOVF9BVF9FTUJfMTVfOAkJMHg1MyAvKiBIU1lOQyBwbGFjZW1lbnQgYXQgZW1iZWRkZWQgc3luYyAoTVNCKSAqLworI2RlZmluZSBIRE1JX1ZTWU5DX1BNRU5UX0FUX0VNQl83XzAJCTB4NTQgLyogVlNZTkMgcGxhY2VtZW50IGF0IGVtYmVkZGVkIHN5bmMgKExTQikgKi8KKyNkZWZpbmUgSERNSV9WU1lOQ19QTUVOVF9BVF9FTUJfMTRfOAkJMHg1NSAvKiBWU1lOQyBwbGFjZW1lbnQgYXQgZW1iZWRkZWQgc3luYyAoTVNCKSAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18xCQkweDU2IC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuMSAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18yCQkweDU3IC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuMiAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18zCQkweDU4IC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuMyAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU181CQkweDU5IC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuNSAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU182CQkweDVBIC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuNiAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU183CQkweDVCIC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuNyAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU184CQkweDVDIC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuOCAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU185CQkweDVEIC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuOSAqLworI2RlZmluZSBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18xMAkweDVFIC8qIFNMSVBIRE1JVCBwYXJhbWV0ZXIgc2V0dGluZ3MuMTAgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfSU5ERVgJCQkweDVGIC8qIENvbnRyb2wgcGFja2V0IGJ1ZmZlciBpbmRleCAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIwCQkweDYwIC8qIENvbnRyb2wgcGFja2V0IGRhdGEgYnVmZmVyIGFjY2VzcyB3aW5kb3cgLSBIQjAgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMQkJMHg2MSAvKiBDb250cm9sIHBhY2tldCBkYXRhIGJ1ZmZlciBhY2Nlc3Mgd2luZG93IC0gSEIxICovCisjZGVmaW5lIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjIJCTB4NjIgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIEhCMiAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIwCQkweDYzIC8qIENvbnRyb2wgcGFja2V0IGRhdGEgYnVmZmVyIGFjY2VzcyB3aW5kb3cgLSBQQjAgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMQkJMHg2NCAvKiBDb250cm9sIHBhY2tldCBkYXRhIGJ1ZmZlciBhY2Nlc3Mgd2luZG93IC0gUEIxICovCisjZGVmaW5lIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjIJCTB4NjUgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMiAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIzCQkweDY2IC8qIENvbnRyb2wgcGFja2V0IGRhdGEgYnVmZmVyIGFjY2VzcyB3aW5kb3cgLSBQQjMgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNAkJMHg2NyAvKiBDb250cm9sIHBhY2tldCBkYXRhIGJ1ZmZlciBhY2Nlc3Mgd2luZG93IC0gUEI0ICovCisjZGVmaW5lIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjUJCTB4NjggLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCNSAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEI2CQkweDY5IC8qIENvbnRyb2wgcGFja2V0IGRhdGEgYnVmZmVyIGFjY2VzcyB3aW5kb3cgLSBQQjYgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNwkJMHg2QSAvKiBDb250cm9sIHBhY2tldCBkYXRhIGJ1ZmZlciBhY2Nlc3Mgd2luZG93IC0gUEI3ICovCisjZGVmaW5lIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjgJCTB4NkIgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCOCAqLworI2RlZmluZSBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEI5CQkweDZDIC8qIENvbnRyb2wgcGFja2V0IGRhdGEgYnVmZmVyIGFjY2VzcyB3aW5kb3cgLSBQQjkgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTAJCTB4NkQgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTAgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTEJCTB4NkUgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTEgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTIJCTB4NkYgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTIgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTMJCTB4NzAgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTMgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTQJCTB4NzEgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTQgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTUJCTB4NzIgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTUgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTYJCTB4NzMgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTYgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTcJCTB4NzQgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTcgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTgJCTB4NzUgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTggKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTkJCTB4NzYgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMTkgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjAJCTB4NzcgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjAgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjEJCTB4NzggLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjEgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjIJCTB4NzkgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjIgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjMJCTB4N0EgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjMgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjQJCTB4N0IgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjQgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjUJCTB4N0MgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjUgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjYJCTB4N0QgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjYgKi8KKyNkZWZpbmUgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMjcJCTB4N0UgLyogQ29udHJvbCBwYWNrZXQgZGF0YSBidWZmZXIgYWNjZXNzIHdpbmRvdyAtIFBCMjcgKi8KKyNkZWZpbmUgSERNSV9FRElEX0tTVl9GSUZPX0FDQ0VTU19XSU5ET1cJMHg4MCAvKiBFRElEL0tTViBGSUZPIGFjY2VzcyB3aW5kb3cgKi8KKyNkZWZpbmUgSERNSV9ERENfQlVTX0FDQ0VTU19GUkVRX0NUUkxfN18wCTB4ODEgLyogRERDIGJ1cyBhY2Nlc3MgZnJlcXVlbmN5IGNvbnRyb2wgKExTQikgKi8KKyNkZWZpbmUgSERNSV9ERENfQlVTX0FDQ0VTU19GUkVRX0NUUkxfMTVfOAkweDgyIC8qIEREQyBidXMgYWNjZXNzIGZyZXF1ZW5jeSBjb250cm9sIChNU0IpICovCisjZGVmaW5lIEhETUlfSU5URVJSVVBUX01BU0tfMQkJCTB4OTIgLyogSW50ZXJydXB0IG1hc2suMSAqLworI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9NQVNLXzIJCQkweDkzIC8qIEludGVycnVwdCBtYXNrLjIgKi8KKyNkZWZpbmUgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzEJCQkweDk0IC8qIEludGVycnVwdCBzdGF0dXMuMSAqLworI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9TVEFUVVNfMgkJCTB4OTUgLyogSW50ZXJydXB0IHN0YXR1cy4yICovCisjZGVmaW5lIEhETUlfSU5URVJSVVBUX01BU0tfMwkJCTB4OTYgLyogSW50ZXJydXB0IG1hc2suMyAqLworI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9NQVNLXzQJCQkweDk3IC8qIEludGVycnVwdCBtYXNrLjQgKi8KKyNkZWZpbmUgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzMJCQkweDk4IC8qIEludGVycnVwdCBzdGF0dXMuMyAqLworI2RlZmluZSBIRE1JX0lOVEVSUlVQVF9TVEFUVVNfNAkJCTB4OTkgLyogSW50ZXJydXB0IHN0YXR1cy40ICovCisjZGVmaW5lIEhETUlfU09GVFdBUkVfSERDUF9DT05UUk9MXzEJCTB4OUEgLyogU29mdHdhcmUgSERDUCBjb250cm9sLjEgKi8KKyNkZWZpbmUgSERNSV9GUkFNRV9DT1VOVEVSCQkJMHg5QyAvKiBGcmFtZSBjb3VudGVyICovCisjZGVmaW5lIEhETUlfRlJBTUVfQ09VTlRFUl9GT1JfUklfQ0hFQ0sJCTB4OUQgLyogRnJhbWUgY291bnRlciBmb3IgUmkgY2hlY2sgKi8KKyNkZWZpbmUgSERNSV9IRENQX0NPTlRST0wJCQkweEFGIC8qIEhEQ1AgY29udHJvbCAqLworI2RlZmluZSBIRE1JX1JJX0ZSQU1FX0NPVU5UX1JFR0lTVEVSCQkweEIyIC8qIFJpIGZyYW1lIGNvdW50IHJlZ2lzdGVyICovCisjZGVmaW5lIEhETUlfRERDX0JVU19DT05UUk9MCQkJMHhCNyAvKiBEREMgYnVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgSERNSV9IRENQX1NUQVRVUwkJCTB4QjggLyogSERDUCBzdGF0dXMgKi8KKyNkZWZpbmUgSERNSV9TSEEwCQkJCTB4QjkgLyogc2hhMCAqLworI2RlZmluZSBIRE1JX1NIQTEJCQkJMHhCQSAvKiBzaGExICovCisjZGVmaW5lIEhETUlfU0hBMgkJCQkweEJCIC8qIHNoYTIgKi8KKyNkZWZpbmUgSERNSV9TSEEzCQkJCTB4QkMgLyogc2hhMyAqLworI2RlZmluZSBIRE1JX1NIQTQJCQkJMHhCRCAvKiBzaGE0ICovCisjZGVmaW5lIEhETUlfQkNBUFNfUkVBRAkJCQkweEJFIC8qIEJDQVBTIHJlYWQgLyBkZWJ1ZyAqLworI2RlZmluZSBIRE1JX0FLU1ZfQktTVl83XzBfTU9OSVRPUgkJMHhCRiAvKiBBS1NWL0JLU1ZbNzowXSBtb25pdG9yICovCisjZGVmaW5lIEhETUlfQUtTVl9CS1NWXzE1XzhfTU9OSVRPUgkJMHhDMCAvKiBBS1NWL0JLU1ZbMTU6OF0gbW9uaXRvciAqLworI2RlZmluZSBIRE1JX0FLU1ZfQktTVl8yM18xNl9NT05JVE9SCQkweEMxIC8qIEFLU1YvQktTVlsyMzoxNl0gbW9uaXRvciAqLworI2RlZmluZSBIRE1JX0FLU1ZfQktTVl8zMV8yNF9NT05JVE9SCQkweEMyIC8qIEFLU1YvQktTVlszMToyNF0gbW9uaXRvciAqLworI2RlZmluZSBIRE1JX0FLU1ZfQktTVl8zOV8zMl9NT05JVE9SCQkweEMzIC8qIEFLU1YvQktTVlszOTozMl0gbW9uaXRvciAqLworI2RlZmluZSBIRE1JX0VESURfU0VHTUVOVF9QT0lOVEVSCQkweEM0IC8qIEVESUQgc2VnbWVudCBwb2ludGVyICovCisjZGVmaW5lIEhETUlfRURJRF9XT1JEX0FERFJFU1MJCQkweEM1IC8qIEVESUQgd29yZCBhZGRyZXNzICovCisjZGVmaW5lIEhETUlfRURJRF9EQVRBX0ZJRk9fQUREUkVTUwkJMHhDNiAvKiBFRElEIGRhdGEgRklGTyBhZGRyZXNzICovCisjZGVmaW5lIEhETUlfTlVNX09GX0hETUlfREVWSUNFUwkJMHhDNyAvKiBOdW1iZXIgb2YgSERNSSBkZXZpY2VzICovCisjZGVmaW5lIEhETUlfSERDUF9FUlJPUl9DT0RFCQkJMHhDOCAvKiBIRENQIGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgSERNSV8xMDBNU19USU1FUl9TRVQJCQkweEM5IC8qIDEwMG1zIHRpbWVyIHNldHRpbmcgKi8KKyNkZWZpbmUgSERNSV81U0VDX1RJTUVSX1NFVAkJCTB4Q0EgLyogNXNlYyB0aW1lciBzZXR0aW5nICovCisjZGVmaW5lIEhETUlfUklfUkVBRF9DT1VOVAkJCTB4Q0IgLyogUmkgcmVhZCBjb3VudCAqLworI2RlZmluZSBIRE1JX0FOX1NFRUQJCQkJMHhDQyAvKiBBbiBzZWVkICovCisjZGVmaW5lIEhETUlfTUFYX05VTV9PRl9SQ0lWUlNfQUxMT1dFRAkJMHhDRCAvKiBNYXhpbXVtIG51bWJlciBvZiByZWNlaXZlcnMgYWxsb3dlZCAqLworI2RlZmluZSBIRE1JX0hEQ1BfTUVNT1JZX0FDQ0VTU19DT05UUk9MXzEJMHhDRSAvKiBIRENQIG1lbW9yeSBhY2Nlc3MgY29udHJvbC4xICovCisjZGVmaW5lIEhETUlfSERDUF9NRU1PUllfQUNDRVNTX0NPTlRST0xfMgkweENGIC8qIEhEQ1AgbWVtb3J5IGFjY2VzcyBjb250cm9sLjIgKi8KKyNkZWZpbmUgSERNSV9IRENQX0NPTlRST0xfMgkJCTB4RDAgLyogSERDUCBDb250cm9sIDIgKi8KKyNkZWZpbmUgSERNSV9IRENQX0tFWV9NRU1PUllfQ09OVFJPTAkJMHhEMiAvKiBIRENQIEtleSBNZW1vcnkgQ29udHJvbCAqLworI2RlZmluZSBIRE1JX0NPTE9SX1NQQUNFX0NPTlZfQ09ORklHXzEJCTB4RDMgLyogQ29sb3Igc3BhY2UgY29udmVyc2lvbiBjb25maWd1cmF0aW9uLjEgKi8KKyNkZWZpbmUgSERNSV9WSURFT19TRVRUSU5HXzMJCQkweEQ0IC8qIFZpZGVvIHNldHRpbmcuMyAqLworI2RlZmluZSBIRE1JX1JJXzdfMAkJCQkweEQ1IC8qIFJpWzc6MF0gKi8KKyNkZWZpbmUgSERNSV9SSV8xNV84CQkJCTB4RDYgLyogUmlbMTU6OF0gKi8KKyNkZWZpbmUgSERNSV9QSgkJCQkJMHhENyAvKiBQaiAqLworI2RlZmluZSBIRE1JX1NIQV9SRAkJCQkweEQ4IC8qIHNoYV9yZCAqLworI2RlZmluZSBIRE1JX1JJXzdfMF9TQVZFRAkJCTB4RDkgLyogUmlbNzowXSBzYXZlZCAqLworI2RlZmluZSBIRE1JX1JJXzE1XzhfU0FWRUQJCQkweERBIC8qIFJpWzE1OjhdIHNhdmVkICovCisjZGVmaW5lIEhETUlfUEpfU0FWRUQJCQkJMHhEQiAvKiBQaiBzYXZlZCAqLworI2RlZmluZSBIRE1JX05VTV9PRl9ERVZJQ0VTCQkJMHhEQyAvKiBOdW1iZXIgb2YgZGV2aWNlcyAqLworI2RlZmluZSBIRE1JX0hPVF9QTFVHX01TRU5TX1NUQVRVUwkJMHhERiAvKiBIb3QgcGx1Zy9NU0VOUyBzdGF0dXMgKi8KKyNkZWZpbmUgSERNSV9CQ0FQU19XUklURQkJCTB4RTAgLyogYmNhcHMgKi8KKyNkZWZpbmUgSERNSV9CU1RBVF83XzAJCQkJMHhFMSAvKiBic3RhdFs3OjBdICovCisjZGVmaW5lIEhETUlfQlNUQVRfMTVfOAkJCQkweEUyIC8qIGJzdGF0WzE1OjhdICovCisjZGVmaW5lIEhETUlfQktTVl83XzAJCQkJMHhFMyAvKiBia3N2Wzc6MF0gKi8KKyNkZWZpbmUgSERNSV9CS1NWXzE1XzgJCQkJMHhFNCAvKiBia3N2WzE1OjhdICovCisjZGVmaW5lIEhETUlfQktTVl8yM18xNgkJCQkweEU1IC8qIGJrc3ZbMjM6MTZdICovCisjZGVmaW5lIEhETUlfQktTVl8zMV8yNAkJCQkweEU2IC8qIGJrc3ZbMzE6MjRdICovCisjZGVmaW5lIEhETUlfQktTVl8zOV8zMgkJCQkweEU3IC8qIGJrc3ZbMzk6MzJdICovCisjZGVmaW5lIEhETUlfQU5fN18wCQkJCTB4RTggLyogQW5bNzowXSAqLworI2RlZmluZSBIRE1JX0FOXzE1XzgJCQkJMHhFOSAvKiBBbiBbMTU6OF0gKi8KKyNkZWZpbmUgSERNSV9BTl8yM18xNgkJCQkweEVBIC8qIEFuIFsyMzoxNl0gKi8KKyNkZWZpbmUgSERNSV9BTl8zMV8yNAkJCQkweEVCIC8qIEFuIFszMToyNF0gKi8KKyNkZWZpbmUgSERNSV9BTl8zOV8zMgkJCQkweEVDIC8qIEFuIFszOTozMl0gKi8KKyNkZWZpbmUgSERNSV9BTl80N180MAkJCQkweEVEIC8qIEFuIFs0Nzo0MF0gKi8KKyNkZWZpbmUgSERNSV9BTl81NV80OAkJCQkweEVFIC8qIEFuIFs1NTo0OF0gKi8KKyNkZWZpbmUgSERNSV9BTl82M181NgkJCQkweEVGIC8qIEFuIFs2Mzo1Nl0gKi8KKyNkZWZpbmUgSERNSV9QUk9EVUNUX0lECQkJCTB4RjAgLyogUHJvZHVjdCBJRCAqLworI2RlZmluZSBIRE1JX1JFVklTSU9OX0lECQkJMHhGMSAvKiBSZXZpc2lvbiBJRCAqLworI2RlZmluZSBIRE1JX1RFU1RfTU9ERQkJCQkweEZFIC8qIFRlc3QgbW9kZSAqLworCitlbnVtIGhvdHBsdWdfc3RhdGUgeworCUhETUlfSE9UUExVR19ESVNDT05ORUNURUQsCisJSERNSV9IT1RQTFVHX0NPTk5FQ1RFRCwKKwlIRE1JX0hPVFBMVUdfRURJRF9ET05FLAorfTsKKworc3RydWN0IHNoX2hkbWkgeworCXZvaWQgX19pb21lbSAqYmFzZTsKKwllbnVtIGhvdHBsdWdfc3RhdGUgaHBfc3RhdGU7CisJc3RydWN0IGNsayAqaGRtaV9jbGs7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCXN0cnVjdCBkZWxheWVkX3dvcmsgZWRpZF93b3JrOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyB2YXI7Cit9OworCitzdGF0aWMgdm9pZCBoZG1pX3dyaXRlKHN0cnVjdCBzaF9oZG1pICpoZG1pLCB1OCBkYXRhLCB1OCByZWcpCit7CisJaW93cml0ZTgoZGF0YSwgaGRtaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB1OCBoZG1pX3JlYWQoc3RydWN0IHNoX2hkbWkgKmhkbWksIHU4IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkOChoZG1pLT5iYXNlICsgcmVnKTsKK30KKworLyogRXh0ZXJuYWwgdmlkZW8gcGFyYW1ldGVyIHNldHRpbmdzICovCitzdGF0aWMgdm9pZCBoZG1pX2V4dGVybmFsX3ZpZGVvX3BhcmFtKHN0cnVjdCBzaF9oZG1pICpoZG1pKQoreworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmhkbWktPnZhcjsKKwl1MTYgaHRvdGFsLCBoYmxhbmssIGhkZWxheSwgdnRvdGFsLCB2YmxhbmssIHZkZWxheSwgdm9mZnNldDsKKwl1OCBzeW5jID0gMDsKKworCWh0b3RhbCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luICsgdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOworCisJaGRlbGF5ID0gdmFyLT5oc3luY19sZW4gKyB2YXItPmxlZnRfbWFyZ2luOworCWhibGFuayA9IHZhci0+cmlnaHRfbWFyZ2luICsgaGRlbGF5OworCisJLyoKKwkgKiBWZXJ0aWNhbCB0aW1pbmcgbG9va3MgYSBiaXQgZGlmZmVyZW50IGluIEZpZ3VyZSAxOCwKKwkgKiBidXQgbGV0J3MgdHJ5IHRoZSBzYW1lIGZpcnN0IGJ5IHNldHRpbmcgb2Zmc2V0ID0gMAorCSAqLworCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbjsKKworCXZkZWxheSA9IHZhci0+dnN5bmNfbGVuICsgdmFyLT51cHBlcl9tYXJnaW47CisJdmJsYW5rID0gdmFyLT5sb3dlcl9tYXJnaW4gKyB2ZGVsYXk7CisJdm9mZnNldCA9IG1pbih2YXItPnVwcGVyX21hcmdpbiAvIDIsIDZVKTsKKworCS8qCisJICogWzNdOiBWU1lOQyBwb2xhcml0eTogUG9zaXRpdmUKKwkgKiBbMl06IEhTWU5DIHBvbGFyaXR5OiBQb3NpdGl2ZQorCSAqIFsxXTogSW50ZXJsYWNlL1Byb2dyZXNzaXZlOiBQcm9ncmVzc2l2ZQorCSAqIFswXTogRXh0ZXJuYWwgdmlkZW8gc2V0dGluZ3MgZW5hYmxlOiB1c2VkLgorCSAqLworCWlmICh2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKKwkJc3luYyB8PSA0OworCWlmICh2YXItPnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpCisJCXN5bmMgfD0gODsKKworCXByX2RlYnVnKCJIOiAldSwgJXUsICV1LCAldTsgVjogJXUsICV1LCAldSwgJXU7IHN5bmMgMHgleFxuIiwKKwkJIGh0b3RhbCwgaGJsYW5rLCBoZGVsYXksIHZhci0+aHN5bmNfbGVuLAorCQkgdnRvdGFsLCB2YmxhbmssIHZkZWxheSwgdmFyLT52c3luY19sZW4sIHN5bmMpOworCisJaGRtaV93cml0ZShoZG1pLCBzeW5jIHwgKHZvZmZzZXQgPDwgNCksIEhETUlfRVhURVJOQUxfVklERU9fUEFSQU1fU0VUVElOR1MpOworCisJaGRtaV93cml0ZShoZG1pLCBodG90YWwsIEhETUlfRVhURVJOQUxfSF9UT1RBTF83XzApOworCWhkbWlfd3JpdGUoaGRtaSwgaHRvdGFsID4+IDgsIEhETUlfRVhURVJOQUxfSF9UT1RBTF8xMV84KTsKKworCWhkbWlfd3JpdGUoaGRtaSwgaGJsYW5rLCBIRE1JX0VYVEVSTkFMX0hfQkxBTktfN18wKTsKKwloZG1pX3dyaXRlKGhkbWksIGhibGFuayA+PiA4LCBIRE1JX0VYVEVSTkFMX0hfQkxBTktfOV84KTsKKworCWhkbWlfd3JpdGUoaGRtaSwgaGRlbGF5LCBIRE1JX0VYVEVSTkFMX0hfREVMQVlfN18wKTsKKwloZG1pX3dyaXRlKGhkbWksIGhkZWxheSA+PiA4LCBIRE1JX0VYVEVSTkFMX0hfREVMQVlfOV84KTsKKworCWhkbWlfd3JpdGUoaGRtaSwgdmFyLT5oc3luY19sZW4sIEhETUlfRVhURVJOQUxfSF9EVVJBVElPTl83XzApOworCWhkbWlfd3JpdGUoaGRtaSwgdmFyLT5oc3luY19sZW4gPj4gOCwgSERNSV9FWFRFUk5BTF9IX0RVUkFUSU9OXzlfOCk7CisKKwloZG1pX3dyaXRlKGhkbWksIHZ0b3RhbCwgSERNSV9FWFRFUk5BTF9WX1RPVEFMXzdfMCk7CisJaGRtaV93cml0ZShoZG1pLCB2dG90YWwgPj4gOCwgSERNSV9FWFRFUk5BTF9WX1RPVEFMXzlfOCk7CisKKwloZG1pX3dyaXRlKGhkbWksIHZibGFuaywgSERNSV9FWFRFUk5BTF9WX0JMQU5LKTsKKworCWhkbWlfd3JpdGUoaGRtaSwgdmRlbGF5LCBIRE1JX0VYVEVSTkFMX1ZfREVMQVkpOworCisJaGRtaV93cml0ZShoZG1pLCB2YXItPnZzeW5jX2xlbiwgSERNSV9FWFRFUk5BTF9WX0RVUkFUSU9OKTsKKworCS8qIFNldCBiaXQgMCBvZiBIRE1JX0VYVEVSTkFMX1ZJREVPX1BBUkFNX1NFVFRJTkdTIGhlcmUgZm9yIG1hbnVhbCBtb2RlICovCit9CisKKy8qKgorICogc2hfaGRtaV92aWRlb19jb25maWcoKQorICovCitzdGF0aWMgdm9pZCBzaF9oZG1pX3ZpZGVvX2NvbmZpZyhzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKK3sKKwkvKgorCSAqIFs3OjRdOiBBdWRpbyBzYW1wbGluZyBmcmVxdWVuY3k6IDQ4a0h6CisJICogWzM6MV06IElucHV0IHZpZGVvIGZvcm1hdDogUkdCIGFuZCBZQ2JDciA0OjQ6NCAoWSBvbiBHcmVlbikKKwkgKiBbMF06IEludGVybmFsL0V4dGVybmFsIERFIHNlbGVjdDogaW50ZXJuYWwKKwkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MjAsIEhETUlfQVVESU9fVklERU9fU0VUVElOR18xKTsKKworCS8qCisJICogWzc6Nl06IFZpZGVvIG91dHB1dCBmb3JtYXQ6IFJHQiA0OjQ6NAorCSAqIFs1OjRdOiBJbnB1dCB2aWRlbyBkYXRhIHdpZHRoOiA4IGJpdAorCSAqIFszOjFdOiBFQVYvU0FWIGxvY2F0aW9uOiBjaGFubmVsIDEKKwkgKiBbMF06IFZpZGVvIGlucHV0IGNvbG9yIHNwYWNlOiBSR0IKKwkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MzQsIEhETUlfVklERU9fU0VUVElOR18xKTsKKworCS8qCisJICogWzc6Nl06IFRvZ2V0aGVyIHdpdGggYml0IFs2XSBvZiBIRE1JX0FVRElPX1ZJREVPX1NFVFRJTkdfMiwgd2hpY2ggaXMKKwkgKiBsZWZ0IGF0IDAgYnkgZGVmYXVsdCwgdGhpcyBjb25maWd1cmVzIDI0YnBwIGFuZCBzZXRzIHRoZSBDb2xvciBEZXB0aAorCSAqIChDRCkgZmllbGQgaW4gdGhlIEdlbmVyYWwgQ29udHJvbCBQYWNrZXQKKwkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MjAsIEhETUlfREVFUF9DT0xPUl9NT0RFUyk7Cit9CisKKy8qKgorICogc2hfaGRtaV9hdWRpb19jb25maWcoKQorICovCitzdGF0aWMgdm9pZCBzaF9oZG1pX2F1ZGlvX2NvbmZpZyhzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKK3sKKwkvKgorCSAqIFs3OjRdIEwvUiBkYXRhIHN3YXAgY29udHJvbAorCSAqIFszOjBdIGFwcHJvcHJpYXRlIE5bMTk6MTZdCisJICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0xfUl9EQVRBX1NXQVBfQ1RSTF9SUEtUKTsKKwkvKiBhcHByb3ByaWF0ZSBOWzE1OjhdICovCisJaGRtaV93cml0ZShoZG1pLCAweDE4LCBIRE1JXzIwX0JJVF9OX0ZPUl9BVURJT19SUEtUXzE1XzgpOworCS8qIGFwcHJvcHJpYXRlIE5bNzowXSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV8yMF9CSVRfTl9GT1JfQVVESU9fUlBLVF83XzApOworCisJLyogWzc6NF0gNDgga0h6CVNQRElGIG5vdCB1c2VkICovCisJaGRtaV93cml0ZShoZG1pLCAweDIwLCBIRE1JX1NQRElGX0FVRElPX1NBTVBfRlJFUV9DVFMpOworCisJLyoKKwkgKiBbNjo1XSBzZXQgcmVxdWlyZWQgZG93biBzYW1wbGluZyByYXRlIGlmIHJlcXVpcmVkCisJICogWzQ6M10gc2V0IHJlcXVpcmVkIGF1ZGlvIHNvdXJjZQorCSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9BVURJT19TRVRUSU5HXzEpOworCisJLyogWzM6MF0gc2V0IHNlbmRpbmcgY2hhbm5lbCBudW1iZXIgZm9yIGNoYW5uZWwgc3RhdHVzICovCisJaGRtaV93cml0ZShoZG1pLCAweDQwLCBIRE1JX0FVRElPX1NFVFRJTkdfMik7CisKKwkvKgorCSAqIFs1OjJdIHNldCB2YWxpZCBJMlMgc291cmNlIGlucHV0IHBpbgorCSAqIFsxOjBdIHNldCBpbnB1dCBJMlMgc291cmNlIG1vZGUKKwkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDQsIEhETUlfSTJTX0FVRElPX1NFVCk7CisKKwkvKiBbNzo0XSBzZXQgdmFsaWQgRFNEIHNvdXJjZSBpbnB1dCBwaW4gKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRFNEX0FVRElPX1NFVCk7CisKKwkvKiBbNzowXSBzZXQgYXBwcm9wcmlhdGUgSTJTIGlucHV0IHBpbiBzd2FwIHNldHRpbmdzIGlmIHJlcXVpcmVkICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0kyU19JTlBVVF9QSU5fU1dBUCk7CisKKwkvKgorCSAqIFs3XSBzZXQgdmFsaWRpdHkgYml0IGZvciBjaGFubmVsIHN0YXR1cworCSAqIFszOjBdIHNldCBvcmlnaW5hbCBzYW1wbGUgZnJlcXVlbmN5IGZvciBjaGFubmVsIHN0YXR1cworCSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9BVURJT19TVEFUVVNfQklUU19TRVRUSU5HXzEpOworCisJLyoKKwkgKiBbN10gc2V0IHZhbHVlIGZvciBjaGFubmVsIHN0YXR1cworCSAqIFs2XSBzZXQgdmFsdWUgZm9yIGNoYW5uZWwgc3RhdHVzCisJICogWzVdIHNldCBjb3B5cmlnaHQgYml0IGZvciBjaGFubmVsIHN0YXR1cworCSAqIFs0OjJdIHNldCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBjaGFubmVsIHN0YXR1cworCSAqIFsxOjBdIHNldCBjbG9jayBhY2N1cmFjeSBmb3IgY2hhbm5lbCBzdGF0dXMKKwkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQVVESU9fU1RBVFVTX0JJVFNfU0VUVElOR18yKTsKKworCS8qIFs3OjBdIHNldCBjYXRlZ29yeSBjb2RlIGZvciBjaGFubmVsIHN0YXR1cyAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DQVRFR09SWV9DT0RFKTsKKworCS8qCisJICogWzc6NF0gc2V0IHNvdXJjZSBudW1iZXIgZm9yIGNoYW5uZWwgc3RhdHVzCisJICogWzM6MF0gc2V0IHdvcmQgbGVuZ3RoIGZvciBjaGFubmVsIHN0YXR1cworCSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9TT1VSQ0VfTlVNX0FVRElPX1dPUkRfTEVOKTsKKworCS8qIFs3OjRdIHNldCBzYW1wbGUgZnJlcXVlbmN5IGZvciBjaGFubmVsIHN0YXR1cyAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgyMCwgSERNSV9BVURJT19WSURFT19TRVRUSU5HXzEpOworfQorCisvKioKKyAqIHNoX2hkbWlfcGh5X2NvbmZpZygpCisgKi8KK3N0YXRpYyB2b2lkIHNoX2hkbWlfcGh5X2NvbmZpZyhzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKK3sKKwkvKiA3MjBwLCA4Yml0LCA3NC4yNU1Iei4gTWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBmb3Igb3RoZXIgZm9ybWF0cyAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgxOSwgSERNSV9TTElQSERNSVRfUEFSQU1fU0VUVElOR1NfMSk7CisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU18yKTsKKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfU0xJUEhETUlUX1BBUkFNX1NFVFRJTkdTXzMpOworCS8qIFBMTEFfQ09ORklHWzc6MF06IFZDTyBnYWluLCBWQ08gb2Zmc2V0LCBMUEYgcmVzaXN0YW5jZVswXSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHg0NCwgSERNSV9TTElQSERNSVRfUEFSQU1fU0VUVElOR1NfNSk7CisJaGRtaV93cml0ZShoZG1pLCAweDMyLCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU182KTsKKwloZG1pX3dyaXRlKGhkbWksIDB4NEEsIEhETUlfU0xJUEhETUlUX1BBUkFNX1NFVFRJTkdTXzcpOworCWhkbWlfd3JpdGUoaGRtaSwgMHgwRSwgSERNSV9TTElQSERNSVRfUEFSQU1fU0VUVElOR1NfOCk7CisJaGRtaV93cml0ZShoZG1pLCAweDI1LCBIRE1JX1NMSVBIRE1JVF9QQVJBTV9TRVRUSU5HU185KTsKKwloZG1pX3dyaXRlKGhkbWksIDB4MDQsIEhETUlfU0xJUEhETUlUX1BBUkFNX1NFVFRJTkdTXzEwKTsKK30KKworLyoqCisgKiBzaF9oZG1pX2F2aV9pbmZvZnJhbWVfc2V0dXAoKSAtIEF1eGlsaWFyeSBWaWRlbyBJbmZvcm1hdGlvbiBJbmZvRnJhbWUgQ09OVFJPTCBQQUNLRVQKKyAqLworc3RhdGljIHZvaWQgc2hfaGRtaV9hdmlfaW5mb2ZyYW1lX3NldHVwKHN0cnVjdCBzaF9oZG1pICpoZG1pKQoreworCS8qIEFWSSBJbmZvRnJhbWUgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDYsIEhETUlfQ1RSTF9QS1RfQlVGX0lOREVYKTsKKworCS8qIFBhY2tldCBUeXBlID0gMHg4MiAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHg4MiwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMCk7CisKKwkvKiBWZXJzaW9uID0gMHgwMiAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMiwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMSk7CisKKwkvKiBMZW5ndGggPSAxMyAoMHgwRCkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MEQsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjIpOworCisJLyogTi4gQS4gQ2hlY2tzdW0gKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjApOworCisJLyoKKwkgKiBZID0gUkdCCisJICogQTAgPSBObyBEYXRhCisJICogQiA9IEJhciBEYXRhIG5vdCB2YWxpZAorCSAqIFMgPSBObyBEYXRhCisJICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIxKTsKKworCS8qCisJICogQyA9IE5vIERhdGEKKwkgKiBNID0gMTY6OSBQaWN0dXJlIEFzcGVjdCBSYXRpbworCSAqIFIgPSBTYW1lIGFzIHBpY3R1cmUgYXNwZWN0IHJhdGlvCisJICovCisJaGRtaV93cml0ZShoZG1pLCAweDI4LCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIyKTsKKworCS8qCisJICogSVRDID0gTm8gRGF0YQorCSAqIEVDID0geHZZQ0M2MDEKKwkgKiBRID0gRGVmYXVsdCAoZGVwZW5kcyBvbiB2aWRlbyBmb3JtYXQpCisJICogU0MgPSBObyBLbm93biBub25fdW5pZm9ybSBTY2FsaW5nCisJICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIzKTsKKworCS8qCisJICogVklDID0gMTI4MCB4IDcyMHA6IGlnbm9yZWQgaWYgZXh0ZXJuYWwgY29uZmlnIGlzIHVzZWQKKwkgKiBTZW5kIDIgZm9yIDcyMCB4IDQ4MHAsIDE2IGZvciAxMDgwcAorCSAqLworCWhkbWlfd3JpdGUoaGRtaSwgNCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNCk7CisKKwkvKiBQUiA9IE5vIFJlcGV0aXRpb24gKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjUpOworCisJLyogTGluZSBOdW1iZXIgb2YgRW5kIG9mIFRvcCBCYXIgKGxvd2VyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjYpOworCisJLyogTGluZSBOdW1iZXIgb2YgRW5kIG9mIFRvcCBCYXIgKHVwcGVyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjcpOworCisJLyogTGluZSBOdW1iZXIgb2YgU3RhcnQgb2YgQm90dG9tIEJhciAobG93ZXIgOCBiaXRzKSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCOCk7CisKKwkvKiBMaW5lIE51bWJlciBvZiBTdGFydCBvZiBCb3R0b20gQmFyICh1cHBlciA4IGJpdHMpICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEI5KTsKKworCS8qIFBpeGVsIE51bWJlciBvZiBFbmQgb2YgTGVmdCBCYXIgKGxvd2VyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjEwKTsKKworCS8qIFBpeGVsIE51bWJlciBvZiBFbmQgb2YgTGVmdCBCYXIgKHVwcGVyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjExKTsKKworCS8qIFBpeGVsIE51bWJlciBvZiBTdGFydCBvZiBSaWdodCBCYXIgKGxvd2VyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjEyKTsKKworCS8qIFBpeGVsIE51bWJlciBvZiBTdGFydCBvZiBSaWdodCBCYXIgKHVwcGVyIDggYml0cykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjEzKTsKK30KKworLyoqCisgKiBzaF9oZG1pX2F1ZGlvX2luZm9mcmFtZV9zZXR1cCgpIC0gQXVkaW8gSW5mb0ZyYW1lIG9mIENPTlRST0wgUEFDS0VUCisgKi8KK3N0YXRpYyB2b2lkIHNoX2hkbWlfYXVkaW9faW5mb2ZyYW1lX3NldHVwKHN0cnVjdCBzaF9oZG1pICpoZG1pKQoreworCS8qIEF1ZGlvIEluZm9GcmFtZSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwOCwgSERNSV9DVFJMX1BLVF9CVUZfSU5ERVgpOworCisJLyogUGFja2V0IFR5cGUgPSAweDg0ICovCisJaGRtaV93cml0ZShoZG1pLCAweDg0LCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIwKTsKKworCS8qIFZlcnNpb24gTnVtYmVyID0gMHgwMSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMSwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMSk7CisKKwkvKiAwIExlbmd0aCA9IDEwICgweDBBKSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwQSwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMik7CisKKwkvKiBuLiBhLiBDaGVja3N1bSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMCk7CisKKwkvKiBBdWRpbyBDaGFubmVsIENvdW50ID0gUmVmZXIgdG8gU3RyZWFtIEhlYWRlciAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMSk7CisKKwkvKiBSZWZlciB0byBTdHJlYW0gSGVhZGVyICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIyKTsKKworCS8qIEZvcm1hdCBkZXBlbmRzIG9uIGNvZGluZyB0eXBlIChpLmUuIENUMC4uLkNUMykgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjMpOworCisJLyogU3BlYWtlciBDaGFubmVsIEFsbG9jYXRpb24gPSBGcm9udCBSaWdodCArIEZyb250IExlZnQgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjQpOworCisJLyogTGV2ZWwgU2hpZnQgVmFsdWUgPSAwIGRCLCBEb3duIC0gbWl4IGlzIHBlcm1pdHRlZCBvciBubyBpbmZvcm1hdGlvbiAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNSk7CisKKwkvKiBSZXNlcnZlZCAoMCkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjYpOworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCNyk7CisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEI4KTsKKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjkpOworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMTApOworfQorCisvKioKKyAqIHNoX2hkbWlfZ2FtdXRfbWV0YWRhdGFfc2V0dXAoKSAtIEdhbXV0IE1ldGFkYXRhIFBhY2tldCBvZiBDT05UUk9MIFBBQ0tFVAorICovCitzdGF0aWMgdm9pZCBzaF9oZG1pX2dhbXV0X21ldGFkYXRhX3NldHVwKHN0cnVjdCBzaF9oZG1pICpoZG1pKQoreworCWludCBpOworCisJLyogR2FtdXQgTWV0YWRhdGEgUGFja2V0ICovCisJaGRtaV93cml0ZShoZG1pLCAweDA0LCBIRE1JX0NUUkxfUEtUX0JVRl9JTkRFWCk7CisKKwkvKiBQYWNrZXQgVHlwZSA9IDB4MEEgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MEEsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjApOworCS8qIEdhbXV0IFBhY2tldCBpcyBub3QgdXNlZCwgc28gZGVmYXVsdCB2YWx1ZSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMCwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMSk7CisJLyogR2FtdXQgUGFja2V0IGlzIG5vdCB1c2VkLCBzbyBkZWZhdWx0IHZhbHVlICovCisJaGRtaV93cml0ZShoZG1pLCAweDEwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIyKTsKKworCS8qIEdCRCBieXRlcyAwIHRocm91Z2ggMjcgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDI3OyBpKyspCisJCS8qIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjBfNjNIIC0gUEIyN183RUggKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIwICsgaSk7Cit9CisKKy8qKgorICogc2hfaGRtaV9hY3Bfc2V0dXAoKSAtIEF1ZGlvIENvbnRlbnQgUHJvdGVjdGlvbiBQYWNrZXQgKEFDUCkKKyAqLworc3RhdGljIHZvaWQgc2hfaGRtaV9hY3Bfc2V0dXAoc3RydWN0IHNoX2hkbWkgKmhkbWkpCit7CisJaW50IGk7CisKKwkvKiBBdWRpbyBDb250ZW50IFByb3RlY3Rpb24gUGFja2V0IChBQ1ApICovCisJaGRtaV93cml0ZShoZG1pLCAweDAxLCBIRE1JX0NUUkxfUEtUX0JVRl9JTkRFWCk7CisKKwkvKiBQYWNrZXQgVHlwZSA9IDB4MDQgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDQsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjApOworCS8qIEFDUF9UeXBlICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIxKTsKKwkvKiBSZXNlcnZlZCAoMCkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjIpOworCisJLyogR0JEIGJ5dGVzIDAgdGhyb3VnaCAyNyAqLworCWZvciAoaSA9IDA7IGkgPD0gMjc7IGkrKykKKwkJLyogSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMCAtIFBCMjcgKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIwICsgaSk7Cit9CisKKy8qKgorICogc2hfaGRtaV9pc3JjMV9zZXR1cCgpIC0gSVNSQzEgUGFja2V0CisgKi8KK3N0YXRpYyB2b2lkIHNoX2hkbWlfaXNyYzFfc2V0dXAoc3RydWN0IHNoX2hkbWkgKmhkbWkpCit7CisJaW50IGk7CisKKwkvKiBJU1JDMSBQYWNrZXQgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDIsIEhETUlfQ1RSTF9QS1RfQlVGX0lOREVYKTsKKworCS8qIFBhY2tldCBUeXBlID0gMHgwNSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwNSwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMCk7CisJLyogSVNSQ19Db250LCBJU1JDX1ZhbGlkLCBSZXNlcnZlZCAoMCksIElTUkNfU3RhdHVzICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIxKTsKKwkvKiBSZXNlcnZlZCAoMCkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjIpOworCisJLyogUEIwIFVQQ19FQU5fSVNSQ18wLTE1ICovCisJLyogQnl0ZXMgUEIxNi1QQjI3IHNoYWxsIGJlIHNldCB0byBhIHZhbHVlIG9mIDAuICovCisJZm9yIChpID0gMDsgaSA8PSAyNzsgaSsrKQorCQkvKiBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIwIC0gUEIyNyAqLworCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19QQjAgKyBpKTsKK30KKworLyoqCisgKiBzaF9oZG1pX2lzcmMyX3NldHVwKCkgLSBJU1JDMiBQYWNrZXQKKyAqLworc3RhdGljIHZvaWQgc2hfaGRtaV9pc3JjMl9zZXR1cChzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKK3sKKwlpbnQgaTsKKworCS8qIElTUkMyIFBhY2tldCAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwMywgSERNSV9DVFJMX1BLVF9CVUZfSU5ERVgpOworCisJLyogSEIwIFBhY2tldCBUeXBlID0gMHgwNiAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgwNiwgSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX0hCMCk7CisJLyogUmVzZXJ2ZWQgKDApICovCisJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfSEIxKTsKKwkvKiBSZXNlcnZlZCAoMCkgKi8KKwloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfQ1RSTF9QS1RfQlVGX0FDQ0VTU19IQjIpOworCisJLyogUEIwIFVQQ19FQU5fSVNSQ18xNi0zMSAqLworCS8qIEJ5dGVzIFBCMTYtUEIyNyBzaGFsbCBiZSBzZXQgdG8gYSB2YWx1ZSBvZiAwLiAqLworCWZvciAoaSA9IDA7IGkgPD0gMjc7IGkrKykKKwkJLyogSERNSV9DVFJMX1BLVF9CVUZfQUNDRVNTX1BCMCAtIFBCMjcgKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0NUUkxfUEtUX0JVRl9BQ0NFU1NfUEIwICsgaSk7Cit9CisKKy8qKgorICogc2hfaGRtaV9jb25maWd1cmUoKSAtIEluaXRpYWxpc2UgSERNSSBmb3Igb3V0cHV0CisgKi8KK3N0YXRpYyB2b2lkIHNoX2hkbWlfY29uZmlndXJlKHN0cnVjdCBzaF9oZG1pICpoZG1pKQoreworCS8qIENvbmZpZ3VyZSB2aWRlbyBmb3JtYXQgKi8KKwlzaF9oZG1pX3ZpZGVvX2NvbmZpZyhoZG1pKTsKKworCS8qIENvbmZpZ3VyZSBhdWRpbyBmb3JtYXQgKi8KKwlzaF9oZG1pX2F1ZGlvX2NvbmZpZyhoZG1pKTsKKworCS8qIENvbmZpZ3VyZSBQSFkgKi8KKwlzaF9oZG1pX3BoeV9jb25maWcoaGRtaSk7CisKKwkvKiBBdXhpbGlhcnkgVmlkZW8gSW5mb3JtYXRpb24gKEFWSSkgSW5mb0ZyYW1lICovCisJc2hfaGRtaV9hdmlfaW5mb2ZyYW1lX3NldHVwKGhkbWkpOworCisJLyogQXVkaW8gSW5mb0ZyYW1lICovCisJc2hfaGRtaV9hdWRpb19pbmZvZnJhbWVfc2V0dXAoaGRtaSk7CisKKwkvKiBHYW11dCBNZXRhZGF0YSBwYWNrZXQgKi8KKwlzaF9oZG1pX2dhbXV0X21ldGFkYXRhX3NldHVwKGhkbWkpOworCisJLyogQXVkaW8gQ29udGVudCBQcm90ZWN0aW9uIChBQ1ApIFBhY2tldCAqLworCXNoX2hkbWlfYWNwX3NldHVwKGhkbWkpOworCisJLyogSVNSQzEgUGFja2V0ICovCisJc2hfaGRtaV9pc3JjMV9zZXR1cChoZG1pKTsKKworCS8qIElTUkMyIFBhY2tldCAqLworCXNoX2hkbWlfaXNyYzJfc2V0dXAoaGRtaSk7CisKKwkvKgorCSAqIENvbnRyb2wgcGFja2V0IGF1dG8gc2VuZCB3aXRoIFZTWU5DIGNvbnRyb2w6IGF1dG8gc2VuZAorCSAqIEdlbmVyYWwgY29udHJvbCwgR2FtdXQgbWV0YWRhdGEsIElTUkMsIGFuZCBBQ1AgcGFja2V0cworCSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHg4RSwgSERNSV9DVFJMX1BLVF9BVVRPX1NFTkQpOworCisJLyogRklYTUUgKi8KKwltc2xlZXAoMTApOworCisJLyogUFMgbW9kZSBiLT5kLCByZXNldCBQTExBIGFuZCBQTExCICovCisJaGRtaV93cml0ZShoZG1pLCAweDRDLCBIRE1JX1NZU1RFTV9DVFJMKTsKKworCXVkZWxheSgxMCk7CisKKwloZG1pX3dyaXRlKGhkbWksIDB4NDAsIEhETUlfU1lTVEVNX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBzaF9oZG1pX3JlYWRfZWRpZChzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZoZG1pLT52YXI7CisJc3RydWN0IHNoX21vYmlsZV9oZG1pX2luZm8gKnBkYXRhID0gaGRtaS0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBmYl92aWRlb21vZGUgKmxjZF9jZmcgPSAmcGRhdGEtPmxjZF9jaGFuLT5sY2RfY2ZnOworCXVuc2lnbmVkIGxvbmcgaGVpZ2h0ID0gdmFyLT5oZWlnaHQsIHdpZHRoID0gdmFyLT53aWR0aDsKKwlpbnQgaTsKKwl1OCBlZGlkWzEyOF07CisKKwkvKiBSZWFkIEVESUQgKi8KKwlwcl9kZWJ1ZygiUmVhZCBiYWNrIEVESUQgY29kZToiKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJZWRpZFtpXSA9IGhkbWlfcmVhZChoZG1pLCBIRE1JX0VESURfS1NWX0ZJRk9fQUNDRVNTX1dJTkRPVyk7CisjaWZkZWYgREVCVUcKKwkJaWYgKChpICUgMTYpID09IDApIHsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyWCB8ICUwMlgiLCBpLCBlZGlkW2ldKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJYIiwgZWRpZFtpXSk7CisJCX0KKyNlbmRpZgorCX0KKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisjZW5kaWYKKwlmYl9wYXJzZV9lZGlkKGVkaWQsIHZhcik7CisJcHJfZGVidWcoIiV1LSV1LSV1LSV1IHggJXUtJXUtJXUtJXUgQCAlbHUga0h6IG1vbml0b3IgZGV0ZWN0ZWRcbiIsCisJCSB2YXItPmxlZnRfbWFyZ2luLCB2YXItPnhyZXMsIHZhci0+cmlnaHRfbWFyZ2luLCB2YXItPmhzeW5jX2xlbiwKKwkJIHZhci0+dXBwZXJfbWFyZ2luLCB2YXItPnlyZXMsIHZhci0+bG93ZXJfbWFyZ2luLCB2YXItPnZzeW5jX2xlbiwKKwkJIFBJQ09TMktIWih2YXItPnBpeGNsb2NrKSk7CisKKwkvKiBGSVhNRTogVXNlIHVzZXItcHJvdmlkZWQgY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIEVESUQgKi8KKwl2YXItPndpZHRoCQk9IHdpZHRoOworCXZhci0+eHJlcwkJPSBsY2RfY2ZnLT54cmVzOworCXZhci0+eHJlc192aXJ0dWFsCT0gbGNkX2NmZy0+eHJlczsKKwl2YXItPmxlZnRfbWFyZ2luCT0gbGNkX2NmZy0+bGVmdF9tYXJnaW47CisJdmFyLT5yaWdodF9tYXJnaW4JPSBsY2RfY2ZnLT5yaWdodF9tYXJnaW47CisJdmFyLT5oc3luY19sZW4JCT0gbGNkX2NmZy0+aHN5bmNfbGVuOworCXZhci0+aGVpZ2h0CQk9IGhlaWdodDsKKwl2YXItPnlyZXMJCT0gbGNkX2NmZy0+eXJlczsKKwl2YXItPnlyZXNfdmlydHVhbAk9IGxjZF9jZmctPnlyZXMgKiAyOworCXZhci0+dXBwZXJfbWFyZ2luCT0gbGNkX2NmZy0+dXBwZXJfbWFyZ2luOworCXZhci0+bG93ZXJfbWFyZ2luCT0gbGNkX2NmZy0+bG93ZXJfbWFyZ2luOworCXZhci0+dnN5bmNfbGVuCQk9IGxjZF9jZmctPnZzeW5jX2xlbjsKKwl2YXItPnN5bmMJCT0gbGNkX2NmZy0+c3luYzsKKwl2YXItPnBpeGNsb2NrCQk9IGxjZF9jZmctPnBpeGNsb2NrOworCisJaGRtaV9leHRlcm5hbF92aWRlb19wYXJhbShoZG1pKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX2hkbWlfaG90cGx1ZyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX2hkbWkgKmhkbWkgPSBkZXZfaWQ7CisJdTggc3RhdHVzMSwgc3RhdHVzMiwgbWFzazEsIG1hc2syOworCisJLyogbW9kZV9iIGFuZCBQTExBIGFuZCBQTExCIHJlc2V0ICovCisJaGRtaV93cml0ZShoZG1pLCAweDJDLCBIRE1JX1NZU1RFTV9DVFJMKTsKKworCS8qIEhvdyBsb25nIHNoYWxsIHJlc2V0IGJlIGhlbGQ/ICovCisJdWRlbGF5KDEwKTsKKworCS8qIG1vZGVfYiBhbmQgUExMQSBhbmQgUExMQiByZXNldCByZWxlYXNlICovCisJaGRtaV93cml0ZShoZG1pLCAweDIwLCBIRE1JX1NZU1RFTV9DVFJMKTsKKworCXN0YXR1czEgPSBoZG1pX3JlYWQoaGRtaSwgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzEpOworCXN0YXR1czIgPSBoZG1pX3JlYWQoaGRtaSwgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzIpOworCisJbWFzazEgPSBoZG1pX3JlYWQoaGRtaSwgSERNSV9JTlRFUlJVUFRfTUFTS18xKTsKKwltYXNrMiA9IGhkbWlfcmVhZChoZG1pLCBIRE1JX0lOVEVSUlVQVF9NQVNLXzIpOworCisJLyogQ29ycmVjdCB3b3VsZCBiZSB0byBhY2sgb25seSBzZXQgYml0cywgYnV0IHRoZSBkYXRhc2hlZXQgcmVxdWlyZXMgMHhmZiAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHhGRiwgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzEpOworCWhkbWlfd3JpdGUoaGRtaSwgMHhGRiwgSERNSV9JTlRFUlJVUFRfU1RBVFVTXzIpOworCisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJfZGVidWcoIklSUSAjJWQ6IFN0YXR1cyAjMTogMHgleCAmIDB4JXgsICMyOiAweCV4ICYgMHgleFxuIiwKKwkJCSBpcnEsIHN0YXR1czEsIG1hc2sxLCBzdGF0dXMyLCBtYXNrMik7CisKKwlpZiAoISgoc3RhdHVzMSAmIG1hc2sxKSB8IChzdGF0dXMyICYgbWFzazIpKSkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfSBlbHNlIGlmIChzdGF0dXMxICYgMHhjMCkgeworCQl1OCBtc2VuczsKKworCQkvKiBEYXRhc2hlZXQgc3BlY2lmaWVzIDEwbXMuLi4gKi8KKwkJdWRlbGF5KDUwMCk7CisKKwkJbXNlbnMgPSBoZG1pX3JlYWQoaGRtaSwgSERNSV9IT1RfUExVR19NU0VOU19TVEFUVVMpOworCQlwcl9kZWJ1ZygiTVNFTlMgMHgleFxuIiwgbXNlbnMpOworCQkvKiBDaGVjaywgaWYgaG90IHBsdWcgJiBNU0VOUyBwaW4gc3RhdHVzIGFyZSBib3RoIGhpZ2ggKi8KKwkJaWYgKChtc2VucyAmIDB4QzApID09IDB4QzApIHsKKwkJCS8qIERpc3BsYXkgcGx1ZyBpbiAqLworCQkJaGRtaS0+aHBfc3RhdGUgPSBIRE1JX0hPVFBMVUdfQ09OTkVDVEVEOworCisJCQkvKiBTZXQgRURJRCB3b3JkIGFkZHJlc3MgICovCisJCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9XT1JEX0FERFJFU1MpOworCQkJLyogU2V0IEVESUQgc2VnbWVudCBwb2ludGVyICovCisJCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9TRUdNRU5UX1BPSU5URVIpOworCQkJLyogRW5hYmxlIEVESUQgaW50ZXJydXB0ICovCisJCQloZG1pX3dyaXRlKGhkbWksIDB4QzYsIEhETUlfSU5URVJSVVBUX01BU0tfMSk7CisJCX0gZWxzZSBpZiAoIShzdGF0dXMxICYgMHg4MCkpIHsKKwkJCS8qIERpc3BsYXkgdW5wbHVnLCBiZXdhcmUgbXVsdGlwbGUgaW50ZXJydXB0cyAqLworCQkJaWYgKGhkbWktPmhwX3N0YXRlICE9IEhETUlfSE9UUExVR19ESVNDT05ORUNURUQpCisJCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZoZG1pLT5lZGlkX3dvcmssIDApOworCisJCQloZG1pLT5ocF9zdGF0ZSA9IEhETUlfSE9UUExVR19ESVNDT05ORUNURUQ7CisJCQkvKiBkaXNwbGF5X29mZiB3aWxsIHN3aXRjaCBiYWNrIHRvIG1vZGVfYSAqLworCQl9CisJfSBlbHNlIGlmIChzdGF0dXMxICYgMikgeworCQkvKiBFRElEIGVycm9yIGludGVycnVwdDogcmV0cnkgKi8KKwkJLyogU2V0IEVESUQgd29yZCBhZGRyZXNzICAqLworCQloZG1pX3dyaXRlKGhkbWksIDB4MDAsIEhETUlfRURJRF9XT1JEX0FERFJFU1MpOworCQkvKiBTZXQgRURJRCBzZWdtZW50IHBvaW50ZXIgKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweDAwLCBIRE1JX0VESURfU0VHTUVOVF9QT0lOVEVSKTsKKwl9IGVsc2UgaWYgKHN0YXR1czEgJiA0KSB7CisJCS8qIERpc2FibGUgRURJRCBpbnRlcnJ1cHQgKi8KKwkJaGRtaV93cml0ZShoZG1pLCAweEMwLCBIRE1JX0lOVEVSUlVQVF9NQVNLXzEpOworCQloZG1pLT5ocF9zdGF0ZSA9IEhETUlfSE9UUExVR19FRElEX0RPTkU7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaGRtaS0+ZWRpZF93b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2Rpc3BsYXlfb24odm9pZCAqYXJnLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSA9IGFyZzsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2hkbWlfaW5mbyAqcGRhdGEgPSBoZG1pLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoaW5mby0+dmFyLnhyZXMgIT0gMTI4MCB8fCBpbmZvLT52YXIueXJlcyAhPSA3MjApIHsKKwkJZGV2X3dhcm4oaW5mby0+ZGV2aWNlLCAiVW5zdXBwb3J0ZWQgZnJhbWVidWZmZXIgZ2VvbWV0cnkgJXV4JXVcbiIsCisJCQkgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKKwkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCIlcyglcCk6IHN0YXRlICV4XG4iLCBfX2Z1bmNfXywgcGRhdGEtPmxjZF9kZXYsIGluZm8tPnN0YXRlKTsKKwkvKgorCSAqIEZJWE1FOiBub3QgYSBnb29kIHBsYWNlIHRvIHN0b3JlIGZiX2luZm8uIEFuZCB3ZSBjYW5ub3QgbnVsbGlmeSBpdAorCSAqIGV2ZW4gb24gbW9uaXRvciBkaXNjb25uZWN0LiBXaGF0IHNob3VsZCB0aGUgbGlmZWN5Y2xlIGJlPworCSAqLworCWhkbWktPmluZm8gPSBpbmZvOworCXN3aXRjaCAoaGRtaS0+aHBfc3RhdGUpIHsKKwljYXNlIEhETUlfSE9UUExVR19FRElEX0RPTkU6CisJCS8qIFBTIG1vZGUgZC0+ZS4gQWxsIGZ1bmN0aW9ucyBhcmUgYWN0aXZlICovCisJCWhkbWlfd3JpdGUoaGRtaSwgMHg4MCwgSERNSV9TWVNURU1fQ1RSTCk7CisJCXByX2RlYnVnKCJIRE1JIHJ1bm5pbmdcbiIpOworCQlicmVhazsKKwljYXNlIEhETUlfSE9UUExVR19ESVNDT05ORUNURUQ6CisJCWluZm8tPnN0YXRlID0gRkJJTkZPX1NUQVRFX1NVU1BFTkRFRDsKKwlkZWZhdWx0OgorCQloZG1pLT52YXIgPSBpbmZvLT52YXI7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZG1pX2Rpc3BsYXlfb2ZmKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2hfaGRtaSAqaGRtaSA9IGFyZzsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2hkbWlfaW5mbyAqcGRhdGEgPSBoZG1pLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlwcl9kZWJ1ZygiJXMoJXApXG4iLCBfX2Z1bmNfXywgcGRhdGEtPmxjZF9kZXYpOworCS8qIFBTIG1vZGUgZS0+YSAqLworCWhkbWlfd3JpdGUoaGRtaSwgMHgxMCwgSERNSV9TWVNURU1fQ1RSTCk7Cit9CisKKy8qIEhvdHBsdWcgaW50ZXJydXB0IG9jY3VycmVkLCByZWFkIEVESUQgKi8KK3N0YXRpYyB2b2lkIGVkaWRfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNoX2hkbWkgKmhkbWkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNoX2hkbWksIGVkaWRfd29yay53b3JrKTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2hkbWlfaW5mbyAqcGRhdGEgPSBoZG1pLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlwcl9kZWJ1ZygiJXMoJXApOiBiZWdpbiwgaG90cGx1ZyBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLAorCQkgcGRhdGEtPmxjZF9kZXYsIGhkbWktPmhwX3N0YXRlKTsKKworCWlmICghcGRhdGEtPmxjZF9kZXYpCisJCXJldHVybjsKKworCWlmIChoZG1pLT5ocF9zdGF0ZSA9PSBIRE1JX0hPVFBMVUdfRURJRF9ET05FKSB7CisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaGRtaS0+ZGV2KTsKKwkJLyogQSBkZXZpY2UgaGFzIGJlZW4gcGx1Z2dlZCBpbiAqLworCQlzaF9oZG1pX3JlYWRfZWRpZChoZG1pKTsKKwkJbXNsZWVwKDEwKTsKKwkJc2hfaGRtaV9jb25maWd1cmUoaGRtaSk7CisJCS8qIFN3aXRjaGVkIHRvIGFub3RoZXIgKGQpIHBvd2VyLXNhdmUgbW9kZSAqLworCQltc2xlZXAoMTApOworCisJCWlmICghaGRtaS0+aW5mbykKKwkJCXJldHVybjsKKworCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisKKwkJLyogSERNSSBwbHVnIGluICovCisJCWhkbWktPmluZm8tPnZhciA9IGhkbWktPnZhcjsKKwkJaWYgKGhkbWktPmluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQkJZmJfc2V0X3N1c3BlbmQoaGRtaS0+aW5mbywgMCk7CisJCWVsc2UKKwkJCWhkbWlfZGlzcGxheV9vbihoZG1pLCBoZG1pLT5pbmZvKTsKKworCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJfSBlbHNlIHsKKwkJaWYgKCFoZG1pLT5pbmZvKQorCQkJcmV0dXJuOworCisJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKworCQkvKiBIRE1JIGRpc2Nvbm5lY3QgKi8KKwkJZmJfc2V0X3N1c3BlbmQoaGRtaS0+aW5mbywgMSk7CisKKwkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQlwbV9ydW50aW1lX3B1dChoZG1pLT5kZXYpOworCX0KKworCXByX2RlYnVnKCIlcyglcCk6IGVuZFxuIiwgX19mdW5jX18sIHBkYXRhLT5sY2RfZGV2KTsKK30KKworc3RhdGljIGludCBfX2luaXQgc2hfaGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9tb2JpbGVfaGRtaV9pbmZvICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwgcmV0OworCXN0cnVjdCBzaF9oZG1pICpoZG1pOworCWxvbmcgcmF0ZTsKKworCWlmICghcmVzIHx8ICFwZGF0YSB8fCBpcnEgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhkbWkgPSBremFsbG9jKHNpemVvZigqaGRtaSksIEdGUF9LRVJORUwpOworCWlmICghaGRtaSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgZGV2aWNlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloZG1pLT5kZXYgPSAmcGRldi0+ZGV2OworCisJaGRtaS0+aGRtaV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKGhkbWktPmhkbWlfY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhkbWktPmhkbWlfY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZWdldGNsazsKKwl9CisKKwlyYXRlID0gUElDT1MyS0haKHBkYXRhLT5sY2RfY2hhbi0+bGNkX2NmZy5waXhjbG9jaykgKiAxMDAwOworCisJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGhkbWktPmhkbWlfY2xrLCByYXRlKTsKKwlpZiAocmF0ZSA8IDApIHsKKwkJcmV0ID0gcmF0ZTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBzdWl0YWJsZSByYXRlOiAlbGRcbiIsIHJhdGUpOworCQlnb3RvIGVyYXRlOworCX0KKworCXJldCA9IGNsa19zZXRfcmF0ZShoZG1pLT5oZG1pX2NsaywgcmF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHNldCByYXRlICVsZDogJWRcbiIsIHJhdGUsIHJldCk7CisJCWdvdG8gZXJhdGU7CisJfQorCisJcHJfZGVidWcoIkhETUkgc2V0IGZyZXF1ZW5jeSAlbHVcbiIsIHJhdGUpOworCisJcmV0ID0gY2xrX2VuYWJsZShoZG1pLT5oZG1pX2Nsayk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZWNsa2VuYWJsZTsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRW5hYmxlZCBIRE1JIGNsb2NrIGF0ICVsdUh6XG4iLCByYXRlKTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkhETUkgcmVnaXN0ZXIgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcmVxcmVnOworCX0KKworCWhkbWktPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFoZG1pLT5iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkhETUkgcmVnaXN0ZXIgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZW1hcDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBoZG1pKTsKKworI2lmIDEKKwkvKiBQcm9kdWN0IGFuZCByZXZpc2lvbiBJRHMgYXJlIDAgaW4gc2gtbW9iaWxlIHZlcnNpb24gKi8KKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRGV0ZWN0ZWQgSERNSSBjb250cm9sbGVyIDB4JXg6MHgleFxuIiwKKwkJIGhkbWlfcmVhZChoZG1pLCBIRE1JX1BST0RVQ1RfSUQpLCBoZG1pX3JlYWQoaGRtaSwgSERNSV9SRVZJU0lPTl9JRCkpOworI2VuZGlmCisKKwkvKiBTZXQgdXAgTENEQyBjYWxsYmFja3MgKi8KKwlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5ib2FyZF9kYXRhID0gaGRtaTsKKwlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29uID0gaGRtaV9kaXNwbGF5X29uOworCXBkYXRhLT5sY2RfY2hhbi0+Ym9hcmRfY2ZnLmRpc3BsYXlfb2ZmID0gaGRtaV9kaXNwbGF5X29mZjsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZoZG1pLT5lZGlkX3dvcmssIGVkaWRfd29ya19mbik7CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3Jlc3VtZSgmcGRldi0+ZGV2KTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgc2hfaGRtaV9ob3RwbHVnLCAwLAorCQkJICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaGRtaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcmVxaXJxOworCX0KKworCXJldHVybiAwOworCitlcmVxaXJxOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlpb3VubWFwKGhkbWktPmJhc2UpOworZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK2VyZXFyZWc6CisJY2xrX2Rpc2FibGUoaGRtaS0+aGRtaV9jbGspOworZWNsa2VuYWJsZToKK2VyYXRlOgorCWNsa19wdXQoaGRtaS0+aGRtaV9jbGspOworZWdldGNsazoKKwlrZnJlZShoZG1pKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNoX2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX21vYmlsZV9oZG1pX2luZm8gKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNoX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisKKwlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29uID0gTlVMTDsKKwlwZGF0YS0+bGNkX2NoYW4tPmJvYXJkX2NmZy5kaXNwbGF5X29mZiA9IE5VTEw7CisJcGRhdGEtPmxjZF9jaGFuLT5ib2FyZF9jZmcuYm9hcmRfZGF0YSA9IE5VTEw7CisKKwlmcmVlX2lycShpcnEsIGhkbWkpOworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmhkbWktPmVkaWRfd29yayk7CisJY2xrX2Rpc2FibGUoaGRtaS0+aGRtaV9jbGspOworCWNsa19wdXQoaGRtaS0+aGRtaV9jbGspOworCWlvdW5tYXAoaGRtaS0+YmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJa2ZyZWUoaGRtaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfaGRtaV9kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2V4aXRfcChzaF9oZG1pX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic2gtbW9iaWxlLWhkbWkiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaF9oZG1pX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZzaF9oZG1pX2RyaXZlciwgc2hfaGRtaV9wcm9iZSk7Cit9Cittb2R1bGVfaW5pdChzaF9oZG1pX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfaGRtaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX2hkbWlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNoX2hkbWlfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBlckggLyBBUk0tc2htb2JpbGUgSERNSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggMTJjNDUxYS4uZDcyMDc1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTU2LDYgKzU2LDcgQEAKIC8qIHBlci1jaGFubmVsIHJlZ2lzdGVycyAqLwogZW51bSB7IExERENLUEFUMVIsIExERENLUEFUMlIsIExETVQxUiwgTERNVDJSLCBMRE1UM1IsIExEREZSLCBMRFNNMVIsCiAgICAgICAgTERTTTJSLCBMRFNBMVIsIExETUxTUiwgTERIQ05SLCBMREhTWU5SLCBMRFZMTlIsIExEVlNZTlIsIExEUE1SLAorICAgICAgIExESEFKUiwKICAgICAgICBOUl9DSF9SRUdTIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxjZGNfb2Zmc19tYWlubGNkW05SX0NIX1JFR1NdID0gewpAQCAtNzQsNiArNzUsNyBAQAogCVtMRFZMTlJdID0gMHg0NTAsCiAJW0xEVlNZTlJdID0gMHg0NTQsCiAJW0xEUE1SXSA9IDB4NDYwLAorCVtMREhBSlJdID0gMHg0YTAsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsY2RjX29mZnNfc3VibGNkW05SX0NIX1JFR1NdID0gewpAQCAtMTM3LDYgKzEzOSw3IEBACiAJc3RydWN0IGNsayAqZG90X2NsazsKIAl1bnNpZ25lZCBsb25nIGxkZGNrcjsKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiBjaFsyXTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbm90aWZpZXI7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9zaGFyZWRfcmVnc1tOUl9TSEFSRURfUkVHU107CiAJaW50IHN0YXJ0ZWQ7CiB9OwpAQCAtNDA0LDYgKzQwNyw1NiBAQAogCQlsY2RjX3dyaXRlKHByaXYsIF9MRERDS1NUUFIsIDEpOyAvKiBzdG9wIGRvdGNsb2NrICovCiB9CiAKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9sY2RjX2dlb21ldHJ5KHN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCkKK3sKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZjaC0+aW5mby0+dmFyOworCXVuc2lnbmVkIGxvbmcgaF90b3RhbCwgaHN5bmNfcG9zOworCXUzMiB0bXA7CisKKwl0bXAgPSBjaC0+bGRtdDFyX3ZhbHVlOworCXRtcCB8PSAodmFyLT5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKSA/IDAgOiAxIDw8IDI4OworCXRtcCB8PSAodmFyLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID8gMCA6IDEgPDwgMjc7CisJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19EV1BPTCkgPyAxIDw8IDI2IDogMDsKKwl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RJUE9MKSA/IDEgPDwgMjUgOiAwOworCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfREFQT0wpID8gMSA8PCAyNCA6IDA7CisJdG1wIHw9IChjaC0+Y2ZnLmZsYWdzICYgTENEQ19GTEFHU19IU0NOVCkgPyAxIDw8IDE3IDogMDsKKwl0bXAgfD0gKGNoLT5jZmcuZmxhZ3MgJiBMQ0RDX0ZMQUdTX0RXQ05UKSA/IDEgPDwgMTYgOiAwOworCWxjZGNfd3JpdGVfY2hhbihjaCwgTERNVDFSLCB0bXApOworCisJLyogc2V0dXAgU1lTIGJ1cyAqLworCWxjZGNfd3JpdGVfY2hhbihjaCwgTERNVDJSLCBjaC0+Y2ZnLnN5c19idXNfY2ZnLmxkbXQycik7CisJbGNkY193cml0ZV9jaGFuKGNoLCBMRE1UM1IsIGNoLT5jZmcuc3lzX2J1c19jZmcubGRtdDNyKTsKKworCS8qIGhvcml6b250YWwgY29uZmlndXJhdGlvbiAqLworCWhfdG90YWwgPSB2YXItPnhyZXMgKyB2YXItPmhzeW5jX2xlbiArCisJCXZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnJpZ2h0X21hcmdpbjsKKwl0bXAgPSBoX3RvdGFsIC8gODsgLyogSFRDTiAqLworCXRtcCB8PSAodmFyLT54cmVzIC8gOCkgPDwgMTY7IC8qIEhEQ04gKi8KKwlsY2RjX3dyaXRlX2NoYW4oY2gsIExESENOUiwgdG1wKTsKKworCWhzeW5jX3BvcyA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luOworCXRtcCA9IGhzeW5jX3BvcyAvIDg7IC8qIEhTWU5QICovCisJdG1wIHw9ICh2YXItPmhzeW5jX2xlbiAvIDgpIDw8IDE2OyAvKiBIU1lOVyAqLworCWxjZGNfd3JpdGVfY2hhbihjaCwgTERIU1lOUiwgdG1wKTsKKworCS8qIHZlcnRpY2FsIGNvbmZpZ3VyYXRpb24gKi8KKwl0bXAgPSB2YXItPnlyZXMgKyB2YXItPnZzeW5jX2xlbiArCisJCXZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW47IC8qIFZUTE4gKi8KKwl0bXAgfD0gdmFyLT55cmVzIDw8IDE2OyAvKiBWRExOICovCisJbGNkY193cml0ZV9jaGFuKGNoLCBMRFZMTlIsIHRtcCk7CisKKwl0bXAgPSB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbjsgLyogVlNZTlAgKi8KKwl0bXAgfD0gdmFyLT52c3luY19sZW4gPDwgMTY7IC8qIFZTWU5XICovCisJbGNkY193cml0ZV9jaGFuKGNoLCBMRFZTWU5SLCB0bXApOworCisJLyogQWRqdXN0IGhvcml6b250YWwgc3luY2hyb25pc2F0aW9uIGZvciBIRE1JICovCisJdG1wID0gKCh2YXItPnhyZXMgJiA3KSA8PCAyNCkgfAorCQkoKGhfdG90YWwgJiA3KSA8PCAxNikgfAorCQkoKHZhci0+aHN5bmNfbGVuICYgNykgPDwgOCkgfAorCQloc3luY19wb3M7CisJbGNkY193cml0ZV9jaGFuKGNoLCBMREhBSlIsIHRtcCk7Cit9CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfc3RhcnQoc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW4gKmNoOwpAQCAtNDcwLDQ5ICs1MjMsMTEgQEAKIAkJaWYgKCFjaC0+ZW5hYmxlZCkKIAkJCWNvbnRpbnVlOwogCi0JCXRtcCA9IGNoLT5sZG10MXJfdmFsdWU7Ci0JCXRtcCB8PSAobGNkX2NmZy0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkgPyAwIDogMSA8PCAyODsKLQkJdG1wIHw9IChsY2RfY2ZnLT5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpID8gMCA6IDEgPDwgMjc7Ci0JCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdQT0wpID8gMSA8PCAyNiA6IDA7Ci0JCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRElQT0wpID8gMSA8PCAyNSA6IDA7Ci0JCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfREFQT0wpID8gMSA8PCAyNCA6IDA7Ci0JCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfSFNDTlQpID8gMSA8PCAxNyA6IDA7Ci0JCXRtcCB8PSAoY2gtPmNmZy5mbGFncyAmIExDRENfRkxBR1NfRFdDTlQpID8gMSA8PCAxNiA6IDA7Ci0JCWxjZGNfd3JpdGVfY2hhbihjaCwgTERNVDFSLCB0bXApOwotCi0JCS8qIHNldHVwIFNZUyBidXMgKi8KLQkJbGNkY193cml0ZV9jaGFuKGNoLCBMRE1UMlIsIGNoLT5jZmcuc3lzX2J1c19jZmcubGRtdDJyKTsKLQkJbGNkY193cml0ZV9jaGFuKGNoLCBMRE1UM1IsIGNoLT5jZmcuc3lzX2J1c19jZmcubGRtdDNyKTsKLQotCQkvKiBob3Jpem9udGFsIGNvbmZpZ3VyYXRpb24gKi8KLQkJdG1wID0gbGNkX2NmZy0+eHJlcyArIGxjZF9jZmctPmhzeW5jX2xlbjsKLQkJdG1wICs9IGxjZF9jZmctPmxlZnRfbWFyZ2luOwotCQl0bXAgKz0gbGNkX2NmZy0+cmlnaHRfbWFyZ2luOwotCQl0bXAgLz0gODsgLyogSFRDTiAqLwotCQl0bXAgfD0gKGxjZF9jZmctPnhyZXMgLyA4KSA8PCAxNjsgLyogSERDTiAqLwotCQlsY2RjX3dyaXRlX2NoYW4oY2gsIExESENOUiwgdG1wKTsKLQotCQl0bXAgPSBsY2RfY2ZnLT54cmVzOwotCQl0bXAgKz0gbGNkX2NmZy0+cmlnaHRfbWFyZ2luOwotCQl0bXAgLz0gODsgLyogSFNZTlAgKi8KLQkJdG1wIHw9IChsY2RfY2ZnLT5oc3luY19sZW4gLyA4KSA8PCAxNjsgLyogSFNZTlcgKi8KLQkJbGNkY193cml0ZV9jaGFuKGNoLCBMREhTWU5SLCB0bXApOworCQlzaF9tb2JpbGVfbGNkY19nZW9tZXRyeShjaCk7CiAKIAkJLyogcG93ZXIgc3VwcGx5ICovCiAJCWxjZGNfd3JpdGVfY2hhbihjaCwgTERQTVIsIDApOwogCi0JCS8qIHZlcnRpY2FsIGNvbmZpZ3VyYXRpb24gKi8KLQkJdG1wID0gbGNkX2NmZy0+eXJlcyArIGxjZF9jZmctPnZzeW5jX2xlbjsKLQkJdG1wICs9IGxjZF9jZmctPnVwcGVyX21hcmdpbjsKLQkJdG1wICs9IGxjZF9jZmctPmxvd2VyX21hcmdpbjsgLyogVlRMTiAqLwotCQl0bXAgfD0gbGNkX2NmZy0+eXJlcyA8PCAxNjsgLyogVkRMTiAqLwotCQlsY2RjX3dyaXRlX2NoYW4oY2gsIExEVkxOUiwgdG1wKTsKLQotCQl0bXAgPSBsY2RfY2ZnLT55cmVzOwotCQl0bXAgKz0gbGNkX2NmZy0+bG93ZXJfbWFyZ2luOyAvKiBWU1lOUCAqLwotCQl0bXAgfD0gbGNkX2NmZy0+dnN5bmNfbGVuIDw8IDE2OyAvKiBWU1lOVyAqLwotCQlsY2RjX3dyaXRlX2NoYW4oY2gsIExEVlNZTlIsIHRtcCk7Ci0KIAkJYm9hcmRfY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwogCQlpZiAoYm9hcmRfY2ZnLT5zZXR1cF9zeXMpCiAJCQlyZXQgPSBib2FyZF9jZmctPnNldHVwX3N5cyhib2FyZF9jZmctPmJvYXJkX2RhdGEsIGNoLApAQCAtNTc3LDcgKzU5Miw3IEBACiAKIAkJYm9hcmRfY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwogCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29uKQotCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29uKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSk7CisJCQlib2FyZF9jZmctPmRpc3BsYXlfb24oYm9hcmRfY2ZnLT5ib2FyZF9kYXRhLCBjaC0+aW5mbyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05NDMsNiArOTU4LDYyIEBACiAJLnJ1bnRpbWVfcmVzdW1lID0gc2hfbW9iaWxlX2xjZGNfcnVudGltZV9yZXN1bWUsCiB9OwogCitzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmJfZXZlbnQgKmV2ZW50ID0gZGF0YTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGV2ZW50LT5pbmZvOworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuICpjaCA9IGluZm8tPnBhcjsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnCSpib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7CisKKwlpZiAoJmNoLT5sY2RjLT5ub3RpZmllciAhPSBuYikKKwkJcmV0dXJuIDA7CisKKwlkZXZfZGJnKGluZm8tPmRldiwgIiVzKCk6IGFjdGlvbiA9ICVsdSwgZGF0YSA9ICVwXG4iLAorCQlfX2Z1bmNfXywgYWN0aW9uLCBldmVudC0+ZGF0YSk7CisKKwlzd2l0Y2goYWN0aW9uKSB7CisJY2FzZSBGQl9FVkVOVF9TVVNQRU5EOgorCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29mZikKKwkJCWJvYXJkX2NmZy0+ZGlzcGxheV9vZmYoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhKTsKKwkJcG1fcnVudGltZV9wdXQoaW5mby0+ZGV2aWNlKTsKKwkJYnJlYWs7CisJY2FzZSBGQl9FVkVOVF9SRVNVTUU6CisJCXZhciA9ICZpbmZvLT52YXI7CisKKwkJLyogSERNSSBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIExDREMgY29uZmlndXJhdGlvbiAqLworCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29uKQorCQkJYm9hcmRfY2ZnLT5kaXNwbGF5X29uKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwgY2gtPmluZm8pOworCisJCS8qIENoZWNrIGlmIHRoZSBuZXcgZGlzcGxheSBpcyBub3QgaW4gb3VyIG1vZGVsaXN0ICovCisJCWlmIChjaC0+aW5mby0+bW9kZWxpc3QubmV4dCAmJgorCQkgICAgIWZiX21hdGNoX21vZGUodmFyLCAmY2gtPmluZm8tPm1vZGVsaXN0KSkgeworCQkJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOworCQkJaW50IHJldDsKKworCQkJLyogQ2FuIHdlIGhhbmRsZSB0aGlzIGRpc3BsYXk/ICovCisJCQlpZiAodmFyLT54cmVzID4gY2gtPmNmZy5sY2RfY2ZnLnhyZXMgfHwKKwkJCSAgICB2YXItPnlyZXMgPiBjaC0+Y2ZnLmxjZF9jZmcueXJlcykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJLyogQWRkIHRvIHRoZSBtb2RlbGlzdCAqLworCQkJZmJfdmFyX3RvX3ZpZGVvbW9kZSgmbW9kZSwgdmFyKTsKKwkJCXJldCA9IGZiX2FkZF92aWRlb21vZGUoJm1vZGUsICZjaC0+aW5mby0+bW9kZWxpc3QpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaW5mby0+ZGV2aWNlKTsKKworCQlzaF9tb2JpbGVfbGNkY19nZW9tZXRyeShjaCk7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2hfbW9iaWxlX2xjZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9tb2JpbGVfbGNkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTAyMCwxNSArMTA5MSwxOSBAQAogCQlnb3RvIGVycjE7CiAJfQogCisJcHJpdi0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghcHJpdi0+YmFzZSkKKwkJZ290byBlcnIxOworCiAJZXJyb3IgPSBzaF9tb2JpbGVfbGNkY19zZXR1cF9jbG9ja3MocGRldiwgcGRhdGEtPmNsb2NrX3NvdXJjZSwgcHJpdik7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBzZXR1cCBjbG9ja3NcbiIpOwogCQlnb3RvIGVycjE7CiAJfQogCi0JcHJpdi0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCAocmVzLT5lbmQgLSByZXMtPnN0YXJ0KSArIDEpOwotCiAJZm9yIChpID0gMDsgaSA8IGo7IGkrKykgeworCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcjsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbGNkX2NmZzsKIAkJY2ZnID0gJnByaXYtPmNoW2ldLmNmZzsKIAogCQlwcml2LT5jaFtpXS5pbmZvID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgJnBkZXYtPmRldik7CkBAIC0xMDM5LDIyICsxMTE0LDMzIEBACiAJCX0KIAogCQlpbmZvID0gcHJpdi0+Y2hbaV0uaW5mbzsKKwkJdmFyID0gJmluZm8tPnZhcjsKKwkJbGNkX2NmZyA9ICZjZmctPmxjZF9jZmc7CiAJCWluZm8tPmZib3BzID0gJnNoX21vYmlsZV9sY2RjX29wczsKLQkJaW5mby0+dmFyLnhyZXMgPSBpbmZvLT52YXIueHJlc192aXJ0dWFsID0gY2ZnLT5sY2RfY2ZnLnhyZXM7Ci0JCWluZm8tPnZhci55cmVzID0gY2ZnLT5sY2RfY2ZnLnlyZXM7CisJCXZhci0+eHJlcyA9IHZhci0+eHJlc192aXJ0dWFsID0gbGNkX2NmZy0+eHJlczsKKwkJdmFyLT55cmVzID0gbGNkX2NmZy0+eXJlczsKIAkJLyogRGVmYXVsdCBZIHZpcnR1YWwgcmVzb2x1dGlvbiBpcyAyeCBwYW5lbCBzaXplICovCi0JCWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBpbmZvLT52YXIueXJlcyAqIDI7Ci0JCWluZm8tPnZhci53aWR0aCA9IGNmZy0+bGNkX3NpemVfY2ZnLndpZHRoOwotCQlpbmZvLT52YXIuaGVpZ2h0ID0gY2ZnLT5sY2Rfc2l6ZV9jZmcuaGVpZ2h0OwotCQlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7Ci0JCWVycm9yID0gc2hfbW9iaWxlX2xjZGNfc2V0X2JwcCgmaW5mby0+dmFyLCBjZmctPmJwcCk7CisJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzICogMjsKKwkJdmFyLT53aWR0aCA9IGNmZy0+bGNkX3NpemVfY2ZnLndpZHRoOworCQl2YXItPmhlaWdodCA9IGNmZy0+bGNkX3NpemVfY2ZnLmhlaWdodDsKKwkJdmFyLT5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKwkJdmFyLT5sZWZ0X21hcmdpbiA9IGxjZF9jZmctPmxlZnRfbWFyZ2luOworCQl2YXItPnJpZ2h0X21hcmdpbiA9IGxjZF9jZmctPnJpZ2h0X21hcmdpbjsKKwkJdmFyLT51cHBlcl9tYXJnaW4gPSBsY2RfY2ZnLT51cHBlcl9tYXJnaW47CisJCXZhci0+bG93ZXJfbWFyZ2luID0gbGNkX2NmZy0+bG93ZXJfbWFyZ2luOworCQl2YXItPmhzeW5jX2xlbiA9IGxjZF9jZmctPmhzeW5jX2xlbjsKKwkJdmFyLT52c3luY19sZW4gPSBsY2RfY2ZnLT52c3luY19sZW47CisJCXZhci0+c3luYyA9IGxjZF9jZmctPnN5bmM7CisJCXZhci0+cGl4Y2xvY2sgPSBsY2RfY2ZnLT5waXhjbG9jazsKKworCQllcnJvciA9IHNoX21vYmlsZV9sY2RjX3NldF9icHAodmFyLCBjZmctPmJwcCk7CiAJCWlmIChlcnJvcikKIAkJCWJyZWFrOwogCiAJCWluZm8tPmZpeCA9IHNoX21vYmlsZV9sY2RjX2ZpeDsKLQkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gY2ZnLT5sY2RfY2ZnLnhyZXMgKiAoY2ZnLT5icHAgLyA4KTsKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gbGNkX2NmZy0+eHJlcyAqIChjZmctPmJwcCAvIDgpOwogCQlpbmZvLT5maXguc21lbV9sZW4gPSBpbmZvLT5maXgubGluZV9sZW5ndGggKgotCQkJaW5mby0+dmFyLnlyZXNfdmlydHVhbDsKKwkJCXZhci0+eXJlc192aXJ0dWFsOwogCiAJCWJ1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBpbmZvLT5maXguc21lbV9sZW4sCiAJCQkJCSAmcHJpdi0+Y2hbaV0uZG1hX2hhbmRsZSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTE5LDEwICsxMjA1LDE0IEBACiAJCQkgY2gtPmNmZy5icHApOwogCiAJCS8qIGRlZmVycmVkIGlvIG1vZGU6IGRpc2FibGUgY2xvY2sgdG8gc2F2ZSBwb3dlciAqLwotCQlpZiAoaW5mby0+ZmJkZWZpbykKKwkJaWYgKGluZm8tPmZiZGVmaW8gfHwgaW5mby0+c3RhdGUgPT0gRkJJTkZPX1NUQVRFX1NVU1BFTkRFRCkKIAkJCXNoX21vYmlsZV9sY2RjX2Nsa19vZmYocHJpdik7CiAJfQogCisJLyogRmFpbHVyZSBpZ25vcmVkICovCisJcHJpdi0+bm90aWZpZXIubm90aWZpZXJfY2FsbCA9IHNoX21vYmlsZV9sY2RjX25vdGlmeTsKKwlmYl9yZWdpc3Rlcl9jbGllbnQoJnByaXYtPm5vdGlmaWVyKTsKKwogCXJldHVybiAwOwogZXJyMToKIAlzaF9tb2JpbGVfbGNkY19yZW1vdmUocGRldik7CkBAIC0xMTM2LDYgKzEyMjYsOCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBpOwogCisJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJnByaXYtPm5vdGlmaWVyKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaSsrKQogCQlpZiAocHJpdi0+Y2hbaV0uaW5mbyAmJiBwcml2LT5jaFtpXS5pbmZvLT5kZXYpCiAJCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHByaXYtPmNoW2ldLmluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvY2hpcC5oIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCmluZGV4IGQ5YjZlMDYuLmVmMWYzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKQEAgLTE2MCw3ICsxNjAsNiBAQAogCWludCB2X2FjdGl2ZTsKIAlpbnQgYnBwOwogCWludCByZWZyZXNoX3JhdGU7Ci0JaW50IGdldF9sY2Rfc2l6ZV9tZXRob2Q7CiAJaW50IGxjZF9wYW5lbF9pZDsKIAlpbnQgbGNkX3BhbmVsX2hyZXM7CiAJaW50IGxjZF9wYW5lbF92cmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvaHcuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKaW5kZXggYjk5NjgwMy4uN2RjYjRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvaHcuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCkBAIC0yMywxNDMgKzIzLDM0MSBAQAogI2luY2x1ZGUgImdsb2JhbC5oIgogCiBzdGF0aWMgc3RydWN0IHBsbF9tYXAgcGxsX3ZhbHVlW10gPSB7Ci0Je0NMS18yNV8xNzVNLCBDTEUyNjZfUExMXzI1XzE3NU0sIEs4MDBfUExMXzI1XzE3NU0sCi0JIENYNzAwXzI1XzE3NU0sIFZYODU1XzI1XzE3NU19LAotCXtDTEtfMjlfNTgxTSwgQ0xFMjY2X1BMTF8yOV81ODFNLCBLODAwX1BMTF8yOV81ODFNLAotCSBDWDcwMF8yOV81ODFNLCBWWDg1NV8yOV81ODFNfSwKLQl7Q0xLXzI2Xzg4ME0sIENMRTI2Nl9QTExfMjZfODgwTSwgSzgwMF9QTExfMjZfODgwTSwKLQkgQ1g3MDBfMjZfODgwTSwgVlg4NTVfMjZfODgwTX0sCi0Je0NMS18zMV80OTBNLCBDTEUyNjZfUExMXzMxXzQ5ME0sIEs4MDBfUExMXzMxXzQ5ME0sCi0JIENYNzAwXzMxXzQ5ME0sIFZYODU1XzMxXzQ5ME19LAotCXtDTEtfMzFfNTAwTSwgQ0xFMjY2X1BMTF8zMV81MDBNLCBLODAwX1BMTF8zMV81MDBNLAotCSBDWDcwMF8zMV81MDBNLCBWWDg1NV8zMV81MDBNfSwKLQl7Q0xLXzMxXzcyOE0sIENMRTI2Nl9QTExfMzFfNzI4TSwgSzgwMF9QTExfMzFfNzI4TSwKLQkgQ1g3MDBfMzFfNzI4TSwgVlg4NTVfMzFfNzI4TX0sCi0Je0NMS18zMl82NjhNLCBDTEUyNjZfUExMXzMyXzY2OE0sIEs4MDBfUExMXzMyXzY2OE0sCi0JIENYNzAwXzMyXzY2OE0sIFZYODU1XzMyXzY2OE19LAotCXtDTEtfMzZfMDAwTSwgQ0xFMjY2X1BMTF8zNl8wMDBNLCBLODAwX1BMTF8zNl8wMDBNLAotCSBDWDcwMF8zNl8wMDBNLCBWWDg1NV8zNl8wMDBNfSwKLQl7Q0xLXzQwXzAwME0sIENMRTI2Nl9QTExfNDBfMDAwTSwgSzgwMF9QTExfNDBfMDAwTSwKLQkgQ1g3MDBfNDBfMDAwTSwgVlg4NTVfNDBfMDAwTX0sCi0Je0NMS180MV8yOTFNLCBDTEUyNjZfUExMXzQxXzI5MU0sIEs4MDBfUExMXzQxXzI5MU0sCi0JIENYNzAwXzQxXzI5MU0sIFZYODU1XzQxXzI5MU19LAotCXtDTEtfNDNfMTYzTSwgQ0xFMjY2X1BMTF80M18xNjNNLCBLODAwX1BMTF80M18xNjNNLAotCSBDWDcwMF80M18xNjNNLCBWWDg1NV80M18xNjNNfSwKLQl7Q0xLXzQ1XzI1ME0sIENMRTI2Nl9QTExfNDVfMjUwTSwgSzgwMF9QTExfNDVfMjUwTSwKLQkgQ1g3MDBfNDVfMjUwTSwgVlg4NTVfNDVfMjUwTX0sCi0Je0NMS180Nl8wMDBNLCBDTEUyNjZfUExMXzQ2XzAwME0sIEs4MDBfUExMXzQ2XzAwME0sCi0JIENYNzAwXzQ2XzAwME0sIFZYODU1XzQ2XzAwME19LAotCXtDTEtfNDZfOTk2TSwgQ0xFMjY2X1BMTF80Nl85OTZNLCBLODAwX1BMTF80Nl85OTZNLAotCSBDWDcwMF80Nl85OTZNLCBWWDg1NV80Nl85OTZNfSwKLQl7Q0xLXzQ4XzAwME0sIENMRTI2Nl9QTExfNDhfMDAwTSwgSzgwMF9QTExfNDhfMDAwTSwKLQkgQ1g3MDBfNDhfMDAwTSwgVlg4NTVfNDhfMDAwTX0sCi0Je0NMS180OF84NzVNLCBDTEUyNjZfUExMXzQ4Xzg3NU0sIEs4MDBfUExMXzQ4Xzg3NU0sCi0JIENYNzAwXzQ4Xzg3NU0sIFZYODU1XzQ4Xzg3NU19LAotCXtDTEtfNDlfNTAwTSwgQ0xFMjY2X1BMTF80OV81MDBNLCBLODAwX1BMTF80OV81MDBNLAotCSBDWDcwMF80OV81MDBNLCBWWDg1NV80OV81MDBNfSwKLQl7Q0xLXzUyXzQwNk0sIENMRTI2Nl9QTExfNTJfNDA2TSwgSzgwMF9QTExfNTJfNDA2TSwKLQkgQ1g3MDBfNTJfNDA2TSwgVlg4NTVfNTJfNDA2TX0sCi0Je0NMS181Ml85NzdNLCBDTEUyNjZfUExMXzUyXzk3N00sIEs4MDBfUExMXzUyXzk3N00sCi0JIENYNzAwXzUyXzk3N00sCVZYODU1XzUyXzk3N019LAotCXtDTEtfNTZfMjUwTSwgQ0xFMjY2X1BMTF81Nl8yNTBNLCBLODAwX1BMTF81Nl8yNTBNLAotCSBDWDcwMF81Nl8yNTBNLCBWWDg1NV81Nl8yNTBNfSwKLQl7Q0xLXzU3XzI3NU0sIDAsIDAsIDAsIFZYODU1XzU3XzI3NU19LAotCXtDTEtfNjBfNDY2TSwgQ0xFMjY2X1BMTF82MF80NjZNLCBLODAwX1BMTF82MF80NjZNLAotCSBDWDcwMF82MF80NjZNLCBWWDg1NV82MF80NjZNfSwKLQl7Q0xLXzYxXzUwME0sIENMRTI2Nl9QTExfNjFfNTAwTSwgSzgwMF9QTExfNjFfNTAwTSwKLQkgQ1g3MDBfNjFfNTAwTSwgVlg4NTVfNjFfNTAwTX0sCi0Je0NMS182NV8wMDBNLCBDTEUyNjZfUExMXzY1XzAwME0sIEs4MDBfUExMXzY1XzAwME0sCi0JIENYNzAwXzY1XzAwME0sIFZYODU1XzY1XzAwME19LAotCXtDTEtfNjVfMTc4TSwgQ0xFMjY2X1BMTF82NV8xNzhNLCBLODAwX1BMTF82NV8xNzhNLAotCSBDWDcwMF82NV8xNzhNLCBWWDg1NV82NV8xNzhNfSwKLQl7Q0xLXzY2Xzc1ME0sIENMRTI2Nl9QTExfNjZfNzUwTSwgSzgwMF9QTExfNjZfNzUwTSwKLQkgQ1g3MDBfNjZfNzUwTSwgVlg4NTVfNjZfNzUwTX0sCi0Je0NMS182OF8xNzlNLCBDTEUyNjZfUExMXzY4XzE3OU0sIEs4MDBfUExMXzY4XzE3OU0sCi0JIENYNzAwXzY4XzE3OU0sIFZYODU1XzY4XzE3OU19LAotCXtDTEtfNjlfOTI0TSwgQ0xFMjY2X1BMTF82OV85MjRNLCBLODAwX1BMTF82OV85MjRNLAotCSBDWDcwMF82OV85MjRNLCBWWDg1NV82OV85MjRNfSwKLQl7Q0xLXzcwXzE1OU0sIENMRTI2Nl9QTExfNzBfMTU5TSwgSzgwMF9QTExfNzBfMTU5TSwKLQkgQ1g3MDBfNzBfMTU5TSwgVlg4NTVfNzBfMTU5TX0sCi0Je0NMS183Ml8wMDBNLCBDTEUyNjZfUExMXzcyXzAwME0sIEs4MDBfUExMXzcyXzAwME0sCi0JIENYNzAwXzcyXzAwME0sIFZYODU1XzcyXzAwME19LAotCXtDTEtfNzhfNzUwTSwgQ0xFMjY2X1BMTF83OF83NTBNLCBLODAwX1BMTF83OF83NTBNLAotCSBDWDcwMF83OF83NTBNLCBWWDg1NV83OF83NTBNfSwKLQl7Q0xLXzgwXzEzNk0sIENMRTI2Nl9QTExfODBfMTM2TSwgSzgwMF9QTExfODBfMTM2TSwKLQkgQ1g3MDBfODBfMTM2TSwgVlg4NTVfODBfMTM2TX0sCi0Je0NMS184M18zNzVNLCBDTEUyNjZfUExMXzgzXzM3NU0sIEs4MDBfUExMXzgzXzM3NU0sCi0JIENYNzAwXzgzXzM3NU0sIFZYODU1XzgzXzM3NU19LAotCXtDTEtfODNfOTUwTSwgQ0xFMjY2X1BMTF84M185NTBNLCBLODAwX1BMTF84M185NTBNLAotCSBDWDcwMF84M185NTBNLCBWWDg1NV84M185NTBNfSwKLQl7Q0xLXzg0Xzc1ME0sIENMRTI2Nl9QTExfODRfNzUwTSwgSzgwMF9QTExfODRfNzUwTSwKLQkgQ1g3MDBfODRfNzUwTSwgVlg4NTVfODRfNzUwTX0sCi0Je0NMS184NV84NjBNLCBDTEUyNjZfUExMXzg1Xzg2ME0sIEs4MDBfUExMXzg1Xzg2ME0sCi0JIENYNzAwXzg1Xzg2ME0sIFZYODU1Xzg1Xzg2ME19LAotCXtDTEtfODhfNzUwTSwgQ0xFMjY2X1BMTF84OF83NTBNLCBLODAwX1BMTF84OF83NTBNLAotCSBDWDcwMF84OF83NTBNLCBWWDg1NV84OF83NTBNfSwKLQl7Q0xLXzk0XzUwME0sIENMRTI2Nl9QTExfOTRfNTAwTSwgSzgwMF9QTExfOTRfNTAwTSwKLQkgQ1g3MDBfOTRfNTAwTSwgVlg4NTVfOTRfNTAwTX0sCi0Je0NMS185N183NTBNLCBDTEUyNjZfUExMXzk3Xzc1ME0sIEs4MDBfUExMXzk3Xzc1ME0sCi0JIENYNzAwXzk3Xzc1ME0sIFZYODU1Xzk3Xzc1ME19LAotCXtDTEtfMTAxXzAwME0sIENMRTI2Nl9QTExfMTAxXzAwME0sIEs4MDBfUExMXzEwMV8wMDBNLAotCSBDWDcwMF8xMDFfMDAwTSwgVlg4NTVfMTAxXzAwME19LAotCXtDTEtfMTA2XzUwME0sIENMRTI2Nl9QTExfMTA2XzUwME0sIEs4MDBfUExMXzEwNl81MDBNLAotCSBDWDcwMF8xMDZfNTAwTSwgVlg4NTVfMTA2XzUwME19LAotCXtDTEtfMTA4XzAwME0sIENMRTI2Nl9QTExfMTA4XzAwME0sIEs4MDBfUExMXzEwOF8wMDBNLAotCSBDWDcwMF8xMDhfMDAwTSwgVlg4NTVfMTA4XzAwME19LAotCXtDTEtfMTEzXzMwOU0sIENMRTI2Nl9QTExfMTEzXzMwOU0sIEs4MDBfUExMXzExM18zMDlNLAotCSBDWDcwMF8xMTNfMzA5TSwgVlg4NTVfMTEzXzMwOU19LAotCXtDTEtfMTE4Xzg0ME0sIENMRTI2Nl9QTExfMTE4Xzg0ME0sIEs4MDBfUExMXzExOF84NDBNLAotCSBDWDcwMF8xMThfODQwTSwgVlg4NTVfMTE4Xzg0ME19LAotCXtDTEtfMTE5XzAwME0sIENMRTI2Nl9QTExfMTE5XzAwME0sIEs4MDBfUExMXzExOV8wMDBNLAotCSBDWDcwMF8xMTlfMDAwTSwgVlg4NTVfMTE5XzAwME19LAotCXtDTEtfMTIxXzc1ME0sIENMRTI2Nl9QTExfMTIxXzc1ME0sIEs4MDBfUExMXzEyMV83NTBNLAotCSBDWDcwMF8xMjFfNzUwTSwgMH0sCi0Je0NMS18xMjVfMTA0TSwgQ0xFMjY2X1BMTF8xMjVfMTA0TSwgSzgwMF9QTExfMTI1XzEwNE0sCi0JIENYNzAwXzEyNV8xMDRNLCAwfSwKLQl7Q0xLXzEzM18zMDhNLCBDTEUyNjZfUExMXzEzM18zMDhNLCBLODAwX1BMTF8xMzNfMzA4TSwKLQkgQ1g3MDBfMTMzXzMwOE0sIDB9LAotCXtDTEtfMTM1XzAwME0sIENMRTI2Nl9QTExfMTM1XzAwME0sIEs4MDBfUExMXzEzNV8wMDBNLAotCSBDWDcwMF8xMzVfMDAwTSwgVlg4NTVfMTM1XzAwME19LAotCXtDTEtfMTM2XzcwME0sIENMRTI2Nl9QTExfMTM2XzcwME0sIEs4MDBfUExMXzEzNl83MDBNLAotCSBDWDcwMF8xMzZfNzAwTSwgVlg4NTVfMTM2XzcwME19LAotCXtDTEtfMTM4XzQwME0sIENMRTI2Nl9QTExfMTM4XzQwME0sIEs4MDBfUExMXzEzOF80MDBNLAotCSBDWDcwMF8xMzhfNDAwTSwgVlg4NTVfMTM4XzQwME19LAotCXtDTEtfMTQ2Xzc2ME0sIENMRTI2Nl9QTExfMTQ2Xzc2ME0sIEs4MDBfUExMXzE0Nl83NjBNLAotCSBDWDcwMF8xNDZfNzYwTSwgVlg4NTVfMTQ2Xzc2ME19LAotCXtDTEtfMTUzXzkyME0sIENMRTI2Nl9QTExfMTUzXzkyME0sIEs4MDBfUExMXzE1M185MjBNLAotCSBDWDcwMF8xNTNfOTIwTSwgVlg4NTVfMTUzXzkyME19LAotCXtDTEtfMTU2XzAwME0sIENMRTI2Nl9QTExfMTU2XzAwME0sIEs4MDBfUExMXzE1Nl8wMDBNLAotCSBDWDcwMF8xNTZfMDAwTSwgVlg4NTVfMTU2XzAwME19LAotCXtDTEtfMTU3XzUwME0sIENMRTI2Nl9QTExfMTU3XzUwME0sIEs4MDBfUExMXzE1N181MDBNLAotCSBDWDcwMF8xNTdfNTAwTSwgVlg4NTVfMTU3XzUwME19LAotCXtDTEtfMTYyXzAwME0sIENMRTI2Nl9QTExfMTYyXzAwME0sIEs4MDBfUExMXzE2Ml8wMDBNLAotCSBDWDcwMF8xNjJfMDAwTSwgVlg4NTVfMTYyXzAwME19LAotCXtDTEtfMTg3XzAwME0sIENMRTI2Nl9QTExfMTg3XzAwME0sIEs4MDBfUExMXzE4N18wMDBNLAotCSBDWDcwMF8xODdfMDAwTSwgVlg4NTVfMTg3XzAwME19LAotCXtDTEtfMTkzXzI5NU0sIENMRTI2Nl9QTExfMTkzXzI5NU0sIEs4MDBfUExMXzE5M18yOTVNLAotCSBDWDcwMF8xOTNfMjk1TSwgVlg4NTVfMTkzXzI5NU19LAotCXtDTEtfMjAyXzUwME0sIENMRTI2Nl9QTExfMjAyXzUwME0sIEs4MDBfUExMXzIwMl81MDBNLAotCSBDWDcwMF8yMDJfNTAwTSwgVlg4NTVfMjAyXzUwME19LAotCXtDTEtfMjA0XzAwME0sIENMRTI2Nl9QTExfMjA0XzAwME0sIEs4MDBfUExMXzIwNF8wMDBNLAotCSBDWDcwMF8yMDRfMDAwTSwgVlg4NTVfMjA0XzAwME19LAotCXtDTEtfMjE4XzUwME0sIENMRTI2Nl9QTExfMjE4XzUwME0sIEs4MDBfUExMXzIxOF81MDBNLAotCSBDWDcwMF8yMThfNTAwTSwgVlg4NTVfMjE4XzUwME19LAotCXtDTEtfMjM0XzAwME0sIENMRTI2Nl9QTExfMjM0XzAwME0sIEs4MDBfUExMXzIzNF8wMDBNLAotCSBDWDcwMF8yMzRfMDAwTSwgVlg4NTVfMjM0XzAwME19LAotCXtDTEtfMjY3XzI1ME0sIENMRTI2Nl9QTExfMjY3XzI1ME0sIEs4MDBfUExMXzI2N18yNTBNLAotCSBDWDcwMF8yNjdfMjUwTSwgVlg4NTVfMjY3XzI1ME19LAotCXtDTEtfMjk3XzUwME0sIENMRTI2Nl9QTExfMjk3XzUwME0sIEs4MDBfUExMXzI5N181MDBNLAotCSBDWDcwMF8yOTdfNTAwTSwgVlg4NTVfMjk3XzUwME19LAotCXtDTEtfNzRfNDgxTSwgQ0xFMjY2X1BMTF83NF80ODFNLCBLODAwX1BMTF83NF80ODFNLAotCSBDWDcwMF83NF80ODFNLCBWWDg1NV83NF80ODFNfSwKLQl7Q0xLXzE3Ml83OThNLCBDTEUyNjZfUExMXzE3Ml83OThNLCBLODAwX1BMTF8xNzJfNzk4TSwKLQkgQ1g3MDBfMTcyXzc5OE0sIFZYODU1XzE3Ml83OThNfSwKLQl7Q0xLXzEyMl82MTRNLCBDTEUyNjZfUExMXzEyMl82MTRNLCBLODAwX1BMTF8xMjJfNjE0TSwKLQkgQ1g3MDBfMTIyXzYxNE0sIFZYODU1XzEyMl82MTRNfSwKLQl7Q0xLXzc0XzI3ME0sIENMRTI2Nl9QTExfNzRfMjcwTSwgSzgwMF9QTExfNzRfMjcwTSwKLQkgQ1g3MDBfNzRfMjcwTSwgMH0sCi0Je0NMS18xNDhfNTAwTSwgQ0xFMjY2X1BMTF8xNDhfNTAwTSwgSzgwMF9QTExfMTQ4XzUwME0sCi0JIENYNzAwXzE0OF81MDBNLCBWWDg1NV8xNDhfNTAwTX0KKwl7MjUxNzUwMDAsCisJCXs5OSwgNywgM30sCisJCXs4NSwgMywgNH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxNDEsIDUsIDR9LAorCQl7MTQxLCA1LCA0fSB9LAorCXsyOTU4MTAwMCwKKwkJezMzLCA0LCAyfSwKKwkJezY2LCAyLCA0fSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE2NiwgNSwgNH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxNjUsIDUsIDR9IH0sCisJezI2ODgwMDAwLAorCQl7MTUsIDQsIDF9LAorCQl7MzAsIDIsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTUwLCA1LCA0fSwKKwkJezE1MCwgNSwgNH0gfSwKKwl7MzE1MDAwMDAsCisJCXs1MywgMywgM30sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxNDEsIDQsIDR9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTc2LCA1LCA0fSwKKwkJezE3NiwgNSwgNH0gfSwKKwl7MzE3MjgwMDAsCisJCXszMSwgNywgMX0sCisJCXsxNzcsIDUsIDR9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTc3LCA1LCA0fSwKKwkJezE0MiwgNCwgNH0gfSwKKwl7MzI2ODgwMDAsCisJCXs3MywgNCwgM30sCisJCXsxNDYsIDQsIDR9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTgzLCA1LCA0fSwKKwkJezE0NiwgNCwgNH0gfSwKKwl7MzYwMDAwMDAsCisJCXsxMDEsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTYxLCA0LCA0fSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezIwMiwgNSwgNH0sCisJCXsxNjEsIDQsIDR9IH0sCisJezQwMDAwMDAwLAorCQl7ODksIDQsIDN9LAorCQl7ODksIDQsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTEyLCA1LCAzfSwKKwkJezExMiwgNSwgM30gfSwKKwl7NDEyOTEwMDAsCisJCXsyMywgNCwgMX0sCisJCXs2OSwgMywgM30sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxMTUsIDUsIDN9LAorCQl7MTE1LCA1LCAzfSB9LAorCXs0MzE2MzAwMCwKKwkJezEyMSwgNSwgM30sCisJCXsxMjEsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTIxLCA1LCAzfSwKKwkJezEyMSwgNSwgM30gfSwKKwl7NDUyNTAwMDAsCisJCXsxMjcsIDUsIDN9LAorCQl7MTI3LCA1LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezEyNywgNSwgM30sCisJCXsxMjcsIDUsIDN9IH0sCisJezQ2MDAwMDAwLAorCQl7OTAsIDcsIDJ9LAorCQl7MTAzLCA0LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezEyOSwgNSwgM30sCisJCXsxMDMsIDQsIDN9IH0sCisJezQ2OTk2MDAwLAorCQl7MTA1LCA0LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezEzMSwgNSwgM30sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxMzEsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTA1LCA0LCAzfSB9LAorCXs0ODAwMDAwMCwKKwkJezY3LCAyMCwgMH0sCisJCXsxMzQsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTM0LCA1LCAzfSwKKwkJezEzNCwgNSwgM30gfSwKKwl7NDg4NzUwMDAsCisJCXs5OSwgMjksIDB9LAorCQl7ODIsIDMsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7ODIsIDMsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTM3LCA1LCAzfSB9LAorCXs0OTUwMDAwMCwKKwkJezgzLCA2LCAyfSwKKwkJezgzLCAzLCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezEzOCwgNSwgM30sCisJCXs4MywgMywgM30gfSwKKwl7NTI0MDYwMDAsCisJCXsxMTcsIDQsIDN9LAorCQl7MTE3LCA0LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezExNywgNCwgM30sCisJCXs4OCwgMywgM30gfSwKKwl7NTI5NzcwMDAsCisJCXszNywgNSwgMX0sCisJCXsxNDgsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTQ4LCA1LCAzfSwKKwkJezE0OCwgNSwgM30gfSwKKwl7NTYyNTAwMDAsCisJCXs1NSwgNywgMX0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxMjYsIDQsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTU3LCA1LCAzfSwKKwkJezE1NywgNSwgM30gfSwKKwl7NTcyNzUwMDAsCisJCXswLCAwLCAwfSwKKwkJezIsIDIsIDB9LAorCQl7MiwgMiwgMH0sCisJCXsxNTcsIDUsIDN9IH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJezYwNDY2MDAwLAorCQl7NzYsIDksIDF9LAorCQl7MTY5LCA1LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE2OSwgNSwgM30sCS8qIEZJWEVEOiBvbGQgPSB7NzIsIDIsIDN9ICovCisJCXsxNjksIDUsIDN9IH0sCisJezYxNTAwMDAwLAorCQl7ODYsIDIwLCAwfSwKKwkJezE3MiwgNSwgM30sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxNzIsIDUsIDN9LAorCQl7MTcyLCA1LCAzfSB9LAorCXs2NTAwMDAwMCwKKwkJezEwOSwgNiwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxMDksIDMsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTA5LCAzLCAzfSwKKwkJezEwOSwgMywgM30gfSwKKwl7NjUxNzgwMDAsCisJCXs5MSwgNSwgMn0sCisJCXsxODIsIDUsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTA5LCAzLCAzfSwKKwkJezE4MiwgNSwgM30gfSwKKwl7NjY3NTAwMDAsCisJCXs3NSwgNCwgMn0sCisJCXsxNTAsIDQsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTUwLCA0LCAzfSwKKwkJezExMiwgMywgM30gfSwKKwl7NjgxNzkwMDAsCisJCXsxOSwgNCwgMH0sCisJCXsxMTQsIDMsIDN9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTkwLCA1LCAzfSwKKwkJezE5MSwgNSwgM30gfSwKKwl7Njk5MjQwMDAsCisJCXs4MywgMTcsIDB9LAorCQl7MTk1LCA1LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE5NSwgNSwgM30sCisJCXsxOTUsIDUsIDN9IH0sCisJezcwMTU5MDAwLAorCQl7OTgsIDIwLCAwfSwKKwkJezE5NiwgNSwgM30sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxOTYsIDUsIDN9LAorCQl7MTk1LCA1LCAzfSB9LAorCXs3MjAwMDAwMCwKKwkJezEyMSwgMjQsIDB9LAorCQl7MTYxLCA0LCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE2MSwgNCwgM30sCisJCXsxNjEsIDQsIDN9IH0sCisJezc4NzUwMDAwLAorCQl7MzMsIDMsIDF9LAorCQl7NjYsIDMsIDJ9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTEwLCA1LCAyfSwKKwkJezExMCwgNSwgMn0gfSwKKwl7ODAxMzYwMDAsCisJCXsyOCwgNSwgMH0sCisJCXs2OCwgMywgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsxMTIsIDUsIDJ9LAorCQl7MTEyLCA1LCAyfSB9LAorCXs4MzM3NTAwMCwKKwkJezkzLCAyLCAzfSwKKwkJezkzLCA0LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDAwMDAgKi8KKwkJezkzLCA0LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDAwMDAgKi8KKwkJezExNywgNSwgMn0gfSwKKwl7ODM5NTAwMDAsCisJCXs0MSwgNywgMH0sCisJCXsxMTcsIDUsIDJ9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTE3LCA1LCAyfSwKKwkJezExNywgNSwgMn0gfSwKKwl7ODQ3NTAwMDAsCisJCXsxMTgsIDUsIDJ9LAorCQl7MTE4LCA1LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezExOCwgNSwgMn0sCisJCXsxMTgsIDUsIDJ9IH0sCisJezg1ODYwMDAwLAorCQl7ODQsIDcsIDF9LAorCQl7MTIwLCA1LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezEyMCwgNSwgMn0sCisJCXsxMTgsIDUsIDJ9IH0sCisJezg4NzUwMDAwLAorCQl7MzEsIDUsIDB9LAorCQl7MTI0LCA1LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE3NCwgNywgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxMjQsIDUsIDJ9IH0sCisJezk0NTAwMDAwLAorCQl7MzMsIDUsIDB9LAorCQl7MTMyLCA1LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezEzMiwgNSwgMn0sCisJCXsxMzIsIDUsIDJ9IH0sCisJezk3NzUwMDAwLAorCQl7ODIsIDYsIDF9LAorCQl7MTM3LCA1LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezEzNywgNSwgMn0sCisJCXsxMzcsIDUsIDJ9IH0sCisJezEwMTAwMDAwMCwKKwkJezEyNywgOSwgMX0sCisJCXsxNDEsIDUsIDJ9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTQxLCA1LCAyfSwKKwkJezE0MSwgNSwgMn0gfSwKKwl7MTA2NTAwMDAwLAorCQl7MTE5LCA0LCAyfSwKKwkJezExOSwgNCwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxMTksIDQsIDJ9LAorCQl7MTQ5LCA1LCAyfSB9LAorCXsxMDgwMDAwMDAsCisJCXsxMjEsIDQsIDJ9LAorCQl7MTIxLCA0LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE1MSwgNSwgMn0sCisJCXsxNTEsIDUsIDJ9IH0sCisJezExMzMwOTAwMCwKKwkJezk1LCAxMiwgMH0sCisJCXs5NSwgMywgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXs5NSwgMywgMn0sCisJCXsxNTksIDUsIDJ9IH0sCisJezExODg0MDAwMCwKKwkJezgzLCA1LCAxfSwKKwkJezE2NiwgNSwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxNjYsIDUsIDJ9LAorCQl7MTY2LCA1LCAyfSB9LAorCXsxMTkwMDAwMDAsCisJCXsxMDgsIDEzLCAwfSwKKwkJezEzMywgNCwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxMzMsIDQsIDJ9LAorCQl7MTY3LCA1LCAyfSB9LAorCXsxMjE3NTAwMDAsCisJCXs4NSwgNSwgMX0sCisJCXsxNzAsIDUsIDJ9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7NjgsIDIsIDJ9LAorCQl7MCwgMCwgMH0gfSwKKwl7MTI1MTA0MDAwLAorCQl7NTMsIDYsIDB9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTA2LCAzLCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezE3NSwgNSwgMn0sCisJCXswLCAwLCAwfSB9LAorCXsxMzUwMDAwMDAsCisJCXs5NCwgNSwgMX0sCisJCXsyOCwgMywgMH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA0MDAwICovCisJCXsxNTEsIDQsIDJ9LAorCQl7MTg5LCA1LCAyfSB9LAorCXsxMzY3MDAwMDAsCisJCXsxMTUsIDEyLCAwfSwKKwkJezE5MSwgNSwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxOTEsIDUsIDJ9LAorCQl7MTkxLCA1LCAyfSB9LAorCXsxMzg0MDAwMDAsCisJCXs4NywgOSwgMH0sCisJCXsxMTYsIDMsIDJ9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTE2LCAzLCAyfSwKKwkJezE5NCwgNSwgMn0gfSwKKwl7MTQ2NzYwMDAwLAorCQl7MTAzLCA1LCAxfSwKKwkJezIwNiwgNSwgMn0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsyMDYsIDUsIDJ9LAorCQl7MjA2LCA1LCAyfSB9LAorCXsxNTM5MjAwMDAsCisJCXs4NiwgOCwgMH0sCisJCXs4NiwgNCwgMX0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXs4NiwgNCwgMX0sCisJCXs4NiwgNCwgMX0gfSwJLyogRklYRUQ6IG9sZCA9IHs4NCwgMiwgMX0gKi8KKwl7MTU2MDAwMDAwLAorCQl7MTA5LCA1LCAxfSwKKwkJezEwOSwgNSwgMX0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxMDksIDUsIDF9LAorCQl7MTA4LCA1LCAxfSB9LAorCXsxNTc1MDAwMDAsCisJCXs1NSwgNSwgMH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwMDA4MDAwICovCisJCXsyMiwgMiwgMH0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODAyMDAwICovCisJCXsxMTAsIDUsIDF9LAorCQl7MTEwLCA1LCAxfSB9LAorCXsxNjIwMDAwMDAsCisJCXsxMTMsIDUsIDF9LAorCQl7MTEzLCA1LCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezExMywgNSwgMX0sCisJCXsxMTMsIDUsIDF9IH0sCisJezE4NzAwMDAwMCwKKwkJezExOCwgOSwgMH0sCisJCXsxMzEsIDUsIDF9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTMxLCA1LCAxfSwKKwkJezEzMSwgNSwgMX0gfSwKKwl7MTkzMjk1MDAwLAorCQl7MTA4LCA4LCAwfSwKKwkJezgxLCAzLCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezEzNSwgNSwgMX0sCisJCXsxMzUsIDUsIDF9IH0sCisJezIwMjUwMDAwMCwKKwkJezk5LCA3LCAwfSwKKwkJezg1LCAzLCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE0MiwgNSwgMX0sCisJCXsxNDIsIDUsIDF9IH0sCisJezIwNDAwMDAwMCwKKwkJezEwMCwgNywgMH0sCisJCXsxNDMsIDUsIDF9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTQzLCA1LCAxfSwKKwkJezE0MywgNSwgMX0gfSwKKwl7MjE4NTAwMDAwLAorCQl7OTIsIDYsIDB9LAorCQl7MTUzLCA1LCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezE1MywgNSwgMX0sCisJCXsxNTMsIDUsIDF9IH0sCisJezIzNDAwMDAwMCwKKwkJezk4LCA2LCAwfSwKKwkJezk4LCAzLCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezk4LCAzLCAxfSwKKwkJezE2NCwgNSwgMX0gfSwKKwl7MjY3MjUwMDAwLAorCQl7MTEyLCA2LCAwfSwKKwkJezExMiwgMywgMX0sCS8qIGlnbm9yaW5nIGJpdCBkaWZmZXJlbmNlOiAweDAwODA4MDAwICovCisJCXsxODcsIDUsIDF9LAorCQl7MTg3LCA1LCAxfSB9LAorCXsyOTc1MDAwMDAsCisJCXsxMDIsIDUsIDB9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDAwODAwMCAqLworCQl7MTY2LCA0LCAxfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDAwMDgwMDAgKi8KKwkJezIwOCwgNSwgMX0sCisJCXsyMDgsIDUsIDF9IH0sCisJezc0NDgxMDAwLAorCQl7MjYsIDUsIDB9LAorCQl7MTI1LCAzLCAzfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezIwOCwgNSwgM30sCisJCXsyMDksIDUsIDN9IH0sCisJezE3Mjc5ODAwMCwKKwkJezEyMSwgNSwgMX0sCisJCXsxMjEsIDUsIDF9LAkvKiBpZ25vcmluZyBiaXQgZGlmZmVyZW5jZTogMHgwMDgwODAwMCAqLworCQl7MTIxLCA1LCAxfSwKKwkJezEyMSwgNSwgMX0gfSwKKwl7MTIyNjE0MDAwLAorCQl7NjAsIDcsIDB9LAorCQl7MTM3LCA0LCAyfSwJLyogaWdub3JpbmcgYml0IGRpZmZlcmVuY2U6IDB4MDA4MDgwMDAgKi8KKwkJezEzNywgNCwgMn0sCisJCXsxNzIsIDUsIDJ9IH0sCisJezc0MjcwMDAwLAorCQl7ODMsIDgsIDF9LAorCQl7MjA4LCA1LCAzfSwKKwkJezIwOCwgNSwgM30sCisJCXswLCAwLCAwfSB9LAorCXsxNDg1MDAwMDAsCisJCXs4MywgOCwgMH0sCisJCXsyMDgsIDUsIDJ9LAorCQl7MTY2LCA0LCAyfSwKKwkJezIwOCwgNSwgMn0gfQogfTsKIAogc3RhdGljIHN0cnVjdCBmaWZvX2RlcHRoX3NlbGVjdCBkaXNwbGF5X2ZpZm9fZGVwdGhfcmVnID0gewpAQCAtMTM2MCw0MCArMTU1OCw3MCBAQAogCiB9CiAKK3N0YXRpYyB1MzIgY2xlMjY2X2VuY29kZV9wbGwoc3RydWN0IHBsbF9jb25maWcgcGxsKQoreworCXJldHVybiAocGxsLm11bHRpcGxpZXIgPDwgOCkKKwkJfCAocGxsLnJzaGlmdCA8PCA2KQorCQl8IHBsbC5kaXZpc29yOworfQorCitzdGF0aWMgdTMyIGs4MDBfZW5jb2RlX3BsbChzdHJ1Y3QgcGxsX2NvbmZpZyBwbGwpCit7CisJcmV0dXJuICgocGxsLmRpdmlzb3IgLSAyKSA8PCAxNikKKwkJfCAocGxsLnJzaGlmdCA8PCAxMCkKKwkJfCAocGxsLm11bHRpcGxpZXIgLSAyKTsKK30KKworc3RhdGljIHUzMiB2eDg1NV9lbmNvZGVfcGxsKHN0cnVjdCBwbGxfY29uZmlnIHBsbCkKK3sKKwlyZXR1cm4gKHBsbC5kaXZpc29yIDw8IDE2KQorCQl8IChwbGwucnNoaWZ0IDw8IDEwKQorCQl8IHBsbC5tdWx0aXBsaWVyOworfQorCiB1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKQogewotCWludCBpOworCXUzMiB2YWx1ZSA9IDA7CisJaW50IGkgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QTExfVEFCTEU7IGkrKykgewotCQlpZiAoY2xrID09IHBsbF92YWx1ZVtpXS5jbGspIHsKLQkJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6Ci0JCQljYXNlIFVOSUNIUk9NRV9LNDAwOgotCQkJCXJldHVybiBwbGxfdmFsdWVbaV0uY2xlMjY2X3BsbDsKKwl3aGlsZSAoaSA8IE5VTV9UT1RBTF9QTExfVEFCTEUgJiYgY2xrICE9IHBsbF92YWx1ZVtpXS5jbGspCisJCWkrKzsKIAotCQkJY2FzZSBVTklDSFJPTUVfSzgwMDoKLQkJCWNhc2UgVU5JQ0hST01FX1BNODAwOgotCQkJY2FzZSBVTklDSFJPTUVfQ043MDA6Ci0JCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS5rODAwX3BsbDsKKwlpZiAoaSA9PSBOVU1fVE9UQUxfUExMX1RBQkxFKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZpYWZiX2dldF9jbGtfdmFsdWU6IFBMTCBsb29rdXAgZmFpbGVkISIpOworCX0gZWxzZSB7CisJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CisJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKKwkJY2FzZSBVTklDSFJPTUVfSzQwMDoKKwkJCXZhbHVlID0gY2xlMjY2X2VuY29kZV9wbGwocGxsX3ZhbHVlW2ldLmNsZTI2Nl9wbGwpOworCQkJYnJlYWs7CiAKLQkJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgotCQkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgotCQkJY2FzZSBVTklDSFJPTUVfUDRNODkwOgotCQkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgotCQkJY2FzZSBVTklDSFJPTUVfVlg4MDA6Ci0JCQkJcmV0dXJuIHBsbF92YWx1ZVtpXS5jeDcwMF9wbGw7Ci0JCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKLQkJCQlyZXR1cm4gcGxsX3ZhbHVlW2ldLnZ4ODU1X3BsbDsKLQkJCX0KKwkJY2FzZSBVTklDSFJPTUVfSzgwMDoKKwkJY2FzZSBVTklDSFJPTUVfUE04MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzAwOgorCQkJdmFsdWUgPSBrODAwX2VuY29kZV9wbGwocGxsX3ZhbHVlW2ldLms4MDBfcGxsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjc1MDoKKwkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgorCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CisJCQl2YWx1ZSA9IGs4MDBfZW5jb2RlX3BsbChwbGxfdmFsdWVbaV0uY3g3MDBfcGxsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVU5JQ0hST01FX1ZYODU1OgorCQkJdmFsdWUgPSB2eDg1NV9lbmNvZGVfcGxsKHBsbF92YWx1ZVtpXS52eDg1NV9wbGwpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlERUJVR19NU0coS0VSTl9JTkZPICJDYW4ndCBmaW5kIG1hdGNoIFBMTCB2YWx1ZVxuXG4iKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdmFsdWU7CiB9CiAKIC8qIFNldCBWQ0xLKi8KLXZvaWQgdmlhZmJfc2V0X3ZjbG9jayh1MzIgQ0xLLCBpbnQgc2V0X2lnYSkKK3ZvaWQgdmlhZmJfc2V0X3ZjbG9jayh1MzIgY2xrLCBpbnQgc2V0X2lnYSkKIHsKIAkvKiBILlcuIFJlc2V0IDogT04gKi8KIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CkBAIC0xNDAzLDI2ICsxNjMxLDIzIEBACiAJCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7CiAJCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKIAkJY2FzZSBVTklDSFJPTUVfSzQwMDoKLQkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ2LCBWSUFTUiwgQ0xLIC8gMHgxMDApOwotCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDcsIFZJQVNSLCBDTEsgJSAweDEwMCk7CisJCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ2LCAoY2xrICYgMHgwMEZGKSk7CisJCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ3LCAoY2xrICYgMHhGRjAwKSA+PiA4KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVU5JQ0hST01FX0s4MDA6CiAJCWNhc2UgVU5JQ0hST01FX1BNODAwOgogCQljYXNlIFVOSUNIUk9NRV9DTjcwMDoKIAkJY2FzZSBVTklDSFJPTUVfQ1g3MDA6CisJCWNhc2UgVU5JQ0hST01FX0NONzUwOgogCQljYXNlIFVOSUNIUk9NRV9LOE04OTA6CiAJCWNhc2UgVU5JQ0hST01FX1A0TTg5MDoKIAkJY2FzZSBVTklDSFJPTUVfUDRNOTAwOgogCQljYXNlIFVOSUNIUk9NRV9WWDgwMDoKIAkJY2FzZSBVTklDSFJPTUVfVlg4NTU6Ci0JCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwMDApOwotCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ0PSV4IiwgQ0xLIC8gMHgxMDAwMCk7Ci0JCQl2aWFmYl93cml0ZV9yZWcoU1I0NSwgVklBU1IsIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOwotCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiXG5TUjQ1PSV4IiwKLQkJCQkgIChDTEsgJiAweEZGRkYpIC8gMHgxMDApOwotCQkJdmlhZmJfd3JpdGVfcmVnKFNSNDYsIFZJQVNSLCBDTEsgJSAweDEwMCk7Ci0JCQlERUJVR19NU0coS0VSTl9JTkZPICJcblNSNDY9JXgiLCBDTEsgJSAweDEwMCk7CisJCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ0LCAoY2xrICYgMHgwMDAwRkYpKTsKKwkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNDUsIChjbGsgJiAweDAwRkYwMCkgPj4gOCk7CisJCQl2aWFfd3JpdGVfcmVnKFZJQVNSLCBTUjQ2LCAoY2xrICYgMHhGRjAwMDApID4+IDE2KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTQzMiwyMiArMTY1NywyMyBAQAogCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewogCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CiAJCWNhc2UgVU5JQ0hST01FX0s0MDA6Ci0JCQl2aWFmYl93cml0ZV9yZWcoU1I0NCwgVklBU1IsIENMSyAvIDB4MTAwKTsKLQkJCXZpYWZiX3dyaXRlX3JlZyhTUjQ1LCBWSUFTUiwgQ0xLICUgMHgxMDApOworCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NCwgKGNsayAmIDB4MDBGRikpOworCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0NSwgKGNsayAmIDB4RkYwMCkgPj4gOCk7CiAJCQlicmVhazsKIAogCQljYXNlIFVOSUNIUk9NRV9LODAwOgogCQljYXNlIFVOSUNIUk9NRV9QTTgwMDoKIAkJY2FzZSBVTklDSFJPTUVfQ043MDA6CiAJCWNhc2UgVU5JQ0hST01FX0NYNzAwOgorCQljYXNlIFVOSUNIUk9NRV9DTjc1MDoKIAkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgogCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CiAJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKIAkJY2FzZSBVTklDSFJPTUVfVlg4MDA6CiAJCWNhc2UgVU5JQ0hST01FX1ZYODU1OgotCQkJdmlhZmJfd3JpdGVfcmVnKFNSNEEsIFZJQVNSLCBDTEsgLyAweDEwMDAwKTsKLQkJCXZpYWZiX3dyaXRlX3JlZyhTUjRCLCBWSUFTUiwgKENMSyAmIDB4RkZGRikgLyAweDEwMCk7Ci0JCQl2aWFmYl93cml0ZV9yZWcoU1I0QywgVklBU1IsIENMSyAlIDB4MTAwKTsKKwkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNEEsIChjbGsgJiAweDAwMDBGRikpOworCQkJdmlhX3dyaXRlX3JlZyhWSUFTUiwgU1I0QiwgKGNsayAmIDB4MDBGRjAwKSA+PiA4KTsKKwkJCXZpYV93cml0ZV9yZWcoVklBU1IsIFNSNEMsIChjbGsgJiAweEZGMDAwMCkgPj4gMTYpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNzkxLDggKzIwMTcsNiBAQAogCXZpYWZiX3NldF9pZ2FfcGF0aCgpOwogCiAJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0gdmlhZmJfbGNkX2RzcF9tZXRob2Q7Ci0JdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQotCQlHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOwogCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOwogCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+ZGlzcGxheV9tZXRob2QgPQogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2Q7CkBAIC0xOTQ2LDEzICsyMTcwLDYgQEAKIAogc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKQogewotCWlmICh2aWFmYl9sY2RfcGFuZWxfaWQgPiBMQ0RfUEFORUxfSURfTUFYSU1VTSkKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQotCQkgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TOwotCWVsc2UKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QgPQotCQkgICAgR0VUX0xDRF9TSVpFX0JZX1VTRVJfU0VUVElORzsKLQogCXZpYWZiX2x2ZHNfdHJhc21pdHRlcl9pZGVudGlmeSgpOwogCXZpYWZiX2luaXRfbGNkX3NpemUoKTsKIAl2aWFmYl9pbml0X2x2ZHNfb3V0cHV0X2ludGVyZmFjZSgmdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCmluZGV4IGExMDlkZTMuLmM0NDM5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtNzAwLDEyICs3MDAsMTggQEAKIAlzdHJ1Y3QgX2xjZF92ZXJfc2NhbGluZ19mYWN0b3IgbGNkX3Zlcl9zY2FsaW5nX2ZhY3RvcjsKIH07CiAKK3N0cnVjdCBwbGxfY29uZmlnIHsKKwl1MTYgbXVsdGlwbGllcjsKKwl1OCBkaXZpc29yOworCXU4IHJzaGlmdDsKK307CisKIHN0cnVjdCBwbGxfbWFwIHsKIAl1MzIgY2xrOwotCXUzMiBjbGUyNjZfcGxsOwotCXUzMiBrODAwX3BsbDsKLQl1MzIgY3g3MDBfcGxsOwotCXUzMiB2eDg1NV9wbGw7CisJc3RydWN0IHBsbF9jb25maWcgY2xlMjY2X3BsbDsKKwlzdHJ1Y3QgcGxsX2NvbmZpZyBrODAwX3BsbDsKKwlzdHJ1Y3QgcGxsX2NvbmZpZyBjeDcwMF9wbGw7CisJc3RydWN0IHBsbF9jb25maWcgdng4NTVfcGxsOwogfTsKIAogc3RydWN0IHJnYkxVVCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oIGIvZHJpdmVycy92aWRlby92aWEvaW9jdGwuaAppbmRleCBjNDMwZmEyLi42MDEwZDEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pb2N0bC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2lvY3RsLmgKQEAgLTM1LDExICszNSw5IEBACiAjZGVmaW5lIFZJQUZCX0dFVF9TQU1NX0lORk8JCTB4NTY0OTQxMDcJLyogJ1ZJQVwwNycgKi8KICNkZWZpbmUgVklBRkJfVFVSTl9PTl9PVVRQVVRfREVWSUNFICAgICAweDU2NDk0MTA4CS8qICdWSUFcMDgnICovCiAjZGVmaW5lIFZJQUZCX1RVUk5fT0ZGX09VVFBVVF9ERVZJQ0UgICAgMHg1NjQ5NDEwOQkvKiAnVklBXDA5JyAqLwotI2RlZmluZSBWSUFGQl9TRVRfREVWSUNFCQkweDU2NDk0MTBBCiAjZGVmaW5lIFZJQUZCX0dFVF9ERVZJQ0UJCTB4NTY0OTQxMEIKICNkZWZpbmUgVklBRkJfR0VUX0RSSVZFUl9WRVJTSU9OCTB4NTY0OTQxMTIJLyogJ1ZJQVwxMicgKi8KICNkZWZpbmUgVklBRkJfR0VUX0NISVBfSU5GTwkJMHg1NjQ5NDExMwkvKiAnVklBXDEzJyAqLwotI2RlZmluZSBWSUFGQl9TRVRfREVWSUNFX0lORk8gICAgICAgICAgIDB4NTY0OTQxMTQKICNkZWZpbmUgVklBRkJfR0VUX0RFVklDRV9JTkZPICAgICAgICAgICAweDU2NDk0MTE1CiAKICNkZWZpbmUgVklBRkJfR0VUX0RFVklDRV9TVVBQT1JUCTB4NTY0OTQxMTgKQEAgLTUwLDcgKzQ4LDYgQEAKICNkZWZpbmUgVklBRkJfR0VUX0dBTU1BX0xVVAkJMHg1NjQ5NDEyNAogI2RlZmluZSBWSUFGQl9TRVRfR0FNTUFfTFVUCQkweDU2NDk0MTI1CiAjZGVmaW5lIFZJQUZCX0dFVF9HQU1NQV9TVVBQT1JUX1NUQVRFCTB4NTY0OTQxMjYKLSNkZWZpbmUgVklBRkJfU0VUX1NFQ09ORF9NT0RFCQkweDU2NDk0MTI5CiAjZGVmaW5lIFZJQUZCX1NZTkNfU1VSRkFDRQkJMHg1NjQ5NDEzMAogI2RlZmluZSBWSUFGQl9HRVRfRFJJVkVSX0NBUFMJCTB4NTY0OTQxMzEKICNkZWZpbmUgVklBRkJfR0VUX0lHQV9TQ0FMSU5HX0lORk8JMHg1NjQ5NDEzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwppbmRleCAyYWIwZjE1Li5mYzI1YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtNzUsOCArNzUsNiBAQAogc3RhdGljIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBsY2RfY2VudGVyaW5nX3RpbWdpbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nCiAJCQkJCSAgICBtb2RlX2NydF9yZWcsCiAJCQkJCSAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyBwYW5lbF9jcnRfcmVnKTsKLXN0YXRpYyB2b2lkIHZpYWZiX2xvYWRfc2NhbGluZ19mYWN0b3JfZm9yX3A0bTkwMChpbnQgc2V0X2hyZXMsCi0JaW50IHNldF92cmVzLCBpbnQgcGFuZWxfaHJlcywgaW50IHBhbmVsX3ZyZXMpOwogCiBzdGF0aWMgaW50IGNoZWNrX2x2ZHNfY2hpcChpbnQgZGV2aWNlX2lkX3N1YmFkZHIsIGludCBkZXZpY2VfaWQpCiB7CkBAIC04OSwzMyArODcsOCBAQAogdm9pZCB2aWFmYl9pbml0X2xjZF9zaXplKHZvaWQpCiB7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfaW5pdF9sY2Rfc2l6ZSgpXG4iKTsKLQlERUJVR19NU0coS0VSTl9JTkZPCi0JCSJ2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCAlZFxuIiwKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmdldF9sY2Rfc2l6ZV9tZXRob2QpOwogCi0Jc3dpdGNoICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+Z2V0X2xjZF9zaXplX21ldGhvZCkgewotCWNhc2UgR0VUX0xDRF9TSVpFX0JZX1NZU1RFTV9CSU9TOgotCQlicmVhazsKLQljYXNlIEdFVF9MQ0RfU1pJRV9CWV9IV19TVFJBUFBJTkc6Ci0JCWJyZWFrOwotCWNhc2UgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TOgotCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgTENEIFNpemUgbWV0aG9kIGJ5IFZHQSBCSU9TICEhXG4iKTsKLQkJZnBfaWRfdG9fdmluZGV4KHZpYWZiX2xjZF9wYW5lbF9pZCk7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIkxDRCBQYW5lbF9JRCA9ICVkXG4iLAotCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkKTsKLQkJYnJlYWs7Ci0JY2FzZSBHRVRfTENEX1NJWkVfQllfVVNFUl9TRVRUSU5HOgotCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgTENEIFNpemUgbWV0aG9kIGJ5IHVzZXIgc2V0dGluZyAhIVxuIik7Ci0JCWZwX2lkX3RvX3ZpbmRleCh2aWFmYl9sY2RfcGFuZWxfaWQpOwotCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWxfSUQgPSAlZFxuIiwKLQkJCSAgdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfbGNkX3NpemUgZmFpbFxuIik7Ci0JCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQgPQotCQkJTENEX1BBTkVMX0lEMV84MDBYNjAwOwotCQlmcF9pZF90b192aW5kZXgoTENEX1BBTkVMX0lEMV84MDBYNjAwKTsKLQl9CisJZnBfaWRfdG9fdmluZGV4KHZpYWZiX2xjZF9wYW5lbF9pZCk7CiAJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfaWQgPQogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkOwogCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX2hyZXMgPQpAQCAtNDM3LDE0ICs0MTAsOSBAQAogCiAJLyogTENEIFNjYWxpbmcgRW5hYmxlICovCiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIDB4MDcsIEJJVDAgKyBCSVQxICsgQklUMik7Ci0JaWYgKFVOSUNIUk9NRV9QNE05MDAgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCXZpYWZiX2xvYWRfc2NhbGluZ19mYWN0b3JfZm9yX3A0bTkwMChzZXRfaHJlcywgc2V0X3ZyZXMsCi0JCQkJCSAgICAgICBwYW5lbF9ocmVzLCBwYW5lbF92cmVzKTsKLQkJcmV0dXJuOwotCX0KIAogCS8qIENoZWNrIGlmIGV4cGFuc2lvbiBmb3IgaG9yaXpvbnRhbCAqLwotCWlmIChzZXRfaHJlcyAhPSBwYW5lbF9ocmVzKSB7CisJaWYgKHNldF9ocmVzIDwgcGFuZWxfaHJlcykgewogCQkvKiBMb2FkIEhvcml6b250YWwgU2NhbGluZyBGYWN0b3IgKi8KIAkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKIAkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgpAQCAtNDY0LDYgKzQzMiwxMCBAQAogCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKIAkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgogCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ043NTA6CisJCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKIAkJCXJlZ192YWx1ZSA9CiAJCQkgICAgSzgwMF9MQ0RfSE9SX1NDRl9GT1JNVUxBKHNldF9ocmVzLCBwYW5lbF9ocmVzKTsKIAkJCS8qIEhvcml6b250YWwgc2NhbGluZyBlbmFibGVkICovCkBAIC00ODMsNyArNDU1LDcgQEAKIAl9CiAKIAkvKiBDaGVjayBpZiBleHBhbnNpb24gZm9yIHZlcnRpY2FsICovCi0JaWYgKHNldF92cmVzICE9IHBhbmVsX3ZyZXMpIHsKKwlpZiAoc2V0X3ZyZXMgPCBwYW5lbF92cmVzKSB7CiAJCS8qIExvYWQgVmVydGljYWwgU2NhbGluZyBGYWN0b3IgKi8KIAkJc3dpdGNoICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKIAkJY2FzZSBVTklDSFJPTUVfQ0xFMjY2OgpAQCAtNTAzLDYgKzQ3NSwxMCBAQAogCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKIAkJY2FzZSBVTklDSFJPTUVfSzhNODkwOgogCQljYXNlIFVOSUNIUk9NRV9QNE04OTA6CisJCWNhc2UgVU5JQ0hST01FX1A0TTkwMDoKKwkJY2FzZSBVTklDSFJPTUVfQ043NTA6CisJCWNhc2UgVU5JQ0hST01FX1ZYODAwOgorCQljYXNlIFVOSUNIUk9NRV9WWDg1NToKIAkJCXJlZ192YWx1ZSA9CiAJCQkgICAgSzgwMF9MQ0RfVkVSX1NDRl9GT1JNVUxBKHNldF92cmVzLCBwYW5lbF92cmVzKTsKIAkJCS8qIFZlcnRpY2FsIHNjYWxpbmcgZW5hYmxlZCAqLwpAQCAtNjQ4LDkgKzYyNCw4IEBACiAJCQkJIChtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpLCBJR0ExKTsKIAl9IGVsc2UgewogCQkvKiBFeHBhbnNpb24gKi8KLQkJaWYgKChwbHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09Ci0JCSAgICAgTENEX0VYUEFORFNJT04pICYgKChzZXRfaHJlcyAhPSBwYW5lbF9ocmVzKQotCQkJCQl8fCAoc2V0X3ZyZXMgIT0gcGFuZWxfdnJlcykpKSB7CisJCWlmIChwbHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID09IExDRF9FWFBBTkRTSU9OCisJCQkmJiAoc2V0X2hyZXMgPCBwYW5lbF9ocmVzIHx8IHNldF92cmVzIDwgcGFuZWxfdnJlcykpIHsKIAkJCS8qIGV4cGFuc2lvbiB0aW1pbmcgSUdBMiBsb2FkZWQgcGFuZWwgc2V0IHRpbWluZyovCiAJCQl2aWFmYl9sb2FkX2NydGNfdGltaW5nKHBhbmVsX2NydF9yZWcsIElHQTIpOwogCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfbG9hZF9jcnRjX3RpbWluZyEhXG4iKTsKQEAgLTExMzksNjkgKzExMTQsMyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQotCi1zdGF0aWMgdm9pZCB2aWFmYl9sb2FkX3NjYWxpbmdfZmFjdG9yX2Zvcl9wNG05MDAoaW50IHNldF9ocmVzLAotCWludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsIGludCBwYW5lbF92cmVzKQotewotCWludCBoX3NjYWxpbmdfZmFjdG9yOwotCWludCB2X3NjYWxpbmdfZmFjdG9yOwotCXU4IGNyYTIgPSAwOwotCXU4IGNyNzcgPSAwOwotCXU4IGNyNzggPSAwOwotCXU4IGNyNzkgPSAwOwotCXU4IGNyOWYgPSAwOwotCS8qIENoZWNrIGlmIGV4cGFuc2lvbiBmb3IgaG9yaXpvbnRhbCAqLwotCWlmIChzZXRfaHJlcyA8IHBhbmVsX2hyZXMpIHsKLQkJLyogTG9hZCBIb3Jpem9udGFsIFNjYWxpbmcgRmFjdG9yICovCi0KLQkJLyogRm9yIFZJQV9LOE04MDAgb3IgbGF0ZXIgY2hpcHNldHMuICovCi0JCWhfc2NhbGluZ19mYWN0b3IgPQotCQkgICAgSzgwMF9MQ0RfSE9SX1NDRl9GT1JNVUxBKHNldF9ocmVzLCBwYW5lbF9ocmVzKTsKLQkJLyogSFNDYWxlRmFjdG9yWzE6MF0gYXQgQ1I5RlsxOjBdICovCi0JCWNyOWYgPSBoX3NjYWxpbmdfZmFjdG9yICYgMHgwMDAzOwotCQkvKiBIU0NhbGVGYWN0b3JbOToyXSBhdCBDUjc3Wzc6MF0gKi8KLQkJY3I3NyA9IChoX3NjYWxpbmdfZmFjdG9yICYgMHgwM0ZDKSA+PiAyOwotCQkvKiBIU0NhbGVGYWN0b3JbMTE6MTBdIGF0IENSNzlbNTo0XSAqLwotCQljcjc5ID0gKGhfc2NhbGluZ19mYWN0b3IgJiAweDBDMDApID4+IDEwOwotCQljcjc5IDw8PSA0OwotCi0JCS8qIEhvcml6b250YWwgc2NhbGluZyBlbmFibGVkICovCi0JCWNyYTIgPSAweEMwOwotCi0JCURFQlVHX01TRyhLRVJOX0lORk8gIkhvcml6b250YWwgU2NhbGluZyB2YWx1ZSA9ICVkXG4iLAotCQkJICBoX3NjYWxpbmdfZmFjdG9yKTsKLQl9IGVsc2UgewotCQkvKiBIb3Jpem9udGFsIHNjYWxpbmcgZGlzYWJsZWQgKi8KLQkJY3JhMiA9IDB4MDA7Ci0JfQotCi0JLyogQ2hlY2sgaWYgZXhwYW5zaW9uIGZvciB2ZXJ0aWNhbCAqLwotCWlmIChzZXRfdnJlcyA8IHBhbmVsX3ZyZXMpIHsKLQkJLyogTG9hZCBWZXJ0aWNhbCBTY2FsaW5nIEZhY3RvciAqLwotCi0JCS8qIEZvciBWSUFfSzhNODAwIG9yIGxhdGVyIGNoaXBzZXRzLiAqLwotCQl2X3NjYWxpbmdfZmFjdG9yID0KLQkJICAgIEs4MDBfTENEX1ZFUl9TQ0ZfRk9STVVMQShzZXRfdnJlcywgcGFuZWxfdnJlcyk7Ci0KLQkJLyogVmVydGljYWwgc2NhbGluZyBlbmFibGVkICovCi0JCWNyYTIgfD0gMHgwODsKLQkJLyogVlNDYWxlRmFjdG9yWzBdIGF0IENSNzlbM10gKi8KLQkJY3I3OSB8PSAoKHZfc2NhbGluZ19mYWN0b3IgJiAweDAwMDEpIDw8IDMpOwotCQkvKiBWU0NhbGVGYWN0b3JbODoxXSBhdCBDUjc4Wzc6MF0gKi8KLQkJY3I3OCB8PSAodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDFGRSkgPj4gMTsKLQkJLyogVlNDYWxlRmFjdG9yWzEwOjldIGF0IENSNzlbNzo2XSAqLwotCQljcjc5IHw9ICgodl9zY2FsaW5nX2ZhY3RvciAmIDB4MDYwMCkgPj4gOSkgPDwgNjsKLQotCQlERUJVR19NU0coS0VSTl9JTkZPICJWZXJ0aWNhbCBTY2FsaW5nIHZhbHVlID0gJWRcbiIsCi0JCQkgIHZfc2NhbGluZ19mYWN0b3IpOwotCX0gZWxzZSB7Ci0JCS8qIFZlcnRpY2FsIHNjYWxpbmcgZGlzYWJsZWQgKi8KLQkJY3JhMiB8PSAweDAwOwotCX0KLQotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSQTIsIFZJQUNSLCBjcmEyLCBCSVQzICsgQklUNiArIEJJVDcpOwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNzcsIFZJQUNSLCBjcjc3LCAweEZGKTsKLQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjc4LCBWSUFDUiwgY3I3OCwgMHhGRik7Ci0JdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I3OSwgVklBQ1IsIGNyNzksIDB4RjgpOwotCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSOUYsIFZJQUNSLCBjcjlmLCBCSVQwICsgQklUMSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCmluZGV4IDk3NjJlYzYuLmIzNDhlZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2xjZC5oCkBAIC0yOCwxMSArMjgsNiBAQAogI2RlZmluZSAgICAgVlQzMjcxX0RFVklDRV9JRF9SRUcgICAgICAgIDB4MDIKICNkZWZpbmUgICAgIFZUMzI3MV9ERVZJQ0VfSUQgICAgICAgICAgICAweDcxCiAKLSNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9TWVNURU1fQklPUyAgICAgMHgwMQotI2RlZmluZSAgICAgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TICAgICAgICAweDAyCi0jZGVmaW5lICAgICBHRVRfTENEX1NaSUVfQllfSFdfU1RSQVBQSU5HICAgIDB4MDMKLSNkZWZpbmUgICAgIEdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkcgICAgMHgwNAotCiAvKiBEZWZpbml0aW9uIERWSSBQYW5lbCBJRCovCiAvKiBSZXNvbHV0aW9uOiA2NDB4NDgwLCAgIENoYW5uZWw6IHNpbmdsZSwgRGl0aGVyaW5nOiBFbmFibGUgKi8KICNkZWZpbmUgICAgIExDRF9QQU5FTF9JRDBfNjQwWDQ4MCAgICAgICAweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oIGIvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaAppbmRleCA3ZjBkZTdmLi4yY2JlMTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKQEAgLTYzMSw3ICs2MzEsNiBAQAogI2RlZmluZSBDTEtfMjVfMTc1TSAgICAgMjUxNzUwMDAKICNkZWZpbmUgQ0xLXzI2Xzg4ME0gICAgIDI2ODgwMDAwCiAjZGVmaW5lIENMS18yOV81ODFNICAgICAyOTU4MTAwMAotI2RlZmluZSBDTEtfMzFfNDkwTSAgICAgMzE0OTAwMDAKICNkZWZpbmUgQ0xLXzMxXzUwME0gICAgIDMxNTAwMDAwCiAjZGVmaW5lIENMS18zMV83MjhNICAgICAzMTcyODAwMAogI2RlZmluZSBDTEtfMzJfNjY4TSAgICAgMzI2ODgwMDAKQEAgLTY3Niw3ICs2NzUsNiBAQAogI2RlZmluZSBDTEtfMTE5XzAwME0gICAgMTE5MDAwMDAwCiAjZGVmaW5lIENMS18xMjFfNzUwTSAgICAxMjE3NTAwMDAJLyogMTIxLjcwNE1IeiAqLwogI2RlZmluZSBDTEtfMTI1XzEwNE0gICAgMTI1MTA0MDAwCi0jZGVmaW5lIENMS18xMzNfMzA4TSAgICAxMzMzMDgwMDAKICNkZWZpbmUgQ0xLXzEzNV8wMDBNICAgIDEzNTAwMDAwMAogI2RlZmluZSBDTEtfMTM2XzcwME0gICAgMTM2NzAwMDAwCiAjZGVmaW5lIENMS18xMzhfNDAwTSAgICAxMzg0MDAwMDAKQEAgLTY5OSwzMTMgKzY5Nyw2IEBACiAjZGVmaW5lIENMS18xNzJfNzk4TSAgICAxNzI3OTgwMDAKICNkZWZpbmUgQ0xLXzEyMl82MTRNICAgIDEyMjYxNDAwMAogCi0vKiBDTEUyNjYgUExMIHZhbHVlCi0qLwotI2RlZmluZSBDTEUyNjZfUExMXzI1XzE3NU0gICAgIDB4MDAwMEM3NjMKLSNkZWZpbmUgQ0xFMjY2X1BMTF8yNl84ODBNICAgICAweDAwMDA0NDBGCi0jZGVmaW5lIENMRTI2Nl9QTExfMjlfNTgxTSAgICAgMHgwMDAwODQyMQotI2RlZmluZSBDTEUyNjZfUExMXzMxXzQ5ME0gICAgIDB4MDAwMDQ3MjEKLSNkZWZpbmUgQ0xFMjY2X1BMTF8zMV81MDBNICAgICAweDAwMDBDM0I1Ci0jZGVmaW5lIENMRTI2Nl9QTExfMzFfNzI4TSAgICAgMHgwMDAwNDcxRgotI2RlZmluZSBDTEUyNjZfUExMXzMyXzY2OE0gICAgIDB4MDAwMEM0NDkKLSNkZWZpbmUgQ0xFMjY2X1BMTF8zNl8wMDBNICAgICAweDAwMDBDNUU1Ci0jZGVmaW5lIENMRTI2Nl9QTExfNDBfMDAwTSAgICAgMHgwMDAwQzQ1OQotI2RlZmluZSBDTEUyNjZfUExMXzQxXzI5MU0gICAgIDB4MDAwMDQ0MTcKLSNkZWZpbmUgQ0xFMjY2X1BMTF80M18xNjNNICAgICAweDAwMDBDNTc5Ci0jZGVmaW5lIENMRTI2Nl9QTExfNDVfMjUwTSAgICAgMHgwMDAwQzU3RgkvKiA0NS40Nk1IeiAqLwotI2RlZmluZSBDTEUyNjZfUExMXzQ2XzAwME0gICAgIDB4MDAwMDg3NUEKLSNkZWZpbmUgQ0xFMjY2X1BMTF80Nl85OTZNICAgICAweDAwMDBDNEU5Ci0jZGVmaW5lIENMRTI2Nl9QTExfNDhfMDAwTSAgICAgMHgwMDAwMTQ0MwotI2RlZmluZSBDTEUyNjZfUExMXzQ4Xzg3NU0gICAgIDB4MDAwMDFENjMKLSNkZWZpbmUgQ0xFMjY2X1BMTF80OV81MDBNICAgICAweDAwMDA4NjUzCi0jZGVmaW5lIENMRTI2Nl9QTExfNTJfNDA2TSAgICAgMHgwMDAwQzQ3NQotI2RlZmluZSBDTEUyNjZfUExMXzUyXzk3N00gICAgIDB4MDAwMDQ1MjUKLSNkZWZpbmUgQ0xFMjY2X1BMTF81Nl8yNTBNICAgICAweDAwMDA0N0I3Ci0jZGVmaW5lIENMRTI2Nl9QTExfNjBfNDY2TSAgICAgMHgwMDAwNDk0QwotI2RlZmluZSBDTEUyNjZfUExMXzYxXzUwME0gICAgIDB4MDAwMDE0NTYKLSNkZWZpbmUgQ0xFMjY2X1BMTF82NV8wMDBNICAgICAweDAwMDA4NkVECi0jZGVmaW5lIENMRTI2Nl9QTExfNjVfMTc4TSAgICAgMHgwMDAwODU1QgotI2RlZmluZSBDTEUyNjZfUExMXzY2Xzc1ME0gICAgIDB4MDAwMDg0NEIJLyogNjcuMTE2TUh6ICovCi0jZGVmaW5lIENMRTI2Nl9QTExfNjhfMTc5TSAgICAgMHgwMDAwMDQxMwotI2RlZmluZSBDTEUyNjZfUExMXzY5XzkyNE0gICAgIDB4MDAwMDExNTMKLSNkZWZpbmUgQ0xFMjY2X1BMTF83MF8xNTlNICAgICAweDAwMDAxNDYyCi0jZGVmaW5lIENMRTI2Nl9QTExfNzJfMDAwTSAgICAgMHgwMDAwMTg3OQotI2RlZmluZSBDTEUyNjZfUExMXzc0XzI3ME0gICAgIDB4MDAwMDQ4NTMKLSNkZWZpbmUgQ0xFMjY2X1BMTF83OF83NTBNICAgICAweDAwMDA0MzIxCi0jZGVmaW5lIENMRTI2Nl9QTExfODBfMTM2TSAgICAgMHgwMDAwMDUxQwotI2RlZmluZSBDTEUyNjZfUExMXzgzXzM3NU0gICAgIDB4MDAwMEMyNUQKLSNkZWZpbmUgQ0xFMjY2X1BMTF84M185NTBNICAgICAweDAwMDAwNzI5Ci0jZGVmaW5lIENMRTI2Nl9QTExfODRfNzUwTSAgICAgMHgwMDAwODU3NgkvKiA4NC41MzdNSHogKi8KLSNkZWZpbmUgQ0xFMjY2X1BMTF84NV84NjBNICAgICAweDAwMDA0NzU0Ci0jZGVmaW5lIENMRTI2Nl9QTExfODhfNzUwTSAgICAgMHgwMDAwMDUxRgotI2RlZmluZSBDTEUyNjZfUExMXzk0XzUwME0gICAgIDB4MDAwMDA1MjEKLSNkZWZpbmUgQ0xFMjY2X1BMTF85N183NTBNICAgICAweDAwMDA0NjUyCi0jZGVmaW5lIENMRTI2Nl9QTExfMTAxXzAwME0gICAgMHgwMDAwNDk3RgotI2RlZmluZSBDTEUyNjZfUExMXzEwNl81MDBNICAgIDB4MDAwMDg0NzcJLyogMTA2LjQ5MTQ2MyBNSHogKi8KLSNkZWZpbmUgQ0xFMjY2X1BMTF8xMDhfMDAwTSAgICAweDAwMDA4NDc5Ci0jZGVmaW5lIENMRTI2Nl9QTExfMTEzXzMwOU0gICAgMHgwMDAwMEM1RgotI2RlZmluZSBDTEUyNjZfUExMXzExOF84NDBNICAgIDB4MDAwMDQ1NTMKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xMTlfMDAwTSAgICAweDAwMDAwRDZDCi0jZGVmaW5lIENMRTI2Nl9QTExfMTIxXzc1ME0gICAgMHgwMDAwNDU1NQkvKiAxMjEuNzA0TUh6ICovCi0jZGVmaW5lIENMRTI2Nl9QTExfMTI1XzEwNE0gICAgMHgwMDAwMDZCNQotI2RlZmluZSBDTEUyNjZfUExMXzEzM18zMDhNICAgIDB4MDAwMDQ2NUYKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xMzVfMDAwTSAgICAweDAwMDA0NTVFCi0jZGVmaW5lIENMRTI2Nl9QTExfMTM2XzcwME0gICAgMHgwMDAwMEM3MwotI2RlZmluZSBDTEUyNjZfUExMXzEzOF80MDBNICAgIDB4MDAwMDA5NTcKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xNDZfNzYwTSAgICAweDAwMDA0NTY3Ci0jZGVmaW5lIENMRTI2Nl9QTExfMTQ4XzUwME0gICAgMHgwMDAwMDg1MwotI2RlZmluZSBDTEUyNjZfUExMXzE1M185MjBNICAgIDB4MDAwMDA4NTYKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xNTZfMDAwTSAgICAweDAwMDA0NTZECi0jZGVmaW5lIENMRTI2Nl9QTExfMTU3XzUwME0gICAgMHgwMDAwMDVCNwotI2RlZmluZSBDTEUyNjZfUExMXzE2Ml8wMDBNICAgIDB4MDAwMDQ1NzEKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xODdfMDAwTSAgICAweDAwMDAwOTc2Ci0jZGVmaW5lIENMRTI2Nl9QTExfMTkzXzI5NU0gICAgMHgwMDAwMDg2QwotI2RlZmluZSBDTEUyNjZfUExMXzIwMl81MDBNICAgIDB4MDAwMDA3NjMKLSNkZWZpbmUgQ0xFMjY2X1BMTF8yMDRfMDAwTSAgICAweDAwMDAwNzY0Ci0jZGVmaW5lIENMRTI2Nl9QTExfMjE4XzUwME0gICAgMHgwMDAwMDY1QwotI2RlZmluZSBDTEUyNjZfUExMXzIzNF8wMDBNICAgIDB4MDAwMDA2NjIKLSNkZWZpbmUgQ0xFMjY2X1BMTF8yNjdfMjUwTSAgICAweDAwMDAwNjcwCi0jZGVmaW5lIENMRTI2Nl9QTExfMjk3XzUwME0gICAgMHgwMDAwMDVFNgotI2RlZmluZSBDTEUyNjZfUExMXzc0XzQ4MU0gICAgIDB4MDAwMDA1MUEKLSNkZWZpbmUgQ0xFMjY2X1BMTF8xNzJfNzk4TSAgICAweDAwMDA0NTc5Ci0jZGVmaW5lIENMRTI2Nl9QTExfMTIyXzYxNE0gICAgMHgwMDAwMDczQwotCi0vKiBLODAwIFBMTCB2YWx1ZQotKi8KLSNkZWZpbmUgSzgwMF9QTExfMjVfMTc1TSAgICAgMHgwMDUzOTAwMQotI2RlZmluZSBLODAwX1BMTF8yNl84ODBNICAgICAweDAwMUM4QzgwCi0jZGVmaW5lIEs4MDBfUExMXzI5XzU4MU0gICAgIDB4MDA0MDkwODAKLSNkZWZpbmUgSzgwMF9QTExfMzFfNDkwTSAgICAgMHgwMDZGOTAwMQotI2RlZmluZSBLODAwX1BMTF8zMV81MDBNICAgICAweDAwOEI5MDAyCi0jZGVmaW5lIEs4MDBfUExMXzMxXzcyOE0gICAgIDB4MDBBRjkwMDMKLSNkZWZpbmUgSzgwMF9QTExfMzJfNjY4TSAgICAgMHgwMDkwOTAwMgotI2RlZmluZSBLODAwX1BMTF8zNl8wMDBNICAgICAweDAwOUY5MDAyCi0jZGVmaW5lIEs4MDBfUExMXzQwXzAwME0gICAgIDB4MDA1NzhDMDIKLSNkZWZpbmUgSzgwMF9QTExfNDFfMjkxTSAgICAgMHgwMDQzOEMwMQotI2RlZmluZSBLODAwX1BMTF80M18xNjNNICAgICAweDAwNzc4QzAzCi0jZGVmaW5lIEs4MDBfUExMXzQ1XzI1ME0gICAgIDB4MDA3RDhDODMJLyogNDUuNDZNSHogKi8KLSNkZWZpbmUgSzgwMF9QTExfNDZfMDAwTSAgICAgMHgwMDY1OEMwMgotI2RlZmluZSBLODAwX1BMTF80Nl85OTZNICAgICAweDAwODE4QzgzCi0jZGVmaW5lIEs4MDBfUExMXzQ4XzAwME0gICAgIDB4MDA4NDhDODMKLSNkZWZpbmUgSzgwMF9QTExfNDhfODc1TSAgICAgMHgwMDUwOEM4MQotI2RlZmluZSBLODAwX1BMTF80OV81MDBNICAgICAweDAwNTE4QzAxCi0jZGVmaW5lIEs4MDBfUExMXzUyXzQwNk0gICAgIDB4MDA3MzhDMDIKLSNkZWZpbmUgSzgwMF9QTExfNTJfOTc3TSAgICAgMHgwMDkyOEM4MwotI2RlZmluZSBLODAwX1BMTF81Nl8yNTBNICAgICAweDAwN0M4QzAyCi0jZGVmaW5lIEs4MDBfUExMXzYwXzQ2Nk0gICAgIDB4MDBBNzhDODMKLSNkZWZpbmUgSzgwMF9QTExfNjFfNTAwTSAgICAgMHgwMEFBOEM4MwotI2RlZmluZSBLODAwX1BMTF82NV8wMDBNICAgICAweDAwNkI4QzAxCi0jZGVmaW5lIEs4MDBfUExMXzY1XzE3OE0gICAgIDB4MDBCNDhDODMKLSNkZWZpbmUgSzgwMF9QTExfNjZfNzUwTSAgICAgMHgwMDk0OEM4MgkvKiA2Ny4xMTZNSHogKi8KLSNkZWZpbmUgSzgwMF9QTExfNjhfMTc5TSAgICAgMHgwMDcwOEMwMQotI2RlZmluZSBLODAwX1BMTF82OV85MjRNICAgICAweDAwQzE4QzgzCi0jZGVmaW5lIEs4MDBfUExMXzcwXzE1OU0gICAgIDB4MDBDMjhDODMKLSNkZWZpbmUgSzgwMF9QTExfNzJfMDAwTSAgICAgMHgwMDlGOEM4MgotI2RlZmluZSBLODAwX1BMTF83NF8yNzBNICAgICAweDAwY2UwYzAzCi0jZGVmaW5lIEs4MDBfUExMXzc4Xzc1ME0gICAgIDB4MDA0MDg4MDEKLSNkZWZpbmUgSzgwMF9QTExfODBfMTM2TSAgICAgMHgwMDQyODgwMQotI2RlZmluZSBLODAwX1BMTF84M18zNzVNICAgICAweDAwNUIwODgyCi0jZGVmaW5lIEs4MDBfUExMXzgzXzk1ME0gICAgIDB4MDA3Mzg4MDMKLSNkZWZpbmUgSzgwMF9QTExfODRfNzUwTSAgICAgMHgwMDc0ODg4MwkvKiA4NC40NzdNSHogKi8KLSNkZWZpbmUgSzgwMF9QTExfODVfODYwTSAgICAgMHgwMDc2ODg4MwotI2RlZmluZSBLODAwX1BMTF84OF83NTBNICAgICAweDAwN0E4ODgzCi0jZGVmaW5lIEs4MDBfUExMXzk0XzUwME0gICAgIDB4MDA4Mjg4MDMKLSNkZWZpbmUgSzgwMF9QTExfOTdfNzUwTSAgICAgMHgwMDg3ODg4MwotI2RlZmluZSBLODAwX1BMTF8xMDFfMDAwTSAgICAweDAwOEI4ODgzCi0jZGVmaW5lIEs4MDBfUExMXzEwNl81MDBNICAgIDB4MDA3NTg4ODIJLyogMTA2LjQ5MTQ2MyBNSHogKi8KLSNkZWZpbmUgSzgwMF9QTExfMTA4XzAwME0gICAgMHgwMDc3ODg4MgotI2RlZmluZSBLODAwX1BMTF8xMTNfMzA5TSAgICAweDAwNUQ4ODgxCi0jZGVmaW5lIEs4MDBfUExMXzExOF84NDBNICAgIDB4MDBBNDg4ODMKLSNkZWZpbmUgSzgwMF9QTExfMTE5XzAwME0gICAgMHgwMDgzODg4MgotI2RlZmluZSBLODAwX1BMTF8xMjFfNzUwTSAgICAweDAwQTg4ODgzCS8qIDEyMS43MDRNSHogKi8KLSNkZWZpbmUgSzgwMF9QTExfMTI1XzEwNE0gICAgMHgwMDY4ODgwMQotI2RlZmluZSBLODAwX1BMTF8xMzNfMzA4TSAgICAweDAwNUQ4ODAxCi0jZGVmaW5lIEs4MDBfUExMXzEzNV8wMDBNICAgIDB4MDAxQTQwODEKLSNkZWZpbmUgSzgwMF9QTExfMTM2XzcwME0gICAgMHgwMEJEODg4MwotI2RlZmluZSBLODAwX1BMTF8xMzhfNDAwTSAgICAweDAwNzI4ODgxCi0jZGVmaW5lIEs4MDBfUExMXzE0Nl83NjBNICAgIDB4MDBDQzg4ODMKLSNkZWZpbmUgSzgwMF9QTExfMTQ4XzUwME0gICAgMHgwMGNlMDgwMwotI2RlZmluZSBLODAwX1BMTF8xNTNfOTIwTSAgICAweDAwNTQ4NDgyCi0jZGVmaW5lIEs4MDBfUExMXzE1Nl8wMDBNICAgIDB4MDA2Qjg0ODMKLSNkZWZpbmUgSzgwMF9QTExfMTU3XzUwME0gICAgMHgwMDE0MjA4MAotI2RlZmluZSBLODAwX1BMTF8xNjJfMDAwTSAgICAweDAwNkY4NDgzCi0jZGVmaW5lIEs4MDBfUExMXzE4N18wMDBNICAgIDB4MDA4MTg0ODMKLSNkZWZpbmUgSzgwMF9QTExfMTkzXzI5NU0gICAgMHgwMDRGODQ4MQotI2RlZmluZSBLODAwX1BMTF8yMDJfNTAwTSAgICAweDAwNTM4NDgxCi0jZGVmaW5lIEs4MDBfUExMXzIwNF8wMDBNICAgIDB4MDA4RDg0ODMKLSNkZWZpbmUgSzgwMF9QTExfMjE4XzUwME0gICAgMHgwMDk3ODQ4MwotI2RlZmluZSBLODAwX1BMTF8yMzRfMDAwTSAgICAweDAwNjA4NDAxCi0jZGVmaW5lIEs4MDBfUExMXzI2N18yNTBNICAgIDB4MDA2RTg0ODEKLSNkZWZpbmUgSzgwMF9QTExfMjk3XzUwME0gICAgMHgwMEE0ODQwMgotI2RlZmluZSBLODAwX1BMTF83NF80ODFNICAgICAweDAwN0I4QzgxCi0jZGVmaW5lIEs4MDBfUExMXzE3Ml83OThNICAgIDB4MDA3Nzg0ODMKLSNkZWZpbmUgSzgwMF9QTExfMTIyXzYxNE0gICAgMHgwMDg3ODg4MgotCi0vKiBQTEwgZm9yIFZUMzMyNCAqLwotI2RlZmluZSBDWDcwMF8yNV8xNzVNICAgICAweDAwOEIxMDAzCi0jZGVmaW5lIENYNzAwXzI2XzcxOU0gICAgIDB4MDA5MzEwMDMKLSNkZWZpbmUgQ1g3MDBfMjZfODgwTSAgICAgMHgwMDk0MTAwMwotI2RlZmluZSBDWDcwMF8yOV81ODFNICAgICAweDAwQTQ5MDAzCi0jZGVmaW5lIENYNzAwXzMxXzQ5ME0gICAgIDB4MDBBRTEwMDMKLSNkZWZpbmUgQ1g3MDBfMzFfNTAwTSAgICAgMHgwMEFFMTAwMwotI2RlZmluZSBDWDcwMF8zMV83MjhNICAgICAweDAwQUYxMDAzCi0jZGVmaW5lIENYNzAwXzMyXzY2OE0gICAgIDB4MDBCNTEwMDMKLSNkZWZpbmUgQ1g3MDBfMzZfMDAwTSAgICAgMHgwMEM4MTAwMwotI2RlZmluZSBDWDcwMF80MF8wMDBNICAgICAweDAwNkUwQzAzCi0jZGVmaW5lIENYNzAwXzQxXzI5MU0gICAgIDB4MDA3MTBDMDMKLSNkZWZpbmUgQ1g3MDBfNDNfMTYzTSAgICAgMHgwMDc3MEMwMwotI2RlZmluZSBDWDcwMF80NV8yNTBNICAgICAweDAwN0QwQzAzCS8qIDQ1LjQ2TUh6ICovCi0jZGVmaW5lIENYNzAwXzQ2XzAwME0gICAgIDB4MDA3RjBDMDMKLSNkZWZpbmUgQ1g3MDBfNDZfOTk2TSAgICAgMHgwMDgxOEM4MwotI2RlZmluZSBDWDcwMF80OF8wMDBNICAgICAweDAwODQwQzAzCi0jZGVmaW5lIENYNzAwXzQ4Xzg3NU0gICAgIDB4MDA1MDhDODEKLSNkZWZpbmUgQ1g3MDBfNDlfNTAwTSAgICAgMHgwMDg4MEMwMwotI2RlZmluZSBDWDcwMF81Ml80MDZNICAgICAweDAwNzMwQzAyCi0jZGVmaW5lIENYNzAwXzUyXzk3N00gICAgIDB4MDA5MjBDMDMKLSNkZWZpbmUgQ1g3MDBfNTZfMjUwTSAgICAgMHgwMDlCMEMwMwotI2RlZmluZSBDWDcwMF82MF80NjZNICAgICAweDAwNDYwQzAwCi0jZGVmaW5lIENYNzAwXzYxXzUwME0gICAgIDB4MDBBQTBDMDMKLSNkZWZpbmUgQ1g3MDBfNjVfMDAwTSAgICAgMHgwMDZCMEMwMQotI2RlZmluZSBDWDcwMF82NV8xNzhNICAgICAweDAwNkIwQzAxCi0jZGVmaW5lIENYNzAwXzY2Xzc1ME0gICAgIDB4MDA5NDBDMDIJLyo2Ny4xMTZNSHogKi8KLSNkZWZpbmUgQ1g3MDBfNjhfMTc5TSAgICAgMHgwMEJDMEMwMwotI2RlZmluZSBDWDcwMF82OV85MjRNICAgICAweDAwQzEwQzAzCi0jZGVmaW5lIENYNzAwXzcwXzE1OU0gICAgIDB4MDBDMjBDMDMKLSNkZWZpbmUgQ1g3MDBfNzJfMDAwTSAgICAgMHgwMDlGMEMwMgotI2RlZmluZSBDWDcwMF83NF8yNzBNICAgICAweDAwQ0UwQzAzCi0jZGVmaW5lIENYNzAwXzc0XzQ4MU0gICAgIDB4MDBDRTBDMDMKLSNkZWZpbmUgQ1g3MDBfNzhfNzUwTSAgICAgMHgwMDZDMDgwMwotI2RlZmluZSBDWDcwMF84MF8xMzZNICAgICAweDAwNkUwODAzCi0jZGVmaW5lIENYNzAwXzgzXzM3NU0gICAgIDB4MDA1QjA4ODIKLSNkZWZpbmUgQ1g3MDBfODNfOTUwTSAgICAgMHgwMDczMDgwMwotI2RlZmluZSBDWDcwMF84NF83NTBNICAgICAweDAwNzQwODAzCS8qIDg0LjUzN01oeiAqLwotI2RlZmluZSBDWDcwMF84NV84NjBNICAgICAweDAwNzYwODAzCi0jZGVmaW5lIENYNzAwXzg4Xzc1ME0gICAgIDB4MDBBQzg4ODUKLSNkZWZpbmUgQ1g3MDBfOTRfNTAwTSAgICAgMHgwMDgyMDgwMwotI2RlZmluZSBDWDcwMF85N183NTBNICAgICAweDAwODcwODAzCi0jZGVmaW5lIENYNzAwXzEwMV8wMDBNICAgIDB4MDA4QjA4MDMKLSNkZWZpbmUgQ1g3MDBfMTA2XzUwME0gICAgMHgwMDc1MDgwMgotI2RlZmluZSBDWDcwMF8xMDhfMDAwTSAgICAweDAwOTUwODAzCi0jZGVmaW5lIENYNzAwXzExM18zMDlNICAgIDB4MDA1RDA4MDEKLSNkZWZpbmUgQ1g3MDBfMTE4Xzg0ME0gICAgMHgwMEE0MDgwMwotI2RlZmluZSBDWDcwMF8xMTlfMDAwTSAgICAweDAwODMwODAyCi0jZGVmaW5lIENYNzAwXzEyMV83NTBNICAgIDB4MDA0MjA4MDAJLyogMTIxLjcwNE1IeiAqLwotI2RlZmluZSBDWDcwMF8xMjVfMTA0TSAgICAweDAwQUQwODAzCi0jZGVmaW5lIENYNzAwXzEzM18zMDhNICAgIDB4MDA5MzA4MDIKLSNkZWZpbmUgQ1g3MDBfMTM1XzAwME0gICAgMHgwMDk1MDgwMgotI2RlZmluZSBDWDcwMF8xMzZfNzAwTSAgICAweDAwQkQwODAzCi0jZGVmaW5lIENYNzAwXzEzOF80MDBNICAgIDB4MDA3MjA4MDEKLSNkZWZpbmUgQ1g3MDBfMTQ2Xzc2ME0gICAgMHgwMENDMDgwMwotI2RlZmluZSBDWDcwMF8xNDhfNTAwTSAgICAweDAwYTQwODAyCi0jZGVmaW5lIENYNzAwXzE1M185MjBNICAgIDB4MDA1NDA0MDIKLSNkZWZpbmUgQ1g3MDBfMTU2XzAwME0gICAgMHgwMDZCMDQwMwotI2RlZmluZSBDWDcwMF8xNTdfNTAwTSAgICAweDAwNkMwNDAzCi0jZGVmaW5lIENYNzAwXzE2Ml8wMDBNICAgIDB4MDA2RjA0MDMKLSNkZWZpbmUgQ1g3MDBfMTcyXzc5OE0gICAgMHgwMDc3MDQwMwotI2RlZmluZSBDWDcwMF8xODdfMDAwTSAgICAweDAwODEwNDAzCi0jZGVmaW5lIENYNzAwXzE5M18yOTVNICAgIDB4MDA4NTA0MDMKLSNkZWZpbmUgQ1g3MDBfMjAyXzUwME0gICAgMHgwMDhDMDQwMwotI2RlZmluZSBDWDcwMF8yMDRfMDAwTSAgICAweDAwOEQwNDAzCi0jZGVmaW5lIENYNzAwXzIxOF81MDBNICAgIDB4MDA5NzA0MDMKLSNkZWZpbmUgQ1g3MDBfMjM0XzAwME0gICAgMHgwMDYwMDQwMQotI2RlZmluZSBDWDcwMF8yNjdfMjUwTSAgICAweDAwQjkwNDAzCi0jZGVmaW5lIENYNzAwXzI5N181MDBNICAgIDB4MDBDRTA0MDMKLSNkZWZpbmUgQ1g3MDBfMTIyXzYxNE0gICAgMHgwMDg3MDgwMgotCi0vKiBQTEwgZm9yIFZYODU1ICovCi0jZGVmaW5lIFZYODU1XzIyXzAwME0gICAgIDB4MDA3QjEwMDUKLSNkZWZpbmUgVlg4NTVfMjVfMTc1TSAgICAgMHgwMDhEMTAwNQotI2RlZmluZSBWWDg1NV8yNl83MTlNICAgICAweDAwOTYxMDA1Ci0jZGVmaW5lIFZYODU1XzI2Xzg4ME0gICAgIDB4MDA5NjEwMDUKLSNkZWZpbmUgVlg4NTVfMjdfMDAwTSAgICAgMHgwMDk3MTAwNQotI2RlZmluZSBWWDg1NV8yOV81ODFNICAgICAweDAwQTUxMDA1Ci0jZGVmaW5lIFZYODU1XzI5XzgyOU0gICAgIDB4MDA2NDEwMDMKLSNkZWZpbmUgVlg4NTVfMzFfNDkwTSAgICAgMHgwMEIwMTAwNQotI2RlZmluZSBWWDg1NV8zMV81MDBNICAgICAweDAwQjAxMDA1Ci0jZGVmaW5lIFZYODU1XzMxXzcyOE0gICAgIDB4MDA4RTEwMDQKLSNkZWZpbmUgVlg4NTVfMzJfNjY4TSAgICAgMHgwMDkyMTAwNAotI2RlZmluZSBWWDg1NV8zNl8wMDBNICAgICAweDAwQTExMDA0Ci0jZGVmaW5lIFZYODU1XzQwXzAwME0gICAgIDB4MDA3MDBDMDUKLSNkZWZpbmUgVlg4NTVfNDFfMjkxTSAgICAgMHgwMDczMEMwNQotI2RlZmluZSBWWDg1NV80M18xNjNNICAgICAweDAwNzkwQzA1Ci0jZGVmaW5lIFZYODU1XzQ1XzI1ME0gICAgIDB4MDA3RjBDMDUgICAgICAvKiA0NS40Nk1IeiAqLwotI2RlZmluZSBWWDg1NV80Nl8wMDBNICAgICAweDAwNjcwQzA0Ci0jZGVmaW5lIFZYODU1XzQ2Xzk5Nk0gICAgIDB4MDA2OTBDMDQKLSNkZWZpbmUgVlg4NTVfNDhfMDAwTSAgICAgMHgwMDg2MEMwNQotI2RlZmluZSBWWDg1NV80OF84NzVNICAgICAweDAwODkwQzA1Ci0jZGVmaW5lIFZYODU1XzQ5XzUwME0gICAgIDB4MDA1MzBDMDMKLSNkZWZpbmUgVlg4NTVfNTJfNDA2TSAgICAgMHgwMDU4MEMwMwotI2RlZmluZSBWWDg1NV81Ml85NzdNICAgICAweDAwOTQwQzA1Ci0jZGVmaW5lIFZYODU1XzU2XzI1ME0gICAgIDB4MDA5RDBDMDUKLSNkZWZpbmUgVlg4NTVfNTdfMjc1TSAgICAgMHgwMDlEOEM4NSAgICAvKiBVc2VkIGJ5IFhPIHBhbmVsICovCi0jZGVmaW5lIFZYODU1XzYwXzQ2Nk0gICAgIDB4MDBBOTBDMDUKLSNkZWZpbmUgVlg4NTVfNjFfNTAwTSAgICAgMHgwMEFDMEMwNQotI2RlZmluZSBWWDg1NV82NV8wMDBNICAgICAweDAwNkQwQzAzCi0jZGVmaW5lIFZYODU1XzY1XzE3OE0gICAgIDB4MDBCNjBDMDUKLSNkZWZpbmUgVlg4NTVfNjZfNzUwTSAgICAgMHgwMDcwMEMwMyAgICAvKjY3LjExNk1IeiAqLwotI2RlZmluZSBWWDg1NV82N18yOTVNICAgICAweDAwQkMwQzA1Ci0jZGVmaW5lIFZYODU1XzY4XzE3OU0gICAgIDB4MDBCRjBDMDUKLSNkZWZpbmUgVlg4NTVfNjhfMzY5TSAgICAgMHgwMEJGMEMwNQotI2RlZmluZSBWWDg1NV82OV85MjRNICAgICAweDAwQzMwQzA1Ci0jZGVmaW5lIFZYODU1XzcwXzE1OU0gICAgIDB4MDBDMzBDMDUKLSNkZWZpbmUgVlg4NTVfNzJfMDAwTSAgICAgMHgwMEExMEMwNAotI2RlZmluZSBWWDg1NV83M18wMjNNICAgICAweDAwQ0MwQzA1Ci0jZGVmaW5lIFZYODU1Xzc0XzQ4MU0gICAgIDB4MDBEMTBDMDUKLSNkZWZpbmUgVlg4NTVfNzhfNzUwTSAgICAgMHgwMDZFMDgwNQotI2RlZmluZSBWWDg1NV83OV80NjZNICAgICAweDAwNkYwODA1Ci0jZGVmaW5lIFZYODU1XzgwXzEzNk0gICAgIDB4MDA3MDA4MDUKLSNkZWZpbmUgVlg4NTVfODFfNjI3TSAgICAgMHgwMDcyMDgwNQotI2RlZmluZSBWWDg1NV84M18zNzVNICAgICAweDAwNzUwODA1Ci0jZGVmaW5lIFZYODU1XzgzXzUyN00gICAgIDB4MDA3NTA4MDUKLSNkZWZpbmUgVlg4NTVfODNfOTUwTSAgICAgMHgwMDc1MDgwNQotI2RlZmluZSBWWDg1NV84NF81MzdNICAgICAweDAwNzYwODA1Ci0jZGVmaW5lIFZYODU1Xzg0Xzc1ME0gICAgIDB4MDA3NjA4MDUgICAgIC8qIDg0LjUzN01oeiAqLwotI2RlZmluZSBWWDg1NV84NV81MDBNICAgICAweDAwNzYwODA1ICAgICAgICAvKiA4NS45MDkwODAgTUh6Ki8KLSNkZWZpbmUgVlg4NTVfODVfODYwTSAgICAgMHgwMDc2MDgwNQotI2RlZmluZSBWWDg1NV84NV85MDlNICAgICAweDAwNzYwODA1Ci0jZGVmaW5lIFZYODU1Xzg4Xzc1ME0gICAgIDB4MDA3QzA4MDUKLSNkZWZpbmUgVlg4NTVfODlfNDg5TSAgICAgMHgwMDdEMDgwNQotI2RlZmluZSBWWDg1NV85NF81MDBNICAgICAweDAwODQwODA1Ci0jZGVmaW5lIFZYODU1Xzk2XzY0OE0gICAgIDB4MDA4NzA4MDUKLSNkZWZpbmUgVlg4NTVfOTdfNzUwTSAgICAgMHgwMDg5MDgwNQotI2RlZmluZSBWWDg1NV8xMDFfMDAwTSAgICAweDAwOEQwODA1Ci0jZGVmaW5lIFZYODU1XzEwNl81MDBNICAgIDB4MDA5NTA4MDUKLSNkZWZpbmUgVlg4NTVfMTA4XzAwME0gICAgMHgwMDk3MDgwNQotI2RlZmluZSBWWDg1NV8xMTBfMTI1TSAgICAweDAwOTkwODA1Ci0jZGVmaW5lIFZYODU1XzExMl8wMDBNICAgIDB4MDA5RDA4MDUKLSNkZWZpbmUgVlg4NTVfMTEzXzMwOU0gICAgMHgwMDlGMDgwNQotI2RlZmluZSBWWDg1NV8xMTVfMDAwTSAgICAweDAwQTEwODA1Ci0jZGVmaW5lIFZYODU1XzExOF84NDBNICAgIDB4MDBBNjA4MDUKLSNkZWZpbmUgVlg4NTVfMTE5XzAwME0gICAgMHgwMEE3MDgwNQotI2RlZmluZSBWWDg1NV8xMjFfNzUwTSAgICAweDAwQUEwODA1ICAgICAgIC8qIDEyMS43MDRNSHogKi8KLSNkZWZpbmUgVlg4NTVfMTIyXzYxNE0gICAgMHgwMEFDMDgwNQotI2RlZmluZSBWWDg1NV8xMjZfMjY2TSAgICAweDAwQjEwODA1Ci0jZGVmaW5lIFZYODU1XzEzMF8yNTBNICAgIDB4MDBCNjA4MDUgICAgICAvKiAxMzAuMjUwICovCi0jZGVmaW5lIFZYODU1XzEzNV8wMDBNICAgIDB4MDBCRDA4MDUKLSNkZWZpbmUgVlg4NTVfMTM2XzcwME0gICAgMHgwMEJGMDgwNQotI2RlZmluZSBWWDg1NV8xMzdfNzUwTSAgICAweDAwQzEwODA1Ci0jZGVmaW5lIFZYODU1XzEzOF80MDBNICAgIDB4MDBDMjA4MDUKLSNkZWZpbmUgVlg4NTVfMTQ0XzMwME0gICAgMHgwMENBMDgwNQotI2RlZmluZSBWWDg1NV8xNDZfNzYwTSAgICAweDAwQ0UwODA1Ci0jZGVmaW5lIFZYODU1XzE0OF81MDBNCSAgMHgwMEQwMDgwNQotI2RlZmluZSBWWDg1NV8xNTNfOTIwTSAgICAweDAwNTQwNDAyCi0jZGVmaW5lIFZYODU1XzE1Nl8wMDBNICAgIDB4MDA2QzA0MDUKLSNkZWZpbmUgVlg4NTVfMTU2Xzg2N00gICAgMHgwMDZFMDQwNQotI2RlZmluZSBWWDg1NV8xNTdfNTAwTSAgICAweDAwNkUwNDA1Ci0jZGVmaW5lIFZYODU1XzE2Ml8wMDBNICAgIDB4MDA3MTA0MDUKLSNkZWZpbmUgVlg4NTVfMTcyXzc5OE0gICAgMHgwMDc5MDQwNQotI2RlZmluZSBWWDg1NV8xODdfMDAwTSAgICAweDAwODMwNDA1Ci0jZGVmaW5lIFZYODU1XzE5M18yOTVNICAgIDB4MDA4NzA0MDUKLSNkZWZpbmUgVlg4NTVfMjAyXzUwME0gICAgMHgwMDhFMDQwNQotI2RlZmluZSBWWDg1NV8yMDRfMDAwTSAgICAweDAwOEYwNDA1Ci0jZGVmaW5lIFZYODU1XzIxOF81MDBNICAgIDB4MDA5OTA0MDUKLSNkZWZpbmUgVlg4NTVfMjI5XzUwME0gICAgMHgwMEExMDQwNQotI2RlZmluZSBWWDg1NV8yMzRfMDAwTSAgICAweDAwQTQwNDA1Ci0jZGVmaW5lIFZYODU1XzI2N18yNTBNICAgIDB4MDBCQjA0MDUKLSNkZWZpbmUgVlg4NTVfMjk3XzUwME0gICAgMHgwMEQwMDQwNQotI2RlZmluZSBWWDg1NV8zMzlfNTAwTSAgICAweDAwNzcwMDA1Ci0jZGVmaW5lIFZYODU1XzM0MF83NzJNICAgIDB4MDA3NzAwMDUKLQogCiAvKiBEZWZpbml0aW9uIENSVEMgVGltaW5nIEluZGV4ICovCiAjZGVmaW5lIEhfVE9UQUxfSU5ERVggICAgICAgICAgICAgICAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWNvcmUuYwppbmRleCBlOGNmZTgzLi42NmY0MDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1jb3JlLmMKQEAgLTY0LDcgKzY0LDcgQEAKICAqLwogc3RhdGljIHUzMiB2aWFmYl9lbmFibGVkX2ludHM7CiAKLXN0YXRpYyB2b2lkIHZpYWZiX2ludF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdmlhZmJfaW50X2luaXQodm9pZCkKIHsKIAl2aWFmYl9lbmFibGVkX2ludHMgPSAwOwogCkBAIC00ODksNyArNDg5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlhX3BjaV90ZWFyZG93bl9tbWlvKHN0cnVjdCB2aWFmYl9kZXYgKnZkZXYpCitzdGF0aWMgdm9pZCB2aWFfcGNpX3RlYXJkb3duX21taW8oc3RydWN0IHZpYWZiX2RldiAqdmRldikKIHsKIAlpb3VubWFwKHZkZXYtPmZibWVtKTsKIAlpb3VubWFwKHZkZXYtPmVuZ2luZV9tbWlvKTsKQEAgLTU0OCw3ICs1NDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlhX3RlYXJkb3duX3N1YmRldnModm9pZCkKK3N0YXRpYyB2b2lkIHZpYV90ZWFyZG93bl9zdWJkZXZzKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTYxMywyMiArNjEzLDI0IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhX3BjaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfQ0xFMjY2X0RJRCksCiAJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfQ0xFMjY2IH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfUE04MDBfRElEKSwKLQkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9QTTgwMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0s0MDBfRElEKSwKIAkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9LNDAwIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfSzgwMF9ESUQpLAogCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0s4MDAgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9QNE04OTBfRElEKSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9QTTgwMF9ESUQpLAorCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX1BNODAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfQ043MDBfRElEKSwKIAkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9DTjcwMCB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0s4TTg5MF9ESUQpLAotCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0s4TTg5MCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX0NYNzAwX0RJRCksCiAJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfQ1g3MDAgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9QNE05MDBfRElEKSwKLQkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9QNE05MDAgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFVOSUNIUk9NRV9DTjc1MF9ESUQpLAogCSAgLmRyaXZlcl9kYXRhID0gVU5JQ0hST01FX0NONzUwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfSzhNODkwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfSzhNODkwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfUDRNODkwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfUDRNODkwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfUDRNOTAwX0RJRCksCisJICAuZHJpdmVyX2RhdGEgPSBVTklDSFJPTUVfUDRNOTAwIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBVTklDSFJPTUVfVlg4MDBfRElEKSwKIAkgIC5kcml2ZXJfZGF0YSA9IFVOSUNIUk9NRV9WWDgwMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgVU5JQ0hST01FX1ZYODU1X0RJRCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtZ3Bpby5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhLWdwaW8uYwppbmRleCA1OTU1MTZhLi4zOWFjYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWEtZ3Bpby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYS1ncGlvLmMKQEAgLTczLDcgKzczLDcgQEAKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKIAlzdHJ1Y3QgdmlhZmJfZGV2ICp2ZGV2OwogCXN0cnVjdCB2aWFmYl9ncGlvICphY3RpdmVfZ3Bpb3NbVklBRkJfTlVNX0dQSU9TXTsKLQljaGFyICpncGlvX25hbWVzW1ZJQUZCX05VTV9HUElPU107CisJY29uc3QgY2hhciAqZ3Bpb19uYW1lc1tWSUFGQl9OVU1fR1BJT1NdOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IDEwODI1NDEuLmJkZDBlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwpAQCAtNDksMTEgKzQ5LDYgQEAKIGNoYXIgKnZpYWZiX2xjZF9wb3J0ID0gIiI7CiBjaGFyICp2aWFmYl9kdmlfcG9ydCA9ICIiOwogCi1zdGF0aWMgdm9pZCB2aWFmYl9zZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2VfdCBhY3RpdmVfZGV2KTsKLXN0YXRpYyBpbnQgYXBwbHlfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcgc2V0dGluZ19pbmZvLAotCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkIGFwcGx5X3NlY29uZF9tb2RlX3NldHRpbmcoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvCi0JKnNlY192YXIpOwogc3RhdGljIHZvaWQgcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcKIAkqc2V0dGluZ19pbmZvKTsKIHN0YXRpYyBpbnQgdmlhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC0yMjEsOSArMjE2LDkgQEAKIAogCS8qIEFkanVzdCB2YXIgYWNjb3JkaW5nIHRvIG91ciBkcml2ZXIncyBvd24gdGFibGUgKi8KIAl2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyh2YXIsIHZpYWZiX3JlZnJlc2gsIHZtb2RlX2VudHJ5KTsKLQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQgJiYKKwlpZiAodmFyLT5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUICYmCiAJCSFwcGFyLT5zaGFyZWQtPnZkZXYtPmVuZ2luZV9tbWlvKQotCQlpbmZvLT52YXIuYWNjZWxfZmxhZ3MgPSAwOworCQl2YXItPmFjY2VsX2ZsYWdzID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMjM0LDYgKzIyOSw3IEBACiAJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV9lbnRyeSwgKnZtb2RlX2VudHJ5MSA9IE5VTEw7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0X3BhciFcbiIpOwogCisJdmlhZmJfdXBkYXRlX2ZpeChpbmZvKTsKIAl2aWFwYXItPmRlcHRoID0gZmJfZ2V0X2NvbG9yX2RlcHRoKCZpbmZvLT52YXIsICZpbmZvLT5maXgpOwogCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyh2aWFmYmluZm8tPnZhci54cmVzLCB2aWFmYmluZm8tPnZhci55cmVzLAogCQl2aWFmYmluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdmlhZmJfcmVmcmVzaCwgMCk7CkBAIC0yNTcsNyArMjUzLDYgQEAKIAl9CiAKIAlpZiAodm1vZGVfZW50cnkpIHsKLQkJdmlhZmJfdXBkYXRlX2ZpeChpbmZvKTsKIAkJaWYgKHZpYWZiX2R1YWxfZmIgJiYgdmlhcGFyLT5pZ2FfcGF0aCA9PSBJR0EyKQogCQkJdmlhZmJfYnBwMSA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKIAkJZWxzZQpAQCAtNDc4LDEzICs0NzMsNiBAQAogCQlpZiAoZ3B1MzIgJiBMQ0RfRGV2aWNlKQogCQkJdmlhZmJfbGNkX2Rpc2FibGUoKTsKIAkJYnJlYWs7Ci0JY2FzZSBWSUFGQl9TRVRfREVWSUNFOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJnUuYWN0aXZlX2RldiwgKHZvaWQgKilhcmdwLAotCQkJc2l6ZW9mKHUuYWN0aXZlX2RldikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXZpYWZiX3NldF9kZXZpY2UodS5hY3RpdmVfZGV2KTsKLQkJdmlhZmJfc2V0X3BhcihpbmZvKTsKLQkJYnJlYWs7CiAJY2FzZSBWSUFGQl9HRVRfREVWSUNFOgogCQl1LmFjdGl2ZV9kZXYuY3J0ID0gdmlhZmJfQ1JUX09OOwogCQl1LmFjdGl2ZV9kZXYuZHZpID0gdmlhZmJfRFZJX09OOwpAQCAtNTI3LDIxICs1MTUsNiBAQAogCiAJCWJyZWFrOwogCi0JY2FzZSBWSUFGQl9TRVRfREVWSUNFX0lORk86Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdS52aWFmYl9zZXR0aW5nLAotCQkJYXJncCwgc2l6ZW9mKHUudmlhZmJfc2V0dGluZykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChhcHBseV9kZXZpY2Vfc2V0dGluZyh1LnZpYWZiX3NldHRpbmcsIGluZm8pIDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWJyZWFrOwotCi0JY2FzZSBWSUFGQl9TRVRfU0VDT05EX01PREU6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdS5zZWNfdmFyLCBhcmdwLCBzaXplb2YodS5zZWNfdmFyKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZygmdS5zZWNfdmFyKTsKLQkJYnJlYWs7Ci0KIAljYXNlIFZJQUZCX0dFVF9ERVZJQ0VfSU5GTzoKIAogCQlyZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZygmdS52aWFmYl9zZXR0aW5nKTsKQEAgLTkxMywxMTIgKzg4Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGludCBkZXZpY2VfaWQpCi17Ci0JaW50IGRldmljZV9udW0gPSAwOwotCi0JLyogSW5pdGlhbGl6ZTogKi8KLQl2aWFmYl9DUlRfT04gPSBTVEFURV9PRkY7Ci0JdmlhZmJfRFZJX09OID0gU1RBVEVfT0ZGOwotCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09GRjsKLQl2aWFmYl9MQ0QyX09OID0gU1RBVEVfT0ZGOwotCXZpYWZiX0RldmljZVN0YXR1cyA9IE5vbmVfRGV2aWNlOwotCi0JaWYgKChkZXZpY2VfaWQgJiBDUlRfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKLQkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047Ci0JCWRldmljZV9udW0rKzsKLQkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IENSVF9EZXZpY2U7Ci0JfQotCi0JaWYgKChkZXZpY2VfaWQgJiBEVklfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKLQkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047Ci0JCWRldmljZV9udW0rKzsKLQkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IERWSV9EZXZpY2U7Ci0JfQotCi0JaWYgKChkZXZpY2VfaWQgJiBMQ0RfRGV2aWNlKSAmJiAoZGV2aWNlX251bSA8IE1BWF9BQ1RJVkVfREVWX05VTSkpIHsKLQkJdmlhZmJfTENEX09OID0gU1RBVEVfT047Ci0JCWRldmljZV9udW0rKzsKLQkJdmlhZmJfRGV2aWNlU3RhdHVzIHw9IExDRF9EZXZpY2U7Ci0JfQotCi0JaWYgKChkZXZpY2VfaWQgJiBMQ0QyX0RldmljZSkgJiYgKGRldmljZV9udW0gPCBNQVhfQUNUSVZFX0RFVl9OVU0pKSB7Ci0JCXZpYWZiX0xDRDJfT04gPSBTVEFURV9PTjsKLQkJZGV2aWNlX251bSsrOwotCQl2aWFmYl9EZXZpY2VTdGF0dXMgfD0gTENEMl9EZXZpY2U7Ci0JfQotCi0JaWYgKHZpYWZiX0RldmljZVN0YXR1cyA9PSBOb25lX0RldmljZSkgewotCQkvKiBVc2UgQ1JUIGFzIGRlZmF1bHQgYWN0aXZlIGRldmljZTogKi8KLQkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047Ci0JCXZpYWZiX0RldmljZVN0YXR1cyA9IENSVF9EZXZpY2U7Ci0JfQotCURFQlVHX01TRyhLRVJOX0lORk8gIkRldmljZSBTdGF0dXM6JXgiLCB2aWFmYl9EZXZpY2VTdGF0dXMpOwotfQotCi1zdGF0aWMgdm9pZCB2aWFmYl9zZXRfZGV2aWNlKHN0cnVjdCBkZXZpY2VfdCBhY3RpdmVfZGV2KQotewotCS8qIENoZWNrIGF2YWlsYWJsZSBkZXZpY2UgdG8gZW5hYmxlOiAqLwotCWludCBkZXZpY2VfaWQgPSBOb25lX0RldmljZTsKLQlpZiAoYWN0aXZlX2Rldi5jcnQpCi0JCWRldmljZV9pZCB8PSBDUlRfRGV2aWNlOwotCWlmIChhY3RpdmVfZGV2LmR2aSkKLQkJZGV2aWNlX2lkIHw9IERWSV9EZXZpY2U7Ci0JaWYgKGFjdGl2ZV9kZXYubGNkKQotCQlkZXZpY2VfaWQgfD0gTENEX0RldmljZTsKLQotCWNoZWNrX2F2YWlsYWJsZV9kZXZpY2VfdG9fZW5hYmxlKGRldmljZV9pZCk7Ci0KLQkvKiBDaGVjayBwcm9wZXJ0eSBvZiBMQ0Q6ICovCi0JaWYgKHZpYWZiX0xDRF9PTikgewotCQlpZiAoYWN0aXZlX2Rldi5sY2RfZHNwX2NlbnQpIHsKLQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9Ci0JCQkJdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfQ0VOVEVSSU5HOwotCQl9IGVsc2UgewotCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KLQkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9FWFBBTkRTSU9OOwotCQl9Ci0KLQkJaWYgKGFjdGl2ZV9kZXYubGNkX21vZGUgPT0gTENEX1NQV0cpIHsKLQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9Ci0JCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfU1BXRzsKLQkJfSBlbHNlIHsKLQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9Ci0JCQkJdmlhZmJfbGNkX21vZGUgPSBMQ0RfT1BFTkxESTsKLQkJfQotCi0JCWlmIChhY3RpdmVfZGV2LmxjZF9wYW5lbF9pZCA8PSBMQ0RfUEFORUxfSURfTUFYSU1VTSkgewotCQkJdmlhZmJfbGNkX3BhbmVsX2lkID0gYWN0aXZlX2Rldi5sY2RfcGFuZWxfaWQ7Ci0JCQl2aWFmYl9pbml0X2xjZF9zaXplKCk7Ci0JCX0KLQl9Ci0KLQkvKiBDaGVjayBwcm9wZXJ0eSBvZiBtb2RlOiAqLwotCWlmICghYWN0aXZlX2Rldi54cmVzMSkKLQkJdmlhZmJfc2Vjb25kX3hyZXMgPSA2NDA7Ci0JZWxzZQotCQl2aWFmYl9zZWNvbmRfeHJlcyA9IGFjdGl2ZV9kZXYueHJlczE7Ci0JaWYgKCFhY3RpdmVfZGV2LnlyZXMxKQotCQl2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKLQllbHNlCi0JCXZpYWZiX3NlY29uZF95cmVzID0gYWN0aXZlX2Rldi55cmVzMTsKLQlpZiAoYWN0aXZlX2Rldi5icHAgIT0gMCkKLQkJdmlhZmJfYnBwID0gYWN0aXZlX2Rldi5icHA7Ci0JaWYgKGFjdGl2ZV9kZXYuYnBwMSAhPSAwKQotCQl2aWFmYl9icHAxID0gYWN0aXZlX2Rldi5icHAxOwotCWlmIChhY3RpdmVfZGV2LnJlZnJlc2ggIT0gMCkKLQkJdmlhZmJfcmVmcmVzaCA9IGFjdGl2ZV9kZXYucmVmcmVzaDsKLQlpZiAoYWN0aXZlX2Rldi5yZWZyZXNoMSAhPSAwKQotCQl2aWFmYl9yZWZyZXNoMSA9IGFjdGl2ZV9kZXYucmVmcmVzaDE7Ci0JaWYgKChhY3RpdmVfZGV2LnNhbW0gPT0gU1RBVEVfT0ZGKSB8fCAoYWN0aXZlX2Rldi5zYW1tID09IFNUQVRFX09OKSkKLQkJdmlhZmJfU0FNTV9PTiA9IGFjdGl2ZV9kZXYuc2FtbTsKLQl2aWFmYl9wcmltYXJ5X2RldiA9IGFjdGl2ZV9kZXYucHJpbWFyeV9kZXY7Ci0KLQl2aWFfc2V0X3ByaW1hcnlfYWRkcmVzcygwKTsKLQl2aWFfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZpYWZiX1NBTU1fT04gPyB2aWFmYl9zZWNvbmRfb2Zmc2V0IDogMCk7Ci0JdmlhZmJfc2V0X2lnYV9wYXRoKCk7Ci19Ci0KIHN0YXRpYyBpbnQgZ2V0X3ByaW1hcnlfZGV2aWNlKHZvaWQpCiB7CiAJaW50IHByaW1hcnlfZGV2aWNlID0gMDsKQEAgLTEwNjAsMTI0ICs5MjcsNiBAQAogCXJldHVybiBwcmltYXJ5X2RldmljZTsKIH0KIAotc3RhdGljIHZvaWQgYXBwbHlfc2Vjb25kX21vZGVfc2V0dGluZyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8KLQkqc2VjX3ZhcikKLXsKLQl1MzIgaHRvdGFsLCB2dG90YWwsIGxvbmdfcmVmcmVzaDsKLQotCWh0b3RhbCA9IHNlY192YXItPnhyZXMgKyBzZWNfdmFyLT5sZWZ0X21hcmdpbiArCi0JCXNlY192YXItPnJpZ2h0X21hcmdpbiArIHNlY192YXItPmhzeW5jX2xlbjsKLQl2dG90YWwgPSBzZWNfdmFyLT55cmVzICsgc2VjX3Zhci0+dXBwZXJfbWFyZ2luICsKLQkJc2VjX3Zhci0+bG93ZXJfbWFyZ2luICsgc2VjX3Zhci0+dnN5bmNfbGVuOwotCWlmICgoc2VjX3Zhci0+eHJlc192aXJ0dWFsICogKHNlY192YXItPmJpdHNfcGVyX3BpeGVsID4+IDMpKSAmIDB4MUYpIHsKLQkJLypJcyAzMiBieXRlcyBhbGlnbm1lbnQ/ICovCi0JCS8qMzIgcGl4ZWwgYWxpZ25tZW50ICovCi0JCXNlY192YXItPnhyZXNfdmlydHVhbCA9IChzZWNfdmFyLT54cmVzX3ZpcnR1YWwgKyAzMSkgJiB+MzE7Ci0JfQotCi0JaHRvdGFsID0gc2VjX3Zhci0+eHJlcyArIHNlY192YXItPmxlZnRfbWFyZ2luICsKLQkJc2VjX3Zhci0+cmlnaHRfbWFyZ2luICsgc2VjX3Zhci0+aHN5bmNfbGVuOwotCXZ0b3RhbCA9IHNlY192YXItPnlyZXMgKyBzZWNfdmFyLT51cHBlcl9tYXJnaW4gKwotCQlzZWNfdmFyLT5sb3dlcl9tYXJnaW4gKyBzZWNfdmFyLT52c3luY19sZW47Ci0JbG9uZ19yZWZyZXNoID0gMTAwMDAwMDAwMFVMIC8gc2VjX3Zhci0+cGl4Y2xvY2sgKiAxMDAwOwotCWxvbmdfcmVmcmVzaCAvPSAoaHRvdGFsICogdnRvdGFsKTsKLQotCXZpYWZiX3NlY29uZF94cmVzID0gc2VjX3Zhci0+eHJlczsKLQl2aWFmYl9zZWNvbmRfeXJlcyA9IHNlY192YXItPnlyZXM7Ci0JdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHNlY192YXItPnhyZXNfdmlydHVhbDsKLQl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gc2VjX3Zhci0+eXJlc192aXJ0dWFsOwotCXZpYWZiX2JwcDEgPSBzZWNfdmFyLT5iaXRzX3Blcl9waXhlbDsKLQl2aWFmYl9yZWZyZXNoMSA9IHZpYWZiX2dldF9yZWZyZXNoKHNlY192YXItPnhyZXMsIHNlY192YXItPnlyZXMsCi0JCWxvbmdfcmVmcmVzaCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXBwbHlfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcgc2V0dGluZ19pbmZvLAotCXN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCWludCBuZWVkX3NldF9tb2RlID0gMDsKLQlERUJVR19NU0coS0VSTl9JTkZPICJhcHBseV9kZXZpY2Vfc2V0dGluZ1xuIik7Ci0KLQlpZiAoc2V0dGluZ19pbmZvLmRldmljZV9mbGFnKSB7Ci0JCW5lZWRfc2V0X21vZGUgPSAxOwotCQljaGVja19hdmFpbGFibGVfZGV2aWNlX3RvX2VuYWJsZShzZXR0aW5nX2luZm8uZGV2aWNlX3N0YXR1cyk7Ci0JfQotCi0JLyogVW5sb2NrIExDRCdzIG9wZXJhdGlvbiBhY2NvcmRpbmcgdG8gTENEIGZsYWcKLQkgICBhbmQgY2hlY2sgaWYgdGhlIHNldHRpbmcgdmFsdWUgaXMgdmFsaWQuICovCi0JLyogSWYgdGhlIHZhbHVlIGlzIHZhbGlkLCBhcHBseSB0aGUgbmV3IHNldHRpbmcgdmFsdWUgdG8gdGhlIGRldmljZS4gKi8KLQlpZiAodmlhZmJfTENEX09OKSB7Ci0JCWlmIChzZXR0aW5nX2luZm8ubGNkX29wZXJhdGlvbl9mbGFnICYgT1BfTENEX0NFTlRFUklORykgewotCQkJbmVlZF9zZXRfbW9kZSA9IDE7Ci0JCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLmRpc3BsYXlfY2VudGVyKSB7Ci0JCQkJLyogQ2VudGVyaW5nICovCi0JCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRpc3BsYXlfbWV0aG9kID0KLQkJCQkgICAgTENEX0NFTlRFUklORzsKLQkJCQl2aWFmYl9sY2RfZHNwX21ldGhvZCA9IExDRF9DRU5URVJJTkc7Ci0JCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9Ci0JCQkJICAgIHZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0NFTlRFUklORzsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogZXhwYW5kc2lvbiAqLwotCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kaXNwbGF5X21ldGhvZCA9Ci0JCQkJICAgIExDRF9FWFBBTkRTSU9OOwotCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047Ci0JCQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5kaXNwbGF5X21ldGhvZCA9Ci0JCQkJICAgIExDRF9FWFBBTkRTSU9OOwotCQkJCXZpYWZiX2xjZF9kc3BfbWV0aG9kID0gTENEX0VYUEFORFNJT047Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9NT0RFKSB7Ci0JCQluZWVkX3NldF9tb2RlID0gMTsKLQkJCWlmIChzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMubGNkX21vZGUgPT0KLQkJCQlMQ0RfU1BXRykgewotCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9Ci0JCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX1NQV0c7Ci0JCQl9IGVsc2UgewotCQkJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfbW9kZSA9Ci0JCQkJCXZpYWZiX2xjZF9tb2RlID0gTENEX09QRU5MREk7Ci0JCQl9Ci0JCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9tb2RlID0KLQkJCSAgICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX21vZGU7Ci0JCX0KLQotCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9vcGVyYXRpb25fZmxhZyAmIE9QX0xDRF9QQU5FTF9JRCkgewotCQkJbmVlZF9zZXRfbW9kZSA9IDE7Ci0JCQlpZiAoc2V0dGluZ19pbmZvLmxjZF9hdHRyaWJ1dGVzLnBhbmVsX2lkIDw9Ci0JCQkgICAgTENEX1BBTkVMX0lEX01BWElNVU0pIHsKLQkJCQl2aWFmYl9sY2RfcGFuZWxfaWQgPQotCQkJCSAgICBzZXR0aW5nX2luZm8ubGNkX2F0dHJpYnV0ZXMucGFuZWxfaWQ7Ci0JCQkJdmlhZmJfaW5pdF9sY2Rfc2l6ZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKDAgIT0gKHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyAmIE9QX1NBTU0pKSB7Ci0JCXNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9Ci0JCSAgICBzZXR0aW5nX2luZm8uc2FtbV9zdGF0dXMgJiAofk9QX1NBTU0pOwotCQlpZiAoc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzID09IDAKLQkJICAgIHx8IHNldHRpbmdfaW5mby5zYW1tX3N0YXR1cyA9PSAxKSB7Ci0JCQl2aWFmYl9TQU1NX09OID0gc2V0dGluZ19pbmZvLnNhbW1fc3RhdHVzOwotCi0JCQlpZiAodmlhZmJfU0FNTV9PTikKLQkJCQl2aWFmYl9wcmltYXJ5X2RldiA9IHNldHRpbmdfaW5mby5wcmltYXJ5X2RldmljZTsKLQotCQkJdmlhX3NldF9wcmltYXJ5X2FkZHJlc3MoMCk7Ci0JCQl2aWFfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZpYWZiX1NBTU1fT04gPwotCQkJCXZpYWZiX3NlY29uZF9vZmZzZXQgOiAwKTsKLQkJCXZpYWZiX3NldF9pZ2FfcGF0aCgpOwotCQl9Ci0JCW5lZWRfc2V0X21vZGUgPSAxOwotCX0KLQotCWlmICghbmVlZF9zZXRfbW9kZSkgewotCQk7Ci0JfSBlbHNlIHsKLQkJdmlhZmJfc2V0X2lnYV9wYXRoKCk7Ci0JCXZpYWZiX3NldF9wYXIoaW5mbyk7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCByZXRyaWV2ZV9kZXZpY2Vfc2V0dGluZyhzdHJ1Y3QgdmlhZmJfaW9jdGxfc2V0dGluZwogCSpzZXR0aW5nX2luZm8pCiB7CkBAIC0xNzc2LDEwICsxNTI1LDYgQEAKIAlwYXJzZV9sY2RfcG9ydCgpOwogCXBhcnNlX2R2aV9wb3J0KCk7CiAKLQkvKiBmb3IgZHVhbC1mYiBtdXN0IHZpYWZiX1NBTU1fT049MSBhbmQgdmlhZmJfZHVhbF9mYj0xICovCi0JaWYgKCF2aWFmYl9TQU1NX09OKQotCQl2aWFmYl9kdWFsX2ZiID0gMDsKLQogCXZpYWZiX2luaXRfY2hpcF9pbmZvKHZkZXYtPmNoaXBfdHlwZSk7CiAJLyoKIAkgKiBUaGUgZnJhbWVidWZmZXIgd2lsbCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IG1hcHBlZCBieQpAQCAtMTgyMywzMCArMTU2OCwxMyBAQAogCQlwYXJzZV9tb2RlKHZpYWZiX21vZGUxLCAmdmlhZmJfc2Vjb25kX3hyZXMsCiAJCQkmdmlhZmJfc2Vjb25kX3lyZXMpOwogCi0JCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMpIHsKLQkJCXN3aXRjaCAodmlhZmJfc2Vjb25kX3hyZXMpIHsKLQkJCWNhc2UgMTQwMDoKLQkJCQl2aWFmYl9zZWNvbmRfdmlydHVhbF94cmVzID0gMTQwODsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlcyA9IHZpYWZiX3NlY29uZF94cmVzOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgwID09IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXMpCi0JCQl2aWFmYl9zZWNvbmRfdmlydHVhbF95cmVzID0gdmlhZmJfc2Vjb25kX3lyZXM7CisJCXZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXMgPSB2aWFmYl9zZWNvbmRfeHJlczsKKwkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlcyA9IHZpYWZiX3NlY29uZF95cmVzOwogCX0KIAogCWRlZmF1bHRfdmFyLnhyZXMgPSBkZWZhdWx0X3hyZXM7CiAJZGVmYXVsdF92YXIueXJlcyA9IGRlZmF1bHRfeXJlczsKLQlzd2l0Y2ggKGRlZmF1bHRfeHJlcykgewotCWNhc2UgMTQwMDoKLQkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gMTQwODsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gZGVmYXVsdF94cmVzOwotCQlicmVhazsKLQl9CisJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gZGVmYXVsdF94cmVzOwogCWRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA9IGRlZmF1bHRfeXJlczsKIAlkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9IHZpYWZiX2JwcDsKIAlkZWZhdWx0X3Zhci5waXhjbG9jayA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwppbmRleCBlNjZiOGIxLi5kOGIxMmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKQEAgLTg1OCw5ICs4NTgsOSBAQAogdm9pZCB3MTAwZmJfZ3Bpb193cml0ZShpbnQgcG9ydCwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlpZiAocG9ydD09VzEwMF9HUElPX1BPUlRfQSkKLQkJdmFsdWUgPSB3cml0ZWwodmFsdWUsIHJlbWFwcGVkX3JlZ3MgKyBtbUdQSU9fREFUQSk7CisJCXdyaXRlbCh2YWx1ZSwgcmVtYXBwZWRfcmVncyArIG1tR1BJT19EQVRBKTsKIAllbHNlCi0JCXZhbHVlID0gd3JpdGVsKHZhbHVlLCByZW1hcHBlZF9yZWdzICsgbW1HUElPX0RBVEEyKTsKKwkJd3JpdGVsKHZhbHVlLCByZW1hcHBlZF9yZWdzICsgbW1HUElPX0RBVEEyKTsKIH0KIEVYUE9SVF9TWU1CT0wodzEwMGZiX2dwaW9fcmVhZCk7CiBFWFBPUlRfU1lNQk9MKHcxMDBmYl9ncGlvX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCBiMDRiMTg0Li40ZDI5OTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC03Myw2ICs3MywxMyBAQAogCiAjIEFSTSBBcmNoaXRlY3R1cmUKIAorY29uZmlnIEFSTV9TUDgwNV9XQVRDSERPRworCXRyaXN0YXRlICJBUk0gU1A4MDUgV2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBBUk1fQU1CQQorCWhlbHAKKwkgIEFSTSBQcmltZWNlbGwgU1A4MDUgV2F0Y2hkb2cgdGltZXIuIFRoaXMgd2lsbCByZWJvb3QgeW91ciBzeXN0ZW0gd2hlbgorCSAgdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC4KKwogY29uZmlnIEFUOTFSTTkyMDBfV0FUQ0hET0cKIAl0cmlzdGF0ZSAiQVQ5MVJNOTIwMCB3YXRjaGRvZyIKIAlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVJNOTIwMApAQCAtNDAxLDYgKzQwOCwxNyBAQAogCiAJICBNb3N0IHBlb3BsZSB3aWxsIHNheSBOLgogCitjb25maWcgRjcxODA4RV9XRFQKKwl0cmlzdGF0ZSAiRmludGVrIEY3MTgwOEUgYW5kIEY3MTg4MkZHIFdhdGNoZG9nIgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIG9uIHRoZSBGaW50ZWsKKwkgIEY3MTgwOEUgYW5kIEY3MTg4MkZHIFN1cGVyIEkvTyBjb250cm9sbGVycy4KKworCSAgWW91IGNhbiBjb21waWxlIHRoaXMgZHJpdmVyIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCwgb3IgdXNlCisJICBpdCBhcyBhIG1vZHVsZS4gIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZjcxODA4ZV93ZHQuCisKKwogY29uZmlnIEdFT0RFX1dEVAogCXRyaXN0YXRlICJBTUQgR2VvZGUgQ1M1NTM1L0NTNTUzNiBXYXRjaGRvZyIKIAlkZXBlbmRzIG9uIENTNTUzNV9NRkdQVApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggZTMwMjg5YS4uODM3NDUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC0yNSw2ICsyNSw3IEBACiAjIEFMUEhBIEFyY2hpdGVjdHVyZQogCiAjIEFSTSBBcmNoaXRlY3R1cmUKK29iai0kKENPTkZJR19BUk1fU1A4MDVfV0FUQ0hET0cpICs9IHNwODA1X3dkdC5vCiBvYmotJChDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRykgKz0gYXQ5MXJtOTIwMF93ZHQubwogb2JqLSQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPRykgKz0gYXQ5MXNhbTlfd2R0Lm8KIG9iai0kKENPTkZJR19PTUFQX1dBVENIRE9HKSArPSBvbWFwX3dkdC5vCkBAIC02Niw2ICs2Nyw3IEBACiBvYmotJChDT05GSUdfQURWQU5URUNIX1dEVCkgKz0gYWR2YW50ZWNod2R0Lm8KIG9iai0kKENPTkZJR19BTElNMTUzNV9XRFQpICs9IGFsaW0xNTM1X3dkdC5vCiBvYmotJChDT05GSUdfQUxJTTcxMDFfV0RUKSArPSBhbGltNzEwMV93ZHQubworb2JqLSQoQ09ORklHX0Y3MTgwOEVfV0RUKSArPSBmNzE4MDhlX3dkdC5vCiBvYmotJChDT05GSUdfR0VPREVfV0RUKSArPSBnZW9kZXdkdC5vCiBvYmotJChDT05GSUdfU0M1MjBfV0RUKSArPSBzYzUyMF93ZHQubwogb2JqLSQoQ09ORklHX1NCQ19GSVRQQzJfV0FUQ0hET0cpICs9IHNiY19maXRwYzJfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZjcxODA4ZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZjcxODA4ZV93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTVjMjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9mNzE4MDhlX3dkdC5jCkBAIC0wLDAgKzEsNzY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNiBieSBIYW5zIEVkZ2luZ3RvbiA8aGFuc0BlZGdpbmd0b24ubmw+ICAgICAgICAgICAgICAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+ICAgICAgICAgICAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxMCBHaWVsIHZhbiBTY2hpam5kZWwgPG1lQG1vcnRpcy5ldT4gICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorCisjZGVmaW5lIERSVk5BTUUgImY3MTgwOGVfd2R0IgorCisjZGVmaW5lIFNJT19GNzE4MDhGR19MRF9XRFQJMHgwNwkvKiBXYXRjaGRvZyB0aW1lciBsb2dpY2FsIGRldmljZSAqLworI2RlZmluZSBTSU9fVU5MT0NLX0tFWQkJMHg4NwkvKiBLZXkgdG8gZW5hYmxlIFN1cGVyLUkvTyAqLworI2RlZmluZSBTSU9fTE9DS19LRVkJCTB4QUEJLyogS2V5IHRvIGRpYXNibGUgU3VwZXItSS9PICovCisKKyNkZWZpbmUgU0lPX1JFR19MRFNFTAkJMHgwNwkvKiBMb2dpY2FsIGRldmljZSBzZWxlY3QgKi8KKyNkZWZpbmUgU0lPX1JFR19ERVZJRAkJMHgyMAkvKiBEZXZpY2UgSUQgKDIgYnl0ZXMpICovCisjZGVmaW5lIFNJT19SRUdfREVWUkVWCQkweDIyCS8qIERldmljZSByZXZpc2lvbiAqLworI2RlZmluZSBTSU9fUkVHX01BTklECQkweDIzCS8qIEZpbnRlayBJRCAoMiBieXRlcykgKi8KKyNkZWZpbmUgU0lPX1JFR19FTkFCTEUJCTB4MzAJLyogTG9naWNhbCBkZXZpY2UgZW5hYmxlICovCisjZGVmaW5lIFNJT19SRUdfQUREUgkJMHg2MAkvKiBMb2dpY2FsIGRldmljZSBhZGRyZXNzICgyIGJ5dGVzKSAqLworCisjZGVmaW5lIFNJT19GSU5URUtfSUQJCTB4MTkzNAkvKiBNYW51ZmFjdHVyZXJzIElEICovCisjZGVmaW5lIFNJT19GNzE4MDhfSUQJCTB4MDkwMSAgLyogQ2hpcHNldCBJRCAqLworI2RlZmluZSBTSU9fRjcxODU4X0lECQkweDA1MDcgIC8qIENoaXBzZXQgSUQgKi8KKyNkZWZpbmUgU0lPX0Y3MTg2Ml9JRAkJMHgwNjAxCS8qIENoaXBzZXQgSUQgKi8KKyNkZWZpbmUgU0lPX0Y3MTg4Ml9JRAkJMHgwNTQxCS8qIENoaXBzZXQgSUQgKi8KKyNkZWZpbmUgU0lPX0Y3MTg4OV9JRAkJMHgwNzIzCS8qIENoaXBzZXQgSUQgKi8KKworI2RlZmluZQlGNzE4ODJGR19SRUdfU1RBUlQJCTB4MDEKKworI2RlZmluZSBGNzE4MDhGR19SRUdfV0RPX0NPTkYJCTB4ZjAKKyNkZWZpbmUgRjcxODA4RkdfUkVHX1dEVF9DT05GCQkweGY1CisjZGVmaW5lIEY3MTgwOEZHX1JFR19XRF9USU1FCQkweGY2CisKKyNkZWZpbmUgRjcxODA4RkdfRkxBR19XRE9VVF9FTgkJNworCisjZGVmaW5lIEY3MTgwOEZHX0ZMQUdfV0RUTU9VVF9TVFMJNQorI2RlZmluZSBGNzE4MDhGR19GTEFHX1dEX0VOCQk1CisjZGVmaW5lIEY3MTgwOEZHX0ZMQUdfV0RfUFVMU0UJCTQKKyNkZWZpbmUgRjcxODA4RkdfRkxBR19XRF9VTklUCQkzCisKKy8qIERlZmF1bHQgdmFsdWVzICovCisjZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQJNjAJLyogMSBtaW51dGUgZGVmYXVsdCB0aW1lb3V0ICovCisjZGVmaW5lIFdBVENIRE9HX01BWF9USU1FT1VUCSg2MCAqIDI1NSkKKyNkZWZpbmUgV0FUQ0hET0dfUFVMU0VfV0lEVEgJMTI1CS8qIDEyNSBtcywgZGVmYXVsdCBwdWxzZSB3aWR0aCBmb3IKKwkJCQkJICAgd2F0Y2hkb2cgc2lnbmFsICovCisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBmb3JjZV9pZDsKK21vZHVsZV9wYXJhbShmb3JjZV9pZCwgdXNob3J0LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2VfaWQsICJPdmVycmlkZSB0aGUgZGV0ZWN0ZWQgZGV2aWNlIElEIik7CisKK3N0YXRpYyBjb25zdCBpbnQgbWF4X3RpbWVvdXQgPSBXQVRDSERPR19NQVhfVElNRU9VVDsKK3N0YXRpYyBpbnQgdGltZW91dCA9IDYwOwkvKiBkZWZhdWx0IHRpbWVvdXQgaW4gc2Vjb25kcyAqLworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsCisJIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcy4gMTw9IHRpbWVvdXQgPD0iCisJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTUFYX1RJTUVPVVQpICIgKGRlZmF1bHQ9IgorCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIpIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHVsc2Vfd2lkdGggPSBXQVRDSERPR19QVUxTRV9XSURUSDsKK21vZHVsZV9wYXJhbShwdWxzZV93aWR0aCwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHB1bHNlX3dpZHRoLAorCSJXYXRjaGRvZyBzaWduYWwgcHVsc2Ugd2lkdGguIDAoPWxldmVsKSwgMSBtcywgMjUgbXMsIDEyNSBtcyBvciA1MDAwIG1zIgorCQkJIiAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19QVUxTRV9XSURUSCkgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBib29sLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJEaXNhYmxlIHdhdGNoZG9nIHNodXRkb3duIG9uIGNsb3NlIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnRfd2l0aHRpbWVvdXQ7Cittb2R1bGVfcGFyYW0oc3RhcnRfd2l0aHRpbWVvdXQsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhzdGFydF93aXRodGltZW91dCwgIlN0YXJ0IHdhdGNoZG9nIHRpbWVyIG9uIG1vZHVsZSBsb2FkIHdpdGgiCisJIiBnaXZlbiBpbml0aWFsIHRpbWVvdXQuIFplcm8gKGRlZmF1bHQpIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4iKTsKKworZW51bSBjaGlwcyB7IGY3MTgwOGZnLCBmNzE4NThmZywgZjcxODYyZmcsIGY3MTg4MmZnLCBmNzE4ODlmZyB9OworCitzdGF0aWMgY29uc3QgY2hhciAqZjcxODA4ZV9uYW1lc1tdID0geworCSJmNzE4MDhmZyIsCisJImY3MTg1OGZnIiwKKwkiZjcxODYyZmciLAorCSJmNzE4ODJmZyIsCisJImY3MTg4OWZnIiwKK307CisKKy8qIFN1cGVyLUkvTyBGdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2luYihpbnQgYmFzZSwgaW50IHJlZyk7CitzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2ludyhpbnQgYmFzZSwgaW50IHJlZyk7CitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19vdXRiKGludCBiYXNlLCBpbnQgcmVnLCB1OCB2YWwpOworc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fc2V0X2JpdChpbnQgYmFzZSwgaW50IHJlZywgaW50IGJpdCk7CitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19jbGVhcl9iaXQoaW50IGJhc2UsIGludCByZWcsIGludCBiaXQpOworc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19lbnRlcihpbnQgYmFzZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19zZWxlY3QoaW50IGJhc2UsIGludCBsZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19leGl0KGludCBiYXNlKTsKKworc3RydWN0IHdhdGNoZG9nX2RhdGEgeworCXVuc2lnbmVkIHNob3J0CXNpb2FkZHI7CisJZW51bSBjaGlwcwl0eXBlOworCXVuc2lnbmVkIGxvbmcJb3BlbmVkOworCXN0cnVjdCBtdXRleAlsb2NrOworCWNoYXIJCWV4cGVjdF9jbG9zZTsKKwlzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudDsKKworCXVuc2lnbmVkIHNob3J0CXRpbWVvdXQ7CisJdTgJCXRpbWVyX3ZhbDsJLyogY29udGVudCBmb3IgdGhlIHdkX3RpbWUgcmVnaXN0ZXIgKi8KKwljaGFyCQltaW51dGVzX21vZGU7CisJdTgJCXB1bHNlX3ZhbDsJLyogcHVsc2Ugd2lkdGggZmxhZyAqLworCWNoYXIJCXB1bHNlX21vZGU7CS8qIGVuYWJsZSBwdWxzZSBvdXRwdXQgbW9kZT8gKi8KKwljaGFyCQljYXVzZWRfcmVib290OwkvKiBsYXN0IHJlYm9vdCB3YXMgYnkgdGhlIHdhdGNoZG9nICovCit9OworCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2RhdGEgd2F0Y2hkb2cgPSB7CisJLmxvY2sgPSBfX01VVEVYX0lOSVRJQUxJWkVSKHdhdGNoZG9nLmxvY2spLAorfTsKKworLyogU3VwZXIgSS9PIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19pbmIoaW50IGJhc2UsIGludCByZWcpCit7CisJb3V0YihyZWcsIGJhc2UpOworCXJldHVybiBpbmIoYmFzZSArIDEpOworfQorCitzdGF0aWMgaW50IHN1cGVyaW9faW53KGludCBiYXNlLCBpbnQgcmVnKQoreworCWludCB2YWw7CisJdmFsICA9IHN1cGVyaW9faW5iKGJhc2UsIHJlZykgPDwgODsKKwl2YWwgfD0gc3VwZXJpb19pbmIoYmFzZSwgcmVnICsgMSk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0YihpbnQgYmFzZSwgaW50IHJlZywgdTggdmFsKQoreworCW91dGIocmVnLCBiYXNlKTsKKwlvdXRiKHZhbCwgYmFzZSArIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19zZXRfYml0KGludCBiYXNlLCBpbnQgcmVnLCBpbnQgYml0KQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gc3VwZXJpb19pbmIoYmFzZSwgcmVnKTsKKwlfX3NldF9iaXQoYml0LCAmdmFsKTsKKwlzdXBlcmlvX291dGIoYmFzZSwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19jbGVhcl9iaXQoaW50IGJhc2UsIGludCByZWcsIGludCBiaXQpCit7CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzdXBlcmlvX2luYihiYXNlLCByZWcpOworCV9fY2xlYXJfYml0KGJpdCwgJnZhbCk7CisJc3VwZXJpb19vdXRiKGJhc2UsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3VwZXJpb19lbnRlcihpbnQgYmFzZSkKK3sKKwkvKiBEb24ndCBzdGVwIG9uIG90aGVyIGRyaXZlcnMnIEkvTyBzcGFjZSBieSBhY2NpZGVudCAqLworCWlmICghcmVxdWVzdF9tdXhlZF9yZWdpb24oYmFzZSwgMiwgRFJWTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogSS9PIGFkZHJlc3MgMHglMDR4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkJCShpbnQpYmFzZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJLyogYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQgdGhlIGtleSBtdXN0IGJlIHNlbmQgdHdpY2UhICovCisJb3V0YihTSU9fVU5MT0NLX0tFWSwgYmFzZSk7CisJb3V0YihTSU9fVU5MT0NLX0tFWSwgYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fc2VsZWN0KGludCBiYXNlLCBpbnQgbGQpCit7CisJb3V0YihTSU9fUkVHX0xEU0VMLCBiYXNlKTsKKwlvdXRiKGxkLCBiYXNlICsgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX2V4aXQoaW50IGJhc2UpCit7CisJb3V0YihTSU9fTE9DS19LRVksIGJhc2UpOworCXJlbGVhc2VfcmVnaW9uKGJhc2UsIDIpOworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX3NldF90aW1lb3V0KGludCB0aW1lb3V0KQoreworCWlmICh0aW1lb3V0IDw9IDAKKwkgfHwgdGltZW91dCA+ICBtYXhfdGltZW91dCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRSAiOiB3YXRjaGRvZyB0aW1lb3V0IG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJndhdGNoZG9nLmxvY2spOworCisJd2F0Y2hkb2cudGltZW91dCA9IHRpbWVvdXQ7CisJaWYgKHRpbWVvdXQgPiAweGZmKSB7CisJCXdhdGNoZG9nLnRpbWVyX3ZhbCA9IERJVl9ST1VORF9VUCh0aW1lb3V0LCA2MCk7CisJCXdhdGNoZG9nLm1pbnV0ZXNfbW9kZSA9IHRydWU7CisJfSBlbHNlIHsKKwkJd2F0Y2hkb2cudGltZXJfdmFsID0gdGltZW91dDsKKwkJd2F0Y2hkb2cubWludXRlc19tb2RlID0gZmFsc2U7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX3NldF9wdWxzZV93aWR0aCh1bnNpZ25lZCBpbnQgcHcpCit7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKworCWlmICAgICAgICAocHcgPD0gICAgMSkgeworCQl3YXRjaGRvZy5wdWxzZV92YWwgPSAwOworCX0gZWxzZSBpZiAocHcgPD0gICAyNSkgeworCQl3YXRjaGRvZy5wdWxzZV92YWwgPSAxOworCX0gZWxzZSBpZiAocHcgPD0gIDEyNSkgeworCQl3YXRjaGRvZy5wdWxzZV92YWwgPSAyOworCX0gZWxzZSBpZiAocHcgPD0gNTAwMCkgeworCQl3YXRjaGRvZy5wdWxzZV92YWwgPSAzOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IHB1bHNlIHdpZHRoIG91dCBvZiByYW5nZVxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdF91bmxvY2s7CisJfQorCisJd2F0Y2hkb2cucHVsc2VfbW9kZSA9IHB3OworCitleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJndhdGNoZG9nLmxvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfa2VlcGFsaXZlKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKwllcnIgPSBzdXBlcmlvX2VudGVyKHdhdGNoZG9nLnNpb2FkZHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF91bmxvY2s7CisJc3VwZXJpb19zZWxlY3Qod2F0Y2hkb2cuc2lvYWRkciwgU0lPX0Y3MTgwOEZHX0xEX1dEVCk7CisKKwlpZiAod2F0Y2hkb2cubWludXRlc19tb2RlKQorCQkvKiBzZWxlY3QgbWludXRlcyBmb3IgdGltZXIgdW5pdHMgKi8KKwkJc3VwZXJpb19zZXRfYml0KHdhdGNoZG9nLnNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRFRfQ09ORiwKKwkJCQlGNzE4MDhGR19GTEFHX1dEX1VOSVQpOworCWVsc2UKKwkJLyogc2VsZWN0IHNlY29uZHMgZm9yIHRpbWVyIHVuaXRzICovCisJCXN1cGVyaW9fY2xlYXJfYml0KHdhdGNoZG9nLnNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRFRfQ09ORiwKKwkJCQlGNzE4MDhGR19GTEFHX1dEX1VOSVQpOworCisJLyogU2V0IHRpbWVyIHZhbHVlICovCisJc3VwZXJpb19vdXRiKHdhdGNoZG9nLnNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRF9USU1FLAorCQkJICAgd2F0Y2hkb2cudGltZXJfdmFsKTsKKworCXN1cGVyaW9fZXhpdCh3YXRjaGRvZy5zaW9hZGRyKTsKKworZXhpdF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX3N0YXJ0KHZvaWQpCit7CisJLyogTWFrZSBzdXJlIHdlIGRvbid0IGRpZSBhcyBzb29uIGFzIHRoZSB3YXRjaGRvZyBpcyBlbmFibGVkIGJlbG93ICovCisJaW50IGVyciA9IHdhdGNoZG9nX2tlZXBhbGl2ZSgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltdXRleF9sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKwllcnIgPSBzdXBlcmlvX2VudGVyKHdhdGNoZG9nLnNpb2FkZHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF91bmxvY2s7CisJc3VwZXJpb19zZWxlY3Qod2F0Y2hkb2cuc2lvYWRkciwgU0lPX0Y3MTgwOEZHX0xEX1dEVCk7CisKKwkvKiBXYXRjaGRvZyBwaW4gY29uZmlndXJhdGlvbiAqLworCXN3aXRjaCAod2F0Y2hkb2cudHlwZSkgeworCWNhc2UgZjcxODA4Zmc6CisJCS8qIFNldCBwaW4gMjEgdG8gR1BJTzIzL1dEVFJTVCMsIHRoZW4gdG8gV0RUUlNUIyAqLworCQlzdXBlcmlvX2NsZWFyX2JpdCh3YXRjaGRvZy5zaW9hZGRyLCAweDJhLCAzKTsKKwkJc3VwZXJpb19jbGVhcl9iaXQod2F0Y2hkb2cuc2lvYWRkciwgMHgyYiwgMyk7CisJCWJyZWFrOworCisJY2FzZSBmNzE4ODJmZzoKKwkJLyogU2V0IHBpbiA1NiB0byBXRFRSU1QjICovCisJCXN1cGVyaW9fc2V0X2JpdCh3YXRjaGRvZy5zaW9hZGRyLCAweDI5LCAxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKgorCQkgKiAnZGVmYXVsdCcgbGFiZWwgdG8gc2h1dCB1cCB0aGUgY29tcGlsZXIgYW5kIGNhdGNoCisJCSAqIHByb2dyYW1tZXIgZXJyb3JzCisJCSAqLworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXRfc3VwZXJpbzsKKwl9CisKKwlzdXBlcmlvX3NlbGVjdCh3YXRjaGRvZy5zaW9hZGRyLCBTSU9fRjcxODA4RkdfTERfV0RUKTsKKwlzdXBlcmlvX3NldF9iaXQod2F0Y2hkb2cuc2lvYWRkciwgU0lPX1JFR19FTkFCTEUsIDApOworCXN1cGVyaW9fc2V0X2JpdCh3YXRjaGRvZy5zaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RPX0NPTkYsCisJCQlGNzE4MDhGR19GTEFHX1dET1VUX0VOKTsKKworCXN1cGVyaW9fc2V0X2JpdCh3YXRjaGRvZy5zaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RUX0NPTkYsCisJCQlGNzE4MDhGR19GTEFHX1dEX0VOKTsKKworCWlmICh3YXRjaGRvZy5wdWxzZV9tb2RlKSB7CisJCS8qIFNlbGVjdCAicHVsc2UiIG91dHB1dCBtb2RlIHdpdGggZ2l2ZW4gZHVyYXRpb24gKi8KKwkJdTggd2R0X2NvbmYgPSBzdXBlcmlvX2luYih3YXRjaGRvZy5zaW9hZGRyLAorCQkJCUY3MTgwOEZHX1JFR19XRFRfQ09ORik7CisKKwkJLyogU2V0IFdEX1BTV0lEVEggYml0cyAoMTowKSAqLworCQl3ZHRfY29uZiA9ICh3ZHRfY29uZiAmIDB4ZmMpIHwgKHdhdGNoZG9nLnB1bHNlX3ZhbCAmIDB4MDMpOworCQkvKiBTZXQgV0RfUFVMU0UgdG8gInB1bHNlIiBtb2RlICovCisJCXdkdF9jb25mIHw9IEJJVChGNzE4MDhGR19GTEFHX1dEX1BVTFNFKTsKKworCQlzdXBlcmlvX291dGIod2F0Y2hkb2cuc2lvYWRkciwgRjcxODA4RkdfUkVHX1dEVF9DT05GLAorCQkJCXdkdF9jb25mKTsKKwl9IGVsc2UgeworCQkvKiBTZWxlY3QgImxldmVsIiBvdXRwdXQgbW9kZSAqLworCQlzdXBlcmlvX2NsZWFyX2JpdCh3YXRjaGRvZy5zaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RUX0NPTkYsCisJCQkJRjcxODA4RkdfRkxBR19XRF9QVUxTRSk7CisJfQorCitleGl0X3N1cGVyaW86CisJc3VwZXJpb19leGl0KHdhdGNoZG9nLnNpb2FkZHIpOworZXhpdF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfc3RvcCh2b2lkKQoreworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmd2F0Y2hkb2cubG9jayk7CisJZXJyID0gc3VwZXJpb19lbnRlcih3YXRjaGRvZy5zaW9hZGRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfdW5sb2NrOworCXN1cGVyaW9fc2VsZWN0KHdhdGNoZG9nLnNpb2FkZHIsIFNJT19GNzE4MDhGR19MRF9XRFQpOworCisJc3VwZXJpb19jbGVhcl9iaXQod2F0Y2hkb2cuc2lvYWRkciwgRjcxODA4RkdfUkVHX1dEVF9DT05GLAorCQkJRjcxODA4RkdfRkxBR19XRF9FTik7CisKKwlzdXBlcmlvX2V4aXQod2F0Y2hkb2cuc2lvYWRkcik7CisKK2V4aXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2F0Y2hkb2cubG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX2dldF9zdGF0dXModm9pZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCW11dGV4X2xvY2soJndhdGNoZG9nLmxvY2spOworCXN0YXR1cyA9ICh3YXRjaGRvZy5jYXVzZWRfcmVib290KSA/IFdESU9GX0NBUkRSRVNFVCA6IDA7CisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBib29sIHdhdGNoZG9nX2lzX3J1bm5pbmcodm9pZCkKK3sKKwkvKgorCSAqIGlmIHdlIGZhaWwgdG8gZGV0ZXJtaW5lIHRoZSB3YXRjaGRvZydzIHN0YXR1cyBhc3N1bWUgaXQgdG8gYmUKKwkgKiBydW5uaW5nIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUKKwkgKi8KKwlib29sIGlzX3J1bm5pbmcgPSB0cnVlOworCisJbXV0ZXhfbG9jaygmd2F0Y2hkb2cubG9jayk7CisJaWYgKHN1cGVyaW9fZW50ZXIod2F0Y2hkb2cuc2lvYWRkcikpCisJCWdvdG8gZXhpdF91bmxvY2s7CisJc3VwZXJpb19zZWxlY3Qod2F0Y2hkb2cuc2lvYWRkciwgU0lPX0Y3MTgwOEZHX0xEX1dEVCk7CisKKwlpc19ydW5uaW5nID0gKHN1cGVyaW9faW5iKHdhdGNoZG9nLnNpb2FkZHIsIFNJT19SRUdfRU5BQkxFKSAmIEJJVCgwKSkKKwkJJiYgKHN1cGVyaW9faW5iKHdhdGNoZG9nLnNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRFRfQ09ORikKKwkJCSYgRjcxODA4RkdfRkxBR19XRF9FTik7CisKKwlzdXBlcmlvX2V4aXQod2F0Y2hkb2cuc2lvYWRkcik7CisKK2V4aXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2F0Y2hkb2cubG9jayk7CisJcmV0dXJuIGlzX3J1bm5pbmc7Cit9CisKKy8qIC9kZXYvd2F0Y2hkb2cgYXBpICovCisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZXJyOworCisJLyogSWYgdGhlIHdhdGNoZG9nIGlzIGFsaXZlIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgaXQgYWdhaW4gKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmd2F0Y2hkb2cub3BlbmVkKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IHdhdGNoZG9nX3N0YXJ0KCk7CisJaWYgKGVycikgeworCQljbGVhcl9iaXQoMCwgJndhdGNoZG9nLm9wZW5lZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG5vd2F5b3V0KQorCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOworCisJd2F0Y2hkb2cuZXhwZWN0X2Nsb3NlID0gMDsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljbGVhcl9iaXQoMCwgJndhdGNoZG9nLm9wZW5lZCk7CisKKwlpZiAoIXdhdGNoZG9nLmV4cGVjdF9jbG9zZSkgeworCQl3YXRjaGRvZ19rZWVwYWxpdmUoKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBEUlZOQU1FCisJCQkiOiBVbmV4cGVjdGVkIGNsb3NlLCBub3Qgc3RvcHBpbmcgd2F0Y2hkb2chXG4iKTsKKwl9IGVsc2UgaWYgKCFub3dheW91dCkgeworCQl3YXRjaGRvZ19zdG9wKCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogICAgICB3YXRjaGRvZ193cml0ZToKKyAqICAgICAgQGZpbGU6IGZpbGUgaGFuZGxlIHRvIHRoZSB3YXRjaGRvZworICogICAgICBAYnVmOiBidWZmZXIgdG8gd3JpdGUKKyAqICAgICAgQGNvdW50OiBjb3VudCBvZiBieXRlcworICogICAgICBAcHBvczogcG9pbnRlciB0byB0aGUgcG9zaXRpb24gdG8gd3JpdGUuIE5vIHNlZWtzIGFsbG93ZWQKKyAqCisgKiAgICAgIEEgd3JpdGUgdG8gYSB3YXRjaGRvZyBkZXZpY2UgaXMgZGVmaW5lZCBhcyBhIGtlZXBhbGl2ZSBzaWduYWwuIEFueQorICogICAgICB3cml0ZSBvZiBkYXRhIHdpbGwgZG8sIGFzIHdlIHdlIGRvbid0IGRlZmluZSBjb250ZW50IG1lYW5pbmcuCisgKi8KKworc3RhdGljIHNzaXplX3Qgd2F0Y2hkb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGNvdW50KSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKiBJbiBjYXNlIGl0IHdhcyBzZXQgbG9uZyBhZ28gKi8KKwkJCWJvb2wgZXhwZWN0X2Nsb3NlID0gZmFsc2U7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gY291bnQ7IGkrKykgeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmICsgaSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWV4cGVjdF9jbG9zZSA9IChjID09ICdWJyk7CisJCQl9CisKKwkJCS8qIFByb3Blcmx5IG9yZGVyIHdyaXRlcyBhY3Jvc3MgZm9yaygpZWQgcHJvY2Vzc2VzICovCisJCQltdXRleF9sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKwkJCXdhdGNoZG9nLmV4cGVjdF9jbG9zZSA9IGV4cGVjdF9jbG9zZTsKKwkJCW11dGV4X3VubG9jaygmd2F0Y2hkb2cubG9jayk7CisJCX0KKworCQkvKiBzb21lb25lIHdyb3RlIHRvIHVzLCB3ZSBzaG91bGQgcmVzdGFydCB0aW1lciAqLworCQl3YXRjaGRvZ19rZWVwYWxpdmUoKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogICAgICB3YXRjaGRvZ19pb2N0bDoKKyAqICAgICAgQGlub2RlOiBpbm9kZSBvZiB0aGUgZGV2aWNlCisgKiAgICAgIEBmaWxlOiBmaWxlIGhhbmRsZSB0byB0aGUgZGV2aWNlCisgKiAgICAgIEBjbWQ6IHdhdGNoZG9nIGNvbW1hbmQKKyAqICAgICAgQGFyZzogYXJndW1lbnQgcG9pbnRlcgorICoKKyAqICAgICAgVGhlIHdhdGNoZG9nIEFQSSBkZWZpbmVzIGEgY29tbW9uIHNldCBvZiBmdW5jdGlvbnMgZm9yIGFsbCB3YXRjaGRvZ3MKKyAqICAgICAgYWNjb3JkaW5nIHRvIHRoZWlyIGF2YWlsYWJsZSBmZWF0dXJlcy4KKyAqLworc3RhdGljIGxvbmcgd2F0Y2hkb2dfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHN0YXR1czsKKwlpbnQgbmV3X29wdGlvbnM7CisJaW50IG5ld190aW1lb3V0OworCXVuaW9uIHsKKwkJc3RydWN0IHdhdGNoZG9nX2luZm8gX191c2VyICppZGVudDsKKwkJaW50IF9fdXNlciAqaTsKKwl9IHVhcmc7CisKKwl1YXJnLmkgPSAoaW50IF9fdXNlciAqKWFyZzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlyZXR1cm4gY29weV90b191c2VyKHVhcmcuaWRlbnQsICZ3YXRjaGRvZy5pZGVudCwKKwkJCXNpemVvZih3YXRjaGRvZy5pZGVudCkpID8gLUVGQVVMVCA6IDA7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJc3RhdHVzID0gd2F0Y2hkb2dfZ2V0X3N0YXR1cygpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJCXJldHVybiBwdXRfdXNlcihzdGF0dXMsIHVhcmcuaSk7CisKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldHVybiBwdXRfdXNlcigwLCB1YXJnLmkpOworCisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQlpZiAoZ2V0X3VzZXIobmV3X29wdGlvbnMsIHVhcmcuaSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19ESVNBQkxFQ0FSRCkKKwkJCXdhdGNoZG9nX3N0b3AoKTsKKworCQlpZiAobmV3X29wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKQorCQkJcmV0dXJuIHdhdGNoZG9nX3N0YXJ0KCk7CisKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQl3YXRjaGRvZ19rZWVwYWxpdmUoKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCWlmIChnZXRfdXNlcihuZXdfdGltZW91dCwgdWFyZy5pKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmICh3YXRjaGRvZ19zZXRfdGltZW91dChuZXdfdGltZW91dCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl3YXRjaGRvZ19rZWVwYWxpdmUoKTsKKwkJLyogRmFsbCAqLworCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXR1cm4gcHV0X3VzZXIod2F0Y2hkb2cudGltZW91dCwgdWFyZy5pKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCisJfQorfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJdm9pZCAqdW51c2VkKQoreworCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCisJCXdhdGNoZG9nX3N0b3AoKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhdGNoZG9nX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS5vcGVuCQk9IHdhdGNoZG9nX29wZW4sCisJLnJlbGVhc2UJPSB3YXRjaGRvZ19yZWxlYXNlLAorCS53cml0ZQkJPSB3YXRjaGRvZ193cml0ZSwKKwkudW5sb2NrZWRfaW9jdGwJPSB3YXRjaGRvZ19pb2N0bCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB3YXRjaGRvZ19taXNjZGV2ID0geworCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQkJPSAid2F0Y2hkb2ciLAorCS5mb3BzCQk9ICZ3YXRjaGRvZ19mb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3YXRjaGRvZ19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdhdGNoZG9nX25vdGlmeV9zeXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KGludCBzaW9hZGRyKQoreworCWludCB3ZHRfY29uZiwgZXJyID0gMDsKKworCS8qIE5vIG5lZWQgdG8gbG9jayB3YXRjaGRvZy5sb2NrIGhlcmUgYmVjYXVzZSBubyBlbnRyeSBwb2ludHMKKwkgKiBpbnRvIHRoZSBtb2R1bGUgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgeWV0LgorCSAqLworCXdhdGNoZG9nLnNpb2FkZHIgPSBzaW9hZGRyOworCXdhdGNoZG9nLmlkZW50Lm9wdGlvbnMgPSBXRElPQ19TRVRUSU1FT1VUCisJCQkJfCBXRElPRl9NQUdJQ0NMT1NFCisJCQkJfCBXRElPRl9LRUVQQUxJVkVQSU5HOworCisJc25wcmludGYod2F0Y2hkb2cuaWRlbnQuaWRlbnRpdHksCisJCXNpemVvZih3YXRjaGRvZy5pZGVudC5pZGVudGl0eSksICIlcyB3YXRjaGRvZyIsCisJCWY3MTgwOGVfbmFtZXNbd2F0Y2hkb2cudHlwZV0pOworCisJZXJyID0gc3VwZXJpb19lbnRlcihzaW9hZGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXN1cGVyaW9fc2VsZWN0KHdhdGNoZG9nLnNpb2FkZHIsIFNJT19GNzE4MDhGR19MRF9XRFQpOworCisJd2R0X2NvbmYgPSBzdXBlcmlvX2luYihzaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RUX0NPTkYpOworCXdhdGNoZG9nLmNhdXNlZF9yZWJvb3QgPSB3ZHRfY29uZiAmIEY3MTgwOEZHX0ZMQUdfV0RUTU9VVF9TVFM7CisKKwlzdXBlcmlvX2V4aXQoc2lvYWRkcik7CisKKwllcnIgPSB3YXRjaGRvZ19zZXRfdGltZW91dCh0aW1lb3V0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHdhdGNoZG9nX3NldF9wdWxzZV93aWR0aChwdWxzZV93aWR0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2F0Y2hkb2dfbm90aWZpZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBtaXNjX3JlZ2lzdGVyKCZ3YXRjaGRvZ19taXNjZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FCisJCQkiOiBjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZFxuIiwKKwkJCQl3YXRjaGRvZ19taXNjZGV2Lm1pbm9yKTsKKwkJZ290byBleGl0X3JlYm9vdDsKKwl9CisKKwlpZiAoc3RhcnRfd2l0aHRpbWVvdXQpIHsKKwkJaWYgKHN0YXJ0X3dpdGh0aW1lb3V0IDw9IDAKKwkJIHx8IHN0YXJ0X3dpdGh0aW1lb3V0ID4gIG1heF90aW1lb3V0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgRFJWTkFNRQorCQkJCSI6IHN0YXJ0aW5nIHRpbWVvdXQgb3V0IG9mIHJhbmdlXG4iKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIGV4aXRfbWlzY2RldjsKKwkJfQorCisJCWVyciA9IHdhdGNoZG9nX3N0YXJ0KCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FCisJCQkJIjogY2Fubm90IHN0YXJ0IHdhdGNoZG9nIHRpbWVyXG4iKTsKKwkJCWdvdG8gZXhpdF9taXNjZGV2OworCQl9CisKKwkJbXV0ZXhfbG9jaygmd2F0Y2hkb2cubG9jayk7CisJCWVyciA9IHN1cGVyaW9fZW50ZXIoc2lvYWRkcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGV4aXRfdW5sb2NrOworCQlzdXBlcmlvX3NlbGVjdCh3YXRjaGRvZy5zaW9hZGRyLCBTSU9fRjcxODA4RkdfTERfV0RUKTsKKworCQlpZiAoc3RhcnRfd2l0aHRpbWVvdXQgPiAweGZmKSB7CisJCQkvKiBzZWxlY3QgbWludXRlcyBmb3IgdGltZXIgdW5pdHMgKi8KKwkJCXN1cGVyaW9fc2V0X2JpdChzaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RUX0NPTkYsCisJCQkJRjcxODA4RkdfRkxBR19XRF9VTklUKTsKKwkJCXN1cGVyaW9fb3V0YihzaW9hZGRyLCBGNzE4MDhGR19SRUdfV0RfVElNRSwKKwkJCQlESVZfUk9VTkRfVVAoc3RhcnRfd2l0aHRpbWVvdXQsIDYwKSk7CisJCX0gZWxzZSB7CisJCQkvKiBzZWxlY3Qgc2Vjb25kcyBmb3IgdGltZXIgdW5pdHMgKi8KKwkJCXN1cGVyaW9fY2xlYXJfYml0KHNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRFRfQ09ORiwKKwkJCQlGNzE4MDhGR19GTEFHX1dEX1VOSVQpOworCQkJc3VwZXJpb19vdXRiKHNpb2FkZHIsIEY3MTgwOEZHX1JFR19XRF9USU1FLAorCQkJCXN0YXJ0X3dpdGh0aW1lb3V0KTsKKwkJfQorCisJCXN1cGVyaW9fZXhpdChzaW9hZGRyKTsKKwkJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZy5sb2NrKTsKKworCQlpZiAobm93YXlvdXQpCisJCQlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOworCisJCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRQorCQkJIjogd2F0Y2hkb2cgc3RhcnRlZCB3aXRoIGluaXRpYWwgdGltZW91dCBvZiAldSBzZWNcbiIsCisJCQlzdGFydF93aXRodGltZW91dCk7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2F0Y2hkb2cubG9jayk7CitleGl0X21pc2NkZXY6CisJbWlzY19kZXJlZ2lzdGVyKCZ3YXRjaGRvZ19taXNjZGV2KTsKK2V4aXRfcmVib290OgorCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3YXRjaGRvZ19ub3RpZmllcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmNzE4MDhlX2ZpbmQoaW50IHNpb2FkZHIpCit7CisJdTE2IGRldmlkOworCWludCBlcnIgPSBzdXBlcmlvX2VudGVyKHNpb2FkZHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlkZXZpZCA9IHN1cGVyaW9faW53KHNpb2FkZHIsIFNJT19SRUdfTUFOSUQpOworCWlmIChkZXZpZCAhPSBTSU9fRklOVEVLX0lEKSB7CisJCXByX2RlYnVnKERSVk5BTUUgIjogTm90IGEgRmludGVrIGRldmljZVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXZpZCA9IGZvcmNlX2lkID8gZm9yY2VfaWQgOiBzdXBlcmlvX2ludyhzaW9hZGRyLCBTSU9fUkVHX0RFVklEKTsKKwlzd2l0Y2ggKGRldmlkKSB7CisJY2FzZSBTSU9fRjcxODA4X0lEOgorCQl3YXRjaGRvZy50eXBlID0gZjcxODA4Zmc7CisJCWJyZWFrOworCWNhc2UgU0lPX0Y3MTg4Ml9JRDoKKwkJd2F0Y2hkb2cudHlwZSA9IGY3MTg4MmZnOworCQlicmVhazsKKwljYXNlIFNJT19GNzE4NjJfSUQ6CisJY2FzZSBTSU9fRjcxODg5X0lEOgorCQkvKiBUaGVzZSBoYXZlIGEgd2F0Y2hkb2csIHRob3VnaCBpdCBpc24ndCBpbXBsZW1lbnRlZCAoeWV0KS4gKi8KKwkJZXJyID0gLUVOT1NZUzsKKwkJZ290byBleGl0OworCWNhc2UgU0lPX0Y3MTg1OF9JRDoKKwkJLyogQ29uZmlybWVkIChieSBkYXRhc2hlZXQpIG5vdCB0byBoYXZlIGEgd2F0Y2hkb2cuICovCisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPIERSVk5BTUUgIjogVW5yZWNvZ25pemVkIEZpbnRlayBkZXZpY2U6ICUwNHhcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KWRldmlkKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBGb3VuZCAlcyB3YXRjaGRvZyBjaGlwLCByZXZpc2lvbiAlZFxuIiwKKwkJZjcxODA4ZV9uYW1lc1t3YXRjaGRvZy50eXBlXSwKKwkJKGludClzdXBlcmlvX2luYihzaW9hZGRyLCBTSU9fUkVHX0RFVlJFVikpOworZXhpdDoKKwlzdXBlcmlvX2V4aXQoc2lvYWRkcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgZjcxODA4ZV9pbml0KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7IDB4MmUsIDB4NGUgfTsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkZHJzKTsgaSsrKSB7CisJCWVyciA9IGY3MTgwOGVfZmluZChhZGRyc1tpXSk7CisJCWlmIChlcnIgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGFkZHJzKSkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiB3YXRjaGRvZ19pbml0KGFkZHJzW2ldKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGY3MTgwOGVfZXhpdCh2b2lkKQoreworCWlmICh3YXRjaGRvZ19pc19ydW5uaW5nKCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FCisJCQkiOiBXYXRjaGRvZyB0aW1lciBzdGlsbCBydW5uaW5nLCBzdG9wcGluZyBpdFxuIik7CisJCXdhdGNoZG9nX3N0b3AoKTsKKwl9CisJbWlzY19kZXJlZ2lzdGVyKCZ3YXRjaGRvZ19taXNjZGV2KTsKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2F0Y2hkb2dfbm90aWZpZXIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIkY3MTgwOEUgV2F0Y2hkb2cgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJHaWVsIHZhbiBTY2hpam5kZWwgPG1lQG1vcnRpcy5ldT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoZjcxODA4ZV9pbml0KTsKK21vZHVsZV9leGl0KGY3MTgwOGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKaW5kZXggODA5ZTcxNi4uZmQzMTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwpAQCAtMjQ2LDggKzI0Niw4IEBACiAJCQlwaHlzaWNhbF9iaW9zX29mZnNldCk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJocHdkdDogQ1JVIExlbmd0aDogICAgICAgICAweCVseFxuIiwKIAkJCWNydV9sZW5ndGgpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiaHB3ZHQ6IENSVSBNYXBwZWQgQWRkcmVzczogMHgleFxuIiwKLQkJCSh1bnNpZ25lZCBpbnQpJmNydV9yb21fYWRkcik7CisJCXByaW50ayhLRVJOX0RFQlVHICJocHdkdDogQ1JVIE1hcHBlZCBBZGRyZXNzOiAlcFxuIiwKKwkJCSZjcnVfcm9tX2FkZHIpOwogCX0KIAlpb3VubWFwKGJpb3MzMl9tYXApOwogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggMzAwOTMyNS4uYWU1MzY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zM2MyNDEwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtNTMyLDIxICs1MzIsMjIgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgczNjMjQxMHdkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCW1pc2NfZGVyZWdpc3RlcigmczNjMjQxMHdkdF9taXNjZGV2KTsKKwogCXMzYzI0MTB3ZHRfY3B1ZnJlcV9kZXJlZ2lzdGVyKCk7CiAKLQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwotCWtmcmVlKHdkdF9tZW0pOwotCXdkdF9tZW0gPSBOVUxMOwotCi0JZnJlZV9pcnEod2R0X2lycS0+c3RhcnQsIGRldik7Ci0Jd2R0X2lycSA9IE5VTEw7Ci0KIAljbGtfZGlzYWJsZSh3ZHRfY2xvY2spOwogCWNsa19wdXQod2R0X2Nsb2NrKTsKIAl3ZHRfY2xvY2sgPSBOVUxMOwogCisJZnJlZV9pcnEod2R0X2lycS0+c3RhcnQsIGRldik7CisJd2R0X2lycSA9IE5VTEw7CisKIAlpb3VubWFwKHdkdF9iYXNlKTsKLQltaXNjX2RlcmVnaXN0ZXIoJnMzYzI0MTB3ZHRfbWlzY2Rldik7CisKKwlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOworCWtmcmVlKHdkdF9tZW0pOworCXdkdF9tZW0gPSBOVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NjaDMxMXhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjaDMxMXhfd2R0LmMKaW5kZXggOWM0MGY0OC4uMDQ2MTg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zY2gzMTF4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYwpAQCAtNDI1LDYgKzQyNSw4IEBACiAJdmFsID0gdGhlcm1fdHJpcCA/IDB4MDYgOiAweDA0OwogCW91dGIodmFsLCBzY2gzMTF4X3dkdF9kYXRhLnJ1bnRpbWVfcmVnICsgUkVTR0VOKTsKIAorCXNjaDMxMXhfd2R0X21pc2NkZXYucGFyZW50ID0gZGV2OworCiAJZXJyID0gbWlzY19yZWdpc3Rlcigmc2NoMzExeF93ZHRfbWlzY2Rldik7CiAJaWYgKGVyciAhPSAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCkBAIC00MzIsOCArNDM0LDYgQEAKIAkJZ290byBleGl0X3JlbGVhc2VfcmVnaW9uMzsKIAl9CiAKLQlzY2gzMTF4X3dkdF9taXNjZGV2LnBhcmVudCA9IGRldjsKLQogCWRldl9pbmZvKGRldiwKIAkJIlNNU0MgU0NIMzExeCBXRFQgaW5pdGlhbGl6ZWQuIHRpbWVvdXQ9JWQgc2VjIChub3dheW91dD0lZClcbiIsCiAJCXRpbWVvdXQsIG5vd2F5b3V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc3A4MDVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NwODA1X3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjdlZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NwODA1X3dkdC5jCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NwODA1LXdkdC5jCisgKgorICogV2F0Y2hkb2cgZHJpdmVyIGZvciBBUk0gU1A4MDUgd2F0Y2hkb2cgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNUIE1pY3JvZWxlY3Ryb25pY3MKKyAqIFZpcmVzaCBLdW1hcjx2aXJlc2gua3VtYXJAc3QuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIgb3IgbGF0ZXIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisKKy8qIGRlZmF1bHQgdGltZW91dCBpbiBzZWNvbmRzICovCisjZGVmaW5lIERFRkFVTFRfVElNRU9VVAkJNjAKKworI2RlZmluZSBNT0RVTEVfTkFNRQkJInNwODA1LXdkdCIKKworLyogd2F0Y2hkb2cgcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgbWFza3MgKi8KKyNkZWZpbmUgV0RUTE9BRAkJCTB4MDAwCisJI2RlZmluZSBMT0FEX01JTgkweDAwMDAwMDAxCisJI2RlZmluZSBMT0FEX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFdEVFZBTFVFCQkweDAwNAorI2RlZmluZSBXRFRDT05UUk9MCQkweDAwOAorCS8qIGNvbnRyb2wgcmVnaXN0ZXIgbWFza3MgKi8KKwkjZGVmaW5lCUlOVF9FTkFCTEUJKDEgPDwgMCkKKwkjZGVmaW5lCVJFU0VUX0VOQUJMRQkoMSA8PCAxKQorI2RlZmluZSBXRFRJTlRDTFIJCTB4MDBDCisjZGVmaW5lIFdEVFJJUwkJCTB4MDEwCisjZGVmaW5lIFdEVE1JUwkJCTB4MDE0CisJI2RlZmluZSBJTlRfTUFTSwkoMSA8PCAwKQorI2RlZmluZSBXRFRMT0NLCQkJMHhDMDAKKwkjZGVmaW5lCVVOTE9DSwkJMHgxQUNDRTU1MQorCSNkZWZpbmUJTE9DSwkJMHgwMDAwMDAwMQorCisvKioKKyAqIHN0cnVjdCBzcDgwNV93ZHQ6IHNwODA1IHdkdCBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogbG9jazogc3BpbiBsb2NrIHByb3RlY3RpbmcgZGV2IHN0cnVjdHVyZSBhbmQgaW8gYWNjZXNzCisgKiBiYXNlOiBiYXNlIGFkZHJlc3Mgb2Ygd2R0CisgKiBjbGs6IGNsb2NrIHN0cnVjdHVyZSBvZiB3ZHQKKyAqIGRldjogYW1iYSBkZXZpY2Ugc3RydWN0dXJlIG9mIHdkdAorICogc3RhdHVzOiBjdXJyZW50IHN0YXR1cyBvZiB3ZHQKKyAqIGxvYWRfdmFsOiBsb2FkIHZhbHVlIHRvIGJlIHNldCBmb3IgY3VycmVudCB0aW1lb3V0CisgKiB0aW1lb3V0OiBjdXJyZW50IHByb2dyYW1tZWQgdGltZW91dAorICovCitzdHJ1Y3Qgc3A4MDVfd2R0IHsKKwlzcGlubG9ja190CQkJbG9jazsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlzdHJ1Y3QgY2xrCQkJKmNsazsKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UJCSphZGV2OworCXVuc2lnbmVkIGxvbmcJCQlzdGF0dXM7CisJI2RlZmluZSBXRFRfQlVTWQkJMAorCSNkZWZpbmUgV0RUX0NBTl9CRV9DTE9TRUQJMQorCXVuc2lnbmVkIGludAkJCWxvYWRfdmFsOworCXVuc2lnbmVkIGludAkJCXRpbWVvdXQ7Cit9OworCisvKiBsb2NhbCB2YXJpYWJsZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3A4MDVfd2R0ICp3ZHQ7CitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CisKKy8qIFRoaXMgcm91dGluZSBmaW5kcyBsb2FkIHZhbHVlIHRoYXQgd2lsbCByZXNldCBzeXN0ZW0gaW4gcmVxdWlyZWQgdGltb3V0ICovCitzdGF0aWMgdm9pZCB3ZHRfc2V0bG9hZCh1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKwl1NjQgbG9hZCwgcmF0ZTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUod2R0LT5jbGspOworCisJLyoKKwkgKiBzcDgwNSBydW5zIGNvdW50ZXIgd2l0aCBnaXZlbiB2YWx1ZSB0d2ljZSwgYWZ0ZXIgdGhlIGVuZCBvZiBmaXJzdAorCSAqIGNvdW50ZXIgaXQgZ2l2ZXMgYW4gaW50ZXJydXB0IGFuZCB0aGVuIHN0YXJ0cyBjb3VudGVyIGFnYWluLiBJZgorCSAqIGludGVycnVwdCBhbHJlYWR5IG9jY3VyZWQgdGhlbiBpdCByZXNldHMgdGhlIHN5c3RlbS4gVGhpcyBpcyB3aHkKKwkgKiBsb2FkIGlzIGhhbGYgb2Ygd2hhdCBzaG91bGQgYmUgcmVxdWlyZWQuCisJICovCisJbG9hZCA9IGRpdl91NjQocmF0ZSwgMikgKiB0aW1lb3V0IC0gMTsKKworCWxvYWQgPSAobG9hZCA+IExPQURfTUFYKSA/IExPQURfTUFYIDogbG9hZDsKKwlsb2FkID0gKGxvYWQgPCBMT0FEX01JTikgPyBMT0FEX01JTiA6IGxvYWQ7CisKKwlzcGluX2xvY2soJndkdC0+bG9jayk7CisJd2R0LT5sb2FkX3ZhbCA9IGxvYWQ7CisJLyogcm91bmR1cCB0aW1lb3V0IHRvIGNsb3Nlc3QgcG9zaXRpdmUgaW50ZWdlciB2YWx1ZSAqLworCXdkdC0+dGltZW91dCA9IGRpdl91NjQoKGxvYWQgKyAxKSAqIDIgKyAocmF0ZSAvIDIpLCByYXRlKTsKKwlzcGluX3VubG9jaygmd2R0LT5sb2NrKTsKK30KKworLyogcmV0dXJucyBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IGZvciByZXNldCB0byBvY2N1ciAqLworc3RhdGljIHUzMiB3ZHRfdGltZWxlZnQodm9pZCkKK3sKKwl1NjQgbG9hZCwgcmF0ZTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUod2R0LT5jbGspOworCisJc3Bpbl9sb2NrKCZ3ZHQtPmxvY2spOworCWxvYWQgPSByZWFkbCh3ZHQtPmJhc2UgKyBXRFRWQUxVRSk7CisKKwkvKklmIHRoZSBpbnRlcnJ1cHQgaXMgaW5hY3RpdmUgdGhlbiB0aW1lIGxlZnQgaXMgV0RUVmFsdWUgKyBXRFRMb2FkLiAqLworCWlmICghKHJlYWRsKHdkdC0+YmFzZSArIFdEVFJJUykgJiBJTlRfTUFTSykpCisJCWxvYWQgKz0gd2R0LT5sb2FkX3ZhbCArIDE7CisJc3Bpbl91bmxvY2soJndkdC0+bG9jayk7CisKKwlyZXR1cm4gZGl2X3U2NChsb2FkLCByYXRlKTsKK30KKworLyogZW5hYmxlcyB3YXRjaGRvZyB0aW1lcnMgcmVzZXQgKi8KK3N0YXRpYyB2b2lkIHdkdF9lbmFibGUodm9pZCkKK3sKKwlzcGluX2xvY2soJndkdC0+bG9jayk7CisKKwl3cml0ZWwoVU5MT0NLLCB3ZHQtPmJhc2UgKyBXRFRMT0NLKTsKKwl3cml0ZWwod2R0LT5sb2FkX3ZhbCwgd2R0LT5iYXNlICsgV0RUTE9BRCk7CisJd3JpdGVsKElOVF9NQVNLLCB3ZHQtPmJhc2UgKyBXRFRJTlRDTFIpOworCXdyaXRlbChJTlRfRU5BQkxFIHwgUkVTRVRfRU5BQkxFLCB3ZHQtPmJhc2UgKyBXRFRDT05UUk9MKTsKKwl3cml0ZWwoTE9DSywgd2R0LT5iYXNlICsgV0RUTE9DSyk7CisKKwlzcGluX3VubG9jaygmd2R0LT5sb2NrKTsKK30KKworLyogZGlzYWJsZXMgd2F0Y2hkb2cgdGltZXJzIHJlc2V0ICovCitzdGF0aWMgdm9pZCB3ZHRfZGlzYWJsZSh2b2lkKQoreworCXNwaW5fbG9jaygmd2R0LT5sb2NrKTsKKworCXdyaXRlbChVTkxPQ0ssIHdkdC0+YmFzZSArIFdEVExPQ0spOworCXdyaXRlbCgwLCB3ZHQtPmJhc2UgKyBXRFRDT05UUk9MKTsKKwl3cml0ZWwoMCwgd2R0LT5iYXNlICsgV0RUTE9BRCk7CisJd3JpdGVsKExPQ0ssIHdkdC0+YmFzZSArIFdEVExPQ0spOworCisJc3Bpbl91bmxvY2soJndkdC0+bG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNwODA1X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKKwkJc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWlmIChsZW4pIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCWNsZWFyX2JpdChXRFRfQ0FOX0JFX0NMT1NFRCwgJndkdC0+c3RhdHVzKTsKKworCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworCQkJCWNoYXIgYzsKKworCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCS8qIENoZWNrIGZvciBNYWdpYyBDbG9zZSBjaGFyYWN0ZXIgKi8KKwkJCQlpZiAoYyA9PSAnVicpIHsKKwkJCQkJc2V0X2JpdChXRFRfQ0FOX0JFX0NMT1NFRCwKKwkJCQkJCQkmd2R0LT5zdGF0dXMpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJd2R0X2VuYWJsZSgpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJLm9wdGlvbnMgPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCisJLmlkZW50aXR5ID0gTU9EVUxFX05BTUUsCit9OworCitzdGF0aWMgbG9uZyBzcDgwNV93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAtRU5PVFRZOworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IHdhdGNoZG9nX2luZm8gKilhcmcsICZpZGVudCwKKwkJCQlzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcigwLCAoaW50ICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJd2R0X2VuYWJsZSgpOworCQlyZXQgPSAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJcmV0ID0gZ2V0X3VzZXIodGltZW91dCwgKHVuc2lnbmVkIGludCAqKWFyZyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKworCQl3ZHRfc2V0bG9hZCh0aW1lb3V0KTsKKworCQl3ZHRfZW5hYmxlKCk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXQgPSBwdXRfdXNlcih3ZHQtPnRpbWVvdXQsICh1bnNpZ25lZCBpbnQgKilhcmcpOworCQlicmVhazsKKwljYXNlIFdESU9DX0dFVFRJTUVMRUZUOgorCQlyZXQgPSBwdXRfdXNlcih3ZHRfdGltZWxlZnQoKSwgKHVuc2lnbmVkIGludCAqKWFyZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwODA1X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQgPSAwOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoV0RUX0JVU1ksICZ3ZHQtPnN0YXR1cykpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBjbGtfZW5hYmxlKHdkdC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJndkdC0+YWRldi0+ZGV2LCAiY2xvY2sgZW5hYmxlIGZhaWwiKTsKKwkJZ290byBlcnI7CisJfQorCisJd2R0X2VuYWJsZSgpOworCisJLyogY2FuIG5vdCBiZSBjbG9zZWQsIG9uY2UgZW5hYmxlZCAqLworCWNsZWFyX2JpdChXRFRfQ0FOX0JFX0NMT1NFRCwgJndkdC0+c3RhdHVzKTsKKwlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CisKK2VycjoKKwljbGVhcl9iaXQoV0RUX0JVU1ksICZ3ZHQtPnN0YXR1cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzcDgwNV93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoIXRlc3RfYml0KFdEVF9DQU5fQkVfQ0xPU0VELCAmd2R0LT5zdGF0dXMpKSB7CisJCWNsZWFyX2JpdChXRFRfQlVTWSwgJndkdC0+c3RhdHVzKTsKKwkJZGV2X3dhcm4oJndkdC0+YWRldi0+ZGV2LCAiRGV2aWNlIGNsb3NlZCB1bmV4cGVjdGVkbHlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwl3ZHRfZGlzYWJsZSgpOworCWNsa19kaXNhYmxlKHdkdC0+Y2xrKTsKKwljbGVhcl9iaXQoV0RUX0JVU1ksICZ3ZHQtPnN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3A4MDVfd2R0X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkud3JpdGUgPSBzcDgwNV93ZHRfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsID0gc3A4MDVfd2R0X2lvY3RsLAorCS5vcGVuID0gc3A4MDVfd2R0X29wZW4sCisJLnJlbGVhc2UgPSBzcDgwNV93ZHRfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzcDgwNV93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZSA9ICJ3YXRjaGRvZyIsCisJLmZvcHMgPSAmc3A4MDVfd2R0X2ZvcHMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc3A4MDVfd2R0X3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqYWRldiwgc3RydWN0IGFtYmFfaWQgKmlkKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZhZGV2LT5yZXMpLAorCQkJCSJzcDgwNV93ZHQiKSkgeworCQlkZXZfd2FybigmYWRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnI7CisJfQorCisJd2R0ID0ga3phbGxvYyhzaXplb2YoKndkdCksIEdGUF9LRVJORUwpOworCWlmICghd2R0KSB7CisJCWRldl93YXJuKCZhZGV2LT5kZXYsICJLemFsbG9jIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2t6YWxsb2M7CisJfQorCisJd2R0LT5jbGsgPSBjbGtfZ2V0KCZhZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIod2R0LT5jbGspKSB7CisJCWRldl93YXJuKCZhZGV2LT5kZXYsICJDbG9jayBub3QgZm91bmRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHdkdC0+Y2xrKTsKKwkJZ290byBlcnJfY2xrX2dldDsKKwl9CisKKwl3ZHQtPmJhc2UgPSBpb3JlbWFwKGFkZXYtPnJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmYWRldi0+cmVzKSk7CisJaWYgKCF3ZHQtPmJhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZGV2X3dhcm4oJmFkZXYtPmRldiwgImlvcmVtYXAgZmFpbFxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJd2R0LT5hZGV2ID0gYWRldjsKKwlzcGluX2xvY2tfaW5pdCgmd2R0LT5sb2NrKTsKKwl3ZHRfc2V0bG9hZChERUZBVUxUX1RJTUVPVVQpOworCisJcmV0ID0gbWlzY19yZWdpc3Rlcigmc3A4MDVfd2R0X21pc2NkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl93YXJuKCZhZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9taXNjX3JlZ2lzdGVyOworCX0KKworCWRldl9pbmZvKCZhZGV2LT5kZXYsICJyZWdpc3RyYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisJcmV0dXJuIDA7CisKK2Vycl9taXNjX3JlZ2lzdGVyOgorCWlvdW5tYXAod2R0LT5iYXNlKTsKK2Vycl9pb3JlbWFwOgorCWNsa19wdXQod2R0LT5jbGspOworZXJyX2Nsa19nZXQ6CisJa2ZyZWUod2R0KTsKKwl3ZHQgPSBOVUxMOworZXJyX2t6YWxsb2M6CisJcmVsZWFzZV9tZW1fcmVnaW9uKGFkZXYtPnJlcy5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmYWRldi0+cmVzKSk7CitlcnI6CisJZGV2X2VycigmYWRldi0+ZGV2LCAiUHJvYmUgRmFpbGVkISEhXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzcDgwNV93ZHRfcmVtb3ZlKHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJnNwODA1X3dkdF9taXNjZGV2KTsKKwlpb3VubWFwKHdkdC0+YmFzZSk7CisJY2xrX3B1dCh3ZHQtPmNsayk7CisJa2ZyZWUod2R0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24oYWRldi0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZhZGV2LT5yZXMpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFtYmFfaWQgc3A4MDVfd2R0X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWQJPSAweDAwMTQxODA1LAorCQkubWFzawk9IDB4MDBmZmZmZmYsCisJfSwKKwl7IDAsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kcml2ZXIgc3A4MDVfd2R0X2RyaXZlciA9IHsKKwkuZHJ2ID0geworCQkubmFtZQk9IE1PRFVMRV9OQU1FLAorCX0sCisJLmlkX3RhYmxlCT0gc3A4MDVfd2R0X2lkcywKKwkucHJvYmUJCT0gc3A4MDVfd2R0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzcDgwNV93ZHRfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwODA1X3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGFtYmFfZHJpdmVyX3JlZ2lzdGVyKCZzcDgwNV93ZHRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHNwODA1X3dkdF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNwODA1X3dkdF9leGl0KHZvaWQpCit7CisJYW1iYV9kcml2ZXJfdW5yZWdpc3Rlcigmc3A4MDVfd2R0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzcDgwNV93ZHRfZXhpdCk7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsCisJCSJTZXQgdG8gMSB0byBrZWVwIHdhdGNoZG9nIHJ1bm5pbmcgYWZ0ZXIgZGV2aWNlIHJlbGVhc2UiKTsKKworTU9EVUxFX0FVVEhPUigiVmlyZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAc3QuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gU1A4MDUgV2F0Y2hkb2cgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkdF9wY2kuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0X3BjaS5jCmluZGV4IDdiMjJlM2MuLjYxMzBjODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0X3BjaS5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0X3BjaS5jCkBAIC02MCwxOSArNjAsNiBAQAogCiAjZGVmaW5lIFBGWCAid2R0X3BjaTogIgogCi0vKgotICogVW50aWwgQWNjZXNzIEkvTyBnZXRzIHRoZWlyIGFwcGxpY2F0aW9uIGZvciBhIFBDSSB2ZW5kb3IgSUQgYXBwcm92ZWQsCi0gKiBJIGRvbid0IHRoaW5rIHRoYXQgaXQncyBhcHByb3ByaWF0ZSB0byBtb3ZlIHRoZXNlIGNvbnN0YW50cyBpbnRvIHRoZQotICogcmVndWxhciBwY2lfaWRzLmggZmlsZS4gLS0gSlBOIDIwMDAvMDEvMTgKLSAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfQUNDRVNTSU8KLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BQ0NFU1NJTyAweDQ5NGYKLSNlbmRpZgotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX1dER19DU00KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9XREdfQ1NNIDB4MjJjMAotI2VuZGlmCi0KIC8qIFdlIGNhbiBvbmx5IHVzZSAxIGNhcmQgZHVlIHRvIHRoZSAvZGV2L3dhdGNoZG9nIHJlc3RyaWN0aW9uICovCiBzdGF0aWMgaW50IGRldl9jb3VudDsKIApAQCAtNzQzLDcgKzczMCw3IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd2R0cGNpX3BjaV90YmxbXSA9IHsKIAl7CiAJCS52ZW5kb3IJICAgPSBQQ0lfVkVORE9SX0lEX0FDQ0VTU0lPLAotCQkuZGV2aWNlCSAgID0gUENJX0RFVklDRV9JRF9XREdfQ1NNLAorCQkuZGV2aWNlCSAgID0gUENJX0RFVklDRV9JRF9BQ0NFU1NJT19XREdfQ1NNLAogCQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKIAkJLnN1YmRldmljZSA9IFBDSV9BTllfSUQsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL0tjb25maWcgYi9kcml2ZXJzL3hlbi9LY29uZmlnCmluZGV4IDBhODgyNjkuLjYwZDcxZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL0tjb25maWcKKysrIGIvZHJpdmVycy94ZW4vS2NvbmZpZwpAQCAtNzEsNCArNzEsOSBAQAogCSAgaW5pdGlhbGl6aW5nIHhlbmJ1cyBhbmQgZ3JhbnRfdGFibGUgd2hlbiBydW5uaW5nIGluIGEgWGVuIEhWTQogCSAgZG9tYWluLiBBcyBhIGNvbnNlcXVlbmNlIHRoaXMgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHJ1biBhbnkgWGVuIFBWCiAJICBmcm9udGVuZCBvbiBYZW4gSFZNLgorCitjb25maWcgU1dJT1RMQl9YRU4KKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBTV0lPVExCCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL01ha2VmaWxlIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKaW5kZXggZTM5MmZiNy4uZmNhZjgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKQEAgLTExLDMgKzExLDQgQEAKIG9iai0kKENPTkZJR19YRU5GUykJCSs9IHhlbmZzLwogb2JqLSQoQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUikJKz0gc3lzLWh5cGVydmlzb3Iubwogb2JqLSQoQ09ORklHX1hFTl9QTEFURk9STV9QQ0kpCSs9IHBsYXRmb3JtLXBjaS5vCitvYmotJChDT05GSUdfU1dJT1RMQl9YRU4pCSs9IHN3aW90bGIteGVuLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2JhbGxvb24uYyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwppbmRleCAxYTBkOGMyLi41MDAyOTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMKKysrIGIvZHJpdmVycy94ZW4vYmFsbG9vbi5jCkBAIC04NSwxMyArODUsNiBAQAogCiBzdGF0aWMgaW50IHJlZ2lzdGVyX2JhbGxvb24oc3RydWN0IHN5c19kZXZpY2UgKnN5c2Rldik7CiAKLS8qCi0gKiBQcm90ZWN0cyBhdG9taWMgcmVzZXJ2YXRpb24gZGVjcmVhc2UvaW5jcmVhc2UgYWdhaW5zdCBjb25jdXJyZW50IGluY3JlYXNlcy4KLSAqIEFsc28gcHJvdGVjdHMgbm9uLWF0b21pYyB1cGRhdGVzIG9mIGN1cnJlbnRfcGFnZXMgYW5kIGRyaXZlcl9wYWdlcywgYW5kCi0gKiBiYWxsb29uIGxpc3RzLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJhbGxvb25fbG9jayk7Ci0KIHN0YXRpYyBzdHJ1Y3QgYmFsbG9vbl9zdGF0cyBiYWxsb29uX3N0YXRzOwogCiAvKiBXZSBpbmNyZWFzZS9kZWNyZWFzZSBpbiBiYXRjaGVzIHdoaWNoIGZpdCBpbiBhIHBhZ2UgKi8KQEAgLTIxMCw3ICsyMDMsNyBAQAogCWlmIChucl9wYWdlcyA+IEFSUkFZX1NJWkUoZnJhbWVfbGlzdCkpCiAJCW5yX3BhZ2VzID0gQVJSQVlfU0laRShmcmFtZV9saXN0KTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZiYWxsb29uX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGVuX3Jlc2VydmF0aW9uX2xvY2ssIGZsYWdzKTsKIAogCXBhZ2UgPSBiYWxsb29uX2ZpcnN0X3BhZ2UoKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewpAQCAtMjU0LDcgKzI0Nyw3IEBACiAJYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzICs9IHJjOwogCiAgb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbGxvb25fbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhlbl9yZXNlcnZhdGlvbl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmMgPCAwID8gcmMgOiByYyAhPSBucl9wYWdlczsKIH0KQEAgLTI5OSw3ICsyOTIsNyBAQAogCWttYXBfZmx1c2hfdW51c2VkKCk7CiAJZmx1c2hfdGxiX2FsbCgpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJhbGxvb25fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZ4ZW5fcmVzZXJ2YXRpb25fbG9jaywgZmxhZ3MpOwogCiAJLyogTm8gbW9yZSBtYXBwaW5nczogaW52YWxpZGF0ZSBQMk0gYW5kIGFkZCB0byBiYWxsb29uLiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CkBAIC0zMTUsNyArMzA4LDcgQEAKIAogCWJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlcyAtPSBucl9wYWdlczsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbGxvb25fbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhlbl9yZXNlcnZhdGlvbl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbmVlZF9zbGVlcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggNWUxZjM0OC4uNzJmOTFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTU1MCw2ICs1NTAsNyBAQAogCWlmIChpcnEgPCAwKQogCQlyZXR1cm4gaXJxOwogCisJaXJxZmxhZ3MgfD0gSVJRRl9OT19TVVNQRU5EOwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgaXJxZmxhZ3MsIGRldm5hbWUsIGRldl9pZCk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCXVuYmluZF9mcm9tX2lycShpcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYyBiL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0NjljMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKQEAgLTAsMCArMSw1MTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IDIwMTAKKyAqICBieSBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CisgKgorICogVGhpcyBjb2RlIHByb3ZpZGVzIGEgSU9NTVUgZm9yIFhlbiBQViBndWVzdHMgd2l0aCBQQ0kgcGFzc3Rocm91Z2guCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIuMCBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFBWIGd1ZXN0cyB1bmRlciBYZW4gYXJlIHJ1bm5pbmcgaW4gYW4gbm9uLWNvbnRpZ3VvdXMgbWVtb3J5IGFyY2hpdGVjdHVyZS4KKyAqCisgKiBXaGVuIFBDSSBwYXNzLXRocm91Z2ggaXMgdXRpbGl6ZWQsIHRoaXMgbmVjZXNzaXRhdGVzIGFuIElPTU1VIGZvcgorICogdHJhbnNsYXRpbmcgYnVzIChETUEpIHRvIHZpcnR1YWwgYW5kIHZpY2UtdmVyc2EgYW5kIGFsc28gcHJvdmlkaW5nIGEKKyAqIG1lY2hhbmlzbSB0byBoYXZlIGNvbnRpZ3VvdXMgcGFnZXMgZm9yIGRldmljZSBkcml2ZXJzIG9wZXJhdGlvbnMgKHNheSBETUEKKyAqIG9wZXJhdGlvbnMpLgorICoKKyAqIFNwZWNpZmljYWxseSwgdW5kZXIgWGVuIHRoZSBMaW51eCBpZGVhIG9mIHBhZ2VzIGlzIGFuIGlsbHVzaW9uLiBJdAorICogYXNzdW1lcyB0aGF0IHBhZ2VzIHN0YXJ0IGF0IHplcm8gYW5kIGdvIHVwIHRvIHRoZSBhdmFpbGFibGUgbWVtb3J5LiBUbworICogaGVscCB3aXRoIHRoYXQsIHRoZSBMaW51eCBYZW4gTU1VIHByb3ZpZGVzIGEgbG9va3VwIG1lY2hhbmlzbSB0bworICogdHJhbnNsYXRlIHRoZSBwYWdlIGZyYW1lIG51bWJlcnMgKFBGTikgdG8gbWFjaGluZSBmcmFtZSBudW1iZXJzIChNRk4pCisgKiBhbmQgdmljZS12ZXJzYS4gVGhlIE1GTiBhcmUgdGhlICJyZWFsIiBmcmFtZSBudW1iZXJzLiBGdXJ0aGVybW9yZQorICogbWVtb3J5IGlzIG5vdCBjb250aWd1b3VzLiBYZW4gaHlwZXJ2aXNvciBzdGl0Y2hlcyBtZW1vcnkgZm9yIGd1ZXN0cworICogZnJvbSBkaWZmZXJlbnQgcG9vbHMsIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IFBGTj09TUZOCisgKiBhbmQgUEZOKzE9PU1GTisxLiBMYXN0bHkgd2l0aCBYZW4gNC4wLCBwYWdlcyAoaW4gZGVidWcgbW9kZSkgYXJlCisgKiBhbGxvY2F0ZWQgaW4gZGVzY2VuZGluZyBvcmRlciAoaGlnaCB0byBsb3cpLCBtZWFuaW5nIHRoZSBndWVzdCBtaWdodAorICogbmV2ZXIgZ2V0IGFueSBNRk4ncyB1bmRlciB0aGUgNEdCIG1hcmsuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDx4ZW4vc3dpb3RsYi14ZW4uaD4KKyNpbmNsdWRlIDx4ZW4vcGFnZS5oPgorI2luY2x1ZGUgPHhlbi94ZW4tb3BzLmg+CisvKgorICogVXNlZCB0byBkbyBhIHF1aWNrIHJhbmdlIGNoZWNrIGluIHN3aW90bGJfdGJsX3VubWFwX3NpbmdsZSBhbmQKKyAqIHN3aW90bGJfdGJsX3N5bmNfc2luZ2xlXyosIHRvIHNlZSBpZiB0aGUgbWVtb3J5IHdhcyBpbiBmYWN0IGFsbG9jYXRlZCBieSB0aGlzCisgKiBBUEkuCisgKi8KKworc3RhdGljIGNoYXIgKnhlbl9pb190bGJfc3RhcnQsICp4ZW5faW9fdGxiX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhlbl9pb190bGJfbnNsYWJzOworLyoKKyAqIFF1aWNrIGxvb2t1cCB2YWx1ZSBvZiB0aGUgYnVzIGFkZHJlc3Mgb2YgdGhlIElPVExCLgorICovCisKK3U2NCBzdGFydF9kbWFfYWRkcjsKKworc3RhdGljIGRtYV9hZGRyX3QgeGVuX3BoeXNfdG9fYnVzKHBoeXNfYWRkcl90IHBhZGRyKQoreworCXJldHVybiBwaHlzX3RvX21hY2hpbmUoWFBBRERSKHBhZGRyKSkubWFkZHI7OworfQorCitzdGF0aWMgcGh5c19hZGRyX3QgeGVuX2J1c190b19waHlzKGRtYV9hZGRyX3QgYmFkZHIpCit7CisJcmV0dXJuIG1hY2hpbmVfdG9fcGh5cyhYTUFERFIoYmFkZHIpKS5wYWRkcjsKK30KKworc3RhdGljIGRtYV9hZGRyX3QgeGVuX3ZpcnRfdG9fYnVzKHZvaWQgKmFkZHJlc3MpCit7CisJcmV0dXJuIHhlbl9waHlzX3RvX2J1cyh2aXJ0X3RvX3BoeXMoYWRkcmVzcykpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3BhZ2VzX3BoeXNpY2FsbHlfY29udGlndW91cyh1bnNpZ25lZCBsb25nIHBmbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCQkgICAgIHNpemVfdCBsZW5ndGgpCit7CisJdW5zaWduZWQgbG9uZyBuZXh0X21mbjsKKwlpbnQgaTsKKwlpbnQgbnJfcGFnZXM7CisKKwluZXh0X21mbiA9IHBmbl90b19tZm4ocGZuKTsKKwlucl9wYWdlcyA9IChvZmZzZXQgKyBsZW5ndGggKyBQQUdFX1NJWkUtMSkgPj4gUEFHRV9TSElGVDsKKworCWZvciAoaSA9IDE7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWlmIChwZm5fdG9fbWZuKCsrcGZuKSAhPSArK25leHRfbWZuKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJhbmdlX3N0cmFkZGxlc19wYWdlX2JvdW5kYXJ5KHBoeXNfYWRkcl90IHAsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcGZuID0gUEZOX0RPV04ocCk7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHAgJiB+UEFHRV9NQVNLOworCisJaWYgKG9mZnNldCArIHNpemUgPD0gUEFHRV9TSVpFKQorCQlyZXR1cm4gMDsKKwlpZiAoY2hlY2tfcGFnZXNfcGh5c2ljYWxseV9jb250aWd1b3VzKHBmbiwgb2Zmc2V0LCBzaXplKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfeGVuX3N3aW90bGJfYnVmZmVyKGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJdW5zaWduZWQgbG9uZyBtZm4gPSBQRk5fRE9XTihkbWFfYWRkcik7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBtZm5fdG9fbG9jYWxfcGZuKG1mbik7CisJcGh5c19hZGRyX3QgcGFkZHI7CisKKwkvKiBJZiB0aGUgYWRkcmVzcyBpcyBvdXRzaWRlIG91ciBkb21haW4sIGl0IENBTgorCSAqIGhhdmUgdGhlIHNhbWUgdmlydHVhbCBhZGRyZXNzIGFzIGFub3RoZXIgYWRkcmVzcworCSAqIGluIG91ciBkb21haW4uIFRoZXJlZm9yZSBfb25seV8gY2hlY2sgYWRkcmVzcyB3aXRoaW4gb3VyIGRvbWFpbi4KKwkgKi8KKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJcGFkZHIgPSBQRk5fUEhZUyhwZm4pOworCQlyZXR1cm4gcGFkZHIgPj0gdmlydF90b19waHlzKHhlbl9pb190bGJfc3RhcnQpICYmCisJCSAgICAgICBwYWRkciA8IHZpcnRfdG9fcGh5cyh4ZW5faW9fdGxiX2VuZCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heF9kbWFfYml0cyA9IDMyOworCitzdGF0aWMgaW50Cit4ZW5fc3dpb3RsYl9maXh1cCh2b2lkICpidWYsIHNpemVfdCBzaXplLCB1bnNpZ25lZCBsb25nIG5zbGFicykKK3sKKwlpbnQgaSwgcmM7CisJaW50IGRtYV9iaXRzOworCisJZG1hX2JpdHMgPSBnZXRfb3JkZXIoSU9fVExCX1NFR1NJWkUgPDwgSU9fVExCX1NISUZUKSArIFBBR0VfU0hJRlQ7CisKKwlpID0gMDsKKwlkbyB7CisJCWludCBzbGFicyA9IG1pbihuc2xhYnMgLSBpLCAodW5zaWduZWQgbG9uZylJT19UTEJfU0VHU0laRSk7CisKKwkJZG8geworCQkJcmMgPSB4ZW5fY3JlYXRlX2NvbnRpZ3VvdXNfcmVnaW9uKAorCQkJCSh1bnNpZ25lZCBsb25nKWJ1ZiArIChpIDw8IElPX1RMQl9TSElGVCksCisJCQkJZ2V0X29yZGVyKHNsYWJzIDw8IElPX1RMQl9TSElGVCksCisJCQkJZG1hX2JpdHMpOworCQl9IHdoaWxlIChyYyAmJiBkbWFfYml0cysrIDwgbWF4X2RtYV9iaXRzKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCWkgKz0gc2xhYnM7CisJfSB3aGlsZSAoaSA8IG5zbGFicyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IHhlbl9zd2lvdGxiX2luaXQoaW50IHZlcmJvc2UpCit7CisJdW5zaWduZWQgbG9uZyBieXRlczsKKwlpbnQgcmM7CisKKwl4ZW5faW9fdGxiX25zbGFicyA9ICg2NCAqIDEwMjQgKiAxMDI0ID4+IElPX1RMQl9TSElGVCk7CisJeGVuX2lvX3RsYl9uc2xhYnMgPSBBTElHTih4ZW5faW9fdGxiX25zbGFicywgSU9fVExCX1NFR1NJWkUpOworCisJYnl0ZXMgPSB4ZW5faW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CisKKwkvKgorCSAqIEdldCBJTyBUTEIgbWVtb3J5IGZyb20gYW55IGxvY2F0aW9uLgorCSAqLworCXhlbl9pb190bGJfc3RhcnQgPSBhbGxvY19ib290bWVtKGJ5dGVzKTsKKwlpZiAoIXhlbl9pb190bGJfc3RhcnQpCisJCXBhbmljKCJDYW5ub3QgYWxsb2NhdGUgU1dJT1RMQiBidWZmZXIiKTsKKworCXhlbl9pb190bGJfZW5kID0geGVuX2lvX3RsYl9zdGFydCArIGJ5dGVzOworCS8qCisJICogQW5kIHJlcGxhY2UgdGhhdCBtZW1vcnkgd2l0aCBwYWdlcyB1bmRlciA0R0IuCisJICovCisJcmMgPSB4ZW5fc3dpb3RsYl9maXh1cCh4ZW5faW9fdGxiX3N0YXJ0LAorCQkJICAgICAgIGJ5dGVzLAorCQkJICAgICAgIHhlbl9pb190bGJfbnNsYWJzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyb3I7CisKKwlzdGFydF9kbWFfYWRkciA9IHhlbl92aXJ0X3RvX2J1cyh4ZW5faW9fdGxiX3N0YXJ0KTsKKwlzd2lvdGxiX2luaXRfd2l0aF90YmwoeGVuX2lvX3RsYl9zdGFydCwgeGVuX2lvX3RsYl9uc2xhYnMsIHZlcmJvc2UpOworCisJcmV0dXJuOworZXJyb3I6CisJcGFuaWMoIkRNQSglZCk6IEZhaWxlZCB0byBleGNoYW5nZSBwYWdlcyBhbGxvY2F0ZWQgZm9yIERNQSB3aXRoIFhlbiEgIlwKKwkgICAgICAiV2UgZWl0aGVyIGRvbid0IGhhdmUgdGhlIHBlcm1pc3Npb24gb3IgeW91IGRvIG5vdCBoYXZlIGVub3VnaCJcCisJICAgICAgImZyZWUgbWVtb3J5IHVuZGVyIDRHQiFcbiIsIHJjKTsKK30KKwordm9pZCAqCit4ZW5fc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKK3sKKwl2b2lkICpyZXQ7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCXU2NCBkbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJdW5zaWduZWQgbG9uZyB2c3RhcnQ7CisKKwkvKgorCSogSWdub3JlIHJlZ2lvbiBzcGVjaWZpZXJzIC0gdGhlIGtlcm5lbCdzIGlkZWFzIG9mCisJKiBwc2V1ZG8tcGh5cyBtZW1vcnkgbGF5b3V0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlCisJKiBtYWNoaW5lIHBoeXNpY2FsIGxheW91dC4gIFdlIGNhbid0IGFsbG9jYXRlIGhpZ2htZW0KKwkqIGJlY2F1c2Ugd2UgY2FuJ3QgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KKwkqLworCWZsYWdzICY9IH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSk7CisKKwlpZiAoZG1hX2FsbG9jX2Zyb21fY29oZXJlbnQoaHdkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZyZXQpKQorCQlyZXR1cm4gcmV0OworCisJdnN0YXJ0ID0gX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOworCXJldCA9ICh2b2lkICopdnN0YXJ0OworCisJaWYgKGh3ZGV2ICYmIGh3ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJZG1hX21hc2sgPSBkbWFfYWxsb2NfY29oZXJlbnRfbWFzayhod2RldiwgZmxhZ3MpOworCisJaWYgKHJldCkgeworCQlpZiAoeGVuX2NyZWF0ZV9jb250aWd1b3VzX3JlZ2lvbih2c3RhcnQsIG9yZGVyLAorCQkJCQkJIGZsczY0KGRtYV9tYXNrKSkgIT0gMCkgeworCQkJZnJlZV9wYWdlcyh2c3RhcnQsIG9yZGVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCW1lbXNldChyZXQsIDAsIHNpemUpOworCQkqZG1hX2hhbmRsZSA9IHZpcnRfdG9fbWFjaGluZShyZXQpLm1hZGRyOworCX0KKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfYWxsb2NfY29oZXJlbnQpOworCit2b2lkCit4ZW5fc3dpb3RsYl9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCQkgIGRtYV9hZGRyX3QgZGV2X2FkZHIpCit7CisJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCisJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoaHdkZXYsIG9yZGVyLCB2YWRkcikpCisJCXJldHVybjsKKworCXhlbl9kZXN0cm95X2NvbnRpZ3VvdXNfcmVnaW9uKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBvcmRlcik7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgb3JkZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfZnJlZV9jb2hlcmVudCk7CisKKworLyoKKyAqIE1hcCBhIHNpbmdsZSBidWZmZXIgb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuICBUaGUKKyAqIHBoeXNpY2FsIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgorICoKKyAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeSB1bnRpbAorICogZWl0aGVyIHhlbl9zd2lvdGxiX3VubWFwX3BhZ2Ugb3IgeGVuX3N3aW90bGJfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KKyAqLworZG1hX2FkZHJfdCB4ZW5fc3dpb3RsYl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJcGh5c19hZGRyX3QgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwlkbWFfYWRkcl90IGRldl9hZGRyID0geGVuX3BoeXNfdG9fYnVzKHBoeXMpOworCXZvaWQgKm1hcDsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCS8qCisJICogSWYgdGhlIGFkZHJlc3MgaGFwcGVucyB0byBiZSBpbiB0aGUgZGV2aWNlJ3MgRE1BIHdpbmRvdywKKwkgKiB3ZSBjYW4gc2FmZWx5IHJldHVybiB0aGUgZGV2aWNlIGFkZHIgYW5kIG5vdCB3b3JyeSBhYm91dCBib3VuY2UKKwkgKiBidWZmZXJpbmcgaXQuCisJICovCisJaWYgKGRtYV9jYXBhYmxlKGRldiwgZGV2X2FkZHIsIHNpemUpICYmCisJICAgICFyYW5nZV9zdHJhZGRsZXNfcGFnZV9ib3VuZGFyeShwaHlzLCBzaXplKSAmJiAhc3dpb3RsYl9mb3JjZSkKKwkJcmV0dXJuIGRldl9hZGRyOworCisJLyoKKwkgKiBPaCB3ZWxsLCBoYXZlIHRvIGFsbG9jYXRlIGFuZCBtYXAgYSBib3VuY2UgYnVmZmVyLgorCSAqLworCW1hcCA9IHN3aW90bGJfdGJsX21hcF9zaW5nbGUoZGV2LCBzdGFydF9kbWFfYWRkciwgcGh5cywgc2l6ZSwgZGlyKTsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIERNQV9FUlJPUl9DT0RFOworCisJZGV2X2FkZHIgPSB4ZW5fdmlydF90b19idXMobWFwKTsKKworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQorCSAqLworCWlmICghZG1hX2NhcGFibGUoZGV2LCBkZXZfYWRkciwgc2l6ZSkpCisJCXBhbmljKCJtYXBfc2luZ2xlOiBib3VuY2UgYnVmZmVyIGlzIG5vdCBETUEnYmxlIik7CisKKwlyZXR1cm4gZGV2X2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3dpb3RsYl9tYXBfcGFnZSk7CisKKy8qCisgKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUgbXVzdAorICogbWF0Y2ggd2hhdCB3YXMgcHJvdmlkZWQgZm9yIGluIGEgcHJldmlvdXMgeGVuX3N3aW90bGJfbWFwX3BhZ2UgY2FsbC4gIEFsbAorICogb3RoZXIgdXNhZ2VzIGFyZSB1bmRlZmluZWQuCisgKgorICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlCisgKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgorICovCitzdGF0aWMgdm9pZCB4ZW5fdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXBoeXNfYWRkcl90IHBhZGRyID0geGVuX2J1c190b19waHlzKGRldl9hZGRyKTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJLyogTk9URTogV2UgdXNlIGRldl9hZGRyIGhlcmUsIG5vdCBwYWRkciEgKi8KKwlpZiAoaXNfeGVuX3N3aW90bGJfYnVmZmVyKGRldl9hZGRyKSkgeworCQlzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoaHdkZXYsIHBoeXNfdG9fdmlydChwYWRkciksIHNpemUsIGRpcik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGlyICE9IERNQV9GUk9NX0RFVklDRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBwaHlzX3RvX3ZpcnQgZG9lc24ndCB3b3JrIHdpdGggaGloZ21lbSBwYWdlIGJ1dCB3ZSBjb3VsZAorCSAqIGNhbGwgZG1hX21hcmtfY2xlYW4oKSB3aXRoIGhpaGdtZW0gcGFnZSBoZXJlLiBIb3dldmVyLCB3ZQorCSAqIGFyZSBmaW5lIHNpbmNlIGRtYV9tYXJrX2NsZWFuKCkgaXMgbnVsbCBvbiBQT1dFUlBDLiBXZSBjYW4KKwkgKiBtYWtlIGRtYV9tYXJrX2NsZWFuKCkgdGFrZSBhIHBoeXNpY2FsIGFkZHJlc3MgaWYgbmVjZXNzYXJ5LgorCSAqLworCWRtYV9tYXJrX2NsZWFuKHBoeXNfdG9fdmlydChwYWRkciksIHNpemUpOworfQorCit2b2lkIHhlbl9zd2lvdGxiX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwl4ZW5fdW5tYXBfc2luZ2xlKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9zd2lvdGxiX3VubWFwX3BhZ2UpOworCisvKgorICogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uCisgKiBhZnRlciBhIHRyYW5zZmVyLgorICoKKyAqIElmIHlvdSBwZXJmb3JtIGEgeGVuX3N3aW90bGJfbWFwX3BhZ2UoKSBidXQgd2lzaCB0byBpbnRlcnJvZ2F0ZSB0aGUgYnVmZmVyCisgKiB1c2luZyB0aGUgY3B1LCB5ZXQgZG8gbm90IHdpc2ggdG8gdGVhcmRvd24gdGhlIGRtYSBtYXBwaW5nLCB5b3UgbXVzdAorICogY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZSBuZXh0IHBvaW50IHlvdSBnaXZlIHRoZSBkbWEKKyAqIGFkZHJlc3MgYmFjayB0byB0aGUgY2FyZCwgeW91IG11c3QgZmlyc3QgcGVyZm9ybSBhCisgKiB4ZW5fc3dpb3RsYl9kbWFfc3luY19mb3JfZGV2aWNlLCBhbmQgdGhlbiB0aGUgZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZAoreGVuX3N3aW90bGJfc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJZW51bSBkbWFfc3luY190YXJnZXQgdGFyZ2V0KQoreworCXBoeXNfYWRkcl90IHBhZGRyID0geGVuX2J1c190b19waHlzKGRldl9hZGRyKTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJLyogTk9URTogV2UgdXNlIGRldl9hZGRyIGhlcmUsIG5vdCBwYWRkciEgKi8KKwlpZiAoaXNfeGVuX3N3aW90bGJfYnVmZmVyKGRldl9hZGRyKSkgeworCQlzd2lvdGxiX3RibF9zeW5jX3NpbmdsZShod2RldiwgcGh5c190b192aXJ0KHBhZGRyKSwgc2l6ZSwgZGlyLAorCQkJCSAgICAgICB0YXJnZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGRpciAhPSBETUFfRlJPTV9ERVZJQ0UpCisJCXJldHVybjsKKworCWRtYV9tYXJrX2NsZWFuKHBoeXNfdG9fdmlydChwYWRkciksIHNpemUpOworfQorCit2b2lkCit4ZW5fc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJeGVuX3N3aW90bGJfc3luY19zaW5nbGUoaHdkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIFNZTkNfRk9SX0NQVSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KTsKKwordm9pZAoreGVuX3N3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXhlbl9zd2lvdGxiX3N5bmNfc2luZ2xlKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyLCBTWU5DX0ZPUl9ERVZJQ0UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSk7CisKKy8qCisgKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nIG1vZGUgZm9yIERNQS4KKyAqIFRoaXMgaXMgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlIGFib3ZlIHhlbl9zd2lvdGxiX21hcF9wYWdlCisgKiBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0IGVsZW1lbnRzIGFyZSBlYWNoIHRhZ2dlZCB3aXRoIHRoZQorICogYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MgYW5kIGxlbmd0aC4gIFRoZXkgYXJlIG9idGFpbmVkIHZpYQorICogc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgorICoKKyAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCisgKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCisgKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCisgKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKKyAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCisgKgorICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciB4ZW5fc3dpb3RsYl9tYXBfcGFnZSBhcmUgdGhlCisgKiBzYW1lIGhlcmUuCisgKi8KK2ludAoreGVuX3N3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaTsKKworCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOworCisJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7CisJCXBoeXNfYWRkcl90IHBhZGRyID0gc2dfcGh5cyhzZyk7CisJCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSB4ZW5fcGh5c190b19idXMocGFkZHIpOworCisJCWlmIChzd2lvdGxiX2ZvcmNlIHx8CisJCSAgICAhZG1hX2NhcGFibGUoaHdkZXYsIGRldl9hZGRyLCBzZy0+bGVuZ3RoKSB8fAorCQkgICAgcmFuZ2Vfc3RyYWRkbGVzX3BhZ2VfYm91bmRhcnkocGFkZHIsIHNnLT5sZW5ndGgpKSB7CisJCQl2b2lkICptYXAgPSBzd2lvdGxiX3RibF9tYXBfc2luZ2xlKGh3ZGV2LAorCQkJCQkJCSAgIHN0YXJ0X2RtYV9hZGRyLAorCQkJCQkJCSAgIHNnX3BoeXMoc2cpLAorCQkJCQkJCSAgIHNnLT5sZW5ndGgsIGRpcik7CisJCQlpZiAoIW1hcCkgeworCQkJCS8qIERvbid0IHBhbmljIGhlcmUsIHdlIGV4cGVjdCBtYXBfc2cgdXNlcnMKKwkJCQkgICB0byBkbyBwcm9wZXIgZXJyb3IgaGFuZGxpbmcuICovCisJCQkJeGVuX3N3aW90bGJfdW5tYXBfc2dfYXR0cnMoaHdkZXYsIHNnbCwgaSwgZGlyLAorCQkJCQkJCSAgIGF0dHJzKTsKKwkJCQlzZ2xbMF0uZG1hX2xlbmd0aCA9IDA7CisJCQkJcmV0dXJuIERNQV9FUlJPUl9DT0RFOworCQkJfQorCQkJc2ctPmRtYV9hZGRyZXNzID0geGVuX3ZpcnRfdG9fYnVzKG1hcCk7CisJCX0gZWxzZQorCQkJc2ctPmRtYV9hZGRyZXNzID0gZGV2X2FkZHI7CisJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKKwl9CisJcmV0dXJuIG5lbGVtczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9zd2lvdGxiX21hcF9zZ19hdHRycyk7CisKK2ludAoreGVuX3N3aW90bGJfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKKwkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXJldHVybiB4ZW5fc3dpb3RsYl9tYXBfc2dfYXR0cnMoaHdkZXYsIHNnbCwgbmVsZW1zLCBkaXIsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfbWFwX3NnKTsKKworLyoKKyAqIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuICBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMKKyAqIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yIHN3aW90bGJfdW5tYXBfcGFnZSgpIGFib3ZlLgorICovCit2b2lkCit4ZW5fc3dpb3RsYl91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBpOworCisJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpCisJCXhlbl91bm1hcF9zaW5nbGUoaHdkZXYsIHNnLT5kbWFfYWRkcmVzcywgc2ctPmRtYV9sZW5ndGgsIGRpcik7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9zd2lvdGxiX3VubWFwX3NnX2F0dHJzKTsKKwordm9pZAoreGVuX3N3aW90bGJfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVsZW1zLAorCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlyZXR1cm4geGVuX3N3aW90bGJfdW5tYXBfc2dfYXR0cnMoaHdkZXYsIHNnbCwgbmVsZW1zLCBkaXIsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfdW5tYXBfc2cpOworCisvKgorICogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucworICogYWZ0ZXIgYSB0cmFuc2Zlci4KKyAqCisgKiBUaGUgc2FtZSBhcyBzd2lvdGxiX3N5bmNfc2luZ2xlXyogYnV0IGZvciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIHNhbWUgcnVsZXMKKyAqIGFuZCB1c2FnZS4KKyAqLworc3RhdGljIHZvaWQKK3hlbl9zd2lvdGxiX3N5bmNfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkgICAgZW51bSBkbWFfc3luY190YXJnZXQgdGFyZ2V0KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50IGk7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpCisJCXhlbl9zd2lvdGxiX3N5bmNfc2luZ2xlKGh3ZGV2LCBzZy0+ZG1hX2FkZHJlc3MsCisJCQkJCXNnLT5kbWFfbGVuZ3RoLCBkaXIsIHRhcmdldCk7Cit9CisKK3ZvaWQKK3hlbl9zd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJeGVuX3N3aW90bGJfc3luY19zZyhod2Rldiwgc2csIG5lbGVtcywgZGlyLCBTWU5DX0ZPUl9DUFUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfc3luY19zZ19mb3JfY3B1KTsKKwordm9pZAoreGVuX3N3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwl4ZW5fc3dpb3RsYl9zeW5jX3NnKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIsIFNZTkNfRk9SX0RFVklDRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3dpb3RsYl9zeW5jX3NnX2Zvcl9kZXZpY2UpOworCitpbnQKK3hlbl9zd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiAhZG1hX2FkZHI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvcik7CisKKy8qCisgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuIGJlIHN1cHBvcnRlZAorICogcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzCisgKiBkdXJpbmcgYnVzIG1hc3RlcmluZywgdGhlbiB5b3Ugd291bGQgcGFzcyAweDAwZmZmZmZmIGFzIHRoZSBtYXNrIHRvCisgKiB0aGlzIGZ1bmN0aW9uLgorICovCitpbnQKK3hlbl9zd2lvdGxiX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqaHdkZXYsIHU2NCBtYXNrKQoreworCXJldHVybiB4ZW5fdmlydF90b19idXMoeGVuX2lvX3RsYl9lbmQgLSAxKSA8PSBtYXNrOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N3aW90bGJfZG1hX3N1cHBvcnRlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX2NsaWVudC5jIGIvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19jbGllbnQuYwppbmRleCA3YjNlOTczLi43ZTQ5NTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX2NsaWVudC5jCisrKyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfY2xpZW50LmMKQEAgLTEzMyw2ICsxMzMsNjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhlbmJ1c193YXRjaF9wYXRoZm10KTsKIAorc3RhdGljIHZvaWQgeGVuYnVzX3N3aXRjaF9mYXRhbChzdHJ1Y3QgeGVuYnVzX2RldmljZSAqLCBpbnQsIGludCwKKwkJCQljb25zdCBjaGFyICosIC4uLik7CisKK3N0YXRpYyBpbnQKK19feGVuYnVzX3N3aXRjaF9zdGF0ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAorCQkgICAgICBlbnVtIHhlbmJ1c19zdGF0ZSBzdGF0ZSwgaW50IGRlcHRoKQoreworCS8qIFdlIGNoZWNrIHdoZXRoZXIgdGhlIHN0YXRlIGlzIGN1cnJlbnRseSBzZXQgdG8gdGhlIGdpdmVuIHZhbHVlLCBhbmQKKwkgICBpZiBub3QsIHRoZW4gdGhlIHN0YXRlIGlzIHNldC4gIFdlIGRvbid0IHdhbnQgdG8gdW5jb25kaXRpb25hbGx5CisJICAgd3JpdGUgdGhlIGdpdmVuIHN0YXRlLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZmlyZSB3YXRjaGVzCisJICAgdW5uZWNlc3NhcmlseS4gIEZ1cnRoZXJtb3JlLCBpZiB0aGUgbm9kZSBoYXMgZ29uZSwgd2UgZG9uJ3Qgd3JpdGUKKwkgICB0byBpdCwgYXMgdGhlIGRldmljZSB3aWxsIGJlIHRlYXJpbmcgZG93biwgYW5kIHdlIGRvbid0IHdhbnQgdG8KKwkgICByZXN1cnJlY3QgdGhhdCBkaXJlY3RvcnkuCisKKwkgICBOb3RlIHRoYXQsIGJlY2F1c2Ugb2YgdGhpcyBjYWNoZWQgdmFsdWUgb2Ygb3VyIHN0YXRlLCB0aGlzCisJICAgZnVuY3Rpb24gd2lsbCBub3QgdGFrZSBhIGNhbGxlcidzIFhlbnN0b3JlIHRyYW5zYWN0aW9uCisJICAgKHNvbWV0aGluZyBpdCB3YXMgdHJ5aW5nIHRvIGluIHRoZSBwYXN0KSBiZWNhdXNlIGRldi0+c3RhdGUKKwkgICB3b3VsZCBub3QgZ2V0IHJlc2V0IGlmIHRoZSB0cmFuc2FjdGlvbiB3YXMgYWJvcnRlZC4KKwkgKi8KKworCXN0cnVjdCB4ZW5idXNfdHJhbnNhY3Rpb24geGJ0OworCWludCBjdXJyZW50X3N0YXRlOworCWludCBlcnIsIGFib3J0OworCisJaWYgKHN0YXRlID09IGRldi0+c3RhdGUpCisJCXJldHVybiAwOworCithZ2FpbjoKKwlhYm9ydCA9IDE7CisKKwllcnIgPSB4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7CisJaWYgKGVycikgeworCQl4ZW5idXNfc3dpdGNoX2ZhdGFsKGRldiwgZGVwdGgsIGVyciwgInN0YXJ0aW5nIHRyYW5zYWN0aW9uIik7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IHhlbmJ1c19zY2FuZih4YnQsIGRldi0+bm9kZW5hbWUsICJzdGF0ZSIsICIlZCIsICZjdXJyZW50X3N0YXRlKTsKKwlpZiAoZXJyICE9IDEpCisJCWdvdG8gYWJvcnQ7CisKKwllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgInN0YXRlIiwgIiVkIiwgc3RhdGUpOworCWlmIChlcnIpIHsKKwkJeGVuYnVzX3N3aXRjaF9mYXRhbChkZXYsIGRlcHRoLCBlcnIsICJ3cml0aW5nIG5ldyBzdGF0ZSIpOworCQlnb3RvIGFib3J0OworCX0KKworCWFib3J0ID0gMDsKK2Fib3J0OgorCWVyciA9IHhlbmJ1c190cmFuc2FjdGlvbl9lbmQoeGJ0LCBhYm9ydCk7CisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FQUdBSU4gJiYgIWFib3J0KQorCQkJZ290byBhZ2FpbjsKKwkJeGVuYnVzX3N3aXRjaF9mYXRhbChkZXYsIGRlcHRoLCBlcnIsICJlbmRpbmcgdHJhbnNhY3Rpb24iKTsKKwl9IGVsc2UKKwkJZGV2LT5zdGF0ZSA9IHN0YXRlOworCisJcmV0dXJuIDA7Cit9CiAKIC8qKgogICogeGVuYnVzX3N3aXRjaF9zdGF0ZQpAQCAtMTQ1LDQyICsyMDMsOSBAQAogICovCiBpbnQgeGVuYnVzX3N3aXRjaF9zdGF0ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LCBlbnVtIHhlbmJ1c19zdGF0ZSBzdGF0ZSkKIHsKLQkvKiBXZSBjaGVjayB3aGV0aGVyIHRoZSBzdGF0ZSBpcyBjdXJyZW50bHkgc2V0IHRvIHRoZSBnaXZlbiB2YWx1ZSwgYW5kCi0JICAgaWYgbm90LCB0aGVuIHRoZSBzdGF0ZSBpcyBzZXQuICBXZSBkb24ndCB3YW50IHRvIHVuY29uZGl0aW9uYWxseQotCSAgIHdyaXRlIHRoZSBnaXZlbiBzdGF0ZSwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGZpcmUgd2F0Y2hlcwotCSAgIHVubmVjZXNzYXJpbHkuICBGdXJ0aGVybW9yZSwgaWYgdGhlIG5vZGUgaGFzIGdvbmUsIHdlIGRvbid0IHdyaXRlCi0JICAgdG8gaXQsIGFzIHRoZSBkZXZpY2Ugd2lsbCBiZSB0ZWFyaW5nIGRvd24sIGFuZCB3ZSBkb24ndCB3YW50IHRvCi0JICAgcmVzdXJyZWN0IHRoYXQgZGlyZWN0b3J5LgotCi0JICAgTm90ZSB0aGF0LCBiZWNhdXNlIG9mIHRoaXMgY2FjaGVkIHZhbHVlIG9mIG91ciBzdGF0ZSwgdGhpcyBmdW5jdGlvbgotCSAgIHdpbGwgbm90IHdvcmsgaW5zaWRlIGEgWGVuc3RvcmUgdHJhbnNhY3Rpb24gKHNvbWV0aGluZyBpdCB3YXMKLQkgICB0cnlpbmcgdG8gaW4gdGhlIHBhc3QpIGJlY2F1c2UgZGV2LT5zdGF0ZSB3b3VsZCBub3QgZ2V0IHJlc2V0IGlmCi0JICAgdGhlIHRyYW5zYWN0aW9uIHdhcyBhYm9ydGVkLgotCi0JICovCi0KLQlpbnQgY3VycmVudF9zdGF0ZTsKLQlpbnQgZXJyOwotCi0JaWYgKHN0YXRlID09IGRldi0+c3RhdGUpCi0JCXJldHVybiAwOwotCi0JZXJyID0geGVuYnVzX3NjYW5mKFhCVF9OSUwsIGRldi0+bm9kZW5hbWUsICJzdGF0ZSIsICIlZCIsCi0JCQkgICAmY3VycmVudF9zdGF0ZSk7Ci0JaWYgKGVyciAhPSAxKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwgInN0YXRlIiwgIiVkIiwgc3RhdGUpOwotCWlmIChlcnIpIHsKLQkJaWYgKHN0YXRlICE9IFhlbmJ1c1N0YXRlQ2xvc2luZykgLyogQXZvaWQgbG9vcGluZyAqLwotCQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgIndyaXRpbmcgbmV3IHN0YXRlIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZGV2LT5zdGF0ZSA9IHN0YXRlOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIF9feGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIHN0YXRlLCAwKTsKIH0KKwogRVhQT1JUX1NZTUJPTF9HUEwoeGVuYnVzX3N3aXRjaF9zdGF0ZSk7CiAKIGludCB4ZW5idXNfZnJvbnRlbmRfY2xvc2VkKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCkBAIC0yODQsNiArMzA5LDIzIEBACiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5idXNfZGV2X2ZhdGFsKTsKIAogLyoqCisgKiBFcXVpdmFsZW50IHRvIHhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsIGZtdCwgYXJncyksIGJ1dCBoZWxwcworICogYXZvaWRpbmcgcmVjdXJzaW9uIHdpdGhpbiB4ZW5idXNfc3dpdGNoX3N0YXRlLgorICovCitzdGF0aWMgdm9pZCB4ZW5idXNfc3dpdGNoX2ZhdGFsKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYsIGludCBkZXB0aCwgaW50IGVyciwKKwkJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJeGVuYnVzX3ZhX2Rldl9lcnJvcihkZXYsIGVyciwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmICghZGVwdGgpCisJCV9feGVuYnVzX3N3aXRjaF9zdGF0ZShkZXYsIFhlbmJ1c1N0YXRlQ2xvc2luZywgMSk7Cit9CisKKy8qKgogICogeGVuYnVzX2dyYW50X3JpbmcKICAqIEBkZXY6IHhlbmJ1cyBkZXZpY2UKICAqIEByaW5nX21mbjogbWZuIG9mIHJpbmcgdG8gZ3JhbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvem9ycm8vcHJvYy5jIGIvZHJpdmVycy96b3Jyby9wcm9jLmMKaW5kZXggM2M3MDQ2ZC4uY2FmYzUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy96b3Jyby9wcm9jLmMKKysrIGIvZHJpdmVycy96b3Jyby9wcm9jLmMKQEAgLTIyLDggKzIyLDkgQEAKIHByb2NfYnVzX3pvcnJvX2xzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQogewogCWxvZmZfdCBuZXcgPSAtMTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAod2hlbmNlKSB7CiAJY2FzZSAwOgogCQluZXcgPSBvZmY7CkBAIC0zNSwxMiArMzYsMTIgQEAKIAkJbmV3ID0gc2l6ZW9mKHN0cnVjdCBDb25maWdEZXYpICsgb2ZmOwogCQlicmVhazsKIAl9Ci0JaWYgKG5ldyA8IDAgfHwgbmV3ID4gc2l6ZW9mKHN0cnVjdCBDb25maWdEZXYpKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gKGZpbGUtPmZfcG9zID0gbmV3KTsKKwlpZiAobmV3IDwgMCB8fCBuZXcgPiBzaXplb2Yoc3RydWN0IENvbmZpZ0RldikpCisJCW5ldyA9IC1FSU5WQUw7CisJZWxzZQorCQlmaWxlLT5mX3BvcyA9IG5ldzsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gbmV3OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtNjcsNyArNjgsNyBAQAogCWNkLmNkX0JvYXJkQWRkciA9ICh2b2lkICopem9ycm9fcmVzb3VyY2Vfc3RhcnQoeik7CiAJY2QuY2RfQm9hcmRTaXplID0gem9ycm9fcmVzb3VyY2VfbGVuKHopOwogCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsICZjZCwgbmJ5dGVzKSkKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgKHZvaWQgKikmY2QgKyBwb3MsIG5ieXRlcykpCiAJCXJldHVybiAtRUZBVUxUOwogCSpwcG9zICs9IG5ieXRlczsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggZjQ3YzZiYi4uODg0MThjNCAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC01Miw3ICs1Miw3IEBACiAjZW5kaWYKIAogc3RydWN0IGlub2RlICp2OWZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSk7Ci12b2lkIHY5ZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIHY5ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbm9fdCB2OWZzX3FpZDJpbm8oc3RydWN0IHA5X3FpZCAqcWlkKTsKIHZvaWQgdjlmc19zdGF0Mmlub2RlKHN0cnVjdCBwOV93c3RhdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopOwogdm9pZCB2OWZzX3N0YXQyaW5vZGVfZG90bChzdHJ1Y3QgcDlfc3RhdF9kb3RsICosIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNmU5NGYzMi4uYzdjMjNlYSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTQzMCw4ICs0MzAsMTAgQEAKICAqIEBpbm9kZTogaW5vZGUgdG8gcmVsZWFzZQogICoKICAqLwotdm9pZCB2OWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIHY5ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nLCAwKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CiAKICNpZmRlZiBDT05GSUdfOVBfRlNDQUNIRQpAQCAtMTIwOSwxMCArMTIxMSwxOSBAQAogCX0KIAogCXJldHZhbCA9IHA5X2NsaWVudF93c3RhdChmaWQsICZ3c3RhdCk7Ci0JaWYgKHJldHZhbCA+PSAwKQotCQlyZXR2YWwgPSBpbm9kZV9zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHJldHZhbDsKKwlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgaWF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoZGVudHJ5LT5kX2lub2RlKSkgeworCQlyZXR2YWwgPSB2bXRydW5jYXRlKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHItPmlhX3NpemUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzZXRhdHRyX2NvcHkoZGVudHJ5LT5kX2lub2RlLCBpYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShkZW50cnktPmRfaW5vZGUpOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTEyNTIsMTAgKzEyNjMsMTkgQEAKIAkJcmV0dXJuIFBUUl9FUlIoZmlkKTsKIAogCXJldHZhbCA9IHA5X2NsaWVudF9zZXRhdHRyKGZpZCwgJnA5YXR0cik7Ci0JaWYgKHJldHZhbCA+PSAwKQotCQlyZXR2YWwgPSBpbm9kZV9zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dXJuIHJldHZhbDsKKwlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgaWF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoZGVudHJ5LT5kX2lub2RlKSkgeworCQlyZXR2YWwgPSB2bXRydW5jYXRlKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHItPmlhX3NpemUpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlzZXRhdHRyX2NvcHkoZGVudHJ5LT5kX2lub2RlLCBpYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShkZW50cnktPmRfaW5vZGUpOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggNGI5ZWRlMC4uZjkzMTEwNyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCS5kZXN0cm95X2lub2RlID0gdjlmc19kZXN0cm95X2lub2RlLAogI2VuZGlmCiAJLnN0YXRmcyA9IHNpbXBsZV9zdGF0ZnMsCi0JLmNsZWFyX2lub2RlID0gdjlmc19jbGVhcl9pbm9kZSwKKwkuZXZpY3RfaW5vZGUgPSB2OWZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMgPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIAkudW1vdW50X2JlZ2luID0gdjlmc191bW91bnRfYmVnaW4sCiB9OwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJLmRlc3Ryb3lfaW5vZGUgPSB2OWZzX2Rlc3Ryb3lfaW5vZGUsCiAjZW5kaWYKIAkuc3RhdGZzID0gdjlmc19zdGF0ZnMsCi0JLmNsZWFyX2lub2RlID0gdjlmc19jbGVhcl9pbm9kZSwKKwkuZXZpY3RfaW5vZGUgPSB2OWZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMgPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIAkudW1vdW50X2JlZ2luID0gdjlmc191bW91bnRfYmVnaW4sCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9pbm9kZS5jIGIvZnMvYWRmcy9pbm9kZS5jCmluZGV4IDZmODUwYjAuLjY1Nzk0YjggMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvaW5vZGUuYworKysgYi9mcy9hZGZzL2lub2RlLmMKQEAgLTUwLDEwICs1MCwxOSBAQAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CisJaW50IHJldDsKKwogCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAorCXJldCA9IGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAogCQkJCWFkZnNfZ2V0X2Jsb2NrLAogCQkJCSZBREZTX0kobWFwcGluZy0+aG9zdCktPm1tdV9wcml2YXRlKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7CisJCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBfYWRmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKQEAgLTMyNCwxMCArMzMzLDcgQEAKIAogCS8qIFhYWDogdGhpcyBpcyBtaXNzaW5nIHNvbWUgYWN0dWFsIG9uLWRpc2sgdHJ1bmNhdGlvbi4uICovCiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFKQotCQllcnJvciA9IHNpbXBsZV9zZXRzaXplKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKLQotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7CisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwogCiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9NVElNRSkgewogCQlpbm9kZS0+aV9tdGltZSA9IGF0dHItPmlhX210aW1lOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaAppbmRleCBmMDViNjE1Li5hOGNiZGViIDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAorKysgYi9mcy9hZmZzL2FmZnMuaApAQCAtMTcxLDggKzE3MSw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZwkJIGFmZnNfcGFyZW50X2lubyhzdHJ1Y3QgaW5vZGUgKmRpcik7CiBleHRlcm4gc3RydWN0IGlub2RlCQkqYWZmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIpOwogZXh0ZXJuIGludAkJCSBhZmZzX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwotZXh0ZXJuIHZvaWQJCQkgYWZmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gdm9pZAkJCSBhZmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHZvaWQJCQkgYWZmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUJCSphZmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJdW5zaWduZWQgbG9uZyBpbm8pOwogZXh0ZXJuIGludAkJCSBhZmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCmRpZmYgLS1naXQgYS9mcy9hZmZzL2ZpbGUuYyBiL2ZzL2FmZnMvZmlsZS5jCmluZGV4IDMyMjcxMGMuLmM0YTk4NzUgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvZmlsZS5jCisrKyBiL2ZzL2FmZnMvZmlsZS5jCkBAIC00MDYsMTAgKzQwNiwxOSBAQAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CisJaW50IHJldDsKKwogCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAorCXJldCA9IGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAogCQkJCWFmZnNfZ2V0X2Jsb2NrLAogCQkJCSZBRkZTX0kobWFwcGluZy0+aG9zdCktPm1tdV9wcml2YXRlKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7CisJCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBfYWZmc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvaW5vZGUuYyBiL2ZzL2FmZnMvaW5vZGUuYwppbmRleCBmNGIyYTRlLi4zYTBmZGVjIDEwMDY0NAotLS0gYS9mcy9hZmZzL2lub2RlLmMKKysrIGIvZnMvYWZmcy9pbm9kZS5jCkBAIC0yMzUsMzEgKzIzNSwzNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCWlmICghZXJyb3IgJiYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkKIAkJbW9kZV90b19wcm90KGlub2RlKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQKLWFmZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JcHJfZGVidWcoIkFGRlM6IGRlbGV0ZV9pbm9kZShpbm89JWx1LCBubGluaz0ldSlcbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOwotCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQlpbm9kZS0+aV9zaXplID0gMDsKLQlhZmZzX3RydW5jYXRlKGlub2RlKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci0JYWZmc19mcmVlX2Jsb2NrKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8pOwotfQotCi12b2lkCi1hZmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCithZmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBjYWNoZV9wYWdlOworCXByX2RlYnVnKCJBRkZTOiBldmljdF9pbm9kZShpbm89JWx1LCBubGluaz0ldSlcbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAotCXByX2RlYnVnKCJBRkZTOiBjbGVhcl9pbm9kZShpbm89JWx1LCBubGluaz0ldSlcbiIsIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOworCWlmICghaW5vZGUtPmlfbmxpbmspIHsKKwkJaW5vZGUtPmlfc2l6ZSA9IDA7CisJCWFmZnNfdHJ1bmNhdGUoaW5vZGUpOworCX0KIAorCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJYWZmc19mcmVlX3ByZWFsbG9jKGlub2RlKTsKIAljYWNoZV9wYWdlID0gKHVuc2lnbmVkIGxvbmcpQUZGU19JKGlub2RlKS0+aV9sYzsKIAlpZiAoY2FjaGVfcGFnZSkgewpAQCAtMjcxLDYgKzI3Niw5IEBACiAJYWZmc19icmVsc2UoQUZGU19JKGlub2RlKS0+aV9leHRfYmgpOwogCUFGRlNfSShpbm9kZSktPmlfZXh0X2xhc3QgPSB+MTsKIAlBRkZTX0koaW5vZGUpLT5pX2V4dF9iaCA9IE5VTEw7CisKKwlpZiAoIWlub2RlLT5pX25saW5rKQorCQlhZmZzX2ZyZWVfYmxvY2soaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubyk7CiB9CiAKIHN0cnVjdCBpbm9kZSAqCmRpZmYgLS1naXQgYS9mcy9hZmZzL3N1cGVyLmMgYi9mcy9hZmZzL3N1cGVyLmMKaW5kZXggMTZhM2U0Ny4uMzNjNGU3ZSAxMDA2NDQKLS0tIGEvZnMvYWZmcy9zdXBlci5jCisrKyBiL2ZzL2FmZnMvc3VwZXIuYwpAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIGludCBhZmZzX3JlbW91bnQgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpOwogCiBzdGF0aWMgdm9pZAotYWZmc19jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGNsZWFuKQorYWZmc19jb21taXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQsIGludCBjbGVhbikKIHsKIAlzdHJ1Y3QgYWZmc19zYl9pbmZvICpzYmkgPSBBRkZTX1NCKHNiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JpLT5zX3Jvb3RfYmg7CkBAIC0zNiw2ICszNiw4IEBACiAJc2Vjc190b19kYXRlc3RhbXAoZ2V0X3NlY29uZHMoKSwgJnRhaWwtPmRpc2tfY2hhbmdlKTsKIAlhZmZzX2ZpeF9jaGVja3N1bShzYiwgYmgpOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwlpZiAod2FpdCkKKwkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDYsOCArNDgsOCBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKLQkJYWZmc19jb21taXRfc3VwZXIoc2IsIDEpOworCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSAmJiBzYi0+c19kaXJ0KQorCQlhZmZzX2NvbW1pdF9zdXBlcihzYiwgMSwgMSk7CiAKIAlrZnJlZShzYmktPnNfcHJlZml4KTsKIAlhZmZzX2ZyZWVfYml0bWFwKHNiKTsKQEAgLTYxLDI3ICs2MywyMCBAQAogc3RhdGljIHZvaWQKIGFmZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgY2xlYW4gPSAyOwotCiAJbG9ja19zdXBlcihzYik7Ci0JaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCS8vCWlmIChzYmktPnNfYml0bWFwW2ldLmJtX2JoKSB7Ci0JCS8vCQlpZiAoYnVmZmVyX2RpcnR5KHNiaS0+c19iaXRtYXBbaV0uYm1fYmgpKSB7Ci0JCS8vCQkJY2xlYW4gPSAwOwotCQlhZmZzX2NvbW1pdF9zdXBlcihzYiwgY2xlYW4pOwotCQlzYi0+c19kaXJ0ID0gIWNsZWFuOwkvKiByZWRvIHVudGlsIGJpdG1hcCBzeW5jZWQgKi8KLQl9IGVsc2UKLQkJc2ItPnNfZGlydCA9IDA7CisJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQorCQlhZmZzX2NvbW1pdF9zdXBlcihzYiwgMSwgMik7CisJc2ItPnNfZGlydCA9IDA7CiAJdW5sb2NrX3N1cGVyKHNiKTsKIAotCXByX2RlYnVnKCJBRkZTOiB3cml0ZV9zdXBlcigpIGF0ICVsdSwgY2xlYW49JWRcbiIsIGdldF9zZWNvbmRzKCksIGNsZWFuKTsKKwlwcl9kZWJ1ZygiQUZGUzogd3JpdGVfc3VwZXIoKSBhdCAlbHUsIGNsZWFuPTJcbiIsIGdldF9zZWNvbmRzKCkpOwogfQogCiBzdGF0aWMgaW50CiBhZmZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7CiAJbG9ja19zdXBlcihzYik7Ci0JYWZmc19jb21taXRfc3VwZXIoc2IsIDIpOworCWFmZnNfY29tbWl0X3N1cGVyKHNiLCB3YWl0LCAyKTsKIAlzYi0+c19kaXJ0ID0gMDsKIAl1bmxvY2tfc3VwZXIoc2IpOwogCXJldHVybiAwOwpAQCAtMTQwLDggKzEzNSw3IEBACiAJLmFsbG9jX2lub2RlCT0gYWZmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGFmZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBhZmZzX3dyaXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBhZmZzX2RlbGV0ZV9pbm9kZSwKLQkuY2xlYXJfaW5vZGUJPSBhZmZzX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGFmZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGFmZnNfcHV0X3N1cGVyLAogCS53cml0ZV9zdXBlcgk9IGFmZnNfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBhZmZzX3N5bmNfZnMsCkBAIC01NTQsOSArNTQ4LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJc2ItPnNfZGlydCA9IDE7Ci0JCXdoaWxlIChzYi0+c19kaXJ0KQotCQkJYWZmc193cml0ZV9zdXBlcihzYik7CisJCWFmZnNfd3JpdGVfc3VwZXIoc2IpOwogCQlhZmZzX2ZyZWVfYml0bWFwKHNiKTsKIAl9IGVsc2UKIAkJcmVzID0gYWZmc19pbml0X2JpdG1hcChzYiwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL0tjb25maWcgYi9mcy9hZnMvS2NvbmZpZwppbmRleCA1YzRlNjFkLi44Zjk3NWYyIDEwMDY0NAotLS0gYS9mcy9hZnMvS2NvbmZpZworKysgYi9mcy9hZnMvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAl0cmlzdGF0ZSAiQW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUykgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBJTkVUICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBBRl9SWFJQQworCXNlbGVjdCBETlNfUkVTT0xWRVIKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgZ2V0IGFuIGV4cGVyaW1lbnRhbCBBbmRyZXcgRmlsZSBTeXN0ZW0KIAkgIGRyaXZlci4gSXQgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgdW5zZWN1cmVkIHJlYWQtb25seSBBRlMgYWNjZXNzLgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NlbGwuYyBiL2ZzL2Fmcy9jZWxsLmMKaW5kZXggZTE5YzEzZi4uZmZlYTM1YyAxMDA2NDQKLS0tIGEvZnMvYWZzL2NlbGwuYworKysgYi9mcy9hZnMvY2VsbC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tleS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZG5zX3Jlc29sdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxrZXlzL3J4cnBjLXR5cGUuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgpAQCAtMzYsNiArMzcsOCBAQAogCXN0cnVjdCBrZXkgKmtleTsKIAlzaXplX3QgbmFtZWxlbjsKIAljaGFyIGtleW5hbWVbNCArIEFGU19NQVhDRUxMTkFNRSArIDFdLCAqY3AsICpkcCwgKm5leHQ7CisJY2hhciAgKmR2bGxpc3QgPSBOVUxMLCAqX3ZsbGlzdCA9IE5VTEw7CisJY2hhciAgZGVsaW1pdGVyID0gJzonOwogCWludCByZXQ7CiAKIAlfZW50ZXIoIiVzLCVzIiwgbmFtZSwgdmxsaXN0KTsKQEAgLTQzLDggKzQ2LDEwIEBACiAJQlVHX09OKCFuYW1lKTsgLyogVE9ETzogd2FudCB0byBsb29rIHVwICJ0aGlzIGNlbGwiIGluIHRoZSBjYWNoZSAqLwogCiAJbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKLQlpZiAobmFtZWxlbiA+IEFGU19NQVhDRUxMTkFNRSkKKwlpZiAobmFtZWxlbiA+IEFGU19NQVhDRUxMTkFNRSkgeworCQlfbGVhdmUoIiA9IC1FTkFNRVRPT0xPTkciKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CisJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBjZWxsIHJlY29yZCAqLwogCWNlbGwgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWZzX2NlbGwpICsgbmFtZWxlbiArIDEsIEdGUF9LRVJORUwpOwpAQCAtNjQsMTUgKzY5LDMxIEBACiAJSU5JVF9MSVNUX0hFQUQoJmNlbGwtPnZsX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZjZWxsLT52bF9sb2NrKTsKIAorCS8qIGlmIHRoZSBpcCBhZGRyZXNzIGlzIGludmFsaWQsIHRyeSBkbnMgcXVlcnkgKi8KKwlpZiAoIXZsbGlzdCB8fCBzdHJsZW4odmxsaXN0KSA8IDcpIHsKKwkJcmV0ID0gZG5zX3F1ZXJ5KCJhZnNkYiIsIG5hbWUsIG5hbWVsZW4sICJpcHY0IiwgJmR2bGxpc3QsIE5VTEwpOworCQlpZiAocmV0IDwgMCkgeworCQkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCQl9CisJCV92bGxpc3QgPSBkdmxsaXN0OworCisJCS8qIGNoYW5nZSB0aGUgZGVsaW1pdGVyIGZvciB1c2VyLXNwYWNlIHJlcGx5ICovCisJCWRlbGltaXRlciA9ICcsJzsKKworCX0gZWxzZSB7CisJCV92bGxpc3QgPSB2bGxpc3Q7CisJfQorCiAJLyogZmlsbCBpbiB0aGUgVkwgc2VydmVyIGxpc3QgZnJvbSB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCiAJZG8gewogCQl1bnNpZ25lZCBhLCBiLCBjLCBkOwogCi0JCW5leHQgPSBzdHJjaHIodmxsaXN0LCAnOicpOworCQluZXh0ID0gc3RyY2hyKF92bGxpc3QsIGRlbGltaXRlcik7CiAJCWlmIChuZXh0KQogCQkJKm5leHQrKyA9IDA7CiAKLQkJaWYgKHNzY2FuZih2bGxpc3QsICIldS4ldS4ldS4ldSIsICZhLCAmYiwgJmMsICZkKSAhPSA0KQorCQlpZiAoc3NjYW5mKF92bGxpc3QsICIldS4ldS4ldS4ldSIsICZhLCAmYiwgJmMsICZkKSAhPSA0KQogCQkJZ290byBiYWRfYWRkcmVzczsKIAogCQlpZiAoYSA+IDI1NSB8fCBiID4gMjU1IHx8IGMgPiAyNTUgfHwgZCA+IDI1NSkKQEAgLTgxLDcgKzEwMiw3IEBACiAJCWNlbGwtPnZsX2FkZHJzW2NlbGwtPnZsX25hZGRycysrXS5zX2FkZHIgPQogCQkJaHRvbmwoKGEgPDwgMjQpIHwgKGIgPDwgMTYpIHwgKGMgPDwgOCkgfCBkKTsKIAotCX0gd2hpbGUgKGNlbGwtPnZsX25hZGRycyA8IEFGU19DRUxMX01BWF9BRERSUyAmJiAodmxsaXN0ID0gbmV4dCkpOworCX0gd2hpbGUgKGNlbGwtPnZsX25hZGRycyA8IEFGU19DRUxMX01BWF9BRERSUyAmJiAoX3ZsbGlzdCA9IG5leHQpKTsKIAogCS8qIGNyZWF0ZSBhIGtleSB0byByZXByZXNlbnQgYW4gYW5vbnltb3VzIHVzZXIgKi8KIAltZW1jcHkoa2V5bmFtZSwgImFmc0AiLCA0KTsKQEAgLTExMCw2ICsxMzEsNyBAQAogCXJldCA9IC1FSU5WQUw7CiBlcnJvcjoKIAlrZXlfcHV0KGNlbGwtPmFub255bW91c19rZXkpOworCWtmcmVlKGR2bGxpc3QpOwogCWtmcmVlKGNlbGwpOwogCV9sZWF2ZSgiID0gJWQiLCByZXQpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0yMDEsMTQgKzIyMywxMiBAQAogCX0KIAogCWNwID0gc3RyY2hyKHJvb3RjZWxsLCAnOicpOwotCWlmICghY3ApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJrQUZTOiBubyBWTCBzZXJ2ZXIgSVAgYWRkcmVzc2VzIHNwZWNpZmllZFxuIik7Ci0JCV9sZWF2ZSgiID0gLUVJTlZBTCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaWYgKCFjcCkKKwkJX2RlYnVnKCJrQUZTOiBubyBWTCBzZXJ2ZXIgSVAgYWRkcmVzc2VzIHNwZWNpZmllZCIpOworCWVsc2UKKwkJKmNwKysgPSAwOwogCiAJLyogYWxsb2NhdGUgYSBjZWxsIHJlY29yZCBmb3IgdGhlIHJvb3QgY2VsbCAqLwotCSpjcCsrID0gMDsKIAluZXdfcm9vdCA9IGFmc19jZWxsX2NyZWF0ZShyb290Y2VsbCwgY3ApOwogCWlmIChJU19FUlIobmV3X3Jvb3QpKSB7CiAJCV9sZWF2ZSgiID0gJWxkIiwgUFRSX0VSUihuZXdfcm9vdCkpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2lub2RlLmMgYi9mcy9hZnMvaW5vZGUuYwppbmRleCBkMDBiMzEyLi4zMjBmZmVmIDEwMDY0NAotLS0gYS9mcy9hZnMvaW5vZGUuYworKysgYi9mcy9hZnMvaW5vZGUuYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAvKgogICogY2xlYXIgYW4gQUZTIGlub2RlCiAgKi8KLXZvaWQgYWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBhZnNfcGVybWl0cyAqcGVybWl0czsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTsKQEAgLTMzNSw2ICszMzUsOSBAQAogCiAJQVNTRVJUQ01QKGlub2RlLT5pX2lubywgPT0sIHZub2RlLT5maWQudm5vZGUpOwogCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCiAJYWZzX2dpdmVfdXBfY2FsbGJhY2sodm5vZGUpOwogCiAJaWYgKHZub2RlLT5zZXJ2ZXIpIHsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNWY2NzliNy4uODY3OTA4OSAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTU2NSw3ICs1NjUsNyBAQAogZXh0ZXJuIGludCBhZnNfdmFsaWRhdGUoc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3Qga2V5ICopOwogZXh0ZXJuIGludCBhZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7CiBleHRlcm4gaW50IGFmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwotZXh0ZXJuIHZvaWQgYWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGFmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAKIC8qCiAgKiBtYWluLmMKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jCmluZGV4IDY2ZDU0ZDMuLmNmZDFjYmUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tYWluLmMKKysrIGIvZnMvYWZzL21haW4uYwpAQCAtMTExLDYgKzExMSw4IEBACiAKIAkvKiBpbml0aWFsaXNlIHRoZSBjYWxsYmFjayB1cGRhdGUgcHJvY2VzcyAqLwogCXJldCA9IGFmc19jYWxsYmFja191cGRhdGVfaW5pdCgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX2NhbGxiYWNrX3VwZGF0ZV9pbml0OwogCiAJLyogY3JlYXRlIHRoZSBSeFJQQyB0cmFuc3BvcnQgKi8KIAlyZXQgPSBhZnNfb3Blbl9zb2NrZXQoKTsKQEAgLTEyNywxNSArMTI5LDE2IEBACiBlcnJvcl9mczoKIAlhZnNfY2xvc2Vfc29ja2V0KCk7CiBlcnJvcl9vcGVuX3NvY2tldDoKKwlhZnNfY2FsbGJhY2tfdXBkYXRlX2tpbGwoKTsKK2Vycm9yX2NhbGxiYWNrX3VwZGF0ZV9pbml0OgorCWFmc192bG9jYXRpb25fcHVyZ2UoKTsKIGVycm9yX3ZsX3VwZGF0ZV9pbml0OgorCWFmc19jZWxsX3B1cmdlKCk7CiBlcnJvcl9jZWxsX2luaXQ6CiAjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCiAJZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOwogZXJyb3JfY2FjaGU6CiAjZW5kaWYKLQlhZnNfY2FsbGJhY2tfdXBkYXRlX2tpbGwoKTsKLQlhZnNfdmxvY2F0aW9uX3B1cmdlKCk7Ci0JYWZzX2NlbGxfcHVyZ2UoKTsKIAlhZnNfcHJvY19jbGVhbnVwKCk7CiAJcmN1X2JhcnJpZXIoKTsKIAlwcmludGsoS0VSTl9FUlIgImtBRlM6IGZhaWxlZCB0byByZWdpc3RlcjogJWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvcnhycGMuYyBiL2ZzL2Fmcy9yeHJwYy5jCmluZGV4IDY3Y2Y4MTAuLjY1NGQ4ZmQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9yeHJwYy5jCisrKyBiL2ZzL2Fmcy9yeHJwYy5jCkBAIC0xMDAsNiArMTAwLDcgQEAKIAlyZXQgPSBrZXJuZWxfYmluZChzb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNyeCwgc2l6ZW9mKHNyeCkpOwogCWlmIChyZXQgPCAwKSB7CiAJCXNvY2tfcmVsZWFzZShzb2NrZXQpOworCQlkZXN0cm95X3dvcmtxdWV1ZShhZnNfYXN5bmNfY2FsbHMpOwogCQlfbGVhdmUoIiA9ICVkIFtiaW5kXSIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuYwppbmRleCBlOTMyZTVhLi45Y2Y4MGYwIDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYworKysgYi9mcy9hZnMvc3VwZXIuYwpAQCAtNDksNyArNDksNyBAQAogCS5zdGF0ZnMJCT0gYWZzX3N0YXRmcywKIAkuYWxsb2NfaW5vZGUJPSBhZnNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKLQkuY2xlYXJfaW5vZGUJPSBhZnNfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gYWZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBhZnNfcHV0X3N1cGVyLAogCS5zaG93X29wdGlvbnMJPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKIH07CmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggYjRmYTNiMC4uN2NhNDE4MSAxMDA2NDQKLS0tIGEvZnMvYXR0ci5jCisrKyBiL2ZzL2F0dHIuYwpAQCAtMTQsMzUgKzE0LDUzIEBACiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCi0vKiBUYWtlbiBvdmVyIGZyb20gdGhlIG9sZCBjb2RlLi4uICovCi0KLS8qIFBPU0lYIFVJRC9HSUQgdmVyaWZpY2F0aW9uIGZvciBzZXR0aW5nIGlub2RlIGF0dHJpYnV0ZXMuICovCisvKioKKyAqIGlub2RlX2NoYW5nZV9vayAtIGNoZWNrIGlmIGF0dHJpYnV0ZSBjaGFuZ2VzIHRvIGFuIGlub2RlIGFyZSBhbGxvd2VkCisgKiBAaW5vZGU6CWlub2RlIHRvIGNoZWNrCisgKiBAYXR0cjoJYXR0cmlidXRlcyB0byBjaGFuZ2UKKyAqCisgKiBDaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMgY29udGFpbmVkIGluIEBhdHRyCisgKiBpbiB0aGUgZ2l2ZW4gaW5vZGUuICBUaGlzIGluY2x1ZGVzIHRoZSBub3JtYWwgdW5peCBhY2Nlc3MgcGVybWlzc2lvbgorICogY2hlY2tzLCBhcyB3ZWxsIGFzIGNoZWNrcyBmb3IgcmxpbWl0cyBhbmQgb3RoZXJzLgorICoKKyAqIFNob3VsZCBiZSBjYWxsZWQgYXMgdGhlIGZpcnN0IHRoaW5nIGluIC0+c2V0YXR0ciBpbXBsZW1lbnRhdGlvbnMsCisgKiBwb3NzaWJseSBhZnRlciB0YWtpbmcgYWRkaXRpb25hbCBsb2Nrcy4KKyAqLwogaW50IGlub2RlX2NoYW5nZV9vayhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7Ci0JaW50IHJldHZhbCA9IC1FUEVSTTsKIAl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLT5pYV92YWxpZDsKIAorCS8qCisJICogRmlyc3QgY2hlY2sgc2l6ZSBjb25zdHJhaW50cy4gIFRoZXNlIGNhbid0IGJlIG92ZXJyaWRlbiB1c2luZworCSAqIEFUVFJfRk9SQ0UuCisJICovCisJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CisJCWludCBlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJLyogSWYgZm9yY2UgaXMgc2V0IGRvIGl0IGFueXdheS4gKi8KIAlpZiAoaWFfdmFsaWQgJiBBVFRSX0ZPUkNFKQotCQlnb3RvIGZpbmU7CisJCXJldHVybiAwOwogCiAJLyogTWFrZSBzdXJlIGEgY2FsbGVyIGNhbiBjaG93bi4gKi8KIAlpZiAoKGlhX3ZhbGlkICYgQVRUUl9VSUQpICYmCiAJICAgIChjdXJyZW50X2ZzdWlkKCkgIT0gaW5vZGUtPmlfdWlkIHx8CiAJICAgICBhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSAmJiAhY2FwYWJsZShDQVBfQ0hPV04pKQotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gLUVQRVJNOwogCiAJLyogTWFrZSBzdXJlIGNhbGxlciBjYW4gY2hncnAuICovCiAJaWYgKChpYV92YWxpZCAmIEFUVFJfR0lEKSAmJgogCSAgICAoY3VycmVudF9mc3VpZCgpICE9IGlub2RlLT5pX3VpZCB8fAogCSAgICAoIWluX2dyb3VwX3AoYXR0ci0+aWFfZ2lkKSAmJiBhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgJiYKIAkgICAgIWNhcGFibGUoQ0FQX0NIT1dOKSkKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIE1ha2Ugc3VyZSBhIGNhbGxlciBjYW4gY2htb2QuICovCiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9NT0RFKSB7CiAJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKLQkJCWdvdG8gZXJyb3I7CisJCQlyZXR1cm4gLUVQRVJNOwogCQkvKiBBbHNvIGNoZWNrIHRoZSBzZXRnaWQgYml0ISAqLwogCQlpZiAoIWluX2dyb3VwX3AoKGlhX3ZhbGlkICYgQVRUUl9HSUQpID8gYXR0ci0+aWFfZ2lkIDoKIAkJCQlpbm9kZS0+aV9naWQpICYmICFjYXBhYmxlKENBUF9GU0VUSUQpKQpAQCAtNTIsMTIgKzcwLDEwIEBACiAJLyogQ2hlY2sgZm9yIHNldHRpbmcgdGhlIGlub2RlIHRpbWUuICovCiAJaWYgKGlhX3ZhbGlkICYgKEFUVFJfTVRJTUVfU0VUIHwgQVRUUl9BVElNRV9TRVQgfCBBVFRSX1RJTUVTX1NFVCkpIHsKIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQotCQkJZ290byBlcnJvcjsKKwkJCXJldHVybiAtRVBFUk07CiAJfQotZmluZToKLQlyZXR2YWwgPSAwOwotZXJyb3I6Ci0JcmV0dXJuIHJldHZhbDsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9jaGFuZ2Vfb2spOwogCkBAIC0xMDUsMjEgKzEyMSwyMSBAQAogRVhQT1JUX1NZTUJPTChpbm9kZV9uZXdzaXplX29rKTsKIAogLyoqCi0gKiBnZW5lcmljX3NldGF0dHIgLSBjb3B5IHNpbXBsZSBtZXRhZGF0YSB1cGRhdGVzIGludG8gdGhlIGdlbmVyaWMgaW5vZGUKKyAqIHNldGF0dHJfY29weSAtIGNvcHkgc2ltcGxlIG1ldGFkYXRhIHVwZGF0ZXMgaW50byB0aGUgZ2VuZXJpYyBpbm9kZQogICogQGlub2RlOgl0aGUgaW5vZGUgdG8gYmUgdXBkYXRlZAogICogQGF0dHI6CXRoZSBuZXcgYXR0cmlidXRlcwogICoKLSAqIGdlbmVyaWNfc2V0YXR0ciBtdXN0IGJlIGNhbGxlZCB3aXRoIGlfbXV0ZXggaGVsZC4KKyAqIHNldGF0dHJfY29weSBtdXN0IGJlIGNhbGxlZCB3aXRoIGlfbXV0ZXggaGVsZC4KICAqCi0gKiBnZW5lcmljX3NldGF0dHIgdXBkYXRlcyB0aGUgaW5vZGUncyBtZXRhZGF0YSB3aXRoIHRoYXQgc3BlY2lmaWVkCisgKiBzZXRhdHRyX2NvcHkgdXBkYXRlcyB0aGUgaW5vZGUncyBtZXRhZGF0YSB3aXRoIHRoYXQgc3BlY2lmaWVkCiAgKiBpbiBhdHRyLiBOb3RpY2FibHkgbWlzc2luZyBpcyBpbm9kZSBzaXplIHVwZGF0ZSwgd2hpY2ggaXMgbW9yZSBjb21wbGV4Ci0gKiBhcyBpdCByZXF1aXJlcyBwYWdlY2FjaGUgdXBkYXRlcy4gU2VlIHNpbXBsZV9zZXRzaXplLgorICogYXMgaXQgcmVxdWlyZXMgcGFnZWNhY2hlIHVwZGF0ZXMuCiAgKgogICogVGhlIGlub2RlIGlzIG5vdCBtYXJrZWQgYXMgZGlydHkgYWZ0ZXIgdGhpcyBvcGVyYXRpb24uIFRoZSByYXRpb25hbGUgaXMKICAqIHRoYXQgZm9yICJzaW1wbGUiIGZpbGVzeXN0ZW1zLCB0aGUgc3RydWN0IGlub2RlIGlzIHRoZSBpbm9kZSBzdG9yYWdlLgogICogVGhlIGNhbGxlciBpcyBmcmVlIHRvIG1hcmsgdGhlIGlub2RlIGRpcnR5IGFmdGVyd2FyZHMgaWYgbmVlZGVkLgogICovCi12b2lkIGdlbmVyaWNfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit2b2lkIHNldGF0dHJfY29weShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci0+aWFfdmFsaWQ7CiAKQEAgLTE0NCwzMiArMTYwLDcgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJfQogfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX3NldGF0dHIpOwotCi0vKgotICogbm90ZSB0aGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHRoZSBuZXcgdHJ1bmNhdGUgc2VxdWVuY2Ugc2hvdWxkIGJlCi0gKiB1c2VkIGluc3RlYWQgLS0gc2VlIGVnLiBzaW1wbGVfc2V0c2l6ZSwgZ2VuZXJpY19zZXRhdHRyLgotICovCi1pbnQgaW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCi17Ci0JdW5zaWduZWQgaW50IGlhX3ZhbGlkID0gYXR0ci0+aWFfdmFsaWQ7Ci0KLQlpZiAoaWFfdmFsaWQgJiBBVFRSX1NJWkUgJiYKLQkgICAgYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJaW50IGVycm9yOwotCi0JCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlnZW5lcmljX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCi0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW5vZGVfc2V0YXR0cik7CitFWFBPUlRfU1lNQk9MKHNldGF0dHJfY29weSk7CiAKIGludCBub3RpZnlfY2hhbmdlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBpYXR0ciAqIGF0dHIpCiB7CkBAIC0yMzcsMTMgKzIyOCwxMCBAQAogCWlmIChpYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJZG93bl93cml0ZSgmZGVudHJ5LT5kX2lub2RlLT5pX2FsbG9jX3NlbSk7CiAKLQlpZiAoaW5vZGUtPmlfb3AgJiYgaW5vZGUtPmlfb3AtPnNldGF0dHIpIHsKKwlpZiAoaW5vZGUtPmlfb3AtPnNldGF0dHIpCiAJCWVycm9yID0gaW5vZGUtPmlfb3AtPnNldGF0dHIoZGVudHJ5LCBhdHRyKTsKLQl9IGVsc2UgewotCQllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCX0KKwllbHNlCisJCWVycm9yID0gc2ltcGxlX3NldGF0dHIoZGVudHJ5LCBhdHRyKTsKIAogCWlmIChpYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJdXBfd3JpdGUoJmRlbnRyeS0+ZF9pbm9kZS0+aV9hbGxvY19zZW0pOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL3Jvb3QuYyBiL2ZzL2F1dG9mcy9yb290LmMKaW5kZXggOWEwNTIwYi4uMTFiMWVhNyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzL3Jvb3QuYworKysgYi9mcy9hdXRvZnMvcm9vdC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSAiYXV0b2ZzX2kuaCIKIApAQCAtMjUsMTMgKzI2LDE3IEBACiBzdGF0aWMgaW50IGF1dG9mc19yb290X3VubGluayhzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogc3RhdGljIGludCBhdXRvZnNfcm9vdF9ybWRpcihzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogc3RhdGljIGludCBhdXRvZnNfcm9vdF9ta2RpcihzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosaW50KTsKLXN0YXRpYyBpbnQgYXV0b2ZzX3Jvb3RfaW9jdGwoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosdW5zaWduZWQgaW50LHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGxvbmcgYXV0b2ZzX3Jvb3RfaW9jdGwoc3RydWN0IGZpbGUgKix1bnNpZ25lZCBpbnQsdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgbG9uZyBhdXRvZnNfcm9vdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKix1bnNpZ25lZCBpbnQsdW5zaWduZWQgbG9uZyk7CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV0b2ZzX3Jvb3Rfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGF1dG9mc19yb290X3JlYWRkaXIsCi0JLmlvY3RsCQk9IGF1dG9mc19yb290X2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGF1dG9mc19yb290X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gYXV0b2ZzX3Jvb3RfY29tcGF0X2lvY3RsLAorI2VuZGlmCiB9OwogCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBhdXRvZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zID0gewpAQCAtNDkyLDYgKzQ5NywyNSBAQAogfQogCiAvKiBHZXQvc2V0IHRpbWVvdXQgaW9jdGwoKSBvcGVyYXRpb24gKi8KKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW5saW5lIGludCBhdXRvZnNfY29tcGF0X2dldF9zZXRfdGltZW91dChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkJIHVuc2lnbmVkIGludCBfX3VzZXIgKnApCit7CisJdW5zaWduZWQgbG9uZyBudGltZW91dDsKKworCWlmIChnZXRfdXNlcihudGltZW91dCwgcCkgfHwKKwkgICAgcHV0X3VzZXIoc2JpLT5leHBfdGltZW91dCAvIEhaLCBwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAobnRpbWVvdXQgPiBVSU5UX01BWC9IWikKKwkJc2JpLT5leHBfdGltZW91dCA9IDA7CisJZWxzZQorCQlzYmktPmV4cF90aW1lb3V0ID0gbnRpbWVvdXQgKiBIWjsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgaW50IGF1dG9mc19nZXRfc2V0X3RpbWVvdXQoc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCiAJCQkJCSB1bnNpZ25lZCBsb25nIF9fdXNlciAqcCkKIHsKQEAgLTU0Niw3ICs1NzAsNyBAQAogICogaW9jdGwoKSdzIG9uIHRoZSByb290IGRpcmVjdG9yeSBpcyB0aGUgY2hpZWYgbWV0aG9kIGZvciB0aGUgZGFlbW9uIHRvCiAgKiBnZW5lcmF0ZSBrZXJuZWwgcmVhY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQgYXV0b2ZzX3Jvb3RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCitzdGF0aWMgaW50IGF1dG9mc19kb19yb290X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mc19zYmkoaW5vZGUtPmlfc2IpOwpAQCAtNTcxLDYgKzU5NSwxMCBAQAogCQlyZXR1cm4gMDsKIAljYXNlIEFVVE9GU19JT0NfUFJPVE9WRVI6IC8qIEdldCBwcm90b2NvbCB2ZXJzaW9uICovCiAJCXJldHVybiBhdXRvZnNfZ2V0X3Byb3RvdmVyKGFyZ3ApOworI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIEFVVE9GU19JT0NfU0VUVElNRU9VVDMyOgorCQlyZXR1cm4gYXV0b2ZzX2NvbXBhdF9nZXRfc2V0X3RpbWVvdXQoc2JpLCBhcmdwKTsKKyNlbmRpZgogCWNhc2UgQVVUT0ZTX0lPQ19TRVRUSU1FT1VUOgogCQlyZXR1cm4gYXV0b2ZzX2dldF9zZXRfdGltZW91dChzYmksIGFyZ3ApOwogCWNhc2UgQVVUT0ZTX0lPQ19FWFBJUkU6CkBAIC01NzksNCArNjA3LDM3IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQorCiB9CisKK3N0YXRpYyBsb25nIGF1dG9mc19yb290X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBhdXRvZnNfZG9fcm9vdF9pb2N0bChmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAorCQkJCSAgIGZpbHAsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcgYXV0b2ZzX3Jvb3RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlpZiAoY21kID09IEFVVE9GU19JT0NfUkVBRFkgfHwgY21kID09IEFVVE9GU19JT0NfRkFJTCkKKwkJcmV0ID0gYXV0b2ZzX2RvX3Jvb3RfaW9jdGwoaW5vZGUsIGZpbHAsIGNtZCwgYXJnKTsKKwllbHNlCisJCXJldCA9IGF1dG9mc19kb19yb290X2lvY3RsKGlub2RlLCBmaWxwLCBjbWQsCisJCQkodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggZGI0MTE3ZS4uY2IxYmQzOCAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTE4LDcgKzE4LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKwogI2luY2x1ZGUgImF1dG9mc19pLmgiCiAKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosY29uc3QgY2hhciAqKTsKQEAgLTI2LDYgKzI4LDcgQEAKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfcm1kaXIoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqKTsKIHN0YXRpYyBpbnQgYXV0b2ZzNF9kaXJfbWtkaXIoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCk7CiBzdGF0aWMgbG9uZyBhdXRvZnM0X3Jvb3RfaW9jdGwoc3RydWN0IGZpbGUgKix1bnNpZ25lZCBpbnQsdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgbG9uZyBhdXRvZnM0X3Jvb3RfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosdW5zaWduZWQgaW50LHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIGludCBhdXRvZnM0X2Rpcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2xvb2t1cChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiBzdGF0aWMgdm9pZCAqYXV0b2ZzNF9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CkBAIC00MCw2ICs0Myw5IEBACiAJLnJlYWRkaXIJPSBkY2FjaGVfcmVhZGRpciwKIAkubGxzZWVrCQk9IGRjYWNoZV9kaXJfbHNlZWssCiAJLnVubG9ja2VkX2lvY3RsCT0gYXV0b2ZzNF9yb290X2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gYXV0b2ZzNF9yb290X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogfTsKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdXRvZnM0X2Rpcl9vcGVyYXRpb25zID0gewpAQCAtMTk4LDggKzIwNCw3IEBACiAJfQogCiAJLyogSW5pdGlhbGl6ZSBleHBpcnkgY291bnRlciBhZnRlciBzdWNjZXNzZnVsIG1vdW50ICovCi0JaWYgKGlubykKLQkJaW5vLT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCWluby0+bGFzdF91c2VkID0gamlmZmllczsKIAogCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKIAlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1BFTkRJTkc7CkBAIC04NDAsNiArODQ1LDI2IEBACiB9CiAKIC8qIEdldC9zZXQgdGltZW91dCBpb2N0bCgpIG9wZXJhdGlvbiAqLworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBpbmxpbmUgaW50IGF1dG9mczRfY29tcGF0X2dldF9zZXRfdGltZW91dChzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKKwkJCQkJIGNvbXBhdF91bG9uZ190IF9fdXNlciAqcCkKK3sKKwlpbnQgcnY7CisJdW5zaWduZWQgbG9uZyBudGltZW91dDsKKworCWlmICgocnYgPSBnZXRfdXNlcihudGltZW91dCwgcCkpIHx8CisJICAgICAocnYgPSBwdXRfdXNlcihzYmktPmV4cF90aW1lb3V0L0haLCBwKSkpCisJCXJldHVybiBydjsKKworCWlmIChudGltZW91dCA+IFVJTlRfTUFYL0haKQorCQlzYmktPmV4cF90aW1lb3V0ID0gMDsKKwllbHNlCisJCXNiaS0+ZXhwX3RpbWVvdXQgPSBudGltZW91dCAqIEhaOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBpbnQgYXV0b2ZzNF9nZXRfc2V0X3RpbWVvdXQoc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmksCiAJCQkJCSB1bnNpZ25lZCBsb25nIF9fdXNlciAqcCkKIHsKQEAgLTkzMyw2ICs5NTgsMTAgQEAKIAkJcmV0dXJuIGF1dG9mczRfZ2V0X3Byb3Rvc3VidmVyKHNiaSwgcCk7CiAJY2FzZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQ6CiAJCXJldHVybiBhdXRvZnM0X2dldF9zZXRfdGltZW91dChzYmksIHApOworI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIEFVVE9GU19JT0NfU0VUVElNRU9VVDMyOgorCQlyZXR1cm4gYXV0b2ZzNF9jb21wYXRfZ2V0X3NldF90aW1lb3V0KHNiaSwgcCk7CisjZW5kaWYKIAogCWNhc2UgQVVUT0ZTX0lPQ19BU0tVTU9VTlQ6CiAJCXJldHVybiBhdXRvZnM0X2Fza191bW91bnQoZmlscC0+Zl9wYXRoLm1udCwgcCk7CkBAIC05NjEsMyArOTkwLDIyIEBACiAKIAlyZXR1cm4gcmV0OwogfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGxvbmcgYXV0b2ZzNF9yb290X2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJaWYgKGNtZCA9PSBBVVRPRlNfSU9DX1JFQURZIHx8IGNtZCA9PSBBVVRPRlNfSU9DX0ZBSUwpCisJCXJldCA9IGF1dG9mczRfcm9vdF9pb2N0bF91bmxvY2tlZChpbm9kZSwgZmlscCwgY21kLCBhcmcpOworCWVsc2UKKwkJcmV0ID0gYXV0b2ZzNF9yb290X2lvY3RsX3VubG9ja2VkKGlub2RlLCBmaWxwLCBjbWQsCisJCQkodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9iZnMuaCBiL2ZzL2Jmcy9iZnMuaAppbmRleCA3MTA5ZTQ1Li5mN2Y4N2UyIDEwMDY0NAotLS0gYS9mcy9iZnMvYmZzLmgKKysrIGIvZnMvYmZzL2Jmcy5oCkBAIC0xNyw3ICsxNyw2IEBACiAJdW5zaWduZWQgbG9uZyBzaV9sZl9lYmxrOwogCXVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7CiAJdW5zaWduZWQgbG9uZyAqc2lfaW1hcDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNpX3NiaDsJCS8qIGJ1ZmZlciBoZWFkZXIgdy9zdXBlcmJsb2NrICovCiAJc3RydWN0IG11dGV4IGJmc19sb2NrOwogfTsKIApkaWZmIC0tZ2l0IGEvZnMvYmZzL2ZpbGUuYyBiL2ZzL2Jmcy9maWxlLmMKaW5kZXggODhiOWEzZi4uZWI2N2VkZCAxMDA2NDQKLS0tIGEvZnMvYmZzL2ZpbGUuYworKysgYi9mcy9iZnMvZmlsZS5jCkBAIC03MCw3ICs3MCw2IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihzYik7CiAJc3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiaCA9IGluZm8tPnNpX3NiaDsKIAogCXBoeXMgPSBiaS0+aV9zYmxvY2sgKyBibG9jazsKIAlpZiAoIWNyZWF0ZSkgewpAQCAtMTEyLDcgKzExMSw2IEBACiAJCWluZm8tPnNpX2ZyZWViIC09IHBoeXMgLSBiaS0+aV9lYmxvY2s7CiAJCWluZm8tPnNpX2xmX2VibGsgPSBiaS0+aV9lYmxvY2sgPSBwaHlzOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJbWFya19idWZmZXJfZGlydHkoc2JoKTsKIAkJZXJyID0gMDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTQ3LDcgKzE0NSw2IEBACiAJICovCiAJaW5mby0+c2lfZnJlZWIgLT0gYmktPmlfZWJsb2NrIC0gYmktPmlfc2Jsb2NrICsgMSAtIGlub2RlLT5pX2Jsb2NrczsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShzYmgpOwogCW1hcF9iaChiaF9yZXN1bHQsIHNiLCBwaHlzKTsKIG91dDoKIAltdXRleF91bmxvY2soJmluZm8tPmJmc19sb2NrKTsKQEAgLTE2OCw5ICsxNjUsMTcgQEAKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewotCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywKLQkJCQkJcGFnZXAsIGZzZGF0YSwgYmZzX2dldF9ibG9jayk7CisJaW50IHJldDsKKworCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsCisJCQkJYmZzX2dldF9ibG9jayk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJbG9mZl90IGlzaXplID0gbWFwcGluZy0+aG9zdC0+aV9zaXplOworCQlpZiAocG9zICsgbGVuID4gaXNpemUpCisJCQl2bXRydW5jYXRlKG1hcHBpbmctPmhvc3QsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc2VjdG9yX3QgYmZzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuYwppbmRleCBmMjJhN2QzLi5jNGRhZjBmIDEwMDY0NAotLS0gYS9mcy9iZnMvaW5vZGUuYworKysgYi9mcy9iZnMvaW5vZGUuYwpAQCAtMzEsNyArMzEsNiBAQAogI2RlZmluZSBkcHJpbnRmKHguLi4pCiAjZW5kaWYKIAotc3RhdGljIHZvaWQgYmZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CiB2b2lkIGR1bXBfaW1hcChjb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCBzdXBlcl9ibG9jayAqcyk7CiAKIHN0cnVjdCBpbm9kZSAqYmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCkBAIC05OSw2ICs5OCwyNCBAQAogCXJldHVybiBFUlJfUFRSKC1FSU8pOwogfQogCitzdGF0aWMgc3RydWN0IGJmc19pbm9kZSAqZmluZF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MTYgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwKQoreworCWlmICgoaW5vIDwgQkZTX1JPT1RfSU5PKSB8fCAoaW5vID4gQkZTX1NCKHNiKS0+c2lfbGFzdGkpKSB7CisJCXByaW50ZigiQmFkIGlub2RlIG51bWJlciAlczolMDh4XG4iLCBzYi0+c19pZCwgaW5vKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCisJaW5vIC09IEJGU19ST09UX0lOTzsKKworCSpwID0gc2JfYnJlYWQoc2IsIDEgKyBpbm8gLyBCRlNfSU5PREVTX1BFUl9CTE9DSyk7CisJaWYgKCEqcCkgeworCQlwcmludGYoIlVuYWJsZSB0byByZWFkIGlub2RlICVzOiUwOHhcbiIsIHNiLT5zX2lkLCBpbm8pOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisKKwlyZXR1cm4gKHN0cnVjdCBiZnNfaW5vZGUgKikoKnApLT5iX2RhdGEgKyAgaW5vICUgQkZTX0lOT0RFU19QRVJfQkxPQ0s7Cit9CisKIHN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBiZnNfc2JfaW5mbyAqaW5mbyA9IEJGU19TQihpbm9kZS0+aV9zYik7CkBAIC0xMDYsMjggKzEyMywxNSBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIGlfc2Jsb2NrOwogCXN0cnVjdCBiZnNfaW5vZGUgKmRpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JaW50IGJsb2NrLCBvZmY7CiAJaW50IGVyciA9IDA7CiAKICAgICAgICAgZHByaW50ZigiaW5vPSUwOHhcbiIsIGlubyk7CiAKLQlpZiAoKGlubyA8IEJGU19ST09UX0lOTykgfHwgKGlubyA+IEJGU19TQihpbm9kZS0+aV9zYiktPnNpX2xhc3RpKSkgewotCQlwcmludGYoIkJhZCBpbm9kZSBudW1iZXIgJXM6JTA4eFxuIiwgaW5vZGUtPmlfc2ItPnNfaWQsIGlubyk7Ci0JCXJldHVybiAtRUlPOwotCX0KKwlkaSA9IGZpbmRfaW5vZGUoaW5vZGUtPmlfc2IsIGlubywgJmJoKTsKKwlpZiAoSVNfRVJSKGRpKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGkpOwogCiAJbXV0ZXhfbG9jaygmaW5mby0+YmZzX2xvY2spOwotCWJsb2NrID0gKGlubyAtIEJGU19ST09UX0lOTykgLyBCRlNfSU5PREVTX1BFUl9CTE9DSyArIDE7Ci0JYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgYmxvY2spOwotCWlmICghYmgpIHsKLQkJcHJpbnRmKCJVbmFibGUgdG8gcmVhZCBpbm9kZSAlczolMDh4XG4iLAotCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm8pOwotCQltdXRleF91bmxvY2soJmluZm8tPmJmc19sb2NrKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0Jb2ZmID0gKGlubyAtIEJGU19ST09UX0lOTykgJSBCRlNfSU5PREVTX1BFUl9CTE9DSzsKLQlkaSA9IChzdHJ1Y3QgYmZzX2lub2RlICopYmgtPmJfZGF0YSArIG9mZjsKIAogCWlmIChpbm8gPT0gQkZTX1JPT1RfSU5PKQogCQlkaS0+aV92dHlwZSA9IGNwdV90b19sZTMyKEJGU19WRElSKTsKQEAgLTE1OCwxMiArMTYyLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBpbm8gPSBpbm9kZS0+aV9pbm87CiAJc3RydWN0IGJmc19pbm9kZSAqZGk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgYmxvY2ssIG9mZjsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgYmZzX3NiX2luZm8gKmluZm8gPSBCRlNfU0Iocyk7CiAJc3RydWN0IGJmc19pbm9kZV9pbmZvICpiaSA9IEJGU19JKGlub2RlKTsKQEAgLTE3MSwyOCArMTc0LDE5IEBACiAJZHByaW50ZigiaW5vPSUwOGx4XG4iLCBpbm8pOwogCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAKLQlpZiAoKGlubyA8IEJGU19ST09UX0lOTykgfHwgKGlubyA+IGluZm8tPnNpX2xhc3RpKSkgewotCQlwcmludGYoImludmFsaWQgaW5vPSUwOGx4XG4iLCBpbm8pOworCWlmIChpbm9kZS0+aV9ubGluaykKIAkJcmV0dXJuOwotCX0KLQkKLQlpbm9kZS0+aV9zaXplID0gMDsKLQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCisJZGkgPSBmaW5kX2lub2RlKHMsIGlub2RlLT5pX2lubywgJmJoKTsKKwlpZiAoSVNfRVJSKGRpKSkKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmaW5mby0+YmZzX2xvY2spOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCi0JYmxvY2sgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAvIEJGU19JTk9ERVNfUEVSX0JMT0NLICsgMTsKLQliaCA9IHNiX2JyZWFkKHMsIGJsb2NrKTsKLQlpZiAoIWJoKSB7Ci0JCXByaW50ZigiVW5hYmxlIHRvIHJlYWQgaW5vZGUgJXM6JTA4bHhcbiIsCi0JCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm8pOwotCQltdXRleF91bmxvY2soJmluZm8tPmJmc19sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQlvZmYgPSAoaW5vIC0gQkZTX1JPT1RfSU5PKSAlIEJGU19JTk9ERVNfUEVSX0JMT0NLOwotCWRpID0gKHN0cnVjdCBiZnNfaW5vZGUgKiliaC0+Yl9kYXRhICsgb2ZmOwotCW1lbXNldCgodm9pZCAqKWRpLCAwLCBzaXplb2Yoc3RydWN0IGJmc19pbm9kZSkpOworCS8qIGNsZWFyIG9uLWRpc2sgaW5vZGUgKi8KKwltZW1zZXQoZGksIDAsIHNpemVvZihzdHJ1Y3QgYmZzX2lub2RlKSk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAKQEAgLTIwOSwzMiArMjAzLDkgQEAKIAkgKiAibGFzdCBibG9jayBvZiB0aGUgbGFzdCBmaWxlIiBldmVuIGlmIHRoZXJlIGlzIG5vCiAJICogcmVhbCBmaWxlIHRoZXJlLCBzYXZlcyB1cyAxIGdhcC4KIAkgKi8KLQlpZiAoaW5mby0+c2lfbGZfZWJsayA9PSBiaS0+aV9lYmxvY2spIHsKKwlpZiAoaW5mby0+c2lfbGZfZWJsayA9PSBiaS0+aV9lYmxvY2spCiAJCWluZm8tPnNpX2xmX2VibGsgPSBiaS0+aV9zYmxvY2sgLSAxOwotCQltYXJrX2J1ZmZlcl9kaXJ0eShpbmZvLT5zaV9zYmgpOwotCX0KIAltdXRleF91bmxvY2soJmluZm8tPmJmc19sb2NrKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCi17Ci0Jc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKHNiKTsKLQotCW11dGV4X2xvY2soJmluZm8tPmJmc19sb2NrKTsKLQltYXJrX2J1ZmZlcl9kaXJ0eShpbmZvLT5zaV9zYmgpOwotCXNiLT5zX2RpcnQgPSAwOwotCW11dGV4X3VubG9jaygmaW5mby0+YmZzX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJmc193cml0ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKLQkJYmZzX3N5bmNfZnMoc2IsIDEpOwotCWVsc2UKLQkJc2ItPnNfZGlydCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpAQCAtMjQ2LDEwICsyMTcsNiBAQAogCiAJbG9ja19rZXJuZWwoKTsKIAotCWlmIChzLT5zX2RpcnQpCi0JCWJmc193cml0ZV9zdXBlcihzKTsKLQotCWJyZWxzZShpbmZvLT5zaV9zYmgpOwogCW11dGV4X2Rlc3Ryb3koJmluZm8tPmJmc19sb2NrKTsKIAlrZnJlZShpbmZvLT5zaV9pbWFwKTsKIAlrZnJlZShpbmZvKTsKQEAgLTMxOSwxMCArMjg2LDggQEAKIAkuYWxsb2NfaW5vZGUJPSBiZnNfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBiZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBiZnNfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IGJmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gYmZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBiZnNfcHV0X3N1cGVyLAotCS53cml0ZV9zdXBlcgk9IGJmc193cml0ZV9zdXBlciwKLQkuc3luY19mcwk9IGJmc19zeW5jX2ZzLAogCS5zdGF0ZnMJCT0gYmZzX3N0YXRmcywKIH07CiAKQEAgLTM0OSw3ICszMTQsNyBAQAogCiBzdGF0aWMgaW50IGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpzYmg7CiAJc3RydWN0IGJmc19zdXBlcl9ibG9jayAqYmZzX3NiOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJdW5zaWduZWQgaSwgaW1hcF9sZW47CkBAIC0zNjUsMTAgKzMzMCwxMCBAQAogCiAJc2Jfc2V0X2Jsb2Nrc2l6ZShzLCBCRlNfQlNJWkUpOwogCi0JaW5mby0+c2lfc2JoID0gc2JfYnJlYWQocywgMCk7Ci0JaWYgKCFpbmZvLT5zaV9zYmgpCisJc2JoID0gc2JfYnJlYWQocywgMCk7CisJaWYgKCFzYmgpCiAJCWdvdG8gb3V0OwotCWJmc19zYiA9IChzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICopaW5mby0+c2lfc2JoLT5iX2RhdGE7CisJYmZzX3NiID0gKHN0cnVjdCBiZnNfc3VwZXJfYmxvY2sgKilzYmgtPmJfZGF0YTsKIAlpZiAobGUzMl90b19jcHUoYmZzX3NiLT5zX21hZ2ljKSAhPSBCRlNfTUFHSUMpIHsKIAkJaWYgKCFzaWxlbnQpCiAJCQlwcmludGYoIk5vIEJGUyBmaWxlc3lzdGVtIG9uICVzIChtYWdpYz0lMDh4KVxuIiwgCkBAIC00NzIsMTAgKzQzNyw3IEBACiAJCQlpbmZvLT5zaV9sZl9lYmxrID0gZWJsb2NrOwogCX0KIAlicmVsc2UoYmgpOwotCWlmICghKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5KGluZm8tPnNpX3NiaCk7Ci0JCXMtPnNfZGlydCA9IDE7Ci0JfSAKKwlicmVsc2Uoc2JoKTsKIAlkdW1wX2ltYXAoInJlYWRfc3VwZXIiLCBzKTsKIAlyZXR1cm4gMDsKIApAQCAtNDg1LDcgKzQ0Nyw3IEBACiBvdXQyOgogCWtmcmVlKGluZm8tPnNpX2ltYXApOwogb3V0MToKLQlicmVsc2UoaW5mby0+c2lfc2JoKTsKKwlicmVsc2Uoc2JoKTsKIG91dDoKIAltdXRleF9kZXN0cm95KCZpbmZvLT5iZnNfbG9jayk7CiAJa2ZyZWUoaW5mbyk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCBjNGU4MzUzLi45ZTYwZmQyIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfbWlzYy5jCisrKyBiL2ZzL2JpbmZtdF9taXNjLmMKQEAgLTUwMiw4ICs1MDIsOSBAQAogCXJldHVybiBpbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgYm1fY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIGJtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJa2ZyZWUoaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKQEAgLTY4NSw3ICs2ODYsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc19vcHMgPSB7CiAJLnN0YXRmcwkJPSBzaW1wbGVfc3RhdGZzLAotCS5jbGVhcl9pbm9kZQk9IGJtX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGJtX2V2aWN0X2lub2RlLAogfTsKIAogc3RhdGljIGludCBibV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB2b2lkICogZGF0YSwgaW50IHNpbGVudCkKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggZTdiZjZjYS4uOGFiYjJkZiAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTg0Myw3ICs4NDMsOCBAQAogCWlmICghYmlvKQogCQlnb3RvIG91dF9ibWQ7CiAKLQliaW8tPmJpX3J3IHw9ICghd3JpdGVfdG9fdm0gPDwgQklPX1JXKTsKKwlpZiAoIXdyaXRlX3RvX3ZtKQorCQliaW8tPmJpX3J3IHw9IFJFUV9XUklURTsKIAogCXJldCA9IDA7CiAKQEAgLTEwMjQsNyArMTAyNSw3IEBACiAJICogc2V0IGRhdGEgZGlyZWN0aW9uLCBhbmQgY2hlY2sgaWYgbWFwcGVkIHBhZ2VzIG5lZWQgYm91bmNpbmcKIAkgKi8KIAlpZiAoIXdyaXRlX3RvX3ZtKQotCQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SVyk7CisJCWJpby0+YmlfcncgfD0gUkVRX1dSSVRFOwogCiAJYmlvLT5iaV9iZGV2ID0gYmRldjsKIAliaW8tPmJpX2ZsYWdzIHw9ICgxIDw8IEJJT19VU0VSX01BUFBFRCk7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IGIzMTcxZmIuLjUwZThjODUgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xNzIsOSArMTcyLDggQEAKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKIAotCXJldHVybiBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZ19uZXd0cnVuYyhydywgaW9jYiwgaW5vZGUsCi0JCQkJSV9CREVWKGlub2RlKSwgaW92LCBvZmZzZXQsIG5yX3NlZ3MsCi0JCQkJYmxrZGV2X2dldF9ibG9ja3MsIE5VTEwpOworCXJldHVybiBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIElfQkRFVihpbm9kZSksIGlvdiwgb2Zmc2V0LAorCQkJCSAgICBucl9zZWdzLCBibGtkZXZfZ2V0X2Jsb2NrcywgTlVMTCwgTlVMTCwgMCk7CiB9CiAKIGludCBfX3N5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IHdhaXQpCkBAIC0zMDksOSArMzA4LDggQEAKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewotCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywKLQkJCQlwYWdlcCwgZnNkYXRhLCBibGtkZXZfZ2V0X2Jsb2NrKTsKKwlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQkgYmxrZGV2X2dldF9ibG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmxrZGV2X3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC00MjgsMTAgKzQyNiwxMyBAQAogCWlub2RlLT5pX21hcHBpbmcgPSAmaW5vZGUtPmlfZGF0YTsKIH0KIAotc3RhdGljIHZvaWQgYmRldl9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgYmRldl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSAmQkRFVl9JKGlub2RlKS0+YmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOyAvKiBpcyBpdCBuZWVkZWQgaGVyZT8gKi8KKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlzcGluX2xvY2soJmJkZXZfbG9jayk7CiAJd2hpbGUgKCAocCA9IGJkZXYtPmJkX2lub2Rlcy5uZXh0KSAhPSAmYmRldi0+YmRfaW5vZGVzICkgewogCQlfX2JkX2ZvcmdldChsaXN0X2VudHJ5KHAsIHN0cnVjdCBpbm9kZSwgaV9kZXZpY2VzKSk7CkBAIC00NDUsNyArNDQ2LDcgQEAKIAkuYWxsb2NfaW5vZGUgPSBiZGV2X2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gYmRldl9kZXN0cm95X2lub2RlLAogCS5kcm9wX2lub2RlID0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCi0JLmNsZWFyX2lub2RlID0gYmRldl9jbGVhcl9pbm9kZSwKKwkuZXZpY3RfaW5vZGUgPSBiZGV2X2V2aWN0X2lub2RlLAogfTsKIAogc3RhdGljIGludCBiZF9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCkBAIC0xMzM5LDE5ICsxMzQwLDIwIEBACiAJLyoKIAkgKiBob29rczogL24vLCBzZWUgImxheWVyaW5nIHZpb2xhdGlvbnMiLgogCSAqLwotCXJldCA9IGRldmNncm91cF9pbm9kZV9wZXJtaXNzaW9uKGJkZXYtPmJkX2lub2RlLCBwZXJtKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJYmRwdXQoYmRldik7Ci0JCXJldHVybiByZXQ7CisJaWYgKCFmb3JfcGFydCkgeworCQlyZXQgPSBkZXZjZ3JvdXBfaW5vZGVfcGVybWlzc2lvbihiZGV2LT5iZF9pbm9kZSwgcGVybSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJYmRwdXQoYmRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCi0JbG9ja19rZXJuZWwoKTsKICByZXN0YXJ0OgogCiAJcmV0ID0gLUVOWElPOwogCWRpc2sgPSBnZXRfZ2VuZGlzayhiZGV2LT5iZF9kZXYsICZwYXJ0bm8pOwogCWlmICghZGlzaykKLQkJZ290byBvdXRfdW5sb2NrX2tlcm5lbDsKKwkJZ290byBvdXQ7CiAKIAltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIGZvcl9wYXJ0KTsKIAlpZiAoIWJkZXYtPmJkX29wZW5lcnMpIHsKQEAgLTE0MzEsNyArMTQzMyw2IEBACiAJaWYgKGZvcl9wYXJ0KQogCQliZGV2LT5iZF9wYXJ0X2NvdW50Kys7CiAJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogCiAgb3V0X2NsZWFyOgpAQCAtMTQ0NCw5ICsxNDQ1LDcgQEAKIAliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7CiAgb3V0X3VubG9ja19iZGV2OgogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwotIG91dF91bmxvY2tfa2VybmVsOgotCXVubG9ja19rZXJuZWwoKTsKLQorIG91dDoKIAlpZiAoZGlzaykKIAkJbW9kdWxlX3B1dChkaXNrLT5mb3BzLT5vd25lcik7CiAJcHV0X2Rpc2soZGlzayk7CkBAIC0xNTE1LDcgKzE1MTQsNiBAQAogCXN0cnVjdCBibG9ja19kZXZpY2UgKnZpY3RpbSA9IE5VTEw7CiAKIAltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIGZvcl9wYXJ0KTsKLQlsb2NrX2tlcm5lbCgpOwogCWlmIChmb3JfcGFydCkKIAkJYmRldi0+YmRfcGFydF9jb3VudC0tOwogCkBAIC0xNTQwLDcgKzE1MzgsNiBAQAogCQkJdmljdGltID0gYmRldi0+YmRfY29udGFpbnM7CiAJCWJkZXYtPmJkX2NvbnRhaW5zID0gTlVMTDsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCWJkcHV0KGJkZXYpOwogCWlmICh2aWN0aW0pCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCAyOWMyMDA5Li5lYWYyODZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTIzODksMTMgKzIzODksMTMgQEAKIAkJCSAgICAgIHBnb2ZmX3Qgb2Zmc2V0LCBwZ29mZl90IGxhc3RfaW5kZXgpOwogaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci12b2lkIGJ0cmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgYnRyZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiB2b2lkIGJ0cmZzX3B1dF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBidHJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiB2b2lkIGJ0cmZzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RydWN0IGlub2RlICpidHJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHZvaWQgYnRyZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLXZvaWQgYnRyZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBidHJmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IGJ0cmZzX2luaXRfY2FjaGVwKHZvaWQpOwogdm9pZCBidHJmc19kZXN0cm95X2NhY2hlcCh2b2lkKTsKIGxvbmcgYnRyZnNfaW9jdGxfdHJhbnNfZW5kKHN0cnVjdCBmaWxlICpmaWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCAzNGY3YzM3Li42NGYxMDA4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC00ODAsNyArNDgwLDcgQEAKIAllbmRfaW9fd3EtPndvcmsuZnVuYyA9IGVuZF93b3JrcXVldWVfZm47CiAJZW5kX2lvX3dxLT53b3JrLmZsYWdzID0gMDsKIAotCWlmIChiaW8tPmJpX3J3ICYgKDEgPDwgQklPX1JXKSkgeworCWlmIChiaW8tPmJpX3J3ICYgUkVRX1dSSVRFKSB7CiAJCWlmIChlbmRfaW9fd3EtPm1ldGFkYXRhKQogCQkJYnRyZnNfcXVldWVfd29ya2VyKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsCiAJCQkJCSAgICZlbmRfaW9fd3EtPndvcmspOwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKIAlhdG9taWNfaW5jKCZmc19pbmZvLT5ucl9hc3luY19zdWJtaXRzKTsKIAotCWlmIChydyAmICgxIDw8IEJJT19SV19TWU5DSU8pKQorCWlmIChydyAmIFJFUV9TWU5DKQogCQlidHJmc19zZXRfd29ya19oaWdoX3ByaW8oJmFzeW5jLT53b3JrKTsKIAogCWJ0cmZzX3F1ZXVlX3dvcmtlcigmZnNfaW5mby0+d29ya2VycywgJmFzeW5jLT53b3JrKTsKQEAgLTY2OCw3ICs2NjgsNyBAQAogCQkJCQkgIGJpbywgMSk7CiAJQlVHX09OKHJldCk7CiAKLQlpZiAoIShydyAmICgxIDw8IEJJT19SVykpKSB7CisJaWYgKCEocncgJiBSRVFfV1JJVEUpKSB7CiAJCS8qCiAJCSAqIGNhbGxlZCBmb3IgYSByZWFkLCBkbyB0aGUgc2V0dXAgc28gdGhhdCBjaGVja3N1bSB2YWxpZGF0aW9uCiAJCSAqIGNhbiBoYXBwZW4gaW4gdGhlIGFzeW5jIGtlcm5lbCB0aHJlYWRzCkBAIC0xNDI3LDcgKzE0MjcsNyBAQAogCSAqIHJhbSBhbmQgdXAgdG8gZGF0ZSBiZWZvcmUgdHJ5aW5nIHRvIHZlcmlmeSB0aGluZ3MuICBGb3IKIAkgKiBibG9ja3NpemUgPD0gcGFnZXNpemUsIGl0IGlzIGJhc2ljYWxseSBhIG5vb3AKIAkgKi8KLQlpZiAoIShiaW8tPmJpX3J3ICYgKDEgPDwgQklPX1JXKSkgJiYgZW5kX2lvX3dxLT5tZXRhZGF0YSAmJgorCWlmICghKGJpby0+YmlfcncgJiBSRVFfV1JJVEUpICYmIGVuZF9pb193cS0+bWV0YWRhdGEgJiYKIAkgICAgIWJpb19yZWFkeV9mb3JfY3N1bShiaW8pKSB7CiAJCWJ0cmZzX3F1ZXVlX3dvcmtlcigmZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLAogCQkJCSAgICZlbmRfaW9fd3EtPndvcmspOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggMWJmZjkyYS4uYzAzODY0NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0xNDI5LDcgKzE0MjksNyBAQAogCXJldCA9IGJ0cmZzX2Jpb193cV9lbmRfaW8ocm9vdC0+ZnNfaW5mbywgYmlvLCAwKTsKIAlCVUdfT04ocmV0KTsKIAotCWlmICghKHJ3ICYgKDEgPDwgQklPX1JXKSkpIHsKKwlpZiAoIShydyAmIFJFUV9XUklURSkpIHsKIAkJaWYgKGJpb19mbGFncyAmIEVYVEVOVF9CSU9fQ09NUFJFU1NFRCkgewogCQkJcmV0dXJuIGJ0cmZzX3N1Ym1pdF9jb21wcmVzc2VkX3JlYWQoaW5vZGUsIGJpbywKIAkJCQkJCSAgICBtaXJyb3JfbnVtLCBiaW9fZmxhZ3MpOwpAQCAtMTg0MSw3ICsxODQxLDcgQEAKIAliaW8tPmJpX3NpemUgPSAwOwogCiAJYmlvX2FkZF9wYWdlKGJpbywgcGFnZSwgZmFpbHJlYy0+bGVuLCBzdGFydCAtIHBhZ2Vfb2Zmc2V0KHBhZ2UpKTsKLQlpZiAoZmFpbGVkX2Jpby0+YmlfcncgJiAoMSA8PCBCSU9fUlcpKQorCWlmIChmYWlsZWRfYmlvLT5iaV9ydyAmIFJFUV9XUklURSkKIAkJcncgPSBXUklURTsKIAllbHNlCiAJCXJ3ID0gUkVBRDsKQEAgLTI5MzgsNyArMjkzOCw2IEBACiAJZGlyLT5pX210aW1lID0gZGlyLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgZGlyKTsKIAlCVUdfT04ocmV0KTsKLQlkaXItPmlfc2ItPnNfZGlydCA9IDE7CiAKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIDA7CkBAIC0zNjU2LDE3ICszNjU1LDE5IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KLQlhdHRyLT5pYV92YWxpZCAmPSB+QVRUUl9TSVpFOwogCi0JaWYgKGF0dHItPmlhX3ZhbGlkKQotCQllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlpZiAoYXR0ci0+aWFfdmFsaWQpIHsKKwkJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKLQlpZiAoIWVyciAmJiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkpCi0JCWVyciA9IGJ0cmZzX2FjbF9jaG1vZChpbm9kZSk7CisJCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkKKwkJCWVyciA9IGJ0cmZzX2FjbF9jaG1vZChpbm9kZSk7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBidHJmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgYnRyZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwpAQCAtMzY3NCwxMCArMzY3NSwxNCBAQAogCWludCByZXQ7CiAKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJaWYgKGlub2RlLT5pX25saW5rICYmIGJ0cmZzX3Jvb3RfcmVmcygmcm9vdC0+cm9vdF9pdGVtKSAhPSAwKQorCQlnb3RvIG5vX2RlbGV0ZTsKKwogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKSB7CiAJCWJ0cmZzX29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwogCQlnb3RvIG5vX2RlbGV0ZTsKIAl9CisJLyogZG8gd2UgcmVhbGx5IHdhbnQgaXQgZm9yIC0+aV9ubGluayA+IDAgYW5kIHplcm8gYnRyZnNfcm9vdF9yZWZzPyAqLwogCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CiAKIAlpZiAocm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfcmVjb3ZlcmluZykgewpAQCAtMzcyNyw3ICszNzMyLDcgQEAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCWJ0cmZzX2J0cmVlX2JhbGFuY2VfZGlydHkocm9vdCwgbnIpOwogbm9fZGVsZXRlOgotCWNsZWFyX2lub2RlKGlub2RlKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlyZXR1cm47CiB9CiAKQEAgLTM4NTgsNyArMzg2Myw3IEBACiAJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CiAJCWVsc2UgewogCQkJV0FSTl9PTighKGVudHJ5LT52ZnNfaW5vZGUuaV9zdGF0ZSAmCi0JCQkJICAoSV9XSUxMX0ZSRUUgfCBJX0ZSRUVJTkcgfCBJX0NMRUFSKSkpOworCQkJCSAgKElfV0lMTF9GUkVFIHwgSV9GUkVFSU5HKSkpOwogCQkJcmJfZXJhc2UocGFyZW50LCAmcm9vdC0+aW5vZGVfdHJlZSk7CiAJCQlSQl9DTEVBUl9OT0RFKHBhcmVudCk7CiAJCQlzcGluX3VubG9jaygmcm9vdC0+aW5vZGVfbG9jayk7CkBAIC0zOTM3LDcgKzM5NDIsNyBAQAogCQkJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPiAxKQogCQkJCWRfcHJ1bmVfYWxpYXNlcyhpbm9kZSk7CiAJCQkvKgotCQkJICogYnRyZnNfZHJvcF9pbm9kZSB3aWxsIHJlbW92ZSBpdCBmcm9tCisJCQkgKiBidHJmc19kcm9wX2lub2RlIHdpbGwgaGF2ZSBpdCByZW1vdmVkIGZyb20KIAkJCSAqIHRoZSBpbm9kZSBjYWNoZSB3aGVuIGl0cyB1c2FnZSBjb3VudAogCQkJICogaGl0cyB6ZXJvLgogCQkJICovCkBAIC01NjQyLDcgKzU2NDcsNyBAQAogCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWM7CiAJdTY0IHN0YXJ0OwogCWludCBza2lwX3N1bTsKLQlpbnQgd3JpdGUgPSBydyAmICgxIDw8IEJJT19SVyk7CisJaW50IHdyaXRlID0gcncgJiBSRVFfV1JJVEU7CiAJaW50IHJldCA9IDA7CiAKIAlza2lwX3N1bSA9IEJUUkZTX0koaW5vZGUpLT5mbGFncyAmIEJUUkZTX0lOT0RFX05PREFUQVNVTTsKQEAgLTYzMzEsMTMgKzYzMzYsMTQgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfaW5vZGVfY2FjaGVwLCBCVFJGU19JKGlub2RlKSk7CiB9CiAKLXZvaWQgYnRyZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGJ0cmZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwotCWlmIChpbm9kZS0+aV9ubGluayA+IDAgJiYgYnRyZnNfcm9vdF9yZWZzKCZyb290LT5yb290X2l0ZW0pID09IDApCi0JCWdlbmVyaWNfZGVsZXRlX2lub2RlKGlub2RlKTsKKworCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCkKKwkJcmV0dXJuIDE7CiAJZWxzZQotCQlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IGYyMzkzYjMuLjE3NzZkYmQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7CiAJLmRyb3BfaW5vZGUJPSBidHJmc19kcm9wX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBidHJmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gYnRyZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGJ0cmZzX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IGJ0cmZzX3N5bmNfZnMsCiAJLnNob3dfb3B0aW9ucwk9IGJ0cmZzX3Nob3dfb3B0aW9ucywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCBkNmUzYWY4Li5kZDMxOGZmIDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogCQlCVUdfT04oYXRvbWljX3JlYWQoJmN1ci0+YmlfY250KSA9PSAwKTsKIAotCQlpZiAoYmlvX3J3X2ZsYWdnZWQoY3VyLCBCSU9fUldfU1lOQ0lPKSkKKwkJaWYgKGN1ci0+YmlfcncgJiBSRVFfU1lOQykKIAkJCW51bV9zeW5jX3J1bisrOwogCiAJCXN1Ym1pdF9iaW8oY3VyLT5iaV9ydywgY3VyKTsKQEAgLTI2NTEsNyArMjY1MSw3IEBACiAJaW50IG1heF9lcnJvcnMgPSAwOwogCXN0cnVjdCBidHJmc19tdWx0aV9iaW8gKm11bHRpID0gTlVMTDsKIAotCWlmIChtdWx0aV9yZXQgJiYgIShydyAmICgxIDw8IEJJT19SVykpKQorCWlmIChtdWx0aV9yZXQgJiYgIShydyAmIFJFUV9XUklURSkpCiAJCXN0cmlwZXNfYWxsb2NhdGVkID0gMTsKIGFnYWluOgogCWlmIChtdWx0aV9yZXQpIHsKQEAgLTI2ODcsNyArMjY4Nyw3IEBACiAJCW1pcnJvcl9udW0gPSAwOwogCiAJLyogaWYgb3VyIG11bHRpIGJpbyBzdHJ1Y3QgaXMgdG9vIHNtYWxsLCBiYWNrIG9mZiBhbmQgdHJ5IGFnYWluICovCi0JaWYgKHJ3ICYgKDEgPDwgQklPX1JXKSkgeworCWlmIChydyAmIFJFUV9XUklURSkgewogCQlpZiAobWFwLT50eXBlICYgKEJUUkZTX0JMT0NLX0dST1VQX1JBSUQxIHwKIAkJCQkgQlRSRlNfQkxPQ0tfR1JPVVBfRFVQKSkgewogCQkJc3RyaXBlc19yZXF1aXJlZCA9IG1hcC0+bnVtX3N0cmlwZXM7CkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCQkJbWF4X2Vycm9ycyA9IDE7CiAJCX0KIAl9Ci0JaWYgKG11bHRpX3JldCAmJiAocncgJiAoMSA8PCBCSU9fUlcpKSAmJgorCWlmIChtdWx0aV9yZXQgJiYgKHJ3ICYgUkVRX1dSSVRFKSAmJgogCSAgICBzdHJpcGVzX2FsbG9jYXRlZCA8IHN0cmlwZXNfcmVxdWlyZWQpIHsKIAkJc3RyaXBlc19hbGxvY2F0ZWQgPSBtYXAtPm51bV9zdHJpcGVzOwogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwpAQCAtMjczMyw3ICsyNzMzLDcgQEAKIAludW1fc3RyaXBlcyA9IDE7CiAJc3RyaXBlX2luZGV4ID0gMDsKIAlpZiAobWFwLT50eXBlICYgQlRSRlNfQkxPQ0tfR1JPVVBfUkFJRDEpIHsKLQkJaWYgKHVucGx1Z19wYWdlIHx8IChydyAmICgxIDw8IEJJT19SVykpKQorCQlpZiAodW5wbHVnX3BhZ2UgfHwgKHJ3ICYgUkVRX1dSSVRFKSkKIAkJCW51bV9zdHJpcGVzID0gbWFwLT5udW1fc3RyaXBlczsKIAkJZWxzZSBpZiAobWlycm9yX251bSkKIAkJCXN0cmlwZV9pbmRleCA9IG1pcnJvcl9udW0gLSAxOwpAQCAtMjc0NCw3ICsyNzQ0LDcgQEAKIAkJfQogCiAJfSBlbHNlIGlmIChtYXAtPnR5cGUgJiBCVFJGU19CTE9DS19HUk9VUF9EVVApIHsKLQkJaWYgKHJ3ICYgKDEgPDwgQklPX1JXKSkKKwkJaWYgKHJ3ICYgUkVRX1dSSVRFKQogCQkJbnVtX3N0cmlwZXMgPSBtYXAtPm51bV9zdHJpcGVzOwogCQllbHNlIGlmIChtaXJyb3JfbnVtKQogCQkJc3RyaXBlX2luZGV4ID0gbWlycm9yX251bSAtIDE7CkBAIC0yNzU1LDcgKzI3NTUsNyBAQAogCQlzdHJpcGVfaW5kZXggPSBkb19kaXYoc3RyaXBlX25yLCBmYWN0b3IpOwogCQlzdHJpcGVfaW5kZXggKj0gbWFwLT5zdWJfc3RyaXBlczsKIAotCQlpZiAodW5wbHVnX3BhZ2UgfHwgKHJ3ICYgKDEgPDwgQklPX1JXKSkpCisJCWlmICh1bnBsdWdfcGFnZSB8fCAocncgJiBSRVFfV1JJVEUpKQogCQkJbnVtX3N0cmlwZXMgPSBtYXAtPnN1Yl9zdHJpcGVzOwogCQllbHNlIGlmIChtaXJyb3JfbnVtKQogCQkJc3RyaXBlX2luZGV4ICs9IG1pcnJvcl9udW0gLSAxOwpAQCAtMjk0NSw3ICsyOTQ1LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcGVuZGluZ19iaW9zICpwZW5kaW5nX2Jpb3M7CiAKIAkvKiBkb24ndCBib3RoZXIgd2l0aCBhZGRpdGlvbmFsIGFzeW5jIHN0ZXBzIGZvciByZWFkcywgcmlnaHQgbm93ICovCi0JaWYgKCEocncgJiAoMSA8PCBCSU9fUlcpKSkgeworCWlmICghKHJ3ICYgUkVRX1dSSVRFKSkgewogCQliaW9fZ2V0KGJpbyk7CiAJCXN1Ym1pdF9iaW8ocncsIGJpbyk7CiAJCWJpb19wdXQoYmlvKTsKQEAgLTI5NjQsNyArMjk2NCw3IEBACiAJYmlvLT5iaV9ydyB8PSBydzsKIAogCXNwaW5fbG9jaygmZGV2aWNlLT5pb19sb2NrKTsKLQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKSkKKwlpZiAoYmlvLT5iaV9ydyAmIFJFUV9TWU5DKQogCQlwZW5kaW5nX2Jpb3MgPSAmZGV2aWNlLT5wZW5kaW5nX3N5bmNfYmlvczsKIAllbHNlCiAJCXBlbmRpbmdfYmlvcyA9ICZkZXZpY2UtPnBlbmRpbmdfYmlvczsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggZDU0ODEyYi4uNTBlZmEzMyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE4MzMsOSArMTgzMywxMCBAQAogfQogRVhQT1JUX1NZTUJPTChwYWdlX3plcm9fbmV3X2J1ZmZlcnMpOwogCi1zdGF0aWMgaW50IF9fYmxvY2tfcHJlcGFyZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGdldF9ibG9ja190ICpnZXRfYmxvY2spCitpbnQgYmxvY2tfcHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sCisJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJdW5zaWduZWQgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZDsKIAlzZWN0b3JfdCBibG9jazsKIAlpbnQgZXJyID0gMDsKQEAgLTE5MDgsMTAgKzE5MDksMTMgQEAKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoKndhaXRfYmgpKQogCQkJZXJyID0gLUVJTzsKIAl9Ci0JaWYgKHVubGlrZWx5KGVycikpCisJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJcGFnZV96ZXJvX25ld19idWZmZXJzKHBhZ2UsIGZyb20sIHRvKTsKKwkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJfQogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGJsb2NrX3ByZXBhcmVfd3JpdGUpOwogCiBzdGF0aWMgaW50IF9fYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAogCQl1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKQEAgLTE5NDgsOTAgKzE5NTIsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEZpbGVzeXN0ZW1zIGltcGxlbWVudGluZyB0aGUgbmV3IHRydW5jYXRlIHNlcXVlbmNlIHNob3VsZCB1c2UgdGhlCi0gKiBfbmV3dHJ1bmMgcG9zdGZpeCB2YXJpYW50IHdoaWNoIHdvbid0IGluY29ycmVjdGx5IGNhbGwgdm10cnVuY2F0ZS4KLSAqIFRoZSBmaWxlc3lzdGVtIG5lZWRzIHRvIGhhbmRsZSBibG9jayB0cnVuY2F0aW9uIHVwb24gZmFpbHVyZS4KLSAqLwotaW50IGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhLAotCQkJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaykKK2ludCBfX2Jsb2NrX3dyaXRlX2JlZ2luKHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCisJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JcGdvZmZfdCBpbmRleDsKLQl1bnNpZ25lZCBzdGFydCwgZW5kOwotCWludCBvd25wYWdlID0gMDsKKwl1bnNpZ25lZCBzdGFydCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAotCWluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0Jc3RhcnQgPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0JZW5kID0gc3RhcnQgKyBsZW47Ci0KLQlwYWdlID0gKnBhZ2VwOwotCWlmIChwYWdlID09IE5VTEwpIHsKLQkJb3ducGFnZSA9IDE7Ci0JCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2Vfd3JpdGVfYmVnaW4obWFwcGluZywgaW5kZXgsIGZsYWdzKTsKLQkJaWYgKCFwYWdlKSB7Ci0JCQlzdGF0dXMgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJKnBhZ2VwID0gcGFnZTsKLQl9IGVsc2UKLQkJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKLQotCXN0YXR1cyA9IF9fYmxvY2tfcHJlcGFyZV93cml0ZShpbm9kZSwgcGFnZSwgc3RhcnQsIGVuZCwgZ2V0X2Jsb2NrKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzKSkgewotCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKLQotCQlpZiAob3ducGFnZSkgewotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCQkqcGFnZXAgPSBOVUxMOwotCQl9Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gYmxvY2tfcHJlcGFyZV93cml0ZShwYWdlLCBzdGFydCwgc3RhcnQgKyBsZW4sIGdldF9ibG9jayk7CiB9Ci1FWFBPUlRfU1lNQk9MKGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKTsKK0VYUE9SVF9TWU1CT0woX19ibG9ja193cml0ZV9iZWdpbik7CiAKIC8qCiAgKiBibG9ja193cml0ZV9iZWdpbiB0YWtlcyBjYXJlIG9mIHRoZSBiYXNpYyB0YXNrIG9mIGJsb2NrIGFsbG9jYXRpb24gYW5kCiAgKiBicmluZ2luZyBwYXJ0aWFsIHdyaXRlIGJsb2NrcyB1cHRvZGF0ZSBmaXJzdC4KICAqCi0gKiBJZiAqcGFnZXAgaXMgbm90IE5VTEwsIHRoZW4gYmxvY2tfd3JpdGVfYmVnaW4gdXNlcyB0aGUgbG9ja2VkIHBhZ2UKLSAqIGF0ICpwYWdlcCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIGl0cyBvd24uIEluIHRoaXMgY2FzZSwgdGhlIHBhZ2Ugd2lsbAotICogbm90IGJlIHVubG9ja2VkIG9yIGRlYWxsb2NhdGVkIG9uIGZhaWx1cmUuCisgKiBUaGUgZmlsZXN5c3RlbSBuZWVkcyB0byBoYW5kbGUgYmxvY2sgdHJ1bmNhdGlvbiB1cG9uIGZhaWx1cmUuCiAgKi8KLWludCBibG9ja193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAotCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSwKLQkJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCitpbnQgYmxvY2tfd3JpdGVfYmVnaW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwKKwkJdW5zaWduZWQgZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXAsIGdldF9ibG9ja190ICpnZXRfYmxvY2spCiB7Ci0JaW50IHJldDsKKwlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHN0YXR1czsKIAotCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywKLQkJCQkJcGFnZXAsIGZzZGF0YSwgZ2V0X2Jsb2NrKTsKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFncyk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qCi0JICogcHJlcGFyZV93cml0ZSgpIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKLQkgKiBvdXRzaWRlIGlfc2l6ZS4gIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLiBEb24ndCBuZWVkCi0JICogaV9zaXplX3JlYWQgYmVjYXVzZSB3ZSBob2xkIGlfbXV0ZXguCi0JICoKLQkgKiBGaWxlc3lzdGVtcyB3aGljaCBwYXNzIGRvd24gdGhlaXIgb3duIHBhZ2UgYWxzbyBjYW5ub3QKLQkgKiBjYWxsIGludG8gdm10cnVuY2F0ZSBoZXJlIGJlY2F1c2UgaXQgd291bGQgbGVhZCB0byBsb2NrCi0JICogaW52ZXJzaW9uIHByb2JsZW1zICgqcGFnZXAgaXMgbG9ja2VkKS4gVGhpcyBpcyBhIGZ1cnRoZXIKLQkgKiBleGFtcGxlIG9mIHdoZXJlIHRoZSBvbGQgdHJ1bmNhdGUgc2VxdWVuY2UgaXMgaW5hZGVxdWF0ZS4KLQkgKi8KLQlpZiAodW5saWtlbHkocmV0KSAmJiAqcGFnZXAgPT0gTlVMTCkgewotCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7Ci0JCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKLQkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCXN0YXR1cyA9IF9fYmxvY2tfd3JpdGVfYmVnaW4ocGFnZSwgcG9zLCBsZW4sIGdldF9ibG9jayk7CisJaWYgKHVubGlrZWx5KHN0YXR1cykpIHsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJcGFnZSA9IE5VTEw7CiAJfQogCi0JcmV0dXJuIHJldDsKKwkqcGFnZXAgPSBwYWdlOworCXJldHVybiBzdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKGJsb2NrX3dyaXRlX2JlZ2luKTsKIApAQCAtMjM1MSw3ICsyMzA2LDcgQEAKICAqIEZvciBtb3JvbmljIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IGFsbG93IGhvbGVzIGluIGZpbGUuCiAgKiBXZSBtYXkgaGF2ZSB0byBleHRlbmQgdGhlIGZpbGUuCiAgKi8KLWludCBjb250X3dyaXRlX2JlZ2luX25ld3RydW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKK2ludCBjb250X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhLAogCQkJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywgbG9mZl90ICpieXRlcykKQEAgLTIzNjMsNyArMjMxOCw3IEBACiAKIAllcnIgPSBjb250X2V4cGFuZF96ZXJvKGZpbGUsIG1hcHBpbmcsIHBvcywgYnl0ZXMpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gZXJyOwogCiAJemVyb2Zyb20gPSAqYnl0ZXMgJiB+UEFHRV9DQUNIRV9NQVNLOwogCWlmIChwb3MrbGVuID4gKmJ5dGVzICYmIHplcm9mcm9tICYgKGJsb2Nrc2l6ZS0xKSkgewpAQCAtMjM3MSw0NCArMjMyNiwxMCBAQAogCQkoKmJ5dGVzKSsrOwogCX0KIAotCSpwYWdlcCA9IE5VTEw7Ci0JZXJyID0gYmxvY2tfd3JpdGVfYmVnaW5fbmV3dHJ1bmMoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sCi0JCQkJZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsIGdldF9ibG9jayk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbl9uZXd0cnVuYyk7Ci0KLWludCBjb250X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhLAotCQkJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywgbG9mZl90ICpieXRlcykKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gY29udF93cml0ZV9iZWdpbl9uZXd0cnVuYyhmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsCi0JCQkJCXBhZ2VwLCBmc2RhdGEsIGdldF9ibG9jaywgYnl0ZXMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKLQkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQotCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZ2V0X2Jsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woY29udF93cml0ZV9iZWdpbik7CiAKLWludCBibG9ja19wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywKLQkJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JaW50IGVyciA9IF9fYmxvY2tfcHJlcGFyZV93cml0ZShpbm9kZSwgcGFnZSwgZnJvbSwgdG8sIGdldF9ibG9jayk7Ci0JaWYgKGVycikKLQkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woYmxvY2tfcHJlcGFyZV93cml0ZSk7Ci0KIGludCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwpAQCAtMjUxMCwxMSArMjQzMSwxMSBAQAogfQogCiAvKgotICogRmlsZXN5c3RlbXMgaW1wbGVtZW50aW5nIHRoZSBuZXcgdHJ1bmNhdGUgc2VxdWVuY2Ugc2hvdWxkIHVzZSB0aGUKLSAqIF9uZXd0cnVuYyBwb3N0Zml4IHZhcmlhbnQgd2hpY2ggd29uJ3QgaW5jb3JyZWN0bHkgY2FsbCB2bXRydW5jYXRlLgorICogT24gZW50cnksIHRoZSBwYWdlIGlzIGZ1bGx5IG5vdCB1cHRvZGF0ZS4KKyAqIE9uIGV4aXQgdGhlIHBhZ2UgaXMgZnVsbHkgdXB0b2RhdGUgaW4gdGhlIGFyZWFzIG91dHNpZGUgKGZyb20sdG8pCiAgKiBUaGUgZmlsZXN5c3RlbSBuZWVkcyB0byBoYW5kbGUgYmxvY2sgdHJ1bmNhdGlvbiB1cG9uIGZhaWx1cmUuCiAgKi8KLWludCBub2JoX3dyaXRlX2JlZ2luX25ld3RydW5jKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKK2ludCBub2JoX3dyaXRlX2JlZ2luKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEsCiAJCQlnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKQpAQCAtMjU0Nyw4ICsyNDY4LDggQEAKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJKnBhZ2VwID0gTlVMTDsKLQkJcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLAotCQkJCQlmbGFncywgcGFnZXAsIGZzZGF0YSwgZ2V0X2Jsb2NrKTsKKwkJcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsCisJCQkJCSBnZXRfYmxvY2spOwogCX0KIAogCWlmIChQYWdlTWFwcGVkVG9EaXNrKHBhZ2UpKQpAQCAtMjY1NCwzNSArMjU3NSw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChub2JoX3dyaXRlX2JlZ2luX25ld3RydW5jKTsKLQotLyoKLSAqIE9uIGVudHJ5LCB0aGUgcGFnZSBpcyBmdWxseSBub3QgdXB0b2RhdGUuCi0gKiBPbiBleGl0IHRoZSBwYWdlIGlzIGZ1bGx5IHVwdG9kYXRlIGluIHRoZSBhcmVhcyBvdXRzaWRlIChmcm9tLHRvKQotICovCi1pbnQgbm9iaF93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAotCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSwKLQkJCWdldF9ibG9ja190ICpnZXRfYmxvY2spCi17Ci0JaW50IHJldDsKLQotCXJldCA9IG5vYmhfd3JpdGVfYmVnaW5fbmV3dHJ1bmMoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLAotCQkJCQlwYWdlcCwgZnNkYXRhLCBnZXRfYmxvY2spOwotCi0JLyoKLQkgKiBwcmVwYXJlX3dyaXRlKCkgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3IGJsb2NrcwotCSAqIG91dHNpZGUgaV9zaXplLiAgVHJpbSB0aGVzZSBvZmYgYWdhaW4uIERvbid0IG5lZWQKLQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KLQkgKi8KLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7Ci0JCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKLQkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOwotCX0KLQotCXJldHVybiByZXQ7Ci19CiBFWFBPUlRfU1lNQk9MKG5vYmhfd3JpdGVfYmVnaW4pOwogCiBpbnQgbm9iaF93cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9iaW5kLmMgYi9mcy9jYWNoZWZpbGVzL2JpbmQuYwppbmRleCAyOTA2MDc3Li5hMjYwM2U3IDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL2JpbmQuYworKysgYi9mcy9jYWNoZWZpbGVzL2JpbmQuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CiAKIAkvKiBnZXQgdGhlIGNhY2hlIHNpemUgYW5kIGJsb2Nrc2l6ZSAqLwotCXJldCA9IHZmc19zdGF0ZnMocm9vdCwgJnN0YXRzKTsKKwlyZXQgPSB2ZnNfc3RhdGZzKCZwYXRoLCAmc3RhdHMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOwogCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jIGIvZnMvY2FjaGVmaWxlcy9kYWVtb24uYwppbmRleCBjMjQxMzU2Li43MjdjYWVkIDEwMDY0NAotLS0gYS9mcy9jYWNoZWZpbGVzL2RhZW1vbi5jCisrKyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKQEAgLTU1Miw4ICs1NTIsNyBAQAogICovCiBzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2N1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQogewotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwotCXN0cnVjdCBkZW50cnkgKmRpcjsKKwlzdHJ1Y3QgcGF0aCBwYXRoOwogCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOwogCWludCByZXQ7CiAKQEAgLTU3MywyNCArNTcyLDIxIEBACiAJfQogCiAJLyogZXh0cmFjdCB0aGUgZGlyZWN0b3J5IGRlbnRyeSBmcm9tIHRoZSBjd2QgKi8KLQlmcyA9IGN1cnJlbnQtPmZzOwotCXJlYWRfbG9jaygmZnMtPmxvY2spOwotCWRpciA9IGRnZXQoZnMtPnB3ZC5kZW50cnkpOwotCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7CisJZ2V0X2ZzX3B3ZChjdXJyZW50LT5mcywgJnBhdGgpOwogCi0JaWYgKCFTX0lTRElSKGRpci0+ZF9pbm9kZS0+aV9tb2RlKSkKKwlpZiAoIVNfSVNESVIocGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gbm90ZGlyOwogCiAJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKLQlyZXQgPSBjYWNoZWZpbGVzX2N1bGwoY2FjaGUsIGRpciwgYXJncyk7CisJcmV0ID0gY2FjaGVmaWxlc19jdWxsKGNhY2hlLCBwYXRoLmRlbnRyeSwgYXJncyk7CiAJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKIAotCWRwdXQoZGlyKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJX2xlYXZlKCIgPSAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIAogbm90ZGlyOgotCWRwdXQoZGlyKTsKKwlwYXRoX3B1dCgmcGF0aCk7CiAJa2Vycm9yKCJjdWxsIGNvbW1hbmQgcmVxdWlyZXMgZGlyZmQgdG8gYmUgYSBkaXJlY3RvcnkiKTsKIAlyZXR1cm4gLUVOT1RESVI7CiAKQEAgLTYyOCw4ICs2MjQsNyBAQAogICovCiBzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ludXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKIHsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisJc3RydWN0IHBhdGggcGF0aDsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKIAlpbnQgcmV0OwogCkBAIC02NDksMjQgKzY0NCwyMSBAQAogCX0KIAogCS8qIGV4dHJhY3QgdGhlIGRpcmVjdG9yeSBkZW50cnkgZnJvbSB0aGUgY3dkICovCi0JZnMgPSBjdXJyZW50LT5mczsKLQlyZWFkX2xvY2soJmZzLT5sb2NrKTsKLQlkaXIgPSBkZ2V0KGZzLT5wd2QuZGVudHJ5KTsKLQlyZWFkX3VubG9jaygmZnMtPmxvY2spOworCWdldF9mc19wd2QoY3VycmVudC0+ZnMsICZwYXRoKTsKIAotCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJaWYgKCFTX0lTRElSKHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQogCQlnb3RvIG5vdGRpcjsKIAogCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7Ci0JcmV0ID0gY2FjaGVmaWxlc19jaGVja19pbl91c2UoY2FjaGUsIGRpciwgYXJncyk7CisJcmV0ID0gY2FjaGVmaWxlc19jaGVja19pbl91c2UoY2FjaGUsIHBhdGguZGVudHJ5LCBhcmdzKTsKIAljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOwogCi0JZHB1dChkaXIpOworCXBhdGhfcHV0KCZwYXRoKTsKIAkvL19sZWF2ZSgiID0gJWQiLCByZXQpOwogCXJldHVybiByZXQ7CiAKIG5vdGRpcjoKLQlkcHV0KGRpcik7CisJcGF0aF9wdXQoJnBhdGgpOwogCWtlcnJvcigiaW51c2UgY29tbWFuZCByZXF1aXJlcyBkaXJmZCB0byBiZSBhIGRpcmVjdG9yeSIpOwogCXJldHVybiAtRU5PVERJUjsKIApAQCAtNjgzLDYgKzY3NSwxMCBAQAogCQkJIHVuc2lnbmVkIGZuciwgdW5zaWduZWQgYm5yKQogewogCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCXN0cnVjdCBwYXRoIHBhdGggPSB7CisJCS5tbnQJPSBjYWNoZS0+bW50LAorCQkuZGVudHJ5CT0gY2FjaGUtPm1udC0+bW50X3Jvb3QsCisJfTsKIAlpbnQgcmV0OwogCiAJLy9fZW50ZXIoInslbGx1LCVsbHUsJWxsdSwlbGx1LCVsbHUsJWxsdX0sJXUsJXUiLApAQCAtNjk3LDcgKzY5Myw3IEBACiAJLyogZmluZCBvdXQgaG93IG1hbnkgcGFnZXMgb2YgYmxvY2tkZXYgYXJlIGF2YWlsYWJsZSAqLwogCW1lbXNldCgmc3RhdHMsIDAsIHNpemVvZihzdGF0cykpOwogCi0JcmV0ID0gdmZzX3N0YXRmcyhjYWNoZS0+bW50LT5tbnRfcm9vdCwgJnN0YXRzKTsKKwlyZXQgPSB2ZnNfc3RhdGZzKCZwYXRoLCAmc3RhdHMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWlmIChyZXQgPT0gLUVJTykKIAkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJzdGF0ZnMgZmFpbGVkIik7CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL25hbWVpLmMgYi9mcy9jYWNoZWZpbGVzL25hbWVpLmMKaW5kZXggZjRhNzg0MC4uNDJjN2ZhZiAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9uYW1laS5jCisrKyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwpAQCAtMzcsOSArMzcsOSBAQAogCiAJcHJpbnRrKEtFUk5fRVJSICIlc29iamVjdDogT0JKJXhcbiIsCiAJICAgICAgIHByZWZpeCwgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkKTsKLQlwcmludGsoS0VSTl9FUlIgIiVzb2Jqc3RhdGU9JXMgZmw9JWx4IHN3Zmw9JWx4IGV2PSVseFslbHhdXG4iLAorCXByaW50ayhLRVJOX0VSUiAiJXNvYmpzdGF0ZT0lcyBmbD0lbHggd2J1c3k9JXggZXY9JWx4WyVseF1cbiIsCiAJICAgICAgIHByZWZpeCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+ZnNjYWNoZS5zdGF0ZV0sCi0JICAgICAgIG9iamVjdC0+ZnNjYWNoZS5mbGFncywgb2JqZWN0LT5mc2NhY2hlLndvcmsuZmxhZ3MsCisJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5mbGFncywgd29ya19idXN5KCZvYmplY3QtPmZzY2FjaGUud29yayksCiAJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5ldmVudHMsCiAJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5ldmVudF9tYXNrICYgRlNDQUNIRV9PQkpFQ1RfRVZFTlRTX01BU0spOwogCXByaW50ayhLRVJOX0VSUiAiJXNvcHM9JXUgaW5wPSV1IGV4Yz0ldVxuIiwKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAJCS8qIGlmIHRoZSBvYmplY3Qgd2UncmUgd2FpdGluZyBmb3IgaXMgcXVldWVkIGZvciBwcm9jZXNzaW5nLAogCQkgKiB0aGVuIGp1c3QgcHV0IG91cnNlbHZlcyBvbiB0aGUgcXVldWUgYmVoaW5kIGl0ICovCi0JCWlmIChzbG93X3dvcmtfaXNfcXVldWVkKCZ4b2JqZWN0LT5mc2NhY2hlLndvcmspKSB7CisJCWlmICh3b3JrX3BlbmRpbmcoJnhvYmplY3QtPmZzY2FjaGUud29yaykpIHsKIAkJCV9kZWJ1ZygicXVldWUgT0JKJXggYmVoaW5kIE9CSiV4IGltbWVkaWF0ZWx5IiwKIAkJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsCiAJCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CkBAIC0yMjAsOCArMjIwLDcgQEAKIAkJfQogCiAJCS8qIG90aGVyd2lzZSB3ZSBzbGVlcCB1bnRpbCBlaXRoZXIgdGhlIG9iamVjdCB3ZSdyZSB3YWl0aW5nIGZvcgotCQkgKiBpcyBkb25lLCBvciB0aGUgc2xvdy13b3JrIGZhY2lsaXR5IHdhbnRzIHRoZSB0aHJlYWQgYmFjayB0bwotCQkgKiBkbyBvdGhlciB3b3JrICovCisJCSAqIGlzIGRvbmUsIG9yIHRoZSBmc2NhY2hlX29iamVjdCBpcyBjb25nZXN0ZWQgKi8KIAkJd3EgPSBiaXRfd2FpdHF1ZXVlKCZ4b2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFKTsKIAkJaW5pdF93YWl0KCZ3YWl0KTsKIAkJcmVxdWV1ZSA9IGZhbHNlOwpAQCAtMjI5LDggKzIyOCw4IEBACiAJCQlwcmVwYXJlX3RvX3dhaXQod3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCQlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSwgJnhvYmplY3QtPmZsYWdzKSkKIAkJCQlicmVhazsKLQkJCXJlcXVldWUgPSBzbG93X3dvcmtfc2xlZXBfdGlsbF90aHJlYWRfbmVlZGVkKAotCQkJCSZvYmplY3QtPmZzY2FjaGUud29yaywgJnRpbWVvdXQpOworCisJCQlyZXF1ZXVlID0gZnNjYWNoZV9vYmplY3Rfc2xlZXBfdGlsbF9jb25nZXN0ZWQoJnRpbWVvdXQpOwogCQl9IHdoaWxlICh0aW1lb3V0ID4gMCAmJiAhcmVxdWV1ZSk7CiAJCWZpbmlzaF93YWl0KHdxLCAmd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvcmR3ci5jIGIvZnMvY2FjaGVmaWxlcy9yZHdyLmMKaW5kZXggMGYwZDQxZi4uMGUzYzA5MiAxMDA2NDQKLS0tIGEvZnMvY2FjaGVmaWxlcy9yZHdyLmMKKysrIGIvZnMvY2FjaGVmaWxlcy9yZHdyLmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCXNoaWZ0ID0gUEFHRV9TSElGVCAtIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCiAJb3AtPm9wLmZsYWdzICY9IEZTQ0FDSEVfT1BfS0VFUF9GTEFHUzsKLQlvcC0+b3AuZmxhZ3MgfD0gRlNDQUNIRV9PUF9GQVNUOworCW9wLT5vcC5mbGFncyB8PSBGU0NBQ0hFX09QX0FTWU5DOwogCW9wLT5vcC5wcm9jZXNzb3IgPSBjYWNoZWZpbGVzX3JlYWRfY29waWVyOwogCiAJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKQEAgLTcyOSw3ICs3MjksNyBAQAogCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CiAKIAlvcC0+b3AuZmxhZ3MgJj0gRlNDQUNIRV9PUF9LRUVQX0ZMQUdTOwotCW9wLT5vcC5mbGFncyB8PSBGU0NBQ0hFX09QX0ZBU1Q7CisJb3AtPm9wLmZsYWdzIHw9IEZTQ0FDSEVfT1BfQVNZTkM7CiAJb3AtPm9wLnByb2Nlc3NvciA9IGNhY2hlZmlsZXNfcmVhZF9jb3BpZXI7CiAKIAlJTklUX0xJU1RfSEVBRCgmYmFja3BhZ2VzKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvTWFrZWZpbGUgYi9mcy9jZXBoL01ha2VmaWxlCmluZGV4IDZhNjYwZTYuLjI3OGUxMTcgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvTWFrZWZpbGUKKysrIGIvZnMvY2VwaC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogb2JqLSQoQ09ORklHX0NFUEhfRlMpICs9IGNlcGgubwogCi1jZXBoLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBhZGRyLm8gaW9jdGwubyBcCitjZXBoLW9ianMgOj0gc3VwZXIubyBpbm9kZS5vIGRpci5vIGZpbGUubyBsb2Nrcy5vIGFkZHIubyBpb2N0bC5vIFwKIAlleHBvcnQubyBjYXBzLm8gc25hcC5vIHhhdHRyLm8gXAogCW1lc3Nlbmdlci5vIG1zZ3Bvb2wubyBidWZmZXIubyBwYWdlbGlzdC5vIFwKIAltZHNfY2xpZW50Lm8gbWRzbWFwLm8gXApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hZGRyLmMgYi9mcy9jZXBoL2FkZHIuYwppbmRleCBkOWM2MGI4Li41NTk4YTBkIDEwMDY0NAotLS0gYS9mcy9jZXBoL2FkZHIuYworKysgYi9mcy9jZXBoL2FkZHIuYwpAQCAtMzA5LDcgKzMwOSw4IEBACiAJCQl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBzLCBQQUdFX0NBQ0hFX1NJWkUpOwogCQl9CiAKLQkJaWYgKGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBwYWdlLT5pbmRleCwgR0ZQX05PRlMpKSB7CisJCWlmIChhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywgcGFnZS0+aW5kZXgsCisJCQkJCSAgR0ZQX05PRlMpKSB7CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQlkb3V0KCJyZWFkcGFnZXMgJXAgYWRkX3RvX3BhZ2VfY2FjaGUgZmFpbGVkICVwXG4iLAogCQkJICAgICBpbm9kZSwgcGFnZSk7CkBAIC01NTIsNyArNTUzLDcgQEAKIAkJICogcGFnZSB0cnVuY2F0aW9uIHRocmVhZCwgcG9zc2libHkgbG9zaW5nIHNvbWUgZGF0YSB0aGF0CiAJCSAqIHJhY2VkIGl0cyB3YXkgaW4KIAkJICovCi0JCWlmICgoaXNzdWVkICYgQ0VQSF9DQVBfRklMRV9DQUNIRSkgPT0gMCkKKwkJaWYgKChpc3N1ZWQgJiAoQ0VQSF9DQVBfRklMRV9DQUNIRXxDRVBIX0NBUF9GSUxFX0xBWllJTykpID09IDApCiAJCQlnZW5lcmljX2Vycm9yX3JlbW92ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIHBhZ2UpOwogCiAJCXVubG9ja19wYWdlKHBhZ2UpOwpAQCAtNzk3LDkgKzc5OCwxMiBAQAogCQkJZG91dCgiJXAgd2lsbCB3cml0ZSBwYWdlICVwIGlkeCAlbHVcbiIsCiAJCQkgICAgIGlub2RlLCBwYWdlLCBwYWdlLT5pbmRleCk7CiAKLQkJCXdyaXRlYmFja19zdGF0ID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmY2xpZW50LT53cml0ZWJhY2tfY291bnQpOwotCQkJaWYgKHdyaXRlYmFja19zdGF0ID4gQ09OR0VTVElPTl9PTl9USFJFU0goY2xpZW50LT5tb3VudF9hcmdzLT5jb25nZXN0aW9uX2tiKSkgewotCQkJCXNldF9iZGlfY29uZ2VzdGVkKCZjbGllbnQtPmJhY2tpbmdfZGV2X2luZm8sIEJMS19SV19BU1lOQyk7CisJCQl3cml0ZWJhY2tfc3RhdCA9CisJCQkgICAgICAgYXRvbWljX2xvbmdfaW5jX3JldHVybigmY2xpZW50LT53cml0ZWJhY2tfY291bnQpOworCQkJaWYgKHdyaXRlYmFja19zdGF0ID4gQ09OR0VTVElPTl9PTl9USFJFU0goCisJCQkJICAgIGNsaWVudC0+bW91bnRfYXJncy0+Y29uZ2VzdGlvbl9rYikpIHsKKwkJCQlzZXRfYmRpX2Nvbmdlc3RlZCgmY2xpZW50LT5iYWNraW5nX2Rldl9pbmZvLAorCQkJCQkJICBCTEtfUldfQVNZTkMpOwogCQkJfQogCiAJCQlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CkBAIC0xMDM2LDcgKzEwNDAsNyBAQAogCQkqcGFnZXAgPSBwYWdlOwogCiAJCWRvdXQoIndyaXRlX2JlZ2luIGZpbGUgJXAgaW5vZGUgJXAgcGFnZSAlcCAlZH4lZFxuIiwgZmlsZSwKLQkgICAgIAlpbm9kZSwgcGFnZSwgKGludClwb3MsIChpbnQpbGVuKTsKKwkJICAgICBpbm9kZSwgcGFnZSwgKGludClwb3MsIChpbnQpbGVuKTsKIAogCQlyID0gY2VwaF91cGRhdGVfd3JpdGVhYmxlX3BhZ2UoZmlsZSwgcG9zLCBsZW4sIHBhZ2UpOwogCX0gd2hpbGUgKHIgPT0gLUVBR0FJTik7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2FybW9yLmMgYi9mcy9jZXBoL2FybW9yLmMKaW5kZXggNjdiMmMwMy4uZWIyYTY2NiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hcm1vci5jCisrKyBiL2ZzL2NlcGgvYXJtb3IuYwpAQCAtMSwxMSArMSwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAoraW50IGNlcGhfYXJtb3IoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmVuZCk7CitpbnQgY2VwaF91bmFybW9yKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICplbmQpOworCiAvKgogICogYmFzZTY0IGVuY29kZS9kZWNvZGUuCiAgKi8KIAotY29uc3QgY2hhciAqcGVtX2tleSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKK3N0YXRpYyBjb25zdCBjaGFyICpwZW1fa2V5ID0KKwkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAKIHN0YXRpYyBpbnQgZW5jb2RlX2JpdHMoaW50IGMpCiB7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2F1dGguYyBiL2ZzL2NlcGgvYXV0aC5jCmluZGV4IDg5NDkwYmUuLjZkMmUzMDYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvYXV0aC5jCisrKyBiL2ZzL2NlcGgvYXV0aC5jCkBAIC0yMCw3ICsyMCw3IEBACiAJQ0VQSF9BVVRIX0NFUEhYCiB9OwogCi1pbnQgY2VwaF9hdXRoX2luaXRfcHJvdG9jb2woc3RydWN0IGNlcGhfYXV0aF9jbGllbnQgKmFjLCBpbnQgcHJvdG9jb2wpCitzdGF0aWMgaW50IGNlcGhfYXV0aF9pbml0X3Byb3RvY29sKHN0cnVjdCBjZXBoX2F1dGhfY2xpZW50ICphYywgaW50IHByb3RvY29sKQogewogCXN3aXRjaCAocHJvdG9jb2wpIHsKIAljYXNlIENFUEhfQVVUSF9OT05FOgpAQCAtMTMzLDggKzEzMyw4IEBACiAJcmV0dXJuIC1FUkFOR0U7CiB9CiAKLWludCBjZXBoX2J1aWxkX2F1dGhfcmVxdWVzdChzdHJ1Y3QgY2VwaF9hdXRoX2NsaWVudCAqYWMsCi0JCQkgICB2b2lkICptc2dfYnVmLCBzaXplX3QgbXNnX2xlbikKK3N0YXRpYyBpbnQgY2VwaF9idWlsZF9hdXRoX3JlcXVlc3Qoc3RydWN0IGNlcGhfYXV0aF9jbGllbnQgKmFjLAorCQkJCSAgIHZvaWQgKm1zZ19idWYsIHNpemVfdCBtc2dfbGVuKQogewogCXN0cnVjdCBjZXBoX21vbl9yZXF1ZXN0X2hlYWRlciAqbW9uaGRyID0gbXNnX2J1ZjsKIAl2b2lkICpwID0gbW9uaGRyICsgMTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvYXV0aF94LmMgYi9mcy9jZXBoL2F1dGhfeC5jCmluZGV4IDZkNDQwNTMuLjU4MmUwYjIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvYXV0aF94LmMKKysrIGIvZnMvY2VwaC9hdXRoX3guYwpAQCAtODcsOCArODcsOCBAQAogLyoKICAqIGdldCBleGlzdGluZyAob3IgaW5zZXJ0IG5ldykgdGlja2V0IGhhbmRsZXIKICAqLwotc3RydWN0IGNlcGhfeF90aWNrZXRfaGFuZGxlciAqZ2V0X3RpY2tldF9oYW5kbGVyKHN0cnVjdCBjZXBoX2F1dGhfY2xpZW50ICphYywKLQkJCQkJCSBpbnQgc2VydmljZSkKK3N0YXRpYyBzdHJ1Y3QgY2VwaF94X3RpY2tldF9oYW5kbGVyICoKK2dldF90aWNrZXRfaGFuZGxlcihzdHJ1Y3QgY2VwaF9hdXRoX2NsaWVudCAqYWMsIGludCBzZXJ2aWNlKQogewogCXN0cnVjdCBjZXBoX3hfdGlja2V0X2hhbmRsZXIgKnRoOwogCXN0cnVjdCBjZXBoX3hfaW5mbyAqeGkgPSBhYy0+cHJpdmF0ZTsKQEAgLTQyOSw3ICs0MjksNyBAQAogCQlhdXRoLT5zdHJ1Y3RfdiA9IDE7CiAJCWF1dGgtPmtleSA9IDA7CiAJCWZvciAodSA9ICh1NjQgKil0bXBfZW5jOyB1ICsgMSA8PSAodTY0ICopKHRtcF9lbmMgKyByZXQpOyB1KyspCi0JCQlhdXRoLT5rZXkgXj0gKnU7CisJCQlhdXRoLT5rZXkgXj0gKihfX2xlNjQgKil1OwogCQlkb3V0KCIgc2VydmVyX2NoYWxsZW5nZSAlbGx4IGNsaWVudF9jaGFsbGVuZ2UgJWxseCBrZXkgJWxseFxuIiwKIAkJICAgICB4aS0+c2VydmVyX2NoYWxsZW5nZSwgbGU2NF90b19jcHUoYXV0aC0+Y2xpZW50X2NoYWxsZW5nZSksCiAJCSAgICAgbGU2NF90b19jcHUoYXV0aC0+a2V5KSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2J1ZmZlci5jIGIvZnMvY2VwaC9idWZmZXIuYwppbmRleCBjNjc1MzVkLi5jZDM5ZjE3IDEwMDY0NAotLS0gYS9mcy9jZXBoL2J1ZmZlci5jCisrKyBiL2ZzL2NlcGgvYnVmZmVyLmMKQEAgLTQ3LDIyICs0Nyw2IEBACiAJa2ZyZWUoYik7CiB9CiAKLWludCBjZXBoX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgY2VwaF9idWZmZXIgKmIsIGludCBsZW4sIGdmcF90IGdmcCkKLXsKLQliLT52ZWMuaW92X2Jhc2UgPSBrbWFsbG9jKGxlbiwgZ2ZwIHwgX19HRlBfTk9XQVJOKTsKLQlpZiAoYi0+dmVjLmlvdl9iYXNlKSB7Ci0JCWItPmlzX3ZtYWxsb2MgPSBmYWxzZTsKLQl9IGVsc2UgewotCQliLT52ZWMuaW92X2Jhc2UgPSBfX3ZtYWxsb2MobGVuLCBnZnAsIFBBR0VfS0VSTkVMKTsKLQkJYi0+aXNfdm1hbGxvYyA9IHRydWU7Ci0JfQotCWlmICghYi0+dmVjLmlvdl9iYXNlKQotCQlyZXR1cm4gLUVOT01FTTsKLQliLT5hbGxvY19sZW4gPSBsZW47Ci0JYi0+dmVjLmlvdl9sZW4gPSBsZW47Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBjZXBoX2RlY29kZV9idWZmZXIoc3RydWN0IGNlcGhfYnVmZmVyICoqYiwgdm9pZCAqKnAsIHZvaWQgKmVuZCkKIHsKIAlzaXplX3QgbGVuOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jYXBzLmMgYi9mcy9jZXBoL2NhcHMuYwppbmRleCBiODFiZTlhLi43YmYxODJiIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtMTEzLDU4ICsxMTMsNDEgQEAKIAlyZXR1cm4gY2FwX3N0cltpXTsKIH0KIAotLyoKLSAqIENhcCByZXNlcnZhdGlvbnMKLSAqCi0gKiBNYWludGFpbiBhIGdsb2JhbCBwb29sIG9mIHByZWFsbG9jYXRlZCBzdHJ1Y3QgY2VwaF9jYXBzLCByZWZlcmVuY2VkCi0gKiBieSBzdHJ1Y3QgY2VwaF9jYXBzX3Jlc2VydmF0aW9ucy4gIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHByZWFsbG9jYXRlCi0gKiBtZW1vcnkgbmVlZGVkIHRvIHN1Y2Nlc3NmdWxseSBwcm9jZXNzIGFuIE1EUyByZXNwb25zZS4gIChJZiBhbiBNRFMKLSAqIHNlbmRzIHVzIGNhcCBpbmZvcm1hdGlvbiBhbmQgd2UgZmFpbCB0byBwcm9jZXNzIGl0LCB3ZSB3aWxsIGhhdmUKLSAqIHByb2JsZW1zIGR1ZSB0byB0aGUgY2xpZW50IGFuZCBNRFMgYmVpbmcgb3V0IG9mIHN5bmMuKQotICoKLSAqIFJlc2VydmF0aW9ucyBhcmUgJ293bmVkJyBieSBhIGNlcGhfY2FwX3Jlc2VydmF0aW9uIGNvbnRleHQuCi0gKi8KLXN0YXRpYyBzcGlubG9ja190IGNhcHNfbGlzdF9sb2NrOwotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2Fwc19saXN0OyAgLyogdW51c2VkIChyZXNlcnZlZCBvciB1bnJlc2VydmVkKSAqLwotc3RhdGljIGludCBjYXBzX3RvdGFsX2NvdW50OyAgICAgICAgLyogdG90YWwgY2FwcyBhbGxvY2F0ZWQgKi8KLXN0YXRpYyBpbnQgY2Fwc191c2VfY291bnQ7ICAgICAgICAgIC8qIGluIHVzZSAqLwotc3RhdGljIGludCBjYXBzX3Jlc2VydmVfY291bnQ7ICAgICAgLyogdW51c2VkLCByZXNlcnZlZCAqLwotc3RhdGljIGludCBjYXBzX2F2YWlsX2NvdW50OyAgICAgICAgLyogdW51c2VkLCB1bnJlc2VydmVkICovCi1zdGF0aWMgaW50IGNhcHNfbWluX2NvdW50OyAgICAgICAgICAvKiBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueSAodW5yZXNlcnZlZCkgKi8KLQotdm9pZCBfX2luaXQgY2VwaF9jYXBzX2luaXQodm9pZCkKK3ZvaWQgY2VwaF9jYXBzX2luaXQoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYykKIHsKLQlJTklUX0xJU1RfSEVBRCgmY2Fwc19saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmY2Fwc19saXN0X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZtZHNjLT5jYXBzX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiB9CiAKLXZvaWQgY2VwaF9jYXBzX2ZpbmFsaXplKHZvaWQpCit2b2lkIGNlcGhfY2Fwc19maW5hbGl6ZShzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjKQogewogCXN0cnVjdCBjZXBoX2NhcCAqY2FwOwogCi0Jc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZjYXBzX2xpc3QpKSB7Ci0JCWNhcCA9IGxpc3RfZmlyc3RfZW50cnkoJmNhcHNfbGlzdCwgc3RydWN0IGNlcGhfY2FwLCBjYXBzX2l0ZW0pOworCXNwaW5fbG9jaygmbWRzYy0+Y2Fwc19saXN0X2xvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmbWRzYy0+Y2Fwc19saXN0KSkgeworCQljYXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZHNjLT5jYXBzX2xpc3QsCisJCQkJICAgICAgIHN0cnVjdCBjZXBoX2NhcCwgY2Fwc19pdGVtKTsKIAkJbGlzdF9kZWwoJmNhcC0+Y2Fwc19pdGVtKTsKIAkJa21lbV9jYWNoZV9mcmVlKGNlcGhfY2FwX2NhY2hlcCwgY2FwKTsKIAl9Ci0JY2Fwc190b3RhbF9jb3VudCA9IDA7Ci0JY2Fwc19hdmFpbF9jb3VudCA9IDA7Ci0JY2Fwc191c2VfY291bnQgPSAwOwotCWNhcHNfcmVzZXJ2ZV9jb3VudCA9IDA7Ci0JY2Fwc19taW5fY291bnQgPSAwOwotCXNwaW5fdW5sb2NrKCZjYXBzX2xpc3RfbG9jayk7CisJbWRzYy0+Y2Fwc190b3RhbF9jb3VudCA9IDA7CisJbWRzYy0+Y2Fwc19hdmFpbF9jb3VudCA9IDA7CisJbWRzYy0+Y2Fwc191c2VfY291bnQgPSAwOworCW1kc2MtPmNhcHNfcmVzZXJ2ZV9jb3VudCA9IDA7CisJbWRzYy0+Y2Fwc19taW5fY291bnQgPSAwOworCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiB9CiAKLXZvaWQgY2VwaF9hZGp1c3RfbWluX2NhcHMoaW50IGRlbHRhKQordm9pZCBjZXBoX2FkanVzdF9taW5fY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLCBpbnQgZGVsdGEpCiB7Ci0Jc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7Ci0JY2Fwc19taW5fY291bnQgKz0gZGVsdGE7Ci0JQlVHX09OKGNhcHNfbWluX2NvdW50IDwgMCk7Ci0Jc3Bpbl91bmxvY2soJmNhcHNfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJm1kc2MtPmNhcHNfbGlzdF9sb2NrKTsKKwltZHNjLT5jYXBzX21pbl9jb3VudCArPSBkZWx0YTsKKwlCVUdfT04obWRzYy0+Y2Fwc19taW5fY291bnQgPCAwKTsKKwlzcGluX3VubG9jaygmbWRzYy0+Y2Fwc19saXN0X2xvY2spOwogfQogCi1pbnQgY2VwaF9yZXNlcnZlX2NhcHMoc3RydWN0IGNlcGhfY2FwX3Jlc2VydmF0aW9uICpjdHgsIGludCBuZWVkKQoraW50IGNlcGhfcmVzZXJ2ZV9jYXBzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCisJCSAgICAgIHN0cnVjdCBjZXBoX2NhcF9yZXNlcnZhdGlvbiAqY3R4LCBpbnQgbmVlZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgY2VwaF9jYXAgKmNhcDsKQEAgLTE3NiwxNiArMTU5LDE3IEBACiAJZG91dCgicmVzZXJ2ZSBjYXBzIGN0eD0lcCBuZWVkPSVkXG4iLCBjdHgsIG5lZWQpOwogCiAJLyogZmlyc3QgcmVzZXJ2ZSBhbnkgY2FwcyB0aGF0IGFyZSBhbHJlYWR5IGFsbG9jYXRlZCAqLwotCXNwaW5fbG9jaygmY2Fwc19saXN0X2xvY2spOwotCWlmIChjYXBzX2F2YWlsX2NvdW50ID49IG5lZWQpCisJc3Bpbl9sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CisJaWYgKG1kc2MtPmNhcHNfYXZhaWxfY291bnQgPj0gbmVlZCkKIAkJaGF2ZSA9IG5lZWQ7CiAJZWxzZQotCQloYXZlID0gY2Fwc19hdmFpbF9jb3VudDsKLQljYXBzX2F2YWlsX2NvdW50IC09IGhhdmU7Ci0JY2Fwc19yZXNlcnZlX2NvdW50ICs9IGhhdmU7Ci0JQlVHX09OKGNhcHNfdG90YWxfY291bnQgIT0gY2Fwc191c2VfY291bnQgKyBjYXBzX3Jlc2VydmVfY291bnQgKwotCSAgICAgICBjYXBzX2F2YWlsX2NvdW50KTsKLQlzcGluX3VubG9jaygmY2Fwc19saXN0X2xvY2spOworCQloYXZlID0gbWRzYy0+Y2Fwc19hdmFpbF9jb3VudDsKKwltZHNjLT5jYXBzX2F2YWlsX2NvdW50IC09IGhhdmU7CisJbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50ICs9IGhhdmU7CisJQlVHX09OKG1kc2MtPmNhcHNfdG90YWxfY291bnQgIT0gbWRzYy0+Y2Fwc191c2VfY291bnQgKworCQkJCQkgbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50ICsKKwkJCQkJIG1kc2MtPmNhcHNfYXZhaWxfY291bnQpOworCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiAKIAlmb3IgKGkgPSBoYXZlOyBpIDwgbmVlZDsgaSsrKSB7CiAJCWNhcCA9IGttZW1fY2FjaGVfYWxsb2MoY2VwaF9jYXBfY2FjaGVwLCBHRlBfTk9GUyk7CkBAIC0xOTgsMTkgKzE4MiwyMCBAQAogCX0KIAlCVUdfT04oaGF2ZSArIGFsbG9jICE9IG5lZWQpOwogCi0Jc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7Ci0JY2Fwc190b3RhbF9jb3VudCArPSBhbGxvYzsKLQljYXBzX3Jlc2VydmVfY291bnQgKz0gYWxsb2M7Ci0JbGlzdF9zcGxpY2UoJm5ld2NhcHMsICZjYXBzX2xpc3QpOworCXNwaW5fbG9jaygmbWRzYy0+Y2Fwc19saXN0X2xvY2spOworCW1kc2MtPmNhcHNfdG90YWxfY291bnQgKz0gYWxsb2M7CisJbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50ICs9IGFsbG9jOworCWxpc3Rfc3BsaWNlKCZuZXdjYXBzLCAmbWRzYy0+Y2Fwc19saXN0KTsKIAotCUJVR19PTihjYXBzX3RvdGFsX2NvdW50ICE9IGNhcHNfdXNlX2NvdW50ICsgY2Fwc19yZXNlcnZlX2NvdW50ICsKLQkgICAgICAgY2Fwc19hdmFpbF9jb3VudCk7Ci0Jc3Bpbl91bmxvY2soJmNhcHNfbGlzdF9sb2NrKTsKKwlCVUdfT04obWRzYy0+Y2Fwc190b3RhbF9jb3VudCAhPSBtZHNjLT5jYXBzX3VzZV9jb3VudCArCisJCQkJCSBtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQgKworCQkJCQkgbWRzYy0+Y2Fwc19hdmFpbF9jb3VudCk7CisJc3Bpbl91bmxvY2soJm1kc2MtPmNhcHNfbGlzdF9sb2NrKTsKIAogCWN0eC0+Y291bnQgPSBuZWVkOwogCWRvdXQoInJlc2VydmUgY2FwcyBjdHg9JXAgJWQgPSAlZCB1c2VkICsgJWQgcmVzdiArICVkIGF2YWlsXG4iLAotCSAgICAgY3R4LCBjYXBzX3RvdGFsX2NvdW50LCBjYXBzX3VzZV9jb3VudCwgY2Fwc19yZXNlcnZlX2NvdW50LAotCSAgICAgY2Fwc19hdmFpbF9jb3VudCk7CisJICAgICBjdHgsIG1kc2MtPmNhcHNfdG90YWxfY291bnQsIG1kc2MtPmNhcHNfdXNlX2NvdW50LAorCSAgICAgbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50LCBtZHNjLT5jYXBzX2F2YWlsX2NvdW50KTsKIAlyZXR1cm4gMDsKIAogb3V0X2FsbG9jX2NvdW50OgpAQCAtMjIwLDI2ICsyMDUsMjkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgY2VwaF91bnJlc2VydmVfY2FwcyhzdHJ1Y3QgY2VwaF9jYXBfcmVzZXJ2YXRpb24gKmN0eCkKK2ludCBjZXBoX3VucmVzZXJ2ZV9jYXBzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCisJCQlzdHJ1Y3QgY2VwaF9jYXBfcmVzZXJ2YXRpb24gKmN0eCkKIHsKIAlkb3V0KCJ1bnJlc2VydmUgY2FwcyBjdHg9JXAgY291bnQ9JWRcbiIsIGN0eCwgY3R4LT5jb3VudCk7CiAJaWYgKGN0eC0+Y291bnQpIHsKLQkJc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7Ci0JCUJVR19PTihjYXBzX3Jlc2VydmVfY291bnQgPCBjdHgtPmNvdW50KTsKLQkJY2Fwc19yZXNlcnZlX2NvdW50IC09IGN0eC0+Y291bnQ7Ci0JCWNhcHNfYXZhaWxfY291bnQgKz0gY3R4LT5jb3VudDsKKwkJc3Bpbl9sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CisJCUJVR19PTihtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQgPCBjdHgtPmNvdW50KTsKKwkJbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50IC09IGN0eC0+Y291bnQ7CisJCW1kc2MtPmNhcHNfYXZhaWxfY291bnQgKz0gY3R4LT5jb3VudDsKIAkJY3R4LT5jb3VudCA9IDA7CiAJCWRvdXQoInVucmVzZXJ2ZSBjYXBzICVkID0gJWQgdXNlZCArICVkIHJlc3YgKyAlZCBhdmFpbFxuIiwKLQkJICAgICBjYXBzX3RvdGFsX2NvdW50LCBjYXBzX3VzZV9jb3VudCwgY2Fwc19yZXNlcnZlX2NvdW50LAotCQkgICAgIGNhcHNfYXZhaWxfY291bnQpOwotCQlCVUdfT04oY2Fwc190b3RhbF9jb3VudCAhPSBjYXBzX3VzZV9jb3VudCArIGNhcHNfcmVzZXJ2ZV9jb3VudCArCi0JCSAgICAgICBjYXBzX2F2YWlsX2NvdW50KTsKLQkJc3Bpbl91bmxvY2soJmNhcHNfbGlzdF9sb2NrKTsKKwkJICAgICBtZHNjLT5jYXBzX3RvdGFsX2NvdW50LCBtZHNjLT5jYXBzX3VzZV9jb3VudCwKKwkJICAgICBtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQsIG1kc2MtPmNhcHNfYXZhaWxfY291bnQpOworCQlCVUdfT04obWRzYy0+Y2Fwc190b3RhbF9jb3VudCAhPSBtZHNjLT5jYXBzX3VzZV9jb3VudCArCisJCQkJCQkgbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50ICsKKwkJCQkJCSBtZHNjLT5jYXBzX2F2YWlsX2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJm1kc2MtPmNhcHNfbGlzdF9sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY2VwaF9jYXAgKmdldF9jYXAoc3RydWN0IGNlcGhfY2FwX3Jlc2VydmF0aW9uICpjdHgpCitzdGF0aWMgc3RydWN0IGNlcGhfY2FwICpnZXRfY2FwKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCisJCQkJc3RydWN0IGNlcGhfY2FwX3Jlc2VydmF0aW9uICpjdHgpCiB7CiAJc3RydWN0IGNlcGhfY2FwICpjYXAgPSBOVUxMOwogCkBAIC0yNDcsNzEgKzIzNSw3NCBAQAogCWlmICghY3R4KSB7CiAJCWNhcCA9IGttZW1fY2FjaGVfYWxsb2MoY2VwaF9jYXBfY2FjaGVwLCBHRlBfTk9GUyk7CiAJCWlmIChjYXApIHsKLQkJCWNhcHNfdXNlX2NvdW50Kys7Ci0JCQljYXBzX3RvdGFsX2NvdW50Kys7CisJCQltZHNjLT5jYXBzX3VzZV9jb3VudCsrOworCQkJbWRzYy0+Y2Fwc190b3RhbF9jb3VudCsrOwogCQl9CiAJCXJldHVybiBjYXA7CiAJfQogCi0Jc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiAJZG91dCgiZ2V0X2NhcCBjdHg9JXAgKCVkKSAlZCA9ICVkIHVzZWQgKyAlZCByZXN2ICsgJWQgYXZhaWxcbiIsCi0JICAgICBjdHgsIGN0eC0+Y291bnQsIGNhcHNfdG90YWxfY291bnQsIGNhcHNfdXNlX2NvdW50LAotCSAgICAgY2Fwc19yZXNlcnZlX2NvdW50LCBjYXBzX2F2YWlsX2NvdW50KTsKKwkgICAgIGN0eCwgY3R4LT5jb3VudCwgbWRzYy0+Y2Fwc190b3RhbF9jb3VudCwgbWRzYy0+Y2Fwc191c2VfY291bnQsCisJICAgICBtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQsIG1kc2MtPmNhcHNfYXZhaWxfY291bnQpOwogCUJVR19PTighY3R4LT5jb3VudCk7Ci0JQlVHX09OKGN0eC0+Y291bnQgPiBjYXBzX3Jlc2VydmVfY291bnQpOwotCUJVR19PTihsaXN0X2VtcHR5KCZjYXBzX2xpc3QpKTsKKwlCVUdfT04oY3R4LT5jb3VudCA+IG1kc2MtPmNhcHNfcmVzZXJ2ZV9jb3VudCk7CisJQlVHX09OKGxpc3RfZW1wdHkoJm1kc2MtPmNhcHNfbGlzdCkpOwogCiAJY3R4LT5jb3VudC0tOwotCWNhcHNfcmVzZXJ2ZV9jb3VudC0tOwotCWNhcHNfdXNlX2NvdW50Kys7CisJbWRzYy0+Y2Fwc19yZXNlcnZlX2NvdW50LS07CisJbWRzYy0+Y2Fwc191c2VfY291bnQrKzsKIAotCWNhcCA9IGxpc3RfZmlyc3RfZW50cnkoJmNhcHNfbGlzdCwgc3RydWN0IGNlcGhfY2FwLCBjYXBzX2l0ZW0pOworCWNhcCA9IGxpc3RfZmlyc3RfZW50cnkoJm1kc2MtPmNhcHNfbGlzdCwgc3RydWN0IGNlcGhfY2FwLCBjYXBzX2l0ZW0pOwogCWxpc3RfZGVsKCZjYXAtPmNhcHNfaXRlbSk7CiAKLQlCVUdfT04oY2Fwc190b3RhbF9jb3VudCAhPSBjYXBzX3VzZV9jb3VudCArIGNhcHNfcmVzZXJ2ZV9jb3VudCArCi0JICAgICAgIGNhcHNfYXZhaWxfY291bnQpOwotCXNwaW5fdW5sb2NrKCZjYXBzX2xpc3RfbG9jayk7CisJQlVHX09OKG1kc2MtPmNhcHNfdG90YWxfY291bnQgIT0gbWRzYy0+Y2Fwc191c2VfY291bnQgKworCSAgICAgICBtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQgKyBtZHNjLT5jYXBzX2F2YWlsX2NvdW50KTsKKwlzcGluX3VubG9jaygmbWRzYy0+Y2Fwc19saXN0X2xvY2spOwogCXJldHVybiBjYXA7CiB9CiAKLXZvaWQgY2VwaF9wdXRfY2FwKHN0cnVjdCBjZXBoX2NhcCAqY2FwKQordm9pZCBjZXBoX3B1dF9jYXAoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywgc3RydWN0IGNlcGhfY2FwICpjYXApCiB7Ci0Jc3Bpbl9sb2NrKCZjYXBzX2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiAJZG91dCgicHV0X2NhcCAlcCAlZCA9ICVkIHVzZWQgKyAlZCByZXN2ICsgJWQgYXZhaWxcbiIsCi0JICAgICBjYXAsIGNhcHNfdG90YWxfY291bnQsIGNhcHNfdXNlX2NvdW50LAotCSAgICAgY2Fwc19yZXNlcnZlX2NvdW50LCBjYXBzX2F2YWlsX2NvdW50KTsKLQljYXBzX3VzZV9jb3VudC0tOworCSAgICAgY2FwLCBtZHNjLT5jYXBzX3RvdGFsX2NvdW50LCBtZHNjLT5jYXBzX3VzZV9jb3VudCwKKwkgICAgIG1kc2MtPmNhcHNfcmVzZXJ2ZV9jb3VudCwgbWRzYy0+Y2Fwc19hdmFpbF9jb3VudCk7CisJbWRzYy0+Y2Fwc191c2VfY291bnQtLTsKIAkvKgogCSAqIEtlZXAgc29tZSBwcmVhbGxvY2F0ZWQgY2FwcyBhcm91bmQgKGNlcGhfbWluX2NvdW50KSwgdG8KIAkgKiBhdm9pZCBsb3RzIG9mIGZyZWUvYWxsb2MgY2h1cm4uCiAJICovCi0JaWYgKGNhcHNfYXZhaWxfY291bnQgPj0gY2Fwc19yZXNlcnZlX2NvdW50ICsgY2Fwc19taW5fY291bnQpIHsKLQkJY2Fwc190b3RhbF9jb3VudC0tOworCWlmIChtZHNjLT5jYXBzX2F2YWlsX2NvdW50ID49IG1kc2MtPmNhcHNfcmVzZXJ2ZV9jb3VudCArCisJCQkJICAgICAgbWRzYy0+Y2Fwc19taW5fY291bnQpIHsKKwkJbWRzYy0+Y2Fwc190b3RhbF9jb3VudC0tOwogCQlrbWVtX2NhY2hlX2ZyZWUoY2VwaF9jYXBfY2FjaGVwLCBjYXApOwogCX0gZWxzZSB7Ci0JCWNhcHNfYXZhaWxfY291bnQrKzsKLQkJbGlzdF9hZGQoJmNhcC0+Y2Fwc19pdGVtLCAmY2Fwc19saXN0KTsKKwkJbWRzYy0+Y2Fwc19hdmFpbF9jb3VudCsrOworCQlsaXN0X2FkZCgmY2FwLT5jYXBzX2l0ZW0sICZtZHNjLT5jYXBzX2xpc3QpOwogCX0KIAotCUJVR19PTihjYXBzX3RvdGFsX2NvdW50ICE9IGNhcHNfdXNlX2NvdW50ICsgY2Fwc19yZXNlcnZlX2NvdW50ICsKLQkgICAgICAgY2Fwc19hdmFpbF9jb3VudCk7Ci0Jc3Bpbl91bmxvY2soJmNhcHNfbGlzdF9sb2NrKTsKKwlCVUdfT04obWRzYy0+Y2Fwc190b3RhbF9jb3VudCAhPSBtZHNjLT5jYXBzX3VzZV9jb3VudCArCisJICAgICAgIG1kc2MtPmNhcHNfcmVzZXJ2ZV9jb3VudCArIG1kc2MtPmNhcHNfYXZhaWxfY291bnQpOworCXNwaW5fdW5sb2NrKCZtZHNjLT5jYXBzX2xpc3RfbG9jayk7CiB9CiAKIHZvaWQgY2VwaF9yZXNlcnZhdGlvbl9zdGF0dXMoc3RydWN0IGNlcGhfY2xpZW50ICpjbGllbnQsCiAJCQkgICAgIGludCAqdG90YWwsIGludCAqYXZhaWwsIGludCAqdXNlZCwgaW50ICpyZXNlcnZlZCwKIAkJCSAgICAgaW50ICptaW4pCiB7CisJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyA9ICZjbGllbnQtPm1kc2M7CisKIAlpZiAodG90YWwpCi0JCSp0b3RhbCA9IGNhcHNfdG90YWxfY291bnQ7CisJCSp0b3RhbCA9IG1kc2MtPmNhcHNfdG90YWxfY291bnQ7CiAJaWYgKGF2YWlsKQotCQkqYXZhaWwgPSBjYXBzX2F2YWlsX2NvdW50OworCQkqYXZhaWwgPSBtZHNjLT5jYXBzX2F2YWlsX2NvdW50OwogCWlmICh1c2VkKQotCQkqdXNlZCA9IGNhcHNfdXNlX2NvdW50OworCQkqdXNlZCA9IG1kc2MtPmNhcHNfdXNlX2NvdW50OwogCWlmIChyZXNlcnZlZCkKLQkJKnJlc2VydmVkID0gY2Fwc19yZXNlcnZlX2NvdW50OworCQkqcmVzZXJ2ZWQgPSBtZHNjLT5jYXBzX3Jlc2VydmVfY291bnQ7CiAJaWYgKG1pbikKLQkJKm1pbiA9IGNhcHNfbWluX2NvdW50OworCQkqbWluID0gbWRzYy0+Y2Fwc19taW5fY291bnQ7CiB9CiAKIC8qCkBAIC0zMzYsMjIgKzMyNywyOSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdHJ1Y3QgY2VwaF9jYXAgKmNlcGhfZ2V0X2NhcF9mb3JfbWRzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWRzKQoreworCXN0cnVjdCBjZXBoX2NhcCAqY2FwOworCisJc3Bpbl9sb2NrKCZjaS0+dmZzX2lub2RlLmlfbG9jayk7CisJY2FwID0gX19nZXRfY2FwX2Zvcl9tZHMoY2ksIG1kcyk7CisJc3Bpbl91bmxvY2soJmNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKKwlyZXR1cm4gY2FwOworfQorCiAvKgotICogUmV0dXJuIGlkIG9mIGFueSBNRFMgd2l0aCBhIGNhcCwgcHJlZmVyYWJseSBGSUxFX1dSfFdSQlVGRkVSfEVYQ0wsIGVsc2UKLSAqIC0xLgorICogUmV0dXJuIGlkIG9mIGFueSBNRFMgd2l0aCBhIGNhcCwgcHJlZmVyYWJseSBGSUxFX1dSfEJVRkZFUnxFWENMLCBlbHNlIC0xLgogICovCi1zdGF0aWMgaW50IF9fY2VwaF9nZXRfY2FwX21kcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgdTMyICptc2VxKQorc3RhdGljIGludCBfX2NlcGhfZ2V0X2NhcF9tZHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kpCiB7CiAJc3RydWN0IGNlcGhfY2FwICpjYXA7CiAJaW50IG1kcyA9IC0xOwogCXN0cnVjdCByYl9ub2RlICpwOwogCi0JLyogcHJlZmVyIG1kcyB3aXRoIFdSfFdSQlVGRkVSfEVYQ0wgY2FwcyAqLworCS8qIHByZWZlciBtZHMgd2l0aCBXUnxCVUZGRVJ8RVhDTCBjYXBzICovCiAJZm9yIChwID0gcmJfZmlyc3QoJmNpLT5pX2NhcHMpOyBwOyBwID0gcmJfbmV4dChwKSkgewogCQljYXAgPSByYl9lbnRyeShwLCBzdHJ1Y3QgY2VwaF9jYXAsIGNpX25vZGUpOwogCQltZHMgPSBjYXAtPm1kczsKLQkJaWYgKG1zZXEpCi0JCQkqbXNlcSA9IGNhcC0+bXNlcTsKIAkJaWYgKGNhcC0+aXNzdWVkICYgKENFUEhfQ0FQX0ZJTEVfV1IgfAogCQkJCSAgIENFUEhfQ0FQX0ZJTEVfQlVGRkVSIHwKIAkJCQkgICBDRVBIX0NBUF9GSUxFX0VYQ0wpKQpAQCAtMzY0LDcgKzM2Miw3IEBACiB7CiAJaW50IG1kczsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCW1kcyA9IF9fY2VwaF9nZXRfY2FwX21kcyhjZXBoX2lub2RlKGlub2RlKSwgTlVMTCk7CisJbWRzID0gX19jZXBoX2dldF9jYXBfbWRzKGNlcGhfaW5vZGUoaW5vZGUpKTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJcmV0dXJuIG1kczsKIH0KQEAgLTQ4Myw4ICs0ODEsOCBAQAogCSAqIEVhY2ggdGltZSB3ZSByZWNlaXZlIEZJTEVfQ0FDSEUgYW5ldywgd2UgaW5jcmVtZW50CiAJICogaV9yZGNhY2hlX2dlbi4KIAkgKi8KLQlpZiAoKGlzc3VlZCAmIENFUEhfQ0FQX0ZJTEVfQ0FDSEUpICYmCi0JICAgIChoYWQgJiBDRVBIX0NBUF9GSUxFX0NBQ0hFKSA9PSAwKQorCWlmICgoaXNzdWVkICYgKENFUEhfQ0FQX0ZJTEVfQ0FDSEV8Q0VQSF9DQVBfRklMRV9MQVpZSU8pKSAmJgorCSAgICAoaGFkICYgKENFUEhfQ0FQX0ZJTEVfQ0FDSEV8Q0VQSF9DQVBfRklMRV9MQVpZSU8pKSA9PSAwKQogCQljaS0+aV9yZGNhY2hlX2dlbisrOwogCiAJLyoKQEAgLTU0Myw3ICs1NDEsNyBAQAogCQkJbmV3X2NhcCA9IE5VTEw7CiAJCX0gZWxzZSB7CiAJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQluZXdfY2FwID0gZ2V0X2NhcChjYXBzX3Jlc2VydmF0aW9uKTsKKwkJCW5ld19jYXAgPSBnZXRfY2FwKG1kc2MsIGNhcHNfcmVzZXJ2YXRpb24pOwogCQkJaWYgKG5ld19jYXAgPT0gTlVMTCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWdvdG8gcmV0cnk7CkBAIC01ODgsNiArNTg2LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByX2VycigiY2VwaF9hZGRfY2FwOiBjb3VsZG4ndCBmaW5kIHNuYXAgcmVhbG0gJWxseFxuIiwKIAkJCSAgICAgICByZWFsbWlubyk7CisJCQlXQVJOX09OKCFyZWFsbSk7CiAJCX0KIAl9CiAKQEAgLTgzMSw3ICs4MzAsNyBAQAogewogCWludCB3YW50ID0gMDsKIAlpbnQgbW9kZTsKLQlmb3IgKG1vZGUgPSAwOyBtb2RlIDwgNDsgbW9kZSsrKQorCWZvciAobW9kZSA9IDA7IG1vZGUgPCBDRVBIX0ZJTEVfTU9ERV9OVU07IG1vZGUrKykKIAkJaWYgKGNpLT5pX25yX2J5X21vZGVbbW9kZV0pCiAJCQl3YW50IHw9IGNlcGhfY2Fwc19mb3JfbW9kZShtb2RlKTsKIAlyZXR1cm4gd2FudDsKQEAgLTkwMSw3ICs5MDAsNyBAQAogCQljaS0+aV9hdXRoX2NhcCA9IE5VTEw7CiAKIAlpZiAocmVtb3ZlZCkKLQkJY2VwaF9wdXRfY2FwKGNhcCk7CisJCWNlcGhfcHV0X2NhcChtZHNjLCBjYXApOwogCiAJaWYgKCFfX2NlcGhfaXNfYW55X2NhcHMoY2kpICYmIGNpLT5pX3NuYXBfcmVhbG0pIHsKIAkJc3RydWN0IGNlcGhfc25hcF9yZWFsbSAqcmVhbG0gPSBjaS0+aV9zbmFwX3JlYWxtOwpAQCAtMTE5Nyw2ICsxMTk2LDggQEAKICAqLwogdm9pZCBfX2NlcGhfZmx1c2hfc25hcHMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksCiAJCQlzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqKnBzZXNzaW9uKQorCQlfX3JlbGVhc2VzKGNpLT52ZnNfaW5vZGUtPmlfbG9jaykKKwkJX19hY3F1aXJlcyhjaS0+dmZzX2lub2RlLT5pX2xvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9ICZjaS0+dmZzX2lub2RlOwogCWludCBtZHM7CkBAIC0xMjMyLDcgKzEyMzMsMTMgQEAKIAkJQlVHX09OKGNhcHNuYXAtPmRpcnR5ID09IDApOwogCiAJCS8qIHBpY2sgbWRzLCB0YWtlIHNfbXV0ZXggKi8KLQkJbWRzID0gX19jZXBoX2dldF9jYXBfbWRzKGNpLCAmbXNlcSk7CisJCWlmIChjaS0+aV9hdXRoX2NhcCA9PSBOVUxMKSB7CisJCQlkb3V0KCJubyBhdXRoIGNhcCAobWlncmF0aW5nPyksIGRvaW5nIG5vdGhpbmdcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJbWRzID0gY2ktPmlfYXV0aF9jYXAtPnNlc3Npb24tPnNfbWRzOworCQltc2VxID0gY2ktPmlfYXV0aF9jYXAtPm1zZXE7CisKIAkJaWYgKHNlc3Npb24gJiYgc2Vzc2lvbi0+c19tZHMgIT0gbWRzKSB7CiAJCQlkb3V0KCJvb3BzLCB3cm9uZyBzZXNzaW9uICVwIG11dGV4XG4iLCBzZXNzaW9uKTsKIAkJCW11dGV4X3VubG9jaygmc2Vzc2lvbi0+c19tdXRleCk7CkBAIC0xMjUxLDggKzEyNTgsOCBAQAogCQkJfQogCQkJLyoKIAkJCSAqIGlmIHNlc3Npb24gPT0gTlVMTCwgd2UgcmFjZWQgYWdhaW5zdCBhIGNhcAotCQkJICogZGVsZXRpb24uICByZXRyeSwgYW5kIHdlJ2xsIGdldCBhIGJldHRlcgotCQkJICogQG1kcyB2YWx1ZSBuZXh0IHRpbWUuCisJCQkgKiBkZWxldGlvbiBvciBtaWdyYXRpb24uICByZXRyeSwgYW5kIHdlJ2xsCisJCQkgKiBnZXQgYSBiZXR0ZXIgQG1kcyB2YWx1ZSBuZXh0IHRpbWUuCiAJCQkgKi8KIAkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlnb3RvIHJldHJ5OwpAQCAtMTI5MCw2ICsxMjk3LDcgQEAKIAlsaXN0X2RlbF9pbml0KCZjaS0+aV9zbmFwX2ZsdXNoX2l0ZW0pOwogCXNwaW5fdW5sb2NrKCZtZHNjLT5zbmFwX2ZsdXNoX2xvY2spOwogCitvdXQ6CiAJaWYgKHBzZXNzaW9uKQogCQkqcHNlc3Npb24gPSBzZXNzaW9uOwogCWVsc2UgaWYgKHNlc3Npb24pIHsKQEAgLTE0MzUsNyArMTQ0Myw2IEBACiAgKi8KIHZvaWQgY2VwaF9jaGVja19jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgZmxhZ3MsCiAJCSAgICAgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24pCi0JX19yZWxlYXNlcyhzZXNzaW9uLT5zX211dGV4KQogewogCXN0cnVjdCBjZXBoX2NsaWVudCAqY2xpZW50ID0gY2VwaF9pbm9kZV90b19jbGllbnQoJmNpLT52ZnNfaW5vZGUpOwogCXN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MgPSAmY2xpZW50LT5tZHNjOwpAQCAtMTUxMCwxMSArMTUxNywxMyBAQAogCSAgICBjaS0+aV93cmJ1ZmZlcl9yZWYgPT0gMCAmJiAgICAgICAgICAgICAgIC8qIG5vIGRpcnR5IHBhZ2VzLi4uICovCiAJICAgIGNpLT5pX3JkY2FjaGVfZ2VuICYmICAgICAgICAgICAgICAgICAgICAgLyogbWF5IGhhdmUgY2FjaGVkIHBhZ2VzICovCiAJICAgIChmaWxlX3dhbnRlZCA9PSAwIHx8ICAgICAgICAgICAgICAgICAgICAgLyogbm8gb3BlbiBmaWxlcyAqLwotCSAgICAgKHJldm9raW5nICYgQ0VQSF9DQVBfRklMRV9DQUNIRSkpICYmICAgICAvKiAgb3IgcmV2b2tpbmcgY2FjaGUgKi8KKwkgICAgIChyZXZva2luZyAmIChDRVBIX0NBUF9GSUxFX0NBQ0hFfAorCQkJICBDRVBIX0NBUF9GSUxFX0xBWllJTykpKSAmJiAvKiAgb3IgcmV2b2tpbmcgY2FjaGUgKi8KIAkgICAgIXRyaWVkX2ludmFsaWRhdGUpIHsKIAkJZG91dCgiY2hlY2tfY2FwcyB0cnlpbmcgdG8gaW52YWxpZGF0ZSBvbiAlcFxuIiwgaW5vZGUpOwogCQlpZiAodHJ5X25vbmJsb2NraW5nX2ludmFsaWRhdGUoaW5vZGUpIDwgMCkgewotCQkJaWYgKHJldm9raW5nICYgQ0VQSF9DQVBfRklMRV9DQUNIRSkgeworCQkJaWYgKHJldm9raW5nICYgKENFUEhfQ0FQX0ZJTEVfQ0FDSEV8CisJCQkJCUNFUEhfQ0FQX0ZJTEVfTEFaWUlPKSkgewogCQkJCWRvdXQoImNoZWNrX2NhcHMgcXVldWluZyBpbnZhbGlkYXRlXG4iKTsKIAkJCQlxdWV1ZV9pbnZhbGlkYXRlID0gMTsKIAkJCQljaS0+aV9yZGNhY2hlX3Jldm9raW5nID0gY2ktPmlfcmRjYWNoZV9nZW47CkBAIC0yMjUwLDggKzIyNTksNyBAQAogCQkJICAgICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCSAgICAgc3RydWN0IGNlcGhfY2FwICpjYXAsCiAJCQkgICAgIHN0cnVjdCBjZXBoX2J1ZmZlciAqeGF0dHJfYnVmKQotCV9fcmVsZWFzZXMoaW5vZGUtPmlfbG9jaykKLQlfX3JlbGVhc2VzKHNlc3Npb24tPnNfbXV0ZXgpCisJCV9fcmVsZWFzZXMoaW5vZGUtPmlfbG9jaykKIHsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOwogCWludCBtZHMgPSBzZXNzaW9uLT5zX21kczsKQEAgLTIyNzgsNiArMjI4Niw3IEBACiAJICogd2lsbCBpbnZhbGlkYXRlIF9hZnRlcl8gd3JpdGViYWNrLikKIAkgKi8KIAlpZiAoKChjYXAtPmlzc3VlZCAmIH5uZXdjYXBzKSAmIENFUEhfQ0FQX0ZJTEVfQ0FDSEUpICYmCisJICAgIChuZXdjYXBzICYgQ0VQSF9DQVBfRklMRV9MQVpZSU8pID09IDAgJiYKIAkgICAgIWNpLT5pX3dyYnVmZmVyX3JlZikgewogCQlpZiAodHJ5X25vbmJsb2NraW5nX2ludmFsaWRhdGUoaW5vZGUpID09IDApIHsKIAkJCXJldm9rZWRfcmRjYWNoZSA9IDE7CkBAIC0yMzY5LDE1ICsyMzc4LDIyIEBACiAKIAkvKiByZXZvY2F0aW9uLCBncmFudCwgb3Igbm8tb3A/ICovCiAJaWYgKGNhcC0+aXNzdWVkICYgfm5ld2NhcHMpIHsKLQkJZG91dCgicmV2b2NhdGlvbjogJXMgLT4gJXNcbiIsIGNlcGhfY2FwX3N0cmluZyhjYXAtPmlzc3VlZCksCi0JCSAgICAgY2VwaF9jYXBfc3RyaW5nKG5ld2NhcHMpKTsKLQkJaWYgKCh1c2VkICYgfm5ld2NhcHMpICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpCi0JCQl3cml0ZWJhY2sgPSAxOyAvKiB3aWxsIGRlbGF5IGFjayAqLwotCQllbHNlIGlmIChkaXJ0eSAmIH5uZXdjYXBzKQotCQkJY2hlY2tfY2FwcyA9IDE7ICAvKiBpbml0aWF0ZSB3cml0ZWJhY2sgaW4gY2hlY2tfY2FwcyAqLwotCQllbHNlIGlmICgoKHVzZWQgJiB+bmV3Y2FwcykgJiBDRVBIX0NBUF9GSUxFX0NBQ0hFKSA9PSAwIHx8Ci0JCQkgICByZXZva2VkX3JkY2FjaGUpCi0JCQljaGVja19jYXBzID0gMjsgICAgIC8qIHNlbmQgcmV2b2tlIGFjayBpbiBjaGVja19jYXBzICovCisJCWludCByZXZva2luZyA9IGNhcC0+aXNzdWVkICYgfm5ld2NhcHM7CisKKwkJZG91dCgicmV2b2NhdGlvbjogJXMgLT4gJXMgKHJldm9raW5nICVzKVxuIiwKKwkJICAgICBjZXBoX2NhcF9zdHJpbmcoY2FwLT5pc3N1ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhuZXdjYXBzKSwKKwkJICAgICBjZXBoX2NhcF9zdHJpbmcocmV2b2tpbmcpKTsKKwkJaWYgKHJldm9raW5nICYgdXNlZCAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKQorCQkJd3JpdGViYWNrID0gMTsgIC8qIGluaXRpYXRlIHdyaXRlYmFjazsgd2lsbCBkZWxheSBhY2sgKi8KKwkJZWxzZSBpZiAocmV2b2tpbmcgPT0gQ0VQSF9DQVBfRklMRV9DQUNIRSAmJgorCQkJIChuZXdjYXBzICYgQ0VQSF9DQVBfRklMRV9MQVpZSU8pID09IDAgJiYKKwkJCSBxdWV1ZV9pbnZhbGlkYXRlKQorCQkJOyAvKiBkbyBub3RoaW5nIHlldCwgaW52YWxpZGF0aW9uIHdpbGwgYmUgcXVldWVkICovCisJCWVsc2UgaWYgKGNhcCA9PSBjaS0+aV9hdXRoX2NhcCkKKwkJCWNoZWNrX2NhcHMgPSAxOyAvKiBjaGVjayBhdXRoIGNhcCBvbmx5ICovCisJCWVsc2UKKwkJCWNoZWNrX2NhcHMgPSAyOyAvKiBjaGVjayBhbGwgY2FwcyAqLwogCQljYXAtPmlzc3VlZCA9IG5ld2NhcHM7CiAJCWNhcC0+aW1wbGVtZW50ZWQgfD0gbmV3Y2FwczsKIAl9IGVsc2UgaWYgKGNhcC0+aXNzdWVkID09IG5ld2NhcHMpIHsKQEAgLTI1NjgsNyArMjU4NCw4IEBACiAgKiBjYWxsZXIgaG9sZHMgc19tdXRleAogICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfY2FwX2V4cG9ydChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgY2VwaF9tZHNfY2FwcyAqZXgsCi0JCQkgICAgICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbikKKwkJCSAgICAgIHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uLAorCQkJICAgICAgaW50ICpvcGVuX3RhcmdldF9zZXNzaW9ucykKIHsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOwogCWludCBtZHMgPSBzZXNzaW9uLT5zX21kczsKQEAgLTI2MDAsNiArMjYxNywxMiBAQAogCQkJY2ktPmlfY2FwX2V4cG9ydGluZ19tZHMgPSBtZHM7CiAJCQljaS0+aV9jYXBfZXhwb3J0aW5nX21zZXEgPSBtc2VxOwogCQkJY2ktPmlfY2FwX2V4cG9ydGluZ19pc3N1ZWQgPSBjYXAtPmlzc3VlZDsKKworCQkJLyoKKwkJCSAqIG1ha2Ugc3VyZSB3ZSBoYXZlIG9wZW4gc2Vzc2lvbnMgd2l0aCBhbGwgcG9zc2libGUKKwkJCSAqIGV4cG9ydCB0YXJnZXRzLCBzbyB0aGF0IHdlIGdldCB0aGUgbWF0Y2hpbmcgSU1QT1JUCisJCQkgKi8KKwkJCSpvcGVuX3RhcmdldF9zZXNzaW9ucyA9IDE7CiAJCX0KIAkJX19jZXBoX3JlbW92ZV9jYXAoY2FwKTsKIAl9CkBAIC0yNjc1LDYgKzI2OTgsMTAgQEAKIAl1NjQgc2l6ZSwgbWF4X3NpemU7CiAJdTY0IHRpZDsKIAl2b2lkICpzbmFwdHJhY2U7CisJc2l6ZV90IHNuYXB0cmFjZV9sZW47CisJdm9pZCAqZmxvY2s7CisJdTMyIGZsb2NrX2xlbjsKKwlpbnQgb3Blbl90YXJnZXRfc2Vzc2lvbnMgPSAwOwogCiAJZG91dCgiaGFuZGxlX2NhcHMgZnJvbSBtZHMlZFxuIiwgbWRzKTsKIApAQCAtMjY4Myw3ICsyNzEwLDYgQEAKIAlpZiAobXNnLT5mcm9udC5pb3ZfbGVuIDwgc2l6ZW9mKCpoKSkKIAkJZ290byBiYWQ7CiAJaCA9IG1zZy0+ZnJvbnQuaW92X2Jhc2U7Ci0Jc25hcHRyYWNlID0gaCArIDE7CiAJb3AgPSBsZTMyX3RvX2NwdShoLT5vcCk7CiAJdmluby5pbm8gPSBsZTY0X3RvX2NwdShoLT5pbm8pOwogCXZpbm8uc25hcCA9IENFUEhfTk9TTkFQOwpAQCAtMjY5Myw2ICsyNzE5LDIxIEBACiAJc2l6ZSA9IGxlNjRfdG9fY3B1KGgtPnNpemUpOwogCW1heF9zaXplID0gbGU2NF90b19jcHUoaC0+bWF4X3NpemUpOwogCisJc25hcHRyYWNlID0gaCArIDE7CisJc25hcHRyYWNlX2xlbiA9IGxlMzJfdG9fY3B1KGgtPnNuYXBfdHJhY2VfbGVuKTsKKworCWlmIChsZTE2X3RvX2NwdShtc2ctPmhkci52ZXJzaW9uKSA+PSAyKSB7CisJCXZvaWQgKnAsICplbmQ7CisKKwkJcCA9IHNuYXB0cmFjZSArIHNuYXB0cmFjZV9sZW47CisJCWVuZCA9IG1zZy0+ZnJvbnQuaW92X2Jhc2UgKyBtc2ctPmZyb250Lmlvdl9sZW47CisJCWNlcGhfZGVjb2RlXzMyX3NhZmUoJnAsIGVuZCwgZmxvY2tfbGVuLCBiYWQpOworCQlmbG9jayA9IHA7CisJfSBlbHNlIHsKKwkJZmxvY2sgPSBOVUxMOworCQlmbG9ja19sZW4gPSAwOworCX0KKwogCW11dGV4X2xvY2soJnNlc3Npb24tPnNfbXV0ZXgpOwogCXNlc3Npb24tPnNfc2VxKys7CiAJZG91dCgiIG1kcyVkIHNlcSAlbGxkIGNhcCBzZXEgJXVcbiIsIHNlc3Npb24tPnNfbWRzLCBzZXNzaW9uLT5zX3NlcSwKQEAgLTI3MTQsNyArMjc1NSw3IEBACiAJCSAqIGFsb25nIGZvciB0aGUgbWRzICh3aG8gY2xlYXJseSB0aGlua3Mgd2Ugc3RpbGwgaGF2ZSB0aGlzCiAJCSAqIGNhcCkuCiAJCSAqLwotCQljZXBoX2FkZF9jYXBfcmVsZWFzZXMobWRzYywgc2Vzc2lvbiwgLTEpOworCQljZXBoX2FkZF9jYXBfcmVsZWFzZXMobWRzYywgc2Vzc2lvbik7CiAJCWNlcGhfc2VuZF9jYXBfcmVsZWFzZXMobWRzYywgc2Vzc2lvbik7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNzI2LDEyICsyNzY3LDEyIEBACiAJCWdvdG8gZG9uZTsKIAogCWNhc2UgQ0VQSF9DQVBfT1BfRVhQT1JUOgotCQloYW5kbGVfY2FwX2V4cG9ydChpbm9kZSwgaCwgc2Vzc2lvbik7CisJCWhhbmRsZV9jYXBfZXhwb3J0KGlub2RlLCBoLCBzZXNzaW9uLCAmb3Blbl90YXJnZXRfc2Vzc2lvbnMpOwogCQlnb3RvIGRvbmU7CiAKIAljYXNlIENFUEhfQ0FQX09QX0lNUE9SVDoKIAkJaGFuZGxlX2NhcF9pbXBvcnQobWRzYywgaW5vZGUsIGgsIHNlc3Npb24sCi0JCQkJICBzbmFwdHJhY2UsIGxlMzJfdG9fY3B1KGgtPnNuYXBfdHJhY2VfbGVuKSk7CisJCQkJICBzbmFwdHJhY2UsIHNuYXB0cmFjZV9sZW4pOwogCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIENIRUNLX0NBUFNfTk9ERUxBWSwKIAkJCQlzZXNzaW9uKTsKIAkJZ290byBkb25lX3VubG9ja2VkOwpAQCAtMjc3Myw2ICsyODE0LDggQEAKIGRvbmVfdW5sb2NrZWQ6CiAJaWYgKGlub2RlKQogCQlpcHV0KGlub2RlKTsKKwlpZiAob3Blbl90YXJnZXRfc2Vzc2lvbnMpCisJCWNlcGhfbWRzY19vcGVuX2V4cG9ydF90YXJnZXRfc2Vzc2lvbnMobWRzYywgc2Vzc2lvbik7CiAJcmV0dXJuOwogCiBiYWQ6CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NlcGhfZnJhZy5oIGIvZnMvY2VwaC9jZXBoX2ZyYWcuaAppbmRleCA3OTNmNTBjLi41YmFiYjhlIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NlcGhfZnJhZy5oCisrKyBiL2ZzL2NlcGgvY2VwaF9mcmFnLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9GU19DRVBIX0ZSQUdfSAotI2RlZmluZSBfRlNfQ0VQSF9GUkFHX0gKKyNpZm5kZWYgRlNfQ0VQSF9GUkFHX0gKKyNkZWZpbmUgRlNfQ0VQSF9GUkFHX0gKIAogLyoKICAqICJGcmFncyIgYXJlIGEgd2F5IHRvIGRlc2NyaWJlIGEgc3Vic2V0IG9mIGEgMzItYml0IG51bWJlciBzcGFjZSwKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2VwaF9mcy5jIGIvZnMvY2VwaC9jZXBoX2ZzLmMKaW5kZXggNzlkNzZiYy4uM2FjNmNjNyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jZXBoX2ZzLmMKKysrIGIvZnMvY2VwaC9jZXBoX2ZzLmMKQEAgLTI5LDQ2ICsyOSw0NCBAQAogCiBpbnQgY2VwaF9mbGFnc190b19tb2RlKGludCBmbGFncykKIHsKKwlpbnQgbW9kZTsKKwogI2lmZGVmIE9fRElSRUNUT1JZICAvKiBmaXhtZSAqLwogCWlmICgoZmxhZ3MgJiBPX0RJUkVDVE9SWSkgPT0gT19ESVJFQ1RPUlkpCiAJCXJldHVybiBDRVBIX0ZJTEVfTU9ERV9QSU47CiAjZW5kaWYKLSNpZmRlZiBPX0xBWlkKLQlpZiAoZmxhZ3MgJiBPX0xBWlkpCi0JCXJldHVybiBDRVBIX0ZJTEVfTU9ERV9MQVpZOwotI2VuZGlmCiAJaWYgKChmbGFncyAmIE9fQVBQRU5EKSA9PSBPX0FQUEVORCkKIAkJZmxhZ3MgfD0gT19XUk9OTFk7CiAKLQlmbGFncyAmPSBPX0FDQ01PREU7Ci0JaWYgKChmbGFncyAmIE9fUkRXUikgPT0gT19SRFdSKQotCQlyZXR1cm4gQ0VQSF9GSUxFX01PREVfUkRXUjsKLQlpZiAoKGZsYWdzICYgT19XUk9OTFkpID09IE9fV1JPTkxZKQotCQlyZXR1cm4gQ0VQSF9GSUxFX01PREVfV1I7Ci0JcmV0dXJuIENFUEhfRklMRV9NT0RFX1JEOworCWlmICgoZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fUkRXUikKKwkJbW9kZSA9IENFUEhfRklMRV9NT0RFX1JEV1I7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkKKwkJbW9kZSA9IENFUEhfRklMRV9NT0RFX1dSOworCWVsc2UKKwkJbW9kZSA9IENFUEhfRklMRV9NT0RFX1JEOworCisjaWZkZWYgT19MQVpZCisJaWYgKGZsYWdzICYgT19MQVpZKQorCQltb2RlIHw9IENFUEhfRklMRV9NT0RFX0xBWlk7CisjZW5kaWYKKworCXJldHVybiBtb2RlOwogfQogCiBpbnQgY2VwaF9jYXBzX2Zvcl9tb2RlKGludCBtb2RlKQogewotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0VQSF9GSUxFX01PREVfUElOOgotCQlyZXR1cm4gQ0VQSF9DQVBfUElOOwotCWNhc2UgQ0VQSF9GSUxFX01PREVfUkQ6Ci0JCXJldHVybiBDRVBIX0NBUF9QSU4gfCBDRVBIX0NBUF9GSUxFX1NIQVJFRCB8CisJaW50IGNhcHMgPSBDRVBIX0NBUF9QSU47CisKKwlpZiAobW9kZSAmIENFUEhfRklMRV9NT0RFX1JEKQorCQljYXBzIHw9IENFUEhfQ0FQX0ZJTEVfU0hBUkVEIHwKIAkJCUNFUEhfQ0FQX0ZJTEVfUkQgfCBDRVBIX0NBUF9GSUxFX0NBQ0hFOwotCWNhc2UgQ0VQSF9GSUxFX01PREVfUkRXUjoKLQkJcmV0dXJuIENFUEhfQ0FQX1BJTiB8IENFUEhfQ0FQX0ZJTEVfU0hBUkVEIHwKLQkJCUNFUEhfQ0FQX0ZJTEVfRVhDTCB8Ci0JCQlDRVBIX0NBUF9GSUxFX1JEIHwgQ0VQSF9DQVBfRklMRV9DQUNIRSB8CisJaWYgKG1vZGUgJiBDRVBIX0ZJTEVfTU9ERV9XUikKKwkJY2FwcyB8PSBDRVBIX0NBUF9GSUxFX0VYQ0wgfAogCQkJQ0VQSF9DQVBfRklMRV9XUiB8IENFUEhfQ0FQX0ZJTEVfQlVGRkVSIHwKIAkJCUNFUEhfQ0FQX0FVVEhfU0hBUkVEIHwgQ0VQSF9DQVBfQVVUSF9FWENMIHwKIAkJCUNFUEhfQ0FQX1hBVFRSX1NIQVJFRCB8IENFUEhfQ0FQX1hBVFRSX0VYQ0w7Ci0JY2FzZSBDRVBIX0ZJTEVfTU9ERV9XUjoKLQkJcmV0dXJuIENFUEhfQ0FQX1BJTiB8IENFUEhfQ0FQX0ZJTEVfU0hBUkVEIHwKLQkJCUNFUEhfQ0FQX0ZJTEVfRVhDTCB8Ci0JCQlDRVBIX0NBUF9GSUxFX1dSIHwgQ0VQSF9DQVBfRklMRV9CVUZGRVIgfAotCQkJQ0VQSF9DQVBfQVVUSF9TSEFSRUQgfCBDRVBIX0NBUF9BVVRIX0VYQ0wgfAotCQkJQ0VQSF9DQVBfWEFUVFJfU0hBUkVEIHwgQ0VQSF9DQVBfWEFUVFJfRVhDTDsKLQl9Ci0JcmV0dXJuIDA7CisJaWYgKG1vZGUgJiBDRVBIX0ZJTEVfTU9ERV9MQVpZKQorCQljYXBzIHw9IENFUEhfQ0FQX0ZJTEVfTEFaWUlPOworCisJcmV0dXJuIGNhcHM7CiB9CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NlcGhfZnMuaCBiL2ZzL2NlcGgvY2VwaF9mcy5oCmluZGV4IDJmYTk5MmUuLmQ1NjE5YWMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2VwaF9mcy5oCisrKyBiL2ZzL2NlcGgvY2VwaF9mcy5oCkBAIC05LDI3ICs5LDEzIEBACiAgKiBMR1BMMgogICovCiAKLSNpZm5kZWYgX0ZTX0NFUEhfQ0VQSF9GU19ICi0jZGVmaW5lIF9GU19DRVBIX0NFUEhfRlNfSAorI2lmbmRlZiBDRVBIX0ZTX0gKKyNkZWZpbmUgQ0VQSF9GU19ICiAKICNpbmNsdWRlICJtc2dyLmgiCiAjaW5jbHVkZSAicmFkb3MuaCIKIAogLyoKLSAqIENlcGggcmVsZWFzZSB2ZXJzaW9uCi0gKi8KLSNkZWZpbmUgQ0VQSF9WRVJTSU9OX01BSk9SIDAKLSNkZWZpbmUgQ0VQSF9WRVJTSU9OX01JTk9SIDIwCi0jZGVmaW5lIENFUEhfVkVSU0lPTl9QQVRDSCAwCi0KLSNkZWZpbmUgX0NFUEhfU1RSSU5HSUZZKHgpICN4Ci0jZGVmaW5lIENFUEhfU1RSSU5HSUZZKHgpIF9DRVBIX1NUUklOR0lGWSh4KQotI2RlZmluZSBDRVBIX01BS0VfVkVSU0lPTih4LCB5LCB6KSBDRVBIX1NUUklOR0lGWSh4KSAiLiIgQ0VQSF9TVFJJTkdJRlkoeSkgXAotCSIuIiBDRVBIX1NUUklOR0lGWSh6KQotI2RlZmluZSBDRVBIX1ZFUlNJT04gQ0VQSF9NQUtFX1ZFUlNJT04oQ0VQSF9WRVJTSU9OX01BSk9SLCBcCi0JCQkJICAgICAgIENFUEhfVkVSU0lPTl9NSU5PUiwgQ0VQSF9WRVJTSU9OX1BBVENIKQotCi0vKgogICogc3VicHJvdG9jb2wgdmVyc2lvbnMuICB3aGVuIHNwZWNpZmljIG1lc3NhZ2VzIHR5cGVzIG9yIGhpZ2gtbGV2ZWwKICAqIHByb3RvY29scyBjaGFuZ2UsIGJ1bXAgdGhlIGFmZmVjdGVkIGNvbXBvbmVudHMuICB3ZSBrZWVwIHJldgogICogaW50ZXJuYWwgY2x1c3RlciBwcm90b2NvbHMgc2VwYXJhdGVseSBmcm9tIHRoZSBwdWJsaWMsCkBAIC01MywxOCArMzksMTAgQEAKIC8qCiAgKiBmZWF0dXJlIGJpdHMKICAqLwotI2RlZmluZSBDRVBIX0ZFQVRVUkVfVUlEICAgICAgICAxCi0jZGVmaW5lIENFUEhfRkVBVFVSRV9OT1NSQ0FERFIgIDIKLSNkZWZpbmUgQ0VQSF9GRUFUVVJFX0ZMT0NLICAgICAgNAotCi0jZGVmaW5lIENFUEhfRkVBVFVSRV9TVVBQT1JURURfTU9OICBDRVBIX0ZFQVRVUkVfVUlEfENFUEhfRkVBVFVSRV9OT1NSQ0FERFIKLSNkZWZpbmUgQ0VQSF9GRUFUVVJFX1JFUVVJUkVEX01PTiAgIENFUEhfRkVBVFVSRV9VSUQKLSNkZWZpbmUgQ0VQSF9GRUFUVVJFX1NVUFBPUlRFRF9NRFMgIENFUEhfRkVBVFVSRV9VSUR8Q0VQSF9GRUFUVVJFX05PU1JDQUREUnxDRVBIX0ZFQVRVUkVfRkxPQ0sKLSNkZWZpbmUgQ0VQSF9GRUFUVVJFX1JFUVVJUkVEX01EUyAgIENFUEhfRkVBVFVSRV9VSUQKLSNkZWZpbmUgQ0VQSF9GRUFUVVJFX1NVUFBPUlRFRF9PU0QgIENFUEhfRkVBVFVSRV9VSUR8Q0VQSF9GRUFUVVJFX05PU1JDQUREUgotI2RlZmluZSBDRVBIX0ZFQVRVUkVfUkVRVUlSRURfT1NEICAgQ0VQSF9GRUFUVVJFX1VJRAotI2RlZmluZSBDRVBIX0ZFQVRVUkVfU1VQUE9SVEVEX0NMSUVOVCBDRVBIX0ZFQVRVUkVfTk9TUkNBRERSCi0jZGVmaW5lIENFUEhfRkVBVFVSRV9SRVFVSVJFRF9DTElFTlQgQ0VQSF9GRUFUVVJFX05PU1JDQUREUgorI2RlZmluZSBDRVBIX0ZFQVRVUkVfVUlEICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIENFUEhfRkVBVFVSRV9OT1NSQ0FERFIgICAgICAoMTw8MSkKKyNkZWZpbmUgQ0VQSF9GRUFUVVJFX01PTkNMT0NLQ0hFQ0sgICgxPDwyKQorI2RlZmluZSBDRVBIX0ZFQVRVUkVfRkxPQ0sgICAgICAgICAgKDE8PDMpCiAKIAogLyoKQEAgLTk2LDYgKzc0LDggQEAKICNkZWZpbmUgQ0VQSF9DUllQVE9fTk9ORSAweDAKICNkZWZpbmUgQ0VQSF9DUllQVE9fQUVTICAweDEKIAorI2RlZmluZSBDRVBIX0FFU19JViAiY2VwaHNhZ2V5dWRhZ3JlZyIKKwogLyogc2VjdXJpdHkvYXV0aGVudGljYXRpb24gcHJvdG9jb2xzICovCiAjZGVmaW5lIENFUEhfQVVUSF9VTktOT1dOCTB4MAogI2RlZmluZSBDRVBIX0FVVEhfTk9ORQkgCTB4MQpAQCAtMjc1LDYgKzI1NSw3IEBACiAjZGVmaW5lIENFUEhfTE9DS19JREZUICAgICAgICA1MTIgICAvKiBkaXIgZnJhZyB0cmVlICovCiAjZGVmaW5lIENFUEhfTE9DS19JTkVTVCAgICAgICAxMDI0ICAvKiBtZHMgaW50ZXJuYWwgKi8KICNkZWZpbmUgQ0VQSF9MT0NLX0lYQVRUUiAgICAgIDIwNDgKKyNkZWZpbmUgQ0VQSF9MT0NLX0lGTE9DSyAgICAgIDQwOTYgIC8qIGFkdmlzb3J5IGZpbGUgbG9ja3MgKi8KICNkZWZpbmUgQ0VQSF9MT0NLX0lOTyAgICAgICAgIDgxOTIgIC8qIGltbXV0YWJsZSBpbm9kZSBiaXRzOyBub3QgYSBsb2NrICovCiAKIC8qIGNsaWVudF9zZXNzaW9uIG9wcyAqLwpAQCAtMzE2LDYgKzI5Nyw4IEBACiAJQ0VQSF9NRFNfT1BfUk1YQVRUUiAgICA9IDB4MDExMDYsCiAJQ0VQSF9NRFNfT1BfU0VUTEFZT1VUICA9IDB4MDExMDcsCiAJQ0VQSF9NRFNfT1BfU0VUQVRUUiAgICA9IDB4MDExMDgsCisJQ0VQSF9NRFNfT1BfU0VURklMRUxPQ0s9IDB4MDExMDksCisJQ0VQSF9NRFNfT1BfR0VURklMRUxPQ0s9IDB4MDAxMTAsCiAKIAlDRVBIX01EU19PUF9NS05PRCAgICAgID0gMHgwMTIwMSwKIAlDRVBIX01EU19PUF9MSU5LICAgICAgID0gMHgwMTIwMiwKQEAgLTM4Niw2ICszNjksMTUgQEAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgY2VwaF9maWxlX2xheW91dCBsYXlvdXQ7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2V0bGF5b3V0OworCXN0cnVjdCB7CisJCV9fdTggcnVsZTsgLyogY3VycmVudGx5IGZjbnRsIG9yIGZsb2NrICovCisJCV9fdTggdHlwZTsgLyogc2hhcmVkLCBleGNsdXNpdmUsIHJlbW92ZSovCisJCV9fbGU2NCBwaWQ7IC8qIHByb2Nlc3MgaWQgcmVxdWVzdGluZyB0aGUgbG9jayAqLworCQlfX2xlNjQgcGlkX25hbWVzcGFjZTsKKwkJX19sZTY0IHN0YXJ0OyAvKiBpbml0aWFsIGxvY2F0aW9uIHRvIGxvY2sgKi8KKwkJX19sZTY0IGxlbmd0aDsgLyogbnVtIGJ5dGVzIHRvIGxvY2sgZnJvbSBzdGFydCAqLworCQlfX3U4IHdhaXQ7IC8qIHdpbGwgY2FsbGVyIHdhaXQgZm9yIGxvY2sgdG8gYmVjb21lIGF2YWlsYWJsZT8gKi8KKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmaWxlbG9ja19jaGFuZ2U7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBDRVBIX01EU19GTEFHX1JFUExBWSAgICAgICAgMSAgLyogdGhpcyBpcyBhIHJlcGxheWVkIG9wICovCkBAIC00ODAsNiArNDcyLDIzIEBACiAJX19sZTMyIGRpc3RbXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIENFUEhfTE9DS19GQ05UTCAgICAxCisjZGVmaW5lIENFUEhfTE9DS19GTE9DSyAgICAyCisKKyNkZWZpbmUgQ0VQSF9MT0NLX1NIQVJFRCAgIDEKKyNkZWZpbmUgQ0VQSF9MT0NLX0VYQ0wgICAgIDIKKyNkZWZpbmUgQ0VQSF9MT0NLX1VOTE9DSyAgIDQKKworc3RydWN0IGNlcGhfZmlsZWxvY2sgeworCV9fbGU2NCBzdGFydDsvKiBmaWxlIG9mZnNldCB0byBzdGFydCBsb2NrIGF0ICovCisJX19sZTY0IGxlbmd0aDsgLyogbnVtIGJ5dGVzIHRvIGxvY2s7IDAgZm9yIGFsbCBmb2xsb3dpbmcgc3RhcnQgKi8KKwlfX2xlNjQgY2xpZW50OyAvKiB3aGljaCBjbGllbnQgaG9sZHMgdGhlIGxvY2sgKi8KKwlfX2xlNjQgcGlkOyAvKiBwcm9jZXNzIGlkIGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlIGNsaWVudCAqLworCV9fbGU2NCBwaWRfbmFtZXNwYWNlOworCV9fdTggdHlwZTsgLyogc2hhcmVkIGxvY2ssIGV4Y2x1c2l2ZSBsb2NrLCBvciB1bmxvY2sgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qIGZpbGUgYWNjZXNzIG1vZGVzICovCiAjZGVmaW5lIENFUEhfRklMRV9NT0RFX1BJTiAgICAgICAgMAogI2RlZmluZSBDRVBIX0ZJTEVfTU9ERV9SRCAgICAgICAgIDEKQEAgLTUwOCw5ICs1MTcsMTAgQEAKICNkZWZpbmUgQ0VQSF9DQVBfU0FVVEggICAgICAyCiAjZGVmaW5lIENFUEhfQ0FQX1NMSU5LICAgICAgNAogI2RlZmluZSBDRVBIX0NBUF9TWEFUVFIgICAgIDYKLSNkZWZpbmUgQ0VQSF9DQVBfU0ZJTEUgICAgICA4ICAgLyogZ29lcyBhdCB0aGUgZW5kICh1c2VzID4yIGNhcCBiaXRzKSAqLworI2RlZmluZSBDRVBIX0NBUF9TRklMRSAgICAgIDgKKyNkZWZpbmUgQ0VQSF9DQVBfU0ZMT0NLICAgIDIwIAogCi0jZGVmaW5lIENFUEhfQ0FQX0JJVFMgICAgICAgMTYKKyNkZWZpbmUgQ0VQSF9DQVBfQklUUyAgICAgICAyMgogCiAvKiBjb21wb3NlZCB2YWx1ZXMgKi8KICNkZWZpbmUgQ0VQSF9DQVBfQVVUSF9TSEFSRUQgIChDRVBIX0NBUF9HU0hBUkVEICA8PCBDRVBIX0NBUF9TQVVUSCkKQEAgLTUyOCw2ICs1MzgsOSBAQAogI2RlZmluZSBDRVBIX0NBUF9GSUxFX0JVRkZFUiAgIChDRVBIX0NBUF9HQlVGRkVSICAgPDwgQ0VQSF9DQVBfU0ZJTEUpCiAjZGVmaW5lIENFUEhfQ0FQX0ZJTEVfV1JFWFRFTkQgKENFUEhfQ0FQX0dXUkVYVEVORCA8PCBDRVBIX0NBUF9TRklMRSkKICNkZWZpbmUgQ0VQSF9DQVBfRklMRV9MQVpZSU8gICAoQ0VQSF9DQVBfR0xBWllJTyAgIDw8IENFUEhfQ0FQX1NGSUxFKQorI2RlZmluZSBDRVBIX0NBUF9GTE9DS19TSEFSRUQgIChDRVBIX0NBUF9HU0hBUkVEICAgPDwgQ0VQSF9DQVBfU0ZMT0NLKQorI2RlZmluZSBDRVBIX0NBUF9GTE9DS19FWENMICAgIChDRVBIX0NBUF9HRVhDTCAgICAgPDwgQ0VQSF9DQVBfU0ZMT0NLKQorCiAKIC8qIGNhcCBtYXNrcyAoZm9yIGdldGF0dHIpICovCiAjZGVmaW5lIENFUEhfU1RBVF9DQVBfSU5PREUgICAgQ0VQSF9DQVBfUElOCkBAIC01NjMsNyArNTc2LDggQEAKIAkJCSAgICAgIENFUEhfQ0FQX0ZJTEVfRVhDTCkKICNkZWZpbmUgQ0VQSF9DQVBfQU5ZX1dSICAgKENFUEhfQ0FQX0FOWV9FWENMIHwgQ0VQSF9DQVBfQU5ZX0ZJTEVfV1IpCiAjZGVmaW5lIENFUEhfQ0FQX0FOWSAgICAgIChDRVBIX0NBUF9BTllfUkQgfCBDRVBIX0NBUF9BTllfRVhDTCB8IFwKLQkJCSAgIENFUEhfQ0FQX0FOWV9GSUxFX1dSIHwgQ0VQSF9DQVBfUElOKQorCQkJICAgQ0VQSF9DQVBfQU5ZX0ZJTEVfV1IgfCBDRVBIX0NBUF9GSUxFX0xBWllJTyB8IFwKKwkJCSAgIENFUEhfQ0FQX1BJTikKIAogI2RlZmluZSBDRVBIX0NBUF9MT0NLUyAoQ0VQSF9MT0NLX0lGSUxFIHwgQ0VQSF9MT0NLX0lBVVRIIHwgQ0VQSF9MT0NLX0lMSU5LIHwgXAogCQkJQ0VQSF9MT0NLX0lYQVRUUikKQEAgLTY1MywxMiArNjY3LDIxIEBACiAJX19sZTY0IGNhcF9pZDsKIAlfX2xlMzIgd2FudGVkOwogCV9fbGUzMiBpc3N1ZWQ7CisJX19sZTY0IHNuYXByZWFsbTsKKwlfX2xlNjQgcGF0aGJhc2U7ICAgICAgICAvKiBiYXNlIGlubyBmb3Igb3VyIHBhdGggdG8gdGhpcyBpbm8gKi8KKwlfX2xlMzIgZmxvY2tfbGVuOyAgICAgICAvKiBzaXplIG9mIGZsb2NrIHN0YXRlIGJsb2IsIGlmIGFueSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisvKiBmb2xsb3dlZCBieSBmbG9jayBibG9iICovCisKK3N0cnVjdCBjZXBoX21kc19jYXBfcmVjb25uZWN0X3YxIHsKKwlfX2xlNjQgY2FwX2lkOworCV9fbGUzMiB3YW50ZWQ7CisJX19sZTMyIGlzc3VlZDsKIAlfX2xlNjQgc2l6ZTsKIAlzdHJ1Y3QgY2VwaF90aW1lc3BlYyBtdGltZSwgYXRpbWU7CiAJX19sZTY0IHNuYXByZWFsbTsKIAlfX2xlNjQgcGF0aGJhc2U7ICAgICAgICAvKiBiYXNlIGlubyBmb3Igb3VyIHBhdGggdG8gdGhpcyBpbm8gKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotLyogZm9sbG93ZWQgYnkgZW5jb2RlZCBzdHJpbmcgKi8KIAogc3RydWN0IGNlcGhfbWRzX3NuYXByZWFsbV9yZWNvbm5lY3QgewogCV9fbGU2NCBpbm87ICAgICAvKiBzbmFwIHJlYWxtIGJhc2UgKi8KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2VwaF9oYXNoLmggYi9mcy9jZXBoL2NlcGhfaGFzaC5oCmluZGV4IDVhYzQ3MGMuLmQwOTljM2YgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2VwaF9oYXNoLmgKKysrIGIvZnMvY2VwaC9jZXBoX2hhc2guaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX0ZTX0NFUEhfSEFTSF9ICi0jZGVmaW5lIF9GU19DRVBIX0hBU0hfSAorI2lmbmRlZiBGU19DRVBIX0hBU0hfSAorI2RlZmluZSBGU19DRVBIX0hBU0hfSAogCiAjZGVmaW5lIENFUEhfU1RSX0hBU0hfTElOVVggICAgICAweDEgIC8qIGxpbnV4IGRjYWNoZSBoYXNoICovCiAjZGVmaW5lIENFUEhfU1RSX0hBU0hfUkpFTktJTlMgICAweDIgIC8qIHJvYmVydCBqZW5raW5zJyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jZXBoX3N0cmluZ3MuYyBiL2ZzL2NlcGgvY2VwaF9zdHJpbmdzLmMKaW5kZXggNzUwM2FlZS4uYzYxNzlkMyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jZXBoX3N0cmluZ3MuYworKysgYi9mcy9jZXBoL2NlcGhfc3RyaW5ncy5jCkBAIC0yOCw2ICsyOCw3IEBACiAJY2FzZSBDRVBIX09TRF9PUF9UUlVOQ0FURTogcmV0dXJuICJ0cnVuY2F0ZSI7CiAJY2FzZSBDRVBIX09TRF9PUF9aRVJPOiByZXR1cm4gInplcm8iOwogCWNhc2UgQ0VQSF9PU0RfT1BfV1JJVEVGVUxMOiByZXR1cm4gIndyaXRlZnVsbCI7CisJY2FzZSBDRVBIX09TRF9PUF9ST0xMQkFDSzogcmV0dXJuICJyb2xsYmFjayI7CiAKIAljYXNlIENFUEhfT1NEX09QX0FQUEVORDogcmV0dXJuICJhcHBlbmQiOwogCWNhc2UgQ0VQSF9PU0RfT1BfU1RBUlRTWU5DOiByZXR1cm4gInN0YXJ0c3luYyI7CkBAIC0xMjksNiArMTMwLDggQEAKIAljYXNlIENFUEhfTURTX09QX0xTU05BUDogcmV0dXJuICJsc3NuYXAiOwogCWNhc2UgQ0VQSF9NRFNfT1BfTUtTTkFQOiByZXR1cm4gIm1rc25hcCI7CiAJY2FzZSBDRVBIX01EU19PUF9STVNOQVA6IHJldHVybiAicm1zbmFwIjsKKwljYXNlIENFUEhfTURTX09QX1NFVEZJTEVMT0NLOiByZXR1cm4gInNldGZpbGVsb2NrIjsKKwljYXNlIENFUEhfTURTX09QX0dFVEZJTEVMT0NLOiByZXR1cm4gImdldGZpbGVsb2NrIjsKIAl9CiAJcmV0dXJuICI/Pz8iOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jcnVzaC9jcnVzaC5oIGIvZnMvY2VwaC9jcnVzaC9jcnVzaC5oCmluZGV4IGRjZDdlNzUuLjk3ZTQzNWIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY3J1c2gvY3J1c2guaAorKysgYi9mcy9jZXBoL2NydXNoL2NydXNoLmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9DUlVTSF9DUlVTSF9ICi0jZGVmaW5lIF9DUlVTSF9DUlVTSF9ICisjaWZuZGVmIENFUEhfQ1JVU0hfQ1JVU0hfSAorI2RlZmluZSBDRVBIX0NSVVNIX0NSVVNIX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY3J1c2gvaGFzaC5oIGIvZnMvY2VwaC9jcnVzaC9oYXNoLmgKaW5kZXggZmY0OGUxMTAuLjkxZTg4NDIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY3J1c2gvaGFzaC5oCisrKyBiL2ZzL2NlcGgvY3J1c2gvaGFzaC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQ1JVU0hfSEFTSF9ICi0jZGVmaW5lIF9DUlVTSF9IQVNIX0gKKyNpZm5kZWYgQ0VQSF9DUlVTSF9IQVNIX0gKKyNkZWZpbmUgQ0VQSF9DUlVTSF9IQVNIX0gKIAogI2RlZmluZSBDUlVTSF9IQVNIX1JKRU5LSU5TMSAgIDAKIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jcnVzaC9tYXBwZXIuaCBiL2ZzL2NlcGgvY3J1c2gvbWFwcGVyLmgKaW5kZXggOThlOTAwNC4uYzQ2Yjk5YyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jcnVzaC9tYXBwZXIuaAorKysgYi9mcy9jZXBoL2NydXNoL21hcHBlci5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQ1JVU0hfTUFQUEVSX0gKLSNkZWZpbmUgX0NSVVNIX01BUFBFUl9ICisjaWZuZGVmIENFUEhfQ1JVU0hfTUFQUEVSX0gKKyNkZWZpbmUgQ0VQSF9DUlVTSF9NQVBQRVJfSAogCiAvKgogICogQ1JVU0ggZnVuY3Rpb25zIGZvciBmaW5kIHJ1bGVzIGFuZCB0aGVuIG1hcHBpbmcgYW4gaW5wdXQgdG8gYW4KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY3J5cHRvLmMgYi9mcy9jZXBoL2NyeXB0by5jCmluZGV4IGY3MDRiM2IuLmEzZTYyN2YgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY3J5cHRvLmMKKysrIGIvZnMvY2VwaC9jcnlwdG8uYwpAQCAtNzUsMTAgKzc1LDExIEBACiAJcmV0dXJuIGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImNiYyhhZXMpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiB9CiAKLWNvbnN0IHU4ICphZXNfaXYgPSAiY2VwaHNhZ2V5dWRhZ3JlZyI7CitzdGF0aWMgY29uc3QgdTggKmFlc19pdiA9ICh1OCAqKUNFUEhfQUVTX0lWOwogCi1pbnQgY2VwaF9hZXNfZW5jcnlwdChjb25zdCB2b2lkICprZXksIGludCBrZXlfbGVuLCB2b2lkICpkc3QsIHNpemVfdCAqZHN0X2xlbiwKLQkJICAgICBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzcmNfbGVuKQorc3RhdGljIGludCBjZXBoX2Flc19lbmNyeXB0KGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4sCisJCQkgICAgdm9pZCAqZHN0LCBzaXplX3QgKmRzdF9sZW4sCisJCQkgICAgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc3JjX2xlbikKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bMl0sIHNnX291dFsxXTsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gY2VwaF9jcnlwdG9fYWxsb2NfY2lwaGVyKCk7CkBAIC0xMjYsOSArMTI3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjZXBoX2Flc19lbmNyeXB0Mihjb25zdCB2b2lkICprZXksIGludCBrZXlfbGVuLCB2b2lkICpkc3QsIHNpemVfdCAqZHN0X2xlbiwKLQkJICAgICAgY29uc3Qgdm9pZCAqc3JjMSwgc2l6ZV90IHNyYzFfbGVuLAotCQkgICAgICBjb25zdCB2b2lkICpzcmMyLCBzaXplX3Qgc3JjMl9sZW4pCitzdGF0aWMgaW50IGNlcGhfYWVzX2VuY3J5cHQyKGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4sIHZvaWQgKmRzdCwKKwkJCSAgICAgc2l6ZV90ICpkc3RfbGVuLAorCQkJICAgICBjb25zdCB2b2lkICpzcmMxLCBzaXplX3Qgc3JjMV9sZW4sCisJCQkgICAgIGNvbnN0IHZvaWQgKnNyYzIsIHNpemVfdCBzcmMyX2xlbikKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW5bM10sIHNnX291dFsxXTsKIAlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gY2VwaF9jcnlwdG9fYWxsb2NfY2lwaGVyKCk7CkBAIC0xNzksOCArMTgxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNlcGhfYWVzX2RlY3J5cHQoY29uc3Qgdm9pZCAqa2V5LCBpbnQga2V5X2xlbiwgdm9pZCAqZHN0LCBzaXplX3QgKmRzdF9sZW4sCi0JCSAgICAgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgc3JjX2xlbikKK3N0YXRpYyBpbnQgY2VwaF9hZXNfZGVjcnlwdChjb25zdCB2b2lkICprZXksIGludCBrZXlfbGVuLAorCQkJICAgIHZvaWQgKmRzdCwgc2l6ZV90ICpkc3RfbGVuLAorCQkJICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY19sZW4pCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX2luWzFdLCBzZ19vdXRbMl07CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGNlcGhfY3J5cHRvX2FsbG9jX2NpcGhlcigpOwpAQCAtMjM4LDEwICsyNDEsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNlcGhfYWVzX2RlY3J5cHQyKGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4sCi0JCSAgICAgIHZvaWQgKmRzdDEsIHNpemVfdCAqZHN0MV9sZW4sCi0JCSAgICAgIHZvaWQgKmRzdDIsIHNpemVfdCAqZHN0Ml9sZW4sCi0JCSAgICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY19sZW4pCitzdGF0aWMgaW50IGNlcGhfYWVzX2RlY3J5cHQyKGNvbnN0IHZvaWQgKmtleSwgaW50IGtleV9sZW4sCisJCQkgICAgIHZvaWQgKmRzdDEsIHNpemVfdCAqZHN0MV9sZW4sCisJCQkgICAgIHZvaWQgKmRzdDIsIHNpemVfdCAqZHN0Ml9sZW4sCisJCQkgICAgIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY19sZW4pCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX2luWzFdLCBzZ19vdXRbM107CiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGNlcGhfY3J5cHRvX2FsbG9jX2NpcGhlcigpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jcnlwdG8uaCBiL2ZzL2NlcGgvY3J5cHRvLmgKaW5kZXggNDBiNTAyZS4uYmRmMzg2MCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jcnlwdG8uaAorKysgYi9mcy9jZXBoL2NyeXB0by5oCkBAIC00Miw3ICs0Miw3IEBACiAJCQkgY29uc3Qgdm9pZCAqc3JjMiwgc2l6ZV90IHNyYzJfbGVuKTsKIAogLyogYXJtb3IuYyAqLwotZXh0ZXJuIGludCBjZXBoX2FybW9yKGNoYXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCBjb25zdCB2b2lkICplbmQpOwotZXh0ZXJuIGludCBjZXBoX3VuYXJtb3Iodm9pZCAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmVuZCk7CitleHRlcm4gaW50IGNlcGhfYXJtb3IoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmVuZCk7CitleHRlcm4gaW50IGNlcGhfdW5hcm1vcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZW5kKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9jZXBoL2RlYnVnZnMuYyBiL2ZzL2NlcGgvZGVidWdmcy5jCmluZGV4IGYyZjUzMzIuLjM2MGM0ZjIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGVidWdmcy5jCisrKyBiL2ZzL2NlcGgvZGVidWdmcy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBERUZJTkVfU0hPV19GVU5DKG5hbWUpIAkJCQkJCVwKKyNkZWZpbmUgREVGSU5FX1NIT1dfRlVOQyhuYW1lKQkJCQkJCVwKIHN0YXRpYyBpbnQgbmFtZSMjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCQlcCiB7CQkJCQkJCQkJXAogCXN0cnVjdCBzZXFfZmlsZSAqc2Y7CQkJCQkJXApAQCAtMzYxLDggKzM2MSw4IEBACiAJaW50IHJldCA9IDA7CiAJY2hhciBuYW1lWzgwXTsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgRlNJRF9GT1JNQVQgIi5jbGllbnQlbGxkIiwKLQkJIFBSX0ZTSUQoJmNsaWVudC0+ZnNpZCksIGNsaWVudC0+bW9uYy5hdXRoLT5nbG9iYWxfaWQpOworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVwVS5jbGllbnQlbGxkIiwgJmNsaWVudC0+ZnNpZCwKKwkJIGNsaWVudC0+bW9uYy5hdXRoLT5nbG9iYWxfaWQpOwogCiAJY2xpZW50LT5kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBjZXBoX2RlYnVnZnNfZGlyKTsKIAlpZiAoIWNsaWVudC0+ZGVidWdmc19kaXIpCkBAIC00MzIsMTEgKzQzMiwxMiBAQAogCWlmICghY2xpZW50LT5kZWJ1Z2ZzX2NhcHMpCiAJCWdvdG8gb3V0OwogCi0JY2xpZW50LT5kZWJ1Z2ZzX2Nvbmdlc3Rpb25fa2IgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3cml0ZWJhY2tfY29uZ2VzdGlvbl9rYiIsCi0JCQkJCQkgICAwNjAwLAotCQkJCQkJICAgY2xpZW50LT5kZWJ1Z2ZzX2RpciwKLQkJCQkJCSAgIGNsaWVudCwKLQkJCQkJCSAgICZjb25nZXN0aW9uX2tiX2ZvcHMpOworCWNsaWVudC0+ZGVidWdmc19jb25nZXN0aW9uX2tiID0KKwkJZGVidWdmc19jcmVhdGVfZmlsZSgid3JpdGViYWNrX2Nvbmdlc3Rpb25fa2IiLAorCQkJCSAgICAwNjAwLAorCQkJCSAgICBjbGllbnQtPmRlYnVnZnNfZGlyLAorCQkJCSAgICBjbGllbnQsCisJCQkJICAgICZjb25nZXN0aW9uX2tiX2ZvcHMpOwogCWlmICghY2xpZW50LT5kZWJ1Z2ZzX2Nvbmdlc3Rpb25fa2IpCiAJCWdvdG8gb3V0OwogCkBAIC00NjYsNyArNDY3LDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShjbGllbnQtPmRlYnVnZnNfZGlyKTsKIH0KIAotI2Vsc2UgIC8vIENPTkZJR19ERUJVR19GUworI2Vsc2UgIC8qIENPTkZJR19ERUJVR19GUyAqLwogCiBpbnQgX19pbml0IGNlcGhfZGVidWdmc19pbml0KHZvaWQpCiB7CkBAIC00ODYsNCArNDg3LDQgQEAKIHsKIH0KIAotI2VuZGlmICAvLyBDT05GSUdfREVCVUdfRlMKKyNlbmRpZiAgLyogQ09ORklHX0RFQlVHX0ZTICovCmRpZmYgLS1naXQgYS9mcy9jZXBoL2RlY29kZS5oIGIvZnMvY2VwaC9kZWNvZGUuaAppbmRleCA2NWIzZTAyLi4zZDI1NDE1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2RlY29kZS5oCisrKyBiL2ZzL2NlcGgvZGVjb2RlLmgKQEAgLTk5LDExICs5OSwxMyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9lbmNvZGVfYWRkcihzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYSkKIHsKLQlhLT5pbl9hZGRyLnNzX2ZhbWlseSA9IGh0b25zKGEtPmluX2FkZHIuc3NfZmFtaWx5KTsKKwlfX2JlMTYgc3NfZmFtaWx5ID0gaHRvbnMoYS0+aW5fYWRkci5zc19mYW1pbHkpOworCWEtPmluX2FkZHIuc3NfZmFtaWx5ID0gKihfX3UxNiAqKSZzc19mYW1pbHk7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgY2VwaF9kZWNvZGVfYWRkcihzdHJ1Y3QgY2VwaF9lbnRpdHlfYWRkciAqYSkKIHsKLQlhLT5pbl9hZGRyLnNzX2ZhbWlseSA9IG50b2hzKGEtPmluX2FkZHIuc3NfZmFtaWx5KTsKKwlfX2JlMTYgc3NfZmFtaWx5ID0gKihfX2JlMTYgKikmYS0+aW5fYWRkci5zc19mYW1pbHk7CisJYS0+aW5fYWRkci5zc19mYW1pbHkgPSBudG9ocyhzc19mYW1pbHkpOwogCVdBUk5fT04oYS0+aW5fYWRkci5zc19mYW1pbHkgPT0gNTEyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9kaXIuYyBiL2ZzL2NlcGgvZGlyLmMKaW5kZXggZjk0ZWQzYy4uNjdiYmI0MSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9kaXIuYworKysgYi9mcy9jZXBoL2Rpci5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNlcGhfZGlyX2lvcHM7CiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNlcGhfZGlyX2ZvcHM7Ci1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9kZW50cnlfb3BzOworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNlcGhfZGVudHJ5X29wczsKIAogLyoKICAqIEluaXRpYWxpemUgY2VwaCBkZW50cnkgc3RhdGUuCkBAIC05NCw2ICs5NCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgX19kY2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQorCQlfX3JlbGVhc2VzKGlub2RlLT5pX2xvY2spCisJCV9fYWNxdWlyZXMoaW5vZGUtPmlfbG9jaykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNlcGhfZmlsZV9pbmZvICpmaSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKQEAgLTEyMzksMTYgKzEyNDEsMTYgQEAKIAkuY3JlYXRlID0gY2VwaF9jcmVhdGUsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNlcGhfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gY2VwaF9kX3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZSA9IGNlcGhfZGVudHJ5X3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9zbmFwZGlyX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9zbmFwZGlyX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZSA9IGNlcGhfc25hcGRpcl9kX3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZSA9IGNlcGhfZGVudHJ5X3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9zbmFwX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9zbmFwX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmVsZWFzZSA9IGNlcGhfZGVudHJ5X3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCA3YzA4Njk4Li44YzA0NGE0IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYworKysgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAvKgogICogYWxsb2NhdGUgYSB2ZWN0b3IgbmV3IHBhZ2VzCiAgKi8KLXN0cnVjdCBwYWdlICoqY2VwaF9hbGxvY19wYWdlX3ZlY3RvcihpbnQgbnVtX3BhZ2VzLCBnZnBfdCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqKmNlcGhfYWxsb2NfcGFnZV92ZWN0b3IoaW50IG51bV9wYWdlcywgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAlpbnQgaTsKQEAgLTY2NSw3ICs2NjUsNyBAQAogCQkgKiB0aHJvdyBvdXQgYW55IHBhZ2UgY2FjaGUgcGFnZXMgaW4gdGhpcyByYW5nZS4gdGhpcwogCQkgKiBtYXkgYmxvY2suCiAJCSAqLwotCQl0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBwb3MsIAorCQl0cnVuY2F0ZV9pbm9kZV9wYWdlc19yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBwb3MsCiAJCQkJCSAgIChwb3MrbGVuKSB8IChQQUdFX0NBQ0hFX1NJWkUtMSkpOwogCX0gZWxzZSB7CiAJCXBhZ2VzID0gY2VwaF9hbGxvY19wYWdlX3ZlY3RvcihudW1fcGFnZXMsIEdGUF9OT0ZTKTsKQEAgLTc0MCwyOCArNzQwLDMyIEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGNlcGhfZmlsZV9pbmZvICpmaSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlsb2ZmX3QgKnBwb3MgPSAmaW9jYi0+a2lfcG9zOwogCXNpemVfdCBsZW4gPSBpb3YtPmlvdl9sZW47CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7Ci0Jdm9pZCAqYmFzZSA9IGlvdi0+aW92X2Jhc2U7CisJdm9pZCBfX3VzZXIgKmJhc2UgPSBpb3YtPmlvdl9iYXNlOwogCXNzaXplX3QgcmV0OwotCWludCBnb3QgPSAwOworCWludCB3YW50LCBnb3QgPSAwOwogCWludCBjaGVja2VvZiA9IDAsIHJlYWQgPSAwOwogCiAJZG91dCgiYWlvX3JlYWQgJXAgJWxseC4lbGx4ICVsbHV+JXUgdHJ5aW5nIHRvIGdldCBjYXBzIG9uICVwXG4iLAogCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBwb3MsICh1bnNpZ25lZClsZW4sIGlub2RlKTsKIGFnYWluOgogCV9fY2VwaF9kb19wZW5kaW5nX3ZtdHJ1bmNhdGUoaW5vZGUpOwotCXJldCA9IGNlcGhfZ2V0X2NhcHMoY2ksIENFUEhfQ0FQX0ZJTEVfUkQsIENFUEhfQ0FQX0ZJTEVfQ0FDSEUsCi0JCQkgICAgJmdvdCwgLTEpOworCWlmIChmaS0+Zm1vZGUgJiBDRVBIX0ZJTEVfTU9ERV9MQVpZKQorCQl3YW50ID0gQ0VQSF9DQVBfRklMRV9DQUNIRSB8IENFUEhfQ0FQX0ZJTEVfTEFaWUlPOworCWVsc2UKKwkJd2FudCA9IENFUEhfQ0FQX0ZJTEVfQ0FDSEU7CisJcmV0ID0gY2VwaF9nZXRfY2FwcyhjaSwgQ0VQSF9DQVBfRklMRV9SRCwgd2FudCwgJmdvdCwgLTEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAlkb3V0KCJhaW9fcmVhZCAlcCAlbGx4LiVsbHggJWxsdX4ldSBnb3QgY2FwIHJlZnMgb24gJXNcbiIsCiAJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksIHBvcywgKHVuc2lnbmVkKWxlbiwKIAkgICAgIGNlcGhfY2FwX3N0cmluZyhnb3QpKTsKIAotCWlmICgoZ290ICYgQ0VQSF9DQVBfRklMRV9DQUNIRSkgPT0gMCB8fAorCWlmICgoZ290ICYgKENFUEhfQ0FQX0ZJTEVfQ0FDSEV8Q0VQSF9DQVBfRklMRV9MQVpZSU8pKSA9PSAwIHx8CiAJICAgIChpb2NiLT5raV9maWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHx8CiAJICAgIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKSkKIAkJLyogaG1tLCB0aGlzIGlzbid0IHJlYWxseSBhc3luYy4uLiAqLwpAQCAtODA3LDExICs4MTEsMTIgQEAKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGNlcGhfZmlsZV9pbmZvICpmaSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgY2VwaF9vc2RfY2xpZW50ICpvc2RjID0gJmNlcGhfc2JfdG9fY2xpZW50KGlub2RlLT5pX3NiKS0+b3NkYzsKIAlsb2ZmX3QgZW5kb2ZmID0gcG9zICsgaW92LT5pb3ZfbGVuOwotCWludCBnb3QgPSAwOworCWludCB3YW50LCBnb3QgPSAwOwogCWludCByZXQsIGVycjsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQpAQCAtODI0LDggKzgyOSwxMSBAQAogCWRvdXQoImFpb193cml0ZSAlcCAlbGx4LiVsbHggJWxsdX4ldSBnZXR0aW5nIGNhcHMuIGlfc2l6ZSAlbGx1XG4iLAogCSAgICAgaW5vZGUsIGNlcGhfdmlub3AoaW5vZGUpLCBwb3MsICh1bnNpZ25lZClpb3YtPmlvdl9sZW4sCiAJICAgICBpbm9kZS0+aV9zaXplKTsKLQlyZXQgPSBjZXBoX2dldF9jYXBzKGNpLCBDRVBIX0NBUF9GSUxFX1dSLCBDRVBIX0NBUF9GSUxFX0JVRkZFUiwKLQkJCSAgICAmZ290LCBlbmRvZmYpOworCWlmIChmaS0+Zm1vZGUgJiBDRVBIX0ZJTEVfTU9ERV9MQVpZKQorCQl3YW50ID0gQ0VQSF9DQVBfRklMRV9CVUZGRVIgfCBDRVBIX0NBUF9GSUxFX0xBWllJTzsKKwllbHNlCisJCXdhbnQgPSBDRVBIX0NBUF9GSUxFX0JVRkZFUjsKKwlyZXQgPSBjZXBoX2dldF9jYXBzKGNpLCBDRVBIX0NBUF9GSUxFX1dSLCB3YW50LCAmZ290LCBlbmRvZmYpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtODMzLDcgKzg0MSw3IEBACiAJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksIHBvcywgKHVuc2lnbmVkKWlvdi0+aW92X2xlbiwKIAkgICAgIGNlcGhfY2FwX3N0cmluZyhnb3QpKTsKIAotCWlmICgoZ290ICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpID09IDAgfHwKKwlpZiAoKGdvdCAmIChDRVBIX0NBUF9GSUxFX0JVRkZFUnxDRVBIX0NBUF9GSUxFX0xBWllJTykpID09IDAgfHwKIAkgICAgKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkgfHwKIAkgICAgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpKSB7CiAJCXJldCA9IGNlcGhfc3luY193cml0ZShmaWxlLCBpb3YtPmlvdl9iYXNlLCBpb3YtPmlvdl9sZW4sCkBAIC05MzAsNiArOTM4LDggQEAKIAkuYWlvX3dyaXRlID0gY2VwaF9haW9fd3JpdGUsCiAJLm1tYXAgPSBjZXBoX21tYXAsCiAJLmZzeW5jID0gY2VwaF9mc3luYywKKwkubG9jayA9IGNlcGhfbG9jaywKKwkuZmxvY2sgPSBjZXBoX2Zsb2NrLAogCS5zcGxpY2VfcmVhZCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKIAkuc3BsaWNlX3dyaXRlID0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZSwKIAkudW5sb2NrZWRfaW9jdGwgPSBjZXBoX2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9pbm9kZS5jIGIvZnMvY2VwaC9pbm9kZS5jCmluZGV4IDM4OWY5ZGIuLjVkODkzZDMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvaW5vZGUuYworKysgYi9mcy9jZXBoL2lub2RlLmMKQEAgLTQ0Miw4ICs0NDIsOSBAQAogCQkJICogdGhlIGZpbGUgaXMgZWl0aGVyIG9wZW5lZCBvciBtbWFwZWQKIAkJCSAqLwogCQkJaWYgKChpc3N1ZWQgJiAoQ0VQSF9DQVBfRklMRV9DQUNIRXxDRVBIX0NBUF9GSUxFX1JEfAotCQkJCSAgICAgIENFUEhfQ0FQX0ZJTEVfV1J8Q0VQSF9DQVBfRklMRV9CVUZGRVJ8Ci0JCQkJICAgICAgQ0VQSF9DQVBfRklMRV9FWENMKSkgfHwKKwkJCQkgICAgICAgQ0VQSF9DQVBfRklMRV9XUnxDRVBIX0NBUF9GSUxFX0JVRkZFUnwKKwkJCQkgICAgICAgQ0VQSF9DQVBfRklMRV9FWENMfAorCQkJCSAgICAgICBDRVBIX0NBUF9GSUxFX0xBWllJTykpIHx8CiAJCQkgICAgbWFwcGluZ19tYXBwZWQoaW5vZGUtPmlfbWFwcGluZykgfHwKIAkJCSAgICBfX2NlcGhfY2Fwc19maWxlX3dhbnRlZChjaSkpIHsKIAkJCQljaS0+aV90cnVuY2F0ZV9wZW5kaW5nKys7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2lvY3RsLmMgYi9mcy9jZXBoL2lvY3RsLmMKaW5kZXggZDA4NWYwNy4uNzZlMzA3ZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pb2N0bC5jCisrKyBiL2ZzL2NlcGgvaW9jdGwuYwpAQCAtMTQzLDYgKzE0MywyNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgbG9uZyBjZXBoX2lvY3RsX2xhenlpbyhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2VwaF9maWxlX2luZm8gKmZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSA9IGNlcGhfaW5vZGUoaW5vZGUpOworCisJaWYgKChmaS0+Zm1vZGUgJiBDRVBIX0ZJTEVfTU9ERV9MQVpZKSA9PSAwKSB7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWNpLT5pX25yX2J5X21vZGVbZmktPmZtb2RlXS0tOworCQlmaS0+Zm1vZGUgfD0gQ0VQSF9GSUxFX01PREVfTEFaWTsKKwkJY2ktPmlfbnJfYnlfbW9kZVtmaS0+Zm1vZGVdKys7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJZG91dCgiaW9jdGxfbGF5emlvOiBmaWxlICVwIG1hcmtlZCBsYXp5XG4iLCBmaWxlKTsKKworCQljZXBoX2NoZWNrX2NhcHMoY2ksIDAsIE5VTEwpOworCX0gZWxzZSB7CisJCWRvdXQoImlvY3RsX2xheXppbzogZmlsZSAlcCBhbHJlYWR5IGxhenlcbiIsIGZpbGUpOworCX0KKwlyZXR1cm4gMDsKK30KKwogbG9uZyBjZXBoX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlkb3V0KCJpb2N0bCBmaWxlICVwIGNtZCAldSBhcmcgJWx1XG4iLCBmaWxlLCBjbWQsIGFyZyk7CkBAIC0xNTUsNiArMTc2LDkgQEAKIAogCWNhc2UgQ0VQSF9JT0NfR0VUX0RBVEFMT0M6CiAJCXJldHVybiBjZXBoX2lvY3RsX2dldF9kYXRhbG9jKGZpbGUsICh2b2lkIF9fdXNlciAqKWFyZyk7CisKKwljYXNlIENFUEhfSU9DX0xBWllJTzoKKwkJcmV0dXJuIGNlcGhfaW9jdGxfbGF6eWlvKGZpbGUpOwogCX0KIAlyZXR1cm4gLUVOT1RUWTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW9jdGwuaCBiL2ZzL2NlcGgvaW9jdGwuaAppbmRleCAyNWU0ZjFhLi44ODQ1MWEzIDEwMDY0NAotLS0gYS9mcy9jZXBoL2lvY3RsLmgKKysrIGIvZnMvY2VwaC9pb2N0bC5oCkBAIC0zNyw0ICszNyw2IEBACiAjZGVmaW5lIENFUEhfSU9DX0dFVF9EQVRBTE9DIF9JT1dSKENFUEhfSU9DVExfTUFHSUMsIDMsCVwKIAkJCQkgICBzdHJ1Y3QgY2VwaF9pb2N0bF9kYXRhbG9jKQogCisjZGVmaW5lIENFUEhfSU9DX0xBWllJTyBfSU8oQ0VQSF9JT0NUTF9NQUdJQywgNCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9jZXBoL2xvY2tzLmMgYi9mcy9jZXBoL2xvY2tzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4NWFmMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NlcGgvbG9ja3MuYwpAQCAtMCwwICsxLDI1NiBAQAorI2luY2x1ZGUgImNlcGhfZGVidWcuaCIKKworI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorCisjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJtZHNfY2xpZW50LmgiCisjaW5jbHVkZSAicGFnZWxpc3QuaCIKKworLyoqCisgKiBJbXBsZW1lbnQgZmNudGwgYW5kIGZsb2NrIGxvY2tpbmcgZnVuY3Rpb25zLgorICovCitzdGF0aWMgaW50IGNlcGhfbG9ja19tZXNzYWdlKHU4IGxvY2tfdHlwZSwgdTE2IG9wZXJhdGlvbiwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHU2NCBwaWQsIHU2NCBwaWRfbnMsCisJCQkgICAgIGludCBjbWQsIHU2NCBzdGFydCwgdTY0IGxlbmd0aCwgdTggd2FpdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyA9CisJCSZjZXBoX3NiX3RvX2NsaWVudChpbm9kZS0+aV9zYiktPm1kc2M7CisJc3RydWN0IGNlcGhfbWRzX3JlcXVlc3QgKnJlcTsKKwlpbnQgZXJyOworCisJcmVxID0gY2VwaF9tZHNjX2NyZWF0ZV9yZXF1ZXN0KG1kc2MsIG9wZXJhdGlvbiwgVVNFX0FVVEhfTURTKTsKKwlpZiAoSVNfRVJSKHJlcSkpCisJCXJldHVybiBQVFJfRVJSKHJlcSk7CisJcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCisJZG91dCgiY2VwaF9sb2NrX21lc3NhZ2U6IHJ1bGU6ICVkLCBvcDogJWQsIHBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsICIKKwkgICAgICJsZW5ndGg6ICVsbHUsIHdhaXQ6ICVkLCB0eXBlYDogJWQiLCAoaW50KWxvY2tfdHlwZSwKKwkgICAgIChpbnQpb3BlcmF0aW9uLCBwaWQsIHN0YXJ0LCBsZW5ndGgsIHdhaXQsIGNtZCk7CisKKwlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UucnVsZSA9IGxvY2tfdHlwZTsKKwlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UudHlwZSA9IGNtZDsKKwlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UucGlkID0gY3B1X3RvX2xlNjQocGlkKTsKKwkvKiBUaGlzIHNob3VsZCBiZSBhZGp1c3RlZCwgYnV0IEknbSBub3Qgc3VyZSBpZgorCSAgIG5hbWVzcGFjZXMgYWN0dWFsbHkgZ2V0IGlkIG51bWJlcnMqLworCXJlcS0+cl9hcmdzLmZpbGVsb2NrX2NoYW5nZS5waWRfbmFtZXNwYWNlID0KKwkJY3B1X3RvX2xlNjQoKHU2NClwaWRfbnMpOworCXJlcS0+cl9hcmdzLmZpbGVsb2NrX2NoYW5nZS5zdGFydCA9IGNwdV90b19sZTY0KHN0YXJ0KTsKKwlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2UubGVuZ3RoID0gY3B1X3RvX2xlNjQobGVuZ3RoKTsKKwlyZXEtPnJfYXJncy5maWxlbG9ja19jaGFuZ2Uud2FpdCA9IHdhaXQ7CisKKwllcnIgPSBjZXBoX21kc2NfZG9fcmVxdWVzdChtZHNjLCBpbm9kZSwgcmVxKTsKKwljZXBoX21kc2NfcHV0X3JlcXVlc3QocmVxKTsKKwlkb3V0KCJjZXBoX2xvY2tfbWVzc2FnZTogcnVsZTogJWQsIG9wOiAlZCwgcGlkOiAlbGx1LCBzdGFydDogJWxsdSwgIgorCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGVgOiAlZCBlcnIgY29kZSAlZCIsIChpbnQpbG9ja190eXBlLAorCSAgICAgKGludClvcGVyYXRpb24sIHBpZCwgc3RhcnQsIGxlbmd0aCwgd2FpdCwgY21kLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogQXR0ZW1wdCB0byBzZXQgYW4gZmNudGwgbG9jay4KKyAqIEZvciBub3csIHRoaXMganVzdCBnb2VzIGF3YXkgdG8gdGhlIHNlcnZlci4gTGF0ZXIgaXQgbWF5IGJlIG1vcmUgYXdlc29tZS4KKyAqLworaW50IGNlcGhfbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJdTY0IGxlbmd0aDsKKwl1OCBsb2NrX2NtZDsKKwlpbnQgZXJyOworCXU4IHdhaXQgPSAwOworCXUxNiBvcCA9IENFUEhfTURTX09QX1NFVEZJTEVMT0NLOworCisJZmwtPmZsX25zcGlkID0gZ2V0X3BpZCh0YXNrX3RnaWQoY3VycmVudCkpOworCWRvdXQoImNlcGhfbG9jaywgZmxfcGlkOiVkIiwgZmwtPmZsX3BpZCk7CisKKwkvKiBzZXQgd2FpdCBiaXQgYXMgYXBwcm9wcmlhdGUsIHRoZW4gbWFrZSBjb21tYW5kIGFzIENlcGggZXhwZWN0cyBpdCovCisJaWYgKEZfU0VUTEtXID09IGNtZCkKKwkJd2FpdCA9IDE7CisJaWYgKEZfR0VUTEsgPT0gY21kKQorCQlvcCA9IENFUEhfTURTX09QX0dFVEZJTEVMT0NLOworCisJaWYgKEZfUkRMQ0sgPT0gZmwtPmZsX3R5cGUpCisJCWxvY2tfY21kID0gQ0VQSF9MT0NLX1NIQVJFRDsKKwllbHNlIGlmIChGX1dSTENLID09IGZsLT5mbF90eXBlKQorCQlsb2NrX2NtZCA9IENFUEhfTE9DS19FWENMOworCWVsc2UKKwkJbG9ja19jbWQgPSBDRVBIX0xPQ0tfVU5MT0NLOworCisJaWYgKExMT05HX01BWCA9PSBmbC0+ZmxfZW5kKQorCQlsZW5ndGggPSAwOworCWVsc2UKKwkJbGVuZ3RoID0gZmwtPmZsX2VuZCAtIGZsLT5mbF9zdGFydCArIDE7CisKKwllcnIgPSBjZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkNOVEwsIG9wLCBmaWxlLAorCQkJCSh1NjQpZmwtPmZsX3BpZCwgKHU2NClmbC0+ZmxfbnNwaWQsCisJCQkJbG9ja19jbWQsIGZsLT5mbF9zdGFydCwKKwkJCQlsZW5ndGgsIHdhaXQpOworCWlmICghZXJyKSB7CisJCWRvdXQoIm1kcyBsb2NrZWQsIGxvY2tpbmcgbG9jYWxseSIpOworCQllcnIgPSBwb3NpeF9sb2NrX2ZpbGUoZmlsZSwgZmwsIE5VTEwpOworCQlpZiAoZXJyICYmIChDRVBIX01EU19PUF9TRVRGSUxFTE9DSyA9PSBvcCkpIHsKKwkJCS8qIHVuZG8hIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBrZXJuZWwgZGV0ZWN0cworCQkJICogbG9jYWwgZGVhZGxvY2suICovCisJCQljZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkNOVEwsIG9wLCBmaWxlLAorCQkJCQkgICh1NjQpZmwtPmZsX3BpZCwgKHU2NClmbC0+ZmxfbnNwaWQsCisJCQkJCSAgQ0VQSF9MT0NLX1VOTE9DSywgZmwtPmZsX3N0YXJ0LAorCQkJCQkgIGxlbmd0aCwgMCk7CisJCQlkb3V0KCJnb3QgJWQgb24gcG9zaXhfbG9ja19maWxlLCB1bmRpZCBsb2NrIiwgZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCWRvdXQoIm1kcyByZXR1cm5lZCBlcnJvciBjb2RlICVkIiwgZXJyKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IGNlcGhfZmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXU2NCBsZW5ndGg7CisJdTggbG9ja19jbWQ7CisJaW50IGVycjsKKwl1OCB3YWl0ID0gMTsKKworCWZsLT5mbF9uc3BpZCA9IGdldF9waWQodGFza190Z2lkKGN1cnJlbnQpKTsKKwlkb3V0KCJjZXBoX2Zsb2NrLCBmbF9waWQ6JWQiLCBmbC0+ZmxfcGlkKTsKKworCS8qIHNldCB3YWl0IGJpdCwgdGhlbiBjbGVhciBpdCBvdXQgb2YgY21kKi8KKwlpZiAoY21kICYgTE9DS19OQikKKwkJd2FpdCA9IDA7CisJY21kID0gY21kICYgKExPQ0tfU0ggfCBMT0NLX0VYIHwgTE9DS19VTik7CisJLyogc2V0IGNvbW1hbmQgc2VxdWVuY2UgdGhhdCBDZXBoIHdhbnRzIHRvIHNlZToKKwkgICBzaGFyZWQgbG9jaywgZXhjbHVzaXZlIGxvY2ssIG9yIHVubG9jayAqLworCWlmIChMT0NLX1NIID09IGNtZCkKKwkJbG9ja19jbWQgPSBDRVBIX0xPQ0tfU0hBUkVEOworCWVsc2UgaWYgKExPQ0tfRVggPT0gY21kKQorCQlsb2NrX2NtZCA9IENFUEhfTE9DS19FWENMOworCWVsc2UKKwkJbG9ja19jbWQgPSBDRVBIX0xPQ0tfVU5MT0NLOworCS8qIG1kcyByZXF1aXJlcyBzdGFydCBhbmQgbGVuZ3RoIHJhdGhlciB0aGFuIHN0YXJ0IGFuZCBlbmQgKi8KKwlpZiAoTExPTkdfTUFYID09IGZsLT5mbF9lbmQpCisJCWxlbmd0aCA9IDA7CisJZWxzZQorCQlsZW5ndGggPSBmbC0+ZmxfZW5kIC0gZmwtPmZsX3N0YXJ0ICsgMTsKKworCWVyciA9IGNlcGhfbG9ja19tZXNzYWdlKENFUEhfTE9DS19GTE9DSywgQ0VQSF9NRFNfT1BfU0VURklMRUxPQ0ssCisJCQkJZmlsZSwgKHU2NClmbC0+ZmxfcGlkLCAodTY0KWZsLT5mbF9uc3BpZCwKKwkJCQlsb2NrX2NtZCwgZmwtPmZsX3N0YXJ0LAorCQkJCWxlbmd0aCwgd2FpdCk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gZmxvY2tfbG9ja19maWxlX3dhaXQoZmlsZSwgZmwpOworCQlpZiAoZXJyKSB7CisJCQljZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkxPQ0ssCisJCQkJCSAgQ0VQSF9NRFNfT1BfU0VURklMRUxPQ0ssCisJCQkJCSAgZmlsZSwgKHU2NClmbC0+ZmxfcGlkLAorCQkJCQkgICh1NjQpZmwtPmZsX25zcGlkLAorCQkJCQkgIENFUEhfTE9DS19VTkxPQ0ssIGZsLT5mbF9zdGFydCwKKwkJCQkJICBsZW5ndGgsIDApOworCQkJZG91dCgiZ290ICVkIG9uIGZsb2NrX2xvY2tfZmlsZV93YWl0LCB1bmRpZCBsb2NrIiwgZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCWRvdXQoIm1kcyBlcnJvciBjb2RlICVkIiwgZXJyKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBhbHJlYWR5IGhlbGQuIEZpbGxzIGluIHRoZSBwYXNzZWQKKyAqIGNvdW50ZXIgdmFyaWFibGVzLCBzbyB5b3UgY2FuIHByZXBhcmUgcGFnZWxpc3QgbWV0YWRhdGEgYmVmb3JlIGNhbGxpbmcKKyAqIGNlcGhfZW5jb2RlX2xvY2tzLgorICovCit2b2lkIGNlcGhfY291bnRfbG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpmY250bF9jb3VudCwgaW50ICpmbG9ja19jb3VudCkKK3sKKwlzdHJ1Y3QgZmlsZV9sb2NrICpsb2NrOworCisJKmZjbnRsX2NvdW50ID0gMDsKKwkqZmxvY2tfY291bnQgPSAwOworCisJZm9yIChsb2NrID0gaW5vZGUtPmlfZmxvY2s7IGxvY2sgIT0gTlVMTDsgbG9jayA9IGxvY2stPmZsX25leHQpIHsKKwkJaWYgKGxvY2stPmZsX2ZsYWdzICYgRkxfUE9TSVgpCisJCQkrKygqZmNudGxfY291bnQpOworCQllbHNlIGlmIChsb2NrLT5mbF9mbGFncyAmIEZMX0ZMT0NLKQorCQkJKysoKmZsb2NrX2NvdW50KTsKKwl9CisJZG91dCgiY291bnRlZCAlZCBmbG9jayBsb2NrcyBhbmQgJWQgZmNudGwgbG9ja3MiLAorCSAgICAgKmZsb2NrX2NvdW50LCAqZmNudGxfY291bnQpOworfQorCisvKioKKyAqIEVuY29kZSB0aGUgZmxvY2sgYW5kIGZjbnRsIGxvY2tzIGZvciB0aGUgZ2l2ZW4gaW5vZGUgaW50byB0aGUgcGFnZWxpc3QuCisgKiBGb3JtYXQgaXM6ICNmY250bCBsb2Nrcywgc2VxdWVudGlhbCBmY250bCBsb2NrcywgI2Zsb2NrIGxvY2tzLAorICogc2VxdWVudGlhbCBmbG9jayBsb2Nrcy4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggQkxLIGFscmVhZHkgaGVsZCwgYW5kIHRoZSBsb2NrIG51bWJlcnMgc2hvdWxkIGhhdmUKKyAqIGJlZW4gZ2F0aGVyZWQgdW5kZXIgdGhlIHNhbWUgbG9jayBob2xkaW5nIHdpbmRvdy4KKyAqLworaW50IGNlcGhfZW5jb2RlX2xvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBjZXBoX3BhZ2VsaXN0ICpwYWdlbGlzdCwKKwkJICAgICAgaW50IG51bV9mY250bF9sb2NrcywgaW50IG51bV9mbG9ja19sb2NrcykKK3sKKwlzdHJ1Y3QgZmlsZV9sb2NrICpsb2NrOworCXN0cnVjdCBjZXBoX2ZpbGVsb2NrIGNlcGhsb2NrOworCWludCBlcnIgPSAwOworCisJZG91dCgiZW5jb2RpbmcgJWQgZmxvY2sgYW5kICVkIGZjbnRsIGxvY2tzIiwgbnVtX2Zsb2NrX2xvY2tzLAorCSAgICAgbnVtX2ZjbnRsX2xvY2tzKTsKKwllcnIgPSBjZXBoX3BhZ2VsaXN0X2FwcGVuZChwYWdlbGlzdCwgJm51bV9mY250bF9sb2Nrcywgc2l6ZW9mKHUzMikpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKwlmb3IgKGxvY2sgPSBpbm9kZS0+aV9mbG9jazsgbG9jayAhPSBOVUxMOyBsb2NrID0gbG9jay0+ZmxfbmV4dCkgeworCQlpZiAobG9jay0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkgeworCQkJZXJyID0gbG9ja190b19jZXBoX2ZpbGVsb2NrKGxvY2ssICZjZXBobG9jayk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZmFpbDsKKwkJCWVyciA9IGNlcGhfcGFnZWxpc3RfYXBwZW5kKHBhZ2VsaXN0LCAmY2VwaGxvY2ssCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgY2VwaF9maWxlbG9jaykpOworCQl9CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJfQorCisJZXJyID0gY2VwaF9wYWdlbGlzdF9hcHBlbmQocGFnZWxpc3QsICZudW1fZmxvY2tfbG9ja3MsIHNpemVvZih1MzIpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWw7CisJZm9yIChsb2NrID0gaW5vZGUtPmlfZmxvY2s7IGxvY2sgIT0gTlVMTDsgbG9jayA9IGxvY2stPmZsX25leHQpIHsKKwkJaWYgKGxvY2stPmZsX2ZsYWdzICYgRkxfRkxPQ0spIHsKKwkJCWVyciA9IGxvY2tfdG9fY2VwaF9maWxlbG9jayhsb2NrLCAmY2VwaGxvY2spOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGZhaWw7CisJCQllcnIgPSBjZXBoX3BhZ2VsaXN0X2FwcGVuZChwYWdlbGlzdCwgJmNlcGhsb2NrLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IGNlcGhfZmlsZWxvY2spKTsKKwkJfQorCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCX0KK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEdpdmVuIGEgcG9pbnRlciB0byBhIGxvY2ssIGNvbnZlcnQgaXQgdG8gYSBjZXBoIGZpbGVsb2NrCisgKi8KK2ludCBsb2NrX3RvX2NlcGhfZmlsZWxvY2soc3RydWN0IGZpbGVfbG9jayAqbG9jaywKKwkJCSAgc3RydWN0IGNlcGhfZmlsZWxvY2sgKmNlcGhsb2NrKQoreworCWludCBlcnIgPSAwOworCisJY2VwaGxvY2stPnN0YXJ0ID0gY3B1X3RvX2xlNjQobG9jay0+Zmxfc3RhcnQpOworCWNlcGhsb2NrLT5sZW5ndGggPSBjcHVfdG9fbGU2NChsb2NrLT5mbF9lbmQgLSBsb2NrLT5mbF9zdGFydCArIDEpOworCWNlcGhsb2NrLT5jbGllbnQgPSBjcHVfdG9fbGU2NCgwKTsKKwljZXBobG9jay0+cGlkID0gY3B1X3RvX2xlNjQobG9jay0+ZmxfcGlkKTsKKwljZXBobG9jay0+cGlkX25hbWVzcGFjZSA9IGNwdV90b19sZTY0KCh1NjQpbG9jay0+ZmxfbnNwaWQpOworCisJc3dpdGNoIChsb2NrLT5mbF90eXBlKSB7CisJY2FzZSBGX1JETENLOgorCQljZXBobG9jay0+dHlwZSA9IENFUEhfTE9DS19TSEFSRUQ7CisJCWJyZWFrOworCWNhc2UgRl9XUkxDSzoKKwkJY2VwaGxvY2stPnR5cGUgPSBDRVBIX0xPQ0tfRVhDTDsKKwkJYnJlYWs7CisJY2FzZSBGX1VOTENLOgorCQljZXBobG9jay0+dHlwZSA9IENFUEhfTE9DS19VTkxPQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRvdXQoIkhhdmUgdW5rbm93biBsb2NrIHR5cGUgJWQiLCBsb2NrLT5mbF90eXBlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCBkZDQ0MGJkLi5hNzVkZGJmIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtMyw2ICszLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgIm1kc19jbGllbnQuaCIKICNpbmNsdWRlICJtb25fY2xpZW50LmgiCkBAIC0zNyw2ICszOCwxMSBAQAogICogYXJlIG5vIGxvbmdlciB2YWxpZC4KICAqLwogCitzdHJ1Y3QgY2VwaF9yZWNvbm5lY3Rfc3RhdGUgeworCXN0cnVjdCBjZXBoX3BhZ2VsaXN0ICpwYWdlbGlzdDsKKwlib29sIGZsb2NrOworfTsKKwogc3RhdGljIHZvaWQgX193YWtlX3JlcXVlc3RzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCiAJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CiAKQEAgLTQ0OSw3ICs0NTUsNyBAQAogCWtmcmVlKHJlcS0+cl9wYXRoMSk7CiAJa2ZyZWUocmVxLT5yX3BhdGgyKTsKIAlwdXRfcmVxdWVzdF9zZXNzaW9uKHJlcSk7Ci0JY2VwaF91bnJlc2VydmVfY2FwcygmcmVxLT5yX2NhcHNfcmVzZXJ2YXRpb24pOworCWNlcGhfdW5yZXNlcnZlX2NhcHMocmVxLT5yX21kc2MsICZyZXEtPnJfY2Fwc19yZXNlcnZhdGlvbik7CiAJa2ZyZWUocmVxKTsKIH0KIApAQCAtNTEyLDcgKzUxOCw4IEBACiB7CiAJcmVxLT5yX3RpZCA9ICsrbWRzYy0+bGFzdF90aWQ7CiAJaWYgKHJlcS0+cl9udW1fY2FwcykKLQkJY2VwaF9yZXNlcnZlX2NhcHMoJnJlcS0+cl9jYXBzX3Jlc2VydmF0aW9uLCByZXEtPnJfbnVtX2NhcHMpOworCQljZXBoX3Jlc2VydmVfY2FwcyhtZHNjLCAmcmVxLT5yX2NhcHNfcmVzZXJ2YXRpb24sCisJCQkJICByZXEtPnJfbnVtX2NhcHMpOwogCWRvdXQoIl9fcmVnaXN0ZXJfcmVxdWVzdCAlcCB0aWQgJWxsZFxuIiwgcmVxLCByZXEtPnJfdGlkKTsKIAljZXBoX21kc2NfZ2V0X3JlcXVlc3QocmVxKTsKIAlfX2luc2VydF9yZXF1ZXN0KG1kc2MsIHJlcSk7CkBAIC03MDQsNiArNzExLDUxIEBACiB9CiAKIC8qCisgKiBvcGVuIHNlc3Npb25zIGZvciBhbnkgZXhwb3J0IHRhcmdldHMgZm9yIHRoZSBnaXZlbiBtZHMKKyAqCisgKiBjYWxsZWQgdW5kZXIgbWRzYy0+bXV0ZXgKKyAqLworc3RhdGljIHZvaWQgX19vcGVuX2V4cG9ydF90YXJnZXRfc2Vzc2lvbnMoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCQkJICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgY2VwaF9tZHNfaW5mbyAqbWk7CisJc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnRzOworCWludCBpLCBtZHMgPSBzZXNzaW9uLT5zX21kczsKKwlpbnQgdGFyZ2V0OworCisJaWYgKG1kcyA+PSBtZHNjLT5tZHNtYXAtPm1fbWF4X21kcykKKwkJcmV0dXJuOworCW1pID0gJm1kc2MtPm1kc21hcC0+bV9pbmZvW21kc107CisJZG91dCgib3Blbl9leHBvcnRfdGFyZ2V0X3Nlc3Npb25zIGZvciBtZHMlZCAoJWQgdGFyZ2V0cylcbiIsCisJICAgICBzZXNzaW9uLT5zX21kcywgbWktPm51bV9leHBvcnRfdGFyZ2V0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWktPm51bV9leHBvcnRfdGFyZ2V0czsgaSsrKSB7CisJCXRhcmdldCA9IG1pLT5leHBvcnRfdGFyZ2V0c1tpXTsKKwkJdHMgPSBfX2NlcGhfbG9va3VwX21kc19zZXNzaW9uKG1kc2MsIHRhcmdldCk7CisJCWlmICghdHMpIHsKKwkJCXRzID0gcmVnaXN0ZXJfc2Vzc2lvbihtZHNjLCB0YXJnZXQpOworCQkJaWYgKElTX0VSUih0cykpCisJCQkJcmV0dXJuOworCQl9CisJCWlmIChzZXNzaW9uLT5zX3N0YXRlID09IENFUEhfTURTX1NFU1NJT05fTkVXIHx8CisJCSAgICBzZXNzaW9uLT5zX3N0YXRlID09IENFUEhfTURTX1NFU1NJT05fQ0xPU0lORykKKwkJCV9fb3Blbl9zZXNzaW9uKG1kc2MsIHNlc3Npb24pOworCQllbHNlCisJCQlkb3V0KCIgbWRzJWQgdGFyZ2V0IG1kcyVkICVwIGlzICVzXG4iLCBzZXNzaW9uLT5zX21kcywKKwkJCSAgICAgaSwgdHMsIHNlc3Npb25fc3RhdGVfbmFtZSh0cy0+c19zdGF0ZSkpOworCQljZXBoX3B1dF9tZHNfc2Vzc2lvbih0cyk7CisJfQorfQorCit2b2lkIGNlcGhfbWRzY19vcGVuX2V4cG9ydF90YXJnZXRfc2Vzc2lvbnMoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCQkJICAgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24pCit7CisJbXV0ZXhfbG9jaygmbWRzYy0+bXV0ZXgpOworCV9fb3Blbl9leHBvcnRfdGFyZ2V0X3Nlc3Npb25zKG1kc2MsIHNlc3Npb24pOworCW11dGV4X3VubG9jaygmbWRzYy0+bXV0ZXgpOworfQorCisvKgogICogc2Vzc2lvbiBjYXBzCiAgKi8KIApAQCAtNzY0LDcgKzgxNiw3IEBACiAJCQlsYXN0X2lub2RlID0gTlVMTDsKIAkJfQogCQlpZiAob2xkX2NhcCkgewotCQkJY2VwaF9wdXRfY2FwKG9sZF9jYXApOworCQkJY2VwaF9wdXRfY2FwKHNlc3Npb24tPnNfbWRzYywgb2xkX2NhcCk7CiAJCQlvbGRfY2FwID0gTlVMTDsKIAkJfQogCkBAIC03OTMsNyArODQ1LDcgQEAKIAlpZiAobGFzdF9pbm9kZSkKIAkJaXB1dChsYXN0X2lub2RlKTsKIAlpZiAob2xkX2NhcCkKLQkJY2VwaF9wdXRfY2FwKG9sZF9jYXApOworCQljZXBoX3B1dF9jYXAoc2Vzc2lvbi0+c19tZHNjLCBvbGRfY2FwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDY3LDE1ICsxMTE5LDE2IEBACiAgKiBDYWxsZWQgdW5kZXIgc19tdXRleC4KICAqLwogaW50IGNlcGhfYWRkX2NhcF9yZWxlYXNlcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAotCQkJICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSAgaW50IGV4dHJhKQorCQkJICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKLQlzdHJ1Y3QgY2VwaF9tc2cgKm1zZzsKKwlzdHJ1Y3QgY2VwaF9tc2cgKm1zZywgKnBhcnRpYWwgPSBOVUxMOwogCXN0cnVjdCBjZXBoX21kc19jYXBfcmVsZWFzZSAqaGVhZDsKIAlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgZXh0cmEgPSBtZHNjLT5jbGllbnQtPm1vdW50X2FyZ3MtPmNhcF9yZWxlYXNlX3NhZmV0eTsKKwlpbnQgbnVtOwogCi0JaWYgKGV4dHJhIDwgMCkKLQkJZXh0cmEgPSBtZHNjLT5jbGllbnQtPm1vdW50X2FyZ3MtPmNhcF9yZWxlYXNlX3NhZmV0eTsKKwlkb3V0KCJhZGRfY2FwX3JlbGVhc2VzICVwIG1kcyVkIGV4dHJhICVkXG4iLCBzZXNzaW9uLCBzZXNzaW9uLT5zX21kcywKKwkgICAgIGV4dHJhKTsKIAogCXNwaW5fbG9jaygmc2Vzc2lvbi0+c19jYXBfbG9jayk7CiAKQEAgLTEwODQsOSArMTEzNywxNCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgY2VwaF9tc2csCiAJCQkJIGxpc3RfaGVhZCk7CiAJCWhlYWQgPSBtc2ctPmZyb250Lmlvdl9iYXNlOwotCQlleHRyYSArPSBDRVBIX0NBUFNfUEVSX1JFTEVBU0UgLSBsZTMyX3RvX2NwdShoZWFkLT5udW0pOworCQludW0gPSBsZTMyX3RvX2NwdShoZWFkLT5udW0pOworCQlpZiAobnVtKSB7CisJCQlkb3V0KCIgcGFydGlhbCAlcCB3aXRoICglZC8lZClcbiIsIG1zZywgbnVtLAorCQkJICAgICAoaW50KUNFUEhfQ0FQU19QRVJfUkVMRUFTRSk7CisJCQlleHRyYSArPSBDRVBIX0NBUFNfUEVSX1JFTEVBU0UgLSBudW07CisJCQlwYXJ0aWFsID0gbXNnOworCQl9CiAJfQotCiAJd2hpbGUgKHNlc3Npb24tPnNfbnVtX2NhcF9yZWxlYXNlcyA8IHNlc3Npb24tPnNfbnJfY2FwcyArIGV4dHJhKSB7CiAJCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5zX2NhcF9sb2NrKTsKIAkJbXNnID0gY2VwaF9tc2dfbmV3KENFUEhfTVNHX0NMSUVOVF9DQVBSRUxFQVNFLCBQQUdFX0NBQ0hFX1NJWkUsCkBAIC0xMTAzLDE5ICsxMTYxLDE0IEBACiAJCXNlc3Npb24tPnNfbnVtX2NhcF9yZWxlYXNlcyArPSBDRVBIX0NBUFNfUEVSX1JFTEVBU0U7CiAJfQogCi0JaWYgKCFsaXN0X2VtcHR5KCZzZXNzaW9uLT5zX2NhcF9yZWxlYXNlcykpIHsKLQkJbXNnID0gbGlzdF9maXJzdF9lbnRyeSgmc2Vzc2lvbi0+c19jYXBfcmVsZWFzZXMsCi0JCQkJICAgICAgIHN0cnVjdCBjZXBoX21zZywKLQkJCQkgICAgICAgbGlzdF9oZWFkKTsKLQkJaGVhZCA9IG1zZy0+ZnJvbnQuaW92X2Jhc2U7Ci0JCWlmIChoZWFkLT5udW0pIHsKLQkJCWRvdXQoIiBxdWV1ZWluZyBub24tZnVsbCAlcCAoJWQpXG4iLCBtc2csCi0JCQkgICAgIGxlMzJfdG9fY3B1KGhlYWQtPm51bSkpOwotCQkJbGlzdF9tb3ZlX3RhaWwoJm1zZy0+bGlzdF9oZWFkLAotCQkJCSAgICAgICZzZXNzaW9uLT5zX2NhcF9yZWxlYXNlc19kb25lKTsKLQkJCXNlc3Npb24tPnNfbnVtX2NhcF9yZWxlYXNlcyAtPQotCQkJCUNFUEhfQ0FQU19QRVJfUkVMRUFTRSAtIGxlMzJfdG9fY3B1KGhlYWQtPm51bSk7Ci0JCX0KKwlpZiAocGFydGlhbCkgeworCQloZWFkID0gcGFydGlhbC0+ZnJvbnQuaW92X2Jhc2U7CisJCW51bSA9IGxlMzJfdG9fY3B1KGhlYWQtPm51bSk7CisJCWRvdXQoIiBxdWV1ZWluZyBwYXJ0aWFsICVwIHdpdGggJWQvJWRcbiIsIHBhcnRpYWwsIG51bSwKKwkJICAgICAoaW50KUNFUEhfQ0FQU19QRVJfUkVMRUFTRSk7CisJCWxpc3RfbW92ZV90YWlsKCZwYXJ0aWFsLT5saXN0X2hlYWQsCisJCQkgICAgICAgJnNlc3Npb24tPnNfY2FwX3JlbGVhc2VzX2RvbmUpOworCQlzZXNzaW9uLT5zX251bV9jYXBfcmVsZWFzZXMgLT0gQ0VQSF9DQVBTX1BFUl9SRUxFQVNFIC0gbnVtOwogCX0KIAllcnIgPSAwOwogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5zX2NhcF9sb2NrKTsKQEAgLTEyNTAsNiArMTMwMyw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJbXV0ZXhfaW5pdCgmcmVxLT5yX2ZpbGxfbXV0ZXgpOworCXJlcS0+cl9tZHNjID0gbWRzYzsKIAlyZXEtPnJfc3RhcnRlZCA9IGppZmZpZXM7CiAJcmVxLT5yX3Jlc2VuZF9tZHMgPSAtMTsKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5yX3Vuc2FmZV9kaXJfaXRlbSk7CkBAIC0xNTgwLDYgKzE2MzQsMTUgQEAKIAogCXJlcS0+cl9tZHMgPSBtZHM7CiAJcmVxLT5yX2F0dGVtcHRzKys7CisJaWYgKHJlcS0+cl9pbm9kZSkgeworCQlzdHJ1Y3QgY2VwaF9jYXAgKmNhcCA9CisJCQljZXBoX2dldF9jYXBfZm9yX21kcyhjZXBoX2lub2RlKHJlcS0+cl9pbm9kZSksIG1kcyk7CisKKwkJaWYgKGNhcCkKKwkJCXJlcS0+cl9zZW50X29uX21zZXEgPSBjYXAtPm1zZXE7CisJCWVsc2UKKwkJCXJlcS0+cl9zZW50X29uX21zZXEgPSAtMTsKKwl9CiAJZG91dCgicHJlcGFyZV9zZW5kX3JlcXVlc3QgJXAgdGlkICVsbGQgJXMgKGF0dGVtcHQgJWQpXG4iLCByZXEsCiAJICAgICByZXEtPnJfdGlkLCBjZXBoX21kc19vcF9uYW1lKHJlcS0+cl9vcCksIHJlcS0+cl9hdHRlbXB0cyk7CiAKQEAgLTE5MTQsMjEgKzE5NzcsNDAgQEAKIAlyZXN1bHQgPSBsZTMyX3RvX2NwdShoZWFkLT5yZXN1bHQpOwogCiAJLyoKLQkgKiBUb2xlcmF0ZSAyIGNvbnNlY3V0aXZlIEVTVEFMRXMgZnJvbSB0aGUgc2FtZSBtZHMuCi0JICogRklYTUU6IHdlIHNob3VsZCBiZSBsb29raW5nIGF0IHRoZSBjYXAgbWlncmF0ZV9zZXEuCisJICogSGFuZGxlIGFuIEVTVEFMRQorCSAqIGlmIHdlJ3JlIG5vdCB0YWxraW5nIHRvIHRoZSBhdXRob3JpdHksIHNlbmQgdG8gdGhlbQorCSAqIGlmIHRoZSBhdXRob3JpdHkgaGFzIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZW4ndCBsb29raW5nLAorCSAqIHNlbmQgdG8gbmV3IGF1dGhvcml0eQorCSAqIE90aGVyd2lzZSB3ZSBqdXN0IGhhdmUgdG8gcmV0dXJuIGFuIEVTVEFMRQogCSAqLwogCWlmIChyZXN1bHQgPT0gLUVTVEFMRSkgewotCQlyZXEtPnJfZGlyZWN0X21vZGUgPSBVU0VfQVVUSF9NRFM7Ci0JCXJlcS0+cl9udW1fc3RhbGUrKzsKLQkJaWYgKHJlcS0+cl9udW1fc3RhbGUgPD0gMikgeworCQlkb3V0KCJnb3QgRVNUQUxFIG9uIHJlcXVlc3QgJWxsdSIsIHJlcS0+cl90aWQpOworCQlpZiAoIXJlcS0+cl9pbm9kZSkgeworCQkJLyogZG8gbm90aGluZzsgbm90IGFuIGF1dGhvcml0eSBwcm9ibGVtICovCisJCX0gZWxzZSBpZiAocmVxLT5yX2RpcmVjdF9tb2RlICE9IFVTRV9BVVRIX01EUykgeworCQkJZG91dCgibm90IHVzaW5nIGF1dGgsIHNldHRpbmcgZm9yIHRoYXQgbm93Iik7CisJCQlyZXEtPnJfZGlyZWN0X21vZGUgPSBVU0VfQVVUSF9NRFM7CiAJCQlfX2RvX3JlcXVlc3QobWRzYywgcmVxKTsKIAkJCW11dGV4X3VubG9jaygmbWRzYy0+bXV0ZXgpOwogCQkJZ290byBvdXQ7CisJCX0gZWxzZSAgeworCQkJc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kgPSBjZXBoX2lub2RlKHJlcS0+cl9pbm9kZSk7CisJCQlzdHJ1Y3QgY2VwaF9jYXAgKmNhcCA9CisJCQkJY2VwaF9nZXRfY2FwX2Zvcl9tZHMoY2ksIHJlcS0+cl9tZHMpOzsKKworCQkJZG91dCgiYWxyZWFkeSB1c2luZyBhdXRoIik7CisJCQlpZiAoKCFjYXAgfHwgY2FwICE9IGNpLT5pX2F1dGhfY2FwKSB8fAorCQkJICAgIChjYXAtPm1zZXEgIT0gcmVxLT5yX3NlbnRfb25fbXNlcSkpIHsKKwkJCQlkb3V0KCJidXQgY2FwIGNoYW5nZWQsIHNvIHJlc2VuZGluZyIpOworCQkJCV9fZG9fcmVxdWVzdChtZHNjLCByZXEpOworCQkJCW11dGV4X3VubG9jaygmbWRzYy0+bXV0ZXgpOworCQkJCWdvdG8gb3V0OworCQkJfQogCQl9Ci0JfSBlbHNlIHsKLQkJcmVxLT5yX251bV9zdGFsZSA9IDA7CisJCWRvdXQoImhhdmUgdG8gcmV0dXJuIEVTVEFMRSBvbiByZXF1ZXN0ICVsbHUiLCByZXEtPnJfdGlkKTsKIAl9CiAKKwogCWlmIChoZWFkLT5zYWZlKSB7CiAJCXJlcS0+cl9nb3Rfc2FmZSA9IHRydWU7CiAJCV9fdW5yZWdpc3Rlcl9yZXF1ZXN0KG1kc2MsIHJlcSk7CkBAIC0xOTg1LDcgKzIwNjcsNyBAQAogCWlmIChlcnIgPT0gMCkgewogCQlpZiAocmVzdWx0ID09IDAgJiYgcmluZm8tPmRpcl9ucikKIAkJCWNlcGhfcmVhZGRpcl9wcmVwb3B1bGF0ZShyZXEsIHJlcS0+cl9zZXNzaW9uKTsKLQkJY2VwaF91bnJlc2VydmVfY2FwcygmcmVxLT5yX2NhcHNfcmVzZXJ2YXRpb24pOworCQljZXBoX3VucmVzZXJ2ZV9jYXBzKG1kc2MsICZyZXEtPnJfY2Fwc19yZXNlcnZhdGlvbik7CiAJfQogCW11dGV4X3VubG9jaygmcmVxLT5yX2ZpbGxfbXV0ZXgpOwogCkBAIC0yMDA1LDcgKzIwODcsNyBAQAogCX0KIAltdXRleF91bmxvY2soJm1kc2MtPm11dGV4KTsKIAotCWNlcGhfYWRkX2NhcF9yZWxlYXNlcyhtZHNjLCByZXEtPnJfc2Vzc2lvbiwgLTEpOworCWNlcGhfYWRkX2NhcF9yZWxlYXNlcyhtZHNjLCByZXEtPnJfc2Vzc2lvbik7CiAJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5zX211dGV4KTsKIAogCS8qIGtpY2sgY2FsbGluZyBwcm9jZXNzICovCkBAIC0yMTkzLDkgKzIyNzUsMTQgQEAKIHN0YXRpYyBpbnQgZW5jb2RlX2NhcHNfY2Ioc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGNlcGhfY2FwICpjYXAsCiAJCQkgIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgY2VwaF9tZHNfY2FwX3JlY29ubmVjdCByZWM7CisJdW5pb24geworCQlzdHJ1Y3QgY2VwaF9tZHNfY2FwX3JlY29ubmVjdCB2MjsKKwkJc3RydWN0IGNlcGhfbWRzX2NhcF9yZWNvbm5lY3RfdjEgdjE7CisJfSByZWM7CisJc2l6ZV90IHJlY2xlbjsKIAlzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaTsKLQlzdHJ1Y3QgY2VwaF9wYWdlbGlzdCAqcGFnZWxpc3QgPSBhcmc7CisJc3RydWN0IGNlcGhfcmVjb25uZWN0X3N0YXRlICpyZWNvbl9zdGF0ZSA9IGFyZzsKKwlzdHJ1Y3QgY2VwaF9wYWdlbGlzdCAqcGFnZWxpc3QgPSByZWNvbl9zdGF0ZS0+cGFnZWxpc3Q7CiAJY2hhciAqcGF0aDsKIAlpbnQgcGF0aGxlbiwgZXJyOwogCXU2NCBwYXRoYmFzZTsKQEAgLTIyMjgsMTcgKzIzMTUsNDQgQEAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCWNhcC0+c2VxID0gMDsgICAgICAgIC8qIHJlc2V0IGNhcCBzZXEgKi8KIAljYXAtPmlzc3VlX3NlcSA9IDA7ICAvKiBhbmQgaXNzdWVfc2VxICovCi0JcmVjLmNhcF9pZCA9IGNwdV90b19sZTY0KGNhcC0+Y2FwX2lkKTsKLQlyZWMucGF0aGJhc2UgPSBjcHVfdG9fbGU2NChwYXRoYmFzZSk7Ci0JcmVjLndhbnRlZCA9IGNwdV90b19sZTMyKF9fY2VwaF9jYXBzX3dhbnRlZChjaSkpOwotCXJlYy5pc3N1ZWQgPSBjcHVfdG9fbGUzMihjYXAtPmlzc3VlZCk7Ci0JcmVjLnNpemUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9zaXplKTsKLQljZXBoX2VuY29kZV90aW1lc3BlYygmcmVjLm10aW1lLCAmaW5vZGUtPmlfbXRpbWUpOwotCWNlcGhfZW5jb2RlX3RpbWVzcGVjKCZyZWMuYXRpbWUsICZpbm9kZS0+aV9hdGltZSk7Ci0JcmVjLnNuYXByZWFsbSA9IGNwdV90b19sZTY0KGNpLT5pX3NuYXBfcmVhbG0tPmlubyk7CisKKwlpZiAocmVjb25fc3RhdGUtPmZsb2NrKSB7CisJCXJlYy52Mi5jYXBfaWQgPSBjcHVfdG9fbGU2NChjYXAtPmNhcF9pZCk7CisJCXJlYy52Mi53YW50ZWQgPSBjcHVfdG9fbGUzMihfX2NlcGhfY2Fwc193YW50ZWQoY2kpKTsKKwkJcmVjLnYyLmlzc3VlZCA9IGNwdV90b19sZTMyKGNhcC0+aXNzdWVkKTsKKwkJcmVjLnYyLnNuYXByZWFsbSA9IGNwdV90b19sZTY0KGNpLT5pX3NuYXBfcmVhbG0tPmlubyk7CisJCXJlYy52Mi5wYXRoYmFzZSA9IGNwdV90b19sZTY0KHBhdGhiYXNlKTsKKwkJcmVjLnYyLmZsb2NrX2xlbiA9IDA7CisJCXJlY2xlbiA9IHNpemVvZihyZWMudjIpOworCX0gZWxzZSB7CisJCXJlYy52MS5jYXBfaWQgPSBjcHVfdG9fbGU2NChjYXAtPmNhcF9pZCk7CisJCXJlYy52MS53YW50ZWQgPSBjcHVfdG9fbGUzMihfX2NlcGhfY2Fwc193YW50ZWQoY2kpKTsKKwkJcmVjLnYxLmlzc3VlZCA9IGNwdV90b19sZTMyKGNhcC0+aXNzdWVkKTsKKwkJcmVjLnYxLnNpemUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9zaXplKTsKKwkJY2VwaF9lbmNvZGVfdGltZXNwZWMoJnJlYy52MS5tdGltZSwgJmlub2RlLT5pX210aW1lKTsKKwkJY2VwaF9lbmNvZGVfdGltZXNwZWMoJnJlYy52MS5hdGltZSwgJmlub2RlLT5pX2F0aW1lKTsKKwkJcmVjLnYxLnNuYXByZWFsbSA9IGNwdV90b19sZTY0KGNpLT5pX3NuYXBfcmVhbG0tPmlubyk7CisJCXJlYy52MS5wYXRoYmFzZSA9IGNwdV90b19sZTY0KHBhdGhiYXNlKTsKKwkJcmVjbGVuID0gc2l6ZW9mKHJlYy52MSk7CisJfQogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAotCWVyciA9IGNlcGhfcGFnZWxpc3RfYXBwZW5kKHBhZ2VsaXN0LCAmcmVjLCBzaXplb2YocmVjKSk7CisJaWYgKHJlY29uX3N0YXRlLT5mbG9jaykgeworCQlpbnQgbnVtX2ZjbnRsX2xvY2tzLCBudW1fZmxvY2tfbG9ja3M7CisKKwkJbG9ja19rZXJuZWwoKTsKKwkJY2VwaF9jb3VudF9sb2Nrcyhpbm9kZSwgJm51bV9mY250bF9sb2NrcywgJm51bV9mbG9ja19sb2Nrcyk7CisJCXJlYy52Mi5mbG9ja19sZW4gPSAoMipzaXplb2YodTMyKSArCisJCQkJICAgIChudW1fZmNudGxfbG9ja3MrbnVtX2Zsb2NrX2xvY2tzKSAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgY2VwaF9maWxlbG9jaykpOworCisJCWVyciA9IGNlcGhfcGFnZWxpc3RfYXBwZW5kKHBhZ2VsaXN0LCAmcmVjLCByZWNsZW4pOworCQlpZiAoIWVycikKKwkJCWVyciA9IGNlcGhfZW5jb2RlX2xvY2tzKGlub2RlLCBwYWdlbGlzdCwKKwkJCQkJCW51bV9mY250bF9sb2NrcywKKwkJCQkJCW51bV9mbG9ja19sb2Nrcyk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CiAKIG91dDoKIAlrZnJlZShwYXRoKTsKQEAgLTIyNjcsNiArMjM4MSw3IEBACiAJaW50IG1kcyA9IHNlc3Npb24tPnNfbWRzOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXN0cnVjdCBjZXBoX3BhZ2VsaXN0ICpwYWdlbGlzdDsKKwlzdHJ1Y3QgY2VwaF9yZWNvbm5lY3Rfc3RhdGUgcmVjb25fc3RhdGU7CiAKIAlwcl9pbmZvKCJtZHMlZCByZWNvbm5lY3Qgc3RhcnRcbiIsIG1kcyk7CiAKQEAgLTIzMDEsNyArMjQxNiwxMCBAQAogCWVyciA9IGNlcGhfcGFnZWxpc3RfZW5jb2RlXzMyKHBhZ2VsaXN0LCBzZXNzaW9uLT5zX25yX2NhcHMpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKLQllcnIgPSBpdGVyYXRlX3Nlc3Npb25fY2FwcyhzZXNzaW9uLCBlbmNvZGVfY2Fwc19jYiwgcGFnZWxpc3QpOworCisJcmVjb25fc3RhdGUucGFnZWxpc3QgPSBwYWdlbGlzdDsKKwlyZWNvbl9zdGF0ZS5mbG9jayA9IHNlc3Npb24tPnNfY29uLnBlZXJfZmVhdHVyZXMgJiBDRVBIX0ZFQVRVUkVfRkxPQ0s7CisJZXJyID0gaXRlcmF0ZV9zZXNzaW9uX2NhcHMoc2Vzc2lvbiwgZW5jb2RlX2NhcHNfY2IsICZyZWNvbl9zdGF0ZSk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZmFpbDsKIApAQCAtMjMyNiw2ICsyNDQ0LDggQEAKIAl9CiAKIAlyZXBseS0+cGFnZWxpc3QgPSBwYWdlbGlzdDsKKwlpZiAocmVjb25fc3RhdGUuZmxvY2spCisJCXJlcGx5LT5oZHIudmVyc2lvbiA9IGNwdV90b19sZTE2KDIpOwogCXJlcGx5LT5oZHIuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihwYWdlbGlzdC0+bGVuZ3RoKTsKIAlyZXBseS0+bnJfcGFnZXMgPSBjYWxjX3BhZ2VzX2ZvcigwLCBwYWdlbGlzdC0+bGVuZ3RoKTsKIAljZXBoX2Nvbl9zZW5kKCZzZXNzaW9uLT5zX2NvbiwgcmVwbHkpOwpAQCAtMjM3Niw5ICsyNDk2LDExIEBACiAJCW9sZHN0YXRlID0gY2VwaF9tZHNtYXBfZ2V0X3N0YXRlKG9sZG1hcCwgaSk7CiAJCW5ld3N0YXRlID0gY2VwaF9tZHNtYXBfZ2V0X3N0YXRlKG5ld21hcCwgaSk7CiAKLQkJZG91dCgiY2hlY2tfbmV3X21hcCBtZHMlZCBzdGF0ZSAlcyAtPiAlcyAoc2Vzc2lvbiAlcylcbiIsCisJCWRvdXQoImNoZWNrX25ld19tYXAgbWRzJWQgc3RhdGUgJXMlcyAtPiAlcyVzIChzZXNzaW9uICVzKVxuIiwKIAkJICAgICBpLCBjZXBoX21kc19zdGF0ZV9uYW1lKG9sZHN0YXRlKSwKKwkJICAgICBjZXBoX21kc21hcF9pc19sYWdneShvbGRtYXAsIGkpID8gIiAobGFnZ3kpIiA6ICIiLAogCQkgICAgIGNlcGhfbWRzX3N0YXRlX25hbWUobmV3c3RhdGUpLAorCQkgICAgIGNlcGhfbWRzbWFwX2lzX2xhZ2d5KG5ld21hcCwgaSkgPyAiIChsYWdneSkiIDogIiIsCiAJCSAgICAgc2Vzc2lvbl9zdGF0ZV9uYW1lKHMtPnNfc3RhdGUpKTsKIAogCQlpZiAobWVtY21wKGNlcGhfbWRzbWFwX2dldF9hZGRyKG9sZG1hcCwgaSksCkBAIC0yNDI4LDYgKzI1NTAsMjEgQEAKIAkJCXdha2VfdXBfc2Vzc2lvbl9jYXBzKHMsIDEpOwogCQl9CiAJfQorCisJZm9yIChpID0gMDsgaSA8IG5ld21hcC0+bV9tYXhfbWRzICYmIGkgPCBtZHNjLT5tYXhfc2Vzc2lvbnM7IGkrKykgeworCQlzID0gbWRzYy0+c2Vzc2lvbnNbaV07CisJCWlmICghcykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlcGhfbWRzbWFwX2lzX2xhZ2d5KG5ld21hcCwgaSkpCisJCQljb250aW51ZTsKKwkJaWYgKHMtPnNfc3RhdGUgPT0gQ0VQSF9NRFNfU0VTU0lPTl9PUEVOIHx8CisJCSAgICBzLT5zX3N0YXRlID09IENFUEhfTURTX1NFU1NJT05fSFVORyB8fAorCQkgICAgcy0+c19zdGF0ZSA9PSBDRVBIX01EU19TRVNTSU9OX0NMT1NJTkcpIHsKKwkJCWRvdXQoIiBjb25uZWN0aW5nIHRvIGV4cG9ydCB0YXJnZXRzIG9mIGxhZ2d5IG1kcyVkXG4iLAorCQkJICAgICBpKTsKKwkJCV9fb3Blbl9leHBvcnRfdGFyZ2V0X3Nlc3Npb25zKG1kc2MsIHMpOworCQl9CisJfQogfQogCiAKQEAgLTI3MTUsNyArMjg1Miw3IEBACiAJCQlzZW5kX3JlbmV3X2NhcHMobWRzYywgcyk7CiAJCWVsc2UKIAkJCWNlcGhfY29uX2tlZXBhbGl2ZSgmcy0+c19jb24pOwotCQljZXBoX2FkZF9jYXBfcmVsZWFzZXMobWRzYywgcywgLTEpOworCQljZXBoX2FkZF9jYXBfcmVsZWFzZXMobWRzYywgcyk7CiAJCWlmIChzLT5zX3N0YXRlID09IENFUEhfTURTX1NFU1NJT05fT1BFTiB8fAogCQkgICAgcy0+c19zdGF0ZSA9PSBDRVBIX01EU19TRVNTSU9OX0hVTkcpCiAJCQljZXBoX3NlbmRfY2FwX3JlbGVhc2VzKG1kc2MsIHMpOwpAQCAtMjc2NCw2ICsyOTAxLDkgQEAKIAlzcGluX2xvY2tfaW5pdCgmbWRzYy0+ZGVudHJ5X2xydV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbWRzYy0+ZGVudHJ5X2xydSk7CiAKKwljZXBoX2NhcHNfaW5pdChtZHNjKTsKKwljZXBoX2FkanVzdF9taW5fY2FwcyhtZHNjLCBjbGllbnQtPm1pbl9jYXBzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yOTU5LDYgKzMwOTksNyBAQAogCWlmIChtZHNjLT5tZHNtYXApCiAJCWNlcGhfbWRzbWFwX2Rlc3Ryb3kobWRzYy0+bWRzbWFwKTsKIAlrZnJlZShtZHNjLT5zZXNzaW9ucyk7CisJY2VwaF9jYXBzX2ZpbmFsaXplKG1kc2MpOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5oIGIvZnMvY2VwaC9tZHNfY2xpZW50LmgKaW5kZXggOTUyNDEwYy4uYWI3ZTg5ZiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmgKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmgKQEAgLTE1MSw2ICsxNTEsNyBAQAogc3RydWN0IGNlcGhfbWRzX3JlcXVlc3QgewogCXU2NCByX3RpZDsgICAgICAgICAgICAgICAgICAgLyogdHJhbnNhY3Rpb24gaWQgKi8KIAlzdHJ1Y3QgcmJfbm9kZSByX25vZGU7CisJc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqcl9tZHNjOwogCiAJaW50IHJfb3A7ICAgICAgICAgICAgICAgICAgICAvKiBtZHMgb3AgY29kZSAqLwogCWludCByX21kczsKQEAgLTIwNyw4ICsyMDgsOCBAQAogCiAJaW50ICAgICAgICAgICAgICAgcl9hdHRlbXB0czsgICAvKiByZXNlbmQgYXR0ZW1wdHMgKi8KIAlpbnQgICAgICAgICAgICAgICByX251bV9md2Q7ICAgIC8qIG51bWJlciBvZiBmb3J3YXJkIGF0dGVtcHRzICovCi0JaW50ICAgICAgICAgICAgICAgcl9udW1fc3RhbGU7CiAJaW50ICAgICAgICAgICAgICAgcl9yZXNlbmRfbWRzOyAvKiBtZHMgdG8gcmVzZW5kIHRvIG5leHQsIGlmIGFueSovCisJdTMyICAgICAgICAgICAgICAgcl9zZW50X29uX21zZXE7IC8qIGNhcCBtc2VxIHJlcXVlc3Qgd2FzIHNlbnQgYXQqLwogCiAJc3RydWN0IGtyZWYgICAgICAgcl9rcmVmOwogCXN0cnVjdCBsaXN0X2hlYWQgIHJfd2FpdDsKQEAgLTI2Nyw2ICsyNjgsMjcgQEAKIAlzcGlubG9ja190ICAgICAgICBjYXBfZGlydHlfbG9jazsgICAvKiBwcm90ZWN0cyBhYm92ZSBpdGVtcyAqLwogCXdhaXRfcXVldWVfaGVhZF90IGNhcF9mbHVzaGluZ193cTsKIAorCS8qCisJICogQ2FwIHJlc2VydmF0aW9ucworCSAqCisJICogTWFpbnRhaW4gYSBnbG9iYWwgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgc3RydWN0IGNlcGhfY2FwcywgcmVmZXJlbmNlZAorCSAqIGJ5IHN0cnVjdCBjZXBoX2NhcHNfcmVzZXJ2YXRpb25zLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2UgcHJlYWxsb2NhdGUKKwkgKiBtZW1vcnkgbmVlZGVkIHRvIHN1Y2Nlc3NmdWxseSBwcm9jZXNzIGFuIE1EUyByZXNwb25zZS4gIChJZiBhbiBNRFMKKwkgKiBzZW5kcyB1cyBjYXAgaW5mb3JtYXRpb24gYW5kIHdlIGZhaWwgdG8gcHJvY2VzcyBpdCwgd2Ugd2lsbCBoYXZlCisJICogcHJvYmxlbXMgZHVlIHRvIHRoZSBjbGllbnQgYW5kIE1EUyBiZWluZyBvdXQgb2Ygc3luYy4pCisJICoKKwkgKiBSZXNlcnZhdGlvbnMgYXJlICdvd25lZCcgYnkgYSBjZXBoX2NhcF9yZXNlcnZhdGlvbiBjb250ZXh0LgorCSAqLworCXNwaW5sb2NrX3QJY2Fwc19saXN0X2xvY2s7CisJc3RydWN0CQlsaXN0X2hlYWQgY2Fwc19saXN0OyAvKiB1bnVzZWQgKHJlc2VydmVkIG9yCisJCQkJCQl1bnJlc2VydmVkKSAqLworCWludAkJY2Fwc190b3RhbF9jb3VudDsgICAgLyogdG90YWwgY2FwcyBhbGxvY2F0ZWQgKi8KKwlpbnQJCWNhcHNfdXNlX2NvdW50OyAgICAgIC8qIGluIHVzZSAqLworCWludAkJY2Fwc19yZXNlcnZlX2NvdW50OyAgLyogdW51c2VkLCByZXNlcnZlZCAqLworCWludAkJY2Fwc19hdmFpbF9jb3VudDsgICAgLyogdW51c2VkLCB1bnJlc2VydmVkICovCisJaW50CQljYXBzX21pbl9jb3VudDsgICAgICAvKiBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueQorCQkJCQkJKHVucmVzZXJ2ZWQpICovCisKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIAlzdHJ1Y3QgZGVudHJ5IAkgICpkZWJ1Z2ZzX2ZpbGU7CiAjZW5kaWYKQEAgLTMyNCw4ICszNDYsNyBAQAogfQogCiBleHRlcm4gaW50IGNlcGhfYWRkX2NhcF9yZWxlYXNlcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAotCQkJCSBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkgaW50IGV4dHJhKTsKKwkJCQkgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24pOwogZXh0ZXJuIHZvaWQgY2VwaF9zZW5kX2NhcF9yZWxlYXNlcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAogCQkJCSAgIHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uKTsKIApAQCAtMzQzLDQgKzM2NCw3IEBACiBleHRlcm4gdm9pZCBjZXBoX21kc2NfaGFuZGxlX21hcChzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAogCQkJCSBzdHJ1Y3QgY2VwaF9tc2cgKm1zZyk7CiAKK2V4dGVybiB2b2lkIGNlcGhfbWRzY19vcGVuX2V4cG9ydF90YXJnZXRfc2Vzc2lvbnMoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCQkJICBzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqc2Vzc2lvbik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNtYXAuYyBiL2ZzL2NlcGgvbWRzbWFwLmMKaW5kZXggYzRjNDk4ZS4uMDQwYmU2ZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNtYXAuYworKysgYi9mcy9jZXBoL21kc21hcC5jCkBAIC04NSw2ICs4NSw3IEBACiAJCXN0cnVjdCBjZXBoX2VudGl0eV9hZGRyIGFkZHI7CiAJCXUzMiBudW1fZXhwb3J0X3RhcmdldHM7CiAJCXZvaWQgKnBleHBvcnRfdGFyZ2V0cyA9IE5VTEw7CisJCXN0cnVjdCBjZXBoX3RpbWVzcGVjIGxhZ2d5X3NpbmNlOwogCiAJCWNlcGhfZGVjb2RlX25lZWQocCwgZW5kLCBzaXplb2YodTY0KSoyICsgMSArIHNpemVvZih1MzIpLCBiYWQpOwogCQlnbG9iYWxfaWQgPSBjZXBoX2RlY29kZV82NChwKTsKQEAgLTEwMyw3ICsxMDQsNyBAQAogCQlzdGF0ZV9zZXEgPSBjZXBoX2RlY29kZV82NChwKTsKIAkJY2VwaF9kZWNvZGVfY29weShwLCAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAkJY2VwaF9kZWNvZGVfYWRkcigmYWRkcik7Ci0JCSpwICs9IHNpemVvZihzdHJ1Y3QgY2VwaF90aW1lc3BlYyk7CisJCWNlcGhfZGVjb2RlX2NvcHkocCwgJmxhZ2d5X3NpbmNlLCBzaXplb2YobGFnZ3lfc2luY2UpKTsKIAkJKnAgKz0gc2l6ZW9mKHUzMik7CiAJCWNlcGhfZGVjb2RlXzMyX3NhZmUocCwgZW5kLCBuYW1lbGVuLCBiYWQpOwogCQkqcCArPSBuYW1lbGVuOwpAQCAtMTIyLDYgKzEyMyw5IEBACiAJCQltLT5tX2luZm9bbWRzXS5nbG9iYWxfaWQgPSBnbG9iYWxfaWQ7CiAJCQltLT5tX2luZm9bbWRzXS5zdGF0ZSA9IHN0YXRlOwogCQkJbS0+bV9pbmZvW21kc10uYWRkciA9IGFkZHI7CisJCQltLT5tX2luZm9bbWRzXS5sYWdneSA9CisJCQkJKGxhZ2d5X3NpbmNlLnR2X3NlYyAhPSAwIHx8CisJCQkJIGxhZ2d5X3NpbmNlLnR2X25zZWMgIT0gMCk7CiAJCQltLT5tX2luZm9bbWRzXS5udW1fZXhwb3J0X3RhcmdldHMgPSBudW1fZXhwb3J0X3RhcmdldHM7CiAJCQlpZiAobnVtX2V4cG9ydF90YXJnZXRzKSB7CiAJCQkJbS0+bV9pbmZvW21kc10uZXhwb3J0X3RhcmdldHMgPQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNtYXAuaCBiL2ZzL2NlcGgvbWRzbWFwLmgKaW5kZXggZWFjYzEzMS4uNGM1Y2IwOCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNtYXAuaAorKysgYi9mcy9jZXBoL21kc21hcC5oCkBAIC0xMyw2ICsxMyw3IEBACiAJc3RydWN0IGNlcGhfZW50aXR5X2FkZHIgYWRkcjsKIAlzMzIgc3RhdGU7CiAJaW50IG51bV9leHBvcnRfdGFyZ2V0czsKKwlib29sIGxhZ2d5OwogCXUzMiAqZXhwb3J0X3RhcmdldHM7CiB9OwogCkBAIC00Nyw2ICs0OCwxMyBAQAogCXJldHVybiBtLT5tX2luZm9bd10uc3RhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZXBoX21kc21hcF9pc19sYWdneShzdHJ1Y3QgY2VwaF9tZHNtYXAgKm0sIGludCB3KQoreworCWlmICh3ID49IDAgJiYgdyA8IG0tPm1fbWF4X21kcykKKwkJcmV0dXJuIG0tPm1faW5mb1t3XS5sYWdneTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIGV4dGVybiBpbnQgY2VwaF9tZHNtYXBfZ2V0X3JhbmRvbV9tZHMoc3RydWN0IGNlcGhfbWRzbWFwICptKTsKIGV4dGVybiBzdHJ1Y3QgY2VwaF9tZHNtYXAgKmNlcGhfbWRzbWFwX2RlY29kZSh2b2lkICoqcCwgdm9pZCAqZW5kKTsKIGV4dGVybiB2b2lkIGNlcGhfbWRzbWFwX2Rlc3Ryb3koc3RydWN0IGNlcGhfbWRzbWFwICptKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWVzc2VuZ2VyLmMgYi9mcy9jZXBoL21lc3Nlbmdlci5jCmluZGV4IDE1MTY3YjIuLjI1MDJkNzYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbWVzc2VuZ2VyLmMKKysrIGIvZnMvY2VwaC9tZXNzZW5nZXIuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJZGVzdHJveV93b3JrcXVldWUoY2VwaF9tc2dyX3dxKTsKIH0KIAotdm9pZCBjZXBoX21zZ3JfZmx1c2goKQordm9pZCBjZXBoX21zZ3JfZmx1c2godm9pZCkKIHsKIAlmbHVzaF93b3JrcXVldWUoY2VwaF9tc2dyX3dxKTsKIH0KQEAgLTY0Nyw3ICs2NDcsNyBAQAogCWRvdXQoInByZXBhcmVfd3JpdGVfY29ubmVjdCAlcCBjc2VxPSVkIGdzZXE9JWQgcHJvdG89JWRcbiIsIGNvbiwKIAkgICAgIGNvbi0+Y29ubmVjdF9zZXEsIGdsb2JhbF9zZXEsIHByb3RvKTsKIAotCWNvbi0+b3V0X2Nvbm5lY3QuZmVhdHVyZXMgPSBjcHVfdG9fbGU2NChDRVBIX0ZFQVRVUkVfU1VQUE9SVEVEX0NMSUVOVCk7CisJY29uLT5vdXRfY29ubmVjdC5mZWF0dXJlcyA9IGNwdV90b19sZTY0KENFUEhfRkVBVFVSRV9TVVBQT1JURUQpOwogCWNvbi0+b3V0X2Nvbm5lY3QuaG9zdF90eXBlID0gY3B1X3RvX2xlMzIoQ0VQSF9FTlRJVFlfVFlQRV9DTElFTlQpOwogCWNvbi0+b3V0X2Nvbm5lY3QuY29ubmVjdF9zZXEgPSBjcHVfdG9fbGUzMihjb24tPmNvbm5lY3Rfc2VxKTsKIAljb24tPm91dF9jb25uZWN0Lmdsb2JhbF9zZXEgPSBjcHVfdG9fbGUzMihnbG9iYWxfc2VxKTsKQEAgLTEwODEsMTEgKzEwODEsMTEgQEAKIAkJICAgc2l6ZW9mKGNvbi0+cGVlcl9hZGRyKSkgIT0gMCAmJgogCSAgICAhKGFkZHJfaXNfYmxhbmsoJmNvbi0+YWN0dWFsX3BlZXJfYWRkci5pbl9hZGRyKSAmJgogCSAgICAgIGNvbi0+YWN0dWFsX3BlZXJfYWRkci5ub25jZSA9PSBjb24tPnBlZXJfYWRkci5ub25jZSkpIHsKLQkJcHJfd2FybmluZygid3JvbmcgcGVlciwgd2FudCAlcy8lbGxkLCBnb3QgJXMvJWxsZFxuIiwKKwkJcHJfd2FybmluZygid3JvbmcgcGVlciwgd2FudCAlcy8lZCwgZ290ICVzLyVkXG4iLAogCQkJICAgcHJfYWRkcigmY29uLT5wZWVyX2FkZHIuaW5fYWRkciksCi0JCQkgICBsZTY0X3RvX2NwdShjb24tPnBlZXJfYWRkci5ub25jZSksCisJCQkgICAoaW50KWxlMzJfdG9fY3B1KGNvbi0+cGVlcl9hZGRyLm5vbmNlKSwKIAkJCSAgIHByX2FkZHIoJmNvbi0+YWN0dWFsX3BlZXJfYWRkci5pbl9hZGRyKSwKLQkJCSAgIGxlNjRfdG9fY3B1KGNvbi0+YWN0dWFsX3BlZXJfYWRkci5ub25jZSkpOworCQkJICAgKGludClsZTMyX3RvX2NwdShjb24tPmFjdHVhbF9wZWVyX2FkZHIubm9uY2UpKTsKIAkJY29uLT5lcnJvcl9tc2cgPSAid3JvbmcgcGVlciBhdCBhZGRyZXNzIjsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTExMjMsOCArMTEyMyw4IEBACiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19jb25uZWN0KHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIHsKLQl1NjQgc3VwX2ZlYXQgPSBDRVBIX0ZFQVRVUkVfU1VQUE9SVEVEX0NMSUVOVDsKLQl1NjQgcmVxX2ZlYXQgPSBDRVBIX0ZFQVRVUkVfUkVRVUlSRURfQ0xJRU5UOworCXU2NCBzdXBfZmVhdCA9IENFUEhfRkVBVFVSRV9TVVBQT1JURUQ7CisJdTY0IHJlcV9mZWF0ID0gQ0VQSF9GRUFUVVJFX1JFUVVJUkVEOwogCXU2NCBzZXJ2ZXJfZmVhdCA9IGxlNjRfdG9fY3B1KGNvbi0+aW5fcmVwbHkuZmVhdHVyZXMpOwogCiAJZG91dCgicHJvY2Vzc19jb25uZWN0IG9uICVwIHRhZyAlZFxuIiwgY29uLCAoaW50KWNvbi0+aW5fdGFnKTsKQEAgLTEzMDIsOCArMTMwMiw4IEBACiAKIAogc3RhdGljIGludCByZWFkX3BhcnRpYWxfbWVzc2FnZV9zZWN0aW9uKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbiwKLQkJCQkJc3RydWN0IGt2ZWMgKnNlY3Rpb24sIHVuc2lnbmVkIGludCBzZWNfbGVuLAotCQkJCQl1MzIgKmNyYykKKwkJCQkJc3RydWN0IGt2ZWMgKnNlY3Rpb24sCisJCQkJCXVuc2lnbmVkIGludCBzZWNfbGVuLCB1MzIgKmNyYykKIHsKIAlpbnQgbGVmdDsKIAlpbnQgcmV0OwpAQCAtMTQzNCw3ICsxNDM0LDggQEAKIAogCS8qIG1pZGRsZSAqLwogCWlmIChtLT5taWRkbGUpIHsKLQkJcmV0ID0gcmVhZF9wYXJ0aWFsX21lc3NhZ2Vfc2VjdGlvbihjb24sICZtLT5taWRkbGUtPnZlYywgbWlkZGxlX2xlbiwKKwkJcmV0ID0gcmVhZF9wYXJ0aWFsX21lc3NhZ2Vfc2VjdGlvbihjb24sICZtLT5taWRkbGUtPnZlYywKKwkJCQkJCSAgIG1pZGRsZV9sZW4sCiAJCQkJCQkgICAmY29uLT5pbl9taWRkbGVfY3JjKTsKIAkJaWYgKHJldCA8PSAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTE5MjAsNyArMTkyMSw3IEBACiAJLyoKIAkgKiBpbiBjYXNlIHdlIGZhdWx0ZWQgZHVlIHRvIGF1dGhlbnRpY2F0aW9uLCBpbnZhbGlkYXRlIG91cgogCSAqIGN1cnJlbnQgdGlja2V0cyBzbyB0aGF0IHdlIGNhbiBnZXQgbmV3IG9uZXMuCi0gICAgICAgICAqLworCSAqLwogCWlmIChjb24tPmF1dGhfcmV0cnkgJiYgY29uLT5vcHMtPmludmFsaWRhdGVfYXV0aG9yaXplcikgewogCQlkb3V0KCJjYWxsaW5nIGludmFsaWRhdGVfYXV0aG9yaXplcigpXG4iKTsKIAkJY29uLT5vcHMtPmludmFsaWRhdGVfYXV0aG9yaXplcihjb24pOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tb25fY2xpZW50LmMgYi9mcy9jZXBoL21vbl9jbGllbnQuYwppbmRleCA1NGZlMDFjLi5iMmE1YTNlIDEwMDY0NAotLS0gYS9mcy9jZXBoL21vbl9jbGllbnQuYworKysgYi9mcy9jZXBoL21vbl9jbGllbnQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiB9CiAKIC8qCi0gKiBzdGF0ZnMKKyAqIGdlbmVyaWMgcmVxdWVzdHMgKGUuZy4sIHN0YXRmcywgcG9vbG9wKQogICovCiBzdGF0aWMgc3RydWN0IGNlcGhfbW9uX2dlbmVyaWNfcmVxdWVzdCAqX19sb29rdXBfZ2VuZXJpY19yZXEoCiAJc3RydWN0IGNlcGhfbW9uX2NsaWVudCAqbW9uYywgdTY0IHRpZCkKQEAgLTQ0Miw2ICs0NDIsMzUgQEAKIAlyZXR1cm4gbTsKIH0KIAorc3RhdGljIGludCBkb19nZW5lcmljX3JlcXVlc3Qoc3RydWN0IGNlcGhfbW9uX2NsaWVudCAqbW9uYywKKwkJCSAgICAgIHN0cnVjdCBjZXBoX21vbl9nZW5lcmljX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgZXJyOworCisJLyogcmVnaXN0ZXIgcmVxdWVzdCAqLworCW11dGV4X2xvY2soJm1vbmMtPm11dGV4KTsKKwlyZXEtPnRpZCA9ICsrbW9uYy0+bGFzdF90aWQ7CisJcmVxLT5yZXF1ZXN0LT5oZHIudGlkID0gY3B1X3RvX2xlNjQocmVxLT50aWQpOworCV9faW5zZXJ0X2dlbmVyaWNfcmVxdWVzdChtb25jLCByZXEpOworCW1vbmMtPm51bV9nZW5lcmljX3JlcXVlc3RzKys7CisJY2VwaF9jb25fc2VuZChtb25jLT5jb24sIGNlcGhfbXNnX2dldChyZXEtPnJlcXVlc3QpKTsKKwltdXRleF91bmxvY2soJm1vbmMtPm11dGV4KTsKKworCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmcmVxLT5jb21wbGV0aW9uKTsKKworCW11dGV4X2xvY2soJm1vbmMtPm11dGV4KTsKKwlyYl9lcmFzZSgmcmVxLT5ub2RlLCAmbW9uYy0+Z2VuZXJpY19yZXF1ZXN0X3RyZWUpOworCW1vbmMtPm51bV9nZW5lcmljX3JlcXVlc3RzLS07CisJbXV0ZXhfdW5sb2NrKCZtb25jLT5tdXRleCk7CisKKwlpZiAoIWVycikKKwkJZXJyID0gcmVxLT5yZXN1bHQ7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIHN0YXRmcworICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfc3RhdGZzX3JlcGx5KHN0cnVjdCBjZXBoX21vbl9jbGllbnQgKm1vbmMsCiAJCQkJc3RydWN0IGNlcGhfbXNnICptc2cpCiB7CkBAIC00NjgsNyArNDk3LDcgQEAKIAlyZXR1cm47CiAKIGJhZDoKLQlwcl9lcnIoImNvcnJ1cHQgZ2VuZXJpYyByZXBseSwgbm8gdGlkXG4iKTsKKwlwcl9lcnIoImNvcnJ1cHQgZ2VuZXJpYyByZXBseSwgdGlkICVsbHVcbiIsIHRpZCk7CiAJY2VwaF9tc2dfZHVtcChtc2cpOwogfQogCkBAIC00ODcsNiArNTE2LDcgQEAKIAogCWtyZWZfaW5pdCgmcmVxLT5rcmVmKTsKIAlyZXEtPmJ1ZiA9IGJ1ZjsKKwlyZXEtPmJ1Zl9sZW4gPSBzaXplb2YoKmJ1Zik7CiAJaW5pdF9jb21wbGV0aW9uKCZyZXEtPmNvbXBsZXRpb24pOwogCiAJZXJyID0gLUVOT01FTTsKQEAgLTUwNCwyNSArNTM0LDcgQEAKIAloLT5tb25oZHIuc2Vzc2lvbl9tb25fdGlkID0gMDsKIAloLT5mc2lkID0gbW9uYy0+bW9ubWFwLT5mc2lkOwogCi0JLyogcmVnaXN0ZXIgcmVxdWVzdCAqLwotCW11dGV4X2xvY2soJm1vbmMtPm11dGV4KTsKLQlyZXEtPnRpZCA9ICsrbW9uYy0+bGFzdF90aWQ7Ci0JcmVxLT5yZXF1ZXN0LT5oZHIudGlkID0gY3B1X3RvX2xlNjQocmVxLT50aWQpOwotCV9faW5zZXJ0X2dlbmVyaWNfcmVxdWVzdChtb25jLCByZXEpOwotCW1vbmMtPm51bV9nZW5lcmljX3JlcXVlc3RzKys7Ci0JbXV0ZXhfdW5sb2NrKCZtb25jLT5tdXRleCk7Ci0KLQkvKiBzZW5kIHJlcXVlc3QgYW5kIHdhaXQgKi8KLQljZXBoX2Nvbl9zZW5kKG1vbmMtPmNvbiwgY2VwaF9tc2dfZ2V0KHJlcS0+cmVxdWVzdCkpOwotCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmcmVxLT5jb21wbGV0aW9uKTsKLQotCW11dGV4X2xvY2soJm1vbmMtPm11dGV4KTsKLQlyYl9lcmFzZSgmcmVxLT5ub2RlLCAmbW9uYy0+Z2VuZXJpY19yZXF1ZXN0X3RyZWUpOwotCW1vbmMtPm51bV9nZW5lcmljX3JlcXVlc3RzLS07Ci0JbXV0ZXhfdW5sb2NrKCZtb25jLT5tdXRleCk7Ci0KLQlpZiAoIWVycikKLQkJZXJyID0gcmVxLT5yZXN1bHQ7CisJZXJyID0gZG9fZ2VuZXJpY19yZXF1ZXN0KG1vbmMsIHJlcSk7CiAKIG91dDoKIAlrcmVmX3B1dCgmcmVxLT5rcmVmLCByZWxlYXNlX2dlbmVyaWNfcmVxdWVzdCk7CkBAIC01MzAsNyArNTQyLDEyNiBAQAogfQogCiAvKgotICogUmVzZW5kIHBlbmRpbmcgc3RhdGZzIHJlcXVlc3RzLgorICogcG9vbCBvcHMKKyAqLworc3RhdGljIGludCBnZXRfcG9vbG9wX3JlcGx5X2J1Zihjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuLAorCQkJCWNoYXIgKmRzdCwgc2l6ZV90IGRzdF9sZW4pCit7CisJdTMyIGJ1Zl9sZW47CisKKwlpZiAoc3JjX2xlbiAhPSBzaXplb2YodTMyKSArIGRzdF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmX2xlbiA9IGxlMzJfdG9fY3B1KCoodTMyICopc3JjKTsKKwlpZiAoYnVmX2xlbiAhPSBkc3RfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShkc3QsIHNyYyArIHNpemVvZih1MzIpLCBkc3RfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3Bvb2xvcF9yZXBseShzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jLAorCQkJCXN0cnVjdCBjZXBoX21zZyAqbXNnKQoreworCXN0cnVjdCBjZXBoX21vbl9nZW5lcmljX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgY2VwaF9tb25fcG9vbG9wX3JlcGx5ICpyZXBseSA9IG1zZy0+ZnJvbnQuaW92X2Jhc2U7CisJdTY0IHRpZCA9IGxlNjRfdG9fY3B1KG1zZy0+aGRyLnRpZCk7CisKKwlpZiAobXNnLT5mcm9udC5pb3ZfbGVuIDwgc2l6ZW9mKCpyZXBseSkpCisJCWdvdG8gYmFkOworCWRvdXQoImhhbmRsZV9wb29sb3BfcmVwbHkgJXAgdGlkICVsbHVcbiIsIG1zZywgdGlkKTsKKworCW11dGV4X2xvY2soJm1vbmMtPm11dGV4KTsKKwlyZXEgPSBfX2xvb2t1cF9nZW5lcmljX3JlcShtb25jLCB0aWQpOworCWlmIChyZXEpIHsKKwkJaWYgKHJlcS0+YnVmX2xlbiAmJgorCQkgICAgZ2V0X3Bvb2xvcF9yZXBseV9idWYobXNnLT5mcm9udC5pb3ZfYmFzZSArIHNpemVvZigqcmVwbHkpLAorCQkJCSAgICAgbXNnLT5mcm9udC5pb3ZfbGVuIC0gc2l6ZW9mKCpyZXBseSksCisJCQkJICAgICByZXEtPmJ1ZiwgcmVxLT5idWZfbGVuKSA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmbW9uYy0+bXV0ZXgpOworCQkJZ290byBiYWQ7CisJCX0KKwkJcmVxLT5yZXN1bHQgPSBsZTMyX3RvX2NwdShyZXBseS0+cmVwbHlfY29kZSk7CisJCWdldF9nZW5lcmljX3JlcXVlc3QocmVxKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZtb25jLT5tdXRleCk7CisJaWYgKHJlcSkgeworCQljb21wbGV0ZSgmcmVxLT5jb21wbGV0aW9uKTsKKwkJcHV0X2dlbmVyaWNfcmVxdWVzdChyZXEpOworCX0KKwlyZXR1cm47CisKK2JhZDoKKwlwcl9lcnIoImNvcnJ1cHQgZ2VuZXJpYyByZXBseSwgdGlkICVsbHVcbiIsIHRpZCk7CisJY2VwaF9tc2dfZHVtcChtc2cpOworfQorCisvKgorICogRG8gYSBzeW5jaHJvbm91cyBwb29sIG9wLgorICovCitpbnQgY2VwaF9tb25jX2RvX3Bvb2xvcChzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jLCB1MzIgb3AsCisJCQl1MzIgcG9vbCwgdTY0IHNuYXBpZCwKKwkJCWNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY2VwaF9tb25fZ2VuZXJpY19yZXF1ZXN0ICpyZXE7CisJc3RydWN0IGNlcGhfbW9uX3Bvb2xvcCAqaDsKKwlpbnQgZXJyOworCisJcmVxID0ga3phbGxvYyhzaXplb2YoKnJlcSksIEdGUF9OT0ZTKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrcmVmX2luaXQoJnJlcS0+a3JlZik7CisJcmVxLT5idWYgPSBidWY7CisJcmVxLT5idWZfbGVuID0gbGVuOworCWluaXRfY29tcGxldGlvbigmcmVxLT5jb21wbGV0aW9uKTsKKworCWVyciA9IC1FTk9NRU07CisJcmVxLT5yZXF1ZXN0ID0gY2VwaF9tc2dfbmV3KENFUEhfTVNHX1BPT0xPUCwgc2l6ZW9mKCpoKSwgR0ZQX05PRlMpOworCWlmICghcmVxLT5yZXF1ZXN0KQorCQlnb3RvIG91dDsKKwlyZXEtPnJlcGx5ID0gY2VwaF9tc2dfbmV3KENFUEhfTVNHX1BPT0xPUF9SRVBMWSwgMTAyNCwgR0ZQX05PRlMpOworCWlmICghcmVxLT5yZXBseSkKKwkJZ290byBvdXQ7CisKKwkvKiBmaWxsIG91dCByZXF1ZXN0ICovCisJcmVxLT5yZXF1ZXN0LT5oZHIudmVyc2lvbiA9IGNwdV90b19sZTE2KDIpOworCWggPSByZXEtPnJlcXVlc3QtPmZyb250Lmlvdl9iYXNlOworCWgtPm1vbmhkci5oYXZlX3ZlcnNpb24gPSAwOworCWgtPm1vbmhkci5zZXNzaW9uX21vbiA9IGNwdV90b19sZTE2KC0xKTsKKwloLT5tb25oZHIuc2Vzc2lvbl9tb25fdGlkID0gMDsKKwloLT5mc2lkID0gbW9uYy0+bW9ubWFwLT5mc2lkOworCWgtPnBvb2wgPSBjcHVfdG9fbGUzMihwb29sKTsKKwloLT5vcCA9IGNwdV90b19sZTMyKG9wKTsKKwloLT5hdWlkID0gMDsKKwloLT5zbmFwaWQgPSBjcHVfdG9fbGU2NChzbmFwaWQpOworCWgtPm5hbWVfbGVuID0gMDsKKworCWVyciA9IGRvX2dlbmVyaWNfcmVxdWVzdChtb25jLCByZXEpOworCitvdXQ6CisJa3JlZl9wdXQoJnJlcS0+a3JlZiwgcmVsZWFzZV9nZW5lcmljX3JlcXVlc3QpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZXBoX21vbmNfY3JlYXRlX3NuYXBpZChzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jLAorCQkJICAgIHUzMiBwb29sLCB1NjQgKnNuYXBpZCkKK3sKKwlyZXR1cm4gY2VwaF9tb25jX2RvX3Bvb2xvcChtb25jLCAgUE9PTF9PUF9DUkVBVEVfVU5NQU5BR0VEX1NOQVAsCisJCQkJICAgcG9vbCwgMCwgKGNoYXIgKilzbmFwaWQsIHNpemVvZigqc25hcGlkKSk7CisKK30KKworaW50IGNlcGhfbW9uY19kZWxldGVfc25hcGlkKHN0cnVjdCBjZXBoX21vbl9jbGllbnQgKm1vbmMsCisJCQkgICAgdTMyIHBvb2wsIHU2NCBzbmFwaWQpCit7CisJcmV0dXJuIGNlcGhfbW9uY19kb19wb29sb3AobW9uYywgIFBPT0xfT1BfQ1JFQVRFX1VOTUFOQUdFRF9TTkFQLAorCQkJCSAgIHBvb2wsIHNuYXBpZCwgMCwgMCk7CisKK30KKworLyoKKyAqIFJlc2VuZCBwZW5kaW5nIGdlbmVyaWMgcmVxdWVzdHMuCiAgKi8KIHN0YXRpYyB2b2lkIF9fcmVzZW5kX2dlbmVyaWNfcmVxdWVzdChzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jKQogewpAQCAtNzgzLDYgKzkxNCwxMCBAQAogCQloYW5kbGVfc3RhdGZzX3JlcGx5KG1vbmMsIG1zZyk7CiAJCWJyZWFrOwogCisJY2FzZSBDRVBIX01TR19QT09MT1BfUkVQTFk6CisJCWhhbmRsZV9wb29sb3BfcmVwbHkobW9uYywgbXNnKTsKKwkJYnJlYWs7CisKIAljYXNlIENFUEhfTVNHX01PTl9NQVA6CiAJCWNlcGhfbW9uY19oYW5kbGVfbWFwKG1vbmMsIG1zZyk7CiAJCWJyZWFrOwpAQCAtODIwLDYgKzk1NSw3IEBACiAJY2FzZSBDRVBIX01TR19NT05fU1VCU0NSSUJFX0FDSzoKIAkJbSA9IGNlcGhfbXNnX2dldChtb25jLT5tX3N1YnNjcmliZV9hY2spOwogCQlicmVhazsKKwljYXNlIENFUEhfTVNHX1BPT0xPUF9SRVBMWToKIAljYXNlIENFUEhfTVNHX1NUQVRGU19SRVBMWToKIAkJcmV0dXJuIGdldF9nZW5lcmljX3JlcGx5KGNvbiwgaGRyLCBza2lwKTsKIAljYXNlIENFUEhfTVNHX0FVVEhfUkVQTFk6CmRpZmYgLS1naXQgYS9mcy9jZXBoL21vbl9jbGllbnQuaCBiL2ZzL2NlcGgvbW9uX2NsaWVudC5oCmluZGV4IDE3NGQ3OTQuLjhlMzk2ZjIgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbW9uX2NsaWVudC5oCisrKyBiL2ZzL2NlcGgvbW9uX2NsaWVudC5oCkBAIC01MCw2ICs1MCw3IEBACiAJc3RydWN0IHJiX25vZGUgbm9kZTsKIAlpbnQgcmVzdWx0OwogCXZvaWQgKmJ1ZjsKKwlpbnQgYnVmX2xlbjsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOwogCXN0cnVjdCBjZXBoX21zZyAqcmVxdWVzdDsgIC8qIG9yaWdpbmFsIHJlcXVlc3QgKi8KIAlzdHJ1Y3QgY2VwaF9tc2cgKnJlcGx5OyAgICAvKiBhbmQgcmVwbHkgKi8KQEAgLTExMSw2ICsxMTIsMTAgQEAKIAogZXh0ZXJuIGludCBjZXBoX21vbmNfdmFsaWRhdGVfYXV0aChzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jKTsKIAorZXh0ZXJuIGludCBjZXBoX21vbmNfY3JlYXRlX3NuYXBpZChzdHJ1Y3QgY2VwaF9tb25fY2xpZW50ICptb25jLAorCQkJCSAgIHUzMiBwb29sLCB1NjQgKnNuYXBpZCk7CiAKK2V4dGVybiBpbnQgY2VwaF9tb25jX2RlbGV0ZV9zbmFwaWQoc3RydWN0IGNlcGhfbW9uX2NsaWVudCAqbW9uYywKKwkJCQkgICB1MzIgcG9vbCwgdTY0IHNuYXBpZCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tc2dyLmggYi9mcy9jZXBoL21zZ3IuaAppbmRleCA4OTJhMDI5Li42ODBkM2Q2IDEwMDY0NAotLS0gYS9mcy9jZXBoL21zZ3IuaAorKysgYi9mcy9jZXBoL21zZ3IuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19NU0dSX0gKLSNkZWZpbmUgX19NU0dSX0gKKyNpZm5kZWYgQ0VQSF9NU0dSX0gKKyNkZWZpbmUgQ0VQSF9NU0dSX0gKIAogLyoKICAqIERhdGEgdHlwZXMgZm9yIG1lc3NhZ2UgcGFzc2luZyBsYXllciB1c2VkIGJ5IENlcGguCmRpZmYgLS1naXQgYS9mcy9jZXBoL29zZF9jbGllbnQuYyBiL2ZzL2NlcGgvb3NkX2NsaWVudC5jCmluZGV4IGUzODUyMjMuLmJlZDYzOTEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvb3NkX2NsaWVudC5jCisrKyBiL2ZzL2NlcGgvb3NkX2NsaWVudC5jCkBAIC0xMjc2LDggKzEyNzYsNiBAQAogCiAJLyogaXQgbWF5IGJlIGEgc2hvcnQgcmVhZCBkdWUgdG8gYW4gb2JqZWN0IGJvdW5kYXJ5ICovCiAJcmVxLT5yX3BhZ2VzID0gcGFnZXM7Ci0JbnVtX3BhZ2VzID0gY2FsY19wYWdlc19mb3Iob2ZmLCAqcGxlbik7Ci0JcmVxLT5yX251bV9wYWdlcyA9IG51bV9wYWdlczsKIAogCWRvdXQoInJlYWRwYWdlcyAgZmluYWwgZXh0ZW50IGlzICVsbHV+JWxsdSAoJWQgcGFnZXMpXG4iLAogCSAgICAgb2ZmLCAqcGxlbiwgcmVxLT5yX251bV9wYWdlcyk7CkBAIC0xMzE5LDcgKzEzMTcsNiBAQAogCiAJLyogaXQgbWF5IGJlIGEgc2hvcnQgd3JpdGUgZHVlIHRvIGFuIG9iamVjdCBib3VuZGFyeSAqLwogCXJlcS0+cl9wYWdlcyA9IHBhZ2VzOwotCXJlcS0+cl9udW1fcGFnZXMgPSBjYWxjX3BhZ2VzX2ZvcihvZmYsIGxlbik7CiAJZG91dCgid3JpdGVwYWdlcyAlbGx1fiVsbHUgKCVkIHBhZ2VzKVxuIiwgb2ZmLCBsZW4sCiAJICAgICByZXEtPnJfbnVtX3BhZ2VzKTsKIApAQCAtMTQ3Niw4ICsxNDczLDggQEAKICAqIGF1dGhlbnRpY2F0aW9uCiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2F1dGhvcml6ZXIoc3RydWN0IGNlcGhfY29ubmVjdGlvbiAqY29uLAotCSAgICAgICAgICAgICAgICAgIHZvaWQgKipidWYsIGludCAqbGVuLCBpbnQgKnByb3RvLAotCSAgICAgICAgICAgICAgICAgIHZvaWQgKipyZXBseV9idWYsIGludCAqcmVwbHlfbGVuLCBpbnQgZm9yY2VfbmV3KQorCQkJICB2b2lkICoqYnVmLCBpbnQgKmxlbiwgaW50ICpwcm90bywKKwkJCSAgdm9pZCAqKnJlcGx5X2J1ZiwgaW50ICpyZXBseV9sZW4sIGludCBmb3JjZV9uZXcpCiB7CiAJc3RydWN0IGNlcGhfb3NkICpvID0gY29uLT5wcml2YXRlOwogCXN0cnVjdCBjZXBoX29zZF9jbGllbnQgKm9zZGMgPSBvLT5vX29zZGM7CkBAIC0xNDk3LDcgKzE0OTQsNyBAQAogCQkJJm8tPm9fYXV0aG9yaXplcl9yZXBseV9idWYsCiAJCQkmby0+b19hdXRob3JpemVyX3JlcGx5X2J1Zl9sZW4pOwogCQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIHJldDsKIAl9CiAKIAkqcHJvdG8gPSBhYy0+cHJvdG9jb2w7CmRpZmYgLS1naXQgYS9mcy9jZXBoL29zZG1hcC5jIGIvZnMvY2VwaC9vc2RtYXAuYwppbmRleCA0MTZkNDZhLi5lMzFmMTE4IDEwMDY0NAotLS0gYS9mcy9jZXBoL29zZG1hcC5jCisrKyBiL2ZzL2NlcGgvb3NkbWFwLmMKQEAgLTQyNCwxMiArNDI0LDMwIEBACiAJa2ZyZWUocGkpOwogfQogCi12b2lkIF9fZGVjb2RlX3Bvb2wodm9pZCAqKnAsIHN0cnVjdCBjZXBoX3BnX3Bvb2xfaW5mbyAqcGkpCitzdGF0aWMgaW50IF9fZGVjb2RlX3Bvb2wodm9pZCAqKnAsIHZvaWQgKmVuZCwgc3RydWN0IGNlcGhfcGdfcG9vbF9pbmZvICpwaSkKIHsKKwl1bnNpZ25lZCBuLCBtOworCiAJY2VwaF9kZWNvZGVfY29weShwLCAmcGktPnYsIHNpemVvZihwaS0+dikpOwogCWNhbGNfcGdfbWFza3MocGkpOwotCSpwICs9IGxlMzJfdG9fY3B1KHBpLT52Lm51bV9zbmFwcykgKiBzaXplb2YodTY0KTsKKworCS8qIG51bV9zbmFwcyAqIHNuYXBfaW5mb190ICovCisJbiA9IGxlMzJfdG9fY3B1KHBpLT52Lm51bV9zbmFwcyk7CisJd2hpbGUgKG4tLSkgeworCQljZXBoX2RlY29kZV9uZWVkKHAsIGVuZCwgc2l6ZW9mKHU2NCkgKyAxICsgc2l6ZW9mKHU2NCkgKworCQkJCSBzaXplb2Yoc3RydWN0IGNlcGhfdGltZXNwZWMpLCBiYWQpOworCQkqcCArPSBzaXplb2YodTY0KSArICAgICAgIC8qIGtleSAqLworCQkJMSArIHNpemVvZih1NjQpICsgLyogdTgsIHNuYXBpZCAqLworCQkJc2l6ZW9mKHN0cnVjdCBjZXBoX3RpbWVzcGVjKTsKKwkJbSA9IGNlcGhfZGVjb2RlXzMyKHApOyAgICAvKiBzbmFwIG5hbWUgKi8KKwkJKnAgKz0gbTsKKwl9CisKIAkqcCArPSBsZTMyX3RvX2NwdShwaS0+di5udW1fcmVtb3ZlZF9zbmFwX2ludGVydmFscykgKiBzaXplb2YodTY0KSAqIDI7CisJcmV0dXJuIDA7CisKK2JhZDoKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCBfX2RlY29kZV9wb29sX25hbWVzKHZvaWQgKipwLCB2b2lkICplbmQsIHN0cnVjdCBjZXBoX29zZG1hcCAqbWFwKQpAQCAtNTcxLDcgKzU4OSw5IEBACiAJCQlrZnJlZShwaSk7CiAJCQlnb3RvIGJhZDsKIAkJfQotCQlfX2RlY29kZV9wb29sKHAsIHBpKTsKKwkJZXJyID0gX19kZWNvZGVfcG9vbChwLCBlbmQsIHBpKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGJhZDsKIAkJX19pbnNlcnRfcGdfcG9vbCgmbWFwLT5wZ19wb29scywgcGkpOwogCX0KIApAQCAtNzYwLDcgKzc4MCw5IEBACiAJCQlwaS0+aWQgPSBwb29sOwogCQkJX19pbnNlcnRfcGdfcG9vbCgmbWFwLT5wZ19wb29scywgcGkpOwogCQl9Ci0JCV9fZGVjb2RlX3Bvb2wocCwgcGkpOworCQllcnIgPSBfX2RlY29kZV9wb29sKHAsIGVuZCwgcGkpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gYmFkOwogCX0KIAlpZiAodmVyc2lvbiA+PSA1ICYmIF9fZGVjb2RlX3Bvb2xfbmFtZXMocCwgZW5kLCBtYXApIDwgMCkKIAkJZ290byBiYWQ7CkBAIC04MzMsNyArODU1LDcgQEAKIAkJCQkJCW5vZGUpLT5wZ2lkLCBwZ2lkKSA8PSAwKSB7CiAJCQlzdHJ1Y3QgY2VwaF9wZ19tYXBwaW5nICpjdXIgPQogCQkJCXJiX2VudHJ5KHJicCwgc3RydWN0IGNlcGhfcGdfbWFwcGluZywgbm9kZSk7Ci0JCQkKKwogCQkJcmJwID0gcmJfbmV4dChyYnApOwogCQkJZG91dCgiIHJlbW92ZWQgcGdfdGVtcCAlbGx4XG4iLCAqKHU2NCAqKSZjdXItPnBnaWQpOwogCQkJcmJfZXJhc2UoJmN1ci0+bm9kZSwgJm1hcC0+cGdfdGVtcCk7CkBAIC0xMDI2LDggKzEwNDgsOSBAQAogCXJ1bGVubyA9IGNydXNoX2ZpbmRfcnVsZShvc2RtYXAtPmNydXNoLCBwb29sLT52LmNydXNoX3J1bGVzZXQsCiAJCQkJIHBvb2wtPnYudHlwZSwgcG9vbC0+di5zaXplKTsKIAlpZiAocnVsZW5vIDwgMCkgewotCQlwcl9lcnIoIm5vIGNydXNoIHJ1bGUgcG9vbCAlZCB0eXBlICVkIHNpemUgJWRcbiIsCi0JCSAgICAgICBwb29saWQsIHBvb2wtPnYudHlwZSwgcG9vbC0+di5zaXplKTsKKwkJcHJfZXJyKCJubyBjcnVzaCBydWxlIHBvb2wgJWQgcnVsZXNldCAlZCB0eXBlICVkIHNpemUgJWRcbiIsCisJCSAgICAgICBwb29saWQsIHBvb2wtPnYuY3J1c2hfcnVsZXNldCwgcG9vbC0+di50eXBlLAorCQkgICAgICAgcG9vbC0+di5zaXplKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL3JhZG9zLmggYi9mcy9jZXBoL3JhZG9zLmgKaW5kZXggOGZjYzAyMy4uNmQ1MjQ3ZiAxMDA2NDQKLS0tIGEvZnMvY2VwaC9yYWRvcy5oCisrKyBiL2ZzL2NlcGgvcmFkb3MuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX19SQURPU19ICi0jZGVmaW5lIF9fUkFET1NfSAorI2lmbmRlZiBDRVBIX1JBRE9TX0gKKyNkZWZpbmUgQ0VQSF9SQURPU19ICiAKIC8qCiAgKiBEYXRhIHR5cGVzIGZvciB0aGUgQ2VwaCBkaXN0cmlidXRlZCBvYmplY3Qgc3RvcmFnZSBsYXllciBSQURPUwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJQ0VQSF9PU0RfT1BfVE1BUEdFVCA9IENFUEhfT1NEX09QX01PREVfUkQgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxMiwKIAogCUNFUEhfT1NEX09QX0NSRUFURSAgPSBDRVBIX09TRF9PUF9NT0RFX1dSIHwgQ0VQSF9PU0RfT1BfVFlQRV9EQVRBIHwgMTMsCisJQ0VQSF9PU0RfT1BfUk9MTEJBQ0s9IENFUEhfT1NEX09QX01PREVfV1IgfCBDRVBIX09TRF9PUF9UWVBFX0RBVEEgfCAxNCwKIAogCS8qKiBhdHRycyAqKi8KIAkvKiByZWFkICovCkBAIC0yNzIsNiArMjczLDEwIEBACiAJcmV0dXJuIChvcCAmIENFUEhfT1NEX09QX01PREUpID09IENFUEhfT1NEX09QX01PREVfV1I7CiB9CiAKKy8qCisgKiBub3RlIHRoYXQgdGhlIGZvbGxvd2luZyB0bWFwIHN0dWZmIGlzIGFsc28gZGVmaW5lZCBpbiB0aGUgY2VwaCBsaWJyYWRvcy5oCisgKiBhbnkgbW9kaWZpY2F0aW9uIGhlcmUgbmVlZHMgdG8gYmUgdXBkYXRlZCB0aGVyZQorICovCiAjZGVmaW5lIENFUEhfT1NEX1RNQVBfSERSICdoJwogI2RlZmluZSBDRVBIX09TRF9UTUFQX1NFVCAncycKICNkZWZpbmUgQ0VQSF9PU0RfVE1BUF9STSAgJ3InCkBAIC0yOTcsNiArMzAyLDcgQEAKIAlDRVBIX09TRF9GTEFHX1BBUkFMTEVMRVhFQyA9IDUxMiwgLyogZXhlY3V0ZSBvcCBpbiBwYXJhbGxlbCAqLwogCUNFUEhfT1NEX0ZMQUdfUEdPUCA9IDEwMjQsICAgICAgLyogcGcgb3AsIG5vIG9iamVjdCAqLwogCUNFUEhfT1NEX0ZMQUdfRVhFQyA9IDIwNDgsICAgICAgLyogb3AgbWF5IGV4ZWMgKi8KKwlDRVBIX09TRF9GTEFHX0VYRUNfUFVCTElDID0gNDA5NiwgLyogb3AgbWF5IGV4ZWMgKHB1YmxpYykgKi8KIH07CiAKIGVudW0gewpAQCAtMzUwLDYgKzM1Niw5IEBACiAJCXN0cnVjdCB7CiAJCQlfX2xlNjQgY29va2llLCBjb3VudDsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcGdsczsKKwkgICAgICAgIHN0cnVjdCB7CisJCSAgICAgICAgX19sZTY0IHNuYXBpZDsKKwkgICAgICAgIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNuYXA7CiAJfTsKIAlfX2xlMzIgcGF5bG9hZF9sZW47CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuYyBiL2ZzL2NlcGgvc3VwZXIuYwppbmRleCBmYTg3ZjUxLi45OTIyNjI4IDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmMKKysrIGIvZnMvY2VwaC9zdXBlci5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgImNlcGhfZGVidWcuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTEwMSwxMiArMTAyLDIxIEBACiB9CiAKIAotc3RhdGljIGludCBjZXBoX3N5bmNmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKK3N0YXRpYyBpbnQgY2VwaF9zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQogewotCWRvdXQoInN5bmNfZnMgJWRcbiIsIHdhaXQpOworCXN0cnVjdCBjZXBoX2NsaWVudCAqY2xpZW50ID0gY2VwaF9zYl90b19jbGllbnQoc2IpOworCisJaWYgKCF3YWl0KSB7CisJCWRvdXQoInN5bmNfZnMgKG5vbi1ibG9ja2luZylcbiIpOworCQljZXBoX2ZsdXNoX2RpcnR5X2NhcHMoJmNsaWVudC0+bWRzYyk7CisJCWRvdXQoInN5bmNfZnMgKG5vbi1ibG9ja2luZykgZG9uZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWRvdXQoInN5bmNfZnMgKGJsb2NraW5nKVxuIik7CiAJY2VwaF9vc2RjX3N5bmMoJmNlcGhfc2JfdG9fY2xpZW50KHNiKS0+b3NkYyk7CiAJY2VwaF9tZHNjX3N5bmMoJmNlcGhfc2JfdG9fY2xpZW50KHNiKS0+bWRzYyk7Ci0JZG91dCgic3luY19mcyAlZCBkb25lXG4iLCB3YWl0KTsKKwlkb3V0KCJzeW5jX2ZzIChibG9ja2luZykgZG9uZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MCw5ICsxNjAsNyBAQAogCXN0cnVjdCBjZXBoX21vdW50X2FyZ3MgKmFyZ3MgPSBjbGllbnQtPm1vdW50X2FyZ3M7CiAKIAlpZiAoYXJncy0+ZmxhZ3MgJiBDRVBIX09QVF9GU0lEKQotCQlzZXFfcHJpbnRmKG0sICIsZnNpZG1ham9yPSVsbHUsZnNpZG1pbm9yJWxsdSIsCi0JCQkgICBsZTY0X3RvX2NwdSgqKF9fbGU2NCAqKSZhcmdzLT5mc2lkLmZzaWRbMF0pLAotCQkJICAgbGU2NF90b19jcHUoKihfX2xlNjQgKikmYXJncy0+ZnNpZC5mc2lkWzhdKSk7CisJCXNlcV9wcmludGYobSwgIixmc2lkPSVwVSIsICZhcmdzLT5mc2lkKTsKIAlpZiAoYXJncy0+ZmxhZ3MgJiBDRVBIX09QVF9OT1NIQVJFKQogCQlzZXFfcHV0cyhtLCAiLG5vc2hhcmUiKTsKIAlpZiAoYXJncy0+ZmxhZ3MgJiBDRVBIX09QVF9ESVJTVEFUKQpAQCAtMjc5LDcgKzI4Nyw3IEBACiAJLmFsbG9jX2lub2RlCT0gY2VwaF9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGNlcGhfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUgICAgPSBjZXBoX3dyaXRlX2lub2RlLAotCS5zeW5jX2ZzICAgICAgICA9IGNlcGhfc3luY2ZzLAorCS5zeW5jX2ZzICAgICAgICA9IGNlcGhfc3luY19mcywKIAkucHV0X3N1cGVyCT0gY2VwaF9wdXRfc3VwZXIsCiAJLnNob3dfb3B0aW9ucyAgID0gY2VwaF9zaG93X29wdGlvbnMsCiAJLnN0YXRmcwkJPSBjZXBoX3N0YXRmcywKQEAgLTMyMiw5ICszMzAsNiBAQAogICogbW91bnQgb3B0aW9ucwogICovCiBlbnVtIHsKLQlPcHRfZnNpZG1ham9yLAotCU9wdF9mc2lkbWlub3IsCi0JT3B0X21vbnBvcnQsCiAJT3B0X3dzaXplLAogCU9wdF9yc2l6ZSwKIAlPcHRfb3NkdGltZW91dCwKQEAgLTMzOSw2ICszNDQsNyBAQAogCU9wdF9jb25nZXN0aW9uX2tiLAogCU9wdF9sYXN0X2ludCwKIAkvKiBpbnQgYXJncyBhYm92ZSAqLworCU9wdF9mc2lkLAogCU9wdF9zbmFwZGlybmFtZSwKIAlPcHRfbmFtZSwKIAlPcHRfc2VjcmV0LApAQCAtMzU1LDkgKzM2MSw2IEBACiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCBhcmdfdG9rZW5zID0gewotCXtPcHRfZnNpZG1ham9yLCAiZnNpZG1ham9yPSVsZCJ9LAotCXtPcHRfZnNpZG1pbm9yLCAiZnNpZG1pbm9yPSVsZCJ9LAotCXtPcHRfbW9ucG9ydCwgIm1vbnBvcnQ9JWQifSwKIAl7T3B0X3dzaXplLCAid3NpemU9JWQifSwKIAl7T3B0X3JzaXplLCAicnNpemU9JWQifSwKIAl7T3B0X29zZHRpbWVvdXQsICJvc2R0aW1lb3V0PSVkIn0sCkBAIC0zNzEsNiArMzc0LDcgQEAKIAl7T3B0X3JlYWRkaXJfbWF4X2J5dGVzLCAicmVhZGRpcl9tYXhfYnl0ZXM9JWQifSwKIAl7T3B0X2Nvbmdlc3Rpb25fa2IsICJ3cml0ZV9jb25nZXN0aW9uX2tiPSVkIn0sCiAJLyogaW50IGFyZ3MgYWJvdmUgKi8KKwl7T3B0X2ZzaWQsICJmc2lkPSVzIn0sCiAJe09wdF9zbmFwZGlybmFtZSwgInNuYXBkaXJuYW1lPSVzIn0sCiAJe09wdF9uYW1lLCAibmFtZT0lcyJ9LAogCXtPcHRfc2VjcmV0LCAic2VjcmV0PSVzIn0sCkBAIC0zODYsNiArMzkwLDM2IEBACiAJey0xLCBOVUxMfQogfTsKIAorc3RhdGljIGludCBwYXJzZV9mc2lkKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGNlcGhfZnNpZCAqZnNpZCkKK3sKKwlpbnQgaSA9IDA7CisJY2hhciB0bXBbM107CisJaW50IGVyciA9IC1FSU5WQUw7CisJaW50IGQ7CisKKwlkb3V0KCJwYXJzZV9mc2lkICclcydcbiIsIHN0cik7CisJdG1wWzJdID0gMDsKKwl3aGlsZSAoKnN0ciAmJiBpIDwgMTYpIHsKKwkJaWYgKGlzcHVuY3QoKnN0cikpIHsKKwkJCXN0cisrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc3hkaWdpdChzdHJbMF0pIHx8ICFpc3hkaWdpdChzdHJbMV0pKQorCQkJYnJlYWs7CisJCXRtcFswXSA9IHN0clswXTsKKwkJdG1wWzFdID0gc3RyWzFdOworCQlpZiAoc3NjYW5mKHRtcCwgIiV4IiwgJmQpIDwgMSkKKwkJCWJyZWFrOworCQlmc2lkLT5mc2lkW2ldID0gZCAmIDB4ZmY7CisJCWkrKzsKKwkJc3RyICs9IDI7CisJfQorCisJaWYgKGkgPT0gMTYpCisJCWVyciA9IDA7CisJZG91dCgicGFyc2VfZnNpZCByZXQgJWQgZ290IGZzaWQgJXBVIiwgZXJyLCBmc2lkKTsKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgc3RydWN0IGNlcGhfbW91bnRfYXJncyAqcGFyc2VfbW91bnRfYXJncyhpbnQgZmxhZ3MsIGNoYXIgKm9wdGlvbnMsCiAJCQkJCQljb25zdCBjaGFyICpkZXZfbmFtZSwKQEAgLTQ2OSwxMiArNTAzLDYgQEAKIAkJCWRvdXQoImdvdCB0b2tlbiAlZFxuIiwgdG9rZW4pOwogCQl9CiAJCXN3aXRjaCAodG9rZW4pIHsKLQkJY2FzZSBPcHRfZnNpZG1ham9yOgotCQkJKihfX2xlNjQgKikmYXJncy0+ZnNpZC5mc2lkWzBdID0gY3B1X3RvX2xlNjQoaW50dmFsKTsKLQkJCWJyZWFrOwotCQljYXNlIE9wdF9mc2lkbWlub3I6Ci0JCQkqKF9fbGU2NCAqKSZhcmdzLT5mc2lkLmZzaWRbOF0gPSBjcHVfdG9fbGU2NChpbnR2YWwpOwotCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lwOgogCQkJZXJyID0gY2VwaF9wYXJzZV9pcHMoYXJnc3RyWzBdLmZyb20sCiAJCQkJCSAgICAgYXJnc3RyWzBdLnRvLApAQCAtNDg1LDYgKzUxMywxMSBAQAogCQkJYXJncy0+ZmxhZ3MgfD0gQ0VQSF9PUFRfTVlJUDsKIAkJCWJyZWFrOwogCisJCWNhc2UgT3B0X2ZzaWQ6CisJCQllcnIgPSBwYXJzZV9mc2lkKGFyZ3N0clswXS5mcm9tLCAmYXJncy0+ZnNpZCk7CisJCQlpZiAoZXJyID09IDApCisJCQkJYXJncy0+ZmxhZ3MgfD0gQ0VQSF9PUFRfRlNJRDsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9zbmFwZGlybmFtZToKIAkJCWtmcmVlKGFyZ3MtPnNuYXBkaXJfbmFtZSk7CiAJCQlhcmdzLT5zbmFwZGlyX25hbWUgPSBrc3RybmR1cChhcmdzdHJbMF0uZnJvbSwKQEAgLTUxNSw2ICs1NDgsOSBAQAogCQljYXNlIE9wdF9vc2RrZWVwYWxpdmV0aW1lb3V0OgogCQkJYXJncy0+b3NkX2tlZXBhbGl2ZV90aW1lb3V0ID0gaW50dmFsOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X29zZF9pZGxlX3R0bDoKKwkJCWFyZ3MtPm9zZF9pZGxlX3R0bCA9IGludHZhbDsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9tb3VudF90aW1lb3V0OgogCQkJYXJncy0+bW91bnRfdGltZW91dCA9IGludHZhbDsKIAkJCWJyZWFrOwpAQCAtNjMwLDcgKzY2Niw2IEBACiAKIAkvKiBjYXBzICovCiAJY2xpZW50LT5taW5fY2FwcyA9IGFyZ3MtPm1heF9yZWFkZGlyOwotCWNlcGhfYWRqdXN0X21pbl9jYXBzKGNsaWVudC0+bWluX2NhcHMpOwogCiAJLyogc3Vic3lzdGVtcyAqLwogCWVyciA9IGNlcGhfbW9uY19pbml0KCZjbGllbnQtPm1vbmMsIGNsaWVudCk7CkBAIC02ODAsOCArNzE1LDYgQEAKIAogCWNlcGhfbW9uY19zdG9wKCZjbGllbnQtPm1vbmMpOwogCi0JY2VwaF9hZGp1c3RfbWluX2NhcHMoLWNsaWVudC0+bWluX2NhcHMpOwotCiAJY2VwaF9kZWJ1Z2ZzX2NsaWVudF9jbGVhbnVwKGNsaWVudCk7CiAJZGVzdHJveV93b3JrcXVldWUoY2xpZW50LT53Yl93cSk7CiAJZGVzdHJveV93b3JrcXVldWUoY2xpZW50LT5wZ19pbnZfd3EpOwpAQCAtNzA2LDEzICs3MzksMTMgQEAKIHsKIAlpZiAoY2xpZW50LT5oYXZlX2ZzaWQpIHsKIAkJaWYgKGNlcGhfZnNpZF9jb21wYXJlKCZjbGllbnQtPmZzaWQsIGZzaWQpKSB7Ci0JCQlwcl9lcnIoImJhZCBmc2lkLCBoYWQgIiBGU0lEX0ZPUk1BVCAiIGdvdCAiIEZTSURfRk9STUFULAotCQkJICAgICAgIFBSX0ZTSUQoJmNsaWVudC0+ZnNpZCksIFBSX0ZTSUQoZnNpZCkpOworCQkJcHJfZXJyKCJiYWQgZnNpZCwgaGFkICVwVSBnb3QgJXBVIiwKKwkJCSAgICAgICAmY2xpZW50LT5mc2lkLCBmc2lkKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0gZWxzZSB7Ci0JCXByX2luZm8oImNsaWVudCVsbGQgZnNpZCAiIEZTSURfRk9STUFUICJcbiIsCi0JCQljbGllbnQtPm1vbmMuYXV0aC0+Z2xvYmFsX2lkLCBQUl9GU0lEKGZzaWQpKTsKKwkJcHJfaW5mbygiY2xpZW50JWxsZCBmc2lkICVwVVxuIiwgY2xpZW50LT5tb25jLmF1dGgtPmdsb2JhbF9pZCwKKwkJCWZzaWQpOwogCQltZW1jcHkoJmNsaWVudC0+ZnNpZCwgZnNpZCwgc2l6ZW9mKCpmc2lkKSk7CiAJCWNlcGhfZGVidWdmc19jbGllbnRfaW5pdChjbGllbnQpOwogCQljbGllbnQtPmhhdmVfZnNpZCA9IHRydWU7CkBAIC0xMDQzLDggKzEwNzYsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X21zZ3I7CiAKLQljZXBoX2NhcHNfaW5pdCgpOwotCiAJcmV0ID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2VwaF9mc190eXBlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9pY2FjaGU7CkBAIC0xMDY5LDcgKzExMDAsNiBAQAogewogCWRvdXQoImV4aXRfY2VwaFxuIik7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZjZXBoX2ZzX3R5cGUpOwotCWNlcGhfY2Fwc19maW5hbGl6ZSgpOwogCWRlc3Ryb3lfY2FjaGVzKCk7CiAJY2VwaF9tc2dyX2V4aXQoKTsKIAljZXBoX2RlYnVnZnNfY2xlYW51cCgpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5oIGIvZnMvY2VwaC9zdXBlci5oCmluZGV4IDEwYTRhNDAuLjI0ODJkNjkgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuaAorKysgYi9mcy9jZXBoL3N1cGVyLmgKQEAgLTMxLDYgKzMxLDEyIEBACiAjZGVmaW5lIENFUEhfQkxPQ0sgICAgICAgICAoMSA8PCBDRVBIX0JMT0NLX1NISUZUKQogCiAvKgorICogU3VwcG9ydGVkIGZlYXR1cmVzCisgKi8KKyNkZWZpbmUgQ0VQSF9GRUFUVVJFX1NVUFBPUlRFRCBDRVBIX0ZFQVRVUkVfTk9TUkNBRERSIHwgQ0VQSF9GRUFUVVJFX0ZMT0NLCisjZGVmaW5lIENFUEhfRkVBVFVSRV9SRVFVSVJFRCAgQ0VQSF9GRUFUVVJFX05PU1JDQUREUgorCisvKgogICogbW91bnQgb3B0aW9ucwogICovCiAjZGVmaW5lIENFUEhfT1BUX0ZTSUQgICAgICAgICAgICAgKDE8PDApCkBAIC01NjAsMTEgKzU2NiwxMyBAQAogLyogd2hhdCB0aGUgbWRzIHRoaW5rcyB3ZSB3YW50ICovCiBleHRlcm4gaW50IF9fY2VwaF9jYXBzX21kc193YW50ZWQoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kpOwogCi1leHRlcm4gdm9pZCBjZXBoX2NhcHNfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGNlcGhfY2Fwc19maW5hbGl6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNlcGhfYWRqdXN0X21pbl9jYXBzKGludCBkZWx0YSk7Ci1leHRlcm4gaW50IGNlcGhfcmVzZXJ2ZV9jYXBzKHN0cnVjdCBjZXBoX2NhcF9yZXNlcnZhdGlvbiAqY3R4LCBpbnQgbmVlZCk7Ci1leHRlcm4gaW50IGNlcGhfdW5yZXNlcnZlX2NhcHMoc3RydWN0IGNlcGhfY2FwX3Jlc2VydmF0aW9uICpjdHgpOworZXh0ZXJuIHZvaWQgY2VwaF9jYXBzX2luaXQoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyk7CitleHRlcm4gdm9pZCBjZXBoX2NhcHNfZmluYWxpemUoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYyk7CitleHRlcm4gdm9pZCBjZXBoX2FkanVzdF9taW5fY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLCBpbnQgZGVsdGEpOworZXh0ZXJuIGludCBjZXBoX3Jlc2VydmVfY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAorCQkJICAgICBzdHJ1Y3QgY2VwaF9jYXBfcmVzZXJ2YXRpb24gKmN0eCwgaW50IG5lZWQpOworZXh0ZXJuIGludCBjZXBoX3VucmVzZXJ2ZV9jYXBzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCisJCQkgICAgICAgc3RydWN0IGNlcGhfY2FwX3Jlc2VydmF0aW9uICpjdHgpOwogZXh0ZXJuIHZvaWQgY2VwaF9yZXNlcnZhdGlvbl9zdGF0dXMoc3RydWN0IGNlcGhfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgIGludCAqdG90YWwsIGludCAqYXZhaWwsIGludCAqdXNlZCwKIAkJCQkgICAgaW50ICpyZXNlcnZlZCwgaW50ICptaW4pOwpAQCAtNzM4LDEzICs3NDYsNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKmNlcGhfbXNnX3R5cGVfbmFtZShpbnQgdHlwZSk7CiBleHRlcm4gaW50IGNlcGhfY2hlY2tfZnNpZChzdHJ1Y3QgY2VwaF9jbGllbnQgKmNsaWVudCwgc3RydWN0IGNlcGhfZnNpZCAqZnNpZCk7CiAKLSNkZWZpbmUgRlNJRF9GT1JNQVQgIiUwMnglMDJ4JTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtJTAyeCUwMngtIiBcCi0JIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIKLSNkZWZpbmUgUFJfRlNJRChmKSAoZiktPmZzaWRbMF0sIChmKS0+ZnNpZFsxXSwgKGYpLT5mc2lkWzJdLCAoZiktPmZzaWRbM10sIFwKLQkJKGYpLT5mc2lkWzRdLCAoZiktPmZzaWRbNV0sIChmKS0+ZnNpZFs2XSwgKGYpLT5mc2lkWzddLCAgICBcCi0JCShmKS0+ZnNpZFs4XSwgKGYpLT5mc2lkWzldLCAoZiktPmZzaWRbMTBdLCAoZiktPmZzaWRbMTFdLCAgXAotCQkoZiktPmZzaWRbMTJdLCAoZiktPmZzaWRbMTNdLCAoZiktPmZzaWRbMTRdLCAoZiktPmZzaWRbMTVdCi0KIC8qIGlub2RlLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZXBoX2ZpbGVfaW9wczsKIApAQCAtODA2LDEzICs4MDcsMTYgQEAKIAlfX2NlcGhfcmVtb3ZlX2NhcChjYXApOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIH0KLWV4dGVybiB2b2lkIGNlcGhfcHV0X2NhcChzdHJ1Y3QgY2VwaF9jYXAgKmNhcCk7CitleHRlcm4gdm9pZCBjZXBoX3B1dF9jYXAoc3RydWN0IGNlcGhfbWRzX2NsaWVudCAqbWRzYywKKwkJCSBzdHJ1Y3QgY2VwaF9jYXAgKmNhcCk7CiAKIGV4dGVybiB2b2lkIGNlcGhfcXVldWVfY2Fwc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBjZXBoX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGV4dGVybiBpbnQgY2VwaF9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGRhdGFzeW5jKTsKIGV4dGVybiB2b2lkIGNlcGhfa2lja19mbHVzaGluZ19jYXBzKHN0cnVjdCBjZXBoX21kc19jbGllbnQgKm1kc2MsCiAJCQkJICAgIHN0cnVjdCBjZXBoX21kc19zZXNzaW9uICpzZXNzaW9uKTsKK2V4dGVybiBzdHJ1Y3QgY2VwaF9jYXAgKmNlcGhfZ2V0X2NhcF9mb3JfbWRzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLAorCQkJCQkgICAgIGludCBtZHMpOwogZXh0ZXJuIGludCBjZXBoX2dldF9jYXBfbWRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgY2VwaF9nZXRfY2FwX3JlZnMoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2ksIGludCBjYXBzKTsKIGV4dGVybiB2b2lkIGNlcGhfcHV0X2NhcF9yZWZzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgaGFkKTsKQEAgLTg1Nyw3ICs4NjEsNyBAQAogLyogZGlyLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNlcGhfZGlyX2ZvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2VwaF9kaXJfaW9wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9kZW50cnlfb3BzLCBjZXBoX3NuYXBfZGVudHJ5X29wcywKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2VwaF9kZW50cnlfb3BzLCBjZXBoX3NuYXBfZGVudHJ5X29wcywKIAljZXBoX3NuYXBkaXJfZGVudHJ5X29wczsKIAogZXh0ZXJuIGludCBjZXBoX2hhbmRsZV9ub3RyYWNlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKQEAgLTg4OCw2ICs4OTIsMTQgQEAKIGV4dGVybiBpbnQgY2VwaF9kZWJ1Z2ZzX2NsaWVudF9pbml0KHN0cnVjdCBjZXBoX2NsaWVudCAqY2xpZW50KTsKIGV4dGVybiB2b2lkIGNlcGhfZGVidWdmc19jbGllbnRfY2xlYW51cChzdHJ1Y3QgY2VwaF9jbGllbnQgKmNsaWVudCk7CiAKKy8qIGxvY2tzLmMgKi8KK2V4dGVybiBpbnQgY2VwaF9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CitleHRlcm4gaW50IGNlcGhfZmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKK2V4dGVybiB2b2lkIGNlcGhfY291bnRfbG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50ICpwX251bSwgaW50ICpmX251bSk7CitleHRlcm4gaW50IGNlcGhfZW5jb2RlX2xvY2tzKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGNlcGhfcGFnZWxpc3QgKnAsCisJCQkgICAgIGludCBwX2xvY2tzLCBpbnQgZl9sb2Nrcyk7CitleHRlcm4gaW50IGxvY2tfdG9fY2VwaF9maWxlbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgc3RydWN0IGNlcGhfZmlsZWxvY2sgKmMpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqZ2V0X2RlbnRyeV9wYXJlbnRfaW5vZGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChkZW50cnkgJiYgZGVudHJ5LT5kX3BhcmVudCkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgveGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCA2OGFlZWJjLi4wOTdhMjY1IDEwMDY0NAotLS0gYS9mcy9jZXBoL3hhdHRyLmMKKysrIGIvZnMvY2VwaC94YXR0ci5jCkBAIC0zMzcsNiArMzM3LDggQEAKIH0KIAogc3RhdGljIGludCBfX2J1aWxkX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCV9fcmVsZWFzZXMoaW5vZGUtPmlfbG9jaykKKwlfX2FjcXVpcmVzKGlub2RlLT5pX2xvY2spCiB7CiAJdTMyIG5hbWVsZW47CiAJdTMyIG51bWF0dHIgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvY2hhcl9kZXYuYyBiL2ZzL2NoYXJfZGV2LmMKaW5kZXggZDZkYjkzMy4uZjgwYTRmMiAxMDA2NDQKLS0tIGEvZnMvY2hhcl9kZXYuYworKysgYi9mcy9jaGFyX2Rldi5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCA1NzM5ZmQ3Li45MTdiN2Q0IDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0yLDcgKzIsNiBAQAogCXRyaXN0YXRlICJDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSwgU01CRlMgc3VjY2Vzc29yKSIKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCi0Jc2VsZWN0IFNMT1dfV09SSwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCiAJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKQEAgLTcxLDE0ICs3MCwxNCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENJRlNfVVBDQUxMCi0JICBib29sICJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCIKLQkgIGRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCi0JICBoZWxwCi0JICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBhY2Nlc3NlcwotCSAgICB1c2Vyc3BhY2UgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIFNQTkVHTyBwYWNrYWdlZCAoUkZDIDQxNzgpCi0JICAgIEtlcmJlcm9zIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCi0JICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgotCSAgICB1bnN1cmUsIHNheSBOLgorCWJvb2wgIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwIgorCWRlcGVuZHMgb24gQ0lGUyAmJiBLRVlTCisJc2VsZWN0IEROU19SRVNPTFZFUgorCWhlbHAKKwkgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBhY2Nlc3NlcyB1c2Vyc3BhY2UgaGVscGVyCisJICB1dGlsaXRpZXMgdG8gcHJvdmlkZSBTUE5FR08gcGFja2FnZWQgKFJGQyA0MTc4KSBLZXJiZXJvcyB0aWNrZXRzCisJICB3aGljaCBhcmUgbmVlZGVkIHRvIG1vdW50IHRvIGNlcnRhaW4gc2VjdXJlIHNlcnZlcnMgKGZvciB3aGljaCBtb3JlCisJICBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ0lGU19YQVRUUgogICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCkBAIC0xMjIsNiArMTIxLDcgQEAKIGNvbmZpZyBDSUZTX0RGU19VUENBTEwKIAkgIGJvb2wgIkRGUyBmZWF0dXJlIHN1cHBvcnQiCiAJICBkZXBlbmRzIG9uIENJRlMgJiYgS0VZUworCSAgc2VsZWN0IEROU19SRVNPTFZFUgogCSAgaGVscAogCSAgICBEaXN0cmlidXRlZCBGaWxlIFN5c3RlbSAoREZTKSBzdXBwb3J0IGlzIHVzZWQgdG8gYWNjZXNzIHNoYXJlcwogCSAgICB0cmFuc3BhcmVudGx5IGluIGFuIGVudGVycHJpc2UgbmFtZSBzcGFjZSwgZXZlbiBpZiB0aGUgc2hhcmUKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggYTcyN2I3Yy4uYTcwODFlZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTU2OCw4ICs1NjgsOSBAQAogTWlzYyAvcHJvYy9mcy9jaWZzIEZsYWdzIGFuZCBEZWJ1ZyBJbmZvCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEluZm9ybWF0aW9uYWwgcHNldWRvLWZpbGVzOgotRGVidWdEYXRhCQlEaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgQ0lGUyBzZXNzaW9ucwotCQkJYW5kIHNoYXJlcywgYXMgd2VsbCBhcyB0aGUgY2lmcy5rbyB2ZXJzaW9uLgorRGVidWdEYXRhCQlEaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgQ0lGUyBzZXNzaW9ucyBhbmQKKwkJCXNoYXJlcywgZmVhdHVyZXMgZW5hYmxlZCBhcyB3ZWxsIGFzIHRoZSBjaWZzLmtvCisJCQl2ZXJzaW9uLgogU3RhdHMJCQlMaXN0cyBzdW1tYXJ5IHJlc291cmNlIHVzYWdlIGluZm9ybWF0aW9uIGFzIHdlbGwgYXMgcGVyCiAJCQlzaGFyZSBzdGF0aXN0aWNzLCBpZiBDT05GSUdfQ0lGU19TVEFUUyBpbiBlbmFibGVkCiAJCQlpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGVidWcuYyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCmluZGV4IDRmY2U2ZTYuLmViMWJhNDkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jCkBAIC0xMTksNiArMTE5LDMxIEBACiAJCSAgICAiRGlzcGxheSBJbnRlcm5hbCBDSUZTIERhdGEgU3RydWN0dXJlcyBmb3IgRGVidWdnaW5nXG4iCiAJCSAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJDSUZTIFZlcnNpb24gJXNcbiIsIENJRlNfVkVSU0lPTik7CisJc2VxX3ByaW50ZihtLCAiRmVhdHVyZXM6ICIpOworI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKKwlzZXFfcHJpbnRmKG0sICJkZnMiKTsKKwlzZXFfcHV0YyhtLCAnICcpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NJRlNfRlNDQUNIRQorCXNlcV9wcmludGYobSwgImZzY2FjaGUiKTsKKwlzZXFfcHV0YyhtLCAnICcpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICisJc2VxX3ByaW50ZihtLCAibGFubWFuIik7CisJc2VxX3B1dGMobSwgJyAnKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCisJc2VxX3ByaW50ZihtLCAicG9zaXgiKTsKKwlzZXFfcHV0YyhtLCAnICcpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCisJc2VxX3ByaW50ZihtLCAic3BuZWdvIik7CisJc2VxX3B1dGMobSwgJyAnKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DSUZTX1hBVFRSCisJc2VxX3ByaW50ZihtLCAieGF0dHIiKTsKKyNlbmRpZgorCXNlcV9wdXRjKG0sICdcbicpOwogCXNlcV9wcmludGYobSwgIkFjdGl2ZSBWRlMgUmVxdWVzdHM6ICVkXG4iLCBHbG9iYWxUb3RhbEFjdGl2ZVhpZCk7CiAJc2VxX3ByaW50ZihtLCAiU2VydmVyczoiKTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKaW5kZXggZGMxZWQ1MC4uZDZjZWQ3YSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYworKysgYi9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiAKIAlyYyA9IGRuc19yZXNvbHZlX3NlcnZlcl9uYW1lX3RvX2lwKCpkZXZuYW1lLCAmc3J2SVApOwotCWlmIChyYyAhPSAwKSB7CisJaWYgKHJjIDwgMCkgewogCQljRVJST1IoMSwgIiVzOiBGYWlsZWQgdG8gcmVzb2x2ZSBzZXJ2ZXIgcGFydCBvZiAlcyB0byBJUDogJWQiLAogCQkJICBfX2Z1bmNfXywgKmRldm5hbWUsIHJjKTsKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwpAQCAtMTUwLDggKzE1MCw3IEBACiAJICogYXNzdW1pbmcgdGhhdCB3ZSBoYXZlICd1bmM9JyBhbmQgJ2lwPScgaW4KIAkgKiB0aGUgb3JpZ2luYWwgc2JfbW91bnRkYXRhCiAJICovCi0JbWRfbGVuID0gc3RybGVuKHNiX21vdW50ZGF0YSkgKyBzdHJsZW4oc3J2SVApICsKLQkJc3RybGVuKHJlZi0+bm9kZV9uYW1lKSArIDEyOworCW1kX2xlbiA9IHN0cmxlbihzYl9tb3VudGRhdGEpICsgcmMgKyBzdHJsZW4ocmVmLT5ub2RlX25hbWUpICsgMTI7CiAJbW91bnRkYXRhID0ga3phbGxvYyhtZF9sZW4rMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1vdW50ZGF0YSA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCA2ZWZmY2NmLi44NzA0NDkwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC04NCw2ICs4NCw5IEBACiAvKiBzdHJsZW4gb2YgIjt1aWQ9MHgiICovCiAjZGVmaW5lIFVJRF9LRVlfTEVOCQk3CiAKKy8qIHN0cmxlbiBvZiAiO2NyZWR1aWQ9MHgiICovCisjZGVmaW5lIENSRURVSURfS0VZX0xFTgkJMTEKKwogLyogc3RybGVuIG9mICI7dXNlcj0iICovCiAjZGVmaW5lIFVTRVJfS0VZX0xFTgkJNgogCkBAIC0xMDcsNiArMTEwLDcgQEAKIAkJICAgSVBfS0VZX0xFTiArIElORVQ2X0FERFJTVFJMRU4gKwogCQkgICBNQVhfTUVDSF9TVFJfTEVOICsKIAkJICAgVUlEX0tFWV9MRU4gKyAoc2l6ZW9mKHVpZF90KSAqIDIpICsKKwkJICAgQ1JFRFVJRF9LRVlfTEVOICsgKHNpemVvZih1aWRfdCkgKiAyKSArCiAJCSAgIFVTRVJfS0VZX0xFTiArIHN0cmxlbihzZXNJbmZvLT51c2VyTmFtZSkgKwogCQkgICBQSURfS0VZX0xFTiArIChzaXplb2YocGlkX3QpICogMikgKyAxOwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA4YTJjZjEyLi5iNzQzMWFmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXktdHlwZS5oPgotI2luY2x1ZGUgImRuc19yZXNvbHZlLmgiCiAjaW5jbHVkZSAiY2lmc19zcG5lZ28uaCIKICNpbmNsdWRlICJmc2NhY2hlLmgiCiAjZGVmaW5lIENJRlNfTUFHSUNfTlVNQkVSIDB4RkY1MzRENDIJLyogdGhlIGZpcnN0IGZvdXIgYnl0ZXMgb2YgU01CIFBEVXMgKi8KQEAgLTMzMCw4ICszMjksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWNpZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK2NpZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJY2lmc19mc2NhY2hlX3JlbGVhc2VfaW5vZGVfY29va2llKGlub2RlKTsKIH0KIApAQCAtNDgwLDE0ICs0ODEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjaWZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgY2lmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCi0JaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkKLQkJcmV0dXJuIGdlbmVyaWNfZHJvcF9pbm9kZShpbm9kZSk7Ci0KLQlyZXR1cm4gZ2VuZXJpY19kZWxldGVfaW5vZGUoaW5vZGUpOworCS8qIG5vIHNlcnZlcmlubyA9PiB1bmNvbmRpdGlvbmFsIGV2aWN0aW9uICovCisJcmV0dXJuICEoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSB8fAorCQlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2lmc19zdXBlcl9vcHMgPSB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAkuYWxsb2NfaW5vZGUgPSBjaWZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gY2lmc19kZXN0cm95X2lub2RlLAogCS5kcm9wX2lub2RlCT0gY2lmc19kcm9wX2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGNpZnNfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gY2lmc19ldmljdF9pbm9kZSwKIC8qCS5kZWxldGVfaW5vZGUJPSBjaWZzX2RlbGV0ZV9pbm9kZSwgICovICAvKiBEbyBub3QgbmVlZCBhYm92ZQogCWZ1bmN0aW9uIHVubGVzcyBsYXRlciB3ZSBhZGQgbGF6eSBjbG9zZSBvZiBpbm9kZXMgb3IgdW5sZXNzIHRoZQogCWtlcm5lbCBmb3JnZXRzIHRvIGNhbGwgdXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgcmVsZWFzZXMgKGNsb3NlcykKQEAgLTkzNCwyNyArOTM0LDEzIEBACiAJaWYgKHJjKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX2ZpbGVzeXN0ZW07CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQ0lGU19ERlNfVVBDQUxMCi0JcmMgPSBjaWZzX2luaXRfZG5zX3Jlc29sdmVyKCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyX2tleV90eXBlOwotI2VuZGlmCi0JcmMgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dF91bnJlZ2lzdGVyX3Jlc29sdmVyX2tleTsKIAogCXJldHVybiAwOwogCi0gb3V0X3VucmVnaXN0ZXJfcmVzb2x2ZXJfa2V5OgotI2lmZGVmIENPTkZJR19DSUZTX0RGU19VUENBTEwKLQljaWZzX2V4aXRfZG5zX3Jlc29sdmVyKCk7Ci0gb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU6Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKLQl1bnJlZ2lzdGVyX2tleV90eXBlKCZjaWZzX3NwbmVnb19rZXlfdHlwZSk7CiAgb3V0X3VucmVnaXN0ZXJfZmlsZXN5c3RlbToKLSNlbmRpZgogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2lmc19mc190eXBlKTsKKyNlbmRpZgogIG91dF9kZXN0cm95X3JlcXVlc3RfYnVmczoKIAljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7CiAgb3V0X2Rlc3Ryb3lfbWlkczoKQEAgLTk3Niw3ICs5NjIsNiBAQAogCWNpZnNfZnNjYWNoZV91bnJlZ2lzdGVyKCk7CiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAogCWNpZnNfZGZzX3JlbGVhc2VfYXV0b21vdW50X3RpbWVyKCk7Ci0JY2lmc19leGl0X2Ruc19yZXNvbHZlcigpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCiAJdW5yZWdpc3Rlcl9rZXlfdHlwZSgmY2lmc19zcG5lZ29fa2V5X3R5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDU5OTA2MTQuLjBjZGZiOGMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCiAjaW5jbHVkZSAiY2lmc2FjbC5oIgogLyoKQEAgLTM1Niw3ICszNTYsNyBAQAogCWF0b21pY190IGNvdW50OwkJLyogcmVmZXJlbmNlIGNvdW50ICovCiAJc3RydWN0IG11dGV4IGZoX211dGV4OyAvKiBwcmV2ZW50cyByZW9wZW4gcmFjZSBhZnRlciBkZWFkIHNlcyovCiAJc3RydWN0IGNpZnNfc2VhcmNoX2luZm8gc3JjaF9pbmY7Ci0Jc3RydWN0IHNsb3dfd29yayBvcGxvY2tfYnJlYWs7IC8qIHNsb3dfd29yayBqb2IgZm9yIG9wbG9jayBicmVha3MgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgb3Bsb2NrX2JyZWFrOyAvKiB3b3JrIGZvciBvcGxvY2sgYnJlYWtzICovCiB9OwogCiAvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBmaWxlIHByaXZhdGUgZGF0YSAqLwpAQCAtNzI4LDYgKzcyOCwxMCBAQAogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19taW5fc21hbGw7ICAvKiBtaW4gc2l6ZSBvZiBzbWFsbCBidWYgcG9vbCAqLwogR0xPQkFMX0VYVEVSTiB1bnNpZ25lZCBpbnQgY2lmc19tYXhfcGVuZGluZzsgLyogTUFYIHJlcXVlc3RzIGF0IG9uY2UgdG8gc2VydmVyKi8KIAordm9pZCBjaWZzX29wbG9ja19icmVhayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBjaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOwordm9pZCBjaWZzX29wbG9ja19icmVha19wdXQoc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUpOworCiBleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzOwogCiAjZW5kaWYJLyogX0NJRlNfR0xPQl9IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAyZWFlYmJkLi4xZjU0NTA4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTg2LDggKzg2LDggQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc21iQ2FsY1NpemVfTEUoc3RydWN0IHNtYl9oZHIgKnB0cik7CiBleHRlcm4gaW50IGRlY29kZV9uZWdUb2tlbkluaXQodW5zaWduZWQgY2hhciAqc2VjdXJpdHlfYmxvYiwgaW50IGxlbmd0aCwKIAkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcik7Ci1leHRlcm4gaW50IGNpZnNfY29udmVydF9hZGRyZXNzKHN0cnVjdCBzb2NrYWRkciAqZHN0LCBjaGFyICpzcmMpOwotZXh0ZXJuIGludCBjaWZzX2ZpbGxfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyICpkc3QsIGNoYXIgKnNyYywKK2V4dGVybiBpbnQgY2lmc19jb252ZXJ0X2FkZHJlc3Moc3RydWN0IHNvY2thZGRyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbik7CitleHRlcm4gaW50IGNpZnNfZmlsbF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLAogCQkJCXVuc2lnbmVkIHNob3J0IGludCBwb3J0KTsKIGV4dGVybiBpbnQgbWFwX3NtYl90b19saW51eF9lcnJvcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBpbnQgbG9nRXJyKTsKIGV4dGVybiB2b2lkIGhlYWRlcl9hc3NlbWJsZShzdHJ1Y3Qgc21iX2hkciAqLCBjaGFyIC8qIGNvbW1hbmQgKi8gLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyYTQzYTBhLi45NWMyZWE2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMTU0Myw2ICsxNTQzLDcgQEAKIAlpZiAodm9sdW1lX2luZm8tPlVOQ2lwICYmIHZvbHVtZV9pbmZvLT5VTkMpIHsKIAkJcmMgPSBjaWZzX2ZpbGxfc29ja2FkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAogCQkJCQl2b2x1bWVfaW5mby0+VU5DaXAsCisJCQkJCXN0cmxlbih2b2x1bWVfaW5mby0+VU5DaXApLAogCQkJCQl2b2x1bWVfaW5mby0+cG9ydCk7CiAJCWlmICghcmMpIHsKIAkJCS8qIHdlIGZhaWxlZCB0cmFuc2xhdGluZyBhZGRyZXNzICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCBhN2RlNWU5Li41NzhkODhjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCW11dGV4X2luaXQoJnBDaWZzRmlsZS0+bG9ja19tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBDaWZzRmlsZS0+bGxpc3QpOwogCWF0b21pY19zZXQoJnBDaWZzRmlsZS0+Y291bnQsIDEpOwotCXNsb3dfd29ya19pbml0KCZwQ2lmc0ZpbGUtPm9wbG9ja19icmVhaywgJmNpZnNfb3Bsb2NrX2JyZWFrX29wcyk7CisJSU5JVF9XT1JLKCZwQ2lmc0ZpbGUtPm9wbG9ja19icmVhaywgY2lmc19vcGxvY2tfYnJlYWspOwogCiAJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZjaWZzX3NiLT50Y29uLT5vcGVuRmlsZUxpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5jCmluZGV4IDNhZDdmNDMuLjBlYjg3MDIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuYworKysgYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmMKQEAgLTQsNiArNCw4IEBACiAgKiAgIENvcHlyaWdodCAoYykgMjAwNyBJZ29yIE1hbW1lZG92CiAgKiAgIEF1dGhvcihzKTogSWdvciBNYW1tZWRvdiAobmlhbGxhaW5AZ21haWwuY29tKQogICogICAgICAgICAgICAgIFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICogICAgICAgICAgICAgIFdhbmcgTGVpICh3YW5nODQwOTI1QGdtYWlsLmNvbSkKKyAqCQlEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQogICoKICAqICAgQ29udGFpbnMgdGhlIENJRlMgREZTIHVwY2FsbCByb3V0aW5lcyB1c2VkIGZvciBob3N0bmFtZSB0bwogICogICBJUCBhZGRyZXNzIHRyYW5zbGF0aW9uLgpAQCAtMjQsMjE0ICsyNiw3MyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva2V5Y3RsLmg+Ci0jaW5jbHVkZSA8bGludXgva2V5LXR5cGUuaD4KLSNpbmNsdWRlIDxrZXlzL3VzZXItdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Ruc19yZXNvbHZlci5oPgogI2luY2x1ZGUgImRuc19yZXNvbHZlLmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJjaWZzX2RlYnVnLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3JlZCAqZG5zX3Jlc29sdmVyX2NhY2hlOwotCi0vKiBDaGVja3MgaWYgc3VwcGxpZWQgbmFtZSBpcyBJUCBhZGRyZXNzCi0gKiByZXR1cm5zOgotICogCQkxIC0gbmFtZSBpcyBJUAotICogCQkwIC0gbmFtZSBpcyBub3QgSVAKLSAqLwotc3RhdGljIGludAotaXNfaXAoY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKLQotCXJldHVybiBjaWZzX2NvbnZlcnRfYWRkcmVzcygoc3RydWN0IHNvY2thZGRyICopJnNzLCBuYW1lKTsKLX0KLQotc3RhdGljIGludAotZG5zX3Jlc29sdmVyX2luc3RhbnRpYXRlKHN0cnVjdCBrZXkgKmtleSwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJc2l6ZV90IGRhdGFsZW4pCi17Ci0JaW50IHJjID0gMDsKLQljaGFyICppcDsKLQotCWlwID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoaXAsIGRhdGEsIGRhdGFsZW4pOwotCWlwW2RhdGFsZW5dID0gJ1wwJzsKLQotCS8qIG1ha2Ugc3VyZSB0aGlzIGxvb2tzIGxpa2UgYW4gYWRkcmVzcyAqLwotCWlmICghaXNfaXAoaXApKSB7Ci0JCWtmcmVlKGlwKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Ja2V5LT50eXBlX2RhdGEueFswXSA9IGRhdGFsZW47Ci0Ja2V5LT5wYXlsb2FkLmRhdGEgPSBpcDsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQKLWRuc19yZXNvbHZlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKLXsKLQlrZnJlZShrZXktPnBheWxvYWQuZGF0YSk7Ci19Ci0KLXN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9kbnNfcmVzb2x2ZXIgPSB7Ci0JLm5hbWUgICAgICAgID0gImRuc19yZXNvbHZlciIsCi0JLmRlZl9kYXRhbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKLQkuZGVzY3JpYmUgICAgPSB1c2VyX2Rlc2NyaWJlLAotCS5pbnN0YW50aWF0ZSA9IGRuc19yZXNvbHZlcl9pbnN0YW50aWF0ZSwKLQkuZGVzdHJveSAgICAgPSBkbnNfcmVzb2x2ZXJfZGVzdHJveSwKLQkubWF0Y2ggICAgICAgPSB1c2VyX21hdGNoLAotfTsKLQotLyogUmVzb2x2ZXMgc2VydmVyIG5hbWUgdG8gaXAgYWRkcmVzcy4KLSAqIGlucHV0OgotICogCXVuYyAtIHNlcnZlciBVTkMKLSAqIG91dHB1dDoKLSAqIAkqaXBfYWRkciAtIHBvaW50ZXIgdG8gc2VydmVyIGlwLCBjYWxsZXIgcmVzcG9uY2libGUgZm9yIGZyZWVpbmcgaXQuCi0gKiByZXR1cm4gMCBvbiBzdWNjZXNzCisvKioKKyAqIGRuc19yZXNvbHZlX3NlcnZlcl9uYW1lX3RvX2lwIC0gUmVzb2x2ZSBVTkMgc2VydmVyIG5hbWUgdG8gaXAgYWRkcmVzcy4KKyAqIEB1bmM6IFVOQyBwYXRoIHNwZWNpZnlpbmcgdGhlIHNlcnZlcgorICogQGlwX2FkZHI6IFdoZXJlIHRvIHJldHVybiB0aGUgSVAgYWRkcmVzcy4KKyAqCisgKiBUaGUgSVAgYWRkcmVzcyB3aWxsIGJlIHJldHVybmVkIGluIHN0cmluZyBmb3JtLCBhbmQgdGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgaXQuCisgKgorICogUmV0dXJucyBsZW5ndGggb2YgcmVzdWx0IG9uIHN1Y2Nlc3MsIC12ZSBvbiBlcnJvci4KICAqLwogaW50CiBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcChjb25zdCBjaGFyICp1bmMsIGNoYXIgKippcF9hZGRyKQogewotCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOwotCWludCByYyA9IC1FQUdBSU47Ci0Jc3RydWN0IGtleSAqcmtleSA9IEVSUl9QVFIoLUVBR0FJTik7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3M7CisJY29uc3QgY2hhciAqaG9zdG5hbWUsICpzZXA7CiAJY2hhciAqbmFtZTsKLQljaGFyICpkYXRhID0gTlVMTDsKLQlpbnQgbGVuOworCWludCBsZW4sIHJjOwogCiAJaWYgKCFpcF9hZGRyIHx8ICF1bmMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogc2VhcmNoIGZvciBzZXJ2ZXIgbmFtZSBkZWxpbWl0ZXIgKi8KIAlsZW4gPSBzdHJsZW4odW5jKTsKIAlpZiAobGVuIDwgMykgewogCQljRllJKDEsICIlczogdW5jIGlzIHRvbyBzaG9ydDogJXMiLCBfX2Z1bmNfXywgdW5jKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJLyogRGlzY291bnQgbGVhZGluZyBzbGFzaGVzIGZvciBjaWZzICovCiAJbGVuIC09IDI7Ci0JbmFtZSA9IG1lbWNocih1bmMrMiwgJ1xcJywgbGVuKTsKLQlpZiAoIW5hbWUpIHsKKwlob3N0bmFtZSA9IHVuYyArIDI7CisKKwkvKiBTZWFyY2ggZm9yIHNlcnZlciBuYW1lIGRlbGltaXRlciAqLworCXNlcCA9IG1lbWNocihob3N0bmFtZSwgJ1xcJywgbGVuKTsKKwlpZiAoc2VwKQorCQlsZW4gPSBzZXAgLSB1bmM7CisJZWxzZQogCQljRllJKDEsICIlczogcHJvYmFibHkgc2VydmVyIG5hbWUgaXMgd2hvbGUgdW5jOiAlcyIsCi0JCQkJCV9fZnVuY19fLCB1bmMpOwotCX0gZWxzZSB7Ci0JCWxlbiA9IChuYW1lIC0gdW5jKSAtIDIvKiBsZWFkaW5nIC8vICovOwotCX0KKwkJICAgICBfX2Z1bmNfXywgdW5jKTsKIAotCW5hbWUgPSBrbWFsbG9jKGxlbisxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5hbWUpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlyZXR1cm4gcmM7Ci0JfQotCW1lbWNweShuYW1lLCB1bmMrMiwgbGVuKTsKLQluYW1lW2xlbl0gPSAwOworCS8qIFRyeSB0byBpbnRlcnByZXQgaG9zdG5hbWUgYXMgYW4gSVB2NCBvciBJUHY2IGFkZHJlc3MgKi8KKwlyYyA9IGNpZnNfY29udmVydF9hZGRyZXNzKChzdHJ1Y3Qgc29ja2FkZHIgKikmc3MsIGhvc3RuYW1lLCBsZW4pOworCWlmIChyYyA+IDApCisJCWdvdG8gbmFtZV9pc19JUF9hZGRyZXNzOwogCi0JaWYgKGlzX2lwKG5hbWUpKSB7Ci0JCWNGWUkoMSwgIiVzOiBpdCBpcyBJUCwgc2tpcHBpbmcgZG5zIHVwY2FsbDogJXMiLAotCQkJCQlfX2Z1bmNfXywgbmFtZSk7Ci0JCWRhdGEgPSBuYW1lOwotCQlnb3RvIHNraXBfdXBjYWxsOwotCX0KLQotCXNhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhkbnNfcmVzb2x2ZXJfY2FjaGUpOwotCXJrZXkgPSByZXF1ZXN0X2tleSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyLCBuYW1lLCAiIik7Ci0JcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOwotCWlmICghSVNfRVJSKHJrZXkpKSB7Ci0JCWlmICghKHJrZXktPnBlcm0gJiBLRVlfVVNSX1ZJRVcpKSB7Ci0JCQlkb3duX3JlYWQoJnJrZXktPnNlbSk7Ci0JCQlya2V5LT5wZXJtIHw9IEtFWV9VU1JfVklFVzsKLQkJCXVwX3JlYWQoJnJrZXktPnNlbSk7Ci0JCX0KLQkJbGVuID0gcmtleS0+dHlwZV9kYXRhLnhbMF07Ci0JCWRhdGEgPSBya2V5LT5wYXlsb2FkLmRhdGE7Ci0JfSBlbHNlIHsKLQkJY0VSUk9SKDEsICIlczogdW5hYmxlIHRvIHJlc29sdmU6ICVzIiwgX19mdW5jX18sIG5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLXNraXBfdXBjYWxsOgotCWlmIChkYXRhKSB7Ci0JCSppcF9hZGRyID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCppcF9hZGRyKSB7Ci0JCQltZW1jcHkoKmlwX2FkZHIsIGRhdGEsIGxlbiArIDEpOwotCQkJaWYgKCFJU19FUlIocmtleSkpCi0JCQkJY0ZZSSgxLCAiJXM6IHJlc29sdmVkOiAlcyB0byAlcyIsIF9fZnVuY19fLAotCQkJCQkJCW5hbWUsCi0JCQkJCQkJKmlwX2FkZHIKLQkJCQkJKTsKLQkJCXJjID0gMDsKLQkJfSBlbHNlIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJfQotCQlpZiAoIUlTX0VSUihya2V5KSkKLQkJCWtleV9wdXQocmtleSk7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUobmFtZSk7CisJLyogUGVyZm9ybSB0aGUgdXBjYWxsICovCisJcmMgPSBkbnNfcXVlcnkoTlVMTCwgaG9zdG5hbWUsIGxlbiwgTlVMTCwgaXBfYWRkciwgTlVMTCk7CisJaWYgKHJjIDwgMCkKKwkJY0VSUk9SKDEsICIlczogdW5hYmxlIHRvIHJlc29sdmU6ICUqLipzIiwKKwkJICAgICAgIF9fZnVuY19fLCBsZW4sIGxlbiwgaG9zdG5hbWUpOworCWVsc2UKKwkJY0ZZSSgxLCAiJXM6IHJlc29sdmVkOiAlKi4qcyB0byAlcyIsCisJCSAgICAgX19mdW5jX18sIGxlbiwgbGVuLCBob3N0bmFtZSwgKmlwX2FkZHIpOwogCXJldHVybiByYzsKLX0KIAotaW50IF9faW5pdCBjaWZzX2luaXRfZG5zX3Jlc29sdmVyKHZvaWQpCi17Ci0Jc3RydWN0IGNyZWQgKmNyZWQ7Ci0Jc3RydWN0IGtleSAqa2V5cmluZzsKLQlpbnQgcmV0OwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJSZWdpc3RlcmluZyB0aGUgJXMga2V5IHR5cGVcbiIsCi0JICAgICAgIGtleV90eXBlX2Ruc19yZXNvbHZlci5uYW1lKTsKLQotCS8qIGNyZWF0ZSBhbiBvdmVycmlkZSBjcmVkZW50aWFsIHNldCB3aXRoIGEgc3BlY2lhbCB0aHJlYWQga2V5cmluZyBpbgotCSAqIHdoaWNoIEROUyByZXF1ZXN0cyBhcmUgY2FjaGVkCi0JICoKLQkgKiB0aGlzIGlzIHVzZWQgdG8gcHJldmVudCBtYWxpY2lvdXMgcmVkaXJlY3Rpb25zIGZyb20gYmVpbmcgaW5zdGFsbGVkCi0JICogd2l0aCBhZGRfa2V5KCkuCi0JICovCi0JY3JlZCA9IHByZXBhcmVfa2VybmVsX2NyZWQoTlVMTCk7Ci0JaWYgKCFjcmVkKQorbmFtZV9pc19JUF9hZGRyZXNzOgorCW5hbWUgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghbmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQlrZXlyaW5nID0ga2V5X2FsbG9jKCZrZXlfdHlwZV9rZXlyaW5nLCAiLmRuc19yZXNvbHZlciIsIDAsIDAsIGNyZWQsCi0JCQkgICAgKEtFWV9QT1NfQUxMICYgfktFWV9QT1NfU0VUQVRUUikgfAotCQkJICAgIEtFWV9VU1JfVklFVyB8IEtFWV9VU1JfUkVBRCwKLQkJCSAgICBLRVlfQUxMT0NfTk9UX0lOX1FVT1RBKTsKLQlpZiAoSVNfRVJSKGtleXJpbmcpKSB7Ci0JCXJldCA9IFBUUl9FUlIoa2V5cmluZyk7Ci0JCWdvdG8gZmFpbGVkX3B1dF9jcmVkOwotCX0KLQotCXJldCA9IGtleV9pbnN0YW50aWF0ZV9hbmRfbGluayhrZXlyaW5nLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBmYWlsZWRfcHV0X2tleTsKLQotCXJldCA9IHJlZ2lzdGVyX2tleV90eXBlKCZrZXlfdHlwZV9kbnNfcmVzb2x2ZXIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZhaWxlZF9wdXRfa2V5OwotCi0JLyogaW5zdHJ1Y3QgcmVxdWVzdF9rZXkoKSB0byB1c2UgdGhpcyBzcGVjaWFsIGtleXJpbmcgYXMgYSBjYWNoZSBmb3IKLQkgKiB0aGUgcmVzdWx0cyBpdCBsb29rcyB1cCAqLwotCWNyZWQtPnRocmVhZF9rZXlyaW5nID0ga2V5cmluZzsKLQljcmVkLT5qaXRfa2V5cmluZyA9IEtFWV9SRVFLRVlfREVGTF9USFJFQURfS0VZUklORzsKLQlkbnNfcmVzb2x2ZXJfY2FjaGUgPSBjcmVkOworCW1lbWNweShuYW1lLCBob3N0bmFtZSwgbGVuKTsKKwluYW1lW2xlbl0gPSAwOworCWNGWUkoMSwgIiVzOiB1bmMgaXMgSVAsIHNraXBwaW5nIGRucyB1cGNhbGw6ICVzIiwgX19mdW5jX18sIG5hbWUpOworCSppcF9hZGRyID0gbmFtZTsKIAlyZXR1cm4gMDsKLQotZmFpbGVkX3B1dF9rZXk6Ci0Ja2V5X3B1dChrZXlyaW5nKTsKLWZhaWxlZF9wdXRfY3JlZDoKLQlwdXRfY3JlZChjcmVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGNpZnNfZXhpdF9kbnNfcmVzb2x2ZXIodm9pZCkKLXsKLQlrZXlfcmV2b2tlKGRuc19yZXNvbHZlcl9jYWNoZS0+dGhyZWFkX2tleXJpbmcpOwotCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX2Ruc19yZXNvbHZlcik7Ci0JcHV0X2NyZWQoZG5zX3Jlc29sdmVyX2NhY2hlKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIlVucmVnaXN0ZXJlZCAlcyBrZXkgdHlwZVxuIiwKLQkgICAgICAga2V5X3R5cGVfZG5zX3Jlc29sdmVyLm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kbnNfcmVzb2x2ZS5oIGIvZnMvY2lmcy9kbnNfcmVzb2x2ZS5oCmluZGV4IDVkN2YyOTEuLmQzZjVkMjcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZG5zX3Jlc29sdmUuaAorKysgYi9mcy9jaWZzL2Ruc19yZXNvbHZlLmgKQEAgLTI0LDggKzI0LDYgQEAKICNkZWZpbmUgX0ROU19SRVNPTFZFX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLWV4dGVybiBpbnQgX19pbml0IGNpZnNfaW5pdF9kbnNfcmVzb2x2ZXIodm9pZCk7Ci1leHRlcm4gdm9pZCBjaWZzX2V4aXRfZG5zX3Jlc29sdmVyKHZvaWQpOwogZXh0ZXJuIGludCBkbnNfcmVzb2x2ZV9zZXJ2ZXJfbmFtZV90b19pcChjb25zdCBjaGFyICp1bmMsIGNoYXIgKippcF9hZGRyKTsKICNlbmRpZiAvKiBLRVJORUwgKi8KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBmYTA0YTAwZC4uZGIxMWZkZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTIzMDcsOCArMjMwNyw3IEBACiAJCWNpZnNfZnNjYWNoZV9pbnZhbGlkYXRlX3BhZ2UocGFnZSwgJmNpZnNpLT52ZnNfaW5vZGUpOwogfQogCi1zdGF0aWMgdm9pZAotY2lmc19vcGxvY2tfYnJlYWsoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3ZvaWQgY2lmc19vcGxvY2tfYnJlYWsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCiAJCQkJCQkgIG9wbG9ja19icmVhayk7CkBAIC0yMzQ1LDMzICsyMzQ0LDMwIEBACiAJCQkJIExPQ0tJTkdfQU5EWF9PUExPQ0tfUkVMRUFTRSwgZmFsc2UpOwogCQljRllJKDEsICJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpOwogCX0KKworCS8qCisJICogV2UgbWlnaHQgaGF2ZSBraWNrZWQgaW4gYmVmb3JlIGlzX3ZhbGlkX29wbG9ja19icmVhaygpCisJICogZmluaXNoZWQgZ3JhYmJpbmcgcmVmZXJlbmNlIGZvciB1cy4gIE1ha2Ugc3VyZSBpdCdzIGRvbmUgYnkKKwkgKiB3YWl0aW5nIGZvciBHbG9iYWxTTVNTZXNsb2NrLgorCSAqLworCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisKKwljaWZzX29wbG9ja19icmVha19wdXQoY2ZpbGUpOwogfQogCi1zdGF0aWMgaW50Ci1jaWZzX29wbG9ja19icmVha19nZXQoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3ZvaWQgY2lmc19vcGxvY2tfYnJlYWtfZ2V0KHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlKQogewotCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCi0JCQkJCQkgIG9wbG9ja19icmVhayk7CiAJbW50Z2V0KGNmaWxlLT5tbnQpOwogCWNpZnNGaWxlSW5mb19nZXQoY2ZpbGUpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotY2lmc19vcGxvY2tfYnJlYWtfcHV0KHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit2b2lkIGNpZnNfb3Bsb2NrX2JyZWFrX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSkKIHsKLQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAotCQkJCQkJICBvcGxvY2tfYnJlYWspOwogCW1udHB1dChjZmlsZS0+bW50KTsKIAljaWZzRmlsZUluZm9fcHV0KGNmaWxlKTsKIH0KIAotY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzID0gewotCS5nZXRfcmVmCT0gY2lmc19vcGxvY2tfYnJlYWtfZ2V0LAotCS5wdXRfcmVmCT0gY2lmc19vcGxvY2tfYnJlYWtfcHV0LAotCS5leGVjdXRlCT0gY2lmc19vcGxvY2tfYnJlYWssCi19OwotCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGNpZnNfYWRkcl9vcHMgPSB7CiAJLnJlYWRwYWdlID0gY2lmc19yZWFkcGFnZSwKIAkucmVhZHBhZ2VzID0gY2lmc19yZWFkcGFnZXMsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggYTE1YjNhOS4uNGJjNDdlNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNzMyLDE1ICs3MzIsOSBAQAogCWlmICgoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgIT0gKGZhdHRyLT5jZl9tb2RlICYgU19JRk1UKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIHVoIG9oIC0tIGl0J3MgYSBkaXJlY3RvcnkuIFdlIGNhbid0IHVzZSBpdCBzaW5jZSBoYXJkbGlua2VkIGRpcnMgYXJlCi0JICogdmVyYm90ZW4uIERpc2FibGUgc2VydmVyaW5vIGFuZCByZXR1cm4gaXQgYXMgaWYgaXQgd2VyZSBmb3VuZCwgdGhlCi0JICogY2FsbGVyIGNhbiBkaXNjYXJkIGl0LCBnZW5lcmF0ZSBhIHVuaXF1ZWlkIGFuZCByZXRyeSB0aGUgZmluZAotCSAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmICFsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKSB7CisJLyogaWYgaXQncyBub3QgYSBkaXJlY3Rvcnkgb3IgaGFzIG5vIGRlbnRyaWVzLCB0aGVuIGZsYWcgaXQgKi8KKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAhbGlzdF9lbXB0eSgmaW5vZGUtPmlfZGVudHJ5KSkKIAkJZmF0dHItPmNmX2ZsYWdzIHw9IENJRlNfRkFUVFJfSU5PX0NPTExJU0lPTjsKLQkJY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oQ0lGU19TQihpbm9kZS0+aV9zYikpOwotCX0KIAogCXJldHVybiAxOwogfQpAQCAtNzU0LDYgKzc0OCwyNyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogd2FsayBkZW50cnkgbGlzdCBmb3IgYW4gaW5vZGUgYW5kIHJlcG9ydCB3aGV0aGVyIGl0IGhhcyBhbGlhc2VzIHRoYXQKKyAqIGFyZSBoYXNoZWQuIFdlIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiBhIGRpcmVjdG9yeSBpbm9kZSBjYW4gYWN0dWFsbHkKKyAqIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBib29sCitpbm9kZV9oYXNfaGFzaGVkX2RlbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZW50cnksICZpbm9kZS0+aV9kZW50cnksIGRfYWxpYXMpIHsKKwkJaWYgKCFkX3VuaGFzaGVkKGRlbnRyeSkgfHwgSVNfUk9PVChkZW50cnkpKSB7CisJCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIEdpdmVuIGZhdHRycywgZ2V0IGEgY29ycmVzcG9uZGluZyBpbm9kZSAqLwogc3RydWN0IGlub2RlICoKIGNpZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2lmc19mYXR0ciAqZmF0dHIpCkBAIC03NjksMTIgKzc4NCwxNiBAQAogCiAJaW5vZGUgPSBpZ2V0NV9sb2NrZWQoc2IsIGhhc2gsIGNpZnNfZmluZF9pbm9kZSwgY2lmc19pbml0X2lub2RlLCBmYXR0cik7CiAJaWYgKGlub2RlKSB7Ci0JCS8qIHdhcyB0aGVyZSBhIHByb2JsZW1hdGljIGlub2RlIG51bWJlciBjb2xsaXNpb24/ICovCisJCS8qIHdhcyB0aGVyZSBhIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlub2RlIGNvbGxpc2lvbj8gKi8KIAkJaWYgKGZhdHRyLT5jZl9mbGFncyAmIENJRlNfRkFUVFJfSU5PX0NPTExJU0lPTikgewotCQkJaXB1dChpbm9kZSk7Ci0JCQlmYXR0ci0+Y2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOwogCQkJZmF0dHItPmNmX2ZsYWdzICY9IH5DSUZTX0ZBVFRSX0lOT19DT0xMSVNJT047Ci0JCQlnb3RvIHJldHJ5X2lnZXQ1X2xvY2tlZDsKKworCQkJaWYgKGlub2RlX2hhc19oYXNoZWRfZGVudHJpZXMoaW5vZGUpKSB7CisJCQkJY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oQ0lGU19TQihzYikpOworCQkJCWlwdXQoaW5vZGUpOworCQkJCWZhdHRyLT5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CisJCQkJZ290byByZXRyeV9pZ2V0NV9sb2NrZWQ7CisJCQl9CiAJCX0KIAogCQljaWZzX2ZhdHRyX3RvX2lub2RlKGlub2RlLCBmYXR0cik7CkBAIC0xNjc5LDI2ICsxNjk4LDE2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNpZnNfdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KQorc3RhdGljIHZvaWQgY2lmc19zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpCiB7CiAJbG9mZl90IG9sZHNpemU7Ci0JaW50IGVycjsKIAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JZXJyID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0KTsKLQlpZiAoZXJyKSB7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJb2xkc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwogCXRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgb2xkc2l6ZSwgb2Zmc2V0KTsKLQlpZiAoaW5vZGUtPmlfb3AtPnRydW5jYXRlKQotCQlpbm9kZS0+aV9vcC0+dHJ1bmNhdGUoaW5vZGUpOwotb3V0OgotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE3NzEsNyArMTc4MCw3IEBACiAKIAlpZiAocmMgPT0gMCkgewogCQljaWZzSW5vZGUtPnNlcnZlcl9lb2YgPSBhdHRycy0+aWFfc2l6ZTsKLQkJcmMgPSBjaWZzX3ZtdHJ1bmNhdGUoaW5vZGUsIGF0dHJzLT5pYV9zaXplKTsKKwkJY2lmc19zZXRzaXplKGlub2RlLCBhdHRycy0+aWFfc2l6ZSk7CiAJCWNpZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKIAl9CiAKQEAgLTE3OTYsMTQgKzE4MDUsMTIgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JaWYgKChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkgPT0gMCkgewotCQkvKiBjaGVjayBpZiB3ZSBoYXZlIHBlcm1pc3Npb24gdG8gY2hhbmdlIGF0dHJzICovCi0JCXJjID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRycyk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dDsKLQkJZWxzZQotCQkJcmMgPSAwOwotCX0KKwlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PX1BFUk0pCisJCWF0dHJzLT5pYV92YWxpZCB8PSBBVFRSX0ZPUkNFOworCisJcmMgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHJzKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKIAogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGlyZW50cnkpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkgewpAQCAtMTg4OSwxOCArMTg5NiwyNCBAQAogCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAJfQogCi0JaWYgKCFyYykgewotCQlyYyA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHJzKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCi0JCS8qIGZvcmNlIHJldmFsaWRhdGUgd2hlbiBhbnkgb2YgdGhlc2UgdGltZXMgYXJlIHNldCBzaW5jZSBzb21lCi0JCSAgIG9mIHRoZSBmcyB0eXBlcyAoZWcgZXh0MywgZmF0KSBkbyBub3QgaGF2ZSBmaW5lIGVub3VnaAotCQkgICB0aW1lIGdyYW51bGFyaXR5IHRvIG1hdGNoIHByb3RvY29sLCBhbmQgd2UgZG8gbm90IGhhdmUgYQotCQkgICBhIHdheSAoeWV0KSB0byBxdWVyeSB0aGUgc2VydmVyIGZzJ3MgdGltZSBncmFudWxhcml0eSAoYW5kCi0JCSAgIHdoZXRoZXIgaXQgcm91bmRzIHRpbWVzIGRvd24pLgotCQkqLwotCQlpZiAoIXJjICYmIChhdHRycy0+aWFfdmFsaWQgJiAoQVRUUl9NVElNRSB8IEFUVFJfQ1RJTUUpKSkKLQkJCWNpZnNJbm9kZS0+dGltZSA9IDA7Ci0JfQorCWlmICgoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRycy0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHJzLT5pYV9zaXplKTsKKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cnMpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJLyogZm9yY2UgcmV2YWxpZGF0ZSB3aGVuIGFueSBvZiB0aGVzZSB0aW1lcyBhcmUgc2V0IHNpbmNlIHNvbWUKKwkgICBvZiB0aGUgZnMgdHlwZXMgKGVnIGV4dDMsIGZhdCkgZG8gbm90IGhhdmUgZmluZSBlbm91Z2gKKwkgICB0aW1lIGdyYW51bGFyaXR5IHRvIG1hdGNoIHByb3RvY29sLCBhbmQgd2UgZG8gbm90IGhhdmUgYQorCSAgIGEgd2F5ICh5ZXQpIHRvIHF1ZXJ5IHRoZSBzZXJ2ZXIgZnMncyB0aW1lIGdyYW51bGFyaXR5IChhbmQKKwkgICB3aGV0aGVyIGl0IHJvdW5kcyB0aW1lcyBkb3duKS4KKwkqLworCWlmIChhdHRycy0+aWFfdmFsaWQgJiAoQVRUUl9NVElNRSB8IEFUVFJfQ1RJTUUpKQorCQljaWZzSW5vZGUtPnRpbWUgPSAwOwogb3V0OgogCWtmcmVlKGFyZ3MpOwogCWtmcmVlKGZ1bGxfcGF0aCk7CkBAIC0xOTI1LDE0ICsxOTM4LDEzIEBACiAJY0ZZSSgxLCAic2V0YXR0ciBvbiBmaWxlICVzIGF0dHJzLT5pYXZhbGlkIDB4JXgiLAogCQkgZGlyZW50cnktPmRfbmFtZS5uYW1lLCBhdHRycy0+aWFfdmFsaWQpOwogCi0JaWYgKChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkgPT0gMCkgewotCQkvKiBjaGVjayBpZiB3ZSBoYXZlIHBlcm1pc3Npb24gdG8gY2hhbmdlIGF0dHJzICovCi0JCXJjID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRycyk7Ci0JCWlmIChyYyA8IDApIHsKLQkJCUZyZWVYaWQoeGlkKTsKLQkJCXJldHVybiByYzsKLQkJfSBlbHNlCi0JCQlyYyA9IDA7CisJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19QRVJNKQorCQlhdHRycy0+aWFfdmFsaWQgfD0gQVRUUl9GT1JDRTsKKworCXJjID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRycyk7CisJaWYgKHJjIDwgMCkgeworCQlGcmVlWGlkKHhpZCk7CisJCXJldHVybiByYzsKIAl9CiAKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKQEAgLTIwNDAsOCArMjA1MiwxNyBAQAogCiAJLyogZG8gbm90IG5lZWQgbG9jYWwgY2hlY2sgdG8gaW5vZGVfY2hlY2tfb2sgc2luY2UgdGhlIHNlcnZlciBkb2VzCiAJICAgdGhhdCAqLwotCWlmICghcmMpCi0JCXJjID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cnMpOworCWlmIChyYykKKwkJZ290byBjaWZzX3NldGF0dHJfZXhpdDsKKworCWlmICgoYXR0cnMtPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRycy0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHJzLT5pYV9zaXplKTsKKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cnMpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOworCiBjaWZzX3NldGF0dHJfZXhpdDoKIAlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggMTM5NGFhMy4uM2NjYWRjMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTQ5OCw3ICs0OTgsNiBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqbmV0ZmlsZTsKLQlpbnQgcmM7CiAKIAljRllJKDEsICJDaGVja2luZyBmb3Igb3Bsb2NrIGJyZWFrIG9yIGRub3RpZnkgcmVzcG9uc2UiKTsKIAlpZiAoKHBTTUItPmhkci5Db21tYW5kID09IFNNQl9DT01fTlRfVFJBTlNBQ1QpICYmCkBAIC01ODMsMTMgKzU4MiwxOCBAQAogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJaWYgKHBTTUItPk9wbG9ja0xldmVsID09IDApCiAJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCXJjID0gc2xvd193b3JrX2VucXVldWUoJm5ldGZpbGUtPm9wbG9ja19icmVhayk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCWNFUlJPUigxLCAiZmFpbGVkIHRvIGVucXVldWUgb3Bsb2NrICIKLQkJCQkJCSAgICJicmVhazogJWRcbiIsIHJjKTsKLQkJCQl9IGVsc2UgewotCQkJCQluZXRmaWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gZmFsc2U7Ci0JCQkJfQorCisJCQkJLyoKKwkJCQkgKiBjaWZzX29wbG9ja19icmVha19wdXQoKSBjYW4ndCBiZSBjYWxsZWQKKwkJCQkgKiBmcm9tIGhlcmUuICBHZXQgcmVmZXJlbmNlIGFmdGVyIHF1ZXVlaW5nCisJCQkJICogc3VjY2VlZGVkLiAgY2lmc19vcGxvY2tfYnJlYWsoKSB3aWxsCisJCQkJICogc3luY2hyb25pemUgdXNpbmcgR2xvYmFsU01TU2VzbG9jay4KKwkJCQkgKi8KKwkJCQlpZiAocXVldWVfd29yayhzeXN0ZW1fbnJ0X3dxLAorCQkJCQkgICAgICAgJm5ldGZpbGUtPm9wbG9ja19icmVhaykpCisJCQkJCWNpZnNfb3Bsb2NrX2JyZWFrX2dldChuZXRmaWxlKTsKKwkJCQluZXRmaWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkID0gZmFsc2U7CisKIAkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbmV0bWlzYy5jIGIvZnMvY2lmcy9uZXRtaXNjLmMKaW5kZXggYzY3MjFlZS4uZjk3ODUxMSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9uZXRtaXNjLmMKKysrIGIvZnMvY2lmcy9uZXRtaXNjLmMKQEAgLTE0MCwxNyArMTQwLDE4IEBACiAgKiBSZXR1cm5zIDAgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotY2lmc19pbmV0X3B0b24oY29uc3QgaW50IGFkZHJlc3NfZmFtaWx5LCBjb25zdCBjaGFyICpjcCwgdm9pZCAqZHN0KQorY2lmc19pbmV0X3B0b24oY29uc3QgaW50IGFkZHJlc3NfZmFtaWx5LCBjb25zdCBjaGFyICpjcCwgaW50IGxlbiwgdm9pZCAqZHN0KQogewogCWludCByZXQgPSAwOwogCiAJLyogY2FsY3VsYXRlIGxlbmd0aCBieSBmaW5kaW5nIGZpcnN0IHNsYXNoIG9yIE5VTEwgKi8KIAlpZiAoYWRkcmVzc19mYW1pbHkgPT0gQUZfSU5FVCkKLQkJcmV0ID0gaW40X3B0b24oY3AsIC0xIC8qIGxlbiAqLywgZHN0LCAnXFwnLCBOVUxMKTsKKwkJcmV0ID0gaW40X3B0b24oY3AsIGxlbiwgZHN0LCAnXFwnLCBOVUxMKTsKIAllbHNlIGlmIChhZGRyZXNzX2ZhbWlseSA9PSBBRl9JTkVUNikKLQkJcmV0ID0gaW42X3B0b24oY3AsIC0xIC8qIGxlbiAqLywgZHN0ICwgJ1xcJywgTlVMTCk7CisJCXJldCA9IGluNl9wdG9uKGNwLCBsZW4sIGRzdCAsICdcXCcsIE5VTEwpOwogCi0JY0ZZSShEQkcyLCAiYWRkcmVzcyBjb252ZXJzaW9uIHJldHVybmVkICVkIGZvciAlcyIsIHJldCwgY3ApOworCWNGWUkoREJHMiwgImFkZHJlc3MgY29udmVyc2lvbiByZXR1cm5lZCAlZCBmb3IgJSouKnMiLAorCSAgICAgcmV0LCBsZW4sIGxlbiwgY3ApOwogCWlmIChyZXQgPiAwKQogCQlyZXQgPSAxOwogCXJldHVybiByZXQ7CkBAIC0xNjUsMzcgKzE2NiwzOSBAQAogICogUmV0dXJucyAwIG9uIGZhaWx1cmUuCiAgKi8KIGludAotY2lmc19jb252ZXJ0X2FkZHJlc3Moc3RydWN0IHNvY2thZGRyICpkc3QsIGNoYXIgKnNyYykKK2NpZnNfY29udmVydF9hZGRyZXNzKHN0cnVjdCBzb2NrYWRkciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBsZW4pCiB7Ci0JaW50IHJjOwotCWNoYXIgKnBjdCwgKmVuZHA7CisJaW50IHJjLCBhbGVuLCBzbGVuOworCWNvbnN0IGNoYXIgKnBjdDsKKwljaGFyICplbmRwLCBzY29wZV9pZFsxM107CiAJc3RydWN0IHNvY2thZGRyX2luICpzNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZHN0OwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnM2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OwogCiAJLyogSVB2NCBhZGRyZXNzICovCi0JaWYgKGNpZnNfaW5ldF9wdG9uKEFGX0lORVQsIHNyYywgJnM0LT5zaW5fYWRkci5zX2FkZHIpKSB7CisJaWYgKGNpZnNfaW5ldF9wdG9uKEFGX0lORVQsIHNyYywgbGVuLCAmczQtPnNpbl9hZGRyLnNfYWRkcikpIHsKIAkJczQtPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCQlyZXR1cm4gMTsKIAl9CiAKLQkvKiB0ZW1wb3JhcmlseSB0ZXJtaW5hdGUgc3RyaW5nICovCi0JcGN0ID0gc3RyY2hyKHNyYywgJyUnKTsKLQlpZiAocGN0KQotCQkqcGN0ID0gJ1wwJzsKKwkvKiBhdHRlbXB0IHRvIGV4Y2x1ZGUgdGhlIHNjb3BlIElEIGZyb20gdGhlIGFkZHJlc3MgcGFydCAqLworCXBjdCA9IG1lbWNocihzcmMsICclJywgbGVuKTsKKwlhbGVuID0gcGN0ID8gcGN0IC0gc3JjIDogbGVuOwogCi0JcmMgPSBjaWZzX2luZXRfcHRvbihBRl9JTkVUNiwgc3JjLCAmczYtPnNpbjZfYWRkci5zNl9hZGRyKTsKLQotCS8qIHJlcGFpciB0ZW1wIHRlcm1pbmF0aW9uIChpZiBhbnkpIGFuZCBtYWtlIHBjdCBwb2ludCB0byBzY29wZWlkICovCi0JaWYgKHBjdCkKLQkJKnBjdCsrID0gJyUnOwotCisJcmMgPSBjaWZzX2luZXRfcHRvbihBRl9JTkVUNiwgc3JjLCBhbGVuLCAmczYtPnNpbjZfYWRkci5zNl9hZGRyKTsKIAlpZiAoIXJjKQogCQlyZXR1cm4gcmM7CiAKIAlzNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAlpZiAocGN0KSB7CisJCS8qIGdyYWIgdGhlIHNjb3BlIElEICovCisJCXNsZW4gPSBsZW4gLSAoYWxlbiArIDEpOworCQlpZiAoc2xlbiA8PSAwIHx8IHNsZW4gPiAxMikKKwkJCXJldHVybiAwOworCQltZW1jcHkoc2NvcGVfaWQsIHBjdCArIDEsIHNsZW4pOworCQlzY29wZV9pZFtzbGVuXSA9ICdcMCc7CisKIAkJczYtPnNpbjZfc2NvcGVfaWQgPSAodTMyKSBzaW1wbGVfc3RydG91bChwY3QsICZlbmRwLCAwKTsKLQkJaWYgKCEqcGN0IHx8ICplbmRwKQorCQlpZiAoZW5kcCAhPSBzY29wZV9pZCArIHNsZW4pCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTIwMywxMCArMjA2LDEwIEBACiB9CiAKIGludAotY2lmc19maWxsX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqZHN0LCBjaGFyICpzcmMsCitjaWZzX2ZpbGxfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbiwKIAkJICAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IHBvcnQpCiB7Ci0JaWYgKCFjaWZzX2NvbnZlcnRfYWRkcmVzcyhkc3QsIHNyYykpCisJaWYgKCFjaWZzX2NvbnZlcnRfYWRkcmVzcyhkc3QsIHNyYywgbGVuKSkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7CmRpZmYgLS1naXQgYS9mcy9jb2RhL2lub2RlLmMgYi9mcy9jb2RhL2lub2RlLmMKaW5kZXggZDk3Zjk5My4uNjUyNmU2ZiAxMDA2NDQKLS0tIGEvZnMvY29kYS9pbm9kZS5jCisrKyBiL2ZzL2NvZGEvaW5vZGUuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgImNvZGFfaW50LmgiCiAKIC8qIFZGUyBzdXBlcl9ibG9jayBvcHMgKi8KLXN0YXRpYyB2b2lkIGNvZGFfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOworc3RhdGljIHZvaWQgY29kYV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBzdGF0aWMgdm9pZCBjb2RhX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgaW50IGNvZGFfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1Zik7CiAKQEAgLTkzLDcgKzkzLDcgQEAKIHsKIAkuYWxsb2NfaW5vZGUJPSBjb2RhX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gY29kYV9kZXN0cm95X2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGNvZGFfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gY29kYV9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gY29kYV9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBjb2RhX3N0YXRmcywKIAkucmVtb3VudF9mcwk9IGNvZGFfcmVtb3VudCwKQEAgLTIyNCw4ICsyMjQsMTAgQEAKIAlwcmludGsoIkNvZGE6IEJ5ZSBieWUuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgY29kYV9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgY29kYV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAljb2RhX2NhY2hlX2NsZWFyX2lub2RlKGlub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IDY2YjljZjcuLmRlODk2NDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQluYnl0ZXMgPSByZXEtPnVjX291dFNpemU7IC8qIGRvbid0IGhhdmUgbW9yZSBzcGFjZSEgKi8KIAl9CiAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihyZXEtPnVjX2RhdGEsIGJ1ZiwgbmJ5dGVzKSkgewotCQlyZXEtPnVjX2ZsYWdzIHw9IFJFUV9BQk9SVDsKKwkJcmVxLT51Y19mbGFncyB8PSBDT0RBX1JFUV9BQk9SVDsKIAkJd2FrZV91cCgmcmVxLT51Y19zbGVlcCk7CiAJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwpAQCAtMjU0LDggKzI1NCw4IEBACiAJICAgICAgICByZXR2YWwgPSAtRUZBVUxUOwogICAgICAgICAKIAkvKiBJZiByZXF1ZXN0IHdhcyBub3QgYSBzaWduYWwsIGVucXVldWUgYW5kIGRvbid0IGZyZWUgKi8KLQlpZiAoIShyZXEtPnVjX2ZsYWdzICYgUkVRX0FTWU5DKSkgewotCQlyZXEtPnVjX2ZsYWdzIHw9IFJFUV9SRUFEOworCWlmICghKHJlcS0+dWNfZmxhZ3MgJiBDT0RBX1JFUV9BU1lOQykpIHsKKwkJcmVxLT51Y19mbGFncyB8PSBDT0RBX1JFUV9SRUFEOwogCQlsaXN0X2FkZF90YWlsKCYocmVxLT51Y19jaGFpbiksICZ2Y3AtPnZjX3Byb2Nlc3NpbmcpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMTUsMTkgKzMxNSwxOSBAQAogCQlsaXN0X2RlbCgmcmVxLT51Y19jaGFpbik7CiAKIAkJLyogQXN5bmMgcmVxdWVzdHMgbmVlZCB0byBiZSBmcmVlZCBoZXJlICovCi0JCWlmIChyZXEtPnVjX2ZsYWdzICYgUkVRX0FTWU5DKSB7CisJCWlmIChyZXEtPnVjX2ZsYWdzICYgQ09EQV9SRVFfQVNZTkMpIHsKIAkJCUNPREFfRlJFRShyZXEtPnVjX2RhdGEsIHNpemVvZihzdHJ1Y3QgY29kYV9pbl9oZHIpKTsKIAkJCWtmcmVlKHJlcSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyZXEtPnVjX2ZsYWdzIHw9IFJFUV9BQk9SVDsKKwkJcmVxLT51Y19mbGFncyB8PSBDT0RBX1JFUV9BQk9SVDsKIAkJd2FrZV91cCgmcmVxLT51Y19zbGVlcCk7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmdmNwLT52Y19wcm9jZXNzaW5nLCB1Y19jaGFpbikgewogCQlsaXN0X2RlbCgmcmVxLT51Y19jaGFpbik7CiAKLQkJcmVxLT51Y19mbGFncyB8PSBSRVFfQUJPUlQ7CisJCXJlcS0+dWNfZmxhZ3MgfD0gQ09EQV9SRVFfQUJPUlQ7CiAJCXdha2VfdXAoJnJlcS0+dWNfc2xlZXApOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY29kYS91cGNhbGwuYyBiL2ZzL2NvZGEvdXBjYWxsLmMKaW5kZXggZjA5YzVlZC4uYjg4OTNhYiAxMDA2NDQKLS0tIGEvZnMvY29kYS91cGNhbGwuYworKysgYi9mcy9jb2RhL3VwY2FsbC5jCkBAIC02MDQsNyArNjA0LDcgQEAKIAkJCSAgICAgICAoKChyKS0+dWNfb3Bjb2RlICE9IENPREFfQ0xPU0UgJiYgXAogCQkJCSAociktPnVjX29wY29kZSAhPSBDT0RBX1NUT1JFICYmIFwKIAkJCQkgKHIpLT51Y19vcGNvZGUgIT0gQ09EQV9SRUxFQVNFKSB8fCBcCi0JCQkJKHIpLT51Y19mbGFncyAmIFJFUV9SRUFEKSkKKwkJCQkociktPnVjX2ZsYWdzICYgQ09EQV9SRVFfUkVBRCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2RhX3dhaXRmb3JfdXBjYWxsKHN0cnVjdCB1cGNfcmVxICpyZXEpCiB7CkBAIC02MjQsNyArNjI0LDcgQEAKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAogCQkvKiBnb3QgYSByZXBseSAqLwotCQlpZiAocmVxLT51Y19mbGFncyAmIChSRVFfV1JJVEUgfCBSRVFfQUJPUlQpKQorCQlpZiAocmVxLT51Y19mbGFncyAmIChDT0RBX1JFUV9XUklURSB8IENPREFfUkVRX0FCT1JUKSkKIAkJCWJyZWFrOwogCiAJCWlmIChibG9ja2VkICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkgJiYKQEAgLTcwOCw3ICs3MDgsNyBAQAogCWNvZGFfd2FpdGZvcl91cGNhbGwocmVxKTsKIAogCS8qIE9wIHdlbnQgdGhyb3VnaCwgaW50ZXJydXB0IG9yIG5vdC4uLiAqLwotCWlmIChyZXEtPnVjX2ZsYWdzICYgUkVRX1dSSVRFKSB7CisJaWYgKHJlcS0+dWNfZmxhZ3MgJiBDT0RBX1JFUV9XUklURSkgewogCQlvdXQgPSAodW5pb24gb3V0cHV0QXJncyAqKXJlcS0+dWNfZGF0YTsKIAkJLyogaGVyZSB3ZSBtYXAgcG9zaXRpdmUgVmVudXMgZXJyb3JzIHRvIGtlcm5lbCBlcnJvcnMgKi8KIAkJZXJyb3IgPSAtb3V0LT5vaC5yZXN1bHQ7CkBAIC03MTcsMTMgKzcxNywxMyBAQAogCX0KIAogCWVycm9yID0gLUVJTlRSOwotCWlmICgocmVxLT51Y19mbGFncyAmIFJFUV9BQk9SVCkgfHwgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJaWYgKChyZXEtPnVjX2ZsYWdzICYgQ09EQV9SRVFfQUJPUlQpIHx8ICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb2RhOiBVbmV4cGVjdGVkIGludGVycnVwdGlvbi5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJLyogSW50ZXJydXB0ZWQgYmVmb3JlIHZlbnVzIHJlYWQgaXQuICovCi0JaWYgKCEocmVxLT51Y19mbGFncyAmIFJFUV9SRUFEKSkKKwlpZiAoIShyZXEtPnVjX2ZsYWdzICYgQ09EQV9SRVFfUkVBRCkpCiAJCWdvdG8gZXhpdDsKIAogCS8qIFZlbnVzIHNhdyB0aGUgdXBjYWxsLCBtYWtlIHN1cmUgd2UgY2FuIHNlbmQgaW50ZXJydXB0IHNpZ25hbCAqLwpAQCAtNzQ3LDcgKzc0Nyw3IEBACiAJc2lnX2lucHV0QXJncy0+aWgub3Bjb2RlID0gQ09EQV9TSUdOQUw7CiAJc2lnX2lucHV0QXJncy0+aWgudW5pcXVlID0gcmVxLT51Y191bmlxdWU7CiAKLQlzaWdfcmVxLT51Y19mbGFncyA9IFJFUV9BU1lOQzsKKwlzaWdfcmVxLT51Y19mbGFncyA9IENPREFfUkVRX0FTWU5DOwogCXNpZ19yZXEtPnVjX29wY29kZSA9IHNpZ19pbnB1dEFyZ3MtPmloLm9wY29kZTsKIAlzaWdfcmVxLT51Y191bmlxdWUgPSBzaWdfaW5wdXRBcmdzLT5paC51bmlxdWU7CiAJc2lnX3JlcS0+dWNfaW5TaXplID0gc2l6ZW9mKHN0cnVjdCBjb2RhX2luX2hkcik7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGM2ZmRhOWEuLmU2ZDVkNzAgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KQEAgLTI2Niw3ICsyNjcsNyBAQAogCWVycm9yID0gdXNlcl9wYXRoKHBhdGhuYW1lLCAmcGF0aCk7CiAJaWYgKCFlcnJvcikgewogCQlzdHJ1Y3Qga3N0YXRmcyB0bXA7Ci0JCWVycm9yID0gdmZzX3N0YXRmcyhwYXRoLmRlbnRyeSwgJnRtcCk7CisJCWVycm9yID0gdmZzX3N0YXRmcygmcGF0aCwgJnRtcCk7CiAJCWlmICghZXJyb3IpCiAJCQllcnJvciA9IHB1dF9jb21wYXRfc3RhdGZzKGJ1ZiwgJnRtcCk7CiAJCXBhdGhfcHV0KCZwYXRoKTsKQEAgLTI4NCw3ICsyODUsNyBAQAogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwotCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX3BhdGguZGVudHJ5LCAmdG1wKTsKKwllcnJvciA9IHZmc19zdGF0ZnMoJmZpbGUtPmZfcGF0aCwgJnRtcCk7CiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBwdXRfY29tcGF0X3N0YXRmcyhidWYsICZ0bXApOwogCWZwdXQoZmlsZSk7CkBAIC0zMzQsNyArMzM1LDcgQEAKIAllcnJvciA9IHVzZXJfcGF0aChwYXRobmFtZSwgJnBhdGgpOwogCWlmICghZXJyb3IpIHsKIAkJc3RydWN0IGtzdGF0ZnMgdG1wOwotCQllcnJvciA9IHZmc19zdGF0ZnMocGF0aC5kZW50cnksICZ0bXApOworCQllcnJvciA9IHZmc19zdGF0ZnMoJnBhdGgsICZ0bXApOwogCQlpZiAoIWVycm9yKQogCQkJZXJyb3IgPSBwdXRfY29tcGF0X3N0YXRmczY0KGJ1ZiwgJnRtcCk7CiAJCXBhdGhfcHV0KCZwYXRoKTsKQEAgLTM1NSw3ICszNTYsNyBAQAogCWZpbGUgPSBmZ2V0KGZkKTsKIAlpZiAoIWZpbGUpCiAJCWdvdG8gb3V0OwotCWVycm9yID0gdmZzX3N0YXRmcyhmaWxlLT5mX3BhdGguZGVudHJ5LCAmdG1wKTsKKwllcnJvciA9IHZmc19zdGF0ZnMoJmZpbGUtPmZfcGF0aCwgJnRtcCk7CiAJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBwdXRfY29tcGF0X3N0YXRmczY0KGJ1ZiwgJnRtcCk7CiAJZnB1dChmaWxlKTsKQEAgLTM3OCw3ICszNzksNyBAQAogCXNiID0gdXNlcl9nZXRfc3VwZXIobmV3X2RlY29kZV9kZXYoZGV2KSk7CiAJaWYgKCFzYikKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZXJyID0gdmZzX3N0YXRmcyhzYi0+c19yb290LCAmc2J1Zik7CisJZXJyID0gc3RhdGZzX2J5X2RlbnRyeShzYi0+c19yb290LCAmc2J1Zik7CiAJZHJvcF9zdXBlcihzYik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTg5MSw4ICs4OTIsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLSNkZWZpbmUgTkFNRV9PRkZTRVQoZGUpICgoaW50KSAoKGRlKS0+ZF9uYW1lIC0gKGNoYXIgX191c2VyICopIChkZSkpKQotCiBzdHJ1Y3QgY29tcGF0X29sZF9saW51eF9kaXJlbnQgewogCWNvbXBhdF91bG9uZ190CWRfaW5vOwogCWNvbXBhdF91bG9uZ190CWRfb2Zmc2V0OwpAQCAtOTgxLDcgKzk4MCw4IEBACiAJc3RydWN0IGNvbXBhdF9saW51eF9kaXJlbnQgX191c2VyICogZGlyZW50OwogCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2sgKmJ1ZiA9IF9fYnVmOwogCWNvbXBhdF91bG9uZ190IGRfaW5vOwotCWludCByZWNsZW4gPSBBTElHTihOQU1FX09GRlNFVChkaXJlbnQpICsgbmFtbGVuICsgMiwgc2l6ZW9mKGNvbXBhdF9sb25nX3QpKTsKKwlpbnQgcmVjbGVuID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9saW51eF9kaXJlbnQsIGRfbmFtZSkgKworCQluYW1sZW4gKyAyLCBzaXplb2YoY29tcGF0X2xvbmdfdCkpOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KIAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKQEAgLTEwNjgsOCArMTA2OCw4IEBACiB7CiAJc3RydWN0IGxpbnV4X2RpcmVudDY0IF9fdXNlciAqZGlyZW50OwogCXN0cnVjdCBjb21wYXRfZ2V0ZGVudHNfY2FsbGJhY2s2NCAqYnVmID0gX19idWY7Ci0JaW50IGpqID0gTkFNRV9PRkZTRVQoZGlyZW50KTsKLQlpbnQgcmVjbGVuID0gQUxJR04oamogKyBuYW1sZW4gKyAxLCBzaXplb2YodTY0KSk7CisJaW50IHJlY2xlbiA9IEFMSUdOKG9mZnNldG9mKHN0cnVjdCBsaW51eF9kaXJlbnQ2NCwgZF9uYW1lKSArIG5hbWxlbiArIDEsCisJCXNpemVvZih1NjQpKTsKIAl1NjQgb2ZmOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KQEAgLTExOTMsMTEgKzExOTMsMTAgQEAKIAlpZiAoaW92ICE9IGlvdnN0YWNrKQogCQlrZnJlZShpb3YpOwogCWlmICgocmV0ICsgKHR5cGUgPT0gUkVBRCkpID4gMCkgewotCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxlLT5mX3BhdGguZGVudHJ5OwogCQlpZiAodHlwZSA9PSBSRUFEKQotCQkJZnNub3RpZnlfYWNjZXNzKGRlbnRyeSk7CisJCQlmc25vdGlmeV9hY2Nlc3MoZmlsZSk7CiAJCWVsc2UKLQkJCWZzbm90aWZ5X21vZGlmeShkZW50cnkpOworCQkJZnNub3RpZnlfbW9kaWZ5KGZpbGUpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCA2M2FlODU4Li43MDIyN2UwIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtMTMxLDIzICsxMzEsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcndfbG9uZyh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCi0JCWNvbXBhdF91bG9uZ190IF9fdXNlciAqYXJncCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCWlmKGdldF91c2VyKHZhbCwgYXJncCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXNldF9mcyAoS0VSTkVMX0RTKTsKLQllcnIgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJnZhbCk7Ci0Jc2V0X2ZzIChvbGRfZnMpOwotCWlmICghZXJyICYmIHB1dF91c2VyKHZhbCwgYXJncCkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBlcnI7Ci19Ci0KIHN0cnVjdCBjb21wYXRfdmlkZW9fZXZlbnQgewogCWludDMyX3QJCXR5cGU7CiAJY29tcGF0X3RpbWVfdAl0aW1lc3RhbXA7CkBAIC01OTQsMTIgKzU3Nyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpb2Nfc2V0dGltZW91dCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsCi0JCWNvbXBhdF91bG9uZ190IF9fdXNlciAqYXJncCkKLXsKLQlyZXR1cm4gcndfbG9uZyhmZCwgQVVUT0ZTX0lPQ19TRVRUSU1FT1VULCBhcmdwKTsKLX0KLQogLyogQmx1ZXRvb3RoIGlvY3RscyAqLwogI2RlZmluZSBIQ0lVQVJUU0VUUFJPVE8JCV9JT1coJ1UnLCAyMDAsIGludCkKICNkZWZpbmUgSENJVUFSVEdFVFBST1RPCQlfSU9SKCdVJywgMjAxLCBpbnQpCkBAIC05NjksNiArOTQ2LDcgQEAKIENPTVBBVElCTEVfSU9DVEwoVElPQ0dQVE4pCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTUFRMQ0spCiBDT01QQVRJQkxFX0lPQ1RMKFRJT0NTRVJHRVRMU1IpCitDT01QQVRJQkxFX0lPQ1RMKFRJT0NTSUcpCiAjaWZkZWYgVENHRVRTMgogQ09NUEFUSUJMRV9JT0NUTChUQ0dFVFMyKQogQ09NUEFUSUJMRV9JT0NUTChUQ1NFVFMyKQpAQCAtMTI4NCwxMyArMTI2Miw2IEBACiBDT01QQVRJQkxFX0lPQ1RMKFNPVU5EX01JWEVSX0dFVExFVkVMUykKIENPTVBBVElCTEVfSU9DVEwoU09VTkRfTUlYRVJfU0VUTEVWRUxTKQogQ09NUEFUSUJMRV9JT0NUTChPU1NfR0VUVkVSU0lPTikKLS8qIEFVVE9GUyAqLwotQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0NBVEFUT05JQykKLUNPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19QUk9UT1ZFUikKLUNPTVBBVElCTEVfSU9DVEwoQVVUT0ZTX0lPQ19FWFBJUkUpCi1DT01QQVRJQkxFX0lPQ1RMKEFVVE9GU19JT0NfRVhQSVJFX01VTFRJKQotQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX1BST1RPU1VCVkVSKQotQ09NUEFUSUJMRV9JT0NUTChBVVRPRlNfSU9DX0FTS1VNT1VOVCkKIC8qIFJhdyBkZXZpY2VzICovCiBDT01QQVRJQkxFX0lPQ1RMKFJBV19TRVRCSU5EKQogQ09NUEFUSUJMRV9JT0NUTChSQVdfR0VUQklORCkKQEAgLTE1NTcsOSArMTUyOCw2IEBACiAJY2FzZSBSQVdfR0VUQklORDoKIAkJcmV0dXJuIHJhd19pb2N0bChmZCwgY21kLCBhcmdwKTsKICNlbmRpZgotI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQzMiBfSU9XUigweDkzLDB4NjQsdW5zaWduZWQgaW50KQotCWNhc2UgQVVUT0ZTX0lPQ19TRVRUSU1FT1VUMzI6Ci0JCXJldHVybiBpb2Nfc2V0dGltZW91dChmZCwgY21kLCBhcmdwKTsKIAkvKiBPbmUgU01CIGlvY3RsIG5lZWRzIHRyYW5zbGF0aW9ucy4gKi8KICNkZWZpbmUgU01CX0lPQ19HRVRNT1VOVFVJRF8zMiBfSU9SKCd1JywgMSwgY29tcGF0X3VpZF90KQogCWNhc2UgU01CX0lPQ19HRVRNT1VOVFVJRF8zMjoKQEAgLTE2MTQsOSArMTU4Miw2IEBACiAJY2FzZSBLRFNLQk1FVEE6CiAJY2FzZSBLRFNLQkxFRDoKIAljYXNlIEtEU0VUTEVEOgotCS8qIEFVVE9GUyAqLwotCWNhc2UgQVVUT0ZTX0lPQ19SRUFEWToKLQljYXNlIEFVVE9GU19JT0NfRkFJTDoKIAkvKiBOQkQgKi8KIAljYXNlIE5CRF9TRVRfU09DSzoKIAljYXNlIE5CRF9TRVRfQkxLU0laRToKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggZGQzNjM0ZS4uYTUzYjEzMCAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTM5LDY2ICszOSw1NSBAQAogI2RlZmluZSBDUkFNSU5PKHgpCSgoKHgpLT5vZmZzZXQgJiYgKHgpLT5zaXplKT8oeCktPm9mZnNldDw8MjoxKQogI2RlZmluZSBPRkZTRVQoeCkJKCh4KS0+aV9pbm8pCiAKLQotc3RhdGljIGludCBjcmFtZnNfaWdldDVfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpCitzdGF0aWMgdm9pZCBzZXR1cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgY3JhbWZzX2lub2RlICogY3JhbWZzX2lub2RlKQogewotCXN0cnVjdCBjcmFtZnNfaW5vZGUgKmNyYW1mc19pbm9kZSA9IG9wYXF1ZTsKLQlyZXR1cm4gaW5vZGUtPmlfaW5vID09IENSQU1JTk8oY3JhbWZzX2lub2RlKSAmJiBpbm9kZS0+aV9pbm8gIT0gMTsKLX0KLQotc3RhdGljIGludCBjcmFtZnNfaWdldDVfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKm9wYXF1ZSkKLXsKLQlzdHJ1Y3QgY3JhbWZzX2lub2RlICpjcmFtZnNfaW5vZGUgPSBvcGFxdWU7Ci0JaW5vZGUtPmlfaW5vID0gQ1JBTUlOTyhjcmFtZnNfaW5vZGUpOwotCXJldHVybiAwOworCXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgemVyb3RpbWU7CisJaW5vZGUtPmlfbW9kZSA9IGNyYW1mc19pbm9kZS0+bW9kZTsKKwlpbm9kZS0+aV91aWQgPSBjcmFtZnNfaW5vZGUtPnVpZDsKKwlpbm9kZS0+aV9zaXplID0gY3JhbWZzX2lub2RlLT5zaXplOworCWlub2RlLT5pX2Jsb2NrcyA9IChjcmFtZnNfaW5vZGUtPnNpemUgLSAxKSAvIDUxMiArIDE7CisJaW5vZGUtPmlfZ2lkID0gY3JhbWZzX2lub2RlLT5naWQ7CisJLyogU3RydWN0IGNvcHkgaW50ZW50aW9uYWwgKi8KKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSB6ZXJvdGltZTsKKwkvKiBpbm9kZS0+aV9ubGluayBpcyBsZWZ0IDEgLSBhcmd1YWJseSB3cm9uZyBmb3IgZGlyZWN0b3JpZXMsCisJICAgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvIHdpdGhvdXQgcmVhZGluZyB0aGUgZGlyZWN0b3J5CisJICAgY29udGVudHMuICAxIHlpZWxkcyB0aGUgcmlnaHQgcmVzdWx0IGluIEdOVSBmaW5kLCBldmVuCisJICAgd2l0aG91dCAtbm9sZWFmIG9wdGlvbi4gKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9mb3AgPSAmZ2VuZXJpY19yb19mb3BzOworCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNyYW1mc19hb3BzOworCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZjcmFtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZjcmFtZnNfZGlyZWN0b3J5X29wZXJhdGlvbnM7CisJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9kYXRhLmFfb3BzID0gJmNyYW1mc19hb3BzOworCX0gZWxzZSB7CisJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKKwkJCW9sZF9kZWNvZGVfZGV2KGNyYW1mc19pbm9kZS0+c2l6ZSkpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqZ2V0X2NyYW1mc19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCXN0cnVjdCBjcmFtZnNfaW5vZGUgKiBjcmFtZnNfaW5vZGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGlnZXQ1X2xvY2tlZChzYiwgQ1JBTUlOTyhjcmFtZnNfaW5vZGUpLAotCQkJCQkgICAgY3JhbWZzX2lnZXQ1X3Rlc3QsIGNyYW1mc19pZ2V0NV9zZXQsCi0JCQkJCSAgICBjcmFtZnNfaW5vZGUpOwotCXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgemVyb3RpbWU7Ci0KLQlpZiAoaW5vZGUgJiYgKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKSB7Ci0JCWlub2RlLT5pX21vZGUgPSBjcmFtZnNfaW5vZGUtPm1vZGU7Ci0JCWlub2RlLT5pX3VpZCA9IGNyYW1mc19pbm9kZS0+dWlkOwotCQlpbm9kZS0+aV9zaXplID0gY3JhbWZzX2lub2RlLT5zaXplOwotCQlpbm9kZS0+aV9ibG9ja3MgPSAoY3JhbWZzX2lub2RlLT5zaXplIC0gMSkgLyA1MTIgKyAxOwotCQlpbm9kZS0+aV9naWQgPSBjcmFtZnNfaW5vZGUtPmdpZDsKLQkJLyogU3RydWN0IGNvcHkgaW50ZW50aW9uYWwgKi8KLQkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gemVyb3RpbWU7Ci0JCS8qIGlub2RlLT5pX25saW5rIGlzIGxlZnQgMSAtIGFyZ3VhYmx5IHdyb25nIGZvciBkaXJlY3RvcmllcywKLQkJICAgYnV0IGl0J3MgdGhlIGJlc3Qgd2UgY2FuIGRvIHdpdGhvdXQgcmVhZGluZyB0aGUgZGlyZWN0b3J5Ci0JCSAgIGNvbnRlbnRzLiAgMSB5aWVsZHMgdGhlIHJpZ2h0IHJlc3VsdCBpbiBHTlUgZmluZCwgZXZlbgotCQkgICB3aXRob3V0IC1ub2xlYWYgb3B0aW9uLiAqLwotCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQkJaW5vZGUtPmlfZm9wID0gJmdlbmVyaWNfcm9fZm9wczsKLQkJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JCX0gZWxzZSBpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQkJaW5vZGUtPmlfb3AgPSAmY3JhbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtPmlfZm9wID0gJmNyYW1mc19kaXJlY3Rvcnlfb3BlcmF0aW9uczsKLQkJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7Ci0JCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmY3JhbWZzX2FvcHM7Ci0JCX0gZWxzZSB7Ci0JCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCi0JCQkJb2xkX2RlY29kZV9kZXYoY3JhbWZzX2lub2RlLT5zaXplKSk7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpZiAoQ1JBTUlOTyhjcmFtZnNfaW5vZGUpID09IDEpIHsKKwkJaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCQlpZiAoaW5vZGUpIHsKKwkJCWlub2RlLT5pX2lubyA9IDE7CisJCQlzZXR1cF9pbm9kZShpbm9kZSwgY3JhbWZzX2lub2RlKTsKIAkJfQotCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKwl9IGVsc2UgeworCQlpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBDUkFNSU5PKGNyYW1mc19pbm9kZSkpOworCQlpZiAoaW5vZGUpIHsKKwkJCXNldHVwX2lub2RlKGlub2RlLCBjcmFtZnNfaW5vZGUpOworCQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CisJCX0KIAl9CiAJcmV0dXJuIGlub2RlOwogfQogCi1zdGF0aWMgdm9pZCBjcmFtZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmIChpbm9kZS0+aV9pbm8gPT0gMSkKLQkJZ2VuZXJpY19kZWxldGVfaW5vZGUoaW5vZGUpOwotCWVsc2UKLQkJZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKLX0KLQogLyoKICAqIFdlIGhhdmUgb3VyIG93biBibG9jayBjYWNoZTogZG9uJ3QgZmlsbCB1cCB0aGUgYnVmZmVyIGNhY2hlCiAgKiB3aXRoIHRoZSByb20taW1hZ2UsIGJlY2F1c2UgdGhlIHdheSB0aGUgZmlsZXN5c3RlbSBpcyBzZXQKQEAgLTU0Miw3ICs1MzEsNiBAQAogCS5wdXRfc3VwZXIJPSBjcmFtZnNfcHV0X3N1cGVyLAogCS5yZW1vdW50X2ZzCT0gY3JhbWZzX3JlbW91bnQsCiAJLnN0YXRmcwkJPSBjcmFtZnNfc3RhdGZzLAotCS5kcm9wX2lub2RlCT0gY3JhbWZzX2Ryb3BfaW5vZGUsCiB9OwogCiBzdGF0aWMgaW50IGNyYW1mc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDg2ZDRkYjEuLjE2NmQzNWQgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC01MzYsNyArNTM2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcHJ1bmVfZGNhY2hlKGludCBjb3VudCkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAJaW50IHdfY291bnQ7CiAJaW50IHVudXNlZCA9IGRlbnRyeV9zdGF0Lm5yX3VudXNlZDsKIAlpbnQgcHJ1bmVfcmF0aW87CkBAIC01NTAsNyArNTUwLDcgQEAKIAllbHNlCiAJCXBydW5lX3JhdGlvID0gdW51c2VkIC8gY291bnQ7CiAJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2IsIG4sICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgewogCQlpZiAobGlzdF9lbXB0eSgmc2ItPnNfaW5zdGFuY2VzKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2ItPnNfbnJfZGVudHJ5X3VudXNlZCA9PSAwKQpAQCAtNTkwLDE0ICs1OTAsMTYgQEAKIAkJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAJCX0KIAkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKLQkJLyogbG9jayB3YXMgZHJvcHBlZCwgbXVzdCByZXNldCBuZXh0ICovCi0JCWxpc3Rfc2FmZV9yZXNldF9uZXh0KHNiLCBuLCBzX2xpc3QpOworCQlpZiAocCkKKwkJCV9fcHV0X3N1cGVyKHApOwogCQljb3VudCAtPSBwcnVuZWQ7Ci0JCV9fcHV0X3N1cGVyKHNiKTsKKwkJcCA9IHNiOwogCQkvKiBtb3JlIHdvcmsgbGVmdCB0byBkbz8gKi8KIAkJaWYgKGNvdW50IDw9IDApCiAJCQlicmVhazsKIAl9CisJaWYgKHApCisJCV9fcHV0X3N1cGVyKHApOwogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogfQpAQCAtMTkwMyw0OCArMTkwNSwzMCBAQAogfQogCiAvKioKLSAqIF9fZF9wYXRoIC0gcmV0dXJuIHRoZSBwYXRoIG9mIGEgZGVudHJ5CisgKiBQcmVwZW5kIHBhdGggc3RyaW5nIHRvIGEgYnVmZmVyCisgKgogICogQHBhdGg6IHRoZSBkZW50cnkvdmZzbW91bnQgdG8gcmVwb3J0CiAgKiBAcm9vdDogcm9vdCB2ZnNtbnQvZGVudHJ5IChtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcyBmdW5jdGlvbikKLSAqIEBidWZmZXI6IGJ1ZmZlciB0byByZXR1cm4gdmFsdWUgaW4KLSAqIEBidWZsZW46IGJ1ZmZlciBsZW5ndGgKKyAqIEBidWZmZXI6IHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisgKiBAYnVmbGVuOiBwb2ludGVyIHRvIGJ1ZmZlciBsZW5ndGgKICAqCi0gKiBDb252ZXJ0IGEgZGVudHJ5IGludG8gYW4gQVNDSUkgcGF0aCBuYW1lLiBJZiB0aGUgZW50cnkgaGFzIGJlZW4gZGVsZXRlZAotICogdGhlIHN0cmluZyAiIChkZWxldGVkKSIgaXMgYXBwZW5kZWQuIE5vdGUgdGhhdCB0aGlzIGlzIGFtYmlndW91cy4KLSAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciBpbnRvIHRoZSBidWZmZXIgb3IgYW4gZXJyb3IgY29kZSBpZiB0aGUKLSAqIHBhdGggd2FzIHRvbyBsb25nLgotICoKLSAqICJidWZsZW4iIHNob3VsZCBiZSBwb3NpdGl2ZS4gQ2FsbGVyIGhvbGRzIHRoZSBkY2FjaGVfbG9jay4KKyAqIENhbGxlciBob2xkcyB0aGUgZGNhY2hlX2xvY2suCiAgKgogICogSWYgcGF0aCBpcyBub3QgcmVhY2hhYmxlIGZyb20gdGhlIHN1cHBsaWVkIHJvb3QsIHRoZW4gdGhlIHZhbHVlIG9mCiAgKiByb290IGlzIGNoYW5nZWQgKHdpdGhvdXQgbW9kaWZ5aW5nIHJlZmNvdW50cykuCiAgKi8KLWNoYXIgKl9fZF9wYXRoKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcGF0aCAqcm9vdCwKLQkgICAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuKQorc3RhdGljIGludCBwcmVwZW5kX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBwYXRoICpyb290LAorCQkJY2hhciAqKmJ1ZmZlciwgaW50ICpidWZsZW4pCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aC0+ZGVudHJ5OwogCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW50ID0gcGF0aC0+bW50OwotCWNoYXIgKmVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsKLQljaGFyICpyZXR2YWw7CisJYm9vbCBzbGFzaCA9IGZhbHNlOworCWludCBlcnJvciA9IDA7CiAKIAlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCXByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIlwwIiwgMSk7Ci0JaWYgKGRfdW5saW5rZWQoZGVudHJ5KSAmJgotCQkocHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiIChkZWxldGVkKSIsIDEwKSAhPSAwKSkKLQkJCWdvdG8gRWxvbmc7Ci0KLQlpZiAoYnVmbGVuIDwgMSkKLQkJZ290byBFbG9uZzsKLQkvKiBHZXQgJy8nIHJpZ2h0ICovCi0JcmV0dmFsID0gZW5kLTE7Ci0JKnJldHZhbCA9ICcvJzsKLQotCWZvciAoOzspIHsKKwl3aGlsZSAoZGVudHJ5ICE9IHJvb3QtPmRlbnRyeSB8fCB2ZnNtbnQgIT0gcm9vdC0+bW50KSB7CiAJCXN0cnVjdCBkZW50cnkgKiBwYXJlbnQ7CiAKLQkJaWYgKGRlbnRyeSA9PSByb290LT5kZW50cnkgJiYgdmZzbW50ID09IHJvb3QtPm1udCkKLQkJCWJyZWFrOwogCQlpZiAoZGVudHJ5ID09IHZmc21udC0+bW50X3Jvb3QgfHwgSVNfUk9PVChkZW50cnkpKSB7CiAJCQkvKiBHbG9iYWwgcm9vdD8gKi8KIAkJCWlmICh2ZnNtbnQtPm1udF9wYXJlbnQgPT0gdmZzbW50KSB7CkBAIC0xOTU2LDI4ICsxOTQwLDg4IEBACiAJCX0KIAkJcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKIAkJcHJlZmV0Y2gocGFyZW50KTsKLQkJaWYgKChwcmVwZW5kX25hbWUoJmVuZCwgJmJ1ZmxlbiwgJmRlbnRyeS0+ZF9uYW1lKSAhPSAwKSB8fAotCQkgICAgKHByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi8iLCAxKSAhPSAwKSkKLQkJCWdvdG8gRWxvbmc7Ci0JCXJldHZhbCA9IGVuZDsKKwkJZXJyb3IgPSBwcmVwZW5kX25hbWUoYnVmZmVyLCBidWZsZW4sICZkZW50cnktPmRfbmFtZSk7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IHByZXBlbmQoYnVmZmVyLCBidWZsZW4sICIvIiwgMSk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCXNsYXNoID0gdHJ1ZTsKIAkJZGVudHJ5ID0gcGFyZW50OwogCX0KIAogb3V0OgorCWlmICghZXJyb3IgJiYgIXNsYXNoKQorCQllcnJvciA9IHByZXBlbmQoYnVmZmVyLCBidWZsZW4sICIvIiwgMSk7CisKIAlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7Ci0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gZXJyb3I7CiAKIGdsb2JhbF9yb290OgotCXJldHZhbCArPSAxOwkvKiBoaXQgdGhlIHNsYXNoICovCi0JaWYgKHByZXBlbmRfbmFtZSgmcmV0dmFsLCAmYnVmbGVuLCAmZGVudHJ5LT5kX25hbWUpICE9IDApCi0JCWdvdG8gRWxvbmc7CisJLyoKKwkgKiBGaWxlc3lzdGVtcyBuZWVkaW5nIHRvIGltcGxlbWVudCBzcGVjaWFsICJyb290IG5hbWVzIgorCSAqIHNob3VsZCBkbyBzbyB3aXRoIC0+ZF9kbmFtZSgpCisJICovCisJaWYgKElTX1JPT1QoZGVudHJ5KSAmJgorCSAgICAoZGVudHJ5LT5kX25hbWUubGVuICE9IDEgfHwgZGVudHJ5LT5kX25hbWUubmFtZVswXSAhPSAnLycpKSB7CisJCVdBUk4oMSwgIlJvb3QgZGVudHJ5IGhhcyB3ZWlyZCBuYW1lIDwlLipzPlxuIiwKKwkJICAgICAoaW50KSBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCX0KIAlyb290LT5tbnQgPSB2ZnNtbnQ7CiAJcm9vdC0+ZGVudHJ5ID0gZGVudHJ5OwogCWdvdG8gb3V0OworfQogCi1FbG9uZzoKLQlyZXR2YWwgPSBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOwotCWdvdG8gb3V0OworLyoqCisgKiBfX2RfcGF0aCAtIHJldHVybiB0aGUgcGF0aCBvZiBhIGRlbnRyeQorICogQHBhdGg6IHRoZSBkZW50cnkvdmZzbW91bnQgdG8gcmVwb3J0CisgKiBAcm9vdDogcm9vdCB2ZnNtbnQvZGVudHJ5IChtYXkgYmUgbW9kaWZpZWQgYnkgdGhpcyBmdW5jdGlvbikKKyAqIEBidWZmZXI6IGJ1ZmZlciB0byByZXR1cm4gdmFsdWUgaW4KKyAqIEBidWZsZW46IGJ1ZmZlciBsZW5ndGgKKyAqCisgKiBDb252ZXJ0IGEgZGVudHJ5IGludG8gYW4gQVNDSUkgcGF0aCBuYW1lLgorICoKKyAqIFJldHVybnMgYSBwb2ludGVyIGludG8gdGhlIGJ1ZmZlciBvciBhbiBlcnJvciBjb2RlIGlmIHRoZQorICogcGF0aCB3YXMgdG9vIGxvbmcuCisgKgorICogImJ1ZmxlbiIgc2hvdWxkIGJlIHBvc2l0aXZlLiBDYWxsZXIgaG9sZHMgdGhlIGRjYWNoZV9sb2NrLgorICoKKyAqIElmIHBhdGggaXMgbm90IHJlYWNoYWJsZSBmcm9tIHRoZSBzdXBwbGllZCByb290LCB0aGVuIHRoZSB2YWx1ZSBvZgorICogcm9vdCBpcyBjaGFuZ2VkICh3aXRob3V0IG1vZGlmeWluZyByZWZjb3VudHMpLgorICovCitjaGFyICpfX2RfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHBhdGggKnJvb3QsCisJICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwljaGFyICpyZXMgPSBidWYgKyBidWZsZW47CisJaW50IGVycm9yOworCisJcHJlcGVuZCgmcmVzLCAmYnVmbGVuLCAiXDAiLCAxKTsKKwllcnJvciA9IHByZXBlbmRfcGF0aChwYXRoLCByb290LCAmcmVzLCAmYnVmbGVuKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBzYW1lIGFzIF9fZF9wYXRoIGJ1dCBhcHBlbmRzICIoZGVsZXRlZCkiIGZvciB1bmxpbmtlZCBmaWxlcy4KKyAqLworc3RhdGljIGludCBwYXRoX3dpdGhfZGVsZXRlZChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHBhdGggKnJvb3QsCisJCQkJIGNoYXIgKipidWYsIGludCAqYnVmbGVuKQoreworCXByZXBlbmQoYnVmLCBidWZsZW4sICJcMCIsIDEpOworCWlmIChkX3VubGlua2VkKHBhdGgtPmRlbnRyeSkpIHsKKwkJaW50IGVycm9yID0gcHJlcGVuZChidWYsIGJ1ZmxlbiwgIiAoZGVsZXRlZCkiLCAxMCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gcHJlcGVuZF9wYXRoKHBhdGgsIHJvb3QsIGJ1ZiwgYnVmbGVuKTsKK30KKworc3RhdGljIGludCBwcmVwZW5kX3VucmVhY2hhYmxlKGNoYXIgKipidWZmZXIsIGludCAqYnVmbGVuKQoreworCXJldHVybiBwcmVwZW5kKGJ1ZmZlciwgYnVmbGVuLCAiKHVucmVhY2hhYmxlKSIsIDEzKTsKIH0KIAogLyoqCkBAIC0xOTk4LDkgKzIwNDIsMTAgQEAKICAqLwogY2hhciAqZF9wYXRoKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBjaGFyICpidWYsIGludCBidWZsZW4pCiB7Ci0JY2hhciAqcmVzOworCWNoYXIgKnJlcyA9IGJ1ZiArIGJ1ZmxlbjsKIAlzdHJ1Y3QgcGF0aCByb290OwogCXN0cnVjdCBwYXRoIHRtcDsKKwlpbnQgZXJyb3I7CiAKIAkvKgogCSAqIFdlIGhhdmUgdmFyaW91cyBzeW50aGV0aWMgZmlsZXN5c3RlbXMgdGhhdCBuZXZlciBnZXQgbW91bnRlZC4gIE9uCkBAIC0yMDEyLDE5ICsyMDU3LDUxIEBACiAJaWYgKHBhdGgtPmRlbnRyeS0+ZF9vcCAmJiBwYXRoLT5kZW50cnktPmRfb3AtPmRfZG5hbWUpCiAJCXJldHVybiBwYXRoLT5kZW50cnktPmRfb3AtPmRfZG5hbWUocGF0aC0+ZGVudHJ5LCBidWYsIGJ1Zmxlbik7CiAKLQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQlyb290ID0gY3VycmVudC0+ZnMtPnJvb3Q7Ci0JcGF0aF9nZXQoJnJvb3QpOwotCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJZ2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsICZyb290KTsKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAl0bXAgPSByb290OwotCXJlcyA9IF9fZF9wYXRoKHBhdGgsICZ0bXAsIGJ1ZiwgYnVmbGVuKTsKKwllcnJvciA9IHBhdGhfd2l0aF9kZWxldGVkKHBhdGgsICZ0bXAsICZyZXMsICZidWZsZW4pOworCWlmIChlcnJvcikKKwkJcmVzID0gRVJSX1BUUihlcnJvcik7CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAlwYXRoX3B1dCgmcm9vdCk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0woZF9wYXRoKTsKIAorLyoqCisgKiBkX3BhdGhfd2l0aF91bnJlYWNoYWJsZSAtIHJldHVybiB0aGUgcGF0aCBvZiBhIGRlbnRyeQorICogQHBhdGg6IHBhdGggdG8gcmVwb3J0CisgKiBAYnVmOiBidWZmZXIgdG8gcmV0dXJuIHZhbHVlIGluCisgKiBAYnVmbGVuOiBidWZmZXIgbGVuZ3RoCisgKgorICogVGhlIGRpZmZlcmVuY2UgZnJvbSBkX3BhdGgoKSBpcyB0aGF0IHRoaXMgcHJlcGVuZHMgIih1bnJlYWNoYWJsZSkiCisgKiB0byBwYXRocyB3aGljaCBhcmUgdW5yZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBwcm9jZXNzJyByb290LgorICovCitjaGFyICpkX3BhdGhfd2l0aF91bnJlYWNoYWJsZShjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWNoYXIgKnJlcyA9IGJ1ZiArIGJ1ZmxlbjsKKwlzdHJ1Y3QgcGF0aCByb290OworCXN0cnVjdCBwYXRoIHRtcDsKKwlpbnQgZXJyb3I7CisKKwlpZiAocGF0aC0+ZGVudHJ5LT5kX29wICYmIHBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9kbmFtZSkKKwkJcmV0dXJuIHBhdGgtPmRlbnRyeS0+ZF9vcC0+ZF9kbmFtZShwYXRoLT5kZW50cnksIGJ1ZiwgYnVmbGVuKTsKKworCWdldF9mc19yb290KGN1cnJlbnQtPmZzLCAmcm9vdCk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJdG1wID0gcm9vdDsKKwllcnJvciA9IHBhdGhfd2l0aF9kZWxldGVkKHBhdGgsICZ0bXAsICZyZXMsICZidWZsZW4pOworCWlmICghZXJyb3IgJiYgIXBhdGhfZXF1YWwoJnRtcCwgJnJvb3QpKQorCQllcnJvciA9IHByZXBlbmRfdW5yZWFjaGFibGUoJnJlcywgJmJ1Zmxlbik7CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwlwYXRoX3B1dCgmcm9vdCk7CisJaWYgKGVycm9yKQorCQlyZXMgPSAgRVJSX1BUUihlcnJvcik7CisKKwlyZXR1cm4gcmVzOworfQorCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBkZW50cnlfb3BlcmF0aW9ucy5kX2RuYW1lKCkgbWVtYmVycwogICovCkBAIC0yMDQ5LDE2ICsyMTI2LDEyIEBACiAvKgogICogV3JpdGUgZnVsbCBwYXRobmFtZSBmcm9tIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIGludG8gdGhlIGJ1ZmZlci4KICAqLwotY2hhciAqZGVudHJ5X3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWYsIGludCBidWZsZW4pCitjaGFyICpfX2RlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQogewogCWNoYXIgKmVuZCA9IGJ1ZiArIGJ1ZmxlbjsKIAljaGFyICpyZXR2YWw7CiAKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAlwcmVwZW5kKCZlbmQsICZidWZsZW4sICJcMCIsIDEpOwotCWlmIChkX3VubGlua2VkKGRlbnRyeSkgJiYKLQkJKHByZXBlbmQoJmVuZCwgJmJ1ZmxlbiwgIi8vZGVsZXRlZCIsIDkpICE9IDApKQotCQkJZ290byBFbG9uZzsKIAlpZiAoYnVmbGVuIDwgMSkKIAkJZ290byBFbG9uZzsKIAkvKiBHZXQgJy8nIHJpZ2h0ICovCkBAIC0yMDc2LDcgKzIxNDksMjggQEAKIAkJcmV0dmFsID0gZW5kOwogCQlkZW50cnkgPSBwYXJlbnQ7CiAJfQorCXJldHVybiByZXR2YWw7CitFbG9uZzoKKwlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKK30KK0VYUE9SVF9TWU1CT0woX19kZW50cnlfcGF0aCk7CisKK2NoYXIgKmRlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQoreworCWNoYXIgKnAgPSBOVUxMOworCWNoYXIgKnJldHZhbDsKKworCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCWlmIChkX3VubGlua2VkKGRlbnRyeSkpIHsKKwkJcCA9IGJ1ZiArIGJ1ZmxlbjsKKwkJaWYgKHByZXBlbmQoJnAsICZidWZsZW4sICIvL2RlbGV0ZWQiLCAxMCkgIT0gMCkKKwkJCWdvdG8gRWxvbmc7CisJCWJ1ZmxlbisrOworCX0KKwlyZXR2YWwgPSBfX2RlbnRyeV9wYXRoKGRlbnRyeSwgYnVmLCBidWZsZW4pOwogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJaWYgKCFJU19FUlIocmV0dmFsKSAmJiBwKQorCQkqcCA9ICcvJzsJLyogcmVzdG9yZSAnLycgb3ZlcnJpZGVuIHdpdGggJ1wwJyAqLwogCXJldHVybiByZXR2YWw7CiBFbG9uZzoKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwpAQCAtMjExMCwyNyArMjIwNCwzMCBAQAogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQlwd2QgPSBjdXJyZW50LT5mcy0+cHdkOwotCXBhdGhfZ2V0KCZwd2QpOwotCXJvb3QgPSBjdXJyZW50LT5mcy0+cm9vdDsKLQlwYXRoX2dldCgmcm9vdCk7Ci0JcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwlnZXRfZnNfcm9vdF9hbmRfcHdkKGN1cnJlbnQtPmZzLCAmcm9vdCwgJnB3ZCk7CiAKIAllcnJvciA9IC1FTk9FTlQ7CiAJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJaWYgKCFkX3VubGlua2VkKHB3ZC5kZW50cnkpKSB7CiAJCXVuc2lnbmVkIGxvbmcgbGVuOwogCQlzdHJ1Y3QgcGF0aCB0bXAgPSByb290OwotCQljaGFyICogY3dkOworCQljaGFyICpjd2QgPSBwYWdlICsgUEFHRV9TSVpFOworCQlpbnQgYnVmbGVuID0gUEFHRV9TSVpFOwogCi0JCWN3ZCA9IF9fZF9wYXRoKCZwd2QsICZ0bXAsIHBhZ2UsIFBBR0VfU0laRSk7CisJCXByZXBlbmQoJmN3ZCwgJmJ1ZmxlbiwgIlwwIiwgMSk7CisJCWVycm9yID0gcHJlcGVuZF9wYXRoKCZwd2QsICZ0bXAsICZjd2QsICZidWZsZW4pOwogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCi0JCWVycm9yID0gUFRSX0VSUihjd2QpOwotCQlpZiAoSVNfRVJSKGN3ZCkpCisJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCisJCS8qIFVucmVhY2hhYmxlIGZyb20gY3VycmVudCByb290ICovCisJCWlmICghcGF0aF9lcXVhbCgmdG1wLCAmcm9vdCkpIHsKKwkJCWVycm9yID0gcHJlcGVuZF91bnJlYWNoYWJsZSgmY3dkLCAmYnVmbGVuKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dDsKKwkJfQorCiAJCWVycm9yID0gLUVSQU5HRTsKIAkJbGVuID0gUEFHRV9TSVpFICsgcGFnZSAtIGN3ZDsKIAkJaWYgKGxlbiA8PSBzaXplKSB7CmRpZmYgLS1naXQgYS9mcy9kaXJlY3QtaW8uYyBiL2ZzL2RpcmVjdC1pby5jCmluZGV4IGExMGNiOTEuLjUxZjI3MGIgMTAwNjQ0Ci0tLSBhL2ZzL2RpcmVjdC1pby5jCisrKyBiL2ZzL2RpcmVjdC1pby5jCkBAIC0xMTM2LDggKzExMzYsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogVGhpcyBpcyBhIGxpYnJhcnkgZnVuY3Rpb24gZm9yIHVzZSBieSBmaWxlc3lzdGVtIGRyaXZlcnMuCisgKgorICogVGhlIGxvY2tpbmcgcnVsZXMgYXJlIGdvdmVybmVkIGJ5IHRoZSBmbGFncyBwYXJhbWV0ZXI6CisgKiAgLSBpZiB0aGUgZmxhZ3MgdmFsdWUgY29udGFpbnMgRElPX0xPQ0tJTkcgd2UgdXNlIGEgZmFuY3kgbG9ja2luZworICogICAgc2NoZW1lIGZvciBkdW1iIGZpbGVzeXN0ZW1zLgorICogICAgRm9yIHdyaXRlcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB1bmRlciBpX211dGV4IGFuZCByZXR1cm5zIHdpdGgKKyAqICAgIGlfbXV0ZXggaGVsZCwgZm9yIHJlYWRzLCBpX211dGV4IGlzIG5vdCBoZWxkIG9uIGVudHJ5LCBidXQgaXQgaXMKKyAqICAgIHRha2VuIGFuZCBkcm9wcGVkIGFnYWluIGJlZm9yZSByZXR1cm5pbmcuCisgKiAgICBGb3IgcmVhZHMgYW5kIHdyaXRlcyBpX2FsbG9jX3NlbSBpcyB0YWtlbiBpbiBzaGFyZWQgbW9kZSBhbmQgcmVsZWFzZWQKKyAqICAgIG9uIEkvTyBjb21wbGV0aW9uICh3aGljaCBtYXkgaGFwcGVuIGFzeW5jaHJvbm91c2x5IGFmdGVyIHJldHVybmluZyB0bworICogICAgdGhlIGNhbGxlcikuCisgKgorICogIC0gaWYgdGhlIGZsYWdzIHZhbHVlIGRvZXMgTk9UIGNvbnRhaW4gRElPX0xPQ0tJTkcgd2UgZG9uJ3QgdXNlIGFueQorICogICAgaW50ZXJuYWwgbG9ja2luZyBidXQgcmF0aGVyIHJlbHkgb24gdGhlIGZpbGVzeXN0ZW0gdG8gc3luY2hyb25pemUKKyAqICAgIGRpcmVjdCBJL08gcmVhZHMvd3JpdGVzIHZlcnN1cyBlYWNoIG90aGVyIGFuZCB0cnVuY2F0ZS4KKyAqICAgIEZvciByZWFkcyBhbmQgd3JpdGVzIGJvdGggaV9tdXRleCBhbmQgaV9hbGxvY19zZW0gYXJlIG5vdCBoZWxkIG9uCisgKiAgICBlbnRyeSBhbmQgYXJlIG5ldmVyIHRha2VuLgorICovCiBzc2l6ZV90Ci1fX2Jsb2NrZGV2X2RpcmVjdF9JT19uZXd0cnVuYyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlub2RlICppbm9kZSwKK19fYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LCAKIAl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGdldF9ibG9ja190IGdldF9ibG9jaywgZGlvX2lvZG9uZV90IGVuZF9pbywKIAlkaW9fc3VibWl0X3Qgc3VibWl0X2lvLAlpbnQgZmxhZ3MpCkBAIC0xMjMzLDU3ICsxMjUyLDQgQEAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwogfQotRVhQT1JUX1NZTUJPTChfX2Jsb2NrZGV2X2RpcmVjdF9JT19uZXd0cnVuYyk7Ci0KLS8qCi0gKiBUaGlzIGlzIGEgbGlicmFyeSBmdW5jdGlvbiBmb3IgdXNlIGJ5IGZpbGVzeXN0ZW0gZHJpdmVycy4KLSAqCi0gKiBUaGUgbG9ja2luZyBydWxlcyBhcmUgZ292ZXJuZWQgYnkgdGhlIGZsYWdzIHBhcmFtZXRlcjoKLSAqICAtIGlmIHRoZSBmbGFncyB2YWx1ZSBjb250YWlucyBESU9fTE9DS0lORyB3ZSB1c2UgYSBmYW5jeSBsb2NraW5nCi0gKiAgICBzY2hlbWUgZm9yIGR1bWIgZmlsZXN5c3RlbXMuCi0gKiAgICBGb3Igd3JpdGVzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVuZGVyIGlfbXV0ZXggYW5kIHJldHVybnMgd2l0aAotICogICAgaV9tdXRleCBoZWxkLCBmb3IgcmVhZHMsIGlfbXV0ZXggaXMgbm90IGhlbGQgb24gZW50cnksIGJ1dCBpdCBpcwotICogICAgdGFrZW4gYW5kIGRyb3BwZWQgYWdhaW4gYmVmb3JlIHJldHVybmluZy4KLSAqICAgIEZvciByZWFkcyBhbmQgd3JpdGVzIGlfYWxsb2Nfc2VtIGlzIHRha2VuIGluIHNoYXJlZCBtb2RlIGFuZCByZWxlYXNlZAotICogICAgb24gSS9PIGNvbXBsZXRpb24gKHdoaWNoIG1heSBoYXBwZW4gYXN5bmNocm9ub3VzbHkgYWZ0ZXIgcmV0dXJuaW5nIHRvCi0gKiAgICB0aGUgY2FsbGVyKS4KLSAqCi0gKiAgLSBpZiB0aGUgZmxhZ3MgdmFsdWUgZG9lcyBOT1QgY29udGFpbiBESU9fTE9DS0lORyB3ZSBkb24ndCB1c2UgYW55Ci0gKiAgICBpbnRlcm5hbCBsb2NraW5nIGJ1dCByYXRoZXIgcmVseSBvbiB0aGUgZmlsZXN5c3RlbSB0byBzeW5jaHJvbml6ZQotICogICAgZGlyZWN0IEkvTyByZWFkcy93cml0ZXMgdmVyc3VzIGVhY2ggb3RoZXIgYW5kIHRydW5jYXRlLgotICogICAgRm9yIHJlYWRzIGFuZCB3cml0ZXMgYm90aCBpX211dGV4IGFuZCBpX2FsbG9jX3NlbSBhcmUgbm90IGhlbGQgb24KLSAqICAgIGVudHJ5IGFuZCBhcmUgbmV2ZXIgdGFrZW4uCi0gKi8KLXNzaXplX3QKLV9fYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAotCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLCBkaW9faW9kb25lX3QgZW5kX2lvLAotCWRpb19zdWJtaXRfdCBzdWJtaXRfaW8sCWludCBmbGFncykKLXsKLQlzc2l6ZV90IHJldHZhbDsKLQotCXJldHZhbCA9IF9fYmxvY2tkZXZfZGlyZWN0X0lPX25ld3RydW5jKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LAotCQkJb2Zmc2V0LCBucl9zZWdzLCBnZXRfYmxvY2ssIGVuZF9pbywgc3VibWl0X2lvLCBmbGFncyk7Ci0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluIGZvciBESU9fTE9DS0lORy4KLQkgKiBOT1RFOiBESU9fTk9fTE9DSy9ESU9fT1dOX0xPQ0sgY2FsbGVycyBoYXZlIHRvIGhhbmRsZSB0aGlzIGluCi0JICogdGhlaXIgb3duIG1hbm5lci4gVGhpcyBpcyBhIGZ1cnRoZXIgZXhhbXBsZSBvZiB3aGVyZSB0aGUgb2xkCi0JICogdHJ1bmNhdGUgc2VxdWVuY2UgaXMgaW5hZGVxdWF0ZS4KLQkgKgotCSAqIE5PVEU6IGZpbGVzeXN0ZW1zIHdpdGggdGhlaXIgb3duIGxvY2tpbmcgaGF2ZSB0byBoYW5kbGUgdGhpcwotCSAqIG9uIHRoZWlyIG93bi4KLQkgKi8KLQlpZiAoZmxhZ3MgJiBESU9fTE9DS0lORykgewotCQlpZiAodW5saWtlbHkoKHJ3ICYgV1JJVEUpICYmIHJldHZhbCA8IDApKSB7Ci0JCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOwotCi0JCQlpZiAoZW5kID4gaXNpemUpCi0JCQkJdm10cnVuY2F0ZShpbm9kZSwgaXNpemUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KIEVYUE9SVF9TWU1CT0woX19ibG9ja2Rldl9kaXJlY3RfSU8pOwpkaWZmIC0tZ2l0IGEvZnMvZGxtL2xvd2NvbW1zLmMgYi9mcy9kbG0vbG93Y29tbXMuYwppbmRleCBjMGQzNWM2Li4zN2EzNGMyIDEwMDY0NAotLS0gYS9mcy9kbG0vbG93Y29tbXMuYworKysgYi9mcy9kbG0vbG93Y29tbXMuYwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAKIAlmb3IgKGkgPSAwIDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29uLCBoLCAmY29ubmVjdGlvbl9oYXNoW2ldLCBsaXN0KSB7Ci0JCQlpZiAoY29uICYmIGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgeworCQkJaWYgKGNvbi0+c2N0cF9hc3NvYyA9PSBhc3NvY19pZCkgewogCQkJCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAJCQkJcmV0dXJuIGNvbjsKIAkJCX0KZGlmZiAtLWdpdCBhL2ZzL2RsbS9uZXRsaW5rLmMgYi9mcy9kbG0vbmV0bGluay5jCmluZGV4IDJjNmFkNTEuLmVmMTdlMDEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9uZXRsaW5rLmMKKysrIGIvZnMvZGxtL25ldGxpbmsuYwpAQCAtODEsMjQgKzgxLDExIEBACiAKIGludCBfX2luaXQgZGxtX25ldGxpbmtfaW5pdCh2b2lkKQogewotCWludCBydjsKLQotCXJ2ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJmZhbWlseSk7Ci0JaWYgKHJ2KQotCQlyZXR1cm4gcnY7Ci0KLQlydiA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZmYW1pbHksICZkbG1fbmxfb3BzKTsKLQlpZiAocnYgPCAwKQotCQlnb3RvIGVycjsKLQlyZXR1cm4gMDsKLSBlcnI6Ci0JZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmZmFtaWx5KTsKLQlyZXR1cm4gcnY7CisJcmV0dXJuIGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzKCZmYW1pbHksICZkbG1fbmxfb3BzLCAxKTsKIH0KIAogdm9pZCBkbG1fbmV0bGlua19leGl0KHZvaWQpCiB7Ci0JZ2VubF91bnJlZ2lzdGVyX29wcygmZmFtaWx5LCAmZGxtX25sX29wcyk7CiAJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmZmFtaWx5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZHJvcF9jYWNoZXMuYyBiL2ZzL2Ryb3BfY2FjaGVzLmMKaW5kZXggODNjNGY2MC4uMjE5NWMyMSAxMDA2NDQKLS0tIGEvZnMvZHJvcF9jYWNoZXMuYworKysgYi9mcy9kcm9wX2NhY2hlcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9maWxlLmMgYi9mcy9lY3J5cHRmcy9maWxlLmMKaW5kZXggZThmY2Y0ZS4uNjIyYzk1MTQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2ZpbGUuYworKysgYi9mcy9lY3J5cHRmcy9maWxlLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCQkJICAgICAgICJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCiAJCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgX19mdW5jX18sCiAJCQkgICAgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlOwogCQl9CiAJfQogCWlmICgoZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSktPmxvd2VyX2ZpbGUtPmZfZmxhZ3MgJiBPX1JET05MWSkKQEAgLTIwNyw3ICsyMDcsNyBAQAogCQlyYyA9IC1FUEVSTTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IExvd2VyIHBlcnNpc3RlbnQgZmlsZSBpcyBSTzsgZUNyeXB0ZnMgIgogCQkgICAgICAgImZpbGUgbXVzdCBoZW5jZSBiZSBvcGVuZWQgUk9cbiIsIF9fZnVuY19fKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCWVjcnlwdGZzX3NldF9maWxlX2xvd2VyKAogCQlmaWxlLCBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+bG93ZXJfZmlsZSk7CkBAIC0yOTIsMTIgKzI5Miw0MCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBlY3J5cHRmc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGxvbmcKK2VjcnlwdGZzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZSA9IE5VTEw7CisJbG9uZyByYyA9IC1FTk9UVFk7CisKKwlpZiAoZWNyeXB0ZnNfZmlsZV90b19wcml2YXRlKGZpbGUpKQorCQlsb3dlcl9maWxlID0gZWNyeXB0ZnNfZmlsZV90b19sb3dlcihmaWxlKTsKKwlpZiAobG93ZXJfZmlsZSAmJiBsb3dlcl9maWxlLT5mX29wICYmIGxvd2VyX2ZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKQorCQlyYyA9IGxvd2VyX2ZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKGxvd2VyX2ZpbGUsIGNtZCwgYXJnKTsKKwlyZXR1cm4gcmM7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgbG9uZworZWNyeXB0ZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZSA9IE5VTEw7CisJbG9uZyByYyA9IC1FTk9JT0NUTENNRDsKKworCWlmIChlY3J5cHRmc19maWxlX3RvX3ByaXZhdGUoZmlsZSkpCisJCWxvd2VyX2ZpbGUgPSBlY3J5cHRmc19maWxlX3RvX2xvd2VyKGZpbGUpOworCWlmIChsb3dlcl9maWxlICYmIGxvd2VyX2ZpbGUtPmZfb3AgJiYgbG93ZXJfZmlsZS0+Zl9vcC0+Y29tcGF0X2lvY3RsKQorCQlyYyA9IGxvd2VyX2ZpbGUtPmZfb3AtPmNvbXBhdF9pb2N0bChsb3dlcl9maWxlLCBjbWQsIGFyZyk7CisJcmV0dXJuIHJjOworfQorI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZWNyeXB0ZnNfZGlyX2ZvcHMgPSB7CiAJLnJlYWRkaXIgPSBlY3J5cHRmc19yZWFkZGlyLAotCS5pb2N0bCA9IGVjcnlwdGZzX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IGVjcnlwdGZzX3VubG9ja2VkX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZWNyeXB0ZnNfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLm9wZW4gPSBlY3J5cHRmc19vcGVuLAogCS5mbHVzaCA9IGVjcnlwdGZzX2ZsdXNoLAogCS5yZWxlYXNlID0gZWNyeXB0ZnNfcmVsZWFzZSwKQEAgLTMxMyw3ICszNDEsMTAgQEAKIAkud3JpdGUgPSBkb19zeW5jX3dyaXRlLAogCS5haW9fd3JpdGUgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5yZWFkZGlyID0gZWNyeXB0ZnNfcmVhZGRpciwKLQkuaW9jdGwgPSBlY3J5cHRmc19pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBlY3J5cHRmc191bmxvY2tlZF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGVjcnlwdGZzX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCS5tbWFwID0gZ2VuZXJpY19maWxlX21tYXAsCiAJLm9wZW4gPSBlY3J5cHRmc19vcGVuLAogCS5mbHVzaCA9IGVjcnlwdGZzX2ZsdXNoLApAQCAtMzIyLDIwICszNTMsMyBAQAogCS5mYXN5bmMgPSBlY3J5cHRmc19mYXN5bmMsCiAJLnNwbGljZV9yZWFkID0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogfTsKLQotc3RhdGljIGludAotZWNyeXB0ZnNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGZpbGUgKmxvd2VyX2ZpbGUgPSBOVUxMOwotCi0JaWYgKGVjcnlwdGZzX2ZpbGVfdG9fcHJpdmF0ZShmaWxlKSkKLQkJbG93ZXJfZmlsZSA9IGVjcnlwdGZzX2ZpbGVfdG9fbG93ZXIoZmlsZSk7Ci0JaWYgKGxvd2VyX2ZpbGUgJiYgbG93ZXJfZmlsZS0+Zl9vcCAmJiBsb3dlcl9maWxlLT5mX29wLT5pb2N0bCkKLQkJcmMgPSBsb3dlcl9maWxlLT5mX29wLT5pb2N0bChlY3J5cHRmc19pbm9kZV90b19sb3dlcihpbm9kZSksCi0JCQkJCSAgICAgbG93ZXJfZmlsZSwgY21kLCBhcmcpOwotCWVsc2UKLQkJcmMgPSAtRU5PVFRZOwotCXJldHVybiByYzsKLX0KZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCmluZGV4IDMxZWY1MjUuLjZjNTUxMTMgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IE91dCBvZiBtZW1vcnkgd2hpbHN0IGF0dGVtcHRpbmcgIgogCQkgICAgICAgInRvIGFsbG9jYXRlIGVjcnlwdGZzX2RlbnRyeV9pbmZvIHN0cnVjdFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJZ290byBvdXRfZHB1dDsKKwkJZ290byBvdXRfcHV0OwogCX0KIAllY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwgbG93ZXJfZGVudHJ5KTsKIAllY3J5cHRmc19zZXRfZGVudHJ5X2xvd2VyX21udChlY3J5cHRmc19kZW50cnksIGxvd2VyX21udCk7CkBAIC0zMzksMTQgKzMzOSw4NSBAQAogb3V0X2ZyZWVfa21lbToKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfaGVhZGVyX2NhY2hlXzIsIHBhZ2VfdmlydCk7CiAJZ290byBvdXQ7Ci1vdXRfZHB1dDoKK291dF9wdXQ6CiAJZHB1dChsb3dlcl9kZW50cnkpOworCW1udHB1dChsb3dlcl9tbnQpOwogCWRfZHJvcChlY3J5cHRmc19kZW50cnkpOwogb3V0OgogCXJldHVybiByYzsKIH0KIAogLyoqCisgKiBlY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5CisgKiBAZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBuZXcgZGVudHJ5LgorICogQGxvd2VyX2Rpcl9kZW50cnk6IFBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBkZW50cnkuCisgKiBAbmQ6IG5hbWVpZGF0YSBmcm9tIGxhc3QgbG9va3VwLgorICoKKyAqIENyZWF0ZSBhIG5ldyBkZW50cnkgb3IgZ2V0IGl0IGZyb20gbG93ZXIgcGFyZW50IGRpci4KKyAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKgorZWNyeXB0ZnNfbmV3X2xvd2VyX2RlbnRyeShzdHJ1Y3QgcXN0ciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwKKwkJCSAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICp0bXA7CisJc3RydWN0IGlub2RlICpsb3dlcl9kaXJfaW5vZGU7CisKKwlsb3dlcl9kaXJfaW5vZGUgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlOworCisJdG1wID0gZF9hbGxvYyhsb3dlcl9kaXJfZGVudHJ5LCBuYW1lKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9sb2NrKCZsb3dlcl9kaXJfaW5vZGUtPmlfbXV0ZXgpOworCW5ld19kZW50cnkgPSBsb3dlcl9kaXJfaW5vZGUtPmlfb3AtPmxvb2t1cChsb3dlcl9kaXJfaW5vZGUsIHRtcCwgbmQpOworCW11dGV4X3VubG9jaygmbG93ZXJfZGlyX2lub2RlLT5pX211dGV4KTsKKworCWlmICghbmV3X2RlbnRyeSkKKwkJbmV3X2RlbnRyeSA9IHRtcDsKKwllbHNlCisJCWRwdXQodG1wKTsKKworCXJldHVybiBuZXdfZGVudHJ5OworfQorCisKKy8qKgorICogZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcgorICogQGVjcnlwdGZzX2RlbnRyeTogVGhlIGVDcnlwdGZzIGRlbnRyeSB0aGF0IHdlIGFyZSBsb29raW5nIHVwCisgKiBAbG93ZXJfZGlyX2RlbnRyeTogbG93ZXIgcGFyZW50IGRpcmVjdG9yeQorICoKKyAqIEdldCB0aGUgbG93ZXIgZGVudHJ5IGZyb20gdmZzLiBJZiBsb3dlciBkZW50cnkgZG9lcyBub3QgZXhpc3QgeWV0LAorICogY3JlYXRlIGl0LgorICovCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqCitlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKKwkJCSAgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OworCXN0cnVjdCBxc3RyICpuYW1lOworCWludCBlcnI7CisKKwluYW1lID0gJmVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lOworCWxvd2VyX21udCA9IG1udGdldChlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KAorCQkJCSAgICBlY3J5cHRmc19kZW50cnktPmRfcGFyZW50KSk7CisJZXJyID0gdmZzX3BhdGhfbG9va3VwKGxvd2VyX2Rpcl9kZW50cnksIGxvd2VyX21udCwgbmFtZS0+bmFtZSAsIDAsICZuZCk7CisJbW50cHV0KGxvd2VyX21udCk7CisKKwlpZiAoIWVycikgeworCQkvKiB3ZSBkb250IG5lZWQgdGhlIG1vdW50ICovCisJCW1udHB1dChuZC5wYXRoLm1udCk7CisJCXJldHVybiBuZC5wYXRoLmRlbnRyeTsKKwl9CisJaWYgKGVyciAhPSAtRU5PRU5UKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJLyogY3JlYXRlIGEgbmV3IGxvd2VyIGRlbnRyeSAqLworCXJldHVybiBlY3J5cHRmc19uZXdfbG93ZXJfZGVudHJ5KG5hbWUsIGxvd2VyX2Rpcl9kZW50cnksICZuZCk7Cit9CisKKy8qKgogICogZWNyeXB0ZnNfbG9va3VwCiAgKiBAZWNyeXB0ZnNfZGlyX2lub2RlOiBUaGUgZUNyeXB0ZnMgZGlyZWN0b3J5IGlub2RlCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5IHRoYXQgd2UgYXJlIGxvb2tpbmcgdXAKQEAgLTM3MywxNCArNDQ0LDEyIEBACiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnktPmRfcGFyZW50KTsKLQltdXRleF9sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQlsb3dlcl9kZW50cnkgPSBsb29rdXBfb25lX2xlbihlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCSAgICAgIGxvd2VyX2Rpcl9kZW50cnksCi0JCQkJICAgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuKTsKLQltdXRleF91bmxvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcihlY3J5cHRmc19kZW50cnksCisJCQkJCQkgbG93ZXJfZGlyX2RlbnRyeSk7CiAJaWYgKElTX0VSUihsb3dlcl9kZW50cnkpKSB7CiAJCXJjID0gUFRSX0VSUihsb3dlcl9kZW50cnkpOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xlbigpIHJldHVybmVkICIKKwkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICIlczogbG9va3VwX29uZV9sb3dlcigpIHJldHVybmVkICIKIAkJCQkiWyVkXSBvbiBsb3dlcl9kZW50cnkgPSBbJXNdXG4iLCBfX2Z1bmNfXywgcmMsCiAJCQkJZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUpOwogCQlnb3RvIG91dF9kX2Ryb3A7CkBAIC00MDIsMTQgKzQ3MSwxMSBAQAogCQkgICAgICAgImZpbGVuYW1lOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKIAl9Ci0JbXV0ZXhfbG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JbG93ZXJfZGVudHJ5ID0gbG9va3VwX29uZV9sZW4oZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUsCi0JCQkJICAgICAgbG93ZXJfZGlyX2RlbnRyeSwKLQkJCQkgICAgICBlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZV9zaXplIC0gMSk7Ci0JbXV0ZXhfdW5sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19sb29rdXBfb25lX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSwKKwkJCQkJCSBsb3dlcl9kaXJfZGVudHJ5KTsKIAlpZiAoSVNfRVJSKGxvd2VyX2RlbnRyeSkpIHsKIAkJcmMgPSBQVFJfRVJSKGxvd2VyX2RlbnRyeSk7Ci0JCWVjcnlwdGZzX3ByaW50ayhLRVJOX0RFQlVHLCAiJXM6IGxvb2t1cF9vbmVfbGVuKCkgcmV0dXJuZWQgIgorCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xvd2VyKCkgcmV0dXJuZWQgIgogCQkJCSJbJWRdIG9uIGxvd2VyX2RlbnRyeSA9IFslc11cbiIsIF9fZnVuY19fLCByYywKIAkJCQllbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSk7CiAJCWdvdG8gb3V0X2RfZHJvcDsKQEAgLTgwNCwxMCArODcwLDIwIEBACiAJCXNpemVfdCBudW1femVyb3MgPSAoUEFHRV9DQUNIRV9TSVpFCiAJCQkJICAgIC0gKGlhLT5pYV9zaXplICYgflBBR0VfQ0FDSEVfTUFTSykpOwogCisKKwkJLyoKKwkJICogWFhYKHRydW5jYXRlKSB0aGlzIHNob3VsZCByZWFsbHkgaGFwcGVuIGF0IHRoZSBiZWdnaW5uaW5nCisJCSAqIG9mIC0+c2V0YXR0ci4gIEJ1dCB0aGUgY29kZSBpcyB0b28gbWVzc3kgdG8gdGhhdCBhcyBwYXJ0CisJCSAqIG9mIGEgbGFyZ2VyIHBhdGNoLiAgZWNyeXB0ZnMgaXMgYWxzbyB0b3RhbGx5IG1pc3Npbmcgb3V0CisJCSAqIG9uIHRoZSBpbm9kZV9jaGFuZ2Vfb2sgY2hlY2sgYXQgdGhlIGJlZ2lubmluZyBvZgorCQkgKiAtPnNldGF0dHIgd2hpbGUgd291bGQgaW5jbHVkZSB0aGlzLgorCQkgKi8KKwkJcmMgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBpYS0+aWFfc2l6ZSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCiAJCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEKSkgewotCQkJcmMgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgaWEtPmlhX3NpemUpOwotCQkJaWYgKHJjKQotCQkJCWdvdG8gb3V0OworCQkJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgaWEtPmlhX3NpemUpOwogCQkJbG93ZXJfaWEtPmlhX3NpemUgPSBpYS0+aWFfc2l6ZTsKIAkJCWxvd2VyX2lhLT5pYV92YWxpZCB8PSBBVFRSX1NJWkU7CiAJCQlnb3RvIG91dDsKQEAgLTgzMCw3ICs5MDYsNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9Ci0JCXNpbXBsZV9zZXRzaXplKGlub2RlLCBpYS0+aWFfc2l6ZSk7CisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGlhLT5pYV9zaXplKTsKIAkJcmMgPSBlY3J5cHRmc193cml0ZV9pbm9kZV9zaXplX3RvX21ldGFkYXRhKGlub2RlKTsKIAkJaWYgKHJjKSB7CiAJCQlwcmludGsoS0VSTl9FUlIJIlByb2JsZW0gd2l0aCAiCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCmluZGV4IDQ2YzRkZDguLmJjYjY4YzAgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCisrKyBiL2ZzL2VjcnlwdGZzL21lc3NhZ2luZy5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkJCSAgICAgIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgc3RydWN0IHBpZCAqcGlkLAogCQkJICAgICAgdTMyIHNlcSkKIHsKLQlzdHJ1Y3QgZWNyeXB0ZnNfZGFlbW9uICpkYWVtb247CisJc3RydWN0IGVjcnlwdGZzX2RhZW1vbiAqdW5pbml0aWFsaXplZF92YXIoZGFlbW9uKTsKIAlzdHJ1Y3QgZWNyeXB0ZnNfbXNnX2N0eCAqbXNnX2N0eDsKIAlzaXplX3QgbXNnX3NpemU7CiAJc3RydWN0IG5zcHJveHkgKm5zcHJveHk7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9zdXBlci5jIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwppbmRleCAwNDM1ODg2Li5mN2ZjMjg2IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9zdXBlci5jCisrKyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKQEAgLTExOCwxMSArMTE4LDE1IEBACiAgKi8KIHN0YXRpYyBpbnQgZWNyeXB0ZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlyZXR1cm4gdmZzX3N0YXRmcyhlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KSwgYnVmKTsKKwlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnkgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KTsKKworCWlmICghbG93ZXJfZGVudHJ5LT5kX3NiLT5zX29wLT5zdGF0ZnMpCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiBsb3dlcl9kZW50cnktPmRfc2ItPnNfb3AtPnN0YXRmcyhsb3dlcl9kZW50cnksIGJ1Zik7CiB9CiAKIC8qKgotICogZWNyeXB0ZnNfY2xlYXJfaW5vZGUKKyAqIGVjcnlwdGZzX2V2aWN0X2lub2RlCiAgKiBAaW5vZGUgLSBUaGUgZWNyeXB0ZnMgaW5vZGUKICAqCiAgKiBDYWxsZWQgYnkgaXB1dCgpIHdoZW4gdGhlIGlub2RlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVkIHplcm8KQEAgLTEzMSw4ICsxMzUsMTAgQEAKICAqIG9uIHRoZSBpbm9kZSBmcmVlIGxpc3QuIFdlIHVzZSB0aGlzIHRvIGRyb3Agb3V0IHJlZmVyZW5jZSB0byB0aGUKICAqIGxvd2VyIGlub2RlLgogICovCi1zdGF0aWMgdm9pZCBlY3J5cHRmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgZWNyeXB0ZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJaXB1dChlY3J5cHRmc19pbm9kZV90b19sb3dlcihpbm9kZSkpOwogfQogCkBAIC0xODQsNiArMTkwLDYgQEAKIAkuZHJvcF9pbm9kZSA9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAogCS5zdGF0ZnMgPSBlY3J5cHRmc19zdGF0ZnMsCiAJLnJlbW91bnRfZnMgPSBOVUxMLAotCS5jbGVhcl9pbm9kZSA9IGVjcnlwdGZzX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZSA9IGVjcnlwdGZzX2V2aWN0X2lub2RlLAogCS5zaG93X29wdGlvbnMgPSBlY3J5cHRmc19zaG93X29wdGlvbnMKIH07CmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggZTE5ZGU2YS4uNzc2MTgzNyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTI5LDcgKzEyOCw3IEBACiAJaWYgKGZpbGUtPmZfcGF0aC5tbnQtPm1udF9mbGFncyAmIE1OVF9OT0VYRUMpCiAJCWdvdG8gZXhpdDsKIAotCWZzbm90aWZ5X29wZW4oZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJZnNub3RpZnlfb3BlbihmaWxlKTsKIAogCWVycm9yID0gLUVOT0VYRUM7CiAJaWYoZmlsZS0+Zl9vcCkgewpAQCAtNjUzLDYgKzY1Miw3IEBACiAJZWxzZQogCQlzdGFja19iYXNlID0gdm1hLT52bV9zdGFydCAtIHN0YWNrX2V4cGFuZDsKICNlbmRpZgorCWN1cnJlbnQtPm1tLT5zdGFydF9zdGFjayA9IGJwcm0tPnA7CiAJcmV0ID0gZXhwYW5kX3N0YWNrKHZtYSwgc3RhY2tfYmFzZSk7CiAJaWYgKHJldCkKIAkJcmV0ID0gLUVGQVVMVDsKQEAgLTY4Myw3ICs2ODMsNyBAQAogCWlmIChmaWxlLT5mX3BhdGgubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKQogCQlnb3RvIGV4aXQ7CiAKLQlmc25vdGlmeV9vcGVuKGZpbGUtPmZfcGF0aC5kZW50cnkpOworCWZzbm90aWZ5X29wZW4oZmlsZSk7CiAKIAllcnIgPSBkZW55X3dyaXRlX2FjY2VzcyhmaWxlKTsKIAlpZiAoZXJyKQpAQCAtMTg5MSwxMyArMTg5MSw3IEBACiAJICovCiAJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOwogCi0JLyoKLQkgKiBsb2NrX2tlcm5lbCgpIGJlY2F1c2UgZm9ybWF0X2NvcmVuYW1lKCkgaXMgY29udHJvbGxlZCBieSBzeXNjdGwsIHdoaWNoCi0JICogdXNlcyBsb2NrX2tlcm5lbCgpCi0JICovCi0gCWxvY2tfa2VybmVsKCk7CiAJaXNwaXBlID0gZm9ybWF0X2NvcmVuYW1lKGNvcmVuYW1lLCBzaWducik7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAgCWlmIChpc3BpcGUpIHsKIAkJaW50IGR1bXBfY291bnQ7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9leG9mcy5oIGIvZnMvZXhvZnMvZXhvZnMuaAppbmRleCAyMjcyMWIyLi4yZGM5MjVmIDEwMDY0NAotLS0gYS9mcy9leG9mcy9leG9mcy5oCisrKyBiL2ZzL2V4b2ZzL2V4b2ZzLmgKQEAgLTI1Niw3ICsyNTYsNiBAQAogfQogCiAvKiBpbm9kZS5jICAgICAgICAgICAgICAgKi8KLXZvaWQgZXhvZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgZXhvZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGludCBleG9mc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCkBAIC0yNjQsNyArMjYzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4b2ZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwogc3RydWN0IGlub2RlICpleG9mc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gaW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7Ci1leHRlcm4gdm9pZCBleG9mc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZXhvZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogCiAvKiBkaXIuYzogICAgICAgICAgICAgICAgKi8KIGludCBleG9mc19hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2ZpbGUuYyBiL2ZzL2V4b2ZzL2ZpbGUuYwppbmRleCBmZWY2ODk5Li42OGNiMjNlIDEwMDY0NAotLS0gYS9mcy9leG9mcy9maWxlLmMKKysrIGIvZnMvZXhvZnMvZmlsZS5jCkBAIC0zMCw5ICszMCw2IEBACiAgKiBhbG9uZyB3aXRoIGV4b2ZzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCi0KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotCiAjaW5jbHVkZSAiZXhvZnMuaCIKIAogc3RhdGljIGludCBleG9mc19yZWxlYXNlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCkBAIC00MCwxOSArMzcsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogZXhvZnNfZmlsZV9mc3luYyAtIGZsdXNoIHRoZSBpbm9kZSB0byBkaXNrCisgKgorICogICBOb3RlLCBpbiBleG9mcyBhbGwgbWV0YWRhdGEgaXMgd3JpdHRlbiBhcyBwYXJ0IG9mIGlub2RlLCByZWdhcmRsZXNzLgorICogICBUaGUgd3JpdGVvdXQgaXMgc3luY2hyb25vdXMKKyAqLwogc3RhdGljIGludCBleG9mc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgZGF0YXN5bmMpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbHAtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKKwkJLm5yX3RvX3dyaXRlID0gMCwgLyogbWV0YWRhdGEtb25seTsgY2FsbGVyIHRha2VzIGNhcmUgb2YgZGF0YSAqLworCX07CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAotCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQobWFwcGluZyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpKQorCQlyZXR1cm4gMDsKKwlpZiAoZGF0YXN5bmMgJiYgIShpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfREFUQVNZTkMpKQorCQlyZXR1cm4gMDsKIAotCS8qIHN5bmMgdGhlIGlub2RlIGF0dHJpYnV0ZXMgKi8KLQlyZXQgPSB3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDEpOworCXJldCA9IHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOwogCiAJLyogVGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gd3JpdGUgdGhlIHNiICovCiAJLyogVE9ETzogU2VjaGVkdWxlIGFuIHNiLXN5bmMgb24gY3JlYXRlICovCkBAIC02NSw5ICs3MCw5IEBACiAKIHN0YXRpYyBpbnQgZXhvZnNfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgaWQpCiB7Ci0JZXhvZnNfZmlsZV9mc3luYyhmaWxlLCAxKTsKKwlpbnQgcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIDApOwogCS8qIFRPRE86IEZsdXNoIHRoZSBPU0QgdGFyZ2V0ICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19maWxlX29wZXJhdGlvbnMgPSB7CkBAIC04Niw2ICs5MSw1IEBACiB9OwogCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLnRydW5jYXRlCT0gZXhvZnNfdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBleG9mc19zZXRhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCmluZGV4IDRiYjZlZjguLmViNzM2OGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lub2RlLmMKKysrIGIvZnMvZXhvZnMvaW5vZGUuYwpAQCAtMzIsOSArMzIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAKICNpbmNsdWRlICJleG9mcy5oIgogCkBAIC02OTcsNiArNjk0LDEzIEBACiAJcmV0dXJuIHdyaXRlX2V4ZWMoJnBjb2wpOwogfQogCisvKiBpX211dGV4IGhlbGQgdXNpbmcgaW5vZGUtPmlfc2l6ZSBkaXJlY3RseSAqLworc3RhdGljIHZvaWQgX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgdG8pCit7CisJaWYgKHRvID4gaW5vZGUtPmlfc2l6ZSkKKwkJdHJ1bmNhdGVfcGFnZWNhY2hlKGlub2RlLCB0bywgaW5vZGUtPmlfc2l6ZSk7Cit9CisKIGludCBleG9mc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCkBAIC03MTAsNyArNzE0LDcgQEAKIAkJCQkJIGZzZGF0YSk7CiAJCWlmIChyZXQpIHsKIAkJCUVYT0ZTX0RCR01TRygic2ltcGxlX3dyaXRlX2JlZ2luIGZhaWxkXG4iKTsKLQkJCXJldHVybiByZXQ7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXBhZ2UgPSAqcGFnZXA7CkBAIC03MjUsNiArNzI5LDkgQEAKIAkJCUVYT0ZTX0RCR01TRygiX19yZWFkcGFnZV9maWxsZXIgZmFpbGRcbiIpOwogCQl9CiAJfQorb3V0OgorCWlmICh1bmxpa2VseShyZXQpKQorCQlfd3JpdGVfZmFpbGVkKG1hcHBpbmctPmhvc3QsIHBvcyArIGxlbik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzUwLDYgKzc1NywxMCBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBzaW1wbGVfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcscG9zLCBsZW4sIGNvcGllZCwgcGFnZSwgZnNkYXRhKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJX3dyaXRlX2ZhaWxlZChpbm9kZSwgcG9zICsgbGVuKTsKKworCS8qIFRPRE86IG9uY2Ugc2ltcGxlX3dyaXRlX2VuZCBtYXJrcyBpbm9kZSBkaXJ0eSByZW1vdmUgKi8KIAlpZiAoaV9zaXplICE9IGlub2RlLT5pX3NpemUpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCXJldHVybiByZXQ7CkBAIC03NTksMTUgKzc3MCwxMyBAQAogewogCUVYT0ZTX0RCR01TRygicGFnZSAweCVseFxuIiwgcGFnZS0+aW5kZXgpOwogCVdBUk5fT04oMSk7Ci0JcmV0dXJuIHRyeV90b19mcmVlX2J1ZmZlcnMocGFnZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGV4b2ZzX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKLQlFWE9GU19EQkdNU0coInBhZ2VfaGFzX2J1ZmZlcnM9PiVkXG4iLCBwYWdlX2hhc19idWZmZXJzKHBhZ2UpKTsKKwlFWE9GU19EQkdNU0coInBhZ2UgMHglbHggb2Zmc2V0IDB4JWx4XG4iLCBwYWdlLT5pbmRleCwgb2Zmc2V0KTsKIAlXQVJOX09OKDEpOwotCi0JYmxvY2tfaW52YWxpZGF0ZXBhZ2UocGFnZSwgb2Zmc2V0KTsKIH0KIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleG9mc19hb3BzID0gewpAQCAtODA4LDg3ICs4MTcsNTUgQEAKIAlyZXR1cm4gU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiAob2ktPmlfZGF0YVswXSAhPSAwKTsKIH0KIAotLyoKLSAqIGdldF9ibG9ja190IC0gRmlsbCBpbiBhIGJ1ZmZlcl9oZWFkCi0gKiBBbiBPU0QgdGFrZXMgY2FyZSBvZiBibG9jayBhbGxvY2F0aW9uIHNvIHdlIGp1c3QgZmFrZSBhbiBhbGxvY2F0aW9uIGJ5Ci0gKiBwdXR0aW5nIGluIHRoZSBpbm9kZSdzIHNlY3Rvcl90IGluIHRoZSBidWZmZXJfaGVhZC4KLSAqIFRPRE86IFdoYXQgYWJvdXQgdGhlIGNhc2Ugb2YgY3JlYXRlPT0wIGFuZCBAaWJsb2NrIGRvZXMgbm90IGV4aXN0IGluIHRoZQotICogb2JqZWN0PwotICovCi1zdGF0aWMgaW50IGV4b2ZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKLXsKLQltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgaWJsb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQogY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aCA9IEFUVFJfREVGKAogCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04sIE9TRF9BVFRSX09JX0xPR0lDQUxfTEVOR1RILCA4KTsKIAotc3RhdGljIGludCBfZG9fdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgX2RvX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogewogCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7Ci0JbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCWludCByZXQ7CiAKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCi0Jbm9iaF90cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlzaXplLCBleG9mc19nZXRfYmxvY2spOworCXJldCA9IGV4b2ZzX29pX3RydW5jYXRlKG9pLCAodTY0KW5ld3NpemUpOworCWlmIChsaWtlbHkoIXJldCkpCisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIG5ld3NpemUpOwogCi0JcmV0ID0gZXhvZnNfb2lfdHJ1bmNhdGUob2ksICh1NjQpaXNpemUpOwotCUVYT0ZTX0RCR01TRygiKDB4JWx4KSBzaXplPTB4JWxseFxuIiwgaW5vZGUtPmlfaW5vLCBpc2l6ZSk7CisJRVhPRlNfREJHTVNHKCIoMHglbHgpIHNpemU9MHglbGx4IHJldD0+JWRcbiIsCisJCSAgICAgaW5vZGUtPmlfaW5vLCBuZXdzaXplLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBUcnVuY2F0ZSBhIGZpbGUgdG8gdGhlIHNwZWNpZmllZCBzaXplIC0gYWxsIHdlIGhhdmUgdG8gZG8gaXMgc2V0IHRoZSBzaXplCi0gKiBhdHRyaWJ1dGUuICBXZSBtYWtlIHN1cmUgdGhlIG9iamVjdCBleGlzdHMgZmlyc3QuCi0gKi8KLXZvaWQgZXhvZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOwotCWludCByZXQ7Ci0KLQlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkKLQkgICAgIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQotCQlyZXR1cm47Ci0JaWYgKGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCi0JCXJldHVybjsKLQlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQotCQlyZXR1cm47Ci0KLQkvKiBpZiB3ZSBhcmUgYWJvdXQgdG8gdHJ1bmNhdGUgYW4gb2JqZWN0LCBhbmQgaXQgaGFzbid0IGJlZW4KLQkgKiBjcmVhdGVkIHlldCwgd2FpdAotCSAqLwotCWlmICh1bmxpa2VseSh3YWl0X29ial9jcmVhdGVkKG9pKSkpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IF9kb190cnVuY2F0ZShpbm9kZSk7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi1vdXQ6Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JcmV0dXJuOwotZmFpbDoKLQltYWtlX2JhZF9pbm9kZShpbm9kZSk7Ci0JZ290byBvdXQ7Ci19Ci0KLS8qCi0gKiBTZXQgaW5vZGUgYXR0cmlidXRlcyAtIGp1c3QgY2FsbCBnZW5lcmljIGZ1bmN0aW9ucy4KKyAqIFNldCBpbm9kZSBhdHRyaWJ1dGVzIC0gdXBkYXRlIHNpemUgYXR0cmlidXRlIG9uIE9TRCBpZiBuZWVkZWQsCisgKiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBqdXN0IGNhbGwgZ2VuZXJpYyBmdW5jdGlvbnMuCiAgKi8KIGludCBleG9mc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cik7Ci0JaWYgKGVycm9yKQorCS8qIGlmIHdlIGFyZSBhYm91dCB0byBtb2RpZnkgYW4gb2JqZWN0LCBhbmQgaXQgaGFzbid0IGJlZW4KKwkgKiBjcmVhdGVkIHlldCwgd2FpdAorCSAqLworCWVycm9yID0gd2FpdF9vYmpfY3JlYXRlZChleG9mc19pKGlub2RlKSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBpYXR0cik7Ci0JcmV0dXJuIGVycm9yOworCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cik7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGlhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IF9kb190cnVuY2F0ZShpbm9kZSwgaWF0dHItPmlhX3NpemUpOworCQlpZiAodW5saWtlbHkoZXJyb3IpKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXNldGF0dHJfY29weShpbm9kZSwgaWF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9pbm9kZV9maWxlX2xheW91dCA9IEFUVFJfREVGKApAQCAtMTMyNSw3ICsxMzAyLDcgQEAKICAqIGZyb20gdGhlIE9TRCBoZXJlLiAgV2UgbWFrZSBzdXJlIHRoZSBvYmplY3Qgd2FzIGNyZWF0ZWQgYmVmb3JlIHdlIHRyeSBhbmQKICAqIGRlbGV0ZSBpdC4KICAqLwotdm9pZCBleG9mc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgZXhvZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKQEAgLTEzMzUsMjggKzEzMTIsMjUgQEAKIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAotCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQorCS8qIFRPRE86IHNob3VsZCBkbyBiZXR0ZXIgaGVyZSAqLworCWlmIChpbm9kZS0+aV9ubGluayB8fCBpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG5vX2RlbGV0ZTsKIAotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWV4b2ZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOwotCiAJaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JaWYgKGlub2RlLT5pX2Jsb2NrcykKLQkJZXhvZnNfdHJ1bmNhdGUoaW5vZGUpOwotCi0JY2xlYXJfaW5vZGUoaW5vZGUpOwotCi0JcmV0ID0gZXhvZnNfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJmlvcyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJRVhPRlNfRVJSKCIlczogZXhvZnNfZ2V0X2lvX3N0YXRlIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQorCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCiAJLyogaWYgd2UgYXJlIGRlbGV0aW5nIGFuIG9iaiB0aGF0IGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LCB3YWl0ICovCiAJaWYgKCFvYmpfY3JlYXRlZChvaSkpIHsKIAkJQlVHX09OKCFvYmpfMmJjcmVhdGVkKG9pKSk7CiAJCXdhaXRfZXZlbnQob2ktPmlfd3EsIG9ial9jcmVhdGVkKG9pKSk7CisJCS8qIGlnbm9yZSB0aGUgZXJyb3IgYXR0ZW1wdCBhIHJlbW92ZSBhbnl3YXkgKi8KKwl9CisKKwkvKiBOb3cgUmVtb3ZlIHRoZSBPU0Qgb2JqZWN0cyAqLworCXJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmc2JpLT5sYXlvdXQsICZpb3MpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigiJXM6IGV4b2ZzX2dldF9pb19zdGF0ZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOwogCX0KIAogCWlvcy0+b2JqLmlkID0gZXhvZnNfb2lfb2Jqbm8ob2kpOwpAQCAtMTM3NCw1ICsxMzQ4LDUgQEAKIAlyZXR1cm47CiAKIG5vX2RlbGV0ZToKLQljbGVhcl9pbm9kZShpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9leG9mcy9pb3MuYyBiL2ZzL2V4b2ZzL2lvcy5jCmluZGV4IDQzMzdjYWQuLjY1NTBiZjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lvcy5jCisrKyBiL2ZzL2V4b2ZzL2lvcy5jCkBAIC0zMDUsOCArMzA1LDYgQEAKIHN0cnVjdCBfc3RyaXBpbmdfaW5mbyB7CiAJdTY0IG9ial9vZmZzZXQ7CiAJdTY0IGdyb3VwX2xlbmd0aDsKLQl1NjQgdG90YWxfZ3JvdXBfbGVuZ3RoOwotCXU2NCBNYWpvcjsKIAl1bnNpZ25lZCBkZXY7CiAJdW5zaWduZWQgdW5pdF9vZmY7CiB9OwpAQCAtMzQzLDggKzM0MSw2IEBACiAJCQkJICAoTSAqIGdyb3VwX2RlcHRoICogc3RyaXBlX3VuaXQpOwogCiAJc2ktPmdyb3VwX2xlbmd0aCA9IFQgLSBIOwotCXNpLT50b3RhbF9ncm91cF9sZW5ndGggPSBUOwotCXNpLT5NYWpvciA9IE07CiB9CiAKIHN0YXRpYyBpbnQgX2FkZF9zdHJpcGVfdW5pdChzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgIHVuc2lnbmVkICpjdXJfcGcsCkBAIC0zOTIsMjAgKzM4OCwxOSBAQAogfQogCiBzdGF0aWMgaW50IF9wcmVwYXJlX29uZV9ncm91cChzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdTY0IGxlbmd0aCwKLQkJCSAgICAgIHN0cnVjdCBfc3RyaXBpbmdfaW5mbyAqc2ksIHVuc2lnbmVkIGZpcnN0X2NvbXApCisJCQkgICAgICBzdHJ1Y3QgX3N0cmlwaW5nX2luZm8gKnNpKQogewogCXVuc2lnbmVkIHN0cmlwZV91bml0ID0gaW9zLT5sYXlvdXQtPnN0cmlwZV91bml0OwogCXVuc2lnbmVkIG1pcnJvcnNfcDEgPSBpb3MtPmxheW91dC0+bWlycm9yc19wMTsKIAl1bnNpZ25lZCBkZXZzX2luX2dyb3VwID0gaW9zLT5sYXlvdXQtPmdyb3VwX3dpZHRoICogbWlycm9yc19wMTsKIAl1bnNpZ25lZCBkZXYgPSBzaS0+ZGV2OwogCXVuc2lnbmVkIGZpcnN0X2RldiA9IGRldiAtIChkZXYgJSBkZXZzX2luX2dyb3VwKTsKLQl1bnNpZ25lZCBjb21wID0gZmlyc3RfY29tcCArIChkZXYgLSBmaXJzdF9kZXYpOwogCXVuc2lnbmVkIG1heF9jb21wID0gaW9zLT5udW1kZXZzID8gaW9zLT5udW1kZXZzIC0gbWlycm9yc19wMSA6IDA7CiAJdW5zaWduZWQgY3VyX3BnID0gaW9zLT5wYWdlc19jb25zdW1lZDsKIAlpbnQgcmV0ID0gMDsKIAogCXdoaWxlIChsZW5ndGgpIHsKLQkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2W2NvbXBdOworCQlzdHJ1Y3QgZXhvZnNfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbZGV2XTsKIAkJdW5zaWduZWQgY3VyX2xlbiwgcGFnZV9vZmYgPSAwOwogCiAJCWlmICghcGVyX2Rldi0+bGVuZ3RoKSB7CkBAIC00MjQsMTEgKzQxOSw4IEBACiAJCQkJY3VyX2xlbiA9IHN0cmlwZV91bml0OwogCQkJfQogCi0JCQlpZiAobWF4X2NvbXAgPCBjb21wKQotCQkJCW1heF9jb21wID0gY29tcDsKLQotCQkJZGV2ICs9IG1pcnJvcnNfcDE7Ci0JCQlkZXYgPSAoZGV2ICUgZGV2c19pbl9ncm91cCkgKyBmaXJzdF9kZXY7CisJCQlpZiAobWF4X2NvbXAgPCBkZXYpCisJCQkJbWF4X2NvbXAgPSBkZXY7CiAJCX0gZWxzZSB7CiAJCQljdXJfbGVuID0gc3RyaXBlX3VuaXQ7CiAJCX0KQEAgLTQ0MCw4ICs0MzIsOCBAQAogCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCWdvdG8gb3V0OwogCi0JCWNvbXAgKz0gbWlycm9yc19wMTsKLQkJY29tcCA9IChjb21wICUgZGV2c19pbl9ncm91cCkgKyBmaXJzdF9jb21wOworCQlkZXYgKz0gbWlycm9yc19wMTsKKwkJZGV2ID0gKGRldiAlIGRldnNfaW5fZ3JvdXApICsgZmlyc3RfZGV2OwogCiAJCWxlbmd0aCAtPSBjdXJfbGVuOwogCX0KQEAgLTQ1NCwxOCArNDQ2LDE1IEBACiBzdGF0aWMgaW50IF9wcmVwYXJlX2Zvcl9zdHJpcGluZyhzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKIHsKIAl1NjQgbGVuZ3RoID0gaW9zLT5sZW5ndGg7CisJdTY0IG9mZnNldCA9IGlvcy0+b2Zmc2V0OwogCXN0cnVjdCBfc3RyaXBpbmdfaW5mbyBzaTsKLQl1bnNpZ25lZCBkZXZzX2luX2dyb3VwID0gaW9zLT5sYXlvdXQtPmdyb3VwX3dpZHRoICoKLQkJCQkgaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDE7Ci0JdW5zaWduZWQgZmlyc3RfY29tcCA9IDA7CiAJaW50IHJldCA9IDA7CiAKLQlfY2FsY19zdHJpcGVfaW5mbyhpb3MsIGlvcy0+b2Zmc2V0LCAmc2kpOwotCiAJaWYgKCFpb3MtPnBhZ2VzKSB7CiAJCWlmIChpb3MtPmtlcm5fYnVmZikgewogCQkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2WzBdOwogCisJCQlfY2FsY19zdHJpcGVfaW5mbyhpb3MsIGlvcy0+b2Zmc2V0LCAmc2kpOwogCQkJcGVyX2Rldi0+b2Zmc2V0ID0gc2kub2JqX29mZnNldDsKIAkJCXBlcl9kZXYtPmRldiA9IHNpLmRldjsKIApAQCAtNDc5LDI2ICs0NjgsMTcgQEAKIAl9CiAKIAl3aGlsZSAobGVuZ3RoKSB7CisJCV9jYWxjX3N0cmlwZV9pbmZvKGlvcywgb2Zmc2V0LCAmc2kpOworCiAJCWlmIChsZW5ndGggPCBzaS5ncm91cF9sZW5ndGgpCiAJCQlzaS5ncm91cF9sZW5ndGggPSBsZW5ndGg7CiAKLQkJcmV0ID0gX3ByZXBhcmVfb25lX2dyb3VwKGlvcywgc2kuZ3JvdXBfbGVuZ3RoLCAmc2ksIGZpcnN0X2NvbXApOworCQlyZXQgPSBfcHJlcGFyZV9vbmVfZ3JvdXAoaW9zLCBzaS5ncm91cF9sZW5ndGgsICZzaSk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJZ290byBvdXQ7CiAKKwkJb2Zmc2V0ICs9IHNpLmdyb3VwX2xlbmd0aDsKIAkJbGVuZ3RoIC09IHNpLmdyb3VwX2xlbmd0aDsKLQotCQlzaS5ncm91cF9sZW5ndGggPSBzaS50b3RhbF9ncm91cF9sZW5ndGg7Ci0JCXNpLnVuaXRfb2ZmID0gMDsKLQkJKytzaS5NYWpvcjsKLQkJc2kub2JqX29mZnNldCA9IHNpLk1ham9yICogaW9zLT5sYXlvdXQtPnN0cmlwZV91bml0ICoKLQkJCQkJCWlvcy0+bGF5b3V0LT5ncm91cF9kZXB0aDsKLQotCQlzaS5kZXYgPSAoc2kuZGV2IC0gKHNpLmRldiAlIGRldnNfaW5fZ3JvdXApKSArIGRldnNfaW5fZ3JvdXA7Ci0JCXNpLmRldiAlPSBpb3MtPmxheW91dC0+c19udW1kZXZzOwotCi0JCWZpcnN0X2NvbXAgKz0gZGV2c19pbl9ncm91cDsKLQkJZmlyc3RfY29tcCAlPSBpb3MtPmxheW91dC0+c19udW1kZXZzOwogCX0KIAogb3V0OgpAQCAtNTk5LDcgKzU3OSw3IEBACiAJCQl9IGVsc2UgewogCQkJCWJpbyA9IG1hc3Rlcl9kZXYtPmJpbzsKIAkJCQkvKiBGSVhNRTogYmlvX3NldF9kaXIoKSAqLwotCQkJCWJpby0+YmlfcncgfD0gKDEgPDwgQklPX1JXKTsKKwkJCQliaW8tPmJpX3J3IHw9IFJFUV9XUklURTsKIAkJCX0KIAogCQkJb3NkX3JlcV93cml0ZShvciwgJmlvcy0+b2JqLCBwZXJfZGV2LT5vZmZzZXQsIGJpbywKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL3N1cGVyLmMgYi9mcy9leG9mcy9zdXBlci5jCmluZGV4IDAzMTQ5YjkuLjA0N2U5MmYgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL3N1cGVyLmMKKysrIGIvZnMvZXhvZnMvc3VwZXIuYwpAQCAtMzEsNyArMzEsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KQEAgLTc0Myw3ICs3NDIsNyBAQAogCS5hbGxvY19pbm9kZSAgICA9IGV4b2ZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlICA9IGV4b2ZzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlICAgID0gZXhvZnNfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZSAgID0gZXhvZnNfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZSAgICA9IGV4b2ZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIgICAgICA9IGV4b2ZzX3B1dF9zdXBlciwKIAkud3JpdGVfc3VwZXIgICAgPSBleG9mc193cml0ZV9zdXBlciwKIAkuc3luY19mcwk9IGV4b2ZzX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCBlODc2NmEzLi5jNmM2ODRiIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTU3MSw3ICs1NzEsNyBAQAogZXJyb3JfcmV0dXJuOgogCWJyZWxzZShiaXRtYXBfYmgpOwogCXJlbGVhc2VfYmxvY2tzKHNiLCBmcmVlZCk7Ci0JZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgZnJlZWQpOworCWRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShpbm9kZSwgZnJlZWQpOwogfQogCiAvKioKQEAgLTE0MTgsNyArMTQxOCw4IEBACiAKIAkqZXJycCA9IDA7CiAJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50LW51bSk7CisJZHF1b3RfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAqY291bnQtbnVtKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkqY291bnQgPSBudW07CiAJcmV0dXJuIHJldF9ibG9jazsKIApAQCAtMTQyOCw4ICsxNDI5LDEwIEBACiAJLyoKIAkgKiBVbmRvIHRoZSBibG9jayBhbGxvY2F0aW9uCiAJICovCi0JaWYgKCFwZXJmb3JtZWRfYWxsb2NhdGlvbikKLQkJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50KTsKKwlpZiAoIXBlcmZvcm1lZF9hbGxvY2F0aW9uKSB7CisJCWRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShpbm9kZSwgKmNvdW50KTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQogCWJyZWxzZShiaXRtYXBfYmgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggNzUxNjk1Ny4uNzY0MTA5OCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYworKysgYi9mcy9leHQyL2Rpci5jCkBAIC00NDgsNiArNDQ4LDExIEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGludCBleHQyX3ByZXBhcmVfY2h1bmsoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKK3sKKwlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBwb3MsIGxlbiwgZXh0Ml9nZXRfYmxvY2spOworfQorCiAvKiBSZWxlYXNlcyB0aGUgcGFnZSAqLwogdm9pZCBleHQyX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXh0Ml9kaXJfZW50cnlfMiAqZGUsCiAJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdXBkYXRlX3RpbWVzKQpAQCAtNDU4LDggKzQ2Myw3IEBACiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX2V4dDJfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCBsZW4sCi0JCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gZXh0Ml9wcmVwYXJlX2NodW5rKHBhZ2UsIHBvcywgbGVuKTsKIAlCVUdfT04oZXJyKTsKIAlkZS0+aW5vZGUgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOwogCWV4dDJfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKQEAgLTU0Miw4ICs1NDYsNyBAQAogZ290X2l0OgogCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsKIAkJKGNoYXIqKWRlIC0gKGNoYXIqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQllcnIgPSBfX2V4dDJfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCByZWNfbGVuLCAwLAotCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwllcnIgPSBleHQyX3ByZXBhcmVfY2h1bmsocGFnZSwgcG9zLCByZWNfbGVuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGRlLT5pbm9kZSkgewpAQCAtNTc2LDggKzU3OSw3IEBACiAgKi8KIGludCBleHQyX2RlbGV0ZV9lbnRyeSAoc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBkaXIsIHN0cnVjdCBwYWdlICogcGFnZSApCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXVuc2lnbmVkIGZyb20gPSAoKGNoYXIqKWRpciAtIGthZGRyKSAmIH4oZXh0Ml9jaHVua19zaXplKGlub2RlKS0xKTsKIAl1bnNpZ25lZCB0byA9ICgoY2hhciAqKWRpciAtIGthZGRyKSArCkBAIC02MDEsOCArNjAzLDcgQEAKIAkJZnJvbSA9IChjaGFyKilwZGUgLSAoY2hhciopcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgZnJvbTsKIAlsb2NrX3BhZ2UocGFnZSk7Ci0JZXJyID0gX19leHQyX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgdG8gLSBmcm9tLCAwLAotCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwllcnIgPSBleHQyX3ByZXBhcmVfY2h1bmsocGFnZSwgcG9zLCB0byAtIGZyb20pOwogCUJVR19PTihlcnIpOwogCWlmIChwZGUpCiAJCXBkZS0+cmVjX2xlbiA9IGV4dDJfcmVjX2xlbl90b19kaXNrKHRvIC0gZnJvbSk7CkBAIC02MjEsOCArNjIyLDcgQEAKICAqLwogaW50IGV4dDJfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCkKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgMCk7CiAJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IGV4dDJfY2h1bmtfc2l6ZShpbm9kZSk7CiAJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBkZTsKIAlpbnQgZXJyOwpAQCAtNjMxLDggKzYzMSw3IEBACiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IF9fZXh0Ml93cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCAwLCBjaHVua19zaXplLCAwLAotCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwllcnIgPSBleHQyX3ByZXBhcmVfY2h1bmsocGFnZSwgMCwgY2h1bmtfc2l6ZSk7CiAJaWYgKGVycikgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9leHQyLmggYi9mcy9leHQyL2V4dDIuaAppbmRleCA1MmIzNGYxLi40MTZkYWE2IDEwMDY0NAotLS0gYS9mcy9leHQyL2V4dDIuaAorKysgYi9mcy9leHQyL2V4dDIuaApAQCAtMTE5LDcgKzExOSw3IEBACiAvKiBpbm9kZS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlICpleHQyX2lnZXQgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgZXh0Ml93cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKLWV4dGVybiB2b2lkIGV4dDJfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiBleHRlcm4gaW50IGV4dDJfc2V0YXR0ciAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CkBAIC0xMjcsOSArMTI3LDYgQEAKIGV4dGVybiB2b2lkIGV4dDJfZ2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBleHQyX2lub2RlX2luZm8gKik7CiBleHRlcm4gaW50IGV4dDJfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCSAgICAgICB1NjQgc3RhcnQsIHU2NCBsZW4pOwotaW50IF9fZXh0Ml93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpOwogCiAvKiBpb2N0bC5jICovCiBleHRlcm4gbG9uZyBleHQyX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2lhbGxvYy5jIGIvZnMvZXh0Mi9pYWxsb2MuYwppbmRleCA5MzhkYmM3Li5hZDcwNDc5IDEwMDY0NAotLS0gYS9mcy9leHQyL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDIvaWFsbG9jLmMKQEAgLTExOCwxOSArMTE4LDE0IEBACiAJICogTm90ZTogd2UgbXVzdCBmcmVlIGFueSBxdW90YSBiZWZvcmUgbG9ja2luZyB0aGUgc3VwZXJibG9jaywKIAkgKiBhcyB3cml0aW5nIHRoZSBxdW90YSB0byBkaXNrIG1heSBuZWVkIHRoZSBsb2NrIGFzIHdlbGwuCiAJICovCi0JaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKSB7Ci0JCS8qIFF1b3RhIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gaXB1dCgpICovCi0JCWV4dDJfeGF0dHJfZGVsZXRlX2lub2RlKGlub2RlKTsKLQkJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7Ci0JCWRxdW90X2Ryb3AoaW5vZGUpOwotCX0KKwkvKiBRdW90YSBpcyBhbHJlYWR5IGluaXRpYWxpemVkIGluIGlwdXQoKSAqLworCWV4dDJfeGF0dHJfZGVsZXRlX2lub2RlKGlub2RlKTsKKwlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKKwlkcXVvdF9kcm9wKGlub2RlKTsKIAogCWVzID0gRVhUMl9TQihzYiktPnNfZXM7CiAJaXNfZGlyZWN0b3J5ID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKIAotCS8qIERvIHRoaXMgQkVGT1JFIG1hcmtpbmcgdGhlIGlub2RlIG5vdCBpbiB1c2Ugb3IgcmV0dXJuaW5nIGFuIGVycm9yICovCi0JY2xlYXJfaW5vZGUgKGlub2RlKTsKLQogCWlmIChpbm8gPCBFWFQyX0ZJUlNUX0lOTyhzYikgfHwKIAkgICAgaW5vID4gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgewogCQlleHQyX2Vycm9yIChzYiwgImV4dDJfZnJlZV9pbm9kZSIsCmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggMzY3NTA4OC4uOTQwYzk2MSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtNjksMjYgKzY5LDQyIEBACiAvKgogICogQ2FsbGVkIGF0IHRoZSBsYXN0IGlwdXQoKSBpZiBpX25saW5rIGlzIHplcm8uCiAgKi8KLXZvaWQgZXh0Ml9kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQordm9pZCBleHQyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqIGlub2RlKQogewotCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKKwlzdHJ1Y3QgZXh0Ml9ibG9ja19hbGxvY19pbmZvICpyc3Y7CisJaW50IHdhbnRfZGVsZXRlID0gMDsKKworCWlmICghaW5vZGUtPmlfbmxpbmsgJiYgIWlzX2JhZF9pbm9kZShpbm9kZSkpIHsKKwkJd2FudF9kZWxldGUgPSAxOwogCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwl9IGVsc2UgeworCQlkcXVvdF9kcm9wKGlub2RlKTsKKwl9CisKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CiAKLQlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKLQkJZ290byBub19kZWxldGU7Ci0JRVhUMl9JKGlub2RlKS0+aV9kdGltZQk9IGdldF9zZWNvbmRzKCk7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CisJaWYgKHdhbnRfZGVsZXRlKSB7CisJCS8qIHNldCBkdGltZSAqLworCQlFWFQyX0koaW5vZGUpLT5pX2R0aW1lCT0gZ2V0X3NlY29uZHMoKTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCV9fZXh0Ml93cml0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOworCQkvKiB0cnVuY2F0ZSB0byAwICovCisJCWlub2RlLT5pX3NpemUgPSAwOworCQlpZiAoaW5vZGUtPmlfYmxvY2tzKQorCQkJZXh0Ml90cnVuY2F0ZV9ibG9ja3MoaW5vZGUsIDApOworCX0KIAotCWlub2RlLT5pX3NpemUgPSAwOwotCWlmIChpbm9kZS0+aV9ibG9ja3MpCi0JCWV4dDJfdHJ1bmNhdGVfYmxvY2tzKGlub2RlLCAwKTsKLQlleHQyX2ZyZWVfaW5vZGUgKGlub2RlKTsKKwlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCi0JcmV0dXJuOwotbm9fZGVsZXRlOgotCWNsZWFyX2lub2RlKGlub2RlKTsJLyogV2UgbXVzdCBndWFyYW50ZWUgY2xlYXJpbmcgb2YgaW5vZGUuLi4gKi8KKwlleHQyX2Rpc2NhcmRfcmVzZXJ2YXRpb24oaW5vZGUpOworCXJzdiA9IEVYVDJfSShpbm9kZSktPmlfYmxvY2tfYWxsb2NfaW5mbzsKKwlFWFQyX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOworCWlmICh1bmxpa2VseShyc3YpKQorCQlrZnJlZShyc3YpOworCisJaWYgKHdhbnRfZGVsZXRlKQorCQlleHQyX2ZyZWVfaW5vZGUoaW5vZGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC00MjMsNiArNDM5LDggQEAKIGZhaWxlZF9vdXQ6CiAJZm9yIChpID0gMDsgaSA8aW5kZXg7IGkrKykKIAkJZXh0Ml9mcmVlX2Jsb2Nrcyhpbm9kZSwgbmV3X2Jsb2Nrc1tpXSwgMSk7CisJaWYgKGluZGV4KQorCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjUsMTQgKzc4Myw2IEBACiAJcmV0dXJuIG1wYWdlX3JlYWRwYWdlcyhtYXBwaW5nLCBwYWdlcywgbnJfcGFnZXMsIGV4dDJfZ2V0X2Jsb2NrKTsKIH0KIAotaW50IF9fZXh0Ml93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCi17Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luX25ld3RydW5jKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywKLQkJCQkJcGFnZXAsIGZzZGF0YSwgZXh0Ml9nZXRfYmxvY2spOwotfQotCiBzdGF0aWMgaW50CiBleHQyX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKQEAgLTc4MCw4ICs3OTAsOCBAQAogewogCWludCByZXQ7CiAKLQkqcGFnZXAgPSBOVUxMOwotCXJldCA9IF9fZXh0Ml93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEpOworCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsCisJCQkJZXh0Ml9nZXRfYmxvY2spOwogCWlmIChyZXQgPCAwKQogCQlleHQyX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pOwogCXJldHVybiByZXQ7CkBAIC04MDYsMTMgKzgxNiw4IEBACiB7CiAJaW50IHJldDsKIAotCS8qCi0JICogRGlyLWluLXBhZ2VjYWNoZSBzdGlsbCB1c2VzIGV4dDJfd3JpdGVfYmVnaW4uIFdvdWxkIGhhdmUgdG8gcmV3b3JrCi0JICogZGlyZWN0b3J5IGhhbmRsaW5nIGNvZGUgdG8gcGFzcyBhcm91bmQgb2Zmc2V0cyByYXRoZXIgdGhhbiBzdHJ1Y3QKLQkgKiBwYWdlcyBpbiBvcmRlciB0byBtYWtlIHRoaXMgd29yayBlYXNpbHkuCi0JICovCi0JcmV0ID0gbm9iaF93cml0ZV9iZWdpbl9uZXd0cnVuYyhmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAotCQkJCQkJZnNkYXRhLCBleHQyX2dldF9ibG9jayk7CisJcmV0ID0gbm9iaF93cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCisJCQkgICAgICAgZXh0Ml9nZXRfYmxvY2spOwogCWlmIChyZXQgPCAwKQogCQlleHQyX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBwb3MgKyBsZW4pOwogCXJldHVybiByZXQ7CkBAIC04MzgsNyArODQzLDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAlzc2l6ZV90IHJldDsKIAotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19uZXd0cnVuYyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsCisJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKIAkJCQlpb3YsIG9mZnNldCwgbnJfc2VncywgZXh0Ml9nZXRfYmxvY2ssIE5VTEwpOwogCWlmIChyZXQgPCAwICYmIChydyAmIFdSSVRFKSkKIAkJZXh0Ml93cml0ZV9mYWlsZWQobWFwcGluZywgb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpKTsKQEAgLTEwMDYsOCArMTAxMSw4IEBACiAJCQllbHNlIGlmIChibG9ja190b19mcmVlID09IG5yIC0gY291bnQpCiAJCQkJY291bnQrKzsKIAkJCWVsc2UgewotCQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJCWV4dDJfZnJlZV9ibG9ja3MgKGlub2RlLCBibG9ja190b19mcmVlLCBjb3VudCk7CisJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCQlmcmVlX3RoaXM6CiAJCQkJYmxvY2tfdG9fZnJlZSA9IG5yOwogCQkJCWNvdW50ID0gMTsKQEAgLTEwMTUsOCArMTAyMCw4IEBACiAJCX0KIAl9CiAJaWYgKGNvdW50ID4gMCkgewotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJZXh0Ml9mcmVlX2Jsb2NrcyAoaW5vZGUsIGJsb2NrX3RvX2ZyZWUsIGNvdW50KTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJfQogfQogCkBAIC0xMTY5LDE1ICsxMTc0LDEwIEBACiAJX19leHQyX3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSwgb2Zmc2V0KTsKIH0KIAotaW50IGV4dDJfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSkKK3N0YXRpYyBpbnQgZXh0Ml9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQogewotCWxvZmZfdCBvbGRzaXplOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgbmV3c2l6ZSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KIAlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKIAkgICAgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTE5NywxMCArMTE5Nyw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlvbGRzaXplID0gaW5vZGUtPmlfc2l6ZTsKLQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpOwotCXRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgb2xkc2l6ZSwgbmV3c2l6ZSk7Ci0KKwl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBuZXdzaXplKTsKIAlfX2V4dDJfdHJ1bmNhdGVfYmxvY2tzKGlub2RlLCBuZXdzaXplKTsKIAogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwpAQCAtMTU1Nyw3ICsxNTU0LDcgQEAKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KLQlnZW5lcmljX3NldGF0dHIoaW5vZGUsIGlhdHRyKTsKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGlhdHRyKTsKIAlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKQogCQllcnJvciA9IGV4dDJfYWNsX2NobW9kKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCA3ZmY0M2Y0Li4xZWM2MDI2IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0xOTUsMTcgKzE5NSw2IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDJfaW5vZGVfY2FjaGVwKTsKIH0KIAotc3RhdGljIHZvaWQgZXh0Ml9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBleHQyX2Jsb2NrX2FsbG9jX2luZm8gKnJzdiA9IEVYVDJfSShpbm9kZSktPmlfYmxvY2tfYWxsb2NfaW5mbzsKLQotCWRxdW90X2Ryb3AoaW5vZGUpOwotCWV4dDJfZGlzY2FyZF9yZXNlcnZhdGlvbihpbm9kZSk7Ci0JRVhUMl9JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvID0gTlVMTDsKLQlpZiAodW5saWtlbHkocnN2KSkKLQkJa2ZyZWUocnN2KTsKLX0KLQogc3RhdGljIGludCBleHQyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICp2ZnMpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZmcy0+bW50X3NiOwpAQCAtMjk5LDEzICsyODgsMTIgQEAKIAkuYWxsb2NfaW5vZGUJPSBleHQyX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gZXh0Ml9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IGV4dDJfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IGV4dDJfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGV4dDJfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGV4dDJfcHV0X3N1cGVyLAogCS53cml0ZV9zdXBlcgk9IGV4dDJfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBleHQyX3N5bmNfZnMsCiAJLnN0YXRmcwkJPSBleHQyX3N0YXRmcywKIAkucmVtb3VudF9mcwk9IGV4dDJfcmVtb3VudCwKLQkuY2xlYXJfaW5vZGUJPSBleHQyX2NsZWFyX2lub2RlLAogCS5zaG93X29wdGlvbnMJPSBleHQyX3Nob3dfb3B0aW9ucywKICNpZmRlZiBDT05GSUdfUVVPVEEKIAkucXVvdGFfcmVhZAk9IGV4dDJfcXVvdGFfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuYwppbmRleCA3YzM5MTU3Li44YzI5YWUxIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKKysrIGIvZnMvZXh0Mi94YXR0ci5jCkBAIC02NzQsNiArNjc0LDcgQEAKIAkJCW5ld19iaCA9IHNiX2dldGJsayhzYiwgYmxvY2spOwogCQkJaWYgKCFuZXdfYmgpIHsKIAkJCQlleHQyX2ZyZWVfYmxvY2tzKGlub2RlLCBibG9jaywgMSk7CisJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCQkJZXJyb3IgPSAtRUlPOwogCQkJCWdvdG8gY2xlYW51cDsKIAkJCX0KQEAgLTcwMyw4ICs3MDQsMTAgQEAKIAkJICogd3JpdHRlbiAob25seSBzb21lIGRpcnR5IGRhdGEgd2VyZSBub3QpIHNvIHdlIGp1c3QgcHJvY2VlZAogCQkgKiBhcyBpZiBub3RoaW5nIGhhcHBlbmVkIGFuZCBjbGVhbnVwIHRoZSB1bnVzZWQgYmxvY2sgKi8KIAkJaWYgKGVycm9yICYmIGVycm9yICE9IC1FTk9TUEMpIHsKLQkJCWlmIChuZXdfYmggJiYgbmV3X2JoICE9IG9sZF9iaCkKLQkJCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJCWlmIChuZXdfYmggJiYgbmV3X2JoICE9IG9sZF9iaCkgeworCQkJCWRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShpbm9kZSwgMSk7CisJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCQl9CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIAl9IGVsc2UKQEAgLTcyNyw2ICs3MzAsNyBAQAogCQkJCW1iX2NhY2hlX2VudHJ5X2ZyZWUoY2UpOwogCQkJZWFfYmRlYnVnKG9sZF9iaCwgImZyZWVpbmciKTsKIAkJCWV4dDJfZnJlZV9ibG9ja3MoaW5vZGUsIG9sZF9iaC0+Yl9ibG9ja25yLCAxKTsKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJLyogV2UgbGV0IG91ciBjYWxsZXIgcmVsZWFzZSBvbGRfYmgsIHNvIHdlCiAJCQkgKiBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgYnVmZmVyIGJlZm9yZS4gKi8KIAkJCWdldF9iaChvbGRfYmgpOwpAQCAtNzM2LDcgKzc0MCw4IEBACiAJCQlsZTMyX2FkZF9jcHUoJkhEUihvbGRfYmgpLT5oX3JlZmNvdW50LCAtMSk7CiAJCQlpZiAoY2UpCiAJCQkJbWJfY2FjaGVfZW50cnlfcmVsZWFzZShjZSk7Ci0JCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJCWRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShpbm9kZSwgMSk7CisJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KG9sZF9iaCk7CiAJCQllYV9iZGVidWcob2xkX2JoLCAicmVmY291bnQgbm93PSVkIiwKIAkJCQlsZTMyX3RvX2NwdShIRFIob2xkX2JoKS0+aF9yZWZjb3VudCkpOwpAQCAtNzk5LDcgKzgwNCw3IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJZHF1b3RfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAxKTsKIAl9CiAJRVhUMl9JKGlub2RlKS0+aV9maWxlX2FjbCA9IDA7CiAKQEAgLTgzOCw3ICs4NDMsNyBAQAogCWNlID0gbWJfY2FjaGVfZW50cnlfYWxsb2MoZXh0Ml94YXR0cl9jYWNoZSwgR0ZQX05PRlMpOwogCWlmICghY2UpCiAJCXJldHVybiAtRU5PTUVNOwotCWVycm9yID0gbWJfY2FjaGVfZW50cnlfaW5zZXJ0KGNlLCBiaC0+Yl9iZGV2LCBiaC0+Yl9ibG9ja25yLCAmaGFzaCk7CisJZXJyb3IgPSBtYl9jYWNoZV9lbnRyeV9pbnNlcnQoY2UsIGJoLT5iX2JkZXYsIGJoLT5iX2Jsb2NrbnIsIGhhc2gpOwogCWlmIChlcnJvcikgewogCQltYl9jYWNoZV9lbnRyeV9mcmVlKGNlKTsKIAkJaWYgKGVycm9yID09IC1FQlVTWSkgewpAQCAtOTEyLDggKzkxNyw4IEBACiAJCXJldHVybiBOVUxMOyAgLyogbmV2ZXIgc2hhcmUgKi8KIAllYV9pZGVidWcoaW5vZGUsICJsb29raW5nIGZvciBjYWNoZWQgYmxvY2tzIFsleF0iLCAoaW50KWhhc2gpOwogYWdhaW46Ci0JY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX2ZpcnN0KGV4dDJfeGF0dHJfY2FjaGUsIDAsCi0JCQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2JkZXYsIGhhc2gpOworCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9maXJzdChleHQyX3hhdHRyX2NhY2hlLCBpbm9kZS0+aV9zYi0+c19iZGV2LAorCQkJCSAgICAgICBoYXNoKTsKIAl3aGlsZSAoY2UpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIApAQCAtOTQ1LDcgKzk1MCw3IEBACiAJCQl1bmxvY2tfYnVmZmVyKGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCX0KLQkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoY2UsIDAsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGhhc2gpOworCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChjZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaGFzaCk7CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTAyMSw5ICsxMDI2LDcgQEAKIGludCBfX2luaXQKIGluaXRfZXh0Ml94YXR0cih2b2lkKQogewotCWV4dDJfeGF0dHJfY2FjaGUgPSBtYl9jYWNoZV9jcmVhdGUoImV4dDJfeGF0dHIiLCBOVUxMLAotCQlzaXplb2Yoc3RydWN0IG1iX2NhY2hlX2VudHJ5KSArCi0JCXNpemVvZigoKHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqKSAwKS0+ZV9pbmRleGVzWzBdKSwgMSwgNik7CisJZXh0Ml94YXR0cl9jYWNoZSA9IG1iX2NhY2hlX2NyZWF0ZSgiZXh0Ml94YXR0ciIsIDYpOwogCWlmICghZXh0Ml94YXR0cl9jYWNoZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9leHQzL0tjb25maWcgYi9mcy9leHQzL0tjb25maWcKaW5kZXggNTIyYjE1NC4uZThjNmJhMCAxMDA2NDQKLS0tIGEvZnMvZXh0My9LY29uZmlnCisrKyBiL2ZzL2V4dDMvS2NvbmZpZwpAQCAtMzEsNiArMzEsNyBAQAogY29uZmlnIEVYVDNfREVGQVVMVFNfVE9fT1JERVJFRAogCWJvb2wgIkRlZmF1bHQgdG8gJ2RhdGE9b3JkZXJlZCcgaW4gZXh0MyIKIAlkZXBlbmRzIG9uIEVYVDNfRlMKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGUgam91cm5hbCBtb2RlIG9wdGlvbnMgZm9yIGV4dDMgaGF2ZSBkaWZmZXJlbnQgdHJhZGVvZmZzCiAJICBiZXR3ZWVuIHdoZW4gZGF0YSBpcyBndWFyYW50ZWVkIHRvIGJlIG9uIGRpc2sgYW5kCmRpZmYgLS1naXQgYS9mcy9leHQzL2lhbGxvYy5jIGIvZnMvZXh0My9pYWxsb2MuYwppbmRleCA0OTgwMjFlLi40YWI3MmRiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDMvaWFsbG9jLmMKQEAgLTExOSwyMCArMTE5LDggQEAKIAlpbm8gPSBpbm9kZS0+aV9pbm87CiAJZXh0M19kZWJ1ZyAoImZyZWVpbmcgaW5vZGUgJWx1XG4iLCBpbm8pOwogCi0JLyoKLQkgKiBOb3RlOiB3ZSBtdXN0IGZyZWUgYW55IHF1b3RhIGJlZm9yZSBsb2NraW5nIHRoZSBzdXBlcmJsb2NrLAotCSAqIGFzIHdyaXRpbmcgdGhlIHF1b3RhIHRvIGRpc2sgbWF5IG5lZWQgdGhlIGxvY2sgYXMgd2VsbC4KLQkgKi8KLQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKLQlleHQzX3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKLQlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKLQlkcXVvdF9kcm9wKGlub2RlKTsKLQogCWlzX2RpcmVjdG9yeSA9IFNfSVNESVIoaW5vZGUtPmlfbW9kZSk7CiAKLQkvKiBEbyB0aGlzIEJFRk9SRSBtYXJraW5nIHRoZSBpbm9kZSBub3QgaW4gdXNlIG9yIHJldHVybmluZyBhbiBlcnJvciAqLwotCWNsZWFyX2lub2RlIChpbm9kZSk7Ci0KIAllcyA9IEVYVDNfU0Ioc2IpLT5zX2VzOwogCWlmIChpbm8gPCBFWFQzX0ZJUlNUX0lOTyhzYikgfHwgaW5vID4gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgewogCQlleHQzX2Vycm9yIChzYiwgImV4dDNfZnJlZV9pbm9kZSIsCmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggNzM1ZjAxOS4uNWUwZmFmNCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTkwLDE4ICsxOTAsMjggQEAKIH0KIAogLyoKLSAqIENhbGxlZCBhdCB0aGUgbGFzdCBpcHV0KCkgaWYgaV9ubGluayBpcyB6ZXJvLgorICogQ2FsbGVkIGF0IGlub2RlIGV2aWN0aW9uIGZyb20gaWNhY2hlCiAgKi8KLXZvaWQgZXh0M19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqIGlub2RlKQordm9pZCBleHQzX2V2aWN0X2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXN0cnVjdCBleHQzX2Jsb2NrX2FsbG9jX2luZm8gKnJzdjsKIAloYW5kbGVfdCAqaGFuZGxlOworCWludCB3YW50X2RlbGV0ZSA9IDA7CiAKLQlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpCisJaWYgKCFpbm9kZS0+aV9ubGluayAmJiAhaXNfYmFkX2lub2RlKGlub2RlKSkgewogCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwkJd2FudF9kZWxldGUgPSAxOworCX0KIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAotCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQorCWV4dDNfZGlzY2FyZF9yZXNlcnZhdGlvbihpbm9kZSk7CisJcnN2ID0gRVhUM19JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvOworCUVYVDNfSShpbm9kZSktPmlfYmxvY2tfYWxsb2NfaW5mbyA9IE5VTEw7CisJaWYgKHVubGlrZWx5KHJzdikpCisJCWtmcmVlKHJzdik7CisKKwlpZiAoIXdhbnRfZGVsZXRlKQogCQlnb3RvIG5vX2RlbGV0ZTsKIAogCWhhbmRsZSA9IHN0YXJ0X3RyYW5zYWN0aW9uKGlub2RlKTsKQEAgLTIzOCwxNSArMjQ4LDIyIEBACiAJICogaGF2aW5nIGVycm9ycyksIGJ1dCB3ZSBjYW4ndCBmcmVlIHRoZSBpbm9kZSBpZiB0aGUgbWFya19kaXJ0eQogCSAqIGZhaWxzLgogCSAqLwotCWlmIChleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSkpCi0JCS8qIElmIHRoYXQgZmFpbGVkLCBqdXN0IGRvIHRoZSByZXF1aXJlZCBpbi1jb3JlIGlub2RlIGNsZWFyLiAqLwotCQljbGVhcl9pbm9kZShpbm9kZSk7Ci0JZWxzZQorCWlmIChleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSkpIHsKKwkJLyogSWYgdGhhdCBmYWlsZWQsIGp1c3QgZHF1b3RfZHJvcCgpIGFuZCBiZSBkb25lIHdpdGggdGhhdCAqLworCQlkcXVvdF9kcm9wKGlub2RlKTsKKwkJZW5kX3dyaXRlYmFjayhpbm9kZSk7CisJfSBlbHNlIHsKKwkJZXh0M194YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7CisJCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOworCQlkcXVvdF9kcm9wKGlub2RlKTsKKwkJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJCWV4dDNfZnJlZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKKwl9CiAJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlyZXR1cm47CiBub19kZWxldGU6Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwkvKiBXZSBtdXN0IGd1YXJhbnRlZSBjbGVhcmluZyBvZiBpbm9kZS4uLiAqLworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCWRxdW90X2Ryb3AoaW5vZGUpOwogfQogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMTQ5LDkgKzExNjYsMjUgQEAKIHN0YXRpYyBpbnQgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CisJaW50IGRpcnR5ID0gYnVmZmVyX2RpcnR5KGJoKTsKKwlpbnQgcmV0OworCiAJaWYgKCFidWZmZXJfbWFwcGVkKGJoKSB8fCBidWZmZXJfZnJlZWQoYmgpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CisJLyoKKwkgKiBfX2Jsb2NrX3ByZXBhcmVfd3JpdGUoKSBjb3VsZCBoYXZlIGRpcnRpZWQgc29tZSBidWZmZXJzLiBDbGVhbgorCSAqIHRoZSBkaXJ0eSBiaXQgYXMgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoKSBjb3VsZCBjb21wbGFpbgorCSAqIG90aGVyd2lzZSBhYm91dCBmcyBpbnRlZ3JpdHkgaXNzdWVzLiBTZXR0aW5nIG9mIHRoZSBkaXJ0eSBiaXQKKwkgKiBieSBfX2Jsb2NrX3ByZXBhcmVfd3JpdGUoKSBpc24ndCBhIHJlYWwgcHJvYmxlbSBoZXJlIGFzIHdlIGNsZWFyCisJICogdGhlIGJpdCBiZWZvcmUgcmVsZWFzaW5nIGEgcGFnZSBsb2NrIGFuZCB0aHVzIHdyaXRlYmFjayBjYW5ub3QKKwkgKiBldmVyIHdyaXRlIHRoZSBidWZmZXIuCisJICovCisJaWYgKGRpcnR5KQorCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOworCXJldCA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCWlmICghcmV0ICYmIGRpcnR5KQorCQlyZXQgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTExOTYsOCArMTIyOSw3IEBACiAJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJZ290byBvdXQ7CiAJfQotCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKLQkJCQkJCQlleHQzX2dldF9ibG9jayk7CisJcmV0ID0gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBwb3MsIGxlbiwgZXh0M19nZXRfYmxvY2spOwogCWlmIChyZXQpCiAJCWdvdG8gd3JpdGVfYmVnaW5fZmFpbGVkOwogCkBAIC0xNjI1LDEwICsxNjU3LDcgQEAKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKLQlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpICYmIGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSkKLQkJcmV0ID0gbm9iaF93cml0ZXBhZ2UocGFnZSwgZXh0M19nZXRfYmxvY2ssIHdiYyk7Ci0JZWxzZQotCQlyZXQgPSBibG9ja193cml0ZV9mdWxsX3BhZ2UocGFnZSwgZXh0M19nZXRfYmxvY2ssIHdiYyk7CisJcmV0ID0gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIGV4dDNfZ2V0X2Jsb2NrLCB3YmMpOwogCiAJZXJyID0gZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoIXJldCkKQEAgLTE3ODUsNiArMTgxNCwxNyBAQAogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSBleHQzX2dldF9ibG9jaywgTlVMTCk7CisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKKwkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgorCSAqLworCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKKwkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCisJCWlmIChlbmQgPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKKwl9CiAJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCiAJCWdvdG8gcmV0cnk7CiAKQEAgLTE5MjIsMTcgKzE5NjIsNiBAQAogCWxlbmd0aCA9IGJsb2Nrc2l6ZSAtIChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpOwogCWlibG9jayA9IGluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOwogCi0JLyoKLQkgKiBGb3IgIm5vYmgiIG9wdGlvbiwgIHdlIGNhbiBvbmx5IHdvcmsgaWYgd2UgZG9uJ3QgbmVlZCB0bwotCSAqIHJlYWQtaW4gdGhlIHBhZ2UgLSBvdGhlcndpc2Ugd2UgY3JlYXRlIGJ1ZmZlcnMgdG8gZG8gdGhlIElPLgotCSAqLwotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSAmJiB0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkgJiYKLQkgICAgIGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSAmJiBQYWdlVXB0b2RhdGUocGFnZSkpIHsKLQkJemVyb191c2VyKHBhZ2UsIG9mZnNldCwgbGVuZ3RoKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKIAkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgYmxvY2tzaXplLCAwKTsKIApAQCAtMjI4NCwyNyArMjMxMyw2IEBACiAJCQkJCSAgIGRlcHRoKTsKIAogCQkJLyoKLQkJCSAqIFdlJ3ZlIHByb2JhYmx5IGpvdXJuYWxsZWQgdGhlIGluZGlyZWN0IGJsb2NrIHNldmVyYWwKLQkJCSAqIHRpbWVzIGR1cmluZyB0aGUgdHJ1bmNhdGUuICBCdXQgaXQncyBubyBsb25nZXIKLQkJCSAqIG5lZWRlZCBhbmQgd2Ugbm93IGRyb3AgaXQgZnJvbSB0aGUgdHJhbnNhY3Rpb24gdmlhCi0JCQkgKiBqb3VybmFsX3Jldm9rZSgpLgotCQkJICoKLQkJCSAqIFRoYXQncyBlYXN5IGlmIGl0J3MgZXhjbHVzaXZlbHkgcGFydCBvZiB0aGlzCi0JCQkgKiB0cmFuc2FjdGlvbi4gIEJ1dCBpZiBpdCdzIHBhcnQgb2YgdGhlIGNvbW1pdHRpbmcKLQkJCSAqIHRyYW5zYWN0aW9uIHRoZW4gam91cm5hbF9mb3JnZXQoKSB3aWxsIHNpbXBseQotCQkJICogYnJlbHNlKCkgaXQuICBUaGF0IG1lYW5zIHRoYXQgaWYgdGhlIHVuZGVybHlpbmcKLQkJCSAqIGJsb2NrIGlzIHJlYWxsb2NhdGVkIGluIGV4dDNfZ2V0X2Jsb2NrKCksCi0JCQkgKiB1bm1hcF91bmRlcmx5aW5nX21ldGFkYXRhKCkgd2lsbCBmaW5kIHRoaXMgYmxvY2sKLQkJCSAqIGFuZCB3aWxsIHRyeSB0byBnZXQgcmlkIG9mIGl0LiAgZGFtbiwgZGFtbi4KLQkJCSAqCi0JCQkgKiBJZiB0aGlzIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gY29tbWl0dGVkIHRvIHRoZQotCQkJICogam91cm5hbCwgYSByZXZva2UgcmVjb3JkIHdpbGwgYmUgd3JpdHRlbi4gIEFuZAotCQkJICogcmV2b2tlIHJlY29yZHMgbXVzdCBiZSBlbWl0dGVkICpiZWZvcmUqIGNsZWFyaW5nCi0JCQkgKiB0aGlzIGJsb2NrJ3MgYml0IGluIHRoZSBiaXRtYXBzLgotCQkJICovCi0JCQlleHQzX2ZvcmdldChoYW5kbGUsIDEsIGlub2RlLCBiaCwgYmgtPmJfYmxvY2tucik7Ci0KLQkJCS8qCiAJCQkgKiBFdmVyeXRoaW5nIGJlbG93IHRoaXMgdGhpcyBwb2ludGVyIGhhcyBiZWVuCiAJCQkgKiByZWxlYXNlZC4gIE5vdyBsZXQgdGhpcyB0b3Atb2Ytc3VidHJlZSBnby4KIAkJCSAqCkBAIC0yMzI3LDYgKzIzMzUsMzEgQEAKIAkJCQl0cnVuY2F0ZV9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZSwgaW5vZGUpOwogCQkJfQogCisJCQkvKgorCQkJICogV2UndmUgcHJvYmFibHkgam91cm5hbGxlZCB0aGUgaW5kaXJlY3QgYmxvY2sgc2V2ZXJhbAorCQkJICogdGltZXMgZHVyaW5nIHRoZSB0cnVuY2F0ZS4gIEJ1dCBpdCdzIG5vIGxvbmdlcgorCQkJICogbmVlZGVkIGFuZCB3ZSBub3cgZHJvcCBpdCBmcm9tIHRoZSB0cmFuc2FjdGlvbiB2aWEKKwkJCSAqIGpvdXJuYWxfcmV2b2tlKCkuCisJCQkgKgorCQkJICogVGhhdCdzIGVhc3kgaWYgaXQncyBleGNsdXNpdmVseSBwYXJ0IG9mIHRoaXMKKwkJCSAqIHRyYW5zYWN0aW9uLiAgQnV0IGlmIGl0J3MgcGFydCBvZiB0aGUgY29tbWl0dGluZworCQkJICogdHJhbnNhY3Rpb24gdGhlbiBqb3VybmFsX2ZvcmdldCgpIHdpbGwgc2ltcGx5CisJCQkgKiBicmVsc2UoKSBpdC4gIFRoYXQgbWVhbnMgdGhhdCBpZiB0aGUgdW5kZXJseWluZworCQkJICogYmxvY2sgaXMgcmVhbGxvY2F0ZWQgaW4gZXh0M19nZXRfYmxvY2soKSwKKwkJCSAqIHVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoKSB3aWxsIGZpbmQgdGhpcyBibG9jaworCQkJICogYW5kIHdpbGwgdHJ5IHRvIGdldCByaWQgb2YgaXQuICBkYW1uLCBkYW1uLiBUaHVzCisJCQkgKiB3ZSBkb24ndCBhbGxvdyBhIGJsb2NrIHRvIGJlIHJlYWxsb2NhdGVkIHVudGlsCisJCQkgKiBhIHRyYW5zYWN0aW9uIGZyZWVpbmcgaXQgaGFzIGZ1bGx5IGNvbW1pdHRlZC4KKwkJCSAqCisJCQkgKiBXZSBhbHNvIGhhdmUgdG8gbWFrZSBzdXJlIGpvdXJuYWwgcmVwbGF5IGFmdGVyIGEKKwkJCSAqIGNyYXNoIGRvZXMgbm90IG92ZXJ3cml0ZSBub24tam91cm5hbGVkIGRhdGEgYmxvY2tzCisJCQkgKiB3aXRoIG9sZCBtZXRhZGF0YSB3aGVuIHRoZSBibG9jayBnb3QgcmVhbGxvY2F0ZWQgZm9yCisJCQkgKiBkYXRhLiAgVGh1cyB3ZSBoYXZlIHRvIHN0b3JlIGEgcmV2b2tlIHJlY29yZCBmb3IgYQorCQkJICogYmxvY2sgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gaW4gd2hpY2ggd2UgZnJlZSB0aGUKKwkJCSAqIGJsb2NrLgorCQkJICovCisJCQlleHQzX2ZvcmdldChoYW5kbGUsIDEsIGlub2RlLCBiaCwgYmgtPmJfYmxvY2tucik7CisKIAkJCWV4dDNfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgbnIsIDEpOwogCiAJCQlpZiAocGFyZW50X2JoKSB7CkBAIC0yNTU0LDcgKzI1ODcsNyBAQAogCSAqIElmIHRoaXMgd2FzIGEgc2ltcGxlIGZ0cnVuY2F0ZSgpLCBhbmQgdGhlIGZpbGUgd2lsbCByZW1haW4gYWxpdmUKIAkgKiB0aGVuIHdlIG5lZWQgdG8gY2xlYXIgdXAgdGhlIG9ycGhhbiByZWNvcmQgd2hpY2ggd2UgY3JlYXRlZCBhYm92ZS4KIAkgKiBIb3dldmVyLCBpZiB0aGlzIHdhcyBhIHJlYWwgdW5saW5rIHRoZW4gd2Ugd2VyZSBjYWxsZWQgYnkKLQkgKiBleHQzX2RlbGV0ZV9pbm9kZSgpLCBhbmQgd2UgYWxsb3cgdGhhdCBmdW5jdGlvbiB0byBjbGVhbiB1cCB0aGUKKwkgKiBleHQzX2V2aWN0X2lub2RlKCksIGFuZCB3ZSBhbGxvdyB0aGF0IGZ1bmN0aW9uIHRvIGNsZWFuIHVwIHRoZQogCSAqIG9ycGhhbiBpbmZvIGZvciB1cy4KIAkgKi8KIAlpZiAoaW5vZGUtPmlfbmxpbmspCkBAIC0zMTk4LDkgKzMyMzEsMTcgQEAKIAkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAl9CiAKLQlyYyA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCXJjID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX291dDsKKwl9CiAKLQlpZiAoIXJjICYmIChpYV92YWxpZCAmIEFUVFJfTU9ERSkpCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKworCWlmIChpYV92YWxpZCAmIEFUVFJfTU9ERSkKIAkJcmMgPSBleHQzX2FjbF9jaG1vZChpbm9kZSk7CiAKIGVycl9vdXQ6CmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggZWUxODQwOC4uMmIzNWRkYiAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMTQ0Nyw3ICsxNDQ3LDYgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaDsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CkBAIC0xNDY5LDcgKzE0NjgsNyBAQAogCQlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIpOwogCX0KIAlibG9ja3MgPSBkaXItPmlfc2l6ZSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKLQlmb3IgKGJsb2NrID0gMCwgb2Zmc2V0ID0gMDsgYmxvY2sgPCBibG9ja3M7IGJsb2NrKyspIHsKKwlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBibG9ja3M7IGJsb2NrKyspIHsKIAkJYmggPSBleHQzX2JyZWFkKGhhbmRsZSwgZGlyLCBibG9jaywgMCwgJnJldHZhbCk7CiAJCWlmKCFiaCkKIAkJCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9leHQzL3Jlc2l6ZS5jIGIvZnMvZXh0My9yZXNpemUuYwppbmRleCA1NDM1MWFjLi4wY2NkN2IxIDEwMDY0NAotLS0gYS9mcy9leHQzL3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDMvcmVzaXplLmMKQEAgLTk2NCw3ICs5NjQsNiBAQAogCQkgICAgICBleHQzX2ZzYmxrX3Qgbl9ibG9ja3NfY291bnQpCiB7CiAJZXh0M19mc2Jsa190IG9fYmxvY2tzX2NvdW50OwotCXVuc2lnbmVkIGxvbmcgb19ncm91cHNfY291bnQ7CiAJZXh0M19ncnBibGtfdCBsYXN0OwogCWV4dDNfZ3JwYmxrX3QgYWRkOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoOwpAQCAtOTc2LDcgKzk3NSw2IEBACiAJICogeWV0OiB3ZSdyZSBnb2luZyB0byByZXZhbGlkYXRlIGVzLT5zX2Jsb2Nrc19jb3VudCBhZnRlcgogCSAqIHRha2luZyB0aGUgc19yZXNpemVfbG9jayBiZWxvdy4gKi8KIAlvX2Jsb2Nrc19jb3VudCA9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCk7Ci0Jb19ncm91cHNfY291bnQgPSBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQ7CiAKIAlpZiAodGVzdF9vcHQoc2IsIERFQlVHKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIkVYVDMtZnM6IGV4dGVuZGluZyBsYXN0IGdyb3VwIGZyb20gIkUzRlNCTEsiIHV0byAiRTNGU0JMSyIgYmxvY2tzXG4iLApkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDZjOTUzYmIuLjVkYmY0ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTUyNywxNyArNTI3LDYgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0M19pbm9kZV9jYWNoZXApOwogfQogCi1zdGF0aWMgdm9pZCBleHQzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGV4dDNfYmxvY2tfYWxsb2NfaW5mbyAqcnN2ID0gRVhUM19JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvOwotCi0JZHF1b3RfZHJvcChpbm9kZSk7Ci0JZXh0M19kaXNjYXJkX3Jlc2VydmF0aW9uKGlub2RlKTsKLQlFWFQzX0koaW5vZGUpLT5pX2Jsb2NrX2FsbG9jX2luZm8gPSBOVUxMOwotCWlmICh1bmxpa2VseShyc3YpKQotCQlrZnJlZShyc3YpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0M19zaG93X3F1b3RhX29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfUVVPVEEpCkBAIC02NjEsOSArNjUwLDYgQEAKIAkgKi8KIAlzZXFfcHV0cyhzZXEsICIsYmFycmllcj0iKTsKIAlzZXFfcHV0cyhzZXEsIHRlc3Rfb3B0KHNiLCBCQVJSSUVSKSA/ICIxIiA6ICIwIik7Ci0JaWYgKHRlc3Rfb3B0KHNiLCBOT0JIKSkKLQkJc2VxX3B1dHMoc2VxLCAiLG5vYmgiKTsKLQogCXNlcV9wcmludGYoc2VxLCAiLGRhdGE9JXMiLCBkYXRhX21vZGVfc3RyaW5nKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSkpOwogCWlmICh0ZXN0X29wdChzYiwgREFUQV9FUlJfQUJPUlQpKQogCQlzZXFfcHV0cyhzZXEsICIsZGF0YV9lcnI9YWJvcnQiKTsKQEAgLTc4MywxNCArNzY5LDEzIEBACiAJLmRlc3Ryb3lfaW5vZGUJPSBleHQzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gZXh0M193cml0ZV9pbm9kZSwKIAkuZGlydHlfaW5vZGUJPSBleHQzX2RpcnR5X2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBleHQzX2RlbGV0ZV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBleHQzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSBleHQzX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IGV4dDNfc3luY19mcywKIAkuZnJlZXplX2ZzCT0gZXh0M19mcmVlemUsCiAJLnVuZnJlZXplX2ZzCT0gZXh0M191bmZyZWV6ZSwKIAkuc3RhdGZzCQk9IGV4dDNfc3RhdGZzLAogCS5yZW1vdW50X2ZzCT0gZXh0M19yZW1vdW50LAotCS5jbGVhcl9pbm9kZQk9IGV4dDNfY2xlYXJfaW5vZGUsCiAJLnNob3dfb3B0aW9ucwk9IGV4dDNfc2hvd19vcHRpb25zLAogI2lmZGVmIENPTkZJR19RVU9UQQogCS5xdW90YV9yZWFkCT0gZXh0M19xdW90YV9yZWFkLApAQCAtMTI1NSwxMCArMTI0MCwxMiBAQAogCQkJKm5fYmxvY2tzX2NvdW50ID0gb3B0aW9uOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYmg6Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOworCQkJZXh0M19tc2coc2IsIEtFUk5fV0FSTklORywKKwkJCQkid2FybmluZzogaWdub3JpbmcgZGVwcmVjYXRlZCBub2JoIG9wdGlvbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2JoOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOworCQkJZXh0M19tc2coc2IsIEtFUk5fV0FSTklORywKKwkJCQkid2FybmluZzogaWdub3JpbmcgZGVwcmVjYXRlZCBiaCBvcHRpb24iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZXh0M19tc2coc2IsIEtFUk5fRVJSLApAQCAtMjAwMSwxNCArMTk4OCw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICh0ZXN0X29wdChzYiwgTk9CSCkpIHsKLQkJaWYgKCEodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEpKSB7Ci0JCQlleHQzX21zZyhzYiwgS0VSTl9XQVJOSU5HLAotCQkJCSJ3YXJuaW5nOiBpZ25vcmluZyBub2JoIG9wdGlvbiAtICIKLQkJCQkiaXQgaXMgc3VwcG9ydGVkIG9ubHkgd2l0aCB3cml0ZWJhY2sgbW9kZSIpOwotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOwotCQl9Ci0JfQogCS8qCiAJICogVGhlIGpvdXJuYWxfbG9hZCB3aWxsIGhhdmUgZG9uZSBhbnkgbmVjZXNzYXJ5IGxvZyByZWNvdmVyeSwKIAkgKiBzbyB3ZSBjYW4gc2FmZWx5IG1vdW50IHRoZSByZXN0IG9mIHRoZSBmaWxlc3lzdGVtIG5vdy4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHIuYyBiL2ZzL2V4dDMveGF0dHIuYwppbmRleCA3MWZiOGQ2Li5lNjlkYzZkIDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyLmMKKysrIGIvZnMvZXh0My94YXR0ci5jCkBAIC0xMTM5LDcgKzExMzksNyBAQAogCQllYV9iZGVidWcoYmgsICJvdXQgb2YgbWVtb3J5Iik7CiAJCXJldHVybjsKIAl9Ci0JZXJyb3IgPSBtYl9jYWNoZV9lbnRyeV9pbnNlcnQoY2UsIGJoLT5iX2JkZXYsIGJoLT5iX2Jsb2NrbnIsICZoYXNoKTsKKwllcnJvciA9IG1iX2NhY2hlX2VudHJ5X2luc2VydChjZSwgYmgtPmJfYmRldiwgYmgtPmJfYmxvY2tuciwgaGFzaCk7CiAJaWYgKGVycm9yKSB7CiAJCW1iX2NhY2hlX2VudHJ5X2ZyZWUoY2UpOwogCQlpZiAoZXJyb3IgPT0gLUVCVVNZKSB7CkBAIC0xMjExLDggKzEyMTEsOCBAQAogCQlyZXR1cm4gTlVMTDsgIC8qIG5ldmVyIHNoYXJlICovCiAJZWFfaWRlYnVnKGlub2RlLCAibG9va2luZyBmb3IgY2FjaGVkIGJsb2NrcyBbJXhdIiwgKGludCloYXNoKTsKIGFnYWluOgotCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9maXJzdChleHQzX3hhdHRyX2NhY2hlLCAwLAotCQkJCSAgICAgICBpbm9kZS0+aV9zYi0+c19iZGV2LCBoYXNoKTsKKwljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfZmlyc3QoZXh0M194YXR0cl9jYWNoZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKKwkJCQkgICAgICAgaGFzaCk7CiAJd2hpbGUgKGNlKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJCQlyZXR1cm4gYmg7CiAJCX0KIAkJYnJlbHNlKGJoKTsKLQkJY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoY2UsIDAsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGhhc2gpOworCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChjZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaGFzaCk7CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTMxMyw5ICsxMzEzLDcgQEAKIGludCBfX2luaXQKIGluaXRfZXh0M194YXR0cih2b2lkKQogewotCWV4dDNfeGF0dHJfY2FjaGUgPSBtYl9jYWNoZV9jcmVhdGUoImV4dDNfeGF0dHIiLCBOVUxMLAotCQlzaXplb2Yoc3RydWN0IG1iX2NhY2hlX2VudHJ5KSArCi0JCXNpemVvZigoKHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqKSAwKS0+ZV9pbmRleGVzWzBdKSwgMSwgNik7CisJZXh0M194YXR0cl9jYWNoZSA9IG1iX2NhY2hlX2NyZWF0ZSgiZXh0M194YXR0ciIsIDYpOwogCWlmICghZXh0M194YXR0cl9jYWNoZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2FjbC5jIGIvZnMvZXh0NC9hY2wuYwppbmRleCBmZWFmNDk4Li41ZTJlZDQ1IDEwMDY0NAotLS0gYS9mcy9leHQ0L2FjbC5jCisrKyBiL2ZzL2V4dDQvYWNsLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCQkJCXJldHVybiBlcnJvcjsKIAkJCWVsc2UgewogCQkJCWlub2RlLT5pX21vZGUgPSBtb2RlOworCQkJCWlub2RlLT5pX2N0aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoaW5vZGUpOwogCQkJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAkJCQlpZiAoZXJyb3IgPT0gMCkKIAkJCQkJYWNsID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IDk1Yjc1OTQuLmJkMzA3OTkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtMzc3LDE0ICszNzcsMTEgQEAKIAlleHQ0X2dycGJsa190IGJpdDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpkZXNjOwotCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplczsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAJaW50IGVyciA9IDAsIHJldCwgYmxrX2ZyZWVfY291bnQ7CiAJZXh0NF9ncnBibGtfdCBibG9ja3NfZnJlZWQ7CiAJc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZ3JwOwogCi0Jc2JpID0gRVhUNF9TQihzYik7Ci0JZXMgPSBzYmktPnNfZXM7CiAJZXh0NF9kZWJ1ZygiQWRkaW5nIGJsb2NrKHMpICVsbHUtJWxsdVxuIiwgYmxvY2ssIGJsb2NrICsgY291bnQgLSAxKTsKIAogCWV4dDRfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc2IsIGJsb2NrLCAmYmxvY2tfZ3JvdXAsICZiaXQpOwpAQCAtNDc3LDcgKzQ3NCw2IEBACiAJcmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBnZF9iaCk7CiAJaWYgKCFlcnIpCiAJCWVyciA9IHJldDsKLQlzYi0+c19kaXJ0ID0gMTsKIAogZXJyb3JfcmV0dXJuOgogCWJyZWxzZShiaXRtYXBfYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jIGIvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jCmluZGV4IDViNjk3M2YuLjNkYjUwODQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYworKysgYi9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMKQEAgLTIyOSwxNiArMjI5LDIwIEBACiAKIAlpZiAoKHN0YXJ0X2JsayA8PSBsZTMyX3RvX2NwdShzYmktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykpIHx8CiAJICAgIChzdGFydF9ibGsgKyBjb3VudCA8IHN0YXJ0X2JsaykgfHwKLQkgICAgKHN0YXJ0X2JsayArIGNvdW50ID4gZXh0NF9ibG9ja3NfY291bnQoc2JpLT5zX2VzKSkpCisJICAgIChzdGFydF9ibGsgKyBjb3VudCA+IGV4dDRfYmxvY2tzX2NvdW50KHNiaS0+c19lcykpKSB7CisJCXNiaS0+c19lcy0+c19sYXN0X2Vycm9yX2Jsb2NrID0gY3B1X3RvX2xlNjQoc3RhcnRfYmxrKTsKIAkJcmV0dXJuIDA7CisJfQogCXdoaWxlIChuKSB7CiAJCWVudHJ5ID0gcmJfZW50cnkobiwgc3RydWN0IGV4dDRfc3lzdGVtX3pvbmUsIG5vZGUpOwogCQlpZiAoc3RhcnRfYmxrICsgY291bnQgLSAxIDwgZW50cnktPnN0YXJ0X2JsaykKIAkJCW4gPSBuLT5yYl9sZWZ0OwogCQllbHNlIGlmIChzdGFydF9ibGsgPj0gKGVudHJ5LT5zdGFydF9ibGsgKyBlbnRyeS0+Y291bnQpKQogCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlCisJCWVsc2UgeworCQkJc2JpLT5zX2VzLT5zX2xhc3RfZXJyb3JfYmxvY2sgPSBjcHVfdG9fbGU2NChzdGFydF9ibGspOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQ0L2Rpci5jIGIvZnMvZXh0NC9kaXIuYwppbmRleCBlYTVlNmNiLi4zNzQ1MTBmIDEwMDY0NAotLS0gYS9mcy9leHQ0L2Rpci5jCisrKyBiL2ZzL2V4dDQvZGlyLmMKQEAgLTYxLDEwICs2MSwxMSBAQAogfQogCiAKLWludCBleHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLAotCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCQkgdW5zaWduZWQgaW50IG9mZnNldCkKK2ludCBfX2V4dDRfY2hlY2tfZGlyX2VudHJ5KGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLAorCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJY29uc3QgY2hhciAqZXJyb3JfbXNnID0gTlVMTDsKIAljb25zdCBpbnQgcmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCkBAIC04MywxMSArODQsMTAgQEAKIAkJZXJyb3JfbXNnID0gImlub2RlIG91dCBvZiBib3VuZHMiOwogCiAJaWYgKGVycm9yX21zZyAhPSBOVUxMKQotCQlleHQ0X2Vycm9yX2lub2RlKGZ1bmN0aW9uLCBkaXIsCi0JCQkiYmFkIGVudHJ5IGluIGRpcmVjdG9yeTogJXMgLSBibG9jaz0lbGx1IgorCQlleHQ0X2Vycm9yX2lub2RlKGRpciwgZnVuY3Rpb24sIGxpbmUsIGJoLT5iX2Jsb2NrbnIsCisJCQkiYmFkIGVudHJ5IGluIGRpcmVjdG9yeTogJXMgLSAiCiAJCQkib2Zmc2V0PSV1KCV1KSwgaW5vZGU9JXUsIHJlY19sZW49JWQsIG5hbWVfbGVuPSVkIiwKLQkJCWVycm9yX21zZywgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmgtPmJfYmxvY2tuciwKLQkJCSh1bnNpZ25lZCkgKG9mZnNldCViaC0+Yl9zaXplKSwgb2Zmc2V0LAorCQkJZXJyb3JfbXNnLCAodW5zaWduZWQpIChvZmZzZXQlYmgtPmJfc2l6ZSksIG9mZnNldCwKIAkJCWxlMzJfdG9fY3B1KGRlLT5pbm9kZSksCiAJCQlybGVuLCBkZS0+bmFtZV9sZW4pOwogCXJldHVybiBlcnJvcl9tc2cgPT0gTlVMTCA/IDEgOiAwOwpAQCAtMTIxLDcgKzEyMSw4IEBACiAJCSAqIFdlIGRvbid0IHNldCB0aGUgaW5vZGUgZGlydHkgZmxhZyBzaW5jZSBpdCdzIG5vdAogCQkgKiBjcml0aWNhbCB0aGF0IGl0IGdldCBmbHVzaGVkIGJhY2sgdG8gdGhlIGRpc2suCiAJCSAqLwotCQlleHQ0X2NsZWFyX2lub2RlX2ZsYWcoZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgRVhUNF9JTk9ERV9JTkRFWCk7CisJCWV4dDRfY2xlYXJfaW5vZGVfZmxhZyhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLAorCQkJCSAgICAgIEVYVDRfSU5PREVfSU5ERVgpOwogCX0KIAlzdG9yZWQgPSAwOwogCW9mZnNldCA9IGZpbHAtPmZfcG9zICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJCXdoaWxlICghZXJyb3IgJiYgZmlscC0+Zl9wb3MgPCBpbm9kZS0+aV9zaXplCiAJCSAgICAgICAmJiBvZmZzZXQgPCBzYi0+c19ibG9ja3NpemUpIHsKIAkJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIChiaC0+Yl9kYXRhICsgb2Zmc2V0KTsKLQkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoImV4dDRfcmVhZGRpciIsIGlub2RlLCBkZSwKKwkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoaW5vZGUsIGRlLAogCQkJCQkJICBiaCwgb2Zmc2V0KSkgewogCQkJCS8qCiAJCQkJICogT24gZXJyb3IsIHNraXAgdGhlIGZfcG9zIHRvIHRoZSBuZXh0IGJsb2NrCkBAIC0zNDMsNyArMzQ0LDcgQEAKIAlzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyAqaW5mbzsKIAlpbnQgbGVuOwogCi0JaW5mbyA9IChzdHJ1Y3QgZGlyX3ByaXZhdGVfaW5mbyAqKSBkaXJfZmlsZS0+cHJpdmF0ZV9kYXRhOworCWluZm8gPSBkaXJfZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXAgPSAmaW5mby0+cm9vdC5yYl9ub2RlOwogCiAJLyogQ3JlYXRlIGFuZCBhbGxvY2F0ZSB0aGUgZm5hbWUgc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDE5YTRkZTUuLjg4OWVjOWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC01NywxMCArNTcsMTMgQEAKICNlbmRpZgogCiAjZGVmaW5lIEVYVDRfRVJST1JfSU5PREUoaW5vZGUsIGZtdCwgYS4uLikgXAotCWV4dDRfZXJyb3JfaW5vZGUoX19mdW5jX18sIChpbm9kZSksIChmbXQpLCAjIyBhKQorCWV4dDRfZXJyb3JfaW5vZGUoKGlub2RlKSwgX19mdW5jX18sIF9fTElORV9fLCAwLCAoZm10KSwgIyMgYSkKKworI2RlZmluZSBFWFQ0X0VSUk9SX0lOT0RFX0JMT0NLKGlub2RlLCBibG9jaywgZm10LCBhLi4uKQkJCVwKKwlleHQ0X2Vycm9yX2lub2RlKChpbm9kZSksIF9fZnVuY19fLCBfX0xJTkVfXywgKGJsb2NrKSwgKGZtdCksICMjIGEpCiAKICNkZWZpbmUgRVhUNF9FUlJPUl9GSUxFKGZpbGUsIGZtdCwgYS4uLikJXAotCWV4dDRfZXJyb3JfZmlsZShfX2Z1bmNfXywgKGZpbGUpLCAoZm10KSwgIyMgYSkKKwlleHQ0X2Vycm9yX2ZpbGUoX19mdW5jX18sIF9fTElORV9fLCAoZmlsZSksIChmbXQpLCAjIyBhKQogCiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIG9mZnNldCBvZiBibG9jayBncm91cCAqLwogdHlwZWRlZiBpbnQgZXh0NF9ncnBibGtfdDsKQEAgLTE2NywxMyArMTcwLDE1IEBACiB9OwogI2RlZmluZQlFWFQ0X0lPX1VOV1JJVFRFTgkweDEKIHR5cGVkZWYgc3RydWN0IGV4dDRfaW9fZW5kIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBwZXItZmlsZSBmaW5pc2hlZCBBSU8gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsJCS8qIHBlci1maWxlIGZpbmlzaGVkIElPIGxpc3QgKi8KIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsJCS8qIGZpbGUgYmVpbmcgd3JpdHRlbiB0byAqLwogCXVuc2lnbmVkIGludAkJZmxhZzsJCS8qIHVud3JpdHRlbiBvciBub3QgKi8KIAlzdHJ1Y3QgcGFnZQkJKnBhZ2U7CQkvKiBwYWdlIHN0cnVjdCBmb3IgYnVmZmVyIHdyaXRlICovCiAJbG9mZl90CQkJb2Zmc2V0OwkJLyogb2Zmc2V0IGluIHRoZSBmaWxlICovCiAJc3NpemVfdAkJCXNpemU7CQkvKiBzaXplIG9mIHRoZSBleHRlbnQgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsJCS8qIGRhdGEgd29yayBxdWV1ZSAqLworCXN0cnVjdCBraW9jYgkJKmlvY2I7CQkvKiBpb2NiIHN0cnVjdCBmb3IgQUlPICovCisJaW50CQkJcmVzdWx0OwkJLyogZXJyb3IgdmFsdWUgZm9yIEFJTyAqLwogfSBleHQ0X2lvX2VuZF90OwogCiAvKgpAQCAtNDYwLDcgKzQ2NSw3IEBACiB9OwogCiAvKgotICogRmxhZ3MgdXNlZCBieSBleHQ0X2dldF9ibG9ja3MoKQorICogRmxhZ3MgdXNlZCBieSBleHQ0X21hcF9ibG9ja3MoKQogICovCiAJLyogQWxsb2NhdGUgYW55IG5lZWRlZCBibG9ja3MgYW5kL29yIGNvbnZlcnQgYW4gdW5pdGlhbGl6ZWQKIAkgICBleHRlbnQgdG8gYmUgYW4gaW5pdGlhbGl6ZWQgZXh0NCAqLwpAQCAtODczLDcgKzg3OCw2IEBACiAjZGVmaW5lIEVYVDRfTU9VTlRfUE9TSVhfQUNMCQkweDA4MDAwCS8qIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfTk9fQVVUT19EQV9BTExPQwkweDEwMDAwCS8qIE5vIGF1dG8gZGVsYWxsb2MgbWFwcGluZyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0JBUlJJRVIJCTB4MjAwMDAgLyogVXNlIGJsb2NrIGJhcnJpZXJzICovCi0jZGVmaW5lIEVYVDRfTU9VTlRfTk9CSAkJCTB4NDAwMDAgLyogTm8gYnVmZmVyaGVhZHMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9VU1JRVU9UQQkJMHgxMDAwMDAgLyogIm9sZCIgdXNlciBxdW90YSAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0dSUFFVT1RBCQkweDIwMDAwMCAvKiAib2xkIiBncm91cCBxdW90YSAqLwpAQCAtOTgyLDcgKzk4Niw3IEBACiAJX19sZTMyCXNfbGFzdF9vcnBoYW47CQkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KIAlfX2xlMzIJc19oYXNoX3NlZWRbNF07CQkvKiBIVFJFRSBoYXNoIHNlZWQgKi8KIAlfX3U4CXNfZGVmX2hhc2hfdmVyc2lvbjsJLyogRGVmYXVsdCBoYXNoIHZlcnNpb24gdG8gdXNlICovCi0JX191OAlzX3Jlc2VydmVkX2NoYXJfcGFkOworCV9fdTgJc19qbmxfYmFja3VwX3R5cGU7CiAJX19sZTE2ICBzX2Rlc2Nfc2l6ZTsJCS8qIHNpemUgb2YgZ3JvdXAgZGVzY3JpcHRvciAqLwogLyoxMDAqLwlfX2xlMzIJc19kZWZhdWx0X21vdW50X29wdHM7CiAJX19sZTMyCXNfZmlyc3RfbWV0YV9iZzsJLyogRmlyc3QgbWV0YWJsb2NrIGJsb2NrIGdyb3VwICovCkBAIC0xMDAwLDEyICsxMDA0LDM0IEBACiAJX19sZTY0ICBzX21tcF9ibG9jazsgICAgICAgICAgICAvKiBCbG9jayBmb3IgbXVsdGktbW91bnQgcHJvdGVjdGlvbiAqLwogCV9fbGUzMiAgc19yYWlkX3N0cmlwZV93aWR0aDsgICAgLyogYmxvY2tzIG9uIGFsbCBkYXRhIGRpc2tzIChOKnN0cmlkZSkqLwogCV9fdTgJc19sb2dfZ3JvdXBzX3Blcl9mbGV4OyAgLyogRkxFWF9CRyBncm91cCBzaXplICovCi0JX191OAlzX3Jlc2VydmVkX2NoYXJfcGFkMjsKKwlfX3U4CXNfcmVzZXJ2ZWRfY2hhcl9wYWQ7CiAJX19sZTE2ICBzX3Jlc2VydmVkX3BhZDsKIAlfX2xlNjQJc19rYnl0ZXNfd3JpdHRlbjsJLyogbnIgb2YgbGlmZXRpbWUga2lsb2J5dGVzIHdyaXR0ZW4gKi8KLQlfX3UzMiAgIHNfcmVzZXJ2ZWRbMTYwXTsgICAgICAgIC8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKwlfX2xlMzIJc19zbmFwc2hvdF9pbnVtOwkvKiBJbm9kZSBudW1iZXIgb2YgYWN0aXZlIHNuYXBzaG90ICovCisJX19sZTMyCXNfc25hcHNob3RfaWQ7CQkvKiBzZXF1ZW50aWFsIElEIG9mIGFjdGl2ZSBzbmFwc2hvdCAqLworCV9fbGU2NAlzX3NuYXBzaG90X3JfYmxvY2tzX2NvdW50OyAvKiByZXNlcnZlZCBibG9ja3MgZm9yIGFjdGl2ZQorCQkJCQkgICAgICBzbmFwc2hvdCdzIGZ1dHVyZSB1c2UgKi8KKwlfX2xlMzIJc19zbmFwc2hvdF9saXN0OwkvKiBpbm9kZSBudW1iZXIgb2YgdGhlIGhlYWQgb2YgdGhlCisJCQkJCSAgIG9uLWRpc2sgc25hcHNob3QgbGlzdCAqLworI2RlZmluZSBFWFQ0X1NfRVJSX1NUQVJUIG9mZnNldG9mKHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrLCBzX2Vycm9yX2NvdW50KQorCV9fbGUzMglzX2Vycm9yX2NvdW50OwkJLyogbnVtYmVyIG9mIGZzIGVycm9ycyAqLworCV9fbGUzMglzX2ZpcnN0X2Vycm9yX3RpbWU7CS8qIGZpcnN0IHRpbWUgYW4gZXJyb3IgaGFwcGVuZWQgKi8KKwlfX2xlMzIJc19maXJzdF9lcnJvcl9pbm87CS8qIGlub2RlIGludm9sdmVkIGluIGZpcnN0IGVycm9yICovCisJX19sZTY0CXNfZmlyc3RfZXJyb3JfYmxvY2s7CS8qIGJsb2NrIGludm9sdmVkIG9mIGZpcnN0IGVycm9yICovCisJX191OAlzX2ZpcnN0X2Vycm9yX2Z1bmNbMzJdOwkvKiBmdW5jdGlvbiB3aGVyZSB0aGUgZXJyb3IgaGFwcGVuZWQgKi8KKwlfX2xlMzIJc19maXJzdF9lcnJvcl9saW5lOwkvKiBsaW5lIG51bWJlciB3aGVyZSBlcnJvciBoYXBwZW5lZCAqLworCV9fbGUzMglzX2xhc3RfZXJyb3JfdGltZTsJLyogbW9zdCByZWNlbnQgdGltZSBvZiBhbiBlcnJvciAqLworCV9fbGUzMglzX2xhc3RfZXJyb3JfaW5vOwkvKiBpbm9kZSBpbnZvbHZlZCBpbiBsYXN0IGVycm9yICovCisJX19sZTMyCXNfbGFzdF9lcnJvcl9saW5lOwkvKiBsaW5lIG51bWJlciB3aGVyZSBlcnJvciBoYXBwZW5lZCAqLworCV9fbGU2NAlzX2xhc3RfZXJyb3JfYmxvY2s7CS8qIGJsb2NrIGludm9sdmVkIG9mIGxhc3QgZXJyb3IgKi8KKwlfX3U4CXNfbGFzdF9lcnJvcl9mdW5jWzMyXTsJLyogZnVuY3Rpb24gd2hlcmUgdGhlIGVycm9yIGhhcHBlbmVkICovCisjZGVmaW5lIEVYVDRfU19FUlJfRU5EIG9mZnNldG9mKHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrLCBzX21vdW50X29wdHMpCisJX191OAlzX21vdW50X29wdHNbNjRdOworCV9fbGUzMglzX3Jlc2VydmVkWzExMl07ICAgICAgICAvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCiB9OwogCisjZGVmaW5lIEVYVDRfU19FUlJfTEVOIChFWFQ0X1NfRVJSX0VORCAtIEVYVDRfU19FUlJfU1RBUlQpCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCkBAIC0xMTQzLDYgKzExNjksOSBAQAogCiAJLyogd29ya3F1ZXVlIGZvciBkaW8gdW53cml0dGVuICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRpb191bndyaXR0ZW5fd3E7CisKKwkvKiB0aW1lciBmb3IgcGVyaW9kaWMgZXJyb3Igc3RhdHMgcHJpbnRpbmcgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBzX2Vycl9yZXBvcnQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBleHQ0X3NiX2luZm8gKkVYVDRfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTEzMTMsNiArMTM0MiwxMCBAQAogI2RlZmluZSBFWFQ0X0RFRk1fSk1PREVfREFUQQkweDAwMjAKICNkZWZpbmUgRVhUNF9ERUZNX0pNT0RFX09SREVSRUQJMHgwMDQwCiAjZGVmaW5lIEVYVDRfREVGTV9KTU9ERV9XQkFDSwkweDAwNjAKKyNkZWZpbmUgRVhUNF9ERUZNX05PQkFSUklFUgkweDAxMDAKKyNkZWZpbmUgRVhUNF9ERUZNX0JMT0NLX1ZBTElESVRZIDB4MDIwMAorI2RlZmluZSBFWFQ0X0RFRk1fRElTQ0FSRAkweDA0MDAKKyNkZWZpbmUgRVhUNF9ERUZNX05PREVMQUxMT0MJMHgwODAwCiAKIC8qCiAgKiBEZWZhdWx0IGpvdXJuYWwgYmF0Y2ggdGltZXMKQEAgLTEzNzksNiArMTQxMiw0MyBAQAogI2RlZmluZSBFWFQ0X01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQogCiAvKgorICogSWYgd2UgZXZlciBnZXQgc3VwcG9ydCBmb3IgZnMgYmxvY2sgc2l6ZXMgPiBwYWdlX3NpemUsIHdlJ2xsIG5lZWQKKyAqIHRvIHJlbW92ZSB0aGUgI2lmIHN0YXRlbWVudHMgaW4gdGhlIG5leHQgdHdvIGZ1bmN0aW9ucy4uLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKQoreworCXVuc2lnbmVkIGxlbiA9IGxlMTZfdG9fY3B1KGRsZW4pOworCisjaWYgKFBBR0VfQ0FDSEVfU0laRSA+PSA2NTUzNikKKwlpZiAobGVuID09IEVYVDRfTUFYX1JFQ19MRU4gfHwgbGVuID09IDApCisJCXJldHVybiBibG9ja3NpemU7CisJcmV0dXJuIChsZW4gJiA2NTUzMikgfCAoKGxlbiAmIDMpIDw8IDE2KTsKKyNlbHNlCisJcmV0dXJuIGxlbjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIF9fbGUxNiBleHQ0X3JlY19sZW5fdG9fZGlzayh1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKK3sKKwlpZiAoKGxlbiA+IGJsb2Nrc2l6ZSkgfHwgKGJsb2Nrc2l6ZSA+ICgxIDw8IDE4KSkgfHwgKGxlbiAmIDMpKQorCQlCVUcoKTsKKyNpZiAoUEFHRV9DQUNIRV9TSVpFID49IDY1NTM2KQorCWlmIChsZW4gPCA2NTUzNikKKwkJcmV0dXJuIGNwdV90b19sZTE2KGxlbik7CisJaWYgKGxlbiA9PSBibG9ja3NpemUpIHsKKwkJaWYgKGJsb2Nrc2l6ZSA9PSA2NTUzNikKKwkJCXJldHVybiBjcHVfdG9fbGUxNihFWFQ0X01BWF9SRUNfTEVOKTsKKwkJZWxzZQorCQkJcmV0dXJuIGNwdV90b19sZTE2KDApOworCX0KKwlyZXR1cm4gY3B1X3RvX2xlMTYoKGxlbiAmIDY1NTMyKSB8ICgobGVuID4+IDE2KSAmIDMpKTsKKyNlbHNlCisJcmV0dXJuIGNwdV90b19sZTE2KGxlbik7CisjZW5kaWYKK30KKworLyoKICAqIEhhc2ggVHJlZSBEaXJlY3RvcnkgaW5kZXhpbmcKICAqIChjKSBEYW5pZWwgUGhpbGxpcHMsIDIwMDEKICAqLwpAQCAtMTUxMCw5ICsxNTgwLDExIEBACiAJCWV4dDRfaW5pdF9ibG9ja19iaXRtYXAoc2IsIE5VTEwsIGdyb3VwLCBkZXNjKQogCiAvKiBkaXIuYyAqLwotZXh0ZXJuIGludCBleHQ0X2NoZWNrX2Rpcl9lbnRyeShjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqLAotCQkJCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICosCi0JCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IF9fZXh0NF9jaGVja19kaXJfZW50cnkoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBpbm9kZSAqLAorCQkJCSAgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCBpbnQpOworI2RlZmluZSBleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIGRlLCBiaCwgb2Zmc2V0KSBcCisJX19leHQ0X2NoZWNrX2Rpcl9lbnRyeShfX2Z1bmNfXywgX19MSU5FX18sIChkaXIpLCAoZGUpLCAoYmgpLCAob2Zmc2V0KSkKIGV4dGVybiBpbnQgZXh0NF9odHJlZV9zdG9yZV9kaXJlbnQoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBoYXNoLAogCQkJCSAgICBfX3UzMiBtaW5vcl9oYXNoLAogCQkJCSAgICBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZGlyZW50KTsKQEAgLTE1NzEsNyArMTY0Myw4IEBACiBleHRlcm4gaW50ICBleHQ0X3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gaW50ICBleHQ0X2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQlzdHJ1Y3Qga3N0YXQgKnN0YXQpOwotZXh0ZXJuIHZvaWQgZXh0NF9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgIGV4dDRfc3luY19pbm9kZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQ0X2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0NF9jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpAQCAtMTYwMSw4ICsxNjc0LDYgQEAKIGV4dGVybiBpbnQgZXh0NF9leHRfbWlncmF0ZShzdHJ1Y3QgaW5vZGUgKik7CiAKIC8qIG5hbWVpLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhfX2xlMTYgZGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKTsKLWV4dGVybiBfX2xlMTYgZXh0NF9yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuLCB1bnNpZ25lZCBibG9ja3NpemUpOwogZXh0ZXJuIGludCBleHQ0X29ycGhhbl9hZGQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X29ycGhhbl9kZWwoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBleHQ0X2h0cmVlX2ZpbGxfdHJlZShzdHJ1Y3QgZmlsZSAqZGlyX2ZpbGUsIF9fdTMyIHN0YXJ0X2hhc2gsCkBAIC0xNjE2LDI1ICsxNjg3LDM4IEBACiAJCQkJZXh0NF9mc2Jsa190IG5fYmxvY2tzX2NvdW50KTsKIAogLyogc3VwZXIuYyAqLwotZXh0ZXJuIHZvaWQgX19leHQ0X2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKLSNkZWZpbmUgZXh0NF9lcnJvcihzYiwgbWVzc2FnZS4uLikJX19leHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywgIyMgbWVzc2FnZSkKLWV4dGVybiB2b2lkIGV4dDRfZXJyb3JfaW5vZGUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIHZvaWQgZXh0NF9lcnJvcl9maWxlKGNvbnN0IGNoYXIgKiwgc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCAuLi4pCi0JX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIHZvaWQgX19leHQ0X3N0ZF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgZXh0NF9hYm9ydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7Ci1leHRlcm4gdm9pZCBfX2V4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLAorZXh0ZXJuIHZvaWQgX19leHQ0X2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwKKwkJCSBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDQsIDUpKSk7CisjZGVmaW5lIGV4dDRfZXJyb3Ioc2IsIG1lc3NhZ2UuLi4pCV9fZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCVwKKwkJCQkJCSAgICAgX19MSU5FX18sICMjIG1lc3NhZ2UpCitleHRlcm4gdm9pZCBleHQ0X2Vycm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwKKwkJCSAgICAgZXh0NF9mc2Jsa190LCBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDUsIDYpKSk7CitleHRlcm4gdm9pZCBleHQ0X2Vycm9yX2ZpbGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsCisJCQkgICAgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOworZXh0ZXJuIHZvaWQgX19leHQ0X3N0ZF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLAorCQkJICAgICB1bnNpZ25lZCBpbnQsIGludCk7CitleHRlcm4gdm9pZCBfX2V4dDRfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICAgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOworI2RlZmluZSBleHQ0X2Fib3J0KHNiLCBtZXNzYWdlLi4uKQlfX2V4dDRfYWJvcnQoc2IsIF9fZnVuY19fLCBcCisJCQkJCQkgICAgICAgX19MSU5FX18sICMjIG1lc3NhZ2UpCitleHRlcm4gdm9pZCBfX2V4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsCiAJCQkgIGNvbnN0IGNoYXIgKiwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKLSNkZWZpbmUgZXh0NF93YXJuaW5nKHNiLCBtZXNzYWdlLi4uKQlfX2V4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICMjIG1lc3NhZ2UpCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpOworI2RlZmluZSBleHQ0X3dhcm5pbmcoc2IsIG1lc3NhZ2UuLi4pCV9fZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywgXAorCQkJCQkJICAgICAgIF9fTElORV9fLCAjIyBtZXNzYWdlKQogZXh0ZXJuIHZvaWQgZXh0NF9tc2coc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwotZXh0ZXJuIHZvaWQgZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBleHQ0X2dyb3VwX3QsCi0JCQkJY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDQsIDUpKSk7CitleHRlcm4gdm9pZCBfX2V4dDRfZ3JwX2xvY2tlZF9lcnJvcihjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCwgXAorCQkJCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZXh0NF9ncm91cF90LCBcCisJCQkJICAgIHVuc2lnbmVkIGxvbmcsIGV4dDRfZnNibGtfdCwgXAorCQkJCSAgICBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDcsIDgpKSk7CisjZGVmaW5lIGV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZ3JwLCBtZXNzYWdlLi4uKSBcCisJX19leHQ0X2dycF9sb2NrZWRfZXJyb3IoX19mdW5jX18sIF9fTElORV9fLCAoc2IpLCAoZ3JwKSwgIyMgbWVzc2FnZSkKIGV4dGVybiB2b2lkIGV4dDRfdXBkYXRlX2R5bmFtaWNfcmV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBleHQ0X3VwZGF0ZV9jb21wYXRfZmVhdHVyZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQlfX3UzMiBjb21wYXQpOwpAQCAtMTc2OCw3ICsxODUyLDcgQEAKICNkZWZpbmUgZXh0NF9zdGRfZXJyb3Ioc2IsIGVycm5vKQkJCQlcCiBkbyB7CQkJCQkJCQlcCiAJaWYgKChlcnJubykpCQkJCQkJXAotCQlfX2V4dDRfc3RkX2Vycm9yKChzYiksIF9fZnVuY19fLCAoZXJybm8pKTsJXAorCQlfX2V4dDRfc3RkX2Vycm9yKChzYiksIF9fZnVuY19fLCBfX0xJTkVfXywgKGVycm5vKSk7CVwKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xODYwLDYgKzE5NDQsMTIgQEAKIAlzcGluX3VubG9jayhleHQ0X2dyb3VwX2xvY2tfcHRyKHNiLCBncm91cCkpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9tYXJrX3N1cGVyX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaWYgKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwgPT0gTlVMTCkKKwkJc2ItPnNfZGlydCA9MTsKK30KKwogLyoKICAqIElub2RlcyBhbmQgZmlsZXMgb3BlcmF0aW9ucwogICovCkBAIC0xOTA1LDkgKzE5OTUsNiBAQAogCQkJICBzc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIGludCBleHQ0X2dldF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcywKLQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBmbGFncyk7CiBleHRlcm4gaW50IGV4dDRfZmllbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm8gKmZpZWluZm8sCiAJCQlfX3U2NCBzdGFydCwgX191NjQgbGVuKTsKIC8qIG1vdmVfZXh0ZW50LmMgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMgYi9mcy9leHQ0L2V4dDRfamJkMi5jCmluZGV4IDUzZDI3NjQuLjZlMjcyZWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmMKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuYwpAQCAtNiwyOSArNiwyOSBAQAogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2V4dDQuaD4KIAotaW50IF9fZXh0NF9qb3VybmFsX2dldF91bmRvX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoraW50IF9fZXh0NF9qb3VybmFsX2dldF91bmRvX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCisJCQkJICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKSB7CiAJCWVyciA9IGpiZDJfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlLCBiaCk7CiAJCWlmIChlcnIpCi0JCQlleHQ0X2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBfX2Z1bmNfXywgYmgsCisJCQlleHQ0X2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBsaW5lLCBfX2Z1bmNfXywgYmgsCiAJCQkJCQkgIGhhbmRsZSwgZXJyKTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IF9fZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK2ludCBfX2V4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKSB7CiAJCWVyciA9IGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwogCQlpZiAoZXJyKQotCQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgX19mdW5jX18sIGJoLAorCQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgbGluZSwgX19mdW5jX18sIGJoLAogCQkJCQkJICBoYW5kbGUsIGVycik7CiAJfQogCXJldHVybiBlcnI7CkBAIC00Niw5ICs0Niw5IEBACiAgKiBJZiB0aGUgaGFuZGxlIGlzbid0IHZhbGlkIHdlJ3JlIG5vdCBqb3VybmFsaW5nLCBidXQgd2Ugc3RpbGwgbmVlZCB0bwogICogY2FsbCBpbnRvIGV4dDRfam91cm5hbF9yZXZva2UoKSB0byBwdXQgdGhlIGJ1ZmZlciBoZWFkLgogICovCi1pbnQgX19leHQ0X2ZvcmdldChjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwgaW50IGlzX21ldGFkYXRhLAotCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgZXh0NF9mc2Jsa190IGJsb2NrbnIpCitpbnQgX19leHQ0X2ZvcmdldChjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsIGhhbmRsZV90ICpoYW5kbGUsCisJCSAgaW50IGlzX21ldGFkYXRhLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGV4dDRfZnNibGtfdCBibG9ja25yKQogewogCWludCBlcnI7CiAKQEAgLTc5LDggKzc5LDggQEAKIAkJCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgamJkMl9qb3VybmFsX2ZvcmdldCIpOwogCQkJZXJyID0gamJkMl9qb3VybmFsX2ZvcmdldChoYW5kbGUsIGJoKTsKIAkJCWlmIChlcnIpCi0JCQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgX19mdW5jX18sIGJoLAotCQkJCQkJCSAgaGFuZGxlLCBlcnIpOworCQkJCWV4dDRfam91cm5hbF9hYm9ydF9oYW5kbGUod2hlcmUsIGxpbmUsIF9fZnVuY19fLAorCQkJCQkJCSAgYmgsIGhhbmRsZSwgZXJyKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJcmV0dXJuIDA7CkBAIC05MiwxNSArOTIsMTYgQEAKIAlCVUZGRVJfVFJBQ0UoYmgsICJjYWxsIGpiZDJfam91cm5hbF9yZXZva2UiKTsKIAllcnIgPSBqYmQyX2pvdXJuYWxfcmV2b2tlKGhhbmRsZSwgYmxvY2tuciwgYmgpOwogCWlmIChlcnIpIHsKLQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgX19mdW5jX18sIGJoLCBoYW5kbGUsIGVycik7Ci0JCWV4dDRfYWJvcnQoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQlleHQ0X2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBsaW5lLCBfX2Z1bmNfXywKKwkJCQkJICBiaCwgaGFuZGxlLCBlcnIpOworCQlfX2V4dDRfYWJvcnQoaW5vZGUtPmlfc2IsIHdoZXJlLCBsaW5lLAogCQkJICAgImVycm9yICVkIHdoZW4gYXR0ZW1wdGluZyByZXZva2UiLCBlcnIpOwogCX0KIAlCVUZGRVJfVFJBQ0UoYmgsICJleGl0Iik7CiAJcmV0dXJuIGVycjsKIH0KIAotaW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLAoraW50IF9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKIAkJCQloYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCWludCBlcnIgPSAwOwpAQCAtMTA4LDIyICsxMDksMjMgQEAKIAlpZiAoZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkgewogCQllcnIgPSBqYmQyX2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CiAJCWlmIChlcnIpCi0JCQlleHQ0X2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBfX2Z1bmNfXywgYmgsCi0JCQkJCQkgIGhhbmRsZSwgZXJyKTsKKwkJCWV4dDRfam91cm5hbF9hYm9ydF9oYW5kbGUod2hlcmUsIGxpbmUsIF9fZnVuY19fLAorCQkJCQkJICBiaCwgaGFuZGxlLCBlcnIpOwogCX0KIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK2ludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlpbnQgZXJyID0gMDsKIAogCWlmIChleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKSB7CiAJCWVyciA9IGpiZDJfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKIAkJaWYgKGVycikKLQkJCWV4dDRfam91cm5hbF9hYm9ydF9oYW5kbGUod2hlcmUsIF9fZnVuY19fLCBiaCwKLQkJCQkJCSAgaGFuZGxlLCBlcnIpOworCQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgbGluZSwgX19mdW5jX18sCisJCQkJCQkgIGJoLCBoYW5kbGUsIGVycik7CiAJfSBlbHNlIHsKIAkJaWYgKGlub2RlKQogCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKQEAgLTEzMiwxNCArMTM0LDMzIEBACiAJCWlmIChpbm9kZSAmJiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICYmICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkJICAgIklPIGVycm9yIHN5bmNpbmcgaW5vZGUsICIKLQkJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCi0JCQkJCSAgIGlub2RlLT5pX2lubywKLQkJCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmgtPmJfYmxvY2tucik7CisJCQkJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzOworCisJCQkJZXMgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lczsKKwkJCQllcy0+c19sYXN0X2Vycm9yX2Jsb2NrID0KKwkJCQkJY3B1X3RvX2xlNjQoYmgtPmJfYmxvY2tucik7CisJCQkJZXh0NF9lcnJvcl9pbm9kZShpbm9kZSwgd2hlcmUsIGxpbmUsCisJCQkJCQkgYmgtPmJfYmxvY2tuciwKKwkJCQkJIklPIGVycm9yIHN5bmNpbmcgaXRhYmxlIGJsb2NrIik7CiAJCQkJZXJyID0gLUVJTzsKIAkJCX0KIAkJfQogCX0KIAlyZXR1cm4gZXJyOwogfQorCitpbnQgX19leHQ0X2hhbmRsZV9kaXJ0eV9zdXBlcihjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCisJCQkgICAgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBFWFQ0X1NCKHNiKS0+c19zYmg7CisJaW50IGVyciA9IDA7CisKKwlpZiAoZXh0NF9oYW5kbGVfdmFsaWQoaGFuZGxlKSkgeworCQllcnIgPSBqYmQyX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CisJCWlmIChlcnIpCisJCQlleHQ0X2pvdXJuYWxfYWJvcnRfaGFuZGxlKHdoZXJlLCBsaW5lLCBfX2Z1bmNfXywKKwkJCQkJCSAgYmgsIGhhbmRsZSwgZXJyKTsKKwl9IGVsc2UKKwkJc2ItPnNfZGlydCA9IDE7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IGRhZGUwYzAuLmIwYmQ3OTIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtMTIyLDM5ICsxMjIsNDcgQEAKIC8qCiAgKiBXcmFwcGVyIGZ1bmN0aW9ucyB3aXRoIHdoaWNoIGV4dDQgY2FsbHMgaW50byBKQkQuCiAgKi8KLXZvaWQgZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZShjb25zdCBjaGFyICpjYWxsZXIsIGNvbnN0IGNoYXIgKmVycl9mbiwKK3ZvaWQgZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZShjb25zdCBjaGFyICpjYWxsZXIsIHVuc2lnbmVkIGludCBsaW5lLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmVycl9mbiwKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycik7CiAKLWludCBfX2V4dDRfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitpbnQgX19leHQ0X2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKIAotaW50IF9fZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoY29uc3QgY2hhciAqd2hlcmUsIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CitpbnQgX19leHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCisJCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwogCi1pbnQgX19leHQ0X2ZvcmdldChjb25zdCBjaGFyICp3aGVyZSwgaGFuZGxlX3QgKmhhbmRsZSwgaW50IGlzX21ldGFkYXRhLAotCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCi0JCSAgZXh0NF9mc2Jsa190IGJsb2NrbnIpOworaW50IF9fZXh0NF9mb3JnZXQoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkgIGludCBpc19tZXRhZGF0YSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBleHQ0X2ZzYmxrX3QgYmxvY2tucik7CiAKLWludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwKK2ludCBfX2V4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2Vzcyhjb25zdCBjaGFyICp3aGVyZSwgdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKLWludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKK2ludCBfX2V4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCQkgaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisKK2ludCBfX2V4dDRfaGFuZGxlX2RpcnR5X3N1cGVyKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCSAgICAgIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCiAjZGVmaW5lIGV4dDRfam91cm5hbF9nZXRfdW5kb19hY2Nlc3MoaGFuZGxlLCBiaCkgXAotCV9fZXh0NF9qb3VybmFsX2dldF91bmRvX2FjY2VzcyhfX2Z1bmNfXywgKGhhbmRsZSksIChiaCkpCisJX19leHQ0X2pvdXJuYWxfZ2V0X3VuZG9fYWNjZXNzKF9fZnVuY19fLCBfX0xJTkVfXywgKGhhbmRsZSksIChiaCkpCiAjZGVmaW5lIGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpIFwKLQlfX2V4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKF9fZnVuY19fLCAoaGFuZGxlKSwgKGJoKSkKKwlfX2V4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKF9fZnVuY19fLCBfX0xJTkVfXywgKGhhbmRsZSksIChiaCkpCiAjZGVmaW5lIGV4dDRfZm9yZ2V0KGhhbmRsZSwgaXNfbWV0YWRhdGEsIGlub2RlLCBiaCwgYmxvY2tfbnIpIFwKLQlfX2V4dDRfZm9yZ2V0KF9fZnVuY19fLCAoaGFuZGxlKSwgKGlzX21ldGFkYXRhKSwgKGlub2RlKSwgKGJoKSxcCi0JCSAgICAgIChibG9ja19ucikpCisJX19leHQ0X2ZvcmdldChfX2Z1bmNfXywgX19MSU5FX18sIChoYW5kbGUpLCAoaXNfbWV0YWRhdGEpLCAoaW5vZGUpLCBcCisJCSAgICAgIChiaCksIChibG9ja19ucikpCiAjZGVmaW5lIGV4dDRfam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGUsIGJoKSBcCi0JX19leHQ0X2pvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoX19mdW5jX18sIChoYW5kbGUpLCAoYmgpKQorCV9fZXh0NF9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzKF9fZnVuY19fLCBfX0xJTkVfXywgKGhhbmRsZSksIChiaCkpCiAjZGVmaW5lIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKSBcCi0JX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShfX2Z1bmNfXywgKGhhbmRsZSksIChpbm9kZSksIChiaCkpCisJX19leHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShfX2Z1bmNfXywgX19MSU5FX18sIChoYW5kbGUpLCAoaW5vZGUpLCBcCisJCQkJICAgICAoYmgpKQorI2RlZmluZSBleHQ0X2hhbmRsZV9kaXJ0eV9zdXBlcihoYW5kbGUsIHNiKSBcCisJX19leHQ0X2hhbmRsZV9kaXJ0eV9zdXBlcihfX2Z1bmNfXywgX19MSU5FX18sIChoYW5kbGUpLCAoc2IpKQogCiBoYW5kbGVfdCAqZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuYmxvY2tzKTsKLWludCBfX2V4dDRfam91cm5hbF9zdG9wKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlKTsKK2ludCBfX2V4dDRfam91cm5hbF9zdG9wKGNvbnN0IGNoYXIgKndoZXJlLCB1bnNpZ25lZCBpbnQgbGluZSwgaGFuZGxlX3QgKmhhbmRsZSk7CiAKICNkZWZpbmUgRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCAoKHVuc2lnbmVkIGxvbmcpIDQwOTYpCiAKQEAgLTIwNyw3ICsyMTUsNyBAQAogfQogCiAjZGVmaW5lIGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSkgXAotCV9fZXh0NF9qb3VybmFsX3N0b3AoX19mdW5jX18sIChoYW5kbGUpKQorCV9fZXh0NF9qb3VybmFsX3N0b3AoX19mdW5jX18sIF9fTElORV9fLCAoaGFuZGxlKSkKIAogc3RhdGljIGlubGluZSBoYW5kbGVfdCAqZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKHZvaWQpCiB7CkBAIC0zMDgsMTcgKzMxNiwxNSBAQAogICogVGhpcyBmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdHJ5IHRvIGdvIGRvd24gdGhlCiAgKiBkaW9yZWFkX25vbG9jayBjb2RlIHBhdGhzLCB3aGljaCBtYWtlcyBpdCBzYWZlIHRvIGF2b2lkIHRha2luZwogICogaV9tdXRleCBmb3IgZGlyZWN0IEkvTyByZWFkcy4gIFRoaXMgb25seSB3b3JrcyBmb3IgZXh0ZW50LWJhc2VkCi0gKiBmaWxlcywgYW5kIGl0IGRvZXNuJ3Qgd29yayBmb3Igbm9iaCBvciBpZiBkYXRhIGpvdXJuYWxpbmcgaXMKLSAqIGVuYWJsZWQsIHNpbmNlIHRoZSBkaW9yZWFkX25vbG9jayBjb2RlIHVzZXMgYl9wcml2YXRlIHRvIHBhc3MKLSAqIGluZm9ybWF0aW9uIGJhY2sgdG8gdGhlIEkvTyBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCB0aGlzIGNvbmZsaWN0cwotICogd2l0aCB0aGUgamJkJ3MgdXNlIG9mIGJfcHJpdmF0ZS4KKyAqIGZpbGVzLCBhbmQgaXQgZG9lc24ndCB3b3JrIGlmIGRhdGEgam91cm5hbGluZyBpcyBlbmFibGVkLCBzaW5jZSB0aGUKKyAqIGRpb3JlYWRfbm9sb2NrIGNvZGUgdXNlcyBiX3ByaXZhdGUgdG8gcGFzcyBpbmZvcm1hdGlvbiBiYWNrIHRvIHRoZQorICogSS9PIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlIGpiZCdzIHVzZSBvZgorICogYl9wcml2YXRlLgogICovCiBzdGF0aWMgaW5saW5lIGludCBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmICghdGVzdF9vcHQoaW5vZGUtPmlfc2IsIERJT1JFQURfTk9MT0NLKSkKIAkJcmV0dXJuIDA7Ci0JaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT0JIKSkKLQkJcmV0dXJuIDA7CiAJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gMDsKIAlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IGJmMDI5YzcuLjA2MzI4ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC00MDEsOSArNDAxLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2V4dDRfZXh0X2NoZWNrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCwKLQkJCQkJaW50IGRlcHRoKQorc3RhdGljIGludCBfX2V4dDRfZXh0X2NoZWNrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCwKKwkJCSAgICBpbnQgZGVwdGgpCiB7CiAJY29uc3QgY2hhciAqZXJyb3JfbXNnOwogCWludCBtYXggPSAwOwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIDA7CiAKIGNvcnJ1cHRlZDoKLQlleHQ0X2Vycm9yX2lub2RlKGZ1bmN0aW9uLCBpbm9kZSwKKwlleHQ0X2Vycm9yX2lub2RlKGlub2RlLCBmdW5jdGlvbiwgbGluZSwgMCwKIAkJCSJiYWQgaGVhZGVyL2V4dGVudDogJXMgLSBtYWdpYyAleCwgIgogCQkJImVudHJpZXMgJXUsIG1heCAldSgldSksIGRlcHRoICV1KCV1KSIsCiAJCQllcnJvcl9tc2csIGxlMTZfdG9fY3B1KGVoLT5laF9tYWdpYyksCkBAIC00NDcsNyArNDQ3LDcgQEAKIH0KIAogI2RlZmluZSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoKQlcCi0JX19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgaW5vZGUsIGVoLCBkZXB0aCkKKwlfX2V4dDRfZXh0X2NoZWNrKF9fZnVuY19fLCBfX0xJTkVfXywgaW5vZGUsIGVoLCBkZXB0aCkKIAogaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0xMDgzLDcgKzEwODMsNiBAQAogewogCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpjdXJwID0gcGF0aDsKIAlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICpuZWg7Ci0Jc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqZmlkeDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWV4dDRfZnNibGtfdCBuZXdibG9jazsKIAlpbnQgZXJyID0gMDsKQEAgLTExNDQsMTAgKzExNDMsMTAgQEAKIAlleHQ0X2lkeF9zdG9yZV9wYmxvY2soY3VycC0+cF9pZHgsIG5ld2Jsb2NrKTsKIAogCW5laCA9IGV4dF9pbm9kZV9oZHIoaW5vZGUpOwotCWZpZHggPSBFWFRfRklSU1RfSU5ERVgobmVoKTsKIAlleHRfZGVidWcoIm5ldyByb290OiBudW0gJWQoJWQpLCBsYmxvY2sgJWQsIHB0ciAlbGx1XG4iLAogCQkgIGxlMTZfdG9fY3B1KG5laC0+ZWhfZW50cmllcyksIGxlMTZfdG9fY3B1KG5laC0+ZWhfbWF4KSwKLQkJICBsZTMyX3RvX2NwdShmaWR4LT5laV9ibG9jayksIGlkeF9wYmxvY2soZmlkeCkpOworCQkgIGxlMzJfdG9fY3B1KEVYVF9GSVJTVF9JTkRFWChuZWgpLT5laV9ibG9jayksCisJCSAgaWR4X3BibG9jayhFWFRfRklSU1RfSU5ERVgobmVoKSkpOwogCiAJbmVoLT5laF9kZXB0aCA9IGNwdV90b19sZTE2KHBhdGgtPnBfZGVwdGggKyAxKTsKIAllcnIgPSBleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBjdXJwKTsKQEAgLTI5NTQsNyArMjk1Myw2IEBACiAJc3RydWN0IGV4dDRfZXh0ZW50ICpleDEgPSBOVUxMOwogCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgyID0gTlVMTDsKIAlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MyA9IE5VTEw7Ci0Jc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CiAJZXh0NF9sYmxrX3QgZWVfYmxvY2ssIGVvZl9ibG9jazsKIAl1bnNpZ25lZCBpbnQgYWxsb2NhdGVkLCBlZV9sZW4sIGRlcHRoOwogCWV4dDRfZnNibGtfdCBuZXdibG9jazsKQEAgLTI5NzEsNyArMjk2OSw2IEBACiAJCWVvZl9ibG9jayA9IG1hcC0+bV9sYmxrICsgbWFwLT5tX2xlbjsKIAogCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKLQllaCA9IHBhdGhbZGVwdGhdLnBfaGRyOwogCWV4ID0gcGF0aFtkZXB0aF0ucF9leHQ7CiAJZWVfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOwogCWVlX2xlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKQEAgLTMwNTgsNyArMzA1NSw2IEBACiAJCQllcnIgPSBQVFJfRVJSKHBhdGgpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJZWggPSBwYXRoW2RlcHRoXS5wX2hkcjsKIAkJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKIAkJaWYgKGV4MiAhPSAmbmV3ZXgpCiAJCQlleDIgPSBleDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggNTMxM2FlNC4uZWU5MmI2NiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTcwLDcgKzcwLDggQEAKIAkJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7CiAJCXNpemVfdCBsZW5ndGggPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CiAKLQkJaWYgKHBvcyA+IHNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMpCisJCWlmICgocG9zID4gc2JpLT5zX2JpdG1hcF9tYXhieXRlcyB8fAorCQkgICAgKHBvcyA9PSBzYmktPnNfYml0bWFwX21heGJ5dGVzICYmIGxlbmd0aCA+IDApKSkKIAkJCXJldHVybiAtRUZCSUc7CiAKIAkJaWYgKHBvcyArIGxlbmd0aCA+IHNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMpIHsKQEAgLTEyMyw3ICsxMjQsNyBAQAogCQlpZiAoIUlTX0VSUihjcCkpIHsKIAkJCW1lbWNweShzYmktPnNfZXMtPnNfbGFzdF9tb3VudGVkLCBjcCwKIAkJCSAgICAgICBzaXplb2Yoc2JpLT5zX2VzLT5zX2xhc3RfbW91bnRlZCkpOwotCQkJc2ItPnNfZGlydCA9IDE7CisJCQlleHQ0X21hcmtfc3VwZXJfZGlydHkoc2IpOwogCQl9CiAJfQogCXJldHVybiBkcXVvdF9maWxlX29wZW4oaW5vZGUsIGZpbHApOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmMKaW5kZXggMjVjNGIzMS4uNDU4NTNlMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYworKysgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCiAJLyogRG8gdGhpcyBCRUZPUkUgbWFya2luZyB0aGUgaW5vZGUgbm90IGluIHVzZSBvciByZXR1cm5pbmcgYW4gZXJyb3IgKi8KLQljbGVhcl9pbm9kZShpbm9kZSk7CisJZXh0NF9jbGVhcl9pbm9kZShpbm9kZSk7CiAKIAllcyA9IEVYVDRfU0Ioc2IpLT5zX2VzOwogCWlmIChpbm8gPCBFWFQ0X0ZJUlNUX0lOTyhzYikgfHwgaW5vID4gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgewpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgYml0bWFwX2JoKTsKIAkJaWYgKCFmYXRhbCkKIAkJCWZhdGFsID0gZXJyOwotCQlzYi0+c19kaXJ0ID0gMTsKKwkJZXh0NF9tYXJrX3N1cGVyX2RpcnR5KHNiKTsKIAl9IGVsc2UKIAkJZXh0NF9lcnJvcihzYiwgImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGlub2RlICVsdSIsIGlubyk7CiAKQEAgLTk2NSw3ICs5NjUsNyBAQAogCXBlcmNwdV9jb3VudGVyX2RlYygmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlcik7CiAJaWYgKFNfSVNESVIobW9kZSkpCiAJCXBlcmNwdV9jb3VudGVyX2luYygmc2JpLT5zX2RpcnNfY291bnRlcik7Ci0Jc2ItPnNfZGlydCA9IDE7CisJZXh0NF9tYXJrX3N1cGVyX2RpcnR5KHNiKTsKIAogCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewogCQlmbGV4X2dyb3VwID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgZ3JvdXApOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDBhZmM4YzEuLjRiOGRlYmUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE2NywxMSArMTY3LDE2IEBACiAvKgogICogQ2FsbGVkIGF0IHRoZSBsYXN0IGlwdXQoKSBpZiBpX25saW5rIGlzIHplcm8uCiAgKi8KLXZvaWQgZXh0NF9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWhhbmRsZV90ICpoYW5kbGU7CiAJaW50IGVycjsKIAorCWlmIChpbm9kZS0+aV9ubGluaykgeworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJCWdvdG8gbm9fZGVsZXRlOworCX0KKwogCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CiAKQEAgLTIyMSw2ICsyMjYsNyBAQAogCQkJCSAgICAgImNvdWxkbid0IGV4dGVuZCBqb3VybmFsIChlcnIgJWQpIiwgZXJyKTsKIAkJc3RvcF9oYW5kbGU6CiAJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworCQkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAkJCWdvdG8gbm9fZGVsZXRlOwogCQl9CiAJfQpAQCAtMjQ1LDEzICsyNTEsMTMgQEAKIAkgKi8KIAlpZiAoZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpKQogCQkvKiBJZiB0aGF0IGZhaWxlZCwganVzdCBkbyB0aGUgcmVxdWlyZWQgaW4tY29yZSBpbm9kZSBjbGVhci4gKi8KLQkJY2xlYXJfaW5vZGUoaW5vZGUpOworCQlleHQ0X2NsZWFyX2lub2RlKGlub2RlKTsKIAllbHNlCiAJCWV4dDRfZnJlZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKIAlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCXJldHVybjsKIG5vX2RlbGV0ZToKLQljbGVhcl9pbm9kZShpbm9kZSk7CS8qIFdlIG11c3QgZ3VhcmFudGVlIGNsZWFyaW5nIG9mIGlub2RlLi4uICovCisJZXh0NF9jbGVhcl9pbm9kZShpbm9kZSk7CS8qIFdlIG11c3QgZ3VhcmFudGVlIGNsZWFyaW5nIG9mIGlub2RlLi4uICovCiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTMzNyw5ICszNDMsMTEgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBfX2V4dDRfY2hlY2tfYmxvY2tyZWYoY29uc3QgY2hhciAqZnVuY3Rpb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IF9fZXh0NF9jaGVja19ibG9ja3JlZihjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJIF9fbGUzMiAqcCwgdW5zaWduZWQgaW50IG1heCkKIHsKKwlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lczsKIAlfX2xlMzIgKmJyZWYgPSBwOwogCXVuc2lnbmVkIGludCBibGs7CiAKQEAgLTM0OCw4ICszNTYsOSBAQAogCQlpZiAoYmxrICYmCiAJCSAgICB1bmxpa2VseSghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLAogCQkJCQkJICAgIGJsaywgMSkpKSB7Ci0JCQlleHQ0X2Vycm9yX2lub2RlKGZ1bmN0aW9uLCBpbm9kZSwKLQkJCQkJICJpbnZhbGlkIGJsb2NrIHJlZmVyZW5jZSAldSIsIGJsayk7CisJCQllcy0+c19sYXN0X2Vycm9yX2Jsb2NrID0gY3B1X3RvX2xlNjQoYmxrKTsKKwkJCWV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIGZ1bmN0aW9uLCBsaW5lLCBibGssCisJCQkJCSAiaW52YWxpZCBibG9jayIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC0zNTgsMTEgKzM2NywxMyBAQAogCiAKICNkZWZpbmUgZXh0NF9jaGVja19pbmRpcmVjdF9ibG9ja3JlZihpbm9kZSwgYmgpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfX2V4dDRfY2hlY2tfYmxvY2tyZWYoX19mdW5jX18sIGlub2RlLCAoX19sZTMyICopKGJoKS0+Yl9kYXRhLCAgXAorCV9fZXh0NF9jaGVja19ibG9ja3JlZihfX2Z1bmNfXywgX19MSU5FX18sIGlub2RlLAkJXAorCQkJICAgICAgKF9fbGUzMiAqKShiaCktPmJfZGF0YSwJCQlcCiAJCQkgICAgICBFWFQ0X0FERFJfUEVSX0JMT0NLKChpbm9kZSktPmlfc2IpKQogCiAjZGVmaW5lIGV4dDRfY2hlY2tfaW5vZGVfYmxvY2tyZWYoaW5vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JX19leHQ0X2NoZWNrX2Jsb2NrcmVmKF9fZnVuY19fLCBpbm9kZSwgRVhUNF9JKGlub2RlKS0+aV9kYXRhLCAgIFwKKwlfX2V4dDRfY2hlY2tfYmxvY2tyZWYoX19mdW5jX18sIF9fTElORV9fLCBpbm9kZSwJCVwKKwkJCSAgICAgIEVYVDRfSShpbm9kZSktPmlfZGF0YSwJCQlcCiAJCQkgICAgICBFWFQ0X05ESVJfQkxPQ0tTKQogCiAvKioKQEAgLTExMjgsMjAgKzExMzksMjQgQEAKIAkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIH0KIAotc3RhdGljIGludCBjaGVja19ibG9ja192YWxpZGl0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jLAorc3RhdGljIGludCBfX2NoZWNrX2Jsb2NrX3ZhbGlkaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmZ1bmMsCisJCQkJdW5zaWduZWQgaW50IGxpbmUsCiAJCQkJc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwKQogewogCWlmICghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLCBtYXAtPm1fcGJsaywKIAkJCQkgICBtYXAtPm1fbGVuKSkgewotCQlleHQ0X2Vycm9yX2lub2RlKGZ1bmMsIGlub2RlLAotCQkJICAgImxibG9jayAlbHUgbWFwcGVkIHRvIGlsbGVnYWwgcGJsb2NrICVsbHUgIgotCQkJICAgIihsZW5ndGggJWQpIiwgKHVuc2lnbmVkIGxvbmcpIG1hcC0+bV9sYmxrLAotCQkJCSBtYXAtPm1fcGJsaywgbWFwLT5tX2xlbik7CisJCWV4dDRfZXJyb3JfaW5vZGUoaW5vZGUsIGZ1bmMsIGxpbmUsIG1hcC0+bV9wYmxrLAorCQkJCSAibGJsb2NrICVsdSBtYXBwZWQgdG8gaWxsZWdhbCBwYmxvY2sgIgorCQkJCSAiKGxlbmd0aCAlZCkiLCAodW5zaWduZWQgbG9uZykgbWFwLT5tX2xibGssCisJCQkJIG1hcC0+bV9sZW4pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgY2hlY2tfYmxvY2tfdmFsaWRpdHkoaW5vZGUsIG1hcCkJXAorCV9fY2hlY2tfYmxvY2tfdmFsaWRpdHkoKGlub2RlKSwgX19mdW5jX18sIF9fTElORV9fLCAobWFwKSkKKwogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZGlydHkgcGFnZXMgaW4gYSBnaXZlbiBpbm9kZQogICogc3RhcnRpbmcgYXQgcGFnZSBmcmFtZSBpZHguCkBAIC0xMjQ0LDcgKzEyNTksNyBAQAogCXVwX3JlYWQoKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKSk7CiAKIAlpZiAocmV0dmFsID4gMCAmJiBtYXAtPm1fZmxhZ3MgJiBFWFQ0X01BUF9NQVBQRUQpIHsKLQkJaW50IHJldCA9IGNoZWNrX2Jsb2NrX3ZhbGlkaXR5KGlub2RlLCBfX2Z1bmNfXywgbWFwKTsKKwkJaW50IHJldCA9IGNoZWNrX2Jsb2NrX3ZhbGlkaXR5KGlub2RlLCBtYXApOwogCQlpZiAocmV0ICE9IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEzMjQsOSArMTMzOSw3IEBACiAKIAl1cF93cml0ZSgoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pKTsKIAlpZiAocmV0dmFsID4gMCAmJiBtYXAtPm1fZmxhZ3MgJiBFWFQ0X01BUF9NQVBQRUQpIHsKLQkJaW50IHJldCA9IGNoZWNrX2Jsb2NrX3ZhbGlkaXR5KGlub2RlLAotCQkJCQkgICAgICAgImV4dDRfbWFwX2Jsb2Nrc19hZnRlcl9hbGxvYyIsCi0JCQkJCSAgICAgICBtYXApOworCQlpbnQgcmV0ID0gY2hlY2tfYmxvY2tfdmFsaWRpdHkoaW5vZGUsIG1hcCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTUxOSw5ICsxNTMyLDI1IEBACiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogeworCWludCBkaXJ0eSA9IGJ1ZmZlcl9kaXJ0eShiaCk7CisJaW50IHJldDsKKwogCWlmICghYnVmZmVyX21hcHBlZChiaCkgfHwgYnVmZmVyX2ZyZWVkKGJoKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCS8qCisJICogX19ibG9ja19wcmVwYXJlX3dyaXRlKCkgY291bGQgaGF2ZSBkaXJ0aWVkIHNvbWUgYnVmZmVycy4gQ2xlYW4KKwkgKiB0aGUgZGlydHkgYml0IGFzIGpiZDJfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKCkgY291bGQgY29tcGxhaW4KKwkgKiBvdGhlcndpc2UgYWJvdXQgZnMgaW50ZWdyaXR5IGlzc3Vlcy4gU2V0dGluZyBvZiB0aGUgZGlydHkgYml0CisJICogYnkgX19ibG9ja19wcmVwYXJlX3dyaXRlKCkgaXNuJ3QgYSByZWFsIHByb2JsZW0gaGVyZSBhcyB3ZSBjbGVhcgorCSAqIHRoZSBiaXQgYmVmb3JlIHJlbGVhc2luZyBhIHBhZ2UgbG9jayBhbmQgdGh1cyB3cml0ZWJhY2sgY2Fubm90CisJICogZXZlciB3cml0ZSB0aGUgYnVmZmVyLgorCSAqLworCWlmIChkaXJ0eSkKKwkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKKwlyZXQgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwlpZiAoIXJldCAmJiBkaXJ0eSkKKwkJcmV0ID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE1NzgsMTEgKzE2MDcsOSBAQAogCSpwYWdlcCA9IHBhZ2U7CiAKIAlpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKQotCQlyZXQgPSBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAotCQkJCWZzZGF0YSwgZXh0NF9nZXRfYmxvY2tfd3JpdGUpOworCQlyZXQgPSBfX2Jsb2NrX3dyaXRlX2JlZ2luKHBhZ2UsIHBvcywgbGVuLCBleHQ0X2dldF9ibG9ja193cml0ZSk7CiAJZWxzZQotCQlyZXQgPSBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAotCQkJCWZzZGF0YSwgZXh0NF9nZXRfYmxvY2spOworCQlyZXQgPSBfX2Jsb2NrX3dyaXRlX2JlZ2luKHBhZ2UsIHBvcywgbGVuLCBleHQ0X2dldF9ibG9jayk7CiAKIAlpZiAoIXJldCAmJiBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7CiAJCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLApAQCAtMTU5Myw3ICsxNjIwLDcgQEAKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJLyoKLQkJICogYmxvY2tfd3JpdGVfYmVnaW4gbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3IGJsb2NrcworCQkgKiBfX2Jsb2NrX3dyaXRlX2JlZ2luIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKIAkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4gRG9uJ3QgbmVlZAogCQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KIAkJICoKQEAgLTIxOTQsNyArMjIyMSw3IEBACiAJQlVHX09OKCFoYW5kbGUpOwogCiAJLyoKLQkgKiBDYWxsIGV4dDRfZ2V0X2Jsb2NrcygpIHRvIGFsbG9jYXRlIGFueSBkZWxheWVkIGFsbG9jYXRpb24KKwkgKiBDYWxsIGV4dDRfbWFwX2Jsb2NrcygpIHRvIGFsbG9jYXRlIGFueSBkZWxheWVkIGFsbG9jYXRpb24KIAkgKiBibG9ja3MsIG9yIHRvIGNvbnZlcnQgYW4gdW5pbml0aWFsaXplZCBleHRlbnQgdG8gYmUKIAkgKiBpbml0aWFsaXplZCAoaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSB3cml0dGVuIGludG8KIAkgKiBvbmUgb3IgbW9yZSBwcmVhbGxvY2F0ZWQgYmxvY2tzKS4KQEAgLTIyMDMsNyArMjIzMCw3IEBACiAJICogaW5kaWNhdGUgdGhhdCB3ZSBhcmUgb24gdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBwYXRoLiAgVGhpcwogCSAqIGFmZmVjdHMgZnVuY3Rpb25zIGluIG1hbnkgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhbGxvY2F0aW9uCiAJICogY2FsbCBwYXRoLiAgVGhpcyBmbGFnIGV4aXN0cyBwcmltYXJpbHkgYmVjYXVzZSB3ZSBkb24ndAotCSAqIHdhbnQgdG8gY2hhbmdlICptYW55KiBjYWxsIGZ1bmN0aW9ucywgc28gZXh0NF9nZXRfYmxvY2tzKCkKKwkgKiB3YW50IHRvIGNoYW5nZSAqbWFueSogY2FsbCBmdW5jdGlvbnMsIHNvIGV4dDRfbWFwX2Jsb2NrcygpCiAJICogd2lsbCBzZXQgdGhlIG1hZ2ljIGlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZyBvbmNlIHRoZQogCSAqIGlub2RlJ3MgYWxsb2NhdGlvbiBzZW1hcGhvcmUgaXMgdGFrZW4uCiAJICoKQEAgLTIyMjEsNiArMjI0OCw4IEBACiAKIAlibGtzID0gZXh0NF9tYXBfYmxvY2tzKGhhbmRsZSwgbXBkLT5pbm9kZSwgJm1hcCwgZ2V0X2Jsb2Nrc19mbGFncyk7CiAJaWYgKGJsa3MgPCAwKSB7CisJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBtcGQtPmlub2RlLT5pX3NiOworCiAJCWVyciA9IGJsa3M7CiAJCS8qCiAJCSAqIElmIGdldCBibG9jayByZXR1cm5zIHdpdGggZXJyb3Igd2Ugc2ltcGx5CkBAIC0yMjMxLDcgKzIyNjAsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAkJaWYgKGVyciA9PSAtRU5PU1BDICYmCi0JCSAgICBleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKG1wZC0+aW5vZGUtPmlfc2IpKSB7CisJCSAgICBleHQ0X2NvdW50X2ZyZWVfYmxvY2tzKHNiKSkgewogCQkJbXBkLT5yZXR2YWwgPSBlcnI7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjI0MywxNiArMjI3MiwxNyBAQAogCQkgKiB3cml0ZXBhZ2UgYW5kIHdyaXRlcGFnZXMgd2lsbCBhZ2FpbiB0cnkgdG8gd3JpdGUKIAkJICogdGhlIHNhbWUuCiAJCSAqLwotCQlleHQ0X21zZyhtcGQtPmlub2RlLT5pX3NiLCBLRVJOX0NSSVQsCi0JCQkgImRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSBhdCAiCi0JCQkgImxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICV6ZCB3aXRoICIKLQkJCSAiZXJyb3IgJWQiLCBtcGQtPmlub2RlLT5pX2lubywKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBuZXh0LAotCQkJIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiEhICAiCi0JCSAgICAgICAiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOwotCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKLQkJCWV4dDRfcHJpbnRfZnJlZV9ibG9ja3MobXBkLT5pbm9kZSk7CisJCWlmICghKEVYVDRfU0Ioc2IpLT5zX21vdW50X2ZsYWdzICYgRVhUNF9NRl9GU19BQk9SVEVEKSkgeworCQkJZXh0NF9tc2coc2IsIEtFUk5fQ1JJVCwKKwkJCQkgImRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQgZm9yIGlub2RlICVsdSAiCisJCQkJICJhdCBsb2dpY2FsIG9mZnNldCAlbGx1IHdpdGggbWF4IGJsb2NrcyAlemQgIgorCQkJCSAid2l0aCBlcnJvciAlZCIsIG1wZC0+aW5vZGUtPmlfaW5vLAorCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBuZXh0LAorCQkJCSBtcGQtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMsIGVycik7CisJCQlleHQ0X21zZyhzYiwgS0VSTl9DUklULAorCQkJCSJUaGlzIHNob3VsZCBub3QgaGFwcGVuISEgRGF0YSB3aWxsIGJlIGxvc3RcbiIpOworCQkJaWYgKGVyciA9PSAtRU5PU1BDKQorCQkJCWV4dDRfcHJpbnRfZnJlZV9ibG9ja3MobXBkLT5pbm9kZSk7CiAJCX0KIAkJLyogaW52YWxpZGF0ZSBhbGwgdGhlIHBhZ2VzICovCiAJCWV4dDRfZGFfYmxvY2tfaW52YWxpZGF0ZXBhZ2VzKG1wZCwgbmV4dCwKQEAgLTIzMjAsNyArMjM1MCw3IEBACiAJICogWFhYIERvbid0IGdvIGxhcmdlciB0aGFuIG1iYWxsb2MgaXMgd2lsbGluZyB0byBhbGxvY2F0ZQogCSAqIFRoaXMgaXMgYSBzdG9wZ2FwIHNvbHV0aW9uLiAgV2UgZXZlbnR1YWxseSBuZWVkIHRvIGZvbGQKIAkgKiBtcGFnZV9kYV9zdWJtaXRfaW8oKSBpbnRvIHRoaXMgZnVuY3Rpb24gYW5kIHRoZW4gY2FsbAotCSAqIGV4dDRfZ2V0X2Jsb2NrcygpIG11bHRpcGxlIHRpbWVzIGluIGEgbG9vcAorCSAqIGV4dDRfbWFwX2Jsb2NrcygpIG11bHRpcGxlIHRpbWVzIGluIGEgbG9vcAogCSAqLwogCWlmIChucmJsb2NrcyA+PSA4KjEwMjQqMTAyNC9tcGQtPmlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKIAkJZ290byBmbHVzaF9pdDsKQEAgLTI1NTMsMTggKzI1ODMsMTYgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBzdGFuZGFyZCBnZXRfYmxvY2tfdCBjYWxiYWNrIGZ1bmN0aW9uCiAgKiB3aGVuIHRoZXJlIGlzIG5vIGRlc2lyZSB0byBhbGxvY2F0ZSBhbnkgYmxvY2tzLiAgSXQgaXMgdXNlZCBhcyBhCi0gKiBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYmxvY2tfcHJlcGFyZV93cml0ZSgpLCBub2JoX3dyaXRlcGFnZSgpLCBhbmQKLSAqIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZSgpLiAgVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBvbmx5IHRyeSB0byBtYXAgYQotICogc2luZ2xlIGJsb2NrIGF0IGEgdGltZS4KKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBibG9ja19wcmVwYXJlX3dyaXRlKCkgYW5kIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZSgpLgorICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBvbmx5IHRyeSB0byBtYXAgYSBzaW5nbGUgYmxvY2sgYXQgYSB0aW1lLgogICoKICAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBkbyBibG9jayBhbGxvY2F0aW9ucyBldmVuIGlmIHRoZSBjYWxsZXIKICAqIHJlcXVlc3RzIGl0IGJ5IHBhc3NpbmcgaW4gY3JlYXRlPTEsIGl0IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50IHRoYXQKICAqIGFueSBjYWxsZXIgY2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBidWZmZXIgaGVhZHMgYXJlIHJldHVybmVkCiAgKiBieSB0aGlzIGZ1bmN0aW9uIGFyZSBlaXRoZXIgYWxsIGFscmVhZHkgbWFwcGVkIG9yIG1hcmtlZCBmb3IKLSAqIGRlbGF5ZWQgYWxsb2NhdGlvbiBiZWZvcmUgY2FsbGluZyBub2JoX3dyaXRlcGFnZSgpIG9yCi0gKiBibG9ja193cml0ZV9mdWxsX3BhZ2UoKS4gIE90aGVyd2lzZSwgYl9ibG9ja25yIGNvdWxkIGJlIGxlZnQKLSAqIHVuaXRpYWxpemVkLCBhbmQgdGhlIHBhZ2Ugd3JpdGUgZnVuY3Rpb25zIHdpbGwgYmUgdGFrZW4gYnkKLSAqIHN1cnByaXNlLgorICogZGVsYXllZCBhbGxvY2F0aW9uIGJlZm9yZSBjYWxsaW5nICBibG9ja193cml0ZV9mdWxsX3BhZ2UoKS4gIE90aGVyd2lzZSwKKyAqIGJfYmxvY2tuciBjb3VsZCBiZSBsZWZ0IHVuaXRpYWxpemVkLCBhbmQgdGhlIHBhZ2Ugd3JpdGUgZnVuY3Rpb25zIHdpbGwKKyAqIGJlIHRha2VuIGJ5IHN1cnByaXNlLgogICovCiBzdGF0aWMgaW50IG5vYWxsb2NfZ2V0X2Jsb2NrX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKQEAgLTI3NDksOSArMjc3Nyw3IEBACiAJCXJldHVybiBfX2V4dDRfam91cm5hbGxlZF93cml0ZXBhZ2UocGFnZSwgbGVuKTsKIAl9CiAKLQlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpICYmIGV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSkKLQkJcmV0ID0gbm9iaF93cml0ZXBhZ2UocGFnZSwgbm9hbGxvY19nZXRfYmxvY2tfd3JpdGUsIHdiYyk7Ci0JZWxzZSBpZiAocGFnZV9idWZzICYmIGJ1ZmZlcl91bmluaXQocGFnZV9idWZzKSkgeworCWlmIChwYWdlX2J1ZnMgJiYgYnVmZmVyX3VuaW5pdChwYWdlX2J1ZnMpKSB7CiAJCWV4dDRfc2V0X2JoX2VuZGlvKHBhZ2VfYnVmcywgaW5vZGUpOwogCQlyZXQgPSBibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8ocGFnZSwgbm9hbGxvY19nZXRfYmxvY2tfd3JpdGUsCiAJCQkJCSAgICB3YmMsIGV4dDRfZW5kX2lvX2J1ZmZlcl93cml0ZSk7CkBAIC0zMTQ2LDEzICszMTcyLDEwIEBACiAJaW50IHJldCwgcmV0cmllcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcGdvZmZfdCBpbmRleDsKLQl1bnNpZ25lZCBmcm9tLCB0bzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAloYW5kbGVfdCAqaGFuZGxlOwogCiAJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXRvID0gZnJvbSArIGxlbjsKIAogCWlmIChleHQ0X25vbmRhX3N3aXRjaChpbm9kZS0+aV9zYikpIHsKIAkJKmZzZGF0YSA9ICh2b2lkICopRkFMTF9CQUNLX1RPX05PTkRFTEFMTE9DOwpAQCAtMzE4NSw4ICszMjA4LDcgQEAKIAl9CiAJKnBhZ2VwID0gcGFnZTsKIAotCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKLQkJCQlleHQ0X2RhX2dldF9ibG9ja19wcmVwKTsKKwlyZXQgPSBfX2Jsb2NrX3dyaXRlX2JlZ2luKHBhZ2UsIHBvcywgbGVuLCBleHQ0X2RhX2dldF9ibG9ja19wcmVwKTsKIAlpZiAocmV0IDwgMCkgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKQEAgLTM1NDUsMTUgKzM1NjcsMjQgQEAKIAogcmV0cnk6CiAJaWYgKHJ3ID09IFJFQUQgJiYgZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKQotCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsCisJCXJldCA9IF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwKIAkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCi0JCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKLQllbHNlCisJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMLCBOVUxMLCAwKTsKKwllbHNlIHsKIAkJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwKIAkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKKworCQlpZiAodW5saWtlbHkoKHJ3ICYgV1JJVEUpICYmIHJldCA8IDApKSB7CisJCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCisJCQlpZiAoZW5kID4gaXNpemUpCisJCQkJdm10cnVuY2F0ZShpbm9kZSwgaXNpemUpOworCQl9CisJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQ0X3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQogCQlnb3RvIHJldHJ5OwogCkBAIC0zNjY4LDYgKzM2OTksOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWlmIChpby0+aW9jYikKKwkJYWlvX2NvbXBsZXRlKGlvLT5pb2NiLCBpby0+cmVzdWx0LCAwKTsKIAkvKiBjbGVhciB0aGUgRElPIEFJTyB1bndyaXR0ZW4gZmxhZyAqLwogCWlvLT5mbGFnID0gMDsKIAlyZXR1cm4gcmV0OwpAQCAtMzc2Nyw2ICszODAwLDggQEAKIAkJaW8tPm9mZnNldCA9IDA7CiAJCWlvLT5zaXplID0gMDsKIAkJaW8tPnBhZ2UgPSBOVUxMOworCQlpby0+aW9jYiA9IE5VTEw7CisJCWlvLT5yZXN1bHQgPSAwOwogCQlJTklUX1dPUksoJmlvLT53b3JrLCBleHQ0X2VuZF9pb193b3JrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmlvLT5saXN0KTsKIAl9CkBAIC0zNzk2LDEyICszODMxLDE4IEBACiAJaWYgKGlvX2VuZC0+ZmxhZyAhPSBFWFQ0X0lPX1VOV1JJVFRFTil7CiAJCWV4dDRfZnJlZV9pb19lbmQoaW9fZW5kKTsKIAkJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Ci0JCWdvdG8gb3V0Oworb3V0OgorCQlpZiAoaXNfYXN5bmMpCisJCQlhaW9fY29tcGxldGUoaW9jYiwgcmV0LCAwKTsKKwkJcmV0dXJuOwogCX0KIAogCWlvX2VuZC0+b2Zmc2V0ID0gb2Zmc2V0OwogCWlvX2VuZC0+c2l6ZSA9IHNpemU7Ci0JaW9fZW5kLT5mbGFnID0gRVhUNF9JT19VTldSSVRURU47CisJaWYgKGlzX2FzeW5jKSB7CisJCWlvX2VuZC0+aW9jYiA9IGlvY2I7CisJCWlvX2VuZC0+cmVzdWx0ID0gcmV0OworCX0KIAl3cSA9IEVYVDRfU0IoaW9fZW5kLT5pbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3E7CiAKIAkvKiBxdWV1ZSB0aGUgd29yayB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4gKi8KQEAgLTM4MTMsOSArMzg1NCw2IEBACiAJbGlzdF9hZGRfdGFpbCgmaW9fZW5kLT5saXN0LCAmZWktPmlfY29tcGxldGVkX2lvX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpLT5pX2NvbXBsZXRlZF9pb19sb2NrLCBmbGFncyk7CiAJaW9jYi0+cHJpdmF0ZSA9IE5VTEw7Ci1vdXQ6Ci0JaWYgKGlzX2FzeW5jKQotCQlhaW9fY29tcGxldGUoaW9jYiwgcmV0LCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZXh0NF9lbmRfaW9fYnVmZmVyX3dyaXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSkKQEAgLTM5NDEsNyArMzk3OSw3IEBACiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkvKgogCQkJICogd2Ugc2F2ZSB0aGUgaW8gc3RydWN0dXJlIGZvciBjdXJyZW50IGFzeW5jCi0JCQkgKiBkaXJlY3QgSU8sIHNvIHRoYXQgbGF0ZXIgZXh0NF9nZXRfYmxvY2tzKCkKKwkJCSAqIGRpcmVjdCBJTywgc28gdGhhdCBsYXRlciBleHQ0X21hcF9ibG9ja3MoKQogCQkJICogY291bGQgZmxhZyB0aGUgaW8gc3RydWN0dXJlIHdoZXRoZXIgdGhlcmUKIAkJCSAqIGlzIGEgdW53cml0dGVuIGV4dGVudHMgbmVlZHMgdG8gYmUgY29udmVydGVkCiAJCQkgKiB3aGVuIElPIGlzIGNvbXBsZXRlZC4KQEAgLTQxMzIsMTcgKzQxNzAsNiBAQAogCWxlbmd0aCA9IGJsb2Nrc2l6ZSAtIChvZmZzZXQgJiAoYmxvY2tzaXplIC0gMSkpOwogCWlibG9jayA9IGluZGV4IDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOwogCi0JLyoKLQkgKiBGb3IgIm5vYmgiIG9wdGlvbiwgIHdlIGNhbiBvbmx5IHdvcmsgaWYgd2UgZG9uJ3QgbmVlZCB0bwotCSAqIHJlYWQtaW4gdGhlIHBhZ2UgLSBvdGhlcndpc2Ugd2UgY3JlYXRlIGJ1ZmZlcnMgdG8gZG8gdGhlIElPLgotCSAqLwotCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSAmJiB0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkgJiYKLQkgICAgIGV4dDRfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSAmJiBQYWdlVXB0b2RhdGUocGFnZSkpIHsKLQkJemVyb191c2VyKHBhZ2UsIG9mZnNldCwgbGVuZ3RoKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKIAkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgYmxvY2tzaXplLCAwKTsKIApAQCAtNDQ5Miw5ICs0NTE5LDggQEAKIAkJCSAqIChzaG91bGQgYmUgcmFyZSkuCiAJCQkgKi8KIAkJCWlmICghYmgpIHsKLQkJCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAotCQkJCQkJICJSZWFkIGZhaWx1cmUgYmxvY2s9JWxsdSIsCi0JCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbnIpOworCQkJCUVYVDRfRVJST1JfSU5PREVfQkxPQ0soaW5vZGUsIG5yLAorCQkJCQkJICAgICAgICJSZWFkIGZhaWx1cmUiKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtNDUwNiwyNyArNDUzMiw2IEBACiAJCQkJCWRlcHRoKTsKIAogCQkJLyoKLQkJCSAqIFdlJ3ZlIHByb2JhYmx5IGpvdXJuYWxsZWQgdGhlIGluZGlyZWN0IGJsb2NrIHNldmVyYWwKLQkJCSAqIHRpbWVzIGR1cmluZyB0aGUgdHJ1bmNhdGUuICBCdXQgaXQncyBubyBsb25nZXIKLQkJCSAqIG5lZWRlZCBhbmQgd2Ugbm93IGRyb3AgaXQgZnJvbSB0aGUgdHJhbnNhY3Rpb24gdmlhCi0JCQkgKiBqYmQyX2pvdXJuYWxfcmV2b2tlKCkuCi0JCQkgKgotCQkJICogVGhhdCdzIGVhc3kgaWYgaXQncyBleGNsdXNpdmVseSBwYXJ0IG9mIHRoaXMKLQkJCSAqIHRyYW5zYWN0aW9uLiAgQnV0IGlmIGl0J3MgcGFydCBvZiB0aGUgY29tbWl0dGluZwotCQkJICogdHJhbnNhY3Rpb24gdGhlbiBqYmQyX2pvdXJuYWxfZm9yZ2V0KCkgd2lsbCBzaW1wbHkKLQkJCSAqIGJyZWxzZSgpIGl0LiAgVGhhdCBtZWFucyB0aGF0IGlmIHRoZSB1bmRlcmx5aW5nCi0JCQkgKiBibG9jayBpcyByZWFsbG9jYXRlZCBpbiBleHQ0X2dldF9ibG9jaygpLAotCQkJICogdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YSgpIHdpbGwgZmluZCB0aGlzIGJsb2NrCi0JCQkgKiBhbmQgd2lsbCB0cnkgdG8gZ2V0IHJpZCBvZiBpdC4gIGRhbW4sIGRhbW4uCi0JCQkgKgotCQkJICogSWYgdGhpcyBibG9jayBoYXMgYWxyZWFkeSBiZWVuIGNvbW1pdHRlZCB0byB0aGUKLQkJCSAqIGpvdXJuYWwsIGEgcmV2b2tlIHJlY29yZCB3aWxsIGJlIHdyaXR0ZW4uICBBbmQKLQkJCSAqIHJldm9rZSByZWNvcmRzIG11c3QgYmUgZW1pdHRlZCAqYmVmb3JlKiBjbGVhcmluZwotCQkJICogdGhpcyBibG9jaydzIGJpdCBpbiB0aGUgYml0bWFwcy4KLQkJCSAqLwotCQkJZXh0NF9mb3JnZXQoaGFuZGxlLCAxLCBpbm9kZSwgYmgsIGJoLT5iX2Jsb2NrbnIpOwotCi0JCQkvKgogCQkJICogRXZlcnl0aGluZyBiZWxvdyB0aGlzIHRoaXMgcG9pbnRlciBoYXMgYmVlbgogCQkJICogcmVsZWFzZWQuICBOb3cgbGV0IHRoaXMgdG9wLW9mLXN1YnRyZWUgZ28uCiAJCQkgKgpAQCAtNDU1MCw4ICs0NTU1LDIwIEBACiAJCQkJCSAgICBibG9ja3NfZm9yX3RydW5jYXRlKGlub2RlKSk7CiAJCQl9CiAKKwkJCS8qCisJCQkgKiBUaGUgZm9yZ2V0IGZsYWcgaGVyZSBpcyBjcml0aWNhbCBiZWNhdXNlIGlmCisJCQkgKiB3ZSBhcmUgam91cm5hbGluZyAoYW5kIG5vdCBkb2luZyBkYXRhCisJCQkgKiBqb3VybmFsaW5nKSwgd2UgaGF2ZSB0byBtYWtlIHN1cmUgYSByZXZva2UKKwkJCSAqIHJlY29yZCBpcyB3cml0dGVuIHRvIHByZXZlbnQgdGhlIGpvdXJuYWwKKwkJCSAqIHJlcGxheSBmcm9tIG92ZXJ3cml0aW5nIHRoZSAoZm9ybWVyKQorCQkJICogaW5kaXJlY3QgYmxvY2sgaWYgaXQgZ2V0cyByZWFsbG9jYXRlZCBhcyBhCisJCQkgKiBkYXRhIGJsb2NrLiAgVGhpcyBtdXN0IGhhcHBlbiBpbiB0aGUgc2FtZQorCQkJICogdHJhbnNhY3Rpb24gd2hlcmUgdGhlIGRhdGEgYmxvY2tzIGFyZQorCQkJICogYWN0dWFsbHkgZnJlZWQuCisJCQkgKi8KIAkJCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgMCwgbnIsIDEsCi0JCQkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBKTsKKwkJCQkJIEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEF8CisJCQkJCSBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVCk7CiAKIAkJCWlmIChwYXJlbnRfYmgpIHsKIAkJCQkvKgpAQCAtNDgwOSw4ICs0ODI2LDggQEAKIAogCWJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7CiAJaWYgKCFiaCkgewotCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAidW5hYmxlIHRvIHJlYWQgaW5vZGUgYmxvY2sgLSAiCi0JCQkJICJibG9jayAlbGx1IiwgYmxvY2spOworCQlFWFQ0X0VSUk9SX0lOT0RFX0JMT0NLKGlub2RlLCBibG9jaywKKwkJCQkgICAgICAgInVuYWJsZSB0byByZWFkIGl0YWJsZSBibG9jayIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CkBAIC00OTA4LDggKzQ5MjUsOCBAQAogCQlzdWJtaXRfYmgoUkVBRF9NRVRBLCBiaCk7CiAJCXdhaXRfb25fYnVmZmVyKGJoKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAidW5hYmxlIHRvIHJlYWQgaW5vZGUgIgotCQkJCQkgImJsb2NrICVsbHUiLCBibG9jayk7CisJCQlFWFQ0X0VSUk9SX0lOT0RFX0JMT0NLKGlub2RlLCBibG9jaywKKwkJCQkJICAgICAgICJ1bmFibGUgdG8gcmVhZCBpdGFibGUgYmxvY2siKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtNDk4MCw3ICs0OTk3LDcgQEAKIAkJLyogd2UgYXJlIHVzaW5nIGNvbWJpbmVkIDQ4IGJpdCBmaWVsZCAqLwogCQlpX2Jsb2NrcyA9ICgodTY0KWxlMTZfdG9fY3B1KHJhd19pbm9kZS0+aV9ibG9ja3NfaGlnaCkpIDw8IDMyIHwKIAkJCQkJbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Jsb2Nrc19sbyk7Ci0JCWlmIChlaS0+aV9mbGFncyAmIEVYVDRfSFVHRV9GSUxFX0ZMKSB7CisJCWlmIChleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9IVUdFX0ZJTEUpKSB7CiAJCQkvKiBpX2Jsb2NrcyByZXByZXNlbnQgZmlsZSBzeXN0ZW0gYmxvY2sgc2l6ZSAqLwogCQkJcmV0dXJuIGlfYmxvY2tzICA8PCAoaW5vZGUtPmlfYmxrYml0cyAtIDkpOwogCQl9IGVsc2UgewpAQCAtNTA3Niw3ICs1MDkzLDcgQEAKIAkJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247CiAJCXRpZF90IHRpZDsKIAotCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikKIAkJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOwogCQllbHNlCkBAIC01MDg1LDcgKzUxMDIsNyBAQAogCQkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOwogCQllbHNlCiAJCQl0aWQgPSBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZTsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQllaS0+aV9zeW5jX3RpZCA9IHRpZDsKIAkJZWktPmlfZGF0YXN5bmNfdGlkID0gdGlkOwogCX0KQEAgLTUxMzAsNyArNTE0Nyw3IEBACiAJCQkJIGVpLT5pX2ZpbGVfYWNsKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBiYWRfaW5vZGU7Ci0JfSBlbHNlIGlmIChlaS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgeworCX0gZWxzZSBpZiAoZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpIHsKIAkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKSB8fAogCQkgICAgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYKIAkJICAgICAhZXh0NF9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkKQEAgLTU0MTAsOSArNTQyNyw4IEBACiAJCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpOwogCQlpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSAmJiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7Ci0JCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAotCQkJCSJJTyBlcnJvciBzeW5jaW5nIGlub2RlIChibG9jaz0lbGx1KSIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaWxvYy5iaC0+Yl9ibG9ja25yKTsKKwkJCUVYVDRfRVJST1JfSU5PREVfQkxPQ0soaW5vZGUsIGlsb2MuYmgtPmJfYmxvY2tuciwKKwkJCQkJICJJTyBlcnJvciBzeW5jaW5nIGlub2RlIik7CiAJCQllcnIgPSAtRUlPOwogCQl9CiAJCWJyZWxzZShpbG9jLmJoKTsKQEAgLTU0ODcsMTAgKzU1MDMsOCBAQAogCQlpZiAoIShleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSkpIHsKIAkJCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwogCi0JCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IHNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMpIHsKLQkJCQllcnJvciA9IC1FRkJJRzsKLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9CisJCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IHNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMpCisJCQkJcmV0dXJuIC1FRkJJRzsKIAkJfQogCX0KIApAQCAtNTUzMywxMSArNTU0NywxOSBAQAogCQkJZXh0NF90cnVuY2F0ZShpbm9kZSk7CiAJfQogCi0JcmMgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJcmMgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAotCS8qIElmIGlub2RlX3NldGF0dHIncyBjYWxsIHRvIGV4dDRfdHJ1bmNhdGUgZmFpbGVkIHRvIGdldCBhCi0JICogdHJhbnNhY3Rpb24gaGFuZGxlIGF0IGFsbCwgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgaW4tY29yZQotCSAqIG9ycGhhbiBsaXN0IG1hbnVhbGx5LiAqLworCWlmICghcmMpIHsKKwkJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgY2FsbCB0byBleHQ0X3RydW5jYXRlIGZhaWxlZCB0byBnZXQgYSB0cmFuc2FjdGlvbiBoYW5kbGUgYXQKKwkgKiBhbGwsIHdlIG5lZWQgdG8gY2xlYW4gdXAgdGhlIGluLWNvcmUgb3JwaGFuIGxpc3QgbWFudWFsbHkuCisJICovCiAJaWYgKGlub2RlLT5pX25saW5rKQogCQlleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpOwogCkBAIC01NjkyLDcgKzU3MTQsNyBAQAogICogQ2FsY3VsYXRlIHRoZSBqb3VybmFsIGNyZWRpdHMgZm9yIGEgY2h1bmsgb2YgZGF0YSBtb2RpZmljYXRpb24uCiAgKgogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBESU8sIGZhbGxvY2F0ZSBvciB3aG9ldmVyIGNhbGxpbmcKLSAqIGV4dDRfZ2V0X2Jsb2NrcygpIHRvIG1hcC9hbGxvY2F0ZSBhIGNodW5rIG9mIGNvbnRpZ3VvdXMgZGlzayBibG9ja3MuCisgKiBleHQ0X21hcF9ibG9ja3MoKSB0byBtYXAvYWxsb2NhdGUgYSBjaHVuayBvZiBjb250aWd1b3VzIGRpc2sgYmxvY2tzLgogICoKICAqIGpvdXJuYWwgYnVmZmVycyBmb3IgZGF0YSBibG9ja3MgYXJlIG5vdCBpbmNsdWRlZCBoZXJlLCBhcyBESU8KICAqIGFuZCBmYWxsb2NhdGUgZG8gbm8gbmVlZCB0byBqb3VybmFsIGRhdGEgYnVmZmVycy4KQEAgLTU3NTgsNyArNTc4MCw2IEBACiB7CiAJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZTsKIAlzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9oZWFkZXIgKmhlYWRlcjsKLQlzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnk7CiAKIAlpZiAoRVhUNF9JKGlub2RlKS0+aV9leHRyYV9pc2l6ZSA+PSBuZXdfZXh0cmFfaXNpemUpCiAJCXJldHVybiAwOwpAQCAtNTc2Niw3ICs1Nzg3LDYgQEAKIAlyYXdfaW5vZGUgPSBleHQ0X3Jhd19pbm9kZSgmaWxvYyk7CiAKIAloZWFkZXIgPSBJSERSKGlub2RlLCByYXdfaW5vZGUpOwotCWVudHJ5ID0gSUZJUlNUKGhlYWRlcik7CiAKIAkvKiBObyBleHRlbmRlZCBhdHRyaWJ1dGVzIHByZXNlbnQgKi8KIAlpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikgfHwKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggMGU4M2RmZC4uNGI0YWQ0YiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTQ0NiwxMCArNDQ2LDExIEBACiAJCQlibG9ja25yID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZTRiLT5iZF9ncm91cCk7CiAJCQlibG9ja25yICs9IGZpcnN0ICsgaTsKIAkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwKLQkJCQkgICBfX2Z1bmNfXywgImRvdWJsZS1mcmVlIG9mIGlub2RlIgotCQkJCSAgICIgJWx1J3MgYmxvY2sgJWxsdShiaXQgJXUgaW4gZ3JvdXAgJXUpIiwKLQkJCQkgICBpbm9kZSA/IGlub2RlLT5pX2lubyA6IDAsIGJsb2NrbnIsCi0JCQkJICAgZmlyc3QgKyBpLCBlNGItPmJkX2dyb3VwKTsKKwkJCQkJICAgICAgaW5vZGUgPyBpbm9kZS0+aV9pbm8gOiAwLAorCQkJCQkgICAgICBibG9ja25yLAorCQkJCQkgICAgICAiZnJlZWluZyBibG9jayBhbHJlYWR5IGZyZWVkICIKKwkJCQkJICAgICAgIihiaXQgJXUpIiwKKwkJCQkJICAgICAgZmlyc3QgKyBpKTsKIAkJfQogCQltYl9jbGVhcl9iaXQoZmlyc3QgKyBpLCBlNGItPmJkX2luZm8tPmJiX2JpdG1hcCk7CiAJfQpAQCAtNzEyLDkgKzcxMyw5IEBACiAJZ3JwLT5iYl9mcmFnbWVudHMgPSBmcmFnbWVudHM7CiAKIAlpZiAoZnJlZSAhPSBncnAtPmJiX2ZyZWUpIHsKLQkJZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHNiLCBncm91cCwgIF9fZnVuY19fLAotCQkJIkVYVDQtZnM6IGdyb3VwICV1OiAldSBibG9ja3MgaW4gYml0bWFwLCAldSBpbiBnZCIsCi0JCQlncm91cCwgZnJlZSwgZ3JwLT5iYl9mcmVlKTsKKwkJZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHNiLCBncm91cCwgMCwgMCwKKwkJCQkgICAgICAiJXUgYmxvY2tzIGluIGJpdG1hcCwgJXUgaW4gZ2QiLAorCQkJCSAgICAgIGZyZWUsIGdycC0+YmJfZnJlZSk7CiAJCS8qCiAJCSAqIElmIHdlIGludGVudCB0byBjb250aW51ZSwgd2UgY29uc2lkZXIgZ3JvdXAgZGVzY3JpdG9yCiAJCSAqIGNvcnJ1cHQgYW5kIHVwZGF0ZSBiYl9mcmVlIHVzaW5nIGJpdG1hcCB2YWx1ZQpAQCAtMTI5NiwxMCArMTI5NywxMCBAQAogCQkJYmxvY2tuciA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGU0Yi0+YmRfZ3JvdXApOwogCQkJYmxvY2tuciArPSBibG9jazsKIAkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwKLQkJCQkgICBfX2Z1bmNfXywgImRvdWJsZS1mcmVlIG9mIGlub2RlIgotCQkJCSAgICIgJWx1J3MgYmxvY2sgJWxsdShiaXQgJXUgaW4gZ3JvdXAgJXUpIiwKLQkJCQkgICBpbm9kZSA/IGlub2RlLT5pX2lubyA6IDAsIGJsb2NrbnIsIGJsb2NrLAotCQkJCSAgIGU0Yi0+YmRfZ3JvdXApOworCQkJCQkgICAgICBpbm9kZSA/IGlub2RlLT5pX2lubyA6IDAsCisJCQkJCSAgICAgIGJsb2NrbnIsCisJCQkJCSAgICAgICJmcmVlaW5nIGFscmVhZHkgZnJlZWQgYmxvY2sgIgorCQkJCQkgICAgICAiKGJpdCAldSkiLCBibG9jayk7CiAJCX0KIAkJbWJfY2xlYXJfYml0KGJsb2NrLCBFWFQ0X01CX0JJVE1BUChlNGIpKTsKIAkJZTRiLT5iZF9pbmZvLT5iYl9jb3VudGVyc1tvcmRlcl0rKzsKQEAgLTE3ODgsOCArMTc4OSw4IEBACiAJCQkgKiBmcmVlIGJsb2NrcyBldmVuIHRob3VnaCBncm91cCBpbmZvIHNheXMgd2UKIAkJCSAqIHdlIGhhdmUgZnJlZSBibG9ja3MKIAkJCSAqLwotCQkJZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHNiLCBlNGItPmJkX2dyb3VwLAotCQkJCQlfX2Z1bmNfXywgIiVkIGZyZWUgYmxvY2tzIGFzIHBlciAiCisJCQlleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc2IsIGU0Yi0+YmRfZ3JvdXAsIDAsIDAsCisJCQkJCSIlZCBmcmVlIGJsb2NrcyBhcyBwZXIgIgogCQkJCQkiZ3JvdXAgaW5mby4gQnV0IGJpdG1hcCBzYXlzIDAiLAogCQkJCQlmcmVlKTsKIAkJCWJyZWFrOwpAQCAtMTc5OCw4ICsxNzk5LDggQEAKIAkJbWJfZmluZF9leHRlbnQoZTRiLCAwLCBpLCBhYy0+YWNfZ19leC5mZV9sZW4sICZleCk7CiAJCUJVR19PTihleC5mZV9sZW4gPD0gMCk7CiAJCWlmIChmcmVlIDwgZXguZmVfbGVuKSB7Ci0JCQlleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc2IsIGU0Yi0+YmRfZ3JvdXAsCi0JCQkJCV9fZnVuY19fLCAiJWQgZnJlZSBibG9ja3MgYXMgcGVyICIKKwkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwgMCwgMCwKKwkJCQkJIiVkIGZyZWUgYmxvY2tzIGFzIHBlciAiCiAJCQkJCSJncm91cCBpbmZvLiBCdXQgZ290ICVkIGJsb2NrcyIsCiAJCQkJCWZyZWUsIGV4LmZlX2xlbik7CiAJCQkvKgpAQCAtMTgyMSw4ICsxODIyLDcgQEAKIAogLyoKICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIHN0b3JhZ2VzIGxpa2UgcmFpZDUKLSAqIHdlIHRyeSB0byBmaW5kIHN0cmlwZS1hbGlnbmVkIGNodW5rcyBmb3Igc3RyaXBlLXNpemUgcmVxdWVzdHMKLSAqIFhYWCBzaG91bGQgZG8gc28gYXQgbGVhc3QgZm9yIG11bHRpcGxlcyBvZiBzdHJpcGUgc2l6ZSBhcyB3ZWxsCisgKiB3ZSB0cnkgdG8gZmluZCBzdHJpcGUtYWxpZ25lZCBjaHVua3MgZm9yIHN0cmlwZS1zaXplLW11bHRpcGxlIHJlcXVlc3RzCiAgKi8KIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sKIHZvaWQgZXh0NF9tYl9zY2FuX2FsaWduZWQoc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYywKQEAgLTE5OTksNyArMTk5OSw2IEBACiAJZXh0NF9ncm91cF90IG5ncm91cHMsIGdyb3VwLCBpOwogCWludCBjcjsKIAlpbnQgZXJyID0gMDsKLQlpbnQgYnNiaXRzOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCXN0cnVjdCBleHQ0X2J1ZGR5IGU0YjsKQEAgLTIwNDEsOCArMjA0MCw2IEBACiAJCQlhYy0+YWNfMm9yZGVyID0gaSAtIDE7CiAJfQogCi0JYnNiaXRzID0gYWMtPmFjX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCiAJLyogaWYgc3RyZWFtIGFsbG9jYXRpb24gaXMgZW5hYmxlZCwgdXNlIGdsb2JhbCBnb2FsICovCiAJaWYgKGFjLT5hY19mbGFncyAmIEVYVDRfTUJfU1RSRUFNX0FMTE9DKSB7CiAJCS8qIFRCRDogbWF5IGJlIGhvdCBwb2ludCAqLwpAQCAtMjA5NCw4ICsyMDkxLDggQEAKIAkJCWFjLT5hY19ncm91cHNfc2Nhbm5lZCsrOwogCQkJaWYgKGNyID09IDApCiAJCQkJZXh0NF9tYl9zaW1wbGVfc2Nhbl9ncm91cChhYywgJmU0Yik7Ci0JCQllbHNlIGlmIChjciA9PSAxICYmCi0JCQkJCWFjLT5hY19nX2V4LmZlX2xlbiA9PSBzYmktPnNfc3RyaXBlKQorCQkJZWxzZSBpZiAoY3IgPT0gMSAmJiBzYmktPnNfc3RyaXBlICYmCisJCQkJCSEoYWMtPmFjX2dfZXguZmVfbGVuICUgc2JpLT5zX3N0cmlwZSkpCiAJCQkJZXh0NF9tYl9zY2FuX2FsaWduZWQoYWMsICZlNGIpOwogCQkJZWxzZQogCQkJCWV4dDRfbWJfY29tcGxleF9zY2FuX2dyb3VwKGFjLCAmZTRiKTsKQEAgLTIyMjEsNyArMjIxOCw3IEBACiAKIAlyYyA9IHNlcV9vcGVuKGZpbGUsICZleHQ0X21iX3NlcV9ncm91cHNfb3BzKTsKIAlpZiAocmMgPT0gMCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCW0tPnByaXZhdGUgPSBzYjsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMjU2MCw2ICsyNTU3LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lzc3VlX2Rpc2NhcmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwLCBleHQ0X2dycGJsa190IGJsb2NrLCBpbnQgY291bnQpCit7CisJaW50IHJldDsKKwlleHQ0X2ZzYmxrX3QgZGlzY2FyZF9ibG9jazsKKworCWRpc2NhcmRfYmxvY2sgPSBibG9jayArIGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGJsb2NrX2dyb3VwKTsKKwl0cmFjZV9leHQ0X2Rpc2NhcmRfYmxvY2tzKHNiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzY2FyZF9ibG9jaywgY291bnQpOworCXJldCA9IHNiX2lzc3VlX2Rpc2NhcmQoc2IsIGRpc2NhcmRfYmxvY2ssIGNvdW50KTsKKwlpZiAocmV0ID09IEVPUE5PVFNVUFApIHsKKwkJZXh0NF93YXJuaW5nKHNiLCAiZGlzY2FyZCBub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmciKTsKKwkJY2xlYXJfb3B0KEVYVDRfU0Ioc2IpLT5zX21vdW50X29wdCwgRElTQ0FSRCk7CisJfQorfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGpiZDIgbGF5ZXIgb25jZSB0aGUgY29tbWl0IGhhcyBmaW5pc2hlZCwKICAqIHNvIHdlIGtub3cgd2UgY2FuIGZyZWUgdGhlIGJsb2NrcyB0aGF0IHdlcmUgcmVsZWFzZWQgd2l0aCB0aGF0IGNvbW1pdC4KQEAgLTI1NzksMjIgKzI1OTIsOSBAQAogCQltYl9kZWJ1ZygxLCAiZ29ubmEgZnJlZSAldSBibG9ja3MgaW4gZ3JvdXAgJXUgKDB4JXApOiIsCiAJCQkgZW50cnktPmNvdW50LCBlbnRyeS0+Z3JvdXAsIGVudHJ5KTsKIAotCQlpZiAodGVzdF9vcHQoc2IsIERJU0NBUkQpKSB7Ci0JCQlpbnQgcmV0OwotCQkJZXh0NF9mc2Jsa190IGRpc2NhcmRfYmxvY2s7Ci0KLQkJCWRpc2NhcmRfYmxvY2sgPSBlbnRyeS0+c3RhcnRfYmxrICsKLQkJCQlleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBlbnRyeS0+Z3JvdXApOwotCQkJdHJhY2VfZXh0NF9kaXNjYXJkX2Jsb2NrcyhzYiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylkaXNjYXJkX2Jsb2NrLAotCQkJCQllbnRyeS0+Y291bnQpOwotCQkJcmV0ID0gc2JfaXNzdWVfZGlzY2FyZChzYiwgZGlzY2FyZF9ibG9jaywgZW50cnktPmNvdW50KTsKLQkJCWlmIChyZXQgPT0gRU9QTk9UU1VQUCkgewotCQkJCWV4dDRfd2FybmluZyhzYiwKLQkJCQkJImRpc2NhcmQgbm90IHN1cHBvcnRlZCwgZGlzYWJsaW5nIik7Ci0JCQkJY2xlYXJfb3B0KEVYVDRfU0Ioc2IpLT5zX21vdW50X29wdCwgRElTQ0FSRCk7Ci0JCQl9Ci0JCX0KKwkJaWYgKHRlc3Rfb3B0KHNiLCBESVNDQVJEKSkKKwkJCWV4dDRfaXNzdWVfZGlzY2FyZChzYiwgZW50cnktPmdyb3VwLAorCQkJCQllbnRyeS0+c3RhcnRfYmxrLCBlbnRyeS0+Y291bnQpOwogCiAJCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgZW50cnktPmdyb3VwLCAmZTRiKTsKIAkJLyogd2UgZXhwZWN0IHRvIGZpbmQgZXhpc3RpbmcgYnVkZHkgYmVjYXVzZSBpdCdzIHBpbm5lZCAqLwpAQCAtMjcxMiw3ICsyNzEyLDYgQEAKIAkJCQloYW5kbGVfdCAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgcmVzZXJ2X2Jsa3MpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaXRtYXBfYmggPSBOVUxMOwotCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplczsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpnZHBfYmg7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpOwpAQCAtMjcyNSw4ICsyNzI0LDYgQEAKIAogCXNiID0gYWMtPmFjX3NiOwogCXNiaSA9IEVYVDRfU0Ioc2IpOwotCWVzID0gc2JpLT5zX2VzOwotCiAKIAllcnIgPSAtRUlPOwogCWJpdG1hcF9iaCA9IGV4dDRfcmVhZF9ibG9ja19iaXRtYXAoc2IsIGFjLT5hY19iX2V4LmZlX2dyb3VwKTsKQEAgLTI4MTIsNyArMjgwOSw3IEBACiAJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBnZHBfYmgpOwogCiBvdXRfZXJyOgotCXNiLT5zX2RpcnQgPSAxOworCWV4dDRfbWFya19zdXBlcl9kaXJ0eShzYik7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI4NTAsNyArMjg0Nyw3IEBACiAJaW50IGJzYml0cywgbWF4OwogCWV4dDRfbGJsa190IGVuZDsKIAlsb2ZmX3Qgc2l6ZSwgb3JpZ19zaXplLCBzdGFydF9vZmY7Ci0JZXh0NF9sYmxrX3Qgc3RhcnQsIG9yaWdfc3RhcnQ7CisJZXh0NF9sYmxrX3Qgc3RhcnQ7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koYWMtPmFjX2lub2RlKTsKIAlzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGE7CiAKQEAgLTI4ODEsNiArMjg3OCw3IEBACiAJc2l6ZSA9IHNpemUgPDwgYnNiaXRzOwogCWlmIChzaXplIDwgaV9zaXplX3JlYWQoYWMtPmFjX2lub2RlKSkKIAkJc2l6ZSA9IGlfc2l6ZV9yZWFkKGFjLT5hY19pbm9kZSk7CisJb3JpZ19zaXplID0gc2l6ZTsKIAogCS8qIG1heCBzaXplIG9mIGZyZWUgY2h1bmtzICovCiAJbWF4ID0gMiA8PCBic2JpdHM7CkBAIC0yOTIyLDggKzI5MjAsOCBAQAogCQlzdGFydF9vZmYgPSAobG9mZl90KWFjLT5hY19vX2V4LmZlX2xvZ2ljYWwgPDwgYnNiaXRzOwogCQlzaXplCSAgPSBhYy0+YWNfb19leC5mZV9sZW4gPDwgYnNiaXRzOwogCX0KLQlvcmlnX3NpemUgPSBzaXplID0gc2l6ZSA+PiBic2JpdHM7Ci0Jb3JpZ19zdGFydCA9IHN0YXJ0ID0gc3RhcnRfb2ZmID4+IGJzYml0czsKKwlzaXplID0gc2l6ZSA+PiBic2JpdHM7CisJc3RhcnQgPSBzdGFydF9vZmYgPj4gYnNiaXRzOwogCiAJLyogZG9uJ3QgY292ZXIgYWxyZWFkeSBhbGxvY2F0ZWQgYmxvY2tzIGluIHNlbGVjdGVkIHJhbmdlICovCiAJaWYgKGFyLT5wbGVmdCAmJiBzdGFydCA8PSBhci0+bGxlZnQpIHsKQEAgLTM1NDcsNyArMzU0NSw2IEBACiAJZXh0NF9ncm91cF90IGdyb3VwOwogCWV4dDRfZ3JwYmxrX3QgYml0OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBncnBfYmxrX3N0YXJ0OwotCXNlY3Rvcl90IHN0YXJ0OwogCWludCBlcnIgPSAwOwogCWludCBmcmVlID0gMDsKIApAQCAtMzU2NywxMCArMzU2NCw5IEBACiAJCWlmIChiaXQgPj0gZW5kKQogCQkJYnJlYWs7CiAJCW5leHQgPSBtYl9maW5kX25leHRfYml0KGJpdG1hcF9iaC0+Yl9kYXRhLCBlbmQsIGJpdCk7Ci0JCXN0YXJ0ID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApICsgYml0OwogCQltYl9kZWJ1ZygxLCAiICAgIGZyZWUgcHJlYWxsb2NhdGVkICV1LyV1IGluIGdyb3VwICV1XG4iLAotCQkJCSh1bnNpZ25lZCkgc3RhcnQsICh1bnNpZ25lZCkgbmV4dCAtIGJpdCwKLQkJCQkodW5zaWduZWQpIGdyb3VwKTsKKwkJCSAodW5zaWduZWQpIGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArIGJpdCwKKwkJCSAodW5zaWduZWQpIG5leHQgLSBiaXQsICh1bnNpZ25lZCkgZ3JvdXApOwogCQlmcmVlICs9IG5leHQgLSBiaXQ7CiAKIAkJaWYgKGFjKSB7CkBAIC0zNTgxLDcgKzM1NzcsNyBAQAogCQkJdHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoYWMpOwogCQl9CiAKLQkJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKGFjLCBwYSwgZ3JwX2Jsa19zdGFydCArIGJpdCwKKwkJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKHNiLCBhYywgcGEsIGdycF9ibGtfc3RhcnQgKyBiaXQsCiAJCQkJCSAgICAgICBuZXh0IC0gYml0KTsKIAkJbWJfZnJlZV9ibG9ja3MocGEtPnBhX2lub2RlLCBlNGIsIGJpdCwgbmV4dCAtIGJpdCk7CiAJCWJpdCA9IG5leHQgKyAxOwpAQCAtMzU5MSw4ICszNTg3LDcgQEAKIAkJCXBhLCAodW5zaWduZWQgbG9uZykgcGEtPnBhX2xzdGFydCwKIAkJCSh1bnNpZ25lZCBsb25nKSBwYS0+cGFfcHN0YXJ0LAogCQkJKHVuc2lnbmVkIGxvbmcpIHBhLT5wYV9sZW4pOwotCQlleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc2IsIGdyb3VwLAotCQkJCQlfX2Z1bmNfXywgImZyZWUgJXUsIHBhX2ZyZWUgJXUiLAorCQlleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc2IsIGdyb3VwLCAwLCAwLCAiZnJlZSAldSwgcGFfZnJlZSAldSIsCiAJCQkJCWZyZWUsIHBhLT5wYV9mcmVlKTsKIAkJLyoKIAkJICogcGEgaXMgYWxyZWFkeSBkZWxldGVkIHNvIHdlIHVzZSB0aGUgdmFsdWUgb2J0YWluZWQKQEAgLTM2MTMsNyArMzYwOCw3IEBACiAJZXh0NF9ncm91cF90IGdyb3VwOwogCWV4dDRfZ3JwYmxrX3QgYml0OwogCi0JdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKGFjLCBwYSk7CisJdHJhY2VfZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhKHNiLCBhYywgcGEpOwogCUJVR19PTihwYS0+cGFfZGVsZXRlZCA9PSAwKTsKIAlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsICZiaXQpOwogCUJVR19PTihncm91cCAhPSBlNGItPmJkX2dyb3VwICYmIHBhLT5wYV9sZW4gIT0gMCk7CkBAIC0zODg5LDYgKzM4ODQsOSBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhYy0+YWNfc2I7CiAJZXh0NF9ncm91cF90IG5ncm91cHMsIGk7CiAKKwlpZiAoRVhUNF9TQihzYiktPnNfbW91bnRfZmxhZ3MgJiBFWFQ0X01GX0ZTX0FCT1JURUQpCisJCXJldHVybjsKKwogCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogQ2FuJ3QgYWxsb2NhdGU6IgogCQkJIiBBbGxvY2F0aW9uIGNvbnRleHQgZGV0YWlsczpcbiIpOwogCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogc3RhdHVzICVkIGZsYWdzICVkXG4iLApAQCAtNDI1NSw3ICs0MjUzLDcgQEAKICAqIHRvIHVzdWFsIGFsbG9jYXRpb24KICAqLwogZXh0NF9mc2Jsa190IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSBzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX3JlcXVlc3QgKmFyLCBpbnQgKmVycnApCisJCQkJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0ICphciwgaW50ICplcnJwKQogewogCWludCBmcmVlZDsKIAlzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjID0gTlVMTDsKQEAgLTQyOTksNyArNDI5Nyw3IEBACiAJCWlucXVvdGEgPSBhci0+bGVuOwogCQlpZiAoYXItPmxlbiA9PSAwKSB7CiAJCQkqZXJycCA9IC1FRFFVT1Q7Ci0JCQlnb3RvIG91dDM7CisJCQlnb3RvIG91dDsKIAkJfQogCX0KIApAQCAtNDMwNywxMyArNDMwNSwxMyBAQAogCWlmICghYWMpIHsKIAkJYXItPmxlbiA9IDA7CiAJCSplcnJwID0gLUVOT01FTTsKLQkJZ290byBvdXQxOworCQlnb3RvIG91dDsKIAl9CiAKIAkqZXJycCA9IGV4dDRfbWJfaW5pdGlhbGl6ZV9jb250ZXh0KGFjLCBhcik7CiAJaWYgKCplcnJwKSB7CiAJCWFyLT5sZW4gPSAwOwotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0OwogCX0KIAogCWFjLT5hY19vcCA9IEVYVDRfTUJfSElTVE9SWV9QUkVBTExPQzsKQEAgLTQzMjIsNyArNDMyMCw5IEBACiAJCWV4dDRfbWJfbm9ybWFsaXplX3JlcXVlc3QoYWMsIGFyKTsKIHJlcGVhdDoKIAkJLyogYWxsb2NhdGUgc3BhY2UgaW4gY29yZSAqLwotCQlleHQ0X21iX3JlZ3VsYXJfYWxsb2NhdG9yKGFjKTsKKwkJKmVycnAgPSBleHQ0X21iX3JlZ3VsYXJfYWxsb2NhdG9yKGFjKTsKKwkJaWYgKCplcnJwKQorCQkJZ290byBlcnJvdXQ7CiAKIAkJLyogYXMgd2UndmUganVzdCBwcmVhbGxvY2F0ZWQgbW9yZSBzcGFjZSB0aGFuCiAJCSAqIHVzZXIgcmVxdWVzdGVkIG9yaW5hbGx5LCB3ZSBzdG9yZSBhbGxvY2F0ZWQKQEAgLTQzMzMsNyArNDMzMyw3IEBACiAJfQogCWlmIChsaWtlbHkoYWMtPmFjX3N0YXR1cyA9PSBBQ19TVEFUVVNfRk9VTkQpKSB7CiAJCSplcnJwID0gZXh0NF9tYl9tYXJrX2Rpc2tzcGFjZV91c2VkKGFjLCBoYW5kbGUsIHJlc2Vydl9ibGtzKTsKLQkJaWYgKCplcnJwID09ICAtRUFHQUlOKSB7CisJCWlmICgqZXJycCA9PSAtRUFHQUlOKSB7CiAJCQkvKgogCQkJICogZHJvcCB0aGUgcmVmZXJlbmNlIHRoYXQgd2UgdG9vawogCQkJICogaW4gZXh0NF9tYl91c2VfYmVzdF9mb3VuZApAQCAtNDM0NCwxMiArNDM0NCwxMCBAQAogCQkJYWMtPmFjX2JfZXguZmVfbGVuID0gMDsKIAkJCWFjLT5hY19zdGF0dXMgPSBBQ19TVEFUVVNfQ09OVElOVUU7CiAJCQlnb3RvIHJlcGVhdDsKLQkJfSBlbHNlIGlmICgqZXJycCkgeworCQl9IGVsc2UgaWYgKCplcnJwKQorCQllcnJvdXQ6CiAJCQlleHQ0X2Rpc2NhcmRfYWxsb2NhdGVkX2Jsb2NrcyhhYyk7Ci0JCQlhYy0+YWNfYl9leC5mZV9sZW4gPSAwOwotCQkJYXItPmxlbiA9IDA7Ci0JCQlleHQ0X21iX3Nob3dfYWMoYWMpOwotCQl9IGVsc2UgeworCQllbHNlIHsKIAkJCWJsb2NrID0gZXh0NF9ncnBfb2Zmc190b19ibG9jayhzYiwgJmFjLT5hY19iX2V4KTsKIAkJCWFyLT5sZW4gPSBhYy0+YWNfYl9leC5mZV9sZW47CiAJCX0KQEAgLTQzNTgsMTkgKzQzNTYsMTkgQEAKIAkJaWYgKGZyZWVkKQogCQkJZ290byByZXBlYXQ7CiAJCSplcnJwID0gLUVOT1NQQzsKKwl9CisKKwlpZiAoKmVycnApIHsKIAkJYWMtPmFjX2JfZXguZmVfbGVuID0gMDsKIAkJYXItPmxlbiA9IDA7CiAJCWV4dDRfbWJfc2hvd19hYyhhYyk7CiAJfQotCiAJZXh0NF9tYl9yZWxlYXNlX2NvbnRleHQoYWMpOwotCi1vdXQyOgotCWttZW1fY2FjaGVfZnJlZShleHQ0X2FjX2NhY2hlcCwgYWMpOwotb3V0MToKK291dDoKKwlpZiAoYWMpCisJCWttZW1fY2FjaGVfZnJlZShleHQ0X2FjX2NhY2hlcCwgYWMpOwogCWlmIChpbnF1b3RhICYmIGFyLT5sZW4gPCBpbnF1b3RhKQogCQlkcXVvdF9mcmVlX2Jsb2NrKGFyLT5pbm9kZSwgaW5xdW90YSAtIGFyLT5sZW4pOwotb3V0MzoKIAlpZiAoIWFyLT5sZW4pIHsKIAkJaWYgKCFFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKQogCQkJLyogcmVsZWFzZSBhbGwgdGhlIHJlc2VydmVkIGJsb2NrcyBpZiBub24gZGVsYWxsb2MgKi8KQEAgLTQ0MDIsNiArNDQwMCw3IEBACiBleHQ0X21iX2ZyZWVfbWV0YWRhdGEoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGV4dDRfYnVkZHkgKmU0YiwKIAkJICAgICAgc3RydWN0IGV4dDRfZnJlZV9kYXRhICpuZXdfZW50cnkpCiB7CisJZXh0NF9ncm91cF90IGdyb3VwID0gZTRiLT5iZF9ncm91cDsKIAlleHQ0X2dycGJsa190IGJsb2NrOwogCXN0cnVjdCBleHQ0X2ZyZWVfZGF0YSAqZW50cnk7CiAJc3RydWN0IGV4dDRfZ3JvdXBfaW5mbyAqZGIgPSBlNGItPmJkX2luZm87CkBAIC00NDM0LDkgKzQ0MzMsOSBAQAogCQllbHNlIGlmIChibG9jayA+PSAoZW50cnktPnN0YXJ0X2JsayArIGVudHJ5LT5jb3VudCkpCiAJCQluID0gJigqbiktPnJiX3JpZ2h0OwogCQllbHNlIHsKLQkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwgX19mdW5jX18sCi0JCQkJCSJEb3VibGUgZnJlZSBvZiBibG9ja3MgJWQgKCVkICVkKSIsCi0JCQkJCWJsb2NrLCBlbnRyeS0+c3RhcnRfYmxrLCBlbnRyeS0+Y291bnQpOworCQkJZXh0NF9ncnBfbG9ja2VkX2Vycm9yKHNiLCBncm91cCwgMCwKKwkJCQlleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBncm91cCkgKyBibG9jaywKKwkJCQkiQmxvY2sgYWxyZWFkeSBvbiB0by1iZS1mcmVlZCBsaXN0Iik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTQ0OTQsNyArNDQ5Myw2IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMgPSBOVUxMOwogCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcDsKLQlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7CiAJdW5zaWduZWQgbG9uZyBmcmVlZCA9IDA7CiAJdW5zaWduZWQgaW50IG92ZXJmbG93OwogCWV4dDRfZ3JwYmxrX3QgYml0OwpAQCAtNDUxMyw3ICs0NTExLDYgQEAKIAl9CiAKIAlzYmkgPSBFWFQ0X1NCKHNiKTsKLQllcyA9IEVYVDRfU0Ioc2IpLT5zX2VzOwogCWlmICghKGZsYWdzICYgRVhUNF9GUkVFX0JMT0NLU19WQUxJREFURUQpICYmCiAJICAgICFleHQ0X2RhdGFfYmxvY2tfdmFsaWQoc2JpLCBibG9jaywgY291bnQpKSB7CiAJCWV4dDRfZXJyb3Ioc2IsICJGcmVlaW5nIGJsb2NrcyBub3QgaW4gZGF0YXpvbmUgLSAiCkBAIC00NjQ3LDYgKzQ2NDQsOCBAQAogCQltYl9jbGVhcl9iaXRzKGJpdG1hcF9iaC0+Yl9kYXRhLCBiaXQsIGNvdW50KTsKIAkJbWJfZnJlZV9ibG9ja3MoaW5vZGUsICZlNGIsIGJpdCwgY291bnQpOwogCQlleHQ0X21iX3JldHVybl90b19wcmVhbGxvY2F0aW9uKGlub2RlLCAmZTRiLCBibG9jaywgY291bnQpOworCQlpZiAodGVzdF9vcHQoc2IsIERJU0NBUkQpKQorCQkJZXh0NF9pc3N1ZV9kaXNjYXJkKHNiLCBibG9ja19ncm91cCwgYml0LCBjb3VudCk7CiAJfQogCiAJcmV0ID0gZXh0NF9mcmVlX2Jsa3NfY291bnQoc2IsIGdkcCkgKyBjb3VudDsKQEAgLTQ2ODAsNyArNDY3OSw3IEBACiAJCXB1dF9iaChiaXRtYXBfYmgpOwogCQlnb3RvIGRvX21vcmU7CiAJfQotCXNiLT5zX2RpcnQgPSAxOworCWV4dDRfbWFya19zdXBlcl9kaXJ0eShzYik7CiBlcnJvcl9yZXR1cm46CiAJaWYgKGZyZWVkKQogCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCBmcmVlZCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21pZ3JhdGUuYyBiL2ZzL2V4dDQvbWlncmF0ZS5jCmluZGV4IDZmM2EyN2UuLjE3NjVjMmMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWlncmF0ZS5jCisrKyBiL2ZzL2V4dDQvbWlncmF0ZS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkgKiBXZSBoYXZlIHRoZSBleHRlbnQgbWFwIGJ1aWxkIHdpdGggdGhlIHRtcCBpbm9kZS4KIAkgKiBOb3cgY29weSB0aGUgaV9kYXRhIGFjcm9zcwogCSAqLwotCWVpLT5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKwlleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKTsKIAltZW1jcHkoZWktPmlfZGF0YSwgdG1wX2VpLT5pX2RhdGEsIHNpemVvZihlaS0+aV9kYXRhKSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tb3ZlX2V4dGVudC5jIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCmluZGV4IDUyYWJmYTEuLjVmMWVkOWYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYworKysgYi9mcy9leHQ0L21vdmVfZXh0ZW50LmMKQEAgLTE0OCwxNyArMTQ4LDE3IEBACiAgKi8KIHN0YXRpYyBpbnQKIG1leHRfY2hlY2tfbnVsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlMSwgc3RydWN0IGlub2RlICppbm9kZTIsCi0JCWNvbnN0IGNoYXIgKmZ1bmN0aW9uKQorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgdW5zaWduZWQgaW50IGxpbmUpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5vZGUxID09IE5VTEwpIHsKLQkJX19leHQ0X2Vycm9yKGlub2RlMi0+aV9zYiwgZnVuY3Rpb24sCisJCV9fZXh0NF9lcnJvcihpbm9kZTItPmlfc2IsIGZ1bmN0aW9uLCBsaW5lLAogCQkJIkJvdGggaW5vZGVzIHNob3VsZCBub3QgYmUgTlVMTDogIgogCQkJImlub2RlMSBOVUxMIGlub2RlMiAlbHUiLCBpbm9kZTItPmlfaW5vKTsKIAkJcmV0ID0gLUVJTzsKIAl9IGVsc2UgaWYgKGlub2RlMiA9PSBOVUxMKSB7Ci0JCV9fZXh0NF9lcnJvcihpbm9kZTEtPmlfc2IsIGZ1bmN0aW9uLAorCQlfX2V4dDRfZXJyb3IoaW5vZGUxLT5pX3NiLCBmdW5jdGlvbiwgbGluZSwKIAkJCSJCb3RoIGlub2RlcyBzaG91bGQgbm90IGJlIE5VTEw6ICIKIAkJCSJpbm9kZTEgJWx1IGlub2RlMiBOVUxMIiwgaW5vZGUxLT5pX2lubyk7CiAJCXJldCA9IC1FSU87CkBAIC0xMDg0LDcgKzEwODQsNyBAQAogCiAJQlVHX09OKGlub2RlMSA9PSBOVUxMICYmIGlub2RlMiA9PSBOVUxMKTsKIAotCXJldCA9IG1leHRfY2hlY2tfbnVsbF9pbm9kZShpbm9kZTEsIGlub2RlMiwgX19mdW5jX18pOworCXJldCA9IG1leHRfY2hlY2tfbnVsbF9pbm9kZShpbm9kZTEsIGlub2RlMiwgX19mdW5jX18sIF9fTElORV9fKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKQEAgLTExMjEsNyArMTEyMSw3IEBACiAKIAlCVUdfT04oaW5vZGUxID09IE5VTEwgJiYgaW5vZGUyID09IE5VTEwpOwogCi0JcmV0ID0gbWV4dF9jaGVja19udWxsX2lub2RlKGlub2RlMSwgaW5vZGUyLCBfX2Z1bmNfXyk7CisJcmV0ID0gbWV4dF9jaGVja19udWxsX2lub2RlKGlub2RlMSwgaW5vZGUyLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IGE0M2U2NjEuLjMxNGMwZDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbmFtZWkuYworKysgYi9mcy9leHQ0L25hbWVpLmMKQEAgLTE3OSwzMCArMTc5LDYgQEAKIHN0YXRpYyBpbnQgZXh0NF9keF9hZGRfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotdW5zaWduZWQgaW50IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soX19sZTE2IGRsZW4sIHVuc2lnbmVkIGJsb2Nrc2l6ZSkKLXsKLQl1bnNpZ25lZCBsZW4gPSBsZTE2X3RvX2NwdShkbGVuKTsKLQotCWlmIChsZW4gPT0gRVhUNF9NQVhfUkVDX0xFTiB8fCBsZW4gPT0gMCkKLQkJcmV0dXJuIGJsb2Nrc2l6ZTsKLQlyZXR1cm4gKGxlbiAmIDY1NTMyKSB8ICgobGVuICYgMykgPDwgMTYpOwotfQotCi1fX2xlMTYgZXh0NF9yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuLCB1bnNpZ25lZCBibG9ja3NpemUpCi17Ci0JaWYgKChsZW4gPiBibG9ja3NpemUpIHx8IChibG9ja3NpemUgPiAoMSA8PCAxOCkpIHx8IChsZW4gJiAzKSkKLQkJQlVHKCk7Ci0JaWYgKGxlbiA8IDY1NTM2KQotCQlyZXR1cm4gY3B1X3RvX2xlMTYobGVuKTsKLQlpZiAobGVuID09IGJsb2Nrc2l6ZSkgewotCQlpZiAoYmxvY2tzaXplID09IDY1NTM2KQotCQkJcmV0dXJuIGNwdV90b19sZTE2KEVYVDRfTUFYX1JFQ19MRU4pOwotCQllbHNlCi0JCQlyZXR1cm4gY3B1X3RvX2xlMTYoMCk7Ci0JfQotCXJldHVybiBjcHVfdG9fbGUxNigobGVuICYgNjU1MzIpIHwgKChsZW4gPj4gMTYpICYgMykpOwotfQotCiAvKgogICogcCBpcyBhdCBsZWFzdCA2IGJ5dGVzIGJlZm9yZSB0aGUgZW5kIG9mIHBhZ2UKICAqLwpAQCAtNjA1LDcgKzU4MSw3IEBACiAJCQkJCSAgIGRpci0+aV9zYi0+c19ibG9ja3NpemUgLQogCQkJCQkgICBFWFQ0X0RJUl9SRUNfTEVOKDApKTsKIAlmb3IgKDsgZGUgPCB0b3A7IGRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSkgewotCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KCJodHJlZV9kaXJibG9ja190b190cmVlIiwgZGlyLCBkZSwgYmgsCisJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoZGlyLCBkZSwgYmgsCiAJCQkJCShibG9jazw8RVhUNF9CTE9DS19TSVpFX0JJVFMoZGlyLT5pX3NiKSkKIAkJCQkJCSsoKGNoYXIgKilkZSAtIGJoLT5iX2RhdGEpKSkgewogCQkJLyogT24gZXJyb3IsIHNraXAgdGhlIGZfcG9zIHRvIHRoZSBuZXh0IGJsb2NrLiAqLwpAQCAtODQ0LDggKzgyMCw3IEBACiAJCWlmICgoY2hhciAqKSBkZSArIG5hbWVsZW4gPD0gZGxpbWl0ICYmCiAJCSAgICBleHQ0X21hdGNoIChuYW1lbGVuLCBuYW1lLCBkZSkpIHsKIAkJCS8qIGZvdW5kIGEgbWF0Y2ggLSBqdXN0IHRvIGJlIHN1cmUsIGRvIGEgZnVsbCBjaGVjayAqLwotCQkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeSgiZXh0NF9maW5kX2VudHJ5IiwKLQkJCQkJCSAgZGlyLCBkZSwgYmgsIG9mZnNldCkpCisJCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KGRpciwgZGUsIGJoLCBvZmZzZXQpKQogCQkJCXJldHVybiAtMTsKIAkJCSpyZXNfZGlyID0gZGU7CiAJCQlyZXR1cm4gMTsKQEAgLTEwMTksNyArOTk0LDcgQEAKIAkJCWludCBvZmYgPSAoYmxvY2sgPDwgRVhUNF9CTE9DS19TSVpFX0JJVFMoc2IpKQogCQkJCSAgKyAoKGNoYXIgKikgZGUgLSBiaC0+Yl9kYXRhKTsKIAotCQkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeShfX2Z1bmNfXywgZGlyLCBkZSwgYmgsIG9mZikpIHsKKwkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoZGlyLCBkZSwgYmgsIG9mZikpIHsKIAkJCQlicmVsc2UoYmgpOwogCQkJCSplcnIgPSBFUlJfQkFEX0RYX0RJUjsKIAkJCQlnb3RvIGVycm91dDsKQEAgLTEwODgsNyArMTA2Myw2IEBACiBzdHJ1Y3QgZGVudHJ5ICpleHQ0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCiB7CiAJX191MzIgaW5vOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBxc3RyIGRvdGRvdCA9IHsKIAkJLm5hbWUgPSAiLi4iLAogCQkubGVuID0gMiwKQEAgLTEwOTcsNyArMTA3MSw2IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAogCWJoID0gZXh0NF9maW5kX2VudHJ5KGNoaWxkLT5kX2lub2RlLCAmZG90ZG90LCAmZGUpOwotCWlub2RlID0gTlVMTDsKIAlpZiAoIWJoKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAlpbm8gPSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpOwpAQCAtMTMwNSw4ICsxMjc4LDcgQEAKIAkJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKiliaC0+Yl9kYXRhOwogCQl0b3AgPSBiaC0+Yl9kYXRhICsgYmxvY2tzaXplIC0gcmVjbGVuOwogCQl3aGlsZSAoKGNoYXIgKikgZGUgPD0gdG9wKSB7Ci0JCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KCJleHQ0X2FkZF9lbnRyeSIsIGRpciwgZGUsCi0JCQkJCQkgIGJoLCBvZmZzZXQpKQorCQkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIGRlLCBiaCwgb2Zmc2V0KSkKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCWlmIChleHQ0X21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkKIAkJCQlyZXR1cm4gLUVFWElTVDsKQEAgLTE2NzMsNyArMTY0NSw3IEBACiAJcGRlID0gTlVMTDsKIAlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwogCXdoaWxlIChpIDwgYmgtPmJfc2l6ZSkgewotCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KCJleHQ0X2RlbGV0ZV9lbnRyeSIsIGRpciwgZGUsIGJoLCBpKSkKKwkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeShkaXIsIGRlLCBiaCwgaSkpCiAJCQlyZXR1cm4gLUVJTzsKIAkJaWYgKGRlID09IGRlX2RlbCkgIHsKIAkJCUJVRkZFUl9UUkFDRShiaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKQEAgLTE5NTYsNyArMTkyOCw3IEBACiAJCQl9CiAJCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiaC0+Yl9kYXRhOwogCQl9Ci0JCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoImVtcHR5X2RpciIsIGlub2RlLCBkZSwgYmgsIG9mZnNldCkpIHsKKwkJaWYgKCFleHQ0X2NoZWNrX2Rpcl9lbnRyeShpbm9kZSwgZGUsIGJoLCBvZmZzZXQpKSB7CiAJCQlkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKShiaC0+Yl9kYXRhICsKIAkJCQkJCQkgc2ItPnNfYmxvY2tzaXplKTsKIAkJCW9mZnNldCA9IChvZmZzZXQgfCAoc2ItPnNfYmxvY2tzaXplIC0gMSkpICsgMTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jCmluZGV4IDZkZjc5N2UuLmNhNWM4YWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcmVzaXplLmMKKysrIGIvZnMvZXh0NC9yZXNpemUuYwpAQCAtOTIxLDggKzkyMSw3IEBACiAJCQkgICAmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzKTsKIAl9CiAKLQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIHNiaS0+c19zYmgpOwotCXNiLT5zX2RpcnQgPSAxOworCWV4dDRfaGFuZGxlX2RpcnR5X3N1cGVyKGhhbmRsZSwgc2IpOwogCiBleGl0X2pvdXJuYWw6CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfcmVzaXplX2xvY2spOwpAQCAtOTUzLDcgKzk1Miw2IEBACiAJCSAgICAgIGV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCkKIHsKIAlleHQ0X2ZzYmxrX3Qgb19ibG9ja3NfY291bnQ7Ci0JZXh0NF9ncm91cF90IG9fZ3JvdXBzX2NvdW50OwogCWV4dDRfZ3JwYmxrX3QgbGFzdDsKIAlleHQ0X2dycGJsa190IGFkZDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtOTY1LDcgKzk2Myw2IEBACiAJICogeWV0OiB3ZSdyZSBnb2luZyB0byByZXZhbGlkYXRlIGVzLT5zX2Jsb2Nrc19jb3VudCBhZnRlcgogCSAqIHRha2luZyB0aGUgc19yZXNpemVfbG9jayBiZWxvdy4gKi8KIAlvX2Jsb2Nrc19jb3VudCA9IGV4dDRfYmxvY2tzX2NvdW50KGVzKTsKLQlvX2dyb3Vwc19jb3VudCA9IEVYVDRfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsKIAogCWlmICh0ZXN0X29wdChzYiwgREVCVUcpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiRVhUNC1mczogZXh0ZW5kaW5nIGxhc3QgZ3JvdXAgZnJvbSAlbGx1IHV0byAlbGx1IGJsb2Nrc1xuIiwKQEAgLTEwNDUsMTMgKzEwNDIsMTIgQEAKIAkJZ290byBleGl0X3B1dDsKIAl9CiAJZXh0NF9ibG9ja3NfY291bnRfc2V0KGVzLCBvX2Jsb2Nrc19jb3VudCArIGFkZCk7Ci0JZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBFWFQ0X1NCKHNiKS0+c19zYmgpOwotCXNiLT5zX2RpcnQgPSAxOwogCW11dGV4X3VubG9jaygmRVhUNF9TQihzYiktPnNfcmVzaXplX2xvY2spOwogCWV4dDRfZGVidWcoImZyZWVpbmcgYmxvY2tzICVsbHUgdGhyb3VnaCAlbGx1XG4iLCBvX2Jsb2Nrc19jb3VudCwKIAkJICAgb19ibG9ja3NfY291bnQgKyBhZGQpOwogCS8qIFdlIGFkZCB0aGUgYmxvY2tzIHRvIHRoZSBiaXRtYXAgYW5kIHNldCB0aGUgZ3JvdXAgbmVlZCBpbml0IGJpdCAqLwogCWV4dDRfYWRkX2dyb3VwYmxvY2tzKGhhbmRsZSwgc2IsIG9fYmxvY2tzX2NvdW50LCBhZGQpOworCWV4dDRfaGFuZGxlX2RpcnR5X3N1cGVyKGhhbmRsZSwgc2IpOwogCWV4dDRfZGVidWcoImZyZWVkIGJsb2NrcyAlbGx1IHRocm91Z2ggJWxsdVxuIiwgb19ibG9ja3NfY291bnQsCiAJCSAgIG9fYmxvY2tzX2NvdW50ICsgYWRkKTsKIAlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSkpKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IGU3MmQzMjMuLjI2MTQ3NzQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTI0MSwxNCArMjQxLDE0IEBACiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gRVJSX1BUUigtRVJPRlMpOwogCi0JdmZzX2NoZWNrX2Zyb3plbihzYiwgU0JfRlJFRVpFX1dSSVRFKTsKKwl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfVFJBTlMpOwogCS8qIFNwZWNpYWwgY2FzZSBoZXJlOiBpZiB0aGUgam91cm5hbCBoYXMgYWJvcnRlZCBiZWhpbmQgb3VyCiAJICogYmFja3MgKGVnLiBFSU8gaW4gdGhlIGNvbW1pdCB0aHJlYWQpLCB0aGVuIHdlIHN0aWxsIG5lZWQgdG8KIAkgKiB0YWtlIHRoZSBGUyBpdHNlbGYgcmVhZG9ubHkgY2xlYW5seS4gKi8KIAlqb3VybmFsID0gRVhUNF9TQihzYiktPnNfam91cm5hbDsKIAlpZiAoam91cm5hbCkgewogCQlpZiAoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7Ci0JCQlleHQ0X2Fib3J0KHNiLCBfX2Z1bmNfXywgIkRldGVjdGVkIGFib3J0ZWQgam91cm5hbCIpOworCQkJZXh0NF9hYm9ydChzYiwgIkRldGVjdGVkIGFib3J0ZWQgam91cm5hbCIpOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVST0ZTKTsKIAkJfQogCQlyZXR1cm4gamJkMl9qb3VybmFsX3N0YXJ0KGpvdXJuYWwsIG5ibG9ja3MpOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAgKiB0aGF0IHN5bmMoKSB3aWxsIGNhbGwgdGhlIGZpbGVzeXN0ZW0ncyB3cml0ZV9zdXBlciBjYWxsYmFjayBpZgogICogYXBwcm9wcmlhdGUuCiAgKi8KLWludCBfX2V4dDRfam91cm5hbF9zdG9wKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlKQoraW50IF9fZXh0NF9qb3VybmFsX3N0b3AoY29uc3QgY2hhciAqd2hlcmUsIHVuc2lnbmVkIGludCBsaW5lLCBoYW5kbGVfdCAqaGFuZGxlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJaW50IGVycjsKQEAgLTI3OSwxMiArMjc5LDEzIEBACiAJaWYgKCFlcnIpCiAJCWVyciA9IHJjOwogCWlmIChlcnIpCi0JCV9fZXh0NF9zdGRfZXJyb3Ioc2IsIHdoZXJlLCBlcnIpOworCQlfX2V4dDRfc3RkX2Vycm9yKHNiLCB3aGVyZSwgbGluZSwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGV4dDRfam91cm5hbF9hYm9ydF9oYW5kbGUoY29uc3QgY2hhciAqY2FsbGVyLCBjb25zdCBjaGFyICplcnJfZm4sCi0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGhhbmRsZV90ICpoYW5kbGUsIGludCBlcnIpCit2b2lkIGV4dDRfam91cm5hbF9hYm9ydF9oYW5kbGUoY29uc3QgY2hhciAqY2FsbGVyLCB1bnNpZ25lZCBpbnQgbGluZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICplcnJfZm4sIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwgaW50IGVycikKIHsKIAljaGFyIG5idWZbMTZdOwogCWNvbnN0IGNoYXIgKmVycnN0ciA9IGV4dDRfZGVjb2RlX2Vycm9yKE5VTEwsIGVyciwgbmJ1Zik7CkBAIC0zMDAsMTIgKzMwMSw0NyBAQAogCWlmIChpc19oYW5kbGVfYWJvcnRlZChoYW5kbGUpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBhYm9ydGluZyB0cmFuc2FjdGlvbjogJXMgaW4gJXNcbiIsCi0JICAgICAgIGNhbGxlciwgZXJyc3RyLCBlcnJfZm4pOworCXByaW50ayhLRVJOX0VSUiAiJXM6JWQ6IGFib3J0aW5nIHRyYW5zYWN0aW9uOiAlcyBpbiAlc1xuIiwKKwkgICAgICAgY2FsbGVyLCBsaW5lLCBlcnJzdHIsIGVycl9mbik7CiAKIAlqYmQyX2pvdXJuYWxfYWJvcnRfaGFuZGxlKGhhbmRsZSk7CiB9CiAKK3N0YXRpYyB2b2lkIF9fc2F2ZV9lcnJvcl9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmMsCisJCQkgICAgdW5zaWduZWQgaW50IGxpbmUpCit7CisJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihzYiktPnNfZXM7CisKKwlFWFQ0X1NCKHNiKS0+c19tb3VudF9zdGF0ZSB8PSBFWFQ0X0VSUk9SX0ZTOworCWVzLT5zX3N0YXRlIHw9IGNwdV90b19sZTE2KEVYVDRfRVJST1JfRlMpOworCWVzLT5zX2xhc3RfZXJyb3JfdGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCXN0cm5jcHkoZXMtPnNfbGFzdF9lcnJvcl9mdW5jLCBmdW5jLCBzaXplb2YoZXMtPnNfbGFzdF9lcnJvcl9mdW5jKSk7CisJZXMtPnNfbGFzdF9lcnJvcl9saW5lID0gY3B1X3RvX2xlMzIobGluZSk7CisJaWYgKCFlcy0+c19maXJzdF9lcnJvcl90aW1lKSB7CisJCWVzLT5zX2ZpcnN0X2Vycm9yX3RpbWUgPSBlcy0+c19sYXN0X2Vycm9yX3RpbWU7CisJCXN0cm5jcHkoZXMtPnNfZmlyc3RfZXJyb3JfZnVuYywgZnVuYywKKwkJCXNpemVvZihlcy0+c19maXJzdF9lcnJvcl9mdW5jKSk7CisJCWVzLT5zX2ZpcnN0X2Vycm9yX2xpbmUgPSBjcHVfdG9fbGUzMihsaW5lKTsKKwkJZXMtPnNfZmlyc3RfZXJyb3JfaW5vID0gZXMtPnNfbGFzdF9lcnJvcl9pbm87CisJCWVzLT5zX2ZpcnN0X2Vycm9yX2Jsb2NrID0gZXMtPnNfbGFzdF9lcnJvcl9ibG9jazsKKwl9CisJLyoKKwkgKiBTdGFydCB0aGUgZGFpbHkgZXJyb3IgcmVwb3J0aW5nIGZ1bmN0aW9uIGlmIGl0IGhhc24ndCBiZWVuCisJICogc3RhcnRlZCBhbHJlYWR5CisJICovCisJaWYgKCFlcy0+c19lcnJvcl9jb3VudCkKKwkJbW9kX3RpbWVyKCZFWFQ0X1NCKHNiKS0+c19lcnJfcmVwb3J0LCBqaWZmaWVzICsgMjQqNjAqNjAqSFopOworCWVzLT5zX2Vycm9yX2NvdW50ID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZXMtPnNfZXJyb3JfY291bnQpICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfZXJyb3JfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jLAorCQkJICAgIHVuc2lnbmVkIGludCBsaW5lKQoreworCV9fc2F2ZV9lcnJvcl9pbmZvKHNiLCBmdW5jLCBsaW5lKTsKKwlleHQ0X2NvbW1pdF9zdXBlcihzYiwgMSk7Cit9CisKKwogLyogRGVhbCB3aXRoIHRoZSByZXBvcnRpbmcgb2YgZmFpbHVyZSBjb25kaXRpb25zIG9uIGEgZmlsZXN5c3RlbSBzdWNoIGFzCiAgKiBpbmNvbnNpc3RlbmNpZXMgZGV0ZWN0ZWQgb3IgcmVhZCBJTyBmYWlsdXJlcy4KICAqCkBAIC0zMjMsMTEgKzM1OSw2IEBACiAKIHN0YXRpYyB2b2lkIGV4dDRfaGFuZGxlX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihzYiktPnNfZXM7Ci0KLQlFWFQ0X1NCKHNiKS0+c19tb3VudF9zdGF0ZSB8PSBFWFQ0X0VSUk9SX0ZTOwotCWVzLT5zX3N0YXRlIHw9IGNwdV90b19sZTE2KEVYVDRfRVJST1JfRlMpOwotCiAJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm47CiAKQEAgLTM0MiwxOSArMzczLDE5IEBACiAJCWV4dDRfbXNnKHNiLCBLRVJOX0NSSVQsICJSZW1vdW50aW5nIGZpbGVzeXN0ZW0gcmVhZC1vbmx5Iik7CiAJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAl9Ci0JZXh0NF9jb21taXRfc3VwZXIoc2IsIDEpOwogCWlmICh0ZXN0X29wdChzYiwgRVJST1JTX1BBTklDKSkKIAkJcGFuaWMoIkVYVDQtZnMgKGRldmljZSAlcyk6IHBhbmljIGZvcmNlZCBhZnRlciBlcnJvclxuIiwKIAkJCXNiLT5zX2lkKTsKIH0KIAogdm9pZCBfX2V4dDRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCi0JCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCQkgIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0NSSVQgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAiLCBzYi0+c19pZCwgZnVuY3Rpb24pOworCXByaW50ayhLRVJOX0NSSVQgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiVkOiBjb21tICVzOiAiLAorCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sIGxpbmUsIGN1cnJlbnQtPmNvbW0pOwogCXZwcmludGsoZm10LCBhcmdzKTsKIAlwcmludGsoIlxuIik7CiAJdmFfZW5kKGFyZ3MpOwpAQCAtMzYyLDE0ICszOTMsMjIgQEAKIAlleHQ0X2hhbmRsZV9lcnJvcihzYik7CiB9CiAKLXZvaWQgZXh0NF9lcnJvcl9pbm9kZShjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSwKK3ZvaWQgZXh0NF9lcnJvcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKKwkJICAgICAgdW5zaWduZWQgaW50IGxpbmUsIGV4dDRfZnNibGtfdCBibG9jaywKIAkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOworCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzOwogCisJZXMtPnNfbGFzdF9lcnJvcl9pbm8gPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOworCWVzLT5zX2xhc3RfZXJyb3JfYmxvY2sgPSBjcHVfdG9fbGU2NChibG9jayk7CisJc2F2ZV9lcnJvcl9pbmZvKGlub2RlLT5pX3NiLCBmdW5jdGlvbiwgbGluZSk7CiAJdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGsoS0VSTl9DUklUICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczogaW5vZGUgIyVsdTogKGNvbW0gJXMpICIsCi0JICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBmdW5jdGlvbiwgaW5vZGUtPmlfaW5vLCBjdXJyZW50LT5jb21tKTsKKwlwcmludGsoS0VSTl9DUklUICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczolZDogaW5vZGUgIyVsdTogIiwKKwkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBpbm9kZS0+aV9pbm8pOworCWlmIChibG9jaykKKwkJcHJpbnRrKCJibG9jayAlbGx1OiAiLCBibG9jayk7CisJcHJpbnRrKCJjb21tICVzOiAiLCBjdXJyZW50LT5jb21tKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJcHJpbnRrKCJcbiIpOwogCXZhX2VuZChhcmdzKTsKQEAgLTM3NywyMCArNDE2LDI2IEBACiAJZXh0NF9oYW5kbGVfZXJyb3IoaW5vZGUtPmlfc2IpOwogfQogCi12b2lkIGV4dDRfZXJyb3JfZmlsZShjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit2b2lkIGV4dDRfZXJyb3JfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sCisJCSAgICAgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKKwlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCWNoYXIgcGF0aG5hbWVbODBdLCAqcGF0aDsKIAorCWVzID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXM7CisJZXMtPnNfbGFzdF9lcnJvcl9pbm8gPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOworCXNhdmVfZXJyb3JfaW5mbyhpbm9kZS0+aV9zYiwgZnVuY3Rpb24sIGxpbmUpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAJcGF0aCA9IGRfcGF0aCgmKGZpbGUtPmZfcGF0aCksIHBhdGhuYW1lLCBzaXplb2YocGF0aG5hbWUpKTsKIAlpZiAoIXBhdGgpCiAJCXBhdGggPSAiKHVua25vd24pIjsKIAlwcmludGsoS0VSTl9DUklUCi0JICAgICAgICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczogaW5vZGUgIyVsdSAoY29tbSAlcyBwYXRoICVzKTogIiwKLQkgICAgICAgaW5vZGUtPmlfc2ItPnNfaWQsIGZ1bmN0aW9uLCBpbm9kZS0+aV9pbm8sIGN1cnJlbnQtPmNvbW0sIHBhdGgpOworCSAgICAgICAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6JWQ6IGlub2RlICMlbHUgIgorCSAgICAgICAiKGNvbW0gJXMgcGF0aCAlcyk6ICIsCisJICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBmdW5jdGlvbiwgbGluZSwgaW5vZGUtPmlfaW5vLAorCSAgICAgICBjdXJyZW50LT5jb21tLCBwYXRoKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJcHJpbnRrKCJcbiIpOwogCXZhX2VuZChhcmdzKTsKQEAgLTQzNSw3ICs0ODAsOCBAQAogLyogX19leHQ0X3N0ZF9lcnJvciBkZWNvZGVzIGV4cGVjdGVkIGVycm9ycyBmcm9tIGpvdXJuYWxpbmcgZnVuY3Rpb25zCiAgKiBhdXRvbWF0aWNhbGx5IGFuZCBpbnZva2VzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciByZXNwb25zZS4gICovCiAKLXZvaWQgX19leHQ0X3N0ZF9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IGVycm5vKQordm9pZCBfX2V4dDRfc3RkX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAorCQkgICAgICB1bnNpZ25lZCBpbnQgbGluZSwgaW50IGVycm5vKQogewogCWNoYXIgbmJ1ZlsxNl07CiAJY29uc3QgY2hhciAqZXJyc3RyOwpAQCAtNDQ4LDggKzQ5NCw5IEBACiAJCXJldHVybjsKIAogCWVycnN0ciA9IGV4dDRfZGVjb2RlX2Vycm9yKHNiLCBlcnJubywgbmJ1Zik7Ci0JcHJpbnRrKEtFUk5fQ1JJVCAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKSBpbiAlczogJXNcbiIsCi0JICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbiwgZXJyc3RyKTsKKwlwcmludGsoS0VSTl9DUklUICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpIGluICVzOiVkOiAlc1xuIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBlcnJzdHIpOworCXNhdmVfZXJyb3JfaW5mbyhzYiwgZnVuY3Rpb24sIGxpbmUpOwogCiAJZXh0NF9oYW5kbGVfZXJyb3Ioc2IpOwogfQpAQCAtNDY0LDI5ICs1MTEsMjkgQEAKICAqIGNhc2Ugd2UgdGFrZSB0aGUgZWFzeSB3YXkgb3V0IGFuZCBwYW5pYyBpbW1lZGlhdGVseS4KICAqLwogCi12b2lkIGV4dDRfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCi0JCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBfX2V4dDRfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCisJCXVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAKKwlzYXZlX2Vycm9yX2luZm8oc2IsIGZ1bmN0aW9uLCBsaW5lKTsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX0NSSVQgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAiLCBzYi0+c19pZCwgZnVuY3Rpb24pOworCXByaW50ayhLRVJOX0NSSVQgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiVkOiAiLCBzYi0+c19pZCwKKwkgICAgICAgZnVuY3Rpb24sIGxpbmUpOwogCXZwcmludGsoZm10LCBhcmdzKTsKIAlwcmludGsoIlxuIik7CiAJdmFfZW5kKGFyZ3MpOwogCisJaWYgKChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgPT0gMCkgeworCQlleHQ0X21zZyhzYiwgS0VSTl9DUklULCAiUmVtb3VudGluZyBmaWxlc3lzdGVtIHJlYWQtb25seSIpOworCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJCUVYVDRfU0Ioc2IpLT5zX21vdW50X2ZsYWdzIHw9IEVYVDRfTUZfRlNfQUJPUlRFRDsKKwkJaWYgKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwpCisJCQlqYmQyX2pvdXJuYWxfYWJvcnQoRVhUNF9TQihzYiktPnNfam91cm5hbCwgLUVJTyk7CisJCXNhdmVfZXJyb3JfaW5mbyhzYiwgZnVuY3Rpb24sIGxpbmUpOworCX0KIAlpZiAodGVzdF9vcHQoc2IsIEVSUk9SU19QQU5JQykpCiAJCXBhbmljKCJFWFQ0LWZzIHBhbmljIGZyb20gcHJldmlvdXMgZXJyb3JcbiIpOwotCi0JaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQotCQlyZXR1cm47Ci0KLQlleHQ0X21zZyhzYiwgS0VSTl9DUklULCAiUmVtb3VudGluZyBmaWxlc3lzdGVtIHJlYWQtb25seSIpOwotCUVYVDRfU0Ioc2IpLT5zX21vdW50X3N0YXRlIHw9IEVYVDRfRVJST1JfRlM7Ci0Jc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwotCUVYVDRfU0Ioc2IpLT5zX21vdW50X2ZsYWdzIHw9IEVYVDRfTUZfRlNfQUJPUlRFRDsKLQlpZiAoRVhUNF9TQihzYiktPnNfam91cm5hbCkKLQkJamJkMl9qb3VybmFsX2Fib3J0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsIC1FSU8pOwogfQogCiB2b2lkIGV4dDRfbXNnIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgY29uc3QgY2hhciAqcHJlZml4LApAQCAtNTAyLDM4ICs1NDksNDcgQEAKIH0KIAogdm9pZCBfX2V4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKLQkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwkJICAgIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnMgd2FybmluZyAoZGV2aWNlICVzKTogJXM6ICIsCi0JICAgICAgIHNiLT5zX2lkLCBmdW5jdGlvbik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mcyB3YXJuaW5nIChkZXZpY2UgJXMpOiAlczolZDogIiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJcHJpbnRrKCJcbiIpOwogCXZhX2VuZChhcmdzKTsKIH0KIAotdm9pZCBleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IGdycCwKLQkJCSAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19leHQ0X2dycF9sb2NrZWRfZXJyb3IoY29uc3QgY2hhciAqZnVuY3Rpb24sIHVuc2lnbmVkIGludCBsaW5lLAorCQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBleHQ0X2dyb3VwX3QgZ3JwLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGlubywgZXh0NF9mc2Jsa190IGJsb2NrLAorCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKIF9fcmVsZWFzZXMoYml0bG9jaykKIF9fYWNxdWlyZXMoYml0bG9jaykKIHsKIAl2YV9saXN0IGFyZ3M7CiAJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihzYiktPnNfZXM7CiAKKwllcy0+c19sYXN0X2Vycm9yX2lubyA9IGNwdV90b19sZTMyKGlubyk7CisJZXMtPnNfbGFzdF9lcnJvcl9ibG9jayA9IGNwdV90b19sZTY0KGJsb2NrKTsKKwlfX3NhdmVfZXJyb3JfaW5mbyhzYiwgZnVuY3Rpb24sIGxpbmUpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcHJpbnRrKEtFUk5fQ1JJVCAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6ICIsIHNiLT5zX2lkLCBmdW5jdGlvbik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiRVhUNC1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6JWQ6IGdyb3VwICV1IiwKKwkgICAgICAgc2ItPnNfaWQsIGZ1bmN0aW9uLCBsaW5lLCBncnApOworCWlmIChpbm8pCisJCXByaW50aygiaW5vZGUgJWx1OiAiLCBpbm8pOworCWlmIChibG9jaykKKwkJcHJpbnRrKCJibG9jayAlbGx1OiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrKTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJcHJpbnRrKCJcbiIpOwogCXZhX2VuZChhcmdzKTsKIAogCWlmICh0ZXN0X29wdChzYiwgRVJST1JTX0NPTlQpKSB7Ci0JCUVYVDRfU0Ioc2IpLT5zX21vdW50X3N0YXRlIHw9IEVYVDRfRVJST1JfRlM7Ci0JCWVzLT5zX3N0YXRlIHw9IGNwdV90b19sZTE2KEVYVDRfRVJST1JfRlMpOwogCQlleHQ0X2NvbW1pdF9zdXBlcihzYiwgMCk7CiAJCXJldHVybjsKIAl9CisKIAlleHQ0X3VubG9ja19ncm91cChzYiwgZ3JwKTsKIAlleHQ0X2hhbmRsZV9lcnJvcihzYik7CiAJLyoKQEAgLTY2MCw4ICs3MTYsNyBAQAogCQllcnIgPSBqYmQyX2pvdXJuYWxfZGVzdHJveShzYmktPnNfam91cm5hbCk7CiAJCXNiaS0+c19qb3VybmFsID0gTlVMTDsKIAkJaWYgKGVyciA8IDApCi0JCQlleHQ0X2Fib3J0KHNiLCBfX2Z1bmNfXywKLQkJCQkgICAiQ291bGRuJ3QgY2xlYW4gdXAgdGhlIGpvdXJuYWwiKTsKKwkJCWV4dDRfYWJvcnQoc2IsICJDb3VsZG4ndCBjbGVhbiB1cCB0aGUgam91cm5hbCIpOwogCX0KIAogCWV4dDRfcmVsZWFzZV9zeXN0ZW1fem9uZShzYik7CkBAIC04MTMsOCArODY4LDEwIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfaW5vZGVfY2FjaGVwKTsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQordm9pZCBleHQ0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CisJaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKGlub2RlKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlkcXVvdF9kcm9wKGlub2RlKTsKIAlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwogCWlmIChFWFQ0X0pPVVJOQUwoaW5vZGUpKQpAQCAtOTQ2LDE0ICsxMDAzLDEyIEBACiAJCXNlcV9wdXRzKHNlcSwgIixqb3VybmFsX2FzeW5jX2NvbW1pdCIpOwogCWVsc2UgaWYgKHRlc3Rfb3B0KHNiLCBKT1VSTkFMX0NIRUNLU1VNKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGpvdXJuYWxfY2hlY2tzdW0iKTsKLQlpZiAodGVzdF9vcHQoc2IsIE5PQkgpKQotCQlzZXFfcHV0cyhzZXEsICIsbm9iaCIpOwogCWlmICh0ZXN0X29wdChzYiwgSV9WRVJTSU9OKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGlfdmVyc2lvbiIpOwotCWlmICghdGVzdF9vcHQoc2IsIERFTEFMTE9DKSkKKwlpZiAoIXRlc3Rfb3B0KHNiLCBERUxBTExPQykgJiYKKwkgICAgIShkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9OT0RFTEFMTE9DKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vZGVsYWxsb2MiKTsKIAotCiAJaWYgKHNiaS0+c19zdHJpcGUpCiAJCXNlcV9wcmludGYoc2VxLCAiLHN0cmlwZT0lbHUiLCBzYmktPnNfc3RyaXBlKTsKIAkvKgpAQCAtOTc3LDcgKzEwMzIsNyBAQAogCWlmICh0ZXN0X29wdChzYiwgTk9fQVVUT19EQV9BTExPQykpCiAJCXNlcV9wdXRzKHNlcSwgIixub2F1dG9fZGFfYWxsb2MiKTsKIAotCWlmICh0ZXN0X29wdChzYiwgRElTQ0FSRCkpCisJaWYgKHRlc3Rfb3B0KHNiLCBESVNDQVJEKSAmJiAhKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0RJU0NBUkQpKQogCQlzZXFfcHV0cyhzZXEsICIsZGlzY2FyZCIpOwogCiAJaWYgKHRlc3Rfb3B0KHNiLCBOT0xPQUQpKQpAQCAtOTg2LDYgKzEwNDEsMTAgQEAKIAlpZiAodGVzdF9vcHQoc2IsIERJT1JFQURfTk9MT0NLKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRpb3JlYWRfbm9sb2NrIik7CiAKKwlpZiAodGVzdF9vcHQoc2IsIEJMT0NLX1ZBTElESVRZKSAmJgorCSAgICAhKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0JMT0NLX1ZBTElESVRZKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGJsb2NrX3ZhbGlkaXR5Iik7CisKIAlleHQ0X3Nob3dfcXVvdGFfb3B0aW9ucyhzZXEsIHNiKTsKIAogCXJldHVybiAwOwpAQCAtMTA2NSw2ICsxMTI0LDcgQEAKIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIHN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKIAkJCQljaGFyICpwYXRoKTsKK3N0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogc3RhdGljIGludCBleHQ0X3F1b3RhX29uX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIHN0YXRpYyBzc2l6ZV90IGV4dDRfcXVvdGFfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgY2hhciAqZGF0YSwKIAkJCSAgICAgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKQEAgLTEwODYsNyArMTE0Niw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGV4dDRfcWN0bF9vcGVyYXRpb25zID0gewogCS5xdW90YV9vbgk9IGV4dDRfcXVvdGFfb24sCi0JLnF1b3RhX29mZgk9IGRxdW90X3F1b3RhX29mZiwKKwkucXVvdGFfb2ZmCT0gZXh0NF9xdW90YV9vZmYsCiAJLnF1b3RhX3N5bmMJPSBkcXVvdF9xdW90YV9zeW5jLAogCS5nZXRfaW5mbwk9IGRxdW90X2dldF9kcWluZm8sCiAJLnNldF9pbmZvCT0gZHF1b3Rfc2V0X2RxaW5mbywKQEAgLTExMDAsMTQgKzExNjAsMTMgQEAKIAkuZGVzdHJveV9pbm9kZQk9IGV4dDRfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBleHQ0X3dyaXRlX2lub2RlLAogCS5kaXJ0eV9pbm9kZQk9IGV4dDRfZGlydHlfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IGV4dDRfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGV4dDRfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGV4dDRfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCT0gZXh0NF9zeW5jX2ZzLAogCS5mcmVlemVfZnMJPSBleHQ0X2ZyZWV6ZSwKIAkudW5mcmVlemVfZnMJPSBleHQ0X3VuZnJlZXplLAogCS5zdGF0ZnMJCT0gZXh0NF9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSBleHQ0X3JlbW91bnQsCi0JLmNsZWFyX2lub2RlCT0gZXh0NF9jbGVhcl9pbm9kZSwKIAkuc2hvd19vcHRpb25zCT0gZXh0NF9zaG93X29wdGlvbnMsCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLnF1b3RhX3JlYWQJPSBleHQ0X3F1b3RhX3JlYWQsCkBAIC0xMTIxLDEyICsxMTgwLDExIEBACiAJLmRlc3Ryb3lfaW5vZGUJPSBleHQ0X2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gZXh0NF93cml0ZV9pbm9kZSwKIAkuZGlydHlfaW5vZGUJPSBleHQ0X2RpcnR5X2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBleHQ0X2RlbGV0ZV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBleHQ0X2V2aWN0X2lub2RlLAogCS53cml0ZV9zdXBlcgk9IGV4dDRfd3JpdGVfc3VwZXIsCiAJLnB1dF9zdXBlcgk9IGV4dDRfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gZXh0NF9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSBleHQ0X3JlbW91bnQsCi0JLmNsZWFyX2lub2RlCT0gZXh0NF9jbGVhcl9pbm9kZSwKIAkuc2hvd19vcHRpb25zCT0gZXh0NF9zaG93X29wdGlvbnMsCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJLnF1b3RhX3JlYWQJPSBleHQ0X3F1b3RhX3JlYWQsCkBAIC0xNjI0LDEwICsxNjgyLDEyIEBACiAJCQkqbl9ibG9ja3NfY291bnQgPSBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9iaDoKLQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9CSCk7CisJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLAorCQkJCSAiSWdub3JpbmcgZGVwcmVjYXRlZCBub2JoIG9wdGlvbiIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2JoOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOworCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywKKwkJCQkgIklnbm9yaW5nIGRlcHJlY2F0ZWQgYmggb3B0aW9uIik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfaV92ZXJzaW9uOgogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBJX1ZFUlNJT04pOwpAQCAtMjI0OSw2ICsyMzA5LDggQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2JpLT5zX2J1ZGR5X2NhY2hlLT5pX3NiOwogCisJaWYgKCFzYi0+c19iZGV2LT5iZF9wYXJ0KQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwXG4iKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbHVcbiIsCiAJCQkocGFydF9zdGF0X3JlYWQoc2ItPnNfYmRldi0+YmRfcGFydCwgc2VjdG9yc1sxXSkgLQogCQkJIHNiaS0+c19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQpID4+IDEpOwpAQCAtMjI1OSw2ICsyMzIxLDggQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2JpLT5zX2J1ZGR5X2NhY2hlLT5pX3NiOwogCisJaWYgKCFzYi0+c19iZGV2LT5iZF9wYXJ0KQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwXG4iKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlbGx1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykoc2JpLT5zX2tieXRlc193cml0dGVuICsKIAkJCSgocGFydF9zdGF0X3JlYWQoc2ItPnNfYmRldi0+YmRfcGFydCwgc2VjdG9yc1sxXSkgLQpAQCAtMjQzMSw2ICsyNDk1LDUzIEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGEgZGF5IGlmIHdlIGhhdmUgZXJyb3JzIGxvZ2dlZAorICogb24gdGhlIGZpbGUgc3lzdGVtCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2RhaWx5X2Vycm9yX2luZm8odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKikgYXJnOworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7CisKKwlzYmkgPSBFWFQ0X1NCKHNiKTsKKwllcyA9IHNiaS0+c19lczsKKworCWlmIChlcy0+c19lcnJvcl9jb3VudCkKKwkJZXh0NF9tc2coc2IsIEtFUk5fTk9USUNFLCAiZXJyb3IgY291bnQ6ICV1IiwKKwkJCSBsZTMyX3RvX2NwdShlcy0+c19lcnJvcl9jb3VudCkpOworCWlmIChlcy0+c19maXJzdF9lcnJvcl90aW1lKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRVhUNC1mcyAoJXMpOiBpbml0aWFsIGVycm9yIGF0ICV1OiAlLipzOiVkIiwKKwkJICAgICAgIHNiLT5zX2lkLCBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9lcnJvcl90aW1lKSwKKwkJICAgICAgIChpbnQpIHNpemVvZihlcy0+c19maXJzdF9lcnJvcl9mdW5jKSwKKwkJICAgICAgIGVzLT5zX2ZpcnN0X2Vycm9yX2Z1bmMsCisJCSAgICAgICBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9lcnJvcl9saW5lKSk7CisJCWlmIChlcy0+c19maXJzdF9lcnJvcl9pbm8pCisJCQlwcmludGsoIjogaW5vZGUgJXUiLAorCQkJICAgICAgIGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2Vycm9yX2lubykpOworCQlpZiAoZXMtPnNfZmlyc3RfZXJyb3JfYmxvY2spCisJCQlwcmludGsoIjogYmxvY2sgJWxsdSIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgICAgICAgbGU2NF90b19jcHUoZXMtPnNfZmlyc3RfZXJyb3JfYmxvY2spKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlpZiAoZXMtPnNfbGFzdF9lcnJvcl90aW1lKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiRVhUNC1mcyAoJXMpOiBsYXN0IGVycm9yIGF0ICV1OiAlLipzOiVkIiwKKwkJICAgICAgIHNiLT5zX2lkLCBsZTMyX3RvX2NwdShlcy0+c19sYXN0X2Vycm9yX3RpbWUpLAorCQkgICAgICAgKGludCkgc2l6ZW9mKGVzLT5zX2xhc3RfZXJyb3JfZnVuYyksCisJCSAgICAgICBlcy0+c19sYXN0X2Vycm9yX2Z1bmMsCisJCSAgICAgICBsZTMyX3RvX2NwdShlcy0+c19sYXN0X2Vycm9yX2xpbmUpKTsKKwkJaWYgKGVzLT5zX2xhc3RfZXJyb3JfaW5vKQorCQkJcHJpbnRrKCI6IGlub2RlICV1IiwKKwkJCSAgICAgICBsZTMyX3RvX2NwdShlcy0+c19sYXN0X2Vycm9yX2lubykpOworCQlpZiAoZXMtPnNfbGFzdF9lcnJvcl9ibG9jaykKKwkJCXByaW50aygiOiBibG9jayAlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCSAgICAgICBsZTY0X3RvX2NwdShlcy0+c19sYXN0X2Vycm9yX2Jsb2NrKSk7CisJCXByaW50aygiXG4iKTsKKwl9CisJbW9kX3RpbWVyKCZzYmktPnNfZXJyX3JlcG9ydCwgamlmZmllcyArIDI0KjYwKjYwKkhaKTsgIC8qIE9uY2UgYSBkYXkgKi8KK30KKwogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIAkJCQlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQogCQkJCV9fYWNxdWlyZXMoa2VybmVsX2xvY2spCkBAIC0yNDQ4LDcgKzI1NTksNyBAQAogCXN0cnVjdCBpbm9kZSAqcm9vdDsKIAljaGFyICpjcDsKIAljb25zdCBjaGFyICpkZXNjcjsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgYmxvY2tzaXplOwogCXVuc2lnbmVkIGludCBkYl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTI0NTksMTMgKzI1NzAsMTMgQEAKIAogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWVfb3JpZzsKIAogCXNiaS0+c19ibG9ja2dyb3VwX2xvY2sgPQogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvY2tncm91cF9sb2NrKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmktPnNfYmxvY2tncm91cF9sb2NrKSB7CiAJCWtmcmVlKHNiaSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX29yaWc7CiAJfQogCXNiLT5zX2ZzX2luZm8gPSBzYmk7CiAJc2JpLT5zX21vdW50X29wdCA9IDA7CkBAIC0yNDczLDggKzI1ODQsOSBAQAogCXNiaS0+c19yZXNnaWQgPSBFWFQ0X0RFRl9SRVNHSUQ7CiAJc2JpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzID0gRVhUNF9ERUZfSU5PREVfUkVBREFIRUFEX0JMS1M7CiAJc2JpLT5zX3NiX2Jsb2NrID0gc2JfYmxvY2s7Ci0Jc2JpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCA9IHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsCi0JCQkJCQkgICAgICBzZWN0b3JzWzFdKTsKKwlpZiAoc2ItPnNfYmRldi0+YmRfcGFydCkKKwkJc2JpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCA9CisJCQlwYXJ0X3N0YXRfcmVhZChzYi0+c19iZGV2LT5iZF9wYXJ0LCBzZWN0b3JzWzFdKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIApAQCAtMjQ4Miw2ICsyNTk0LDcgQEAKIAlmb3IgKGNwID0gc2ItPnNfaWQ7IChjcCA9IHN0cmNocihjcCwgJy8nKSk7KQogCQkqY3AgPSAnISc7CiAKKwlyZXQgPSAtRUlOVkFMOwogCWJsb2Nrc2l6ZSA9IHNiX21pbl9ibG9ja3NpemUoc2IsIEVYVDRfTUlOX0JMT0NLX1NJWkUpOwogCWlmICghYmxvY2tzaXplKSB7CiAJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgInVuYWJsZSB0byBzZXQgYmxvY2tzaXplIik7CkBAIC0yNTQ2LDYgKzI2NTksMTAgQEAKIAkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfQ09OVCk7CiAJZWxzZQogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEVSUk9SU19STyk7CisJaWYgKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0JMT0NLX1ZBTElESVRZKQorCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJMT0NLX1ZBTElESVRZKTsKKwlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fRElTQ0FSRCkKKwkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBESVNDQVJEKTsKIAogCXNiaS0+c19yZXN1aWQgPSBsZTE2X3RvX2NwdShlcy0+c19kZWZfcmVzdWlkKTsKIAlzYmktPnNfcmVzZ2lkID0gbGUxNl90b19jcHUoZXMtPnNfZGVmX3Jlc2dpZCk7CkBAIC0yNTUzLDE1ICsyNjcwLDIzIEBACiAJc2JpLT5zX21pbl9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUU7CiAJc2JpLT5zX21heF9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUU7CiAKLQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOworCWlmICgoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fTk9CQVJSSUVSKSA9PSAwKQorCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCiAJLyoKIAkgKiBlbmFibGUgZGVsYXllZCBhbGxvY2F0aW9uIGJ5IGRlZmF1bHQKIAkgKiBVc2UgLW8gbm9kZWxhbGxvYyB0byB0dXJuIGl0IG9mZgogCSAqLwotCWlmICghSVNfRVhUM19TQihzYikpCisJaWYgKCFJU19FWFQzX1NCKHNiKSAmJgorCSAgICAoKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX05PREVMQUxMT0MpID09IDApKQogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFTEFMTE9DKTsKIAorCWlmICghcGFyc2Vfb3B0aW9ucygoY2hhciAqKSBzYmktPnNfZXMtPnNfbW91bnRfb3B0cywgc2IsCisJCQkgICAmam91cm5hbF9kZXZudW0sICZqb3VybmFsX2lvcHJpbywgTlVMTCwgMCkpIHsKKwkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywKKwkJCSAiZmFpbGVkIHRvIHBhcnNlIG9wdGlvbnMgaW4gc3VwZXJibG9jazogJXMiLAorCQkJIHNiaS0+c19lcy0+c19tb3VudF9vcHRzKTsKKwl9CiAJaWYgKCFwYXJzZV9vcHRpb25zKChjaGFyICopIGRhdGEsIHNiLCAmam91cm5hbF9kZXZudW0sCiAJCQkgICAmam91cm5hbF9pb3ByaW8sIE5VTEwsIDApKQogCQlnb3RvIGZhaWxlZF9tb3VudDsKQEAgLTI5MTIsMTggKzMwMzcsNyBAQAogCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJpbnN1ZmZpY2llbnQgbWVtb3J5Iik7CiAJCWdvdG8gZmFpbGVkX21vdW50X3dxOwogCX0KLQlpZiAodGVzdF9vcHQoc2IsIE5PQkgpKSB7Ci0JCWlmICghKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX1dSSVRFQkFDS19EQVRBKSkgewotCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgIklnbm9yaW5nIG5vYmggb3B0aW9uIC0gIgotCQkJCSJpdHMgc3VwcG9ydGVkIG9ubHkgd2l0aCB3cml0ZWJhY2sgbW9kZSIpOwotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOwotCQl9Ci0JCWlmICh0ZXN0X29wdChzYiwgRElPUkVBRF9OT0xPQ0spKSB7Ci0JCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiZGlvcmVhZF9ub2xvY2sgb3B0aW9uIGlzICIKLQkJCQkibm90IHN1cHBvcnRlZCB3aXRoIG5vYmggbW9kZSIpOwotCQkJZ290byBmYWlsZWRfbW91bnRfd3E7Ci0JCX0KLQl9CisKIAlFWFQ0X1NCKHNiKS0+ZGlvX3Vud3JpdHRlbl93cSA9IGNyZWF0ZV93b3JrcXVldWUoImV4dDQtZGlvLXVud3JpdHRlbiIpOwogCWlmICghRVhUNF9TQihzYiktPmRpb191bndyaXR0ZW5fd3EpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFWFQ0LWZzOiBmYWlsZWQgdG8gY3JlYXRlIERJTyB3b3JrcXVldWVcbiIpOwpAQCAtMzA0Myw3ICszMTU3LDE0IEBACiAJCWRlc2NyID0gIm91dCBqb3VybmFsIjsKIAogCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJtb3VudGVkIGZpbGVzeXN0ZW0gd2l0aCVzLiAiCi0JCSJPcHRzOiAlcyIsIGRlc2NyLCBvcmlnX2RhdGEpOworCQkgIk9wdHM6ICVzJXMlcyIsIGRlc2NyLCBzYmktPnNfZXMtPnNfbW91bnRfb3B0cywKKwkJICpzYmktPnNfZXMtPnNfbW91bnRfb3B0cyA/ICI7ICIgOiAiIiwgb3JpZ19kYXRhKTsKKworCWluaXRfdGltZXIoJnNiaS0+c19lcnJfcmVwb3J0KTsKKwlzYmktPnNfZXJyX3JlcG9ydC5mdW5jdGlvbiA9IHByaW50X2RhaWx5X2Vycm9yX2luZm87CisJc2JpLT5zX2Vycl9yZXBvcnQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzYjsKKwlpZiAoZXMtPnNfZXJyb3JfY291bnQpCisJCW1vZF90aW1lcigmc2JpLT5zX2Vycl9yZXBvcnQsIGppZmZpZXMgKyAzMDAqSFopOyAvKiA1IG1pbnV0ZXMgKi8KIAogCWxvY2tfa2VybmVsKCk7CiAJa2ZyZWUob3JpZ19kYXRhKTsKQEAgLTMwOTMsNiArMzIxNCw3IEBACiAJa2ZyZWUoc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jayk7CiAJa2ZyZWUoc2JpKTsKIAlsb2NrX2tlcm5lbCgpOworb3V0X2ZyZWVfb3JpZzoKIAlrZnJlZShvcmlnX2RhdGEpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zMTEwLDcgKzMyMzIsNyBAQAogCWpvdXJuYWwtPmpfbWluX2JhdGNoX3RpbWUgPSBzYmktPnNfbWluX2JhdGNoX3RpbWU7CiAJam91cm5hbC0+al9tYXhfYmF0Y2hfdGltZSA9IHNiaS0+c19tYXhfYmF0Y2hfdGltZTsKIAotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWlmICh0ZXN0X29wdChzYiwgQkFSUklFUikpCiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkJEMl9CQVJSSUVSOwogCWVsc2UKQEAgLTMxMTksNyArMzI0MSw3IEBACiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkJEMl9BQk9SVF9PTl9TWU5DREFUQV9FUlI7CiAJZWxzZQogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KQkQyX0FCT1JUX09OX1NZTkNEQVRBX0VSUjsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKIHN0YXRpYyBqb3VybmFsX3QgKmV4dDRfZ2V0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKQEAgLTMzMjcsOCArMzQ0OSwxNyBAQAogCiAJaWYgKCFFWFQ0X0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUikpCiAJCWVyciA9IGpiZDJfam91cm5hbF93aXBlKGpvdXJuYWwsICFyZWFsbHlfcmVhZF9vbmx5KTsKLQlpZiAoIWVycikKKwlpZiAoIWVycikgeworCQljaGFyICpzYXZlID0ga21hbGxvYyhFWFQ0X1NfRVJSX0xFTiwgR0ZQX0tFUk5FTCk7CisJCWlmIChzYXZlKQorCQkJbWVtY3B5KHNhdmUsICgoY2hhciAqKSBlcykgKworCQkJICAgICAgIEVYVDRfU19FUlJfU1RBUlQsIEVYVDRfU19FUlJfTEVOKTsKIAkJZXJyID0gamJkMl9qb3VybmFsX2xvYWQoam91cm5hbCk7CisJCWlmIChzYXZlKQorCQkJbWVtY3B5KCgoY2hhciAqKSBlcykgKyBFWFQ0X1NfRVJSX1NUQVJULAorCQkJICAgICAgIHNhdmUsIEVYVDRfU19FUlJfTEVOKTsKKwkJa2ZyZWUoc2F2ZSk7CisJfQogCiAJaWYgKGVycikgewogCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJlcnJvciBsb2FkaW5nIGpvdXJuYWwiKTsKQEAgLTMzODQsMTAgKzM1MTUsMTQgQEAKIAkgKi8KIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCiAJCWVzLT5zX3d0aW1lID0gY3B1X3RvX2xlMzIoZ2V0X3NlY29uZHMoKSk7Ci0JZXMtPnNfa2J5dGVzX3dyaXR0ZW4gPQotCQljcHVfdG9fbGU2NChFWFQ0X1NCKHNiKS0+c19rYnl0ZXNfd3JpdHRlbiArCisJaWYgKHNiLT5zX2JkZXYtPmJkX3BhcnQpCisJCWVzLT5zX2tieXRlc193cml0dGVuID0KKwkJCWNwdV90b19sZTY0KEVYVDRfU0Ioc2IpLT5zX2tieXRlc193cml0dGVuICsKIAkJCSAgICAoKHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsIHNlY3RvcnNbMV0pIC0KIAkJCSAgICAgIEVYVDRfU0Ioc2IpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCkgPj4gMSkpOworCWVsc2UKKwkJZXMtPnNfa2J5dGVzX3dyaXR0ZW4gPQorCQkJY3B1X3RvX2xlNjQoRVhUNF9TQihzYiktPnNfa2J5dGVzX3dyaXR0ZW4pOwogCWV4dDRfZnJlZV9ibG9ja3NfY291bnRfc2V0KGVzLCBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoCiAJCQkJCSZFWFQ0X1NCKHNiKS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpKTsKIAllcy0+c19mcmVlX2lub2Rlc19jb3VudCA9IGNwdV90b19sZTMyKHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgKQEAgLTM0OTEsNyArMzYyNiw3IEBACiAKIAlqb3VybmFsID0gRVhUNF9TQihzYiktPnNfam91cm5hbDsKIAlpZiAoam91cm5hbCkgewotCQl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfV1JJVEUpOworCQl2ZnNfY2hlY2tfZnJvemVuKHNiLCBTQl9GUkVFWkVfVFJBTlMpOwogCQlyZXQgPSBleHQ0X2pvdXJuYWxfZm9yY2VfY29tbWl0KGpvdXJuYWwpOwogCX0KIApAQCAtMzYxNiw3ICszNzUxLDcgQEAKIAl9CiAKIAlpZiAoc2JpLT5zX21vdW50X2ZsYWdzICYgRVhUNF9NRl9GU19BQk9SVEVEKQotCQlleHQ0X2Fib3J0KHNiLCBfX2Z1bmNfXywgIkFib3J0IGZvcmNlZCBieSB1c2VyIik7CisJCWV4dDRfYWJvcnQoc2IsICJBYm9ydCBmb3JjZWQgYnkgdXNlciIpOwogCiAJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUE9TSVhBQ0wpIHwKIAkJKHRlc3Rfb3B0KHNiLCBQT1NJWF9BQ0wpID8gTVNfUE9TSVhBQ0wgOiAwKTsKQEAgLTM5ODEsNiArNDExNiwxOCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJLyogRm9yY2UgYWxsIGRlbGF5ZWQgYWxsb2NhdGlvbiBibG9ja3MgdG8gYmUgYWxsb2NhdGVkICovCisJaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykpIHsKKwkJZG93bl9yZWFkKCZzYi0+c191bW91bnQpOworCQlzeW5jX2ZpbGVzeXN0ZW0oc2IpOworCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOworCX0KKworCXJldHVybiBkcXVvdF9xdW90YV9vZmYoc2IsIHR5cGUpOworfQorCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKICAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm9vbmUgZWxzZSBzaG91bGQgdG91Y2ggdGhlIGZpbGVzKQpAQCAtNDAzMCw3ICs0MTc3LDYgQEAKIAlleHQ0X2xibGtfdCBibGsgPSBvZmYgPj4gRVhUNF9CTE9DS19TSVpFX0JJVFMoc2IpOwogCWludCBlcnIgPSAwOwogCWludCBvZmZzZXQgPSBvZmYgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7Ci0JaW50IGpvdXJuYWxfcXVvdGEgPSBFWFQ0X1NCKHNiKS0+c19xZl9uYW1lc1t0eXBlXSAhPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGpvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKIApAQCAtNDA1NSwyNCArNDIwMSwxNiBAQAogCWJoID0gZXh0NF9icmVhZChoYW5kbGUsIGlub2RlLCBibGssIDEsICZlcnIpOwogCWlmICghYmgpCiAJCWdvdG8gb3V0OwotCWlmIChqb3VybmFsX3F1b3RhKSB7Ci0JCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwotCQlpZiAoZXJyKSB7Ci0JCQlicmVsc2UoYmgpOwotCQkJZ290byBvdXQ7Ci0JCX0KKwllcnIgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGJoKTsKKwlpZiAoZXJyKSB7CisJCWJyZWxzZShiaCk7CisJCWdvdG8gb3V0OwogCX0KIAlsb2NrX2J1ZmZlcihiaCk7CiAJbWVtY3B5KGJoLT5iX2RhdGErb2Zmc2V0LCBkYXRhLCBsZW4pOwogCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOwogCXVubG9ja19idWZmZXIoYmgpOwotCWlmIChqb3VybmFsX3F1b3RhKQotCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGJoKTsKLQllbHNlIHsKLQkJLyogQWx3YXlzIGRvIGF0IGxlYXN0IG9yZGVyZWQgd3JpdGVzIGZvciBxdW90YXMgKi8KLQkJZXJyID0gZXh0NF9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLQl9CisJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaCk7CiAJYnJlbHNlKGJoKTsKIG91dDoKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggMDQzMzgwMC4uM2E4Y2Q4ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtNDU4LDggKzQ1OCw3IEBACiAKIAlpZiAoZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBFWFQ0X1NCKHNiKS0+c19zYmgpID09IDApIHsKIAkJRVhUNF9TRVRfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIpOwotCQlzYi0+c19kaXJ0ID0gMTsKLQkJZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBFWFQ0X1NCKHNiKS0+c19zYmgpOworCQlleHQ0X2hhbmRsZV9kaXJ0eV9zdXBlcihoYW5kbGUsIHNiKTsKIAl9CiB9CiAKQEAgLTE0MTgsNyArMTQxNyw3IEBACiAJCWVhX2JkZWJ1ZyhiaCwgIm91dCBvZiBtZW1vcnkiKTsKIAkJcmV0dXJuOwogCX0KLQllcnJvciA9IG1iX2NhY2hlX2VudHJ5X2luc2VydChjZSwgYmgtPmJfYmRldiwgYmgtPmJfYmxvY2tuciwgJmhhc2gpOworCWVycm9yID0gbWJfY2FjaGVfZW50cnlfaW5zZXJ0KGNlLCBiaC0+Yl9iZGV2LCBiaC0+Yl9ibG9ja25yLCBoYXNoKTsKIAlpZiAoZXJyb3IpIHsKIAkJbWJfY2FjaGVfZW50cnlfZnJlZShjZSk7CiAJCWlmIChlcnJvciA9PSAtRUJVU1kpIHsKQEAgLTE0OTAsOCArMTQ4OSw4IEBACiAJCXJldHVybiBOVUxMOyAgLyogbmV2ZXIgc2hhcmUgKi8KIAllYV9pZGVidWcoaW5vZGUsICJsb29raW5nIGZvciBjYWNoZWQgYmxvY2tzIFsleF0iLCAoaW50KWhhc2gpOwogYWdhaW46Ci0JY2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX2ZpcnN0KGV4dDRfeGF0dHJfY2FjaGUsIDAsCi0JCQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2JkZXYsIGhhc2gpOworCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9maXJzdChleHQ0X3hhdHRyX2NhY2hlLCBpbm9kZS0+aV9zYi0+c19iZGV2LAorCQkJCSAgICAgICBoYXNoKTsKIAl3aGlsZSAoY2UpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIApAQCAtMTUxNSw3ICsxNTE0LDcgQEAKIAkJCXJldHVybiBiaDsKIAkJfQogCQlicmVsc2UoYmgpOwotCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChjZSwgMCwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaGFzaCk7CisJCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGNlLCBpbm9kZS0+aV9zYi0+c19iZGV2LCBoYXNoKTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNTkxLDkgKzE1OTAsNyBAQAogaW50IF9faW5pdAogaW5pdF9leHQ0X3hhdHRyKHZvaWQpCiB7Ci0JZXh0NF94YXR0cl9jYWNoZSA9IG1iX2NhY2hlX2NyZWF0ZSgiZXh0NF94YXR0ciIsIE5VTEwsCi0JCXNpemVvZihzdHJ1Y3QgbWJfY2FjaGVfZW50cnkpICsKLQkJc2l6ZW9mKCgoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICopIDApLT5lX2luZGV4ZXNbMF0pLCAxLCA2KTsKKwlleHQ0X3hhdHRyX2NhY2hlID0gbWJfY2FjaGVfY3JlYXRlKCJleHQ0X3hhdHRyIiwgNik7CiAJaWYgKCFleHQ0X3hhdHRyX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9mYXQuaCBiL2ZzL2ZhdC9mYXQuaAppbmRleCAyN2FjMjU3Li5kNzVhNzdmIDEwMDY0NAotLS0gYS9mcy9mYXQvZmF0LmgKKysrIGIvZnMvZmF0L2ZhdC5oCkBAIC0zMDYsNyArMzA2LDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZhdF9maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZmF0X2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBpbnQgZmF0X3NldGF0dHIoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgc3RydWN0IGlhdHRyICogYXR0cik7Ci1leHRlcm4gaW50IGZhdF9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpOwogZXh0ZXJuIHZvaWQgZmF0X3RydW5jYXRlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KTsKIGV4dGVybiBpbnQgZmF0X2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBrc3RhdCAqc3RhdCk7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA5OTBkZmFlLi43MjU3NzUyIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTM2NCwxOCArMzY0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGZhdF9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgb2Zmc2V0KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlmYXRfdHJ1bmNhdGVfYmxvY2tzKGlub2RlLCBvZmZzZXQpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCiAjZGVmaW5lIFRJTUVTX1NFVF9GTEFHUwkoQVRUUl9NVElNRV9TRVQgfCBBVFRSX0FUSU1FX1NFVCB8IEFUVFJfVElNRVNfU0VUKQogLyogdmFsaWQgZmlsZSBtb2RlIGJpdHMgKi8KICNkZWZpbmUgRkFUX1ZBTElEX01PREUJKFNfSUZSRUcgfCBTX0lGRElSIHwgU19JUldYVUdPKQpAQCAtMzg3LDIxICszNzUsNiBAQAogCXVuc2lnbmVkIGludCBpYV92YWxpZDsKIAlpbnQgZXJyb3I7CiAKLQkvKgotCSAqIEV4cGFuZCB0aGUgZmlsZS4gU2luY2UgaW5vZGVfc2V0YXR0cigpIHVwZGF0ZXMgLT5pX3NpemUKLQkgKiBiZWZvcmUgY2FsbGluZyB0aGUgLT50cnVuY2F0ZSgpLCBidXQgRkFUIG5lZWRzIHRvIGZpbGwgdGhlCi0JICogaG9sZSBiZWZvcmUgaXQuIFhYWDogdGhpcyBpcyBubyBsb25nZXIgdHJ1ZSB3aXRoIG5ldyB0cnVuY2F0ZQotCSAqIHNlcXVlbmNlLgotCSAqLwotCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewotCQlpZiAoYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpIHsKLQkJCWVycm9yID0gZmF0X2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKLQkJCWlmIChlcnJvciB8fCBhdHRyLT5pYV92YWxpZCA9PSBBVFRSX1NJWkUpCi0JCQkJZ290byBvdXQ7Ci0JCQlhdHRyLT5pYV92YWxpZCAmPSB+QVRUUl9TSVpFOwotCQl9Ci0JfQotCiAJLyogQ2hlY2sgZm9yIHNldHRpbmcgdGhlIGlub2RlIHRpbWUuICovCiAJaWFfdmFsaWQgPSBhdHRyLT5pYV92YWxpZDsKIAlpZiAoaWFfdmFsaWQgJiBUSU1FU19TRVRfRkxBR1MpIHsKQEAgLTQxNyw2ICszOTAsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBFeHBhbmQgdGhlIGZpbGUuIFNpbmNlIGlub2RlX3NldGF0dHIoKSB1cGRhdGVzIC0+aV9zaXplCisJICogYmVmb3JlIGNhbGxpbmcgdGhlIC0+dHJ1bmNhdGUoKSwgYnV0IEZBVCBuZWVkcyB0byBmaWxsIHRoZQorCSAqIGhvbGUgYmVmb3JlIGl0LiBYWFg6IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUgd2l0aCBuZXcgdHJ1bmNhdGUKKwkgKiBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwkJaWYgKGF0dHItPmlhX3NpemUgPiBpbm9kZS0+aV9zaXplKSB7CisJCQllcnJvciA9IGZhdF9jb250X2V4cGFuZChpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCQlpZiAoZXJyb3IgfHwgYXR0ci0+aWFfdmFsaWQgPT0gQVRUUl9TSVpFKQorCQkJCWdvdG8gb3V0OworCQkJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKwkJfQorCX0KKwogCWlmICgoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpICYmCiAJICAgICAoYXR0ci0+aWFfdWlkICE9IHNiaS0+b3B0aW9ucy5mc191aWQpKSB8fAogCSAgICAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpICYmCkBAIC00NDEsMTIgKzQyOSwxMSBAQAogCX0KIAogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewotCQllcnJvciA9IGZhdF9zZXRzaXplKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7CisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlmYXRfdHJ1bmNhdGVfYmxvY2tzKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAl9CiAKLQlnZW5lcmljX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCA3YmY0NWFlLi44MzAwNTgwIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAJaW50IGVycjsKIAogCSpwYWdlcCA9IE5VTEw7Ci0JZXJyID0gY29udF93cml0ZV9iZWdpbl9uZXd0cnVuYyhmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsCisJZXJyID0gY29udF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsCiAJCQkJcGFnZXAsIGZzZGF0YSwgZmF0X2dldF9ibG9jaywKIAkJCQkmTVNET1NfSShtYXBwaW5nLT5ob3N0KS0+bW11X3ByaXZhdGUpOwogCWlmIChlcnIgPCAwKQpAQCAtMjEyLDggKzIxMiw4IEBACiAJICogRkFUIG5lZWQgdG8gdXNlIHRoZSBESU9fTE9DS0lORyBmb3IgYXZvaWRpbmcgdGhlIHJhY2UKIAkgKiBjb25kaXRpb24gb2YgZmF0X2dldF9ibG9jaygpIGFuZCAtPnRydW5jYXRlKCkuCiAJICovCi0JcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX25ld3RydW5jKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKLQkJCQlpb3YsIG9mZnNldCwgbnJfc2VncywgZmF0X2dldF9ibG9jaywgTlVMTCk7CisJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKKwkJCQkgaW92LCBvZmZzZXQsIG5yX3NlZ3MsIGZhdF9nZXRfYmxvY2ssIE5VTEwpOwogCWlmIChyZXQgPCAwICYmIChydyAmIFdSSVRFKSkKIAkJZmF0X3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBvZmZzZXQgKyBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2VncykpOwogCkBAIC0yNjMsNyArMjYzLDcgQEAKICAqCQkJY2hlY2sgaWYgdGhlIGxvY2F0aW9uIGlzIHN0aWxsIHZhbGlkIGFuZCByZXRyeSBpZiBpdAogICoJCQlpc24ndC4gT3RoZXJ3aXNlIHdlIGRvIGNoYW5nZXMuCiAgKgkJNS4gU3BpbmxvY2sgaXMgdXNlZCB0byBwcm90ZWN0IGhhc2gvdW5oYXNoL2xvY2F0aW9uIGNoZWNrL2xvb2t1cAotICoJCTYuIGZhdF9jbGVhcl9pbm9kZSgpIHVuaGFzaGVzIHRoZSBGLWQtYyBlbnRyeS4KKyAqCQk2LiBmYXRfZXZpY3RfaW5vZGUoKSB1bmhhc2hlcyB0aGUgRi1kLWMgZW50cnkuCiAgKgkJNy4gbG9va3VwKCkgYW5kIHJlYWRkaXIoKSBkbyBpZ3JhYigpIGlmIHRoZXkgZmluZCBhIEYtZC1jIGVudHJ5CiAgKgkJCWFuZCBjb25zaWRlciBuZWdhdGl2ZSByZXN1bHQgYXMgY2FjaGUgbWlzcy4KICAqLwpAQCAtNDQ4LDE2ICs0NDgsMTUgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZmF0X2J1aWxkX2lub2RlKTsKIAotc3RhdGljIHZvaWQgZmF0X2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgZmF0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCWlub2RlLT5pX3NpemUgPSAwOwotCWZhdF90cnVuY2F0ZV9ibG9ja3MoaW5vZGUsIDApOwotCWNsZWFyX2lub2RlKGlub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgZmF0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17CisJaWYgKCFpbm9kZS0+aV9ubGluaykgeworCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJZmF0X3RydW5jYXRlX2Jsb2Nrcyhpbm9kZSwgMCk7CisJfQorCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJZmF0X2NhY2hlX2ludmFsX2lub2RlKGlub2RlKTsKIAlmYXRfZGV0YWNoKGlub2RlKTsKIH0KQEAgLTY3NCwxMiArNjczLDExIEBACiAJLmFsbG9jX2lub2RlCT0gZmF0X2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gZmF0X2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gZmF0X3dyaXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBmYXRfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGZhdF9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gZmF0X3B1dF9zdXBlciwKIAkud3JpdGVfc3VwZXIJPSBmYXRfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBmYXRfc3luY19mcywKIAkuc3RhdGZzCQk9IGZhdF9zdGF0ZnMsCi0JLmNsZWFyX2lub2RlCT0gZmF0X2NsZWFyX2lub2RlLAogCS5yZW1vdW50X2ZzCT0gZmF0X3JlbW91bnQsCiAKIAkuc2hvd19vcHRpb25zCT0gZmF0X3Nob3dfb3B0aW9ucywKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IDlkMTc1ZDYuLjY3NjlmZDAgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtNzY3LDExICs3NjcsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2lsbF9mYXN5bmMpOwogCi1zdGF0aWMgaW50IF9faW5pdCBmYXN5bmNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZmNudGxfaW5pdCh2b2lkKQogeworCS8qIHBsZWFzZSBhZGQgbmV3IGJpdHMgaGVyZSB0byBlbnN1cmUgYWxsb2NhdGlvbiB1bmlxdWVuZXNzICovCisJQlVJTERfQlVHX09OKDE5IC0gMSAvKiBmb3IgT19SRE9OTFkgYmVpbmcgMCAqLyAhPSBIV0VJR0hUMzIoCisJCU9fUkRPTkxZCXwgT19XUk9OTFkJfCBPX1JEV1IJfAorCQlPX0NSRUFUCQl8IE9fRVhDTAl8IE9fTk9DVFRZCXwKKwkJT19UUlVOQwkJfCBPX0FQUEVORAl8IE9fTk9OQkxPQ0sJfAorCQlfX09fU1lOQwl8IE9fRFNZTkMJfCBGQVNZTkMJfAorCQlPX0RJUkVDVAl8IE9fTEFSR0VGSUxFCXwgT19ESVJFQ1RPUlkJfAorCQlPX05PRk9MTE9XCXwgT19OT0FUSU1FCXwgT19DTE9FWEVDCXwKKwkJRk1PREVfRVhFQworCQkpKTsKKwogCWZhc3luY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJmYXN5bmNfY2FjaGUiLAogCQlzaXplb2Yoc3RydWN0IGZhc3luY19zdHJ1Y3QpLCAwLCBTTEFCX1BBTklDLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotbW9kdWxlX2luaXQoZmFzeW5jX2luaXQpCittb2R1bGVfaW5pdChmY250bF9pbml0KQpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDM0YmI3ZjcuLjBiZTM0NDcgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYworKysgYi9mcy9maWxlLmMKQEAgLTM5LDI4ICszOSwyNyBAQAogICovCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGZkdGFibGVfZGVmZXIsIGZkdGFibGVfZGVmZXJfbGlzdCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqIGFsbG9jX2ZkbWVtKHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGlubGluZSB2b2lkICphbGxvY19mZG1lbSh1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpZiAoc2l6ZSA8PSBQQUdFX1NJWkUpCi0JCXJldHVybiBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJcmV0dXJuIHZtYWxsb2Moc2l6ZSk7CisJdm9pZCAqZGF0YTsKKworCWRhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKKwlpZiAoZGF0YSAhPSBOVUxMKQorCQlyZXR1cm4gZGF0YTsKKworCXJldHVybiB2bWFsbG9jKHNpemUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZGFycihzdHJ1Y3QgZmR0YWJsZSAqZmR0KQorc3RhdGljIHZvaWQgZnJlZV9mZG1lbSh2b2lkICpwdHIpCiB7Ci0JaWYgKGZkdC0+bWF4X2ZkcyA8PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBmaWxlICopKSkKLQkJa2ZyZWUoZmR0LT5mZCk7Ci0JZWxzZQotCQl2ZnJlZShmZHQtPmZkKTsKKwlpc192bWFsbG9jX2FkZHIocHRyKSA/IHZmcmVlKHB0cikgOiBrZnJlZShwdHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9mZHNldChzdHJ1Y3QgZmR0YWJsZSAqZmR0KQorc3RhdGljIHZvaWQgX19mcmVlX2ZkdGFibGUoc3RydWN0IGZkdGFibGUgKmZkdCkKIHsKLQlpZiAoZmR0LT5tYXhfZmRzIDw9IChQQUdFX1NJWkUgKiBCSVRTX1BFUl9CWVRFIC8gMikpCi0JCWtmcmVlKGZkdC0+b3Blbl9mZHMpOwotCWVsc2UKLQkJdmZyZWUoZmR0LT5vcGVuX2Zkcyk7CisJZnJlZV9mZG1lbShmZHQtPmZkKTsKKwlmcmVlX2ZkbWVtKGZkdC0+b3Blbl9mZHMpOworCWtmcmVlKGZkdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfZmR0YWJsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTc1LDkgKzc0LDggQEAKIAlzcGluX3VubG9ja19iaCgmZi0+bG9jayk7CiAJd2hpbGUoZmR0KSB7CiAJCXN0cnVjdCBmZHRhYmxlICpuZXh0ID0gZmR0LT5uZXh0OwotCQl2ZnJlZShmZHQtPmZkKTsKLQkJZnJlZV9mZHNldChmZHQpOwotCQlrZnJlZShmZHQpOworCisJCV9fZnJlZV9mZHRhYmxlKGZkdCk7CiAJCWZkdCA9IG5leHQ7CiAJfQogfQpAQCAtOTgsNyArOTYsNyBAQAogCQkJCWNvbnRhaW5lcl9vZihmZHQsIHN0cnVjdCBmaWxlc19zdHJ1Y3QsIGZkdGFiKSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGZkdC0+bWF4X2ZkcyA8PSAoUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBmaWxlICopKSkgeworCWlmICghaXNfdm1hbGxvY19hZGRyKGZkdC0+ZmQpICYmICFpc192bWFsbG9jX2FkZHIoZmR0LT5vcGVuX2ZkcykpIHsKIAkJa2ZyZWUoZmR0LT5mZCk7CiAJCWtmcmVlKGZkdC0+b3Blbl9mZHMpOwogCQlrZnJlZShmZHQpOwpAQCAtMTc4LDEzICsxNzYsMTIgQEAKIAlmZHQtPm9wZW5fZmRzID0gKGZkX3NldCAqKWRhdGE7CiAJZGF0YSArPSBuciAvIEJJVFNfUEVSX0JZVEU7CiAJZmR0LT5jbG9zZV9vbl9leGVjID0gKGZkX3NldCAqKWRhdGE7Ci0JSU5JVF9SQ1VfSEVBRCgmZmR0LT5yY3UpOwogCWZkdC0+bmV4dCA9IE5VTEw7CiAKIAlyZXR1cm4gZmR0OwogCiBvdXRfYXJyOgotCWZyZWVfZmRhcnIoZmR0KTsKKwlmcmVlX2ZkbWVtKGZkdC0+ZmQpOwogb3V0X2ZkdDoKIAlrZnJlZShmZHQpOwogb3V0OgpAQCAtMjE0LDkgKzIxMSw3IEBACiAJICogY2FsbGVyIGFuZCBhbGxvY19mZHRhYmxlKCkuICBDaGVhcGVyIHRvIGNhdGNoIGl0IGhlcmUuLi4KIAkgKi8KIAlpZiAodW5saWtlbHkobmV3X2ZkdC0+bWF4X2ZkcyA8PSBucikpIHsKLQkJZnJlZV9mZGFycihuZXdfZmR0KTsKLQkJZnJlZV9mZHNldChuZXdfZmR0KTsKLQkJa2ZyZWUobmV3X2ZkdCk7CisJCV9fZnJlZV9mZHRhYmxlKG5ld19mZHQpOwogCQlyZXR1cm4gLUVNRklMRTsKIAl9CiAJLyoKQEAgLTIzMiw5ICsyMjcsNyBAQAogCQkJZnJlZV9mZHRhYmxlKGN1cl9mZHQpOwogCX0gZWxzZSB7CiAJCS8qIFNvbWVib2R5IGVsc2UgZXhwYW5kZWQsIHNvIHVuZG8gb3VyIGF0dGVtcHQgKi8KLQkJZnJlZV9mZGFycihuZXdfZmR0KTsKLQkJZnJlZV9mZHNldChuZXdfZmR0KTsKLQkJa2ZyZWUobmV3X2ZkdCk7CisJCV9fZnJlZV9mZHRhYmxlKG5ld19mZHQpOwogCX0KIAlyZXR1cm4gMTsKIH0KQEAgLTMxMiw3ICszMDUsNiBAQAogCW5ld19mZHQtPmNsb3NlX29uX2V4ZWMgPSAoZmRfc2V0ICopJm5ld2YtPmNsb3NlX29uX2V4ZWNfaW5pdDsKIAluZXdfZmR0LT5vcGVuX2ZkcyA9IChmZF9zZXQgKikmbmV3Zi0+b3Blbl9mZHNfaW5pdDsKIAluZXdfZmR0LT5mZCA9ICZuZXdmLT5mZF9hcnJheVswXTsKLQlJTklUX1JDVV9IRUFEKCZuZXdfZmR0LT5yY3UpOwogCW5ld19mZHQtPm5leHQgPSBOVUxMOwogCiAJc3Bpbl9sb2NrKCZvbGRmLT5maWxlX2xvY2spOwpAQCAtMzI1LDExICszMTcsOCBAQAogCXdoaWxlICh1bmxpa2VseShvcGVuX2ZpbGVzID4gbmV3X2ZkdC0+bWF4X2ZkcykpIHsKIAkJc3Bpbl91bmxvY2soJm9sZGYtPmZpbGVfbG9jayk7CiAKLQkJaWYgKG5ld19mZHQgIT0gJm5ld2YtPmZkdGFiKSB7Ci0JCQlmcmVlX2ZkYXJyKG5ld19mZHQpOwotCQkJZnJlZV9mZHNldChuZXdfZmR0KTsKLQkJCWtmcmVlKG5ld19mZHQpOwotCQl9CisJCWlmIChuZXdfZmR0ICE9ICZuZXdmLT5mZHRhYikKKwkJCV9fZnJlZV9mZHRhYmxlKG5ld19mZHQpOwogCiAJCW5ld19mZHQgPSBhbGxvY19mZHRhYmxlKG9wZW5fZmlsZXMgLSAxKTsKIAkJaWYgKCFuZXdfZmR0KSB7CkBAIC0zMzksOSArMzI4LDcgQEAKIAogCQkvKiBiZXlvbmQgc3lzY3RsX25yX29wZW47IG5vdGhpbmcgdG8gZG8gKi8KIAkJaWYgKHVubGlrZWx5KG5ld19mZHQtPm1heF9mZHMgPCBvcGVuX2ZpbGVzKSkgewotCQkJZnJlZV9mZGFycihuZXdfZmR0KTsKLQkJCWZyZWVfZmRzZXQobmV3X2ZkdCk7Ci0JCQlrZnJlZShuZXdfZmR0KTsKKwkJCV9fZnJlZV9mZHRhYmxlKG5ld19mZHQpOwogCQkJKmVycm9ycCA9IC1FTUZJTEU7CiAJCQlnb3RvIG91dF9yZWxlYXNlOwogCQl9CkBAIC00MzAsNyArNDE3LDYgQEAKIAkJLmZkCQk9ICZpbml0X2ZpbGVzLmZkX2FycmF5WzBdLAogCQkuY2xvc2Vfb25fZXhlYwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5jbG9zZV9vbl9leGVjX2luaXQsCiAJCS5vcGVuX2Zkcwk9IChmZF9zZXQgKikmaW5pdF9maWxlcy5vcGVuX2Zkc19pbml0LAotCQkucmN1CQk9IFJDVV9IRUFEX0lOSVQsCiAJfSwKIAkuZmlsZV9sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF90YXNrLmZpbGVfbG9jayksCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDVjN2QxMGUuLjJmYzNiM2MgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTIzMCw2ICsyMzAsMTUgQEAKIAltaWdodF9zbGVlcCgpOwogCiAJZnNub3RpZnlfY2xvc2UoZmlsZSk7CisKKwkvKgorCSAqIGZzbm90aWZ5X2NyZWF0ZV9ldmVudCBtYXkgaGF2ZSB0YWtlbiBvbmUgb3IgbW9yZSByZWZlcmVuY2VzIG9uIHRoaXMKKwkgKiBmaWxlLiAgSWYgaXQgZGlkIHNvIGl0IGxlZnQgb25lIHJlZmVyZW5jZSBmb3IgdXMgdG8gZHJvcCB0byBtYWtlIHN1cmUKKwkgKiBpdHMgY2FsbHMgdG8gZnB1dCBjb3VsZCBub3QgcHJlbWF0dXJlbHkgZGVzdHJveSB0aGUgZmlsZS4KKwkgKi8KKwlpZiAoYXRvbWljX2xvbmdfcmVhZCgmZmlsZS0+Zl9jb3VudCkpCisJCXJldHVybiBmcHV0KGZpbGUpOworCiAJLyoKIAkgKiBUaGUgZnVuY3Rpb24gZXZlbnRwb2xsX3JlbGVhc2UoKSBzaG91bGQgYmUgdGhlIGZpcnN0IGNhbGxlZAogCSAqIGluIHRoZSBmaWxlIGNsZWFudXAgY2hhaW4uCkBAIC0yODksMTEgKzI5OCwyMCBAQAogRVhQT1JUX1NZTUJPTChmZ2V0KTsKIAogLyoKLSAqIExpZ2h0d2VpZ2h0IGZpbGUgbG9va3VwIC0gbm8gcmVmY250IGluY3JlbWVudCBpZiBmZCB0YWJsZSBpc24ndCBzaGFyZWQuIAotICogWW91IGNhbiB1c2UgdGhpcyBvbmx5IGlmIGl0IGlzIGd1cmFudGVlZCB0aGF0IHRoZSBjdXJyZW50IHRhc2sgYWxyZWFkeSAKLSAqIGhvbGRzIGEgcmVmY250IHRvIHRoYXQgZmlsZS4gVGhhdCBjaGVjayBoYXMgdG8gYmUgZG9uZSBhdCBmZ2V0KCkgb25seQotICogYW5kIGEgZmxhZyBpcyByZXR1cm5lZCB0byBiZSBwYXNzZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnB1dF9saWdodCgpLgotICogVGhlcmUgbXVzdCBub3QgYmUgYSBjbG9uaW5nIGJldHdlZW4gYW4gZmdldF9saWdodC9mcHV0X2xpZ2h0IHBhaXIuCisgKiBMaWdodHdlaWdodCBmaWxlIGxvb2t1cCAtIG5vIHJlZmNudCBpbmNyZW1lbnQgaWYgZmQgdGFibGUgaXNuJ3Qgc2hhcmVkLgorICoKKyAqIFlvdSBjYW4gdXNlIHRoaXMgaW5zdGVhZCBvZiBmZ2V0IGlmIHlvdSBzYXRpc2Z5IGFsbCBvZiB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zOgorICogMSkgWW91IG11c3QgY2FsbCBmcHV0X2xpZ2h0IGJlZm9yZSBleGl0aW5nIHRoZSBzeXNjYWxsIGFuZCByZXR1cm5pbmcgY29udHJvbAorICogICAgdG8gdXNlcnNwYWNlIChpLmUuIHlvdSBjYW5ub3QgcmVtZW1iZXIgdGhlIHJldHVybmVkIHN0cnVjdCBmaWxlICogYWZ0ZXIKKyAqICAgIHJldHVybmluZyB0byB1c2Vyc3BhY2UpLgorICogMikgWW91IG11c3Qgbm90IGNhbGwgZmlscF9jbG9zZSBvbiB0aGUgcmV0dXJuZWQgc3RydWN0IGZpbGUgKiBpbiBiZXR3ZWVuCisgKiAgICBjYWxscyB0byBmZ2V0X2xpZ2h0IGFuZCBmcHV0X2xpZ2h0LgorICogMykgWW91IG11c3Qgbm90IGNsb25lIHRoZSBjdXJyZW50IHRhc2sgaW4gYmV0d2VlbiB0aGUgY2FsbHMgdG8gZmdldF9saWdodAorICogICAgYW5kIGZwdXRfbGlnaHQuCisgKgorICogVGhlIGZwdXRfbmVlZGVkIGZsYWcgcmV0dXJuZWQgYnkgZmdldF9saWdodCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZQorICogY29ycmVzcG9uZGluZyBmcHV0X2xpZ2h0LgogICovCiBzdHJ1Y3QgZmlsZSAqZmdldF9saWdodCh1bnNpZ25lZCBpbnQgZmQsIGludCAqZnB1dF9uZWVkZWQpCiB7CmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oIGIvZnMvZnJlZXZ4ZnMvdnhmc19leHRlcm4uaAppbmRleCA1MGFiNWVlLi44ODFhYTNkIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2V4dGVybi5oCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfZXh0ZXJuLmgKQEAgLTYzLDcgKzYzLDcgQEAKIGV4dGVybiBzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvICoJdnhmc19ibGtpZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1X2xvbmcsIGlub190KTsKIGV4dGVybiBzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvICoJdnhmc19zdGlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGlub190KTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKgkJdnhmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7Ci1leHRlcm4gdm9pZAkJCXZ4ZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQJCQl2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIAogLyogdnhmc19sb29rdXAuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zCXZ4ZnNfZGlyX2lub2RlX29wczsKZGlmZiAtLWdpdCBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYwppbmRleCAwM2E2ZWE1Li43OWQxYjRlIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKKysrIGIvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCkBAIC0zMzcsMTUgKzMzNywxNyBAQAogfQogCiAvKioKLSAqIHZ4ZnNfY2xlYXJfaW5vZGUgLSByZW1vdmUgaW5vZGUgZnJvbSBtYWluIG1lbW9yeQorICogdnhmc19ldmljdF9pbm9kZSAtIHJlbW92ZSBpbm9kZSBmcm9tIG1haW4gbWVtb3J5CiAgKiBAaXA6CQlpbm9kZSB0byBkaXNjYXJkLgogICoKICAqIERlc2NyaXB0aW9uOgotICogIHZ4ZnNfY2xlYXJfaW5vZGUoKSBpcyBjYWxsZWQgb24gdGhlIGZpbmFsIGlwdXQgYW5kIGZyZWVzIHRoZSBwcml2YXRlCisgKiAgdnhmc19ldmljdF9pbm9kZSgpIGlzIGNhbGxlZCBvbiB0aGUgZmluYWwgaXB1dCBhbmQgZnJlZXMgdGhlIHByaXZhdGUKICAqICBpbm9kZSBhcmVhLgogICovCiB2b2lkCi12eGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaXApCit2eGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaXApCiB7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlwLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaXApOwogCWttZW1fY2FjaGVfZnJlZSh2eGZzX2lub2RlX2NhY2hlcCwgaXAtPmlfcHJpdmF0ZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMgYi9mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMKaW5kZXggNTEzMmM5OS4uZGMwYzA0MSAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIGludAkJdnhmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHZ4ZnNfc3VwZXJfb3BzID0gewotCS5jbGVhcl9pbm9kZSA9CQl2eGZzX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZSA9CQl2eGZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIgPQkJdnhmc19wdXRfc3VwZXIsCiAJLnN0YXRmcyA9CQl2eGZzX3N0YXRmcywKIAkucmVtb3VudF9mcyA9CQl2eGZzX3JlbW91bnQsCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGQ1YmUxNjkuLjdkOWQwNmIgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0yNiwxNSArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2RlZmluZSBpbm9kZV90b19iZGkoaW5vZGUpCSgoaW5vZGUpLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8pCi0KLS8qCi0gKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHBkZmx1c2gsIGJ1dCB0aGlzIG9uZSBpcyBleHBvcnRlZCB0aG91Z2ggL3Byb2MuLi4KLSAqLwotaW50IG5yX3BkZmx1c2hfdGhyZWFkczsKLQogLyoKICAqIFBhc3NlZCBpbnRvIHdiX3dyaXRlYmFjaygpLCBlc3NlbnRpYWxseSBhIHN1YnNldCBvZiB3cml0ZWJhY2tfY29udHJvbAogICovCkBAIC01MCw2ICs0NCwyMSBAQAogCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOwkvKiBzZXQgaWYgdGhlIGNhbGxlciB3YWl0cyAqLwogfTsKIAorLyoKKyAqIEluY2x1ZGUgdGhlIGNyZWF0aW9uIG9mIHRoZSB0cmFjZSBwb2ludHMgYWZ0ZXIgZGVmaW5pbmcgdGhlCisgKiB3Yl93cml0ZWJhY2tfd29yayBzdHJ1Y3R1cmUgc28gdGhhdCB0aGUgZGVmaW5pdGlvbiByZW1haW5zIGxvY2FsIHRvIHRoaXMKKyAqIGZpbGUuCisgKi8KKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy93cml0ZWJhY2suaD4KKworI2RlZmluZSBpbm9kZV90b19iZGkoaW5vZGUpCSgoaW5vZGUpLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8pCisKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHBkZmx1c2gsIGJ1dCB0aGlzIG9uZSBpcyBleHBvcnRlZCB0aG91Z2ggL3Byb2MuLi4KKyAqLworaW50IG5yX3BkZmx1c2hfdGhyZWFkczsKKwogLyoqCiAgKiB3cml0ZWJhY2tfaW5fcHJvZ3Jlc3MgLSBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcyB3cml0ZWJhY2sgaW4gcHJvZ3Jlc3MKICAqIEBiZGk6IHRoZSBkZXZpY2UncyBiYWNraW5nX2Rldl9pbmZvIHN0cnVjdHVyZS4KQEAgLTU5LDI4ICs2OCwyNyBAQAogICovCiBpbnQgd3JpdGViYWNrX2luX3Byb2dyZXNzKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZiZGktPndvcmtfbGlzdCk7CisJcmV0dXJuIHRlc3RfYml0KEJESV93cml0ZWJhY2tfcnVubmluZywgJmJkaS0+c3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBiZGlfcXVldWVfd29yayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX3dvcmsgKndvcmspCiB7Ci0Jc3Bpbl9sb2NrKCZiZGktPndiX2xvY2spOworCXRyYWNlX3dyaXRlYmFja19xdWV1ZShiZGksIHdvcmspOworCisJc3Bpbl9sb2NrX2JoKCZiZGktPndiX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpc3QsICZiZGktPndvcmtfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmJkaS0+d2JfbG9jayk7Ci0KLQkvKgotCSAqIElmIHRoZSBkZWZhdWx0IHRocmVhZCBpc24ndCB0aGVyZSwgbWFrZSBzdXJlIHdlIGFkZCBpdC4gV2hlbgotCSAqIGl0IGdldHMgY3JlYXRlZCBhbmQgd2FrZXMgdXAsIHdlJ2xsIHJ1biB0aGlzIHdvcmsuCi0JICovCi0JaWYgKHVubGlrZWx5KGxpc3RfZW1wdHlfY2FyZWZ1bCgmYmRpLT53Yl9saXN0KSkpCisJaWYgKGJkaS0+d2IudGFzaykgeworCQl3YWtlX3VwX3Byb2Nlc3MoYmRpLT53Yi50YXNrKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgYmRpIHRocmVhZCBpc24ndCB0aGVyZSwgd2FrZSB1cCB0aGUgZm9ya2VyIHRocmVhZCB3aGljaAorCQkgKiB3aWxsIGNyZWF0ZSBhbmQgcnVuIGl0LgorCQkgKi8KKwkJdHJhY2Vfd3JpdGViYWNrX25vdGhyZWFkKGJkaSwgd29yayk7CiAJCXdha2VfdXBfcHJvY2VzcyhkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8ud2IudGFzayk7Ci0JZWxzZSB7Ci0JCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZiZGktPndiOwotCi0JCWlmICh3Yi0+dGFzaykKLQkJCXdha2VfdXBfcHJvY2Vzcyh3Yi0+dGFzayk7CiAJfQorCXNwaW5fdW5sb2NrX2JoKCZiZGktPndiX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTUsOCArMTAzLDEwIEBACiAJICovCiAJd29yayA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCF3b3JrKSB7Ci0JCWlmIChiZGktPndiLnRhc2spCisJCWlmIChiZGktPndiLnRhc2spIHsKKwkJCXRyYWNlX3dyaXRlYmFja19ub3dvcmsoYmRpKTsKIAkJCXdha2VfdXBfcHJvY2VzcyhiZGktPndiLnRhc2spOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTIzOSwxMCArMjQ5LDE4IEBACiAKIC8qCiAgKiBRdWV1ZSBhbGwgZXhwaXJlZCBkaXJ0eSBpbm9kZXMgZm9yIGlvLCBlbGRlc3QgZmlyc3QuCisgKiBCZWZvcmUKKyAqICAgICAgICAgbmV3bHkgZGlydGllZCAgICAgYl9kaXJ0eSAgICBiX2lvICAgIGJfbW9yZV9pbworICogICAgICAgICA9PT09PT09PT09PT09PiAgICBnZiAgICAgICAgIGVkYyAgICAgQkEKKyAqIEFmdGVyCisgKiAgICAgICAgIG5ld2x5IGRpcnRpZWQgICAgIGJfZGlydHkgICAgYl9pbyAgICBiX21vcmVfaW8KKyAqICAgICAgICAgPT09PT09PT09PT09PT4gICAgZyAgICAgICAgICBmQkFlZGMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLT4gZGVxdWV1ZSBmb3IgSU8KICAqLwogc3RhdGljIHZvaWQgcXVldWVfaW8oc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCB1bnNpZ25lZCBsb25nICpvbGRlcl90aGFuX3RoaXMpCiB7Ci0JbGlzdF9zcGxpY2VfaW5pdCgmd2ItPmJfbW9yZV9pbywgd2ItPmJfaW8ucHJldik7CisJbGlzdF9zcGxpY2VfaW5pdCgmd2ItPmJfbW9yZV9pbywgJndiLT5iX2lvKTsKIAltb3ZlX2V4cGlyZWRfaW5vZGVzKCZ3Yi0+Yl9kaXJ0eSwgJndiLT5iX2lvLCBvbGRlcl90aGFuX3RoaXMpOwogfQogCkBAIC0zNTIsNjMgKzM3MCwzNiBAQAogCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpbm9kZS0+aV9zdGF0ZSAmPSB+SV9TWU5DOwotCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlORyB8IElfQ0xFQVIpKSkgewotCQlpZiAoKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykgJiYgd2JjLT5mb3Jfa3VwZGF0ZSkgewotCQkJLyoKLQkJCSAqIE1vcmUgcGFnZXMgZ2V0IGRpcnRpZWQgYnkgYSBmYXN0IGRpcnRpZXIuCi0JCQkgKi8KLQkJCWdvdG8gc2VsZWN0X3F1ZXVlOwotCQl9IGVsc2UgaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSkgewotCQkJLyoKLQkJCSAqIEF0IGxlYXN0IFhGUyB3aWxsIHJlZGlydHkgdGhlIGlub2RlIGR1cmluZyB0aGUKLQkJCSAqIHdyaXRlYmFjayAoZGVsYWxsb2MpIGFuZCBvbiBpbyBjb21wbGV0aW9uIChpc2l6ZSkuCi0JCQkgKi8KLQkJCXJlZGlydHlfdGFpbChpbm9kZSk7Ci0JCX0gZWxzZSBpZiAobWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpIHsKKwkJaWYgKG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfRElSVFkpKSB7CiAJCQkvKgogCQkJICogV2UgZGlkbid0IHdyaXRlIGJhY2sgYWxsIHRoZSBwYWdlcy4gIG5mc193cml0ZXBhZ2VzKCkKLQkJCSAqIHNvbWV0aW1lcyBiYWxlcyBvdXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gUmVkaXJ0eQotCQkJICogdGhlIGlub2RlOyBNb3ZlIGl0IGZyb20gYl9pbyBvbnRvIGJfbW9yZV9pby9iX2RpcnR5LgorCQkJICogc29tZXRpbWVzIGJhbGVzIG91dCB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgogCQkJICovCi0JCQkvKgotCQkJICogYWtwbTogaWYgdGhlIGNhbGxlciB3YXMgdGhlIGt1cGRhdGUgZnVuY3Rpb24gd2UgcHV0Ci0JCQkgKiB0aGlzIGlub2RlIGF0IHRoZSBoZWFkIG9mIGJfZGlydHkgc28gaXQgZ2V0cyBmaXJzdAotCQkJICogY29uc2lkZXJhdGlvbi4gIE90aGVyd2lzZSwgbW92ZSBpdCB0byB0aGUgdGFpbCwgZm9yCi0JCQkgKiB0aGUgcmVhc29ucyBkZXNjcmliZWQgdGhlcmUuICBJJ20gbm90IHJlYWxseSBzdXJlCi0JCQkgKiBob3cgbXVjaCBzZW5zZSB0aGlzIG1ha2VzLiAgUHJlc3VtYWJseSBJIGhhZCBhIGdvb2QKLQkJCSAqIHJlYXNvbnMgZm9yIGRvaW5nIGl0IHRoaXMgd2F5LCBhbmQgSSdkIHJhdGhlciBub3QKLQkJCSAqIG11Y2sgd2l0aCBpdCBhdCBwcmVzZW50LgotCQkJICovCi0JCQlpZiAod2JjLT5mb3Jfa3VwZGF0ZSkgeworCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKKwkJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApIHsKIAkJCQkvKgotCQkJCSAqIEZvciB0aGUga3VwZGF0ZSBmdW5jdGlvbiB3ZSBtb3ZlIHRoZSBpbm9kZQotCQkJCSAqIHRvIGJfbW9yZV9pbyBzbyBpdCB3aWxsIGdldCBtb3JlIHdyaXRlb3V0IGFzCi0JCQkJICogc29vbiBhcyB0aGUgcXVldWUgYmVjb21lcyB1bmNvbmdlc3RlZC4KKwkJCQkgKiBzbGljZSB1c2VkIHVwOiBxdWV1ZSBmb3IgbmV4dCB0dXJuCiAJCQkJICovCi0JCQkJaW5vZGUtPmlfc3RhdGUgfD0gSV9ESVJUWV9QQUdFUzsKLXNlbGVjdF9xdWV1ZToKLQkJCQlpZiAod2JjLT5ucl90b193cml0ZSA8PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIHNsaWNlIHVzZWQgdXA6IHF1ZXVlIGZvciBuZXh0IHR1cm4KLQkJCQkJICovCi0JCQkJCXJlcXVldWVfaW8oaW5vZGUpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qCi0JCQkJCSAqIHNvbWVob3cgYmxvY2tlZDogcmV0cnkgbGF0ZXIKLQkJCQkJICovCi0JCQkJCXJlZGlydHlfdGFpbChpbm9kZSk7Ci0JCQkJfQorCQkJCXJlcXVldWVfaW8oaW5vZGUpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgotCQkJCSAqIE90aGVyd2lzZSBmdWxseSByZWRpcnR5IHRoZSBpbm9kZSBzbyB0aGF0Ci0JCQkJICogb3RoZXIgaW5vZGVzIG9uIHRoaXMgc3VwZXJibG9jayB3aWxsIGdldCBzb21lCi0JCQkJICogd3JpdGVvdXQuICBPdGhlcndpc2UgaGVhdnkgd3JpdGluZyB0byBvbmUKLQkJCQkgKiBmaWxlIHdvdWxkIGluZGVmaW5pdGVseSBzdXNwZW5kIHdyaXRlb3V0IG9mCi0JCQkJICogYWxsIHRoZSBvdGhlciBmaWxlcy4KKwkJCQkgKiBXcml0ZWJhY2sgYmxvY2tlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbgorCQkJCSAqIGNvbmdlc3Rpb24uIERlbGF5IHRoZSBpbm9kZSBmb3Igc29tZSB0aW1lIHRvCisJCQkJICogYXZvaWQgc3Bpbm5pbmcgb24gdGhlIENQVSAoMTAwJSBpb3dhaXQpCisJCQkJICogcmV0cnlpbmcgd3JpdGViYWNrIG9mIHRoZSBkaXJ0eSBwYWdlL2lub2RlCisJCQkJICogdGhhdCBjYW5ub3QgYmUgcGVyZm9ybWVkIGltbWVkaWF0ZWx5LgogCQkJCSAqLwotCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CiAJCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKIAkJCX0KKwkJfSBlbHNlIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpIHsKKwkJCS8qCisJCQkgKiBGaWxlc3lzdGVtcyBjYW4gZGlydHkgdGhlIGlub2RlIGR1cmluZyB3cml0ZWJhY2sKKwkJCSAqIG9wZXJhdGlvbnMsIHN1Y2ggYXMgZGVsYXllZCBhbGxvY2F0aW9uIGR1cmluZworCQkJICogc3VibWlzc2lvbiBvciBtZXRhZGF0YSB1cGRhdGVzIGFmdGVyIGRhdGEgSU8KKwkJCSAqIGNvbXBsZXRpb24uCisJCQkgKi8KKwkJCXJlZGlydHlfdGFpbChpbm9kZSk7CiAJCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgewogCQkJLyoKIAkJCSAqIFRoZSBpbm9kZSBpcyBjbGVhbiwgaW51c2UKQEAgLTQ5OSw3ICs0OTAsNyBAQAogCQlpZiAoaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgd2JjLT53Yl9zdGFydCkpCiAJCQlyZXR1cm4gMTsKIAotCQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HIHwgSV9DTEVBUikpOworCQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiBJX0ZSRUVJTkcpOwogCQlfX2lnZXQoaW5vZGUpOwogCQlwYWdlc19za2lwcGVkID0gd2JjLT5wYWdlc19za2lwcGVkOwogCQl3cml0ZWJhY2tfc2luZ2xlX2lub2RlKGlub2RlLCB3YmMpOwpAQCAtNTMwLDcgKzUyMSw4IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQl3YmMtPndiX3N0YXJ0ID0gamlmZmllczsgLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCisJaWYgKCF3YmMtPndiX3N0YXJ0KQorCQl3YmMtPndiX3N0YXJ0ID0gamlmZmllczsgLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlpZiAoIXdiYy0+Zm9yX2t1cGRhdGUgfHwgbGlzdF9lbXB0eSgmd2ItPmJfaW8pKQogCQlxdWV1ZV9pbyh3Yiwgd2JjLT5vbGRlcl90aGFuX3RoaXMpOwpAQCAtNTU5LDcgKzU1MSw2IEBACiB7CiAJV0FSTl9PTighcndzZW1faXNfbG9ja2VkKCZzYi0+c191bW91bnQpKTsKIAotCXdiYy0+d2Jfc3RhcnQgPSBqaWZmaWVzOyAvKiBsaXZlbG9jayBhdm9pZGFuY2UgKi8KIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWlmICghd2JjLT5mb3Jfa3VwZGF0ZSB8fCBsaXN0X2VtcHR5KCZ3Yi0+Yl9pbykpCiAJCXF1ZXVlX2lvKHdiLCB3YmMtPm9sZGVyX3RoYW5fdGhpcyk7CkBAIC01ODAsNyArNTcxLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGJhY2tncm91bmRfdGhyZXNoLCBkaXJ0eV90aHJlc2g7CiAKLQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgTlVMTCwgTlVMTCk7CisJZ2xvYmFsX2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gpOwogCiAJcmV0dXJuIChnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX0RJUlRZKSArCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgPj0gYmFja2dyb3VuZF90aHJlc2gpOwpAQCAtNjI1LDYgKzYxNiw3IEBACiAJCXdiYy5yYW5nZV9lbmQgPSBMTE9OR19NQVg7CiAJfQogCisJd2JjLndiX3N0YXJ0ID0gamlmZmllczsgLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCiAJZm9yICg7OykgewogCQkvKgogCQkgKiBTdG9wIHdyaXRlYmFjayB3aGVuIG5yX3BhZ2VzIGhhcyBiZWVuIGNvbnN1bWVkCkBAIC02NDIsMTAgKzYzNCwxNCBAQAogCQl3YmMubW9yZV9pbyA9IDA7CiAJCXdiYy5ucl90b193cml0ZSA9IE1BWF9XUklURUJBQ0tfUEFHRVM7CiAJCXdiYy5wYWdlc19za2lwcGVkID0gMDsKKworCQl0cmFjZV93YmNfd3JpdGViYWNrX3N0YXJ0KCZ3YmMsIHdiLT5iZGkpOwogCQlpZiAod29yay0+c2IpCiAJCQlfX3dyaXRlYmFja19pbm9kZXNfc2Iod29yay0+c2IsIHdiLCAmd2JjKTsKIAkJZWxzZQogCQkJd3JpdGViYWNrX2lub2Rlc193Yih3YiwgJndiYyk7CisJCXRyYWNlX3diY193cml0ZWJhY2tfd3JpdHRlbigmd2JjLCB3Yi0+YmRpKTsKKwogCQl3b3JrLT5ucl9wYWdlcyAtPSBNQVhfV1JJVEVCQUNLX1BBR0VTIC0gd2JjLm5yX3RvX3dyaXRlOwogCQl3cm90ZSArPSBNQVhfV1JJVEVCQUNLX1BBR0VTIC0gd2JjLm5yX3RvX3dyaXRlOwogCkBAIC02NzMsNiArNjY5LDcgQEAKIAkJaWYgKCFsaXN0X2VtcHR5KCZ3Yi0+Yl9tb3JlX2lvKSkgIHsKIAkJCWlub2RlID0gbGlzdF9lbnRyeSh3Yi0+Yl9tb3JlX2lvLnByZXYsCiAJCQkJCQlzdHJ1Y3QgaW5vZGUsIGlfbGlzdCk7CisJCQl0cmFjZV93YmNfd3JpdGViYWNrX3dhaXQoJndiYywgd2ItPmJkaSk7CiAJCQlpbm9kZV93YWl0X2Zvcl93cml0ZWJhY2soaW5vZGUpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKQEAgLTY4NSwxNyArNjgyLDE3IEBACiAgKiBSZXR1cm4gdGhlIG5leHQgd2Jfd3JpdGViYWNrX3dvcmsgc3RydWN0IHRoYXQgaGFzbid0IGJlZW4gcHJvY2Vzc2VkIHlldC4KICAqLwogc3RhdGljIHN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayAqCi1nZXRfbmV4dF93b3JrX2l0ZW0oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQorZ2V0X25leHRfd29ya19pdGVtKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCiB7CiAJc3RydWN0IHdiX3dyaXRlYmFja193b3JrICp3b3JrID0gTlVMTDsKIAotCXNwaW5fbG9jaygmYmRpLT53Yl9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmJkaS0+d2JfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZiZGktPndvcmtfbGlzdCkpIHsKIAkJd29yayA9IGxpc3RfZW50cnkoYmRpLT53b3JrX2xpc3QubmV4dCwKIAkJCQkgIHN0cnVjdCB3Yl93cml0ZWJhY2tfd29yaywgbGlzdCk7CiAJCWxpc3RfZGVsX2luaXQoJndvcmstPmxpc3QpOwogCX0KLQlzcGluX3VubG9jaygmYmRpLT53Yl9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYmRpLT53Yl9sb2NrKTsKIAlyZXR1cm4gd29yazsKIH0KIApAQCAtNzQzLDcgKzc0MCw4IEBACiAJc3RydWN0IHdiX3dyaXRlYmFja193b3JrICp3b3JrOwogCWxvbmcgd3JvdGUgPSAwOwogCi0Jd2hpbGUgKCh3b3JrID0gZ2V0X25leHRfd29ya19pdGVtKGJkaSwgd2IpKSAhPSBOVUxMKSB7CisJc2V0X2JpdChCRElfd3JpdGViYWNrX3J1bm5pbmcsICZ3Yi0+YmRpLT5zdGF0ZSk7CisJd2hpbGUgKCh3b3JrID0gZ2V0X25leHRfd29ya19pdGVtKGJkaSkpICE9IE5VTEwpIHsKIAkJLyoKIAkJICogT3ZlcnJpZGUgc3luYyBtb2RlLCBpbiBjYXNlIHdlIG11c3Qgd2FpdCBmb3IgY29tcGxldGlvbgogCQkgKiBiZWNhdXNlIHRoaXMgdGhyZWFkIGlzIGV4aXRpbmcgbm93LgpAQCAtNzUxLDYgKzc0OSw4IEBACiAJCWlmIChmb3JjZV93YWl0KQogCQkJd29yay0+c3luY19tb2RlID0gV0JfU1lOQ19BTEw7CiAKKwkJdHJhY2Vfd3JpdGViYWNrX2V4ZWMoYmRpLCB3b3JrKTsKKwogCQl3cm90ZSArPSB3Yl93cml0ZWJhY2sod2IsIHdvcmspOwogCiAJCS8qCkBAIC03NjcsNiArNzY3LDcgQEAKIAkgKiBDaGVjayBmb3IgcGVyaW9kaWMgd3JpdGViYWNrLCBrdXBkYXRlZCgpIHN0eWxlCiAJICovCiAJd3JvdGUgKz0gd2JfY2hlY2tfb2xkX2RhdGFfZmx1c2god2IpOworCWNsZWFyX2JpdChCRElfd3JpdGViYWNrX3J1bm5pbmcsICZ3Yi0+YmRpLT5zdGF0ZSk7CiAKIAlyZXR1cm4gd3JvdGU7CiB9CkBAIC03NzUsNDcgKzc3Niw2NiBAQAogICogSGFuZGxlIHdyaXRlYmFjayBvZiBkaXJ0eSBkYXRhIGZvciB0aGUgZGV2aWNlIGJhY2tlZCBieSB0aGlzIGJkaS4gQWxzbwogICogd2FrZXMgdXAgcGVyaW9kaWNhbGx5IGFuZCBkb2VzIGt1cGRhdGVkIHN0eWxlIGZsdXNoaW5nLgogICovCi1pbnQgYmRpX3dyaXRlYmFja190YXNrKHN0cnVjdCBiZGlfd3JpdGViYWNrICp3YikKK2ludCBiZGlfd3JpdGViYWNrX3RocmVhZCh2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3RpdmUgPSBqaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgd2FpdF9qaWZmaWVzID0gLTFVTDsKKwlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IgPSBkYXRhOworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSB3Yi0+YmRpOwogCWxvbmcgcGFnZXNfd3JpdHRlbjsKIAorCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0ZMVVNIRVIgfCBQRl9TV0FQV1JJVEU7CisJc2V0X2ZyZWV6YWJsZSgpOworCXdiLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CisKKwkvKgorCSAqIE91ciBwYXJlbnQgbWF5IHJ1biBhdCBhIGRpZmZlcmVudCBwcmlvcml0eSwganVzdCBzZXQgdXMgdG8gbm9ybWFsCisJICovCisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAwKTsKKworCXRyYWNlX3dyaXRlYmFja190aHJlYWRfc3RhcnQoYmRpKTsKKwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCS8qCisJCSAqIFJlbW92ZSBvd24gZGVsYXllZCB3YWtlLXVwIHRpbWVyLCBzaW5jZSB3ZSBhcmUgYWxyZWFkeSBhd2FrZQorCQkgKiBhbmQgd2UnbGwgdGFrZSBjYXJlIG9mIHRoZSBwcmVyaW9kaWMgd3JpdGUtYmFjay4KKwkJICovCisJCWRlbF90aW1lcigmd2ItPndha2V1cF90aW1lcik7CisKIAkJcGFnZXNfd3JpdHRlbiA9IHdiX2RvX3dyaXRlYmFjayh3YiwgMCk7CiAKLQkJaWYgKHBhZ2VzX3dyaXR0ZW4pCi0JCQlsYXN0X2FjdGl2ZSA9IGppZmZpZXM7Ci0JCWVsc2UgaWYgKHdhaXRfamlmZmllcyAhPSAtMVVMKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG1heF9pZGxlOworCQl0cmFjZV93cml0ZWJhY2tfcGFnZXNfd3JpdHRlbihwYWdlc193cml0dGVuKTsKIAotCQkJLyoKLQkJCSAqIExvbmdlc3QgcGVyaW9kIG9mIGluYWN0aXZpdHkgdGhhdCB3ZSB0b2xlcmF0ZS4gSWYgd2UKLQkJCSAqIHNlZSBkaXJ0eSBkYXRhIGFnYWluIGxhdGVyLCB0aGUgdGFzayB3aWxsIGdldAotCQkJICogcmVjcmVhdGVkIGF1dG9tYXRpY2FsbHkuCi0JCQkgKi8KLQkJCW1heF9pZGxlID0gbWF4KDVVTCAqIDYwICogSFosIHdhaXRfamlmZmllcyk7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXhfaWRsZSArIGxhc3RfYWN0aXZlKSkKLQkJCQlicmVhazsKKwkJaWYgKHBhZ2VzX3dyaXR0ZW4pCisJCQl3Yi0+bGFzdF9hY3RpdmUgPSBqaWZmaWVzOworCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmICghbGlzdF9lbXB0eSgmYmRpLT53b3JrX2xpc3QpKSB7CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwpIHsKLQkJCXdhaXRfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoZGlydHlfd3JpdGViYWNrX2ludGVydmFsICogMTApOwotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHdhaXRfamlmZmllcyk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJaWYgKGxpc3RfZW1wdHlfY2FyZWZ1bCgmd2ItPmJkaS0+d29ya19saXN0KSAmJgotCQkJICAgICFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCQkJc2NoZWR1bGUoKTsKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJaWYgKHdiX2hhc19kaXJ0eV9pbyh3YikgJiYgZGlydHlfd3JpdGViYWNrX2ludGVydmFsKQorCQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKSk7CisJCWVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGhhdmUgbm90aGluZyB0byBkbywgc28gY2FuIGdvIHNsZWVwIHdpdGhvdXQgYW55CisJCQkgKiB0aW1lb3V0IGFuZCBzYXZlIHBvd2VyLiBXaGVuIGEgd29yayBpcyBxdWV1ZWQgb3IKKwkJCSAqIHNvbWV0aGluZyBpcyBtYWRlIGRpcnR5IC0gd2Ugd2lsbCBiZSB3b2tlbiB1cC4KKwkJCSAqLworCQkJc2NoZWR1bGUoKTsKIAkJfQogCiAJCXRyeV90b19mcmVlemUoKTsKIAl9CiAKKwkvKiBGbHVzaCBhbnkgd29yayB0aGF0IHJhY2VkIHdpdGggdXMgZXhpdGluZyAqLworCWlmICghbGlzdF9lbXB0eSgmYmRpLT53b3JrX2xpc3QpKQorCQl3Yl9kb193cml0ZWJhY2sod2IsIDEpOworCisJdHJhY2Vfd3JpdGViYWNrX3RocmVhZF9zdG9wKGJkaSk7CiAJcmV0dXJuIDA7CiB9CiAKKwogLyoKICAqIFN0YXJ0IHdyaXRlYmFjayBvZiBgbnJfcGFnZXMnIHBhZ2VzLiAgSWYgYG5yX3BhZ2VzJyBpcyB6ZXJvLCB3cml0ZSBiYWNrCiAgKiB0aGUgd2hvbGUgd29ybGQuCkBAIC04OTAsNiArOTEwLDggQEAKIHZvaWQgX19tYXJrX2lub2RlX2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IE5VTEw7CisJYm9vbCB3YWtldXBfYmRpID0gZmFsc2U7CiAKIAkvKgogCSAqIERvbid0IGRvIHRoaXMgZm9yIElfRElSVFlfUEFHRVMgLSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkKQEAgLTkzNSw3ICs5NTcsNyBAQAogCQkJaWYgKGhsaXN0X3VuaGFzaGVkKCZpbm9kZS0+aV9oYXNoKSkKIAkJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVIpKQorCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0ZSRUVJTkcpCiAJCQlnb3RvIG91dDsKIAogCQkvKgpAQCAtOTQzLDIyICs5NjUsMzEgQEAKIAkJICogcmVwb3NpdGlvbiBpdCAodGhhdCB3b3VsZCBicmVhayBiX2RpcnR5IHRpbWUtb3JkZXJpbmcpLgogCQkgKi8KIAkJaWYgKCF3YXNfZGlydHkpIHsKLQkJCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZpbm9kZV90b19iZGkoaW5vZGUpLT53YjsKLQkJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSB3Yi0+YmRpOworCQkJYmRpID0gaW5vZGVfdG9fYmRpKGlub2RlKTsKIAotCQkJaWYgKGJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkgJiYKLQkJCSAgICAhdGVzdF9iaXQoQkRJX3JlZ2lzdGVyZWQsICZiZGktPnN0YXRlKSkgewotCQkJCVdBUk5fT04oMSk7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJiZGktJXMgbm90IHJlZ2lzdGVyZWRcbiIsCi0JCQkJCQkJCWJkaS0+bmFtZSk7CisJCQlpZiAoYmRpX2NhcF93cml0ZWJhY2tfZGlydHkoYmRpKSkgeworCQkJCVdBUk4oIXRlc3RfYml0KEJESV9yZWdpc3RlcmVkLCAmYmRpLT5zdGF0ZSksCisJCQkJICAgICAiYmRpLSVzIG5vdCByZWdpc3RlcmVkXG4iLCBiZGktPm5hbWUpOworCisJCQkJLyoKKwkJCQkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXJ0eSBpbm9kZSBmb3IgdGhpcworCQkJCSAqIGJkaSwgd2UgaGF2ZSB0byB3YWtlLXVwIHRoZSBjb3JyZXNwb25kaW5nCisJCQkJICogYmRpIHRocmVhZCB0byBtYWtlIHN1cmUgYmFja2dyb3VuZAorCQkJCSAqIHdyaXRlLWJhY2sgaGFwcGVucyBsYXRlci4KKwkJCQkgKi8KKwkJCQlpZiAoIXdiX2hhc19kaXJ0eV9pbygmYmRpLT53YikpCisJCQkJCXdha2V1cF9iZGkgPSB0cnVlOwogCQkJfQogCiAJCQlpbm9kZS0+ZGlydGllZF93aGVuID0gamlmZmllczsKLQkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJndiLT5iX2RpcnR5KTsKKwkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJmJkaS0+d2IuYl9kaXJ0eSk7CiAJCX0KIAl9CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOworCisJaWYgKHdha2V1cF9iZGkpCisJCWJkaV93YWtldXBfdGhyZWFkX2RlbGF5ZWQoYmRpKTsKIH0KIEVYUE9SVF9TWU1CT0woX19tYXJrX2lub2RlX2RpcnR5KTsKIApAQCAtMTAwMSw3ICsxMDMyLDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKLQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFfElfTkVXKSkKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCiAJCQljb250aW51ZTsKIAkJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAJCWlmIChtYXBwaW5nLT5ucnBhZ2VzID09IDApCmRpZmYgLS1naXQgYS9mcy9mc19zdHJ1Y3QuYyBiL2ZzL2ZzX3N0cnVjdC5jCmluZGV4IGVlZTA1OTAuLjFlZTQwZWIgMTAwNjQ0Ci0tLSBhL2ZzL2ZzX3N0cnVjdC5jCisrKyBiL2ZzL2ZzX3N0cnVjdC5jCkBAIC0xMDYsMTIgKzEwNiw3IEBACiAJCWZzLT5pbl9leGVjID0gMDsKIAkJcndsb2NrX2luaXQoJmZzLT5sb2NrKTsKIAkJZnMtPnVtYXNrID0gb2xkLT51bWFzazsKLQkJcmVhZF9sb2NrKCZvbGQtPmxvY2spOwotCQlmcy0+cm9vdCA9IG9sZC0+cm9vdDsKLQkJcGF0aF9nZXQoJm9sZC0+cm9vdCk7Ci0JCWZzLT5wd2QgPSBvbGQtPnB3ZDsKLQkJcGF0aF9nZXQoJm9sZC0+cHdkKTsKLQkJcmVhZF91bmxvY2soJm9sZC0+bG9jayk7CisJCWdldF9mc19yb290X2FuZF9wd2Qob2xkLCAmZnMtPnJvb3QsICZmcy0+cHdkKTsKIAl9CiAJcmV0dXJuIGZzOwogfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9LY29uZmlnIGIvZnMvZnNjYWNoZS9LY29uZmlnCmluZGV4IGNjOTRiYjkuLjNmNmRmYTkgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvS2NvbmZpZworKysgYi9mcy9mc2NhY2hlL0tjb25maWcKQEAgLTEsNyArMSw2IEBACiAKIGNvbmZpZyBGU0NBQ0hFCiAJdHJpc3RhdGUgIkdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXIiCi0Jc2VsZWN0IFNMT1dfV09SSwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlCiAJICB1c2VkIGJ5IHZhcmlvdXMgbmV0d29yayBhbmQgb3RoZXIgZmlsZXN5c3RlbXMgdG8gY2FjaGUgZGF0YSBsb2NhbGx5LgpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9pbnRlcm5hbC5oIGIvZnMvZnNjYWNoZS9pbnRlcm5hbC5oCmluZGV4IGVkZDc0MzQuLjZhMDI2NDQgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvaW50ZXJuYWwuaAorKysgYi9mcy9mc2NhY2hlL2ludGVybmFsLmgKQEAgLTgyLDYgKzgyLDE0IEBACiBleHRlcm4gdW5zaWduZWQgZnNjYWNoZV9kZWZlcl9jcmVhdGU7CiBleHRlcm4gdW5zaWduZWQgZnNjYWNoZV9kZWJ1ZzsKIGV4dGVybiBzdHJ1Y3Qga29iamVjdCAqZnNjYWNoZV9yb290OworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpmc2NhY2hlX29iamVjdF93cTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZnNjYWNoZV9vcF93cTsKK0RFQ0xBUkVfUEVSX0NQVSh3YWl0X3F1ZXVlX2hlYWRfdCwgZnNjYWNoZV9vYmplY3RfY29uZ193YWl0KTsKKworc3RhdGljIGlubGluZSBib29sIGZzY2FjaGVfb2JqZWN0X2Nvbmdlc3RlZCh2b2lkKQoreworCXJldHVybiB3b3JrcXVldWVfY29uZ2VzdGVkKFdPUktfQ1BVX1VOQk9VTkQsIGZzY2FjaGVfb2JqZWN0X3dxKTsKK30KIAogZXh0ZXJuIGludCBmc2NhY2hlX3dhaXRfYml0KHZvaWQgKik7CiBleHRlcm4gaW50IGZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSh2b2lkICopOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9tYWluLmMgYi9mcy9mc2NhY2hlL21haW4uYwppbmRleCBhZGQ2YmRiLi5mOWQ4NTY3IDEwMDY0NAotLS0gYS9mcy9mc2NhY2hlL21haW4uYworKysgYi9mcy9mc2NhY2hlL21haW4uYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiRlMgQ2FjaGUgTWFuYWdlciIpOwpAQCAtNDAsMjIgKzQxLDEwNSBAQAogCQkgIkZTLUNhY2hlIGRlYnVnZ2luZyBtYXNrIik7CiAKIHN0cnVjdCBrb2JqZWN0ICpmc2NhY2hlX3Jvb3Q7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZnNjYWNoZV9vYmplY3Rfd3E7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZnNjYWNoZV9vcF93cTsKKworREVGSU5FX1BFUl9DUFUod2FpdF9xdWV1ZV9oZWFkX3QsIGZzY2FjaGVfb2JqZWN0X2Nvbmdfd2FpdCk7CisKKy8qIHRoZXNlIHZhbHVlcyBzZXJ2ZSBhcyBsb3dlciBib3VuZHMsIHdpbGwgYmUgYWRqdXN0ZWQgaW4gZnNjYWNoZV9pbml0KCkgKi8KK3N0YXRpYyB1bnNpZ25lZCBmc2NhY2hlX29iamVjdF9tYXhfYWN0aXZlID0gNDsKK3N0YXRpYyB1bnNpZ25lZCBmc2NhY2hlX29wX21heF9hY3RpdmUgPSAyOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpmc2NhY2hlX3N5c2N0bF9oZWFkZXI7CisKK3N0YXRpYyBpbnQgZnNjYWNoZV9tYXhfYWN0aXZlX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICoqd3FwID0gdGFibGUtPmV4dHJhMTsKKwl1bnNpZ25lZCBpbnQgKmRhdGFwID0gdGFibGUtPmRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWlmIChyZXQgPT0gMCkKKwkJd29ya3F1ZXVlX3NldF9tYXhfYWN0aXZlKCp3cXAsICpkYXRhcCk7CisJcmV0dXJuIHJldDsKK30KKworY3RsX3RhYmxlIGZzY2FjaGVfc3lzY3Rsc1tdID0geworCXsKKwkJLnByb2NuYW1lCT0gIm9iamVjdF9tYXhfYWN0aXZlIiwKKwkJLmRhdGEJCT0gJmZzY2FjaGVfb2JqZWN0X21heF9hY3RpdmUsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IGZzY2FjaGVfbWF4X2FjdGl2ZV9zeXNjdGwsCisJCS5leHRyYTEJCT0gJmZzY2FjaGVfb2JqZWN0X3dxLAorCX0sCisJeworCQkucHJvY25hbWUJPSAib3BlcmF0aW9uX21heF9hY3RpdmUiLAorCQkuZGF0YQkJPSAmZnNjYWNoZV9vcF9tYXhfYWN0aXZlLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBmc2NhY2hlX21heF9hY3RpdmVfc3lzY3RsLAorCQkuZXh0cmExCQk9ICZmc2NhY2hlX29wX3dxLAorCX0sCisJe30KK307CisKK2N0bF90YWJsZSBmc2NhY2hlX3N5c2N0bHNfcm9vdFtdID0geworCXsKKwkJLnByb2NuYW1lCT0gImZzY2FjaGUiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZnNjYWNoZV9zeXNjdGxzLAorCX0sCisJe30KK307CisjZW5kaWYKIAogLyoKICAqIGluaXRpYWxpc2UgdGhlIGZzIGNhY2hpbmcgbW9kdWxlCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGZzY2FjaGVfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCBucl9jcHVzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCWludCByZXQ7CiAKLQlyZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3Jfc2xvd193b3JrOworCWZzY2FjaGVfb2JqZWN0X21heF9hY3RpdmUgPQorCQljbGFtcF92YWwobnJfY3B1cywKKwkJCSAgZnNjYWNoZV9vYmplY3RfbWF4X2FjdGl2ZSwgV1FfVU5CT1VORF9NQVhfQUNUSVZFKTsKKworCXJldCA9IC1FTk9NRU07CisJZnNjYWNoZV9vYmplY3Rfd3EgPSBhbGxvY193b3JrcXVldWUoImZzY2FjaGVfb2JqZWN0IiwgV1FfVU5CT1VORCwKKwkJCQkJICAgIGZzY2FjaGVfb2JqZWN0X21heF9hY3RpdmUpOworCWlmICghZnNjYWNoZV9vYmplY3Rfd3EpCisJCWdvdG8gZXJyb3Jfb2JqZWN0X3dxOworCisJZnNjYWNoZV9vcF9tYXhfYWN0aXZlID0KKwkJY2xhbXBfdmFsKGZzY2FjaGVfb2JqZWN0X21heF9hY3RpdmUgLyAyLAorCQkJICBmc2NhY2hlX29wX21heF9hY3RpdmUsIFdRX1VOQk9VTkRfTUFYX0FDVElWRSk7CisKKwlyZXQgPSAtRU5PTUVNOworCWZzY2FjaGVfb3Bfd3EgPSBhbGxvY193b3JrcXVldWUoImZzY2FjaGVfb3BlcmF0aW9uIiwgV1FfVU5CT1VORCwKKwkJCQkJZnNjYWNoZV9vcF9tYXhfYWN0aXZlKTsKKwlpZiAoIWZzY2FjaGVfb3Bfd3EpCisJCWdvdG8gZXJyb3Jfb3Bfd3E7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwZXJfY3B1KGZzY2FjaGVfb2JqZWN0X2Nvbmdfd2FpdCwgY3B1KSk7CiAKIAlyZXQgPSBmc2NhY2hlX3Byb2NfaW5pdCgpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX3Byb2M7CiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJcmV0ID0gLUVOT01FTTsKKwlmc2NhY2hlX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoZnNjYWNoZV9zeXNjdGxzX3Jvb3QpOworCWlmICghZnNjYWNoZV9zeXNjdGxfaGVhZGVyKQorCQlnb3RvIGVycm9yX3N5c2N0bDsKKyNlbmRpZgorCiAJZnNjYWNoZV9jb29raWVfamFyID0ga21lbV9jYWNoZV9jcmVhdGUoImZzY2FjaGVfY29va2llX2phciIsCiAJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGZzY2FjaGVfY29va2llKSwKIAkJCQkJICAgICAgIDAsCkBAIC03OCwxMCArMTYyLDE2IEBACiBlcnJvcl9rb2JqOgogCWttZW1fY2FjaGVfZGVzdHJveShmc2NhY2hlX2Nvb2tpZV9qYXIpOwogZXJyb3JfY29va2llX2phcjoKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoZnNjYWNoZV9zeXNjdGxfaGVhZGVyKTsKK2Vycm9yX3N5c2N0bDoKKyNlbmRpZgogCWZzY2FjaGVfcHJvY19jbGVhbnVwKCk7CiBlcnJvcl9wcm9jOgotCXNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoVEhJU19NT0RVTEUpOwotZXJyb3Jfc2xvd193b3JrOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGZzY2FjaGVfb3Bfd3EpOworZXJyb3Jfb3Bfd3E6CisJZGVzdHJveV93b3JrcXVldWUoZnNjYWNoZV9vYmplY3Rfd3EpOworZXJyb3Jfb2JqZWN0X3dxOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk2LDggKzE4NiwxMiBAQAogCiAJa29iamVjdF9wdXQoZnNjYWNoZV9yb290KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZnNjYWNoZV9jb29raWVfamFyKTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoZnNjYWNoZV9zeXNjdGxfaGVhZGVyKTsKKyNlbmRpZgogCWZzY2FjaGVfcHJvY19jbGVhbnVwKCk7Ci0Jc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CisJZGVzdHJveV93b3JrcXVldWUoZnNjYWNoZV9vcF93cSk7CisJZGVzdHJveV93b3JrcXVldWUoZnNjYWNoZV9vYmplY3Rfd3EpOwogCXByaW50ayhLRVJOX05PVElDRSAiRlMtQ2FjaGU6IFVubG9hZGVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9vYmplY3QtbGlzdC5jIGIvZnMvZnNjYWNoZS9vYmplY3QtbGlzdC5jCmluZGV4IDRhOGViMzEuLmViZTI5YzUgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvb2JqZWN0LWxpc3QuYworKysgYi9mcy9mc2NhY2hlL29iamVjdC1saXN0LmMKQEAgLTM0LDggKzM0LDggQEAKICNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1JFQURTCTB4MDAwMDAyMDAJLyogc2hvdyBvYmplY3RzIHdpdGhvdXQgYWN0aXZlIHJlYWRzICovCiAjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfRVZFTlRTCTB4MDAwMDA0MDAJLyogc2hvdyBvYmplY3RzIHdpdGggZXZlbnRzICovCiAjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9FVkVOVFMJMHgwMDAwMDgwMAkvKiBzaG93IG9iamVjdHMgd2l0aG91dCBubyBldmVudHMgKi8KLSNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19XT1JLCTB4MDAwMDEwMDAJLyogc2hvdyBvYmplY3RzIHdpdGggc2xvdyB3b3JrICovCi0jZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfTk9XT1JLCTB4MDAwMDIwMDAJLyogc2hvdyBvYmplY3RzIHdpdGhvdXQgc2xvdyB3b3JrICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKTElTVF9DT05GSUdfV09SSwkweDAwMDAxMDAwCS8qIHNob3cgb2JqZWN0cyB3aXRoIHdvcmsgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpMSVNUX0NPTkZJR19OT1dPUksJMHgwMDAwMjAwMAkvKiBzaG93IG9iamVjdHMgd2l0aG91dCB3b3JrICovCiAKIAl1OAkJYnVmWzUxMl07CS8qIGtleSBhbmQgYXV4IGRhdGEgYnVmZmVyICovCiB9OwpAQCAtMjMxLDEyICsyMzEsMTEgQEAKIAkJICAgICAgIFJFQURTLCBOT1JFQURTKTsKIAkJRklMVEVSKG9iai0+ZXZlbnRzICYgb2JqLT5ldmVudF9tYXNrLAogCQkgICAgICAgRVZFTlRTLCBOT0VWRU5UUyk7Ci0JCUZJTFRFUihvYmotPndvcmsuZmxhZ3MgJiB+KDFVTCA8PCBTTE9XX1dPUktfVkVSWV9TTE9XKSwKLQkJICAgICAgIFdPUkssIE5PV09SSyk7CisJCUZJTFRFUih3b3JrX2J1c3koJm9iai0+d29yayksIFdPUkssIE5PV09SSyk7CiAJfQogCiAJc2VxX3ByaW50ZihtLAotCQkgICAiJTh4ICU4eCAlcyAlNXUgJTN1ICUzdSAlM3UgJTJ1ICU1dSAlMmx4ICUybHggJTFseCAlMWx4IHwgIiwKKwkJICAgIiU4eCAlOHggJXMgJTV1ICUzdSAlM3UgJTN1ICUydSAlNXUgJTJseCAlMmx4ICUxbHggJTF4IHwgIiwKIAkJICAgb2JqLT5kZWJ1Z19pZCwKIAkJICAgb2JqLT5wYXJlbnQgPyBvYmotPnBhcmVudC0+ZGVidWdfaWQgOiAtMSwKIAkJICAgZnNjYWNoZV9vYmplY3Rfc3RhdGVzX3Nob3J0W29iai0+c3RhdGVdLApAQCAtMjQ5LDcgKzI0OCw3IEBACiAJCSAgIG9iai0+ZXZlbnRfbWFzayAmIEZTQ0FDSEVfT0JKRUNUX0VWRU5UU19NQVNLLAogCQkgICBvYmotPmV2ZW50cywKIAkJICAgb2JqLT5mbGFncywKLQkJICAgb2JqLT53b3JrLmZsYWdzKTsKKwkJICAgd29ya19idXN5KCZvYmotPndvcmspKTsKIAogCW5vX2Nvb2tpZSA9IHRydWU7CiAJa2V5bGVuID0gYXV4bGVuID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvb2JqZWN0LmMgYi9mcy9mc2NhY2hlL29iamVjdC5jCmluZGV4IDBiNTg5YTkuLmI2Yjg5N2MgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvb2JqZWN0LmMKKysrIGIvZnMvZnNjYWNoZS9vYmplY3QuYwpAQCAtMTQsNyArMTQsNiBAQAogCiAjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ09PS0lFCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBjb25zdCBjaGFyICpmc2NhY2hlX29iamVjdF9zdGF0ZXNbRlNDQUNIRV9PQkpFQ1RfX05TVEFURVNdID0gewpAQCAtNTAsMTIgKzQ5LDggQEAKIAlbRlNDQUNIRV9PQkpFQ1RfREVBRF0JCT0gIkRFQUQiLAogfTsKIAotc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqKTsKLXN0YXRpYyBpbnQgIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKik7Ci1zdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZXhlY3V0ZShzdHJ1Y3Qgc2xvd193b3JrICopOwotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLXN0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19kZXNjKHN0cnVjdCBzbG93X3dvcmsgKiwgc3RydWN0IHNlcV9maWxlICopOwotI2VuZGlmCitzdGF0aWMgaW50ICBmc2NhY2hlX2dldF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworc3RhdGljIHZvaWQgZnNjYWNoZV9wdXRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKIHN0YXRpYyB2b2lkIGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOwogc3RhdGljIHZvaWQgZnNjYWNoZV9sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKIHN0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X2F2YWlsYWJsZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CkBAIC02NCwxNyArNTksNiBAQAogc3RhdGljIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOwogc3RhdGljIHZvaWQgZnNjYWNoZV9kZXF1ZXVlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CiAKLWNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5nZXRfcmVmCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2dldF9yZWYsCi0JLnB1dF9yZWYJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZiwKLQkuZXhlY3V0ZQk9IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19leGVjdXRlLAotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLQkuZGVzYwkJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZGVzYywKLSNlbmRpZgotfTsKLUVYUE9SVF9TWU1CT0woZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyk7Ci0KIC8qCiAgKiB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgcGFyZW50IHdoZW4gYW4gb3AgY29tcGxldGVzIHRoYXQgd2UgaGFkIG91dHN0YW5kaW5nCiAgKiB1cG9uIGl0CkBAIC0zNDUsNyArMzI5LDcgQEAKIC8qCiAgKiBleGVjdXRlIGFuIG9iamVjdAogICovCi1zdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZXhlY3V0ZShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQordm9pZCBmc2NhY2hlX29iamVjdF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CkBAIC0zNTksMjMgKzM0Myw5IEBACiAJaWYgKG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKQogCQlmc2NhY2hlX2VucXVldWVfb2JqZWN0KG9iamVjdCk7CiAJY2xlYXJfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJZnNjYWNoZV9wdXRfb2JqZWN0KG9iamVjdCk7CiB9Ci0KLS8qCi0gKiBkZXNjcmliZSBhbiBvYmplY3QgZm9yIHNsb3ctd29yayBkZWJ1Z2dpbmcKLSAqLwotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLXN0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19kZXNjKHN0cnVjdCBzbG93X3dvcmsgKndvcmssCi0JCQkJCSAgc3RydWN0IHNlcV9maWxlICptKQotewotCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7Ci0KLQlzZXFfcHJpbnRmKG0sICJGU0M6IE9CSiV4OiAlcyIsCi0JCSAgIG9iamVjdC0+ZGVidWdfaWQsCi0JCSAgIGZzY2FjaGVfb2JqZWN0X3N0YXRlc19zaG9ydFtvYmplY3QtPnN0YXRlXSk7Ci19Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9vYmplY3Rfd29ya19mdW5jKTsKIAogLyoKICAqIGluaXRpYWxpc2UgYW4gb2JqZWN0CkBAIC0zOTMsNyArMzYzLDYgQEAKIAlfZW50ZXIoIiIpOwogCUFTU0VSVChvYmplY3QtPmNvb2tpZSAhPSBOVUxMKTsKIAlBU1NFUlQob2JqZWN0LT5jb29raWUtPnBhcmVudCAhPSBOVUxMKTsKLQlBU1NFUlQobGlzdF9lbXB0eSgmb2JqZWN0LT53b3JrLmxpbmspKTsKIAogCWlmIChvYmplY3QtPmV2ZW50cyAmICgoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikgfAogCQkJICAgICAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfApAQCAtNjcxLDEwICs2NDAsOCBAQAogCQlvYmplY3QtPnBhcmVudCA9IE5VTEw7CiAJfQogCi0JLyogdGhpcyBqdXN0IHNoaWZ0cyB0aGUgb2JqZWN0IHJlbGVhc2UgdG8gdGhlIHNsb3cgd29yayBwcm9jZXNzb3IgKi8KLQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7Ci0Jb2JqZWN0LT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7Ci0JZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CisJLyogdGhpcyBqdXN0IHNoaWZ0cyB0aGUgb2JqZWN0IHJlbGVhc2UgdG8gdGhlIHdvcmsgcHJvY2Vzc29yICovCisJZnNjYWNoZV9wdXRfb2JqZWN0KG9iamVjdCk7CiAKIAlfbGVhdmUoIiIpOwogfQpAQCAtNzU4LDEyICs3MjUsMTAgQEAKIH0KIAogLyoKLSAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZ2V0IGEgcmVmIG9uIGFuIG9iamVjdAorICogZ2V0IGEgcmVmIG9uIGFuIG9iamVjdAogICovCi1zdGF0aWMgaW50IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCitzdGF0aWMgaW50IGZzY2FjaGVfZ2V0X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKIHsKLQlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOwogCWludCByZXQ7CiAKIAlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfZ3JhYl9vYmplY3QpOwpAQCAtNzczLDEzICs3MzgsMTAgQEAKIH0KIAogLyoKLSAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZGlzY2FyZCBhIHJlZiBvbiBhIHdvcmsgaXRlbQorICogZGlzY2FyZCBhIHJlZiBvbiBhIHdvcmsgaXRlbQogICovCi1zdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQorc3RhdGljIHZvaWQgZnNjYWNoZV9wdXRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQogewotCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7Ci0KIAlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CiAJb2JqZWN0LT5jYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CiAJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CkBAIC03OTIsOSArNzU0LDQ5IEBACiB7CiAJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CiAKLQlzbG93X3dvcmtfZW5xdWV1ZSgmb2JqZWN0LT53b3JrKTsKKwlpZiAoZnNjYWNoZV9nZXRfb2JqZWN0KG9iamVjdCkgPj0gMCkgeworCQl3YWl0X3F1ZXVlX2hlYWRfdCAqY29uZ193cSA9CisJCQkmZ2V0X2NwdV92YXIoZnNjYWNoZV9vYmplY3RfY29uZ193YWl0KTsKKworCQlpZiAocXVldWVfd29yayhmc2NhY2hlX29iamVjdF93cSwgJm9iamVjdC0+d29yaykpIHsKKwkJCWlmIChmc2NhY2hlX29iamVjdF9jb25nZXN0ZWQoKSkKKwkJCQl3YWtlX3VwKGNvbmdfd3EpOworCQl9IGVsc2UKKwkJCWZzY2FjaGVfcHV0X29iamVjdChvYmplY3QpOworCisJCXB1dF9jcHVfdmFyKGZzY2FjaGVfb2JqZWN0X2Nvbmdfd2FpdCk7CisJfQogfQogCisvKioKKyAqIGZzY2FjaGVfb2JqZWN0X3NsZWVwX3RpbGxfY29uZ2VzdGVkIC0gU2xlZXAgdW50aWwgb2JqZWN0IHdxIGlzIGNvbmdlc3RlZAorICogQHRpbW91dHA6IFNjaGVkdWxlciBzbGVlcCB0aW1lb3V0CisgKgorICogQWxsb3cgYW4gb2JqZWN0IGhhbmRsZXIgdG8gc2xlZXAgdW50aWwgdGhlIG9iamVjdCB3b3JrcXVldWUgaXMgY29uZ2VzdGVkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBzZXQgdXAgYSB3YWtlIHVwIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHRoaXMgYW5kIG11c3QgaGF2ZSBzZXQKKyAqIHRoZSBhcHByb3ByaWF0ZSBzbGVlcCBtb2RlIChzdWNoIGFzIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSBhbmQgdGVzdGVkIGl0cyBvd24KKyAqIGNvbmRpdGlvbiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFzIG5vIHRlc3QgaXMgbWFkZSBoZXJlLgorICoKKyAqICV0cnVlIGlzIHJldHVybmVkIGlmIHRoZSBvYmplY3Qgd3EgaXMgY29uZ2VzdGVkLCAlZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIGZzY2FjaGVfb2JqZWN0X3NsZWVwX3RpbGxfY29uZ2VzdGVkKHNpZ25lZCBsb25nICp0aW1lb3V0cCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqY29uZ193cSA9ICZfX2dldF9jcHVfdmFyKGZzY2FjaGVfb2JqZWN0X2Nvbmdfd2FpdCk7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlpZiAoZnNjYWNoZV9vYmplY3RfY29uZ2VzdGVkKCkpCisJCXJldHVybiB0cnVlOworCisJYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKGNvbmdfd3EsICZ3YWl0KTsKKwlpZiAoIWZzY2FjaGVfb2JqZWN0X2Nvbmdlc3RlZCgpKQorCQkqdGltZW91dHAgPSBzY2hlZHVsZV90aW1lb3V0KCp0aW1lb3V0cCk7CisJZmluaXNoX3dhaXQoY29uZ193cSwgJndhaXQpOworCisJcmV0dXJuIGZzY2FjaGVfb2JqZWN0X2Nvbmdlc3RlZCgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNjYWNoZV9vYmplY3Rfc2xlZXBfdGlsbF9jb25nZXN0ZWQpOworCiAvKgogICogZW5xdWV1ZSB0aGUgZGVwZW5kZW50cyBvZiBhbiBvYmplY3QgZm9yIG1ldGFkYXRhLXR5cGUgcHJvY2Vzc2luZwogICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgb2JqZWN0J3MgbG9jawpAQCAtODE5LDkgKzgyMSw3IEBACiAKIAkJLyogc29ydCBvbnRvIGFwcHJvcHJpYXRlIGxpc3RzICovCiAJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3QoZGVwKTsKLQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29wX3B1dF9vYmplY3QpOwotCQlkZXAtPmNhY2hlLT5vcHMtPnB1dF9vYmplY3QoZGVwKTsKLQkJZnNjYWNoZV9zdGF0X2QoJmZzY2FjaGVfbl9jb3BfcHV0X29iamVjdCk7CisJCWZzY2FjaGVfcHV0X29iamVjdChkZXApOwogCiAJCWlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBlbmRlbnRzKSkKIAkJCWNvbmRfcmVzY2hlZF9sb2NrKCZvYmplY3QtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9vcGVyYXRpb24uYyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKaW5kZXggZjE3Y2VjYS4uYjlmMzRlYSAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9vcGVyYXRpb24uYworKysgYi9mcy9mc2NhY2hlL29wZXJhdGlvbi5jCkBAIC00MiwxNiArNDIsMTIgQEAKIAogCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX2VucXVldWUpOwogCXN3aXRjaCAob3AtPmZsYWdzICYgRlNDQUNIRV9PUF9UWVBFKSB7Ci0JY2FzZSBGU0NBQ0hFX09QX0ZBU1Q6Ci0JCV9kZWJ1ZygicXVldWUgZmFzdCIpOworCWNhc2UgRlNDQUNIRV9PUF9BU1lOQzoKKwkJX2RlYnVnKCJxdWV1ZSBhc3luYyIpOwogCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOwotCQlpZiAoIXNjaGVkdWxlX3dvcmsoJm9wLT5mYXN0X3dvcmspKQorCQlpZiAoIXF1ZXVlX3dvcmsoZnNjYWNoZV9vcF93cSwgJm9wLT53b3JrKSkKIAkJCWZzY2FjaGVfcHV0X29wZXJhdGlvbihvcCk7CiAJCWJyZWFrOwotCWNhc2UgRlNDQUNIRV9PUF9TTE9XOgotCQlfZGVidWcoInF1ZXVlIHNsb3ciKTsKLQkJc2xvd193b3JrX2VucXVldWUoJm9wLT5zbG93X3dvcmspOwotCQlicmVhazsKIAljYXNlIEZTQ0FDSEVfT1BfTVlUSFJFQUQ6CiAJCV9kZWJ1ZygicXVldWUgZm9yIGNhbGxlcidzIGF0dGVudGlvbiIpOwogCQlicmVhazsKQEAgLTQ1NSwzNiArNDUxLDEzIEBACiB9CiAKIC8qCi0gKiBhbGxvdyB0aGUgc2xvdyB3b3JrIGl0ZW0gcHJvY2Vzc29yIHRvIGdldCBhIHJlZiBvbiBhbiBvcGVyYXRpb24KKyAqIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHVzaW5nIGZzX29wX3dxIHRvIHByb3ZpZGUgcHJvY2Vzc2luZyBjb250ZXh0IC0KKyAqIHRoZSBjYWxsZXIgaG9sZHMgYSByZWYgdG8gdGhpcyBvYmplY3QsIHNvIHdlIGRvbid0IG5lZWQgdG8gaG9sZCBvbmUKICAqLwotc3RhdGljIGludCBmc2NhY2hlX29wX2dldF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3ZvaWQgZnNjYWNoZV9vcF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBzbG93X3dvcmspOwotCi0JYXRvbWljX2luYygmb3AtPnVzYWdlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZGlzY2FyZCBhIHJlZiBvbiBhbiBvcGVyYXRpb24KLSAqLwotc3RhdGljIHZvaWQgZnNjYWNoZV9vcF9wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0Jc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHNsb3dfd29yayk7Ci0KLQlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOwotfQotCi0vKgotICogZXhlY3V0ZSBhbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNsb3cgdGhyZWFkIHBvb2wgdG8gcHJvdmlkZSBwcm9jZXNzaW5nIGNvbnRleHQKLSAqIC0gdGhlIGNhbGxlciBob2xkcyBhIHJlZiB0byB0aGlzIG9iamVjdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBob2xkIG9uZQotICovCi1zdGF0aWMgdm9pZCBmc2NhY2hlX29wX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgc2xvd193b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgd29yayk7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAogCV9lbnRlcigie09CSiV4IE9QJXgsJWR9IiwKQEAgLTQ5NCwzMSArNDY3LDcgQEAKIAlzdGFydCA9IGppZmZpZXM7CiAJb3AtPnByb2Nlc3NvcihvcCk7CiAJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb3BzX2hpc3RvZ3JhbSwgc3RhcnQpOworCWZzY2FjaGVfcHV0X29wZXJhdGlvbihvcCk7CiAKIAlfbGVhdmUoIiIpOwogfQotCi0vKgotICogZGVzY3JpYmUgYW4gb3BlcmF0aW9uIGZvciBzbG93LXdvcmsgZGVidWdnaW5nCi0gKi8KLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCi1zdGF0aWMgdm9pZCBmc2NhY2hlX29wX2Rlc2Moc3RydWN0IHNsb3dfd29yayAqd29yaywgc3RydWN0IHNlcV9maWxlICptKQotewotCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBzbG93X3dvcmspOwotCi0Jc2VxX3ByaW50ZihtLCAiRlNDOiBPQkoleCBPUCV4OiAlcy8lcyBmbD0lbHgiLAotCQkgICBvcC0+b2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkLAotCQkgICBvcC0+bmFtZSwgb3AtPnN0YXRlLCBvcC0+ZmxhZ3MpOwotfQotI2VuZGlmCi0KLWNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGZzY2FjaGVfb3Bfc2xvd193b3JrX29wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmdldF9yZWYJPSBmc2NhY2hlX29wX2dldF9yZWYsCi0JLnB1dF9yZWYJPSBmc2NhY2hlX29wX3B1dF9yZWYsCi0JLmV4ZWN1dGUJPSBmc2NhY2hlX29wX2V4ZWN1dGUsCi0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotCS5kZXNjCQk9IGZzY2FjaGVfb3BfZGVzYywKLSNlbmRpZgotfTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvcGFnZS5jIGIvZnMvZnNjYWNoZS9wYWdlLmMKaW5kZXggNzIzYjg4OS4uNDFjNDQxYyAxMDA2NDQKLS0tIGEvZnMvZnNjYWNoZS9wYWdlLmMKKysrIGIvZnMvZnNjYWNoZS9wYWdlLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBwYWdlX2J1c3k6CiAJLyogd2UgbWlnaHQgd2FudCB0byB3YWl0IGhlcmUsIGJ1dCB0aGF0IGNvdWxkIGRlYWRsb2NrIHRoZSBhbGxvY2F0b3IgYXMKLQkgKiB0aGUgc2xvdy13b3JrIHRocmVhZHMgd3JpdGluZyB0byB0aGUgY2FjaGUgbWF5IGFsbCBlbmQgdXAgc2xlZXBpbmcKKwkgKiB0aGUgd29yayB0aHJlYWRzIHdyaXRpbmcgdG8gdGhlIGNhY2hlIG1heSBhbGwgZW5kIHVwIHNsZWVwaW5nCiAJICogb24gbWVtb3J5IGFsbG9jYXRpb24gKi8KIAlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV92bXNjYW5fYnVzeSk7CiAJcmV0dXJuIGZhbHNlOwpAQCAtMTg4LDkgKzE4OCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQob3AsIE5VTEwpOwotCWZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyhvcCwgZnNjYWNoZV9hdHRyX2NoYW5nZWRfb3ApOwotCW9wLT5mbGFncyA9IEZTQ0FDSEVfT1BfU0xPVyB8ICgxIDw8IEZTQ0FDSEVfT1BfRVhDTFVTSVZFKTsKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0KG9wLCBmc2NhY2hlX2F0dHJfY2hhbmdlZF9vcCwgTlVMTCk7CisJb3AtPmZsYWdzID0gRlNDQUNIRV9PUF9BU1lOQyB8ICgxIDw8IEZTQ0FDSEVfT1BfRVhDTFVTSVZFKTsKIAlmc2NhY2hlX3NldF9vcF9uYW1lKG9wLCAiQXR0ciIpOwogCiAJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOwpAQCAtMjE4LDI0ICsyMTcsNiBAQAogRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfYXR0cl9jaGFuZ2VkKTsKIAogLyoKLSAqIGhhbmRsZSBzZWNvbmRhcnkgZXhlY3V0aW9uIGdpdmVuIHRvIGEgcmV0cmlldmFsIG9wIG9uIGJlaGFsZiBvZiB0aGUKLSAqIGNhY2hlCi0gKi8KLXN0YXRpYyB2b2lkIGZzY2FjaGVfcmV0cmlldmFsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcC5mYXN0X3dvcmspOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0KLQlfZW50ZXIoIntPUCV4fSIsIG9wLT5vcC5kZWJ1Z19pZCk7Ci0KLQlzdGFydCA9IGppZmZpZXM7Ci0Jb3AtPm9wLnByb2Nlc3Nvcigmb3AtPm9wKTsKLQlmc2NhY2hlX2hpc3QoZnNjYWNoZV9vcHNfaGlzdG9ncmFtLCBzdGFydCk7Ci0JZnNjYWNoZV9wdXRfb3BlcmF0aW9uKCZvcC0+b3ApOwotfQotCi0vKgogICogcmVsZWFzZSBhIHJldHJpZXZhbCBvcCByZWZlcmVuY2UKICAqLwogc3RhdGljIHZvaWQgZnNjYWNoZV9yZWxlYXNlX3JldHJpZXZhbF9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKQEAgLTI2OSwxMyArMjUwLDEyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV9yZWxlYXNlX3JldHJpZXZhbF9vcCk7CisJZnNjYWNoZV9vcGVyYXRpb25faW5pdCgmb3AtPm9wLCBOVUxMLCBmc2NhY2hlX3JlbGVhc2VfcmV0cmlldmFsX29wKTsKIAlvcC0+b3AuZmxhZ3MJPSBGU0NBQ0hFX09QX01ZVEhSRUFEIHwgKDEgPDwgRlNDQUNIRV9PUF9XQUlUSU5HKTsKIAlvcC0+bWFwcGluZwk9IG1hcHBpbmc7CiAJb3AtPmVuZF9pb19mdW5jCT0gZW5kX2lvX2Z1bmM7CiAJb3AtPmNvbnRleHQJPSBjb250ZXh0OwogCW9wLT5zdGFydF90aW1lCT0gamlmZmllczsKLQlJTklUX1dPUksoJm9wLT5vcC5mYXN0X3dvcmssIGZzY2FjaGVfcmV0cmlldmFsX3dvcmspOwogCUlOSVRfTElTVF9IRUFEKCZvcC0+dG9fZG8pOwogCWZzY2FjaGVfc2V0X29wX25hbWUoJm9wLT5vcCwgIlJldHIiKTsKIAlyZXR1cm4gb3A7CkBAIC03OTUsOSArNzc1LDkgQEAKIAlpZiAoIW9wKQogCQlnb3RvIG5vbWVtOwogCi0JZnNjYWNoZV9vcGVyYXRpb25faW5pdCgmb3AtPm9wLCBmc2NhY2hlX3JlbGVhc2Vfd3JpdGVfb3ApOwotCWZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdygmb3AtPm9wLCBmc2NhY2hlX3dyaXRlX29wKTsKLQlvcC0+b3AuZmxhZ3MgPSBGU0NBQ0hFX09QX1NMT1cgfCAoMSA8PCBGU0NBQ0hFX09QX1dBSVRJTkcpOworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV93cml0ZV9vcCwKKwkJCSAgICAgICBmc2NhY2hlX3JlbGVhc2Vfd3JpdGVfb3ApOworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfQVNZTkMgfCAoMSA8PCBGU0NBQ0hFX09QX1dBSVRJTkcpOwogCWZzY2FjaGVfc2V0X29wX25hbWUoJm9wLT5vcCwgIldyaXRlMSIpOwogCiAJcmV0ID0gcmFkaXhfdHJlZV9wcmVsb2FkKGdmcCAmIH5fX0dGUF9ISUdITUVNKTsKQEAgLTg1Miw3ICs4MzIsNyBAQAogCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3JlX29wcyk7CiAJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzX29rKTsKIAotCS8qIHRoZSBzbG93IHdvcmsgcXVldWUgbm93IGNhcnJpZXMgaXRzIG93biByZWYgb24gdGhlIG9iamVjdCAqLworCS8qIHRoZSB3b3JrIHF1ZXVlIG5vdyBjYXJyaWVzIGl0cyBvd24gcmVmIG9uIHRoZSBvYmplY3QgKi8KIAlmc2NhY2hlX3B1dF9vcGVyYXRpb24oJm9wLT5vcCk7CiAJX2xlYXZlKCIgPSAwIik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCA5NDI0Nzk2Li42OWFkMDUzIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTIzOSw3ICsyMzksNiBAQAogCiBzdGF0aWMgdm9pZCBxdWV1ZV9yZXF1ZXN0KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKLQlyZXEtPmluLmgudW5pcXVlID0gZnVzZV9nZXRfdW5pcXVlKGZjKTsKIAlyZXEtPmluLmgubGVuID0gc2l6ZW9mKHN0cnVjdCBmdXNlX2luX2hlYWRlcikgKwogCQlsZW5fYXJncyhyZXEtPmluLm51bWFyZ3MsIChzdHJ1Y3QgZnVzZV9hcmcgKikgcmVxLT5pbi5hcmdzKTsKIAlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZmYy0+cGVuZGluZyk7CkBAIC0yNjEsNiArMjYwLDcgQEAKIAkJcmVxID0gbGlzdF9lbnRyeShmYy0+YmdfcXVldWUubmV4dCwgc3RydWN0IGZ1c2VfcmVxLCBsaXN0KTsKIAkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CiAJCWZjLT5hY3RpdmVfYmFja2dyb3VuZCsrOworCQlyZXEtPmluLmgudW5pcXVlID0gZnVzZV9nZXRfdW5pcXVlKGZjKTsKIAkJcXVldWVfcmVxdWVzdChmYywgcmVxKTsKIAl9CiB9CkBAIC0zOTgsNiArMzk4LDcgQEAKIAllbHNlIGlmIChmYy0+Y29ubl9lcnJvcikKIAkJcmVxLT5vdXQuaC5lcnJvciA9IC1FQ09OTlJFRlVTRUQ7CiAJZWxzZSB7CisJCXJlcS0+aW4uaC51bmlxdWUgPSBmdXNlX2dldF91bmlxdWUoZmMpOwogCQlxdWV1ZV9yZXF1ZXN0KGZjLCByZXEpOwogCQkvKiBhY3F1aXJlIGV4dHJhIHJlZmVyZW5jZSwgc2luY2UgcmVxdWVzdCBpcyBzdGlsbCBuZWVkZWQKIAkJICAgYWZ0ZXIgcmVxdWVzdF9lbmQoKSAqLwpAQCAtNDUwLDYgKzQ1MSwyMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnVzZV9yZXF1ZXN0X3NlbmRfYmFja2dyb3VuZCk7CiAKK3N0YXRpYyBpbnQgZnVzZV9yZXF1ZXN0X3NlbmRfbm90aWZ5X3JlcGx5KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLAorCQkJCQkgIHN0cnVjdCBmdXNlX3JlcSAqcmVxLCB1NjQgdW5pcXVlKQoreworCWludCBlcnIgPSAtRU5PREVWOworCisJcmVxLT5pc3JlcGx5ID0gMDsKKwlyZXEtPmluLmgudW5pcXVlID0gdW5pcXVlOworCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWlmIChmYy0+Y29ubmVjdGVkKSB7CisJCXF1ZXVlX3JlcXVlc3QoZmMsIHJlcSk7CisJCWVyciA9IDA7CisJfQorCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCiAvKgogICogQ2FsbGVkIHVuZGVyIGZjLT5sb2NrCiAgKgpAQCAtNTM1LDEzICs1NTMsMTMgQEAKIAkJaWYgKCFjcy0+d3JpdGUpIHsKIAkJCWJ1Zi0+b3BzLT51bm1hcChjcy0+cGlwZSwgYnVmLCBjcy0+bWFwYWRkcik7CiAJCX0gZWxzZSB7Ci0JCQlrdW5tYXBfYXRvbWljKGNzLT5tYXBhZGRyLCBLTV9VU0VSMCk7CisJCQlrdW5tYXAoYnVmLT5wYWdlKTsKIAkJCWJ1Zi0+bGVuID0gUEFHRV9TSVpFIC0gY3MtPmxlbjsKIAkJfQogCQljcy0+Y3VycmJ1ZiA9IE5VTEw7CiAJCWNzLT5tYXBhZGRyID0gTlVMTDsKIAl9IGVsc2UgaWYgKGNzLT5tYXBhZGRyKSB7Ci0JCWt1bm1hcF9hdG9taWMoY3MtPm1hcGFkZHIsIEtNX1VTRVIwKTsKKwkJa3VubWFwKGNzLT5wZyk7CiAJCWlmIChjcy0+d3JpdGUpIHsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKGNzLT5wZyk7CiAJCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKGNzLT5wZyk7CkBAIC01NzIsNyArNTkwLDcgQEAKIAogCQkJQlVHX09OKCFjcy0+bnJfc2Vncyk7CiAJCQljcy0+Y3VycmJ1ZiA9IGJ1ZjsKLQkJCWNzLT5tYXBhZGRyID0gYnVmLT5vcHMtPm1hcChjcy0+cGlwZSwgYnVmLCAxKTsKKwkJCWNzLT5tYXBhZGRyID0gYnVmLT5vcHMtPm1hcChjcy0+cGlwZSwgYnVmLCAwKTsKIAkJCWNzLT5sZW4gPSBidWYtPmxlbjsKIAkJCWNzLT5idWYgPSBjcy0+bWFwYWRkciArIGJ1Zi0+b2Zmc2V0OwogCQkJY3MtPnBpcGVidWZzKys7CkBAIC01OTIsNyArNjEwLDcgQEAKIAkJCWJ1Zi0+bGVuID0gMDsKIAogCQkJY3MtPmN1cnJidWYgPSBidWY7Ci0JCQljcy0+bWFwYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJCWNzLT5tYXBhZGRyID0ga21hcChwYWdlKTsKIAkJCWNzLT5idWYgPSBjcy0+bWFwYWRkcjsKIAkJCWNzLT5sZW4gPSBQQUdFX1NJWkU7CiAJCQljcy0+cGlwZWJ1ZnMrKzsKQEAgLTYxMSw3ICs2MjksNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJQlVHX09OKGVyciAhPSAxKTsKIAkJb2Zmc2V0ID0gY3MtPmFkZHIgJSBQQUdFX1NJWkU7Ci0JCWNzLT5tYXBhZGRyID0ga21hcF9hdG9taWMoY3MtPnBnLCBLTV9VU0VSMCk7CisJCWNzLT5tYXBhZGRyID0ga21hcChjcy0+cGcpOwogCQljcy0+YnVmID0gY3MtPm1hcGFkZHIgKyBvZmZzZXQ7CiAJCWNzLT5sZW4gPSBtaW4oUEFHRV9TSVpFIC0gb2Zmc2V0LCBjcy0+c2VnbGVuKTsKIAkJY3MtPnNlZ2xlbiAtPSBjcy0+bGVuOwpAQCAtMTIzMSw2ICsxMjQ5LDE5OSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZnVzZV9ub3RpZnlfc3RvcmUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHVuc2lnbmVkIGludCBzaXplLAorCQkJICAgICBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcykKK3sKKwlzdHJ1Y3QgZnVzZV9ub3RpZnlfc3RvcmVfb3V0IG91dGFyZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXU2NCBub2RlaWQ7CisJaW50IGVycjsKKwlwZ29mZl90IGluZGV4OworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IG51bTsKKwlsb2ZmX3QgZmlsZV9zaXplOworCWxvZmZfdCBlbmQ7CisKKwllcnIgPSAtRUlOVkFMOworCWlmIChzaXplIDwgc2l6ZW9mKG91dGFyZykpCisJCWdvdG8gb3V0X2ZpbmlzaDsKKworCWVyciA9IGZ1c2VfY29weV9vbmUoY3MsICZvdXRhcmcsIHNpemVvZihvdXRhcmcpKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9maW5pc2g7CisKKwllcnIgPSAtRUlOVkFMOworCWlmIChzaXplIC0gc2l6ZW9mKG91dGFyZykgIT0gb3V0YXJnLnNpemUpCisJCWdvdG8gb3V0X2ZpbmlzaDsKKworCW5vZGVpZCA9IG91dGFyZy5ub2RlaWQ7CisKKwlkb3duX3JlYWQoJmZjLT5raWxsc2IpOworCisJZXJyID0gLUVOT0VOVDsKKwlpZiAoIWZjLT5zYikKKwkJZ290byBvdXRfdXBfa2lsbHNiOworCisJaW5vZGUgPSBpbG9va3VwNShmYy0+c2IsIG5vZGVpZCwgZnVzZV9pbm9kZV9lcSwgJm5vZGVpZCk7CisJaWYgKCFpbm9kZSkKKwkJZ290byBvdXRfdXBfa2lsbHNiOworCisJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJaW5kZXggPSBvdXRhcmcub2Zmc2V0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJb2Zmc2V0ID0gb3V0YXJnLm9mZnNldCAmIH5QQUdFX0NBQ0hFX01BU0s7CisJZmlsZV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWVuZCA9IG91dGFyZy5vZmZzZXQgKyBvdXRhcmcuc2l6ZTsKKwlpZiAoZW5kID4gZmlsZV9zaXplKSB7CisJCWZpbGVfc2l6ZSA9IGVuZDsKKwkJZnVzZV93cml0ZV91cGRhdGVfc2l6ZShpbm9kZSwgZmlsZV9zaXplKTsKKwl9CisKKwludW0gPSBvdXRhcmcuc2l6ZTsKKwl3aGlsZSAobnVtKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQl1bnNpZ25lZCBpbnQgdGhpc19udW07CisKKwkJZXJyID0gLUVOT01FTTsKKwkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgaW5kZXgsCisJCQkJCSAgIG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykpOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIG91dF9pcHV0OworCisJCXRoaXNfbnVtID0gbWluX3QodW5zaWduZWQsIG51bSwgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0KTsKKwkJZXJyID0gZnVzZV9jb3B5X3BhZ2UoY3MsICZwYWdlLCBvZmZzZXQsIHRoaXNfbnVtLCAwKTsKKwkJaWYgKCFlcnIgJiYgb2Zmc2V0ID09IDAgJiYgKG51bSAhPSAwIHx8IGZpbGVfc2l6ZSA9PSBlbmQpKQorCQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9pcHV0OworCisJCW51bSAtPSB0aGlzX251bTsKKwkJb2Zmc2V0ID0gMDsKKwkJaW5kZXgrKzsKKwl9CisKKwllcnIgPSAwOworCitvdXRfaXB1dDoKKwlpcHV0KGlub2RlKTsKK291dF91cF9raWxsc2I6CisJdXBfcmVhZCgmZmMtPmtpbGxzYik7CitvdXRfZmluaXNoOgorCWZ1c2VfY29weV9maW5pc2goY3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGZ1c2VfcmV0cmlldmVfZW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZXEtPm51bV9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcmVxLT5wYWdlc1tpXTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KK30KKworc3RhdGljIGludCBmdXNlX3JldHJpZXZlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJIHN0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9vdXQgKm91dGFyZykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKKwlwZ29mZl90IGluZGV4OworCWxvZmZfdCBmaWxlX3NpemU7CisJdW5zaWduZWQgaW50IG51bTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXNpemVfdCB0b3RhbF9sZW47CisKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCWlmIChJU19FUlIocmVxKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVxKTsKKworCW9mZnNldCA9IG91dGFyZy0+b2Zmc2V0ICYgflBBR0VfQ0FDSEVfTUFTSzsKKworCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX05PVElGWV9SRVBMWTsKKwlyZXEtPmluLmgubm9kZWlkID0gb3V0YXJnLT5ub2RlaWQ7CisJcmVxLT5pbi5udW1hcmdzID0gMjsKKwlyZXEtPmluLmFyZ3BhZ2VzID0gMTsKKwlyZXEtPnBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0OworCXJlcS0+ZW5kID0gZnVzZV9yZXRyaWV2ZV9lbmQ7CisKKwlpbmRleCA9IG91dGFyZy0+b2Zmc2V0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJZmlsZV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCW51bSA9IG91dGFyZy0+c2l6ZTsKKwlpZiAob3V0YXJnLT5vZmZzZXQgPiBmaWxlX3NpemUpCisJCW51bSA9IDA7CisJZWxzZSBpZiAob3V0YXJnLT5vZmZzZXQgKyBudW0gPiBmaWxlX3NpemUpCisJCW51bSA9IGZpbGVfc2l6ZSAtIG91dGFyZy0+b2Zmc2V0OworCisJd2hpbGUgKG51bSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJdW5zaWduZWQgaW50IHRoaXNfbnVtOworCisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwkJaWYgKCFwYWdlKQorCQkJYnJlYWs7CisKKwkJdGhpc19udW0gPSBtaW5fdCh1bnNpZ25lZCwgbnVtLCBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQpOworCQlyZXEtPnBhZ2VzW3JlcS0+bnVtX3BhZ2VzXSA9IHBhZ2U7CisJCXJlcS0+bnVtX3BhZ2VzKys7CisKKwkJbnVtIC09IHRoaXNfbnVtOworCQl0b3RhbF9sZW4gKz0gdGhpc19udW07CisJfQorCXJlcS0+bWlzYy5yZXRyaWV2ZV9pbi5vZmZzZXQgPSBvdXRhcmctPm9mZnNldDsKKwlyZXEtPm1pc2MucmV0cmlldmVfaW4uc2l6ZSA9IHRvdGFsX2xlbjsKKwlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihyZXEtPm1pc2MucmV0cmlldmVfaW4pOworCXJlcS0+aW4uYXJnc1swXS52YWx1ZSA9ICZyZXEtPm1pc2MucmV0cmlldmVfaW47CisJcmVxLT5pbi5hcmdzWzFdLnNpemUgPSB0b3RhbF9sZW47CisKKwllcnIgPSBmdXNlX3JlcXVlc3Rfc2VuZF9ub3RpZnlfcmVwbHkoZmMsIHJlcSwgb3V0YXJnLT5ub3RpZnlfdW5pcXVlKTsKKwlpZiAoZXJyKQorCQlmdXNlX3JldHJpZXZlX2VuZChmYywgcmVxKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZnVzZV9ub3RpZnlfcmV0cmlldmUoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHVuc2lnbmVkIGludCBzaXplLAorCQkJCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzKQoreworCXN0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9vdXQgb3V0YXJnOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVycjsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKHNpemUgIT0gc2l6ZW9mKG91dGFyZykpCisJCWdvdG8gY29weV9maW5pc2g7CisKKwllcnIgPSBmdXNlX2NvcHlfb25lKGNzLCAmb3V0YXJnLCBzaXplb2Yob3V0YXJnKSk7CisJaWYgKGVycikKKwkJZ290byBjb3B5X2ZpbmlzaDsKKworCWZ1c2VfY29weV9maW5pc2goY3MpOworCisJZG93bl9yZWFkKCZmYy0+a2lsbHNiKTsKKwllcnIgPSAtRU5PRU5UOworCWlmIChmYy0+c2IpIHsKKwkJdTY0IG5vZGVpZCA9IG91dGFyZy5ub2RlaWQ7CisKKwkJaW5vZGUgPSBpbG9va3VwNShmYy0+c2IsIG5vZGVpZCwgZnVzZV9pbm9kZV9lcSwgJm5vZGVpZCk7CisJCWlmIChpbm9kZSkgeworCQkJZXJyID0gZnVzZV9yZXRyaWV2ZShmYywgaW5vZGUsICZvdXRhcmcpOworCQkJaXB1dChpbm9kZSk7CisJCX0KKwl9CisJdXBfcmVhZCgmZmMtPmtpbGxzYik7CisKKwlyZXR1cm4gZXJyOworCitjb3B5X2ZpbmlzaDoKKwlmdXNlX2NvcHlfZmluaXNoKGNzKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGZ1c2Vfbm90aWZ5KHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBlbnVtIGZ1c2Vfbm90aWZ5X2NvZGUgY29kZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlICpjcykKIHsKQEAgLTEyNDQsNiArMTQ1NSwxMiBAQAogCWNhc2UgRlVTRV9OT1RJRllfSU5WQUxfRU5UUlk6CiAJCXJldHVybiBmdXNlX25vdGlmeV9pbnZhbF9lbnRyeShmYywgc2l6ZSwgY3MpOwogCisJY2FzZSBGVVNFX05PVElGWV9TVE9SRToKKwkJcmV0dXJuIGZ1c2Vfbm90aWZ5X3N0b3JlKGZjLCBzaXplLCBjcyk7CisKKwljYXNlIEZVU0VfTk9USUZZX1JFVFJJRVZFOgorCQlyZXR1cm4gZnVzZV9ub3RpZnlfcmV0cmlldmUoZmMsIHNpemUsIGNzKTsKKwogCWRlZmF1bHQ6CiAJCWZ1c2VfY29weV9maW5pc2goY3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IDQzMWJlMDcuLmM5NjI3YzkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMTI3MCwyMSArMTI3MCwxOCBAQAogCWlmICghZnVzZV9hbGxvd190YXNrKGZjLCBjdXJyZW50KSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlpZiAoZmMtPmZsYWdzICYgRlVTRV9ERUZBVUxUX1BFUk1JU1NJT05TKSB7Ci0JCWVyciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoIShmYy0+ZmxhZ3MgJiBGVVNFX0RFRkFVTFRfUEVSTUlTU0lPTlMpKQorCQlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX0ZPUkNFOworCisJZXJyID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfT1BFTikgJiYgZmMtPmF0b21pY19vX3RydW5jKQogCQlyZXR1cm4gMDsKIAotCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewotCQllcnIgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQogCQlpc190cnVuY2F0ZSA9IHRydWU7Ci0JfQogCiAJcmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKIAlpZiAoSVNfRVJSKHJlcSkpCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGFkYTBhZGUuLjE0N2MxZjcgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC03MDYsNyArNzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV93cml0ZV91cGRhdGVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zKQordm9pZCBmdXNlX3dyaXRlX3VwZGF0ZV9zaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCA4ZjMwOWYwLi41N2Q0YTNhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTI3Miw2ICsyNzIsNyBAQAogCQkJc3RydWN0IGZ1c2Vfd3JpdGVfaW4gaW47CiAJCQlzdHJ1Y3QgZnVzZV93cml0ZV9vdXQgb3V0OwogCQl9IHdyaXRlOworCQlzdHJ1Y3QgZnVzZV9ub3RpZnlfcmV0cmlldmVfaW4gcmV0cmlldmVfaW47CiAJCXN0cnVjdCBmdXNlX2xrX2luIGxrX2luOwogCX0gbWlzYzsKIApAQCAtNzQ4LDQgKzc0OSw2IEBACiB1bnNpZ25lZCBmdXNlX2ZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CiBpbnQgZnVzZV9kZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKK3ZvaWQgZnVzZV93cml0ZV91cGRhdGVfc2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zKTsKKwogI2VuZGlmIC8qIF9GU19GVVNFX0lfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGVjMTRkMTkuLmRhOWU2ZTEgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvaW5vZGUuYworKysgYi9mcy9mdXNlL2lub2RlLmMKQEAgLTEyMiw4ICsxMjIsMTAgQEAKIAlmdXNlX3JlcXVlc3Rfc2VuZF9ub3JlcGx5KGZjLCByZXEpOwogfQogCi1zdGF0aWMgdm9pZCBmdXNlX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBmdXNlX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX0FDVElWRSkgewogCQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwogCQlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7CkBAIC03MzYsNyArNzM4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBmdXNlX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLmFsbG9jX2lub2RlICAgID0gZnVzZV9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSAgPSBmdXNlX2Rlc3Ryb3lfaW5vZGUsCi0JLmNsZWFyX2lub2RlCT0gZnVzZV9jbGVhcl9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBmdXNlX2V2aWN0X2lub2RlLAogCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCiAJLnJlbW91bnRfZnMJPSBmdXNlX3JlbW91bnRfZnMsCiAJLnB1dF9zdXBlcgk9IGZ1c2VfcHV0X3N1cGVyLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9LY29uZmlnIGIvZnMvZ2ZzMi9LY29uZmlnCmluZGV4IGE0N2I0MzEuLmNjOTY2NTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvS2NvbmZpZworKysgYi9mcy9nZnMyL0tjb25maWcKQEAgLTcsNyArNyw2IEBACiAJc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKIAlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJc2VsZWN0IENSQzMyCi0Jc2VsZWN0IFNMT1dfV09SSwogCXNlbGVjdCBRVU9UQUNUTAogCWhlbHAKIAkgIEEgY2x1c3RlciBmaWxlc3lzdGVtLgpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hb3BzLmMgYi9mcy9nZnMyL2FvcHMuYwppbmRleCA1ZTk2Y2JkLi4xOTRmZTE2IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FvcHMuYworKysgYi9mcy9nZnMyL2FvcHMuYwpAQCAtNjk3LDEyICs2OTcsMTIgQEAKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAKIAkvKgotCSAqIFhYWChoY2gpOiB0aGUgY2FsbCBiZWxvdyBzaG91bGQgcHJvYmFibHkgYmUgcmVwbGFjZWQgd2l0aAorCSAqIFhYWCh0cnVuY2F0ZSk6IHRoZSBjYWxsIGJlbG93IHNob3VsZCBwcm9iYWJseSBiZSByZXBsYWNlZCB3aXRoCiAJICogYSBjYWxsIHRvIHRoZSBnZnMyLXNwZWNpZmljIHRydW5jYXRlIGJsb2NrcyBoZWxwZXIgdG8gYWN0dWFsbHkKIAkgKiByZWxlYXNlIGRpc2sgYmxvY2tzLi4KIAkgKi8KIAlpZiAocG9zICsgbGVuID4gaXAtPmlfaW5vZGUuaV9zaXplKQotCQlzaW1wbGVfc2V0c2l6ZSgmaXAtPmlfaW5vZGUsIGlwLT5pX2lub2RlLmlfc2l6ZSk7CisJCXRydW5jYXRlX3NldHNpemUoJmlwLT5pX2lub2RlLCBpcC0+aV9pbm9kZS5pX3NpemUpOwogb3V0X2VuZHRyYW5zOgogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiBvdXRfdHJhbnNfZmFpbDoKQEAgLTEwNDIsOSArMTA0Miw5IEBACiAJaWYgKHJ2ICE9IDEpCiAJCWdvdG8gb3V0OyAvKiBkaW8gbm90IHZhbGlkLCBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgaS9vICovCiAKLQlydiA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKLQkJCQkJICAgaW92LCBvZmZzZXQsIG5yX3NlZ3MsCi0JCQkJCSAgIGdmczJfZ2V0X2Jsb2NrX2RpcmVjdCwgTlVMTCk7CisJcnYgPSBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKKwkJCQkgIG9mZnNldCwgbnJfc2VncywgZ2ZzMl9nZXRfYmxvY2tfZGlyZWN0LAorCQkJCSAgTlVMTCwgTlVMTCwgMCk7CiBvdXQ6CiAJZ2ZzMl9nbG9ja19kcV9tKDEsICZnaCk7CiAJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2luY29yZS5oIGIvZnMvZ2ZzMi9pbmNvcmUuaAppbmRleCA4ZmNiY2U0Li5mZGJmNGIzIDEwMDY0NAotLS0gYS9mcy9nZnMyL2luY29yZS5oCisrKyBiL2ZzL2dmczIvaW5jb3JlLmgKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAjaW5jbHVkZSA8bGludXgvZGxtLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIApAQCAtMzgzLDcgKzM4Miw3IEBACiBzdHJ1Y3QgZ2ZzMl9qZGVzYyB7CiAJc3RydWN0IGxpc3RfaGVhZCBqZF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgZXh0ZW50X2xpc3Q7Ci0Jc3RydWN0IHNsb3dfd29yayBqZF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBqZF93b3JrOwogCXN0cnVjdCBpbm9kZSAqamRfaW5vZGU7CiAJdW5zaWduZWQgbG9uZyBqZF9mbGFnczsKICNkZWZpbmUgSkRGX1JFQ09WRVJZIDEKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBmMDNhZmQ5Li4wODE0MGYxIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC04NCw3ICs4NCw3IEBACiAJc3RydWN0IGdmczJfc2tpcF9kYXRhICpkYXRhID0gb3BhcXVlOwogCiAJaWYgKGlwLT5pX25vX2FkZHIgPT0gZGF0YS0+bm9fYWRkcikgewotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUUpKXsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRSkpewogCQkJZGF0YS0+c2tpcHBlZCA9IDE7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtOTkxLDE4ICs5OTEsMjkgQEAKIAogc3RhdGljIGludCBfX2dmczJfc2V0YXR0cl9zaW1wbGUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CiAJaW50IGVycm9yOwogCiAJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IGlub2RlX3NldGF0dHIoJmlwLT5pX2lub2RlLCBhdHRyKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihHRlMyX1NCKCZpcC0+aV9pbm9kZSksICFlcnJvcik7Ci0JCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKLQkJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwotCQlicmVsc2UoZGliaCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQotCXJldHVybiBlcnJvcjsKKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKKwlnZnMyX2Fzc2VydF93YXJuKEdGUzJfU0IoaW5vZGUpLCAhZXJyb3IpOworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKwlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJYnJlbHNlKGRpYmgpOworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9nLmMgYi9mcy9nZnMyL2xvZy5jCmluZGV4IDZhODU3ZTI0Li5jZGUxMjQ4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2xvZy5jCisrKyBiL2ZzL2dmczIvbG9nLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCWlmICh0ZXN0X2JpdChTREZfTk9CQVJSSUVSUywgJnNkcC0+c2RfZmxhZ3MpKQogCQlnb3RvIHNraXBfYmFycmllcjsKIAlnZXRfYmgoYmgpOwotCXN1Ym1pdF9iaChXUklURV9TWU5DIHwgKDEgPDwgQklPX1JXX0JBUlJJRVIpIHwgKDEgPDwgQklPX1JXX01FVEEpLCBiaCk7CisJc3VibWl0X2JoKFdSSVRFX0JBUlJJRVIgfCBSRVFfTUVUQSwgYmgpOwogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAlpZiAoYnVmZmVyX2VvcG5vdHN1cHAoYmgpKSB7CiAJCWNsZWFyX2J1ZmZlcl9lb3Bub3RzdXBwKGJoKTsKQEAgLTYwNSw3ICs2MDUsNyBAQAogCQlsb2NrX2J1ZmZlcihiaCk7CiBza2lwX2JhcnJpZXI6CiAJCWdldF9iaChiaCk7Ci0JCXN1Ym1pdF9iaChXUklURV9TWU5DIHwgKDEgPDwgQklPX1JXX01FVEEpLCBiaCk7CisJCXN1Ym1pdF9iaChXUklURV9TWU5DIHwgUkVRX01FVEEsIGJoKTsKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCX0KIAlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCmRpZmYgLS1naXQgYS9mcy9nZnMyL21haW4uYyBiL2ZzL2dmczIvbWFpbi5jCmluZGV4IGZiMmE1ZjkuLmIxZTk2MzAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWFpbi5jCisrKyBiL2ZzL2dmczIvbWFpbi5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjQsNiArMjMsNyBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgInF1b3RhLmgiCisjaW5jbHVkZSAicmVjb3ZlcnkuaCIKIAogc3RhdGljIHN0cnVjdCBzaHJpbmtlciBxZF9zaHJpbmtlciA9IHsKIAkuc2hyaW5rID0gZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5LApAQCAtMTM4LDkgKzEzOCwxMSBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX3VucmVnaXN0ZXI7CiAKLQllcnJvciA9IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKFRISVNfTU9EVUxFKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9zbG93OworCWVycm9yID0gLUVOT01FTTsKKwlnZnNfcmVjb3Zlcnlfd3EgPSBhbGxvY193b3JrcXVldWUoImdmc19yZWNvdmVyeSIsCisJCQkJCSAgV1FfTk9OX1JFRU5UUkFOVCB8IFdRX1JFU0NVRVIsIDApOworCWlmICghZ2ZzX3JlY292ZXJ5X3dxKQorCQlnb3RvIGZhaWxfd3E7CiAKIAlnZnMyX3JlZ2lzdGVyX2RlYnVnZnMoKTsKIApAQCAtMTQ4LDcgKzE1MCw3IEBACiAKIAlyZXR1cm4gMDsKIAotZmFpbF9zbG93OgorZmFpbF93cToKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmdmczJtZXRhX2ZzX3R5cGUpOwogZmFpbF91bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMl9mc190eXBlKTsKQEAgLTE5MCw3ICsxOTIsNyBAQAogCWdmczJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKCk7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZnZnMyX2ZzX3R5cGUpOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZ2ZzMm1ldGFfZnNfdHlwZSk7Ci0Jc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihUSElTX01PRFVMRSk7CisJZGVzdHJveV93b3JrcXVldWUoZ2ZzX3JlY292ZXJ5X3dxKTsKIAogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX3F1b3RhZF9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX3JncnBkX2NhY2hlcCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDE4MTc2ZDAuLmYzYjA3MWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC0zNiw4ICszNiw4IEBACiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CiAJaW50IG5yX3VuZGVyd2F5ID0gMDsKLQlpbnQgd3JpdGVfb3AgPSAoMSA8PCBCSU9fUldfTUVUQSkgfCAoKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMID8KLQkJCVdSSVRFX1NZTkNfUExVRyA6IFdSSVRFKSk7CisJaW50IHdyaXRlX29wID0gUkVRX01FVEEgfAorCQkod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgPyBXUklURV9TWU5DX1BMVUcgOiBXUklURSk7CiAKIAlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOwogCUJVR19PTighcGFnZV9oYXNfYnVmZmVycyhwYWdlKSk7CkBAIC0yMjUsNyArMjI1LDcgQEAKIAl9CiAJYmgtPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl9yZWFkX3N5bmM7CiAJZ2V0X2JoKGJoKTsKLQlzdWJtaXRfYmgoUkVBRF9TWU5DIHwgKDEgPDwgQklPX1JXX01FVEEpLCBiaCk7CisJc3VibWl0X2JoKFJFQURfU1lOQyB8IFJFUV9NRVRBLCBiaCk7CiAJaWYgKCEoZmxhZ3MgJiBESU9fV0FJVCkpCiAJCXJldHVybiAwOwogCkBAIC00MzIsNyArNDMyLDcgQEAKIAlpZiAoYnVmZmVyX3VwdG9kYXRlKGZpcnN0X2JoKSkKIAkJZ290byBvdXQ7CiAJaWYgKCFidWZmZXJfbG9ja2VkKGZpcnN0X2JoKSkKLQkJbGxfcndfYmxvY2soUkVBRF9TWU5DIHwgKDEgPDwgQklPX1JXX01FVEEpLCAxLCAmZmlyc3RfYmgpOworCQlsbF9yd19ibG9jayhSRUFEX1NZTkMgfCBSRVFfTUVUQSwgMSwgJmZpcnN0X2JoKTsKIAogCWRibG9jaysrOwogCWV4dGxlbi0tOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMgYi9mcy9nZnMyL29wc19mc3R5cGUuYwppbmRleCA0NWE0YTM2Li40ZDRiMWU4IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19mc3R5cGUuYworKysgYi9mcy9nZnMyL29wc19mc3R5cGUuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCkBAIC0yNzUsNyArMjc0LDcgQEAKIAogCWJpby0+YmlfZW5kX2lvID0gZW5kX2Jpb19pb19wYWdlOwogCWJpby0+YmlfcHJpdmF0ZSA9IHBhZ2U7Ci0Jc3VibWl0X2JpbyhSRUFEX1NZTkMgfCAoMSA8PCBCSU9fUldfTUVUQSksIGJpbyk7CisJc3VibWl0X2JpbyhSRUFEX1NZTkMgfCBSRVFfTUVUQSwgYmlvKTsKIAl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwogCWJpb19wdXQoYmlvKTsKIAlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewpAQCAtNjczLDcgKzY3Miw3IEBACiAJCQlicmVhazsKIAogCQlJTklUX0xJU1RfSEVBRCgmamQtPmV4dGVudF9saXN0KTsKLQkJc2xvd193b3JrX2luaXQoJmpkLT5qZF93b3JrLCAmZ2ZzMl9yZWNvdmVyX29wcyk7CisJCUlOSVRfV09SSygmamQtPmpkX3dvcmssIGdmczJfcmVjb3Zlcl9mdW5jKTsKIAkJamQtPmpkX2lub2RlID0gZ2ZzMl9sb29rdXBpKHNkcC0+c2RfamluZGV4LCAmbmFtZSwgMSk7CiAJCWlmICghamQtPmpkX2lub2RlIHx8IElTX0VSUihqZC0+amRfaW5vZGUpKSB7CiAJCQlpZiAoIWpkLT5qZF9pbm9kZSkKQEAgLTc4Miw3ICs3ODEsOCBAQAogCWlmIChzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfZmlyc3QpIHsKIAkJdW5zaWduZWQgaW50IHg7CiAJCWZvciAoeCA9IDA7IHggPCBzZHAtPnNkX2pvdXJuYWxzOyB4KyspIHsKLQkJCWVycm9yID0gZ2ZzMl9yZWNvdmVyX2pvdXJuYWwoZ2ZzMl9qZGVzY19maW5kKHNkcCwgeCkpOworCQkJZXJyb3IgPSBnZnMyX3JlY292ZXJfam91cm5hbChnZnMyX2pkZXNjX2ZpbmQoc2RwLCB4KSwKKwkJCQkJCSAgICAgdHJ1ZSk7CiAJCQlpZiAoZXJyb3IpIHsKIAkJCQlmc19lcnIoc2RwLCAiZXJyb3IgcmVjb3ZlcmluZyBqb3VybmFsICV1OiAlZFxuIiwKIAkJCQkgICAgICAgeCwgZXJyb3IpOwpAQCAtNzkyLDcgKzc5Miw3IEBACiAKIAkJZ2ZzMl9vdGhlcnNfbWF5X21vdW50KHNkcCk7CiAJfSBlbHNlIGlmICghc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikgewotCQllcnJvciA9IGdmczJfcmVjb3Zlcl9qb3VybmFsKHNkcC0+c2RfamRlc2MpOworCQllcnJvciA9IGdmczJfcmVjb3Zlcl9qb3VybmFsKHNkcC0+c2RfamRlc2MsIHRydWUpOwogCQlpZiAoZXJyb3IpIHsKIAkJCWZzX2VycihzZHAsICJlcnJvciByZWNvdmVyaW5nIG15IGpvdXJuYWw6ICVkXG4iLCBlcnJvcik7CiAJCQlnb3RvIGZhaWxfamlub2RlX2doOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggOThjZGQwNS4uMTAwOWJlMiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogfQogCiAvKgotICogWFhYOiBzaG91bGQgYmUgY2hhbmdlZCB0byBoYXZlIHByb3BlciBvcmRlcmluZyBieSBvcGVuY29kaW5nIHNpbXBsZV9zZXRzaXplCisgKiBYWFgodHJ1bmNhdGUpOiB0aGUgdHJ1bmNhdGVfc2V0c2l6ZSBjYWxscyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGVuZC4KICAqLwogc3RhdGljIGludCBzZXRhdHRyX3NpemUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMTA4NCwxMCArMTA4NCw4IEBACiAJCWVycm9yID0gZ2ZzMl90cmFuc19iZWdpbihzZHAsIDAsIHNkcC0+c2RfamRlc2MtPmpkX2Jsb2Nrcyk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJZXJyb3IgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwogCQlnZnMyX3RyYW5zX2VuZChzZHApOwotCQlpZiAoZXJyb3IpIAotCQkJcmV0dXJuIGVycm9yOwogCX0KIAogCWVycm9yID0gZ2ZzMl90cnVuY2F0ZWkoaXAsIGF0dHItPmlhX3NpemUpOwpAQCAtMTEzNiw4ICsxMTM0LDE2IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9lbmRfdHJhbnM7CiAKLQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhZXJyb3IpOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIWVycm9yKTsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCiAJZ2ZzMl90cmFuc19hZGRfYmgoaXAtPmlfZ2wsIGRpYmgsIDEpOwogCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcXVvdGEuYyBiL2ZzL2dmczIvcXVvdGEuYwppbmRleCA4YmI2NDNjLi4xYmM2YjU2IDEwMDY0NAotLS0gYS9mcy9nZnMyL3F1b3RhLmMKKysrIGIvZnMvZ2ZzMi9xdW90YS5jCkBAIC0xNDQ5LDEwICsxNDQ5LDEwIEBACiAKIAlzd2l0Y2ggKHNkcC0+c2RfYXJncy5hcl9xdW90YSkgewogCWNhc2UgR0ZTMl9RVU9UQV9PTjoKLQkJZnFzLT5xc19mbGFncyB8PSAoWEZTX1FVT1RBX1VEUV9FTkZEIHwgWEZTX1FVT1RBX0dEUV9FTkZEKTsKKwkJZnFzLT5xc19mbGFncyB8PSAoRlNfUVVPVEFfVURRX0VORkQgfCBGU19RVU9UQV9HRFFfRU5GRCk7CiAJCS8qRkFMTFRIUlUqLwogCWNhc2UgR0ZTMl9RVU9UQV9BQ0NPVU5UOgotCQlmcXMtPnFzX2ZsYWdzIHw9IChYRlNfUVVPVEFfVURRX0FDQ1QgfCBYRlNfUVVPVEFfR0RRX0FDQ1QpOworCQlmcXMtPnFzX2ZsYWdzIHw9IChGU19RVU9UQV9VRFFfQUNDVCB8IEZTX1FVT1RBX0dEUV9BQ0NUKTsKIAkJYnJlYWs7CiAJY2FzZSBHRlMyX1FVT1RBX09GRjoKIAkJYnJlYWs7CkBAIC0xNDk4LDcgKzE0OTgsNyBAQAogCiAJcWx2YiA9IChzdHJ1Y3QgZ2ZzMl9xdW90YV9sdmIgKilxZC0+cWRfZ2wtPmdsX2x2YjsKIAlmZHEtPmRfdmVyc2lvbiA9IEZTX0RRVU9UX1ZFUlNJT047Ci0JZmRxLT5kX2ZsYWdzID0gKHR5cGUgPT0gUVVPVEFfVVNFUikgPyBYRlNfVVNFUl9RVU9UQSA6IFhGU19HUk9VUF9RVU9UQTsKKwlmZHEtPmRfZmxhZ3MgPSAodHlwZSA9PSBRVU9UQV9VU0VSKSA/IEZTX1VTRVJfUVVPVEEgOiBGU19HUk9VUF9RVU9UQTsKIAlmZHEtPmRfaWQgPSBpZDsKIAlmZHEtPmRfYmxrX2hhcmRsaW1pdCA9IGJlNjRfdG9fY3B1KHFsdmItPnFiX2xpbWl0KTsKIAlmZHEtPmRfYmxrX3NvZnRsaW1pdCA9IGJlNjRfdG9fY3B1KHFsdmItPnFiX3dhcm4pOwpAQCAtMTUzMywxMiArMTUzMywxMiBAQAogCXN3aXRjaCh0eXBlKSB7CiAJY2FzZSBVU1JRVU9UQToKIAkJdHlwZSA9IFFVT1RBX1VTRVI7Ci0JCWlmIChmZHEtPmRfZmxhZ3MgIT0gWEZTX1VTRVJfUVVPVEEpCisJCWlmIChmZHEtPmRfZmxhZ3MgIT0gRlNfVVNFUl9RVU9UQSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIEdSUFFVT1RBOgogCQl0eXBlID0gUVVPVEFfR1JPVVA7Ci0JCWlmIChmZHEtPmRfZmxhZ3MgIT0gWEZTX0dST1VQX1FVT1RBKQorCQlpZiAoZmRxLT5kX2ZsYWdzICE9IEZTX0dST1VQX1FVT1RBKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9mcy9nZnMyL3JlY292ZXJ5LmMgYi9mcy9nZnMyL3JlY292ZXJ5LmMKaW5kZXggNGI5YmVjZS4uZjdmODlhOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjgsNiArMjcsOCBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJkaXIuaCIKIAorc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdmc19yZWNvdmVyeV93cTsKKwogaW50IGdmczJfcmVwbGF5X3JlYWRfYmxvY2soc3RydWN0IGdmczJfamRlc2MgKmpkLCB1bnNpZ25lZCBpbnQgYmxrLAogCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgpCiB7CkBAIC00NDMsMjMgKzQ0NCw3IEBACiAgICAgICAgIGtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2ZzMl9yZWNvdmVyX2dldF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGdmczJfamRlc2MsIGpkX3dvcmspOwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KEpERl9SRUNPVkVSWSwgJmpkLT5qZF9mbGFncykpCi0JCXJldHVybiAtRUJVU1k7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGdmczJfcmVjb3Zlcl9wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0Jc3RydWN0IGdmczJfamRlc2MgKmpkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZnMyX2pkZXNjLCBqZF93b3JrKTsKLQljbGVhcl9iaXQoSkRGX1JFQ09WRVJZLCAmamQtPmpkX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCXdha2VfdXBfYml0KCZqZC0+amRfZmxhZ3MsIEpERl9SRUNPVkVSWSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdmczJfcmVjb3Zlcl93b3JrKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit2b2lkIGdmczJfcmVjb3Zlcl9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGdmczJfamRlc2MsIGpkX3dvcmspOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShqZC0+amRfaW5vZGUpOwpAQCAtNTc4LDcgKzU2Myw3IEBACiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqX2doKTsKIAogCWZzX2luZm8oc2RwLCAiamlkPSV1OiBEb25lXG4iLCBqZC0+amRfamlkKTsKLQlyZXR1cm47CisJZ290byBkb25lOwogCiBmYWlsX2d1bmxvY2tfdHI6CiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnRfZ2gpOwpAQCAtNTkwLDMyICs1NzUsMzUgQEAKIAl9CiAKIAlmc19pbmZvKHNkcCwgImppZD0ldTogJXNcbiIsIGpkLT5qZF9qaWQsIChlcnJvcikgPyAiRmFpbGVkIiA6ICJEb25lIik7Ci0KIGZhaWw6CiAJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKK2RvbmU6CisJY2xlYXJfYml0KEpERl9SRUNPVkVSWSwgJmpkLT5qZF9mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwl3YWtlX3VwX2JpdCgmamQtPmpkX2ZsYWdzLCBKREZfUkVDT1ZFUlkpOwogfQogCi1zdHJ1Y3Qgc2xvd193b3JrX29wcyBnZnMyX3JlY292ZXJfb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkuZ2V0X3JlZiA9IGdmczJfcmVjb3Zlcl9nZXRfcmVmLAotCS5wdXRfcmVmID0gZ2ZzMl9yZWNvdmVyX3B1dF9yZWYsCi0JLmV4ZWN1dGUgPSBnZnMyX3JlY292ZXJfd29yaywKLX07Ci0KLQogc3RhdGljIGludCBnZnMyX3JlY292ZXJ5X3dhaXQodm9pZCAqd29yZCkKIHsKIAlzY2hlZHVsZSgpOwogCXJldHVybiAwOwogfQogCi1pbnQgZ2ZzMl9yZWNvdmVyX2pvdXJuYWwoc3RydWN0IGdmczJfamRlc2MgKmpkKQoraW50IGdmczJfcmVjb3Zlcl9qb3VybmFsKHN0cnVjdCBnZnMyX2pkZXNjICpqZCwgYm9vbCB3YWl0KQogewogCWludCBydjsKLQlydiA9IHNsb3dfd29ya19lbnF1ZXVlKCZqZC0+amRfd29yayk7Ci0JaWYgKHJ2KQotCQlyZXR1cm4gcnY7Ci0Jd2FpdF9vbl9iaXQoJmpkLT5qZF9mbGFncywgSkRGX1JFQ09WRVJZLCBnZnMyX3JlY292ZXJ5X3dhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEpERl9SRUNPVkVSWSwgJmpkLT5qZF9mbGFncykpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiB3ZSBoYXZlIEpERl9SRUNPVkVSWSwgcXVldWUgc2hvdWxkIGFsd2F5cyBzdWNjZWVkICovCisJcnYgPSBxdWV1ZV93b3JrKGdmc19yZWNvdmVyeV93cSwgJmpkLT5qZF93b3JrKTsKKwlCVUdfT04oIXJ2KTsKKworCWlmICh3YWl0KQorCQl3YWl0X29uX2JpdCgmamQtPmpkX2ZsYWdzLCBKREZfUkVDT1ZFUlksIGdmczJfcmVjb3Zlcnlfd2FpdCwKKwkJCSAgICBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZWNvdmVyeS5oIGIvZnMvZ2ZzMi9yZWNvdmVyeS5oCmluZGV4IDE2MTZhYzIuLjIyMjYxMzYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmVjb3ZlcnkuaAorKysgYi9mcy9nZnMyL3JlY292ZXJ5LmgKQEAgLTEyLDYgKzEyLDggQEAKIAogI2luY2x1ZGUgImluY29yZS5oIgogCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdmc19yZWNvdmVyeV93cTsKKwogc3RhdGljIGlubGluZSB2b2lkIGdmczJfcmVwbGF5X2luY3JfYmxrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgKmJsaykKIHsKIAlpZiAoKysqYmxrID09IHNkcC0+c2RfamRlc2MtPmpkX2Jsb2NrcykKQEAgLTI3LDggKzI5LDggQEAKIAogZXh0ZXJuIGludCBnZnMyX2ZpbmRfamhlYWQoc3RydWN0IGdmczJfamRlc2MgKmpkLAogCQkgICAgc3RydWN0IGdmczJfbG9nX2hlYWRlcl9ob3N0ICpoZWFkKTsKLWV4dGVybiBpbnQgZ2ZzMl9yZWNvdmVyX2pvdXJuYWwoc3RydWN0IGdmczJfamRlc2MgKmdmczJfamQpOwotZXh0ZXJuIHN0cnVjdCBzbG93X3dvcmtfb3BzIGdmczJfcmVjb3Zlcl9vcHM7CitleHRlcm4gaW50IGdmczJfcmVjb3Zlcl9qb3VybmFsKHN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkLCBib29sIHdhaXQpOworZXh0ZXJuIHZvaWQgZ2ZzMl9yZWNvdmVyX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogI2VuZGlmIC8qIF9fUkVDT1ZFUllfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggNDE0MDgxMS4uNzdjYjlmOCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKICAqIG5vZGUgZm9yIGxhdGVyIGRlYWxsb2NhdGlvbi4KICAqLwogCi1zdGF0aWMgdm9pZCBnZnMyX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbnQgZ2ZzMl9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIApAQCAtMTE5NywyNiArMTE5Nyw3IEBACiAJCWlmIChnbCAmJiB0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJCWNsZWFyX25saW5rKGlub2RlKTsKIAl9Ci0JZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKLX0KLQotLyoqCi0gKiBnZnMyX2NsZWFyX2lub2RlIC0gRGVhbGxvY2F0ZSBhbiBpbm9kZSB3aGVuIFZGUyBpcyBkb25lIHdpdGggaXQKLSAqIEBpbm9kZTogVGhlIFZGUyBpbm9kZQotICoKLSAqLwotCi1zdGF0aWMgdm9pZCBnZnMyX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQotCWlwLT5pX2dsLT5nbF9vYmplY3QgPSBOVUxMOwotCWdmczJfZ2xvY2tfcHV0KGlwLT5pX2dsKTsKLQlpcC0+aV9nbCA9IE5VTEw7Ci0JaWYgKGlwLT5pX2lvcGVuX2doLmdoX2dsKSB7Ci0JCWlwLT5pX2lvcGVuX2doLmdoX2dsLT5nbF9vYmplY3QgPSBOVUxMOwotCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwotCX0KKwlyZXR1cm4gZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIGludCBpc19hbmNlc3Rvcihjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkMSwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZDIpCkBAIC0xMzQ0LDEzICsxMzI1LDE2IEBACiAgKiBpcyBzYWZlLCBqdXN0IGxlc3MgZWZmaWNpZW50LgogICovCiAKLXN0YXRpYyB2b2lkIGdmczJfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBnZnMyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfaG9sZGVyIGdoOwogCWludCBlcnJvcjsKIAorCWlmIChpbm9kZS0+aV9ubGluaykKKwkJZ290byBvdXQ7CisKIAllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLCAmZ2gpOwogCWlmICh1bmxpa2VseShlcnJvcikpIHsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlwLT5pX2lvcGVuX2doKTsKQEAgLTE0MDQsMTAgKzEzODgsMTggQEAKIAlnZnMyX2hvbGRlcl91bmluaXQoJmlwLT5pX2lvcGVuX2doKTsKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmZ2gpOwogCWlmIChlcnJvciAmJiBlcnJvciAhPSBHTFJfVFJZRkFJTEVEICYmIGVycm9yICE9IC1FUk9GUykKLQkJZnNfd2FybihzZHAsICJnZnMyX2RlbGV0ZV9pbm9kZTogJWRcbiIsIGVycm9yKTsKKwkJZnNfd2FybihzZHAsICJnZnMyX2V2aWN0X2lub2RlOiAlZFxuIiwgZXJyb3IpOwogb3V0OgogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CisKKwlpcC0+aV9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKKwlnZnMyX2dsb2NrX3B1dChpcC0+aV9nbCk7CisJaXAtPmlfZ2wgPSBOVUxMOworCWlmIChpcC0+aV9pb3Blbl9naC5naF9nbCkgeworCQlpcC0+aV9pb3Blbl9naC5naF9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKKwkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlwLT5pX2lvcGVuX2doKTsKKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdmczJfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTE0MzEsMTQgKzE0MjMsMTMgQEAKIAkuYWxsb2NfaW5vZGUJCT0gZ2ZzMl9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQkJPSBnZnMyX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCQk9IGdmczJfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQkJPSBnZnMyX2RlbGV0ZV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJCT0gZ2ZzMl9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCQk9IGdmczJfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCQk9IGdmczJfc3luY19mcywKIAkuZnJlZXplX2ZzIAkJPSBnZnMyX2ZyZWV6ZSwKIAkudW5mcmVlemVfZnMJCT0gZ2ZzMl91bmZyZWV6ZSwKIAkuc3RhdGZzCQkJPSBnZnMyX3N0YXRmcywKIAkucmVtb3VudF9mcwkJPSBnZnMyX3JlbW91bnRfZnMsCi0JLmNsZWFyX2lub2RlCQk9IGdmczJfY2xlYXJfaW5vZGUsCiAJLmRyb3BfaW5vZGUJCT0gZ2ZzMl9kcm9wX2lub2RlLAogCS5zaG93X29wdGlvbnMJCT0gZ2ZzMl9zaG93X29wdGlvbnMsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggZDAxOWQwZC4uY2NhY2ZmZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJ1dGlsLmgiCiAjaW5jbHVkZSAiZ2xvcHMuaCIKKyNpbmNsdWRlICJyZWNvdmVyeS5oIgogCiBzdHJ1Y3QgZ2ZzMl9hdHRyIHsKIAlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CkBAIC0zNzYsNyArMzc3LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGpkLCAmc2RwLT5zZF9qaW5kZXhfbGlzdCwgamRfbGlzdCkgewogCQlpZiAoamQtPmpkX2ppZCAhPSBqaWQpCiAJCQljb250aW51ZTsKLQkJcnYgPSBzbG93X3dvcmtfZW5xdWV1ZSgmamQtPmpkX3dvcmspOworCQlydiA9IGdmczJfcmVjb3Zlcl9qb3VybmFsKGpkLCBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL2ZzL2dmczIveGF0dHIuYyBiL2ZzL2dmczIveGF0dHIuYwppbmRleCA4MmY5M2RhLi43NzZhZjZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3hhdHRyLmMKKysrIGIvZnMvZ2ZzMi94YXR0ci5jCkBAIC0xMjk2LDYgKzEyOTYsNyBAQAogCiBpbnQgZ2ZzMl94YXR0cl9hY2xfY2htb2Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZpcC0+aV9pbm9kZTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CkBAIC0xMzIxLDE0ICsxMzIyLDI1IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCWlmICghZXJyb3IpIHsKLQkJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKCZpcC0+aV9pbm9kZSwgYXR0cik7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCAhZXJyb3IpOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7Ci0JCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKLQkJYnJlbHNlKGRpYmgpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdHJhbnNfZW5kOworCisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWdmczJfYXNzZXJ0X3dhcm4oR0ZTMl9TQihpbm9kZSksICFlcnJvcik7CiAJfQogCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKworCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBkaWJoLCAxKTsKKwlnZnMyX2Rpbm9kZV9vdXQoaXAsIGRpYmgtPmJfZGF0YSk7CisJYnJlbHNlKGRpYmgpOworCitvdXRfdHJhbnNfZW5kOgogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzL2hmc19mcy5oIGIvZnMvaGZzL2hmc19mcy5oCmluZGV4IGZlMzVlM2IuLjRmNTU2NTEgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9oZnNfZnMuaAorKysgYi9mcy9oZnMvaGZzX2ZzLmgKQEAgLTE5Myw3ICsxOTMsNyBAQAogZXh0ZXJuIHZvaWQgaGZzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2V4dGVudCAqZXh0LAogCQkJX19iZTMyIGxvZ19zaXplLCBfX2JlMzIgcGh5c19zaXplLCB1MzIgY2x1bXBfc2l6ZSk7CiBleHRlcm4gc3RydWN0IGlub2RlICpoZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGhmc19jYXRfa2V5ICosIGhmc19jYXRfcmVjICopOwotZXh0ZXJuIHZvaWQgaGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBoZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIAogLyogYXR0ci5jICovCmRpZmYgLS1naXQgYS9mcy9oZnMvaW5vZGUuYyBiL2ZzL2hmcy9pbm9kZS5jCmluZGV4IDE0ZjVjYjEuLjM5N2I3YWQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9pbm9kZS5jCisrKyBiL2ZzL2hmcy9pbm9kZS5jCkBAIC0zOSwxMCArMzksMTkgQEAKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogeworCWludCByZXQ7CisKIAkqcGFnZXAgPSBOVUxMOwotCXJldHVybiBjb250X3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKKwlyZXQgPSBjb250X3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKIAkJCQloZnNfZ2V0X2Jsb2NrLAogCQkJCSZIRlNfSShtYXBwaW5nLT5ob3N0KS0+cGh5c19zaXplKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7CisJCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBoZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCkBAIC0xMTIsOSArMTIxLDI0IEBACiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmctPmhvc3Q7CisJc3NpemVfdCByZXQ7CiAKLQlyZXR1cm4gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgIG9mZnNldCwgbnJfc2VncywgaGZzX2dldF9ibG9jaywgTlVMTCk7CisKKwkvKgorCSAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldworCSAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uCisJICovCisJaWYgKHVubGlrZWx5KChydyAmIFdSSVRFKSAmJiByZXQgPCAwKSkgeworCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCWxvZmZfdCBlbmQgPSBvZmZzZXQgKyBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisKKwkJaWYgKGVuZCA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShpbm9kZSwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaGZzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC01MDcsOCArNTMxLDEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQgaGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGhmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAlpZiAoSEZTX0lTX1JTUkMoaW5vZGUpICYmIEhGU19JKGlub2RlKS0+cnNyY19pbm9kZSkgewogCQlIRlNfSShIRlNfSShpbm9kZSktPnJzcmNfaW5vZGUpLT5yc3JjX2lub2RlID0gTlVMTDsKIAkJaXB1dChIRlNfSShpbm9kZSktPnJzcmNfaW5vZGUpOwpAQCAtNTg4LDEzICs2MTQsNDMgQEAKIAkJCWF0dHItPmlhX21vZGUgPSBpbm9kZS0+aV9tb2RlICYgflNfSVdVR087CiAJCWF0dHItPmlhX21vZGUgJj0gU19JU0RJUihpbm9kZS0+aV9tb2RlKSA/IH5oc2ItPnNfZGlyX3VtYXNrOiB+aHNiLT5zX2ZpbGVfdW1hc2s7CiAJfQotCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CiAKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IHN1cGVyX2Jsb2NrICogc2I7CisJaW50IHJldCwgZXJyOworCisJLyogc3luYyB0aGUgaW5vZGUgdG8gYnVmZmVycyAqLworCXJldCA9IHdyaXRlX2lub2RlX25vdyhpbm9kZSwgMCk7CisKKwkvKiBzeW5jIHRoZSBzdXBlcmJsb2NrIHRvIGJ1ZmZlcnMgKi8KKwlzYiA9IGlub2RlLT5pX3NiOworCWlmIChzYi0+c19kaXJ0KSB7CisJCWxvY2tfc3VwZXIoc2IpOworCQlzYi0+c19kaXJ0ID0gMDsKKwkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQorCQkJaGZzX21kYl9jb21taXQoc2IpOworCQl1bmxvY2tfc3VwZXIoc2IpOworCX0KKwkvKiAuLiBmaW5hbGx5IHN5bmMgdGhlIGJ1ZmZlcnMgdG8gZGlzayAqLworCWVyciA9IHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGVycjsKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKQEAgLTYwNCw3ICs2NjAsNyBAQAogCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5zcGxpY2VfcmVhZAk9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZCwKLQkuZnN5bmMJCT0gZmlsZV9mc3luYywKKwkuZnN5bmMJCT0gaGZzX2ZpbGVfZnN5bmMsCiAJLm9wZW4JCT0gaGZzX2ZpbGVfb3BlbiwKIAkucmVsZWFzZQk9IGhmc19maWxlX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaGZzL3N1cGVyLmMgYi9mcy9oZnMvc3VwZXIuYwppbmRleCAwYTgxZWI3Li4zNDIzNWQ0IDEwMDY0NAotLS0gYS9mcy9oZnMvc3VwZXIuYworKysgYi9mcy9oZnMvc3VwZXIuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJLmFsbG9jX2lub2RlCT0gaGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gaGZzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gaGZzX3dyaXRlX2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGhmc19jbGVhcl9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBoZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGhmc19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyCT0gaGZzX3dyaXRlX3N1cGVyLAogCS5zeW5jX2ZzCT0gaGZzX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCmluZGV4IDY1MDVjMzAuLmRjODU2YmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC0zNTEsNiArMzUxLDcgQEAKIAogLyogc3VwZXIuYyAqLwogc3RydWN0IGlub2RlICpoZnNwbHVzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOworaW50IGhmc3BsdXNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCk7CiAKIC8qIHRhYmxlcy5jICovCiBleHRlcm4gdTE2IGhmc3BsdXNfY2FzZV9mb2xkX3RhYmxlW107CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggOWJiYjgyOS4uYzVhOTc5ZCAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwpAQCAtMzEsMTAgKzMxLDE5IEBACiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKIHsKKwlpbnQgcmV0OworCiAJKnBhZ2VwID0gTlVMTDsKLQlyZXR1cm4gY29udF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCisJcmV0ID0gY29udF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCiAJCQkJaGZzcGx1c19nZXRfYmxvY2ssCiAJCQkJJkhGU1BMVVNfSShtYXBwaW5nLT5ob3N0KS5waHlzX3NpemUpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKKwkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCkBAIC0xMDUsOSArMTE0LDI0IEBACiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmctPmhvc3Q7CisJc3NpemVfdCByZXQ7CiAKLQlyZXR1cm4gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgIG9mZnNldCwgbnJfc2VncywgaGZzcGx1c19nZXRfYmxvY2ssIE5VTEwpOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKKwkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgorCSAqLworCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKKwkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCisJCWlmIChlbmQgPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTI2Niw5ICsyOTAsNTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIGludCBkYXRhc3luYykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOworCWludCByZXQsIGVycjsKKworCS8qIHN5bmMgdGhlIGlub2RlIHRvIGJ1ZmZlcnMgKi8KKwlyZXQgPSB3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDApOworCisJLyogc3luYyB0aGUgc3VwZXJibG9jayB0byBidWZmZXJzICovCisJc2IgPSBpbm9kZS0+aV9zYjsKKwlpZiAoc2ItPnNfZGlydCkgeworCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCQloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOworCQllbHNlCisJCQlzYi0+c19kaXJ0ID0gMDsKKwl9CisKKwkvKiAuLiBmaW5hbGx5IHN5bmMgdGhlIGJ1ZmZlcnMgdG8gZGlzayAqLworCWVyciA9IHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGVycjsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmxvb2t1cAkJPSBoZnNwbHVzX2ZpbGVfbG9va3VwLAogCS50cnVuY2F0ZQk9IGhmc3BsdXNfZmlsZV90cnVuY2F0ZSwKKwkuc2V0YXR0cgk9IGhmc3BsdXNfc2V0YXR0ciwKIAkuc2V0eGF0dHIJPSBoZnNwbHVzX3NldHhhdHRyLAogCS5nZXR4YXR0cgk9IGhmc3BsdXNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGhmc3BsdXNfbGlzdHhhdHRyLApAQCAtMjgyLDcgKzM1Myw3IEBACiAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAotCS5mc3luYwkJPSBmaWxlX2ZzeW5jLAorCS5mc3luYwkJPSBoZnNwbHVzX2ZpbGVfZnN5bmMsCiAJLm9wZW4JCT0gaGZzcGx1c19maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSwKIAkudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDc0YjQ3M2EuLjNiNTVjMDUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTE0NSwxNiArMTQ1LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaGZzcGx1c19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgaGZzcGx1c19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWRwcmludChEQkdfSU5PREUsICJoZnNwbHVzX2NsZWFyX2lub2RlOiAlbHVcbiIsIGlub2RlLT5pX2lubyk7CisJZHByaW50KERCR19JTk9ERSwgImhmc3BsdXNfZXZpY3RfaW5vZGU6ICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpIHsKIAkJSEZTUExVU19JKEhGU1BMVVNfSShpbm9kZSkucnNyY19pbm9kZSkucnNyY19pbm9kZSA9IE5VTEw7CiAJCWlwdXQoSEZTUExVU19JKGlub2RlKS5yc3JjX2lub2RlKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaGZzcGx1c19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KQoraW50IGhmc3BsdXNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IEhGU1BMVVNfU0Ioc2IpLnNfdmhkcjsKIApAQCAtMjkzLDcgKzI5NSw3IEBACiAJLmFsbG9jX2lub2RlCT0gaGZzcGx1c19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGhmc3BsdXNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBoZnNwbHVzX3dyaXRlX2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGhmc3BsdXNfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gaGZzcGx1c19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gaGZzcGx1c19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyCT0gaGZzcGx1c193cml0ZV9zdXBlciwKIAkuc3luY19mcwk9IGhmc3BsdXNfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnMuaCBiL2ZzL2hvc3Rmcy9ob3N0ZnMuaAppbmRleCAyZjM0ZjhmLi42YmJkNzVjIDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzLmgKKysrIGIvZnMvaG9zdGZzL2hvc3Rmcy5oCkBAIC01MywxOCArNTMsMjggQEAKIAlzdHJ1Y3QgdGltZXNwZWMJaWFfY3RpbWU7CiB9OwogCi1leHRlcm4gaW50IHN0YXRfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIGxvbmcgKmlub2RlX291dCwKLQkJICAgICBpbnQgKm1vZGVfb3V0LCBpbnQgKm5saW5rX291dCwgaW50ICp1aWRfb3V0LCBpbnQgKmdpZF9vdXQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzaXplX291dCwgc3RydWN0IHRpbWVzcGVjICphdGltZV9vdXQsCi0JCSAgICAgc3RydWN0IHRpbWVzcGVjICptdGltZV9vdXQsIHN0cnVjdCB0aW1lc3BlYyAqY3RpbWVfb3V0LAotCQkgICAgIGludCAqYmxrc2l6ZV9vdXQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqYmxvY2tzX291dCwgaW50IGZkKTsKK3N0cnVjdCBob3N0ZnNfc3RhdCB7CisJdW5zaWduZWQgbG9uZyBsb25nIGlubzsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwl1bnNpZ25lZCBpbnQgbmxpbms7CisJdW5zaWduZWQgaW50IHVpZDsKKwl1bnNpZ25lZCBpbnQgZ2lkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCXN0cnVjdCB0aW1lc3BlYyBhdGltZSwgbXRpbWUsIGN0aW1lOworCXVuc2lnbmVkIGludCBibGtzaXplOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja3M7CisJdW5zaWduZWQgaW50IG1hajsKKwl1bnNpZ25lZCBpbnQgbWluOworfTsKKworZXh0ZXJuIGludCBzdGF0X2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGhvc3Rmc19zdGF0ICpwLCBpbnQgZmQpOwogZXh0ZXJuIGludCBhY2Nlc3NfZmlsZShjaGFyICpwYXRoLCBpbnQgciwgaW50IHcsIGludCB4KTsKIGV4dGVybiBpbnQgb3Blbl9maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQgdywgaW50IGFwcGVuZCk7Ci1leHRlcm4gaW50IGZpbGVfdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1haiwgaW50ICptaW4pOwogZXh0ZXJuIHZvaWQgKm9wZW5fZGlyKGNoYXIgKnBhdGgsIGludCAqZXJyX291dCk7CiBleHRlcm4gY2hhciAqcmVhZF9kaXIodm9pZCAqc3RyZWFtLCB1bnNpZ25lZCBsb25nIGxvbmcgKnBvcywKIAkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nICppbm9fb3V0LCBpbnQgKmxlbl9vdXQpOwogZXh0ZXJuIHZvaWQgY2xvc2VfZmlsZSh2b2lkICpzdHJlYW0pOworZXh0ZXJuIGludCByZXBsYWNlX2ZpbGUoaW50IG9sZGZkLCBpbnQgZmQpOwogZXh0ZXJuIHZvaWQgY2xvc2VfZGlyKHZvaWQgKnN0cmVhbSk7CiBleHRlcm4gaW50IHJlYWRfZmlsZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqb2Zmc2V0LCBjaGFyICpidWYsIGludCBsZW4pOwogZXh0ZXJuIGludCB3cml0ZV9maWxlKGludCBmZCwgdW5zaWduZWQgbG9uZyBsb25nICpvZmZzZXQsIGNvbnN0IGNoYXIgKmJ1ZiwKZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggODdhYzE4OS4uZGQxZTU1NSAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlICJob3N0ZnMuaCIKICNpbmNsdWRlICJpbml0LmgiCiAjaW5jbHVkZSAia2Vybi5oIgogCiBzdHJ1Y3QgaG9zdGZzX2lub2RlX2luZm8gewotCWNoYXIgKmhvc3RfZmlsZW5hbWU7CiAJaW50IGZkOwogCWZtb2RlX3QgbW9kZTsKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwpAQCAtNDksNyArNDksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2lvcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2Rpcl9pb3BzOwotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfYW9wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBob3N0ZnNfbGlua19pb3BzOwogCiAjaWZuZGVmIE1PRFVMRQogc3RhdGljIGludCBfX2luaXQgaG9zdGZzX2FyZ3MoY2hhciAqb3B0aW9ucywgaW50ICphZGQpCkBAIC05MCw3MSArOTAsNTggQEAKICk7CiAjZW5kaWYKIAotc3RhdGljIGNoYXIgKmRlbnRyeV9uYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGV4dHJhKQorc3RhdGljIGNoYXIgKl9fZGVudHJ5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKLQljaGFyICpyb290LCAqbmFtZTsKLQlpbnQgbGVuOworCWNoYXIgKnAgPSBfX2RlbnRyeV9wYXRoKGRlbnRyeSwgbmFtZSwgUEFUSF9NQVgpOworCWNoYXIgKnJvb3Q7CisJc2l6ZV90IGxlbjsKIAotCWxlbiA9IDA7Ci0JcGFyZW50ID0gZGVudHJ5OwotCXdoaWxlIChwYXJlbnQtPmRfcGFyZW50ICE9IHBhcmVudCkgewotCQlsZW4gKz0gcGFyZW50LT5kX25hbWUubGVuICsgMTsKLQkJcGFyZW50ID0gcGFyZW50LT5kX3BhcmVudDsKLQl9CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAotCXJvb3QgPSBIT1NURlNfSShwYXJlbnQtPmRfaW5vZGUpLT5ob3N0X2ZpbGVuYW1lOwotCWxlbiArPSBzdHJsZW4ocm9vdCk7Ci0JbmFtZSA9IGttYWxsb2MobGVuICsgZXh0cmEgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAobmFtZSA9PSBOVUxMKQorCXJvb3QgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwlsZW4gPSBzdHJsZW4ocm9vdCk7CisJaWYgKElTX0VSUihwKSkgeworCQlfX3B1dG5hbWUobmFtZSk7CiAJCXJldHVybiBOVUxMOwotCi0JbmFtZVtsZW5dID0gJ1wwJzsKLQlwYXJlbnQgPSBkZW50cnk7Ci0Jd2hpbGUgKHBhcmVudC0+ZF9wYXJlbnQgIT0gcGFyZW50KSB7Ci0JCWxlbiAtPSBwYXJlbnQtPmRfbmFtZS5sZW4gKyAxOwotCQluYW1lW2xlbl0gPSAnLyc7Ci0JCXN0cm5jcHkoJm5hbWVbbGVuICsgMV0sIHBhcmVudC0+ZF9uYW1lLm5hbWUsCi0JCQlwYXJlbnQtPmRfbmFtZS5sZW4pOwotCQlwYXJlbnQgPSBwYXJlbnQtPmRfcGFyZW50OwogCX0KLQlzdHJuY3B5KG5hbWUsIHJvb3QsIHN0cmxlbihyb290KSk7CisJc3RybmNweShuYW1lLCByb290LCBQQVRIX01BWCk7CisJaWYgKGxlbiA+IHAgLSBuYW1lKSB7CisJCV9fcHV0bmFtZShuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWlmIChwID4gbmFtZSArIGxlbikgeworCQljaGFyICpzID0gbmFtZSArIGxlbjsKKwkJd2hpbGUgKCgqcysrID0gKnArKykgIT0gJ1wwJykKKwkJCTsKKwl9CiAJcmV0dXJuIG5hbWU7CiB9CiAKLXN0YXRpYyBjaGFyICppbm9kZV9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vLCBpbnQgZXh0cmEpCitzdGF0aWMgY2hhciAqZGVudHJ5X25hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwljaGFyICpuYW1lID0gX19nZXRuYW1lKCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKIAotCWRlbnRyeSA9IGxpc3RfZW50cnkoaW5vLT5pX2RlbnRyeS5uZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX2FsaWFzKTsKLQlyZXR1cm4gZGVudHJ5X25hbWUoZGVudHJ5LCBleHRyYSk7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJcmV0dXJuIF9fZGVudHJ5X25hbWUoZGVudHJ5LCBuYW1lKTsgLyogd2lsbCB1bmxvY2sgKi8KIH0KIAotc3RhdGljIGludCByZWFkX25hbWUoc3RydWN0IGlub2RlICppbm8sIGNoYXIgKm5hbWUpCitzdGF0aWMgY2hhciAqaW5vZGVfbmFtZShzdHJ1Y3QgaW5vZGUgKmlubykKIHsKLQkvKgotCSAqIFRoZSBub24taW50IGlub2RlIGZpZWxkcyBhcmUgY29waWVkIGludG8gaW50cyBieSBzdGF0X2ZpbGUgYW5kCi0JICogdGhlbiBjb3BpZWQgaW50byB0aGUgaW5vZGUgYmVjYXVzZSBwYXNzaW5nIHRoZSBhY3R1YWwgcG9pbnRlcnMKLQkgKiBpbiBhbmQgaGF2aW5nIHRoZW0gdHJlYXRlZCBhcyBpbnQgKiBicmVha3Mgb24gYmlnLWVuZGlhbiBtYWNoaW5lcwotCSAqLwotCWludCBlcnI7Ci0JaW50IGlfbW9kZSwgaV9ubGluaywgaV9ibGtzaXplOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBpX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGlfaW5vOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBpX2Jsb2NrczsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJY2hhciAqbmFtZSA9IF9fZ2V0bmFtZSgpOworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CiAKLQllcnIgPSBzdGF0X2ZpbGUobmFtZSwgJmlfaW5vLCAmaV9tb2RlLCAmaV9ubGluaywgJmluby0+aV91aWQsCi0JCQkmaW5vLT5pX2dpZCwgJmlfc2l6ZSwgJmluby0+aV9hdGltZSwgJmluby0+aV9tdGltZSwKLQkJCSZpbm8tPmlfY3RpbWUsICZpX2Jsa3NpemUsICZpX2Jsb2NrcywgLTEpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpbm8tPmlfaW5vID0gaV9pbm87Ci0JaW5vLT5pX21vZGUgPSBpX21vZGU7Ci0JaW5vLT5pX25saW5rID0gaV9ubGluazsKLQlpbm8tPmlfc2l6ZSA9IGlfc2l6ZTsKLQlpbm8tPmlfYmxvY2tzID0gaV9ibG9ja3M7Ci0JcmV0dXJuIDA7CisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmluby0+aV9kZW50cnkpKSB7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCV9fcHV0bmFtZShuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRlbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJmluby0+aV9kZW50cnksIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOworCXJldHVybiBfX2RlbnRyeV9uYW1lKGRlbnRyeSwgbmFtZSk7IC8qIHdpbGwgdW5sb2NrICovCiB9CiAKIHN0YXRpYyBjaGFyICpmb2xsb3dfbGluayhjaGFyICpsaW5rKQpAQCAtMjA1LDUzICsxOTIsMTEgQEAKIAlyZXR1cm4gRVJSX1BUUihuKTsKIH0KIAotc3RhdGljIGludCBob3N0ZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlubykKLXsKLQljaGFyICpuYW1lOwotCWludCBlcnIgPSAwOwotCi0JLyoKLQkgKiBVbmZvcnR1bmF0ZWx5LCB3ZSBhcmUgY2FsbGVkIGZyb20gaWdldCgpIHdoZW4gd2UgZG9uJ3QgaGF2ZSBhIGRlbnRyeQotCSAqIGFsbG9jYXRlZCB5ZXQuCi0JICovCi0JaWYgKGxpc3RfZW1wdHkoJmluby0+aV9kZW50cnkpKQotCQlnb3RvIG91dDsKLQotCWVyciA9IC1FTk9NRU07Ci0JbmFtZSA9IGlub2RlX25hbWUoaW5vLCAwKTsKLQlpZiAobmFtZSA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCWlmIChmaWxlX3R5cGUobmFtZSwgTlVMTCwgTlVMTCkgPT0gT1NfVFlQRV9TWU1MSU5LKSB7Ci0JCW5hbWUgPSBmb2xsb3dfbGluayhuYW1lKTsKLQkJaWYgKElTX0VSUihuYW1lKSkgewotCQkJZXJyID0gUFRSX0VSUihuYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JZXJyID0gcmVhZF9uYW1lKGlubywgbmFtZSk7Ci0Ja2ZyZWUobmFtZSk7Ci0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmhvc3Rmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlsb25nIHJldDsKLQotCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIDApOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwogCWlmICghaW5vZGUpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7Ci0JCXJldCA9IGhvc3Rmc19yZWFkX2lub2RlKGlub2RlKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWlnZXRfZmFpbGVkKGlub2RlKTsKLQkJCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JCX0KLQkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JfQogCXJldHVybiBpbm9kZTsKIH0KIApAQCAtMjY5LDcgKzIxNCw3IEBACiAJbG9uZyBsb25nIGZfZmlsZXM7CiAJbG9uZyBsb25nIGZfZmZyZWU7CiAKLQllcnIgPSBkb19zdGF0ZnMoSE9TVEZTX0koZGVudHJ5LT5kX3NiLT5zX3Jvb3QtPmRfaW5vZGUpLT5ob3N0X2ZpbGVuYW1lLAorCWVyciA9IGRvX3N0YXRmcyhkZW50cnktPmRfc2ItPnNfZnNfaW5mbywKIAkJCSZzZi0+Zl9ic2l6ZSwgJmZfYmxvY2tzLCAmZl9iZnJlZSwgJmZfYmF2YWlsLCAmZl9maWxlcywKIAkJCSZmX2ZmcmVlLCAmc2YtPmZfZnNpZCwgc2l6ZW9mKHNmLT5mX2ZzaWQpLAogCQkJJnNmLT5mX25hbWVsZW4sIHNmLT5mX3NwYXJlKTsKQEAgLTI4OCw0NyArMjMzLDMyIEBACiB7CiAJc3RydWN0IGhvc3Rmc19pbm9kZV9pbmZvICpoaTsKIAotCWhpID0ga21hbGxvYyhzaXplb2YoKmhpKSwgR0ZQX0tFUk5FTCk7CisJaGkgPSBremFsbG9jKHNpemVvZigqaGkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGkgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0KLQkqaGkgPSAoKHN0cnVjdCBob3N0ZnNfaW5vZGVfaW5mbykgeyAuaG9zdF9maWxlbmFtZQk9IE5VTEwsCi0JCQkJCSAgICAuZmQJCQk9IC0xLAotCQkJCQkgICAgLm1vZGUJCT0gMCB9KTsKKwloaS0+ZmQgPSAtMTsKIAlpbm9kZV9pbml0X29uY2UoJmhpLT52ZnNfaW5vZGUpOwogCXJldHVybiAmaGktPnZmc19pbm9kZTsKIH0KIAotc3RhdGljIHZvaWQgaG9zdGZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgaG9zdGZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCWlmIChIT1NURlNfSShpbm9kZSktPmZkICE9IC0xKSB7CiAJCWNsb3NlX2ZpbGUoJkhPU1RGU19JKGlub2RlKS0+ZmQpOwogCQlIT1NURlNfSShpbm9kZSktPmZkID0gLTE7CiAJfQotCWNsZWFyX2lub2RlKGlub2RlKTsKIH0KIAogc3RhdGljIHZvaWQgaG9zdGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrZnJlZShIT1NURlNfSShpbm9kZSktPmhvc3RfZmlsZW5hbWUpOwotCi0JLyoKLQkgKiBYWFg6IFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIHByb2JhYmx5LiBUaGUgY2hlY2sgaXMgaGVyZSBmb3IKLQkgKiBhZGRpdGlvbmFsIHNhZmV0eS4KLQkgKi8KLQlpZiAoSE9TVEZTX0koaW5vZGUpLT5mZCAhPSAtMSkgewotCQljbG9zZV9maWxlKCZIT1NURlNfSShpbm9kZSktPmZkKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNsb3NpbmcgaG9zdCBmZCBpbiAuZGVzdHJveV9pbm9kZVxuIik7Ci0JfQotCiAJa2ZyZWUoSE9TVEZTX0koaW5vZGUpKTsKIH0KIAogc3RhdGljIGludCBob3N0ZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKIHsKLQlzdHJ1Y3QgaW5vZGUgKnJvb3QgPSB2ZnMtPm1udF9zYi0+c19yb290LT5kX2lub2RlOwotCWNvbnN0IGNoYXIgKnJvb3RfcGF0aCA9IEhPU1RGU19JKHJvb3QpLT5ob3N0X2ZpbGVuYW1lOworCWNvbnN0IGNoYXIgKnJvb3RfcGF0aCA9IHZmcy0+bW50X3NiLT5zX2ZzX2luZm87CiAJc2l6ZV90IG9mZnNldCA9IHN0cmxlbihyb290X2lubykgKyAxOwogCiAJaWYgKHN0cmxlbihyb290X3BhdGgpID4gb2Zmc2V0KQpAQCAtMzM5LDkgKzI2OSw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBob3N0ZnNfc2JvcHMgPSB7CiAJLmFsbG9jX2lub2RlCT0gaG9zdGZzX2FsbG9jX2lub2RlLAotCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZSAgID0gaG9zdGZzX2RlbGV0ZV9pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGhvc3Rmc19kZXN0cm95X2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGhvc3Rmc19ldmljdF9pbm9kZSwKIAkuc3RhdGZzCQk9IGhvc3Rmc19zdGF0ZnMsCiAJLnNob3dfb3B0aW9ucwk9IGhvc3Rmc19zaG93X29wdGlvbnMsCiB9OwpAQCAtMzUzLDExICsyODIsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgbmV4dCwgaW5vOwogCWludCBlcnJvciwgbGVuOwogCi0JbmFtZSA9IGRlbnRyeV9uYW1lKGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCW5hbWUgPSBkZW50cnlfbmFtZShmaWxlLT5mX3BhdGguZGVudHJ5KTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkaXIgPSBvcGVuX2RpcihuYW1lLCAmZXJyb3IpOwotCWtmcmVlKG5hbWUpOworCV9fcHV0bmFtZShuYW1lKTsKIAlpZiAoZGlyID09IE5VTEwpCiAJCXJldHVybiAtZXJyb3I7CiAJbmV4dCA9IGZpbGUtPmZfcG9zOwpAQCAtMzczLDQwICszMDIsNTkgQEAKIAogaW50IGhvc3Rmc19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmaWxlKQogeworCXN0YXRpYyBERUZJTkVfTVVURVgob3Blbl9tdXRleCk7CiAJY2hhciAqbmFtZTsKIAlmbW9kZV90IG1vZGUgPSAwOworCWludCBlcnI7CiAJaW50IHIgPSAwLCB3ID0gMCwgZmQ7CiAKIAltb2RlID0gZmlsZS0+Zl9tb2RlICYgKEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSk7CiAJaWYgKChtb2RlICYgSE9TVEZTX0koaW5vKS0+bW9kZSkgPT0gbW9kZSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIFRoZSBmaWxlIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBvcGVuZWQsIGJ1dCB3aXRoIHRoZSB3cm9uZyBhY2Nlc3MsCi0JICogc28gdGhpcyByZXNldHMgdGhpbmdzIGFuZCByZW9wZW5zIHRoZSBmaWxlIHdpdGggdGhlIG5ldyBhY2Nlc3MuCi0JICovCi0JaWYgKEhPU1RGU19JKGlubyktPmZkICE9IC0xKSB7Ci0JCWNsb3NlX2ZpbGUoJkhPU1RGU19JKGlubyktPmZkKTsKLQkJSE9TVEZTX0koaW5vKS0+ZmQgPSAtMTsKLQl9CisJbW9kZSB8PSBIT1NURlNfSShpbm8pLT5tb2RlOwogCi0JSE9TVEZTX0koaW5vKS0+bW9kZSB8PSBtb2RlOwotCWlmIChIT1NURlNfSShpbm8pLT5tb2RlICYgRk1PREVfUkVBRCkKK3JldHJ5OgorCWlmIChtb2RlICYgRk1PREVfUkVBRCkKIAkJciA9IDE7Ci0JaWYgKEhPU1RGU19JKGlubyktPm1vZGUgJiBGTU9ERV9XUklURSkKKwlpZiAobW9kZSAmIEZNT0RFX1dSSVRFKQogCQl3ID0gMTsKIAlpZiAodykKIAkJciA9IDE7CiAKLQluYW1lID0gZGVudHJ5X25hbWUoZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJbmFtZSA9IGRlbnRyeV9uYW1lKGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZmQgPSBvcGVuX2ZpbGUobmFtZSwgciwgdywgYXBwZW5kKTsKLQlrZnJlZShuYW1lKTsKKwlfX3B1dG5hbWUobmFtZSk7CiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIGZkOwotCUZJTEVfSE9TVEZTX0koZmlsZSktPmZkID0gZmQ7CisKKwltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKKwkvKiBzb21lYm9keSBlbHNlIGhhZCBoYW5kbGVkIGl0IGZpcnN0PyAqLworCWlmICgobW9kZSAmIEhPU1RGU19JKGlubyktPm1vZGUpID09IG1vZGUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgobW9kZSB8IEhPU1RGU19JKGlubyktPm1vZGUpICE9IG1vZGUpIHsKKwkJbW9kZSB8PSBIT1NURlNfSShpbm8pLT5tb2RlOworCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOworCQljbG9zZV9maWxlKCZmZCk7CisJCWdvdG8gcmV0cnk7CisJfQorCWlmIChIT1NURlNfSShpbm8pLT5mZCA9PSAtMSkgeworCQlIT1NURlNfSShpbm8pLT5mZCA9IGZkOworCX0gZWxzZSB7CisJCWVyciA9IHJlcGxhY2VfZmlsZShmZCwgSE9TVEZTX0koaW5vKS0+ZmQpOworCQljbG9zZV9maWxlKCZmZCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlIT1NURlNfSShpbm8pLT5tb2RlID0gbW9kZTsKKwltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NDQsNTQgKzQ5Miw1MCBAQAogCS53cml0ZV9lbmQJPSBob3N0ZnNfd3JpdGVfZW5kLAogfTsKIAotc3RhdGljIGludCBpbml0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgcmVhZF9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vLCBjaGFyICpuYW1lKQogewotCWNoYXIgKm5hbWU7Ci0JaW50IHR5cGUsIGVyciA9IC1FTk9NRU07Ci0JaW50IG1haiwgbWluOwotCWRldl90IHJkZXYgPSAwOworCWRldl90IHJkZXY7CisJc3RydWN0IGhvc3Rmc19zdGF0IHN0OworCWludCBlcnIgPSBzdGF0X2ZpbGUobmFtZSwgJnN0LCAtMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWlmIChkZW50cnkpIHsKLQkJbmFtZSA9IGRlbnRyeV9uYW1lKGRlbnRyeSwgMCk7Ci0JCWlmIChuYW1lID09IE5VTEwpCi0JCQlnb3RvIG91dDsKLQkJdHlwZSA9IGZpbGVfdHlwZShuYW1lLCAmbWFqLCAmbWluKTsKLQkJLyogUmVlbmNvZGUgbWFqIGFuZCBtaW4gd2l0aCB0aGUga2VybmVsIGVuY29kaW5nLiovCi0JCXJkZXYgPSBNS0RFVihtYWosIG1pbik7Ci0JCWtmcmVlKG5hbWUpOworCS8qIFJlZW5jb2RlIG1haiBhbmQgbWluIHdpdGggdGhlIGtlcm5lbCBlbmNvZGluZy4qLworCXJkZXYgPSBNS0RFVihzdC5tYWosIHN0Lm1pbik7CisKKwlzd2l0Y2ggKHN0Lm1vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZMTks6CisJCWluby0+aV9vcCA9ICZob3N0ZnNfbGlua19pb3BzOworCQlicmVhazsKKwljYXNlIFNfSUZESVI6CisJCWluby0+aV9vcCA9ICZob3N0ZnNfZGlyX2lvcHM7CisJCWluby0+aV9mb3AgPSAmaG9zdGZzX2Rpcl9mb3BzOworCQlicmVhazsKKwljYXNlIFNfSUZDSFI6CisJY2FzZSBTX0lGQkxLOgorCWNhc2UgU19JRklGTzoKKwljYXNlIFNfSUZTT0NLOgorCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vLCBzdC5tb2RlICYgU19JRk1ULCByZGV2KTsKKwkJaW5vLT5pX29wID0gJmhvc3Rmc19pb3BzOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWluby0+aV9vcCA9ICZob3N0ZnNfaW9wczsKKwkJaW5vLT5pX2ZvcCA9ICZob3N0ZnNfZmlsZV9mb3BzOworCQlpbm8tPmlfbWFwcGluZy0+YV9vcHMgPSAmaG9zdGZzX2FvcHM7CiAJfQotCWVsc2UgdHlwZSA9IE9TX1RZUEVfRElSOwogCi0JZXJyID0gMDsKLQlpZiAodHlwZSA9PSBPU19UWVBFX1NZTUxJTkspCi0JCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCWVsc2UgaWYgKHR5cGUgPT0gT1NfVFlQRV9ESVIpCi0JCWlub2RlLT5pX29wID0gJmhvc3Rmc19kaXJfaW9wczsKLQllbHNlIGlub2RlLT5pX29wID0gJmhvc3Rmc19pb3BzOwotCi0JaWYgKHR5cGUgPT0gT1NfVFlQRV9ESVIpIGlub2RlLT5pX2ZvcCA9ICZob3N0ZnNfZGlyX2ZvcHM7Ci0JZWxzZSBpbm9kZS0+aV9mb3AgPSAmaG9zdGZzX2ZpbGVfZm9wczsKLQotCWlmICh0eXBlID09IE9TX1RZUEVfU1lNTElOSykKLQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmaG9zdGZzX2xpbmtfYW9wczsKLQllbHNlIGlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmhvc3Rmc19hb3BzOwotCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBPU19UWVBFX0NIQVJERVY6Ci0JCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgU19JRkNIUiwgcmRldik7Ci0JCWJyZWFrOwotCWNhc2UgT1NfVFlQRV9CTE9DS0RFVjoKLQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBTX0lGQkxLLCByZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBPU19UWVBFX0ZJRk86Ci0JCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgU19JRklGTywgMCk7Ci0JCWJyZWFrOwotCWNhc2UgT1NfVFlQRV9TT0NLOgotCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIFNfSUZTT0NLLCAwKTsKLQkJYnJlYWs7Ci0JfQotIG91dDoKLQlyZXR1cm4gZXJyOworCWluby0+aV9pbm8gPSBzdC5pbm87CisJaW5vLT5pX21vZGUgPSBzdC5tb2RlOworCWluby0+aV9ubGluayA9IHN0Lm5saW5rOworCWluby0+aV91aWQgPSBzdC51aWQ7CisJaW5vLT5pX2dpZCA9IHN0LmdpZDsKKwlpbm8tPmlfYXRpbWUgPSBzdC5hdGltZTsKKwlpbm8tPmlfbXRpbWUgPSBzdC5tdGltZTsKKwlpbm8tPmlfY3RpbWUgPSBzdC5jdGltZTsKKwlpbm8tPmlfc2l6ZSA9IHN0LnNpemU7CisJaW5vLT5pX2Jsb2NrcyA9IHN0LmJsb2NrczsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGhvc3Rmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCkBAIC02MDcsMTIgKzU1MSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVycm9yID0gaW5pdF9pbm9kZShpbm9kZSwgZGVudHJ5KTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3B1dDsKLQogCWVycm9yID0gLUVOT01FTTsKLQluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5LCAwKTsKKwluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5KTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlnb3RvIG91dF9wdXQ7CiAKQEAgLTYyMiw5ICs1NjIsMTAgQEAKIAkJCSBtb2RlICYgU19JUk9USCwgbW9kZSAmIFNfSVdPVEgsIG1vZGUgJiBTX0lYT1RIKTsKIAlpZiAoZmQgPCAwKQogCQllcnJvciA9IGZkOwotCWVsc2UgZXJyb3IgPSByZWFkX25hbWUoaW5vZGUsIG5hbWUpOworCWVsc2UKKwkJZXJyb3IgPSByZWFkX25hbWUoaW5vZGUsIG5hbWUpOwogCi0Ja2ZyZWUobmFtZSk7CisJX19wdXRuYW1lKG5hbWUpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfcHV0OwogCkBAIC02NTIsMTcgKzU5MywxNCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBpbml0X2lub2RlKGlub2RlLCBkZW50cnkpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3B1dDsKLQogCWVyciA9IC1FTk9NRU07Ci0JbmFtZSA9IGRlbnRyeV9uYW1lKGRlbnRyeSwgMCk7CisJbmFtZSA9IGRlbnRyeV9uYW1lKGRlbnRyeSk7CiAJaWYgKG5hbWUgPT0gTlVMTCkKIAkJZ290byBvdXRfcHV0OwogCiAJZXJyID0gcmVhZF9uYW1lKGlub2RlLCBuYW1lKTsKLQlrZnJlZShuYW1lKTsKKworCV9fcHV0bmFtZShuYW1lKTsKIAlpZiAoZXJyID09IC1FTk9FTlQpIHsKIAkJaXB1dChpbm9kZSk7CiAJCWlub2RlID0gTlVMTDsKQEAgLTY4MCwzNiArNjE4LDIxIEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAotc3RhdGljIGNoYXIgKmlub2RlX2RlbnRyeV9uYW1lKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JY2hhciAqZmlsZTsKLQlpbnQgbGVuOwotCi0JZmlsZSA9IGlub2RlX25hbWUoaW5vLCBkZW50cnktPmRfbmFtZS5sZW4gKyAxKTsKLQlpZiAoZmlsZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlzdHJjYXQoZmlsZSwgIi8iKTsKLQlsZW4gPSBzdHJsZW4oZmlsZSk7Ci0Jc3RybmNhdChmaWxlLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4pOwotCWZpbGVbbGVuICsgZGVudHJ5LT5kX25hbWUubGVuXSA9ICdcMCc7Ci0JcmV0dXJuIGZpbGU7Ci19Ci0KIGludCBob3N0ZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICp0bywgc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBkZW50cnkgKmZyb20pCiB7CiAJY2hhciAqZnJvbV9uYW1lLCAqdG9fbmFtZTsKIAlpbnQgZXJyOwogCi0JaWYgKChmcm9tX25hbWUgPSBpbm9kZV9kZW50cnlfbmFtZShpbm8sIGZyb20pKSA9PSBOVUxMKQorCWlmICgoZnJvbV9uYW1lID0gZGVudHJ5X25hbWUoZnJvbSkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCXRvX25hbWUgPSBkZW50cnlfbmFtZSh0bywgMCk7CisJdG9fbmFtZSA9IGRlbnRyeV9uYW1lKHRvKTsKIAlpZiAodG9fbmFtZSA9PSBOVUxMKSB7Ci0JCWtmcmVlKGZyb21fbmFtZSk7CisJCV9fcHV0bmFtZShmcm9tX25hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJZXJyID0gbGlua19maWxlKHRvX25hbWUsIGZyb21fbmFtZSk7Ci0Ja2ZyZWUoZnJvbV9uYW1lKTsKLQlrZnJlZSh0b19uYW1lKTsKKwlfX3B1dG5hbWUoZnJvbV9uYW1lKTsKKwlfX3B1dG5hbWUodG9fbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzE4LDEzICs2NDEsMTQgQEAKIAljaGFyICpmaWxlOwogCWludCBlcnI7CiAKLQlpZiAoKGZpbGUgPSBpbm9kZV9kZW50cnlfbmFtZShpbm8sIGRlbnRyeSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwogCWlmIChhcHBlbmQpCiAJCXJldHVybiAtRVBFUk07CiAKKwlpZiAoKGZpbGUgPSBkZW50cnlfbmFtZShkZW50cnkpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWVyciA9IHVubGlua19maWxlKGZpbGUpOwotCWtmcmVlKGZpbGUpOworCV9fcHV0bmFtZShmaWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MzMsMTAgKzY1NywxMCBAQAogCWNoYXIgKmZpbGU7CiAJaW50IGVycjsKIAotCWlmICgoZmlsZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZGVudHJ5KSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUgPSBkZW50cnlfbmFtZShkZW50cnkpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcnIgPSBtYWtlX3N5bWxpbmsoZmlsZSwgdG8pOwotCWtmcmVlKGZpbGUpOworCV9fcHV0bmFtZShmaWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03NDUsMTAgKzY2OSwxMCBAQAogCWNoYXIgKmZpbGU7CiAJaW50IGVycjsKIAotCWlmICgoZmlsZSA9IGlub2RlX2RlbnRyeV9uYW1lKGlubywgZGVudHJ5KSkgPT0gTlVMTCkKKwlpZiAoKGZpbGUgPSBkZW50cnlfbmFtZShkZW50cnkpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcnIgPSBkb19ta2RpcihmaWxlLCBtb2RlKTsKLQlrZnJlZShmaWxlKTsKKwlfX3B1dG5hbWUoZmlsZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNzU3LDEwICs2ODEsMTAgQEAKIAljaGFyICpmaWxlOwogCWludCBlcnI7CiAKLQlpZiAoKGZpbGUgPSBpbm9kZV9kZW50cnlfbmFtZShpbm8sIGRlbnRyeSkpID09IE5VTEwpCisJaWYgKChmaWxlID0gZGVudHJ5X25hbWUoZGVudHJ5KSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZXJyID0gZG9fcm1kaXIoZmlsZSk7Ci0Ja2ZyZWUoZmlsZSk7CisJX19wdXRuYW1lKGZpbGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTc3NiwyMiArNzAwLDIwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGluaXRfaW5vZGUoaW5vZGUsIGRlbnRyeSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfcHV0OwotCiAJZXJyID0gLUVOT01FTTsKLQluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5LCAwKTsKKwluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5KTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlnb3RvIG91dF9wdXQ7CiAKIAlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIGRldik7CiAJZXJyID0gZG9fbWtub2QobmFtZSwgbW9kZSwgTUFKT1IoZGV2KSwgTUlOT1IoZGV2KSk7Ci0JaWYgKGVycikKKwlpZiAoIWVycikKIAkJZ290byBvdXRfZnJlZTsKIAogCWVyciA9IHJlYWRfbmFtZShpbm9kZSwgbmFtZSk7Ci0Ja2ZyZWUobmFtZSk7CisJX19wdXRuYW1lKG5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3B1dDsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7CiAKQEAgLTc5OSw3ICs3MjEsNyBAQAogCXJldHVybiAwOwogCiAgb3V0X2ZyZWU6Ci0Ja2ZyZWUobmFtZSk7CisJX19wdXRuYW1lKG5hbWUpOwogIG91dF9wdXQ6CiAJaXB1dChpbm9kZSk7CiAgb3V0OgpAQCAtODEyLDE1ICs3MzQsMTUgQEAKIAljaGFyICpmcm9tX25hbWUsICp0b19uYW1lOwogCWludCBlcnI7CiAKLQlpZiAoKGZyb21fbmFtZSA9IGlub2RlX2RlbnRyeV9uYW1lKGZyb21faW5vLCBmcm9tKSkgPT0gTlVMTCkKKwlpZiAoKGZyb21fbmFtZSA9IGRlbnRyeV9uYW1lKGZyb20pKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoKHRvX25hbWUgPSBpbm9kZV9kZW50cnlfbmFtZSh0b19pbm8sIHRvKSkgPT0gTlVMTCkgewotCQlrZnJlZShmcm9tX25hbWUpOworCWlmICgodG9fbmFtZSA9IGRlbnRyeV9uYW1lKHRvKSkgPT0gTlVMTCkgeworCQlfX3B1dG5hbWUoZnJvbV9uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWVyciA9IHJlbmFtZV9maWxlKGZyb21fbmFtZSwgdG9fbmFtZSk7Ci0Ja2ZyZWUoZnJvbV9uYW1lKTsKLQlrZnJlZSh0b19uYW1lKTsKKwlfX3B1dG5hbWUoZnJvbV9uYW1lKTsKKwlfX3B1dG5hbWUodG9fbmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODMyLDcgKzc1NCw3IEBACiAJaWYgKGRlc2lyZWQgJiBNQVlfUkVBRCkgciA9IDE7CiAJaWYgKGRlc2lyZWQgJiBNQVlfV1JJVEUpIHcgPSAxOwogCWlmIChkZXNpcmVkICYgTUFZX0VYRUMpIHggPSAxOwotCW5hbWUgPSBpbm9kZV9uYW1lKGlubywgMCk7CisJbmFtZSA9IGlub2RlX25hbWUoaW5vKTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODQxLDcgKzc2Myw3IEBACiAJCWVyciA9IDA7CiAJZWxzZQogCQllcnIgPSBhY2Nlc3NfZmlsZShuYW1lLCByLCB3LCB4KTsKLQlrZnJlZShuYW1lKTsKKwlfX3B1dG5hbWUobmFtZSk7CiAJaWYgKCFlcnIpCiAJCWVyciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm8sIGRlc2lyZWQsIE5VTEwpOwogCXJldHVybiBlcnI7CkBAIC04NDksMTMgKzc3MSwxNCBAQAogCiBpbnQgaG9zdGZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaG9zdGZzX2lhdHRyIGF0dHJzOwogCWNoYXIgKm5hbWU7CiAJaW50IGVycjsKIAotCWludCBmZCA9IEhPU1RGU19JKGRlbnRyeS0+ZF9pbm9kZSktPmZkOworCWludCBmZCA9IEhPU1RGU19JKGlub2RlKS0+ZmQ7CiAKLQllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soZGVudHJ5LT5kX2lub2RlLCBhdHRyKTsKKwllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTg5NywxNSArODIwLDI2IEBACiAJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NVElNRV9TRVQpIHsKIAkJYXR0cnMuaWFfdmFsaWQgfD0gSE9TVEZTX0FUVFJfTVRJTUVfU0VUOwogCX0KLQluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5LCAwKTsKKwluYW1lID0gZGVudHJ5X25hbWUoZGVudHJ5KTsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcnIgPSBzZXRfYXR0cihuYW1lLCAmYXR0cnMsIGZkKTsKLQlrZnJlZShuYW1lKTsKKwlfX3B1dG5hbWUobmFtZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXJldHVybiBpbm9kZV9zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgYXR0cik7CisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBob3N0ZnNfaW9wcyA9IHsKQEAgLTkzNSwzMiArODY5LDQxIEBACiAJLnNldGF0dHIJPSBob3N0ZnNfc2V0YXR0ciwKIH07CiAKLWludCBob3N0ZnNfbGlua19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgdm9pZCAqaG9zdGZzX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JY2hhciAqYnVmZmVyLCAqbmFtZTsKLQlpbnQgZXJyOwotCi0JYnVmZmVyID0ga21hcChwYWdlKTsKLQluYW1lID0gaW5vZGVfbmFtZShwYWdlLT5tYXBwaW5nLT5ob3N0LCAwKTsKLQlpZiAobmFtZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQllcnIgPSBob3N0ZnNfZG9fcmVhZGxpbmsobmFtZSwgYnVmZmVyLCBQQUdFX0NBQ0hFX1NJWkUpOwotCWtmcmVlKG5hbWUpOwotCWlmIChlcnIgPT0gUEFHRV9DQUNIRV9TSVpFKQotCQllcnIgPSAtRTJCSUc7Ci0JZWxzZSBpZiAoZXJyID4gMCkgewotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlpZiAoUGFnZUVycm9yKHBhZ2UpKSBDbGVhclBhZ2VFcnJvcihwYWdlKTsKLQkJZXJyID0gMDsKKwljaGFyICpsaW5rID0gX19nZXRuYW1lKCk7CisJaWYgKGxpbmspIHsKKwkJY2hhciAqcGF0aCA9IGRlbnRyeV9uYW1lKGRlbnRyeSk7CisJCWludCBlcnIgPSAtRU5PTUVNOworCQlpZiAocGF0aCkgeworCQkJaW50IGVyciA9IGhvc3Rmc19kb19yZWFkbGluayhwYXRoLCBsaW5rLCBQQVRIX01BWCk7CisJCQlpZiAoZXJyID09IFBBVEhfTUFYKQorCQkJCWVyciA9IC1FMkJJRzsKKwkJCV9fcHV0bmFtZShwYXRoKTsKKwkJfQorCQlpZiAoZXJyIDwgMCkgeworCQkJX19wdXRuYW1lKGxpbmspOworCQkJbGluayA9IEVSUl9QVFIoZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCWxpbmsgPSBFUlJfUFRSKC1FTk9NRU0pOwogCX0KLQlrdW5tYXAocGFnZSk7Ci0JdW5sb2NrX3BhZ2UocGFnZSk7Ci0JcmV0dXJuIGVycjsKKworCW5kX3NldF9saW5rKG5kLCBsaW5rKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfYW9wcyA9IHsKLQkucmVhZHBhZ2UJPSBob3N0ZnNfbGlua19yZWFkcGFnZSwKK3N0YXRpYyB2b2lkIGhvc3Rmc19wdXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kLCB2b2lkICpjb29raWUpCit7CisJY2hhciAqcyA9IG5kX2dldF9saW5rKG5kKTsKKwlpZiAoIUlTX0VSUihzKSkKKwkJX19wdXRuYW1lKHMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaG9zdGZzX2xpbmtfaW9wcyA9IHsKKwkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAorCS5mb2xsb3dfbGluawk9IGhvc3Rmc19mb2xsb3dfbGluaywKKwkucHV0X2xpbmsJPSBob3N0ZnNfcHV0X2xpbmssCiB9OwogCiBzdGF0aWMgaW50IGhvc3Rmc19maWxsX3NiX2NvbW1vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkLCBpbnQgc2lsZW50KQpAQCAtOTgwLDQ5ICs5MjMsNDEgQEAKIAkJcmVxX3Jvb3QgPSAiIjsKIAogCWVyciA9IC1FTk9NRU07Ci0JaG9zdF9yb290X3BhdGggPSBrbWFsbG9jKHN0cmxlbihyb290X2lubykgKyAxCi0JCQkJICsgc3RybGVuKHJlcV9yb290KSArIDEsIEdGUF9LRVJORUwpOworCXNiLT5zX2ZzX2luZm8gPSBob3N0X3Jvb3RfcGF0aCA9CisJCWttYWxsb2Moc3RybGVuKHJvb3RfaW5vKSArIHN0cmxlbihyZXFfcm9vdCkgKyAyLCBHRlBfS0VSTkVMKTsKIAlpZiAoaG9zdF9yb290X3BhdGggPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlzcHJpbnRmKGhvc3Rfcm9vdF9wYXRoLCAiJXMvJXMiLCByb290X2lubywgcmVxX3Jvb3QpOwogCi0Jcm9vdF9pbm9kZSA9IGhvc3Rmc19pZ2V0KHNiKTsKLQlpZiAoSVNfRVJSKHJvb3RfaW5vZGUpKSB7Ci0JCWVyciA9IFBUUl9FUlIocm9vdF9pbm9kZSk7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQorCXJvb3RfaW5vZGUgPSBuZXdfaW5vZGUoc2IpOworCWlmICghcm9vdF9pbm9kZSkKKwkJZ290byBvdXQ7CiAKLQllcnIgPSBpbml0X2lub2RlKHJvb3RfaW5vZGUsIE5VTEwpOworCWVyciA9IHJlYWRfbmFtZShyb290X2lub2RlLCBob3N0X3Jvb3RfcGF0aCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcHV0OwogCi0JSE9TVEZTX0kocm9vdF9pbm9kZSktPmhvc3RfZmlsZW5hbWUgPSBob3N0X3Jvb3RfcGF0aDsKLQkvKgotCSAqIEF2b2lkIHRoYXQgaW4gdGhlIGVycm9yIHBhdGgsIGlwdXQocm9vdF9pbm9kZSkgZnJlZXMgYWdhaW4KLQkgKiBob3N0X3Jvb3RfcGF0aCB0aHJvdWdoIGhvc3Rmc19kZXN0cm95X2lub2RlIQotCSAqLwotCWhvc3Rfcm9vdF9wYXRoID0gTlVMTDsKKwlpZiAoU19JU0xOSyhyb290X2lub2RlLT5pX21vZGUpKSB7CisJCWNoYXIgKm5hbWUgPSBmb2xsb3dfbGluayhob3N0X3Jvb3RfcGF0aCk7CisJCWlmIChJU19FUlIobmFtZSkpCisJCQllcnIgPSBQVFJfRVJSKG5hbWUpOworCQllbHNlCisJCQllcnIgPSByZWFkX25hbWUocm9vdF9pbm9kZSwgbmFtZSk7CisJCWtmcmVlKG5hbWUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcHV0OworCX0KIAogCWVyciA9IC1FTk9NRU07CiAJc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290X2lub2RlKTsKIAlpZiAoc2ItPnNfcm9vdCA9PSBOVUxMKQogCQlnb3RvIG91dF9wdXQ7CiAKLQllcnIgPSBob3N0ZnNfcmVhZF9pbm9kZShyb290X2lub2RlKTsKLQlpZiAoZXJyKSB7Ci0JCS8qIE5vIGlwdXQgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdGhlIGRwdXQgZG9lcyB0aGF0IGZvciB1cyAqLwotCQlkcHV0KHNiLT5zX3Jvb3QpOwotCQlzYi0+c19yb290ID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJcmV0dXJuIDA7CiAKIG91dF9wdXQ6CiAJaXB1dChyb290X2lub2RlKTsKLW91dF9mcmVlOgotCWtmcmVlKGhvc3Rfcm9vdF9wYXRoKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTAzNCwxMSArOTY5LDE3IEBACiAJcmV0dXJuIGdldF9zYl9ub2Rldih0eXBlLCBmbGFncywgZGF0YSwgaG9zdGZzX2ZpbGxfc2JfY29tbW9uLCBtbnQpOwogfQogCitzdGF0aWMgdm9pZCBob3N0ZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJa2lsbF9hbm9uX3N1cGVyKHMpOworCWtmcmVlKHMtPnNfZnNfaW5mbyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBob3N0ZnNfdHlwZSA9IHsKIAkub3duZXIgCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lIAkJPSAiaG9zdGZzIiwKIAkuZ2V0X3NiIAk9IGhvc3Rmc19yZWFkX3NiLAotCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAorCS5raWxsX3NiCT0gaG9zdGZzX2tpbGxfc2IsCiAJLmZzX2ZsYWdzIAk9IDAsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9ob3N0ZnMvaG9zdGZzX3VzZXIuYyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfdXNlci5jCmluZGV4IGI3OTQyNGYuLjY3NzdhYTAgMTAwNjQ0Ci0tLSBhL2ZzL2hvc3Rmcy9ob3N0ZnNfdXNlci5jCisrKyBiL2ZzL2hvc3Rmcy9ob3N0ZnNfdXNlci5jCkBAIC0xOSwxMSArMTksMjcgQEAKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSA8dXRpbWUuaD4KIAotaW50IHN0YXRfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIGxvbmcgKmlub2RlX291dCwgaW50ICptb2RlX291dCwKLQkgICAgICBpbnQgKm5saW5rX291dCwgaW50ICp1aWRfb3V0LCBpbnQgKmdpZF9vdXQsCi0JICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzaXplX291dCwgc3RydWN0IHRpbWVzcGVjICphdGltZV9vdXQsCi0JICAgICAgc3RydWN0IHRpbWVzcGVjICptdGltZV9vdXQsIHN0cnVjdCB0aW1lc3BlYyAqY3RpbWVfb3V0LAotCSAgICAgIGludCAqYmxrc2l6ZV9vdXQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqYmxvY2tzX291dCwgaW50IGZkKQorc3RhdGljIHZvaWQgc3RhdDY0X3RvX2hvc3Rmcyhjb25zdCBzdHJ1Y3Qgc3RhdDY0ICpidWYsIHN0cnVjdCBob3N0ZnNfc3RhdCAqcCkKK3sKKwlwLT5pbm8gPSBidWYtPnN0X2lubzsKKwlwLT5tb2RlID0gYnVmLT5zdF9tb2RlOworCXAtPm5saW5rID0gYnVmLT5zdF9ubGluazsKKwlwLT51aWQgPSBidWYtPnN0X3VpZDsKKwlwLT5naWQgPSBidWYtPnN0X2dpZDsKKwlwLT5zaXplID0gYnVmLT5zdF9zaXplOworCXAtPmF0aW1lLnR2X3NlYyA9IGJ1Zi0+c3RfYXRpbWU7CisJcC0+YXRpbWUudHZfbnNlYyA9IDA7CisJcC0+Y3RpbWUudHZfc2VjID0gYnVmLT5zdF9jdGltZTsKKwlwLT5jdGltZS50dl9uc2VjID0gMDsKKwlwLT5tdGltZS50dl9zZWMgPSBidWYtPnN0X210aW1lOworCXAtPm10aW1lLnR2X25zZWMgPSAwOworCXAtPmJsa3NpemUgPSBidWYtPnN0X2Jsa3NpemU7CisJcC0+YmxvY2tzID0gYnVmLT5zdF9ibG9ja3M7CisJcC0+bWFqID0gb3NfbWFqb3IoYnVmLT5zdF9yZGV2KTsKKwlwLT5taW4gPSBvc19taW5vcihidWYtPnN0X3JkZXYpOworfQorCitpbnQgc3RhdF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBob3N0ZnNfc3RhdCAqcCwgaW50IGZkKQogewogCXN0cnVjdCBzdGF0NjQgYnVmOwogCkBAIC0zMyw2OCArNDksMTAgQEAKIAl9IGVsc2UgaWYgKGxzdGF0NjQocGF0aCwgJmJ1ZikgPCAwKSB7CiAJCXJldHVybiAtZXJybm87CiAJfQotCi0JaWYgKGlub2RlX291dCAhPSBOVUxMKQotCQkqaW5vZGVfb3V0ID0gYnVmLnN0X2lubzsKLQlpZiAobW9kZV9vdXQgIT0gTlVMTCkKLQkJKm1vZGVfb3V0ID0gYnVmLnN0X21vZGU7Ci0JaWYgKG5saW5rX291dCAhPSBOVUxMKQotCQkqbmxpbmtfb3V0ID0gYnVmLnN0X25saW5rOwotCWlmICh1aWRfb3V0ICE9IE5VTEwpCi0JCSp1aWRfb3V0ID0gYnVmLnN0X3VpZDsKLQlpZiAoZ2lkX291dCAhPSBOVUxMKQotCQkqZ2lkX291dCA9IGJ1Zi5zdF9naWQ7Ci0JaWYgKHNpemVfb3V0ICE9IE5VTEwpCi0JCSpzaXplX291dCA9IGJ1Zi5zdF9zaXplOwotCWlmIChhdGltZV9vdXQgIT0gTlVMTCkgewotCQlhdGltZV9vdXQtPnR2X3NlYyA9IGJ1Zi5zdF9hdGltZTsKLQkJYXRpbWVfb3V0LT50dl9uc2VjID0gMDsKLQl9Ci0JaWYgKG10aW1lX291dCAhPSBOVUxMKSB7Ci0JCW10aW1lX291dC0+dHZfc2VjID0gYnVmLnN0X210aW1lOwotCQltdGltZV9vdXQtPnR2X25zZWMgPSAwOwotCX0KLQlpZiAoY3RpbWVfb3V0ICE9IE5VTEwpIHsKLQkJY3RpbWVfb3V0LT50dl9zZWMgPSBidWYuc3RfY3RpbWU7Ci0JCWN0aW1lX291dC0+dHZfbnNlYyA9IDA7Ci0JfQotCWlmIChibGtzaXplX291dCAhPSBOVUxMKQotCQkqYmxrc2l6ZV9vdXQgPSBidWYuc3RfYmxrc2l6ZTsKLQlpZiAoYmxvY2tzX291dCAhPSBOVUxMKQotCQkqYmxvY2tzX291dCA9IGJ1Zi5zdF9ibG9ja3M7CisJc3RhdDY0X3RvX2hvc3RmcygmYnVmLCBwKTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IGZpbGVfdHlwZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1haiwgaW50ICptaW4pCi17Ci0gCXN0cnVjdCBzdGF0NjQgYnVmOwotCi0JaWYgKGxzdGF0NjQocGF0aCwgJmJ1ZikgPCAwKQotCQlyZXR1cm4gLWVycm5vOwotCS8qCi0JICogV2UgY2Fubm90IHBhc3MgcmRldiBhcyBpcyBiZWNhdXNlIGdsaWJjIGFuZCB0aGUga2VybmVsIGRpc2FncmVlCi0JICogYWJvdXQgaXRzIGRlZmluaXRpb24uCi0JICovCi0JaWYgKG1haiAhPSBOVUxMKQotCQkqbWFqID0gbWFqb3IoYnVmLnN0X3JkZXYpOwotCWlmIChtaW4gIT0gTlVMTCkKLQkJKm1pbiA9IG1pbm9yKGJ1Zi5zdF9yZGV2KTsKLQotCWlmIChTX0lTRElSKGJ1Zi5zdF9tb2RlKSkKLQkJcmV0dXJuIE9TX1RZUEVfRElSOwotCWVsc2UgaWYgKFNfSVNMTksoYnVmLnN0X21vZGUpKQotCQlyZXR1cm4gT1NfVFlQRV9TWU1MSU5LOwotCWVsc2UgaWYgKFNfSVNDSFIoYnVmLnN0X21vZGUpKQotCQlyZXR1cm4gT1NfVFlQRV9DSEFSREVWOwotCWVsc2UgaWYgKFNfSVNCTEsoYnVmLnN0X21vZGUpKQotCQlyZXR1cm4gT1NfVFlQRV9CTE9DS0RFVjsKLQllbHNlIGlmIChTX0lTRklGTyhidWYuc3RfbW9kZSkpCi0JCXJldHVybiBPU19UWVBFX0ZJRk87Ci0JZWxzZSBpZiAoU19JU1NPQ0soYnVmLnN0X21vZGUpKQotCQlyZXR1cm4gT1NfVFlQRV9TT0NLOwotCWVsc2UgcmV0dXJuIE9TX1RZUEVfRklMRTsKLX0KLQogaW50IGFjY2Vzc19maWxlKGNoYXIgKnBhdGgsIGludCByLCBpbnQgdywgaW50IHgpCiB7CiAJaW50IG1vZGUgPSAwOwpAQCAtMjAyLDYgKzE2MCwxMSBAQAogCXJldHVybiAwOwogfQogCitpbnQgcmVwbGFjZV9maWxlKGludCBvbGRmZCwgaW50IGZkKQoreworCXJldHVybiBkdXAyKG9sZGZkLCBmZCk7Cit9CisKIHZvaWQgY2xvc2VfZmlsZSh2b2lkICpzdHJlYW0pCiB7CiAJY2xvc2UoKigoaW50ICopIHN0cmVhbSkpOwpAQCAtMjM1LDggKzE5OCw4IEBACiAKIGludCBzZXRfYXR0cihjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3QgaG9zdGZzX2lhdHRyICphdHRycywgaW50IGZkKQogeworCXN0cnVjdCBob3N0ZnNfc3RhdCBzdDsKIAlzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXTsKLQlzdHJ1Y3QgdGltZXNwZWMgYXRpbWVfdHMsIG10aW1lX3RzOwogCWludCBlcnIsIG1hOwogCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEhPU1RGU19BVFRSX01PREUpIHsKQEAgLTI3OSwxNSArMjQyLDE0IEBACiAJICovCiAJbWEgPSAoSE9TVEZTX0FUVFJfQVRJTUVfU0VUIHwgSE9TVEZTX0FUVFJfTVRJTUVfU0VUKTsKIAlpZiAoYXR0cnMtPmlhX3ZhbGlkICYgbWEpIHsKLQkJZXJyID0gc3RhdF9maWxlKGZpbGUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJJmF0aW1lX3RzLCAmbXRpbWVfdHMsIE5VTEwsIE5VTEwsIE5VTEwsIGZkKTsKKwkJZXJyID0gc3RhdF9maWxlKGZpbGUsICZzdCwgZmQpOwogCQlpZiAoZXJyICE9IDApCiAJCQlyZXR1cm4gZXJyOwogCi0JCXRpbWVzWzBdLnR2X3NlYyA9IGF0aW1lX3RzLnR2X3NlYzsKLQkJdGltZXNbMF0udHZfdXNlYyA9IGF0aW1lX3RzLnR2X25zZWMgLyAxMDAwOwotCQl0aW1lc1sxXS50dl9zZWMgPSBtdGltZV90cy50dl9zZWM7Ci0JCXRpbWVzWzFdLnR2X3VzZWMgPSBtdGltZV90cy50dl9uc2VjIC8gMTAwMDsKKwkJdGltZXNbMF0udHZfc2VjID0gc3QuYXRpbWUudHZfc2VjOworCQl0aW1lc1swXS50dl91c2VjID0gc3QuYXRpbWUudHZfbnNlYyAvIDEwMDA7CisJCXRpbWVzWzFdLnR2X3NlYyA9IHN0Lm10aW1lLnR2X3NlYzsKKwkJdGltZXNbMV0udHZfdXNlYyA9IHN0Lm10aW1lLnR2X25zZWMgLyAxMDAwOwogCiAJCWlmIChhdHRycy0+aWFfdmFsaWQgJiBIT1NURlNfQVRUUl9BVElNRV9TRVQpIHsKIAkJCXRpbWVzWzBdLnR2X3NlYyA9IGF0dHJzLT5pYV9hdGltZS50dl9zZWM7CkBAIC0zMDgsOSArMjcwLDkgQEAKIAogCS8qIE5vdGU6IGN0aW1lIGlzIG5vdCBoYW5kbGVkICovCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIChIT1NURlNfQVRUUl9BVElNRSB8IEhPU1RGU19BVFRSX01USU1FKSkgewotCQllcnIgPSBzdGF0X2ZpbGUoZmlsZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkmYXR0cnMtPmlhX2F0aW1lLCAmYXR0cnMtPmlhX210aW1lLCBOVUxMLAotCQkJCU5VTEwsIE5VTEwsIGZkKTsKKwkJZXJyID0gc3RhdF9maWxlKGZpbGUsICZzdCwgZmQpOworCQlhdHRycy0+aWFfYXRpbWUgPSBzdC5hdGltZTsKKwkJYXR0cnMtPmlhX210aW1lID0gc3QubXRpbWU7CiAJCWlmIChlcnIgIT0gMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzYxLDcgKzMyMyw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IG1rbm9kKGZpbGUsIG1vZGUsIG1ha2VkZXYobWFqb3IsIG1pbm9yKSk7CisJZXJyID0gbWtub2QoZmlsZSwgbW9kZSwgb3NfbWFrZWRldihtYWpvciwgbWlub3IpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLWVycm5vOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9maWxlLmMgYi9mcy9ocGZzL2ZpbGUuYwppbmRleCBhOWFlOWJmLi5jMDM0MDg4IDEwMDY0NAotLS0gYS9mcy9ocGZzL2ZpbGUuYworKysgYi9mcy9ocGZzL2ZpbGUuYwpAQCAtOTcsMTAgKzk3LDE5IEBACiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKIHsKKwlpbnQgcmV0OworCiAJKnBhZ2VwID0gTlVMTDsKLQlyZXR1cm4gY29udF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCisJcmV0ID0gY29udF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCiAJCQkJaHBmc19nZXRfYmxvY2ssCiAJCQkJJmhwZnNfaShtYXBwaW5nLT5ob3N0KS0+bW11X3ByaXZhdGUpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKKwkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNlY3Rvcl90IF9ocGZzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9ocGZzX2ZuLmggYi9mcy9ocGZzL2hwZnNfZm4uaAppbmRleCA3NWY5ZDQzLi5iNTllYWMwIDEwMDY0NAotLS0gYS9mcy9ocGZzL2hwZnNfZm4uaAorKysgYi9mcy9ocGZzL2hwZnNfZm4uaApAQCAtMjgxLDcgKzI4MSw3IEBACiB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqKTsKIGludCBocGZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiB2b2lkIGhwZnNfd3JpdGVfaWZfY2hhbmdlZChzdHJ1Y3QgaW5vZGUgKik7Ci12b2lkIGhwZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK3ZvaWQgaHBmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAKIC8qIG1hcC5jICovCiAKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaW5vZGUuYyBiL2ZzL2hwZnMvaW5vZGUuYwppbmRleCAxMDQyYTliLi41NmYwZGExIDEwMDY0NAotLS0gYS9mcy9ocGZzL2lub2RlLmMKKysrIGIvZnMvaHBmcy9pbm9kZS5jCkBAIC0yNzcsOSArMjc3LDE1IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfdW5sb2NrOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCiAJaHBmc193cml0ZV9pbm9kZShpbm9kZSk7CiAKQEAgLTI5NiwxMSArMzAyLDEzIEBACiAJCWhwZnNfd3JpdGVfaW5vZGUoaW5vZGUpOwogfQogCi12b2lkIGhwZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGhwZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7Ci0JbG9ja19rZXJuZWwoKTsKLQlocGZzX3JlbW92ZV9mbm9kZShpbm9kZS0+aV9zYiwgaW5vZGUtPmlfaW5vKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCWlmICghaW5vZGUtPmlfbmxpbmspIHsKKwkJbG9ja19rZXJuZWwoKTsKKwkJaHBmc19yZW1vdmVfZm5vZGUoaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubyk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9mcy9ocGZzL3N1cGVyLmMgYi9mcy9ocGZzL3N1cGVyLmMKaW5kZXggYWE1Mzg0Mi4uMjYwNzAxMCAxMDA2NDQKLS0tIGEvZnMvaHBmcy9zdXBlci5jCisrKyBiL2ZzL2hwZnMvc3VwZXIuYwpAQCAtNDUwLDcgKzQ1MCw3IEBACiB7CiAJLmFsbG9jX2lub2RlCT0gaHBmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGhwZnNfZGVzdHJveV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gaHBmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gaHBmc19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gaHBmc19wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBocGZzX3N0YXRmcywKIAkucmVtb3VudF9mcwk9IGhwZnNfcmVtb3VudF9mcywKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzLmMgYi9mcy9ocHBmcy9ocHBmcy5jCmluZGV4IDgyNmMzZjkuLjdiMDI3NzIgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzLmMKKysrIGIvZnMvaHBwZnMvaHBwZnMuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgIm9zLmgiCiAKQEAgLTYyMywxMiArNjI0LDExIEBACiAJcmV0dXJuICZoaS0+dmZzX2lub2RlOwogfQogCi12b2lkIGhwcGZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlubykKK3ZvaWQgaHBwZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm8pCiB7CisJZW5kX3dyaXRlYmFjayhpbm8pOwogCWRwdXQoSFBQRlNfSShpbm8pLT5wcm9jX2RlbnRyeSk7CiAJbW50cHV0KGluby0+aV9zYi0+c19mc19pbmZvKTsKLQotCWNsZWFyX2lub2RlKGlubyk7CiB9CiAKIHN0YXRpYyB2b2lkIGhwcGZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTYzOSw3ICs2MzksNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGhwcGZzX3Nib3BzID0gewogCS5hbGxvY19pbm9kZQk9IGhwcGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gaHBwZnNfZGVzdHJveV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gaHBwZnNfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGhwcGZzX2V2aWN0X2lub2RlLAogCS5zdGF0ZnMJCT0gaHBwZnNfc3RhdGZzLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCBhNGU5YTdlLi42ZTViZDQyIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMzcxLDI3ICszNzEsMTAgQEAKIAlodWdldGxiX3VucmVzZXJ2ZV9wYWdlcyhpbm9kZSwgc3RhcnQsIGZyZWVkKTsKIH0KIAotc3RhdGljIHZvaWQgaHVnZXRsYmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgaHVnZXRsYmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdHJ1bmNhdGVfaHVnZXBhZ2VzKGlub2RlLCAwKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mb3JnZXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkgX19yZWxlYXNlcyhpbm9kZV9sb2NrKQotewotCWlmIChnZW5lcmljX2RldGFjaF9pbm9kZShpbm9kZSkpIHsKLQkJdHJ1bmNhdGVfaHVnZXBhZ2VzKGlub2RlLCAwKTsKLQkJY2xlYXJfaW5vZGUoaW5vZGUpOwotCQlkZXN0cm95X2lub2RlKGlub2RlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKCFpbm9kZS0+aV9ubGluaykKLQkJZ2VuZXJpY19kZWxldGVfaW5vZGUoaW5vZGUpOwotCWVsc2UKLQkJaHVnZXRsYmZzX2ZvcmdldF9pbm9kZShpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtNDQ4LDE5ICs0MzEsMjAgQEAKIAogCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoaWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwotCQlpZiAoIShhdHRyLT5pYV9zaXplICYgfmh1Z2VfcGFnZV9tYXNrKGgpKSkKLQkJCWVycm9yID0gaHVnZXRsYl92bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKGF0dHItPmlhX3NpemUgJiB+aHVnZV9wYWdlX21hc2soaCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZXJyb3IgPSBodWdldGxiX3ZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQkJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKwkJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGlub2RlICpodWdldGxiZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpZF90IHVpZCwgCkBAIC03MTIsOSArNjk2LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzID0gewogCS5hbGxvY19pbm9kZSAgICA9IGh1Z2V0bGJmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZSAgPSBodWdldGxiZnNfZGVzdHJveV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBodWdldGxiZnNfZXZpY3RfaW5vZGUsCiAJLnN0YXRmcwkJPSBodWdldGxiZnNfc3RhdGZzLAotCS5kZWxldGVfaW5vZGUJPSBodWdldGxiZnNfZGVsZXRlX2lub2RlLAotCS5kcm9wX2lub2RlCT0gaHVnZXRsYmZzX2Ryb3BfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGh1Z2V0bGJmc19wdXRfc3VwZXIsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDcyMjg2MGIuLjg2NDY0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KQEAgLTI2NCwxMiArMjYzLDggQEAKIAlJTklUX1JBV19QUklPX1RSRUVfUk9PVCgmaW5vZGUtPmlfZGF0YS5pX21tYXApOwogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kYXRhLmlfbW1hcF9ub25saW5lYXIpOwogCWlfc2l6ZV9vcmRlcmVkX2luaXQoaW5vZGUpOwotI2lmZGVmIENPTkZJR19JTk9USUZZCi0JSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOwotCW11dGV4X2luaXQoJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19GU05PVElGWQotCUlOSVRfSExJU1RfSEVBRCgmaW5vZGUtPmlfZnNub3RpZnlfbWFya19lbnRyaWVzKTsKKwlJTklUX0hMSVNUX0hFQUQoJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtzKTsKICNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChpbm9kZV9pbml0X29uY2UpOwpAQCAtMjk0LDMyICsyODksMzQgQEAKIAlpbm9kZXNfc3RhdC5ucl91bnVzZWQtLTsKIH0KIAotLyoqCi0gKiBjbGVhcl9pbm9kZSAtIGNsZWFyIGFuIGlub2RlCi0gKiBAaW5vZGU6IGlub2RlIHRvIGNsZWFyCi0gKgotICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGZpbGVzeXN0ZW0gdG8gdGVsbCB1cwotICogdGhhdCB0aGUgaW5vZGUgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gV2UganVzdAotICogdGVybWluYXRlIGl0IHdpdGggZXh0cmVtZSBwcmVqdWRpY2UuCi0gKi8KLXZvaWQgY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgZW5kX3dyaXRlYmFjayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCW1pZ2h0X3NsZWVwKCk7Ci0JaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKGlub2RlKTsKLQogCUJVR19PTihpbm9kZS0+aV9kYXRhLm5ycGFnZXMpOworCUJVR19PTighbGlzdF9lbXB0eSgmaW5vZGUtPmlfZGF0YS5wcml2YXRlX2xpc3QpKTsKIAlCVUdfT04oIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpOwogCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpOwogCWlub2RlX3N5bmNfd2FpdChpbm9kZSk7Ci0JaWYgKGlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZSkKLQkJaW5vZGUtPmlfc2ItPnNfb3AtPmNsZWFyX2lub2RlKGlub2RlKTsKKwlpbm9kZS0+aV9zdGF0ZSA9IElfRlJFRUlORyB8IElfQ0xFQVI7Cit9CitFWFBPUlRfU1lNQk9MKGVuZF93cml0ZWJhY2spOworCitzdGF0aWMgdm9pZCBldmljdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpvcCA9IGlub2RlLT5pX3NiLT5zX29wOworCisJaWYgKG9wLT5ldmljdF9pbm9kZSkgeworCQlvcC0+ZXZpY3RfaW5vZGUoaW5vZGUpOworCX0gZWxzZSB7CisJCWlmIChpbm9kZS0+aV9kYXRhLm5ycGFnZXMpCisJCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJCWVuZF93cml0ZWJhY2soaW5vZGUpOworCX0KIAlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9iZGV2KQogCQliZF9mb3JnZXQoaW5vZGUpOwogCWlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX2NkZXYpCiAJCWNkX2ZvcmdldChpbm9kZSk7Ci0JaW5vZGUtPmlfc3RhdGUgPSBJX0NMRUFSOwogfQotRVhQT1JUX1NZTUJPTChjbGVhcl9pbm9kZSk7CiAKIC8qCiAgKiBkaXNwb3NlX2xpc3QgLSBkaXNwb3NlIG9mIHRoZSBjb250ZW50cyBvZiBhIGxvY2FsIGxpc3QKQEAgLTMzOCw5ICszMzUsNyBAQAogCQlpbm9kZSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlsaXN0X2RlbCgmaW5vZGUtPmlfbGlzdCk7CiAKLQkJaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKLQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQkJY2xlYXJfaW5vZGUoaW5vZGUpOworCQlldmljdChpbm9kZSk7CiAKIAkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAkJaGxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2hhc2gpOwpAQCAtNDEzLDcgKzQwOCw2IEBACiAKIAlkb3duX3dyaXRlKCZpcHJ1bmVfc2VtKTsKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWlub3RpZnlfdW5tb3VudF9pbm9kZXMoJnNiLT5zX2lub2Rlcyk7CiAJZnNub3RpZnlfdW5tb3VudF9pbm9kZXMoJnNiLT5zX2lub2Rlcyk7CiAJYnVzeSA9IGludmFsaWRhdGVfbGlzdCgmc2ItPnNfaW5vZGVzLCAmdGhyb3dfYXdheSk7CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwpAQCAtNTUzLDcgKzU0Nyw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKCF0ZXN0KGlub2RlLCBkYXRhKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUUpKSB7CisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUUpKSB7CiAJCQlfX3dhaXRfb25fZnJlZWluZ19pbm9kZShpbm9kZSk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQpAQCAtNTc4LDcgKzU3Miw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGlub2RlLT5pX3NiICE9IHNiKQogCQkJY29udGludWU7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRSkpIHsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRSkpIHsKIAkJCV9fd2FpdF9vbl9mcmVlaW5nX2lub2RlKGlub2RlKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9CkBAIC04NDAsNyArODM0LDcgQEAKIHN0cnVjdCBpbm9kZSAqaWdyYWIoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFKSkpCisJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkpCiAJCV9faWdldChpbm9kZSk7CiAJZWxzZQogCQkvKgpAQCAtMTA4OSw3ICsxMDgzLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmIChvbGQtPmlfc2IgIT0gc2IpCiAJCQkJY29udGludWU7Ci0JCQlpZiAob2xkLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFKSkKKwkJCWlmIChvbGQtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKIAkJCQljb250aW51ZTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMTI4LDcgKzExMjIsNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCF0ZXN0KG9sZCwgZGF0YSkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAob2xkLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFKSkKKwkJCWlmIChvbGQtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKIAkJCQljb250aW51ZTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMTgwLDY5ICsxMTc0LDUxIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlbW92ZV9pbm9kZV9oYXNoKTsKIAotLyoKLSAqIFRlbGwgdGhlIGZpbGVzeXN0ZW0gdGhhdCB0aGlzIGlub2RlIGlzIG5vIGxvbmdlciBvZiBhbnkgaW50ZXJlc3QgYW5kIHNob3VsZAotICogYmUgY29tcGxldGVseSBkZXN0cm95ZWQuCi0gKgotICogV2UgbGVhdmUgdGhlIGlub2RlIGluIHRoZSBpbm9kZSBoYXNoIHRhYmxlIHVudGlsICphZnRlciogdGhlIGZpbGVzeXN0ZW0ncwotICogLT5kZWxldGVfaW5vZGUgY29tcGxldGVzLiAgVGhpcyBlbnN1cmVzIHRoYXQgYW4gaWdldCAoc3VjaCBhcyBuZnNkIG1pZ2h0Ci0gKiBpbnN0aWdhdGUpIHdpbGwgYWx3YXlzIGZpbmQgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiBlaXRoZXIgaW4gdGhlIGhhc2ggb3Igb24KLSAqIGRpc2suCi0gKgotICogSV9GUkVFSU5HIGlzIHNldCBzbyB0aGF0IG5vLW9uZSB3aWxsIHRha2UgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSB3aGlsZQotICogaXQgaXMgYmVpbmcgZGVsZXRlZC4KLSAqLwotdm9pZCBnZW5lcmljX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGdlbmVyaWNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgKm9wID0gaW5vZGUtPmlfc2ItPnNfb3A7Ci0KLQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9saXN0KTsKLQlsaXN0X2RlbF9pbml0KCZpbm9kZS0+aV9zYl9saXN0KTsKLQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwotCWlub2RlLT5pX3N0YXRlIHw9IElfRlJFRUlORzsKLQlpbm9kZXNfc3RhdC5ucl9pbm9kZXMtLTsKLQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0KLQlpZiAob3AtPmRlbGV0ZV9pbm9kZSkgewotCQl2b2lkICgqZGVsZXRlKShzdHJ1Y3QgaW5vZGUgKikgPSBvcC0+ZGVsZXRlX2lub2RlOwotCQkvKiBGaWxlc3lzdGVtcyBpbXBsZW1lbnRpbmcgdGhlaXIgb3duCi0JCSAqIHNfb3AtPmRlbGV0ZV9pbm9kZSBhcmUgcmVxdWlyZWQgdG8gY2FsbAotCQkgKiB0cnVuY2F0ZV9pbm9kZV9wYWdlcyBhbmQgY2xlYXJfaW5vZGUoKQotCQkgKiBpbnRlcm5hbGx5ICovCi0JCWRlbGV0ZShpbm9kZSk7Ci0JfSBlbHNlIHsKLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCQljbGVhcl9pbm9kZShpbm9kZSk7Ci0JfQotCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JaGxpc3RfZGVsX2luaXQoJmlub2RlLT5pX2hhc2gpOwotCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKLQl3YWtlX3VwX2lub2RlKGlub2RlKTsKLQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgIT0gSV9DTEVBUik7Ci0JZGVzdHJveV9pbm9kZShpbm9kZSk7CisJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZGVsZXRlX2lub2RlKTsKIAotLyoqCi0gKglnZW5lcmljX2RldGFjaF9pbm9kZSAtIHJlbW92ZSBpbm9kZSBmcm9tIGlub2RlIGxpc3RzCi0gKglAaW5vZGU6IGlub2RlIHRvIHJlbW92ZQotICoKLSAqCVJlbW92ZSBpbm9kZSBmcm9tIGlub2RlIGxpc3RzLCB3cml0ZSBpdCBpZiBpdCdzIGRpcnR5LiBUaGlzIGlzIGp1c3QgYW4KLSAqCWludGVybmFsIFZGUyBoZWxwZXIgZXhwb3J0ZWQgZm9yIGh1Z2V0bGJmcy4gRG8gbm90IHVzZSEKLSAqCi0gKglSZXR1cm5zIDEgaWYgaW5vZGUgc2hvdWxkIGJlIGNvbXBsZXRlbHkgZGVzdHJveWVkLgorLyoKKyAqIE5vcm1hbCBVTklYIGZpbGVzeXN0ZW0gYmVoYXZpb3VyOiBkZWxldGUgdGhlCisgKiBpbm9kZSB3aGVuIHRoZSB1c2FnZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBhbmQKKyAqIGlfbmxpbmsgaXMgemVyby4KICAqLwotaW50IGdlbmVyaWNfZGV0YWNoX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitpbnQgZ2VuZXJpY19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuICFpbm9kZS0+aV9ubGluayB8fCBobGlzdF91bmhhc2hlZCgmaW5vZGUtPmlfaGFzaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2Ryb3BfaW5vZGUpOworCisvKgorICogQ2FsbGVkIHdoZW4gd2UncmUgZHJvcHBpbmcgdGhlIGxhc3QgcmVmZXJlbmNlCisgKiB0byBhbiBpbm9kZS4KKyAqCisgKiBDYWxsIHRoZSBGUyAiZHJvcF9pbm9kZSgpIiBmdW5jdGlvbiwgZGVmYXVsdGluZyB0bworICogdGhlIGxlZ2FjeSBVTklYIGZpbGVzeXN0ZW0gYmVoYXZpb3VyLiAgSWYgaXQgdGVsbHMKKyAqIHVzIHRvIGV2aWN0IGlub2RlLCBkbyBzby4gIE90aGVyd2lzZSwgcmV0YWluIGlub2RlCisgKiBpbiBjYWNoZSBpZiBmcyBpcyBhbGl2ZSwgc3luYyBhbmQgZXZpY3QgaWYgZnMgaXMKKyAqIHNodXR0aW5nIGRvd24uCisgKi8KK3N0YXRpYyB2b2lkIGlwdXRfZmluYWwoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgKm9wID0gaW5vZGUtPmlfc2ItPnNfb3A7CisJaW50IGRyb3A7CiAKLQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZpbm9kZS0+aV9oYXNoKSkgeworCWlmIChvcCAmJiBvcC0+ZHJvcF9pbm9kZSkKKwkJZHJvcCA9IG9wLT5kcm9wX2lub2RlKGlub2RlKTsKKwllbHNlCisJCWRyb3AgPSBnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworCisJaWYgKCFkcm9wKSB7CiAJCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfRElSVFl8SV9TWU5DKSkpCiAJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZpbm9kZV91bnVzZWQpOwogCQlpbm9kZXNfc3RhdC5ucl91bnVzZWQrKzsKIAkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfQUNUSVZFKSB7CiAJCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybjsKIAkJfQogCQlXQVJOX09OKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpOwogCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX1dJTExfRlJFRTsKQEAgLTEyNjAsNTYgKzEyMzYsMTUgQEAKIAlpbm9kZS0+aV9zdGF0ZSB8PSBJX0ZSRUVJTkc7CiAJaW5vZGVzX3N0YXQubnJfaW5vZGVzLS07CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19kZXRhY2hfaW5vZGUpOwotCi1zdGF0aWMgdm9pZCBnZW5lcmljX2ZvcmdldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICghZ2VuZXJpY19kZXRhY2hfaW5vZGUoaW5vZGUpKQotCQlyZXR1cm47Ci0JaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKLQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCWNsZWFyX2lub2RlKGlub2RlKTsKKwlldmljdChpbm9kZSk7CisJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwlobGlzdF9kZWxfaW5pdCgmaW5vZGUtPmlfaGFzaCk7CisJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCXdha2VfdXBfaW5vZGUoaW5vZGUpOworCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAhPSAoSV9GUkVFSU5HIHwgSV9DTEVBUikpOwogCWRlc3Ryb3lfaW5vZGUoaW5vZGUpOwogfQogCi0vKgotICogTm9ybWFsIFVOSVggZmlsZXN5c3RlbSBiZWhhdmlvdXI6IGRlbGV0ZSB0aGUKLSAqIGlub2RlIHdoZW4gdGhlIHVzYWdlIGNvdW50IGRyb3BzIHRvIHplcm8sIGFuZAotICogaV9ubGluayBpcyB6ZXJvLgotICovCi12b2lkIGdlbmVyaWNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICghaW5vZGUtPmlfbmxpbmspCi0JCWdlbmVyaWNfZGVsZXRlX2lub2RlKGlub2RlKTsKLQllbHNlCi0JCWdlbmVyaWNfZm9yZ2V0X2lub2RlKGlub2RlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfZHJvcF9pbm9kZSk7Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiB3ZSdyZSBkcm9wcGluZyB0aGUgbGFzdCByZWZlcmVuY2UKLSAqIHRvIGFuIGlub2RlLgotICoKLSAqIENhbGwgdGhlIEZTICJkcm9wKCkiIGZ1bmN0aW9uLCBkZWZhdWx0aW5nIHRvCi0gKiB0aGUgbGVnYWN5IFVOSVggZmlsZXN5c3RlbSBiZWhhdmlvdXIuLgotICoKLSAqIE5PVEUhIE5PVEUhIE5PVEUhIFdlJ3JlIGNhbGxlZCB3aXRoIHRoZSBpbm9kZSBsb2NrCi0gKiBoZWxkLCBhbmQgdGhlIGRyb3AgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gcmVsZWFzZQotICogdGhlIGxvY2shCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcHV0X2ZpbmFsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgKm9wID0gaW5vZGUtPmlfc2ItPnNfb3A7Ci0Jdm9pZCAoKmRyb3ApKHN0cnVjdCBpbm9kZSAqKSA9IGdlbmVyaWNfZHJvcF9pbm9kZTsKLQotCWlmIChvcCAmJiBvcC0+ZHJvcF9pbm9kZSkKLQkJZHJvcCA9IG9wLT5kcm9wX2lub2RlOwotCWRyb3AoaW5vZGUpOwotfQotCiAvKioKICAqCWlwdXQJLSBwdXQgYW4gaW5vZGUKICAqCUBpbm9kZTogaW5vZGUgdG8gcHV0CkBAIC0xMzIyLDcgKzEyNTcsNyBAQAogdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaWYgKGlub2RlKSB7Ci0JCUJVR19PTihpbm9kZS0+aV9zdGF0ZSA9PSBJX0NMRUFSKTsKKwkJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUik7CiAKIAkJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJmlub2RlLT5pX2NvdW50LCAmaW5vZGVfbG9jaykpCiAJCQlpcHV0X2ZpbmFsKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IDZiNGRjZDQuLjVhNDQ4MTEgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtNzIyLDcgKzcyMiwxMiBAQAogCX0KIAogCXMtPnNfbWFnaWMgPSBJU09GU19TVVBFUl9NQUdJQzsKLQlzLT5zX21heGJ5dGVzID0gMHhmZmZmZmZmZjsgLyogV2UgY2FuIGhhbmRsZSBmaWxlcyB1cCB0byA0IEdCICovCisKKwkvKgorCSAqIFdpdGggbXVsdGktZXh0ZW50IGZpbGVzLCBmaWxlIHNpemUgaXMgb25seSBsaW1pdGVkIGJ5IHRoZSBtYXhpbXVtCisJICogc2l6ZSBvZiBhIGZpbGUgc3lzdGVtLCB3aGljaCBpcyA4IFRCLgorCSAqLworCXMtPnNfbWF4Ynl0ZXMgPSAweDgwMDAwMDAwMDAwTEw7CiAKIAkvKgogCSAqIFRoZSBDRFJPTSBpcyByZWFkLW9ubHksIGhhcyBubyBub2RlcyAoZGV2aWNlcykgb24gaXQsIGFuZCBzaW5jZQpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggOTNkMWU0Ny4uZjE5Y2U5NCAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC0xMjgxLDEzICsxMjgxLDkgQEAKIGludCBqb3VybmFsX2NoZWNrX2F2YWlsYWJsZV9mZWF0dXJlcyAoam91cm5hbF90ICpqb3VybmFsLCB1bnNpZ25lZCBsb25nIGNvbXBhdCwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJvLCB1bnNpZ25lZCBsb25nIGluY29tcGF0KQogewotCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYjsKLQogCWlmICghY29tcGF0ICYmICFybyAmJiAhaW5jb21wYXQpCiAJCXJldHVybiAxOwogCi0Jc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7Ci0KIAkvKiBXZSBjYW4gc3VwcG9ydCBhbnkga25vd24gcmVxdWVzdGVkIGZlYXR1cmVzIGlmZiB0aGUKIAkgKiBzdXBlcmJsb2NrIGlzIGluIHZlcnNpb24gMi4gIE90aGVyd2lzZSB3ZSBmYWlsIHRvIHN1cHBvcnQgYW55CiAJICogZXh0ZW5kZWQgc2IgZmVhdHVyZXMuICovCkBAIC0xNDgxLDcgKzE0NzcsNiBAQAogCiBpbnQgam91cm5hbF93aXBlKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IHdyaXRlKQogewotCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYjsKIAlpbnQgZXJyID0gMDsKIAogCUpfQVNTRVJUICghKGpvdXJuYWwtPmpfZmxhZ3MgJiBKRlNfTE9BREVEKSk7CkBAIC0xNDkwLDggKzE0ODUsNiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKLQogCWlmICgham91cm5hbC0+al90YWlsKQogCQlnb3RvIG5vX3JlY292ZXJ5OwogCmRpZmYgLS1naXQgYS9mcy9qYmQvcmVjb3ZlcnkuYyBiL2ZzL2piZC9yZWNvdmVyeS5jCmluZGV4IDU0YzliYzkuLjgxMDUxZGEgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9yZWNvdmVyeS5jCisrKyBiL2ZzL2piZC9yZWNvdmVyeS5jCkBAIC0yODMsMTIgKzI4Myw5IEBACiBpbnQgam91cm5hbF9za2lwX3JlY292ZXJ5KGpvdXJuYWxfdCAqam91cm5hbCkKIHsKIAlpbnQJCQllcnI7Ci0Jam91cm5hbF9zdXBlcmJsb2NrX3QgKglzYjsKLQogCXN0cnVjdCByZWNvdmVyeV9pbmZvCWluZm87CiAKIAltZW1zZXQgKCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwotCXNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOwogCiAJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfU0NBTik7CiAKQEAgLTI5Nyw3ICsyOTQsOCBAQAogCQkrK2pvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2U7CiAJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCi0JCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLSBiZTMyX3RvX2NwdShzYi0+c19zZXF1ZW5jZSk7CisJCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLQorCQkJICAgICAgYmUzMl90b19jcHUoam91cm5hbC0+al9zdXBlcmJsb2NrLT5zX3NlcXVlbmNlKTsKICNlbmRpZgogCQlqYmRfZGVidWcoMSwKIAkJCSAgIkpCRDogaWdub3JpbmcgJWQgdHJhbnNhY3Rpb24lcyBmcm9tIHRoZSBqb3VybmFsLlxuIiwKQEAgLTMyMSwxMSArMzE5LDYgQEAKIAl1bnNpZ25lZCBpbnQJCXNlcXVlbmNlOwogCWludAkJCWJsb2NrdHlwZTsKIAotCS8qIFByZWNvbXB1dGUgdGhlIG1heGltdW0gbWV0YWRhdGEgZGVzY3JpcHRvcnMgaW4gYSBkZXNjcmlwdG9yIGJsb2NrICovCi0JaW50CQkJTUFYX0JMT0NLU19QRVJfREVTQzsKLQlNQVhfQkxPQ0tTX1BFUl9ERVNDID0gKChqb3VybmFsLT5qX2Jsb2Nrc2l6ZS1zaXplb2Yoam91cm5hbF9oZWFkZXJfdCkpCi0JCQkgICAgICAgLyBzaXplb2Yoam91cm5hbF9ibG9ja190YWdfdCkpOwotCiAJLyoKIAkgKiBGaXJzdCB0aGluZyBpcyB0byBlc3RhYmxpc2ggd2hhdCB3ZSBleHBlY3QgdG8gZmluZCBpbiB0aGUgbG9nCiAJICogKGluIHRlcm1zIG9mIHRyYW5zYWN0aW9uIElEcyksIGFuZCB3aGVyZSAoaW4gdGVybXMgb2YgbG9nCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDA3NmQxY2MuLjFjMjNhMGYgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC0xMTgsMTMgKzExOCwxMyBAQAogdm9pZCBfX2piZDJfbG9nX3dhaXRfZm9yX3NwYWNlKGpvdXJuYWxfdCAqam91cm5hbCkKIHsKIAlpbnQgbmJsb2Nrcywgc3BhY2VfbGVmdDsKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJLyogYXNzZXJ0X3NwaW5fbG9ja2VkKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOyAqLwogCiAJbmJsb2NrcyA9IGpiZF9zcGFjZV9uZWVkZWQoam91cm5hbCk7CiAJd2hpbGUgKF9famJkMl9sb2dfc3BhY2VfbGVmdChqb3VybmFsKSA8IG5ibG9ja3MpIHsKIAkJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0FCT1JUKQogCQkJcmV0dXJuOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQltdXRleF9sb2NrKCZqb3VybmFsLT5qX2NoZWNrcG9pbnRfbXV0ZXgpOwogCiAJCS8qCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJICogZmlsZXN5c3RlbSwgc28gYWJvcnQgdGhlIGpvdXJuYWwgYW5kIGxlYXZlIGEgc3RhY2sKIAkJICogdHJhY2UgZm9yIGZvcmVuc2ljIGV2aWRlbmNlLgogCQkgKi8KLQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJbmJsb2NrcyA9IGpiZF9zcGFjZV9uZWVkZWQoam91cm5hbCk7CiAJCXNwYWNlX2xlZnQgPSBfX2piZDJfbG9nX3NwYWNlX2xlZnQoam91cm5hbCk7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAkJCWlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pCiAJCQkJdGlkID0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLT50X3RpZDsKIAkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7Ci0JCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJCWlmIChjaGtwdCkgewogCQkJCWpiZDJfbG9nX2RvX2NoZWNrcG9pbnQoam91cm5hbCk7CiAJCQl9IGVsc2UgaWYgKGpiZDJfY2xlYW51cF9qb3VybmFsX3RhaWwoam91cm5hbCkgPT0gMCkgewpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQkJV0FSTl9PTigxKTsKIAkJCQlqYmQyX2pvdXJuYWxfYWJvcnQoam91cm5hbCwgMCk7CiAJCQl9Ci0JCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJfQpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJICogbmV4dCB0cmFuc2FjdGlvbiBJRCB3ZSB3aWxsIHdyaXRlLCBhbmQgd2hlcmUgaXQgd2lsbAogCSAqIHN0YXJ0LiAqLwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX2NoZWNrcG9pbnRfdHJhbnNhY3Rpb25zOwogCWlmICh0cmFuc2FjdGlvbikgewpAQCAtNDk2LDcgKzQ5Niw3IEBACiAJLyogSWYgdGhlIG9sZGVzdCBwaW5uZWQgdHJhbnNhY3Rpb24gaXMgYXQgdGhlIHRhaWwgb2YgdGhlIGxvZwogICAgICAgICAgICBhbHJlYWR5IHRoZW4gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gcmlnaHQgbm93LiAqLwogCWlmIChqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2UgPT0gZmlyc3RfdGlkKSB7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNTE2LDcgKzUxNiw3IEBACiAJam91cm5hbC0+al9mcmVlICs9IGZyZWVkOwogCWpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZSA9IGZpcnN0X3RpZDsKIAlqb3VybmFsLT5qX3RhaWwgPSBibG9ja25yOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCS8qCiAJICogSWYgdGhlcmUgaXMgYW4gZXh0ZXJuYWwgam91cm5hbCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdApAQCAtNzc1LDcgKzc3NSw3IEBACiAJSl9BU1NFUlQodHJhbnNhY3Rpb24tPnRfbG9nX2xpc3QgPT0gTlVMTCk7CiAJSl9BU1NFUlQodHJhbnNhY3Rpb24tPnRfY2hlY2twb2ludF9saXN0ID09IE5VTEwpOwogCUpfQVNTRVJUKHRyYW5zYWN0aW9uLT50X2NoZWNrcG9pbnRfaW9fbGlzdCA9PSBOVUxMKTsKLQlKX0FTU0VSVCh0cmFuc2FjdGlvbi0+dF91cGRhdGVzID09IDApOworCUpfQVNTRVJUKGF0b21pY19yZWFkKCZ0cmFuc2FjdGlvbi0+dF91cGRhdGVzKSA9PSAwKTsKIAlKX0FTU0VSVChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24gIT0gdHJhbnNhY3Rpb24pOwogCUpfQVNTRVJUKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbiAhPSB0cmFuc2FjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IDc1NzE2ZDMuLmY1MmU1ZTggMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY29tbWl0LmMKKysrIGIvZnMvamJkMi9jb21taXQuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIAkgKi8KIAlpZiAocmV0ID09IC1FT1BOT1RTVVBQICYmIGJhcnJpZXJfZG9uZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSkJEOiBiYXJyaWVyLWJhc2VkIHN5bmMgZmFpbGVkIG9uICVzIC0gIgotCQkgICAgICAgImRpc2FibGluZyBiYXJyaWVyc1xuIiwgam91cm5hbC0+al9kZXZuYW1lKTsKLQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQkgICAgICAgIkpCRDI6IERpc2FibGluZyBiYXJyaWVycyBvbiAlcywgIgorCQkgICAgICAgIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iLCBqb3VybmFsLT5qX2Rldm5hbWUpOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KQkQyX0JBUlJJRVI7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAkJLyogQW5kIHRyeSBhZ2Fpbiwgd2l0aG91dCB0aGUgYmFycmllciAqLwogCQlsb2NrX2J1ZmZlcihiaCk7CkBAIC0xODAsMTEgKzE4MCwxMSBAQAogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAlpZiAoYnVmZmVyX2VvcG5vdHN1cHAoYmgpICYmIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9CQVJSSUVSKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiSkJEMjogd2FpdF9vbl9jb21taXRfcmVjb3JkOiBzeW5jIGZhaWxlZCBvbiAlcyAtICIKLQkJICAgICAgICJkaXNhYmxpbmcgYmFycmllcnNcbiIsIGpvdXJuYWwtPmpfZGV2bmFtZSk7Ci0JCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJICAgICAgICJKQkQyOiAlczogZGlzYWJsaW5nIGJhcnJpZXMgb24gJXMgLSBub3Qgc3VwcG9ydGVkICIKKwkJICAgICAgICJieSBkZXZpY2VcbiIsIF9fZnVuY19fLCBqb3VybmFsLT5qX2Rldm5hbWUpOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KQkQyX0JBUlJJRVI7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAkJbG9ja19idWZmZXIoYmgpOwogCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJamJkX2RlYnVnKDEsICJKQkQ6IHN0YXJ0aW5nIGNvbW1pdCBvZiB0cmFuc2FjdGlvbiAlZFxuIiwKIAkJCWNvbW1pdF90cmFuc2FjdGlvbi0+dF90aWQpOwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID0gVF9MT0NLRUQ7CiAKIAkvKgpAQCAtNDE3LDIzICs0MTcsMjMgQEAKIAkJCQkJICAgICAgc3RhdHMucnVuLnJzX2xvY2tlZCk7CiAKIAlzcGluX2xvY2soJmNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7Ci0Jd2hpbGUgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7CisJd2hpbGUgKGF0b21pY19yZWFkKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykpIHsKIAkJREVGSU5FX1dBSVQod2FpdCk7CiAKIAkJcHJlcGFyZV90b193YWl0KCZqb3VybmFsLT5qX3dhaXRfdXBkYXRlcywgJndhaXQsCiAJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7CisJCWlmIChhdG9taWNfcmVhZCgmY29tbWl0X3RyYW5zYWN0aW9uLT50X3VwZGF0ZXMpKSB7CiAJCQlzcGluX3VubG9jaygmY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCQlzcGluX2xvY2soJmNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAJCX0KIAkJZmluaXNoX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF91cGRhdGVzLCAmd2FpdCk7CiAJfQogCXNwaW5fdW5sb2NrKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCi0JSl9BU1NFUlQgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzIDw9CisJSl9BU1NFUlQgKGF0b21pY19yZWFkKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cykgPD0KIAkJCWpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpOwogCiAJLyoKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXN0YXJ0X3RpbWUgPSBrdGltZV9nZXQoKTsKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfbG9nX3N0YXJ0ID0gam91cm5hbC0+al9oZWFkOwogCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQpOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCWpiZF9kZWJ1ZyAoMywgIkpCRDogY29tbWl0IHBoYXNlIDJcbiIpOwogCkBAIC01MTksMTkgKzUxOSwyMCBAQAogCSAqIHRyYW5zYWN0aW9uISAgTm93IGNvbWVzIHRoZSB0cmlja3kgcGFydDogd2UgbmVlZCB0byB3cml0ZSBvdXQKIAkgKiBtZXRhZGF0YS4gIExvb3Agb3ZlciB0aGUgdHJhbnNhY3Rpb24ncyBlbnRpcmUgYnVmZmVyIGxpc3Q6CiAJICovCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID0gVF9DT01NSVQ7Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJdHJhY2VfamJkMl9jb21taXRfbG9nZ2luZyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwogCXN0YXRzLnJ1bi5yc19sb2dnaW5nID0gamlmZmllczsKIAlzdGF0cy5ydW4ucnNfZmx1c2hpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfZmx1c2hpbmcsCiAJCQkJCSAgICAgICBzdGF0cy5ydW4ucnNfbG9nZ2luZyk7Ci0Jc3RhdHMucnVuLnJzX2Jsb2NrcyA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzOworCXN0YXRzLnJ1bi5yc19ibG9ja3MgPQorCQlhdG9taWNfcmVhZCgmY29tbWl0X3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpOwogCXN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkID0gMDsKIAogCUpfQVNTRVJUKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9ucl9idWZmZXJzIDw9Ci0JCSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CisJCSBhdG9taWNfcmVhZCgmY29tbWl0X3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpKTsKIAogCWVyciA9IDA7CiAJZGVzY3JpcHRvciA9IE5VTEw7CkBAIC02MTYsNyArNjE3LDcgQEAKIAkJICogdGhlIGZyZWUgc3BhY2UgaW4gdGhlIGxvZywgYnV0IHRoaXMgY291bnRlciBpcyBjaGFuZ2VkCiAJCSAqIGJ5IGpiZDJfam91cm5hbF9uZXh0X2xvZ19ibG9jaygpIGFsc28uCiAJCSAqLwotCQljb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cy0tOworCQlhdG9taWNfZGVjKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CiAKIAkJLyogQnVtcCBiX2NvdW50IHRvIHByZXZlbnQgdHJ1bmNhdGUgZnJvbSBzdHVtYmxpbmcgb3ZlcgogICAgICAgICAgICAgICAgICAgIHRoZSBzaGFkb3dlZCBidWZmZXIhICBAQEAgVGhpcyBjYW4gZ28gaWYgd2UgZXZlciBnZXQKQEAgLTk3Nyw3ICs5NzgsNyBAQAogCSAqIF9famJkMl9qb3VybmFsX2Ryb3BfdHJhbnNhY3Rpb24oKS4gT3RoZXJ3aXNlIHdlIGNvdWxkIHJhY2Ugd2l0aAogCSAqIG90aGVyIGNoZWNrcG9pbnRpbmcgY29kZSBwcm9jZXNzaW5nIHRoZSB0cmFuc2FjdGlvbi4uLgogCSAqLwotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCS8qCiAJICogTm93IHJlY2hlY2sgaWYgc29tZSBidWZmZXJzIGRpZCBub3QgZ2V0IGF0dGFjaGVkIHRvIHRoZSB0cmFuc2FjdGlvbgpAQCAtOTg1LDcgKzk4Niw3IEBACiAJICovCiAJaWYgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9mb3JnZXQpIHsKIAkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJZ290byByZXN0YXJ0X2xvb3A7CiAJfQogCkBAIC0xMDAzLDcgKzEwMDQsOCBAQAogCSAqIEZpbGUgdGhlIHRyYW5zYWN0aW9uIHN0YXRpc3RpY3MKIAkgKi8KIAlzdGF0cy50c190aWQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfdGlkOwotCXN0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2NvdW50OworCXN0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgPQorCQlhdG9taWNfcmVhZCgmY29tbWl0X3RyYW5zYWN0aW9uLT50X2hhbmRsZV9jb3VudCk7CiAJdHJhY2VfamJkMl9ydW5fc3RhdHMoam91cm5hbC0+al9mc19kZXYtPmJkX2RldiwKIAkJCSAgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZCwgJnN0YXRzLnJ1bik7CiAKQEAgLTEwMzcsNyArMTAzOSw3IEBACiAJCQkJam91cm5hbC0+al9hdmVyYWdlX2NvbW1pdF90aW1lKjMpIC8gNDsKIAllbHNlCiAJCWpvdXJuYWwtPmpfYXZlcmFnZV9jb21taXRfdGltZSA9IGNvbW1pdF90aW1lOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfY2hlY2twb2ludF9saXN0ID09IE5VTEwgJiYKIAkgICAgY29tbWl0X3RyYW5zYWN0aW9uLT50X2NoZWNrcG9pbnRfaW9fbGlzdCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IDAzNjg4MDguLmFkNTg2NmEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2piZDIuaD4KQEAgLTQ4LDggKzQ5LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKLUVYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3N0YXJ0KTsKLUVYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3Jlc3RhcnQpOwogRVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfZXh0ZW5kKTsKIEVYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3N0b3ApOwogRVhQT1JUX1NZTUJPTChqYmQyX2pvdXJuYWxfbG9ja191cGRhdGVzKTsKQEAgLTE0Myw3ICsxNDIsNyBAQAogCS8qCiAJICogQW5kIG5vdywgd2FpdCBmb3JldmVyIGZvciBjb21taXQgd2FrZXVwIGV2ZW50cy4KIAkgKi8KLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogbG9vcDoKIAlpZiAoam91cm5hbC0+al9mbGFncyAmIEpCRDJfVU5NT1VOVCkKQEAgLTE1NCwxMCArMTUzLDEwIEBACiAKIAlpZiAoam91cm5hbC0+al9jb21taXRfc2VxdWVuY2UgIT0gam91cm5hbC0+al9jb21taXRfcmVxdWVzdCkgewogCQlqYmRfZGVidWcoMSwgIk9LLCByZXF1ZXN0cyBkaWZmZXJcbiIpOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlkZWxfdGltZXJfc3luYygmam91cm5hbC0+al9jb21taXRfdGltZXIpOwogCQlqYmQyX2pvdXJuYWxfY29tbWl0X3RyYW5zYWN0aW9uKGpvdXJuYWwpOwotCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCWdvdG8gbG9vcDsKIAl9CiAKQEAgLTE2OSw5ICsxNjgsOSBAQAogCQkgKiBiZSBhbHJlYWR5IHN0b3BwZWQuCiAJCSAqLwogCQlqYmRfZGVidWcoMSwgIk5vdyBzdXNwZW5kaW5nIGtqb3VybmFsZDJcbiIpOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlyZWZyaWdlcmF0b3IoKTsKLQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIFdlIGFzc3VtZSBvbiByZXN1bWUgdGhhdCBjb21taXRzIGFyZSBhbHJlYWR5IHRoZXJlLApAQCAtMTkxLDkgKzE5MCw5IEBACiAJCWlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9VTk1PVU5UKQogCQkJc2hvdWxkX3NsZWVwID0gMDsKIAkJaWYgKHNob3VsZF9zbGVlcCkgewotCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCQl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCQlzY2hlZHVsZSgpOwotCQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQkJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJfQogCQlmaW5pc2hfd2FpdCgmam91cm5hbC0+al93YWl0X2NvbW1pdCwgJndhaXQpOwogCX0KQEAgLTIxMSw3ICsyMTAsNyBAQAogCWdvdG8gbG9vcDsKIAogZW5kX2xvb3A6Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWRlbF90aW1lcl9zeW5jKCZqb3VybmFsLT5qX2NvbW1pdF90aW1lcik7CiAJam91cm5hbC0+al90YXNrID0gTlVMTDsKIAl3YWtlX3VwKCZqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQpOwpAQCAtMjM0LDE2ICsyMzMsMTYgQEAKIAogc3RhdGljIHZvaWQgam91cm5hbF9raWxsX3RocmVhZChqb3VybmFsX3QgKmpvdXJuYWwpCiB7Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJam91cm5hbC0+al9mbGFncyB8PSBKQkQyX1VOTU9VTlQ7CiAKIAl3aGlsZSAoam91cm5hbC0+al90YXNrKSB7CiAJCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9jb21taXQpOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQl3YWl0X2V2ZW50KGpvdXJuYWwtPmpfd2FpdF9kb25lX2NvbW1pdCwgam91cm5hbC0+al90YXNrID09IE5VTEwpOwotCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIAogLyoKQEAgLTMxMCw3ICszMDksMTcgQEAKIAkgKi8KIAlKX0FTU0VSVF9CSChiaF9pbiwgYnVmZmVyX2piZGRpcnR5KGJoX2luKSk7CiAKLQluZXdfYmggPSBhbGxvY19idWZmZXJfaGVhZChHRlBfTk9GU3xfX0dGUF9OT0ZBSUwpOworcmV0cnlfYWxsb2M6CisJbmV3X2JoID0gYWxsb2NfYnVmZmVyX2hlYWQoR0ZQX05PRlMpOworCWlmICghbmV3X2JoKSB7CisJCS8qCisJCSAqIEZhaWx1cmUgaXMgbm90IGFuIG9wdGlvbiwgYnV0IF9fR0ZQX05PRkFJTCBpcyBnb2luZworCQkgKiBhd2F5OyBzbyB3ZSByZXRyeSBvdXJzZWx2ZXMgaGVyZS4KKwkJICovCisJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzUwKTsKKwkJZ290byByZXRyeV9hbGxvYzsKKwl9CisKIAkvKiBrZWVwIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucyBzYW5lICovCiAJbmV3X2JoLT5iX3N0YXRlID0gMDsKIAlpbml0X2J1ZmZlcihuZXdfYmgsIE5VTEwsIE5VTEwpOwpAQCAtNDQyLDcgKzQ1MSw3IEBACiB7CiAJaW50IGxlZnQgPSBqb3VybmFsLT5qX2ZyZWU7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJLyogYXNzZXJ0X3NwaW5fbG9ja2VkKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOyAqLwogCiAJLyoKIAkgKiBCZSBwZXNzaW1pc3RpYyBoZXJlIGFib3V0IHRoZSBudW1iZXIgb2YgdGhvc2UgZnJlZSBibG9ja3Mgd2hpY2gKQEAgLTQ4Nyw5ICs0OTYsOSBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlyZXQgPSBfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0aWQpOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDgsNyArNTE3LDcgQEAKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IE5VTEw7CiAJdGlkX3QgdGlkOwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlpZiAoam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uICYmICFjdXJyZW50LT5qb3VybmFsX2luZm8pIHsKIAkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb247CiAJCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7CkBAIC01MTYsMTIgKzUyNSwxMiBAQAogCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKIAogCWlmICghdHJhbnNhY3Rpb24pIHsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlyZXR1cm4gMDsJLyogTm90aGluZyB0byByZXRyeSAqLwogCX0KIAogCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCXJldHVybiAxOwogfQpAQCAtNTM1LDcgKzU0NCw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlpZiAoam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uKSB7CiAJCXRpZF90IHRpZCA9IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbi0+dF90aWQ7CiAKQEAgLTU1NCw3ICs1NjMsNyBAQAogCQkJKnB0aWQgPSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24tPnRfdGlkOwogCQlyZXQgPSAxOwogCX0KLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTY2LDI2ICs1NzUsMjQgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAorCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKICNpZmRlZiBDT05GSUdfSkJEMl9ERUJVRwotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlpZiAoIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdGlkKSkgewogCQlwcmludGsoS0VSTl9FTUVSRwogCQkgICAgICAgIiVzOiBlcnJvcjogal9jb21taXRfcmVxdWVzdD0lZCwgdGlkPSVkXG4iLAogCQkgICAgICAgX19mdW5jX18sIGpvdXJuYWwtPmpfY29tbWl0X3JlcXVlc3QsIHRpZCk7CiAJfQotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogI2VuZGlmCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXdoaWxlICh0aWRfZ3QodGlkLCBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZSkpIHsKIAkJamJkX2RlYnVnKDEsICJKQkQ6IHdhbnQgJWQsIGpfY29tbWl0X3NlcXVlbmNlPSVkXG4iLAogCQkJCSAgdGlkLCBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZSk7CiAJCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9jb21taXQpOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCXdhaXRfZXZlbnQoam91cm5hbC0+al93YWl0X2RvbmVfY29tbWl0LAogCQkJCSF0aWRfZ3QodGlkLCBqb3VybmFsLT5qX2NvbW1pdF9zZXF1ZW5jZSkpOwotCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAlpZiAodW5saWtlbHkoaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSkgewogCQlwcmludGsoS0VSTl9FTUVSRyAiam91cm5hbCBjb21taXQgSS9PIGVycm9yXG4iKTsKQEAgLTYwMiw3ICs2MDksNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYmxvY2tucjsKIAotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCUpfQVNTRVJUKGpvdXJuYWwtPmpfZnJlZSA+IDEpOwogCiAJYmxvY2tuciA9IGpvdXJuYWwtPmpfaGVhZDsKQEAgLTYxMCw3ICs2MTcsNyBAQAogCWpvdXJuYWwtPmpfZnJlZS0tOwogCWlmIChqb3VybmFsLT5qX2hlYWQgPT0gam91cm5hbC0+al9sYXN0KQogCQlqb3VybmFsLT5qX2hlYWQgPSBqb3VybmFsLT5qX2ZpcnN0OwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlyZXR1cm4gamJkMl9qb3VybmFsX2JtYXAoam91cm5hbCwgYmxvY2tuciwgcmV0cCk7CiB9CiAKQEAgLTgzMCw3ICs4MzcsNyBAQAogCW11dGV4X2luaXQoJmpvdXJuYWwtPmpfY2hlY2twb2ludF9tdXRleCk7CiAJc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfcmV2b2tlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2xpc3RfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJcndsb2NrX2luaXQoJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAlqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbCA9IChIWiAqIEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSk7CiAJam91cm5hbC0+al9taW5fYmF0Y2hfdGltZSA9IDA7CkBAIC0xMDk2LDE0ICsxMTAzLDE0IEBACiAJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCX0KIAotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlyZWFkX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJamJkX2RlYnVnKDEsIkpCRDogdXBkYXRpbmcgc3VwZXJibG9jayAoc3RhcnQgJWxkLCBzZXEgJWQsIGVycm5vICVkKVxuIiwKIAkJICBqb3VybmFsLT5qX3RhaWwsIGpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZSwgam91cm5hbC0+al9lcnJubyk7CiAKIAlzYi0+c19zZXF1ZW5jZSA9IGNwdV90b19iZTMyKGpvdXJuYWwtPmpfdGFpbF9zZXF1ZW5jZSk7CiAJc2ItPnNfc3RhcnQgICAgPSBjcHVfdG9fYmUzMihqb3VybmFsLT5qX3RhaWwpOwogCXNiLT5zX2Vycm5vICAgID0gY3B1X3RvX2JlMzIoam91cm5hbC0+al9lcnJubyk7Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAlCVUZGRVJfVFJBQ0UoYmgsICJtYXJraW5nIGRpcnR5Iik7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwpAQCAtMTEyNCwxMiArMTEzMSwxMiBAQAogCSAqIGFueSBmdXR1cmUgY29tbWl0IHdpbGwgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIHVwZGF0ZSB0aGUKIAkgKiBzdXBlcmJsb2NrIGFnYWluIHRvIHJlLXJlY29yZCB0aGUgdHJ1ZSBzdGFydCBvZiB0aGUgbG9nLiAqLwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKHNiLT5zX3N0YXJ0KQogCQlqb3VybmFsLT5qX2ZsYWdzICY9IH5KQkQyX0ZMVVNIRUQ7CiAJZWxzZQogCQlqb3VybmFsLT5qX2ZsYWdzIHw9IEpCRDJfRkxVU0hFRDsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKIC8qCkBAIC0xMzkxLDEzICsxMzk4LDkgQEAKIGludCBqYmQyX2pvdXJuYWxfY2hlY2tfYXZhaWxhYmxlX2ZlYXR1cmVzIChqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGxvbmcgY29tcGF0LAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcm8sIHVuc2lnbmVkIGxvbmcgaW5jb21wYXQpCiB7Ci0Jam91cm5hbF9zdXBlcmJsb2NrX3QgKnNiOwotCiAJaWYgKCFjb21wYXQgJiYgIXJvICYmICFpbmNvbXBhdCkKIAkJcmV0dXJuIDE7CiAKLQlzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKLQogCS8qIFdlIGNhbiBzdXBwb3J0IGFueSBrbm93biByZXF1ZXN0ZWQgZmVhdHVyZXMgaWZmIHRoZQogCSAqIHN1cGVyYmxvY2sgaXMgaW4gdmVyc2lvbiAyLiAgT3RoZXJ3aXNlIHdlIGZhaWwgdG8gc3VwcG9ydCBhbnkKIAkgKiBleHRlbmRlZCBzYiBmZWF0dXJlcy4gKi8KQEAgLTE1NDUsNyArMTU0OCw3IEBACiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgb2xkX3RhaWw7CiAKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAogCS8qIEZvcmNlIGV2ZXJ5dGhpbmcgYnVmZmVyZWQgdG8gdGhlIGxvZy4uLiAqLwogCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pIHsKQEAgLTE1NTgsMTAgKzE1NjEsMTAgQEAKIAlpZiAodHJhbnNhY3Rpb24pIHsKIAkJdGlkX3QgdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOwogCi0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAl9CiAKIAkvKiAuLi5hbmQgZmx1c2ggZXZlcnl0aGluZyBpbiB0aGUgbG9nIG91dCB0byBkaXNrLiAqLwpAQCAtMTU4NSwxMiArMTU4OCwxMiBAQAogCSAqIHRoZSBtYWdpYyBjb2RlIGZvciBhIGZ1bGx5LXJlY292ZXJlZCBzdXBlcmJsb2NrLiAgQW55IGZ1dHVyZQogCSAqIGNvbW1pdHMgb2YgZGF0YSB0byB0aGUgam91cm5hbCB3aWxsIHJlc3RvcmUgdGhlIGN1cnJlbnQKIAkgKiBzX3N0YXJ0IHZhbHVlLiAqLwotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCW9sZF90YWlsID0gam91cm5hbC0+al90YWlsOwogCWpvdXJuYWwtPmpfdGFpbCA9IDA7Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWpiZDJfam91cm5hbF91cGRhdGVfc3VwZXJibG9jayhqb3VybmFsLCAxKTsKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlqb3VybmFsLT5qX3RhaWwgPSBvbGRfdGFpbDsKIAogCUpfQVNTRVJUKCFqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pOwpAQCAtMTU5OCw3ICsxNjAxLDcgQEAKIAlKX0FTU0VSVCgham91cm5hbC0+al9jaGVja3BvaW50X3RyYW5zYWN0aW9ucyk7CiAJSl9BU1NFUlQoam91cm5hbC0+al9oZWFkID09IGpvdXJuYWwtPmpfdGFpbCk7CiAJSl9BU1NFUlQoam91cm5hbC0+al90YWlsX3NlcXVlbmNlID09IGpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UpOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxNyw3ICsxNjIwLDYgQEAKIAogaW50IGpiZDJfam91cm5hbF93aXBlKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IHdyaXRlKQogewotCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYjsKIAlpbnQgZXJyID0gMDsKIAogCUpfQVNTRVJUICghKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0xPQURFRCkpOwpAQCAtMTYyNiw4ICsxNjI4LDYgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7Ci0KIAlpZiAoIWpvdXJuYWwtPmpfdGFpbCkKIAkJZ290byBub19yZWNvdmVyeTsKIApAQCAtMTY2NSwxMiArMTY2NSwxMiBAQAogCXByaW50ayhLRVJOX0VSUiAiQWJvcnRpbmcgam91cm5hbCBvbiBkZXZpY2UgJXMuXG4iLAogCSAgICAgICBqb3VybmFsLT5qX2Rldm5hbWUpOwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJam91cm5hbC0+al9mbGFncyB8PSBKQkQyX0FCT1JUOwogCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOwogCWlmICh0cmFuc2FjdGlvbikKIAkJX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdHJhbnNhY3Rpb24tPnRfdGlkKTsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiB9CiAKIC8qIFNvZnQgYWJvcnQ6IHJlY29yZCB0aGUgYWJvcnQgZXJyb3Igc3RhdHVzIGluIHRoZSBqb3VybmFsIHN1cGVyYmxvY2ssCkBAIC0xNzU1LDEyICsxNzU1LDEyIEBACiB7CiAJaW50IGVycjsKIAotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlyZWFkX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0FCT1JUKQogCQllcnIgPSAtRVJPRlM7CiAJZWxzZQogCQllcnIgPSBqb3VybmFsLT5qX2Vycm5vOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3NzUsMTIgKzE3NzUsMTIgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkJEMl9BQk9SVCkKIAkJZXJyID0gLUVST0ZTOwogCWVsc2UKIAkJam91cm5hbC0+al9lcnJubyA9IDA7Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3OTMsMTAgKzE3OTMsMTAgQEAKICAqLwogdm9pZCBqYmQyX2pvdXJuYWxfYWNrX2Vycihqb3VybmFsX3QgKmpvdXJuYWwpCiB7Ci0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKGpvdXJuYWwtPmpfZXJybm8pCiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkJEMl9BQ0tfRVJSOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIAogaW50IGpiZDJfam91cm5hbF9ibG9ja3NfcGVyX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTIyMDEsOCArMjIwMSw2IEBACiB2b2lkIGpiZDJfam91cm5hbF9yZWxlYXNlX2piZF9pbm9kZShqb3VybmFsX3QgKmpvdXJuYWwsCiAJCQkJICAgIHN0cnVjdCBqYmQyX2lub2RlICpqaW5vZGUpCiB7Ci0JaW50IHdyaXRlb3V0ID0gMDsKLQogCWlmICgham91cm5hbCkKIAkJcmV0dXJuOwogcmVzdGFydDoKQEAgLTIyMTksOSArMjIxNyw2IEBACiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKLQkvKiBEbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGRhdGEgd3JpdGViYWNrPyAqLwotCWlmIChqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24gPT0gamlub2RlLT5pX3RyYW5zYWN0aW9uKQotCQl3cml0ZW91dCA9IDE7CiAJaWYgKGppbm9kZS0+aV90cmFuc2FjdGlvbikgewogCQlsaXN0X2RlbCgmamlub2RlLT5pX2xpc3QpOwogCQlqaW5vZGUtPmlfdHJhbnNhY3Rpb24gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvamJkMi9yZWNvdmVyeS5jIGIvZnMvamJkMi9yZWNvdmVyeS5jCmluZGV4IDA0OTI4MWIuLjJiYzRkNWYgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQyL3JlY292ZXJ5LmMKQEAgLTI4NSwxMiArMjg1LDEwIEBACiBpbnQgamJkMl9qb3VybmFsX3NraXBfcmVjb3Zlcnkoam91cm5hbF90ICpqb3VybmFsKQogewogCWludAkJCWVycjsKLQlqb3VybmFsX3N1cGVyYmxvY2tfdCAqCXNiOwogCiAJc3RydWN0IHJlY292ZXJ5X2luZm8JaW5mbzsKIAogCW1lbXNldCAoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0Jc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CiAKIAllcnIgPSBkb19vbmVfcGFzcyhqb3VybmFsLCAmaW5mbywgUEFTU19TQ0FOKTsKIApAQCAtMjk5LDcgKzI5Nyw4IEBACiAJCSsram91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZTsKIAl9IGVsc2UgewogI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCi0JCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLSBiZTMyX3RvX2NwdShzYi0+c19zZXF1ZW5jZSk7CisJCWludCBkcm9wcGVkID0gaW5mby5lbmRfdHJhbnNhY3Rpb24gLSAKKwkJCWJlMzJfdG9fY3B1KGpvdXJuYWwtPmpfc3VwZXJibG9jay0+c19zZXF1ZW5jZSk7CiAjZW5kaWYKIAkJamJkX2RlYnVnKDEsCiAJCQkgICJKQkQ6IGlnbm9yaW5nICVkIHRyYW5zYWN0aW9uJXMgZnJvbSB0aGUgam91cm5hbC5cbiIsCkBAIC0zNjUsMTEgKzM2NCw2IEBACiAJaW50CQkJdGFnX2J5dGVzID0gam91cm5hbF90YWdfYnl0ZXMoam91cm5hbCk7CiAJX191MzIJCQljcmMzMl9zdW0gPSB+MDsgLyogVHJhbnNhY3Rpb25hbCBDaGVja3N1bXMgKi8KIAotCS8qIFByZWNvbXB1dGUgdGhlIG1heGltdW0gbWV0YWRhdGEgZGVzY3JpcHRvcnMgaW4gYSBkZXNjcmlwdG9yIGJsb2NrICovCi0JaW50CQkJTUFYX0JMT0NLU19QRVJfREVTQzsKLQlNQVhfQkxPQ0tTX1BFUl9ERVNDID0gKChqb3VybmFsLT5qX2Jsb2Nrc2l6ZS1zaXplb2Yoam91cm5hbF9oZWFkZXJfdCkpCi0JCQkgICAgICAgLyB0YWdfYnl0ZXMpOwotCiAJLyoKIAkgKiBGaXJzdCB0aGluZyBpcyB0byBlc3RhYmxpc2ggd2hhdCB3ZSBleHBlY3QgdG8gZmluZCBpbiB0aGUgbG9nCiAJICogKGluIHRlcm1zIG9mIHRyYW5zYWN0aW9uIElEcyksIGFuZCB3aGVyZSAoaW4gdGVybXMgb2YgbG9nCmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKaW5kZXggYjhlMDgwNi4uZDk1Y2M5ZCAxMDA2NDQKLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiBzdGF0aWMgdm9pZCBfX2piZDJfam91cm5hbF90ZW1wX3VubGlua19idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpOwogCkBAIC01Myw2ICs1NSw5IEBACiAJdHJhbnNhY3Rpb24tPnRfdGlkID0gam91cm5hbC0+al90cmFuc2FjdGlvbl9zZXF1ZW5jZSsrOwogCXRyYW5zYWN0aW9uLT50X2V4cGlyZXMgPSBqaWZmaWVzICsgam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWw7CiAJc3Bpbl9sb2NrX2luaXQoJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKKwlhdG9taWNfc2V0KCZ0cmFuc2FjdGlvbi0+dF91cGRhdGVzLCAwKTsKKwlhdG9taWNfc2V0KCZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzLCAwKTsKKwlhdG9taWNfc2V0KCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfY291bnQsIDApOwogCUlOSVRfTElTVF9IRUFEKCZ0cmFuc2FjdGlvbi0+dF9pbm9kZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmdHJhbnNhY3Rpb24tPnRfcHJpdmF0ZV9saXN0KTsKIApAQCAtODMsNjUgKzg4LDc1IEBACiAgKiB0cmFuc2FjdGlvbidzIGJ1ZmZlciBjcmVkaXRzLgogICovCiAKLXN0YXRpYyBpbnQgc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbF90ICpqb3VybmFsLCBoYW5kbGVfdCAqaGFuZGxlKQorc3RhdGljIGludCBzdGFydF90aGlzX2hhbmRsZShqb3VybmFsX3QgKmpvdXJuYWwsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgICAgIGludCBnZnBfbWFzaykKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbjsKIAlpbnQgbmVlZGVkOwogCWludCBuYmxvY2tzID0gaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzOwogCXRyYW5zYWN0aW9uX3QgKm5ld190cmFuc2FjdGlvbiA9IE5VTEw7Ci0JaW50IHJldCA9IDA7CiAJdW5zaWduZWQgbG9uZyB0cyA9IGppZmZpZXM7CiAKIAlpZiAobmJsb2NrcyA+IGpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJKQkQ6ICVzIHdhbnRzIHRvbyBtYW55IGNyZWRpdHMgKCVkID4gJWQpXG4iLAogCQkgICAgICAgY3VycmVudC0+Y29tbSwgbmJsb2NrcywKIAkJICAgICAgIGpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpOwotCQlyZXQgPSAtRU5PU1BDOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCiBhbGxvY190cmFuc2FjdGlvbjoKIAlpZiAoIWpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikgewotCQluZXdfdHJhbnNhY3Rpb24gPSBremFsbG9jKHNpemVvZigqbmV3X3RyYW5zYWN0aW9uKSwKLQkJCQkJCUdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7CisJCW5ld190cmFuc2FjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfdHJhbnNhY3Rpb24pLCBnZnBfbWFzayk7CiAJCWlmICghbmV3X3RyYW5zYWN0aW9uKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7CisJCQkvKgorCQkJICogSWYgX19HRlBfRlMgaXMgbm90IHByZXNlbnQsIHRoZW4gd2UgbWF5IGJlCisJCQkgKiBiZWluZyBjYWxsZWQgZnJvbSBpbnNpZGUgdGhlIGZzIHdyaXRlYmFjaworCQkJICogbGF5ZXIsIHNvIHdlIE1VU1QgTk9UIGZhaWwuICBTaW5jZQorCQkJICogX19HRlBfTk9GQUlMIGlzIGdvaW5nIGF3YXksIHdlIHdpbGwgYXJyYW5nZQorCQkJICogdG8gcmV0cnkgdGhlIGFsbG9jYXRpb24gb3Vyc2VsdmVzLgorCQkJICovCisJCQlpZiAoKGdmcF9tYXNrICYgX19HRlBfRlMpID09IDApIHsKKwkJCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi81MCk7CisJCQkJZ290byBhbGxvY190cmFuc2FjdGlvbjsKKwkJCX0KKwkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQogCiAJamJkX2RlYnVnKDMsICJOZXcgaGFuZGxlICVwIGdvaW5nIGxpdmUuXG4iLCBoYW5kbGUpOwogCi1yZXBlYXQ6Ci0KIAkvKgogCSAqIFdlIG5lZWQgdG8gaG9sZCBqX3N0YXRlX2xvY2sgdW50aWwgdF91cGRhdGVzIGhhcyBiZWVuIGluY3JlbWVudGVkLAogCSAqIGZvciBwcm9wZXIgam91cm5hbCBiYXJyaWVyIGhhbmRsaW5nCiAJICovCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwotcmVwZWF0X2xvY2tlZDoKK3JlcGVhdDoKKwlyZWFkX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSB8fAogCSAgICAoam91cm5hbC0+al9lcnJubyAhPSAwICYmICEoam91cm5hbC0+al9mbGFncyAmIEpCRDJfQUNLX0VSUikpKSB7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwotCQlyZXQgPSAtRVJPRlM7Ci0JCWdvdG8gb3V0OworCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJa2ZyZWUobmV3X3RyYW5zYWN0aW9uKTsKKwkJcmV0dXJuIC1FUk9GUzsKIAl9CiAKIAkvKiBXYWl0IG9uIHRoZSBqb3VybmFsJ3MgdHJhbnNhY3Rpb24gYmFycmllciBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoam91cm5hbC0+al9iYXJyaWVyX2NvdW50KSB7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkLAogCQkJCWpvdXJuYWwtPmpfYmFycmllcl9jb3VudCA9PSAwKTsKIAkJZ290byByZXBlYXQ7CiAJfQogCiAJaWYgKCFqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pIHsKLQkJaWYgKCFuZXdfdHJhbnNhY3Rpb24pIHsKLQkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJaWYgKCFuZXdfdHJhbnNhY3Rpb24pCiAJCQlnb3RvIGFsbG9jX3RyYW5zYWN0aW9uOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlpZiAoIWpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikgeworCQkJamJkMl9nZXRfdHJhbnNhY3Rpb24oam91cm5hbCwgbmV3X3RyYW5zYWN0aW9uKTsKKwkJCW5ld190cmFuc2FjdGlvbiA9IE5VTEw7CiAJCX0KLQkJamJkMl9nZXRfdHJhbnNhY3Rpb24oam91cm5hbCwgbmV3X3RyYW5zYWN0aW9uKTsKLQkJbmV3X3RyYW5zYWN0aW9uID0gTlVMTDsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlnb3RvIHJlcGVhdDsKIAl9CiAKIAl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbjsKQEAgLTE1NSw3ICsxNzAsNyBAQAogCiAJCXByZXBhcmVfdG9fd2FpdCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCwKIAkJCQkJJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlzY2hlZHVsZSgpOwogCQlmaW5pc2hfd2FpdCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCwgJndhaXQpOwogCQlnb3RvIHJlcGVhdDsKQEAgLTE2Niw4ICsxODEsOCBAQAogCSAqIGJ1ZmZlcnMgcmVxdWVzdGVkIGJ5IHRoaXMgb3BlcmF0aW9uLCB3ZSBuZWVkIHRvIHN0YWxsIHBlbmRpbmcgYSBsb2cKIAkgKiBjaGVja3BvaW50IHRvIGZyZWUgc29tZSBtb3JlIGxvZyBzcGFjZS4KIAkgKi8KLQlzcGluX2xvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKLQluZWVkZWQgPSB0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzICsgbmJsb2NrczsKKwluZWVkZWQgPSBhdG9taWNfYWRkX3JldHVybihuYmxvY2tzLAorCQkJCSAgICZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKIAogCWlmIChuZWVkZWQgPiBqb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzKSB7CiAJCS8qCkBAIC0xNzgsMTEgKzE5MywxMSBAQAogCQlERUZJTkVfV0FJVCh3YWl0KTsKIAogCQlqYmRfZGVidWcoMiwgIkhhbmRsZSAlcCBzdGFydGluZyBuZXcgY29tbWl0Li4uXG4iLCBoYW5kbGUpOwotCQlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOworCQlhdG9taWNfc3ViKG5ibG9ja3MsICZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKIAkJcHJlcGFyZV90b193YWl0KCZqb3VybmFsLT5qX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkLCAmd2FpdCwKIAkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCV9famJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRyYW5zYWN0aW9uLT50X3RpZCk7Ci0JCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAkJc2NoZWR1bGUoKTsKIAkJZmluaXNoX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQsICZ3YWl0KTsKIAkJZ290byByZXBlYXQ7CkBAIC0yMTUsMzUgKzIzMCw0OCBAQAogCSAqLwogCWlmIChfX2piZDJfbG9nX3NwYWNlX2xlZnQoam91cm5hbCkgPCBqYmRfc3BhY2VfbmVlZGVkKGpvdXJuYWwpKSB7CiAJCWpiZF9kZWJ1ZygyLCAiSGFuZGxlICVwIHdhaXRpbmcgZm9yIGNoZWNrcG9pbnQuLi5cbiIsIGhhbmRsZSk7Ci0JCXNwaW5fdW5sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7Ci0JCV9famJkMl9sb2dfd2FpdF9mb3Jfc3BhY2Uoam91cm5hbCk7Ci0JCWdvdG8gcmVwZWF0X2xvY2tlZDsKKwkJYXRvbWljX3N1YihuYmxvY2tzLCAmdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyk7CisJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlpZiAoX19qYmQyX2xvZ19zcGFjZV9sZWZ0KGpvdXJuYWwpIDwgamJkX3NwYWNlX25lZWRlZChqb3VybmFsKSkKKwkJCV9famJkMl9sb2dfd2FpdF9mb3Jfc3BhY2Uoam91cm5hbCk7CisJCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJZ290byByZXBlYXQ7CiAJfQogCiAJLyogT0ssIGFjY291bnQgZm9yIHRoZSBidWZmZXJzIHRoYXQgdGhpcyBvcGVyYXRpb24gZXhwZWN0cyB0bwotCSAqIHVzZSBhbmQgYWRkIHRoZSBoYW5kbGUgdG8gdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24uICovCi0KLQlpZiAodGltZV9hZnRlcih0cmFuc2FjdGlvbi0+dF9zdGFydCwgdHMpKSB7CisJICogdXNlIGFuZCBhZGQgdGhlIGhhbmRsZSB0byB0aGUgcnVubmluZyB0cmFuc2FjdGlvbi4gCisJICoKKwkgKiBJbiBvcmRlciBmb3IgdF9tYXhfd2FpdCB0byBiZSByZWxpYWJsZSwgaXQgbXVzdCBiZQorCSAqIHByb3RlY3RlZCBieSBhIGxvY2suICBCdXQgZG9pbmcgc28gd2lsbCBtZWFuIHRoYXQKKwkgKiBzdGFydF90aGlzX2hhbmRsZSgpIGNhbiBub3QgYmUgcnVuIGluIHBhcmFsbGVsIG9uIFNNUAorCSAqIHN5c3RlbXMsIHdoaWNoIGxpbWl0cyBvdXIgc2NhbGFiaWxpdHkuICBTbyB3ZSBvbmx5IGVuYWJsZQorCSAqIGl0IHdoZW4gZGVidWdnaW5nIGlzIGVuYWJsZWQuICBXZSBtYXkgd2FudCB0byB1c2UgYQorCSAqIHNlcGFyYXRlIGZsYWcsIGV2ZW50dWFsbHksIHNvIHdlIGNhbiBlbmFibGUgdGhpcworCSAqIGluZGVwZW5kZW50bHkgb2YgZGVidWdnaW5nLgorCSAqLworI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCisJaWYgKGpiZDJfam91cm5hbF9lbmFibGVfZGVidWcgJiYKKwkgICAgdGltZV9hZnRlcih0cmFuc2FjdGlvbi0+dF9zdGFydCwgdHMpKSB7CiAJCXRzID0gamJkMl90aW1lX2RpZmYodHMsIHRyYW5zYWN0aW9uLT50X3N0YXJ0KTsKKwkJc3Bpbl9sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAJCWlmICh0cyA+IHRyYW5zYWN0aW9uLT50X21heF93YWl0KQogCQkJdHJhbnNhY3Rpb24tPnRfbWF4X3dhaXQgPSB0czsKKwkJc3Bpbl91bmxvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAl9Ci0KKyNlbmRpZgogCWhhbmRsZS0+aF90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwotCXRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMgKz0gbmJsb2NrczsKLQl0cmFuc2FjdGlvbi0+dF91cGRhdGVzKys7Ci0JdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2NvdW50Kys7CisJYXRvbWljX2luYygmdHJhbnNhY3Rpb24tPnRfdXBkYXRlcyk7CisJYXRvbWljX2luYygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2NvdW50KTsKIAlqYmRfZGVidWcoNCwgIkhhbmRsZSAlcCBnaXZlbiAlZCBjcmVkaXRzICh0b3RhbCAlZCwgZnJlZSAlZClcbiIsCi0JCSAgaGFuZGxlLCBuYmxvY2tzLCB0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzLAorCQkgIGhhbmRsZSwgbmJsb2NrcywKKwkJICBhdG9taWNfcmVhZCgmdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyksCiAJCSAgX19qYmQyX2xvZ19zcGFjZV9sZWZ0KGpvdXJuYWwpKTsKLQlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJbG9ja19tYXBfYWNxdWlyZSgmaGFuZGxlLT5oX2xvY2tkZXBfbWFwKTsKLW91dDoKLQlpZiAodW5saWtlbHkobmV3X3RyYW5zYWN0aW9uKSkJCS8qIEl0J3MgdXN1YWxseSBOVUxMICovCi0JCWtmcmVlKG5ld190cmFuc2FjdGlvbik7Ci0JcmV0dXJuIHJldDsKKwlrZnJlZShuZXdfdHJhbnNhY3Rpb24pOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGpiZDJfaGFuZGxlX2tleTsKQEAgLTI3OCw3ICszMDYsNyBAQAogICoKICAqIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgaGFuZGxlLCBvciBOVUxMIG9uIGZhaWx1cmUKICAqLwotaGFuZGxlX3QgKmpiZDJfam91cm5hbF9zdGFydChqb3VybmFsX3QgKmpvdXJuYWwsIGludCBuYmxvY2tzKQoraGFuZGxlX3QgKmpiZDJfX2pvdXJuYWxfc3RhcnQoam91cm5hbF90ICpqb3VybmFsLCBpbnQgbmJsb2NrcywgaW50IGdmcF9tYXNrKQogewogCWhhbmRsZV90ICpoYW5kbGUgPSBqb3VybmFsX2N1cnJlbnRfaGFuZGxlKCk7CiAJaW50IGVycjsKQEAgLTI5OCw3ICszMjYsNyBAQAogCiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gaGFuZGxlOwogCi0JZXJyID0gc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbCwgaGFuZGxlKTsKKwllcnIgPSBzdGFydF90aGlzX2hhbmRsZShqb3VybmFsLCBoYW5kbGUsIGdmcF9tYXNrKTsKIAlpZiAoZXJyIDwgMCkgewogCQlqYmQyX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CkBAIC0zMDgsNiArMzM2LDE1IEBACiBvdXQ6CiAJcmV0dXJuIGhhbmRsZTsKIH0KK0VYUE9SVF9TWU1CT0woamJkMl9fam91cm5hbF9zdGFydCk7CisKKworaGFuZGxlX3QgKmpiZDJfam91cm5hbF9zdGFydChqb3VybmFsX3QgKmpvdXJuYWwsIGludCBuYmxvY2tzKQoreworCXJldHVybiBqYmQyX19qb3VybmFsX3N0YXJ0KGpvdXJuYWwsIG5ibG9ja3MsIEdGUF9OT0ZTKTsKK30KK0VYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3N0YXJ0KTsKKwogCiAvKioKICAqIGludCBqYmQyX2pvdXJuYWxfZXh0ZW5kKCkgLSBleHRlbmQgYnVmZmVyIGNyZWRpdHMuCkBAIC0zNDIsNyArMzc5LDcgQEAKIAogCXJlc3VsdCA9IDE7CiAKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJcmVhZF9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJLyogRG9uJ3QgZXh0ZW5kIGEgbG9ja2VkLWRvd24gdHJhbnNhY3Rpb24hICovCiAJaWYgKGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9zdGF0ZSAhPSBUX1JVTk5JTkcpIHsKQEAgLTM1Miw3ICszODksNyBAQAogCX0KIAogCXNwaW5fbG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwotCXdhbnRlZCA9IHRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMgKyBuYmxvY2tzOworCXdhbnRlZCA9IGF0b21pY19yZWFkKCZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKSArIG5ibG9ja3M7CiAKIAlpZiAod2FudGVkID4gam91cm5hbC0+al9tYXhfdHJhbnNhY3Rpb25fYnVmZmVycykgewogCQlqYmRfZGVidWcoMywgImRlbmllZCBoYW5kbGUgJXAgJWQgYmxvY2tzOiAiCkBAIC0zNjcsMTQgKzQwNCwxNCBAQAogCX0KIAogCWhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyArPSBuYmxvY2tzOwotCXRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMgKz0gbmJsb2NrczsKKwlhdG9taWNfYWRkKG5ibG9ja3MsICZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKIAlyZXN1bHQgPSAwOwogCiAJamJkX2RlYnVnKDMsICJleHRlbmRlZCBoYW5kbGUgJXAgYnkgJWRcbiIsIGhhbmRsZSwgbmJsb2Nrcyk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIGVycm9yX291dDoKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMzk0LDggKzQzMSw3IEBACiAgKiB0cmFuc2FjdGlvbiBjYXBhYmFibGUgb2YgZ3VhcmFudGVlaW5nIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mCiAgKiBjcmVkaXRzLgogICovCi0KLWludCBqYmQyX2pvdXJuYWxfcmVzdGFydChoYW5kbGVfdCAqaGFuZGxlLCBpbnQgbmJsb2NrcykKK2ludCBqYmQyX19qb3VybmFsX3Jlc3RhcnQoaGFuZGxlX3QgKmhhbmRsZSwgaW50IG5ibG9ja3MsIGludCBnZnBfbWFzaykKIHsKIAl0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbjsKIAlqb3VybmFsX3QgKmpvdXJuYWwgPSB0cmFuc2FjdGlvbi0+dF9qb3VybmFsOwpAQCAtNDEwLDI5ICs0NDYsMzUgQEAKIAkgKiBGaXJzdCB1bmxpbmsgdGhlIGhhbmRsZSBmcm9tIGl0cyBjdXJyZW50IHRyYW5zYWN0aW9uLCBhbmQgc3RhcnQgdGhlCiAJICogY29tbWl0IG9uIHRoYXQuCiAJICovCi0JSl9BU1NFUlQodHJhbnNhY3Rpb24tPnRfdXBkYXRlcyA+IDApOworCUpfQVNTRVJUKGF0b21pY19yZWFkKCZ0cmFuc2FjdGlvbi0+dF91cGRhdGVzKSA+IDApOwogCUpfQVNTRVJUKGpvdXJuYWxfY3VycmVudF9oYW5kbGUoKSA9PSBoYW5kbGUpOwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlzcGluX2xvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKLQl0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzIC09IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKLQl0cmFuc2FjdGlvbi0+dF91cGRhdGVzLS07Ci0KLQlpZiAoIXRyYW5zYWN0aW9uLT50X3VwZGF0ZXMpCisJYXRvbWljX3N1YihoYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMsCisJCSAgICZ0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykpCiAJCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF91cGRhdGVzKTsKIAlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCiAJamJkX2RlYnVnKDIsICJyZXN0YXJ0aW5nIGhhbmRsZSAlcFxuIiwgaGFuZGxlKTsKIAlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJbG9ja19tYXBfcmVsZWFzZSgmaGFuZGxlLT5oX2xvY2tkZXBfbWFwKTsKIAloYW5kbGUtPmhfYnVmZmVyX2NyZWRpdHMgPSBuYmxvY2tzOwotCXJldCA9IHN0YXJ0X3RoaXNfaGFuZGxlKGpvdXJuYWwsIGhhbmRsZSk7CisJcmV0ID0gc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbCwgaGFuZGxlLCBnZnBfbWFzayk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0woamJkMl9fam91cm5hbF9yZXN0YXJ0KTsKIAogCitpbnQgamJkMl9qb3VybmFsX3Jlc3RhcnQoaGFuZGxlX3QgKmhhbmRsZSwgaW50IG5ibG9ja3MpCit7CisJcmV0dXJuIGpiZDJfX2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIG5ibG9ja3MsIEdGUF9OT0ZTKTsKK30KK0VYUE9SVF9TWU1CT0woamJkMl9qb3VybmFsX3Jlc3RhcnQpOworCiAvKioKICAqIHZvaWQgamJkMl9qb3VybmFsX2xvY2tfdXBkYXRlcyAoKSAtIGVzdGFibGlzaCBhIHRyYW5zYWN0aW9uIGJhcnJpZXIuCiAgKiBAam91cm5hbDogIEpvdXJuYWwgdG8gZXN0YWJsaXNoIGEgYmFycmllciBvbi4KQEAgLTQ0Nyw3ICs0ODksNyBAQAogewogCURFRklORV9XQUlUKHdhaXQpOwogCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJKytqb3VybmFsLT5qX2JhcnJpZXJfY291bnQ7CiAKIAkvKiBXYWl0IHVudGlsIHRoZXJlIGFyZSBubyBydW5uaW5nIHVwZGF0ZXMgKi8KQEAgLTQ1OCwxOSArNTAwLDE5IEBACiAJCQlicmVhazsKIAogCQlzcGluX2xvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKLQkJaWYgKCF0cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7CisJCWlmICghYXRvbWljX3JlYWQoJnRyYW5zYWN0aW9uLT50X3VwZGF0ZXMpKSB7CiAJCQlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KIAkJcHJlcGFyZV90b193YWl0KCZqb3VybmFsLT5qX3dhaXRfdXBkYXRlcywgJndhaXQsCiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlzY2hlZHVsZSgpOwogCQlmaW5pc2hfd2FpdCgmam91cm5hbC0+al93YWl0X3VwZGF0ZXMsICZ3YWl0KTsKLQkJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAkvKgogCSAqIFdlIGhhdmUgbm93IGVzdGFibGlzaGVkIGEgYmFycmllciBhZ2FpbnN0IG90aGVyIG5vcm1hbCB1cGRhdGVzLCBidXQKQEAgLTQ5NCw5ICs1MzYsOSBAQAogCUpfQVNTRVJUKGpvdXJuYWwtPmpfYmFycmllcl9jb3VudCAhPSAwKTsKIAogCW11dGV4X3VubG9jaygmam91cm5hbC0+al9iYXJyaWVyKTsKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAktLWpvdXJuYWwtPmpfYmFycmllcl9jb3VudDsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJd2FrZV91cCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCk7CiB9CiAKQEAgLTEyMzgsNyArMTI4MCw4IEBACiB7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsID0gdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKLQlpbnQgZXJyOworCWludCBlcnIsIHdhaXRfZm9yX2NvbW1pdCA9IDA7CisJdGlkX3QgdGlkOwogCXBpZF90IHBpZDsKIAogCUpfQVNTRVJUKGpvdXJuYWxfY3VycmVudF9oYW5kbGUoKSA9PSBoYW5kbGUpOwpAQCAtMTI0Niw3ICsxMjg5LDcgQEAKIAlpZiAoaXNfaGFuZGxlX2Fib3J0ZWQoaGFuZGxlKSkKIAkJZXJyID0gLUVJTzsKIAllbHNlIHsKLQkJSl9BU1NFUlQodHJhbnNhY3Rpb24tPnRfdXBkYXRlcyA+IDApOworCQlKX0FTU0VSVChhdG9taWNfcmVhZCgmdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykgPiAwKTsKIAkJZXJyID0gMDsKIAl9CiAKQEAgLTEyOTEsOSArMTMzNCw5IEBACiAKIAkJam91cm5hbC0+al9sYXN0X3N5bmNfd3JpdGVyID0gcGlkOwogCi0JCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJcmVhZF9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQljb21taXRfdGltZSA9IGpvdXJuYWwtPmpfYXZlcmFnZV9jb21taXRfdGltZTsKLQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCXJlYWRfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCiAJCXRyYW5zX3RpbWUgPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfZ2V0KCksCiAJCQkJCQkgICB0cmFuc2FjdGlvbi0+dF9zdGFydF90aW1lKSk7CkBAIC0xMzE0LDE0ICsxMzU3LDggQEAKIAlpZiAoaGFuZGxlLT5oX3N5bmMpCiAJCXRyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdCA9IDE7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKLQlzcGluX2xvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKLQl0cmFuc2FjdGlvbi0+dF9vdXRzdGFuZGluZ19jcmVkaXRzIC09IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKLQl0cmFuc2FjdGlvbi0+dF91cGRhdGVzLS07Ci0JaWYgKCF0cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7Ci0JCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF91cGRhdGVzKTsKLQkJaWYgKGpvdXJuYWwtPmpfYmFycmllcl9jb3VudCkKLQkJCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQpOwotCX0KKwlhdG9taWNfc3ViKGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cywKKwkJICAgJnRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpOwogCiAJLyoKIAkgKiBJZiB0aGUgaGFuZGxlIGlzIG1hcmtlZCBTWU5DLCB3ZSBuZWVkIHRvIHNldCBhbm90aGVyIGNvbW1pdApAQCAtMTMzMCwxNSArMTM2NywxMyBAQAogCSAqIHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQgbm93LgogCSAqLwogCWlmIChoYW5kbGUtPmhfc3luYyB8fAotCQkJdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0cyA+Ci0JCQkJam91cm5hbC0+al9tYXhfdHJhbnNhY3Rpb25fYnVmZmVycyB8fAotCQkJdGltZV9hZnRlcl9lcShqaWZmaWVzLCB0cmFuc2FjdGlvbi0+dF9leHBpcmVzKSkgeworCSAgICAoYXRvbWljX3JlYWQoJnRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpID4KKwkgICAgIGpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMpIHx8CisJICAgIHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdHJhbnNhY3Rpb24tPnRfZXhwaXJlcykpIHsKIAkJLyogRG8gdGhpcyBldmVuIGZvciBhYm9ydGVkIGpvdXJuYWxzOiBhbiBhYm9ydCBzdGlsbAogCQkgKiBjb21wbGV0ZXMgdGhlIGNvbW1pdCB0aHJlYWQsIGl0IGp1c3QgZG9lc24ndCB3cml0ZQogCQkgKiBhbnl0aGluZyB0byBkaXNrLiAqLwotCQl0aWRfdCB0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CiAKLQkJc3Bpbl91bmxvY2soJnRyYW5zYWN0aW9uLT50X2hhbmRsZV9sb2NrKTsKIAkJamJkX2RlYnVnKDIsICJ0cmFuc2FjdGlvbiB0b28gb2xkLCByZXF1ZXN0aW5nIGNvbW1pdCBmb3IgIgogCQkJCQkiaGFuZGxlICVwXG4iLCBoYW5kbGUpOwogCQkvKiBUaGlzIGlzIG5vbi1ibG9ja2luZyAqLwpAQCAtMTM0OSwxMSArMTM4NCwyNSBAQAogCQkgKiB0byB3YWl0IGZvciB0aGUgY29tbWl0IHRvIGNvbXBsZXRlLgogCQkgKi8KIAkJaWYgKGhhbmRsZS0+aF9zeW5jICYmICEoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykpCi0JCQllcnIgPSBqYmQyX2xvZ193YWl0X2NvbW1pdChqb3VybmFsLCB0aWQpOwotCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CisJCQl3YWl0X2Zvcl9jb21taXQgPSAxOwogCX0KIAorCS8qCisJICogT25jZSB3ZSBkcm9wIHRfdXBkYXRlcywgaWYgaXQgZ29lcyB0byB6ZXJvIHRoZSB0cmFuc2FjdGlvbgorCSAqIGNvdWxkIHN0YXJ0IGNvbW1pdGluZyBvbiB1cyBhbmQgZXZlbnR1YWxseSBkaXNhcHBlYXIuICBTbworCSAqIG9uY2Ugd2UgZG8gdGhpcywgd2UgbXVzdCBub3QgZGVyZWZlcmVuY2UgdHJhbnNhY3Rpb24KKwkgKiBwb2ludGVyIGFnYWluLgorCSAqLworCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykpIHsKKwkJd2FrZV91cCgmam91cm5hbC0+al93YWl0X3VwZGF0ZXMpOworCQlpZiAoam91cm5hbC0+al9iYXJyaWVyX2NvdW50KQorCQkJd2FrZV91cCgmam91cm5hbC0+al93YWl0X3RyYW5zYWN0aW9uX2xvY2tlZCk7CisJfQorCisJaWYgKHdhaXRfZm9yX2NvbW1pdCkKKwkJZXJyID0gamJkMl9sb2dfd2FpdF9jb21taXQoam91cm5hbCwgdGlkKTsKKwogCWxvY2tfbWFwX3JlbGVhc2UoJmhhbmRsZS0+aF9sb2NrZGVwX21hcCk7CiAKIAlqYmQyX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CkBAIC0xNzE5LDcgKzE3NjgsNyBAQAogCQlnb3RvIHphcF9idWZmZXJfdW5sb2NrZWQ7CiAKIAkvKiBPSywgd2UgaGF2ZSBkYXRhIGJ1ZmZlciBpbiBqb3VybmFsZWQgbW9kZSAqLwotCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCWpiZF9sb2NrX2JoX3N0YXRlKGJoKTsKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIApAQCAtMTc3Miw3ICsxODIxLDcgQEAKIAkJCWpiZDJfam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKIAkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKLQkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQkJcmV0dXJuIHJldDsKIAkJfSBlbHNlIHsKIAkJCS8qIFRoZXJlIGlzIG5vIGN1cnJlbnRseS1ydW5uaW5nIHRyYW5zYWN0aW9uLiBTbyB0aGUKQEAgLTE3ODYsNyArMTgzNSw3IEBACiAJCQkJamJkMl9qb3VybmFsX3B1dF9qb3VybmFsX2hlYWQoamgpOwogCQkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCQkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7Ci0JCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCQkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQkJCXJldHVybiByZXQ7CiAJCQl9IGVsc2UgewogCQkJCS8qIFRoZSBvcnBoYW4gcmVjb3JkJ3MgdHJhbnNhY3Rpb24gaGFzCkBAIC0xODEwLDcgKzE4NTksNyBAQAogCQlqYmQyX2pvdXJuYWxfcHV0X2pvdXJuYWxfaGVhZChqaCk7CiAJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwotCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwkJd3JpdGVfdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQkvKiBHb29kLCB0aGUgYnVmZmVyIGJlbG9uZ3MgdG8gdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24uCkBAIC0xODI5LDcgKzE4NzgsNyBAQAogemFwX2J1ZmZlcl9ub19qaDoKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIHphcF9idWZmZXJfdW5sb2NrZWQ6CiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAlKX0FTU0VSVF9CSChiaCwgIWJ1ZmZlcl9qYmRkaXJ0eShiaCkpOwpAQCAtMjEzNiw5ICsyMTg1LDkgQEAKIAkvKiBMb2NrcyBhcmUgaGVyZSBqdXN0IHRvIGZvcmNlIHJlYWRpbmcgb2YgcmVjZW50IHZhbHVlcywgaXQgaXMKIAkgKiBlbm91Z2ggdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2FzIG5vdCBjb21taXR0aW5nIGJlZm9yZSB3ZSBzdGFydGVkCiAJICogYSB0cmFuc2FjdGlvbiBhZGRpbmcgdGhlIGlub2RlIHRvIG9ycGhhbiBsaXN0ICovCi0Jc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXJlYWRfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAljb21taXRfdHJhbnMgPSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb247Ci0Jc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJaW5vZGVfdHJhbnMgPSBqaW5vZGUtPmlfdHJhbnNhY3Rpb247CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2JhY2tncm91bmQuYyBiL2ZzL2pmZnMyL2JhY2tncm91bmQuYwppbmRleCA1NWYxZGRlLi40MDQxMTFiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9iYWNrZ3JvdW5kLmMKKysrIGIvZnMvamZmczIvYmFja2dyb3VuZC5jCkBAIC0yLDYgKzIsNyBAQAogICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIENyZWF0ZWQgYnkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2J1aWxkLmMgYi9mcy9qZmZzMi9idWlsZC5jCmluZGV4IGM1ZTE0NTAuLmE5MDZmNTMgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2J1aWxkLmMKKysrIGIvZnMvamZmczIvYnVpbGQuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCBmMDI5NDQxLi42MTdhMWU1IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTIsMTEgKzIsMTIgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCi0gKiBDcmVhdGVkIGJ5IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPgotICoKKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICogQ29weXJpZ2h0IMKpIDIwMDQgRmVyZW5jIEhhdmFzaSA8aGF2YXNpQGluZi51LXN6ZWdlZC5odT4sCiAgKgkJICAgIFVuaXZlcnNpdHkgb2YgU3plZ2VkLCBIdW5nYXJ5CiAgKgorICogQ3JlYXRlZCBieSBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBpbmZyYWRlYWQub3JnPgorICoKICAqIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCiAgKgogICovCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5oIGIvZnMvamZmczIvY29tcHIuaAppbmRleCA3ZDFkNzJmLi5lNDcxYTkxIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5oCisrKyBiL2ZzL2pmZnMyL2NvbXByLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDQgICBGZXJlbmMgSGF2YXNpIDxoYXZhc2lAaW5mLnUtc3plZ2VkLmh1PiwKICAqCQkgICAgICBVbml2ZXJzaXR5IG9mIFN6ZWdlZCwgSHVuZ2FyeQorICogQ29weXJpZ2h0IMKpIDIwMDQtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgogICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wcl9sem8uYyBiL2ZzL2pmZnMyL2NvbXByX2x6by5jCmluZGV4IGNkMDJhY2EuLmVkMjVhZTdjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wcl9sem8uYworKysgYi9mcy9qZmZzMi9jb21wcl9sem8uYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDcgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQG9wZW5lZGhhbmQuY29tPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByX3J0aW1lLmMgYi9mcy9qZmZzMi9jb21wcl9ydGltZS5jCmluZGV4IDU0NmQxNTMuLjk2OTZhZDkgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByX3J0aW1lLmMKKysrIGIvZnMvamZmczIvY29tcHJfcnRpbWUuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByX3J1YmluLmMgYi9mcy9qZmZzMi9jb21wcl9ydWJpbi5jCmluZGV4IDE3MGQyODkuLmExMmI0ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2NvbXByX3J1YmluLmMKKysrIGIvZnMvamZmczIvY29tcHJfcnViaW4uYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudkByZWRoYXQuY29tPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2NvbXByX3psaWIuYyBiL2ZzL2pmZnMyL2NvbXByX3psaWIuYwppbmRleCBiNDY2NjFhNC4uOTdmYzQ1ZCAxMDA2NDQKLS0tIGEvZnMvamZmczIvY29tcHJfemxpYi5jCisrKyBiL2ZzL2pmZnMyL2NvbXByX3psaWIuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kZWJ1Zy5jIGIvZnMvamZmczIvZGVidWcuYwppbmRleCBlYzM1Mzg0Li5lMGI3NmM4IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kZWJ1Zy5jCisrKyBiL2ZzL2pmZnMyL2RlYnVnLmMKQEAgLTIsNiArMiw3IEBACiAgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgogICoKICAqIENvcHlyaWdodCDCqSAyMDAxLTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDQtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgogICogQ3JlYXRlZCBieSBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGVidWcuaCBiL2ZzL2pmZnMyL2RlYnVnLmgKaW5kZXggYTExM2VjYy4uYzRmOGVlZiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGVidWcuaAorKysgYi9mcy9qZmZzMi9kZWJ1Zy5oCkBAIC0yLDYgKzIsNyBAQAogICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIENyZWF0ZWQgYnkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2Rpci5jIGIvZnMvamZmczIvZGlyLmMKaW5kZXggMTY2MDYyYS4uZWQ3OGEzY2YzIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9kaXIuYworKysgYi9mcy9qZmZzMi9kaXIuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCkBAIC0yMzIsOSArMjMzLDcgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwotCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCWlwdXQoaW5vZGUpOworCWlnZXRfZmFpbGVkKGlub2RlKTsKIAlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ1NCw5ICs0NTMsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKLQltYWtlX2JhZF9pbm9kZShpbm9kZSk7Ci0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JaXB1dChpbm9kZSk7CisJaWdldF9mYWlsZWQoaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYwMSw5ICs1OTgsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKLQltYWtlX2JhZF9pbm9kZShpbm9kZSk7Ci0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JaXB1dChpbm9kZSk7CisJaWdldF9mYWlsZWQoaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc3OCw5ICs3NzMsNyBAQAogCXJldHVybiAwOwogCiAgZmFpbDoKLQltYWtlX2JhZF9pbm9kZShpbm9kZSk7Ci0JdW5sb2NrX25ld19pbm9kZShpbm9kZSk7Ci0JaXB1dChpbm9kZSk7CisJaWdldF9mYWlsZWQoaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2VyYXNlLmMgYi9mcy9qZmZzMi9lcmFzZS5jCmluZGV4IDYyODZhZDkuLmFiYWM5NjEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2VyYXNlLmMKKysrIGIvZnMvamZmczIvZXJhc2UuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9maWxlLmMgYi9mcy9qZmZzMi9maWxlLmMKaW5kZXggODEzNDk3MC4uMWMwYTA4ZCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZmlsZS5jCisrKyBiL2ZzL2pmZnMyL2ZpbGUuYwpAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9mcy5jIGIvZnMvamZmczIvZnMuYwppbmRleCA0NTlkMzlkLi42YjI5NjRhIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9mcy5jCisrKyBiL2ZzL2pmZnMyL2ZzLmMKQEAgLTIsNiArMiw3IEBACiAgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgogICoKICAqIENvcHlyaWdodCDCqSAyMDAxLTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDQtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgogICogQ3JlYXRlZCBieSBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgpAQCAtMTY5LDEzICsxNzAsMTMgQEAKIAltdXRleF91bmxvY2soJmYtPnNlbSk7CiAJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7CiAKLQkvKiBXZSBoYXZlIHRvIGRvIHRoZSBzaW1wbGVfc2V0c2l6ZSgpIHdpdGhvdXQgZi0+c2VtIGhlbGQsIHNpbmNlCisJLyogV2UgaGF2ZSB0byBkbyB0aGUgdHJ1bmNhdGVfc2V0c2l6ZSgpIHdpdGhvdXQgZi0+c2VtIGhlbGQsIHNpbmNlCiAJICAgc29tZSBwYWdlcyBtYXkgYmUgbG9ja2VkIGFuZCB3YWl0aW5nIGZvciBpdCBpbiByZWFkcGFnZSgpLgogCSAgIFdlIGFyZSBwcm90ZWN0ZWQgZnJvbSBhIHNpbXVsdGFuZW91cyB3cml0ZSgpIGV4dGVuZGluZyBpX3NpemUKIAkgICBiYWNrIHBhc3QgaWF0dHItPmlhX3NpemUsIGJlY2F1c2UgZG9fdHJ1bmNhdGUoKSBob2xkcyB0aGUKIAkgICBnZW5lcmljIGlub2RlIHNlbWFwaG9yZS4gKi8KIAlpZiAoaXZhbGlkICYgQVRUUl9TSVpFICYmIGlub2RlLT5pX3NpemUgPiBpYXR0ci0+aWFfc2l6ZSkgewotCQlzaW1wbGVfc2V0c2l6ZShpbm9kZSwgaWF0dHItPmlhX3NpemUpOworCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBpYXR0ci0+aWFfc2l6ZSk7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwogCX0JCiAKQEAgLTIyNSw3ICsyMjYsNyBAQAogfQogCiAKLXZvaWQgamZmczJfY2xlYXJfaW5vZGUgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGpmZnMyX2V2aWN0X2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCS8qIFdlIGNhbiBmb3JnZXQgYWJvdXQgdGhpcyBpbm9kZSBmb3Igbm93IC0gZHJvcCBhbGwKIAkgKiAgdGhlIG5vZGVsaXN0cyBhc3NvY2lhdGVkIHdpdGggaXQsIGV0Yy4KQEAgLTIzMyw3ICsyMzQsOSBAQAogCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CiAJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKGlub2RlKTsKIAotCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9jbGVhcl9pbm9kZSgpOiBpbm8gIyVsdSBtb2RlICVvXG4iLCBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX21vZGUpKTsKKwlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZXZpY3RfaW5vZGUoKTogaW5vICMlbHUgbW9kZSAlb1xuIiwgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9tb2RlKSk7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCWpmZnMyX2RvX2NsZWFyX2lub2RlKGMsIGYpOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9nYy5jIGIvZnMvamZmczIvZ2MuYwppbmRleCBmNWU5NmJkLi44NDZhNzk0IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9nYy5jCisrKyBiL2ZzL2pmZnMyL2djLmMKQEAgLTIsNiArMiw3IEBACiAgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgogICoKICAqIENvcHlyaWdodCDCqSAyMDAxLTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDQtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgogICogQ3JlYXRlZCBieSBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvaW9jdGwuYyBiL2ZzL2pmZnMyL2lvY3RsLmMKaW5kZXggOWQ0MWY0My4uODU5YTU5OCAxMDA2NDQKLS0tIGEvZnMvamZmczIvaW9jdGwuYworKysgYi9mcy9qZmZzMi9pb2N0bC5jCkBAIC0yLDYgKzIsNyBAQAogICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIENyZWF0ZWQgYnkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pmZnMyX2ZzX2kuaCBiL2ZzL2pmZnMyL2pmZnMyX2ZzX2kuaAppbmRleCBjNjkyM2RhLi4yZTRhODY3IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9qZmZzMl9mc19pLmgKKysrIGIvZnMvamZmczIvamZmczJfZnNfaS5oCkBAIC0yLDYgKzIsNyBAQAogICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KICAqCiAgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIENyZWF0ZWQgYnkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmggYi9mcy9qZmZzMi9qZmZzMl9mc19zYi5oCmluZGV4IDg1ZWY2ZGIuLjY3ODRiYzggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKKysrIGIvZnMvamZmczIvamZmczJfZnNfc2IuaApAQCAtMiw2ICsyLDcgQEAKICAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCiAgKgogICogQ29weXJpZ2h0IMKpIDIwMDEtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCiAgKiBDcmVhdGVkIGJ5IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbGlzdC5oIGIvZnMvamZmczIvbm9kZWxpc3QuaAppbmRleCBhODgxYTQyLi41MjNhOTE2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9ub2RlbGlzdC5oCisrKyBiL2ZzL2pmZnMyL25vZGVsaXN0LmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZmRlZiBfX0VDT1MKICNpbmNsdWRlICJvcy1lY29zLmgiCiAjZWxzZQotI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4gLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBrZXJuZWxzICovCiAjaW5jbHVkZSAib3MtbGludXguaCIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9vcy1saW51eC5oIGIvZnMvamZmczIvb3MtbGludXguaAppbmRleCA0NzkxYWFjLi4wMGJhZTdjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9vcy1saW51eC5oCisrKyBiL2ZzL2pmZnMyL29zLWxpbnV4LmgKQEAgLTE3MSw3ICsxNzEsNyBAQAogaW50IGpmZnMyX3NldGF0dHIgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogaW50IGpmZnMyX2RvX3NldGF0dHIgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBzdHJ1Y3QgaW5vZGUgKmpmZnMyX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwotdm9pZCBqZmZzMl9jbGVhcl9pbm9kZSAoc3RydWN0IGlub2RlICopOwordm9pZCBqZmZzMl9ldmljdF9pbm9kZSAoc3RydWN0IGlub2RlICopOwogdm9pZCBqZmZzMl9kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0cnVjdCBpbm9kZSAqamZmczJfbmV3X2lub2RlIChzdHJ1Y3QgaW5vZGUgKmRpcl9pLCBpbnQgbW9kZSwKIAkJCSAgICAgICBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdXBlci5jIGIvZnMvamZmczIvc3VwZXIuYwppbmRleCA1MTFlMmQ2Li42NjJiYmEwIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdXBlci5jCisrKyBiL2ZzL2pmZnMyL3N1cGVyLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogCS53cml0ZV9zdXBlciA9CWpmZnMyX3dyaXRlX3N1cGVyLAogCS5zdGF0ZnMgPQlqZmZzMl9zdGF0ZnMsCiAJLnJlbW91bnRfZnMgPQlqZmZzMl9yZW1vdW50X2ZzLAotCS5jbGVhcl9pbm9kZSA9CWpmZnMyX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZSA9CWpmZnMyX2V2aWN0X2lub2RlLAogCS5kaXJ0eV9pbm9kZSA9CWpmZnMyX2RpcnR5X2lub2RlLAogCS5zeW5jX2ZzID0JamZmczJfc3luY19mcywKIH07CmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0ci5jIGIvZnMvamZmczIveGF0dHIuYwppbmRleCBkMjU4ZTI2Li45YjU3MmNhIDEwMDY0NAotLS0gYS9mcy9qZmZzMi94YXR0ci5jCisrKyBiL2ZzL2pmZnMyL3hhdHRyLmMKQEAgLTU4OCw3ICs1ODgsNyBAQAogCiB2b2lkIGpmZnMyX3hhdHRyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYykKIHsKLQkvKiBJdCdzIGNhbGxlZCBmcm9tIGpmZnMyX2NsZWFyX2lub2RlKCkgb24gaW5vZGUgcmVtb3ZpbmcuCisJLyogSXQncyBjYWxsZWQgZnJvbSBqZmZzMl9ldmljdF9pbm9kZSgpIG9uIGlub2RlIHJlbW92aW5nLgogCSAgIFdoZW4gYW4gaW5vZGUgd2l0aCBYQVRUUiBpcyByZW1vdmVkLCB0aG9zZSBYQVRUUnMgbXVzdCBiZSByZW1vdmVkLiAqLwogCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKl9yZWY7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9maWxlLmMgYi9mcy9qZnMvZmlsZS5jCmluZGV4IDEyNzI2M2MuLmM1Y2U2YzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9maWxlLmMKKysrIGIvZnMvamZzL2ZpbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlICJqZnNfaW5jb3JlLmgiCkBAIC0xMDcsMTEgKzEwOCwxOCBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAotCXJjID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOworCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBpYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJcmMgPSB2bXRydW5jYXRlKGlub2RlLCBpYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CiAKLQlpZiAoIXJjICYmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpKQorCXNldGF0dHJfY29weShpbm9kZSwgaWF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkKIAkJcmMgPSBqZnNfYWNsX2NobW9kKGlub2RlKTsKLQogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2lub2RlLmMgYi9mcy9qZnMvaW5vZGUuYwppbmRleCBlZDliYTZmLi45OTc4ODAzIDEwMDY0NAotLS0gYS9mcy9qZnMvaW5vZGUuYworKysgYi9mcy9qZnMvaW5vZGUuYwpAQCAtMTQ1LDMxICsxNDUsMzIgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXZvaWQgamZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQordm9pZCBqZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlqZnNfaW5mbygiSW4gamZzX2RlbGV0ZV9pbm9kZSwgaW5vZGUgPSAweCVwIiwgaW5vZGUpOworCWpmc19pbmZvKCJJbiBqZnNfZXZpY3RfaW5vZGUsIGlub2RlID0gMHglcCIsIGlub2RlKTsKIAotCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKKwlpZiAoIWlub2RlLT5pX25saW5rICYmICFpc19iYWRfaW5vZGUoaW5vZGUpKSB7CiAJCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCi0JaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpICYmCi0JICAgIChKRlNfSVAoaW5vZGUpLT5maWxlc2V0ID09IEZJTEVTWVNURU1fSSkpIHsKKwkJaWYgKEpGU19JUChpbm9kZSktPmZpbGVzZXQgPT0gRklMRVNZU1RFTV9JKSB7CisJCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisKKwkJCWlmICh0ZXN0X2NmbGFnKENPTU1JVF9GcmVld21hcCwgaW5vZGUpKQorCQkJCWpmc19mcmVlX3plcm9fbGluayhpbm9kZSk7CisKKwkJCWRpRnJlZShpbm9kZSk7CisKKwkJCS8qCisJCQkgKiBGcmVlIHRoZSBpbm9kZSBmcm9tIHRoZSBxdW90YSBhbGxvY2F0aW9uLgorCQkJICovCisJCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwkJCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOworCQl9CisJfSBlbHNlIHsKIAkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCi0JCWlmICh0ZXN0X2NmbGFnKENPTU1JVF9GcmVld21hcCwgaW5vZGUpKQotCQkJamZzX2ZyZWVfemVyb19saW5rKGlub2RlKTsKLQotCQlkaUZyZWUoaW5vZGUpOwotCi0JCS8qCi0JCSAqIEZyZWUgdGhlIGlub2RlIGZyb20gdGhlIHF1b3RhIGFsbG9jYXRpb24uCi0JCSAqLwotCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKLQkJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7Ci0JCWRxdW90X2Ryb3AoaW5vZGUpOwogCX0KLQotCWNsZWFyX2lub2RlKGlub2RlKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKKwlkcXVvdF9kcm9wKGlub2RlKTsKIH0KIAogdm9pZCBqZnNfZGlydHlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTMwMyw4ICszMDQsMTcgQEAKIAkJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7Ci0JcmV0dXJuIG5vYmhfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAorCWludCByZXQ7CisKKwlyZXQgPSBub2JoX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKIAkJCQlqZnNfZ2V0X2Jsb2NrKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7CisJCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBqZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCkBAIC0zMTcsOSArMzI3LDI0IEBACiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3NpemVfdCByZXQ7CiAKLQlyZXR1cm4gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQlvZmZzZXQsIG5yX3NlZ3MsIGpmc19nZXRfYmxvY2ssIE5VTEwpOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKKwkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgorCSAqLworCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKKwkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCisJCWlmIChlbmQgPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGpmc19hb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5oIGIvZnMvamZzL2pmc19pbm9kZS5oCmluZGV4IDExMDQyYjEuLjE1NWU5MWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuaAorKysgYi9mcy9qZnMvamZzX2lub2RlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmpmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgamZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBpbnQgamZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7Ci1leHRlcm4gdm9pZCBqZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGpmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBqZnNfZGlydHlfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgamZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGpmc190cnVuY2F0ZV9ub2xvY2soc3RydWN0IGlub2RlICosIGxvZmZfdCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IGIzOGY5NmIuLmVjOGMzZTQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0xMzIsMTEgKzEzMiw2IEBACiAJa21lbV9jYWNoZV9mcmVlKGpmc19pbm9kZV9jYWNoZXAsIGppKTsKIH0KIAotc3RhdGljIHZvaWQgamZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZHF1b3RfZHJvcChpbm9kZSk7Ci19Ci0KIHN0YXRpYyBpbnQgamZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKGRlbnRyeS0+ZF9zYik7CkBAIC03NjUsOCArNzYwLDcgQEAKIAkuZGVzdHJveV9pbm9kZQk9IGpmc19kZXN0cm95X2lub2RlLAogCS5kaXJ0eV9pbm9kZQk9IGpmc19kaXJ0eV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBqZnNfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IGpmc19kZWxldGVfaW5vZGUsCi0JLmNsZWFyX2lub2RlCT0gamZzX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGpmc19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gamZzX3B1dF9zdXBlciwKIAkuc3luY19mcwk9IGpmc19zeW5jX2ZzLAogCS5mcmVlemVfZnMJPSBqZnNfZnJlZXplLApkaWZmIC0tZ2l0IGEvZnMvamZzL3hhdHRyLmMgYi9mcy9qZnMveGF0dHIuYwppbmRleCBmYTk2YmJiLi4yZDdmMTY1IDEwMDY0NAotLS0gYS9mcy9qZnMveGF0dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtODYsNDYgKzg2LDI1IEBACiAjZGVmaW5lIEVBX01BTExPQwkweDAwMDgKIAogCitzdGF0aWMgaW50IGlzX2tub3duX25hbWVzcGFjZShjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChzdHJuY21wKG5hbWUsIFhBVFRSX1NZU1RFTV9QUkVGSVgsIFhBVFRSX1NZU1RFTV9QUkVGSVhfTEVOKSAmJgorCSAgICBzdHJuY21wKG5hbWUsIFhBVFRSX1VTRVJfUFJFRklYLCBYQVRUUl9VU0VSX1BSRUZJWF9MRU4pICYmCisJICAgIHN0cm5jbXAobmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLCBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAmJgorCSAgICBzdHJuY21wKG5hbWUsIFhBVFRSX1RSVVNURURfUFJFRklYLCBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogLyoKICAqIFRoZXNlIHRocmVlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHJlY29nbml6ZSBvbi1kaXNrIGV4dGVuZGVkIGF0dHJpYnV0ZXMKICAqIHRoYXQgYXJlIGluIGEgcmVjb2duaXplZCBuYW1lc3BhY2UuICBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCByZWNvZ25pemVkLAogICogIm9zMi4iIGlzIHByZXBlbmRlZCB0byB0aGUgbmFtZQogICovCi1zdGF0aWMgaW5saW5lIGludCBpc19vczJfeGF0dHIoc3RydWN0IGpmc19lYSAqZWEpCitzdGF0aWMgaW50IGlzX29zMl94YXR0cihzdHJ1Y3QgamZzX2VhICplYSkKIHsKLQkvKgotCSAqIENoZWNrIGZvciAic3lzdGVtLiIKLQkgKi8KLQlpZiAoKGVhLT5uYW1lbGVuID49IFhBVFRSX1NZU1RFTV9QUkVGSVhfTEVOKSAmJgotCSAgICAhc3RybmNtcChlYS0+bmFtZSwgWEFUVFJfU1lTVEVNX1BSRUZJWCwgWEFUVFJfU1lTVEVNX1BSRUZJWF9MRU4pKQotCQlyZXR1cm4gZmFsc2U7Ci0JLyoKLQkgKiBDaGVjayBmb3IgInVzZXIuIgotCSAqLwotCWlmICgoZWEtPm5hbWVsZW4gPj0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOKSAmJgotCSAgICAhc3RybmNtcChlYS0+bmFtZSwgWEFUVFJfVVNFUl9QUkVGSVgsIFhBVFRSX1VTRVJfUFJFRklYX0xFTikpCi0JCXJldHVybiBmYWxzZTsKLQkvKgotCSAqIENoZWNrIGZvciAic2VjdXJpdHkuIgotCSAqLwotCWlmICgoZWEtPm5hbWVsZW4gPj0gWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTikgJiYKLQkgICAgIXN0cm5jbXAoZWEtPm5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwKLQkJICAgICBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSkKLQkJcmV0dXJuIGZhbHNlOwotCS8qCi0JICogQ2hlY2sgZm9yICJ0cnVzdGVkLiIKLQkgKi8KLQlpZiAoKGVhLT5uYW1lbGVuID49IFhBVFRSX1RSVVNURURfUFJFRklYX0xFTikgJiYKLQkgICAgIXN0cm5jbXAoZWEtPm5hbWUsIFhBVFRSX1RSVVNURURfUFJFRklYLCBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4pKQotCQlyZXR1cm4gZmFsc2U7Ci0JLyoKLQkgKiBBZGQgYW55IG90aGVyIHZhbGlkIG5hbWVzcGFjZSBwcmVmaXhlcyBoZXJlCi0JICovCi0KLQkvKgotCSAqIFdlIGFzc3VtZSBpdCdzIE9TLzIncyBmbGF0IG5hbWVzcGFjZQotCSAqLwotCXJldHVybiB0cnVlOworCXJldHVybiAhaXNfa25vd25fbmFtZXNwYWNlKGVhLT5uYW1lKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmFtZV9zaXplKHN0cnVjdCBqZnNfZWEgKmVhKQpAQCAtNzY0LDEzICs3NDMsMjMgQEAKIAlpZiAoIXN0cm5jbXAobmFtZSwgWEFUVFJfU1lTVEVNX1BSRUZJWCwgWEFUVFJfU1lTVEVNX1BSRUZJWF9MRU4pKQogCQlyZXR1cm4gY2FuX3NldF9zeXN0ZW1feGF0dHIoaW5vZGUsIG5hbWUsIHZhbHVlLCB2YWx1ZV9sZW4pOwogCisJaWYgKCFzdHJuY21wKG5hbWUsIFhBVFRSX09TMl9QUkVGSVgsIFhBVFRSX09TMl9QUkVGSVhfTEVOKSkgeworCQkvKgorCQkgKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB3ZSBhcmVuJ3QgdHJ5aW5nIHRvIHNldCBhbgorCQkgKiBhdHRyaWJ1dGUgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIGJ5IHByZWZpeGluZyBpdAorCQkgKiB3aXRoICJvczIuIgorCQkgKi8KKwkJaWYgKGlzX2tub3duX25hbWVzcGFjZShuYW1lICsgWEFUVFJfT1MyX1BSRUZJWF9MRU4pKQorCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBEb24ndCBhbGxvdyBzZXR0aW5nIGFuIGF0dHJpYnV0ZSBpbiBhbiB1bmtub3duIG5hbWVzcGFjZS4KIAkgKi8KIAlpZiAoc3RybmNtcChuYW1lLCBYQVRUUl9UUlVTVEVEX1BSRUZJWCwgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOKSAmJgogCSAgICBzdHJuY21wKG5hbWUsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTikgJiYKLQkgICAgc3RybmNtcChuYW1lLCBYQVRUUl9VU0VSX1BSRUZJWCwgWEFUVFJfVVNFUl9QUkVGSVhfTEVOKSAmJgotCSAgICBzdHJuY21wKG5hbWUsIFhBVFRSX09TMl9QUkVGSVgsIFhBVFRSX09TMl9QUkVGSVhfTEVOKSkKKwkgICAgc3RybmNtcChuYW1lLCBYQVRUUl9VU0VSX1BSRUZJWCwgWEFUVFJfVVNFUl9QUkVGSVhfTEVOKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJcmV0dXJuIDA7CkBAIC05NTIsMTkgKzk0MSw4IEBACiAJaW50IHhhdHRyX3NpemU7CiAJc3NpemVfdCBzaXplOwogCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOwotCWNoYXIgKm9zMm5hbWUgPSBOVUxMOwogCWNoYXIgKnZhbHVlOwogCi0JaWYgKHN0cm5jbXAobmFtZSwgWEFUVFJfT1MyX1BSRUZJWCwgWEFUVFJfT1MyX1BSRUZJWF9MRU4pID09IDApIHsKLQkJb3MybmFtZSA9IGttYWxsb2MobmFtZWxlbiAtIFhBVFRSX09TMl9QUkVGSVhfTEVOICsgMSwKLQkJCQkgIEdGUF9LRVJORUwpOwotCQlpZiAoIW9zMm5hbWUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJc3RyY3B5KG9zMm5hbWUsIG5hbWUgKyBYQVRUUl9PUzJfUFJFRklYX0xFTik7Ci0JCW5hbWUgPSBvczJuYW1lOwotCQluYW1lbGVuIC09IFhBVFRSX09TMl9QUkVGSVhfTEVOOwotCX0KLQogCWRvd25fcmVhZCgmSkZTX0lQKGlub2RlKS0+eGF0dHJfc2VtKTsKIAogCXhhdHRyX3NpemUgPSBlYV9nZXQoaW5vZGUsICZlYV9idWYsIDApOwpAQCAtMTAwMiw4ICs5ODAsNiBAQAogICAgICAgb3V0OgogCXVwX3JlYWQoJkpGU19JUChpbm9kZSktPnhhdHRyX3NlbSk7CiAKLQlrZnJlZShvczJuYW1lKTsKLQogCXJldHVybiBzaXplOwogfQogCkBAIC0xMDEyLDYgKzk4OCwxOSBAQAogewogCWludCBlcnI7CiAKKwlpZiAoc3RybmNtcChuYW1lLCBYQVRUUl9PUzJfUFJFRklYLCBYQVRUUl9PUzJfUFJFRklYX0xFTikgPT0gMCkgeworCQkvKgorCQkgKiBza2lwIHBhc3QgIm9zMi4iIHByZWZpeAorCQkgKi8KKwkJbmFtZSArPSBYQVRUUl9PUzJfUFJFRklYX0xFTjsKKwkJLyoKKwkJICogRG9uJ3QgYWxsb3cgcmV0cmlldmluZyBwcm9wZXJseSBwcmVmaXhlZCBhdHRyaWJ1dGVzCisJCSAqIGJ5IHByZXBlbmRpbmcgdGhlbSB3aXRoICJvczIuIgorCQkgKi8KKwkJaWYgKGlzX2tub3duX25hbWVzcGFjZShuYW1lKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKIAllcnIgPSBfX2pmc19nZXR4YXR0cihkZW50cnktPmRfaW5vZGUsIG5hbWUsIGRhdGEsIGJ1Zl9zaXplKTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCBkY2FmOTcyLi4wYTlkYTk1IDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTMyNyw3NyArMzI3LDM1IEBACiB9CiAKIC8qKgotICogc2ltcGxlX3NldHNpemUgLSBoYW5kbGUgY29yZSBtbSBhbmQgdmZzIHJlcXVpcmVtZW50cyBmb3IgZmlsZSBzaXplIGNoYW5nZQotICogQGlub2RlOiBpbm9kZQotICogQG5ld3NpemU6IG5ldyBmaWxlIHNpemUKLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLWVycm9yIG9uIGZhaWx1cmUuCi0gKgotICogc2ltcGxlX3NldHNpemUgbXVzdCBiZSBjYWxsZWQgd2l0aCBpbm9kZV9tdXRleCBoZWxkLgotICoKLSAqIHNpbXBsZV9zZXRzaXplIHdpbGwgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIG5ldyBzaXplIGlzIE9LIChzZWUKLSAqIGlub2RlX25ld3NpemVfb2spLCBhbmQgdGhlbiB3aWxsIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBpX3NpemUgdXBkYXRlCi0gKiBhbmQgcGFnZWNhY2hlIHRydW5jYXRpb24gKGlmIG5lY2Vzc2FyeSkuIEl0IHdpbGwgYmUgdHlwaWNhbGx5IGJlIGNhbGxlZAotICogZnJvbSB0aGUgZmlsZXN5c3RlbSdzIHNldGF0dHIgZnVuY3Rpb24gd2hlbiBBVFRSX1NJWkUgaXMgcGFzc2VkIGluLgotICoKLSAqIFRoZSBpbm9kZSBpdHNlbGYgbXVzdCBoYXZlIGNvcnJlY3QgcGVybWlzc2lvbnMgYW5kIGF0dHJpYnV0ZXMgdG8gYWxsb3cKLSAqIGlfc2l6ZSB0byBiZSBjaGFuZ2VkLCB0aGlzIGZ1bmN0aW9uIHRoZW4ganVzdCBjaGVja3MgdGhhdCB0aGUgbmV3IHNpemUKLSAqIHJlcXVlc3RlZCBpcyB2YWxpZC4KLSAqCi0gKiBJbiB0aGUgY2FzZSBvZiBzaW1wbGUgaW4tbWVtb3J5IGZpbGVzeXN0ZW1zIHdpdGggaW5vZGVzIHN0b3JlZCBzb2xlbHkKLSAqIGluIHRoZSBpbm9kZSBjYWNoZSwgYW5kIGZpbGUgZGF0YSBpbiB0aGUgcGFnZWNhY2hlLCBub3RoaW5nIG1vcmUgbmVlZHMKLSAqIHRvIGJlIGRvbmUgdG8gc2F0aXNmeSBhIHRydW5jYXRlIHJlcXVlc3QuIEZpbGVzeXN0ZW1zIHdpdGggb24tZGlzawotICogYmxvY2tzIGZvciBleGFtcGxlIHdpbGwgbmVlZCB0byBmcmVlIHRoZW0gaW4gdGhlIGNhc2Ugb2YgdHJ1bmNhdGUsIGluCi0gKiB0aGF0IGNhc2UgaXQgbWF5IGJlIGVhc2llciBub3QgdG8gdXNlIHNpbXBsZV9zZXRzaXplIChidXQgZWFjaCBvZiBpdHMKLSAqIGNvbXBvbmVudHMgd2lsbCBsaWtlbHkgYmUgcmVxdWlyZWQgYXQgc29tZSBwb2ludCB0byB1cGRhdGUgcGFnZWNhY2hlCi0gKiBhbmQgaW5vZGUgZXRjKS4KLSAqLwotaW50IHNpbXBsZV9zZXRzaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBuZXdzaXplKQotewotCWxvZmZfdCBvbGRzaXplOwotCWludCBlcnJvcjsKLQotCWVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgbmV3c2l6ZSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQlvbGRzaXplID0gaW5vZGUtPmlfc2l6ZTsKLQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpOwotCXRydW5jYXRlX3BhZ2VjYWNoZShpbm9kZSwgb2xkc2l6ZSwgbmV3c2l6ZSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci1FWFBPUlRfU1lNQk9MKHNpbXBsZV9zZXRzaXplKTsKLQotLyoqCi0gKiBzaW1wbGVfc2V0YXR0ciAtIHNldGF0dHIgZm9yIHNpbXBsZSBpbi1tZW1vcnkgZmlsZXN5c3RlbQorICogc2ltcGxlX3NldGF0dHIgLSBzZXRhdHRyIGZvciBzaW1wbGUgZmlsZXN5c3RlbQogICogQGRlbnRyeTogZGVudHJ5CiAgKiBAaWF0dHI6IGlhdHRyIHN0cnVjdHVyZQogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJyb3Igb24gZmFpbHVyZS4KICAqCi0gKiBzaW1wbGVfc2V0YXR0ciBpbXBsZW1lbnRzIHNldGF0dHIgZm9yIGFuIGluLW1lbW9yeSBmaWxlc3lzdGVtIHdoaWNoCi0gKiBkb2VzIG5vdCBzdG9yZSBpdHMgb3duIGZpbGUgZGF0YSBvciBtZXRhZGF0YSAoZWcuIHVzZXMgdGhlIHBhZ2UgY2FjaGUKLSAqIGFuZCBpbm9kZSBjYWNoZSBhcyBpdHMgZGF0YSBzdG9yZSkuCisgKiBzaW1wbGVfc2V0YXR0ciBpcyBhIHNpbXBsZSAtPnNldGF0dHIgaW1wbGVtZW50YXRpb24gd2l0aG91dCBhIHByb3BlcgorICogaW1wbGVtZW50YXRpb24gb2Ygc2l6ZSBjaGFuZ2VzLgorICoKKyAqIEl0IGNhbiBlaXRoZXIgYmUgdXNlZCBmb3IgaW4tbWVtb3J5IGZpbGVzeXN0ZW1zIG9yIHNwZWNpYWwgZmlsZXMKKyAqIG9uIHNpbXBsZSByZWd1bGFyIGZpbGVzeXN0ZW1zLiAgQW55dGhpbmcgdGhhdCBuZWVkcyB0byBjaGFuZ2Ugb24tZGlzaworICogb3Igd2lyZSBzdGF0ZSBvbiBzaXplIGNoYW5nZXMgbmVlZHMgaXRzIG93biBzZXRhdHRyIG1ldGhvZC4KICAqLwogaW50IHNpbXBsZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKIAorCVdBUk5fT05fT05DRShpbm9kZS0+aV9vcC0+dHJ1bmNhdGUpOworCiAJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKLQkJZXJyb3IgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgaWF0dHItPmlhX3NpemUpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JZ2VuZXJpY19zZXRhdHRyKGlub2RlLCBpYXR0cik7Ci0KLQlyZXR1cm4gZXJyb3I7CisJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgaWF0dHItPmlhX3NpemUpOworCXNldGF0dHJfY29weShpbm9kZSwgaWF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzaW1wbGVfc2V0YXR0cik7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rpci5jIGIvZnMvbG9nZnMvZGlyLmMKaW5kZXggNzJkMTg5My4uNjc1Y2M0OSAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvZGlyLmMKKysrIGIvZnMvbG9nZnMvZGlyLmMKQEAgLTQzNCw4ICs0MzQsMTEgQEAKIAlpbnQgcmV0OwogCiAJdGEgPSBremFsbG9jKHNpemVvZigqdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRhKQorCWlmICghdGEpIHsKKwkJaW5vZGUtPmlfbmxpbmstLTsKKwkJaXB1dChpbm9kZSk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXRhLT5zdGF0ZSA9IENSRUFURV8xOwogCXRhLT5pbm8gPSBpbm9kZS0+aV9pbm87CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9maWxlLmMgYi9mcy9sb2dmcy9maWxlLmMKaW5kZXggYWJlMWNhZi4uNGRkMGY3YyAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvZmlsZS5jCisrKyBiL2ZzL2xvZ2ZzL2ZpbGUuYwpAQCAtMjMyLDE1ICsyMzIsMTkgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnIgPSAwOwogCi0JaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQotCQllcnIgPSBsb2dmc190cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7Ci0JYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKwllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKLQlpZiAoIWVycikKLQkJZXJyID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoIWVycikKLQkJZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7Ci0JcmV0dXJuIGVycjsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwkJZXJyID0gbG9nZnNfdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsb2dmc19yZWdfaW9wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2lub2RlLmMgYi9mcy9sb2dmcy9pbm9kZS5jCmluZGV4IGY2MDJlMjMuLmQ4YzcxZWMgMTAwNjQ0Ci0tLSBhL2ZzL2xvZ2ZzL2lub2RlLmMKKysrIGIvZnMvbG9nZnMvaW5vZGUuYwpAQCAtMjM1LDMzICsyMzUsMjEgQEAKICAqIHB1cnBvc2UgaXMgdG8gY3JlYXRlIGEgbmV3IGlub2RlIHRoYXQgd2lsbCBub3QgdHJpZ2dlciB0aGUgd2FybmluZyBpZiBzdWNoCiAgKiBhbiBpbm9kZSBpcyBzdGlsbCBpbiB1c2UuICBBbiB1Z2x5IGhhY2ssIG5vIGRvdWJ0LiAgU3VnZ2VjdGlvbnMgZm9yCiAgKiBpbXByb3ZlbWVudCBhcmUgd2VsY29tZS4KKyAqCisgKiBBVjogdGhhdCdzIHdoYXQgLT5wdXRfc3VwZXIoKSBpcyBmb3IuLi4KICAqLwogc3RydWN0IGlub2RlICpsb2dmc19uZXdfbWV0YV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlpbm9kZSA9IGxvZ2ZzX2FsbG9jX2lub2RlKHNiKTsKKwlpbm9kZSA9IG5ld19pbm9kZShzYik7CiAJaWYgKCFpbm9kZSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpbm9kZS0+aV9tb2RlID0gU19JRlJFRzsKIAlpbm9kZS0+aV9pbm8gPSBpbm87Ci0JaW5vZGUtPmlfc2IgPSBzYjsKLQotCS8qIFRoaXMgaXMgYSBibGF0YW50IGNvcHkgb2YgYWxsb2NfaW5vZGUgY29kZS4gIFdlJ2QgbmVlZCBhbGxvY19pbm9kZQotCSAqIHRvIGJlIG5vbnN0YXRpYywgYWxhcy4gKi8KLQl7Ci0JCXN0cnVjdCBhZGRyZXNzX3NwYWNlICogY29uc3QgbWFwcGluZyA9ICZpbm9kZS0+aV9kYXRhOwotCi0JCW1hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOwotCQltYXBwaW5nLT5ob3N0ID0gaW5vZGU7Ci0JCW1hcHBpbmctPmZsYWdzID0gMDsKLQkJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOwotCQltYXBwaW5nLT5hc3NvY19tYXBwaW5nID0gTlVMTDsKLQkJbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87Ci0JCWlub2RlLT5pX21hcHBpbmcgPSBtYXBwaW5nOwotCQlpbm9kZS0+aV9ubGluayA9IDE7Ci0JfQorCWlub2RlLT5pX2RhdGEuYV9vcHMgPSAmbG9nZnNfcmVnX2FvcHM7CisJbWFwcGluZ19zZXRfZ2ZwX21hc2soJmlub2RlLT5pX2RhdGEsIEdGUF9OT0ZTKTsKIAogCXJldHVybiBpbm9kZTsKIH0KQEAgLTI3Nyw3ICsyNjUsNyBAQAogCiAJZXJyID0gbG9nZnNfcmVhZF9pbm9kZShpbm9kZSk7CiAJaWYgKGVycikgewotCQlkZXN0cm95X21ldGFfaW5vZGUoaW5vZGUpOworCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAl9CiAJbG9nZnNfaW5vZGVfc2V0b3BzKGlub2RlKTsKQEAgLTI5OCwxOCArMjg2LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGRlc3Ryb3lfbWV0YV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmIChpbm9kZSkgewotCQlpZiAoaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKQotCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCQlsb2dmc19jbGVhcl9pbm9kZShpbm9kZSk7Ci0JCWttZW1fY2FjaGVfZnJlZShsb2dmc19pbm9kZV9jYWNoZSwgbG9nZnNfaW5vZGUoaW5vZGUpKTsKLQl9Ci19Ci0KIC8qIGNhbGxlZCB3aXRoIGlub2RlX2xvY2sgaGVsZCAqLwotc3RhdGljIHZvaWQgbG9nZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGludCBsb2dmc19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOwpAQCAtMzE3LDcgKzI5NSw3IEBACiAJc3Bpbl9sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKIAlsaXN0X21vdmUoJmxpLT5saV9mcmVlaW5nX2xpc3QsICZzdXBlci0+c19mcmVlaW5nX2xpc3QpOwogCXNwaW5fdW5sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKLQlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworCXJldHVybiBnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBsb2dmc19zZXRfaW5vX2dlbmVyYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKQEAgLTM4NCwxMiArMzYyLDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGxvZ2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJLyoga2lsbCB0aGUgbWV0YS1pbm9kZXMgKi8KKwlpcHV0KHN1cGVyLT5zX21hc3Rlcl9pbm9kZSk7CisJaXB1dChzdXBlci0+c19zZWdmaWxlX2lub2RlKTsKKwlpcHV0KHN1cGVyLT5zX21hcHBpbmdfaW5vZGUpOworfQorCiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBsb2dmc19zdXBlcl9vcGVyYXRpb25zID0gewogCS5hbGxvY19pbm9kZQk9IGxvZ2ZzX2FsbG9jX2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGxvZ2ZzX2NsZWFyX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBsb2dmc19kZWxldGVfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBsb2dmc19kZXN0cm95X2lub2RlLAorCS5ldmljdF9pbm9kZQk9IGxvZ2ZzX2V2aWN0X2lub2RlLAogCS5kcm9wX2lub2RlCT0gbG9nZnNfZHJvcF9pbm9kZSwKKwkucHV0X3N1cGVyCT0gbG9nZnNfcHV0X3N1cGVyLAogCS53cml0ZV9pbm9kZQk9IGxvZ2ZzX3dyaXRlX2lub2RlLAogCS5zdGF0ZnMJCT0gbG9nZnNfc3RhdGZzLAogCS5zeW5jX2ZzCT0gbG9nZnNfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2pvdXJuYWwuYyBiL2ZzL2xvZ2ZzL2pvdXJuYWwuYwppbmRleCA0YjBlMDYxLi5mNDZlZThiIDEwMDY0NAotLS0gYS9mcy9sb2dmcy9qb3VybmFsLmMKKysrIGIvZnMvbG9nZnMvam91cm5hbC5jCkBAIC04ODksOCArODg5LDYgQEAKIAlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOwogCiAJYnRyZWVfZ3JpbV92aXNpdG9yMzIoJnN1cGVyLT5zX3Jlc2VydmVkX3NlZ21lbnRzLCAwLCBOVUxMKTsKLQlkZXN0cm95X21ldGFfaW5vZGUoc3VwZXItPnNfbWFzdGVyX2lub2RlKTsKLQlzdXBlci0+c19tYXN0ZXJfaW5vZGUgPSBOVUxMOwogCiAJa2ZyZWUoc3VwZXItPnNfY29tcHJlc3NlZF9qZSk7CiAJa2ZyZWUoc3VwZXItPnNfamUpOwpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvbG9nZnMuaCBiL2ZzL2xvZ2ZzL2xvZ2ZzLmgKaW5kZXggYzgzOGM0ZC4uNWUzYjcyMCAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvbG9nZnMuaAorKysgYi9mcy9sb2dmcy9sb2dmcy5oCkBAIC01MjUsMTMgKzUyNSwxMSBAQAogc3RydWN0IGlub2RlICpsb2dmc19yZWFkX21ldGFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubyk7CiBpbnQgbG9nZnNfaW5pdF9pbm9kZV9jYWNoZSh2b2lkKTsKIHZvaWQgbG9nZnNfZGVzdHJveV9pbm9kZV9jYWNoZSh2b2lkKTsKLXZvaWQgZGVzdHJveV9tZXRhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogdm9pZCBsb2dmc19zZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBubyk7CiAvKiB0aGVzZSBsb2dpY2FsbHkgYmVsb25nIGludG8gaW5vZGUuYyBidXQgYWN0dWFsbHkgcmVzaWRlIGluIHJlYWR3cml0ZS5jICovCiBpbnQgbG9nZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBfX2xvZ2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgZmxhZ3MpOwotdm9pZCBsb2dmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Ci12b2lkIGxvZ2ZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBsb2dmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogam91cm5hbC5jICovCiB2b2lkIGxvZ2ZzX3dyaXRlX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jIGIvZnMvbG9nZnMvcmVhZHdyaXRlLmMKaW5kZXggMDcxOGQxMS4uNjEyN2JhZiAxMDA2NDQKLS0tIGEvZnMvbG9nZnMvcmVhZHdyaXRlLmMKKysrIGIvZnMvbG9nZnMvcmVhZHdyaXRlLmMKQEAgLTE5NzIsMzEgKzE5NzIsNiBAQAogCXJldHVybiBwYWdlOwogfQogCi0vKiBDaGVhcGVyIHZlcnNpb24gb2Ygd3JpdGVfaW5vZGUuICBBbGwgY2hhbmdlcyBhcmUgY29uY2VhbGVkIGluCi0gKiBhbGlhc2VzLCB3aGljaCBhcmUgbW92ZWQgYmFjay4gIE5vIHdyaXRlIHRvIHRoZSBtZWRpdW0gaGFwcGVucy4KLSAqLwotdm9pZCBsb2dmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOwotCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsaS0+bGlfYmxvY2s7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQkvKiBPbmx5IGRlbGV0ZWQgZmlsZXMgbWF5IGJlIGRpcnR5IGF0IHRoaXMgcG9pbnQgKi8KLQlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZICYmIGlub2RlLT5pX25saW5rKTsKLQlpZiAoIWJsb2NrKQotCQlyZXR1cm47Ci0JaWYgKChsb2dmc19zdXBlcihzYiktPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1NIVVRET1dOKSkgewotCQlibG9jay0+b3BzLT5mcmVlX2Jsb2NrKGlub2RlLT5pX3NiLCBibG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQlCVUdfT04oaW5vZGUtPmlfaW5vIDwgTE9HRlNfUkVTRVJWRURfSU5PUyk7Ci0JcGFnZSA9IGlub2RlX3RvX3BhZ2UoaW5vZGUpOwotCUJVR19PTighcGFnZSk7IC8qIEZJWE1FOiBVc2UgZW1lcmdlbmN5IHBhZ2UgKi8KLQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKLX0KLQogc3RhdGljIGludCBkb193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKQEAgLTIxNjQsMTggKzIxMzksNDAgQEAKICAqIFpPTUJJRSBpbm9kZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVsZXRlZCBiZWZvcmUgYW5kIHNob3VsZCByZW1haW4gZGVhZCwKICAqIGlmIGl0IHdlcmVuJ3QgZm9yIHZhbGlkIGNoZWNraW5nLiAgTm8gbmVlZCB0byBraWxsIHRoZW0gYWdhaW4gaGVyZS4KICAqLwotdm9pZCBsb2dmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgbG9nZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbGktPmxpX2Jsb2NrOworCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JaWYgKCEobGktPmxpX2ZsYWdzICYgTE9HRlNfSUZfWk9NQklFKSkgewotCQlsaS0+bGlfZmxhZ3MgfD0gTE9HRlNfSUZfWk9NQklFOwotCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gMCkKLQkJCWxvZ2ZzX3RydW5jYXRlKGlub2RlLCAwKTsKLQkJZG9fZGVsZXRlX2lub2RlKGlub2RlKTsKKwlpZiAoIWlub2RlLT5pX25saW5rKSB7CisJCWlmICghKGxpLT5saV9mbGFncyAmIExPR0ZTX0lGX1pPTUJJRSkpIHsKKwkJCWxpLT5saV9mbGFncyB8PSBMT0dGU19JRl9aT01CSUU7CisJCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gMCkKKwkJCQlsb2dmc190cnVuY2F0ZShpbm9kZSwgMCk7CisJCQlkb19kZWxldGVfaW5vZGUoaW5vZGUpOworCQl9CiAJfQogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CisKKwkvKiBDaGVhcGVyIHZlcnNpb24gb2Ygd3JpdGVfaW5vZGUuICBBbGwgY2hhbmdlcyBhcmUgY29uY2VhbGVkIGluCisJICogYWxpYXNlcywgd2hpY2ggYXJlIG1vdmVkIGJhY2suICBObyB3cml0ZSB0byB0aGUgbWVkaXVtIGhhcHBlbnMuCisJICovCisJLyogT25seSBkZWxldGVkIGZpbGVzIG1heSBiZSBkaXJ0eSBhdCB0aGlzIHBvaW50ICovCisJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSAmJiBpbm9kZS0+aV9ubGluayk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuOworCWlmICgobG9nZnNfc3VwZXIoc2IpLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19TSFVURE9XTikpIHsKKwkJYmxvY2stPm9wcy0+ZnJlZV9ibG9jayhpbm9kZS0+aV9zYiwgYmxvY2spOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKGlub2RlLT5pX2lubyA8IExPR0ZTX1JFU0VSVkVEX0lOT1MpOworCXBhZ2UgPSBpbm9kZV90b19wYWdlKGlub2RlKTsKKwlCVUdfT04oIXBhZ2UpOyAvKiBGSVhNRTogVXNlIGVtZXJnZW5jeSBwYWdlICovCisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CiB9CiAKIHZvaWQgYnRyZWVfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKQEAgLTIyNzIsNyArMjI2OSw2IEBACiB7CiAJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKIAotCWRlc3Ryb3lfbWV0YV9pbm9kZShzdXBlci0+c19zZWdmaWxlX2lub2RlKTsKIAlsb2dmc19tZW1wb29sX2Rlc3Ryb3koc3VwZXItPnNfYmxvY2tfcG9vbCk7CiAJbG9nZnNfbWVtcG9vbF9kZXN0cm95KHN1cGVyLT5zX3NoYWRvd19wb29sKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3NlZ21lbnQuYyBiL2ZzL2xvZ2ZzL3NlZ21lbnQuYwppbmRleCBhOTY1N2FmLi45ZDUxODczIDEwMDY0NAotLS0gYS9mcy9sb2dmcy9zZWdtZW50LmMKKysrIGIvZnMvbG9nZnMvc2VnbWVudC5jCkBAIC05MjksNSArOTI5LDQgQEAKIAlmb3JfZWFjaF9hcmVhKGkpCiAJCWZyZWVfYXJlYShzdXBlci0+c19hcmVhW2ldKTsKIAlmcmVlX2FyZWEoc3VwZXItPnNfam91cm5hbF9hcmVhKTsKLQlkZXN0cm95X21ldGFfaW5vZGUoc3VwZXItPnNfbWFwcGluZ19pbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9zdXBlci5jIGIvZnMvbG9nZnMvc3VwZXIuYwppbmRleCBkNjUxZTEwLi41MzM2MTU1IDEwMDY0NAotLS0gYS9mcy9sb2dmcy9zdXBlci5jCisrKyBiL2ZzL2xvZ2ZzL3N1cGVyLmMKQEAgLTM0MiwyNCArMzQyLDI3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwkvKiBhdCB0aGF0IHBvaW50IHdlIGtub3cgdGhhdCAtPnB1dF9zdXBlcigpIHdpbGwgYmUgY2FsbGVkICovCiAJc3VwZXItPnNfZXJhc2VfcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIDApOwogCWlmICghc3VwZXItPnNfZXJhc2VfcGFnZSkKLQkJZ290byBmYWlsOworCQlyZXR1cm4gLUVOT01FTTsKIAltZW1zZXQocGFnZV9hZGRyZXNzKHN1cGVyLT5zX2VyYXNlX3BhZ2UpLCAweEZGLCBQQUdFX1NJWkUpOwogCiAJLyogRklYTUU6IGNoZWNrIGZvciByZWFkLW9ubHkgbW91bnRzICovCiAJZXJyID0gbG9nZnNfbWFrZV93cml0ZWFibGUoc2IpOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbDE7CisJaWYgKGVycikgeworCQlfX2ZyZWVfcGFnZShzdXBlci0+c19lcmFzZV9wYWdlKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlsb2dfc3VwZXIoIkxvZ0ZTOiBGaW5pc2hlZCBtb3VudGluZ1xuIik7CiAJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CiAJcmV0dXJuIDA7CiAKLWZhaWwxOgotCV9fZnJlZV9wYWdlKHN1cGVyLT5zX2VyYXNlX3BhZ2UpOwogZmFpbDoKLQlpcHV0KGxvZ2ZzX3N1cGVyKHNiKS0+c19tYXN0ZXJfaW5vZGUpOworCWlwdXQoc3VwZXItPnNfbWFzdGVyX2lub2RlKTsKKwlpcHV0KHN1cGVyLT5zX3NlZ2ZpbGVfaW5vZGUpOworCWlwdXQoc3VwZXItPnNfbWFwcGluZ19pbm9kZSk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTU4MCwxMCArNTgzLDE0IEBACiAJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCWVyciA9IGxvZ2ZzX2dldF9zYl9maW5hbChzYiwgbW50KTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycjE7Ci0JcmV0dXJuIDA7CisJCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKKwlyZXR1cm4gZXJyOwogCiBlcnIxOgorCS8qIG5vIC0+c19yb290LCBubyAtPnB1dF9zdXBlcigpICovCisJaXB1dChzdXBlci0+c19tYXN0ZXJfaW5vZGUpOworCWlwdXQoc3VwZXItPnNfc2VnZmlsZV9pbm9kZSk7CisJaXB1dChzdXBlci0+c19tYXBwaW5nX2lub2RlKTsKIAlkZWFjdGl2YXRlX2xvY2tlZF9zdXBlcihzYik7CiAJcmV0dXJuIGVycjsKIGVycjA6CmRpZmYgLS1naXQgYS9mcy9tYmNhY2hlLmMgYi9mcy9tYmNhY2hlLmMKaW5kZXggZTI4ZjIxYi4uY2Y0ZTZjZCAxMDA2NDQKLS0tIGEvZnMvbWJjYWNoZS5jCisrKyBiL2ZzL21iY2FjaGUuYwpAQCAtNzksMTUgKzc5LDExIEBACiBzdHJ1Y3QgbWJfY2FjaGUgewogCXN0cnVjdCBsaXN0X2hlYWQJCWNfY2FjaGVfbGlzdDsKIAljb25zdCBjaGFyCQkJKmNfbmFtZTsKLQlzdHJ1Y3QgbWJfY2FjaGVfb3AJCWNfb3A7CiAJYXRvbWljX3QJCQljX2VudHJ5X2NvdW50OwogCWludAkJCQljX2J1Y2tldF9iaXRzOwotI2lmbmRlZiBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UCi0JaW50CQkJCWNfaW5kZXhlc19jb3VudDsKLSNlbmRpZgotCXN0cnVjdCBrbWVtX2NhY2hlCQkJKmNfZW50cnlfY2FjaGU7CisJc3RydWN0IGttZW1fY2FjaGUJCSpjX2VudHJ5X2NhY2hlOwogCXN0cnVjdCBsaXN0X2hlYWQJCSpjX2Jsb2NrX2hhc2g7Ci0Jc3RydWN0IGxpc3RfaGVhZAkJKmNfaW5kZXhlc19oYXNoWzBdOworCXN0cnVjdCBsaXN0X2hlYWQJCSpjX2luZGV4X2hhc2g7CiB9OwogCiAKQEAgLTEwMSwxNiArOTcsNiBAQAogc3RhdGljIExJU1RfSEVBRChtYl9jYWNoZV9scnVfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1iX2NhY2hlX3NwaW5sb2NrKTsKIAotc3RhdGljIGlubGluZSBpbnQKLW1iX2NhY2hlX2luZGV4ZXMoc3RydWN0IG1iX2NhY2hlICpjYWNoZSkKLXsKLSNpZmRlZiBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UCi0JcmV0dXJuIE1CX0NBQ0hFX0lOREVYRVNfQ09VTlQ7Ci0jZWxzZQotCXJldHVybiBjYWNoZS0+Y19pbmRleGVzX2NvdW50OwotI2VuZGlmCi19Ci0KIC8qCiAgKiBXaGF0IHRoZSBtYmNhY2hlIHJlZ2lzdGVycyBhcyB0byBnZXQgc2hydW5rIGR5bmFtaWNhbGx5LgogICovCkBAIC0xMzIsMTIgKzExOCw5IEBACiBzdGF0aWMgdm9pZAogX19tYl9jYWNoZV9lbnRyeV91bmhhc2goc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZSkKIHsKLQlpbnQgbjsKLQogCWlmIChfX21iX2NhY2hlX2VudHJ5X2lzX2hhc2hlZChjZSkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmY2UtPmVfYmxvY2tfbGlzdCk7Ci0JCWZvciAobj0wOyBuPG1iX2NhY2hlX2luZGV4ZXMoY2UtPmVfY2FjaGUpOyBuKyspCi0JCQlsaXN0X2RlbCgmY2UtPmVfaW5kZXhlc1tuXS5vX2xpc3QpOworCQlsaXN0X2RlbCgmY2UtPmVfaW5kZXgub19saXN0KTsKIAl9CiB9CiAKQEAgLTE0OCwxNiArMTMxLDggQEAKIAlzdHJ1Y3QgbWJfY2FjaGUgKmNhY2hlID0gY2UtPmVfY2FjaGU7CiAKIAltYl9hc3NlcnQoIShjZS0+ZV91c2VkIHx8IGNlLT5lX3F1ZXVlZCkpOwotCWlmIChjYWNoZS0+Y19vcC5mcmVlICYmIGNhY2hlLT5jX29wLmZyZWUoY2UsIGdmcF9tYXNrKSkgewotCQkvKiBmcmVlIGZhaWxlZCAtLSBwdXQgYmFjayBvbiB0aGUgbHJ1IGxpc3QKLQkJICAgZm9yIGZyZWVpbmcgbGF0ZXIuICovCi0JCXNwaW5fbG9jaygmbWJfY2FjaGVfc3BpbmxvY2spOwotCQlsaXN0X2FkZCgmY2UtPmVfbHJ1X2xpc3QsICZtYl9jYWNoZV9scnVfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrKCZtYl9jYWNoZV9zcGlubG9jayk7Ci0JfSBlbHNlIHsKLQkJa21lbV9jYWNoZV9mcmVlKGNhY2hlLT5jX2VudHJ5X2NhY2hlLCBjZSk7Ci0JCWF0b21pY19kZWMoJmNhY2hlLT5jX2VudHJ5X2NvdW50KTsKLQl9CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlLT5jX2VudHJ5X2NhY2hlLCBjZSk7CisJYXRvbWljX2RlYygmY2FjaGUtPmNfZW50cnlfY291bnQpOwogfQogCiAKQEAgLTIwMSwyMiArMTc2LDEyIEBACiBtYl9jYWNoZV9zaHJpbmtfZm4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIGludCBucl90b19zY2FuLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlMSVNUX0hFQUQoZnJlZV9saXN0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbHRtcDsKKwlzdHJ1Y3QgbWJfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqZW50cnksICp0bXA7CiAJaW50IGNvdW50ID0gMDsKIAotCXNwaW5fbG9jaygmbWJfY2FjaGVfc3BpbmxvY2spOwotCWxpc3RfZm9yX2VhY2gobCwgJm1iX2NhY2hlX2xpc3QpIHsKLQkJc3RydWN0IG1iX2NhY2hlICpjYWNoZSA9Ci0JCQlsaXN0X2VudHJ5KGwsIHN0cnVjdCBtYl9jYWNoZSwgY19jYWNoZV9saXN0KTsKLQkJbWJfZGVidWcoImNhY2hlICVzICglZCkiLCBjYWNoZS0+Y19uYW1lLAotCQkJICBhdG9taWNfcmVhZCgmY2FjaGUtPmNfZW50cnlfY291bnQpKTsKLQkJY291bnQgKz0gYXRvbWljX3JlYWQoJmNhY2hlLT5jX2VudHJ5X2NvdW50KTsKLQl9CiAJbWJfZGVidWcoInRyeWluZyB0byBmcmVlICVkIGVudHJpZXMiLCBucl90b19zY2FuKTsKLQlpZiAobnJfdG9fc2NhbiA9PSAwKSB7Ci0JCXNwaW5fdW5sb2NrKCZtYl9jYWNoZV9zcGlubG9jayk7Ci0JCWdvdG8gb3V0OwotCX0KKwlzcGluX2xvY2soJm1iX2NhY2hlX3NwaW5sb2NrKTsKIAl3aGlsZSAobnJfdG9fc2Nhbi0tICYmICFsaXN0X2VtcHR5KCZtYl9jYWNoZV9scnVfbGlzdCkpIHsKIAkJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZSA9CiAJCQlsaXN0X2VudHJ5KG1iX2NhY2hlX2xydV9saXN0Lm5leHQsCkBAIC0yMjQsMTIgKzE4OSwxNSBAQAogCQlsaXN0X21vdmVfdGFpbCgmY2UtPmVfbHJ1X2xpc3QsICZmcmVlX2xpc3QpOwogCQlfX21iX2NhY2hlX2VudHJ5X3VuaGFzaChjZSk7CiAJfQotCXNwaW5fdW5sb2NrKCZtYl9jYWNoZV9zcGlubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0bXAsICZmcmVlX2xpc3QpIHsKLQkJX19tYl9jYWNoZV9lbnRyeV9mb3JnZXQobGlzdF9lbnRyeShsLCBzdHJ1Y3QgbWJfY2FjaGVfZW50cnksCi0JCQkJCQkgICBlX2xydV9saXN0KSwgZ2ZwX21hc2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZtYl9jYWNoZV9saXN0LCBjX2NhY2hlX2xpc3QpIHsKKwkJbWJfZGVidWcoImNhY2hlICVzICglZCkiLCBjYWNoZS0+Y19uYW1lLAorCQkJICBhdG9taWNfcmVhZCgmY2FjaGUtPmNfZW50cnlfY291bnQpKTsKKwkJY291bnQgKz0gYXRvbWljX3JlYWQoJmNhY2hlLT5jX2VudHJ5X2NvdW50KTsKIAl9Ci1vdXQ6CisJc3Bpbl91bmxvY2soJm1iX2NhY2hlX3NwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmZyZWVfbGlzdCwgZV9scnVfbGlzdCkgeworCQlfX21iX2NhY2hlX2VudHJ5X2ZvcmdldChlbnRyeSwgZ2ZwX21hc2spOworCX0KIAlyZXR1cm4gKGNvdW50IC8gMTAwKSAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmU7CiB9CiAKQEAgLTI0Myw3MiArMjExLDQ5IEBACiAgKiBtZW1vcnkgd2FzIGF2YWlsYWJsZS4KICAqCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgY2FjaGUgKGluZm9ybWFsKQotICogQGNhY2hlX29wOiBjb250YWlucyB0aGUgY2FsbGJhY2sgY2FsbGVkIHdoZW4gZnJlZWluZyBhIGNhY2hlIGVudHJ5Ci0gKiBAZW50cnlfc2l6ZTogVGhlIHNpemUgb2YgYSBjYWNoZSBlbnRyeSwgaW5jbHVkaW5nCi0gKiAgICAgICAgICAgICAgc3RydWN0IG1iX2NhY2hlX2VudHJ5Ci0gKiBAaW5kZXhlc19jb3VudDogbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5kZXhlcyBpbiB0aGUgY2FjaGUuIE11c3QgZXF1YWwKLSAqICAgICAgICAgICAgICAgICBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UIGlmIHRoZSBudW1iZXIgb2YgaW5kZXhlcyBpcwotICogICAgICAgICAgICAgICAgIGhhcmR3aXJlZC4KICAqIEBidWNrZXRfYml0czogbG9nMihudW1iZXIgb2YgaGFzaCBidWNrZXRzKQogICovCiBzdHJ1Y3QgbWJfY2FjaGUgKgotbWJfY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBtYl9jYWNoZV9vcCAqY2FjaGVfb3AsCi0JCXNpemVfdCBlbnRyeV9zaXplLCBpbnQgaW5kZXhlc19jb3VudCwgaW50IGJ1Y2tldF9iaXRzKQorbWJfY2FjaGVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBidWNrZXRfYml0cykKIHsKLQlpbnQgbT0wLCBuLCBidWNrZXRfY291bnQgPSAxIDw8IGJ1Y2tldF9iaXRzOworCWludCBuLCBidWNrZXRfY291bnQgPSAxIDw8IGJ1Y2tldF9iaXRzOwogCXN0cnVjdCBtYl9jYWNoZSAqY2FjaGUgPSBOVUxMOwogCi0JaWYoZW50cnlfc2l6ZSA8IHNpemVvZihzdHJ1Y3QgbWJfY2FjaGVfZW50cnkpICsKLQkgICBpbmRleGVzX2NvdW50ICogc2l6ZW9mKCgoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICopIDApLT5lX2luZGV4ZXNbMF0pKQotCQlyZXR1cm4gTlVMTDsKLQotCWNhY2hlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1iX2NhY2hlKSArCi0JICAgICAgICAgICAgICAgIGluZGV4ZXNfY291bnQgKiBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOworCWNhY2hlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1iX2NhY2hlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYWNoZSkKLQkJZ290byBmYWlsOworCQlyZXR1cm4gTlVMTDsKIAljYWNoZS0+Y19uYW1lID0gbmFtZTsKLQljYWNoZS0+Y19vcC5mcmVlID0gTlVMTDsKLQlpZiAoY2FjaGVfb3ApCi0JCWNhY2hlLT5jX29wLmZyZWUgPSBjYWNoZV9vcC0+ZnJlZTsKIAlhdG9taWNfc2V0KCZjYWNoZS0+Y19lbnRyeV9jb3VudCwgMCk7CiAJY2FjaGUtPmNfYnVja2V0X2JpdHMgPSBidWNrZXRfYml0czsKLSNpZmRlZiBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UCi0JbWJfYXNzZXJ0KGluZGV4ZXNfY291bnQgPT0gTUJfQ0FDSEVfSU5ERVhFU19DT1VOVCk7Ci0jZWxzZQotCWNhY2hlLT5jX2luZGV4ZXNfY291bnQgPSBpbmRleGVzX2NvdW50OwotI2VuZGlmCiAJY2FjaGUtPmNfYmxvY2tfaGFzaCA9IGttYWxsb2MoYnVja2V0X2NvdW50ICogc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwogCWlmICghY2FjaGUtPmNfYmxvY2tfaGFzaCkKIAkJZ290byBmYWlsOwogCWZvciAobj0wOyBuPGJ1Y2tldF9jb3VudDsgbisrKQogCQlJTklUX0xJU1RfSEVBRCgmY2FjaGUtPmNfYmxvY2tfaGFzaFtuXSk7Ci0JZm9yIChtPTA7IG08aW5kZXhlc19jb3VudDsgbSsrKSB7Ci0JCWNhY2hlLT5jX2luZGV4ZXNfaGFzaFttXSA9IGttYWxsb2MoYnVja2V0X2NvdW50ICoKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjYWNoZS0+Y19pbmRleGVzX2hhc2hbbV0pCi0JCQlnb3RvIGZhaWw7Ci0JCWZvciAobj0wOyBuPGJ1Y2tldF9jb3VudDsgbisrKQotCQkJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jX2luZGV4ZXNfaGFzaFttXVtuXSk7Ci0JfQotCWNhY2hlLT5jX2VudHJ5X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUobmFtZSwgZW50cnlfc2l6ZSwgMCwKKwljYWNoZS0+Y19pbmRleF9oYXNoID0ga21hbGxvYyhidWNrZXRfY291bnQgKiBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYWNoZS0+Y19pbmRleF9oYXNoKQorCQlnb3RvIGZhaWw7CisJZm9yIChuPTA7IG48YnVja2V0X2NvdW50OyBuKyspCisJCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+Y19pbmRleF9oYXNoW25dKTsKKwljYWNoZS0+Y19lbnRyeV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsCisJCXNpemVvZihzdHJ1Y3QgbWJfY2FjaGVfZW50cnkpLCAwLAogCQlTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUQsIE5VTEwpOwogCWlmICghY2FjaGUtPmNfZW50cnlfY2FjaGUpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAogCXNwaW5fbG9jaygmbWJfY2FjaGVfc3BpbmxvY2spOwogCWxpc3RfYWRkKCZjYWNoZS0+Y19jYWNoZV9saXN0LCAmbWJfY2FjaGVfbGlzdCk7CiAJc3Bpbl91bmxvY2soJm1iX2NhY2hlX3NwaW5sb2NrKTsKIAlyZXR1cm4gY2FjaGU7CiAKK2ZhaWwyOgorCWtmcmVlKGNhY2hlLT5jX2luZGV4X2hhc2gpOworCiBmYWlsOgotCWlmIChjYWNoZSkgewotCQl3aGlsZSAoLS1tID49IDApCi0JCQlrZnJlZShjYWNoZS0+Y19pbmRleGVzX2hhc2hbbV0pOwotCQlrZnJlZShjYWNoZS0+Y19ibG9ja19oYXNoKTsKLQkJa2ZyZWUoY2FjaGUpOwotCX0KKwlrZnJlZShjYWNoZS0+Y19ibG9ja19oYXNoKTsKKwlrZnJlZShjYWNoZSk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTM1Nyw3ICszMDIsNiBAQAogewogCUxJU1RfSEVBRChmcmVlX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpsdG1wOwotCWludCBuOwogCiAJc3Bpbl9sb2NrKCZtYl9jYWNoZV9zcGlubG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGwsIGx0bXAsICZtYl9jYWNoZV9scnVfbGlzdCkgewpAQCAtMzg0LDggKzMyOCw3IEBACiAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGUtPmNfZW50cnlfY2FjaGUpOwogCi0JZm9yIChuPTA7IG4gPCBtYl9jYWNoZV9pbmRleGVzKGNhY2hlKTsgbisrKQotCQlrZnJlZShjYWNoZS0+Y19pbmRleGVzX2hhc2hbbl0pOworCWtmcmVlKGNhY2hlLT5jX2luZGV4X2hhc2gpOwogCWtmcmVlKGNhY2hlLT5jX2Jsb2NrX2hhc2gpOwogCWtmcmVlKGNhY2hlKTsKIH0KQEAgLTQyOSwxNyArMzcyLDE2IEBACiAgKgogICogQGJkZXY6IGRldmljZSB0aGUgY2FjaGUgZW50cnkgYmVsb25ncyB0bwogICogQGJsb2NrOiBibG9jayBudW1iZXIKLSAqIEBrZXlzOiBhcnJheSBvZiBhZGRpdGlvbmFsIGtleXMuIFRoZXJlIG11c3QgYmUgaW5kZXhlc19jb3VudCBlbnRyaWVzCi0gKiAgICAgICAgaW4gdGhlIGFycmF5IChhcyBzcGVjaWZpZWQgd2hlbiBjcmVhdGluZyB0aGUgY2FjaGUpLgorICogQGtleTogbG9va3VwIGtleQogICovCiBpbnQKIG1iX2NhY2hlX2VudHJ5X2luc2VydChzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAotCQkgICAgICBzZWN0b3JfdCBibG9jaywgdW5zaWduZWQgaW50IGtleXNbXSkKKwkJICAgICAgc2VjdG9yX3QgYmxvY2ssIHVuc2lnbmVkIGludCBrZXkpCiB7CiAJc3RydWN0IG1iX2NhY2hlICpjYWNoZSA9IGNlLT5lX2NhY2hlOwogCXVuc2lnbmVkIGludCBidWNrZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKLQlpbnQgZXJyb3IgPSAtRUJVU1ksIG47CisJaW50IGVycm9yID0gLUVCVVNZOwogCiAJYnVja2V0ID0gaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKWJkZXYgKyAoYmxvY2sgJiAweGZmZmZmZmZmKSwgCiAJCQkgICBjYWNoZS0+Y19idWNrZXRfYml0cyk7CkBAIC00NTQsMTIgKzM5Niw5IEBACiAJY2UtPmVfYmRldiA9IGJkZXY7CiAJY2UtPmVfYmxvY2sgPSBibG9jazsKIAlsaXN0X2FkZCgmY2UtPmVfYmxvY2tfbGlzdCwgJmNhY2hlLT5jX2Jsb2NrX2hhc2hbYnVja2V0XSk7Ci0JZm9yIChuPTA7IG48bWJfY2FjaGVfaW5kZXhlcyhjYWNoZSk7IG4rKykgewotCQljZS0+ZV9pbmRleGVzW25dLm9fa2V5ID0ga2V5c1tuXTsKLQkJYnVja2V0ID0gaGFzaF9sb25nKGtleXNbbl0sIGNhY2hlLT5jX2J1Y2tldF9iaXRzKTsKLQkJbGlzdF9hZGQoJmNlLT5lX2luZGV4ZXNbbl0ub19saXN0LAotCQkJICZjYWNoZS0+Y19pbmRleGVzX2hhc2hbbl1bYnVja2V0XSk7Ci0JfQorCWNlLT5lX2luZGV4Lm9fa2V5ID0ga2V5OworCWJ1Y2tldCA9IGhhc2hfbG9uZyhrZXksIGNhY2hlLT5jX2J1Y2tldF9iaXRzKTsKKwlsaXN0X2FkZCgmY2UtPmVfaW5kZXgub19saXN0LCAmY2FjaGUtPmNfaW5kZXhfaGFzaFtidWNrZXRdKTsKIAllcnJvciA9IDA7CiBvdXQ6CiAJc3Bpbl91bmxvY2soJm1iX2NhY2hlX3NwaW5sb2NrKTsKQEAgLTU1NSwxMyArNDk0LDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKgogX19tYl9jYWNoZV9lbnRyeV9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmwsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCi0JCSAgICAgIGludCBpbmRleCwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGtleSkKKwkJICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGtleSkKIHsKIAl3aGlsZSAobCAhPSBoZWFkKSB7CiAJCXN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2UgPQotCQkJbGlzdF9lbnRyeShsLCBzdHJ1Y3QgbWJfY2FjaGVfZW50cnksCi0JCQkgICAgICAgICAgIGVfaW5kZXhlc1tpbmRleF0ub19saXN0KTsKLQkJaWYgKGNlLT5lX2JkZXYgPT0gYmRldiAmJiBjZS0+ZV9pbmRleGVzW2luZGV4XS5vX2tleSA9PSBrZXkpIHsKKwkJCWxpc3RfZW50cnkobCwgc3RydWN0IG1iX2NhY2hlX2VudHJ5LCBlX2luZGV4Lm9fbGlzdCk7CisJCWlmIChjZS0+ZV9iZGV2ID09IGJkZXYgJiYgY2UtPmVfaW5kZXgub19rZXkgPT0ga2V5KSB7CiAJCQlERUZJTkVfV0FJVCh3YWl0KTsKIAogCQkJaWYgKCFsaXN0X2VtcHR5KCZjZS0+ZV9scnVfbGlzdCkpCkBAIC02MDMsMjMgKzU0MSwyMCBAQAogICogcmV0dXJuZWQgY2FjaGUgZW50cnkgaXMgbG9ja2VkIGZvciBzaGFyZWQgYWNjZXNzICgibXVsdGlwbGUgcmVhZGVycyIpLgogICoKICAqIEBjYWNoZTogdGhlIGNhY2hlIHRvIHNlYXJjaAotICogQGluZGV4OiB0aGUgbnVtYmVyIG9mIHRoZSBhZGRpdG9uYWwgaW5kZXggdG8gc2VhcmNoICgwPD1pbmRleDxpbmRleGVzX2NvdW50KQogICogQGJkZXY6IHRoZSBkZXZpY2UgdGhlIGNhY2hlIGVudHJ5IHNob3VsZCBiZWxvbmcgdG8KICAqIEBrZXk6IHRoZSBrZXkgaW4gdGhlIGluZGV4CiAgKi8KIHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqCi1tYl9jYWNoZV9lbnRyeV9maW5kX2ZpcnN0KHN0cnVjdCBtYl9jYWNoZSAqY2FjaGUsIGludCBpbmRleCwKLQkJCSAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGtleSkKK21iX2NhY2hlX2VudHJ5X2ZpbmRfZmlyc3Qoc3RydWN0IG1iX2NhY2hlICpjYWNoZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCSAgdW5zaWduZWQgaW50IGtleSkKIHsKIAl1bnNpZ25lZCBpbnQgYnVja2V0ID0gaGFzaF9sb25nKGtleSwgY2FjaGUtPmNfYnVja2V0X2JpdHMpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmw7CiAJc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZTsKIAotCW1iX2Fzc2VydChpbmRleCA8IG1iX2NhY2hlX2luZGV4ZXMoY2FjaGUpKTsKIAlzcGluX2xvY2soJm1iX2NhY2hlX3NwaW5sb2NrKTsKLQlsID0gY2FjaGUtPmNfaW5kZXhlc19oYXNoW2luZGV4XVtidWNrZXRdLm5leHQ7Ci0JY2UgPSBfX21iX2NhY2hlX2VudHJ5X2ZpbmQobCwgJmNhY2hlLT5jX2luZGV4ZXNfaGFzaFtpbmRleF1bYnVja2V0XSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgYmRldiwga2V5KTsKKwlsID0gY2FjaGUtPmNfaW5kZXhfaGFzaFtidWNrZXRdLm5leHQ7CisJY2UgPSBfX21iX2NhY2hlX2VudHJ5X2ZpbmQobCwgJmNhY2hlLT5jX2luZGV4X2hhc2hbYnVja2V0XSwgYmRldiwga2V5KTsKIAlzcGluX3VubG9jaygmbWJfY2FjaGVfc3BpbmxvY2spOwogCXJldHVybiBjZTsKIH0KQEAgLTY0MCwxMiArNTc1LDExIEBACiAgKiB9CiAgKgogICogQHByZXY6IFRoZSBwcmV2aW91cyBtYXRjaAotICogQGluZGV4OiB0aGUgbnVtYmVyIG9mIHRoZSBhZGRpdG9uYWwgaW5kZXggdG8gc2VhcmNoICgwPD1pbmRleDxpbmRleGVzX2NvdW50KQogICogQGJkZXY6IHRoZSBkZXZpY2UgdGhlIGNhY2hlIGVudHJ5IHNob3VsZCBiZWxvbmcgdG8KICAqIEBrZXk6IHRoZSBrZXkgaW4gdGhlIGluZGV4CiAgKi8KIHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqCi1tYl9jYWNoZV9lbnRyeV9maW5kX25leHQoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpwcmV2LCBpbnQgaW5kZXgsCittYl9jYWNoZV9lbnRyeV9maW5kX25leHQoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpwcmV2LAogCQkJIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBrZXkpCiB7CiAJc3RydWN0IG1iX2NhY2hlICpjYWNoZSA9IHByZXYtPmVfY2FjaGU7CkBAIC02NTMsMTEgKzU4Nyw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqbDsKIAlzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKmNlOwogCi0JbWJfYXNzZXJ0KGluZGV4IDwgbWJfY2FjaGVfaW5kZXhlcyhjYWNoZSkpOwogCXNwaW5fbG9jaygmbWJfY2FjaGVfc3BpbmxvY2spOwotCWwgPSBwcmV2LT5lX2luZGV4ZXNbaW5kZXhdLm9fbGlzdC5uZXh0OwotCWNlID0gX19tYl9jYWNoZV9lbnRyeV9maW5kKGwsICZjYWNoZS0+Y19pbmRleGVzX2hhc2hbaW5kZXhdW2J1Y2tldF0sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGJkZXYsIGtleSk7CisJbCA9IHByZXYtPmVfaW5kZXgub19saXN0Lm5leHQ7CisJY2UgPSBfX21iX2NhY2hlX2VudHJ5X2ZpbmQobCwgJmNhY2hlLT5jX2luZGV4X2hhc2hbYnVja2V0XSwgYmRldiwga2V5KTsKIAlfX21iX2NhY2hlX2VudHJ5X3JlbGVhc2VfdW5sb2NrKHByZXYpOwogCXJldHVybiBjZTsKIH0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2JpdG1hcC5jIGIvZnMvbWluaXgvYml0bWFwLmMKaW5kZXggNDgyNzc5Zi4uM2YzMmJjYiAxMDA2NDQKLS0tIGEvZnMvbWluaXgvYml0bWFwLmMKKysrIGIvZnMvbWluaXgvYml0bWFwLmMKQEAgLTIwMCwxMyArMjAwLDEzIEBACiAJaW5vID0gaW5vZGUtPmlfaW5vOwogCWlmIChpbm8gPCAxIHx8IGlubyA+IHNiaS0+c19uaW5vZGVzKSB7CiAJCXByaW50aygibWluaXhfZnJlZV9pbm9kZTogaW5vZGUgMCBvciBub25leGlzdGVudCBpbm9kZVxuIik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAJfQogCWJpdCA9IGlubyAmICgoMTw8aykgLSAxKTsKIAlpbm8gPj49IGs7CiAJaWYgKGlubyA+PSBzYmktPnNfaW1hcF9ibG9ja3MpIHsKIAkJcHJpbnRrKCJtaW5peF9mcmVlX2lub2RlOiBub25leGlzdGVudCBpbWFwIGluIHN1cGVyYmxvY2tcbiIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCW1pbml4X2NsZWFyX2lub2RlKGlub2RlKTsJLyogY2xlYXIgb24tZGlzayBjb3B5ICovCkBAIC0yMTcsOCArMjE3LDYgQEAKIAkJcHJpbnRrKCJtaW5peF9mcmVlX2lub2RlOiBiaXQgJWx1IGFscmVhZHkgY2xlYXJlZFxuIiwgYml0KTsKIAlzcGluX3VubG9jaygmYml0bWFwX2xvY2spOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKLSBvdXQ6Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwkJLyogY2xlYXIgaW4tbWVtb3J5IGNvcHkgKi8KIH0KIAogc3RydWN0IGlub2RlICptaW5peF9uZXdfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlLCBpbnQgKmVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZGlyLmMgYi9mcy9taW5peC9kaXIuYwppbmRleCAxZGJmOTIxLi4wODVhOTI2IDEwMDY0NAotLS0gYS9mcy9taW5peC9kaXIuYworKysgYi9mcy9taW5peC9kaXIuYwpAQCAtMjcxLDggKzI3MSw3IEBACiAKIGdvdF9pdDoKIAlwb3MgPSBwYWdlX29mZnNldChwYWdlKSArIHAgLSAoY2hhciAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQllcnIgPSBfX21pbml4X3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgc2JpLT5zX2RpcnNpemUsCi0JCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwgJnBhZ2UsIE5VTEwpOworCWVyciA9IG1pbml4X3ByZXBhcmVfY2h1bmsocGFnZSwgcG9zLCBzYmktPnNfZGlyc2l6ZSk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOwogCW1lbWNweSAobmFteCwgbmFtZSwgbmFtZWxlbik7CkBAIC0yOTcsOCArMjk2LDcgQEAKIAogaW50IG1pbml4X2RlbGV0ZV9lbnRyeShzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAoc3RydWN0IGlub2RlKiltYXBwaW5nLT5ob3N0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArIChjaGFyKilkZSAtIGthZGRyOwogCXN0cnVjdCBtaW5peF9zYl9pbmZvICpzYmkgPSBtaW5peF9zYihpbm9kZS0+aV9zYik7CkBAIC0zMDYsOCArMzA0LDcgQEAKIAlpbnQgZXJyOwogCiAJbG9ja19wYWdlKHBhZ2UpOwotCWVyciA9IF9fbWluaXhfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgcG9zLCBsZW4sCi0JCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwgJnBhZ2UsIE5VTEwpOworCWVyciA9IG1pbml4X3ByZXBhcmVfY2h1bmsocGFnZSwgcG9zLCBsZW4pOwogCWlmIChlcnIgPT0gMCkgewogCQlpZiAoc2JpLT5zX3ZlcnNpb24gPT0gTUlOSVhfVjMpCiAJCQkoKG1pbml4M19kaXJlbnQgKikgZGUpLT5pbm9kZSA9IDA7CkBAIC0zMjUsMTYgKzMyMiwxNCBAQAogCiBpbnQgbWluaXhfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgMCk7CiAJc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaSA9IG1pbml4X3NiKGlub2RlLT5pX3NiKTsKIAljaGFyICprYWRkcjsKIAlpbnQgZXJyOwogCiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKLQllcnIgPSBfX21pbml4X3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIDAsIDIgKiBzYmktPnNfZGlyc2l6ZSwKLQkJCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gbWluaXhfcHJlcGFyZV9jaHVuayhwYWdlLCAwLCAyICogc2JpLT5zX2RpcnNpemUpOwogCWlmIChlcnIpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCWdvdG8gZmFpbDsKQEAgLTQyNSw4ICs0MjAsNyBAQAogdm9pZCBtaW5peF9zZXRfbGluayhzdHJ1Y3QgbWluaXhfZGlyX2VudHJ5ICpkZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7Ci0Jc3RydWN0IGlub2RlICpkaXIgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2IoZGlyLT5pX3NiKTsKIAlsb2ZmX3QgcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKwogCQkJKGNoYXIgKilkZS0oY2hhciopcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtNDM0LDggKzQyOCw3IEBACiAKIAlsb2NrX3BhZ2UocGFnZSk7CiAKLQllcnIgPSBfX21pbml4X3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgc2JpLT5zX2RpcnNpemUsCi0JCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwgJnBhZ2UsIE5VTEwpOworCWVyciA9IG1pbml4X3ByZXBhcmVfY2h1bmsocGFnZSwgcG9zLCBzYmktPnNfZGlyc2l6ZSk7CiAJaWYgKGVyciA9PSAwKSB7CiAJCWlmIChzYmktPnNfdmVyc2lvbiA9PSBNSU5JWF9WMykKIAkJCSgobWluaXgzX2RpcmVudCAqKSBkZSktPmlub2RlID0gaW5vZGUtPmlfaW5vOwpkaWZmIC0tZ2l0IGEvZnMvbWluaXgvZmlsZS5jIGIvZnMvbWluaXgvZmlsZS5jCmluZGV4IGQ1MzIwZmYuLjQ0OTNjZTYgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2ZpbGUuYworKysgYi9mcy9taW5peC9maWxlLmMKQEAgLTIzLDcgKzIzLDI5IEBACiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogfTsKIAorc3RhdGljIGludCBtaW5peF9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYKKwkgICAgYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJZXJyb3IgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG1pbml4X2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkudHJ1bmNhdGUJPSBtaW5peF90cnVuY2F0ZSwKKwkuc2V0YXR0cgk9IG1pbml4X3NldGF0dHIsCiAJLmdldGF0dHIJPSBtaW5peF9nZXRhdHRyLAogfTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IDc1NmY4YzkuLmUzOWQ2YmYgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMjQsMTIgKzI0LDE3IEBACiBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpOwogc3RhdGljIGludCBtaW5peF9yZW1vdW50IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgaW50ICogZmxhZ3MsIGNoYXIgKiBkYXRhKTsKIAotc3RhdGljIHZvaWQgbWluaXhfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBtaW5peF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQlpbm9kZS0+aV9zaXplID0gMDsKLQltaW5peF90cnVuY2F0ZShpbm9kZSk7Ci0JbWluaXhfZnJlZV9pbm9kZShpbm9kZSk7CisJaWYgKCFpbm9kZS0+aV9ubGluaykgeworCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJbWluaXhfdHJ1bmNhdGUoaW5vZGUpOworCX0KKwlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCWlmICghaW5vZGUtPmlfbmxpbmspCisJCW1pbml4X2ZyZWVfaW5vZGUoaW5vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBtaW5peF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTk2LDcgKzEwMSw3IEBACiAJLmFsbG9jX2lub2RlCT0gbWluaXhfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBtaW5peF9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IG1pbml4X3dyaXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBtaW5peF9kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gbWluaXhfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IG1pbml4X3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG1pbml4X3N0YXRmcywKIAkucmVtb3VudF9mcwk9IG1pbml4X3JlbW91bnQsCkBAIC0zNTcsMjAgKzM2MiwyNiBAQAogCXJldHVybiBibG9ja19yZWFkX2Z1bGxfcGFnZShwYWdlLG1pbml4X2dldF9ibG9jayk7CiB9CiAKLWludCBfX21pbml4X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQoraW50IG1pbml4X3ByZXBhcmVfY2h1bmsoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKIHsKLQlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAotCQkJCW1pbml4X2dldF9ibG9jayk7CisJcmV0dXJuIF9fYmxvY2tfd3JpdGVfYmVnaW4ocGFnZSwgcG9zLCBsZW4sIG1pbml4X2dldF9ibG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgbWluaXhfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7Ci0JKnBhZ2VwID0gTlVMTDsKLQlyZXR1cm4gX19taW5peF93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEpOworCWludCByZXQ7CisKKwlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAorCQkJCW1pbml4X2dldF9ibG9jayk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJbG9mZl90IGlzaXplID0gbWFwcGluZy0+aG9zdC0+aV9zaXplOworCQlpZiAocG9zICsgbGVuID4gaXNpemUpCisJCQl2bXRydW5jYXRlKG1hcHBpbmctPmhvc3QsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc2VjdG9yX3QgbWluaXhfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCmRpZmYgLS1naXQgYS9mcy9taW5peC9taW5peC5oIGIvZnMvbWluaXgvbWluaXguaAppbmRleCAxMTFmMzRlLi40MDdiMWM4IDEwMDY0NAotLS0gYS9mcy9taW5peC9taW5peC5oCisrKyBiL2ZzL21pbml4L21pbml4LmgKQEAgLTUzLDkgKzUzLDcgQEAKIGV4dGVybiB2b2lkIG1pbml4X2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBibG9jayk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpKTsKIGV4dGVybiBpbnQgbWluaXhfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXQgKik7Ci1leHRlcm4gaW50IF9fbWluaXhfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKLQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpOworZXh0ZXJuIGludCBtaW5peF9wcmVwYXJlX2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pOwogCiBleHRlcm4gdm9pZCBWMV9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBWMl9taW5peF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA0MmQyZDI4Li4xN2VhNzZiIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTQ4MywxMyArNDgzLDggQEAKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHNldF9yb290KHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWlmICghbmQtPnJvb3QubW50KSB7Ci0JCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7Ci0JCXJlYWRfbG9jaygmZnMtPmxvY2spOwotCQluZC0+cm9vdCA9IGZzLT5yb290OwotCQlwYXRoX2dldCgmbmQtPnJvb3QpOwotCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwotCX0KKwlpZiAoIW5kLT5yb290Lm1udCkKKwkJZ2V0X2ZzX3Jvb3QoY3VycmVudC0+ZnMsICZuZC0+cm9vdCk7CiB9CiAKIHN0YXRpYyBpbnQgbGlua19wYXRoX3dhbGsoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwpAQCAtMTAxNSwxMSArMTAxMCw3IEBACiAJCW5kLT5wYXRoID0gbmQtPnJvb3Q7CiAJCXBhdGhfZ2V0KCZuZC0+cm9vdCk7CiAJfSBlbHNlIGlmIChkZmQgPT0gQVRfRkRDV0QpIHsKLQkJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKLQkJcmVhZF9sb2NrKCZmcy0+bG9jayk7Ci0JCW5kLT5wYXRoID0gZnMtPnB3ZDsKLQkJcGF0aF9nZXQoJmZzLT5wd2QpOwotCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOworCQlnZXRfZnNfcHdkKGN1cnJlbnQtPmZzLCAmbmQtPnBhdGgpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIApAQCAtMjYzMyw3ICsyNjI0LDcgQEAKIHsKIAlpbnQgZXJyb3I7CiAJaW50IGlzX2RpciA9IFNfSVNESVIob2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKLQljb25zdCBjaGFyICpvbGRfbmFtZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZTsKIAogCWlmIChvbGRfZGVudHJ5LT5kX2lub2RlID09IG5ld19kZW50cnktPmRfaW5vZGUpCiAgCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggODgwNThkZS4uMmUxMGNiMSAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlICJwbm9kZS5oIgpAQCAtMTUwLDYgKzE1MSw5IEBACiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9zaGFyZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZtbnQtPm1udF9zbGF2ZV9saXN0KTsKIAkJSU5JVF9MSVNUX0hFQUQoJm1udC0+bW50X3NsYXZlKTsKKyNpZmRlZiBDT05GSUdfRlNOT1RJRlkKKwkJSU5JVF9ITElTVF9IRUFEKCZtbnQtPm1udF9mc25vdGlmeV9tYXJrcyk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJCW1udC0+bW50X3dyaXRlcnMgPSBhbGxvY19wZXJjcHUoaW50KTsKIAkJaWYgKCFtbnQtPm1udF93cml0ZXJzKQpAQCAtNjEwLDYgKzYxNCw3IEBACiAJICogcHJvdmlkZXMgYmFycmllcnMsIHNvIGNvdW50X21udF93cml0ZXJzKCkgYmVsb3cgaXMgc2FmZS4gIEFWCiAJICovCiAJV0FSTl9PTihjb3VudF9tbnRfd3JpdGVycyhtbnQpKTsKKwlmc25vdGlmeV92ZnNtb3VudF9kZWxldGUobW50KTsKIAlkcHV0KG1udC0+bW50X3Jvb3QpOwogCWZyZWVfdmZzbW50KG1udCk7CiAJZGVhY3RpdmF0ZV9zdXBlcihzYik7CkBAIC03ODMsNyArNzg4LDYgQEAKIAkJeyBNTlRfTk9BVElNRSwgIixub2F0aW1lIiB9LAogCQl7IE1OVF9OT0RJUkFUSU1FLCAiLG5vZGlyYXRpbWUiIH0sCiAJCXsgTU5UX1JFTEFUSU1FLCAiLHJlbGF0aW1lIiB9LAotCQl7IE1OVF9TVFJJQ1RBVElNRSwgIixzdHJpY3RhdGltZSIgfSwKIAkJeyAwLCBOVUxMIH0KIAl9OwogCWNvbnN0IHN0cnVjdCBwcm9jX2ZzX2luZm8gKmZzX2luZm9wOwpAQCAtMTk4NCw3ICsxOTg4LDcgQEAKIAlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCiAJCW1udF9mbGFncyB8PSBNTlRfUkVBRE9OTFk7CiAKLQlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwKKwlmbGFncyAmPSB+KE1TX05PU1VJRCB8IE1TX05PRVhFQyB8IE1TX05PREVWIHwgTVNfQUNUSVZFIHwgTVNfQk9STiB8CiAJCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCB8CiAJCSAgIE1TX1NUUklDVEFUSU1FKTsKIApAQCAtMjIwOCwxMCArMjIxMiw3IEBACiAJCWdvdG8gb3V0MTsKIAl9CiAKLQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQlyb290ID0gY3VycmVudC0+ZnMtPnJvb3Q7Ci0JcGF0aF9nZXQoJmN1cnJlbnQtPmZzLT5yb290KTsKLQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCWdldF9mc19yb290KGN1cnJlbnQtPmZzLCAmcm9vdCk7CiAJZG93bl93cml0ZSgmbmFtZXNwYWNlX3NlbSk7CiAJbXV0ZXhfbG9jaygmb2xkLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZXJyb3IgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvaW5vZGUuYyBiL2ZzL25jcGZzL2lub2RlLmMKaW5kZXggMWU2MzRkZS4uYjRkZTM4YyAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvaW5vZGUuYworKysgYi9mcy9uY3Bmcy9pbm9kZS5jCkBAIC00Myw3ICs0Myw3IEBACiAjZGVmaW5lIE5DUF9ERUZBVUxUX1RJTUVfT1VUIDEwCiAjZGVmaW5lIE5DUF9ERUZBVUxUX1JFVFJZX0NPVU5UIDIwCiAKLXN0YXRpYyB2b2lkIG5jcF9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworc3RhdGljIHZvaWQgbmNwX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyB2b2lkIG5jcF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogc3RhdGljIGludCAgbmNwX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopOwogc3RhdGljIGludCAgbmNwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IHZmc21vdW50ICopOwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJLmFsbG9jX2lub2RlCT0gbmNwX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gbmNwX2Rlc3Ryb3lfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gbmNwX2RlbGV0ZV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSBuY3BfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IG5jcF9wdXRfc3VwZXIsCiAJLnN0YXRmcwkJPSBuY3Bfc3RhdGZzLAogCS5yZW1vdW50X2ZzCT0gbmNwX3JlbW91bnQsCkBAIC0yODIsMTkgKzI4MiwxOSBAQAogfQogCiBzdGF0aWMgdm9pZAotbmNwX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorbmNwX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJRERQUklOVEsoIm5jcF9kZWxldGVfaW5vZGU6IHB1dCBkaXJlY3RvcnkgJWxkXG4iLCBpbm9kZS0+aV9pbm8pOworCQlERFBSSU5USygibmNwX2V2aWN0X2lub2RlOiBwdXQgZGlyZWN0b3J5ICVsZFxuIiwgaW5vZGUtPmlfaW5vKTsKIAl9CiAKIAlpZiAobmNwX21ha2VfY2xvc2VkKGlub2RlKSAhPSAwKSB7CiAJCS8qIFdlIGNhbid0IGRvIGFueXRoaW5nIGJ1dCBjb21wbGFpbi4gKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJuY3BfZGVsZXRlX2lub2RlOiBjb3VsZCBub3QgY2xvc2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5jcF9ldmljdF9pbm9kZTogY291bGQgbm90IGNsb3NlXG4iKTsKIAl9Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBuY3Bfc3RvcF90YXNrcyhzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyKSB7CkBAIC05MjQsOSArOTI0LDggQEAKIAkJCQl0bXBhdHRyLmlhX3ZhbGlkID0gQVRUUl9NT0RFOwogCQkJCXRtcGF0dHIuaWFfbW9kZSA9IGF0dHItPmlhX21vZGU7CiAKLQkJCQlyZXN1bHQgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCAmdG1wYXR0cik7Ci0JCQkJaWYgKHJlc3VsdCkKLQkJCQkJZ290byBvdXQ7CisJCQkJc2V0YXR0cl9jb3B5KGlub2RlLCAmdG1wYXR0cik7CisJCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCQl9CiAJCX0KICNlbmRpZgpAQCAtOTU0LDE1ICs5NTMsMTIgQEAKIAkJcmVzdWx0ID0gbmNwX21ha2VfY2xvc2VkKGlub2RlKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWdvdG8gb3V0OwotCQl7Ci0JCQlzdHJ1Y3QgaWF0dHIgdG1wYXR0cjsKLQkJCQotCQkJdG1wYXR0ci5pYV92YWxpZCA9IEFUVFJfU0laRTsKLQkJCXRtcGF0dHIuaWFfc2l6ZSA9IGF0dHItPmlhX3NpemU7Ci0JCQkKLQkJCXJlc3VsdCA9IGlub2RlX3NldGF0dHIoaW5vZGUsICZ0bXBhdHRyKTsKKworCQlpZiAoYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJCXJlc3VsdCA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwogCQkJaWYgKHJlc3VsdCkKIAkJCQlnb3RvIG91dDsKKwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQl9CiAJfQogCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0NUSU1FKSAhPSAwKSB7CkBAIC0xMDAyLDggKzk5OCwxMiBAQAogCQkJTkNQX0ZJTkZPKGlub2RlKS0+bndhdHRyID0gaW5mby5hdHRyaWJ1dGVzOwogI2VuZGlmCiAJfQotCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIG91dDsKKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lvY3RsLmMgYi9mcy9uY3Bmcy9pb2N0bC5jCmluZGV4IDAyM2MwM2QuLjg0YThjZmMgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lvY3RsLmMKKysrIGIvZnMvbmNwZnMvaW9jdGwuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L25jcF9mcy5oPgogCmRpZmYgLS1naXQgYS9mcy9uZnMvS2NvbmZpZyBiL2ZzL25mcy9LY29uZmlnCmluZGV4IGE0M2QwN2UuLmNjMWJiMzMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9LY29uZmlnCisrKyBiL2ZzL25mcy9LY29uZmlnCkBAIC02MSw4ICs2MSw4IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTkZTX1Y0Ci0JYm9vbCAiTkZTIGNsaWVudCBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gTkZTX0ZTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIk5GUyBjbGllbnQgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNCIKKwlkZXBlbmRzIG9uIE5GU19GUwogCXNlbGVjdCBSUENTRUNfR1NTX0tSQjUKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHZlcnNpb24gNCBvZiB0aGUgTkZTIHByb3RvY29sCkBAIC03MiwxNiArNzIsMTYgQEAKIAkgIHNwYWNlIHByb2dyYW1zIHdoaWNoIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXggbmZzLXV0aWxzIHBhY2thZ2UsCiAJICBhdmFpbGFibGUgZnJvbSBodHRwOi8vbGludXgtbmZzLm9yZy8uCiAKLQkgIElmIHVuc3VyZSwgc2F5IE4uCisJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTkZTX1Y0XzEKLQlib29sICJORlMgY2xpZW50IHN1cHBvcnQgZm9yIE5GU3Y0LjEgKERFVkVMT1BFUiBPTkxZKSIKKwlib29sICJORlMgY2xpZW50IHN1cHBvcnQgZm9yIE5GU3Y0LjEgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBORlNfVjQgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBtaW5vciB2ZXJzaW9uIDEgb2YgdGhlIE5GU3Y0IHByb3RvY29sCiAJICAoZHJhZnQtaWV0Zi1uZnN2NC1taW5vcnZlcnNpb24xKSBpbiB0aGUga2VybmVsJ3MgTkZTIGNsaWVudC4KIAotCSAgVW5sZXNzIHlvdSdyZSBhbiBORlMgZGV2ZWxvcGVyLCBzYXkgTi4KKwkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBST09UX05GUwogCWJvb2wgIlJvb3QgZmlsZSBzeXN0ZW0gb24gTkZTIgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKaW5kZXggYTA4NzcwYS4uOTMwZDEwZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCkBAIC0zNyw4ICszNyw4IEBACiAJaWYgKGlub2RlID09IE5VTEwpCiAJCWdvdG8gb3V0X3B1dGNsaWVudDsKIAluZnNpID0gTkZTX0koaW5vZGUpOwotCWRvd25fcmVhZCgmbmZzaS0+cndzZW0pOwotCWRlbGVnYXRpb24gPSBuZnNpLT5kZWxlZ2F0aW9uOworCXJjdV9yZWFkX2xvY2soKTsKKwlkZWxlZ2F0aW9uID0gcmN1X2RlcmVmZXJlbmNlKG5mc2ktPmRlbGVnYXRpb24pOwogCWlmIChkZWxlZ2F0aW9uID09IE5VTEwgfHwgKGRlbGVnYXRpb24tPnR5cGUgJiBGTU9ERV9XUklURSkgPT0gMCkKIAkJZ290byBvdXRfaXB1dDsKIAlyZXMtPnNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC01Myw3ICs1Myw3IEBACiAJCWFyZ3MtPmJpdG1hcFsxXTsKIAlyZXMtPnN0YXR1cyA9IDA7CiBvdXRfaXB1dDoKLQl1cF9yZWFkKCZuZnNpLT5yd3NlbSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaXB1dChpbm9kZSk7CiBvdXRfcHV0Y2xpZW50OgogCW5mc19wdXRfY2xpZW50KGNscCk7CkBAIC02MiwxNiArNjIsNiBAQAogCXJldHVybiByZXMtPnN0YXR1czsKIH0KIAotc3RhdGljIGludCAoKm5mc192YWxpZGF0ZV9kZWxlZ2F0aW9uX3N0YXRlaWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkpKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqLCBjb25zdCBuZnM0X3N0YXRlaWQgKikKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24gPiAwKQotCQlyZXR1cm4gbmZzNDFfdmFsaWRhdGVfZGVsZWdhdGlvbl9zdGF0ZWlkOwotI2VuZGlmCi0JcmV0dXJuIG5mczRfdmFsaWRhdGVfZGVsZWdhdGlvbl9zdGF0ZWlkOwotfQotCi0KIF9fYmUzMiBuZnM0X2NhbGxiYWNrX3JlY2FsbChzdHJ1Y3QgY2JfcmVjYWxsYXJncyAqYXJncywgdm9pZCAqZHVtbXkpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscDsKQEAgLTkyLDggKzgyLDcgQEAKIAkJaW5vZGUgPSBuZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlKGNscCwgJmFyZ3MtPmZoKTsKIAkJaWYgKGlub2RlICE9IE5VTEwpIHsKIAkJCS8qIFNldCB1cCBhIGhlbHBlciB0aHJlYWQgdG8gYWN0dWFsbHkgcmV0dXJuIHRoZSBkZWxlZ2F0aW9uICovCi0JCQlzd2l0Y2ggKG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSwgJmFyZ3MtPnN0YXRlaWQsCi0JCQkJCQkJCSAgbmZzX3ZhbGlkYXRlX2RlbGVnYXRpb25fc3RhdGVpZChjbHApKSkgeworCQkJc3dpdGNoIChuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oaW5vZGUsICZhcmdzLT5zdGF0ZWlkKSkgewogCQkJCWNhc2UgMDoKIAkJCQkJcmVzID0gMDsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggZDI1YjUyNS4uNGU3ZGYyYSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTUwLDYgKzE1MCw3IEBACiAJY2xwLT5jbF9ib290X3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJY2xwLT5jbF9zdGF0ZSA9IDEgPDwgTkZTNENMTlRfTEVBU0VfRVhQSVJFRDsKIAljbHAtPmNsX21pbm9ydmVyc2lvbiA9IGNsX2luaXQtPm1pbm9ydmVyc2lvbjsKKwljbHAtPmNsX212b3BzID0gbmZzX3Y0X21pbm9yX29wc1tjbF9pbml0LT5taW5vcnZlcnNpb25dOwogI2VuZGlmCiAJY3JlZCA9IHJwY19sb29rdXBfbWFjaGluZV9jcmVkKCk7CiAJaWYgKCFJU19FUlIoY3JlZCkpCkBAIC0xNzgsNyArMTc5LDcgQEAKIAkJY2xwLT5jbF9zZXNzaW9uID0gTlVMTDsKIAl9CiAKLQljbHAtPmNsX2NhbGxfc3luYyA9IF9uZnM0X2NhbGxfc3luYzsKKwljbHAtPmNsX212b3BzID0gbmZzX3Y0X21pbm9yX29wc1swXTsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIH0KIApAQCAtMTg4LDcgKzE4OSw3IEBACiBzdGF0aWMgdm9pZCBuZnM0X2Rlc3Ryb3lfY2FsbGJhY2soc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0NTX0NBTExCQUNLLCAmY2xwLT5jbF9yZXNfc3RhdGUpKQotCQluZnNfY2FsbGJhY2tfZG93bihjbHAtPmNsX21pbm9ydmVyc2lvbik7CisJCW5mc19jYWxsYmFja19kb3duKGNscC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24pOwogfQogCiBzdGF0aWMgdm9pZCBuZnM0X3NodXRkb3duX2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQpAQCAtMTEyNiw3ICsxMTI3LDcgQEAKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KIAotCQllcnJvciA9IG5mc19jYWxsYmFja191cChjbHAtPmNsX21pbm9ydmVyc2lvbiwKKwkJZXJyb3IgPSBuZnNfY2FsbGJhY2tfdXAoY2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiwKIAkJCQkJY2xwLT5jbF9ycGNjbGllbnQtPmNsX3hwcnQpOwogCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIHN0YXJ0IGNhbGxiYWNrLiBFcnJvciA9ICVkXG4iLApAQCAtMTE0MywxMCArMTE0NCw4IEBACiAgKi8KIHN0YXRpYyBpbnQgbmZzNF9pbml0X2NsaWVudF9taW5vcl92ZXJzaW9uKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7Ci0JY2xwLT5jbF9jYWxsX3N5bmMgPSBfbmZzNF9jYWxsX3N5bmM7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24pIHsKKwlpZiAoY2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbikgewogCQlzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXNzaW9uID0gTlVMTDsKIAkJLyoKIAkJICogQ3JlYXRlIHRoZSBzZXNzaW9uIGFuZCBtYXJrIGl0IGV4cGlyZWQuCkBAIC0xMTU4LDcgKzExNTcsMTMgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCWNscC0+Y2xfc2Vzc2lvbiA9IHNlc3Npb247Ci0JCWNscC0+Y2xfY2FsbF9zeW5jID0gX25mczRfY2FsbF9zeW5jX3Nlc3Npb247CisJCS8qCisJCSAqIFRoZSBjcmVhdGUgc2Vzc2lvbiByZXBseSByYWNlcyB3aXRoIHRoZSBzZXJ2ZXIgYmFjaworCQkgKiBjaGFubmVsIHByb2JlLiBNYXJrIHRoZSBjbGllbnQgTkZTX0NTX1NFU1NJT05fSU5JVElORworCQkgKiBzbyB0aGF0IHRoZSBjbGllbnQgYmFjayBjaGFubmVsIGNhbiBmaW5kIHRoZQorCQkgKiBuZnNfY2xpZW50IHN0cnVjdAorCQkgKi8KKwkJY2xwLT5jbF9jb25zX3N0YXRlID0gTkZTX0NTX1NFU1NJT05fSU5JVElORzsKIAl9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKQEAgLTE0NTQsNyArMTQ1OSw3IEBACiAJCQkJZGF0YS0+YXV0aGZsYXZvciwKIAkJCQlwYXJlbnRfc2VydmVyLT5jbGllbnQtPmNsX3hwcnQtPnByb3QsCiAJCQkJcGFyZW50X3NlcnZlci0+Y2xpZW50LT5jbF90aW1lb3V0LAotCQkJCXBhcmVudF9jbGllbnQtPmNsX21pbm9ydmVyc2lvbik7CisJCQkJcGFyZW50X2NsaWVudC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24pOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDMwMTYzNDUuLmI5YzNjNDMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMjY4LDE0ICsyNjgsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIFN5bmMgYWxsIGRhdGEgdG8gZGlzayB1cG9uIGRlbGVnYXRpb24gcmV0dXJuICovCi1zdGF0aWMgdm9pZCBuZnNfbXN5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JbmZzX3diX2FsbChpbm9kZSk7Ci0JZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7Ci19Ci0KIC8qCiAgKiBCYXNpYyBwcm9jZWR1cmUgZm9yIHJldHVybmluZyBhIGRlbGVnYXRpb24gdG8gdGhlIHNlcnZlcgogICovCkBAIC0zNjcsNyArMzU5LDcgQEAKIAkJZGVsZWdhdGlvbiA9IG5mc19kZXRhY2hfZGVsZWdhdGlvbl9sb2NrZWQobmZzaSwgTlVMTCwgY2xwKTsKIAkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CiAJCWlmIChkZWxlZ2F0aW9uICE9IE5VTEwpIHsKLQkJCW5mc19tc3luY19pbm9kZShpbm9kZSk7CisJCQluZnNfd2JfYWxsKGlub2RlKTsKIAkJCWVyciA9IF9fbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKGlub2RlLCBkZWxlZ2F0aW9uLCAxKTsKIAkJfQogCX0KQEAgLTQ3MSw5ICs0NjMsNyBAQAogLyoKICAqIEFzeW5jaHJvbm91cyBkZWxlZ2F0aW9uIHJlY2FsbCEKICAqLwotaW50IG5mc19hc3luY19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQsCi0JCQkJICAgICAgaW50ICgqdmFsaWRhdGVfc3RhdGVpZCkoc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uLAotCQkJCQkJCSAgICAgIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkpCitpbnQgbmZzX2FzeW5jX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IG5mczRfc3RhdGVpZCAqc3RhdGVpZCkKIHsKIAlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQ7CiAJc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uOwpAQCAtNDgxLDcgKzQ3MSw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWRlbGVnYXRpb24gPSByY3VfZGVyZWZlcmVuY2UoTkZTX0koaW5vZGUpLT5kZWxlZ2F0aW9uKTsKIAotCWlmICghdmFsaWRhdGVfc3RhdGVpZChkZWxlZ2F0aW9uLCBzdGF0ZWlkKSkgeworCWlmICghY2xwLT5jbF9tdm9wcy0+dmFsaWRhdGVfc3RhdGVpZChkZWxlZ2F0aW9uLCBzdGF0ZWlkKSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RlbGVnYXRpb24uaCBiL2ZzL25mcy9kZWxlZ2F0aW9uLmgKaW5kZXggNjllN2I4MS4uMjAyNjMwNCAxMDA2NDQKLS0tIGEvZnMvbmZzL2RlbGVnYXRpb24uaAorKysgYi9mcy9uZnMvZGVsZWdhdGlvbi5oCkBAIC0zNCw5ICszNCw3IEBACiBpbnQgbmZzX2lub2RlX3NldF9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpOwogdm9pZCBuZnNfaW5vZGVfcmVjbGFpbV9kZWxlZ2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpOwogaW50IG5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCBuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkLAotCQkJCSAgICAgIGludCAoKnZhbGlkYXRlX3N0YXRlaWQpKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbiwKLQkJCQkJCQkgICAgICBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpKTsKK2ludCBuZnNfYXN5bmNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkKTsKIHZvaWQgbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uX25vcmVjbGFpbShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogc3RydWN0IGlub2RlICpuZnNfZGVsZWdhdGlvbl9maW5kX2lub2RlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGNvbnN0IHN0cnVjdCBuZnNfZmggKmZoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDgzMmU5ZTIuLjI5NTM5Y2UgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTE2NTIsMTYgKzE2NTIsNyBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiAuLi4gcHJ1bmUgY2hpbGQgZGVudHJpZXMgYW5kIHdyaXRlYmFja3MgaWYgbmVlZGVkLgotCSAqLwotCWlmIChhdG9taWNfcmVhZCgmb2xkX2RlbnRyeS0+ZF9jb3VudCkgPiAxKSB7Ci0JCWlmIChTX0lTUkVHKG9sZF9pbm9kZS0+aV9tb2RlKSkKLQkJCW5mc193Yl9hbGwob2xkX2lub2RlKTsKLQkJc2hyaW5rX2RjYWNoZV9wYXJlbnQob2xkX2RlbnRyeSk7Ci0JfQogCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihvbGRfaW5vZGUpOwotCiAJaWYgKG5ld19pbm9kZSAhPSBOVUxMKQogCQluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb24obmV3X2lub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IGFkNGNkMzEuLjA2NGE4MDkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTY5LDYgKzY5LDcgQEAKIAogCS8qIEkvTyBwYXJhbWV0ZXJzICovCiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQJKmN0eDsJCS8qIGZpbGUgb3BlbiBjb250ZXh0IGluZm8gKi8KKwlzdHJ1Y3QgbmZzX2xvY2tfY29udGV4dCAqbF9jdHg7CQkvKiBMb2NrIGNvbnRleHQgaW5mbyAqLwogCXN0cnVjdCBraW9jYiAqCQlpb2NiOwkJLyogY29udHJvbGxpbmcgaS9vIHJlcXVlc3QgKi8KIAlzdHJ1Y3QgaW5vZGUgKgkJaW5vZGU7CQkvKiB0YXJnZXQgZmlsZSBvZiBpL28gKi8KIApAQCAtMTYwLDYgKzE2MSw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmRyZXEtPnJld3JpdGVfbGlzdCk7CiAJZHJlcS0+aW9jYiA9IE5VTEw7CiAJZHJlcS0+Y3R4ID0gTlVMTDsKKwlkcmVxLT5sX2N0eCA9IE5VTEw7CiAJc3Bpbl9sb2NrX2luaXQoJmRyZXEtPmxvY2spOwogCWF0b21pY19zZXQoJmRyZXEtPmlvX2NvdW50LCAwKTsKIAlkcmVxLT5jb3VudCA9IDA7CkBAIC0xNzMsNiArMTc1LDggQEAKIHsKIAlzdHJ1Y3QgbmZzX2RpcmVjdF9yZXEgKmRyZXEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG5mc19kaXJlY3RfcmVxLCBrcmVmKTsKIAorCWlmIChkcmVxLT5sX2N0eCAhPSBOVUxMKQorCQluZnNfcHV0X2xvY2tfY29udGV4dChkcmVxLT5sX2N0eCk7CiAJaWYgKGRyZXEtPmN0eCAhPSBOVUxMKQogCQlwdXRfbmZzX29wZW5fY29udGV4dChkcmVxLT5jdHgpOwogCWttZW1fY2FjaGVfZnJlZShuZnNfZGlyZWN0X2NhY2hlcCwgZHJlcSk7CkBAIC0zMzYsNiArMzQwLDcgQEAKIAkJZGF0YS0+Y3JlZCA9IG1zZy5ycGNfY3JlZDsKIAkJZGF0YS0+YXJncy5maCA9IE5GU19GSChpbm9kZSk7CiAJCWRhdGEtPmFyZ3MuY29udGV4dCA9IGN0eDsKKwkJZGF0YS0+YXJncy5sb2NrX2NvbnRleHQgPSBkcmVxLT5sX2N0eDsKIAkJZGF0YS0+YXJncy5vZmZzZXQgPSBwb3M7CiAJCWRhdGEtPmFyZ3MucGdiYXNlID0gcGdiYXNlOwogCQlkYXRhLT5hcmdzLnBhZ2VzID0gZGF0YS0+cGFnZXZlYzsKQEAgLTQxNiwyNCArNDIxLDI4IEBACiBzdGF0aWMgc3NpemVfdCBuZnNfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7Ci0Jc3NpemVfdCByZXN1bHQgPSAwOworCXNzaXplX3QgcmVzdWx0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcTsKIAogCWRyZXEgPSBuZnNfZGlyZWN0X3JlcV9hbGxvYygpOwotCWlmICghZHJlcSkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGRyZXEgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKIAlkcmVxLT5pbm9kZSA9IGlub2RlOwogCWRyZXEtPmN0eCA9IGdldF9uZnNfb3Blbl9jb250ZXh0KG5mc19maWxlX29wZW5fY29udGV4dChpb2NiLT5raV9maWxwKSk7CisJZHJlcS0+bF9jdHggPSBuZnNfZ2V0X2xvY2tfY29udGV4dChkcmVxLT5jdHgpOworCWlmIChkcmVxLT5sX2N0eCA9PSBOVUxMKQorCQlnb3RvIG91dF9yZWxlYXNlOwogCWlmICghaXNfc3luY19raW9jYihpb2NiKSkKIAkJZHJlcS0+aW9jYiA9IGlvY2I7CiAKIAlyZXN1bHQgPSBuZnNfZGlyZWN0X3JlYWRfc2NoZWR1bGVfaW92ZWMoZHJlcSwgaW92LCBucl9zZWdzLCBwb3MpOwogCWlmICghcmVzdWx0KQogCQlyZXN1bHQgPSBuZnNfZGlyZWN0X3dhaXQoZHJlcSk7CitvdXRfcmVsZWFzZToKIAluZnNfZGlyZWN0X3JlcV9yZWxlYXNlKGRyZXEpOwotCitvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTc0LDYgKzU4Myw3IEBACiAJZGF0YS0+YXJncy5vZmZzZXQgPSAwOwogCWRhdGEtPmFyZ3MuY291bnQgPSAwOwogCWRhdGEtPmFyZ3MuY29udGV4dCA9IGRyZXEtPmN0eDsKKwlkYXRhLT5hcmdzLmxvY2tfY29udGV4dCA9IGRyZXEtPmxfY3R4OwogCWRhdGEtPnJlcy5jb3VudCA9IDA7CiAJZGF0YS0+cmVzLmZhdHRyID0gJmRhdGEtPmZhdHRyOwogCWRhdGEtPnJlcy52ZXJmID0gJmRhdGEtPnZlcmY7CkBAIC03NjEsNiArNzcxLDcgQEAKIAkJZGF0YS0+Y3JlZCA9IG1zZy5ycGNfY3JlZDsKIAkJZGF0YS0+YXJncy5maCA9IE5GU19GSChpbm9kZSk7CiAJCWRhdGEtPmFyZ3MuY29udGV4dCA9IGN0eDsKKwkJZGF0YS0+YXJncy5sb2NrX2NvbnRleHQgPSBkcmVxLT5sX2N0eDsKIAkJZGF0YS0+YXJncy5vZmZzZXQgPSBwb3M7CiAJCWRhdGEtPmFyZ3MucGdiYXNlID0gcGdiYXNlOwogCQlkYXRhLT5hcmdzLnBhZ2VzID0gZGF0YS0+cGFnZXZlYzsKQEAgLTg0NSw3ICs4NTYsNyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcywKIAkJCQlzaXplX3QgY291bnQpCiB7Ci0Jc3NpemVfdCByZXN1bHQgPSAwOworCXNzaXplX3QgcmVzdWx0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcTsKIAlzaXplX3Qgd3NpemUgPSBORlNfU0VSVkVSKGlub2RlKS0+d3NpemU7CkBAIC04NTMsNyArODY0LDcgQEAKIAogCWRyZXEgPSBuZnNfZGlyZWN0X3JlcV9hbGxvYygpOwogCWlmICghZHJlcSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0OwogCW5mc19hbGxvY19jb21taXRfZGF0YShkcmVxKTsKIAogCWlmIChkcmVxLT5jb21taXRfZGF0YSA9PSBOVUxMIHx8IGNvdW50IDwgd3NpemUpCkBAIC04NjEsMTQgKzg3MiwxOCBAQAogCiAJZHJlcS0+aW5vZGUgPSBpbm9kZTsKIAlkcmVxLT5jdHggPSBnZXRfbmZzX29wZW5fY29udGV4dChuZnNfZmlsZV9vcGVuX2NvbnRleHQoaW9jYi0+a2lfZmlscCkpOworCWRyZXEtPmxfY3R4ID0gbmZzX2dldF9sb2NrX2NvbnRleHQoZHJlcS0+Y3R4KTsKKwlpZiAoZHJlcS0+bF9jdHggIT0gTlVMTCkKKwkJZ290byBvdXRfcmVsZWFzZTsKIAlpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpCiAJCWRyZXEtPmlvY2IgPSBpb2NiOwogCiAJcmVzdWx0ID0gbmZzX2RpcmVjdF93cml0ZV9zY2hlZHVsZV9pb3ZlYyhkcmVxLCBpb3YsIG5yX3NlZ3MsIHBvcywgc3luYyk7CiAJaWYgKCFyZXN1bHQpCiAJCXJlc3VsdCA9IG5mc19kaXJlY3Rfd2FpdChkcmVxKTsKK291dF9yZWxlYXNlOgogCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7Ci0KK291dDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCBmMDM2MTUzLi4yZDE0MWE3IDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTIwMywzNyArMjAzLDExIEBACiB9CiAKIC8qCi0gKiBIZWxwZXIgZm9yIG5mc19maWxlX2ZsdXNoKCkgYW5kIG5mc19maWxlX2ZzeW5jKCkKLSAqCi0gKiBOb3RpY2UgdGhhdCBpdCBjbGVhcnMgdGhlIE5GU19DT05URVhUX0VSUk9SX1dSSVRFIGJlZm9yZSBzeW5jaGluZyB0bwotICogZGlzaywgYnV0IGl0IHJldHJpZXZlcyBhbmQgY2xlYXJzIGN0eC0+ZXJyb3IgYWZ0ZXIgc3luY2hpbmcsIGRlc3BpdGUKLSAqIHRoZSB0d28gYmVpbmcgc2V0IGF0IHRoZSBzYW1lIHRpbWUgaW4gbmZzX2NvbnRleHRfc2V0X3dyaXRlX2Vycm9yKCkuCi0gKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBpcyB1c2VkIHRvIG5vdGlmeSB0aGUgX25leHRfIGNhbGwgdG8KLSAqIG5mc19maWxlX3dyaXRlKCkgdGhhdCBhIHdyaXRlIGVycm9yIG9jY3VyZWQsIGFuZCBoZW5jZSBjYXVzZSBpdCB0bwotICogZmFsbCBiYWNrIHRvIGRvaW5nIGEgc3luY2hyb25vdXMgd3JpdGUuCi0gKi8KLXN0YXRpYyBpbnQgbmZzX2RvX2ZzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW50IGhhdmVfZXJyb3IsIHN0YXR1czsKLQlpbnQgcmV0ID0gMDsKLQotCWhhdmVfZXJyb3IgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0NPTlRFWFRfRVJST1JfV1JJVEUsICZjdHgtPmZsYWdzKTsKLQlzdGF0dXMgPSBuZnNfd2JfYWxsKGlub2RlKTsKLQloYXZlX2Vycm9yIHw9IHRlc3RfYml0KE5GU19DT05URVhUX0VSUk9SX1dSSVRFLCAmY3R4LT5mbGFncyk7Ci0JaWYgKGhhdmVfZXJyb3IpCi0JCXJldCA9IHhjaGcoJmN0eC0+ZXJyb3IsIDApOwotCWlmICghcmV0KQotCQlyZXQgPSBzdGF0dXM7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIEZsdXNoIGFsbCBkaXJ0eSBwYWdlcywgYW5kIGNoZWNrIGZvciB3cml0ZSBlcnJvcnMuCiAgKi8KIHN0YXRpYyBpbnQKIG5mc19maWxlX2ZsdXNoKHN0cnVjdCBmaWxlICpmaWxlLCBmbF9vd25lcl90IGlkKQogewotCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPSBuZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlsZSk7CiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCkBAIC0yNDYsNyArMjIwLDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBGbHVzaCB3cml0ZXMgdG8gdGhlIHNlcnZlciBhbmQgcmV0dXJuIGFueSBlcnJvcnMgKi8KLQlyZXR1cm4gbmZzX2RvX2ZzeW5jKGN0eCwgaW5vZGUpOworCXJldHVybiB2ZnNfZnN5bmMoZmlsZSwgMCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMjEsNiArMjk1LDEzIEBACiAgKiBGbHVzaCBhbnkgZGlydHkgcGFnZXMgZm9yIHRoaXMgcHJvY2VzcywgYW5kIGNoZWNrIGZvciB3cml0ZSBlcnJvcnMuCiAgKiBUaGUgcmV0dXJuIHN0YXR1cyBmcm9tIHRoaXMgY2FsbCBwcm92aWRlcyBhIHJlbGlhYmxlIGluZGljYXRpb24gb2YKICAqIHdoZXRoZXIgYW55IHdyaXRlIGVycm9ycyBvY2N1cnJlZCBmb3IgdGhpcyBwcm9jZXNzLgorICoKKyAqIE5vdGljZSB0aGF0IGl0IGNsZWFycyB0aGUgTkZTX0NPTlRFWFRfRVJST1JfV1JJVEUgYmVmb3JlIHN5bmNoaW5nIHRvCisgKiBkaXNrLCBidXQgaXQgcmV0cmlldmVzIGFuZCBjbGVhcnMgY3R4LT5lcnJvciBhZnRlciBzeW5jaGluZywgZGVzcGl0ZQorICogdGhlIHR3byBiZWluZyBzZXQgYXQgdGhlIHNhbWUgdGltZSBpbiBuZnNfY29udGV4dF9zZXRfd3JpdGVfZXJyb3IoKS4KKyAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgZm9ybWVyIGlzIHVzZWQgdG8gbm90aWZ5IHRoZSBfbmV4dF8gY2FsbCB0bworICogbmZzX2ZpbGVfd3JpdGUoKSB0aGF0IGEgd3JpdGUgZXJyb3Igb2NjdXJlZCwgYW5kIGhlbmNlIGNhdXNlIGl0IHRvCisgKiBmYWxsIGJhY2sgdG8gZG9pbmcgYSBzeW5jaHJvbm91cyB3cml0ZS4KICAqLwogc3RhdGljIGludAogbmZzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYykKQEAgLTMyOCwxMyArMzA5LDIzIEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGhhdmVfZXJyb3IsIHN0YXR1czsKKwlpbnQgcmV0ID0gMDsKKwogCiAJZHByaW50aygiTkZTOiBmc3luYyBmaWxlKCVzLyVzKSBkYXRhc3luYyAlZFxuIiwKIAkJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJZGF0YXN5bmMpOwogCiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1ZGU0ZTWU5DKTsKLQlyZXR1cm4gbmZzX2RvX2ZzeW5jKGN0eCwgaW5vZGUpOworCWhhdmVfZXJyb3IgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0NPTlRFWFRfRVJST1JfV1JJVEUsICZjdHgtPmZsYWdzKTsKKwlzdGF0dXMgPSBuZnNfY29tbWl0X2lub2RlKGlub2RlLCBGTFVTSF9TWU5DKTsKKwloYXZlX2Vycm9yIHw9IHRlc3RfYml0KE5GU19DT05URVhUX0VSUk9SX1dSSVRFLCAmY3R4LT5mbGFncyk7CisJaWYgKGhhdmVfZXJyb3IpCisJCXJldCA9IHhjaGcoJmN0eC0+ZXJyb3IsIDApOworCWlmICghcmV0KQorCQlyZXQgPSBzdGF0dXM7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTY0OCw3ICs2MzksNyBAQAogCiAJLyogUmV0dXJuIGVycm9yIHZhbHVlcyBmb3IgT19EU1lOQyBhbmQgSVNfU1lOQygpICovCiAJaWYgKHJlc3VsdCA+PSAwICYmIG5mc19uZWVkX3N5bmNfd3JpdGUoaW9jYi0+a2lfZmlscCwgaW5vZGUpKSB7Ci0JCWludCBlcnIgPSBuZnNfZG9fZnN5bmMobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGlvY2ItPmtpX2ZpbHApLCBpbm9kZSk7CisJCWludCBlcnIgPSB2ZnNfZnN5bmMoaW9jYi0+a2lfZmlscCwgMCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmVzdWx0ID0gZXJyOwogCX0KQEAgLTY4NCw3ICs2NzUsNyBAQAogCQl3cml0dGVuID0gcmV0OwogCiAJaWYgKHJldCA+PSAwICYmIG5mc19uZWVkX3N5bmNfd3JpdGUoZmlscCwgaW5vZGUpKSB7Ci0JCWludCBlcnIgPSBuZnNfZG9fZnN5bmMobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbHApLCBpbm9kZSk7CisJCWludCBlcnIgPSB2ZnNfZnN5bmMoZmlscCwgMCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMDk5YjM1MS4uN2QyZDZjNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAlyZXR1cm4gaW5vOwogfQogCi12b2lkIG5mc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgbmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIHNob3VsZCBuZXZlciBoYXBwZW4uLi4KQEAgLTExMCw2ICsxMTAsMTMgQEAKIAluZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShpbm9kZSk7CiB9CiAKK3ZvaWQgbmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCW5mc19jbGVhcl9pbm9kZShpbm9kZSk7Cit9CisKIC8qKgogICogbmZzX3N5bmNfbWFwcGluZyAtIGhlbHBlciB0byBmbHVzaCBhbGwgbW1hcHBlZCBkaXJ0eSBkYXRhIHRvIGRpc2sKICAqLwpAQCAtNDEzLDEwICs0MjAsOCBAQAogCQlyZXR1cm4gMDsKIAogCS8qIFdyaXRlIGFsbCBkaXJ0eSBkYXRhICovCi0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKIAkJbmZzX3diX2FsbChpbm9kZSk7Ci0JfQogCiAJZmF0dHIgPSBuZnNfYWxsb2NfZmF0dHIoKTsKIAlpZiAoZmF0dHIgPT0gTlVMTCkKQEAgLTUzMCw2ICs1MzUsNjggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBuZnNfaW5pdF9sb2NrX2NvbnRleHQoc3RydWN0IG5mc19sb2NrX2NvbnRleHQgKmxfY3R4KQoreworCWF0b21pY19zZXQoJmxfY3R4LT5jb3VudCwgMSk7CisJbF9jdHgtPmxvY2tvd25lciA9IGN1cnJlbnQtPmZpbGVzOworCWxfY3R4LT5waWQgPSBjdXJyZW50LT50Z2lkOworCUlOSVRfTElTVF9IRUFEKCZsX2N0eC0+bGlzdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZzX2xvY2tfY29udGV4dCAqX19uZnNfZmluZF9sb2NrX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1Y3QgbmZzX2xvY2tfY29udGV4dCAqcG9zOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZjdHgtPmxvY2tfY29udGV4dC5saXN0LCBsaXN0KSB7CisJCWlmIChwb3MtPmxvY2tvd25lciAhPSBjdXJyZW50LT5maWxlcykKKwkJCWNvbnRpbnVlOworCQlpZiAocG9zLT5waWQgIT0gY3VycmVudC0+dGdpZCkKKwkJCWNvbnRpbnVlOworCQlhdG9taWNfaW5jKCZwb3MtPmNvdW50KTsKKwkJcmV0dXJuIHBvczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpuZnNfZ2V0X2xvY2tfY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpyZXMsICpuZXcgPSBOVUxMOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjdHgtPnBhdGguZGVudHJ5LT5kX2lub2RlOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlyZXMgPSBfX25mc19maW5kX2xvY2tfY29udGV4dChjdHgpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ldyA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCW5mc19pbml0X2xvY2tfY29udGV4dChuZXcpOworCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlyZXMgPSBfX25mc19maW5kX2xvY2tfY29udGV4dChjdHgpOworCQlpZiAocmVzID09IE5VTEwpIHsKKwkJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgJmN0eC0+bG9ja19jb250ZXh0Lmxpc3QpOworCQkJbmV3LT5vcGVuX2NvbnRleHQgPSBjdHg7CisJCQlyZXMgPSBuZXc7CisJCQluZXcgPSBOVUxMOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlrZnJlZShuZXcpOworCXJldHVybiByZXM7Cit9CisKK3ZvaWQgbmZzX3B1dF9sb2NrX2NvbnRleHQoc3RydWN0IG5mc19sb2NrX2NvbnRleHQgKmxfY3R4KQoreworCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPSBsX2N0eC0+b3Blbl9jb250ZXh0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjdHgtPnBhdGguZGVudHJ5LT5kX2lub2RlOworCisJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZsX2N0eC0+Y291bnQsICZpbm9kZS0+aV9sb2NrKSkKKwkJcmV0dXJuOworCWxpc3RfZGVsKCZsX2N0eC0+bGlzdCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCWtmcmVlKGxfY3R4KTsKK30KKwogLyoqCiAgKiBuZnNfY2xvc2VfY29udGV4dCAtIENvbW1vbiBjbG9zZV9jb250ZXh0KCkgcm91dGluZSBORlN2Mi92MwogICogQGN0eDogcG9pbnRlciB0byBjb250ZXh0CkBAIC01NjYsMTEgKzYzMywxMSBAQAogCQlwYXRoX2dldCgmY3R4LT5wYXRoKTsKIAkJY3R4LT5jcmVkID0gZ2V0X3JwY2NyZWQoY3JlZCk7CiAJCWN0eC0+c3RhdGUgPSBOVUxMOwotCQljdHgtPmxvY2tvd25lciA9IGN1cnJlbnQtPmZpbGVzOwogCQljdHgtPmZsYWdzID0gMDsKIAkJY3R4LT5lcnJvciA9IDA7CiAJCWN0eC0+ZGlyX2Nvb2tpZSA9IDA7Ci0JCWF0b21pY19zZXQoJmN0eC0+Y291bnQsIDEpOworCQluZnNfaW5pdF9sb2NrX2NvbnRleHQoJmN0eC0+bG9ja19jb250ZXh0KTsKKwkJY3R4LT5sb2NrX2NvbnRleHQub3Blbl9jb250ZXh0ID0gY3R4OwogCX0KIAlyZXR1cm4gY3R4OwogfQpAQCAtNTc4LDcgKzY0NSw3IEBACiBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqZ2V0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCkKIHsKIAlpZiAoY3R4ICE9IE5VTEwpCi0JCWF0b21pY19pbmMoJmN0eC0+Y291bnQpOworCQlhdG9taWNfaW5jKCZjdHgtPmxvY2tfY29udGV4dC5jb3VudCk7CiAJcmV0dXJuIGN0eDsKIH0KIApAQCAtNTg2LDcgKzY1Myw3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGN0eC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CiAKLQlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmN0eC0+Y291bnQsICZpbm9kZS0+aV9sb2NrKSkKKwlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmN0eC0+bG9ja19jb250ZXh0LmNvdW50LCAmaW5vZGUtPmlfbG9jaykpCiAJCXJldHVybjsKIAlsaXN0X2RlbCgmY3R4LT5saXN0KTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CkBAIC0xMzM4LDggKzE0MDUsMTAgQEAKICAqIHRvIG9wZW4oKSBjYWxscyB0aGF0IHBhc3NlZCBuZnNfYXRvbWljX2xvb2t1cCwgYnV0IGZhaWxlZCB0byBjYWxsCiAgKiBuZnNfb3BlbigpLgogICovCi12b2lkIG5mczRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3ZvaWQgbmZzNF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAkvKiBJZiB3ZSBhcmUgaG9sZGluZyBhIGRlbGVnYXRpb24sIHJldHVybiBpdCEgKi8KIAluZnNfaW5vZGVfcmV0dXJuX2RlbGVnYXRpb25fbm9yZWNsYWltKGlub2RlKTsKIAkvKiBGaXJzdCBjYWxsIHN0YW5kYXJkIE5GUyBjbGVhcl9pbm9kZSgpIGNvZGUgKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5oIGIvZnMvbmZzL2ludGVybmFsLmgKaW5kZXggZTcwZjQ0Yi4uYzk2MWJjOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ludGVybmFsLmgKKysrIGIvZnMvbmZzL2ludGVybmFsLmgKQEAgLTIxMyw5ICsyMTMsOSBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqbmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIHZvaWQgbmZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBuZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKLWV4dGVybiB2b2lkIG5mc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogI2lmZGVmIENPTkZJR19ORlNfVjQKLWV4dGVybiB2b2lkIG5mczRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgbmZzNF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiAjZW5kaWYKIHZvaWQgbmZzX3phcF9hY2xfY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IG5mc193YWl0X2JpdF9raWxsYWJsZSh2b2lkICp3b3JkKTsKQEAgLTM3MCwxMCArMzcwLDkgQEAKICAqIEhlbHBlciBmb3IgcmVzdGFydGluZyBSUEMgY2FsbHMgaW4gdGhlIHBvc3NpYmxlIHByZXNlbmNlIG9mIE5GU3Y0LjEKICAqIHNlc3Npb25zLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZzX3Jlc3RhcnRfcnBjKHN0cnVjdCBycGNfdGFzayAqdGFzaywgY29uc3Qgc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3N0YXRpYyBpbmxpbmUgaW50IG5mc19yZXN0YXJ0X3JwYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkKLQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOwotCWVsc2UKLQkJcnBjX3Jlc3RhcnRfY2FsbCh0YXNrKTsKKwkJcmV0dXJuIHJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKKwlyZXR1cm4gcnBjX3Jlc3RhcnRfY2FsbCh0YXNrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMyeGRyLmMgYi9mcy9uZnMvbmZzMnhkci5jCmluZGV4IDgxY2YxNDIuLmRiODg0NmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMyeGRyLmMKKysrIGIvZnMvbmZzL25mczJ4ZHIuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiBzdGF0aWMgaW50CiBuZnNfeGRyX3JlYWRhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV90YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2F1dGg7CisJc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV9jcmVkLT5jcl9hdXRoOwogCXVuc2lnbmVkIGludCByZXBsZW47CiAJdTMyIG9mZnNldCA9ICh1MzIpYXJncy0+b2Zmc2V0OwogCXUzMiBjb3VudCA9IGFyZ3MtPmNvdW50OwpAQCAtMzkzLDggKzM5Myw3IEBACiBzdGF0aWMgaW50CiBuZnNfeGRyX3JlYWRkaXJhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVhZGRpcmFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHJwY190YXNrCSp0YXNrID0gcmVxLT5ycV90YXNrOwotCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZC0+Y3JfYXV0aDsKKwlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7CiAJdW5zaWduZWQgaW50IHJlcGxlbjsKIAl1MzIgY291bnQgPSBhcmdzLT5jb3VudDsKIApAQCAtNTc1LDcgKzU3NCw3IEBACiBzdGF0aWMgaW50CiBuZnNfeGRyX3JlYWRsaW5rYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlYWRsaW5rYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX3Rhc2stPnRrX21zZy5ycGNfY3JlZC0+Y3JfYXV0aDsKKwlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7CiAJdW5zaWduZWQgaW50IHJlcGxlbjsKIAogCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczN4ZHIuYyBiL2ZzL25mcy9uZnMzeGRyLmMKaW5kZXggNzVkY2ZjNy4uOTc2OTcwNCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczN4ZHIuYworKysgYi9mcy9uZnMvbmZzM3hkci5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIHN0YXRpYyBpbnQKIG5mczNfeGRyX3JlYWRhcmdzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBfX2JlMzIgKnAsIHN0cnVjdCBuZnNfcmVhZGFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV90YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2F1dGg7CisJc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV9jcmVkLT5jcl9hdXRoOwogCXVuc2lnbmVkIGludCByZXBsZW47CiAJdTMyIGNvdW50ID0gYXJncy0+Y291bnQ7CiAKQEAgLTQ3MSw3ICs0NzEsNyBAQAogc3RhdGljIGludAogbmZzM194ZHJfcmVhZGRpcmFyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczNfcmVhZGRpcmFyZ3MgKmFyZ3MpCiB7Ci0Jc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV90YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2F1dGg7CisJc3RydWN0IHJwY19hdXRoCSphdXRoID0gcmVxLT5ycV9jcmVkLT5jcl9hdXRoOwogCXVuc2lnbmVkIGludCByZXBsZW47CiAJdTMyIGNvdW50ID0gYXJncy0+Y291bnQ7CiAKQEAgLTY3NSw3ICs2NzUsNyBAQAogbmZzM194ZHJfZ2V0YWNsYXJncyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLAogCQkgICAgc3RydWN0IG5mczNfZ2V0YWNsYXJncyAqYXJncykKIHsKLQlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX3Rhc2stPnRrX21zZy5ycGNfY3JlZC0+Y3JfYXV0aDsKKwlzdHJ1Y3QgcnBjX2F1dGgJKmF1dGggPSByZXEtPnJxX2NyZWQtPmNyX2F1dGg7CiAJdW5zaWduZWQgaW50IHJlcGxlbjsKIAogCXAgPSB4ZHJfZW5jb2RlX2ZoYW5kbGUocCwgYXJncy0+ZmgpOwpAQCAtODAyLDcgKzgwMiw3IEBACiBzdGF0aWMgaW50CiBuZnMzX3hkcl9yZWFkbGlua2FyZ3Moc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgc3RydWN0IG5mczNfcmVhZGxpbmthcmdzICphcmdzKQogewotCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHJlcS0+cnFfdGFzay0+dGtfbXNnLnJwY19jcmVkLT5jcl9hdXRoOworCXN0cnVjdCBycGNfYXV0aAkqYXV0aCA9IHJlcS0+cnFfY3JlZC0+Y3JfYXV0aDsKIAl1bnNpZ25lZCBpbnQgcmVwbGVuOwogCiAJcCA9IHhkcl9lbmNvZGVfZmhhbmRsZShwLCBhcmdzLT5maCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCBjNTM4YzYxLi4zMTFlMTVjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTQ1LDEwICs0NSwyOSBAQAogCU5GUzRDTE5UX1JFQ0xBSU1fTk9HUkFDRSwKIAlORlM0Q0xOVF9ERUxFR1JFVFVSTiwKIAlORlM0Q0xOVF9TRVNTSU9OX1JFU0VULAotCU5GUzRDTE5UX1NFU1NJT05fRFJBSU5JTkcsCiAJTkZTNENMTlRfUkVDQUxMX1NMT1QsCiB9OwogCitlbnVtIG5mczRfc2Vzc2lvbl9zdGF0ZSB7CisJTkZTNF9TRVNTSU9OX0lOSVRJTkcsCisJTkZTNF9TRVNTSU9OX0RSQUlOSU5HLAorfTsKKworc3RydWN0IG5mczRfbWlub3JfdmVyc2lvbl9vcHMgeworCXUzMgltaW5vcl92ZXJzaW9uOworCisJaW50CSgqY2FsbF9zeW5jKShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJc3RydWN0IHJwY19tZXNzYWdlICptc2csCisJCQlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLAorCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCisJCQlpbnQgY2FjaGVfcmVwbHkpOworCWludAkoKnZhbGlkYXRlX3N0YXRlaWQpKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqLAorCQkJY29uc3QgbmZzNF9zdGF0ZWlkICopOworCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqcmVib290X3JlY292ZXJ5X29wczsKKwljb25zdCBzdHJ1Y3QgbmZzNF9zdGF0ZV9yZWNvdmVyeV9vcHMgKm5vZ3JhY2VfcmVjb3Zlcnlfb3BzOworCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyAqc3RhdGVfcmVuZXdhbF9vcHM7Cit9OworCiAvKgogICogc3RydWN0IHJwY19zZXF1ZW5jZSBlbnN1cmVzIHRoYXQgUlBDIGNhbGxzIGFyZSBzZW50IGluIHRoZSBleGFjdAogICogb3JkZXIgdGhhdCB0aGV5IGFwcGVhciBvbiB0aGUgbGlzdC4KQEAgLTg5LDcgKzEwOCw2IEBACiAgKi8KIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyIHsKIAlzdHJ1Y3QgbmZzX3VuaXF1ZV9pZCBzb19vd25lcl9pZDsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAgICAqc29fY2xpZW50OwogCXN0cnVjdCBuZnNfc2VydmVyICAgICpzb19zZXJ2ZXI7CiAJc3RydWN0IHJiX25vZGUJICAgICBzb19jbGllbnRfbm9kZTsKIApAQCAtOTksNyArMTE3LDYgQEAKIAlhdG9taWNfdAkgICAgIHNvX2NvdW50OwogCXVuc2lnbmVkIGxvbmcJICAgICBzb19mbGFnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICBzb19zdGF0ZXM7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgc29fZGVsZWdhdGlvbnM7CiAJc3RydWN0IG5mc19zZXFpZF9jb3VudGVyIHNvX3NlcWlkOwogCXN0cnVjdCBycGNfc2VxdWVuY2UgIHNvX3NlcXVlbmNlOwogfTsKQEAgLTEyNSwxMCArMTQyLDIwIEBACiAgKiBMT0NLOiBvbmUgbmZzNF9zdGF0ZSAoTE9DSykgdG8gaG9sZCB0aGUgbG9jayBzdGF0ZWlkIG5mczRfc3RhdGUoT1BFTikKICAqLwogCitzdHJ1Y3QgbmZzNF9sb2NrX293bmVyIHsKKwl1bnNpZ25lZCBpbnQgbG9fdHlwZTsKKyNkZWZpbmUgTkZTNF9BTllfTE9DS19UWVBFCSgwVSkKKyNkZWZpbmUgTkZTNF9GTE9DS19MT0NLX1RZUEUJKDFVIDw8IDApCisjZGVmaW5lIE5GUzRfUE9TSVhfTE9DS19UWVBFCSgxVSA8PCAxKQorCXVuaW9uIHsKKwkJZmxfb3duZXJfdCBwb3NpeF9vd25lcjsKKwkJcGlkX3QgZmxvY2tfb3duZXI7CisJfSBsb191OworfTsKKwogc3RydWN0IG5mczRfbG9ja19zdGF0ZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsc19sb2NrczsJLyogT3RoZXIgbG9jayBzdGF0ZWlkcyAqLwogCXN0cnVjdCBuZnM0X3N0YXRlICoJbHNfc3RhdGU7CS8qIFBvaW50ZXIgdG8gb3BlbiBzdGF0ZSAqLwotCWZsX293bmVyX3QJCWxzX293bmVyOwkvKiBQT1NJWCBsb2NrIG93bmVyICovCiAjZGVmaW5lIE5GU19MT0NLX0lOSVRJQUxJWkVEIDEKIAlpbnQJCQlsc19mbGFnczsKIAlzdHJ1Y3QgbmZzX3NlcWlkX2NvdW50ZXIJbHNfc2VxaWQ7CkBAIC0xMzYsNiArMTYzLDcgQEAKIAlzdHJ1Y3QgbmZzX3VuaXF1ZV9pZAlsc19pZDsKIAluZnM0X3N0YXRlaWQJCWxzX3N0YXRlaWQ7CiAJYXRvbWljX3QJCWxzX2NvdW50OworCXN0cnVjdCBuZnM0X2xvY2tfb3duZXIJbHNfb3duZXI7CiB9OwogCiAvKiBiaXRzIGZvciBuZnM0X3N0YXRlLT5mbGFncyAqLwpAQCAtMjE5LDExICsyNDcsMTUgQEAKIGV4dGVybiBpbnQgbmZzNF9zZXJ2ZXJfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBuZnNfZmggKmZoYW5kbGUpOwogZXh0ZXJuIGludCBuZnM0X3Byb2NfZnNfbG9jYXRpb25zKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSwKIAkJc3RydWN0IG5mczRfZnNfbG9jYXRpb25zICpmc19sb2NhdGlvbnMsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIG5mczRfcmVsZWFzZV9sb2Nrb3duZXIoY29uc3Qgc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqKTsKIAotZXh0ZXJuIHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqbmZzNF9yZWJvb3RfcmVjb3Zlcnlfb3BzW107Ci1leHRlcm4gc3RydWN0IG5mczRfc3RhdGVfcmVjb3Zlcnlfb3BzICpuZnM0X25vZ3JhY2VfcmVjb3Zlcnlfb3BzW107CiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCi1leHRlcm4gaW50IG5mczRfc2V0dXBfc2VxdWVuY2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfc2Vzc2lvbiAqbmZzNF9nZXRfc2Vzc2lvbihjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQoreworCXJldHVybiBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nlc3Npb247Cit9CisKK2V4dGVybiBpbnQgbmZzNF9zZXR1cF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAogCQlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKIAkJaW50IGNhY2hlX3JlcGx5LCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogZXh0ZXJuIHZvaWQgbmZzNF9kZXN0cm95X3Nlc3Npb24oc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbik7CkBAIC0yMzQsNyArMjY2LDEyIEBACiBleHRlcm4gaW50IG5mczRfcHJvY19nZXRfbGVhc2VfdGltZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQlzdHJ1Y3QgbmZzX2ZzaW5mbyAqZnNpbmZvKTsKICNlbHNlIC8qIENPTkZJR19ORlNfdjRfMSAqLwotc3RhdGljIGlubGluZSBpbnQgbmZzNF9zZXR1cF9zZXF1ZW5jZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9zZXNzaW9uICpuZnM0X2dldF9zZXNzaW9uKGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mczRfc2V0dXBfc2VxdWVuY2UoY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKIAkJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyAqYXJncywgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCiAJCWludCBjYWNoZV9yZXBseSwgc3RydWN0IHJwY190YXNrICp0YXNrKQogewpAQCAtMjQ3LDcgKzI4NCw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKLWV4dGVybiBzdHJ1Y3QgbmZzNF9zdGF0ZV9tYWludGVuYW5jZV9vcHMgKm5mczRfc3RhdGVfcmVuZXdhbF9vcHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmZzNF9taW5vcl92ZXJzaW9uX29wcyAqbmZzX3Y0X21pbm9yX29wc1tdOwogCiBleHRlcm4gY29uc3QgdTMyIG5mczRfZmF0dHJfYml0bWFwWzJdOwogZXh0ZXJuIGNvbnN0IHUzMiBuZnM0X3N0YXRmc19iaXRtYXBbMl07CkBAIC0yODQsNyArMzIxLDcgQEAKIGV4dGVybiB2b2lkIG5mczQxX2hhbmRsZV9yZWNhbGxfc2xvdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKIGV4dGVybiB2b2lkIG5mczRfcHV0X2xvY2tfc3RhdGUoc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwKTsKIGV4dGVybiBpbnQgbmZzNF9zZXRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLWV4dGVybiB2b2lkIG5mczRfY29weV9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBmbF9vd25lcl90KTsKK2V4dGVybiB2b2lkIG5mczRfY29weV9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBmbF9vd25lcl90LCBwaWRfdCk7CiAKIGV4dGVybiBzdHJ1Y3QgbmZzX3NlcWlkICpuZnNfYWxsb2Nfc2VxaWQoc3RydWN0IG5mc19zZXFpZF9jb3VudGVyICpjb3VudGVyLCBnZnBfdCBnZnBfbWFzayk7CiBleHRlcm4gaW50IG5mc193YWl0X29uX3NlcXVlbmNlKHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkLCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA3MDAxNWRkLi43ZmZiYjk4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMzAzLDE1ICszMDMsMTkgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCByZW5ld19sZWFzZShjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCkKK3N0YXRpYyB2b2lkIGRvX3JlbmV3X2xlYXNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzZXJ2ZXItPm5mc19jbGllbnQ7CiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCWlmICh0aW1lX2JlZm9yZShjbHAtPmNsX2xhc3RfcmVuZXdhbCx0aW1lc3RhbXApKQogCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IHRpbWVzdGFtcDsKIAlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgcmVuZXdfbGVhc2UoY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXApCit7CisJZG9fcmVuZXdfbGVhc2Uoc2VydmVyLT5uZnNfY2xpZW50LCB0aW1lc3RhbXApOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAKIC8qCkBAIC0zNTYsNyArMzYwLDcgQEAKIHsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2s7CiAKLQlpZiAoIXRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fRFJBSU5JTkcsICZzZXMtPmNscC0+Y2xfc3RhdGUpKSB7CisJaWYgKCF0ZXN0X2JpdChORlM0X1NFU1NJT05fRFJBSU5JTkcsICZzZXMtPnNlc3Npb25fc3RhdGUpKSB7CiAJCXRhc2sgPSBycGNfd2FrZV91cF9uZXh0KCZzZXMtPmZjX3Nsb3RfdGFibGUuc2xvdF90Ymxfd2FpdHEpOwogCQlpZiAodGFzaykKIAkJCXJwY190YXNrX3NldF9wcmlvcml0eSh0YXNrLCBSUENfUFJJT1JJVFlfUFJJVklMRUdFRCk7CkBAIC0zNzAsMTIgKzM3NCwxMSBAQAogCWNvbXBsZXRlKCZzZXMtPmNvbXBsZXRlKTsKIH0KIAotc3RhdGljIHZvaWQgbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCQkgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKK3N0YXRpYyB2b2lkIG5mczQxX3NlcXVlbmNlX2ZyZWVfc2xvdChzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKIHsKIAlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0Ymw7CiAKLQl0YmwgPSAmY2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlOworCXRibCA9ICZyZXMtPnNyX3Nlc3Npb24tPmZjX3Nsb3RfdGFibGU7CiAJaWYgKHJlcy0+c3Jfc2xvdGlkID09IE5GUzRfTUFYX1NMT1RfVEFCTEUpIHsKIAkJLyoganVzdCB3YWtlIHVwIHRoZSBuZXh0IGd1eSB3YWl0aW5nIHNpbmNlCiAJCSAqIHdlIG1heSBoYXZlIG5vdCBjb25zdW1lZCBhIHNsb3QgYWZ0ZXIgYWxsICovCkBAIC0zODUsMTggKzM4OCwxNyBAQAogCiAJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCW5mczRfZnJlZV9zbG90KHRibCwgcmVzLT5zcl9zbG90aWQpOwotCW5mczQxX2NoZWNrX2RyYWluX3Nlc3Npb25fY29tcGxldGUoY2xwLT5jbF9zZXNzaW9uKTsKKwluZnM0MV9jaGVja19kcmFpbl9zZXNzaW9uX2NvbXBsZXRlKHJlcy0+c3Jfc2Vzc2lvbik7CiAJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAJcmVzLT5zcl9zbG90aWQgPSBORlM0X01BWF9TTE9UX1RBQkxFOwogfQogCi1zdGF0aWMgdm9pZCBuZnM0MV9zZXF1ZW5jZV9kb25lKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCi0JCQkJaW50IHJwY19zdGF0dXMpCitzdGF0aWMgaW50IG5mczQxX3NlcXVlbmNlX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIAlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0Ymw7CiAJc3RydWN0IG5mczRfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOwogCiAJLyoKIAkgKiBzcl9zdGF0dXMgcmVtYWlucyAxIGlmIGFuIFJQQyBsZXZlbCBlcnJvciBvY2N1cnJlZC4gVGhlIHNlcnZlcgpAQCAtNDExLDI1ICs0MTMsNTEgQEAKIAlpZiAocmVzLT5zcl9zbG90aWQgPT0gTkZTNF9NQVhfU0xPVF9UQUJMRSkKIAkJZ290byBvdXQ7CiAKKwl0YmwgPSAmcmVzLT5zcl9zZXNzaW9uLT5mY19zbG90X3RhYmxlOworCXNsb3QgPSB0YmwtPnNsb3RzICsgcmVzLT5zcl9zbG90aWQ7CisKIAkvKiBDaGVjayB0aGUgU0VRVUVOQ0Ugb3BlcmF0aW9uIHN0YXR1cyAqLwotCWlmIChyZXMtPnNyX3N0YXR1cyA9PSAwKSB7Ci0JCXRibCA9ICZjbHAtPmNsX3Nlc3Npb24tPmZjX3Nsb3RfdGFibGU7Ci0JCXNsb3QgPSB0YmwtPnNsb3RzICsgcmVzLT5zcl9zbG90aWQ7CisJc3dpdGNoIChyZXMtPnNyX3N0YXR1cykgeworCWNhc2UgMDoKIAkJLyogVXBkYXRlIHRoZSBzbG90J3Mgc2VxdWVuY2UgYW5kIGNsaWVudGlkIGxlYXNlIHRpbWVyICovCiAJCSsrc2xvdC0+c2VxX25yOwogCQl0aW1lc3RhbXAgPSByZXMtPnNyX3JlbmV3YWxfdGltZTsKLQkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwotCQlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsIHRpbWVzdGFtcCkpCi0JCQljbHAtPmNsX2xhc3RfcmVuZXdhbCA9IHRpbWVzdGFtcDsKLQkJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJCWNscCA9IHJlcy0+c3Jfc2Vzc2lvbi0+Y2xwOworCQlkb19yZW5ld19sZWFzZShjbHAsIHRpbWVzdGFtcCk7CiAJCS8qIENoZWNrIHNlcXVlbmNlIGZsYWdzICovCiAJCWlmIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxKQogCQkJbmZzNDFfaGFuZGxlX3NlcXVlbmNlX2ZsYWdfZXJyb3JzKGNscCwgcmVzLT5zcl9zdGF0dXNfZmxhZ3MpOworCQlicmVhazsKKwljYXNlIC1ORlM0RVJSX0RFTEFZOgorCQkvKiBUaGUgc2VydmVyIGRldGVjdGVkIGEgcmVzZW5kIG9mIHRoZSBSUEMgY2FsbCBhbmQKKwkJICogcmV0dXJuZWQgTkZTNEVSUl9ERUxBWSBhcyBwZXIgU2VjdGlvbiAyLjEwLjYuMgorCQkgKiBvZiBSRkM1NjYxLgorCQkgKi8KKwkJZHByaW50aygiJXM6IHNsb3Q9JWQgc2VxPSVkOiBPcGVyYXRpb24gaW4gcHJvZ3Jlc3NcbiIsCisJCQkJX19mdW5jX18sIHJlcy0+c3Jfc2xvdGlkLCBzbG90LT5zZXFfbnIpOworCQlnb3RvIG91dF9yZXRyeTsKKwlkZWZhdWx0OgorCQkvKiBKdXN0IHVwZGF0ZSB0aGUgc2xvdCBzZXF1ZW5jZSBuby4gKi8KKwkJKytzbG90LT5zZXFfbnI7CiAJfQogb3V0OgogCS8qIFRoZSBzZXNzaW9uIG1heSBiZSByZXNldCBieSBvbmUgb2YgdGhlIGVycm9yIGhhbmRsZXJzLiAqLwogCWRwcmludGsoIiVzOiBFcnJvciAlZCBmcmVlIHRoZSBzbG90IFxuIiwgX19mdW5jX18sIHJlcy0+c3Jfc3RhdHVzKTsKLQluZnM0MV9zZXF1ZW5jZV9mcmVlX3Nsb3QoY2xwLCByZXMpOworCW5mczQxX3NlcXVlbmNlX2ZyZWVfc2xvdChyZXMpOworCXJldHVybiAxOworb3V0X3JldHJ5OgorCWlmICghcnBjX3Jlc3RhcnRfY2FsbCh0YXNrKSkKKwkJZ290byBvdXQ7CisJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mczRfc2VxdWVuY2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCisJCQkgICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCit7CisJaWYgKHJlcy0+c3Jfc2Vzc2lvbiA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbmZzNDFfc2VxdWVuY2VfZG9uZSh0YXNrLCByZXMpOwogfQogCiAvKgpAQCAtNDgwLDEyICs1MDgsMTEgQEAKIAlpZiAocmVzLT5zcl9zbG90aWQgIT0gTkZTNF9NQVhfU0xPVF9UQUJMRSkKIAkJcmV0dXJuIDA7CiAKLQltZW1zZXQocmVzLCAwLCBzaXplb2YoKnJlcykpOwogCXJlcy0+c3Jfc2xvdGlkID0gTkZTNF9NQVhfU0xPVF9UQUJMRTsKIAl0YmwgPSAmc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZTsKIAogCXNwaW5fbG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKLQlpZiAodGVzdF9iaXQoTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywgJnNlc3Npb24tPmNscC0+Y2xfc3RhdGUpICYmCisJaWYgKHRlc3RfYml0KE5GUzRfU0VTU0lPTl9EUkFJTklORywgJnNlc3Npb24tPnNlc3Npb25fc3RhdGUpICYmCiAJICAgICFycGNfdGFza19oYXNfcHJpb3JpdHkodGFzaywgUlBDX1BSSU9SSVRZX1BSSVZJTEVHRUQpKSB7CiAJCS8qCiAJCSAqIFRoZSBzdGF0ZSBtYW5hZ2VyIHdpbGwgd2FpdCB1bnRpbCB0aGUgc2xvdCB0YWJsZSBpcyBlbXB0eS4KQEAgLTUyNSw2ICs1NTIsNyBAQAogCXJlcy0+c3Jfc2Vzc2lvbiA9IHNlc3Npb247CiAJcmVzLT5zcl9zbG90aWQgPSBzbG90aWQ7CiAJcmVzLT5zcl9yZW5ld2FsX3RpbWUgPSBqaWZmaWVzOworCXJlcy0+c3Jfc3RhdHVzX2ZsYWdzID0gMDsKIAkvKgogCSAqIHNyX3N0YXR1cyBpcyBvbmx5IHNldCBpbiBkZWNvZGVfc2VxdWVuY2UsIGFuZCBzbyB3aWxsIHJlbWFpbgogCSAqIHNldCB0byAxIGlmIGFuIHJwYyBsZXZlbCBmYWlsdXJlIG9jY3Vycy4KQEAgLTUzMywzMyArNTYxLDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBuZnM0X3NldHVwX3NlcXVlbmNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCitpbnQgbmZzNF9zZXR1cF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAogCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyAqYXJncywKIAkJCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqcmVzLAogCQkJaW50IGNhY2hlX3JlcGx5LAogCQkJc3RydWN0IHJwY190YXNrICp0YXNrKQogeworCXN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb24gPSBuZnM0X2dldF9zZXNzaW9uKHNlcnZlcik7CiAJaW50IHJldCA9IDA7CiAKLQlkcHJpbnRrKCItLT4gJXMgY2xwICVwIHNlc3Npb24gJXAgc3Jfc2xvdGlkICVkXG4iLAotCQlfX2Z1bmNfXywgY2xwLCBjbHAtPmNsX3Nlc3Npb24sIHJlcy0+c3Jfc2xvdGlkKTsKLQotCWlmICghbmZzNF9oYXNfc2Vzc2lvbihjbHApKQorCWlmIChzZXNzaW9uID09IE5VTEwpIHsKKwkJYXJncy0+c2Ffc2Vzc2lvbiA9IE5VTEw7CisJCXJlcy0+c3Jfc2Vzc2lvbiA9IE5VTEw7CiAJCWdvdG8gb3V0OwotCXJldCA9IG5mczQxX3NldHVwX3NlcXVlbmNlKGNscC0+Y2xfc2Vzc2lvbiwgYXJncywgcmVzLCBjYWNoZV9yZXBseSwKLQkJCQkgICB0YXNrKTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7Ci0JCS8qIHRlcm1pbmF0ZSBycGMgdGFzayAqLwotCQl0YXNrLT50a19zdGF0dXMgPSByZXQ7Ci0JCXRhc2stPnRrX2FjdGlvbiA9IE5VTEw7CiAJfQorCisJZHByaW50aygiLS0+ICVzIGNscCAlcCBzZXNzaW9uICVwIHNyX3Nsb3RpZCAlZFxuIiwKKwkJX19mdW5jX18sIHNlc3Npb24tPmNscCwgc2Vzc2lvbiwgcmVzLT5zcl9zbG90aWQpOworCisJcmV0ID0gbmZzNDFfc2V0dXBfc2VxdWVuY2Uoc2Vzc2lvbiwgYXJncywgcmVzLCBjYWNoZV9yZXBseSwKKwkJCQkgICB0YXNrKTsKIG91dDoKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3QgbmZzNDFfY2FsbF9zeW5jX2RhdGEgewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcV9zZXJ2ZXI7CiAJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyAqc2VxX2FyZ3M7CiAJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpzZXFfcmVzOwogCWludCBjYWNoZV9yZXBseTsKQEAgLTU2OSw5ICs1OTcsOSBAQAogewogCXN0cnVjdCBuZnM0MV9jYWxsX3N5bmNfZGF0YSAqZGF0YSA9IGNhbGxkYXRhOwogCi0JZHByaW50aygiLS0+ICVzIGRhdGEtPmNscC0+Y2xfc2Vzc2lvbiAlcFxuIiwgX19mdW5jX18sCi0JCWRhdGEtPmNscC0+Y2xfc2Vzc2lvbik7Ci0JaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoZGF0YS0+Y2xwLCBkYXRhLT5zZXFfYXJncywKKwlkcHJpbnRrKCItLT4gJXMgZGF0YS0+c2VxX3NlcnZlciAlcFxuIiwgX19mdW5jX18sIGRhdGEtPnNlcV9zZXJ2ZXIpOworCisJaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoZGF0YS0+c2VxX3NlcnZlciwgZGF0YS0+c2VxX2FyZ3MsCiAJCQkJZGF0YS0+c2VxX3JlcywgZGF0YS0+Y2FjaGVfcmVwbHksIHRhc2spKQogCQlyZXR1cm47CiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CkBAIC01ODcsNyArNjE1LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzNDFfY2FsbF9zeW5jX2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKIAotCW5mczQxX3NlcXVlbmNlX2RvbmUoZGF0YS0+Y2xwLCBkYXRhLT5zZXFfcmVzLCB0YXNrLT50a19zdGF0dXMpOworCW5mczQxX3NlcXVlbmNlX2RvbmUodGFzaywgZGF0YS0+c2VxX3Jlcyk7CiB9CiAKIHN0cnVjdCBycGNfY2FsbF9vcHMgbmZzNDFfY2FsbF9zeW5jX29wcyA9IHsKQEAgLTYwMCw4ICs2MjgsNyBAQAogCS5ycGNfY2FsbF9kb25lID0gbmZzNDFfY2FsbF9zeW5jX2RvbmUsCiB9OwogCi1zdGF0aWMgaW50IG5mczRfY2FsbF9zeW5jX3NlcXVlbmNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCQkJICAgc3RydWN0IHJwY19jbG50ICpjbG50LAorc3RhdGljIGludCBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAogCQkJCSAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAogCQkJCSAgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3MsCiAJCQkJICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCkBAIC02MTEsMTMgKzYzOCwxMyBAQAogCWludCByZXQ7CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwogCXN0cnVjdCBuZnM0MV9jYWxsX3N5bmNfZGF0YSBkYXRhID0gewotCQkuY2xwID0gY2xwLAorCQkuc2VxX3NlcnZlciA9IHNlcnZlciwKIAkJLnNlcV9hcmdzID0gYXJncywKIAkJLnNlcV9yZXMgPSByZXMsCiAJCS5jYWNoZV9yZXBseSA9IGNhY2hlX3JlcGx5LAogCX07CiAJc3RydWN0IHJwY190YXNrX3NldHVwIHRhc2tfc2V0dXAgPSB7Ci0JCS5ycGNfY2xpZW50ID0gY2xudCwKKwkJLnJwY19jbGllbnQgPSBzZXJ2ZXItPmNsaWVudCwKIAkJLnJwY19tZXNzYWdlID0gbXNnLAogCQkuY2FsbGJhY2tfb3BzID0gJm5mczQxX2NhbGxfc3luY19vcHMsCiAJCS5jYWxsYmFja19kYXRhID0gJmRhdGEKQEAgLTY0MiwxMCArNjY5LDE1IEBACiAJCQkgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCiAJCQkgICAgaW50IGNhY2hlX3JlcGx5KQogewotCXJldHVybiBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShzZXJ2ZXItPm5mc19jbGllbnQsIHNlcnZlci0+Y2xpZW50LAotCQkJCSAgICAgICBtc2csIGFyZ3MsIHJlcywgY2FjaGVfcmVwbHksIDApOworCXJldHVybiBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShzZXJ2ZXIsIG1zZywgYXJncywgcmVzLCBjYWNoZV9yZXBseSwgMCk7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW50IG5mczRfc2VxdWVuY2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCisJCQkgICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCit7CisJcmV0dXJuIDE7Cit9CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIGludCBfbmZzNF9jYWxsX3N5bmMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKQEAgLTY1OSwxOCArNjkxLDkgQEAKIH0KIAogI2RlZmluZSBuZnM0X2NhbGxfc3luYyhzZXJ2ZXIsIG1zZywgYXJncywgcmVzLCBjYWNoZV9yZXBseSkgXAotCShzZXJ2ZXIpLT5uZnNfY2xpZW50LT5jbF9jYWxsX3N5bmMoKHNlcnZlciksIChtc2cpLCAmKGFyZ3MpLT5zZXFfYXJncywgXAorCShzZXJ2ZXIpLT5uZnNfY2xpZW50LT5jbF9tdm9wcy0+Y2FsbF9zeW5jKChzZXJ2ZXIpLCAobXNnKSwgJihhcmdzKS0+c2VxX2FyZ3MsIFwKIAkJCSYocmVzKS0+c2VxX3JlcywgKGNhY2hlX3JlcGx5KSkKIAotc3RhdGljIHZvaWQgbmZzNF9zZXF1ZW5jZV9kb25lKGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCi0JCQkgICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsIGludCBycGNfc3RhdHVzKQotewotI2lmZGVmIENPTkZJR19ORlNfVjRfMQotCWlmIChuZnM0X2hhc19zZXNzaW9uKHNlcnZlci0+bmZzX2NsaWVudCkpCi0JCW5mczQxX3NlcXVlbmNlX2RvbmUoc2VydmVyLT5uZnNfY2xpZW50LCByZXMsIHJwY19zdGF0dXMpOwotI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwotfQotCiBzdGF0aWMgdm9pZCB1cGRhdGVfY2hhbmdlYXR0cihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IG5mczRfY2hhbmdlX2luZm8gKmNpbmZvKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShkaXIpOwpAQCAtNzQ1LDE5ICs3NjgsMTQgQEAKIAlwLT5vX2FyZy5zZXJ2ZXIgPSBzZXJ2ZXI7CiAJcC0+b19hcmcuYml0bWFzayA9IHNlcnZlci0+YXR0cl9iaXRtYXNrOwogCXAtPm9fYXJnLmNsYWltID0gTkZTNF9PUEVOX0NMQUlNX05VTEw7Ci0JaWYgKGZsYWdzICYgT19FWENMKSB7Ci0JCWlmIChuZnM0X2hhc19wZXJzaXN0ZW50X3Nlc3Npb24oc2VydmVyLT5uZnNfY2xpZW50KSkgewotCQkJLyogR1VBUkRFRCAqLwotCQkJcC0+b19hcmcudS5hdHRycyA9ICZwLT5hdHRyczsKLQkJCW1lbWNweSgmcC0+YXR0cnMsIGF0dHJzLCBzaXplb2YocC0+YXR0cnMpKTsKLQkJfSBlbHNlIHsgLyogRVhDTFVTSVZFNF8xICovCi0JCQl1MzIgKnMgPSAodTMyICopIHAtPm9fYXJnLnUudmVyaWZpZXIuZGF0YTsKLQkJCXNbMF0gPSBqaWZmaWVzOwotCQkJc1sxXSA9IGN1cnJlbnQtPnBpZDsKLQkJfQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBPX0NSRUFUKSB7CisJaWYgKGZsYWdzICYgT19DUkVBVCkgeworCQl1MzIgKnM7CisKIAkJcC0+b19hcmcudS5hdHRycyA9ICZwLT5hdHRyczsKIAkJbWVtY3B5KCZwLT5hdHRycywgYXR0cnMsIHNpemVvZihwLT5hdHRycykpOworCQlzID0gKHUzMiAqKSBwLT5vX2FyZy51LnZlcmlmaWVyLmRhdGE7CisJCXNbMF0gPSBqaWZmaWVzOworCQlzWzFdID0gY3VycmVudC0+cGlkOwogCX0KIAlwLT5jX2FyZy5maCA9ICZwLT5vX3Jlcy5maDsKIAlwLT5jX2FyZy5zdGF0ZWlkID0gJnAtPm9fcmVzLnN0YXRlaWQ7CkBAIC0xMjU1LDggKzEyNzMsNiBAQAogCXN0cnVjdCBuZnM0X29wZW5kYXRhICpkYXRhID0gY2FsbGRhdGE7CiAKIAlkYXRhLT5ycGNfc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOwotCWlmIChSUENfQVNTQVNTSU5BVEVEKHRhc2spKQotCQlyZXR1cm47CiAJaWYgKGRhdGEtPnJwY19zdGF0dXMgPT0gMCkgewogCQltZW1jcHkoZGF0YS0+b19yZXMuc3RhdGVpZC5kYXRhLCBkYXRhLT5jX3Jlcy5zdGF0ZWlkLmRhdGEsCiAJCQkJc2l6ZW9mKGRhdGEtPm9fcmVzLnN0YXRlaWQuZGF0YSkpOwpAQCAtMTM1NiwxMyArMTM3MiwxMyBAQAogCX0KIAkvKiBVcGRhdGUgc2VxdWVuY2UgaWQuICovCiAJZGF0YS0+b19hcmcuaWQgPSBzcC0+c29fb3duZXJfaWQuaWQ7Ci0JZGF0YS0+b19hcmcuY2xpZW50aWQgPSBzcC0+c29fY2xpZW50LT5jbF9jbGllbnRpZDsKKwlkYXRhLT5vX2FyZy5jbGllbnRpZCA9IHNwLT5zb19zZXJ2ZXItPm5mc19jbGllbnQtPmNsX2NsaWVudGlkOwogCWlmIChkYXRhLT5vX2FyZy5jbGFpbSA9PSBORlM0X09QRU5fQ0xBSU1fUFJFVklPVVMpIHsKIAkJdGFzay0+dGtfbXNnLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX09QRU5fTk9BVFRSXTsKIAkJbmZzX2NvcHlfZmgoJmRhdGEtPm9fcmVzLmZoLCBkYXRhLT5vX2FyZy5maCk7CiAJfQogCWRhdGEtPnRpbWVzdGFtcCA9IGppZmZpZXM7Ci0JaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoZGF0YS0+b19hcmcuc2VydmVyLT5uZnNfY2xpZW50LAorCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKGRhdGEtPm9fYXJnLnNlcnZlciwKIAkJCQkmZGF0YS0+b19hcmcuc2VxX2FyZ3MsCiAJCQkJJmRhdGEtPm9fcmVzLnNlcV9yZXMsIDEsIHRhc2spKQogCQlyZXR1cm47CkBAIC0xMzg1LDExICsxNDAxLDkgQEAKIAogCWRhdGEtPnJwY19zdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7CiAKLQluZnM0X3NlcXVlbmNlX2RvbmUoZGF0YS0+b19hcmcuc2VydmVyLCAmZGF0YS0+b19yZXMuc2VxX3JlcywKLQkJCXRhc2stPnRrX3N0YXR1cyk7Ci0KLQlpZiAoUlBDX0FTU0FTU0lOQVRFRCh0YXNrKSkKKwlpZiAoIW5mczRfc2VxdWVuY2VfZG9uZSh0YXNrLCAmZGF0YS0+b19yZXMuc2VxX3JlcykpCiAJCXJldHVybjsKKwogCWlmICh0YXNrLT50a19zdGF0dXMgPT0gMCkgewogCQlzd2l0Y2ggKGRhdGEtPm9fcmVzLmZfYXR0ci0+bW9kZSAmIFNfSUZNVCkgewogCQkJY2FzZSBTX0lGUkVHOgpAQCAtMTc3Myw3ICsxNzg3LDcgQEAKIAlpZiAobmZzNF9jb3B5X2RlbGVnYXRpb25fc3RhdGVpZCgmYXJnLnN0YXRlaWQsIGlub2RlKSkgewogCQkvKiBVc2UgdGhhdCBzdGF0ZWlkICovCiAJfSBlbHNlIGlmIChzdGF0ZSAhPSBOVUxMKSB7Ci0JCW5mczRfY29weV9zdGF0ZWlkKCZhcmcuc3RhdGVpZCwgc3RhdGUsIGN1cnJlbnQtPmZpbGVzKTsKKwkJbmZzNF9jb3B5X3N0YXRlaWQoJmFyZy5zdGF0ZWlkLCBzdGF0ZSwgY3VycmVudC0+ZmlsZXMsIGN1cnJlbnQtPnRnaWQpOwogCX0gZWxzZQogCQltZW1jcHkoJmFyZy5zdGF0ZWlkLCAmemVyb19zdGF0ZWlkLCBzaXplb2YoYXJnLnN0YXRlaWQpKTsKIApAQCAtMTgzOCw4ICsxODUyLDcgQEAKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUgPSBjYWxsZGF0YS0+c3RhdGU7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoY2FsbGRhdGEtPmlub2RlKTsKIAotCW5mczRfc2VxdWVuY2VfZG9uZShzZXJ2ZXIsICZjYWxsZGF0YS0+cmVzLnNlcV9yZXMsIHRhc2stPnRrX3N0YXR1cyk7Ci0JaWYgKFJQQ19BU1NBU1NJTkFURUQodGFzaykpCisJaWYgKCFuZnM0X3NlcXVlbmNlX2RvbmUodGFzaywgJmNhbGxkYXRhLT5yZXMuc2VxX3JlcykpCiAJCXJldHVybjsKICAgICAgICAgLyogaG1tLiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBpbm9kZSwgYW5kIGluIHRoZSBwcm9jZXNzIG9mIGZyZWVpbmcKIAkgKiB0aGUgc3RhdGVfb3duZXIuIHdlIGtlZXAgdGhpcyBhcm91bmQgdG8gcHJvY2VzcyBlcnJvcnMKQEAgLTE5MDMsNyArMTkxNiw3IEBACiAKIAluZnNfZmF0dHJfaW5pdChjYWxsZGF0YS0+cmVzLmZhdHRyKTsKIAljYWxsZGF0YS0+dGltZXN0YW1wID0gamlmZmllczsKLQlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZSgoTkZTX1NFUlZFUihjYWxsZGF0YS0+aW5vZGUpKS0+bmZzX2NsaWVudCwKKwlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZShORlNfU0VSVkVSKGNhbGxkYXRhLT5pbm9kZSksCiAJCQkJJmNhbGxkYXRhLT5hcmcuc2VxX2FyZ3MsICZjYWxsZGF0YS0+cmVzLnNlcV9yZXMsCiAJCQkJMSwgdGFzaykpCiAJCXJldHVybjsKQEAgLTI2NDgsNyArMjY2MSw4IEBACiB7CiAJc3RydWN0IG5mc19yZW1vdmVyZXMgKnJlcyA9IHRhc2stPnRrX21zZy5ycGNfcmVzcDsKIAotCW5mczRfc2VxdWVuY2VfZG9uZShyZXMtPnNlcnZlciwgJnJlcy0+c2VxX3JlcywgdGFzay0+dGtfc3RhdHVzKTsKKwlpZiAoIW5mczRfc2VxdWVuY2VfZG9uZSh0YXNrLCAmcmVzLT5zZXFfcmVzKSkKKwkJcmV0dXJuIDA7CiAJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIHJlcy0+c2VydmVyLCBOVUxMKSA9PSAtRUFHQUlOKQogCQlyZXR1cm4gMDsKIAl1cGRhdGVfY2hhbmdlYXR0cihkaXIsICZyZXMtPmNpbmZvKTsKQEAgLTMwOTMsNyArMzEwNyw4IEBACiAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAotCW5mczRfc2VxdWVuY2VfZG9uZShzZXJ2ZXIsICZkYXRhLT5yZXMuc2VxX3JlcywgdGFzay0+dGtfc3RhdHVzKTsKKwlpZiAoIW5mczRfc2VxdWVuY2VfZG9uZSh0YXNrLCAmZGF0YS0+cmVzLnNlcV9yZXMpKQorCQlyZXR1cm4gLUVBR0FJTjsKIAogCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBzZXJ2ZXIsIGRhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUpID09IC1FQUdBSU4pIHsKIAkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIHNlcnZlci0+bmZzX2NsaWVudCk7CkBAIC0zMTE2LDggKzMxMzEsOCBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkYXRhLT5pbm9kZTsKIAkKLQluZnM0X3NlcXVlbmNlX2RvbmUoTkZTX1NFUlZFUihpbm9kZSksICZkYXRhLT5yZXMuc2VxX3JlcywKLQkJCSAgIHRhc2stPnRrX3N0YXR1cyk7CisJaWYgKCFuZnM0X3NlcXVlbmNlX2RvbmUodGFzaywgJmRhdGEtPnJlcy5zZXFfcmVzKSkKKwkJcmV0dXJuIC1FQUdBSU47CiAKIAlpZiAobmZzNF9hc3luY19oYW5kbGVfZXJyb3IodGFzaywgTkZTX1NFUlZFUihpbm9kZSksIGRhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUpID09IC1FQUdBSU4pIHsKIAkJbmZzX3Jlc3RhcnRfcnBjKHRhc2ssIE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50KTsKQEAgLTMxNDUsOCArMzE2MCw5IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRhdGEtPmlub2RlOwogCQotCW5mczRfc2VxdWVuY2VfZG9uZShORlNfU0VSVkVSKGlub2RlKSwgJmRhdGEtPnJlcy5zZXFfcmVzLAotCQkJICAgdGFzay0+dGtfc3RhdHVzKTsKKwlpZiAoIW5mczRfc2VxdWVuY2VfZG9uZSh0YXNrLCAmZGF0YS0+cmVzLnNlcV9yZXMpKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCWlmIChuZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBORlNfU0VSVkVSKGlub2RlKSwgTlVMTCkgPT0gLUVBR0FJTikgewogCQluZnNfcmVzdGFydF9ycGModGFzaywgTkZTX1NFUlZFUihpbm9kZSktPm5mc19jbGllbnQpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTMxOTYsMTAgKzMyMTIsNyBAQAogCQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsdGltZXN0YW1wKSkKLQkJY2xwLT5jbF9sYXN0X3JlbmV3YWwgPSB0aW1lc3RhbXA7Ci0Jc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJZG9fcmVuZXdfbGVhc2UoY2xwLCB0aW1lc3RhbXApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbmV3X29wcyA9IHsKQEAgLTMyNDAsMTAgKzMyNTMsNyBAQAogCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwotCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsbm93KSkKLQkJY2xwLT5jbF9sYXN0X3JlbmV3YWwgPSBub3c7Ci0Jc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJZG9fcmVuZXdfbGVhc2UoY2xwLCBub3cpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDY0LDkgKzM0NzQsMTEgQEAKIH0KIAogc3RhdGljIGludAotX25mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHN0cnVjdCBycGNfdGFzayAqdGFzaywgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQorbmZzNF9hc3luY19oYW5kbGVfZXJyb3Ioc3RydWN0IHJwY190YXNrICp0YXNrLCBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCiB7Ci0JaWYgKCFjbHAgfHwgdGFzay0+dGtfc3RhdHVzID49IDApCisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNlcnZlci0+bmZzX2NsaWVudDsKKworCWlmICh0YXNrLT50a19zdGF0dXMgPj0gMCkKIAkJcmV0dXJuIDA7CiAJc3dpdGNoKHRhc2stPnRrX3N0YXR1cykgewogCQljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CkBAIC0zNDk4LDggKzM1MTAsNyBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAJCWNhc2UgLU5GUzRFUlJfREVMQVk6Ci0JCQlpZiAoc2VydmVyKQotCQkJCW5mc19pbmNfc2VydmVyX3N0YXRzKHNlcnZlciwgTkZTSU9TX0RFTEFZKTsKKwkJCW5mc19pbmNfc2VydmVyX3N0YXRzKHNlcnZlciwgTkZTSU9TX0RFTEFZKTsKIAkJY2FzZSAtTkZTNEVSUl9HUkFDRToKIAkJY2FzZSAtRUtFWUVYUElSRUQ6CiAJCQlycGNfZGVsYXkodGFzaywgTkZTNF9QT0xMX1JFVFJZX01BWCk7CkBAIC0zNTIwLDEyICszNTMxLDYgQEAKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotc3RhdGljIGludAotbmZzNF9hc3luY19oYW5kbGVfZXJyb3Ioc3RydWN0IHJwY190YXNrICp0YXNrLCBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCi17Ci0JcmV0dXJuIF9uZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBzZXJ2ZXIsIHNlcnZlci0+bmZzX2NsaWVudCwgc3RhdGUpOwotfQotCiBpbnQgbmZzNF9wcm9jX3NldGNsaWVudGlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHUzMiBwcm9ncmFtLAogCQl1bnNpZ25lZCBzaG9ydCBwb3J0LCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsCiAJCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqcmVzKQpAQCAtMzY0MSw4ICszNjQ2LDggQEAKIHsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmRhdGEgKmRhdGEgPSBjYWxsZGF0YTsKIAotCW5mczRfc2VxdWVuY2VfZG9uZShkYXRhLT5yZXMuc2VydmVyLCAmZGF0YS0+cmVzLnNlcV9yZXMsCi0JCQl0YXNrLT50a19zdGF0dXMpOworCWlmICghbmZzNF9zZXF1ZW5jZV9kb25lKHRhc2ssICZkYXRhLT5yZXMuc2VxX3JlcykpCisJCXJldHVybjsKIAogCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CiAJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgpAQCAtMzY3Miw3ICszNjc3LDcgQEAKIAogCWRfZGF0YSA9IChzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmRhdGEgKilkYXRhOwogCi0JaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoZF9kYXRhLT5yZXMuc2VydmVyLT5uZnNfY2xpZW50LAorCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKGRfZGF0YS0+cmVzLnNlcnZlciwKIAkJCQkmZF9kYXRhLT5hcmdzLnNlcV9hcmdzLAogCQkJCSZkX2RhdGEtPnJlcy5zZXFfcmVzLCAxLCB0YXNrKSkKIAkJcmV0dXJuOwpAQCAtMzg5Miw5ICszODk3LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzNF91bmxvY2tkYXRhICpjYWxsZGF0YSA9IGRhdGE7CiAKLQluZnM0X3NlcXVlbmNlX2RvbmUoY2FsbGRhdGEtPnNlcnZlciwgJmNhbGxkYXRhLT5yZXMuc2VxX3JlcywKLQkJCSAgIHRhc2stPnRrX3N0YXR1cyk7Ci0JaWYgKFJQQ19BU1NBU1NJTkFURUQodGFzaykpCisJaWYgKCFuZnM0X3NlcXVlbmNlX2RvbmUodGFzaywgJmNhbGxkYXRhLT5yZXMuc2VxX3JlcykpCiAJCXJldHVybjsKIAlzd2l0Y2ggKHRhc2stPnRrX3N0YXR1cykgewogCQljYXNlIDA6CkBAIC0zOTI3LDcgKzM5MzAsNyBAQAogCQlyZXR1cm47CiAJfQogCWNhbGxkYXRhLT50aW1lc3RhbXAgPSBqaWZmaWVzOwotCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKGNhbGxkYXRhLT5zZXJ2ZXItPm5mc19jbGllbnQsCisJaWYgKG5mczRfc2V0dXBfc2VxdWVuY2UoY2FsbGRhdGEtPnNlcnZlciwKIAkJCQkmY2FsbGRhdGEtPmFyZy5zZXFfYXJncywKIAkJCQkmY2FsbGRhdGEtPnJlcy5zZXFfcmVzLCAxLCB0YXNrKSkKIAkJcmV0dXJuOwpAQCAtNDA4Miw3ICs0MDg1LDggQEAKIAl9IGVsc2UKIAkJZGF0YS0+YXJnLm5ld19sb2NrX293bmVyID0gMDsKIAlkYXRhLT50aW1lc3RhbXAgPSBqaWZmaWVzOwotCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKGRhdGEtPnNlcnZlci0+bmZzX2NsaWVudCwgJmRhdGEtPmFyZy5zZXFfYXJncywKKwlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZShkYXRhLT5zZXJ2ZXIsCisJCQkJJmRhdGEtPmFyZy5zZXFfYXJncywKIAkJCQkmZGF0YS0+cmVzLnNlcV9yZXMsIDEsIHRhc2spKQogCQlyZXR1cm47CiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CkBAIC00MTAxLDEyICs0MTA1LDEwIEBACiAKIAlkcHJpbnRrKCIlczogYmVnaW4hXG4iLCBfX2Z1bmNfXyk7CiAKLQluZnM0X3NlcXVlbmNlX2RvbmUoZGF0YS0+c2VydmVyLCAmZGF0YS0+cmVzLnNlcV9yZXMsCi0JCQl0YXNrLT50a19zdGF0dXMpOworCWlmICghbmZzNF9zZXF1ZW5jZV9kb25lKHRhc2ssICZkYXRhLT5yZXMuc2VxX3JlcykpCisJCXJldHVybjsKIAogCWRhdGEtPnJwY19zdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7Ci0JaWYgKFJQQ19BU1NBU1NJTkFURUQodGFzaykpCi0JCWdvdG8gb3V0OwogCWlmIChkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIgIT0gMCkgewogCQlpZiAoZGF0YS0+cnBjX3N0YXR1cyA9PSAwKQogCQkJbmZzX2NvbmZpcm1fc2VxaWQoJmRhdGEtPmxzcC0+bHNfc2VxaWQsIDApOwpAQCAtNDQyNCw2ICs0NDI2LDM0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgbmZzNF9yZWxlYXNlX2xvY2tvd25lcl9yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQoreworCWtmcmVlKGNhbGxkYXRhKTsKK30KKworY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbGVhc2VfbG9ja293bmVyX29wcyA9IHsKKwkucnBjX3JlbGVhc2UgPSBuZnM0X3JlbGVhc2VfbG9ja293bmVyX3JlbGVhc2UsCit9OworCit2b2lkIG5mczRfcmVsZWFzZV9sb2Nrb3duZXIoY29uc3Qgc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwKQoreworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBsc3AtPmxzX3N0YXRlLT5vd25lci0+c29fc2VydmVyOworCXN0cnVjdCBuZnNfcmVsZWFzZV9sb2Nrb3duZXJfYXJncyAqYXJnczsKKwlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0geworCQkucnBjX3Byb2MgPSAmbmZzNF9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfUkVMRUFTRV9MT0NLT1dORVJdLAorCX07CisKKwlpZiAoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiAhPSAwKQorCQlyZXR1cm47CisJYXJncyA9IGttYWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX05PRlMpOworCWlmICghYXJncykKKwkJcmV0dXJuOworCWFyZ3MtPmxvY2tfb3duZXIuY2xpZW50aWQgPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX2NsaWVudGlkOworCWFyZ3MtPmxvY2tfb3duZXIuaWQgPSBsc3AtPmxzX2lkLmlkOworCW1zZy5ycGNfYXJncCA9IGFyZ3M7CisJcnBjX2NhbGxfYXN5bmMoc2VydmVyLT5jbGllbnQsICZtc2csIDAsICZuZnM0X3JlbGVhc2VfbG9ja293bmVyX29wcywgYXJncyk7Cit9CisKICNkZWZpbmUgWEFUVFJfTkFNRV9ORlNWNF9BQ0wgInN5c3RlbS5uZnM0X2FjbCIKIAogaW50IG5mczRfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICprZXksIGNvbnN0IHZvaWQgKmJ1ZiwKQEAgLTQ2MTEsNyArNDY0MSw4IEBACiAJCQkoc3RydWN0IG5mczRfZ2V0X2xlYXNlX3RpbWVfZGF0YSAqKWNhbGxkYXRhOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JbmZzNDFfc2VxdWVuY2VfZG9uZShkYXRhLT5jbHAsICZkYXRhLT5yZXMtPmxyX3NlcV9yZXMsIHRhc2stPnRrX3N0YXR1cyk7CisJaWYgKCFuZnM0MV9zZXF1ZW5jZV9kb25lKHRhc2ssICZkYXRhLT5yZXMtPmxyX3NlcV9yZXMpKQorCQlyZXR1cm47CiAJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKIAljYXNlIC1ORlM0RVJSX0RFTEFZOgogCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CkBAIC00ODA1LDEzICs0ODM2LDYgQEAKIAlpZiAoIXNlc3Npb24pCiAJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBUaGUgY3JlYXRlIHNlc3Npb24gcmVwbHkgcmFjZXMgd2l0aCB0aGUgc2VydmVyIGJhY2sKLQkgKiBjaGFubmVsIHByb2JlLiBNYXJrIHRoZSBjbGllbnQgTkZTX0NTX1NFU1NJT05fSU5JVElORwotCSAqIHNvIHRoYXQgdGhlIGNsaWVudCBiYWNrIGNoYW5uZWwgY2FuIGZpbmQgdGhlCi0JICogbmZzX2NsaWVudCBzdHJ1Y3QKLQkgKi8KLQljbHAtPmNsX2NvbnNfc3RhdGUgPSBORlNfQ1NfU0VTU0lPTl9JTklUSU5HOwogCWluaXRfY29tcGxldGlvbigmc2Vzc2lvbi0+Y29tcGxldGUpOwogCiAJdGJsID0gJnNlc3Npb24tPmZjX3Nsb3RfdGFibGU7CkBAIC00ODI0LDYgKzQ4NDgsOCBAQAogCXNwaW5fbG9ja19pbml0KCZ0YmwtPnNsb3RfdGJsX2xvY2spOwogCXJwY19pbml0X3dhaXRfcXVldWUoJnRibC0+c2xvdF90Ymxfd2FpdHEsICJCYWNrQ2hhbm5lbCBTbG90IHRhYmxlIik7CiAKKwlzZXNzaW9uLT5zZXNzaW9uX3N0YXRlID0gMTw8TkZTNF9TRVNTSU9OX0lOSVRJTkc7CisKIAlzZXNzaW9uLT5jbHAgPSBjbHA7CiAJcmV0dXJuIHNlc3Npb247CiB9CkBAIC01MDQwLDYgKzUwNjYsMTAgQEAKIAlpZiAoIW5mczRfaGFzX3Nlc3Npb24oY2xwKSkKIAkJcmV0dXJuIDA7CiAKKwlzZXNzaW9uID0gY2xwLT5jbF9zZXNzaW9uOworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KE5GUzRfU0VTU0lPTl9JTklUSU5HLCAmc2Vzc2lvbi0+c2Vzc2lvbl9zdGF0ZSkpCisJCXJldHVybiAwOworCiAJcnNpemUgPSBzZXJ2ZXItPnJzaXplOwogCWlmIChyc2l6ZSA9PSAwKQogCQlyc2l6ZSA9IE5GU19NQVhfRklMRV9JT19TSVpFOwpAQCAtNTA0Nyw3ICs1MDc3LDYgQEAKIAlpZiAod3NpemUgPT0gMCkKIAkJd3NpemUgPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAotCXNlc3Npb24gPSBjbHAtPmNsX3Nlc3Npb247CiAJc2Vzc2lvbi0+ZmNfYXR0cnMubWF4X3Jxc3Rfc3ogPSB3c2l6ZSArIG5mczQxX21heHdyaXRlX292ZXJoZWFkOwogCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXNwX3N6ID0gcnNpemUgKyBuZnM0MV9tYXhyZWFkX292ZXJoZWFkOwogCkBAIC01MDYwLDY5ICs1MDg5LDcwIEBACiAvKgogICogUmVuZXcgdGhlIGNsX3Nlc3Npb24gbGVhc2UuCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF9wcm9jX3NlcXVlbmNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKLXsKK3N0cnVjdCBuZnM0X3NlcXVlbmNlX2RhdGEgeworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyByZXM7Ci0KLQlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewotCQkucnBjX3Byb2MgPSAmbmZzNF9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfU0VRVUVOQ0VdLAotCQkucnBjX2FyZ3AgPSAmYXJncywKLQkJLnJwY19yZXNwID0gJnJlcywKLQkJLnJwY19jcmVkID0gY3JlZCwKLQl9OwotCi0JYXJncy5zYV9jYWNoZV90aGlzID0gMDsKLQotCXJldHVybiBuZnM0X2NhbGxfc3luY19zZXF1ZW5jZShjbHAsIGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAmYXJncywKLQkJCQkgICAgICAgJnJlcywgYXJncy5zYV9jYWNoZV90aGlzLCAxKTsKLX0KK307CiAKIHN0YXRpYyB2b2lkIG5mczQxX3NlcXVlbmNlX3JlbGVhc2Uodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gKHN0cnVjdCBuZnNfY2xpZW50ICopZGF0YTsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9kYXRhICpjYWxsZGF0YSA9IGRhdGE7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGNhbGxkYXRhLT5jbHA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmNscC0+Y2xfY291bnQpID4gMSkKIAkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZW5ld2FsKGNscCk7CiAJbmZzX3B1dF9jbGllbnQoY2xwKTsKKwlrZnJlZShjYWxsZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmZzNDFfc2VxdWVuY2VfaGFuZGxlX2Vycm9ycyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJc3dpdGNoKHRhc2stPnRrX3N0YXR1cykgeworCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJY2FzZSAtRUtFWUVYUElSRUQ6CisJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUFYKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJZGVmYXVsdDoKKwkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbmZzNDFfc2VxdWVuY2VfY2FsbF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gKHN0cnVjdCBuZnNfY2xpZW50ICopZGF0YTsKKwlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9kYXRhICpjYWxsZGF0YSA9IGRhdGE7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGNhbGxkYXRhLT5jbHA7CiAKLQluZnM0MV9zZXF1ZW5jZV9kb25lKGNscCwgdGFzay0+dGtfbXNnLnJwY19yZXNwLCB0YXNrLT50a19zdGF0dXMpOworCWlmICghbmZzNDFfc2VxdWVuY2VfZG9uZSh0YXNrLCB0YXNrLT50a19tc2cucnBjX3Jlc3ApKQorCQlyZXR1cm47CiAKIAlpZiAodGFzay0+dGtfc3RhdHVzIDwgMCkgewogCQlkcHJpbnRrKCIlcyBFUlJPUiAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CiAJCWlmIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPT0gMSkKIAkJCWdvdG8gb3V0OwogCi0JCWlmIChfbmZzNF9hc3luY19oYW5kbGVfZXJyb3IodGFzaywgTlVMTCwgY2xwLCBOVUxMKQotCQkJCQkJCQk9PSAtRUFHQUlOKSB7Ci0JCQluZnNfcmVzdGFydF9ycGModGFzaywgY2xwKTsKKwkJaWYgKG5mczQxX3NlcXVlbmNlX2hhbmRsZV9lcnJvcnModGFzaywgY2xwKSA9PSAtRUFHQUlOKSB7CisJCQlycGNfcmVzdGFydF9jYWxsX3ByZXBhcmUodGFzayk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJZHByaW50aygiJXMgcnBjX2NyZWQgJXBcbiIsIF9fZnVuY19fLCB0YXNrLT50a19tc2cucnBjX2NyZWQpOwogb3V0OgotCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfYXJncCk7Ci0Ja2ZyZWUodGFzay0+dGtfbXNnLnJwY19yZXNwKTsKLQogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZCBuZnM0MV9zZXF1ZW5jZV9wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2RhdGEgKmNhbGxkYXRhID0gZGF0YTsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gY2FsbGRhdGEtPmNscDsKIAlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzOwogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqcmVzOwogCi0JY2xwID0gKHN0cnVjdCBuZnNfY2xpZW50ICopZGF0YTsKIAlhcmdzID0gdGFzay0+dGtfbXNnLnJwY19hcmdwOwogCXJlcyA9IHRhc2stPnRrX21zZy5ycGNfcmVzcDsKIAotCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKGNscCwgYXJncywgcmVzLCAwLCB0YXNrKSkKKwlpZiAobmZzNDFfc2V0dXBfc2VxdWVuY2UoY2xwLT5jbF9zZXNzaW9uLCBhcmdzLCByZXMsIDAsIHRhc2spKQogCQlyZXR1cm47CiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CiB9CkBAIC01MTMzLDMyICs1MTYzLDY3IEBACiAJLnJwY19yZWxlYXNlID0gbmZzNDFfc2VxdWVuY2VfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBpbnQgbmZzNDFfcHJvY19hc3luY19zZXF1ZW5jZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAotCQkJCSAgICAgc3RydWN0IHJwY19jcmVkICpjcmVkKQorc3RhdGljIHN0cnVjdCBycGNfdGFzayAqX25mczQxX3Byb2Nfc2VxdWVuY2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQogewotCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3M7Ci0Jc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXM7CisJc3RydWN0IG5mczRfc2VxdWVuY2VfZGF0YSAqY2FsbGRhdGE7CiAJc3RydWN0IHJwY19tZXNzYWdlIG1zZyA9IHsKIAkJLnJwY19wcm9jID0gJm5mczRfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX1NFUVVFTkNFXSwKIAkJLnJwY19jcmVkID0gY3JlZCwKIAl9OworCXN0cnVjdCBycGNfdGFza19zZXR1cCB0YXNrX3NldHVwX2RhdGEgPSB7CisJCS5ycGNfY2xpZW50ID0gY2xwLT5jbF9ycGNjbGllbnQsCisJCS5ycGNfbWVzc2FnZSA9ICZtc2csCisJCS5jYWxsYmFja19vcHMgPSAmbmZzNDFfc2VxdWVuY2Vfb3BzLAorCQkuZmxhZ3MgPSBSUENfVEFTS19BU1lOQyB8IFJQQ19UQVNLX1NPRlQsCisJfTsKIAogCWlmICghYXRvbWljX2luY19ub3RfemVybygmY2xwLT5jbF9jb3VudCkpCi0JCXJldHVybiAtRUlPOwotCWFyZ3MgPSBremFsbG9jKHNpemVvZigqYXJncyksIEdGUF9OT0ZTKTsKLQlyZXMgPSBremFsbG9jKHNpemVvZigqcmVzKSwgR0ZQX05PRlMpOwotCWlmICghYXJncyB8fCAhcmVzKSB7Ci0JCWtmcmVlKGFyZ3MpOwotCQlrZnJlZShyZXMpOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwljYWxsZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpjYWxsZGF0YSksIEdGUF9OT0ZTKTsKKwlpZiAoY2FsbGRhdGEgPT0gTlVMTCkgewogCQluZnNfcHV0X2NsaWVudChjbHApOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQotCXJlcy0+c3Jfc2xvdGlkID0gTkZTNF9NQVhfU0xPVF9UQUJMRTsKLQltc2cucnBjX2FyZ3AgPSBhcmdzOwotCW1zZy5ycGNfcmVzcCA9IHJlczsKKwljYWxsZGF0YS0+cmVzLnNyX3Nsb3RpZCA9IE5GUzRfTUFYX1NMT1RfVEFCTEU7CisJbXNnLnJwY19hcmdwID0gJmNhbGxkYXRhLT5hcmdzOworCW1zZy5ycGNfcmVzcCA9ICZjYWxsZGF0YS0+cmVzOworCWNhbGxkYXRhLT5jbHAgPSBjbHA7CisJdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBjYWxsZGF0YTsKIAotCXJldHVybiBycGNfY2FsbF9hc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgUlBDX1RBU0tfU09GVCwKLQkJCSAgICAgICZuZnM0MV9zZXF1ZW5jZV9vcHMsICh2b2lkICopY2xwKTsKKwlyZXR1cm4gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOworfQorCitzdGF0aWMgaW50IG5mczQxX3Byb2NfYXN5bmNfc2VxdWVuY2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQoreworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKwlpbnQgcmV0ID0gMDsKKworCXRhc2sgPSBfbmZzNDFfcHJvY19zZXF1ZW5jZShjbHAsIGNyZWQpOworCWlmIChJU19FUlIodGFzaykpCisJCXJldCA9IFBUUl9FUlIodGFzayk7CisJZWxzZQorCQlycGNfcHV0X3Rhc2sodGFzayk7CisJZHByaW50aygiPC0tICVzIHN0YXR1cz0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuZnM0X3Byb2Nfc2VxdWVuY2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQoreworCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKwlpbnQgcmV0OworCisJdGFzayA9IF9uZnM0MV9wcm9jX3NlcXVlbmNlKGNscCwgY3JlZCk7CisJaWYgKElTX0VSUih0YXNrKSkgeworCQlyZXQgPSBQVFJfRVJSKHRhc2spOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gcnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayh0YXNrKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gdGFzay0+dGtfc3RhdHVzOworCXJwY19wdXRfdGFzayh0YXNrKTsKK291dDoKKwlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3QgbmZzNF9yZWNsYWltX2NvbXBsZXRlX2RhdGEgewpAQCAtNTE3MiwxMyArNTIzNywzMSBAQAogCXN0cnVjdCBuZnM0X3JlY2xhaW1fY29tcGxldGVfZGF0YSAqY2FsbGRhdGEgPSBkYXRhOwogCiAJcnBjX3Rhc2tfc2V0X3ByaW9yaXR5KHRhc2ssIFJQQ19QUklPUklUWV9QUklWSUxFR0VEKTsKLQlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZShjYWxsZGF0YS0+Y2xwLCAmY2FsbGRhdGEtPmFyZy5zZXFfYXJncywKKwlpZiAobmZzNDFfc2V0dXBfc2VxdWVuY2UoY2FsbGRhdGEtPmNscC0+Y2xfc2Vzc2lvbiwKKwkJCQkmY2FsbGRhdGEtPmFyZy5zZXFfYXJncywKIAkJCQkmY2FsbGRhdGEtPnJlcy5zZXFfcmVzLCAwLCB0YXNrKSkKIAkJcmV0dXJuOwogCiAJcnBjX2NhbGxfc3RhcnQodGFzayk7CiB9CiAKK3N0YXRpYyBpbnQgbmZzNDFfcmVjbGFpbV9jb21wbGV0ZV9oYW5kbGVfZXJyb3JzKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzd2l0Y2godGFzay0+dGtfc3RhdHVzKSB7CisJY2FzZSAwOgorCWNhc2UgLU5GUzRFUlJfQ09NUExFVEVfQUxSRUFEWToKKwljYXNlIC1ORlM0RVJSX1dST05HX0NSRUQ6IC8qIFdoYXQgdG8gZG8gaGVyZT8gKi8KKwkJYnJlYWs7CisJY2FzZSAtTkZTNEVSUl9ERUxBWToKKwljYXNlIC1FS0VZRVhQSVJFRDoKKwkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOworCQlyZXR1cm4gLUVBR0FJTjsKKwlkZWZhdWx0OgorCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBuZnM0X3JlY2xhaW1fY29tcGxldGVfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5mczRfcmVjbGFpbV9jb21wbGV0ZV9kYXRhICpjYWxsZGF0YSA9IGRhdGE7CkBAIC01MTg2LDMyICs1MjY5LDEzIEBACiAJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMgPSAmY2FsbGRhdGEtPnJlcy5zZXFfcmVzOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JbmZzNDFfc2VxdWVuY2VfZG9uZShjbHAsIHJlcywgdGFzay0+dGtfc3RhdHVzKTsKLQlzd2l0Y2ggKHRhc2stPnRrX3N0YXR1cykgewotCWNhc2UgMDoKLQljYXNlIC1ORlM0RVJSX0NPTVBMRVRFX0FMUkVBRFk6Ci0JCWJyZWFrOwotCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKLQljYXNlIC1ORlM0RVJSX0RFQURTRVNTSU9OOgotCQkvKgotCQkgKiBIYW5kbGUgdGhlIHNlc3Npb24gZXJyb3IsIGJ1dCBkbyBub3QgcmV0cnkgdGhlIG9wZXJhdGlvbiwgYXMKLQkJICogd2UgaGF2ZSBubyB3YXkgb2YgdGVsbGluZyB3aGV0aGVyIHRoZSBjbGllbnRpZCBoYWQgdG8gYmUKLQkJICogcmVzZXQgYmVmb3JlIHdlIGdvdCBvdXIgcmVwbHkuICBJZiByZXNldCwgYSBuZXcgd2F2ZSBvZgotCQkgKiByZWNsYWltIG9wZXJhdGlvbnMgd2lsbCBmb2xsb3csIGNvbnRhaW5pbmcgdGhlaXIgb3duIHJlY2xhaW0KLQkJICogY29tcGxldGUuICBXZSBkb24ndCB3YW50IG91ciByZXRyeSB0byBnZXQgb24gdGhlIHdheSBvZgotCQkgKiByZWNvdmVyeSBieSBpbmNvcnJlY3RseSBpbmRpY2F0aW5nIHRvIHRoZSBzZXJ2ZXIgdGhhdCB3ZSdyZQotCQkgKiBkb25lIHJlY2xhaW1pbmcgc3RhdGUgc2luY2UgdGhlIHByb2Nlc3MgaGFkIHRvIGJlIHJlc3RhcnRlZC4KLQkJICovCi0JCV9uZnM0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBOVUxMLCBjbHAsIE5VTEwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlpZiAoX25mczRfYXN5bmNfaGFuZGxlX2Vycm9yKAotCQkJCXRhc2ssIE5VTEwsIGNscCwgTlVMTCkgPT0gLUVBR0FJTikgewotCQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCWlmICghbmZzNDFfc2VxdWVuY2VfZG9uZSh0YXNrLCByZXMpKQorCQlyZXR1cm47CiAKKwlpZiAobmZzNDFfcmVjbGFpbV9jb21wbGV0ZV9oYW5kbGVfZXJyb3JzKHRhc2ssIGNscCkgPT0gLUVBR0FJTikgeworCQlycGNfcmVzdGFydF9jYWxsX3ByZXBhcmUodGFzayk7CisJCXJldHVybjsKKwl9CiAJZHByaW50aygiPC0tICVzXG4iLCBfX2Z1bmNfXyk7CiB9CiAKQEAgLTUzMjUsMjggKzUzODksMzAgQEAKIH07CiAjZW5kaWYKIAotLyoKLSAqIFBlciBtaW5vciB2ZXJzaW9uIHJlYm9vdCBhbmQgbmV0d29yayBwYXJ0aXRpb24gcmVjb3Zlcnkgb3BzCi0gKi8KLQotc3RydWN0IG5mczRfc3RhdGVfcmVjb3Zlcnlfb3BzICpuZnM0X3JlYm9vdF9yZWNvdmVyeV9vcHNbXSA9IHsKLQkmbmZzNDBfcmVib290X3JlY292ZXJ5X29wcywKLSNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQkmbmZzNDFfcmVib290X3JlY292ZXJ5X29wcywKLSNlbmRpZgorc3RhdGljIGNvbnN0IHN0cnVjdCBuZnM0X21pbm9yX3ZlcnNpb25fb3BzIG5mc192NF8wX21pbm9yX29wcyA9IHsKKwkubWlub3JfdmVyc2lvbiA9IDAsCisJLmNhbGxfc3luYyA9IF9uZnM0X2NhbGxfc3luYywKKwkudmFsaWRhdGVfc3RhdGVpZCA9IG5mczRfdmFsaWRhdGVfZGVsZWdhdGlvbl9zdGF0ZWlkLAorCS5yZWJvb3RfcmVjb3Zlcnlfb3BzID0gJm5mczQwX3JlYm9vdF9yZWNvdmVyeV9vcHMsCisJLm5vZ3JhY2VfcmVjb3Zlcnlfb3BzID0gJm5mczQwX25vZ3JhY2VfcmVjb3Zlcnlfb3BzLAorCS5zdGF0ZV9yZW5ld2FsX29wcyA9ICZuZnM0MF9zdGF0ZV9yZW5ld2FsX29wcywKIH07CiAKLXN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqbmZzNF9ub2dyYWNlX3JlY292ZXJ5X29wc1tdID0gewotCSZuZnM0MF9ub2dyYWNlX3JlY292ZXJ5X29wcywKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQkmbmZzNDFfbm9ncmFjZV9yZWNvdmVyeV9vcHMsCi0jZW5kaWYKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzNF9taW5vcl92ZXJzaW9uX29wcyBuZnNfdjRfMV9taW5vcl9vcHMgPSB7CisJLm1pbm9yX3ZlcnNpb24gPSAxLAorCS5jYWxsX3N5bmMgPSBfbmZzNF9jYWxsX3N5bmNfc2Vzc2lvbiwKKwkudmFsaWRhdGVfc3RhdGVpZCA9IG5mczQxX3ZhbGlkYXRlX2RlbGVnYXRpb25fc3RhdGVpZCwKKwkucmVib290X3JlY292ZXJ5X29wcyA9ICZuZnM0MV9yZWJvb3RfcmVjb3Zlcnlfb3BzLAorCS5ub2dyYWNlX3JlY292ZXJ5X29wcyA9ICZuZnM0MV9ub2dyYWNlX3JlY292ZXJ5X29wcywKKwkuc3RhdGVfcmVuZXdhbF9vcHMgPSAmbmZzNDFfc3RhdGVfcmVuZXdhbF9vcHMsCiB9OworI2VuZGlmCiAKLXN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyAqbmZzNF9zdGF0ZV9yZW5ld2FsX29wc1tdID0gewotCSZuZnM0MF9zdGF0ZV9yZW5ld2FsX29wcywKK2NvbnN0IHN0cnVjdCBuZnM0X21pbm9yX3ZlcnNpb25fb3BzICpuZnNfdjRfbWlub3Jfb3BzW10gPSB7CisJWzBdID0gJm5mc192NF8wX21pbm9yX29wcywKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKLQkmbmZzNDFfc3RhdGVfcmVuZXdhbF9vcHMsCisJWzFdID0gJm5mc192NF8xX21pbm9yX29wcywKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggZDg3ZjEwMy4uNzJiNmM1OCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC01NCwxNCArNTQsMTQgQEAKIHZvaWQKIG5mczRfcmVuZXdfc3RhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyAqb3BzOworCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyAqb3BzOwogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mc19jbGllbnQsIGNsX3JlbmV3ZC53b3JrKTsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CiAJbG9uZyBsZWFzZTsKIAl1bnNpZ25lZCBsb25nIGxhc3QsIG5vdzsKIAotCW9wcyA9IG5mczRfc3RhdGVfcmVuZXdhbF9vcHNbY2xwLT5jbF9taW5vcnZlcnNpb25dOworCW9wcyA9IGNscC0+Y2xfbXZvcHMtPnN0YXRlX3JlbmV3YWxfb3BzOwogCWRwcmludGsoIiVzOiBzdGFydFxuIiwgX19mdW5jX18pOwogCS8qIEFyZSB0aGVyZSBhbnkgYWN0aXZlIHN1cGVyYmxvY2tzPyAqLwogCWlmIChsaXN0X2VtcHR5KCZjbHAtPmNsX3N1cGVyYmxvY2tzKSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAzNGFjZjU5Li4zZTJmMTliIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0xNDUsNyArMTQ1LDkgQEAKIAlzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXMgPSBjbHAtPmNsX3Nlc3Npb247CiAJaW50IG1heF9zbG90czsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywgJmNscC0+Y2xfc3RhdGUpKSB7CisJaWYgKHNlcyA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlM0X1NFU1NJT05fRFJBSU5JTkcsICZzZXMtPnNlc3Npb25fc3RhdGUpKSB7CiAJCXNwaW5fbG9jaygmc2VzLT5mY19zbG90X3RhYmxlLnNsb3RfdGJsX2xvY2spOwogCQltYXhfc2xvdHMgPSBzZXMtPmZjX3Nsb3RfdGFibGUubWF4X3Nsb3RzOwogCQl3aGlsZSAobWF4X3Nsb3RzLS0pIHsKQEAgLTE2Nyw3ICsxNjksNyBAQAogCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCA9ICZzZXMtPmZjX3Nsb3RfdGFibGU7CiAKIAlzcGluX2xvY2soJnRibC0+c2xvdF90YmxfbG9jayk7Ci0Jc2V0X2JpdChORlM0Q0xOVF9TRVNTSU9OX0RSQUlOSU5HLCAmY2xwLT5jbF9zdGF0ZSk7CisJc2V0X2JpdChORlM0X1NFU1NJT05fRFJBSU5JTkcsICZzZXMtPnNlc3Npb25fc3RhdGUpOwogCWlmICh0YmwtPmhpZ2hlc3RfdXNlZF9zbG90aWQgIT0gLTEpIHsKIAkJSU5JVF9DT01QTEVUSU9OKHNlcy0+Y29tcGxldGUpOwogCQlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKQEAgLTM3MSw3ICszNzMsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmc3AtPnNvX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZzcC0+c29fc3RhdGVzKTsKLQlJTklUX0xJU1RfSEVBRCgmc3AtPnNvX2RlbGVnYXRpb25zKTsKIAlycGNfaW5pdF93YWl0X3F1ZXVlKCZzcC0+c29fc2VxdWVuY2Uud2FpdCwgIlNlcWlkX3dhaXRxdWV1ZSIpOwogCXNwLT5zb19zZXFpZC5zZXF1ZW5jZSA9ICZzcC0+c29fc2VxdWVuY2U7CiAJc3Bpbl9sb2NrX2luaXQoJnNwLT5zb19zZXF1ZW5jZS5sb2NrKTsKQEAgLTM4NCw3ICszODUsNyBAQAogbmZzNF9kcm9wX3N0YXRlX293bmVyKHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCkKIHsKIAlpZiAoIVJCX0VNUFRZX05PREUoJnNwLT5zb19jbGllbnRfbm9kZSkpIHsKLQkJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHNwLT5zb19jbGllbnQ7CisJCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzcC0+c29fc2VydmVyLT5uZnNfY2xpZW50OwogCiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJcmJfZXJhc2UoJnNwLT5zb19jbGllbnRfbm9kZSwgJmNscC0+Y2xfc3RhdGVfb3duZXJzKTsKQEAgLTQwNiw3ICs0MDcsNiBAQAogCW5ldyA9IG5mczRfYWxsb2Nfc3RhdGVfb3duZXIoKTsKIAlpZiAobmV3ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCW5ldy0+c29fY2xpZW50ID0gY2xwOwogCW5ldy0+c29fc2VydmVyID0gc2VydmVyOwogCW5ldy0+c29fY3JlZCA9IGNyZWQ7CiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwpAQCAtNDIzLDcgKzQyMyw3IEBACiAKIHZvaWQgbmZzNF9wdXRfc3RhdGVfb3duZXIoc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzcC0+c29fY2xpZW50OworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBzcC0+c29fc2VydmVyLT5uZnNfY2xpZW50OwogCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHNwLT5zb19jcmVkOwogCiAJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZzcC0+c29fY291bnQsICZjbHAtPmNsX2xvY2spKQpAQCAtNjAyLDEyICs2MDIsMjEgQEAKICAqIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGN1cnJlbnQtPmZpbGVzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICoKLV9fbmZzNF9maW5kX2xvY2tfc3RhdGUoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBmbF9vd25lcl90IGZsX293bmVyKQorX19uZnM0X2ZpbmRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGZsX293bmVyX3QgZmxfb3duZXIsIHBpZF90IGZsX3BpZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqcG9zOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc3RhdGUtPmxvY2tfc3RhdGVzLCBsc19sb2NrcykgewotCQlpZiAocG9zLT5sc19vd25lciAhPSBmbF9vd25lcikKKwkJaWYgKHR5cGUgIT0gTkZTNF9BTllfTE9DS19UWVBFICYmIHBvcy0+bHNfb3duZXIubG9fdHlwZSAhPSB0eXBlKQogCQkJY29udGludWU7CisJCXN3aXRjaCAocG9zLT5sc19vd25lci5sb190eXBlKSB7CisJCWNhc2UgTkZTNF9QT1NJWF9MT0NLX1RZUEU6CisJCQlpZiAocG9zLT5sc19vd25lci5sb191LnBvc2l4X293bmVyICE9IGZsX293bmVyKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCWNhc2UgTkZTNF9GTE9DS19MT0NLX1RZUEU6CisJCQlpZiAocG9zLT5sc19vd25lci5sb191LmZsb2NrX293bmVyICE9IGZsX3BpZCkKKwkJCQljb250aW51ZTsKKwkJfQogCQlhdG9taWNfaW5jKCZwb3MtPmxzX2NvdW50KTsKIAkJcmV0dXJuIHBvczsKIAl9CkBAIC02MTksMTAgKzYyOCwxMCBAQAogICogZXhpc3RzLCByZXR1cm4gYW4gdW5pbml0aWFsaXplZCBvbmUuCiAgKgogICovCi1zdGF0aWMgc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbmZzNF9hbGxvY19sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgZmxfb3duZXJfdCBmbF9vd25lcikKK3N0YXRpYyBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpuZnM0X2FsbG9jX2xvY2tfc3RhdGUoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBmbF9vd25lcl90IGZsX293bmVyLCBwaWRfdCBmbF9waWQsIHVuc2lnbmVkIGludCB0eXBlKQogewogCXN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKmxzcDsKLQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gc3RhdGUtPm93bmVyLT5zb19jbGllbnQ7CisJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IHN0YXRlLT5vd25lci0+c29fc2VydmVyLT5uZnNfY2xpZW50OwogCiAJbHNwID0ga3phbGxvYyhzaXplb2YoKmxzcCksIEdGUF9OT0ZTKTsKIAlpZiAobHNwID09IE5VTEwpCkBAIC02MzMsNyArNjQyLDE4IEBACiAJbHNwLT5sc19zZXFpZC5zZXF1ZW5jZSA9ICZsc3AtPmxzX3NlcXVlbmNlOwogCWF0b21pY19zZXQoJmxzcC0+bHNfY291bnQsIDEpOwogCWxzcC0+bHNfc3RhdGUgPSBzdGF0ZTsKLQlsc3AtPmxzX293bmVyID0gZmxfb3duZXI7CisJbHNwLT5sc19vd25lci5sb190eXBlID0gdHlwZTsKKwlzd2l0Y2ggKGxzcC0+bHNfb3duZXIubG9fdHlwZSkgeworCWNhc2UgTkZTNF9GTE9DS19MT0NLX1RZUEU6CisJCWxzcC0+bHNfb3duZXIubG9fdS5mbG9ja19vd25lciA9IGZsX3BpZDsKKwkJYnJlYWs7CisJY2FzZSBORlM0X1BPU0lYX0xPQ0tfVFlQRToKKwkJbHNwLT5sc19vd25lci5sb191LnBvc2l4X293bmVyID0gZmxfb3duZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtmcmVlKGxzcCk7CisJCXJldHVybiBOVUxMOworCX0KIAlzcGluX2xvY2soJmNscC0+Y2xfbG9jayk7CiAJbmZzX2FsbG9jX3VuaXF1ZV9pZCgmY2xwLT5jbF9sb2Nrb3duZXJfaWQsICZsc3AtPmxzX2lkLCAxLCA2NCk7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CkBAIC02NDMsNyArNjYzLDcgQEAKIAogc3RhdGljIHZvaWQgbmZzNF9mcmVlX2xvY2tfc3RhdGUoc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBsc3AtPmxzX3N0YXRlLT5vd25lci0+c29fY2xpZW50OworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBsc3AtPmxzX3N0YXRlLT5vd25lci0+c29fc2VydmVyLT5uZnNfY2xpZW50OwogCiAJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCW5mc19mcmVlX3VuaXF1ZV9pZCgmY2xwLT5jbF9sb2Nrb3duZXJfaWQsICZsc3AtPmxzX2lkKTsKQEAgLTY1NywxMyArNjc3LDEzIEBACiAgKiBleGlzdHMsIHJldHVybiBhbiB1bmluaXRpYWxpemVkIG9uZS4KICAqCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpuZnM0X2dldF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgZmxfb3duZXJfdCBvd25lcikKK3N0YXRpYyBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpuZnM0X2dldF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgZmxfb3duZXJfdCBvd25lciwgcGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3AsICpuZXcgPSBOVUxMOwogCQogCWZvcig7OykgewogCQlzcGluX2xvY2soJnN0YXRlLT5zdGF0ZV9sb2NrKTsKLQkJbHNwID0gX19uZnM0X2ZpbmRfbG9ja19zdGF0ZShzdGF0ZSwgb3duZXIpOworCQlsc3AgPSBfX25mczRfZmluZF9sb2NrX3N0YXRlKHN0YXRlLCBvd25lciwgcGlkLCB0eXBlKTsKIAkJaWYgKGxzcCAhPSBOVUxMKQogCQkJYnJlYWs7CiAJCWlmIChuZXcgIT0gTlVMTCkgewpAQCAtNjc0LDcgKzY5NCw3IEBACiAJCQlicmVhazsKIAkJfQogCQlzcGluX3VubG9jaygmc3RhdGUtPnN0YXRlX2xvY2spOwotCQluZXcgPSBuZnM0X2FsbG9jX2xvY2tfc3RhdGUoc3RhdGUsIG93bmVyKTsKKwkJbmV3ID0gbmZzNF9hbGxvY19sb2NrX3N0YXRlKHN0YXRlLCBvd25lciwgcGlkLCB0eXBlKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzAxLDYgKzcyMSw4IEBACiAJaWYgKGxpc3RfZW1wdHkoJnN0YXRlLT5sb2NrX3N0YXRlcykpCiAJCWNsZWFyX2JpdChMS19TVEFURV9JTl9VU0UsICZzdGF0ZS0+ZmxhZ3MpOwogCXNwaW5fdW5sb2NrKCZzdGF0ZS0+c3RhdGVfbG9jayk7CisJaWYgKGxzcC0+bHNfZmxhZ3MgJiBORlNfTE9DS19JTklUSUFMSVpFRCkKKwkJbmZzNF9yZWxlYXNlX2xvY2tvd25lcihsc3ApOwogCW5mczRfZnJlZV9sb2NrX3N0YXRlKGxzcCk7CiB9CiAKQEAgLTcyOCw3ICs3NTAsMTIgQEAKIAogCWlmIChmbC0+Zmxfb3BzICE9IE5VTEwpCiAJCXJldHVybiAwOwotCWxzcCA9IG5mczRfZ2V0X2xvY2tfc3RhdGUoc3RhdGUsIGZsLT5mbF9vd25lcik7CisJaWYgKGZsLT5mbF9mbGFncyAmIEZMX1BPU0lYKQorCQlsc3AgPSBuZnM0X2dldF9sb2NrX3N0YXRlKHN0YXRlLCBmbC0+Zmxfb3duZXIsIDAsIE5GUzRfUE9TSVhfTE9DS19UWVBFKTsKKwllbHNlIGlmIChmbC0+ZmxfZmxhZ3MgJiBGTF9GTE9DSykKKwkJbHNwID0gbmZzNF9nZXRfbG9ja19zdGF0ZShzdGF0ZSwgMCwgZmwtPmZsX3BpZCwgTkZTNF9GTE9DS19MT0NLX1RZUEUpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGxzcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlmbC0+ZmxfdS5uZnM0X2ZsLm93bmVyID0gbHNwOwpAQCAtNzQwLDcgKzc2Nyw3IEBACiAgKiBCeXRlLXJhbmdlIGxvY2sgYXdhcmUgdXRpbGl0eSB0byBpbml0aWFsaXplIHRoZSBzdGF0ZWlkIG9mIHJlYWQvd3JpdGUKICAqIHJlcXVlc3RzLgogICovCi12b2lkIG5mczRfY29weV9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqZHN0LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGZsX293bmVyX3QgZmxfb3duZXIpCit2b2lkIG5mczRfY29weV9zdGF0ZWlkKG5mczRfc3RhdGVpZCAqZHN0LCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGZsX293bmVyX3QgZmxfb3duZXIsIHBpZF90IGZsX3BpZCkKIHsKIAlzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3A7CiAJaW50IHNlcTsKQEAgLTc1Myw3ICs3ODAsNyBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnN0YXRlLT5zdGF0ZV9sb2NrKTsKLQlsc3AgPSBfX25mczRfZmluZF9sb2NrX3N0YXRlKHN0YXRlLCBmbF9vd25lcik7CisJbHNwID0gX19uZnM0X2ZpbmRfbG9ja19zdGF0ZShzdGF0ZSwgZmxfb3duZXIsIGZsX3BpZCwgTkZTNF9BTllfTE9DS19UWVBFKTsKIAlpZiAobHNwICE9IE5VTEwgJiYgKGxzcC0+bHNfZmxhZ3MgJiBORlNfTE9DS19JTklUSUFMSVpFRCkgIT0gMCkKIAkJbWVtY3B5KGRzdCwgJmxzcC0+bHNfc3RhdGVpZCwgc2l6ZW9mKCpkc3QpKTsKIAlzcGluX3VubG9jaygmc3RhdGUtPnN0YXRlX2xvY2spOwpAQCAtMTA0MSwxMSArMTA2OCwxMSBAQAogCQkJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKIAkJCWNhc2UgLU5GUzRFUlJfUkVDTEFJTV9CQUQ6CiAJCQljYXNlIC1ORlM0RVJSX1JFQ0xBSU1fQ09ORkxJQ1Q6Ci0JCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzcC0+c29fY2xpZW50LCBzdGF0ZSk7CisJCQkJbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzcC0+c29fc2VydmVyLT5uZnNfY2xpZW50LCBzdGF0ZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CiAJCQljYXNlIC1ORlM0RVJSX05PX0dSQUNFOgotCQkJCW5mczRfc3RhdGVfbWFya19yZWNsYWltX25vZ3JhY2Uoc3AtPnNvX2NsaWVudCwgc3RhdGUpOworCQkJCW5mczRfc3RhdGVfbWFya19yZWNsYWltX25vZ3JhY2Uoc3AtPnNvX3NlcnZlci0+bmZzX2NsaWVudCwgc3RhdGUpOwogCQkJY2FzZSAtTkZTNEVSUl9TVEFMRV9DTElFTlRJRDoKIAkJCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKIAkJCWNhc2UgLU5GUzRFUlJfQkFEU0xPVDoKQEAgLTExMjAsOCArMTE0Nyw3IEBACiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfUkVDTEFJTV9SRUJPT1QsICZjbHAtPmNsX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JbmZzNF9yZWNsYWltX2NvbXBsZXRlKGNscCwKLQkJbmZzNF9yZWJvb3RfcmVjb3Zlcnlfb3BzW2NscC0+Y2xfbWlub3J2ZXJzaW9uXSk7CisJbmZzNF9yZWNsYWltX2NvbXBsZXRlKGNscCwgY2xwLT5jbF9tdm9wcy0+cmVib290X3JlY292ZXJ5X29wcyk7CiAKIAlmb3IgKHBvcyA9IHJiX2ZpcnN0KCZjbHAtPmNsX3N0YXRlX293bmVycyk7IHBvcyAhPSBOVUxMOyBwb3MgPSByYl9uZXh0KHBvcykpIHsKIAkJc3AgPSByYl9lbnRyeShwb3MsIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19jbGllbnRfbm9kZSk7CkBAIC0xMjExLDggKzEyMzcsOCBAQAogc3RhdGljIGludCBuZnM0X2NoZWNrX2xlYXNlKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkOwotCXN0cnVjdCBuZnM0X3N0YXRlX21haW50ZW5hbmNlX29wcyAqb3BzID0KLQkJbmZzNF9zdGF0ZV9yZW5ld2FsX29wc1tjbHAtPmNsX21pbm9ydmVyc2lvbl07CisJY29uc3Qgc3RydWN0IG5mczRfc3RhdGVfbWFpbnRlbmFuY2Vfb3BzICpvcHMgPQorCQljbHAtPmNsX212b3BzLT5zdGF0ZV9yZW5ld2FsX29wczsKIAlpbnQgc3RhdHVzID0gLU5GUzRFUlJfRVhQSVJFRDsKIAogCS8qIElzIHRoZSBjbGllbnQgYWxyZWFkeSBrbm93biB0byBoYXZlIGFuIGV4cGlyZWQgbGVhc2U/ICovCkBAIC0xMjM1LDggKzEyNjEsOCBAQAogc3RhdGljIGludCBuZnM0X3JlY2xhaW1fbGVhc2Uoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7Ci0Jc3RydWN0IG5mczRfc3RhdGVfcmVjb3Zlcnlfb3BzICpvcHMgPQotCQluZnM0X3JlYm9vdF9yZWNvdmVyeV9vcHNbY2xwLT5jbF9taW5vcnZlcnNpb25dOworCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqb3BzID0KKwkJY2xwLT5jbF9tdm9wcy0+cmVib290X3JlY292ZXJ5X29wczsKIAlpbnQgc3RhdHVzID0gLUVOT0VOVDsKIAogCWNyZWQgPSBvcHMtPmdldF9jbGlkX2NyZWQoY2xwKTsKQEAgLTE0NDQsNyArMTQ3MCw3IEBACiAJCS8qIEZpcnN0IHJlY292ZXIgcmVib290IHN0YXRlLi4uICovCiAJCWlmICh0ZXN0X2JpdChORlM0Q0xOVF9SRUNMQUlNX1JFQk9PVCwgJmNscC0+Y2xfc3RhdGUpKSB7CiAJCQlzdGF0dXMgPSBuZnM0X2RvX3JlY2xhaW0oY2xwLAotCQkJCW5mczRfcmVib290X3JlY292ZXJ5X29wc1tjbHAtPmNsX21pbm9ydmVyc2lvbl0pOworCQkJCWNscC0+Y2xfbXZvcHMtPnJlYm9vdF9yZWNvdmVyeV9vcHMpOwogCQkJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSB8fAogCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKSkKIAkJCQljb250aW51ZTsKQEAgLTE0NTgsNyArMTQ4NCw3IEBACiAJCS8qIE5vdyByZWNvdmVyIGV4cGlyZWQgc3RhdGUuLi4gKi8KIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChORlM0Q0xOVF9SRUNMQUlNX05PR1JBQ0UsICZjbHAtPmNsX3N0YXRlKSkgewogCQkJc3RhdHVzID0gbmZzNF9kb19yZWNsYWltKGNscCwKLQkJCQluZnM0X25vZ3JhY2VfcmVjb3Zlcnlfb3BzW2NscC0+Y2xfbWlub3J2ZXJzaW9uXSk7CisJCQkJY2xwLT5jbF9tdm9wcy0+bm9ncmFjZV9yZWNvdmVyeV9vcHMpOwogCQkJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSB8fAogCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1NFU1NJT05fUkVTRVQsICZjbHAtPmNsX3N0YXRlKSB8fAogCQkJICAgIHRlc3RfYml0KE5GUzRDTE5UX1JFQ0xBSU1fUkVCT09ULCAmY2xwLT5jbF9zdGF0ZSkpCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCA2NWM4ZGFlLi4wOGVmOTEyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTIwMiwxNCArMjAyLDE3IEBACiAjZGVmaW5lIGVuY29kZV9saW5rX21heHN6CShvcF9lbmNvZGVfaGRyX21heHN6ICsgXAogCQkJCW5mczRfbmFtZV9tYXhzeikKICNkZWZpbmUgZGVjb2RlX2xpbmtfbWF4c3oJKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBkZWNvZGVfY2hhbmdlX2luZm9fbWF4c3opCisjZGVmaW5lIGVuY29kZV9sb2Nrb3duZXJfbWF4c3oJKDcpCiAjZGVmaW5lIGVuY29kZV9sb2NrX21heHN6CShvcF9lbmNvZGVfaGRyX21heHN6ICsgXAogCQkJCSA3ICsgXAotCQkJCSAxICsgZW5jb2RlX3N0YXRlaWRfbWF4c3ogKyA4KQorCQkJCSAxICsgZW5jb2RlX3N0YXRlaWRfbWF4c3ogKyAxICsgXAorCQkJCSBlbmNvZGVfbG9ja293bmVyX21heHN6KQogI2RlZmluZSBkZWNvZGVfbG9ja19kZW5pZWRfbWF4c3ogXAogCQkJCSg4ICsgZGVjb2RlX2xvY2tvd25lcl9tYXhzeikKICNkZWZpbmUgZGVjb2RlX2xvY2tfbWF4c3oJKG9wX2RlY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJIGRlY29kZV9sb2NrX2RlbmllZF9tYXhzeikKLSNkZWZpbmUgZW5jb2RlX2xvY2t0X21heHN6CShvcF9lbmNvZGVfaGRyX21heHN6ICsgMTIpCisjZGVmaW5lIGVuY29kZV9sb2NrdF9tYXhzegkob3BfZW5jb2RlX2hkcl9tYXhzeiArIDUgKyBcCisJCQkJZW5jb2RlX2xvY2tvd25lcl9tYXhzeikKICNkZWZpbmUgZGVjb2RlX2xvY2t0X21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6ICsgXAogCQkJCSBkZWNvZGVfbG9ja19kZW5pZWRfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9sb2NrdV9tYXhzegkob3BfZW5jb2RlX2hkcl9tYXhzeiArIDMgKyBcCkBAIC0yMTcsNiArMjIwLDExIEBACiAJCQkJIDQpCiAjZGVmaW5lIGRlY29kZV9sb2NrdV9tYXhzegkob3BfZGVjb2RlX2hkcl9tYXhzeiArIFwKIAkJCQkgZGVjb2RlX3N0YXRlaWRfbWF4c3opCisjZGVmaW5lIGVuY29kZV9yZWxlYXNlX2xvY2tvd25lcl9tYXhzeiBcCisJCQkJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCisJCQkJIGVuY29kZV9sb2Nrb3duZXJfbWF4c3opCisjZGVmaW5lIGRlY29kZV9yZWxlYXNlX2xvY2tvd25lcl9tYXhzeiBcCisJCQkJKG9wX2RlY29kZV9oZHJfbWF4c3opCiAjZGVmaW5lIGVuY29kZV9hY2Nlc3NfbWF4c3oJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyAxKQogI2RlZmluZSBkZWNvZGVfYWNjZXNzX21heHN6CShvcF9kZWNvZGVfaGRyX21heHN6ICsgMikKICNkZWZpbmUgZW5jb2RlX3N5bWxpbmtfbWF4c3oJKG9wX2VuY29kZV9oZHJfbWF4c3ogKyBcCkBAIC00NzEsNiArNDc5LDEyIEBACiAJCQkJZGVjb2RlX3NlcXVlbmNlX21heHN6ICsgXAogCQkJCWRlY29kZV9wdXRmaF9tYXhzeiArIFwKIAkJCQlkZWNvZGVfbG9ja3VfbWF4c3opCisjZGVmaW5lIE5GUzRfZW5jX3JlbGVhc2VfbG9ja293bmVyX3N6IFwKKwkJCQkoY29tcG91bmRfZW5jb2RlX2hkcl9tYXhzeiArIFwKKwkJCQkgZW5jb2RlX2xvY2tvd25lcl9tYXhzeikKKyNkZWZpbmUgTkZTNF9kZWNfcmVsZWFzZV9sb2Nrb3duZXJfc3ogXAorCQkJCShjb21wb3VuZF9kZWNvZGVfaGRyX21heHN6ICsgXAorCQkJCSBkZWNvZGVfbG9ja293bmVyX21heHN6KQogI2RlZmluZSBORlM0X2VuY19hY2Nlc3Nfc3oJKGNvbXBvdW5kX2VuY29kZV9oZHJfbWF4c3ogKyBcCiAJCQkJZW5jb2RlX3NlcXVlbmNlX21heHN6ICsgXAogCQkJCWVuY29kZV9wdXRmaF9tYXhzeiArIFwKQEAgLTc0NCw3ICs3NTgsNyBAQAogCQkJCXN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKnA7Ci0Jc3RydWN0IHJwY19hdXRoICphdXRoID0gcmVxLT5ycV90YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2F1dGg7CisJc3RydWN0IHJwY19hdXRoICphdXRoID0gcmVxLT5ycV9jcmVkLT5jcl9hdXRoOwogCiAJLyogaW5pdGlhbGl6ZSBydW5uaW5nIGNvdW50IG9mIGV4cGVjdGVkIGJ5dGVzIGluIHJlcGx5LgogCSAqIE5PVEU6IHRoZSByZXBsaWVkIHRhZyBTSE9VTEQgYmUgdGhlIHNhbWUgaXMgdGhlIG9uZSBzZW50LApAQCAtMTA0Miw2ICsxMDU2LDE3IEBACiAJcmV0dXJuIGZsLT5mbF9lbmQgLSBmbC0+Zmxfc3RhcnQgKyAxOwogfQogCitzdGF0aWMgdm9pZCBlbmNvZGVfbG9ja293bmVyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfbG93bmVyICpsb3duZXIpCit7CisJX19iZTMyICpwOworCisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAyOCk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgbG93bmVyLT5jbGllbnRpZCk7CisJKnArKyA9IGNwdV90b19iZTMyKDE2KTsKKwlwID0geGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgImxvY2sgaWQ6IiwgOCk7CisJeGRyX2VuY29kZV9oeXBlcihwLCBsb3duZXItPmlkKTsKK30KKwogLyoKICAqIG9wY29kZSx0eXBlLHJlY2xhaW0sb2Zmc2V0LGxlbmd0aCxuZXdfbG9ja19vd25lciA9IDMyCiAgKiBvcGVuX3NlcWlkLG9wZW5fc3RhdGVpZCxsb2NrX3NlcWlkLGxvY2tfb3duZXIuY2xpZW50aWQsIGxvY2tfb3duZXIuaWQgPSA0MApAQCAtMTA1OCwxNCArMTA4MywxMSBAQAogCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIG5mczRfbG9ja19sZW5ndGgoYXJncy0+ZmwpKTsKIAkqcCA9IGNwdV90b19iZTMyKGFyZ3MtPm5ld19sb2NrX293bmVyKTsKIAlpZiAoYXJncy0+bmV3X2xvY2tfb3duZXIpewotCQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQrTkZTNF9TVEFURUlEX1NJWkUrMzIpOworCQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQrTkZTNF9TVEFURUlEX1NJWkUrNCk7CiAJCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5vcGVuX3NlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CiAJCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBhcmdzLT5vcGVuX3N0YXRlaWQtPmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAkJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmxvY2tfc2VxaWQtPnNlcXVlbmNlLT5jb3VudGVyKTsKLQkJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+bG9ja19vd25lci5jbGllbnRpZCk7Ci0JCSpwKysgPSBjcHVfdG9fYmUzMigxNik7Ci0JCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCAibG9jayBpZDoiLCA4KTsKLQkJeGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5sb2NrX293bmVyLmlkKTsKKwkJZW5jb2RlX2xvY2tvd25lcih4ZHIsICZhcmdzLT5sb2NrX293bmVyKTsKIAl9CiAJZWxzZSB7CiAJCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgTkZTNF9TVEFURUlEX1NJWkUrNCk7CkBAIC0xMDgwLDE1ICsxMTAyLDEyIEBACiB7CiAJX19iZTMyICpwOwogCi0JcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA1Mik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAyNCk7CiAJKnArKyA9IGNwdV90b19iZTMyKE9QX0xPQ0tUKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIobmZzNF9sb2NrX3R5cGUoYXJncy0+ZmwsIDApKTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5mbC0+Zmxfc3RhcnQpOwogCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIG5mczRfbG9ja19sZW5ndGgoYXJncy0+ZmwpKTsKLQlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5sb2NrX293bmVyLmNsaWVudGlkKTsKLQkqcCsrID0gY3B1X3RvX2JlMzIoMTYpOwotCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCAibG9jayBpZDoiLCA4KTsKLQl4ZHJfZW5jb2RlX2h5cGVyKHAsIGFyZ3MtPmxvY2tfb3duZXIuaWQpOworCWVuY29kZV9sb2Nrb3duZXIoeGRyLCAmYXJncy0+bG9ja19vd25lcik7CiAJaGRyLT5ub3BzKys7CiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2xvY2t0X21heHN6OwogfQpAQCAtMTEwOCw2ICsxMTI3LDE3IEBACiAJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX2xvY2t1X21heHN6OwogfQogCitzdGF0aWMgdm9pZCBlbmNvZGVfcmVsZWFzZV9sb2Nrb3duZXIoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19sb3duZXIgKmxvd25lciwgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQoreworCV9fYmUzMiAqcDsKKworCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgNCk7CisJKnAgPSBjcHVfdG9fYmUzMihPUF9SRUxFQVNFX0xPQ0tPV05FUik7CisJZW5jb2RlX2xvY2tvd25lcih4ZHIsIGxvd25lcik7CisJaGRyLT5ub3BzKys7CisJaGRyLT5yZXBsZW4gKz0gZGVjb2RlX3JlbGVhc2VfbG9ja293bmVyX21heHN6OworfQorCiBzdGF0aWMgdm9pZCBlbmNvZGVfbG9va3VwKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLCBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCiB7CiAJaW50IGxlbiA9IG5hbWUtPmxlbjsKQEAgLTExNzIsNyArMTIwMiw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNscCA9IGFyZy0+c2VydmVyLT5uZnNfY2xpZW50OwotCQlpZiAoY2xwLT5jbF9taW5vcnZlcnNpb24gPiAwKSB7CisJCWlmIChjbHAtPmNsX212b3BzLT5taW5vcl92ZXJzaW9uID4gMCkgewogCQkJaWYgKG5mczRfaGFzX3BlcnNpc3RlbnRfc2Vzc2lvbihjbHApKSB7CiAJCQkJKnAgPSBjcHVfdG9fYmUzMihORlM0X0NSRUFURV9HVUFSREVEKTsKIAkJCQllbmNvZGVfYXR0cnMoeGRyLCBhcmctPnUuYXR0cnMsIGFyZy0+c2VydmVyKTsKQEAgLTEzMjQsMTQgKzEzNTQsMTQgQEAKIAloZHItPnJlcGxlbiArPSBkZWNvZGVfcHV0cm9vdGZoX21heHN6OwogfQogCi1zdGF0aWMgdm9pZCBlbmNvZGVfc3RhdGVpZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KQorc3RhdGljIHZvaWQgZW5jb2RlX3N0YXRlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgY29uc3Qgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwgY29uc3Qgc3RydWN0IG5mc19sb2NrX2NvbnRleHQgKmxfY3R4KQogewogCW5mczRfc3RhdGVpZCBzdGF0ZWlkOwogCV9fYmUzMiAqcDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgTkZTNF9TVEFURUlEX1NJWkUpOwogCWlmIChjdHgtPnN0YXRlICE9IE5VTEwpIHsKLQkJbmZzNF9jb3B5X3N0YXRlaWQoJnN0YXRlaWQsIGN0eC0+c3RhdGUsIGN0eC0+bG9ja293bmVyKTsKKwkJbmZzNF9jb3B5X3N0YXRlaWQoJnN0YXRlaWQsIGN0eC0+c3RhdGUsIGxfY3R4LT5sb2Nrb3duZXIsIGxfY3R4LT5waWQpOwogCQl4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCBzdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKIAl9IGVsc2UKIAkJeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQocCwgemVyb19zdGF0ZWlkLmRhdGEsIE5GUzRfU1RBVEVJRF9TSVpFKTsKQEAgLTEzNDQsNyArMTM3NCw3IEBACiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0KTsKIAkqcCA9IGNwdV90b19iZTMyKE9QX1JFQUQpOwogCi0JZW5jb2RlX3N0YXRlaWQoeGRyLCBhcmdzLT5jb250ZXh0KTsKKwllbmNvZGVfc3RhdGVpZCh4ZHIsIGFyZ3MtPmNvbnRleHQsIGFyZ3MtPmxvY2tfY29udGV4dCk7CiAKIAlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDEyKTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOwpAQCAtMTUyMyw3ICsxNTUzLDcgQEAKIAlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOwogCSpwID0gY3B1X3RvX2JlMzIoT1BfV1JJVEUpOwogCi0JZW5jb2RlX3N0YXRlaWQoeGRyLCBhcmdzLT5jb250ZXh0KTsKKwllbmNvZGVfc3RhdGVpZCh4ZHIsIGFyZ3MtPmNvbnRleHQsIGFyZ3MtPmxvY2tfY29udGV4dCk7CiAKIAlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDE2KTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5vZmZzZXQpOwpAQCAtMTcwNCw3ICsxNzM0LDcgQEAKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjRfMSkKIAlpZiAoYXJncy0+c2Ffc2Vzc2lvbikKLQkJcmV0dXJuIGFyZ3MtPnNhX3Nlc3Npb24tPmNscC0+Y2xfbWlub3J2ZXJzaW9uOworCQlyZXR1cm4gYXJncy0+c2Ffc2Vzc2lvbi0+Y2xwLT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbjsKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTIwNDgsNiArMjA3OCwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5mczRfeGRyX2VuY19yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgbmZzX3JlbGVhc2VfbG9ja293bmVyX2FyZ3MgKmFyZ3MpCit7CisJc3RydWN0IHhkcl9zdHJlYW0geGRyOworCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0geworCQkubWlub3J2ZXJzaW9uID0gMCwKKwl9OworCisJeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOworCWVuY29kZV9jb21wb3VuZF9oZHIoJnhkciwgcmVxLCAmaGRyKTsKKwllbmNvZGVfcmVsZWFzZV9sb2Nrb3duZXIoJnhkciwgJmFyZ3MtPmxvY2tfb3duZXIsICZoZHIpOworCWVuY29kZV9ub3BzKCZoZHIpOworCXJldHVybiAwOworfQorCiAvKgogICogRW5jb2RlIGEgUkVBRExJTksgcmVxdWVzdAogICovCkBAIC0yMzk1LDcgKzI0MzksNyBAQAogewogCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKIAlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkciA9IHsKLQkJLm1pbm9ydmVyc2lvbiA9IGFyZ3MtPmNsaWVudC0+Y2xfbWlub3J2ZXJzaW9uLAorCQkubWlub3J2ZXJzaW9uID0gYXJncy0+Y2xpZW50LT5jbF9tdm9wcy0+bWlub3JfdmVyc2lvbiwKIAl9OwogCiAJeGRyX2luaXRfZW5jb2RlKCZ4ZHIsICZyZXEtPnJxX3NuZF9idWYsIHApOwpAQCAtMjQxMyw3ICsyNDU3LDcgQEAKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHI7CiAJc3RydWN0IGNvbXBvdW5kX2hkciBoZHIgPSB7Ci0JCS5taW5vcnZlcnNpb24gPSBhcmdzLT5jbGllbnQtPmNsX21pbm9ydmVyc2lvbiwKKwkJLm1pbm9ydmVyc2lvbiA9IGFyZ3MtPmNsaWVudC0+Y2xfbXZvcHMtPm1pbm9yX3ZlcnNpb24sCiAJfTsKIAogCXhkcl9pbml0X2VuY29kZSgmeGRyLCAmcmVxLT5ycV9zbmRfYnVmLCBwKTsKQEAgLTI0MzEsNyArMjQ3NSw3IEBACiB7CiAJc3RydWN0IHhkcl9zdHJlYW0geGRyOwogCXN0cnVjdCBjb21wb3VuZF9oZHIgaGRyID0gewotCQkubWlub3J2ZXJzaW9uID0gc2Vzc2lvbi0+Y2xwLT5jbF9taW5vcnZlcnNpb24sCisJCS5taW5vcnZlcnNpb24gPSBzZXNzaW9uLT5jbHAtPmNsX212b3BzLT5taW5vcl92ZXJzaW9uLAogCX07CiAKIAl4ZHJfaW5pdF9lbmNvZGUoJnhkciwgJnJlcS0+cnFfc25kX2J1ZiwgcCk7CkBAIC0zOTczLDYgKzQwMTcsMTEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IGRlY29kZV9yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyKQoreworCXJldHVybiBkZWNvZGVfb3BfaGRyKHhkciwgT1BfUkVMRUFTRV9MT0NLT1dORVIpOworfQorCiBzdGF0aWMgaW50IGRlY29kZV9sb29rdXAoc3RydWN0IHhkcl9zdHJlYW0gKnhkcikKIHsKIAlyZXR1cm4gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0xPT0tVUCk7CkBAIC01MjU5LDYgKzUzMDgsMTkgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG5mczRfeGRyX2RlY19yZWxlYXNlX2xvY2tvd25lcihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKmR1bW15KQoreworCXN0cnVjdCB4ZHJfc3RyZWFtIHhkcjsKKwlzdHJ1Y3QgY29tcG91bmRfaGRyIGhkcjsKKwlpbnQgc3RhdHVzOworCisJeGRyX2luaXRfZGVjb2RlKCZ4ZHIsICZycXN0cC0+cnFfcmN2X2J1ZiwgcCk7CisJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcigmeGRyLCAmaGRyKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gZGVjb2RlX3JlbGVhc2VfbG9ja293bmVyKCZ4ZHIpOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qCiAgKiBEZWNvZGUgUkVBRExJTksgcmVzcG9uc2UKICAqLwpAQCAtNTg2Niw2ICs1OTI4LDcgQEAKICAgUFJPQyhHRVRBQ0wsCQllbmNfZ2V0YWNsLAlkZWNfZ2V0YWNsKSwKICAgUFJPQyhTRVRBQ0wsCQllbmNfc2V0YWNsLAlkZWNfc2V0YWNsKSwKICAgUFJPQyhGU19MT0NBVElPTlMsCWVuY19mc19sb2NhdGlvbnMsIGRlY19mc19sb2NhdGlvbnMpLAorICBQUk9DKFJFTEVBU0VfTE9DS09XTkVSLCBlbmNfcmVsZWFzZV9sb2Nrb3duZXIsIGRlY19yZWxlYXNlX2xvY2tvd25lciksCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAgIFBST0MoRVhDSEFOR0VfSUQsCWVuY19leGNoYW5nZV9pZCwJZGVjX2V4Y2hhbmdlX2lkKSwKICAgUFJPQyhDUkVBVEVfU0VTU0lPTiwJZW5jX2NyZWF0ZV9zZXNzaW9uLAlkZWNfY3JlYXRlX3Nlc3Npb24pLApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BhZ2VsaXN0LmMgYi9mcy9uZnMvcGFnZWxpc3QuYwppbmRleCBhMzY1NGU1Li45MTk0OTAyIDEwMDY0NAotLS0gYS9mcy9uZnMvcGFnZWxpc3QuYworKysgYi9mcy9uZnMvcGFnZWxpc3QuYwpAQCAtNzksNiArNzksNyBAQAogCXJlcS0+d2JfcGdiYXNlCT0gb2Zmc2V0OwogCXJlcS0+d2JfYnl0ZXMgICA9IGNvdW50OwogCXJlcS0+d2JfY29udGV4dCA9IGdldF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CisJcmVxLT53Yl9sb2NrX2NvbnRleHQgPSBuZnNfZ2V0X2xvY2tfY29udGV4dChjdHgpOwogCWtyZWZfaW5pdCgmcmVxLT53Yl9rcmVmKTsKIAlyZXR1cm4gcmVxOwogfQpAQCAtMTQxLDExICsxNDIsMTYgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHJlcS0+d2JfcGFnZTsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gcmVxLT53Yl9jb250ZXh0OworCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsX2N0eCA9IHJlcS0+d2JfbG9ja19jb250ZXh0OwogCiAJaWYgKHBhZ2UgIT0gTlVMTCkgewogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCXJlcS0+d2JfcGFnZSA9IE5VTEw7CiAJfQorCWlmIChsX2N0eCAhPSBOVUxMKSB7CisJCW5mc19wdXRfbG9ja19jb250ZXh0KGxfY3R4KTsKKwkJcmVxLT53Yl9sb2NrX2NvbnRleHQgPSBOVUxMOworCX0KIAlpZiAoY3R4ICE9IE5VTEwpIHsKIAkJcHV0X25mc19vcGVuX2NvbnRleHQoY3R4KTsKIAkJcmVxLT53Yl9jb250ZXh0ID0gTlVMTDsKQEAgLTIzNSw3ICsyNDEsNyBAQAogewogCWlmIChyZXEtPndiX2NvbnRleHQtPmNyZWQgIT0gcHJldi0+d2JfY29udGV4dC0+Y3JlZCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHJlcS0+d2JfY29udGV4dC0+bG9ja293bmVyICE9IHByZXYtPndiX2NvbnRleHQtPmxvY2tvd25lcikKKwlpZiAocmVxLT53Yl9sb2NrX2NvbnRleHQtPmxvY2tvd25lciAhPSBwcmV2LT53Yl9sb2NrX2NvbnRleHQtPmxvY2tvd25lcikKIAkJcmV0dXJuIDA7CiAJaWYgKHJlcS0+d2JfY29udGV4dC0+c3RhdGUgIT0gcHJldi0+d2JfY29udGV4dC0+c3RhdGUpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggNmUyYjA2ZS4uODdhZGMyNyAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0xOTAsNiArMTkwLDcgQEAKIAlkYXRhLT5hcmdzLnBhZ2VzICA9IGRhdGEtPnBhZ2V2ZWM7CiAJZGF0YS0+YXJncy5jb3VudCAgPSBjb3VudDsKIAlkYXRhLT5hcmdzLmNvbnRleHQgPSBnZXRfbmZzX29wZW5fY29udGV4dChyZXEtPndiX2NvbnRleHQpOworCWRhdGEtPmFyZ3MubG9ja19jb250ZXh0ID0gcmVxLT53Yl9sb2NrX2NvbnRleHQ7CiAKIAlkYXRhLT5yZXMuZmF0dHIgICA9ICZkYXRhLT5mYXR0cjsKIAlkYXRhLT5yZXMuY291bnQgICA9IGNvdW50OwpAQCAtNDEwLDcgKzQxMSw3IEBACiB7CiAJc3RydWN0IG5mc19yZWFkX2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKIAotCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpLT5uZnNfY2xpZW50LAorCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpLAogCQkJCSZkYXRhLT5hcmdzLnNlcV9hcmdzLCAmZGF0YS0+cmVzLnNlcV9yZXMsCiAJCQkJMCwgdGFzaykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggZjlkZjE2ZC4uZWUyNjMxNiAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTI3MCw3ICsyNzAsNyBAQAogCS53cml0ZV9pbm9kZQk9IG5mc193cml0ZV9pbm9kZSwKIAkucHV0X3N1cGVyCT0gbmZzX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IG5mc19zdGF0ZnMsCi0JLmNsZWFyX2lub2RlCT0gbmZzX2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IG5mc19ldmljdF9pbm9kZSwKIAkudW1vdW50X2JlZ2luCT0gbmZzX3Vtb3VudF9iZWdpbiwKIAkuc2hvd19vcHRpb25zCT0gbmZzX3Nob3dfb3B0aW9ucywKIAkuc2hvd19zdGF0cwk9IG5mc19zaG93X3N0YXRzLApAQCAtMzQwLDcgKzM0MCw3IEBACiAJLndyaXRlX2lub2RlCT0gbmZzX3dyaXRlX2lub2RlLAogCS5wdXRfc3VwZXIJPSBuZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gbmZzX3N0YXRmcywKLQkuY2xlYXJfaW5vZGUJPSBuZnM0X2NsZWFyX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IG5mczRfZXZpY3RfaW5vZGUsCiAJLnVtb3VudF9iZWdpbgk9IG5mc191bW91bnRfYmVnaW4sCiAJLnNob3dfb3B0aW9ucwk9IG5mc19zaG93X29wdGlvbnMsCiAJLnNob3dfc3RhdHMJPSBuZnNfc2hvd19zdGF0cywKQEAgLTU0Niw2ICs1NDYsOSBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZuZnNzLT5tb3VudGRfYWRkcmVzczsKIAorCWlmIChuZnNzLT5mbGFncyAmIE5GU19NT1VOVF9MRUdBQ1lfSU5URVJGQUNFKQorCQlyZXR1cm47CisKIAlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOiB7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKQEAgLTE3ODAsNiArMTc4Myw3IEBACiAJCSAqIGNhbiBkZWFsIHdpdGguCiAJCSAqLwogCQlhcmdzLT5mbGFncwkJPSBkYXRhLT5mbGFncyAmIE5GU19NT1VOVF9GTEFHTUFTSzsKKwkJYXJncy0+ZmxhZ3MJCXw9IE5GU19NT1VOVF9MRUdBQ1lfSU5URVJGQUNFOwogCQlhcmdzLT5yc2l6ZQkJPSBkYXRhLT5yc2l6ZTsKIAkJYXJncy0+d3NpemUJCT0gZGF0YS0+d3NpemU7CiAJCWFyZ3MtPnRpbWVvCQk9IGRhdGEtPnRpbWVvOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3VubGluay5jIGIvZnMvbmZzL3VubGluay5jCmluZGV4IGEyMjQyYWYuLjJmODRhZGEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy91bmxpbmsuYworKysgYi9mcy9uZnMvdW5saW5rLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCXN0cnVjdCBuZnNfdW5saW5rZGF0YSAqZGF0YSA9IGNhbGxkYXRhOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRhdGEtPmRpcik7CiAKLQlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZShzZXJ2ZXItPm5mc19jbGllbnQsICZkYXRhLT5hcmdzLnNlcV9hcmdzLAorCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKHNlcnZlciwgJmRhdGEtPmFyZ3Muc2VxX2FyZ3MsCiAJCQkJJmRhdGEtPnJlcy5zZXFfcmVzLCAxLCB0YXNrKSkKIAkJcmV0dXJuOwogCXJwY19jYWxsX3N0YXJ0KHRhc2spOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCA5ZjgxYmRkLi44NzQ5NzJkIDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtNzAwLDcgKzcwMCw5IEBACiAJCXJlcSA9IG5mc19wYWdlX2ZpbmRfcmVxdWVzdChwYWdlKTsKIAkJaWYgKHJlcSA9PSBOVUxMKQogCQkJcmV0dXJuIDA7Ci0JCWRvX2ZsdXNoID0gcmVxLT53Yl9wYWdlICE9IHBhZ2UgfHwgcmVxLT53Yl9jb250ZXh0ICE9IGN0eDsKKwkJZG9fZmx1c2ggPSByZXEtPndiX3BhZ2UgIT0gcGFnZSB8fCByZXEtPndiX2NvbnRleHQgIT0gY3R4IHx8CisJCQlyZXEtPndiX2xvY2tfY29udGV4dC0+bG9ja293bmVyICE9IGN1cnJlbnQtPmZpbGVzIHx8CisJCQlyZXEtPndiX2xvY2tfY29udGV4dC0+cGlkICE9IGN1cnJlbnQtPnRnaWQ7CiAJCW5mc19yZWxlYXNlX3JlcXVlc3QocmVxKTsKIAkJaWYgKCFkb19mbHVzaCkKIAkJCXJldHVybiAwOwpAQCAtODI0LDYgKzgyNiw3IEBACiAJZGF0YS0+YXJncy5wYWdlcyAgPSBkYXRhLT5wYWdldmVjOwogCWRhdGEtPmFyZ3MuY291bnQgID0gY291bnQ7CiAJZGF0YS0+YXJncy5jb250ZXh0ID0gZ2V0X25mc19vcGVuX2NvbnRleHQocmVxLT53Yl9jb250ZXh0KTsKKwlkYXRhLT5hcmdzLmxvY2tfY29udGV4dCA9IHJlcS0+d2JfbG9ja19jb250ZXh0OwogCWRhdGEtPmFyZ3Muc3RhYmxlICA9IE5GU19VTlNUQUJMRTsKIAlpZiAoaG93ICYgRkxVU0hfU1RBQkxFKSB7CiAJCWRhdGEtPmFyZ3Muc3RhYmxlID0gTkZTX0RBVEFfU1lOQzsKQEAgLTEwNDcsOSArMTA1MCw5IEBACiB2b2lkIG5mc193cml0ZV9wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICpkYXRhID0gY2FsbGRhdGE7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscCA9IChORlNfU0VSVkVSKGRhdGEtPmlub2RlKSktPm5mc19jbGllbnQ7CiAKLQlpZiAobmZzNF9zZXR1cF9zZXF1ZW5jZShjbHAsICZkYXRhLT5hcmdzLnNlcV9hcmdzLAorCWlmIChuZnM0X3NldHVwX3NlcXVlbmNlKE5GU19TRVJWRVIoZGF0YS0+aW5vZGUpLAorCQkJCSZkYXRhLT5hcmdzLnNlcV9hcmdzLAogCQkJCSZkYXRhLT5yZXMuc2VxX3JlcywgMSwgdGFzaykpCiAJCXJldHVybjsKIAlycGNfY2FsbF9zdGFydCh0YXNrKTsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzM3Byb2MuYyBiL2ZzL25mc2QvbmZzM3Byb2MuYwppbmRleCAzZDY4ZjQ1Li41YjdlMzAyIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczNwcm9jLmMKKysrIGIvZnMvbmZzZC9uZnMzcHJvYy5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAlzdmNfcmVzZXJ2ZV9hdXRoKHJxc3RwLCAoKDEgKyBORlMzX1BPU1RfT1BfQVRUUl9XT1JEUyArIDMpPDwyKSArIHJlc3AtPmNvdW50ICs0KTsKIAogCWZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpOwotCW5mc2VyciA9IG5mc2RfcmVhZChycXN0cCwgJnJlc3AtPmZoLCBOVUxMLAorCW5mc2VyciA9IG5mc2RfcmVhZChycXN0cCwgJnJlc3AtPmZoLAogCQkJCSAgYXJncC0+b2Zmc2V0LAogCQkJICAgCSAgcnFzdHAtPnJxX3ZlYywgYXJncC0+dmxlbiwKIAkJCQkgICZyZXNwLT5jb3VudCk7CkBAIC0yNzEsNyArMjcxLDcgQEAKIAlmaF9pbml0KCZyZXNwLT5maCwgTkZTM19GSFNJWkUpOwogCW5mc2VyciA9IG5mc2RfY3JlYXRlKHJxc3RwLCAmcmVzcC0+ZGlyZmgsIGFyZ3AtPm5hbWUsIGFyZ3AtPmxlbiwKIAkJCQkgICAgJmFyZ3AtPmF0dHJzLCBTX0lGRElSLCAwLCAmcmVzcC0+ZmgpOwotCisJZmhfdW5sb2NrKCZyZXNwLT5kaXJmaCk7CiAJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogfQogCkBAIC0zMjcsNyArMzI3LDcgQEAKIAl0eXBlID0gbmZzM19mdHlwZXNbYXJncC0+ZnR5cGVdOwogCW5mc2VyciA9IG5mc2RfY3JlYXRlKHJxc3RwLCAmcmVzcC0+ZGlyZmgsIGFyZ3AtPm5hbWUsIGFyZ3AtPmxlbiwKIAkJCQkgICAgJmFyZ3AtPmF0dHJzLCB0eXBlLCByZGV2LCAmcmVzcC0+ZmgpOwotCisJZmhfdW5sb2NrKCZyZXNwLT5kaXJmaCk7CiAJUkVUVVJOX1NUQVRVUyhuZnNlcnIpOwogfQogCkBAIC0zNDgsNiArMzQ4LDcgQEAKIAkvKiBVbmxpbmsuIC1TX0lGRElSIG1lYW5zIGZpbGUgbXVzdCBub3QgYmUgYSBkaXJlY3RvcnkgKi8KIAlmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKTsKIAluZnNlcnIgPSBuZnNkX3VubGluayhycXN0cCwgJnJlc3AtPmZoLCAtU19JRkRJUiwgYXJncC0+bmFtZSwgYXJncC0+bGVuKTsKKwlmaF91bmxvY2soJnJlc3AtPmZoKTsKIAlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiB9CiAKQEAgLTM2Nyw2ICszNjgsNyBAQAogCiAJZmhfY29weSgmcmVzcC0+ZmgsICZhcmdwLT5maCk7CiAJbmZzZXJyID0gbmZzZF91bmxpbmsocnFzdHAsICZyZXNwLT5maCwgU19JRkRJUiwgYXJncC0+bmFtZSwgYXJncC0+bGVuKTsKKwlmaF91bmxvY2soJnJlc3AtPmZoKTsKIAlSRVRVUk5fU1RBVFVTKG5mc2Vycik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IGViNzhlN2UuLjk4OGNiYjMgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtMTQzLDggKzE0Myw2IEBACiAJdTMyCQltaW5vcnZlcnNpb247CiAJLyogcmVzICovCiAJaW50CQlzdGF0dXM7Ci0JdTMyCQl0YWdsZW47Ci0JY2hhcgkJKnRhZzsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMjA1LDYgKzIwMywxNiBAQAogICovCiAKIHN0YXRpYyB2b2lkCitlbmNvZGVfc3RhdGVpZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdGF0ZWlkX3QgKnNpZCkKK3sKKwlfX2JlMzIgKnA7CisKKwlSRVNFUlZFX1NQQUNFKHNpemVvZihzdGF0ZWlkX3QpKTsKKwlXUklURTMyKHNpZC0+c2lfZ2VuZXJhdGlvbik7CisJV1JJVEVNRU0oJnNpZC0+c2lfb3BhcXVlLCBzaXplb2Yoc3RhdGVpZF9vcGFxdWVfdCkpOworfQorCitzdGF0aWMgdm9pZAogZW5jb2RlX2NiX2NvbXBvdW5kX2hkcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzNF9jYl9jb21wb3VuZF9oZHIgKmhkcikKIHsKIAlfX2JlMzIgKiBwOwpAQCAtMjI5LDEwICsyMzcsMTAgQEAKIAlfX2JlMzIgKnA7CiAJaW50IGxlbiA9IGRwLT5kbF9maC5maF9zaXplOwogCi0JUkVTRVJWRV9TUEFDRSgxMitzaXplb2YoZHAtPmRsX3N0YXRlaWQpICsgbGVuKTsKKwlSRVNFUlZFX1NQQUNFKDQpOwogCVdSSVRFMzIoT1BfQ0JfUkVDQUxMKTsKLQlXUklURTMyKGRwLT5kbF9zdGF0ZWlkLnNpX2dlbmVyYXRpb24pOwotCVdSSVRFTUVNKCZkcC0+ZGxfc3RhdGVpZC5zaV9vcGFxdWUsIHNpemVvZihzdGF0ZWlkX29wYXF1ZV90KSk7CisJZW5jb2RlX3N0YXRlaWQoeGRyLCAmZHAtPmRsX3N0YXRlaWQpOworCVJFU0VSVkVfU1BBQ0UoOCArIChYRFJfUVVBRExFTihsZW4pIDw8IDIpKTsKIAlXUklURTMyKDApOyAvKiB0cnVuY2F0ZSBvcHRpbWl6YXRpb24gbm90IGltcGxlbWVudGVkICovCiAJV1JJVEUzMihsZW4pOwogCVdSSVRFTUVNKCZkcC0+ZGxfZmguZmhfYmFzZSwgbGVuKTsKQEAgLTI5MywxMyArMzAxLDE0IEBACiBzdGF0aWMgaW50CiBkZWNvZGVfY2JfY29tcG91bmRfaGRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnM0X2NiX2NvbXBvdW5kX2hkciAqaGRyKXsKICAgICAgICAgX19iZTMyICpwOworCXUzMiB0YWdsZW47CiAKICAgICAgICAgUkVBRF9CVUYoOCk7CiAgICAgICAgIFJFQUQzMihoZHItPnN0YXR1cyk7Ci0gICAgICAgIFJFQUQzMihoZHItPnRhZ2xlbik7Ci0gICAgICAgIFJFQURfQlVGKGhkci0+dGFnbGVuICsgNCk7Ci0gICAgICAgIGhkci0+dGFnID0gKGNoYXIgKilwOwotICAgICAgICBwICs9IFhEUl9RVUFETEVOKGhkci0+dGFnbGVuKTsKKwkvKiBXZSd2ZSBnb3Qgbm8gdXNlIGZvciB0aGUgdGFnOyBpZ25vcmUgaXQ6ICovCisgICAgICAgIFJFQUQzMih0YWdsZW4pOworICAgICAgICBSRUFEX0JVRih0YWdsZW4gKyA0KTsKKyAgICAgICAgcCArPSBYRFJfUVVBRExFTih0YWdsZW4pOwogICAgICAgICBSRUFEMzIoaGRyLT5ub3BzKTsKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC02NjcsMjggKzY3NiwyOCBAQAogCX0KIAogCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7Ci0JY2FzZSAtRUlPOgotCQkvKiBOZXR3b3JrIHBhcnRpdGlvbj8gKi8KLQkJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9zZXQsIDApOwotCQl3YXJuX25vX2NhbGxiYWNrX3BhdGgoY2xwLCB0YXNrLT50a19zdGF0dXMpOwotCQlpZiAoY3VycmVudF9ycGNfY2xpZW50ICE9IHRhc2stPnRrX2NsaWVudCkgewotCQkJLyogcXVldWUgYSBjYWxsYmFjayBvbiB0aGUgbmV3IGNvbm5lY3Rpb246ICovCi0JCQluZnNkNF9jYl9yZWNhbGwoZHApOwotCQkJcmV0dXJuOwotCQl9CisJY2FzZSAwOgorCQlyZXR1cm47CiAJY2FzZSAtRUJBREhBTkRMRToKIAljYXNlIC1ORlM0RVJSX0JBRF9TVEFURUlEOgogCQkvKiBSYWNlOiBjbGllbnQgcHJvYmFibHkgZ290IGNiX3JlY2FsbAogCQkgKiBiZWZvcmUgb3BlbiByZXBseSBncmFudGluZyBkZWxlZ2F0aW9uICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIHN1Y2Nlc3MsIG9yIGVycm9yIHdlIGNhbid0IGhhbmRsZSAqLwotCQlyZXR1cm47CisJCS8qIE5ldHdvcmsgcGFydGl0aW9uPyAqLworCQlhdG9taWNfc2V0KCZjbHAtPmNsX2NiX3NldCwgMCk7CisJCXdhcm5fbm9fY2FsbGJhY2tfcGF0aChjbHAsIHRhc2stPnRrX3N0YXR1cyk7CisJCWlmIChjdXJyZW50X3JwY19jbGllbnQgIT0gdGFzay0+dGtfY2xpZW50KSB7CisJCQkvKiBxdWV1ZSBhIGNhbGxiYWNrIG9uIHRoZSBuZXcgY29ubmVjdGlvbjogKi8KKwkJCWF0b21pY19pbmMoJmRwLT5kbF9jb3VudCk7CisJCQluZnNkNF9jYl9yZWNhbGwoZHApOworCQkJcmV0dXJuOworCQl9CiAJfQogCWlmIChkcC0+ZGxfcmV0cmllcy0tKSB7CiAJCXJwY19kZWxheSh0YXNrLCAyKkhaKTsKIAkJdGFzay0+dGtfc3RhdHVzID0gMDsKLQkJcnBjX3Jlc3RhcnRfY2FsbCh0YXNrKTsKKwkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKIAkJYXRvbWljX3NldCgmY2xwLT5jbF9jYl9zZXQsIDApOwpAQCAtNzUyLDE4ICs3NjEsMTYgQEAKIAkJLnJwY19wcm9jID0gJm5mczRfY2JfcHJvY2VkdXJlc1tORlNQUk9DNF9DTE5UX0NCX1JFQ0FMTF0sCiAJCS5ycGNfY3JlZCA9IGNhbGxiYWNrX2NyZWQKIAl9OwotCWludCBzdGF0dXM7CiAKLQlpZiAoY2xudCA9PSBOVUxMKQorCWlmIChjbG50ID09IE5VTEwpIHsKKwkJbmZzNF9wdXRfZGVsZWdhdGlvbihkcCk7CiAJCXJldHVybjsgLyogQ2xpZW50IGlzIHNodXR0aW5nIGRvd247IGdpdmUgdXAuICovCisJfQogCiAJYXJncy0+YXJnc19vcCA9IGRwOwogCW1zZy5ycGNfYXJncCA9IGFyZ3M7CiAJZHAtPmRsX3JldHJpZXMgPSAxOwotCXN0YXR1cyA9IHJwY19jYWxsX2FzeW5jKGNsbnQsICZtc2csIFJQQ19UQVNLX1NPRlQsCi0JCQkJJm5mc2Q0X2NiX3JlY2FsbF9vcHMsIGRwKTsKLQlpZiAoc3RhdHVzKQotCQluZnM0X3B1dF9kZWxlZ2F0aW9uKGRwKTsKKwlycGNfY2FsbF9hc3luYyhjbG50LCAmbXNnLCBSUENfVEFTS19TT0ZULCAmbmZzZDRfY2JfcmVjYWxsX29wcywgZHApOwogfQogCiB2b2lkIG5mc2Q0X2RvX2NhbGxiYWNrX3JwYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCA0YTI3MzQ3Li4yZTczNTcxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTUxLDcgKzUxLDYgQEAKIHN0YXRpYyB1MzIgY3VycmVudF9vd25lcmlkID0gMTsKIHN0YXRpYyB1MzIgY3VycmVudF9maWxlaWQgPSAxOwogc3RhdGljIHUzMiBjdXJyZW50X2RlbGVnaWQgPSAxOwotc3RhdGljIHUzMiBuZnM0X2luaXQ7CiBzdGF0aWMgc3RhdGVpZF90IHplcm9zdGF0ZWlkOyAgICAgICAgICAgICAvKiBiaXRzIGFsbCAwICovCiBzdGF0aWMgc3RhdGVpZF90IG9uZXN0YXRlaWQ7ICAgICAgICAgICAgICAvKiBiaXRzIGFsbCAxICovCiBzdGF0aWMgdTY0IGN1cnJlbnRfc2Vzc2lvbmlkID0gMTsKQEAgLTE2Myw2ICsxNjIsNDYgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfaGFzaHRibFtGSUxFX0hBU0hfU0laRV07CiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzdGF0ZWlkX2hhc2h0YmxbU1RBVEVJRF9IQVNIX1NJWkVdOwogCitzdGF0aWMgdm9pZCBfX25mczRfZmlsZV9nZXRfYWNjZXNzKHN0cnVjdCBuZnM0X2ZpbGUgKmZwLCBpbnQgb2ZsYWcpCit7CisJQlVHX09OKCEoZnAtPmZpX2Zkc1tvZmxhZ10gfHwgZnAtPmZpX2Zkc1tPX1JEV1JdKSk7CisJYXRvbWljX2luYygmZnAtPmZpX2FjY2Vzc1tvZmxhZ10pOworfQorCitzdGF0aWMgdm9pZCBuZnM0X2ZpbGVfZ2V0X2FjY2VzcyhzdHJ1Y3QgbmZzNF9maWxlICpmcCwgaW50IG9mbGFnKQoreworCWlmIChvZmxhZyA9PSBPX1JEV1IpIHsKKwkJX19uZnM0X2ZpbGVfZ2V0X2FjY2VzcyhmcCwgT19SRE9OTFkpOworCQlfX25mczRfZmlsZV9nZXRfYWNjZXNzKGZwLCBPX1dST05MWSk7CisJfSBlbHNlCisJCV9fbmZzNF9maWxlX2dldF9hY2Nlc3MoZnAsIG9mbGFnKTsKK30KKworc3RhdGljIHZvaWQgbmZzNF9maWxlX3B1dF9mZChzdHJ1Y3QgbmZzNF9maWxlICpmcCwgaW50IG9mbGFnKQoreworCWlmIChmcC0+ZmlfZmRzW29mbGFnXSkgeworCQlmcHV0KGZwLT5maV9mZHNbb2ZsYWddKTsKKwkJZnAtPmZpX2Zkc1tvZmxhZ10gPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgX19uZnM0X2ZpbGVfcHV0X2FjY2VzcyhzdHJ1Y3QgbmZzNF9maWxlICpmcCwgaW50IG9mbGFnKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcC0+ZmlfYWNjZXNzW29mbGFnXSkpIHsKKwkJbmZzNF9maWxlX3B1dF9mZChmcCwgT19SRFdSKTsKKwkJbmZzNF9maWxlX3B1dF9mZChmcCwgb2ZsYWcpOworCX0KK30KKworc3RhdGljIHZvaWQgbmZzNF9maWxlX3B1dF9hY2Nlc3Moc3RydWN0IG5mczRfZmlsZSAqZnAsIGludCBvZmxhZykKK3sKKwlpZiAob2ZsYWcgPT0gT19SRFdSKSB7CisJCV9fbmZzNF9maWxlX3B1dF9hY2Nlc3MoZnAsIE9fUkRPTkxZKTsKKwkJX19uZnM0X2ZpbGVfcHV0X2FjY2VzcyhmcCwgT19XUk9OTFkpOworCX0gZWxzZQorCQlfX25mczRfZmlsZV9wdXRfYWNjZXNzKGZwLCBvZmxhZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICoKIGFsbG9jX2luaXRfZGVsZWcoc3RydWN0IG5mczRfY2xpZW50ICpjbHAsIHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCwgc3RydWN0IHN2Y19maCAqY3VycmVudF9maCwgdTMyIHR5cGUpCiB7CkBAIC0xNzEsNiArMjEwLDEzIEBACiAJc3RydWN0IG5mczRfY2JfY29ubiAqY2IgPSAmc3RwLT5zdF9zdGF0ZW93bmVyLT5zb19jbGllbnQtPmNsX2NiX2Nvbm47CiAKIAlkcHJpbnRrKCJORlNEIGFsbG9jX2luaXRfZGVsZWdcbiIpOworCS8qCisJICogTWFqb3Igd29yayBvbiB0aGUgbGVhc2Ugc3Vic3lzdGVtIChmb3IgZXhhbXBsZSwgdG8gc3VwcG9ydAorCSAqIGNhbGJhY2tzIG9uIHN0YXQpIHdpbGwgYmUgcmVxdWlyZWQgYmVmb3JlIHdlIGNhbiBzdXBwb3J0CisJICogd3JpdGUgZGVsZWdhdGlvbnMgcHJvcGVybHkuCisJICovCisJaWYgKHR5cGUgIT0gTkZTNF9PUEVOX0RFTEVHQVRFX1JFQUQpCisJCXJldHVybiBOVUxMOwogCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KQogCQlyZXR1cm4gTlVMTDsKIAlpZiAobnVtX2RlbGVnYXRpb25zID4gbWF4X2RlbGVnYXRpb25zKQpAQCAtMTg1LDkgKzIzMSw4IEBACiAJZHAtPmRsX2NsaWVudCA9IGNscDsKIAlnZXRfbmZzNF9maWxlKGZwKTsKIAlkcC0+ZGxfZmlsZSA9IGZwOworCW5mczRfZmlsZV9nZXRfYWNjZXNzKGZwLCBPX1JET05MWSk7CiAJZHAtPmRsX2Zsb2NrID0gTlVMTDsKLQlnZXRfZmlsZShzdHAtPnN0X3Zmc19maWxlKTsKLQlkcC0+ZGxfdmZzX2ZpbGUgPSBzdHAtPnN0X3Zmc19maWxlOwogCWRwLT5kbF90eXBlID0gdHlwZTsKIAlkcC0+ZGxfaWRlbnQgPSBjYi0+Y2JfaWRlbnQ7CiAJZHAtPmRsX3N0YXRlaWQuc2lfYm9vdCA9IGJvb3RfdGltZTsKQEAgLTIyMiwxNSArMjY3LDEyIEBACiBzdGF0aWMgdm9pZAogbmZzNF9jbG9zZV9kZWxlZ2F0aW9uKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwKQogewotCXN0cnVjdCBmaWxlICpmaWxwID0gZHAtPmRsX3Zmc19maWxlOworCXN0cnVjdCBmaWxlICpmaWxwID0gZmluZF9yZWFkYWJsZV9maWxlKGRwLT5kbF9maWxlKTsKIAogCWRwcmludGsoIk5GU0Q6IGNsb3NlX2RlbGVnYXRpb24gZHAgJXBcbiIsZHApOwotCWRwLT5kbF92ZnNfZmlsZSA9IE5VTEw7Ci0JLyogVGhlIGZvbGxvd2luZyBuZnNkX2Nsb3NlIG1heSBub3QgYWN0dWFsbHkgY2xvc2UgdGhlIGZpbGUsCi0JICogYnV0IHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBsZWFzZSBpbiBhbnkgY2FzZS4gKi8KIAlpZiAoZHAtPmRsX2Zsb2NrKQogCQl2ZnNfc2V0bGVhc2UoZmlscCwgRl9VTkxDSywgJmRwLT5kbF9mbG9jayk7Ci0JbmZzZF9jbG9zZShmaWxwKTsKKwluZnM0X2ZpbGVfcHV0X2FjY2VzcyhkcC0+ZGxfZmlsZSwgT19SRE9OTFkpOwogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhlIHN0YXRlIGxvY2suICovCkBAIC0zMDIsOCArMzQ0LDEyIEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfbG9ja19zdGF0ZWlkKHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCkKIHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwogCXVuaGFzaF9nZW5lcmljX3N0YXRlaWQoc3RwKTsKLQlsb2Nrc19yZW1vdmVfcG9zaXgoc3RwLT5zdF92ZnNfZmlsZSwgKGZsX293bmVyX3Qpc3RwLT5zdF9zdGF0ZW93bmVyKTsKKwlmaWxlID0gZmluZF9hbnlfZmlsZShzdHAtPnN0X2ZpbGUpOworCWlmIChmaWxlKQorCQlsb2Nrc19yZW1vdmVfcG9zaXgoZmlsZSwgKGZsX293bmVyX3Qpc3RwLT5zdF9zdGF0ZW93bmVyKTsKIAlmcmVlX2dlbmVyaWNfc3RhdGVpZChzdHApOwogfQogCkBAIC0zNDEsMTEgKzM4Nyw4NSBAQAogCX0KIH0KIAorLyoKKyAqIFdlIHN0b3JlIHRoZSBOT05FLCBSRUFELCBXUklURSwgYW5kIEJPVEggYml0cyBzZXBhcmF0ZWx5IGluIHRoZQorICogc3Rfe2FjY2VzcyxkZW55fV9ibWFwIGZpZWxkIG9mIHRoZSBzdGF0ZWlkLCBpbiBvcmRlciB0byB0cmFjayBub3QKKyAqIG9ubHkgd2hhdCBzaGFyZSBiaXRzIGFyZSBjdXJyZW50bHkgaW4gZm9yY2UsIGJ1dCBhbHNvIHdoYXQKKyAqIGNvbWJpbmF0aW9ucyBvZiBzaGFyZSBiaXRzIHByZXZpb3VzIG9wZW5zIGhhdmUgdXNlZC4gIFRoaXMgYWxsb3dzIHVzCisgKiB0byBlbmZvcmNlIHRoZSByZWNvbW1lbmRhdGlvbiBvZiByZmMgMzUzMCAxNC4yLjE5IHRoYXQgdGhlIHNlcnZlcgorICogcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBjbGllbnQgYXR0ZW1wdCB0byBkb3duZ3JhZGUgdG8gYSBjb21iaW5hdGlvbgorICogb2Ygc2hhcmUgYml0cyBub3QgZXhwbGljYWJsZSBieSBjbG9zaW5nIHNvbWUgb2YgaXRzIHByZXZpb3VzIG9wZW5zLgorICoKKyAqIFhYWDogVGhpcyBlbmZvcmNlbWVudCBpcyBhY3R1YWxseSBpbmNvbXBsZXRlLCBzaW5jZSB3ZSBkb24ndCBrZWVwCisgKiB0cmFjayBvZiBhY2Nlc3MvZGVueSBiaXQgY29tYmluYXRpb25zOyBzbywgZS5nLiwgd2UgYWxsb3c6CisgKgorICoJT1BFTiBhbGxvdyByZWFkLCBkZW55IHdyaXRlCisgKglPUEVOIGFsbG93IGJvdGgsIGRlbnkgbm9uZQorICoJRE9XTkdSQURFIGFsbG93IHJlYWQsIGRlbnkgbm9uZQorICoKKyAqIHdoaWNoIHdlIHNob3VsZCByZWplY3QuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfYWNjZXNzKHVuc2lnbmVkIGludCAqYWNjZXNzLCB1bnNpZ25lZCBsb25nIGJtYXApIHsKKwlpbnQgaTsKKworCSphY2Nlc3MgPSAwOworCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICZibWFwKSkKKwkJCSphY2Nlc3MgfD0gaTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfZGVueSh1bnNpZ25lZCBpbnQgKmRlbnksIHVuc2lnbmVkIGxvbmcgYm1hcCkgeworCWludCBpOworCisJKmRlbnkgPSAwOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksICZibWFwKSkKKwkJCSpkZW55IHw9IGkgOworCX0KK30KKworc3RhdGljIGludAordGVzdF9zaGFyZShzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHAsIHN0cnVjdCBuZnNkNF9vcGVuICpvcGVuKSB7CisJdW5zaWduZWQgaW50IGFjY2VzcywgZGVueTsKKworCXNldF9hY2Nlc3MoJmFjY2Vzcywgc3RwLT5zdF9hY2Nlc3NfYm1hcCk7CisJc2V0X2RlbnkoJmRlbnksIHN0cC0+c3RfZGVueV9ibWFwKTsKKwlpZiAoKGFjY2VzcyAmIG9wZW4tPm9wX3NoYXJlX2RlbnkpIHx8IChkZW55ICYgb3Blbi0+b3Bfc2hhcmVfYWNjZXNzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmZzNF9hY2Nlc3NfdG9fb21vZGUodTMyIGFjY2VzcykKK3sKKwlzd2l0Y2ggKGFjY2VzcykgeworCWNhc2UgTkZTNF9TSEFSRV9BQ0NFU1NfUkVBRDoKKwkJcmV0dXJuIE9fUkRPTkxZOworCWNhc2UgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEU6CisJCXJldHVybiBPX1dST05MWTsKKwljYXNlIE5GUzRfU0hBUkVfQUNDRVNTX0JPVEg6CisJCXJldHVybiBPX1JEV1I7CisJfQorCUJVRygpOworfQorCitzdGF0aWMgaW50IG5mczRfYWNjZXNzX2JtYXBfdG9fb21vZGUoc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwKQoreworCXVuc2lnbmVkIGludCBhY2Nlc3M7CisKKwlzZXRfYWNjZXNzKCZhY2Nlc3MsIHN0cC0+c3RfYWNjZXNzX2JtYXApOworCXJldHVybiBuZnM0X2FjY2Vzc190b19vbW9kZShhY2Nlc3MpOworfQorCiBzdGF0aWMgdm9pZCByZWxlYXNlX29wZW5fc3RhdGVpZChzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHApCiB7CisJaW50IG9mbGFnID0gbmZzNF9hY2Nlc3NfYm1hcF90b19vbW9kZShzdHApOworCiAJdW5oYXNoX2dlbmVyaWNfc3RhdGVpZChzdHApOwogCXJlbGVhc2Vfc3RhdGVpZF9sb2Nrb3duZXJzKHN0cCk7Ci0JbmZzZF9jbG9zZShzdHAtPnN0X3Zmc19maWxlKTsKKwluZnM0X2ZpbGVfcHV0X2FjY2VzcyhzdHAtPnN0X2ZpbGUsIG9mbGFnKTsKIAlmcmVlX2dlbmVyaWNfc3RhdGVpZChzdHApOwogfQogCkBAIC00NTcsNyArNTc3LDcgQEAKIAlzcGluX3VubG9jaygmbmZzZF9kcmNfbG9jayk7CiAKIAlpZiAoZmNoYW4tPm1heHJlcXMgPT0gMCkKLQkJcmV0dXJuIG5mc2Vycl9zZXJ2ZXJmYXVsdDsKKwkJcmV0dXJuIG5mc2Vycl9qdWtlYm94OwogCiAJZmNoYW4tPm1heHJlc3BfY2FjaGVkID0gc2l6ZSArIE5GU0RfTUlOX0hEUl9TRVFfU1o7CiAJcmV0dXJuIDA7CkBAIC01NDIsNyArNjYyLDcgQEAKIAlCVUlMRF9CVUdfT04oTkZTRF9NQVhfU0xPVFNfUEVSX1NFU1NJT04gKiBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nsb3QpCiAJCSAgICAgKyBzaXplb2Yoc3RydWN0IG5mc2Q0X3Nlc3Npb24pID4gUEFHRV9TSVpFKTsKIAotCXN0YXR1cyA9IG5mc2Vycl9zZXJ2ZXJmYXVsdDsKKwlzdGF0dXMgPSBuZnNlcnJfanVrZWJveDsKIAkvKiBhbGxvY2F0ZSBzdHJ1Y3QgbmZzZDRfc2Vzc2lvbiBhbmQgc2xvdCB0YWJsZSBwb2ludGVycyBpbiBvbmUgcGllY2UgKi8KIAlzbG90c2l6ZSA9IHRtcC5zZV9mY2hhbm5lbC5tYXhyZXFzICogc2l6ZW9mKHN0cnVjdCBuZnNkNF9zbG90ICopOwogCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKCpuZXcpICsgc2xvdHNpemUsIEdGUF9LRVJORUwpOwpAQCAtNTkxLDEwICs3MTEsOCBAQAogCiAJZHVtcF9zZXNzaW9uaWQoX19mdW5jX18sIHNlc3Npb25pZCk7CiAJaWR4ID0gaGFzaF9zZXNzaW9uaWQoc2Vzc2lvbmlkKTsKLQlkcHJpbnRrKCIlczogaWR4IGlzICVkXG4iLCBfX2Z1bmNfXywgaWR4KTsKIAkvKiBTZWFyY2ggaW4gdGhlIGFwcHJvcHJpYXRlIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVsZW0sICZzZXNzaW9uaWRfaGFzaHRibFtpZHhdLCBzZV9oYXNoKSB7Ci0JCWR1bXBfc2Vzc2lvbmlkKCJsaXN0IHRyYXZlcnNhbCIsICZlbGVtLT5zZV9zZXNzaW9uaWQpOwogCQlpZiAoIW1lbWNtcChlbGVtLT5zZV9zZXNzaW9uaWQuZGF0YSwgc2Vzc2lvbmlkLT5kYXRhLAogCQkJICAgIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pKSB7CiAJCQlyZXR1cm4gZWxlbTsKQEAgLTcxNCw3ICs4MzIsNiBAQAogCX0gZWxzZQogCQlyZW5ld19jbGllbnRfbG9ja2VkKGNscCk7CiAJc3Bpbl91bmxvY2soJmNsaWVudF9sb2NrKTsKLQluZnNkNF9wdXRfc2Vzc2lvbihzZXNzaW9uKTsKIH0KIAogLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNsaWVudF9sb2NrICovCkBAIC0xMjIwLDcgKzEzMzcsNyBAQAogCS8qIE5vcm1hbCBjYXNlICovCiAJbmV3ID0gY3JlYXRlX2NsaWVudChleGlkLT5jbG5hbWUsIGRuYW1lLCBycXN0cCwgJnZlcmYpOwogCWlmIChuZXcgPT0gTlVMTCkgewotCQlzdGF0dXMgPSBuZnNlcnJfc2VydmVyZmF1bHQ7CisJCXN0YXR1cyA9IG5mc2Vycl9qdWtlYm94OwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3NjAsNiArMTg3Nyw4IEBACiAJCWZwLT5maV9pbm9kZSA9IGlncmFiKGlubyk7CiAJCWZwLT5maV9pZCA9IGN1cnJlbnRfZmlsZWlkKys7CiAJCWZwLT5maV9oYWRfY29uZmxpY3QgPSBmYWxzZTsKKwkJbWVtc2V0KGZwLT5maV9mZHMsIDAsIHNpemVvZihmcC0+ZmlfZmRzKSk7CisJCW1lbXNldChmcC0+ZmlfYWNjZXNzLCAwLCBzaXplb2YoZnAtPmZpX2FjY2VzcykpOwogCQlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKIAkJbGlzdF9hZGQoJmZwLT5maV9oYXNoLCAmZmlsZV9oYXNodGJsW2hhc2h2YWxdKTsKIAkJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTE5NzEsNTcgKzIwOTAsNiBAQAogfQogCiAvKgotICogV2Ugc3RvcmUgdGhlIE5PTkUsIFJFQUQsIFdSSVRFLCBhbmQgQk9USCBiaXRzIHNlcGFyYXRlbHkgaW4gdGhlCi0gKiBzdF97YWNjZXNzLGRlbnl9X2JtYXAgZmllbGQgb2YgdGhlIHN0YXRlaWQsIGluIG9yZGVyIHRvIHRyYWNrIG5vdAotICogb25seSB3aGF0IHNoYXJlIGJpdHMgYXJlIGN1cnJlbnRseSBpbiBmb3JjZSwgYnV0IGFsc28gd2hhdAotICogY29tYmluYXRpb25zIG9mIHNoYXJlIGJpdHMgcHJldmlvdXMgb3BlbnMgaGF2ZSB1c2VkLiAgVGhpcyBhbGxvd3MgdXMKLSAqIHRvIGVuZm9yY2UgdGhlIHJlY29tbWVuZGF0aW9uIG9mIHJmYyAzNTMwIDE0LjIuMTkgdGhhdCB0aGUgc2VydmVyCi0gKiByZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNsaWVudCBhdHRlbXB0IHRvIGRvd25ncmFkZSB0byBhIGNvbWJpbmF0aW9uCi0gKiBvZiBzaGFyZSBiaXRzIG5vdCBleHBsaWNhYmxlIGJ5IGNsb3Npbmcgc29tZSBvZiBpdHMgcHJldmlvdXMgb3BlbnMuCi0gKgotICogWFhYOiBUaGlzIGVuZm9yY2VtZW50IGlzIGFjdHVhbGx5IGluY29tcGxldGUsIHNpbmNlIHdlIGRvbid0IGtlZXAKLSAqIHRyYWNrIG9mIGFjY2Vzcy9kZW55IGJpdCBjb21iaW5hdGlvbnM7IHNvLCBlLmcuLCB3ZSBhbGxvdzoKLSAqCi0gKglPUEVOIGFsbG93IHJlYWQsIGRlbnkgd3JpdGUKLSAqCU9QRU4gYWxsb3cgYm90aCwgZGVueSBub25lCi0gKglET1dOR1JBREUgYWxsb3cgcmVhZCwgZGVueSBub25lCi0gKgotICogd2hpY2ggd2Ugc2hvdWxkIHJlamVjdC4KLSAqLwotc3RhdGljIHZvaWQKLXNldF9hY2Nlc3ModW5zaWduZWQgaW50ICphY2Nlc3MsIHVuc2lnbmVkIGxvbmcgYm1hcCkgewotCWludCBpOwotCi0JKmFjY2VzcyA9IDA7Ci0JZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgJmJtYXApKQotCQkJKmFjY2VzcyB8PSBpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNldF9kZW55KHVuc2lnbmVkIGludCAqZGVueSwgdW5zaWduZWQgbG9uZyBibWFwKSB7Ci0JaW50IGk7Ci0KLQkqZGVueSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgJmJtYXApKQotCQkJKmRlbnkgfD0gaSA7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci10ZXN0X3NoYXJlKHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pIHsKLQl1bnNpZ25lZCBpbnQgYWNjZXNzLCBkZW55OwotCi0Jc2V0X2FjY2VzcygmYWNjZXNzLCBzdHAtPnN0X2FjY2Vzc19ibWFwKTsKLQlzZXRfZGVueSgmZGVueSwgc3RwLT5zdF9kZW55X2JtYXApOwotCWlmICgoYWNjZXNzICYgb3Blbi0+b3Bfc2hhcmVfZGVueSkgfHwgKGRlbnkgJiBvcGVuLT5vcF9zaGFyZV9hY2Nlc3MpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyoKICAqIENhbGxlZCB0byBjaGVjayBkZW55IHdoZW4gUkVBRCB3aXRoIGFsbCB6ZXJvIHN0YXRlaWQgb3IKICAqIFdSSVRFIHdpdGggYWxsIHplcm8gb3IgYWxsIG9uZSBzdGF0ZWlkCiAgKi8KQEAgLTIwNTIsMTQgKzIxMjAsMTIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1uZnM0X2ZpbGVfZG93bmdyYWRlKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgc2hhcmVfYWNjZXNzKQorbmZzNF9maWxlX2Rvd25ncmFkZShzdHJ1Y3QgbmZzNF9maWxlICpmcCwgdW5zaWduZWQgaW50IHNoYXJlX2FjY2VzcykKIHsKLQlpZiAoc2hhcmVfYWNjZXNzICYgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpIHsKLQkJZHJvcF9maWxlX3dyaXRlX2FjY2VzcyhmaWxwKTsKLQkJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwotCQlmaWxwLT5mX21vZGUgPSAoZmlscC0+Zl9tb2RlIHwgRk1PREVfUkVBRCkgJiB+Rk1PREVfV1JJVEU7Ci0JCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwotCX0KKwlpZiAoc2hhcmVfYWNjZXNzICYgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpCisJCW5mczRfZmlsZV9wdXRfYWNjZXNzKGZwLCBPX1dST05MWSk7CisJaWYgKHNoYXJlX2FjY2VzcyAmIE5GUzRfU0hBUkVfQUNDRVNTX1JFQUQpCisJCW5mczRfZmlsZV9wdXRfYWNjZXNzKGZwLCBPX1JET05MWSk7CiB9CiAKIC8qCkBAIC0yMjU1LDYgKzIzMjEsMTMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAoraW50IHNoYXJlX2FjY2Vzc190b19mbGFncyh1MzIgc2hhcmVfYWNjZXNzKQoreworCXNoYXJlX2FjY2VzcyAmPSB+TkZTNF9TSEFSRV9XQU5UX01BU0s7CisKKwlyZXR1cm4gc2hhcmVfYWNjZXNzID09IE5GUzRfU0hBUkVfQUNDRVNTX1JFQUQgPyBSRF9TVEFURSA6IFdSX1NUQVRFOworfQorCiBzdGF0aWMgX19iZTMyCiBuZnM0X2NoZWNrX2RlbGVnKHN0cnVjdCBuZnM0X2ZpbGUgKmZwLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbiwKIAkJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqKmRwKQpAQCAtMjI2NSw4ICsyMzM4LDcgQEAKIAkqZHAgPSBmaW5kX2RlbGVnYXRpb25fZmlsZShmcCwgJm9wZW4tPm9wX2RlbGVnYXRlX3N0YXRlaWQpOwogCWlmICgqZHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7Ci0JZmxhZ3MgPSBvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgPT0gTkZTNF9TSEFSRV9BQ0NFU1NfUkVBRCA/Ci0JCQkJCQlSRF9TVEFURSA6IFdSX1NUQVRFOworCWZsYWdzID0gc2hhcmVfYWNjZXNzX3RvX2ZsYWdzKG9wZW4tPm9wX3NoYXJlX2FjY2Vzcyk7CiAJc3RhdHVzID0gbmZzNF9jaGVja19kZWxlZ21vZGUoKmRwLCBmbGFncyk7CiAJaWYgKHN0YXR1cykKIAkJKmRwID0gTlVMTDsKQEAgLTIzMDgsMzAgKzIzODAsNTMgQEAKIAlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhzdGF0ZWlkX3NsYWIsIEdGUF9LRVJORUwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZnM0X2FjY2Vzc190b19hY2Nlc3ModTMyIG5mczRfYWNjZXNzKQoreworCWludCBmbGFncyA9IDA7CisKKwlpZiAobmZzNF9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19SRUFEKQorCQlmbGFncyB8PSBORlNEX01BWV9SRUFEOworCWlmIChuZnM0X2FjY2VzcyAmIE5GUzRfU0hBUkVfQUNDRVNTX1dSSVRFKQorCQlmbGFncyB8PSBORlNEX01BWV9XUklURTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBfX2JlMzIgbmZzNF9nZXRfdmZzX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mczRfZmlsZQorKmZwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJfZmgsIHUzMiBuZnM0X2FjY2VzcykKK3sKKwlfX2JlMzIgc3RhdHVzOworCWludCBvZmxhZyA9IG5mczRfYWNjZXNzX3RvX29tb2RlKG5mczRfYWNjZXNzKTsKKwlpbnQgYWNjZXNzID0gbmZzNF9hY2Nlc3NfdG9fYWNjZXNzKG5mczRfYWNjZXNzKTsKKworCWlmICghZnAtPmZpX2Zkc1tvZmxhZ10pIHsKKwkJc3RhdHVzID0gbmZzZF9vcGVuKHJxc3RwLCBjdXJfZmgsIFNfSUZSRUcsIGFjY2VzcywKKwkJCSZmcC0+ZmlfZmRzW29mbGFnXSk7CisJCWlmIChzdGF0dXMgPT0gbmZzZXJyX2Ryb3BpdCkKKwkJCXN0YXR1cyA9IG5mc2Vycl9qdWtlYm94OworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisJbmZzNF9maWxlX2dldF9hY2Nlc3MoZnAsIG9mbGFnKTsKKworCXJldHVybiBuZnNfb2s7Cit9CisKIHN0YXRpYyBfX2JlMzIKIG5mczRfbmV3X29wZW4oc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IG5mczRfc3RhdGVpZCAqKnN0cHAsCi0JCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwLAotCQlzdHJ1Y3Qgc3ZjX2ZoICpjdXJfZmgsIGludCBmbGFncykKKwkJc3RydWN0IG5mczRfZmlsZSAqZnAsIHN0cnVjdCBzdmNfZmggKmN1cl9maCwKKwkJc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pCiB7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwOworCV9fYmUzMiBzdGF0dXM7CiAKIAlzdHAgPSBuZnM0X2FsbG9jX3N0YXRlaWQoKTsKIAlpZiAoc3RwID09IE5VTEwpCiAJCXJldHVybiBuZnNlcnJfcmVzb3VyY2U7CiAKLQlpZiAoZHApIHsKLQkJZ2V0X2ZpbGUoZHAtPmRsX3Zmc19maWxlKTsKLQkJc3RwLT5zdF92ZnNfZmlsZSA9IGRwLT5kbF92ZnNfZmlsZTsKLQl9IGVsc2UgewotCQlfX2JlMzIgc3RhdHVzOwotCQlzdGF0dXMgPSBuZnNkX29wZW4ocnFzdHAsIGN1cl9maCwgU19JRlJFRywgZmxhZ3MsCi0JCQkJJnN0cC0+c3RfdmZzX2ZpbGUpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlpZiAoc3RhdHVzID09IG5mc2Vycl9kcm9waXQpCi0JCQkJc3RhdHVzID0gbmZzZXJyX2p1a2Vib3g7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUoc3RhdGVpZF9zbGFiLCBzdHApOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQorCXN0YXR1cyA9IG5mczRfZ2V0X3Zmc19maWxlKHJxc3RwLCBmcCwgY3VyX2ZoLCBvcGVuLT5vcF9zaGFyZV9hY2Nlc3MpOworCWlmIChzdGF0dXMpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHN0YXRlaWRfc2xhYiwgc3RwKTsKKwkJcmV0dXJuIHN0YXR1czsKIAl9CiAJKnN0cHAgPSBzdHA7CiAJcmV0dXJuIDA7CkBAIC0yMzUzLDM1ICsyNDQ4LDMwIEBACiB9CiAKIHN0YXRpYyBfX2JlMzIKLW5mczRfdXBncmFkZV9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmN1cl9maCwgc3RydWN0IG5mczRfc3RhdGVpZCAqc3RwLCBzdHJ1Y3QgbmZzZDRfb3BlbiAqb3BlbikKK25mczRfdXBncmFkZV9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBuZnM0X2ZpbGUgKmZwLCBzdHJ1Y3Qgc3ZjX2ZoICpjdXJfZmgsIHN0cnVjdCBuZnM0X3N0YXRlaWQgKnN0cCwgc3RydWN0IG5mc2Q0X29wZW4gKm9wZW4pCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbHAgPSBzdHAtPnN0X3Zmc19maWxlOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXVuc2lnbmVkIGludCBzaGFyZV9hY2Nlc3MsIG5ld193cml0ZXI7CisJdTMyIG9wX3NoYXJlX2FjY2VzcywgbmV3X2FjY2VzczsKIAlfX2JlMzIgc3RhdHVzOwogCi0Jc2V0X2FjY2Vzcygmc2hhcmVfYWNjZXNzLCBzdHAtPnN0X2FjY2Vzc19ibWFwKTsKLQluZXdfd3JpdGVyID0gKH5zaGFyZV9hY2Nlc3MpICYgb3Blbi0+b3Bfc2hhcmVfYWNjZXNzCi0JCQkmIE5GUzRfU0hBUkVfQUNDRVNTX1dSSVRFOworCXNldF9hY2Nlc3MoJm5ld19hY2Nlc3MsIHN0cC0+c3RfYWNjZXNzX2JtYXApOworCW5ld19hY2Nlc3MgPSAofm5ld19hY2Nlc3MpICYgb3Blbi0+b3Bfc2hhcmVfYWNjZXNzICYgfk5GUzRfU0hBUkVfV0FOVF9NQVNLOwogCi0JaWYgKG5ld193cml0ZXIpIHsKLQkJaW50IGVyciA9IGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIG5mc2Vycm5vKGVycik7Ci0JCWVyciA9IG1udF93YW50X3dyaXRlKGN1cl9maC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gbmZzZXJybm8oZXJyKTsKLQkJZmlsZV90YWtlX3dyaXRlKGZpbHApOworCWlmIChuZXdfYWNjZXNzKSB7CisJCXN0YXR1cyA9IG5mczRfZ2V0X3Zmc19maWxlKHJxc3RwLCBmcCwgY3VyX2ZoLCBuZXdfYWNjZXNzKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CiAJfQogCXN0YXR1cyA9IG5mc2Q0X3RydW5jYXRlKHJxc3RwLCBjdXJfZmgsIG9wZW4pOwogCWlmIChzdGF0dXMpIHsKLQkJaWYgKG5ld193cml0ZXIpCi0JCQlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKKwkJaWYgKG5ld19hY2Nlc3MpIHsKKwkJCWludCBvZmxhZyA9IG5mczRfYWNjZXNzX3RvX29tb2RlKG5ld19hY2Nlc3MpOworCQkJbmZzNF9maWxlX3B1dF9hY2Nlc3MoZnAsIG9mbGFnKTsKKwkJfQogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAkvKiByZW1lbWJlciB0aGUgb3BlbiAqLwotCWZpbHAtPmZfbW9kZSB8PSBvcGVuLT5vcF9zaGFyZV9hY2Nlc3M7Ci0JX19zZXRfYml0KG9wZW4tPm9wX3NoYXJlX2FjY2VzcywgJnN0cC0+c3RfYWNjZXNzX2JtYXApOworCW9wX3NoYXJlX2FjY2VzcyA9IG9wZW4tPm9wX3NoYXJlX2FjY2VzcyAmIH5ORlM0X1NIQVJFX1dBTlRfTUFTSzsKKwlfX3NldF9iaXQob3Bfc2hhcmVfYWNjZXNzLCAmc3RwLT5zdF9hY2Nlc3NfYm1hcCk7CiAJX19zZXRfYml0KG9wZW4tPm9wX3NoYXJlX2RlbnksICZzdHAtPnN0X2RlbnlfYm1hcCk7CiAKIAlyZXR1cm4gbmZzX29rOwpAQCAtMjQ0NCwxMyArMjUzNCwxNCBAQAogCWZsLmZsX3R5cGUgPSBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEPyBGX1JETENLOiBGX1dSTENLOwogCWZsLmZsX2VuZCA9IE9GRlNFVF9NQVg7CiAJZmwuZmxfb3duZXIgPSAgKGZsX293bmVyX3QpZHA7Ci0JZmwuZmxfZmlsZSA9IHN0cC0+c3RfdmZzX2ZpbGU7CisJZmwuZmxfZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOworCUJVR19PTighZmwuZmxfZmlsZSk7CiAJZmwuZmxfcGlkID0gY3VycmVudC0+dGdpZDsKIAogCS8qIHZmc19zZXRsZWFzZSBjaGVja3MgdG8gc2VlIGlmIGRlbGVnYXRpb24gc2hvdWxkIGJlIGhhbmRlZCBvdXQuCiAJICogdGhlIGxvY2tfbWFuYWdlciBjYWxsYmFja3MgZmxfbXlsZWFzZSBhbmQgZmxfY2hhbmdlIGFyZSB1c2VkCiAJICovCi0JaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2Uoc3RwLT5zdF92ZnNfZmlsZSwgZmwuZmxfdHlwZSwgJmZscCkpKSB7CisJaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwuZmxfZmlsZSwgZmwuZmxfdHlwZSwgJmZscCkpKSB7CiAJCWRwcmludGsoIk5GU0Q6IHNldGxlYXNlIGZhaWxlZCBbJWRdLCBubyBkZWxlZ2F0aW9uXG4iLCBzdGF0dXMpOwogCQl1bmhhc2hfZGVsZWdhdGlvbihkcCk7CiAJCWZsYWcgPSBORlM0X09QRU5fREVMRUdBVEVfTk9ORTsKQEAgLTI1MTQsMTggKzI2MDUsMTIgQEAKIAkgKi8KIAlpZiAoc3RwKSB7CiAJCS8qIFN0YXRlaWQgd2FzIGZvdW5kLCB0aGlzIGlzIGFuIE9QRU4gdXBncmFkZSAqLwotCQlzdGF0dXMgPSBuZnM0X3VwZ3JhZGVfb3BlbihycXN0cCwgY3VycmVudF9maCwgc3RwLCBvcGVuKTsKKwkJc3RhdHVzID0gbmZzNF91cGdyYWRlX29wZW4ocnFzdHAsIGZwLCBjdXJyZW50X2ZoLCBzdHAsIG9wZW4pOwogCQlpZiAoc3RhdHVzKQogCQkJZ290byBvdXQ7CiAJCXVwZGF0ZV9zdGF0ZWlkKCZzdHAtPnN0X3N0YXRlaWQpOwogCX0gZWxzZSB7Ci0JCS8qIFN0YXRlaWQgd2FzIG5vdCBmb3VuZCwgdGhpcyBpcyBhIG5ldyBPUEVOICovCi0JCWludCBmbGFncyA9IDA7Ci0JCWlmIChvcGVuLT5vcF9zaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19SRUFEKQotCQkJZmxhZ3MgfD0gTkZTRF9NQVlfUkVBRDsKLQkJaWYgKG9wZW4tPm9wX3NoYXJlX2FjY2VzcyAmIE5GUzRfU0hBUkVfQUNDRVNTX1dSSVRFKQotCQkJZmxhZ3MgfD0gTkZTRF9NQVlfV1JJVEU7Ci0JCXN0YXR1cyA9IG5mczRfbmV3X29wZW4ocnFzdHAsICZzdHAsIGRwLCBjdXJyZW50X2ZoLCBmbGFncyk7CisJCXN0YXR1cyA9IG5mczRfbmV3X29wZW4ocnFzdHAsICZzdHAsIGZwLCBjdXJyZW50X2ZoLCBvcGVuKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwogCQlpbml0X3N0YXRlaWQoc3RwLCBmcCwgb3Blbik7CkBAIC0yNzI3LDcgKzI4MTIsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIG5mczRfY2hlY2tfZmgoc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgbmZzNF9zdGF0ZWlkICpzdHApCiB7Ci0JcmV0dXJuIGZocC0+ZmhfZGVudHJ5LT5kX2lub2RlICE9IHN0cC0+c3RfdmZzX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJcmV0dXJuIGZocC0+ZmhfZGVudHJ5LT5kX2lub2RlICE9IHN0cC0+c3RfZmlsZS0+ZmlfaW5vZGU7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI3NjAsNiArMjg0NSw5IEBACiB7CiAgICAgICAgIF9fYmUzMiBzdGF0dXMgPSBuZnNlcnJfb3Blbm1vZGU7CiAKKwkvKiBGb3IgbG9jayBzdGF0ZWlkJ3MsIHdlIHRlc3QgdGhlIHBhcmVudCBvcGVuLCBub3QgdGhlIGxvY2s6ICovCisJaWYgKHN0cC0+c3Rfb3BlbnN0cCkKKwkJc3RwID0gc3RwLT5zdF9vcGVuc3RwOwogCWlmICgoZmxhZ3MgJiBXUl9TVEFURSkgJiYgKCFhY2Nlc3NfcGVybWl0X3dyaXRlKHN0cC0+c3RfYWNjZXNzX2JtYXApKSkKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKIAlpZiAoKGZsYWdzICYgUkRfU1RBVEUpICYmICghYWNjZXNzX3Blcm1pdF9yZWFkKHN0cC0+c3RfYWNjZXNzX2JtYXApKSkKQEAgLTI4NzIsNyArMjk2MCw4IEBACiAJCQlnb3RvIG91dDsKIAkJcmVuZXdfY2xpZW50KGRwLT5kbF9jbGllbnQpOwogCQlpZiAoZmlscHApCi0JCQkqZmlscHAgPSBkcC0+ZGxfdmZzX2ZpbGU7CisJCQkqZmlscHAgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZHAtPmRsX2ZpbGUpOworCQlCVUdfT04oISpmaWxwcCk7CiAJfSBlbHNlIHsgLyogb3BlbiBvciBsb2NrIHN0YXRlaWQgKi8KIAkJc3RwID0gZmluZF9zdGF0ZWlkKHN0YXRlaWQsIGZsYWdzKTsKIAkJaWYgKCFzdHApCkBAIC0yODg5LDggKzI5NzgsMTMgQEAKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gb3V0OwogCQlyZW5ld19jbGllbnQoc3RwLT5zdF9zdGF0ZW93bmVyLT5zb19jbGllbnQpOwotCQlpZiAoZmlscHApCi0JCQkqZmlscHAgPSBzdHAtPnN0X3Zmc19maWxlOworCQlpZiAoZmlscHApIHsKKwkJCWlmIChmbGFncyAmIFJEX1NUQVRFKQorCQkJCSpmaWxwcCA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOworCQkJZWxzZQorCQkJCSpmaWxwcCA9IGZpbmRfd3JpdGVhYmxlX2ZpbGUoc3RwLT5zdF9maWxlKTsKKwkJCUJVR19PTighKmZpbHBwKTsgLyogYXNzdXJlZCBieSBjaGVja19vcGVubW9kZSAqLworCQl9CiAJfQogCXN0YXR1cyA9IG5mc19vazsKIG91dDoKQEAgLTMxMjYsOCArMzIyMCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlzZXRfYWNjZXNzKCZzaGFyZV9hY2Nlc3MsIHN0cC0+c3RfYWNjZXNzX2JtYXApOwotCW5mczRfZmlsZV9kb3duZ3JhZGUoc3RwLT5zdF92ZnNfZmlsZSwKLQkgICAgICAgICAgICAgICAgICAgIHNoYXJlX2FjY2VzcyAmIH5vZC0+b2Rfc2hhcmVfYWNjZXNzKTsKKwluZnM0X2ZpbGVfZG93bmdyYWRlKHN0cC0+c3RfZmlsZSwgc2hhcmVfYWNjZXNzICYgfm9kLT5vZF9zaGFyZV9hY2Nlc3MpOwogCiAJcmVzZXRfdW5pb25fYm1hcF9hY2Nlc3Mob2QtPm9kX3NoYXJlX2FjY2VzcywgJnN0cC0+c3RfYWNjZXNzX2JtYXApOwogCXJlc2V0X3VuaW9uX2JtYXBfZGVueShvZC0+b2Rfc2hhcmVfZGVueSwgJnN0cC0+c3RfZGVueV9ibWFwKTsKQEAgLTMzNDYsMTEgKzM0MzksOSBAQAogbmZzNF9zZXRfbG9ja19kZW5pZWQoc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBuZnNkNF9sb2NrX2RlbmllZCAqZGVueSkKIHsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3A7Ci0JdW5zaWduZWQgaW50IGh2YWw7CiAKIAlpZiAoZmwtPmZsX2xtb3BzID09ICZuZnNkX3Bvc2l4X21uZ19vcHMpIHsKIAkJc29wID0gKHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKikgZmwtPmZsX293bmVyOwotCQlodmFsID0gbG9ja293bmVyaWRfaGFzaHZhbChzb3AtPnNvX2lkKTsKIAkJa3JlZl9nZXQoJnNvcC0+c29fcmVmKTsKIAkJZGVueS0+bGRfc29wID0gc29wOwogCQlkZW55LT5sZF9jbGllbnRpZCA9IHNvcC0+c29fY2xpZW50LT5jbF9jbGllbnRpZDsKQEAgLTM0NDYsOCArMzUzNyw2IEBACiAJc3RwLT5zdF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCA9IHNvcC0+c29faWQ7CiAJc3RwLT5zdF9zdGF0ZWlkLnNpX2ZpbGVpZCA9IGZwLT5maV9pZDsKIAlzdHAtPnN0X3N0YXRlaWQuc2lfZ2VuZXJhdGlvbiA9IDA7Ci0Jc3RwLT5zdF92ZnNfZmlsZSA9IG9wZW5fc3RwLT5zdF92ZnNfZmlsZTsgLyogRklYTUUgcmVmY291bnQ/PyAqLwotCXN0cC0+c3RfYWNjZXNzX2JtYXAgPSBvcGVuX3N0cC0+c3RfYWNjZXNzX2JtYXA7CiAJc3RwLT5zdF9kZW55X2JtYXAgPSBvcGVuX3N0cC0+c3RfZGVueV9ibWFwOwogCXN0cC0+c3Rfb3BlbnN0cCA9IG9wZW5fc3RwOwogCkBAIC0zNTQ3LDcgKzM2MzYsNiBAQAogCQlsb2NrX3NvcCA9IGxvY2stPmxrX3JlcGxheV9vd25lcjsKIAl9CiAJLyogbG9jay0+bGtfcmVwbGF5X293bmVyIGFuZCBsb2NrX3N0cCBoYXZlIGJlZW4gY3JlYXRlZCBvciBmb3VuZCAqLwotCWZpbHAgPSBsb2NrX3N0cC0+c3RfdmZzX2ZpbGU7CiAKIAlzdGF0dXMgPSBuZnNlcnJfZ3JhY2U7CiAJaWYgKGxvY2tzX2luX2dyYWNlKCkgJiYgIWxvY2stPmxrX3JlY2xhaW0pCkBAIC0zNTYwLDExICszNjQ4LDEzIEBACiAJc3dpdGNoIChsb2NrLT5sa190eXBlKSB7CiAJCWNhc2UgTkZTNF9SRUFEX0xUOgogCQljYXNlIE5GUzRfUkVBRFdfTFQ6CisJCQlmaWxwID0gZmluZF9yZWFkYWJsZV9maWxlKGxvY2tfc3RwLT5zdF9maWxlKTsKIAkJCWZpbGVfbG9jay5mbF90eXBlID0gRl9SRExDSzsKIAkJCWNtZCA9IEZfU0VUTEs7CiAJCWJyZWFrOwogCQljYXNlIE5GUzRfV1JJVEVfTFQ6CiAJCWNhc2UgTkZTNF9XUklURVdfTFQ6CisJCQlmaWxwID0gZmluZF93cml0ZWFibGVfZmlsZShsb2NrX3N0cC0+c3RfZmlsZSk7CiAJCQlmaWxlX2xvY2suZmxfdHlwZSA9IEZfV1JMQ0s7CiAJCQljbWQgPSBGX1NFVExLOwogCQlicmVhazsKQEAgLTM1NzIsNiArMzY2MiwxMCBAQAogCQkJc3RhdHVzID0gbmZzZXJyX2ludmFsOwogCQlnb3RvIG91dDsKIAl9CisJaWYgKCFmaWxwKSB7CisJCXN0YXR1cyA9IG5mc2Vycl9vcGVubW9kZTsKKwkJZ290byBvdXQ7CisJfQogCWZpbGVfbG9jay5mbF9vd25lciA9IChmbF9vd25lcl90KWxvY2tfc29wOwogCWZpbGVfbG9jay5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwogCWZpbGVfbG9jay5mbF9maWxlID0gZmlscDsKQEAgLTM3NDAsNyArMzgzNCwxMSBAQAogCQkJCQkmbG9ja3UtPmx1X3N0YXRlb3duZXIsICZzdHAsIE5VTEwpKSkKIAkJZ290byBvdXQ7CiAKLQlmaWxwID0gc3RwLT5zdF92ZnNfZmlsZTsKKwlmaWxwID0gZmluZF9hbnlfZmlsZShzdHAtPnN0X2ZpbGUpOworCWlmICghZmlscCkgeworCQlzdGF0dXMgPSBuZnNlcnJfbG9ja19yYW5nZTsKKwkJZ290byBvdXQ7CisJfQogCUJVR19PTighZmlscCk7CiAJbG9ja3NfaW5pdF9sb2NrKCZmaWxlX2xvY2spOwogCWZpbGVfbG9jay5mbF90eXBlID0gRl9VTkxDSzsKQEAgLTM3ODcsMTAgKzM4ODUsMTAgQEAKICAqIAkwOiBubyBsb2NrcyBoZWxkIGJ5IGxvY2tvd25lcgogICovCiBzdGF0aWMgaW50Ci1jaGVja19mb3JfbG9ja3Moc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBuZnM0X3N0YXRlb3duZXIgKmxvd25lcikKK2NoZWNrX2Zvcl9sb2NrcyhzdHJ1Y3QgbmZzNF9maWxlICpmaWxwLCBzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpsb3duZXIpCiB7CiAJc3RydWN0IGZpbGVfbG9jayAqKmZscHA7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZpX2lub2RlOwogCWludCBzdGF0dXMgPSAwOwogCiAJbG9ja19rZXJuZWwoKTsKQEAgLTM4NDEsNyArMzkzOSw3IEBACiAJCQkJY29udGludWU7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0cCwgJnNvcC0+c29fc3RhdGVpZHMsCiAJCQkJCXN0X3BlcnN0YXRlb3duZXIpIHsKLQkJCQlpZiAoY2hlY2tfZm9yX2xvY2tzKHN0cC0+c3RfdmZzX2ZpbGUsIHNvcCkpCisJCQkJaWYgKGNoZWNrX2Zvcl9sb2NrcyhzdHAtPnN0X2ZpbGUsIHNvcCkpCiAJCQkJCWdvdG8gb3V0OwogCQkJCS8qIE5vdGU6IHNvX3BlcmNsaWVudCB1bnVzZWQgZm9yIGxvY2tvd25lcnMsCiAJCQkJICogc28gaXQncyBPSyB0byBmb29sIHdpdGggaGVyZS4gKi8KQEAgLTQwNjYsMTYgKzQxNjQsOCBAQAogaW50CiBuZnM0X3N0YXRlX3N0YXJ0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCWlmIChuZnM0X2luaXQpCi0JCXJldHVybiAwOwogCW5mc2Q0X2xvYWRfcmVib290X3JlY292ZXJ5X2RhdGEoKTsKLQlyZXQgPSBfX25mczRfc3RhdGVfc3RhcnQoKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCW5mczRfaW5pdCA9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIF9fbmZzNF9zdGF0ZV9zdGFydCgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDExMCw3ICs0MjAwLDYgQEAKIAl9CiAKIAluZnNkNF9zaHV0ZG93bl9yZWNkaXIoKTsKLQluZnM0X2luaXQgPSAwOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IGFjMTdhNzAuLjFhNDY4YmIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0xNzU2LDYgKzE3NTYsMTAgQEAKIAlzdHJ1Y3QgbmZzNF9hY2wgKmFjbCA9IE5VTEw7CiAJc3RydWN0IG5mc2Q0X2NvbXBvdW5kcmVzICpyZXNwID0gcnFzdHAtPnJxX3Jlc3A7CiAJdTMyIG1pbm9ydmVyc2lvbiA9IHJlc3AtPmNzdGF0ZS5taW5vcnZlcnNpb247CisJc3RydWN0IHBhdGggcGF0aCA9IHsKKwkJLm1udAk9IGV4cC0+ZXhfcGF0aC5tbnQsCisJCS5kZW50cnkJPSBkZW50cnksCisJfTsKIAogCUJVR19PTihibXZhbDEgJiBORlNEX1dSSVRFT05MWV9BVFRSU19XT1JEMSk7CiAJQlVHX09OKGJtdmFsMCAmIH5uZnNkX3N1cHBhdHRyczAobWlub3J2ZXJzaW9uKSk7CkBAIC0xNzc2LDcgKzE3ODAsNyBAQAogCQkJRkFUVFI0X1dPUkQwX01BWE5BTUUpKSB8fAogCSAgICAoYm12YWwxICYgKEZBVFRSNF9XT1JEMV9TUEFDRV9BVkFJTCB8IEZBVFRSNF9XT1JEMV9TUEFDRV9GUkVFIHwKIAkJICAgICAgIEZBVFRSNF9XT1JEMV9TUEFDRV9UT1RBTCkpKSB7Ci0JCWVyciA9IHZmc19zdGF0ZnMoZGVudHJ5LCAmc3RhdGZzKTsKKwkJZXJyID0gdmZzX3N0YXRmcygmcGF0aCwgJnN0YXRmcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9uZnNlcnI7CiAJfQpAQCAtMjYzMCw3ICsyNjM0LDcgQEAKIAl9CiAJcmVhZC0+cmRfdmxlbiA9IHY7CiAKLQluZnNlcnIgPSBuZnNkX3JlYWQocmVhZC0+cmRfcnFzdHAsIHJlYWQtPnJkX2ZocCwgcmVhZC0+cmRfZmlscCwKKwluZnNlcnIgPSBuZnNkX3JlYWRfZmlsZShyZWFkLT5yZF9ycXN0cCwgcmVhZC0+cmRfZmhwLCByZWFkLT5yZF9maWxwLAogCQkJcmVhZC0+cmRfb2Zmc2V0LCByZXNwLT5ycXN0cC0+cnFfdmVjLCByZWFkLT5yZF92bGVuLAogCQkJJm1heGNvdW50KTsKIApAQCAtMzMyNSw2ICszMzI5LDcgQEAKIAkJfQogCQkvKiBSZW5ldyB0aGUgY2xpZW50aWQgb24gc3VjY2VzcyBhbmQgb24gcmVwbGF5ICovCiAJCXJlbGVhc2Vfc2Vzc2lvbl9jbGllbnQoY3MtPnNlc3Npb24pOworCQluZnNkNF9wdXRfc2Vzc2lvbihjcy0+c2Vzc2lvbik7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggNTA4OTQxYy4uYjUzYjFkMCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC05NDksMTUgKzk0OSwxMiBAQAogCWlmIChlcnIgIT0gMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IGxvY2tkX3VwKCk7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIG91dDsKLQogCWVyciA9IHN2Y19hZGRzb2NrKG5mc2Rfc2VydiwgZmQsIGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlUKTsKLQlpZiAoZXJyIDwgMCkKLQkJbG9ja2RfZG93bigpOworCWlmIChlcnIgPCAwKSB7CisJCXN2Y19kZXN0cm95KG5mc2Rfc2Vydik7CisJCXJldHVybiBlcnI7CisJfQogCi1vdXQ6CiAJLyogRGVjcmVhc2UgdGhlIGNvdW50LCBidXQgZG9uJ3Qgc2h1dCBkb3duIHRoZSBzZXJ2aWNlICovCiAJbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMtLTsKIAlyZXR1cm4gZXJyOwpAQCAtOTc4LDkgKzk3NSw2IEBACiAJaWYgKG5mc2Rfc2VydiAhPSBOVUxMKQogCQlsZW4gPSBzdmNfc29ja19uYW1lcyhuZnNkX3NlcnYsIGJ1ZiwKIAkJCQkJU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCB0b2Nsb3NlKTsKLQlpZiAobGVuID49IDApCi0JCWxvY2tkX2Rvd24oKTsKLQogCWtmcmVlKHRvY2xvc2UpOwogCXJldHVybiBsZW47CiB9CkBAIC0xMDE0LDYgKzEwMDgsOSBAQAogCQkJCVBGX0lORVQ2LCBwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOwogCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRUFGTk9TVVBQT1JUKQogCQlnb3RvIG91dF9jbG9zZTsKKworCS8qIERlY3JlYXNlIHRoZSBjb3VudCwgYnV0IGRvbid0IHNodXQgZG93biB0aGUgc2VydmljZSAqLworCW5mc2Rfc2Vydi0+c3ZfbnJ0aHJlYWRzLS07CiAJcmV0dXJuIDA7CiBvdXRfY2xvc2U6CiAJeHBydCA9IHN2Y19maW5kX3hwcnQobmZzZF9zZXJ2LCB0cmFuc3BvcnQsIFBGX0lORVQsIHBvcnQpOwpAQCAtMTAyMiw4ICsxMDE5LDcgQEAKIAkJc3ZjX3hwcnRfcHV0KHhwcnQpOwogCX0KIG91dF9lcnI6Ci0JLyogRGVjcmVhc2UgdGhlIGNvdW50LCBidXQgZG9uJ3Qgc2h1dCBkb3duIHRoZSBzZXJ2aWNlICovCi0JbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMtLTsKKwlzdmNfZGVzdHJveShuZnNkX3NlcnYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExOTQsNyArMTE5MCw3IEBACiAJCQlic2l6ZSA9IE5GU1NWQ19NQVhCTEtTSVpFOwogCQlic2l6ZSAmPSB+KDEwMjQtMSk7CiAJCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOwotCQlpZiAobmZzZF9zZXJ2ICYmIG5mc2Rfc2Vydi0+c3ZfbnJ0aHJlYWRzKSB7CisJCWlmIChuZnNkX3NlcnYpIHsKIAkJCW11dGV4X3VubG9jaygmbmZzZF9tdXRleCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CkBAIC0xMzEwLDYgKzEzMDYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJc3RhdHVzID0gbmZzNF9yZXNldF9yZWNvdmVyeWRpcihyZWNkaXIpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgU0lNUExFX1RSQU5TQUNUSU9OX0xJTUlULCAiJXNcbiIsCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2QuaCBiL2ZzL25mc2QvbmZzZC5oCmluZGV4IDcyMzc3NzYuLmI3NmFjM2EgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZC5oCisrKyBiL2ZzL25mc2QvbmZzZC5oCkBAIC0xNTMsNiArMTUzLDcgQEAKICNkZWZpbmUgbmZzZXJyX2JhZF9zZXFpZAljcHVfdG9fYmUzMihORlNFUlJfQkFEX1NFUUlEKQogI2RlZmluZQluZnNlcnJfc3ltbGluawkJY3B1X3RvX2JlMzIoTkZTRVJSX1NZTUxJTkspCiAjZGVmaW5lCW5mc2Vycl9ub3Rfc2FtZQkJY3B1X3RvX2JlMzIoTkZTRVJSX05PVF9TQU1FKQorI2RlZmluZSBuZnNlcnJfbG9ja19yYW5nZQljcHVfdG9fYmUzMihORlNFUlJfTE9DS19SQU5HRSkKICNkZWZpbmUJbmZzZXJyX3Jlc3RvcmVmaAljcHVfdG9fYmUzMihORlNFUlJfUkVTVE9SRUZIKQogI2RlZmluZQluZnNlcnJfYXR0cm5vdHN1cHAJY3B1X3RvX2JlMzIoTkZTRVJSX0FUVFJOT1RTVVBQKQogI2RlZmluZQluZnNlcnJfYmFkX3hkcgkJY3B1X3RvX2JlMzIoTkZTRVJSX0JBRF9YRFIpCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc3Byb2MuYyBiL2ZzL25mc2QvbmZzcHJvYy5jCmluZGV4IGEwNDdhZDYuLjA4ZTE3MjYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzcHJvYy5jCisrKyBiL2ZzL25mc2QvbmZzcHJvYy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlzdmNfcmVzZXJ2ZV9hdXRoKHJxc3RwLCAoMTk8PDIpICsgYXJncC0+Y291bnQgKyA0KTsKIAogCXJlc3AtPmNvdW50ID0gYXJncC0+Y291bnQ7Ci0JbmZzZXJyID0gbmZzZF9yZWFkKHJxc3RwLCBmaF9jb3B5KCZyZXNwLT5maCwgJmFyZ3AtPmZoKSwgTlVMTCwKKwluZnNlcnIgPSBuZnNkX3JlYWQocnFzdHAsIGZoX2NvcHkoJnJlc3AtPmZoLCAmYXJncC0+ZmgpLAogCQkJCSAgYXJncC0+b2Zmc2V0LAogCQkJICAgCSAgcnFzdHAtPnJxX3ZlYywgYXJncC0+dmxlbiwKIAkJCQkgICZyZXNwLT5jb3VudCk7CkBAIC0yOTAsNyArMjkwLDYgQEAKIAkgKiBnb3NwZWwgb2Ygc3VuIG1pY3JvCiAJICovCiAJaWYgKHR5cGUgIT0gU19JRlJFRykgewotCQlpbnQJaXNfYm9yYyA9IDA7CiAJCWlmICh0eXBlICE9IFNfSUZCTEsgJiYgdHlwZSAhPSBTX0lGQ0hSKSB7CiAJCQlyZGV2ID0gMDsKIAkJfSBlbHNlIGlmICh0eXBlID09IFNfSUZDSFIgJiYgIShhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkpIHsKQEAgLTI5OCw3ICsyOTcsNiBAQAogCQkJdHlwZSA9IFNfSUZJRk87CiAJCX0gZWxzZSB7CiAJCQkvKiBPa2F5LCBjaGFyIG9yIGJsb2NrIHNwZWNpYWwgKi8KLQkJCWlzX2JvcmMgPSAxOwogCQkJaWYgKCFyZGV2KQogCQkJCXJkZXYgPSB3YW50ZWQ7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDA2YjJhMjYuLmUyYzQzNDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMTgwLDE1ICsxODAsODAgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyBpbnQgbmZzZF9pbml0X3NvY2tzKGludCBwb3J0KQoreworCWludCBlcnJvcjsKKwlpZiAoIWxpc3RfZW1wdHkoJm5mc2Rfc2Vydi0+c3ZfcGVybXNvY2tzKSkKKwkJcmV0dXJuIDA7CisKKwllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ1ZHAiLCBQRl9JTkVULCBwb3J0LAorCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCAidGNwIiwgUEZfSU5FVCwgcG9ydCwKKwkJCQkJU1ZDX1NPQ0tfREVGQVVMVFMpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBuZnNkX3VwID0gZmFsc2U7CisKK3N0YXRpYyBpbnQgbmZzZF9zdGFydHVwKHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBucnNlcnZzKQoreworCWludCByZXQ7CisKKwlpZiAobmZzZF91cCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBSZWFkYWhlYWQgcGFyYW0gY2FjaGUgLSB3aWxsIG5vLW9wIGlmIGl0IGFscmVhZHkgZXhpc3RzLgorCSAqIChOb3RlIHRoZXJlZm9yZSByZXN1bHRzIHdpbGwgYmUgc3Vib3B0aW1hbCBpZiBudW1iZXIgb2YKKwkgKiB0aHJlYWRzIGlzIG1vZGlmaWVkIGFmdGVyIG5mc2Qgc3RhcnQuKQorCSAqLworCXJldCA9IG5mc2RfcmFjYWNoZV9pbml0KDIqbnJzZXJ2cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBuZnNkX2luaXRfc29ja3MocG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmFjYWNoZTsKKwlyZXQgPSBsb2NrZF91cCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3JhY2FjaGU7CisJcmV0ID0gbmZzNF9zdGF0ZV9zdGFydCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2xvY2tkOworCW5mc2RfdXAgPSB0cnVlOworCXJldHVybiAwOworb3V0X2xvY2tkOgorCWxvY2tkX2Rvd24oKTsKK291dF9yYWNhY2hlOgorCW5mc2RfcmFjYWNoZV9zaHV0ZG93bigpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG5mc2Rfc2h1dGRvd24odm9pZCkKK3sKKwkvKgorCSAqIHdyaXRlX3BvcnRzIGNhbiBjcmVhdGUgdGhlIHNlcnZlciB3aXRob3V0IGFjdHVhbGx5IHN0YXJ0aW5nCisJICogYW55IHRocmVhZHMtLWlmIHdlIGdldCBzaHV0IGRvd24gYmVmb3JlIGFueSB0aHJlYWRzIGFyZQorCSAqIHN0YXJ0ZWQsIHRoZW4gbmZzZF9sYXN0X3RocmVhZCB3aWxsIGJlIHJ1biBiZWZvcmUgYW55IG9mIHRoaXMKKwkgKiBvdGhlciBpbml0aWFsaXphdGlvbiBoYXMgYmVlbiBkb25lLgorCSAqLworCWlmICghbmZzZF91cCkKKwkJcmV0dXJuOworCW5mczRfc3RhdGVfc2h1dGRvd24oKTsKKwlsb2NrZF9kb3duKCk7CisJbmZzZF9yYWNhY2hlX3NodXRkb3duKCk7CisJbmZzZF91cCA9IGZhbHNlOworfQorCiBzdGF0aWMgdm9pZCBuZnNkX2xhc3RfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2VydikKIHsKIAkvKiBXaGVuIGxhc3QgbmZzZCB0aHJlYWQgZXhpdHMgd2UgbmVlZCB0byBkbyBzb21lIGNsZWFuLXVwICovCi0Jc3RydWN0IHN2Y194cHJ0ICp4cHJ0OwotCWxpc3RfZm9yX2VhY2hfZW50cnkoeHBydCwgJnNlcnYtPnN2X3Blcm1zb2NrcywgeHB0X2xpc3QpCi0JCWxvY2tkX2Rvd24oKTsKIAluZnNkX3NlcnYgPSBOVUxMOwotCW5mc2RfcmFjYWNoZV9zaHV0ZG93bigpOwotCW5mczRfc3RhdGVfc2h1dGRvd24oKTsKKwluZnNkX3NodXRkb3duKCk7CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICJuZnNkOiBsYXN0IHNlcnZlciBoYXMgZXhpdGVkLCBmbHVzaGluZyBleHBvcnQgIgogCQkJICAgICJjYWNoZVxuIik7CkBAIC0yNjMsNDUgKzMyOCwxOCBAQAogCQkgICAgICAgbmZzZF9tYXhfYmxrc2l6ZSA+PSA4KjEwMjQqMikKIAkJCW5mc2RfbWF4X2Jsa3NpemUgLz0gMjsKIAl9CisJbmZzZF9yZXNldF92ZXJzaW9ucygpOwogCiAJbmZzZF9zZXJ2ID0gc3ZjX2NyZWF0ZV9wb29sZWQoJm5mc2RfcHJvZ3JhbSwgbmZzZF9tYXhfYmxrc2l6ZSwKIAkJCQkgICAgICBuZnNkX2xhc3RfdGhyZWFkLCBuZnNkLCBUSElTX01PRFVMRSk7CiAJaWYgKG5mc2Rfc2VydiA9PSBOVUxMKQotCQllcnIgPSAtRU5PTUVNOwotCWVsc2UKLQkJc2V0X21heF9kcmMoKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKKwlzZXRfbWF4X2RyYygpOwogCWRvX2dldHRpbWVvZmRheSgmbmZzc3ZjX2Jvb3QpOwkJLyogcmVjb3JkIGJvb3QgdGltZSAqLwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbmZzZF9pbml0X3NvY2tzKGludCBwb3J0KQotewotCWludCBlcnJvcjsKLQlpZiAoIWxpc3RfZW1wdHkoJm5mc2Rfc2Vydi0+c3ZfcGVybXNvY2tzKSkKLQkJcmV0dXJuIDA7Ci0KLQllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ1ZHAiLCBQRl9JTkVULCBwb3J0LAotCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBsb2NrZF91cCgpOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgInRjcCIsIFBGX0lORVQsIHBvcnQsCi0JCQkJCVNWQ19TT0NLX0RFRkFVTFRTKTsKLQlpZiAoZXJyb3IgPCAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGxvY2tkX3VwKCk7Ci0JaWYgKGVycm9yIDwgMCkKLQkJcmV0dXJuIGVycm9yOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBuZnNkX25ycG9vbHModm9pZCkKIHsKIAlpZiAobmZzZF9zZXJ2ID09IE5VTEwpCkBAIC0zNzYsMTAgKzQxNCwxNiBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qCisgKiBBZGp1c3QgdGhlIG51bWJlciBvZiB0aHJlYWRzIGFuZCByZXR1cm4gdGhlIG5ldyBudW1iZXIgb2YgdGhyZWFkcy4KKyAqIFRoaXMgaXMgYWxzbyB0aGUgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIHNlcnZlciBpZiBuZWNlc3NhcnksIGlmCisgKiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIG5yc2VydnMgaXMgbm9uemVyby4KKyAqLwogaW50CiBuZnNkX3N2Yyh1bnNpZ25lZCBzaG9ydCBwb3J0LCBpbnQgbnJzZXJ2cykKIHsKIAlpbnQJZXJyb3I7CisJYm9vbAluZnNkX3VwX2JlZm9yZTsKIAogCW11dGV4X2xvY2soJm5mc2RfbXV0ZXgpOwogCWRwcmludGsoIm5mc2Q6IGNyZWF0aW5nIHNlcnZpY2VcbiIpOwpAQCAtMzkxLDM0ICs0MzUsMjkgQEAKIAlpZiAobnJzZXJ2cyA9PSAwICYmIG5mc2Rfc2VydiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCS8qIFJlYWRhaGVhZCBwYXJhbSBjYWNoZSAtIHdpbGwgbm8tb3AgaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KLQllcnJvciA9CW5mc2RfcmFjYWNoZV9pbml0KDIqbnJzZXJ2cyk7Ci0JaWYgKGVycm9yPDApCi0JCWdvdG8gb3V0OwotCWVycm9yID0gbmZzNF9zdGF0ZV9zdGFydCgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQluZnNkX3Jlc2V0X3ZlcnNpb25zKCk7Ci0KIAllcnJvciA9IG5mc2RfY3JlYXRlX3NlcnYoKTsKLQogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JZXJyb3IgPSBuZnNkX2luaXRfc29ja3MocG9ydCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWx1cmU7CiAKKwluZnNkX3VwX2JlZm9yZSA9IG5mc2RfdXA7CisKKwllcnJvciA9IG5mc2Rfc3RhcnR1cChwb3J0LCBucnNlcnZzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X2Rlc3Ryb3k7CiAJZXJyb3IgPSBzdmNfc2V0X251bV90aHJlYWRzKG5mc2Rfc2VydiwgTlVMTCwgbnJzZXJ2cyk7Ci0JaWYgKGVycm9yID09IDApCi0JCS8qIFdlIGFyZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIG5mc2Rfc2VydiB3aGljaAotCQkgKiB3ZSBkb24ndCB3YW50IHRvIGNvdW50IGluIHRoZSByZXR1cm4gdmFsdWUsCi0JCSAqIHNvIHN1YnRyYWN0IDEKLQkJICovCi0JCWVycm9yID0gbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMgLSAxOwotIGZhaWx1cmU6CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF9zaHV0ZG93bjsKKwkvKiBXZSBhcmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBuZnNkX3NlcnYgd2hpY2gKKwkgKiB3ZSBkb24ndCB3YW50IHRvIGNvdW50IGluIHRoZSByZXR1cm4gdmFsdWUsCisJICogc28gc3VidHJhY3QgMQorCSAqLworCWVycm9yID0gbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMgLSAxOworb3V0X3NodXRkb3duOgorCWlmIChlcnJvciA8IDAgJiYgIW5mc2RfdXBfYmVmb3JlKQorCQluZnNkX3NodXRkb3duKCk7CitvdXRfZGVzdHJveToKIAlzdmNfZGVzdHJveShuZnNkX3NlcnYpOwkJLyogUmVsZWFzZSBzZXJ2ZXIgKi8KLSBvdXQ6CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZuZnNkX211dGV4KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL3N0YXRlLmggYi9mcy9uZnNkL3N0YXRlLmgKaW5kZXggMDA2Yzg0Mi4uNzczMWE3NSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9zdGF0ZS5oCisrKyBiL2ZzL25mc2Qvc3RhdGUuaApAQCAtODgsNyArODgsNiBAQAogCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwogCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7CiAJc3RydWN0IGZpbGVfbG9jawkqZGxfZmxvY2s7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKIAl1MzIJCQlkbF90eXBlOwogCXRpbWVfdAkJCWRsX3RpbWU7CiAvKiBGb3IgcmVjYWxsOiAqLwpAQCAtMzQyLDEyICszNDEsNTAgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBmaV9oYXNoOyAgICAvKiBoYXNoIGJ5ICJzdHJ1Y3QgaW5vZGUgKiIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBmaV9zdGF0ZWlkczsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWZpX2RlbGVnYXRpb25zOworCS8qIE9uZSBlYWNoIGZvciBPX1JET05MWSwgT19XUk9OTFksIE9fUkRXUjogKi8KKwlzdHJ1Y3QgZmlsZSAqCQlmaV9mZHNbM107CisJLyogT25lIGVhY2ggZm9yIE9fUkRPTkxZLCBPX1dST05MWTogKi8KKwlhdG9taWNfdAkJZmlfYWNjZXNzWzJdOworCS8qCisJICogRWFjaCBvcGVuIHN0YXRlaWQgY29udHJpYnV0ZXMgMSB0byBlaXRoZXIgZmlfcmVhZGVycyBvcgorCSAqIGZpX3dyaXRlcnMsIG9yIGJvdGgsIGRlcGVuZGluZyBvbiB0aGUgb3BlbiBtb2RlLiAgQQorCSAqIGRlbGVnYXRpb24gYWxzbyB0YWtlcyBhbiBmaV9yZWFkZXJzIHJlZmVyZW5jZS4gIExvY2sKKwkgKiBzdGF0ZWlkJ3MgdGFrZSBub25lLgorCSAqLworCWF0b21pY190CQlmaV9yZWFkZXJzOworCWF0b21pY190CQlmaV93cml0ZXJzOwogCXN0cnVjdCBpbm9kZQkJKmZpX2lub2RlOwogCXUzMiAgICAgICAgICAgICAgICAgICAgIGZpX2lkOyAgICAgIC8qIHVzZWQgd2l0aCBzdGF0ZW93bmVyLT5zb19pZCAKIAkJCQkJICAgICAqIGZvciBzdGF0ZWlkX2hhc2h0YmwgaGFzaCAqLwogCWJvb2wJCQlmaV9oYWRfY29uZmxpY3Q7CiB9OwogCisvKiBYWFg6IGZvciBmaXJzdCBjdXQgbWF5IGZhbGwgYmFjayBvbiByZXR1cm5pbmcgZmlsZSB0aGF0IGRvZXNuJ3Qgd29yaworICogYXQgYWxsPyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZmluZF93cml0ZWFibGVfZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmKQoreworCWlmIChmLT5maV9mZHNbT19SRFdSXSkKKwkJcmV0dXJuIGYtPmZpX2Zkc1tPX1JEV1JdOworCXJldHVybiBmLT5maV9mZHNbT19XUk9OTFldOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpmaW5kX3JlYWRhYmxlX2ZpbGUoc3RydWN0IG5mczRfZmlsZSAqZikKK3sKKwlpZiAoZi0+ZmlfZmRzW09fUkRXUl0pCisJCXJldHVybiBmLT5maV9mZHNbT19SRFdSXTsKKwlyZXR1cm4gZi0+ZmlfZmRzW09fUkRPTkxZXTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqZmluZF9hbnlfZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmKQoreworCWlmIChmLT5maV9mZHNbT19SRFdSXSkKKwkJcmV0dXJuIGYtPmZpX2Zkc1tPX1JEV1JdOworCWVsc2UgaWYgKGYtPmZpX2Zkc1tPX1JEV1JdKQorCQlyZXR1cm4gZi0+ZmlfZmRzW09fV1JPTkxZXTsKKwllbHNlCisJCXJldHVybiBmLT5maV9mZHNbT19SRE9OTFldOworfQorCiAvKgogKiBuZnM0X3N0YXRlaWQgY2FuIGVpdGhlciBiZSBhbiBvcGVuIHN0YXRlaWQgb3IgKGV2ZW50dWFsbHkpIGEgbG9jayBzdGF0ZWlkCiAqCkBAIC0zNzMsNyArNDEwLDYgQEAKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICAgICAgKiBzdF9zdGF0ZW93bmVyOwogCXN0cnVjdCBuZnM0X2ZpbGUgICAgICAgICAgICAqIHN0X2ZpbGU7CiAJc3RhdGVpZF90ICAgICAgICAgICAgICAgICAgICAgc3Rfc3RhdGVpZDsKLQlzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICAgKiBzdF92ZnNfZmlsZTsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9hY2Nlc3NfYm1hcDsKIAl1bnNpZ25lZCBsb25nICAgICAgICAgICAgICAgICBzdF9kZW55X2JtYXA7CiAJc3RydWN0IG5mczRfc3RhdGVpZCAgICAgICAgICogc3Rfb3BlbnN0cDsKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDNjMTExMTIuLjk2MzYwYTggMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfTkZTX1Y0KSAqLworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX05GU0RfVjQpICovCiAKICNpZmRlZiBDT05GSUdfTkZTRF9WMwogLyoKQEAgLTkwMyw3ICs5MDMsNiBAQAogICAgICAgICAgICAgICBsb2ZmX3Qgb2Zmc2V0LCBzdHJ1Y3Qga3ZlYyAqdmVjLCBpbnQgdmxlbiwgdW5zaWduZWQgbG9uZyAqY291bnQpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgcmFwYXJtcwkqcmE7CiAJbW1fc2VnbWVudF90CW9sZGZzOwogCV9fYmUzMgkJZXJyOwogCWludAkJaG9zdF9lcnI7CkBAIC05MTQsMTIgKzkxMyw2IEBACiAJaWYgKHN2Y19tc25mcyhmaHApICYmICFsb2NrX21heV9yZWFkKGlub2RlLCBvZmZzZXQsICpjb3VudCkpCiAJCWdvdG8gb3V0OwogCi0JLyogR2V0IHJlYWRhaGVhZCBwYXJhbWV0ZXJzICovCi0JcmEgPSBuZnNkX2dldF9yYXBhcm1zKGlub2RlLT5pX3NiLT5zX2RldiwgaW5vZGUtPmlfaW5vKTsKLQotCWlmIChyYSAmJiByYS0+cF9zZXQpCi0JCWZpbGUtPmZfcmEgPSByYS0+cF9yYTsKLQogCWlmIChmaWxlLT5mX29wLT5zcGxpY2VfcmVhZCAmJiBycXN0cC0+cnFfc3BsaWNlX29rKSB7CiAJCXN0cnVjdCBzcGxpY2VfZGVzYyBzZCA9IHsKIAkJCS5sZW4JCT0gMCwKQEAgLTkzNywyMSArOTMwLDExIEBACiAJCXNldF9mcyhvbGRmcyk7CiAJfQogCi0JLyogV3JpdGUgYmFjayByZWFkYWhlYWQgcGFyYW1zICovCi0JaWYgKHJhKSB7Ci0JCXN0cnVjdCByYXBhcm1faGJ1Y2tldCAqcmFiID0gJnJhcGFybV9oYXNoW3JhLT5wX2hpbmRleF07Ci0JCXNwaW5fbG9jaygmcmFiLT5wYl9sb2NrKTsKLQkJcmEtPnBfcmEgPSBmaWxlLT5mX3JhOwotCQlyYS0+cF9zZXQgPSAxOwotCQlyYS0+cF9jb3VudC0tOwotCQlzcGluX3VubG9jaygmcmFiLT5wYl9sb2NrKTsKLQl9Ci0KIAlpZiAoaG9zdF9lcnIgPj0gMCkgewogCQluZnNkc3RhdHMuaW9fcmVhZCArPSBob3N0X2VycjsKIAkJKmNvdW50ID0gaG9zdF9lcnI7CiAJCWVyciA9IDA7Ci0JCWZzbm90aWZ5X2FjY2VzcyhmaWxlLT5mX3BhdGguZGVudHJ5KTsKKwkJZnNub3RpZnlfYWNjZXNzKGZpbGUpOwogCX0gZWxzZSAKIAkJZXJyID0gbmZzZXJybm8oaG9zdF9lcnIpOwogb3V0OgpAQCAtMTA2Miw3ICsxMDQ1LDcgQEAKIAkJZ290byBvdXRfbmZzZXJyOwogCSpjbnQgPSBob3N0X2VycjsKIAluZnNkc3RhdHMuaW9fd3JpdGUgKz0gaG9zdF9lcnI7Ci0JZnNub3RpZnlfbW9kaWZ5KGZpbGUtPmZfcGF0aC5kZW50cnkpOworCWZzbm90aWZ5X21vZGlmeShmaWxlKTsKIAogCS8qIGNsZWFyIHNldHVpZC9zZXRnaWQgZmxhZyBhZnRlciB3cml0ZSAqLwogCWlmIChpbm9kZS0+aV9tb2RlICYgKFNfSVNVSUQgfCBTX0lTR0lEKSkKQEAgLTEwODYsOCArMTA2OSw0NSBAQAogICogb24gZW50cnkuIE9uIHJldHVybiwgKmNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZC4KICAqIE4uQi4gQWZ0ZXIgdGhpcyBjYWxsIGZocCBuZWVkcyBhbiBmaF9wdXQKICAqLworX19iZTMyIG5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCisJbG9mZl90IG9mZnNldCwgc3RydWN0IGt2ZWMgKnZlYywgaW50IHZsZW4sIHVuc2lnbmVkIGxvbmcgKmNvdW50KQoreworCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHJhcGFybXMJKnJhOworCV9fYmUzMiBlcnI7CisKKwllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTkZTRF9NQVlfUkVBRCwgJmZpbGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkvKiBHZXQgcmVhZGFoZWFkIHBhcmFtZXRlcnMgKi8KKwlyYSA9IG5mc2RfZ2V0X3JhcGFybXMoaW5vZGUtPmlfc2ItPnNfZGV2LCBpbm9kZS0+aV9pbm8pOworCisJaWYgKHJhICYmIHJhLT5wX3NldCkKKwkJZmlsZS0+Zl9yYSA9IHJhLT5wX3JhOworCisJZXJyID0gbmZzZF92ZnNfcmVhZChycXN0cCwgZmhwLCBmaWxlLCBvZmZzZXQsIHZlYywgdmxlbiwgY291bnQpOworCisJLyogV3JpdGUgYmFjayByZWFkYWhlYWQgcGFyYW1zICovCisJaWYgKHJhKSB7CisJCXN0cnVjdCByYXBhcm1faGJ1Y2tldCAqcmFiID0gJnJhcGFybV9oYXNoW3JhLT5wX2hpbmRleF07CisJCXNwaW5fbG9jaygmcmFiLT5wYl9sb2NrKTsKKwkJcmEtPnBfcmEgPSBmaWxlLT5mX3JhOworCQlyYS0+cF9zZXQgPSAxOworCQlyYS0+cF9jb3VudC0tOworCQlzcGluX3VubG9jaygmcmFiLT5wYl9sb2NrKTsKKwl9CisKKwluZnNkX2Nsb3NlKGZpbGUpOworCXJldHVybiBlcnI7Cit9CisKKy8qIEFzIGFib3ZlLCBidXQgdXNlIHRoZSBwcm92aWRlZCBmaWxlIGRlc2NyaXB0b3IuICovCiBfX2JlMzIKLW5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBmaWxlICpmaWxlLAorbmZzZF9yZWFkX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJbG9mZl90IG9mZnNldCwgc3RydWN0IGt2ZWMgKnZlYywgaW50IHZsZW4sCiAJCXVuc2lnbmVkIGxvbmcgKmNvdW50KQogewpAQCAtMTA5OSwxMyArMTExOSw4IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJZXJyID0gbmZzZF92ZnNfcmVhZChycXN0cCwgZmhwLCBmaWxlLCBvZmZzZXQsIHZlYywgdmxlbiwgY291bnQpOwotCX0gZWxzZSB7Ci0JCWVyciA9IG5mc2Rfb3BlbihycXN0cCwgZmhwLCBTX0lGUkVHLCBORlNEX01BWV9SRUFELCAmZmlsZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJZXJyID0gbmZzZF92ZnNfcmVhZChycXN0cCwgZmhwLCBmaWxlLCBvZmZzZXQsIHZlYywgdmxlbiwgY291bnQpOwotCQluZnNkX2Nsb3NlKGZpbGUpOwotCX0KKwl9IGVsc2UgLyogTm90ZSBmaWxlIG1heSBzdGlsbCBiZSBOVUxMIGluIE5GU3Y0IHNwZWNpYWwgc3RhdGVpZCBjYXNlOiAqLworCQllcnIgPSBuZnNkX3JlYWQocnFzdHAsIGZocCwgb2Zmc2V0LCB2ZWMsIHZsZW4sIGNvdW50KTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTYzMSw3ICsxNjQ2LDcgQEAKIAkJCQljaGFyICpuYW1lLCBpbnQgbGVuLCBzdHJ1Y3Qgc3ZjX2ZoICp0ZmhwKQogewogCXN0cnVjdCBkZW50cnkJKmRkaXIsICpkbmV3LCAqZG9sZDsKLQlzdHJ1Y3QgaW5vZGUJKmRpcnAsICpkZXN0OworCXN0cnVjdCBpbm9kZQkqZGlycDsKIAlfX2JlMzIJCWVycjsKIAlpbnQJCWhvc3RfZXJyOwogCkBAIC0xNjU5LDcgKzE2NzQsNiBAQAogCQlnb3RvIG91dF9uZnNlcnI7CiAKIAlkb2xkID0gdGZocC0+ZmhfZGVudHJ5OwotCWRlc3QgPSBkb2xkLT5kX2lub2RlOwogCiAJaG9zdF9lcnIgPSBtbnRfd2FudF93cml0ZSh0ZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAlpZiAoaG9zdF9lcnIpIHsKQEAgLTIwMTksOCArMjAzMywxNCBAQAogX19iZTMyCiBuZnNkX3N0YXRmcyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsIHN0cnVjdCBrc3RhdGZzICpzdGF0LCBpbnQgYWNjZXNzKQogewotCV9fYmUzMiBlcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgMCwgTkZTRF9NQVlfTk9QIHwgYWNjZXNzKTsKLQlpZiAoIWVyciAmJiB2ZnNfc3RhdGZzKGZocC0+ZmhfZGVudHJ5LHN0YXQpKQorCXN0cnVjdCBwYXRoIHBhdGggPSB7CisJCS5tbnQJPSBmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQsCisJCS5kZW50cnkJPSBmaHAtPmZoX2RlbnRyeSwKKwl9OworCV9fYmUzMiBlcnI7CisKKwllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgMCwgTkZTRF9NQVlfTk9QIHwgYWNjZXNzKTsKKwlpZiAoIWVyciAmJiB2ZnNfc3RhdGZzKCZwYXRoLCBzdGF0KSkKIAkJZXJyID0gbmZzZXJyX2lvOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMDM4LDcgKzIwNTgsNiBAQAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBhY2MpCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgcGF0aAlwYXRoOwogCWludAkJZXJyOwogCiAJaWYgKGFjYyA9PSBORlNEX01BWV9OT1ApCkBAIC0yMTExLDE1ICsyMTMwLDcgQEAKIAlpZiAoZXJyID09IC1FQUNDRVMgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgogCSAgICBhY2MgPT0gKE5GU0RfTUFZX1JFQUQgfCBORlNEX01BWV9PV05FUl9PVkVSUklERSkpCiAJCWVyciA9IGlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDKTsKLQlpZiAoZXJyKQotCQlnb3RvIG5mc2Rfb3V0OwogCi0JLyogRG8gaW50ZWdyaXR5IChwZXJtaXNzaW9uKSBjaGVja2luZyBub3csIGJ1dCBkZWZlciBpbmNyZW1lbnRpbmcKLQkgKiBJTUEgY291bnRzIHRvIHRoZSBhY3R1YWwgZmlsZSBvcGVuLgotCSAqLwotCXBhdGgubW50ID0gZXhwLT5leF9wYXRoLm1udDsKLQlwYXRoLmRlbnRyeSA9IGRlbnRyeTsKLW5mc2Rfb3V0OgogCXJldHVybiBlcnI/IG5mc2Vycm5vKGVycikgOiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5oIGIvZnMvbmZzZC92ZnMuaAppbmRleCAyMTdhNjJjLi45YTM3MGE1IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5oCisrKyBiL2ZzL25mc2QvdmZzLmgKQEAgLTY0LDcgKzY0LDkgQEAKIF9fYmUzMgkJbmZzZF9vcGVuKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3Qgc3ZjX2ZoICosIGludCwKIAkJCQlpbnQsIHN0cnVjdCBmaWxlICoqKTsKIHZvaWQJCW5mc2RfY2xvc2Uoc3RydWN0IGZpbGUgKik7Ci1fX2JlMzIgCQluZnNkX3JlYWQoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IGZpbGUgKiwKK19fYmUzMiAJCW5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgc3RydWN0IHN2Y19maCAqLAorCQkJCWxvZmZfdCwgc3RydWN0IGt2ZWMgKiwgaW50LCB1bnNpZ25lZCBsb25nICopOworX19iZTMyIAkJbmZzZF9yZWFkX2ZpbGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKiwgc3RydWN0IGZpbGUgKiwKIAkJCQlsb2ZmX3QsIHN0cnVjdCBrdmVjICosIGludCwgdW5zaWduZWQgbG9uZyAqKTsKIF9fYmUzMiAJCW5mc2Rfd3JpdGUoc3RydWN0IHN2Y19ycXN0ICosIHN0cnVjdCBzdmNfZmggKixzdHJ1Y3QgZmlsZSAqLAogCQkJCWxvZmZfdCwgc3RydWN0IGt2ZWMgKixpbnQsIHVuc2lnbmVkIGxvbmcgKiwgaW50ICopOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2JtYXAuYyBiL2ZzL25pbGZzMi9ibWFwLmMKaW5kZXggZWZmZGJkYi4uM2RiZGMxZCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2JtYXAuYworKysgYi9mcy9uaWxmczIvYm1hcC5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAibmlsZnMuaCIKICNpbmNsdWRlICJibWFwLmgiCiAjaW5jbHVkZSAic2IuaCIKKyNpbmNsdWRlICJidHJlZS5oIgorI2luY2x1ZGUgImRpcmVjdC5oIgogI2luY2x1ZGUgImJ0bm9kZS5oIgogI2luY2x1ZGUgIm1kdC5oIgogI2luY2x1ZGUgImRhdC5oIgpAQCAtNTMzLDcgKzUzNSw3IEBACiAKIHZvaWQgbmlsZnNfYm1hcF9pbml0X2djZGF0KHN0cnVjdCBuaWxmc19ibWFwICpnY2JtYXAsIHN0cnVjdCBuaWxmc19ibWFwICpibWFwKQogewotCW1lbWNweShnY2JtYXAsIGJtYXAsIHNpemVvZih1bmlvbiBuaWxmc19ibWFwX3VuaW9uKSk7CisJbWVtY3B5KGdjYm1hcCwgYm1hcCwgc2l6ZW9mKCpibWFwKSk7CiAJaW5pdF9yd3NlbSgmZ2NibWFwLT5iX3NlbSk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmJtYXAtPmJfc2VtLCAmbmlsZnNfYm1hcF9kYXRfbG9ja19rZXkpOwogCWdjYm1hcC0+Yl9pbm9kZSA9ICZOSUxGU19CTUFQX0koZ2NibWFwKS0+dmZzX2lub2RlOwpAQCAtNTQxLDcgKzU0Myw3IEBACiAKIHZvaWQgbmlsZnNfYm1hcF9jb21taXRfZ2NkYXQoc3RydWN0IG5pbGZzX2JtYXAgKmdjYm1hcCwgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXApCiB7Ci0JbWVtY3B5KGJtYXAsIGdjYm1hcCwgc2l6ZW9mKHVuaW9uIG5pbGZzX2JtYXBfdW5pb24pKTsKKwltZW1jcHkoYm1hcCwgZ2NibWFwLCBzaXplb2YoKmJtYXApKTsKIAlpbml0X3J3c2VtKCZibWFwLT5iX3NlbSk7CiAJbG9ja2RlcF9zZXRfY2xhc3MoJmJtYXAtPmJfc2VtLCAmbmlsZnNfYm1hcF9kYXRfbG9ja19rZXkpOwogCWJtYXAtPmJfaW5vZGUgPSAmTklMRlNfQk1BUF9JKGJtYXApLT52ZnNfaW5vZGU7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYm1hcC5oIGIvZnMvbmlsZnMyL2JtYXAuaAppbmRleCA5OTgwZDdkLi5hMjA1NjliIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYm1hcC5oCisrKyBiL2ZzL25pbGZzMi9ibWFwLmgKQEAgLTMyLDExICszMiw2IEBACiAKICNkZWZpbmUgTklMRlNfQk1BUF9JTlZBTElEX1BUUgkwCiAKLSNkZWZpbmUgbmlsZnNfYm1hcF9ka2V5X3RvX2tleShka2V5KQlsZTY0X3RvX2NwdShka2V5KQotI2RlZmluZSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSkJY3B1X3RvX2xlNjQoa2V5KQotI2RlZmluZSBuaWxmc19ibWFwX2RwdHJfdG9fcHRyKGRwdHIpCWxlNjRfdG9fY3B1KGRwdHIpCi0jZGVmaW5lIG5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyKQljcHVfdG9fbGU2NChwdHIpCi0KICNkZWZpbmUgbmlsZnNfYm1hcF9rZXlkaWZmX2FicyhkaWZmKQkoKGRpZmYpIDwgMCA/IC0oZGlmZikgOiAoZGlmZikpCiAKIApAQCAtNzEsNyArNjYsNyBAQAogCWludCAoKmJvcF9kZWxldGUpKHN0cnVjdCBuaWxmc19ibWFwICosIF9fdTY0KTsKIAl2b2lkICgqYm9wX2NsZWFyKShzdHJ1Y3QgbmlsZnNfYm1hcCAqKTsKIAotCWludCAoKmJvcF9wcm9wYWdhdGUpKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKKwlpbnQgKCpib3BfcHJvcGFnYXRlKShzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiAJdm9pZCAoKmJvcF9sb29rdXBfZGlydHlfYnVmZmVycykoc3RydWN0IG5pbGZzX2JtYXAgKiwKIAkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKik7CiAKQEAgLTExMCw2ICsxMDUsNyBAQAogICogQGJfbGFzdF9hbGxvY2F0ZWRfcHRyOiBsYXN0IGFsbG9jYXRlZCBwdHIgZm9yIGRhdGEgYmxvY2sKICAqIEBiX3B0cl90eXBlOiBwb2ludGVyIHR5cGUKICAqIEBiX3N0YXRlOiBzdGF0ZQorICogQGJfbmNoaWxkcmVuX3Blcl9ibG9jazogbWF4aW11bSBudW1iZXIgb2YgY2hpbGQgbm9kZXMgZm9yIG5vbi1yb290IG5vZGVzCiAgKi8KIHN0cnVjdCBuaWxmc19ibWFwIHsKIAl1bmlvbiB7CkBAIC0xMjMsNiArMTE5LDcgQEAKIAlfX3U2NCBiX2xhc3RfYWxsb2NhdGVkX3B0cjsKIAlpbnQgYl9wdHJfdHlwZTsKIAlpbnQgYl9zdGF0ZTsKKwlfX3UxNiBiX25jaGlsZHJlbl9wZXJfYmxvY2s7CiB9OwogCiAvKiBwb2ludGVyIHR5cGUgKi8KQEAgLTIyNCw2ICsyMjEsMTMgQEAKIAkJbmlsZnNfZGF0X2Fib3J0X2VuZChkYXQsICZyZXEtPmJwcl9yZXEpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfYm1hcF9zZXRfdGFyZ2V0X3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSwKKwkJCQkJICAgX191NjQgcHRyKQoreworCWJtYXAtPmJfbGFzdF9hbGxvY2F0ZWRfa2V5ID0ga2V5OworCWJtYXAtPmJfbGFzdF9hbGxvY2F0ZWRfcHRyID0gcHRyOworfQorCiBfX3U2NCBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYm1hcF91bmlvbi5oIGIvZnMvbmlsZnMyL2JtYXBfdW5pb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxNTA5Yi4uMDAwMDAwMAotLS0gYS9mcy9uaWxmczIvYm1hcF91bmlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIGJtYXBfdW5pb24uaCAtIE5JTEZTIGJsb2NrIG1hcHBpbmcuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggTmlwcG9uIFRlbGVncmFwaCBhbmQgVGVsZXBob25lIENvcnBvcmF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICogV3JpdHRlbiBieSBLb2ppIFNhdG8gPGtvamlAb3NyZy5uZXQ+LgotICovCi0KLSNpZm5kZWYgX05JTEZTX0JNQVBfVU5JT05fSAotI2RlZmluZSBfTklMRlNfQk1BUF9VTklPTl9ICi0KLSNpbmNsdWRlICJibWFwLmgiCi0jaW5jbHVkZSAiZGlyZWN0LmgiCi0jaW5jbHVkZSAiYnRyZWUuaCIKLQotLyoqCi0gKiBuaWxmc19ibWFwX3VuaW9uIC0KLSAqIEBiaV9ibWFwOiBibWFwIHN0cnVjdHVyZQotICogQGJpX2J0cmVlOiBkaXJlY3QgbWFwIHN0cnVjdHVyZQotICogQGJpX2RpcmVjdDogQi10cmVlIHN0cnVjdHVyZQotICovCi11bmlvbiBuaWxmc19ibWFwX3VuaW9uIHsKLQlzdHJ1Y3QgbmlsZnNfYm1hcCBiaV9ibWFwOwotCXN0cnVjdCBuaWxmc19kaXJlY3QgYmlfZGlyZWN0OwotCXN0cnVjdCBuaWxmc19idHJlZSBiaV9idHJlZTsKLX07Ci0KLSNlbmRpZgkvKiBfTklMRlNfQk1BUF9VTklPTl9IICovCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmMgYi9mcy9uaWxmczIvYnRub2RlLmMKaW5kZXggNDQ3Y2U0Ny4uZjc4YWIxMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5jCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuYwpAQCAtOTYsMTAgKzk2LDEyIEBACiB9CiAKIGludCBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jLCBfX3U2NCBibG9ja25yLAotCQkJICAgICAgc2VjdG9yX3QgcGJsb2NrbnIsIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCkKKwkJCSAgICAgIHNlY3Rvcl90IHBibG9ja25yLCBpbnQgbW9kZSwKKwkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCwgc2VjdG9yX3QgKnN1Ym1pdF9wdHIpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTklMRlNfQlROQ19JKGJ0bmMpOworCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBlcnI7CiAKIAliaCA9IG5pbGZzX2dyYWJfYnVmZmVyKGlub2RlLCBidG5jLCBibG9ja25yLCAxIDw8IEJIX05JTEZTX05vZGUpOwpAQCAtMTA3LDYgKzEwOSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyID0gLUVFWElTVDsgLyogaW50ZXJuYWwgY29kZSAqLworCXBhZ2UgPSBiaC0+Yl9wYWdlOwogCiAJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX2RpcnR5KGJoKSkKIAkJZ290byBmb3VuZDsKQEAgLTEyNSw3ICsxMjgsMTYgQEAKIAkJCX0KIAkJfQogCX0KLQlsb2NrX2J1ZmZlcihiaCk7CisKKwlpZiAobW9kZSA9PSBSRUFEQSkgeworCQlpZiAocGJsb2NrbnIgIT0gKnN1Ym1pdF9wdHIgKyAxIHx8ICF0cnlsb2NrX2J1ZmZlcihiaCkpIHsKKwkJCWVyciA9IC1FQlVTWTsgLyogaW50ZXJuYWwgY29kZSAqLworCQkJYnJlbHNlKGJoKTsKKwkJCWdvdG8gb3V0X2xvY2tlZDsKKwkJfQorCX0gZWxzZSB7IC8qIG1vZGUgPT0gUkVBRCAqLworCQlsb2NrX2J1ZmZlcihiaCk7CisJfQogCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpKSB7CiAJCXVubG9ja19idWZmZXIoYmgpOwogCQllcnIgPSAtRUVYSVNUOyAvKiBpbnRlcm5hbCBjb2RlICovCkBAIC0xMzYsMTUgKzE0OCwxNiBAQAogCWJoLT5iX2Jsb2NrbnIgPSBwYmxvY2tucjsgLyogc2V0IGJsb2NrIGFkZHJlc3MgZm9yIHJlYWQgKi8KIAliaC0+Yl9lbmRfaW8gPSBlbmRfYnVmZmVyX3JlYWRfc3luYzsKIAlnZXRfYmgoYmgpOwotCXN1Ym1pdF9iaChSRUFELCBiaCk7CisJc3VibWl0X2JoKG1vZGUsIGJoKTsKIAliaC0+Yl9ibG9ja25yID0gYmxvY2tucjsgLyogc2V0IGJhY2sgdG8gdGhlIGdpdmVuIGJsb2NrIGFkZHJlc3MgKi8KKwkqc3VibWl0X3B0ciA9IHBibG9ja25yOwogCWVyciA9IDA7CiBmb3VuZDoKIAkqcGJoID0gYmg7CiAKIG91dF9sb2NrZWQ6Ci0JdW5sb2NrX3BhZ2UoYmgtPmJfcGFnZSk7Ci0JcGFnZV9jYWNoZV9yZWxlYXNlKGJoLT5iX3BhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRub2RlLmggYi9mcy9uaWxmczIvYnRub2RlLmgKaW5kZXggMDdkYTgzZi4uNzkwMzc0OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0bm9kZS5oCisrKyBiL2ZzL25pbGZzMi9idG5vZGUuaApAQCAtNDIsOCArNDIsOCBAQAogdm9pZCBuaWxmc19idG5vZGVfY2FjaGVfY2xlYXIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5pbGZzX2J0bm9kZV9jcmVhdGVfYmxvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJ0bmMsCiAJCQkJCSAgICAgIF9fdTY0IGJsb2NrbnIpOwotaW50IG5pbGZzX2J0bm9kZV9zdWJtaXRfYmxvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgX191NjQsIHNlY3Rvcl90LAotCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKK2ludCBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIF9fdTY0LCBzZWN0b3JfdCwgaW50LAorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqLCBzZWN0b3JfdCAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2RlbGV0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiBpbnQgbmlsZnNfYnRub2RlX3ByZXBhcmVfY2hhbmdlX2tleShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAogCQkJCSAgICBzdHJ1Y3QgbmlsZnNfYnRub2RlX2Noa2V5X2N0eHQgKik7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvYnRyZWUuYyBiL2ZzL25pbGZzMi9idHJlZS5jCmluZGV4IGIyN2EzNDIuLjMwMGMyYmMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idHJlZS5jCisrKyBiL2ZzL25pbGZzMi9idHJlZS5jCkBAIC02NiwzMCArNjYsMTAgQEAKIC8qCiAgKiBCLXRyZWUgbm9kZSBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsIF9fdTY0IHB0ciwKLQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jID0KLQkJJk5JTEZTX0JNQVBfSSgoc3RydWN0IG5pbGZzX2JtYXAgKilidHJlZSktPmlfYnRub2RlX2NhY2hlOwotCWludCBlcnI7Ci0KLQllcnIgPSBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKGJ0bmMsIHB0ciwgMCwgYmhwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyID09IC1FRVhJU1QgPyAwIDogZXJyOwotCi0Jd2FpdF9vbl9idWZmZXIoKmJocCk7Ci0JaWYgKCFidWZmZXJfdXB0b2RhdGUoKmJocCkpIHsKLQkJYnJlbHNlKCpiaHApOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfZ2V0X25ld19ibG9jayhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIGludCBuaWxmc19idHJlZV9nZXRfbmV3X2Jsb2NrKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgIF9fdTY0IHB0ciwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmhwKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jID0KLQkJJk5JTEZTX0JNQVBfSSgoc3RydWN0IG5pbGZzX2JtYXAgKilidHJlZSktPmlfYnRub2RlX2NhY2hlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jID0gJk5JTEZTX0JNQVBfSShidHJlZSktPmlfYnRub2RlX2NhY2hlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKIAliaCA9IG5pbGZzX2J0bm9kZV9jcmVhdGVfYmxvY2soYnRuYywgcHRyKTsKQEAgLTEwMSw3MSArODEsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLW5pbGZzX2J0cmVlX25vZGVfZ2V0X2ZsYWdzKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorc3RhdGljIGludCBuaWxmc19idHJlZV9ub2RlX2dldF9mbGFncyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKIHsKIAlyZXR1cm4gbm9kZS0+Ym5fZmxhZ3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIG5pbGZzX2J0cmVlX25vZGVfc2V0X2ZsYWdzKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgZmxhZ3MpCiB7CiAJbm9kZS0+Ym5fZmxhZ3MgPSBmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYnRyZWVfbm9kZV9yb290KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorc3RhdGljIGludCBuaWxmc19idHJlZV9ub2RlX3Jvb3QoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7CiAJcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2ZsYWdzKG5vZGUpICYgTklMRlNfQlRSRUVfTk9ERV9ST09UOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQogewogCXJldHVybiBub2RlLT5ibl9sZXZlbDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogbmlsZnNfYnRyZWVfbm9kZV9zZXRfbGV2ZWwoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBsZXZlbCkKIHsKIAlub2RlLT5ibl9sZXZlbCA9IGxldmVsOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQorc3RhdGljIGludCBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7CiAJcmV0dXJuIGxlMTZfdG9fY3B1KG5vZGUtPmJuX25jaGlsZHJlbik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIG5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IG5jaGlsZHJlbikKIHsKIAlub2RlLT5ibl9uY2hpbGRyZW4gPSBjcHVfdG9fbGUxNihuY2hpbGRyZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuaWxmc19idHJlZV9ub2RlX3NpemUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbm9kZV9zaXplKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSkKIHsKLQlyZXR1cm4gMSA8PCBidHJlZS0+YnRfYm1hcC5iX2lub2RlLT5pX2Jsa2JpdHM7CisJcmV0dXJuIDEgPDwgYnRyZWUtPmJfaW5vZGUtPmlfYmxrYml0czsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLW5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQorc3RhdGljIGludCBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSkKIHsKLQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9yb290KG5vZGUpID8KLQkJTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUlOIDoKLQkJTklMRlNfQlRSRUVfTk9ERV9OQ0hJTERSRU5fTUlOKG5pbGZzX2J0cmVlX25vZGVfc2l6ZShidHJlZSkpOworCXJldHVybiBidHJlZS0+Yl9uY2hpbGRyZW5fcGVyX2Jsb2NrOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCi17Ci0JcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfcm9vdChub2RlKSA/Ci0JCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCA6Ci0JCU5JTEZTX0JUUkVFX05PREVfTkNISUxEUkVOX01BWChuaWxmc19idHJlZV9ub2RlX3NpemUoYnRyZWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBfX2xlNjQgKgorc3RhdGljIF9fbGU2NCAqCiBuaWxmc19idHJlZV9ub2RlX2RrZXlzKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQogewogCXJldHVybiAoX19sZTY0ICopKChjaGFyICopKG5vZGUgKyAxKSArCkBAIC0xNzMsNDUgKzEzNyw0MCBAQAogCQkJICAgMCA6IE5JTEZTX0JUUkVFX05PREVfRVhUUkFfUEFEX1NJWkUpKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2xlNjQgKgotbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCitzdGF0aWMgX19sZTY0ICoKK25pbGZzX2J0cmVlX25vZGVfZHB0cnMoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBuY21heCkKIHsKLQlyZXR1cm4gKF9fbGU2NCAqKShuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpICsKLQkJCSAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KG5vZGUsIGJ0cmVlKSk7CisJcmV0dXJuIChfX2xlNjQgKikobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKSArIG5jbWF4KTsKIH0KIAotc3RhdGljIGlubGluZSBfX3U2NAorc3RhdGljIF9fdTY0CiBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCkKIHsKLQlyZXR1cm4gbmlsZnNfYm1hcF9ka2V5X3RvX2tleSgqKG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSkgKyBpbmRleCkpOworCXJldHVybiBsZTY0X3RvX2NwdSgqKG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSkgKyBpbmRleCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiBuaWxmc19idHJlZV9ub2RlX3NldF9rZXkoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCwgX191NjQga2V5KQogewotCSoobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKSArIGluZGV4KSA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKKwkqKG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSkgKyBpbmRleCkgPSBjcHVfdG9fbGU2NChrZXkpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fdTY0Ci1uaWxmc19idHJlZV9ub2RlX2dldF9wdHIoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4KQorc3RhdGljIF9fdTY0CituaWxmc19idHJlZV9ub2RlX2dldF9wdHIoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCwKKwkJCSBpbnQgbmNtYXgpCiB7Ci0JcmV0dXJuIG5pbGZzX2JtYXBfZHB0cl90b19wdHIoKihuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKSArCi0JCQkJCWluZGV4KSk7CisJcmV0dXJuIGxlNjRfdG9fY3B1KCoobmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBuY21heCkgKyBpbmRleCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5pbGZzX2J0cmVlX25vZGVfc2V0X3B0cihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgsIF9fdTY0IHB0cikKK3N0YXRpYyB2b2lkCituaWxmc19idHJlZV9ub2RlX3NldF9wdHIoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCwgX191NjQgcHRyLAorCQkJIGludCBuY21heCkKIHsKLQkqKG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpICsgaW5kZXgpID0KLQkJbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOworCSoobmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBuY21heCkgKyBpbmRleCkgPSBjcHVfdG9fbGU2NChwdHIpOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX2luaXQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkgIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAotCQkJCSAgaW50IGZsYWdzLCBpbnQgbGV2ZWwsIGludCBuY2hpbGRyZW4sCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX2luaXQoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBmbGFncywKKwkJCQkgIGludCBsZXZlbCwgaW50IG5jaGlsZHJlbiwgaW50IG5jbWF4LAogCQkJCSAgY29uc3QgX191NjQgKmtleXMsIGNvbnN0IF9fdTY0ICpwdHJzKQogewogCV9fbGU2NCAqZGtleXM7CkBAIC0yMjMsMjkgKzE4MiwyOCBAQAogCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihub2RlLCBuY2hpbGRyZW4pOwogCiAJZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpOwotCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBidHJlZSk7CisJZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIG5jbWF4KTsKIAlmb3IgKGkgPSAwOyBpIDwgbmNoaWxkcmVuOyBpKyspIHsKLQkJZGtleXNbaV0gPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleXNbaV0pOwotCQlkcHRyc1tpXSA9IG5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyc1tpXSk7CisJCWRrZXlzW2ldID0gY3B1X3RvX2xlNjQoa2V5c1tpXSk7CisJCWRwdHJzW2ldID0gY3B1X3RvX2xlNjQocHRyc1tpXSk7CiAJfQogfQogCiAvKiBBc3N1bWUgdGhlIGJ1ZmZlciBoZWFkcyBjb3JyZXNwb25kaW5nIHRvIGxlZnQgYW5kIHJpZ2h0IGFyZSBsb2NrZWQuICovCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbGVmdCwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX25vZGVfbW92ZV9sZWZ0KHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpsZWZ0LAogCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqcmlnaHQsCi0JCQkJICAgICAgIGludCBuKQorCQkJCSAgICAgICBpbnQgbiwgaW50IGxuY21heCwgaW50IHJuY21heCkKIHsKIAlfX2xlNjQgKmxka2V5cywgKnJka2V5czsKIAlfX2xlNjQgKmxkcHRycywgKnJkcHRyczsKIAlpbnQgbG5jaGlsZHJlbiwgcm5jaGlsZHJlbjsKIAogCWxka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobGVmdCk7Ci0JbGRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhsZWZ0LCBidHJlZSk7CisJbGRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhsZWZ0LCBsbmNtYXgpOwogCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiAKIAlyZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKHJpZ2h0KTsKLQlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKHJpZ2h0LCBidHJlZSk7CisJcmRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhyaWdodCwgcm5jbWF4KTsKIAlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJpZ2h0KTsKIAogCW1lbWNweShsZGtleXMgKyBsbmNoaWxkcmVuLCByZGtleXMsIG4gKiBzaXplb2YoKnJka2V5cykpOwpAQCAtMjYwLDIxICsyMTgsMjAgQEAKIH0KIAogLyogQXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBoZWFkcyBjb3JyZXNwb25kaW5nIHRvIGxlZnQgYW5kIHJpZ2h0IGFyZSBsb2NrZWQuICovCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKmxlZnQsCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKmxlZnQsCiAJCQkJCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpyaWdodCwKLQkJCQkJaW50IG4pCisJCQkJCWludCBuLCBpbnQgbG5jbWF4LCBpbnQgcm5jbWF4KQogewogCV9fbGU2NCAqbGRrZXlzLCAqcmRrZXlzOwogCV9fbGU2NCAqbGRwdHJzLCAqcmRwdHJzOwogCWludCBsbmNoaWxkcmVuLCBybmNoaWxkcmVuOwogCiAJbGRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhsZWZ0KTsKLQlsZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGxlZnQsIGJ0cmVlKTsKKwlsZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGxlZnQsIGxuY21heCk7CiAJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKIAogCXJka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMocmlnaHQpOwotCXJkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMocmlnaHQsIGJ0cmVlKTsKKwlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKHJpZ2h0LCBybmNtYXgpOwogCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOwogCiAJbWVtbW92ZShyZGtleXMgKyBuLCByZGtleXMsIHJuY2hpbGRyZW4gKiBzaXplb2YoKnJka2V5cykpOwpAQCAtMjg5LDE2ICsyNDYsMTUgQEAKIH0KIAogLyogQXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBoZWFkIGNvcnJlc3BvbmRpbmcgdG8gbm9kZSBpcyBsb2NrZWQuICovCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX2luc2VydChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJCSAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCQkgICAgX191NjQga2V5LCBfX3U2NCBwdHIsIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgsCisJCQkJICAgIF9fdTY0IGtleSwgX191NjQgcHRyLCBpbnQgbmNtYXgpCiB7CiAJX19sZTY0ICpka2V5czsKIAlfX2xlNjQgKmRwdHJzOwogCWludCBuY2hpbGRyZW47CiAKIAlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSk7Ci0JZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKTsKKwlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgbmNtYXgpOwogCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAlpZiAoaW5kZXggPCBuY2hpbGRyZW4pIHsKIAkJbWVtbW92ZShka2V5cyArIGluZGV4ICsgMSwgZGtleXMgKyBpbmRleCwKQEAgLTMwNiwxNiArMjYyLDE1IEBACiAJCW1lbW1vdmUoZHB0cnMgKyBpbmRleCArIDEsIGRwdHJzICsgaW5kZXgsCiAJCQkobmNoaWxkcmVuIC0gaW5kZXgpICogc2l6ZW9mKCpkcHRycykpOwogCX0KLQlka2V5c1tpbmRleF0gPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7Ci0JZHB0cnNbaW5kZXhdID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOworCWRrZXlzW2luZGV4XSA9IGNwdV90b19sZTY0KGtleSk7CisJZHB0cnNbaW5kZXhdID0gY3B1X3RvX2xlNjQocHRyKTsKIAluY2hpbGRyZW4rKzsKIAluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4obm9kZSwgbmNoaWxkcmVuKTsKIH0KIAogLyogQXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBoZWFkIGNvcnJlc3BvbmRpbmcgdG8gbm9kZSBpcyBsb2NrZWQuICovCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJCSAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCQkgICAgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwLCBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ub2RlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4LAorCQkJCSAgICBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnAsIGludCBuY21heCkKIHsKIAlfX3U2NCBrZXk7CiAJX191NjQgcHRyOwpAQCAtMzI0LDkgKzI3OSw5IEBACiAJaW50IG5jaGlsZHJlbjsKIAogCWRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKTsKLQlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpOwotCWtleSA9IG5pbGZzX2JtYXBfZGtleV90b19rZXkoZGtleXNbaW5kZXhdKTsKLQlwdHIgPSBuaWxmc19ibWFwX2RwdHJfdG9fcHRyKGRwdHJzW2luZGV4XSk7CisJZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIG5jbWF4KTsKKwlrZXkgPSBsZTY0X3RvX2NwdShka2V5c1tpbmRleF0pOworCXB0ciA9IGxlNjRfdG9fY3B1KGRwdHJzW2luZGV4XSk7CiAJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCWlmIChrZXlwICE9IE5VTEwpCiAJCSprZXlwID0ga2V5OwpAQCAtMzgyLDQwICszMzcsOTIgQEAKIAlyZXR1cm4gcyA9PSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICoKLW5pbGZzX2J0cmVlX2dldF9yb290KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCisvKioKKyAqIG5pbGZzX2J0cmVlX25vZGVfYnJva2VuIC0gdmVyaWZ5IGNvbnNpc3RlbmN5IG9mIGJ0cmVlIG5vZGUKKyAqIEBub2RlOiBidHJlZSBub2RlIGJsb2NrIHRvIGJlIGV4YW1pbmVkCisgKiBAc2l6ZTogbm9kZSBzaXplIChpbiBieXRlcykKKyAqIEBibG9ja25yOiBibG9jayBudW1iZXIKKyAqCisgKiBSZXR1cm4gVmFsdWU6IElmIG5vZGUgaXMgYnJva2VuLCAxIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIDAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbm9kZV9icm9rZW4oY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCisJCQkJICAgc2l6ZV90IHNpemUsIHNlY3Rvcl90IGJsb2NrbnIpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJ0cmVlLT5idF9ibWFwLmJfdS51X2RhdGE7CisJaW50IGxldmVsLCBmbGFncywgbmNoaWxkcmVuOworCWludCByZXQgPSAwOworCisJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKKwlmbGFncyA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2ZsYWdzKG5vZGUpOworCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKKworCWlmICh1bmxpa2VseShsZXZlbCA8IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOIHx8CisJCSAgICAgbGV2ZWwgPj0gTklMRlNfQlRSRUVfTEVWRUxfTUFYIHx8CisJCSAgICAgKGZsYWdzICYgTklMRlNfQlRSRUVfTk9ERV9ST09UKSB8fAorCQkgICAgIG5jaGlsZHJlbiA8IDAgfHwKKwkJICAgICBuY2hpbGRyZW4gPiBOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NQVgoc2l6ZSkpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIk5JTEZTOiBiYWQgYnRyZWUgbm9kZSAoYmxvY2tucj0lbGx1KTogIgorCQkgICAgICAgImxldmVsID0gJWQsIGZsYWdzID0gMHgleCwgbmNoaWxkcmVuID0gJWRcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrbnIsIGxldmVsLCBmbGFncywgbmNoaWxkcmVuKTsKKwkJcmV0ID0gMTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCitpbnQgbmlsZnNfYnRyZWVfYnJva2VuX25vZGVfYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGJ1ZmZlcl9uaWxmc19jaGVja2VkKGJoKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBuaWxmc19idHJlZV9ub2RlX2Jyb2tlbigoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhLAorCQkJCSAgICAgICBiaC0+Yl9zaXplLCBiaC0+Yl9ibG9ja25yKTsKKwlpZiAobGlrZWx5KCFyZXQpKQorCQlzZXRfYnVmZmVyX25pbGZzX2NoZWNrZWQoYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCituaWxmc19idHJlZV9nZXRfcm9vdChjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUpCit7CisJcmV0dXJuIChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJ0cmVlLT5iX3UudV9kYXRhOworfQorCitzdGF0aWMgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKgogbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwgaW50IGxldmVsKQogewogCXJldHVybiAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKilwYXRoW2xldmVsXS5icF9iaC0+Yl9kYXRhOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICoKK3N0YXRpYyBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCiBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsIGludCBsZXZlbCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopcGF0aFtsZXZlbF0uYnBfc2liX2JoLT5iX2RhdGE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2J0cmVlX2hlaWdodChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQorc3RhdGljIGludCBuaWxmc19idHJlZV9oZWlnaHQoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlKQogewogCXJldHVybiBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSkpICsgMTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCi1uaWxmc19idHJlZV9nZXRfbm9kZShjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICoKK25pbGZzX2J0cmVlX2dldF9ub2RlKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJICAgICBpbnQgbGV2ZWwpCisJCSAgICAgaW50IGxldmVsLCBpbnQgKm5jbWF4cCkKIHsKLQlyZXR1cm4gKGxldmVsID09IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSA/Ci0JCW5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSA6Ci0JCW5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlOworCisJaWYgKGxldmVsID09IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSB7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CisJCSpuY21heHAgPSBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVg7CisJfSBlbHNlIHsKKwkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCQkqbmNtYXhwID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CisJfQorCXJldHVybiBub2RlOwogfQogCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogbmlsZnNfYnRyZWVfYmFkX25vZGUoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBsZXZlbCkKIHsKIAlpZiAodW5saWtlbHkobmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSkgIT0gbGV2ZWwpKSB7CkBAIC00MjcsMTMgKzQzNCw4MyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RydWN0IG5pbGZzX2J0cmVlX3JlYWRhaGVhZF9pbmZvIHsKKwlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZTsJLyogcGFyZW50IG5vZGUgKi8KKwlpbnQgbWF4X3JhX2Jsb2NrczsJCS8qIG1heCBub2YgYmxvY2tzIHRvIHJlYWQgYWhlYWQgKi8KKwlpbnQgaW5kZXg7CQkJLyogY3VycmVudCBpbmRleCBvbiB0aGUgcGFyZW50IG5vZGUgKi8KKwlpbnQgbmNtYXg7CQkJLyogbm9mIGNoaWxkcmVuIGluIHRoZSBwYXJlbnQgbm9kZSAqLworfTsKKworc3RhdGljIGludCBfX25pbGZzX2J0cmVlX2dldF9ibG9jayhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsIF9fdTY0IHB0ciwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAsCisJCQkJICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3JlYWRhaGVhZF9pbmZvICpyYSkKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYyA9ICZOSUxGU19CTUFQX0koYnRyZWUpLT5pX2J0bm9kZV9jYWNoZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqcmFfYmg7CisJc2VjdG9yX3Qgc3VibWl0X3B0ciA9IDA7CisJaW50IHJldDsKKworCXJldCA9IG5pbGZzX2J0bm9kZV9zdWJtaXRfYmxvY2soYnRuYywgcHRyLCAwLCBSRUFELCAmYmgsICZzdWJtaXRfcHRyKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVFWElTVCkKKwkJCXJldHVybiByZXQ7CisJCWdvdG8gb3V0X2NoZWNrOworCX0KKworCWlmIChyYSkgeworCQlpbnQgaSwgbjsKKwkJX191NjQgcHRyMjsKKworCQkvKiByZWFkIGFoZWFkIHNpYmxpbmcgbm9kZXMgKi8KKwkJZm9yIChuID0gcmEtPm1heF9yYV9ibG9ja3MsIGkgPSByYS0+aW5kZXggKyAxOworCQkgICAgIG4gPiAwICYmIGkgPCByYS0+bmNtYXg7IG4tLSwgaSsrKSB7CisJCQlwdHIyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKHJhLT5ub2RlLCBpLCByYS0+bmNtYXgpOworCisJCQlyZXQgPSBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKGJ0bmMsIHB0cjIsIDAsIFJFQURBLAorCQkJCQkJCSZyYV9iaCwgJnN1Ym1pdF9wdHIpOworCQkJaWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRUVYSVNUKSkKKwkJCQlicmVsc2UocmFfYmgpOworCQkJZWxzZSBpZiAocmV0ICE9IC1FQlVTWSkKKwkJCQlicmVhazsKKwkJCWlmICghYnVmZmVyX2xvY2tlZChiaCkpCisJCQkJZ290byBvdXRfbm9fd2FpdDsKKwkJfQorCX0KKworCXdhaXRfb25fYnVmZmVyKGJoKTsKKworIG91dF9ub193YWl0OgorCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgeworCQlicmVsc2UoYmgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKyBvdXRfY2hlY2s6CisJaWYgKG5pbGZzX2J0cmVlX2Jyb2tlbl9ub2RlX2Jsb2NrKGJoKSkgeworCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOworCQlicmVsc2UoYmgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqYmhwID0gYmg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwgX191NjQgcHRyLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCkKK3sKKwlyZXR1cm4gX19uaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgYmhwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBuaWxmc19idHJlZV9kb19sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkgX191NjQga2V5LCBfX3U2NCAqcHRycCwgaW50IG1pbmxldmVsKQorCQkJCSBfX3U2NCBrZXksIF9fdTY0ICpwdHJwLCBpbnQgbWlubGV2ZWwsCisJCQkJIGludCByZWFkYWhlYWQpCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CisJc3RydWN0IG5pbGZzX2J0cmVlX3JlYWRhaGVhZF9pbmZvIHAsICpyYTsKIAlfX3U2NCBwdHI7Ci0JaW50IGxldmVsLCBpbmRleCwgZm91bmQsIHJldDsKKwlpbnQgbGV2ZWwsIGluZGV4LCBmb3VuZCwgbmNtYXgsIHJldDsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CiAJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKQEAgLTQ0MSwxNCArNTE4LDI3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCiAJZm91bmQgPSBuaWxmc19idHJlZV9ub2RlX2xvb2t1cChub2RlLCBrZXksICZpbmRleCk7Ci0JcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CisJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGluZGV4LAorCQkJCSAgICAgICBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgpOwogCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKIAlwYXRoW2xldmVsXS5icF9pbmRleCA9IGluZGV4OwogCi0JZm9yIChsZXZlbC0tOyBsZXZlbCA+PSBtaW5sZXZlbDsgbGV2ZWwtLSkgewotCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgJnBhdGhbbGV2ZWxdLmJwX2JoKTsKKwluY21heCA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOworCisJd2hpbGUgKC0tbGV2ZWwgPj0gbWlubGV2ZWwpIHsKKwkJcmEgPSBOVUxMOworCQlpZiAobGV2ZWwgPT0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4gJiYgcmVhZGFoZWFkKSB7CisJCQlwLm5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAorCQkJCQkJICAgICAgJnAubmNtYXgpOworCQkJcC5pbmRleCA9IGluZGV4OworCQkJcC5tYXhfcmFfYmxvY2tzID0gNzsKKwkJCXJhID0gJnA7CisJCX0KKwkJcmV0ID0gX19uaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgJnBhdGhbbGV2ZWxdLmJwX2JoLAorCQkJCQkgICAgICByYSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKKwogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJCWlmIChuaWxmc19idHJlZV9iYWRfbm9kZShub2RlLCBsZXZlbCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ1Niw5ICs1NDYsOSBAQAogCQkJZm91bmQgPSBuaWxmc19idHJlZV9ub2RlX2xvb2t1cChub2RlLCBrZXksICZpbmRleCk7CiAJCWVsc2UKIAkJCWluZGV4ID0gMDsKLQkJaWYgKGluZGV4IDwgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KG5vZGUsIGJ0cmVlKSkKLQkJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwgaW5kZXgpOwotCQllbHNlIHsKKwkJaWYgKGluZGV4IDwgbmNtYXgpIHsKKwkJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBpbmRleCwgbmNtYXgpOworCQl9IGVsc2UgewogCQkJV0FSTl9PTihmb3VuZCB8fCBsZXZlbCAhPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTik7CiAJCQkvKiBpbnNlcnQgKi8KIAkJCXB0ciA9IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFI7CkBAIC00NzQsMjIgKzU2NCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2RvX2xvb2t1cF9sYXN0KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX2RvX2xvb2t1cF9sYXN0KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CiAJX191NjQgcHRyOwotCWludCBpbmRleCwgbGV2ZWwsIHJldDsKKwlpbnQgaW5kZXgsIGxldmVsLCBuY21heCwgcmV0OwogCiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAlpbmRleCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSAtIDE7CiAJaWYgKGluZGV4IDwgMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKLQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKKwlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIobm9kZSwgaW5kZXgsCisJCQkJICAgICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAJcGF0aFtsZXZlbF0uYnBfYmggPSBOVUxMOwogCXBhdGhbbGV2ZWxdLmJwX2luZGV4ID0gaW5kZXg7CisJbmNtYXggPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKIAogCWZvciAobGV2ZWwtLTsgbGV2ZWwgPiAwOyBsZXZlbC0tKSB7CiAJCXJldCA9IG5pbGZzX2J0cmVlX2dldF9ibG9jayhidHJlZSwgcHRyLCAmcGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtNDk5LDcgKzU5MSw3IEBACiAJCWlmIChuaWxmc19idHJlZV9iYWRfbm9kZShub2RlLCBsZXZlbCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaW5kZXggPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgLSAxOwotCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKKwkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGluZGV4LCBuY21heCk7CiAJCXBhdGhbbGV2ZWxdLmJwX2luZGV4ID0gaW5kZXg7CiAJfQogCkBAIC01MTEsNTEgKzYwMyw0NSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbG9va3VwKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCSAgICAgIF9fdTY0IGtleSwgaW50IGxldmVsLCBfX3U2NCAqcHRycCkKIHsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOwogCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoOwotCV9fdTY0IHB0cjsKIAlpbnQgcmV0OwogCi0JYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksICZwdHIsIGxldmVsKTsKLQotCWlmIChwdHJwICE9IE5VTEwpCi0JCSpwdHJwID0gcHRyOworCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChidHJlZSwgcGF0aCwga2V5LCBwdHJwLCBsZXZlbCwgMCk7CiAKIAluaWxmc19idHJlZV9mcmVlX3BhdGgocGF0aCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2xvb2t1cF9jb250aWcoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX2xvb2t1cF9jb250aWcoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICAgX191NjQga2V5LCBfX3U2NCAqcHRycCwgdW5zaWduZWQgbWF4YmxvY2tzKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5VTEw7CiAJX191NjQgcHRyLCBwdHIyOwogCXNlY3Rvcl90IGJsb2NrbnI7CiAJaW50IGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47Ci0JaW50IHJldCwgY250LCBpbmRleCwgbWF4bGV2ZWw7CisJaW50IHJldCwgY250LCBpbmRleCwgbWF4bGV2ZWwsIG5jbWF4OworCXN0cnVjdCBuaWxmc19idHJlZV9yZWFkYWhlYWRfaW5mbyBwOwogCiAJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChidHJlZSwgcGF0aCwga2V5LCAmcHRyLCBsZXZlbCk7CisJcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksICZwdHIsIGxldmVsLCAxKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKSB7Ci0JCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJ0cmVlKSkgeworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYnRyZWUpOwogCQlyZXQgPSBuaWxmc19kYXRfdHJhbnNsYXRlKGRhdCwgcHRyLCAmYmxvY2tucik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CkBAIC01NjYsMTQgKzY1MiwxNCBAQAogCQlnb3RvIGVuZDsKIAogCW1heGxldmVsID0gbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7Ci0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCwgJm5jbWF4KTsKIAlpbmRleCA9IHBhdGhbbGV2ZWxdLmJwX2luZGV4ICsgMTsKIAlmb3IgKDs7KSB7CiAJCXdoaWxlIChpbmRleCA8IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSkgewogCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBpbmRleCkgIT0KIAkJCSAgICBrZXkgKyBjbnQpCiAJCQkJZ290byBlbmQ7Ci0JCQlwdHIyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBpbmRleCk7CisJCQlwdHIyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIGluZGV4LCBuY21heCk7CiAJCQlpZiAoZGF0KSB7CiAJCQkJcmV0ID0gbmlsZnNfZGF0X3RyYW5zbGF0ZShkYXQsIHB0cjIsICZibG9ja25yKTsKIAkJCQlpZiAocmV0IDwgMCkKQEAgLTU4OSwyMCArNjc1LDI0IEBACiAJCQlicmVhazsKIAogCQkvKiBsb29rLXVwIHJpZ2h0IHNpYmxpbmcgbm9kZSAqLwotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSk7Ci0JCWluZGV4ID0gcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4ICsgMTsKLQkJaWYgKGluZGV4ID49IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSB8fAotCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIGluZGV4KSAhPSBrZXkgKyBjbnQpCisJCXAubm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZwLm5jbWF4KTsKKwkJcC5pbmRleCA9IHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCArIDE7CisJCXAubWF4X3JhX2Jsb2NrcyA9IDc7CisJCWlmIChwLmluZGV4ID49IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihwLm5vZGUpIHx8CisJCSAgICBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkocC5ub2RlLCBwLmluZGV4KSAhPSBrZXkgKyBjbnQpCiAJCQlicmVhazsKLQkJcHRyMiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwgaW5kZXgpOwotCQlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXggPSBpbmRleDsKKwkJcHRyMiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihwLm5vZGUsIHAuaW5kZXgsIHAubmNtYXgpOworCQlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXggPSBwLmluZGV4OwogCiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CiAJCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKLQkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIyLCAmcGF0aFtsZXZlbF0uYnBfYmgpOworCisJCXJldCA9IF9fbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIyLCAmcGF0aFtsZXZlbF0uYnBfYmgsCisJCQkJCSAgICAgICZwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCQluY21heCA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCQlpbmRleCA9IDA7CiAJCXBhdGhbbGV2ZWxdLmJwX2luZGV4ID0gaW5kZXg7CiAJfQpAQCAtNjE0LDcgKzcwNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfcHJvbW90ZV9rZXkoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJICAgIGludCBsZXZlbCwgX191NjQga2V5KQogewpAQCAtNjM2LDE2ICs3MjYsMTggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2RvX2luc2VydChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfZG9faW5zZXJ0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CisJaW50IG5jYmxrOwogCiAJaWYgKGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwotCQluaWxmc19idHJlZV9ub2RlX2luc2VydChidHJlZSwgbm9kZSwgKmtleXAsICpwdHJwLAotCQkJCQlwYXRoW2xldmVsXS5icF9pbmRleCk7CisJCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CisJCW5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQkJCQkqa2V5cCwgKnB0cnAsIG5jYmxrKTsKIAkJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQogCQkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwogCkBAIC02NTUsMjIgKzc0NywyNCBAQAogCQkJCQkJCQkJIDApKTsKIAl9IGVsc2UgewogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwotCQluaWxmc19idHJlZV9ub2RlX2luc2VydChidHJlZSwgbm9kZSwgKmtleXAsICpwdHJwLAotCQkJCQlwYXRoW2xldmVsXS5icF9pbmRleCk7CisJCW5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQkJCQkqa2V5cCwgKnB0cnAsCisJCQkJCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jYXJyeV9sZWZ0KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jYXJyeV9sZWZ0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICBpbnQgbGV2ZWwsIF9fdTY0ICprZXlwLCBfX3U2NCAqcHRycCkKIHsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKmxlZnQ7Ci0JaW50IG5jaGlsZHJlbiwgbG5jaGlsZHJlbiwgbiwgbW92ZTsKKwlpbnQgbmNoaWxkcmVuLCBsbmNoaWxkcmVuLCBuLCBtb3ZlLCBuY2JsazsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKIAluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKKwluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCW1vdmUgPSAwOwogCiAJbiA9IChuY2hpbGRyZW4gKyBsbmNoaWxkcmVuICsgMSkgLyAyIC0gbG5jaGlsZHJlbjsKQEAgLTY4MCw3ICs3NzQsNyBAQAogCQltb3ZlID0gMTsKIAl9CiAKLQluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChidHJlZSwgbGVmdCwgbm9kZSwgbik7CisJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQobGVmdCwgbm9kZSwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtNzA1LDE3ICs3OTksMTggQEAKIAluaWxmc19idHJlZV9kb19pbnNlcnQoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY2FycnlfcmlnaHQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NhcnJ5X3JpZ2h0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqcmlnaHQ7Ci0JaW50IG5jaGlsZHJlbiwgcm5jaGlsZHJlbiwgbiwgbW92ZTsKKwlpbnQgbmNoaWxkcmVuLCBybmNoaWxkcmVuLCBuLCBtb3ZlLCBuY2JsazsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CiAJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOworCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CiAJbW92ZSA9IDA7CiAKIAluID0gKG5jaGlsZHJlbiArIHJuY2hpbGRyZW4gKyAxKSAvIDIgLSBybmNoaWxkcmVuOwpAQCAtNzI1LDcgKzgyMCw3IEBACiAJCW1vdmUgPSAxOwogCX0KIAotCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9yaWdodChidHJlZSwgbm9kZSwgcmlnaHQsIG4pOworCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9yaWdodChub2RlLCByaWdodCwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtNzUxLDE4ICs4NDYsMTkgQEAKIAluaWxmc19idHJlZV9kb19pbnNlcnQoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfc3BsaXQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX3NwbGl0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCSAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJICAgICAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpyaWdodDsKIAlfX3U2NCBuZXdrZXk7CiAJX191NjQgbmV3cHRyOwotCWludCBuY2hpbGRyZW4sIG4sIG1vdmU7CisJaW50IG5jaGlsZHJlbiwgbiwgbW92ZSwgbmNibGs7CiAKIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKKwluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCW1vdmUgPSAwOwogCiAJbiA9IChuY2hpbGRyZW4gKyAxKSAvIDI7CkBAIC03NzEsNyArODY3LDcgQEAKIAkJbW92ZSA9IDE7CiAJfQogCi0JbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX3JpZ2h0KGJ0cmVlLCBub2RlLCByaWdodCwgbik7CisJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX3JpZ2h0KG5vZGUsIHJpZ2h0LCBuLCBuY2JsaywgbmNibGspOwogCiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQogCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC03ODMsOCArODc5LDggQEAKIAogCWlmIChtb3ZlKSB7CiAJCXBhdGhbbGV2ZWxdLmJwX2luZGV4IC09IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKLQkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQoYnRyZWUsIHJpZ2h0LCAqa2V5cCwgKnB0cnAsCi0JCQkJCXBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKKwkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQocmlnaHQsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQkJCQkqa2V5cCwgKnB0cnAsIG5jYmxrKTsKIAogCQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShyaWdodCwgMCk7CiAJCSpwdHJwID0gcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHI7CkBAIC04MDUsMTkgKzkwMSwyMSBAQAogCXBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCsrOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ncm93KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ncm93KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCSAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkgICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpyb290LCAqY2hpbGQ7Ci0JaW50IG47CisJaW50IG4sIG5jYmxrOwogCiAJcm9vdCA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAljaGlsZCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNibGsgPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKIAogCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocm9vdCk7CiAKLQluaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQoYnRyZWUsIHJvb3QsIGNoaWxkLCBuKTsKKwluaWxmc19idHJlZV9ub2RlX21vdmVfcmlnaHQocm9vdCwgY2hpbGQsIG4sCisJCQkJICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCwgbmNibGspOwogCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKHJvb3QsIGxldmVsICsgMSk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpKQpAQCAtODMyLDExICs5MzAsMTEgQEAKIAkqcHRycCA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwogfQogCi1zdGF0aWMgX191NjQgbmlsZnNfYnRyZWVfZmluZF9uZWFyKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgX191NjQgbmlsZnNfYnRyZWVfZmluZF9uZWFyKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKIHsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZTsKLQlpbnQgbGV2ZWw7CisJaW50IGxldmVsLCBuY21heDsKIAogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiBOSUxGU19CTUFQX0lOVkFMSURfUFRSOwpAQCAtODQ0LDI5ICs5NDIsMzAgQEAKIAkvKiBsZWZ0IHNpYmxpbmcgKi8KIAlsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOOwogCWlmIChwYXRoW2xldmVsXS5icF9pbmRleCA+IDApIHsKLQkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JCXJldHVybiBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsCi0JCQkJCQlwYXRoW2xldmVsXS5icF9pbmRleCAtIDEpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsLCAmbmNtYXgpOworCQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsCisJCQkJCQlwYXRoW2xldmVsXS5icF9pbmRleCAtIDEsCisJCQkJCQluY21heCk7CiAJfQogCiAJLyogcGFyZW50ICovCiAJbGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTiArIDE7CiAJaWYgKGxldmVsIDw9IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSB7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLAotCQkJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsLCAmbmNtYXgpOworCQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQkJCQkJbmNtYXgpOwogCX0KIAogCXJldHVybiBOSUxGU19CTUFQX0lOVkFMSURfUFRSOwogfQogCi1zdGF0aWMgX191NjQgbmlsZnNfYnRyZWVfZmluZF90YXJnZXRfdihjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIF9fdTY0IG5pbGZzX2J0cmVlX2ZpbmRfdGFyZ2V0X3YoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICAgX191NjQga2V5KQogewogCV9fdTY0IHB0cjsKIAotCXB0ciA9IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfc2VxKCZidHJlZS0+YnRfYm1hcCwga2V5KTsKKwlwdHIgPSBuaWxmc19ibWFwX2ZpbmRfdGFyZ2V0X3NlcShidHJlZSwga2V5KTsKIAlpZiAocHRyICE9IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCS8qIHNlcXVlbnRpYWwgYWNjZXNzICovCiAJCXJldHVybiBwdHI7CkBAIC04NzcsMTcgKzk3NiwxMCBAQAogCQkJcmV0dXJuIHB0cjsKIAl9CiAJLyogYmxvY2sgZ3JvdXAgKi8KLQlyZXR1cm4gbmlsZnNfYm1hcF9maW5kX3RhcmdldF9pbl9ncm91cCgmYnRyZWUtPmJ0X2JtYXApOworCXJldHVybiBuaWxmc19ibWFwX2ZpbmRfdGFyZ2V0X2luX2dyb3VwKGJ0cmVlKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfc2V0X3RhcmdldF92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsIF9fdTY0IGtleSwKLQkJCQkgICAgIF9fdTY0IHB0cikKLXsKLQlidHJlZS0+YnRfYm1hcC5iX2xhc3RfYWxsb2NhdGVkX2tleSA9IGtleTsKLQlidHJlZS0+YnRfYm1hcC5iX2xhc3RfYWxsb2NhdGVkX3B0ciA9IHB0cjsKLX0KLQotc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX2luc2VydChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkJICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJICAgICAgaW50ICpsZXZlbHAsIF9fdTY0IGtleSwgX191NjQgcHRyLAogCQkJCSAgICAgIHN0cnVjdCBuaWxmc19ibWFwX3N0YXRzICpzdGF0cykKQEAgLTg5NSw3OSArOTg3LDc4IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKnBhcmVudCwgKnNpYjsKIAlfX3U2NCBzaWJwdHI7Ci0JaW50IHBpbmRleCwgbGV2ZWwsIHJldDsKKwlpbnQgcGluZGV4LCBsZXZlbCwgbmNtYXgsIG5jYmxrLCByZXQ7CiAJc3RydWN0IGlub2RlICpkYXQgPSBOVUxMOwogCiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCWxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsKIAogCS8qIGFsbG9jYXRlIGEgbmV3IHB0ciBmb3IgZGF0YSBibG9jayAqLwotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oJmJ0cmVlLT5idF9ibWFwKSkgeworCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYnRyZWUpKSB7CiAJCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0KIAkJCW5pbGZzX2J0cmVlX2ZpbmRfdGFyZ2V0X3YoYnRyZWUsIHBhdGgsIGtleSk7Ci0JCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYnRyZWUpOwogCX0KIAotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOworCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYnRyZWUsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX291dF9kYXRhOwogCisJbmNibGsgPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKKwogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsKIAkgICAgIGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7CiAJICAgICBsZXZlbCsrKSB7CiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKLQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSA8Ci0JCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKSB7CisJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgPCBuY2JsaykgewogCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19pbnNlcnQ7CiAJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlwYXJlbnQgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxKTsKKwkJcGFyZW50ID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSwgJm5jbWF4KTsKIAkJcGluZGV4ID0gcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4OwogCiAJCS8qIGxlZnQgc2libGluZyAqLwogCQlpZiAocGluZGV4ID4gMCkgewotCQkJc2licHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCi0JCQkJCQkJICBwaW5kZXggLSAxKTsKKwkJCXNpYnB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihwYXJlbnQsIHBpbmRleCAtIDEsCisJCQkJCQkJICBuY21heCk7CiAJCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHNpYnB0ciwgJmJoKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCQkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oc2liKSA8Ci0JCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KHNpYiwgYnRyZWUpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPCBuY2JsaykgewogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfY2FycnlfbGVmdDsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwogCQkJCWdvdG8gb3V0OwotCQkJfSBlbHNlCisJCQl9IGVsc2UgewogCQkJCWJyZWxzZShiaCk7CisJCQl9CiAJCX0KIAogCQkvKiByaWdodCBzaWJsaW5nICovCi0JCWlmIChwaW5kZXggPAotCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHBhcmVudCkgLSAxKSB7Ci0JCQlzaWJwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHBhcmVudCwKLQkJCQkJCQkgIHBpbmRleCArIDEpOworCQlpZiAocGluZGV4IDwgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHBhcmVudCkgLSAxKSB7CisJCQlzaWJwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIocGFyZW50LCBwaW5kZXggKyAxLAorCQkJCQkJCSAgbmNtYXgpOwogCQkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBzaWJwdHIsICZiaCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAkJCXNpYiA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJoLT5iX2RhdGE7Ci0JCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPAotCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChzaWIsIGJ0cmVlKSkgeworCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihzaWIpIDwgbmNibGspIHsKIAkJCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBiaDsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2NhcnJ5X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJCQkJZ290byBvdXQ7Ci0JCQl9IGVsc2UKKwkJCX0gZWxzZSB7CiAJCQkJYnJlbHNlKGJoKTsKKwkJCX0KIAkJfQogCiAJCS8qIHNwbGl0ICovCiAJCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0KIAkJCXBhdGhbbGV2ZWwgLSAxXS5icF9uZXdyZXEuYnByX3B0ciArIDE7Ci0JCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLAorCQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKGJ0cmVlLAogCQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKQEAgLTk3OSw5ICsxMDcwLDggQEAKIAogCQlzdGF0cy0+YnNfbmJsb2NrcysrOwogCi0JCW5pbGZzX2J0cmVlX25vZGVfaW5pdChidHJlZSwKLQkJCQkgICAgICAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhLAotCQkJCSAgICAgIDAsIGxldmVsLCAwLCBOVUxMLCBOVUxMKTsKKwkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKKwkJbmlsZnNfYnRyZWVfbm9kZV9pbml0KHNpYiwgMCwgbGV2ZWwsIDAsIG5jYmxrLCBOVUxMLCBOVUxMKTsKIAkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfc3BsaXQ7CiAJfQpAQCAtOTg5LDcgKzEwNzksNyBAQAogCS8qIHJvb3QgKi8KIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwogCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgPAotCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKSB7CisJICAgIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCkgewogCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2luc2VydDsKIAkJc3RhdHMtPmJzX25ibG9ja3MrKzsKIAkJZ290byBvdXQ7CkBAIC05OTcsOCArMTA4Nyw3IEBACiAKIAkvKiBncm93ICovCiAJcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHIgPSBwYXRoW2xldmVsIC0gMV0uYnBfbmV3cmVxLmJwcl9wdHIgKyAxOwotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOworCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYnRyZWUsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCXJldCA9IG5pbGZzX2J0cmVlX2dldF9uZXdfYmxvY2soYnRyZWUsIHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyLApAQCAtMTAwNiw4ICsxMDk1LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0X2N1cnJfbm9kZTsKIAotCW5pbGZzX2J0cmVlX25vZGVfaW5pdChidHJlZSwgKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YSwKLQkJCSAgICAgIDAsIGxldmVsLCAwLCBOVUxMLCBOVUxMKTsKKwluaWxmc19idHJlZV9ub2RlX2luaXQoKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YSwKKwkJCSAgICAgIDAsIGxldmVsLCAwLCBuY2JsaywgTlVMTCwgTlVMTCk7CiAJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9ncm93OwogCkBAIC0xMDI0LDI1ICsxMTEzLDIyIEBACiAKIAkvKiBlcnJvciAqLwogIGVycl9vdXRfY3Vycl9ub2RlOgotCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwKLQkJCQkgICBkYXQpOworCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKGJ0cmVlLCAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOwogIGVycl9vdXRfY2hpbGRfbm9kZToKIAlmb3IgKGxldmVsLS07IGxldmVsID4gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsgbGV2ZWwtLSkgewogCQluaWxmc19idG5vZGVfZGVsZXRlKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7Ci0JCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwgZGF0KTsKKwkJbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYnRyZWUsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsIGRhdCk7CiAKIAl9CiAKLQluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsICZwYXRoW2xldmVsXS5icF9uZXdyZXEsCi0JCQkJICAgZGF0KTsKKwluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwgZGF0KTsKICBlcnJfb3V0X2RhdGE6CiAJKmxldmVscCA9IGxldmVsOwogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb21taXRfaW5zZXJ0KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb21taXRfaW5zZXJ0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBpbnQgbWF4bGV2ZWwsIF9fdTY0IGtleSwgX191NjQgcHRyKQogewpAQCAtMTA1MSwzNSArMTEzNywzMyBAQAogCiAJc2V0X2J1ZmZlcl9uaWxmc192b2xhdGlsZSgoc3RydWN0IGJ1ZmZlcl9oZWFkICopKCh1bnNpZ25lZCBsb25nKXB0cikpOwogCXB0ciA9IHBhdGhbTklMRlNfQlRSRUVfTEVWRUxfREFUQV0uYnBfbmV3cmVxLmJwcl9wdHI7Ci0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTigmYnRyZWUtPmJ0X2JtYXApKSB7Ci0JCW5pbGZzX2J0cmVlX3NldF90YXJnZXRfdihidHJlZSwga2V5LCBwdHIpOwotCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmJ0cmVlLT5idF9ibWFwKTsKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJ0cmVlKSkgeworCQluaWxmc19ibWFwX3NldF90YXJnZXRfdihidHJlZSwga2V5LCBwdHIpOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYnRyZWUpOwogCX0KIAogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwgPD0gbWF4bGV2ZWw7IGxldmVsKyspIHsKLQkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKKwkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJ0cmVlLAogCQkJCQkgICAgJnBhdGhbbGV2ZWwgLSAxXS5icF9uZXdyZXEsIGRhdCk7CiAJCXBhdGhbbGV2ZWxdLmJwX29wKGJ0cmVlLCBwYXRoLCBsZXZlbCwgJmtleSwgJnB0cik7CiAJfQogCi0JaWYgKCFuaWxmc19ibWFwX2RpcnR5KCZidHJlZS0+YnRfYm1hcCkpCi0JCW5pbGZzX2JtYXBfc2V0X2RpcnR5KCZidHJlZS0+YnRfYm1hcCk7CisJaWYgKCFuaWxmc19ibWFwX2RpcnR5KGJ0cmVlKSkKKwkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYnRyZWUpOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LCBfX3U2NCBwdHIpCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsIF9fdTY0IGtleSwgX191NjQgcHRyKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgc3RhdHM7CiAJaW50IGxldmVsLCByZXQ7CiAKLQlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwogCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgTlVMTCwKLQkJCQkgICAgTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4pOworCQkJCSAgICBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTiwgMCk7CiAJaWYgKHJldCAhPSAtRU5PRU5UKSB7CiAJCWlmIChyZXQgPT0gMCkKIAkJCXJldCA9IC1FRVhJU1Q7CkBAIC0xMDkwLDIzICsxMTc0LDI1IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCW5pbGZzX2J0cmVlX2NvbW1pdF9pbnNlcnQoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXksIHB0cik7Ci0JbmlsZnNfYm1hcF9hZGRfYmxvY2tzKGJtYXAsIHN0YXRzLmJzX25ibG9ja3MpOworCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhidHJlZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CiAKICBvdXQ6CiAJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2RvX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfZG9fZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CisJaW50IG5jYmxrOwogCiAJaWYgKGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwotCQluaWxmc19idHJlZV9ub2RlX2RlbGV0ZShidHJlZSwgbm9kZSwga2V5cCwgcHRycCwKLQkJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgpOworCQluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOworCQluaWxmc19idHJlZV9ub2RlX2RlbGV0ZShub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCwKKwkJCQkJa2V5cCwgcHRycCwgbmNibGspOwogCQlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCiAJCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CiAJCWlmIChwYXRoW2xldmVsXS5icF9pbmRleCA9PSAwKQpAQCAtMTExNCwxNyArMTIwMCwxOCBAQAogCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKSk7CiAJfSBlbHNlIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKLQkJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUoYnRyZWUsIG5vZGUsIGtleXAsIHB0cnAsCi0JCQkJCXBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKKwkJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUobm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgsCisJCQkJCWtleXAsIHB0cnAsCisJCQkJCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ib3Jyb3dfbGVmdChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfYm9ycm93X2xlZnQoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpsZWZ0OwotCWludCBuY2hpbGRyZW4sIGxuY2hpbGRyZW4sIG47CisJaW50IG5jaGlsZHJlbiwgbG5jaGlsZHJlbiwgbiwgbmNibGs7CiAKIAluaWxmc19idHJlZV9kb19kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIApAQCAtMTEzMiwxMCArMTIxOSwxMSBAQAogCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAlsbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGxlZnQpOworCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CiAKIAluID0gKG5jaGlsZHJlbiArIGxuY2hpbGRyZW4pIC8gMiAtIG5jaGlsZHJlbjsKIAotCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9yaWdodChidHJlZSwgbGVmdCwgbm9kZSwgbik7CisJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX3JpZ2h0KGxlZnQsIG5vZGUsIG4sIG5jYmxrLCBuY2Jsayk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCiAJCW5pbGZzX2J0bm9kZV9tYXJrX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKTsKQEAgLTExNTAsMTIgKzEyMzgsMTIgQEAKIAlwYXRoW2xldmVsXS5icF9pbmRleCArPSBuOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9ib3Jyb3dfcmlnaHQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2JvcnJvd19yaWdodChzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkJICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqcmlnaHQ7Ci0JaW50IG5jaGlsZHJlbiwgcm5jaGlsZHJlbiwgbjsKKwlpbnQgbmNoaWxkcmVuLCBybmNoaWxkcmVuLCBuLCBuY2JsazsKIAogCW5pbGZzX2J0cmVlX2RvX2RlbGV0ZShidHJlZSwgcGF0aCwgbGV2ZWwsIGtleXAsIHB0cnApOwogCkBAIC0xMTYzLDEwICsxMjUxLDExIEBACiAJcmlnaHQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJpZ2h0KTsKKwluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCiAJbiA9IChuY2hpbGRyZW4gKyBybmNoaWxkcmVuKSAvIDIgLSBuY2hpbGRyZW47CiAKLQluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChidHJlZSwgbm9kZSwgcmlnaHQsIG4pOworCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9sZWZ0KG5vZGUsIHJpZ2h0LCBuLCBuY2JsaywgbmNibGspOwogCiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpKQogCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC0xMTgyLDIxICsxMjcxLDIyIEBACiAJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29uY2F0X2xlZnQoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbmNhdF9sZWZ0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJICAgIGludCBsZXZlbCwgX191NjQgKmtleXAsIF9fdTY0ICpwdHJwKQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCAqbGVmdDsKLQlpbnQgbjsKKwlpbnQgbiwgbmNibGs7CiAKIAluaWxmc19idHJlZV9kb19kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCiAJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAotCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9sZWZ0KGJ0cmVlLCBsZWZ0LCBub2RlLCBuKTsKKwluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChsZWZ0LCBub2RlLCBuLCBuY2JsaywgbmNibGspOwogCiAJaWYgKCFidWZmZXJfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKQEAgLTEyMDcsMjEgKzEyOTcsMjIgQEAKIAlwYXRoW2xldmVsXS5icF9pbmRleCArPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbmNhdF9yaWdodChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29uY2F0X3JpZ2h0KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgICAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpyaWdodDsKLQlpbnQgbjsKKwlpbnQgbiwgbmNibGs7CiAKIAluaWxmc19idHJlZV9kb19kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNibGsgPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKIAogCW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOwogCi0JbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQoYnRyZWUsIG5vZGUsIHJpZ2h0LCBuKTsKKwluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChub2RlLCByaWdodCwgbiwgbmNibGssIG5jYmxrKTsKIAogCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkocGF0aFtsZXZlbF0uYnBfYmgpOwpAQCAtMTIzMSwyOSArMTMyMiwzMiBAQAogCXBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCsrOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9zaHJpbmsoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX3NocmluayhzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkgICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkgICAgICAgaW50IGxldmVsLCBfX3U2NCAqa2V5cCwgX191NjQgKnB0cnApCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnJvb3QsICpjaGlsZDsKLQlpbnQgbjsKKwlpbnQgbiwgbmNibGs7CiAKIAluaWxmc19idHJlZV9kb19kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIAogCXJvb3QgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CiAJY2hpbGQgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCi0JbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUoYnRyZWUsIHJvb3QsIE5VTEwsIE5VTEwsIDApOworCW5pbGZzX2J0cmVlX25vZGVfZGVsZXRlKHJvb3QsIDAsIE5VTEwsIE5VTEwsCisJCQkJTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYKTsKIAluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChyb290LCBsZXZlbCk7CiAJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihjaGlsZCk7Ci0JbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQoYnRyZWUsIHJvb3QsIGNoaWxkLCBuKTsKKwluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChyb290LCBjaGlsZCwgbiwKKwkJCQkgICBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgsIG5jYmxrKTsKIAogCW5pbGZzX2J0bm9kZV9kZWxldGUocGF0aFtsZXZlbF0uYnBfYmgpOwogCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKIH0KIAogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBpbnQgKmxldmVscCwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMsCkBAIC0xMjYyLDQyICsxMzU2LDQzIEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKnBhcmVudCwgKnNpYjsKIAlfX3U2NCBzaWJwdHI7Ci0JaW50IHBpbmRleCwgbGV2ZWwsIHJldDsKKwlpbnQgcGluZGV4LCBsZXZlbCwgbmNtaW4sIG5jbWF4LCBuY2JsaywgcmV0OwogCiAJcmV0ID0gMDsKIAlzdGF0cy0+YnNfbmJsb2NrcyA9IDA7CisJbmNtaW4gPSBOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NSU4obmlsZnNfYnRyZWVfbm9kZV9zaXplKGJ0cmVlKSk7CisJbmNibGsgPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKKwogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsKIAkgICAgIGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7CiAJICAgICBsZXZlbCsrKSB7CiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgPQotCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLAotCQkJCQkJIHBhdGhbbGV2ZWxdLmJwX2luZGV4KTsKLQkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLAorCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKG5vZGUsIHBhdGhbbGV2ZWxdLmJwX2luZGV4LAorCQkJCQkJIG5jYmxrKTsKKwkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoYnRyZWUsCiAJCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIAotCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpID4KLQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihub2RlLCBidHJlZSkpIHsKKwkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSA+IG5jbWluKSB7CiAJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKIAkJCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOworCQlwYXJlbnQgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLCAmbmNtYXgpOwogCQlwaW5kZXggPSBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXg7CiAKIAkJaWYgKHBpbmRleCA+IDApIHsKIAkJCS8qIGxlZnQgc2libGluZyAqLwotCQkJc2licHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCi0JCQkJCQkJICBwaW5kZXggLSAxKTsKKwkJCXNpYnB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihwYXJlbnQsIHBpbmRleCAtIDEsCisJCQkJCQkJICBuY21heCk7CiAJCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHNpYnB0ciwgJmJoKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gZXJyX291dF9jdXJyX25vZGU7CiAJCQlzaWIgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihzaWIpID4KLQkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oc2liLCBidHJlZSkpIHsKKwkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oc2liKSA+IG5jbWluKSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9ib3Jyb3dfbGVmdDsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwpAQCAtMTMxMSwxNCArMTQwNiwxMyBAQAogCQl9IGVsc2UgaWYgKHBpbmRleCA8CiAJCQkgICBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocGFyZW50KSAtIDEpIHsKIAkJCS8qIHJpZ2h0IHNpYmxpbmcgKi8KLQkJCXNpYnB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAotCQkJCQkJCSAgcGluZGV4ICsgMSk7CisJCQlzaWJwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIocGFyZW50LCBwaW5kZXggKyAxLAorCQkJCQkJCSAgbmNtYXgpOwogCQkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBzaWJwdHIsICZiaCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIGVycl9vdXRfY3Vycl9ub2RlOwogCQkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oc2liKSA+Ci0JCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKHNpYiwgYnRyZWUpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPiBuY21pbikgewogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfYm9ycm93X3JpZ2h0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CkBAIC0xMzQ5LDEwICsxNDQzLDEwIEBACiAKIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwogCXBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyID0KLQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCk7CisJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCwKKwkJCQkJIE5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CiAKLQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOworCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKGJ0cmVlLCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIApAQCAtMTM2Nyw3NSArMTQ2MSw2OCBAQAogCiAJLyogZXJyb3IgKi8KICBlcnJfb3V0X2N1cnJfbm9kZToKLQluaWxmc19ibWFwX2Fib3J0X2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOworCW5pbGZzX2JtYXBfYWJvcnRfZW5kX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKICBlcnJfb3V0X2NoaWxkX25vZGU6CiAJZm9yIChsZXZlbC0tOyBsZXZlbCA+PSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwtLSkgewogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKLQkJbmlsZnNfYm1hcF9hYm9ydF9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICZwYXRoW2xldmVsXS5icF9vbGRyZXEsIGRhdCk7CisJCW5pbGZzX2JtYXBfYWJvcnRfZW5kX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAl9CiAJKmxldmVscCA9IGxldmVsOwogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb21taXRfZGVsZXRlKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb21taXRfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICBpbnQgbWF4bGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCWludCBsZXZlbDsKIAogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwgPD0gbWF4bGV2ZWw7IGxldmVsKyspIHsKLQkJbmlsZnNfYm1hcF9jb21taXRfZW5kX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKKwkJbmlsZnNfYm1hcF9jb21taXRfZW5kX3B0cihidHJlZSwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwgZGF0KTsKIAkJcGF0aFtsZXZlbF0uYnBfb3AoYnRyZWUsIHBhdGgsIGxldmVsLCBOVUxMLCBOVUxMKTsKIAl9CiAKLQlpZiAoIW5pbGZzX2JtYXBfZGlydHkoJmJ0cmVlLT5idF9ibWFwKSkKLQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoJmJ0cmVlLT5idF9ibWFwKTsKKwlpZiAoIW5pbGZzX2JtYXBfZGlydHkoYnRyZWUpKQorCQluaWxmc19ibWFwX3NldF9kaXJ0eShidHJlZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCBrZXkpCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsIF9fdTY0IGtleSkKIAogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGlub2RlICpkYXQ7CiAJaW50IGxldmVsLCByZXQ7CiAKLQlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwogCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgTlVMTCwKLQkJCQkgICAgTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4pOworCQkJCSAgICBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTiwgMCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCiAKLQlkYXQgPSBOSUxGU19CTUFQX1VTRV9WQk4oJmJ0cmVlLT5idF9ibWFwKSA/Ci0JCW5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApIDogTlVMTDsKKwlkYXQgPSBOSUxGU19CTUFQX1VTRV9WQk4oYnRyZWUpID8gbmlsZnNfYm1hcF9nZXRfZGF0KGJ0cmVlKSA6IE5VTEw7CiAKIAlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX2RlbGV0ZShidHJlZSwgcGF0aCwgJmxldmVsLCAmc3RhdHMsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCW5pbGZzX2J0cmVlX2NvbW1pdF9kZWxldGUoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwotCW5pbGZzX2JtYXBfc3ViX2Jsb2NrcyhibWFwLCBzdGF0cy5ic19uYmxvY2tzKTsKKwluaWxmc19ibWFwX3N1Yl9ibG9ja3MoYnRyZWUsIHN0YXRzLmJzX25ibG9ja3MpOwogCiBvdXQ6CiAJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbGFzdF9rZXkoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0ICprZXlwKQorc3RhdGljIGludCBuaWxmc19idHJlZV9sYXN0X2tleShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsIF9fdTY0ICprZXlwKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJaW50IHJldDsKIAotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0NDcsMTYgKzE1MzQsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2NoZWNrX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5KQorc3RhdGljIGludCBuaWxmc19idHJlZV9jaGVja19kZWxldGUoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLCBfX3U2NCBrZXkpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpyb290LCAqbm9kZTsKIAlfX3U2NCBtYXhrZXksIG5leHRtYXhrZXk7CiAJX191NjQgcHRyOwogCWludCBuY2hpbGRyZW4sIHJldDsKIAotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJcm9vdCA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAlzd2l0Y2ggKG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkpIHsKIAljYXNlIDI6CkBAIC0xNDY3LDcgKzE1NTIsOCBAQAogCQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocm9vdCk7CiAJCWlmIChuY2hpbGRyZW4gPiAxKQogCQkJcmV0dXJuIDA7Ci0JCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcm9vdCwgbmNoaWxkcmVuIC0gMSk7CisJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihyb290LCBuY2hpbGRyZW4gLSAxLAorCQkJCQkgICAgICAgTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYKTsKIAkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIsICZiaCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTE0ODcsMzIgKzE1NzMsMzMgQEAKIAlyZXR1cm4gKG1heGtleSA9PSBrZXkpICYmIChuZXh0bWF4a2V5IDwgTklMRlNfQk1BUF9MQVJHRV9MT1cpOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2dhdGhlcl9kYXRhKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAorc3RhdGljIGludCBuaWxmc19idHJlZV9nYXRoZXJfZGF0YShzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkJICAgX191NjQgKmtleXMsIF9fdTY0ICpwdHJzLCBpbnQgbml0ZW1zKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0Jc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZTsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKnJvb3Q7CiAJX19sZTY0ICpka2V5czsKIAlfX2xlNjQgKmRwdHJzOwogCV9fdTY0IHB0cjsKLQlpbnQgbmNoaWxkcmVuLCBpLCByZXQ7CisJaW50IG5jaGlsZHJlbiwgbmNtYXgsIGksIHJldDsKIAotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJcm9vdCA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAlzd2l0Y2ggKG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkpIHsKIAljYXNlIDI6CiAJCWJoID0gTlVMTDsKIAkJbm9kZSA9IHJvb3Q7CisJCW5jbWF4ID0gTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYOwogCQlicmVhazsKIAljYXNlIDM6CiAJCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyb290KTsKIAkJV0FSTl9PTihuY2hpbGRyZW4gPiAxKTsKLQkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCByb290LCBuY2hpbGRyZW4gLSAxKTsKKwkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKHJvb3QsIG5jaGlsZHJlbiAtIDEsCisJCQkJCSAgICAgICBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgpOwogCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgJmJoKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKKwkJbmNtYXggPSBuaWxmc19idHJlZV9uY2hpbGRyZW5fcGVyX2Jsb2NrKGJ0cmVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbm9kZSA9IE5VTEw7CkBAIC0xNTIzLDEwICsxNjEwLDEwIEBACiAJaWYgKG5jaGlsZHJlbiA8IG5pdGVtcykKIAkJbml0ZW1zID0gbmNoaWxkcmVuOwogCWRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKTsKLQlkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpOworCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBuY21heCk7CiAJZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7Ci0JCWtleXNbaV0gPSBuaWxmc19ibWFwX2RrZXlfdG9fa2V5KGRrZXlzW2ldKTsKLQkJcHRyc1tpXSA9IG5pbGZzX2JtYXBfZHB0cl90b19wdHIoZHB0cnNbaV0pOworCQlrZXlzW2ldID0gbGU2NF90b19jcHUoZGtleXNbaV0pOworCQlwdHJzW2ldID0gbGU2NF90b19jcHUoZHB0cnNbaV0pOwogCX0KIAogCWlmIChiaCAhPSBOVUxMKQpAQCAtMTUzNiwxNCArMTYyMywxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1uaWxmc19idHJlZV9wcmVwYXJlX2NvbnZlcnRfYW5kX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LAorbmlsZnNfYnRyZWVfcHJlcGFyZV9jb252ZXJ0X2FuZF9pbnNlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLCBfX3U2NCBrZXksCiAJCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqZHJlcSwKIAkJCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpucmVxLAogCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAsCiAJCQkJICAgICAgIHN0cnVjdCBuaWxmc19ibWFwX3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5VTEw7CiAJaW50IHJldDsKIApAQCAtMTU1MSwxMiArMTYzNywxMiBAQAogCiAJLyogZm9yIGRhdGEgKi8KIAkvKiBjYW5ub3QgZmluZCBuZWFyIHB0ciAqLwotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpIHsKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJ0cmVlKSkgewogCQlkcmVxLT5icHJfcHRyID0gbmlsZnNfYnRyZWVfZmluZF90YXJnZXRfdihidHJlZSwgTlVMTCwga2V5KTsKLQkJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYnRyZWUpOwogCX0KIAotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgZHJlcSwgZGF0KTsKKwlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKGJ0cmVlLCBkcmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNTY0LDcgKzE2NTAsNyBAQAogCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJaWYgKG5yZXEgIT0gTlVMTCkgewogCQlucmVxLT5icHJfcHRyID0gZHJlcS0+YnByX3B0ciArIDE7Ci0JCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKKwkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihidHJlZSwgbnJlcSwgZGF0KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9vdXRfZHJlcTsKIApAQCAtMTU4MSwxNiArMTY2NywxNiBAQAogCiAJLyogZXJyb3IgKi8KICBlcnJfb3V0X25yZXE6Ci0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKKwluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cihidHJlZSwgbnJlcSwgZGF0KTsKICBlcnJfb3V0X2RyZXE6Ci0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgZHJlcSwgZGF0KTsKKwluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cihidHJlZSwgZHJlcSwgZGF0KTsKIAlzdGF0cy0+YnNfbmJsb2NrcyA9IDA7CiAJcmV0dXJuIHJldDsKIAogfQogCiBzdGF0aWMgdm9pZAotbmlsZnNfYnRyZWVfY29tbWl0X2NvbnZlcnRfYW5kX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK25pbGZzX2J0cmVlX2NvbW1pdF9jb252ZXJ0X2FuZF9pbnNlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICAgIF9fdTY0IGtleSwgX191NjQgcHRyLAogCQkJCSAgICAgIGNvbnN0IF9fdTY0ICprZXlzLCBjb25zdCBfX3U2NCAqcHRycywKIAkJCQkgICAgICBpbnQgbiwKQEAgLTE1OTgsNTcgKzE2ODQsNTkgQEAKIAkJCQkgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm5yZXEsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CiAJc3RydWN0IGlub2RlICpkYXQ7CiAJX191NjQgdG1wcHRyOworCWludCBuY2JsazsKIAogCS8qIGZyZWUgcmVzb3VyY2VzICovCi0JaWYgKGJtYXAtPmJfb3BzLT5ib3BfY2xlYXIgIT0gTlVMTCkKLQkJYm1hcC0+Yl9vcHMtPmJvcF9jbGVhcihibWFwKTsKKwlpZiAoYnRyZWUtPmJfb3BzLT5ib3BfY2xlYXIgIT0gTlVMTCkKKwkJYnRyZWUtPmJfb3BzLT5ib3BfY2xlYXIoYnRyZWUpOwogCiAJLyogcHRyIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGhlYWQuICovCiAJc2V0X2J1ZmZlcl9uaWxmc192b2xhdGlsZSgoc3RydWN0IGJ1ZmZlcl9oZWFkICopKCh1bnNpZ25lZCBsb25nKXB0cikpOwogCiAJLyogY29udmVydCBhbmQgaW5zZXJ0ICovCi0JZGF0ID0gTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApID8gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApIDogTlVMTDsKLQluaWxmc19idHJlZV9pbml0KGJtYXApOworCWRhdCA9IE5JTEZTX0JNQVBfVVNFX1ZCTihidHJlZSkgPyBuaWxmc19ibWFwX2dldF9kYXQoYnRyZWUpIDogTlVMTDsKKwluaWxmc19idHJlZV9pbml0KGJ0cmVlKTsKIAlpZiAobnJlcSAhPSBOVUxMKSB7Ci0JCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCBkcmVxLCBkYXQpOwotCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKKwkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJ0cmVlLCBkcmVxLCBkYXQpOworCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYnRyZWUsIG5yZXEsIGRhdCk7CiAKIAkJLyogY3JlYXRlIGNoaWxkIG5vZGUgYXQgbGV2ZWwgMSAqLwogCQlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJbmlsZnNfYnRyZWVfbm9kZV9pbml0KGJ0cmVlLCBub2RlLCAwLCAxLCBuLCBrZXlzLCBwdHJzKTsKLQkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQoYnRyZWUsIG5vZGUsCi0JCQkJCWtleSwgZHJlcS0+YnByX3B0ciwgbik7CisJCW5jYmxrID0gbmlsZnNfYnRyZWVfbmNoaWxkcmVuX3Blcl9ibG9jayhidHJlZSk7CisJCW5pbGZzX2J0cmVlX25vZGVfaW5pdChub2RlLCAwLCAxLCBuLCBuY2Jsaywga2V5cywgcHRycyk7CisJCW5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KG5vZGUsIG4sIGtleSwgZHJlcS0+YnByX3B0ciwgbmNibGspOwogCQlpZiAoIWJ1ZmZlcl9kaXJ0eShiaCkpCiAJCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShiaCk7Ci0JCWlmICghbmlsZnNfYm1hcF9kaXJ0eShibWFwKSkKLQkJCW5pbGZzX2JtYXBfc2V0X2RpcnR5KGJtYXApOworCQlpZiAoIW5pbGZzX2JtYXBfZGlydHkoYnRyZWUpKQorCQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYnRyZWUpOwogCiAJCWJyZWxzZShiaCk7CiAKIAkJLyogY3JlYXRlIHJvb3Qgbm9kZSBhdCBsZXZlbCAyICovCiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CiAJCXRtcHB0ciA9IG5yZXEtPmJwcl9wdHI7Ci0JCW5pbGZzX2J0cmVlX25vZGVfaW5pdChidHJlZSwgbm9kZSwgTklMRlNfQlRSRUVfTk9ERV9ST09ULAotCQkJCSAgICAgIDIsIDEsICZrZXlzWzBdLCAmdG1wcHRyKTsKKwkJbmlsZnNfYnRyZWVfbm9kZV9pbml0KG5vZGUsIE5JTEZTX0JUUkVFX05PREVfUk9PVCwgMiwgMSwKKwkJCQkgICAgICBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgsCisJCQkJICAgICAgJmtleXNbMF0sICZ0bXBwdHIpOwogCX0gZWxzZSB7Ci0JCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCBkcmVxLCBkYXQpOworCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYnRyZWUsIGRyZXEsIGRhdCk7CiAKIAkJLyogY3JlYXRlIHJvb3Qgbm9kZSBhdCBsZXZlbCAxICovCiAJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7Ci0JCW5pbGZzX2J0cmVlX25vZGVfaW5pdChidHJlZSwgbm9kZSwgTklMRlNfQlRSRUVfTk9ERV9ST09ULAotCQkJCSAgICAgIDEsIG4sIGtleXMsIHB0cnMpOwotCQluaWxmc19idHJlZV9ub2RlX2luc2VydChidHJlZSwgbm9kZSwKLQkJCQkJa2V5LCBkcmVxLT5icHJfcHRyLCBuKTsKLQkJaWYgKCFuaWxmc19ibWFwX2RpcnR5KGJtYXApKQotCQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYm1hcCk7CisJCW5pbGZzX2J0cmVlX25vZGVfaW5pdChub2RlLCBOSUxGU19CVFJFRV9OT0RFX1JPT1QsIDEsIG4sCisJCQkJICAgICAgTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYLAorCQkJCSAgICAgIGtleXMsIHB0cnMpOworCQluaWxmc19idHJlZV9ub2RlX2luc2VydChub2RlLCBuLCBrZXksIGRyZXEtPmJwcl9wdHIsCisJCQkJCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCk7CisJCWlmICghbmlsZnNfYm1hcF9kaXJ0eShidHJlZSkpCisJCQluaWxmc19ibWFwX3NldF9kaXJ0eShidHJlZSk7CiAJfQogCi0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKLQkJbmlsZnNfYnRyZWVfc2V0X3RhcmdldF92KGJ0cmVlLCBrZXksIGRyZXEtPmJwcl9wdHIpOworCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYnRyZWUpKQorCQluaWxmc19ibWFwX3NldF90YXJnZXRfdihidHJlZSwga2V5LCBkcmVxLT5icHJfcHRyKTsKIH0KIAogLyoqCkBAIC0xNjYwLDcgKzE3NDgsNyBAQAogICogQHB0cnM6CiAgKiBAbjoKICAqLwotaW50IG5pbGZzX2J0cmVlX2NvbnZlcnRfYW5kX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK2ludCBuaWxmc19idHJlZV9jb252ZXJ0X2FuZF9pbnNlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgIF9fdTY0IGtleSwgX191NjQgcHRyLAogCQkJCSAgIGNvbnN0IF9fdTY0ICprZXlzLCBjb25zdCBfX3U2NCAqcHRycywgaW50IG4pCiB7CkBAIC0xNjczLDcgKzE3NjEsNyBAQAogCQlkaSA9ICZkcmVxOwogCQluaSA9IE5VTEw7CiAJfSBlbHNlIGlmICgobiArIDEpIDw9IE5JTEZTX0JUUkVFX05PREVfTkNISUxEUkVOX01BWCgKLQkJCSAgIDEgPDwgYm1hcC0+Yl9pbm9kZS0+aV9ibGtiaXRzKSkgeworCQkJICAgMSA8PCBidHJlZS0+Yl9pbm9kZS0+aV9ibGtiaXRzKSkgewogCQlkaSA9ICZkcmVxOwogCQluaSA9ICZucmVxOwogCX0gZWxzZSB7CkBAIC0xNjgyLDE3ICsxNzcwLDE3IEBACiAJCUJVRygpOwogCX0KIAotCXJldCA9IG5pbGZzX2J0cmVlX3ByZXBhcmVfY29udmVydF9hbmRfaW5zZXJ0KGJtYXAsIGtleSwgZGksIG5pLCAmYmgsCisJcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV9jb252ZXJ0X2FuZF9pbnNlcnQoYnRyZWUsIGtleSwgZGksIG5pLCAmYmgsCiAJCQkJCQkgICAgICZzdGF0cyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JbmlsZnNfYnRyZWVfY29tbWl0X2NvbnZlcnRfYW5kX2luc2VydChibWFwLCBrZXksIHB0ciwga2V5cywgcHRycywgbiwKKwluaWxmc19idHJlZV9jb21taXRfY29udmVydF9hbmRfaW5zZXJ0KGJ0cmVlLCBrZXksIHB0ciwga2V5cywgcHRycywgbiwKIAkJCQkJICAgICAgZGksIG5pLCBiaCk7Ci0JbmlsZnNfYm1hcF9hZGRfYmxvY2tzKGJtYXAsIHN0YXRzLmJzX25ibG9ja3MpOworCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhidHJlZSwgc3RhdHMuYnNfbmJsb2Nrcyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlX3Aoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlX3Aoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgIGludCBsZXZlbCwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQpAQCAtMTcwNCwxNyArMTc5MiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfdXBkYXRlX3Yoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJlcGFyZV91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkJCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCQlpbnQgbGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7Ci0JaW50IHJldDsKKwlpbnQgbmNtYXgsIHJldDsKIAotCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOworCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CiAJcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgPQotCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHBhcmVudCwKLQkJCQkJIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CisJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihwYXJlbnQsIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCwKKwkJCQkJIG5jbWF4KTsKIAlwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciA9IHBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyICsgMTsKIAlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV91cGRhdGUoZGF0LCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9yZXEsCiAJCQkJICAgICAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3JlcSk7CkBAIC0xNzI2LDcgKzE4MTQsNyBAQAogCQlwYXRoW2xldmVsXS5icF9jdHh0Lm5ld2tleSA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwogCQlwYXRoW2xldmVsXS5icF9jdHh0LmJoID0gcGF0aFtsZXZlbF0uYnBfYmg7CiAJCXJldCA9IG5pbGZzX2J0bm9kZV9wcmVwYXJlX2NoYW5nZV9rZXkoCi0JCQkmTklMRlNfQk1BUF9JKCZidHJlZS0+YnRfYm1hcCktPmlfYnRub2RlX2NhY2hlLAorCQkJJk5JTEZTX0JNQVBfSShidHJlZSktPmlfYnRub2RlX2NhY2hlLAogCQkJJnBhdGhbbGV2ZWxdLmJwX2N0eHQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJbmlsZnNfZGF0X2Fib3J0X3VwZGF0ZShkYXQsCkBAIC0xNzM5LDMwICsxODI3LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29tbWl0X3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJCWludCBsZXZlbCwgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKKwlpbnQgbmNtYXg7CiAKIAluaWxmc19kYXRfY29tbWl0X3VwZGF0ZShkYXQsICZwYXRoW2xldmVsXS5icF9vbGRyZXEuYnByX3JlcSwKIAkJCQkmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9yZXEsCi0JCQkJYnRyZWUtPmJ0X2JtYXAuYl9wdHJfdHlwZSA9PSBOSUxGU19CTUFQX1BUUl9WUyk7CisJCQkJYnRyZWUtPmJfcHRyX3R5cGUgPT0gTklMRlNfQk1BUF9QVFJfVlMpOwogCiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKHBhdGhbbGV2ZWxdLmJwX2JoKSkgewogCQluaWxmc19idG5vZGVfY29tbWl0X2NoYW5nZV9rZXkoCi0JCQkmTklMRlNfQk1BUF9JKCZidHJlZS0+YnRfYm1hcCktPmlfYnRub2RlX2NhY2hlLAorCQkJJk5JTEZTX0JNQVBfSShidHJlZSktPmlfYnRub2RlX2NhY2hlLAogCQkJJnBhdGhbbGV2ZWxdLmJwX2N0eHQpOwogCQlwYXRoW2xldmVsXS5icF9iaCA9IHBhdGhbbGV2ZWxdLmJwX2N0eHQuYmg7CiAJfQogCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUocGF0aFtsZXZlbF0uYnBfYmgpOwogCi0JcGFyZW50ID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSk7Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfcHRyKGJ0cmVlLCBwYXJlbnQsIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCwKLQkJCQkgcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHIpOworCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfcHRyKHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4LAorCQkJCSBwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0ciwgbmNtYXgpOwogfQogCi1zdGF0aWMgdm9pZCBuaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfYWJvcnRfdXBkYXRlX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICAgICAgaW50IGxldmVsLCBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKQEAgLTE3NzAsMTEgKzE4NTksMTEgQEAKIAkJCSAgICAgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9yZXEpOwogCWlmIChidWZmZXJfbmlsZnNfbm9kZShwYXRoW2xldmVsXS5icF9iaCkpCiAJCW5pbGZzX2J0bm9kZV9hYm9ydF9jaGFuZ2Vfa2V5KAotCQkJJk5JTEZTX0JNQVBfSSgmYnRyZWUtPmJ0X2JtYXApLT5pX2J0bm9kZV9jYWNoZSwKKwkJCSZOSUxGU19CTUFQX0koYnRyZWUpLT5pX2J0bm9kZV9jYWNoZSwKIAkJCSZwYXRoW2xldmVsXS5icF9jdHh0KTsKIH0KIAotc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3ByZXBhcmVfcHJvcGFnYXRlX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkJICAgaW50IG1pbmxldmVsLCBpbnQgKm1heGxldmVscCwKIAkJCQkJICAgc3RydWN0IGlub2RlICpkYXQpCkBAIC0xODA5LDcgKzE4OTgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbW1pdF9wcm9wYWdhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29tbWl0X3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkJICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCiAJCQkJCSAgIGludCBtaW5sZXZlbCwgaW50IG1heGxldmVsLAogCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLApAQCAtMTgyNCwxNCArMTkxMywxNSBAQAogCQluaWxmc19idHJlZV9jb21taXRfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKIAkJCQkgICBpbnQgbGV2ZWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IG1heGxldmVsID0gMCwgcmV0OwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpwYXJlbnQ7Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmJ0cmVlLT5idF9ibWFwKTsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChidHJlZSk7CiAJX191NjQgcHRyOworCWludCBuY21heDsKIAogCWdldF9iaChiaCk7CiAJcGF0aFtsZXZlbF0uYnBfYmggPSBiaDsKQEAgLTE4NDEsOSArMTkzMSwxMCBAQAogCQlnb3RvIG91dDsKIAogCWlmIChidWZmZXJfbmlsZnNfdm9sYXRpbGUocGF0aFtsZXZlbF0uYnBfYmgpKSB7Ci0JCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOwotCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHBhcmVudCwKLQkJCQkJICAgICAgIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CisJCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CisJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihwYXJlbnQsCisJCQkJCSAgICAgICBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgsCisJCQkJCSAgICAgICBuY21heCk7CiAJCXJldCA9IG5pbGZzX2RhdF9tYXJrX2RpcnR5KGRhdCwgcHRyKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKQEAgLTE4NTcsMTAgKzE5NDgsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAorc3RhdGljIGludCBuaWxmc19idHJlZV9wcm9wYWdhdGUoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CiAJX191NjQga2V5OwpAQCAtMTg2OCw3ICsxOTU4LDYgQEAKIAogCVdBUk5fT04oIWJ1ZmZlcl9kaXJ0eShiaCkpOwogCi0JYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTg3OCwxMSArMTk2NywxMSBAQAogCQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwgMCk7CiAJCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSk7CiAJfSBlbHNlIHsKLQkJa2V5ID0gbmlsZnNfYm1hcF9kYXRhX2dldF9rZXkoYm1hcCwgYmgpOworCQlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShidHJlZSwgYmgpOwogCQlsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7CiAJfQogCi0JcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksIE5VTEwsIGxldmVsICsgMSk7CisJcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksIE5VTEwsIGxldmVsICsgMSwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJaWYgKHVubGlrZWx5KHJldCA9PSAtRU5PRU5UKSkKIAkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBrZXkgPSAlbGx1LCBsZXZlbCA9PSAlZFxuIiwKQEAgLTE4OTAsNyArMTk3OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/CisJcmV0ID0gTklMRlNfQk1BUF9VU0VfVkJOKGJ0cmVlKSA/CiAJCW5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgYmgpIDoKIAkJbmlsZnNfYnRyZWVfcHJvcGFnYXRlX3AoYnRyZWUsIHBhdGgsIGxldmVsLCBiaCk7CiAKQEAgLTE5MDAsMTMgKzE5ODksMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV9nYyhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlX2djKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlyZXR1cm4gbmlsZnNfZGF0X21hcmtfZGlydHkobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCBiaC0+Yl9ibG9ja25yKTsKKwlyZXR1cm4gbmlsZnNfZGF0X21hcmtfZGlydHkobmlsZnNfYm1hcF9nZXRfZGF0KGJ0cmVlKSwgYmgtPmJfYmxvY2tucik7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2FkZF9kaXJ0eV9idWZmZXIoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2FkZF9kaXJ0eV9idWZmZXIoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdHMsCiAJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMTkyMCw2ICsyMDA5LDE4IEBACiAJbm9kZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJoLT5iX2RhdGE7CiAJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApOwogCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSk7CisJaWYgKGxldmVsIDwgTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU4gfHwKKwkgICAgbGV2ZWwgPj0gTklMRlNfQlRSRUVfTEVWRUxfTUFYKSB7CisJCWR1bXBfc3RhY2soKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBpbnZhbGlkIGJ0cmVlIGxldmVsOiAlZCAoa2V5PSVsbHUsIGlubz0lbHUsICIKKwkJICAgICAgICJibG9ja25yPSVsbHUpXG4iLAorCQkgICAgICAgX19mdW5jX18sIGxldmVsLCAodW5zaWduZWQgbG9uZyBsb25nKWtleSwKKwkJICAgICAgIE5JTEZTX0JNQVBfSShidHJlZSktPnZmc19pbm9kZS5pX2lubywKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tucik7CisJCXJldHVybjsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoKGhlYWQsICZsaXN0c1tsZXZlbF0pIHsKIAkJY2JoID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYnVmZmVyX2hlYWQsIGJfYXNzb2NfYnVmZmVycyk7CiAJCWNub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopY2JoLT5iX2RhdGE7CkBAIC0xOTMwLDExICsyMDMxLDEwIEBACiAJbGlzdF9hZGRfdGFpbCgmYmgtPmJfYXNzb2NfYnVmZmVycywgaGVhZCk7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2xvb2t1cF9kaXJ0eV9idWZmZXJzKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfbG9va3VwX2RpcnR5X2J1ZmZlcnMoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3RwKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRjYWNoZSA9ICZOSUxGU19CTUFQX0koYm1hcCktPmlfYnRub2RlX2NhY2hlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpidGNhY2hlID0gJk5JTEZTX0JNQVBfSShidHJlZSktPmlfYnRub2RlX2NhY2hlOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdHNbTklMRlNfQlRSRUVfTEVWRUxfTUFYXTsKIAlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOwpAQCAtMTk2OCw3ICsyMDY4LDcgQEAKIAkJbGlzdF9zcGxpY2VfdGFpbCgmbGlzdHNbbGV2ZWxdLCBsaXN0cCk7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduX3Aoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduX3Aoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCWludCBsZXZlbCwKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKQEAgLTE5NzgsMzggKzIwNzgsMzggQEAKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqcGFyZW50OwogCV9fdTY0IGtleTsKIAlfX3U2NCBwdHI7Ci0JaW50IHJldDsKKwlpbnQgbmNtYXgsIHJldDsKIAotCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOwotCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAotCQkJCSAgICAgICBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOworCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CisJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4LAorCQkJCSAgICAgICBuY21heCk7CiAJaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKCpiaCkpIHsKIAkJcGF0aFtsZXZlbF0uYnBfY3R4dC5vbGRrZXkgPSBwdHI7CiAJCXBhdGhbbGV2ZWxdLmJwX2N0eHQubmV3a2V5ID0gYmxvY2tucjsKIAkJcGF0aFtsZXZlbF0uYnBfY3R4dC5iaCA9ICpiaDsKIAkJcmV0ID0gbmlsZnNfYnRub2RlX3ByZXBhcmVfY2hhbmdlX2tleSgKLQkJCSZOSUxGU19CTUFQX0koJmJ0cmVlLT5idF9ibWFwKS0+aV9idG5vZGVfY2FjaGUsCisJCQkmTklMRlNfQk1BUF9JKGJ0cmVlKS0+aV9idG5vZGVfY2FjaGUsCiAJCQkmcGF0aFtsZXZlbF0uYnBfY3R4dCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJbmlsZnNfYnRub2RlX2NvbW1pdF9jaGFuZ2Vfa2V5KAotCQkJJk5JTEZTX0JNQVBfSSgmYnRyZWUtPmJ0X2JtYXApLT5pX2J0bm9kZV9jYWNoZSwKKwkJCSZOSUxGU19CTUFQX0koYnRyZWUpLT5pX2J0bm9kZV9jYWNoZSwKIAkJCSZwYXRoW2xldmVsXS5icF9jdHh0KTsKIAkJKmJoID0gcGF0aFtsZXZlbF0uYnBfY3R4dC5iaDsKIAl9CiAKLQluaWxmc19idHJlZV9ub2RlX3NldF9wdHIoYnRyZWUsIHBhcmVudCwKLQkJCQkgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4LCBibG9ja25yKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9wdHIocGFyZW50LCBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgsIGJsb2NrbnIsCisJCQkJIG5jbWF4KTsKIAogCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShwYXJlbnQsIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CiAJLyogb24tZGlzayBmb3JtYXQgKi8KLQliaW5mby0+YmlfZGF0LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKKwliaW5mby0+YmlfZGF0LmJpX2Jsa29mZiA9IGNwdV90b19sZTY0KGtleSk7CiAJYmluZm8tPmJpX2RhdC5iaV9sZXZlbCA9IGxldmVsOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduX3Yoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLAogCQkJCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCWludCBsZXZlbCwKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwKQEAgLTIwMTcsMTUgKzIxMTcsMTUgQEAKIAkJCQl1bmlvbiBuaWxmc19iaW5mbyAqYmluZm8pCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOworCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJ0cmVlKTsKIAlfX3U2NCBrZXk7CiAJX191NjQgcHRyOwogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSByZXE7Ci0JaW50IHJldDsKKwlpbnQgbmNtYXgsIHJldDsKIAotCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEpOwotCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAotCQkJCSAgICAgICBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOworCXBhcmVudCA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsICZuY21heCk7CisJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4LAorCQkJCSAgICAgICBuY21heCk7CiAJcmVxLmJwcl9wdHIgPSBwdHI7CiAJcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfc3RhcnQoZGF0LCAmcmVxLmJwcl9yZXEpOwogCWlmIChyZXQgPCAwKQpAQCAtMjAzNCwyNCArMjEzNCwyMiBAQAogCiAJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKIAkvKiBvbi1kaXNrIGZvcm1hdCAqLwotCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOwotCWJpbmZvLT5iaV92LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKKwliaW5mby0+Ymlfdi5iaV92YmxvY2tuciA9IGNwdV90b19sZTY0KHB0cik7CisJYmluZm8tPmJpX3YuYmlfYmxrb2ZmID0gY3B1X3RvX2xlNjQoa2V5KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2Fzc2lnbihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAogCQkJICAgICAgc2VjdG9yX3QgYmxvY2tuciwKIAkJCSAgICAgIHVuaW9uIG5pbGZzX2JpbmZvICpiaW5mbykKIHsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOwogCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoOwogCXN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlOwogCV9fdTY0IGtleTsKIAlpbnQgbGV2ZWwsIHJldDsKIAotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CiAJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIwNjEsMTcgKzIxNTksMTcgQEAKIAkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApOwogCQlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpOwogCX0gZWxzZSB7Ci0JCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsICpiaCk7CisJCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJ0cmVlLCAqYmgpOwogCQlsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7CiAJfQogCi0JcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksIE5VTEwsIGxldmVsICsgMSk7CisJcmV0ID0gbmlsZnNfYnRyZWVfZG9fbG9va3VwKGJ0cmVlLCBwYXRoLCBrZXksIE5VTEwsIGxldmVsICsgMSwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJV0FSTl9PTihyZXQgPT0gLUVOT0VOVCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/CisJcmV0ID0gTklMRlNfQk1BUF9VU0VfVkJOKGJ0cmVlKSA/CiAJCW5pbGZzX2J0cmVlX2Fzc2lnbl92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgYmgsIGJsb2NrbnIsIGJpbmZvKSA6CiAJCW5pbGZzX2J0cmVlX2Fzc2lnbl9wKGJ0cmVlLCBwYXRoLCBsZXZlbCwgYmgsIGJsb2NrbnIsIGJpbmZvKTsKIApAQCAtMjA4MSw3ICsyMTc5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2J0cmVlX2Fzc2lnbl9nYyhzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfYXNzaWduX2djKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCiAJCQkJIHNlY3Rvcl90IGJsb2NrbnIsCiAJCQkJIHVuaW9uIG5pbGZzX2JpbmZvICpiaW5mbykKQEAgLTIwOTAsNyArMjE4OCw3IEBACiAJX191NjQga2V5OwogCWludCByZXQ7CiAKLQlyZXQgPSBuaWxmc19kYXRfbW92ZShuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICgqYmgpLT5iX2Jsb2NrbnIsCisJcmV0ID0gbmlsZnNfZGF0X21vdmUobmlsZnNfYm1hcF9nZXRfZGF0KGJ0cmVlKSwgKCpiaCktPmJfYmxvY2tuciwKIAkJCSAgICAgYmxvY2tucik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMDk5LDI5ICsyMTk3LDI3IEBACiAJCW5vZGUgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKikoKmJoKS0+Yl9kYXRhOwogCQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkobm9kZSwgMCk7CiAJfSBlbHNlCi0JCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsICpiaCk7CisJCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJ0cmVlLCAqYmgpOwogCiAJLyogb24tZGlzayBmb3JtYXQgKi8KIAliaW5mby0+Ymlfdi5iaV92YmxvY2tuciA9IGNwdV90b19sZTY0KCgqYmgpLT5iX2Jsb2NrbnIpOwotCWJpbmZvLT5iaV92LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKKwliaW5mby0+Ymlfdi5iaV9ibGtvZmYgPSBjcHVfdG9fbGU2NChrZXkpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbWFyayhzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LCBpbnQgbGV2ZWwpCitzdGF0aWMgaW50IG5pbGZzX2J0cmVlX21hcmsoc3RydWN0IG5pbGZzX2JtYXAgKmJ0cmVlLCBfX3U2NCBrZXksIGludCBsZXZlbCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJX191NjQgcHRyOwogCWludCByZXQ7CiAKLQlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwogCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgJnB0ciwgbGV2ZWwgKyAxKTsKKwlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgJnB0ciwgbGV2ZWwgKyAxLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlXQVJOX09OKHJldCA9PSAtRU5PRU5UKTsKIAkJZ290byBvdXQ7CkBAIC0yMTM1LDggKzIyMzEsOCBAQAogCWlmICghYnVmZmVyX2RpcnR5KGJoKSkKIAkJbmlsZnNfYnRub2RlX21hcmtfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7Ci0JaWYgKCFuaWxmc19ibWFwX2RpcnR5KCZidHJlZS0+YnRfYm1hcCkpCi0JCW5pbGZzX2JtYXBfc2V0X2RpcnR5KCZidHJlZS0+YnRfYm1hcCk7CisJaWYgKCFuaWxmc19ibWFwX2RpcnR5KGJ0cmVlKSkKKwkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYnRyZWUpOwogCiAgb3V0OgogCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTIxODYsMTAgKzIyODIsMTQgQEAKIGludCBuaWxmc19idHJlZV9pbml0KHN0cnVjdCBuaWxmc19ibWFwICpibWFwKQogewogCWJtYXAtPmJfb3BzID0gJm5pbGZzX2J0cmVlX29wczsKKwlibWFwLT5iX25jaGlsZHJlbl9wZXJfYmxvY2sgPQorCQlOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NQVgobmlsZnNfYnRyZWVfbm9kZV9zaXplKGJtYXApKTsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBuaWxmc19idHJlZV9pbml0X2djKHN0cnVjdCBuaWxmc19ibWFwICpibWFwKQogewogCWJtYXAtPmJfb3BzID0gJm5pbGZzX2J0cmVlX29wc19nYzsKKwlibWFwLT5iX25jaGlsZHJlbl9wZXJfYmxvY2sgPQorCQlOSUxGU19CVFJFRV9OT0RFX05DSElMRFJFTl9NQVgobmlsZnNfYnRyZWVfbm9kZV9zaXplKGJtYXApKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idHJlZS5oIGIvZnMvbmlsZnMyL2J0cmVlLmgKaW5kZXggNDNjOGM1Yi4uMjJjMDJlMyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0cmVlLmgKKysrIGIvZnMvbmlsZnMyL2J0cmVlLmgKQEAgLTMxLDE0ICszMSw2IEBACiAjaW5jbHVkZSAiYm1hcC5oIgogCiAvKioKLSAqIHN0cnVjdCBuaWxmc19idHJlZSAtIEItdHJlZSBzdHJ1Y3R1cmUKLSAqIEBidF9ibWFwOiBibWFwIGJhc2Ugc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBuaWxmc19idHJlZSB7Ci0Jc3RydWN0IG5pbGZzX2JtYXAgYnRfYm1hcDsKLX07Ci0KLS8qKgogICogc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggLSBBIHBhdGggb24gd2hpY2ggQi10cmVlIG9wZXJhdGlvbnMgYXJlIGV4ZWN1dGVkCiAgKiBAYnBfYmg6IGJ1ZmZlciBoZWFkIG9mIG5vZGUgYmxvY2sKICAqIEBicF9zaWJfYmg6IGJ1ZmZlciBoZWFkIG9mIHNpYmxpbmcgbm9kZSBibG9jawpAQCAtNTQsNyArNDYsNyBAQAogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSBicF9vbGRyZXE7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIGJwX25ld3JlcTsKIAlzdHJ1Y3QgbmlsZnNfYnRub2RlX2Noa2V5X2N0eHQgYnBfY3R4dDsKLQl2b2lkICgqYnBfb3ApKHN0cnVjdCBuaWxmc19idHJlZSAqLCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqLAorCXZvaWQgKCpicF9vcCkoc3RydWN0IG5pbGZzX2JtYXAgKiwgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKiwKIAkJICAgICAgaW50LCBfX3U2NCAqLCBfX3U2NCAqKTsKIH07CiAKQEAgLTgwLDQgKzcyLDYgQEAKIAkJCQkgICBjb25zdCBfX3U2NCAqLCBjb25zdCBfX3U2NCAqLCBpbnQpOwogdm9pZCBuaWxmc19idHJlZV9pbml0X2djKHN0cnVjdCBuaWxmc19ibWFwICopOwogCitpbnQgbmlsZnNfYnRyZWVfYnJva2VuX25vZGVfYmxvY2soc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CisKICNlbmRpZgkvKiBfTklMRlNfQlRSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2Rpci5jIGIvZnMvbmlsZnMyL2Rpci5jCmluZGV4IDg1Yzg5ZGYuLmNiMDAzYzggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXIuYworKysgYi9mcy9uaWxmczIvZGlyLmMKQEAgLTgwLDIzICs4MCwxMCBAQAogCXJldHVybiBsYXN0X2J5dGU7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfcHJlcGFyZV9jaHVua191bmludGVycnVwdGlibGUoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQorc3RhdGljIGludCBuaWxmc19wcmVwYXJlX2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKIAlsb2ZmX3QgcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKyBmcm9tOwotCXJldHVybiBibG9ja193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBwb3MsIHRvIC0gZnJvbSwKLQkJCQkgQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwKLQkJCQkgTlVMTCwgbmlsZnNfZ2V0X2Jsb2NrKTsKLX0KLQotc3RhdGljIGludCBuaWxmc19wcmVwYXJlX2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLAotCQkJICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQotewotCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArIGZyb207Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgdG8gLSBmcm9tLCAwLCAmcGFnZSwKLQkJCQkgTlVMTCwgbmlsZnNfZ2V0X2Jsb2NrKTsKKwlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBwb3MsIHRvIC0gZnJvbSwgbmlsZnNfZ2V0X2Jsb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgbmlsZnNfY29tbWl0X2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLApAQCAtMTQxLDcgKzEyOCw3IEBACiAJfQogCWZvciAob2ZmcyA9IDA7IG9mZnMgPD0gbGltaXQgLSBOSUxGU19ESVJfUkVDX0xFTigxKTsgb2ZmcyArPSByZWNfbGVuKSB7CiAJCXAgPSAoc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqKShrYWRkciArIG9mZnMpOwotCQlyZWNfbGVuID0gbGUxNl90b19jcHUocC0+cmVjX2xlbik7CisJCXJlY19sZW4gPSBuaWxmc19yZWNfbGVuX2Zyb21fZGlzayhwLT5yZWNfbGVuKTsKIAogCQlpZiAocmVjX2xlbiA8IE5JTEZTX0RJUl9SRUNfTEVOKDEpKQogCQkJZ290byBFc2hvcnQ7CkBAIC0xOTksMTMgKzE4NiwxMCBAQAogc3RhdGljIHN0cnVjdCBwYWdlICpuaWxmc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UobWFwcGluZywgbiwKLQkJCQkoZmlsbGVyX3QgKiltYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UsIE5VTEwpOworCXN0cnVjdCBwYWdlICpwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgbiwgTlVMTCk7CisKIAlpZiAoIUlTX0VSUihwYWdlKSkgewotCQl3YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOwogCQlrbWFwKHBhZ2UpOwotCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkKLQkJCWdvdG8gZmFpbDsKIAkJaWYgKCFQYWdlQ2hlY2tlZChwYWdlKSkKIAkJCW5pbGZzX2NoZWNrX3BhZ2UocGFnZSk7CiAJCWlmIChQYWdlRXJyb3IocGFnZSkpCkBAIC0yMzgsNyArMjIyLDggQEAKICAqLwogc3RhdGljIHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKm5pbGZzX25leHRfZW50cnkoc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqcCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKikoKGNoYXIgKilwICsgbGUxNl90b19jcHUocC0+cmVjX2xlbikpOworCXJldHVybiAoc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqKSgoY2hhciAqKXAgKworCQkJCQkgIG5pbGZzX3JlY19sZW5fZnJvbV9kaXNrKHAtPnJlY19sZW4pKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIKQEAgLTMyOSw3ICszMTQsNyBAQAogCQkJCQlnb3RvIHN1Y2Nlc3M7CiAJCQkJfQogCQkJfQotCQkJZmlscC0+Zl9wb3MgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCQkJZmlscC0+Zl9wb3MgKz0gbmlsZnNfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOwogCQl9CiAJCW5pbGZzX3B1dF9wYWdlKHBhZ2UpOwogCX0KQEAgLTQ0NCwxMiArNDI5LDEyIEBACiAJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAl1bnNpZ25lZCBmcm9tID0gKGNoYXIgKikgZGUgLSAoY2hhciAqKSBwYWdlX2FkZHJlc3MocGFnZSk7Ci0JdW5zaWduZWQgdG8gPSBmcm9tICsgbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCXVuc2lnbmVkIHRvID0gZnJvbSArIG5pbGZzX3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHBhZ2UtPm1hcHBpbmc7CiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBuaWxmc19wcmVwYXJlX2NodW5rX3VuaW50ZXJydXB0aWJsZShwYWdlLCBtYXBwaW5nLCBmcm9tLCB0byk7CisJZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBmcm9tLCB0byk7CiAJQlVHX09OKGVycik7CiAJZGUtPmlub2RlID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfaW5vKTsKIAluaWxmc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOwpAQCAtNTAwLDcgKzQ4NSw3IEBACiAJCQkJLyogV2UgaGl0IGlfc2l6ZSAqLwogCQkJCW5hbWVfbGVuID0gMDsKIAkJCQlyZWNfbGVuID0gY2h1bmtfc2l6ZTsKLQkJCQlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KGNodW5rX3NpemUpOworCQkJCWRlLT5yZWNfbGVuID0gbmlsZnNfcmVjX2xlbl90b19kaXNrKGNodW5rX3NpemUpOwogCQkJCWRlLT5pbm9kZSA9IDA7CiAJCQkJZ290byBnb3RfaXQ7CiAJCQl9CkBAIC01MTQsNyArNDk5LDcgQEAKIAkJCWlmIChuaWxmc19tYXRjaChuYW1lbGVuLCBuYW1lLCBkZSkpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJbmFtZV9sZW4gPSBOSUxGU19ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwotCQkJcmVjX2xlbiA9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwkJCXJlY19sZW4gPSBuaWxmc19yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CiAJCQlpZiAoIWRlLT5pbm9kZSAmJiByZWNfbGVuID49IHJlY2xlbikKIAkJCQlnb3RvIGdvdF9pdDsKIAkJCWlmIChyZWNfbGVuID49IG5hbWVfbGVuICsgcmVjbGVuKQpAQCAtNTMwLDE1ICs1MTUsMTUgQEAKIGdvdF9pdDoKIAlmcm9tID0gKGNoYXIgKilkZSAtIChjaGFyICopcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXRvID0gZnJvbSArIHJlY19sZW47Ci0JZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBwYWdlLT5tYXBwaW5nLCBmcm9tLCB0byk7CisJZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBmcm9tLCB0byk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOwogCWlmIChkZS0+aW5vZGUpIHsKIAkJc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqZGUxOwogCiAJCWRlMSA9IChzdHJ1Y3QgbmlsZnNfZGlyX2VudHJ5ICopKChjaGFyICopZGUgKyBuYW1lX2xlbik7Ci0JCWRlMS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KHJlY19sZW4gLSBuYW1lX2xlbik7Ci0JCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYobmFtZV9sZW4pOworCQlkZTEtPnJlY19sZW4gPSBuaWxmc19yZWNfbGVuX3RvX2Rpc2socmVjX2xlbiAtIG5hbWVfbGVuKTsKKwkJZGUtPnJlY19sZW4gPSBuaWxmc19yZWNfbGVuX3RvX2Rpc2sobmFtZV9sZW4pOwogCQlkZSA9IGRlMTsKIAl9CiAJZGUtPm5hbWVfbGVuID0gbmFtZWxlbjsKQEAgLTU2OSw3ICs1NTQsOCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCWNoYXIgKmthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCXVuc2lnbmVkIGZyb20gPSAoKGNoYXIgKilkaXIgLSBrYWRkcikgJiB+KG5pbGZzX2NodW5rX3NpemUoaW5vZGUpIC0gMSk7Ci0JdW5zaWduZWQgdG8gPSAoKGNoYXIgKilkaXIgLSBrYWRkcikgKyBsZTE2X3RvX2NwdShkaXItPnJlY19sZW4pOworCXVuc2lnbmVkIHRvID0gKChjaGFyICopZGlyIC0ga2FkZHIpICsKKwkJbmlsZnNfcmVjX2xlbl9mcm9tX2Rpc2soZGlyLT5yZWNfbGVuKTsKIAlzdHJ1Y3QgbmlsZnNfZGlyX2VudHJ5ICpwZGUgPSBOVUxMOwogCXN0cnVjdCBuaWxmc19kaXJfZW50cnkgKmRlID0gKHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKikoa2FkZHIgKyBmcm9tKTsKIAlpbnQgZXJyOwpAQCAtNTg3LDEwICs1NzMsMTAgQEAKIAlpZiAocGRlKQogCQlmcm9tID0gKGNoYXIgKilwZGUgLSAoY2hhciAqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlsb2NrX3BhZ2UocGFnZSk7Ci0JZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBtYXBwaW5nLCBmcm9tLCB0byk7CisJZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBmcm9tLCB0byk7CiAJQlVHX09OKGVycik7CiAJaWYgKHBkZSkKLQkJcGRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYodG8gLSBmcm9tKTsKKwkJcGRlLT5yZWNfbGVuID0gbmlsZnNfcmVjX2xlbl90b19kaXNrKHRvIC0gZnJvbSk7CiAJZGlyLT5pbm9kZSA9IDA7CiAJbmlsZnNfY29tbWl0X2NodW5rKHBhZ2UsIG1hcHBpbmcsIGZyb20sIHRvKTsKIAlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwpAQCAtNjE1LDcgKzYwMSw3IEBACiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IG5pbGZzX3ByZXBhcmVfY2h1bmsocGFnZSwgbWFwcGluZywgMCwgY2h1bmtfc2l6ZSk7CisJZXJyID0gbmlsZnNfcHJlcGFyZV9jaHVuayhwYWdlLCAwLCBjaHVua19zaXplKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZ290byBmYWlsOwpAQCAtNjI0LDE0ICs2MTAsMTQgQEAKIAltZW1zZXQoa2FkZHIsIDAsIGNodW5rX3NpemUpOwogCWRlID0gKHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKilrYWRkcjsKIAlkZS0+bmFtZV9sZW4gPSAxOwotCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYoTklMRlNfRElSX1JFQ19MRU4oMSkpOworCWRlLT5yZWNfbGVuID0gbmlsZnNfcmVjX2xlbl90b19kaXNrKE5JTEZTX0RJUl9SRUNfTEVOKDEpKTsKIAltZW1jcHkoZGUtPm5hbWUsICIuXDBcMCIsIDQpOwogCWRlLT5pbm9kZSA9IGNwdV90b19sZTY0KGlub2RlLT5pX2lubyk7CiAJbmlsZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKIAogCWRlID0gKHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKikoa2FkZHIgKyBOSUxGU19ESVJfUkVDX0xFTigxKSk7CiAJZGUtPm5hbWVfbGVuID0gMjsKLQlkZS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KGNodW5rX3NpemUgLSBOSUxGU19ESVJfUkVDX0xFTigxKSk7CisJZGUtPnJlY19sZW4gPSBuaWxmc19yZWNfbGVuX3RvX2Rpc2soY2h1bmtfc2l6ZSAtIE5JTEZTX0RJUl9SRUNfTEVOKDEpKTsKIAlkZS0+aW5vZGUgPSBjcHVfdG9fbGU2NChwYXJlbnQtPmlfaW5vKTsKIAltZW1jcHkoZGUtPm5hbWUsICIuLlwwIiwgNCk7CiAJbmlsZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXJlY3QuYyBiL2ZzL25pbGZzMi9kaXJlY3QuYwppbmRleCAyMzY3NTNkLi4zMjRkODBjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGlyZWN0LmMKKysrIGIvZnMvbmlsZnMyL2RpcmVjdC5jCkBAIC0yNyw0NyArMjcsNDMgQEAKICNpbmNsdWRlICJhbGxvYy5oIgogI2luY2x1ZGUgImRhdC5oIgogCi1zdGF0aWMgaW5saW5lIF9fbGU2NCAqbmlsZnNfZGlyZWN0X2RwdHJzKGNvbnN0IHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCkKK3N0YXRpYyBpbmxpbmUgX19sZTY0ICpuaWxmc19kaXJlY3RfZHB0cnMoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmRpcmVjdCkKIHsKIAlyZXR1cm4gKF9fbGU2NCAqKQotCQkoKHN0cnVjdCBuaWxmc19kaXJlY3Rfbm9kZSAqKWRpcmVjdC0+ZF9ibWFwLmJfdS51X2RhdGEgKyAxKTsKKwkJKChzdHJ1Y3QgbmlsZnNfZGlyZWN0X25vZGUgKilkaXJlY3QtPmJfdS51X2RhdGEgKyAxKTsKIH0KIAogc3RhdGljIGlubGluZSBfX3U2NAotbmlsZnNfZGlyZWN0X2dldF9wdHIoY29uc3Qgc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LCBfX3U2NCBrZXkpCituaWxmc19kaXJlY3RfZ2V0X3B0cihjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqZGlyZWN0LCBfX3U2NCBrZXkpCiB7Ci0JcmV0dXJuIG5pbGZzX2JtYXBfZHB0cl90b19wdHIoKihuaWxmc19kaXJlY3RfZHB0cnMoZGlyZWN0KSArIGtleSkpOworCXJldHVybiBsZTY0X3RvX2NwdSgqKG5pbGZzX2RpcmVjdF9kcHRycyhkaXJlY3QpICsga2V5KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19kaXJlY3Rfc2V0X3B0cihzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfZGlyZWN0X3NldF9wdHIoc3RydWN0IG5pbGZzX2JtYXAgKmRpcmVjdCwKIAkJCQkJX191NjQga2V5LCBfX3U2NCBwdHIpCiB7Ci0JKihuaWxmc19kaXJlY3RfZHB0cnMoZGlyZWN0KSArIGtleSkgPSBuaWxmc19ibWFwX3B0cl90b19kcHRyKHB0cik7CisJKihuaWxmc19kaXJlY3RfZHB0cnMoZGlyZWN0KSArIGtleSkgPSBjcHVfdG9fbGU2NChwdHIpOwogfQogCi1zdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCitzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmRpcmVjdCwKIAkJCSAgICAgICBfX3U2NCBrZXksIGludCBsZXZlbCwgX191NjQgKnB0cnApCiB7Ci0Jc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0OwogCV9fdTY0IHB0cjsKIAotCWRpcmVjdCA9IChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICopYm1hcDsgIC8qIFhYWDogdXNlIG1hY3JvIGZvciBsZXZlbCAxICovCiAJaWYgKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYIHx8IGxldmVsICE9IDEpCiAJCXJldHVybiAtRU5PRU5UOwogCXB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKIAlpZiAocHRyID09IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKHB0cnAgIT0gTlVMTCkKLQkJKnB0cnAgPSBwdHI7CisJKnB0cnAgPSBwdHI7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2xvb2t1cF9jb250aWcoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCitzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9sb29rdXBfY29udGlnKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpkaXJlY3QsCiAJCQkJICAgICAgX191NjQga2V5LCBfX3U2NCAqcHRycCwKIAkJCQkgICAgICB1bnNpZ25lZCBtYXhibG9ja3MpCiB7Ci0Jc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwogCXN0cnVjdCBpbm9kZSAqZGF0ID0gTlVMTDsKIAlfX3U2NCBwdHIsIHB0cjI7CiAJc2VjdG9yX3QgYmxvY2tucjsKQEAgLTc5LDggKzc1LDggQEAKIAlpZiAocHRyID09IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkgewotCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCk7CisJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihkaXJlY3QpKSB7CisJCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChkaXJlY3QpOwogCQlyZXQgPSBuaWxmc19kYXRfdHJhbnNsYXRlKGRhdCwgcHRyLCAmYmxvY2tucik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTEwNiwyOSArMTAyLDIxIEBACiB9CiAKIHN0YXRpYyBfX3U2NAotbmlsZnNfZGlyZWN0X2ZpbmRfdGFyZ2V0X3YoY29uc3Qgc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LCBfX3U2NCBrZXkpCituaWxmc19kaXJlY3RfZmluZF90YXJnZXRfdihjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqZGlyZWN0LCBfX3U2NCBrZXkpCiB7CiAJX191NjQgcHRyOwogCi0JcHRyID0gbmlsZnNfYm1hcF9maW5kX3RhcmdldF9zZXEoJmRpcmVjdC0+ZF9ibWFwLCBrZXkpOworCXB0ciA9IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfc2VxKGRpcmVjdCwga2V5KTsKIAlpZiAocHRyICE9IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCS8qIHNlcXVlbnRpYWwgYWNjZXNzICovCiAJCXJldHVybiBwdHI7CiAJZWxzZQogCQkvKiBibG9jayBncm91cCAqLwotCQlyZXR1cm4gbmlsZnNfYm1hcF9maW5kX3RhcmdldF9pbl9ncm91cCgmZGlyZWN0LT5kX2JtYXApOwotfQotCi1zdGF0aWMgdm9pZCBuaWxmc19kaXJlY3Rfc2V0X3RhcmdldF92KHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKLQkJCQkgICAgICBfX3U2NCBrZXksIF9fdTY0IHB0cikKLXsKLQlkaXJlY3QtPmRfYm1hcC5iX2xhc3RfYWxsb2NhdGVkX2tleSA9IGtleTsKLQlkaXJlY3QtPmRfYm1hcC5iX2xhc3RfYWxsb2NhdGVkX3B0ciA9IHB0cjsKKwkJcmV0dXJuIG5pbGZzX2JtYXBfZmluZF90YXJnZXRfaW5fZ3JvdXAoZGlyZWN0KTsKIH0KIAogc3RhdGljIGludCBuaWxmc19kaXJlY3RfaW5zZXJ0KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCBrZXksIF9fdTY0IHB0cikKIHsKLQlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIHJlcTsKIAlzdHJ1Y3QgaW5vZGUgKmRhdCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTEzNiwxMSArMTI0LDExIEBACiAKIAlpZiAoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVgpCiAJCXJldHVybiAtRU5PRU5UOwotCWlmIChuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSkgIT0gTklMRlNfQk1BUF9JTlZBTElEX1BUUikKKwlpZiAobmlsZnNfZGlyZWN0X2dldF9wdHIoYm1hcCwga2V5KSAhPSBOSUxGU19CTUFQX0lOVkFMSURfUFRSKQogCQlyZXR1cm4gLUVFWElTVDsKIAogCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpIHsKLQkJcmVxLmJwcl9wdHIgPSBuaWxmc19kaXJlY3RfZmluZF90YXJnZXRfdihkaXJlY3QsIGtleSk7CisJCXJlcS5icHJfcHRyID0gbmlsZnNfZGlyZWN0X2ZpbmRfdGFyZ2V0X3YoYm1hcCwga2V5KTsKIAkJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOwogCX0KIAlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKGJtYXAsICZyZXEsIGRhdCk7CkBAIC0xNTAsMTMgKzEzOCwxMyBAQAogCQlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKIAogCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgJnJlcSwgZGF0KTsKLQkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIHJlcS5icHJfcHRyKTsKKwkJbmlsZnNfZGlyZWN0X3NldF9wdHIoYm1hcCwga2V5LCByZXEuYnByX3B0cik7CiAKIAkJaWYgKCFuaWxmc19ibWFwX2RpcnR5KGJtYXApKQogCQkJbmlsZnNfYm1hcF9zZXRfZGlydHkoYm1hcCk7CiAKIAkJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKLQkJCW5pbGZzX2RpcmVjdF9zZXRfdGFyZ2V0X3YoZGlyZWN0LCBrZXksIHJlcS5icHJfcHRyKTsKKwkJCW5pbGZzX2JtYXBfc2V0X3RhcmdldF92KGJtYXAsIGtleSwgcmVxLmJwcl9wdHIpOwogCiAJCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhibWFwLCAxKTsKIAl9CkBAIC0xNjUsMzMgKzE1MywzMCBAQAogCiBzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9kZWxldGUoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSkKIHsKLQlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIHJlcTsKIAlzdHJ1Y3QgaW5vZGUgKmRhdDsKIAlpbnQgcmV0OwogCiAJaWYgKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYIHx8Ci0JICAgIG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KSA9PSBOSUxGU19CTUFQX0lOVkFMSURfUFRSKQorCSAgICBuaWxmc19kaXJlY3RfZ2V0X3B0cihibWFwLCBrZXkpID09IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJZGF0ID0gTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApID8gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApIDogTlVMTDsKLQlyZXEuYnByX3B0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKKwlyZXEuYnByX3B0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGJtYXAsIGtleSk7CiAKIAlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cihibWFwLCAmcmVxLCBkYXQpOwogCWlmICghcmV0KSB7CiAJCW5pbGZzX2JtYXBfY29tbWl0X2VuZF9wdHIoYm1hcCwgJnJlcSwgZGF0KTsKLQkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpOworCQluaWxmc19kaXJlY3Rfc2V0X3B0cihibWFwLCBrZXksIE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpOwogCQluaWxmc19ibWFwX3N1Yl9ibG9ja3MoYm1hcCwgMSk7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2xhc3Rfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCAqa2V5cCkKK3N0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2xhc3Rfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpkaXJlY3QsIF9fdTY0ICprZXlwKQogewotCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdDsKIAlfX3U2NCBrZXksIGxhc3RrZXk7CiAKLQlkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJbGFzdGtleSA9IE5JTEZTX0RJUkVDVF9LRVlfTUFYICsgMTsKIAlmb3IgKGtleSA9IE5JTEZTX0RJUkVDVF9LRVlfTUlOOyBrZXkgPD0gTklMRlNfRElSRUNUX0tFWV9NQVg7IGtleSsrKQogCQlpZiAobmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpICE9CkBAIC0yMTEsMTUgKzE5NiwxMyBAQAogCXJldHVybiBrZXkgPiBOSUxGU19ESVJFQ1RfS0VZX01BWDsKIH0KIAotc3RhdGljIGludCBuaWxmc19kaXJlY3RfZ2F0aGVyX2RhdGEoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCitzdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9nYXRoZXJfZGF0YShzdHJ1Y3QgbmlsZnNfYm1hcCAqZGlyZWN0LAogCQkJCSAgICBfX3U2NCAqa2V5cywgX191NjQgKnB0cnMsIGludCBuaXRlbXMpCiB7Ci0Jc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0OwogCV9fdTY0IGtleTsKIAlfX3U2NCBwdHI7CiAJaW50IG47CiAKLQlkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJaWYgKG5pdGVtcyA+IE5JTEZTX0RJUkVDVF9OQkxPQ0tTKQogCQluaXRlbXMgPSBOSUxGU19ESVJFQ1RfTkJMT0NLUzsKIAluID0gMDsKQEAgLTIzNyw3ICsyMjAsNiBAQAogaW50IG5pbGZzX2RpcmVjdF9kZWxldGVfYW5kX2NvbnZlcnQoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCiAJCQkJICAgIF9fdTY0IGtleSwgX191NjQgKmtleXMsIF9fdTY0ICpwdHJzLCBpbnQgbikKIHsKLQlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3Q7CiAJX19sZTY0ICpkcHRyczsKIAlpbnQgcmV0LCBpLCBqOwogCkBAIC0yNTMsMTIgKzIzNSwxMSBAQAogCQlibWFwLT5iX29wcy0+Ym9wX2NsZWFyKGJtYXApOwogCiAJLyogY29udmVydCAqLwotCWRpcmVjdCA9IChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICopYm1hcDsKLQlkcHRycyA9IG5pbGZzX2RpcmVjdF9kcHRycyhkaXJlY3QpOworCWRwdHJzID0gbmlsZnNfZGlyZWN0X2RwdHJzKGJtYXApOwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgTklMRlNfRElSRUNUX05CTE9DS1M7IGkrKykgewogCQlpZiAoKGogPCBuKSAmJiAoaSA9PSBrZXlzW2pdKSkgewogCQkJZHB0cnNbaV0gPSAoaSAhPSBrZXkpID8KLQkJCQluaWxmc19ibWFwX3B0cl90b19kcHRyKHB0cnNbal0pIDoKKwkJCQljcHVfdG9fbGU2NChwdHJzW2pdKSA6CiAJCQkJTklMRlNfQk1BUF9JTlZBTElEX1BUUjsKIAkJCWorKzsKIAkJfSBlbHNlCkBAIC0yNjksMTAgKzI1MCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X3Byb3BhZ2F0ZShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKK3N0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X3Byb3BhZ2F0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0Jc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwogCXN0cnVjdCBuaWxmc19wYWxsb2NfcmVxIG9sZHJlcSwgbmV3cmVxOwogCXN0cnVjdCBpbm9kZSAqZGF0OwogCV9fdTY0IGtleTsKQEAgLTI4NCw3ICsyNjQsNyBAQAogCiAJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOwogCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsIGJoKTsKLQlwdHIgPSBuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSk7CisJcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoYm1hcCwga2V5KTsKIAlpZiAoIWJ1ZmZlcl9uaWxmc192b2xhdGlsZShiaCkpIHsKIAkJb2xkcmVxLnByX2VudHJ5X25yID0gcHRyOwogCQluZXdyZXEucHJfZW50cnlfbnIgPSBwdHI7CkBAIC0yOTQsMjAgKzI3NCwyMCBAQAogCQluaWxmc19kYXRfY29tbWl0X3VwZGF0ZShkYXQsICZvbGRyZXEsICZuZXdyZXEsCiAJCQkJCWJtYXAtPmJfcHRyX3R5cGUgPT0gTklMRlNfQk1BUF9QVFJfVlMpOwogCQlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKLQkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIG5ld3JlcS5wcl9lbnRyeV9ucik7CisJCW5pbGZzX2RpcmVjdF9zZXRfcHRyKGJtYXAsIGtleSwgbmV3cmVxLnByX2VudHJ5X25yKTsKIAl9IGVsc2UKIAkJcmV0ID0gbmlsZnNfZGF0X21hcmtfZGlydHkoZGF0LCBwdHIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuaWxmc19kaXJlY3RfYXNzaWduX3Yoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LAorc3RhdGljIGludCBuaWxmc19kaXJlY3RfYXNzaWduX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmRpcmVjdCwKIAkJCQkgX191NjQga2V5LCBfX3U2NCBwdHIsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAogCQkJCSBzZWN0b3JfdCBibG9ja25yLAogCQkJCSB1bmlvbiBuaWxmc19iaW5mbyAqYmluZm8pCiB7Ci0Jc3RydWN0IGlub2RlICpkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoJmRpcmVjdC0+ZF9ibWFwKTsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChkaXJlY3QpOwogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSByZXE7CiAJaW50IHJldDsKIApAQCAtMzE1LDEzICsyOTUsMTMgQEAKIAlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9zdGFydChkYXQsICZyZXEuYnByX3JlcSk7CiAJaWYgKCFyZXQpIHsKIAkJbmlsZnNfZGF0X2NvbW1pdF9zdGFydChkYXQsICZyZXEuYnByX3JlcSwgYmxvY2tucik7Ci0JCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOwotCQliaW5mby0+Ymlfdi5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CisJCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gY3B1X3RvX2xlNjQocHRyKTsKKwkJYmluZm8tPmJpX3YuYmlfYmxrb2ZmID0gY3B1X3RvX2xlNjQoa2V5KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuaWxmc19kaXJlY3RfYXNzaWduX3Aoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LAorc3RhdGljIGludCBuaWxmc19kaXJlY3RfYXNzaWduX3Aoc3RydWN0IG5pbGZzX2JtYXAgKmRpcmVjdCwKIAkJCQkgX191NjQga2V5LCBfX3U2NCBwdHIsCiAJCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAogCQkJCSBzZWN0b3JfdCBibG9ja25yLApAQCAtMzI5LDcgKzMwOSw3IEBACiB7CiAJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIGJsb2NrbnIpOwogCi0JYmluZm8tPmJpX2RhdC5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CisJYmluZm8tPmJpX2RhdC5iaV9ibGtvZmYgPSBjcHVfdG9fbGU2NChrZXkpOwogCWJpbmZvLT5iaV9kYXQuYmlfbGV2ZWwgPSAwOwogCiAJcmV0dXJuIDA7CkBAIC0zNDAsMTggKzMyMCwxNiBAQAogCQkJICAgICAgIHNlY3Rvcl90IGJsb2NrbnIsCiAJCQkgICAgICAgdW5pb24gbmlsZnNfYmluZm8gKmJpbmZvKQogewotCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdDsKIAlfX3U2NCBrZXk7CiAJX191NjQgcHRyOwogCi0JZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwogCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsICpiaCk7CiAJaWYgKHVubGlrZWx5KGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYKSkgewogCQlwcmludGsoS0VSTl9DUklUICIlczogaW52YWxpZCBrZXk6ICVsbHVcbiIsIF9fZnVuY19fLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylrZXkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOworCXB0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGJtYXAsIGtleSk7CiAJaWYgKHVubGlrZWx5KHB0ciA9PSBOSUxGU19CTUFQX0lOVkFMSURfUFRSKSkgewogCQlwcmludGsoS0VSTl9DUklUICIlczogaW52YWxpZCBwb2ludGVyOiAlbGx1XG4iLCBfX2Z1bmNfXywKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHRyKTsKQEAgLTM1OSw4ICszMzcsOCBAQAogCX0KIAogCXJldHVybiBOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkgPwotCQluaWxmc19kaXJlY3RfYXNzaWduX3YoZGlyZWN0LCBrZXksIHB0ciwgYmgsIGJsb2NrbnIsIGJpbmZvKSA6Ci0JCW5pbGZzX2RpcmVjdF9hc3NpZ25fcChkaXJlY3QsIGtleSwgcHRyLCBiaCwgYmxvY2tuciwgYmluZm8pOworCQluaWxmc19kaXJlY3RfYXNzaWduX3YoYm1hcCwga2V5LCBwdHIsIGJoLCBibG9ja25yLCBiaW5mbykgOgorCQluaWxmc19kaXJlY3RfYXNzaWduX3AoYm1hcCwga2V5LCBwdHIsIGJoLCBibG9ja25yLCBiaW5mbyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcF9vcGVyYXRpb25zIG5pbGZzX2RpcmVjdF9vcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGlyZWN0LmggYi9mcy9uaWxmczIvZGlyZWN0LmgKaW5kZXggYTVmZmQ2Ni4uZGM2NDNkZSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RpcmVjdC5oCisrKyBiL2ZzL25pbGZzMi9kaXJlY3QuaApAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgImJtYXAuaCIKIAogCi1zdHJ1Y3QgbmlsZnNfZGlyZWN0OwotCiAvKioKICAqIHN0cnVjdCBuaWxmc19kaXJlY3Rfbm9kZSAtIGRpcmVjdCBub2RlCiAgKiBAZG5fZmxhZ3M6IGZsYWdzCkBAIC00MCwxNSArMzgsNiBAQAogCV9fdTggcGFkWzddOwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgbmlsZnNfZGlyZWN0IC0gZGlyZWN0IG1hcHBpbmcKLSAqIEBkX2JtYXA6IGJtYXAgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBuaWxmc19kaXJlY3QgewotCXN0cnVjdCBuaWxmc19ibWFwIGRfYm1hcDsKLX07Ci0KLQogI2RlZmluZSBOSUxGU19ESVJFQ1RfTkJMT0NLUwkoTklMRlNfQk1BUF9TSVpFIC8gc2l6ZW9mKF9fbGU2NCkgLSAxKQogI2RlZmluZSBOSUxGU19ESVJFQ1RfS0VZX01JTgkwCiAjZGVmaW5lIE5JTEZTX0RJUkVDVF9LRVlfTUFYCShOSUxGU19ESVJFQ1RfTkJMT0NLUyAtIDEpCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZ2NkYXQuYyBiL2ZzL25pbGZzMi9nY2RhdC5jCmluZGV4IGRkNWY3ZTAuLjg0YTQ1ZDEgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9nY2RhdC5jCisrKyBiL2ZzL25pbGZzMi9nY2RhdC5jCkBAIC03OCw3ICs3OCw3IEBACiAJc3RydWN0IGlub2RlICpnY2RhdCA9IG5pbGZzLT5uc19nY19kYXQ7CiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmdpaSA9IE5JTEZTX0koZ2NkYXQpOwogCi0JZ2NkYXQtPmlfc3RhdGUgPSBJX0NMRUFSOworCWdjZGF0LT5pX3N0YXRlID0gSV9GUkVFSU5HIHwgSV9DTEVBUjsKIAlnaWktPmlfZmxhZ3MgPSAwOwogCiAJbmlsZnNfcGFsbG9jX2NsZWFyX2NhY2hlKGdjZGF0KTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9nY2lub2RlLmMgYi9mcy9uaWxmczIvZ2Npbm9kZS5jCmluZGV4IDE0NWYwM2MuLmJlZDNhNzggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9nY2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2djaW5vZGUuYwpAQCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSAibmlsZnMuaCIKKyNpbmNsdWRlICJidHJlZS5oIgorI2luY2x1ZGUgImJ0bm9kZS5oIgogI2luY2x1ZGUgInBhZ2UuaCIKICNpbmNsdWRlICJtZHQuaCIKICNpbmNsdWRlICJkYXQuaCIKQEAgLTE0OSw4ICsxNTEsMTAgQEAKIGludCBuaWxmc19nY2NhY2hlX3N1Ym1pdF9yZWFkX25vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgcGJuLAogCQkJCSAgIF9fdTY0IHZibiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqb3V0X2JoKQogewotCWludCByZXQgPSBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKCZOSUxGU19JKGlub2RlKS0+aV9idG5vZGVfY2FjaGUsCi0JCQkJCSAgICB2Ym4gPyA6IHBibiwgcGJuLCBvdXRfYmgpOworCWludCByZXQ7CisKKwlyZXQgPSBuaWxmc19idG5vZGVfc3VibWl0X2Jsb2NrKCZOSUxGU19JKGlub2RlKS0+aV9idG5vZGVfY2FjaGUsCisJCQkJCXZibiA/IDogcGJuLCBwYm4sIFJFQUQsIG91dF9iaCwgJnBibik7CiAJaWYgKHJldCA9PSAtRUVYSVNUKSAvKiBpbnRlcm5hbCBjb2RlIChjYWNoZSBoaXQpICovCiAJCXJldCA9IDA7CiAJcmV0dXJuIHJldDsKQEAgLTE2NCwxMCArMTY4LDE1IEBACiAJaWYgKGJ1ZmZlcl9kaXJ0eShiaCkpCiAJCXJldHVybiAtRUVYSVNUOwogCi0JaWYgKGJ1ZmZlcl9uaWxmc19ub2RlKGJoKSkKKwlpZiAoYnVmZmVyX25pbGZzX25vZGUoYmgpKSB7CisJCWlmIChuaWxmc19idHJlZV9icm9rZW5fbm9kZV9ibG9jayhiaCkpIHsKKwkJCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShiaCk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCW5pbGZzX21kdF9tYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJfQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW5vZGUuYyBiL2ZzL25pbGZzMi9pbm9kZS5jCmluZGV4IDM5ZTAzOGEuLmVjY2IyZjIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pbm9kZS5jCisrKyBiL2ZzL25pbGZzMi9pbm9kZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSAibmlsZnMuaCIKKyNpbmNsdWRlICJidG5vZGUuaCIKICNpbmNsdWRlICJzZWdtZW50LmgiCiAjaW5jbHVkZSAicGFnZS5oIgogI2luY2x1ZGUgIm1kdC5oIgpAQCAtMTk3LDExICsxOTgsMTUgQEAKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAotCSpwYWdlcCA9IE5VTEw7Ci0JZXJyID0gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKLQkJCQlmc2RhdGEsIG5pbGZzX2dldF9ibG9jayk7Ci0JaWYgKHVubGlrZWx5KGVycikpCisJZXJyID0gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQluaWxmc19nZXRfYmxvY2spOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKKwkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7CisKIAkJbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoaW5vZGUtPmlfc2IpOworCX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMzcsNiArMjQyLDE5IEBACiAJLyogTmVlZHMgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIGNsZWFuZXIgKi8KIAlzaXplID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSAgb2Zmc2V0LCBucl9zZWdzLCBuaWxmc19nZXRfYmxvY2ssIE5VTEwpOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKKwkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgorCSAqLworCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgc2l6ZSA8IDApKSB7CisJCWxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJbG9mZl90IGVuZCA9IG9mZnNldCArIGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKKworCQlpZiAoZW5kID4gaXNpemUpCisJCQl2bXRydW5jYXRlKGlub2RlLCBpc2l6ZSk7CisJfQorCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAgLTMzNyw3ICszNTUsNiBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0Ioc2IpOwogCi0JY2xlYXJfaW5vZGUoaW5vZGUpOwogCS8qIFhYWDogY2hlY2sgZXJyb3IgY29kZT8gSXMgdGhlcmUgYW55IHRoaW5nIEkgY2FuIGRvPyAqLwogCSh2b2lkKSBuaWxmc19pZmlsZV9kZWxldGVfaW5vZGUoc2JpLT5zX2lmaWxlLCBpbm9kZS0+aV9pbm8pOwogCWF0b21pY19kZWMoJnNiaS0+c19pbm9kZXNfY291bnQpOwpAQCAtNTk3LDE2ICs2MTQsMzQgQEAKIAkgICBCdXQgdHJ1bmNhdGUgaGFzIG5vIHJldHVybiB2YWx1ZS4gKi8KIH0KIAotdm9pZCBuaWxmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIG5pbGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpID0gTklMRlNfSShpbm9kZSk7CisKKwkvKgorCSAqIEZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBuaWxmc19yZWFkX2lub2RlKCksIGhlcmUuCisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZpaS0+aV9kaXJ0eSkpOworCWJyZWxzZShpaS0+aV9iaCk7CisJaWktPmlfYmggPSBOVUxMOworCisJaWYgKHRlc3RfYml0KE5JTEZTX0lfQk1BUCwgJmlpLT5pX3N0YXRlKSkKKwkJbmlsZnNfYm1hcF9jbGVhcihpaS0+aV9ibWFwKTsKKworCW5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcigmaWktPmlfYnRub2RlX2NhY2hlKTsKK30KKwordm9pZCBuaWxmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbyAqaWkgPSBOSUxGU19JKGlub2RlKTsKIAotCWlmICh1bmxpa2VseShpc19iYWRfaW5vZGUoaW5vZGUpKSkgeworCWlmIChpbm9kZS0+aV9ubGluayB8fCB1bmxpa2VseShpc19iYWRfaW5vZGUoaW5vZGUpKSkgewogCQlpZiAoaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKQogCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCQljbGVhcl9pbm9kZShpbm9kZSk7CisJCWVuZF93cml0ZWJhY2soaW5vZGUpOworCQluaWxmc19jbGVhcl9pbm9kZShpbm9kZSk7CiAJCXJldHVybjsKIAl9CiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oc2IsICZ0aSwgMCk7IC8qIG5ldmVyIGZhaWxzICovCkBAIC02MTYsNiArNjUxLDggQEAKIAogCW5pbGZzX3RydW5jYXRlX2JtYXAoaWksIDApOwogCW5pbGZzX21hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCW5pbGZzX2NsZWFyX2lub2RlKGlub2RlKTsKIAluaWxmc19mcmVlX2lub2RlKGlub2RlKTsKIAkvKiBuaWxmc19mcmVlX2lub2RlKCkgbWFya3MgaW5vZGUgYnVmZmVyIGRpcnR5ICovCiAJaWYgKElTX1NZTkMoaW5vZGUpKQpAQCAtNjM5LDE0ICs2NzYsMjcgQEAKIAllcnIgPSBuaWxmc190cmFuc2FjdGlvbl9iZWdpbihzYiwgJnRpLCAwKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBpYXR0cik7Ci0JaWYgKCFlcnIgJiYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCi0JCWVyciA9IG5pbGZzX2FjbF9jaG1vZChpbm9kZSk7Ci0JaWYgKGxpa2VseSghZXJyKSkKLQkJZXJyID0gbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KHNiKTsKLQllbHNlCi0JCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KHNiKTsKIAorCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBpYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJZXJyID0gdm10cnVuY2F0ZShpbm9kZSwgaWF0dHItPmlhX3NpemUpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGlhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKworCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpIHsKKwkJZXJyID0gbmlsZnNfYWNsX2NobW9kKGlub2RlKTsKKwkJaWYgKHVubGlrZWx5KGVycikpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0dXJuIG5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChzYik7CisKK291dF9lcnI6CisJbmlsZnNfdHJhbnNhY3Rpb25fYWJvcnQoc2IpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCAwMjRiZThjLi5kMDFhZmY0IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJuaWxmcy5oIgorI2luY2x1ZGUgImJ0bm9kZS5oIgogI2luY2x1ZGUgInNlZ21lbnQuaCIKICNpbmNsdWRlICJwYWdlLmgiCiAjaW5jbHVkZSAibWR0LmgiCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IDQ3ZDZkNzkuLmQzZDU0MDQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAidGhlX25pbGZzLmgiCiAjaW5jbHVkZSAic2IuaCIKICNpbmNsdWRlICJibWFwLmgiCi0jaW5jbHVkZSAiYm1hcF91bmlvbi5oIgogCiAvKgogICogbmlsZnMgaW5vZGUgZGF0YSBpbiBtZW1vcnkKQEAgLTQxLDcgKzQwLDcgQEAKIAlfX3UzMiBpX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgIGlfc3RhdGU7CQkvKiBEeW5hbWljIHN0YXRlIGZsYWdzICovCiAJc3RydWN0IG5pbGZzX2JtYXAgKmlfYm1hcDsKLQl1bmlvbiBuaWxmc19ibWFwX3VuaW9uIGlfYm1hcF91bmlvbjsKKwlzdHJ1Y3QgbmlsZnNfYm1hcCBpX2JtYXBfZGF0YTsKIAlfX3U2NCBpX3hhdHRyOwkvKiBzZWN0b3JfdCA/Pz8gKi8KIAlfX3UzMiBpX2Rpcl9zdGFydF9sb29rdXA7CiAJX191NjQgaV9jbm87CQkvKiBjaGVjayBwb2ludCBudW1iZXIgZm9yIEdDIGlub2RlICovCkBAIC03MSw5ICs3MCw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19pbm9kZV9pbmZvICoKIE5JTEZTX0JNQVBfSShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKCh1bmlvbiBuaWxmc19ibWFwX3VuaW9uICopYm1hcCwKLQkJCSAgICBzdHJ1Y3QgbmlsZnNfaW5vZGVfaW5mbywKLQkJCSAgICBpX2JtYXBfdW5pb24pOworCXJldHVybiBjb250YWluZXJfb2YoYm1hcCwgc3RydWN0IG5pbGZzX2lub2RlX2luZm8sIGlfYm1hcF9kYXRhKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKk5JTEZTX0JUTkNfSShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKQEAgLTEwNyw2ICsxMDQsMTQgQEAKIH07CiAKIC8qCisgKiBjb21taXQgZmxhZ3MgZm9yIG5pbGZzX2NvbW1pdF9zdXBlciBhbmQgbmlsZnNfc3luY19zdXBlcgorICovCitlbnVtIHsKKwlOSUxGU19TQl9DT01NSVQgPSAwLAkvKiBDb21taXQgYSBzdXBlciBibG9jayBhbHRlcm5hdGVseSAqLworCU5JTEZTX1NCX0NPTU1JVF9BTEwJLyogQ29tbWl0IGJvdGggc3VwZXIgYmxvY2tzICovCit9OworCisvKgogICogTWFjcm9zIHRvIGNoZWNrIGlub2RlIG51bWJlcnMKICAqLwogI2RlZmluZSBOSUxGU19NRFRfSU5PX0JJVFMgICBcCkBAIC0yNDUsNyArMjUwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5pbGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgbmlsZnNfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiBleHRlcm4gdm9pZCBuaWxmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gdm9pZCBuaWxmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgbmlsZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBuaWxmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogZXh0ZXJuIGludCBuaWxmc19sb2FkX2lub2RlX2Jsb2NrKHN0cnVjdCBuaWxmc19zYl9pbmZvICosIHN0cnVjdCBpbm9kZSAqLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKQEAgLTI3MCw3ICsyNzUsMTQgQEAKIG5pbGZzX3JlYWRfc3VwZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICosIHU2NCwgaW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogZXh0ZXJuIGludCBuaWxmc19zdG9yZV9tYWdpY19hbmRfb3B0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqLAogCQkJCQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKiwgY2hhciAqKTsKK2V4dGVybiBpbnQgbmlsZnNfY2hlY2tfZmVhdHVyZV9jb21wYXRpYmlsaXR5KHN0cnVjdCBzdXBlcl9ibG9jayAqLAorCQkJCQkgICAgIHN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKTsKK2V4dGVybiB2b2lkIG5pbGZzX3NldF9sb2dfY3Vyc29yKHN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqLAorCQkJCSBzdHJ1Y3QgdGhlX25pbGZzICopOworZXh0ZXJuIHN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKm5pbGZzX3ByZXBhcmVfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKiwKKwkJCQkJCSAgICAgIGludCBmbGlwKTsKIGV4dGVybiBpbnQgbmlsZnNfY29tbWl0X3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICosIGludCk7CitleHRlcm4gaW50IG5pbGZzX2NsZWFudXBfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKik7CiBleHRlcm4gaW50IG5pbGZzX2F0dGFjaF9jaGVja3BvaW50KHN0cnVjdCBuaWxmc19zYl9pbmZvICosIF9fdTY0KTsKIGV4dGVybiB2b2lkIG5pbGZzX2RldGFjaF9jaGVja3BvaW50KHN0cnVjdCBuaWxmc19zYl9pbmZvICopOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcGFnZS5jIGIvZnMvbmlsZnMyL3BhZ2UuYwppbmRleCA4ZGUzZTFlLi5hYWIxMWRiIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvcGFnZS5jCisrKyBiL2ZzL25pbGZzMi9wYWdlLmMKQEAgLTM3LDcgKzM3LDggQEAKIAogI2RlZmluZSBOSUxGU19CVUZGRVJfSU5IRVJFTlRfQklUUyAgXAogCSgoMVVMIDw8IEJIX1VwdG9kYXRlKSB8ICgxVUwgPDwgQkhfTWFwcGVkKSB8ICgxVUwgPDwgQkhfTklMRlNfTm9kZSkgfCBcCi0JICgxVUwgPDwgQkhfTklMRlNfVm9sYXRpbGUpIHwgKDFVTCA8PCBCSF9OSUxGU19BbGxvY2F0ZWQpKQorCSAoMVVMIDw8IEJIX05JTEZTX1ZvbGF0aWxlKSB8ICgxVUwgPDwgQkhfTklMRlNfQWxsb2NhdGVkKSB8IFwKKwkgKDFVTCA8PCBCSF9OSUxGU19DaGVja2VkKSkKIAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqCiBfX25pbGZzX2dldF9wYWdlX2Jsb2NrKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGJsb2NrLCBwZ29mZl90IGluZGV4LApAQCAtMTI5LDYgKzEzMCw3IEBACiAKIAlsb2NrX2J1ZmZlcihiaCk7CiAJY2xlYXJfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKKwljbGVhcl9idWZmZXJfbmlsZnNfY2hlY2tlZChiaCk7CiAJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAlpZiAobmlsZnNfcGFnZV9idWZmZXJzX2NsZWFuKHBhZ2UpKQogCQlfX25pbGZzX2NsZWFyX3BhZ2VfZGlydHkocGFnZSk7CkBAIC00ODAsNiArNDgyLDcgQEAKIAkJCQlsb2NrX2J1ZmZlcihiaCk7CiAJCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQljbGVhcl9idWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpOworCQkJCWNsZWFyX2J1ZmZlcl9uaWxmc19jaGVja2VkKGJoKTsKIAkJCQljbGVhcl9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCWNsZWFyX2J1ZmZlcl9tYXBwZWQoYmgpOwogCQkJCXVubG9ja19idWZmZXIoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuaCBiL2ZzL25pbGZzMi9wYWdlLmgKaW5kZXggOGFiY2E0ZC4uZjUzZDhkYSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuaAorKysgYi9mcy9uaWxmczIvcGFnZS5oCkBAIC0zNCwxMSArMzQsMTMgQEAKIAlCSF9OSUxGU19BbGxvY2F0ZWQgPSBCSF9Qcml2YXRlU3RhcnQsCiAJQkhfTklMRlNfTm9kZSwKIAlCSF9OSUxGU19Wb2xhdGlsZSwKKwlCSF9OSUxGU19DaGVja2VkLAogfTsKIAogQlVGRkVSX0ZOUyhOSUxGU19BbGxvY2F0ZWQsIG5pbGZzX2FsbG9jYXRlZCkJLyogbmlsZnMgcHJpdmF0ZSBidWZmZXJzICovCiBCVUZGRVJfRk5TKE5JTEZTX05vZGUsIG5pbGZzX25vZGUpCQkvKiBuaWxmcyBub2RlIGJ1ZmZlcnMgKi8KIEJVRkZFUl9GTlMoTklMRlNfVm9sYXRpbGUsIG5pbGZzX3ZvbGF0aWxlKQorQlVGRkVSX0ZOUyhOSUxGU19DaGVja2VkLCBuaWxmc19jaGVja2VkKQkvKiBidWZmZXIgaXMgdmVyaWZpZWQgKi8KIAogCiB2b2lkIG5pbGZzX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3JlY292ZXJ5LmMgYi9mcy9uaWxmczIvcmVjb3ZlcnkuYwppbmRleCBiYWUyYTUxLi5kMGMzNWVmIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvcmVjb3ZlcnkuYworKysgYi9mcy9uaWxmczIvcmVjb3ZlcnkuYwpAQCAtOTEsMjcgKzkxLDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgc3RvcmVfc2Vnc3VtX2luZm8oc3RydWN0IG5pbGZzX3NlZ3N1bV9pbmZvICpzc2ksCi0JCQkgICAgICBzdHJ1Y3QgbmlsZnNfc2VnbWVudF9zdW1tYXJ5ICpzdW0sCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzaXplKQotewotCXNzaS0+ZmxhZ3MgPSBsZTE2X3RvX2NwdShzdW0tPnNzX2ZsYWdzKTsKLQlzc2ktPnNlZ19zZXEgPSBsZTY0X3RvX2NwdShzdW0tPnNzX3NlcSk7Ci0Jc3NpLT5jdGltZSA9IGxlNjRfdG9fY3B1KHN1bS0+c3NfY3JlYXRlKTsKLQlzc2ktPm5leHQgPSBsZTY0X3RvX2NwdShzdW0tPnNzX25leHQpOwotCXNzaS0+bmJsb2NrcyA9IGxlMzJfdG9fY3B1KHN1bS0+c3NfbmJsb2Nrcyk7Ci0Jc3NpLT5uZmluZm8gPSBsZTMyX3RvX2NwdShzdW0tPnNzX25maW5mbyk7Ci0Jc3NpLT5zdW1ieXRlcyA9IGxlMzJfdG9fY3B1KHN1bS0+c3Nfc3VtYnl0ZXMpOwotCi0Jc3NpLT5uc3VtYmxrID0gRElWX1JPVU5EX1VQKHNzaS0+c3VtYnl0ZXMsIGJsb2Nrc2l6ZSk7Ci0Jc3NpLT5uZmlsZWJsayA9IHNzaS0+bmJsb2NrcyAtIHNzaS0+bnN1bWJsayAtICEhTklMRlNfU0VHX0hBU19TUihzc2kpOwotCi0JLyogbmVlZCB0byB2ZXJpZnkgLT5zc19ieXRlcyBmaWVsZCBpZiByZWFkIC0+c3NfY25vICovCi19Ci0KIC8qKgotICogY2FsY19jcmNfY29udCAtIGNoZWNrIENSQyBvZiBibG9ja3MgY29udGludW91c2x5Ci0gKiBAc2JpOiBuaWxmc19zYl9pbmZvCisgKiBuaWxmc19jb21wdXRlX2NoZWNrc3VtIC0gY29tcHV0ZSBjaGVja3N1bSBvZiBibG9ja3MgY29udGludW91c2x5CisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAogICogQGJoczogYnVmZmVyIGhlYWQgb2Ygc3RhcnQgYmxvY2sKICAqIEBzdW06IHBsYWNlIHRvIHN0b3JlIHJlc3VsdAogICogQG9mZnNldDogb2Zmc2V0IGJ5dGVzIGluIHRoZSBmaXJzdCBibG9jawpAQCAtMTE5LDIzICsxMDEsMjUgQEAKICAqIEBzdGFydDogREJOIG9mIHN0YXJ0IGJsb2NrCiAgKiBAbmJsb2NrOiBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGNoZWNrZWQKICAqLwotc3RhdGljIGludCBjYWxjX2NyY19jb250KHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzLAotCQkJIHUzMiAqc3VtLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdTY0IGNoZWNrX2J5dGVzLAotCQkJIHNlY3Rvcl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5ibG9jaykKK3N0YXRpYyBpbnQgbmlsZnNfY29tcHV0ZV9jaGVja3N1bShzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhzLCB1MzIgKnN1bSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1NjQgY2hlY2tfYnl0ZXMsCisJCQkJICBzZWN0b3JfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBuYmxvY2spCiB7Ci0JdW5zaWduZWQgbG9uZyBibG9ja3NpemUgPSBzYmktPnNfc3VwZXItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBuaWxmcy0+bnNfYmxvY2tzaXplOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1MzIgY3JjOwogCiAJQlVHX09OKG9mZnNldCA+PSBibG9ja3NpemUpOwogCWNoZWNrX2J5dGVzIC09IG9mZnNldDsKIAlzaXplID0gbWluX3QodTY0LCBjaGVja19ieXRlcywgYmxvY2tzaXplIC0gb2Zmc2V0KTsKLQljcmMgPSBjcmMzMl9sZShzYmktPnNfbmlsZnMtPm5zX2NyY19zZWVkLAorCWNyYyA9IGNyYzMyX2xlKG5pbGZzLT5uc19jcmNfc2VlZCwKIAkJICAgICAgICh1bnNpZ25lZCBjaGFyICopYmhzLT5iX2RhdGEgKyBvZmZzZXQsIHNpemUpOwogCWlmICgtLW5ibG9jayA+IDApIHsKIAkJZG8gewotCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaAotCQkJCT0gc2JfYnJlYWQoc2JpLT5zX3N1cGVyLCArK3N0YXJ0KTsKKwkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwkJCWJoID0gX19icmVhZChuaWxmcy0+bnNfYmRldiwgKytzdGFydCwgYmxvY2tzaXplKTsKIAkJCWlmICghYmgpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQljaGVja19ieXRlcyAtPSBzaXplOwpAQCAtMTUwLDEyICsxMzQsMTIgQEAKIAogLyoqCiAgKiBuaWxmc19yZWFkX3N1cGVyX3Jvb3RfYmxvY2sgLSByZWFkIHN1cGVyIHJvb3QgYmxvY2sKLSAqIEBzYjogc3VwZXJfYmxvY2sKKyAqIEBuaWxmczogbmlsZnMgb2JqZWN0CiAgKiBAc3JfYmxvY2s6IGRpc2sgYmxvY2sgbnVtYmVyIG9mIHRoZSBzdXBlciByb290IGJsb2NrCiAgKiBAcGJoOiBhZGRyZXNzIG9mIGEgYnVmZmVyX2hlYWQgcG9pbnRlciB0byByZXR1cm4gc3VwZXIgcm9vdCBidWZmZXIKICAqIEBjaGVjazogQ1JDIGNoZWNrIGZsYWcKICAqLwotaW50IG5pbGZzX3JlYWRfc3VwZXJfcm9vdF9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBzcl9ibG9jaywKK2ludCBuaWxmc19yZWFkX3N1cGVyX3Jvb3RfYmxvY2soc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHNlY3Rvcl90IHNyX2Jsb2NrLAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCwgaW50IGNoZWNrKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfc3I7CkBAIC0xNjQsNyArMTQ4LDcgQEAKIAlpbnQgcmV0OwogCiAJKnBiaCA9IE5VTEw7Ci0JYmhfc3IgPSBzYl9icmVhZChzYiwgc3JfYmxvY2spOworCWJoX3NyID0gX19icmVhZChuaWxmcy0+bnNfYmRldiwgc3JfYmxvY2ssIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCWlmICh1bmxpa2VseSghYmhfc3IpKSB7CiAJCXJldCA9IE5JTEZTX1NFR19GQUlMX0lPOwogCQlnb3RvIGZhaWxlZDsKQEAgLTE3NCwxMiArMTU4LDEzIEBACiAJaWYgKGNoZWNrKSB7CiAJCXVuc2lnbmVkIGJ5dGVzID0gbGUxNl90b19jcHUoc3ItPnNyX2J5dGVzKTsKIAotCQlpZiAoYnl0ZXMgPT0gMCB8fCBieXRlcyA+IHNiLT5zX2Jsb2Nrc2l6ZSkgeworCQlpZiAoYnl0ZXMgPT0gMCB8fCBieXRlcyA+IG5pbGZzLT5uc19ibG9ja3NpemUpIHsKIAkJCXJldCA9IE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NVUEVSX1JPT1Q7CiAJCQlnb3RvIGZhaWxlZF9iaDsKIAkJfQotCQlpZiAoY2FsY19jcmNfY29udChOSUxGU19TQihzYiksIGJoX3NyLCAmY3JjLAotCQkJCSAgc2l6ZW9mKHNyLT5zcl9zdW0pLCBieXRlcywgc3JfYmxvY2ssIDEpKSB7CisJCWlmIChuaWxmc19jb21wdXRlX2NoZWNrc3VtKAorCQkJICAgIG5pbGZzLCBiaF9zciwgJmNyYywgc2l6ZW9mKHNyLT5zcl9zdW0pLCBieXRlcywKKwkJCSAgICBzcl9ibG9jaywgMSkpIHsKIAkJCXJldCA9IE5JTEZTX1NFR19GQUlMX0lPOwogCQkJZ290byBmYWlsZWRfYmg7CiAJCX0KQEAgLTE5OSw2NCArMTg0LDc2IEBACiB9CiAKIC8qKgotICogbG9hZF9zZWdtZW50X3N1bW1hcnkgLSByZWFkIHNlZ21lbnQgc3VtbWFyeSBvZiB0aGUgc3BlY2lmaWVkIHBhcnRpYWwgc2VnbWVudAotICogQHNiaTogbmlsZnNfc2JfaW5mbwotICogQHBzZWdfc3RhcnQ6IHN0YXJ0IGRpc2sgYmxvY2sgbnVtYmVyIG9mIHBhcnRpYWwgc2VnbWVudAotICogQHNlZ19zZXE6IHNlcXVlbmNlIG51bWJlciByZXF1ZXN0ZWQKLSAqIEBzc2k6IHBvaW50ZXIgdG8gbmlsZnNfc2Vnc3VtX2luZm8gc3RydWN0IHRvIHN0b3JlIGluZm9ybWF0aW9uCisgKiBuaWxmc19yZWFkX2xvZ19oZWFkZXIgLSByZWFkIHN1bW1hcnkgaGVhZGVyIG9mIHRoZSBzcGVjaWZpZWQgbG9nCisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAorICogQHN0YXJ0X2Jsb2NrbnI6IHN0YXJ0IGJsb2NrIG51bWJlciBvZiB0aGUgbG9nCisgKiBAc3VtOiBwb2ludGVyIHRvIHJldHVybiBzZWdtZW50IHN1bW1hcnkgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbnQKLWxvYWRfc2VnbWVudF9zdW1tYXJ5KHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIHNlY3Rvcl90IHBzZWdfc3RhcnQsCi0JCSAgICAgdTY0IHNlZ19zZXEsIHN0cnVjdCBuaWxmc19zZWdzdW1faW5mbyAqc3NpKQorc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqCituaWxmc19yZWFkX2xvZ19oZWFkZXIoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHNlY3Rvcl90IHN0YXJ0X2Jsb2NrbnIsCisJCSAgICAgIHN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKipzdW0pCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9zdW07Ci0Jc3RydWN0IG5pbGZzX3NlZ21lbnRfc3VtbWFyeSAqc3VtOworCisJYmhfc3VtID0gX19icmVhZChuaWxmcy0+bnNfYmRldiwgc3RhcnRfYmxvY2tuciwgbmlsZnMtPm5zX2Jsb2Nrc2l6ZSk7CisJaWYgKGJoX3N1bSkKKwkJKnN1bSA9IChzdHJ1Y3QgbmlsZnNfc2VnbWVudF9zdW1tYXJ5ICopYmhfc3VtLT5iX2RhdGE7CisJcmV0dXJuIGJoX3N1bTsKK30KKworLyoqCisgKiBuaWxmc192YWxpZGF0ZV9sb2cgLSB2ZXJpZnkgY29uc2lzdGVuY3kgb2YgbG9nCisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAorICogQHNlZ19zZXE6IHNlcXVlbmNlIG51bWJlciBvZiBzZWdtZW50CisgKiBAYmhfc3VtOiBidWZmZXIgaGVhZCBvZiBzdW1tYXJ5IGJsb2NrCisgKiBAc3VtOiBzZWdtZW50IHN1bW1hcnkgc3RydWN0CisgKi8KK3N0YXRpYyBpbnQgbmlsZnNfdmFsaWRhdGVfbG9nKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCB1NjQgc2VnX3NlcSwKKwkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfc3VtLAorCQkJICAgICAgc3RydWN0IG5pbGZzX3NlZ21lbnRfc3VtbWFyeSAqc3VtKQorewogCXVuc2lnbmVkIGxvbmcgbmJsb2NrOwogCXUzMiBjcmM7Ci0JaW50IHJldCA9IE5JTEZTX1NFR19GQUlMX0lPOworCWludCByZXQ7CiAKLQliaF9zdW0gPSBzYl9icmVhZChzYmktPnNfc3VwZXIsIHBzZWdfc3RhcnQpOwotCWlmICghYmhfc3VtKQorCXJldCA9IE5JTEZTX1NFR19GQUlMX01BR0lDOworCWlmIChsZTMyX3RvX2NwdShzdW0tPnNzX21hZ2ljKSAhPSBOSUxGU19TRUdTVU1fTUFHSUMpCiAJCWdvdG8gb3V0OwogCi0Jc3VtID0gKHN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKiliaF9zdW0tPmJfZGF0YTsKKwlyZXQgPSBOSUxGU19TRUdfRkFJTF9TRVE7CisJaWYgKGxlNjRfdG9fY3B1KHN1bS0+c3Nfc2VxKSAhPSBzZWdfc2VxKQorCQlnb3RvIG91dDsKIAotCS8qIENoZWNrIGNvbnNpc3RlbmN5IG9mIHNlZ21lbnQgc3VtbWFyeSAqLwotCWlmIChsZTMyX3RvX2NwdShzdW0tPnNzX21hZ2ljKSAhPSBOSUxGU19TRUdTVU1fTUFHSUMpIHsKLQkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfTUFHSUM7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQlzdG9yZV9zZWdzdW1faW5mbyhzc2ksIHN1bSwgc2JpLT5zX3N1cGVyLT5zX2Jsb2Nrc2l6ZSk7Ci0JaWYgKHNlZ19zZXEgIT0gc3NpLT5zZWdfc2VxKSB7Ci0JCXJldCA9IE5JTEZTX1NFR19GQUlMX1NFUTsKLQkJZ290byBmYWlsZWQ7Ci0JfQotCi0JbmJsb2NrID0gc3NpLT5uYmxvY2tzOwotCWlmICh1bmxpa2VseShuYmxvY2sgPT0gMCB8fAotCQkgICAgIG5ibG9jayA+IHNiaS0+c19uaWxmcy0+bnNfYmxvY2tzX3Blcl9zZWdtZW50KSkgeworCW5ibG9jayA9IGxlMzJfdG9fY3B1KHN1bS0+c3NfbmJsb2Nrcyk7CisJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ09OU0lTVEVOQ1k7CisJaWYgKHVubGlrZWx5KG5ibG9jayA9PSAwIHx8IG5ibG9jayA+IG5pbGZzLT5uc19ibG9ja3NfcGVyX3NlZ21lbnQpKQogCQkvKiBUaGlzIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyByZWFkIGluIHRoZSBDUkMgY2hlY2sgKi8KLQkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ09OU0lTVEVOQ1k7Ci0JCWdvdG8gZmFpbGVkOwotCX0KLQlpZiAoY2FsY19jcmNfY29udChzYmksIGJoX3N1bSwgJmNyYywgc2l6ZW9mKHN1bS0+c3NfZGF0YXN1bSksCi0JCQkgICgodTY0KW5ibG9jayA8PCBzYmktPnNfc3VwZXItPnNfYmxvY2tzaXplX2JpdHMpLAotCQkJICBwc2VnX3N0YXJ0LCBuYmxvY2spKSB7Ci0JCXJldCA9IE5JTEZTX1NFR19GQUlMX0lPOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0JaWYgKGNyYyA9PSBsZTMyX3RvX2NwdShzdW0tPnNzX2RhdGFzdW0pKQotCQlyZXQgPSAwOwotCWVsc2UKLQkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fRlVMTDsKLSBmYWlsZWQ6Ci0JYnJlbHNlKGJoX3N1bSk7Ci0gb3V0OgorCQlnb3RvIG91dDsKKworCXJldCA9IE5JTEZTX1NFR19GQUlMX0lPOworCWlmIChuaWxmc19jb21wdXRlX2NoZWNrc3VtKG5pbGZzLCBiaF9zdW0sICZjcmMsIHNpemVvZihzdW0tPnNzX2RhdGFzdW0pLAorCQkJCSAgICgodTY0KW5ibG9jayA8PCBuaWxmcy0+bnNfYmxvY2tzaXplX2JpdHMpLAorCQkJCSAgIGJoX3N1bS0+Yl9ibG9ja25yLCBuYmxvY2spKQorCQlnb3RvIG91dDsKKworCXJldCA9IE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX0ZVTEw7CisJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShzdW0tPnNzX2RhdGFzdW0pKQorCQlnb3RvIG91dDsKKwlyZXQgPSAwOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkICpzZWdzdW1fZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCwKLQkJCXVuc2lnbmVkIGludCAqb2Zmc2V0LCB1bnNpZ25lZCBpbnQgYnl0ZXMpCisvKioKKyAqIG5pbGZzX3JlYWRfc3VtbWFyeV9pbmZvIC0gcmVhZCBhbiBpdGVtIG9uIHN1bW1hcnkgYmxvY2tzIG9mIGEgbG9nCisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAorICogQHBiaDogdGhlIGN1cnJlbnQgYnVmZmVyIGhlYWQgb24gc3VtbWFyeSBibG9ja3MgW2luLCBvdXRdCisgKiBAb2Zmc2V0OiB0aGUgY3VycmVudCBieXRlIG9mZnNldCBvbiBzdW1tYXJ5IGJsb2NrcyBbaW4sIG91dF0KKyAqIEBieXRlczogYnl0ZSBzaXplIG9mIHRoZSBpdGVtIHRvIGJlIHJlYWQKKyAqLworc3RhdGljIHZvaWQgKm5pbGZzX3JlYWRfc3VtbWFyeV9pbmZvKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGJoLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICpvZmZzZXQsIHVuc2lnbmVkIGludCBieXRlcykKIHsKIAl2b2lkICpwdHI7CiAJc2VjdG9yX3QgYmxvY2tucjsKQEAgLTI2NSw3ICsyNjIsOCBAQAogCWlmIChieXRlcyA+ICgqcGJoKS0+Yl9zaXplIC0gKm9mZnNldCkgewogCQlibG9ja25yID0gKCpwYmgpLT5iX2Jsb2NrbnI7CiAJCWJyZWxzZSgqcGJoKTsKLQkJKnBiaCA9IHNiX2JyZWFkKHNiLCBibG9ja25yICsgMSk7CisJCSpwYmggPSBfX2JyZWFkKG5pbGZzLT5uc19iZGV2LCBibG9ja25yICsgMSwKKwkJCSAgICAgICBuaWxmcy0+bnNfYmxvY2tzaXplKTsKIAkJaWYgKHVubGlrZWx5KCEqcGJoKSkKIAkJCXJldHVybiBOVUxMOwogCQkqb2Zmc2V0ID0gMDsKQEAgLTI3NSw5ICsyNzMsMTggQEAKIAlyZXR1cm4gcHRyOwogfQogCi1zdGF0aWMgdm9pZCBzZWdzdW1fc2tpcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwYmgsCi0JCQl1bnNpZ25lZCBpbnQgKm9mZnNldCwgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCkKKy8qKgorICogbmlsZnNfc2tpcF9zdW1tYXJ5X2luZm8gLSBza2lwIGl0ZW1zIG9uIHN1bW1hcnkgYmxvY2tzIG9mIGEgbG9nCisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAorICogQHBiaDogdGhlIGN1cnJlbnQgYnVmZmVyIGhlYWQgb24gc3VtbWFyeSBibG9ja3MgW2luLCBvdXRdCisgKiBAb2Zmc2V0OiB0aGUgY3VycmVudCBieXRlIG9mZnNldCBvbiBzdW1tYXJ5IGJsb2NrcyBbaW4sIG91dF0KKyAqIEBieXRlczogYnl0ZSBzaXplIG9mIHRoZSBpdGVtIHRvIGJlIHNraXBwZWQKKyAqIEBjb3VudDogbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIHNraXBwZWQKKyAqLworc3RhdGljIHZvaWQgbmlsZnNfc2tpcF9zdW1tYXJ5X2luZm8oc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBiaCwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpvZmZzZXQsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdF9pdGVtX2luX2N1cnJlbnRfYmxvY2sKIAkJPSAoKCpwYmgpLT5iX3NpemUgLSAqb2Zmc2V0KSAvIGJ5dGVzOwpAQCAtMjk0LDM2ICszMDEsNDYgQEAKIAkJKm9mZnNldCA9IGJ5dGVzICogKGNvdW50IC0gKGJjbnQgLSAxKSAqIG5pdGVtX3Blcl9ibG9jayk7CiAKIAkJYnJlbHNlKCpwYmgpOwotCQkqcGJoID0gc2JfYnJlYWQoc2IsIGJsb2NrbnIgKyBiY250KTsKKwkJKnBiaCA9IF9fYnJlYWQobmlsZnMtPm5zX2JkZXYsIGJsb2NrbnIgKyBiY250LAorCQkJICAgICAgIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCX0KIH0KIAotc3RhdGljIGludAotY29sbGVjdF9ibG9ja3NfZnJvbV9zZWdzdW0oc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgc2VjdG9yX3Qgc3VtX2Jsb2NrbnIsCi0JCQkgICBzdHJ1Y3QgbmlsZnNfc2Vnc3VtX2luZm8gKnNzaSwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCisvKioKKyAqIG5pbGZzX3NjYW5fZHN5bmNfbG9nIC0gZ2V0IGJsb2NrIGluZm9ybWF0aW9uIG9mIGEgbG9nIHdyaXR0ZW4gZm9yIGRhdGEgc3luYworICogQG5pbGZzOiBuaWxmcyBvYmplY3QKKyAqIEBzdGFydF9ibG9ja25yOiBzdGFydCBibG9jayBudW1iZXIgb2YgdGhlIGxvZworICogQHN1bTogbG9nIHN1bW1hcnkgaW5mb3JtYXRpb24KKyAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIG5pbGZzX3JlY292ZXJ5X2Jsb2NrIHN0cnVjdAorICovCitzdGF0aWMgaW50IG5pbGZzX3NjYW5fZHN5bmNfbG9nKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzZWN0b3JfdCBzdGFydF9ibG9ja25yLAorCQkJCXN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKnN1bSwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKLQl1bnNpZ25lZCBsb25nIG5maW5mbyA9IHNzaS0+bmZpbmZvOwotCXNlY3Rvcl90IGJsb2NrbnIgPSBzdW1fYmxvY2tuciArIHNzaS0+bnN1bWJsazsKKwl1MzIgbmZpbmZvLCBzdW1ieXRlczsKKwlzZWN0b3JfdCBibG9ja25yOwogCWlub190IGlubzsKIAlpbnQgZXJyID0gLUVJTzsKIAorCW5maW5mbyA9IGxlMzJfdG9fY3B1KHN1bS0+c3NfbmZpbmZvKTsKIAlpZiAoIW5maW5mbykKIAkJcmV0dXJuIDA7CiAKLQliaCA9IHNiX2JyZWFkKHNiaS0+c19zdXBlciwgc3VtX2Jsb2NrbnIpOworCXN1bWJ5dGVzID0gbGUzMl90b19jcHUoc3VtLT5zc19zdW1ieXRlcyk7CisJYmxvY2tuciA9IHN0YXJ0X2Jsb2NrbnIgKyBESVZfUk9VTkRfVVAoc3VtYnl0ZXMsIG5pbGZzLT5uc19ibG9ja3NpemUpOworCWJoID0gX19icmVhZChuaWxmcy0+bnNfYmRldiwgc3RhcnRfYmxvY2tuciwgbmlsZnMtPm5zX2Jsb2Nrc2l6ZSk7CiAJaWYgKHVubGlrZWx5KCFiaCkpCiAJCWdvdG8gb3V0OwogCi0Jb2Zmc2V0ID0gbGUxNl90b19jcHUoCi0JCSgoc3RydWN0IG5pbGZzX3NlZ21lbnRfc3VtbWFyeSAqKWJoLT5iX2RhdGEpLT5zc19ieXRlcyk7CisJb2Zmc2V0ID0gbGUxNl90b19jcHUoc3VtLT5zc19ieXRlcyk7CiAJZm9yICg7OykgewogCQl1bnNpZ25lZCBsb25nIG5ibG9ja3MsIG5kYXRhYmxrLCBubm9kZWJsazsKIAkJc3RydWN0IG5pbGZzX2ZpbmZvICpmaW5mbzsKIAotCQlmaW5mbyA9IHNlZ3N1bV9nZXQoc2JpLT5zX3N1cGVyLCAmYmgsICZvZmZzZXQsIHNpemVvZigqZmluZm8pKTsKKwkJZmluZm8gPSBuaWxmc19yZWFkX3N1bW1hcnlfaW5mbyhuaWxmcywgJmJoLCAmb2Zmc2V0LAorCQkJCQkJc2l6ZW9mKCpmaW5mbykpOwogCQlpZiAodW5saWtlbHkoIWZpbmZvKSkKIAkJCWdvdG8gb3V0OwogCkBAIC0zMzYsOCArMzUzLDggQEAKIAkJCXN0cnVjdCBuaWxmc19yZWNvdmVyeV9ibG9jayAqcmI7CiAJCQlzdHJ1Y3QgbmlsZnNfYmluZm9fdiAqYmluZm87CiAKLQkJCWJpbmZvID0gc2Vnc3VtX2dldChzYmktPnNfc3VwZXIsICZiaCwgJm9mZnNldCwKLQkJCQkJICAgc2l6ZW9mKCpiaW5mbykpOworCQkJYmluZm8gPSBuaWxmc19yZWFkX3N1bW1hcnlfaW5mbyhuaWxmcywgJmJoLCAmb2Zmc2V0LAorCQkJCQkJCXNpemVvZigqYmluZm8pKTsKIAkJCWlmICh1bmxpa2VseSghYmluZm8pKQogCQkJCWdvdG8gb3V0OwogCkBAIC0zNTUsOSArMzcyLDkgQEAKIAkJfQogCQlpZiAoLS1uZmluZm8gPT0gMCkKIAkJCWJyZWFrOwotCQlibG9ja25yICs9IG5ub2RlYmxrOyAvKiBhbHdheXMgMCBmb3IgdGhlIGRhdGEgc3luYyBzZWdtZW50cyAqLwotCQlzZWdzdW1fc2tpcChzYmktPnNfc3VwZXIsICZiaCwgJm9mZnNldCwgc2l6ZW9mKF9fbGU2NCksCi0JCQkgICAgbm5vZGVibGspOworCQlibG9ja25yICs9IG5ub2RlYmxrOyAvKiBhbHdheXMgMCBmb3IgZGF0YSBzeW5jIGxvZ3MgKi8KKwkJbmlsZnNfc2tpcF9zdW1tYXJ5X2luZm8obmlsZnMsICZiaCwgJm9mZnNldCwgc2l6ZW9mKF9fbGU2NCksCisJCQkJCW5ub2RlYmxrKTsKIAkJaWYgKHVubGlrZWx5KCFiaCkpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC00NjcsMTQgKzQ4NCwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfcmVjb3ZlcnlfY29weV9ibG9jayhzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAorc3RhdGljIGludCBuaWxmc19yZWNvdmVyeV9jb3B5X2Jsb2NrKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAogCQkJCSAgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2Jsb2NrICpyYiwKIAkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfb3JnOwogCXZvaWQgKmthZGRyOwogCi0JYmhfb3JnID0gc2JfYnJlYWQoc2JpLT5zX3N1cGVyLCByYi0+YmxvY2tucik7CisJYmhfb3JnID0gX19icmVhZChuaWxmcy0+bnNfYmRldiwgcmItPmJsb2NrbnIsIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCWlmICh1bmxpa2VseSghYmhfb3JnKSkKIAkJcmV0dXJuIC1FSU87CiAKQEAgLTQ4NSwxMyArNTAyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVjb3Zlcl9kc3luY19ibG9ja3Moc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAotCQkJCXVuc2lnbmVkIGxvbmcgKm5yX3NhbHZhZ2VkX2Jsb2NrcykKK3N0YXRpYyBpbnQgbmlsZnNfcmVjb3Zlcl9kc3luY19ibG9ja3Moc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCisJCQkJICAgICAgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKKwkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NhbHZhZ2VkX2Jsb2NrcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBuaWxmc19yZWNvdmVyeV9ibG9jayAqcmIsICpuOwotCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IHNiaS0+c19zdXBlci0+c19ibG9ja3NpemU7CisJdW5zaWduZWQgYmxvY2tzaXplID0gbmlsZnMtPm5zX2Jsb2Nrc2l6ZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlsb2ZmX3QgcG9zOwogCWludCBlcnIgPSAwLCBlcnIyID0gMDsKQEAgLTUwNSwxMyArNTIzLDE2IEBACiAJCX0KIAogCQlwb3MgPSByYi0+Ymxrb2ZmIDw8IGlub2RlLT5pX2Jsa2JpdHM7Ci0JCXBhZ2UgPSBOVUxMOwotCQllcnIgPSBibG9ja193cml0ZV9iZWdpbihOVUxMLCBpbm9kZS0+aV9tYXBwaW5nLCBwb3MsIGJsb2Nrc2l6ZSwKLQkJCQkJMCwgJnBhZ2UsIE5VTEwsIG5pbGZzX2dldF9ibG9jayk7Ci0JCWlmICh1bmxpa2VseShlcnIpKQorCQllcnIgPSBibG9ja193cml0ZV9iZWdpbihpbm9kZS0+aV9tYXBwaW5nLCBwb3MsIGJsb2Nrc2l6ZSwKKwkJCQkJMCwgJnBhZ2UsIG5pbGZzX2dldF9ibG9jayk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlsb2ZmX3QgaXNpemUgPSBpbm9kZS0+aV9zaXplOworCQkJaWYgKHBvcyArIGJsb2Nrc2l6ZSA+IGlzaXplKQorCQkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKIAkJCWdvdG8gZmFpbGVkX2lub2RlOworCQl9CiAKLQkJZXJyID0gbmlsZnNfcmVjb3ZlcnlfY29weV9ibG9jayhzYmksIHJiLCBwYWdlKTsKKwkJZXJyID0gbmlsZnNfcmVjb3ZlcnlfY29weV9ibG9jayhuaWxmcywgcmIsIHBhZ2UpOwogCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCWdvdG8gZmFpbGVkX3BhZ2U7CiAKQEAgLTU1MSwxOCArNTcyLDIwIEBACiAvKioKICAqIG5pbGZzX2RvX3JvbGxfZm9yd2FyZCAtIHNhbHZhZ2UgbG9naWNhbCBzZWdtZW50cyBuZXdlciB0aGFuIHRoZSBsYXRlc3QKICAqIGNoZWNrcG9pbnQKKyAqIEBuaWxmczogbmlsZnMgb2JqZWN0CiAgKiBAc2JpOiBuaWxmc19zYl9pbmZvCi0gKiBAbmlsZnM6IHRoZV9uaWxmcwogICogQHJpOiBwb2ludGVyIHRvIGEgbmlsZnNfcmVjb3ZlcnlfaW5mbwogICovCiBzdGF0aWMgaW50IG5pbGZzX2RvX3JvbGxfZm9yd2FyZChzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywKIAkJCQkgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKIAkJCQkgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKnJpKQogewotCXN0cnVjdCBuaWxmc19zZWdzdW1faW5mbyBzc2k7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9zdW0gPSBOVUxMOworCXN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKnN1bTsKIAlzZWN0b3JfdCBwc2VnX3N0YXJ0OwogCXNlY3Rvcl90IHNlZ19zdGFydCwgc2VnX2VuZDsgIC8qIFN0YXJ0aW5nL2VuZGluZyBEQk4gb2YgZnVsbCBzZWdtZW50ICovCiAJdW5zaWduZWQgbG9uZyBuc2FsdmFnZWRfYmxvY2tzID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdTY0IHNlZ19zZXE7CiAJX191NjQgc2VnbnVtLCBuZXh0bnVtID0gMDsKIAlpbnQgZW1wdHlfc2VnID0gMDsKQEAgLTU4MSw4ICs2MDQsMTQgQEAKIAluaWxmc19nZXRfc2VnbWVudF9yYW5nZShuaWxmcywgc2VnbnVtLCAmc2VnX3N0YXJ0LCAmc2VnX2VuZCk7CiAKIAl3aGlsZSAoc2VnbnVtICE9IHJpLT5yaV9zZWdudW0gfHwgcHNlZ19zdGFydCA8PSByaS0+cmlfcHNlZ19zdGFydCkgeworCQlicmVsc2UoYmhfc3VtKTsKKwkJYmhfc3VtID0gbmlsZnNfcmVhZF9sb2dfaGVhZGVyKG5pbGZzLCBwc2VnX3N0YXJ0LCAmc3VtKTsKKwkJaWYgKCFiaF9zdW0pIHsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGZhaWxlZDsKKwkJfQogCi0JCXJldCA9IGxvYWRfc2VnbWVudF9zdW1tYXJ5KHNiaSwgcHNlZ19zdGFydCwgc2VnX3NlcSwgJnNzaSk7CisJCXJldCA9IG5pbGZzX3ZhbGlkYXRlX2xvZyhuaWxmcywgc2VnX3NlcSwgYmhfc3VtLCBzdW0pOwogCQlpZiAocmV0KSB7CiAJCQlpZiAocmV0ID09IE5JTEZTX1NFR19GQUlMX0lPKSB7CiAJCQkJZXJyID0gLUVJTzsKQEAgLTU5MCwzMyArNjE5LDM4IEBACiAJCQl9CiAJCQlnb3RvIHN0cmF5ZWQ7CiAJCX0KLQkJaWYgKHVubGlrZWx5KE5JTEZTX1NFR19IQVNfU1IoJnNzaSkpKQorCisJCWZsYWdzID0gbGUxNl90b19jcHUoc3VtLT5zc19mbGFncyk7CisJCWlmIChmbGFncyAmIE5JTEZTX1NTX1NSKQogCQkJZ290byBjb25mdXNlZDsKIAogCQkvKiBGb3VuZCBhIHZhbGlkIHBhcnRpYWwgc2VnbWVudDsgZG8gcmVjb3ZlcnkgYWN0aW9ucyAqLwotCQluZXh0bnVtID0gbmlsZnNfZ2V0X3NlZ251bV9vZl9ibG9jayhuaWxmcywgc3NpLm5leHQpOworCQluZXh0bnVtID0gbmlsZnNfZ2V0X3NlZ251bV9vZl9ibG9jayhuaWxmcywKKwkJCQkJCSAgICBsZTY0X3RvX2NwdShzdW0tPnNzX25leHQpKTsKIAkJZW1wdHlfc2VnID0gMDsKLQkJbmlsZnMtPm5zX2N0aW1lID0gc3NpLmN0aW1lOwotCQlpZiAoIShzc2kuZmxhZ3MgJiBOSUxGU19TU19HQykpCi0JCQluaWxmcy0+bnNfbm9uZ2NfY3RpbWUgPSBzc2kuY3RpbWU7CisJCW5pbGZzLT5uc19jdGltZSA9IGxlNjRfdG9fY3B1KHN1bS0+c3NfY3JlYXRlKTsKKwkJaWYgKCEoZmxhZ3MgJiBOSUxGU19TU19HQykpCisJCQluaWxmcy0+bnNfbm9uZ2NfY3RpbWUgPSBuaWxmcy0+bnNfY3RpbWU7CiAKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIFJGX0lOSVRfU1Q6Ci0JCQlpZiAoIU5JTEZTX1NFR19MT0dCR04oJnNzaSkgfHwgIU5JTEZTX1NFR19EU1lOQygmc3NpKSkKKwkJCWlmICghKGZsYWdzICYgTklMRlNfU1NfTE9HQkdOKSB8fAorCQkJICAgICEoZmxhZ3MgJiBOSUxGU19TU19TWU5EVCkpCiAJCQkJZ290byB0cnlfbmV4dF9wc2VnOwogCQkJc3RhdGUgPSBSRl9EU1lOQ19TVDsKIAkJCS8qIEZhbGwgdGhyb3VnaCAqLwogCQljYXNlIFJGX0RTWU5DX1NUOgotCQkJaWYgKCFOSUxGU19TRUdfRFNZTkMoJnNzaSkpCisJCQlpZiAoIShmbGFncyAmIE5JTEZTX1NTX1NZTkRUKSkKIAkJCQlnb3RvIGNvbmZ1c2VkOwogCi0JCQllcnIgPSBjb2xsZWN0X2Jsb2Nrc19mcm9tX3NlZ3N1bSgKLQkJCQlzYmksIHBzZWdfc3RhcnQsICZzc2ksICZkc3luY19ibG9ja3MpOworCQkJZXJyID0gbmlsZnNfc2Nhbl9kc3luY19sb2cobmlsZnMsIHBzZWdfc3RhcnQsIHN1bSwKKwkJCQkJCSAgICZkc3luY19ibG9ja3MpOwogCQkJaWYgKHVubGlrZWx5KGVycikpCiAJCQkJZ290byBmYWlsZWQ7Ci0JCQlpZiAoTklMRlNfU0VHX0xPR0VORCgmc3NpKSkgewotCQkJCWVyciA9IHJlY292ZXJfZHN5bmNfYmxvY2tzKAotCQkJCQlzYmksICZkc3luY19ibG9ja3MsICZuc2FsdmFnZWRfYmxvY2tzKTsKKwkJCWlmIChmbGFncyAmIE5JTEZTX1NTX0xPR0VORCkgeworCQkJCWVyciA9IG5pbGZzX3JlY292ZXJfZHN5bmNfYmxvY2tzKAorCQkJCQluaWxmcywgc2JpLCAmZHN5bmNfYmxvY2tzLAorCQkJCQkmbnNhbHZhZ2VkX2Jsb2Nrcyk7CiAJCQkJaWYgKHVubGlrZWx5KGVycikpCiAJCQkJCWdvdG8gZmFpbGVkOwogCQkJCXN0YXRlID0gUkZfSU5JVF9TVDsKQEAgLTYyNyw3ICs2NjEsNyBAQAogIHRyeV9uZXh0X3BzZWc6CiAJCWlmIChwc2VnX3N0YXJ0ID09IHJpLT5yaV9sc2Vnc19lbmQpCiAJCQlicmVhazsKLQkJcHNlZ19zdGFydCArPSBzc2kubmJsb2NrczsKKwkJcHNlZ19zdGFydCArPSBsZTMyX3RvX2NwdShzdW0tPnNzX25ibG9ja3MpOwogCQlpZiAocHNlZ19zdGFydCA8IHNlZ19lbmQpCiAJCQljb250aW51ZTsKIAkJZ290byBmZWVkX3NlZ21lbnQ7CkBAIC02NTIsOCArNjg2LDkgQEAKIAkJcmktPnJpX25lZWRfcmVjb3ZlcnkgPSBOSUxGU19SRUNPVkVSWV9ST0xMRk9SV0FSRF9ET05FOwogCX0KICBvdXQ6CisJYnJlbHNlKGJoX3N1bSk7CiAJZGlzcG9zZV9yZWNvdmVyeV9saXN0KCZkc3luY19ibG9ja3MpOwotCW5pbGZzX2RldGFjaF93cml0ZXIoc2JpLT5zX25pbGZzLCBzYmkpOworCW5pbGZzX2RldGFjaF93cml0ZXIobmlsZnMsIHNiaSk7CiAJcmV0dXJuIGVycjsKIAogIGNvbmZ1c2VkOgpAQCAtNjY3LDcgKzcwMiw2IEBACiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX2ZpbmlzaF9yb2xsX2ZvcndhcmQoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCi0JCQkJICAgICAgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKIAkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfcmVjb3ZlcnlfaW5mbyAqcmkpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKQEAgLTY3Nyw3ICs3MTEsNyBAQAogCSAgICBuaWxmc19nZXRfc2VnbnVtX29mX2Jsb2NrKG5pbGZzLCByaS0+cmlfc3VwZXJfcm9vdCkpCiAJCXJldHVybjsKIAotCWJoID0gc2JfZ2V0YmxrKHNiaS0+c19zdXBlciwgcmktPnJpX2xzZWdzX3N0YXJ0KTsKKwliaCA9IF9fZ2V0YmxrKG5pbGZzLT5uc19iZGV2LCByaS0+cmlfbHNlZ3Nfc3RhcnQsIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCUJVR19PTighYmgpOwogCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBiaC0+Yl9zaXplKTsKIAlzZXRfYnVmZmVyX2RpcnR5KGJoKTsKQEAgLTY5MCw5ICs3MjQsOCBAQAogfQogCiAvKioKLSAqIG5pbGZzX3JlY292ZXJfbG9naWNhbF9zZWdtZW50cyAtIHNhbHZhZ2UgbG9naWNhbCBzZWdtZW50cyB3cml0dGVuIGFmdGVyCi0gKiB0aGUgbGF0ZXN0IHN1cGVyIHJvb3QKLSAqIEBuaWxmczogdGhlX25pbGZzCisgKiBuaWxmc19zYWx2YWdlX29ycGhhbl9sb2dzIC0gc2FsdmFnZSBsb2dzIHdyaXR0ZW4gYWZ0ZXIgdGhlIGxhdGVzdCBjaGVja3BvaW50CisgKiBAbmlsZnM6IG5pbGZzIG9iamVjdAogICogQHNiaTogbmlsZnNfc2JfaW5mbwogICogQHJpOiBwb2ludGVyIHRvIGEgbmlsZnNfcmVjb3ZlcnlfaW5mbyBzdHJ1Y3QgdG8gc3RvcmUgc2VhcmNoIHJlc3VsdHMuCiAgKgpAQCAtNzA5LDkgKzc0Miw5IEBACiAgKgogICogJS1FTk9NRU0gLSBJbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4KICAqLwotaW50IG5pbGZzX3JlY292ZXJfbG9naWNhbF9zZWdtZW50cyhzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywKLQkJCQkgICBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLAotCQkJCSAgIHN0cnVjdCBuaWxmc19yZWNvdmVyeV9pbmZvICpyaSkKK2ludCBuaWxmc19zYWx2YWdlX29ycGhhbl9sb2dzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAorCQkJICAgICAgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwKKwkJCSAgICAgIHN0cnVjdCBuaWxmc19yZWNvdmVyeV9pbmZvICpyaSkKIHsKIAlpbnQgZXJyOwogCkBAIC03NTEsNyArNzg0LDcgQEAKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKLQkJbmlsZnNfZmluaXNoX3JvbGxfZm9yd2FyZChuaWxmcywgc2JpLCByaSk7CisJCW5pbGZzX2ZpbmlzaF9yb2xsX2ZvcndhcmQobmlsZnMsIHJpKTsKIAl9CiAKICBmYWlsZWQ6CkBAIC03NjIsNyArNzk1LDYgQEAKIC8qKgogICogbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3QgLSBzZWFyY2ggdGhlIGxhdGVzdCB2YWxpZCBzdXBlciByb290CiAgKiBAbmlsZnM6IHRoZV9uaWxmcwotICogQHNiaTogbmlsZnNfc2JfaW5mbwogICogQHJpOiBwb2ludGVyIHRvIGEgbmlsZnNfcmVjb3ZlcnlfaW5mbyBzdHJ1Y3QgdG8gc3RvcmUgc2VhcmNoIHJlc3VsdHMuCiAgKgogICogbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3QoKSBsb29rcyBmb3IgdGhlIGxhdGVzdCBzdXBlci1yb290IGZyb20gYSBwYXJ0aWFsCkBAIC03NzUsMTQgKzgwNywxOSBAQAogICogJS1FSU5WQUwgLSBObyB2YWxpZCBzZWdtZW50IGZvdW5kCiAgKgogICogJS1FSU8gLSBJL08gZXJyb3IKKyAqCisgKiAlLUVOT01FTSAtIEluc3VmZmljaWVudCBtZW1vcnkgYXZhaWxhYmxlLgogICovCi1pbnQgbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksCitpbnQgbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCiAJCQkgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKnJpKQogewotCXN0cnVjdCBuaWxmc19zZWdzdW1faW5mbyBzc2k7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9zdW0gPSBOVUxMOworCXN0cnVjdCBuaWxmc19zZWdtZW50X3N1bW1hcnkgKnN1bTsKIAlzZWN0b3JfdCBwc2VnX3N0YXJ0LCBwc2VnX2VuZCwgc3JfcHNlZ19zdGFydCA9IDA7CiAJc2VjdG9yX3Qgc2VnX3N0YXJ0LCBzZWdfZW5kOyAvKiByYW5nZSBvZiBmdWxsIHNlZ21lbnQgKGJsb2NrIG51bWJlcikgKi8KIAlzZWN0b3JfdCBiLCBlbmQ7CisJdW5zaWduZWQgbG9uZyBuYmxvY2tzOworCXVuc2lnbmVkIGludCBmbGFnczsKIAl1NjQgc2VnX3NlcTsKIAlfX3U2NCBzZWdudW0sIG5leHRudW0gPSAwOwogCV9fdTY0IGNubzsKQEAgLTgwMSwxNyArODM4LDI0IEBACiAJLyogUmVhZCBhaGVhZCBzZWdtZW50ICovCiAJYiA9IHNlZ19zdGFydDsKIAl3aGlsZSAoYiA8PSBzZWdfZW5kKQotCQlzYl9icmVhZGFoZWFkKHNiaS0+c19zdXBlciwgYisrKTsKKwkJX19icmVhZGFoZWFkKG5pbGZzLT5uc19iZGV2LCBiKyssIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCiAJZm9yICg7OykgewotCQkvKiBMb2FkIHNlZ21lbnQgc3VtbWFyeSAqLwotCQlyZXQgPSBsb2FkX3NlZ21lbnRfc3VtbWFyeShzYmksIHBzZWdfc3RhcnQsIHNlZ19zZXEsICZzc2kpOworCQlicmVsc2UoYmhfc3VtKTsKKwkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfSU87CisJCWJoX3N1bSA9IG5pbGZzX3JlYWRfbG9nX2hlYWRlcihuaWxmcywgcHNlZ19zdGFydCwgJnN1bSk7CisJCWlmICghYmhfc3VtKQorCQkJZ290byBmYWlsZWQ7CisKKwkJcmV0ID0gbmlsZnNfdmFsaWRhdGVfbG9nKG5pbGZzLCBzZWdfc2VxLCBiaF9zdW0sIHN1bSk7CiAJCWlmIChyZXQpIHsKIAkJCWlmIChyZXQgPT0gTklMRlNfU0VHX0ZBSUxfSU8pCiAJCQkJZ290byBmYWlsZWQ7CiAJCQlnb3RvIHN0cmF5ZWQ7CiAJCX0KLQkJcHNlZ19lbmQgPSBwc2VnX3N0YXJ0ICsgc3NpLm5ibG9ja3MgLSAxOworCisJCW5ibG9ja3MgPSBsZTMyX3RvX2NwdShzdW0tPnNzX25ibG9ja3MpOworCQlwc2VnX2VuZCA9IHBzZWdfc3RhcnQgKyBuYmxvY2tzIC0gMTsKIAkJaWYgKHVubGlrZWx5KHBzZWdfZW5kID4gc2VnX2VuZCkpIHsKIAkJCXJldCA9IE5JTEZTX1NFR19GQUlMX0NPTlNJU1RFTkNZOwogCQkJZ290byBzdHJheWVkOwpAQCAtODIxLDExICs4NjUsMTMgQEAKIAkJcmktPnJpX3BzZWdfc3RhcnQgPSBwc2VnX3N0YXJ0OwogCQlyaS0+cmlfc2VxID0gc2VnX3NlcTsKIAkJcmktPnJpX3NlZ251bSA9IHNlZ251bTsKLQkJbmV4dG51bSA9IG5pbGZzX2dldF9zZWdudW1fb2ZfYmxvY2sobmlsZnMsIHNzaS5uZXh0KTsKKwkJbmV4dG51bSA9IG5pbGZzX2dldF9zZWdudW1fb2ZfYmxvY2sobmlsZnMsCisJCQkJCQkgICAgbGU2NF90b19jcHUoc3VtLT5zc19uZXh0KSk7CiAJCXJpLT5yaV9uZXh0bnVtID0gbmV4dG51bTsKIAkJZW1wdHlfc2VnID0gMDsKIAotCQlpZiAoIU5JTEZTX1NFR19IQVNfU1IoJnNzaSkgJiYgIXNjYW5fbmV3ZXIpIHsKKwkJZmxhZ3MgPSBsZTE2X3RvX2NwdShzdW0tPnNzX2ZsYWdzKTsKKwkJaWYgKCEoZmxhZ3MgJiBOSUxGU19TU19TUikgJiYgIXNjYW5fbmV3ZXIpIHsKIAkJCS8qIFRoaXMgd2lsbCBuZXZlciBoYXBwZW4gYmVjYXVzZSBhIHN1cGVyYmxvY2sKIAkJCSAgIChsYXN0X3NlZ21lbnQpIGFsd2F5cyBwb2ludHMgdG8gYSBwc2VnCiAJCQkgICBoYXZpbmcgYSBzdXBlciByb290LiAqLwpAQCAtODM2LDE0ICs4ODIsMTUgQEAKIAkJaWYgKHBzZWdfc3RhcnQgPT0gc2VnX3N0YXJ0KSB7CiAJCQluaWxmc19nZXRfc2VnbWVudF9yYW5nZShuaWxmcywgbmV4dG51bSwgJmIsICZlbmQpOwogCQkJd2hpbGUgKGIgPD0gZW5kKQotCQkJCXNiX2JyZWFkYWhlYWQoc2JpLT5zX3N1cGVyLCBiKyspOworCQkJCV9fYnJlYWRhaGVhZChuaWxmcy0+bnNfYmRldiwgYisrLAorCQkJCQkgICAgIG5pbGZzLT5uc19ibG9ja3NpemUpOwogCQl9Ci0JCWlmICghTklMRlNfU0VHX0hBU19TUigmc3NpKSkgewotCQkJaWYgKCFyaS0+cmlfbHNlZ3Nfc3RhcnQgJiYgTklMRlNfU0VHX0xPR0JHTigmc3NpKSkgeworCQlpZiAoIShmbGFncyAmIE5JTEZTX1NTX1NSKSkgeworCQkJaWYgKCFyaS0+cmlfbHNlZ3Nfc3RhcnQgJiYgKGZsYWdzICYgTklMRlNfU1NfTE9HQkdOKSkgewogCQkJCXJpLT5yaV9sc2Vnc19zdGFydCA9IHBzZWdfc3RhcnQ7CiAJCQkJcmktPnJpX2xzZWdzX3N0YXJ0X3NlcSA9IHNlZ19zZXE7CiAJCQl9Ci0JCQlpZiAoTklMRlNfU0VHX0xPR0VORCgmc3NpKSkKKwkJCWlmIChmbGFncyAmIE5JTEZTX1NTX0xPR0VORCkKIAkJCQlyaS0+cmlfbHNlZ3NfZW5kID0gcHNlZ19zdGFydDsKIAkJCWdvdG8gdHJ5X25leHRfcHNlZzsKIAkJfQpAQCAtODU0LDEyICs5MDEsMTIgQEAKIAkJcmktPnJpX2xzZWdzX3N0YXJ0ID0gcmktPnJpX2xzZWdzX2VuZCA9IDA7CiAKIAkJbmlsZnNfZGlzcG9zZV9zZWdtZW50X2xpc3QoJnNlZ21lbnRzKTsKLQkJbmlsZnMtPm5zX3BzZWdfb2Zmc2V0ID0gKHNyX3BzZWdfc3RhcnQgPSBwc2VnX3N0YXJ0KQotCQkJKyBzc2kubmJsb2NrcyAtIHNlZ19zdGFydDsKKwkJc3JfcHNlZ19zdGFydCA9IHBzZWdfc3RhcnQ7CisJCW5pbGZzLT5uc19wc2VnX29mZnNldCA9IHBzZWdfc3RhcnQgKyBuYmxvY2tzIC0gc2VnX3N0YXJ0OwogCQluaWxmcy0+bnNfc2VnX3NlcSA9IHNlZ19zZXE7CiAJCW5pbGZzLT5uc19zZWdudW0gPSBzZWdudW07CiAJCW5pbGZzLT5uc19jbm8gPSBjbm87ICAvKiBuaWxmcy0+bnNfY25vID0gcmktPnJpX2NubyArIDEgKi8KLQkJbmlsZnMtPm5zX2N0aW1lID0gc3NpLmN0aW1lOworCQluaWxmcy0+bnNfY3RpbWUgPSBsZTY0X3RvX2NwdShzdW0tPnNzX2NyZWF0ZSk7CiAJCW5pbGZzLT5uc19uZXh0bnVtID0gbmV4dG51bTsKIAogCQlpZiAoc2Nhbl9uZXdlcikKQEAgLTg3MCwxNSArOTE3LDkgQEAKIAkJCXNjYW5fbmV3ZXIgPSAxOwogCQl9CiAKLQkJLyogcmVzZXQgcmVnaW9uIGZvciByb2xsLWZvcndhcmQgKi8KLQkJcHNlZ19zdGFydCArPSBzc2kubmJsb2NrczsKLQkJaWYgKHBzZWdfc3RhcnQgPCBzZWdfZW5kKQotCQkJY29udGludWU7Ci0JCWdvdG8gZmVlZF9zZWdtZW50OwotCiAgdHJ5X25leHRfcHNlZzoKIAkJLyogU3RhbmRpbmcgb24gYSBjb3Vyc2UsIG9yIG1ldCBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgKi8KLQkJcHNlZ19zdGFydCArPSBzc2kubmJsb2NrczsKKwkJcHNlZ19zdGFydCArPSBuYmxvY2tzOwogCQlpZiAocHNlZ19zdGFydCA8IHNlZ19lbmQpCiAJCQljb250aW51ZTsKIAkJZ290byBmZWVkX3NlZ21lbnQ7CkBAIC05MDksNiArOTUwLDcgQEAKIAogIHN1cGVyX3Jvb3RfZm91bmQ6CiAJLyogVXBkYXRpbmcgcG9pbnRlcnMgcmVsYXRpbmcgdG8gdGhlIGxhdGVzdCBjaGVja3BvaW50ICovCisJYnJlbHNlKGJoX3N1bSk7CiAJbGlzdF9zcGxpY2VfdGFpbCgmc2VnbWVudHMsICZyaS0+cmlfdXNlZF9zZWdtZW50cyk7CiAJbmlsZnMtPm5zX2xhc3RfcHNlZyA9IHNyX3BzZWdfc3RhcnQ7CiAJbmlsZnMtPm5zX2xhc3Rfc2VxID0gbmlsZnMtPm5zX3NlZ19zZXE7CkBAIC05MTYsNiArOTU4LDcgQEAKIAlyZXR1cm4gMDsKIAogIGZhaWxlZDoKKwlicmVsc2UoYmhfc3VtKTsKIAluaWxmc19kaXNwb3NlX3NlZ21lbnRfbGlzdCgmc2VnbWVudHMpOwogCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBuaWxmc193YXJuX3NlZ21lbnRfZXJyb3IocmV0KTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdidWYuYyBiL2ZzL25pbGZzMi9zZWdidWYuYwppbmRleCAyZTZhMjcyLi40NTg4ZmI5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnYnVmLmMKKysrIGIvZnMvbmlsZnMyL3NlZ2J1Zi5jCkBAIC01MDgsNyArNTA4LDcgQEAKIAkJICogTGFzdCBCSU8gaXMgYWx3YXlzIHNlbnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nCiAJCSAqIHN1Ym1pc3Npb24uCiAJCSAqLwotCQlydyB8PSAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpOworCQlydyB8PSBSRVFfU1lOQyB8IFJFUV9VTlBMVUc7CiAJCXJlcyA9IG5pbGZzX3NlZ2J1Zl9zdWJtaXRfYmlvKHNlZ2J1ZiwgJndpLCBydyk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnYnVmLmggYi9mcy9uaWxmczIvc2VnYnVmLmgKaW5kZXggODVmYmI2Ni4uYjA0ZjA4YyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ2J1Zi5oCisrKyBiL2ZzL25pbGZzMi9zZWdidWYuaApAQCAtNTQsMTcgKzU0LDYgQEAKIAlzZWN0b3JfdAkJbmV4dDsKIH07CiAKLS8qIG1hY3JvIGZvciB0aGUgZmxhZ3MgKi8KLSNkZWZpbmUgTklMRlNfU0VHX0hBU19TUihzdW0pICAgICgoc3VtKS0+ZmxhZ3MgJiBOSUxGU19TU19TUikKLSNkZWZpbmUgTklMRlNfU0VHX0xPR0JHTihzdW0pICAgICgoc3VtKS0+ZmxhZ3MgJiBOSUxGU19TU19MT0dCR04pCi0jZGVmaW5lIE5JTEZTX1NFR19MT0dFTkQoc3VtKSAgICAoKHN1bSktPmZsYWdzICYgTklMRlNfU1NfTE9HRU5EKQotI2RlZmluZSBOSUxGU19TRUdfRFNZTkMoc3VtKSAgICAgKChzdW0pLT5mbGFncyAmIE5JTEZTX1NTX1NZTkRUKQotI2RlZmluZSBOSUxGU19TRUdfU0lNUExFWChzdW0pIFwKLQkoKChzdW0pLT5mbGFncyAmIChOSUxGU19TU19MT0dCR04gfCBOSUxGU19TU19MT0dFTkQpKSA9PSBcCi0JIChOSUxGU19TU19MT0dCR04gfCBOSUxGU19TU19MT0dFTkQpKQotCi0jZGVmaW5lIE5JTEZTX1NFR19FTVBUWShzdW0pCSgoc3VtKS0+bmJsb2NrcyA9PSAoc3VtKS0+bnN1bWJsaykKLQogLyoqCiAgKiBzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgLSBTZWdtZW50IGJ1ZmZlcgogICogQHNiX3N1cGVyOiBiYWNrIHBvaW50ZXIgdG8gYSBzdXBlcmJsb2NrIHN0cnVjdApAQCAtMTQxLDYgKzEzMCwxOSBAQAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiB2b2lkIG5pbGZzX3NlZ2J1Zl9maWxsX2luX3NlZ3N1bShzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKik7CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5pbGZzX3NlZ2J1Zl9zaW1wbGV4KHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IHNlZ2J1Zi0+c2Jfc3VtLmZsYWdzOworCisJcmV0dXJuIChmbGFncyAmIChOSUxGU19TU19MT0dCR04gfCBOSUxGU19TU19MT0dFTkQpKSA9PQorCQkoTklMRlNfU1NfTE9HQkdOIHwgTklMRlNfU1NfTE9HRU5EKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmlsZnNfc2VnYnVmX2VtcHR5KHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmKQoreworCXJldHVybiBzZWdidWYtPnNiX3N1bS5uYmxvY2tzID09IHNlZ2J1Zi0+c2Jfc3VtLm5zdW1ibGs7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmlsZnNfc2VnYnVmX2FkZF9zZWdzdW1fYnVmZmVyKHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmLAogCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCBjOTIwMTY0Li45ZmQwNTFhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTE5MTQsMTIgKzE5MTQsMTIgQEAKIAkJCX0KIAkJfQogCi0JCWlmICghTklMRlNfU0VHX1NJTVBMRVgoJnNlZ2J1Zi0+c2Jfc3VtKSkgewotCQkJaWYgKE5JTEZTX1NFR19MT0dCR04oJnNlZ2J1Zi0+c2Jfc3VtKSkgeworCQlpZiAoIW5pbGZzX3NlZ2J1Zl9zaW1wbGV4KHNlZ2J1ZikpIHsKKwkJCWlmIChzZWdidWYtPnNiX3N1bS5mbGFncyAmIE5JTEZTX1NTX0xPR0JHTikgewogCQkJCXNldF9iaXQoTklMRlNfU0NfVU5DTE9TRUQsICZzY2ktPnNjX2ZsYWdzKTsKIAkJCQlzY2ktPnNjX2xzZWdfc3RpbWUgPSBqaWZmaWVzOwogCQkJfQotCQkJaWYgKE5JTEZTX1NFR19MT0dFTkQoJnNlZ2J1Zi0+c2Jfc3VtKSkKKwkJCWlmIChzZWdidWYtPnNiX3N1bS5mbGFncyAmIE5JTEZTX1NTX0xPR0VORCkKIAkJCQljbGVhcl9iaXQoTklMRlNfU0NfVU5DTE9TRUQsICZzY2ktPnNjX2ZsYWdzKTsKIAkJfQogCX0KQEAgLTE5NTEsNyArMTk1MSw2IEBACiAJaWYgKHVwZGF0ZV9zcikgewogCQluaWxmc19zZXRfbGFzdF9zZWdtZW50KG5pbGZzLCBzZWdidWYtPnNiX3BzZWdfc3RhcnQsCiAJCQkJICAgICAgIHNlZ2J1Zi0+c2Jfc3VtLnNlZ19zZXEsIG5pbGZzLT5uc19jbm8rKyk7Ci0JCXNldF9uaWxmc19zYl9kaXJ0eShuaWxmcyk7CiAKIAkJY2xlYXJfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKTsKIAkJY2xlYXJfYml0KE5JTEZTX1NDX0RJUlRZLCAmc2NpLT5zY19mbGFncyk7CkBAIC0yMDgyLDcgKzIwODEsNyBAQAogCiAJCS8qIEF2b2lkIGVtcHR5IHNlZ21lbnQgKi8KIAkJaWYgKHNjaS0+c2Nfc3RhZ2Uuc2NudCA9PSBOSUxGU19TVF9ET05FICYmCi0JCSAgICBOSUxGU19TRUdfRU1QVFkoJnNjaS0+c2NfY3Vyc2VnLT5zYl9zdW0pKSB7CisJCSAgICBuaWxmc19zZWdidWZfZW1wdHkoc2NpLT5zY19jdXJzZWcpKSB7CiAJCQluaWxmc19zZWdjdG9yX2Fib3J0X2NvbnN0cnVjdGlvbihzY2ksIG5pbGZzLCAxKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNDA4LDYgKzI0MDcsNyBAQAogewogCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBzY2ktPnNjX3NiaTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnA7CiAJaW50IGVyciA9IDA7CiAKIAluaWxmc19zZWdjdG9yX2FjY2VwdChzY2kpOwpAQCAtMjQyMyw4ICsyNDIzLDEzIEBACiAJCWlmICh0ZXN0X2JpdChOSUxGU19TQ19TVVBFUl9ST09ULCAmc2NpLT5zY19mbGFncykgJiYKIAkJICAgIG5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykpIHsKIAkJCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCQkJZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKAotCQkJCXNiaSwgbmlsZnNfYWx0c2JfbmVlZF91cGRhdGUobmlsZnMpKTsKKwkJCWVyciA9IC1FSU87CisJCQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiaSwKKwkJCQkJCSAgbmlsZnNfc2Jfd2lsbF9mbGlwKG5pbGZzKSk7CisJCQlpZiAobGlrZWx5KHNicCkpIHsKKwkJCQluaWxmc19zZXRfbG9nX2N1cnNvcihzYnBbMF0sIG5pbGZzKTsKKwkJCQllcnIgPSBuaWxmc19jb21taXRfc3VwZXIoc2JpLCBOSUxGU19TQl9DT01NSVQpOworCQkJfQogCQkJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuaCBiL2ZzL25pbGZzMi9zZWdtZW50LmgKaW5kZXggMDFlMjBkYi4uMTdjNDg3YiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuaAorKysgYi9mcy9uaWxmczIvc2VnbWVudC5oCkBAIC0yMzQsMTMgKzIzNCwxMyBAQAogZXh0ZXJuIHZvaWQgbmlsZnNfZGV0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc3RydWN0IG5pbGZzX3NiX2luZm8gKik7CiAKIC8qIHJlY292ZXJ5LmMgKi8KLWV4dGVybiBpbnQgbmlsZnNfcmVhZF9zdXBlcl9yb290X2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWN0b3JfdCwKK2V4dGVybiBpbnQgbmlsZnNfcmVhZF9zdXBlcl9yb290X2Jsb2NrKHN0cnVjdCB0aGVfbmlsZnMgKiwgc2VjdG9yX3QsCiAJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiwgaW50KTsKLWV4dGVybiBpbnQgbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3Qoc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqLAorZXh0ZXJuIGludCBuaWxmc19zZWFyY2hfc3VwZXJfcm9vdChzdHJ1Y3QgdGhlX25pbGZzICosCiAJCQkJICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKik7Ci1leHRlcm4gaW50IG5pbGZzX3JlY292ZXJfbG9naWNhbF9zZWdtZW50cyhzdHJ1Y3QgdGhlX25pbGZzICosCi0JCQkJCSAgc3RydWN0IG5pbGZzX3NiX2luZm8gKiwKLQkJCQkJICBzdHJ1Y3QgbmlsZnNfcmVjb3ZlcnlfaW5mbyAqKTsKK2V4dGVybiBpbnQgbmlsZnNfc2FsdmFnZV9vcnBoYW5fbG9ncyhzdHJ1Y3QgdGhlX25pbGZzICosCisJCQkJICAgICBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqLAorCQkJCSAgICAgc3RydWN0IG5pbGZzX3JlY292ZXJ5X2luZm8gKik7CiBleHRlcm4gdm9pZCBuaWxmc19kaXNwb3NlX3NlZ21lbnRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICopOwogCiAjZW5kaWYgLyogX05JTEZTX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3N1cGVyLmMgYi9mcy9uaWxmczIvc3VwZXIuYwppbmRleCA0MTRlZjY4Li4xZmE4NmI5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgIm5pbGZzLmgiCiAjaW5jbHVkZSAibWR0LmgiCiAjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJidHJlZS5oIgorI2luY2x1ZGUgImJ0bm9kZS5oIgogI2luY2x1ZGUgInBhZ2UuaCIKICNpbmNsdWRlICJjcGZpbGUuaCIKICNpbmNsdWRlICJpZmlsZS5oIgpAQCAtNzQsNiArNzYsMjUgQEAKIAogc3RhdGljIGludCBuaWxmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpOwogCitzdGF0aWMgdm9pZCBuaWxmc19zZXRfZXJyb3Ioc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSkKK3sKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnA7CisKKwlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKKwlpZiAoIShuaWxmcy0+bnNfbW91bnRfc3RhdGUgJiBOSUxGU19FUlJPUl9GUykpIHsKKwkJbmlsZnMtPm5zX21vdW50X3N0YXRlIHw9IE5JTEZTX0VSUk9SX0ZTOworCQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiaSwgMCk7CisJCWlmIChsaWtlbHkoc2JwKSkgeworCQkJc2JwWzBdLT5zX3N0YXRlIHw9IGNwdV90b19sZTE2KE5JTEZTX0VSUk9SX0ZTKTsKKwkJCWlmIChzYnBbMV0pCisJCQkJc2JwWzFdLT5zX3N0YXRlIHw9IGNwdV90b19sZTE2KE5JTEZTX0VSUk9SX0ZTKTsKKwkJCW5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVF9BTEwpOworCQl9CisJfQorCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKK30KKwogLyoqCiAgKiBuaWxmc19lcnJvcigpIC0gcmVwb3J0IGZhaWx1cmUgY29uZGl0aW9uIG9uIGEgZmlsZXN5c3RlbQogICoKQEAgLTk5LDE2ICsxMjAsNyBAQAogCXZhX2VuZChhcmdzKTsKIAogCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewotCQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKLQotCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQkJaWYgKCEobmlsZnMtPm5zX21vdW50X3N0YXRlICYgTklMRlNfRVJST1JfRlMpKSB7Ci0JCQluaWxmcy0+bnNfbW91bnRfc3RhdGUgfD0gTklMRlNfRVJST1JfRlM7Ci0JCQluaWxmcy0+bnNfc2JwWzBdLT5zX3N0YXRlIHw9Ci0JCQkJY3B1X3RvX2xlMTYoTklMRlNfRVJST1JfRlMpOwotCQkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7Ci0JCX0KLQkJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOworCQluaWxmc19zZXRfZXJyb3Ioc2JpKTsKIAogCQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBFUlJPUlNfUk8pKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJSZW1vdW50aW5nIGZpbGVzeXN0ZW0gcmVhZC1vbmx5XG4iKTsKQEAgLTE1OSwyNCArMTcxLDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUobmlsZnNfaW5vZGVfY2FjaGVwLCBOSUxGU19JKGlub2RlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpID0gTklMRlNfSShpbm9kZSk7Ci0KLQkvKgotCSAqIEZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBuaWxmc19yZWFkX2lub2RlKCksIGhlcmUuCi0JICovCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZpaS0+aV9kaXJ0eSkpOwotCWJyZWxzZShpaS0+aV9iaCk7Ci0JaWktPmlfYmggPSBOVUxMOwotCi0JaWYgKHRlc3RfYml0KE5JTEZTX0lfQk1BUCwgJmlpLT5pX3N0YXRlKSkKLQkJbmlsZnNfYm1hcF9jbGVhcihpaS0+aV9ibWFwKTsKLQotCW5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcigmaWktPmlfYnRub2RlX2NhY2hlKTsKLX0KLQotc3RhdGljIGludCBuaWxmc19zeW5jX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIGludCBkdXBzYikKK3N0YXRpYyBpbnQgbmlsZnNfc3luY19zdXBlcihzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAlpbnQgZXJyOwpAQCAtMjAyLDEyICsxOTcsMjAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiTklMRlM6IHVuYWJsZSB0byB3cml0ZSBzdXBlcmJsb2NrIChlcnI9JWQpXG4iLCBlcnIpOwogCQlpZiAoZXJyID09IC1FSU8gJiYgbmlsZnMtPm5zX3NiaFsxXSkgeworCQkJLyoKKwkJCSAqIHNicFswXSBwb2ludHMgdG8gbmV3ZXIgbG9nIHRoYW4gc2JwWzFdLAorCQkJICogc28gY29weSBzYnBbMF0gdG8gc2JwWzFdIHRvIHRha2Ugb3ZlciBzYnBbMF0uCisJCQkgKi8KKwkJCW1lbWNweShuaWxmcy0+bnNfc2JwWzFdLCBuaWxmcy0+bnNfc2JwWzBdLAorCQkJICAgICAgIG5pbGZzLT5uc19zYnNpemUpOwogCQkJbmlsZnNfZmFsbF9iYWNrX3N1cGVyX2Jsb2NrKG5pbGZzKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicCA9IG5pbGZzLT5uc19zYnBbMF07CiAKKwkJbmlsZnMtPm5zX3Nid2NvdW50Kys7CisKIAkJLyoKIAkJICogVGhlIGxhdGVzdCBzZWdtZW50IGJlY29tZXMgdHJhaWxhYmxlIGZyb20gdGhlIHBvc2l0aW9uCiAJCSAqIHdyaXR0ZW4gaW4gc3VwZXJibG9jay4KQEAgLTIxNiw2NiArMjE5LDEyMiBAQAogCiAJCS8qIHVwZGF0ZSBHQyBwcm90ZWN0aW9uIGZvciByZWNlbnQgc2VnbWVudHMgKi8KIAkJaWYgKG5pbGZzLT5uc19zYmhbMV0pIHsKLQkJCXNicCA9IE5VTEw7Ci0JCQlpZiAoZHVwc2IpIHsKKwkJCWlmIChmbGFnID09IE5JTEZTX1NCX0NPTU1JVF9BTEwpIHsKIAkJCQlzZXRfYnVmZmVyX2RpcnR5KG5pbGZzLT5uc19zYmhbMV0pOwotCQkJCWlmICghc3luY19kaXJ0eV9idWZmZXIobmlsZnMtPm5zX3NiaFsxXSkpCi0JCQkJCXNicCA9IG5pbGZzLT5uc19zYnBbMV07CisJCQkJaWYgKHN5bmNfZGlydHlfYnVmZmVyKG5pbGZzLT5uc19zYmhbMV0pIDwgMCkKKwkJCQkJZ290byBvdXQ7CiAJCQl9CisJCQlpZiAobGU2NF90b19jcHUobmlsZnMtPm5zX3NicFsxXS0+c19sYXN0X2NubykgPAorCQkJICAgIGxlNjRfdG9fY3B1KG5pbGZzLT5uc19zYnBbMF0tPnNfbGFzdF9jbm8pKQorCQkJCXNicCA9IG5pbGZzLT5uc19zYnBbMV07CiAJCX0KLQkJaWYgKHNicCkgewotCQkJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOwotCQkJbmlsZnMtPm5zX3Byb3Rfc2VxID0gbGU2NF90b19jcHUoc2JwLT5zX2xhc3Rfc2VxKTsKLQkJCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOwotCQl9Ci0JfQogCisJCXNwaW5fbG9jaygmbmlsZnMtPm5zX2xhc3Rfc2VnbWVudF9sb2NrKTsKKwkJbmlsZnMtPm5zX3Byb3Rfc2VxID0gbGU2NF90b19jcHUoc2JwLT5zX2xhc3Rfc2VxKTsKKwkJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19sYXN0X3NlZ21lbnRfbG9jayk7CisJfQorIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgbmlsZnNfY29tbWl0X3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIGludCBkdXBzYikKK3ZvaWQgbmlsZnNfc2V0X2xvZ19jdXJzb3Ioc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICpzYnAsCisJCQkgIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQoreworCXNlY3Rvcl90IG5mcmVlYmxvY2tzOworCisJLyogbmlsZnMtPm5zX3NlbSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyLiAqLworCW5pbGZzX2NvdW50X2ZyZWVfYmxvY2tzKG5pbGZzLCAmbmZyZWVibG9ja3MpOworCXNicC0+c19mcmVlX2Jsb2Nrc19jb3VudCA9IGNwdV90b19sZTY0KG5mcmVlYmxvY2tzKTsKKworCXNwaW5fbG9jaygmbmlsZnMtPm5zX2xhc3Rfc2VnbWVudF9sb2NrKTsKKwlzYnAtPnNfbGFzdF9zZXEgPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9zZXEpOworCXNicC0+c19sYXN0X3BzZWcgPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9wc2VnKTsKKwlzYnAtPnNfbGFzdF9jbm8gPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9jbm8pOworCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOworfQorCitzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipuaWxmc19wcmVwYXJlX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksCisJCQkJCSAgICAgICBpbnQgZmxpcCkKIHsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnAgPSBuaWxmcy0+bnNfc2JwOwotCXNlY3Rvcl90IG5mcmVlYmxvY2tzOwotCXRpbWVfdCB0OwotCWludCBlcnI7CiAKLQkvKiBuaWxmcy0+c2VtIG11c3QgYmUgbG9ja2VkIGJ5IHRoZSBjYWxsZXIuICovCisJLyogbmlsZnMtPm5zX3NlbSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyLiAqLwogCWlmIChzYnBbMF0tPnNfbWFnaWMgIT0gY3B1X3RvX2xlMTYoTklMRlNfU1VQRVJfTUFHSUMpKSB7Ci0JCWlmIChzYnBbMV0gJiYgc2JwWzFdLT5zX21hZ2ljID09IGNwdV90b19sZTE2KE5JTEZTX1NVUEVSX01BR0lDKSkKLQkJCW5pbGZzX3N3YXBfc3VwZXJfYmxvY2sobmlsZnMpOwotCQllbHNlIHsKKwkJaWYgKHNicFsxXSAmJgorCQkgICAgc2JwWzFdLT5zX21hZ2ljID09IGNwdV90b19sZTE2KE5JTEZTX1NVUEVSX01BR0lDKSkgeworCQkJbWVtY3B5KHNicFswXSwgc2JwWzFdLCBuaWxmcy0+bnNfc2JzaXplKTsKKwkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIk5JTEZTOiBzdXBlcmJsb2NrIGJyb2tlIG9uIGRldiAlc1xuIiwKIAkJCSAgICAgICBzYmktPnNfc3VwZXItPnNfaWQpOwotCQkJcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gTlVMTDsKIAkJfQorCX0gZWxzZSBpZiAoc2JwWzFdICYmCisJCSAgIHNicFsxXS0+c19tYWdpYyAhPSBjcHVfdG9fbGUxNihOSUxGU19TVVBFUl9NQUdJQykpIHsKKwkJCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7CiAJfQotCWVyciA9IG5pbGZzX2NvdW50X2ZyZWVfYmxvY2tzKG5pbGZzLCAmbmZyZWVibG9ja3MpOwotCWlmICh1bmxpa2VseShlcnIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IGZhaWxlZCB0byBjb3VudCBmcmVlIGJsb2Nrc1xuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXNwaW5fbG9jaygmbmlsZnMtPm5zX2xhc3Rfc2VnbWVudF9sb2NrKTsKLQlzYnBbMF0tPnNfbGFzdF9zZXEgPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9zZXEpOwotCXNicFswXS0+c19sYXN0X3BzZWcgPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9wc2VnKTsKLQlzYnBbMF0tPnNfbGFzdF9jbm8gPSBjcHVfdG9fbGU2NChuaWxmcy0+bnNfbGFzdF9jbm8pOwotCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOwogCisJaWYgKGZsaXAgJiYgc2JwWzFdKQorCQluaWxmc19zd2FwX3N1cGVyX2Jsb2NrKG5pbGZzKTsKKworCXJldHVybiBzYnA7Cit9CisKK2ludCBuaWxmc19jb21taXRfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSwgaW50IGZsYWcpCit7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CisJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwID0gbmlsZnMtPm5zX3NicDsKKwl0aW1lX3QgdDsKKworCS8qIG5pbGZzLT5uc19zZW0gbXVzdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlci4gKi8KIAl0ID0gZ2V0X3NlY29uZHMoKTsKLQluaWxmcy0+bnNfc2J3dGltZVswXSA9IHQ7Ci0Jc2JwWzBdLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlNjQobmZyZWVibG9ja3MpOworCW5pbGZzLT5uc19zYnd0aW1lID0gdDsKIAlzYnBbMF0tPnNfd3RpbWUgPSBjcHVfdG9fbGU2NCh0KTsKIAlzYnBbMF0tPnNfc3VtID0gMDsKIAlzYnBbMF0tPnNfc3VtID0gY3B1X3RvX2xlMzIoY3JjMzJfbGUobmlsZnMtPm5zX2NyY19zZWVkLAogCQkJCQkgICAgICh1bnNpZ25lZCBjaGFyICopc2JwWzBdLAogCQkJCQkgICAgIG5pbGZzLT5uc19zYnNpemUpKTsKLQlpZiAoZHVwc2IgJiYgc2JwWzFdKSB7Ci0JCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7Ci0JCW5pbGZzLT5uc19zYnd0aW1lWzFdID0gdDsKKwlpZiAoZmxhZyA9PSBOSUxGU19TQl9DT01NSVRfQUxMICYmIHNicFsxXSkgeworCQlzYnBbMV0tPnNfd3RpbWUgPSBzYnBbMF0tPnNfd3RpbWU7CisJCXNicFsxXS0+c19zdW0gPSAwOworCQlzYnBbMV0tPnNfc3VtID0gY3B1X3RvX2xlMzIoY3JjMzJfbGUobmlsZnMtPm5zX2NyY19zZWVkLAorCQkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKilzYnBbMV0sCisJCQkJCSAgICBuaWxmcy0+bnNfc2JzaXplKSk7CiAJfQogCWNsZWFyX25pbGZzX3NiX2RpcnR5KG5pbGZzKTsKLQlyZXR1cm4gbmlsZnNfc3luY19zdXBlcihzYmksIGR1cHNiKTsKKwlyZXR1cm4gbmlsZnNfc3luY19zdXBlcihzYmksIGZsYWcpOworfQorCisvKioKKyAqIG5pbGZzX2NsZWFudXBfc3VwZXIoKSAtIHdyaXRlIGZpbGVzeXN0ZW0gc3RhdGUgZm9yIGNsZWFudXAKKyAqIEBzYmk6IG5pbGZzX3NiX2luZm8gdG8gYmUgdW5tb3VudGVkIG9yIGRlZ3JhZGVkIHRvIHJlYWQtb25seQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgc3RhdGUgZmxhZ3MgaW4gdGhlIG9uLWRpc2sgc3VwZXIgYmxvY2suCisgKiBUaGlzIHdpbGwgc2V0ICJjbGVhbiIgZmxhZyAoaS5lLiBOSUxGU19WQUxJRF9GUykgdW5sZXNzIHRoZQorICogZmlsZXN5c3RlbSB3YXMgbm90IGNsZWFuIHByZXZpb3VzbHkuCisgKi8KK2ludCBuaWxmc19jbGVhbnVwX3N1cGVyKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCit7CisJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwOworCWludCBmbGFnID0gTklMRlNfU0JfQ09NTUlUOworCWludCByZXQgPSAtRUlPOworCisJc2JwID0gbmlsZnNfcHJlcGFyZV9zdXBlcihzYmksIDApOworCWlmIChzYnApIHsKKwkJc2JwWzBdLT5zX3N0YXRlID0gY3B1X3RvX2xlMTYoc2JpLT5zX25pbGZzLT5uc19tb3VudF9zdGF0ZSk7CisJCW5pbGZzX3NldF9sb2dfY3Vyc29yKHNicFswXSwgc2JpLT5zX25pbGZzKTsKKwkJaWYgKHNicFsxXSAmJiBzYnBbMF0tPnNfbGFzdF9jbm8gPT0gc2JwWzFdLT5zX2xhc3RfY25vKSB7CisJCQkvKgorCQkJICogbWFrZSB0aGUgImNsZWFuIiBmbGFnIGFsc28gdG8gdGhlIG9wcG9zaXRlCisJCQkgKiBzdXBlciBibG9jayBpZiBib3RoIHN1cGVyIGJsb2NrcyBwb2ludCB0bworCQkJICogdGhlIHNhbWUgY2hlY2twb2ludC4KKwkJCSAqLworCQkJc2JwWzFdLT5zX3N0YXRlID0gc2JwWzBdLT5zX3N0YXRlOworCQkJZmxhZyA9IE5JTEZTX1NCX0NPTU1JVF9BTEw7CisJCX0KKwkJcmV0ID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgZmxhZyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMjg5LDggKzM0OCw3IEBACiAKIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JCW5pbGZzLT5uc19zYnBbMF0tPnNfc3RhdGUgPSBjcHVfdG9fbGUxNihuaWxmcy0+bnNfbW91bnRfc3RhdGUpOwotCQluaWxmc19jb21taXRfc3VwZXIoc2JpLCAxKTsKKwkJbmlsZnNfY2xlYW51cF9zdXBlcihzYmkpOwogCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJfQogCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zdXBlcl9zZW0pOwpAQCAtMzExLDYgKzM2OSw3IEBACiB7CiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKKwlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnA7CiAJaW50IGVyciA9IDA7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHN1cGVyIGJsb2NrIHNob3VsZCBiZSB3cml0dGVuIGJhY2sgKi8KQEAgLTMxOCw4ICszNzcsMTMgQEAKIAkJZXJyID0gbmlsZnNfY29uc3RydWN0X3NlZ21lbnQoc2IpOwogCiAJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JaWYgKG5pbGZzX3NiX2RpcnR5KG5pbGZzKSkKLQkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7CisJaWYgKG5pbGZzX3NiX2RpcnR5KG5pbGZzKSkgeworCQlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiaSwgbmlsZnNfc2Jfd2lsbF9mbGlwKG5pbGZzKSk7CisJCWlmIChsaWtlbHkoc2JwKSkgeworCQkJbmlsZnNfc2V0X2xvZ19jdXJzb3Ioc2JwWzBdLCBuaWxmcyk7CisJCQluaWxmc19jb21taXRfc3VwZXIoc2JpLCBOSUxGU19TQl9DT01NSVQpOworCQl9CisJfQogCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAogCXJldHVybiBlcnI7CkBAIC00NDIsMjAgKzUwNiwyMCBAQAogCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7CiAKIAlpZiAoIW5pbGZzX3Rlc3Rfb3B0KHNiaSwgQkFSUklFUikpCi0JCXNlcV9wcmludGYoc2VxLCAiLG5vYmFycmllciIpOworCQlzZXFfcHV0cyhzZXEsICIsbm9iYXJyaWVyIik7CiAJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgU05BUFNIT1QpKQogCQlzZXFfcHJpbnRmKHNlcSwgIixjcD0lbGx1IiwKIAkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KXNiaS0+c19zbmFwc2hvdF9jbm8pOwogCWlmIChuaWxmc190ZXN0X29wdChzYmksIEVSUk9SU19QQU5JQykpCi0JCXNlcV9wcmludGYoc2VxLCAiLGVycm9ycz1wYW5pYyIpOworCQlzZXFfcHV0cyhzZXEsICIsZXJyb3JzPXBhbmljIik7CiAJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgRVJST1JTX0NPTlQpKQotCQlzZXFfcHJpbnRmKHNlcSwgIixlcnJvcnM9Y29udGludWUiKTsKKwkJc2VxX3B1dHMoc2VxLCAiLGVycm9ycz1jb250aW51ZSIpOwogCWlmIChuaWxmc190ZXN0X29wdChzYmksIFNUUklDVF9PUkRFUikpCi0JCXNlcV9wcmludGYoc2VxLCAiLG9yZGVyPXN0cmljdCIpOworCQlzZXFfcHV0cyhzZXEsICIsb3JkZXI9c3RyaWN0Iik7CiAJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgTk9SRUNPVkVSWSkpCi0JCXNlcV9wcmludGYoc2VxLCAiLG5vcmVjb3ZlcnkiKTsKKwkJc2VxX3B1dHMoc2VxLCAiLG5vcmVjb3ZlcnkiKTsKIAlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBESVNDQVJEKSkKLQkJc2VxX3ByaW50ZihzZXEsICIsZGlzY2FyZCIpOworCQlzZXFfcHV0cyhzZXEsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjcsNyArNTMxLDcgQEAKIAkvKiAud3JpdGVfaW5vZGUgICAgPSBuaWxmc193cml0ZV9pbm9kZSwgKi8KIAkvKiAucHV0X2lub2RlICAgICAgPSBuaWxmc19wdXRfaW5vZGUsICovCiAJLyogLmRyb3BfaW5vZGUJICA9IG5pbGZzX2Ryb3BfaW5vZGUsICovCi0JLmRlbGV0ZV9pbm9kZSAgID0gbmlsZnNfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZSAgICA9IG5pbGZzX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIgICAgICA9IG5pbGZzX3B1dF9zdXBlciwKIAkvKiAud3JpdGVfc3VwZXIgICAgPSBuaWxmc193cml0ZV9zdXBlciwgKi8KIAkuc3luY19mcyAgICAgICAgPSBuaWxmc19zeW5jX2ZzLApAQCAtNDc1LDcgKzUzOSw2IEBACiAJLyogLnVubG9ja2ZzICovCiAJLnN0YXRmcyAgICAgICAgID0gbmlsZnNfc3RhdGZzLAogCS5yZW1vdW50X2ZzICAgICA9IG5pbGZzX3JlbW91bnQsCi0JLmNsZWFyX2lub2RlICAgID0gbmlsZnNfY2xlYXJfaW5vZGUsCiAJLyogLnVtb3VudF9iZWdpbiAqLwogCS5zaG93X29wdGlvbnMgPSBuaWxmc19zaG93X29wdGlvbnMKIH07CkBAIC01MjQsMjMgKzU4NywyNSBAQAogCiBlbnVtIHsKIAlPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcGFuaWMsIE9wdF9lcnJfcm8sCi0JT3B0X25vYmFycmllciwgT3B0X3NuYXBzaG90LCBPcHRfb3JkZXIsIE9wdF9ub3JlY292ZXJ5LAotCU9wdF9kaXNjYXJkLCBPcHRfZXJyLAorCU9wdF9iYXJyaWVyLCBPcHRfbm9iYXJyaWVyLCBPcHRfc25hcHNob3QsIE9wdF9vcmRlciwgT3B0X25vcmVjb3ZlcnksCisJT3B0X2Rpc2NhcmQsIE9wdF9ub2Rpc2NhcmQsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7CiAJe09wdF9lcnJfY29udCwgImVycm9ycz1jb250aW51ZSJ9LAogCXtPcHRfZXJyX3BhbmljLCAiZXJyb3JzPXBhbmljIn0sCiAJe09wdF9lcnJfcm8sICJlcnJvcnM9cmVtb3VudC1ybyJ9LAorCXtPcHRfYmFycmllciwgImJhcnJpZXIifSwKIAl7T3B0X25vYmFycmllciwgIm5vYmFycmllciJ9LAogCXtPcHRfc25hcHNob3QsICJjcD0ldSJ9LAogCXtPcHRfb3JkZXIsICJvcmRlcj0lcyJ9LAogCXtPcHRfbm9yZWNvdmVyeSwgIm5vcmVjb3ZlcnkifSwKIAl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCisJe09wdF9ub2Rpc2NhcmQsICJub2Rpc2NhcmQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKLXN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIGludCBwYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpc19yZW1vdW50KQogewogCXN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkgPSBOSUxGU19TQihzYik7CiAJY2hhciAqcDsKQEAgLTU1Nyw2ICs2MjIsOSBAQAogCiAJCXRva2VuID0gbWF0Y2hfdG9rZW4ocCwgdG9rZW5zLCBhcmdzKTsKIAkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9iYXJyaWVyOgorCQkJbmlsZnNfc2V0X29wdChzYmksIEJBUlJJRVIpOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vYmFycmllcjoKIAkJCW5pbGZzX2NsZWFyX29wdChzYmksIEJBUlJJRVIpOwogCQkJYnJlYWs7CkBAIC01ODIsOCArNjUwLDI2IEBACiAJCWNhc2UgT3B0X3NuYXBzaG90OgogCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikgfHwgb3B0aW9uIDw9IDApCiAJCQkJcmV0dXJuIDA7Ci0JCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCisJCQlpZiAoaXNfcmVtb3VudCkgeworCQkJCWlmICghbmlsZnNfdGVzdF9vcHQoc2JpLCBTTkFQU0hPVCkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiTklMRlM6IGNhbm5vdCBjaGFuZ2UgcmVndWxhciAiCisJCQkJCSAgICAgICAibW91bnQgdG8gc25hcHNob3QuXG4iKTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfSBlbHNlIGlmIChvcHRpb24gIT0gc2JpLT5zX3NuYXBzaG90X2NubykgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICJOSUxGUzogY2Fubm90IHJlbW91bnQgdG8gYSAiCisJCQkJCSAgICAgICAiZGlmZmVyZW50IHNuYXBzaG90LlxuIik7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IGNhbm5vdCBtb3VudCBzbmFwc2hvdCAiCisJCQkJICAgICAgICJyZWFkL3dyaXRlLiAgQSByZWFkLW9ubHkgb3B0aW9uIGlzICIKKwkJCQkgICAgICAgInJlcXVpcmVkLlxuIik7CiAJCQkJcmV0dXJuIDA7CisJCQl9CiAJCQlzYmktPnNfc25hcHNob3RfY25vID0gb3B0aW9uOwogCQkJbmlsZnNfc2V0X29wdChzYmksIFNOQVBTSE9UKTsKIAkJCWJyZWFrOwpAQCAtNTkzLDYgKzY3OSw5IEBACiAJCWNhc2UgT3B0X2Rpc2NhcmQ6CiAJCQluaWxmc19zZXRfb3B0KHNiaSwgRElTQ0FSRCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9kaXNjYXJkOgorCQkJbmlsZnNfY2xlYXJfb3B0KHNiaSwgRElTQ0FSRCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJOSUxGUzogVW5yZWNvZ25pemVkIG1vdW50IG9wdGlvbiBcIiVzXCJcbiIsIHApOwpAQCAtNjEzLDExICs3MDIsMTggQEAKIHN0YXRpYyBpbnQgbmlsZnNfc2V0dXBfc3VwZXIoc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSkKIHsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKLQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicCA9IG5pbGZzLT5uc19zYnBbMF07Ci0JaW50IG1heF9tbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYnAtPnNfbWF4X21udF9jb3VudCk7Ci0JaW50IG1udF9jb3VudCA9IGxlMTZfdG9fY3B1KHNicC0+c19tbnRfY291bnQpOworCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicDsKKwlpbnQgbWF4X21udF9jb3VudDsKKwlpbnQgbW50X2NvdW50OwogCi0JLyogbmlsZnMtPnNlbSBtdXN0IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyLiAqLworCS8qIG5pbGZzLT5uc19zZW0gbXVzdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlci4gKi8KKwlzYnAgPSBuaWxmc19wcmVwYXJlX3N1cGVyKHNiaSwgMCk7CisJaWYgKCFzYnApCisJCXJldHVybiAtRUlPOworCisJbWF4X21udF9jb3VudCA9IGxlMTZfdG9fY3B1KHNicFswXS0+c19tYXhfbW50X2NvdW50KTsKKwltbnRfY291bnQgPSBsZTE2X3RvX2NwdShzYnBbMF0tPnNfbW50X2NvdW50KTsKKwogCWlmIChuaWxmcy0+bnNfbW91bnRfc3RhdGUgJiBOSUxGU19FUlJPUl9GUykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiTklMRlMgd2FybmluZzogbW91bnRpbmcgZnMgd2l0aCBlcnJvcnNcbiIpOwpAQCAtNjI4LDEyICs3MjQsMTUgQEAKICNlbmRpZgogCX0KIAlpZiAoIW1heF9tbnRfY291bnQpCi0JCXNicC0+c19tYXhfbW50X2NvdW50ID0gY3B1X3RvX2xlMTYoTklMRlNfREZMX01BWF9NTlRfQ09VTlQpOworCQlzYnBbMF0tPnNfbWF4X21udF9jb3VudCA9IGNwdV90b19sZTE2KE5JTEZTX0RGTF9NQVhfTU5UX0NPVU5UKTsKIAotCXNicC0+c19tbnRfY291bnQgPSBjcHVfdG9fbGUxNihtbnRfY291bnQgKyAxKTsKLQlzYnAtPnNfc3RhdGUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShzYnAtPnNfc3RhdGUpICYgfk5JTEZTX1ZBTElEX0ZTKTsKLQlzYnAtPnNfbXRpbWUgPSBjcHVfdG9fbGU2NChnZXRfc2Vjb25kcygpKTsKLQlyZXR1cm4gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7CisJc2JwWzBdLT5zX21udF9jb3VudCA9IGNwdV90b19sZTE2KG1udF9jb3VudCArIDEpOworCXNicFswXS0+c19zdGF0ZSA9CisJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KHNicFswXS0+c19zdGF0ZSkgJiB+TklMRlNfVkFMSURfRlMpOworCXNicFswXS0+c19tdGltZSA9IGNwdV90b19sZTY0KGdldF9zZWNvbmRzKCkpOworCS8qIHN5bmNocm9uaXplIHNicFsxXSB3aXRoIHNicFswXSAqLworCW1lbWNweShzYnBbMV0sIHNicFswXSwgbmlsZnMtPm5zX3Nic2l6ZSk7CisJcmV0dXJuIG5pbGZzX2NvbW1pdF9zdXBlcihzYmksIE5JTEZTX1NCX0NPTU1JVF9BTEwpOwogfQogCiBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKm5pbGZzX3JlYWRfc3VwZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKQEAgLTY3MCw3ICs3NjksMzEgQEAKIAlzYmktPnNfaW50ZXJ2YWwgPSBsZTMyX3RvX2NwdShzYnAtPnNfY19pbnRlcnZhbCk7CiAJc2JpLT5zX3dhdGVybWFyayA9IGxlMzJfdG9fY3B1KHNicC0+c19jX2Jsb2NrX21heCk7CiAKLQlyZXR1cm4gIXBhcnNlX29wdGlvbnMoZGF0YSwgc2IpID8gLUVJTlZBTCA6IDAgOworCXJldHVybiAhcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYiwgMCkgPyAtRUlOVkFMIDogMCA7Cit9CisKK2ludCBuaWxmc19jaGVja19mZWF0dXJlX2NvbXBhdGliaWxpdHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicCkKK3sKKwlfX3U2NCBmZWF0dXJlczsKKworCWZlYXR1cmVzID0gbGU2NF90b19jcHUoc2JwLT5zX2ZlYXR1cmVfaW5jb21wYXQpICYKKwkJfk5JTEZTX0ZFQVRVUkVfSU5DT01QQVRfU1VQUDsKKwlpZiAoZmVhdHVyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogY291bGRuJ3QgbW91bnQgYmVjYXVzZSBvZiB1bnN1cHBvcnRlZCAiCisJCSAgICAgICAib3B0aW9uYWwgZmVhdHVyZXMgKCVsbHgpXG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmZWF0dXJlcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmZWF0dXJlcyA9IGxlNjRfdG9fY3B1KHNicC0+c19mZWF0dXJlX2NvbXBhdF9ybykgJgorCQl+TklMRlNfRkVBVFVSRV9DT01QQVRfUk9fU1VQUDsKKwlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkgJiYgZmVhdHVyZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogY291bGRuJ3QgbW91bnQgUkRXUiBiZWNhdXNlIG9mICIKKwkJICAgICAgICJ1bnN1cHBvcnRlZCBvcHRpb25hbCBmZWF0dXJlcyAoJWxseClcbiIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZlYXR1cmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTgxOSw3ICs5NDIsNiBAQAogc3RhdGljIGludCBuaWxmc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCiB7CiAJc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IE5JTEZTX1NCKHNiKTsKLQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKnNicDsKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAl1bnNpZ25lZCBsb25nIG9sZF9zYl9mbGFnczsKIAlzdHJ1Y3QgbmlsZnNfbW91bnRfb3B0aW9ucyBvbGRfb3B0czsKQEAgLTgzMywzMiArOTU1LDE3IEBACiAJb2xkX29wdHMuc25hcHNob3RfY25vID0gc2JpLT5zX3NuYXBzaG90X2NubzsKIAl3YXNfc25hcHNob3QgPSBuaWxmc190ZXN0X29wdChzYmksIFNOQVBTSE9UKTsKIAotCWlmICghcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYikpIHsKKwlpZiAoIXBhcnNlX29wdGlvbnMoZGF0YSwgc2IsIDEpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gcmVzdG9yZV9vcHRzOwogCX0KIAlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCk7CiAKIAllcnIgPSAtRUlOVkFMOwotCWlmICh3YXNfc25hcHNob3QpIHsKLQkJaWYgKCEoKmZsYWdzICYgTVNfUkRPTkxZKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUyAoZGV2aWNlICVzKTogY2Fubm90IHJlbW91bnQgIgotCQkJICAgICAgICJzbmFwc2hvdCByZWFkL3dyaXRlLlxuIiwKLQkJCSAgICAgICBzYi0+c19pZCk7Ci0JCQlnb3RvIHJlc3RvcmVfb3B0czsKLQkJfSBlbHNlIGlmIChzYmktPnNfc25hcHNob3RfY25vICE9IG9sZF9vcHRzLnNuYXBzaG90X2NubykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUyAoZGV2aWNlICVzKTogY2Fubm90ICIKLQkJCSAgICAgICAicmVtb3VudCB0byBhIGRpZmZlcmVudCBzbmFwc2hvdC5cbiIsCi0JCQkgICAgICAgc2ItPnNfaWQpOwotCQkJZ290byByZXN0b3JlX29wdHM7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBTTkFQU0hPVCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiTklMRlMgKGRldmljZSAlcyk6IGNhbm5vdCBjaGFuZ2UgIgotCQkJICAgICAgICJhIHJlZ3VsYXIgbW91bnQgdG8gYSBzbmFwc2hvdC5cbiIsCi0JCQkgICAgICAgc2ItPnNfaWQpOwotCQkJZ290byByZXN0b3JlX29wdHM7Ci0JCX0KKwlpZiAod2FzX3NuYXBzaG90ICYmICEoKmZsYWdzICYgTVNfUkRPTkxZKSkgeworCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTIChkZXZpY2UgJXMpOiBjYW5ub3QgcmVtb3VudCBzbmFwc2hvdCAiCisJCSAgICAgICAicmVhZC93cml0ZS5cbiIsIHNiLT5zX2lkKTsKKwkJZ290byByZXN0b3JlX29wdHM7CiAJfQogCiAJaWYgKCFuaWxmc192YWxpZF9mcyhuaWxmcykpIHsKQEAgLTg4MCwxOSArOTg3LDI5IEBACiAJCSAqIHRoZSBSRE9OTFkgZmxhZyBhbmQgdGhlbiBtYXJrIHRoZSBwYXJ0aXRpb24gYXMgdmFsaWQgYWdhaW4uCiAJCSAqLwogCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQkJc2JwID0gbmlsZnMtPm5zX3NicFswXTsKLQkJaWYgKCEoc2JwLT5zX3N0YXRlICYgbGUxNl90b19jcHUoTklMRlNfVkFMSURfRlMpKSAmJgotCQkgICAgKG5pbGZzLT5uc19tb3VudF9zdGF0ZSAmIE5JTEZTX1ZBTElEX0ZTKSkKLQkJCXNicC0+c19zdGF0ZSA9IGNwdV90b19sZTE2KG5pbGZzLT5uc19tb3VudF9zdGF0ZSk7Ci0JCXNicC0+c19tdGltZSA9IGNwdV90b19sZTY0KGdldF9zZWNvbmRzKCkpOwotCQluaWxmc19jb21taXRfc3VwZXIoc2JpLCAxKTsKKwkJbmlsZnNfY2xlYW51cF9zdXBlcihzYmkpOwogCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7CiAJfSBlbHNlIHsKKwkJX191NjQgZmVhdHVyZXM7CisKIAkJLyoKIAkJICogTW91bnRpbmcgYSBSRE9OTFkgcGFydGl0aW9uIHJlYWQtd3JpdGUsIHNvIHJlcmVhZCBhbmQKIAkJICogc3RvcmUgdGhlIGN1cnJlbnQgdmFsaWQgZmxhZy4gIChJdCBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQKIAkJICogYnkgZnNjayBzaW5jZSB3ZSBvcmlnaW5hbGx5IG1vdW50ZWQgdGhlIHBhcnRpdGlvbi4pCiAJCSAqLworCQlkb3duX3JlYWQoJm5pbGZzLT5uc19zZW0pOworCQlmZWF0dXJlcyA9IGxlNjRfdG9fY3B1KG5pbGZzLT5uc19zYnBbMF0tPnNfZmVhdHVyZV9jb21wYXRfcm8pICYKKwkJCX5OSUxGU19GRUFUVVJFX0NPTVBBVF9ST19TVVBQOworCQl1cF9yZWFkKCZuaWxmcy0+bnNfc2VtKTsKKwkJaWYgKGZlYXR1cmVzKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJOSUxGUyAoZGV2aWNlICVzKTogY291bGRuJ3QgIgorCQkJICAgICAgICJyZW1vdW50IFJEV1IgYmVjYXVzZSBvZiB1bnN1cHBvcnRlZCBvcHRpb25hbCAiCisJCQkgICAgICAgImZlYXR1cmVzICglbGx4KVxuIiwKKwkJCSAgICAgICBzYi0+c19pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylmZWF0dXJlcyk7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIHJlc3RvcmVfb3B0czsKKwkJfQorCiAJCXNiLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CiAKIAkJZXJyID0gbmlsZnNfYXR0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpKTsKQEAgLTExMTksNyArMTIzNiw3IEBACiAJaW5pdF9yd3NlbSgmaWktPnhhdHRyX3NlbSk7CiAjZW5kaWYKIAluaWxmc19idG5vZGVfY2FjaGVfaW5pdF9vbmNlKCZpaS0+aV9idG5vZGVfY2FjaGUpOwotCWlpLT5pX2JtYXAgPSAoc3RydWN0IG5pbGZzX2JtYXAgKikmaWktPmlfYm1hcF91bmlvbjsKKwlpaS0+aV9ibWFwID0gJmlpLT5pX2JtYXBfZGF0YTsKIAlpbm9kZV9pbml0X29uY2UoJmlpLT52ZnNfaW5vZGUpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmMgYi9mcy9uaWxmczIvdGhlX25pbGZzLmMKaW5kZXggOGMxMDk3My4uMzdkZTFmMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuYwpAQCAtMzgsNiArMzgsOCBAQAogc3RhdGljIExJU1RfSEVBRChuaWxmc19vYmplY3RzKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmlsZnNfbG9jayk7CiAKK3N0YXRpYyBpbnQgbmlsZnNfdmFsaWRfc2Ioc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICpzYnApOworCiB2b2lkIG5pbGZzX3NldF9sYXN0X3NlZ21lbnQoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsCiAJCQkgICAgc2VjdG9yX3Qgc3RhcnRfYmxvY2tuciwgdTY0IHNlcSwgX191NjQgY25vKQogewpAQCAtNDUsNiArNDcsMTYgQEAKIAluaWxmcy0+bnNfbGFzdF9wc2VnID0gc3RhcnRfYmxvY2tucjsKIAluaWxmcy0+bnNfbGFzdF9zZXEgPSBzZXE7CiAJbmlsZnMtPm5zX2xhc3RfY25vID0gY25vOworCisJaWYgKCFuaWxmc19zYl9kaXJ0eShuaWxmcykpIHsKKwkJaWYgKG5pbGZzLT5uc19wcmV2X3NlcSA9PSBuaWxmcy0+bnNfbGFzdF9zZXEpCisJCQlnb3RvIHN0YXlfY3Vyc29yOworCisJCXNldF9uaWxmc19zYl9kaXJ0eShuaWxmcyk7CisJfQorCW5pbGZzLT5uc19wcmV2X3NlcSA9IG5pbGZzLT5uc19sYXN0X3NlcTsKKworIHN0YXlfY3Vyc29yOgogCXNwaW5fdW5sb2NrKCZuaWxmcy0+bnNfbGFzdF9zZWdtZW50X2xvY2spOwogfQogCkBAIC0xNTksOCArMTcxLDcgQEAKIAlrZnJlZShuaWxmcyk7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfbG9hZF9zdXBlcl9yb290KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAotCQkJCSBzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpLCBzZWN0b3JfdCBzcl9ibG9jaykKK3N0YXRpYyBpbnQgbmlsZnNfbG9hZF9zdXBlcl9yb290KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzZWN0b3JfdCBzcl9ibG9jaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3NyOwogCXN0cnVjdCBuaWxmc19zdXBlcl9yb290ICpyYXdfc3I7CkBAIC0xNjksNyArMTgwLDcgQEAKIAl1bnNpZ25lZCBpbm9kZV9zaXplOwogCWludCBlcnI7CiAKLQllcnIgPSBuaWxmc19yZWFkX3N1cGVyX3Jvb3RfYmxvY2soc2JpLT5zX3N1cGVyLCBzcl9ibG9jaywgJmJoX3NyLCAxKTsKKwllcnIgPSBuaWxmc19yZWFkX3N1cGVyX3Jvb3RfYmxvY2sobmlsZnMsIHNyX2Jsb2NrLCAmYmhfc3IsIDEpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yNDgsNiArMjU5LDM3IEBACiB9CiAKIC8qKgorICogbmlsZnNfc3RvcmVfbG9nX2N1cnNvciAtIGxvYWQgbG9nIGN1cnNvciBmcm9tIGEgc3VwZXIgYmxvY2sKKyAqIEBuaWxmczogbmlsZnMgb2JqZWN0CisgKiBAc2JwOiBidWZmZXIgc3RvcmluZyBzdXBlciBibG9jayB0byBiZSByZWFkCisgKgorICogbmlsZnNfc3RvcmVfbG9nX2N1cnNvcigpIHJlYWRzIHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBsb2cKKyAqIGNvbnRhaW5pbmcgYSBzdXBlciByb290IGZyb20gYSBnaXZlbiBzdXBlciBibG9jaywgYW5kIGluaXRpYWxpemVzCisgKiByZWxldmFudCBpbmZvcm1hdGlvbiBvbiB0aGUgbmlsZnMgb2JqZWN0IHByZXBhcmF0b3J5IGZvciBsb2cKKyAqIHNjYW5uaW5nIGFuZCByZWNvdmVyeS4KKyAqLworc3RhdGljIGludCBuaWxmc19zdG9yZV9sb2dfY3Vyc29yKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAorCQkJCSAgc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICpzYnApCit7CisJaW50IHJldCA9IDA7CisKKwluaWxmcy0+bnNfbGFzdF9wc2VnID0gbGU2NF90b19jcHUoc2JwLT5zX2xhc3RfcHNlZyk7CisJbmlsZnMtPm5zX2xhc3RfY25vID0gbGU2NF90b19jcHUoc2JwLT5zX2xhc3RfY25vKTsKKwluaWxmcy0+bnNfbGFzdF9zZXEgPSBsZTY0X3RvX2NwdShzYnAtPnNfbGFzdF9zZXEpOworCisJbmlsZnMtPm5zX3ByZXZfc2VxID0gbmlsZnMtPm5zX2xhc3Rfc2VxOworCW5pbGZzLT5uc19zZWdfc2VxID0gbmlsZnMtPm5zX2xhc3Rfc2VxOworCW5pbGZzLT5uc19zZWdudW0gPQorCQluaWxmc19nZXRfc2VnbnVtX29mX2Jsb2NrKG5pbGZzLCBuaWxmcy0+bnNfbGFzdF9wc2VnKTsKKwluaWxmcy0+bnNfY25vID0gbmlsZnMtPm5zX2xhc3RfY25vICsgMTsKKwlpZiAobmlsZnMtPm5zX3NlZ251bSA+PSBuaWxmcy0+bnNfbnNlZ21lbnRzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTklMRlMgaW52YWxpZCBsYXN0IHNlZ21lbnQgbnVtYmVyLlxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogbG9hZF9uaWxmcyAtIGxvYWQgYW5kIHJlY292ZXIgdGhlIG5pbGZzCiAgKiBAbmlsZnM6IHRoZV9uaWxmcyBzdHJ1Y3R1cmUgdG8gYmUgcmVsZWFzZWQKICAqIEBzYmk6IG5pbGZzX3NiX2luZm8gdXNlZCB0byByZWNvdmVyIHBhc3Qgc2VnbWVudApAQCAtMjg1LDEzICszMjcsNTUgQEAKIAogCW5pbGZzX2luaXRfcmVjb3ZlcnlfaW5mbygmcmkpOwogCi0JZXJyID0gbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3QobmlsZnMsIHNiaSwgJnJpKTsKKwllcnIgPSBuaWxmc19zZWFyY2hfc3VwZXJfcm9vdChuaWxmcywgJnJpKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewotCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBlcnJvciBzZWFyY2hpbmcgc3VwZXIgcm9vdC5cbiIpOwotCQlnb3RvIGZhaWxlZDsKKwkJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwID0gbmlsZnMtPm5zX3NicDsKKwkJaW50IGJsb2Nrc2l6ZTsKKworCQlpZiAoZXJyICE9IC1FSU5WQUwpCisJCQlnb3RvIHNjYW5fZXJyb3I7CisKKwkJaWYgKCFuaWxmc192YWxpZF9zYihzYnBbMV0pKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIk5JTEZTIHdhcm5pbmc6IHVuYWJsZSB0byBmYWxsIGJhY2sgdG8gc3BhcmUiCisJCQkgICAgICAgInN1cGVyIGJsb2NrXG4iKTsKKwkJCWdvdG8gc2Nhbl9lcnJvcjsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiTklMRlM6IHRyeSByb2xsYmFjayBmcm9tIGFuIGVhcmxpZXIgcG9zaXRpb25cbiIpOworCisJCS8qCisJCSAqIHJlc3RvcmUgc3VwZXIgYmxvY2sgd2l0aCBpdHMgc3BhcmUgYW5kIHJlY29uZmlndXJlCisJCSAqIHJlbGV2YW50IHN0YXRlcyBvZiB0aGUgbmlsZnMgb2JqZWN0LgorCQkgKi8KKwkJbWVtY3B5KHNicFswXSwgc2JwWzFdLCBuaWxmcy0+bnNfc2JzaXplKTsKKwkJbmlsZnMtPm5zX2NyY19zZWVkID0gbGUzMl90b19jcHUoc2JwWzBdLT5zX2NyY19zZWVkKTsKKwkJbmlsZnMtPm5zX3Nid3RpbWUgPSBsZTY0X3RvX2NwdShzYnBbMF0tPnNfd3RpbWUpOworCisJCS8qIHZlcmlmeSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHR3byBzdXBlciBibG9ja3MgKi8KKwkJYmxvY2tzaXplID0gQkxPQ0tfU0laRSA8PCBsZTMyX3RvX2NwdShzYnBbMF0tPnNfbG9nX2Jsb2NrX3NpemUpOworCQlpZiAoYmxvY2tzaXplICE9IG5pbGZzLT5uc19ibG9ja3NpemUpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiTklMRlMgd2FybmluZzogYmxvY2tzaXplIGRpZmZlcnMgYmV0d2VlbiAiCisJCQkgICAgICAgInR3byBzdXBlciBibG9ja3MgKCVkICE9ICVkKVxuIiwKKwkJCSAgICAgICBibG9ja3NpemUsIG5pbGZzLT5uc19ibG9ja3NpemUpOworCQkJZ290byBzY2FuX2Vycm9yOworCQl9CisKKwkJZXJyID0gbmlsZnNfc3RvcmVfbG9nX2N1cnNvcihuaWxmcywgc2JwWzBdKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gc2Nhbl9lcnJvcjsKKworCQkvKiBkcm9wIGNsZWFuIGZsYWcgdG8gYWxsb3cgcm9sbC1mb3J3YXJkIGFuZCByZWNvdmVyeSAqLworCQluaWxmcy0+bnNfbW91bnRfc3RhdGUgJj0gfk5JTEZTX1ZBTElEX0ZTOworCQl2YWxpZF9mcyA9IDA7CisKKwkJZXJyID0gbmlsZnNfc2VhcmNoX3N1cGVyX3Jvb3QobmlsZnMsICZyaSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHNjYW5fZXJyb3I7CiAJfQogCi0JZXJyID0gbmlsZnNfbG9hZF9zdXBlcl9yb290KG5pbGZzLCBzYmksIHJpLnJpX3N1cGVyX3Jvb3QpOworCWVyciA9IG5pbGZzX2xvYWRfc3VwZXJfcm9vdChuaWxmcywgcmkucmlfc3VwZXJfcm9vdCk7CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJOSUxGUzogZXJyb3IgbG9hZGluZyBzdXBlciByb290LlxuIik7CiAJCWdvdG8gZmFpbGVkOwpAQCAtMzAxLDExICszODUsMjMgQEAKIAkJZ290byBza2lwX3JlY292ZXJ5OwogCiAJaWYgKHNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKKwkJX191NjQgZmVhdHVyZXM7CisKIAkJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgTk9SRUNPVkVSWSkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIk5JTEZTOiBub3JlY292ZXJ5IG9wdGlvbiBzcGVjaWZpZWQuICIKIAkJCSAgICAgICAic2tpcHBpbmcgcm9sbC1mb3J3YXJkIHJlY292ZXJ5XG4iKTsKIAkJCWdvdG8gc2tpcF9yZWNvdmVyeTsKIAkJfQorCQlmZWF0dXJlcyA9IGxlNjRfdG9fY3B1KG5pbGZzLT5uc19zYnBbMF0tPnNfZmVhdHVyZV9jb21wYXRfcm8pICYKKwkJCX5OSUxGU19GRUFUVVJFX0NPTVBBVF9ST19TVVBQOworCQlpZiAoZmVhdHVyZXMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IGNvdWxkbid0IHByb2NlZWQgd2l0aCAiCisJCQkgICAgICAgInJlY292ZXJ5IGJlY2F1c2Ugb2YgdW5zdXBwb3J0ZWQgb3B0aW9uYWwgIgorCQkJICAgICAgICJmZWF0dXJlcyAoJWxseClcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmZWF0dXJlcyk7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIGZhaWxlZF91bmxvYWQ7CisJCX0KIAkJaWYgKHJlYWxseV9yZWFkX29ubHkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IHdyaXRlIGFjY2VzcyAiCiAJCQkgICAgICAgInVuYXZhaWxhYmxlLCBjYW5ub3QgcHJvY2VlZC5cbiIpOwpAQCAtMzIwLDE0ICs0MTYsMTMgQEAKIAkJZ290byBmYWlsZWRfdW5sb2FkOwogCX0KIAotCWVyciA9IG5pbGZzX3JlY292ZXJfbG9naWNhbF9zZWdtZW50cyhuaWxmcywgc2JpLCAmcmkpOworCWVyciA9IG5pbGZzX3NhbHZhZ2Vfb3JwaGFuX2xvZ3MobmlsZnMsIHNiaSwgJnJpKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZF91bmxvYWQ7CiAKIAlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKLQluaWxmcy0+bnNfbW91bnRfc3RhdGUgfD0gTklMRlNfVkFMSURfRlM7Ci0JbmlsZnMtPm5zX3NicFswXS0+c19zdGF0ZSA9IGNwdV90b19sZTE2KG5pbGZzLT5uc19tb3VudF9zdGF0ZSk7Ci0JZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7CisJbmlsZnMtPm5zX21vdW50X3N0YXRlIHw9IE5JTEZTX1ZBTElEX0ZTOyAvKiBzZXQgImNsZWFuIiBmbGFnICovCisJZXJyID0gbmlsZnNfY2xlYW51cF9zdXBlcihzYmkpOwogCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAogCWlmIChlcnIpIHsKQEAgLTM0Myw2ICs0MzgsMTAgQEAKIAlzYmktPnNfc3VwZXItPnNfZmxhZ3MgPSBzX2ZsYWdzOwogCXJldHVybiAwOwogCisgc2Nhbl9lcnJvcjoKKwlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBlcnJvciBzZWFyY2hpbmcgc3VwZXIgcm9vdC5cbiIpOworCWdvdG8gZmFpbGVkOworCiAgZmFpbGVkX3VubG9hZDoKIAluaWxmc19tZHRfZGVzdHJveShuaWxmcy0+bnNfY3BmaWxlKTsKIAluaWxmc19tZHRfZGVzdHJveShuaWxmcy0+bnNfc3VmaWxlKTsKQEAgLTUxNSw4ICs2MTQsOCBAQAogCQluaWxmc19zd2FwX3N1cGVyX2Jsb2NrKG5pbGZzKTsKIAl9CiAKLQluaWxmcy0+bnNfc2J3dGltZVswXSA9IGxlNjRfdG9fY3B1KHNicFswXS0+c193dGltZSk7Ci0JbmlsZnMtPm5zX3Nid3RpbWVbMV0gPSB2YWxpZFshc3dwXSA/IGxlNjRfdG9fY3B1KHNicFsxXS0+c193dGltZSkgOiAwOworCW5pbGZzLT5uc19zYndjb3VudCA9IDA7CisJbmlsZnMtPm5zX3Nid3RpbWUgPSBsZTY0X3RvX2NwdShzYnBbMF0tPnNfd3RpbWUpOwogCW5pbGZzLT5uc19wcm90X3NlcSA9IGxlNjRfdG9fY3B1KHNicFt2YWxpZFsxXSAmICFzd3BdLT5zX2xhc3Rfc2VxKTsKIAkqc2JwcCA9IHNicFswXTsKIAlyZXR1cm4gMDsKQEAgLTU1Nyw2ICs2NTYsMTAgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCisJCWVyciA9IG5pbGZzX2NoZWNrX2ZlYXR1cmVfY29tcGF0aWJpbGl0eShzYiwgc2JwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCiAJCWJsb2Nrc2l6ZSA9IEJMT0NLX1NJWkUgPDwgbGUzMl90b19jcHUoc2JwLT5zX2xvZ19ibG9ja19zaXplKTsKIAkJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAhPSBibG9ja3NpemUgJiYKIAkJICAgICFzYl9zZXRfYmxvY2tzaXplKHNiLCBibG9ja3NpemUpKSB7CkBAIC01NjgsNyArNjcxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JYmxvY2tzaXplID0gc2JfbWluX2Jsb2Nrc2l6ZShzYiwgQkxPQ0tfU0laRSk7CisJYmxvY2tzaXplID0gc2JfbWluX2Jsb2Nrc2l6ZShzYiwgTklMRlNfTUlOX0JMT0NLX1NJWkUpOwogCWlmICghYmxvY2tzaXplKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTklMRlM6IHVuYWJsZSB0byBzZXQgYmxvY2tzaXplXG4iKTsKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTU4Miw3ICs2ODUsMTggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxlZF9zYmg7CiAKKwllcnIgPSBuaWxmc19jaGVja19mZWF0dXJlX2NvbXBhdGliaWxpdHkoc2IsIHNicCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsZWRfc2JoOworCiAJYmxvY2tzaXplID0gQkxPQ0tfU0laRSA8PCBsZTMyX3RvX2NwdShzYnAtPnNfbG9nX2Jsb2NrX3NpemUpOworCWlmIChibG9ja3NpemUgPCBOSUxGU19NSU5fQkxPQ0tfU0laRSB8fAorCSAgICBibG9ja3NpemUgPiBOSUxGU19NQVhfQkxPQ0tfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBjb3VsZG4ndCBtb3VudCBiZWNhdXNlIG9mIHVuc3VwcG9ydGVkICIKKwkJICAgICAgICJmaWxlc3lzdGVtIGJsb2Nrc2l6ZSAlZFxuIiwgYmxvY2tzaXplKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBmYWlsZWRfc2JoOworCX0KIAlpZiAoc2ItPnNfYmxvY2tzaXplICE9IGJsb2Nrc2l6ZSkgewogCQlpbnQgaHdfYmxvY2tzaXplID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc2ItPnNfYmRldik7CiAKQEAgLTYwNCw2ICs3MTgsNyBAQAogCQkJICAgd2hlbiByZWxvYWRpbmcgZmFpbHMuICovCiAJfQogCW5pbGZzLT5uc19ibG9ja3NpemVfYml0cyA9IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCW5pbGZzLT5uc19ibG9ja3NpemUgPSBibG9ja3NpemU7CiAKIAllcnIgPSBuaWxmc19zdG9yZV9kaXNrX2xheW91dChuaWxmcywgc2JwKTsKIAlpZiAoZXJyKQpAQCAtNjE2LDIzICs3MzEsOSBAQAogCWJkaSA9IG5pbGZzLT5uc19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCW5pbGZzLT5uc19iZGkgPSBiZGkgPyA6ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87CiAKLQkvKiBGaW5kaW5nIGxhc3Qgc2VnbWVudCAqLwotCW5pbGZzLT5uc19sYXN0X3BzZWcgPSBsZTY0X3RvX2NwdShzYnAtPnNfbGFzdF9wc2VnKTsKLQluaWxmcy0+bnNfbGFzdF9jbm8gPSBsZTY0X3RvX2NwdShzYnAtPnNfbGFzdF9jbm8pOwotCW5pbGZzLT5uc19sYXN0X3NlcSA9IGxlNjRfdG9fY3B1KHNicC0+c19sYXN0X3NlcSk7Ci0KLQluaWxmcy0+bnNfc2VnX3NlcSA9IG5pbGZzLT5uc19sYXN0X3NlcTsKLQluaWxmcy0+bnNfc2VnbnVtID0KLQkJbmlsZnNfZ2V0X3NlZ251bV9vZl9ibG9jayhuaWxmcywgbmlsZnMtPm5zX2xhc3RfcHNlZyk7Ci0JbmlsZnMtPm5zX2NubyA9IG5pbGZzLT5uc19sYXN0X2NubyArIDE7Ci0JaWYgKG5pbGZzLT5uc19zZWdudW0gPj0gbmlsZnMtPm5zX25zZWdtZW50cykgewotCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTIGludmFsaWQgbGFzdCBzZWdtZW50IG51bWJlci5cbiIpOwotCQllcnIgPSAtRUlOVkFMOworCWVyciA9IG5pbGZzX3N0b3JlX2xvZ19jdXJzb3IobmlsZnMsIHNicCk7CisJaWYgKGVycikKIAkJZ290byBmYWlsZWRfc2JoOwotCX0KLQkvKiBEdW1teSB2YWx1ZXMgICovCi0JbmlsZnMtPm5zX2ZyZWVfc2VnbWVudHNfY291bnQgPQotCQluaWxmcy0+bnNfbnNlZ21lbnRzIC0gKG5pbGZzLT5uc19zZWdudW0gKyAxKTsKIAogCS8qIEluaXRpYWxpemUgZ2Npbm9kZSBjYWNoZSAqLwogCWVyciA9IG5pbGZzX2luaXRfZ2NjYWNoZShuaWxmcyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmggYi9mcy9uaWxmczIvdGhlX25pbGZzLmgKaW5kZXggMWFiOTc0NS4uZjc4NWE3YiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaApAQCAtNTcsNyArNTcsOCBAQAogICogQG5zX2N1cnJlbnQ6IGJhY2sgcG9pbnRlciB0byBjdXJyZW50IG1vdW50CiAgKiBAbnNfc2JoOiBidWZmZXIgaGVhZHMgb2Ygb24tZGlzayBzdXBlciBibG9ja3MKICAqIEBuc19zYnA6IHBvaW50ZXJzIHRvIHN1cGVyIGJsb2NrIGRhdGEKLSAqIEBuc19zYnd0aW1lOiBwcmV2aW91cyB3cml0ZSB0aW1lIG9mIHN1cGVyIGJsb2NrcworICogQG5zX3Nid3RpbWU6IHByZXZpb3VzIHdyaXRlIHRpbWUgb2Ygc3VwZXIgYmxvY2sKKyAqIEBuc19zYndjb3VudDogd3JpdGUgY291bnQgb2Ygc3VwZXIgYmxvY2sKICAqIEBuc19zYnNpemU6IHNpemUgb2YgdmFsaWQgZGF0YSBpbiBzdXBlciBibG9jawogICogQG5zX3N1cGVyczogbGlzdCBvZiBuaWxmcyBzdXBlciBibG9jayBzdHJ1Y3RzCiAgKiBAbnNfc2VnX3NlcTogc2VnbWVudCBzZXF1ZW5jZSBjb3VudGVyCkBAIC03Myw3ICs3NCw3IEBACiAgKiBAbnNfbGFzdF9zZXE6IHNlcXVlbmNlIHZhbHVlIG9mIHRoZSBsYXRlc3Qgc2VnbWVudAogICogQG5zX2xhc3RfY25vOiBjaGVja3BvaW50IG51bWJlciBvZiB0aGUgbGF0ZXN0IHNlZ21lbnQKICAqIEBuc19wcm90X3NlcTogbGVhc3Qgc2VxdWVuY2UgbnVtYmVyIG9mIHNlZ21lbnRzIHdoaWNoIG11c3Qgbm90IGJlIHJlY2xhaW1lZAotICogQG5zX2ZyZWVfc2VnbWVudHNfY291bnQ6IGNvdW50ZXIgb2YgZnJlZSBzZWdtZW50cworICogQG5zX3ByZXZfc2VxOiBiYXNlIHNlcXVlbmNlIG51bWJlciB1c2VkIHRvIGRlY2lkZSBpZiBhZHZhbmNlIGxvZyBjdXJzb3IKICAqIEBuc19zZWdjdG9yX3NlbTogc2VnbWVudCBjb25zdHJ1Y3RvciBzZW1hcGhvcmUKICAqIEBuc19kYXQ6IERBVCBmaWxlIGlub2RlCiAgKiBAbnNfY3BmaWxlOiBjaGVja3BvaW50IGZpbGUgaW5vZGUKQEAgLTgyLDYgKzgzLDcgQEAKICAqIEBuc19nY19pbm9kZXM6IGR1bW15IGlub2RlcyB0byBrZWVwIGxpdmUgYmxvY2tzCiAgKiBAbnNfZ2NfaW5vZGVzX2g6IGhhc2ggbGlzdCB0byBrZWVwIGR1bW15IGlub2RlIGhvbGRpbmcgbGl2ZSBibG9ja3MKICAqIEBuc19ibG9ja3NpemVfYml0czogYml0IGxlbmd0aCBvZiBibG9jayBzaXplCisgKiBAbnNfYmxvY2tzaXplOiBibG9jayBzaXplCiAgKiBAbnNfbnNlZ21lbnRzOiBudW1iZXIgb2Ygc2VnbWVudHMgaW4gZmlsZXN5c3RlbQogICogQG5zX2Jsb2Nrc19wZXJfc2VnbWVudDogbnVtYmVyIG9mIGJsb2NrcyBwZXIgc2VnbWVudAogICogQG5zX3Jfc2VnbWVudHNfcGVyY2VudGFnZTogcmVzZXJ2ZWQgc2VnbWVudHMgcGVyY2VudGFnZQpAQCAtMTE5LDcgKzEyMSw4IEBACiAJICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkICAgICAqbnNfc2JoWzJdOwogCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqbnNfc2JwWzJdOwotCXRpbWVfdAkJCW5zX3Nid3RpbWVbMl07CisJdGltZV90CQkJbnNfc2J3dGltZTsKKwl1bnNpZ25lZAkJbnNfc2J3Y291bnQ7CiAJdW5zaWduZWQJCW5zX3Nic2l6ZTsKIAl1bnNpZ25lZAkJbnNfbW91bnRfc3RhdGU7CiAKQEAgLTE0OSw3ICsxNTIsNyBAQAogCXU2NAkJCW5zX2xhc3Rfc2VxOwogCV9fdTY0CQkJbnNfbGFzdF9jbm87CiAJdTY0CQkJbnNfcHJvdF9zZXE7Ci0JdW5zaWduZWQgbG9uZwkJbnNfZnJlZV9zZWdtZW50c19jb3VudDsKKwl1NjQJCQluc19wcmV2X3NlcTsKIAogCXN0cnVjdCByd19zZW1hcGhvcmUJbnNfc2VnY3Rvcl9zZW07CiAKQEAgLTE2OCw2ICsxNzEsNyBAQAogCiAJLyogRGlzayBsYXlvdXQgaW5mb3JtYXRpb24gKHN0YXRpYykgKi8KIAl1bnNpZ25lZCBpbnQJCW5zX2Jsb2Nrc2l6ZV9iaXRzOworCXVuc2lnbmVkIGludAkJbnNfYmxvY2tzaXplOwogCXVuc2lnbmVkIGxvbmcJCW5zX25zZWdtZW50czsKIAl1bnNpZ25lZCBsb25nCQluc19ibG9ja3NfcGVyX3NlZ21lbnQ7CiAJdW5zaWduZWQgbG9uZwkJbnNfcl9zZWdtZW50c19wZXJjZW50YWdlOwpAQCAtMjAzLDIwICsyMDcsMTcgQEAKIAogLyogTWluaW11bSBpbnRlcnZhbCBvZiBwZXJpb2RpY2FsIHVwZGF0ZSBvZiBzdXBlcmJsb2NrcyAoaW4gc2Vjb25kcykgKi8KICNkZWZpbmUgTklMRlNfU0JfRlJFUQkJMTAKLSNkZWZpbmUgTklMRlNfQUxUU0JfRlJFUQk2MCAgLyogc3BhcmUgc3VwZXJibG9jayAqLwogCiBzdGF0aWMgaW5saW5lIGludCBuaWxmc19zYl9uZWVkX3VwZGF0ZShzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKIHsKIAl1NjQgdCA9IGdldF9zZWNvbmRzKCk7Ci0JcmV0dXJuIHQgPCBuaWxmcy0+bnNfc2J3dGltZVswXSB8fAotCQkgdCA+IG5pbGZzLT5uc19zYnd0aW1lWzBdICsgTklMRlNfU0JfRlJFUTsKKwlyZXR1cm4gdCA8IG5pbGZzLT5uc19zYnd0aW1lIHx8IHQgPiBuaWxmcy0+bnNfc2J3dGltZSArIE5JTEZTX1NCX0ZSRVE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2FsdHNiX25lZWRfdXBkYXRlKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQorc3RhdGljIGlubGluZSBpbnQgbmlsZnNfc2Jfd2lsbF9mbGlwKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQogewotCXU2NCB0ID0gZ2V0X3NlY29uZHMoKTsKLQlzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgKipzYnAgPSBuaWxmcy0+bnNfc2JwOwotCXJldHVybiBzYnBbMV0gJiYgdCA+IG5pbGZzLT5uc19zYnd0aW1lWzFdICsgTklMRlNfQUxUU0JfRlJFUTsKKwlpbnQgZmxpcF9iaXRzID0gbmlsZnMtPm5zX3Nid2NvdW50ICYgMHgwRkw7CisJcmV0dXJuIChmbGlwX2JpdHMgIT0gMHgwOCAmJiBmbGlwX2JpdHMgIT0gMHgwRik7CiB9CiAKIHZvaWQgbmlsZnNfc2V0X2xhc3Rfc2VnbWVudChzdHJ1Y3QgdGhlX25pbGZzICosIHNlY3Rvcl90LCB1NjQsIF9fdTY0KTsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9LY29uZmlnIGIvZnMvbm90aWZ5L0tjb25maWcKaW5kZXggZGZmYmIwOS4uMjJjNjI5ZSAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L0tjb25maWcKKysrIGIvZnMvbm90aWZ5L0tjb25maWcKQEAgLTMsMyArMyw0IEBACiAKIHNvdXJjZSAiZnMvbm90aWZ5L2Rub3RpZnkvS2NvbmZpZyIKIHNvdXJjZSAiZnMvbm90aWZ5L2lub3RpZnkvS2NvbmZpZyIKK3NvdXJjZSAiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWciCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvTWFrZWZpbGUgYi9mcy9ub3RpZnkvTWFrZWZpbGUKaW5kZXggMDkyMmNjOC4uYWU1ZjMzYSAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L01ha2VmaWxlCisrKyBiL2ZzL25vdGlmeS9NYWtlZmlsZQpAQCAtMSw0ICsxLDYgQEAKLW9iai0kKENPTkZJR19GU05PVElGWSkJCSs9IGZzbm90aWZ5Lm8gbm90aWZpY2F0aW9uLm8gZ3JvdXAubyBpbm9kZV9tYXJrLm8KK29iai0kKENPTkZJR19GU05PVElGWSkJCSs9IGZzbm90aWZ5Lm8gbm90aWZpY2F0aW9uLm8gZ3JvdXAubyBpbm9kZV9tYXJrLm8gXAorCQkJCSAgIG1hcmsubyB2ZnNtb3VudF9tYXJrLm8KIAogb2JqLXkJCQkrPSBkbm90aWZ5Lwogb2JqLXkJCQkrPSBpbm90aWZ5Lworb2JqLXkJCQkrPSBmYW5vdGlmeS8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYyBiL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYwppbmRleCA3ZTU0ZTUyLi4zMzQ0YmRkIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKKysrIGIvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCkBAIC0yOSwxNyArMjksMTcgQEAKIGludCBkaXJfbm90aWZ5X2VuYWJsZSBfX3JlYWRfbW9zdGx5ID0gMTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbm90aWZ5X3N0cnVjdF9jYWNoZSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkbm90aWZ5X21hcmtfZW50cnlfY2FjaGUgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZG5vdGlmeV9tYXJrX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgc3RydWN0IGZzbm90aWZ5X2dyb3VwICpkbm90aWZ5X2dyb3VwIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGRub3RpZnlfbWFya19tdXRleCk7CiAKIC8qCi0gKiBkbm90aWZ5IHdpbGwgYXR0YWNoIG9uZSBvZiB0aGVzZSB0byBlYWNoIGlub2RlIChpX2Zzbm90aWZ5X21hcmtfZW50cmllcykgd2hpY2gKKyAqIGRub3RpZnkgd2lsbCBhdHRhY2ggb25lIG9mIHRoZXNlIHRvIGVhY2ggaW5vZGUgKGlfZnNub3RpZnlfbWFya3MpIHdoaWNoCiAgKiBpcyBiZWluZyB3YXRjaGVkIGJ5IGRub3RpZnkuICBJZiBtdWx0aXBsZSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGFyZSB3YXRjaGluZwogICogdGhlIHNhbWUgZGlyZWN0b3J5IHdpdGggZG5vdGlmeSB0aGVpciBpbmZvcm1hdGlvbiBpcyBjaGFpbmVkIGluIGRuCiAgKi8KLXN0cnVjdCBkbm90aWZ5X21hcmtfZW50cnkgewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5IGZzbl9lbnRyeTsKK3N0cnVjdCBkbm90aWZ5X21hcmsgeworCXN0cnVjdCBmc25vdGlmeV9tYXJrIGZzbl9tYXJrOwogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiB9OwogCkBAIC01MSwyNyArNTEsMjcgQEAKICAqIGl0IGNhbGxzIHRoZSBmc25vdGlmeSBmdW5jdGlvbiBzbyBpdCBjYW4gdXBkYXRlIHRoZSBzZXQgb2YgYWxsIGV2ZW50cyByZWxldmFudAogICogdG8gdGhpcyBpbm9kZS4KICAqLwotc3RhdGljIHZvaWQgZG5vdGlmeV9yZWNhbGNfaW5vZGVfbWFzayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpCitzdGF0aWMgdm9pZCBkbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaykKIHsKIAlfX3UzMiBuZXdfbWFzaywgb2xkX21hc2s7CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICpkbjsKLQlzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5ICpkbmVudHJ5ICA9IGNvbnRhaW5lcl9vZihlbnRyeSwKLQkJCQkJCQkgICBzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5LAotCQkJCQkJCSAgIGZzbl9lbnRyeSk7CisJc3RydWN0IGRub3RpZnlfbWFyayAqZG5fbWFyayAgPSBjb250YWluZXJfb2YoZnNuX21hcmssCisJCQkJCQkgICAgIHN0cnVjdCBkbm90aWZ5X21hcmssCisJCQkJCQkgICAgIGZzbl9tYXJrKTsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmZW50cnktPmxvY2spOworCWFzc2VydF9zcGluX2xvY2tlZCgmZnNuX21hcmstPmxvY2spOwogCi0Jb2xkX21hc2sgPSBlbnRyeS0+bWFzazsKKwlvbGRfbWFzayA9IGZzbl9tYXJrLT5tYXNrOwogCW5ld19tYXNrID0gMDsKLQlmb3IgKGRuID0gZG5lbnRyeS0+ZG47IGRuICE9IE5VTEw7IGRuID0gZG4tPmRuX25leHQpCisJZm9yIChkbiA9IGRuX21hcmstPmRuOyBkbiAhPSBOVUxMOyBkbiA9IGRuLT5kbl9uZXh0KQogCQluZXdfbWFzayB8PSAoZG4tPmRuX21hc2sgJiB+RlNfRE5fTVVMVElTSE9UKTsKLQllbnRyeS0+bWFzayA9IG5ld19tYXNrOworCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKGZzbl9tYXJrLCBuZXdfbWFzayk7CiAKIAlpZiAob2xkX21hc2sgPT0gbmV3X21hc2spCiAJCXJldHVybjsKIAotCWlmIChlbnRyeS0+aW5vZGUpCi0JCWZzbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrKGVudHJ5LT5pbm9kZSk7CisJaWYgKGZzbl9tYXJrLT5pLmlub2RlKQorCQlmc25vdGlmeV9yZWNhbGNfaW5vZGVfbWFzayhmc25fbWFyay0+aS5pbm9kZSk7CiB9CiAKIC8qCkBAIC04MywyOSArODMsMjUgQEAKICAqIGV2ZW50cy4KICAqLwogc3RhdGljIGludCBkbm90aWZ5X2hhbmRsZV9ldmVudChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCXN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLAorCQkJCXN0cnVjdCBmc25vdGlmeV9tYXJrICp2ZnNtb3VudF9tYXJrLAogCQkJCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5ICpkbmVudHJ5OworCXN0cnVjdCBkbm90aWZ5X21hcmsgKmRuX21hcms7CiAJc3RydWN0IGlub2RlICp0b190ZWxsOwogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqZG47CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICoqcHJldjsKIAlzdHJ1Y3QgZm93bl9zdHJ1Y3QgKmZvd247CiAJX191MzIgdGVzdF9tYXNrID0gZXZlbnQtPm1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQ7CiAKKwlCVUdfT04odmZzbW91bnRfbWFyayk7CisKIAl0b190ZWxsID0gZXZlbnQtPnRvX3RlbGw7CiAKLQlzcGluX2xvY2soJnRvX3RlbGwtPmlfbG9jayk7Ci0JZW50cnkgPSBmc25vdGlmeV9maW5kX21hcmtfZW50cnkoZ3JvdXAsIHRvX3RlbGwpOwotCXNwaW5fdW5sb2NrKCZ0b190ZWxsLT5pX2xvY2spOworCWRuX21hcmsgPSBjb250YWluZXJfb2YoaW5vZGVfbWFyaywgc3RydWN0IGRub3RpZnlfbWFyaywgZnNuX21hcmspOwogCi0JLyogdW5saWtlbHkgc2luY2Ugd2UgYWxyZWF5IHBhc3NlZCBkbm90aWZ5X3Nob3VsZF9zZW5kX2V2ZW50KCkgKi8KLQlpZiAodW5saWtlbHkoIWVudHJ5KSkKLQkJcmV0dXJuIDA7Ci0JZG5lbnRyeSA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGRub3RpZnlfbWFya19lbnRyeSwgZnNuX2VudHJ5KTsKLQotCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwotCXByZXYgPSAmZG5lbnRyeS0+ZG47CisJc3Bpbl9sb2NrKCZpbm9kZV9tYXJrLT5sb2NrKTsKKwlwcmV2ID0gJmRuX21hcmstPmRuOwogCXdoaWxlICgoZG4gPSAqcHJldikgIT0gTlVMTCkgewogCQlpZiAoKGRuLT5kbl9tYXNrICYgdGVzdF9tYXNrKSA9PSAwKSB7CiAJCQlwcmV2ID0gJmRuLT5kbl9uZXh0OwpAQCAtMTE4LDEyICsxMTQsMTEgQEAKIAkJZWxzZSB7CiAJCQkqcHJldiA9IGRuLT5kbl9uZXh0OwogCQkJa21lbV9jYWNoZV9mcmVlKGRub3RpZnlfc3RydWN0X2NhY2hlLCBkbik7Ci0JCQlkbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrKGVudHJ5KTsKKwkJCWRub3RpZnlfcmVjYWxjX2lub2RlX21hc2soaW5vZGVfbWFyayk7CiAJCX0KIAl9CiAKLQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOwotCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKKwlzcGluX3VubG9jaygmaW5vZGVfbWFyay0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMyw0NCArMTI4LDI3IEBACiAgKiB1c2Vyc3BhY2Ugbm90aWZpY2F0aW9uIGZvciB0aGF0IHBhaXIuCiAgKi8KIHN0YXRpYyBib29sIGRub3RpZnlfc2hvdWxkX3NlbmRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKLQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX3UzMiBtYXNrKQorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssCisJCQkJICAgICAgc3RydWN0IGZzbm90aWZ5X21hcmsgKnZmc21vdW50X21hcmssCisJCQkJICAgICAgX191MzIgbWFzaywgdm9pZCAqZGF0YSwgaW50IGRhdGFfdHlwZSkKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnk7Ci0JYm9vbCBzZW5kOwotCi0JLyogIWRpcl9ub3RpZnlfZW5hYmxlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgZG9uJ3Qgd2FzdGUgdGltZSBjaGVja2luZwotCWlmICghZGlyX25vdGlmeV9lbmFibGUpCi0JCXJldHVybiAwOyAqLwotCiAJLyogbm90IGEgZGlyLCBkbm90aWZ5IGRvZXNuJ3QgY2FyZSAqLwogCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQllbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQotCS8qIG5vIG1hcmsgbWVhbnMgbm8gZG5vdGlmeSB3YXRjaCAqLwotCWlmICghZW50cnkpCi0JCXJldHVybiBmYWxzZTsKLQotCW1hc2sgPSAobWFzayAmIH5GU19FVkVOVF9PTl9DSElMRCk7Ci0Jc2VuZCA9IChtYXNrICYgZW50cnktPm1hc2spOwotCi0JZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOyAvKiBtYXRjaGVzIGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeSAqLwotCi0JcmV0dXJuIHNlbmQ7CisJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGRub3RpZnlfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSkKK3N0YXRpYyB2b2lkIGRub3RpZnlfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaykKIHsKLQlzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5ICpkbmVudHJ5ID0gY29udGFpbmVyX29mKGVudHJ5LAotCQkJCQkJCSAgc3RydWN0IGRub3RpZnlfbWFya19lbnRyeSwKLQkJCQkJCQkgIGZzbl9lbnRyeSk7CisJc3RydWN0IGRub3RpZnlfbWFyayAqZG5fbWFyayA9IGNvbnRhaW5lcl9vZihmc25fbWFyaywKKwkJCQkJCSAgICBzdHJ1Y3QgZG5vdGlmeV9tYXJrLAorCQkJCQkJICAgIGZzbl9tYXJrKTsKIAotCUJVR19PTihkbmVudHJ5LT5kbik7CisJQlVHX09OKGRuX21hcmstPmRuKTsKIAotCWttZW1fY2FjaGVfZnJlZShkbm90aWZ5X21hcmtfZW50cnlfY2FjaGUsIGRuZW50cnkpOworCWttZW1fY2FjaGVfZnJlZShkbm90aWZ5X21hcmtfY2FjaGUsIGRuX21hcmspOwogfQogCiBzdGF0aWMgc3RydWN0IGZzbm90aWZ5X29wcyBkbm90aWZ5X2Zzbm90aWZ5X29wcyA9IHsKQEAgLTE4MywxNSArMTYxLDE1IEBACiAKIC8qCiAgKiBDYWxsZWQgZXZlcnkgdGltZSBhIGZpbGUgaXMgY2xvc2VkLiAgTG9va3MgZmlyc3QgZm9yIGEgZG5vdGlmeSBtYXJrIG9uIHRoZQotICogaW5vZGUuICBJZiBvbmUgaXMgZm91bmQgcnVuIGFsbCBvZiB0aGUgLT5kbiBlbnRyaWVzIGF0dGFjaGVkIHRvIHRoYXQKKyAqIGlub2RlLiAgSWYgb25lIGlzIGZvdW5kIHJ1biBhbGwgb2YgdGhlIC0+ZG4gc3RydWN0dXJlcyBhdHRhY2hlZCB0byB0aGF0CiAgKiBtYXJrIGZvciBvbmUgcmVsZXZhbnQgdG8gdGhpcyBwcm9jZXNzIGNsb3NpbmcgdGhlIGZpbGUgYW5kIHJlbW92ZSB0aGF0CiAgKiBkbm90aWZ5X3N0cnVjdC4gIElmIHRoYXQgd2FzIHRoZSBsYXN0IGRub3RpZnlfc3RydWN0IGFsc28gcmVtb3ZlIHRoZQotICogZnNub3RpZnlfbWFya19lbnRyeS4KKyAqIGZzbm90aWZ5X21hcmsuCiAgKi8KIHZvaWQgZG5vdGlmeV9mbHVzaChzdHJ1Y3QgZmlsZSAqZmlscCwgZmxfb3duZXJfdCBpZCkKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGRub3RpZnlfbWFya19lbnRyeSAqZG5lbnRyeTsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcms7CisJc3RydWN0IGRub3RpZnlfbWFyayAqZG5fbWFyazsKIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmRuOwogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqKnByZXY7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTIwMCwzOCArMTc4LDM0IEBACiAJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWVudHJ5ID0gZnNub3RpZnlfZmluZF9tYXJrX2VudHJ5KGRub3RpZnlfZ3JvdXAsIGlub2RlKTsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaWYgKCFlbnRyeSkKKwlmc25fbWFyayA9IGZzbm90aWZ5X2ZpbmRfaW5vZGVfbWFyayhkbm90aWZ5X2dyb3VwLCBpbm9kZSk7CisJaWYgKCFmc25fbWFyaykKIAkJcmV0dXJuOwotCWRuZW50cnkgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBkbm90aWZ5X21hcmtfZW50cnksIGZzbl9lbnRyeSk7CisJZG5fbWFyayA9IGNvbnRhaW5lcl9vZihmc25fbWFyaywgc3RydWN0IGRub3RpZnlfbWFyaywgZnNuX21hcmspOwogCiAJbXV0ZXhfbG9jaygmZG5vdGlmeV9tYXJrX211dGV4KTsKIAotCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwotCXByZXYgPSAmZG5lbnRyeS0+ZG47CisJc3Bpbl9sb2NrKCZmc25fbWFyay0+bG9jayk7CisJcHJldiA9ICZkbl9tYXJrLT5kbjsKIAl3aGlsZSAoKGRuID0gKnByZXYpICE9IE5VTEwpIHsKIAkJaWYgKChkbi0+ZG5fb3duZXIgPT0gaWQpICYmIChkbi0+ZG5fZmlscCA9PSBmaWxwKSkgewogCQkJKnByZXYgPSBkbi0+ZG5fbmV4dDsKIAkJCWttZW1fY2FjaGVfZnJlZShkbm90aWZ5X3N0cnVjdF9jYWNoZSwgZG4pOwotCQkJZG5vdGlmeV9yZWNhbGNfaW5vZGVfbWFzayhlbnRyeSk7CisJCQlkbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrKGZzbl9tYXJrKTsKIAkJCWJyZWFrOwogCQl9CiAJCXByZXYgPSAmZG4tPmRuX25leHQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmVudHJ5LT5sb2NrKTsKKwlzcGluX3VubG9jaygmZnNuX21hcmstPmxvY2spOwogCiAJLyogbm90aGluZyBlbHNlIGNvdWxkIGhhdmUgZm91bmQgdXMgdGhhbmtzIHRvIHRoZSBkbm90aWZ5X21hcmtfbXV0ZXggKi8KLQlpZiAoZG5lbnRyeS0+ZG4gPT0gTlVMTCkKLQkJZnNub3RpZnlfZGVzdHJveV9tYXJrX2J5X2VudHJ5KGVudHJ5KTsKLQotCWZzbm90aWZ5X3JlY2FsY19ncm91cF9tYXNrKGRub3RpZnlfZ3JvdXApOworCWlmIChkbl9tYXJrLT5kbiA9PSBOVUxMKQorCQlmc25vdGlmeV9kZXN0cm95X21hcmsoZnNuX21hcmspOwogCiAJbXV0ZXhfdW5sb2NrKCZkbm90aWZ5X21hcmtfbXV0ZXgpOwogCi0JZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOworCWZzbm90aWZ5X3B1dF9tYXJrKGZzbl9tYXJrKTsKIH0KIAogLyogdGhpcyBjb252ZXJzaW9uIGlzIGRvbmUgb25seSBhdCB3YXRjaCBjcmVhdGlvbiAqLwpAQCAtMjU5LDE2ICsyMzMsMTYgQEAKIAogLyoKICAqIElmIG11bHRpcGxlIHByb2Nlc3NlcyB3YXRjaCB0aGUgc2FtZSBpbm9kZSB3aXRoIGRub3RpZnkgdGhlcmUgaXMgb25seSBvbmUKLSAqIGRub3RpZnkgbWFyayBpbiBpbm9kZS0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMgYnV0IHdlIGNoYWluIGEgZG5vdGlmeV9zdHJ1Y3QKKyAqIGRub3RpZnkgbWFyayBpbiBpbm9kZS0+aV9mc25vdGlmeV9tYXJrcyBidXQgd2UgY2hhaW4gYSBkbm90aWZ5X3N0cnVjdAogICogb250byB0aGF0IG1hcmsuICBUaGlzIGZ1bmN0aW9uIGVpdGhlciBhdHRhY2hlcyB0aGUgbmV3IGRub3RpZnlfc3RydWN0IG9udG8KICAqIHRoYXQgbGlzdCwgb3IgaXQgfD0gdGhlIG1hc2sgb250byBhbiBleGlzdGluZyBkbm9maXlfc3RydWN0LgogICovCi1zdGF0aWMgaW50IGF0dGFjaF9kbihzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmRuLCBzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5ICpkbmVudHJ5LAorc3RhdGljIGludCBhdHRhY2hfZG4oc3RydWN0IGRub3RpZnlfc3RydWN0ICpkbiwgc3RydWN0IGRub3RpZnlfbWFyayAqZG5fbWFyaywKIAkJICAgICBmbF9vd25lcl90IGlkLCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBtYXNrKQogewogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqb2RuOwogCi0Jb2RuID0gZG5lbnRyeS0+ZG47CisJb2RuID0gZG5fbWFyay0+ZG47CiAJd2hpbGUgKG9kbiAhPSBOVUxMKSB7CiAJCS8qIGFkZGluZyBtb3JlIGV2ZW50cyB0byBleGlzdGluZyBkbm9maXlfc3RydWN0PyAqLwogCQlpZiAoKG9kbi0+ZG5fb3duZXIgPT0gaWQpICYmIChvZG4tPmRuX2ZpbHAgPT0gZmlscCkpIHsKQEAgLTI4Myw4ICsyNTcsOCBAQAogCWRuLT5kbl9mZCA9IGZkOwogCWRuLT5kbl9maWxwID0gZmlscDsKIAlkbi0+ZG5fb3duZXIgPSBpZDsKLQlkbi0+ZG5fbmV4dCA9IGRuZW50cnktPmRuOwotCWRuZW50cnktPmRuID0gZG47CisJZG4tPmRuX25leHQgPSBkbl9tYXJrLT5kbjsKKwlkbl9tYXJrLT5kbiA9IGRuOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTYsOCArMjcwLDggQEAKICAqLwogaW50IGZjbnRsX2Rpcm5vdGlmeShpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5ICpuZXdfZG5lbnRyeSwgKmRuZW50cnk7Ci0Jc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKm5ld19lbnRyeSwgKmVudHJ5OworCXN0cnVjdCBkbm90aWZ5X21hcmsgKm5ld19kbl9tYXJrLCAqZG5fbWFyazsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbmV3X2Zzbl9tYXJrLCAqZnNuX21hcms7CiAJc3RydWN0IGRub3RpZnlfc3RydWN0ICpkbjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWZsX293bmVyX3QgaWQgPSBjdXJyZW50LT5maWxlczsKQEAgLTMwNiw3ICsyODAsNyBAQAogCV9fdTMyIG1hc2s7CiAKIAkvKiB3ZSB1c2UgdGhlc2UgdG8gdGVsbCBpZiB3ZSBuZWVkIHRvIGtmcmVlICovCi0JbmV3X2VudHJ5ID0gTlVMTDsKKwluZXdfZnNuX21hcmsgPSBOVUxMOwogCWRuID0gTlVMTDsKIAogCWlmICghZGlyX25vdGlmeV9lbmFibGUpIHsKQEAgLTMzNiw4ICszMTAsOCBAQAogCX0KIAogCS8qIG5ldyBmc25vdGlmeSBtYXJrLCB3ZSBleHBlY3QgbW9zdCBmY250bCBjYWxscyB0byBhZGQgYSBuZXcgbWFyayAqLwotCW5ld19kbmVudHJ5ID0ga21lbV9jYWNoZV9hbGxvYyhkbm90aWZ5X21hcmtfZW50cnlfY2FjaGUsIEdGUF9LRVJORUwpOwotCWlmICghbmV3X2RuZW50cnkpIHsKKwluZXdfZG5fbWFyayA9IGttZW1fY2FjaGVfYWxsb2MoZG5vdGlmeV9tYXJrX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19kbl9tYXJrKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBvdXRfZXJyOwogCX0KQEAgLTM0NSwyOSArMzE5LDI3IEBACiAJLyogY29udmVydCB0aGUgdXNlcnNwYWNlIEROXyogImFyZyIgdG8gdGhlIGludGVybmFsIEZTXyogZGVmaW5lcyBpbiBmc25vdGlmeSAqLwogCW1hc2sgPSBjb252ZXJ0X2FyZyhhcmcpOwogCi0JLyogc2V0IHVwIHRoZSBuZXdfZW50cnkgYW5kIG5ld19kbmVudHJ5ICovCi0JbmV3X2VudHJ5ID0gJm5ld19kbmVudHJ5LT5mc25fZW50cnk7Ci0JZnNub3RpZnlfaW5pdF9tYXJrKG5ld19lbnRyeSwgZG5vdGlmeV9mcmVlX21hcmspOwotCW5ld19lbnRyeS0+bWFzayA9IG1hc2s7Ci0JbmV3X2RuZW50cnktPmRuID0gTlVMTDsKKwkvKiBzZXQgdXAgdGhlIG5ld19mc25fbWFyayBhbmQgbmV3X2RuX21hcmsgKi8KKwluZXdfZnNuX21hcmsgPSAmbmV3X2RuX21hcmstPmZzbl9tYXJrOworCWZzbm90aWZ5X2luaXRfbWFyayhuZXdfZnNuX21hcmssIGRub3RpZnlfZnJlZV9tYXJrKTsKKwluZXdfZnNuX21hcmstPm1hc2sgPSBtYXNrOworCW5ld19kbl9tYXJrLT5kbiA9IE5VTEw7CiAKIAkvKiB0aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBmY250bC9jbG9zZSByYWNlIGRlc2NyaWJlZCBiZWxvdyAqLwogCW11dGV4X2xvY2soJmRub3RpZnlfbWFya19tdXRleCk7CiAKLQkvKiBhZGQgdGhlIG5ld19lbnRyeSBvciBmaW5kIGFuIG9sZCBvbmUuICovCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQllbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShkbm90aWZ5X2dyb3VwLCBpbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCWlmIChlbnRyeSkgewotCQlkbmVudHJ5ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgZG5vdGlmeV9tYXJrX2VudHJ5LCBmc25fZW50cnkpOwotCQlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKKwkvKiBhZGQgdGhlIG5ld19mc25fbWFyayBvciBmaW5kIGFuIG9sZCBvbmUuICovCisJZnNuX21hcmsgPSBmc25vdGlmeV9maW5kX2lub2RlX21hcmsoZG5vdGlmeV9ncm91cCwgaW5vZGUpOworCWlmIChmc25fbWFyaykgeworCQlkbl9tYXJrID0gY29udGFpbmVyX29mKGZzbl9tYXJrLCBzdHJ1Y3QgZG5vdGlmeV9tYXJrLCBmc25fbWFyayk7CisJCXNwaW5fbG9jaygmZnNuX21hcmstPmxvY2spOwogCX0gZWxzZSB7Ci0JCWZzbm90aWZ5X2FkZF9tYXJrKG5ld19lbnRyeSwgZG5vdGlmeV9ncm91cCwgaW5vZGUpOwotCQlzcGluX2xvY2soJm5ld19lbnRyeS0+bG9jayk7Ci0JCWVudHJ5ID0gbmV3X2VudHJ5OwotCQlkbmVudHJ5ID0gbmV3X2RuZW50cnk7Ci0JCS8qIHdlIHVzZWQgbmV3X2VudHJ5LCBzbyBkb24ndCBmcmVlIGl0ICovCi0JCW5ld19lbnRyeSA9IE5VTEw7CisJCWZzbm90aWZ5X2FkZF9tYXJrKG5ld19mc25fbWFyaywgZG5vdGlmeV9ncm91cCwgaW5vZGUsIE5VTEwsIDApOworCQlzcGluX2xvY2soJm5ld19mc25fbWFyay0+bG9jayk7CisJCWZzbl9tYXJrID0gbmV3X2Zzbl9tYXJrOworCQlkbl9tYXJrID0gbmV3X2RuX21hcms7CisJCS8qIHdlIHVzZWQgbmV3X2Zzbl9tYXJrLCBzbyBkb24ndCBmcmVlIGl0ICovCisJCW5ld19mc25fbWFyayA9IE5VTEw7CiAJfQogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMzc2LDE3ICszNDgsMTcgQEAKIAogCS8qIGlmIChmICE9IGZpbHApIG1lYW5zIHRoYXQgd2UgbG9zdCBhIHJhY2UgYW5kIGFub3RoZXIgdGFzay90aHJlYWQKIAkgKiBhY3R1YWxseSBjbG9zZWQgdGhlIGZkIHdlIGFyZSBzdGlsbCBwbGF5aW5nIHdpdGggYmVmb3JlIHdlIGdyYWJiZWQKLQkgKiB0aGUgZG5vdGlmeV9tYXJrX211dGV4IGFuZCBlbnRyeS0+bG9jay4gIFNpbmNlIGNsb3NpbmcgdGhlIGZkIGlzIHRoZQotCSAqIG9ubHkgdGltZSB3ZSBjbGVhbiB1cCB0aGUgbWFyayBlbnRyaWVzIHdlIG5lZWQgdG8gZ2V0IG91ciBtYXJrIG9mZgorCSAqIHRoZSBkbm90aWZ5X21hcmtfbXV0ZXggYW5kIGZzbl9tYXJrLT5sb2NrLiAgU2luY2UgY2xvc2luZyB0aGUgZmQgaXMgdGhlCisJICogb25seSB0aW1lIHdlIGNsZWFuIHVwIHRoZSBtYXJrcyB3ZSBuZWVkIHRvIGdldCBvdXIgbWFyayBvZmYKIAkgKiB0aGUgbGlzdC4gKi8KIAlpZiAoZiAhPSBmaWxwKSB7CiAJCS8qIGlmIHdlIGFkZGVkIG91cnNlbHZlcywgc2hvb3Qgb3Vyc2VsdmVzLCBpdCdzIHBvc3NpYmxlIHRoYXQKLQkJICogdGhlIGZsdXNoIGFjdHVhbGx5IGRpZCBzaG9vdCB0aGlzIGVudHJ5LiAgVGhhdCdzIGZpbmUgdG9vCisJCSAqIHRoZSBmbHVzaCBhY3R1YWxseSBkaWQgc2hvb3QgdGhpcyBmc25fbWFyay4gIFRoYXQncyBmaW5lIHRvbwogCQkgKiBzaW5jZSBtdWx0aXBsZSBjYWxscyB0byBkZXN0cm95X21hcmsgaXMgcGVyZmVjdGx5IHNhZmUsIGlmCi0JCSAqIHdlIGZvdW5kIGEgZG5lbnRyeSBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoZSBpbm9kZSwganVzdCBzb2QKKwkJICogd2UgZm91bmQgYSBkbl9tYXJrIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIGlub2RlLCBqdXN0IHNvZAogCQkgKiBvZmYgc2lsZW50bHkgYXMgdGhlIGZsdXNoIGF0IGNsb3NlIHRpbWUgZGVhbHQgd2l0aCBpdC4KIAkJICovCi0JCWlmIChkbmVudHJ5ID09IG5ld19kbmVudHJ5KQorCQlpZiAoZG5fbWFyayA9PSBuZXdfZG5fbWFyaykKIAkJCWRlc3Ryb3kgPSAxOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zOTQsMTMgKzM2NiwxMyBAQAogCWVycm9yID0gX19mX3NldG93bihmaWxwLCB0YXNrX3BpZChjdXJyZW50KSwgUElEVFlQRV9QSUQsIDApOwogCWlmIChlcnJvcikgewogCQkvKiBpZiB3ZSBhZGRlZCwgd2UgbXVzdCBzaG9vdCAqLwotCQlpZiAoZG5lbnRyeSA9PSBuZXdfZG5lbnRyeSkKKwkJaWYgKGRuX21hcmsgPT0gbmV3X2RuX21hcmspCiAJCQlkZXN0cm95ID0gMTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyb3IgPSBhdHRhY2hfZG4oZG4sIGRuZW50cnksIGlkLCBmZCwgZmlscCwgbWFzayk7Ci0JLyogIWVycm9yIG1lYW5zIHRoYXQgd2UgYXR0YWNoZWQgdGhlIGRuIHRvIHRoZSBkbmVudHJ5LCBzbyBkb24ndCBmcmVlIGl0ICovCisJZXJyb3IgPSBhdHRhY2hfZG4oZG4sIGRuX21hcmssIGlkLCBmZCwgZmlscCwgbWFzayk7CisJLyogIWVycm9yIG1lYW5zIHRoYXQgd2UgYXR0YWNoZWQgdGhlIGRuIHRvIHRoZSBkbl9tYXJrLCBzbyBkb24ndCBmcmVlIGl0ICovCiAJaWYgKCFlcnJvcikKIAkJZG4gPSBOVUxMOwogCS8qIC1FRVhJU1QgbWVhbnMgdGhhdCB3ZSBkaWRuJ3QgYWRkIHRoaXMgbmV3IGRuIGFuZCB1c2VkIGFuIG9sZCBvbmUuCkBAIC00MDgsMjAgKzM4MCwxOCBAQAogCWVsc2UgaWYgKGVycm9yID09IC1FRVhJU1QpCiAJCWVycm9yID0gMDsKIAotCWRub3RpZnlfcmVjYWxjX2lub2RlX21hc2soZW50cnkpOworCWRub3RpZnlfcmVjYWxjX2lub2RlX21hc2soZnNuX21hcmspOwogb3V0OgotCXNwaW5fdW5sb2NrKCZlbnRyeS0+bG9jayk7CisJc3Bpbl91bmxvY2soJmZzbl9tYXJrLT5sb2NrKTsKIAogCWlmIChkZXN0cm95KQotCQlmc25vdGlmeV9kZXN0cm95X21hcmtfYnlfZW50cnkoZW50cnkpOwotCi0JZnNub3RpZnlfcmVjYWxjX2dyb3VwX21hc2soZG5vdGlmeV9ncm91cCk7CisJCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhmc25fbWFyayk7CiAKIAltdXRleF91bmxvY2soJmRub3RpZnlfbWFya19tdXRleCk7Ci0JZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOworCWZzbm90aWZ5X3B1dF9tYXJrKGZzbl9tYXJrKTsKIG91dF9lcnI6Ci0JaWYgKG5ld19lbnRyeSkKLQkJZnNub3RpZnlfcHV0X21hcmsobmV3X2VudHJ5KTsKKwlpZiAobmV3X2Zzbl9tYXJrKQorCQlmc25vdGlmeV9wdXRfbWFyayhuZXdfZnNuX21hcmspOwogCWlmIChkbikKIAkJa21lbV9jYWNoZV9mcmVlKGRub3RpZnlfc3RydWN0X2NhY2hlLCBkbik7CiAJcmV0dXJuIGVycm9yOwpAQCAtNDMwLDEwICs0MDAsOSBAQAogc3RhdGljIGludCBfX2luaXQgZG5vdGlmeV9pbml0KHZvaWQpCiB7CiAJZG5vdGlmeV9zdHJ1Y3RfY2FjaGUgPSBLTUVNX0NBQ0hFKGRub3RpZnlfc3RydWN0LCBTTEFCX1BBTklDKTsKLQlkbm90aWZ5X21hcmtfZW50cnlfY2FjaGUgPSBLTUVNX0NBQ0hFKGRub3RpZnlfbWFya19lbnRyeSwgU0xBQl9QQU5JQyk7CisJZG5vdGlmeV9tYXJrX2NhY2hlID0gS01FTV9DQUNIRShkbm90aWZ5X21hcmssIFNMQUJfUEFOSUMpOwogCi0JZG5vdGlmeV9ncm91cCA9IGZzbm90aWZ5X29idGFpbl9ncm91cChETk9USUZZX0dST1VQX05VTSwKLQkJCQkJICAgICAgMCwgJmRub3RpZnlfZnNub3RpZnlfb3BzKTsKKwlkbm90aWZ5X2dyb3VwID0gZnNub3RpZnlfYWxsb2NfZ3JvdXAoJmRub3RpZnlfZnNub3RpZnlfb3BzKTsKIAlpZiAoSVNfRVJSKGRub3RpZnlfZ3JvdXApKQogCQlwYW5pYygidW5hYmxlIHRvIGFsbG9jYXRlIGZzbm90aWZ5IGdyb3VwIGZvciBkbm90aWZ5XG4iKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjMzZiNwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnCkBAIC0wLDAgKzEsMjYgQEAKK2NvbmZpZyBGQU5PVElGWQorCWJvb2wgIkZpbGVzeXN0ZW0gd2lkZSBhY2Nlc3Mgbm90aWZpY2F0aW9uIgorCXNlbGVjdCBGU05PVElGWQorCXNlbGVjdCBBTk9OX0lOT0RFUworCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBmYW5vdGlmeSBzdXBvcnQuICBmYW5vdGlmeSBpcyBhIGZpbGUgYWNjZXNzCisJICAgbm90aWZpY2F0aW9uIHN5c3RlbSB3aGljaCBkaWZmZXJzIGZyb20gaW5vdGlmeSBpbiB0aGF0IGl0IHNlbmRzCisJICAgYW5kIG9wZW4gZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSB1c2Vyc3BhY2UgbGlzdGVuZXIgYWxvbmcgd2l0aAorCSAgIHRoZSBldmVudC4KKworCSAgIElmIHVuc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBGQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMKKwlib29sICJmYW5vdGlmeSBwZXJtaXNzaW9ucyBjaGVja2luZyIKKwlkZXBlbmRzIG9uIEZBTk9USUZZCisJZGVwZW5kcyBvbiBTRUNVUklUWQorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgICBTYXkgWSBoZXJlIGlzIHlvdSB3YW50IGZhbm90aWZ5IGxpc3RlbmVycyB0byBiZSBhYmxlIHRvIG1ha2UgcGVybWlzc2lvbnMKKwkgICBkZWNpc2lvbnMgY29uY2VybmluZyBmaWxlc3lzdGVtIGV2ZW50cy4gIFRoaXMgaXMgdXNlZCBieSBzb21lIGZhbm90aWZ5CisJICAgbGlzdGVuZXJzIHdoaWNoIG5lZWQgdG8gc2NhbiBmaWxlcyBiZWZvcmUgYWxsb3dpbmcgdGhlIHN5c3RlbSBhY2Nlc3MgdG8KKwkgICB1c2UgdGhvc2UgZmlsZXMuICBUaGlzIGlzIHVzZWQgYnkgc29tZSBhbnRpLW1hbHdhcmUgdmVuZG9ycyBhbmQgYnkgc29tZQorCSAgIGhpZXJhcmNoaWNhbCBzdG9yYWdlIG1hbmFnZW50IHN5c3RlbXMuCisKKwkgICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L01ha2VmaWxlIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OTkyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX0ZBTk9USUZZKQkJKz0gZmFub3RpZnkubyBmYW5vdGlmeV91c2VyLm8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI4ZjczYwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeS5jCkBAIC0wLDAgKzEsMjEyIEBACisjaW5jbHVkZSA8bGludXgvZmFub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mZHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnlfYmFja2VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+IC8qIFVJTlRfTUFYICovCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCitzdGF0aWMgYm9vbCBzaG91bGRfbWVyZ2Uoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpvbGQsIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqbmV3KQoreworCXByX2RlYnVnKCIlczogb2xkPSVwIG5ldz0lcFxuIiwgX19mdW5jX18sIG9sZCwgbmV3KTsKKworCWlmIChvbGQtPnRvX3RlbGwgPT0gbmV3LT50b190ZWxsICYmCisJICAgIG9sZC0+ZGF0YV90eXBlID09IG5ldy0+ZGF0YV90eXBlICYmCisJICAgIG9sZC0+dGdpZCA9PSBuZXctPnRnaWQpIHsKKwkJc3dpdGNoIChvbGQtPmRhdGFfdHlwZSkgeworCQljYXNlIChGU05PVElGWV9FVkVOVF9GSUxFKToKKwkJCWlmICgob2xkLT5maWxlLT5mX3BhdGgubW50ID09IG5ldy0+ZmlsZS0+Zl9wYXRoLm1udCkgJiYKKwkJCSAgICAob2xkLT5maWxlLT5mX3BhdGguZGVudHJ5ID09IG5ldy0+ZmlsZS0+Zl9wYXRoLmRlbnRyeSkpCisJCQkJcmV0dXJuIHRydWU7CisJCWNhc2UgKEZTTk9USUZZX0VWRU5UX05PTkUpOgorCQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKiBhbmQgdGhlIGxpc3QgYmV0dGVyIGJlIGxvY2tlZCBieSBzb21ldGhpbmcgdG9vISAqLworc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZmFub3RpZnlfbWVyZ2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJICAgICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBmc25vdGlmeV9ldmVudF9ob2xkZXIgKnRlc3RfaG9sZGVyOworCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqdGVzdF9ldmVudCA9IE5VTEw7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpuZXdfZXZlbnQ7CisKKwlwcl9kZWJ1ZygiJXM6IGxpc3Q9JXAgZXZlbnQ9JXBcbiIsIF9fZnVuY19fLCBsaXN0LCBldmVudCk7CisKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh0ZXN0X2hvbGRlciwgbGlzdCwgZXZlbnRfbGlzdCkgeworCQlpZiAoc2hvdWxkX21lcmdlKHRlc3RfaG9sZGVyLT5ldmVudCwgZXZlbnQpKSB7CisJCQl0ZXN0X2V2ZW50ID0gdGVzdF9ob2xkZXItPmV2ZW50OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXRlc3RfZXZlbnQpCisJCXJldHVybiBOVUxMOworCisJZnNub3RpZnlfZ2V0X2V2ZW50KHRlc3RfZXZlbnQpOworCisJLyogaWYgdGhleSBhcmUgZXhhY3RseSB0aGUgc2FtZSB3ZSBhcmUgZG9uZSAqLworCWlmICh0ZXN0X2V2ZW50LT5tYXNrID09IGV2ZW50LT5tYXNrKQorCQlyZXR1cm4gdGVzdF9ldmVudDsKKworCS8qCisJICogaWYgdGhlIHJlZmNudCA9PSAyIHRoaXMgaXMgdGhlIG9ubHkgcXVldWUKKwkgKiBmb3IgdGhpcyBldmVudCBhbmQgc28gd2UgY2FuIHVwZGF0ZSB0aGUgbWFzaworCSAqIGluIHBsYWNlLgorCSAqLworCWlmIChhdG9taWNfcmVhZCgmdGVzdF9ldmVudC0+cmVmY250KSA9PSAyKSB7CisJCXRlc3RfZXZlbnQtPm1hc2sgfD0gZXZlbnQtPm1hc2s7CisJCXJldHVybiB0ZXN0X2V2ZW50OworCX0KKworCW5ld19ldmVudCA9IGZzbm90aWZ5X2Nsb25lX2V2ZW50KHRlc3RfZXZlbnQpOworCisJLyogZG9uZSB3aXRoIHRlc3RfZXZlbnQgKi8KKwlmc25vdGlmeV9wdXRfZXZlbnQodGVzdF9ldmVudCk7CisKKwkvKiBjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnksIG1lcmdlIHdhcyBub3QgcG9zc2libGUgKi8KKwlpZiAodW5saWtlbHkoIW5ld19ldmVudCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyogYnVpbGQgbmV3IGV2ZW50IGFuZCByZXBsYWNlIGl0IG9uIHRoZSBsaXN0ICovCisJbmV3X2V2ZW50LT5tYXNrID0gKHRlc3RfZXZlbnQtPm1hc2sgfCBldmVudC0+bWFzayk7CisJZnNub3RpZnlfcmVwbGFjZV9ldmVudCh0ZXN0X2hvbGRlciwgbmV3X2V2ZW50KTsKKworCS8qIHdlIGhvbGQgYSByZWZlcmVuY2Ugb24gbmV3X2V2ZW50IGZyb20gY2xvbmVfZXZlbnQgKi8KKwlyZXR1cm4gbmV3X2V2ZW50OworfQorCisjaWZkZWYgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUworc3RhdGljIGludCBmYW5vdGlmeV9nZXRfcmVzcG9uc2VfZnJvbV9hY2Nlc3Moc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkJICAgICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50KQoreworCWludCByZXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKworCXdhaXRfZXZlbnQoZ3JvdXAtPmZhbm90aWZ5X2RhdGEuYWNjZXNzX3dhaXRxLCBldmVudC0+cmVzcG9uc2UpOworCisJLyogdXNlcnNwYWNlIHJlc3BvbmRlZCwgY29udmVydCB0byBzb21ldGhpbmcgdXNhYmxlICovCisJc3Bpbl9sb2NrKCZldmVudC0+bG9jayk7CisJc3dpdGNoIChldmVudC0+cmVzcG9uc2UpIHsKKwljYXNlIEZBTl9BTExPVzoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBGQU5fREVOWToKKwlkZWZhdWx0OgorCQlyZXQgPSAtRVBFUk07CisJfQorCWV2ZW50LT5yZXNwb25zZSA9IDA7CisJc3Bpbl91bmxvY2soJmV2ZW50LT5sb2NrKTsKKworCXByX2RlYnVnKCIlczogZ3JvdXA9JXAgZXZlbnQ9JXAgYWJvdXQgdG8gcmV0dXJuIHJldD0lZFxuIiwgX19mdW5jX18sCisJCSBncm91cCwgZXZlbnQsIHJldCk7CisJCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGZhbm90aWZ5X2hhbmRsZV9ldmVudChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCSBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqaW5vZGVfbWFyaywKKwkJCQkgc3RydWN0IGZzbm90aWZ5X21hcmsgKmZhbm90aWZ5X21hcmssCisJCQkJIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpub3RpZnlfZXZlbnQgPSBOVUxMOworCisJQlVJTERfQlVHX09OKEZBTl9BQ0NFU1MgIT0gRlNfQUNDRVNTKTsKKwlCVUlMRF9CVUdfT04oRkFOX01PRElGWSAhPSBGU19NT0RJRlkpOworCUJVSUxEX0JVR19PTihGQU5fQ0xPU0VfTk9XUklURSAhPSBGU19DTE9TRV9OT1dSSVRFKTsKKwlCVUlMRF9CVUdfT04oRkFOX0NMT1NFX1dSSVRFICE9IEZTX0NMT1NFX1dSSVRFKTsKKwlCVUlMRF9CVUdfT04oRkFOX09QRU4gIT0gRlNfT1BFTik7CisJQlVJTERfQlVHX09OKEZBTl9FVkVOVF9PTl9DSElMRCAhPSBGU19FVkVOVF9PTl9DSElMRCk7CisJQlVJTERfQlVHX09OKEZBTl9RX09WRVJGTE9XICE9IEZTX1FfT1ZFUkZMT1cpOworCUJVSUxEX0JVR19PTihGQU5fT1BFTl9QRVJNICE9IEZTX09QRU5fUEVSTSk7CisJQlVJTERfQlVHX09OKEZBTl9BQ0NFU1NfUEVSTSAhPSBGU19BQ0NFU1NfUEVSTSk7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKworCW5vdGlmeV9ldmVudCA9IGZzbm90aWZ5X2FkZF9ub3RpZnlfZXZlbnQoZ3JvdXAsIGV2ZW50LCBOVUxMLCBmYW5vdGlmeV9tZXJnZSk7CisJaWYgKElTX0VSUihub3RpZnlfZXZlbnQpKQorCQlyZXR1cm4gUFRSX0VSUihub3RpZnlfZXZlbnQpOworCisjaWZkZWYgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUworCWlmIChldmVudC0+bWFzayAmIEZBTl9BTExfUEVSTV9FVkVOVFMpIHsKKwkJLyogaWYgd2UgbWVyZ2VkIHdlIG5lZWQgdG8gd2FpdCBvbiB0aGUgbmV3IGV2ZW50ICovCisJCWlmIChub3RpZnlfZXZlbnQpCisJCQlldmVudCA9IG5vdGlmeV9ldmVudDsKKwkJcmV0ID0gZmFub3RpZnlfZ2V0X3Jlc3BvbnNlX2Zyb21fYWNjZXNzKGdyb3VwLCBldmVudCk7CisJfQorI2VuZGlmCisKKwlpZiAobm90aWZ5X2V2ZW50KQorCQlmc25vdGlmeV9wdXRfZXZlbnQobm90aWZ5X2V2ZW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGZhbm90aWZ5X3Nob3VsZF9zZW5kX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqdG9fdGVsbCwKKwkJCQkgICAgICAgc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssCisJCQkJICAgICAgIHN0cnVjdCBmc25vdGlmeV9tYXJrICp2ZnNtbnRfbWFyaywKKwkJCQkgICAgICAgX191MzIgZXZlbnRfbWFzaywgdm9pZCAqZGF0YSwgaW50IGRhdGFfdHlwZSkKK3sKKwlfX3UzMiBtYXJrc19tYXNrLCBtYXJrc19pZ25vcmVkX21hc2s7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIHRvX3RlbGw9JXAgaW5vZGVfbWFyaz0lcCB2ZnNtbnRfbWFyaz0lcCAiCisJCSAibWFzaz0leCBkYXRhPSVwIGRhdGFfdHlwZT0lZFxuIiwgX19mdW5jX18sIGdyb3VwLCB0b190ZWxsLAorCQkgaW5vZGVfbWFyaywgdmZzbW50X21hcmssIGV2ZW50X21hc2ssIGRhdGEsIGRhdGFfdHlwZSk7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIHZmc21vdW50X21hcms9JXAgaW5vZGVfbWFyaz0lcCBtYXNrPSV4XG4iLAorCQkgX19mdW5jX18sIGdyb3VwLCB2ZnNtbnRfbWFyaywgaW5vZGVfbWFyaywgZXZlbnRfbWFzayk7CisKKwkvKiBzb3JyeSwgZmFub3RpZnkgb25seSBnaXZlcyBhIGRhbW4gYWJvdXQgZmlsZXMgYW5kIGRpcnMgKi8KKwlpZiAoIVNfSVNSRUcodG9fdGVsbC0+aV9tb2RlKSAmJgorCSAgICAhU19JU0RJUih0b190ZWxsLT5pX21vZGUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBpZiB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmZvIHRvIHNlbmQgYW4gZXZlbnQgdG8gdXNlcnNwYWNlIHNheSBubyAqLworCWlmIChkYXRhX3R5cGUgIT0gRlNOT1RJRllfRVZFTlRfRklMRSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGlub2RlX21hcmsgJiYgdmZzbW50X21hcmspIHsKKwkJbWFya3NfbWFzayA9ICh2ZnNtbnRfbWFyay0+bWFzayB8IGlub2RlX21hcmstPm1hc2spOworCQltYXJrc19pZ25vcmVkX21hc2sgPSAodmZzbW50X21hcmstPmlnbm9yZWRfbWFzayB8IGlub2RlX21hcmstPmlnbm9yZWRfbWFzayk7CisJfSBlbHNlIGlmIChpbm9kZV9tYXJrKSB7CisJCS8qCisJCSAqIGlmIHRoZSBldmVudCBpcyBmb3IgYSBjaGlsZCBhbmQgdGhpcyBpbm9kZSBkb2Vzbid0IGNhcmUgYWJvdXQKKwkJICogZXZlbnRzIG9uIHRoZSBjaGlsZCwgZG9uJ3Qgc2VuZCBpdCEKKwkJICovCisJCWlmICgoZXZlbnRfbWFzayAmIEZTX0VWRU5UX09OX0NISUxEKSAmJgorCQkgICAgIShpbm9kZV9tYXJrLT5tYXNrICYgRlNfRVZFTlRfT05fQ0hJTEQpKQorCQkJcmV0dXJuIGZhbHNlOworCQltYXJrc19tYXNrID0gaW5vZGVfbWFyay0+bWFzazsKKwkJbWFya3NfaWdub3JlZF9tYXNrID0gaW5vZGVfbWFyay0+aWdub3JlZF9tYXNrOworCX0gZWxzZSBpZiAodmZzbW50X21hcmspIHsKKwkJbWFya3NfbWFzayA9IHZmc21udF9tYXJrLT5tYXNrOworCQltYXJrc19pZ25vcmVkX21hc2sgPSB2ZnNtbnRfbWFyay0+aWdub3JlZF9tYXNrOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWlmIChldmVudF9tYXNrICYgbWFya3NfbWFzayAmIH5tYXJrc19pZ25vcmVkX21hc2spCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzIGZhbm90aWZ5X2Zzbm90aWZ5X29wcyA9IHsKKwkuaGFuZGxlX2V2ZW50ID0gZmFub3RpZnlfaGFuZGxlX2V2ZW50LAorCS5zaG91bGRfc2VuZF9ldmVudCA9IGZhbm90aWZ5X3Nob3VsZF9zZW5kX2V2ZW50LAorCS5mcmVlX2dyb3VwX3ByaXYgPSBOVUxMLAorCS5mcmVlX2V2ZW50X3ByaXYgPSBOVUxMLAorCS5mcmVlaW5nX21hcmsgPSBOVUxMLAorfTsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YTNiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCkBAIC0wLDAgKzEsNzYwIEBACisjaW5jbHVkZSA8bGludXgvZmFub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnlfYmFja2VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzIGZhbm90aWZ5X2Zzbm90aWZ5X29wczsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmYW5vdGlmeV9tYXJrX2NhY2hlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmZhbm90aWZ5X3Jlc3BvbnNlX2V2ZW50X2NhY2hlIF9fcmVhZF9tb3N0bHk7CisKK3N0cnVjdCBmYW5vdGlmeV9yZXNwb25zZV9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCV9fczMyIGZkOworCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQ7Cit9OworCisvKgorICogR2V0IGFuIGZzbm90aWZ5IG5vdGlmaWNhdGlvbiBldmVudCBpZiBvbmUgZXhpc3RzIGFuZCBpcyBzbWFsbAorICogZW5vdWdoIHRvIGZpdCBpbiAiY291bnQiLiBSZXR1cm4gYW4gZXJyb3IgcG9pbnRlciBpZiB0aGUgY291bnQKKyAqIGlzIG5vdCBsYXJnZSBlbm91Z2guCisgKgorICogQ2FsbGVkIHdpdGggdGhlIGdyb3VwLT5ub3RpZmljYXRpb25fbXV0ZXggaGVsZC4KKyAqLworc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZ2V0X29uZV9ldmVudChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkgICAgc2l6ZV90IGNvdW50KQoreworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KSk7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGNvdW50PSV6ZFxuIiwgX19mdW5jX18sIGdyb3VwLCBjb3VudCk7CisKKwlpZiAoZnNub3RpZnlfbm90aWZ5X3F1ZXVlX2lzX2VtcHR5KGdyb3VwKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoRkFOX0VWRU5UX01FVEFEQVRBX0xFTiA+IGNvdW50KQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qIGhlbGQgdGhlIG5vdGlmaWNhdGlvbl9tdXRleCB0aGUgd2hvbGUgdGltZSwgc28gdGhpcyBpcyB0aGUKKwkgKiBzYW1lIGV2ZW50IHdlIHBlZWtlZCBhYm92ZSAqLworCXJldHVybiBmc25vdGlmeV9yZW1vdmVfbm90aWZ5X2V2ZW50KGdyb3VwKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfZmQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCkKK3sKKwlpbnQgY2xpZW50X2ZkOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKKwlzdHJ1Y3QgZmlsZSAqbmV3X2ZpbGU7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKworCWNsaWVudF9mZCA9IGdldF91bnVzZWRfZmQoKTsKKwlpZiAoY2xpZW50X2ZkIDwgMCkKKwkJcmV0dXJuIGNsaWVudF9mZDsKKworCWlmIChldmVudC0+ZGF0YV90eXBlICE9IEZTTk9USUZZX0VWRU5UX0ZJTEUpIHsKKwkJV0FSTl9PTigxKTsKKwkJcHV0X3VudXNlZF9mZChjbGllbnRfZmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIHdlIG5lZWQgYSBuZXcgZmlsZSBoYW5kbGUgZm9yIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSBzbyBpdCBjYW4gcmVhZCBldmVuIGlmIGl0IHdhcworCSAqIG9yaWdpbmFsbHkgb3BlbmVkIE9fV1JPTkxZLgorCSAqLworCWRlbnRyeSA9IGRnZXQoZXZlbnQtPmZpbGUtPmZfcGF0aC5kZW50cnkpOworCW1udCA9IG1udGdldChldmVudC0+ZmlsZS0+Zl9wYXRoLm1udCk7CisJLyogaXQncyBwb3NzaWJsZSB0aGlzIGV2ZW50IHdhcyBhbiBvdmVyZmxvdyBldmVudC4gIGluIHRoYXQgY2FzZSBkZW50cnkgYW5kIG1udAorCSAqIGFyZSBOVUxMOyAgVGhhdCdzIGZpbmUsIGp1c3QgZG9uJ3QgY2FsbCBkZW50cnkgb3BlbiAqLworCWlmIChkZW50cnkgJiYgbW50KQorCQluZXdfZmlsZSA9IGRlbnRyeV9vcGVuKGRlbnRyeSwgbW50LAorCQkJCSAgICAgICBncm91cC0+ZmFub3RpZnlfZGF0YS5mX2ZsYWdzIHwgRk1PREVfTk9OT1RJRlksCisJCQkJICAgICAgIGN1cnJlbnRfY3JlZCgpKTsKKwllbHNlCisJCW5ld19maWxlID0gRVJSX1BUUigtRU9WRVJGTE9XKTsKKwlpZiAoSVNfRVJSKG5ld19maWxlKSkgeworCQkvKgorCQkgKiB3ZSBzdGlsbCBzZW5kIGFuIGV2ZW50IGV2ZW4gaWYgd2UgY2FuJ3Qgb3BlbiB0aGUgZmlsZS4gIHRoaXMKKwkJICogY2FuIGhhcHBlbiB3aGVuIHNheSB0YXNrcyBhcmUgZ29uZSBhbmQgd2UgdHJ5IHRvIG9wZW4gdGhlaXIKKwkJICogL3Byb2MgZmlsZXMgb3Igd2UgdHJ5IHRvIG9wZW4gYSBXUk9OTFkgZmlsZSBsaWtlIGluIHN5c2ZzCisJCSAqIHdlIGp1c3Qgc2VuZCB0aGUgZXJybm8gdG8gdXNlcnNwYWNlIHNpbmNlIHRoZXJlIGlzbid0IG11Y2gKKwkJICogZWxzZSB3ZSBjYW4gZG8uCisJCSAqLworCQlwdXRfdW51c2VkX2ZkKGNsaWVudF9mZCk7CisJCWNsaWVudF9mZCA9IFBUUl9FUlIobmV3X2ZpbGUpOworCX0gZWxzZSB7CisJCWZkX2luc3RhbGwoY2xpZW50X2ZkLCBuZXdfZmlsZSk7CisJfQorCisJcmV0dXJuIGNsaWVudF9mZDsKK30KKworc3RhdGljIHNzaXplX3QgZmlsbF9ldmVudF9tZXRhZGF0YShzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCSAgIHN0cnVjdCBmYW5vdGlmeV9ldmVudF9tZXRhZGF0YSAqbWV0YWRhdGEsCisJCQkJICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCkKK3sKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIG1ldGFkYXRhPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywKKwkJIGdyb3VwLCBtZXRhZGF0YSwgZXZlbnQpOworCisJbWV0YWRhdGEtPmV2ZW50X2xlbiA9IEZBTl9FVkVOVF9NRVRBREFUQV9MRU47CisJbWV0YWRhdGEtPnZlcnMgPSBGQU5PVElGWV9NRVRBREFUQV9WRVJTSU9OOworCW1ldGFkYXRhLT5tYXNrID0gZXZlbnQtPm1hc2sgJiBGQU5fQUxMX09VVEdPSU5HX0VWRU5UUzsKKwltZXRhZGF0YS0+cGlkID0gcGlkX3ZucihldmVudC0+dGdpZCk7CisJbWV0YWRhdGEtPmZkID0gY3JlYXRlX2ZkKGdyb3VwLCBldmVudCk7CisKKwlyZXR1cm4gbWV0YWRhdGEtPmZkOworfQorCisjaWZkZWYgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUworc3RhdGljIHN0cnVjdCBmYW5vdGlmeV9yZXNwb25zZV9ldmVudCAqZGVxdWV1ZV9yZShzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkJICBfX3MzMiBmZCkKK3sKKwlzdHJ1Y3QgZmFub3RpZnlfcmVzcG9uc2VfZXZlbnQgKnJlLCAqcmV0dXJuX3JlID0gTlVMTDsKKworCW11dGV4X2xvY2soJmdyb3VwLT5mYW5vdGlmeV9kYXRhLmFjY2Vzc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZSwgJmdyb3VwLT5mYW5vdGlmeV9kYXRhLmFjY2Vzc19saXN0LCBsaXN0KSB7CisJCWlmIChyZS0+ZmQgIT0gZmQpCisJCQljb250aW51ZTsKKworCQlsaXN0X2RlbF9pbml0KCZyZS0+bGlzdCk7CisJCXJldHVybl9yZSA9IHJlOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZncm91cC0+ZmFub3RpZnlfZGF0YS5hY2Nlc3NfbXV0ZXgpOworCisJcHJfZGVidWcoIiVzOiBmb3VuZCByZXR1cm5fcmU9JXBcbiIsIF9fZnVuY19fLCByZXR1cm5fcmUpOworCisJcmV0dXJuIHJldHVybl9yZTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2FjY2Vzc19yZXNwb25zZShzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCSAgIHN0cnVjdCBmYW5vdGlmeV9yZXNwb25zZSAqcmVzcG9uc2Vfc3RydWN0KQoreworCXN0cnVjdCBmYW5vdGlmeV9yZXNwb25zZV9ldmVudCAqcmU7CisJX19zMzIgZmQgPSByZXNwb25zZV9zdHJ1Y3QtPmZkOworCV9fdTMyIHJlc3BvbnNlID0gcmVzcG9uc2Vfc3RydWN0LT5yZXNwb25zZTsKKworCXByX2RlYnVnKCIlczogZ3JvdXA9JXAgZmQ9JWQgcmVzcG9uc2U9JWRcbiIsIF9fZnVuY19fLCBncm91cCwKKwkJIGZkLCByZXNwb25zZSk7CisJLyoKKwkgKiBtYWtlIHN1cmUgdGhlIHJlc3BvbnNlIGlzIHZhbGlkLCBpZiBpbnZhbGlkIHdlIGRvIG5vdGhpbmcgYW5kIGVpdGhlcgorCSAqIHVzZXJzcGFjZSBjYW4gc2VuZCBhIHZhbGlkIHJlc3BvbmNlIG9yIHdlIHdpbGwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlCisJICogdGltZW91dAorCSAqLworCXN3aXRjaCAocmVzcG9uc2UpIHsKKwljYXNlIEZBTl9BTExPVzoKKwljYXNlIEZBTl9ERU5ZOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlID0gZGVxdWV1ZV9yZShncm91cCwgZmQpOworCWlmICghcmUpCisJCXJldHVybiAtRU5PRU5UOworCisJcmUtPmV2ZW50LT5yZXNwb25zZSA9IHJlc3BvbnNlOworCisJd2FrZV91cCgmZ3JvdXAtPmZhbm90aWZ5X2RhdGEuYWNjZXNzX3dhaXRxKTsKKworCWttZW1fY2FjaGVfZnJlZShmYW5vdGlmeV9yZXNwb25zZV9ldmVudF9jYWNoZSwgcmUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfYWNjZXNzX3Jlc3BvbnNlKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgIF9fczMyIGZkKQoreworCXN0cnVjdCBmYW5vdGlmeV9yZXNwb25zZV9ldmVudCAqcmU7CisKKwlpZiAoIShldmVudC0+bWFzayAmIEZBTl9BTExfUEVSTV9FVkVOVFMpKQorCQlyZXR1cm4gMDsKKworCXJlID0ga21lbV9jYWNoZV9hbGxvYyhmYW5vdGlmeV9yZXNwb25zZV9ldmVudF9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZS0+ZXZlbnQgPSBldmVudDsKKwlyZS0+ZmQgPSBmZDsKKworCW11dGV4X2xvY2soJmdyb3VwLT5mYW5vdGlmeV9kYXRhLmFjY2Vzc19tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmcmUtPmxpc3QsICZncm91cC0+ZmFub3RpZnlfZGF0YS5hY2Nlc3NfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZncm91cC0+ZmFub3RpZnlfZGF0YS5hY2Nlc3NfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9hY2Nlc3NfcmVzcG9uc2Uoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkgICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50LAorCQkJCSAgIF9fczMyIGZkKQoreworCXN0cnVjdCBmYW5vdGlmeV9yZXNwb25zZV9ldmVudCAqcmU7CisKKwlpZiAoIShldmVudC0+bWFzayAmIEZBTl9BTExfUEVSTV9FVkVOVFMpKQorCQlyZXR1cm47CisKKwlyZSA9IGRlcXVldWVfcmUoZ3JvdXAsIGZkKTsKKwlpZiAoIXJlKQorCQlyZXR1cm47CisKKwlCVUdfT04ocmUtPmV2ZW50ICE9IGV2ZW50KTsKKworCWttZW1fY2FjaGVfZnJlZShmYW5vdGlmeV9yZXNwb25zZV9ldmVudF9jYWNoZSwgcmUpOworCisJcmV0dXJuOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfYWNjZXNzX3Jlc3BvbnNlKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQsCisJCQkJICAgICAgIF9fczMyIGZkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfYWNjZXNzX3Jlc3BvbnNlKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCwKKwkJCQkgICBfX3MzMiBmZCkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIHNzaXplX3QgY29weV9ldmVudF90b191c2VyKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50LAorCQkJCSAgY2hhciBfX3VzZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZmFub3RpZnlfZXZlbnRfbWV0YWRhdGEgZmFub3RpZnlfZXZlbnRfbWV0YWRhdGE7CisJaW50IGZkLCByZXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKworCWZkID0gZmlsbF9ldmVudF9tZXRhZGF0YShncm91cCwgJmZhbm90aWZ5X2V2ZW50X21ldGFkYXRhLCBldmVudCk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGZkOworCisJcmV0ID0gcHJlcGFyZV9mb3JfYWNjZXNzX3Jlc3BvbnNlKGdyb3VwLCBldmVudCwgZmQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCisJcmV0ID0gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgJmZhbm90aWZ5X2V2ZW50X21ldGFkYXRhLCBGQU5fRVZFTlRfTUVUQURBVEFfTEVOKSkKKwkJZ290byBvdXRfa2lsbF9hY2Nlc3NfcmVzcG9uc2U7CisKKwlyZXR1cm4gRkFOX0VWRU5UX01FVEFEQVRBX0xFTjsKKworb3V0X2tpbGxfYWNjZXNzX3Jlc3BvbnNlOgorCXJlbW92ZV9hY2Nlc3NfcmVzcG9uc2UoZ3JvdXAsIGV2ZW50LCBmZCk7CitvdXRfY2xvc2VfZmQ6CisJc3lzX2Nsb3NlKGZkKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBpbnRvZml5IHVzZXJzcGFjZSBmaWxlIGRlc2NyaXB0b3IgZnVuY3Rpb25zICovCitzdGF0aWMgdW5zaWduZWQgaW50IGZhbm90aWZ5X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXBvbGxfd2FpdChmaWxlLCAmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSwgd2FpdCk7CisJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CisJaWYgKCFmc25vdGlmeV9ub3RpZnlfcXVldWVfaXNfZW1wdHkoZ3JvdXApKQorCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCW11dGV4X3VubG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBmYW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXA7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICprZXZlbnQ7CisJY2hhciBfX3VzZXIgKnN0YXJ0OworCWludCByZXQ7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlzdGFydCA9IGJ1ZjsKKwlncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXByX2RlYnVnKCIlczogZ3JvdXA9JXBcbiIsIF9fZnVuY19fLCBncm91cCk7CisKKwl3aGlsZSAoMSkgeworCQlwcmVwYXJlX3RvX3dhaXQoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCW11dGV4X2xvY2soJmdyb3VwLT5ub3RpZmljYXRpb25fbXV0ZXgpOworCQlrZXZlbnQgPSBnZXRfb25lX2V2ZW50KGdyb3VwLCBjb3VudCk7CisJCW11dGV4X3VubG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CisKKwkJaWYgKGtldmVudCkgeworCQkJcmV0ID0gUFRSX0VSUihrZXZlbnQpOworCQkJaWYgKElTX0VSUihrZXZlbnQpKQorCQkJCWJyZWFrOworCQkJcmV0ID0gY29weV9ldmVudF90b191c2VyKGdyb3VwLCBrZXZlbnQsIGJ1Zik7CisJCQlmc25vdGlmeV9wdXRfZXZlbnQoa2V2ZW50KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCQkJYnVmICs9IHJldDsKKwkJCWNvdW50IC09IHJldDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gLUVBR0FJTjsKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkJYnJlYWs7CisJCXJldCA9IC1FSU5UUjsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXJ0ICE9IGJ1ZikKKwkJCWJyZWFrOworCisJCXNjaGVkdWxlKCk7CisJfQorCisJZmluaXNoX3dhaXQoJmdyb3VwLT5ub3RpZmljYXRpb25fd2FpdHEsICZ3YWl0KTsKKwlpZiAoc3RhcnQgIT0gYnVmICYmIHJldCAhPSAtRUZBVUxUKQorCQlyZXQgPSBidWYgLSBzdGFydDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBmYW5vdGlmeV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKyNpZmRlZiBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TCisJc3RydWN0IGZhbm90aWZ5X3Jlc3BvbnNlIHJlc3BvbnNlID0geyAuZmQgPSAtMSwgLnJlc3BvbnNlID0gLTEgfTsKKwlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOworCWludCByZXQ7CisKKwlncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChjb3VudCA+IHNpemVvZihyZXNwb25zZSkpCisJCWNvdW50ID0gc2l6ZW9mKHJlc3BvbnNlKTsKKworCXByX2RlYnVnKCIlczogZ3JvdXA9JXAgY291bnQ9JXp1XG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGNvdW50KTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmcmVzcG9uc2UsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHByb2Nlc3NfYWNjZXNzX3Jlc3BvbnNlKGdyb3VwLCAmcmVzcG9uc2UpOworCWlmIChyZXQgPCAwKQorCQljb3VudCA9IHJldDsKKworCXJldHVybiBjb3VudDsKKyNlbHNlCisJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKK30KKworc3RhdGljIGludCBmYW5vdGlmeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaWdub3JlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXByX2RlYnVnKCIlczogZmlsZT0lcCBncm91cD0lcFxuIiwgX19mdW5jX18sIGZpbGUsIGdyb3VwKTsKKworCS8qIG1hdGNoZXMgdGhlIGZhbm90aWZ5X2luaXQtPmZzbm90aWZ5X2FsbG9jX2dyb3VwICovCisJZnNub3RpZnlfcHV0X2dyb3VwKGdyb3VwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBmYW5vdGlmeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyICpob2xkZXI7CisJdm9pZCBfX3VzZXIgKnA7CisJaW50IHJldCA9IC1FTk9UVFk7CisJc2l6ZV90IHNlbmRfbGVuID0gMDsKKworCWdyb3VwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRklPTlJFQUQ6CisJCW11dGV4X2xvY2soJmdyb3VwLT5ub3RpZmljYXRpb25fbXV0ZXgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvbGRlciwgJmdyb3VwLT5ub3RpZmljYXRpb25fbGlzdCwgZXZlbnRfbGlzdCkKKwkJCXNlbmRfbGVuICs9IEZBTl9FVkVOVF9NRVRBREFUQV9MRU47CisJCW11dGV4X3VubG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CisJCXJldCA9IHB1dF91c2VyKHNlbmRfbGVuLCAoaW50IF9fdXNlciAqKSBwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmFub3RpZnlfZm9wcyA9IHsKKwkucG9sbAkJPSBmYW5vdGlmeV9wb2xsLAorCS5yZWFkCQk9IGZhbm90aWZ5X3JlYWQsCisJLndyaXRlCQk9IGZhbm90aWZ5X3dyaXRlLAorCS5mYXN5bmMJCT0gTlVMTCwKKwkucmVsZWFzZQk9IGZhbm90aWZ5X3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsCT0gZmFub3RpZnlfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IGZhbm90aWZ5X2lvY3RsLAorfTsKKworc3RhdGljIHZvaWQgZmFub3RpZnlfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaykKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoZmFub3RpZnlfbWFya19jYWNoZSwgZnNuX21hcmspOworfQorCitzdGF0aWMgaW50IGZhbm90aWZ5X2ZpbmRfcGF0aChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsCisJCQkgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZXQ7CisKKwlwcl9kZWJ1ZygiJXM6IGRmZD0lZCBmaWxlbmFtZT0lcCBmbGFncz0leFxuIiwgX19mdW5jX18sCisJCSBkZmQsIGZpbGVuYW1lLCBmbGFncyk7CisKKwlpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwkJaW50IGZwdXRfbmVlZGVkOworCisJCXJldCA9IC1FQkFERjsKKwkJZmlsZSA9IGZnZXRfbGlnaHQoZGZkLCAmZnB1dF9uZWVkZWQpOworCQlpZiAoIWZpbGUpCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSAtRU5PVERJUjsKKwkJaWYgKChmbGFncyAmIEZBTl9NQVJLX09OTFlESVIpICYmCisJCSAgICAhKFNfSVNESVIoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkpIHsKKwkJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkqcGF0aCA9IGZpbGUtPmZfcGF0aDsKKwkJcGF0aF9nZXQocGF0aCk7CisJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MgPSAwOworCisJCWlmICghKGZsYWdzICYgRkFOX01BUktfRE9OVF9GT0xMT1cpKQorCQkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9GT0xMT1c7CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX09OTFlESVIpCisJCQlsb29rdXBfZmxhZ3MgfD0gTE9PS1VQX0RJUkVDVE9SWTsKKworCQlyZXQgPSB1c2VyX3BhdGhfYXQoZGZkLCBmaWxlbmFtZSwgbG9va3VwX2ZsYWdzLCBwYXRoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIHlvdSBjYW4gb25seSB3YXRjaCBhbiBpbm9kZSBpZiB5b3UgaGF2ZSByZWFkIHBlcm1pc3Npb25zIG9uIGl0ICovCisJcmV0ID0gaW5vZGVfcGVybWlzc2lvbihwYXRoLT5kZW50cnktPmRfaW5vZGUsIE1BWV9SRUFEKTsKKwlpZiAocmV0KQorCQlwYXRoX3B1dChwYXRoKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX191MzIgZmFub3RpZnlfbWFya19yZW1vdmVfZnJvbV9tYXNrKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaywKKwkJCQkJICAgIF9fdTMyIG1hc2ssCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJX191MzIgb2xkbWFzazsKKworCXNwaW5fbG9jaygmZnNuX21hcmstPmxvY2spOworCWlmICghKGZsYWdzICYgRkFOX01BUktfSUdOT1JFRF9NQVNLKSkgeworCQlvbGRtYXNrID0gZnNuX21hcmstPm1hc2s7CisJCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKGZzbl9tYXJrLCAob2xkbWFzayAmIH5tYXNrKSk7CisJfSBlbHNlIHsKKwkJb2xkbWFzayA9IGZzbl9tYXJrLT5pZ25vcmVkX21hc2s7CisJCWZzbm90aWZ5X3NldF9tYXJrX2lnbm9yZWRfbWFza19sb2NrZWQoZnNuX21hcmssIChvbGRtYXNrICYgfm1hc2spKTsKKwl9CisJc3Bpbl91bmxvY2soJmZzbl9tYXJrLT5sb2NrKTsKKworCWlmICghKG9sZG1hc2sgJiB+bWFzaykpCisJCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhmc25fbWFyayk7CisKKwlyZXR1cm4gbWFzayAmIG9sZG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgZmFub3RpZnlfcmVtb3ZlX3Zmc21vdW50X21hcmsoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkJIHN0cnVjdCB2ZnNtb3VudCAqbW50LCBfX3UzMiBtYXNrLAorCQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyayA9IE5VTEw7CisJX191MzIgcmVtb3ZlZDsKKworCWZzbl9tYXJrID0gZnNub3RpZnlfZmluZF92ZnNtb3VudF9tYXJrKGdyb3VwLCBtbnQpOworCWlmICghZnNuX21hcmspCisJCXJldHVybiAtRU5PRU5UOworCisJcmVtb3ZlZCA9IGZhbm90aWZ5X21hcmtfcmVtb3ZlX2Zyb21fbWFzayhmc25fbWFyaywgbWFzaywgZmxhZ3MpOworCWZzbm90aWZ5X3B1dF9tYXJrKGZzbl9tYXJrKTsKKwlpZiAocmVtb3ZlZCAmIG1udC0+bW50X2Zzbm90aWZ5X21hc2spCisJCWZzbm90aWZ5X3JlY2FsY192ZnNtb3VudF9tYXNrKG1udCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYW5vdGlmeV9yZW1vdmVfaW5vZGVfbWFyayhzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTMyIG1hc2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyayA9IE5VTEw7CisJX191MzIgcmVtb3ZlZDsKKworCWZzbl9tYXJrID0gZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKGdyb3VwLCBpbm9kZSk7CisJaWYgKCFmc25fbWFyaykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZW1vdmVkID0gZmFub3RpZnlfbWFya19yZW1vdmVfZnJvbV9tYXNrKGZzbl9tYXJrLCBtYXNrLCBmbGFncyk7CisJLyogbWF0Y2hlcyB0aGUgZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKCkgKi8KKwlmc25vdGlmeV9wdXRfbWFyayhmc25fbWFyayk7CisJaWYgKHJlbW92ZWQgJiBpbm9kZS0+aV9mc25vdGlmeV9tYXNrKQorCQlmc25vdGlmeV9yZWNhbGNfaW5vZGVfbWFzayhpbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fdTMyIGZhbm90aWZ5X21hcmtfYWRkX3RvX21hc2soc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbl9tYXJrLAorCQkJCSAgICAgICBfX3UzMiBtYXNrLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJX191MzIgb2xkbWFzazsKKworCXNwaW5fbG9jaygmZnNuX21hcmstPmxvY2spOworCWlmICghKGZsYWdzICYgRkFOX01BUktfSUdOT1JFRF9NQVNLKSkgeworCQlvbGRtYXNrID0gZnNuX21hcmstPm1hc2s7CisJCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKGZzbl9tYXJrLCAob2xkbWFzayB8IG1hc2spKTsKKwl9IGVsc2UgeworCQlvbGRtYXNrID0gZnNuX21hcmstPmlnbm9yZWRfbWFzazsKKwkJZnNub3RpZnlfc2V0X21hcmtfaWdub3JlZF9tYXNrX2xvY2tlZChmc25fbWFyaywgKG9sZG1hc2sgfCBtYXNrKSk7CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX0lHTk9SRURfU1VSVl9NT0RJRlkpCisJCQlmc25fbWFyay0+ZmxhZ3MgfD0gRlNOT1RJRllfTUFSS19GTEFHX0lHTk9SRURfU1VSVl9NT0RJRlk7CisJfQorCXNwaW5fdW5sb2NrKCZmc25fbWFyay0+bG9jayk7CisKKwlyZXR1cm4gbWFzayAmIH5vbGRtYXNrOworfQorCitzdGF0aWMgaW50IGZhbm90aWZ5X2FkZF92ZnNtb3VudF9tYXJrKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsIF9fdTMyIG1hc2ssCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyazsKKwlfX3UzMiBhZGRlZDsKKworCWZzbl9tYXJrID0gZnNub3RpZnlfZmluZF92ZnNtb3VudF9tYXJrKGdyb3VwLCBtbnQpOworCWlmICghZnNuX21hcmspIHsKKwkJaW50IHJldDsKKworCQlmc25fbWFyayA9IGttZW1fY2FjaGVfYWxsb2MoZmFub3RpZnlfbWFya19jYWNoZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZnNuX21hcmspCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmc25vdGlmeV9pbml0X21hcmsoZnNuX21hcmssIGZhbm90aWZ5X2ZyZWVfbWFyayk7CisJCXJldCA9IGZzbm90aWZ5X2FkZF9tYXJrKGZzbl9tYXJrLCBncm91cCwgTlVMTCwgbW50LCAwKTsKKwkJaWYgKHJldCkgeworCQkJZmFub3RpZnlfZnJlZV9tYXJrKGZzbl9tYXJrKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisJYWRkZWQgPSBmYW5vdGlmeV9tYXJrX2FkZF90b19tYXNrKGZzbl9tYXJrLCBtYXNrLCBmbGFncyk7CisJZnNub3RpZnlfcHV0X21hcmsoZnNuX21hcmspOworCWlmIChhZGRlZCAmIH5tbnQtPm1udF9mc25vdGlmeV9tYXNrKQorCQlmc25vdGlmeV9yZWNhbGNfdmZzbW91bnRfbWFzayhtbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmFub3RpZnlfYWRkX2lub2RlX21hcmsoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBfX3UzMiBtYXNrLAorCQkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcms7CisJX191MzIgYWRkZWQ7CisKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGlub2RlPSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGlub2RlKTsKKworCWZzbl9tYXJrID0gZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKGdyb3VwLCBpbm9kZSk7CisJaWYgKCFmc25fbWFyaykgeworCQlpbnQgcmV0OworCisJCWZzbl9tYXJrID0ga21lbV9jYWNoZV9hbGxvYyhmYW5vdGlmeV9tYXJrX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmc25fbWFyaykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWZzbm90aWZ5X2luaXRfbWFyayhmc25fbWFyaywgZmFub3RpZnlfZnJlZV9tYXJrKTsKKwkJcmV0ID0gZnNub3RpZnlfYWRkX21hcmsoZnNuX21hcmssIGdyb3VwLCBpbm9kZSwgTlVMTCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCWZhbm90aWZ5X2ZyZWVfbWFyayhmc25fbWFyayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCWFkZGVkID0gZmFub3RpZnlfbWFya19hZGRfdG9fbWFzayhmc25fbWFyaywgbWFzaywgZmxhZ3MpOworCWZzbm90aWZ5X3B1dF9tYXJrKGZzbl9tYXJrKTsKKwlpZiAoYWRkZWQgJiB+aW5vZGUtPmlfZnNub3RpZnlfbWFzaykKKwkJZnNub3RpZnlfcmVjYWxjX2lub2RlX21hc2soaW5vZGUpOworCXJldHVybiAwOworfQorCisvKiBmYW5vdGlmeSBzeXNjYWxscyAqLworU1lTQ0FMTF9ERUZJTkUyKGZhbm90aWZ5X2luaXQsIHVuc2lnbmVkIGludCwgZmxhZ3MsIHVuc2lnbmVkIGludCwgZXZlbnRfZl9mbGFncykKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOworCWludCBmX2ZsYWdzLCBmZDsKKworCXByX2RlYnVnKCIlczogZmxhZ3M9JWQgZXZlbnRfZl9mbGFncz0lZFxuIiwKKwkJX19mdW5jX18sIGZsYWdzLCBldmVudF9mX2ZsYWdzKTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlpZiAoZmxhZ3MgJiB+RkFOX0FMTF9JTklUX0ZMQUdTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZfZmxhZ3MgPSBPX1JEV1IgfCBGTU9ERV9OT05PVElGWTsKKwlpZiAoZmxhZ3MgJiBGQU5fQ0xPRVhFQykKKwkJZl9mbGFncyB8PSBPX0NMT0VYRUM7CisJaWYgKGZsYWdzICYgRkFOX05PTkJMT0NLKQorCQlmX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisKKwkvKiBmc25vdGlmeV9hbGxvY19ncm91cCB0YWtlcyBhIHJlZi4gIERyb3BwZWQgaW4gZmFub3RpZnlfcmVsZWFzZSAqLworCWdyb3VwID0gZnNub3RpZnlfYWxsb2NfZ3JvdXAoJmZhbm90aWZ5X2Zzbm90aWZ5X29wcyk7CisJaWYgKElTX0VSUihncm91cCkpCisJCXJldHVybiBQVFJfRVJSKGdyb3VwKTsKKworCWdyb3VwLT5mYW5vdGlmeV9kYXRhLmZfZmxhZ3MgPSBldmVudF9mX2ZsYWdzOworI2lmZGVmIENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMKKwltdXRleF9pbml0KCZncm91cC0+ZmFub3RpZnlfZGF0YS5hY2Nlc3NfbXV0ZXgpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdyb3VwLT5mYW5vdGlmeV9kYXRhLmFjY2Vzc193YWl0cSk7CisJSU5JVF9MSVNUX0hFQUQoJmdyb3VwLT5mYW5vdGlmeV9kYXRhLmFjY2Vzc19saXN0KTsKKyNlbmRpZgorCisJZmQgPSBhbm9uX2lub2RlX2dldGZkKCJbZmFub3RpZnldIiwgJmZhbm90aWZ5X2ZvcHMsIGdyb3VwLCBmX2ZsYWdzKTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dF9wdXRfZ3JvdXA7CisKKwlyZXR1cm4gZmQ7CisKK291dF9wdXRfZ3JvdXA6CisJZnNub3RpZnlfcHV0X2dyb3VwKGdyb3VwKTsKKwlyZXR1cm4gZmQ7Cit9CisKK1NZU0NBTExfREVGSU5FKGZhbm90aWZ5X21hcmspKGludCBmYW5vdGlmeV9mZCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgX191NjQgbWFzaywgaW50IGRmZCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgIF9fdXNlciAqIHBhdGhuYW1lKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gTlVMTDsKKwlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBmaWxlICpmaWxwOworCXN0cnVjdCBwYXRoIHBhdGg7CisJaW50IHJldCwgZnB1dF9uZWVkZWQ7CisKKwlwcl9kZWJ1ZygiJXM6IGZhbm90aWZ5X2ZkPSVkIGZsYWdzPSV4IGRmZD0lZCBwYXRobmFtZT0lcCBtYXNrPSVsbHhcbiIsCisJCSBfX2Z1bmNfXywgZmFub3RpZnlfZmQsIGZsYWdzLCBkZmQsIHBhdGhuYW1lLCBtYXNrKTsKKworCS8qIHdlIG9ubHkgdXNlIHRoZSBsb3dlciAzMiBiaXRzIGFzIG9mIHJpZ2h0IG5vdy4gKi8KKwlpZiAobWFzayAmICgoX191NjQpMHhmZmZmZmZmZiA8PCAzMikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZsYWdzICYgfkZBTl9BTExfTUFSS19GTEFHUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChmbGFncyAmIChGQU5fTUFSS19BREQgfCBGQU5fTUFSS19SRU1PVkUgfCBGQU5fTUFSS19GTFVTSCkpIHsKKwljYXNlIEZBTl9NQVJLX0FERDoKKwljYXNlIEZBTl9NQVJLX1JFTU9WRToKKwljYXNlIEZBTl9NQVJLX0ZMVVNIOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjaWZkZWYgQ09ORklHX0ZBTk9USUZZX0FDQ0VTU19QRVJNSVNTSU9OUworCWlmIChtYXNrICYgfihGQU5fQUxMX0VWRU5UUyB8IEZBTl9BTExfUEVSTV9FVkVOVFMgfCBGQU5fRVZFTlRfT05fQ0hJTEQpKQorI2Vsc2UKKwlpZiAobWFzayAmIH4oRkFOX0FMTF9FVkVOVFMgfCBGQU5fRVZFTlRfT05fQ0hJTEQpKQorI2VuZGlmCisJCXJldHVybiAtRUlOVkFMOworCisJZmlscCA9IGZnZXRfbGlnaHQoZmFub3RpZnlfZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKHVubGlrZWx5KCFmaWxwKSkKKwkJcmV0dXJuIC1FQkFERjsKKworCS8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGFuIGZhbm90aWZ5IGluc3RhbmNlICovCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmZmFub3RpZnlfZm9wcykpCisJCWdvdG8gZnB1dF9hbmRfb3V0OworCisJcmV0ID0gZmFub3RpZnlfZmluZF9wYXRoKGRmZCwgcGF0aG5hbWUsICZwYXRoLCBmbGFncyk7CisJaWYgKHJldCkKKwkJZ290byBmcHV0X2FuZF9vdXQ7CisKKwkvKiBpbm9kZSBoZWxkIGluIHBsYWNlIGJ5IHJlZmVyZW5jZSB0byBwYXRoOyBncm91cCBieSBmZ2V0IG9uIGZkICovCisJaWYgKCEoZmxhZ3MgJiBGQU5fTUFSS19NT1VOVCkpCisJCWlub2RlID0gcGF0aC5kZW50cnktPmRfaW5vZGU7CisJZWxzZQorCQltbnQgPSBwYXRoLm1udDsKKwlncm91cCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCS8qIGNyZWF0ZS91cGRhdGUgYW4gaW5vZGUgbWFyayAqLworCXN3aXRjaCAoZmxhZ3MgJiAoRkFOX01BUktfQUREIHwgRkFOX01BUktfUkVNT1ZFIHwgRkFOX01BUktfRkxVU0gpKSB7CisJY2FzZSBGQU5fTUFSS19BREQ6CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX01PVU5UKQorCQkJcmV0ID0gZmFub3RpZnlfYWRkX3Zmc21vdW50X21hcmsoZ3JvdXAsIG1udCwgbWFzaywgZmxhZ3MpOworCQllbHNlCisJCQlyZXQgPSBmYW5vdGlmeV9hZGRfaW5vZGVfbWFyayhncm91cCwgaW5vZGUsIG1hc2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBGQU5fTUFSS19SRU1PVkU6CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX01PVU5UKQorCQkJcmV0ID0gZmFub3RpZnlfcmVtb3ZlX3Zmc21vdW50X21hcmsoZ3JvdXAsIG1udCwgbWFzaywgZmxhZ3MpOworCQllbHNlCisJCQlyZXQgPSBmYW5vdGlmeV9yZW1vdmVfaW5vZGVfbWFyayhncm91cCwgaW5vZGUsIG1hc2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBGQU5fTUFSS19GTFVTSDoKKwkJaWYgKGZsYWdzICYgRkFOX01BUktfTU9VTlQpCisJCQlmc25vdGlmeV9jbGVhcl92ZnNtb3VudF9tYXJrc19ieV9ncm91cChncm91cCk7CisJCWVsc2UKKwkJCWZzbm90aWZ5X2NsZWFyX2lub2RlX21hcmtzX2J5X2dyb3VwKGdyb3VwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlwYXRoX3B1dCgmcGF0aCk7CitmcHV0X2FuZF9vdXQ6CisJZnB1dF9saWdodChmaWxwLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlMKK2FzbWxpbmthZ2UgbG9uZyBTeVNfZmFub3RpZnlfbWFyayhsb25nIGZhbm90aWZ5X2ZkLCBsb25nIGZsYWdzLCBfX3U2NCBtYXNrLAorCQkJCSAgbG9uZyBkZmQsIGxvbmcgcGF0aG5hbWUpCit7CisJcmV0dXJuIFNZU0NfZmFub3RpZnlfbWFyaygoaW50KSBmYW5vdGlmeV9mZCwgKHVuc2lnbmVkIGludCkgZmxhZ3MsCisJCQkJICBtYXNrLCAoaW50KSBkZmQsCisJCQkJICAoY29uc3QgY2hhciAgX191c2VyICopIHBhdGhuYW1lKTsKK30KK1NZU0NBTExfQUxJQVMoc3lzX2Zhbm90aWZ5X21hcmssIFN5U19mYW5vdGlmeV9tYXJrKTsKKyNlbmRpZgorCisvKgorICogZmFub3RpZnlfdXNlcl9zZXR1cCAtIE91ciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIE5vdGUgdGhhdCB3ZSBjYW5ubm90IHJldHVybgorICogZXJyb3IgYmVjYXVzZSB3ZSBoYXZlIGNvbXBpbGVkLWluIFZGUyBob29rcy4gIFNvIGFuICh1bmxpa2VseSkgZmFpbHVyZSBoZXJlCisgKiBtdXN0IHJlc3VsdCBpbiBwYW5pYygpLgorICovCitzdGF0aWMgaW50IF9faW5pdCBmYW5vdGlmeV91c2VyX3NldHVwKHZvaWQpCit7CisJZmFub3RpZnlfbWFya19jYWNoZSA9IEtNRU1fQ0FDSEUoZnNub3RpZnlfbWFyaywgU0xBQl9QQU5JQyk7CisJZmFub3RpZnlfcmVzcG9uc2VfZXZlbnRfY2FjaGUgPSBLTUVNX0NBQ0hFKGZhbm90aWZ5X3Jlc3BvbnNlX2V2ZW50LAorCQkJCQkJICAgU0xBQl9QQU5JQyk7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChmYW5vdGlmeV91c2VyX3NldHVwKTsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mc25vdGlmeS5jIGIvZnMvbm90aWZ5L2Zzbm90aWZ5LmMKaW5kZXggZmNjMmYwNi4uNGQyYTgyYyAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Zzbm90aWZ5LmMKKysrIGIvZnMvbm90aWZ5L2Zzbm90aWZ5LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeV9iYWNrZW5kLmg+CkBAIC0zNSw2ICszNiwxMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19mc25vdGlmeV9pbm9kZV9kZWxldGUpOwogCit2b2lkIF9fZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCWZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X21vdW50KG1udCk7Cit9CisKIC8qCiAgKiBHaXZlbiBhbiBpbm9kZSwgZmlyc3QgY2hlY2sgaWYgd2UgY2FyZSB3aGF0IGhhcHBlbnMgdG8gb3VyIGNoaWxkcmVuLiAgSW5vdGlmeQogICogYW5kIGRub3RpZnkgYm90aCB0ZWxsIHRoZWlyIHBhcmVudHMgYWJvdXQgZXZlbnRzLiAgSWYgd2UgY2FyZSBhYm91dCBhbnkgZXZlbnQKQEAgLTc4LDEzICs4NCwxNiBAQAogfQogCiAvKiBOb3RpZnkgdGhpcyBkZW50cnkncyBwYXJlbnQgYWJvdXQgYSBjaGlsZCdzIGV2ZW50cy4gKi8KLXZvaWQgX19mc25vdGlmeV9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX3UzMiBtYXNrKQordm9pZCBfX2Zzbm90aWZ5X3BhcmVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBfX3UzMiBtYXNrKQogewogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKnBfaW5vZGU7CiAJYm9vbCBzZW5kID0gZmFsc2U7CiAJYm9vbCBzaG91bGRfdXBkYXRlX2NoaWxkcmVuID0gZmFsc2U7CiAKKwlpZiAoIWRlbnRyeSkKKwkJZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwogCWlmICghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9GU05PVElGWV9QQVJFTlRfV0FUQ0hFRCkpCiAJCXJldHVybjsKIApAQCAtMTE1LDggKzEyNCwxMiBAQAogCQkgKiBzcGVjaWZpZXMgdGhlc2UgYXJlIGV2ZW50cyB3aGljaCBjYW1lIGZyb20gYSBjaGlsZC4gKi8KIAkJbWFzayB8PSBGU19FVkVOVF9PTl9DSElMRDsKIAotCQlmc25vdGlmeShwX2lub2RlLCBtYXNrLCBkZW50cnktPmRfaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLAotCQkJIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIDApOworCQlpZiAoZmlsZSkKKwkJCWZzbm90aWZ5KHBfaW5vZGUsIG1hc2ssIGZpbGUsIEZTTk9USUZZX0VWRU5UX0ZJTEUsCisJCQkJIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIDApOworCQllbHNlCisJCQlmc25vdGlmeShwX2lub2RlLCBtYXNrLCBkZW50cnktPmRfaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLAorCQkJCSBkZW50cnktPmRfbmFtZS5uYW1lLCAwKTsKIAkJZHB1dChwYXJlbnQpOwogCX0KIApAQCAtMTI3LDYzICsxNDAsMTgxIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2Zzbm90aWZ5X3BhcmVudCk7CiAKK3N0YXRpYyBpbnQgc2VuZF90b19ncm91cChzdHJ1Y3QgaW5vZGUgKnRvX3RlbGwsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJIHN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLAorCQkJIHN0cnVjdCBmc25vdGlmeV9tYXJrICp2ZnNtb3VudF9tYXJrLAorCQkJIF9fdTMyIG1hc2ssIHZvaWQgKmRhdGEsCisJCQkgaW50IGRhdGFfaXMsIHUzMiBjb29raWUsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqZmlsZV9uYW1lLAorCQkJIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqKmV2ZW50KQoreworCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAgPSBpbm9kZV9tYXJrLT5ncm91cDsKKwlfX3UzMiBpbm9kZV90ZXN0X21hc2sgPSAobWFzayAmIH5GU19FVkVOVF9PTl9DSElMRCk7CisJX191MzIgdmZzbW91bnRfdGVzdF9tYXNrID0gKG1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQpOworCisJcHJfZGVidWcoIiVzOiBncm91cD0lcCB0b190ZWxsPSVwIG1udD0lcCBtYXJrPSVwIG1hc2s9JXggZGF0YT0lcCIKKwkJICIgZGF0YV9pcz0lZCBjb29raWU9JWQgZXZlbnQ9JXBcbiIsIF9fZnVuY19fLCBncm91cCwgdG9fdGVsbCwKKwkJIG1udCwgaW5vZGVfbWFyaywgbWFzaywgZGF0YSwgZGF0YV9pcywgY29va2llLCAqZXZlbnQpOworCisJLyogY2xlYXIgaWdub3JlZCBvbiBpbm9kZSBtb2RpZmljYXRpb24gKi8KKwlpZiAobWFzayAmIEZTX01PRElGWSkgeworCQlpZiAoaW5vZGVfbWFyayAmJgorCQkgICAgIShpbm9kZV9tYXJrLT5mbGFncyAmIEZTTk9USUZZX01BUktfRkxBR19JR05PUkVEX1NVUlZfTU9ESUZZKSkKKwkJCWlub2RlX21hcmstPmlnbm9yZWRfbWFzayA9IDA7CisJCWlmICh2ZnNtb3VudF9tYXJrICYmCisJCSAgICAhKHZmc21vdW50X21hcmstPmZsYWdzICYgRlNOT1RJRllfTUFSS19GTEFHX0lHTk9SRURfU1VSVl9NT0RJRlkpKQorCQkJdmZzbW91bnRfbWFyay0+aWdub3JlZF9tYXNrID0gMDsKKwl9CisKKwkvKiBkb2VzIHRoZSBpbm9kZSBtYXJrIHRlbGwgdXMgdG8gZG8gc29tZXRoaW5nPyAqLworCWlmIChpbm9kZV9tYXJrKSB7CisJCWlub2RlX3Rlc3RfbWFzayAmPSBpbm9kZV9tYXJrLT5tYXNrOworCQlpbm9kZV90ZXN0X21hc2sgJj0gfmlub2RlX21hcmstPmlnbm9yZWRfbWFzazsKKwl9CisKKwkvKiBkb2VzIHRoZSB2ZnNtb3VudF9tYXJrIHRlbGwgdXMgdG8gZG8gc29tZXRoaW5nPyAqLworCWlmICh2ZnNtb3VudF9tYXJrKSB7CisJCXZmc21vdW50X3Rlc3RfbWFzayAmPSB2ZnNtb3VudF9tYXJrLT5tYXNrOworCQl2ZnNtb3VudF90ZXN0X21hc2sgJj0gfnZmc21vdW50X21hcmstPmlnbm9yZWRfbWFzazsKKwkJaWYgKGlub2RlX21hcmspCisJCQl2ZnNtb3VudF90ZXN0X21hc2sgJj0gfmlub2RlX21hcmstPmlnbm9yZWRfbWFzazsKKwl9CisKKwlpZiAoIWlub2RlX3Rlc3RfbWFzayAmJiAhdmZzbW91bnRfdGVzdF9tYXNrKQorCQlyZXR1cm4gMDsKKworCWlmIChncm91cC0+b3BzLT5zaG91bGRfc2VuZF9ldmVudChncm91cCwgdG9fdGVsbCwgaW5vZGVfbWFyaywKKwkJCQkJICB2ZnNtb3VudF9tYXJrLCBtYXNrLCBkYXRhLAorCQkJCQkgIGRhdGFfaXMpID09IGZhbHNlKQorCQlyZXR1cm4gMDsKKworCWlmICghKmV2ZW50KSB7CisJCSpldmVudCA9IGZzbm90aWZ5X2NyZWF0ZV9ldmVudCh0b190ZWxsLCBtYXNrLCBkYXRhLAorCQkJCQkJZGF0YV9pcywgZmlsZV9uYW1lLAorCQkJCQkJY29va2llLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqZXZlbnQpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIGdyb3VwLT5vcHMtPmhhbmRsZV9ldmVudChncm91cCwgaW5vZGVfbWFyaywgdmZzbW91bnRfbWFyaywgKmV2ZW50KTsKK30KKwogLyoKICAqIFRoaXMgaXMgdGhlIG1haW4gY2FsbCB0byBmc25vdGlmeS4gIFRoZSBWRlMgY2FsbHMgaW50byBob29rIHNwZWNpZmljIGZ1bmN0aW9ucwogICogaW4gbGludXgvZnNub3RpZnkuaC4gIFRob3NlIGZ1bmN0aW9ucyB0aGVuIGluIHR1cm4gY2FsbCBoZXJlLiAgSGVyZSB3aWxsIGNhbGwKICAqIG91dCB0byBhbGwgb2YgdGhlIHJlZ2lzdGVyZWQgZnNub3RpZnlfZ3JvdXAuICBUaG9zZSBncm91cHMgY2FuIHRoZW4gdXNlIHRoZQogICogbm90aWZpY2F0aW9uIGV2ZW50IGluIHdoYXRldmVyIG1lYW5zIHRoZXkgZmVlbCBuZWNlc3NhcnkuCiAgKi8KLXZvaWQgZnNub3RpZnkoc3RydWN0IGlub2RlICp0b190ZWxsLCBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV9pcywgY29uc3QgY2hhciAqZmlsZV9uYW1lLCB1MzIgY29va2llKQoraW50IGZzbm90aWZ5KHN0cnVjdCBpbm9kZSAqdG9fdGVsbCwgX191MzIgbWFzaywgdm9pZCAqZGF0YSwgaW50IGRhdGFfaXMsCisJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlX25hbWUsIHUzMiBjb29raWUpCiB7Ci0Jc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaW5vZGVfbm9kZSwgKnZmc21vdW50X25vZGU7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmsgPSBOVUxMLCAqdmZzbW91bnRfbWFyayA9IE5VTEw7CisJc3RydWN0IGZzbm90aWZ5X2dyb3VwICppbm9kZV9ncm91cCwgKnZmc21vdW50X2dyb3VwOwogCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQgPSBOVUxMOwotCWludCBpZHg7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisJaW50IGlkeCwgcmV0ID0gMDsKKwlib29sIHVzZWRfaW5vZGUgPSBmYWxzZSwgdXNlZF92ZnNtb3VudCA9IGZhbHNlOwogCS8qIGdsb2JhbCB0ZXN0cyBzaG91bGRuJ3QgY2FyZSBhYm91dCBldmVudHMgb24gY2hpbGQgb25seSB0aGUgc3BlY2lmaWMgZXZlbnQgKi8KIAlfX3UzMiB0ZXN0X21hc2sgPSAobWFzayAmIH5GU19FVkVOVF9PTl9DSElMRCk7CiAKLQlpZiAobGlzdF9lbXB0eSgmZnNub3RpZnlfZ3JvdXBzKSkKLQkJcmV0dXJuOworCWlmIChkYXRhX2lzID09IEZTTk9USUZZX0VWRU5UX0ZJTEUpCisJCW1udCA9ICgoc3RydWN0IGZpbGUgKilkYXRhKS0+Zl9wYXRoLm1udDsKKwllbHNlCisJCW1udCA9IE5VTEw7CiAKLQlpZiAoISh0ZXN0X21hc2sgJiBmc25vdGlmeV9tYXNrKSkKLQkJcmV0dXJuOwotCi0JaWYgKCEodGVzdF9tYXNrICYgdG9fdGVsbC0+aV9mc25vdGlmeV9tYXNrKSkKLQkJcmV0dXJuOwogCS8qCi0JICogU1JDVSEhICB0aGUgZ3JvdXBzIGxpc3QgaXMgdmVyeSB2ZXJ5IG11Y2ggcmVhZCBvbmx5IGFuZCB0aGUgcGF0aCBpcwotCSAqIHZlcnkgaG90LiAgVGhlIFZBU1QgbWFqb3JpdHkgb2YgZXZlbnRzIGFyZSBub3QgZ29pbmcgdG8gbmVlZCB0byBkbwotCSAqIGFueXRoaW5nIG90aGVyIHRoYW4gd2FsayB0aGUgbGlzdCBzbyBpdCdzIGNyYXp5IHRvIHByZS1hbGxvY2F0ZS4KKwkgKiBpZiB0aGlzIGlzIGEgbW9kaWZ5IGV2ZW50IHdlIG1heSBuZWVkIHRvIGNsZWFyIHRoZSBpZ25vcmVkIG1hc2tzCisJICogb3RoZXJ3aXNlIHJldHVybiBpZiBuZWl0aGVyIHRoZSBpbm9kZSBub3IgdGhlIHZmc21vdW50IGNhcmUgYWJvdXQKKwkgKiB0aGlzIHR5cGUgb2YgZXZlbnQuCiAJICovCi0JaWR4ID0gc3JjdV9yZWFkX2xvY2soJmZzbm90aWZ5X2dycF9zcmN1KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShncm91cCwgJmZzbm90aWZ5X2dyb3VwcywgZ3JvdXBfbGlzdCkgewotCQlpZiAodGVzdF9tYXNrICYgZ3JvdXAtPm1hc2spIHsKLQkJCWlmICghZ3JvdXAtPm9wcy0+c2hvdWxkX3NlbmRfZXZlbnQoZ3JvdXAsIHRvX3RlbGwsIG1hc2spKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFldmVudCkgewotCQkJCWV2ZW50ID0gZnNub3RpZnlfY3JlYXRlX2V2ZW50KHRvX3RlbGwsIG1hc2ssIGRhdGEsCi0JCQkJCQkJICAgICAgZGF0YV9pcywgZmlsZV9uYW1lLCBjb29raWUsCi0JCQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JCQkJLyogc2hpdCwgd2UgT09NJ2QgYW5kIG5vdyB3ZSBjYW4ndCB0ZWxsLCBtYXliZQotCQkJCSAqIHNvbWVkYXkgc29tZW9uZSBlbHNlIHdpbGwgd2FudCB0byBkbyBzb21ldGhpbmcKLQkJCQkgKiBoZXJlICovCi0JCQkJaWYgKCFldmVudCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlncm91cC0+b3BzLT5oYW5kbGVfZXZlbnQoZ3JvdXAsIGV2ZW50KTsKLQkJfQorCWlmICghKG1hc2sgJiBGU19NT0RJRlkpICYmCisJICAgICEodGVzdF9tYXNrICYgdG9fdGVsbC0+aV9mc25vdGlmeV9tYXNrKSAmJgorCSAgICAhKG1udCAmJiB0ZXN0X21hc2sgJiBtbnQtPm1udF9mc25vdGlmeV9tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygmZnNub3RpZnlfbWFya19zcmN1KTsKKworCWlmICgobWFzayAmIEZTX01PRElGWSkgfHwKKwkgICAgKHRlc3RfbWFzayAmIHRvX3RlbGwtPmlfZnNub3RpZnlfbWFzaykpCisJCWlub2RlX25vZGUgPSBzcmN1X2RlcmVmZXJlbmNlKHRvX3RlbGwtPmlfZnNub3RpZnlfbWFya3MuZmlyc3QsCisJCQkJCSAgICAgICZmc25vdGlmeV9tYXJrX3NyY3UpOworCWVsc2UKKwkJaW5vZGVfbm9kZSA9IE5VTEw7CisKKwlpZiAobW50KSB7CisJCWlmICgobWFzayAmIEZTX01PRElGWSkgfHwKKwkJICAgICh0ZXN0X21hc2sgJiBtbnQtPm1udF9mc25vdGlmeV9tYXNrKSkKKwkJCXZmc21vdW50X25vZGUgPSBzcmN1X2RlcmVmZXJlbmNlKG1udC0+bW50X2Zzbm90aWZ5X21hcmtzLmZpcnN0LAorCQkJCQkJCSAmZnNub3RpZnlfbWFya19zcmN1KTsKKwkJZWxzZQorCQkJdmZzbW91bnRfbm9kZSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbW50ID0gTlVMTDsKKwkJdmZzbW91bnRfbm9kZSA9IE5VTEw7CiAJfQotCXNyY3VfcmVhZF91bmxvY2soJmZzbm90aWZ5X2dycF9zcmN1LCBpZHgpOworCisJd2hpbGUgKGlub2RlX25vZGUgfHwgdmZzbW91bnRfbm9kZSkgeworCQlpZiAoaW5vZGVfbm9kZSkgeworCQkJaW5vZGVfbWFyayA9IGhsaXN0X2VudHJ5KHNyY3VfZGVyZWZlcmVuY2UoaW5vZGVfbm9kZSwgJmZzbm90aWZ5X21hcmtfc3JjdSksCisJCQkJCQkgc3RydWN0IGZzbm90aWZ5X21hcmssIGkuaV9saXN0KTsKKwkJCWlub2RlX2dyb3VwID0gaW5vZGVfbWFyay0+Z3JvdXA7CisJCX0gZWxzZQorCQkJaW5vZGVfZ3JvdXAgPSAodm9pZCAqKS0xOworCisJCWlmICh2ZnNtb3VudF9ub2RlKSB7CisJCQl2ZnNtb3VudF9tYXJrID0gaGxpc3RfZW50cnkoc3JjdV9kZXJlZmVyZW5jZSh2ZnNtb3VudF9ub2RlLCAmZnNub3RpZnlfbWFya19zcmN1KSwKKwkJCQkJCQlzdHJ1Y3QgZnNub3RpZnlfbWFyaywgbS5tX2xpc3QpOworCQkJdmZzbW91bnRfZ3JvdXAgPSB2ZnNtb3VudF9tYXJrLT5ncm91cDsKKwkJfSBlbHNlCisJCQl2ZnNtb3VudF9ncm91cCA9ICh2b2lkICopLTE7CisKKwkJaWYgKGlub2RlX2dyb3VwIDwgdmZzbW91bnRfZ3JvdXApIHsKKwkJCS8qIGhhbmRsZSBpbm9kZSAqLworCQkJc2VuZF90b19ncm91cCh0b190ZWxsLCBOVUxMLCBpbm9kZV9tYXJrLCBOVUxMLCBtYXNrLCBkYXRhLAorCQkJCSAgICAgIGRhdGFfaXMsIGNvb2tpZSwgZmlsZV9uYW1lLCAmZXZlbnQpOworCQkJdXNlZF9pbm9kZSA9IHRydWU7CisJCX0gZWxzZSBpZiAodmZzbW91bnRfZ3JvdXAgPCBpbm9kZV9ncm91cCkgeworCQkJc2VuZF90b19ncm91cCh0b190ZWxsLCBtbnQsIE5VTEwsIHZmc21vdW50X21hcmssIG1hc2ssIGRhdGEsCisJCQkJICAgICAgZGF0YV9pcywgY29va2llLCBmaWxlX25hbWUsICZldmVudCk7CisJCQl1c2VkX3Zmc21vdW50ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXNlbmRfdG9fZ3JvdXAodG9fdGVsbCwgbW50LCBpbm9kZV9tYXJrLCB2ZnNtb3VudF9tYXJrLAorCQkJCSAgICAgIG1hc2ssIGRhdGEsIGRhdGFfaXMsIGNvb2tpZSwgZmlsZV9uYW1lLAorCQkJCSAgICAgICZldmVudCk7CisJCQl1c2VkX3Zmc21vdW50ID0gdHJ1ZTsKKwkJCXVzZWRfaW5vZGUgPSB0cnVlOworCQl9CisKKwkJaWYgKHVzZWRfaW5vZGUpCisJCQlpbm9kZV9ub2RlID0gc3JjdV9kZXJlZmVyZW5jZShpbm9kZV9ub2RlLT5uZXh0LAorCQkJCQkJICAgICAgJmZzbm90aWZ5X21hcmtfc3JjdSk7CisJCWlmICh1c2VkX3Zmc21vdW50KQorCQkJdmZzbW91bnRfbm9kZSA9IHNyY3VfZGVyZWZlcmVuY2UodmZzbW91bnRfbm9kZS0+bmV4dCwKKwkJCQkJCQkgJmZzbm90aWZ5X21hcmtfc3JjdSk7CisJfQorCisJc3JjdV9yZWFkX3VubG9jaygmZnNub3RpZnlfbWFya19zcmN1LCBpZHgpOwogCS8qCiAJICogZnNub3RpZnlfY3JlYXRlX2V2ZW50KCkgdG9vayBhIHJlZmVyZW5jZSBzbyB0aGUgZXZlbnQgY2FuJ3QgYmUgY2xlYW5lZAogCSAqIHVwIHdoaWxlIHdlIGFyZSBzdGlsbCB0cnlpbmcgdG8gYWRkIGl0IHRvIGxpc3RzLCBkcm9wIHRoYXQgb25lLgogCSAqLwogCWlmIChldmVudCkKIAkJZnNub3RpZnlfcHV0X2V2ZW50KGV2ZW50KTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc25vdGlmeSk7CiAKIHN0YXRpYyBfX2luaXQgaW50IGZzbm90aWZ5X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gaW5pdF9zcmN1X3N0cnVjdCgmZnNub3RpZnlfZ3JwX3NyY3UpOworCWludCByZXQ7CisKKwlCVUdfT04oaHdlaWdodDMyKEFMTF9GU05PVElGWV9FVkVOVFMpICE9IDIzKTsKKworCXJldCA9IGluaXRfc3JjdV9zdHJ1Y3QoJmZzbm90aWZ5X21hcmtfc3JjdSk7CisJaWYgKHJldCkKKwkJcGFuaWMoImluaXRpYWxpemluZyBmc25vdGlmeV9tYXJrX3NyY3UiKTsKKworCXJldHVybiAwOwogfQotc3Vic3lzX2luaXRjYWxsKGZzbm90aWZ5X2luaXQpOworY29yZV9pbml0Y2FsbChmc25vdGlmeV9pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9mc25vdGlmeS5oIGIvZnMvbm90aWZ5L2Zzbm90aWZ5LmgKaW5kZXggNGRjMjQwOC4uODVlN2QyYiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2Zzbm90aWZ5LmgKKysrIGIvZnMvbm90aWZ5L2Zzbm90aWZ5LmgKQEAgLTYsMjEgKzYsMzQgQEAKICNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotLyogcHJvdGVjdHMgcmVhZHMgb2YgZnNub3RpZnlfZ3JvdXBzICovCi1leHRlcm4gc3RydWN0IHNyY3Vfc3RydWN0IGZzbm90aWZ5X2dycF9zcmN1OwotLyogYWxsIGdyb3VwcyB3aGljaCByZWNlaXZlIGZzbm90aWZ5IGV2ZW50cyAqLwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZnNub3RpZnlfZ3JvdXBzOwotLyogYWxsIGJpdHdpc2UgT1Igb2YgYWxsIGV2ZW50IHR5cGVzIChGU18qKSBmb3IgYWxsIGZzbm90aWZ5X2dyb3VwcyAqLwotZXh0ZXJuIF9fdTMyIGZzbm90aWZ5X21hc2s7Ci0KIC8qIGRlc3Ryb3kgYWxsIGV2ZW50cyBzaXR0aW5nIGluIHRoaXMgZ3JvdXBzIG5vdGlmaWNhdGlvbiBxdWV1ZSAqLwogZXh0ZXJuIHZvaWQgZnNub3RpZnlfZmx1c2hfbm90aWZ5KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApOwogCisvKiBwcm90ZWN0cyByZWFkcyBvZiBpbm9kZSBhbmQgdmZzbW91bnQgbWFya3MgbGlzdCAqLworZXh0ZXJuIHN0cnVjdCBzcmN1X3N0cnVjdCBmc25vdGlmeV9tYXJrX3NyY3U7CisKK2V4dGVybiB2b2lkIGZzbm90aWZ5X3NldF9pbm9kZV9tYXJrX21hc2tfbG9ja2VkKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaywKKwkJCQkJCV9fdTMyIG1hc2spOworLyogYWRkIGEgbWFyayB0byBhbiBpbm9kZSAqLworZXh0ZXJuIGludCBmc25vdGlmeV9hZGRfaW5vZGVfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaywKKwkJCQkgICBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIGludCBhbGxvd19kdXBzKTsKKy8qIGFkZCBhIG1hcmsgdG8gYSB2ZnNtb3VudCAqLworZXh0ZXJuIGludCBmc25vdGlmeV9hZGRfdmZzbW91bnRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaywKKwkJCQkgICAgICBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKKwkJCQkgICAgICBpbnQgYWxsb3dfZHVwcyk7CisKIC8qIGZpbmFsIGtmcmVlIG9mIGEgZ3JvdXAgKi8KIGV4dGVybiB2b2lkIGZzbm90aWZ5X2ZpbmFsX2Rlc3Ryb3lfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCk7CiAKKy8qIHZmc21vdW50IHNwZWNpZmljIGRlc3RydWN0aW9uIG9mIGEgbWFyayAqLworZXh0ZXJuIHZvaWQgZnNub3RpZnlfZGVzdHJveV92ZnNtb3VudF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsKKy8qIGlub2RlIHNwZWNpZmljIGRlc3RydWN0aW9uIG9mIGEgbWFyayAqLworZXh0ZXJuIHZvaWQgZnNub3RpZnlfZGVzdHJveV9pbm9kZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsKIC8qIHJ1biB0aGUgbGlzdCBvZiBhbGwgbWFya3MgYXNzb2NpYXRlZCB3aXRoIGlub2RlIGFuZCBmbGFnIHRoZW0gdG8gYmUgZnJlZWQgKi8KIGV4dGVybiB2b2lkIGZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworLyogcnVuIHRoZSBsaXN0IG9mIGFsbCBtYXJrcyBhc3NvY2lhdGVkIHdpdGggdmZzbW91bnQgYW5kIGZsYWcgdGhlbSB0byBiZSBmcmVlZCAqLworZXh0ZXJuIHZvaWQgZnNub3RpZnlfY2xlYXJfbWFya3NfYnlfbW91bnQoc3RydWN0IHZmc21vdW50ICptbnQpOwogLyoKICAqIHVwZGF0ZSB0aGUgZGVudHJ5LT5kX2ZsYWdzIG9mIGFsbCBvZiBpbm9kZSdzIGNoaWxkcmVuIHRvIGluZGljYXRlIGlmIGlub2RlIGNhcmVzCiAgKiBhYm91dCBldmVudHMgdGhhdCBoYXBwZW4gdG8gaXRzIGNoaWxkcmVuLgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2dyb3VwLmMgYi9mcy9ub3RpZnkvZ3JvdXAuYwppbmRleCAwZTE2NzcxLi5kMzA5ZjM4IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZ3JvdXAuYworKysgYi9mcy9ub3RpZnkvZ3JvdXAuYwpAQCAtMjgsNjQgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotLyogcHJvdGVjdHMgd3JpdGVzIHRvIGZzbm90aWZ5X2dyb3VwcyBhbmQgZnNub3RpZnlfbWFzayAqLwotc3RhdGljIERFRklORV9NVVRFWChmc25vdGlmeV9ncnBfbXV0ZXgpOwotLyogcHJvdGVjdHMgcmVhZHMgd2hpbGUgcnVubmluZyB0aGUgZnNub3RpZnlfZ3JvdXBzIGxpc3QgKi8KLXN0cnVjdCBzcmN1X3N0cnVjdCBmc25vdGlmeV9ncnBfc3JjdTsKLS8qIGFsbCBncm91cHMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIGZpbGVzeXN0ZW0gbm90aWZpY2F0aW9ucyAqLwotTElTVF9IRUFEKGZzbm90aWZ5X2dyb3Vwcyk7Ci0vKiBiaXR3aXNlIE9SIG9mIGFsbCBldmVudHMgKEZTXyopIGludGVyZXN0aW5nIHRvIHNvbWUgZ3JvdXAgb24gdGhpcyBzeXN0ZW0gKi8KLV9fdTMyIGZzbm90aWZ5X21hc2s7Ci0KLS8qCi0gKiBXaGVuIGEgbmV3IGdyb3VwIHJlZ2lzdGVycyBvciBjaGFuZ2VzIGl0J3Mgc2V0IG9mIGludGVyZXN0aW5nIGV2ZW50cwotICogdGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBmc25vdGlmeV9tYXNrIHRvIGNvbnRhaW4gYWxsIGludGVyZXN0aW5nIGV2ZW50cwotICovCi12b2lkIGZzbm90aWZ5X3JlY2FsY19nbG9iYWxfbWFzayh2b2lkKQotewotCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXA7Ci0JX191MzIgbWFzayA9IDA7Ci0JaW50IGlkeDsKLQotCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZmc25vdGlmeV9ncnBfc3JjdSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3JvdXAsICZmc25vdGlmeV9ncm91cHMsIGdyb3VwX2xpc3QpCi0JCW1hc2sgfD0gZ3JvdXAtPm1hc2s7Ci0Jc3JjdV9yZWFkX3VubG9jaygmZnNub3RpZnlfZ3JwX3NyY3UsIGlkeCk7Ci0JZnNub3RpZnlfbWFzayA9IG1hc2s7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgdGhlIGdyb3VwLT5tYXNrIGJ5IHJ1bm5pbmcgYWxsIG9mIHRoZSBtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotICogZ3JvdXAgYW5kIGZpbmRpbmcgdGhlIGJpdHdpc2UgfCBvZiBhbGwgb2YgdGhlIG1hcmstPm1hc2suICBJZiB3ZSBjaGFuZ2UKLSAqIHRoZSBncm91cC0+bWFzayB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgZ2xvYmFsIG1hc2sgb2YgZXZlbnRzIGludGVyZXN0aW5nCi0gKiB0byB0aGUgc3lzdGVtLgotICovCi12b2lkIGZzbm90aWZ5X3JlY2FsY19ncm91cF9tYXNrKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCi17Ci0JX191MzIgbWFzayA9IDA7Ci0JX191MzIgb2xkX21hc2sgPSBncm91cC0+bWFzazsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnk7Ci0KLQlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZncm91cC0+bWFya19lbnRyaWVzLCBnX2xpc3QpCi0JCW1hc2sgfD0gZW50cnktPm1hc2s7Ci0Jc3Bpbl91bmxvY2soJmdyb3VwLT5tYXJrX2xvY2spOwotCi0JZ3JvdXAtPm1hc2sgPSBtYXNrOwotCi0JaWYgKG9sZF9tYXNrICE9IG1hc2spCi0JCWZzbm90aWZ5X3JlY2FsY19nbG9iYWxfbWFzaygpOwotfQotCi0vKgotICogVGFrZSBhIHJlZmVyZW5jZSB0byBhIGdyb3VwIHNvIHRoaW5ncyBmb3VuZCB1bmRlciB0aGUgZnNub3RpZnlfZ3JwX211dGV4Ci0gKiBjYW4ndCBnZXQgZnJlZWQgdW5kZXIgdXMKLSAqLwotc3RhdGljIHZvaWQgZnNub3RpZnlfZ2V0X2dyb3VwKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCi17Ci0JYXRvbWljX2luYygmZ3JvdXAtPnJlZmNudCk7Ci19Ci0KIC8qCiAgKiBGaW5hbCBmcmVlaW5nIG9mIGEgZ3JvdXAKICAqLwpAQCAtMTEwLDE0NSArNTIsNTMgQEAKICAqLwogc3RhdGljIHZvaWQgZnNub3RpZnlfZGVzdHJveV9ncm91cChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKQogewotCS8qIGNsZWFyIGFsbCBpbm9kZSBtYXJrIGVudHJpZXMgZm9yIHRoaXMgZ3JvdXAgKi8KKwkvKiBjbGVhciBhbGwgaW5vZGUgbWFya3MgZm9yIHRoaXMgZ3JvdXAgKi8KIAlmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cChncm91cCk7CiAKKwlzeW5jaHJvbml6ZV9zcmN1KCZmc25vdGlmeV9tYXJrX3NyY3UpOworCiAJLyogcGFzdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuLCBtYXRjaGVzIHRoZSBpbml0aWFsIHZhbHVlIG9mIDEgKi8KIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZ3JvdXAtPm51bV9tYXJrcykpCiAJCWZzbm90aWZ5X2ZpbmFsX2Rlc3Ryb3lfZ3JvdXAoZ3JvdXApOwogfQogCiAvKgotICogUmVtb3ZlIHRoaXMgZ3JvdXAgZnJvbSB0aGUgZ2xvYmFsIGxpc3Qgb2YgZ3JvdXBzIHRoYXQgd2lsbCBnZXQgZXZlbnRzCi0gKiB0aGlzIGNhbiBiZSBkb25lIGV2ZW4gaWYgdGhlcmUgYXJlIHN0aWxsIHJlZmVyZW5jZXMgYW5kIHRoaW5ncyBzdGlsbCB1c2luZwotICogdGhpcyBncm91cC4gIFRoaXMganVzdCBzdG9wcyB0aGUgZ3JvdXAgZnJvbSBnZXR0aW5nIG5ldyBldmVudHMuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZnNub3RpZnlfZXZpY3RfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKLXsKLQlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZnNub3RpZnlfZ3JwX211dGV4KSk7Ci0KLQlpZiAoZ3JvdXAtPm9uX2dyb3VwX2xpc3QpCi0JCWxpc3RfZGVsX3JjdSgmZ3JvdXAtPmdyb3VwX2xpc3QpOwotCWdyb3VwLT5vbl9ncm91cF9saXN0ID0gMDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIGEgZ3JvdXAgaXMgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gZ2V0dGluZyBldmVudHMuICBUaGlzIGNhbiBiZQotICogdXNlZCBpZiBhIGdyb3VwIGlzIG1pc2JlaGF2aW5nIG9yIGlmIGZvciBzb21lIHJlYXNvbiBhIGdyb3VwIHNob3VsZCBubyBsb25nZXIKLSAqIGdldCBhbnkgZmlsZXN5c3RlbSBldmVudHMuCi0gKi8KLXZvaWQgZnNub3RpZnlfZXZpY3RfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKLXsKLQltdXRleF9sb2NrKCZmc25vdGlmeV9ncnBfbXV0ZXgpOwotCV9fZnNub3RpZnlfZXZpY3RfZ3JvdXAoZ3JvdXApOwotCW11dGV4X3VubG9jaygmZnNub3RpZnlfZ3JwX211dGV4KTsKLX0KLQotLyoKICAqIERyb3AgYSByZWZlcmVuY2UgdG8gYSBncm91cC4gIEZyZWUgaXQgaWYgaXQncyB0aHJvdWdoLgogICovCiB2b2lkIGZzbm90aWZ5X3B1dF9ncm91cChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKQogewotCWlmICghYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmZ3JvdXAtPnJlZmNudCwgJmZzbm90aWZ5X2dycF9tdXRleCkpCi0JCXJldHVybjsKLQotCS8qCi0JICogT0ssIG5vdyB3ZSBrbm93IHRoYXQgdGhlcmUncyBubyBvdGhlciB1c2VycyAqYW5kKiB3ZSBob2xkIG11dGV4LAotCSAqIHNvIG5vIG5ldyByZWZlcmVuY2VzIHdpbGwgYXBwZWFyCi0JICovCi0JX19mc25vdGlmeV9ldmljdF9ncm91cChncm91cCk7Ci0KLQkvKgotCSAqIG5vdyBpdCdzIG9mZiB0aGUgbGlzdCwgc28gdGhlIG9ubHkgdGhpbmcgd2UgbWlnaHQgY2FyZSBhYm91dCBpcwotCSAqIHNyY3UgYWNjZXNzLi4uLgotCSAqLwotCW11dGV4X3VubG9jaygmZnNub3RpZnlfZ3JwX211dGV4KTsKLQlzeW5jaHJvbml6ZV9zcmN1KCZmc25vdGlmeV9ncnBfc3JjdSk7Ci0KLQkvKiBhbmQgbm93IGl0IGlzIHJlYWxseSBkZWFkLiBfTm90aGluZ18gY291bGQgYmUgc2VlaW5nIGl0ICovCi0JZnNub3RpZnlfcmVjYWxjX2dsb2JhbF9tYXNrKCk7Ci0JZnNub3RpZnlfZGVzdHJveV9ncm91cChncm91cCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmdyb3VwLT5yZWZjbnQpKQorCQlmc25vdGlmeV9kZXN0cm95X2dyb3VwKGdyb3VwKTsKIH0KIAogLyoKLSAqIFNpbXBseSBydW4gdGhlIGZzbm90aWZ5X2dyb3VwcyBsaXN0IGFuZCBmaW5kIGEgZ3JvdXAgd2hpY2ggbWF0Y2hlcwotICogdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBJZiBhIGdyb3VwIGlzIGZvdW5kIHdlIHRha2UgYSByZWZlcmVuY2UgdG8gdGhhdAotICogZ3JvdXAuCisgKiBDcmVhdGUgYSBuZXcgZnNub3RpZnlfZ3JvdXAgYW5kIGhvbGQgYSByZWZlcmVuY2UgZm9yIHRoZSBncm91cCByZXR1cm5lZC4KICAqLwotc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZnNub3RpZnlfZmluZF9ncm91cCh1bnNpZ25lZCBpbnQgZ3JvdXBfbnVtLCBfX3UzMiBtYXNrLAotCQkJCQkJICBjb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzICpvcHMpCitzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmZzbm90aWZ5X2FsbG9jX2dyb3VwKGNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgKm9wcykKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwX2l0ZXI7Ci0Jc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCA9IE5VTEw7CisJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKIAotCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZmc25vdGlmeV9ncnBfbXV0ZXgpKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwX2l0ZXIsICZmc25vdGlmeV9ncm91cHMsIGdyb3VwX2xpc3QpIHsKLQkJaWYgKGdyb3VwX2l0ZXItPmdyb3VwX251bSA9PSBncm91cF9udW0pIHsKLQkJCWlmICgoZ3JvdXBfaXRlci0+bWFzayA9PSBtYXNrKSAmJgotCQkJICAgIChncm91cF9pdGVyLT5vcHMgPT0gb3BzKSkgewotCQkJCWZzbm90aWZ5X2dldF9ncm91cChncm91cF9pdGVyKTsKLQkJCQlncm91cCA9IGdyb3VwX2l0ZXI7Ci0JCQl9IGVsc2UKLQkJCQlncm91cCA9IEVSUl9QVFIoLUVFWElTVCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIGdyb3VwOwotfQotCi0vKgotICogRWl0aGVyIGZpbmRzIGFuIGV4aXN0aW5nIGdyb3VwIHdoaWNoIG1hdGNoZXMgdGhlIGdyb3VwX251bSwgbWFzaywgYW5kIG9wcyBvcgotICogY3JlYXRlcyBhIG5ldyBncm91cCBhbmQgYWRkcyBpdCB0byB0aGUgZ2xvYmFsIGdyb3VwIGxpc3QuICBJbiBlaXRoZXIgY2FzZSB3ZQotICogdGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhlIGdyb3VwIHJldHVybmVkLgotICovCi1zdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmZzbm90aWZ5X29idGFpbl9ncm91cCh1bnNpZ25lZCBpbnQgZ3JvdXBfbnVtLCBfX3UzMiBtYXNrLAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCAqdGdyb3VwOwotCi0JLyogdmVyeSBsb3cgdXNlLCBzaW1wbGVyIGxvY2tpbmcgaWYgd2UganVzdCBhbHdheXMgYWxsb2MgKi8KLQlncm91cCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmc25vdGlmeV9ncm91cCksIEdGUF9LRVJORUwpOworCWdyb3VwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZzbm90aWZ5X2dyb3VwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFncm91cCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwkvKiBzZXQgdG8gMCB3aGVuIHRoZXJlIGEgbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byB0aGlzIGdyb3VwICovCiAJYXRvbWljX3NldCgmZ3JvdXAtPnJlZmNudCwgMSk7Ci0KLQlncm91cC0+b25fZ3JvdXBfbGlzdCA9IDA7Ci0JZ3JvdXAtPmdyb3VwX251bSA9IGdyb3VwX251bTsKLQlncm91cC0+bWFzayA9IG1hc2s7CisJLyoKKwkgKiBoaXRzIDAgd2hlbiB0aGVyZSBhcmUgbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcyBBTkQgbm8gbWFya3MgZm9yCisJICogdGhpcyBncm91cAorCSAqLworCWF0b21pY19zZXQoJmdyb3VwLT5udW1fbWFya3MsIDEpOwogCiAJbXV0ZXhfaW5pdCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmdyb3VwLT5ub3RpZmljYXRpb25fbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZ3JvdXAtPm5vdGlmaWNhdGlvbl93YWl0cSk7Ci0JZ3JvdXAtPnFfbGVuID0gMDsKIAlncm91cC0+bWF4X2V2ZW50cyA9IFVJTlRfTUFYOwogCiAJc3Bpbl9sb2NrX2luaXQoJmdyb3VwLT5tYXJrX2xvY2spOwotCWF0b21pY19zZXQoJmdyb3VwLT5udW1fbWFya3MsIDApOwotCUlOSVRfTElTVF9IRUFEKCZncm91cC0+bWFya19lbnRyaWVzKTsKKwlJTklUX0xJU1RfSEVBRCgmZ3JvdXAtPm1hcmtzX2xpc3QpOwogCiAJZ3JvdXAtPm9wcyA9IG9wczsKIAotCW11dGV4X2xvY2soJmZzbm90aWZ5X2dycF9tdXRleCk7Ci0JdGdyb3VwID0gZnNub3RpZnlfZmluZF9ncm91cChncm91cF9udW0sIG1hc2ssIG9wcyk7Ci0JaWYgKHRncm91cCkgewotCQkvKiBncm91cCBhbHJlYWR5IGV4aXN0cyAqLwotCQltdXRleF91bmxvY2soJmZzbm90aWZ5X2dycF9tdXRleCk7Ci0JCS8qIGRlc3Ryb3kgdGhlIG5ldyBvbmUgd2UgbWFkZSAqLwotCQlmc25vdGlmeV9wdXRfZ3JvdXAoZ3JvdXApOwotCQlyZXR1cm4gdGdyb3VwOwotCX0KLQotCS8qIGdyb3VwIG5vdCBmb3VuZCwgYWRkIGEgbmV3IG9uZSAqLwotCWxpc3RfYWRkX3JjdSgmZ3JvdXAtPmdyb3VwX2xpc3QsICZmc25vdGlmeV9ncm91cHMpOwotCWdyb3VwLT5vbl9ncm91cF9saXN0ID0gMTsKLQkvKiBiZWluZyBvbiB0aGUgZnNub3RpZnlfZ3JvdXBzIGxpc3QgaG9sZHMgb25lIG51bV9tYXJrcyAqLwotCWF0b21pY19pbmMoJmdyb3VwLT5udW1fbWFya3MpOwotCi0JbXV0ZXhfdW5sb2NrKCZmc25vdGlmeV9ncnBfbXV0ZXgpOwotCi0JaWYgKG1hc2spCi0JCWZzbm90aWZ5X3JlY2FsY19nbG9iYWxfbWFzaygpOwotCiAJcmV0dXJuIGdyb3VwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub2RlX21hcmsuYyBiL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKaW5kZXggMDM5OWJjYi4uMzMyOTdjMCAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub2RlX21hcmsuYworKysgYi9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCkBAIC0xNiw3MiArMTYsNiBAQAogICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKLS8qCi0gKiBmc25vdGlmeSBpbm9kZSBtYXJrIGxvY2tpbmcvbGlmZXRpbWUvYW5kIHJlZmNudGluZwotICoKLSAqIFJFRkNOVDoKLSAqIFRoZSBtYXJrLT5yZWZjbnQgdGVsbHMgaG93IG1hbnkgInRoaW5ncyIgaW4gdGhlIGtlcm5lbCBjdXJyZW50bHkgYXJlCi0gKiByZWZlcmVuY2luZyB0aGlzIG9iamVjdC4gIFRoZSBvYmplY3QgdHlwaWNhbGx5IHdpbGwgbGl2ZSBpbnNpZGUgdGhlIGtlcm5lbAotICogd2l0aCBhIHJlZmNudCBvZiAyLCBvbmUgZm9yIGVhY2ggbGlzdCBpdCBpcyBvbiAoaV9saXN0LCBnX2xpc3QpLiAgQW55IHRhc2sKLSAqIHdoaWNoIGNhbiBmaW5kIHRoaXMgb2JqZWN0IGhvbGRpbmcgdGhlIGFwcHJvcHJpZXRlIGxvY2tzLCBjYW4gdGFrZSBhIHJlZmVyZW5jZQotICogYW5kIHRoZSBvYmplY3QgaXRzZWxmIGlzIGd1YXJlbnRlZWQgdG8gc3Vydml2ZSB1bnRpbCB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQuCi0gKgotICogTE9DS0lORzoKLSAqIFRoZXJlIGFyZSAzIHNwaW5sb2NrcyBpbnZvbHZlZCB3aXRoIGZzbm90aWZ5IGlub2RlIG1hcmtzIGFuZCB0aGV5IE1VU1QKLSAqIGJlIHRha2VuIGluIG9yZGVyIGFzIGZvbGxvd3M6Ci0gKgotICogZW50cnktPmxvY2sKLSAqIGdyb3VwLT5tYXJrX2xvY2sKLSAqIGlub2RlLT5pX2xvY2sKLSAqCi0gKiBlbnRyeS0+bG9jayBwcm90ZWN0cyAyIHRoaW5ncywgZW50cnktPmdyb3VwIGFuZCBlbnRyeS0+aW5vZGUuICBZb3UgbXVzdCBob2xkCi0gKiB0aGF0IGxvY2sgdG8gZGVyZWZlcmVuY2UgZWl0aGVyIG9mIHRoZXNlIHRoaW5ncyAodGhleSBjb3VsZCBiZSBOVUxMIGV2ZW4gd2l0aAotICogdGhlIGxvY2spCi0gKgotICogZ3JvdXAtPm1hcmtfbG9jayBwcm90ZWN0cyB0aGUgbWFya19lbnRyaWVzIGxpc3QgYW5jaG9yZWQgaW5zaWRlIGEgZ2l2ZW4gZ3JvdXAKLSAqIGFuZCBlYWNoIGVudHJ5IGlzIGhvb2tlZCB2aWEgdGhlIGdfbGlzdC4gIEl0IGFsc28gc29ydGEgcHJvdGVjdHMgdGhlCi0gKiBmcmVlX2dfbGlzdCwgd2hpY2ggd2hlbiB1c2VkIGlzIGFuY2hvcmVkIGJ5IGEgcHJpdmF0ZSBsaXN0IG9uIHRoZSBzdGFjayBvZiB0aGUKLSAqIHRhc2sgd2hpY2ggaGVsZCB0aGUgZ3JvdXAtPm1hcmtfbG9jay4KLSAqCi0gKiBpbm9kZS0+aV9sb2NrIHByb3RlY3RzIHRoZSBpX2Zzbm90aWZ5X21hcmtfZW50cmllcyBsaXN0IGFuY2hvcmVkIGluc2lkZSBhCi0gKiBnaXZlbiBpbm9kZSBhbmQgZWFjaCBlbnRyeSBpcyBob29rZWQgdmlhIHRoZSBpX2xpc3QuIChhbmQgc29ydGEgdGhlCi0gKiBmcmVlX2lfbGlzdCkKLSAqCi0gKgotICogTElGRVRJTUU6Ci0gKiBJbm9kZSBtYXJrcyBzdXJ2aXZlIGJldHdlZW4gd2hlbiB0aGV5IGFyZSBhZGRlZCB0byBhbiBpbm9kZSBhbmQgd2hlbiB0aGVpcgotICogcmVmY250PT0wLgotICoKLSAqIFRoZSBpbm9kZSBtYXJrIGNhbiBiZSBjbGVhcmVkIGZvciBhIG51bWJlciBvZiBkaWZmZXJlbnQgcmVhc29ucyBpbmNsdWRpbmc6Ci0gKiAtIFRoZSBpbm9kZSBpcyB1bmxpbmtlZCBmb3IgdGhlIGxhc3QgdGltZS4gIChmc25vdGlmeV9pbm9kZV9yZW1vdmUpCi0gKiAtIFRoZSBpbm9kZSBpcyBiZWluZyBldmljdGVkIGZyb20gY2FjaGUuIChmc25vdGlmeV9pbm9kZV9kZWxldGUpCi0gKiAtIFRoZSBmcyB0aGUgaW5vZGUgaXMgb24gaXMgdW5tb3VudGVkLiAgKGZzbm90aWZ5X2lub2RlX2RlbGV0ZS9mc25vdGlmeV91bm1vdW50X2lub2RlcykKLSAqIC0gU29tZXRoaW5nIGV4cGxpY2l0bHkgcmVxdWVzdHMgdGhhdCBpdCBiZSByZW1vdmVkLiAgKGZzbm90aWZ5X2Rlc3Ryb3lfbWFya19ieV9lbnRyeSkKLSAqIC0gVGhlIGZzbm90aWZ5X2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFyayBpcyBnb2luZyBhd2F5IGFuZCBhbGwgc3VjaCBtYXJrcwotICogICBuZWVkIHRvIGJlIGNsZWFuZWQgdXAuIChmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cCkKLSAqCi0gKiBXb3JzdCBjYXNlIHdlIGFyZSBnaXZlbiBhbiBpbm9kZSBhbmQgbmVlZCB0byBjbGVhbiB1cCBhbGwgdGhlIG1hcmtzIG9uIHRoYXQKLSAqIGlub2RlLiAgV2UgdGFrZSBpX2xvY2sgYW5kIHdhbGsgdGhlIGlfZnNub3RpZnlfbWFya19lbnRyaWVzIHNhZmVseS4gIEZvciBlYWNoCi0gKiBtYXJrIG9uIHRoZSBsaXN0IHdlIHRha2UgYSByZWZlcmVuY2UgKHNvIHRoZSBtYXJrIGNhbid0IGRpc2FwcGVhciB1bmRlciB1cykuCi0gKiBXZSByZW1vdmUgdGhhdCBtYXJrIGZvcm0gdGhlIGlub2RlJ3MgbGlzdCBvZiBtYXJrcyBhbmQgd2UgYWRkIHRoaXMgbWFyayB0byBhCi0gKiBwcml2YXRlIGxpc3QgYW5jaG9yZWQgb24gdGhlIHN0YWNrIHVzaW5nIGlfZnJlZV9saXN0OyAgQXQgdGhpcyBwb2ludCB3ZSBubwotICogbG9uZ2VyIGZlYXIgYW55dGhpbmcgZmluZGluZyB0aGUgbWFyayB1c2luZyB0aGUgaW5vZGUncyBsaXN0IG9mIG1hcmtzLgotICoKLSAqIFdlIGNhbiBzYWZlbHkgYW5kIGxvY2tsZXNzbHkgcnVuIHRoZSBwcml2YXRlIGxpc3Qgb24gdGhlIHN0YWNrIG9mIGV2ZXJ5dGhpbmcKLSAqIHdlIGp1c3QgdW5hdHRhY2hlZCBmcm9tIHRoZSBvcmlnaW5hbCBpbm9kZS4gIEZvciBlYWNoIG1hcmsgb24gdGhlIHByaXZhdGUgbGlzdAotICogd2UgZ3JhYiB0aGUgbWFyay0+IGFuZCBjYW4gdGh1cyBkZXJlZmVyZW5jZSBtYXJrLT5ncm91cCBhbmQgbWFyay0+aW5vZGUuICBJZgotICogd2Ugc2VlIHRoZSBncm91cCBhbmQgaW5vZGUgYXJlIG5vdCBOVUxMIHdlIHRha2UgdGhvc2UgbG9ja3MuICBOb3cgaG9sZGluZyBhbGwKLSAqIDMgbG9ja3Mgd2UgY2FuIGNvbXBsZXRlbHkgcmVtb3ZlIHRoZSBtYXJrIGZyb20gb3RoZXIgdGFza3MgZmluZGluZyBpdCBpbiB0aGUKLSAqIGZ1dHVyZS4gIFJlbWVtYmVyLCAxMCB0aGluZ3MgbWlnaHQgYWxyZWFkeSBiZSByZWZlcmVuY2luZyB0aGlzIG1hcmssIGJ1dCB0aGV5Ci0gKiBiZXR0ZXIgYmUgaG9sZGluZyBhIHJlZi4gIFdlIGRyb3Agb3VyIHJlZmVyZW5jZSB3ZSB0b29rIGJlZm9yZSB3ZSB1bmhvb2tlZCBpdAotICogZnJvbSB0aGUgaW5vZGUuICBXaGVuIHRoZSByZWYgaGl0cyAwIHdlIGNhbiBmcmVlIHRoZSBtYXJrLgotICoKLSAqIFZlcnkgc2ltaWxhcmx5IGZvciBmcmVlaW5nIGJ5IGdyb3VwLCBleGNlcHQgd2UgdXNlIGZyZWVfZ19saXN0LgotICoKLSAqIFRoaXMgaGFzIHRoZSB2ZXJ5IGludGVyZXN0aW5nIHByb3BlcnR5IG9mIGJlaW5nIGFibGUgdG8gcnVuIGNvbmN1cnJlbnRseSB3aXRoCi0gKiBhbnkgKG9yIGFsbCkgb3RoZXIgZGlyZWN0aW9ucy4KLSAqLwotCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC05NSwzMCArMjksMTkgQEAKICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeV9iYWNrZW5kLmg+CiAjaW5jbHVkZSAiZnNub3RpZnkuaCIKIAotdm9pZCBmc25vdGlmeV9nZXRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpCi17Ci0JYXRvbWljX2luYygmZW50cnktPnJlZmNudCk7Ci19Ci0KLXZvaWQgZnNub3RpZnlfcHV0X21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5KQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZlbnRyeS0+cmVmY250KSkKLQkJZW50cnktPmZyZWVfbWFyayhlbnRyeSk7Ci19Ci0KIC8qCiAgKiBSZWNhbGN1bGF0ZSB0aGUgbWFzayBvZiBldmVudHMgcmVsZXZhbnQgdG8gYSBnaXZlbiBpbm9kZSBsb2NrZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGZzbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCV9fdTMyIG5ld19tYXNrID0gMDsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmaW5vZGUtPmlfbG9jayk7CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCAmaW5vZGUtPmlfZnNub3RpZnlfbWFya19lbnRyaWVzLCBpX2xpc3QpCi0JCW5ld19tYXNrIHw9IGVudHJ5LT5tYXNrOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcmssIHBvcywgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtzLCBpLmlfbGlzdCkKKwkJbmV3X21hc2sgfD0gbWFyay0+bWFzazsKIAlpbm9kZS0+aV9mc25vdGlmeV9tYXNrID0gbmV3X21hc2s7CiB9CiAKQEAgLTEzNSwxMDcgKzU4LDI2IEBACiAJX19mc25vdGlmeV91cGRhdGVfY2hpbGRfZGVudHJ5X2ZsYWdzKGlub2RlKTsKIH0KIAotLyoKLSAqIEFueSB0aW1lIGEgbWFyayBpcyBnZXR0aW5nIGZyZWVkIHdlIGVuZCB1cCBoZXJlLgotICogVGhlIGNhbGxlciBoYWQgYmV0dGVyIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhpcyBtYXJrIHNvIHdlIGRvbid0IGFjdHVhbGx5Ci0gKiBkbyB0aGUgZmluYWwgcHV0IHVuZGVyIHRoZSBlbnRyeS0+bG9jawotICovCi12b2lkIGZzbm90aWZ5X2Rlc3Ryb3lfbWFya19ieV9lbnRyeShzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpCit2b2lkIGZzbm90aWZ5X2Rlc3Ryb3lfaW5vZGVfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcmstPmkuaW5vZGU7CiAKLQlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm1hcmstPmxvY2spOworCWFzc2VydF9zcGluX2xvY2tlZCgmbWFyay0+Z3JvdXAtPm1hcmtfbG9jayk7CiAKLQlncm91cCA9IGVudHJ5LT5ncm91cDsKLQlpbm9kZSA9IGVudHJ5LT5pbm9kZTsKLQotCUJVR19PTihncm91cCAmJiAhaW5vZGUpOwotCUJVR19PTighZ3JvdXAgJiYgaW5vZGUpOwotCi0JLyogaWYgIWdyb3VwIHNvbWV0aGluZyBlbHNlIGFscmVhZHkgbWFya2VkIHRoaXMgdG8gZGllICovCi0JaWYgKCFncm91cCkgewotCQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOwotCQlyZXR1cm47Ci0JfQotCi0JLyogMSBmcm9tIGNhbGxlciBhbmQgMSBmb3IgYmVpbmcgb24gaV9saXN0L2dfbGlzdCAqLwotCUJVR19PTihhdG9taWNfcmVhZCgmZW50cnktPnJlZmNudCkgPCAyKTsKLQotCXNwaW5fbG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAotCWhsaXN0X2RlbF9pbml0KCZlbnRyeS0+aV9saXN0KTsKLQllbnRyeS0+aW5vZGUgPSBOVUxMOwotCi0JbGlzdF9kZWxfaW5pdCgmZW50cnktPmdfbGlzdCk7Ci0JZW50cnktPmdyb3VwID0gTlVMTDsKLQotCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsgLyogZm9yIGlfbGlzdCBhbmQgZ19saXN0ICovCisJaGxpc3RfZGVsX2luaXRfcmN1KCZtYXJrLT5pLmlfbGlzdCk7CisJbWFyay0+aS5pbm9kZSA9IE5VTEw7CiAKIAkvKgotCSAqIHRoaXMgbWFyayBpcyBub3cgb2ZmIHRoZSBpbm9kZS0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMgbGlzdCBhbmQgd2UKKwkgKiB0aGlzIG1hcmsgaXMgbm93IG9mZiB0aGUgaW5vZGUtPmlfZnNub3RpZnlfbWFya3MgbGlzdCBhbmQgd2UKIAkgKiBob2xkIHRoZSBpbm9kZS0+aV9sb2NrLCBzbyB0aGlzIGlzIHRoZSBwZXJmZWN0IHRpbWUgdG8gdXBkYXRlIHRoZQogCSAqIGlub2RlLT5pX2Zzbm90aWZ5X21hc2sKIAkgKi8KIAlmc25vdGlmeV9yZWNhbGNfaW5vZGVfbWFza19sb2NrZWQoaW5vZGUpOwogCiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXNwaW5fdW5sb2NrKCZncm91cC0+bWFya19sb2NrKTsKLQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOwotCi0JLyoKLQkgKiBTb21lIGdyb3VwcyBsaWtlIHRvIGtub3cgdGhhdCBtYXJrcyBhcmUgYmVpbmcgZnJlZWQuICBUaGlzIGlzIGEKLQkgKiBjYWxsYmFjayB0byB0aGUgZ3JvdXAgZnVuY3Rpb24gdG8gbGV0IGl0IGtub3cgdGhhdCB0aGlzIGVudHJ5Ci0JICogaXMgYmVpbmcgZnJlZWQuCi0JICovCi0JaWYgKGdyb3VwLT5vcHMtPmZyZWVpbmdfbWFyaykKLQkJZ3JvdXAtPm9wcy0+ZnJlZWluZ19tYXJrKGVudHJ5LCBncm91cCk7Ci0KLQkvKgotCSAqIF9fZnNub3RpZnlfdXBkYXRlX2NoaWxkX2RlbnRyeV9mbGFncyhpbm9kZSk7Ci0JICoKLQkgKiBJIHJlYWxseSB3YW50IHRvIGNhbGwgdGhhdCwgYnV0IHdlIGNhbid0LCB3ZSBoYXZlIG5vIGlkZWEgaWYgdGhlIGlub2RlCi0JICogc3RpbGwgZXhpc3RzIHRoZSBzZWNvbmQgd2UgZHJvcCB0aGUgZW50cnktPmxvY2suCi0JICoKLQkgKiBUaGUgbmV4dCB0aW1lIGFuIGV2ZW50IGFycml2ZSB0byB0aGlzIGlub2RlIGZyb20gb25lIG9mIGl0J3MgY2hpbGRyZW4KLQkgKiBfX2Zzbm90aWZ5X3BhcmVudCB3aWxsIHNlZSB0aGF0IHRoZSBpbm9kZSBkb2Vzbid0IGNhcmUgYWJvdXQgaXQncwotCSAqIGNoaWxkcmVuIGFuZCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlc2UgZmxhZ3MgdGhlbi4gIFNvIHJlYWxseSB0aGlzCi0JICogaXMganVzdCBhIGxhenkgdXBkYXRlIChhbmQgY291bGQgYmUgYSBwZXJmIHdpbi4uLikKLQkgKi8KLQotCi0JaXB1dChpbm9kZSk7Ci0KLQkvKgotCSAqIGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGdyb3VwIHRyaWVkIHRvIGRlc3Ryb3kgaXRzZWxmLCBidXQgdGhpcwotCSAqIHRoaXMgbWFyayB3YXMgc2ltdWx0YW5lb3VzbHkgYmVpbmcgZnJlZWQgYnkgaW5vZGUuICBJZiB0aGF0J3MgdGhlCi0JICogY2FzZSwgd2UgZmluaXNoIGZyZWVpbmcgdGhlIGdyb3VwIGhlcmUuCi0JICovCi0JaWYgKHVubGlrZWx5KGF0b21pY19kZWNfYW5kX3Rlc3QoJmdyb3VwLT5udW1fbWFya3MpKSkKLQkJZnNub3RpZnlfZmluYWxfZGVzdHJveV9ncm91cChncm91cCk7Ci19Ci0KLS8qCi0gKiBHaXZlbiBhIGdyb3VwLCBkZXN0cm95IGFsbCBvZiB0aGUgbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZ3JvdXAuCi0gKi8KLXZvaWQgZnNub3RpZnlfY2xlYXJfbWFya3NfYnlfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKLXsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqbGVudHJ5LCAqZW50cnk7Ci0JTElTVF9IRUFEKGZyZWVfbGlzdCk7Ci0KLQlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbGVudHJ5LCAmZ3JvdXAtPm1hcmtfZW50cmllcywgZ19saXN0KSB7Ci0JCWxpc3RfYWRkKCZlbnRyeS0+ZnJlZV9nX2xpc3QsICZmcmVlX2xpc3QpOwotCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+Z19saXN0KTsKLQkJZnNub3RpZnlfZ2V0X21hcmsoZW50cnkpOwotCX0KLQlzcGluX3VubG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIGxlbnRyeSwgJmZyZWVfbGlzdCwgZnJlZV9nX2xpc3QpIHsKLQkJZnNub3RpZnlfZGVzdHJveV9tYXJrX2J5X2VudHJ5KGVudHJ5KTsKLQkJZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOwotCX0KIH0KIAogLyoKQEAgLTI0MywxMTIgKzg1LDE0NSBAQAogICovCiB2b2lkIGZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5LCAqbGVudHJ5OworCXN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCAqbG1hcms7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CiAJTElTVF9IRUFEKGZyZWVfbGlzdCk7CiAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHBvcywgbiwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcywgaV9saXN0KSB7Ci0JCWxpc3RfYWRkKCZlbnRyeS0+ZnJlZV9pX2xpc3QsICZmcmVlX2xpc3QpOwotCQlobGlzdF9kZWxfaW5pdCgmZW50cnktPmlfbGlzdCk7Ci0JCWZzbm90aWZ5X2dldF9tYXJrKGVudHJ5KTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcmssIHBvcywgbiwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtzLCBpLmlfbGlzdCkgeworCQlsaXN0X2FkZCgmbWFyay0+aS5mcmVlX2lfbGlzdCwgJmZyZWVfbGlzdCk7CisJCWhsaXN0X2RlbF9pbml0X3JjdSgmbWFyay0+aS5pX2xpc3QpOworCQlmc25vdGlmeV9nZXRfbWFyayhtYXJrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBsZW50cnksICZmcmVlX2xpc3QsIGZyZWVfaV9saXN0KSB7Ci0JCWZzbm90aWZ5X2Rlc3Ryb3lfbWFya19ieV9lbnRyeShlbnRyeSk7Ci0JCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFyaywgbG1hcmssICZmcmVlX2xpc3QsIGkuZnJlZV9pX2xpc3QpIHsKKwkJZnNub3RpZnlfZGVzdHJveV9tYXJrKG1hcmspOworCQlmc25vdGlmeV9wdXRfbWFyayhtYXJrKTsKIAl9CiB9CiAKIC8qCisgKiBHaXZlbiBhIGdyb3VwIGNsZWFyIGFsbCBvZiB0aGUgaW5vZGUgbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZ3JvdXAuCisgKi8KK3ZvaWQgZnNub3RpZnlfY2xlYXJfaW5vZGVfbWFya3NfYnlfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKK3sKKwlmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cF9mbGFncyhncm91cCwgRlNOT1RJRllfTUFSS19GTEFHX0lOT0RFKTsKK30KKworLyoKICAqIGdpdmVuIGEgZ3JvdXAgYW5kIGlub2RlLCBmaW5kIHRoZSBtYXJrIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbWJpbmF0aW9uLgogICogaWYgZm91bmQgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGF0IG1hcmsgYW5kIHJldHVybiBpdCwgZWxzZSByZXR1cm4gTlVMTAogICovCi1zdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZnNub3RpZnlfZmluZF9tYXJrX2VudHJ5KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCi0JCQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrX2xvY2tlZChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnk7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcms7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmaW5vZGUtPmlfbG9jayk7CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgcG9zLCAmaW5vZGUtPmlfZnNub3RpZnlfbWFya19lbnRyaWVzLCBpX2xpc3QpIHsKLQkJaWYgKGVudHJ5LT5ncm91cCA9PSBncm91cCkgewotCQkJZnNub3RpZnlfZ2V0X21hcmsoZW50cnkpOwotCQkJcmV0dXJuIGVudHJ5OworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcmssIHBvcywgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtzLCBpLmlfbGlzdCkgeworCQlpZiAobWFyay0+Z3JvdXAgPT0gZ3JvdXApIHsKKwkJCWZzbm90aWZ5X2dldF9tYXJrKG1hcmspOworCQkJcmV0dXJuIG1hcms7CiAJCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCi0gKiBOb3RoaW5nIGZhbmN5LCBqdXN0IGluaXRpYWxpemUgbGlzdHMgYW5kIGxvY2tzIGFuZCBjb3VudGVycy4KKyAqIGdpdmVuIGEgZ3JvdXAgYW5kIGlub2RlLCBmaW5kIHRoZSBtYXJrIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGNvbWJpbmF0aW9uLgorICogaWYgZm91bmQgdGFrZSBhIHJlZmVyZW5jZSB0byB0aGF0IG1hcmsgYW5kIHJldHVybiBpdCwgZWxzZSByZXR1cm4gTlVMTAogICovCi12b2lkIGZzbm90aWZ5X2luaXRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnksCi0JCQl2b2lkICgqZnJlZV9tYXJrKShzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpKQotCitzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXNwaW5fbG9ja19pbml0KCZlbnRyeS0+bG9jayk7Ci0JYXRvbWljX3NldCgmZW50cnktPnJlZmNudCwgMSk7Ci0JSU5JVF9ITElTVF9OT0RFKCZlbnRyeS0+aV9saXN0KTsKLQllbnRyeS0+Z3JvdXAgPSBOVUxMOwotCWVudHJ5LT5tYXNrID0gMDsKLQllbnRyeS0+aW5vZGUgPSBOVUxMOwotCWVudHJ5LT5mcmVlX21hcmsgPSBmcmVlX21hcms7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcms7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCW1hcmsgPSBmc25vdGlmeV9maW5kX2lub2RlX21hcmtfbG9ja2VkKGdyb3VwLCBpbm9kZSk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJcmV0dXJuIG1hcms7CiB9CiAKIC8qCi0gKiBBdHRhY2ggYW4gaW5pdGlhbGl6ZWQgbWFyayBlbnRyeSB0byBhIGdpdmVuIGdyb3VwIGFuZCBpbm9kZS4KLSAqIFRoZXNlIG1hcmtzIG1heSBiZSB1c2VkIGZvciB0aGUgZnNub3RpZnkgYmFja2VuZCB0byBkZXRlcm1pbmUgd2hpY2gKLSAqIGV2ZW50IHR5cGVzIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gd2hpY2ggZ3JvdXAgYW5kIGZvciB3aGljaCBpbm9kZXMuCisgKiBJZiB3ZSBhcmUgc2V0dGluZyBhIG1hcmsgbWFzayBvbiBhbiBpbm9kZSBtYXJrIHdlIHNob3VsZCBwaW4gdGhlIGlub2RlCisgKiBpbiBtZW1vcnkuCiAgKi8KLWludCBmc25vdGlmeV9hZGRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnksCi0JCSAgICAgIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIGZzbm90aWZ5X3NldF9pbm9kZV9tYXJrX21hc2tfbG9ja2VkKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLAorCQkJCQkgX191MzIgbWFzaykKIHsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqbGVudHJ5OworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm1hcmstPmxvY2spOworCisJaWYgKG1hc2sgJiYKKwkgICAgbWFyay0+aS5pbm9kZSAmJgorCSAgICAhKG1hcmstPmZsYWdzICYgRlNOT1RJRllfTUFSS19GTEFHX09CSkVDVF9QSU5ORUQpKSB7CisJCW1hcmstPmZsYWdzIHw9IEZTTk9USUZZX01BUktfRkxBR19PQkpFQ1RfUElOTkVEOworCQlpbm9kZSA9IGlncmFiKG1hcmstPmkuaW5vZGUpOworCQkvKgorCQkgKiB3ZSBzaG91bGRuJ3QgYmUgYWJsZSB0byBnZXQgaGVyZSBpZiB0aGUgaW5vZGUgd2Fzbid0CisJCSAqIGFscmVhZHkgc2FmZWx5IGhlbGQgaW4gbWVtb3J5LiAgQnV0IGJ1ZyBpbiBjYXNlIGl0CisJCSAqIGV2ZXIgaXMgd3JvbmcuCisJCSAqLworCQlCVUdfT04oIWlub2RlKTsKKwl9Cit9CisKKy8qCisgKiBBdHRhY2ggYW4gaW5pdGlhbGl6ZWQgbWFyayB0byBhIGdpdmVuIGlub2RlLgorICogVGhlc2UgbWFya3MgbWF5IGJlIHVzZWQgZm9yIHRoZSBmc25vdGlmeSBiYWNrZW5kIHRvIGRldGVybWluZSB3aGljaAorICogZXZlbnQgdHlwZXMgc2hvdWxkIGJlIGRlbGl2ZXJlZCB0byB3aGljaCBncm91cCBhbmQgZm9yIHdoaWNoIGlub2Rlcy4gIFRoZXNlCisgKiBtYXJrcyBhcmUgb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIGdyb3VwJ3MgbG9jYXRpb24gaW4gbWVtb3J5LgorICovCitpbnQgZnNub3RpZnlfYWRkX2lub2RlX21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcmssCisJCQkgICAgc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBpbnQgYWxsb3dfZHVwcykKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbG1hcms7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpsYXN0ID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAotCWlub2RlID0gaWdyYWIoaW5vZGUpOwotCWlmICh1bmxpa2VseSghaW5vZGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwltYXJrLT5mbGFncyB8PSBGU05PVElGWV9NQVJLX0ZMQUdfSU5PREU7CiAKLQkvKgotCSAqIExPQ0tJTkcgT1JERVIhISEhCi0JICogZW50cnktPmxvY2sKLQkgKiBncm91cC0+bWFya19sb2NrCi0JICogaW5vZGUtPmlfbG9jawotCSAqLwotCXNwaW5fbG9jaygmZW50cnktPmxvY2spOwotCXNwaW5fbG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZtYXJrLT5sb2NrKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmdyb3VwLT5tYXJrX2xvY2spOworCiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAotCWxlbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwotCWlmICghbGVudHJ5KSB7Ci0JCWVudHJ5LT5ncm91cCA9IGdyb3VwOwotCQllbnRyeS0+aW5vZGUgPSBpbm9kZTsKKwltYXJrLT5pLmlub2RlID0gaW5vZGU7CiAKLQkJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5pX2xpc3QsICZpbm9kZS0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMpOwotCQlsaXN0X2FkZCgmZW50cnktPmdfbGlzdCwgJmdyb3VwLT5tYXJrX2VudHJpZXMpOwotCi0JCWZzbm90aWZ5X2dldF9tYXJrKGVudHJ5KTsgLyogZm9yIGlfbGlzdCBhbmQgZ19saXN0ICovCi0KLQkJYXRvbWljX2luYygmZ3JvdXAtPm51bV9tYXJrcyk7Ci0KLQkJZnNub3RpZnlfcmVjYWxjX2lub2RlX21hc2tfbG9ja2VkKGlub2RlKTsKKwkvKiBpcyBtYXJrIHRoZSBmaXJzdCBtYXJrPyAqLworCWlmIChobGlzdF9lbXB0eSgmaW5vZGUtPmlfZnNub3RpZnlfbWFya3MpKSB7CisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmbWFyay0+aS5pX2xpc3QsICZpbm9kZS0+aV9mc25vdGlmeV9tYXJrcyk7CisJCWdvdG8gb3V0OwogCX0KIAorCS8qIHNob3VsZCBtYXJrIGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnQgbGlzdD8gKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShsbWFyaywgbm9kZSwgJmlub2RlLT5pX2Zzbm90aWZ5X21hcmtzLCBpLmlfbGlzdCkgeworCQlsYXN0ID0gbm9kZTsKKworCQlpZiAoKGxtYXJrLT5ncm91cCA9PSBncm91cCkgJiYgIWFsbG93X2R1cHMpIHsKKwkJCXJldCA9IC1FRVhJU1Q7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChtYXJrLT5ncm91cCA8IGxtYXJrLT5ncm91cCkKKwkJCWNvbnRpbnVlOworCisJCWhsaXN0X2FkZF9iZWZvcmVfcmN1KCZtYXJrLT5pLmlfbGlzdCwgJmxtYXJrLT5pLmlfbGlzdCk7CisJCWdvdG8gb3V0OworCX0KKworCUJVR19PTihsYXN0ID09IE5VTEwpOworCS8qIG1hcmsgc2hvdWxkIGJlIHRoZSBsYXN0IGVudHJ5LiAgbGFzdCBpcyB0aGUgY3VycmVudCBsYXN0IGVudHJ5ICovCisJaGxpc3RfYWRkX2FmdGVyX3JjdShsYXN0LCAmbWFyay0+aS5pX2xpc3QpOworb3V0OgorCWZzbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrX2xvY2tlZChpbm9kZSk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXNwaW5fdW5sb2NrKCZncm91cC0+bWFya19sb2NrKTsKLQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOwotCi0JaWYgKGxlbnRyeSkgewotCQlyZXQgPSAtRUVYSVNUOwotCQlpcHV0KGlub2RlKTsKLQkJZnNub3RpZnlfcHV0X21hcmsobGVudHJ5KTsKLQl9IGVsc2UgewotCQlfX2Zzbm90aWZ5X3VwZGF0ZV9jaGlsZF9kZW50cnlfZmxhZ3MoaW5vZGUpOwotCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNjksMTEgKzI0NCwxMSBAQAogCQlzdHJ1Y3QgaW5vZGUgKm5lZWRfaXB1dF90bXA7CiAKIAkJLyoKLQkJICogV2UgY2Fubm90IF9faWdldCgpIGFuIGlub2RlIGluIHN0YXRlIElfQ0xFQVIsIElfRlJFRUlORywKKwkJICogV2UgY2Fubm90IF9faWdldCgpIGFuIGlub2RlIGluIHN0YXRlIElfRlJFRUlORywKIAkJICogSV9XSUxMX0ZSRUUsIG9yIElfTkVXIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSBieSB0aGF0IHBvaW50CiAJCSAqIHRoZSBpbm9kZSBjYW5ub3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3YXRjaGVzLgogCQkgKi8KLQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfQ0xFQVJ8SV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMzk3LDcgKzI3Miw3IEBACiAJCS8qIEluIGNhc2UgdGhlIGRyb3BwaW5nIG9mIGEgcmVmZXJlbmNlIHdvdWxkIG51a2UgbmV4dF9pLiAqLwogCQlpZiAoKCZuZXh0X2ktPmlfc2JfbGlzdCAhPSBsaXN0KSAmJgogCQkgICAgYXRvbWljX3JlYWQoJm5leHRfaS0+aV9jb3VudCkgJiYKLQkJICAgICEobmV4dF9pLT5pX3N0YXRlICYgKElfQ0xFQVIgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpKSB7CisJCSAgICAhKG5leHRfaS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpKSB7CiAJCQlfX2lnZXQobmV4dF9pKTsKIAkJCW5lZWRfaXB1dCA9IG5leHRfaTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvS2NvbmZpZyBiL2ZzL25vdGlmeS9pbm90aWZ5L0tjb25maWcKaW5kZXggYjNhMTU5Yi4uYjk4MWZjMCAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvS2NvbmZpZworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9LY29uZmlnCkBAIC0xLDE4ICsxLDMgQEAKLWNvbmZpZyBJTk9USUZZCi0JYm9vbCAiSW5vdGlmeSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gc3VwcG9ydCIKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBsZWdhY3kgaW4ga2VybmVsIGlub3RpZnkgc3VwcG9ydC4gIElub3RpZnkgaXMgYQotCSAgZmlsZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHN5c3RlbS4gIEl0IGlzIGEgcmVwbGFjZW1lbnQgZm9yIGRub3RpZnkuCi0JICBUaGlzIG9wdGlvbiBvbmx5IHByb3ZpZGVzIHRoZSBsZWdhY3kgaW5vdGlmeSBpbiBrZXJuZWwgQVBJLiAgVGhlcmUKLQkgIGFyZSBubyBpbiB0cmVlIGtlcm5lbCB1c2VycyBvZiB0aGlzIGludGVyZmFjZSBzaW5jZSBpdCBpcyBkZXByZWNhdGVkLgotCSAgWW91IG9ubHkgbmVlZCB0aGlzIGlmIHlvdSBhcmUgbG9hZGluZyBhbiBvdXQgb2YgdHJlZSBrZXJuZWwgbW9kdWxlCi0JICB0aGF0IHVzZXMgaW5vdGlmeS4KLQotCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0PgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgSU5PVElGWV9VU0VSCiAJYm9vbCAiSW5vdGlmeSBzdXBwb3J0IGZvciB1c2Vyc3BhY2UiCiAJc2VsZWN0IEFOT05fSU5PREVTCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9NYWtlZmlsZSBiL2ZzL25vdGlmeS9pbm90aWZ5L01ha2VmaWxlCmluZGV4IDk0MzgyODEuLmEzODBkYWIgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L01ha2VmaWxlCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L01ha2VmaWxlCkBAIC0xLDIgKzEgQEAKLW9iai0kKENPTkZJR19JTk9USUZZKQkJKz0gaW5vdGlmeS5vCiBvYmotJChDT05GSUdfSU5PVElGWV9VU0VSKQkrPSBpbm90aWZ5X2Zzbm90aWZ5Lm8gaW5vdGlmeV91c2VyLm8KZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdiNzVlYi4uMDAwMDAwMAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NzMgKzAsMCBAQAotLyoKLSAqIGZzL2lub3RpZnkuYyAtIGlub2RlLWJhc2VkIGZpbGUgZXZlbnQgbm90aWZpY2F0aW9ucwotICoKLSAqIEF1dGhvcnM6Ci0gKglKb2huIE1jQ3V0Y2hhbgk8dHRiQHRlbnRhY2xlLmRocy5vcmc+Ci0gKglSb2JlcnQgTG92ZQk8cm1sQG5vdmVsbC5jb20+Ci0gKgotICogS2VybmVsIEFQSSBhZGRlZCBieTogQW15IEdyaWZmaXMgPGFteS5ncmlmZmlzQGhwLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSm9obiBNY0N1dGNoYW4KLSAqIENvcHlyaWdodCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnNub3RpZnlfYmFja2VuZC5oPgotCi1zdGF0aWMgYXRvbWljX3QgaW5vdGlmeV9jb29raWU7Ci0KLS8qCi0gKiBMb2NrIG9yZGVyaW5nOgotICoKLSAqIGRlbnRyeS0+ZF9sb2NrICh1c2VkIHRvIGtlZXAgZF9tb3ZlKCkgYXdheSBmcm9tIGRlbnRyeS0+ZF9wYXJlbnQpCi0gKiBpcHJ1bmVfbXV0ZXggKHN5bmNocm9uaXplIHNocmlua19pY2FjaGVfbWVtb3J5KCkpCi0gKiAJaW5vZGVfbG9jayAocHJvdGVjdHMgdGhlIHN1cGVyX2Jsb2NrLT5zX2lub2RlcyBsaXN0KQotICogCWlub2RlLT5pbm90aWZ5X211dGV4IChwcm90ZWN0cyBpbm9kZS0+aW5vdGlmeV93YXRjaGVzIGFuZCB3YXRjaGVzLT5pX2xpc3QpCi0gKiAJCWlub3RpZnlfaGFuZGxlLT5tdXRleCAocHJvdGVjdHMgaW5vdGlmeV9oYW5kbGUgYW5kIHdhdGNoZXMtPmhfbGlzdCkKLSAqCi0gKiBUaGUgaW5vZGUtPmlub3RpZnlfbXV0ZXggYW5kIGlub3RpZnlfaGFuZGxlLT5tdXRleCBhbmQgaGVsZCBkdXJpbmcgZXhlY3V0aW9uCi0gKiBvZiBhIGNhbGxlcidzIGV2ZW50IGhhbmRsZXIuICBUaHVzLCB0aGUgY2FsbGVyIG11c3Qgbm90IGhvbGQgYW55IGxvY2tzCi0gKiB0YWtlbiBpbiB0aGVpciBldmVudCBoYW5kbGVyIHdoaWxlIGNhbGxpbmcgYW55IG9mIHRoZSBwdWJsaXNoZWQgaW5vdGlmeQotICogaW50ZXJmYWNlcy4KLSAqLwotCi0vKgotICogTGlmZXRpbWVzIG9mIHRoZSB0aHJlZSBtYWluIGRhdGEgc3RydWN0dXJlcy0taW5vdGlmeV9oYW5kbGUsIGlub2RlLCBhbmQKLSAqIGlub3RpZnlfd2F0Y2gtLWFyZSBtYW5hZ2VkIGJ5IHJlZmVyZW5jZSBjb3VudC4KLSAqCi0gKiBpbm90aWZ5X2hhbmRsZTogTGlmZXRpbWUgaXMgZnJvbSBpbm90aWZ5X2luaXQoKSB0byBpbm90aWZ5X2Rlc3Ryb3koKS4KLSAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlcyBjYW4gYnVtcCB0aGUgY291bnQgdmlhIGdldF9pbm90aWZ5X2hhbmRsZSgpIGFuZCBkcm9wCi0gKiB0aGUgY291bnQgdmlhIHB1dF9pbm90aWZ5X2hhbmRsZSgpLgotICoKLSAqIGlub3RpZnlfd2F0Y2g6IGZvciBpbm90aWZ5J3MgcHVycG9zZXMsIGxpZmV0aW1lIGlzIGZyb20gaW5vdGlmeV9hZGRfd2F0Y2goKQotICogdG8gcmVtb3ZlX3dhdGNoX25vX2V2ZW50KCkuICBBZGRpdGlvbmFsIHJlZmVyZW5jZXMgY2FuIGJ1bXAgdGhlIGNvdW50IHZpYQotICogZ2V0X2lub3RpZnlfd2F0Y2goKSBhbmQgZHJvcCB0aGUgY291bnQgdmlhIHB1dF9pbm90aWZ5X3dhdGNoKCkuICBUaGUgY2FsbGVyCi0gKiBpcyByZXBvbnNpYmxlIGZvciB0aGUgZmluYWwgcHV0IGFmdGVyIHJlY2VpdmluZyBJTl9JR05PUkVELCBvciB3aGVuIHVzaW5nCi0gKiBJTl9PTkVTSE9UIGFmdGVyIHJlY2VpdmluZyB0aGUgZmlyc3QgZXZlbnQuICBJbm90aWZ5IGRvZXMgdGhlIGZpbmFsIHB1dCBpZgotICogaW5vdGlmeV9kZXN0cm95KCkgaXMgY2FsbGVkLgotICoKLSAqIGlub2RlOiBQaW5uZWQgc28gbG9uZyBhcyB0aGUgaW5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgd2F0Y2gsIGZyb20KLSAqIGlub3RpZnlfYWRkX3dhdGNoKCkgdG8gdGhlIGZpbmFsIHB1dF9pbm90aWZ5X3dhdGNoKCkuCi0gKi8KLQotLyoKLSAqIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAtIHJlcHJlc2VudHMgYW4gaW5vdGlmeSBpbnN0YW5jZQotICoKLSAqIFRoaXMgc3RydWN0dXJlIGlzIHByb3RlY3RlZCBieSB0aGUgbXV0ZXggJ211dGV4Jy4KLSAqLwotc3RydWN0IGlub3RpZnlfaGFuZGxlIHsKLQlzdHJ1Y3QgaWRyCQlpZHI7CQkvKiBpZHIgbWFwcGluZyB3ZCAtPiB3YXRjaCAqLwotCXN0cnVjdCBtdXRleAkJbXV0ZXg7CQkvKiBwcm90ZWN0cyB0aGlzIGJhZCBib3kgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCXdhdGNoZXM7CS8qIGxpc3Qgb2Ygd2F0Y2hlcyAqLwotCWF0b21pY190CQljb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLwotCXUzMgkJCWxhc3Rfd2Q7CS8qIHRoZSBsYXN0IHdkIGFsbG9jYXRlZCAqLwotCWNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKmluX29wczsgLyogaW5vdGlmeSBjYWxsZXIgb3BlcmF0aW9ucyAqLwotfTsKLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9pbm90aWZ5X2hhbmRsZShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQotewotCWF0b21pY19pbmMoJmloLT5jb3VudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5vdGlmeV9oYW5kbGUoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWgtPmNvdW50KSkgewotCQlpZHJfZGVzdHJveSgmaWgtPmlkcik7Ci0JCWtmcmVlKGloKTsKLQl9Ci19Ci0KLS8qKgotICogZ2V0X2lub3RpZnlfd2F0Y2ggLSBncmFiIGEgcmVmZXJlbmNlIHRvIGFuIGlub3RpZnlfd2F0Y2gKLSAqIEB3YXRjaDogd2F0Y2ggdG8gZ3JhYgotICovCi12b2lkIGdldF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLQlhdG9taWNfaW5jKCZ3YXRjaC0+Y291bnQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X2lub3RpZnlfd2F0Y2gpOwotCi1pbnQgcGluX2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YXRjaC0+aW5vZGUtPmlfc2I7Ci0JaWYgKGF0b21pY19pbmNfbm90X3plcm8oJnNiLT5zX2FjdGl2ZSkpIHsKLQkJYXRvbWljX2luYygmd2F0Y2gtPmNvdW50KTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHB1dF9pbm90aWZ5X3dhdGNoIC0gZGVjcmVtZW50cyB0aGUgcmVmIGNvdW50IG9uIGEgZ2l2ZW4gd2F0Y2guICBjbGVhbnMgdXAKLSAqIHdhdGNoIHJlZmVyZW5jZXMgaWYgdGhlIGNvdW50IHJlYWNoZXMgemVyby4gIGlub3RpZnlfd2F0Y2ggaXMgZnJlZWQgYnkKLSAqIGlub3RpZnkgY2FsbGVycyB2aWEgdGhlIGRlc3Ryb3lfd2F0Y2goKSBvcC4KLSAqIEB3YXRjaDogd2F0Y2ggdG8gcmVsZWFzZQotICovCi12b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd2F0Y2gtPmNvdW50KSkgewotCQlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloID0gd2F0Y2gtPmloOwotCi0JCWlwdXQod2F0Y2gtPmlub2RlKTsKLQkJaWgtPmluX29wcy0+ZGVzdHJveV93YXRjaCh3YXRjaCk7Ci0JCXB1dF9pbm90aWZ5X2hhbmRsZShpaCk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwocHV0X2lub3RpZnlfd2F0Y2gpOwotCi12b2lkIHVucGluX2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YXRjaC0+aW5vZGUtPmlfc2I7Ci0JcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwotCWRlYWN0aXZhdGVfc3VwZXIoc2IpOwotfQotCi0vKgotICogaW5vdGlmeV9oYW5kbGVfZ2V0X3dkIC0gcmV0dXJucyB0aGUgbmV4dCBXRCBmb3IgdXNlIGJ5IHRoZSBnaXZlbiBoYW5kbGUKLSAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBpaC0+bXV0ZXguICBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KLSAqLwotc3RhdGljIGludCBpbm90aWZ5X2hhbmRsZV9nZXRfd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKLQkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotCWludCByZXQ7Ci0KLQlkbyB7Ci0JCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmloLT5pZHIsIEdGUF9OT0ZTKSkpCi0JCQlyZXR1cm4gLUVOT1NQQzsKLQkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmloLT5pZHIsIHdhdGNoLCBpaC0+bGFzdF93ZCsxLCAmd2F0Y2gtPndkKTsKLQl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7Ci0KLQlpZiAobGlrZWx5KCFyZXQpKQotCQlpaC0+bGFzdF93ZCA9IHdhdGNoLT53ZDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBpbm90aWZ5X2lub2RlX3dhdGNoZWQgLSByZXR1cm5zIG5vbnplcm8gaWYgdGhlcmUgYXJlIHdhdGNoZXMgb24gdGhpcyBpbm9kZQotICogYW5kIHplcm8gb3RoZXJ3aXNlLiAgV2UgY2FsbCB0aGlzIGxvY2tsZXNzLCB3ZSBkbyBub3QgY2FyZSBpZiB3ZSByYWNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X2lub2RlX3dhdGNoZWQoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlyZXR1cm4gIWxpc3RfZW1wdHkoJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOwotfQotCi0vKgotICogR2V0IGNoaWxkIGRlbnRyeSBmbGFnIGludG8gc3luY2ggd2l0aCBwYXJlbnQgaW5vZGUuCi0gKiBGbGFnIHNob3VsZCBhbHdheXMgYmUgY2xlYXIgZm9yIG5lZ2F0aXZlIGRlbnRyeXMuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9kZW50cnlfY2hpbGRfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhdGNoZWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqYWxpYXM7Ci0KLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFsaWFzLCAmaW5vZGUtPmlfZGVudHJ5LCBkX2FsaWFzKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmNoaWxkOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZhbGlhcy0+ZF9zdWJkaXJzLCBkX3UuZF9jaGlsZCkgewotCQkJaWYgKCFjaGlsZC0+ZF9pbm9kZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3Bpbl9sb2NrKCZjaGlsZC0+ZF9sb2NrKTsKLQkJCWlmICh3YXRjaGVkKQotCQkJCWNoaWxkLT5kX2ZsYWdzIHw9IERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwotCQkJZWxzZQotCQkJCWNoaWxkLT5kX2ZsYWdzICY9fkRDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwotCQkJc3Bpbl91bmxvY2soJmNoaWxkLT5kX2xvY2spOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci19Ci0KLS8qCi0gKiBpbm90aWZ5X2ZpbmRfaGFuZGxlIC0gZmluZCB0aGUgd2F0Y2ggYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbm9kZSBhbmQKLSAqIGhhbmRsZQotICoKLSAqIENhbGxlcnMgbXVzdCBob2xkIGlub2RlLT5pbm90aWZ5X211dGV4LgotICovCi1zdGF0aWMgc3RydWN0IGlub3RpZnlfd2F0Y2ggKmlub2RlX2ZpbmRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQotewotCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkod2F0Y2gsICZpbm9kZS0+aW5vdGlmeV93YXRjaGVzLCBpX2xpc3QpIHsKLQkJaWYgKHdhdGNoLT5paCA9PSBpaCkKLQkJCXJldHVybiB3YXRjaDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIHJlbW92ZV93YXRjaF9ub19ldmVudCAtIHJlbW92ZSB3YXRjaCB3aXRob3V0IHRoZSBJTl9JR05PUkVEIGV2ZW50LgotICoKLSAqIENhbGxlcnMgbXVzdCBob2xkIGJvdGggaW5vZGUtPmlub3RpZnlfbXV0ZXggYW5kIGloLT5tdXRleC4KLSAqLwotc3RhdGljIHZvaWQgcmVtb3ZlX3dhdGNoX25vX2V2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCwKLQkJCQkgIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpCi17Ci0JbGlzdF9kZWwoJndhdGNoLT5pX2xpc3QpOwotCWxpc3RfZGVsKCZ3YXRjaC0+aF9saXN0KTsKLQotCWlmICghaW5vdGlmeV9pbm9kZV93YXRjaGVkKHdhdGNoLT5pbm9kZSkpCi0JCXNldF9kZW50cnlfY2hpbGRfZmxhZ3Mod2F0Y2gtPmlub2RlLCAwKTsKLQotCWlkcl9yZW1vdmUoJmloLT5pZHIsIHdhdGNoLT53ZCk7Ci19Ci0KLS8qKgotICogaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkIC0gUmVtb3ZlIGEgd2F0Y2ggZnJvbSBib3RoIHRoZSBoYW5kbGUgYW5kIHRoZQotICogaW5vZGUuICBTZW5kcyB0aGUgSU5fSUdOT1JFRCBldmVudCBzaWduaWZ5aW5nIHRoYXQgdGhlIGlub2RlIGlzIG5vIGxvbmdlcgotICogd2F0Y2hlZC4gIE1heSBiZSBpbnZva2VkIGZyb20gYSBjYWxsZXIncyBldmVudCBoYW5kbGVyLgotICogQGloOiBpbm90aWZ5IGhhbmRsZSBhc3NvY2lhdGVkIHdpdGggd2F0Y2gKLSAqIEB3YXRjaDogd2F0Y2ggdG8gcmVtb3ZlCi0gKgotICogQ2FsbGVycyBtdXN0IGhvbGQgYm90aCBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaWgtPm11dGV4LgotICovCi12b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAotCQkJCSBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCi17Ci0JcmVtb3ZlX3dhdGNoX25vX2V2ZW50KHdhdGNoLCBpaCk7Ci0JaWgtPmluX29wcy0+aGFuZGxlX2V2ZW50KHdhdGNoLCB3YXRjaC0+d2QsIElOX0lHTk9SRUQsIDAsIE5VTEwsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKTsKLQotLyogS2VybmVsIEFQSSBmb3IgcHJvZHVjaW5nIGV2ZW50cyAqLwotCi0vKgotICogaW5vdGlmeV9kX2luc3RhbnRpYXRlIC0gaW5zdGFudGlhdGUgZGNhY2hlIGVudHJ5IGZvciBpbm9kZQotICovCi12b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmVudHJ5LT5kX2xvY2spOwotCXBhcmVudCA9IGVudHJ5LT5kX3BhcmVudDsKLQlpZiAocGFyZW50LT5kX2lub2RlICYmIGlub3RpZnlfaW5vZGVfd2F0Y2hlZChwYXJlbnQtPmRfaW5vZGUpKQotCQllbnRyeS0+ZF9mbGFncyB8PSBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRDsKLQlzcGluX3VubG9jaygmZW50cnktPmRfbG9jayk7Ci19Ci0KLS8qCi0gKiBpbm90aWZ5X2RfbW92ZSAtIGRjYWNoZSBlbnRyeSBoYXMgYmVlbiBtb3ZlZAotICovCi12b2lkIGlub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmVudHJ5KQotewotCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKLQotCXBhcmVudCA9IGVudHJ5LT5kX3BhcmVudDsKLQlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKHBhcmVudC0+ZF9pbm9kZSkpCi0JCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwotCWVsc2UKLQkJZW50cnktPmRfZmxhZ3MgJj0gfkRDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEOwotfQotCi0vKioKLSAqIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQgLSBxdWV1ZSBhbiBldmVudCB0byBhbGwgd2F0Y2hlcyBvbiB0aGlzIGlub2RlCi0gKiBAaW5vZGU6IGlub2RlIGV2ZW50IGlzIG9yaWdpbmF0aW5nIGZyb20KLSAqIEBtYXNrOiBldmVudCBtYXNrIGRlc2NyaWJpbmcgdGhpcyBldmVudAotICogQGNvb2tpZTogY29va2llIGZvciBzeW5jaHJvbml6YXRpb24sIG9yIHplcm8KLSAqIEBuYW1lOiBmaWxlbmFtZSwgaWYgYW55Ci0gKiBAbl9pbm9kZTogaW5vZGUgYXNzb2NpYXRlZCB3aXRoIG5hbWUKLSAqLwotdm9pZCBpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrLCB1MzIgY29va2llLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqbl9pbm9kZSkKLXsKLQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsICpuZXh0OwotCi0JaWYgKCFpbm90aWZ5X2lub2RlX3dhdGNoZWQoaW5vZGUpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7Ci0JCXUzMiB3YXRjaF9tYXNrID0gd2F0Y2gtPm1hc2s7Ci0JCWlmICh3YXRjaF9tYXNrICYgbWFzaykgewotCQkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaD0gd2F0Y2gtPmloOwotCQkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKLQkJCWlmICh3YXRjaF9tYXNrICYgSU5fT05FU0hPVCkKLQkJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKLQkJCWloLT5pbl9vcHMtPmhhbmRsZV9ldmVudCh3YXRjaCwgd2F0Y2gtPndkLCBtYXNrLCBjb29raWUsCi0JCQkJCQkgbmFtZSwgbl9pbm9kZSk7Ci0JCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KTsKLQotLyoqCi0gKiBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQgLSBxdWV1ZSBhbiBldmVudCB0byBhIGRlbnRyeSdzIHBhcmVudAotICogQGRlbnRyeTogdGhlIGRlbnRyeSBpbiBxdWVzdGlvbiwgd2UgcXVldWUgYWdhaW5zdCB0aGlzIGRlbnRyeSdzIHBhcmVudAotICogQG1hc2s6IGV2ZW50IG1hc2sgZGVzY3JpYmluZyB0aGlzIGV2ZW50Ci0gKiBAY29va2llOiBjb29raWUgZm9yIHN5bmNocm9uaXphdGlvbiwgb3IgemVybwotICogQG5hbWU6IGZpbGVuYW1lLCBpZiBhbnkKLSAqLwotdm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1MzIgbWFzaywKLQkJCQkgICAgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWlmICghKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9JTk9USUZZX1BBUkVOVF9XQVRDSEVEKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKLQlpbm9kZSA9IHBhcmVudC0+ZF9pbm9kZTsKLQotCWlmIChpbm90aWZ5X2lub2RlX3dhdGNoZWQoaW5vZGUpKSB7Ci0JCWRnZXQocGFyZW50KTsKLQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgY29va2llLCBuYW1lLAotCQkJCQkgIGRlbnRyeS0+ZF9pbm9kZSk7Ci0JCWRwdXQocGFyZW50KTsKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudCk7Ci0KLS8qKgotICogaW5vdGlmeV9nZXRfY29va2llIC0gcmV0dXJuIGEgdW5pcXVlIGNvb2tpZSBmb3IgdXNlIGluIHN5bmNocm9uaXppbmcgZXZlbnRzLgotICovCi11MzIgaW5vdGlmeV9nZXRfY29va2llKHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19pbmNfcmV0dXJuKCZpbm90aWZ5X2Nvb2tpZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2dldF9jb29raWUpOwotCi0vKioKLSAqIGlub3RpZnlfdW5tb3VudF9pbm9kZXMgLSBhbiBzYiBpcyB1bm1vdW50aW5nLiAgaGFuZGxlIGFueSB3YXRjaGVkIGlub2Rlcy4KLSAqIEBsaXN0OiBsaXN0IG9mIGlub2RlcyBiZWluZyB1bm1vdW50ZWQgKHNiLT5zX2lub2RlcykKLSAqCi0gKiBDYWxsZWQgd2l0aCBpbm9kZV9sb2NrIGhlbGQsIHByb3RlY3RpbmcgdGhlIHVubW91bnRpbmcgc3VwZXIgYmxvY2sncyBsaXN0Ci0gKiBvZiBpbm9kZXMsIGFuZCB3aXRoIGlwcnVuZV9tdXRleCBoZWxkLCBrZWVwaW5nIHNocmlua19pY2FjaGVfbWVtb3J5KCkgYXQgYmF5LgotICogV2UgdGVtcG9yYXJpbHkgZHJvcCBpbm9kZV9sb2NrLCBob3dldmVyLCBhbmQgQ0FOIGJsb2NrLgotICovCi12b2lkIGlub3RpZnlfdW5tb3VudF9pbm9kZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqbmV4dF9pLCAqbmVlZF9pcHV0ID0gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbm9kZSwgbmV4dF9pLCBsaXN0LCBpX3NiX2xpc3QpIHsKLQkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCAqbmV4dF93OwotCQlzdHJ1Y3QgaW5vZGUgKm5lZWRfaXB1dF90bXA7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXM7Ci0KLQkJLyoKLQkJICogV2UgY2Fubm90IF9faWdldCgpIGFuIGlub2RlIGluIHN0YXRlIElfQ0xFQVIsIElfRlJFRUlORywKLQkJICogSV9XSUxMX0ZSRUUsIG9yIElfTkVXIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSBieSB0aGF0IHBvaW50Ci0JCSAqIHRoZSBpbm9kZSBjYW5ub3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCB3YXRjaGVzLgotCQkgKi8KLQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfQ0xFQVJ8SV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIElmIGlfY291bnQgaXMgemVybywgdGhlIGlub2RlIGNhbm5vdCBoYXZlIGFueSB3YXRjaGVzIGFuZAotCQkgKiBkb2luZyBhbiBfX2lnZXQvaXB1dCB3aXRoIE1TX0FDVElWRSBjbGVhciB3b3VsZCBhY3R1YWxseQotCQkgKiBldmljdCBhbGwgaW5vZGVzIHdpdGggemVybyBpX2NvdW50IGZyb20gaWNhY2hlIHdoaWNoIGlzCi0JCSAqIHVubmVjZXNzYXJpbHkgdmlvbGVudCBhbmQgbWF5IGluIGZhY3QgYmUgaWxsZWdhbCB0byBkby4KLQkJICovCi0JCWlmICghYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkKLQkJCWNvbnRpbnVlOwotCi0JCW5lZWRfaXB1dF90bXAgPSBuZWVkX2lwdXQ7Ci0JCW5lZWRfaXB1dCA9IE5VTEw7Ci0JCS8qIEluIGNhc2UgaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKCkgZHJvcHMgYSByZWZlcmVuY2UuICovCi0JCWlmIChpbm9kZSAhPSBuZWVkX2lwdXRfdG1wKQotCQkJX19pZ2V0KGlub2RlKTsKLQkJZWxzZQotCQkJbmVlZF9pcHV0X3RtcCA9IE5VTEw7Ci0JCS8qIEluIGNhc2UgdGhlIGRyb3BwaW5nIG9mIGEgcmVmZXJlbmNlIHdvdWxkIG51a2UgbmV4dF9pLiAqLwotCQlpZiAoKCZuZXh0X2ktPmlfc2JfbGlzdCAhPSBsaXN0KSAmJgotCQkJCWF0b21pY19yZWFkKCZuZXh0X2ktPmlfY291bnQpICYmCi0JCQkJIShuZXh0X2ktPmlfc3RhdGUgJiAoSV9DTEVBUiB8IElfRlJFRUlORyB8Ci0JCQkJCUlfV0lMTF9GUkVFKSkpIHsKLQkJCV9faWdldChuZXh0X2kpOwotCQkJbmVlZF9pcHV0ID0gbmV4dF9pOwotCQl9Ci0KLQkJLyoKLQkJICogV2UgY2FuIHNhZmVseSBkcm9wIGlub2RlX2xvY2sgaGVyZSBiZWNhdXNlIHdlIGhvbGQKLQkJICogcmVmZXJlbmNlcyBvbiBib3RoIGlub2RlIGFuZCBuZXh0X2kuICBBbHNvIG5vIG5ldyBpbm9kZXMKLQkJICogd2lsbCBiZSBhZGRlZCBzaW5jZSB0aGUgdW1vdW50IGhhcyBiZWd1bi4gIEZpbmFsbHksCi0JCSAqIGlwcnVuZV9tdXRleCBrZWVwcyBzaHJpbmtfaWNhY2hlX21lbW9yeSgpIGF3YXkuCi0JCSAqLwotCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0KLQkJaWYgKG5lZWRfaXB1dF90bXApCi0JCQlpcHV0KG5lZWRfaXB1dF90bXApOwotCi0JCS8qIGZvciBlYWNoIHdhdGNoLCBzZW5kIElOX1VOTU9VTlQgYW5kIHRoZW4gcmVtb3ZlIGl0ICovCi0JCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQkJd2F0Y2hlcyA9ICZpbm9kZS0+aW5vdGlmeV93YXRjaGVzOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2F0Y2gsIG5leHRfdywgd2F0Y2hlcywgaV9saXN0KSB7Ci0JCQlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloPSB3YXRjaC0+aWg7Ci0JCQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7Ci0JCQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCQkJaWgtPmluX29wcy0+aGFuZGxlX2V2ZW50KHdhdGNoLCB3YXRjaC0+d2QsIElOX1VOTU9VTlQsIDAsCi0JCQkJCQkgTlVMTCwgTlVMTCk7Ci0JCQlpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoaWgsIHdhdGNoKTsKLQkJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKLQkJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQkJfQotCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQkJaXB1dChpbm9kZSk7CQkKLQotCQlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfdW5tb3VudF9pbm9kZXMpOwotCi0vKioKLSAqIGlub3RpZnlfaW5vZGVfaXNfZGVhZCAtIGFuIGlub2RlIGhhcyBiZWVuIGRlbGV0ZWQsIGNsZWFudXAgYW55IHdhdGNoZXMKLSAqIEBpbm9kZTogaW5vZGUgdGhhdCBpcyBhYm91dCB0byBiZSByZW1vdmVkCi0gKi8KLXZvaWQgaW5vdGlmeV9pbm9kZV9pc19kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCAqbmV4dDsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUod2F0Y2gsIG5leHQsICZpbm9kZS0+aW5vdGlmeV93YXRjaGVzLCBpX2xpc3QpIHsKLQkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCA9IHdhdGNoLT5paDsKLQkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKLQkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCB3YXRjaCk7Ci0JCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX2lzX2RlYWQpOwotCi0vKiBLZXJuZWwgQ29uc3VtZXIgQVBJICovCi0KLS8qKgotICogaW5vdGlmeV9pbml0IC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZQotICogQG9wczogY2FsbGVyJ3MgaW5vdGlmeSBvcGVyYXRpb25zCi0gKi8KLXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKm9wcykKLXsKLQlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloOwotCi0JaWggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkoIWloKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpZHJfaW5pdCgmaWgtPmlkcik7Ci0JSU5JVF9MSVNUX0hFQUQoJmloLT53YXRjaGVzKTsKLQltdXRleF9pbml0KCZpaC0+bXV0ZXgpOwotCWloLT5sYXN0X3dkID0gMDsKLQlpaC0+aW5fb3BzID0gb3BzOwotCWF0b21pY19zZXQoJmloLT5jb3VudCwgMCk7Ci0JZ2V0X2lub3RpZnlfaGFuZGxlKGloKTsKLQotCXJldHVybiBpaDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlub3RpZnlfaW5pdCk7Ci0KLS8qKgotICogaW5vdGlmeV9pbml0X3dhdGNoIC0gaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IHdhdGNoCi0gKiBAd2F0Y2g6IHdhdGNoIHRvIGluaXRpYWxpemUKLSAqLwotdm9pZCBpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotCUlOSVRfTElTVF9IRUFEKCZ3YXRjaC0+aF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmlfbGlzdCk7Ci0JYXRvbWljX3NldCgmd2F0Y2gtPmNvdW50LCAwKTsKLQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7IC8qIGluaXRpYWwgZ2V0ICovCi19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2luaXRfd2F0Y2gpOwotCi0vKgotICogV2F0Y2ggcmVtb3ZhbHMgc3VjayB2aW9sZW50bHkuICBUbyBraWNrIHRoZSB3YXRjaCBvdXQgd2UgbmVlZCAoaW4gdGhpcwotICogb3JkZXIpIGlub2RlLT5pbm90aWZ5X211dGV4IGFuZCBpaC0+bXV0ZXguICBUaGF0J3MgZmluZSBpZiB3ZSBoYXZlCi0gKiBhIGhvbGQgb24gaW5vZGU7IGhvd2V2ZXIsIGZvciBhbGwgb3RoZXIgY2FzZXMgd2UgbmVlZCB0byBtYWtlIGRhbW4gc3VyZQotICogd2UgZG9uJ3QgcmFjZSB3aXRoIHVtb3VudC4gIFdlIGNhbiAqTk9UKiBqdXN0IGdyYWIgYSByZWZlcmVuY2UgdG8gYQotICogd2F0Y2ggLSBpbm90aWZ5X3VubW91bnRfaW5vZGVzKCkgd2lsbCBoYXBwaWx5IHNhaWwgcGFzdCBpdCBhbmQgd2UnbGwgZW5kCi0gKiB3aXRoIHJlZmVyZW5jZSB0byBpbm9kZSBwb3RlbnRpYWxseSBvdXRsaXZpbmcgaXRzIHN1cGVyYmxvY2suICBJZGVhbGx5Ci0gKiB3ZSBqdXN0IHdhbnQgdG8gZ3JhYiBhbiBhY3RpdmUgcmVmZXJlbmNlIHRvIHN1cGVyYmxvY2sgaWYgd2UgY2FuOyB0aGF0Ci0gKiB3aWxsIG1ha2Ugc3VyZSB3ZSB3b24ndCBnbyBpbnRvIGlub3RpZnlfdW1vdW50X2lub2RlcygpIHVudGlsIHdlIGFyZQotICogZG9uZS4gIENsZWFudXAgaXMganVzdCBkZWFjdGl2YXRlX3N1cGVyKCkuICBIb3dldmVyLCB0aGF0IGxlYXZlcyBhIG1lc3N5Ci0gKiBjYXNlIC0gd2hhdCBpZiB3ZSAqYXJlKiByYWNpbmcgd2l0aCB1bW91bnQoKSBhbmQgYWN0aXZlIHJlZmVyZW5jZXMgdG8KLSAqIHN1cGVyYmxvY2sgY2FuJ3QgYmUgYWNxdWlyZWQgYW55bW9yZT8gIFdlIGNhbiBidW1wIC0+c19jb3VudCwgZ3JhYgotICogLT5zX3Vtb3VudCwgd2hpY2ggd2lsbCB3YWl0IHVudGlsIHRoZSBzdXBlcmJsb2NrIGlzIHNodXQgZG93biBhbmQgdGhlCi0gKiB3YXRjaCBpbiBxdWVzdGlvbiBpcyBwaW5pbmcgZm9yIGZqb3Jkcy4KLSAqCi0gKiBBbmQgeWVzLCB0aGlzIGlzIGZhciBiZXlvbmQgbWVyZSAibm90IHZlcnkgcHJldHR5Ijsgc28ncyB0aGUgZW50aXJlCi0gKiBjb25jZXB0IG9mIGlub3RpZnkgdG8gc3RhcnQgd2l0aC4KLSAqLwotCi0vKioKLSAqIHBpbl90b19raWxsIC0gcGluIHRoZSB3YXRjaCBkb3duIGZvciByZW1vdmFsCi0gKiBAaWg6IGlub3RpZnkgaGFuZGxlCi0gKiBAd2F0Y2g6IHdhdGNoIHRvIGtpbGwKLSAqCi0gKiBDYWxsZWQgd2l0aCBpaC0+bXV0ZXggaGVsZCwgZHJvcHMgaXQuICBQb3NzaWJsZSByZXR1cm4gdmFsdWVzOgotICogMCAtIG5vdGhpbmcgdG8gZG8sIGl0IGhhcyBkaWVkCi0gKiAxIC0gcmVtb3ZlIGl0LCBkcm9wIHRoZSByZWZlcmVuY2UgYW5kIGRlYWN0aXZhdGVfc3VwZXIoKQotICovCi1zdGF0aWMgaW50IHBpbl90b19raWxsKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gd2F0Y2gtPmlub2RlLT5pX3NiOwotCi0JaWYgKGF0b21pY19pbmNfbm90X3plcm8oJnNiLT5zX2FjdGl2ZSkpIHsKLQkJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwotCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7Ci0JCXJldHVybiAxOwkvKiB0aGUgYmVzdCBvdXRjb21lICovCi0JfQotCXNwaW5fbG9jaygmc2JfbG9jayk7Ci0Jc2ItPnNfY291bnQrKzsKLQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOyAvKiBjYW4ndCBncmFiIC0+c191bW91bnQgdW5kZXIgaXQgKi8KLQlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7Ci0JLyogZnMgaXMgYWxyZWFkeSBzaHV0IGRvd247IHRoZSB3YXRjaCBpcyBkZWFkICovCi0JZHJvcF9zdXBlcihzYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVucGluX2FuZF9raWxsKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gd2F0Y2gtPmlub2RlLT5pX3NiOwotCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKLX0KLQotLyoqCi0gKiBpbm90aWZ5X2Rlc3Ryb3kgLSBjbGVhbiB1cCBhbmQgZGVzdHJveSBhbiBpbm90aWZ5IGluc3RhbmNlCi0gKiBAaWg6IGlub3RpZnkgaGFuZGxlCi0gKi8KLXZvaWQgaW5vdGlmeV9kZXN0cm95KHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpCi17Ci0JLyoKLQkgKiBEZXN0cm95IGFsbCBvZiB0aGUgd2F0Y2hlcyBmb3IgdGhpcyBoYW5kbGUuIFVuZm9ydHVuYXRlbHksIG5vdCB2ZXJ5Ci0JICogcHJldHR5LiAgV2UgY2Fubm90IGRvIGEgc2ltcGxlIGl0ZXJhdGlvbiBvdmVyIHRoZSBsaXN0LCBiZWNhdXNlIHdlCi0JICogZG8gbm90IGtub3cgdGhlIGlub2RlIHVudGlsIHdlIGl0ZXJhdGUgdG8gdGhlIHdhdGNoLiAgQnV0IHdlIG5lZWQgdG8KLQkgKiBob2xkIGlub2RlLT5pbm90aWZ5X211dGV4IGJlZm9yZSBpaC0+bXV0ZXguICBUaGUgZm9sbG93aW5nIHdvcmtzLgotCSAqCi0JICogQVY6IGl0IGhhZCB0byBiZWNvbWUgZXZlbiB1Z2xpZXIgdG8gc3RhcnQgd29ya2luZyA7LS8KLQkgKi8KLQl3aGlsZSAoMSkgewotCQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXM7Ci0JCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKLQkJd2F0Y2hlcyA9ICZpaC0+d2F0Y2hlczsKLQkJaWYgKGxpc3RfZW1wdHkod2F0Y2hlcykpIHsKLQkJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXdhdGNoID0gbGlzdF9maXJzdF9lbnRyeSh3YXRjaGVzLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCwgaF9saXN0KTsKLQkJc2IgPSB3YXRjaC0+aW5vZGUtPmlfc2I7Ci0JCWlmICghcGluX3RvX2tpbGwoaWgsIHdhdGNoKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlub2RlID0gd2F0Y2gtPmlub2RlOwotCQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JCW11dGV4X2xvY2soJmloLT5tdXRleCk7Ci0KLQkJLyogbWFrZSBzdXJlIHdlIGRpZG4ndCByYWNlIHdpdGggYW5vdGhlciBsaXN0IHJlbW92YWwgKi8KLQkJaWYgKGxpa2VseShpZHJfZmluZCgmaWgtPmlkciwgd2F0Y2gtPndkKSkpIHsKLQkJCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgaWgpOwotCQkJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwotCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQkJdW5waW5fYW5kX2tpbGwod2F0Y2gpOwotCX0KLQotCS8qIGZyZWUgdGhpcyBoYW5kbGU6IHRoZSBwdXQgbWF0Y2hpbmcgdGhlIGdldCBpbiBpbm90aWZ5X2luaXQoKSAqLwotCXB1dF9pbm90aWZ5X2hhbmRsZShpaCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2Rlc3Ryb3kpOwotCi0vKioKLSAqIGlub3RpZnlfZmluZF93YXRjaCAtIGZpbmQgYW4gZXhpc3Rpbmcgd2F0Y2ggZm9yIGFuIChpaCxpbm9kZSkgcGFpcgotICogQGloOiBpbm90aWZ5IGhhbmRsZQotICogQGlub2RlOiBpbm9kZSB0byB3YXRjaAotICogQHdhdGNocDogcG9pbnRlciB0byBleGlzdGluZyBpbm90aWZ5X3dhdGNoCi0gKgotICogQ2FsbGVyIG11c3QgcGluIGdpdmVuIGlub2RlICh2aWEgbmFtZWlkYXRhKS4KLSAqLwotczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKip3YXRjaHApCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKLQlpbnQgcmV0ID0gLUVOT0VOVDsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCi0Jb2xkID0gaW5vZGVfZmluZF9oYW5kbGUoaW5vZGUsIGloKTsKLQlpZiAodW5saWtlbHkob2xkKSkgewotCQlnZXRfaW5vdGlmeV93YXRjaChvbGQpOyAvKiBjYWxsZXIgbXVzdCBwdXQgd2F0Y2ggKi8KLQkJKndhdGNocCA9IG9sZDsKLQkJcmV0ID0gb2xkLT53ZDsKLQl9Ci0KLQltdXRleF91bmxvY2soJmloLT5tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9maW5kX3dhdGNoKTsKLQotLyoqCi0gKiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoIC0gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXNrIG9mIGFuIGV4aXN0aW5nIHdhdGNoCi0gKiBAaWg6IGlub3RpZnkgaGFuZGxlCi0gKiBAaW5vZGU6IGlub2RlJ3Mgd2F0Y2ggdG8gdXBkYXRlCi0gKiBAbWFzazogbWFzayBvZiBldmVudHMgdG8gd2F0Y2gKLSAqCi0gKiBDYWxsZXIgbXVzdCBwaW4gZ2l2ZW4gaW5vZGUgKHZpYSBuYW1laWRhdGEpLgotICovCi1zMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgdTMyIG1hc2spCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKLQlpbnQgbWFza19hZGQgPSAwOwotCWludCByZXQ7Ci0KLQlpZiAobWFzayAmIElOX01BU0tfQUREKQotCQltYXNrX2FkZCA9IDE7Ci0KLQkvKiBkb24ndCBhbGxvdyBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCi0JbWFzayAmPSBJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVDsKLQlpZiAodW5saWtlbHkoIW1hc2spKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCi0JLyoKLQkgKiBIYW5kbGUgdGhlIGNhc2Ugb2YgcmUtYWRkaW5nIGEgd2F0Y2ggb24gYW4gKGlub2RlLGloKSBwYWlyIHRoYXQgd2UKLQkgKiBhcmUgYWxyZWFkeSB3YXRjaGluZy4gIFdlIGp1c3QgdXBkYXRlIHRoZSBtYXNrIGFuZCByZXR1cm4gaXRzIHdkLgotCSAqLwotCW9sZCA9IGlub2RlX2ZpbmRfaGFuZGxlKGlub2RlLCBpaCk7Ci0JaWYgKHVubGlrZWx5KCFvbGQpKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChtYXNrX2FkZCkKLQkJb2xkLT5tYXNrIHw9IG1hc2s7Ci0JZWxzZQotCQlvbGQtPm1hc2sgPSBtYXNrOwotCXJldCA9IG9sZC0+d2Q7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKTsKLQotLyoqCi0gKiBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGlub3RpZnkgaW5zdGFuY2UKLSAqIEBpaDogaW5vdGlmeSBoYW5kbGUKLSAqIEB3YXRjaDogY2FsbGVyIGFsbG9jYXRlZCB3YXRjaCBzdHJ1Y3R1cmUKLSAqIEBpbm9kZTogaW5vZGUgdG8gd2F0Y2gKLSAqIEBtYXNrOiBtYXNrIG9mIGV2ZW50cyB0byB3YXRjaAotICoKLSAqIENhbGxlciBtdXN0IHBpbiBnaXZlbiBpbm9kZSAodmlhIG5hbWVpZGF0YSkuCi0gKiBDYWxsZXIgbXVzdCBlbnN1cmUgaXQgb25seSBjYWxscyBpbm90aWZ5X2FkZF93YXRjaCgpIG9uY2UgcGVyIHdhdGNoLgotICogQ2FsbHMgaW5vdGlmeV9oYW5kbGVfZ2V0X3dkKCkgc28gbWF5IHNsZWVwLgotICovCi1zMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAotCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgbmV3bHlfd2F0Y2hlZDsKLQotCS8qIGRvbid0IGFsbG93IGludmFsaWQgYml0czogd2UgZG9uJ3Qgd2FudCBmbGFncyBzZXQgKi8KLQltYXNrICY9IElOX0FMTF9FVkVOVFMgfCBJTl9PTkVTSE9UOwotCWlmICh1bmxpa2VseSghbWFzaykpCi0JCXJldHVybiAtRUlOVkFMOwotCXdhdGNoLT5tYXNrID0gbWFzazsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCi0JLyogSW5pdGlhbGl6ZSBhIG5ldyB3YXRjaCAqLwotCXJldCA9IGlub3RpZnlfaGFuZGxlX2dldF93ZChpaCwgd2F0Y2gpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlnb3RvIG91dDsKLQlyZXQgPSB3YXRjaC0+d2Q7Ci0KLQkvKiBzYXZlIGEgcmVmZXJlbmNlIHRvIGhhbmRsZSBhbmQgYnVtcCB0aGUgY291bnQgdG8gbWFrZSBpdCBvZmZpY2lhbCAqLwotCWdldF9pbm90aWZ5X2hhbmRsZShpaCk7Ci0Jd2F0Y2gtPmloID0gaWg7Ci0KLQkvKgotCSAqIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGFuZCBidW1wIHRoZSByZWYgY291bnQgdG8gbWFrZSBpdAotCSAqIG9mZmljaWFsLiAgV2UgaG9sZCBhIHJlZmVyZW5jZSB0byBuYW1laWRhdGEsIHdoaWNoIG1ha2VzIHRoaXMgc2FmZS4KLQkgKi8KLQl3YXRjaC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7Ci0KLQkvKiBBZGQgdGhlIHdhdGNoIHRvIHRoZSBoYW5kbGUncyBhbmQgdGhlIGlub2RlJ3MgbGlzdCAqLwotCW5ld2x5X3dhdGNoZWQgPSAhaW5vdGlmeV9pbm9kZV93YXRjaGVkKGlub2RlKTsKLQlsaXN0X2FkZCgmd2F0Y2gtPmhfbGlzdCwgJmloLT53YXRjaGVzKTsKLQlsaXN0X2FkZCgmd2F0Y2gtPmlfbGlzdCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOwotCS8qCi0JICogU2V0IGNoaWxkIGZsYWdzIF9hZnRlcl8gYWRkaW5nIHRoZSB3YXRjaCwgc28gdGhlcmUgaXMgbm8gcmFjZQotCSAqIHdpbmRvd3Mgd2hlcmUgbmV3bHkgaW5zdGFudGlhdGVkIGNoaWxkcmVuIGNvdWxkIG1pc3MgdGhlaXIgcGFyZW50J3MKLQkgKiB3YXRjaGVkIGZsYWcuCi0JICovCi0JaWYgKG5ld2x5X3dhdGNoZWQpCi0JCXNldF9kZW50cnlfY2hpbGRfZmxhZ3MoaW5vZGUsIDEpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2FkZF93YXRjaCk7Ci0KLS8qKgotICogaW5vdGlmeV9jbG9uZV93YXRjaCAtIHB1dCB0aGUgd2F0Y2ggbmV4dCB0byBleGlzdGluZyBvbmUKLSAqIEBvbGQ6IGFscmVhZHkgaW5zdGFsbGVkIHdhdGNoCi0gKiBAbmV3OiBuZXcgd2F0Y2gKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIHRoZSBpbm90aWZ5X211dGV4IG9mIGlub2RlIHdlIGFyZSBkZWFsaW5nIHdpdGg7Ci0gKiBpdCBpcyBleHBlY3RlZCB0byByZW1vdmUgdGhlIG9sZCB3YXRjaCBiZWZvcmUgdW5sb2NraW5nIHRoZSBpbm9kZS4KLSAqLwotczMyIGlub3RpZnlfY2xvbmVfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZCwgc3RydWN0IGlub3RpZnlfd2F0Y2ggKm5ldykKLXsKLQlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloID0gb2xkLT5paDsKLQlpbnQgcmV0ID0gMDsKLQotCW5ldy0+bWFzayA9IG9sZC0+bWFzazsKLQluZXctPmloID0gaWg7Ci0KLQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCi0JLyogSW5pdGlhbGl6ZSBhIG5ldyB3YXRjaCAqLwotCXJldCA9IGlub3RpZnlfaGFuZGxlX2dldF93ZChpaCwgbmV3KTsKLQlpZiAodW5saWtlbHkocmV0KSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gbmV3LT53ZDsKLQotCWdldF9pbm90aWZ5X2hhbmRsZShpaCk7Ci0KLQluZXctPmlub2RlID0gaWdyYWIob2xkLT5pbm9kZSk7Ci0KLQlsaXN0X2FkZCgmbmV3LT5oX2xpc3QsICZpaC0+d2F0Y2hlcyk7Ci0JbGlzdF9hZGQoJm5ldy0+aV9saXN0LCAmb2xkLT5pbm9kZS0+aW5vdGlmeV93YXRjaGVzKTsKLW91dDoKLQltdXRleF91bmxvY2soJmloLT5tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBpbm90aWZ5X2V2aWN0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7Ci0JbXV0ZXhfbG9jaygmd2F0Y2gtPmloLT5tdXRleCk7Ci0JaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKHdhdGNoLT5paCwgd2F0Y2gpOwotCW11dGV4X3VubG9jaygmd2F0Y2gtPmloLT5tdXRleCk7Ci19Ci0KLS8qKgotICogaW5vdGlmeV9ybV93ZCAtIHJlbW92ZSBhIHdhdGNoIGZyb20gYW4gaW5vdGlmeSBpbnN0YW5jZQotICogQGloOiBpbm90aWZ5IGhhbmRsZQotICogQHdkOiB3YXRjaCBkZXNjcmlwdG9yIHRvIHJlbW92ZQotICoKLSAqIENhbiBzbGVlcC4KLSAqLwotaW50IGlub3RpZnlfcm1fd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgdTMyIHdkKQotewotCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOwotCXdhdGNoID0gaWRyX2ZpbmQoJmloLT5pZHIsIHdkKTsKLQlpZiAodW5saWtlbHkoIXdhdGNoKSkgewotCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlzYiA9IHdhdGNoLT5pbm9kZS0+aV9zYjsKLQlpZiAoIXBpbl90b19raWxsKGloLCB3YXRjaCkpCi0JCXJldHVybiAwOwotCi0JaW5vZGUgPSB3YXRjaC0+aW5vZGU7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKLQotCS8qIG1ha2Ugc3VyZSB0aGF0IHdlIGRpZCBub3QgcmFjZSAqLwotCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmloLT5pZHIsIHdkKSA9PSB3YXRjaCkpCi0JCWlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChpaCwgd2F0Y2gpOwotCi0JbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCXVucGluX2FuZF9raWxsKHdhdGNoKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9ybV93ZCk7Ci0KLS8qKgotICogaW5vdGlmeV9ybV93YXRjaCAtIHJlbW92ZSBhIHdhdGNoIGZyb20gYW4gaW5vdGlmeSBpbnN0YW5jZQotICogQGloOiBpbm90aWZ5IGhhbmRsZQotICogQHdhdGNoOiB3YXRjaCB0byByZW1vdmUKLSAqCi0gKiBDYW4gc2xlZXAuCi0gKi8KLWludCBpbm90aWZ5X3JtX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCi0JCSAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotCXJldHVybiBpbm90aWZ5X3JtX3dkKGloLCB3YXRjaC0+d2QpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9ybV93YXRjaCk7Ci0KLS8qCi0gKiBpbm90aWZ5X3NldHVwIC0gY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgotICovCi1zdGF0aWMgaW50IF9faW5pdCBpbm90aWZ5X3NldHVwKHZvaWQpCi17Ci0JQlVJTERfQlVHX09OKElOX0FDQ0VTUyAhPSBGU19BQ0NFU1MpOwotCUJVSUxEX0JVR19PTihJTl9NT0RJRlkgIT0gRlNfTU9ESUZZKTsKLQlCVUlMRF9CVUdfT04oSU5fQVRUUklCICE9IEZTX0FUVFJJQik7Ci0JQlVJTERfQlVHX09OKElOX0NMT1NFX1dSSVRFICE9IEZTX0NMT1NFX1dSSVRFKTsKLQlCVUlMRF9CVUdfT04oSU5fQ0xPU0VfTk9XUklURSAhPSBGU19DTE9TRV9OT1dSSVRFKTsKLQlCVUlMRF9CVUdfT04oSU5fT1BFTiAhPSBGU19PUEVOKTsKLQlCVUlMRF9CVUdfT04oSU5fTU9WRURfRlJPTSAhPSBGU19NT1ZFRF9GUk9NKTsKLQlCVUlMRF9CVUdfT04oSU5fTU9WRURfVE8gIT0gRlNfTU9WRURfVE8pOwotCUJVSUxEX0JVR19PTihJTl9DUkVBVEUgIT0gRlNfQ1JFQVRFKTsKLQlCVUlMRF9CVUdfT04oSU5fREVMRVRFICE9IEZTX0RFTEVURSk7Ci0JQlVJTERfQlVHX09OKElOX0RFTEVURV9TRUxGICE9IEZTX0RFTEVURV9TRUxGKTsKLQlCVUlMRF9CVUdfT04oSU5fTU9WRV9TRUxGICE9IEZTX01PVkVfU0VMRik7Ci0JQlVJTERfQlVHX09OKElOX1FfT1ZFUkZMT1cgIT0gRlNfUV9PVkVSRkxPVyk7Ci0KLQlCVUlMRF9CVUdfT04oSU5fVU5NT1VOVCAhPSBGU19VTk1PVU5UKTsKLQlCVUlMRF9CVUdfT04oSU5fSVNESVIgIT0gRlNfSU5fSVNESVIpOwotCUJVSUxEX0JVR19PTihJTl9JR05PUkVEICE9IEZTX0lOX0lHTk9SRUQpOwotCUJVSUxEX0JVR19PTihJTl9PTkVTSE9UICE9IEZTX0lOX09ORVNIT1QpOwotCi0JYXRvbWljX3NldCgmaW5vdGlmeV9jb29raWUsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLW1vZHVsZV9pbml0KGlub3RpZnlfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5oIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5oCmluZGV4IGYyMzRmM2EuLmI2NjQyZTQgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuaAorKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmgKQEAgLTksMTMgKzksMTIgQEAKIAlpbnQgd2Q7CiB9OwogCi1zdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5IHsKLQkvKiBmc25vdGlmeV9tYXJrX2VudHJ5IE1VU1QgYmUgdGhlIGZpcnN0IHRoaW5nICovCi0Jc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgZnNuX2VudHJ5Oworc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyayB7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgZnNuX21hcms7CiAJaW50IHdkOwogfTsKIAotZXh0ZXJuIHZvaWQgaW5vdGlmeV9pZ25vcmVkX2FuZF9yZW1vdmVfaWRyKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSwKK2V4dGVybiB2b2lkIGlub3RpZnlfaWdub3JlZF9hbmRfcmVtb3ZlX2lkcihzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcmssCiAJCQkJCSAgIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9mcmVlX2V2ZW50X3ByaXYoc3RydWN0IGZzbm90aWZ5X2V2ZW50X3ByaXZhdGVfZGF0YSAqZXZlbnRfcHJpdik7CiAKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfZnNub3RpZnkuYwppbmRleCBlMjc5NjBjLi41ZTczZWViIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMKKysrIGIvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV9mc25vdGlmeS5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPiAvKiBkX3VubGlua2VkICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4gLyogc3RydWN0IGlub2RlICovCiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnlfYmFja2VuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KQEAgLTMyLDI2ICszMyw4NCBAQAogCiAjaW5jbHVkZSAiaW5vdGlmeS5oIgogCi1zdGF0aWMgaW50IGlub3RpZnlfaGFuZGxlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQpCisvKgorICogQ2hlY2sgaWYgMiBldmVudHMgY29udGFpbiB0aGUgc2FtZSBpbmZvcm1hdGlvbi4gIFdlIGRvIG5vdCBjb21wYXJlIHByaXZhdGUgZGF0YQorICogYnV0IGF0IHRoaXMgbW9tZW50IHRoYXQgaXNuJ3QgYSBwcm9ibGVtIGZvciBhbnkga25vdyBmc25vdGlmeSBsaXN0ZW5lcnMuCisgKi8KK3N0YXRpYyBib29sIGV2ZW50X2NvbXBhcmUoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpvbGQsIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqbmV3KQogewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5ICppZW50cnk7CisJaWYgKChvbGQtPm1hc2sgPT0gbmV3LT5tYXNrKSAmJgorCSAgICAob2xkLT50b190ZWxsID09IG5ldy0+dG9fdGVsbCkgJiYKKwkgICAgKG9sZC0+ZGF0YV90eXBlID09IG5ldy0+ZGF0YV90eXBlKSAmJgorCSAgICAob2xkLT5uYW1lX2xlbiA9PSBuZXctPm5hbWVfbGVuKSkgeworCQlzd2l0Y2ggKG9sZC0+ZGF0YV90eXBlKSB7CisJCWNhc2UgKEZTTk9USUZZX0VWRU5UX0lOT0RFKToKKwkJCS8qIHJlbWVtYmVyLCBhZnRlciBvbGQgd2FzIHB1dCBvbiB0aGUgd2FpdF9xIHdlIGFyZW4ndAorCQkJICogYWxsb3dlZCB0byBsb29rIGF0IHRoZSBpbm9kZSBhbnkgbW9yZSwgb25seSB0aGluZworCQkJICogbGVmdCB0byBjaGVjayB3YXMgaWYgdGhlIGZpbGVfbmFtZSBpcyB0aGUgc2FtZSAqLworCQkJaWYgKCFvbGQtPm5hbWVfbGVuIHx8CisJCQkgICAgIXN0cmNtcChvbGQtPmZpbGVfbmFtZSwgbmV3LT5maWxlX25hbWUpKQorCQkJCXJldHVybiB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgKEZTTk9USUZZX0VWRU5UX0ZJTEUpOgorCQkJaWYgKChvbGQtPmZpbGUtPmZfcGF0aC5tbnQgPT0gbmV3LT5maWxlLT5mX3BhdGgubW50KSAmJgorCQkJICAgIChvbGQtPmZpbGUtPmZfcGF0aC5kZW50cnkgPT0gbmV3LT5maWxlLT5mX3BhdGguZGVudHJ5KSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIChGU05PVElGWV9FVkVOVF9OT05FKToKKwkJCWlmIChvbGQtPm1hc2sgJiBGU19RX09WRVJGTE9XKQorCQkJCXJldHVybiB0cnVlOworCQkJZWxzZSBpZiAob2xkLT5tYXNrICYgRlNfSU5fSUdOT1JFRCkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICppbm90aWZ5X21lcmdlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCisJCQkJCSAgICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBmc25vdGlmeV9ldmVudF9ob2xkZXIgKmxhc3RfaG9sZGVyOworCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqbGFzdF9ldmVudDsKKworCS8qIGFuZCB0aGUgbGlzdCBiZXR0ZXIgYmUgbG9ja2VkIGJ5IHNvbWV0aGluZyB0b28gKi8KKwlzcGluX2xvY2soJmV2ZW50LT5sb2NrKTsKKworCWxhc3RfaG9sZGVyID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyLCBldmVudF9saXN0KTsKKwlsYXN0X2V2ZW50ID0gbGFzdF9ob2xkZXItPmV2ZW50OworCWlmIChldmVudF9jb21wYXJlKGxhc3RfZXZlbnQsIGV2ZW50KSkKKwkJZnNub3RpZnlfZ2V0X2V2ZW50KGxhc3RfZXZlbnQpOworCWVsc2UKKwkJbGFzdF9ldmVudCA9IE5VTEw7CisKKwlzcGluX3VubG9jaygmZXZlbnQtPmxvY2spOworCisJcmV0dXJuIGxhc3RfZXZlbnQ7Cit9CisKK3N0YXRpYyBpbnQgaW5vdGlmeV9oYW5kbGVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqaW5vZGVfbWFyaywKKwkJCQlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCQlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKIAlzdHJ1Y3QgaW5vZGUgKnRvX3RlbGw7CiAJc3RydWN0IGlub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhICpldmVudF9wcml2OwogCXN0cnVjdCBmc25vdGlmeV9ldmVudF9wcml2YXRlX2RhdGEgKmZzbl9ldmVudF9wcml2OwotCWludCB3ZCwgcmV0OworCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqYWRkZWRfZXZlbnQ7CisJaW50IHdkLCByZXQgPSAwOworCisJQlVHX09OKHZmc21vdW50X21hcmspOworCisJcHJfZGVidWcoIiVzOiBncm91cD0lcCBldmVudD0lcCB0b190ZWxsPSVwIG1hc2s9JXhcbiIsIF9fZnVuY19fLCBncm91cCwKKwkJIGV2ZW50LCBldmVudC0+dG9fdGVsbCwgZXZlbnQtPm1hc2spOwogCiAJdG9fdGVsbCA9IGV2ZW50LT50b190ZWxsOwogCi0Jc3Bpbl9sb2NrKCZ0b190ZWxsLT5pX2xvY2spOwotCWVudHJ5ID0gZnNub3RpZnlfZmluZF9tYXJrX2VudHJ5KGdyb3VwLCB0b190ZWxsKTsKLQlzcGluX3VubG9jaygmdG9fdGVsbC0+aV9sb2NrKTsKLQkvKiByYWNlIHdpdGggd2F0Y2ggcmVtb3ZhbD8gIFdlIGFscmVhZHkgcGFzc2VzIHNob3VsZF9zZW5kICovCi0JaWYgKHVubGlrZWx5KCFlbnRyeSkpCi0JCXJldHVybiAwOwotCWllbnRyeSA9IGNvbnRhaW5lcl9vZihlbnRyeSwgc3RydWN0IGlub3RpZnlfaW5vZGVfbWFya19lbnRyeSwKLQkJCSAgICAgIGZzbl9lbnRyeSk7Ci0Jd2QgPSBpZW50cnktPndkOworCWlfbWFyayA9IGNvbnRhaW5lcl9vZihpbm9kZV9tYXJrLCBzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrLAorCQkJICAgICAgZnNuX21hcmspOworCXdkID0gaV9tYXJrLT53ZDsKIAogCWV2ZW50X3ByaXYgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X3ByaXZfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWV2ZW50X3ByaXYpKQpAQCAtNjIsNDggKzEyMSw0MCBAQAogCWZzbl9ldmVudF9wcml2LT5ncm91cCA9IGdyb3VwOwogCWV2ZW50X3ByaXYtPndkID0gd2Q7CiAKLQlyZXQgPSBmc25vdGlmeV9hZGRfbm90aWZ5X2V2ZW50KGdyb3VwLCBldmVudCwgZnNuX2V2ZW50X3ByaXYpOwotCWlmIChyZXQpIHsKKwlhZGRlZF9ldmVudCA9IGZzbm90aWZ5X2FkZF9ub3RpZnlfZXZlbnQoZ3JvdXAsIGV2ZW50LCBmc25fZXZlbnRfcHJpdiwgaW5vdGlmeV9tZXJnZSk7CisJaWYgKGFkZGVkX2V2ZW50KSB7CiAJCWlub3RpZnlfZnJlZV9ldmVudF9wcml2KGZzbl9ldmVudF9wcml2KTsKLQkJLyogRUVYSVNUIHNheXMgd2UgdGFpbCBtYXRjaGVkLCBFT1ZFUkZMT1cgaXNuJ3Qgc29tZXRoaW5nCi0JCSAqIHRvIHJlcG9ydCB1cCB0aGUgc3RhY2suICovCi0JCWlmICgocmV0ID09IC1FRVhJU1QpIHx8Ci0JCSAgICAocmV0ID09IC1FT1ZFUkZMT1cpKQotCQkJcmV0ID0gMDsKKwkJaWYgKCFJU19FUlIoYWRkZWRfZXZlbnQpKQorCQkJZnNub3RpZnlfcHV0X2V2ZW50KGFkZGVkX2V2ZW50KTsKKwkJZWxzZQorCQkJcmV0ID0gUFRSX0VSUihhZGRlZF9ldmVudCk7CiAJfQogCi0JLyoKLQkgKiBJZiB3ZSBob2xkIHRoZSBlbnRyeSB1bnRpbCBhZnRlciB0aGUgZXZlbnQgaXMgb24gdGhlIHF1ZXVlCi0JICogSU5fSUdOT1JFRCB3b24ndCBiZSBhYmxlIHRvIHBhc3MgdGhpcyBldmVudCBpbiB0aGUgcXVldWUKLQkgKi8KLQlmc25vdGlmeV9wdXRfbWFyayhlbnRyeSk7CisJaWYgKGlub2RlX21hcmstPm1hc2sgJiBJTl9PTkVTSE9UKQorCQlmc25vdGlmeV9kZXN0cm95X21hcmsoaW5vZGVfbWFyayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpbm90aWZ5X2ZyZWVpbmdfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnksIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCitzdGF0aWMgdm9pZCBpbm90aWZ5X2ZyZWVpbmdfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcmssIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCiB7Ci0JaW5vdGlmeV9pZ25vcmVkX2FuZF9yZW1vdmVfaWRyKGVudHJ5LCBncm91cCk7CisJaW5vdGlmeV9pZ25vcmVkX2FuZF9yZW1vdmVfaWRyKGZzbl9tYXJrLCBncm91cCk7CiB9CiAKLXN0YXRpYyBib29sIGlub3RpZnlfc2hvdWxkX3NlbmRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgbWFzaykKK3N0YXRpYyBib29sIGlub3RpZnlfc2hvdWxkX3NlbmRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqaW5vZGVfbWFyaywKKwkJCQkgICAgICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCQkgICAgICBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV90eXBlKQogewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeTsKLQlib29sIHNlbmQ7CisJaWYgKChpbm9kZV9tYXJrLT5tYXNrICYgRlNfRVhDTF9VTkxJTkspICYmCisJICAgIChkYXRhX3R5cGUgPT0gRlNOT1RJRllfRVZFTlRfRklMRSkpIHsKKwkJc3RydWN0IGZpbGUgKmZpbGUgID0gZGF0YTsKIAotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JZW50cnkgPSBmc25vdGlmeV9maW5kX21hcmtfZW50cnkoZ3JvdXAsIGlub2RlKTsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaWYgKCFlbnRyeSkKLQkJcmV0dXJuIGZhbHNlOworCQlpZiAoZF91bmxpbmtlZChmaWxlLT5mX3BhdGguZGVudHJ5KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CiAKLQltYXNrID0gKG1hc2sgJiB+RlNfRVZFTlRfT05fQ0hJTEQpOwotCXNlbmQgPSAoZW50cnktPm1hc2sgJiBtYXNrKTsKLQotCS8qIGZpbmQgdG9vayBhIHJlZmVyZW5jZSAqLwotCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKLQotCXJldHVybiBzZW5kOworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtMTE1LDE4ICsxNjYsMTggQEAKICAqLwogc3RhdGljIGludCBpZHJfY2FsbGJhY2soaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5ICppZW50cnk7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbl9tYXJrOworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKIAlzdGF0aWMgYm9vbCB3YXJuZWQgPSBmYWxzZTsKIAogCWlmICh3YXJuZWQpCiAJCXJldHVybiAwOwogCiAJd2FybmVkID0gdHJ1ZTsKLQllbnRyeSA9IHA7Ci0JaWVudHJ5ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5LCBmc25fZW50cnkpOworCWZzbl9tYXJrID0gcDsKKwlpX21hcmsgPSBjb250YWluZXJfb2YoZnNuX21hcmssIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmssIGZzbl9tYXJrKTsKIAotCVdBUk4oMSwgImlub3RpZnkgY2xvc2luZyBidXQgaWQ9JWQgZm9yIGVudHJ5PSVwIGluIGdyb3VwPSVwIHN0aWxsIGluICIKKwlXQVJOKDEsICJpbm90aWZ5IGNsb3NpbmcgYnV0IGlkPSVkIGZvciBmc25fbWFyaz0lcCBpbiBncm91cD0lcCBzdGlsbCBpbiAiCiAJCSJpZHIuICBQcm9iYWJseSBsZWFraW5nIG1lbW9yeVxuIiwgaWQsIHAsIGRhdGEpOwogCiAJLyoKQEAgLTEzNSw5ICsxODYsOSBAQAogCSAqIG91dCB3aHkgd2UgZ290IGhlcmUgYW5kIHRoZSBwYW5pYyBpcyBubyB3b3JzZSB0aGFuIHRoZSBvcmlnaW5hbAogCSAqIEJVRygpIHRoYXQgd2FzIGhlcmUuCiAJICovCi0JaWYgKGVudHJ5KQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJlbnRyeS0+Z3JvdXA9JXAgaW5vZGU9JXAgd2Q9JWRcbiIsCi0JCQllbnRyeS0+Z3JvdXAsIGVudHJ5LT5pbm9kZSwgaWVudHJ5LT53ZCk7CisJaWYgKGZzbl9tYXJrKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJmc25fbWFyay0+Z3JvdXA9JXAgaW5vZGU9JXAgd2Q9JWRcbiIsCisJCQlmc25fbWFyay0+Z3JvdXAsIGZzbl9tYXJrLT5pLmlub2RlLCBpX21hcmstPndkKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwppbmRleCBlNDZjYTY4Li5iZjdmNmQ3IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwpAQCAtNDYsMTcgKzQ2LDExIEBACiAvKiB0aGVzZSBhcmUgY29uZmlndXJhYmxlIHZpYSAvcHJvYy9zeXMvZnMvaW5vdGlmeS8gKi8KIHN0YXRpYyBpbnQgaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cyBfX3JlYWRfbW9zdGx5OwotaW50IGlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGludCBpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICppbm90aWZ5X2lub2RlX21hcmtfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqZXZlbnRfcHJpdl9jYWNoZXAgX19yZWFkX21vc3RseTsKIAotLyoKLSAqIFdoZW4gaW5vdGlmeSByZWdpc3RlcnMgYSBuZXcgZ3JvdXAgaXQgaW5jcmVtZW50cyB0aGlzIGFuZCB1c2VzIHRoYXQKLSAqIHZhbHVlIGFzIGFuIG9mZnNldCB0byBzZXQgdGhlIGZzbm90aWZ5IGdyb3VwICJuYW1lIiBhbmQgcHJpb3JpdHkuCi0gKi8KLXN0YXRpYyBhdG9taWNfdCBpbm90aWZ5X2dycF9udW07Ci0KICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KQEAgLTk2LDExICs5MCwxNCBAQAogewogCV9fdTMyIG1hc2s7CiAKLQkvKiBldmVyeXRoaW5nIHNob3VsZCBhY2NlcHQgdGhlaXIgb3duIGlnbm9yZWQgYW5kIGNhcmVzIGFib3V0IGNoaWxkcmVuICovCi0JbWFzayA9IChGU19JTl9JR05PUkVEIHwgRlNfRVZFTlRfT05fQ0hJTEQpOworCS8qCisJICogZXZlcnl0aGluZyBzaG91bGQgYWNjZXB0IHRoZWlyIG93biBpZ25vcmVkLCBjYXJlcyBhYm91dCBjaGlsZHJlbiwKKwkgKiBhbmQgc2hvdWxkIHJlY2VpdmUgZXZlbnRzIHdoZW4gdGhlIGlub2RlIGlzIHVubW91bnRlZAorCSAqLworCW1hc2sgPSAoRlNfSU5fSUdOT1JFRCB8IEZTX0VWRU5UX09OX0NISUxEIHwgRlNfVU5NT1VOVCk7CiAKIAkvKiBtYXNrIG9mZiB0aGUgZmxhZ3MgdXNlZCB0byBvcGVuIHRoZSBmZCAqLwotCW1hc2sgfD0gKGFyZyAmIChJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVCkpOworCW1hc2sgfD0gKGFyZyAmIChJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVCB8IElOX0VYQ0xfVU5MSU5LKSk7CiAKIAlyZXR1cm4gbWFzazsKIH0KQEAgLTE0NCw2ICsxNDEsOCBAQAogCiAJZXZlbnQgPSBmc25vdGlmeV9wZWVrX25vdGlmeV9ldmVudChncm91cCk7CiAKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKwogCWlmIChldmVudC0+bmFtZV9sZW4pCiAJCWV2ZW50X3NpemUgKz0gcm91bmR1cChldmVudC0+bmFtZV9sZW4gKyAxLCBldmVudF9zaXplKTsKIApAQCAtMTczLDYgKzE3Miw4IEBACiAJc2l6ZV90IGV2ZW50X3NpemUgPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpOwogCXNpemVfdCBuYW1lX2xlbiA9IDA7CiAKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGV2ZW50PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50KTsKKwogCS8qIHdlIGdldCB0aGUgaW5vdGlmeSB3YXRjaCBkZXNjcmlwdG9yIGZyb20gdGhlIGV2ZW50IHByaXZhdGUgZGF0YSAqLwogCXNwaW5fbG9jaygmZXZlbnQtPmxvY2spOwogCWZzbl9wcml2ID0gZnNub3RpZnlfcmVtb3ZlX3ByaXZfZnJvbV9ldmVudChncm91cCwgZXZlbnQpOwpAQCAtMjQ1LDYgKzI0Niw4IEBACiAJCWtldmVudCA9IGdldF9vbmVfZXZlbnQoZ3JvdXAsIGNvdW50KTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKIAorCQlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGtldmVudD0lcFxuIiwgX19mdW5jX18sIGdyb3VwLCBrZXZlbnQpOworCiAJCWlmIChrZXZlbnQpIHsKIAkJCXJldCA9IFBUUl9FUlIoa2V2ZW50KTsKIAkJCWlmIChJU19FUlIoa2V2ZW50KSkKQEAgLTI4OSw2ICsyOTIsOCBAQAogCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyID0gZ3JvdXAtPmlub3RpZnlfZGF0YS51c2VyOwogCisJcHJfZGVidWcoIiVzOiBncm91cD0lcFxuIiwgX19mdW5jX18sIGdyb3VwKTsKKwogCWZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X2dyb3VwKGdyb3VwKTsKIAogCS8qIGZyZWUgdGhpcyBncm91cCwgbWF0Y2hpbmcgZ2V0IHdhcyBpbm90aWZ5X2luaXQtPmZzbm90aWZ5X29idGFpbl9ncm91cCAqLwpAQCAtMzEyLDYgKzMxNyw4IEBACiAJZ3JvdXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJcCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CiAKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwIGNtZD0ldVxuIiwgX19mdW5jX18sIGdyb3VwLCBjbWQpOworCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZJT05SRUFEOgogCQltdXRleF9sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKQEAgLTM1Nyw1OSArMzY0LDE1OSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBpbm90aWZ5X2FkZF90b19pZHIoc3RydWN0IGlkciAqaWRyLCBzcGlubG9ja190ICppZHJfbG9jaywKKwkJCSAgICAgIGludCAqbGFzdF93ZCwKKwkJCSAgICAgIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyaykKK3sKKwlpbnQgcmV0OworCisJZG8geworCQlpZiAodW5saWtlbHkoIWlkcl9wcmVfZ2V0KGlkciwgR0ZQX0tFUk5FTCkpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc3Bpbl9sb2NrKGlkcl9sb2NrKTsKKwkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoaWRyLCBpX21hcmssICpsYXN0X3dkICsgMSwKKwkJCQkJJmlfbWFyay0+d2QpOworCQkvKiB3ZSBhZGRlZCB0aGUgbWFyayB0byB0aGUgaWRyLCB0YWtlIGEgcmVmZXJlbmNlICovCisJCWlmICghcmV0KSB7CisJCQkqbGFzdF93ZCA9IGlfbWFyay0+d2Q7CisJCQlmc25vdGlmeV9nZXRfbWFyaygmaV9tYXJrLT5mc25fbWFyayk7CisJCX0KKwkJc3Bpbl91bmxvY2soaWRyX2xvY2spOworCX0gd2hpbGUgKHJldCA9PSAtRUFHQUlOKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrICppbm90aWZ5X2lkcl9maW5kX2xvY2tlZChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkJCQlpbnQgd2QpCit7CisJc3RydWN0IGlkciAqaWRyID0gJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyOworCXNwaW5sb2NrX3QgKmlkcl9sb2NrID0gJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyX2xvY2s7CisJc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyayAqaV9tYXJrOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKGlkcl9sb2NrKTsKKworCWlfbWFyayA9IGlkcl9maW5kKGlkciwgd2QpOworCWlmIChpX21hcmspIHsKKwkJc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbl9tYXJrID0gJmlfbWFyay0+ZnNuX21hcms7CisKKwkJZnNub3RpZnlfZ2V0X21hcmsoZnNuX21hcmspOworCQkvKiBPbmUgcmVmIGZvciBiZWluZyBpbiB0aGUgaWRyLCBvbmUgcmVmIHdlIGp1c3QgdG9vayAqLworCQlCVUdfT04oYXRvbWljX3JlYWQoJmZzbl9tYXJrLT5yZWZjbnQpIDwgMik7CisJfQorCisJcmV0dXJuIGlfbWFyazsKK30KKworc3RhdGljIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlub3RpZnlfaWRyX2ZpbmQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkJCQkgaW50IHdkKQoreworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKKwlzcGlubG9ja190ICppZHJfbG9jayA9ICZncm91cC0+aW5vdGlmeV9kYXRhLmlkcl9sb2NrOworCisJc3Bpbl9sb2NrKGlkcl9sb2NrKTsKKwlpX21hcmsgPSBpbm90aWZ5X2lkcl9maW5kX2xvY2tlZChncm91cCwgd2QpOworCXNwaW5fdW5sb2NrKGlkcl9sb2NrKTsKKworCXJldHVybiBpX21hcms7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2lub3RpZnlfcmVtb3ZlX2Zyb21faWRyKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyaykKK3sKKwlzdHJ1Y3QgaWRyICppZHIgPSAmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHI7CisJc3BpbmxvY2tfdCAqaWRyX2xvY2sgPSAmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHJfbG9jazsKKwlpbnQgd2QgPSBpX21hcmstPndkOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKGlkcl9sb2NrKTsKKworCWlkcl9yZW1vdmUoaWRyLCB3ZCk7CisKKwkvKiByZW1vdmVkIGZyb20gdGhlIGlkciwgZHJvcCB0aGF0IHJlZiAqLworCWZzbm90aWZ5X3B1dF9tYXJrKCZpX21hcmstPmZzbl9tYXJrKTsKK30KKwogLyoKICAqIFJlbW92ZSB0aGUgbWFyayBmcm9tIHRoZSBpZHIgKGlmIHByZXNlbnQpIGFuZCBkcm9wIHRoZSByZWZlcmVuY2UKICAqIG9uIHRoZSBtYXJrIGJlY2F1c2UgaXQgd2FzIGluIHRoZSBpZHIuCiAgKi8KIHN0YXRpYyB2b2lkIGlub3RpZnlfcmVtb3ZlX2Zyb21faWRyKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCi0JCQkJICAgIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmtfZW50cnkgKmllbnRyeSkKKwkJCQkgICAgc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyayAqaV9tYXJrKQogewotCXN0cnVjdCBpZHIgKmlkcjsKLQlzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGlub3RpZnlfaW5vZGVfbWFya19lbnRyeSAqZm91bmRfaWVudHJ5OworCXNwaW5sb2NrX3QgKmlkcl9sb2NrID0gJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyX2xvY2s7CisJc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyayAqZm91bmRfaV9tYXJrID0gTlVMTDsKIAlpbnQgd2Q7CiAKLQlzcGluX2xvY2soJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyX2xvY2spOwotCWlkciA9ICZncm91cC0+aW5vdGlmeV9kYXRhLmlkcjsKLQl3ZCA9IGllbnRyeS0+d2Q7CisJc3Bpbl9sb2NrKGlkcl9sb2NrKTsKKwl3ZCA9IGlfbWFyay0+d2Q7CiAKLQlpZiAod2QgPT0gLTEpCi0JCWdvdG8gb3V0OwotCi0JZW50cnkgPSBpZHJfZmluZCgmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHIsIHdkKTsKLQlpZiAodW5saWtlbHkoIWVudHJ5KSkKLQkJZ290byBvdXQ7Ci0KLQlmb3VuZF9pZW50cnkgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmtfZW50cnksIGZzbl9lbnRyeSk7Ci0JaWYgKHVubGlrZWx5KGZvdW5kX2llbnRyeSAhPSBpZW50cnkpKSB7Ci0JCS8qIFdlIGZvdW5kIGFuIGVudHJ5IGluIHRoZSBpZHIgd2l0aCB0aGUgcmlnaHQgd2QsIGJ1dCBpdCdzCi0JCSAqIG5vdCB0aGUgZW50cnkgd2Ugd2VyZSB0b2xkIHRvIHJlbW92ZS4gIGVwYXJpcyBzZXJpb3VzbHkKLQkJICogZnVja2VkIHVwIHNvbWV3aGVyZS4gKi8KLQkJV0FSTl9PTigxKTsKLQkJaWVudHJ5LT53ZCA9IC0xOworCS8qCisJICogZG9lcyB0aGlzIGlfbWFyayB0aGluayBpdCBpcyBpbiB0aGUgaWRyPyAgd2Ugc2hvdWxkbid0IGdldCBjYWxsZWQKKwkgKiBpZiBpdCB3YXNuJ3QuLi4uCisJICovCisJaWYgKHdkID09IC0xKSB7CisJCVdBUk5fT05DRSgxLCAiJXM6IGlfbWFyaz0lcCBpX21hcmstPndkPSVkIGlfbWFyay0+Z3JvdXA9JXAiCisJCQkiIGlfbWFyay0+aW5vZGU9JXBcbiIsIF9fZnVuY19fLCBpX21hcmssIGlfbWFyay0+d2QsCisJCQlpX21hcmstPmZzbl9tYXJrLmdyb3VwLCBpX21hcmstPmZzbl9tYXJrLmkuaW5vZGUpOwogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBPbmUgcmVmIGZvciBiZWluZyBpbiB0aGUgaWRyLCBvbmUgcmVmIGhlbGQgYnkgdGhlIGNhbGxlciAqLwotCUJVR19PTihhdG9taWNfcmVhZCgmZW50cnktPnJlZmNudCkgPCAyKTsKKwkvKiBMZXRzIGxvb2sgaW4gdGhlIGlkciB0byBzZWUgaWYgd2UgZmluZCBpdCAqLworCWZvdW5kX2lfbWFyayA9IGlub3RpZnlfaWRyX2ZpbmRfbG9ja2VkKGdyb3VwLCB3ZCk7CisJaWYgKHVubGlrZWx5KCFmb3VuZF9pX21hcmspKSB7CisJCVdBUk5fT05DRSgxLCAiJXM6IGlfbWFyaz0lcCBpX21hcmstPndkPSVkIGlfbWFyay0+Z3JvdXA9JXAiCisJCQkiIGlfbWFyay0+aW5vZGU9JXBcbiIsIF9fZnVuY19fLCBpX21hcmssIGlfbWFyay0+d2QsCisJCQlpX21hcmstPmZzbl9tYXJrLmdyb3VwLCBpX21hcmstPmZzbl9tYXJrLmkuaW5vZGUpOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZHJfcmVtb3ZlKGlkciwgd2QpOwotCWllbnRyeS0+d2QgPSAtMTsKKwkvKgorCSAqIFdlIGZvdW5kIGFuIG1hcmsgaW4gdGhlIGlkciBhdCB0aGUgcmlnaHQgd2QsIGJ1dCBpdCdzCisJICogbm90IHRoZSBtYXJrIHdlIHdlcmUgdG9sZCB0byByZW1vdmUuICBlcGFyaXMgc2VyaW91c2x5CisJICogZnVja2VkIHVwIHNvbWV3aGVyZS4KKwkgKi8KKwlpZiAodW5saWtlbHkoZm91bmRfaV9tYXJrICE9IGlfbWFyaykpIHsKKwkJV0FSTl9PTkNFKDEsICIlczogaV9tYXJrPSVwIGlfbWFyay0+d2Q9JWQgaV9tYXJrLT5ncm91cD0lcCAiCisJCQkibWFyay0+aW5vZGU9JXAgZm91bmRfaV9tYXJrPSVwIGZvdW5kX2lfbWFyay0+d2Q9JWQgIgorCQkJImZvdW5kX2lfbWFyay0+Z3JvdXA9JXAgZm91bmRfaV9tYXJrLT5pbm9kZT0lcFxuIiwKKwkJCV9fZnVuY19fLCBpX21hcmssIGlfbWFyay0+d2QsIGlfbWFyay0+ZnNuX21hcmsuZ3JvdXAsCisJCQlpX21hcmstPmZzbl9tYXJrLmkuaW5vZGUsIGZvdW5kX2lfbWFyaywgZm91bmRfaV9tYXJrLT53ZCwKKwkJCWZvdW5kX2lfbWFyay0+ZnNuX21hcmsuZ3JvdXAsCisJCQlmb3VuZF9pX21hcmstPmZzbl9tYXJrLmkuaW5vZGUpOworCQlnb3RvIG91dDsKKwl9CiAKLQkvKiByZW1vdmVkIGZyb20gdGhlIGlkciwgZHJvcCB0aGF0IHJlZiAqLwotCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKKwkvKgorCSAqIE9uZSByZWYgZm9yIGJlaW5nIGluIHRoZSBpZHIKKwkgKiBvbmUgcmVmIGhlbGQgYnkgdGhlIGNhbGxlciB0cnlpbmcgdG8ga2lsbCB1cworCSAqIG9uZSByZWYgZ3JhYmJlZCBieSBpbm90aWZ5X2lkcl9maW5kCisJICovCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZpX21hcmstPmZzbl9tYXJrLnJlZmNudCkgPCAzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpX21hcms9JXAgaV9tYXJrLT53ZD0lZCBpX21hcmstPmdyb3VwPSVwIgorCQkJIiBpX21hcmstPmlub2RlPSVwXG4iLCBfX2Z1bmNfXywgaV9tYXJrLCBpX21hcmstPndkLAorCQkJaV9tYXJrLT5mc25fbWFyay5ncm91cCwgaV9tYXJrLT5mc25fbWFyay5pLmlub2RlKTsKKwkJLyogd2UgY2FuJ3QgcmVhbGx5IHJlY292ZXIgd2l0aCBiYWQgcmVmIGNudGluZy4uICovCisJCUJVRygpOworCX0KKworCWRvX2lub3RpZnlfcmVtb3ZlX2Zyb21faWRyKGdyb3VwLCBpX21hcmspOwogb3V0OgotCXNwaW5fdW5sb2NrKCZncm91cC0+aW5vdGlmeV9kYXRhLmlkcl9sb2NrKTsKKwkvKiBtYXRjaCB0aGUgcmVmIHRha2VuIGJ5IGlub3RpZnlfaWRyX2ZpbmRfbG9ja2VkKCkgKi8KKwlpZiAoZm91bmRfaV9tYXJrKQorCQlmc25vdGlmeV9wdXRfbWFyaygmZm91bmRfaV9tYXJrLT5mc25fbWFyayk7CisJaV9tYXJrLT53ZCA9IC0xOworCXNwaW5fdW5sb2NrKGlkcl9sb2NrKTsKIH0KIAogLyoKICAqIFNlbmQgSU5fSUdOT1JFRCBmb3IgdGhpcyB3ZCwgcmVtb3ZlIHRoaXMgd2QgZnJvbSB0aGUgaWRyLgogICovCi12b2lkIGlub3RpZnlfaWdub3JlZF9hbmRfcmVtb3ZlX2lkcihzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnksCit2b2lkIGlub3RpZnlfaWdub3JlZF9hbmRfcmVtb3ZlX2lkcihzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNuX21hcmssCiAJCQkJICAgIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCiB7Ci0Jc3RydWN0IGlub3RpZnlfaW5vZGVfbWFya19lbnRyeSAqaWVudHJ5OwotCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqaWdub3JlZF9ldmVudDsKKwlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrICppX21hcms7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICppZ25vcmVkX2V2ZW50LCAqbm90aWZ5X2V2ZW50OwogCXN0cnVjdCBpbm90aWZ5X2V2ZW50X3ByaXZhdGVfZGF0YSAqZXZlbnRfcHJpdjsKIAlzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhICpmc25fZXZlbnRfcHJpdjsKIAlpbnQgcmV0OwpAQCAtNDIwLDcgKzUyNyw3IEBACiAJaWYgKCFpZ25vcmVkX2V2ZW50KQogCQlyZXR1cm47CiAKLQlpZW50cnkgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmtfZW50cnksIGZzbl9lbnRyeSk7CisJaV9tYXJrID0gY29udGFpbmVyX29mKGZzbl9tYXJrLCBzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrLCBmc25fbWFyayk7CiAKIAlldmVudF9wcml2ID0ga21lbV9jYWNoZV9hbGxvYyhldmVudF9wcml2X2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmICh1bmxpa2VseSghZXZlbnRfcHJpdikpCkBAIC00MjksMzcgKzUzNiw0NCBAQAogCWZzbl9ldmVudF9wcml2ID0gJmV2ZW50X3ByaXYtPmZzbm90aWZ5X2V2ZW50X3ByaXZfZGF0YTsKIAogCWZzbl9ldmVudF9wcml2LT5ncm91cCA9IGdyb3VwOwotCWV2ZW50X3ByaXYtPndkID0gaWVudHJ5LT53ZDsKKwlldmVudF9wcml2LT53ZCA9IGlfbWFyay0+d2Q7CiAKLQlyZXQgPSBmc25vdGlmeV9hZGRfbm90aWZ5X2V2ZW50KGdyb3VwLCBpZ25vcmVkX2V2ZW50LCBmc25fZXZlbnRfcHJpdik7Ci0JaWYgKHJldCkKKwlub3RpZnlfZXZlbnQgPSBmc25vdGlmeV9hZGRfbm90aWZ5X2V2ZW50KGdyb3VwLCBpZ25vcmVkX2V2ZW50LCBmc25fZXZlbnRfcHJpdiwgTlVMTCk7CisJaWYgKG5vdGlmeV9ldmVudCkgeworCQlpZiAoSVNfRVJSKG5vdGlmeV9ldmVudCkpCisJCQlyZXQgPSBQVFJfRVJSKG5vdGlmeV9ldmVudCk7CisJCWVsc2UKKwkJCWZzbm90aWZ5X3B1dF9ldmVudChub3RpZnlfZXZlbnQpOwogCQlpbm90aWZ5X2ZyZWVfZXZlbnRfcHJpdihmc25fZXZlbnRfcHJpdik7CisJfQogCiBza2lwX3NlbmRfaWdub3JlOgogCiAJLyogbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHRha2VuIHdoZW4gdGhlIGV2ZW50IHdhcyBjcmVhdGVkICovCiAJZnNub3RpZnlfcHV0X2V2ZW50KGlnbm9yZWRfZXZlbnQpOwogCi0JLyogcmVtb3ZlIHRoaXMgZW50cnkgZnJvbSB0aGUgaWRyICovCi0JaW5vdGlmeV9yZW1vdmVfZnJvbV9pZHIoZ3JvdXAsIGllbnRyeSk7CisJLyogcmVtb3ZlIHRoaXMgbWFyayBmcm9tIHRoZSBpZHIgKi8KKwlpbm90aWZ5X3JlbW92ZV9mcm9tX2lkcihncm91cCwgaV9tYXJrKTsKIAogCWF0b21pY19kZWMoJmdyb3VwLT5pbm90aWZ5X2RhdGEudXNlci0+aW5vdGlmeV93YXRjaGVzKTsKIH0KIAogLyogZGluZyBkb25nIHRoZSBtYXJrIGlzIGRlYWQgKi8KLXN0YXRpYyB2b2lkIGlub3RpZnlfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSkKK3N0YXRpYyB2b2lkIGlub3RpZnlfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25fbWFyaykKIHsKLQlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5ICppZW50cnkgPSAoc3RydWN0IGlub3RpZnlfaW5vZGVfbWFya19lbnRyeSAqKWVudHJ5OworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKIAotCWttZW1fY2FjaGVfZnJlZShpbm90aWZ5X2lub2RlX21hcmtfY2FjaGVwLCBpZW50cnkpOworCWlfbWFyayA9IGNvbnRhaW5lcl9vZihmc25fbWFyaywgc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyaywgZnNuX21hcmspOworCisJa21lbV9jYWNoZV9mcmVlKGlub3RpZnlfaW5vZGVfbWFya19jYWNoZXAsIGlfbWFyayk7CiB9CiAKIHN0YXRpYyBpbnQgaW5vdGlmeV91cGRhdGVfZXhpc3Rpbmdfd2F0Y2goc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKIAkJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSB1MzIgYXJnKQogewotCXN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5ICppZW50cnk7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbl9tYXJrOworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKIAlfX3UzMiBvbGRfbWFzaywgbmV3X21hc2s7CiAJX191MzIgbWFzazsKIAlpbnQgYWRkID0gKGFyZyAmIElOX01BU0tfQUREKTsKQEAgLTQ2Nyw1MiArNTgxLDQzIEBACiAKIAkvKiBkb24ndCBhbGxvdyBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCiAJbWFzayA9IGlub3RpZnlfYXJnX3RvX21hc2soYXJnKTsKLQlpZiAodW5saWtlbHkoIW1hc2spKQorCWlmICh1bmxpa2VseSghKG1hc2sgJiBJTl9BTExfRVZFTlRTKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQllbnRyeSA9IGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeShncm91cCwgaW5vZGUpOwotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlpZiAoIWVudHJ5KQorCWZzbl9tYXJrID0gZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKGdyb3VwLCBpbm9kZSk7CisJaWYgKCFmc25fbWFyaykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlpZW50cnkgPSBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmtfZW50cnksIGZzbl9lbnRyeSk7CisJaV9tYXJrID0gY29udGFpbmVyX29mKGZzbl9tYXJrLCBzdHJ1Y3QgaW5vdGlmeV9pbm9kZV9tYXJrLCBmc25fbWFyayk7CiAKLQlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKKwlzcGluX2xvY2soJmZzbl9tYXJrLT5sb2NrKTsKIAotCW9sZF9tYXNrID0gZW50cnktPm1hc2s7Ci0JaWYgKGFkZCkgewotCQllbnRyeS0+bWFzayB8PSBtYXNrOwotCQluZXdfbWFzayA9IGVudHJ5LT5tYXNrOwotCX0gZWxzZSB7Ci0JCWVudHJ5LT5tYXNrID0gbWFzazsKLQkJbmV3X21hc2sgPSBlbnRyeS0+bWFzazsKLQl9CisJb2xkX21hc2sgPSBmc25fbWFyay0+bWFzazsKKwlpZiAoYWRkKQorCQlmc25vdGlmeV9zZXRfbWFya19tYXNrX2xvY2tlZChmc25fbWFyaywgKGZzbl9tYXJrLT5tYXNrIHwgbWFzaykpOworCWVsc2UKKwkJZnNub3RpZnlfc2V0X21hcmtfbWFza19sb2NrZWQoZnNuX21hcmssIG1hc2spOworCW5ld19tYXNrID0gZnNuX21hcmstPm1hc2s7CiAKLQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOworCXNwaW5fdW5sb2NrKCZmc25fbWFyay0+bG9jayk7CiAKIAlpZiAob2xkX21hc2sgIT0gbmV3X21hc2spIHsKIAkJLyogbW9yZSBiaXRzIGluIG9sZCB0aGFuIGluIG5ldz8gKi8KIAkJaW50IGRyb3BwZWQgPSAob2xkX21hc2sgJiB+bmV3X21hc2spOwotCQkvKiBtb3JlIGJpdHMgaW4gdGhpcyBlbnRyeSB0aGFuIHRoZSBpbm9kZSdzIG1hc2s/ICovCisJCS8qIG1vcmUgYml0cyBpbiB0aGlzIGZzbl9tYXJrIHRoYW4gdGhlIGlub2RlJ3MgbWFzaz8gKi8KIAkJaW50IGRvX2lub2RlID0gKG5ld19tYXNrICYgfmlub2RlLT5pX2Zzbm90aWZ5X21hc2spOwotCQkvKiBtb3JlIGJpdHMgaW4gdGhpcyBlbnRyeSB0aGFuIHRoZSBncm91cD8gKi8KLQkJaW50IGRvX2dyb3VwID0gKG5ld19tYXNrICYgfmdyb3VwLT5tYXNrKTsKIAotCQkvKiB1cGRhdGUgdGhlIGlub2RlIHdpdGggdGhpcyBuZXcgZW50cnkgKi8KKwkJLyogdXBkYXRlIHRoZSBpbm9kZSB3aXRoIHRoaXMgbmV3IGZzbl9tYXJrICovCiAJCWlmIChkcm9wcGVkIHx8IGRvX2lub2RlKQogCQkJZnNub3RpZnlfcmVjYWxjX2lub2RlX21hc2soaW5vZGUpOwogCi0JCS8qIHVwZGF0ZSB0aGUgZ3JvdXAgbWFzayB3aXRoIHRoZSBuZXcgbWFzayAqLwotCQlpZiAoZHJvcHBlZCB8fCBkb19ncm91cCkKLQkJCWZzbm90aWZ5X3JlY2FsY19ncm91cF9tYXNrKGdyb3VwKTsKIAl9CiAKIAkvKiByZXR1cm4gdGhlIHdkICovCi0JcmV0ID0gaWVudHJ5LT53ZDsKKwlyZXQgPSBpX21hcmstPndkOwogCi0JLyogbWF0Y2ggdGhlIGdldCBmcm9tIGZzbm90aWZ5X2ZpbmRfbWFya19lbnRyeSgpICovCi0JZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOworCS8qIG1hdGNoIHRoZSBnZXQgZnJvbSBmc25vdGlmeV9maW5kX21hcmsoKSAqLworCWZzbm90aWZ5X3B1dF9tYXJrKGZzbl9tYXJrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MjEsNzMgKzYyNiw1MSBAQAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICB1MzIgYXJnKQogewotCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmtfZW50cnkgKnRtcF9pZW50cnk7CisJc3RydWN0IGlub3RpZnlfaW5vZGVfbWFyayAqdG1wX2lfbWFyazsKIAlfX3UzMiBtYXNrOwogCWludCByZXQ7CisJc3RydWN0IGlkciAqaWRyID0gJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyOworCXNwaW5sb2NrX3QgKmlkcl9sb2NrID0gJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyX2xvY2s7CiAKIAkvKiBkb24ndCBhbGxvdyBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCiAJbWFzayA9IGlub3RpZnlfYXJnX3RvX21hc2soYXJnKTsKLQlpZiAodW5saWtlbHkoIW1hc2spKQorCWlmICh1bmxpa2VseSghKG1hc2sgJiBJTl9BTExfRVZFTlRTKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdG1wX2llbnRyeSA9IGttZW1fY2FjaGVfYWxsb2MoaW5vdGlmeV9pbm9kZV9tYXJrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCF0bXBfaWVudHJ5KSkKKwl0bXBfaV9tYXJrID0ga21lbV9jYWNoZV9hbGxvYyhpbm90aWZ5X2lub2RlX21hcmtfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXRtcF9pX21hcmspKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZzbm90aWZ5X2luaXRfbWFyaygmdG1wX2llbnRyeS0+ZnNuX2VudHJ5LCBpbm90aWZ5X2ZyZWVfbWFyayk7Ci0JdG1wX2llbnRyeS0+ZnNuX2VudHJ5Lm1hc2sgPSBtYXNrOwotCXRtcF9pZW50cnktPndkID0gLTE7CisJZnNub3RpZnlfaW5pdF9tYXJrKCZ0bXBfaV9tYXJrLT5mc25fbWFyaywgaW5vdGlmeV9mcmVlX21hcmspOworCXRtcF9pX21hcmstPmZzbl9tYXJrLm1hc2sgPSBtYXNrOworCXRtcF9pX21hcmstPndkID0gLTE7CiAKIAlyZXQgPSAtRU5PU1BDOwogCWlmIChhdG9taWNfcmVhZCgmZ3JvdXAtPmlub3RpZnlfZGF0YS51c2VyLT5pbm90aWZ5X3dhdGNoZXMpID49IGlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcykKIAkJZ290byBvdXRfZXJyOwotcmV0cnk6Ci0JcmV0ID0gLUVOT01FTTsKLQlpZiAodW5saWtlbHkoIWlkcl9wcmVfZ2V0KCZncm91cC0+aW5vdGlmeV9kYXRhLmlkciwgR0ZQX0tFUk5FTCkpKQorCisJcmV0ID0gaW5vdGlmeV9hZGRfdG9faWRyKGlkciwgaWRyX2xvY2ssICZncm91cC0+aW5vdGlmeV9kYXRhLmxhc3Rfd2QsCisJCQkJIHRtcF9pX21hcmspOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIAotCS8qIHdlIGFyZSBwdXR0aW5nIHRoZSBtYXJrIG9uIHRoZSBpZHIsIHRha2UgYSByZWZlcmVuY2UgKi8KLQlmc25vdGlmeV9nZXRfbWFyaygmdG1wX2llbnRyeS0+ZnNuX2VudHJ5KTsKLQotCXNwaW5fbG9jaygmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHJfbG9jayk7Ci0JcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyLCAmdG1wX2llbnRyeS0+ZnNuX2VudHJ5LAotCQkJCWdyb3VwLT5pbm90aWZ5X2RhdGEubGFzdF93ZCsxLAotCQkJCSZ0bXBfaWVudHJ5LT53ZCk7Ci0Jc3Bpbl91bmxvY2soJmdyb3VwLT5pbm90aWZ5X2RhdGEuaWRyX2xvY2spOwotCWlmIChyZXQpIHsKLQkJLyogd2UgZGlkbid0IGdldCBvbiB0aGUgaWRyLCBkcm9wIHRoZSBpZHIgcmVmZXJlbmNlICovCi0JCWZzbm90aWZ5X3B1dF9tYXJrKCZ0bXBfaWVudHJ5LT5mc25fZW50cnkpOwotCi0JCS8qIGlkciB3YXMgb3V0IG9mIG1lbW9yeSBhbGxvY2F0ZSBhbmQgdHJ5IGFnYWluICovCi0JCWlmIChyZXQgPT0gLUVBR0FJTikKLQkJCWdvdG8gcmV0cnk7Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KIAkvKiB3ZSBhcmUgb24gdGhlIGlkciwgbm93IGdldCBvbiB0aGUgaW5vZGUgKi8KLQlyZXQgPSBmc25vdGlmeV9hZGRfbWFyaygmdG1wX2llbnRyeS0+ZnNuX2VudHJ5LCBncm91cCwgaW5vZGUpOworCXJldCA9IGZzbm90aWZ5X2FkZF9tYXJrKCZ0bXBfaV9tYXJrLT5mc25fbWFyaywgZ3JvdXAsIGlub2RlLCBOVUxMLCAwKTsKIAlpZiAocmV0KSB7CiAJCS8qIHdlIGZhaWxlZCB0byBnZXQgb24gdGhlIGlub2RlLCBnZXQgb2ZmIHRoZSBpZHIgKi8KLQkJaW5vdGlmeV9yZW1vdmVfZnJvbV9pZHIoZ3JvdXAsIHRtcF9pZW50cnkpOworCQlpbm90aWZ5X3JlbW92ZV9mcm9tX2lkcihncm91cCwgdG1wX2lfbWFyayk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQkvKiB1cGRhdGUgdGhlIGlkciBoaW50LCB3aG8gY2FyZXMgYWJvdXQgcmFjZXMsIGl0J3MganVzdCBhIGhpbnQgKi8KLQlncm91cC0+aW5vdGlmeV9kYXRhLmxhc3Rfd2QgPSB0bXBfaWVudHJ5LT53ZDsKLQogCS8qIGluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHdhdGNoZXMgdGhlIHVzZXIgaGFzICovCiAJYXRvbWljX2luYygmZ3JvdXAtPmlub3RpZnlfZGF0YS51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOwogCi0JLyogcmV0dXJuIHRoZSB3YXRjaCBkZXNjcmlwdG9yIGZvciB0aGlzIG5ldyBlbnRyeSAqLwotCXJldCA9IHRtcF9pZW50cnktPndkOwotCi0JLyogaWYgdGhpcyBtYXJrIGFkZGVkIGEgbmV3IGV2ZW50IHVwZGF0ZSB0aGUgZ3JvdXAgbWFzayAqLwotCWlmIChtYXNrICYgfmdyb3VwLT5tYXNrKQotCQlmc25vdGlmeV9yZWNhbGNfZ3JvdXBfbWFzayhncm91cCk7CisJLyogcmV0dXJuIHRoZSB3YXRjaCBkZXNjcmlwdG9yIGZvciB0aGlzIG5ldyBtYXJrICovCisJcmV0ID0gdG1wX2lfbWFyay0+d2Q7CiAKIG91dF9lcnI6Ci0JLyogbWF0Y2ggdGhlIHJlZiBmcm9tIGZzbm90aWZ5X2luaXRfbWFya2VudHJ5KCkgKi8KLQlmc25vdGlmeV9wdXRfbWFyaygmdG1wX2llbnRyeS0+ZnNuX2VudHJ5KTsKKwkvKiBtYXRjaCB0aGUgcmVmIGZyb20gZnNub3RpZnlfaW5pdF9tYXJrKCkgKi8KKwlmc25vdGlmeV9wdXRfbWFyaygmdG1wX2lfbWFyay0+ZnNuX21hcmspOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYxNiwxMSArNjk5LDggQEAKIHN0YXRpYyBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmlub3RpZnlfbmV3X2dyb3VwKHN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciwgdW5zaWduZWQgaW50IG1heF9ldmVudHMpCiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKLQl1bnNpZ25lZCBpbnQgZ3JwX251bTsKIAotCS8qIGZzbm90aWZ5X29idGFpbl9ncm91cCB0b29rIGEgcmVmZXJlbmNlIHRvIGdyb3VwLCB3ZSBwdXQgdGhpcyB3aGVuIHdlIGtpbGwgdGhlIGZpbGUgaW4gdGhlIGVuZCAqLwotCWdycF9udW0gPSAoSU5PVElGWV9HUk9VUF9OVU0gLSBhdG9taWNfaW5jX3JldHVybigmaW5vdGlmeV9ncnBfbnVtKSk7Ci0JZ3JvdXAgPSBmc25vdGlmeV9vYnRhaW5fZ3JvdXAoZ3JwX251bSwgMCwgJmlub3RpZnlfZnNub3RpZnlfb3BzKTsKKwlncm91cCA9IGZzbm90aWZ5X2FsbG9jX2dyb3VwKCZpbm90aWZ5X2Zzbm90aWZ5X29wcyk7CiAJaWYgKElTX0VSUihncm91cCkpCiAJCXJldHVybiBncm91cDsKIApAQCAtNzI2LDcgKzgwNiw3IEBACiBTWVNDQUxMX0RFRklORTIoaW5vdGlmeV9ybV93YXRjaCwgaW50LCBmZCwgX19zMzIsIHdkKQogewogCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXA7Ci0Jc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5OworCXN0cnVjdCBpbm90aWZ5X2lub2RlX21hcmsgKmlfbWFyazsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKIAlpbnQgcmV0ID0gMCwgZnB1dF9uZWVkZWQ7CiAKQEAgLTczNSwyNSArODE1LDIzIEBACiAJCXJldHVybiAtRUJBREY7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCBhbiBpbm90aWZ5IGluc3RhbmNlICovCi0JaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJmlub3RpZnlfZm9wcykpIHsKLQkJcmV0ID0gLUVJTlZBTDsKKwlyZXQgPSAtRUlOVkFMOworCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZpbm90aWZ5X2ZvcHMpKQogCQlnb3RvIG91dDsKLQl9CiAKIAlncm91cCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAotCXNwaW5fbG9jaygmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHJfbG9jayk7Ci0JZW50cnkgPSBpZHJfZmluZCgmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHIsIHdkKTsKLQlpZiAodW5saWtlbHkoIWVudHJ5KSkgewotCQlzcGluX3VubG9jaygmZ3JvdXAtPmlub3RpZnlfZGF0YS5pZHJfbG9jayk7Ci0JCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gLUVJTlZBTDsKKwlpX21hcmsgPSBpbm90aWZ5X2lkcl9maW5kKGdyb3VwLCB3ZCk7CisJaWYgKHVubGlrZWx5KCFpX21hcmspKQogCQlnb3RvIG91dDsKLQl9Ci0JZnNub3RpZnlfZ2V0X21hcmsoZW50cnkpOwotCXNwaW5fdW5sb2NrKCZncm91cC0+aW5vdGlmeV9kYXRhLmlkcl9sb2NrKTsKIAotCWZzbm90aWZ5X2Rlc3Ryb3lfbWFya19ieV9lbnRyeShlbnRyeSk7Ci0JZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOworCXJldCA9IDA7CisKKwlmc25vdGlmeV9kZXN0cm95X21hcmsoJmlfbWFyay0+ZnNuX21hcmspOworCisJLyogbWF0Y2ggcmVmIHRha2VuIGJ5IGlub3RpZnlfaWRyX2ZpbmQgKi8KKwlmc25vdGlmeV9wdXRfbWFyaygmaV9tYXJrLT5mc25fbWFyayk7CiAKIG91dDoKIAlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKQEAgLTc2Nyw3ICs4NDUsMjggQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgaW5vdGlmeV91c2VyX3NldHVwKHZvaWQpCiB7Ci0JaW5vdGlmeV9pbm9kZV9tYXJrX2NhY2hlcCA9IEtNRU1fQ0FDSEUoaW5vdGlmeV9pbm9kZV9tYXJrX2VudHJ5LCBTTEFCX1BBTklDKTsKKwlCVUlMRF9CVUdfT04oSU5fQUNDRVNTICE9IEZTX0FDQ0VTUyk7CisJQlVJTERfQlVHX09OKElOX01PRElGWSAhPSBGU19NT0RJRlkpOworCUJVSUxEX0JVR19PTihJTl9BVFRSSUIgIT0gRlNfQVRUUklCKTsKKwlCVUlMRF9CVUdfT04oSU5fQ0xPU0VfV1JJVEUgIT0gRlNfQ0xPU0VfV1JJVEUpOworCUJVSUxEX0JVR19PTihJTl9DTE9TRV9OT1dSSVRFICE9IEZTX0NMT1NFX05PV1JJVEUpOworCUJVSUxEX0JVR19PTihJTl9PUEVOICE9IEZTX09QRU4pOworCUJVSUxEX0JVR19PTihJTl9NT1ZFRF9GUk9NICE9IEZTX01PVkVEX0ZST00pOworCUJVSUxEX0JVR19PTihJTl9NT1ZFRF9UTyAhPSBGU19NT1ZFRF9UTyk7CisJQlVJTERfQlVHX09OKElOX0NSRUFURSAhPSBGU19DUkVBVEUpOworCUJVSUxEX0JVR19PTihJTl9ERUxFVEUgIT0gRlNfREVMRVRFKTsKKwlCVUlMRF9CVUdfT04oSU5fREVMRVRFX1NFTEYgIT0gRlNfREVMRVRFX1NFTEYpOworCUJVSUxEX0JVR19PTihJTl9NT1ZFX1NFTEYgIT0gRlNfTU9WRV9TRUxGKTsKKwlCVUlMRF9CVUdfT04oSU5fVU5NT1VOVCAhPSBGU19VTk1PVU5UKTsKKwlCVUlMRF9CVUdfT04oSU5fUV9PVkVSRkxPVyAhPSBGU19RX09WRVJGTE9XKTsKKwlCVUlMRF9CVUdfT04oSU5fSUdOT1JFRCAhPSBGU19JTl9JR05PUkVEKTsKKwlCVUlMRF9CVUdfT04oSU5fRVhDTF9VTkxJTksgIT0gRlNfRVhDTF9VTkxJTkspOworCUJVSUxEX0JVR19PTihJTl9JU0RJUiAhPSBGU19JTl9JU0RJUik7CisJQlVJTERfQlVHX09OKElOX09ORVNIT1QgIT0gRlNfSU5fT05FU0hPVCk7CisKKwlCVUdfT04oaHdlaWdodDMyKEFMTF9JTk9USUZZX0JJVFMpICE9IDIxKTsKKworCWlub3RpZnlfaW5vZGVfbWFya19jYWNoZXAgPSBLTUVNX0NBQ0hFKGlub3RpZnlfaW5vZGVfbWFyaywgU0xBQl9QQU5JQyk7CiAJZXZlbnRfcHJpdl9jYWNoZXAgPSBLTUVNX0NBQ0hFKGlub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhLCBTTEFCX1BBTklDKTsKIAogCWlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHMgPSAxNjM4NDsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9tYXJrLmMgYi9mcy9ub3RpZnkvbWFyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNTE4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9ub3RpZnkvbWFyay5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuLCBFcmljIFBhcmlzIDxlcGFyaXNAcmVkaGF0LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIGZzbm90aWZ5IGlub2RlIG1hcmsgbG9ja2luZy9saWZldGltZS9hbmQgcmVmY250aW5nCisgKgorICogUkVGQ05UOgorICogVGhlIG1hcmstPnJlZmNudCB0ZWxscyBob3cgbWFueSAidGhpbmdzIiBpbiB0aGUga2VybmVsIGN1cnJlbnRseSBhcmUKKyAqIHJlZmVyZW5jaW5nIHRoaXMgb2JqZWN0LiAgVGhlIG9iamVjdCB0eXBpY2FsbHkgd2lsbCBsaXZlIGluc2lkZSB0aGUga2VybmVsCisgKiB3aXRoIGEgcmVmY250IG9mIDIsIG9uZSBmb3IgZWFjaCBsaXN0IGl0IGlzIG9uIChpX2xpc3QsIGdfbGlzdCkuICBBbnkgdGFzaworICogd2hpY2ggY2FuIGZpbmQgdGhpcyBvYmplY3QgaG9sZGluZyB0aGUgYXBwcm9wcmlldGUgbG9ja3MsIGNhbiB0YWtlIGEgcmVmZXJlbmNlCisgKiBhbmQgdGhlIG9iamVjdCBpdHNlbGYgaXMgZ3VhcmVudGVlZCB0byBzdXJ2aXZlIHVudGlsIHRoZSByZWZlcmVuY2UgaXMgZHJvcHBlZC4KKyAqCisgKiBMT0NLSU5HOgorICogVGhlcmUgYXJlIDMgc3BpbmxvY2tzIGludm9sdmVkIHdpdGggZnNub3RpZnkgaW5vZGUgbWFya3MgYW5kIHRoZXkgTVVTVAorICogYmUgdGFrZW4gaW4gb3JkZXIgYXMgZm9sbG93czoKKyAqCisgKiBtYXJrLT5sb2NrCisgKiBncm91cC0+bWFya19sb2NrCisgKiBpbm9kZS0+aV9sb2NrCisgKgorICogbWFyay0+bG9jayBwcm90ZWN0cyAyIHRoaW5ncywgbWFyay0+Z3JvdXAgYW5kIG1hcmstPmlub2RlLiAgWW91IG11c3QgaG9sZAorICogdGhhdCBsb2NrIHRvIGRlcmVmZXJlbmNlIGVpdGhlciBvZiB0aGVzZSB0aGluZ3MgKHRoZXkgY291bGQgYmUgTlVMTCBldmVuIHdpdGgKKyAqIHRoZSBsb2NrKQorICoKKyAqIGdyb3VwLT5tYXJrX2xvY2sgcHJvdGVjdHMgdGhlIG1hcmtzX2xpc3QgYW5jaG9yZWQgaW5zaWRlIGEgZ2l2ZW4gZ3JvdXAKKyAqIGFuZCBlYWNoIG1hcmsgaXMgaG9va2VkIHZpYSB0aGUgZ19saXN0LiAgSXQgYWxzbyBzb3J0YSBwcm90ZWN0cyB0aGUKKyAqIGZyZWVfZ19saXN0LCB3aGljaCB3aGVuIHVzZWQgaXMgYW5jaG9yZWQgYnkgYSBwcml2YXRlIGxpc3Qgb24gdGhlIHN0YWNrIG9mIHRoZQorICogdGFzayB3aGljaCBoZWxkIHRoZSBncm91cC0+bWFya19sb2NrLgorICoKKyAqIGlub2RlLT5pX2xvY2sgcHJvdGVjdHMgdGhlIGlfZnNub3RpZnlfbWFya3MgbGlzdCBhbmNob3JlZCBpbnNpZGUgYQorICogZ2l2ZW4gaW5vZGUgYW5kIGVhY2ggbWFyayBpcyBob29rZWQgdmlhIHRoZSBpX2xpc3QuIChhbmQgc29ydGEgdGhlCisgKiBmcmVlX2lfbGlzdCkKKyAqCisgKgorICogTElGRVRJTUU6CisgKiBJbm9kZSBtYXJrcyBzdXJ2aXZlIGJldHdlZW4gd2hlbiB0aGV5IGFyZSBhZGRlZCB0byBhbiBpbm9kZSBhbmQgd2hlbiB0aGVpcgorICogcmVmY250PT0wLgorICoKKyAqIFRoZSBpbm9kZSBtYXJrIGNhbiBiZSBjbGVhcmVkIGZvciBhIG51bWJlciBvZiBkaWZmZXJlbnQgcmVhc29ucyBpbmNsdWRpbmc6CisgKiAtIFRoZSBpbm9kZSBpcyB1bmxpbmtlZCBmb3IgdGhlIGxhc3QgdGltZS4gIChmc25vdGlmeV9pbm9kZV9yZW1vdmUpCisgKiAtIFRoZSBpbm9kZSBpcyBiZWluZyBldmljdGVkIGZyb20gY2FjaGUuIChmc25vdGlmeV9pbm9kZV9kZWxldGUpCisgKiAtIFRoZSBmcyB0aGUgaW5vZGUgaXMgb24gaXMgdW5tb3VudGVkLiAgKGZzbm90aWZ5X2lub2RlX2RlbGV0ZS9mc25vdGlmeV91bm1vdW50X2lub2RlcykKKyAqIC0gU29tZXRoaW5nIGV4cGxpY2l0bHkgcmVxdWVzdHMgdGhhdCBpdCBiZSByZW1vdmVkLiAgKGZzbm90aWZ5X2Rlc3Ryb3lfbWFyaykKKyAqIC0gVGhlIGZzbm90aWZ5X2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFyayBpcyBnb2luZyBhd2F5IGFuZCBhbGwgc3VjaCBtYXJrcworICogICBuZWVkIHRvIGJlIGNsZWFuZWQgdXAuIChmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cCkKKyAqCisgKiBXb3JzdCBjYXNlIHdlIGFyZSBnaXZlbiBhbiBpbm9kZSBhbmQgbmVlZCB0byBjbGVhbiB1cCBhbGwgdGhlIG1hcmtzIG9uIHRoYXQKKyAqIGlub2RlLiAgV2UgdGFrZSBpX2xvY2sgYW5kIHdhbGsgdGhlIGlfZnNub3RpZnlfbWFya3Mgc2FmZWx5LiAgRm9yIGVhY2gKKyAqIG1hcmsgb24gdGhlIGxpc3Qgd2UgdGFrZSBhIHJlZmVyZW5jZSAoc28gdGhlIG1hcmsgY2FuJ3QgZGlzYXBwZWFyIHVuZGVyIHVzKS4KKyAqIFdlIHJlbW92ZSB0aGF0IG1hcmsgZm9ybSB0aGUgaW5vZGUncyBsaXN0IG9mIG1hcmtzIGFuZCB3ZSBhZGQgdGhpcyBtYXJrIHRvIGEKKyAqIHByaXZhdGUgbGlzdCBhbmNob3JlZCBvbiB0aGUgc3RhY2sgdXNpbmcgaV9mcmVlX2xpc3Q7ICBBdCB0aGlzIHBvaW50IHdlIG5vCisgKiBsb25nZXIgZmVhciBhbnl0aGluZyBmaW5kaW5nIHRoZSBtYXJrIHVzaW5nIHRoZSBpbm9kZSdzIGxpc3Qgb2YgbWFya3MuCisgKgorICogV2UgY2FuIHNhZmVseSBhbmQgbG9ja2xlc3NseSBydW4gdGhlIHByaXZhdGUgbGlzdCBvbiB0aGUgc3RhY2sgb2YgZXZlcnl0aGluZworICogd2UganVzdCB1bmF0dGFjaGVkIGZyb20gdGhlIG9yaWdpbmFsIGlub2RlLiAgRm9yIGVhY2ggbWFyayBvbiB0aGUgcHJpdmF0ZSBsaXN0CisgKiB3ZSBncmFiIHRoZSBtYXJrLT4gYW5kIGNhbiB0aHVzIGRlcmVmZXJlbmNlIG1hcmstPmdyb3VwIGFuZCBtYXJrLT5pbm9kZS4gIElmCisgKiB3ZSBzZWUgdGhlIGdyb3VwIGFuZCBpbm9kZSBhcmUgbm90IE5VTEwgd2UgdGFrZSB0aG9zZSBsb2Nrcy4gIE5vdyBob2xkaW5nIGFsbAorICogMyBsb2NrcyB3ZSBjYW4gY29tcGxldGVseSByZW1vdmUgdGhlIG1hcmsgZnJvbSBvdGhlciB0YXNrcyBmaW5kaW5nIGl0IGluIHRoZQorICogZnV0dXJlLiAgUmVtZW1iZXIsIDEwIHRoaW5ncyBtaWdodCBhbHJlYWR5IGJlIHJlZmVyZW5jaW5nIHRoaXMgbWFyaywgYnV0IHRoZXkKKyAqIGJldHRlciBiZSBob2xkaW5nIGEgcmVmLiAgV2UgZHJvcCBvdXIgcmVmZXJlbmNlIHdlIHRvb2sgYmVmb3JlIHdlIHVuaG9va2VkIGl0CisgKiBmcm9tIHRoZSBpbm9kZS4gIFdoZW4gdGhlIHJlZiBoaXRzIDAgd2UgY2FuIGZyZWUgdGhlIG1hcmsuCisgKgorICogVmVyeSBzaW1pbGFybHkgZm9yIGZyZWVpbmcgYnkgZ3JvdXAsIGV4Y2VwdCB3ZSB1c2UgZnJlZV9nX2xpc3QuCisgKgorICogVGhpcyBoYXMgdGhlIHZlcnkgaW50ZXJlc3RpbmcgcHJvcGVydHkgb2YgYmVpbmcgYWJsZSB0byBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIGFueSAob3IgYWxsKSBvdGhlciBkaXJlY3Rpb25zLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zcmN1Lmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+IC8qIGZvciBpbm9kZV9sb2NrICovCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeV9iYWNrZW5kLmg+CisjaW5jbHVkZSAiZnNub3RpZnkuaCIKKworc3RydWN0IHNyY3Vfc3RydWN0IGZzbm90aWZ5X21hcmtfc3JjdTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGVzdHJveV9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZGVzdHJveV9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChkZXN0cm95X3dhaXRxKTsKKwordm9pZCBmc25vdGlmeV9nZXRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykKK3sKKwlhdG9taWNfaW5jKCZtYXJrLT5yZWZjbnQpOworfQorCit2b2lkIGZzbm90aWZ5X3B1dF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtYXJrLT5yZWZjbnQpKQorCQltYXJrLT5mcmVlX21hcmsobWFyayk7Cit9CisKKy8qCisgKiBBbnkgdGltZSBhIG1hcmsgaXMgZ2V0dGluZyBmcmVlZCB3ZSBlbmQgdXAgaGVyZS4KKyAqIFRoZSBjYWxsZXIgaGFkIGJldHRlciBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoaXMgbWFyayBzbyB3ZSBkb24ndCBhY3R1YWxseQorICogZG8gdGhlIGZpbmFsIHB1dCB1bmRlciB0aGUgbWFyay0+bG9jaworICovCit2b2lkIGZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZtYXJrLT5sb2NrKTsKKworCWdyb3VwID0gbWFyay0+Z3JvdXA7CisKKwkvKiBzb21ldGhpbmcgZWxzZSBhbHJlYWR5IGNhbGxlZCB0aGlzIGZ1bmN0aW9uIG9uIHRoaXMgbWFyayAqLworCWlmICghKG1hcmstPmZsYWdzICYgRlNOT1RJRllfTUFSS19GTEFHX0FMSVZFKSkgeworCQlzcGluX3VubG9jaygmbWFyay0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwltYXJrLT5mbGFncyAmPSB+RlNOT1RJRllfTUFSS19GTEFHX0FMSVZFOworCisJLyogMSBmcm9tIGNhbGxlciBhbmQgMSBmb3IgYmVpbmcgb24gaV9saXN0L2dfbGlzdCAqLworCUJVR19PTihhdG9taWNfcmVhZCgmbWFyay0+cmVmY250KSA8IDIpOworCisJc3Bpbl9sb2NrKCZncm91cC0+bWFya19sb2NrKTsKKworCWlmIChtYXJrLT5mbGFncyAmIEZTTk9USUZZX01BUktfRkxBR19JTk9ERSkgeworCQlpbm9kZSA9IG1hcmstPmkuaW5vZGU7CisJCWZzbm90aWZ5X2Rlc3Ryb3lfaW5vZGVfbWFyayhtYXJrKTsKKwl9IGVsc2UgaWYgKG1hcmstPmZsYWdzICYgRlNOT1RJRllfTUFSS19GTEFHX1ZGU01PVU5UKQorCQlmc25vdGlmeV9kZXN0cm95X3Zmc21vdW50X21hcmsobWFyayk7CisJZWxzZQorCQlCVUcoKTsKKworCWxpc3RfZGVsX2luaXQoJm1hcmstPmdfbGlzdCk7CisKKwlzcGluX3VubG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7CisJc3Bpbl91bmxvY2soJm1hcmstPmxvY2spOworCisJc3Bpbl9sb2NrKCZkZXN0cm95X2xvY2spOworCWxpc3RfYWRkKCZtYXJrLT5kZXN0cm95X2xpc3QsICZkZXN0cm95X2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXN0cm95X2xvY2spOworCXdha2VfdXAoJmRlc3Ryb3lfd2FpdHEpOworCisJLyoKKwkgKiBTb21lIGdyb3VwcyBsaWtlIHRvIGtub3cgdGhhdCBtYXJrcyBhcmUgYmVpbmcgZnJlZWQuICBUaGlzIGlzIGEKKwkgKiBjYWxsYmFjayB0byB0aGUgZ3JvdXAgZnVuY3Rpb24gdG8gbGV0IGl0IGtub3cgdGhhdCB0aGlzIG1hcmsKKwkgKiBpcyBiZWluZyBmcmVlZC4KKwkgKi8KKwlpZiAoZ3JvdXAtPm9wcy0+ZnJlZWluZ19tYXJrKQorCQlncm91cC0+b3BzLT5mcmVlaW5nX21hcmsobWFyaywgZ3JvdXApOworCisJLyoKKwkgKiBfX2Zzbm90aWZ5X3VwZGF0ZV9jaGlsZF9kZW50cnlfZmxhZ3MoaW5vZGUpOworCSAqCisJICogSSByZWFsbHkgd2FudCB0byBjYWxsIHRoYXQsIGJ1dCB3ZSBjYW4ndCwgd2UgaGF2ZSBubyBpZGVhIGlmIHRoZSBpbm9kZQorCSAqIHN0aWxsIGV4aXN0cyB0aGUgc2Vjb25kIHdlIGRyb3AgdGhlIG1hcmstPmxvY2suCisJICoKKwkgKiBUaGUgbmV4dCB0aW1lIGFuIGV2ZW50IGFycml2ZSB0byB0aGlzIGlub2RlIGZyb20gb25lIG9mIGl0J3MgY2hpbGRyZW4KKwkgKiBfX2Zzbm90aWZ5X3BhcmVudCB3aWxsIHNlZSB0aGF0IHRoZSBpbm9kZSBkb2Vzbid0IGNhcmUgYWJvdXQgaXQncworCSAqIGNoaWxkcmVuIGFuZCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlc2UgZmxhZ3MgdGhlbi4gIFNvIHJlYWxseSB0aGlzCisJICogaXMganVzdCBhIGxhenkgdXBkYXRlIChhbmQgY291bGQgYmUgYSBwZXJmIHdpbi4uLikKKwkgKi8KKworCWlmIChpbm9kZSAmJiAobWFyay0+ZmxhZ3MgJiBGU05PVElGWV9NQVJLX0ZMQUdfT0JKRUNUX1BJTk5FRCkpCisJCWlwdXQoaW5vZGUpOworCisJLyoKKwkgKiBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBncm91cCB0cmllZCB0byBkZXN0cm95IGl0c2VsZiwgYnV0IHRoaXMKKwkgKiB0aGlzIG1hcmsgd2FzIHNpbXVsdGFuZW91c2x5IGJlaW5nIGZyZWVkIGJ5IGlub2RlLiAgSWYgdGhhdCdzIHRoZQorCSAqIGNhc2UsIHdlIGZpbmlzaCBmcmVlaW5nIHRoZSBncm91cCBoZXJlLgorCSAqLworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCZncm91cC0+bnVtX21hcmtzKSkpCisJCWZzbm90aWZ5X2ZpbmFsX2Rlc3Ryb3lfZ3JvdXAoZ3JvdXApOworfQorCit2b2lkIGZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCBfX3UzMiBtYXNrKQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmbWFyay0+bG9jayk7CisKKwltYXJrLT5tYXNrID0gbWFzazsKKworCWlmIChtYXJrLT5mbGFncyAmIEZTTk9USUZZX01BUktfRkxBR19JTk9ERSkKKwkJZnNub3RpZnlfc2V0X2lub2RlX21hcmtfbWFza19sb2NrZWQobWFyaywgbWFzayk7Cit9CisKK3ZvaWQgZnNub3RpZnlfc2V0X21hcmtfaWdub3JlZF9tYXNrX2xvY2tlZChzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaywgX191MzIgbWFzaykKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm1hcmstPmxvY2spOworCisJbWFyay0+aWdub3JlZF9tYXNrID0gbWFzazsKK30KKworLyoKKyAqIEF0dGFjaCBhbiBpbml0aWFsaXplZCBtYXJrIHRvIGEgZ2l2ZW4gZ3JvdXAgYW5kIGZzIG9iamVjdC4KKyAqIFRoZXNlIG1hcmtzIG1heSBiZSB1c2VkIGZvciB0aGUgZnNub3RpZnkgYmFja2VuZCB0byBkZXRlcm1pbmUgd2hpY2gKKyAqIGV2ZW50IHR5cGVzIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gd2hpY2ggZ3JvdXAuCisgKi8KK2ludCBmc25vdGlmeV9hZGRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaywKKwkJICAgICAgc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgc3RydWN0IHZmc21vdW50ICptbnQsIGludCBhbGxvd19kdXBzKQoreworCWludCByZXQgPSAwOworCisJQlVHX09OKGlub2RlICYmIG1udCk7CisJQlVHX09OKCFpbm9kZSAmJiAhbW50KTsKKworCS8qCisJICogTE9DS0lORyBPUkRFUiEhISEKKwkgKiBtYXJrLT5sb2NrCisJICogZ3JvdXAtPm1hcmtfbG9jaworCSAqIGlub2RlLT5pX2xvY2sKKwkgKi8KKwlzcGluX2xvY2soJm1hcmstPmxvY2spOworCXNwaW5fbG9jaygmZ3JvdXAtPm1hcmtfbG9jayk7CisKKwltYXJrLT5mbGFncyB8PSBGU05PVElGWV9NQVJLX0ZMQUdfQUxJVkU7CisKKwltYXJrLT5ncm91cCA9IGdyb3VwOworCWxpc3RfYWRkKCZtYXJrLT5nX2xpc3QsICZncm91cC0+bWFya3NfbGlzdCk7CisJYXRvbWljX2luYygmZ3JvdXAtPm51bV9tYXJrcyk7CisJZnNub3RpZnlfZ2V0X21hcmsobWFyayk7IC8qIGZvciBpX2xpc3QgYW5kIGdfbGlzdCAqLworCisJaWYgKGlub2RlKSB7CisJCXJldCA9IGZzbm90aWZ5X2FkZF9pbm9kZV9tYXJrKG1hcmssIGdyb3VwLCBpbm9kZSwgYWxsb3dfZHVwcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9IGVsc2UgaWYgKG1udCkgeworCQlyZXQgPSBmc25vdGlmeV9hZGRfdmZzbW91bnRfbWFyayhtYXJrLCBncm91cCwgbW50LCBhbGxvd19kdXBzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCXNwaW5fdW5sb2NrKCZncm91cC0+bWFya19sb2NrKTsKKworCS8qIHRoaXMgd2lsbCBwaW4gdGhlIG9iamVjdCBpZiBhcHByb3ByaWF0ZSAqLworCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKG1hcmssIG1hcmstPm1hc2spOworCisJc3Bpbl91bmxvY2soJm1hcmstPmxvY2spOworCisJaWYgKGlub2RlKQorCQlfX2Zzbm90aWZ5X3VwZGF0ZV9jaGlsZF9kZW50cnlfZmxhZ3MoaW5vZGUpOworCisJcmV0dXJuIHJldDsKK2VycjoKKwltYXJrLT5mbGFncyAmPSB+RlNOT1RJRllfTUFSS19GTEFHX0FMSVZFOworCWxpc3RfZGVsX2luaXQoJm1hcmstPmdfbGlzdCk7CisJbWFyay0+Z3JvdXAgPSBOVUxMOworCWF0b21pY19kZWMoJmdyb3VwLT5udW1fbWFya3MpOworCisJc3Bpbl91bmxvY2soJmdyb3VwLT5tYXJrX2xvY2spOworCXNwaW5fdW5sb2NrKCZtYXJrLT5sb2NrKTsKKworCXNwaW5fbG9jaygmZGVzdHJveV9sb2NrKTsKKwlsaXN0X2FkZCgmbWFyay0+ZGVzdHJveV9saXN0LCAmZGVzdHJveV9saXN0KTsKKwlzcGluX3VubG9jaygmZGVzdHJveV9sb2NrKTsKKwl3YWtlX3VwKCZkZXN0cm95X3dhaXRxKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBjbGVhciBhbnkgbWFya3MgaW4gYSBncm91cCBpbiB3aGljaCBtYXJrLT5mbGFncyAmIGZsYWdzIGlzIHRydWUKKyAqLwordm9pZCBmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cF9mbGFncyhzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICpsbWFyaywgKm1hcms7CisJTElTVF9IRUFEKGZyZWVfbGlzdCk7CisKKwlzcGluX2xvY2soJmdyb3VwLT5tYXJrX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXJrLCBsbWFyaywgJmdyb3VwLT5tYXJrc19saXN0LCBnX2xpc3QpIHsKKwkJaWYgKG1hcmstPmZsYWdzICYgZmxhZ3MpIHsKKwkJCWxpc3RfYWRkKCZtYXJrLT5mcmVlX2dfbGlzdCwgJmZyZWVfbGlzdCk7CisJCQlsaXN0X2RlbF9pbml0KCZtYXJrLT5nX2xpc3QpOworCQkJZnNub3RpZnlfZ2V0X21hcmsobWFyayk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmdyb3VwLT5tYXJrX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcmssIGxtYXJrLCAmZnJlZV9saXN0LCBmcmVlX2dfbGlzdCkgeworCQlmc25vdGlmeV9kZXN0cm95X21hcmsobWFyayk7CisJCWZzbm90aWZ5X3B1dF9tYXJrKG1hcmspOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgZ3JvdXAsIGRlc3Ryb3kgYWxsIG9mIHRoZSBtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhhdCBncm91cC4KKyAqLwordm9pZCBmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKQoreworCWZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X2dyb3VwX2ZsYWdzKGdyb3VwLCAodW5zaWduZWQgaW50KS0xKTsKK30KKwordm9pZCBmc25vdGlmeV9kdXBsaWNhdGVfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbmV3LCBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqb2xkKQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmb2xkLT5sb2NrKTsKKwluZXctPmkuaW5vZGUgPSBvbGQtPmkuaW5vZGU7CisJbmV3LT5tLm1udCA9IG9sZC0+bS5tbnQ7CisJbmV3LT5ncm91cCA9IG9sZC0+Z3JvdXA7CisJbmV3LT5tYXNrID0gb2xkLT5tYXNrOworCW5ldy0+ZnJlZV9tYXJrID0gb2xkLT5mcmVlX21hcms7Cit9CisKKy8qCisgKiBOb3RoaW5nIGZhbmN5LCBqdXN0IGluaXRpYWxpemUgbGlzdHMgYW5kIGxvY2tzIGFuZCBjb3VudGVycy4KKyAqLwordm9pZCBmc25vdGlmeV9pbml0X21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcmssCisJCQl2b2lkICgqZnJlZV9tYXJrKShzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaykpCit7CisJbWVtc2V0KG1hcmssIDAsIHNpemVvZigqbWFyaykpOworCXNwaW5fbG9ja19pbml0KCZtYXJrLT5sb2NrKTsKKwlhdG9taWNfc2V0KCZtYXJrLT5yZWZjbnQsIDEpOworCW1hcmstPmZyZWVfbWFyayA9IGZyZWVfbWFyazsKK30KKworc3RhdGljIGludCBmc25vdGlmeV9tYXJrX2Rlc3Ryb3kodm9pZCAqaWdub3JlZCkKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyaywgKm5leHQ7CisJTElTVF9IRUFEKHByaXZhdGVfZGVzdHJveV9saXN0KTsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrKCZkZXN0cm95X2xvY2spOworCQkvKiBleGNoYW5nZSB0aGUgbGlzdCBoZWFkICovCisJCWxpc3RfcmVwbGFjZV9pbml0KCZkZXN0cm95X2xpc3QsICZwcml2YXRlX2Rlc3Ryb3lfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZkZXN0cm95X2xvY2spOworCisJCXN5bmNocm9uaXplX3NyY3UoJmZzbm90aWZ5X21hcmtfc3JjdSk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcmssIG5leHQsICZwcml2YXRlX2Rlc3Ryb3lfbGlzdCwgZGVzdHJveV9saXN0KSB7CisJCQlsaXN0X2RlbF9pbml0KCZtYXJrLT5kZXN0cm95X2xpc3QpOworCQkJZnNub3RpZnlfcHV0X21hcmsobWFyayk7CisJCX0KKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGVzdHJveV93YWl0cSwgIWxpc3RfZW1wdHkoJmRlc3Ryb3lfbGlzdCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmc25vdGlmeV9tYXJrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKKworCXRocmVhZCA9IGt0aHJlYWRfcnVuKGZzbm90aWZ5X21hcmtfZGVzdHJveSwgTlVMTCwKKwkJCSAgICAgImZzbm90aWZ5X21hcmsiKTsKKwlpZiAoSVNfRVJSKHRocmVhZCkpCisJCXBhbmljKCJ1bmFibGUgdG8gc3RhcnQgZnNub3RpZnkgbWFyayBkZXN0cnVjdGlvbiB0aHJlYWQuIik7CisKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChmc25vdGlmeV9tYXJrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jIGIvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCmluZGV4IGI4YmY1M2IuLmQ2YzQzNWEgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYworKysgYi9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIGFsbG9jYXRlZCBhbmQgdXNlZC4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTYsNyArNTcsNyBAQAogICogaXQgaXMgbmVlZGVkLiAgSXQncyByZWZjbnQgaXMgc2V0IDEgYXQga2VybmVsIGluaXQgdGltZSBhbmQgd2lsbCBuZXZlcgogICogZ2V0IHNldCB0byAwIHNvIGl0IHdpbGwgbmV2ZXIgZ2V0ICdmcmVlZCcKICAqLwotc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ldmVudCBxX292ZXJmbG93X2V2ZW50Oworc3RhdGljIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqcV9vdmVyZmxvd19ldmVudDsKIHN0YXRpYyBhdG9taWNfdCBmc25vdGlmeV9zeW5jX2Nvb2tpZSA9IEFUT01JQ19JTklUKDApOwogCiAvKioKQEAgLTg3LDEyICs4OCwxNSBAQAogCQlyZXR1cm47CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZXZlbnQtPnJlZmNudCkpIHsKLQkJaWYgKGV2ZW50LT5kYXRhX3R5cGUgPT0gRlNOT1RJRllfRVZFTlRfUEFUSCkKLQkJCXBhdGhfcHV0KCZldmVudC0+cGF0aCk7CisJCXByX2RlYnVnKCIlczogZXZlbnQ9JXBcbiIsIF9fZnVuY19fLCBldmVudCk7CisKKwkJaWYgKGV2ZW50LT5kYXRhX3R5cGUgPT0gRlNOT1RJRllfRVZFTlRfRklMRSkKKwkJCWZwdXQoZXZlbnQtPmZpbGUpOwogCiAJCUJVR19PTighbGlzdF9lbXB0eSgmZXZlbnQtPnByaXZhdGVfZGF0YV9saXN0KSk7CiAKIAkJa2ZyZWUoZXZlbnQtPmZpbGVfbmFtZSk7CisJCXB1dF9waWQoZXZlbnQtPnRnaWQpOwogCQlrbWVtX2NhY2hlX2ZyZWUoZnNub3RpZnlfZXZlbnRfY2FjaGVwLCBldmVudCk7CiAJfQogfQpAQCAtMTA0LDcgKzEwOCw4IEBACiAKIHZvaWQgZnNub3RpZnlfZGVzdHJveV9ldmVudF9ob2xkZXIoc3RydWN0IGZzbm90aWZ5X2V2ZW50X2hvbGRlciAqaG9sZGVyKQogewotCWttZW1fY2FjaGVfZnJlZShmc25vdGlmeV9ldmVudF9ob2xkZXJfY2FjaGVwLCBob2xkZXIpOworCWlmIChob2xkZXIpCisJCWttZW1fY2FjaGVfZnJlZShmc25vdGlmeV9ldmVudF9ob2xkZXJfY2FjaGVwLCBob2xkZXIpOwogfQogCiAvKgpAQCAtMTI5LDUzICsxMzQsMjAgQEAKIH0KIAogLyoKLSAqIENoZWNrIGlmIDIgZXZlbnRzIGNvbnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24uICBXZSBkbyBub3QgY29tcGFyZSBwcml2YXRlIGRhdGEKLSAqIGJ1dCBhdCB0aGlzIG1vbWVudCB0aGF0IGlzbid0IGEgcHJvYmxlbSBmb3IgYW55IGtub3cgZnNub3RpZnkgbGlzdGVuZXJzLgotICovCi1zdGF0aWMgYm9vbCBldmVudF9jb21wYXJlKHN0cnVjdCBmc25vdGlmeV9ldmVudCAqb2xkLCBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKm5ldykKLXsKLQlpZiAoKG9sZC0+bWFzayA9PSBuZXctPm1hc2spICYmCi0JICAgIChvbGQtPnRvX3RlbGwgPT0gbmV3LT50b190ZWxsKSAmJgotCSAgICAob2xkLT5kYXRhX3R5cGUgPT0gbmV3LT5kYXRhX3R5cGUpICYmCi0JICAgIChvbGQtPm5hbWVfbGVuID09IG5ldy0+bmFtZV9sZW4pKSB7Ci0JCXN3aXRjaCAob2xkLT5kYXRhX3R5cGUpIHsKLQkJY2FzZSAoRlNOT1RJRllfRVZFTlRfSU5PREUpOgotCQkJLyogcmVtZW1iZXIsIGFmdGVyIG9sZCB3YXMgcHV0IG9uIHRoZSB3YWl0X3Egd2UgYXJlbid0Ci0JCQkgKiBhbGxvd2VkIHRvIGxvb2sgYXQgdGhlIGlub2RlIGFueSBtb3JlLCBvbmx5IHRoaW5nCi0JCQkgKiBsZWZ0IHRvIGNoZWNrIHdhcyBpZiB0aGUgZmlsZV9uYW1lIGlzIHRoZSBzYW1lICovCi0JCQlpZiAoIW9sZC0+bmFtZV9sZW4gfHwKLQkJCSAgICAhc3RyY21wKG9sZC0+ZmlsZV9uYW1lLCBuZXctPmZpbGVfbmFtZSkpCi0JCQkJcmV0dXJuIHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSAoRlNOT1RJRllfRVZFTlRfUEFUSCk6Ci0JCQlpZiAoKG9sZC0+cGF0aC5tbnQgPT0gbmV3LT5wYXRoLm1udCkgJiYKLQkJCSAgICAob2xkLT5wYXRoLmRlbnRyeSA9PSBuZXctPnBhdGguZGVudHJ5KSkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCWJyZWFrOwotCQljYXNlIChGU05PVElGWV9FVkVOVF9OT05FKToKLQkJCWlmIChvbGQtPm1hc2sgJiBGU19RX09WRVJGTE9XKQotCQkJCXJldHVybiB0cnVlOwotCQkJZWxzZSBpZiAob2xkLT5tYXNrICYgRlNfSU5fSUdOT1JFRCkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX07Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoKICAqIEFkZCBhbiBldmVudCB0byB0aGUgZ3JvdXAgbm90aWZpY2F0aW9uIHF1ZXVlLiAgVGhlIGdyb3VwIGNhbiBsYXRlciBwdWxsIHRoaXMKICAqIGV2ZW50IG9mZiB0aGUgcXVldWUgdG8gZGVhbCB3aXRoLiAgSWYgdGhlIGV2ZW50IGlzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUKICAqIGdyb3VwJ3Mgbm90aWZpY2F0aW9uIHF1ZXVlLCBhIHJlZmVyZW5jZSBpcyB0YWtlbiBvbiBldmVudC4KICAqLwotaW50IGZzbm90aWZ5X2FkZF9ub3RpZnlfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCwKLQkJCSAgICAgIHN0cnVjdCBmc25vdGlmeV9ldmVudF9wcml2YXRlX2RhdGEgKnByaXYpCitzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmZzbm90aWZ5X2FkZF9ub3RpZnlfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCwKKwkJCQkJCSBzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhICpwcml2LAorCQkJCQkJIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqKCptZXJnZSkoc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJCQkJCQkJCSBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKikpCiB7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpyZXR1cm5fZXZlbnQgPSBOVUxMOwogCXN0cnVjdCBmc25vdGlmeV9ldmVudF9ob2xkZXIgKmhvbGRlciA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZncm91cC0+bm90aWZpY2F0aW9uX2xpc3Q7Ci0Jc3RydWN0IGZzbm90aWZ5X2V2ZW50X2hvbGRlciAqbGFzdF9ob2xkZXI7Ci0Jc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpsYXN0X2V2ZW50OwotCWludCByZXQgPSAwOworCisJcHJfZGVidWcoIiVzOiBncm91cD0lcCBldmVudD0lcCBwcml2PSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXAsIGV2ZW50LCBwcml2KTsKIAogCS8qCiAJICogVGhlcmUgaXMgb25lIGZzbm90aWZ5X2V2ZW50X2hvbGRlciBlbWJlZGRlZCBpbnNpZGUgZWFjaCBmc25vdGlmeV9ldmVudC4KQEAgLTE4OSwxOCArMTYxLDQwIEBACiBhbGxvY19ob2xkZXI6CiAJCWhvbGRlciA9IGZzbm90aWZ5X2FsbG9jX2V2ZW50X2hvbGRlcigpOwogCQlpZiAoIWhvbGRlcikKLQkJCXJldHVybiAtRU5PTUVNOworCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJbXV0ZXhfbG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAKIAlpZiAoZ3JvdXAtPnFfbGVuID49IGdyb3VwLT5tYXhfZXZlbnRzKSB7Ci0JCWV2ZW50ID0gJnFfb3ZlcmZsb3dfZXZlbnQ7Ci0JCXJldCA9IC1FT1ZFUkZMT1c7CisJCWV2ZW50ID0gcV9vdmVyZmxvd19ldmVudDsKKworCQkvKgorCQkgKiB3ZSBuZWVkIHRvIHJldHVybiB0aGUgb3ZlcmZsb3cgZXZlbnQKKwkJICogd2hpY2ggbWVhbnMgd2UgbmVlZCBhIHJlZgorCQkgKi8KKwkJZnNub3RpZnlfZ2V0X2V2ZW50KGV2ZW50KTsKKwkJcmV0dXJuX2V2ZW50ID0gZXZlbnQ7CisKIAkJLyogc29ycnksIG5vIHByaXZhdGUgZGF0YSBvbiB0aGUgb3ZlcmZsb3cgZXZlbnQgKi8KIAkJcHJpdiA9IE5VTEw7CiAJfQogCisJaWYgKCFsaXN0X2VtcHR5KGxpc3QpICYmIG1lcmdlKSB7CisJCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqdG1wOworCisJCXRtcCA9IG1lcmdlKGxpc3QsIGV2ZW50KTsKKwkJaWYgKHRtcCkgeworCQkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKKworCQkJaWYgKHJldHVybl9ldmVudCkKKwkJCQlmc25vdGlmeV9wdXRfZXZlbnQocmV0dXJuX2V2ZW50KTsKKwkJCWlmIChob2xkZXIgIT0gJmV2ZW50LT5ob2xkZXIpCisJCQkJZnNub3RpZnlfZGVzdHJveV9ldmVudF9ob2xkZXIoaG9sZGVyKTsKKwkJCXJldHVybiB0bXA7CisJCX0KKwl9CisKIAlzcGluX2xvY2soJmV2ZW50LT5sb2NrKTsKIAogCWlmIChsaXN0X2VtcHR5KCZldmVudC0+aG9sZGVyLmV2ZW50X2xpc3QpKSB7CkBAIC0yMTIsMTkgKzIwNiwxMyBAQAogCQkgKiBldmVudCBob2xkZXIgd2FzIHVzZWQsIGdvIGJhY2sgYW5kIGdldCBhIG5ldyBvbmUgKi8KIAkJc3Bpbl91bmxvY2soJmV2ZW50LT5sb2NrKTsKIAkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKLQkJZ290byBhbGxvY19ob2xkZXI7Ci0JfQogCi0JaWYgKCFsaXN0X2VtcHR5KGxpc3QpKSB7Ci0JCWxhc3RfaG9sZGVyID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyLCBldmVudF9saXN0KTsKLQkJbGFzdF9ldmVudCA9IGxhc3RfaG9sZGVyLT5ldmVudDsKLQkJaWYgKGV2ZW50X2NvbXBhcmUobGFzdF9ldmVudCwgZXZlbnQpKSB7Ci0JCQlzcGluX3VubG9jaygmZXZlbnQtPmxvY2spOwotCQkJbXV0ZXhfdW5sb2NrKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KTsKLQkJCWlmIChob2xkZXIgIT0gJmV2ZW50LT5ob2xkZXIpCi0JCQkJZnNub3RpZnlfZGVzdHJveV9ldmVudF9ob2xkZXIoaG9sZGVyKTsKLQkJCXJldHVybiAtRUVYSVNUOworCQlpZiAocmV0dXJuX2V2ZW50KSB7CisJCQlmc25vdGlmeV9wdXRfZXZlbnQocmV0dXJuX2V2ZW50KTsKKwkJCXJldHVybl9ldmVudCA9IE5VTEw7CiAJCX0KKworCQlnb3RvIGFsbG9jX2hvbGRlcjsKIAl9CiAKIAlncm91cC0+cV9sZW4rKzsKQEAgLTIzOCw3ICsyMjYsNyBAQAogCW11dGV4X3VubG9jaygmZ3JvdXAtPm5vdGlmaWNhdGlvbl9tdXRleCk7CiAKIAl3YWtlX3VwKCZncm91cC0+bm90aWZpY2F0aW9uX3dhaXRxKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiByZXR1cm5fZXZlbnQ7CiB9CiAKIC8qCkBAIC0yNTMsNiArMjQxLDggQEAKIAogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZncm91cC0+bm90aWZpY2F0aW9uX211dGV4KSk7CiAKKwlwcl9kZWJ1ZygiJXM6IGdyb3VwPSVwXG4iLCBfX2Z1bmNfXywgZ3JvdXApOworCiAJaG9sZGVyID0gbGlzdF9maXJzdF9lbnRyeSgmZ3JvdXAtPm5vdGlmaWNhdGlvbl9saXN0LCBzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyLCBldmVudF9saXN0KTsKIAogCWV2ZW50ID0gaG9sZGVyLT5ldmVudDsKQEAgLTMxNCwyNSArMzA0LDgyIEBACiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCkKIHsKLQlldmVudC0+aG9sZGVyLmV2ZW50ID0gTlVMTDsKIAlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmhvbGRlci5ldmVudF9saXN0KTsKIAlhdG9taWNfc2V0KCZldmVudC0+cmVmY250LCAxKTsKIAogCXNwaW5fbG9ja19pbml0KCZldmVudC0+bG9jayk7CiAKLQlldmVudC0+cGF0aC5kZW50cnkgPSBOVUxMOwotCWV2ZW50LT5wYXRoLm1udCA9IE5VTEw7Ci0JZXZlbnQtPmlub2RlID0gTlVMTDsKLQlldmVudC0+ZGF0YV90eXBlID0gRlNOT1RJRllfRVZFTlRfTk9ORTsKLQogCUlOSVRfTElTVF9IRUFEKCZldmVudC0+cHJpdmF0ZV9kYXRhX2xpc3QpOworfQogCi0JZXZlbnQtPnRvX3RlbGwgPSBOVUxMOworLyoKKyAqIENhbGxlciBkYW1uIHdlbGwgYmV0dGVyIGJlIGhvbGRpbmcgd2hhdGV2ZXIgbXV0ZXggaXMgcHJvdGVjdGluZyB0aGUKKyAqIG9sZF9ob2xkZXItPmV2ZW50X2xpc3QgYW5kIHRoZSBuZXdfZXZlbnQgbXVzdCBiZSBhIGNsZWFuIGV2ZW50IHdoaWNoCisgKiBjYW5ub3QgYmUgZm91bmQgYW55d2hlcmUgZWxzZSBpbiB0aGUga2VybmVsLgorICovCitpbnQgZnNub3RpZnlfcmVwbGFjZV9ldmVudChzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyICpvbGRfaG9sZGVyLAorCQkJICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpuZXdfZXZlbnQpCit7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpvbGRfZXZlbnQgPSBvbGRfaG9sZGVyLT5ldmVudDsKKwlzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfaG9sZGVyICpuZXdfaG9sZGVyID0gJm5ld19ldmVudC0+aG9sZGVyOwogCi0JZXZlbnQtPmZpbGVfbmFtZSA9IE5VTEw7Ci0JZXZlbnQtPm5hbWVfbGVuID0gMDsKKwllbnVtIGV2ZW50X3NwaW5sb2NrX2NsYXNzIHsKKwkJU1BJTkxPQ0tfT0xELAorCQlTUElOTE9DS19ORVcsCisJfTsKIAotCWV2ZW50LT5zeW5jX2Nvb2tpZSA9IDA7CisJcHJfZGVidWcoIiVzOiBvbGRfZXZlbnQ9JXAgbmV3X2V2ZW50PSVwXG4iLCBfX2Z1bmNfXywgb2xkX2V2ZW50LCBuZXdfZXZlbnQpOworCisJLyoKKwkgKiBpZiB0aGUgbmV3X2V2ZW50J3MgZW1iZWRkZWQgaG9sZGVyIGlzIGluIHVzZSBzb21lb25lCisJICogc2NyZXdlZCB1cCBhbmQgZGlkbid0IGdpdmUgdXMgYSBjbGVhbiBuZXcgZXZlbnQuCisJICovCisJQlVHX09OKCFsaXN0X2VtcHR5KCZuZXdfaG9sZGVyLT5ldmVudF9saXN0KSk7CisKKwlzcGluX2xvY2tfbmVzdGVkKCZvbGRfZXZlbnQtPmxvY2ssIFNQSU5MT0NLX09MRCk7CisJc3Bpbl9sb2NrX25lc3RlZCgmbmV3X2V2ZW50LT5sb2NrLCBTUElOTE9DS19ORVcpOworCisJbmV3X2hvbGRlci0+ZXZlbnQgPSBuZXdfZXZlbnQ7CisJbGlzdF9yZXBsYWNlX2luaXQoJm9sZF9ob2xkZXItPmV2ZW50X2xpc3QsICZuZXdfaG9sZGVyLT5ldmVudF9saXN0KTsKKworCXNwaW5fdW5sb2NrKCZuZXdfZXZlbnQtPmxvY2spOworCXNwaW5fdW5sb2NrKCZvbGRfZXZlbnQtPmxvY2spOworCisJLyogZXZlbnQgPT0gaG9sZGVyIG1lYW5zIHdlIGFyZSByZWZlcmVuY2VkIHRocm91Z2ggdGhlIGluIGV2ZW50IGhvbGRlciAqLworCWlmIChvbGRfaG9sZGVyICE9ICZvbGRfZXZlbnQtPmhvbGRlcikKKwkJZnNub3RpZnlfZGVzdHJveV9ldmVudF9ob2xkZXIob2xkX2hvbGRlcik7CisKKwlmc25vdGlmeV9nZXRfZXZlbnQobmV3X2V2ZW50KTsgLyogb24gdGhlIGxpc3QgdGFrZSByZWZlcmVuY2UgKi8KKwlmc25vdGlmeV9wdXRfZXZlbnQob2xkX2V2ZW50KTsgLyogb2ZmIHRoZSBsaXN0LCBkcm9wIHJlZmVyZW5jZSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNub3RpZnlfY2xvbmVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpvbGRfZXZlbnQpCit7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudDsKKworCWV2ZW50ID0ga21lbV9jYWNoZV9hbGxvYyhmc25vdGlmeV9ldmVudF9jYWNoZXAsIEdGUF9LRVJORUwpOworCWlmICghZXZlbnQpCisJCXJldHVybiBOVUxMOworCisJcHJfZGVidWcoIiVzOiBvbGRfZXZlbnQ9JXAgbmV3X2V2ZW50PSVwXG4iLCBfX2Z1bmNfXywgb2xkX2V2ZW50LCBldmVudCk7CisKKwltZW1jcHkoZXZlbnQsIG9sZF9ldmVudCwgc2l6ZW9mKCpldmVudCkpOworCWluaXRpYWxpemVfZXZlbnQoZXZlbnQpOworCisJaWYgKGV2ZW50LT5uYW1lX2xlbikgeworCQlldmVudC0+ZmlsZV9uYW1lID0ga3N0cmR1cChvbGRfZXZlbnQtPmZpbGVfbmFtZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZXZlbnQtPmZpbGVfbmFtZSkgeworCQkJa21lbV9jYWNoZV9mcmVlKGZzbm90aWZ5X2V2ZW50X2NhY2hlcCwgZXZlbnQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJZXZlbnQtPnRnaWQgPSBnZXRfcGlkKG9sZF9ldmVudC0+dGdpZCk7CisJaWYgKGV2ZW50LT5kYXRhX3R5cGUgPT0gRlNOT1RJRllfRVZFTlRfRklMRSkKKwkJZ2V0X2ZpbGUoZXZlbnQtPmZpbGUpOworCisJcmV0dXJuIGV2ZW50OwogfQogCiAvKgpAQCAtMzQ4LDE1ICszOTUsMTggQEAKICAqIEBuYW1lIHRoZSBmaWxlbmFtZSwgaWYgYXZhaWxhYmxlCiAgKi8KIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNub3RpZnlfY3JlYXRlX2V2ZW50KHN0cnVjdCBpbm9kZSAqdG9fdGVsbCwgX191MzIgbWFzaywgdm9pZCAqZGF0YSwKLQkJCQkJICAgICBpbnQgZGF0YV90eXBlLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgY29va2llLAotCQkJCQkgICAgIGdmcF90IGdmcCkKKwkJCQkJICAgICBpbnQgZGF0YV90eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQkJCQkgICAgIHUzMiBjb29raWUsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50OwogCi0JZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGZzbm90aWZ5X2V2ZW50X2NhY2hlcCwgZ2ZwKTsKKwlldmVudCA9IGttZW1fY2FjaGVfemFsbG9jKGZzbm90aWZ5X2V2ZW50X2NhY2hlcCwgZ2ZwKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm4gTlVMTDsKIAorCXByX2RlYnVnKCIlczogZXZlbnQ9JXAgdG9fdGVsbD0lcCBtYXNrPSV4IGRhdGE9JXAgZGF0YV90eXBlPSVkXG4iLAorCQkgX19mdW5jX18sIGV2ZW50LCB0b190ZWxsLCBtYXNrLCBkYXRhLCBkYXRhX3R5cGUpOworCiAJaW5pdGlhbGl6ZV9ldmVudChldmVudCk7CiAKIAlpZiAobmFtZSkgewpAQCAtMzY4LDM1ICs0MTgsMzYgQEAKIAkJZXZlbnQtPm5hbWVfbGVuID0gc3RybGVuKGV2ZW50LT5maWxlX25hbWUpOwogCX0KIAorCWV2ZW50LT50Z2lkID0gZ2V0X3BpZCh0YXNrX3RnaWQoY3VycmVudCkpOwogCWV2ZW50LT5zeW5jX2Nvb2tpZSA9IGNvb2tpZTsKIAlldmVudC0+dG9fdGVsbCA9IHRvX3RlbGw7CisJZXZlbnQtPmRhdGFfdHlwZSA9IGRhdGFfdHlwZTsKIAogCXN3aXRjaCAoZGF0YV90eXBlKSB7CiAJY2FzZSBGU05PVElGWV9FVkVOVF9GSUxFOiB7Ci0JCXN0cnVjdCBmaWxlICpmaWxlID0gZGF0YTsKLQkJc3RydWN0IHBhdGggKnBhdGggPSAmZmlsZS0+Zl9wYXRoOwotCQlldmVudC0+cGF0aC5kZW50cnkgPSBwYXRoLT5kZW50cnk7Ci0JCWV2ZW50LT5wYXRoLm1udCA9IHBhdGgtPm1udDsKLQkJcGF0aF9nZXQoJmV2ZW50LT5wYXRoKTsKLQkJZXZlbnQtPmRhdGFfdHlwZSA9IEZTTk9USUZZX0VWRU5UX1BBVEg7Ci0JCWJyZWFrOwotCX0KLQljYXNlIEZTTk9USUZZX0VWRU5UX1BBVEg6IHsKLQkJc3RydWN0IHBhdGggKnBhdGggPSBkYXRhOwotCQlldmVudC0+cGF0aC5kZW50cnkgPSBwYXRoLT5kZW50cnk7Ci0JCWV2ZW50LT5wYXRoLm1udCA9IHBhdGgtPm1udDsKLQkJcGF0aF9nZXQoJmV2ZW50LT5wYXRoKTsKLQkJZXZlbnQtPmRhdGFfdHlwZSA9IEZTTk9USUZZX0VWRU5UX1BBVEg7CisJCWV2ZW50LT5maWxlID0gZGF0YTsKKwkJLyoKKwkJICogaWYgdGhpcyBmaWxlIGlzIGFib3V0IHRvIGRpc2FwcGVhciBob2xkIGFuIGV4dHJhIHJlZmVyZW5jZQorCQkgKiB1bnRpbCB3ZSByZXR1cm4gdG8gX19mcHV0IHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKwkJICogZnV0dXJlIGdldC9wdXQgZGVzdHJveWluZyB0aGUgZmlsZSB1bmRlciB1cyBvciBnZW5lcmF0aW5nCisJCSAqIGFkZGl0aW9uYWwgZXZlbnRzLiAgTm90aWNlIHRoYXQgd2UgY2hhbmdlIGZfbW9kZSB3aXRob3V0CisJCSAqIGhvbGRpbmcgZl9sb2NrLiAgVGhpcyBpcyBzYWZlIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkgcG9zc2libGUKKwkJICogcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IGluIHRoZSBrZXJuZWwgKGl0IHdhcyBhYm91dCB0byBiZQorCQkgKiBmcmVlZCwgcmVtZW1iZXI/KQorCQkgKi8KKwkJaWYgKCFhdG9taWNfbG9uZ19yZWFkKCZldmVudC0+ZmlsZS0+Zl9jb3VudCkpIHsKKwkJCWV2ZW50LT5maWxlLT5mX21vZGUgfD0gRk1PREVfTk9OT1RJRlk7CisJCQlnZXRfZmlsZShldmVudC0+ZmlsZSk7CisJCX0KKwkJZ2V0X2ZpbGUoZXZlbnQtPmZpbGUpOwogCQlicmVhazsKIAl9CiAJY2FzZSBGU05PVElGWV9FVkVOVF9JTk9ERToKIAkJZXZlbnQtPmlub2RlID0gZGF0YTsKLQkJZXZlbnQtPmRhdGFfdHlwZSA9IEZTTk9USUZZX0VWRU5UX0lOT0RFOwogCQlicmVhazsKIAljYXNlIEZTTk9USUZZX0VWRU5UX05PTkU6CiAJCWV2ZW50LT5pbm9kZSA9IE5VTEw7Ci0JCWV2ZW50LT5wYXRoLmRlbnRyeSA9IE5VTEw7Ci0JCWV2ZW50LT5wYXRoLm1udCA9IE5VTEw7CisJCWV2ZW50LT5maWxlID0gTlVMTDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CkBAIC00MTIsOCArNDYzLDExIEBACiAJZnNub3RpZnlfZXZlbnRfY2FjaGVwID0gS01FTV9DQUNIRShmc25vdGlmeV9ldmVudCwgU0xBQl9QQU5JQyk7CiAJZnNub3RpZnlfZXZlbnRfaG9sZGVyX2NhY2hlcCA9IEtNRU1fQ0FDSEUoZnNub3RpZnlfZXZlbnRfaG9sZGVyLCBTTEFCX1BBTklDKTsKIAotCWluaXRpYWxpemVfZXZlbnQoJnFfb3ZlcmZsb3dfZXZlbnQpOwotCXFfb3ZlcmZsb3dfZXZlbnQubWFzayA9IEZTX1FfT1ZFUkZMT1c7CisJcV9vdmVyZmxvd19ldmVudCA9IGZzbm90aWZ5X2NyZWF0ZV9ldmVudChOVUxMLCBGU19RX09WRVJGTE9XLCBOVUxMLAorCQkJCQkJIEZTTk9USUZZX0VWRU5UX05PTkUsIE5VTEwsIDAsCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFxX292ZXJmbG93X2V2ZW50KQorCQlwYW5pYygidW5hYmxlIHRvIGFsbG9jYXRlIGZzbm90aWZ5IHFfb3ZlcmZsb3dfZXZlbnRcbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvdmZzbW91bnRfbWFyay5jIGIvZnMvbm90aWZ5L3Zmc21vdW50X21hcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc3MmI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbm90aWZ5L3Zmc21vdW50X21hcmsuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiwgRXJpYyBQYXJpcyA8ZXBhcmlzQHJlZGhhdC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4gLyogZm9yIGlub2RlX2xvY2sgKi8KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5X2JhY2tlbmQuaD4KKyNpbmNsdWRlICJmc25vdGlmeS5oIgorCit2b2lkIGZzbm90aWZ5X2NsZWFyX21hcmtzX2J5X21vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCAqbG1hcms7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CisJTElTVF9IRUFEKGZyZWVfbGlzdCk7CisKKwlzcGluX2xvY2soJm1udC0+bW50X3Jvb3QtPmRfbG9jayk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXJrLCBwb3MsIG4sICZtbnQtPm1udF9mc25vdGlmeV9tYXJrcywgbS5tX2xpc3QpIHsKKwkJbGlzdF9hZGQoJm1hcmstPm0uZnJlZV9tX2xpc3QsICZmcmVlX2xpc3QpOworCQlobGlzdF9kZWxfaW5pdF9yY3UoJm1hcmstPm0ubV9saXN0KTsKKwkJZnNub3RpZnlfZ2V0X21hcmsobWFyayk7CisJfQorCXNwaW5fdW5sb2NrKCZtbnQtPm1udF9yb290LT5kX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcmssIGxtYXJrLCAmZnJlZV9saXN0LCBtLmZyZWVfbV9saXN0KSB7CisJCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhtYXJrKTsKKwkJZnNub3RpZnlfcHV0X21hcmsobWFyayk7CisJfQorfQorCit2b2lkIGZzbm90aWZ5X2NsZWFyX3Zmc21vdW50X21hcmtzX2J5X2dyb3VwKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApCit7CisJZnNub3RpZnlfY2xlYXJfbWFya3NfYnlfZ3JvdXBfZmxhZ3MoZ3JvdXAsIEZTTk9USUZZX01BUktfRkxBR19WRlNNT1VOVCk7Cit9CisKKy8qCisgKiBSZWNhbGN1bGF0ZSB0aGUgbWFzayBvZiBldmVudHMgcmVsZXZhbnQgdG8gYSBnaXZlbiB2ZnNtb3VudCBsb2NrZWQuCisgKi8KK3N0YXRpYyB2b2lkIGZzbm90aWZ5X3JlY2FsY192ZnNtb3VudF9tYXNrX2xvY2tlZChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCV9fdTMyIG5ld19tYXNrID0gMDsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmbW50LT5tbnRfcm9vdC0+ZF9sb2NrKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcmssIHBvcywgJm1udC0+bW50X2Zzbm90aWZ5X21hcmtzLCBtLm1fbGlzdCkKKwkJbmV3X21hc2sgfD0gbWFyay0+bWFzazsKKwltbnQtPm1udF9mc25vdGlmeV9tYXNrID0gbmV3X21hc2s7Cit9CisKKy8qCisgKiBSZWNhbGN1bGF0ZSB0aGUgbW50LT5tbnRfZnNub3RpZnlfbWFzaywgb3IgdGhlIG1hc2sgb2YgYWxsIEZTXyogZXZlbnQgdHlwZXMKKyAqIGFueSBub3RpZmllciBpcyBpbnRlcmVzdGVkIGluIGhlYXJpbmcgZm9yIHRoaXMgbW91bnQgcG9pbnQKKyAqLwordm9pZCBmc25vdGlmeV9yZWNhbGNfdmZzbW91bnRfbWFzayhzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzcGluX2xvY2soJm1udC0+bW50X3Jvb3QtPmRfbG9jayk7CisJZnNub3RpZnlfcmVjYWxjX3Zmc21vdW50X21hc2tfbG9ja2VkKG1udCk7CisJc3Bpbl91bmxvY2soJm1udC0+bW50X3Jvb3QtPmRfbG9jayk7Cit9CisKK3ZvaWQgZnNub3RpZnlfZGVzdHJveV92ZnNtb3VudF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKQoreworCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gbWFyay0+bS5tbnQ7CisKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJm1hcmstPmxvY2spOworCWFzc2VydF9zcGluX2xvY2tlZCgmbWFyay0+Z3JvdXAtPm1hcmtfbG9jayk7CisKKwlzcGluX2xvY2soJm1udC0+bW50X3Jvb3QtPmRfbG9jayk7CisKKwlobGlzdF9kZWxfaW5pdF9yY3UoJm1hcmstPm0ubV9saXN0KTsKKwltYXJrLT5tLm1udCA9IE5VTEw7CisKKwlmc25vdGlmeV9yZWNhbGNfdmZzbW91bnRfbWFza19sb2NrZWQobW50KTsKKworCXNwaW5fdW5sb2NrKCZtbnQtPm1udF9yb290LT5kX2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbm90aWZ5X2ZpbmRfdmZzbW91bnRfbWFya19sb2NrZWQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCQkJCQkJc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcms7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmbW50LT5tbnRfcm9vdC0+ZF9sb2NrKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcmssIHBvcywgJm1udC0+bW50X2Zzbm90aWZ5X21hcmtzLCBtLm1fbGlzdCkgeworCQlpZiAobWFyay0+Z3JvdXAgPT0gZ3JvdXApIHsKKwkJCWZzbm90aWZ5X2dldF9tYXJrKG1hcmspOworCQkJcmV0dXJuIG1hcms7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBnaXZlbiBhIGdyb3VwIGFuZCB2ZnNtb3VudCwgZmluZCB0aGUgbWFyayBhc3NvY2lhdGVkIHdpdGggdGhhdCBjb21iaW5hdGlvbi4KKyAqIGlmIGZvdW5kIHRha2UgYSByZWZlcmVuY2UgdG8gdGhhdCBtYXJrIGFuZCByZXR1cm4gaXQsIGVsc2UgcmV0dXJuIE5VTEwKKyAqLworc3RydWN0IGZzbm90aWZ5X21hcmsgKmZzbm90aWZ5X2ZpbmRfdmZzbW91bnRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJCQkJICBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqbWFyazsKKworCXNwaW5fbG9jaygmbW50LT5tbnRfcm9vdC0+ZF9sb2NrKTsKKwltYXJrID0gZnNub3RpZnlfZmluZF92ZnNtb3VudF9tYXJrX2xvY2tlZChncm91cCwgbW50KTsKKwlzcGluX3VubG9jaygmbW50LT5tbnRfcm9vdC0+ZF9sb2NrKTsKKworCXJldHVybiBtYXJrOworfQorCisvKgorICogQXR0YWNoIGFuIGluaXRpYWxpemVkIG1hcmsgdG8gYSBnaXZlbiBncm91cCBhbmQgdmZzbW91bnQuCisgKiBUaGVzZSBtYXJrcyBtYXkgYmUgdXNlZCBmb3IgdGhlIGZzbm90aWZ5IGJhY2tlbmQgdG8gZGV0ZXJtaW5lIHdoaWNoCisgKiBldmVudCB0eXBlcyBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHdoaWNoIGdyb3Vwcy4KKyAqLworaW50IGZzbm90aWZ5X2FkZF92ZnNtb3VudF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLAorCQkJICAgICAgIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICAgICAgIGludCBhbGxvd19kdXBzKQoreworCXN0cnVjdCBmc25vdGlmeV9tYXJrICpsbWFyazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKmxhc3QgPSBOVUxMOworCWludCByZXQgPSAwOworCisJbWFyay0+ZmxhZ3MgfD0gRlNOT1RJRllfTUFSS19GTEFHX1ZGU01PVU5UOworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZtYXJrLT5sb2NrKTsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmdyb3VwLT5tYXJrX2xvY2spOworCisJc3Bpbl9sb2NrKCZtbnQtPm1udF9yb290LT5kX2xvY2spOworCisJbWFyay0+bS5tbnQgPSBtbnQ7CisKKwkvKiBpcyBtYXJrIHRoZSBmaXJzdCBtYXJrPyAqLworCWlmIChobGlzdF9lbXB0eSgmbW50LT5tbnRfZnNub3RpZnlfbWFya3MpKSB7CisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmbWFyay0+bS5tX2xpc3QsICZtbnQtPm1udF9mc25vdGlmeV9tYXJrcyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHNob3VsZCBtYXJrIGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnQgbGlzdD8gKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShsbWFyaywgbm9kZSwgJm1udC0+bW50X2Zzbm90aWZ5X21hcmtzLCBtLm1fbGlzdCkgeworCQlsYXN0ID0gbm9kZTsKKworCQlpZiAoKGxtYXJrLT5ncm91cCA9PSBncm91cCkgJiYgIWFsbG93X2R1cHMpIHsKKwkJCXJldCA9IC1FRVhJU1Q7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChtYXJrLT5ncm91cCA8IGxtYXJrLT5ncm91cCkKKwkJCWNvbnRpbnVlOworCisJCWhsaXN0X2FkZF9iZWZvcmVfcmN1KCZtYXJrLT5tLm1fbGlzdCwgJmxtYXJrLT5tLm1fbGlzdCk7CisJCWdvdG8gb3V0OworCX0KKworCUJVR19PTihsYXN0ID09IE5VTEwpOworCS8qIG1hcmsgc2hvdWxkIGJlIHRoZSBsYXN0IGVudHJ5LiAgbGFzdCBpcyB0aGUgY3VycmVudCBsYXN0IGVudHJ5ICovCisJaGxpc3RfYWRkX2FmdGVyX3JjdShsYXN0LCAmbWFyay0+bS5tX2xpc3QpOworb3V0OgorCWZzbm90aWZ5X3JlY2FsY192ZnNtb3VudF9tYXNrX2xvY2tlZChtbnQpOworCXNwaW5fdW5sb2NrKCZtbnQtPm1udF9yb290LT5kX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuYyBiL2ZzL250ZnMvaW5vZGUuYwppbmRleCA0YjU3ZmIxLi45MzYyMmIxIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmMKKysrIGIvZnMvbnRmcy9pbm9kZS5jCkBAIC0yMjM4LDcgKzIyMzgsNyBAQAogfQogCiAvKioKLSAqIG50ZnNfY2xlYXJfYmlnX2lub2RlIC0gY2xlYW4gdXAgdGhlIG50ZnMgc3BlY2lmaWMgcGFydCBvZiBhbiBpbm9kZQorICogbnRmc19ldmljdF9iaWdfaW5vZGUgLSBjbGVhbiB1cCB0aGUgbnRmcyBzcGVjaWZpYyBwYXJ0IG9mIGFuIGlub2RlCiAgKiBAdmk6CQl2ZnMgaW5vZGUgcGVuZGluZyBhbm5paGlsYXRpb24KICAqCiAgKiBXaGVuIHRoZSBWRlMgaXMgZ29pbmcgdG8gcmVtb3ZlIGFuIGlub2RlIGZyb20gbWVtb3J5LCBudGZzX2NsZWFyX2JpZ19pbm9kZSgpCkBAIC0yMjQ3LDEwICsyMjQ3LDEzIEBACiAgKgogICogSWYgdGhlIE1GVCByZWNvcmQgaXMgZGlydHksIHdlIGNvbW1pdCBpdCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KICAqLwotdm9pZCBudGZzX2NsZWFyX2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKQordm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKQogewogCW50ZnNfaW5vZGUgKm5pID0gTlRGU19JKHZpKTsKIAorCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ2aS0+aV9kYXRhLCAwKTsKKwllbmRfd3JpdGViYWNrKHZpKTsKKwogI2lmZGVmIE5URlNfUlcKIAlpZiAoTklub0RpcnR5KG5pKSkgewogCQlib29sIHdhc19iYWQgPSAoaXNfYmFkX2lub2RlKHZpKSk7CkBAIC0yODc5LDkgKzI4ODIsNiBAQAogICoKICAqIENhbGxlZCB3aXRoIC0+aV9tdXRleCBoZWxkLiAgRm9yIHRoZSBBVFRSX1NJWkUgKGkuZS4gLT50cnVuY2F0ZSkgY2FzZSwgYWxzbwogICogY2FsbGVkIHdpdGggLT5pX2FsbG9jX3NlbSBoZWxkIGZvciB3cml0aW5nLgotICoKLSAqIEJhc2ljYWxseSB0aGlzIGlzIGEgY29weSBvZiBnZW5lcmljIG5vdGlmeV9jaGFuZ2UoKSBhbmQgaW5vZGVfc2V0YXR0cigpCi0gKiBmdW5jdGlvbmFsaXR5LCBleGNlcHQgd2UgaW50ZXJjZXB0IGFuZCBhYm9ydCBjaGFuZ2VzIGluIGlfc2l6ZS4KICAqLwogaW50IG50ZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKIHsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5vZGUuaCBiL2ZzL250ZnMvaW5vZGUuaAppbmRleCA5YTExMzU0Li4yZGFiZjgxIDEwMDY0NAotLS0gYS9mcy9udGZzL2lub2RlLmgKKysrIGIvZnMvbnRmcy9pbm9kZS5oCkBAIC0yNzksNyArMjc5LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqbnRmc19hbGxvY19iaWdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gdm9pZCBudGZzX2Rlc3Ryb3lfYmlnX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHZvaWQgbnRmc19jbGVhcl9iaWdfaW5vZGUoc3RydWN0IGlub2RlICp2aSk7CitleHRlcm4gdm9pZCBudGZzX2V2aWN0X2JpZ19pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpKTsKIAogZXh0ZXJuIHZvaWQgX19udGZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbnRmc19pbm9kZSAqbmkpOwogCmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggMGRlMWRiNi4uNTEyODA2MSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtMjcwMCw3ICsyNzAwLDcgQEAKIAkucHV0X3N1cGVyCT0gbnRmc19wdXRfc3VwZXIsCS8qIFN5c2NhbGw6IHVtb3VudC4gKi8KIAkuc3RhdGZzCQk9IG50ZnNfc3RhdGZzLAkJLyogU3lzY2FsbDogc3RhdGZzICovCiAJLnJlbW91bnRfZnMJPSBudGZzX3JlbW91bnQsCQkvKiBTeXNjYWxsOiBtb3VudCAtbyByZW1vdW50LiAqLwotCS5jbGVhcl9pbm9kZQk9IG50ZnNfY2xlYXJfYmlnX2lub2RlLAkvKiBWRlM6IENhbGxlZCB3aGVuIGFuIGlub2RlIGlzCisJLmV2aWN0X2lub2RlCT0gbnRmc19ldmljdF9iaWdfaW5vZGUsCS8qIFZGUzogQ2FsbGVkIHdoZW4gYW4gaW5vZGUgaXMKIAkJCQkJCSAgIHJlbW92ZWQgZnJvbSBtZW1vcnkuICovCiAJLy8udW1vdW50X2JlZ2luCT0gTlVMTCwJCQkvKiBGb3JjZWQgdW1vdW50LiAqLwogCS5zaG93X29wdGlvbnMJPSBudGZzX3Nob3dfb3B0aW9ucywJLyogU2hvdyBtb3VudCBvcHRpb25zIGluCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggOTYzMzdhNC4uMGRlNjljOSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtNjQzLDExICs2NDMsMTAgQEAKIAlpZiAoaV9zaXplX3JlYWQoaW5vZGUpIDw9IG9mZnNldCkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsCi0JCQkJCSAgICBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsIG9mZnNldCwKLQkJCQkJICAgIG5yX3NlZ3MsCi0JCQkJCSAgICBvY2ZzMl9kaXJlY3RfSU9fZ2V0X2Jsb2NrcywKLQkJCQkJICAgIG9jZnMyX2Rpb19lbmRfaW8pOworCXJldCA9IF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwKKwkJCQkgICBpb3YsIG9mZnNldCwgbnJfc2VncywKKwkJCQkgICBvY2ZzMl9kaXJlY3RfSU9fZ2V0X2Jsb2NrcywKKwkJCQkgICBvY2ZzMl9kaW9fZW5kX2lvLCBOVUxMLCAwKTsKIAogCW1sb2dfZXhpdChyZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jIGIvZnMvb2NmczIvZGxtZnMvZGxtZnMuYwppbmRleCBiZWYzNGQwLi5jMjkwM2I4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1mcy9kbG1mcy5jCisrKyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKQEAgLTIxMywxMCArMjEzLDEyIEBACiAKIAlhdHRyLT5pYV92YWxpZCAmPSB+QVRUUl9TSVpFOwogCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIGVycm9yOworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGxtZnNfZmlsZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQpAQCAtMzU0LDEzICszNTYsMTIgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoZGxtZnNfaW5vZGVfY2FjaGUsIERMTUZTX0koaW5vZGUpKTsKIH0KIAotc3RhdGljIHZvaWQgZGxtZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIGRsbWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CiAKLQlpZiAoIWlub2RlKQotCQlyZXR1cm47CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAKIAltbG9nKDAsICJpbm9kZSAlbHVcbiIsIGlub2RlLT5pX2lubyk7CiAKQEAgLTYzMCw3ICs2MzEsNyBAQAogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKIAkuYWxsb2NfaW5vZGUJPSBkbG1mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IGRsbWZzX2Rlc3Ryb3lfaW5vZGUsCi0JLmNsZWFyX2lub2RlCT0gZGxtZnNfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gZGxtZnNfZXZpY3RfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAyYjEwYjM2Li44MTI5NmI0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xMjMzLDE4ICsxMjMzLDI2IEBACiAJfQogCiAJLyoKLQkgKiBUaGlzIHdpbGwgaW50ZW50aW9uYWxseSBub3Qgd2luZCB1cCBjYWxsaW5nIHNpbXBsZV9zZXRzaXplKCksCisJICogVGhpcyB3aWxsIGludGVudGlvbmFsbHkgbm90IHdpbmQgdXAgY2FsbGluZyB0cnVuY2F0ZV9zZXRzaXplKCksCiAJICogc2luY2UgYWxsIHRoZSB3b3JrIGZvciBhIHNpemUgY2hhbmdlIGhhcyBiZWVuIGRvbmUgYWJvdmUuCiAJICogT3RoZXJ3aXNlLCB3ZSBjb3VsZCBnZXQgaW50byBwcm9ibGVtcyB3aXRoIHRydW5jYXRlIGFzCiAJICogaXBfYWxsb2Nfc2VtIGlzIHVzZWQgdGhlcmUgdG8gcHJvdGVjdCBhZ2FpbnN0IGlfc2l6ZQogCSAqIGNoYW5nZXMuCisJICoKKwkgKiBYWFg6IHRoaXMgbWVhbnMgdGhlIGNvbmRpdGlvbmFsIGJlbG93IGNhbiBwcm9iYWJseSBiZSByZW1vdmVkLgogCSAqLwotCXN0YXR1cyA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBiYWlsX2NvbW1pdDsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQlzdGF0dXMgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKHN0YXR1cykgeworCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJZ290byBiYWlsX2NvbW1pdDsKKwkJfQogCX0KIAorCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisKIAlzdGF0dXMgPSBvY2ZzMl9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUsIGJoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtMjMwMCwxMiArMjMwOCwxMiBAQAogCQkJICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4KIAkJCSAqIERvbid0IG5lZWQgaV9zaXplX3JlYWQgYmVjYXVzZSB3ZSBob2xkIGlfbXV0ZXguCiAJCQkgKgotCQkJICogWFhYKGhjaCk6IHRoaXMgbG9va3MgYnVnZ3kgYmVjYXVzZSBvY2ZzMiBkaWQgbm90CisJCQkgKiBYWFgodHJ1bmNhdGUpOiB0aGlzIGxvb2tzIGJ1Z2d5IGJlY2F1c2Ugb2NmczIgZGlkIG5vdAogCQkJICogYWN0dWFsbHkgaW1wbGVtZW50IC0+dHJ1bmNhdGUuICBUYWtlIGEgbG9vayBhdAogCQkJICogdGhlIG5ldyB0cnVuY2F0ZSBzZXF1ZW5jZSBhbmQgdXBkYXRlIHRoaXMgYWNjb3JkaW5nbHkKIAkJCSAqLwogCQkJaWYgKCpwcG9zICsgY291bnQgPiBpbm9kZS0+aV9zaXplKQotCQkJCXNpbXBsZV9zZXRzaXplKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKKwkJCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIAkJCXJldCA9IHdyaXR0ZW47CiAJCQlnb3RvIG91dF9kaW87CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IGFiYjBhOTUuLjA0OTI0NjQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtOTY5LDcgKzk2OSw3IEBACiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwogfQogCi12b2lkIG9jZnMyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgb2NmczJfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaW50IHdpcGUsIHN0YXR1czsKIAlzaWdzZXRfdCBvbGRzZXQ7CkBAIC0xMDc1LDIwICsxMDc1LDE3IEBACiBiYWlsX3VuYmxvY2s6CiAJb2NmczJfdW5ibG9ja19zaWduYWxzKCZvbGRzZXQpOwogYmFpbDoKLQljbGVhcl9pbm9kZShpbm9kZSk7CiAJbWxvZ19leGl0X3ZvaWQoKTsKIH0KIAotdm9pZCBvY2ZzMl9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgb2NmczJfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlpZiAoIWlub2RlKQotCQlnb3RvIGJhaWw7Ci0KKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIAltbG9nKDAsICJDbGVhcmluZyBpbm9kZTogJWxsdSwgbmxpbmsgPSAldVxuIiwKIAkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLCBpbm9kZS0+aV9ubGluayk7CiAKQEAgLTExODAsMTYgKzExNzcsMjcgQEAKIAlqYmQyX2pvdXJuYWxfcmVsZWFzZV9qYmRfaW5vZGUoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLT5qb3VybmFsLT5qX2pvdXJuYWwsCiAJCQkJICAgICAgICZvaS0+aXBfamlub2RlKTsKIAotYmFpbDoKIAltbG9nX2V4aXRfdm9pZCgpOwogfQogCit2b2lkIG9jZnMyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKCFpbm9kZS0+aV9ubGluayB8fAorCSAgICAoT0NGUzJfSShpbm9kZSktPmlwX2ZsYWdzICYgT0NGUzJfSU5PREVfTUFZQkVfT1JQSEFORUQpKSB7CisJCW9jZnMyX2RlbGV0ZV9pbm9kZShpbm9kZSk7CisJfSBlbHNlIHsKKwkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCX0KKwlvY2ZzMl9jbGVhcl9pbm9kZShpbm9kZSk7Cit9CisKIC8qIENhbGxlZCB1bmRlciBpbm9kZV9sb2NrLCB3aXRoIG5vIG1vcmUgcmVmZXJlbmNlcyBvbiB0aGUKICAqIHN0cnVjdCBpbm9kZSwgc28gaXQncyBzYWZlIGhlcmUgdG8gY2hlY2sgdGhlIGZsYWdzIGZpZWxkCiAgKiBhbmQgdG8gbWFuaXB1bGF0ZSBpX25saW5rIHdpdGhvdXQgYW55IG90aGVyIGxvY2tzLiAqLwotdm9pZCBvY2ZzMl9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitpbnQgb2NmczJfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOworCWludCByZXM7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIApAQCAtMTE5NywxMSArMTIwNSwxMiBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvaS0+aXBfYmxrbm8sIGlub2RlLT5pX25saW5rLCBvaS0+aXBfZmxhZ3MpOwogCiAJaWYgKG9pLT5pcF9mbGFncyAmIE9DRlMyX0lOT0RFX01BWUJFX09SUEhBTkVEKQotCQlnZW5lcmljX2RlbGV0ZV9pbm9kZShpbm9kZSk7CisJCXJlcyA9IDE7CiAJZWxzZQotCQlnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOworCQlyZXMgPSBnZW5lcmljX2Ryb3BfaW5vZGUoaW5vZGUpOwogCiAJbWxvZ19leGl0X3ZvaWQoKTsKKwlyZXR1cm4gcmVzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuaCBiL2ZzL29jZnMyL2lub2RlLmgKaW5kZXggOWY1ZjVmYy4uNmRlNWE4NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW5vZGUuaAorKysgYi9mcy9vY2ZzMi9pbm9kZS5oCkBAIC0xMjMsOSArMTIzLDggQEAKIAlyZXR1cm4gJk9DRlMyX0koaW5vZGUpLT5pcF9tZXRhZGF0YV9jYWNoZTsKIH0KIAotdm9pZCBvY2ZzMl9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLXZvaWQgb2NmczJfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotdm9pZCBvY2ZzMl9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBvY2ZzMl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBvY2ZzMl9kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBGbGFncyBmb3Igb2NmczJfaWdldCgpICovCiAjZGVmaW5lIE9DRlMyX0ZJX0ZMQUdfU1lTRklMRQkJMHgxCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggNjI1ZGU5ZC4uOWI1N2MwMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtNzYwLDEzICs3NjAsMTMgQEAKIAlpZiAob3NiLT5vc2JfY29tbWl0X2ludGVydmFsKQogCQljb21taXRfaW50ZXJ2YWwgPSBvc2ItPm9zYl9jb21taXRfaW50ZXJ2YWw7CiAKLQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJd3JpdGVfbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAlqb3VybmFsLT5qX2NvbW1pdF9pbnRlcnZhbCA9IGNvbW1pdF9pbnRlcnZhbDsKIAlpZiAob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX0JBUlJJRVIpCiAJCWpvdXJuYWwtPmpfZmxhZ3MgfD0gSkJEMl9CQVJSSUVSOwogCWVsc2UKIAkJam91cm5hbC0+al9mbGFncyAmPSB+SkJEMl9CQVJSSUVSOwotCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCXdyaXRlX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIH0KIAogaW50IG9jZnMyX2pvdXJuYWxfaW5pdChzdHJ1Y3Qgb2NmczJfam91cm5hbCAqam91cm5hbCwgaW50ICpkaXJ0eSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDAzYTc5OWYuLmZhMWJlMWIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTQ1LDggKzE0NSw3IEBACiAJLmFsbG9jX2lub2RlCT0gb2NmczJfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBvY2ZzMl9kZXN0cm95X2lub2RlLAogCS5kcm9wX2lub2RlCT0gb2NmczJfZHJvcF9pbm9kZSwKLQkuY2xlYXJfaW5vZGUJPSBvY2ZzMl9jbGVhcl9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gb2NmczJfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IG9jZnMyX2V2aWN0X2lub2RlLAogCS5zeW5jX2ZzCT0gb2NmczJfc3luY19mcywKIAkucHV0X3N1cGVyCT0gb2NmczJfcHV0X3N1cGVyLAogCS5yZW1vdW50X2ZzCT0gb2NmczJfcmVtb3VudCwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jCmluZGV4IGI0MmQ2MjQuLjM5M2YzZjYgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZGlyLmMKKysrIGIvZnMvb21mcy9kaXIuYwpAQCAtMjUsMTEgKzI1LDEwIEBACiAJCWNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgKm9mcykKIHsKIAlpbnQgbmJ1Y2tldHMgPSAoZGlyLT5pX3NpemUgLSBPTUZTX0RJUl9TVEFSVCkvODsKLQlpbnQgYmxvY2sgPSBjbHVzX3RvX2JsayhPTUZTX1NCKGRpci0+aV9zYiksIGRpci0+aV9pbm8pOwogCWludCBidWNrZXQgPSBvbWZzX2hhc2gobmFtZSwgbmFtZWxlbiwgbmJ1Y2tldHMpOwogCiAJKm9mcyA9IE9NRlNfRElSX1NUQVJUICsgYnVja2V0ICogODsKLQlyZXR1cm4gc2JfYnJlYWQoZGlyLT5pX3NiLCBibG9jayk7CisJcmV0dXJuIG9tZnNfYnJlYWQoZGlyLT5pX3NiLCBkaXItPmlfaW5vKTsKIH0KIAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqb21mc19zY2FuX2xpc3Qoc3RydWN0IGlub2RlICpkaXIsIHU2NCBibG9jaywKQEAgLTQyLDggKzQxLDcgQEAKIAkqcHJldl9ibG9jayA9IH4wOwogCiAJd2hpbGUgKGJsb2NrICE9IH4wKSB7Ci0JCWJoID0gc2JfYnJlYWQoZGlyLT5pX3NiLAotCQkJY2x1c190b19ibGsoT01GU19TQihkaXItPmlfc2IpLCBibG9jaykpOworCQliaCA9IG9tZnNfYnJlYWQoZGlyLT5pX3NiLCBibG9jayk7CiAJCWlmICghYmgpIHsKIAkJCWVyciA9IC1FSU87CiAJCQlnb3RvIGVycjsKQEAgLTg2LDExICs4NCwxMCBAQAogaW50IG9tZnNfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCBvbWZzX3NiX2luZm8gKnNiaSA9IE9NRlNfU0Ioc2IpOwotCWludCBibG9jayA9IGNsdXNfdG9fYmxrKHNiaSwgaW5vZGUtPmlfaW5vKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBvbWZzX2lub2RlICpvaTsKIAotCWJoID0gc2JfYnJlYWQoc2IsIGJsb2NrKTsKKwliaCA9IG9tZnNfYnJlYWQoc2IsIGlub2RlLT5pX2lubyk7CiAJaWYgKCFiaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEzNCw3ICsxMzEsNyBAQAogCWJyZWxzZShiaCk7CiAKIAkvKiBub3cgc2V0IHRoZSBzaWJsaW5nIGFuZCBwYXJlbnQgcG9pbnRlcnMgb24gdGhlIG5ldyBpbm9kZSAqLwotCWJoID0gc2JfYnJlYWQoZGlyLT5pX3NiLCBjbHVzX3RvX2JsayhPTUZTX1NCKGRpci0+aV9zYiksIGlub2RlLT5pX2lubykpOworCWJoID0gb21mc19icmVhZChkaXItPmlfc2IsIGlub2RlLT5pX2lubyk7CiAJaWYgKCFiaCkKIAkJZ290byBvdXQ7CiAKQEAgLTE5MCw4ICsxODcsNyBAQAogCWlmIChwcmV2ICE9IH4wKSB7CiAJCS8qIGZvdW5kIGluIG1pZGRsZSBvZiBsaXN0LCBnZXQgbGlzdCBwdHIgKi8KIAkJYnJlbHNlKGJoKTsKLQkJYmggPSBzYl9icmVhZChkaXItPmlfc2IsCi0JCQljbHVzX3RvX2JsayhPTUZTX1NCKGRpci0+aV9zYiksIHByZXYpKTsKKwkJYmggPSBvbWZzX2JyZWFkKGRpci0+aV9zYiwgcHJldik7CiAJCWlmICghYmgpCiAJCQlnb3RvIG91dDsKIApAQCAtMjI0LDggKzIyMCw3IEBACiAJdTY0ICpwdHI7CiAJaW50IGk7CiAKLQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBjbHVzX3RvX2JsayhPTUZTX1NCKGlub2RlLT5pX3NiKSwKLQkJCWlub2RlLT5pX2lubykpOworCWJoID0gb21mc19icmVhZChpbm9kZS0+aV9zYiwgaW5vZGUtPmlfaW5vKTsKIAogCWlmICghYmgpCiAJCXJldHVybiAwOwpAQCAtMzUzLDggKzM0OCw3IEBACiAKIAkvKiBmb2xsb3cgY2hhaW4gaW4gdGhpcyBidWNrZXQgKi8KIAl3aGlsZSAoZnNibG9jayAhPSB+MCkgewotCQliaCA9IHNiX2JyZWFkKGRpci0+aV9zYiwgY2x1c190b19ibGsoT01GU19TQihkaXItPmlfc2IpLAotCQkJCWZzYmxvY2spKTsKKwkJYmggPSBvbWZzX2JyZWFkKGRpci0+aV9zYiwgZnNibG9jayk7CiAJCWlmICghYmgpCiAJCQlnb3RvIG91dDsKIApAQCAtNDY2LDcgKzQ2MCw3IEBACiAJaGNoYWluID0gKGZpbHAtPmZfcG9zID4+IDIwKSAtIDE7CiAJaGluZGV4ID0gZmlscC0+Zl9wb3MgJiAweGZmZmZmOwogCi0JYmggPSBzYl9icmVhZChkaXItPmlfc2IsIGNsdXNfdG9fYmxrKE9NRlNfU0IoZGlyLT5pX3NiKSwgZGlyLT5pX2lubykpOworCWJoID0gb21mc19icmVhZChkaXItPmlfc2IsIGRpci0+aV9pbm8pOwogCWlmICghYmgpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9vbWZzL2ZpbGUuYyBiL2ZzL29tZnMvZmlsZS5jCmluZGV4IDZlN2EzMjkuLjhhNmQzNGYgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZmlsZS5jCisrKyBiL2ZzL29tZnMvZmlsZS5jCkBAIC01MCw3ICs1MCw3IEBACiAJaWYgKGlub2RlLT5pX3NpemUgIT0gMCkKIAkJZ290byBvdXQ7CiAKLQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBjbHVzX3RvX2JsayhzYmksIG5leHQpKTsKKwliaCA9IG9tZnNfYnJlYWQoaW5vZGUtPmlfc2IsIG5leHQpOwogCWlmICghYmgpCiAJCWdvdG8gb3V0OwogCkBAIC05MCw3ICs5MCw3IEBACiAJCWlmIChuZXh0ID09IH4wKQogCQkJYnJlYWs7CiAKLQkJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgY2x1c190b19ibGsoc2JpLCBuZXh0KSk7CisJCWJoID0gb21mc19icmVhZChpbm9kZS0+aV9zYiwgbmV4dCk7CiAJCWlmICghYmgpCiAJCQlnb3RvIG91dDsKIAkJb2UgPSAoc3RydWN0IG9tZnNfZXh0ZW50ICopICgmYmgtPmJfZGF0YVtPTUZTX0VYVEVOVF9DT05UXSk7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXNlY3Rvcl90IG5leHQsIG9mZnNldDsKIAlpbnQgcmV0OwotCXU2NCBuZXdfYmxvY2s7CisJdTY0IHVuaW5pdGlhbGl6ZWRfdmFyKG5ld19ibG9jayk7CiAJdTMyIG1heF9leHRlbnRzOwogCWludCBleHRlbnRfY291bnQ7CiAJc3RydWN0IG9tZnNfZXh0ZW50ICpvZTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogCWludCByZW1haW47CiAKIAlyZXQgPSAtRUlPOwotCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIGNsdXNfdG9fYmxrKHNiaSwgaW5vZGUtPmlfaW5vKSk7CisJYmggPSBvbWZzX2JyZWFkKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8pOwogCWlmICghYmgpCiAJCWdvdG8gb3V0OwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJCWJyZWFrOwogCiAJCWJyZWxzZShiaCk7Ci0JCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIGNsdXNfdG9fYmxrKHNiaSwgbmV4dCkpOworCQliaCA9IG9tZnNfYnJlYWQoaW5vZGUtPmlfc2IsIG5leHQpOwogCQlpZiAoIWJoKQogCQkJZ290byBvdXQ7CiAJCW9lID0gKHN0cnVjdCBvbWZzX2V4dGVudCAqKSAoJmJoLT5iX2RhdGFbT01GU19FWFRFTlRfQ09OVF0pOwpAQCAtMzEyLDkgKzMxMiwxNyBAQAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7Ci0JKnBhZ2VwID0gTlVMTDsKLQlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLAotCQkJCXBhZ2VwLCBmc2RhdGEsIG9tZnNfZ2V0X2Jsb2NrKTsKKwlpbnQgcmV0OworCisJcmV0ID0gYmxvY2tfd3JpdGVfYmVnaW4obWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQlvbWZzX2dldF9ibG9jayk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJbG9mZl90IGlzaXplID0gbWFwcGluZy0+aG9zdC0+aV9zaXplOworCQlpZiAocG9zICsgbGVuID4gaXNpemUpCisJCQl2bXRydW5jYXRlKG1hcHBpbmctPmhvc3QsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc2VjdG9yX3Qgb21mc19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKQEAgLTMzMyw3ICszNDEsMjkgQEAKIAkuc3BsaWNlX3JlYWQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCitzdGF0aWMgaW50IG9tZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCBlcnJvcjsKKworCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOworfQorCiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2ZpbGVfaW5vcHMgPSB7CisJLnNldGF0dHIgPSBvbWZzX3NldGF0dHIsCiAJLnRydW5jYXRlID0gb21mc190cnVuY2F0ZQogfTsKIApkaWZmIC0tZ2l0IGEvZnMvb21mcy9pbm9kZS5jIGIvZnMvb21mcy9pbm9kZS5jCmluZGV4IDA4OTgzOWEuLjE0YTIyODYgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvaW5vZGUuYworKysgYi9mcy9vbWZzL2lub2RlLmMKQEAgLTE5LDYgKzE5LDE1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk9NRlMgKFJlcGxheVRWL0thcm1hKSBGaWxlc3lzdGVtIGZvciBMaW51eCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9tZnNfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCit7CisJc3RydWN0IG9tZnNfc2JfaW5mbyAqc2JpID0gT01GU19TQihzYik7CisJaWYgKGJsb2NrID49IHNiaS0+c19udW1fYmxvY2tzKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzYl9icmVhZChzYiwgY2x1c190b19ibGsoc2JpLCBibG9jaykpOworfQorCiBzdHJ1Y3QgaW5vZGUgKm9tZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwpAQCAtOTMsMTUgKzEwMiwxMyBAQAogCXN0cnVjdCBvbWZzX2lub2RlICpvaTsKIAlzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmkgPSBPTUZTX1NCKGlub2RlLT5pX3NiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqYmgyOwotCXVuc2lnbmVkIGludCBibG9jazsKIAl1NjQgY3RpbWU7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FSU87CiAJaW50IHN5bmNfZmFpbGVkID0gMDsKIAogCS8qIGdldCBjdXJyZW50IGlub2RlIHNpbmNlIHdlIG1heSBoYXZlIHdyaXR0ZW4gc2libGluZyBwdHJzIGV0Yy4gKi8KLQlibG9jayA9IGNsdXNfdG9fYmxrKHNiaSwgaW5vZGUtPmlfaW5vKTsKLQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CisJYmggPSBvbWZzX2JyZWFkKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8pOwogCWlmICghYmgpCiAJCWdvdG8gb3V0OwogCkBAIC0xNDAsOCArMTQ3LDcgQEAKIAogCS8qIGlmIG1pcnJvcmluZyB3cml0ZXMsIGNvcHkgdG8gbmV4dCBmc2Jsb2NrICovCiAJZm9yIChpID0gMTsgaSA8IHNiaS0+c19taXJyb3JzOyBpKyspIHsKLQkJYmgyID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIGJsb2NrICsgaSAqCi0JCQkoc2JpLT5zX2Jsb2Nrc2l6ZSAvIHNiaS0+c19zeXNfYmxvY2tzaXplKSk7CisJCWJoMiA9IG9tZnNfYnJlYWQoaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubyArIGkpOwogCQlpZiAoIWJoMikKIAkJCWdvdG8gb3V0X2JyZWxzZTsKIApAQCAtMTc1LDkgKzE4MSwxMyBAQAogICogY2FsbGVkIHdoZW4gYW4gZW50cnkgaXMgZGVsZXRlZCwgbmVlZCB0byBjbGVhciB0aGUgYml0cyBpbiB0aGUKICAqIGJpdG1hcHMuCiAgKi8KLXN0YXRpYyB2b2lkIG9tZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBvbWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCisJaWYgKGlub2RlLT5pX25saW5rKQorCQlyZXR1cm47CiAKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQlpbm9kZS0+aV9zaXplID0gMDsKQEAgLTE4NSw3ICsxOTUsNiBAQAogCX0KIAogCW9tZnNfY2xlYXJfcmFuZ2UoaW5vZGUtPmlfc2IsIGlub2RlLT5pX2lubywgMik7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwogfQogCiBzdHJ1Y3QgaW5vZGUgKm9tZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pCkBAIC0xOTMsNyArMjAyLDYgQEAKIAlzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmkgPSBPTUZTX1NCKHNiKTsKIAlzdHJ1Y3Qgb21mc19pbm9kZSAqb2k7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQl1bnNpZ25lZCBpbnQgYmxvY2s7CiAJdTY0IGN0aW1lOwogCXVuc2lnbmVkIGxvbmcgbnNlY3M7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTIwNCw4ICsyMTIsNyBAQAogCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQogCQlyZXR1cm4gaW5vZGU7CiAKLQlibG9jayA9IGNsdXNfdG9fYmxrKHNiaSwgaW5vKTsKLQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CisJYmggPSBvbWZzX2JyZWFkKGlub2RlLT5pX3NiLCBpbm8pOwogCWlmICghYmgpCiAJCWdvdG8gaWdldF9mYWlsZWQ7CiAKQEAgLTI4NCw3ICsyOTEsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgb21mc19zb3BzID0gewogCS53cml0ZV9pbm9kZQk9IG9tZnNfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IG9tZnNfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IG9tZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IG9tZnNfcHV0X3N1cGVyLAogCS5zdGF0ZnMJCT0gb21mc19zdGF0ZnMsCiAJLnNob3dfb3B0aW9ucwk9IGdlbmVyaWNfc2hvd19vcHRpb25zLApAQCAtMzE5LDYgKzMyNiw5IEBACiAJCWdvdG8gbm9tZW07CiAKIAlibG9jayA9IGNsdXNfdG9fYmxrKHNiaSwgc2JpLT5zX2JpdG1hcF9pbm8pOworCWlmIChibG9jayA+PSBzYmktPnNfbnVtX2Jsb2NrcykKKwkJZ290byBub21lbTsKKwogCXB0ciA9IHNiaS0+c19pbWFwOwogCWZvciAoY291bnQgPSBiaXRtYXBfc2l6ZTsgY291bnQgPiAwOyBjb3VudCAtPSBzYi0+c19ibG9ja3NpemUpIHsKIAkJYmggPSBzYl9icmVhZChzYiwgYmxvY2srKyk7CkBAIC00MTcsNyArNDI3LDYgQEAKIAlzdHJ1Y3Qgb21mc19yb290X2Jsb2NrICpvbWZzX3JiOwogCXN0cnVjdCBvbWZzX3NiX2luZm8gKnNiaTsKIAlzdHJ1Y3QgaW5vZGUgKnJvb3Q7Ci0Jc2VjdG9yX3Qgc3RhcnQ7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlzYXZlX21vdW50X29wdGlvbnMoc2IsIChjaGFyICopIGRhdGEpOwpAQCAtNDg2LDggKzQ5NSw3IEBACiAJc2JpLT5zX2Jsb2NrX3NoaWZ0ID0gZ2V0X2JpdG1hc2tfb3JkZXIoc2JpLT5zX2Jsb2Nrc2l6ZSkgLQogCQlnZXRfYml0bWFza19vcmRlcihzYmktPnNfc3lzX2Jsb2Nrc2l6ZSk7CiAKLQlzdGFydCA9IGNsdXNfdG9fYmxrKHNiaSwgYmU2NF90b19jcHUob21mc19zYi0+c19yb290X2Jsb2NrKSk7Ci0JYmgyID0gc2JfYnJlYWQoc2IsIHN0YXJ0KTsKKwliaDIgPSBvbWZzX2JyZWFkKHNiLCBiZTY0X3RvX2NwdShvbWZzX3NiLT5zX3Jvb3RfYmxvY2spKTsKIAlpZiAoIWJoMikKIAkJZ290byBvdXRfYnJlbHNlX2JoOwogCkBAIC01MDQsNiArNTEyLDIxIEBACiAJCWdvdG8gb3V0X2JyZWxzZV9iaDI7CiAJfQogCisJaWYgKHNiaS0+c19iaXRtYXBfaW5vICE9IH4wVUxMICYmCisJICAgIHNiaS0+c19iaXRtYXBfaW5vID4gc2JpLT5zX251bV9ibG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWZzOiBmcmVlIHNwYWNlIGJpdG1hcCBsb2NhdGlvbiBpcyBjb3JydXB0ICIKKwkJCSIoJWxseCwgdG90YWwgYmxvY2tzICVsbHgpXG4iLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgc2JpLT5zX2JpdG1hcF9pbm8sCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBzYmktPnNfbnVtX2Jsb2Nrcyk7CisJCWdvdG8gb3V0X2JyZWxzZV9iaDI7CisJfQorCWlmIChzYmktPnNfY2x1c3RlcnNpemUgPCAxIHx8CisJICAgIHNiaS0+c19jbHVzdGVyc2l6ZSA+IE9NRlNfTUFYX0NMVVNURVJfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgIm9tZnM6IGNsdXN0ZXIgc2l6ZSBvdXQgb2YgcmFuZ2UgKCVkKSIsCisJCQlzYmktPnNfY2x1c3RlcnNpemUpOworCQlnb3RvIG91dF9icmVsc2VfYmgyOworCX0KKwogCXJldCA9IG9tZnNfZ2V0X2ltYXAoc2IpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2JyZWxzZV9iaDI7CkBAIC01MjksNiArNTUyLDggQEAKIG91dF9icmVsc2VfYmg6CiAJYnJlbHNlKGJoKTsKIGVuZDoKKwlpZiAocmV0KQorCQlrZnJlZShzYmkpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29tZnMvb21mcy5oIGIvZnMvb21mcy9vbWZzLmgKaW5kZXggZWJlMmZkYi4uN2Q0MTRmZSAxMDA2NDQKLS0tIGEvZnMvb21mcy9vbWZzLmgKKysrIGIvZnMvb21mcy9vbWZzLmgKQEAgLTU4LDYgKzU4LDcgQEAKIGV4dGVybiBpbnQgb21mc19zaHJpbmtfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiAKIC8qIGlub2RlLmMgKi8KK2V4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9tZnNfYnJlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqb21mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm9tZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSk7CiBleHRlcm4gaW50IG9tZnNfcmVzZXJ2ZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jayk7CmRpZmYgLS1naXQgYS9mcy9vbWZzL29tZnNfZnMuaCBiL2ZzL29tZnMvb21mc19mcy5oCmluZGV4IDEyY2NhMjQuLmVlNWU0MzIgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvb21mc19mcy5oCisrKyBiL2ZzL29tZnMvb21mc19mcy5oCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIE9NRlNfRVhURU5UX0NPTlQgMHg0MAogI2RlZmluZSBPTUZTX1hPUl9DT1VOVCAxOQogI2RlZmluZSBPTUZTX01BWF9CTE9DS19TSVpFIDgxOTIKKyNkZWZpbmUgT01GU19NQVhfQ0xVU1RFUl9TSVpFIDgKIAogc3RydWN0IG9tZnNfc3VwZXJfYmxvY2sgewogCWNoYXIgc19maWxsMVsyNTZdOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDBkMWZhM2QuLjYzMDcxNWYgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9kbm90aWZ5Lmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCkBAIC04ODcsNyArODg4LDcgQEAKIAkJCQlwdXRfdW51c2VkX2ZkKGZkKTsKIAkJCQlmZCA9IFBUUl9FUlIoZik7CiAJCQl9IGVsc2UgewotCQkJCWZzbm90aWZ5X29wZW4oZi0+Zl9wYXRoLmRlbnRyeSk7CisJCQkJZnNub3RpZnlfb3BlbihmKTsKIAkJCQlmZF9pbnN0YWxsKGZkLCBmKTsKIAkJCX0KIAkJfQpAQCAtMTAzMCw3ICsxMDMxLDkgQEAKIAogLyoKICAqIFRoaXMgaXMgdXNlZCBieSBzdWJzeXN0ZW1zIHRoYXQgZG9uJ3Qgd2FudCBzZWVrYWJsZQotICogZmlsZSBkZXNjcmlwdG9ycworICogZmlsZSBkZXNjcmlwdG9ycy4gVGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3NlZCB0byBldmVyIGZhaWwsIHRoZSBvbmx5CisgKiByZWFzb24gaXQgcmV0dXJucyBhbiAnaW50JyBhbmQgbm90ICd2b2lkJyBpcyBzbyB0aGF0IGl0IGNhbiBiZSBwbHVnZ2VkCisgKiBkaXJlY3RseSBpbnRvIGZpbGVfb3BlcmF0aW9ucyBzdHJ1Y3R1cmUuCiAgKi8KIGludCBub25zZWVrYWJsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9hY29ybi5jIGIvZnMvcGFydGl0aW9ucy9hY29ybi5jCmluZGV4IDY5MjFlNzguLmZiZWI2OTcgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvYWNvcm4uYworKysgYi9mcy9wYXJ0aXRpb25zL2Fjb3JuLmMKQEAgLTQ1LDggKzQ1LDExIEBACiAJbnJfc2VjdHMgPSAobGUzMl90b19jcHUoZHItPmRpc2Nfc2l6ZV9oaWdoKSA8PCAyMykgfAogCQkgICAobGUzMl90b19jcHUoZHItPmRpc2Nfc2l6ZSkgPj4gOSk7CiAKLQlpZiAobmFtZSkKLQkJcHJpbnRrKCIgWyVzXSIsIG5hbWUpOworCWlmIChuYW1lKSB7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiBbIiwgUEFHRV9TSVpFKTsKKwkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCBuYW1lLCBQQUdFX1NJWkUpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJdIiwgUEFHRV9TSVpFKTsKKwl9CiAJcHV0X3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwgZmlyc3Rfc2VjdG9yLCBucl9zZWN0cyk7CiAJcmV0dXJuIGRyOwogfQpAQCAtODEsMTQgKzg0LDE0IEBACiAJaWYgKCFycikKIAkJcmV0dXJuIC0xOwogCi0JcHJpbnRrKCIgW1JJU0NpWF0iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW1JJU0NpWF0iLCBQQUdFX1NJWkUpOwogCiAKIAlpZiAocnItPm1hZ2ljID09IFJJU0NJWF9NQUdJQykgewogCQl1bnNpZ25lZCBsb25nIHNpemUgPSBucl9zZWN0cyA+IDIgPyAyIDogbnJfc2VjdHM7CiAJCWludCBwYXJ0OwogCi0JCXByaW50aygiIDwiKTsKKwkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIDwiLCBQQUdFX1NJWkUpOwogCiAJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIHNsb3QrKywgZmlyc3Rfc2VjdCwgc2l6ZSk7CiAJCWZvciAocGFydCA9IDA7IHBhcnQgPCA4OyBwYXJ0KyspIHsKQEAgLTk3LDExICsxMDAsMTMgQEAKIAkJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBzbG90KyssCiAJCQkJCWxlMzJfdG9fY3B1KHJyLT5wYXJ0W3BhcnRdLnN0YXJ0KSwKIAkJCQkJbGUzMl90b19jcHUocnItPnBhcnRbcGFydF0ubGVuZ3RoKSk7Ci0JCQkJcHJpbnRrKCIoJXMpIiwgcnItPnBhcnRbcGFydF0ubmFtZSk7CisJCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiKCIsIFBBR0VfU0laRSk7CisJCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCByci0+cGFydFtwYXJ0XS5uYW1lLCBQQUdFX1NJWkUpOworCQkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIikiLCBQQUdFX1NJWkUpOwogCQkJfQogCQl9CiAKLQkJcHJpbnRrKCIgPlxuIik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA+XG4iLCBQQUdFX1NJWkUpOwogCX0gZWxzZSB7CiAJCXB1dF9wYXJ0aXRpb24oc3RhdGUsIHNsb3QrKywgZmlyc3Rfc2VjdCwgbnJfc2VjdHMpOwogCX0KQEAgLTEzMSw3ICsxMzYsNyBAQAogCXN0cnVjdCBsaW51eF9wYXJ0ICpsaW51eHA7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gbnJfc2VjdHMgPiAyID8gMiA6IG5yX3NlY3RzOwogCi0JcHJpbnRrKCIgW0xpbnV4XSIpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiBbTGludXhdIiwgUEFHRV9TSVpFKTsKIAogCXB1dF9wYXJ0aXRpb24oc3RhdGUsIHNsb3QrKywgZmlyc3Rfc2VjdCwgc2l6ZSk7CiAKQEAgLTEzOSw3ICsxNDQsNyBAQAogCWlmICghbGludXhwKQogCQlyZXR1cm4gLTE7CiAKLQlwcmludGsoIiA8Iik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIDwiLCBQQUdFX1NJWkUpOwogCXdoaWxlIChsaW51eHAtPm1hZ2ljID09IGNwdV90b19sZTMyKExJTlVYX05BVElWRV9NQUdJQykgfHwKIAkgICAgICAgbGludXhwLT5tYWdpYyA9PSBjcHVfdG9fbGUzMihMSU5VWF9TV0FQX01BR0lDKSkgewogCQlpZiAoc2xvdCA9PSBzdGF0ZS0+bGltaXQpCkBAIC0xNDksNyArMTU0LDcgQEAKIAkJCQkgbGUzMl90b19jcHUobGludXhwLT5ucl9zZWN0cykpOwogCQlsaW51eHAgKys7CiAJfQotCXByaW50aygiID4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgPiIsIFBBR0VfU0laRSk7CiAKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAlyZXR1cm4gc2xvdDsKQEAgLTI5NCw3ICsyOTksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcHJpbnRrKCJcbiIpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIlxuIiwgUEFHRV9TSVpFKTsKIAlyZXR1cm4gMTsKIH0KICNlbmRpZgpAQCAtMzY3LDcgKzM3Miw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXByaW50aygiIFtJQ1NdIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIFtJQ1NdIiwgUEFHRV9TSVpFKTsKIAogCWZvciAoc2xvdCA9IDEsIHAgPSAoY29uc3Qgc3RydWN0IGljc19wYXJ0ICopZGF0YTsgcC0+c2l6ZTsgcCsrKSB7CiAJCXUzMiBzdGFydCA9IGxlMzJfdG9fY3B1KHAtPnN0YXJ0KTsKQEAgLTQwMSw3ICs0MDYsNyBAQAogCX0KIAogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTQ2MSw3ICs0NjYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlwcmludGsoIiBbUE9XRVJURUNdIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIFtQT1dFUlRFQ10iLCBQQUdFX1NJWkUpOwogCiAJZm9yIChpID0gMCwgcCA9IChjb25zdCBzdHJ1Y3QgcHRlY19wYXJ0ICopZGF0YTsgaSA8IDEyOyBpKyssIHArKykgewogCQl1MzIgc3RhcnQgPSBsZTMyX3RvX2NwdShwLT5zdGFydCk7CkBAIC00NzIsNyArNDc3LDcgQEAKIAl9CiAKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKLQlwcmludGsoIlxuIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiXG4iLCBQQUdFX1NJWkUpOwogCXJldHVybiAxOwogfQogI2VuZGlmCkBAIC01NDMsNyArNTQ4LDcgQEAKIAogCQlzaXplID0gZ2V0X2NhcGFjaXR5KHN0YXRlLT5iZGV2LT5iZF9kaXNrKTsKIAkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgc2xvdCsrLCBzdGFydCwgc2l6ZSAtIHN0YXJ0KTsKLQkJcHJpbnRrKCJcbiIpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJfQogCiAJcmV0dXJuIGkgPyAxIDogMDsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvYW1pZ2EuYyBiL2ZzL3BhcnRpdGlvbnMvYW1pZ2EuYwppbmRleCBiYTQ0M2Q0Li43MGNiZjQ0IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2FtaWdhLmMKKysrIGIvZnMvcGFydGl0aW9ucy9hbWlnYS5jCkBAIC02OSw3ICs2OSwxMyBAQAogCS8qIGJsa3NpemUgaXMgYmxvY2tzIHBlciA1MTIgYnl0ZSBzdGFuZGFyZCBibG9jayAqLwogCWJsa3NpemUgPSBiZTMyX3RvX2NwdSggcmRiLT5yZGJfQmxvY2tCeXRlcyApIC8gNTEyOwogCi0JcHJpbnRrKCIgUkRTSyAoJWQpIiwgYmxrc2l6ZSAqIDUxMik7CS8qIEJlIG1vcmUgaW5mb3JtYXRpdmUgKi8KKwl7CisJCWNoYXIgdG1wWzcgKyAxMCArIDEgKyAxXTsKKworCQkvKiBCZSBtb3JlIGluZm9ybWF0aXZlICovCisJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgUkRTSyAoJWQpIiwgYmxrc2l6ZSAqIDUxMik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOworCX0KIAlibGsgPSBiZTMyX3RvX2NwdShyZGItPnJkYl9QYXJ0aXRpb25MaXN0KTsKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAlmb3IgKHBhcnQgPSAxOyBibGs+MCAmJiBwYXJ0PD0xNjsgcGFydCsrLCBwdXRfZGV2X3NlY3RvcihzZWN0KSkgewpAQCAtMTA2LDIzICsxMTIsMjcgQEAKIAkJewogCQkJLyogQmUgZXZlbiBtb3JlIGluZm9ybWF0aXZlIHRvIGFpZCBtb3VudGluZyAqLwogCQkJY2hhciBkb3N0eXBlWzRdOworCQkJY2hhciB0bXBbNDJdOworCiAJCQlfX2JlMzIgKmR0ID0gKF9fYmUzMiAqKWRvc3R5cGU7CiAJCQkqZHQgPSBwYi0+cGJfRW52aXJvbm1lbnRbMTZdOwogCQkJaWYgKGRvc3R5cGVbM10gPCAnICcpCi0JCQkJcHJpbnRrKCIgKCVjJWMlY14lYykiLAorCQkJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgKCVjJWMlY14lYykiLAogCQkJCQlkb3N0eXBlWzBdLCBkb3N0eXBlWzFdLAogCQkJCQlkb3N0eXBlWzJdLCBkb3N0eXBlWzNdICsgJ0AnICk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCIgKCVjJWMlYyVjKSIsCisJCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAoJWMlYyVjJWMpIiwKIAkJCQkJZG9zdHlwZVswXSwgZG9zdHlwZVsxXSwKIAkJCQkJZG9zdHlwZVsyXSwgZG9zdHlwZVszXSk7Ci0JCQlwcmludGsoIihyZXMgJWQgc3BiICVkKSIsCisJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKKwkJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIocmVzICVkIHNwYiAlZCkiLAogCQkJCWJlMzJfdG9fY3B1KHBiLT5wYl9FbnZpcm9ubWVudFs2XSksCiAJCQkJYmUzMl90b19jcHUocGItPnBiX0Vudmlyb25tZW50WzRdKSk7CisJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKIAkJfQogCQlyZXMgPSAxOwogCX0KLQlwcmludGsoIlxuIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiXG4iLCBQQUdFX1NJWkUpOwogCiByZGJfZG9uZToKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9hdGFyaS5jIGIvZnMvcGFydGl0aW9ucy9hdGFyaS5jCmluZGV4IDQ0MzlmZjEuLjk4NzViMDUgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvYXRhcmkuYworKysgYi9mcy9wYXJ0aXRpb25zL2F0YXJpLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAl9CiAKIAlwaSA9ICZycy0+cGFydFswXTsKLQlwcmludGsgKCIgQUhESSIpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiBBSERJIiwgUEFHRV9TSVpFKTsKIAlmb3IgKHNsb3QgPSAxOyBwaSA8ICZycy0+cGFydFs0XSAmJiBzbG90IDwgc3RhdGUtPmxpbWl0OyBzbG90KyssIHBpKyspIHsKIAkJc3RydWN0IHJvb3RzZWN0b3IgKnhyczsKIAkJU2VjdG9yIHNlY3QyOwpAQCAtODEsNyArODEsNyBAQAogI2lmZGVmIElDRF9QQVJUUwogCQlwYXJ0X2ZtdCA9IDE7CiAjZW5kaWYKLQkJcHJpbnRrKCIgWEdNPCIpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgWEdNPCIsIFBBR0VfU0laRSk7CiAJCXBhcnRzZWN0ID0gZXh0ZW5zZWN0ID0gYmUzMl90b19jcHUocGktPnN0KTsKIAkJd2hpbGUgKDEpIHsKIAkJCXhycyA9IHJlYWRfcGFydF9zZWN0b3Ioc3RhdGUsIHBhcnRzZWN0LCAmc2VjdDIpOwpAQCAtMTIwLDE0ICsxMjAsMTQgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlwcmludGsoIiA+Iik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA+IiwgUEFHRV9TSVpFKTsKIAl9CiAjaWZkZWYgSUNEX1BBUlRTCiAJaWYgKCBwYXJ0X2ZtdCE9MSApIHsgLyogbm8gZXh0ZW5kZWQgcGFydGl0aW9ucyAtPiB0ZXN0IElDRC1mb3JtYXQgKi8KIAkJcGkgPSAmcnMtPmljZHBhcnRbMF07CiAJCS8qIHNhbml0eSBjaGVjazogbm8gSUNEIGZvcm1hdCBpZiBmaXJzdCBwYXJ0aXRpb24gaW52YWxpZCAqLwogCQlpZiAoT0tfaWQocGktPmlkKSkgewotCQkJcHJpbnRrKCIgSUNEPCIpOworCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIElDRDwiLCBQQUdFX1NJWkUpOwogCQkJZm9yICg7IHBpIDwgJnJzLT5pY2RwYXJ0WzhdICYmIHNsb3QgPCBzdGF0ZS0+bGltaXQ7IHNsb3QrKywgcGkrKykgewogCQkJCS8qIGFjY2VwdCBvbmx5IEdFTSxCR00sUkFXLExOWCxTV1AgcGFydGl0aW9ucyAqLwogCQkJCWlmICghKChwaS0+ZmxnICYgMSkgJiYgT0tfaWQocGktPmlkKSkpCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCQkJCQkJYmUzMl90b19jcHUocGktPnN0KSwKIAkJCQkJCWJlMzJfdG9fY3B1KHBpLT5zaXopKTsKIAkJCX0KLQkJCXByaW50aygiID4iKTsKKwkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA+IiwgUEFHRV9TSVpFKTsKIAkJfQogCX0KICNlbmRpZgogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCi0JcHJpbnRrICgiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCA1ZGNkNGIwLi43OWZiZjNmIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0xNjQsMTAgKzE2NCwxNiBAQAogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuIE5VTEw7CisJc3RhdGUtPnBwX2J1ZiA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghc3RhdGUtPnBwX2J1ZikgeworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlzdGF0ZS0+cHBfYnVmWzBdID0gJ1wwJzsKIAogCXN0YXRlLT5iZGV2ID0gYmRldjsKIAlkaXNrX25hbWUoaGQsIDAsIHN0YXRlLT5uYW1lKTsKLQlwcmludGsoS0VSTl9JTkZPICIgJXM6Iiwgc3RhdGUtPm5hbWUpOworCXNucHJpbnRmKHN0YXRlLT5wcF9idWYsIFBBR0VfU0laRSwgIiAlczoiLCBzdGF0ZS0+bmFtZSk7CiAJaWYgKGlzZGlnaXQoc3RhdGUtPm5hbWVbc3RybGVuKHN0YXRlLT5uYW1lKS0xXSkpCiAJCXNwcmludGYoc3RhdGUtPm5hbWUsICJwIik7CiAKQEAgLTE4NSwxNyArMTkxLDI1IEBACiAJCX0KIAogCX0KLQlpZiAocmVzID4gMCkKKwlpZiAocmVzID4gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHN0YXRlLT5wcF9idWYpOworCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+cHBfYnVmKTsKIAkJcmV0dXJuIHN0YXRlOworCX0KIAlpZiAoc3RhdGUtPmFjY2Vzc19iZXlvbmRfZW9kKQogCQllcnIgPSAtRU5PU1BDOwogCWlmIChlcnIpCiAJLyogVGhlIHBhcnRpdGlvbiBpcyB1bnJlY29nbml6ZWQuIFNvIHJlcG9ydCBJL08gZXJyb3JzIGlmIHRoZXJlIHdlcmUgYW55ICovCiAJCXJlcyA9IGVycjsKIAlpZiAoIXJlcykKLQkJcHJpbnRrKCIgdW5rbm93biBwYXJ0aXRpb24gdGFibGVcbiIpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgdW5rbm93biBwYXJ0aXRpb24gdGFibGVcbiIsIFBBR0VfU0laRSk7CiAJZWxzZSBpZiAod2Fybl9ub19wYXJ0KQotCQlwcmludGsoIiB1bmFibGUgdG8gcmVhZCBwYXJ0aXRpb24gdGFibGVcbiIpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgdW5hYmxlIHRvIHJlYWQgcGFydGl0aW9uIHRhYmxlXG4iLCBQQUdFX1NJWkUpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCBzdGF0ZS0+cHBfYnVmKTsKKworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzdGF0ZS0+cHBfYnVmKTsKIAlrZnJlZShzdGF0ZSk7CiAJcmV0dXJuIEVSUl9QVFIocmVzKTsKIH0KQEAgLTQ1OSw3ICs0NzMsNiBAQAogCX0KIAogCS8qIGV2ZXJ5dGhpbmcgaXMgdXAgYW5kIHJ1bm5pbmcsIGNvbW1lbmNlICovCi0JSU5JVF9SQ1VfSEVBRCgmcC0+cmN1X2hlYWQpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihwdGJsLT5wYXJ0W3BhcnRub10sIHApOwogCiAJLyogc3VwcHJlc3MgdWV2ZW50IGlmIHRoZSBkaXNrIHN1cHJlc3NlcyBpdCAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5oIGIvZnMvcGFydGl0aW9ucy9jaGVjay5oCmluZGV4IDUyZjhiZDMuLjhlNGUxMDMgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suaAorKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAlpbnQgbmV4dDsKIAlpbnQgbGltaXQ7CiAJYm9vbCBhY2Nlc3NfYmV5b25kX2VvZDsKKwljaGFyICpwcF9idWY7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgKnJlYWRfcGFydF9zZWN0b3Ioc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSwKQEAgLTMyLDkgKzMzLDEyIEBACiBwdXRfcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqcCwgaW50IG4sIHNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHNpemUpCiB7CiAJaWYgKG4gPCBwLT5saW1pdCkgeworCQljaGFyIHRtcFsxICsgQkRFVk5BTUVfU0laRSArIDEwICsgMV07CisKIAkJcC0+cGFydHNbbl0uZnJvbSA9IGZyb207CiAJCXAtPnBhcnRzW25dLnNpemUgPSBzaXplOwotCQlwcmludGsoIiAlcyVkIiwgcC0+bmFtZSwgbik7CisJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgJXMlZCIsIHAtPm5hbWUsIG4pOworCQlzdHJsY2F0KHAtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9lZmkuYyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmMKaW5kZXggOWVmYjJjZi4uZGJiNDRkNCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9lZmkuYworKysgYi9mcy9wYXJ0aXRpb25zL2VmaS5jCkBAIC02MzAsNiArNjMwLDYgQEAKIAl9CiAJa2ZyZWUocHRlcyk7CiAJa2ZyZWUoZ3B0KTsKLQlwcmludGsoIlxuIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiXG4iLCBQQUdFX1NJWkUpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9pYm0uYyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKaW5kZXggZmM4NDk3Ni4uZDFiOGE1YyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9pYm0uYworKysgYi9mcy9wYXJ0aXRpb25zL2libS5jCkBAIC03NSw2ICs3NSw3IEBACiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAlTZWN0b3Igc2VjdDsKIAlzZWN0b3JfdCBsYWJlbHNlY3Q7CisJY2hhciB0bXBbNjRdOwogCiAJcmVzID0gMDsKIAlibG9ja3NpemUgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsKQEAgLTE0NCwxMyArMTQ1LDE1IEBACiAJCQkgKi8KIAkJCWJsb2Nrc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfc2l6ZTsKIAkJCWlmIChsYWJlbC0+Y21zLmRpc2tfb2Zmc2V0ICE9IDApIHsKLQkJCQlwcmludGsoIkNNUzEvJThzKE1EU0spOiIsIG5hbWUpOworCQkJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJDTVMxLyU4cyhNRFNLKToiLCBuYW1lKTsKKwkJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKIAkJCQkvKiBkaXNrIGlzIHJlc2VydmVkIG1pbmlkaXNrICovCiAJCQkJb2Zmc2V0ID0gbGFiZWwtPmNtcy5kaXNrX29mZnNldDsKIAkJCQlzaXplID0gKGxhYmVsLT5jbXMuYmxvY2tfY291bnQgLSAxKQogCQkJCQkqIChibG9ja3NpemUgPj4gOSk7CiAJCQl9IGVsc2UgewotCQkJCXByaW50aygiQ01TMS8lOHM6IiwgbmFtZSk7CisJCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIkNNUzEvJThzOiIsIG5hbWUpOworCQkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOwogCQkJCXNpemUgPSBsYWJlbC0+Y21zLmJsb2NrX2NvdW50CiAJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKQEAgLTE1OSw3ICsxNjIsOCBAQAogCQkJCSAgICAgIHNpemUtb2Zmc2V0KihibG9ja3NpemUgPj4gOSkpOwogCQl9IGVsc2UgewogCQkJaWYgKHN0cm5jbXAodHlwZSwgIkxOWDEiLCA0KSA9PSAwKSB7Ci0JCQkJcHJpbnRrKCJMTlgxLyU4czoiLCBuYW1lKTsKKwkJCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiTE5YMS8lOHM6IiwgbmFtZSk7CisJCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCB0bXAsIFBBR0VfU0laRSk7CiAJCQkJaWYgKGxhYmVsLT5sbngubGRsX3ZlcnNpb24gPT0gMHhmMikgewogCQkJCQlmbXRfc2l6ZSA9IGxhYmVsLT5sbnguZm9ybWF0dGVkX2Jsb2NrcwogCQkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwpAQCAtMTc4LDcgKzE4Miw3IEBACiAJCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7CiAJCQl9IGVsc2UgewogCQkJCS8qIHVubGFiZWxlZCBkaXNrICovCi0JCQkJcHJpbnRrKCIobm9ubCkiKTsKKwkJCQlzdHJsY2F0KHRtcCwgc2l6ZW9mKHRtcCksICIobm9ubCkiLCBQQUdFX1NJWkUpOwogCQkJCXNpemUgPSBpX3NpemUgPj4gOTsKIAkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKIAkJCX0KQEAgLTE5Nyw3ICsyMDEsOCBAQAogCQkgKiBpZiBub3QsIHNvbWV0aGluZyBpcyB3cm9uZywgc2tpcHBpbmcgcGFydGl0aW9uIGRldGVjdGlvbgogCQkgKi8KIAkJaWYgKHN0cm5jbXAodHlwZSwgIlZPTDEiLCAgNCkgPT0gMCkgewotCQkJcHJpbnRrKCJWT0wxLyU4czoiLCBuYW1lKTsKKwkJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICJWT0wxLyU4czoiLCBuYW1lKTsKKwkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCQkJLyoKIAkJCSAqIGdldCBibG9jayBudW1iZXIgYW5kIHJlYWQgdGhlbiBnbyB0aHJvdWdoIGZvcm1hdDEKIAkJCSAqIGxhYmVscwpAQCAtMjUzLDcgKzI1OCw3IEBACiAKIAl9CiAKLQlwcmludGsoIlxuIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiXG4iLCBQQUdFX1NJWkUpOwogCWdvdG8gb3V0X2ZyZWVhbGw7CiAKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9rYXJtYS5jIGIvZnMvcGFydGl0aW9ucy9rYXJtYS5jCmluZGV4IDFjYzkyOGIuLjBlYTE5MzEgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMva2FybWEuYworKysgYi9mcy9wYXJ0aXRpb25zL2thcm1hLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJfQogCQlzbG90Kys7CiAJfQotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCA2NDhjOWQ4Li41YmY4YTA0IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTY0Myw3ICs2NDMsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JcHJpbnRrICgiIFtMRE1dIik7CisJc3RybGNhdChwcC0+cHBfYnVmLCAiIFtMRE1dIiwgUEFHRV9TSVpFKTsKIAogCS8qIENyZWF0ZSB0aGUgZGF0YSBwYXJ0aXRpb25zICovCiAJbGlzdF9mb3JfZWFjaCAoaXRlbSwgJmxkYi0+dl9wYXJ0KSB7CkBAIC02NTgsNyArNjU4LDcgQEAKIAkJcGFydF9udW0rKzsKIAl9CiAKLQlwcmludGsgKCJcbiIpOworCXN0cmxjYXQocHAtPnBwX2J1ZiwgIlxuIiwgUEFHRV9TSVpFKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9tYWMuYyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKaW5kZXggNzQ0NjVmZi4uNjhkNmEyMSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tYWMuYworKysgYi9mcy9wYXJ0aXRpb25zL21hYy5jCkBAIC01OSw3ICs1OSw3IEBACiAJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCQlyZXR1cm4gMDsJCS8qIG5vdCBhIE1hY09TIGRpc2sgKi8KIAl9Ci0JcHJpbnRrKCIgW21hY10iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW21hY10iLCBQQUdFX1NJWkUpOwogCWJsb2Nrc19pbl9tYXAgPSBiZTMyX3RvX2NwdShwYXJ0LT5tYXBfY291bnQpOwogCWZvciAoYmxrID0gMTsgYmxrIDw9IGJsb2Nrc19pbl9tYXA7ICsrYmxrKSB7CiAJCWludCBwb3MgPSBibGsgKiBzZWNzaXplOwpAQCAtMTI4LDYgKzEyOCw2IEBACiAjZW5kaWYKIAogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21zZG9zLmMgYi9mcy9wYXJ0aXRpb25zL21zZG9zLmMKaW5kZXggMTViZmI3Yi4uNWY3OWE2NiAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tc2Rvcy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbXNkb3MuYwpAQCAtMjEzLDEwICsyMTMsMTggQEAKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybjsKIAl9Ci0JcHJpbnRrKCIgJXMlZDogPHNvbGFyaXM6Iiwgc3RhdGUtPm5hbWUsIG9yaWdpbik7CisJeworCQljaGFyIHRtcFsxICsgQkRFVk5BTUVfU0laRSArIDEwICsgMTEgKyAxXTsKKworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiICVzJWQ6IDxzb2xhcmlzOiIsIHN0YXRlLT5uYW1lLCBvcmlnaW4pOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKKwl9CiAJaWYgKGxlMzJfdG9fY3B1KHYtPnZfdmVyc2lvbikgIT0gMSkgewotCQlwcmludGsoIiAgY2Fubm90IGhhbmRsZSB2ZXJzaW9uICVkIHZ0b2M+XG4iLAotCQkJbGUzMl90b19jcHUodi0+dl92ZXJzaW9uKSk7CisJCWNoYXIgdG1wWzY0XTsKKworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiICBjYW5ub3QgaGFuZGxlIHZlcnNpb24gJWQgdnRvYz5cbiIsCisJCQkgbGUzMl90b19jcHUodi0+dl92ZXJzaW9uKSk7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCQlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAkJcmV0dXJuOwogCX0KQEAgLTIyNCw5ICsyMzIsMTIgQEAKIAltYXhfbnBhcnRzID0gbGUxNl90b19jcHUgKHYtPnZfbnBhcnRzKSA+IDggPyBTT0xBUklTX1g4Nl9OVU1TTElDRSA6IDg7CiAJZm9yIChpPTA7IGk8bWF4X25wYXJ0cyAmJiBzdGF0ZS0+bmV4dDxzdGF0ZS0+bGltaXQ7IGkrKykgewogCQlzdHJ1Y3Qgc29sYXJpc194ODZfc2xpY2UgKnMgPSAmdi0+dl9zbGljZVtpXTsKKwkJY2hhciB0bXBbMyArIDEwICsgMSArIDFdOworCiAJCWlmIChzLT5zX3NpemUgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlwcmludGsoIiBbcyVkXSIsIGkpOworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiIFtzJWRdIiwgaSk7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCQkvKiBzb2xhcmlzIHBhcnRpdGlvbnMgYXJlIHJlbGF0aXZlIHRvIGN1cnJlbnQgTVMtRE9TCiAJCSAqIG9uZTsgbXVzdCBhZGQgdGhlIG9mZnNldCBvZiB0aGUgY3VycmVudCBwYXJ0aXRpb24gKi8KIAkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgc3RhdGUtPm5leHQrKywKQEAgLTIzNCw3ICsyNDUsNyBAQAogCQkJCSBsZTMyX3RvX2NwdShzLT5zX3NpemUpKTsKIAl9CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7Ci0JcHJpbnRrKCIgPlxuIik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiID5cbiIsIFBBR0VfU0laRSk7CiAjZW5kaWYKIH0KIApAQCAtMjUwLDYgKzI2MSw3IEBACiAJU2VjdG9yIHNlY3Q7CiAJc3RydWN0IGJzZF9kaXNrbGFiZWwgKmw7CiAJc3RydWN0IGJzZF9wYXJ0aXRpb24gKnA7CisJY2hhciB0bXBbNjRdOwogCiAJbCA9IHJlYWRfcGFydF9zZWN0b3Ioc3RhdGUsIG9mZnNldCArIDEsICZzZWN0KTsKIAlpZiAoIWwpCkBAIC0yNTgsNyArMjcwLDkgQEAKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybjsKIAl9Ci0JcHJpbnRrKCIgJXMlZDogPCVzOiIsIHN0YXRlLT5uYW1lLCBvcmlnaW4sIGZsYXZvdXIpOworCisJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAlcyVkOiA8JXM6Iiwgc3RhdGUtPm5hbWUsIG9yaWdpbiwgZmxhdm91cik7CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCB0bXAsIFBBR0VfU0laRSk7CiAKIAlpZiAobGUxNl90b19jcHUobC0+ZF9ucGFydGl0aW9ucykgPCBtYXhfcGFydGl0aW9ucykKIAkJbWF4X3BhcnRpdGlvbnMgPSBsZTE2X3RvX2NwdShsLT5kX25wYXJ0aXRpb25zKTsKQEAgLTI3NSwxNiArMjg5LDE4IEBACiAJCQkvKiBmdWxsIHBhcmVudCBwYXJ0aXRpb24sIHdlIGhhdmUgaXQgYWxyZWFkeSAqLwogCQkJY29udGludWU7CiAJCWlmIChvZmZzZXQgPiBic2Rfc3RhcnQgfHwgb2Zmc2V0K3NpemUgPCBic2Rfc3RhcnQrYnNkX3NpemUpIHsKLQkJCXByaW50aygiYmFkIHN1YnBhcnRpdGlvbiAtIGlnbm9yZWRcbiIpOworCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiYmFkIHN1YnBhcnRpdGlvbiAtIGlnbm9yZWRcbiIsIFBBR0VfU0laRSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBzdGF0ZS0+bmV4dCsrLCBic2Rfc3RhcnQsIGJzZF9zaXplKTsKIAl9CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7Ci0JaWYgKGxlMTZfdG9fY3B1KGwtPmRfbnBhcnRpdGlvbnMpID4gbWF4X3BhcnRpdGlvbnMpCi0JCXByaW50aygiIChpZ25vcmVkICVkIG1vcmUpIiwKLQkJICAgICAgIGxlMTZfdG9fY3B1KGwtPmRfbnBhcnRpdGlvbnMpIC0gbWF4X3BhcnRpdGlvbnMpOwotCXByaW50aygiID5cbiIpOworCWlmIChsZTE2X3RvX2NwdShsLT5kX25wYXJ0aXRpb25zKSA+IG1heF9wYXJ0aXRpb25zKSB7CisJCXNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIgKGlnbm9yZWQgJWQgbW9yZSkiLAorCQkJIGxlMTZfdG9fY3B1KGwtPmRfbnBhcnRpdGlvbnMpIC0gbWF4X3BhcnRpdGlvbnMpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKKwl9CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiID5cbiIsIFBBR0VfU0laRSk7CiB9CiAjZW5kaWYKIApAQCAtMzMzLDcgKzM0OSwxMiBAQAogCQlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAkJcmV0dXJuOwogCX0KLQlwcmludGsoIiAlcyVkOiA8dW5peHdhcmU6Iiwgc3RhdGUtPm5hbWUsIG9yaWdpbik7CisJeworCQljaGFyIHRtcFsxICsgQkRFVk5BTUVfU0laRSArIDEwICsgMTIgKyAxXTsKKworCQlzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiICVzJWQ6IDx1bml4d2FyZToiLCBzdGF0ZS0+bmFtZSwgb3JpZ2luKTsKKwkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCB0bXAsIFBBR0VfU0laRSk7CisJfQogCXAgPSAmbC0+dnRvYy52X3NsaWNlWzFdOwogCS8qIEkgb21pdCB0aGUgMHRoIHNsaWNlIGFzIGl0IGlzIHRoZSBzYW1lIGFzIHdob2xlIGRpc2suICovCiAJd2hpbGUgKHAgLSAmbC0+dnRvYy52X3NsaWNlWzBdIDwgVU5JWFdBUkVfTlVNU0xJQ0UpIHsKQEAgLTM0Nyw3ICszNjgsNyBAQAogCQlwKys7CiAJfQogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwotCXByaW50aygiID5cbiIpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA+XG4iLCBQQUdFX1NJWkUpOwogI2VuZGlmCiB9CiAKQEAgLTM3Niw4ICszOTcsMTAgQEAKIAkgKiB0aGUgbm9ybWFsIGJvb3Qgc2VjdG9yLiAqLwogCWlmIChtc2Rvc19tYWdpY19wcmVzZW50IChkYXRhICsgNTEwKSAmJgogCSAgICBTWVNfSU5EKHApID09IE1JTklYX1BBUlRJVElPTikgeyAvKiBzdWJwYXJ0aXRpb24gdGFibGUgcHJlc2VudCAqLworCQljaGFyIHRtcFsxICsgQkRFVk5BTUVfU0laRSArIDEwICsgOSArIDFdOwogCi0JCXByaW50aygiICVzJWQ6IDxtaW5peDoiLCBzdGF0ZS0+bmFtZSwgb3JpZ2luKTsKKwkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiAlcyVkOiA8bWluaXg6Iiwgc3RhdGUtPm5hbWUsIG9yaWdpbik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUlOSVhfTlJfU1VCUEFSVElUSU9OUzsgaSsrLCBwKyspIHsKIAkJCWlmIChzdGF0ZS0+bmV4dCA9PSBzdGF0ZS0+bGltaXQpCiAJCQkJYnJlYWs7CkBAIC0zODYsNyArNDA5LDcgQEAKIAkJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBzdGF0ZS0+bmV4dCsrLAogCQkJCQkgICAgICBzdGFydF9zZWN0KHApLCBucl9zZWN0cyhwKSk7CiAJCX0KLQkJcHJpbnRrKCIgPlxuIik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA+XG4iLCBQQUdFX1NJWkUpOwogCX0KIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKICNlbmRpZiAvKiBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OICovCkBAIC00MjUsNyArNDQ4LDcgQEAKIAogCWlmIChhaXhfbWFnaWNfcHJlc2VudChzdGF0ZSwgZGF0YSkpIHsKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7Ci0JCXByaW50ayggIiBbQUlYXSIpOworCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW0FJWF0iLCBQQUdFX1NJWkUpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ0Niw3ICs0NjksNyBAQAogCQkJZmIgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKSBkYXRhOwogCQkJaWYgKHNsb3QgPT0gMSAmJiBmYi0+cmVzZXJ2ZWQgJiYgZmItPmZhdHMKIAkJCQkmJiBmYXRfdmFsaWRfbWVkaWEoZmItPm1lZGlhKSkgewotCQkJCXByaW50aygiXG4iKTsKKwkJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJCQkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9IGVsc2UgewpAQCAtNDkxLDIxICs1MTQsMjEgQEAKIAkJCW4gPSBtaW4oc2l6ZSwgbWF4KHNlY3Rvcl9zaXplLCBuKSk7CiAJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBzdGFydCwgbik7CiAKLQkJCXByaW50aygiIDwiKTsKKwkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIiA8IiwgUEFHRV9TSVpFKTsKIAkJCXBhcnNlX2V4dGVuZGVkKHN0YXRlLCBzdGFydCwgc2l6ZSk7Ci0JCQlwcmludGsoIiA+Iik7CisJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgPiIsIFBBR0VfU0laRSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlwdXRfcGFydGl0aW9uKHN0YXRlLCBzbG90LCBzdGFydCwgc2l6ZSk7CiAJCWlmIChTWVNfSU5EKHApID09IExJTlVYX1JBSURfUEFSVElUSU9OKQogCQkJc3RhdGUtPnBhcnRzW3Nsb3RdLmZsYWdzID0gQUREUEFSVF9GTEFHX1JBSUQ7CiAJCWlmIChTWVNfSU5EKHApID09IERNNl9QQVJUSVRJT04pCi0JCQlwcmludGsoIltETV0iKTsKKwkJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIltETV0iLCBQQUdFX1NJWkUpOwogCQlpZiAoU1lTX0lORChwKSA9PSBFWkRfUEFSVElUSU9OKQotCQkJcHJpbnRrKCJbRVpEXSIpOworCQkJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiW0VaRF0iLCBQQUdFX1NJWkUpOwogCX0KIAotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAKIAkvKiBzZWNvbmQgcGFzcyAtIG91dHB1dCBmb3IgZWFjaCBvbiBhIHNlcGFyYXRlIGxpbmUgKi8KIAlwID0gKHN0cnVjdCBwYXJ0aXRpb24gKikgKDB4MWJlICsgZGF0YSk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL29zZi5jIGIvZnMvcGFydGl0aW9ucy9vc2YuYwppbmRleCBmYzIyYjg1Li40OGNlYzdjIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL29zZi5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvb3NmLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAkJCQlsZTMyX3RvX2NwdShwYXJ0aXRpb24tPnBfc2l6ZSkpOwogCQlzbG90Kys7CiAJfQotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL3NnaS5jIGIvZnMvcGFydGl0aW9ucy9zZ2kuYwppbmRleCA0M2IxZGY5Li5lYThhODZkIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL3NnaS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvc2dpLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJfQogCQlzbG90Kys7CiAJfQotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL3N1bi5jIGIvZnMvcGFydGl0aW9ucy9zdW4uYwppbmRleCBhMzI2NjBlLi5iNWI2ZmNmIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL3N1bi5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvc3VuLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCQl9CiAJCXNsb3QrKzsKIAl9Ci0JcHJpbnRrKCJcbiIpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIlxuIiwgUEFHRV9TSVpFKTsKIAlwdXRfZGV2X3NlY3RvcihzZWN0KTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvc3lzdjY4LmMgYi9mcy9wYXJ0aXRpb25zL3N5c3Y2OC5jCmluZGV4IDkwMzBjODYuLjk2MjdjY2YgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvc3lzdjY4LmMKKysrIGIvZnMvcGFydGl0aW9ucy9zeXN2NjguYwpAQCAtNTQsNiArNTQsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmRhdGE7CiAJc3RydWN0IGRrYmxrMCAqYjsKIAlzdHJ1Y3Qgc2xpY2UgKnNsaWNlOworCWNoYXIgdG1wWzY0XTsKIAogCWRhdGEgPSByZWFkX3BhcnRfc2VjdG9yKHN0YXRlLCAwLCAmc2VjdCk7CiAJaWYgKCFkYXRhKQpAQCAtNzMsNyArNzQsOCBAQAogCQlyZXR1cm4gLTE7CiAKIAlzbGljZXMgLT0gMTsgLyogbGFzdCBzbGljZSBpcyB0aGUgd2hvbGUgZGlzayAqLwotCXByaW50aygic3lzVjY4OiAlcyhzJXUpIiwgc3RhdGUtPm5hbWUsIHNsaWNlcyk7CisJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgInN5c1Y2ODogJXMocyV1KSIsIHN0YXRlLT5uYW1lLCBzbGljZXMpOworCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgdG1wLCBQQUdFX1NJWkUpOwogCXNsaWNlID0gKHN0cnVjdCBzbGljZSAqKWRhdGE7CiAJZm9yIChpID0gMDsgaSA8IHNsaWNlczsgaSsrLCBzbGljZSsrKSB7CiAJCWlmIChzbG90ID09IHN0YXRlLT5saW1pdCkKQEAgLTgyLDExICs4NCwxMiBAQAogCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgc2xvdCwKIAkJCQliZTMyX3RvX2NwdShzbGljZS0+Ymxrb2ZmKSwKIAkJCQliZTMyX3RvX2NwdShzbGljZS0+bmJsb2NrcykpOwotCQkJcHJpbnRrKCIocyV1KSIsIGkpOworCQkJc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIihzJXUpIiwgaSk7CisJCQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsIHRtcCwgUEFHRV9TSVpFKTsKIAkJfQogCQlzbG90Kys7CiAJfQotCXByaW50aygiXG4iKTsKKwlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICJcbiIsIFBBR0VfU0laRSk7CiAJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL3VsdHJpeC5jIGIvZnMvcGFydGl0aW9ucy91bHRyaXguYwppbmRleCBkYjllZWYyLi44ZGJhZjlmIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL3VsdHJpeC5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvdWx0cml4LmMKQEAgLTM5LDcgKzM5LDcgQEAKIAkJCQkJICAgICAgbGFiZWwtPnB0X3BhcnRbaV0ucGlfYmxrb2ZmLAogCQkJCQkgICAgICBsYWJlbC0+cHRfcGFydFtpXS5waV9uYmxvY2tzKTsKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7Ci0JCXByaW50ayAoIlxuIik7CisJCXN0cmxjYXQoc3RhdGUtPnBwX2J1ZiwgIlxuIiwgUEFHRV9TSVpFKTsKIAkJcmV0dXJuIDE7CiAJfSBlbHNlIHsKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CmRpZmYgLS1naXQgYS9mcy9wcm9jL01ha2VmaWxlIGIvZnMvcHJvYy9NYWtlZmlsZQppbmRleCAxMWE3YjVjLi4yNzU4ZTJhIDEwMDY0NAotLS0gYS9mcy9wcm9jL01ha2VmaWxlCisrKyBiL2ZzL3Byb2MvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggcHJvYyBmaWxlc3lzdGVtIHJvdXRpbmVzLgogIwogCi1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitvYmoteSAgICs9IHByb2MubwogCiBwcm9jLXkJCQk6PSBub21tdS5vIHRhc2tfbm9tbXUubwogcHJvYy0kKENPTkZJR19NTVUpCTo9IG1tdS5vIHRhc2tfbW11Lm8KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggYWNiN2VmOC4uYTFjNDNlNyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgpAQCAtMTQ4LDE4ICsxNDksMTMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2ZzX3BhdGgoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgYm9vbCByb290KQorc3RhdGljIGludCBnZXRfdGFza19yb290KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHBhdGggKnJvb3QpCiB7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnM7CiAJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CiAKIAl0YXNrX2xvY2sodGFzayk7Ci0JZnMgPSB0YXNrLT5mczsKLQlpZiAoZnMpIHsKLQkJcmVhZF9sb2NrKCZmcy0+bG9jayk7Ci0JCSpwYXRoID0gcm9vdCA/IGZzLT5yb290IDogZnMtPnB3ZDsKLQkJcGF0aF9nZXQocGF0aCk7Ci0JCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7CisJaWYgKHRhc2stPmZzKSB7CisJCWdldF9mc19yb290KHRhc2stPmZzLCByb290KTsKIAkJcmVzdWx0ID0gMDsKIAl9CiAJdGFza191bmxvY2sodGFzayk7CkBAIC0xNzIsNyArMTY4LDEyIEBACiAJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CiAKIAlpZiAodGFzaykgewotCQlyZXN1bHQgPSBnZXRfZnNfcGF0aCh0YXNrLCBwYXRoLCAwKTsKKwkJdGFza19sb2NrKHRhc2spOworCQlpZiAodGFzay0+ZnMpIHsKKwkJCWdldF9mc19wd2QodGFzay0+ZnMsIHBhdGgpOworCQkJcmVzdWx0ID0gMDsKKwkJfQorCQl0YXNrX3VubG9jayh0YXNrKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTg0LDcgKzE4NSw3IEBACiAJaW50IHJlc3VsdCA9IC1FTk9FTlQ7CiAKIAlpZiAodGFzaykgewotCQlyZXN1bHQgPSBnZXRfZnNfcGF0aCh0YXNrLCBwYXRoLCAxKTsKKwkJcmVzdWx0ID0gZ2V0X3Rhc2tfcm9vdCh0YXNrLCBwYXRoKTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtNDI3LDE3ICs0MjgsMTQgQEAKIAogI2VuZGlmCiAKLS8qIFRoZSBiYWRuZXNzIGZyb20gdGhlIE9PTSBraWxsZXIgKi8KLXVuc2lnbmVkIGxvbmcgYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXB0aW1lKTsKIHN0YXRpYyBpbnQgcHJvY19vb21fc2NvcmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBwb2ludHMgPSAwOwotCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CiAKLQlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmdXB0aW1lKTsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWlmIChwaWRfYWxpdmUodGFzaykpCi0JCXBvaW50cyA9IGJhZG5lc3ModGFzaywgdXB0aW1lLnR2X3NlYyk7CisJCXBvaW50cyA9IG9vbV9iYWRuZXNzKHRhc2ssIE5VTEwsIE5VTEwsCisJCQkJCXRvdGFscmFtX3BhZ2VzICsgdG90YWxfc3dhcF9wYWdlcyk7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVsdVxuIiwgcG9pbnRzKTsKIH0KQEAgLTU2MSw5ICs1NTksMTkgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCXJldHVybiBlcnJvcjsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19kZWZfaW5vZGVfb3BlcmF0aW9ucyA9IHsKQEAgLTU4OSw3ICs1OTcsNyBAQAogCQkJCWdldF9tbnRfbnMobnMpOwogCQl9CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlpZiAobnMgJiYgZ2V0X2ZzX3BhdGgodGFzaywgJnJvb3QsIDEpID09IDApCisJCWlmIChucyAmJiBnZXRfdGFza19yb290KHRhc2ssICZyb290KSA9PSAwKQogCQkJcmV0ID0gMDsKIAkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCX0KQEAgLTEwMzksOCArMTA0NywyNCBAQAogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKKwkvKgorCSAqIFdhcm4gdGhhdCAvcHJvYy9waWQvb29tX2FkaiBpcyBkZXByZWNhdGVkLCBzZWUKKwkgKiBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQuCisJICovCisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICIlcyAoJWQpOiAvcHJvYy8lZC9vb21fYWRqIGlzIGRlcHJlY2F0ZWQsICIKKwkJCSJwbGVhc2UgdXNlIC9wcm9jLyVkL29vbV9zY29yZV9hZGogaW5zdGVhZC5cbiIsCisJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCXRhc2tfcGlkX25yKHRhc2spLCB0YXNrX3BpZF9ucih0YXNrKSk7CiAJdGFzay0+c2lnbmFsLT5vb21fYWRqID0gb29tX2FkanVzdDsKLQorCS8qCisJICogU2NhbGUgL3Byb2MvcGlkL29vbV9zY29yZV9hZGogYXBwcm9wcmlhdGVseSBlbnN1cmluZyB0aGF0IGEgbWF4aW11bQorCSAqIHZhbHVlIGlzIGFsd2F5cyBhdHRhaW5hYmxlLgorCSAqLworCWlmICh0YXNrLT5zaWduYWwtPm9vbV9hZGogPT0gT09NX0FESlVTVF9NQVgpCisJCXRhc2stPnNpZ25hbC0+b29tX3Njb3JlX2FkaiA9IE9PTV9TQ09SRV9BREpfTUFYOworCWVsc2UKKwkJdGFzay0+c2lnbmFsLT5vb21fc2NvcmVfYWRqID0gKG9vbV9hZGp1c3QgKiBPT01fU0NPUkVfQURKX01BWCkgLworCQkJCQkJCQktT09NX0RJU0FCTEU7CiAJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOwogCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIApAQCAtMTA1Myw2ICsxMDc3LDgyIEBACiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAorc3RhdGljIHNzaXplX3Qgb29tX3Njb3JlX2Fkal9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWNoYXIgYnVmZmVyW1BST0NfTlVNQlVGXTsKKwlpbnQgb29tX3Njb3JlX2FkaiA9IE9PTV9TQ09SRV9BREpfTUlOOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6ZV90IGxlbjsKKworCWlmICghdGFzaykKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAobG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKSkgeworCQlvb21fc2NvcmVfYWRqID0gdGFzay0+c2lnbmFsLT5vb21fc2NvcmVfYWRqOworCQl1bmxvY2tfdGFza19zaWdoYW5kKHRhc2ssICZmbGFncyk7CisJfQorCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlsZW4gPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWRcbiIsIG9vbV9zY29yZV9hZGopOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBidWZmZXIsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9vbV9zY29yZV9hZGpfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwljaGFyIGJ1ZmZlcltQUk9DX05VTUJVRl07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIG9vbV9zY29yZV9hZGo7CisJaW50IGVycjsKKworCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoY291bnQgPiBzaXplb2YoYnVmZmVyKSAtIDEpCisJCWNvdW50ID0gc2l6ZW9mKGJ1ZmZlcikgLSAxOworCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woc3Ryc3RyaXAoYnVmZmVyKSwgMCwgJm9vbV9zY29yZV9hZGopOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChvb21fc2NvcmVfYWRqIDwgT09NX1NDT1JFX0FESl9NSU4gfHwKKwkJCW9vbV9zY29yZV9hZGogPiBPT01fU0NPUkVfQURKX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0YXNrID0gZ2V0X3Byb2NfdGFzayhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAoIXRhc2spCisJCXJldHVybiAtRVNSQ0g7CisJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpKSB7CisJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisJaWYgKG9vbV9zY29yZV9hZGogPCB0YXNrLT5zaWduYWwtPm9vbV9zY29yZV9hZGogJiYKKwkJCSFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKSB7CisJCXVubG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKTsKKwkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CisKKwl0YXNrLT5zaWduYWwtPm9vbV9zY29yZV9hZGogPSBvb21fc2NvcmVfYWRqOworCS8qCisJICogU2NhbGUgL3Byb2MvcGlkL29vbV9hZGogYXBwcm9wcmlhdGVseSBlbnN1cmluZyB0aGF0IE9PTV9ESVNBQkxFIGlzCisJICogYWx3YXlzIGF0dGFpbmFibGUuCisJICovCisJaWYgKHRhc2stPnNpZ25hbC0+b29tX3Njb3JlX2FkaiA9PSBPT01fU0NPUkVfQURKX01JTikKKwkJdGFzay0+c2lnbmFsLT5vb21fYWRqID0gT09NX0RJU0FCTEU7CisJZWxzZQorCQl0YXNrLT5zaWduYWwtPm9vbV9hZGogPSAob29tX3Njb3JlX2FkaiAqIE9PTV9BREpVU1RfTUFYKSAvCisJCQkJCQkJT09NX1NDT1JFX0FESl9NQVg7CisJdW5sb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCAmZmxhZ3MpOworCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfb29tX3Njb3JlX2Fkal9vcGVyYXRpb25zID0geworCS5yZWFkCQk9IG9vbV9zY29yZV9hZGpfcmVhZCwKKwkud3JpdGUJCT0gb29tX3Njb3JlX2Fkal93cml0ZSwKK307CisKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAjZGVmaW5lIFRNUEJVRkxFTiAyMQogc3RhdGljIHNzaXplX3QgcHJvY19sb2dpbnVpZF9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCkBAIC0xNDI2LDcgKzE1MjYsNyBAQAogCWlmICghdG1wKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXBhdGhuYW1lID0gZF9wYXRoKHBhdGgsIHRtcCwgUEFHRV9TSVpFKTsKKwlwYXRobmFtZSA9IGRfcGF0aF93aXRoX3VucmVhY2hhYmxlKHBhdGgsIHRtcCwgUEFHRV9TSVpFKTsKIAlsZW4gPSBQVFJfRVJSKHBhdGhuYW1lKTsKIAlpZiAoSVNfRVJSKHBhdGhuYW1lKSkKIAkJZ290byBvdXQ7CkBAIC0yNjI1LDYgKzI3MjUsNyBAQAogI2VuZGlmCiAJSU5GKCJvb21fc2NvcmUiLCAgU19JUlVHTywgcHJvY19vb21fc2NvcmUpLAogCVJFRygib29tX2FkaiIsICAgIFNfSVJVR098U19JV1VTUiwgcHJvY19vb21fYWRqdXN0X29wZXJhdGlvbnMpLAorCVJFRygib29tX3Njb3JlX2FkaiIsIFNfSVJVR098U19JV1VTUiwgcHJvY19vb21fc2NvcmVfYWRqX29wZXJhdGlvbnMpLAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAlSRUcoImxvZ2ludWlkIiwgICBTX0lXVVNSfFNfSVJVR08sIHByb2NfbG9naW51aWRfb3BlcmF0aW9ucyksCiAJUkVHKCJzZXNzaW9uaWQiLCAgU19JUlVHTywgcHJvY19zZXNzaW9uaWRfb3BlcmF0aW9ucyksCkBAIC0yOTU5LDYgKzMwNjAsNyBAQAogI2VuZGlmCiAJSU5GKCJvb21fc2NvcmUiLCBTX0lSVUdPLCBwcm9jX29vbV9zY29yZSksCiAJUkVHKCJvb21fYWRqIiwgICBTX0lSVUdPfFNfSVdVU1IsIHByb2Nfb29tX2FkanVzdF9vcGVyYXRpb25zKSwKKwlSRUcoIm9vbV9zY29yZV9hZGoiLCBTX0lSVUdPfFNfSVdVU1IsIHByb2Nfb29tX3Njb3JlX2Fkal9vcGVyYXRpb25zKSwKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJUkVHKCJsb2dpbnVpZCIsICBTX0lXVVNSfFNfSVJVR08sIHByb2NfbG9naW51aWRfb3BlcmF0aW9ucyksCiAJUkVHKCJzZXNzaW9uaWQiLCAgU19JUlVTUiwgcHJvY19zZXNzaW9uaWRfb3BlcmF0aW9ucyksCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IDI3OTE5MDcuLmRkMjlmMDMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KQEAgLTI1OCwxNyArMjU5LDIyIEBACiAKIAllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgaWF0dHIpOwogCWlmIChlcnJvcikKLQkJZ290byBvdXQ7CisJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7CisJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGlhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGlhdHRyLT5pYV9zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXNldGF0dHJfY29weShpbm9kZSwgaWF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQogCWRlLT51aWQgPSBpbm9kZS0+aV91aWQ7CiAJZGUtPmdpZCA9IGlub2RlLT5pX2dpZDsKIAlkZS0+bW9kZSA9IGlub2RlLT5pX21vZGU7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHByb2NfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IGFlYTg1MDIuLjIzNTYxY2QgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTI1LDExICsyNSwxMiBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RhdGljIHZvaWQgcHJvY19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHByb2NfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOwogCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCiAJLyogU3RvcCB0cmFja2luZyBhc3NvY2lhdGVkIHByb2Nlc3NlcyAqLwogCXB1dF9waWQoUFJPQ19JKGlub2RlKS0+cGlkKTsKQEAgLTQwLDcgKzQxLDYgQEAKIAkJcGRlX3B1dChkZSk7CiAJaWYgKFBST0NfSShpbm9kZSktPnN5c2N0bCkKIAkJc3lzY3RsX2hlYWRfcHV0KFBST0NfSShpbm9kZSktPnN5c2N0bCk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwogfQogCiBzdHJ1Y3QgdmZzbW91bnQgKnByb2NfbW50OwpAQCAtOTEsNyArOTEsNyBAQAogCS5hbGxvY19pbm9kZQk9IHByb2NfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBwcm9jX2Rlc3Ryb3lfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gcHJvY19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gcHJvY19ldmljdF9pbm9kZSwKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMgYi9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKaW5kZXggNmZmOTk4MS4uNWJlNDM2ZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCisrKyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwpAQCAtMzI5LDEwICszMjksMTkgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCi0JcmV0dXJuIGVycm9yOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKSB7CisJCWVycm9yID0gdm10cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHByb2Nfc3lzX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ICpzdGF0KQpkaWZmIC0tZ2l0IGEvZnMvcW54NC9pbm9kZS5jIGIvZnMvcW54NC9pbm9kZS5jCmluZGV4IDI3NzU3NWQuLjE2ODI5NzIgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvaW5vZGUuYworKysgYi9mcy9xbng0L2lub2RlLmMKQEAgLTMyMCwxMCArMzIwLDE5IEBACiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewogCXN0cnVjdCBxbng0X2lub2RlX2luZm8gKnFueDRfaW5vZGUgPSBxbng0X2kobWFwcGluZy0+aG9zdCk7CisJaW50IHJldDsKKwogCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAorCXJldCA9IGNvbnRfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAogCQkJCXFueDRfZ2V0X2Jsb2NrLAogCQkJCSZxbng0X2lub2RlLT5tbXVfcHJpdmF0ZSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJbG9mZl90IGlzaXplID0gbWFwcGluZy0+aG9zdC0+aV9zaXplOworCQlpZiAocG9zICsgbGVuID4gaXNpemUpCisJCQl2bXRydW5jYXRlKG1hcHBpbmctPmhvc3QsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogc3RhdGljIHNlY3Rvcl90IHFueDRfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCiB7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCA0MzdkMmNhLi5hYWQxMzE2IDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTEzMiw2ICsxMzIsMjIgQEAKIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhkcV9kYXRhX2xvY2spOwogRVhQT1JUX1NZTUJPTChkcV9kYXRhX2xvY2spOwogCit2b2lkIF9fcXVvdGFfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuYywKKwkJICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisKKwlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJCXByaW50ayhLRVJOX0VSUiAiUXVvdGEgZXJyb3IgKGRldmljZSAlcyk6ICVzOiAiLAorCQkgICAgICAgc2ItPnNfaWQsIGZ1bmMpOworCQl2cHJpbnRrKGZtdCwgYXJncyk7CisJCXByaW50aygiXG4iKTsKKwkJdmFfZW5kKGFyZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woX19xdW90YV9lcnJvcik7CisKICNpZiBkZWZpbmVkKENPTkZJR19RVU9UQV9ERUJVRykgfHwgZGVmaW5lZChDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORykKIHN0YXRpYyBjaGFyICpxdW90YXR5cGVzW10gPSBJTklUUUZOQU1FUzsKICNlbmRpZgpAQCAtNzA1LDExICs3MjEsOCBAQAogCQlyZXR1cm47CiAjaWZkZWYgQ09ORklHX1FVT1RBX0RFQlVHCiAJaWYgKCFhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkgewotCQlwcmludGsoIlZGUzogZHFwdXQ6IHRyeWluZyB0byBmcmVlIGZyZWUgZHF1b3RcbiIpOwotCQlwcmludGsoIlZGUzogZGV2aWNlICVzLCBkcXVvdCBvZiAlcyAlZFxuIiwKLQkJCWRxdW90LT5kcV9zYi0+c19pZCwKLQkJCXF1b3RhdHlwZXNbZHF1b3QtPmRxX3R5cGVdLAotCQkJZHF1b3QtPmRxX2lkKTsKKwkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAidHJ5aW5nIHRvIGZyZWUgZnJlZSBkcXVvdCBvZiAlcyAlZCIsCisJCQkgICAgcXVvdGF0eXBlc1tkcXVvdC0+ZHFfdHlwZV0sIGRxdW90LT5kcV9pZCk7CiAJCUJVRygpOwogCX0KICNlbmRpZgpAQCAtNzMyLDkgKzc0NSw5IEBACiAJCS8qIENvbW1pdCBkcXVvdCBiZWZvcmUgcmVsZWFzaW5nICovCiAJCXJldCA9IGRxdW90LT5kcV9zYi0+ZHFfb3AtPndyaXRlX2RxdW90KGRxdW90KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBjYW5ub3Qgd3JpdGUgcXVvdGEgc3RydWN0dXJlIG9uICIKLQkJCQkiZGV2aWNlICVzIChlcnJvciAlZCkuIFF1b3RhIG1heSBnZXQgb3V0IG9mICIKLQkJCQkic3luYyFcbiIsIGRxdW90LT5kcV9zYi0+c19pZCwgcmV0KTsKKwkJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHdyaXRlIHF1b3RhIHN0cnVjdHVyZSIKKwkJCQkgICAgIiAoZXJyb3IgJWQpLiBRdW90YSBtYXkgZ2V0IG91dCBvZiBzeW5jISIsCisJCQkJICAgIHJldCk7CiAJCQkvKgogCQkJICogV2UgY2xlYXIgZGlydHkgYml0IGFueXdheSwgc28gdGhhdCB3ZSBhdm9pZAogCQkJICogaW5maW5pdGUgbG9vcCBoZXJlCkBAIC04ODUsNyArODk4LDcgQEAKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRXxJX05FVykpCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJY29udGludWU7CiAjaWZkZWYgQ09ORklHX1FVT1RBX0RFQlVHCiAJCWlmICh1bmxpa2VseShpbm9kZV9nZXRfcnN2X3NwYWNlKGlub2RlKSA+IDApKQpAQCAtOTE0LDkgKzkyNyw5IEBACiAKICNpZmRlZiBDT05GSUdfUVVPVEFfREVCVUcKIAlpZiAocmVzZXJ2ZWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTICglcyk6IFdyaXRlcyBoYXBwZW5lZCBiZWZvcmUgcXVvdGEiCi0JCQkiIHdhcyB0dXJuZWQgb24gdGh1cyBxdW90YSBpbmZvcm1hdGlvbiBpcyBwcm9iYWJseSAiCi0JCQkiaW5jb25zaXN0ZW50LiBQbGVhc2UgcnVuIHF1b3RhY2hlY2soOCkuXG4iLCBzYi0+c19pZCk7CisJCXF1b3RhX2Vycm9yKHNiLCAiV3JpdGVzIGhhcHBlbmVkIGJlZm9yZSBxdW90YSB3YXMgdHVybmVkIG9uICIKKwkJCSJ0aHVzIHF1b3RhIGluZm9ybWF0aW9uIGlzIHByb2JhYmx5IGluY29uc2lzdGVudC4gIgorCQkJIlBsZWFzZSBydW4gcXVvdGFjaGVjayg4KSIpOwogCX0KICNlbmRpZgogfQpAQCAtOTQ3LDcgKzk2MCw5IEBACiAJCWlmIChkcXB1dF9ibG9ja3MoZHF1b3QpKSB7CiAjaWZkZWYgQ09ORklHX1FVT1RBX0RFQlVHCiAJCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgIT0gMSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IEFkZGluZyBkcXVvdCB3aXRoIGRxX2NvdW50ICVkIHRvIGRpc3Bvc2UgbGlzdC5cbiIsIGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKTsKKwkJCQlxdW90YV9lcnJvcihpbm9kZS0+aV9zYiwgIkFkZGluZyBkcXVvdCB3aXRoICIKKwkJCQkJICAgICJkcV9jb3VudCAlZCB0byBkaXNwb3NlIGxpc3QiLAorCQkJCQkgICAgYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpOwogI2VuZGlmCiAJCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CiAJCQkvKiBBcyBkcXVvdCBtdXN0IGhhdmUgY3VycmVudGx5IHVzZXJzIGl0IGNhbid0IGJlIG9uCkBAIC05ODYsNiArMTAwMSw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IHJlc2VydmVkID0gMDsKIAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CkBAIC05OTUsMTAgKzEwMTEsMjAgQEAKIAkJICogIG9ubHkgcXVvdGEgcG9pbnRlcnMgYW5kIHRoZXNlIGhhdmUgc2VwYXJhdGUgbG9ja2luZwogCQkgKiAgKGRxcHRyX3NlbSkuCiAJCSAqLwotCQlpZiAoIUlTX05PUVVPVEEoaW5vZGUpKQorCQlpZiAoIUlTX05PUVVPVEEoaW5vZGUpKSB7CisJCQlpZiAodW5saWtlbHkoaW5vZGVfZ2V0X3Jzdl9zcGFjZShpbm9kZSkgPiAwKSkKKwkJCQlyZXNlcnZlZCA9IDE7CiAJCQlyZW1vdmVfaW5vZGVfZHF1b3RfcmVmKGlub2RlLCB0eXBlLCB0b2ZyZWVfaGVhZCk7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOworI2lmZGVmIENPTkZJR19RVU9UQV9ERUJVRworCWlmIChyZXNlcnZlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlMgKCVzKTogV3JpdGVzIGhhcHBlbmVkIGFmdGVyIHF1b3RhIgorCQkJIiB3YXMgZGlzYWJsZWQgdGh1cyBxdW90YSBpbmZvcm1hdGlvbiBpcyBwcm9iYWJseSAiCisJCQkiaW5jb25zaXN0ZW50LiBQbGVhc2UgcnVuIHF1b3RhY2hlY2soOCkuXG4iLCBzYi0+c19pZCk7CisJfQorI2VuZGlmCiB9CiAKIC8qIEdhdGhlciBhbGwgcmVmZXJlbmNlcyBmcm9tIGlub2RlcyBhbmQgZHJvcCB0aGVtICovCkBAIC0xMzA0LDYgKzEzMzAsMTUgQEAKIAlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwogfQogCitzdGF0aWMgaW50IGRxdW90X2FjdGl2ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNiX2FueV9xdW90YV9sb2FkZWQoc2IpICYgfnNiX2FueV9xdW90YV9zdXNwZW5kZWQoc2IpOworfQorCiAvKgogICogSW5pdGlhbGl6ZSBxdW90YSBwb2ludGVycyBpbiBpbm9kZQogICoKQEAgLTEzMjMsNyArMTM1OCw3IEBACiAKIAkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKCFzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSB8fCBJU19OT1FVT1RBKGlub2RlKSkKKwlpZiAoIWRxdW90X2FjdGl2ZShpbm9kZSkpCiAJCXJldHVybjsKIAogCS8qIEZpcnN0IGdldCByZWZlcmVuY2VzIHRvIHN0cnVjdHVyZXMgd2UgbWlnaHQgbmVlZC4gKi8KQEAgLTE1MDcsNyArMTU0Miw3IEBACiAJICogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCiAJICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4CiAJICovCi0JaWYgKCFzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSB8fCBJU19OT1FVT1RBKGlub2RlKSkgeworCWlmICghZHF1b3RfYWN0aXZlKGlub2RlKSkgewogCQlpbm9kZV9pbmNyX3NwYWNlKGlub2RlLCBudW1iZXIsIHJlc2VydmUpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTU5LDcgKzE1OTQsNyBAQAogCiAJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCiAgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmICghc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgfHwgSVNfTk9RVU9UQShpbm9kZSkpCisJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCiAJCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CkBAIC0xNTk2LDcgKzE2MzEsNyBAQAogewogCWludCBjbnQ7CiAKLQlpZiAoIXNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpIHx8IElTX05PUVVPVEEoaW5vZGUpKSB7CisJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKSB7CiAJCWlub2RlX2NsYWltX3Jzdl9zcGFjZShpbm9kZSwgbnVtYmVyKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTYyOSw3ICsxNjY0LDcgQEAKIAogCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQogICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoIXNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpIHx8IElTX05PUVVPVEEoaW5vZGUpKSB7CisJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKSB7CiAJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7CiAJCXJldHVybjsKIAl9CkBAIC0xNjY3LDcgKzE3MDIsNyBAQAogCiAJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCiAgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmICghc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgfHwgSVNfTk9RVU9UQShpbm9kZSkpCisJaWYgKCFkcXVvdF9hY3RpdmUoaW5vZGUpKQogCQlyZXR1cm47CiAKIAlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKQEAgLTE3OTAsNyArMTgyNSw3IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCWludCByZXQ7CiAKLQlpZiAoIXNiX2FueV9xdW90YV9hY3RpdmUoc2IpIHx8IElTX05PUVVPVEEoaW5vZGUpKQorCWlmICghZHF1b3RfYWN0aXZlKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpCkBAIC0xOTU3LDcgKzE5OTIsNyBAQAogCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwKIAkJCQkJCSAgICAgMCk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOwotCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKKwkJCQltYXJrX2lub2RlX2RpcnR5X3N5bmModG9wdXRpbm9kZVtjbnRdKTsKIAkJCX0KIAkJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCQl9CkBAIC0yMjcwLDcgKzIzMDUsNyBAQAogCW1lbXNldChkaSwgMCwgc2l6ZW9mKCpkaSkpOwogCWRpLT5kX3ZlcnNpb24gPSBGU19EUVVPVF9WRVJTSU9OOwogCWRpLT5kX2ZsYWdzID0gZHF1b3QtPmRxX3R5cGUgPT0gVVNSUVVPVEEgPwotCQkJWEZTX1VTRVJfUVVPVEEgOiBYRlNfR1JPVVBfUVVPVEE7CisJCQlGU19VU0VSX1FVT1RBIDogRlNfR1JPVVBfUVVPVEE7CiAJZGktPmRfaWQgPSBkcXVvdC0+ZHFfaWQ7CiAKIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV90cmVlLmMgYi9mcy9xdW90YS9xdW90YV90cmVlLmMKaW5kZXggMjRmMDM0MC4uOWU0ODg3NCAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdHJlZS5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3RyZWUuYwpAQCAtNjUsOCArNjUsNyBAQAogCXJldCA9IHNiLT5zX29wLT5xdW90YV93cml0ZShzYiwgaW5mby0+ZHFpX3R5cGUsIGJ1ZiwKIAkgICAgICAgaW5mby0+ZHFpX3VzYWJsZV9icywgYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyk7CiAJaWYgKHJldCAhPSBpbmZvLT5kcWlfdXNhYmxlX2JzKSB7Ci0JCXFfd2FybihLRVJOX1dBUk5JTkcgIlZGUzogZHF1b3RhIHdyaXRlIGZhaWxlZCBvbiAiCi0JCQkiZGV2ICVzXG4iLCBzYi0+c19pZCk7CisJCXF1b3RhX2Vycm9yKHNiLCAiZHF1b3RhIHdyaXRlIGZhaWxlZCIpOwogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSAtRUlPOwogCX0KQEAgLTE2MCw5ICsxNTksOCBAQAogCWRoLT5kcWRoX25leHRfZnJlZSA9IGRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOwogCS8qIE5vIG1hdHRlciB3aGV0aGVyIHdyaXRlIHN1Y2NlZWRzIGJsb2NrIGlzIG91dCBvZiBsaXN0ICovCiAJaWYgKHdyaXRlX2JsayhpbmZvLCBibGssIGJ1ZikgPCAwKQotCQlxX3dhcm4oS0VSTl9FUlIKLQkJICAgICAgICJWRlM6IENhbid0IHdyaXRlIGJsb2NrICgldSkgd2l0aCBmcmVlIGVudHJpZXMuXG4iLAotCQkgICAgICAgYmxrKTsKKwkJcXVvdGFfZXJyb3IoaW5mby0+ZHFpX3NiLCAiQ2FuJ3Qgd3JpdGUgYmxvY2sgKCV1KSAiCisJCQkgICAgIndpdGggZnJlZSBlbnRyaWVzIiwgYmxrKTsKIAlyZXR1cm4gMDsKIG91dF9idWY6CiAJa2ZyZWUodG1wYnVmKTsKQEAgLTI1Miw5ICsyNTAsOCBAQAogCWlmIChsZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSArIDEgPj0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7CiAJCSplcnIgPSByZW1vdmVfZnJlZV9kcWVudHJ5KGluZm8sIGJ1ZiwgYmxrKTsKIAkJaWYgKCplcnIgPCAwKSB7Ci0JCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogZmluZF9mcmVlX2RxZW50cnkoKTogQ2FuJ3QgIgotCQkJICAgICAgICJyZW1vdmUgYmxvY2sgKCV1KSBmcm9tIGVudHJ5IGZyZWUgbGlzdC5cbiIsCi0JCQkgICAgICAgYmxrKTsKKwkJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHJlbW92ZSBibG9jayAoJXUpICIKKwkJCQkgICAgImZyb20gZW50cnkgZnJlZSBsaXN0IiwgYmxrKTsKIAkJCWdvdG8gb3V0X2J1ZjsKIAkJfQogCX0KQEAgLTI2OCwxNiArMjY1LDE1IEBACiAJfQogI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKIAlpZiAoaSA9PSBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IERhdGEgYmxvY2sgZnVsbCAiCi0JCQkJImJ1dCBpdCBzaG91bGRuJ3QuXG4iKTsKKwkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiRGF0YSBibG9jayBmdWxsIGJ1dCBpdCBzaG91bGRuJ3QiKTsKIAkJKmVyciA9IC1FSU87CiAJCWdvdG8gb3V0X2J1ZjsKIAl9CiAjZW5kaWYKIAkqZXJyID0gd3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKTsKIAlpZiAoKmVyciA8IDApIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IENhbid0IHdyaXRlIHF1b3RhICIKLQkJCQkiZGF0YSBibG9jayAldS5cbiIsIGJsayk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHdyaXRlIHF1b3RhIGRhdGEgYmxvY2sgJXUiLAorCQkJICAgIGJsayk7CiAJCWdvdG8gb3V0X2J1ZjsKIAl9CiAJZHF1b3QtPmRxX29mZiA9IChibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSArCkBAIC0zMTEsOCArMzA3LDggQEAKIAl9IGVsc2UgewogCQlyZXQgPSByZWFkX2JsayhpbmZvLCAqdHJlZWJsaywgYnVmKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXFfd2FybihLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHRyZWUgcXVvdGEgYmxvY2sgIgotCQkJCQkiJXUuXG4iLCAqdHJlZWJsayk7CisJCQlxdW90YV9lcnJvcihkcXVvdC0+ZHFfc2IsICJDYW4ndCByZWFkIHRyZWUgcXVvdGEgIgorCQkJCSAgICAiYmxvY2sgJXUiLCAqdHJlZWJsayk7CiAJCQlnb3RvIG91dF9idWY7CiAJCX0KIAl9CkBAIC0zMjMsOSArMzE5LDkgQEAKIAlpZiAoZGVwdGggPT0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkgewogI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKIAkJaWYgKG5ld2JsaykgewotCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEluc2VydGluZyBhbHJlYWR5IHByZXNlbnQgcXVvdGEgIgotCQkJCQkiZW50cnkgKGJsb2NrICV1KS5cbiIsCi0JCQkgICAgICAgbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLAorCQkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiSW5zZXJ0aW5nIGFscmVhZHkgcHJlc2VudCAiCisJCQkJICAgICJxdW90YSBlbnRyeSAoYmxvY2sgJXUpIiwKKwkJCQkgICAgbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLAogCQkJCQkJZHF1b3QtPmRxX2lkLCBkZXB0aCldKSk7CiAJCQlyZXQgPSAtRUlPOwogCQkJZ290byBvdXRfYnVmOwpAQCAtMzczLDggKzM2OSw4IEBACiAJaWYgKCFkcXVvdC0+ZHFfb2ZmKSB7CiAJCXJldCA9IGRxX2luc2VydF90cmVlKGluZm8sIGRxdW90KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXFfd2FybihLRVJOX0VSUiAiVkZTOiBFcnJvciAlemQgb2NjdXJyZWQgd2hpbGUgIgotCQkJCQkiY3JlYXRpbmcgcXVvdGEuXG4iLCByZXQpOworCQkJcXVvdGFfZXJyb3Ioc2IsICJFcnJvciAlemQgb2NjdXJyZWQgd2hpbGUgY3JlYXRpbmcgIgorCQkJCSAgICAicXVvdGEiLCByZXQpOwogCQkJa2ZyZWUoZGRxdW90KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTM4NSw4ICszODEsNyBAQAogCXJldCA9IHNiLT5zX29wLT5xdW90YV93cml0ZShzYiwgdHlwZSwgZGRxdW90LCBpbmZvLT5kcWlfZW50cnlfc2l6ZSwKIAkJCQkgICAgZHF1b3QtPmRxX29mZik7CiAJaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgewotCQlxX3dhcm4oS0VSTl9XQVJOSU5HICJWRlM6IGRxdW90YSB3cml0ZSBmYWlsZWQgb24gZGV2ICVzXG4iLAotCQkgICAgICAgc2ItPnNfaWQpOworCQlxdW90YV9lcnJvcihzYiwgImRxdW90YSB3cml0ZSBmYWlsZWQiKTsKIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gLUVOT1NQQzsKIAl9IGVsc2UgewpAQCAtNDEwLDE0ICs0MDUsMTUgQEAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAJaWYgKGRxdW90LT5kcV9vZmYgPj4gaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzICE9IGJsaykgewotCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogUXVvdGEgc3RydWN0dXJlIGhhcyBvZmZzZXQgdG8gb3RoZXIgIgotCQkgICJibG9jayAoJXUpIHRoYW4gaXQgc2hvdWxkICgldSkuXG4iLCBibGssCi0JCSAgKHVpbnQpKGRxdW90LT5kcV9vZmYgPj4gaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIlF1b3RhIHN0cnVjdHVyZSBoYXMgb2Zmc2V0IHRvICIKKwkJCSJvdGhlciBibG9jayAoJXUpIHRoYW4gaXQgc2hvdWxkICgldSkiLCBibGssCisJCQkodWludCkoZHF1b3QtPmRxX29mZiA+PiBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpKTsKIAkJZ290byBvdXRfYnVmOwogCX0KIAlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldVxuIiwgYmxrKTsKKwkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiQ2FuJ3QgcmVhZCBxdW90YSBkYXRhIGJsb2NrICV1IiwKKwkJCSAgICBibGspOwogCQlnb3RvIG91dF9idWY7CiAJfQogCWRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CkBAIC00MjcsOCArNDIzLDggQEAKIAkJaWYgKHJldCA+PSAwKQogCQkJcmV0ID0gcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCBibGspOwogCQlpZiAocmV0IDwgMCkgewotCQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IG1vdmUgcXVvdGEgZGF0YSBibG9jayAoJXUpICIKLQkJCSAgInRvIGZyZWUgbGlzdC5cbiIsIGJsayk7CisJCQlxdW90YV9lcnJvcihkcXVvdC0+ZHFfc2IsICJDYW4ndCBtb3ZlIHF1b3RhIGRhdGEgYmxvY2sgIgorCQkJCSAgICAiKCV1KSB0byBmcmVlIGxpc3QiLCBibGspOwogCQkJZ290byBvdXRfYnVmOwogCQl9CiAJfSBlbHNlIHsKQEAgLTQ0MCwxNSArNDM2LDE1IEBACiAJCQkvKiBJbnNlcnQgd2lsbCB3cml0ZSBibG9jayBpdHNlbGYgKi8KIAkJCXJldCA9IGluc2VydF9mcmVlX2RxZW50cnkoaW5mbywgYnVmLCBibGspOwogCQkJaWYgKHJldCA8IDApIHsKLQkJCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogQ2FuJ3QgaW5zZXJ0IHF1b3RhIGRhdGEgIgotCQkJCSAgICAgICAiYmxvY2sgKCV1KSB0byBmcmVlIGVudHJ5IGxpc3QuXG4iLCBibGspOworCQkJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IGluc2VydCBxdW90YSAiCisJCQkJICAgICJkYXRhIGJsb2NrICgldSkgdG8gZnJlZSBlbnRyeSBsaXN0IiwgYmxrKTsKIAkJCQlnb3RvIG91dF9idWY7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOwogCQkJaWYgKHJldCA8IDApIHsKLQkJCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogQ2FuJ3Qgd3JpdGUgcXVvdGEgZGF0YSAiCi0JCQkJICAiYmxvY2sgJXVcbiIsIGJsayk7CisJCQkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiQ2FuJ3Qgd3JpdGUgcXVvdGEgIgorCQkJCQkgICAgImRhdGEgYmxvY2sgJXUiLCBibGspOwogCQkJCWdvdG8gb3V0X2J1ZjsKIAkJCX0KIAkJfQpAQCAtNDcyLDcgKzQ2OCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJldCA9IHJlYWRfYmxrKGluZm8sICpibGssIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldVxuIiwgKmJsayk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHJlYWQgcXVvdGEgZGF0YSAiCisJCQkgICAgImJsb2NrICV1IiwgYmxrKTsKIAkJZ290byBvdXRfYnVmOwogCX0KIAluZXdibGsgPSBsZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSk7CkBAIC00OTYsOCArNDkzLDggQEAKIAkJfSBlbHNlIHsKIAkJCXJldCA9IHdyaXRlX2JsayhpbmZvLCAqYmxrLCBidWYpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IHdyaXRlIHF1b3RhIHRyZWUgIgotCQkJCSAgImJsb2NrICV1LlxuIiwgKmJsayk7CisJCQkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiQ2FuJ3Qgd3JpdGUgcXVvdGEgIgorCQkJCQkgICAgInRyZWUgYmxvY2sgJXUiLCBibGspOwogCQl9CiAJfQogb3V0X2J1ZjoKQEAgLTUyOSw3ICs1MjYsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgdHJlZSBibG9jayAldS5cbiIsIGJsayk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHJlYWQgcXVvdGEgdHJlZSAiCisJCQkgICAgImJsb2NrICV1IiwgYmxrKTsKIAkJZ290byBvdXRfYnVmOwogCX0KIAlkZHF1b3QgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CkBAIC01MzksOCArNTM3LDggQEAKIAkJZGRxdW90ICs9IGluZm8tPmRxaV9lbnRyeV9zaXplOwogCX0KIAlpZiAoaSA9PSBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IFF1b3RhIGZvciBpZCAldSByZWZlcmVuY2VkICIKLQkJICAiYnV0IG5vdCBwcmVzZW50LlxuIiwgZHF1b3QtPmRxX2lkKTsKKwkJcXVvdGFfZXJyb3IoZHF1b3QtPmRxX3NiLCAiUXVvdGEgZm9yIGlkICV1IHJlZmVyZW5jZWQgIgorCQkJICAgICJidXQgbm90IHByZXNlbnQiLCBkcXVvdC0+ZHFfaWQpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dF9idWY7CiAJfSBlbHNlIHsKQEAgLTU2NCw3ICs1NjIsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJcV93YXJuKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgdHJlZSBibG9jayAldS5cbiIsIGJsayk7CisJCXF1b3RhX2Vycm9yKGRxdW90LT5kcV9zYiwgIkNhbid0IHJlYWQgcXVvdGEgdHJlZSBibG9jayAldSIsCisJCQkgICAgYmxrKTsKIAkJZ290byBvdXRfYnVmOwogCX0KIAlyZXQgPSAwOwpAQCAtNTk4LDcgKzU5Nyw3IEBACiAjaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQogCS8qIEludmFsaWRhdGVkIHF1b3RhPyAqLwogCWlmICghc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IFF1b3RhIGludmFsaWRhdGVkIHdoaWxlIHJlYWRpbmchXG4iKTsKKwkJcXVvdGFfZXJyb3Ioc2IsICJRdW90YSBpbnZhbGlkYXRlZCB3aGlsZSByZWFkaW5nISIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAjZW5kaWYKQEAgLTYwNyw4ICs2MDYsOCBAQAogCQlvZmZzZXQgPSBmaW5kX2RxZW50cnkoaW5mbywgZHF1b3QpOwogCQlpZiAob2Zmc2V0IDw9IDApIHsJLyogRW50cnkgbm90IHByZXNlbnQ/ICovCiAJCQlpZiAob2Zmc2V0IDwgMCkKLQkJCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSAiCi0JCQkJICAic3RydWN0dXJlIGZvciBpZCAldS5cbiIsIGRxdW90LT5kcV9pZCk7CisJCQkJcXVvdGFfZXJyb3Ioc2IsICJDYW4ndCByZWFkIHF1b3RhIHN0cnVjdHVyZSAiCisJCQkJCSAgICAiZm9yIGlkICV1IiwgZHF1b3QtPmRxX2lkKTsKIAkJCWRxdW90LT5kcV9vZmYgPSAwOwogCQkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCQkJbWVtc2V0KCZkcXVvdC0+ZHFfZHFiLCAwLCBzaXplb2Yoc3RydWN0IG1lbV9kcWJsaykpOwpAQCAtNjI1LDggKzYyNCw4IEBACiAJaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgewogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSAtRUlPOwotCQlxX3dhcm4oS0VSTl9FUlIgIlZGUzogRXJyb3Igd2hpbGUgcmVhZGluZyBxdW90YSAiCi0JCQkJInN0cnVjdHVyZSBmb3IgaWQgJXUuXG4iLCBkcXVvdC0+ZHFfaWQpOworCQlxdW90YV9lcnJvcihzYiwgIkVycm9yIHdoaWxlIHJlYWRpbmcgcXVvdGEgc3RydWN0dXJlIGZvciBpZCAldSIsCisJCQkgICAgZHF1b3QtPmRxX2lkKTsKIAkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCQltZW1zZXQoJmRxdW90LT5kcV9kcWIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2RxYmxrKSk7CiAJCWtmcmVlKGRkcXVvdCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV90cmVlLmggYi9mcy9xdW90YS9xdW90YV90cmVlLmgKaW5kZXggY2NjM2U3MS4uYTFhYjhkYiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdHJlZS5oCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3RyZWUuaApAQCAtMjIsMTAgKzIyLDQgQEAKIAogI2RlZmluZSBRVF9UUkVFT0ZGCTEJCS8qIE9mZnNldCBvZiB0cmVlIGluIGZpbGUgaW4gYmxvY2tzICovCiAKLSNkZWZpbmUgcV93YXJuKGZtdCwgYXJncy4uLikgXAotZG8geyBcCi0JaWYgKHByaW50a19yYXRlbGltaXQoKSkgXAotCQlwcmludGsoZm10LCAjIyBhcmdzKTsgXAotfSB3aGlsZSgwKQotCiAjZW5kaWYgLyogX0xJTlVYX1FVT1RBSU9fVFJFRV9IICovCmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92MS5jIGIvZnMvcXVvdGEvcXVvdGFfdjEuYwppbmRleCA0YWYzNDRjLi4zNGIzN2E2IDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92MS5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YxLmMKQEAgLTk1LDggKzk1LDcgQEAKIAkJCShjaGFyICopJmRxYmxrLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLAogCQkJdjFfZHFvZmYoZHF1b3QtPmRxX2lkKSk7CiAJaWYgKHJldCAhPSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUzogZHF1b3RhIHdyaXRlIGZhaWxlZCBvbiBkZXYgJXNcbiIsCi0JCQlkcXVvdC0+ZHFfc2ItPnNfaWQpOworCQlxdW90YV9lcnJvcihkcXVvdC0+ZHFfc2IsICJkcXVvdGEgd3JpdGUgZmFpbGVkIik7CiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjIuYyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKaW5kZXggMTM1MjA2YS4uNjU0NDRkMiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjIuYworKysgYi9mcy9xdW90YS9xdW90YV92Mi5jCkBAIC02Myw5ICs2Myw4IEBACiAJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKWRxaGVhZCwKIAkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgMCk7CiAJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSkgewotCQlxX3dhcm4oS0VSTl9XQVJOSU5HICJxdW90YV92MjogRmFpbGVkIGhlYWRlciByZWFkOiIKLQkJICAgICAgICIgZXhwZWN0ZWQ9JXpkIGdvdD0lemRcbiIsCi0JCQlzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCBzaXplKTsKKwkJcXVvdGFfZXJyb3Ioc2IsICJGYWlsZWQgaGVhZGVyIHJlYWQ6IGV4cGVjdGVkPSV6ZCBnb3Q9JXpkIiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCBzaXplKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtMTA2LDggKzEwNSw3IEBACiAJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7CiAJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHsKLQkJcV93YXJuKEtFUk5fV0FSTklORyAicXVvdGFfdjI6IENhbid0IHJlYWQgaW5mbyBzdHJ1Y3R1cmUgb24gZGV2aWNlICVzLlxuIiwKLQkJCXNiLT5zX2lkKTsKKwkJcXVvdGFfZXJyb3Ioc2IsICJDYW4ndCByZWFkIGluZm8gc3RydWN0dXJlIik7CiAJCXJldHVybiAtMTsKIAl9CiAJaW5mby0+ZHFpX3ByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyksIEdGUF9OT0ZTKTsKQEAgLTE2Nyw4ICsxNjUsNyBAQAogCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopJmRpbmZvLAogCSAgICAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSwgVjJfRFFJTkZPT0ZGKTsKIAlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSkgewotCQlxX3dhcm4oS0VSTl9XQVJOSU5HICJDYW4ndCB3cml0ZSBpbmZvIHN0cnVjdHVyZSBvbiBkZXZpY2UgJXMuXG4iLAotCQkJc2ItPnNfaWQpOworCQlxdW90YV9lcnJvcihzYiwgIkNhbid0IHdyaXRlIGluZm8gc3RydWN0dXJlIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9yYW1mcy9maWxlLW5vbW11LmMgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKaW5kZXggZDUzMmMyMC4uOWVlYWQyYyAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jCisrKyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwpAQCAtMTQ2LDkgKzE0Niw4IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHNpbXBsZV9zZXRzaXplKGlub2RlLCBuZXdzaXplKTsKLQotCXJldHVybiByZXQ7CisJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgbmV3c2l6ZSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4Myw3ICsxODIsNyBAQAogCQl9CiAJfQogCi0JZ2VuZXJpY19zZXRhdHRyKGlub2RlLCBpYSk7CisJc2V0YXR0cl9jb3B5KGlub2RlLCBpYSk7CiAgb3V0OgogCWlhLT5pYV92YWxpZCA9IG9sZF9pYV92YWxpZDsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvcmVhZF93cml0ZS5jIGIvZnMvcmVhZF93cml0ZS5jCmluZGV4IDljMDQ4NTIuLjc0ZTM2NTggMTAwNjQ0Ci0tLSBhL2ZzL3JlYWRfd3JpdGUuYworKysgYi9mcy9yZWFkX3dyaXRlLmMKQEAgLTMxMSw3ICszMTEsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBkb19zeW5jX3JlYWQoZmlsZSwgYnVmLCBjb3VudCwgcG9zKTsKIAkJaWYgKHJldCA+IDApIHsKLQkJCWZzbm90aWZ5X2FjY2VzcyhmaWxlLT5mX3BhdGguZGVudHJ5KTsKKwkJCWZzbm90aWZ5X2FjY2VzcyhmaWxlKTsKIAkJCWFkZF9yY2hhcihjdXJyZW50LCByZXQpOwogCQl9CiAJCWluY19zeXNjcihjdXJyZW50KTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBkb19zeW5jX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBvcyk7CiAJCWlmIChyZXQgPiAwKSB7Ci0JCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJCQlmc25vdGlmeV9tb2RpZnkoZmlsZSk7CiAJCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsKIAkJfQogCQlpbmNfc3lzY3coY3VycmVudCk7CkBAIC02NzUsOSArNjc1LDkgQEAKIAkJa2ZyZWUoaW92KTsKIAlpZiAoKHJldCArICh0eXBlID09IFJFQUQpKSA+IDApIHsKIAkJaWYgKHR5cGUgPT0gUkVBRCkKLQkJCWZzbm90aWZ5X2FjY2VzcyhmaWxlLT5mX3BhdGguZGVudHJ5KTsKKwkJCWZzbm90aWZ5X2FjY2VzcyhmaWxlKTsKIAkJZWxzZQotCQkJZnNub3RpZnlfbW9kaWZ5KGZpbGUtPmZfcGF0aC5kZW50cnkpOworCQkJZnNub3RpZnlfbW9kaWZ5KGZpbGUpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvcmVhZGRpci5jIGIvZnMvcmVhZGRpci5jCmluZGV4IDc3MjM0MDEuLjM1NmY3MTUgMTAwNjQ0Ci0tLSBhL2ZzL3JlYWRkaXIuYworKysgYi9mcy9yZWFkZGlyLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC01NCw3ICs1NSw2IEBACiAgKiBhbnl3YXkuIFRodXMgdGhlIHNwZWNpYWwgImZpbGxvbmVkaXIoKSIgZnVuY3Rpb24gZm9yIHRoYXQKICAqIGNhc2UgKHRoZSBsb3ctbGV2ZWwgaGFuZGxlcnMgZG9uJ3QgbmVlZCB0byBjYXJlIGFib3V0IHRoaXMpLgogICovCi0jZGVmaW5lIE5BTUVfT0ZGU0VUKGRlKSAoKGludCkgKChkZSktPmRfbmFtZSAtIChjaGFyIF9fdXNlciAqKSAoZGUpKSkKIAogI2lmZGVmIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAKQEAgLTE1Miw3ICsxNTIsOCBAQAogCXN0cnVjdCBsaW51eF9kaXJlbnQgX191c2VyICogZGlyZW50OwogCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjayAqIGJ1ZiA9IChzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2sgKikgX19idWY7CiAJdW5zaWduZWQgbG9uZyBkX2lubzsKLQlpbnQgcmVjbGVuID0gQUxJR04oTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDIsIHNpemVvZihsb25nKSk7CisJaW50IHJlY2xlbiA9IEFMSUdOKG9mZnNldG9mKHN0cnVjdCBsaW51eF9kaXJlbnQsIGRfbmFtZSkgKyBuYW1sZW4gKyAyLAorCQlzaXplb2YobG9uZykpOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KIAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKQEAgLTIzNyw3ICsyMzgsOCBAQAogewogCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCBfX3VzZXIgKmRpcmVudDsKIAlzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2s2NCAqIGJ1ZiA9IChzdHJ1Y3QgZ2V0ZGVudHNfY2FsbGJhY2s2NCAqKSBfX2J1ZjsKLQlpbnQgcmVjbGVuID0gQUxJR04oTkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDEsIHNpemVvZih1NjQpKTsKKwlpbnQgcmVjbGVuID0gQUxJR04ob2Zmc2V0b2Yoc3RydWN0IGxpbnV4X2RpcmVudDY0LCBkX25hbWUpICsgbmFtbGVuICsgMSwKKwkJc2l6ZW9mKHU2NCkpOwogCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8KIAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2ZpbGUuYyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwppbmRleCBiODJjZGQ4Li42ODQ2MzcxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maWxlLmMKKysrIGIvZnMvcmVpc2VyZnMvZmlsZS5jCkBAIC0zOCwxOSArMzgsMjMgQEAKIAogCUJVR19PTighU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CiAKLQkvKiBmYXN0IG91dCBmb3Igd2hlbiBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgKi8KLQlpZiAoKGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkgPiAxIHx8Ci0JICAgICAhKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9wYWNrX29uX2Nsb3NlX21hc2spIHx8Ci0JICAgICAhdGFpbF9oYXNfdG9fYmVfcGFja2VkKGlub2RlKSkgJiYKLQkgICAgUkVJU0VSRlNfSShpbm9kZSktPmlfcHJlYWxsb2NfY291bnQgPD0gMCkgeworICAgICAgICBpZiAoYXRvbWljX2FkZF91bmxlc3MoJlJFSVNFUkZTX0koaW5vZGUpLT5vcGVuZXJzLCAtMSwgMSkpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOworCisgICAgICAgIGlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmUkVJU0VSRlNfSShpbm9kZSktPm9wZW5lcnMpKSB7CisJCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQltdXRleF9sb2NrKCYoUkVJU0VSRlNfSShpbm9kZSktPmlfbW1hcCkpOwotCWlmIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfZXZlcl9tYXBwZWQpCi0JCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICY9IH5pX3BhY2tfb25fY2xvc2VfbWFzazsKKwkvKiBmYXN0IG91dCBmb3Igd2hlbiBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgKi8KKwlpZiAoKCEoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX3BhY2tfb25fY2xvc2VfbWFzaykgfHwKKwkgICAgICF0YWlsX2hhc190b19iZV9wYWNrZWQoaW5vZGUpKSAmJgorCSAgICBSRUlTRVJGU19JKGlub2RlKS0+aV9wcmVhbGxvY19jb3VudCA8PSAwKSB7CisJCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOworCQlyZXR1cm4gMDsKKwl9CiAKIAlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAkvKiBmcmVlaW5nIHByZWFsbG9jYXRpb24gb25seSBpbnZvbHZlcyByZWxvZ2dpbmcgYmxvY2tzIHRoYXQKQEAgLTk0LDkgKzk4LDEwIEBACiAJaWYgKCFlcnIpCiAJCWVyciA9IGpiZWdpbl9mYWlsdXJlOwogCi0JaWYgKCFlcnIgJiYgYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSA8PSAxICYmCisJaWYgKCFlcnIgJiYKIAkgICAgKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9wYWNrX29uX2Nsb3NlX21hc2spICYmCiAJICAgIHRhaWxfaGFzX3RvX2JlX3BhY2tlZChpbm9kZSkpIHsKKwogCQkvKiBpZiByZWd1bGFyIGZpbGUgaXMgcmVsZWFzZWQgYnkgbGFzdCBob2xkZXIgYW5kIGl0IGhhcyBiZWVuCiAJCSAgIGFwcGVuZGVkICh3ZSBhcHBlbmQgYnkgdW5mb3JtYXR0ZWQgbm9kZSBvbmx5KSBvciBpdHMgZGlyZWN0CiAJCSAgIGl0ZW0ocykgaGFkIHRvIGJlIGNvbnZlcnRlZCwgdGhlbiBpdCBtYXkgaGF2ZSB0byBiZQpAQCAtMTA0LDI3ICsxMDksMjggQEAKIAkJZXJyID0gcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShpbm9kZSwgMCk7CiAJfQogICAgICAgb3V0OgotCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOworCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcmVpc2VyZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbnQgcmVpc2VyZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JbXV0ZXhfbG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKLQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2V2ZXJfbWFwcGVkOwotCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT5pX21tYXApKTsKLQotCXJldHVybiBnZW5lcmljX2ZpbGVfbW1hcChmaWxlLCB2bWEpOworCWludCBlcnIgPSBkcXVvdF9maWxlX29wZW4oaW5vZGUsIGZpbGUpOworICAgICAgICBpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJlJFSVNFUkZTX0koaW5vZGUpLT5vcGVuZXJzKSkgeworCQkvKiBzb21lYm9keSBtaWdodCBiZSB0YWlscGFja2luZyBvbiBmaW5hbCBjbG9zZTsgd2FpdCBmb3IgaXQgKi8KKwkJbXV0ZXhfbG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOworCQlhdG9taWNfaW5jKCZSRUlTRVJGU19JKGlub2RlKS0+b3BlbmVycyk7CisJCW11dGV4X3VubG9jaygmKFJFSVNFUkZTX0koaW5vZGUpLT50YWlscGFjaykpOworCX0KKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCByZWlzZXJmc192ZnNfdHJ1bmNhdGVfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCW11dGV4X2xvY2soJihSRUlTRVJGU19JKGlub2RlKS0+dGFpbHBhY2spKTsKIAlyZWlzZXJmc190cnVuY2F0ZV9maWxlKGlub2RlLCAxKTsKKwltdXRleF91bmxvY2soJihSRUlTRVJGU19JKGlub2RlKS0+dGFpbHBhY2spKTsKIH0KIAogLyogU3luYyBhIHJlaXNlcmZzIGZpbGUuICovCkBAIC0yODgsOCArMjk0LDggQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IHJlaXNlcmZzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgotCS5tbWFwID0gcmVpc2VyZnNfZmlsZV9tbWFwLAotCS5vcGVuID0gZHF1b3RfZmlsZV9vcGVuLAorCS5tbWFwID0gZ2VuZXJpY19maWxlX21tYXAsCisJLm9wZW4gPSByZWlzZXJmc19maWxlX29wZW4sCiAJLnJlbGVhc2UgPSByZWlzZXJmc19maWxlX3JlbGVhc2UsCiAJLmZzeW5jID0gcmVpc2VyZnNfc3luY19maWxlLAogCS5haW9fcmVhZCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDI5ZGI3MjIwMy4uYWUzNTQxMyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0yNSw3ICsyNSw3IEBACiBpbnQgcmVpc2VyZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAKLXZvaWQgcmVpc2VyZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIHJlaXNlcmZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJLyogV2UgbmVlZCBibG9ja3MgZm9yIHRyYW5zYWN0aW9uICsgKHVzZXIrZ3JvdXApIHF1b3RhIHVwZGF0ZSAocG9zc2libHkgZGVsZXRlKSAqLwogCWludCBqYmVnaW5fY291bnQgPQpAQCAtMzUsMTAgKzM1LDEyIEBACiAJaW50IGRlcHRoOwogCWludCBlcnI7CiAKLQlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpCisJaWYgKCFpbm9kZS0+aV9ubGluayAmJiAhaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CiAKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CisJaWYgKGlub2RlLT5pX25saW5rKQorCQlnb3RvIG5vX2RlbGV0ZTsKIAogCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGlub2RlLT5pX3NiKTsKIApAQCAtNzcsOSArNzksMTQgQEAKIAkJOwogCX0KICAgICAgIG91dDoKLQljbGVhcl9pbm9kZShpbm9kZSk7CS8qIG5vdGUgdGhpcyBtdXN0IGdvIGFmdGVyIHRoZSBqb3VybmFsX2VuZCB0byBwcmV2ZW50IGRlYWRsb2NrICovCisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CS8qIG5vdGUgdGhpcyBtdXN0IGdvIGFmdGVyIHRoZSBqb3VybmFsX2VuZCB0byBwcmV2ZW50IGRlYWRsb2NrICovCisJZHF1b3RfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgZGVwdGgpOworCitub19kZWxldGU6CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9tYWtlX2NwdV9rZXkoc3RydWN0IGNwdV9rZXkgKmtleSwgaW50IHZlcnNpb24sIF9fdTMyIGRpcmlkLApAQCAtMTEzOCw3ICsxMTQ1LDYgQEAKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9wcmVhbGxvY19jb3VudCA9IDA7CiAJUkVJU0VSRlNfSShpbm9kZSktPmlfdHJhbnNfaWQgPSAwOwogCVJFSVNFUkZTX0koaW5vZGUpLT5pX2psID0gTlVMTDsKLQltdXRleF9pbml0KCYoUkVJU0VSRlNfSShpbm9kZSktPmlfbW1hcCkpOwogCXJlaXNlcmZzX2luaXRfeGF0dHJfcndzZW0oaW5vZGUpOwogCiAJaWYgKHN0YXRfZGF0YV92MShpaCkpIHsKQEAgLTE4NDEsNyArMTg0Nyw2IEBACiAJUkVJU0VSRlNfSShpbm9kZSktPmlfYXR0cnMgPQogCSAgICBSRUlTRVJGU19JKGRpciktPmlfYXR0cnMgJiBSRUlTRVJGU19JTkhFUklUX01BU0s7CiAJc2RfYXR0cnNfdG9faV9hdHRycyhSRUlTRVJGU19JKGlub2RlKS0+aV9hdHRycywgaW5vZGUpOwotCW11dGV4X2luaXQoJihSRUlTRVJGU19JKGlub2RlKS0+aV9tbWFwKSk7CiAJcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShpbm9kZSk7CiAKIAkvKiBrZXkgdG8gc2VhcmNoIGZvciBjb3JyZWN0IHBsYWNlIGZvciBuZXcgc3RhdCBkYXRhICovCkBAIC0yNTg3LDggKzI1OTIsNyBAQAogCQlvbGRfcmVmID0gdGgtPnRfcmVmY291bnQ7CiAJCXRoLT50X3JlZmNvdW50Kys7CiAJfQotCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKLQkJCQlyZWlzZXJmc19nZXRfYmxvY2spOworCXJldCA9IF9fYmxvY2tfd3JpdGVfYmVnaW4ocGFnZSwgcG9zLCBsZW4sIHJlaXNlcmZzX2dldF9ibG9jayk7CiAJaWYgKHJldCAmJiByZWlzZXJmc190cmFuc2FjdGlvbl9ydW5uaW5nKGlub2RlLT5pX3NiKSkgewogCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAkJLyogdGhpcyBnZXRzIGEgbGl0dGxlIHVnbHkuICBJZiByZWlzZXJmc19nZXRfYmxvY2sgcmV0dXJuZWQgYW4KQEAgLTMwNTksMTAgKzMwNjMsMjUgQEAKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzc2l6ZV90IHJldDsKIAotCXJldHVybiBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCisJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSAgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSAgcmVpc2VyZnNfZ2V0X2Jsb2Nrc19kaXJlY3RfaW8sIE5VTEwpOworCisJLyoKKwkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKKwkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgorCSAqLworCWlmICh1bmxpa2VseSgocncgJiBXUklURSkgJiYgcmV0IDwgMCkpIHsKKwkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCQlsb2ZmX3QgZW5kID0gb2Zmc2V0ICsgaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCisJCWlmIChlbmQgPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUoaW5vZGUsIGlzaXplKTsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgcmVpc2VyZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKQEAgLTMwNzIsNiArMzA5MSwxMCBAQAogCWludCBkZXB0aDsKIAlpbnQgZXJyb3I7CiAKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKIAkvKiBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yIHJlY3Vyc2l2ZSBub3RpZnlfY2hhbmdlIGNhbGxzICovCiAJaWFfdmFsaWQgPSBhdHRyLT5pYV92YWxpZCAmPSB+KEFUVFJfS0lMTF9TVUlEfEFUVFJfS0lMTF9TR0lEKTsKIApAQCAtMzEyMSw1NiArMzE0NCw1OSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JaWYgKCFlcnJvcikgewotCQlpZiAoKGlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKLQkJICAgIChpYV92YWxpZCAmIEFUVFJfR0lEICYmIGF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7Ci0JCQllcnJvciA9IHJlaXNlcmZzX2Nob3duX3hhdHRycyhpbm9kZSwgYXR0cik7CisJaWYgKChpYV92YWxpZCAmIEFUVFJfVUlEICYmIGF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CisJICAgIChpYV92YWxpZCAmIEFUVFJfR0lEICYmIGF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7CisJCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CisJCWludCBqYmVnaW5fY291bnQgPQorCQkgICAgMiAqCisJCSAgICAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpICsKKwkJICAgICBSRUlTRVJGU19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSkgKworCQkgICAgMjsKIAotCQkJaWYgKCFlcnJvcikgewotCQkJCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7Ci0JCQkJaW50IGpiZWdpbl9jb3VudCA9Ci0JCQkJICAgIDIgKgotCQkJCSAgICAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpICsKLQkJCQkgICAgIFJFSVNFUkZTX1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKSArCi0JCQkJICAgIDI7CisJCWVycm9yID0gcmVpc2VyZnNfY2hvd25feGF0dHJzKGlub2RlLCBhdHRyKTsKIAotCQkJCS8qICh1c2VyK2dyb3VwKSoob2xkK25ldykgc3RydWN0dXJlIC0gd2UgY291bnQgcXVvdGEgaW5mbyBhbmQgLCBpbm9kZSB3cml0ZSAoc2IsIGlub2RlKSAqLwotCQkJCWVycm9yID0KLQkJCQkgICAgam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLAotCQkJCQkJICBqYmVnaW5fY291bnQpOwotCQkJCWlmIChlcnJvcikKLQkJCQkJZ290byBvdXQ7Ci0JCQkJZXJyb3IgPSBkcXVvdF90cmFuc2Zlcihpbm9kZSwgYXR0cik7Ci0JCQkJaWYgKGVycm9yKSB7Ci0JCQkJCWpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsCi0JCQkJCQkgICAgamJlZ2luX2NvdW50KTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCS8qIFVwZGF0ZSBjb3JyZXNwb25kaW5nIGluZm8gaW4gaW5vZGUgc28gdGhhdCBldmVyeXRoaW5nIGlzIGluCi0JCQkJICogb25lIHRyYW5zYWN0aW9uICovCi0JCQkJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpCi0JCQkJCWlub2RlLT5pX3VpZCA9IGF0dHItPmlhX3VpZDsKLQkJCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkKLQkJCQkJaW5vZGUtPmlfZ2lkID0gYXR0ci0+aWFfZ2lkOwotCQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCQkJCWVycm9yID0KLQkJCQkgICAgam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKLQkJCX0KKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCisJCS8qICh1c2VyK2dyb3VwKSoob2xkK25ldykgc3RydWN0dXJlIC0gd2UgY291bnQgcXVvdGEgaW5mbyBhbmQgLCBpbm9kZSB3cml0ZSAoc2IsIGlub2RlKSAqLworCQllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCWVycm9yID0gZHF1b3RfdHJhbnNmZXIoaW5vZGUsIGF0dHIpOworCQlpZiAoZXJyb3IpIHsKKwkJCWpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCk7CisJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAoIWVycm9yKSB7Ci0JCQkvKgotCQkJICogUmVsYXggdGhlIGxvY2sgaGVyZSwgYXMgaXQgbWlnaHQgdHJ1bmNhdGUgdGhlCi0JCQkgKiBpbm9kZSBwYWdlcyBhbmQgd2FpdCBmb3IgaW5vZGUgcGFnZXMgbG9ja3MuCi0JCQkgKiBUbyByZWxlYXNlIHN1Y2ggcGFnZSBsb2NrLCB0aGUgb3duZXIgbmVlZHMgdGhlCi0JCQkgKiByZWlzZXJmcyBsb2NrCi0JCQkgKi8KLQkJCXJlaXNlcmZzX3dyaXRlX3VubG9ja19vbmNlKGlub2RlLT5pX3NiLCBkZXB0aCk7Ci0JCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCQkJZGVwdGggPSByZWlzZXJmc193cml0ZV9sb2NrX29uY2UoaW5vZGUtPmlfc2IpOwotCQl9CisKKwkJLyogVXBkYXRlIGNvcnJlc3BvbmRpbmcgaW5mbyBpbiBpbm9kZSBzbyB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4KKwkJICogb25lIHRyYW5zYWN0aW9uICovCisJCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEKQorCQkJaW5vZGUtPmlfdWlkID0gYXR0ci0+aWFfdWlkOworCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCkKKwkJCWlub2RlLT5pX2dpZCA9IGF0dHItPmlhX2dpZDsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCWVycm9yID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CiAJfQogCisJLyoKKwkgKiBSZWxheCB0aGUgbG9jayBoZXJlLCBhcyBpdCBtaWdodCB0cnVuY2F0ZSB0aGUKKwkgKiBpbm9kZSBwYWdlcyBhbmQgd2FpdCBmb3IgaW5vZGUgcGFnZXMgbG9ja3MuCisJICogVG8gcmVsZWFzZSBzdWNoIHBhZ2UgbG9jaywgdGhlIG93bmVyIG5lZWRzIHRoZQorCSAqIHJlaXNlcmZzIGxvY2sKKwkgKi8KKwlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgZGVwdGgpOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpICYmCisJICAgIGF0dHItPmlhX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpKQorCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCisJaWYgKCFlcnJvcikgeworCQlzZXRhdHRyX2NvcHkoaW5vZGUsIGF0dHIpOworCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwl9CisJZGVwdGggPSByZWlzZXJmc193cml0ZV9sb2NrX29uY2UoaW5vZGUtPmlfc2IpOworCiAJaWYgKCFlcnJvciAmJiByZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikpIHsKIAkJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKQogCQkJZXJyb3IgPSByZWlzZXJmc19hY2xfY2htb2QoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvam91cm5hbC5jIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCmluZGV4IDE5ZmJjODEuLjFlYzk1MmIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYworKysgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKQEAgLTk4Myw3ICs5ODMsNiBAQAogCiBzdGF0aWMgaW50IHJlaXNlcmZzX2FzeW5jX3Byb2dyZXNzX3dhaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogewotCURFRklORV9XQUlUKHdhaXQpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqID0gU0JfSk9VUk5BTChzKTsKIAogCWlmIChhdG9taWNfcmVhZCgmai0+al9hc3luY190aHJvdHRsZSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDk4MjJmYTEuLmUxNWZmNjEgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtNTI1LDYgKzUyNSw4IEBACiAJICAgIGttZW1fY2FjaGVfYWxsb2MocmVpc2VyZnNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVpKQogCQlyZXR1cm4gTlVMTDsKKwlhdG9taWNfc2V0KCZlaS0+b3BlbmVycywgMCk7CisJbXV0ZXhfaW5pdCgmZWktPnRhaWxwYWNrKTsKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTU4OSwxMSArNTkxLDYgQEAKIAlyZWlzZXJmc193cml0ZV91bmxvY2tfb25jZShpbm9kZS0+aV9zYiwgbG9ja19kZXB0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlaXNlcmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZHF1b3RfZHJvcChpbm9kZSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUVVPVEEKIHN0YXRpYyBzc2l6ZV90IHJlaXNlcmZzX3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKIAkJCQkgICAgc2l6ZV90LCBsb2ZmX3QpOwpAQCAtNjA2LDggKzYwMyw3IEBACiAJLmRlc3Ryb3lfaW5vZGUgPSByZWlzZXJmc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZSA9IHJlaXNlcmZzX3dyaXRlX2lub2RlLAogCS5kaXJ0eV9pbm9kZSA9IHJlaXNlcmZzX2RpcnR5X2lub2RlLAotCS5jbGVhcl9pbm9kZSA9IHJlaXNlcmZzX2NsZWFyX2lub2RlLAotCS5kZWxldGVfaW5vZGUgPSByZWlzZXJmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlID0gcmVpc2VyZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlciA9IHJlaXNlcmZzX3B1dF9zdXBlciwKIAkud3JpdGVfc3VwZXIgPSByZWlzZXJmc193cml0ZV9zdXBlciwKIAkuc3luY19mcyA9IHJlaXNlcmZzX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9zaWduYWxmZC5jIGIvZnMvc2lnbmFsZmQuYwppbmRleCBmMzI5ODQ5Yy4uMWM1YTZhZCAxMDA2NDQKLS0tIGEvZnMvc2lnbmFsZmQuYworKysgYi9mcy9zaWduYWxmZC5jCkBAIC04OCw2ICs4OCw3IEBACiAJCSBlcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfdGlkLCAmdWluZm8tPnNzaV90aWQpOwogCQkgZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX292ZXJydW4sICZ1aW5mby0+c3NpX292ZXJydW4pOwogCQkgZXJyIHw9IF9fcHV0X3VzZXIoKGxvbmcpIGtpbmZvLT5zaV9wdHIsICZ1aW5mby0+c3NpX3B0cik7CisJCSBlcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfaW50LCAmdWluZm8tPnNzaV9pbnQpOwogCQlicmVhazsKIAljYXNlIF9fU0lfUE9MTDoKIAkJZXJyIHw9IF9fcHV0X3VzZXIoa2luZm8tPnNpX2JhbmQsICZ1aW5mby0+c3NpX2JhbmQpOwpAQCAtMTExLDYgKzExMiw3IEBACiAJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV9waWQsICZ1aW5mby0+c3NpX3BpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKGtpbmZvLT5zaV91aWQsICZ1aW5mby0+c3NpX3VpZCk7CiAJCWVyciB8PSBfX3B1dF91c2VyKChsb25nKSBraW5mby0+c2lfcHRyLCAmdWluZm8tPnNzaV9wdHIpOworCQllcnIgfD0gX19wdXRfdXNlcihraW5mby0+c2lfaW50LCAmdWluZm8tPnNzaV9pbnQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKgpkaWZmIC0tZ2l0IGEvZnMvc21iZnMvaW5vZGUuYyBiL2ZzL3NtYmZzL2lub2RlLmMKaW5kZXggOTU1MWNiNi4uNDUwYzkxOSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvaW5vZGUuYworKysgYi9mcy9zbWJmcy9pbm9kZS5jCkBAIC00Niw3ICs0Niw3IEBACiAKICNkZWZpbmUgU01CX1RUTF9ERUZBVUxUIDEwMDAKIAotc3RhdGljIHZvaWQgc21iX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitzdGF0aWMgdm9pZCBzbWJfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICopOwogc3RhdGljIHZvaWQgc21iX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgaW50ICBzbWJfc3RhdGZzKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiBzdGF0aWMgaW50ICBzbWJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkuYWxsb2NfaW5vZGUJPSBzbWJfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBzbWJfZGVzdHJveV9pbm9kZSwKIAkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBzbWJfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IHNtYl9ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCT0gc21iX3B1dF9zdXBlciwKIAkuc3RhdGZzCQk9IHNtYl9zdGF0ZnMsCiAJLnNob3dfb3B0aW9ucwk9IHNtYl9zaG93X29wdGlvbnMsCkBAIC0zMjQsMTUgKzMyNCwxNSBAQAogICogQWxsIGJsb2NraW5nIGNsZWFudXAgb3BlcmF0aW9ucyBuZWVkIHRvIGdvIGhlcmUgdG8gYXZvaWQgcmFjZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1zbWJfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vKQorc21iX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vKQogewogCURFQlVHMSgiaW5vPSVsZFxuIiwgaW5vLT5pX2lubyk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmluby0+aV9kYXRhLCAwKTsKKwllbmRfd3JpdGViYWNrKGlubyk7CiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoc21iX2Nsb3NlKGlubykpCiAJCVBBUkFOT0lBKCJjb3VsZCBub3QgY2xvc2UgaW5vZGUgJWxkXG4iLCBpbm8tPmlfaW5vKTsKIAl1bmxvY2tfa2VybmVsKCk7Ci0JY2xlYXJfaW5vZGUoaW5vKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1tdID0gewpAQCAtNzE0LDkgKzcxNCw3IEBACiAJCWVycm9yID0gc2VydmVyLT5vcHMtPnRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7Ci0JCWVycm9yID0gc2ltcGxlX3NldHNpemUoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKKwkJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CiAJCXJlZnJlc2ggPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCBlZmRiZmVjLi44ZjFkZmFlIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtMzk5LDE3ICszOTksNyBAQAogCQkgKiBJZiB0aGUgcGFnZSBpc24ndCB1cHRvZGF0ZSwgd2UgbWF5IG5lZWQgdG8gc3RhcnQgaW8gb24gaXQKIAkJICovCiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCQkvKgotCQkJICogSWYgaW4gbm9uYmxvY2sgbW9kZSB0aGVuIGRvbnQgYmxvY2sgb24gd2FpdGluZwotCQkJICogZm9yIGFuIGluLWZsaWdodCBpbyBwYWdlCi0JCQkgKi8KLQkJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKSB7Ci0JCQkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpIHsKLQkJCQkJZXJyb3IgPSAtRUFHQUlOOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQlsb2NrX3BhZ2UocGFnZSk7CisJCQlsb2NrX3BhZ2UocGFnZSk7CiAKIAkJCS8qCiAJCQkgKiBQYWdlIHdhcyB0cnVuY2F0ZWQsIG9yIGludmFsaWRhdGVkIGJ5IHRoZQpAQCAtNTk3LDcgKzU4Nyw2IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfREVGX0JVRkZFUlNdOwogCXN0cnVjdCBwYXJ0aWFsX3BhZ2UgcGFydGlhbFtQSVBFX0RFRl9CVUZGRVJTXTsKIAlzdHJ1Y3QgaW92ZWMgKnZlYywgX192ZWNbUElQRV9ERUZfQlVGRkVSU107Ci0JcGdvZmZfdCBpbmRleDsKIAlzc2l6ZV90IHJlczsKIAlzaXplX3QgdGhpc19sZW47CiAJaW50IGVycm9yOwpAQCAtNjIxLDcgKzYxMCw2IEBACiAJCQlnb3RvIHNocmlua19yZXQ7CiAJfQogCi0JaW5kZXggPSAqcHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCW9mZnNldCA9ICpwcG9zICYgflBBR0VfQ0FDSEVfTUFTSzsKIAlucl9wYWdlcyA9IChsZW4gKyBvZmZzZXQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9LY29uZmlnIGIvZnMvc3F1YXNoZnMvS2NvbmZpZwppbmRleCBjYzZjZThhLi5lNWY2M2RhIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9LY29uZmlnCisrKyBiL2ZzL3NxdWFzaGZzL0tjb25maWcKQEAgLTUsMTMgKzUsMTMgQEAKIAloZWxwCiAJICBTYXlpbmcgWSBoZXJlIGluY2x1ZGVzIHN1cHBvcnQgZm9yIFNxdWFzaEZTIDQuMCAoYSBDb21wcmVzc2VkCiAJICBSZWFkLU9ubHkgRmlsZSBTeXN0ZW0pLiAgU3F1YXNoZnMgaXMgYSBoaWdobHkgY29tcHJlc3NlZCByZWFkLW9ubHkKLQkgIGZpbGVzeXN0ZW0gZm9yIExpbnV4LiAgSXQgdXNlcyB6bGliIGNvbXByZXNzaW9uIHRvIGNvbXByZXNzIGJvdGgKKwkgIGZpbGVzeXN0ZW0gZm9yIExpbnV4LiAgSXQgdXNlcyB6bGliL2x6byBjb21wcmVzc2lvbiB0byBjb21wcmVzcyBib3RoCiAJICBmaWxlcywgaW5vZGVzIGFuZCBkaXJlY3Rvcmllcy4gIElub2RlcyBpbiB0aGUgc3lzdGVtIGFyZSB2ZXJ5IHNtYWxsCiAJICBhbmQgYWxsIGJsb2NrcyBhcmUgcGFja2VkIHRvIG1pbmltaXNlIGRhdGEgb3ZlcmhlYWQuIEJsb2NrIHNpemVzCiAJICBncmVhdGVyIHRoYW4gNEsgYXJlIHN1cHBvcnRlZCB1cCB0byBhIG1heGltdW0gb2YgMSBNYnl0ZXMgKGRlZmF1bHQKIAkgIGJsb2NrIHNpemUgMTI4SykuICBTcXVhc2hGUyA0LjAgc3VwcG9ydHMgNjQgYml0IGZpbGVzeXN0ZW1zIGFuZCBmaWxlcwogCSAgKGxhcmdlciB0aGFuIDRHQiksIGZ1bGwgdWlkL2dpZCBpbmZvcm1hdGlvbiwgaGFyZCBsaW5rcyBhbmQKLQkgIHRpbWVzdGFtcHMuICAKKwkgIHRpbWVzdGFtcHMuCiAKIAkgIFNxdWFzaGZzIGlzIGludGVuZGVkIGZvciBnZW5lcmFsIHJlYWQtb25seSBmaWxlc3lzdGVtIHVzZSwgZm9yCiAJICBhcmNoaXZhbCB1c2UgKGkuZS4gaW4gY2FzZXMgd2hlcmUgYSAudGFyLmd6IGZpbGUgbWF5IGJlIHVzZWQpLCBhbmQgaW4KQEAgLTI2LDcgKzI2LDcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFNRVUFTSEZTX1hBVFRSUworY29uZmlnIFNRVUFTSEZTX1hBVFRSCiAJYm9vbCAiU3F1YXNoZnMgWEFUVFIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFNRVUFTSEZTCiAJZGVmYXVsdCBuCkBAIC0zNyw5ICszNywyNCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgU1FVQVNIRlNfRU1CRURERUQKK2NvbmZpZyBTUVVBU0hGU19MWk8KKwlib29sICJJbmNsdWRlIHN1cHBvcnQgZm9yIExaTyBjb21wcmVzc2VkIGZpbGUgc3lzdGVtcyIKKwlkZXBlbmRzIG9uIFNRVUFTSEZTCisJZGVmYXVsdCBuCisJc2VsZWN0IExaT19ERUNPTVBSRVNTCisJaGVscAorCSAgU2F5aW5nIFkgaGVyZSBpbmNsdWRlcyBzdXBwb3J0IGZvciByZWFkaW5nIFNxdWFzaGZzIGZpbGUgc3lzdGVtcworCSAgY29tcHJlc3NlZCB3aXRoIExaTyBjb21wcmVzc3Npb24uICBMWk8gY29tcHJlc3Npb24gaXMgbWFpbmx5CisJICBhaW1lZCBhdCBlbWJlZGRlZCBzeXN0ZW1zIHdpdGggc2xvd2VyIENQVXMgd2hlcmUgdGhlIG92ZXJoZWFkcworCSAgb2YgemxpYiBhcmUgdG9vIGhpZ2guCiAKLQlib29sICJBZGRpdGlvbmFsIG9wdGlvbiBmb3IgbWVtb3J5LWNvbnN0cmFpbmVkIHN5c3RlbXMiIAorCSAgTFpPIGlzIG5vdCB0aGUgc3RhbmRhcmQgY29tcHJlc3Npb24gdXNlZCBpbiBTcXVhc2hmcyBhbmQgc28gbW9zdAorCSAgZmlsZSBzeXN0ZW1zIHdpbGwgYmUgcmVhZGFibGUgd2l0aG91dCBzZWxlY3RpbmcgdGhpcyBvcHRpb24uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBTUVVBU0hGU19FTUJFRERFRAorCWJvb2wgIkFkZGl0aW9uYWwgb3B0aW9uIGZvciBtZW1vcnktY29uc3RyYWluZWQgc3lzdGVtcyIKIAlkZXBlbmRzIG9uIFNRVUFTSEZTCiAJZGVmYXVsdCBuCiAJaGVscApkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvTWFrZWZpbGUgYi9mcy9zcXVhc2hmcy9NYWtlZmlsZQppbmRleCAyY2VlM2U5Li43NjcyYmFjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9NYWtlZmlsZQorKysgYi9mcy9zcXVhc2hmcy9NYWtlZmlsZQpAQCAtNSw1ICs1LDUgQEAKIG9iai0kKENPTkZJR19TUVVBU0hGUykgKz0gc3F1YXNoZnMubwogc3F1YXNoZnMteSArPSBibG9jay5vIGNhY2hlLm8gZGlyLm8gZXhwb3J0Lm8gZmlsZS5vIGZyYWdtZW50Lm8gaWQubyBpbm9kZS5vCiBzcXVhc2hmcy15ICs9IG5hbWVpLm8gc3VwZXIubyBzeW1saW5rLm8gemxpYl93cmFwcGVyLm8gZGVjb21wcmVzc29yLm8KLXNxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX1hBVFRSUykgKz0geGF0dHIubyB4YXR0cl9pZC5vCi0KK3NxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX1hBVFRSKSArPSB4YXR0ci5vIHhhdHRyX2lkLm8KK3NxdWFzaGZzLSQoQ09ORklHX1NRVUFTSEZTX0xaTykgKz0gbHpvX3dyYXBwZXIubwpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZGVjb21wcmVzc29yLmMgYi9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuYwppbmRleCAxNTc0NzhkLi4yNGFmOWNlIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuYworKysgYi9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuYwpAQCAtNDAsOSArNDAsMTEgQEAKIAlOVUxMLCBOVUxMLCBOVUxMLCBMWk1BX0NPTVBSRVNTSU9OLCAibHptYSIsIDAKIH07CiAKKyNpZm5kZWYgQ09ORklHX1NRVUFTSEZTX0xaTwogc3RhdGljIGNvbnN0IHN0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3Igc3F1YXNoZnNfbHpvX3Vuc3VwcG9ydGVkX2NvbXBfb3BzID0gewogCU5VTEwsIE5VTEwsIE5VTEwsIExaT19DT01QUkVTU0lPTiwgImx6byIsIDAKIH07CisjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3Igc3F1YXNoZnNfdW5rbm93bl9jb21wX29wcyA9IHsKIAlOVUxMLCBOVUxMLCBOVUxMLCAwLCAidW5rbm93biIsIDAKQEAgLTUxLDcgKzUzLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciAqZGVjb21wcmVzc29yW10gPSB7CiAJJnNxdWFzaGZzX3psaWJfY29tcF9vcHMsCiAJJnNxdWFzaGZzX2x6bWFfdW5zdXBwb3J0ZWRfY29tcF9vcHMsCisjaWZkZWYgQ09ORklHX1NRVUFTSEZTX0xaTworCSZzcXVhc2hmc19sem9fY29tcF9vcHMsCisjZWxzZQogCSZzcXVhc2hmc19sem9fdW5zdXBwb3J0ZWRfY29tcF9vcHMsCisjZW5kaWYKIAkmc3F1YXNoZnNfdW5rbm93bl9jb21wX29wcwogfTsKIApkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvbHpvX3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL2x6b193cmFwcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ4Nzc4OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3NxdWFzaGZzL2x6b193cmFwcGVyLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBTcXVhc2hmcyAtIGEgY29tcHJlc3NlZCByZWFkIG9ubHkgZmlsZXN5c3RlbSBmb3IgTGludXgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgTEcgRWxlY3Ryb25pY3MKKyAqIENoYW4gSmVvbmcgPGNoYW4uamVvbmdAbGdlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBsem9fd3JhcHBlci5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2x6by5oPgorCisjaW5jbHVkZSAic3F1YXNoZnNfZnMuaCIKKyNpbmNsdWRlICJzcXVhc2hmc19mc19zYi5oIgorI2luY2x1ZGUgInNxdWFzaGZzX2ZzX2kuaCIKKyNpbmNsdWRlICJzcXVhc2hmcy5oIgorI2luY2x1ZGUgImRlY29tcHJlc3Nvci5oIgorCitzdHJ1Y3Qgc3F1YXNoZnNfbHpvIHsKKwl2b2lkCSppbnB1dDsKKwl2b2lkCSpvdXRwdXQ7Cit9OworCitzdGF0aWMgdm9pZCAqbHpvX2luaXQoc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrKQoreworCWludCBibG9ja19zaXplID0gbWF4X3QoaW50LCBtc2Jsay0+YmxvY2tfc2l6ZSwgU1FVQVNIRlNfTUVUQURBVEFfU0laRSk7CisKKwlzdHJ1Y3Qgc3F1YXNoZnNfbHpvICpzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3RyZWFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZDsKKwlzdHJlYW0tPmlucHV0ID0gdm1hbGxvYyhibG9ja19zaXplKTsKKwlpZiAoc3RyZWFtLT5pbnB1dCA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZDsKKwlzdHJlYW0tPm91dHB1dCA9IHZtYWxsb2MoYmxvY2tfc2l6ZSk7CisJaWYgKHN0cmVhbS0+b3V0cHV0ID09IE5VTEwpCisJCWdvdG8gZmFpbGVkMjsKKworCXJldHVybiBzdHJlYW07CisKK2ZhaWxlZDI6CisJdmZyZWUoc3RyZWFtLT5pbnB1dCk7CitmYWlsZWQ6CisJRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBsem8gd29ya3NwYWNlXG4iKTsKKwlrZnJlZShzdHJlYW0pOworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIGx6b19mcmVlKHZvaWQgKnN0cm0pCit7CisJc3RydWN0IHNxdWFzaGZzX2x6byAqc3RyZWFtID0gc3RybTsKKworCWlmIChzdHJlYW0pIHsKKwkJdmZyZWUoc3RyZWFtLT5pbnB1dCk7CisJCXZmcmVlKHN0cmVhbS0+b3V0cHV0KTsKKwl9CisJa2ZyZWUoc3RyZWFtKTsKK30KKworCitzdGF0aWMgaW50IGx6b191bmNvbXByZXNzKHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2Jsaywgdm9pZCAqKmJ1ZmZlciwKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwgaW50IGIsIGludCBvZmZzZXQsIGludCBsZW5ndGgsIGludCBzcmNsZW5ndGgsCisJaW50IHBhZ2VzKQoreworCXN0cnVjdCBzcXVhc2hmc19sem8gKnN0cmVhbSA9IG1zYmxrLT5zdHJlYW07CisJdm9pZCAqYnVmZiA9IHN0cmVhbS0+aW5wdXQ7CisJaW50IGF2YWlsLCBpLCBieXRlcyA9IGxlbmd0aCwgcmVzOworCXNpemVfdCBvdXRfbGVuID0gc3JjbGVuZ3RoOworCisJbXV0ZXhfbG9jaygmbXNibGstPnJlYWRfZGF0YV9tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSB7CisJCXdhaXRfb25fYnVmZmVyKGJoW2ldKTsKKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhbaV0pKQorCQkJZ290byBibG9ja19yZWxlYXNlOworCisJCWF2YWlsID0gbWluKGJ5dGVzLCBtc2Jsay0+ZGV2Ymxrc2l6ZSAtIG9mZnNldCk7CisJCW1lbWNweShidWZmLCBiaFtpXS0+Yl9kYXRhICsgb2Zmc2V0LCBhdmFpbCk7CisJCWJ1ZmYgKz0gYXZhaWw7CisJCWJ5dGVzIC09IGF2YWlsOworCQlvZmZzZXQgPSAwOworCQlwdXRfYmgoYmhbaV0pOworCX0KKworCXJlcyA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShzdHJlYW0tPmlucHV0LCAoc2l6ZV90KWxlbmd0aCwKKwkJCQkJc3RyZWFtLT5vdXRwdXQsICZvdXRfbGVuKTsKKwlpZiAocmVzICE9IExaT19FX09LKQorCQlnb3RvIGZhaWxlZDsKKworCXJlcyA9IGJ5dGVzID0gKGludClvdXRfbGVuOworCWZvciAoaSA9IDAsIGJ1ZmYgPSBzdHJlYW0tPm91dHB1dDsgYnl0ZXMgJiYgaSA8IHBhZ2VzOyBpKyspIHsKKwkJYXZhaWwgPSBtaW5fdChpbnQsIGJ5dGVzLCBQQUdFX0NBQ0hFX1NJWkUpOworCQltZW1jcHkoYnVmZmVyW2ldLCBidWZmLCBhdmFpbCk7CisJCWJ1ZmYgKz0gYXZhaWw7CisJCWJ5dGVzIC09IGF2YWlsOworCX0KKworCW11dGV4X3VubG9jaygmbXNibGstPnJlYWRfZGF0YV9tdXRleCk7CisJcmV0dXJuIHJlczsKKworYmxvY2tfcmVsZWFzZToKKwlmb3IgKDsgaSA8IGI7IGkrKykKKwkJcHV0X2JoKGJoW2ldKTsKKworZmFpbGVkOgorCW11dGV4X3VubG9jaygmbXNibGstPnJlYWRfZGF0YV9tdXRleCk7CisKKwlFUlJPUigibHpvIGRlY29tcHJlc3Npb24gZmFpbGVkLCBkYXRhIHByb2JhYmx5IGNvcnJ1cHRcbiIpOworCXJldHVybiAtRUlPOworfQorCitjb25zdCBzdHJ1Y3Qgc3F1YXNoZnNfZGVjb21wcmVzc29yIHNxdWFzaGZzX2x6b19jb21wX29wcyA9IHsKKwkuaW5pdCA9IGx6b19pbml0LAorCS5mcmVlID0gbHpvX2ZyZWUsCisJLmRlY29tcHJlc3MgPSBsem9fdW5jb21wcmVzcywKKwkuaWQgPSBMWk9fQ09NUFJFU1NJT04sCisJLm5hbWUgPSAibHpvIiwKKwkuc3VwcG9ydGVkID0gMQorfTsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3NxdWFzaGZzLmggYi9mcy9zcXVhc2hmcy9zcXVhc2hmcy5oCmluZGV4IDczM2ExN2MuLjVkNDU1NjkgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3NxdWFzaGZzLmgKKysrIGIvZnMvc3F1YXNoZnMvc3F1YXNoZnMuaApAQCAtMTA0LDMgKzEwNCw2IEBACiAKIC8qIHpsaWJfd3JhcHBlci5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciBzcXVhc2hmc196bGliX2NvbXBfb3BzOworCisvKiBsem9fd3JhcHBlci5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciBzcXVhc2hmc19sem9fY29tcF9vcHM7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9zcXVhc2hmc19mcy5oIGIvZnMvc3F1YXNoZnMvc3F1YXNoZnNfZnMuaAppbmRleCA4ZWFiYjgwLi5jNTEzN2ZjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9zcXVhc2hmc19mcy5oCisrKyBiL2ZzL3NxdWFzaGZzL3NxdWFzaGZzX2ZzLmgKQEAgLTI3NCw3ICsyNzQsNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogfTsKIAogc3RydWN0IHNxdWFzaGZzX2lwY19pbm9kZSB7CkBAIC0yODMsNyArMjgzLDcgQEAKIAlfX2xlMTYJCQl1aWQ7CiAJX19sZTE2CQkJZ3VpZDsKIAlfX2xlMzIJCQltdGltZTsKLQlfX2xlMzIJIAkJaW5vZGVfbnVtYmVyOworCV9fbGUzMgkJCWlub2RlX251bWJlcjsKIAlfX2xlMzIJCQlubGluazsKIH07CiAKQEAgLTI5Myw3ICsyOTMsNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogCV9fbGUzMgkJCW5saW5rOwogCV9fbGUzMgkJCXhhdHRyOwogfTsKQEAgLTMwNCw3ICszMDQsNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogCV9fbGUzMgkJCW5saW5rOwogCV9fbGUzMgkJCXJkZXY7CiB9OwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJX19sZTE2CQkJdWlkOwogCV9fbGUxNgkJCWd1aWQ7CiAJX19sZTMyCQkJbXRpbWU7Ci0JX19sZTMyCSAJCWlub2RlX251bWJlcjsKKwlfX2xlMzIJCQlpbm9kZV9udW1iZXI7CiAJX19sZTMyCQkJbmxpbms7CiAJX19sZTMyCQkJcmRldjsKIAlfX2xlMzIJCQl4YXR0cjsKQEAgLTMyNyw3ICszMjcsNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogCV9fbGUzMgkJCW5saW5rOwogCV9fbGUzMgkJCXN5bWxpbmtfc2l6ZTsKIAljaGFyCQkJc3ltbGlua1swXTsKQEAgLTMzOSw3ICszMzksNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogCV9fbGUzMgkJCXN0YXJ0X2Jsb2NrOwogCV9fbGUzMgkJCWZyYWdtZW50OwogCV9fbGUzMgkJCW9mZnNldDsKQEAgLTM1Myw3ICszNTMsNyBAQAogCV9fbGUxNgkJCXVpZDsKIAlfX2xlMTYJCQlndWlkOwogCV9fbGUzMgkJCW10aW1lOwotCV9fbGUzMgkgCQlpbm9kZV9udW1iZXI7CisJX19sZTMyCQkJaW5vZGVfbnVtYmVyOwogCV9fbGU2NAkJCXN0YXJ0X2Jsb2NrOwogCV9fbGU2NAkJCWZpbGVfc2l6ZTsKIAlfX2xlNjQJCQlzcGFyc2U7CkBAIC0zNzAsNyArMzcwLDcgQEAKIAlfX2xlMTYJCQl1aWQ7CiAJX19sZTE2CQkJZ3VpZDsKIAlfX2xlMzIJCQltdGltZTsKLQlfX2xlMzIJIAkJaW5vZGVfbnVtYmVyOworCV9fbGUzMgkJCWlub2RlX251bWJlcjsKIAlfX2xlMzIJCQlzdGFydF9ibG9jazsKIAlfX2xlMzIJCQlubGluazsKIAlfX2xlMTYJCQlmaWxlX3NpemU7CkBAIC0zODQsNyArMzg0LDcgQEAKIAlfX2xlMTYJCQl1aWQ7CiAJX19sZTE2CQkJZ3VpZDsKIAlfX2xlMzIJCQltdGltZTsKLQlfX2xlMzIJIAkJaW5vZGVfbnVtYmVyOworCV9fbGUzMgkJCWlub2RlX251bWJlcjsKIAlfX2xlMzIJCQlubGluazsKIAlfX2xlMzIJCQlmaWxlX3NpemU7CiAJX19sZTMyCQkJc3RhcnRfYmxvY2s7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy94YXR0ci5jIGIvZnMvc3F1YXNoZnMveGF0dHIuYwppbmRleCBjNzY1NWU4Li42NTJiODU0IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy94YXR0ci5jCisrKyBiL2ZzL3NxdWFzaGZzL3hhdHRyLmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCi0gKiB4YXR0cl9pZC5jCisgKiB4YXR0ci5jCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI5NSw3ICsyOTUsNyBAQAogCS5nZXQJPSBzcXVhc2hmc19zZWN1cml0eV9nZXQKIH07CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKnNxdWFzaGZzX3hhdHRyX2hhbmRsZXIoaW50IHR5cGUpCitzdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKnNxdWFzaGZzX3hhdHRyX2hhbmRsZXIoaW50IHR5cGUpCiB7CiAJaWYgKHR5cGUgJiB+KFNRVUFTSEZTX1hBVFRSX1BSRUZJWF9NQVNLIHwgU1FVQVNIRlNfWEFUVFJfVkFMVUVfT09MKSkKIAkJLyogaWdub3JlIHVucmVjb2duaXNlZCB0eXBlICovCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy94YXR0ci5oIGIvZnMvc3F1YXNoZnMveGF0dHIuaAppbmRleCA5ZGEwNzFhLi40OWZlMGQ3IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy94YXR0ci5oCisrKyBiL2ZzL3NxdWFzaGZzL3hhdHRyLmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqIHhhdHRyLmgKICAqLwogCi0jaWZkZWYgQ09ORklHX1NRVUFTSEZTX1hBVFRSUworI2lmZGVmIENPTkZJR19TUVVBU0hGU19YQVRUUgogZXh0ZXJuIF9fbGU2NCAqc3F1YXNoZnNfcmVhZF94YXR0cl9pZF90YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdTY0LAogCQl1NjQgKiwgaW50ICopOwogZXh0ZXJuIGludCBzcXVhc2hmc194YXR0cl9sb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGludCwgaW50ICosCmRpZmYgLS1naXQgYS9mcy9zdGF0ZnMuYyBiL2ZzL3N0YXRmcy5jCmluZGV4IDRlZjAyMWYuLjMwZWE4YzggMTAwNjQ0Ci0tLSBhL2ZzL3N0YXRmcy5jCisrKyBiL2ZzL3N0YXRmcy5jCkBAIC0yLDM4ICsyLDgzIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi1pbnQgdmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCitzdGF0aWMgaW50IGZsYWdzX2J5X21udChpbnQgbW50X2ZsYWdzKQogewotCWludCByZXR2YWwgPSAtRU5PREVWOworCWludCBmbGFncyA9IDA7CiAKLQlpZiAoZGVudHJ5KSB7Ci0JCXJldHZhbCA9IC1FTk9TWVM7Ci0JCWlmIChkZW50cnktPmRfc2ItPnNfb3AtPnN0YXRmcykgewotCQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsKLQkJCXJldHZhbCA9IHNlY3VyaXR5X3NiX3N0YXRmcyhkZW50cnkpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlyZXR1cm4gcmV0dmFsOwotCQkJcmV0dmFsID0gZGVudHJ5LT5kX3NiLT5zX29wLT5zdGF0ZnMoZGVudHJ5LCBidWYpOwotCQkJaWYgKHJldHZhbCA9PSAwICYmIGJ1Zi0+Zl9mcnNpemUgPT0gMCkKLQkJCQlidWYtPmZfZnJzaXplID0gYnVmLT5mX2JzaXplOwotCQl9Ci0JfQorCWlmIChtbnRfZmxhZ3MgJiBNTlRfUkVBRE9OTFkpCisJCWZsYWdzIHw9IFNUX1JET05MWTsKKwlpZiAobW50X2ZsYWdzICYgTU5UX05PU1VJRCkKKwkJZmxhZ3MgfD0gU1RfTk9TVUlEOworCWlmIChtbnRfZmxhZ3MgJiBNTlRfTk9ERVYpCisJCWZsYWdzIHw9IFNUX05PREVWOworCWlmIChtbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKQorCQlmbGFncyB8PSBTVF9OT0VYRUM7CisJaWYgKG1udF9mbGFncyAmIE1OVF9OT0FUSU1FKQorCQlmbGFncyB8PSBTVF9OT0FUSU1FOworCWlmIChtbnRfZmxhZ3MgJiBNTlRfTk9ESVJBVElNRSkKKwkJZmxhZ3MgfD0gU1RfTk9ESVJBVElNRTsKKwlpZiAobW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKQorCQlmbGFncyB8PSBTVF9SRUxBVElNRTsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbnQgZmxhZ3NfYnlfc2IoaW50IHNfZmxhZ3MpCit7CisJaW50IGZsYWdzID0gMDsKKwlpZiAoc19mbGFncyAmIE1TX1NZTkNIUk9OT1VTKQorCQlmbGFncyB8PSBTVF9TWU5DSFJPTk9VUzsKKwlpZiAoc19mbGFncyAmIE1TX01BTkRMT0NLKQorCQlmbGFncyB8PSBTVF9NQU5ETE9DSzsKKwlyZXR1cm4gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbnQgY2FsY3VsYXRlX2ZfZmxhZ3Moc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJcmV0dXJuIFNUX1ZBTElEIHwgZmxhZ3NfYnlfbW50KG1udC0+bW50X2ZsYWdzKSB8CisJCWZsYWdzX2J5X3NiKG1udC0+bW50X3NiLT5zX2ZsYWdzKTsKK30KKworaW50IHN0YXRmc19ieV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQoreworCWludCByZXR2YWw7CisKKwlpZiAoIWRlbnRyeS0+ZF9zYi0+c19vcC0+c3RhdGZzKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJcmV0dmFsID0gc2VjdXJpdHlfc2Jfc3RhdGZzKGRlbnRyeSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR2YWwgPSBkZW50cnktPmRfc2ItPnNfb3AtPnN0YXRmcyhkZW50cnksIGJ1Zik7CisJaWYgKHJldHZhbCA9PSAwICYmIGJ1Zi0+Zl9mcnNpemUgPT0gMCkKKwkJYnVmLT5mX2Zyc2l6ZSA9IGJ1Zi0+Zl9ic2l6ZTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCitpbnQgdmZzX3N0YXRmcyhzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHN0YXRmc19ieV9kZW50cnkocGF0aC0+ZGVudHJ5LCBidWYpOworCWlmICghZXJyb3IpCisJCWJ1Zi0+Zl9mbGFncyA9IGNhbGN1bGF0ZV9mX2ZsYWdzKHBhdGgtPm1udCk7CisJcmV0dXJuIGVycm9yOworfQogRVhQT1JUX1NZTUJPTCh2ZnNfc3RhdGZzKTsKIAotc3RhdGljIGludCB2ZnNfc3RhdGZzX25hdGl2ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBzdGF0ZnMgKmJ1ZikKK3N0YXRpYyBpbnQgZG9fc3RhdGZzX25hdGl2ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHN0YXRmcyAqYnVmKQogewogCXN0cnVjdCBrc3RhdGZzIHN0OwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSB2ZnNfc3RhdGZzKGRlbnRyeSwgJnN0KTsKKwlyZXR2YWwgPSB2ZnNfc3RhdGZzKHBhdGgsICZzdCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtNjcsMTcgKzExMiwxOCBAQAogCQlidWYtPmZfZnNpZCA9IHN0LmZfZnNpZDsKIAkJYnVmLT5mX25hbWVsZW4gPSBzdC5mX25hbWVsZW47CiAJCWJ1Zi0+Zl9mcnNpemUgPSBzdC5mX2Zyc2l6ZTsKKwkJYnVmLT5mX2ZsYWdzID0gc3QuZl9mbGFnczsKIAkJbWVtc2V0KGJ1Zi0+Zl9zcGFyZSwgMCwgc2l6ZW9mKGJ1Zi0+Zl9zcGFyZSkpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZnNfc3RhdGZzNjQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qgc3RhdGZzNjQgKmJ1ZikKK3N0YXRpYyBpbnQgZG9fc3RhdGZzNjQoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBzdGF0ZnM2NCAqYnVmKQogewogCXN0cnVjdCBrc3RhdGZzIHN0OwogCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSB2ZnNfc3RhdGZzKGRlbnRyeSwgJnN0KTsKKwlyZXR2YWwgPSB2ZnNfc3RhdGZzKHBhdGgsICZzdCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIApAQCAtOTQsNiArMTQwLDcgQEAKIAkJYnVmLT5mX2ZzaWQgPSBzdC5mX2ZzaWQ7CiAJCWJ1Zi0+Zl9uYW1lbGVuID0gc3QuZl9uYW1lbGVuOwogCQlidWYtPmZfZnJzaXplID0gc3QuZl9mcnNpemU7CisJCWJ1Zi0+Zl9mbGFncyA9IHN0LmZfZmxhZ3M7CiAJCW1lbXNldChidWYtPmZfc3BhcmUsIDAsIHNpemVvZihidWYtPmZfc3BhcmUpKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0xMDcsNyArMTU0LDcgQEAKIAllcnJvciA9IHVzZXJfcGF0aChwYXRobmFtZSwgJnBhdGgpOwogCWlmICghZXJyb3IpIHsKIAkJc3RydWN0IHN0YXRmcyB0bXA7Ci0JCWVycm9yID0gdmZzX3N0YXRmc19uYXRpdmUocGF0aC5kZW50cnksICZ0bXApOworCQllcnJvciA9IGRvX3N0YXRmc19uYXRpdmUoJnBhdGgsICZ0bXApOwogCQlpZiAoIWVycm9yICYmIGNvcHlfdG9fdXNlcihidWYsICZ0bXAsIHNpemVvZih0bXApKSkKIAkJCWVycm9yID0gLUVGQVVMVDsKIAkJcGF0aF9wdXQoJnBhdGgpOwpAQCAtMTI1LDcgKzE3Miw3IEBACiAJZXJyb3IgPSB1c2VyX3BhdGgocGF0aG5hbWUsICZwYXRoKTsKIAlpZiAoIWVycm9yKSB7CiAJCXN0cnVjdCBzdGF0ZnM2NCB0bXA7Ci0JCWVycm9yID0gdmZzX3N0YXRmczY0KHBhdGguZGVudHJ5LCAmdG1wKTsKKwkJZXJyb3IgPSBkb19zdGF0ZnM2NCgmcGF0aCwgJnRtcCk7CiAJCWlmICghZXJyb3IgJiYgY29weV90b191c2VyKGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQkJZXJyb3IgPSAtRUZBVUxUOwogCQlwYXRoX3B1dCgmcGF0aCk7CkBAIC0xNDMsNyArMTkwLDcgQEAKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dDsKLQllcnJvciA9IHZmc19zdGF0ZnNfbmF0aXZlKGZpbGUtPmZfcGF0aC5kZW50cnksICZ0bXApOworCWVycm9yID0gZG9fc3RhdGZzX25hdGl2ZSgmZmlsZS0+Zl9wYXRoLCAmdG1wKTsKIAlpZiAoIWVycm9yICYmIGNvcHlfdG9fdXNlcihidWYsICZ0bXAsIHNpemVvZih0bXApKSkKIAkJZXJyb3IgPSAtRUZBVUxUOwogCWZwdXQoZmlsZSk7CkBAIC0xNjQsNyArMjExLDcgQEAKIAlmaWxlID0gZmdldChmZCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dDsKLQllcnJvciA9IHZmc19zdGF0ZnM2NChmaWxlLT5mX3BhdGguZGVudHJ5LCAmdG1wKTsKKwllcnJvciA9IGRvX3N0YXRmczY0KCZmaWxlLT5mX3BhdGgsICZ0bXApOwogCWlmICghZXJyb3IgJiYgY29weV90b191c2VyKGJ1ZiwgJnRtcCwgc2l6ZW9mKHRtcCkpKQogCQllcnJvciA9IC1FRkFVTFQ7CiAJZnB1dChmaWxlKTsKQEAgLTE4Myw3ICsyMzAsNyBAQAogCWlmICghcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSB2ZnNfc3RhdGZzKHMtPnNfcm9vdCwgJnNidWYpOworCWVyciA9IHN0YXRmc19ieV9kZW50cnkocy0+c19yb290LCAmc2J1Zik7CiAJZHJvcF9zdXBlcihzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggOTM4MTE5YS4uOTY3NGFiMiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0zMDUsOCArMzA1LDEzIEBACiAJCQlpZiAocykgewogCQkJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCQkJZGVzdHJveV9zdXBlcihzKTsKKwkJCQlzID0gTlVMTDsKIAkJCX0KIAkJCWRvd25fd3JpdGUoJm9sZC0+c191bW91bnQpOworCQkJaWYgKHVubGlrZWx5KCEob2xkLT5zX2ZsYWdzICYgTVNfQk9STikpKSB7CisJCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIob2xkKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQogCQkJcmV0dXJuIG9sZDsKIAkJfQogCX0KQEAgLTM1OCwxMCArMzYzLDEwIEBACiAgKi8KIHZvaWQgc3luY19zdXBlcnModm9pZCkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJnNiX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYiwgbiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CiAJCWlmIChsaXN0X2VtcHR5KCZzYi0+c19pbnN0YW5jZXMpKQogCQkJY29udGludWU7CiAJCWlmIChzYi0+c19vcC0+d3JpdGVfc3VwZXIgJiYgc2ItPnNfZGlydCkgewpAQCAtMzc0LDExICszNzksMTMgQEAKIAkJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAKIAkJCXNwaW5fbG9jaygmc2JfbG9jayk7Ci0JCQkvKiBsb2NrIHdhcyBkcm9wcGVkLCBtdXN0IHJlc2V0IG5leHQgKi8KLQkJCWxpc3Rfc2FmZV9yZXNldF9uZXh0KHNiLCBuLCBzX2xpc3QpOwotCQkJX19wdXRfc3VwZXIoc2IpOworCQkJaWYgKHApCisJCQkJX19wdXRfc3VwZXIocCk7CisJCQlwID0gc2I7CiAJCX0KIAl9CisJaWYgKHApCisJCV9fcHV0X3N1cGVyKHApOwogCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKIH0KIApAQCAtMzkyLDEwICszOTksMTAgQEAKICAqLwogdm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJnNiX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYiwgbiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CiAJCWlmIChsaXN0X2VtcHR5KCZzYi0+c19pbnN0YW5jZXMpKQogCQkJY29udGludWU7CiAJCXNiLT5zX2NvdW50Kys7CkBAIC00MDcsMTAgKzQxNCwxMiBAQAogCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOwogCiAJCXNwaW5fbG9jaygmc2JfbG9jayk7Ci0JCS8qIGxvY2sgd2FzIGRyb3BwZWQsIG11c3QgcmVzZXQgbmV4dCAqLwotCQlsaXN0X3NhZmVfcmVzZXRfbmV4dChzYiwgbiwgc19saXN0KTsKLQkJX19wdXRfc3VwZXIoc2IpOworCQlpZiAocCkKKwkJCV9fcHV0X3N1cGVyKHApOworCQlwID0gc2I7CiAJfQorCWlmIChwKQorCQlfX3B1dF9zdXBlcihwKTsKIAlzcGluX3VubG9jaygmc2JfbG9jayk7CiB9CiAKQEAgLTU3MiwxMCArNTgxLDEwIEBACiAKIHN0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqbjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJnNiX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYiwgbiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CiAJCWlmIChsaXN0X2VtcHR5KCZzYi0+c19pbnN0YW5jZXMpKQogCQkJY29udGludWU7CiAJCXNiLT5zX2NvdW50Kys7CkBAIC01ODksMTAgKzU5OCwxMiBAQAogCQl9CiAJCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOwogCQlzcGluX2xvY2soJnNiX2xvY2spOwotCQkvKiBsb2NrIHdhcyBkcm9wcGVkLCBtdXN0IHJlc2V0IG5leHQgKi8KLQkJbGlzdF9zYWZlX3Jlc2V0X25leHQoc2IsIG4sIHNfbGlzdCk7Ci0JCV9fcHV0X3N1cGVyKHNiKTsKKwkJaWYgKHApCisJCQlfX3B1dF9zdXBlcihwKTsKKwkJcCA9IHNiOwogCX0KKwlpZiAocCkKKwkJX19wdXRfc3VwZXIocCk7CiAJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCWtmcmVlKHdvcmspOwogCXByaW50aygiRW1lcmdlbmN5IFJlbW91bnQgY29tcGxldGVcbiIpOwpAQCAtNzczLDcgKzc4NCwxNiBAQAogCQkJZ290byBlcnJvcl9iZGV2OwogCQl9CiAKKwkJLyoKKwkJICogc191bW91bnQgbmVzdHMgaW5zaWRlIGJkX211dGV4IGR1cmluZworCQkgKiBfX2ludmFsaWRhdGVfZGV2aWNlKCkuICBjbG9zZV9iZGV2X2V4Y2x1c2l2ZSgpCisJCSAqIGFjcXVpcmVzIGJkX211dGV4IGFuZCBjYW4ndCBiZSBjYWxsZWQgdW5kZXIKKwkJICogc191bW91bnQuICBEcm9wIHNfdW1vdW50IHRlbXBvcmFyaWx5LiAgVGhpcyBpcyBzYWZlCisJCSAqIGFzIHdlJ3JlIGhvbGRpbmcgYW4gYWN0aXZlIHJlZmVyZW5jZS4KKwkJICovCisJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGJkZXYsIG1vZGUpOworCQlkb3duX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCkBAIC05MDksNiArOTI5LDcgQEAKIAkJZ290byBvdXRfZnJlZV9zZWNkYXRhOwogCUJVR19PTighbW50LT5tbnRfc2IpOwogCVdBUk5fT04oIW1udC0+bW50X3NiLT5zX2JkaSk7CisJbW50LT5tbnRfc2ItPnNfZmxhZ3MgfD0gTVNfQk9STjsKIAogCWVycm9yID0gc2VjdXJpdHlfc2Jfa2Vybl9tb3VudChtbnQtPm1udF9zYiwgZmxhZ3MsIHNlY2RhdGEpOwogCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL3N5bmMuYyBiL2ZzL3N5bmMuYwppbmRleCAxNWFhNmYwLi5iYTc2Yjk2IDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC0xMjgsMzEgKzEyOCw2IEBACiAJfQogfQogCi0vKgotICogR2VuZXJpYyBmdW5jdGlvbiB0byBmc3luYyBhIGZpbGUuCi0gKi8KLWludCBmaWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYjsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBzeW5jIHRoZSBpbm9kZSB0byBidWZmZXJzICovCi0JcmV0ID0gd3JpdGVfaW5vZGVfbm93KGlub2RlLCAwKTsKLQotCS8qIHN5bmMgdGhlIHN1cGVyYmxvY2sgdG8gYnVmZmVycyAqLwotCXNiID0gaW5vZGUtPmlfc2I7Ci0JaWYgKHNiLT5zX2RpcnQgJiYgc2ItPnNfb3AtPndyaXRlX3N1cGVyKQotCQlzYi0+c19vcC0+d3JpdGVfc3VwZXIoc2IpOwotCi0JLyogLi4gZmluYWxseSBzeW5jIHRoZSBidWZmZXJzIHRvIGRpc2sgKi8KLQllcnIgPSBzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZmlsZV9mc3luYyk7Ci0KIC8qKgogICogdmZzX2ZzeW5jX3JhbmdlIC0gaGVscGVyIHRvIHN5bmMgYSByYW5nZSBvZiBkYXRhICYgbWV0YWRhdGEgdG8gZGlzawogICogQGZpbGU6CQlmaWxlIHRvIHN5bmMKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCAxYmVhYTczLi4xYjI3YjU2IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC01OTMsNyArNTkzLDggQEAKICAqIEBtb2RlOiBmaWxlIHBlcm1pc3Npb25zLgogICoKICAqLwotaW50IHN5c2ZzX2NobW9kX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIG1vZGVfdCBtb2RlKQoraW50IHN5c2ZzX2NobW9kX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgbW9kZV90IG1vZGUpCiB7CiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGlhdHRyIG5ld2F0dHJzOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvaW5vZGUuYyBiL2ZzL3N5c2ZzL2lub2RlLmMKaW5kZXggMDgzNWEzYi4uY2ZmYjFmZCAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvaW5vZGUuYworKysgYi9mcy9zeXNmcy9pbm9kZS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiB0aGlzIGlnbm9yZXMgc2l6ZSBjaGFuZ2VzICovCi0JZ2VuZXJpY19zZXRhdHRyKGlub2RlLCBpYXR0cik7CisJc2V0YXR0cl9jb3B5KGlub2RlLCBpYXR0cik7CiAKIG91dDoKIAltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKQEAgLTMxMiwxNSArMzEyLDE1IEBACiAgKiBUaGUgc3lzZnNfZGlyZW50IHNlcnZlcyBhcyBib3RoIGFuIGlub2RlIGFuZCBhIGRpcmVjdG9yeSBlbnRyeSBmb3Igc3lzZnMuCiAgKiBUbyBwcmV2ZW50IHRoZSBzeXNmcyBpbm9kZSBudW1iZXJzIGZyb20gYmVpbmcgZnJlZWQgcHJlbWF0dXJlbHkgd2UgdGFrZSBhCiAgKiByZWZlcmVuY2UgdG8gc3lzZnNfZGlyZW50IGZyb20gdGhlIHN5c2ZzIGlub2RlLiAgQQotICogc3VwZXJfb3BlcmF0aW9ucy5kZWxldGVfaW5vZGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQgdG8gZHJvcCB0aGF0CisgKiBzdXBlcl9vcGVyYXRpb25zLmV2aWN0X2lub2RlKCkgaW1wbGVtZW50YXRpb24gaXMgbmVlZGVkIHRvIGRyb3AgdGhhdAogICogcmVmZXJlbmNlIHVwb24gaW5vZGUgZGVzdHJ1Y3Rpb24uCiAgKi8KLXZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIHN5c2ZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QgID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQljbGVhcl9pbm9kZShpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJc3lzZnNfcHV0KHNkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggMjgxYzBjOS4uZjJhZjIyNSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC0yOSw3ICsyOSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzZnNfb3BzID0gewogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAotCS5kZWxldGVfaW5vZGUJPSBzeXNmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gc3lzZnNfZXZpY3RfaW5vZGUsCiB9OwogCiBzdHJ1Y3Qgc3lzZnNfZGlyZW50IHN5c2ZzX3Jvb3QgPSB7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9zeXNmcy5oIGIvZnMvc3lzZnMvc3lzZnMuaAppbmRleCA2YTEzMTA1Li5kOWJlNjBhIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeXNmcy5oCisrKyBiL2ZzL3N5c2ZzL3N5c2ZzLmgKQEAgLTE5OCw3ICsxOTgsNyBAQAogICogaW5vZGUuYwogICovCiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Ci12b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgc3lzZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgc3lzZnNfc2Rfc2V0YXR0cihzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCwgc3RydWN0IGlhdHRyICppYXR0cik7CiBpbnQgc3lzZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiBpbnQgc3lzZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9kaXIuYyBiL2ZzL3N5c3YvZGlyLmMKaW5kZXggNzk5NDFlNC4uYTc3YzQyMSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9kaXIuYworKysgYi9mcy9zeXN2L2Rpci5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAlwb3MgPSBwYWdlX29mZnNldChwYWdlKSArCiAJCQkoY2hhciopZGUgLSAoY2hhciopcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX3N5c3Zfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCBTWVNWX0RJUlNJWkUsCi0JCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gc3lzdl9wcmVwYXJlX2NodW5rKHBhZ2UsIHBvcywgU1lTVl9ESVJTSVpFKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmxvY2s7CiAJbWVtY3B5IChkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CkBAIC0yMzksMTUgKzIzOCwxMyBAQAogCiBpbnQgc3lzdl9kZWxldGVfZW50cnkoc3RydWN0IHN5c3ZfZGlyX2VudHJ5ICpkZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAoc3RydWN0IGlub2RlKiltYXBwaW5nLT5ob3N0OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCWNoYXIgKmthZGRyID0gKGNoYXIqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlsb2ZmX3QgcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKyAoY2hhciAqKWRlIC0ga2FkZHI7CiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX3N5c3Zfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgcG9zLCBTWVNWX0RJUlNJWkUsCi0JCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gc3lzdl9wcmVwYXJlX2NodW5rKHBhZ2UsIHBvcywgU1lTVl9ESVJTSVpFKTsKIAlCVUdfT04oZXJyKTsKIAlkZS0+aW5vZGUgPSAwOwogCWVyciA9IGRpcl9jb21taXRfY2h1bmsocGFnZSwgcG9zLCBTWVNWX0RJUlNJWkUpOwpAQCAtMjU5LDE2ICsyNTYsMTQgQEAKIAogaW50IHN5c3ZfbWFrZV9lbXB0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgMCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgMCk7CiAJc3RydWN0IHN5c3ZfZGlyX2VudHJ5ICogZGU7CiAJY2hhciAqYmFzZTsKIAlpbnQgZXJyOwogCiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKLQllcnIgPSBfX3N5c3Zfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgMCwgMiAqIFNZU1ZfRElSU0laRSwKLQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwllcnIgPSBzeXN2X3ByZXBhcmVfY2h1bmsocGFnZSwgMCwgMiAqIFNZU1ZfRElSU0laRSk7CiAJaWYgKGVycikgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZ290byBmYWlsOwpAQCAtMzQxLDE1ICszMzYsMTMgQEAKIHZvaWQgc3lzdl9zZXRfbGluayhzdHJ1Y3Qgc3lzdl9kaXJfZW50cnkgKmRlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmRpciA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IGlub2RlICpkaXIgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArCiAJCQkoY2hhciAqKWRlLShjaGFyKilwYWdlX2FkZHJlc3MocGFnZSk7CiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX3N5c3Zfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgcG9zLCBTWVNWX0RJUlNJWkUsCi0JCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gc3lzdl9wcmVwYXJlX2NodW5rKHBhZ2UsIHBvcywgU1lTVl9ESVJTSVpFKTsKIAlCVUdfT04oZXJyKTsKIAlkZS0+aW5vZGUgPSBjcHVfdG9fZnMxNihTWVNWX1NCKGlub2RlLT5pX3NiKSwgaW5vZGUtPmlfaW5vKTsKIAllcnIgPSBkaXJfY29tbWl0X2NodW5rKHBhZ2UsIHBvcywgU1lTVl9ESVJTSVpFKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c3YvZmlsZS5jIGIvZnMvc3lzdi9maWxlLmMKaW5kZXggNzUwY2MyMi4uMGE2NTkzOSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9maWxlLmMKKysrIGIvZnMvc3lzdi9maWxlLmMKQEAgLTMwLDcgKzMwLDI5IEBACiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogfTsKIAorc3RhdGljIGludCBzeXN2X3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gMDsKK30KKwogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3lzdl9maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gc3lzdl90cnVuY2F0ZSwKKwkuc2V0YXR0cgk9IHN5c3Zfc2V0YXR0ciwKIAkuZ2V0YXR0cgk9IHN5c3ZfZ2V0YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9zeXN2L2lhbGxvYy5jIGIvZnMvc3lzdi9pYWxsb2MuYwppbmRleCBmY2M0OThlLi4wYzk2Yzk4IDEwMDY0NAotLS0gYS9mcy9zeXN2L2lhbGxvYy5jCisrKyBiL2ZzL3N5c3YvaWFsbG9jLmMKQEAgLTExMyw3ICsxMTMsNiBAQAogCQlyZXR1cm47CiAJfQogCXJhd19pbm9kZSA9IHN5c3ZfcmF3X2lub2RlKHNiLCBpbm8sICZiaCk7Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOwogCWlmICghcmF3X2lub2RlKSB7CiAJCXByaW50aygic3lzdl9mcmVlX2lub2RlOiB1bmFibGUgdG8gcmVhZCBpbm9kZSBibG9jayBvbiBkZXZpY2UgIgogCQkgICAgICAgIiVzXG4iLCBpbm9kZS0+aV9zYi0+c19pZCk7CmRpZmYgLS1naXQgYS9mcy9zeXN2L2lub2RlLmMgYi9mcy9zeXN2L2lub2RlLmMKaW5kZXggZDRhNTM4MC4uZGU0NGQwNiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9pbm9kZS5jCisrKyBiL2ZzL3N5c3YvaW5vZGUuYwpAQCAtNzEsOCArNzEsOCBAQAogCWxvY2tfc3VwZXIoc2IpOwogCWlmIChzYmktPnNfZm9yY2VkX3JvKQogCQkqZmxhZ3MgfD0gTVNfUkRPTkxZOwotCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpCi0JCXNiLT5zX2RpcnQgPSAxOworCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpCisJCXN5c3Zfd3JpdGVfc3VwZXIoc2IpOwogCXVubG9ja19zdXBlcihzYik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDgsMTIgKzMwOCwxNyBAQAogCXJldHVybiBfX3N5c3Zfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwogfQogCi1zdGF0aWMgdm9pZCBzeXN2X2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgc3lzdl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKLQlpbm9kZS0+aV9zaXplID0gMDsKLQlzeXN2X3RydW5jYXRlKGlub2RlKTsKLQlzeXN2X2ZyZWVfaW5vZGUoaW5vZGUpOworCWlmICghaW5vZGUtPmlfbmxpbmspIHsKKwkJaW5vZGUtPmlfc2l6ZSA9IDA7CisJCXN5c3ZfdHJ1bmNhdGUoaW5vZGUpOworCX0KKwlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCWlmICghaW5vZGUtPmlfbmxpbmspCisJCXN5c3ZfZnJlZV9pbm9kZShpbm9kZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqc3lzdl9pbm9kZV9jYWNoZXA7CkBAIC0zNDQsNyArMzQ5LDcgQEAKIAkuYWxsb2NfaW5vZGUJPSBzeXN2X2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gc3lzdl9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IHN5c3Zfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZQk9IHN5c3ZfZGVsZXRlX2lub2RlLAorCS5ldmljdF9pbm9kZQk9IHN5c3ZfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IHN5c3ZfcHV0X3N1cGVyLAogCS53cml0ZV9zdXBlcgk9IHN5c3Zfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBzeXN2X3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy9zeXN2L2l0cmVlLmMgYi9mcy9zeXN2L2l0cmVlLmMKaW5kZXggZjA0MmVlYy4uOWNhNjYyNyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9pdHJlZS5jCisrKyBiL2ZzL3N5c3YvaXRyZWUuYwpAQCAtNDU5LDIwICs0NTksMjUgQEAKIAlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX3BhZ2UocGFnZSxnZXRfYmxvY2spOwogfQogCi1pbnQgX19zeXN2X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCi0JCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQoraW50IHN5c3ZfcHJlcGFyZV9jaHVuayhzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQogewotCXJldHVybiBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCi0JCQkJZ2V0X2Jsb2NrKTsKKwlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBwb3MsIGxlbiwgZ2V0X2Jsb2NrKTsKIH0KIAogc3RhdGljIGludCBzeXN2X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewotCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIF9fc3lzdl93cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEpOworCWludCByZXQ7CisKKwlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBnZXRfYmxvY2spOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKKwkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNlY3Rvcl90IHN5c3ZfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCmRpZmYgLS1naXQgYS9mcy9zeXN2L3N1cGVyLmMgYi9mcy9zeXN2L3N1cGVyLmMKaW5kZXggNWE5MDNkYS4uYTBiMGNkYSAxMDA2NDQKLS0tIGEvZnMvc3lzdi9zdXBlci5jCisrKyBiL2ZzL3N5c3Yvc3VwZXIuYwpAQCAtMzQ3LDcgKzM0Nyw2IEBACiAJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAlpZiAoc2JpLT5zX3RydW5jYXRlKQogCQlzYi0+c19yb290LT5kX29wID0gJnN5c3ZfZGVudHJ5X29wZXJhdGlvbnM7Ci0Jc2ItPnNfZGlydCA9IDE7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQzNSwxMiArNDM0LDQ2IEBACiAJZ290byBmYWlsZWQ7CiB9CiAKK3N0YXRpYyBpbnQgdjdfc2FuaXR5X2NoZWNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJc3RydWN0IHY3X3N1cGVyX2Jsb2NrICp2N3NiOworCXN0cnVjdCBzeXN2X2lub2RlICp2N2k7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDI7CisJc3RydWN0IHN5c3Zfc2JfaW5mbyAqc2JpOworCisJc2JpID0gc2ItPnNfZnNfaW5mbzsKKworCS8qIHBsYXVzaWJpbGl0eSBjaGVjayBvbiBzdXBlcmJsb2NrICovCisJdjdzYiA9IChzdHJ1Y3Qgdjdfc3VwZXJfYmxvY2sgKikgYmgtPmJfZGF0YTsKKwlpZiAoZnMxNl90b19jcHUoc2JpLCB2N3NiLT5zX25mcmVlKSA+IFY3X05JQ0ZSRUUgfHwKKwkgICAgZnMxNl90b19jcHUoc2JpLCB2N3NiLT5zX25pbm9kZSkgPiBWN19OSUNJTk9EIHx8CisJICAgIGZzMzJfdG9fY3B1KHNiaSwgdjdzYi0+c19mc2l6ZSkgPiBWN19NQVhTSVpFKQorCQlyZXR1cm4gMDsKKworCS8qIHBsYXVzaWJpbGl0eSBjaGVjayBvbiByb290IGlub2RlOiBpdCBpcyBhIGRpcmVjdG9yeSwKKwkgICB3aXRoIGEgbm9uemVybyBzaXplIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiAxNiAqLworCWJoMiA9IHNiX2JyZWFkKHNiLCAyKTsKKwlpZiAoYmgyID09IE5VTEwpCisJCXJldHVybiAwOworCisJdjdpID0gKHN0cnVjdCBzeXN2X2lub2RlICopKGJoMi0+Yl9kYXRhICsgNjQpOworCWlmICgoZnMxNl90b19jcHUoc2JpLCB2N2ktPmlfbW9kZSkgJiB+MDc3NykgIT0gU19JRkRJUiB8fAorCSAgICAoZnMzMl90b19jcHUoc2JpLCB2N2ktPmlfc2l6ZSkgPT0gMCkgfHwKKwkgICAgKGZzMzJfdG9fY3B1KHNiaSwgdjdpLT5pX3NpemUpICYgMDE3KSB8fAorCSAgICAoZnMzMl90b19jcHUoc2JpLCB2N2ktPmlfc2l6ZSkgPiBWN19ORklMRVMgKgorCSAgICAgc2l6ZW9mKHN0cnVjdCBzeXN2X2Rpcl9lbnRyeSkpKSB7CisJCWJyZWxzZShiaDIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlicmVsc2UoYmgyKTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCB2N19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CiAJc3RydWN0IHN5c3Zfc2JfaW5mbyAqc2JpOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpiaDIgPSBOVUxMOwotCXN0cnVjdCB2N19zdXBlcl9ibG9jayAqdjdzYjsKLQlzdHJ1Y3Qgc3lzdl9pbm9kZSAqdjdpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAKIAlpZiAoNDQwICE9IHNpemVvZiAoc3RydWN0IHY3X3N1cGVyX2Jsb2NrKSkKIAkJcGFuaWMoIlY3IEZTOiBiYWQgc3VwZXItYmxvY2sgc2l6ZSIpOwpAQCAtNDU0LDcgKzQ4Nyw2IEBACiAJc2JpLT5zX3NiID0gc2I7CiAJc2JpLT5zX2Jsb2NrX2Jhc2UgPSAwOwogCXNiaS0+c190eXBlID0gRlNUWVBFX1Y3OwotCXNiaS0+c19ieXRlc2V4ID0gQllURVNFWF9QRFA7CiAJc2ItPnNfZnNfaW5mbyA9IHNiaTsKIAkKIAlzYl9zZXRfYmxvY2tzaXplKHNiLCA1MTIpOwpAQCAtNDY2LDMyICs0OTgsMjcgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JLyogcGxhdXNpYmlsaXR5IGNoZWNrIG9uIHN1cGVyYmxvY2sgKi8KLQl2N3NiID0gKHN0cnVjdCB2N19zdXBlcl9ibG9jayAqKSBiaC0+Yl9kYXRhOwotCWlmIChmczE2X3RvX2NwdShzYmksIHY3c2ItPnNfbmZyZWUpID4gVjdfTklDRlJFRSB8fAotCSAgICBmczE2X3RvX2NwdShzYmksIHY3c2ItPnNfbmlub2RlKSA+IFY3X05JQ0lOT0QgfHwKLQkgICAgZnMzMl90b19jcHUoc2JpLCB2N3NiLT5zX3RpbWUpID09IDApCi0JCWdvdG8gZmFpbGVkOworCS8qIFRyeSBQRFAtMTEgVU5JWCAqLworCXNiaS0+c19ieXRlc2V4ID0gQllURVNFWF9QRFA7CisJaWYgKHY3X3Nhbml0eV9jaGVjayhzYiwgYmgpKQorCQlnb3RvIGRldGVjdGVkOwogCi0JLyogcGxhdXNpYmlsaXR5IGNoZWNrIG9uIHJvb3QgaW5vZGU6IGl0IGlzIGEgZGlyZWN0b3J5LAotCSAgIHdpdGggYSBub256ZXJvIHNpemUgdGhhdCBpcyBhIG11bHRpcGxlIG9mIDE2ICovCi0JaWYgKChiaDIgPSBzYl9icmVhZChzYiwgMikpID09IE5VTEwpCi0JCWdvdG8gZmFpbGVkOwotCXY3aSA9IChzdHJ1Y3Qgc3lzdl9pbm9kZSAqKShiaDItPmJfZGF0YSArIDY0KTsKLQlpZiAoKGZzMTZfdG9fY3B1KHNiaSwgdjdpLT5pX21vZGUpICYgfjA3NzcpICE9IFNfSUZESVIgfHwKLQkgICAgKGZzMzJfdG9fY3B1KHNiaSwgdjdpLT5pX3NpemUpID09IDApIHx8Ci0JICAgIChmczMyX3RvX2NwdShzYmksIHY3aS0+aV9zaXplKSAmIDAxNykgIT0gMCkKLQkJZ290byBmYWlsZWQ7Ci0JYnJlbHNlKGJoMik7Ci0JYmgyID0gTlVMTDsKKwkvKiBUcnkgUEMvSVgsIHY3L3g4NiAqLworCXNiaS0+c19ieXRlc2V4ID0gQllURVNFWF9MRTsKKwlpZiAodjdfc2FuaXR5X2NoZWNrKHNiLCBiaCkpCisJCWdvdG8gZGV0ZWN0ZWQ7CiAKKwlnb3RvIGZhaWxlZDsKKworZGV0ZWN0ZWQ6CiAJc2JpLT5zX2JoMSA9IGJoOwogCXNiaS0+c19iaDIgPSBiaDsKIAlpZiAoY29tcGxldGVfcmVhZF9zdXBlcihzYiwgc2lsZW50LCAxKSkKIAkJcmV0dXJuIDA7CiAKIGZhaWxlZDoKLQlicmVsc2UoYmgyKTsKKwlwcmludGsoS0VSTl9FUlIgIlZGUzogY291bGQgbm90IGZpbmQgYSB2YWxpZCBWNyBvbiAlcy5cbiIsCisJCXNiLT5zX2lkKTsKIAlicmVsc2UoYmgpOwogCWtmcmVlKHNiaSk7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC01NjAsNCArNTg3LDUgQEAKIAogbW9kdWxlX2luaXQoaW5pdF9zeXN2X2ZzKQogbW9kdWxlX2V4aXQoZXhpdF9zeXN2X2ZzKQorTU9EVUxFX0FMSUFTKCJ2NyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9zeXN2LmggYi9mcy9zeXN2L3N5c3YuaAppbmRleCA5NGNiOWI0Li5iYjU1Y2RiIDEwMDY0NAotLS0gYS9mcy9zeXN2L3N5c3YuaAorKysgYi9mcy9zeXN2L3N5c3YuaApAQCAtMTM2LDkgKzEzNiw3IEBACiAKIC8qIGl0cmVlLmMgKi8KIGV4dGVybiB2b2lkIHN5c3ZfdHJ1bmNhdGUoc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGludCBfX3N5c3Zfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKLQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpOworZXh0ZXJuIGludCBzeXN2X3ByZXBhcmVfY2h1bmsoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbik7CiAKIC8qIGlub2RlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKnN5c3ZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50KTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2ZpbGUuYyBiL2ZzL3ViaWZzL2ZpbGUuYwppbmRleCAxMmY0NDVjLi4wM2FlODk0IDEwMDY0NAotLS0gYS9mcy91Ymlmcy9maWxlLmMKKysrIGIvZnMvdWJpZnMvZmlsZS5jCkBAIC05NjcsMTQgKzk2NywxNSBAQAogICogdGhlIHBhZ2UgbG9ja2VkLCBhbmQgaXQgbG9ja3MgQHVpX211dGV4LiBIb3dldmVyLCB3cml0ZS1iYWNrIGRvZXMgdGFrZSBpbm9kZQogICogQGlfbXV0ZXgsIHdoaWNoIG1lYW5zIG90aGVyIFZGUyBvcGVyYXRpb25zIG1heSBiZSBydW4gb24gdGhpcyBpbm9kZSBhdCB0aGUKICAqIHNhbWUgdGltZS4gQW5kIHRoZSBwcm9ibGVtYXRpYyBvbmUgaXMgdHJ1bmNhdGlvbiB0byBzbWFsbGVyIHNpemUsIGZyb20gd2hlcmUKLSAqIHdlIGhhdmUgdG8gY2FsbCAnc2ltcGxlX3NldHNpemUoKScsIHdoaWNoIGZpcnN0IGNoYW5nZXMgQGlub2RlLT5pX3NpemUsIHRoZW4KKyAqIHdlIGhhdmUgdG8gY2FsbCAndHJ1bmNhdGVfc2V0c2l6ZSgpJywgd2hpY2ggZmlyc3QgY2hhbmdlcyBAaW5vZGUtPmlfc2l6ZSwgdGhlbgogICogZHJvcHMgdGhlIHRydW5jYXRlZCBwYWdlcy4gQW5kIHdoaWxlIGRyb3BwaW5nIHRoZSBwYWdlcywgaXQgdGFrZXMgdGhlIHBhZ2UKLSAqIGxvY2suIFRoaXMgbWVhbnMgdGhhdCAnZG9fdHJ1bmNhdGlvbigpJyBjYW5ub3QgY2FsbCAnc2ltcGxlX3NldHNpemUoKScgd2l0aAorICogbG9jay4gVGhpcyBtZWFucyB0aGF0ICdkb190cnVuY2F0aW9uKCknIGNhbm5vdCBjYWxsICd0cnVuY2F0ZV9zZXRzaXplKCknIHdpdGgKICAqIEB1aV9tdXRleCBsb2NrZWQsIGJlY2F1c2UgaXQgd291bGQgZGVhZGxvY2sgd2l0aCAndWJpZnNfd3JpdGVwYWdlKCknLiBUaGlzCiAgKiBtZWFucyB0aGF0IEBpbm9kZS0+aV9zaXplIGlzIGNoYW5nZWQgd2hpbGUgQHVpX211dGV4IGlzIHVubG9ja2VkLgogICoKLSAqIFhYWDogd2l0aCB0aGUgbmV3IHRydW5jYXRlIHRoZSBhYm92ZSBpcyBub3QgdHJ1ZSBhbnltb3JlLCB0aGUgc2ltcGxlX3NldHNpemUKLSAqIGNhbGxzIGNhbiBiZSByZXBsYWNlZCB3aXRoIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMuCisgKiBYWFgodHJ1bmNhdGUpOiB3aXRoIHRoZSBuZXcgdHJ1bmNhdGUgc2VxdWVuY2UgdGhpcyBpcyBub3QgdHJ1ZSBhbnltb3JlLAorICogYW5kIHRoZSBjYWxscyB0byB0cnVuY2F0ZV9zZXRzaXplIGNhbiBiZSBtb3ZlIGFyb3VuZCBmcmVlbHkuICBUaGV5IHNob3VsZAorICogYmUgbW92ZWQgdG8gdGhlIHZlcnkgZW5kIG9mIHRoZSB0cnVuY2F0ZSBzZXF1ZW5jZS4KICAqCiAgKiBCdXQgaW4gJ3ViaWZzX3dyaXRlcGFnZSgpJyB3ZSBoYXZlIHRvIGd1YXJhbnRlZSB0aGF0IHdlIGRvIG5vdCB3cml0ZSBiZXlvbmQKICAqIGlub2RlIHNpemUuIEhvdyBkbyB3ZSBkbyB0aGlzIGlmIEBpbm9kZS0+aV9zaXplIG1heSBiZWNhbWUgc21hbGxlciB3aGlsZSB3ZQpAQCAtMTEyOCw5ICsxMTI5LDcgQEAKIAkJYnVkZ2V0ZWQgPSAwOwogCX0KIAotCWVyciA9IHNpbXBsZV9zZXRzaXplKGlub2RlLCBuZXdfc2l6ZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfYnVkZzsKKwl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBuZXdfc2l6ZSk7CiAKIAlpZiAob2Zmc2V0KSB7CiAJCXBnb2ZmX3QgaW5kZXggPSBuZXdfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwpAQCAtMTIxNywxNiArMTIxNiwxNCBAQAogCiAJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CiAJCWRiZ19nZW4oInNpemUgJWxsZCAtPiAlbGxkIiwgaW5vZGUtPmlfc2l6ZSwgbmV3X3NpemUpOwotCQllcnIgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgbmV3X3NpemUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7CisJCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIG5ld19zaXplKTsKIAl9CiAKIAltdXRleF9sb2NrKCZ1aS0+dWlfbXV0ZXgpOwogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewogCQkvKiBUcnVuY2F0aW9uIGNoYW5nZXMgaW5vZGUgW21jXXRpbWUgKi8KIAkJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHViaWZzX2N1cnJlbnRfdGltZShpbm9kZSk7Ci0JCS8qICdzaW1wbGVfc2V0c2l6ZSgpJyBjaGFuZ2VkIEBpX3NpemUsIHVwZGF0ZSBAdWlfc2l6ZSAqLworCQkvKiAndHJ1bmNhdGVfc2V0c2l6ZSgpJyBjaGFuZ2VkIEBpX3NpemUsIHVwZGF0ZSBAdWlfc2l6ZSAqLwogCQl1aS0+dWlfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJfQogCkBAIC0xMjQ4LDEwICsxMjQ1LDYgQEAKIAlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCWVyciA9IGlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShpbm9kZSwgTlVMTCk7CiAJcmV0dXJuIGVycjsKLQotb3V0OgotCXViaWZzX3JlbGVhc2VfYnVkZ2V0KGMsICZyZXEpOwotCXJldHVybiBlcnI7CiB9CiAKIGludCB1Ymlmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggNWZjNWEwOS4uY2Q1OTAwYiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCB1Ymlmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHViaWZzX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgdWJpZnNfaW5mbyAqYyA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CkBAIC0zNDMsOSArMzQzLDEyIEBACiAKIAlkYmdfZ2VuKCJpbm9kZSAlbHUsIG1vZGUgJSN4IiwgaW5vZGUtPmlfaW5vLCAoaW50KWlub2RlLT5pX21vZGUpOwogCXViaWZzX2Fzc2VydCghYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSk7Ci0JdWJpZnNfYXNzZXJ0KGlub2RlLT5pX25saW5rID09IDApOwogCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCisJaWYgKGlub2RlLT5pX25saW5rKQorCQlnb3RvIGRvbmU7CisKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZ290byBvdXQ7CiAKQEAgLTM2Nyw3ICszNzAsOCBAQAogCQljLT5ub3NwYWNlID0gYy0+bm9zcGFjZV9ycCA9IDA7CiAJCXNtcF93bWIoKTsKIAl9Ci0JY2xlYXJfaW5vZGUoaW5vZGUpOworZG9uZToKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIH0KIAogc3RhdGljIHZvaWQgdWJpZnNfZGlydHlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTE4MjYsNyArMTgzMCw3IEBACiAJLmRlc3Ryb3lfaW5vZGUgPSB1Ymlmc19kZXN0cm95X2lub2RlLAogCS5wdXRfc3VwZXIgICAgID0gdWJpZnNfcHV0X3N1cGVyLAogCS53cml0ZV9pbm9kZSAgID0gdWJpZnNfd3JpdGVfaW5vZGUsCi0JLmRlbGV0ZV9pbm9kZSAgPSB1Ymlmc19kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlICAgPSB1Ymlmc19ldmljdF9pbm9kZSwKIAkuc3RhdGZzICAgICAgICA9IHViaWZzX3N0YXRmcywKIAkuZGlydHlfaW5vZGUgICA9IHViaWZzX2RpcnR5X2lub2RlLAogCS5yZW1vdW50X2ZzICAgID0gdWJpZnNfcmVtb3VudF9mcywKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3ViaWZzLmggYi9mcy91Ymlmcy91Ymlmcy5oCmluZGV4IDA0MzEwODcuLjBjOTg3NmIgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3ViaWZzLmgKKysrIGIvZnMvdWJpZnMvdWJpZnMuaApAQCAtMzc5LDcgKzM3OSw3IEBACiAgKiBUaGUgQHVpX3NpemUgaXMgYSAic2hhZG93IiB2YXJpYWJsZSBmb3IgQGlub2RlLT5pX3NpemUgYW5kIFVCSUZTIHVzZXMKICAqIEB1aV9zaXplIGluc3RlYWQgb2YgQGlub2RlLT5pX3NpemUuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBVQklGUyBjYW5ub3QKICAqIG1ha2Ugc3VyZSBAaW5vZGUtPmlfc2l6ZSBpcyBhbHdheXMgY2hhbmdlZCB1bmRlciBAdWlfbXV0ZXgsIGJlY2F1c2UgaXQKLSAqIGNhbm5vdCBjYWxsICdzaW1wbGVfc2V0c2l6ZSgpJyB3aXRoIEB1aV9tdXRleCBsb2NrZWQsIGJlY2F1c2UgaXQgd291bGQgZGVhZGxvY2sKKyAqIGNhbm5vdCBjYWxsICd0cnVuY2F0ZV9zZXRzaXplKCknIHdpdGggQHVpX211dGV4IGxvY2tlZCwgYmVjYXVzZSBpdCB3b3VsZCBkZWFkbG9jawogICogd2l0aCAndWJpZnNfd3JpdGVwYWdlKCknIChzZWUgZmlsZS5jKS4gQWxsIHRoZSBvdGhlciBpbm9kZSBmaWVsZHMgYXJlCiAgKiBjaGFuZ2VkIHVuZGVyIEB1aV9tdXRleCwgc28gdGhleSBkbyBub3QgbmVlZCAic2hhZG93IiBmaWVsZHMuIE5vdGUsIG9uZQogICogY291bGQgY29uc2lkZXIgdG8gcmV3b3JrIGxvY2tpbmcgYW5kIGJhc2UgaXQgb24gInNoYWRvdyIgZmllbGRzLgpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggOTRlMDZkNi4uNjZiOWU3ZSAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgInVkZl9pLmgiCiAjaW5jbHVkZSAidWRmX3NiLmgiCkBAIC0yMjgsNiArMjI3LDI4IEBACiAJLmxsc2VlawkJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKK3N0YXRpYyBpbnQgdWRmX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSAmJgorCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQllcnJvciA9IHZtdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gMDsKK30KKwogY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuc2V0YXR0cgkJPSB1ZGZfc2V0YXR0ciwKIAkudHJ1bmNhdGUJCT0gdWRmX3RydW5jYXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pYWxsb2MuYyBiL2ZzL3VkZi9pYWxsb2MuYwppbmRleCAxOGNkNzExLi43NWQ5MzA0IDEwMDY0NAotLS0gYS9mcy91ZGYvaWFsbG9jLmMKKysrIGIvZnMvdWRmL2lhbGxvYy5jCkBAIC0zMSw4ICszMSw2IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAotCWNsZWFyX2lub2RlKGlub2RlKTsKLQogCW11dGV4X2xvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJaWYgKHNiaS0+c19sdmlkX2JoKSB7CiAJCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzY0ltcFVzZSAqbHZpZGl1ID0KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggMTI0ODUyYi4uZmM0OGYzNyAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTY4LDM3ICs2OCwyMyBAQAogc3RhdGljIGludCB1ZGZfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CiAKIAotdm9pZCB1ZGZfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCi0JaWYgKGlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCWdvdG8gbm9fZGVsZXRlOwotCi0JaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JdWRmX3RydW5jYXRlKGlub2RlKTsKLQlsb2NrX2tlcm5lbCgpOwotCi0JdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpOwotCXVkZl9mcmVlX2lub2RlKGlub2RlKTsKLQotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm47Ci0KLW5vX2RlbGV0ZToKLQljbGVhcl9pbm9kZShpbm9kZSk7Ci19Ci0KLS8qCi0gKiBJZiB3ZSBhcmUgZ29pbmcgdG8gcmVsZWFzZSBpbm9kZSBmcm9tIG1lbW9yeSwgd2UgdHJ1bmNhdGUgbGFzdCBpbm9kZSBleHRlbnQKLSAqIHRvIHByb3BlciBsZW5ndGguIFdlIGNvdWxkIHVzZSBkcm9wX2lub2RlKCkgYnV0IGl0J3MgY2FsbGVkIHVuZGVyIGlub2RlX2xvY2sKLSAqIGFuZCB0aHVzIHdlIGNhbm5vdCBtYXJrIGlub2RlIGRpcnR5IHRoZXJlLiAgV2UgdXNlIGNsZWFyX2lub2RlKCkgYnV0IHdlIGhhdmUKLSAqIHRvIG1ha2Ugc3VyZSB0byB3cml0ZSBpbm9kZSBhcyBpdCdzIG5vdCB3cml0dGVuIGF1dG9tYXRpY2FsbHkuCi0gKi8KLXZvaWQgdWRmX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSShpbm9kZSk7CisJaW50IHdhbnRfZGVsZXRlID0gMDsKIAorCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKworCWlmICghaW5vZGUtPmlfbmxpbmsgJiYgIWlzX2JhZF9pbm9kZShpbm9kZSkpIHsKKwkJd2FudF9kZWxldGUgPSAxOworCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJdWRmX3RydW5jYXRlKGlub2RlKTsKKwkJbG9ja19rZXJuZWwoKTsKKwkJdWRmX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpOworCQl1bmxvY2tfa2VybmVsKCk7CisJfQorCWludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhpbm9kZSk7CisJZW5kX3dyaXRlYmFjayhpbm9kZSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmCiAJICAgIGlub2RlLT5pX3NpemUgIT0gaWluZm8tPmlfbGVuRXh0ZW50cykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnMgKCVzKTogSW5vZGUgJWx1IChtb2RlICVvKSBoYXMgIgpAQCAtMTA4LDkgKzk0LDEzIEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLT5pX3NpemUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlpbmZvLT5pX2xlbkV4dGVudHMpOwogCX0KLQogCWtmcmVlKGlpbmZvLT5pX2V4dC5pX2RhdGEpOwogCWlpbmZvLT5pX2V4dC5pX2RhdGEgPSBOVUxMOworCWlmICh3YW50X2RlbGV0ZSkgeworCQlsb2NrX2tlcm5lbCgpOworCQl1ZGZfZnJlZV9pbm9kZShpbm9kZSk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgdWRmX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCkBAIC0xMjcsOSArMTE3LDE2IEBACiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKIHsKLQkqcGFnZXAgPSBOVUxMOwotCXJldHVybiBibG9ja193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEsCi0JCQkJdWRmX2dldF9ibG9jayk7CisJaW50IHJldDsKKworCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIHVkZl9nZXRfYmxvY2spOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWxvZmZfdCBpc2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZTsKKwkJaWYgKHBvcyArIGxlbiA+IGlzaXplKQorCQkJdm10cnVuY2F0ZShtYXBwaW5nLT5ob3N0LCBpc2l6ZSk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHNlY3Rvcl90IHVkZl9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggNjEyZDFlMi4uNjU0MTJkOCAxMDA2NDQKLS0tIGEvZnMvdWRmL3N1cGVyLmMKKysrIGIvZnMvdWRmL3N1cGVyLmMKQEAgLTE3NSw4ICsxNzUsNyBAQAogCS5hbGxvY19pbm9kZQk9IHVkZl9hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IHVkZl9kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IHVkZl93cml0ZV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gdWRmX2RlbGV0ZV9pbm9kZSwKLQkuY2xlYXJfaW5vZGUJPSB1ZGZfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gdWRmX2V2aWN0X2lub2RlLAogCS5wdXRfc3VwZXIJPSB1ZGZfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCT0gdWRmX3N5bmNfZnMsCiAJLnN0YXRmcwkJPSB1ZGZfc3RhdGZzLApAQCAtMTU3OSw5ICsxNTc4LDcgQEAKIHsKIAlzdHJ1Y3QgYW5jaG9yVm9sRGVzY1B0ciAqYW5jaG9yOwogCWxvbmcgbWFpbl9zLCBtYWluX2UsIHJlc2VydmVfcywgcmVzZXJ2ZV9lOwotCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpOwogCi0Jc2JpID0gVURGX1NCKHNiKTsKIAlhbmNob3IgPSAoc3RydWN0IGFuY2hvclZvbERlc2NQdHIgKiliaC0+Yl9kYXRhOwogCiAJLyogTG9jYXRlIHRoZSBtYWluIHNlcXVlbmNlICovCmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmZGVjbC5oIGIvZnMvdWRmL3VkZmRlY2wuaAppbmRleCAyYmFjMDM1Li42OTk1YWIxIDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmZGVjbC5oCisrKyBiL2ZzL3VkZi91ZGZkZWNsLmgKQEAgLTEzOSw4ICsxMzksNyBAQAogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX2JyZWFkKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCwgaW50ICopOwogZXh0ZXJuIHZvaWQgdWRmX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIHVkZl9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiB2b2lkIHVkZl9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOwotZXh0ZXJuIHZvaWQgdWRmX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIHVkZl9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogZXh0ZXJuIGxvbmcgdWRmX2Jsb2NrX21hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QpOwogZXh0ZXJuIGludCB1ZGZfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9kaXIuYyBiL2ZzL3Vmcy9kaXIuYwppbmRleCBlYzc4NDc1Li5kYmM5MDk5IDEwMDY0NAotLS0gYS9mcy91ZnMvZGlyLmMKKysrIGIvZnMvdWZzL2Rpci5jCkBAIC05NSw4ICs5NSw3IEBACiAJaW50IGVycjsKIAogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX3Vmc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCBwb3MsIGxlbiwKLQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwllcnIgPSB1ZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBwb3MsIGxlbik7CiAJQlVHX09OKGVycik7CiAKIAlkZS0+ZF9pbm8gPSBjcHVfdG9fZnMzMihkaXItPmlfc2IsIGlub2RlLT5pX2lubyk7CkBAIC0zODEsOCArMzgwLDcgQEAKIGdvdF9pdDoKIAlwb3MgPSBwYWdlX29mZnNldChwYWdlKSArCiAJCQkoY2hhciopZGUgLSAoY2hhciopcGFnZV9hZGRyZXNzKHBhZ2UpOwotCWVyciA9IF9fdWZzX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgcmVjX2xlbiwKLQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwllcnIgPSB1ZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBwb3MsIHJlY19sZW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlpZiAoZGUtPmRfaW5vKSB7CkBAIC01MTgsNyArNTE2LDYgQEAKIAkJICAgICBzdHJ1Y3QgcGFnZSAqIHBhZ2UpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKIAljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAl1bnNpZ25lZCBmcm9tID0gKChjaGFyKilkaXIgLSBrYWRkcikgJiB+KFVGU19TQihzYiktPnNfdXNwaS0+c19kaXJibGtzaXplIC0gMSk7CiAJdW5zaWduZWQgdG8gPSAoKGNoYXIqKWRpciAtIGthZGRyKSArIGZzMTZfdG9fY3B1KHNiLCBkaXItPmRfcmVjbGVuKTsKQEAgLTU0OSw4ICs1NDYsNyBAQAogCiAJcG9zID0gcGFnZV9vZmZzZXQocGFnZSkgKyBmcm9tOwogCWxvY2tfcGFnZShwYWdlKTsKLQllcnIgPSBfX3Vmc193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBwb3MsIHRvIC0gZnJvbSwKLQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwllcnIgPSB1ZnNfcHJlcGFyZV9jaHVuayhwYWdlLCBwb3MsIHRvIC0gZnJvbSk7CiAJQlVHX09OKGVycik7CiAJaWYgKHBkZSkKIAkJcGRlLT5kX3JlY2xlbiA9IGNwdV90b19mczE2KHNiLCB0byAtIGZyb20pOwpAQCAtNTc3LDggKzU3Myw3IEBACiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IF9fdWZzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIDAsIGNodW5rX3NpemUsCi0JCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLCAmcGFnZSwgTlVMTCk7CisJZXJyID0gdWZzX3ByZXBhcmVfY2h1bmsocGFnZSwgMCwgY2h1bmtfc2l6ZSk7CiAJaWYgKGVycikgewogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL2lhbGxvYy5jIGIvZnMvdWZzL2lhbGxvYy5jCmluZGV4IDU5NDQ4MGUuLjQyODAxN2UgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pYWxsb2MuYworKysgYi9mcy91ZnMvaWFsbG9jLmMKQEAgLTk0LDggKzk0LDYgQEAKIAogCWlzX2RpcmVjdG9yeSA9IFNfSVNESVIoaW5vZGUtPmlfbW9kZSk7CiAKLQljbGVhcl9pbm9kZSAoaW5vZGUpOwotCiAJaWYgKHViaF9pc2NsciAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfaXVzZWRvZmYsIGJpdCkpCiAJCXVmc19lcnJvcihzYiwgInVmc19mcmVlX2lub2RlIiwgImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGlub2RlICV1IiwgaW5vKTsKIAllbHNlIHsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggNzNmZTc3My4uMmIyNTFmMiAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTU1OCwyMCArNTU4LDI2IEBACiAJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9wYWdlKHBhZ2UsdWZzX2dldGZyYWdfYmxvY2spOwogfQogCi1pbnQgX191ZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKLQkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCitpbnQgdWZzX3ByZXBhcmVfY2h1bmsoc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbikKIHsKLQlyZXR1cm4gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwgZnNkYXRhLAotCQkJCXVmc19nZXRmcmFnX2Jsb2NrKTsKKwlyZXR1cm4gX19ibG9ja193cml0ZV9iZWdpbihwYWdlLCBwb3MsIGxlbiwgdWZzX2dldGZyYWdfYmxvY2spOwogfQogCiBzdGF0aWMgaW50IHVmc193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKIHsKLQkqcGFnZXAgPSBOVUxMOwotCXJldHVybiBfX3Vmc193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLCBmc2RhdGEpOworCWludCByZXQ7CisKKwlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAorCQkJCXVmc19nZXRmcmFnX2Jsb2NrKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsb2ZmX3QgaXNpemUgPSBtYXBwaW5nLT5ob3N0LT5pX3NpemU7CisJCWlmIChwb3MgKyBsZW4gPiBpc2l6ZSkKKwkJCXZtdHJ1bmNhdGUobWFwcGluZy0+aG9zdCwgaXNpemUpOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCB1ZnNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spCkBAIC05MDUsMjQgKzkxMSwzMyBAQAogCXJldHVybiB1ZnNfdXBkYXRlX2lub2RlIChpbm9kZSwgMSk7CiB9CiAKLXZvaWQgdWZzX2RlbGV0ZV9pbm9kZSAoc3RydWN0IGlub2RlICogaW5vZGUpCit2b2lkIHVmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKLQlsb2ZmX3Qgb2xkX2lfc2l6ZTsKKwlpbnQgd2FudF9kZWxldGUgPSAwOworCisJaWYgKCFpbm9kZS0+aV9ubGluayAmJiAhaXNfYmFkX2lub2RlKGlub2RlKSkKKwkJd2FudF9kZWxldGUgPSAxOwogCiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwotCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQotCQlnb3RvIG5vX2RlbGV0ZTsKLQkvKlVGU19JKGlub2RlKS0+aV9kdGltZSA9IENVUlJFTlRfVElNRTsqLwotCWxvY2tfa2VybmVsKCk7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JdWZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgSVNfU1lOQyhpbm9kZSkpOwotCW9sZF9pX3NpemUgPSBpbm9kZS0+aV9zaXplOwotCWlub2RlLT5pX3NpemUgPSAwOwotCWlmIChpbm9kZS0+aV9ibG9ja3MgJiYgdWZzX3RydW5jYXRlKGlub2RlLCBvbGRfaV9zaXplKSkKLQkJdWZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsIF9fZnVuY19fLCAidWZzX3RydW5jYXRlIGZhaWxlZFxuIik7Ci0JdWZzX2ZyZWVfaW5vZGUgKGlub2RlKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuOwotbm9fZGVsZXRlOgotCWNsZWFyX2lub2RlKGlub2RlKTsJLyogV2UgbXVzdCBndWFyYW50ZWUgY2xlYXJpbmcgb2YgaW5vZGUuLi4gKi8KKwlpZiAod2FudF9kZWxldGUpIHsKKwkJbG9mZl90IG9sZF9pX3NpemU7CisJCS8qVUZTX0koaW5vZGUpLT5pX2R0aW1lID0gQ1VSUkVOVF9USU1FOyovCisJCWxvY2tfa2VybmVsKCk7CisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQl1ZnNfdXBkYXRlX2lub2RlKGlub2RlLCBJU19TWU5DKGlub2RlKSk7CisJCW9sZF9pX3NpemUgPSBpbm9kZS0+aV9zaXplOworCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJaWYgKGlub2RlLT5pX2Jsb2NrcyAmJiB1ZnNfdHJ1bmNhdGUoaW5vZGUsIG9sZF9pX3NpemUpKQorCQkJdWZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsIF9fZnVuY19fLCAidWZzX3RydW5jYXRlIGZhaWxlZFxuIik7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CisKKwlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCisJaWYgKHdhbnRfZGVsZXRlKSB7CisJCWxvY2tfa2VybmVsKCk7CisJCXVmc19mcmVlX2lub2RlIChpbm9kZSk7CisJCXVubG9ja19rZXJuZWwoKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IDNlYzVhOWUuLmQ1MTBjMWIgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCS5hbGxvY19pbm9kZQk9IHVmc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQk9IHVmc19kZXN0cm95X2lub2RlLAogCS53cml0ZV9pbm9kZQk9IHVmc193cml0ZV9pbm9kZSwKLQkuZGVsZXRlX2lub2RlCT0gdWZzX2RlbGV0ZV9pbm9kZSwKKwkuZXZpY3RfaW5vZGUJPSB1ZnNfZXZpY3RfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IHVmc19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyCT0gdWZzX3dyaXRlX3N1cGVyLAogCS5zeW5jX2ZzCT0gdWZzX3N5bmNfZnMsCmRpZmYgLS1naXQgYS9mcy91ZnMvdHJ1bmNhdGUuYyBiL2ZzL3Vmcy90cnVuY2F0ZS5jCmluZGV4IDU4OWUwMWEuLjM0ZDVjYjEgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy90cnVuY2F0ZS5jCisrKyBiL2ZzL3Vmcy90cnVuY2F0ZS5jCkBAIC01MDAsMTEgKzUwMCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyoKLSAqIFRPRE86Ci0gKgktIHRydW5jYXRlIGNhc2Ugc2hvdWxkIHVzZSBwcm9wZXIgb3JkZXJpbmcgaW5zdGVhZCBvZiB1c2luZwotICoJICBzaW1wbGVfc2V0c2l6ZQotICovCiBpbnQgdWZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKQEAgLTUxOCwxNCArNTEzLDE3IEBACiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFICYmIGF0dHItPmlhX3NpemUgIT0gaW5vZGUtPmlfc2l6ZSkgewogCQlsb2ZmX3Qgb2xkX2lfc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAKLQkJZXJyb3IgPSBzaW1wbGVfc2V0c2l6ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKKwkJLyogWFhYKHRydW5jYXRlKTogdHJ1bmNhdGVfc2V0c2l6ZSBzaG91bGQgYmUgY2FsbGVkIGxhc3QgKi8KKwkJdHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisKIAkJZXJyb3IgPSB1ZnNfdHJ1bmNhdGUoaW5vZGUsIG9sZF9pX3NpemUpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQotCXJldHVybiBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7CiB9CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy91ZnMvdWZzLmggYi9mcy91ZnMvdWZzLmgKaW5kZXggMTc5YWU2Yi4uYzA4NzgyZSAxMDA2NDQKLS0tIGEvZnMvdWZzL3Vmcy5oCisrKyBiL2ZzL3Vmcy91ZnMuaApAQCAtMTA4LDcgKzEwOCw3IEBACiBleHRlcm4gc3RydWN0IGlub2RlICp1ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgdWZzX3N5bmNfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiB2b2lkIHVmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIHVmc19ldmljdF9pbm9kZSAoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19icmVhZCAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKIGV4dGVybiBpbnQgdWZzX2dldGZyYWdfYmxvY2sgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGZyYWdtZW50LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL3Vmcy91dGlsLmggYi9mcy91ZnMvdXRpbC5oCmluZGV4IDIzY2VlZDguLjA0NjYwMzYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91dGlsLmgKKysrIGIvZnMvdWZzL3V0aWwuaApAQCAtMjU3LDkgKzI1Nyw3IEBACiAKIGV4dGVybiBkZXZfdCB1ZnNfZ2V0X2lub2RlX2RldihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IHVmc19pbm9kZV9pbmZvICopOwogZXh0ZXJuIHZvaWQgdWZzX3NldF9pbm9kZV9kZXYoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqLCBkZXZfdCk7Ci1leHRlcm4gaW50IF9fdWZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKLQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CitleHRlcm4gaW50IHVmc19wcmVwYXJlX2NodW5rKHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4pOwogCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIG1hbmlwdWxhdGUgdWZzIGJ1ZmZlcnMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCBkMjRlNzhmLi4xNTQxMmZlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0xNDc4LDIyICsxNDc4LDM4IEBACiAJaWYgKHJ3ICYgV1JJVEUpIHsKIAkJaW9jYi0+cHJpdmF0ZSA9IHhmc19hbGxvY19pb2VuZChpbm9kZSwgSU9fTkVXKTsKIAotCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwKLQkJCQkJCSAgICBvZmZzZXQsIG5yX3NlZ3MsCi0JCQkJCQkgICAgeGZzX2dldF9ibG9ja3NfZGlyZWN0LAotCQkJCQkJICAgIHhmc19lbmRfaW9fZGlyZWN0X3dyaXRlKTsKKwkJcmV0ID0gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsCisJCQkJCSAgICBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJCSAgICB4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QsCisJCQkJCSAgICB4ZnNfZW5kX2lvX2RpcmVjdF93cml0ZSwgTlVMTCwgMCk7CiAJCWlmIChyZXQgIT0gLUVJT0NCUVVFVUVEICYmIGlvY2ItPnByaXZhdGUpCiAJCQl4ZnNfZGVzdHJveV9pb2VuZChpb2NiLT5wcml2YXRlKTsKIAl9IGVsc2UgewotCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwKLQkJCQkJCSAgICBvZmZzZXQsIG5yX3NlZ3MsCi0JCQkJCQkgICAgeGZzX2dldF9ibG9ja3NfZGlyZWN0LAotCQkJCQkJICAgIE5VTEwpOworCQlyZXQgPSBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGlvdiwKKwkJCQkJICAgIG9mZnNldCwgbnJfc2VncywKKwkJCQkJICAgIHhmc19nZXRfYmxvY2tzX2RpcmVjdCwKKwkJCQkJICAgIE5VTEwsIE5VTEwsIDApOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKK1NUQVRJQyB2b2lkCit4ZnNfdm1fd3JpdGVfZmFpbGVkKAorCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLAorCWxvZmZfdAkJCXRvKQoreworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKworCWlmICh0byA+IGlub2RlLT5pX3NpemUpIHsKKwkJc3RydWN0IGlhdHRyCWlhID0geworCQkJLmlhX3ZhbGlkCT0gQVRUUl9TSVpFIHwgQVRUUl9GT1JDRSwKKwkJCS5pYV9zaXplCT0gaW5vZGUtPmlfc2l6ZSwKKwkJfTsKKwkJeGZzX3NldGF0dHIoWEZTX0koaW5vZGUpLCAmaWEsIFhGU19BVFRSX05PTE9DSyk7CisJfQorfQorCiBTVEFUSUMgaW50CiB4ZnNfdm1fd3JpdGVfYmVnaW4oCiAJc3RydWN0IGZpbGUJCSpmaWxlLApAQCAtMTUwNCw5ICsxNTIwLDMxIEBACiAJc3RydWN0IHBhZ2UJCSoqcGFnZXAsCiAJdm9pZAkJCSoqZnNkYXRhKQogewotCSpwYWdlcCA9IE5VTEw7Ci0JcmV0dXJuIGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncyB8IEFPUF9GTEFHX05PRlMsCi0JCQkJIHBhZ2VwLCBmc2RhdGEsIHhmc19nZXRfYmxvY2tzKTsKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBibG9ja193cml0ZV9iZWdpbihtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MgfCBBT1BfRkxBR19OT0ZTLAorCQkJCXBhZ2VwLCB4ZnNfZ2V0X2Jsb2Nrcyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXhmc192bV93cml0ZV9mYWlsZWQobWFwcGluZywgcG9zICsgbGVuKTsKKwlyZXR1cm4gcmV0OworfQorCitTVEFUSUMgaW50Cit4ZnNfdm1fd3JpdGVfZW5kKAorCXN0cnVjdCBmaWxlCQkqZmlsZSwKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZywKKwlsb2ZmX3QJCQlwb3MsCisJdW5zaWduZWQJCWxlbiwKKwl1bnNpZ25lZAkJY29waWVkLAorCXN0cnVjdCBwYWdlCQkqcGFnZSwKKwl2b2lkCQkJKmZzZGF0YSkKK3sKKwlpbnQJCQlyZXQ7CisKKwlyZXQgPSBnZW5lcmljX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgY29waWVkLCBwYWdlLCBmc2RhdGEpOworCWlmICh1bmxpa2VseShyZXQgPCBsZW4pKQorCQl4ZnNfdm1fd3JpdGVfZmFpbGVkKG1hcHBpbmcsIHBvcyArIGxlbik7CisJcmV0dXJuIHJldDsKIH0KIAogU1RBVElDIHNlY3Rvcl90CkBAIC0xNTUxLDcgKzE1ODksNyBAQAogCS5yZWxlYXNlcGFnZQkJPSB4ZnNfdm1fcmVsZWFzZXBhZ2UsCiAJLmludmFsaWRhdGVwYWdlCQk9IHhmc192bV9pbnZhbGlkYXRlcGFnZSwKIAkud3JpdGVfYmVnaW4JCT0geGZzX3ZtX3dyaXRlX2JlZ2luLAotCS53cml0ZV9lbmQJCT0gZ2VuZXJpY193cml0ZV9lbmQsCisJLndyaXRlX2VuZAkJPSB4ZnNfdm1fd3JpdGVfZW5kLAogCS5ibWFwCQkJPSB4ZnNfdm1fYm1hcCwKIAkuZGlyZWN0X0lPCQk9IHhmc192bV9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlCQk9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKaW5kZXggNTM2YjgxZS4uNjhiZTI1ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwpAQCAtODAsNyArODAsNyBAQAogewogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBWRlNfSShpcCk7CiAKLQlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIChJX1dJTExfRlJFRXxJX0ZSRUVJTkd8SV9DTEVBUikpKQorCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfV0lMTF9GUkVFfElfRlJFRUlORykpKQogCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwogfQogCkBAIC05MCw3ICs5MCw3IEBACiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IFZGU19JKGlwKTsKIAotCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfV0lMTF9GUkVFfElfRlJFRUlOR3xJX0NMRUFSKSkpCisJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9XSUxMX0ZSRUV8SV9GUkVFSU5HKSkpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogfQogCkBAIC01NDAsMjEgKzU0MCw2IEBACiAJcmV0dXJuIC14ZnNfc2V0YXR0cihYRlNfSShkZW50cnktPmRfaW5vZGUpLCBpYXR0ciwgMCk7CiB9CiAKLS8qCi0gKiBibG9ja190cnVuY2F0ZV9wYWdlIGNhbiByZXR1cm4gYW4gZXJyb3IsIGJ1dCB3ZSBjYW4ndCBwcm9wYWdhdGUgaXQKLSAqIGF0IGFsbCBoZXJlLiBMZWF2ZSBhIGNvbXBsYWludCArIHN0YWNrIHRyYWNlIGluIHRoZSBzeXNsb2cgYmVjYXVzZQotICogdGhpcyBjb3VsZCBiZSBiYWQuIElmIGl0IGlzIGJhZCwgd2UgbmVlZCB0byBwcm9wYWdhdGUgdGhlIGVycm9yIGZ1cnRoZXIuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfdm5fdHJ1bmNhdGUoCi0Jc3RydWN0IGlub2RlCSppbm9kZSkKLXsKLQlpbnQJZXJyb3I7Ci0JZXJyb3IgPSBibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUsCi0JCQkJCQkJeGZzX2dldF9ibG9ja3MpOwotCVdBUk5fT04oZXJyb3IpOwotfQotCiBTVEFUSUMgbG9uZwogeGZzX3ZuX2ZhbGxvY2F0ZSgKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLApAQCAtNjk0LDcgKzY3OSw2IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB4ZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkuY2hlY2tfYWNsCQk9IHhmc19jaGVja19hY2wsCi0JLnRydW5jYXRlCQk9IHhmc192bl90cnVuY2F0ZSwKIAkuZ2V0YXR0cgkJPSB4ZnNfdm5fZ2V0YXR0ciwKIAkuc2V0YXR0cgkJPSB4ZnNfdm5fc2V0YXR0ciwKIAkuc2V0eGF0dHIJCT0gZ2VuZXJpY19zZXR4YXR0ciwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDk5OGE5ZDcuLjJmYTBiZDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtMTU2LDggKzE1Niw2IEBACiAgKi8KICNkZWZpbmUgeGZzX3NvcnQoYSxuLHMsZm4pCXNvcnQoYSxuLHMsZm4sTlVMTCkKICNkZWZpbmUgeGZzX3N0YWNrX3RyYWNlKCkJZHVtcF9zdGFjaygpCi0jZGVmaW5lIHhmc19pdHJ1bmNhdGVfZGF0YShpcCwgb2ZmKQlcCi0JKC12bXRydW5jYXRlKFZGU19JKGlwKSwgKG9mZikpKQogCiAKIC8qIE1vdmUgdGhlIGtlcm5lbCBkb19kaXYgZGVmaW5pdGlvbiBvZmYgdG8gb25lIHNpZGUgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCmluZGV4IGJmZDVhYzkuLjI5YjlkNjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtNjgsMTUgKzY4LDE1IEBACiAJaWYgKG9wICE9IFFfWFFVT1RBUk0gJiYgIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9BQ0NUKQorCWlmICh1ZmxhZ3MgJiBGU19RVU9UQV9VRFFfQUNDVCkKIAkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9BQ0NUOwotCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfUERRX0FDQ1QpCisJaWYgKHVmbGFncyAmIEZTX1FVT1RBX1BEUV9BQ0NUKQogCQlmbGFncyB8PSBYRlNfUFFVT1RBX0FDQ1Q7Ci0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9HRFFfQUNDVCkKKwlpZiAodWZsYWdzICYgRlNfUVVPVEFfR0RRX0FDQ1QpCiAJCWZsYWdzIHw9IFhGU19HUVVPVEFfQUNDVDsKLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9FTkZEKQorCWlmICh1ZmxhZ3MgJiBGU19RVU9UQV9VRFFfRU5GRCkKIAkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9FTkZEOwotCWlmICh1ZmxhZ3MgJiAoWEZTX1FVT1RBX1BEUV9FTkZEfFhGU19RVU9UQV9HRFFfRU5GRCkpCisJaWYgKHVmbGFncyAmIChGU19RVU9UQV9QRFFfRU5GRHxGU19RVU9UQV9HRFFfRU5GRCkpCiAJCWZsYWdzIHw9IFhGU19PUVVPVEFfRU5GRDsKIAogCXN3aXRjaCAob3ApIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDc1OGRmOTQ2Li4xNWMzNWI2IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTExMDAsMTMgKzExMDAsMTUgQEAKIH0KIAogU1RBVElDIHZvaWQKLXhmc19mc19jbGVhcl9pbm9kZSgKK3hmc19mc19ldmljdF9pbm9kZSgKIAlzdHJ1Y3QgaW5vZGUJCSppbm9kZSkKIHsKIAl4ZnNfaW5vZGVfdAkJKmlwID0gWEZTX0koaW5vZGUpOwogCi0JdHJhY2VfeGZzX2NsZWFyX2lub2RlKGlwKTsKKwl0cmFjZV94ZnNfZXZpY3RfaW5vZGUoaXApOwogCisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWVuZF93cml0ZWJhY2soaW5vZGUpOwogCVhGU19TVEFUU19JTkModm5fcmVsZSk7CiAJWEZTX1NUQVRTX0lOQyh2bl9yZW1vdmUpOwogCVhGU19TVEFUU19ERUModm5fYWN0aXZlKTsKQEAgLTE2MjIsNyArMTYyNCw3IEBACiAJLmRlc3Ryb3lfaW5vZGUJCT0geGZzX2ZzX2Rlc3Ryb3lfaW5vZGUsCiAJLmRpcnR5X2lub2RlCQk9IHhmc19mc19kaXJ0eV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJCT0geGZzX2ZzX3dyaXRlX2lub2RlLAotCS5jbGVhcl9pbm9kZQkJPSB4ZnNfZnNfY2xlYXJfaW5vZGUsCisJLmV2aWN0X2lub2RlCQk9IHhmc19mc19ldmljdF9pbm9kZSwKIAkucHV0X3N1cGVyCQk9IHhmc19mc19wdXRfc3VwZXIsCiAJLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfZnMsCiAJLmZyZWV6ZV9mcwkJPSB4ZnNfZnNfZnJlZXplLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKaW5kZXggYzY1N2NkYy4uYmU1ZGZmZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCkBAIC01ODEsNyArNTgxLDcgQEAKIERFRklORV9JTk9ERV9FVkVOVCh4ZnNfZmlsZV9mc3luYyk7CiBERUZJTkVfSU5PREVfRVZFTlQoeGZzX2Rlc3Ryb3lfaW5vZGUpOwogREVGSU5FX0lOT0RFX0VWRU5UKHhmc193cml0ZV9pbm9kZSk7Ci1ERUZJTkVfSU5PREVfRVZFTlQoeGZzX2NsZWFyX2lub2RlKTsKK0RFRklORV9JTk9ERV9FVkVOVCh4ZnNfZXZpY3RfaW5vZGUpOwogCiBERUZJTkVfSU5PREVfRVZFTlQoeGZzX2RxdW90X2RxYWxsb2MpOwogREVGSU5FX0lOT0RFX0VWRU5UKHhmc19kcXVvdF9kcWRldGFjaCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggZDI1N2ViOC4uNDVlNTg0OSAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtODEwLDkgKzgxMCw5IEBACiAJfQogCiAjaWZkZWYgREVCVUcKLQlpZiAoKChYRlNfSVNfVVFVT1RBX0VORk9SQ0VEKG1wKSAmJiBkc3QtPmRfZmxhZ3MgPT0gWEZTX1VTRVJfUVVPVEEpIHx8CisJaWYgKCgoWEZTX0lTX1VRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX1VTRVJfUVVPVEEpIHx8CiAJICAgICAoWEZTX0lTX09RVU9UQV9FTkZPUkNFRChtcCkgJiYKLQkJCShkc3QtPmRfZmxhZ3MgJiAoWEZTX1BST0pfUVVPVEEgfCBYRlNfR1JPVVBfUVVPVEEpKSkpICYmCisJCQkoZHN0LT5kX2ZsYWdzICYgKEZTX1BST0pfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpKSkgJiYKIAkgICAgZHN0LT5kX2lkICE9IDApIHsKIAkJaWYgKCgoaW50KSBkc3QtPmRfYmNvdW50ID49IChpbnQpIGRzdC0+ZF9ibGtfc29mdGxpbWl0KSAmJgogCQkgICAgKGRzdC0+ZF9ibGtfc29mdGxpbWl0ID4gMCkpIHsKQEAgLTgzMywxNyArODMzLDE3IEBACiAJLyoKIAkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgogCSAqLwotCUFTU0VSVCgoZmxhZ3MgJiAoWEZTX1BST0pfUVVPVEEgfCBYRlNfVVNFUl9RVU9UQSkpICE9Ci0JCShYRlNfUFJPSl9RVU9UQSB8IFhGU19VU0VSX1FVT1RBKSk7Ci0JQVNTRVJUKChmbGFncyAmIChYRlNfUFJPSl9RVU9UQSB8IFhGU19HUk9VUF9RVU9UQSkpICE9Ci0JCShYRlNfUFJPSl9RVU9UQSB8IFhGU19HUk9VUF9RVU9UQSkpOwotCUFTU0VSVCgoZmxhZ3MgJiAoWEZTX1VTRVJfUVVPVEEgfCBYRlNfR1JPVVBfUVVPVEEpKSAhPQotCQkoWEZTX1VTRVJfUVVPVEEgfCBYRlNfR1JPVVBfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKFhGU19QUk9KX1FVT1RBfFhGU19VU0VSX1FVT1RBfFhGU19HUk9VUF9RVU9UQSkpICE9IDApOworCUFTU0VSVCgoZmxhZ3MgJiAoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKSAhPQorCQkoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKTsKKwlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9CisJCShGU19QUk9KX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKKwlBU1NFUlQoKGZsYWdzICYgKEZTX1VTRVJfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9CisJCShGU19VU0VSX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKKwlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEF8RlNfVVNFUl9RVU9UQXxGU19HUk9VUF9RVU9UQSkpICE9IDApOwogCiAJcmV0dXJuIChmbGFncyAmIFhGU19EUV9VU0VSKSA/Ci0JCVhGU19VU0VSX1FVT1RBIDogKGZsYWdzICYgWEZTX0RRX1BST0opID8KLQkJCVhGU19QUk9KX1FVT1RBIDogWEZTX0dST1VQX1FVT1RBOworCQlGU19VU0VSX1FVT1RBIDogKGZsYWdzICYgWEZTX0RRX1BST0opID8KKwkJCUZTX1BST0pfUVVPVEEgOiBGU19HUk9VUF9RVU9UQTsKIH0KIAogU1RBVElDIHVpbnQKQEAgLTg1NCwxNiArODU0LDE2IEBACiAKIAl1ZmxhZ3MgPSAwOwogCWlmIChmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkKLQkJdWZsYWdzIHw9IFhGU19RVU9UQV9VRFFfQUNDVDsKKwkJdWZsYWdzIHw9IEZTX1FVT1RBX1VEUV9BQ0NUOwogCWlmIChmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkKLQkJdWZsYWdzIHw9IFhGU19RVU9UQV9QRFFfQUNDVDsKKwkJdWZsYWdzIHw9IEZTX1FVT1RBX1BEUV9BQ0NUOwogCWlmIChmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkKLQkJdWZsYWdzIHw9IFhGU19RVU9UQV9HRFFfQUNDVDsKKwkJdWZsYWdzIHw9IEZTX1FVT1RBX0dEUV9BQ0NUOwogCWlmIChmbGFncyAmIFhGU19VUVVPVEFfRU5GRCkKLQkJdWZsYWdzIHw9IFhGU19RVU9UQV9VRFFfRU5GRDsKKwkJdWZsYWdzIHw9IEZTX1FVT1RBX1VEUV9FTkZEOwogCWlmIChmbGFncyAmIChYRlNfT1FVT1RBX0VORkQpKSB7CiAJCXVmbGFncyB8PSAoZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpID8KLQkJCVhGU19RVU9UQV9HRFFfRU5GRCA6IFhGU19RVU9UQV9QRFFfRU5GRDsKKwkJCUZTX1FVT1RBX0dEUV9FTkZEIDogRlNfUVVPVEFfUERRX0VORkQ7CiAJfQogCXJldHVybiAodWZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCAzYWMxMzdkLi42NmQ1ODVjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0yMjEsOCArMjIxLDExIEBACiAJCQkgKiB0cmFuc2FjdGlvbiB0byBtb2RpZnkgdGhlIGlfc2l6ZS4KIAkJCSAqLwogCQkJY29kZSA9IHhmc196ZXJvX2VvZihpcCwgaWF0dHItPmlhX3NpemUsIGlwLT5pX3NpemUpOworCQkJaWYgKGNvZGUpCisJCQkJZ290byBlcnJvcl9yZXR1cm47CiAJCX0KIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJbG9ja19mbGFncyAmPSB+WEZTX0lMT0NLX0VYQ0w7CiAKIAkJLyoKIAkJICogV2UgYXJlIGdvaW5nIHRvIGxvZyB0aGUgaW5vZGUgc2l6ZSBjaGFuZ2UgaW4gdGhpcwpAQCAtMjM2LDM2ICsyMzksMzUgQEAKIAkJICogcmVhbGx5IGNhcmUgYWJvdXQgaGVyZSBhbmQgcHJldmVudHMgd2FpdGluZyBmb3Igb3RoZXIgZGF0YQogCQkgKiBub3Qgd2l0aGluIHRoZSByYW5nZSB3ZSBjYXJlIGFib3V0IGhlcmUuCiAJCSAqLwotCQlpZiAoIWNvZGUgJiYKLQkJICAgIGlwLT5pX3NpemUgIT0gaXAtPmlfZC5kaV9zaXplICYmCisJCWlmIChpcC0+aV9zaXplICE9IGlwLT5pX2QuZGlfc2l6ZSAmJgogCQkgICAgaWF0dHItPmlhX3NpemUgPiBpcC0+aV9kLmRpX3NpemUpIHsKIAkJCWNvZGUgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsCiAJCQkJCWlwLT5pX2QuZGlfc2l6ZSwgaWF0dHItPmlhX3NpemUsCiAJCQkJCVhCRl9BU1lOQywgRklfTk9ORSk7CisJCQlpZiAoY29kZSkKKwkJCQlnb3RvIGVycm9yX3JldHVybjsKIAkJfQogCiAJCS8qIHdhaXQgZm9yIGFsbCBJL08gdG8gY29tcGxldGUgKi8KIAkJeGZzX2lvZW5kX3dhaXQoaXApOwogCi0JCWlmICghY29kZSkKLQkJCWNvZGUgPSB4ZnNfaXRydW5jYXRlX2RhdGEoaXAsIGlhdHRyLT5pYV9zaXplKTsKLQkJaWYgKGNvZGUpIHsKLQkJCUFTU0VSVCh0cCA9PSBOVUxMKTsKLQkJCWxvY2tfZmxhZ3MgJj0gflhGU19JTE9DS19FWENMOwotCQkJQVNTRVJUKGxvY2tfZmxhZ3MgPT0gWEZTX0lPTE9DS19FWENMIHx8ICFuZWVkX2lvbG9jayk7CisJCWNvZGUgPSAtYmxvY2tfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpYXR0ci0+aWFfc2l6ZSwKKwkJCQkJICAgIHhmc19nZXRfYmxvY2tzKTsKKwkJaWYgKGNvZGUpCiAJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJfQorCiAJCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfU0VUQVRUUl9TSVpFKTsKLQkJaWYgKChjb2RlID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCi0JCQkJCSAgICAgWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSwgMCwKLQkJCQkJICAgICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAotCQkJCQkgICAgIFhGU19JVFJVTkNBVEVfTE9HX0NPVU5UKSkpIHsKLQkJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQkJaWYgKG5lZWRfaW9sb2NrKQotCQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJcmV0dXJuIGNvZGU7Ci0JCX0KKwkJY29kZSA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLCBYRlNfSVRSVU5DQVRFX0xPR19SRVMobXApLCAwLAorCQkJCQkgWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywKKwkJCQkJIFhGU19JVFJVTkNBVEVfTE9HX0NPVU5UKTsKKwkJaWYgKGNvZGUpCisJCQlnb3RvIGVycm9yX3JldHVybjsKKworCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBpYXR0ci0+aWFfc2l6ZSk7CisKIAkJY29tbWl0X2ZsYWdzID0gWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUzsKKwkJbG9ja19mbGFncyB8PSBYRlNfSUxPQ0tfRVhDTDsKKwogCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggNWU5NTIyNi4uYmM0YTZkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTcxLDggKzcxLDkgQEAKICNkZWZpbmUgQUNQSV9UT09MUyAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKICNkZWZpbmUgQUNQSV9FWEFNUExFICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgQUNQSV9EUklWRVIgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgRFRfQ09NUElMRVIgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAKIAotI2RlZmluZSBBQ1BJX0FMTF9DT01QT05FTlRTICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBQ1BJX0FMTF9DT01QT05FTlRTICAgICAgICAgMHgwMDAxRkZGRgogI2RlZmluZSBBQ1BJX0NPTVBPTkVOVF9ERUZBVUxUICAgICAgKEFDUElfQUxMX0NPTVBPTkVOVFMpCiAKIC8qIENvbXBvbmVudCBJRHMgcmVzZXJ2ZWQgZm9yIEFDUEkgZHJpdmVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCmluZGV4IDEzNzFjYzkuLjgxZDRmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLyogQ3VycmVudCBBQ1BJQ0Egc3Vic3lzdGVtIHZlcnNpb24gaW4gWVlZWU1NREQgZm9ybWF0ICovCiAKLSNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMTAwNDI4CisjZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDEwMDcwMgogCiAjaW5jbHVkZSAiYWN0eXBlcy5oIgogI2luY2x1ZGUgImFjdGJsLmgiCkBAIC02Myw3ICs2Myw2IEBACiBleHRlcm4gdTggYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX2FsbF9tZXRob2RzX3NlcmlhbGl6ZWQ7CiBleHRlcm4gdTggYWNwaV9nYmxfY3JlYXRlX29zaV9tZXRob2Q7Ci1leHRlcm4gdTggYWNwaV9nYmxfbGVhdmVfd2FrZV9ncGVzX2Rpc2FibGVkOwogZXh0ZXJuIHU4IGFjcGlfZ2JsX3VzZV9kZWZhdWx0X3JlZ2lzdGVyX3dpZHRoczsKIGV4dGVybiBhY3BpX25hbWUgYWNwaV9nYmxfdHJhY2VfbWV0aG9kX25hbWU7CiBleHRlcm4gdTMyIGFjcGlfZ2JsX3RyYWNlX2ZsYWdzOwpAQCAtMjgyLDE2ICsyODEsMTYgQEAKIC8qCiAgKiBHUEUgSW50ZXJmYWNlcwogICovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGFjdGlvbik7CithY3BpX3N0YXR1cyBhY3BpX2VuYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOwogCi1hY3BpX3N0YXR1cwotYWNwaV9lbmFibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyLCB1OCBncGVfdHlwZSk7CithY3BpX3N0YXR1cyBhY3BpX2Rpc2FibGVfZ3BlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKTsKIAotYWNwaV9zdGF0dXMKLWFjcGlfZGlzYWJsZV9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGdwZV90eXBlKTsKK2FjcGlfc3RhdHVzIGFjcGlfZ3BlX2Nhbl93YWtlKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsIHUzMiBncGVfbnVtYmVyKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9jbGVhcl9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpOwogCithY3BpX3N0YXR1cyBhY3BpX2dwZV93YWtldXAoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGFjdGlvbik7CisKIGFjcGlfc3RhdHVzCiBhY3BpX2dldF9ncGVfc3RhdHVzKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsCiAJCSAgICB1MzIgZ3BlX251bWJlciwgYWNwaV9ldmVudF9zdGF0dXMgKmV2ZW50X3N0YXR1cyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwyLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKaW5kZXggOTVmNGQwZS4uZDQxMzZiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDIuaApAQCAtNzcsOCArNzcsMTggQEAKICNkZWZpbmUgQUNQSV9TSUdfVUVGSSAgICAgICAgICAgIlVFRkkiCS8qIFVlZmkgQm9vdCBPcHRpbWl6YXRpb24gVGFibGUgKi8KICNkZWZpbmUgQUNQSV9TSUdfV0FFVCAgICAgICAgICAgIldBRVQiCS8qIFdpbmRvd3MgQUNQSSBFbXVsYXRlZCBkZXZpY2VzIFRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX1dEQVQgICAgICAgICAgICJXREFUIgkvKiBXYXRjaGRvZyBBY3Rpb24gVGFibGUgKi8KKyNkZWZpbmUgQUNQSV9TSUdfV0REVCAgICAgICAgICAgIldERFQiCS8qIFdhdGNoZG9nIFRpbWVyIERlc2NyaXB0aW9uIFRhYmxlICovCiAjZGVmaW5lIEFDUElfU0lHX1dEUlQgICAgICAgICAgICJXRFJUIgkvKiBXYXRjaGRvZyBSZXNvdXJjZSBUYWJsZSAqLwogCisjaWZkZWYgQUNQSV9VTkRFRklORURfVEFCTEVTCisvKgorICogVGhlc2UgdGFibGVzIGhhdmUgYmVlbiBzZWVuIGluIHRoZSBmaWVsZCwgYnV0IG5vIGRlZmluaXRpb24gaGFzIGJlZW4gZm91bmQKKyAqLworI2RlZmluZSBBQ1BJX1NJR19BVEtHICAgICAgICAgICAiQVRLRyIKKyNkZWZpbmUgQUNQSV9TSUdfR1NDSSAgICAgICAgICAgIkdTQ0kiCS8qIEdNQ0ggU0NJIHRhYmxlICovCisjZGVmaW5lIEFDUElfU0lHX0lFSVQgICAgICAgICAgICJJRUlUIgorI2VuZGlmCisKIC8qCiAgKiBBbGwgdGFibGVzIG11c3QgYmUgYnl0ZS1wYWNrZWQgdG8gbWF0Y2ggdGhlIEFDUEkgc3BlY2lmaWNhdGlvbiwgc2luY2UKICAqIHRoZSB0YWJsZXMgYXJlIHByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gQklPUy4KQEAgLTkwOSw2ICs5MTksNDQgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBXRERUIC0gV2F0Y2hkb2cgRGVzY3JpcHRvciBUYWJsZQorICogICAgICAgIFZlcnNpb24gMQorICoKKyAqIENvbmZvcm1zIHRvICJVc2luZyB0aGUgSW50ZWwgSUNIIEZhbWlseSBXYXRjaGRvZyBUaW1lciAoV0RUKSIsCisgKiBWZXJzaW9uIDAwMSwgU2VwdGVtYmVyIDIwMDIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgYWNwaV90YWJsZV93ZGR0IHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGVhZGVyOwkvKiBDb21tb24gQUNQSSB0YWJsZSBoZWFkZXIgKi8KKwl1MTYgc3BlY192ZXJzaW9uOworCXUxNiB0YWJsZV92ZXJzaW9uOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBhZGRyZXNzOworCXUxNiBtYXhfY291bnQ7CQkvKiBNYXhpbXVtIGNvdW50ZXIgdmFsdWUgc3VwcG9ydGVkICovCisJdTE2IG1pbl9jb3VudDsJCS8qIE1pbmltdW0gY291bnRlciB2YWx1ZSBzdXBwb3J0ZWQgKi8KKwl1MTYgcGVyaW9kOworCXUxNiBzdGF0dXM7CisJdTE2IGNhcGFiaWxpdHk7Cit9OworCisvKiBGbGFncyBmb3IgU3RhdHVzIGZpZWxkIGFib3ZlICovCisKKyNkZWZpbmUgQUNQSV9XRERUX0FWQUlMQUJMRSAgICAgKDEpCisjZGVmaW5lIEFDUElfV0REVF9BQ1RJVkUgICAgICAgICgxPDwxKQorI2RlZmluZSBBQ1BJX1dERFRfVENPX09TX09XTkVEICAoMTw8MikKKyNkZWZpbmUgQUNQSV9XRERUX1VTRVJfUkVTRVQgICAgKDE8PDExKQorI2RlZmluZSBBQ1BJX1dERFRfV0RUX1JFU0VUICAgICAoMTw8MTIpCisjZGVmaW5lIEFDUElfV0REVF9QT1dFUl9GQUlMICAgICgxPDwxMykKKyNkZWZpbmUgQUNQSV9XRERUX1VOS05PV05fUkVTRVQgKDE8PDE0KQorCisvKiBGbGFncyBmb3IgQ2FwYWJpbGl0eSBmaWVsZCBhYm92ZSAqLworCisjZGVmaW5lIEFDUElfV0REVF9BVVRPX1JFU0VUICAgICgxKQorI2RlZmluZSBBQ1BJX1dERFRfQUxFUlRfU1VQUE9SVCAoMTw8MSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCiAgKiBXRFJUIC0gV2F0Y2hkb2cgUmVzb3VyY2UgVGFibGUKICAqICAgICAgICBWZXJzaW9uIDEKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaAppbmRleCBkNTVmNGE3Li41ZGI4ZjQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKQEAgLTY2MywxOCArNjYzLDEyIEBACiAjZGVmaW5lIEFDUElfR1BFX01BWCAgICAgICAgICAgICAgICAgICAgMHhGRgogI2RlZmluZSBBQ1BJX05VTV9HUEUgICAgICAgICAgICAgICAgICAgIDI1NgogCi0vKiBBY3Rpb25zIGZvciBhY3BpX3NldF9ncGUgYW5kIGFjcGlfaHdfbG93X3NldF9ncGUgKi8KKy8qIEFjdGlvbnMgZm9yIGFjcGlfZ3BlX3dha2V1cCwgYWNwaV9od19sb3dfc2V0X2dwZSAqLwogCiAjZGVmaW5lIEFDUElfR1BFX0VOQUJMRSAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBBQ1BJX0dQRV9ESVNBQkxFICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQUNQSV9HUEVfQ09ORF9FTkFCTEUgICAgICAgICAgICAyCiAKLS8qIGdwZV90eXBlcyBmb3IgYWNwaV9lbmFibGVfZ3BlIGFuZCBhY3BpX2Rpc2FibGVfZ3BlICovCi0KLSNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFICAgICAgICAgICAgICAodTgpIDB4MDEKLSNkZWZpbmUgQUNQSV9HUEVfVFlQRV9SVU5USU1FICAgICAgICAgICAodTgpIDB4MDIKLSNkZWZpbmUgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTiAgICAgICAgICAodTgpIDB4MDMKLQogLyoKICAqIEdQRSBpbmZvIGZsYWdzIC0gUGVyIEdQRQogICogKy0tLS0tLS0rLS0tKy0rLSsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCmluZGV4IGU1MDM5YTIuLjEwM2YwOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaApAQCAtMTQ4LDEzICsxNDgsMTcgQEAKICNkZWZpbmUgQUNQSV9BTExPQ0FURV9aRVJPRUQoYSkgYWNwaV9vc19hbGxvY2F0ZV96ZXJvZWQoYSkKICNkZWZpbmUgQUNQSV9GUkVFKGEpICAgICAgICAgICAga2ZyZWUoYSkKIAotLyogVXNlZCB3aXRoaW4gQUNQSUNBIHRvIHNob3cgd2hlcmUgaXQgaXMgc2FmZSB0byBwcmVlbXB0IGV4ZWN1dGlvbiAqLwotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpZm5kZWYgQ09ORklHX1BSRUVNUFQKKy8qCisgKiBVc2VkIHdpdGhpbiBBQ1BJQ0EgdG8gc2hvdyB3aGVyZSBpdCBpcyBzYWZlIHRvIHByZWVtcHQgZXhlY3V0aW9uCisgKiB3aGVuIENPTkZJR19QUkVFTVBUPW4KKyAqLwogI2RlZmluZSBBQ1BJX1BSRUVNUFRJT05fUE9JTlQoKSBcCiAJZG8geyBcCi0JCWlmICghaW5fYXRvbWljX3ByZWVtcHRfb2ZmKCkgJiYgIWlycXNfZGlzYWJsZWQoKSkgXAorCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgXAogCQkJY29uZF9yZXNjaGVkKCk7IFwKIAl9IHdoaWxlICgwKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2F0b21pYy5oCmluZGV4IDA1ODEyOWUuLmU1MzM0N2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdG9taWMuaApAQCAtNTcsMTEgKzU3LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGVtcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAvKiBEb24ndCB0cmFjZSBpdCBpbiBhIGlycXNvZmYgaGFuZGxlciAqLwogCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgKz0gaTsKIAl2LT5jb3VudGVyID0gdGVtcDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwogfQpAQCAtNzgsMTEgKzc4LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGVtcDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAvKiBEb24ndCB0cmFjZSBpdCBpbiBhIGlycXNvZmYgaGFuZGxlciAqLwogCXRlbXAgPSB2LT5jb3VudGVyOwogCXRlbXAgLT0gaTsKIAl2LT5jb3VudGVyID0gdGVtcDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB0ZW1wOwogfQpAQCAtMTM1LDkgKzEzNSw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW1hc2sgPSB+bWFzazsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsgLyogRG9uJ3QgdHJhY2UgaXQgaW4gYSBpcnFzb2ZmIGhhbmRsZXIgKi8KIAkqYWRkciAmPSBtYXNrOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAjZGVmaW5lIGF0b21pY194Y2hnKHB0ciwgdikJCSh4Y2hnKCYocHRyKS0+Y291bnRlciwgKHYpKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLWJyb2tlbi5oCmluZGV4IDgyY2QwY2IuLmNjZjdiNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaApAQCAtNzIsOSArNzIsNiBAQAogZXh0ZXJuIGludAogZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCk7CiAKLWV4dGVybiBpbnQKLWRtYV9pc19jb25zaXN0ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLQogZXh0ZXJuIHZvaWQKIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCmluZGV4IGZjZDI2OGMuLmE3MGIyZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTMsNiArMywxOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyoKKyAqIEZNT0RFX0VYRUMgaXMgMHgyMAorICogRk1PREVfTk9OT1RJRlkgaXMgMHgxMDAwMDAwCisgKiBUaGVzZSBjYW5ub3QgYmUgdXNlZCBieSB1c2Vyc3BhY2UgT18qIHVudGlsIGludGVybmFsIGFuZCBleHRlcm5hbCBvcGVuCisgKiBmbGFncyBhcmUgc3BsaXQuCisgKiAtRXJpYyBQYXJpcworICovCisKKy8qCisgKiBXaGVuIGludHJvZHVjaW5nIG5ldyBPXyogYml0cywgcGxlYXNlIGNoZWNrIGl0cyB1bmlxdWVuZXNzIGluIGZjbnRsX2luaXQoKS4KKyAqLworCiAjZGVmaW5lIE9fQUNDTU9ERQkwMDAwMDAwMwogI2RlZmluZSBPX1JET05MWQkwMDAwMDAwMAogI2RlZmluZSBPX1dST05MWQkwMDAwMDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pby5oCmluZGV4IGJjZWU2MzYuLjExODYwMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvLmgKQEAgLTE4OCwxMSArMTg4LDE1IEBACiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0lPTUFQCiAjZGVmaW5lIGlvcmVhZDgoYWRkcikJCXJlYWRiKGFkZHIpCiAjZGVmaW5lIGlvcmVhZDE2KGFkZHIpCQlyZWFkdyhhZGRyKQorI2RlZmluZSBpb3JlYWQxNmJlKGFkZHIpCWJlMTZfdG9fY3B1KGlvcmVhZDE2KGFkZHIpKQogI2RlZmluZSBpb3JlYWQzMihhZGRyKQkJcmVhZGwoYWRkcikKKyNkZWZpbmUgaW9yZWFkMzJiZShhZGRyKQliZTMyX3RvX2NwdShpb3JlYWQzMihhZGRyKSkKIAogI2RlZmluZSBpb3dyaXRlOCh2LCBhZGRyKQl3cml0ZWIoKHYpLCAoYWRkcikpCiAjZGVmaW5lIGlvd3JpdGUxNih2LCBhZGRyKQl3cml0ZXcoKHYpLCAoYWRkcikpCisjZGVmaW5lIGlvd3JpdGUxNmJlKHYsIGFkZHIpCWlvd3JpdGUxNihiZTE2X3RvX2NwdSh2KSwgKGFkZHIpKQogI2RlZmluZSBpb3dyaXRlMzIodiwgYWRkcikJd3JpdGVsKCh2KSwgKGFkZHIpKQorI2RlZmluZSBpb3dyaXRlMzJiZSh2LCBhZGRyKQlpb3dyaXRlMzIoYmUzMl90b19jcHUodiksIChhZGRyKSkKIAogI2RlZmluZSBpb3JlYWQ4X3JlcChwLCBkc3QsIGNvdW50KSBcCiAJaW5zYigodW5zaWduZWQgbG9uZykgKHApLCAoZHN0KSwgKGNvdW50KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2lvY3Rscy5oCmluZGV4IGE3OTllMjAuLjg1NTRjYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9pb2N0bHMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBUQ1NFVFgJCTB4NTQzMwogI2RlZmluZSBUQ1NFVFhGCQkweDU0MzQKICNkZWZpbmUgVENTRVRYVwkJMHg1NDM1CisjZGVmaW5lIFRJT0NTSUcJCV9JT1coJ1QnLCAweDM2LCBpbnQpICAvKiBwdHk6IGdlbmVyYXRlIHNpZ25hbCAqLwogCiAjZGVmaW5lIEZJT05DTEVYCTB4NTQ1MAogI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKQEAgLTg3LDEyICs4OCwxMCBAQAogI2RlZmluZSBUSU9DR0lDT1VOVAkweDU0NUQJLyogcmVhZCBzZXJpYWwgcG9ydCBpbmxpbmUgaW50ZXJydXB0IGNvdW50cyAqLwogCiAvKgotICogc29tZSBhcmNoaXRlY3R1cmVzIGRlZmluZSBGSU9RU0laRSBhcyAweDU0NUUsIHdoaWNoIGlzIHVzZWQgZm9yCi0gKiBUSU9DR0hBWUVTRVNQIG9uIG90aGVycworICogU29tZSBhcmNoZXMgYWxyZWFkeSBkZWZpbmUgRklPUVNJWkUgZHVlIHRvIGEgaGlzdG9yaWNhbAorICogY29uZmxpY3Qgd2l0aCBhIEhheWVzIG1vZGVtLXNwZWNpZmljIGlvY3RsIHZhbHVlLgogICovCiAjaWZuZGVmIEZJT1FTSVpFCi0jIGRlZmluZSBUSU9DR0hBWUVTRVNQCTB4NTQ1RSAgLyogR2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCi0jIGRlZmluZSBUSU9DU0hBWUVTRVNQCTB4NTQ1RiAgLyogU2V0IEhheWVzIEVTUCBjb25maWd1cmF0aW9uICovCiAjIGRlZmluZSBGSU9RU0laRQkweDU0NjAKICNlbmRpZgogCkBAIC0xMDQsNiArMTAzLDcgQEAKICNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKICNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2CiAjZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgorI2RlZmluZSBUSU9DUEtUX0lPQ1RMCQk2NAogCiAjZGVmaW5lIFRJT0NTRVJfVEVNVAkweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbDY0LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmFjNzYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbDY0LmgKQEAgLTAsMCArMSw5NiBAQAorI2lmbmRlZiBfQVNNX0dFTkVSSUNfTE9DQUw2NF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19MT0NBTDY0X0gKKworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKgorICogQSBzaWduZWQgbG9uZyB0eXBlIGZvciBvcGVyYXRpb25zIHdoaWNoIGFyZSBhdG9taWMgZm9yIGEgc2luZ2xlIENQVS4KKyAqIFVzdWFsbHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHBlci1jcHUgdmFyaWFibGVzLgorICoKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHdoaWNoIHVzZXMgYXRvbWljNjRfdC4gIFdoaWNoIGlzCisgKiByYXRoZXIgcG9pbnRsZXNzLiAgVGhlIHdob2xlIHBvaW50IGJlaGluZCBsb2NhbDY0X3QgaXMgdGhhdCBzb21lIHByb2Nlc3NvcnMKKyAqIGNhbiBwZXJmb3JtIGF0b21pYyBhZGRzIGFuZCBzdWJ0cmFjdHMgaW4gYSBtYW5uZXIgd2hpY2ggaXMgYXRvbWljIHdydCBJUlFzCisgKiBydW5uaW5nIG9uIHRoaXMgQ1BVLiAgbG9jYWw2NF90IGFsbG93cyBleHBsb2l0YXRpb24gb2Ygc3VjaCBjYXBhYmlsaXRpZXMuCisgKi8KKworLyogSW1wbGVtZW50IGluIHRlcm1zIG9mIGF0b21pY3MuICovCisKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisKKyNpbmNsdWRlIDxhc20vbG9jYWwuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCWxvY2FsX3QgYTsKK30gbG9jYWw2NF90OworCisjZGVmaW5lIExPQ0FMNjRfSU5JVChpKQl7IExPQ0FMX0lOSVQoaSkgfQorCisjZGVmaW5lIGxvY2FsNjRfcmVhZChsKQkJbG9jYWxfcmVhZCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X3NldChsLGkpCWxvY2FsX3NldCgoJihsKS0+YSksKGkpKQorI2RlZmluZSBsb2NhbDY0X2luYyhsKQkJbG9jYWxfaW5jKCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfZGVjKGwpCQlsb2NhbF9kZWMoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9hZGQoaSxsKQlsb2NhbF9hZGQoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9zdWIoaSxsKQlsb2NhbF9zdWIoKGkpLCgmKGwpLT5hKSkKKworI2RlZmluZSBsb2NhbDY0X3N1Yl9hbmRfdGVzdChpLCBsKSBsb2NhbF9zdWJfYW5kX3Rlc3QoKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfZGVjX2FuZF90ZXN0KGwpIGxvY2FsX2RlY19hbmRfdGVzdCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X2luY19hbmRfdGVzdChsKSBsb2NhbF9pbmNfYW5kX3Rlc3QoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9hZGRfbmVnYXRpdmUoaSwgbCkgbG9jYWxfYWRkX25lZ2F0aXZlKChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2FkZF9yZXR1cm4oaSwgbCkgbG9jYWxfYWRkX3JldHVybigoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9zdWJfcmV0dXJuKGksIGwpIGxvY2FsX3N1Yl9yZXR1cm4oKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfaW5jX3JldHVybihsKQlsb2NhbF9pbmNfcmV0dXJuKCYobCktPmEpCisKKyNkZWZpbmUgbG9jYWw2NF9jbXB4Y2hnKGwsIG8sIG4pIGxvY2FsX2NtcHhjaGcoKCYobCktPmEpLCAobyksIChuKSkKKyNkZWZpbmUgbG9jYWw2NF94Y2hnKGwsIG4pCWxvY2FsX3hjaGcoKCYobCktPmEpLCAobikpCisjZGVmaW5lIGxvY2FsNjRfYWRkX3VubGVzcyhsLCBfYSwgdSkgbG9jYWxfYWRkX3VubGVzcygoJihsKS0+YSksIChfYSksICh1KSkKKyNkZWZpbmUgbG9jYWw2NF9pbmNfbm90X3plcm8obCkJbG9jYWxfaW5jX25vdF96ZXJvKCYobCktPmEpCisKKy8qIE5vbi1hdG9taWMgdmFyaWFudHMsIGllLiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkCisgKiBpbiBpbnRlcnJ1cHQsIGV0Yy4gIFNvbWUgYXJjaHMgY2FuIG9wdGltaXplIHRoaXMgY2FzZSB3ZWxsLiAqLworI2RlZmluZSBfX2xvY2FsNjRfaW5jKGwpCWxvY2FsNjRfc2V0KChsKSwgbG9jYWw2NF9yZWFkKGwpICsgMSkKKyNkZWZpbmUgX19sb2NhbDY0X2RlYyhsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSAtIDEpCisjZGVmaW5lIF9fbG9jYWw2NF9hZGQoaSxsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSArIChpKSkKKyNkZWZpbmUgX19sb2NhbDY0X3N1YihpLGwpCWxvY2FsNjRfc2V0KChsKSwgbG9jYWw2NF9yZWFkKGwpIC0gKGkpKQorCisjZWxzZSAvKiBCSVRTX1BFUl9MT05HICE9IDY0ICovCisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKy8qIERvbid0IHVzZSB0eXBlZGVmOiBkb24ndCB3YW50IHRoZW0gdG8gYmUgbWl4ZWQgd2l0aCBhdG9taWNfdCdzLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWF0b21pYzY0X3QgYTsKK30gbG9jYWw2NF90OworCisjZGVmaW5lIExPQ0FMNjRfSU5JVChpKQl7IEFUT01JQ19MT05HX0lOSVQoaSkgfQorCisjZGVmaW5lIGxvY2FsNjRfcmVhZChsKQkJYXRvbWljNjRfcmVhZCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X3NldChsLGkpCWF0b21pYzY0X3NldCgoJihsKS0+YSksKGkpKQorI2RlZmluZSBsb2NhbDY0X2luYyhsKQkJYXRvbWljNjRfaW5jKCYobCktPmEpCisjZGVmaW5lIGxvY2FsNjRfZGVjKGwpCQlhdG9taWM2NF9kZWMoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9hZGQoaSxsKQlhdG9taWM2NF9hZGQoKGkpLCgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9zdWIoaSxsKQlhdG9taWM2NF9zdWIoKGkpLCgmKGwpLT5hKSkKKworI2RlZmluZSBsb2NhbDY0X3N1Yl9hbmRfdGVzdChpLCBsKSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfZGVjX2FuZF90ZXN0KGwpIGF0b21pYzY0X2RlY19hbmRfdGVzdCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbDY0X2luY19hbmRfdGVzdChsKSBhdG9taWM2NF9pbmNfYW5kX3Rlc3QoJihsKS0+YSkKKyNkZWZpbmUgbG9jYWw2NF9hZGRfbmVnYXRpdmUoaSwgbCkgYXRvbWljNjRfYWRkX25lZ2F0aXZlKChpKSwgKCYobCktPmEpKQorI2RlZmluZSBsb2NhbDY0X2FkZF9yZXR1cm4oaSwgbCkgYXRvbWljNjRfYWRkX3JldHVybigoaSksICgmKGwpLT5hKSkKKyNkZWZpbmUgbG9jYWw2NF9zdWJfcmV0dXJuKGksIGwpIGF0b21pYzY0X3N1Yl9yZXR1cm4oKGkpLCAoJihsKS0+YSkpCisjZGVmaW5lIGxvY2FsNjRfaW5jX3JldHVybihsKQlhdG9taWM2NF9pbmNfcmV0dXJuKCYobCktPmEpCisKKyNkZWZpbmUgbG9jYWw2NF9jbXB4Y2hnKGwsIG8sIG4pIGF0b21pYzY0X2NtcHhjaGcoKCYobCktPmEpLCAobyksIChuKSkKKyNkZWZpbmUgbG9jYWw2NF94Y2hnKGwsIG4pCWF0b21pYzY0X3hjaGcoKCYobCktPmEpLCAobikpCisjZGVmaW5lIGxvY2FsNjRfYWRkX3VubGVzcyhsLCBfYSwgdSkgYXRvbWljNjRfYWRkX3VubGVzcygoJihsKS0+YSksIChfYSksICh1KSkKKyNkZWZpbmUgbG9jYWw2NF9pbmNfbm90X3plcm8obCkJYXRvbWljNjRfaW5jX25vdF96ZXJvKCYobCktPmEpCisKKy8qIE5vbi1hdG9taWMgdmFyaWFudHMsIGllLiBwcmVlbXB0aW9uIGRpc2FibGVkIGFuZCB3b24ndCBiZSB0b3VjaGVkCisgKiBpbiBpbnRlcnJ1cHQsIGV0Yy4gIFNvbWUgYXJjaHMgY2FuIG9wdGltaXplIHRoaXMgY2FzZSB3ZWxsLiAqLworI2RlZmluZSBfX2xvY2FsNjRfaW5jKGwpCWxvY2FsNjRfc2V0KChsKSwgbG9jYWw2NF9yZWFkKGwpICsgMSkKKyNkZWZpbmUgX19sb2NhbDY0X2RlYyhsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSAtIDEpCisjZGVmaW5lIF9fbG9jYWw2NF9hZGQoaSxsKQlsb2NhbDY0X3NldCgobCksIGxvY2FsNjRfcmVhZChsKSArIChpKSkKKyNkZWZpbmUgX19sb2NhbDY0X3N1YihpLGwpCWxvY2FsNjRfc2V0KChsKSwgbG9jYWw2NF9yZWFkKGwpIC0gKGkpKQorCisjZW5kaWYgLyogQklUU19QRVJfTE9ORyAhPSA2NCAqLworCisjZW5kaWYgLyogX0FTTV9HRU5FUklDX0xPQ0FMNjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKaW5kZXggM2I0ZmIzZS4uMGZkMjhlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCkBAIC0zMyw3ICszMyw4IEBACiAJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKIAlfX3N0YXRmc193b3JkIGZfbmFtZWxlbjsKIAlfX3N0YXRmc193b3JkIGZfZnJzaXplOwotCV9fc3RhdGZzX3dvcmQgZl9zcGFyZVs1XTsKKwlfX3N0YXRmc193b3JkIGZfZmxhZ3M7CisJX19zdGF0ZnNfd29yZCBmX3NwYXJlWzRdOwogfTsKIAogLyoKQEAgLTU1LDcgKzU2LDggQEAKIAlfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogCV9fc3RhdGZzX3dvcmQgZl9uYW1lbGVuOwogCV9fc3RhdGZzX3dvcmQgZl9mcnNpemU7Ci0JX19zdGF0ZnNfd29yZCBmX3NwYXJlWzVdOworCV9fc3RhdGZzX3dvcmQgZl9mbGFnczsKKwlfX3N0YXRmc193b3JkIGZfc3BhcmVbNF07CiB9IEFSQ0hfUEFDS19TVEFURlM2NDsKIAogLyogCkBAIC03Nyw3ICs3OSw4IEBACiAJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKIAlfX3UzMiBmX25hbWVsZW47CiAJX191MzIgZl9mcnNpemU7Ci0JX191MzIgZl9zcGFyZVs1XTsKKwlfX3UzMiBmX2ZsYWdzOworCV9fdTMyIGZfc3BhcmVbNF07CiB9IEFSQ0hfUEFDS19DT01QQVRfU1RBVEZTNjQ7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90ZXJtYml0cy5oCmluZGV4IDFjOTc3M2QuLjIzMmI0NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGVybWJpdHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3Rlcm1iaXRzLmgKQEAgLTE3OCw2ICsxNzgsNyBAQAogI2RlZmluZSBGTFVTSE8JMDAxMDAwMAogI2RlZmluZSBQRU5ESU4JMDA0MDAwMAogI2RlZmluZSBJRVhURU4JMDEwMDAwMAorI2RlZmluZSBFWFRQUk9DCTAyMDAwMDAKIAogLyogdGNmbG93KCkgYW5kIFRDWE9OQyB1c2UgdGhlc2UgKi8KICNkZWZpbmUJVENPT0ZGCQkwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKaW5kZXggZmQ2MDcwMC4uZmM4MjRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIElCTSBDb3JwLgogICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgICAgICAgIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM0LDkgKzM0LDE2IEBACiAjaWZuZGVmIGNwdV90b19ub2RlCiAjZGVmaW5lIGNwdV90b19ub2RlKGNwdSkJKCh2b2lkKShjcHUpLDApCiAjZW5kaWYKKyNpZm5kZWYgc2V0X251bWFfbm9kZQorI2RlZmluZSBzZXRfbnVtYV9ub2RlKG5vZGUpCisjZW5kaWYKKyNpZm5kZWYgc2V0X2NwdV9udW1hX25vZGUKKyNkZWZpbmUgc2V0X2NwdV9udW1hX25vZGUoY3B1LCBub2RlKQorI2VuZGlmCiAjaWZuZGVmIGNwdV90b19tZW0KICNkZWZpbmUgY3B1X3RvX21lbShjcHUpCQkoKHZvaWQpKGNwdSksMCkKICNlbmRpZgorCiAjaWZuZGVmIHBhcmVudF9ub2RlCiAjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpCSgodm9pZCkobm9kZSksMCkKICNlbmRpZgpAQCAtNTUsNCArNjIsMTUgQEAKIAogI2VuZGlmCS8qIENPTkZJR19OVU1BICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfTlVNQSkgfHwgIWRlZmluZWQoQ09ORklHX0hBVkVfTUVNT1JZTEVTU19OT0RFUykKKworI2lmbmRlZiBzZXRfbnVtYV9tZW0KKyNkZWZpbmUgc2V0X251bWFfbWVtKG5vZGUpCisjZW5kaWYKKyNpZm5kZWYgc2V0X2NwdV9udW1hX21lbQorI2RlZmluZSBzZXRfY3B1X251bWFfbWVtKGNwdSwgbm9kZSkKKyNlbmRpZgorCisjZW5kaWYJLyogIUNPTkZJR19OVU1BIHx8ICFDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTICovCisKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdW5pc3RkLmgKaW5kZXggNmEwYjMwZi4uZTE4OTgwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3VuaXN0ZC5oCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIF9fU1lTQ0FMTCh4LCB5KQogI2VuZGlmCiAKLSNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gMzIKKyNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gMzIgfHwgZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKQogI2RlZmluZSBfX1NDXzMyNjQoX25yLCBfMzIsIF82NCkgX19TWVNDQUxMKF9uciwgXzMyKQogI2Vsc2UKICNkZWZpbmUgX19TQ18zMjY0KF9uciwgXzMyLCBfNjQpIF9fU1lTQ0FMTChfbnIsIF82NCkKQEAgLTI0MSw4ICsyNDEsMTMgQEAKIF9fU1lTQ0FMTChfX05SX2ZzeW5jLCBzeXNfZnN5bmMpCiAjZGVmaW5lIF9fTlJfZmRhdGFzeW5jIDgzCiBfX1NZU0NBTEwoX19OUl9mZGF0YXN5bmMsIHN5c19mZGF0YXN5bmMpCisjaWZkZWYgX19BUkNIX1dBTlRfU1lOQ19GSUxFX1JBTkdFMgorI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZTIgODQKK19fU1lTQ0FMTChfX05SX3N5bmNfZmlsZV9yYW5nZTIsIHN5c19zeW5jX2ZpbGVfcmFuZ2UyKQorI2Vsc2UKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgODQKLV9fU1lTQ0FMTChfX05SX3N5bmNfZmlsZV9yYW5nZSwgc3lzX3N5bmNfZmlsZV9yYW5nZSkgLyogLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZTIsICovCitfX1NZU0NBTEwoX19OUl9zeW5jX2ZpbGVfcmFuZ2UsIHN5c19zeW5jX2ZpbGVfcmFuZ2UpCisjZW5kaWYKIAogLyogZnMvdGltZXJmZC5jICovCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgODUKQEAgLTU4MCw3ICs1ODUsNyBAQAogX19TQ18zMjY0KF9fTlIzMjY0X21tYXAsIHN5c19tbWFwMiwgc3lzX21tYXApCiAvKiBtbS9mYWR2aXNlLmMgKi8KICNkZWZpbmUgX19OUjMyNjRfZmFkdmlzZTY0IDIyMwotX19TQ18zMjY0KF9fTlIzMjY0X2ZhZHZpc2U2NCwgc3lzX2ZhZHZpc2U2NF82NCwgc3lzX2ZhZHZpc2U2NCkKK19fU1lTQ0FMTChfX05SMzI2NF9mYWR2aXNlNjQsIHN5c19mYWR2aXNlNjRfNjQpCiAKIC8qIG1tLywgQ09ORklHX01NVSBvbmx5ICovCiAjaWZuZGVmIF9fQVJDSF9OT01NVQpAQCAtNjI3LDggKzYzMiwxOSBAQAogI2RlZmluZSBfX05SX3JlY3ZtbXNnIDI0MwogX19TWVNDQUxMKF9fTlJfcmVjdm1tc2csIHN5c19yZWN2bW1zZykKIAorLyoKKyAqIEFyY2hpdGVjdHVyZXMgbWF5IHByb3ZpZGUgdXAgdG8gMTYgc3lzY2FsbHMgb2YgdGhlaXIgb3duCisgKiBzdGFydGluZyB3aXRoIHRoaXMgdmFsdWUuCisgKi8KKyNkZWZpbmUgX19OUl9hcmNoX3NwZWNpZmljX3N5c2NhbGwgMjQ0CisKKyNkZWZpbmUgX19OUl93YWl0NCAyNjAKK19fU1lTQ0FMTChfX05SX3dhaXQ0LCBzeXNfd2FpdDQpCisjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IDI2MQorX19TWVNDQUxMKF9fTlJfcHJsaW1pdDY0LCBzeXNfcHJsaW1pdDY0KQorCiAjdW5kZWYgX19OUl9zeXNjYWxscwotI2RlZmluZSBfX05SX3N5c2NhbGxzIDI0NAorI2RlZmluZSBfX05SX3N5c2NhbGxzIDI2MgogCiAvKgogICogQWxsIHN5c2NhbGxzIGJlbG93IGhlcmUgc2hvdWxkIGdvIGF3YXkgcmVhbGx5LApAQCAtNjk0LDcgKzcxMCw4IEBACiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMgKF9fTlJfc2lnbmFsZmQrMSkKICNlbmRpZiAvKiBfX0FSQ0hfV0FOVF9TWVNDQUxMX05PX0ZMQUdTICovCiAKLSNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gMzIgJiYgZGVmaW5lZChfX0FSQ0hfV0FOVF9TWVNDQUxMX09GRl9UKQorI2lmIChfX0JJVFNfUEVSX0xPTkcgPT0gMzIgfHwgZGVmaW5lZChfX1NZU0NBTExfQ09NUEFUKSkgJiYgXAorICAgICBkZWZpbmVkKF9fQVJDSF9XQU5UX1NZU0NBTExfT0ZGX1QpCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgMTA0NgogX19TWVNDQUxMKF9fTlJfc2VuZGZpbGUsIHN5c19zZW5kZmlsZSkKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgMTA0NwpAQCAtNzQwLDYgKzc1Nyw3IEBACiBfX1NZU0NBTEwoX19OUl9wYXVzZSwgc3lzX3BhdXNlKQogI2RlZmluZSBfX05SX3RpbWUgMTA2MgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKIF9fU1lTQ0FMTChfX05SX3RpbWUsIHN5c190aW1lKQogI2RlZmluZSBfX05SX3V0aW1lIDEwNjMKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCkBAIC03NjMsOCArNzgxLDggQEAKIF9fU1lTQ0FMTChfX05SX3VzdGF0LCBzeXNfdXN0YXQpCiAjZGVmaW5lIF9fTlJfdmZvcmsgMTA3MQogX19TWVNDQUxMKF9fTlJfdmZvcmssIHN5c192Zm9yaykKLSNkZWZpbmUgX19OUl93YWl0NCAxMDcyCi1fX1NZU0NBTEwoX19OUl93YWl0NCwgc3lzX3dhaXQ0KQorI2RlZmluZSBfX05SX29sZHdhaXQ0IDEwNzIKK19fU1lTQ0FMTChfX05SX29sZHdhaXQ0LCBzeXNfd2FpdDQpCiAjZGVmaW5lIF9fTlJfcmVjdiAxMDczCiBfX1NZU0NBTEwoX19OUl9yZWN2LCBzeXNfcmVjdikKICNkZWZpbmUgX19OUl9zZW5kIDEwNzQKQEAgLTgwMSw3ICs4MTksNyBAQAogICogSGVyZSB3ZSBtYXAgdGhlIG51bWJlcnMgc28gdGhhdCBib3RoIHZlcnNpb25zCiAgKiB1c2UgdGhlIHNhbWUgc3lzY2FsbCB0YWJsZSBsYXlvdXQuCiAgKi8KLSNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQKKyNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gNjQgJiYgIWRlZmluZWQoX19TWVNDQUxMX0NPTVBBVCkKICNkZWZpbmUgX19OUl9mY250bCBfX05SMzI2NF9mY250bAogI2RlZmluZSBfX05SX3N0YXRmcyBfX05SMzI2NF9zdGF0ZnMKICNkZWZpbmUgX19OUl9mc3RhdGZzIF9fTlIzMjY0X2ZzdGF0ZnMKQEAgLTg0OCw2ICs4NjYsNyBAQAogI2VuZGlmCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKKyNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNGU3YWU2MC4uOGE5MmExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMTU2LDEwICsxNTYsNiBAQAogCUNQVV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCiAJTUVNX0tFRVAoaW5pdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChleGl0LmRhdGEpCQkJCQkJXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19tYXJrZXJzKSA9IC47CQkJCVwKLQkqKF9fbWFya2VycykJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX21hcmtlcnMpID0gLjsJCQkJXAogCS4gPSBBTElHTigzMik7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJKihfX3RyYWNlcG9pbnRzKQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDkzYTFhMzEuLmM3MDcyNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KIAogc3RydWN0IGRybV9kZXZpY2U7CiBzdHJ1Y3QgZHJtX21vZGVfc2V0OwpAQCAtNTk1LDcgKzU5NCw3IEBACiAKIAkvKiBvdXRwdXQgcG9sbCBzdXBwb3J0ICovCiAJYm9vbCBwb2xsX2VuYWJsZWQ7Ci0Jc3RydWN0IGRlbGF5ZWRfc2xvd193b3JrIG91dHB1dF9wb2xsX3Nsb3dfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIG91dHB1dF9wb2xsX3dvcms7CiAKIAkvKiBwb2ludGVycyB0byBzdGFuZGFyZCBwcm9wZXJ0aWVzICovCiAJc3RydWN0IGxpc3RfaGVhZCBwcm9wZXJ0eV9ibG9iX2xpc3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvZG5zX3Jlc29sdmVyLXR5cGUuaCBiL2luY2x1ZGUva2V5cy9kbnNfcmVzb2x2ZXItdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyODRhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2tleXMvZG5zX3Jlc29sdmVyLXR5cGUuaApAQCAtMCwwICsxLDIzIEBACisvKiBETlMgcmVzb2x2ZXIga2V5IHR5cGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgV2FuZyBMZWkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IFdhbmcgTGVpICh3YW5nODQwOTI1QGdtYWlsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0tFWVNfRE5TX1JFU09MVkVSX1RZUEVfSAorI2RlZmluZSBfS0VZU19ETlNfUkVTT0xWRVJfVFlQRV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXktdHlwZS5oPgorCitleHRlcm4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlcjsKKworZXh0ZXJuIGludCByZXF1ZXN0X2Ruc19yZXNvbHZlcl9rZXkoY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCisJCQkJICAgIGNvbnN0IGNoYXIgKmNhbGxvdXRfaW5mbywKKwkJCQkgICAgY2hhciAqKmRhdGEpOworCisjZW5kaWYgLyogX0tFWVNfRE5TX1JFU09MVkVSX1RZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCA5YWE5YmNhLi45ZDY1ZDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMzksNiArMzksNyBAQAogaGVhZGVyLXkgKz0gYjFsbGkuaAogaGVhZGVyLXkgKz0gYmF5Y29tLmgKIGhlYWRlci15ICs9IGJmc19mcy5oCitoZWFkZXIteSArPSBibGtfdHlwZXMuaAogaGVhZGVyLXkgKz0gYmxrcGcuaAogaGVhZGVyLXkgKz0gYnBxZXRoZXIuaAogaGVhZGVyLXkgKz0gYnNnLmgKQEAgLTIxMCw2ICsyMTEsNyBAQAogdW5pZmRlZi15ICs9IGV2ZW50cG9sbC5oCiB1bmlmZGVmLXkgKz0gc2lnbmFsZmQuaAogdW5pZmRlZi15ICs9IGV4dDJfZnMuaAordW5pZmRlZi15ICs9IGZhbm90aWZ5LmgKIHVuaWZkZWYteSArPSBmYi5oCiB1bmlmZGVmLXkgKz0gZmNudGwuaAogdW5pZmRlZi15ICs9IGZpbHRlci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FoY2lfcGxhdGZvcm0uaCBiL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCmluZGV4IGY3ZGQ1NzYuLmJlM2Q5YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWhjaV9wbGF0Zm9ybS5oCkBAIC0xNSwxMSArMTUsMTMgQEAKICNpZm5kZWYgX0FIQ0lfUExBVEZPUk1fSAogI2RlZmluZSBfQUhDSV9QTEFURk9STV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCiBzdHJ1Y3QgZGV2aWNlOwogc3RydWN0IGF0YV9wb3J0X2luZm87CiAKIHN0cnVjdCBhaGNpX3BsYXRmb3JtX2RhdGEgewotCWludCAoKmluaXQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqaW5pdCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmFkZHIpOwogCXZvaWQgKCpleGl0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICphdGFfcG9ydF9pbmZvOwogCXVuc2lnbmVkIGludCBmb3JjZV9wb3J0X21hcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCBmMzkxZDQ1Li5lMjRhZmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC01NDQsNyArNTQ0LDcgQEAKICNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgX19hdWRpdF9pbm9kZShuLGQpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX2F1ZGl0X2lub2RlX2NoaWxkKGkscCkgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGF1ZGl0X2lub2RlKG4sZCkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2lub2RlKG4sZCkgZG8geyAodm9pZCkoZCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2lub2RlX2NoaWxkKGkscCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2NvcmVfZHVtcHMoaSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0c2NfZ2V0X3N0YW1wKGMsdCxzKSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXV0b19mcy5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmgKaW5kZXggN2IwOWM4My4uZGE2NGUxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmgKQEAgLTc5LDYgKzc5LDcgQEAKICNkZWZpbmUgQVVUT0ZTX0lPQ19GQUlMICAgICAgIF9JTygweDkzLDB4NjEpCiAjZGVmaW5lIEFVVE9GU19JT0NfQ0FUQVRPTklDICBfSU8oMHg5MywweDYyKQogI2RlZmluZSBBVVRPRlNfSU9DX1BST1RPVkVSICAgX0lPUigweDkzLDB4NjMsaW50KQorI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQzMiBfSU9XUigweDkzLDB4NjQsY29tcGF0X3Vsb25nX3QpCiAjZGVmaW5lIEFVVE9GU19JT0NfU0VUVElNRU9VVCBfSU9XUigweDkzLDB4NjQsdW5zaWduZWQgbG9uZykKICNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkUgICAgIF9JT1IoMHg5MywweDY1LHN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCmluZGV4IGU5YWVjMGQuLjM1YjAwNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAlCRElfYXN5bmNfY29uZ2VzdGVkLAkvKiBUaGUgYXN5bmMgKHdyaXRlKSBxdWV1ZSBpcyBnZXR0aW5nIGZ1bGwgKi8KIAlCRElfc3luY19jb25nZXN0ZWQsCS8qIFRoZSBzeW5jIHF1ZXVlIGlzIGdldHRpbmcgZnVsbCAqLwogCUJESV9yZWdpc3RlcmVkLAkJLyogYmRpX3JlZ2lzdGVyKCkgd2FzIGRvbmUgKi8KKwlCRElfd3JpdGViYWNrX3J1bm5pbmcsCS8qIFdyaXRlYmFjayBpcyBpbiBwcm9ncmVzcyAqLwogCUJESV91bnVzZWQsCQkvKiBBdmFpbGFibGUgYml0cyBzdGFydCBoZXJlICovCiB9OwogCkBAIC00NSwyMiArNDYsMjEgQEAKICNkZWZpbmUgQkRJX1NUQVRfQkFUQ0ggKDgqKDEraWxvZzIobnJfY3B1X2lkcykpKQogCiBzdHJ1Y3QgYmRpX3dyaXRlYmFjayB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJCS8qIGhhbmdzIG9mZiB0aGUgYmRpICovCi0KLQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOwkJLyogb3VyIHBhcmVudCBiZGkgKi8KKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOwkvKiBvdXIgcGFyZW50IGJkaSAqLwogCXVuc2lnbmVkIGludCBucjsKIAotCXVuc2lnbmVkIGxvbmcgbGFzdF9vbGRfZmx1c2g7CQkvKiBsYXN0IG9sZCBkYXRhIGZsdXNoICovCisJdW5zaWduZWQgbG9uZyBsYXN0X29sZF9mbHVzaDsJLyogbGFzdCBvbGQgZGF0YSBmbHVzaCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9hY3RpdmU7CS8qIGxhc3QgdGltZSBiZGkgdGhyZWFkIHdhcyBhY3RpdmUgKi8KIAotCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIHdyaXRlYmFjayB0YXNrICovCi0Jc3RydWN0IGxpc3RfaGVhZAliX2RpcnR5OwkvKiBkaXJ0eSBpbm9kZXMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWJfaW87CQkvKiBwYXJrZWQgZm9yIHdyaXRlYmFjayAqLwotCXN0cnVjdCBsaXN0X2hlYWQJYl9tb3JlX2lvOwkvKiBwYXJrZWQgZm9yIG1vcmUgd3JpdGViYWNrICovCisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwkvKiB3cml0ZWJhY2sgdGhyZWFkICovCisJc3RydWN0IHRpbWVyX2xpc3Qgd2FrZXVwX3RpbWVyOyAvKiB1c2VkIGZvciBkZWxheWVkIGJkaSB0aHJlYWQgd2FrZXVwICovCisJc3RydWN0IGxpc3RfaGVhZCBiX2RpcnR5OwkvKiBkaXJ0eSBpbm9kZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJfaW87CQkvKiBwYXJrZWQgZm9yIHdyaXRlYmFjayAqLworCXN0cnVjdCBsaXN0X2hlYWQgYl9tb3JlX2lvOwkvKiBwYXJrZWQgZm9yIG1vcmUgd3JpdGViYWNrICovCiB9OwogCiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB7CiAJc3RydWN0IGxpc3RfaGVhZCBiZGlfbGlzdDsKLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiAJdW5zaWduZWQgbG9uZyByYV9wYWdlczsJLyogbWF4IHJlYWRhaGVhZCBpbiBQQUdFX0NBQ0hFX1NJWkUgdW5pdHMgKi8KIAl1bnNpZ25lZCBsb25nIHN0YXRlOwkvKiBBbHdheXMgdXNlIGF0b21pYyBiaXRvcHMgb24gdGhpcyAqLwogCXVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7IC8qIERldmljZSBjYXBhYmlsaXRpZXMgKi8KQEAgLTgwLDggKzgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgbWF4X3JhdGlvLCBtYXhfcHJvcF9mcmFjOwogCiAJc3RydWN0IGJkaV93cml0ZWJhY2sgd2I7ICAvKiBkZWZhdWx0IHdyaXRlYmFjayBpbmZvIGZvciB0aGlzIGJkaSAqLwotCXNwaW5sb2NrX3Qgd2JfbG9jazsJICAvKiBwcm90ZWN0cyB1cGRhdGUgc2lkZSBvZiB3Yl9saXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCB3Yl9saXN0OyAvKiB0aGUgZmx1c2hlciB0aHJlYWRzIGhhbmdpbmcgb2ZmIHRoaXMgYmRpICovCisJc3BpbmxvY2tfdCB3Yl9sb2NrOwkgIC8qIHByb3RlY3RzIHdvcmtfbGlzdCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCB3b3JrX2xpc3Q7CiAKQEAgLTEwNSw5ICsxMDQsMTAgQEAKIGludCBiZGlfc2V0dXBfYW5kX3JlZ2lzdGVyKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICosIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKIHZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKTsKIHZvaWQgYmRpX3N0YXJ0X2JhY2tncm91bmRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwotaW50IGJkaV93cml0ZWJhY2tfdGFzayhzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IpOworaW50IGJkaV93cml0ZWJhY2tfdGhyZWFkKHZvaWQgKmRhdGEpOwogaW50IGJkaV9oYXNfZGlydHlfaW8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7CiB2b2lkIGJkaV9hcm1fc3VwZXJzX3RpbWVyKHZvaWQpOwordm9pZCBiZGlfd2FrZXVwX3RocmVhZF9kZWxheWVkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwogCiBleHRlcm4gc3BpbmxvY2tfdCBiZGlfbG9jazsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGJkaV9saXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggN2ZjNTYwNi4uNTI3NDEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC05LDcgKzksNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLQorICoKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgpAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKy8qIHN0cnVjdCBiaW8sIGJpb192ZWMgYW5kIEJJT18qIGZsYWdzIGFyZSBkZWZpbmVkIGluIGJsa190eXBlcy5oICovCisjaW5jbHVkZSA8bGludXgvYmxrX3R5cGVzLmg+CisKICNkZWZpbmUgQklPX0RFQlVHCiAKICNpZmRlZiBCSU9fREVCVUcKQEAgLTQxLDE1NCArNDQsNiBAQAogI2RlZmluZSBCSU9fTUFYX1NFQ1RPUlMJCShCSU9fTUFYX1NJWkUgPj4gOSkKIAogLyoKLSAqIHdhcyB1bnNpZ25lZCBzaG9ydCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgcmVhZHkgZm9yID4gNjRrQiBJL08gcGFnZXMKLSAqLwotc3RydWN0IGJpb192ZWMgewotCXN0cnVjdCBwYWdlCSpidl9wYWdlOwotCXVuc2lnbmVkIGludAlidl9sZW47Ci0JdW5zaWduZWQgaW50CWJ2X29mZnNldDsKLX07Ci0KLXN0cnVjdCBiaW9fc2V0Owotc3RydWN0IGJpbzsKLXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQ7Ci10eXBlZGVmIHZvaWQgKGJpb19lbmRfaW9fdCkgKHN0cnVjdCBiaW8gKiwgaW50KTsKLXR5cGVkZWYgdm9pZCAoYmlvX2Rlc3RydWN0b3JfdCkgKHN0cnVjdCBiaW8gKik7Ci0KLS8qCi0gKiBtYWluIHVuaXQgb2YgSS9PIGZvciB0aGUgYmxvY2sgbGF5ZXIgYW5kIGxvd2VyIGxheWVycyAoaWUgZHJpdmVycyBhbmQKLSAqIHN0YWNraW5nIGRyaXZlcnMpCi0gKi8KLXN0cnVjdCBiaW8gewotCXNlY3Rvcl90CQliaV9zZWN0b3I7CS8qIGRldmljZSBhZGRyZXNzIGluIDUxMiBieXRlCi0JCQkJCQkgICBzZWN0b3JzICovCi0Jc3RydWN0IGJpbwkJKmJpX25leHQ7CS8qIHJlcXVlc3QgcXVldWUgbGluayAqLwotCXN0cnVjdCBibG9ja19kZXZpY2UJKmJpX2JkZXY7Ci0JdW5zaWduZWQgbG9uZwkJYmlfZmxhZ3M7CS8qIHN0YXR1cywgY29tbWFuZCwgZXRjICovCi0JdW5zaWduZWQgbG9uZwkJYmlfcnc7CQkvKiBib3R0b20gYml0cyBSRUFEL1dSSVRFLAotCQkJCQkJICogdG9wIGJpdHMgcHJpb3JpdHkKLQkJCQkJCSAqLwotCi0JdW5zaWduZWQgc2hvcnQJCWJpX3ZjbnQ7CS8qIGhvdyBtYW55IGJpb192ZWMncyAqLwotCXVuc2lnbmVkIHNob3J0CQliaV9pZHg7CQkvKiBjdXJyZW50IGluZGV4IGludG8gYnZsX3ZlYyAqLwotCi0JLyogTnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoaXMgQklPIGFmdGVyCi0JICogcGh5c2ljYWwgYWRkcmVzcyBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KLQkgKi8KLQl1bnNpZ25lZCBpbnQJCWJpX3BoeXNfc2VnbWVudHM7Ci0KLQl1bnNpZ25lZCBpbnQJCWJpX3NpemU7CS8qIHJlc2lkdWFsIEkvTyBjb3VudCAqLwotCi0JLyoKLQkgKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBtYXggc2VnbWVudCBzaXplLCB3ZSBhY2NvdW50IGZvciB0aGUKLQkgKiBzaXplcyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgbWVyZ2VhYmxlIHNlZ21lbnRzIGluIHRoaXMgYmlvLgotCSAqLwotCXVuc2lnbmVkIGludAkJYmlfc2VnX2Zyb250X3NpemU7Ci0JdW5zaWduZWQgaW50CQliaV9zZWdfYmFja19zaXplOwotCi0JdW5zaWduZWQgaW50CQliaV9tYXhfdmVjczsJLyogbWF4IGJ2bF92ZWNzIHdlIGNhbiBob2xkICovCi0KLQl1bnNpZ25lZCBpbnQJCWJpX2NvbXBfY3B1OwkvKiBjb21wbGV0aW9uIENQVSAqLwotCi0JYXRvbWljX3QJCWJpX2NudDsJCS8qIHBpbiBjb3VudCAqLwotCi0Jc3RydWN0IGJpb192ZWMJCSpiaV9pb192ZWM7CS8qIHRoZSBhY3R1YWwgdmVjIGxpc3QgKi8KLQotCWJpb19lbmRfaW9fdAkJKmJpX2VuZF9pbzsKLQotCXZvaWQJCQkqYmlfcHJpdmF0ZTsKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKLQlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaV9pbnRlZ3JpdHk7ICAvKiBkYXRhIGludGVncml0eSAqLwotI2VuZGlmCi0KLQliaW9fZGVzdHJ1Y3Rvcl90CSpiaV9kZXN0cnVjdG9yOwkvKiBkZXN0cnVjdG9yICovCi0KLQkvKgotCSAqIFdlIGNhbiBpbmxpbmUgYSBudW1iZXIgb2YgdmVjcyBhdCB0aGUgZW5kIG9mIHRoZSBiaW8sIHRvIGF2b2lkCi0JICogZG91YmxlIGFsbG9jYXRpb25zIGZvciBhIHNtYWxsIG51bWJlciBvZiBiaW9fdmVjcy4gVGhpcyBtZW1iZXIKLQkgKiBNVVNUIG9idmlvdXNseSBiZSBrZXB0IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmlvLgotCSAqLwotCXN0cnVjdCBiaW9fdmVjCQliaV9pbmxpbmVfdmVjc1swXTsKLX07Ci0KLS8qCi0gKiBiaW8gZmxhZ3MKLSAqLwotI2RlZmluZSBCSU9fVVBUT0RBVEUJMAkvKiBvayBhZnRlciBJL08gY29tcGxldGlvbiAqLwotI2RlZmluZSBCSU9fUldfQkxPQ0sJMQkvKiBSV19BSEVBRCBzZXQsIGFuZCByZWFkL3dyaXRlIHdvdWxkIGJsb2NrICovCi0jZGVmaW5lIEJJT19FT0YJCTIJLyogb3V0LW91dC1ib3VuZHMgZXJyb3IgKi8KLSNkZWZpbmUgQklPX1NFR19WQUxJRAkzCS8qIGJpX3BoeXNfc2VnbWVudHMgdmFsaWQgKi8KLSNkZWZpbmUgQklPX0NMT05FRAk0CS8qIGRvZXNuJ3Qgb3duIGRhdGEgKi8KLSNkZWZpbmUgQklPX0JPVU5DRUQJNQkvKiBiaW8gaXMgYSBib3VuY2UgYmlvICovCi0jZGVmaW5lIEJJT19VU0VSX01BUFBFRCA2CS8qIGNvbnRhaW5zIHVzZXIgcGFnZXMgKi8KLSNkZWZpbmUgQklPX0VPUE5PVFNVUFAJNwkvKiBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lIEJJT19DUFVfQUZGSU5FCTgJLyogY29tcGxldGUgYmlvIG9uIHNhbWUgQ1BVIGFzIHN1Ym1pdHRlZCAqLwotI2RlZmluZSBCSU9fTlVMTF9NQVBQRUQgOQkvKiBjb250YWlucyBpbnZhbGlkIHVzZXIgcGFnZXMgKi8KLSNkZWZpbmUgQklPX0ZTX0lOVEVHUklUWSAxMAkvKiBmcyBvd25zIGludGVncml0eSBkYXRhLCBub3QgYmxvY2sgbGF5ZXIgKi8KLSNkZWZpbmUgQklPX1FVSUVUCTExCS8qIE1ha2UgQklPIFF1aWV0ICovCi0jZGVmaW5lIGJpb19mbGFnZ2VkKGJpbywgZmxhZykJKChiaW8pLT5iaV9mbGFncyAmICgxIDw8IChmbGFnKSkpCi0KLS8qCi0gKiB0b3AgNCBiaXRzIG9mIGJpbyBmbGFncyBpbmRpY2F0ZSB0aGUgcG9vbCB0aGlzIGJpbyBjYW1lIGZyb20KLSAqLwotI2RlZmluZSBCSU9fUE9PTF9CSVRTCQkoNCkKLSNkZWZpbmUgQklPX1BPT0xfTk9ORQkJKCgxVUwgPDwgQklPX1BPT0xfQklUUykgLSAxKQotI2RlZmluZSBCSU9fUE9PTF9PRkZTRVQJCShCSVRTX1BFUl9MT05HIC0gQklPX1BPT0xfQklUUykKLSNkZWZpbmUgQklPX1BPT0xfTUFTSwkJKDFVTCA8PCBCSU9fUE9PTF9PRkZTRVQpCi0jZGVmaW5lIEJJT19QT09MX0lEWChiaW8pCSgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKQkKLQotLyoKLSAqIGJpbyBiaV9ydyBmbGFncwotICoKLSAqIGJpdCAwIC0tIGRhdGEgZGlyZWN0aW9uCi0gKglJZiBub3Qgc2V0LCBiaW8gaXMgYSByZWFkIGZyb20gZGV2aWNlLiBJZiBzZXQsIGl0J3MgYSB3cml0ZSB0byBkZXZpY2UuCi0gKiBiaXQgMSAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycwotICogYml0IDIgLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKLSAqIGJpdCAzIC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCi0gKiBiaXQgNCAtLSBydy1haGVhZCB3aGVuIHNldAotICogYml0IDUgLS0gYmFycmllcgotICoJSW5zZXJ0IGEgc2VyaWFsaXphdGlvbiBwb2ludCBpbiB0aGUgSU8gcXVldWUsIGZvcmNpbmcgcHJldmlvdXNseQotICoJc3VibWl0dGVkIElPIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhpcyBvbmUgaXMgaXNzdWVkLgotICogYml0IDYgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQuCi0gKiBiaXQgNyAtLSBVbnBsdWcgdGhlIGRldmljZSBpbW1lZGlhdGVseSBhZnRlciBzdWJtaXR0aW5nIHRoaXMgYmlvLgotICogYml0IDggLS0gbWV0YWRhdGEgcmVxdWVzdAotICoJVXNlZCBmb3IgdHJhY2luZyB0byBkaWZmZXJlbnRpYXRlIG1ldGFkYXRhIGFuZCBkYXRhIElPLiBNYXkgYWxzbwotICoJZ2V0IHNvbWUgcHJlZmVyZW50aWFsIHRyZWF0bWVudCBpbiB0aGUgSU8gc2NoZWR1bGVyCi0gKiBiaXQgOSAtLSBkaXNjYXJkIHNlY3RvcnMKLSAqCUluZm9ybXMgdGhlIGxvd2VyIGxldmVsIGRldmljZSB0aGF0IHRoaXMgcmFuZ2Ugb2Ygc2VjdG9ycyBpcyBubyBsb25nZXIKLSAqCXVzZWQgYnkgdGhlIGZpbGUgc3lzdGVtIGFuZCBtYXkgdGh1cyBiZSBmcmVlZCBieSB0aGUgZGV2aWNlLiBVc2VkCi0gKglmb3IgZmxhc2ggYmFzZWQgc3RvcmFnZS4KLSAqCURvbid0IHdhbnQgZHJpdmVyIHJldHJpZXMgZm9yIGFueSBmYXN0IGZhaWwgd2hhdGV2ZXIgdGhlIHJlYXNvbi4KLSAqIGJpdCAxMCAtLSBUZWxsIHRoZSBJTyBzY2hlZHVsZXIgbm90IHRvIHdhaXQgZm9yIG1vcmUgcmVxdWVzdHMgYWZ0ZXIgdGhpcwotCW9uZSBoYXMgYmVlbiBzdWJtaXR0ZWQsIGV2ZW4gaWYgaXQgaXMgYSBTWU5DIHJlcXVlc3QuCi0gKi8KLWVudW0gYmlvX3J3X2ZsYWdzIHsKLQlCSU9fUlcsCi0JQklPX1JXX0ZBSUxGQVNUX0RFViwKLQlCSU9fUldfRkFJTEZBU1RfVFJBTlNQT1JULAotCUJJT19SV19GQUlMRkFTVF9EUklWRVIsCi0JLyogYWJvdmUgZmxhZ3MgbXVzdCBtYXRjaCBSRVFfKiAqLwotCUJJT19SV19BSEVBRCwKLQlCSU9fUldfQkFSUklFUiwKLQlCSU9fUldfU1lOQ0lPLAotCUJJT19SV19VTlBMVUcsCi0JQklPX1JXX01FVEEsCi0JQklPX1JXX0RJU0NBUkQsCi0JQklPX1JXX05PSURMRSwKLX07Ci0KLS8qCi0gKiBGaXJzdCBmb3VyIGJpdHMgbXVzdCBtYXRjaCBiZXR3ZWVuIGJpby0+YmlfcncgYW5kIHJxLT5jbWRfZmxhZ3MsIG1ha2UKLSAqIHRoYXQgZXhwbGljaXQgaGVyZS4KLSAqLwotI2RlZmluZSBCSU9fUldfUlFfTUFTSwkJMHhmCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBiaW9fcndfZmxhZ2dlZChzdHJ1Y3QgYmlvICpiaW8sIGVudW0gYmlvX3J3X2ZsYWdzIGZsYWcpCi17Ci0JcmV0dXJuIChiaW8tPmJpX3J3ICYgKDEgPDwgZmxhZykpICE9IDA7Ci19Ci0KLS8qCiAgKiB1cHBlciAxNiBiaXRzIG9mIGJpX3J3IGRlZmluZSB0aGUgaW8gcHJpb3JpdHkgb2YgdGhpcyBiaW8KICAqLwogI2RlZmluZSBCSU9fUFJJT19TSElGVAkoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSAtIElPUFJJT19CSVRTKQpAQCAtMjExLDcgKzY2LDEwIEBACiAjZGVmaW5lIGJpb19vZmZzZXQoYmlvKQkJYmlvX2lvdmVjKChiaW8pKS0+YnZfb2Zmc2V0CiAjZGVmaW5lIGJpb19zZWdtZW50cyhiaW8pCSgoYmlvKS0+YmlfdmNudCAtIChiaW8pLT5iaV9pZHgpCiAjZGVmaW5lIGJpb19zZWN0b3JzKGJpbykJKChiaW8pLT5iaV9zaXplID4+IDkpCi0jZGVmaW5lIGJpb19lbXB0eV9iYXJyaWVyKGJpbykJKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpICYmICFiaW9faGFzX2RhdGEoYmlvKSAmJiAhYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkpCisjZGVmaW5lIGJpb19lbXB0eV9iYXJyaWVyKGJpbykgXAorCSgoYmlvLT5iaV9ydyAmIFJFUV9IQVJEQkFSUklFUikgJiYgXAorCSAhYmlvX2hhc19kYXRhKGJpbykgJiYgXAorCSAhKGJpby0+YmlfcncgJiBSRVFfRElTQ0FSRCkpCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJpb19jdXJfYnl0ZXMoc3RydWN0IGJpbyAqYmlvKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4M2E5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBCbG9jayBkYXRhIHR5cGVzIGFuZCBjb25zdGFudHMuICBEaXJlY3RseSBpbmNsdWRlIHRoaXMgZmlsZSBvbmx5IHRvCisgKiBicmVhayBpbmNsdWRlIGRlcGVuZGVuY3kgbG9vcC4KKyAqLworI2lmbmRlZiBfX0xJTlVYX0JMS19UWVBFU19ICisjZGVmaW5lIF9fTElOVVhfQkxLX1RZUEVTX0gKKworI2lmZGVmIENPTkZJR19CTE9DSworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGJpb19zZXQ7CitzdHJ1Y3QgYmlvOworc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZDsKK3N0cnVjdCBwYWdlOworc3RydWN0IGJsb2NrX2RldmljZTsKK3R5cGVkZWYgdm9pZCAoYmlvX2VuZF9pb190KSAoc3RydWN0IGJpbyAqLCBpbnQpOwordHlwZWRlZiB2b2lkIChiaW9fZGVzdHJ1Y3Rvcl90KSAoc3RydWN0IGJpbyAqKTsKKworLyoKKyAqIHdhcyB1bnNpZ25lZCBzaG9ydCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgcmVhZHkgZm9yID4gNjRrQiBJL08gcGFnZXMKKyAqLworc3RydWN0IGJpb192ZWMgeworCXN0cnVjdCBwYWdlCSpidl9wYWdlOworCXVuc2lnbmVkIGludAlidl9sZW47CisJdW5zaWduZWQgaW50CWJ2X29mZnNldDsKK307CisKKy8qCisgKiBtYWluIHVuaXQgb2YgSS9PIGZvciB0aGUgYmxvY2sgbGF5ZXIgYW5kIGxvd2VyIGxheWVycyAoaWUgZHJpdmVycyBhbmQKKyAqIHN0YWNraW5nIGRyaXZlcnMpCisgKi8KK3N0cnVjdCBiaW8geworCXNlY3Rvcl90CQliaV9zZWN0b3I7CS8qIGRldmljZSBhZGRyZXNzIGluIDUxMiBieXRlCisJCQkJCQkgICBzZWN0b3JzICovCisJc3RydWN0IGJpbwkJKmJpX25leHQ7CS8qIHJlcXVlc3QgcXVldWUgbGluayAqLworCXN0cnVjdCBibG9ja19kZXZpY2UJKmJpX2JkZXY7CisJdW5zaWduZWQgbG9uZwkJYmlfZmxhZ3M7CS8qIHN0YXR1cywgY29tbWFuZCwgZXRjICovCisJdW5zaWduZWQgbG9uZwkJYmlfcnc7CQkvKiBib3R0b20gYml0cyBSRUFEL1dSSVRFLAorCQkJCQkJICogdG9wIGJpdHMgcHJpb3JpdHkKKwkJCQkJCSAqLworCisJdW5zaWduZWQgc2hvcnQJCWJpX3ZjbnQ7CS8qIGhvdyBtYW55IGJpb192ZWMncyAqLworCXVuc2lnbmVkIHNob3J0CQliaV9pZHg7CQkvKiBjdXJyZW50IGluZGV4IGludG8gYnZsX3ZlYyAqLworCisJLyogTnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoaXMgQklPIGFmdGVyCisJICogcGh5c2ljYWwgYWRkcmVzcyBjb2FsZXNjaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCWJpX3BoeXNfc2VnbWVudHM7CisKKwl1bnNpZ25lZCBpbnQJCWJpX3NpemU7CS8qIHJlc2lkdWFsIEkvTyBjb3VudCAqLworCisJLyoKKwkgKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBtYXggc2VnbWVudCBzaXplLCB3ZSBhY2NvdW50IGZvciB0aGUKKwkgKiBzaXplcyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgbWVyZ2VhYmxlIHNlZ21lbnRzIGluIHRoaXMgYmlvLgorCSAqLworCXVuc2lnbmVkIGludAkJYmlfc2VnX2Zyb250X3NpemU7CisJdW5zaWduZWQgaW50CQliaV9zZWdfYmFja19zaXplOworCisJdW5zaWduZWQgaW50CQliaV9tYXhfdmVjczsJLyogbWF4IGJ2bF92ZWNzIHdlIGNhbiBob2xkICovCisKKwl1bnNpZ25lZCBpbnQJCWJpX2NvbXBfY3B1OwkvKiBjb21wbGV0aW9uIENQVSAqLworCisJYXRvbWljX3QJCWJpX2NudDsJCS8qIHBpbiBjb3VudCAqLworCisJc3RydWN0IGJpb192ZWMJCSpiaV9pb192ZWM7CS8qIHRoZSBhY3R1YWwgdmVjIGxpc3QgKi8KKworCWJpb19lbmRfaW9fdAkJKmJpX2VuZF9pbzsKKworCXZvaWQJCQkqYmlfcHJpdmF0ZTsKKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKKwlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaV9pbnRlZ3JpdHk7ICAvKiBkYXRhIGludGVncml0eSAqLworI2VuZGlmCisKKwliaW9fZGVzdHJ1Y3Rvcl90CSpiaV9kZXN0cnVjdG9yOwkvKiBkZXN0cnVjdG9yICovCisKKwkvKgorCSAqIFdlIGNhbiBpbmxpbmUgYSBudW1iZXIgb2YgdmVjcyBhdCB0aGUgZW5kIG9mIHRoZSBiaW8sIHRvIGF2b2lkCisJICogZG91YmxlIGFsbG9jYXRpb25zIGZvciBhIHNtYWxsIG51bWJlciBvZiBiaW9fdmVjcy4gVGhpcyBtZW1iZXIKKwkgKiBNVVNUIG9idmlvdXNseSBiZSBrZXB0IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmlvLgorCSAqLworCXN0cnVjdCBiaW9fdmVjCQliaV9pbmxpbmVfdmVjc1swXTsKK307CisKKy8qCisgKiBiaW8gZmxhZ3MKKyAqLworI2RlZmluZSBCSU9fVVBUT0RBVEUJMAkvKiBvayBhZnRlciBJL08gY29tcGxldGlvbiAqLworI2RlZmluZSBCSU9fUldfQkxPQ0sJMQkvKiBSV19BSEVBRCBzZXQsIGFuZCByZWFkL3dyaXRlIHdvdWxkIGJsb2NrICovCisjZGVmaW5lIEJJT19FT0YJCTIJLyogb3V0LW91dC1ib3VuZHMgZXJyb3IgKi8KKyNkZWZpbmUgQklPX1NFR19WQUxJRAkzCS8qIGJpX3BoeXNfc2VnbWVudHMgdmFsaWQgKi8KKyNkZWZpbmUgQklPX0NMT05FRAk0CS8qIGRvZXNuJ3Qgb3duIGRhdGEgKi8KKyNkZWZpbmUgQklPX0JPVU5DRUQJNQkvKiBiaW8gaXMgYSBib3VuY2UgYmlvICovCisjZGVmaW5lIEJJT19VU0VSX01BUFBFRCA2CS8qIGNvbnRhaW5zIHVzZXIgcGFnZXMgKi8KKyNkZWZpbmUgQklPX0VPUE5PVFNVUFAJNwkvKiBub3Qgc3VwcG9ydGVkICovCisjZGVmaW5lIEJJT19DUFVfQUZGSU5FCTgJLyogY29tcGxldGUgYmlvIG9uIHNhbWUgQ1BVIGFzIHN1Ym1pdHRlZCAqLworI2RlZmluZSBCSU9fTlVMTF9NQVBQRUQgOQkvKiBjb250YWlucyBpbnZhbGlkIHVzZXIgcGFnZXMgKi8KKyNkZWZpbmUgQklPX0ZTX0lOVEVHUklUWSAxMAkvKiBmcyBvd25zIGludGVncml0eSBkYXRhLCBub3QgYmxvY2sgbGF5ZXIgKi8KKyNkZWZpbmUgQklPX1FVSUVUCTExCS8qIE1ha2UgQklPIFF1aWV0ICovCisjZGVmaW5lIGJpb19mbGFnZ2VkKGJpbywgZmxhZykJKChiaW8pLT5iaV9mbGFncyAmICgxIDw8IChmbGFnKSkpCisKKy8qCisgKiB0b3AgNCBiaXRzIG9mIGJpbyBmbGFncyBpbmRpY2F0ZSB0aGUgcG9vbCB0aGlzIGJpbyBjYW1lIGZyb20KKyAqLworI2RlZmluZSBCSU9fUE9PTF9CSVRTCQkoNCkKKyNkZWZpbmUgQklPX1BPT0xfTk9ORQkJKCgxVUwgPDwgQklPX1BPT0xfQklUUykgLSAxKQorI2RlZmluZSBCSU9fUE9PTF9PRkZTRVQJCShCSVRTX1BFUl9MT05HIC0gQklPX1BPT0xfQklUUykKKyNkZWZpbmUgQklPX1BPT0xfTUFTSwkJKDFVTCA8PCBCSU9fUE9PTF9PRkZTRVQpCisjZGVmaW5lIEJJT19QT09MX0lEWChiaW8pCSgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKQorCisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCisKKy8qCisgKiBSZXF1ZXN0IGZsYWdzLiAgRm9yIHVzZSBpbiB0aGUgY21kX2ZsYWdzIGZpZWxkIG9mIHN0cnVjdCByZXF1ZXN0LCBhbmQgaW4KKyAqIGJpX3J3IG9mIHN0cnVjdCBiaW8uICBOb3RlIHRoYXQgc29tZSBmbGFncyBhcmUgb25seSB2YWxpZCBpbiBlaXRoZXIgb25lLgorICovCitlbnVtIHJxX2ZsYWdfYml0cyB7CisJLyogY29tbW9uIGZsYWdzICovCisJX19SRVFfV1JJVEUsCQkvKiBub3Qgc2V0LCByZWFkLiBzZXQsIHdyaXRlICovCisJX19SRVFfRkFJTEZBU1RfREVWLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkZXZpY2UgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfVFJBTlNQT1JULCAvKiBubyBkcml2ZXIgcmV0cmllcyBvZiB0cmFuc3BvcnQgZXJyb3JzICovCisJX19SRVFfRkFJTEZBU1RfRFJJVkVSLAkvKiBubyBkcml2ZXIgcmV0cmllcyBvZiBkcml2ZXIgZXJyb3JzICovCisKKwlfX1JFUV9IQVJEQkFSUklFUiwJLyogbWF5IG5vdCBiZSBwYXNzZWQgYnkgZHJpdmUgZWl0aGVyICovCisJX19SRVFfU1lOQywJCS8qIHJlcXVlc3QgaXMgc3luYyAoc3luYyB3cml0ZSBvciByZWFkKSAqLworCV9fUkVRX01FVEEsCQkvKiBtZXRhZGF0YSBpbyByZXF1ZXN0ICovCisJX19SRVFfRElTQ0FSRCwJCS8qIHJlcXVlc3QgdG8gZGlzY2FyZCBzZWN0b3JzICovCisJX19SRVFfTk9JRExFLAkJLyogZG9uJ3QgYW50aWNpcGF0ZSBtb3JlIElPIGFmdGVyIHRoaXMgb25lICovCisKKwkvKiBiaW8gb25seSBmbGFncyAqLworCV9fUkVRX1VOUExVRywJCS8qIHVucGx1ZyB0aGUgaW1tZWRpYXRlbHkgYWZ0ZXIgc3VibWlzc2lvbiAqLworCV9fUkVRX1JBSEVBRCwJCS8qIHJlYWQgYWhlYWQsIGNhbiBmYWlsIGFueXRpbWUgKi8KKworCS8qIHJlcXVlc3Qgb25seSBmbGFncyAqLworCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLworCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLworCV9fUkVRX0ZVQSwJCS8qIGZvcmNlZCB1bml0IGFjY2VzcyAqLworCV9fUkVRX05PTUVSR0UsCQkvKiBkb24ndCB0b3VjaCB0aGlzIGZvciBtZXJnaW5nICovCisJX19SRVFfU1RBUlRFRCwJCS8qIGRyaXZlIGFscmVhZHkgbWF5IGhhdmUgc3RhcnRlZCB0aGlzIG9uZSAqLworCV9fUkVRX0RPTlRQUkVQLAkJLyogZG9uJ3QgY2FsbCBwcmVwIGZvciB0aGlzIG9uZSAqLworCV9fUkVRX1FVRVVFRCwJCS8qIHVzZXMgcXVldWVpbmcgKi8KKwlfX1JFUV9FTFZQUklWLAkJLyogZWxldmF0b3IgcHJpdmF0ZSBkYXRhIGF0dGFjaGVkICovCisJX19SRVFfRkFJTEVELAkJLyogc2V0IGlmIHRoZSByZXF1ZXN0IGZhaWxlZCAqLworCV9fUkVRX1FVSUVULAkJLyogZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzICovCisJX19SRVFfUFJFRU1QVCwJCS8qIHNldCBmb3IgImlkZV9wcmVlbXB0IiByZXF1ZXN0cyAqLworCV9fUkVRX09SREVSRURfQ09MT1IsCS8qIGlzIGJlZm9yZSBvciBhZnRlciBiYXJyaWVyICovCisJX19SRVFfQUxMT0NFRCwJCS8qIHJlcXVlc3QgY2FtZSBmcm9tIG91ciBhbGxvYyBwb29sICovCisJX19SRVFfQ09QWV9VU0VSLAkvKiBjb250YWlucyBjb3BpZXMgb2YgdXNlciBwYWdlcyAqLworCV9fUkVRX0lOVEVHUklUWSwJLyogaW50ZWdyaXR5IG1ldGFkYXRhIGhhcyBiZWVuIHJlbWFwcGVkICovCisJX19SRVFfRkxVU0gsCQkvKiByZXF1ZXN0IGZvciBjYWNoZSBmbHVzaCAqLworCV9fUkVRX0lPX1NUQVQsCQkvKiBhY2NvdW50IEkvTyBzdGF0ICovCisJX19SRVFfTUlYRURfTUVSR0UsCS8qIG1lcmdlIG9mIGRpZmZlcmVudCB0eXBlcywgZmFpbCBzZXBhcmF0ZWx5ICovCisJX19SRVFfU0VDVVJFLAkJLyogc2VjdXJlIGRpc2NhcmQgKHVzZWQgd2l0aCBfX1JFUV9ESVNDQVJEKSAqLworCV9fUkVRX05SX0JJVFMsCQkvKiBzdG9wcyBoZXJlICovCit9OworCisjZGVmaW5lIFJFUV9XUklURQkJKDEgPDwgX19SRVFfV1JJVEUpCisjZGVmaW5lIFJFUV9GQUlMRkFTVF9ERVYJKDEgPDwgX19SRVFfRkFJTEZBU1RfREVWKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCkKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX0RSSVZFUgkoMSA8PCBfX1JFUV9GQUlMRkFTVF9EUklWRVIpCisjZGVmaW5lIFJFUV9IQVJEQkFSUklFUgkJKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCisjZGVmaW5lIFJFUV9TWU5DCQkoMSA8PCBfX1JFUV9TWU5DKQorI2RlZmluZSBSRVFfTUVUQQkJKDEgPDwgX19SRVFfTUVUQSkKKyNkZWZpbmUgUkVRX0RJU0NBUkQJCSgxIDw8IF9fUkVRX0RJU0NBUkQpCisjZGVmaW5lIFJFUV9OT0lETEUJCSgxIDw8IF9fUkVRX05PSURMRSkKKworI2RlZmluZSBSRVFfRkFJTEZBU1RfTUFTSyBcCisJKFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwgUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgUkVRX0NPTU1PTl9NQVNLIFwKKwkoUkVRX1dSSVRFIHwgUkVRX0ZBSUxGQVNUX01BU0sgfCBSRVFfSEFSREJBUlJJRVIgfCBSRVFfU1lOQyB8IFwKKwkgUkVRX01FVEF8IFJFUV9ESVNDQVJEIHwgUkVRX05PSURMRSkKKworI2RlZmluZSBSRVFfVU5QTFVHCQkoMSA8PCBfX1JFUV9VTlBMVUcpCisjZGVmaW5lIFJFUV9SQUhFQUQJCSgxIDw8IF9fUkVRX1JBSEVBRCkKKworI2RlZmluZSBSRVFfU09SVEVECQkoMSA8PCBfX1JFUV9TT1JURUQpCisjZGVmaW5lIFJFUV9TT0ZUQkFSUklFUgkJKDEgPDwgX19SRVFfU09GVEJBUlJJRVIpCisjZGVmaW5lIFJFUV9GVUEJCQkoMSA8PCBfX1JFUV9GVUEpCisjZGVmaW5lIFJFUV9OT01FUkdFCQkoMSA8PCBfX1JFUV9OT01FUkdFKQorI2RlZmluZSBSRVFfU1RBUlRFRAkJKDEgPDwgX19SRVFfU1RBUlRFRCkKKyNkZWZpbmUgUkVRX0RPTlRQUkVQCQkoMSA8PCBfX1JFUV9ET05UUFJFUCkKKyNkZWZpbmUgUkVRX1FVRVVFRAkJKDEgPDwgX19SRVFfUVVFVUVEKQorI2RlZmluZSBSRVFfRUxWUFJJVgkJKDEgPDwgX19SRVFfRUxWUFJJVikKKyNkZWZpbmUgUkVRX0ZBSUxFRAkJKDEgPDwgX19SRVFfRkFJTEVEKQorI2RlZmluZSBSRVFfUVVJRVQJCSgxIDw8IF9fUkVRX1FVSUVUKQorI2RlZmluZSBSRVFfUFJFRU1QVAkJKDEgPDwgX19SRVFfUFJFRU1QVCkKKyNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IJKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKKyNkZWZpbmUgUkVRX0FMTE9DRUQJCSgxIDw8IF9fUkVRX0FMTE9DRUQpCisjZGVmaW5lIFJFUV9DT1BZX1VTRVIJCSgxIDw8IF9fUkVRX0NPUFlfVVNFUikKKyNkZWZpbmUgUkVRX0lOVEVHUklUWQkJKDEgPDwgX19SRVFfSU5URUdSSVRZKQorI2RlZmluZSBSRVFfRkxVU0gJCSgxIDw8IF9fUkVRX0ZMVVNIKQorI2RlZmluZSBSRVFfSU9fU1RBVAkJKDEgPDwgX19SRVFfSU9fU1RBVCkKKyNkZWZpbmUgUkVRX01JWEVEX01FUkdFCQkoMSA8PCBfX1JFUV9NSVhFRF9NRVJHRSkKKyNkZWZpbmUgUkVRX1NFQ1VSRQkJKDEgPDwgX19SRVFfU0VDVVJFKQorCisjZW5kaWYgLyogX19MSU5VWF9CTEtfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggMDlhODQwMi4uMmM1NDkwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC02MCw3ICs2MCw2IEBACiAJUkVRX1RZUEVfUE1fUkVTVU1FLAkJLyogcmVzdW1lIHJlcXVlc3QgKi8KIAlSRVFfVFlQRV9QTV9TSFVURE9XTiwJCS8qIHNodXRkb3duIHJlcXVlc3QgKi8KIAlSRVFfVFlQRV9TUEVDSUFMLAkJLyogZHJpdmVyIGRlZmluZWQgdHlwZSAqLwotCVJFUV9UWVBFX0xJTlVYX0JMT0NLLAkJLyogZ2VuZXJpYyBibG9jayBsYXllciBtZXNzYWdlICovCiAJLyoKIAkgKiBmb3IgQVRBL0FUQVBJIGRldmljZXMuIHRoaXMgcmVhbGx5IGRvZXNuJ3QgYmVsb25nIGhlcmUsIGlkZSBzaG91bGQKIAkgKiB1c2UgUkVRX1RZUEVfU1BFQ0lBTCBhbmQgdXNlIHJxLT5jbWRbMF0gd2l0aCB0aGUgcmFuZ2Ugb2YgZHJpdmVyCkBAIC03MCw4NCArNjksNiBAQAogCVJFUV9UWVBFX0FUQV9QQywKIH07CiAKLS8qCi0gKiBGb3IgcmVxdWVzdCBvZiB0eXBlIFJFUV9UWVBFX0xJTlVYX0JMT0NLLCBycS0+Y21kWzBdIGlzIHRoZSBvcGNvZGUgYmVpbmcKLSAqIHNlbnQgZG93biAoc2ltaWxhciB0byBob3cgUkVRX1RZUEVfQkxPQ0tfUEMgbWVhbnMgdGhhdCAtPmNtZFtdIGhvbGRzIGEKLSAqIFNDU0kgY2RiLgotICoKLSAqIDB4MDAgLT4gMHgzZiBhcmUgZHJpdmVyIHByaXZhdGUsIHRvIGJlIHVzZWQgZm9yIHdoYXRldmVyIHB1cnBvc2UgdGhleSBuZWVkLAotICogdHlwaWNhbGx5IHRvIGRpZmZlcmVudGlhdGUgUkVRX1RZUEVfU1BFQ0lBTCByZXF1ZXN0cy4KLSAqCi0gKi8KLWVudW0gewotCVJFUV9MQl9PUF9FSkVDVAk9IDB4NDAsCQkvKiBlamVjdCByZXF1ZXN0ICovCi0JUkVRX0xCX09QX0ZMVVNIID0gMHg0MSwJCS8qIGZsdXNoIHJlcXVlc3QgKi8KLX07Ci0KLS8qCi0gKiByZXF1ZXN0IHR5cGUgbW9kaWZpZWQgYml0cy4gZmlyc3QgZm91ciBiaXRzIG1hdGNoIEJJT19SVyogYml0cywgaW1wb3J0YW50Ci0gKi8KLWVudW0gcnFfZmxhZ19iaXRzIHsKLQlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KLQlfX1JFUV9GQUlMRkFTVF9ERVYsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRldmljZSBlcnJvcnMgKi8KLQlfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQsIC8qIG5vIGRyaXZlciByZXRyaWVzIG9mIHRyYW5zcG9ydCBlcnJvcnMgKi8KLQlfX1JFUV9GQUlMRkFTVF9EUklWRVIsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRyaXZlciBlcnJvcnMgKi8KLQkvKiBhYm92ZSBmbGFncyBtdXN0IG1hdGNoIEJJT19SV18qICovCi0JX19SRVFfRElTQ0FSRCwJCS8qIHJlcXVlc3QgdG8gZGlzY2FyZCBzZWN0b3JzICovCi0JX19SRVFfU09SVEVELAkJLyogZWxldmF0b3Iga25vd3MgYWJvdXQgdGhpcyByZXF1ZXN0ICovCi0JX19SRVFfU09GVEJBUlJJRVIsCS8qIG1heSBub3QgYmUgcGFzc2VkIGJ5IGlvc2NoZWR1bGVyICovCi0JX19SRVFfSEFSREJBUlJJRVIsCS8qIG1heSBub3QgYmUgcGFzc2VkIGJ5IGRyaXZlIGVpdGhlciAqLwotCV9fUkVRX0ZVQSwJCS8qIGZvcmNlZCB1bml0IGFjY2VzcyAqLwotCV9fUkVRX05PTUVSR0UsCQkvKiBkb24ndCB0b3VjaCB0aGlzIGZvciBtZXJnaW5nICovCi0JX19SRVFfU1RBUlRFRCwJCS8qIGRyaXZlIGFscmVhZHkgbWF5IGhhdmUgc3RhcnRlZCB0aGlzIG9uZSAqLwotCV9fUkVRX0RPTlRQUkVQLAkJLyogZG9uJ3QgY2FsbCBwcmVwIGZvciB0aGlzIG9uZSAqLwotCV9fUkVRX1FVRVVFRCwJCS8qIHVzZXMgcXVldWVpbmcgKi8KLQlfX1JFUV9FTFZQUklWLAkJLyogZWxldmF0b3IgcHJpdmF0ZSBkYXRhIGF0dGFjaGVkICovCi0JX19SRVFfRkFJTEVELAkJLyogc2V0IGlmIHRoZSByZXF1ZXN0IGZhaWxlZCAqLwotCV9fUkVRX1FVSUVULAkJLyogZG9uJ3Qgd29ycnkgYWJvdXQgZXJyb3JzICovCi0JX19SRVFfUFJFRU1QVCwJCS8qIHNldCBmb3IgImlkZV9wcmVlbXB0IiByZXF1ZXN0cyAqLwotCV9fUkVRX09SREVSRURfQ09MT1IsCS8qIGlzIGJlZm9yZSBvciBhZnRlciBiYXJyaWVyICovCi0JX19SRVFfUldfU1lOQywJCS8qIHJlcXVlc3QgaXMgc3luYyAoc3luYyB3cml0ZSBvciByZWFkKSAqLwotCV9fUkVRX0FMTE9DRUQsCQkvKiByZXF1ZXN0IGNhbWUgZnJvbSBvdXIgYWxsb2MgcG9vbCAqLwotCV9fUkVRX1JXX01FVEEsCQkvKiBtZXRhZGF0YSBpbyByZXF1ZXN0ICovCi0JX19SRVFfQ09QWV9VU0VSLAkvKiBjb250YWlucyBjb3BpZXMgb2YgdXNlciBwYWdlcyAqLwotCV9fUkVRX0lOVEVHUklUWSwJLyogaW50ZWdyaXR5IG1ldGFkYXRhIGhhcyBiZWVuIHJlbWFwcGVkICovCi0JX19SRVFfTk9JRExFLAkJLyogRG9uJ3QgYW50aWNpcGF0ZSBtb3JlIElPIGFmdGVyIHRoaXMgb25lICovCi0JX19SRVFfSU9fU1RBVCwJCS8qIGFjY291bnQgSS9PIHN0YXQgKi8KLQlfX1JFUV9NSVhFRF9NRVJHRSwJLyogbWVyZ2Ugb2YgZGlmZmVyZW50IHR5cGVzLCBmYWlsIHNlcGFyYXRlbHkgKi8KLQlfX1JFUV9OUl9CSVRTLAkJLyogc3RvcHMgaGVyZSAqLwotfTsKLQotI2RlZmluZSBSRVFfUlcJCSgxIDw8IF9fUkVRX1JXKQotI2RlZmluZSBSRVFfRkFJTEZBU1RfREVWCSgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RFVikKLSNkZWZpbmUgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVAkoMSA8PCBfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCi0jZGVmaW5lIFJFUV9GQUlMRkFTVF9EUklWRVIJKDEgPDwgX19SRVFfRkFJTEZBU1RfRFJJVkVSKQotI2RlZmluZSBSRVFfRElTQ0FSRAkoMSA8PCBfX1JFUV9ESVNDQVJEKQotI2RlZmluZSBSRVFfU09SVEVECSgxIDw8IF9fUkVRX1NPUlRFRCkKLSNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSCSgxIDw8IF9fUkVRX1NPRlRCQVJSSUVSKQotI2RlZmluZSBSRVFfSEFSREJBUlJJRVIJKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCi0jZGVmaW5lIFJFUV9GVUEJCSgxIDw8IF9fUkVRX0ZVQSkKLSNkZWZpbmUgUkVRX05PTUVSR0UJKDEgPDwgX19SRVFfTk9NRVJHRSkKLSNkZWZpbmUgUkVRX1NUQVJURUQJKDEgPDwgX19SRVFfU1RBUlRFRCkKLSNkZWZpbmUgUkVRX0RPTlRQUkVQCSgxIDw8IF9fUkVRX0RPTlRQUkVQKQotI2RlZmluZSBSRVFfUVVFVUVECSgxIDw8IF9fUkVRX1FVRVVFRCkKLSNkZWZpbmUgUkVRX0VMVlBSSVYJKDEgPDwgX19SRVFfRUxWUFJJVikKLSNkZWZpbmUgUkVRX0ZBSUxFRAkoMSA8PCBfX1JFUV9GQUlMRUQpCi0jZGVmaW5lIFJFUV9RVUlFVAkoMSA8PCBfX1JFUV9RVUlFVCkKLSNkZWZpbmUgUkVRX1BSRUVNUFQJKDEgPDwgX19SRVFfUFJFRU1QVCkKLSNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IJKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKLSNkZWZpbmUgUkVRX1JXX1NZTkMJKDEgPDwgX19SRVFfUldfU1lOQykKLSNkZWZpbmUgUkVRX0FMTE9DRUQJKDEgPDwgX19SRVFfQUxMT0NFRCkKLSNkZWZpbmUgUkVRX1JXX01FVEEJKDEgPDwgX19SRVFfUldfTUVUQSkKLSNkZWZpbmUgUkVRX0NPUFlfVVNFUgkoMSA8PCBfX1JFUV9DT1BZX1VTRVIpCi0jZGVmaW5lIFJFUV9JTlRFR1JJVFkJKDEgPDwgX19SRVFfSU5URUdSSVRZKQotI2RlZmluZSBSRVFfTk9JRExFCSgxIDw8IF9fUkVRX05PSURMRSkKLSNkZWZpbmUgUkVRX0lPX1NUQVQJKDEgPDwgX19SRVFfSU9fU1RBVCkKLSNkZWZpbmUgUkVRX01JWEVEX01FUkdFCSgxIDw8IF9fUkVRX01JWEVEX01FUkdFKQotCi0jZGVmaW5lIFJFUV9GQUlMRkFTVF9NQVNLCShSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8IFwKLQkJCQkgUkVRX0ZBSUxGQVNUX0RSSVZFUikKLQogI2RlZmluZSBCTEtfTUFYX0NEQgkxNgogCiAvKgpAQCAtMjY0LDYgKzE4NSw3IEBACiB0eXBlZGVmIHZvaWQgKHJlcXVlc3RfZm5fcHJvYykgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHR5cGVkZWYgaW50IChtYWtlX3JlcXVlc3RfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKIHR5cGVkZWYgaW50IChwcmVwX3JxX2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKHVucHJlcF9ycV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkICh1bnBsdWdfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKIAogc3RydWN0IGJpb192ZWM7CkBAIC0yNzUsNyArMTk3LDYgQEAKIH07CiB0eXBlZGVmIGludCAobWVyZ2VfYnZlY19mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCBidmVjX21lcmdlX2RhdGEgKiwKIAkJCSAgICAgc3RydWN0IGJpb192ZWMgKik7Ci10eXBlZGVmIHZvaWQgKHByZXBhcmVfZmx1c2hfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoc29mdGlycV9kb25lX2ZuKShzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgaW50IChkbWFfZHJhaW5fbmVlZGVkX2ZuKShzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgaW50IChsbGRfYnVzeV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKQEAgLTM0Niw5ICsyNjcsOSBAQAogCXJlcXVlc3RfZm5fcHJvYwkJKnJlcXVlc3RfZm47CiAJbWFrZV9yZXF1ZXN0X2ZuCQkqbWFrZV9yZXF1ZXN0X2ZuOwogCXByZXBfcnFfZm4JCSpwcmVwX3JxX2ZuOworCXVucHJlcF9ycV9mbgkJKnVucHJlcF9ycV9mbjsKIAl1bnBsdWdfZm4JCSp1bnBsdWdfZm47CiAJbWVyZ2VfYnZlY19mbgkJKm1lcmdlX2J2ZWNfZm47Ci0JcHJlcGFyZV9mbHVzaF9mbgkqcHJlcGFyZV9mbHVzaF9mbjsKIAlzb2Z0aXJxX2RvbmVfZm4JCSpzb2Z0aXJxX2RvbmVfZm47CiAJcnFfdGltZWRfb3V0X2ZuCQkqcnFfdGltZWRfb3V0X2ZuOwogCWRtYV9kcmFpbl9uZWVkZWRfZm4JKmRtYV9kcmFpbl9uZWVkZWQ7CkBAIC00NjcsMTEgKzM4OCwxNCBAQAogI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDE1CS8qIGRvIElPIHN0YXRzICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTYJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwogI2RlZmluZSBRVUVVRV9GTEFHX05PWE1FUkdFUyAgIDE3CS8qIE5vIGV4dGVuZGVkIG1lcmdlcyAqLworI2RlZmluZSBRVUVVRV9GTEFHX0FERF9SQU5ET00gIDE4CS8qIENvbnRyaWJ1dGVzIHRvIHJhbmRvbSBwb29sICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCAgMTkJLyogc3VwcG9ydHMgU0VDRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUikgfAkJXAogCQkJCSAoMSA8PCBRVUVVRV9GTEFHX1NUQUNLQUJMRSkJfAlcCi0JCQkJICgxIDw8IFFVRVVFX0ZMQUdfU0FNRV9DT01QKSkKKwkJCQkgKDEgPDwgUVVFVUVfRkxBR19TQU1FX0NPTVApCXwJXAorCQkJCSAoMSA8PCBRVUVVRV9GTEFHX0FERF9SQU5ET00pKQogCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9pc19sb2NrZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC01OTYsMzggKzUyMCwyOCBAQAogCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9YTUVSR0VTLCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX25vbnJvdChxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX05PTlJPVCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9pb19zdGF0KHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfSU9fU1RBVCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9hZGRfcmFuZG9tKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfQUREX1JBTkRPTSwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQkoKHEpLT5vcmRzZXEpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdGFja2FibGUocSkJXAogCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RBQ0tBQkxFLCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2Rpc2NhcmQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19ESVNDQVJELCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX3NlY2Rpc2NhcmQocSkJKGJsa19xdWV1ZV9kaXNjYXJkKHEpICYmIFwKKwl0ZXN0X2JpdChRVUVVRV9GTEFHX1NFQ0RJU0NBUkQsICYocSktPnF1ZXVlX2ZsYWdzKSkKIAotI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQotI2RlZmluZSBibGtfcGNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQotI2RlZmluZSBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfU1BFQ0lBTCkKLSNkZWZpbmUgYmxrX3NlbnNlX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TRU5TRSkKKyNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkgXAorCSgocnEpLT5jbWRfZmxhZ3MgJiAoUkVRX0ZBSUxGQVNUX0RFVnxSRVFfRkFJTEZBU1RfVFJBTlNQT1JUfCBcCisJCQkgICAgIFJFUV9GQUlMRkFTVF9EUklWRVIpKQogCi0jZGVmaW5lIGJsa19mYWlsZmFzdF9kZXYocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfREVWKQotI2RlZmluZSBibGtfZmFpbGZhc3RfdHJhbnNwb3J0KHJxKSAoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCkKLSNkZWZpbmUgYmxrX2ZhaWxmYXN0X2RyaXZlcihycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9EUklWRVIpCi0jZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpCShibGtfZmFpbGZhc3RfZGV2KHJxKSB8fAlcCi0JCQkJIGJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpIHx8CVwKLQkJCQkgYmxrX2ZhaWxmYXN0X2RyaXZlcihycSkpCi0jZGVmaW5lIGJsa19ycV9zdGFydGVkKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpCi0jZGVmaW5lIGJsa19ycV9pb19zdGF0KHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0lPX1NUQVQpCi0jZGVmaW5lIGJsa19ycV9xdWlldChycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkKKyNkZWZpbmUgYmxrX2FjY291bnRfcnEocnEpIFwKKwkoKChycSktPmNtZF9mbGFncyAmIFJFUV9TVEFSVEVEKSAmJiBcCisJICgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyB8fCBcCisJICAoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpKSkKIAotI2RlZmluZSBibGtfYWNjb3VudF9ycShycSkJKGJsa19ycV9zdGFydGVkKHJxKSAmJiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IGJsa19kaXNjYXJkX3JxKHJxKSkpIAotCi0jZGVmaW5lIGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9TVVNQRU5EKQotI2RlZmluZSBibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9SRVNVTUUpCiAjZGVmaW5lIGJsa19wbV9yZXF1ZXN0KHJxKQlcCi0JKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpIHx8IGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkpCisJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1BNX1NVU1BFTkQgfHwgXAorCSAocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9SRVNVTUUpCiAKICNkZWZpbmUgYmxrX3JxX2NwdV92YWxpZChycSkJKChycSktPmNwdSAhPSAtMSkKLSNkZWZpbmUgYmxrX3NvcnRlZF9ycShycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9TT1JURUQpCi0jZGVmaW5lIGJsa19iYXJyaWVyX3JxKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKQotI2RlZmluZSBibGtfZnVhX3JxKHJxKQkJKChycSktPmNtZF9mbGFncyAmIFJFUV9GVUEpCi0jZGVmaW5lIGJsa19kaXNjYXJkX3JxKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCiAjZGVmaW5lIGJsa19iaWRpX3JxKHJxKQkJKChycSktPm5leHRfcnEgIT0gTlVMTCkKIC8qIHJxLT5xdWV1ZWxpc3Qgb2YgZGVxdWV1ZWQgcmVxdWVzdCBtdXN0IGJlIGxpc3RfZW1wdHkoKSAqLwogI2RlZmluZSBibGtfcXVldWVkX3JxKHJxKQkoIWxpc3RfZW1wdHkoJihycSktPnF1ZXVlbGlzdCkpCkBAIC02NDEsNyArNTU1LDcgQEAKICAqLwogc3RhdGljIGlubGluZSBib29sIHJ3X2lzX3N5bmModW5zaWduZWQgaW50IHJ3X2ZsYWdzKQogewotCXJldHVybiAhKHJ3X2ZsYWdzICYgUkVRX1JXKSB8fCAocndfZmxhZ3MgJiBSRVFfUldfU1lOQyk7CisJcmV0dXJuICEocndfZmxhZ3MgJiBSRVFfV1JJVEUpIHx8IChyd19mbGFncyAmIFJFUV9TWU5DKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIHJxX2lzX3N5bmMoc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtNjQ5LDkgKzU2Myw2IEBACiAJcmV0dXJuIHJ3X2lzX3N5bmMocnEtPmNtZF9mbGFncyk7CiB9CiAKLSNkZWZpbmUgcnFfaXNfbWV0YShycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUldfTUVUQSkKLSNkZWZpbmUgcnFfbm9pZGxlKHJxKQkJKChycSktPmNtZF9mbGFncyAmIFJFUV9OT0lETEUpCi0KIHN0YXRpYyBpbmxpbmUgaW50IGJsa19xdWV1ZV9mdWxsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3luYykKIHsKIAlpZiAoc3luYykKQEAgLTY4NCw3ICs1OTUsOCBAQAogCShSRVFfTk9NRVJHRSB8IFJFUV9TVEFSVEVEIHwgUkVRX0hBUkRCQVJSSUVSIHwgUkVRX1NPRlRCQVJSSUVSKQogI2RlZmluZSBycV9tZXJnZWFibGUocnEpCVwKIAkoISgocnEpLT5jbWRfZmxhZ3MgJiBSUV9OT01FUkdFX0ZMQUdTKSAmJiBcCi0JIChibGtfZGlzY2FyZF9ycShycSkgfHwgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpKQorCSAoKChycSktPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKSB8fCBcCisJICAocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykpCiAKIC8qCiAgKiBxLT5wcmVwX3JxX2ZuIHJldHVybiB2YWx1ZXMKQEAgLTcwOSw3ICs2MjEsNyBAQAogI2RlZmluZSBCTEtfQk9VTkNFX0hJR0gJCS0xVUxMCiAjZW5kaWYKICNkZWZpbmUgQkxLX0JPVU5DRV9BTlkJCSgtMVVMTCkKLSNkZWZpbmUgQkxLX0JPVU5DRV9JU0EJCShJU0FfRE1BX1RIUkVTSE9MRCkKKyNkZWZpbmUgQkxLX0JPVU5DRV9JU0EJCShETUFfQklUX01BU0soMjQpKQogCiAvKgogICogZGVmYXVsdCB0aW1lb3V0IGZvciBTR19JTyBpZiBub25lIHNwZWNpZmllZApAQCAtNzgxLDYgKzY5Myw4IEBACiAJCQkJCWdmcF90KTsKIGV4dGVybiB2b2lkIGJsa19pbnNlcnRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIHZvaWQgKik7CiBleHRlcm4gdm9pZCBibGtfcmVxdWV1ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHZvaWQgYmxrX2FkZF9yZXF1ZXN0X3BheWxvYWQoc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdW5zaWduZWQgaW50IGxlbik7CiBleHRlcm4gaW50IGJsa19ycV9jaGVja19saW1pdHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7CiBleHRlcm4gaW50IGJsa19sbGRfYnVzeShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiBleHRlcm4gaW50IGJsa19ycV9wcmVwX2Nsb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHJlcXVlc3QgKnJxX3NyYywKQEAgLTkxNSw2ICs4MjksNyBAQAogZXh0ZXJuIHZvaWQgX19ibGtfY29tcGxldGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqKTsKIGV4dGVybiB2b2lkIGJsa19hYm9ydF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHZvaWQgYmxrX2Fib3J0X3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOworZXh0ZXJuIHZvaWQgYmxrX3VucHJlcF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICopOwogCiAvKgogICogQWNjZXNzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIHF1ZXVlIHByb3BlcnRpZXMKQEAgLTk1OSw2ICs4NzQsNyBAQAogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2xsZF9idXN5KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBsbGRfYnVzeV9mbiAqZm4pOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfcHJlcF9ycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBwcmVwX3JxX2ZuICpwZm4pOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3VucHJlcF9ycShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnByZXBfcnFfZm4gKnVmbik7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWVyZ2VfYnZlYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBtZXJnZV9idmVjX2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBpbnQpOwpAQCAtOTY2LDcgKzg4Miw3IEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfcnFfdGltZWRfb3V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHJxX3RpbWVkX291dF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ycV90aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKLWV4dGVybiBpbnQgYmxrX3F1ZXVlX29yZGVyZWQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQsIHByZXBhcmVfZmx1c2hfZm4gKik7CitleHRlcm4gaW50IGJsa19xdWV1ZV9vcmRlcmVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkKTsKIGV4dGVybiBib29sIGJsa19kb19vcmRlcmVkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICoqKTsKIGV4dGVybiB1bnNpZ25lZCBibGtfb3JkZXJlZF9jdXJfc2VxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIHVuc2lnbmVkIGJsa19vcmRlcmVkX3JlcV9zZXEoc3RydWN0IHJlcXVlc3QgKik7CkBAIC0xMDA1LDEwICs5MjEsMTIgQEAKIH0KIGVudW17CiAJQkxLREVWX1dBSVQsCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KLQlCTEtERVZfQkFSUklFUiwJLyppc3N1ZSByZXF1ZXN0IHdpdGggYmFycmllciAqLworCUJMS0RFVl9CQVJSSUVSLAkvKiBpc3N1ZSByZXF1ZXN0IHdpdGggYmFycmllciAqLworCUJMS0RFVl9TRUNVUkUsCS8qIHNlY3VyZSBkaXNjYXJkICovCiB9OwogI2RlZmluZSBCTEtERVZfSUZMX1dBSVQJCSgxIDw8IEJMS0RFVl9XQUlUKQogI2RlZmluZSBCTEtERVZfSUZMX0JBUlJJRVIJKDEgPDwgQkxLREVWX0JBUlJJRVIpCisjZGVmaW5lIEJMS0RFVl9JRkxfU0VDVVJFCSgxIDw8IEJMS0RFVl9TRUNVUkUpCiBleHRlcm4gaW50IGJsa2Rldl9pc3N1ZV9mbHVzaChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGdmcF90LCBzZWN0b3JfdCAqLAogCQkJdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKQEAgLTEwMjAsNyArOTM4LDcgQEAKIHsKIAlibG9jayA8PD0gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7CiAJbnJfYmxvY2tzIDw8PSAoc2ItPnNfYmxvY2tzaXplX2JpdHMgLSA5KTsKLQlyZXR1cm4gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc2ItPnNfYmRldiwgYmxvY2ssIG5yX2Jsb2NrcywgR0ZQX0tFUk5FTCwKKwlyZXR1cm4gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc2ItPnNfYmRldiwgYmxvY2ssIG5yX2Jsb2NrcywgR0ZQX05PRlMsCiAJCQkJICAgQkxLREVWX0lGTF9XQUlUIHwgQkxLREVWX0lGTF9CQVJSSUVSKTsKIH0KIApAQCAtMTMzMyw3ICsxMjUxLDYgQEAKIHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyB7CiAJaW50ICgqb3BlbikgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCk7CiAJaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBnZW5kaXNrICosIGZtb2RlX3QpOwotCWludCAoKmxvY2tlZF9pb2N0bCkgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogCWludCAoKmlvY3RsKSAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiAJaW50ICgqY29tcGF0X2lvY3RsKSAoc3RydWN0IGJsb2NrX2RldmljZSAqLCBmbW9kZV90LCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiAJaW50ICgqZGlyZWN0X2FjY2VzcykgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgc2VjdG9yX3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCA0MTZiZjYyLi4zMzk1Y2Y3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTUsNiArNSw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjZW5kaWYKIAogLyoKQEAgLTIyMCwxMSArMjIxLDI2IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSAqLwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCitzdHJ1Y3QgY29tcGF0X2Jsa191c2VyX3RyYWNlX3NldHVwIHsKKwljaGFyIG5hbWVbMzJdOworCXUxNiBhY3RfbWFzazsKKwl1MzIgYnVmX3NpemU7CisJdTMyIGJ1Zl9ucjsKKwljb21wYXRfdTY0IHN0YXJ0X2xiYTsKKwljb21wYXRfdTY0IGVuZF9sYmE7CisJdTMyIHBpZDsKK307CisjZGVmaW5lIEJMS1RSQUNFU0VUVVAzMiBfSU9XUigweDEyLCAxMTUsIHN0cnVjdCBjb21wYXRfYmxrX3VzZXJfdHJhY2Vfc2V0dXApCisKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfRVZFTlRfVFJBQ0lORykgJiYgZGVmaW5lZChDT05GSUdfQkxPQ0spCiAKIHN0YXRpYyBpbmxpbmUgaW50IGJsa19jbWRfYnVmX2xlbihzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JcmV0dXJuIGJsa19wY19yZXF1ZXN0KHJxKSA/IHJxLT5jbWRfbGVuICogMyA6IDE7CisJcmV0dXJuIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpID8gcnEtPmNtZF9sZW4gKiAzIDogMTsKIH0KIAogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfY21kKGNoYXIgKmJ1Ziwgc3RydWN0IHJlcXVlc3QgKnJxKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCAxYjliYTE5Li40M2U2NDlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0yMDMsMTIgKzIwMywxMCBAQAogaW50IGJsb2NrX3JlYWRfZnVsbF9wYWdlKHN0cnVjdCBwYWdlKiwgZ2V0X2Jsb2NrX3QqKTsKIGludCBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkJCXVuc2lnbmVkIGxvbmcgZnJvbSk7Ci1pbnQgYmxvY2tfd3JpdGVfYmVnaW5fbmV3dHJ1bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKLQkJCQlsb2ZmX3QsIHVuc2lnbmVkLCB1bnNpZ25lZCwKLQkJCQlzdHJ1Y3QgcGFnZSAqKiwgdm9pZCAqKiwgZ2V0X2Jsb2NrX3QqKTsKLWludCBibG9ja193cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAotCQkJCWxvZmZfdCwgdW5zaWduZWQsIHVuc2lnbmVkLAotCQkJCXN0cnVjdCBwYWdlICoqLCB2b2lkICoqLCBnZXRfYmxvY2tfdCopOworaW50IGJsb2NrX3dyaXRlX2JlZ2luKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCisJCXVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrKTsKK2ludCBfX2Jsb2NrX3dyaXRlX2JlZ2luKHN0cnVjdCBwYWdlICpwYWdlLCBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sCisJCWdldF9ibG9ja190ICpnZXRfYmxvY2spOwogaW50IGJsb2NrX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAogCQkJCWxvZmZfdCwgdW5zaWduZWQsIHVuc2lnbmVkLAogCQkJCXN0cnVjdCBwYWdlICosIHZvaWQgKik7CkBAIC0yMTcsOSArMjE1LDYgQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqLCB2b2lkICopOwogdm9pZCBwYWdlX3plcm9fbmV3X2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIGludCBibG9ja19wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBnZXRfYmxvY2tfdCopOwotaW50IGNvbnRfd3JpdGVfYmVnaW5fbmV3dHJ1bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90LAotCQkJdW5zaWduZWQsIHVuc2lnbmVkLCBzdHJ1Y3QgcGFnZSAqKiwgdm9pZCAqKiwKLQkJCWdldF9ibG9ja190ICosIGxvZmZfdCAqKTsKIGludCBjb250X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCwKIAkJCXVuc2lnbmVkLCB1bnNpZ25lZCwgc3RydWN0IHBhZ2UgKiosIHZvaWQgKiosCiAJCQlnZXRfYmxvY2tfdCAqLCBsb2ZmX3QgKik7CkBAIC0yMzAsMTIgKzIyNSw3IEBACiB2b2lkIGJsb2NrX3N5bmNfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKIHNlY3Rvcl90IGdlbmVyaWNfYmxvY2tfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzZWN0b3JfdCwgZ2V0X2Jsb2NrX3QgKik7CiBpbnQgYmxvY2tfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QsIGdldF9ibG9ja190ICopOwotaW50IGZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKiwgaW50KTsKLWludCBub2JoX3dyaXRlX2JlZ2luX25ld3RydW5jKHN0cnVjdCBmaWxlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosCi0JCQkJbG9mZl90LCB1bnNpZ25lZCwgdW5zaWduZWQsCi0JCQkJc3RydWN0IHBhZ2UgKiosIHZvaWQgKiosIGdldF9ibG9ja190Kik7Ci1pbnQgbm9iaF93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAotCQkJCWxvZmZfdCwgdW5zaWduZWQsIHVuc2lnbmVkLAoraW50IG5vYmhfd3JpdGVfYmVnaW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90LCB1bnNpZ25lZCwgdW5zaWduZWQsCiAJCQkJc3RydWN0IHBhZ2UgKiosIHZvaWQgKiosIGdldF9ibG9ja190Kik7CiBpbnQgbm9iaF93cml0ZV9lbmQoc3RydWN0IGZpbGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKIAkJCQlsb2ZmX3QsIHVuc2lnbmVkLCB1bnNpZ25lZCwKQEAgLTMxNCwxNSArMzA0LDEwIEBACiAJYmgtPmJfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIH0KIAotLyoKLSAqIENhbGxpbmcgd2FpdF9vbl9idWZmZXIoKSBmb3IgYSB6ZXJvLXJlZiBidWZmZXIgaXMgaWxsZWdhbCwgc28gd2UgY2FsbCBpbnRvCi0gKiBfX3dhaXRfb25fYnVmZmVyKCkganVzdCB0byB0cmlwIGEgZGVidWcgY2hlY2suICBCZWNhdXNlIGRlYnVnIGNvZGUgaW4gaW5saW5lCi0gKiBmdW5jdGlvbnMgaXMgYmxvYXR5LgotICovCiBzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9vbl9idWZmZXIoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAltaWdodF9zbGVlcCgpOwotCWlmIChidWZmZXJfbG9ja2VkKGJoKSB8fCBhdG9taWNfcmVhZCgmYmgtPmJfY291bnQpID09IDApCisJaWYgKGJ1ZmZlcl9sb2NrZWQoYmgpKQogCQlfX3dhaXRfb25fYnVmZmVyKGJoKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IDVlYTNjNjAuLmMzN2IyMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTI5Miw2ICsyOTIsOCBAQAogICovCiBleHRlcm4gaW50CiBfX2Nsb2Nrc291cmNlX3JlZ2lzdGVyX3NjYWxlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBzY2FsZSwgdTMyIGZyZXEpOworZXh0ZXJuIHZvaWQKK19fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgc2NhbGUsIHUzMiBmcmVxKTsKIAogc3RhdGljIGlubGluZSBpbnQgY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTMyIGh6KQogewpAQCAtMzAzLDYgKzMwNSwxNSBAQAogCXJldHVybiBfX2Nsb2Nrc291cmNlX3JlZ2lzdGVyX3NjYWxlKGNzLCAxMDAwLCBraHopOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX2h6KHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBoeikKK3sKKwlfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUoY3MsIDEsIGh6KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9raHooc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTMyIGtoeikKK3sKKwlfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUoY3MsIDEwMDAsIGtoeik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogY2xvY2tzb3VyY2VfY2FsY19tdWx0X3NoaWZ0KHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHUzMiBmcmVxLCB1MzIgbWluc2VjKQpAQCAtMzEzLDExICszMjQsMTMgQEAKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEwKIGV4dGVybiB2b2lkCi11cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IGNsb2Nrc291cmNlICpjLCB1MzIgbXVsdCk7Cit1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IHRpbWVzcGVjICp3dG0sCisJCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMsIHUzMiBtdWx0KTsKIGV4dGVybiB2b2lkIHVwZGF0ZV92c3lzY2FsbF90eih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLXVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmMsIHUzMiBtdWx0KQordXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lc3BlYyAqd3RtLAorCQkJc3RydWN0IGNsb2Nrc291cmNlICpjLCB1MzIgbXVsdCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhX3BzZGV2LmggYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAppbmRleCA4ODU5ZTJlLi4yODRiNTIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaApAQCAtODYsOSArODYsOSBAQAogCXdhaXRfcXVldWVfaGVhZF90ICAgdWNfc2xlZXA7ICAgLyogcHJvY2Vzcycgd2FpdCBxdWV1ZSAqLwogfTsKIAotI2RlZmluZSBSRVFfQVNZTkMgIDB4MQotI2RlZmluZSBSRVFfUkVBRCAgIDB4MgotI2RlZmluZSBSRVFfV1JJVEUgIDB4NAotI2RlZmluZSBSRVFfQUJPUlQgIDB4OAorI2RlZmluZSBDT0RBX1JFUV9BU1lOQyAgMHgxCisjZGVmaW5lIENPREFfUkVRX1JFQUQgICAweDIKKyNkZWZpbmUgQ09EQV9SRVFfV1JJVEUgIDB4NAorI2RlZmluZSBDT0RBX1JFUV9BQk9SVCAgMHg4CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggMGRhNWIxOC4uMTY1MDhiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC0zNSw4ICszNSw3IEBACiAgICAgKHR5cGVvZihwdHIpKSAoX19wdHIgKyAob2ZmKSk7IH0pCiAKIC8qICZhWzBdIGRlZ3JhZGVzIHRvIGEgcG9pbnRlcjogYSBkaWZmZXJlbnQgdHlwZSBmcm9tIGFuIGFycmF5ICovCi0jZGVmaW5lIF9fbXVzdF9iZV9hcnJheShhKSBcCi0gIEJVSUxEX0JVR19PTl9aRVJPKF9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGEpLCB0eXBlb2YoJmFbMF0pKSkKKyNkZWZpbmUgX19tdXN0X2JlX2FycmF5KGEpIEJVSUxEX0JVR19PTl9aRVJPKF9fc2FtZV90eXBlKChhKSwgJihhKVswXSkpCiAKIC8qCiAgKiBGb3JjZSBhbHdheXMtaW5saW5lIGlmIHRoZSB1c2VyIHJlcXVlc3RzIGl0IHNvIHZpYSB0aGUgLmNvbmZpZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCBhNWE0NzJiLi5jMWE2MmM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xNiw2ICsxNiw3IEBACiAjIGRlZmluZSBfX3JlbGVhc2UoeCkJX19jb250ZXh0X18oeCwtMSkKICMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykJKChjKSA/ICh7IF9fYWNxdWlyZSh4KTsgMTsgfSkgOiAwKQogIyBkZWZpbmUgX19wZXJjcHUJX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgzKSkpCisjIGRlZmluZSBfX3JjdQogZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gdm9pZCBfX2Noa19pb19wdHIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICopOwogI2Vsc2UKQEAgLTM0LDYgKzM1LDcgQEAKICMgZGVmaW5lIF9fcmVsZWFzZSh4KSAodm9pZCkwCiAjIGRlZmluZSBfX2NvbmRfbG9jayh4LGMpIChjKQogIyBkZWZpbmUgX19wZXJjcHUKKyMgZGVmaW5lIF9fcmN1CiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggZjc2ZmMyOS4uOTVjZjZmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTc5LDggKzc5LDEzIEBACiBpbnQgdW5yZWdpc3Rlcl9jb25fZHJpdmVyKGNvbnN0IHN0cnVjdCBjb25zdyAqY3N3KTsKIGludCB0YWtlX292ZXJfY29uc29sZShjb25zdCBzdHJ1Y3QgY29uc3cgKnN3LCBpbnQgZmlyc3QsIGludCBsYXN0LCBpbnQgZGVmbHQpOwogdm9pZCBnaXZlX3VwX2NvbnNvbGUoY29uc3Qgc3RydWN0IGNvbnN3ICpzdyk7CisjaWZkZWYgQ09ORklHX0hXX0NPTlNPTEUKIGludCBjb25fZGVidWdfZW50ZXIoc3RydWN0IHZjX2RhdGEgKnZjKTsKIGludCBjb25fZGVidWdfbGVhdmUodm9pZCk7CisjZWxzZQorI2RlZmluZSBjb25fZGVidWdfZW50ZXIodmMpICgwKQorI2RlZmluZSBjb25fZGVidWdfbGVhdmUoKSAoMCkKKyNlbmRpZgogCiAvKiBzY3JvbGwgKi8KICNkZWZpbmUgU01fVVAgICAgICAgKDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKaW5kZXggMzhmZTU5ZC4uN2YwYzMyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlX3N0cnVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZV9zdHJ1Y3QuaApAQCAtMjEsNiArMjEsOCBAQAogI2RlZmluZSBOUEFSIDE2CiAKIHN0cnVjdCB2Y19kYXRhIHsKKwlzdHJ1Y3QgdHR5X3BvcnQgcG9ydDsJCQkvKiBVcHBlciBsZXZlbCBkYXRhICovCisKIAl1bnNpZ25lZCBzaG9ydAl2Y19udW07CQkJLyogQ29uc29sZSBudW1iZXIgKi8KIAl1bnNpZ25lZCBpbnQJdmNfY29sczsJCS8qIFsjXSBDb25zb2xlIHNpemUgKi8KIAl1bnNpZ25lZCBpbnQJdmNfcm93czsKQEAgLTU2LDcgKzU4LDYgQEAKIAkvKiBWVCB0ZXJtaW5hbCBkYXRhICovCiAJdW5zaWduZWQgaW50CXZjX3N0YXRlOwkJLyogRXNjYXBlIHNlcXVlbmNlIHBhcnNlciBzdGF0ZSAqLwogCXVuc2lnbmVkIGludAl2Y19ucGFyLHZjX3BhcltOUEFSXTsJLyogUGFyYW1ldGVycyBvZiBjdXJyZW50IGVzY2FwZSBzZXF1ZW5jZSAqLwotCXN0cnVjdCB0dHlfc3RydWN0ICp2Y190dHk7CQkvKiBUVFkgd2UgYXJlIGF0dGFjaGVkIHRvICovCiAJLyogZGF0YSBmb3IgbWFudWFsIHZ0IHN3aXRjaGluZyAqLwogCXN0cnVjdCB2dF9tb2RlCXZ0X21vZGU7CiAJc3RydWN0IHBpZCAJKnZ0X3BpZDsKQEAgLTEwNSw2ICsxMDYsNyBAQAogCXN0cnVjdCB2Y19kYXRhICoqdmNfZGlzcGxheV9mZzsJCS8qIFshXSBQdHIgdG8gdmFyIGhvbGRpbmcgZmcgY29uc29sZSBmb3IgdGhpcyBkaXNwbGF5ICovCiAJdW5zaWduZWQgbG9uZwl2Y191bmlfcGFnZWRpcjsKIAl1bnNpZ25lZCBsb25nCSp2Y191bmlfcGFnZWRpcl9sb2M7ICAvKiBbIV0gTG9jYXRpb24gb2YgdW5pX3BhZ2VkaXIgdmFyaWFibGUgZm9yIHRoaXMgY29uc29sZSAqLworCWJvb2wgdmNfcGFuaWNfZm9yY2Vfd3JpdGU7IC8qIHdoZW4gb29wcy9wYW5pYyB0aGlzIFZDIGNhbiBhY2NlcHQgZm9yY2VkIG91dHB1dC9ibGFua2luZyAqLwogCS8qIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgaW4gdnRfa2Vybi5oICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBlMjg3ODYzLi40ODIzYWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTQ4LDYgKzQ4LDMzIEBACiAjZW5kaWYKIHN0cnVjdCBub3RpZmllcl9ibG9jazsKIAorLyoKKyAqIENQVSBub3RpZmllciBwcmlvcml0aWVzLgorICovCitlbnVtIHsKKwkvKgorCSAqIFNDSEVEX0FDVElWRSBtYXJrcyBhIGNwdSB3aGljaCBpcyBjb21pbmcgdXAgYWN0aXZlIGR1cmluZworCSAqIENQVV9PTkxJTkUgYW5kIENQVV9ET1dOX0ZBSUxFRCBhbmQgbXVzdCBiZSB0aGUgZmlyc3QKKwkgKiBub3RpZmllci4gIENQVVNFVF9BQ1RJVkUgYWRqdXN0cyBjcHVzZXQgYWNjb3JkaW5nIHRvCisJICogY3B1X2FjdGl2ZSBtYXNrIHJpZ2h0IGFmdGVyIFNDSEVEX0FDVElWRS4gIER1cmluZworCSAqIENQVV9ET1dOX1BSRVBBUkUsIFNDSEVEX0lOQUNUSVZFIGFuZCBDUFVTRVRfSU5BQ1RJVkUgYXJlCisJICogb3JkZXJlZCBpbiB0aGUgc2ltaWxhciB3YXkuCisJICoKKwkgKiBUaGlzIG9yZGVyaW5nIGd1YXJhbnRlZXMgY29uc2lzdGVudCBjcHVfYWN0aXZlIG1hc2sgYW5kCisJICogbWlncmF0aW9uIGJlaGF2aW9yIHRvIGFsbCBjcHUgbm90aWZpZXJzLgorCSAqLworCUNQVV9QUklfU0NIRURfQUNUSVZFCT0gSU5UX01BWCwKKwlDUFVfUFJJX0NQVVNFVF9BQ1RJVkUJPSBJTlRfTUFYIC0gMSwKKwlDUFVfUFJJX1NDSEVEX0lOQUNUSVZFCT0gSU5UX01JTiArIDEsCisJQ1BVX1BSSV9DUFVTRVRfSU5BQ1RJVkUJPSBJTlRfTUlOLAorCisJLyogbWlncmF0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlIG90aGVyIHN0dWZmIGJ1dCBhZnRlciBwZXJmICovCisJQ1BVX1BSSV9QRVJGCQk9IDIwLAorCUNQVV9QUklfTUlHUkFUSU9OCT0gMTAsCisJLyogcHJlcGFyZSB3b3JrcXVldWVzIGZvciBvdGhlciBub3RpZmllcnMgKi8KKwlDUFVfUFJJX1dPUktRVUVVRQk9IDUsCit9OworCiAjaWZkZWYgQ09ORklHX1NNUAogLyogTmVlZCB0byBrbm93IGFib3V0IENQVXMgZ29pbmcgdXAvZG93bj8gKi8KICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgIWRlZmluZWQoTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmggYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAppbmRleCA1NTIxNWNjLi4zNmNhOTcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2RlZmluZSBDUFVJRExFX0ZMQUdfU0hBTExPVwkoMHgyMCkgLyogbG93IGxhdGVuY3ksIG1pbmltYWwgc2F2aW5ncyAqLwogI2RlZmluZSBDUFVJRExFX0ZMQUdfQkFMQU5DRUQJKDB4NDApIC8qIG1lZGl1bSBsYXRlbmN5LCBtb2RlcmF0ZSBzYXZpbmdzICovCiAjZGVmaW5lIENQVUlETEVfRkxBR19ERUVQCSgweDgwKSAvKiBoaWdoIGxhdGVuY3ksIGxhcmdlIHNhdmluZ3MgKi8KKyNkZWZpbmUgQ1BVSURMRV9GTEFHX0lHTk9SRQkoMHgxMDApIC8qIGlnbm9yZSBkdXJpbmcgdGhpcyBpZGxlIHBlcmlvZCAqLwogCiAjZGVmaW5lIENQVUlETEVfRFJJVkVSX0ZMQUdTX01BU0sgKDB4RkZGRjAwMDApCiAKQEAgLTg0LDYgKzg1LDcgQEAKIHN0cnVjdCBjcHVpZGxlX2RldmljZSB7CiAJdW5zaWduZWQgaW50CQlyZWdpc3RlcmVkOjE7CiAJdW5zaWduZWQgaW50CQllbmFibGVkOjE7CisJdW5zaWduZWQgaW50CQlwb3dlcl9zcGVjaWZpZWQ6MTsKIAl1bnNpZ25lZCBpbnQJCWNwdTsKIAogCWludAkJCWxhc3RfcmVzaWRlbmN5OwpAQCAtOTcsNiArOTksOCBAQAogCXN0cnVjdCBjb21wbGV0aW9uCWtvYmpfdW5yZWdpc3RlcjsKIAl2b2lkCQkJKmdvdmVybm9yX2RhdGE7CiAJc3RydWN0IGNwdWlkbGVfc3RhdGUJKnNhZmVfc3RhdGU7CisKKwlpbnQgKCpwcmVwYXJlKQkJKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KTsKIH07CiAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKiwgY3B1aWRsZV9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmggYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCmluZGV4IDQ1N2VkNzYuLmYyMGViOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaApAQCAtMjAsNiArMjAsNyBAQAogCiBleHRlcm4gaW50IGNwdXNldF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1c2V0X2luaXRfc21wKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CiBleHRlcm4gaW50IGNwdXNldF9jcHVzX2FsbG93ZWRfZmFsbGJhY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiBub2RlbWFza190IGNwdXNldF9tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKQEAgLTEzMiw2ICsxMzMsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfaW5pdF9zbXAodm9pZCkge30KIAorc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXModm9pZCkKK3sKKwlwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygxLCBOVUxMLCBOVUxMKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLAogCQkJCSAgICAgICBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IGVlYmI2MTcuLjZhNGFlYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaApAQCAtMzE1LDYgKzMxNSw4IEBACiAKIGV4dGVybiBjaGFyICpfX2RfcGF0aChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IHBhdGggKnJvb3QsIGNoYXIgKiwgaW50KTsKIGV4dGVybiBjaGFyICpkX3BhdGgoY29uc3Qgc3RydWN0IHBhdGggKiwgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNoYXIgKmRfcGF0aF93aXRoX3VucmVhY2hhYmxlKGNvbnN0IHN0cnVjdCBwYXRoICosIGNoYXIgKiwgaW50KTsKK2V4dGVybiBjaGFyICpfX2RlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGNoYXIgKmRlbnRyeV9wYXRoKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwogCiAvKiBBbGxvY2F0aW9uIGNvdW50cy4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlbGF5LmggYi9pbmNsdWRlL2xpbnV4L2RlbGF5LmgKaW5kZXggZmQ4MzJjNi4uYTZlY2IzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWxheS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVsYXkuaApAQCAtNDUsNiArNDUsNyBAQAogdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiB2b2lkIG1zbGVlcCh1bnNpZ25lZCBpbnQgbXNlY3MpOwogdW5zaWduZWQgbG9uZyBtc2xlZXBfaW50ZXJydXB0aWJsZSh1bnNpZ25lZCBpbnQgbXNlY3MpOwordm9pZCB1c2xlZXBfcmFuZ2UodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4KTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNzbGVlcCh1bnNpZ25lZCBpbnQgc2Vjb25kcykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IDZhODI3NmYuLjUxNmZlY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtODQsOSArODQsOCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpzdGFydCwKIAkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKLWludCBfX211c3RfY2hlY2sgYnVzX2Zvcl9lYWNoX2RydihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKLQkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpzdGFydCwgdm9pZCAqZGF0YSwKLQkJCQkgIGludCAoKmZuKShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCB2b2lkICopKTsKK2ludCBidXNfZm9yX2VhY2hfZHJ2KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc3RhcnQsCisJCSAgICAgdm9pZCAqZGF0YSwgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIHZvaWQgKikpOwogCiB2b2lkIGJ1c19zb3J0X2JyZWFkdGhmaXJzdChzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKIAkJCSAgIGludCAoKmNvbXBhcmUpKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmEsCkBAIC0xMTAsMTAgKzEwOSwxMiBAQAogICovCiAjZGVmaW5lIEJVU19OT1RJRllfQUREX0RFVklDRQkJMHgwMDAwMDAwMSAvKiBkZXZpY2UgYWRkZWQgKi8KICNkZWZpbmUgQlVTX05PVElGWV9ERUxfREVWSUNFCQkweDAwMDAwMDAyIC8qIGRldmljZSByZW1vdmVkICovCi0jZGVmaW5lIEJVU19OT1RJRllfQk9VTkRfRFJJVkVSCQkweDAwMDAwMDAzIC8qIGRyaXZlciBib3VuZCB0byBkZXZpY2UgKi8KLSNkZWZpbmUgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSCTB4MDAwMDAwMDQgLyogZHJpdmVyIGFib3V0IHRvIGJlCisjZGVmaW5lIEJVU19OT1RJRllfQklORF9EUklWRVIJCTB4MDAwMDAwMDMgLyogZHJpdmVyIGFib3V0IHRvIGJlCisJCQkJCQkgICAgICBib3VuZCAqLworI2RlZmluZSBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUgkJMHgwMDAwMDAwNCAvKiBkcml2ZXIgYm91bmQgdG8gZGV2aWNlICovCisjZGVmaW5lIEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUgkweDAwMDAwMDA1IC8qIGRyaXZlciBhYm91dCB0byBiZQogCQkJCQkJICAgICAgdW5ib3VuZCAqLwotI2RlZmluZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSCTB4MDAwMDAwMDUgLyogZHJpdmVyIGlzIHVuYm91bmQKKyNkZWZpbmUgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUgkweDAwMDAwMDA2IC8qIGRyaXZlciBpcyB1bmJvdW5kCiAJCQkJCQkgICAgICBmcm9tIHRoZSBkZXZpY2UgKi8KIAogZXh0ZXJuIHN0cnVjdCBrc2V0ICpidXNfZ2V0X2tzZXQoc3RydWN0IGJ1c190eXBlICpidXMpOwpAQCAtNTUxLDcgKzU1Miw3IEBACiAJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkpOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmRldmljZV9maW5kX2NoaWxkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKSk7Ci1leHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuZXdfbmFtZSk7CitleHRlcm4gaW50IGRldmljZV9yZW5hbWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CiBleHRlcm4gaW50IGRldmljZV9tb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbmV3X3BhcmVudCwKIAkJICAgICAgIGVudW0gZHBtX29yZGVyIGRwbV9vcmRlcik7CiBleHRlcm4gY29uc3QgY2hhciAqZGV2aWNlX2dldF9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCA4OWI3ZTFhLi5lMDY3MGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0xNDIsNiArMTQyLDE0IEBACiAJCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworI2lmZGVmIEFSQ0hfRE1BX01JTkFMSUdOCisJcmV0dXJuIEFSQ0hfRE1BX01JTkFMSUdOOworI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKIC8qIGZsYWdzIGZvciB0aGUgY29oZXJlbnQgbWVtb3J5IGFwaSAqLwogI2RlZmluZQlETUFfTUVNT1JZX01BUAkJCTB4MDEKICNkZWZpbmUgRE1BX01FTU9SWV9JTwkJCTB4MDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IDUyMDRmMDEuLmM2MWQ0Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtMTE0LDExICsxMTQsMTcgQEAKICAqIEBETUFfVEVSTUlOQVRFX0FMTDogdGVybWluYXRlIGFsbCBvbmdvaW5nIHRyYW5zZmVycwogICogQERNQV9QQVVTRTogcGF1c2Ugb25nb2luZyB0cmFuc2ZlcnMKICAqIEBETUFfUkVTVU1FOiByZXN1bWUgcGF1c2VkIHRyYW5zZmVyCisgKiBARE1BX1NMQVZFX0NPTkZJRzogdGhpcyBjb21tYW5kIGlzIG9ubHkgaW1wbGVtZW50ZWQgYnkgRE1BIGNvbnRyb2xsZXJzCisgKiB0aGF0IG5lZWQgdG8gcnVudGltZSByZWNvbmZpZ3VyZSB0aGUgc2xhdmUgY2hhbm5lbHMgKGFzIG9wcG9zZWQgdG8gcGFzc2luZworICogY29uZmlndXJhdGlvbiBkYXRhIGluIHN0YXRpY2FsbHkgZnJvbSB0aGUgcGxhdGZvcm0pLiBBbiBhZGRpdGlvbmFsCisgKiBhcmd1bWVudCBvZiBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBtdXN0IGJlIHBhc3NlZCBpbiB3aXRoIHRoaXMKKyAqIGNvbW1hbmQuCiAgKi8KIGVudW0gZG1hX2N0cmxfY21kIHsKIAlETUFfVEVSTUlOQVRFX0FMTCwKIAlETUFfUEFVU0UsCiAJRE1BX1JFU1VNRSwKKwlETUFfU0xBVkVfQ09ORklHLAogfTsKIAogLyoqCkBAIC0xOTksNiArMjA1LDcxIEBACiAJYXRvbWljX3QgKmlkcl9yZWY7CiB9OwogCisvKioKKyAqIGVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIC0gZGVmaW5lcyBidXMgd2l0aCBvZiB0aGUgRE1BIHNsYXZlCisgKiBkZXZpY2UsIHNvdXJjZSBvciB0YXJnZXQgYnVzZXMKKyAqLworZW51bSBkbWFfc2xhdmVfYnVzd2lkdGggeworCURNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQgPSAwLAorCURNQV9TTEFWRV9CVVNXSURUSF8xX0JZVEUgPSAxLAorCURNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTID0gMiwKKwlETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUyA9IDQsCisJRE1BX1NMQVZFX0JVU1dJRFRIXzhfQllURVMgPSA4LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyAtIGRtYSBzbGF2ZSBjaGFubmVsIHJ1bnRpbWUgY29uZmlnCisgKiBAZGlyZWN0aW9uOiB3aGV0aGVyIHRoZSBkYXRhIHNoYWxsIGdvIGluIG9yIG91dCBvbiB0aGlzIHNsYXZlCisgKiBjaGFubmVsLCByaWdodCBub3cuIERNQV9UT19ERVZJQ0UgYW5kIERNQV9GUk9NX0RFVklDRSBhcmUKKyAqIGxlZ2FsIHZhbHVlcywgRE1BX0JJRElSRUNUSU9OQUwgaXMgbm90IGFjY2VwdGFibGUgc2luY2Ugd2UKKyAqIG5lZWQgdG8gZGlmZmVyZW50aWF0ZSBzb3VyY2UgYW5kIHRhcmdldCBhZGRyZXNzZXMuCisgKiBAc3JjX2FkZHI6IHRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgRE1BIHNsYXZlIGRhdGEKKyAqIHNob3VsZCBiZSByZWFkIChSWCksIGlmIHRoZSBzb3VyY2UgaXMgbWVtb3J5IHRoaXMgYXJndW1lbnQgaXMKKyAqIGlnbm9yZWQuCisgKiBAZHN0X2FkZHI6IHRoaXMgaXMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgd2hlcmUgRE1BIHNsYXZlIGRhdGEKKyAqIHNob3VsZCBiZSB3cml0dGVuIChUWCksIGlmIHRoZSBzb3VyY2UgaXMgbWVtb3J5IHRoaXMgYXJndW1lbnQKKyAqIGlzIGlnbm9yZWQuCisgKiBAc3JjX2FkZHJfd2lkdGg6IHRoaXMgaXMgdGhlIHdpZHRoIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgKFJYKQorICogcmVnaXN0ZXIgd2hlcmUgRE1BIGRhdGEgc2hhbGwgYmUgcmVhZC4gSWYgdGhlIHNvdXJjZQorICogaXMgbWVtb3J5IHRoaXMgbWF5IGJlIGlnbm9yZWQgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZS4KKyAqIExlZ2FsIHZhbHVlczogMSwgMiwgNCwgOC4KKyAqIEBkc3RfYWRkcl93aWR0aDogc2FtZSBhcyBzcmNfYWRkcl93aWR0aCBidXQgZm9yIGRlc3RpbmF0aW9uCisgKiB0YXJnZXQgKFRYKSBtdXRhdGlzIG11dGFuZGlzLgorICogQHNyY19tYXhidXJzdDogdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmRzIChub3RlOiB3b3JkcywgYXMgaW4KKyAqIHVuaXRzIG9mIHRoZSBzcmNfYWRkcl93aWR0aCBtZW1iZXIsIG5vdCBieXRlcykgdGhhdCBjYW4gYmUgc2VudAorICogaW4gb25lIGJ1cnN0IHRvIHRoZSBkZXZpY2UuIFR5cGljYWxseSBzb21ldGhpbmcgbGlrZSBoYWxmIHRoZQorICogRklGTyBkZXB0aCBvbiBJL08gcGVyaXBoZXJhbHMgc28geW91IGRvbid0IG92ZXJmbG93IGl0LiBUaGlzCisgKiBtYXkgb3IgbWF5IG5vdCBiZSBhcHBsaWNhYmxlIG9uIG1lbW9yeSBzb3VyY2VzLgorICogQGRzdF9tYXhidXJzdDogc2FtZSBhcyBzcmNfbWF4YnVyc3QgYnV0IGZvciBkZXN0aW5hdGlvbiB0YXJnZXQKKyAqIG11dGF0aXMgbXV0YW5kaXMuCisgKgorICogVGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGluIGFzIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBhIERNQSBlbmdpbmUKKyAqIGluIG9yZGVyIHRvIHNldCB1cCBhIGNlcnRhaW4gY2hhbm5lbCBmb3IgRE1BIHRyYW5zcG9ydCBhdCBydW50aW1lLgorICogVGhlIERNQSBkZXZpY2UvZW5naW5lIGhhcyB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGFuIGFkZGl0aW9uYWwKKyAqIGNvbW1hbmQgaW4gdGhlIGNoYW5uZWwgY29uZmlnIGludGVyZmFjZSwgRE1BX1NMQVZFX0NPTkZJRworICogYW5kIHRoaXMgc3RydWN0IHdpbGwgdGhlbiBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlCisgKiBETUEgZW5naW5lIGRldmljZV9jb250cm9sKCkgZnVuY3Rpb24uCisgKgorICogVGhlIHJhdGlvbmFsZSBmb3IgYWRkaW5nIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdG8gdGhpcyBzdHJ1Y3QKKyAqIGlzIGFzIGZvbGxvd3M6IGlmIGl0IGlzIGxpa2VseSB0aGF0IG1vc3QgRE1BIHNsYXZlIGNvbnRyb2xsZXJzIGluCisgKiB0aGUgd29ybGQgd2lsbCBzdXBwb3J0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlbiBtYWtlIGl0CisgKiBnZW5lcmljLiBJZiBub3Q6IGlmIGl0IGlzIGZpeGVkIHNvIHRoYXQgaXQgYmUgc2VudCBpbiBzdGF0aWMgZnJvbQorICogdGhlIHBsYXRmb3JtIGRhdGEsIHRoZW4gcHJlZmVyIHRvIGRvIHRoYXQuIEVsc2UsIGlmIGl0IGlzIG5laXRoZXIKKyAqIGZpeGVkIGF0IHJ1bnRpbWUsIG5vciBnZW5lcmljIGVub3VnaCAoc3VjaCBhcyBidXMgbWFzdGVyc2hpcCBvbgorICogc29tZSBDUFUgZmFtaWx5IGFuZCB3aGF0bm90KSB0aGVuIGNyZWF0ZSBhIGN1c3RvbSBzbGF2ZSBjb25maWcKKyAqIHN0cnVjdCBhbmQgcGFzcyB0aGF0LCB0aGVuIG1ha2UgdGhpcyBjb25maWcgYSBtZW1iZXIgb2YgdGhhdAorICogc3RydWN0LCBpZiBhcHBsaWNhYmxlLgorICovCitzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyB7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOworCWRtYV9hZGRyX3Qgc3JjX2FkZHI7CisJZG1hX2FkZHJfdCBkc3RfYWRkcjsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBzcmNfYWRkcl93aWR0aDsKKwllbnVtIGRtYV9zbGF2ZV9idXN3aWR0aCBkc3RfYWRkcl93aWR0aDsKKwl1MzIgc3JjX21heGJ1cnN0OworCXUzMiBkc3RfbWF4YnVyc3Q7Cit9OworCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRtYV9jaGFuX25hbWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQogewogCXJldHVybiBkZXZfbmFtZSgmY2hhbi0+ZGV2LT5kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKaW5kZXggYThhM2UxYS4uOTBlMDg3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtaS5oCkBAIC0yMCw2ICsyMCw3IEBACiAJRE1JX0RFVl9UWVBFX1NBUywKIAlETUlfREVWX1RZUEVfSVBNSSA9IC0xLAogCURNSV9ERVZfVFlQRV9PRU1fU1RSSU5HID0gLTIsCisJRE1JX0RFVl9UWVBFX0RFVl9PTkJPQVJEID0gLTMsCiB9OwogCiBzdHJ1Y3QgZG1pX2hlYWRlciB7CkBAIC0zNyw2ICszOCwxNCBAQAogCiAjaWZkZWYgQ09ORklHX0RNSQogCitzdHJ1Y3QgZG1pX2Rldl9vbmJvYXJkIHsKKwlzdHJ1Y3QgZG1pX2RldmljZSBkZXY7CisJaW50IGluc3RhbmNlOworCWludCBzZWdtZW50OworCWludCBidXM7CisJaW50IGRldmZuOworfTsKKwogZXh0ZXJuIGludCBkbWlfY2hlY2tfc3lzdGVtKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpsaXN0KTsKIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWlfZmlyc3RfbWF0Y2goY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmxpc3QpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKiBkbWlfZ2V0X3N5c3RlbV9pbmZvKGludCBmaWVsZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCmluZGV4IGVjYzA2MjguLjMyOTA1NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG5vdGlmeS5oCkBAIC0yOCw2ICsyOCw3IEBACiAJCQkgICAgRlNfQ1JFQVRFIHwgRlNfRE5fUkVOQU1FIHxcCiAJCQkgICAgRlNfTU9WRURfRlJPTSB8IEZTX01PVkVEX1RPKQogCitleHRlcm4gaW50IGRpcl9ub3RpZnlfZW5hYmxlOwogZXh0ZXJuIHZvaWQgZG5vdGlmeV9mbHVzaChzdHJ1Y3QgZmlsZSAqLCBmbF9vd25lcl90KTsKIGV4dGVybiBpbnQgZmNudGxfZGlybm90aWZ5KGludCwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG5zX3Jlc29sdmVyLmggYi9pbmNsdWRlL2xpbnV4L2Ruc19yZXNvbHZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOTIyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2Ruc19yZXNvbHZlci5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiAgIEROUyBSZXNvbHZlciB1cGNhbGwgbWFuYWdlbWVudCBmb3IgQ0lGUyBERlMgYW5kIEFGUworICogICBIYW5kbGVzIGhvc3QgbmFtZSB0byBJUCBhZGRyZXNzIHJlc29sdXRpb24gYW5kIEROUyBxdWVyeSBmb3IgQUZTREIgUlIuCisgKgorICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA4CisgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKiAgICAgICAgICAgICAgV2FuZyBMZWkgKHdhbmc4NDA5MjVAZ21haWwuY29tKQorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfTElOVVhfRE5TX1JFU09MVkVSX0gKKyNkZWZpbmUgX0xJTlVYX0ROU19SRVNPTFZFUl9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiBpbnQgZG5zX3F1ZXJ5KGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKm9wdGlvbnMsIGNoYXIgKipfcmVzdWx0LCB0aW1lX3QgKl9leHBpcnkpOworCisjZW5kaWYgLyogS0VSTkVMICovCisKKyNlbmRpZiAvKiBfTElOVVhfRE5TX1JFU09MVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmggYi9pbmNsdWRlL2xpbnV4L2RxYmxrX3hmcy5oCmluZGV4IDQzODlhZTcuLjg2NTUyODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHFibGtfeGZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9kcWJsa194ZnMuaApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBGU19EUVVPVF9WRVJTSU9OCTEJLyogZnNfZGlza19xdW90YS5kX3ZlcnNpb24gKi8KIHR5cGVkZWYgc3RydWN0IGZzX2Rpc2tfcXVvdGEgewogCV9fczgJCWRfdmVyc2lvbjsJLyogdmVyc2lvbiBvZiB0aGlzIHN0cnVjdHVyZSAqLwotCV9fczgJCWRfZmxhZ3M7CS8qIFhGU197VVNFUixQUk9KLEdST1VQfV9RVU9UQSAqLworCV9fczgJCWRfZmxhZ3M7CS8qIEZTX3tVU0VSLFBST0osR1JPVVB9X1FVT1RBICovCiAJX191MTYJCWRfZmllbGRtYXNrOwkvKiBmaWVsZCBzcGVjaWZpZXIgKi8KIAlfX3UzMgkJZF9pZDsJCS8qIHVzZXIsIHByb2plY3QsIG9yIGdyb3VwIElEICovCiAJX191NjQJCWRfYmxrX2hhcmRsaW1pdDsvKiBhYnNvbHV0ZSBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KQEAgLTExOSwxOCArMTE5LDE4IEBACiAjZGVmaW5lIEZTX0RRX0FDQ1RfTUFTSwkJKEZTX0RRX0JDT1VOVCB8IEZTX0RRX0lDT1VOVCB8IEZTX0RRX1JUQkNPVU5UKQogCiAvKgotICogVmFyaW91cyBmbGFncyByZWxhdGVkIHRvIHF1b3RhY3RsKDIpLiAgT25seSByZWxldmFudCB0byBYRlMgZmlsZXN5c3RlbXMuCisgKiBWYXJpb3VzIGZsYWdzIHJlbGF0ZWQgdG8gcXVvdGFjdGwoMikuCiAgKi8KLSNkZWZpbmUgWEZTX1FVT1RBX1VEUV9BQ0NUCSgxPDwwKSAgLyogdXNlciBxdW90YSBhY2NvdW50aW5nICovCi0jZGVmaW5lIFhGU19RVU9UQV9VRFFfRU5GRAkoMTw8MSkgIC8qIHVzZXIgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCi0jZGVmaW5lIFhGU19RVU9UQV9HRFFfQUNDVAkoMTw8MikgIC8qIGdyb3VwIHF1b3RhIGFjY291bnRpbmcgKi8KLSNkZWZpbmUgWEZTX1FVT1RBX0dEUV9FTkZECSgxPDwzKSAgLyogZ3JvdXAgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCi0jZGVmaW5lIFhGU19RVU9UQV9QRFFfQUNDVAkoMTw8NCkgIC8qIHByb2plY3QgcXVvdGEgYWNjb3VudGluZyAqLwotI2RlZmluZSBYRlNfUVVPVEFfUERRX0VORkQJKDE8PDUpICAvKiBwcm9qZWN0IHF1b3RhIGxpbWl0cyBlbmZvcmNlbWVudCAqLworI2RlZmluZSBGU19RVU9UQV9VRFFfQUNDVAkoMTw8MCkgIC8qIHVzZXIgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9VRFFfRU5GRAkoMTw8MSkgIC8qIHVzZXIgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCisjZGVmaW5lIEZTX1FVT1RBX0dEUV9BQ0NUCSgxPDwyKSAgLyogZ3JvdXAgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9HRFFfRU5GRAkoMTw8MykgIC8qIGdyb3VwIHF1b3RhIGxpbWl0cyBlbmZvcmNlbWVudCAqLworI2RlZmluZSBGU19RVU9UQV9QRFFfQUNDVAkoMTw8NCkgIC8qIHByb2plY3QgcXVvdGEgYWNjb3VudGluZyAqLworI2RlZmluZSBGU19RVU9UQV9QRFFfRU5GRAkoMTw8NSkgIC8qIHByb2plY3QgcXVvdGEgbGltaXRzIGVuZm9yY2VtZW50ICovCiAKLSNkZWZpbmUgWEZTX1VTRVJfUVVPVEEJCSgxPDwwKQkvKiB1c2VyIHF1b3RhIHR5cGUgKi8KLSNkZWZpbmUgWEZTX1BST0pfUVVPVEEJCSgxPDwxKQkvKiBwcm9qZWN0IHF1b3RhIHR5cGUgKi8KLSNkZWZpbmUgWEZTX0dST1VQX1FVT1RBCQkoMTw8MikJLyogZ3JvdXAgcXVvdGEgdHlwZSAqLworI2RlZmluZSBGU19VU0VSX1FVT1RBCQkoMTw8MCkJLyogdXNlciBxdW90YSB0eXBlICovCisjZGVmaW5lIEZTX1BST0pfUVVPVEEJCSgxPDwxKQkvKiBwcm9qZWN0IHF1b3RhIHR5cGUgKi8KKyNkZWZpbmUgRlNfR1JPVVBfUVVPVEEJCSgxPDwyKQkvKiBncm91cCBxdW90YSB0eXBlICovCiAKIC8qCiAgKiBmc19xdW90YV9zdGF0IGlzIHRoZSBzdHJ1Y3QgcmV0dXJuZWQgaW4gUV9YR0VUUVNUQVQgZm9yIGEgZ2l2ZW4gZmlsZSBzeXN0ZW0uCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZnNfcXVvdGFfc3RhdCB7CiAJX19zOAkJcXNfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgZm9yIGZ1dHVyZSBjaGFuZ2VzICovCi0JX191MTYJCXFzX2ZsYWdzOwkvKiBYRlNfUVVPVEFfe1UsUCxHfURRX3tBQ0NULEVORkR9ICovCisJX191MTYJCXFzX2ZsYWdzOwkvKiBGU19RVU9UQV97VSxQLEd9RFFfe0FDQ1QsRU5GRH0gKi8KIAlfX3M4CQlxc19wYWQ7CQkvKiB1bnVzZWQgKi8KIAlmc19xZmlsZXN0YXRfdAlxc191cXVvdGE7CS8qIHVzZXIgcXVvdGEgc3RvcmFnZSBpbmZvcm1hdGlvbiAqLwogCWZzX3FmaWxlc3RhdF90CXFzX2dxdW90YTsJLyogZ3JvdXAgcXVvdGEgc3RvcmFnZSBpbmZvcm1hdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kcmJkLmggYi9pbmNsdWRlL2xpbnV4L2RyYmQuaAppbmRleCBiOGQyNTE2Li40NzllZTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RyYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RyYmQuaApAQCAtNTMsNyArNTMsNyBAQAogCiAKIGV4dGVybiBjb25zdCBjaGFyICpkcmJkX2J1aWxkdGFnKHZvaWQpOwotI2RlZmluZSBSRUxfVkVSU0lPTiAiOC4zLjgiCisjZGVmaW5lIFJFTF9WRVJTSU9OICI4LjMuOC4xIgogI2RlZmluZSBBUElfVkVSU0lPTiA4OAogI2RlZmluZSBQUk9fVkVSU0lPTl9NSU4gODYKICNkZWZpbmUgUFJPX1ZFUlNJT05fTUFYIDk0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RyYmRfbmwuaCBiL2luY2x1ZGUvbGludXgvZHJiZF9ubC5oCmluZGV4IGNlNzdhNzQuLjVmMDQyODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHJiZF9ubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZHJiZF9ubC5oCkBAIC03OCwxMCArNzgsMTEgQEAKIAlOTF9JTlRFR0VSKAkzMCwJVF9NQVlfSUdOT1JFLAlyYXRlKQogCU5MX0lOVEVHRVIoCTMxLAlUX01BWV9JR05PUkUsCWFmdGVyKQogCU5MX0lOVEVHRVIoCTMyLAlUX01BWV9JR05PUkUsCWFsX2V4dGVudHMpCi0JTkxfSU5URUdFUiggICAgIDcxLAlUX01BWV9JR05PUkUsCWRwX3ZvbHVtZSkKLQlOTF9JTlRFR0VSKCAgICAgNzIsCVRfTUFZX0lHTk9SRSwJZHBfaW50ZXJ2YWwpCi0JTkxfSU5URUdFUiggICAgIDczLAlUX01BWV9JR05PUkUsCXRocm90dGxlX3RoKQotCU5MX0lOVEVHRVIoICAgICA3NCwJVF9NQVlfSUdOT1JFLAlob2xkX29mZl90aCkKKy8qCU5MX0lOVEVHRVIoICAgICA3MSwJVF9NQVlfSUdOT1JFLAlkcF92b2x1bWUpCisgKglOTF9JTlRFR0VSKCAgICAgNzIsCVRfTUFZX0lHTk9SRSwJZHBfaW50ZXJ2YWwpCisgKglOTF9JTlRFR0VSKCAgICAgNzMsCVRfTUFZX0lHTk9SRSwJdGhyb3R0bGVfdGgpCisgKglOTF9JTlRFR0VSKCAgICAgNzQsCVRfTUFZX0lHTk9SRSwJaG9sZF9vZmZfdGgpCisgKiBmZWF0dXJlIHdpbGwgYmUgcmVpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSB3aXRoIDguMy45ICovCiAJTkxfU1RSSU5HKCAgICAgIDUyLCAgICAgVF9NQVlfSUdOT1JFLCAgIHZlcmlmeV9hbGcsICAgICBTSEFSRURfU0VDUkVUX01BWCkKIAlOTF9TVFJJTkcoICAgICAgNTEsICAgICBUX01BWV9JR05PUkUsICAgY3B1X21hc2ssICAgICAgIDMyKQogCU5MX1NUUklORygJNjQsCVRfTUFZX0lHTk9SRSwJY3N1bXNfYWxnLAlTSEFSRURfU0VDUkVUX01BWCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggN2ZjNjJkNC4uNmNlMWJjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTQwMCw3ICs0MDAsNiBAQAogI2RlZmluZSBFWFQzX01PVU5UX1BPU0lYX0FDTAkJMHgwODAwMAkvKiBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAqLwogI2RlZmluZSBFWFQzX01PVU5UX1JFU0VSVkFUSU9OCQkweDEwMDAwCS8qIFByZWFsbG9jYXRpb24gKi8KICNkZWZpbmUgRVhUM19NT1VOVF9CQVJSSUVSCQkweDIwMDAwIC8qIFVzZSBibG9jayBiYXJyaWVycyAqLwotI2RlZmluZSBFWFQzX01PVU5UX05PQkgJCQkweDQwMDAwIC8qIE5vIGJ1ZmZlcmhlYWRzICovCiAjZGVmaW5lIEVYVDNfTU9VTlRfUVVPVEEJCTB4ODAwMDAgLyogU29tZSBxdW90YSBvcHRpb24gc2V0ICovCiAjZGVmaW5lIEVYVDNfTU9VTlRfVVNSUVVPVEEJCTB4MTAwMDAwIC8qICJvbGQiIHVzZXIgcXVvdGEgKi8KICNkZWZpbmUgRVhUM19NT1VOVF9HUlBRVU9UQQkJMHgyMDAwMDAgLyogIm9sZCIgZ3JvdXAgcXVvdGEgKi8KQEAgLTg5Niw3ICs4OTUsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0M19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiBpbnQgIGV4dDNfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gaW50ICBleHQzX3NldGF0dHIgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwotZXh0ZXJuIHZvaWQgZXh0M19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGV4dDNfZXZpY3RfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgIGV4dDNfc3luY19pbm9kZSAoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgZXh0M19kaXNjYXJkX3Jlc2VydmF0aW9uIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmFub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvZmFub3RpZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDk0OWE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9mYW5vdGlmeS5oCkBAIC0wLDAgKzEsMTA1IEBACisjaWZuZGVmIF9MSU5VWF9GQU5PVElGWV9ICisjZGVmaW5lIF9MSU5VWF9GQU5PVElGWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiB0aGUgZm9sbG93aW5nIGV2ZW50cyB0aGF0IHVzZXItc3BhY2UgY2FuIHJlZ2lzdGVyIGZvciAqLworI2RlZmluZSBGQU5fQUNDRVNTCQkweDAwMDAwMDAxCS8qIEZpbGUgd2FzIGFjY2Vzc2VkICovCisjZGVmaW5lIEZBTl9NT0RJRlkJCTB4MDAwMDAwMDIJLyogRmlsZSB3YXMgbW9kaWZpZWQgKi8KKyNkZWZpbmUgRkFOX0NMT1NFX1dSSVRFCQkweDAwMDAwMDA4CS8qIFVud3JpdHRhYmxlIGZpbGUgY2xvc2VkICovCisjZGVmaW5lIEZBTl9DTE9TRV9OT1dSSVRFCTB4MDAwMDAwMTAJLyogV3JpdHRhYmxlIGZpbGUgY2xvc2VkICovCisjZGVmaW5lIEZBTl9PUEVOCQkweDAwMDAwMDIwCS8qIEZpbGUgd2FzIG9wZW5lZCAqLworCisjZGVmaW5lIEZBTl9FVkVOVF9PTl9DSElMRAkweDA4MDAwMDAwCS8qIGludGVyZXN0ZWQgaW4gY2hpbGQgZXZlbnRzICovCisKKy8qIEZJWE1FIGN1cnJlbnRseSBRJ3MgaGF2ZSBubyBsaW1pdC4uLi4gKi8KKyNkZWZpbmUgRkFOX1FfT1ZFUkZMT1cJCTB4MDAwMDQwMDAJLyogRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQgKi8KKworI2RlZmluZSBGQU5fT1BFTl9QRVJNCQkweDAwMDEwMDAwCS8qIEZpbGUgb3BlbiBpbiBwZXJtIGNoZWNrICovCisjZGVmaW5lIEZBTl9BQ0NFU1NfUEVSTQkJMHgwMDAyMDAwMAkvKiBGaWxlIGFjY2Vzc2VkIGluIHBlcm0gY2hlY2sgKi8KKworLyogaGVscGVyIGV2ZW50cyAqLworI2RlZmluZSBGQU5fQ0xPU0UJCShGQU5fQ0xPU0VfV1JJVEUgfCBGQU5fQ0xPU0VfTk9XUklURSkgLyogY2xvc2UgKi8KKworLyogZmxhZ3MgdXNlZCBmb3IgZmFub3RpZnlfaW5pdCgpICovCisjZGVmaW5lIEZBTl9DTE9FWEVDCQkweDAwMDAwMDAxCisjZGVmaW5lIEZBTl9OT05CTE9DSwkJMHgwMDAwMDAwMgorCisjZGVmaW5lIEZBTl9BTExfSU5JVF9GTEFHUwkoRkFOX0NMT0VYRUMgfCBGQU5fTk9OQkxPQ0spCisKKy8qIGZsYWdzIHVzZWQgZm9yIGZhbm90aWZ5X21vZGlmeV9tYXJrKCkgKi8KKyNkZWZpbmUgRkFOX01BUktfQURECQkweDAwMDAwMDAxCisjZGVmaW5lIEZBTl9NQVJLX1JFTU9WRQkJMHgwMDAwMDAwMgorI2RlZmluZSBGQU5fTUFSS19ET05UX0ZPTExPVwkweDAwMDAwMDA0CisjZGVmaW5lIEZBTl9NQVJLX09OTFlESVIJMHgwMDAwMDAwOAorI2RlZmluZSBGQU5fTUFSS19NT1VOVAkJMHgwMDAwMDAxMAorI2RlZmluZSBGQU5fTUFSS19JR05PUkVEX01BU0sJMHgwMDAwMDAyMAorI2RlZmluZSBGQU5fTUFSS19JR05PUkVEX1NVUlZfTU9ESUZZCTB4MDAwMDAwNDAKKyNkZWZpbmUgRkFOX01BUktfRkxVU0gJCTB4MDAwMDAwODAKKworI2RlZmluZSBGQU5fQUxMX01BUktfRkxBR1MJKEZBTl9NQVJLX0FERCB8XAorCQkJCSBGQU5fTUFSS19SRU1PVkUgfFwKKwkJCQkgRkFOX01BUktfRE9OVF9GT0xMT1cgfFwKKwkJCQkgRkFOX01BUktfT05MWURJUiB8XAorCQkJCSBGQU5fTUFSS19NT1VOVCB8XAorCQkJCSBGQU5fTUFSS19JR05PUkVEX01BU0sgfFwKKwkJCQkgRkFOX01BUktfSUdOT1JFRF9TVVJWX01PRElGWSkKKworLyoKKyAqIEFsbCBvZiB0aGUgZXZlbnRzIC0gd2UgYnVpbGQgdGhlIGxpc3QgYnkgaGFuZCBzbyB0aGF0IHdlIGNhbiBhZGQgZmxhZ3MgaW4KKyAqIHRoZSBmdXR1cmUgYW5kIG5vdCBicmVhayBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgQXBwcyB3aWxsIGdldCBvbmx5IHRoZQorICogZXZlbnRzIHRoYXQgdGhleSBvcmlnaW5hbGx5IHdhbnRlZC4gIEJlIHN1cmUgdG8gYWRkIG5ldyBldmVudHMgaGVyZSEKKyAqLworI2RlZmluZSBGQU5fQUxMX0VWRU5UUyAoRkFOX0FDQ0VTUyB8XAorCQkJRkFOX01PRElGWSB8XAorCQkJRkFOX0NMT1NFIHxcCisJCQlGQU5fT1BFTikKKworLyoKKyAqIEFsbCBldmVudHMgd2hpY2ggcmVxdWlyZSBhIHBlcm1pc3Npb24gcmVzcG9uc2UgZnJvbSB1c2Vyc3BhY2UKKyAqLworI2RlZmluZSBGQU5fQUxMX1BFUk1fRVZFTlRTIChGQU5fT1BFTl9QRVJNIHxcCisJCQkgICAgIEZBTl9BQ0NFU1NfUEVSTSkKKworI2RlZmluZSBGQU5fQUxMX09VVEdPSU5HX0VWRU5UUwkoRkFOX0FMTF9FVkVOVFMgfFwKKwkJCQkgRkFOX0FMTF9QRVJNX0VWRU5UUyB8XAorCQkJCSBGQU5fUV9PVkVSRkxPVykKKworI2RlZmluZSBGQU5PVElGWV9NRVRBREFUQV9WRVJTSU9OCTEKKworc3RydWN0IGZhbm90aWZ5X2V2ZW50X21ldGFkYXRhIHsKKwlfX3UzMiBldmVudF9sZW47CisJX191MzIgdmVyczsKKwlfX3MzMiBmZDsKKwlfX3U2NCBtYXNrOworCV9fczY0IHBpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZmFub3RpZnlfcmVzcG9uc2UgeworCV9fczMyIGZkOworCV9fdTMyIHJlc3BvbnNlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIExlZ2l0IHVzZXJzcGFjZSByZXNwb25zZXMgdG8gYSBfUEVSTSBldmVudCAqLworI2RlZmluZSBGQU5fQUxMT1cJMHgwMQorI2RlZmluZSBGQU5fREVOWQkweDAyCisKKy8qIEhlbHBlciBmdW5jdGlvbnMgdG8gZGVhbCB3aXRoIGZhbm90aWZ5X2V2ZW50X21ldGFkYXRhIGJ1ZmZlcnMgKi8KKyNkZWZpbmUgRkFOX0VWRU5UX01FVEFEQVRBX0xFTiAoc2l6ZW9mKHN0cnVjdCBmYW5vdGlmeV9ldmVudF9tZXRhZGF0YSkpCisKKyNkZWZpbmUgRkFOX0VWRU5UX05FWFQobWV0YSwgbGVuKSAoKGxlbikgLT0gKG1ldGEpLT5ldmVudF9sZW4sIFwKKwkJCQkgICAoc3RydWN0IGZhbm90aWZ5X2V2ZW50X21ldGFkYXRhKikoKChjaGFyICopKG1ldGEpKSArIFwKKwkJCQkgICAobWV0YSktPmV2ZW50X2xlbikpCisKKyNkZWZpbmUgRkFOX0VWRU5UX09LKG1ldGEsIGxlbikJKChsb25nKShsZW4pID49IChsb25nKUZBTl9FVkVOVF9NRVRBREFUQV9MRU4gJiYgXAorCQkJCShsb25nKShtZXRhKS0+ZXZlbnRfbGVuID49IChsb25nKUZBTl9FVkVOVF9NRVRBREFUQV9MRU4gJiYgXAorCQkJCShsb25nKShtZXRhKS0+ZXZlbnRfbGVuIDw9IChsb25nKShsZW4pKQorCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3QgZmFub3RpZnlfd2FpdCB7CisJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudDsKKwlfX3MzMiBmZDsKK307CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9MSU5VWF9GQU5PVElGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggMGM1NjU5Yy4uZjAyNjhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtODI1LDYgKzgyNSwxMCBAQAogICovCiAjZGVmaW5lIEZCSU5GT19CRV9NQVRIICAweDEwMDAwMAogCisvKiByZXBvcnQgdG8gdGhlIFZUIGxheWVyIHRoYXQgdGhpcyBmYiBkcml2ZXIgY2FuIGFjY2VwdCBmb3JjZWQgY29uc29sZQorICAgb3V0cHV0IGxpa2Ugb29wc2VzICovCisjZGVmaW5lIEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUICAgICAweDIwMDAwMAorCiBzdHJ1Y3QgZmJfaW5mbyB7CiAJaW50IG5vZGU7CiAJaW50IGZsYWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZHRhYmxlLmggYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAppbmRleCBkMTQ3NDYxLi5mNTllZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZkdGFibGUuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCA2OGY4ODNiLi42OGM2NDJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMzAsMTIgKzMwLDE4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KIAotI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJCTB4MDAKLSNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVNQT05TRQkJCTB4MDEKLSNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVFVRVNUCQkJMHgwMgotI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJCTB4MDMKLSNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVECTB4MDQKLSNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQJMHgwNQorI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJCQkweDAwCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVTUE9OU0UJCQkJMHgwMQorI2RlZmluZSBGV19DREVWX0VWRU5UX1JFUVVFU1QJCQkJMHgwMgorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJCQkweDAzCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRAkJMHgwNAorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAkJMHgwNQorCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjM2ICovCisjZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVRVUVTVDIJCQkJMHgwNgorI2RlZmluZSBGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfU0VOVAkJCTB4MDcKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1JFQ0VJVkVECQkweDA4CisjZGVmaW5lIEZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVF9NVUxUSUNIQU5ORUwJMHgwOQogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiAtIENvbW1vbiBwYXJ0IG9mIGFsbCBmd19jZGV2X2V2ZW50XyB0eXBlcwpAQCAtNjgsNiArNzQsMTAgQEAKICAqIFRoaXMgZXZlbnQgaXMgc2VudCB3aGVuIHRoZSBidXMgdGhlIGRldmljZSBiZWxvbmdzIHRvIGdvZXMgdGhyb3VnaCBhIGJ1cwogICogcmVzZXQuICBJdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbmV3IGJ1cyBjb25maWd1cmF0aW9uLCBzdWNoIGFzCiAgKiBuZXcgbm9kZSBJRCBmb3IgdGhpcyBkZXZpY2UsIG5ldyByb290IElELCBhbmQgb3RoZXJzLgorICoKKyAqIElmIEBibV9ub2RlX2lkIGlzIDB4ZmZmZiByaWdodCBhZnRlciBidXMgcmVzZXQgaXQgY2FuIGJlIHJlcmVhZCBieSBhbgorICogJUZXX0NERVZfSU9DX0dFVF9JTkZPIGlvY3RsIGFmdGVyIGJ1cyBtYW5hZ2VyIHNlbGVjdGlvbiB3YXMgZmluaXNoZWQuCisgKiBLZXJuZWxzIHdpdGggQUJJIHZlcnNpb24gPCA0IGRvIG5vdCBzZXQgQGJtX25vZGVfaWQuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCB7CiAJX191NjQgY2xvc3VyZTsKQEAgLTgyLDggKzkyLDkgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSAtIFNlbnQgd2hlbiBhIHJlc3BvbnNlIHBhY2tldCB3YXMgcmVjZWl2ZWQKLSAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOwotICoJCXNldCBieSAlRldfQ0RFVl9JT0NfU0VORF9SRVFVRVNUIGlvY3RsCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgc2V0IGJ5ICVGV19DREVWX0lPQ19TRU5EX1JFUVVFU1QKKyAqCQlvciAlRldfQ0RFVl9JT0NfU0VORF9CUk9BRENBU1RfUkVRVUVTVAorICoJCW9yICVGV19DREVWX0lPQ19TRU5EX1NUUkVBTV9QQUNLRVQgaW9jdGwKICAqIEB0eXBlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOyBhbHdheXMgJUZXX0NERVZfRVZFTlRfUkVTUE9OU0UKICAqIEByY29kZToJUmVzcG9uc2UgY29kZSByZXR1cm5lZCBieSB0aGUgcmVtb3RlIG5vZGUKICAqIEBsZW5ndGg6CURhdGEgbGVuZ3RoLCBpLmUuIHRoZSByZXNwb25zZSdzIHBheWxvYWQgc2l6ZSBpbiBieXRlcwpAQCAtOTMsNiArMTA0LDExIEBACiAgKiBzZW50IGJ5ICVGV19DREVWX0lPQ19TRU5EX1JFUVVFU1QgaW9jdGwuICBUaGUgcGF5bG9hZCBkYXRhIGZvciByZXNwb25zZXMKICAqIGNhcnJ5aW5nIGRhdGEgKHJlYWQgYW5kIGxvY2sgcmVzcG9uc2VzKSBmb2xsb3dzIGltbWVkaWF0ZWx5IGFuZCBjYW4gYmUKICAqIGFjY2Vzc2VkIHRocm91Z2ggdGhlIEBkYXRhIGZpZWxkLgorICoKKyAqIFRoZSBldmVudCBpcyBhbHNvIGdlbmVyYXRlZCBhZnRlciBjb25jbHVzaW9ucyBvZiB0cmFuc2FjdGlvbnMgdGhhdCBkbyBub3QKKyAqIGludm9sdmUgcmVzcG9uc2UgcGFja2V0cy4gIFRoaXMgaW5jbHVkZXMgdW5pZmllZCB3cml0ZSB0cmFuc2FjdGlvbnMsCisgKiBicm9hZGNhc3Qgd3JpdGUgdHJhbnNhY3Rpb25zLCBhbmQgdHJhbnNtaXNzaW9uIG9mIGFzeW5jaHJvbm91cyBzdHJlYW0KKyAqIHBhY2tldHMuICBAcmNvZGUgaW5kaWNhdGVzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBzdWNoIHRyYW5zbWlzc2lvbnMuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIHsKIAlfX3U2NCBjbG9zdXJlOwpAQCAtMTAzLDExICsxMTksNDYgQEAKIH07CiAKIC8qKgotICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCAtIFNlbnQgb24gaW5jb21pbmcgcmVxdWVzdCB0byBhbiBhZGRyZXNzIHJlZ2lvbgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCAtIE9sZCB2ZXJzaW9uIG9mICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyCiAgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgc2V0IGJ5ICVGV19DREVWX0lPQ19BTExPQ0FURSBpb2N0bAogICogQHR5cGU6CVNlZSAmZndfY2Rldl9ldmVudF9jb21tb247IGFsd2F5cyAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUCisgKiBAdGNvZGU6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICogQG9mZnNldDoJU2VlICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyCisgKiBAaGFuZGxlOglTZWUgJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIKKyAqIEBsZW5ndGg6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICogQGRhdGE6CVNlZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MgorICoKKyAqIFRoaXMgZXZlbnQgaXMgc2VudCBpbnN0ZWFkIG9mICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyIGlmIHRoZSBrZXJuZWwgb3IKKyAqIHRoZSBjbGllbnQgaW1wbGVtZW50cyBBQkkgdmVyc2lvbiA8PSAzLgorICoKKyAqIFVubGlrZSAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MiwgdGhlIHNlbmRlciBpZGVudGl0eSBjYW5ub3QgYmUgZXN0YWJsaXNoZWQsCisgKiBicm9hZGNhc3Qgd3JpdGUgcmVxdWVzdHMgY2Fubm90IGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB1bmljYXN0IHdyaXRlcywgYW5kCisgKiBAdGNvZGUgb2YgbG9jayByZXF1ZXN0cyBpcyAlVENPREVfTE9DS19SRVFVRVNULgorICoKKyAqIFJlcXVlc3RzIHRvIHRoZSBGQ1BfUkVRVUVTVCBvciBGQ1BfUkVTUE9OU0UgcmVnaXN0ZXIgYXJlIHJlc3BvbmRlZCB0byBhcworICogd2l0aCAmZndfY2Rldl9ldmVudF9yZXF1ZXN0MiwgZXhjZXB0IGluIGtlcm5lbCAyLjYuMzIgYW5kIG9sZGVyIHdoaWNoIHNlbmQKKyAqIHRoZSByZXNwb25zZSBwYWNrZXQgb2YgdGhlIGNsaWVudCdzICVGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFIGlvY3RsLgorICovCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgdGNvZGU7CisJX191NjQgb2Zmc2V0OworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBsZW5ndGg7CisJX191MzIgZGF0YVswXTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIgLSBTZW50IG9uIGluY29taW5nIHJlcXVlc3QgdG8gYW4gYWRkcmVzcyByZWdpb24KKyAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOyBzZXQgYnkgJUZXX0NERVZfSU9DX0FMTE9DQVRFIGlvY3RsCisgKiBAdHlwZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgYWx3YXlzICVGV19DREVWX0VWRU5UX1JFUVVFU1QyCiAgKiBAdGNvZGU6CVRyYW5zYWN0aW9uIGNvZGUgb2YgdGhlIGluY29taW5nIHJlcXVlc3QKICAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgaW50byB0aGUgNDgtYml0IHBlci1ub2RlIGFkZHJlc3Mgc3BhY2UKKyAqIEBzb3VyY2Vfbm9kZV9pZDogU2VuZGVyIG5vZGUgSUQKKyAqIEBkZXN0aW5hdGlvbl9ub2RlX2lkOiBEZXN0aW5hdGlvbiBub2RlIElECisgKiBAY2FyZDoJVGhlIGluZGV4IG9mIHRoZSBjYXJkIGZyb20gd2hpY2ggdGhlIHJlcXVlc3QgY2FtZQorICogQGdlbmVyYXRpb246CUJ1cyBnZW5lcmF0aW9uIGluIHdoaWNoIHRoZSByZXF1ZXN0IGlzIHZhbGlkCiAgKiBAaGFuZGxlOglSZWZlcmVuY2UgdG8gdGhlIGtlcm5lbC1zaWRlIHBlbmRpbmcgcmVxdWVzdAogICogQGxlbmd0aDoJRGF0YSBsZW5ndGgsIGkuZS4gdGhlIHJlcXVlc3QncyBwYXlsb2FkIHNpemUgaW4gYnl0ZXMKICAqIEBkYXRhOglJbmNvbWluZyBkYXRhLCBpZiBhbnkKQEAgLTEyMCwxMiArMTcxLDQyIEBACiAgKgogICogVGhlIHBheWxvYWQgZGF0YSBmb3IgcmVxdWVzdHMgY2FycnlpbmcgZGF0YSAod3JpdGUgYW5kIGxvY2sgcmVxdWVzdHMpCiAgKiBmb2xsb3dzIGltbWVkaWF0ZWx5IGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgQGRhdGEgZmllbGQuCisgKgorICogVW5saWtlICZmd19jZGV2X2V2ZW50X3JlcXVlc3QsIEB0Y29kZSBvZiBsb2NrIHJlcXVlc3RzIGlzIG9uZSBvZiB0aGUKKyAqIGZpcmV3aXJlLWNvcmUgc3BlY2lmaWMgJVRDT0RFX0xPQ0tfTUFTS19TV0FQLi4uJVRDT0RFX0xPQ0tfVkVORE9SX0RFUEVOREVOVCwKKyAqIGkuZS4gZW5jb2RlcyB0aGUgZXh0ZW5kZWQgdHJhbnNhY3Rpb24gY29kZS4KKyAqCisgKiBAY2FyZCBtYXkgZGlmZmVyIGZyb20gJmZ3X2NkZXZfZ2V0X2luZm8uY2FyZCBiZWNhdXNlIHJlcXVlc3RzIGFyZSByZWNlaXZlZAorICogZnJvbSBhbGwgY2FyZHMgb2YgdGhlIExpbnV4IGhvc3QuICBAc291cmNlX25vZGVfaWQsIEBkZXN0aW5hdGlvbl9ub2RlX2lkLCBhbmQKKyAqIEBnZW5lcmF0aW9uIHBlcnRhaW4gdG8gdGhhdCBjYXJkLiAgRGVzdGluYXRpb24gbm9kZSBJRCBhbmQgYnVzIGdlbmVyYXRpb24gbWF5CisgKiB0aGVyZWZvcmUgZGlmZmVyIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzIG9mIHRoZSBsYXN0CisgKiAmZndfY2Rldl9ldmVudF9idXNfcmVzZXQuCisgKgorICogQGRlc3RpbmF0aW9uX25vZGVfaWQgbWF5IGFsc28gZGlmZmVyIGZyb20gdGhlIGN1cnJlbnQgbm9kZSBJRCBiZWNhdXNlIG9mIGEKKyAqIG5vbi1sb2NhbCBidXMgSUQgcGFydCBvciBpbiBjYXNlIG9mIGEgYnJvYWRjYXN0IHdyaXRlIHJlcXVlc3QuICBOb3RlLCBhCisgKiBjbGllbnQgbXVzdCBjYWxsIGFuICVGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFIGlvY3RsIGV2ZW4gaW4gY2FzZSBvZiBhCisgKiBicm9hZGNhc3Qgd3JpdGUgcmVxdWVzdDsgdGhlIGtlcm5lbCB3aWxsIHRoZW4gcmVsZWFzZSB0aGUga2VybmVsLXNpZGUgcGVuZGluZworICogcmVxdWVzdCBidXQgd2lsbCBub3QgYWN0dWFsbHkgc2VuZCBhIHJlc3BvbnNlIHBhY2tldC4KKyAqCisgKiBJbiBjYXNlIG9mIGEgd3JpdGUgcmVxdWVzdCB0byBGQ1BfUkVRVUVTVCBvciBGQ1BfUkVTUE9OU0UsIHRoZSBrZXJuZWwgYWxyZWFkeQorICogc2VudCBhIHdyaXRlIHJlc3BvbnNlIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXF1ZXN0IHdhcyByZWNlaXZlZDsgaW4gdGhpcworICogY2FzZSB0aGUgY2xpZW50IG11c3Qgc3RpbGwgY2FsbCBhbiAlRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRSBpb2N0bCB0bworICogcmVsZWFzZSB0aGUga2VybmVsLXNpZGUgcGVuZGluZyByZXF1ZXN0LCB0aG91Z2ggYW5vdGhlciByZXNwb25zZSB3b24ndCBiZQorICogc2VudC4KKyAqCisgKiBJZiB0aGUgY2xpZW50IHN1YnNlcXVlbnRseSBuZWVkcyB0byBpbml0aWF0ZSByZXF1ZXN0cyB0byB0aGUgc2VuZGVyIG5vZGUgb2YKKyAqIGFuICZmd19jZGV2X2V2ZW50X3JlcXVlc3QyLCBpdCBuZWVkcyB0byB1c2UgYSBkZXZpY2UgZmlsZSB3aXRoIG1hdGNoaW5nCisgKiBjYXJkIGluZGV4LCBub2RlIElELCBhbmQgZ2VuZXJhdGlvbiBmb3Igb3V0Ym91bmQgcmVxdWVzdHMuCiAgKi8KLXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3Qgeworc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIgewogCV9fdTY0IGNsb3N1cmU7CiAJX191MzIgdHlwZTsKIAlfX3UzMiB0Y29kZTsKIAlfX3U2NCBvZmZzZXQ7CisJX191MzIgc291cmNlX25vZGVfaWQ7CisJX191MzIgZGVzdGluYXRpb25fbm9kZV9pZDsKKwlfX3UzMiBjYXJkOworCV9fdTMyIGdlbmVyYXRpb247CiAJX191MzIgaGFuZGxlOwogCV9fdTMyIGxlbmd0aDsKIAlfX3UzMiBkYXRhWzBdOwpAQCAtMTQxLDI2ICsyMjIsNDMgQEAKICAqIEBoZWFkZXI6CVN0cmlwcGVkIGhlYWRlcnMsIGlmIGFueQogICoKICAqIFRoaXMgZXZlbnQgaXMgc2VudCB3aGVuIHRoZSBjb250cm9sbGVyIGhhcyBjb21wbGV0ZWQgYW4gJmZ3X2NkZXZfaXNvX3BhY2tldAotICogd2l0aCB0aGUgJUZXX0NERVZfSVNPX0lOVEVSUlVQVCBiaXQgc2V0LiAgSW4gdGhlIHJlY2VpdmUgY2FzZSwgdGhlIGhlYWRlcnMKLSAqIHN0cmlwcGVkIG9mIGFsbCBwYWNrZXRzIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGludGVycnVwdCBwYWNrZXQgYXJlCi0gKiByZXR1cm5lZCBpbiB0aGUgQGhlYWRlciBmaWVsZC4gIFRoZSBhbW91bnQgb2YgaGVhZGVyIGRhdGEgcGVyIHBhY2tldCBpcyBhcwotICogc3BlY2lmaWVkIGF0IGlzbyBjb250ZXh0IGNyZWF0aW9uIGJ5ICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZS4KKyAqIHdpdGggdGhlICVGV19DREVWX0lTT19JTlRFUlJVUFQgYml0IHNldC4KICAqCi0gKiBJbiB2ZXJzaW9uIDEgb2YgdGhpcyBBQkksIGhlYWRlciBkYXRhIGNvbnNpc3RlZCBvZiB0aGUgMTM5NCBpc29jaHJvbm91cwotICogcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgcXVhZGxldHMgZnJvbSB0aGUgcGFja2V0IHBheWxvYWQgaWYKLSAqICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDQuCisgKiBJc29jaHJvbm91cyB0cmFuc21pdCBldmVudHMgKGNvbnRleHQgdHlwZSAlRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVCk6CiAgKgotICogSW4gdmVyc2lvbiAyIG9mIHRoaXMgQUJJLCBoZWFkZXIgZGF0YSBjb25zaXN0IG9mIHRoZSAxMzk0IGlzb2Nocm9ub3VzCi0gKiBwYWNrZXQgaGVhZGVyLCBmb2xsb3dlZCBieSBhIHRpbWVzdGFtcCBxdWFkbGV0IGlmCi0gKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgPiA0LCBmb2xsb3dlZCBieSBxdWFkbGV0cyBmcm9tIHRoZQotICogcGFja2V0IHBheWxvYWQgaWYgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gOC4KKyAqIEluIHZlcnNpb24gMyBhbmQgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdmVyc2lvbiAyIG9mIHRoZSBBQkksICZoZWFkZXJfbGVuZ3RoCisgKiBpcyBhIG11bHRpcGxlIG9mIDQgYW5kICZoZWFkZXIgY29udGFpbnMgdGltZXN0YW1wcyBvZiBhbGwgcGFja2V0cyB1cCB1bnRpbAorICogdGhlIGludGVycnVwdCBwYWNrZXQuICBUaGUgZm9ybWF0IG9mIHRoZSB0aW1lc3RhbXBzIGlzIGFzIGRlc2NyaWJlZCBiZWxvdyBmb3IKKyAqIGlzb2Nocm9ub3VzIHJlY2VwdGlvbi4gIEluIHZlcnNpb24gMSBvZiB0aGUgQUJJLCAmaGVhZGVyX2xlbmd0aCB3YXMgMC4KICAqCisgKiBJc29jaHJvbm91cyByZWNlaXZlIGV2ZW50cyAoY29udGV4dCB0eXBlICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkUpOgorICoKKyAqIFRoZSBoZWFkZXJzIHN0cmlwcGVkIG9mIGFsbCBwYWNrZXRzIHVwIHVudGlsIGFuZCBpbmNsdWRpbmcgdGhlIGludGVycnVwdAorICogcGFja2V0IGFyZSByZXR1cm5lZCBpbiB0aGUgQGhlYWRlciBmaWVsZC4gIFRoZSBhbW91bnQgb2YgaGVhZGVyIGRhdGEgcGVyCisgKiBwYWNrZXQgaXMgYXMgc3BlY2lmaWVkIGF0IGlzbyBjb250ZXh0IGNyZWF0aW9uIGJ5CisgKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUuCisgKgorICogSGVuY2UsIF9pbnRlcnJ1cHQuaGVhZGVyX2xlbmd0aCAvIF9jb250ZXh0LmhlYWRlcl9zaXplIGlzIHRoZSBudW1iZXIgb2YKKyAqIHBhY2tldHMgcmVjZWl2ZWQgaW4gdGhpcyBpbnRlcnJ1cHQgZXZlbnQuICBUaGUgY2xpZW50IGNhbiBub3cgaXRlcmF0ZQorICogdGhyb3VnaCB0aGUgbW1hcCgpJ2VkIERNQSBidWZmZXIgYWNjb3JkaW5nIHRvIHRoaXMgbnVtYmVyIG9mIHBhY2tldHMgYW5kCisgKiB0byB0aGUgYnVmZmVyIHNpemVzIGFzIHRoZSBjbGllbnQgc3BlY2lmaWVkIGluICZmd19jZGV2X3F1ZXVlX2lzby4KKyAqCisgKiBTaW5jZSB2ZXJzaW9uIDIgb2YgdGhpcyBBQkksIHRoZSBwb3J0aW9uIGZvciBlYWNoIHBhY2tldCBpbiBfaW50ZXJydXB0LmhlYWRlcgorICogY29uc2lzdHMgb2YgdGhlIDEzOTQgaXNvY2hyb25vdXMgcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgYSB0aW1lc3RhbXAKKyAqIHF1YWRsZXQgaWYgJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gNCwgZm9sbG93ZWQgYnkgcXVhZGxldHMKKyAqIGZyb20gdGhlIHBhY2tldCBwYXlsb2FkIGlmICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDguCisgKgorICogRm9ybWF0IG9mIDEzOTQgaXNvIHBhY2tldCBoZWFkZXI6ICAxNiBiaXRzIGRhdGFfbGVuZ3RoLCAyIGJpdHMgdGFnLCA2IGJpdHMKKyAqIGNoYW5uZWwsIDQgYml0cyB0Y29kZSwgNCBiaXRzIHN5LCBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuCisgKiBkYXRhX2xlbmd0aCBpcyB0aGUgYWN0dWFsIHJlY2VpdmVkIHNpemUgb2YgdGhlIHBhY2tldCB3aXRob3V0IHRoZSBmb3VyCisgKiAxMzk0IGlzbyBwYWNrZXQgaGVhZGVyIGJ5dGVzLgorICoKKyAqIEZvcm1hdCBvZiB0aW1lc3RhbXA6ICAxNiBiaXRzIGludmFsaWQsIDMgYml0cyBjeWNsZVNlY29uZHMsIDEzIGJpdHMKKyAqIGN5Y2xlQ291bnQsIGluIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci4KKyAqCisgKiBJbiB2ZXJzaW9uIDEgb2YgdGhlIEFCSSwgbm8gdGltZXN0YW1wIHF1YWRsZXQgd2FzIGluc2VydGVkOyBpbnN0ZWFkLCBwYXlsb2FkCisgKiBkYXRhIGZvbGxvd2VkIGRpcmVjdGx5IGFmdGVyIHRoZSAxMzk0IGlzIGhlYWRlciBpZiBoZWFkZXJfc2l6ZSA+IDQuCiAgKiBCZWhhdmlvdXIgb2YgdmVyLiAxIG9mIHRoaXMgQUJJIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgc2luY2UgQUJJIHZlci4gMi4KLSAqCi0gKiBGb3JtYXQgb2YgMTM5NCBpc28gcGFja2V0IGhlYWRlcjogMTYgYml0cyBsZW4sIDIgYml0cyB0YWcsIDYgYml0cyBjaGFubmVsLAotICogNCBiaXRzIHRjb2RlLCA0IGJpdHMgc3ksIGluIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci4gIEZvcm1hdCBvZiB0aW1lc3RhbXA6Ci0gKiAxNiBiaXRzIGludmFsaWQsIDMgYml0cyBjeWNsZVNlY29uZHMsIDEzIGJpdHMgY3ljbGVDb3VudCwgaW4gYmlnIGVuZGlhbiBieXRlCi0gKiBvcmRlci4KICAqLwogc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCB7CiAJX191NjQgY2xvc3VyZTsKQEAgLTE3MSw2ICsyNjksNDMgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdF9tYyAtIEFuIGlzbyBidWZmZXIgY2h1bmsgd2FzIGNvbXBsZXRlZAorICogQGNsb3N1cmU6CVNlZSAmZndfY2Rldl9ldmVudF9jb21tb247CisgKgkJc2V0IGJ5ICVGV19DREVWX0NSRUFURV9JU09fQ09OVEVYVCBpb2N0bAorICogQHR5cGU6CSVGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFRfTVVMVElDSEFOTkVMCisgKiBAY29tcGxldGVkOglPZmZzZXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXI7IGRhdGEgYmVmb3JlIHRoaXMgb2ZmZXN0IGlzIHZhbGlkCisgKgorICogVGhpcyBldmVudCBpcyBzZW50IGluIG11bHRpY2hhbm5lbCBjb250ZXh0cyAoY29udGV4dCB0eXBlCisgKiAlRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTCkgZm9yICZmd19jZGV2X2lzb19wYWNrZXQgYnVmZmVyCisgKiBjaHVua3MgdGhhdCBoYXZlIHRoZSAlRldfQ0RFVl9JU09fSU5URVJSVVBUIGJpdCBzZXQuICBXaGV0aGVyIHRoaXMgaGFwcGVucworICogd2hlbiBhIHBhY2tldCBpcyBjb21wbGV0ZWQgYW5kL29yIHdoZW4gYSBidWZmZXIgY2h1bmsgaXMgY29tcGxldGVkIGRlcGVuZHMKKyAqIG9uIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgYnVmZmVyIGlzIGNvbnRpbnVvdXNseSBmaWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGRhdGEsIHBlciBwYWNrZXQ6CisgKiAgLSB0aGUgMTM5NCBpc28gcGFja2V0IGhlYWRlciBhcyBkZXNjcmliZWQgYXQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCwKKyAqICAgIGJ1dCBpbiBsaXR0bGUgZW5kaWFuIGJ5dGUgb3JkZXIsCisgKiAgLSBwYWNrZXQgcGF5bG9hZCAoYXMgbWFueSBieXRlcyBhcyBzcGVjaWZpZWQgaW4gdGhlIGRhdGFfbGVuZ3RoIGZpZWxkIG9mCisgKiAgICB0aGUgMTM5NCBpc28gcGFja2V0IGhlYWRlcikgaW4gYmlnIGVuZGlhbiBieXRlIG9yZGVyLAorICogIC0gMC4uLjMgcGFkZGluZyBieXRlcyBhcyBuZWVkZWQgdG8gYWxpZ24gdGhlIGZvbGxvd2luZyB0cmFpbGVyIHF1YWRsZXQsCisgKiAgLSB0cmFpbGVyIHF1YWRsZXQsIGNvbnRhaW5pbmcgdGhlIHJlY2VwdGlvbiB0aW1lc3RhbXAgYXMgZGVzY3JpYmVkIGF0CisgKiAgICAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0LCBidXQgaW4gbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLgorICoKKyAqIEhlbmNlIHRoZSBwZXItcGFja2V0IHNpemUgaXMgZGF0YV9sZW5ndGggKHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZSBvZiA0KSArIDguCisgKiBXaGVuIHByb2Nlc3NpbmcgdGhlIGRhdGEsIHN0b3AgYmVmb3JlIGEgcGFja2V0IHRoYXQgd291bGQgY3Jvc3MgdGhlCisgKiBAY29tcGxldGVkIG9mZnNldC4KKyAqCisgKiBBIHBhY2tldCBuZWFyIHRoZSBlbmQgb2YgYSBidWZmZXIgY2h1bmsgd2lsbCB0eXBpY2FsbHkgc3BpbGwgb3ZlciBpbnRvIHRoZQorICogbmV4dCBxdWV1ZWQgYnVmZmVyIGNodW5rLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjbGllbnQgdG8gY2hlY2sKKyAqIGZvciB0aGlzIGNvbmRpdGlvbiwgYXNzZW1ibGUgYSBicm9rZW4tdXAgcGFja2V0IGZyb20gaXRzIHBhcnRzLCBhbmQgbm90IHRvCisgKiByZS1xdWV1ZSBhbnkgYnVmZmVyIGNodW5rcyBpbiB3aGljaCBhcyB5ZXQgdW5yZWFkIHBhY2tldCBwYXJ0cyByZXNpZGUuCisgKi8KK3N0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHRfbWMgeworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgdHlwZTsKKwlfX3UzMiBjb21wbGV0ZWQ7Cit9OworCisvKioKICAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZSAtIElzbyByZXNvdXJjZXMgd2VyZSBhbGxvY2F0ZWQgb3IgZnJlZWQKICAqIEBjbG9zdXJlOglTZWUgJmZ3X2NkZXZfZXZlbnRfY29tbW9uOwogICoJCXNldCBieSAlRldfQ0RFVl9JT0NfKERFKUFMTE9DQVRFX0lTT19SRVNPVVJDRShfT05DRSkgaW9jdGwKQEAgLTIwMCwxNSArMzM1LDQ1IEBACiB9OwogCiAvKioKKyAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X3BoeV9wYWNrZXQgLSBBIFBIWSBwYWNrZXQgd2FzIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsgc2V0IGJ5ICVGV19DREVWX0lPQ19TRU5EX1BIWV9QQUNLRVQKKyAqCQlvciAlRldfQ0RFVl9JT0NfUkVDRUlWRV9QSFlfUEFDS0VUUyBpb2N0bAorICogQHR5cGU6CSVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfU0VOVCBvciAlLi4uX1JFQ0VJVkVECisgKiBAcmNvZGU6CSVSQ09ERV8uLi4sIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdHJhbnNtaXNzaW9uCisgKiBAbGVuZ3RoOglEYXRhIGxlbmd0aCBpbiBieXRlcworICogQGRhdGE6CUluY29taW5nIGRhdGEKKyAqCisgKiBJZiBAdHlwZSBpcyAlRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1NFTlQsIEBsZW5ndGggaXMgMCBhbmQgQGRhdGEgZW1wdHksCisgKiBleGNlcHQgaW4gY2FzZSBvZiBhIHBpbmcgcGFja2V0OiAgVGhlbiwgQGxlbmd0aCBpcyA0LCBhbmQgQGRhdGFbMF0gaXMgdGhlCisgKiBwaW5nIHRpbWUgaW4gNDkuMTUyTUh6IGNsb2NrcyBpZiBAcmNvZGUgaXMgJVJDT0RFX0NPTVBMRVRFLgorICoKKyAqIElmIEB0eXBlIGlzICVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfUkVDRUlWRUQsIEBsZW5ndGggaXMgOCBhbmQgQGRhdGEKKyAqIGNvbnNpc3RzIG9mIHRoZSB0d28gUEhZIHBhY2tldCBxdWFkbGV0cywgaW4gaG9zdCBieXRlIG9yZGVyLgorICovCitzdHJ1Y3QgZndfY2Rldl9ldmVudF9waHlfcGFja2V0IHsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTMyIHR5cGU7CisJX191MzIgcmNvZGU7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGRhdGFbMF07Cit9OworCisvKioKICAqIHVuaW9uIGZ3X2NkZXZfZXZlbnQgLSBDb252ZW5pZW5jZSB1bmlvbiBvZiBmd19jZGV2X2V2ZW50XyB0eXBlcwotICogQGNvbW1vbjogICAgICAgIFZhbGlkIGZvciBhbGwgdHlwZXMKLSAqIEBidXNfcmVzZXQ6ICAgICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfQlVTX1JFU0VUCi0gKiBAcmVzcG9uc2U6ICAgICAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX1JFU1BPTlNFCi0gKiBAcmVxdWVzdDogICAgICAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX1JFUVVFU1QKLSAqIEBpc29faW50ZXJydXB0OiBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVAotICogQGlzb19yZXNvdXJjZTogIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PQorICogQGNvbW1vbjoJCVZhbGlkIGZvciBhbGwgdHlwZXMKKyAqIEBidXNfcmVzZXQ6CQlWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfQlVTX1JFU0VUCisgKiBAcmVzcG9uc2U6CQlWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVTUE9OU0UKKyAqIEByZXF1ZXN0OgkJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09ICVGV19DREVWX0VWRU5UX1JFUVVFU1QKKyAqIEByZXF1ZXN0MjoJCVZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9SRVFVRVNUMgorICogQGlzb19pbnRlcnJ1cHQ6CVZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUCisgKiBAaXNvX2ludGVycnVwdF9tYzoJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUX01VTFRJQ0hBTk5FTAorICogQGlzb19yZXNvdXJjZToJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CiAgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIG9yCiAgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQKKyAqIEBwaHlfcGFja2V0OgkJVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1NFTlQgb3IKKyAqCQkJCSVGV19DREVWX0VWRU5UX1BIWV9QQUNLRVRfUkVDRUlWRUQKICAqCiAgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KICAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKQEAgLTIyMyw4ICszODgsMTEgQEAKIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQJCWJ1c19yZXNldDsKIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZQkJcmVzcG9uc2U7CiAJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdAkJcmVxdWVzdDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0MgkJcmVxdWVzdDI7CQkvKiBhZGRlZCBpbiAyLjYuMzYgKi8KIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0CWlzb19pbnRlcnJ1cHQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX3Jlc291cmNlCWlzb19yZXNvdXJjZTsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0X21jCWlzb19pbnRlcnJ1cHRfbWM7CS8qIGFkZGVkIGluIDIuNi4zNiAqLworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZQlpc29fcmVzb3VyY2U7CQkvKiBhZGRlZCBpbiAyLjYuMzAgKi8KKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9waHlfcGFja2V0CQlwaHlfcGFja2V0OwkJLyogYWRkZWQgaW4gMi42LjM2ICovCiB9OwogCiAvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjIyICovCkBAIC0yNTYsMjMgKzQyNCw0NiBAQAogLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4zNCAqLwogI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIyICAgX0lPV1IoJyMnLCAweDE0LCBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyKQogCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjM2ICovCisjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfUEhZX1BBQ0tFVCAgICBfSU9XUignIycsIDB4MTUsIHN0cnVjdCBmd19jZGV2X3NlbmRfcGh5X3BhY2tldCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfUkVDRUlWRV9QSFlfUEFDS0VUUyBfSU9XKCcjJywgMHgxNiwgc3RydWN0IGZ3X2NkZXZfcmVjZWl2ZV9waHlfcGFja2V0cykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VUX0lTT19DSEFOTkVMUyAgICBfSU9XKCcjJywgMHgxNywgc3RydWN0IGZ3X2NkZXZfc2V0X2lzb19jaGFubmVscykKKwogLyoKLSAqIEZXX0NERVZfVkVSU0lPTiBIaXN0b3J5CisgKiBBQkkgdmVyc2lvbiBoaXN0b3J5CiAgKiAgMSAgKDIuNi4yMikgIC0gaW5pdGlhbCB2ZXJzaW9uCisgKiAgICAgKDIuNi4yNCkgIC0gYWRkZWQgJUZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUgogICogIDIgICgyLjYuMzApICAtIGNoYW5nZWQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC5oZWFkZXIgaWYKICAqICAgICAgICAgICAgICAgICAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgaXMgOCBvciBtb3JlCisgKiAgICAgICAgICAgICAgIC0gYWRkZWQgJUZXX0NERVZfSU9DXypfSVNPX1JFU09VUkNFKiwKKyAqICAgICAgICAgICAgICAgICAlRldfQ0RFVl9JT0NfR0VUX1NQRUVELCAlRldfQ0RFVl9JT0NfU0VORF9CUk9BRENBU1RfUkVRVUVTVCwKKyAqICAgICAgICAgICAgICAgICAlRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUCiAgKiAgICAgKDIuNi4zMikgIC0gYWRkZWQgdGltZSBzdGFtcCB0byB4bWl0ICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQKICAqICAgICAoMi42LjMzKSAgLSBJUiBoYXMgYWx3YXlzIHBhY2tldC1wZXItYnVmZmVyIHNlbWFudGljcyBub3csIG5vdCBvbmUgb2YKICAqICAgICAgICAgICAgICAgICBkdWFsLWJ1ZmZlciBvciBwYWNrZXQtcGVyLWJ1ZmZlciBkZXBlbmRpbmcgb24gaGFyZHdhcmUKKyAqICAgICAgICAgICAgICAgLSBzaGFyZWQgdXNlIGFuZCBhdXRvLXJlc3BvbnNlIGZvciBGQ1AgcmVnaXN0ZXJzCiAgKiAgMyAgKDIuNi4zNCkgIC0gbWFkZSAmZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgcmVsaWFibGUKKyAqICAgICAgICAgICAgICAgLSBhZGRlZCAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSMgorICogIDQgICgyLjYuMzYpICAtIGFkZGVkICVGV19DREVWX0VWRU5UX1JFUVVFU1QyLCAlRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUXyosCisgKiAgICAgICAgICAgICAgICAgYW5kICZmd19jZGV2X2FsbG9jYXRlLnJlZ2lvbl9lbmQKKyAqICAgICAgICAgICAgICAgLSBpbXBsZW1lbnRlZCAmZndfY2Rldl9ldmVudF9idXNfcmVzZXQuYm1fbm9kZV9pZAorICogICAgICAgICAgICAgICAtIGFkZGVkICVGV19DREVWX0lPQ19TRU5EX1BIWV9QQUNLRVQsIF9SRUNFSVZFX1BIWV9QQUNLRVRTCisgKiAgICAgICAgICAgICAgIC0gYWRkZWQgJUZXX0NERVZfRVZFTlRfSVNPX0lOVEVSUlVQVF9NVUxUSUNIQU5ORUwsCisgKiAgICAgICAgICAgICAgICAgJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUwsIGFuZAorICogICAgICAgICAgICAgICAgICVGV19DREVWX0lPQ19TRVRfSVNPX0NIQU5ORUxTCiAgKi8KLSNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OIDMKKyNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OIDMgLyogTWVhbmluZ2xlc3M7IGRvbid0IHVzZSB0aGlzIG1hY3JvLiAqLwogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2dldF9pbmZvIC0gR2VuZXJhbCBwdXJwb3NlIGluZm9ybWF0aW9uIGlvY3RsCi0gKiBAdmVyc2lvbjoJVGhlIHZlcnNpb24gZmllbGQgaXMganVzdCBhIHJ1bm5pbmcgc2VyaWFsIG51bWJlci4KLSAqCQlXZSBuZXZlciBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IG1heSBhZGQgbW9yZQotICoJCXN0cnVjdHMgYW5kIGlvY3RscyBpbiBsYXRlciByZXZpc2lvbnMuCisgKiBAdmVyc2lvbjoJVGhlIHZlcnNpb24gZmllbGQgaXMganVzdCBhIHJ1bm5pbmcgc2VyaWFsIG51bWJlci4gIEJvdGggYW4KKyAqCQlpbnB1dCBwYXJhbWV0ZXIgKEFCSSB2ZXJzaW9uIGltcGxlbWVudGVkIGJ5IHRoZSBjbGllbnQpIGFuZAorICoJCW91dHB1dCBwYXJhbWV0ZXIgKEFCSSB2ZXJzaW9uIGltcGxlbWVudGVkIGJ5IHRoZSBrZXJuZWwpLgorICoJCUEgY2xpZW50IG11c3Qgbm90IGZpbGwgaW4gYW4gJUZXX0NERVZfVkVSU0lPTiBkZWZpbmVkIGZyb20gYW4KKyAqCQlpbmNsdWRlZCBrZXJuZWwgaGVhZGVyIGZpbGUgYnV0IHRoZSBhY3R1YWwgdmVyc2lvbiBmb3Igd2hpY2gKKyAqCQl0aGUgY2xpZW50IHdhcyBpbXBsZW1lbnRlZC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBmb3J3YXJkCisgKgkJY29tcGF0aWJpbGl0eS4gIFdlIG5ldmVyIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQKKyAqCQltYXkgYWRkIG1vcmUgc3RydWN0cywgZXZlbnRzLCBhbmQgaW9jdGxzIGluIGxhdGVyIHJldmlzaW9ucy4KICAqIEByb21fbGVuZ3RoOglJZiBAcm9tIGlzIG5vbi16ZXJvLCBhdCBtb3N0IHJvbV9sZW5ndGggYnl0ZXMgb2YgY29uZmlndXJhdGlvbgogICoJCVJPTSB3aWxsIGJlIGNvcGllZCBpbnRvIHRoYXQgdXNlciBzcGFjZSBhZGRyZXNzLiAgSW4gZWl0aGVyCiAgKgkJY2FzZSwgQHJvbV9sZW5ndGggaXMgdXBkYXRlZCB3aXRoIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZQpAQCAtMzM5LDI4ICs1MzAsNDggQEAKIH07CiAKIC8qKgotICogc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgLSBBbGxvY2F0ZSBhIENTUiBhZGRyZXNzIHJhbmdlCisgKiBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSAtIEFsbG9jYXRlIGEgQ1NSIGluIGFuIGFkZHJlc3MgcmFuZ2UKICAqIEBvZmZzZXQ6CVN0YXJ0IG9mZnNldCBvZiB0aGUgYWRkcmVzcyByYW5nZQogICogQGNsb3N1cmU6CVRvIGJlIHBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiByZXF1ZXN0IGV2ZW50cwotICogQGxlbmd0aDoJTGVuZ3RoIG9mIHRoZSBhZGRyZXNzIHJhbmdlLCBpbiBieXRlcworICogQGxlbmd0aDoJTGVuZ3RoIG9mIHRoZSBDU1IsIGluIGJ5dGVzCiAgKiBAaGFuZGxlOglIYW5kbGUgdG8gdGhlIGFsbG9jYXRpb24sIHdyaXR0ZW4gYnkgdGhlIGtlcm5lbAorICogQHJlZ2lvbl9lbmQ6CUZpcnN0IGFkZHJlc3MgYWJvdmUgdGhlIGFkZHJlc3MgcmFuZ2UgKGFkZGVkIGluIEFCSSB2NCwgMi42LjM2KQogICoKICAqIEFsbG9jYXRlIGFuIGFkZHJlc3MgcmFuZ2UgaW4gdGhlIDQ4LWJpdCBhZGRyZXNzIHNwYWNlIG9uIHRoZSBsb2NhbCBub2RlCiAgKiAodGhlIGNvbnRyb2xsZXIpLiAgVGhpcyBhbGxvd3MgdXNlcnNwYWNlIHRvIGxpc3RlbiBmb3IgcmVxdWVzdHMgd2l0aCBhbgotICogb2Zmc2V0IHdpdGhpbiB0aGF0IGFkZHJlc3MgcmFuZ2UuICBXaGVuIHRoZSBrZXJuZWwgcmVjZWl2ZXMgYSByZXF1ZXN0Ci0gKiB3aXRoaW4gdGhlIHJhbmdlLCBhbiAmZndfY2Rldl9ldmVudF9yZXF1ZXN0IGV2ZW50IHdpbGwgYmUgd3JpdHRlbiBiYWNrLgotICogVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQuCisgKiBvZmZzZXQgd2l0aGluIHRoYXQgYWRkcmVzcyByYW5nZS4gIEV2ZXJ5IHRpbWUgd2hlbiB0aGUga2VybmVsIHJlY2VpdmVzIGEKKyAqIHJlcXVlc3Qgd2l0aGluIHRoZSByYW5nZSwgYW4gJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdDIgZXZlbnQgd2lsbCBiZSBlbWl0dGVkLgorICogKElmIHRoZSBrZXJuZWwgb3IgdGhlIGNsaWVudCBpbXBsZW1lbnRzIEFCSSB2ZXJzaW9uIDw9IDMsIGFuCisgKiAmZndfY2Rldl9ldmVudF9yZXF1ZXN0IHdpbGwgYmUgZ2VuZXJhdGVkIGluc3RlYWQuKQorICoKKyAqIFRoZSBAY2xvc3VyZSBmaWVsZCBpcyBwYXNzZWQgYmFjayB0byB1c2Vyc3BhY2UgaW4gdGhlc2UgcmVxdWVzdCBldmVudHMuCiAgKiBUaGUgQGhhbmRsZSBmaWVsZCBpcyBhbiBvdXQgcGFyYW1ldGVyLCByZXR1cm5pbmcgYSBoYW5kbGUgdG8gdGhlIGFsbG9jYXRlZAogICogcmFuZ2UgdG8gYmUgdXNlZCBmb3IgbGF0ZXIgZGVhbGxvY2F0aW9uIG9mIHRoZSByYW5nZS4KICAqCiAgKiBUaGUgYWRkcmVzcyByYW5nZSBpcyBhbGxvY2F0ZWQgb24gYWxsIGxvY2FsIG5vZGVzLiAgVGhlIGFkZHJlc3MgYWxsb2NhdGlvbgotICogaXMgZXhjbHVzaXZlIGV4Y2VwdCBmb3IgdGhlIEZDUCBjb21tYW5kIGFuZCByZXNwb25zZSByZWdpc3RlcnMuCisgKiBpcyBleGNsdXNpdmUgZXhjZXB0IGZvciB0aGUgRkNQIGNvbW1hbmQgYW5kIHJlc3BvbnNlIHJlZ2lzdGVycy4gIElmIGFuCisgKiBleGNsdXNpdmUgYWRkcmVzcyByZWdpb24gaXMgYWxyZWFkeSBpbiB1c2UsIHRoZSBpb2N0bCBmYWlscyB3aXRoIGVycm5vIHNldAorICogdG8gJUVCVVNZLgorICoKKyAqIElmIGtlcm5lbCBhbmQgY2xpZW50IGltcGxlbWVudCBBQkkgdmVyc2lvbiA+PSA0LCB0aGUga2VybmVsIGxvb2tzIHVwIGEgZnJlZQorICogc3BvdCBvZiBzaXplIEBsZW5ndGggaW5zaWRlIFtAb2Zmc2V0Li5AcmVnaW9uX2VuZCkgYW5kLCBpZiBmb3VuZCwgd3JpdGVzCisgKiB0aGUgc3RhcnQgYWRkcmVzcyBvZiB0aGUgbmV3IENTUiBiYWNrIGluIEBvZmZzZXQuICBJLmUuIEBvZmZzZXQgaXMgYW4KKyAqIGluIGFuZCBvdXQgcGFyYW1ldGVyLiAgSWYgdGhpcyBhdXRvbWF0aWMgcGxhY2VtZW50IG9mIGEgQ1NSIGluIGEgYmlnZ2VyCisgKiBhZGRyZXNzIHJhbmdlIGlzIG5vdCBkZXNpcmVkLCB0aGUgY2xpZW50IHNpbXBseSBuZWVkcyB0byBzZXQgQHJlZ2lvbl9lbmQKKyAqID0gQG9mZnNldCArIEBsZW5ndGguCisgKgorICogSWYgdGhlIGtlcm5lbCBvciB0aGUgY2xpZW50IGltcGxlbWVudHMgQUJJIHZlcnNpb24gPD0gMywgQHJlZ2lvbl9lbmQgaXMKKyAqIGlnbm9yZWQgYW5kIGVmZmVjdGl2ZWx5IGFzc3VtZWQgdG8gYmUgQG9mZnNldCArIEBsZW5ndGguCisgKgorICogQHJlZ2lvbl9lbmQgaXMgb25seSBwcmVzZW50IGluIGEga2VybmVsIGhlYWRlciA+PSAyLjYuMzYuICBJZiBuZWNlc3NhcnksCisgKiB0aGlzIGNhbiBmb3IgZXhhbXBsZSBiZSB0ZXN0ZWQgYnkgI2lmZGVmIEZXX0NERVZfRVZFTlRfUkVRVUVTVDIuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlIHsKIAlfX3U2NCBvZmZzZXQ7CiAJX191NjQgY2xvc3VyZTsKIAlfX3UzMiBsZW5ndGg7CiAJX191MzIgaGFuZGxlOworCV9fdTY0IHJlZ2lvbl9lbmQ7CS8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgKi8KIH07CiAKIC8qKgpAQCAtMzgyLDkgKzU5MywxNCBAQAogICogSW5pdGlhdGUgYSBidXMgcmVzZXQgZm9yIHRoZSBidXMgdGhpcyBkZXZpY2UgaXMgb24uICBUaGUgYnVzIHJlc2V0IGNhbiBiZQogICogZWl0aGVyIHRoZSBvcmlnaW5hbCAobG9uZykgYnVzIHJlc2V0IG9yIHRoZSBhcmJpdHJhdGVkIChzaG9ydCkgYnVzIHJlc2V0CiAgKiBpbnRyb2R1Y2VkIGluIDEzOTRhLTIwMDAuCisgKgorICogVGhlIGlvY3RsIHJldHVybnMgaW1tZWRpYXRlbHkuICBBIHN1YnNlcXVlbnQgJmZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0CisgKiBpbmRpY2F0ZXMgd2hlbiB0aGUgcmVzZXQgYWN0dWFsbHkgaGFwcGVuZWQuICBTaW5jZSBBQkkgdjQsIHRoaXMgbWF5IGJlCisgKiBjb25zaWRlcmFibHkgbGF0ZXIgdGhhbiB0aGUgaW9jdGwgYmVjYXVzZSB0aGUga2VybmVsIGVuc3VyZXMgYSBncmFjZSBwZXJpb2QKKyAqIGJldHdlZW4gc3Vic2VxdWVudCBidXMgcmVzZXRzIGFzIHBlciBJRUVFIDEzOTQgYnVzIG1hbmFnZW1lbnQgc3BlY2lmaWNhdGlvbi4KICAqLwogc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0IHsKLQlfX3UzMiB0eXBlOwkvKiBGV19DREVWX1NIT1JUX1JFU0VUIG9yIEZXX0NERVZfTE9OR19SRVNFVCAqLworCV9fdTMyIHR5cGU7CiB9OwogCiAvKioKQEAgLTQwOCw5ICs2MjQsMTAgQEAKICAqCiAgKiBAaW1tZWRpYXRlLCBAa2V5LCBhbmQgQGRhdGEgYXJyYXkgZWxlbWVudHMgYXJlIENQVS1lbmRpYW4gcXVhZGxldHMuCiAgKgotICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGtlcm5lbCBhZGRzIHRoZSBkZXNjcmlwdG9yIGFuZCB3cml0ZXMgYmFjayBhIGhhbmRsZSB0byB0aGUKLSAqIGtlcm5lbC1zaWRlIG9iamVjdCB0byBiZSB1c2VkIGZvciBsYXRlciByZW1vdmFsIG9mIHRoZSBkZXNjcmlwdG9yIGJsb2NrIGFuZAotICogaW1tZWRpYXRlIGtleS4KKyAqIElmIHN1Y2Nlc3NmdWwsIHRoZSBrZXJuZWwgYWRkcyB0aGUgZGVzY3JpcHRvciBhbmQgd3JpdGVzIGJhY2sgYSBAaGFuZGxlIHRvCisgKiB0aGUga2VybmVsLXNpZGUgb2JqZWN0IHRvIGJlIHVzZWQgZm9yIGxhdGVyIHJlbW92YWwgb2YgdGhlIGRlc2NyaXB0b3IgYmxvY2sKKyAqIGFuZCBpbW1lZGlhdGUga2V5LiAgVGhlIGtlcm5lbCB3aWxsIGFsc28gZ2VuZXJhdGUgYSBidXMgcmVzZXQgdG8gc2lnbmFsIHRoZQorICogY2hhbmdlIG9mIHRoZSBjb25maWd1cmF0aW9uIFJPTSB0byBvdGhlciBub2Rlcy4KICAqCiAgKiBUaGlzIGlvY3RsIGFmZmVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gUk9NcyBvZiBhbGwgbG9jYWwgbm9kZXMuCiAgKiBUaGUgaW9jdGwgb25seSBzdWNjZWVkcyBvbiBkZXZpY2UgZmlsZXMgd2hpY2ggcmVwcmVzZW50IGEgbG9jYWwgbm9kZS4KQEAgLTQyOSwzOCArNjQ2LDUwIEBACiAgKgkJZGVzY3JpcHRvciB3YXMgYWRkZWQKICAqCiAgKiBSZW1vdmUgYSBkZXNjcmlwdG9yIGJsb2NrIGFuZCBhY2NvbXBhbnlpbmcgaW1tZWRpYXRlIGtleSBmcm9tIHRoZSBsb2NhbAotICogbm9kZXMnIGNvbmZpZ3VyYXRpb24gUk9Ncy4KKyAqIG5vZGVzJyBjb25maWd1cmF0aW9uIFJPTXMuICBUaGUga2VybmVsIHdpbGwgYWxzbyBnZW5lcmF0ZSBhIGJ1cyByZXNldCB0bworICogc2lnbmFsIHRoZSBjaGFuZ2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gUk9NIHRvIG90aGVyIG5vZGVzLgogICovCiBzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvciB7CiAJX191MzIgaGFuZGxlOwogfTsKIAotI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX1RSQU5TTUlUCTAKLSNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFCTEKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVAkJCTAKKyNkZWZpbmUgRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFCQkJMQorI2RlZmluZSBGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkVfTVVMVElDSEFOTkVMCTIgLyogYWRkZWQgaW4gMi42LjM2ICovCiAKIC8qKgotICogc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0IC0gQ3JlYXRlIGEgY29udGV4dCBmb3IgaXNvY2hyb25vdXMgSU8KLSAqIEB0eXBlOgklRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVCBvciAlRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFCi0gKiBAaGVhZGVyX3NpemU6IEhlYWRlciBzaXplIHRvIHN0cmlwIGZvciByZWNlaXZlIGNvbnRleHRzCi0gKiBAY2hhbm5lbDoJQ2hhbm5lbCB0byBiaW5kIHRvCi0gKiBAc3BlZWQ6CVNwZWVkIGZvciB0cmFuc21pdCBjb250ZXh0cwotICogQGNsb3N1cmU6CVRvIGJlIHJldHVybmVkIGluICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQKKyAqIHN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCAtIENyZWF0ZSBhIGNvbnRleHQgZm9yIGlzb2Nocm9ub3VzIEkvTworICogQHR5cGU6CSVGV19DREVWX0lTT19DT05URVhUX1RSQU5TTUlUIG9yICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkUgb3IKKyAqCQklRldfQ0RFVl9JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTAorICogQGhlYWRlcl9zaXplOiBIZWFkZXIgc2l6ZSB0byBzdHJpcCBpbiBzaW5nbGUtY2hhbm5lbCByZWNlcHRpb24KKyAqIEBjaGFubmVsOglDaGFubmVsIHRvIGJpbmQgdG8gaW4gc2luZ2xlLWNoYW5uZWwgcmVjZXB0aW9uIG9yIHRyYW5zbWlzc2lvbgorICogQHNwZWVkOglUcmFuc21pc3Npb24gc3BlZWQKKyAqIEBjbG9zdXJlOglUbyBiZSByZXR1cm5lZCBpbiAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IG9yCisgKgkJJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdF9tdWx0aWNoYW5uZWwKICAqIEBoYW5kbGU6CUhhbmRsZSB0byBjb250ZXh0LCB3cml0dGVuIGJhY2sgYnkga2VybmVsCiAgKgogICogUHJpb3IgdG8gc2VuZGluZyBvciByZWNlaXZpbmcgaXNvY2hyb25vdXMgSS9PLCBhIGNvbnRleHQgbXVzdCBiZSBjcmVhdGVkLgogICogVGhlIGNvbnRleHQgcmVjb3JkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJhbnNtaXQgb3IgcmVjZWl2ZSBjb25maWd1cmF0aW9uCiAgKiBhbmQgdHlwaWNhbGx5IG1hcHMgdG8gYW4gdW5kZXJseWluZyBoYXJkd2FyZSByZXNvdXJjZS4gIEEgY29udGV4dCBpcyBzZXQgdXAKICAqIGZvciBlaXRoZXIgc2VuZGluZyBvciByZWNlaXZpbmcuICBJdCBpcyBib3VuZCB0byBhIHNwZWNpZmljIGlzb2Nocm9ub3VzCi0gKiBjaGFubmVsLgorICogQGNoYW5uZWwuCisgKgorICogSW4gY2FzZSBvZiBtdWx0aWNoYW5uZWwgcmVjZXB0aW9uLCBAaGVhZGVyX3NpemUgYW5kIEBjaGFubmVsIGFyZSBpZ25vcmVkCisgKiBhbmQgdGhlIGNoYW5uZWxzIGFyZSBzZWxlY3RlZCBieSAlRldfQ0RFVl9JT0NfU0VUX0lTT19DSEFOTkVMUy4KKyAqCisgKiBGb3IgJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRSBjb250ZXh0cywgQGhlYWRlcl9zaXplIG11c3QgYmUgYXQgbGVhc3QgNAorICogYW5kIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiAgSXQgaXMgaWdub3JlZCBpbiBvdGhlciBjb250ZXh0IHR5cGVzLgorICoKKyAqIEBzcGVlZCBpcyBpZ25vcmVkIGluIHJlY2VpdmUgY29udGV4dCB0eXBlcy4KICAqCiAgKiBJZiBhIGNvbnRleHQgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLCB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGEgaGFuZGxlIHRvIHRoZQogICogY29udGV4dCwgd2hpY2ggbXVzdCBiZSBwYXNzZWQgaW4gZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGF0IGNvbnRleHQuCiAgKgotICogRm9yIHJlY2VpdmUgY29udGV4dHMsIEBoZWFkZXJfc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDQgYW5kIG11c3QgYmUgYSBtdWx0aXBsZQotICogb2YgNC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGVmZmVjdCBvZiBhIEBoZWFkZXJfc2l6ZSA+IDQgZGVwZW5kcyBvbgotICogJmZ3X2NkZXZfZ2V0X2luZm8udmVyc2lvbiwgYXMgZG9jdW1lbnRlZCBhdCAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0LgorICogTGltaXRhdGlvbnM6CisgKiBObyBtb3JlIHRoYW4gb25lIGlzbyBjb250ZXh0IGNhbiBiZSBjcmVhdGVkIHBlciBmZC4KKyAqIFRoZSB0b3RhbCBudW1iZXIgb2YgY29udGV4dHMgdGhhdCBhbGwgdXNlcnNwYWNlIGFuZCBrZXJuZWxzcGFjZSBkcml2ZXJzIGNhbgorICogY3JlYXRlIG9uIGEgY2FyZCBhdCBhIHRpbWUgaXMgYSBoYXJkd2FyZSBsaW1pdCwgdHlwaWNhbGx5IDQgb3IgOCBjb250ZXh0cyBwZXIKKyAqIGRpcmVjdGlvbiwgYW5kIG9mIHRoZW0gYXQgbW9zdCBvbmUgbXVsdGljaGFubmVsIHJlY2VpdmUgY29udGV4dC4KICAqLwogc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0IHsKIAlfX3UzMiB0eXBlOwpAQCAtNDcxLDYgKzcwMCwyMiBAQAogCV9fdTMyIGhhbmRsZTsKIH07CiAKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2V0X2lzb19jaGFubmVscyAtIFNlbGVjdCBjaGFubmVscyBpbiBtdWx0aWNoYW5uZWwgcmVjZXB0aW9uCisgKiBAY2hhbm5lbHM6CUJpdG1hc2sgb2YgY2hhbm5lbHMgdG8gbGlzdGVuIHRvCisgKiBAaGFuZGxlOglIYW5kbGUgb2YgdGhlIG11dGljaGFubmVsIHJlY2VpdmUgY29udGV4dAorICoKKyAqIEBjaGFubmVscyBpcyB0aGUgYml0d2lzZSBvciBvZiAxVUxMIDw8IG4gZm9yIGVhY2ggY2hhbm5lbCBuIHRvIGxpc3RlbiB0by4KKyAqCisgKiBUaGUgaW9jdGwgZmFpbHMgd2l0aCBlcnJubyAlRUJVU1kgaWYgdGhlcmUgaXMgYWxyZWFkeSBhbm90aGVyIHJlY2VpdmUgY29udGV4dAorICogb24gYSBjaGFubmVsIGluIEBjaGFubmVscy4gIEluIHRoYXQgY2FzZSwgdGhlIGJpdG1hc2sgb2YgYWxsIHVub2NjdXBpZWQKKyAqIGNoYW5uZWxzIGlzIHJldHVybmVkIGluIEBjaGFubmVscy4KKyAqLworc3RydWN0IGZ3X2NkZXZfc2V0X2lzb19jaGFubmVscyB7CisJX191NjQgY2hhbm5lbHM7CisJX191MzIgaGFuZGxlOworfTsKKwogI2RlZmluZSBGV19DREVWX0lTT19QQVlMT0FEX0xFTkdUSCh2KQkodikKICNkZWZpbmUgRldfQ0RFVl9JU09fSU5URVJSVVBUCQkoMSA8PCAxNikKICNkZWZpbmUgRldfQ0RFVl9JU09fU0tJUAkJKDEgPDwgMTcpCkBAIC00ODEsNDIgKzcyNiw3MiBAQAogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgLSBJc29jaHJvbm91cyBwYWNrZXQKLSAqIEBjb250cm9sOglDb250YWlucyB0aGUgaGVhZGVyIGxlbmd0aCAoOCB1cHBlcm1vc3QgYml0cyksIHRoZSBzeSBmaWVsZAotICoJCSg0IGJpdHMpLCB0aGUgdGFnIGZpZWxkICgyIGJpdHMpLCBhIHN5bmMgZmxhZyAoMSBiaXQpLAotICoJCWEgc2tpcCBmbGFnICgxIGJpdCksIGFuIGludGVycnVwdCBmbGFnICgxIGJpdCksIGFuZCB0aGUKKyAqIEBjb250cm9sOglDb250YWlucyB0aGUgaGVhZGVyIGxlbmd0aCAoOCB1cHBlcm1vc3QgYml0cyksCisgKgkJdGhlIHN5IGZpZWxkICg0IGJpdHMpLCB0aGUgdGFnIGZpZWxkICgyIGJpdHMpLCBhIHN5bmMgZmxhZworICoJCW9yIGEgc2tpcCBmbGFnICgxIGJpdCksIGFuIGludGVycnVwdCBmbGFnICgxIGJpdCksIGFuZCB0aGUKICAqCQlwYXlsb2FkIGxlbmd0aCAoMTYgbG93ZXJtb3N0IGJpdHMpCi0gKiBAaGVhZGVyOglIZWFkZXIgYW5kIHBheWxvYWQKKyAqIEBoZWFkZXI6CUhlYWRlciBhbmQgcGF5bG9hZCBpbiBjYXNlIG9mIGEgdHJhbnNtaXQgY29udGV4dC4KICAqCiAgKiAmc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCBpcyB1c2VkIHRvIGRlc2NyaWJlIGlzb2Nocm9ub3VzIHBhY2tldCBxdWV1ZXMuCi0gKgogICogVXNlIHRoZSBGV19DREVWX0lTT18gbWFjcm9zIHRvIGZpbGwgaW4gQGNvbnRyb2wuCisgKiBUaGUgQGhlYWRlciBhcnJheSBpcyBlbXB0eSBpbiBjYXNlIG9mIHJlY2VpdmUgY29udGV4dHMuCiAgKgotICogRm9yIHRyYW5zbWl0IHBhY2tldHMsIHRoZSBoZWFkZXIgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGFuZCBzcGVjaWZpZXMKLSAqIHRoZSBudW1iZXJzIG9mIGJ5dGVzIGluIEBoZWFkZXIgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcGFja2V0J3MKLSAqIHBheWxvYWQ7IHRoZXNlIGJ5dGVzIGFyZSBjb3BpZWQgaW50byB0aGUga2VybmVsIGFuZCB3aWxsIG5vdCBiZSBhY2Nlc3NlZAotICogYWZ0ZXIgdGhlIGlvY3RsIGhhcyByZXR1cm5lZC4gIFRoZSBzeSBhbmQgdGFnIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBpc28KLSAqIHBhY2tldCBoZWFkZXIgKHRoZXNlIGZpZWxkcyBhcmUgc3BlY2lmaWVkIGJ5IElFRUUgMTM5NGEgYW5kIElFQyA2MTg4My0xKS4KLSAqIFRoZSBza2lwIGZsYWcgc3BlY2lmaWVzIHRoYXQgbm8gcGFja2V0IGlzIHRvIGJlIHNlbnQgaW4gYSBmcmFtZTsgd2hlbiB1c2luZwotICogdGhpcywgYWxsIG90aGVyIGZpZWxkcyBleGNlcHQgdGhlIGludGVycnVwdCBmbGFnIG11c3QgYmUgemVyby4KKyAqIENvbnRleHQgdHlwZSAlRldfQ0RFVl9JU09fQ09OVEVYVF9UUkFOU01JVDoKICAqCi0gKiBGb3IgcmVjZWl2ZSBwYWNrZXRzLCB0aGUgaGVhZGVyIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGNvbnRleHQncwotICogaGVhZGVyIHNpemU7IGlmIHRoZSBoZWFkZXIgbGVuZ3RoIGlzIGxhcmdlciB0aGFuIHRoZSBjb250ZXh0J3MgaGVhZGVyIHNpemUsCi0gKiBtdWx0aXBsZSBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHRoaXMgZW50cnkuICBUaGUgc3kgYW5kIHRhZyBmaWVsZHMgYXJlCi0gKiBpZ25vcmVkLiAgSWYgdGhlIHN5bmMgZmxhZyBpcyBzZXQsIHRoZSBjb250ZXh0IGRyb3BzIGFsbCBwYWNrZXRzIHVudGlsCi0gKiBhIHBhY2tldCB3aXRoIGEgbWF0Y2hpbmcgc3kgZmllbGQgaXMgcmVjZWl2ZWQgKHRoZSBzeW5jIHZhbHVlIHRvIHdhaXQgZm9yIGlzCi0gKiBzcGVjaWZpZWQgaW4gdGhlICZmd19jZGV2X3N0YXJ0X2lzbyBzdHJ1Y3R1cmUpLiAgVGhlIHBheWxvYWQgbGVuZ3RoIGRlZmluZXMKLSAqIGhvdyBtYW55IHBheWxvYWQgYnl0ZXMgY2FuIGJlIHJlY2VpdmVkIGZvciBvbmUgcGFja2V0IChpbiBhZGRpdGlvbiB0byBwYXlsb2FkCi0gKiBxdWFkbGV0cyB0aGF0IGhhdmUgYmVlbiBkZWZpbmVkIGFzIGhlYWRlcnMgYW5kIGFyZSBzdHJpcHBlZCBhbmQgcmV0dXJuZWQgaW4KLSAqIHRoZSAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IHN0cnVjdHVyZSkuICBJZiBtb3JlIGJ5dGVzIGFyZSByZWNlaXZlZCwgdGhlCi0gKiBhZGRpdGlvbmFsIGJ5dGVzIGFyZSBkcm9wcGVkLiAgSWYgbGVzcyBieXRlcyBhcmUgcmVjZWl2ZWQsIHRoZSByZW1haW5pbmcKLSAqIGJ5dGVzIGluIHRoaXMgcGFydCBvZiB0aGUgcGF5bG9hZCBidWZmZXIgd2lsbCBub3QgYmUgd3JpdHRlbiB0bywgbm90IGV2ZW4gYnkKLSAqIHRoZSBuZXh0IHBhY2tldCwgaS5lLiwgcGFja2V0cyByZWNlaXZlZCBpbiBjb25zZWN1dGl2ZSBmcmFtZXMgd2lsbCBub3QKLSAqIG5lY2Vzc2FyaWx5IGJlIGNvbnNlY3V0aXZlIGluIG1lbW9yeS4gIElmIGFuIGVudHJ5IGhhcyBxdWV1ZWQgbXVsdGlwbGUKLSAqIHBhY2tldHMsIHRoZSBwYXlsb2FkIGxlbmd0aCBpcyBkaXZpZGVkIGVxdWFsbHkgYW1vbmcgdGhlbS4KKyAqIEBjb250cm9sLkhFQURFUl9MRU5HVEggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuICBJdCBzcGVjaWZpZXMgdGhlIG51bWJlcnMgb2YKKyAqIGJ5dGVzIGluIEBoZWFkZXIgdGhhdCB3aWxsIGJlIHByZXBlbmRlZCB0byB0aGUgcGFja2V0J3MgcGF5bG9hZC4gIFRoZXNlIGJ5dGVzCisgKiBhcmUgY29waWVkIGludG8gdGhlIGtlcm5lbCBhbmQgd2lsbCBub3QgYmUgYWNjZXNzZWQgYWZ0ZXIgdGhlIGlvY3RsIGhhcworICogcmV0dXJuZWQuCiAgKgotICogV2hlbiBhIHBhY2tldCB3aXRoIHRoZSBpbnRlcnJ1cHQgZmxhZyBzZXQgaGFzIGJlZW4gY29tcGxldGVkLCB0aGUKKyAqIFRoZSBAY29udHJvbC5TWSBhbmQgVEFHIGZpZWxkcyBhcmUgY29waWVkIHRvIHRoZSBpc28gcGFja2V0IGhlYWRlci4gIFRoZXNlCisgKiBmaWVsZHMgYXJlIHNwZWNpZmllZCBieSBJRUVFIDEzOTRhIGFuZCBJRUMgNjE4ODMtMS4KKyAqCisgKiBUaGUgQGNvbnRyb2wuU0tJUCBmbGFnIHNwZWNpZmllcyB0aGF0IG5vIHBhY2tldCBpcyB0byBiZSBzZW50IGluIGEgZnJhbWUuCisgKiBXaGVuIHVzaW5nIHRoaXMsIGFsbCBvdGhlciBmaWVsZHMgZXhjZXB0IEBjb250cm9sLklOVEVSUlVQVCBtdXN0IGJlIHplcm8uCisgKgorICogV2hlbiBhIHBhY2tldCB3aXRoIHRoZSBAY29udHJvbC5JTlRFUlJVUFQgZmxhZyBzZXQgaGFzIGJlZW4gY29tcGxldGVkLCBhbgorICogJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBldmVudCB3aWxsIGJlIHNlbnQuCisgKgorICogQ29udGV4dCB0eXBlICVGV19DREVWX0lTT19DT05URVhUX1JFQ0VJVkU6CisgKgorICogQGNvbnRyb2wuSEVBREVSX0xFTkdUSCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGNvbnRleHQncyBoZWFkZXJfc2l6ZS4KKyAqIElmIHRoZSBIRUFERVJfTEVOR1RIIGlzIGxhcmdlciB0aGFuIHRoZSBjb250ZXh0J3MgaGVhZGVyX3NpemUsIG11bHRpcGxlCisgKiBwYWNrZXRzIGFyZSBxdWV1ZWQgZm9yIHRoaXMgZW50cnkuCisgKgorICogVGhlIEBjb250cm9sLlNZIGFuZCBUQUcgZmllbGRzIGFyZSBpZ25vcmVkLgorICoKKyAqIElmIHRoZSBAY29udHJvbC5TWU5DIGZsYWcgaXMgc2V0LCB0aGUgY29udGV4dCBkcm9wcyBhbGwgcGFja2V0cyB1bnRpbCBhCisgKiBwYWNrZXQgd2l0aCBhIHN5IGZpZWxkIGlzIHJlY2VpdmVkIHdoaWNoIG1hdGNoZXMgJmZ3X2NkZXZfc3RhcnRfaXNvLnN5bmMuCisgKgorICogQGNvbnRyb2wuUEFZTE9BRF9MRU5HVEggZGVmaW5lcyBob3cgbWFueSBwYXlsb2FkIGJ5dGVzIGNhbiBiZSByZWNlaXZlZCBmb3IKKyAqIG9uZSBwYWNrZXQgKGluIGFkZGl0aW9uIHRvIHBheWxvYWQgcXVhZGxldHMgdGhhdCBoYXZlIGJlZW4gZGVmaW5lZCBhcyBoZWFkZXJzCisgKiBhbmQgYXJlIHN0cmlwcGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBzdHJ1Y3R1cmUpLgorICogSWYgbW9yZSBieXRlcyBhcmUgcmVjZWl2ZWQsIHRoZSBhZGRpdGlvbmFsIGJ5dGVzIGFyZSBkcm9wcGVkLiAgSWYgbGVzcyBieXRlcworICogYXJlIHJlY2VpdmVkLCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFydCBvZiB0aGUgcGF5bG9hZCBidWZmZXIgd2lsbCBub3QKKyAqIGJlIHdyaXR0ZW4gdG8sIG5vdCBldmVuIGJ5IHRoZSBuZXh0IHBhY2tldC4gIEkuZS4sIHBhY2tldHMgcmVjZWl2ZWQgaW4KKyAqIGNvbnNlY3V0aXZlIGZyYW1lcyB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBjb25zZWN1dGl2ZSBpbiBtZW1vcnkuICBJZiBhbgorICogZW50cnkgaGFzIHF1ZXVlZCBtdWx0aXBsZSBwYWNrZXRzLCB0aGUgUEFZTE9BRF9MRU5HVEggaXMgZGl2aWRlZCBlcXVhbGx5CisgKiBhbW9uZyB0aGVtLgorICoKKyAqIFdoZW4gYSBwYWNrZXQgd2l0aCB0aGUgQGNvbnRyb2wuSU5URVJSVVBUIGZsYWcgc2V0IGhhcyBiZWVuIGNvbXBsZXRlZCwgYW4KICAqICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgZXZlbnQgd2lsbCBiZSBzZW50LiAgQW4gZW50cnkgdGhhdCBoYXMgcXVldWVkCiAgKiBtdWx0aXBsZSByZWNlaXZlIHBhY2tldHMgaXMgY29tcGxldGVkIHdoZW4gaXRzIGxhc3QgcGFja2V0IGlzIGNvbXBsZXRlZC4KKyAqCisgKiBDb250ZXh0IHR5cGUgJUZXX0NERVZfSVNPX0NPTlRFWFRfUkVDRUlWRV9NVUxUSUNIQU5ORUw6CisgKgorICogSGVyZSwgJmZ3X2NkZXZfaXNvX3BhY2tldCB3b3VsZCBiZSBtb3JlIGFwdGx5IG5hbWVkIF9pc29fYnVmZmVyX2NodW5rIHNpbmNlCisgKiBpdCBzcGVjaWZpZXMgYSBjaHVuayBvZiB0aGUgbW1hcCgpJ2VkIGJ1ZmZlciwgd2hpbGUgdGhlIG51bWJlciBhbmQgYWxpZ25tZW50CisgKiBvZiBwYWNrZXRzIHRvIGJlIHBsYWNlZCBpbnRvIHRoZSBidWZmZXIgY2h1bmsgaXMgbm90IGtub3duIGJlZm9yZWhhbmQuCisgKgorICogQGNvbnRyb2wuUEFZTE9BRF9MRU5HVEggaXMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjaHVuayBhbmQgc3BlY2lmaWVzIHJvb20KKyAqIGZvciBoZWFkZXIsIHBheWxvYWQsIHBhZGRpbmcsIGFuZCB0cmFpbGVyIGJ5dGVzIG9mIG9uZSBvciBtb3JlIHBhY2tldHMuCisgKiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KKyAqCisgKiBAY29udHJvbC5IRUFERVJfTEVOR1RILCBUQUcgYW5kIFNZIGFyZSBpZ25vcmVkLiAgU1lOQyBpcyB0cmVhdGVkIGFzIGRlc2NyaWJlZAorICogZm9yIHNpbmdsZS1jaGFubmVsIHJlY2VwdGlvbi4KKyAqCisgKiBXaGVuIGEgYnVmZmVyIGNodW5rIHdpdGggdGhlIEBjb250cm9sLklOVEVSUlVQVCBmbGFnIHNldCBoYXMgYmVlbiBmaWxsZWQKKyAqIGVudGlyZWx5LCBhbiAmZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0X21jIGV2ZW50IHdpbGwgYmUgc2VudC4KICAqLwogc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCB7CiAJX191MzIgY29udHJvbDsKQEAgLTUyNSw5ICs4MDAsOSBAQAogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbyAtIFF1ZXVlIGlzb2Nocm9ub3VzIHBhY2tldHMgZm9yIEkvTwotICogQHBhY2tldHM6CVVzZXJzcGFjZSBwb2ludGVyIHRvIHBhY2tldCBkYXRhCisgKiBAcGFja2V0czoJVXNlcnNwYWNlIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgJmZ3X2NkZXZfaXNvX3BhY2tldAogICogQGRhdGE6CVBvaW50ZXIgaW50byBtbWFwKCknZWQgcGF5bG9hZCBidWZmZXIKLSAqIEBzaXplOglTaXplIG9mIHBhY2tldCBkYXRhIGluIGJ5dGVzCisgKiBAc2l6ZToJU2l6ZSBvZiB0aGUgQHBhY2tldHMgYXJyYXksIGluIGJ5dGVzCiAgKiBAaGFuZGxlOglJc29jaHJvbm91cyBjb250ZXh0IGhhbmRsZQogICoKICAqIFF1ZXVlIGEgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBhY2tldHMgZm9yIHJlY2VwdGlvbiBvciB0cmFuc21pc3Npb24uCkBAIC01NDAsNiArODE1LDkgQEAKICAqIFRoZSBrZXJuZWwgbWF5IG9yIG1heSBub3QgcXVldWUgYWxsIHBhY2tldHMsIGJ1dCB3aWxsIHdyaXRlIGJhY2sgdXBkYXRlZAogICogdmFsdWVzIG9mIHRoZSBAcGFja2V0cywgQGRhdGEgYW5kIEBzaXplIGZpZWxkcywgc28gdGhlIGlvY3RsIGNhbiBiZQogICogcmVzdWJtaXR0ZWQgZWFzaWx5LgorICoKKyAqIEluIGNhc2Ugb2YgYSBtdWx0aWNoYW5uZWwgcmVjZWl2ZSBjb250ZXh0LCBAZGF0YSBtdXN0IGJlIHF1YWRsZXQtYWxpZ25lZAorICogcmVsYXRpdmUgdG8gdGhlIGJ1ZmZlciBzdGFydC4KICAqLwogc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvIHsKIAlfX3U2NCBwYWNrZXRzOwpAQCAtNjk4LDQgKzk3NiwzOSBAQAogCV9fdTMyIHNwZWVkOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9zZW5kX3BoeV9wYWNrZXQgLSBzZW5kIGEgUEhZIHBhY2tldAorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgUEhZLXBhY2tldC1zZW50IGV2ZW50CisgKiBAZGF0YToJRmlyc3QgYW5kIHNlY29uZCBxdWFkbGV0IG9mIHRoZSBQSFkgcGFja2V0CisgKiBAZ2VuZXJhdGlvbjoJVGhlIGJ1cyBnZW5lcmF0aW9uIHdoZXJlIHBhY2tldCBpcyB2YWxpZAorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfU0VORF9QSFlfUEFDS0VUIGlvY3RsIHNlbmRzIGEgUEhZIHBhY2tldCB0byBhbGwgbm9kZXMKKyAqIG9uIHRoZSBzYW1lIGNhcmQgYXMgdGhpcyBkZXZpY2UuICBBZnRlciB0cmFuc21pc3Npb24sIGFuCisgKiAlRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1NFTlQgZXZlbnQgaXMgZ2VuZXJhdGVkLgorICoKKyAqIFRoZSBwYXlsb2FkIEBkYXRhW10gc2hhbGwgYmUgc3BlY2lmaWVkIGluIGhvc3QgYnl0ZSBvcmRlci4gIFVzdWFsbHksCisgKiBAZGF0YVsxXSBuZWVkcyB0byBiZSB0aGUgYml0d2lzZSBpbnZlcnNlIG9mIEBkYXRhWzBdLiAgVmVyc2FQSFkgcGFja2V0cworICogYXJlIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUuCisgKgorICogVGhlIGlvY3RsIGlzIG9ubHkgcGVybWl0dGVkIG9uIGRldmljZSBmaWxlcyB3aGljaCByZXByZXNlbnQgYSBsb2NhbCBub2RlLgorICovCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3BoeV9wYWNrZXQgeworCV9fdTY0IGNsb3N1cmU7CisJX191MzIgZGF0YVsyXTsKKwlfX3UzMiBnZW5lcmF0aW9uOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9yZWNlaXZlX3BoeV9wYWNrZXRzIC0gc3RhcnQgcmVjZXB0aW9uIG9mIFBIWSBwYWNrZXRzCisgKiBAY2xvc3VyZTogUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIHBoeSBwYWNrZXQgZXZlbnRzCisgKgorICogVGhpcyBpb2N0bCBhY3RpdmF0ZXMgaXNzdWluZyBvZiAlRldfQ0RFVl9FVkVOVF9QSFlfUEFDS0VUX1JFQ0VJVkVEIGR1ZSB0bworICogaW5jb21pbmcgUEhZIHBhY2tldHMgZnJvbSBhbnkgbm9kZSBvbiB0aGUgc2FtZSBidXMgYXMgdGhlIGRldmljZS4KKyAqCisgKiBUaGUgaW9jdGwgaXMgb25seSBwZXJtaXR0ZWQgb24gZGV2aWNlIGZpbGVzIHdoaWNoIHJlcHJlc2VudCBhIGxvY2FsIG5vZGUuCisgKi8KK3N0cnVjdCBmd19jZGV2X3JlY2VpdmVfcGh5X3BhY2tldHMgeworCV9fdTY0IGNsb3N1cmU7Cit9OworCiAjZW5kaWYgLyogX0xJTlVYX0ZJUkVXSVJFX0NERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCmluZGV4IDcyZTJiOGEuLjFjZDYzN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKQEAgLTMyLDExICszMiwxMyBAQAogI2RlZmluZSBDU1JfQ1lDTEVfVElNRQkJCTB4MjAwCiAjZGVmaW5lIENTUl9CVVNfVElNRQkJCTB4MjA0CiAjZGVmaW5lIENTUl9CVVNZX1RJTUVPVVQJCTB4MjEwCisjZGVmaW5lIENTUl9QUklPUklUWV9CVURHRVQJCTB4MjE4CiAjZGVmaW5lIENTUl9CVVNfTUFOQUdFUl9JRAkJMHgyMWMKICNkZWZpbmUgQ1NSX0JBTkRXSURUSF9BVkFJTEFCTEUJCTB4MjIwCiAjZGVmaW5lIENTUl9DSEFOTkVMU19BVkFJTEFCTEUJCTB4MjI0CiAjZGVmaW5lIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfSEkJMHgyMjQKICNkZWZpbmUgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9MTwkweDIyOAorI2RlZmluZSBDU1JfTUFJTlRfVVRJTElUWQkJMHgyMzAKICNkZWZpbmUgQ1NSX0JST0FEQ0FTVF9DSEFOTkVMCQkweDIzNAogI2RlZmluZSBDU1JfQ09ORklHX1JPTQkJCTB4NDAwCiAjZGVmaW5lIENTUl9DT05GSUdfUk9NX0VORAkJMHg4MDAKQEAgLTg5LDYgKzkxLDExIEBACiAJc3RydWN0IGxpc3RfaGVhZCB0cmFuc2FjdGlvbl9saXN0OwogCXVuc2lnbmVkIGxvbmcgcmVzZXRfamlmZmllczsKIAorCXUzMiBzcGxpdF90aW1lb3V0X2hpOworCXUzMiBzcGxpdF90aW1lb3V0X2xvOworCXVuc2lnbmVkIGludCBzcGxpdF90aW1lb3V0X2N5Y2xlczsKKwl1bnNpZ25lZCBpbnQgc3BsaXRfdGltZW91dF9qaWZmaWVzOworCiAJdW5zaWduZWQgbG9uZyBsb25nIGd1aWQ7CiAJdW5zaWduZWQgbWF4X3JlY2VpdmU7CiAJaW50IGxpbmtfc3BlZWQ7CkBAIC0xMDQsMTggKzExMSwyOCBAQAogCWJvb2wgYmV0YV9yZXBlYXRlcnNfcHJlc2VudDsKIAogCWludCBpbmRleDsKLQogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKIAotCS8qIFdvcmsgc3RydWN0IGZvciBCTSBkdXRpZXMuICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOworCXN0cnVjdCBsaXN0X2hlYWQgcGh5X3JlY2VpdmVyX2xpc3Q7CisKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGJyX3dvcms7IC8qIGJ1cyByZXNldCBqb2IgKi8KKwlib29sIGJyX3Nob3J0OworCisJc3RydWN0IGRlbGF5ZWRfd29yayBibV93b3JrOyAvKiBidXMgbWFuYWdlciBqb2IgKi8KIAlpbnQgYm1fcmV0cmllczsKIAlpbnQgYm1fZ2VuZXJhdGlvbjsKIAlfX2JlMzIgYm1fdHJhbnNhY3Rpb25fZGF0YVsyXTsKKwlpbnQgYm1fbm9kZV9pZDsKKwlib29sIGJtX2FiZGljYXRlOworCisJYm9vbCBwcmlvcml0eV9idWRnZXRfaW1wbGVtZW50ZWQ7CS8qIGNvbnRyb2xsZXIgZmVhdHVyZSAqLworCWJvb2wgYnJvYWRjYXN0X2NoYW5uZWxfYXV0b19hbGxvY2F0ZWQ7CS8qIGNvbnRyb2xsZXIgZmVhdHVyZSAqLwogCiAJYm9vbCBicm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQ7CiAJdTMyIGJyb2FkY2FzdF9jaGFubmVsOwogCV9fYmUzMiB0b3BvbG9neV9tYXBbKENTUl9UT1BPTE9HWV9NQVBfRU5EIC0gQ1NSX1RPUE9MT0dZX01BUCkgLyA0XTsKKworCV9fYmUzMiBtYWludF91dGlsaXR5X3JlZ2lzdGVyOwogfTsKIAogc3RydWN0IGZ3X2F0dHJpYnV0ZV9ncm91cCB7CkBAIC0yNTIsNyArMjY5LDcgQEAKIHR5cGVkZWYgdm9pZCAoKmZ3X2FkZHJlc3NfY2FsbGJhY2tfdCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCiAJCQkJICAgICAgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCiAJCQkJICAgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCi0JCQkJICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKKwkJCQkgICAgICBpbnQgZ2VuZXJhdGlvbiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAogCQkJCSAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCiAJCQkJICAgICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CkBAIC0yNjksMTAgKzI4NiwxMCBAQAogCXUzMiB0aW1lc3RhbXA7CiAKIAkvKgotCSAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHBhY2tldCB0cmFuc21pc3Npb24gaGFzCi0JICogY29tcGxldGVkOyBmb3Igc3VjY2Vzc2Z1bCB0cmFuc21pc3Npb24sIHRoZSBzdGF0dXMgY29kZSBpcwotCSAqIHRoZSBhY2sgcmVjZWl2ZWQgZnJvbSB0aGUgZGVzdGluYXRpb24sIG90aGVyd2lzZSBpdCdzIGEKLQkgKiBuZWdhdGl2ZSBlcnJubzogRU5PTUVNLCBFU1RBTEUsIEVUSU1FRE9VVCwgRU5PREVWLCBFSU8uCisJICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcGFja2V0IHRyYW5zbWlzc2lvbiBoYXMgY29tcGxldGVkLgorCSAqIEZvciBzdWNjZXNzZnVsIHRyYW5zbWlzc2lvbiwgdGhlIHN0YXR1cyBjb2RlIGlzIHRoZSBhY2sgcmVjZWl2ZWQKKwkgKiBmcm9tIHRoZSBkZXN0aW5hdGlvbi4gIE90aGVyd2lzZSBpdCBpcyBvbmUgb2YgdGhlIGp1anUtc3BlY2lmaWMKKwkgKiByY29kZXM6ICBSQ09ERV9TRU5EX0VSUk9SLCBfQ0FOQ0VMTEVELCBfQlVTWSwgX0dFTkVSQVRJT04sIF9OT19BQ0suCiAJICogVGhlIGNhbGxiYWNrIGNhbiBiZSBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQgYW5kIHRodXMKIAkgKiBtdXN0IG5ldmVyIGJsb2NrLgogCSAqLwpAQCAtMzU1LDE3ICszNzIsMTkgQEAKICAqIHNjYXR0ZXItZ2F0aGVyIHN0cmVhbWluZyAoZS5nLiBhc3NlbWJsaW5nIHZpZGVvIGZyYW1lIGF1dG9tYXRpY2FsbHkpLgogICovCiBzdHJ1Y3QgZndfaXNvX3BhY2tldCB7Ci0JdTE2IHBheWxvYWRfbGVuZ3RoOwkvKiBMZW5ndGggb2YgaW5kaXJlY3QgcGF5bG9hZC4gKi8KLQl1MzIgaW50ZXJydXB0OjE7CS8qIEdlbmVyYXRlIGludGVycnVwdCBvbiB0aGlzIHBhY2tldCAqLwotCXUzMiBza2lwOjE7CQkvKiBTZXQgdG8gbm90IHNlbmQgcGFja2V0IGF0IGFsbC4gKi8KLQl1MzIgdGFnOjI7Ci0JdTMyIHN5OjQ7Ci0JdTMyIGhlYWRlcl9sZW5ndGg6ODsJLyogTGVuZ3RoIG9mIGltbWVkaWF0ZSBoZWFkZXIuICovCi0JdTMyIGhlYWRlclswXTsKKwl1MTYgcGF5bG9hZF9sZW5ndGg7CS8qIExlbmd0aCBvZiBpbmRpcmVjdCBwYXlsb2FkCQkqLworCXUzMiBpbnRlcnJ1cHQ6MTsJLyogR2VuZXJhdGUgaW50ZXJydXB0IG9uIHRoaXMgcGFja2V0CSovCisJdTMyIHNraXA6MTsJCS8qIHR4OiBTZXQgdG8gbm90IHNlbmQgcGFja2V0IGF0IGFsbAkqLworCQkJCS8qIHJ4OiBTeW5jIGJpdCwgd2FpdCBmb3IgbWF0Y2hpbmcgc3kJKi8KKwl1MzIgdGFnOjI7CQkvKiB0eDogVGFnIGluIHBhY2tldCBoZWFkZXIJCSovCisJdTMyIHN5OjQ7CQkvKiB0eDogU3kgaW4gcGFja2V0IGhlYWRlcgkJKi8KKwl1MzIgaGVhZGVyX2xlbmd0aDo4OwkvKiBMZW5ndGggb2YgaW1tZWRpYXRlIGhlYWRlcgkJKi8KKwl1MzIgaGVhZGVyWzBdOwkJLyogdHg6IFRvcCBvZiAxMzk0IGlzb2NoLiBkYXRhX2Jsb2NrCSovCiB9OwogCi0jZGVmaW5lIEZXX0lTT19DT05URVhUX1RSQU5TTUlUCTAKLSNkZWZpbmUgRldfSVNPX0NPTlRFWFRfUkVDRUlWRQkxCisjZGVmaW5lIEZXX0lTT19DT05URVhUX1RSQU5TTUlUCQkJMAorI2RlZmluZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFCQkJMQorI2RlZmluZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFX01VTFRJQ0hBTk5FTAkyCiAKICNkZWZpbmUgRldfSVNPX0NPTlRFWFRfTUFUQ0hfVEFHMAkgMQogI2RlZmluZSBGV19JU09fQ09OVEVYVF9NQVRDSF9UQUcxCSAyCkBAIC0zODksMjQgKzQwOCwzMSBAQAogaW50IGZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJICAgICAgIGludCBwYWdlX2NvdW50LCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogdm9pZCBmd19pc29fYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IGZ3X2NhcmQgKmNhcmQpOworc2l6ZV90IGZ3X2lzb19idWZmZXJfbG9va3VwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIGRtYV9hZGRyX3QgY29tcGxldGVkKTsKIAogc3RydWN0IGZ3X2lzb19jb250ZXh0OwogdHlwZWRlZiB2b2lkICgqZndfaXNvX2NhbGxiYWNrX3QpKHN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dCwKIAkJCQkgIHUzMiBjeWNsZSwgc2l6ZV90IGhlYWRlcl9sZW5ndGgsCiAJCQkJICB2b2lkICpoZWFkZXIsIHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkICgqZndfaXNvX21jX2NhbGxiYWNrX3QpKHN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dCwKKwkJCQkgICAgIGRtYV9hZGRyX3QgY29tcGxldGVkLCB2b2lkICpkYXRhKTsKIHN0cnVjdCBmd19pc29fY29udGV4dCB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQ7CiAJaW50IHR5cGU7CiAJaW50IGNoYW5uZWw7CiAJaW50IHNwZWVkOwogCXNpemVfdCBoZWFkZXJfc2l6ZTsKLQlmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjazsKKwl1bmlvbiB7CisJCWZ3X2lzb19jYWxsYmFja190IHNjOworCQlmd19pc29fbWNfY2FsbGJhY2tfdCBtYzsKKwl9IGNhbGxiYWNrOwogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CiB9OwogCiBzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJaW50IHR5cGUsIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKIAkJZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOworaW50IGZ3X2lzb19jb250ZXh0X3NldF9jaGFubmVscyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwgdTY0ICpjaGFubmVscyk7CiBpbnQgZndfaXNvX2NvbnRleHRfcXVldWUoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCiAJCQkgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKIAkJCSBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mbGV4X2FycmF5LmggYi9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaAppbmRleCAxZDc0N2Y3Li42MzFiNzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaApAQCAtNzAsNCArNzAsOSBAQAogdm9pZCAqZmxleF9hcnJheV9nZXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9ucik7CiBpbnQgZmxleF9hcnJheV9zaHJpbmsoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIAorI2RlZmluZSBmbGV4X2FycmF5X3B1dF9wdHIoZmEsIG5yLCBzcmMsIGdmcCkgXAorCWZsZXhfYXJyYXlfcHV0KGZhLCBuciwgJih2b2lkICopKHNyYyksIGdmcCkKKwordm9pZCAqZmxleF9hcnJheV9nZXRfcHRyKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpOworCiAjZW5kaWYgLyogX0ZMRVhfQVJSQVlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGU1MTA2ZTQuLjdhMDYyNWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa190eXBlcy5oPgogCiAvKgogICogSXQncyBzaWxseSB0byBoYXZlIE5SX09QRU4gYmlnZ2VyIHRoYW4gTlJfRklMRSwgYnV0IHlvdSBjYW4gY2hhbmdlCkBAIC05MSw2ICs5Miw5IEBACiAvKiBFeHBlY3QgcmFuZG9tIGFjY2VzcyBwYXR0ZXJuICovCiAjZGVmaW5lIEZNT0RFX1JBTkRPTQkJKChfX2ZvcmNlIGZtb2RlX3QpMHgxMDAwKQogCisvKiBGaWxlIHdhcyBvcGVuZWQgYnkgZmFub3RpZnkgYW5kIHNob3VsZG4ndCBnZW5lcmF0ZSBmYW5vdGlmeSBldmVudHMgKi8KKyNkZWZpbmUgRk1PREVfTk9OT1RJRlkJCSgoX19mb3JjZSBmbW9kZV90KTB4MTAwMDAwMCkKKwogLyoKICAqIFRoZSBiZWxvdyBhcmUgdGhlIHZhcmlvdXMgcmVhZCBhbmQgd3JpdGUgdHlwZXMgdGhhdCB3ZSBzdXBwb3J0LiBTb21lIG9mCiAgKiB0aGVtIGluY2x1ZGUgYmVoYXZpb3JhbCBtb2RpZmllcnMgdGhhdCBzZW5kIGluZm9ybWF0aW9uIGRvd24gdG8gdGhlCkBAIC0xMTgsNyArMTIyLDcgQEAKICAqCQkJaW1tZWRpYXRlbHkgd2FpdCBvbiB0aGlzIHJlYWQgd2l0aG91dCBjYXJpbmcgYWJvdXQKICAqCQkJdW5wbHVnZ2luZy4KICAqIFJFQURBCQlVc2VkIGZvciByZWFkLWFoZWFkIG9wZXJhdGlvbnMuIExvd2VyIHByaW9yaXR5LCBhbmQgdGhlCi0gKgkJCSBibG9jayBsYXllciBjb3VsZCAoaW4gdGhlb3J5KSBjaG9vc2UgdG8gaWdub3JlIHRoaXMKKyAqCQkJYmxvY2sgbGF5ZXIgY291bGQgKGluIHRoZW9yeSkgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCiAgKgkJCXJlcXVlc3QgaWYgaXQgcnVucyBpbnRvIHJlc291cmNlIHByb2JsZW1zLgogICogV1JJVEUJCUEgbm9ybWFsIGFzeW5jIHdyaXRlLiBEZXZpY2Ugd2lsbCBiZSBwbHVnZ2VkLgogICogU1dSSVRFCQlMaWtlIFdSSVRFLCBidXQgYSBzcGVjaWFsIGNhc2UgZm9yIGxsX3J3X2Jsb2NrKCkgdGhhdApAQCAtMTM3LDcgKzE0MSw3IEBACiAgKiBTV1JJVEVfU1lOQwogICogU1dSSVRFX1NZTkNfUExVRwlMaWtlIFdSSVRFX1NZTkMvV1JJVEVfU1lOQ19QTFVHLCBidXQgbG9ja3MgdGhlIGJ1ZmZlci4KICAqCQkJU2VlIFNXUklURS4KLSAqIFdSSVRFX0JBUlJJRVIJTGlrZSBXUklURSwgYnV0IHRlbGxzIHRoZSBibG9jayBsYXllciB0aGF0IGFsbAorICogV1JJVEVfQkFSUklFUglMaWtlIFdSSVRFX1NZTkMsIGJ1dCB0ZWxscyB0aGUgYmxvY2sgbGF5ZXIgdGhhdCBhbGwKICAqCQkJcHJldmlvdXNseSBzdWJtaXR0ZWQgd3JpdGVzIG11c3QgYmUgc2FmZWx5IG9uIHN0b3JhZ2UKICAqCQkJYmVmb3JlIHRoaXMgb25lIGlzIHN0YXJ0ZWQuIEFsc28gZ3VhcmFudGVlcyB0aGF0IHdoZW4KICAqCQkJdGhpcyB3cml0ZSBpcyBjb21wbGV0ZSwgaXQgaXRzZWxmIGlzIGFsc28gc2FmZWx5IG9uCkBAIC0xNDUsMjkgKzE0OSwzMiBAQAogICoJCQlvZiB0aGlzIElPLgogICoKICAqLwotI2RlZmluZSBSV19NQVNLCQkxCi0jZGVmaW5lIFJXQV9NQVNLCTIKLSNkZWZpbmUgUkVBRCAwCi0jZGVmaW5lIFdSSVRFIDEKLSNkZWZpbmUgUkVBREEgMgkJLyogcmVhZC1haGVhZCAgLSBkb24ndCBibG9jayBpZiBubyByZXNvdXJjZXMgKi8KLSNkZWZpbmUgU1dSSVRFIDMJLyogZm9yIGxsX3J3X2Jsb2NrKCkgLSB3YWl0IGZvciBidWZmZXIgbG9jayAqLwotI2RlZmluZSBSRUFEX1NZTkMJKFJFQUQgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpKQotI2RlZmluZSBSRUFEX01FVEEJKFJFQUQgfCAoMSA8PCBCSU9fUldfTUVUQSkpCi0jZGVmaW5lIFdSSVRFX1NZTkNfUExVRwkoV1JJVEUgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19OT0lETEUpKQotI2RlZmluZSBXUklURV9TWU5DCShXUklURV9TWU5DX1BMVUcgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKLSNkZWZpbmUgV1JJVEVfT0RJUkVDVF9QTFVHCShXUklURSB8ICgxIDw8IEJJT19SV19TWU5DSU8pKQotI2RlZmluZSBXUklURV9NRVRBCShXUklURSB8ICgxIDw8IEJJT19SV19NRVRBKSkKLSNkZWZpbmUgU1dSSVRFX1NZTkNfUExVRwlcCi0JCQkoU1dSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkNJTykgfCAoMSA8PCBCSU9fUldfTk9JRExFKSkKLSNkZWZpbmUgU1dSSVRFX1NZTkMJKFNXUklURV9TWU5DX1BMVUcgfCAoMSA8PCBCSU9fUldfVU5QTFVHKSkKLSNkZWZpbmUgV1JJVEVfQkFSUklFUgkoV1JJVEUgfCAoMSA8PCBCSU9fUldfQkFSUklFUikpCisjZGVmaW5lIFJXX01BU0sJCQlSRVFfV1JJVEUKKyNkZWZpbmUgUldBX01BU0sJCVJFUV9SQUhFQUQKKworI2RlZmluZSBSRUFECQkJMAorI2RlZmluZSBXUklURQkJCVJXX01BU0sKKyNkZWZpbmUgUkVBREEJCQlSV0FfTUFTSworI2RlZmluZSBTV1JJVEUJCQkoV1JJVEUgfCBSRUFEQSkKKworI2RlZmluZSBSRUFEX1NZTkMJCShSRUFEIHwgUkVRX1NZTkMgfCBSRVFfVU5QTFVHKQorI2RlZmluZSBSRUFEX01FVEEJCShSRUFEIHwgUkVRX01FVEEpCisjZGVmaW5lIFdSSVRFX1NZTkNfUExVRwkJKFdSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTk9JRExFKQorI2RlZmluZSBXUklURV9TWU5DCQkoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfVU5QTFVHKQorI2RlZmluZSBXUklURV9PRElSRUNUX1BMVUcJKFdSSVRFIHwgUkVRX1NZTkMpCisjZGVmaW5lIFdSSVRFX01FVEEJCShXUklURSB8IFJFUV9NRVRBKQorI2RlZmluZSBXUklURV9CQVJSSUVSCQkoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfVU5QTFVHIHwgXAorCQkJCSBSRVFfSEFSREJBUlJJRVIpCisjZGVmaW5lIFNXUklURV9TWU5DX1BMVUcJKFNXUklURSB8IFJFUV9TWU5DIHwgUkVRX05PSURMRSkKKyNkZWZpbmUgU1dSSVRFX1NZTkMJCShTV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfVU5QTFVHKQogCiAvKgogICogVGhlc2UgYXJlbid0IHJlYWxseSByZWFkcyBvciB3cml0ZXMsIHRoZXkgcGFzcyBkb3duIGluZm9ybWF0aW9uIGFib3V0CiAgKiBwYXJ0cyBvZiBkZXZpY2UgdGhhdCBhcmUgbm93IHVudXNlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCiAgKi8KLSNkZWZpbmUgRElTQ0FSRF9OT0JBUlJJRVIgKFdSSVRFIHwgKDEgPDwgQklPX1JXX0RJU0NBUkQpKQotI2RlZmluZSBESVNDQVJEX0JBUlJJRVIgKERJU0NBUkRfTk9CQVJSSUVSIHwgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQorI2RlZmluZSBESVNDQVJEX05PQkFSUklFUgkoV1JJVEUgfCBSRVFfRElTQ0FSRCkKKyNkZWZpbmUgRElTQ0FSRF9CQVJSSUVSCQkoV1JJVEUgfCBSRVFfRElTQ0FSRCB8IFJFUV9IQVJEQkFSUklFUikKKyNkZWZpbmUgRElTQ0FSRF9TRUNVUkUJCShESVNDQVJEX05PQkFSUklFUiB8IFJFUV9TRUNVUkUpCiAKICNkZWZpbmUgU0VMX0lOCQkxCiAjZGVmaW5lIFNFTF9PVVQJCTIKQEAgLTIxMCw2ICsyMTcsNyBAQAogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KICNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCisjZGVmaW5lIE1TX0JPUk4JCSgxPDwyOSkKICNkZWZpbmUgTVNfQUNUSVZFCSgxPDwzMCkKICNkZWZpbmUgTVNfTk9VU0VSCSgxPDwzMSkKIApAQCAtMzEwLDYgKzMxOCw3IEBACiAjZGVmaW5lIEJMS0FMSUdOT0ZGIF9JTygweDEyLDEyMikKICNkZWZpbmUgQkxLUEJTWkdFVCBfSU8oMHgxMiwxMjMpCiAjZGVmaW5lIEJMS0RJU0NBUkRaRVJPRVMgX0lPKDB4MTIsMTI0KQorI2RlZmluZSBCTEtTRUNESVNDQVJEIF9JTygweDEyLDEyNSkKIAogI2RlZmluZSBCTUFQX0lPQ1RMIDEJCS8qIG9ic29sZXRlIC0ga2VwdCBmb3IgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBGSUJNQVAJICAgX0lPKDB4MDAsMSkJLyogYm1hcCBhY2Nlc3MgKi8KQEAgLTQwOCw5ICs0MTcsNiBAQAogZXh0ZXJuIGludCBzeXNjdGxfbnJfb3BlbjsKIGV4dGVybiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCBpbm9kZXNfc3RhdDsKIGV4dGVybiBpbnQgbGVhc2VzX2VuYWJsZSwgbGVhc2VfYnJlYWtfdGltZTsKLSNpZmRlZiBDT05GSUdfRE5PVElGWQotZXh0ZXJuIGludCBkaXJfbm90aWZ5X2VuYWJsZTsKLSNlbmRpZgogCiBzdHJ1Y3QgYnVmZmVyX2hlYWQ7CiB0eXBlZGVmIGludCAoZ2V0X2Jsb2NrX3QpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKQEAgLTY4Nyw2ICs2OTMsNyBAQAogICovCiAjZGVmaW5lIFBBR0VDQUNIRV9UQUdfRElSVFkJMAogI2RlZmluZSBQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSwkxCisjZGVmaW5lIFBBR0VDQUNIRV9UQUdfVE9XUklURQkyCiAKIGludCBtYXBwaW5nX3RhZ2dlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgaW50IHRhZyk7CiAKQEAgLTc3MCwxMiArNzc3LDcgQEAKIAogI2lmZGVmIENPTkZJR19GU05PVElGWQogCV9fdTMyCQkJaV9mc25vdGlmeV9tYXNrOyAvKiBhbGwgZXZlbnRzIHRoaXMgaW5vZGUgY2FyZXMgYWJvdXQgKi8KLQlzdHJ1Y3QgaGxpc3RfaGVhZAlpX2Zzbm90aWZ5X21hcmtfZW50cmllczsgLyogZnNub3RpZnkgbWFyayBlbnRyaWVzICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JTk9USUZZCi0Jc3RydWN0IGxpc3RfaGVhZAlpbm90aWZ5X3dhdGNoZXM7IC8qIHdhdGNoZXMgb24gdGhpcyBpbm9kZSAqLwotCXN0cnVjdCBtdXRleAkJaW5vdGlmeV9tdXRleDsJLyogcHJvdGVjdHMgdGhlIHdhdGNoZXMgbGlzdCAqLworCXN0cnVjdCBobGlzdF9oZWFkCWlfZnNub3RpZnlfbWFya3M7CiAjZW5kaWYKIAogCXVuc2lnbmVkIGxvbmcJCWlfc3RhdGU7CkBAIC0xNTYzLDggKzE1NjUsOCBAQAogCiAgICAJdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOwogCWludCAoKndyaXRlX2lub2RlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKLQl2b2lkICgqZHJvcF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKLQl2b2lkICgqZGVsZXRlX2lub2RlKSAoc3RydWN0IGlub2RlICopOworCWludCAoKmRyb3BfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CisJdm9pZCAoKmV2aWN0X2lub2RlKSAoc3RydWN0IGlub2RlICopOwogCXZvaWQgKCpwdXRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAJdm9pZCAoKndyaXRlX3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCWludCAoKnN5bmNfZnMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKQEAgLTE1NzIsNyArMTU3NCw2IEBACiAJaW50ICgqdW5mcmVlemVfZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiAJaW50ICgqc3RhdGZzKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKIAlpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwotCXZvaWQgKCpjbGVhcl9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKIAl2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCiAJaW50ICgqc2hvd19vcHRpb25zKShzdHJ1Y3Qgc2VxX2ZpbGUgKiwgc3RydWN0IHZmc21vdW50ICopOwpAQCAtMTYxNyw4ICsxNjE4LDggQEAKICAqIElfRlJFRUlORwkJU2V0IHdoZW4gaW5vZGUgaXMgYWJvdXQgdG8gYmUgZnJlZWQgYnV0IHN0aWxsIGhhcyBkaXJ0eQogICoJCQlwYWdlcyBvciBidWZmZXJzIGF0dGFjaGVkIG9yIHRoZSBpbm9kZSBpdHNlbGYgaXMgc3RpbGwKICAqCQkJZGlydHkuCi0gKiBJX0NMRUFSCQlTZXQgYnkgY2xlYXJfaW5vZGUoKS4gIEluIHRoaXMgc3RhdGUgdGhlIGlub2RlIGlzIGNsZWFuCi0gKgkJCWFuZCBjYW4gYmUgZGVzdHJveWVkLgorICogSV9DTEVBUgkJQWRkZWQgYnkgZW5kX3dyaXRlYmFjaygpLiAgSW4gdGhpcyBzdGF0ZSB0aGUgaW5vZGUgaXMgY2xlYW4KKyAqCQkJYW5kIGNhbiBiZSBkZXN0cm95ZWQuICBJbm9kZSBrZWVwcyBJX0ZSRUVJTkcuCiAgKgogICoJCQlJbm9kZXMgdGhhdCBhcmUgSV9XSUxMX0ZSRUUsIElfRlJFRUlORyBvciBJX0NMRUFSIGFyZQogICoJCQlwcm9oaWJpdGVkIGZvciBtYW55IHB1cnBvc2VzLiAgaWdldCgpIG11c3Qgd2FpdCBmb3IKQEAgLTE4MTUsNyArMTgxNiw4IEBACiBleHRlcm4gdm9pZCBkcm9wX2NvbGxlY3RlZF9tb3VudHMoc3RydWN0IHZmc21vdW50ICopOwogZXh0ZXJuIGludCBpdGVyYXRlX21vdW50cyhpbnQgKCopKHN0cnVjdCB2ZnNtb3VudCAqLCB2b2lkICopLCB2b2lkICosCiAJCQkgIHN0cnVjdCB2ZnNtb3VudCAqKTsKLWV4dGVybiBpbnQgdmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdGZzICopOworZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBwYXRoICosIHN0cnVjdCBrc3RhdGZzICopOworZXh0ZXJuIGludCBzdGF0ZnNfYnlfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiBleHRlcm4gaW50IGZyZWV6ZV9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyKTsKIGV4dGVybiBpbnQgdGhhd19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN1cGVyKTsKIApAQCAtMjE2NSw5ICsyMTY3LDggQEAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ3JhYihzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwogZXh0ZXJuIGludCBpbm9kZV9uZWVkc19zeW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gdm9pZCBnZW5lcmljX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gaW50IGdlbmVyaWNfZGV0YWNoX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBnZW5lcmljX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgZ2VuZXJpY19kcm9wX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiBleHRlcm4gc3RydWN0IGlub2RlICppbG9va3VwNV9ub3dhaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJdW5zaWduZWQgbG9uZyBoYXNodmFsLCBpbnQgKCp0ZXN0KShzdHJ1Y3QgaW5vZGUgKiwgdm9pZCAqKSwKQEAgLTIxODQsNyArMjE4NSw3IEBACiAKIGV4dGVybiB2b2lkIF9faWdldChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7CiBleHRlcm4gdm9pZCBpZ2V0X2ZhaWxlZChzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBlbmRfd3JpdGViYWNrKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgX19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CkBAIC0yMjAwLDcgKzIyMDEsNiBAQAogZXh0ZXJuIHZvaWQgZmlsZV9tb3ZlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIGV4dGVybiB2b2lkIGZpbGVfa2lsbChzdHJ1Y3QgZmlsZSAqZik7CiAjaWZkZWYgQ09ORklHX0JMT0NLCi1zdHJ1Y3QgYmlvOwogZXh0ZXJuIHZvaWQgc3VibWl0X2JpbyhpbnQsIHN0cnVjdCBiaW8gKik7CiBleHRlcm4gaW50IGJkZXZfcmVhZF9vbmx5KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiAjZW5kaWYKQEAgLTIyNjcsMTkgKzIyNjcsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQkxPQ0sKLXN0cnVjdCBiaW87CiB0eXBlZGVmIHZvaWQgKGRpb19zdWJtaXRfdCkoaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgbG9mZl90IGZpbGVfb2Zmc2V0KTsKLXZvaWQgZGlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnJvcik7Ci0KLXNzaXplX3QgX19ibG9ja2Rldl9kaXJlY3RfSU9fbmV3dHJ1bmMoaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCi0JdW5zaWduZWQgbG9uZyBucl9zZWdzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2ssIGRpb19pb2RvbmVfdCBlbmRfaW8sCi0JZGlvX3N1Ym1pdF90IHN1Ym1pdF9pbywgaW50IGxvY2tfdHlwZSk7Ci1zc2l6ZV90IF9fYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAotCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLCBkaW9faW9kb25lX3QgZW5kX2lvLAotCWRpb19zdWJtaXRfdCBzdWJtaXRfaW8sCWludCBsb2NrX3R5cGUpOwogCiBlbnVtIHsKIAkvKiBuZWVkIGxvY2tpbmcgYmV0d2VlbiBidWZmZXJlZCBhbmQgZGlyZWN0IGFjY2VzcyAqLwpAQCAtMjI4OSwyNCArMjI3OCwxMyBAQAogCURJT19TS0lQX0hPTEVTCT0gMHgwMiwKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3NpemVfdCBibG9ja2Rldl9kaXJlY3RfSU9fbmV3dHJ1bmMoaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0Jc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2ssCi0JZGlvX2lvZG9uZV90IGVuZF9pbykKLXsKLQlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU9fbmV3dHJ1bmMocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsIG9mZnNldCwKLQkJCQkgICAgbnJfc2VncywgZ2V0X2Jsb2NrLCBlbmRfaW8sIE5VTEwsCi0JCQkJICAgIERJT19MT0NLSU5HIHwgRElPX1NLSVBfSE9MRVMpOwotfQordm9pZCBkaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKTsKIAotc3RhdGljIGlubGluZSBzc2l6ZV90IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nX25ld3RydW5jKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAotCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLAotCWRpb19pb2RvbmVfdCBlbmRfaW8pCi17Ci0JcmV0dXJuIF9fYmxvY2tkZXZfZGlyZWN0X0lPX25ld3RydW5jKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LCBvZmZzZXQsCi0JCQkJbnJfc2VncywgZ2V0X2Jsb2NrLCBlbmRfaW8sIE5VTEwsIDApOwotfQorc3NpemVfdCBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhpbnQgcncsIHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlub2RlICppbm9kZSwKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGdldF9ibG9ja190IGdldF9ibG9jaywgZGlvX2lvZG9uZV90IGVuZF9pbywKKwlkaW9fc3VibWl0X3Qgc3VibWl0X2lvLAlpbnQgZmxhZ3MpOworCiBzdGF0aWMgaW5saW5lIHNzaXplX3QgYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAogCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLApAQCAtMjMxNiwxNSArMjI5NCw2IEBACiAJCQkJICAgIG5yX3NlZ3MsIGdldF9ibG9jaywgZW5kX2lvLCBOVUxMLAogCQkJCSAgICBESU9fTE9DS0lORyB8IERJT19TS0lQX0hPTEVTKTsKIH0KLQotc3RhdGljIGlubGluZSBzc2l6ZV90IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAotCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCWxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLAotCWRpb19pb2RvbmVfdCBlbmRfaW8pCi17Ci0JcmV0dXJuIF9fYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgYmRldiwgaW92LCBvZmZzZXQsCi0JCQkJICAgIG5yX3NlZ3MsIGdldF9ibG9jaywgZW5kX2lvLCBOVUxMLCAwKTsKLX0KICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW5lcmljX3JvX2ZvcHM7CkBAIC0yMzg2LDcgKzIzNTUsNiBAQAogZXh0ZXJuIGludCBzaW1wbGVfdW5saW5rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGludCBzaW1wbGVfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gaW50IHNpbXBsZV9yZW5hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7Ci1leHRlcm4gaW50IHNpbXBsZV9zZXRzaXplKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QpOwogZXh0ZXJuIGludCBub29wX2ZzeW5jKHN0cnVjdCBmaWxlICosIGludCk7CiBleHRlcm4gaW50IHNpbXBsZV9lbXB0eShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGludCBzaW1wbGVfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKQEAgLTI0MjMsOCArMjM5MSw3IEBACiAKIGV4dGVybiBpbnQgaW5vZGVfY2hhbmdlX29rKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gaW50IGlub2RlX25ld3NpemVfb2soY29uc3Qgc3RydWN0IGlub2RlICosIGxvZmZfdCBvZmZzZXQpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IGlhdHRyICopOwotZXh0ZXJuIHZvaWQgZ2VuZXJpY19zZXRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCBpYXR0ciAqYXR0cik7CitleHRlcm4gdm9pZCBzZXRhdHRyX2NvcHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IGlhdHRyICphdHRyKTsKIAogZXh0ZXJuIHZvaWQgZmlsZV91cGRhdGVfdGltZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAKQEAgLTI1MTUsNyArMjQ4Miw4IEBACiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAogI2RlZmluZSBBQ0NfTU9ERSh4KSAoIlwwMDRcMDAyXDAwNlwwMDYiWyh4KSZPX0FDQ01PREVdKQotI2RlZmluZSBPUEVOX0ZNT0RFKGZsYWcpICgoX19mb3JjZSBmbW9kZV90KSgoZmxhZyArIDEpICYgT19BQ0NNT0RFKSkKKyNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKChmbGFnICsgMSkgJiBPX0FDQ01PREUpIHwgXAorCQkJCQkgICAgKGZsYWcgJiBGTU9ERV9OT05PVElGWSkpKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaAppbmRleCA3OGEwNWJmLi5lY2EzZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKQEAgLTIxLDQgKzIxLDMxIEBACiBleHRlcm4gdm9pZCBkYWVtb25pemVfZnNfc3RydWN0KHZvaWQpOwogZXh0ZXJuIGludCB1bnNoYXJlX2ZzX3N0cnVjdCh2b2lkKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGdldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcm9vdCkKK3sKKwlyZWFkX2xvY2soJmZzLT5sb2NrKTsKKwkqcm9vdCA9IGZzLT5yb290OworCXBhdGhfZ2V0KHJvb3QpOworCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcHdkKQoreworCXJlYWRfbG9jaygmZnMtPmxvY2spOworCSpwd2QgPSBmcy0+cHdkOworCXBhdGhfZ2V0KHB3ZCk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9mc19yb290X2FuZF9wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpyb290LAorCQkJCSAgICAgICBzdHJ1Y3QgcGF0aCAqcHdkKQoreworCXJlYWRfbG9jaygmZnMtPmxvY2spOworCSpyb290ID0gZnMtPnJvb3Q7CisJcGF0aF9nZXQocm9vdCk7CisJKnB3ZCA9IGZzLT5wd2Q7CisJcGF0aF9nZXQocHdkKTsKKwlyZWFkX3VubG9jaygmZnMtPmxvY2spOworfQorCiAjZW5kaWYgLyogX0xJTlVYX0ZTX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oCmluZGV4IGM1N2RiMjcuLmI4NTgxYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2RlZmluZSBOUl9NQVhDQUNIRVMgQklUU19QRVJfTE9ORwogCkBAIC03NiwxOCArNzYsMTQgQEAKIHR5cGVkZWYgdm9pZCAoKmZzY2FjaGVfb3BlcmF0aW9uX3Byb2Nlc3Nvcl90KShzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKIAogc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXN0X3dvcms7CS8qIHJlY29yZCBmb3IgZmFzdCBvcHMgKi8KLQkJc3RydWN0IHNsb3dfd29yayBzbG93X3dvcms7CS8qIHJlY29yZCBmb3IgKHZlcnkpIHNsb3cgb3BzICovCi0JfTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsJCS8qIHJlY29yZCBmb3IgYXN5bmMgb3BzICovCiAJc3RydWN0IGxpc3RfaGVhZAlwZW5kX2xpbms7CS8qIGxpbmsgaW4gb2JqZWN0LT5wZW5kaW5nX29wcyAqLwogCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqb2JqZWN0OwkvKiBvYmplY3QgdG8gYmUgb3BlcmF0ZWQgdXBvbiAqLwogCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAjZGVmaW5lIEZTQ0FDSEVfT1BfVFlQRQkJMHgwMDBmCS8qIG9wZXJhdGlvbiB0eXBlICovCi0jZGVmaW5lIEZTQ0FDSEVfT1BfRkFTVAkJMHgwMDAxCS8qIC0gZmFzdCBvcCwgcHJvY2Vzc29yIG1heSBub3Qgc2xlZXAgZm9yIGRpc2sgKi8KLSNkZWZpbmUgRlNDQUNIRV9PUF9TTE9XCQkweDAwMDIJLyogLSAodmVyeSkgc2xvdyBvcCwgcHJvY2Vzc29yIG1heSBzbGVlcCBmb3IgZGlzayAqLwotI2RlZmluZSBGU0NBQ0hFX09QX01ZVEhSRUFECTB4MDAwMwkvKiAtIHByb2Nlc3NpbmcgaXMgZG9uZSBiZSBpc3N1aW5nIHRocmVhZCwgbm90IHBvb2wgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9BU1lOQwkweDAwMDEJLyogLSBhc3luYyBvcCwgcHJvY2Vzc29yIG1heSBzbGVlcCBmb3IgZGlzayAqLworI2RlZmluZSBGU0NBQ0hFX09QX01ZVEhSRUFECTB4MDAwMgkvKiAtIHByb2Nlc3NpbmcgaXMgZG9uZSBiZSBpc3N1aW5nIHRocmVhZCwgbm90IHBvb2wgKi8KICNkZWZpbmUgRlNDQUNIRV9PUF9XQUlUSU5HCTQJLyogY2xlYXJlZCB3aGVuIG9wIGlzIHdva2VuICovCiAjZGVmaW5lIEZTQ0FDSEVfT1BfRVhDTFVTSVZFCTUJLyogZXhjbHVzaXZlIG9wLCBvdGhlciBvcHMgbXVzdCB3YWl0ICovCiAjZGVmaW5lIEZTQ0FDSEVfT1BfREVBRAkJNgkvKiBvcCBpcyBub3cgZGVhZCAqLwpAQCAtMTA1LDcgKzEwMSw4IEBACiAJLyogb3BlcmF0aW9uIHJlbGVhc2VyICovCiAJZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90IHJlbGVhc2U7CiAKLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCisjaWZkZWYgQ09ORklHX1dPUktRVUVVRV9ERUJVR0ZTCisJc3RydWN0IHdvcmtfc3RydWN0IHB1dF93b3JrOwkvKiB3b3JrIHRvIGRlbGF5IG9wZXJhdGlvbiBwdXQgKi8KIAljb25zdCBjaGFyICpuYW1lOwkJLyogb3BlcmF0aW9uIG5hbWUgKi8KIAljb25zdCBjaGFyICpzdGF0ZTsJCS8qIG9wZXJhdGlvbiBzdGF0ZSAqLwogI2RlZmluZSBmc2NhY2hlX3NldF9vcF9uYW1lKE9QLCBOKQlkbyB7IChPUCktPm5hbWUgID0gKE4pOyB9IHdoaWxlKDApCkBAIC0xMTcsNyArMTE0LDcgQEAKIH07CiAKIGV4dGVybiBhdG9taWNfdCBmc2NhY2hlX29wX2RlYnVnX2lkOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGZzY2FjaGVfb3Bfc2xvd193b3JrX29wczsKK2V4dGVybiB2b2lkIGZzY2FjaGVfb3Bfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIGV4dGVybiB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICopOwogZXh0ZXJuIHZvaWQgZnNjYWNoZV9wdXRfb3BlcmF0aW9uKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKQEAgLTEyOCwzMyArMTI1LDIxIEBACiAgKiBAcmVsZWFzZTogVGhlIHJlbGVhc2UgZnVuY3Rpb24gdG8gYXNzaWduCiAgKgogICogRG8gYmFzaWMgaW5pdGlhbGlzYXRpb24gb2YgYW4gb3BlcmF0aW9uLiAgVGhlIGNhbGxlciBtdXN0IHN0aWxsIHNldCBmbGFncywKLSAqIG9iamVjdCwgZWl0aGVyIGZhc3Rfd29yayBvciBzbG93X3dvcmsgaWYgbmVjZXNzYXJ5LCBhbmQgcHJvY2Vzc29yIGlmIG5lZWRlZC4KKyAqIG9iamVjdCBhbmQgcHJvY2Vzc29yIGlmIG5lZWRlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2luaXQoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCwKLQkJCQkJICBmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QgcmVsZWFzZSkKKwkJCQkJZnNjYWNoZV9vcGVyYXRpb25fcHJvY2Vzc29yX3QgcHJvY2Vzc29yLAorCQkJCQlmc2NhY2hlX29wZXJhdGlvbl9yZWxlYXNlX3QgcmVsZWFzZSkKIHsKKwlJTklUX1dPUksoJm9wLT53b3JrLCBmc2NhY2hlX29wX3dvcmtfZnVuYyk7CiAJYXRvbWljX3NldCgmb3AtPnVzYWdlLCAxKTsKIAlvcC0+ZGVidWdfaWQgPSBhdG9taWNfaW5jX3JldHVybigmZnNjYWNoZV9vcF9kZWJ1Z19pZCk7CisJb3AtPnByb2Nlc3NvciA9IHByb2Nlc3NvcjsKIAlvcC0+cmVsZWFzZSA9IHJlbGVhc2U7CiAJSU5JVF9MSVNUX0hFQUQoJm9wLT5wZW5kX2xpbmspOwogCWZzY2FjaGVfc2V0X29wX3N0YXRlKG9wLCAiSW5pdCIpOwogfQogCi0vKioKLSAqIGZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyAtIERvIGFkZGl0aW9uYWwgaW5pdGlhbGlzYXRpb24gb2YgYSBzbG93IG9wCi0gKiBAb3A6IFRoZSBvcGVyYXRpb24gdG8gaW5pdGlhbGlzZQotICogQHByb2Nlc3NvcjogVGhlIHByb2Nlc3NvciBmdW5jdGlvbiB0byBhc3NpZ24KLSAqCi0gKiBEbyBhZGRpdGlvbmFsIGluaXRpYWxpc2F0aW9uIG9mIGFuIG9wZXJhdGlvbiBhcyByZXF1aXJlZCBmb3Igc2xvdyB3b3JrLgotICovCi1zdGF0aWMgaW5saW5lCi12b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyhzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAotCQkJCSBmc2NhY2hlX29wZXJhdGlvbl9wcm9jZXNzb3JfdCBwcm9jZXNzb3IpCi17Ci0Jb3AtPnByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLQlzbG93X3dvcmtfaW5pdCgmb3AtPnNsb3dfd29yaywgJmZzY2FjaGVfb3Bfc2xvd193b3JrX29wcyk7Ci19Ci0KIC8qCiAgKiBkYXRhIHJlYWQgb3BlcmF0aW9uCiAgKi8KQEAgLTM4OSw3ICszNzQsNyBAQAogCXN0cnVjdCBmc2NhY2hlX2NhY2hlCSpjYWNoZTsJCS8qIGNhY2hlIHRoYXQgc3VwcGxpZWQgdGhpcyBvYmplY3QgKi8KIAlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmNvb2tpZTsJLyogbmV0ZnMncyBmaWxlL2luZGV4IG9iamVjdCAqLwogCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqcGFyZW50OwkvKiBwYXJlbnQgb2JqZWN0ICovCi0Jc3RydWN0IHNsb3dfd29yawl3b3JrOwkJLyogYXR0ZW50aW9uIHNjaGVkdWxpbmcgcmVjb3JkICovCisJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CQkvKiBhdHRlbnRpb24gc2NoZWR1bGluZyByZWNvcmQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWRlcGVuZGVudHM7CS8qIEZJRk8gb2YgZGVwZW5kZW50IG9iamVjdHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWRlcF9saW5rOwkvKiBsaW5rIGluIHBhcmVudCdzIGRlcGVuZGVudHMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJcGVuZGluZ19vcHM7CS8qIHVuc3RhcnRlZCBvcGVyYXRpb25zIG9uIHRoaXMgb2JqZWN0ICovCkBAIC00MTEsNyArMzk2LDcgQEAKIAkodGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmKG9iaiktPmNhY2hlLT5mbGFncykgJiYJXAogCSAob2JqKS0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfRFlJTkcpCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9vYmplY3Rfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIC8qKgogICogZnNjYWNoZV9vYmplY3RfaW5pdCAtIEluaXRpYWxpc2UgYSBjYWNoZSBvYmplY3QgZGVzY3JpcHRpb24KQEAgLTQzMyw3ICs0MTgsNyBAQAogCXNwaW5fbG9ja19pbml0KCZvYmplY3QtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPmNhY2hlX2xpbmspOwogCUlOSVRfSExJU1RfTk9ERSgmb2JqZWN0LT5jb29raWVfbGluayk7Ci0JdnNsb3dfd29ya19pbml0KCZvYmplY3QtPndvcmssICZmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzKTsKKwlJTklUX1dPUksoJm9iamVjdC0+d29yaywgZnNjYWNoZV9vYmplY3Rfd29ya19mdW5jKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5kZXBlbmRlbnRzKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5kZXBfbGluayk7CiAJSU5JVF9MSVNUX0hFQUQoJm9iamVjdC0+cGVuZGluZ19vcHMpOwpAQCAtNTM0LDYgKzUxOSw4IEBACiBleHRlcm4gdm9pZCBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCiAJCQkJICAgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpOwogCitleHRlcm4gYm9vbCBmc2NhY2hlX29iamVjdF9zbGVlcF90aWxsX2Nvbmdlc3RlZChzaWduZWQgbG9uZyAqdGltZW91dHApOworCiBleHRlcm4gZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfY2hlY2tfYXV4KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAogCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKIAkJCQkJICAgICAgIHVpbnQxNl90IGRhdGFsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCmluZGV4IDAxNzU1OTAuLmU0ZTIyMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKQEAgLTExLDggKzExLDYgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwNSBSb2JlcnQgTG92ZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9kbm90aWZ5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5X2JhY2tlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTIxLDM1ICsxOSw1MiBAQAogICogZnNub3RpZnlfZF9pbnN0YW50aWF0ZSAtIGluc3RhbnRpYXRlIGEgZGVudHJ5IGZvciBpbm9kZQogICogQ2FsbGVkIHdpdGggZGNhY2hlX2xvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZW50cnksCi0JCQkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JX19mc25vdGlmeV9kX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7Ci0KLQlpbm90aWZ5X2RfaW5zdGFudGlhdGUoZW50cnksIGlub2RlKTsKKwlfX2Zzbm90aWZ5X2RfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiB9CiAKIC8qIE5vdGlmeSB0aGlzIGRlbnRyeSdzIHBhcmVudCBhYm91dCBhIGNoaWxkJ3MgZXZlbnRzLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIF9fdTMyIG1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfcGFyZW50KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIF9fdTMyIG1hc2spCiB7Ci0JX19mc25vdGlmeV9wYXJlbnQoZGVudHJ5LCBtYXNrKTsKKwlpZiAoIWRlbnRyeSkKKwkJZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAotCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOworCV9fZnNub3RpZnlfcGFyZW50KGZpbGUsIGRlbnRyeSwgbWFzayk7Cit9CisKKy8qIHNpbXBsZSBjYWxsIHNpdGUgZm9yIGFjY2VzcyBkZWNpc2lvbnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZzbm90aWZ5X3Blcm0oc3RydWN0IGZpbGUgKmZpbGUsIGludCBtYXNrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCV9fdTMyIGZzbm90aWZ5X21hc2sgPSAwOworCisJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX05PTk9USUZZKQorCQlyZXR1cm4gMDsKKwlpZiAoIShtYXNrICYgKE1BWV9SRUFEIHwgTUFZX09QRU4pKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hc2sgJiBNQVlfT1BFTikKKwkJZnNub3RpZnlfbWFzayA9IEZTX09QRU5fUEVSTTsKKwllbHNlIGlmIChtYXNrICYgTUFZX1JFQUQpCisJCWZzbm90aWZ5X21hc2sgPSBGU19BQ0NFU1NfUEVSTTsKKwllbHNlCisJCUJVRygpOworCisJcmV0dXJuIGZzbm90aWZ5KGlub2RlLCBmc25vdGlmeV9tYXNrLCBmaWxlLCBGU05PVElGWV9FVkVOVF9GSUxFLCBOVUxMLCAwKTsKIH0KIAogLyoKLSAqIGZzbm90aWZ5X2RfbW92ZSAtIGVudHJ5IGhhcyBiZWVuIG1vdmVkCi0gKiBDYWxsZWQgd2l0aCBkY2FjaGVfbG9jayBhbmQgZW50cnktPmRfbG9jayBoZWxkLgorICogZnNub3RpZnlfZF9tb3ZlIC0gZGVudHJ5IGhhcyBiZWVuIG1vdmVkCisgKiBDYWxsZWQgd2l0aCBkY2FjaGVfbG9jayBhbmQgZGVudHJ5LT5kX2xvY2sgaGVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9kX21vdmUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCS8qCi0JICogT24gbW92ZSB3ZSBuZWVkIHRvIHVwZGF0ZSBlbnRyeS0+ZF9mbGFncyB0byBpbmRpY2F0ZSBpZiB0aGUgbmV3IHBhcmVudAotCSAqIGNhcmVzIGFib3V0IGV2ZW50cyBmcm9tIHRoaXMgZW50cnkuCisJICogT24gbW92ZSB3ZSBuZWVkIHRvIHVwZGF0ZSBkZW50cnktPmRfZmxhZ3MgdG8gaW5kaWNhdGUgaWYgdGhlIG5ldyBwYXJlbnQKKwkgKiBjYXJlcyBhYm91dCBldmVudHMgZnJvbSB0aGlzIGRlbnRyeS4KIAkgKi8KLQlfX2Zzbm90aWZ5X3VwZGF0ZV9kY2FjaGVfZmxhZ3MoZW50cnkpOwotCi0JaW5vdGlmeV9kX21vdmUoZW50cnkpOworCV9fZnNub3RpZnlfdXBkYXRlX2RjYWNoZV9mbGFncyhkZW50cnkpOwogfQogCiAvKgpAQCAtNTcsOCArNzIsNiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbGlua19jb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0FUVFJJQiwgMCwgTlVMTCwgTlVMTCk7Ci0KIAlmc25vdGlmeShpbm9kZSwgRlNfQVRUUklCLCBpbm9kZSwgRlNOT1RJRllfRVZFTlRfSU5PREUsIE5VTEwsIDApOwogfQogCkBAIC02Niw0NSArNzksMzEgQEAKICAqIGZzbm90aWZ5X21vdmUgLSBmaWxlIG9sZF9uYW1lIGF0IG9sZF9kaXIgd2FzIG1vdmVkIHRvIG5ld19uYW1lIGF0IG5ld19kaXIKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21vdmUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCi0JCQkJIGNvbnN0IGNoYXIgKm9sZF9uYW1lLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSwKIAkJCQkgaW50IGlzZGlyLCBzdHJ1Y3QgaW5vZGUgKnRhcmdldCwgc3RydWN0IGRlbnRyeSAqbW92ZWQpCiB7CiAJc3RydWN0IGlub2RlICpzb3VyY2UgPSBtb3ZlZC0+ZF9pbm9kZTsKLQl1MzIgaW5fY29va2llID0gaW5vdGlmeV9nZXRfY29va2llKCk7CiAJdTMyIGZzX2Nvb2tpZSA9IGZzbm90aWZ5X2dldF9jb29raWUoKTsKIAlfX3UzMiBvbGRfZGlyX21hc2sgPSAoRlNfRVZFTlRfT05fQ0hJTEQgfCBGU19NT1ZFRF9GUk9NKTsKIAlfX3UzMiBuZXdfZGlyX21hc2sgPSAoRlNfRVZFTlRfT05fQ0hJTEQgfCBGU19NT1ZFRF9UTyk7Ci0JY29uc3QgY2hhciAqbmV3X25hbWUgPSBtb3ZlZC0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X25hbWUgPSBtb3ZlZC0+ZF9uYW1lLm5hbWU7CiAKIAlpZiAob2xkX2RpciA9PSBuZXdfZGlyKQogCQlvbGRfZGlyX21hc2sgfD0gRlNfRE5fUkVOQU1FOwogCiAJaWYgKGlzZGlyKSB7Ci0JCWlzZGlyID0gSU5fSVNESVI7CiAJCW9sZF9kaXJfbWFzayB8PSBGU19JTl9JU0RJUjsKIAkJbmV3X2Rpcl9tYXNrIHw9IEZTX0lOX0lTRElSOwogCX0KIAotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQob2xkX2RpciwgSU5fTU9WRURfRlJPTXxpc2RpciwgaW5fY29va2llLCBvbGRfbmFtZSwKLQkJCQkgIHNvdXJjZSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChuZXdfZGlyLCBJTl9NT1ZFRF9UT3xpc2RpciwgaW5fY29va2llLCBuZXdfbmFtZSwKLQkJCQkgIHNvdXJjZSk7Ci0KIAlmc25vdGlmeShvbGRfZGlyLCBvbGRfZGlyX21hc2ssIG9sZF9kaXIsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBvbGRfbmFtZSwgZnNfY29va2llKTsKIAlmc25vdGlmeShuZXdfZGlyLCBuZXdfZGlyX21hc2ssIG5ld19kaXIsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBuZXdfbmFtZSwgZnNfY29va2llKTsKIAotCWlmICh0YXJnZXQpIHsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCh0YXJnZXQsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMLCBOVUxMKTsKLQkJaW5vdGlmeV9pbm9kZV9pc19kZWFkKHRhcmdldCk7Ci0KLQkJLyogdGhpcyBpcyByZWFsbHkgYSBsaW5rX2NvdW50IGNoYW5nZSBub3QgYSByZW1vdmFsICovCisJaWYgKHRhcmdldCkKIAkJZnNub3RpZnlfbGlua19jb3VudCh0YXJnZXQpOwotCX0KIAotCWlmIChzb3VyY2UpIHsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzb3VyY2UsIElOX01PVkVfU0VMRiwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKHNvdXJjZSkKIAkJZnNub3RpZnkoc291cmNlLCBGU19NT1ZFX1NFTEYsIG1vdmVkLT5kX2lub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgTlVMTCwgMCk7Ci0JfQogCWF1ZGl0X2lub2RlX2NoaWxkKG1vdmVkLCBuZXdfZGlyKTsKIH0KIApAQCAtMTE3LDYgKzExNiwxNCBAQAogfQogCiAvKgorICogZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlIC0gYSB2ZnNtb3VudCBpcyBiZWluZyBkZXN0cm95ZWQsIGNsZWFuIHVwIGlzIG5lZWRlZAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCV9fZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlKG1udCk7Cit9CisKKy8qCiAgKiBmc25vdGlmeV9uYW1lcmVtb3ZlIC0gYSBmaWxlbmFtZSB3YXMgcmVtb3ZlZCBmcm9tIGEgZGlyZWN0b3J5CiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9uYW1lcmVtb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGlzZGlyKQpAQCAtMTI2LDcgKzEzMyw3IEBACiAJaWYgKGlzZGlyKQogCQltYXNrIHw9IEZTX0lOX0lTRElSOwogCi0JZnNub3RpZnlfcGFyZW50KGRlbnRyeSwgbWFzayk7CisJZnNub3RpZnlfcGFyZW50KE5VTEwsIGRlbnRyeSwgbWFzayk7CiB9CiAKIC8qCkBAIC0xMzQsOSArMTQxLDYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fREVMRVRFX1NFTEYsIDAsIE5VTEwsIE5VTEwpOwotCWlub3RpZnlfaW5vZGVfaXNfZGVhZChpbm9kZSk7Ci0KIAlmc25vdGlmeShpbm9kZSwgRlNfREVMRVRFX1NFTEYsIGlub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgTlVMTCwgMCk7CiAJX19mc25vdGlmeV9pbm9kZV9kZWxldGUoaW5vZGUpOwogfQpAQCAtMTQ2LDggKzE1MCw2IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURSwgMCwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgIGRlbnRyeS0+ZF9pbm9kZSk7CiAJYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LCBpbm9kZSk7CiAKIAlmc25vdGlmeShpbm9kZSwgRlNfQ1JFQVRFLCBkZW50cnktPmRfaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBkZW50cnktPmRfbmFtZS5uYW1lLCAwKTsKQEAgLTE2MCw4ICsxNjIsNiBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKIHsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGRpciwgSU5fQ1JFQVRFLCAwLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJCQkgIGlub2RlKTsKIAlmc25vdGlmeV9saW5rX2NvdW50KGlub2RlKTsKIAlhdWRpdF9pbm9kZV9jaGlsZChuZXdfZGVudHJ5LCBkaXIpOwogCkBAIC0xNzYsNyArMTc2LDYgQEAKIAlfX3UzMiBtYXNrID0gKEZTX0NSRUFURSB8IEZTX0lOX0lTRElSKTsKIAlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkX2lub2RlKTsKIAlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnksIGlub2RlKTsKIAogCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBkX2lub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgZGVudHJ5LT5kX25hbWUubmFtZSwgMCk7CkBAIC0xODUsNTIgKzE4NCw1MiBAQAogLyoKICAqIGZzbm90aWZ5X2FjY2VzcyAtIGZpbGUgd2FzIHJlYWQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2FjY2VzcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJX191MzIgbWFzayA9IEZTX0FDQ0VTUzsKIAogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQltYXNrIHw9IEZTX0lOX0lTRElSOwogCi0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7Ci0KLQlmc25vdGlmeV9wYXJlbnQoZGVudHJ5LCBtYXNrKTsKLQlmc25vdGlmeShpbm9kZSwgbWFzaywgaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBOVUxMLCAwKTsKKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9OT05PVElGWSkpIHsKKwkJZnNub3RpZnlfcGFyZW50KGZpbGUsIE5VTEwsIG1hc2spOworCQlmc25vdGlmeShpbm9kZSwgbWFzaywgZmlsZSwgRlNOT1RJRllfRVZFTlRfRklMRSwgTlVMTCwgMCk7CisJfQogfQogCiAvKgogICogZnNub3RpZnlfbW9kaWZ5IC0gZmlsZSB3YXMgbW9kaWZpZWQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21vZGlmeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbW9kaWZ5KHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJX191MzIgbWFzayA9IEZTX01PRElGWTsKIAogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQltYXNrIHw9IEZTX0lOX0lTRElSOwogCi0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7Ci0KLQlmc25vdGlmeV9wYXJlbnQoZGVudHJ5LCBtYXNrKTsKLQlmc25vdGlmeShpbm9kZSwgbWFzaywgaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBOVUxMLCAwKTsKKwlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9OT05PVElGWSkpIHsKKwkJZnNub3RpZnlfcGFyZW50KGZpbGUsIE5VTEwsIG1hc2spOworCQlmc25vdGlmeShpbm9kZSwgbWFzaywgZmlsZSwgRlNOT1RJRllfRVZFTlRfRklMRSwgTlVMTCwgMCk7CisJfQogfQogCiAvKgogICogZnNub3RpZnlfb3BlbiAtIGZpbGUgd2FzIG9wZW5lZAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCV9fdTMyIG1hc2sgPSBGU19PUEVOOwogCiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCW1hc2sgfD0gRlNfSU5fSVNESVI7CiAKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKLQotCWZzbm90aWZ5X3BhcmVudChkZW50cnksIG1hc2spOwotCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBpbm9kZSwgRlNOT1RJRllfRVZFTlRfSU5PREUsIE5VTEwsIDApOworCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX05PTk9USUZZKSkgeworCQlmc25vdGlmeV9wYXJlbnQoZmlsZSwgTlVMTCwgbWFzayk7CisJCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBmaWxlLCBGU05PVElGWV9FVkVOVF9GSUxFLCBOVUxMLCAwKTsKKwl9CiB9CiAKIC8qCkBAIC0yMzgsMTggKzIzNywxNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCWZtb2RlX3QgbW9kZSA9IGZpbGUtPmZfbW9kZTsKIAlfX3UzMiBtYXNrID0gKG1vZGUgJiBGTU9ERV9XUklURSkgPyBGU19DTE9TRV9XUklURSA6IEZTX0NMT1NFX05PV1JJVEU7CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJbWFzayB8PSBGU19JTl9JU0RJUjsKIAotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwotCi0JZnNub3RpZnlfcGFyZW50KGRlbnRyeSwgbWFzayk7Ci0JZnNub3RpZnkoaW5vZGUsIG1hc2ssIGZpbGUsIEZTTk9USUZZX0VWRU5UX0ZJTEUsIE5VTEwsIDApOworCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX05PTk9USUZZKSkgeworCQlmc25vdGlmeV9wYXJlbnQoZmlsZSwgTlVMTCwgbWFzayk7CisJCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBmaWxlLCBGU05PVElGWV9FVkVOVF9GSUxFLCBOVUxMLCAwKTsKKwl9CiB9CiAKIC8qCkBAIC0yNjMsOSArMjYxLDcgQEAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJbWFzayB8PSBGU19JTl9JU0RJUjsKIAotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwotCi0JZnNub3RpZnlfcGFyZW50KGRlbnRyeSwgbWFzayk7CisJZnNub3RpZnlfcGFyZW50KE5VTEwsIGRlbnRyeSwgbWFzayk7CiAJZnNub3RpZnkoaW5vZGUsIG1hc2ssIGlub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgTlVMTCwgMCk7CiB9CiAKQEAgLTI5OSwxOSArMjk1LDE4IEBACiAJaWYgKG1hc2spIHsKIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCQltYXNrIHw9IEZTX0lOX0lTRElSOwotCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIAotCQlmc25vdGlmeV9wYXJlbnQoZGVudHJ5LCBtYXNrKTsKKwkJZnNub3RpZnlfcGFyZW50KE5VTEwsIGRlbnRyeSwgbWFzayk7CiAJCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBpbm9kZSwgRlNOT1RJRllfRVZFTlRfSU5PREUsIE5VTEwsIDApOwogCX0KIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0lOT1RJRlkpIHx8IGRlZmluZWQoQ09ORklHX0ZTTk9USUZZKQkvKiBub3RpZnkgaGVscGVycyAqLworI2lmIGRlZmluZWQoQ09ORklHX0ZTTk9USUZZKQkvKiBub3RpZnkgaGVscGVycyAqLwogCiAvKgogICogZnNub3RpZnlfb2xkbmFtZV9pbml0IC0gc2F2ZSBvZmYgdGhlIG9sZCBmaWxlbmFtZSBiZWZvcmUgd2UgY2hhbmdlIGl0CiAgKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZnNub3RpZnlfb2xkbmFtZV9pbml0KGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZzbm90aWZ5X29sZG5hbWVfaW5pdChjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQogewogCXJldHVybiBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwogfQpAQCAtMzE5LDIyICszMTQsMjIgQEAKIC8qCiAgKiBmc25vdGlmeV9vbGRuYW1lX2ZyZWUgLSBmcmVlIHRoZSBuYW1lIHdlIGdvdCBmcm9tIGZzbm90aWZ5X29sZG5hbWVfaW5pdAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfb2xkbmFtZV9mcmVlKGNvbnN0IGNoYXIgKm9sZF9uYW1lKQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X29sZG5hbWVfZnJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSkKIHsKIAlrZnJlZShvbGRfbmFtZSk7CiB9CiAKLSNlbHNlCS8qIENPTkZJR19JTk9USUZZIHx8IENPTkZJR19GU05PVElGWSAqLworI2Vsc2UJLyogQ09ORklHX0ZTTk9USUZZICovCiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZnNub3RpZnlfb2xkbmFtZV9pbml0KGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmZzbm90aWZ5X29sZG5hbWVfaW5pdChjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfb2xkbmFtZV9mcmVlKGNvbnN0IGNoYXIgKm9sZF9uYW1lKQorc3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X29sZG5hbWVfZnJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSkKIHsKIH0KIAotI2VuZGlmCS8qICEgQ09ORklHX0lOT1RJRlkgKi8KKyNlbmRpZgkvKiAgQ09ORklHX0ZTTk9USUZZICovCiAKICNlbmRpZgkvKiBfTElOVVhfRlNfTk9USUZZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNub3RpZnlfYmFja2VuZC5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKaW5kZXggNGQ2ZjQ3Yi4uOWJiZmQ3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeV9iYWNrZW5kLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjZGVmaW5lIEZTX1FfT1ZFUkZMT1cJCTB4MDAwMDQwMDAJLyogRXZlbnQgcXVldWVkIG92ZXJmbG93ZWQgKi8KICNkZWZpbmUgRlNfSU5fSUdOT1JFRAkJMHgwMDAwODAwMAkvKiBsYXN0IGlub3RpZnkgZXZlbnQgaGVyZSAqLwogCisjZGVmaW5lIEZTX09QRU5fUEVSTQkJMHgwMDAxMDAwMAkvKiBvcGVuIGV2ZW50IGluIGFuIHBlcm1pc3Npb24gaG9vayAqLworI2RlZmluZSBGU19BQ0NFU1NfUEVSTQkJMHgwMDAyMDAwMAkvKiBhY2Nlc3MgZXZlbnQgaW4gYSBwZXJtaXNzaW9ucyBob29rICovCisKKyNkZWZpbmUgRlNfRVhDTF9VTkxJTksJCTB4MDQwMDAwMDAJLyogZG8gbm90IHNlbmQgZXZlbnRzIGlmIG9iamVjdCBpcyB1bmxpbmtlZCAqLwogI2RlZmluZSBGU19JTl9JU0RJUgkJMHg0MDAwMDAwMAkvKiBldmVudCBvY2N1cnJlZCBhZ2FpbnN0IGRpciAqLwogI2RlZmluZSBGU19JTl9PTkVTSE9UCQkweDgwMDAwMDAwCS8qIG9ubHkgc2VuZCBldmVudCBvbmNlICovCiAKQEAgLTU4LDEzICs2MiwyMCBAQAogCQkJCSAgIEZTX01PVkVEX0ZST00gfCBGU19NT1ZFRF9UTyB8IEZTX0NSRUFURSB8XAogCQkJCSAgIEZTX0RFTEVURSkKIAotLyogbGlzdGVuZXJzIHRoYXQgaGFyZCBjb2RlIGdyb3VwIG51bWJlcnMgbmVhciB0aGUgdG9wICovCi0jZGVmaW5lIEROT1RJRllfR1JPVVBfTlVNCVVJTlRfTUFYCi0jZGVmaW5lIElOT1RJRllfR1JPVVBfTlVNCShETk9USUZZX0dST1VQX05VTS0xKQorI2RlZmluZSBGU19NT1ZFCQkJKEZTX01PVkVEX0ZST00gfCBGU19NT1ZFRF9UTykKKworI2RlZmluZSBBTExfRlNOT1RJRllfRVZFTlRTIChGU19BQ0NFU1MgfCBGU19NT0RJRlkgfCBGU19BVFRSSUIgfCBcCisJCQkgICAgIEZTX0NMT1NFX1dSSVRFIHwgRlNfQ0xPU0VfTk9XUklURSB8IEZTX09QRU4gfCBcCisJCQkgICAgIEZTX01PVkVEX0ZST00gfCBGU19NT1ZFRF9UTyB8IEZTX0NSRUFURSB8IFwKKwkJCSAgICAgRlNfREVMRVRFIHwgRlNfREVMRVRFX1NFTEYgfCBGU19NT1ZFX1NFTEYgfCBcCisJCQkgICAgIEZTX1VOTU9VTlQgfCBGU19RX09WRVJGTE9XIHwgRlNfSU5fSUdOT1JFRCB8IFwKKwkJCSAgICAgRlNfT1BFTl9QRVJNIHwgRlNfQUNDRVNTX1BFUk0gfCBGU19FWENMX1VOTElOSyB8IFwKKwkJCSAgICAgRlNfSU5fSVNESVIgfCBGU19JTl9PTkVTSE9UIHwgRlNfRE5fUkVOQU1FIHwgXAorCQkJICAgICBGU19ETl9NVUxUSVNIT1QgfCBGU19FVkVOVF9PTl9DSElMRCkKIAogc3RydWN0IGZzbm90aWZ5X2dyb3VwOwogc3RydWN0IGZzbm90aWZ5X2V2ZW50Owotc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnk7CitzdHJ1Y3QgZnNub3RpZnlfbWFyazsKIHN0cnVjdCBmc25vdGlmeV9ldmVudF9wcml2YXRlX2RhdGE7CiAKIC8qCkBAIC04MCwxMCArOTEsMTYgQEAKICAqCQl2YWxpZCBncm91cCBhbmQgaW5vZGUgdG8gdXNlIHRvIGNsZWFuIHVwLgogICovCiBzdHJ1Y3QgZnNub3RpZnlfb3BzIHsKLQlib29sICgqc2hvdWxkX3NlbmRfZXZlbnQpKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIF9fdTMyIG1hc2spOwotCWludCAoKmhhbmRsZV9ldmVudCkoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCk7CisJYm9vbCAoKnNob3VsZF9zZW5kX2V2ZW50KShzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssCisJCQkJICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCQkgIF9fdTMyIG1hc2ssIHZvaWQgKmRhdGEsIGludCBkYXRhX3R5cGUpOworCWludCAoKmhhbmRsZV9ldmVudCkoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwKKwkJCSAgICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqaW5vZGVfbWFyaywKKwkJCSAgICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCSAgICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50KTsKIAl2b2lkICgqZnJlZV9ncm91cF9wcml2KShzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKTsKLQl2b2lkICgqZnJlZWluZ19tYXJrKShzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnksIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXApOworCXZvaWQgKCpmcmVlaW5nX21hcmspKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKTsKIAl2b2lkICgqZnJlZV9ldmVudF9wcml2KShzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhICpwcml2KTsKIH07CiAKQEAgLTk1LDIyICsxMTIsNiBAQAogICovCiBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgewogCS8qCi0JICogZ2xvYmFsIGxpc3Qgb2YgYWxsIGdyb3VwcyByZWNlaXZpbmcgZXZlbnRzIGZyb20gZnNub3RpZnkuCi0JICogYW5jaG9yZWQgYnkgZnNub3RpZnlfZ3JvdXBzIGFuZCBwcm90ZWN0ZWQgYnkgZWl0aGVyIGZzbm90aWZ5X2dycF9tdXRleAotCSAqIG9yIGZzbm90aWZ5X2dycF9zcmN1IGRlcGVuZGluZyBvbiB3cml0ZSB2cyByZWFkLgotCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZ3JvdXBfbGlzdDsKLQotCS8qCi0JICogRGVmaW5lcyBhbGwgb2YgdGhlIGV2ZW50IHR5cGVzIGluIHdoaWNoIHRoaXMgZ3JvdXAgaXMgaW50ZXJlc3RlZC4KLQkgKiBUaGlzIG1hc2sgaXMgYSBiaXR3aXNlIE9SIG9mIHRoZSBGU18qIGV2ZW50cyBmcm9tIGFib3ZlLiAgRWFjaCB0aW1lCi0JICogdGhpcyBtYXNrIGNoYW5nZXMgZm9yIGEgZ3JvdXAgKGlmIGl0IGNoYW5nZXMpIHRoZSBjb3JyZWN0IGZ1bmN0aW9ucwotCSAqIG11c3QgYmUgY2FsbGVkIHRvIHVwZGF0ZSB0aGUgZ2xvYmFsIHN0cnVjdHVyZXMgd2hpY2ggaW5kaWNhdGUgZ2xvYmFsCi0JICogaW50ZXJlc3QgaW4gZXZlbnQgdHlwZXMuCi0JICovCi0JX191MzIgbWFzazsKLQotCS8qCiAJICogSG93IHRoZSByZWZjbnQgaXMgdXNlZCBpcyB1cCB0byBlYWNoIGdyb3VwLiAgV2hlbiB0aGUgcmVmY250IGhpdHMgMAogCSAqIGZzbm90aWZ5IHdpbGwgY2xlYW4gdXAgYWxsIG9mIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ3JvdXAuCiAJICogQXMgYW4gZXhhbXBsZSwgdGhlIGRub3RpZnkgZ3JvdXAgd2lsbCBhbHdheXMgaGF2ZSBhIHJlZmNudD0xIGFuZCB0aGF0CkBAIC0xMTksNyArMTIwLDYgQEAKIAkgKiBjbG9zZWQuCiAJICovCiAJYXRvbWljX3QgcmVmY250OwkJLyogdGhpbmdzIHdpdGggaW50ZXJlc3QgaW4gdGhpcyBncm91cCAqLwotCXVuc2lnbmVkIGludCBncm91cF9udW07CQkvKiBzaW1wbHkgcHJldmVudHMgYWNjaWRlbnRhbCBncm91cCBjb2xsaXNpb24gKi8KIAogCWNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgKm9wczsJLyogaG93IHRoaXMgZ3JvdXAgaGFuZGxlcyB0aGluZ3MgKi8KIApAQCAtMTMwLDE1ICsxMzAsMTIgQEAKIAl1bnNpZ25lZCBpbnQgcV9sZW47CQkJLyogZXZlbnRzIG9uIHRoZSBxdWV1ZSAqLwogCXVuc2lnbmVkIGludCBtYXhfZXZlbnRzOwkJLyogbWF4aW11bSBldmVudHMgYWxsb3dlZCBvbiB0aGUgbGlzdCAqLwogCi0JLyogc3RvcmVzIGFsbCBmYXN0YXB0aCBlbnRyaWVzIGFzc29jIHdpdGggdGhpcyBncm91cCBzbyB0aGV5IGNhbiBiZSBjbGVhbmVkIG9uIHVucmVnaXN0ZXIgKi8KLQlzcGlubG9ja190IG1hcmtfbG9jazsJCS8qIHByb3RlY3QgbWFya19lbnRyaWVzIGxpc3QgKi8KLQlhdG9taWNfdCBudW1fbWFya3M7CQkvKiAxIGZvciBlYWNoIG1hcmsgZW50cnkgYW5kIDEgZm9yIG5vdCBiZWluZworCS8qIHN0b3JlcyBhbGwgZmFzdHBhdGggbWFya3MgYXNzb2Mgd2l0aCB0aGlzIGdyb3VwIHNvIHRoZXkgY2FuIGJlIGNsZWFuZWQgb24gdW5yZWdpc3RlciAqLworCXNwaW5sb2NrX3QgbWFya19sb2NrOwkJLyogcHJvdGVjdCBtYXJrc19saXN0ICovCisJYXRvbWljX3QgbnVtX21hcmtzOwkJLyogMSBmb3IgZWFjaCBtYXJrIGFuZCAxIGZvciBub3QgYmVpbmcKIAkJCQkJICogcGFzdCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIHdoZW4gZnJlZWluZwogCQkJCQkgKiBhIGdyb3VwICovCi0Jc3RydWN0IGxpc3RfaGVhZCBtYXJrX2VudHJpZXM7CS8qIGFsbCBpbm9kZSBtYXJrIGVudHJpZXMgZm9yIHRoaXMgZ3JvdXAgKi8KLQotCS8qIHByZXZlbnRzIGRvdWJsZSBsaXN0X2RlbCBvZiBncm91cF9saXN0LiAgcHJvdGVjdGVkIGJ5IGdsb2JhbCBmc25vdGlmeV9ncnBfbXV0ZXggKi8KLQlib29sIG9uX2dyb3VwX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBtYXJrc19saXN0OwkvKiBhbGwgaW5vZGUgbWFya3MgZm9yIHRoaXMgZ3JvdXAgKi8KIAogCS8qIGdyb3VwcyBjYW4gZGVmaW5lIHByaXZhdGUgZmllbGRzIGhlcmUgb3IgdXNlIHRoZSB2b2lkICpwcml2YXRlICovCiAJdW5pb24gewpAQCAtMTUyLDYgKzE0OSwxNyBAQAogCQkJc3RydWN0IHVzZXJfc3RydWN0ICAgICAgKnVzZXI7CiAJCX0gaW5vdGlmeV9kYXRhOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZBTk9USUZZCisJCXN0cnVjdCBmYW5vdGlmeV9ncm91cF9wcml2YXRlX2RhdGEgeworI2lmZGVmIENPTkZJR19GQU5PVElGWV9BQ0NFU1NfUEVSTUlTU0lPTlMKKwkJCS8qIGFsbG93cyBhIGdyb3VwIHRvIGJsb2NrIHdhaXRpbmcgZm9yIGEgdXNlcnNwYWNlIHJlc3BvbnNlICovCisJCQlzdHJ1Y3QgbXV0ZXggYWNjZXNzX211dGV4OworCQkJc3RydWN0IGxpc3RfaGVhZCBhY2Nlc3NfbGlzdDsKKwkJCXdhaXRfcXVldWVfaGVhZF90IGFjY2Vzc193YWl0cTsKKyNlbmRpZiAvKiBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TICovCisJCQlpbnQgZl9mbGFnczsKKwkJfSBmYW5vdGlmeV9kYXRhOworI2VuZGlmIC8qIENPTkZJR19GQU5PVElGWSAqLwogCX07CiB9OwogCkBAIC0xOTUsMzUgKzIwMyw1NyBAQAogCS8qIHRvX3RlbGwgbWF5IE9OTFkgYmUgZGVyZWZlcmVuY2VkIGR1cmluZyBoYW5kbGVfZXZlbnQoKS4gKi8KIAlzdHJ1Y3QgaW5vZGUgKnRvX3RlbGw7CS8qIGVpdGhlciB0aGUgaW5vZGUgdGhlIGV2ZW50IGhhcHBlbmVkIHRvIG9yIGl0cyBwYXJlbnQgKi8KIAkvKgotCSAqIGRlcGVuZGluZyBvbiB0aGUgZXZlbnQgdHlwZSB3ZSBzaG91bGQgaGF2ZSBlaXRoZXIgYSBwYXRoIG9yIGlub2RlCi0JICogV2UgaG9sZCBhIHJlZmVyZW5jZSBvbiBwYXRoLCBidXQgTk9UIG9uIGlub2RlLiAgU2luY2Ugd2UgaGF2ZSB0aGUgcmVmIG9uCi0JICogdGhlIHBhdGgsIGl0IG1heSBiZSBkZXJlZmVyZW5jZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGlzIG9iamVjdCdzCisJICogZGVwZW5kaW5nIG9uIHRoZSBldmVudCB0eXBlIHdlIHNob3VsZCBoYXZlIGVpdGhlciBhIGZpbGUgb3IgaW5vZGUKKwkgKiBXZSBob2xkIGEgcmVmZXJlbmNlIG9uIGZpbGUsIGJ1dCBOT1Qgb24gaW5vZGUuICBTaW5jZSB3ZSBoYXZlIHRoZSByZWYgb24KKwkgKiB0aGUgZmlsZSwgaXQgbWF5IGJlIGRlcmVmZXJlbmNlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoaXMgb2JqZWN0J3MKIAkgKiBsaWZldGltZS4gIFRoYXQgcmVmZXJlbmNlIGlzIGRyb3BwZWQgd2hlbiB0aGlzIG9iamVjdCdzIHJlZmNudCBoaXRzCi0JICogMC4gIElmIHRoaXMgZXZlbnQgY29udGFpbnMgYW4gaW5vZGUgaW5zdGVhZCBvZiBhIHBhdGgsIHRoZSBpbm9kZSBtYXkKKwkgKiAwLiAgSWYgdGhpcyBldmVudCBjb250YWlucyBhbiBpbm9kZSBpbnN0ZWFkIG9mIGEgZmlsZSwgdGhlIGlub2RlIG1heQogCSAqIE9OTFkgYmUgdXNlZCBkdXJpbmcgaGFuZGxlX2V2ZW50KCkuCiAJICovCiAJdW5pb24gewotCQlzdHJ1Y3QgcGF0aCBwYXRoOworCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAkJc3RydWN0IGlub2RlICppbm9kZTsKIAl9OwogLyogd2hlbiBjYWxsaW5nIGZzbm90aWZ5IHRlbGwgaXQgaWYgdGhlIGRhdGEgaXMgYSBwYXRoIG9yIGlub2RlICovCiAjZGVmaW5lIEZTTk9USUZZX0VWRU5UX05PTkUJMAotI2RlZmluZSBGU05PVElGWV9FVkVOVF9QQVRICTEKKyNkZWZpbmUgRlNOT1RJRllfRVZFTlRfRklMRQkxCiAjZGVmaW5lIEZTTk9USUZZX0VWRU5UX0lOT0RFCTIKLSNkZWZpbmUgRlNOT1RJRllfRVZFTlRfRklMRQkzCiAJaW50IGRhdGFfdHlwZTsJCS8qIHdoaWNoIG9mIHRoZSBhYm92ZSB1bmlvbiB3ZSBoYXZlICovCiAJYXRvbWljX3QgcmVmY250OwkvKiBob3cgbWFueSBncm91cHMgc3RpbGwgYXJlIHVzaW5nL25lZWQgdG8gc2VuZCB0aGlzIGV2ZW50ICovCiAJX191MzIgbWFzazsJCS8qIHRoZSB0eXBlIG9mIGFjY2VzcywgYml0d2lzZSBPUiBmb3IgRlNfKiBldmVudCB0eXBlcyAqLwogCiAJdTMyIHN5bmNfY29va2llOwkvKiB1c2VkIHRvIGNvcnJvbGF0ZSBldmVudHMsIG5hbWVseSBpbm90aWZ5IG12IGV2ZW50cyAqLwotCWNoYXIgKmZpbGVfbmFtZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmaWxlX25hbWU7CiAJc2l6ZV90IG5hbWVfbGVuOworCXN0cnVjdCBwaWQgKnRnaWQ7CisKKyNpZmRlZiBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TCisJX191MzIgcmVzcG9uc2U7CS8qIHVzZXJzcGFjZSBhbnN3ZXIgdG8gcXVlc3Rpb24gKi8KKyNlbmRpZiAvKiBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHByaXZhdGVfZGF0YV9saXN0OwkvKiBncm91cHMgY2FuIHN0b3JlIHByaXZhdGUgZGF0YSBoZXJlICovCiB9OwogCiAvKgotICogYSBtYXJrIGlzIHNpbXBseSBhbiBlbnRyeSBhdHRhY2hlZCB0byBhbiBpbiBjb3JlIGlub2RlIHdoaWNoIGFsbG93cyBhbgorICogSW5vZGUgc3BlY2lmaWMgZmllbGRzIGluIGFuIGZzbm90aWZ5X21hcmsKKyAqLworc3RydWN0IGZzbm90aWZ5X2lub2RlX21hcmsgeworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CQkvKiBpbm9kZSB0aGlzIG1hcmsgaXMgYXNzb2NpYXRlZCB3aXRoICovCisJc3RydWN0IGhsaXN0X25vZGUgaV9saXN0OwkvKiBsaXN0IG9mIG1hcmtzIGJ5IGlub2RlLT5pX2Zzbm90aWZ5X21hcmtzICovCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2lfbGlzdDsJLyogdG1wIGxpc3QgdXNlZCB3aGVuIGZyZWVpbmcgdGhpcyBtYXJrICovCit9OworCisvKgorICogTW91bnQgcG9pbnQgc3BlY2lmaWMgZmllbGRzIGluIGFuIGZzbm90aWZ5X21hcmsKKyAqLworc3RydWN0IGZzbm90aWZ5X3Zmc21vdW50X21hcmsgeworCXN0cnVjdCB2ZnNtb3VudCAqbW50OwkJLyogdmZzbW91bnQgdGhpcyBtYXJrIGlzIGFzc29jaWF0ZWQgd2l0aCAqLworCXN0cnVjdCBobGlzdF9ub2RlIG1fbGlzdDsJLyogbGlzdCBvZiBtYXJrcyBieSBpbm9kZS0+aV9mc25vdGlmeV9tYXJrcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9tX2xpc3Q7CS8qIHRtcCBsaXN0IHVzZWQgd2hlbiBmcmVlaW5nIHRoaXMgbWFyayAqLworfTsKKworLyoKKyAqIGEgbWFyayBpcyBzaW1wbHkgYW4gb2JqZWN0IGF0dGFjaGVkIHRvIGFuIGluIGNvcmUgaW5vZGUgd2hpY2ggYWxsb3dzIGFuCiAgKiBmc25vdGlmeSBsaXN0ZW5lciB0byBpbmRpY2F0ZSB0aGV5IGFyZSBlaXRoZXIgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gZXZlbnRzCiAgKiBvZiBhIHR5cGUgbWF0Y2hpbmcgbWFzayBvciBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgZXZlbnRzLgogICoKQEAgLTIzMiwxOSArMjYyLDI4IEBACiAgKiAoc3VjaCBhcyBkbm90aWZ5KSB3aWxsIGZsdXNoIHRoZXNlIHdoZW4gdGhlIG9wZW4gZmQgaXMgY2xvc2VkIGFuZCBub3QgYXQKICAqIGlub2RlIGV2aWN0aW9uIG9yIG1vZGlmaWNhdGlvbi4KICAqLwotc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgewotCV9fdTMyIG1hc2s7CQkJLyogbWFzayB0aGlzIG1hcmsgZW50cnkgaXMgZm9yICovCitzdHJ1Y3QgZnNub3RpZnlfbWFyayB7CisJX191MzIgbWFzazsJCQkvKiBtYXNrIHRoaXMgbWFyayBpcyBmb3IgKi8KIAkvKiB3ZSBob2xkIHJlZiBmb3IgZWFjaCBpX2xpc3QgYW5kIGdfbGlzdC4gIGFsc28gb25lIHJlZiBmb3IgZWFjaCAndGhpbmcnCiAJICogaW4ga2VybmVsIHRoYXQgZm91bmQgYW5kIG1heSBiZSB1c2luZyB0aGlzIG1hcmsuICovCiAJYXRvbWljX3QgcmVmY250OwkJLyogYWN0aXZlIHRoaW5ncyBsb29raW5nIGF0IHRoaXMgbWFyayAqLwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CQkvKiBpbm9kZSB0aGlzIGVudHJ5IGlzIGFzc29jaWF0ZWQgd2l0aCAqLwotCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXA7CS8qIGdyb3VwIHRoaXMgbWFyayBlbnRyeSBpcyBmb3IgKi8KLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBpX2xpc3Q7CS8qIGxpc3Qgb2YgbWFya19lbnRyaWVzIGJ5IGlub2RlLT5pX2Zzbm90aWZ5X21hcmtfZW50cmllcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZ19saXN0OwkvKiBsaXN0IG9mIG1hcmtfZW50cmllcyBieSBncm91cC0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMgKi8KLQlzcGlubG9ja190IGxvY2s7CQkvKiBwcm90ZWN0IGdyb3VwLCBpbm9kZSwgYW5kIGtpbGxtZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9pX2xpc3Q7CS8qIHRtcCBsaXN0IHVzZWQgd2hlbiBmcmVlaW5nIHRoaXMgbWFyayAqLworCXN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXA7CS8qIGdyb3VwIHRoaXMgbWFyayBpcyBmb3IgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGdfbGlzdDsJLyogbGlzdCBvZiBtYXJrcyBieSBncm91cC0+aV9mc25vdGlmeV9tYXJrcyAqLworCXNwaW5sb2NrX3QgbG9jazsJCS8qIHByb3RlY3QgZ3JvdXAgYW5kIGlub2RlICovCisJdW5pb24geworCQlzdHJ1Y3QgZnNub3RpZnlfaW5vZGVfbWFyayBpOworCQlzdHJ1Y3QgZnNub3RpZnlfdmZzbW91bnRfbWFyayBtOworCX07CisJX191MzIgaWdub3JlZF9tYXNrOwkJLyogZXZlbnRzIHR5cGVzIHRvIGlnbm9yZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9nX2xpc3Q7CS8qIHRtcCBsaXN0IHVzZWQgd2hlbiBmcmVlaW5nIHRoaXMgbWFyayAqLwotCXZvaWQgKCpmcmVlX21hcmspKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSk7IC8qIGNhbGxlZCBvbiBmaW5hbCBwdXQrZnJlZSAqLworI2RlZmluZSBGU05PVElGWV9NQVJLX0ZMQUdfSU5PREUJCTB4MDEKKyNkZWZpbmUgRlNOT1RJRllfTUFSS19GTEFHX1ZGU01PVU5UCQkweDAyCisjZGVmaW5lIEZTTk9USUZZX01BUktfRkxBR19PQkpFQ1RfUElOTkVECTB4MDQKKyNkZWZpbmUgRlNOT1RJRllfTUFSS19GTEFHX0lHTk9SRURfU1VSVl9NT0RJRlkJMHgwOAorI2RlZmluZSBGU05PVElGWV9NQVJLX0ZMQUdfQUxJVkUJCTB4MTAKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiB2ZnNtb3VudCBvciBpbm9kZSBtYXJrPyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZGVzdHJveV9saXN0OworCXZvaWQgKCpmcmVlX21hcmspKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsgLyogY2FsbGVkIG9uIGZpbmFsIHB1dCtmcmVlICovCiB9OwogCiAjaWZkZWYgQ09ORklHX0ZTTk9USUZZCkBAIC0yNTIsMTAgKzI5MSwxMSBAQAogLyogY2FsbGVkIGZyb20gdGhlIHZmcyBoZWxwZXJzICovCiAKIC8qIG1haW4gZnNub3RpZnkgY2FsbCB0byBzZW5kIGV2ZW50cyAqLwotZXh0ZXJuIHZvaWQgZnNub3RpZnkoc3RydWN0IGlub2RlICp0b190ZWxsLCBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV9pcywKLQkJICAgICBjb25zdCBjaGFyICpuYW1lLCB1MzIgY29va2llKTsKLWV4dGVybiB2b2lkIF9fZnNub3RpZnlfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX191MzIgbWFzayk7CitleHRlcm4gaW50IGZzbm90aWZ5KHN0cnVjdCBpbm9kZSAqdG9fdGVsbCwgX191MzIgbWFzaywgdm9pZCAqZGF0YSwgaW50IGRhdGFfaXMsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1MzIgY29va2llKTsKK2V4dGVybiB2b2lkIF9fZnNub3RpZnlfcGFyZW50KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIF9fdTMyIG1hc2spOwogZXh0ZXJuIHZvaWQgX19mc25vdGlmeV9pbm9kZV9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBfX2Zzbm90aWZ5X3Zmc21vdW50X2RlbGV0ZShzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gdTMyIGZzbm90aWZ5X2dldF9jb29raWUodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGZzbm90aWZ5X2lub2RlX3dhdGNoZXNfY2hpbGRyZW4oc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTMwNCwxNSArMzQ0LDkgQEAKIAogLyogY2FsbGVkIGZyb20gZnNub3RpZnkgbGlzdGVuZXJzLCBzdWNoIGFzIGZhbm90aWZ5IG9yIGRub3RpZnkgKi8KIAotLyogbXVzdCBjYWxsIHdoZW4gYSBncm91cCBjaGFuZ2VzIGl0cyAtPm1hc2sgKi8KLWV4dGVybiB2b2lkIGZzbm90aWZ5X3JlY2FsY19nbG9iYWxfbWFzayh2b2lkKTsKIC8qIGdldCBhIHJlZmVyZW5jZSB0byBhbiBleGlzdGluZyBvciBjcmVhdGUgYSBuZXcgZ3JvdXAgKi8KLWV4dGVybiBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmZzbm90aWZ5X29idGFpbl9ncm91cCh1bnNpZ25lZCBpbnQgZ3JvdXBfbnVtLAotCQkJCQkJICAgIF9fdTMyIG1hc2ssCi0JCQkJCQkgICAgY29uc3Qgc3RydWN0IGZzbm90aWZ5X29wcyAqb3BzKTsKLS8qIHJ1biBhbGwgbWFya3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZ3JvdXAgYW5kIHVwZGF0ZSBncm91cC0+bWFzayAqLwotZXh0ZXJuIHZvaWQgZnNub3RpZnlfcmVjYWxjX2dyb3VwX21hc2soc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCk7Ci0vKiBkcm9wIHJlZmVyZW5jZSBvbiBhIGdyb3VwIGZyb20gZnNub3RpZnlfb2J0YWluX2dyb3VwICovCitleHRlcm4gc3RydWN0IGZzbm90aWZ5X2dyb3VwICpmc25vdGlmeV9hbGxvY19ncm91cChjb25zdCBzdHJ1Y3QgZnNub3RpZnlfb3BzICpvcHMpOworLyogZHJvcCByZWZlcmVuY2Ugb24gYSBncm91cCBmcm9tIGZzbm90aWZ5X2FsbG9jX2dyb3VwICovCiBleHRlcm4gdm9pZCBmc25vdGlmeV9wdXRfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCk7CiAKIC8qIHRha2UgYSByZWZlcmVuY2UgdG8gYW4gZXZlbnQgKi8KQEAgLTMyMyw4ICszNTcsMTEgQEAKIAkJCQkJCQkJCSAgIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZXZlbnQpOwogCiAvKiBhdHRhY2ggdGhlIGV2ZW50IHRvIHRoZSBncm91cCBub3RpZmljYXRpb24gcXVldWUgKi8KLWV4dGVybiBpbnQgZnNub3RpZnlfYWRkX25vdGlmeV9ldmVudChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKmV2ZW50LAotCQkJCSAgICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50X3ByaXZhdGVfZGF0YSAqcHJpdik7CitleHRlcm4gc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpmc25vdGlmeV9hZGRfbm90aWZ5X2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJCQkJc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCwKKwkJCQkJCQlzdHJ1Y3QgZnNub3RpZnlfZXZlbnRfcHJpdmF0ZV9kYXRhICpwcml2LAorCQkJCQkJCXN0cnVjdCBmc25vdGlmeV9ldmVudCAqKCptZXJnZSkoc3RydWN0IGxpc3RfaGVhZCAqLAorCQkJCQkJCQkJCQlzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKikpOwogLyogdHJ1ZSBpZiB0aGUgZ3JvdXAgbm90aWZpY2F0aW9uIHF1ZXVlIGlzIGVtcHR5ICovCiBleHRlcm4gYm9vbCBmc25vdGlmeV9ub3RpZnlfcXVldWVfaXNfZW1wdHkoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCk7CiAvKiByZXR1cm4sIGJ1dCBkbyBub3QgZGVxdWV1ZSB0aGUgZmlyc3QgZXZlbnQgb24gdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZSAqLwpAQCAtMzM0LDM4ICszNzEsNjYgQEAKIAogLyogZnVuY3Rpb25zIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgbWFya3MgYXR0YWNoZWQgdG8gaW5vZGVzICovCiAKKy8qIHJ1biBhbGwgbWFya3MgYXNzb2NpYXRlZCB3aXRoIGEgdmZzbW91bnQgYW5kIHVwZGF0ZSBtbnQtPm1udF9mc25vdGlmeV9tYXNrICovCitleHRlcm4gdm9pZCBmc25vdGlmeV9yZWNhbGNfdmZzbW91bnRfbWFzayhzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiAvKiBydW4gYWxsIG1hcmtzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm9kZSBhbmQgdXBkYXRlIGlub2RlLT5pX2Zzbm90aWZ5X21hc2sgKi8KIGV4dGVybiB2b2lkIGZzbm90aWZ5X3JlY2FsY19pbm9kZV9tYXNrKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotZXh0ZXJuIHZvaWQgZnNub3RpZnlfaW5pdF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSwgdm9pZCAoKmZyZWVfbWFyaykoc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5KSk7CitleHRlcm4gdm9pZCBmc25vdGlmeV9pbml0X21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcmssIHZvaWQgKCpmcmVlX21hcmspKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKSk7CiAvKiBmaW5kIChhbmQgdGFrZSBhIHJlZmVyZW5jZSkgdG8gYSBtYXJrIGFzc29jaWF0ZWQgd2l0aCBncm91cCBhbmQgaW5vZGUgKi8KLWV4dGVybiBzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZnNub3RpZnlfZmluZF9tYXJrX2VudHJ5KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIHN0cnVjdCBmc25vdGlmeV9tYXJrICpmc25vdGlmeV9maW5kX2lub2RlX21hcmsoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSk7CisvKiBmaW5kIChhbmQgdGFrZSBhIHJlZmVyZW5jZSkgdG8gYSBtYXJrIGFzc29jaWF0ZWQgd2l0aCBncm91cCBhbmQgdmZzbW91bnQgKi8KK2V4dGVybiBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZnNub3RpZnlfZmluZF92ZnNtb3VudF9tYXJrKHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKKy8qIGNvcHkgdGhlIHZhbHVlcyBmcm9tIG9sZCBpbnRvIG5ldyAqLworZXh0ZXJuIHZvaWQgZnNub3RpZnlfZHVwbGljYXRlX21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmsgKm5ldywgc3RydWN0IGZzbm90aWZ5X21hcmsgKm9sZCk7CisvKiBzZXQgdGhlIGlnbm9yZWRfbWFzayBvZiBhIG1hcmsgKi8KK2V4dGVybiB2b2lkIGZzbm90aWZ5X3NldF9tYXJrX2lnbm9yZWRfbWFza19sb2NrZWQoc3RydWN0IGZzbm90aWZ5X21hcmsgKm1hcmssIF9fdTMyIG1hc2spOworLyogc2V0IHRoZSBtYXNrIG9mIGEgbWFyayAobWlnaHQgcGluIHRoZSBvYmplY3QgaW50byBtZW1vcnkgKi8KK2V4dGVybiB2b2lkIGZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCBfX3UzMiBtYXNrKTsKIC8qIGF0dGFjaCB0aGUgbWFyayB0byBib3RoIHRoZSBncm91cCBhbmQgdGhlIGlub2RlICovCi1leHRlcm4gaW50IGZzbm90aWZ5X2FkZF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrX2VudHJ5ICplbnRyeSwgc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gaW50IGZzbm90aWZ5X2FkZF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrLCBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IGFsbG93X2R1cHMpOwogLyogZ2l2ZW4gYSBtYXJrLCBmbGFnIGl0IHRvIGJlIGZyZWVkIHdoZW4gYWxsIHJlZmVyZW5jZXMgYXJlIGRyb3BwZWQgKi8KLWV4dGVybiB2b2lkIGZzbm90aWZ5X2Rlc3Ryb3lfbWFya19ieV9lbnRyeShzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpOworZXh0ZXJuIHZvaWQgZnNub3RpZnlfZGVzdHJveV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsKKy8qIHJ1biBhbGwgdGhlIG1hcmtzIGluIGEgZ3JvdXAsIGFuZCBjbGVhciBhbGwgb2YgdGhlIHZmc21vdW50IG1hcmtzICovCitleHRlcm4gdm9pZCBmc25vdGlmeV9jbGVhcl92ZnNtb3VudF9tYXJrc19ieV9ncm91cChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKTsKKy8qIHJ1biBhbGwgdGhlIG1hcmtzIGluIGEgZ3JvdXAsIGFuZCBjbGVhciBhbGwgb2YgdGhlIGlub2RlIG1hcmtzICovCitleHRlcm4gdm9pZCBmc25vdGlmeV9jbGVhcl9pbm9kZV9tYXJrc19ieV9ncm91cChzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwKTsKKy8qIHJ1biBhbGwgdGhlIG1hcmtzIGluIGEgZ3JvdXAsIGFuZCBjbGVhciBhbGwgb2YgdGhlIG1hcmtzIHdoZXJlIG1hcmstPmZsYWdzICYgZmxhZ3MgaXMgdHJ1ZSovCitleHRlcm4gdm9pZCBmc25vdGlmeV9jbGVhcl9tYXJrc19ieV9ncm91cF9mbGFncyhzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmdyb3VwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogLyogcnVuIGFsbCB0aGUgbWFya3MgaW4gYSBncm91cCwgYW5kIGZsYWcgdGhlbSB0byBiZSBmcmVlZCAqLwogZXh0ZXJuIHZvaWQgZnNub3RpZnlfY2xlYXJfbWFya3NfYnlfZ3JvdXAoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCk7Ci1leHRlcm4gdm9pZCBmc25vdGlmeV9nZXRfbWFyayhzdHJ1Y3QgZnNub3RpZnlfbWFya19lbnRyeSAqZW50cnkpOwotZXh0ZXJuIHZvaWQgZnNub3RpZnlfcHV0X21hcmsoc3RydWN0IGZzbm90aWZ5X21hcmtfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB2b2lkIGZzbm90aWZ5X2dldF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsKK2V4dGVybiB2b2lkIGZzbm90aWZ5X3B1dF9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICptYXJrKTsKIGV4dGVybiB2b2lkIGZzbm90aWZ5X3VubW91bnRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwogCiAvKiBwdXQgaGVyZSBiZWNhdXNlIGlub3RpZnkgZG9lcyBzb21lIHdlaXJkIHN0dWZmIHdoZW4gZGVzdHJveWluZyB3YXRjaGVzICovCiBleHRlcm4gc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpmc25vdGlmeV9jcmVhdGVfZXZlbnQoc3RydWN0IGlub2RlICp0b190ZWxsLCBfX3UzMiBtYXNrLAotCQkJCQkJICAgIHZvaWQgKmRhdGEsIGludCBkYXRhX2lzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgIHZvaWQgKmRhdGEsIGludCBkYXRhX2lzLAorCQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJCQkJCQkgICAgdTMyIGNvb2tpZSwgZ2ZwX3QgZ2ZwKTsKIAorLyogZmFub3RpZnkgbGlrZXMgdG8gY2hhbmdlIGV2ZW50cyBhZnRlciB0aGV5IGFyZSBvbiBsaXN0cy4uLiAqLworZXh0ZXJuIHN0cnVjdCBmc25vdGlmeV9ldmVudCAqZnNub3RpZnlfY2xvbmVfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpvbGRfZXZlbnQpOworZXh0ZXJuIGludCBmc25vdGlmeV9yZXBsYWNlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ldmVudF9ob2xkZXIgKm9sZF9ob2xkZXIsCisJCQkJICBzdHJ1Y3QgZnNub3RpZnlfZXZlbnQgKm5ld19ldmVudCk7CisKICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeShzdHJ1Y3QgaW5vZGUgKnRvX3RlbGwsIF9fdTMyIG1hc2ssIHZvaWQgKmRhdGEsIGludCBkYXRhX2lzLAotCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBjb29raWUpCi17fQorc3RhdGljIGlubGluZSBpbnQgZnNub3RpZnkoc3RydWN0IGlub2RlICp0b190ZWxsLCBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV9pcywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHUzMiBjb29raWUpCit7CisJcmV0dXJuIDA7Cit9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Zzbm90aWZ5X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIF9fdTMyIG1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgX19mc25vdGlmeV9wYXJlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgX191MzIgbWFzaykKIHt9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Zzbm90aWZ5X2lub2RlX2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoge30KIAorc3RhdGljIGlubGluZSB2b2lkIF9fZnNub3RpZnlfdmZzbW91bnRfZGVsZXRlKHN0cnVjdCB2ZnNtb3VudCAqbW50KQore30KKwogc3RhdGljIGlubGluZSB2b2lkIF9fZnNub3RpZnlfdXBkYXRlX2RjYWNoZV9mbGFncyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7fQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCA0MWU0NjMzLi5kY2Q2YTdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTEsMyArMSw4IEBACisvKgorICogRnRyYWNlIGhlYWRlci4gIEZvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGJleW9uZCB0aGUgcmFuZG9tIGNvbW1lbnRzCisgKiBzY2F0dGVyZWQgYmVsb3csIHNlZTogRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UtZGVzaWduLnR4dAorICovCisKICNpZm5kZWYgX0xJTlVYX0ZUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAzMTY3ZjJkLi4wMmI4YjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTExLDggKzExLDYgQEAKIHN0cnVjdCB0cmFjZXI7CiBzdHJ1Y3QgZGVudHJ5OwogCi1ERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRyYWNlX3NlcSwgZnRyYWNlX2V2ZW50X3NlcSk7Ci0KIHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyB7CiAJdW5zaWduZWQgbG9uZwkJbWFzazsKIAljb25zdCBjaGFyCQkqbmFtZTsKQEAgLTU4LDYgKzU2LDkgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlcgkqYnVmZmVyX2l0ZXJbTlJfQ1BVU107CiAJdW5zaWduZWQgbG9uZwkJaXRlcl9mbGFnczsKIAorCS8qIHRyYWNlX3NlcSBmb3IgX19wcmludF9mbGFncygpIGFuZCBfX3ByaW50X3N5bWJvbGljKCkgZXRjLiAqLworCXN0cnVjdCB0cmFjZV9zZXEJdG1wX3NlcTsKKwogCS8qIFRoZSBiZWxvdyBpcyB6ZXJvZWQgb3V0IGluIHBpcGVfcmVhZCAqLwogCXN0cnVjdCB0cmFjZV9zZXEJc2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeQkqZW50OwpAQCAtMTQ2LDE0ICsxNDcsMTkgQEAKIAlpbnQJCQkoKnJhd19pbml0KShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKik7CiB9OwogCitleHRlcm4gaW50IGZ0cmFjZV9ldmVudF9yZWcoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudCwKKwkJCSAgICBlbnVtIHRyYWNlX3JlZyB0eXBlKTsKKwogZW51bSB7CiAJVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRF9CSVQsCiAJVFJBQ0VfRVZFTlRfRkxfRklMVEVSRURfQklULAorCVRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRF9CSVQsCiB9OwogCiBlbnVtIHsKLQlUUkFDRV9FVkVOVF9GTF9FTkFCTEVECT0gKDEgPDwgVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRF9CSVQpLAotCVRSQUNFX0VWRU5UX0ZMX0ZJTFRFUkVECT0gKDEgPDwgVFJBQ0VfRVZFTlRfRkxfRklMVEVSRURfQklUKSwKKwlUUkFDRV9FVkVOVF9GTF9FTkFCTEVECQk9ICgxIDw8IFRSQUNFX0VWRU5UX0ZMX0VOQUJMRURfQklUKSwKKwlUUkFDRV9FVkVOVF9GTF9GSUxURVJFRAkJPSAoMSA8PCBUUkFDRV9FVkVOVF9GTF9GSUxURVJFRF9CSVQpLAorCVRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRAk9ICgxIDw8IFRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRF9CSVQpLAogfTsKIAogc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIHsKQEAgLTE3MSw2ICsxNzcsNyBAQAogCSAqIDMyIGJpdCBmbGFnczoKIAkgKiAgIGJpdCAxOgkJZW5hYmxlZAogCSAqICAgYml0IDI6CQlmaWx0ZXJfYWN0aXZlCisJICogICBiaXQgMzoJCWVuYWJsZWQgY21kIHJlY29yZAogCSAqCiAJICogQ2hhbmdlcyB0byBmbGFncyBtdXN0IGhvbGQgdGhlIGV2ZW50X211dGV4LgogCSAqCkBAIC0yNTcsOCArMjY0LDcgQEAKIHBlcmZfdHJhY2VfYnVmX3N1Ym1pdCh2b2lkICpyYXdfZGF0YSwgaW50IHNpemUsIGludCByY3R4LCB1NjQgYWRkciwKIAkJICAgICAgIHU2NCBjb3VudCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmhlYWQpCiB7Ci0JcGVyZl90cF9ldmVudChhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUsIHJlZ3MsIGhlYWQpOwotCXBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQocmN0eCk7CisJcGVyZl90cF9ldmVudChhZGRyLCBjb3VudCwgcmF3X2RhdGEsIHNpemUsIHJlZ3MsIGhlYWQsIHJjdHgpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnVzZS5oIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKaW5kZXggODhlMGViNS4uYzNjNTc4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdXNlLmgKQEAgLTM3LDYgKzM3LDEwIEBACiAgKgogICogNy4xNAogICogIC0gYWRkIHNwbGljZSBzdXBwb3J0IHRvIGZ1c2UgZGV2aWNlCisgKgorICogNy4xNQorICogIC0gYWRkIHN0b3JlIG5vdGlmeQorICogIC0gYWRkIHJldHJpZXZlIG5vdGlmeQogICovCiAKICNpZm5kZWYgX0xJTlVYX0ZVU0VfSApAQCAtNjgsNyArNzIsNyBAQAogI2RlZmluZSBGVVNFX0tFUk5FTF9WRVJTSU9OIDcKIAogLyoqIE1pbm9yIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgaW50ZXJmYWNlICovCi0jZGVmaW5lIEZVU0VfS0VSTkVMX01JTk9SX1ZFUlNJT04gMTQKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiAxNQogCiAvKiogVGhlIG5vZGUgSUQgb2YgdGhlIHJvb3QgaW5vZGUgKi8KICNkZWZpbmUgRlVTRV9ST09UX0lEIDEKQEAgLTI1MSw2ICsyNTUsNyBAQAogCUZVU0VfREVTVFJPWSAgICAgICA9IDM4LAogCUZVU0VfSU9DVEwgICAgICAgICA9IDM5LAogCUZVU0VfUE9MTCAgICAgICAgICA9IDQwLAorCUZVU0VfTk9USUZZX1JFUExZICA9IDQxLAogCiAJLyogQ1VTRSBzcGVjaWZpYyBvcGVyYXRpb25zICovCiAJQ1VTRV9JTklUICAgICAgICAgID0gNDA5NiwKQEAgLTI2MCw2ICsyNjUsOCBAQAogCUZVU0VfTk9USUZZX1BPTEwgICA9IDEsCiAJRlVTRV9OT1RJRllfSU5WQUxfSU5PREUgPSAyLAogCUZVU0VfTk9USUZZX0lOVkFMX0VOVFJZID0gMywKKwlGVVNFX05PVElGWV9TVE9SRSA9IDQsCisJRlVTRV9OT1RJRllfUkVUUklFVkUgPSA1LAogCUZVU0VfTk9USUZZX0NPREVfTUFYLAogfTsKIApAQCAtNTY4LDQgKzU3NSwyOSBAQAogCV9fdTMyCXBhZGRpbmc7CiB9OwogCitzdHJ1Y3QgZnVzZV9ub3RpZnlfc3RvcmVfb3V0IHsKKwlfX3U2NAlub2RlaWQ7CisJX191NjQJb2Zmc2V0OworCV9fdTMyCXNpemU7CisJX191MzIJcGFkZGluZzsKK307CisKK3N0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9vdXQgeworCV9fdTY0CW5vdGlmeV91bmlxdWU7CisJX191NjQJbm9kZWlkOworCV9fdTY0CW9mZnNldDsKKwlfX3UzMglzaXplOworCV9fdTMyCXBhZGRpbmc7Cit9OworCisvKiBNYXRjaGVzIHRoZSBzaXplIG9mIGZ1c2Vfd3JpdGVfaW4gKi8KK3N0cnVjdCBmdXNlX25vdGlmeV9yZXRyaWV2ZV9pbiB7CisJX191NjQJZHVtbXkxOworCV9fdTY0CW9mZnNldDsKKwlfX3UzMglzaXplOworCV9fdTMyCWR1bW15MjsKKwlfX3U2NAlkdW1teTM7CisJX191NjQJZHVtbXk0OworfTsKKwogI2VuZGlmIC8qIF9MSU5VWF9GVVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmggYi9pbmNsdWRlL2xpbnV4L2dwaW9fa2V5cy5oCmluZGV4IGNkMGIzZjMuLmNlNzNhMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ3Bpb19rZXlzLmgKKysrIGIvaW5jbHVkZS9saW51eC9ncGlvX2tleXMuaApAQCAtMTcsNiArMTcsOCBAQAogCXN0cnVjdCBncGlvX2tleXNfYnV0dG9uICpidXR0b25zOwogCWludCBuYnV0dG9uczsKIAl1bnNpZ25lZCBpbnQgcmVwOjE7CQkvKiBlbmFibGUgaW5wdXQgc3Vic3lzdGVtIGF1dG8gcmVwZWF0ICovCisJaW50ICgqZW5hYmxlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXZvaWQgKCpkaXNhYmxlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IGNhYWZkMDUuLmUzMDYwZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfSElHSE1FTV9ICiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCkBAIC03Miw3ICs3MywxMSBAQAogfQogI2RlZmluZSBrbWFwX2F0b21pY19wcm90KHBhZ2UsIGlkeCwgcHJvdCkJa21hcF9hdG9taWMocGFnZSwgaWR4KQogCi0jZGVmaW5lIGt1bm1hcF9hdG9taWMoYWRkciwgaWR4KQlkbyB7IHBhZ2VmYXVsdF9lbmFibGUoKTsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfYXRvbWljX25vdHlwZWNoZWNrKHZvaWQgKmFkZHIsIGVudW0ga21fdHlwZSBpZHgpCit7CisJcGFnZWZhdWx0X2VuYWJsZSgpOworfQorCiAjZGVmaW5lIGttYXBfYXRvbWljX3BmbihwZm4sIGlkeCkJa21hcF9hdG9taWMocGZuX3RvX3BhZ2UocGZuKSwgKGlkeCkpCiAjZGVmaW5lIGttYXBfYXRvbWljX3RvX3BhZ2UocHRyKQl2aXJ0X3RvX3BhZ2UocHRyKQogCkBAIC04MSw2ICs4NiwxMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KIAorLyogUHJldmVudCBwZW9wbGUgdHJ5aW5nIHRvIGNhbGwga3VubWFwX2F0b21pYygpIGFzIGlmIGl0IHdlcmUga3VubWFwKCkgKi8KKy8qIGt1bm1hcF9hdG9taWMoKSBzaG91bGQgZ2V0IHRoZSByZXR1cm4gdmFsdWUgb2Yga21hcF9hdG9taWMsIG5vdCB0aGUgcGFnZS4gKi8KKyNkZWZpbmUga3VubWFwX2F0b21pYyhhZGRyLCBpZHgpIGRvIHsgXAorCQlCVUlMRF9CVUdfT04oX19zYW1lX3R5cGUoKGFkZHIpLCBzdHJ1Y3QgcGFnZSAqKSk7IFwKKwkJa3VubWFwX2F0b21pY19ub3R5cGVjaGVjaygoYWRkciksIChpZHgpKTsgXAorCX0gd2hpbGUgKDApCisKIC8qIHdoZW4gQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldCB0aGVzZSB3aWxsIGJlIHBsYWluIGNsZWFyL2NvcHlfcGFnZSAqLwogI2lmbmRlZiBjbGVhcl91c2VyX2hpZ2hwYWdlCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDIxMDY3YjQxOC4uMzhkZDQwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0xMDgsNiArMTA4LDcgQEAKICAqIEBzaHV0ZG93bjogQ2FsbGJhY2sgZm9yIGRldmljZSBzaHV0ZG93bgogICogQHN1c3BlbmQ6IENhbGxiYWNrIGZvciBkZXZpY2Ugc3VzcGVuZAogICogQHJlc3VtZTogQ2FsbGJhY2sgZm9yIGRldmljZSByZXN1bWUKKyAqIEBhbGVydDogQWxlcnQgY2FsbGJhY2ssIGZvciBleGFtcGxlIGZvciB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wKICAqIEBjb21tYW5kOiBDYWxsYmFjayBmb3IgYnVzLXdpZGUgc2lnbmFsaW5nIChvcHRpb25hbCkKICAqIEBkcml2ZXI6IERldmljZSBkcml2ZXIgbW9kZWwgZHJpdmVyCiAgKiBAaWRfdGFibGU6IExpc3Qgb2YgSTJDIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCkBAIC0yMzMsNiArMjM0LDcgQEAKICAqIEBhZGRyOiBzdG9yZWQgaW4gaTJjX2NsaWVudC5hZGRyCiAgKiBAcGxhdGZvcm1fZGF0YTogc3RvcmVkIGluIGkyY19jbGllbnQuZGV2LnBsYXRmb3JtX2RhdGEKICAqIEBhcmNoZGF0YTogY29waWVkIGludG8gaTJjX2NsaWVudC5kZXYuYXJjaGRhdGEKKyAqIEBvZl9ub2RlOiBwb2ludGVyIHRvIE9wZW5GaXJtd2FyZSBkZXZpY2Ugbm9kZQogICogQGlycTogc3RvcmVkIGluIGkyY19jbGllbnQuaXJxCiAgKgogICogSTJDIGRvZXNuJ3QgYWN0dWFsbHkgc3VwcG9ydCBoYXJkd2FyZSBwcm9iaW5nLCBhbHRob3VnaCBjb250cm9sbGVycyBhbmQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3N4MTUweC5oIGIvaW5jbHVkZS9saW51eC9pMmMvc3gxNTB4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzMDQ5YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3N4MTUweC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBEcml2ZXIgZm9yIHRoZSBTZW10ZWNoIFNYMTUweCBJMkMgR1BJTyBFeHBhbmRlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX19MSU5VWF9JMkNfU1gxNTBYX0gKKyNkZWZpbmUgX19MSU5VWF9JMkNfU1gxNTBYX0gKKworLyoqCisgKiBzdHJ1Y3Qgc3gxNTB4X3BsYXRmb3JtX2RhdGEgLSBjb25maWcgZGF0YSBmb3IgU1gxNTB4IGRyaXZlcgorICogQGdwaW9fYmFzZTogVGhlIGluZGV4IG51bWJlciBvZiB0aGUgZmlyc3QgR1BJTyBhc3NpZ25lZCB0byB0aGlzCisgKiAgICAgICAgICAgICBHUElPIGV4cGFuZGVyLiAgVGhlIGV4cGFuZGVyIHdpbGwgY3JlYXRlIGEgYmxvY2sgb2YKKyAqICAgICAgICAgICAgIGNvbnNlY3V0aXZlbHkgbnVtYmVyZWQgZ3Bpb3MgYmVnaW5uaW5nIGF0IHRoZSBnaXZlbiBiYXNlLAorICogICAgICAgICAgICAgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgZGVwZW5kaW5nIG9uIHRoZSBtb2RlbCBvZiB0aGUKKyAqICAgICAgICAgICAgIGV4cGFuZGVyIGNoaXAuCisgKiBAb3NjaW9faXNfZ3BvOiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGRyaXZlciB3aWxsIGNvbmZpZ3VyZSBPU0NJTyBhcyBhIEdQTworICogICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBhcyBhbiBvc2NpbGxhdG9yLCBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZQorICogICAgICAgICAgICAgICAgR1AoSSlPIHBvb2wgY3JlYXRlZCBieSB0aGlzIGV4cGFuZGVyIGJ5IG9uZS4gIFRoZQorICogICAgICAgICAgICAgICAgb3V0cHV0LW9ubHkgR1BPIHBpbiB3aWxsIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgorICogQGlvX3B1bGx1cF9lbmE6IEEgYml0LW1hc2sgd2hpY2ggZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcHVsbC11cCByZXNpc3RvcgorICogICAgICAgICAgICAgICAgIGZvciBlYWNoIElPIGxpbmUgaW4gdGhlIGV4cGFuZGVyLiAgU2V0dGluZyB0aGUgYml0IGF0CisgKiAgICAgICAgICAgICAgICAgcG9zaXRpb24gbiB3aWxsIGVuYWJsZSB0aGUgcHVsbC11cCBmb3IgdGhlIElPIGF0CisgKiAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0LiAgRm9yIGNoaXBzIHdpdGggZmV3ZXIgdGhhbgorICogICAgICAgICAgICAgICAgIDE2IElPIHBpbnMsIGhpZ2gtZW5kIGJpdHMgYXJlIGlnbm9yZWQuCisgKiBAaW9fcHVsbGRuX2VuYTogQSBiaXQtbWFzayB3aGljaCBlbmFibGVzLW9yIGRpc2FibGVzIHRoZSBwdWxsLWRvd24KKyAqICAgICAgICAgICAgICAgICByZXNpc3RvciBmb3IgZWFjaCBJTyBsaW5lIGluIHRoZSBleHBhbmRlci4gU2V0dGluZyB0aGUKKyAqICAgICAgICAgICAgICAgICBiaXQgYXQgcG9zaXRpb24gbiB3aWxsIGVuYWJsZSB0aGUgcHVsbC1kb3duIGZvciB0aGUgSU8gYXQKKyAqICAgICAgICAgICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQuICBGb3IgY2hpcHMgd2l0aCBmZXdlciB0aGFuCisgKiAgICAgICAgICAgICAgICAgMTYgSU8gcGlucywgaGlnaC1lbmQgYml0cyBhcmUgaWdub3JlZC4KKyAqIEBpb19vcGVuX2RyYWluX2VuYTogQSBiaXQtbWFzayB3aGljaCBlbmFibGVzLW9yIGRpc2FibGVzIG9wZW4tZHJhaW4KKyAqICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGZvciBlYWNoIElPIGxpbmUgaW4gdGhlIGV4cGFuZGVyLiBTZXR0aW5nIHRoZQorICogICAgICAgICAgICAgICAgICAgICBiaXQgYXQgcG9zaXRpb24gbiBlbmFibGVzIG9wZW4tZHJhaW4gb3BlcmF0aW9uIGZvcgorICogICAgICAgICAgICAgICAgICAgICB0aGUgSU8gYXQgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0LiAgQ2xlYXJpbmcgdGhlIGJpdAorICogICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHJlZ3VsYXIgcHVzaC1wdWxsIG9wZXJhdGlvbiBmb3IgdGhhdCBJTy4KKyAqICAgICAgICAgICAgICAgICAgICAgRm9yIGNoaXBzIHdpdGggZmV3ZXIgdGhhbiAxNiBJTyBwaW5zLCBoaWdoLWVuZCBiaXRzCisgKiAgICAgICAgICAgICAgICAgICAgIGFyZSBpZ25vcmVkLgorICogQGlvX3BvbGFyaXR5OiBBIGJpdC1tYXNrIHdoaWNoIGVuYWJsZXMgcG9sYXJpdHkgaW52ZXJzaW9uIGZvciBlYWNoIElPIGxpbmUKKyAqICAgICAgICAgICAgICAgaW4gdGhlIGV4cGFuZGVyLiAgU2V0dGluZyB0aGUgYml0IGF0IHBvc2l0aW9uIG4gaW52ZXJ0cworICogICAgICAgICAgICAgICB0aGUgcG9sYXJpdHkgb2YgdGhhdCBJTyBsaW5lLCB3aGlsZSBjbGVhcmluZyBpdCByZXN1bHRzCisgKiAgICAgICAgICAgICAgIGluIG5vcm1hbCBwb2xhcml0eS4gRm9yIGNoaXBzIHdpdGggZmV3ZXIgdGhhbiAxNiBJTyBwaW5zLAorICogICAgICAgICAgICAgICBoaWdoLWVuZCBiaXRzIGFyZSBpZ25vcmVkLgorICogQGlycV9zdW1tYXJ5OiBUaGUgJ3N1bW1hcnkgSVJRJyBsaW5lIHRvIHdoaWNoIHRoZSBHUElPIGV4cGFuZGVyJ3MgSU5UIGxpbmUKKyAqICAgICAgICAgICAgICAgaXMgY29ubmVjdGVkLCB2aWEgd2hpY2ggaXQgcmVwb3J0cyBpbnRlcnJ1cHQgZXZlbnRzCisgKiAgICAgICAgICAgICAgIGFjcm9zcyBhbGwgR1BJTyBsaW5lcy4gIFRoaXMgbXVzdCBiZSBhIHJlYWwsCisgKiAgICAgICAgICAgICAgIHByZS1leGlzdGluZyBJUlEgbGluZS4KKyAqICAgICAgICAgICAgICAgU2V0dGluZyB0aGlzIHZhbHVlIDwgMCBkaXNhYmxlcyB0aGUgaXJxX2NoaXAgZnVuY3Rpb25hbGl0eQorICogICAgICAgICAgICAgICBvZiB0aGUgZHJpdmVyLgorICogQGlycV9iYXNlOiBUaGUgZmlyc3QgJ3ZpcnR1YWwgSVJRJyBsaW5lIGF0IHdoaWNoIG91ciBibG9jayBvZiBHUElPLWJhc2VkCisgKiAgICAgICAgICAgIElSUSBsaW5lcyB3aWxsIGFwcGVhci4gIFNpbWlsYXJseSB0byBncGlvX2Jhc2UsIHRoZSBleHBhbmRlcgorICogICAgICAgICAgICB3aWxsIGNyZWF0ZSBhIGJsb2NrIG9mIGlycXMgYmVnaW5uaW5nIGF0IHRoaXMgbnVtYmVyLgorICogICAgICAgICAgICBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgaXJxX3N1bW1hcnkgaXMgPCAwLgorICovCitzdHJ1Y3Qgc3gxNTB4X3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGdwaW9fYmFzZTsKKwlib29sICAgICBvc2Npb19pc19ncG87CisJdTE2ICAgICAgaW9fcHVsbHVwX2VuYTsKKwl1MTYgICAgICBpb19wdWxsZG5fZW5hOworCXUxNiAgICAgIGlvX29wZW5fZHJhaW5fZW5hOworCXUxNiAgICAgIGlvX3BvbGFyaXR5OworCWludCAgICAgIGlycV9zdW1tYXJ5OworCXVuc2lnbmVkIGlycV9iYXNlOworfTsKKworI2VuZGlmIC8qIF9fTElOVVhfSTJDX1NYMTUwWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCmluZGV4IDM3ZWEyODkuLmQzMzA0MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oCkBAIC01MSw2ICs1MSw3IEBACiAvKiBzcGVjaWFsIGZsYWdzICovCiAjZGVmaW5lIElOX09OTFlESVIJCTB4MDEwMDAwMDAJLyogb25seSB3YXRjaCB0aGUgcGF0aCBpZiBpdCBpcyBhIGRpcmVjdG9yeSAqLwogI2RlZmluZSBJTl9ET05UX0ZPTExPVwkJMHgwMjAwMDAwMAkvKiBkb24ndCBmb2xsb3cgYSBzeW0gbGluayAqLworI2RlZmluZSBJTl9FWENMX1VOTElOSwkJMHgwNDAwMDAwMAkvKiBleGNsdWRlIGV2ZW50cyBvbiB1bmxpbmtlZCBvYmplY3RzICovCiAjZGVmaW5lIElOX01BU0tfQURECQkweDIwMDAwMDAwCS8qIGFkZCB0byB0aGUgbWFzayBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIHdhdGNoICovCiAjZGVmaW5lIElOX0lTRElSCQkweDQwMDAwMDAwCS8qIGV2ZW50IG9jY3VycmVkIGFnYWluc3QgZGlyICovCiAjZGVmaW5lIElOX09ORVNIT1QJCTB4ODAwMDAwMDAJLyogb25seSBzZW5kIGV2ZW50IG9uY2UgKi8KQEAgLTcwLDE3NyArNzEsMTcgQEAKICNkZWZpbmUgSU5fTk9OQkxPQ0sgT19OT05CTE9DSwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorZXh0ZXJuIHN0cnVjdCBjdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdOyAvKiBmb3Igc3lzY3RsICovCiAKLSNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2RlZmluZSBBTExfSU5PVElGWV9CSVRTIChJTl9BQ0NFU1MgfCBJTl9NT0RJRlkgfCBJTl9BVFRSSUIgfCBJTl9DTE9TRV9XUklURSB8IFwKKwkJCSAgSU5fQ0xPU0VfTk9XUklURSB8IElOX09QRU4gfCBJTl9NT1ZFRF9GUk9NIHwgXAorCQkJICBJTl9NT1ZFRF9UTyB8IElOX0NSRUFURSB8IElOX0RFTEVURSB8IFwKKwkJCSAgSU5fREVMRVRFX1NFTEYgfCBJTl9NT1ZFX1NFTEYgfCBJTl9VTk1PVU5UIHwgXAorCQkJICBJTl9RX09WRVJGTE9XIHwgSU5fSUdOT1JFRCB8IElOX09OTFlESVIgfCBcCisJCQkgIElOX0RPTlRfRk9MTE9XIHwgSU5fRVhDTF9VTkxJTksgfCBJTl9NQVNLX0FERCB8IFwKKwkJCSAgSU5fSVNESVIgfCBJTl9PTkVTSE9UKQogCi0vKgotICogc3RydWN0IGlub3RpZnlfd2F0Y2ggLSByZXByZXNlbnRzIGEgd2F0Y2ggcmVxdWVzdCBvbiBhIHNwZWNpZmljIGlub2RlCi0gKgotICogaF9saXN0IGlzIHByb3RlY3RlZCBieSBpaC0+bXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgaW5vdGlmeV9oYW5kbGUuCi0gKiBpX2xpc3QsIG1hc2sgYXJlIHByb3RlY3RlZCBieSBpbm9kZS0+aW5vdGlmeV9tdXRleCBvZiB0aGUgYXNzb2NpYXRlZCBpbm9kZS4KLSAqIGloLCBpbm9kZSwgYW5kIHdkIGFyZSBuZXZlciB3cml0dGVuIHRvIG9uY2UgdGhlIHdhdGNoIGlzIGNyZWF0ZWQuCi0gKgotICogQ2FsbGVycyBtdXN0IHVzZSB0aGUgZXN0YWJsaXNoZWQgaW5vdGlmeSBpbnRlcmZhY2VzIHRvIGFjY2VzcyBpbm90aWZ5X3dhdGNoCi0gKiBjb250ZW50cy4gIFRoZSBjb250ZW50IG9mIHRoaXMgc3RydWN0dXJlIGlzIHByaXZhdGUgdG8gdGhlIGlub3RpZnkKLSAqIGltcGxlbWVudGF0aW9uLgotICovCi1zdHJ1Y3QgaW5vdGlmeV93YXRjaCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAloX2xpc3Q7CS8qIGVudHJ5IGluIGlub3RpZnlfaGFuZGxlJ3MgbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQJaV9saXN0OwkvKiBlbnRyeSBpbiBpbm9kZSdzIGxpc3QgKi8KLQlhdG9taWNfdAkJY291bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCAqLwotCXN0cnVjdCBpbm90aWZ5X2hhbmRsZQkqaWg7CS8qIGFzc29jaWF0ZWQgaW5vdGlmeSBoYW5kbGUgKi8KLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsJLyogYXNzb2NpYXRlZCBpbm9kZSAqLwotCV9fczMyCQkJd2Q7CS8qIHdhdGNoIGRlc2NyaXB0b3IgKi8KLQlfX3UzMgkJCW1hc2s7CS8qIGV2ZW50IG1hc2sgZm9yIHRoaXMgd2F0Y2ggKi8KLX07Ci0KLXN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgewotCXZvaWQgKCpoYW5kbGVfZXZlbnQpKHN0cnVjdCBpbm90aWZ5X3dhdGNoICosIHUzMiwgdTMyLCB1MzIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKiwgc3RydWN0IGlub2RlICopOwotCXZvaWQgKCpkZXN0cm95X3dhdGNoKShzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKLX07Ci0KLSNpZmRlZiBDT05GSUdfSU5PVElGWQotCi0vKiBLZXJuZWwgQVBJIGZvciBwcm9kdWNpbmcgZXZlbnRzICovCi0KLWV4dGVybiB2b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiB2b2lkIGlub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm9kZSAqLCBfX3UzMiwgX191MzIsCi0JCQkJICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqLCBfX3UzMiwgX191MzIsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X3VubW91bnRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX2lzX2RlYWQoc3RydWN0IGlub2RlICopOwotZXh0ZXJuIHUzMiBpbm90aWZ5X2dldF9jb29raWUodm9pZCk7Ci0KLS8qIEtlcm5lbCBDb25zdW1lciBBUEkgKi8KLQotZXh0ZXJuIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X2Rlc3Ryb3koc3RydWN0IGlub3RpZnlfaGFuZGxlICopOwotZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCi0JCQkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKiopOwotZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm9kZSAqLAotCQkJCSAgICAgICB1MzIpOwotZXh0ZXJuIF9fczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLAotCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqLCBfX3UzMik7Ci1leHRlcm4gX19zMzIgaW5vdGlmeV9jbG9uZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKLWV4dGVybiB2b2lkIGlub3RpZnlfZXZpY3Rfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Ci1leHRlcm4gaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOwotZXh0ZXJuIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBfX3UzMik7Ci1leHRlcm4gdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICosCi0JCQkJCXN0cnVjdCBpbm90aWZ5X3dhdGNoICopOwotZXh0ZXJuIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Ci1leHRlcm4gdm9pZCBwdXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKLWV4dGVybiBpbnQgcGluX2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Ci1leHRlcm4gdm9pZCB1bnBpbl9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9kX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJc3RydWN0IGlub2RlICppbm9kZSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZF9tb3ZlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICBfX3UzMiBtYXNrLCBfX3UzMiBjb29raWUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgICAgc3RydWN0IGlub2RlICpuX2lub2RlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9kZW50cnlfcGFyZW50X3F1ZXVlX2V2ZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJCSAgICAgX191MzIgbWFzaywgX191MzIgY29va2llLAotCQkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfdW5tb3VudF9pbm9kZXMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfaW5vZGVfaXNfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpbm90aWZ5X2dldF9jb29raWUodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmlub3RpZnlfaW5pdChjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zICpvcHMpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQotewotfQotCi1zdGF0aWMgaW5saW5lIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKndhdGNocCkKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAotCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKLQkJCQkgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsCi0JCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgbWFzaykKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKLQkJCQkgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCi17Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIF9fdTMyIHdkKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAotCQkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQotewotfQotCi1leHRlcm4gaW5saW5lIGludCBwaW5faW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbmxpbmUgdm9pZCB1bnBpbl9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLXsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19JTk9USUZZICovCi0KLSNlbmRpZgkvKiBfX0tFUk5FTCBfXyAqLworI2VuZGlmCiAKICNlbmRpZgkvKiBfTElOVVhfSU5PVElGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggMzM5ZDA0My4uODk2YTkyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtNzc2LDYgKzc3Niw3IEBACiAjZGVmaW5lIFJFUF9ERUxBWQkJMHgwMAogI2RlZmluZSBSRVBfUEVSSU9ECQkweDAxCiAjZGVmaW5lIFJFUF9NQVgJCQkweDAxCisjZGVmaW5lIFJFUF9DTlQJCQkoUkVQX01BWCsxKQogCiAvKgogICogU291bmRzCkBAIC0xMDk5LDIxICsxMTAwLDE4IEBACiAgKiBAcmVwZWF0X2tleTogc3RvcmVzIGtleSBjb2RlIG9mIHRoZSBsYXN0IGtleSBwcmVzc2VkOyB1c2VkIHRvIGltcGxlbWVudAogICoJc29mdHdhcmUgYXV0b3JlcGVhdAogICogQHRpbWVyOiB0aW1lciBmb3Igc29mdHdhcmUgYXV0b3JlcGVhdAotICogQGFiczogY3VycmVudCB2YWx1ZXMgZm9yIHJlcG9ydHMgZnJvbSBhYnNvbHV0ZSBheGVzCiAgKiBAcmVwOiBjdXJyZW50IHZhbHVlcyBmb3IgYXV0b3JlcGVhdCBwYXJhbWV0ZXJzIChkZWxheSwgcmF0ZSkKICAqIEBtdDogcG9pbnRlciB0byBhcnJheSBvZiBzdHJ1Y3QgaW5wdXRfbXRfc2xvdCBob2xkaW5nIGN1cnJlbnQgdmFsdWVzCiAgKglvZiB0cmFja2VkIGNvbnRhY3RzCiAgKiBAbXRzaXplOiBudW1iZXIgb2YgTVQgc2xvdHMgdGhlIGRldmljZSB1c2VzCiAgKiBAc2xvdDogTVQgc2xvdCBjdXJyZW50bHkgYmVpbmcgdHJhbnNtaXR0ZWQKKyAqIEBhYnNpbmZvOiBhcnJheSBvZiAmc3RydWN0IGFic2luZm8gZWxlbWVudHMgaG9sZGluZyBpbmZvcm1hdGlvbgorICoJYWJvdXQgYWJzb2x1dGUgYXhlcyAoY3VycmVudCB2YWx1ZSwgbWluLCBtYXgsIGZsYXQsIGZ1enosCisgKglyZXNvbHV0aW9uKQogICogQGtleTogcmVmbGVjdHMgY3VycmVudCBzdGF0ZSBvZiBkZXZpY2UncyBrZXlzL2J1dHRvbnMKICAqIEBsZWQ6IHJlZmxlY3RzIGN1cnJlbnQgc3RhdGUgb2YgZGV2aWNlJ3MgTEVEcwogICogQHNuZDogcmVmbGVjdHMgY3VycmVudCBzdGF0ZSBvZiBzb3VuZCBlZmZlY3RzCiAgKiBAc3c6IHJlZmxlY3RzIGN1cnJlbnQgc3RhdGUgb2YgZGV2aWNlJ3Mgc3dpdGNoZXMKLSAqIEBhYnNtYXg6IG1heGltdW0gdmFsdWVzIGZvciBldmVudHMgY29taW5nIGZyb20gYWJzb2x1dGUgYXhlcwotICogQGFic21pbjogbWluaW11bSB2YWx1ZXMgZm9yIGV2ZW50cyBjb21pbmcgZnJvbSBhYnNvbHV0ZSBheGVzCi0gKiBAYWJzZnV6ejogZGVzY3JpYmVzIG5vaXNpbmVzcyBmb3IgYXhlcwotICogQGFic2ZsYXQ6IHNpemUgb2YgdGhlIGNlbnRlciBmbGF0IHBvc2l0aW9uICh1c2VkIGJ5IGpveWRldikKLSAqIEBhYnNyZXM6IHJlc29sdXRpb24gdXNlZCBmb3IgZXZlbnRzIGNvbWluZyBmb3JtIGFic29sdXRlIGF4ZXMKICAqIEBvcGVuOiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgdmVyeSBmaXJzdCB1c2VyIGNhbGxzCiAgKglpbnB1dF9vcGVuX2RldmljZSgpLiBUaGUgZHJpdmVyIG11c3QgcHJlcGFyZSB0aGUgZGV2aWNlCiAgKgl0byBzdGFydCBnZW5lcmF0aW5nIGV2ZW50cyAoc3RhcnQgcG9sbGluZyB0aHJlYWQsCkBAIC0xMTgwLDI0ICsxMTc4LDE5IEBACiAJdW5zaWduZWQgaW50IHJlcGVhdF9rZXk7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAKLQlpbnQgYWJzW0FCU19DTlRdOwotCWludCByZXBbUkVQX01BWCArIDFdOworCWludCByZXBbUkVQX0NOVF07CiAKIAlzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqbXQ7CiAJaW50IG10c2l6ZTsKIAlpbnQgc2xvdDsKIAorCXN0cnVjdCBpbnB1dF9hYnNpbmZvICphYnNpbmZvOworCiAJdW5zaWduZWQgbG9uZyBrZXlbQklUU19UT19MT05HUyhLRVlfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBsZWRbQklUU19UT19MT05HUyhMRURfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBzbmRbQklUU19UT19MT05HUyhTTkRfQ05UKV07CiAJdW5zaWduZWQgbG9uZyBzd1tCSVRTX1RPX0xPTkdTKFNXX0NOVCldOwogCi0JaW50IGFic21heFtBQlNfQ05UXTsKLQlpbnQgYWJzbWluW0FCU19DTlRdOwotCWludCBhYnNmdXp6W0FCU19DTlRdOwotCWludCBhYnNmbGF0W0FCU19DTlRdOwotCWludCBhYnNyZXNbQUJTX0NOVF07Ci0KIAlpbnQgKCpvcGVuKShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKIAlpbnQgKCpmbHVzaCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CkBAIC0xNDU5LDE2ICsxNDUyLDMyIEBACiAJZGV2LT5oaW50X2V2ZW50c19wZXJfcGFja2V0ID0gbl9ldmVudHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9zZXRfYWJzX3BhcmFtcyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBheGlzLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgZnV6eiwgaW50IGZsYXQpCi17Ci0JZGV2LT5hYnNtaW5bYXhpc10gPSBtaW47Ci0JZGV2LT5hYnNtYXhbYXhpc10gPSBtYXg7Ci0JZGV2LT5hYnNmdXp6W2F4aXNdID0gZnV6ejsKLQlkZXYtPmFic2ZsYXRbYXhpc10gPSBmbGF0Owordm9pZCBpbnB1dF9hbGxvY19hYnNpbmZvKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7Cit2b2lkIGlucHV0X3NldF9hYnNfcGFyYW1zKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGF4aXMsCisJCQkgIGludCBtaW4sIGludCBtYXgsIGludCBmdXp6LCBpbnQgZmxhdCk7CiAKLQlkZXYtPmFic2JpdFtCSVRfV09SRChheGlzKV0gfD0gQklUX01BU0soYXhpcyk7CisjZGVmaW5lIElOUFVUX0dFTkVSQVRFX0FCU19BQ0NFU1NPUlMoX3N1ZmZpeCwgX2l0ZW0pCQkJXAorc3RhdGljIGlubGluZSBpbnQgaW5wdXRfYWJzX2dldF8jI19zdWZmaXgoc3RydWN0IGlucHV0X2RldiAqZGV2LAlcCisJCQkJCSAgdW5zaWduZWQgaW50IGF4aXMpCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBkZXYtPmFic2luZm8gPyBkZXYtPmFic2luZm9bYXhpc10uX2l0ZW0gOiAwOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9hYnNfc2V0XyMjX3N1ZmZpeChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCVwKKwkJCQkJICAgdW5zaWduZWQgaW50IGF4aXMsIGludCB2YWwpCVwKK3sJCQkJCQkJCQlcCisJaW5wdXRfYWxsb2NfYWJzaW5mbyhkZXYpOwkJCQkJXAorCWlmIChkZXYtPmFic2luZm8pCQkJCQkJXAorCQlkZXYtPmFic2luZm9bYXhpc10uX2l0ZW0gPSB2YWw7CQkJCVwKIH0KIAorSU5QVVRfR0VORVJBVEVfQUJTX0FDQ0VTU09SUyh2YWwsIHZhbHVlKQorSU5QVVRfR0VORVJBVEVfQUJTX0FDQ0VTU09SUyhtaW4sIG1pbmltdW0pCitJTlBVVF9HRU5FUkFURV9BQlNfQUNDRVNTT1JTKG1heCwgbWF4aW11bSkKK0lOUFVUX0dFTkVSQVRFX0FCU19BQ0NFU1NPUlMoZnV6eiwgZnV6eikKK0lOUFVUX0dFTkVSQVRFX0FCU19BQ0NFU1NPUlMoZmxhdCwgZmxhdCkKK0lOUFVUX0dFTkVSQVRFX0FCU19BQ0NFU1NPUlMocmVzLCByZXNvbHV0aW9uKQorCiBpbnQgaW5wdXRfZ2V0X2tleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LAogCQkgICAgICB1bnNpZ25lZCBpbnQgc2NhbmNvZGUsIHVuc2lnbmVkIGludCAqa2V5Y29kZSk7CiBpbnQgaW5wdXRfc2V0X2tleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbF9taWRfZG1hLmggYi9pbmNsdWRlL2xpbnV4L2ludGVsX21pZF9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQwOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlbF9taWRfZG1hLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqICBpbnRlbF9taWRfZG1hLmggLSBJbnRlbCBNSUQgRE1BIERyaXZlcnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTEwIEludGVsIENvcnAKKyAqICBBdXRob3I6IFZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPgorICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqCisgKi8KKyNpZm5kZWYgX19JTlRFTF9NSURfRE1BX0hfXworI2RlZmluZSBfX0lOVEVMX01JRF9ETUFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKworLypETUEgdHJhbnNhY3Rpb24gd2lkdGgsIHNyYyBhbmQgZHN0biB3aWR0aCB3b3VsZCBiZSBzYW1lCitUaGUgRE1BIGxlbmd0aCBtdXN0IGJlIHdpZHRoIGFsaWduZWQsCitmb3IgMzIgYml0IHdpZHRoIHRoZSBsZW5ndGggbXVzdCBiZSAzMiBiaXQgKDRieXRlcykgYWxpZ25lZCBvbmx5Ki8KK2VudW0gaW50ZWxfbWlkX2RtYV93aWR0aCB7CisJTE5XX0RNQV9XSURUSF84QklUID0gMHgwLAorCUxOV19ETUFfV0lEVEhfMTZCSVQgPSAweDEsCisJTE5XX0RNQV9XSURUSF8zMkJJVCA9IDB4MiwKK307CisKKy8qRE1BIG1vZGUgY29uZmlndXJhdGlvbnMqLworZW51bSBpbnRlbF9taWRfZG1hX21vZGUgeworCUxOV19ETUFfUEVSX1RPX01FTSA9IDAsIC8qcGVyaXBocmFsIHRvIG1lbW9yeSBjb25maWd1cmF0aW9uKi8KKwlMTldfRE1BX01FTV9UT19QRVIsCS8qbWVtb3J5IHRvIHBlcmlwaHJhbCBjb25maWd1cmF0aW9uKi8KKwlMTldfRE1BX01FTV9UT19NRU0sCS8qbWVtIHRvIG1lbSBjb25mZyAodGVzdGluZyBvbmx5KSovCit9OworCisvKkRNQSBoYW5kc2hha2luZyovCitlbnVtIGludGVsX21pZF9kbWFfaHNfbW9kZSB7CisJTE5XX0RNQV9IV19IUyA9IDAsCS8qSFcgSGFuZHNoYWtpbmcgb25seSovCisJTE5XX0RNQV9TV19IUyA9IDEsCS8qU1cgSGFuZHNoYWtpbmcgbm90IHJlY29tbWVuZGVkKi8KK307CisKKy8qQnVyc3Qgc2l6ZSBjb25maWd1cmF0aW9uKi8KK2VudW0gaW50ZWxfbWlkX2RtYV9tc2l6ZSB7CisJTE5XX0RNQV9NU0laRV8xID0gMHgwLAorCUxOV19ETUFfTVNJWkVfNCA9IDB4MSwKKwlMTldfRE1BX01TSVpFXzggPSAweDIsCisJTE5XX0RNQV9NU0laRV8xNiA9IDB4MywKKwlMTldfRE1BX01TSVpFXzMyID0gMHg0LAorCUxOV19ETUFfTVNJWkVfNjQgPSAweDUsCit9OworCisvKioKKyAqIHN0cnVjdCBpbnRlbF9taWRfZG1hX3NsYXZlIC0gRE1BIHNsYXZlIHN0cnVjdHVyZQorICoKKyAqIEBkaXJuOiBETUEgdHJmIGRpcmVjdGlvbgorICogQHNyY193aWR0aDogdHggcmVnaXN0ZXIgd2lkdGgKKyAqIEBkc3Rfd2lkdGg6IHJ4IHJlZ2lzdGVyIHdpZHRoCisgKiBAaHNfbW9kZTogSFcvU1cgaGFuZHNoYWtpbmcgbW9kZQorICogQGNmZ19tb2RlOiBETUEgZGF0YSB0cmFuc2ZlciBtb2RlIChwZXItcGVyL21lbS1wZXIvbWVtLW1lbSkKKyAqIEBzcmNfbXNpemU6IFNvdXJjZSBETUEgYnVyc3Qgc2l6ZQorICogQGRzdF9tc2l6ZTogRHN0IERNQSBidXJzdCBzaXplCisgKiBAZGV2aWNlX2luc3RhbmNlOiBETUEgcGVyaXBoZXJhbCBkZXZpY2UgaW5zdGFuY2UsIHdlIGNhbiBoYXZlIG11bHRpcGxlCisgKgkJcGVyaXBoZXJhbCBkZXZpY2UgY29ubmVjdGVkIHRvIHNpbmdsZSBETUFDCisgKi8KK3N0cnVjdCBpbnRlbF9taWRfZG1hX3NsYXZlIHsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbgkJZGlybjsKKwllbnVtIGludGVsX21pZF9kbWFfd2lkdGgJc3JjX3dpZHRoOyAvKndpZHRoIG9mIERNQSBzcmMgdHhuKi8KKwllbnVtIGludGVsX21pZF9kbWFfd2lkdGgJZHN0X3dpZHRoOyAvKndpZHRoIG9mIERNQSBkc3QgdHhuKi8KKwllbnVtIGludGVsX21pZF9kbWFfaHNfbW9kZQloc19tb2RlOyAgLypoYW5kc2hha2luZyovCisJZW51bSBpbnRlbF9taWRfZG1hX21vZGUJCWNmZ19tb2RlOyAvKm1vZGUgY29uZmlndXJhdGlvbiovCisJZW51bSBpbnRlbF9taWRfZG1hX21zaXplCXNyY19tc2l6ZTsgLypzaXplIGlmIHNyYyBidXJzdCovCisJZW51bSBpbnRlbF9taWRfZG1hX21zaXplCWRzdF9tc2l6ZTsgLypzaXplIG9mIGRzdCBidXJzdCovCisJdW5zaWduZWQgaW50CQlkZXZpY2VfaW5zdGFuY2U7IC8qMCwgMSBmb3IgcGVyaXBocmFsIGluc3RhbmNlKi8KK307CisKKyNlbmRpZiAvKl9fSU5URUxfTUlEX0RNQV9IX18qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggYzIzMzExMy4uYTAzODRhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC01MywxNiArNTMsMjEgQEAKICAqIElSUUZfT05FU0hPVCAtIEludGVycnVwdCBpcyBub3QgcmVlbmFibGVkIGFmdGVyIHRoZSBoYXJkaXJxIGhhbmRsZXIgZmluaXNoZWQuCiAgKiAgICAgICAgICAgICAgICBVc2VkIGJ5IHRocmVhZGVkIGludGVycnVwdHMgd2hpY2ggbmVlZCB0byBrZWVwIHRoZQogICogICAgICAgICAgICAgICAgaXJxIGxpbmUgZGlzYWJsZWQgdW50aWwgdGhlIHRocmVhZGVkIGhhbmRsZXIgaGFzIGJlZW4gcnVuLgorICogSVJRRl9OT19TVVNQRU5EIC0gRG8gbm90IGRpc2FibGUgdGhpcyBJUlEgZHVyaW5nIHN1c3BlbmQKKyAqCiAgKi8KICNkZWZpbmUgSVJRRl9ESVNBQkxFRAkJMHgwMDAwMDAyMAogI2RlZmluZSBJUlFGX1NBTVBMRV9SQU5ET00JMHgwMDAwMDA0MAogI2RlZmluZSBJUlFGX1NIQVJFRAkJMHgwMDAwMDA4MAogI2RlZmluZSBJUlFGX1BST0JFX1NIQVJFRAkweDAwMDAwMTAwCi0jZGVmaW5lIElSUUZfVElNRVIJCTB4MDAwMDAyMDAKKyNkZWZpbmUgX19JUlFGX1RJTUVSCQkweDAwMDAwMjAwCiAjZGVmaW5lIElSUUZfUEVSQ1BVCQkweDAwMDAwNDAwCiAjZGVmaW5lIElSUUZfTk9CQUxBTkNJTkcJMHgwMDAwMDgwMAogI2RlZmluZSBJUlFGX0lSUVBPTEwJCTB4MDAwMDEwMDAKICNkZWZpbmUgSVJRRl9PTkVTSE9UCQkweDAwMDAyMDAwCisjZGVmaW5lIElSUUZfTk9fU1VTUEVORAkJMHgwMDAwNDAwMAorCisjZGVmaW5lIElSUUZfVElNRVIJCShfX0lSUUZfVElNRVIgfCBJUlFGX05PX1NVU1BFTkQpCiAKIC8qCiAgKiBCaXRzIHVzZWQgYnkgdGhyZWFkZWQgaGFuZGxlcnM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvLmggYi9pbmNsdWRlL2xpbnV4L2lvLmgKaW5kZXggNmM3ZjBiYS4uN2ZkMmQyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pby5oCisrKyBiL2luY2x1ZGUvbGludXgvaW8uaApAQCAtMjksMTAgKzI5LDEwIEBACiAKICNpZmRlZiBDT05GSUdfTU1VCiBpbnQgaW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCk7CisJCSAgICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlvcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCisJCQkJICAgICBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LWhlbHBlci5oIGIvaW5jbHVkZS9saW51eC9pb21tdS1oZWxwZXIuaAppbmRleCA2NGQxYjYzLi44NmJkZWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lvbW11LWhlbHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9tbXUtaGVscGVyLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9JT01NVV9IRUxQRVJfSAogI2RlZmluZSBfTElOVVhfSU9NTVVfSEVMUEVSX0gKIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW9tbXVfZGV2aWNlX21heF9pbmRleCh1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCQkJCSAgIHU2NCBkbWFfbWFzaykKQEAgLTIwLDcgKzIyLDEzIEBACiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBib3VuZGFyeV9zaXplLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ25fbWFzayk7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIGlvbW11X251bV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpb19wYWdlX3NpemUpOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlvbW11X251bV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgaW9fcGFnZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IChhZGRyICYgKGlvX3BhZ2Vfc2l6ZSAtIDEpKSArIGxlbjsKKworCXJldHVybiBESVZfUk9VTkRfVVAoc2l6ZSwgaW9fcGFnZV9zaXplKTsKK30KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LmggYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKaW5kZXggYmUyMmFkOC4uMGEyYmE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9tbXUuaApAQCAtMzAsNiArMzAsNyBAQAogfTsKIAogI2RlZmluZSBJT01NVV9DQVBfQ0FDSEVfQ09IRVJFTkNZCTB4MQorI2RlZmluZSBJT01NVV9DQVBfSU5UUl9SRU1BUAkJMHgyCS8qIGlzb2xhdGVzIGRldmljZSBpbnRycyAqLwogCiBzdHJ1Y3QgaW9tbXVfb3BzIHsKIAlpbnQgKCpkb21haW5faW5pdCkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmggYi9pbmNsdWRlL2xpbnV4L2lzdGFsbGlvbi5oCmluZGV4IDdmYWNhOTguLmFkNzAwYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXN0YWxsaW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc3RhbGxpb24uaApAQCAtODYsNyArODYsNyBAQAogCXVuc2lnbmVkIGxvbmcJbWFnaWM7CiAJdW5zaWduZWQgaW50CWJyZG5yOwogCXVuc2lnbmVkIGludAlicmR0eXBlOwotCXVuc2lnbmVkIGludAlzdGF0ZTsKKwl1bnNpZ25lZCBsb25nCXN0YXRlOwogCXVuc2lnbmVkIGludAlucnBhbmVsczsKIAl1bnNpZ25lZCBpbnQJbnJwb3J0czsKIAl1bnNpZ25lZCBpbnQJbnJkZXZzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCBhZGY4MzJkLi4wYjUyOTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNjAxLDEzICs2MDEsMTMgQEAKIAkgKiBOdW1iZXIgb2Ygb3V0c3RhbmRpbmcgdXBkYXRlcyBydW5uaW5nIG9uIHRoaXMgdHJhbnNhY3Rpb24KIAkgKiBbdF9oYW5kbGVfbG9ja10KIAkgKi8KLQlpbnQJCQl0X3VwZGF0ZXM7CisJYXRvbWljX3QJCXRfdXBkYXRlczsKIAogCS8qCiAJICogTnVtYmVyIG9mIGJ1ZmZlcnMgcmVzZXJ2ZWQgZm9yIHVzZSBieSBhbGwgaGFuZGxlcyBpbiB0aGlzIHRyYW5zYWN0aW9uCiAJICogaGFuZGxlIGJ1dCBub3QgeWV0IG1vZGlmaWVkLiBbdF9oYW5kbGVfbG9ja10KIAkgKi8KLQlpbnQJCQl0X291dHN0YW5kaW5nX2NyZWRpdHM7CisJYXRvbWljX3QJCXRfb3V0c3RhbmRpbmdfY3JlZGl0czsKIAogCS8qCiAJICogRm9yd2FyZCBhbmQgYmFja3dhcmQgbGlua3MgZm9yIHRoZSBjaXJjdWxhciBsaXN0IG9mIGFsbCB0cmFuc2FjdGlvbnMKQEAgLTYyOSw3ICs2MjksNyBAQAogCS8qCiAJICogSG93IG1hbnkgaGFuZGxlcyB1c2VkIHRoaXMgdHJhbnNhY3Rpb24/IFt0X2hhbmRsZV9sb2NrXQogCSAqLwotCWludCB0X2hhbmRsZV9jb3VudDsKKwlhdG9taWNfdAkJdF9oYW5kbGVfY291bnQ7CiAKIAkvKgogCSAqIFRoaXMgdHJhbnNhY3Rpb24gaXMgYmVpbmcgZm9yY2VkIGFuZCBzb21lIHByb2Nlc3MgaXMKQEAgLTc2NCw3ICs3NjQsNyBAQAogCS8qCiAJICogUHJvdGVjdCB0aGUgdmFyaW91cyBzY2FsYXJzIGluIHRoZSBqb3VybmFsCiAJICovCi0Jc3BpbmxvY2tfdAkJal9zdGF0ZV9sb2NrOworCXJ3bG9ja190CQlqX3N0YXRlX2xvY2s7CiAKIAkvKgogCSAqIE51bWJlciBvZiBwcm9jZXNzZXMgd2FpdGluZyB0byBjcmVhdGUgYSBiYXJyaWVyIGxvY2sgW2pfc3RhdGVfbG9ja10KQEAgLTEwODIsNyArMTA4Miw5IEBACiAgKi8KIAogZXh0ZXJuIGhhbmRsZV90ICpqYmQyX2pvdXJuYWxfc3RhcnQoam91cm5hbF90ICosIGludCBuYmxvY2tzKTsKLWV4dGVybiBpbnQJIGpiZDJfam91cm5hbF9yZXN0YXJ0IChoYW5kbGVfdCAqLCBpbnQgbmJsb2Nrcyk7CitleHRlcm4gaGFuZGxlX3QgKmpiZDJfX2pvdXJuYWxfc3RhcnQoam91cm5hbF90ICosIGludCBuYmxvY2tzLCBpbnQgZ2ZwX21hc2spOworZXh0ZXJuIGludAkgamJkMl9qb3VybmFsX3Jlc3RhcnQoaGFuZGxlX3QgKiwgaW50IG5ibG9ja3MpOworZXh0ZXJuIGludAkgamJkMl9fam91cm5hbF9yZXN0YXJ0KGhhbmRsZV90ICosIGludCBuYmxvY2tzLCBpbnQgZ2ZwX21hc2spOwogZXh0ZXJuIGludAkgamJkMl9qb3VybmFsX2V4dGVuZCAoaGFuZGxlX3QgKiwgaW50IG5ibG9ja3MpOwogZXh0ZXJuIGludAkgamJkMl9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlX3QgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopOwogZXh0ZXJuIGludAkgamJkMl9qb3VybmFsX2dldF9jcmVhdGVfYWNjZXNzIChoYW5kbGVfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CkBAIC0xMjU3LDggKzEyNTksOCBAQAogewogCWludCBuYmxvY2tzID0gam91cm5hbC0+al9tYXhfdHJhbnNhY3Rpb25fYnVmZmVyczsKIAlpZiAoam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKQotCQluYmxvY2tzICs9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbi0+Ci0JCQkJCXRfb3V0c3RhbmRpbmdfY3JlZGl0czsKKwkJbmJsb2NrcyArPSBhdG9taWNfcmVhZCgmam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uLT4KKwkJCQkgICAgICAgdF9vdXRzdGFuZGluZ19jcmVkaXRzKTsKIAlyZXR1cm4gbmJsb2NrczsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMi5oIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCmluZGV4IGVkYjkyMzEuLmExOGI3MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamZmczIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKQEAgLTEsNyArMSw4IEBACiAvKgogICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA0LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKICAqIENyZWF0ZWQgYnkgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDVkZTgzOGIuLmQ4NDhjYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTc3LDExICsxNzcsMTIgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgcGFuaWNfbm90aWZpZXJfbGlzdDsKLWV4dGVybiBsb25nICgqcGFuaWNfYmxpbmspKGxvbmcgdGltZSk7CitleHRlcm4gbG9uZyAoKnBhbmljX2JsaW5rKShpbnQgc3RhdGUpOwogTk9SRVRfVFlQRSB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoTk9SRVRfQU5EIGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpIF9fY29sZDsKIGV4dGVybiB2b2lkIG9vcHNfZW50ZXIodm9pZCk7CiBleHRlcm4gdm9pZCBvb3BzX2V4aXQodm9pZCk7Cit2b2lkIHByaW50X29vcHNfZW5kX21hcmtlcih2b2lkKTsKIGV4dGVybiBpbnQgb29wc19tYXlfcHJpbnQodm9pZCk7CiBOT1JFVF9UWVBFIHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCiAJQVRUUklCX05PUkVUOwpAQCAtMjUyLDYgKzI1MywxMyBAQAogI2RlZmluZSBGV19XQVJOCQkiW0Zpcm13YXJlIFdhcm5dOiAiCiAjZGVmaW5lIEZXX0lORk8JCSJbRmlybXdhcmUgSW5mb106ICIKIAorLyoKKyAqIEhXX0VSUgorICogQWRkIHRoaXMgdG8gYSBtZXNzYWdlIGZvciBoYXJkd2FyZSBlcnJvcnMsIHNvIHRoYXQgdXNlciBjYW4gcmVwb3J0CisgKiBpdCB0byBoYXJkd2FyZSB2ZW5kb3IgaW5zdGVhZCBvZiBMS01MIG9yIHNvZnR3YXJlIHZlbmRvci4KKyAqLworI2RlZmluZSBIV19FUlIJCSJbSGFyZHdhcmUgRXJyb3JdOiAiCisKICNpZmRlZiBDT05GSUdfUFJJTlRLCiBhc21saW5rYWdlIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKTsKQEAgLTUxMyw5ICs1MjEsNiBAQAogZXh0ZXJuIHZvaWQgdHJhY2luZ19zdG9wKHZvaWQpOwogZXh0ZXJuIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCk7CiAKLWV4dGVybiB2b2lkCi1mdHJhY2Vfc3BlY2lhbCh1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKTsKLQogc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQogX19fX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CkBAIC01OTEsOCArNTk2LDYgQEAKIAogZXh0ZXJuIHZvaWQgZnRyYWNlX2R1bXAoZW51bSBmdHJhY2VfZHVtcF9tb2RlIG9vcHNfZHVtcF9tb2RlKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZ0cmFjZV9zcGVjaWFsKHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpIHsgfQogc3RhdGljIGlubGluZSBpbnQKIHRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwogCkBAIC02MTQsMTcgKzYxNyw2IEBACiAjZW5kaWYgLyogQ09ORklHX1RSQUNJTkcgKi8KIAogLyoKLSAqICAgICAgRGlzcGxheSBhbiBJUCBhZGRyZXNzIGluIHJlYWRhYmxlIGZvcm1hdC4KLSAqLwotCi0jZGVmaW5lIE5JUFFVQUQoYWRkcikgXAotCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVswXSwgXAotCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVsxXSwgXAotCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVsyXSwgXAotCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVszXQotI2RlZmluZSBOSVBRVUFEX0ZNVCAiJXUuJXUuJXUuJXUiCi0KLS8qCiAgKiBtaW4oKS9tYXgoKS9jbGFtcCgpIG1hY3JvcyB0aGF0IGFsc28gZG8KICAqIHN0cmljdCB0eXBlLWNoZWNraW5nLi4gU2VlIHRoZQogICogInVubmVjZXNzYXJ5IiBwb2ludGVyIGNvbXBhcmlzb24uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tmaWZvLmggYi9pbmNsdWRlL2xpbnV4L2tmaWZvLmgKaW5kZXggOWZhZDA1Mi4uMzExZjg3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZmlmby5oCisrKyBiL2luY2x1ZGUvbGludXgva2ZpZm8uaApAQCAtMSw4ICsxLDcgQEAKIC8qCi0gKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCisgKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkvMjAxMCBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMCw4ICsxOSwxMSBAQAogICoKICAqLwogCisjaWZuZGVmIF9MSU5VWF9LRklGT19ICisjZGVmaW5lIF9MSU5VWF9LRklGT19ICisKIC8qCi0gKiBIb3d0byBwb3J0aW5nIGRyaXZlcnMgdG8gdGhlIG5ldyBnZW5lcmljIGZpZm8gQVBJOgorICogSG93IHRvIHBvcnRpbmcgZHJpdmVycyB0byB0aGUgbmV3IGdlbmVyaWMgRklGTyBBUEk6CiAgKgogICogLSBNb2RpZnkgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSAic3RydWN0IGtmaWZvICoiIG9iamVjdCBpbnRvIGEKICAqICAgaW4tcGxhY2UgInN0cnVjdCBrZmlmbyIgb2JqZWN0CkBAIC0zMCw1ODYgKzMyLDgxMyBAQAogICogICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25zCiAgKiAtIFJlcGxhY2UgdGhlIHVzZSBvZiBfX2tmaWZvX3B1dCBpbnRvIGtmaWZvX2luIGFuZCBfX2tmaWZvX2dldAogICogICBpbnRvIGtmaWZvX291dAotICogLSBSZXBsYWNlIHRoZSB1c2Ugb2Yga2ZpZm9fcHV0IGludG8ga2ZpZm9faW5fbG9ja2VkIGFuZCBrZmlmb19nZXQKLSAqICAgaW50byBrZmlmb19vdXRfbG9ja2VkCisgKiAtIFJlcGxhY2UgdGhlIHVzZSBvZiBrZmlmb19wdXQgaW50byBrZmlmb19pbl9zcGlubG9ja2VkIGFuZCBrZmlmb19nZXQKKyAqICAgaW50byBrZmlmb19vdXRfc3BpbmxvY2tlZAogICogICBOb3RlOiB0aGUgc3BpbmxvY2sgcG9pbnRlciBmb3JtZXJseSBwYXNzZWQgdG8ga2ZpZm9faW5pdC9rZmlmb19hbGxvYwotICogICBtdXN0IGJlIHBhc3NlZCBub3cgdG8gdGhlIGtmaWZvX2luX2xvY2tlZCBhbmQga2ZpZm9fb3V0X2xvY2tlZAotICogICBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuCi0gKiAtIEFsbCBmb3JtZXJseSBuYW1lIF9fa2ZpZm9fKiBmdW5jdGlvbnMgaGFzIGJlZW4gcmVuYW1lZCBpbnRvIGtmaWZvXyoKKyAqICAgbXVzdCBiZSBwYXNzZWQgbm93IHRvIHRoZSBrZmlmb19pbl9zcGlubG9ja2VkIGFuZCBrZmlmb19vdXRfc3BpbmxvY2tlZAorICogICBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIKKyAqIC0gVGhlIGZvcm1lcmx5IF9fa2ZpZm9fKiBmdW5jdGlvbnMgYXJlIHJlbmFtZWQgaW50byBrZmlmb18qCiAgKi8KIAotI2lmbmRlZiBfTElOVVhfS0ZJRk9fSAotI2RlZmluZSBfTElOVVhfS0ZJRk9fSAorLyoKKyAqIE5vdGUgYWJvdXQgbG9ja2luZyA6IFRoZXJlIGlzIG5vIGxvY2tpbmcgcmVxdWlyZWQgdW50aWwgb25seSAqIG9uZSByZWFkZXIKKyAqIGFuZCBvbmUgd3JpdGVyIGlzIHVzaW5nIHRoZSBmaWZvIGFuZCBubyBrZmlmb19yZXNldCgpIHdpbGwgYmUgKiBjYWxsZWQKKyAqICBrZmlmb19yZXNldF9vdXQoKSBjYW4gYmUgc2FmZWx5IHVzZWQsIHVudGlsIGl0IHdpbGwgYmUgb25seSBjYWxsZWQKKyAqIGluIHRoZSByZWFkZXIgdGhyZWFkLgorICogIEZvciBtdWx0aXBsZSB3cml0ZXIgYW5kIG9uZSByZWFkZXIgdGhlcmUgaXMgb25seSBhIG5lZWQgdG8gbG9jayB0aGUgd3JpdGVyLgorICogQW5kIHZpY2UgdmVyc2EgZm9yIG9ubHkgb25lIHdyaXRlciBhbmQgbXVsdGlwbGUgcmVhZGVyIHRoZXJlIGlzIG9ubHkgYSBuZWVkCisgKiB0byBsb2NrIHRoZSByZWFkZXIuCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAotc3RydWN0IGtmaWZvIHsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7CS8qIHRoZSBidWZmZXIgaG9sZGluZyB0aGUgZGF0YSAqLwotCXVuc2lnbmVkIGludCBzaXplOwkvKiB0aGUgc2l6ZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBpbjsJLyogZGF0YSBpcyBhZGRlZCBhdCBvZmZzZXQgKGluICUgc2l6ZSkgKi8KLQl1bnNpZ25lZCBpbnQgb3V0OwkvKiBkYXRhIGlzIGV4dHJhY3RlZCBmcm9tIG9mZi4gKG91dCAlIHNpemUpICovCitzdHJ1Y3QgX19rZmlmbyB7CisJdW5zaWduZWQgaW50CWluOworCXVuc2lnbmVkIGludAlvdXQ7CisJdW5zaWduZWQgaW50CW1hc2s7CisJdW5zaWduZWQgaW50CWVzaXplOworCXZvaWQJCSpkYXRhOwogfTsKIAotLyoKLSAqIE1hY3JvcyBmb3IgZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBrZmlmbyBkYXRhdHlwZQotICovCi0KLS8qIGhlbHBlciBtYWNybyAqLwotI2RlZmluZSBfX2tmaWZvX2luaXRpYWxpemVyKHMsIGIpIFwKLQkoc3RydWN0IGtmaWZvKSB7IFwKLQkJLnNpemUJPSBzLCBcCi0JCS5pbgk9IDAsIFwKLQkJLm91dAk9IDAsIFwKLQkJLmJ1ZmZlciA9IGIgXAorI2RlZmluZSBfX1NUUlVDVF9LRklGT19DT01NT04oZGF0YXR5cGUsIHJlY3NpemUsIHB0cnR5cGUpIFwKKwl1bmlvbiB7IFwKKwkJc3RydWN0IF9fa2ZpZm8Ja2ZpZm87IFwKKwkJZGF0YXR5cGUJKnR5cGU7IFwKKwkJY2hhcgkJKCpyZWN0eXBlKVtyZWNzaXplXTsgXAorCQlwdHJ0eXBlCQkqcHRyOyBcCisJCWNvbnN0IHB0cnR5cGUJKnB0cl9jb25zdDsgXAogCX0KIAotLyoqCi0gKiBERUNMQVJFX0tGSUZPIC0gbWFjcm8gdG8gZGVjbGFyZSBhIGtmaWZvIGFuZCB0aGUgYXNzb2NpYXRlZCBidWZmZXIKLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQotICogQHNpemU6IHNpemUgb2YgdGhlIGZpZm8gYnVmZmVyLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotICoKLSAqIE5vdGUxOiB0aGUgbWFjcm8gY2FuIGJlIHVzZWQgaW5zaWRlIHN0cnVjdCBvciB1bmlvbiBkZWNsYXJhdGlvbgotICogTm90ZTI6IHRoZSBtYWNybyBjcmVhdGVzIHR3byBvYmplY3RzOgotICogIEEga2ZpZm8gb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGEgYnVmZmVyIGZvciB0aGUga2ZpZm8KLSAqICBvYmplY3QgbmFtZWQgbmFtZSMja2ZpZm9fYnVmZmVyCisjZGVmaW5lIF9fU1RSVUNUX0tGSUZPKHR5cGUsIHNpemUsIHJlY3NpemUsIHB0cnR5cGUpIFwKK3sgXAorCV9fU1RSVUNUX0tGSUZPX0NPTU1PTih0eXBlLCByZWNzaXplLCBwdHJ0eXBlKTsgXAorCXR5cGUJCWJ1ZlsoKHNpemUgPCAyKSB8fCAoc2l6ZSAmIChzaXplIC0gMSkpKSA/IC0xIDogc2l6ZV07IFwKK30KKworI2RlZmluZSBTVFJVQ1RfS0ZJRk8odHlwZSwgc2l6ZSkgXAorCXN0cnVjdCBfX1NUUlVDVF9LRklGTyh0eXBlLCBzaXplLCAwLCB0eXBlKQorCisjZGVmaW5lIF9fU1RSVUNUX0tGSUZPX1BUUih0eXBlLCByZWNzaXplLCBwdHJ0eXBlKSBcCit7IFwKKwlfX1NUUlVDVF9LRklGT19DT01NT04odHlwZSwgcmVjc2l6ZSwgcHRydHlwZSk7IFwKKwl0eXBlCQlidWZbMF07IFwKK30KKworI2RlZmluZSBTVFJVQ1RfS0ZJRk9fUFRSKHR5cGUpIFwKKwlzdHJ1Y3QgX19TVFJVQ1RfS0ZJRk9fUFRSKHR5cGUsIDAsIHR5cGUpCisKKy8qCisgKiBkZWZpbmUgY29tcGF0aWJpbGl0eSAic3RydWN0IGtmaWZvIiBmb3IgZHluYW1pYyBhbGxvY2F0ZWQgZmlmb3MKICAqLwotI2RlZmluZSBERUNMQVJFX0tGSUZPKG5hbWUsIHNpemUpIFwKLXVuaW9uIHsgXAotCXN0cnVjdCBrZmlmbyBuYW1lOyBcCi0JdW5zaWduZWQgY2hhciBuYW1lIyNrZmlmb19idWZmZXJbc2l6ZSArIHNpemVvZihzdHJ1Y3Qga2ZpZm8pXTsgXAorc3RydWN0IGtmaWZvIF9fU1RSVUNUX0tGSUZPX1BUUih1bnNpZ25lZCBjaGFyLCAwLCB2b2lkKTsKKworI2RlZmluZSBTVFJVQ1RfS0ZJRk9fUkVDXzEoc2l6ZSkgXAorCXN0cnVjdCBfX1NUUlVDVF9LRklGTyh1bnNpZ25lZCBjaGFyLCBzaXplLCAxLCB2b2lkKQorCisjZGVmaW5lIFNUUlVDVF9LRklGT19SRUNfMihzaXplKSBcCisJc3RydWN0IF9fU1RSVUNUX0tGSUZPKHVuc2lnbmVkIGNoYXIsIHNpemUsIDIsIHZvaWQpCisKKy8qCisgKiBkZWZpbmUga2ZpZm9fcmVjIHR5cGVzCisgKi8KK3N0cnVjdCBrZmlmb19yZWNfcHRyXzEgX19TVFJVQ1RfS0ZJRk9fUFRSKHVuc2lnbmVkIGNoYXIsIDEsIHZvaWQpOworc3RydWN0IGtmaWZvX3JlY19wdHJfMiBfX1NUUlVDVF9LRklGT19QVFIodW5zaWduZWQgY2hhciwgMiwgdm9pZCk7CisKKy8qCisgKiBoZWxwZXIgbWFjcm8gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiByZWFsIGluIHBsYWNlIGZpZm8gd2hlcmUgdGhlIGZpZm8KKyAqIGFycmF5IGlzIGEgcGFydCBvZiB0aGUgc3RydWN0dXJlIGFuZCB0aGUgZmlmbyB0eXBlIHdoZXJlIHRoZSBhcnJheSBpcworICogb3V0c2lkZSBvZiB0aGUgZmlmbyBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUJX19pc19rZmlmb19wdHIoZmlmbykJKHNpemVvZigqZmlmbykgPT0gc2l6ZW9mKHN0cnVjdCBfX2tmaWZvKSkKKworLyoqCisgKiBERUNMQVJFX0tGSUZPX1BUUiAtIG1hY3JvIHRvIGRlY2xhcmUgYSBmaWZvIHBvaW50ZXIgb2JqZWN0CisgKiBAZmlmbzogbmFtZSBvZiB0aGUgZGVjbGFyZWQgZmlmbworICogQHR5cGU6IHR5cGUgb2YgdGhlIGZpZm8gZWxlbWVudHMKKyAqLworI2RlZmluZSBERUNMQVJFX0tGSUZPX1BUUihmaWZvLCB0eXBlKQlTVFJVQ1RfS0ZJRk9fUFRSKHR5cGUpIGZpZm8KKworLyoqCisgKiBERUNMQVJFX0tGSUZPIC0gbWFjcm8gdG8gZGVjbGFyZSBhIGZpZm8gb2JqZWN0CisgKiBAZmlmbzogbmFtZSBvZiB0aGUgZGVjbGFyZWQgZmlmbworICogQHR5cGU6IHR5cGUgb2YgdGhlIGZpZm8gZWxlbWVudHMKKyAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaWZvLCB0aGlzIG11c3QgYmUgYSBwb3dlciBvZiAyCisgKi8KKyNkZWZpbmUgREVDTEFSRV9LRklGTyhmaWZvLCB0eXBlLCBzaXplKQlTVFJVQ1RfS0ZJRk8odHlwZSwgc2l6ZSkgZmlmbworCisvKioKKyAqIElOSVRfS0ZJRk8gLSBJbml0aWFsaXplIGEgZmlmbyBkZWNsYXJlZCBieSBERUNMQVJFX0tGSUZPCisgKiBAZmlmbzogbmFtZSBvZiB0aGUgZGVjbGFyZWQgZmlmbyBkYXRhdHlwZQorICovCisjZGVmaW5lIElOSVRfS0ZJRk8oZmlmbykgXAorKHZvaWQpKHsgXAorCXR5cGVvZigmKGZpZm8pKSBfX3RtcCA9ICYoZmlmbyk7IFwKKwlzdHJ1Y3QgX19rZmlmbyAqX19rZmlmbyA9ICZfX3RtcC0+a2ZpZm87IFwKKwlfX2tmaWZvLT5pbiA9IDA7IFwKKwlfX2tmaWZvLT5vdXQgPSAwOyBcCisJX19rZmlmby0+bWFzayA9IF9faXNfa2ZpZm9fcHRyKF9fdG1wKSA/IDAgOiBBUlJBWV9TSVpFKF9fdG1wLT5idWYpIC0gMTtcCisJX19rZmlmby0+ZXNpemUgPSBzaXplb2YoKl9fdG1wLT5idWYpOyBcCisJX19rZmlmby0+ZGF0YSA9IF9faXNfa2ZpZm9fcHRyKF9fdG1wKSA/ICBOVUxMIDogX190bXAtPmJ1ZjsgXAorfSkKKworLyoqCisgKiBERUZJTkVfS0ZJRk8gLSBtYWNybyB0byBkZWZpbmUgYW5kIGluaXRpYWxpemUgYSBmaWZvCisgKiBAZmlmbzogbmFtZSBvZiB0aGUgZGVjbGFyZWQgZmlmbyBkYXRhdHlwZQorICogQHR5cGU6IHR5cGUgb2YgdGhlIGZpZm8gZWxlbWVudHMKKyAqIEBzaXplOiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaWZvLCB0aGlzIG11c3QgYmUgYSBwb3dlciBvZiAyCisgKgorICogTm90ZTogdGhlIG1hY3JvIGNhbiBiZSB1c2VkIGZvciBnbG9iYWwgYW5kIGxvY2FsIGZpZm8gZGF0YSB0eXBlIHZhcmlhYmxlcy4KKyAqLworI2RlZmluZSBERUZJTkVfS0ZJRk8oZmlmbywgdHlwZSwgc2l6ZSkgXAorCURFQ0xBUkVfS0ZJRk8oZmlmbywgdHlwZSwgc2l6ZSkgPSBcCisJKHR5cGVvZihmaWZvKSkgeyBcCisJCXsgXAorCQkJeyBcCisJCQkuaW4JPSAwLCBcCisJCQkub3V0CT0gMCwgXAorCQkJLm1hc2sJPSBfX2lzX2tmaWZvX3B0cigmKGZpZm8pKSA/IFwKKwkJCQkgIDAgOiBcCisJCQkJICBBUlJBWV9TSVpFKChmaWZvKS5idWYpIC0gMSwgXAorCQkJLmVzaXplCT0gc2l6ZW9mKCooZmlmbykuYnVmKSwgXAorCQkJLmRhdGEJPSBfX2lzX2tmaWZvX3B0cigmKGZpZm8pKSA/IFwKKwkJCQlOVUxMIDogXAorCQkJCShmaWZvKS5idWYsIFwKKwkJCX0gXAorCQl9IFwKKwl9CisKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19tdXN0X2NoZWNrCitfX2tmaWZvX211c3RfY2hlY2tfaGVscGVyKHVuc2lnbmVkIGludCB2YWwpCit7CisJcmV0dXJuIHZhbDsKIH0KIAogLyoqCi0gKiBJTklUX0tGSUZPIC0gSW5pdGlhbGl6ZSBhIGtmaWZvIGRlY2xhcmVkIGJ5IERFQ0xBUkVfS0ZJRk8KLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQotICovCi0jZGVmaW5lIElOSVRfS0ZJRk8obmFtZSkgXAotCW5hbWUgPSBfX2tmaWZvX2luaXRpYWxpemVyKHNpemVvZihuYW1lIyNrZmlmb19idWZmZXIpIC0gXAotCQkJCXNpemVvZihzdHJ1Y3Qga2ZpZm8pLCBcCi0JCQkJbmFtZSMja2ZpZm9fYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBrZmlmbykpCi0KLS8qKgotICogREVGSU5FX0tGSUZPIC0gbWFjcm8gdG8gZGVmaW5lIGFuZCBpbml0aWFsaXplIGEga2ZpZm8KLSAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZWNsYXJlZCBrZmlmbyBkYXRhdHlwZQotICogQHNpemU6IHNpemUgb2YgdGhlIGZpZm8gYnVmZmVyLiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorICoga2ZpZm9faW5pdGlhbGl6ZWQgLSBDaGVjayBpZiB0aGUgZmlmbyBpcyBpbml0aWFsaXplZAorICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gY2hlY2sKICAqCi0gKiBOb3RlMTogdGhlIG1hY3JvIGNhbiBiZSB1c2VkIGZvciBnbG9iYWwgYW5kIGxvY2FsIGtmaWZvIGRhdGEgdHlwZSB2YXJpYWJsZXMKLSAqIE5vdGUyOiB0aGUgbWFjcm8gY3JlYXRlcyB0d28gb2JqZWN0czoKLSAqICBBIGtmaWZvIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBhIGJ1ZmZlciBmb3IgdGhlIGtmaWZvCi0gKiAgb2JqZWN0IG5hbWVkIG5hbWUjI2tmaWZvX2J1ZmZlcgotICovCi0jZGVmaW5lIERFRklORV9LRklGTyhuYW1lLCBzaXplKSBcCi0JdW5zaWduZWQgY2hhciBuYW1lIyNrZmlmb19idWZmZXJbc2l6ZV07IFwKLQlzdHJ1Y3Qga2ZpZm8gbmFtZSA9IF9fa2ZpZm9faW5pdGlhbGl6ZXIoc2l6ZSwgbmFtZSMja2ZpZm9fYnVmZmVyKQotCi1leHRlcm4gdm9pZCBrZmlmb19pbml0KHN0cnVjdCBrZmlmbyAqZmlmbywgdm9pZCAqYnVmZmVyLAotCQkJdW5zaWduZWQgaW50IHNpemUpOwotZXh0ZXJuIF9fbXVzdF9jaGVjayBpbnQga2ZpZm9fYWxsb2Moc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCWdmcF90IGdmcF9tYXNrKTsKLWV4dGVybiB2b2lkIGtmaWZvX2ZyZWUoc3RydWN0IGtmaWZvICpmaWZvKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQga2ZpZm9faW4oc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fb3V0KHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQl2b2lkICp0bywgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19vdXRfcGVlayhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCQkJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIG9mZnNldCk7Ci0KLS8qKgotICoga2ZpZm9faW5pdGlhbGl6ZWQgLSBDaGVjayBpZiBrZmlmbyBpcyBpbml0aWFsaXplZC4KLSAqIEBmaWZvOiBmaWZvIHRvIGNoZWNrCi0gKiBSZXR1cm4gJXRydWUgaWYgRklGTyBpcyBpbml0aWFsaXplZCwgb3RoZXJ3aXNlICVmYWxzZS4KKyAqIFJldHVybiAldHJ1ZSBpZiBmaWZvIGlzIGluaXRpYWxpemVkLCBvdGhlcndpc2UgJWZhbHNlLgogICogQXNzdW1lcyB0aGUgZmlmbyB3YXMgMCBiZWZvcmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBrZmlmb19pbml0aWFsaXplZChzdHJ1Y3Qga2ZpZm8gKmZpZm8pCi17Ci0JcmV0dXJuIGZpZm8tPmJ1ZmZlciAhPSBOVUxMOwotfQorI2RlZmluZSBrZmlmb19pbml0aWFsaXplZChmaWZvKSAoKGZpZm8pLT5rZmlmby5tYXNrKQogCiAvKioKLSAqIGtmaWZvX3Jlc2V0IC0gcmVtb3ZlcyB0aGUgZW50aXJlIEZJRk8gY29udGVudHMKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSBlbXB0aWVkLgorICoga2ZpZm9fZXNpemUgLSByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IG1hbmFnZWQgYnkgdGhlIGZpZm8KKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKICAqLwotc3RhdGljIGlubGluZSB2b2lkIGtmaWZvX3Jlc2V0KHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlmaWZvLT5pbiA9IGZpZm8tPm91dCA9IDA7Ci19CisjZGVmaW5lIGtmaWZvX2VzaXplKGZpZm8pCSgoZmlmbyktPmtmaWZvLmVzaXplKQogCiAvKioKLSAqIGtmaWZvX3Jlc2V0X291dCAtIHNraXAgRklGTyBjb250ZW50cwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIGVtcHRpZWQuCisgKiBrZmlmb19yZWNzaXplIC0gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVjb3JkIGxlbmd0aCBmaWVsZAorICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fcmVzZXRfb3V0KHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlzbXBfbWIoKTsKLQlmaWZvLT5vdXQgPSBmaWZvLT5pbjsKLX0KKyNkZWZpbmUga2ZpZm9fcmVjc2l6ZShmaWZvKQkoc2l6ZW9mKCooZmlmbyktPnJlY3R5cGUpKQogCiAvKioKLSAqIGtmaWZvX3NpemUgLSByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWZvIGluIGJ5dGVzCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KKyAqIGtmaWZvX3NpemUgLSByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBmaWZvIGluIGVsZW1lbnRzCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb19zaXplKHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlyZXR1cm4gZmlmby0+c2l6ZTsKLX0KKyNkZWZpbmUga2ZpZm9fc2l6ZShmaWZvKQkoKGZpZm8pLT5rZmlmby5tYXNrICsgMSkKIAogLyoqCi0gKiBrZmlmb19sZW4gLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBieXRlcyBpbiB0aGUgRklGTwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBrZmlmb19yZXNldCAtIHJlbW92ZXMgdGhlIGVudGlyZSBmaWZvIGNvbnRlbnQKKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqCisgKiBOb3RlOiB1c2FnZSBvZiBrZmlmb19yZXNldCgpIGlzIGRhbmdlcm91cy4gSXQgc2hvdWxkIGJlIG9ubHkgY2FsbGVkIHdoZW4gdGhlCisgKiBmaWZvIGlzIGV4Y2x1c2l2ZWQgbG9ja2VkIG9yIHdoZW4gaXQgaXMgc2VjdXJlZCB0aGF0IG5vIG90aGVyIHRocmVhZCBpcworICogYWNjZXNzaW5nIHRoZSBmaWZvLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrZmlmb19sZW4oc3RydWN0IGtmaWZvICpmaWZvKQotewotCXJlZ2lzdGVyIHVuc2lnbmVkIGludAlvdXQ7CisjZGVmaW5lIGtmaWZvX3Jlc2V0KGZpZm8pIFwKKyh2b2lkKSh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJX190bXAtPmtmaWZvLmluID0gX190bXAtPmtmaWZvLm91dCA9IDA7IFwKK30pCiAKLQlvdXQgPSBmaWZvLT5vdXQ7Ci0Jc21wX3JtYigpOwotCXJldHVybiBmaWZvLT5pbiAtIG91dDsKLX0KKy8qKgorICoga2ZpZm9fcmVzZXRfb3V0IC0gc2tpcCBmaWZvIGNvbnRlbnQKKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqCisgKiBOb3RlOiBUaGUgdXNhZ2Ugb2Yga2ZpZm9fcmVzZXRfb3V0KCkgaXMgc2FmZSB1bnRpbCBpdCB3aWxsIGJlIG9ubHkgY2FsbGVkCisgKiBmcm9tIHRoZSByZWFkZXIgdGhyZWFkIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlci4gT3RoZXJ3aXNlCisgKiBpdCBpcyBkYW5nZXJvdXMgYW5kIG11c3QgYmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMga2ZpZm9fcmVzZXQoKS4KKyAqLworI2RlZmluZSBrZmlmb19yZXNldF9vdXQoZmlmbykJXAorKHZvaWQpKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwlfX3RtcC0+a2ZpZm8ub3V0ID0gX190bXAtPmtmaWZvLmluOyBcCit9KQorCisvKioKKyAqIGtmaWZvX2xlbiAtIHJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIGVsZW1lbnRzIGluIHRoZSBmaWZvCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKi8KKyNkZWZpbmUga2ZpZm9fbGVuKGZpZm8pIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wbCA9IChmaWZvKTsgXAorCV9fdG1wbC0+a2ZpZm8uaW4gLSBfX3RtcGwtPmtmaWZvLm91dDsgXAorfSkKIAogLyoqCiAgKiBrZmlmb19pc19lbXB0eSAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlmbyBpcyBlbXB0eQotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIGludCBrZmlmb19pc19lbXB0eShzdHJ1Y3Qga2ZpZm8gKmZpZm8pCi17Ci0JcmV0dXJuIGZpZm8tPmluID09IGZpZm8tPm91dDsKLX0KKyNkZWZpbmUJa2ZpZm9faXNfZW1wdHkoZmlmbykgXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXBxID0gKGZpZm8pOyBcCisJX190bXBxLT5rZmlmby5pbiA9PSBfX3RtcHEtPmtmaWZvLm91dDsgXAorfSkKIAogLyoqCiAgKiBrZmlmb19pc19mdWxsIC0gcmV0dXJucyB0cnVlIGlmIHRoZSBmaWZvIGlzIGZ1bGwKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgorICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAogICovCi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayBpbnQga2ZpZm9faXNfZnVsbChzdHJ1Y3Qga2ZpZm8gKmZpZm8pCi17Ci0JcmV0dXJuIGtmaWZvX2xlbihmaWZvKSA9PSBrZmlmb19zaXplKGZpZm8pOwotfQorI2RlZmluZQlrZmlmb19pc19mdWxsKGZpZm8pIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wcSA9IChmaWZvKTsgXAorCWtmaWZvX2xlbihfX3RtcHEpID4gX190bXBxLT5rZmlmby5tYXNrOyBcCit9KQogCiAvKioKLSAqIGtmaWZvX2F2YWlsIC0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgRklGTwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCisgKiBrZmlmb19hdmFpbCAtIHJldHVybnMgdGhlIG51bWJlciBvZiB1bnVzZWQgZWxlbWVudHMgaW4gdGhlIGZpZm8KKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKICAqLwotc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2F2YWlsKHN0cnVjdCBrZmlmbyAqZmlmbykKLXsKLQlyZXR1cm4ga2ZpZm9fc2l6ZShmaWZvKSAtIGtmaWZvX2xlbihmaWZvKTsKLX0KKyNkZWZpbmUJa2ZpZm9fYXZhaWwoZmlmbykgXAorX19rZmlmb19tdXN0X2NoZWNrX2hlbHBlciggXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXBxID0gKGZpZm8pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXBxLT5yZWN0eXBlKTsgXAorCXVuc2lnbmVkIGludCBfX2F2YWlsID0ga2ZpZm9fc2l6ZShfX3RtcHEpIC0ga2ZpZm9fbGVuKF9fdG1wcSk7IFwKKwkoX19yZWNzaXplKSA/ICgoX19hdmFpbCA8PSBfX3JlY3NpemUpID8gMCA6IFwKKwlfX2tmaWZvX21heF9yKF9fYXZhaWwgLSBfX3JlY3NpemUsIF9fcmVjc2l6ZSkpIDogXAorCV9fYXZhaWw7IFwKK30pIFwKKykKIAogLyoqCi0gKiBrZmlmb19pbl9sb2NrZWQgLSBwdXRzIHNvbWUgZGF0YSBpbnRvIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQG46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKiBAbG9jazogcG9pbnRlciB0byB0aGUgc3BpbmxvY2sgdG8gdXNlIGZvciBsb2NraW5nLgorICoga2ZpZm9fc2tpcCAtIHNraXAgb3V0cHV0IGRhdGEKKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqLworI2RlZmluZQlrZmlmb19za2lwKGZpZm8pIFwKKyh2b2lkKSh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKF9fcmVjc2l6ZSkgXAorCQlfX2tmaWZvX3NraXBfcihfX2tmaWZvLCBfX3JlY3NpemUpOyBcCisJZWxzZSBcCisJCV9fa2ZpZm8tPm91dCsrOyBcCit9KQorCisvKioKKyAqIGtmaWZvX3BlZWtfbGVuIC0gZ2V0cyB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBmaWZvIHJlY29yZAorICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gYnVmZmVyIGludG8KLSAqIHRoZSBGSUZPIGRlcGVuZGluZyBvbiB0aGUgZnJlZSBzcGFjZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgotICogYnl0ZXMgY29waWVkLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBuZXh0IGZpZm8gcmVjb3JkIGluIG51bWJlciBvZiBieXRlcy4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9faW5fbG9ja2VkKHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHNwaW5sb2NrX3QgKmxvY2spCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpOwotCi0JcmV0ID0ga2ZpZm9faW4oZmlmbywgZnJvbSwgbik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19CisjZGVmaW5lIGtmaWZvX3BlZWtfbGVuKGZpZm8pIFwKK19fa2ZpZm9fbXVzdF9jaGVja19oZWxwZXIoIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJKCFfX3JlY3NpemUpID8ga2ZpZm9fbGVuKF9fdG1wKSAqIHNpemVvZigqX190bXAtPnR5cGUpIDogXAorCV9fa2ZpZm9fbGVuX3IoX19rZmlmbywgX19yZWNzaXplKTsgXAorfSkgXAorKQogCiAvKioKLSAqIGtmaWZvX291dF9sb2NrZWQgLSBnZXRzIHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPIHVzaW5nIGEgc3BpbmxvY2sgZm9yIGxvY2tpbmcKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KLSAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICogQGxvY2s6IHBvaW50ZXIgdG8gdGhlIHNwaW5sb2NrIHRvIHVzZSBmb3IgbG9ja2luZy4KKyAqIGtmaWZvX2FsbG9jIC0gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbmV3IGZpZm8gYnVmZmVyCisgKiBAZmlmbzogcG9pbnRlciB0byB0aGUgZmlmbworICogQHNpemU6IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGZpZm8sIHRoaXMgbXVzdCBiZSBhIHBvd2VyIG9mIDIKKyAqIEBnZnBfbWFzazogZ2V0X2ZyZWVfcGFnZXMgbWFzaywgcGFzc2VkIHRvIGttYWxsb2MoKQogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyBpbnRvIHRoZQotICogQHRvIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KKyAqIFRoaXMgbWFjcm8gZHluYW1pY2FsbHkgYWxsb2NhdGVzIGEgbmV3IGZpZm8gYnVmZmVyLgorICoKKyAqIFRoZSBudW1lciBvZiBlbGVtZW50cyB3aWxsIGJlIHJvdW5kZWQtdXAgdG8gYSBwb3dlciBvZiAyLgorICogVGhlIGZpZm8gd2lsbCBiZSByZWxlYXNlIHdpdGgga2ZpZm9fZnJlZSgpLgorICogUmV0dXJuIDAgaWYgbm8gZXJyb3IsIG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgogICovCi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fb3V0X2xvY2tlZChzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0Jdm9pZCAqdG8sIHVuc2lnbmVkIGludCBuLCBzcGlubG9ja190ICpsb2NrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKTsKLQotCXJldCA9IGtmaWZvX291dChmaWZvLCB0bywgbik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWV4dGVybiB2b2lkIGtmaWZvX3NraXAoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgbGVuKTsKLQotZXh0ZXJuIF9fbXVzdF9jaGVjayBpbnQga2ZpZm9fZnJvbV91c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKLQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkICpsZW5vdXQpOwotCi1leHRlcm4gX19tdXN0X2NoZWNrIGludCBrZmlmb190b191c2VyKHN0cnVjdCBrZmlmbyAqZmlmbywKLQl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCAqbGVub3V0KTsKLQotLyoKLSAqIF9fa2ZpZm9fYWRkX291dCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSBvdXQgb2Zmc2V0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2FkZF9vdXQoc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCXVuc2lnbmVkIGludCBvZmYpCi17Ci0Jc21wX21iKCk7Ci0JZmlmby0+b3V0ICs9IG9mZjsKLX0KLQotLyoKLSAqIF9fa2ZpZm9fYWRkX2luIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRpbmcgdGhlIGluIG9mZnNldAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19hZGRfaW4oc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCXVuc2lnbmVkIGludCBvZmYpCi17Ci0Jc21wX3dtYigpOwotCWZpZm8tPmluICs9IG9mZjsKLX0KLQotLyoKLSAqIF9fa2ZpZm9fb2ZmIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgdGhlIGluZGV4IG9mIGEKLSAqIGdpdmVuIG9mZmVzZXQKLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19vZmYoc3RydWN0IGtmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgb2ZmKQotewotCXJldHVybiBvZmYgJiAoZmlmby0+c2l6ZSAtIDEpOwotfQotCi0vKgotICogX19rZmlmb19wZWVrX24gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBkZXRlcm1pbmF0ZSB0aGUgbGVuZ3RoIG9mCi0gKiB0aGUgbmV4dCByZWNvcmQgaW4gdGhlIGZpZm8KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb19wZWVrX24oc3RydWN0IGtmaWZvICpmaWZvLAotCQkJCXVuc2lnbmVkIGludCByZWNzaXplKQotewotI2RlZmluZSBfX0tGSUZPX0dFVChmaWZvLCBvZmYsIHNoaWZ0KSBcCi0JKChmaWZvKS0+YnVmZmVyW19fa2ZpZm9fb2ZmKChmaWZvKSwgKGZpZm8pLT5vdXQrKG9mZikpXSA8PCAoc2hpZnQpKQotCi0JdW5zaWduZWQgaW50IGw7Ci0KLQlsID0gX19LRklGT19HRVQoZmlmbywgMCwgMCk7Ci0KLQlpZiAoLS1yZWNzaXplKQotCQlsIHw9IF9fS0ZJRk9fR0VUKGZpZm8sIDEsIDgpOwotCi0JcmV0dXJuIGw7Ci0jdW5kZWYJX19LRklGT19HRVQKLX0KLQotLyoKLSAqIF9fa2ZpZm9fcG9rZV9uIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiBmb3Igc3RvcmluZyB0aGUgbGVuZ3RoIG9mCi0gKiB0aGUgbmV4dCByZWNvcmQgaW50byB0aGUgZmlmbwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19wb2tlX24oc3RydWN0IGtmaWZvICpmaWZvLAotCQkJdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCBuKQotewotI2RlZmluZSBfX0tGSUZPX1BVVChmaWZvLCBvZmYsIHZhbCwgc2hpZnQpIFwKLQkJKCBcCi0JCShmaWZvKS0+YnVmZmVyW19fa2ZpZm9fb2ZmKChmaWZvKSwgKGZpZm8pLT5pbisob2ZmKSldID0gXAotCQkodW5zaWduZWQgY2hhcikoKHZhbCkgPj4gKHNoaWZ0KSkgXAotCQkpCi0KLQlfX0tGSUZPX1BVVChmaWZvLCAwLCBuLCAwKTsKLQotCWlmICgtLXJlY3NpemUpCi0JCV9fS0ZJRk9fUFVUKGZpZm8sIDEsIG4sIDgpOwotI3VuZGVmCV9fS0ZJRk9fUFVUCi19Ci0KLS8qCi0gKiBfX2tmaWZvX2luXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHB1dCBkYXRlIGludG8gdGhlIGZpZm8KLSAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9faW5fcmVjKCkgaW5zdGVhZAotICovCi1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAotCWNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKLQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCXJldCA9IF9fa2ZpZm9faW5fbihmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKLQotCWlmIChsaWtlbHkocmV0ID09IDApKSB7Ci0JCWlmIChyZWNzaXplKQotCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7Ci0JCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KKyNkZWZpbmUga2ZpZm9fYWxsb2MoZmlmbywgc2l6ZSwgZ2ZwX21hc2spIFwKK19fa2ZpZm9fbXVzdF9jaGVja19oZWxwZXIoIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJX19pc19rZmlmb19wdHIoX190bXApID8gXAorCV9fa2ZpZm9fYWxsb2MoX19rZmlmbywgc2l6ZSwgc2l6ZW9mKCpfX3RtcC0+dHlwZSksIGdmcF9tYXNrKSA6IFwKKwktRUlOVkFMOyBcCit9KSBcCispCiAKIC8qKgotICoga2ZpZm9faW5fcmVjIC0gcHV0cyBzb21lIHJlY29yZCBkYXRhIGludG8gdGhlIEZJRk8KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQG46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKKyAqIGtmaWZvX2ZyZWUgLSBmcmVlcyB0aGUgZmlmbworICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIGZyZWVkCisgKi8KKyNkZWZpbmUga2ZpZm9fZnJlZShmaWZvKSBcCisoeyBcCisJdHlwZW9mKGZpZm8gKyAxKSBfX3RtcCA9IChmaWZvKTsgXAorCXN0cnVjdCBfX2tmaWZvICpfX2tmaWZvID0gJl9fdG1wLT5rZmlmbzsgXAorCWlmIChfX2lzX2tmaWZvX3B0cihfX3RtcCkpIFwKKwkJX19rZmlmb19mcmVlKF9fa2ZpZm8pOyBcCit9KQorCisvKioKKyAqIGtmaWZvX2luaXQgLSBpbml0aWFsaXplIGEgZmlmbyB1c2luZyBhIHByZWFsbG9jYXRlZCBidWZmZXIKKyAqIEBmaWZvOiB0aGUgZmlmbyB0byBhc3NpZ24gdGhlIGJ1ZmZlcgorICogQGJ1ZmZlcjogdGhlIHByZWFsbG9jYXRlZCBidWZmZXIgdG8gYmUgdXNlZAorICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIsIHRoaXMgaGF2ZSB0byBiZSBhIHBvd2VyIG9mIDIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBAbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBpbnRvIHRoZSBGSUZPIGFuZCByZXR1cm5zCi0gKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdoaWNoIGNhbm5vdCBiZSBjb3BpZWQuCi0gKiBBIHJldHVybmVkIHZhbHVlIGdyZWF0ZXIgdGhhbiB0aGUgQG4gdmFsdWUgbWVhbnMgdGhhdCB0aGUgcmVjb3JkIGRvZXNuJ3QKLSAqIGZpdCBpbnRvIHRoZSBidWZmZXIuCisgKiBUaGlzIG1hY3JvIGluaXRpYWxpemUgYSBmaWZvIHVzaW5nIGEgcHJlYWxsb2NhdGVkIGJ1ZmZlci4KKyAqCisgKiBUaGUgbnVtZXIgb2YgZWxlbWVudHMgd2lsbCBiZSByb3VuZGVkLXVwIHRvIGEgcG93ZXIgb2YgMi4KKyAqIFJldHVybiAwIGlmIG5vIGVycm9yLCBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworI2RlZmluZSBrZmlmb19pbml0KGZpZm8sIGJ1ZmZlciwgc2l6ZSkgXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwlzdHJ1Y3QgX19rZmlmbyAqX19rZmlmbyA9ICZfX3RtcC0+a2ZpZm87IFwKKwlfX2lzX2tmaWZvX3B0cihfX3RtcCkgPyBcCisJX19rZmlmb19pbml0KF9fa2ZpZm8sIGJ1ZmZlciwgc2l6ZSwgc2l6ZW9mKCpfX3RtcC0+dHlwZSkpIDogXAorCS1FSU5WQUw7IFwKK30pCisKKy8qKgorICoga2ZpZm9fcHV0IC0gcHV0IGRhdGEgaW50byB0aGUgZmlmbworICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAorICogQHZhbDogdGhlIGRhdGEgdG8gYmUgYWRkZWQKKyAqCisgKiBUaGlzIG1hY3JvIGNvcGllcyB0aGUgZ2l2ZW4gdmFsdWUgaW50byB0aGUgZmlmby4KKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgZmlmbyB3YXMgZnVsbC4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG51bWJlcgorICogcHJvY2Vzc2VkIGVsZW1lbnRzLgogICoKICAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIG1hY3JvLgogICovCi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9faW5fcmVjKHN0cnVjdCBrZmlmbyAqZmlmbywKLQl2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWNzaXplKSkKLQkJcmV0dXJuIF9fa2ZpZm9faW5fZ2VuZXJpYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKLQlyZXR1cm4gX19rZmlmb19pbl9yZWMoZmlmbywgZnJvbSwgbiwgcmVjc2l6ZSk7Ci19Ci0KLS8qCi0gKiBfX2tmaWZvX291dF8uLi4gaW50ZXJuYWwgZnVuY3Rpb25zIGZvciBnZXQgZGF0ZSBmcm9tIHRoZSBmaWZvCi0gKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX291dF9yZWMoKSBpbnN0ZWFkCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0Jdm9pZCAqdG8sIHVuc2lnbmVkIGludCByZWNsZW4sIHVuc2lnbmVkIGludCByZWNzaXplKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKLQl2b2lkICp0bywgdW5zaWduZWQgaW50IG4sCi0JdW5zaWduZWQgaW50IHJlY3NpemUsIHVuc2lnbmVkIGludCAqdG90YWwpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCi0JdW5zaWduZWQgaW50ICp0b3RhbCkKLXsKLQl1bnNpZ25lZCBpbnQgbDsKLQotCWlmICghcmVjc2l6ZSkgewotCQlsID0gbjsKLQkJaWYgKHRvdGFsKQotCQkJKnRvdGFsID0gbDsKLQl9IGVsc2UgewotCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Ci0JCWlmICh0b3RhbCkKLQkJCSp0b3RhbCA9IGw7Ci0JCWlmIChuIDwgbCkKLQkJCXJldHVybiBsOwotCX0KLQotCXJldHVybiBfX2tmaWZvX291dF9uKGZpZm8sIHRvLCBsLCByZWNzaXplKTsKLX0KKyNkZWZpbmUJa2ZpZm9fcHV0KGZpZm8sIHZhbCkgXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwl0eXBlb2YodmFsICsgMSkgX192YWwgPSAodmFsKTsgXAorCXVuc2lnbmVkIGludCBfX3JldDsgXAorCWNvbnN0IHNpemVfdCBfX3JlY3NpemUgPSBzaXplb2YoKl9fdG1wLT5yZWN0eXBlKTsgXAorCXN0cnVjdCBfX2tmaWZvICpfX2tmaWZvID0gJl9fdG1wLT5rZmlmbzsgXAorCWlmICgwKSB7IFwKKwkJdHlwZW9mKF9fdG1wLT5wdHJfY29uc3QpIF9fZHVtbXkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOyBcCisJCV9fZHVtbXkgPSAodHlwZW9mKF9fdmFsKSlOVUxMOyBcCisJfSBcCisJaWYgKF9fcmVjc2l6ZSkgXAorCQlfX3JldCA9IF9fa2ZpZm9faW5fcihfX2tmaWZvLCBfX3ZhbCwgc2l6ZW9mKCpfX3ZhbCksIFwKKwkJCV9fcmVjc2l6ZSk7IFwKKwllbHNlIHsgXAorCQlfX3JldCA9ICFrZmlmb19pc19mdWxsKF9fdG1wKTsgXAorCQlpZiAoX19yZXQpIHsgXAorCQkJKF9faXNfa2ZpZm9fcHRyKF9fdG1wKSA/IFwKKwkJCSgodHlwZW9mKF9fdG1wLT50eXBlKSlfX2tmaWZvLT5kYXRhKSA6IFwKKwkJCShfX3RtcC0+YnVmKSBcCisJCQkpW19fa2ZpZm8tPmluICYgX190bXAtPmtmaWZvLm1hc2tdID0gXAorCQkJCSoodHlwZW9mKF9fdG1wLT50eXBlKSlfX3ZhbDsgXAorCQkJc21wX3dtYigpOyBcCisJCQlfX2tmaWZvLT5pbisrOyBcCisJCX0gXAorCX0gXAorCV9fcmV0OyBcCit9KQogCiAvKioKLSAqIGtmaWZvX291dF9yZWMgLSBnZXRzIHNvbWUgcmVjb3JkIGRhdGEgZnJvbSB0aGUgRklGTwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQG46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKiBAcmVjc2l6ZTogc2l6ZSBvZiByZWNvcmQgZmllbGQKLSAqIEB0b3RhbDogcG9pbnRlciB3aGVyZSB0aGUgdG90YWwgbnVtYmVyIG9mIHRvIGNvcGllZCBieXRlcyBzaG91bGQgc3RvcmVkCisgKiBrZmlmb19nZXQgLSBnZXQgZGF0YSBmcm9tIHRoZSBmaWZvCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAdmFsOiB0aGUgdmFyIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhIHRvIGJlIGFkZGVkCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbiBieXRlcyBmcm9tIHRoZSBGSUZPIHRvIEB0byBhbmQgcmV0dXJucyB0aGUKLSAqIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QgYmUgY29waWVkLgotICogQSByZXR1cm5lZCB2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIEBuIHZhbHVlIG1lYW5zIHRoYXQgdGhlIHJlY29yZCBkb2Vzbid0Ci0gKiBmaXQgaW50byB0aGUgQHRvIGJ1ZmZlci4KKyAqIFRoaXMgbWFjcm8gcmVhZHMgdGhlIGRhdGEgZnJvbSB0aGUgZmlmby4KKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgZmlmbyB3YXMgZW1wdHkuIE90aGVyd2lzZSBpdCByZXR1cm5zIHRoZSBudW1iZXIKKyAqIHByb2Nlc3NlZCBlbGVtZW50cy4KICAqCiAgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKLSAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBtYWNyby4KICAqLwotc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX291dF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCi0JdW5zaWduZWQgaW50ICp0b3RhbCkKLQotewotCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCi0JCXJldHVybiBfX2tmaWZvX291dF9nZW5lcmljKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7Ci0JcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOwotfQotCi0vKgotICogX19rZmlmb19mcm9tX3VzZXJfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgZnJvbSB1c2VyIHNwYWNlIGludG8KLSAqIHRoZSBmaWZvLiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX2Zyb21fdXNlcl9yZWMoKSBpbnN0ZWFkCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCi0JcmV0ID0gX19rZmlmb19mcm9tX3VzZXJfbihmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKLQotCWlmIChsaWtlbHkocmV0ID09IDApKSB7Ci0JCWlmIChyZWNzaXplKQotCQkJX19rZmlmb19wb2tlX24oZmlmbywgcmVjc2l6ZSwgbik7Ci0JCV9fa2ZpZm9fYWRkX2luKGZpZm8sIG4gKyByZWNzaXplKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KKyNkZWZpbmUJa2ZpZm9fZ2V0KGZpZm8sIHZhbCkgXAorX19rZmlmb19tdXN0X2NoZWNrX2hlbHBlciggXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwl0eXBlb2YodmFsICsgMSkgX192YWwgPSAodmFsKTsgXAorCXVuc2lnbmVkIGludCBfX3JldDsgXAorCWNvbnN0IHNpemVfdCBfX3JlY3NpemUgPSBzaXplb2YoKl9fdG1wLT5yZWN0eXBlKTsgXAorCXN0cnVjdCBfX2tmaWZvICpfX2tmaWZvID0gJl9fdG1wLT5rZmlmbzsgXAorCWlmICgwKSBcCisJCV9fdmFsID0gKHR5cGVvZihfX3RtcC0+cHRyKSkwOyBcCisJaWYgKF9fcmVjc2l6ZSkgXAorCQlfX3JldCA9IF9fa2ZpZm9fb3V0X3IoX19rZmlmbywgX192YWwsIHNpemVvZigqX192YWwpLCBcCisJCQlfX3JlY3NpemUpOyBcCisJZWxzZSB7IFwKKwkJX19yZXQgPSAha2ZpZm9faXNfZW1wdHkoX190bXApOyBcCisJCWlmIChfX3JldCkgeyBcCisJCQkqKHR5cGVvZihfX3RtcC0+dHlwZSkpX192YWwgPSBcCisJCQkJKF9faXNfa2ZpZm9fcHRyKF9fdG1wKSA/IFwKKwkJCQkoKHR5cGVvZihfX3RtcC0+dHlwZSkpX19rZmlmby0+ZGF0YSkgOiBcCisJCQkJKF9fdG1wLT5idWYpIFwKKwkJCQkpW19fa2ZpZm8tPm91dCAmIF9fdG1wLT5rZmlmby5tYXNrXTsgXAorCQkJc21wX3dtYigpOyBcCisJCQlfX2tmaWZvLT5vdXQrKzsgXAorCQl9IFwKKwl9IFwKKwlfX3JldDsgXAorfSkgXAorKQogCiAvKioKLSAqIGtmaWZvX2Zyb21fdXNlcl9yZWMgLSBwdXRzIHNvbWUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgRklGTwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAZnJvbTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBrZmlmb19wZWVrIC0gZ2V0IGRhdGEgZnJvbSB0aGUgZmlmbyB3aXRob3V0IHJlbW92aW5nCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAdmFsOiB0aGUgdmFyIHdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhIHRvIGJlIGFkZGVkCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgQG4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gaW50byB0aGUKLSAqIEZJRk8gYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QgYmUgY29waWVkLgotICoKLSAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBlcXVhbCBvciBsZXNzIHRoZSBAbiB2YWx1ZSwgdGhlIGNvcHlfZnJvbV91c2VyKCkKLSAqIGZ1bmN0aW9ucyBoYXMgZmFpbGVkLiBPdGhlcndpc2UgdGhlIHJlY29yZCBkb2Vzbid0IGZpdCBpbnRvIHRoZSBidWZmZXIuCisgKiBUaGlzIHJlYWRzIHRoZSBkYXRhIGZyb20gdGhlIGZpZm8gd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBmaWZvLgorICogSXQgcmV0dXJucyAwIGlmIHRoZSBmaWZvIHdhcyBlbXB0eS4gT3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIG51bWJlcgorICogcHJvY2Vzc2VkIGVsZW1lbnRzLgogICoKICAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIG1hY3JvLgogICovCi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fZnJvbV91c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKLXsKLQlpZiAoIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlY3NpemUpKQotCQlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfZ2VuZXJpYyhmaWZvLCBmcm9tLCBuLCByZWNzaXplKTsKLQlyZXR1cm4gX19rZmlmb19mcm9tX3VzZXJfcmVjKGZpZm8sIGZyb20sIG4sIHJlY3NpemUpOwotfQotCi0vKgotICogX19rZmlmb190b191c2VyXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHRyYW5zZmVyIGZpZm8gZGF0YSBpbnRvIHVzZXIgc3BhY2UKLSAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fdG9fdXNlcl9yZWMoKSBpbnN0ZWFkCi0gKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX24oc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNsZW4sCi0JdW5zaWduZWQgaW50IHJlY3NpemUpOwotCi1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKLQl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKLQl1bnNpZ25lZCBpbnQgKnRvdGFsKTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0Jdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbiwKLQl1bnNpZ25lZCBpbnQgcmVjc2l6ZSwgdW5zaWduZWQgaW50ICp0b3RhbCkKLXsKLQl1bnNpZ25lZCBpbnQgbDsKLQotCWlmICghcmVjc2l6ZSkgewotCQlsID0gbjsKLQkJaWYgKHRvdGFsKQotCQkJKnRvdGFsID0gbDsKLQl9IGVsc2UgewotCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Ci0JCWlmICh0b3RhbCkKLQkJCSp0b3RhbCA9IGw7Ci0JCWlmIChuIDwgbCkKLQkJCXJldHVybiBsOwotCX0KLQotCXJldHVybiBfX2tmaWZvX3RvX3VzZXJfbihmaWZvLCB0bywgbiwgbCwgcmVjc2l6ZSk7Ci19CisjZGVmaW5lCWtmaWZvX3BlZWsoZmlmbywgdmFsKSBcCitfX2tmaWZvX211c3RfY2hlY2tfaGVscGVyKCBcCisoeyBcCisJdHlwZW9mKGZpZm8gKyAxKSBfX3RtcCA9IChmaWZvKTsgXAorCXR5cGVvZih2YWwgKyAxKSBfX3ZhbCA9ICh2YWwpOyBcCisJdW5zaWduZWQgaW50IF9fcmV0OyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKDApIFwKKwkJX192YWwgPSAodHlwZW9mKF9fdG1wLT5wdHIpKU5VTEw7IFwKKwlpZiAoX19yZWNzaXplKSBcCisJCV9fcmV0ID0gX19rZmlmb19vdXRfcGVla19yKF9fa2ZpZm8sIF9fdmFsLCBzaXplb2YoKl9fdmFsKSwgXAorCQkJX19yZWNzaXplKTsgXAorCWVsc2UgeyBcCisJCV9fcmV0ID0gIWtmaWZvX2lzX2VtcHR5KF9fdG1wKTsgXAorCQlpZiAoX19yZXQpIHsgXAorCQkJKih0eXBlb2YoX190bXAtPnR5cGUpKV9fdmFsID0gXAorCQkJCShfX2lzX2tmaWZvX3B0cihfX3RtcCkgPyBcCisJCQkJKCh0eXBlb2YoX190bXAtPnR5cGUpKV9fa2ZpZm8tPmRhdGEpIDogXAorCQkJCShfX3RtcC0+YnVmKSBcCisJCQkJKVtfX2tmaWZvLT5vdXQgJiBfX3RtcC0+a2ZpZm8ubWFza107IFwKKwkJCXNtcF93bWIoKTsgXAorCQl9IFwKKwl9IFwKKwlfX3JldDsgXAorfSkgXAorKQogCiAvKioKLSAqIGtmaWZvX3RvX3VzZXJfcmVjIC0gZ2V0cyBkYXRhIGZyb20gdGhlIEZJRk8gYW5kIHdyaXRlIGl0IHRvIHVzZXIgc3BhY2UKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KLSAqIEBuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCi0gKiBAdG90YWw6IHBvaW50ZXIgd2hlcmUgdGhlIHRvdGFsIG51bWJlciBvZiB0byBjb3BpZWQgYnl0ZXMgc2hvdWxkIHN0b3JlZAorICoga2ZpZm9faW4gLSBwdXQgZGF0YSBpbnRvIHRoZSBmaWZvCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAYnVmOiB0aGUgZGF0YSB0byBiZSBhZGRlZAorICogQG46IG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBhZGRlZAogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQG4gYnl0ZXMgZnJvbSB0aGUgRklGTyB0byB0aGUgQHRvLgotICogSW4gY2FzZSBvZiBhbiBlcnJvciwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3aGljaCBjYW5ub3QKLSAqIGJlIGNvcGllZC4KLSAqIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBlcXVhbCBvciBsZXNzIHRoZSBAbiB2YWx1ZSwgdGhlIGNvcHlfdG9fdXNlcigpCi0gKiBmdW5jdGlvbnMgaGFzIGZhaWxlZC4gT3RoZXJ3aXNlIHRoZSByZWNvcmQgZG9lc24ndCBmaXQgaW50byB0aGUgQHRvIGJ1ZmZlci4KKyAqIFRoaXMgbWFjcm8gY29waWVzIHRoZSBnaXZlbiBidWZmZXIgaW50byB0aGUgZmlmbyBhbmQgcmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBjb3BpZWQgZWxlbWVudHMuCiAgKgogICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgbWFjcm8uCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19tdXN0X2NoZWNrIHVuc2lnbmVkIGludCBrZmlmb190b191c2VyX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCByZWNzaXplLAotCQl1bnNpZ25lZCBpbnQgKnRvdGFsKQotewotCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCi0JCXJldHVybiBfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyhmaWZvLCB0bywgbiwgcmVjc2l6ZSwgdG90YWwpOwotCXJldHVybiBfX2tmaWZvX3RvX3VzZXJfcmVjKGZpZm8sIHRvLCBuLCByZWNzaXplLCB0b3RhbCk7Ci19Ci0KLS8qCi0gKiBfX2tmaWZvX3BlZWtfLi4uIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgcGVlayBpbnRvIHRoZSBuZXh0IGZpZm8gcmVjb3JkCi0gKiBkbyBub3QgY2FsbCBpdCBkaXJlY3RseSwgdXNlIGtmaWZvX3BlZWtfcmVjKCkgaW5zdGVhZAotICovCi1leHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJCQl1bnNpZ25lZCBpbnQgcmVjc2l6ZSk7CisjZGVmaW5lCWtmaWZvX2luKGZpZm8sIGJ1ZiwgbikgXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwl0eXBlb2YoYnVmICsgMSkgX19idWYgPSAoYnVmKTsgXAorCXVuc2lnbmVkIGxvbmcgX19uID0gKG4pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKDApIHsgXAorCQl0eXBlb2YoX190bXAtPnB0cl9jb25zdCkgX19kdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7IFwKKwkJX19kdW1teSA9ICh0eXBlb2YoX19idWYpKU5VTEw7IFwKKwl9IFwKKwkoX19yZWNzaXplKSA/XAorCV9fa2ZpZm9faW5fcihfX2tmaWZvLCBfX2J1ZiwgX19uLCBfX3JlY3NpemUpIDogXAorCV9fa2ZpZm9faW4oX19rZmlmbywgX19idWYsIF9fbik7IFwKK30pCiAKIC8qKgotICoga2ZpZm9fcGVla19yZWMgLSBnZXRzIHRoZSBzaXplIG9mIHRoZSBuZXh0IEZJRk8gcmVjb3JkIGRhdGEKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBrZmlmb19pbl9zcGlubG9ja2VkIC0gcHV0IGRhdGEgaW50byB0aGUgZmlmbyB1c2luZyBhIHNwaW5sb2NrIGZvciBsb2NraW5nCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAYnVmOiB0aGUgZGF0YSB0byBiZSBhZGRlZAorICogQG46IG51bWJlciBvZiBlbGVtZW50cyB0byBiZSBhZGRlZAorICogQGxvY2s6IHBvaW50ZXIgdG8gdGhlIHNwaW5sb2NrIHRvIHVzZSBmb3IgbG9ja2luZwogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBGSUZPIHJlY29yZCBpbiBudW1iZXIgb2YgYnl0ZXMKKyAqIFRoaXMgbWFjcm8gY29waWVzIHRoZSBnaXZlbiB2YWx1ZXMgYnVmZmVyIGludG8gdGhlIGZpZm8gYW5kIHJldHVybnMgdGhlCisgKiBudW1iZXIgb2YgY29waWVkIGVsZW1lbnRzLgogICovCi1zdGF0aWMgaW5saW5lIF9fbXVzdF9jaGVjayB1bnNpZ25lZCBpbnQga2ZpZm9fcGVla19yZWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXVuc2lnbmVkIGludCByZWNzaXplKQotewotCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCi0JCXJldHVybiBfX2tmaWZvX3BlZWtfZ2VuZXJpYyhmaWZvLCByZWNzaXplKTsKLQlpZiAoIXJlY3NpemUpCi0JCXJldHVybiBrZmlmb19sZW4oZmlmbyk7Ci0JcmV0dXJuIF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOwotfQorI2RlZmluZQlrZmlmb19pbl9zcGlubG9ja2VkKGZpZm8sIGJ1ZiwgbiwgbG9jaykgXAorKHsgXAorCXVuc2lnbmVkIGxvbmcgX19mbGFnczsgXAorCXVuc2lnbmVkIGludCBfX3JldDsgXAorCXNwaW5fbG9ja19pcnFzYXZlKGxvY2ssIF9fZmxhZ3MpOyBcCisJX19yZXQgPSBrZmlmb19pbihmaWZvLCBidWYsIG4pOyBcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBfX2ZsYWdzKTsgXAorCV9fcmV0OyBcCit9KQogCi0vKgotICogX19rZmlmb19za2lwXy4uLiBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHNraXAgdGhlIG5leHQgZmlmbyByZWNvcmQKLSAqIGRvIG5vdCBjYWxsIGl0IGRpcmVjdGx5LCB1c2Uga2ZpZm9fc2tpcF9yZWMoKSBpbnN0ZWFkCi0gKi8KLWV4dGVybiB2b2lkIF9fa2ZpZm9fc2tpcF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHJlY3NpemUpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19rZmlmb19za2lwX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JdW5zaWduZWQgaW50IGw7Ci0KLQlpZiAocmVjc2l6ZSkgewotCQlsID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7Ci0KLQkJaWYgKGwgKyByZWNzaXplIDw9IGtmaWZvX2xlbihmaWZvKSkgewotCQkJX19rZmlmb19hZGRfb3V0KGZpZm8sIGwgKyByZWNzaXplKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlrZmlmb19yZXNldF9vdXQoZmlmbyk7Ci19CisvKiBhbGlhcyBmb3Iga2ZpZm9faW5fc3BpbmxvY2tlZCwgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UgKi8KKyNkZWZpbmUga2ZpZm9faW5fbG9ja2VkKGZpZm8sIGJ1ZiwgbiwgbG9jaykgXAorCQlrZmlmb19pbl9zcGlubG9ja2VkKGZpZm8sIGJ1ZiwgbiwgbG9jaykKIAogLyoqCi0gKiBrZmlmb19za2lwX3JlYyAtIHNraXAgdGhlIG5leHQgZmlmbyBvdXQgcmVjb3JkCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEByZWNzaXplOiBzaXplIG9mIHJlY29yZCBmaWVsZAorICoga2ZpZm9fb3V0IC0gZ2V0IGRhdGEgZnJvbSB0aGUgZmlmbworICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAorICogQGJ1ZjogcG9pbnRlciB0byB0aGUgc3RvcmFnZSBidWZmZXIKKyAqIEBuOiBtYXguIG51bWJlciBvZiBlbGVtZW50cyB0byBnZXQKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNraXBzIHRoZSBuZXh0IEZJRk8gcmVjb3JkCisgKiBUaGlzIG1hY3JvIGdldCBzb21lIGRhdGEgZnJvbSB0aGUgZmlmbyBhbmQgcmV0dXJuIHRoZSBudW1iZXJzIG9mIGVsZW1lbnRzCisgKiBjb3BpZWQuCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIG1hY3JvLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQga2ZpZm9fc2tpcF9yZWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXVuc2lnbmVkIGludCByZWNzaXplKQotewotCWlmICghX19idWlsdGluX2NvbnN0YW50X3AocmVjc2l6ZSkpCi0JCV9fa2ZpZm9fc2tpcF9nZW5lcmljKGZpZm8sIHJlY3NpemUpOwotCWVsc2UKLQkJX19rZmlmb19za2lwX3JlYyhmaWZvLCByZWNzaXplKTsKLX0KKyNkZWZpbmUJa2ZpZm9fb3V0KGZpZm8sIGJ1ZiwgbikgXAorX19rZmlmb19tdXN0X2NoZWNrX2hlbHBlciggXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwl0eXBlb2YoYnVmICsgMSkgX19idWYgPSAoYnVmKTsgXAorCXVuc2lnbmVkIGxvbmcgX19uID0gKG4pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKDApIHsgXAorCQl0eXBlb2YoX190bXAtPnB0cikgX19kdW1teSA9IE5VTEw7IFwKKwkJX19idWYgPSBfX2R1bW15OyBcCisJfSBcCisJKF9fcmVjc2l6ZSkgP1wKKwlfX2tmaWZvX291dF9yKF9fa2ZpZm8sIF9fYnVmLCBfX24sIF9fcmVjc2l6ZSkgOiBcCisJX19rZmlmb19vdXQoX19rZmlmbywgX19idWYsIF9fbik7IFwKK30pIFwKKykKIAogLyoqCi0gKiBrZmlmb19hdmFpbF9yZWMgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGluIGEgcmVjb3JkIEZJRk8KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQHJlY3NpemU6IHNpemUgb2YgcmVjb3JkIGZpZWxkCisgKiBrZmlmb19vdXRfc3BpbmxvY2tlZCAtIGdldCBkYXRhIGZyb20gdGhlIGZpZm8gdXNpbmcgYSBzcGlubG9jayBmb3IgbG9ja2luZworICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAorICogQGJ1ZjogcG9pbnRlciB0byB0aGUgc3RvcmFnZSBidWZmZXIKKyAqIEBuOiBtYXguIG51bWJlciBvZiBlbGVtZW50cyB0byBnZXQKKyAqIEBsb2NrOiBwb2ludGVyIHRvIHRoZSBzcGlubG9jayB0byB1c2UgZm9yIGxvY2tpbmcKKyAqCisgKiBUaGlzIG1hY3JvIGdldCB0aGUgZGF0YSBmcm9tIHRoZSBmaWZvIGFuZCByZXR1cm4gdGhlIG51bWJlcnMgb2YgZWxlbWVudHMKKyAqIGNvcGllZC4KICAqLwotc3RhdGljIGlubGluZSBfX211c3RfY2hlY2sgdW5zaWduZWQgaW50IGtmaWZvX2F2YWlsX3JlYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JdW5zaWduZWQgaW50IGwgPSBrZmlmb19zaXplKGZpZm8pIC0ga2ZpZm9fbGVuKGZpZm8pOworI2RlZmluZQlrZmlmb19vdXRfc3BpbmxvY2tlZChmaWZvLCBidWYsIG4sIGxvY2spIFwKK19fa2ZpZm9fbXVzdF9jaGVja19oZWxwZXIoIFwKKyh7IFwKKwl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7IFwKKwl1bnNpZ25lZCBpbnQgX19yZXQ7IFwKKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBfX2ZsYWdzKTsgXAorCV9fcmV0ID0ga2ZpZm9fb3V0KGZpZm8sIGJ1Ziwgbik7IFwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIF9fZmxhZ3MpOyBcCisJX19yZXQ7IFwKK30pIFwKKykKIAotCXJldHVybiAobCA+IHJlY3NpemUpID8gbCAtIHJlY3NpemUgOiAwOwotfQorLyogYWxpYXMgZm9yIGtmaWZvX291dF9zcGlubG9ja2VkLCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZSAqLworI2RlZmluZSBrZmlmb19vdXRfbG9ja2VkKGZpZm8sIGJ1ZiwgbiwgbG9jaykgXAorCQlrZmlmb19vdXRfc3BpbmxvY2tlZChmaWZvLCBidWYsIG4sIGxvY2spCisKKy8qKgorICoga2ZpZm9fZnJvbV91c2VyIC0gcHV0cyBzb21lIGRhdGEgZnJvbSB1c2VyIHNwYWNlIGludG8gdGhlIGZpZm8KKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqIEBmcm9tOiBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIGFkZGVkCisgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGJlIGFkZGVkCisgKiBAY29waWVkOiBwb2ludGVyIHRvIG91dHB1dCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcworICoKKyAqIFRoaXMgbWFjcm8gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBAZnJvbSBpbnRvIHRoZQorICogZmlmbywgZGVwZW5kaW5nIG9mIHRoZSBhdmFpbGFibGUgc3BhY2UgYW5kIHJldHVybnMgLUVGQVVMVC8wLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBtYWNyby4KKyAqLworI2RlZmluZQlrZmlmb19mcm9tX3VzZXIoZmlmbywgZnJvbSwgbGVuLCBjb3BpZWQpIFwKK19fa2ZpZm9fbXVzdF9jaGVja19oZWxwZXIoIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJY29uc3Qgdm9pZCBfX3VzZXIgKl9fZnJvbSA9IChmcm9tKTsgXAorCXVuc2lnbmVkIGludCBfX2xlbiA9IChsZW4pOyBcCisJdW5zaWduZWQgaW50ICpfX2NvcGllZCA9IChjb3BpZWQpOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJKF9fcmVjc2l6ZSkgPyBcCisJX19rZmlmb19mcm9tX3VzZXJfcihfX2tmaWZvLCBfX2Zyb20sIF9fbGVuLCAgX19jb3BpZWQsIF9fcmVjc2l6ZSkgOiBcCisJX19rZmlmb19mcm9tX3VzZXIoX19rZmlmbywgX19mcm9tLCBfX2xlbiwgX19jb3BpZWQpOyBcCit9KSBcCispCisKKy8qKgorICoga2ZpZm9fdG9fdXNlciAtIGNvcGllcyBkYXRhIGZyb20gdGhlIGZpZm8gaW50byB1c2VyIHNwYWNlCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkCisgKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCisgKiBAY29waWVkOiBwb2ludGVyIHRvIG91dHB1dCB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcworICoKKyAqIFRoaXMgbWFjcm8gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBmaWZvIGludG8gdGhlCisgKiBAdG8gYnVmZmVyIGFuZCByZXR1cm5zIC1FRkFVTFQvMC4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgbWFjcm8uCisgKi8KKyNkZWZpbmUJa2ZpZm9fdG9fdXNlcihmaWZvLCB0bywgbGVuLCBjb3BpZWQpIFwKK19fa2ZpZm9fbXVzdF9jaGVja19oZWxwZXIoIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJdm9pZCBfX3VzZXIgKl9fdG8gPSAodG8pOyBcCisJdW5zaWduZWQgaW50IF9fbGVuID0gKGxlbik7IFwKKwl1bnNpZ25lZCBpbnQgKl9fY29waWVkID0gKGNvcGllZCk7IFwKKwljb25zdCBzaXplX3QgX19yZWNzaXplID0gc2l6ZW9mKCpfX3RtcC0+cmVjdHlwZSk7IFwKKwlzdHJ1Y3QgX19rZmlmbyAqX19rZmlmbyA9ICZfX3RtcC0+a2ZpZm87IFwKKwkoX19yZWNzaXplKSA/IFwKKwlfX2tmaWZvX3RvX3VzZXJfcihfX2tmaWZvLCBfX3RvLCBfX2xlbiwgX19jb3BpZWQsIF9fcmVjc2l6ZSkgOiBcCisJX19rZmlmb190b191c2VyKF9fa2ZpZm8sIF9fdG8sIF9fbGVuLCBfX2NvcGllZCk7IFwKK30pIFwKKykKKworLyoqCisgKiBrZmlmb19kbWFfaW5fcHJlcGFyZSAtIHNldHVwIGEgc2NhdHRlcmxpc3QgZm9yIERNQSBpbnB1dAorICogQGZpZm86IGFkZHJlc3Mgb2YgdGhlIGZpZm8gdG8gYmUgdXNlZAorICogQHNnbDogcG9pbnRlciB0byB0aGUgc2NhdHRlcmxpc3QgYXJyYXkKKyAqIEBuZW50czogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJsaXN0IGFycmF5CisgKiBAbGVuOiBudW1iZXIgb2YgZWxlbWVudHMgdG8gdHJhbnNmZXIKKyAqCisgKiBUaGlzIG1hY3JvIGZpbGxzIGEgc2NhdHRlcmxpc3QgZm9yIERNQSBpbnB1dC4KKyAqIEl0IHJldHVybnMgdGhlIG51bWJlciBlbnRyaWVzIGluIHRoZSBzY2F0dGVybGlzdCBhcnJheS4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgbWFjcm9zLgorICovCisjZGVmaW5lCWtmaWZvX2RtYV9pbl9wcmVwYXJlKGZpZm8sIHNnbCwgbmVudHMsIGxlbikgXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKl9fc2dsID0gKHNnbCk7IFwKKwlpbnQgX19uZW50cyA9IChuZW50cyk7IFwKKwl1bnNpZ25lZCBpbnQgX19sZW4gPSAobGVuKTsgXAorCWNvbnN0IHNpemVfdCBfX3JlY3NpemUgPSBzaXplb2YoKl9fdG1wLT5yZWN0eXBlKTsgXAorCXN0cnVjdCBfX2tmaWZvICpfX2tmaWZvID0gJl9fdG1wLT5rZmlmbzsgXAorCShfX3JlY3NpemUpID8gXAorCV9fa2ZpZm9fZG1hX2luX3ByZXBhcmVfcihfX2tmaWZvLCBfX3NnbCwgX19uZW50cywgX19sZW4sIF9fcmVjc2l6ZSkgOiBcCisJX19rZmlmb19kbWFfaW5fcHJlcGFyZShfX2tmaWZvLCBfX3NnbCwgX19uZW50cywgX19sZW4pOyBcCit9KQorCisvKioKKyAqIGtmaWZvX2RtYV9pbl9maW5pc2ggLSBmaW5pc2ggYSBETUEgSU4gb3BlcmF0aW9uCisgKiBAZmlmbzogYWRkcmVzcyBvZiB0aGUgZmlmbyB0byBiZSB1c2VkCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVjZWl2ZWQKKyAqCisgKiBUaGlzIG1hY3JvIGZpbmlzaCBhIERNQSBJTiBvcGVyYXRpb24uIFRoZSBpbiBjb3VudGVyIHdpbGwgYmUgdXBkYXRlZCBieQorICogdGhlIGxlbiBwYXJhbWV0ZXIuIE5vIGVycm9yIGNoZWNraW5nIHdpbGwgYmUgZG9uZS4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgbWFjcm9zLgorICovCisjZGVmaW5lIGtmaWZvX2RtYV9pbl9maW5pc2goZmlmbywgbGVuKSBcCisodm9pZCkoeyBcCisJdHlwZW9mKGZpZm8gKyAxKSBfX3RtcCA9IChmaWZvKTsgXAorCXVuc2lnbmVkIGludCBfX2xlbiA9IChsZW4pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKF9fcmVjc2l6ZSkgXAorCQlfX2tmaWZvX2RtYV9pbl9maW5pc2hfcihfX2tmaWZvLCBfX2xlbiwgX19yZWNzaXplKTsgXAorCWVsc2UgXAorCQlfX2tmaWZvLT5pbiArPSBfX2xlbiAvIHNpemVvZigqX190bXAtPnR5cGUpOyBcCit9KQorCisvKioKKyAqIGtmaWZvX2RtYV9vdXRfcHJlcGFyZSAtIHNldHVwIGEgc2NhdHRlcmxpc3QgZm9yIERNQSBvdXRwdXQKKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqIEBzZ2w6IHBvaW50ZXIgdG8gdGhlIHNjYXR0ZXJsaXN0IGFycmF5CisgKiBAbmVudHM6IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzY2F0dGVybGlzdCBhcnJheQorICogQGxlbjogbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRyYW5zZmVyCisgKgorICogVGhpcyBtYWNybyBmaWxscyBhIHNjYXR0ZXJsaXN0IGZvciBETUEgb3V0cHV0IHdoaWNoIGF0IG1vc3QgQGxlbiBieXRlcworICogdG8gdHJhbnNmZXIuCisgKiBJdCByZXR1cm5zIHRoZSBudW1iZXIgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QgYXJyYXkuCisgKiBBIHplcm8gbWVhbnMgdGhlcmUgaXMgbm8gc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGUgc2NhdHRlcmxpc3QgaXMgbm90IGZpbGxlZC4KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBvbmx5IG9uZSBjb25jdXJyZW50IHJlYWRlciBhbmQgb25lIGNvbmN1cnJlbnQKKyAqIHdyaXRlciwgeW91IGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZyB0byB1c2UgdGhlc2UgbWFjcm9zLgorICovCisjZGVmaW5lCWtmaWZvX2RtYV9vdXRfcHJlcGFyZShmaWZvLCBzZ2wsIG5lbnRzLCBsZW4pIFwKKyh7IFwKKwl0eXBlb2YoZmlmbyArIDEpIF9fdG1wID0gKGZpZm8pOyBcCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpfX3NnbCA9IChzZ2wpOyBcCisJaW50IF9fbmVudHMgPSAobmVudHMpOyBcCisJdW5zaWduZWQgaW50IF9fbGVuID0gKGxlbik7IFwKKwljb25zdCBzaXplX3QgX19yZWNzaXplID0gc2l6ZW9mKCpfX3RtcC0+cmVjdHlwZSk7IFwKKwlzdHJ1Y3QgX19rZmlmbyAqX19rZmlmbyA9ICZfX3RtcC0+a2ZpZm87IFwKKwkoX19yZWNzaXplKSA/IFwKKwlfX2tmaWZvX2RtYV9vdXRfcHJlcGFyZV9yKF9fa2ZpZm8sIF9fc2dsLCBfX25lbnRzLCBfX2xlbiwgX19yZWNzaXplKSA6IFwKKwlfX2tmaWZvX2RtYV9vdXRfcHJlcGFyZShfX2tmaWZvLCBfX3NnbCwgX19uZW50cywgX19sZW4pOyBcCit9KQorCisvKioKKyAqIGtmaWZvX2RtYV9vdXRfZmluaXNoIC0gZmluaXNoIGEgRE1BIE9VVCBvcGVyYXRpb24KKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcmQKKyAqCisgKiBUaGlzIG1hY3JvIGZpbmlzaCBhIERNQSBPVVQgb3BlcmF0aW9uLiBUaGUgb3V0IGNvdW50ZXIgd2lsbCBiZSB1cGRhdGVkIGJ5CisgKiB0aGUgbGVuIHBhcmFtZXRlci4gTm8gZXJyb3IgY2hlY2tpbmcgd2lsbCBiZSBkb25lLgorICoKKyAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAorICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBtYWNyb3MuCisgKi8KKyNkZWZpbmUga2ZpZm9fZG1hX291dF9maW5pc2goZmlmbywgbGVuKSBcCisodm9pZCkoeyBcCisJdHlwZW9mKGZpZm8gKyAxKSBfX3RtcCA9IChmaWZvKTsgXAorCXVuc2lnbmVkIGludCBfX2xlbiA9IChsZW4pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKF9fcmVjc2l6ZSkgXAorCQlfX2tmaWZvX2RtYV9vdXRfZmluaXNoX3IoX19rZmlmbywgX19yZWNzaXplKTsgXAorCWVsc2UgXAorCQlfX2tmaWZvLT5vdXQgKz0gX19sZW4gLyBzaXplb2YoKl9fdG1wLT50eXBlKTsgXAorfSkKKworLyoqCisgKiBrZmlmb19vdXRfcGVlayAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIGZpZm8KKyAqIEBmaWZvOiBhZGRyZXNzIG9mIHRoZSBmaWZvIHRvIGJlIHVzZWQKKyAqIEBidWY6IHBvaW50ZXIgdG8gdGhlIHN0b3JhZ2UgYnVmZmVyCisgKiBAbjogbWF4LiBudW1iZXIgb2YgZWxlbWVudHMgdG8gZ2V0CisgKgorICogVGhpcyBtYWNybyBnZXQgdGhlIGRhdGEgZnJvbSB0aGUgZmlmbyBhbmQgcmV0dXJuIHRoZSBudW1iZXJzIG9mIGVsZW1lbnRzCisgKiBjb3BpZWQuIFRoZSBkYXRhIGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGZpZm8uCisgKgorICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50CisgKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIG1hY3JvLgorICovCisjZGVmaW5lCWtmaWZvX291dF9wZWVrKGZpZm8sIGJ1ZiwgbikgXAorX19rZmlmb19tdXN0X2NoZWNrX2hlbHBlciggXAorKHsgXAorCXR5cGVvZihmaWZvICsgMSkgX190bXAgPSAoZmlmbyk7IFwKKwl0eXBlb2YoYnVmICsgMSkgX19idWYgPSAoYnVmKTsgXAorCXVuc2lnbmVkIGxvbmcgX19uID0gKG4pOyBcCisJY29uc3Qgc2l6ZV90IF9fcmVjc2l6ZSA9IHNpemVvZigqX190bXAtPnJlY3R5cGUpOyBcCisJc3RydWN0IF9fa2ZpZm8gKl9fa2ZpZm8gPSAmX190bXAtPmtmaWZvOyBcCisJaWYgKDApIHsgXAorCQl0eXBlb2YoX190bXAtPnB0cikgX19kdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBOVUxMOyBcCisJCV9fYnVmID0gX19kdW1teTsgXAorCX0gXAorCShfX3JlY3NpemUpID8gXAorCV9fa2ZpZm9fb3V0X3BlZWtfcihfX2tmaWZvLCBfX2J1ZiwgX19uLCBfX3JlY3NpemUpIDogXAorCV9fa2ZpZm9fb3V0X3BlZWsoX19rZmlmbywgX19idWYsIF9fbik7IFwKK30pIFwKKykKKworZXh0ZXJuIGludCBfX2tmaWZvX2FsbG9jKHN0cnVjdCBfX2tmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwlzaXplX3QgZXNpemUsIGdmcF90IGdmcF9tYXNrKTsKKworZXh0ZXJuIHZvaWQgX19rZmlmb19mcmVlKHN0cnVjdCBfX2tmaWZvICpmaWZvKTsKKworZXh0ZXJuIGludCBfX2tmaWZvX2luaXQoc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgKmJ1ZmZlciwKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgc2l6ZV90IGVzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2luKHN0cnVjdCBfX2tmaWZvICpmaWZvLAorCWNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXQoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKKworZXh0ZXJuIGludCBfX2tmaWZvX2Zyb21fdXNlcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGludCAqY29waWVkKTsKKworZXh0ZXJuIGludCBfX2tmaWZvX3RvX3VzZXIoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgaW50ICpjb3BpZWQpOworCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fZG1hX2luX3ByZXBhcmUoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywgdW5zaWduZWQgaW50IGxlbik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19kbWFfb3V0X3ByZXBhcmUoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywgdW5zaWduZWQgaW50IGxlbik7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19vdXRfcGVlayhzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOworCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwljb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sIHNpemVfdCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9yKHN0cnVjdCBfX2tmaWZvICpmaWZvLAorCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbiwgc2l6ZV90IHJlY3NpemUpOworCitleHRlcm4gaW50IF9fa2ZpZm9fZnJvbV91c2VyX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgKmNvcGllZCwKKwlzaXplX3QgcmVjc2l6ZSk7CisKK2V4dGVybiBpbnQgX19rZmlmb190b191c2VyX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgX191c2VyICp0bywKKwl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgaW50ICpjb3BpZWQsIHNpemVfdCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX2RtYV9pbl9wcmVwYXJlX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywgdW5zaWduZWQgaW50IGxlbiwgc2l6ZV90IHJlY3NpemUpOworCitleHRlcm4gdm9pZCBfX2tmaWZvX2RtYV9pbl9maW5pc2hfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwl1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19kbWFfb3V0X3ByZXBhcmVfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLCB1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSk7CisKK2V4dGVybiB2b2lkIF9fa2ZpZm9fZG1hX291dF9maW5pc2hfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywgc2l6ZV90IHJlY3NpemUpOworCitleHRlcm4gdW5zaWduZWQgaW50IF9fa2ZpZm9fbGVuX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHNpemVfdCByZWNzaXplKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBfX2tmaWZvX291dF9wZWVrX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19rZmlmb19tYXhfcih1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbWVtdHJhY2UuaCBiL2luY2x1ZGUvbGludXgva21lbXRyYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MTZkMzkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9rbWVtdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQotICoKLSAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciBHUEwgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX0xJTlVYX0tNRU1UUkFDRV9ICi0jZGVmaW5lIF9MSU5VWF9LTUVNVFJBQ0VfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KLQotI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKLWV4dGVybiB2b2lkIGttZW10cmFjZV9pbml0KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfaW5pdCh2b2lkKQotewotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZiAvKiBfTElOVVhfS01FTVRSQUNFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rc20uaCBiL2luY2x1ZGUvbGludXgva3NtLmgKaW5kZXggNDNiZGFiNy4uNzRkNjkxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rc20uaAorKysgYi9pbmNsdWRlL2xpbnV4L2tzbS5oCkBAIC03OCw3ICs3OCw3IEBACiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHBhZ2VfYW5vbl92bWEocGFnZSk7CiAKIAlpZiAoIWFub25fdm1hIHx8Ci0JICAgIChhbm9uX3ZtYSA9PSB2bWEtPmFub25fdm1hICYmCisJICAgIChhbm9uX3ZtYS0+cm9vdCA9PSB2bWEtPmFub25fdm1hLT5yb290ICYmCiAJICAgICBwYWdlLT5pbmRleCA9PSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKSkKIAkJcmV0dXJuIHBhZ2U7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3RocmVhZC5oIGIvaW5jbHVkZS9saW51eC9rdGhyZWFkLmgKaW5kZXggYWFiYzhhMS4uNjg1ZWE2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdGhyZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9rdGhyZWFkLmgKQEAgLTMwLDggKzMwLDczIEBACiB2b2lkIGt0aHJlYWRfYmluZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmssIHVuc2lnbmVkIGludCBjcHUpOwogaW50IGt0aHJlYWRfc3RvcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmspOwogaW50IGt0aHJlYWRfc2hvdWxkX3N0b3Aodm9pZCk7Cit2b2lkICprdGhyZWFkX2RhdGEoc3RydWN0IHRhc2tfc3RydWN0ICprKTsKIAogaW50IGt0aHJlYWRkKHZvaWQgKnVudXNlZCk7CiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkZF90YXNrOwogCisvKgorICogU2ltcGxlIHdvcmsgcHJvY2Vzc29yIGJhc2VkIG9uIGt0aHJlYWQuCisgKgorICogVGhpcyBwcm92aWRlcyBlYXNpZXIgd2F5IHRvIG1ha2UgdXNlIG9mIGt0aHJlYWRzLiAgQSBrdGhyZWFkX3dvcmsKKyAqIGNhbiBiZSBxdWV1ZWQgYW5kIGZsdXNoZWQgdXNpbmcgcXVldWUvZmx1c2hfa3RocmVhZF93b3JrKCkKKyAqIHJlc3BlY3RpdmVseS4gIFF1ZXVlZCBrdGhyZWFkX3dvcmtzIGFyZSBwcm9jZXNzZWQgYnkgYSBrdGhyZWFkCisgKiBydW5uaW5nIGt0aHJlYWRfd29ya2VyX2ZuKCkuCisgKgorICogQSBrdGhyZWFkX3dvcmsgY2FuJ3QgYmUgZnJlZWQgd2hpbGUgaXQgaXMgZXhlY3V0aW5nLgorICovCitzdHJ1Y3Qga3RocmVhZF93b3JrOwordHlwZWRlZiB2b2lkICgqa3RocmVhZF93b3JrX2Z1bmNfdCkoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7CisKK3N0cnVjdCBrdGhyZWFkX3dvcmtlciB7CisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtfbGlzdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7Cit9OworCitzdHJ1Y3Qga3RocmVhZF93b3JrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJa3RocmVhZF93b3JrX2Z1bmNfdAlmdW5jOworCXdhaXRfcXVldWVfaGVhZF90CWRvbmU7CisJYXRvbWljX3QJCWZsdXNoaW5nOworCWludAkJCXF1ZXVlX3NlcTsKKwlpbnQJCQlkb25lX3NlcTsKK307CisKKyNkZWZpbmUgS1RIUkVBRF9XT1JLRVJfSU5JVCh3b3JrZXIpCXsJCQkJXAorCS5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VELAkJCQkJXAorCS53b3JrX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgod29ya2VyKS53b3JrX2xpc3QpLAkJXAorCX0KKworI2RlZmluZSBLVEhSRUFEX1dPUktfSU5JVCh3b3JrLCBmbikJewkJCQlcCisJLm5vZGUgPSBMSVNUX0hFQURfSU5JVCgod29yaykubm9kZSksCQkJCVwKKwkuZnVuYyA9IChmbiksCQkJCQkJCVwKKwkuZG9uZSA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKCh3b3JrKS5kb25lKSwJCVwKKwkuZmx1c2hpbmcgPSBBVE9NSUNfSU5JVCgwKSwJCQkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0tUSFJFQURfV09SS0VSKHdvcmtlcikJCQkJCVwKKwlzdHJ1Y3Qga3RocmVhZF93b3JrZXIgd29ya2VyID0gS1RIUkVBRF9XT1JLRVJfSU5JVCh3b3JrZXIpCisKKyNkZWZpbmUgREVGSU5FX0tUSFJFQURfV09SSyh3b3JrLCBmbikJCQkJCVwKKwlzdHJ1Y3Qga3RocmVhZF93b3JrIHdvcmsgPSBLVEhSRUFEX1dPUktfSU5JVCh3b3JrLCBmbikKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfa3RocmVhZF93b3JrZXIoc3RydWN0IGt0aHJlYWRfd29ya2VyICp3b3JrZXIpCit7CisJKndvcmtlciA9IChzdHJ1Y3Qga3RocmVhZF93b3JrZXIpS1RIUkVBRF9XT1JLRVJfSU5JVCgqd29ya2VyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfa3RocmVhZF93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmssCisJCQkJICAgICBrdGhyZWFkX3dvcmtfZnVuY190IGZuKQoreworCSp3b3JrID0gKHN0cnVjdCBrdGhyZWFkX3dvcmspS1RIUkVBRF9XT1JLX0lOSVQoKndvcmssIGZuKTsKK30KKworaW50IGt0aHJlYWRfd29ya2VyX2ZuKHZvaWQgKndvcmtlcl9wdHIpOworCitib29sIHF1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrZXIgKndvcmtlciwKKwkJCXN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspOwordm9pZCBmbHVzaF9rdGhyZWFkX3dvcmsoc3RydWN0IGt0aHJlYWRfd29yayAqd29yayk7Cit2b2lkIGZsdXNoX2t0aHJlYWRfd29ya2VyKHN0cnVjdCBrdGhyZWFkX3dvcmtlciAqd29ya2VyKTsKKwogI2VuZGlmIC8qIF9MSU5VWF9LVEhSRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGI4NWYzZmYuLmYwMTBmMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNzUxLDYgKzc1MSw3IEBACiAJc3RydWN0IGF0YV9ob3N0CQkqaG9zdDsKIAlzdHJ1Y3QgZGV2aWNlIAkJKmRldjsKIAorCXN0cnVjdCBtdXRleAkJc2NzaV9zY2FuX211dGV4OwogCXN0cnVjdCBkZWxheWVkX3dvcmsJaG90cGx1Z190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlzY3NpX3Jlc2Nhbl90YXNrOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDVkNTdhM2EuLmQxNjdiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfTElTVF9ICiAjZGVmaW5lIF9MSU5VWF9MSVNUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KQEAgLTE2LDEwICsxNyw2IEBACiAgKiB1c2luZyB0aGUgZ2VuZXJpYyBzaW5nbGUtZW50cnkgcm91dGluZXMuCiAgKi8KIAotc3RydWN0IGxpc3RfaGVhZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Ci19OwotCiAjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9CiAKICNkZWZpbmUgTElTVF9IRUFEKG5hbWUpIFwKQEAgLTU2NiwxNCArNTYzLDYgQEAKICAqIFlvdSBsb3NlIHRoZSBhYmlsaXR5IHRvIGFjY2VzcyB0aGUgdGFpbCBpbiBPKDEpLgogICovCiAKLXN0cnVjdCBobGlzdF9oZWFkIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZmlyc3Q7Ci19OwotCi1zdHJ1Y3QgaGxpc3Rfbm9kZSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5leHQsICoqcHByZXY7Ci19OwotCiAjZGVmaW5lIEhMSVNUX0hFQURfSU5JVCB7IC5maXJzdCA9IE5VTEwgfQogI2RlZmluZSBITElTVF9IRUFEKG5hbWUpIHN0cnVjdCBobGlzdF9oZWFkIG5hbWUgPSB7ICAuZmlyc3QgPSBOVUxMIH0KICNkZWZpbmUgSU5JVF9ITElTVF9IRUFEKHB0cikgKChwdHIpLT5maXJzdCA9IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21iY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCmluZGV4IGEwOWI4NGUuLjU0Y2JiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWJjYWNoZS5oCkBAIC00LDkgKzQsNiBAQAogICAoQykgMjAwMSBieSBBbmRyZWFzIEdydWVuYmFjaGVyLCA8YS5ncnVlbmJhY2hlckBjb21wdXRlci5vcmc+CiAqLwogCi0vKiBIYXJkd2lyZSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgaW5kZXhlcyAqLwotI2RlZmluZSBNQl9DQUNIRV9JTkRFWEVTX0NPVU5UIDEKLQogc3RydWN0IG1iX2NhY2hlX2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQllX2xydV9saXN0OwogCXN0cnVjdCBtYl9jYWNoZQkJCSplX2NhY2hlOwpAQCAtMTgsMTcgKzE1LDEyIEBACiAJc3RydWN0IHsKIAkJc3RydWN0IGxpc3RfaGVhZAlvX2xpc3Q7CiAJCXVuc2lnbmVkIGludAkJb19rZXk7Ci0JfSBlX2luZGV4ZXNbMF07Ci19OwotCi1zdHJ1Y3QgbWJfY2FjaGVfb3AgewotCWludCAoKmZyZWUpKHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqLCBnZnBfdCk7CisJfSBlX2luZGV4OwogfTsKIAogLyogRnVuY3Rpb25zIG9uIGNhY2hlcyAqLwogCi1zdHJ1Y3QgbWJfY2FjaGUgKiBtYl9jYWNoZV9jcmVhdGUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbWJfY2FjaGVfb3AgKiwgc2l6ZV90LAotCQkJCSAgaW50LCBpbnQpOworc3RydWN0IG1iX2NhY2hlICptYl9jYWNoZV9jcmVhdGUoY29uc3QgY2hhciAqLCBpbnQpOwogdm9pZCBtYl9jYWNoZV9zaHJpbmsoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIHZvaWQgbWJfY2FjaGVfZGVzdHJveShzdHJ1Y3QgbWJfY2FjaGUgKik7CiAKQEAgLTM2LDE3ICsyOCwxNSBAQAogCiBzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2FsbG9jKHN0cnVjdCBtYl9jYWNoZSAqLCBnZnBfdCk7CiBpbnQgbWJfY2FjaGVfZW50cnlfaW5zZXJ0KHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCi0JCQkgIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnRbXSk7CisJCQkgIHNlY3Rvcl90LCB1bnNpZ25lZCBpbnQpOwogdm9pZCBtYl9jYWNoZV9lbnRyeV9yZWxlYXNlKHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqKTsKIHZvaWQgbWJfY2FjaGVfZW50cnlfZnJlZShzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKik7CiBzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2dldChzdHJ1Y3QgbWJfY2FjaGUgKiwKIAkJCQkJICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCiAJCQkJCSAgc2VjdG9yX3QpOwotI2lmICFkZWZpbmVkKE1CX0NBQ0hFX0lOREVYRVNfQ09VTlQpIHx8IChNQl9DQUNIRV9JTkRFWEVTX0NPVU5UID4gMCkKLXN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqbWJfY2FjaGVfZW50cnlfZmluZF9maXJzdChzdHJ1Y3QgbWJfY2FjaGUgKmNhY2hlLCBpbnQsCitzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2ZpbmRfZmlyc3Qoc3RydWN0IG1iX2NhY2hlICpjYWNoZSwKIAkJCQkJCSBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIAogCQkJCQkJIHVuc2lnbmVkIGludCk7Ci1zdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKm1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChzdHJ1Y3QgbWJfY2FjaGVfZW50cnkgKiwgaW50LAorc3RydWN0IG1iX2NhY2hlX2VudHJ5ICptYl9jYWNoZV9lbnRyeV9maW5kX25leHQoc3RydWN0IG1iX2NhY2hlX2VudHJ5ICosCiAJCQkJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIAogCQkJCQkJdW5zaWduZWQgaW50KTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA5NDExZDMyLi4xNTlhMDc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtOTgsMTEgKzk4LDYgQEAKIC8qCiAgKiBGb3IgbWVtb3J5IHJlY2xhaW0uCiAgKi8KLWV4dGVybiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKLWV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbm90ZV9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJCQkJaW50IHByaW9yaXR5KTsKLWV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfcmVjb3JkX3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJCQlpbnQgcHJpb3JpdHkpOwogaW50IG1lbV9jZ3JvdXBfaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIGludCBtZW1fY2dyb3VwX2luYWN0aXZlX2ZpbGVfaXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfem9uZV9ucl9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCkBAIC0xMjgsOCArMTIzLDkgQEAKIAogdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV9maWxlX21hcHBlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHZhbCk7CiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc29mdF9saW1pdF9yZWNsYWltKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCi0JCQkJCQlnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwKLQkJCQkJCWludCB6aWQpOworCQkJCQkJZ2ZwX3QgZ2ZwX21hc2spOwordTY0IG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOworCiAjZWxzZSAvKiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUiAqLwogc3RydWN0IG1lbV9jZ3JvdXA7CiAKQEAgLTMwNCw3ICszMDAsMTMgQEAKIAogc3RhdGljIGlubGluZQogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAotCQkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIGludCB6aWQpCisJCQkJCSAgICBnZnBfdCBnZnBfbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZQordTY0IG1lbV9jZ3JvdXBfZ2V0X2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaAppbmRleCA3YjllZjZiLi4zMWFjMjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKQEAgLTIxMCw2ICsyMTAsOCBAQAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgZ2ZwX3QgZ2ZwX2ZsYWdzLAogCQkJCXN0cnVjdCBtZW1wb2xpY3kgKiptcG9sLCBub2RlbWFza190ICoqbm9kZW1hc2spOwogZXh0ZXJuIGJvb2wgaW5pdF9ub2RlbWFza19vZl9tZW1wb2xpY3kobm9kZW1hc2tfdCAqbWFzayk7CitleHRlcm4gYm9vbCBtZW1wb2xpY3lfbm9kZW1hc2tfaW50ZXJzZWN0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQljb25zdCBub2RlbWFza190ICptYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBzbGFiX25vZGUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5KTsKIAogZXh0ZXJuIGVudW0gem9uZV90eXBlIHBvbGljeV96b25lOwpAQCAtMzM4LDcgKzM0MCwxNiBAQAogCXJldHVybiBub2RlX3pvbmVsaXN0KDAsIGdmcF9mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpbml0X25vZGVtYXNrX29mX21lbXBvbGljeShub2RlbWFza190ICptKSB7IHJldHVybiBmYWxzZTsgfQorc3RhdGljIGlubGluZSBib29sIGluaXRfbm9kZW1hc2tfb2ZfbWVtcG9saWN5KG5vZGVtYXNrX3QgKm0pCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbWVtcG9saWN5X25vZGVtYXNrX2ludGVyc2VjdHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQljb25zdCBub2RlbWFza190ICptYXNrKQoreworCXJldHVybiBmYWxzZTsKK30KIAogc3RhdGljIGlubGluZSBpbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCWNvbnN0IG5vZGVtYXNrX3QgKmZyb21fbm9kZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggN2E5YWI3ZC4uNzA5ZjY3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtODE1LDYgKzgxNSw3IEBACiB9CiAKIGV4dGVybiB2b2lkIHRydW5jYXRlX3BhZ2VjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2xkLCBsb2ZmX3QgbmV3KTsKK2V4dGVybiB2b2lkIHRydW5jYXRlX3NldHNpemUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG5ld3NpemUpOwogZXh0ZXJuIGludCB2bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpOwogZXh0ZXJuIGludCB2bXRydW5jYXRlX3JhbmdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBlbmQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggZDAyZDJjNi4uNmI3NTI1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaApAQCAtMjQsMTIgKzI0LDE0IEBACiB9OwogCiBzdHJ1Y3QgbW1jX2NzZCB7CisJdW5zaWduZWQgY2hhcgkJc3RydWN0dXJlOwogCXVuc2lnbmVkIGNoYXIJCW1tY2FfdnNuOwogCXVuc2lnbmVkIHNob3J0CQljbWRjbGFzczsKIAl1bnNpZ25lZCBzaG9ydAkJdGFjY19jbGtzOwogCXVuc2lnbmVkIGludAkJdGFjY19uczsKIAl1bnNpZ25lZCBpbnQJCXIyd19mYWN0b3I7CiAJdW5zaWduZWQgaW50CQltYXhfZHRyOworCXVuc2lnbmVkIGludAkJZXJhc2Vfc2l6ZTsJCS8qIEluIHNlY3RvcnMgKi8KIAl1bnNpZ25lZCBpbnQJCXJlYWRfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQJCXdyaXRlX2Jsa2JpdHM7CiAJdW5zaWduZWQgaW50CQljYXBhY2l0eTsKQEAgLTQxLDkgKzQzLDE2IEBACiAKIHN0cnVjdCBtbWNfZXh0X2NzZCB7CiAJdTgJCQlyZXY7CisJdTgJCQllcmFzZV9ncm91cF9kZWY7CisJdTgJCQlzZWNfZmVhdHVyZV9zdXBwb3J0OwogCXVuc2lnbmVkIGludAkJc2FfdGltZW91dDsJCS8qIFVuaXRzOiAxMDBucyAqLwogCXVuc2lnbmVkIGludAkJaHNfbWF4X2R0cjsKIAl1bnNpZ25lZCBpbnQJCXNlY3RvcnM7CisJdW5zaWduZWQgaW50CQloY19lcmFzZV9zaXplOwkJLyogSW4gc2VjdG9ycyAqLworCXVuc2lnbmVkIGludAkJaGNfZXJhc2VfdGltZW91dDsJLyogSW4gbWlsbGlzZWNvbmRzICovCisJdW5zaWduZWQgaW50CQlzZWNfdHJpbV9tdWx0OwkvKiBTZWN1cmUgdHJpbSBtdWx0aXBsaWVyICAqLworCXVuc2lnbmVkIGludAkJc2VjX2VyYXNlX211bHQ7CS8qIFNlY3VyZSBlcmFzZSBtdWx0aXBsaWVyICovCisJdW5zaWduZWQgaW50CQl0cmltX3RpbWVvdXQ7CQkvKiBJbiBtaWxsaXNlY29uZHMgKi8KIH07CiAKIHN0cnVjdCBzZF9zY3IgewpAQCAtNTMsNiArNjIsMTIgQEAKICNkZWZpbmUgU0RfU0NSX0JVU19XSURUSF80CSgxPDwyKQogfTsKIAorc3RydWN0IHNkX3NzciB7CisJdW5zaWduZWQgaW50CQlhdTsJCQkvKiBJbiBzZWN0b3JzICovCisJdW5zaWduZWQgaW50CQllcmFzZV90aW1lb3V0OwkJLyogSW4gbWlsbGlzZWNvbmRzICovCisJdW5zaWduZWQgaW50CQllcmFzZV9vZmZzZXQ7CQkvKiBJbiBtaWxsaXNlY29uZHMgKi8KK307CisKIHN0cnVjdCBzZF9zd2l0Y2hfY2FwcyB7CiAJdW5zaWduZWQgaW50CQloc19tYXhfZHRyOwogfTsKQEAgLTkyLDYgKzEwNyw3IEBACiAjZGVmaW5lIE1NQ19UWVBFX01NQwkJMAkJLyogTU1DIGNhcmQgKi8KICNkZWZpbmUgTU1DX1RZUEVfU0QJCTEJCS8qIFNEIGNhcmQgKi8KICNkZWZpbmUgTU1DX1RZUEVfU0RJTwkJMgkJLyogU0RJTyBjYXJkICovCisjZGVmaW5lIE1NQ19UWVBFX1NEX0NPTUJPCTMJCS8qIFNEIGNvbWJvIChJTyttZW0pIGNhcmQgKi8KIAl1bnNpZ25lZCBpbnQJCXN0YXRlOwkJLyogKG91cikgY2FyZCBzdGF0ZSAqLwogI2RlZmluZSBNTUNfU1RBVEVfUFJFU0VOVAkoMTw8MCkJCS8qIHByZXNlbnQgaW4gc3lzZnMgKi8KICNkZWZpbmUgTU1DX1NUQVRFX1JFQURPTkxZCSgxPDwxKQkJLyogY2FyZCBpcyByZWFkLW9ubHkgKi8KQEAgLTEwMSw2ICsxMTcsMTMgQEAKICNkZWZpbmUgTU1DX1FVSVJLX0xFTklFTlRfRk4wCSgxPDwwKQkJLyogYWxsb3cgU0RJTyBGTjAgd3JpdGVzIG91dHNpZGUgb2YgdGhlIFZTIENDQ1IgcmFuZ2UgKi8KICNkZWZpbmUgTU1DX1FVSVJLX0JMS1NaX0ZPUl9CWVRFX01PREUgKDE8PDEpCS8qIHVzZSBmdW5jLT5jdXJfYmxrc2l6ZSAqLwogCQkJCQkJLyogZm9yIGJ5dGUgbW9kZSAqLworI2RlZmluZSBNTUNfUVVJUktfTk9OU1REX1NESU8JKDE8PDIpCQkvKiBub24tc3RhbmRhcmQgU0RJTyBjYXJkIGF0dGFjaGVkICovCisJCQkJCQkvKiAobWlzc2luZyBDSUEgcmVnaXN0ZXJzKSAqLworCisJdW5zaWduZWQgaW50CQllcmFzZV9zaXplOwkvKiBlcmFzZSBzaXplIGluIHNlY3RvcnMgKi8KKyAJdW5zaWduZWQgaW50CQllcmFzZV9zaGlmdDsJLyogaWYgZXJhc2UgdW5pdCBpcyBwb3dlciAyICovCisgCXVuc2lnbmVkIGludAkJcHJlZl9lcmFzZTsJLyogaW4gc2VjdG9ycyAqLworIAl1OAkJCWVyYXNlZF9ieXRlOwkvKiB2YWx1ZSBvZiBlcmFzZWQgYnl0ZXMgKi8KIAogCXUzMgkJCXJhd19jaWRbNF07CS8qIHJhdyBjYXJkIENJRCAqLwogCXUzMgkJCXJhd19jc2RbNF07CS8qIHJhdyBjYXJkIENTRCAqLwpAQCAtMTA5LDYgKzEzMiw3IEBACiAJc3RydWN0IG1tY19jc2QJCWNzZDsJCS8qIGNhcmQgc3BlY2lmaWMgKi8KIAlzdHJ1Y3QgbW1jX2V4dF9jc2QJZXh0X2NzZDsJLyogbW1jIHY0IGV4dGVuZGVkIGNhcmQgc3BlY2lmaWMgKi8KIAlzdHJ1Y3Qgc2Rfc2NyCQlzY3I7CQkvKiBleHRyYSBTRCBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBzZF9zc3IJCXNzcjsJCS8qIHlldCBtb3JlIFNEIGluZm9ybWF0aW9uICovCiAJc3RydWN0IHNkX3N3aXRjaF9jYXBzCXN3X2NhcHM7CS8qIHN3aXRjaCAoQ01ENikgY2FwcyAqLwogCiAJdW5zaWduZWQgaW50CQlzZGlvX2Z1bmNzOwkvKiBudW1iZXIgb2YgU0RJTyBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaAppbmRleCBlNDg5OGU5Li43NDI5MDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCkBAIC05Miw2ICs5Miw4IEBACiAgKiAgICAgICAgICAgICAgYWN0aXZlbHkgZmFpbGluZyByZXF1ZXN0cwogICovCiAKKwl1bnNpZ25lZCBpbnQJCWVyYXNlX3RpbWVvdXQ7CS8qIGluIG1pbGxpc2Vjb25kcyAqLworCiAJc3RydWN0IG1tY19kYXRhCQkqZGF0YTsJCS8qIGRhdGEgc2VnbWVudCBhc3NvY2lhdGVkIHdpdGggY21kICovCiAJc3RydWN0IG1tY19yZXF1ZXN0CSptcnE7CQkvKiBhc3NvY2lhdGVkIHJlcXVlc3QgKi8KIH07CkBAIC0xMzQsNiArMTM2LDIzIEBACiBleHRlcm4gaW50IG1tY193YWl0X2Zvcl9hcHBfY21kKHN0cnVjdCBtbWNfaG9zdCAqLCBzdHJ1Y3QgbW1jX2NhcmQgKiwKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKiwgaW50KTsKIAorI2RlZmluZSBNTUNfRVJBU0VfQVJHCQkweDAwMDAwMDAwCisjZGVmaW5lIE1NQ19TRUNVUkVfRVJBU0VfQVJHCTB4ODAwMDAwMDAKKyNkZWZpbmUgTU1DX1RSSU1fQVJHCQkweDAwMDAwMDAxCisjZGVmaW5lIE1NQ19TRUNVUkVfVFJJTTFfQVJHCTB4ODAwMDAwMDEKKyNkZWZpbmUgTU1DX1NFQ1VSRV9UUklNMl9BUkcJMHg4MDAwODAwMAorCisjZGVmaW5lIE1NQ19TRUNVUkVfQVJHUwkJMHg4MDAwMDAwMAorI2RlZmluZSBNTUNfVFJJTV9BUkdTCQkweDAwMDA4MDAxCisKK2V4dGVybiBpbnQgbW1jX2VyYXNlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCBuciwKKwkJICAgICB1bnNpZ25lZCBpbnQgYXJnKTsKK2V4dGVybiBpbnQgbW1jX2Nhbl9lcmFzZShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworZXh0ZXJuIGludCBtbWNfY2FuX3RyaW0oc3RydWN0IG1tY19jYXJkICpjYXJkKTsKK2V4dGVybiBpbnQgbW1jX2Nhbl9zZWN1cmVfZXJhc2VfdHJpbShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworZXh0ZXJuIGludCBtbWNfZXJhc2VfZ3JvdXBfYWxpZ25lZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBmcm9tLAorCQkJCSAgIHVuc2lnbmVkIGludCBucik7CisKIGV4dGVybiB2b2lkIG1tY19zZXRfZGF0YV90aW1lb3V0KHN0cnVjdCBtbWNfZGF0YSAqLCBjb25zdCBzdHJ1Y3QgbW1jX2NhcmQgKik7CiBleHRlcm4gdW5zaWduZWQgaW50IG1tY19hbGlnbl9kYXRhX3NpemUoc3RydWN0IG1tY19jYXJkICosIHVuc2lnbmVkIGludCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaCBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAppbmRleCBmNjU5MTNjLi4xNTc1YjUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCkBAIC0xMjQsNiArMTI0LDcgQEAKIAl1bnNpZ25lZCBpbnQJCWZfbWluOwogCXVuc2lnbmVkIGludAkJZl9tYXg7CiAJdTMyCQkJb2NyX2F2YWlsOworCXN0cnVjdCBub3RpZmllcl9ibG9jawlwbV9ub3RpZnk7CiAKICNkZWZpbmUgTU1DX1ZERF8xNjVfMTk1CQkweDAwMDAwMDgwCS8qIFZERCB2b2x0YWdlIDEuNjUgLSAxLjk1ICovCiAjZGVmaW5lIE1NQ19WRERfMjBfMjEJCTB4MDAwMDAxMDAJLyogVkREIHZvbHRhZ2UgMi4wIH4gMi4xICovCkBAIC0xNTUsNiArMTU2LDcgQEAKICNkZWZpbmUgTU1DX0NBUF9ESVNBQkxFCQkoMSA8PCA3KQkvKiBDYW4gdGhlIGhvc3QgYmUgZGlzYWJsZWQgKi8KICNkZWZpbmUgTU1DX0NBUF9OT05SRU1PVkFCTEUJKDEgPDwgOCkJLyogTm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLwogI2RlZmluZSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWQkoMSA8PCA5KQkvKiBXYWl0cyB3aGlsZSBjYXJkIGlzIGJ1c3kgKi8KKyNkZWZpbmUgTU1DX0NBUF9FUkFTRQkJKDEgPDwgMTApCS8qIEFsbG93IGVyYXNlL3RyaW0gY29tbWFuZHMgKi8KIAogCW1tY19wbV9mbGFnX3QJCXBtX2NhcHM7CS8qIHN1cHBvcnRlZCBwbSBmZWF0dXJlcyAqLwogCkBAIC0xODMsNiArMTg1LDcgQEAKIAogCS8qIE9ubHkgdXNlZCB3aXRoIE1NQ19DQVBfRElTQUJMRSAqLwogCWludAkJCWVuYWJsZWQ7CS8qIGhvc3QgaXMgZW5hYmxlZCAqLworCWludAkJCXJlc2Nhbl9kaXNhYmxlOwkvKiBkaXNhYmxlIGNhcmQgZGV0ZWN0aW9uICovCiAJaW50CQkJbmVzdGluZ19jbnQ7CS8qICJlbmFibGUiIG5lc3RpbmcgY291bnQgKi8KIAlpbnQJCQllbl9kaXNfcmVjdXJzOwkvKiBkZXRlY3QgcmVjdXJzaW9uICovCiAJdW5zaWduZWQgaW50CQlkaXNhYmxlX2RlbGF5OwkvKiBkaXNhYmxlIGRlbGF5IGluIG1zZWNzICovCkBAIC0yNTcsNiArMjYwLDcgQEAKIGludCBtbWNfaG9zdF9lbmFibGUoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIGludCBtbWNfaG9zdF9kaXNhYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiBpbnQgbW1jX2hvc3RfbGF6eV9kaXNhYmxlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CitpbnQgbW1jX3BtX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5vdGlmeV9ibG9jaywgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1tY19zZXRfZGlzYWJsZV9kZWxheShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsCiAJCQkJCSB1bnNpZ25lZCBpbnQgZGlzYWJsZV9kZWxheSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggOGE0OWNiZi4uZGQxMWFlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTI1MSwxMiArMjUxLDIxIEBACiAgKiBFWFRfQ1NEIGZpZWxkcwogICovCiAKLSNkZWZpbmUgRVhUX0NTRF9CVVNfV0lEVEgJMTgzCS8qIFIvVyAqLwotI2RlZmluZSBFWFRfQ1NEX0hTX1RJTUlORwkxODUJLyogUi9XICovCi0jZGVmaW5lIEVYVF9DU0RfQ0FSRF9UWVBFCTE5NgkvKiBSTyAqLwotI2RlZmluZSBFWFRfQ1NEX1JFVgkJMTkyCS8qIFJPICovCi0jZGVmaW5lIEVYVF9DU0RfU0VDX0NOVAkJMjEyCS8qIFJPLCA0IGJ5dGVzICovCi0jZGVmaW5lIEVYVF9DU0RfU19BX1RJTUVPVVQJMjE3CisjZGVmaW5lIEVYVF9DU0RfRVJBU0VfR1JPVVBfREVGCQkxNzUJLyogUi9XICovCisjZGVmaW5lIEVYVF9DU0RfRVJBU0VEX01FTV9DT05UCQkxODEJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9CVVNfV0lEVEgJCTE4MwkvKiBSL1cgKi8KKyNkZWZpbmUgRVhUX0NTRF9IU19USU1JTkcJCTE4NQkvKiBSL1cgKi8KKyNkZWZpbmUgRVhUX0NTRF9SRVYJCQkxOTIJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9TVFJVQ1RVUkUJCTE5NAkvKiBSTyAqLworI2RlZmluZSBFWFRfQ1NEX0NBUkRfVFlQRQkJMTk2CS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfU0VDX0NOVAkJCTIxMgkvKiBSTywgNCBieXRlcyAqLworI2RlZmluZSBFWFRfQ1NEX1NfQV9USU1FT1VUCQkyMTcJLyogUk8gKi8KKyNkZWZpbmUgRVhUX0NTRF9FUkFTRV9USU1FT1VUX01VTFQJMjIzCS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfSENfRVJBU0VfR1JQX1NJWkUJMjI0CS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfU0VDX1RSSU1fTVVMVAkJMjI5CS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfU0VDX0VSQVNFX01VTFQJCTIzMAkvKiBSTyAqLworI2RlZmluZSBFWFRfQ1NEX1NFQ19GRUFUVVJFX1NVUFBPUlQJMjMxCS8qIFJPICovCisjZGVmaW5lIEVYVF9DU0RfVFJJTV9NVUxUCQkyMzIJLyogUk8gKi8KIAogLyoKICAqIEVYVF9DU0QgZmllbGQgZGVmaW5pdGlvbnMKQEAgLTI3NCw2ICsyODMsMTAgQEAKICNkZWZpbmUgRVhUX0NTRF9CVVNfV0lEVEhfNAkxCS8qIENhcmQgaXMgaW4gNCBiaXQgbW9kZSAqLwogI2RlZmluZSBFWFRfQ1NEX0JVU19XSURUSF84CTIJLyogQ2FyZCBpcyBpbiA4IGJpdCBtb2RlICovCiAKKyNkZWZpbmUgRVhUX0NTRF9TRUNfRVJfRU4JQklUKDApCisjZGVmaW5lIEVYVF9DU0RfU0VDX0JEX0JMS19FTglCSVQoMikKKyNkZWZpbmUgRVhUX0NTRF9TRUNfR0JfQ0xfRU4JQklUKDQpCisKIC8qCiAgKiBNTUNfU1dJVENIIGFjY2VzcyBtb2RlcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZC5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2QuaAppbmRleCBmMzEwMDYyLi4zZmQ4NWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkLmgKQEAgLTIxLDggKzIxLDEzIEBACiAgIC8qIGNsYXNzIDEwICovCiAjZGVmaW5lIFNEX1NXSVRDSCAgICAgICAgICAgICAgICAgNiAgIC8qIGFkdGMgWzMxOjBdIFNlZSBiZWxvdyAgIFIxICAqLwogCisgIC8qIGNsYXNzIDUgKi8KKyNkZWZpbmUgU0RfRVJBU0VfV1JfQkxLX1NUQVJUICAgIDMyICAgLyogYWMgICBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCisjZGVmaW5lIFNEX0VSQVNFX1dSX0JMS19FTkQgICAgICAzMyAgIC8qIGFjICAgWzMxOjBdIGRhdGEgYWRkciAgIFIxICAqLworCiAgIC8qIEFwcGxpY2F0aW9uIGNvbW1hbmRzICovCiAjZGVmaW5lIFNEX0FQUF9TRVRfQlVTX1dJRFRIICAgICAgNiAgIC8qIGFjICAgWzE6MF0gYnVzIHdpZHRoICAgIFIxICAqLworI2RlZmluZSBTRF9BUFBfU0RfU1RBVFVTICAgICAgICAgMTMgICAvKiBhZHRjICAgICAgICAgICAgICAgICAgICBSMSAgKi8KICNkZWZpbmUgU0RfQVBQX1NFTkRfTlVNX1dSX0JMS1MgIDIyICAgLyogYWR0YyAgICAgICAgICAgICAgICAgICAgUjEgICovCiAjZGVmaW5lIFNEX0FQUF9PUF9DT05EICAgICAgICAgICA0MSAgIC8qIGJjciAgWzMxOjBdIE9DUiAgICAgICAgIFIzICAqLwogI2RlZmluZSBTRF9BUFBfU0VORF9TQ1IgICAgICAgICAgNTEgICAvKiBhZHRjICAgICAgICAgICAgICAgICAgICBSMSAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKaW5kZXggZWUyNGVmOC4uYzA0ZWNmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWRlYnVnLmgKQEAgLTQsNyArNCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiAjZGVmaW5lIFZNX0JVR19PTihjb25kKSBCVUdfT04oY29uZCkKICNlbHNlCi0jZGVmaW5lIFZNX0JVR19PTihjb25kKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIFZNX0JVR19PTihjb25kKSBkbyB7ICh2b2lkKShjb25kKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZJUlRVQUwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGI0ZDEwOWUuLjZlNmU2MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMzQ4LDIxICszNDgsNiBAQAogCWF0b21pY19sb25nX3QJCXZtX3N0YXRbTlJfVk1fWk9ORV9TVEFUX0lURU1TXTsKIAogCS8qCi0JICogcHJldl9wcmlvcml0eSBob2xkcyB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgZm9yIHRoaXMgem9uZS4gIEl0IGlzCi0JICogZGVmaW5lZCBhcyB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgYXQgd2hpY2ggd2UgYWNoaWV2ZWQgb3VyIHJlY2xhaW0KLQkgKiB0YXJnZXQgYXQgdGhlIHByZXZpb3VzIHRyeV90b19mcmVlX3BhZ2VzKCkgb3IgYmFsYW5jZV9wZ2RhdCgpCi0JICogaW52b2NhdGlvbi4KLQkgKgotCSAqIFdlIHVzZSBwcmV2X3ByaW9yaXR5IGFzIGEgbWVhc3VyZSBvZiBob3cgbXVjaCBzdHJlc3MgcGFnZSByZWNsYWltIGlzCi0JICogdW5kZXIgLSBpdCBkcml2ZXMgdGhlIHN3YXBwaW5lc3MgZGVjaXNpb246IHdoZXRoZXIgdG8gdW5tYXAgbWFwcGVkCi0JICogcGFnZXMuCi0JICoKLQkgKiBBY2Nlc3MgdG8gYm90aCB0aGlzIGZpZWxkIGlzIHF1aXRlIHJhY3kgZXZlbiBvbiB1bmlwcm9jZXNzb3IuICBCdXQKLQkgKiBpdCBpcyBleHBlY3RlZCB0byBhdmVyYWdlIG91dCBPSy4KLQkgKi8KLQlpbnQgcHJldl9wcmlvcml0eTsKLQotCS8qCiAJICogVGhlIHRhcmdldCByYXRpbyBvZiBBQ1RJVkVfQU5PTiB0byBJTkFDVElWRV9BTk9OIHBhZ2VzIG9uCiAJICogdGhpcyB6b25lJ3MgTFJVLiAgTWFpbnRhaW5lZCBieSB0aGUgcGFnZW91dCBjb2RlLgogCSAqLwpAQCAtNjUxLDggKzYzNiw2IEBACiAjaW5jbHVkZSA8bGludXgvbWVtb3J5X2hvdHBsdWcuaD4KIAogZXh0ZXJuIHN0cnVjdCBtdXRleCB6b25lbGlzdHNfbXV0ZXg7Ci12b2lkIGdldF96b25lX2NvdW50cyh1bnNpZ25lZCBsb25nICphY3RpdmUsIHVuc2lnbmVkIGxvbmcgKmluYWN0aXZlLAotCQkJdW5zaWduZWQgbG9uZyAqZnJlZSk7CiB2b2lkIGJ1aWxkX2FsbF96b25lbGlzdHModm9pZCAqZGF0YSk7CiB2b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcik7CiBpbnQgem9uZV93YXRlcm1hcmtfb2soc3RydWN0IHpvbmUgKnosIGludCBvcmRlciwgdW5zaWduZWQgbG9uZyBtYXJrLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCmluZGV4IDRiZDA1NDcuLjVlN2E1OTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTI3LDcgKzI3LDYgQEAKICNkZWZpbmUgTU5UX05PRElSQVRJTUUJMHgxMAogI2RlZmluZSBNTlRfUkVMQVRJTUUJMHgyMAogI2RlZmluZSBNTlRfUkVBRE9OTFkJMHg0MAkvKiBkb2VzIHRoZSB1c2VyIHdhbnQgdGhpcyB0byBiZSByL28/ICovCi0jZGVmaW5lIE1OVF9TVFJJQ1RBVElNRSAweDgwCiAKICNkZWZpbmUgTU5UX1NIUklOS0FCTEUJMHgxMDAKICNkZWZpbmUgTU5UX1dSSVRFX0hPTEQJMHgyMDAKQEAgLTU2LDcgKzU1LDExIEBACiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwkvKiBsaXN0IG9mIGNoaWxkcmVuLCBhbmNob3JlZCBoZXJlICovCiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfY2hpbGQ7CS8qIGFuZCBnb2luZyB0aHJvdWdoIHRoZWlyIG1udF9jaGlsZCAqLwogCWludCBtbnRfZmxhZ3M7Ci0JLyogNCBieXRlcyBob2xlIG9uIDY0Yml0cyBhcmNoZXMgKi8KKwkvKiA0IGJ5dGVzIGhvbGUgb24gNjRiaXRzIGFyY2hlcyB3aXRob3V0IGZzbm90aWZ5ICovCisjaWZkZWYgQ09ORklHX0ZTTk9USUZZCisJX191MzIgbW50X2Zzbm90aWZ5X21hc2s7CisJc3RydWN0IGhsaXN0X2hlYWQgbW50X2Zzbm90aWZ5X21hcmtzOworI2VuZGlmCiAJY29uc3QgY2hhciAqbW50X2Rldm5hbWU7CS8qIE5hbWUgb2YgZGV2aWNlIGUuZy4gL2Rldi9kc2svaGRhMSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBtbnRfZXhwaXJlOwkvKiBsaW5rIGluIGZzLXNwZWNpZmljIGV4cGlyeSBsaXN0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21zaS5oIGIvaW5jbHVkZS9saW51eC9tc2kuaAppbmRleCA2OTkxYWI1Li45MWIwNWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21zaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXNpLmgKQEAgLTE0LDggKzE0LDEwIEBACiBleHRlcm4gdm9pZCBtYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSk7CiBleHRlcm4gdm9pZCB1bm1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIHJlYWRfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZyk7CitleHRlcm4gdm9pZCBnZXRfY2FjaGVkX21zaV9tc2dfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIHZvaWQgd3JpdGVfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiBleHRlcm4gdm9pZCByZWFkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CitleHRlcm4gdm9pZCBnZXRfY2FjaGVkX21zaV9tc2codW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZyk7CiBleHRlcm4gdm9pZCB3cml0ZV9tc2lfbXNnKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogCiBzdHJ1Y3QgbXNpX2Rlc2MgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvYmJtLmggYi9pbmNsdWRlL2xpbnV4L210ZC9iYm0uaAppbmRleCA5YzM3NTdjLi43ZmEyMGJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9iYm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9iYm0uaApAQCAtNCwxMiArNCwyNiBAQAogICogIE5BTkQgZmFtaWx5IEJhZCBCbG9jayBNYW5hZ2VtZW50IChCQk0pIGhlYWRlciBmaWxlCiAgKiAgICAtIEJhZCBCbG9jayBUYWJsZSAoQkJUKSBpbXBsZW1lbnRhdGlvbgogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgU2Ftc3VuZyBFbGVjdHJvbmljcworICogIENvcHlyaWdodCDCqSAyMDA1IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqICBLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNQorICogIENvcHlyaWdodCDCqSAyMDAwLTIwMDUKICAqICBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXh0cm9uaXguZGU+CiAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KICNpZm5kZWYgX19MSU5VWF9NVERfQkJNX0gKICNkZWZpbmUgX19MSU5VWF9NVERfQkJNX0gKQEAgLTgyLDYgKzk2LDEyIEBACiAjZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UCTB4MDAwMDIwMDAKIC8qIFNlYXJjaCBnb29kIC8gYmFkIHBhdHRlcm4gb24gdGhlIGZpcnN0IGFuZCB0aGUgc2Vjb25kIHBhZ2UgKi8KICNkZWZpbmUgTkFORF9CQlRfU0NBTjJORFBBR0UJMHgwMDAwNDAwMAorLyogU2VhcmNoIGdvb2QgLyBiYWQgcGF0dGVybiBvbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBlcmFzZWJsb2NrICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5MQVNUUEFHRQkweDAwMDA4MDAwCisvKiBDaGlwIHN0b3JlcyBiYWQgYmxvY2sgbWFya2VyIG9uIEJPVEggMXN0IGFuZCA2dGggYnl0ZXMgb2YgT09CICovCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5CWVRFMUFORDYgMHgwMDEwMDAwMAorLyogVGhlIG5hbmRfYmJ0X2Rlc2NyIHdhcyBjcmVhdGVkIGR5bmFtaWNhbHkgYW5kIG11c3QgYmUgZnJlZWQgKi8KKyNkZWZpbmUgTkFORF9CQlRfRFlOQU1JQ1NUUlVDVCAweDAwMjAwMDAwCiAKIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgdG8gc2NhbiBmb3IgYSBiYnQgKi8KICNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MJNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2Jsa3RyYW5zLmgKaW5kZXggYjQ4MWNjZC4uMjY1MjllYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvYmxrdHJhbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9ibGt0cmFucy5oCkBAIC0xLDcgKzEsMTkgQEAKIC8qCi0gKiAoQykgMjAwMyBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiBDb3B5cmlnaHQgwqkgMjAwMy0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KICAqCi0gKiBJbnRlcmZhY2UgdG8gTGludXggYmxvY2sgbGF5ZXIgZm9yIE1URCAndHJhbnNsYXRpb24gbGF5ZXJzJy4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKaW5kZXggNTc0ZDllZS4uZDIxMThiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmgKQEAgLTEsNiArMSwyMCBAQAotCi0vKiBDb21tb24gRmxhc2ggSW50ZXJmYWNlIHN0cnVjdHVyZXMKLSAqIFNlZSBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vZGVzaWduL2ZsYXNoL3RlY2hub3RlL2luZGV4Lmh0bQorLyoKKyAqIENvcHlyaWdodCDCqSAyMDAwLTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKICAqLwogCiAjaWZuZGVmIF9fTVREX0NGSV9IX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2NmaV9lbmRpYW4uaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaV9lbmRpYW4uaAppbmRleCBkODAyZjc3Li41MWNjM2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmlfZW5kaWFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCkBAIC0xLDMgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwMS0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaWZuZGVmIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jb21wYXRtYWMuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NvbXBhdG1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDEzMDBkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NvbXBhdG1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotCi0jaWZuZGVmIF9fTElOVVhfTVREX0NPTVBBVE1BQ19IX18KLSNkZWZpbmUgX19MSU5VWF9NVERfQ09NUEFUTUFDX0hfXwotCi0vKiBOb3RoaW5nIHRvIHNlZSBoZXJlLiBXZSB3cml0ZSAyLjUtY29tcGF0aWJsZSBjb2RlIGFuZCB0aGlzCi0gICBmaWxlIG1ha2VzIGl0IGFsbCBPSyBpbiBvbGRlciBrZXJuZWxzLCBidXQgaXQncyBlbXB0eSBpbiBfY3VycmVudF8KLSAgIGtlcm5lbHMuIEluY2x1ZGUgZ3VhcmQganVzdCB0byBtYWtlIEdDQyBpZ25vcmUgaXQgaW4gZnV0dXJlIGluY2x1c2lvbnMKLSAgIGFueXdheS4uLiAqLwotCi0jZW5kaWYgLyogX19MSU5VWF9NVERfQ09NUEFUTUFDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY29uY2F0LmggYi9pbmNsdWRlL2xpbnV4L210ZC9jb25jYXQuaAppbmRleCBlODBjNjc0Li5jY2RiZTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jb25jYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jb25jYXQuaApAQCAtMSw5ICsxLDIyIEBACiAvKgogICogTVREIGRldmljZSBjb25jYXRlbmF0aW9uIGxheWVyIGRlZmluaXRpb25zCiAgKgotICogKEMpIDIwMDIgUm9iZXJ0IEthaXNlciA8cmthaXNlckBzeXNnby5kZT4KKyAqIENvcHlyaWdodCDCqSAyMDAyICAgICAgUm9iZXJ0IEthaXNlciA8cmthaXNlckBzeXNnby5kZT4KICAqCi0gKiBUaGlzIGNvZGUgaXMgR1BMCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKICAqLwogCiAjaWZuZGVmIE1URF9DT05DQVRfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZG9jMjAwMC5oIGIvaW5jbHVkZS9saW51eC9tdGQvZG9jMjAwMC5oCmluZGV4IDBhNmQ1MTYuLjBmNmZlYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2RvYzIwMDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9kb2MyMDAwLmgKQEAgLTEsMTIgKzEsMjUgQEAKIC8qCiAgKiBMaW51eCBkcml2ZXIgZm9yIERpc2stT24tQ2hpcCBkZXZpY2VzCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE1hY2hpbmUgVmlzaW9uIEhvbGRpbmdzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgU25hcEdlYXIgSW5jCisgKiBDb3B5cmlnaHQgwqkgMTk5OSBNYWNoaW5lIFZpc2lvbiBIb2xkaW5ncywgSW5jLgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKiBDb3B5cmlnaHQgwqkgMjAwMi0yMDAzIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CisgKiBDb3B5cmlnaHQgwqkgMjAwMi0yMDAzIFNuYXBHZWFyIEluYwogICoKLSAqIFJlbGVhc2VkIHVuZGVyIEdQTAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2lmbmRlZiBfX01URF9ET0MyMDAwX0hfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvZmxhc2hjaGlwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAppbmRleCBmNDNlOWI0Li5iNjNmYTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9mbGFzaGNoaXAuaApAQCAtMSwxMCArMSwyMSBAQAotCiAvKgotICogc3RydWN0IGZsY2hpcCBkZWZpbml0aW9uCisgKiBDb3B5cmlnaHQgwqkgMjAwMCAgICAgIFJlZCBIYXQgVUsgTGltaXRlZAorICogQ29weXJpZ2h0IMKpIDIwMDAtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CiAgKgotICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIGFuZCBzdGF0ZSBvZiBhIGdpdmVuIGZsYXNoIGRldmljZQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAoQykgMjAwMCBSZWQgSGF0LiBHUExkLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpZm5kZWYgX19NVERfRkxBU0hDSElQX0hfXwpAQCAtOTIsNyArMTAzLDcgQEAKIC8qIFRoaXMgaXMgdXNlZCB0byBoYW5kbGUgY29udGVudGlvbiBvbiB3cml0ZS9lcmFzZSBvcGVyYXRpb25zCiAgICBiZXR3ZWVuIHBhcnRpdGlvbnMgb2YgdGhlIHNhbWUgcGh5c2ljYWwgY2hpcC4gKi8KIHN0cnVjdCBmbGNoaXBfc2hhcmVkIHsKLQlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGZsY2hpcCAqd3JpdGluZzsKIAlzdHJ1Y3QgZmxjaGlwICplcmFzaW5nOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2dlbl9wcm9iZS5oIGIvaW5jbHVkZS9saW51eC9tdGQvZ2VuX3Byb2JlLmgKaW5kZXggZGYzNjJkZC4uMmM0NTYwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvZ2VuX3Byb2JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvZ2VuX3Byb2JlLmgKQEAgLTEsNiArMSwyMSBAQAogLyoKLSAqIChDKSAyMDAxLCAyMDAxIFJlZCBIYXQsIEluYy4KLSAqIEdQTCdkCisgKiBDb3B5cmlnaHQgwqkgMjAwMSAgICAgIFJlZCBIYXQgVUsgTGltaXRlZAorICogQ29weXJpZ2h0IMKpIDIwMDEtMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2lmbmRlZiBfX0xJTlVYX01URF9HRU5fUFJPQkVfSF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCmluZGV4IGRlODllY2EuLmE5ZTZiYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL21hcC5oCkBAIC0xLDMgKzEsMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwMC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KIAogLyogT3ZlcmhhdWxlZCByb3V0aW5lcyBmb3IgZGVhbGluZyB3aXRoIGRpZmZlcmVudCBtbWFwIHJlZ2lvbnMgb2YgZmxhc2ggKi8KIApAQCAtOSw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAppbmRleCA1MzI2NDM1Li44NDg1ZTQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaApAQCAtMSw3ICsxLDIwIEBACiAvKgotICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4KKyAqIENvcHlyaWdodCDCqSAxOTk5LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4KICAqCi0gKiBSZWxlYXNlZCB1bmRlciBHUEwKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpZm5kZWYgX19NVERfTVREX0hfXwpAQCAtMTMsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgpAQCAtMjE2LDYgKzIyOCw3IEBACiAJLyogQ2hpcC1zdXBwb3J0ZWQgZGV2aWNlIGxvY2tpbmcgKi8KIAlpbnQgKCpsb2NrKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbik7CiAJaW50ICgqdW5sb2NrKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbik7CisJaW50ICgqaXNfbG9ja2VkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbik7CiAKIAkvKiBQb3dlciBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqLwogCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggYTgxYjE4NS4uMTAyZTEyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Ci0gKiAgICAgICAgICAgICAgICAgICAgIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPgotICoJCSAgICAgICBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICBDb3B5cmlnaHQgwqkgMjAwMC0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+CisgKgkJICAgICAgICAgIFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTgxLDggKzE4MSw2IEBACiAjZGVmaW5lIE5BTkRfTk9fUkVBRFJEWQkJMHgwMDAwMDEwMAogLyogQ2hpcCBkb2VzIG5vdCBhbGxvdyBzdWJwYWdlIHdyaXRlcyAqLwogI2RlZmluZSBOQU5EX05PX1NVQlBBR0VfV1JJVEUJMHgwMDAwMDIwMAotLyogQ2hpcCBzdG9yZXMgYmFkIGJsb2NrIG1hcmtlciBvbiB0aGUgbGFzdCBwYWdlIG9mIHRoZSBlcmFzZWJsb2NrICovCi0jZGVmaW5lIE5BTkRfQkJfTEFTVF9QQUdFCTB4MDAwMDA0MDAKIAogLyogRGV2aWNlIGlzIG9uZSBvZiAnbmV3JyB4RCBjYXJkcyB0aGF0IGV4cG9zZSBmYWtlIG5hbmQgY29tbWFuZCBzZXQgKi8KICNkZWZpbmUgTkFORF9CUk9LRU5fWEQJCTB4MDAwMDA0MDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kX2VjYy5oCmluZGV4IDQxYmMwMTMuLjRkODQwNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmRfZWNjLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZF9lY2MuaApAQCAtMSw3ICsxLDkgQEAKIC8qCiAgKiAgZHJpdmVycy9tdGQvbmFuZF9lY2MuaAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMTAgU3RldmVuIEouIEhpbGwgPHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20+CisgKgkJCSAgICBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgkJCSAgICBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaCBiL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaAppbmRleCBkY2FmNjExLi5iMDU5NjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCkBAIC0xLDUgKzEsMjAgQEAKIC8qCi0gKiAoQykgMTk5OS0yMDAzIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqIENvcHlyaWdodCDCqSAxOTk5LTIwMTAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgogICovCiAKICNpZm5kZWYgX19NVERfTkZUTF9IX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAppbmRleCBjMjZmZjg2Li4wYzg4MTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCkBAIC02OCw2ICs2OCw3IEBACiAgKiBAd3JpdGVfd29yZDoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHdyaXRlCiAgKgkJCXJlZ2lzdGVyIG9mIE9uZU5BTkQKICAqIEBtbWNvbnRyb2w6CQlzeW5jIGJ1cnN0IHJlYWQgZnVuY3Rpb24KKyAqIEBjaGlwX3Byb2JlOgkJW1JFUExBQ0VBQkxFXSBoYXJkd2FyZSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgY2hpcCBwcm9iZQogICogQGJsb2NrX21hcmtiYWQ6CWZ1bmN0aW9uIHRvIG1hcmsgYSBibG9jayBhcyBiYWQKICAqIEBzY2FuX2JidDoJCVtSRVBMQUNFQUxCRV0gaGFyZHdhcmUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHNjYW5uaW5nCiAgKgkJCUJhZCBibG9jayBUYWJsZQpAQCAtMTE0LDYgKzExNSw3IEBACiAJdW5zaWduZWQgc2hvcnQgKCpyZWFkX3dvcmQpKHZvaWQgX19pb21lbSAqYWRkcik7CiAJdm9pZCAoKndyaXRlX3dvcmQpKHVuc2lnbmVkIHNob3J0IHZhbHVlLCB2b2lkIF9faW9tZW0gKmFkZHIpOwogCXZvaWQgKCptbWNvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc3luY19yZWFkKTsKKwlpbnQgKCpjaGlwX3Byb2JlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAJaW50ICgqYmxvY2tfbWFya2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwogCWludCAoKnNjYW5fYmJ0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaAppbmRleCA3NmY3Y2FiLi5iY2ZkOWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCkBAIC0yNSw2ICsyNSw3IEBACiAJdm9pZAkJCSgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCk7CiAJdW5zaWduZWQgaW50CQlucl9wYXJ0czsKIAl1bnNpZ25lZCBpbnQJCXBmb3dfYmFzZTsKKwljaGFyICAgICAgICAgICAgICAgICAgICAqcHJvYmVfdHlwZTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IDliODI5OWEuLjA3ZTQwYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC01MjMsNiArNTIzLDcgQEAKIAlORlNQUk9DNF9DTE5UX0dFVEFDTCwKIAlORlNQUk9DNF9DTE5UX1NFVEFDTCwKIAlORlNQUk9DNF9DTE5UX0ZTX0xPQ0FUSU9OUywKKwlORlNQUk9DNF9DTE5UX1JFTEVBU0VfTE9DS09XTkVSLAogCiAJLyogbmZzNDEgKi8KIAlORlNQUk9DNF9DTE5UX0VYQ0hBTkdFX0lELApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggYmFkNGQxMi4uNTA4ZjhjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC03MiwxMyArNzIsMjAgQEAKIAlpbnQJCQltYXNrOwogfTsKIAorc3RydWN0IG5mc19sb2NrX2NvbnRleHQgeworCWF0b21pY190IGNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqb3Blbl9jb250ZXh0OworCWZsX293bmVyX3QgbG9ja293bmVyOworCXBpZF90IHBpZDsKK307CisKIHN0cnVjdCBuZnM0X3N0YXRlOwogc3RydWN0IG5mc19vcGVuX2NvbnRleHQgewotCWF0b21pY190IGNvdW50OworCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0IGxvY2tfY29udGV4dDsKIAlzdHJ1Y3QgcGF0aCBwYXRoOwogCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGU7Ci0JZmxfb3duZXJfdCBsb2Nrb3duZXI7CiAJZm1vZGVfdCBtb2RlOwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTM1Myw2ICszNjAsOCBAQAogZXh0ZXJuIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpnZXRfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KTsKIGV4dGVybiB2b2lkIHB1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpOwogZXh0ZXJuIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpuZnNfZmluZF9vcGVuX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJwY19jcmVkICpjcmVkLCBmbW9kZV90IG1vZGUpOworZXh0ZXJuIHN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpuZnNfZ2V0X2xvY2tfY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4KTsKK2V4dGVybiB2b2lkIG5mc19wdXRfbG9ja19jb250ZXh0KHN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsX2N0eCk7CiBleHRlcm4gdTY0IG5mc19jb21wYXRfdXNlcl9pbm82NCh1NjQgZmlsZWlkKTsKIGV4dGVybiB2b2lkIG5mc19mYXR0cl9pbml0KHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggZDZlMTBhNC4uYzgyZWU3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC0xNSw2ICsxNSw3IEBACiBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzOwogc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzOwogc3RydWN0IG5mc19zZXJ2ZXI7CitzdHJ1Y3QgbmZzNF9taW5vcl92ZXJzaW9uX29wczsKIAogLyoKICAqIFRoZSBuZnNfY2xpZW50IGlkZW50aWZpZXMgb3VyIGNsaWVudCBzdGF0ZSB0byB0aGUgc2VydmVyLgpAQCAtNzAsMTEgKzcxLDcgQEAKIAkgKi8KIAljaGFyCQkJY2xfaXBhZGRyWzQ4XTsKIAl1bnNpZ25lZCBjaGFyCQljbF9pZF91bmlxdWlmaWVyOwotCWludAkJICAgICAoKiBjbF9jYWxsX3N5bmMpKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCi0JCQkJCSAgICAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAotCQkJCQkgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLAotCQkJCQkgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKLQkJCQkJICAgICAgaW50IGNhY2hlX3JlcGx5KTsKKwljb25zdCBzdHJ1Y3QgbmZzNF9taW5vcl92ZXJzaW9uX29wcyAqY2xfbXZvcHM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLwogCiAjaWZkZWYgQ09ORklHX05GU19WNF8xCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oIGIvaW5jbHVkZS9saW51eC9uZnNfbW91bnQuaAppbmRleCA0NDk5MDE2Li41ZDU5YWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX21vdW50LmgKQEAgLTY5LDUgKzY5LDYgQEAKICNkZWZpbmUgTkZTX01PVU5UX0xPT0tVUF9DQUNIRV9OT05FRwkweDEwMDAwCiAjZGVmaW5lIE5GU19NT1VOVF9MT09LVVBfQ0FDSEVfTk9ORQkweDIwMDAwCiAjZGVmaW5lIE5GU19NT1VOVF9OT1JFU1ZQT1JUCQkweDQwMDAwCisjZGVmaW5lIE5GU19NT1VOVF9MRUdBQ1lfSU5URVJGQUNFCTB4ODAwMDAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmggYi9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgKaW5kZXggM2M2MDY4NS4uZjhiNjBlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3BhZ2UuaApAQCAtMzksNiArMzksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJd2JfbGlzdDsJLyogRGVmaW5lcyBzdGF0ZSBvZiBwYWdlOiAqLwogCXN0cnVjdCBwYWdlCQkqd2JfcGFnZTsJLyogcGFnZSB0byByZWFkIGluL3dyaXRlIG91dCAqLwogCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0CSp3Yl9jb250ZXh0OwkvKiBGaWxlIHN0YXRlIGNvbnRleHQgaW5mbyAqLworCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0CSp3Yl9sb2NrX2NvbnRleHQ7CS8qIGxvY2sgY29udGV4dCBpbmZvICovCiAJYXRvbWljX3QJCXdiX2NvbXBsZXRlOwkvKiBpL29zIHdlJ3JlIHdhaXRpbmcgZm9yICovCiAJcGdvZmZfdAkJCXdiX2luZGV4OwkvKiBPZmZzZXQgPj4gUEFHRV9DQUNIRV9TSElGVCAqLwogCXVuc2lnbmVkIGludAkJd2Jfb2Zmc2V0LAkvKiBPZmZzZXQgJiB+UEFHRV9DQUNIRV9NQVNLICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDUxOTE0ZDcuLmZjNDYxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC0xOTYsOCArMTk2LDEwIEBACiAJX191NjQgICAgICAgICAgICAgICAgICAgY2xpZW50aWQ7CiAJX191NjQgICAgICAgICAgICAgICAgICAgaWQ7CiAJdW5pb24gewotCQlzdHJ1Y3QgaWF0dHIgKiAgYXR0cnM7ICAgIC8qIFVOQ0hFQ0tFRCwgR1VBUkRFRCAqLwotCQluZnM0X3ZlcmlmaWVyICAgdmVyaWZpZXI7IC8qIEVYQ0xVU0lWRSAqLworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGlhdHRyICogIGF0dHJzOyAgICAvKiBVTkNIRUNLRUQsIEdVQVJERUQgKi8KKwkJCW5mczRfdmVyaWZpZXIgICB2ZXJpZmllcjsgLyogRVhDTFVTSVZFICovCisJCX07CiAJCW5mczRfc3RhdGVpZAlkZWxlZ2F0aW9uOwkJLyogQ0xBSU1fREVMRUdBVEVfQ1VSICovCiAJCWZtb2RlX3QJCWRlbGVnYXRpb25fdHlwZTsJLyogQ0xBSU1fUFJFVklPVVMgKi8KIAl9IHU7CkBAIC0zMTMsNiArMzE1LDEwIEBACiAJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzCXNlcV9yZXM7CiB9OwogCitzdHJ1Y3QgbmZzX3JlbGVhc2VfbG9ja293bmVyX2FyZ3MgeworCXN0cnVjdCBuZnNfbG93bmVyCWxvY2tfb3duZXI7Cit9OworCiBzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmFyZ3MgewogCWNvbnN0IHN0cnVjdCBuZnNfZmggKmZoYW5kbGU7CiAJY29uc3QgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkOwpAQCAtMzMyLDYgKzMzOCw3IEBACiBzdHJ1Y3QgbmZzX3JlYWRhcmdzIHsKIAlzdHJ1Y3QgbmZzX2ZoICoJCWZoOwogCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsb2NrX2NvbnRleHQ7CiAJX191NjQJCQlvZmZzZXQ7CiAJX191MzIJCQljb3VudDsKIAl1bnNpZ25lZCBpbnQJCXBnYmFzZTsKQEAgLTM1Miw2ICszNTksNyBAQAogc3RydWN0IG5mc193cml0ZWFyZ3MgewogCXN0cnVjdCBuZnNfZmggKgkJZmg7CiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmNvbnRleHQ7CisJc3RydWN0IG5mc19sb2NrX2NvbnRleHQgKmxvY2tfY29udGV4dDsKIAlfX3U2NAkJCW9mZnNldDsKIAlfX3UzMgkJCWNvdW50OwogCWVudW0gbmZzM19zdGFibGVfaG93CXN0YWJsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCmluZGV4IDhjMmM2MTEuLmY1NDg3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaApAQCAtMTYwLDcgKzE2MCw3IEBACiAgKiBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgLSBzdHJ1Y3R1cmUgb2Ygc3VwZXIgYmxvY2sgb24gZGlzawogICovCiBzdHJ1Y3QgbmlsZnNfc3VwZXJfYmxvY2sgewotCV9fbGUzMglzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisvKjAwKi8JX19sZTMyCXNfcmV2X2xldmVsOwkJLyogUmV2aXNpb24gbGV2ZWwgKi8KIAlfX2xlMTYJc19taW5vcl9yZXZfbGV2ZWw7CS8qIG1pbm9yIHJldmlzaW9uIGxldmVsICovCiAJX19sZTE2CXNfbWFnaWM7CQkvKiBNYWdpYyBzaWduYXR1cmUgKi8KIApAQCAtMTY5LDUwICsxNjksNTMgQEAKIAkJCQkJICAgaXMgZXhjbHVkZWQuICovCiAJX19sZTE2ICBzX2ZsYWdzOwkJLyogZmxhZ3MgKi8KIAlfX2xlMzIgIHNfY3JjX3NlZWQ7CQkvKiBTZWVkIHZhbHVlIG9mIENSQyBjYWxjdWxhdGlvbiAqLwotCV9fbGUzMglzX3N1bTsJCQkvKiBDaGVjayBzdW0gb2Ygc3VwZXIgYmxvY2sgKi8KKy8qMTAqLwlfX2xlMzIJc19zdW07CQkJLyogQ2hlY2sgc3VtIG9mIHN1cGVyIGJsb2NrICovCiAKIAlfX2xlMzIJc19sb2dfYmxvY2tfc2l6ZTsJLyogQmxvY2sgc2l6ZSByZXByZXNlbnRlZCBhcyBmb2xsb3dzCiAJCQkJCSAgIGJsb2Nrc2l6ZSA9CiAJCQkJCSAgICAgICAxIDw8IChzX2xvZ19ibG9ja19zaXplICsgMTApICovCiAJX19sZTY0ICBzX25zZWdtZW50czsJCS8qIE51bWJlciBvZiBzZWdtZW50cyBpbiBmaWxlc3lzdGVtICovCi0JX19sZTY0ICBzX2Rldl9zaXplOwkJLyogYmxvY2sgZGV2aWNlIHNpemUgaW4gYnl0ZXMgKi8KKy8qMjAqLwlfX2xlNjQgIHNfZGV2X3NpemU7CQkvKiBibG9jayBkZXZpY2Ugc2l6ZSBpbiBieXRlcyAqLwogCV9fbGU2NAlzX2ZpcnN0X2RhdGFfYmxvY2s7CS8qIDFzdCBzZWcgZGlzayBibG9jayBudW1iZXIgKi8KLQlfX2xlMzIgIHNfYmxvY2tzX3Blcl9zZWdtZW50OyAgIC8qIG51bWJlciBvZiBibG9ja3MgcGVyIGZ1bGwgc2VnbWVudCAqLworLyozMCovCV9fbGUzMiAgc19ibG9ja3NfcGVyX3NlZ21lbnQ7ICAgLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgZnVsbCBzZWdtZW50ICovCiAJX19sZTMyCXNfcl9zZWdtZW50c19wZXJjZW50YWdlOyAvKiBSZXNlcnZlZCBzZWdtZW50cyBwZXJjZW50YWdlICovCiAKIAlfX2xlNjQgIHNfbGFzdF9jbm87CQkvKiBMYXN0IGNoZWNrcG9pbnQgbnVtYmVyICovCi0JX19sZTY0ICBzX2xhc3RfcHNlZzsJCS8qIGRpc2sgYmxvY2sgYWRkciBwc2VnIHdyaXR0ZW4gbGFzdCAqLworLyo0MCovCV9fbGU2NCAgc19sYXN0X3BzZWc7CQkvKiBkaXNrIGJsb2NrIGFkZHIgcHNlZyB3cml0dGVuIGxhc3QgKi8KIAlfX2xlNjQgIHNfbGFzdF9zZXE7ICAgICAgICAgICAgIC8qIHNlcS4gbnVtYmVyIG9mIHNlZyB3cml0dGVuIGxhc3QgKi8KLQlfX2xlNjQJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KKy8qNTAqLwlfX2xlNjQJc19mcmVlX2Jsb2Nrc19jb3VudDsJLyogRnJlZSBibG9ja3MgY291bnQgKi8KIAogCV9fbGU2NAlzX2N0aW1lOwkJLyogQ3JlYXRpb24gdGltZSAoZXhlY3V0aW9uIHRpbWUgb2YKIAkJCQkJICAgbmV3ZnMpICovCi0JX19sZTY0CXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCisvKjYwKi8JX19sZTY0CXNfbXRpbWU7CQkvKiBNb3VudCB0aW1lICovCiAJX19sZTY0CXNfd3RpbWU7CQkvKiBXcml0ZSB0aW1lICovCi0JX19sZTE2CXNfbW50X2NvdW50OwkJLyogTW91bnQgY291bnQgKi8KKy8qNzAqLwlfX2xlMTYJc19tbnRfY291bnQ7CQkvKiBNb3VudCBjb3VudCAqLwogCV9fbGUxNglzX21heF9tbnRfY291bnQ7CS8qIE1heGltYWwgbW91bnQgY291bnQgKi8KIAlfX2xlMTYJc19zdGF0ZTsJCS8qIEZpbGUgc3lzdGVtIHN0YXRlICovCiAJX19sZTE2CXNfZXJyb3JzOwkJLyogQmVoYXZpb3VyIHdoZW4gZGV0ZWN0aW5nIGVycm9ycyAqLwogCV9fbGU2NAlzX2xhc3RjaGVjazsJCS8qIHRpbWUgb2YgbGFzdCBjaGVjayAqLwogCi0JX19sZTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCisvKjgwKi8JX19sZTMyCXNfY2hlY2tpbnRlcnZhbDsJLyogbWF4LiB0aW1lIGJldHdlZW4gY2hlY2tzICovCiAJX19sZTMyCXNfY3JlYXRvcl9vczsJCS8qIE9TICovCiAJX19sZTE2CXNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KIAlfX2xlMTYJc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLwogCV9fbGUzMglzX2ZpcnN0X2lubzsJCS8qIEZpcnN0IG5vbi1yZXNlcnZlZCBpbm9kZSAqLwogCi0JX19sZTE2ICBzX2lub2RlX3NpemU7CQkvKiBTaXplIG9mIGFuIGlub2RlICovCisvKjkwKi8JX19sZTE2ICBzX2lub2RlX3NpemU7CQkvKiBTaXplIG9mIGFuIGlub2RlICovCiAJX19sZTE2ICBzX2RhdF9lbnRyeV9zaXplOyAgICAgICAvKiBTaXplIG9mIGEgZGF0IGVudHJ5ICovCiAJX19sZTE2ICBzX2NoZWNrcG9pbnRfc2l6ZTsgICAgICAvKiBTaXplIG9mIGEgY2hlY2twb2ludCAqLwogCV9fbGUxNglzX3NlZ21lbnRfdXNhZ2Vfc2l6ZTsJLyogU2l6ZSBvZiBhIHNlZ21lbnQgdXNhZ2UgKi8KIAotCV9fdTgJc191dWlkWzE2XTsJCS8qIDEyOC1iaXQgdXVpZCBmb3Igdm9sdW1lICovCi0JY2hhcglzX3ZvbHVtZV9uYW1lWzgwXTsJLyogdm9sdW1lIG5hbWUgKi8KKy8qOTgqLwlfX3U4CXNfdXVpZFsxNl07CQkvKiAxMjgtYml0IHV1aWQgZm9yIHZvbHVtZSAqLworLypBOCovCWNoYXIJc192b2x1bWVfbmFtZVs4MF07CS8qIHZvbHVtZSBuYW1lICovCiAKLQlfX2xlMzIgIHNfY19pbnRlcnZhbDsgICAgICAgICAgIC8qIENvbW1pdCBpbnRlcnZhbCBvZiBzZWdtZW50ICovCisvKkY4Ki8JX19sZTMyICBzX2NfaW50ZXJ2YWw7ICAgICAgICAgICAvKiBDb21taXQgaW50ZXJ2YWwgb2Ygc2VnbWVudCAqLwogCV9fbGUzMiAgc19jX2Jsb2NrX21heDsgICAgICAgICAgLyogVGhyZXNob2xkIG9mIGRhdGEgYW1vdW50IGZvcgogCQkJCQkgICB0aGUgc2VnbWVudCBjb25zdHJ1Y3Rpb24gKi8KLQlfX3UzMglzX3Jlc2VydmVkWzE5Ml07CS8qIHBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKy8qMTAwKi8JX19sZTY0ICBzX2ZlYXR1cmVfY29tcGF0OwkvKiBDb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX19sZTY0ICBzX2ZlYXR1cmVfY29tcGF0X3JvOwkvKiBSZWFkLW9ubHkgY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworCV9fbGU2NCAgc19mZWF0dXJlX2luY29tcGF0OwkvKiBJbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX3UzMglzX3Jlc2VydmVkWzE4Nl07CS8qIHBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KIH07CiAKIC8qCkBAIC0yMjgsNiArMjMxLDE2IEBACiAjZGVmaW5lIE5JTEZTX01JTk9SX1JFVgkJMAkvKiBtaW5vciByZXZpc2lvbiAqLwogCiAvKgorICogRmVhdHVyZSBzZXQgZGVmaW5pdGlvbnMKKyAqCisgKiBJZiB0aGVyZSBpcyBhIGJpdCBzZXQgaW4gdGhlIGluY29tcGF0aWJsZSBmZWF0dXJlIHNldCB0aGF0IHRoZSBrZXJuZWwKKyAqIGRvZXNuJ3Qga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKyAqLworI2RlZmluZSBOSUxGU19GRUFUVVJFX0NPTVBBVF9TVVBQCTBVTEwKKyNkZWZpbmUgTklMRlNfRkVBVFVSRV9DT01QQVRfUk9fU1VQUAkwVUxMCisjZGVmaW5lIE5JTEZTX0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkwVUxMCisKKy8qCiAgKiBCeXRlcyBjb3VudCBvZiBzdXBlcl9ibG9jayBmb3IgQ1JDLWNhbGN1bGF0aW9uCiAgKi8KICNkZWZpbmUgTklMRlNfU0JfQllURVMgIFwKQEAgLTI3NCw2ICsyODcsMTIgQEAKICNkZWZpbmUgTklMRlNfTkFNRV9MRU4gMjU1CiAKIC8qCisgKiBCbG9jayBzaXplIGxpbWl0YXRpb25zCisgKi8KKyNkZWZpbmUgTklMRlNfTUlOX0JMT0NLX1NJWkUJCTEwMjQKKyNkZWZpbmUgTklMRlNfTUFYX0JMT0NLX1NJWkUJCTY1NTM2CisKKy8qCiAgKiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIGRpcmVjdG9yeSBlbnRyeS4gIFNpbmNlIFYwIHN0cnVjdHVyZXMgYXJlCiAgKiBzdG9yZWQgaW4gaW50ZWwgYnl0ZSBvcmRlciwgYW5kIHRoZSBuYW1lX2xlbiBmaWVsZCBjb3VsZCBuZXZlciBiZQogICogYmlnZ2VyIHRoYW4gMjU1IGNoYXJzLCBpdCdzIHNhZmUgdG8gcmVjbGFpbSB0aGUgZXh0cmEgYnl0ZSBmb3IgdGhlCkBAIC0zMTMsNyArMzMyLDI1IEBACiAjZGVmaW5lIE5JTEZTX0RJUl9ST1VORAkJCShOSUxGU19ESVJfUEFEIC0gMSkKICNkZWZpbmUgTklMRlNfRElSX1JFQ19MRU4obmFtZV9sZW4pCSgoKG5hbWVfbGVuKSArIDEyICsgTklMRlNfRElSX1JPVU5EKSAmIFwKIAkJCQkJfk5JTEZTX0RJUl9ST1VORCkKKyNkZWZpbmUgTklMRlNfTUFYX1JFQ19MRU4JCSgoMTw8MTYpLTEpCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlsZnNfcmVjX2xlbl9mcm9tX2Rpc2soX19sZTE2IGRsZW4pCit7CisJdW5zaWduZWQgbGVuID0gbGUxNl90b19jcHUoZGxlbik7CisKKwlpZiAobGVuID09IE5JTEZTX01BWF9SRUNfTEVOKQorCQlyZXR1cm4gMSA8PCAxNjsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW5saW5lIF9fbGUxNiBuaWxmc19yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuKQoreworCWlmIChsZW4gPT0gKDEgPDwgMTYpKQorCQlyZXR1cm4gY3B1X3RvX2xlMTYoTklMRlNfTUFYX1JFQ19MRU4pOworCWVsc2UgaWYgKGxlbiA+ICgxIDw8IDE2KSkKKwkJQlVHKCk7CisJcmV0dXJuIGNwdV90b19sZTE2KGxlbik7Cit9CiAKIC8qKgogICogc3RydWN0IG5pbGZzX2ZpbmZvIC0gZmlsZSBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggYjc1MmU4MC4uMDZhYWI1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC0yMCwxMCArMjAsMTQgQEAKIGV4dGVybiB2b2lkIGFjcGlfbm1pX2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCBhY3BpX25taV9lbmFibGUodm9pZCk7CiAjZWxzZQorI2lmbmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgogc3RhdGljIGlubGluZSB2b2lkIHRvdWNoX25taV93YXRjaGRvZyh2b2lkKQogewogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KKyNlbHNlCitleHRlcm4gdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCk7CisjZW5kaWYKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX25taV9kaXNhYmxlKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGFjcGlfbm1pX2VuYWJsZSh2b2lkKSB7IH0KICNlbmRpZgpAQCAtNDcsNCArNTEsMTMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgoraW50IGh3X25taV9pc19jcHVfc3R1Y2soc3RydWN0IHB0X3JlZ3MgKik7Cit1NjQgaHdfbm1pX2dldF9zYW1wbGVfcGVyaW9kKHZvaWQpOworZXh0ZXJuIGludCB3YXRjaGRvZ19lbmFibGVkOworc3RydWN0IGN0bF90YWJsZTsKK2V4dGVybiBpbnQgcHJvY19kb3dhdGNoZG9nX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLAorCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb21hcGZiLmggYi9pbmNsdWRlL2xpbnV4L29tYXBmYi5oCmluZGV4IDdlNGNkNjEuLmMwYjAxODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb21hcGZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9vbWFwZmIuaApAQCAtODUsNiArODUsOSBAQAogI2RlZmluZSBPTUFQRkJfTUVNVFlQRV9TUkFNCQkxCiAjZGVmaW5lIE9NQVBGQl9NRU1UWVBFX01BWAkJMQogCisjZGVmaW5lIE9NQVBGQl9NRU1fSURYX0VOQUJMRUQJMHg4MAorI2RlZmluZSBPTUFQRkJfTUVNX0lEWF9NQVNLCTB4N2YKKwogZW51bSBvbWFwZmJfY29sb3JfZm9ybWF0IHsKIAlPTUFQRkJfQ09MT1JfUkdCNTY1ID0gMCwKIAlPTUFQRkJfQ09MT1JfWVVWNDIyLApAQCAtMTM2LDcgKzEzOSw3IEBACiAJX191OCAgZW5hYmxlZDsKIAlfX3U4ICBjaGFubmVsX291dDsKIAlfX3U4ICBtaXJyb3I7Ci0JX191OCAgcmVzZXJ2ZWQxOworCV9fdTggIG1lbV9pZHg7CiAJX191MzIgb3V0X3dpZHRoOwogCV9fdTMyIG91dF9oZWlnaHQ7CiAJX191MzIgcmVzZXJ2ZWQyWzEyXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb29tLmggYi9pbmNsdWRlL2xpbnV4L29vbS5oCmluZGV4IDUzNzY2MjMuLjVlM2FhODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb29tLmgKKysrIGIvaW5jbHVkZS9saW51eC9vb20uaApAQCAtMSwxOSArMSwzNCBAQAogI2lmbmRlZiBfX0lOQ0xVREVfTElOVVhfT09NX0gKICNkZWZpbmUgX19JTkNMVURFX0xJTlVYX09PTV9ICiAKLS8qIC9wcm9jLzxwaWQ+L29vbV9hZGogc2V0IHRvIC0xNyBwcm90ZWN0cyBmcm9tIHRoZSBvb20ta2lsbGVyICovCisvKgorICogL3Byb2MvPHBpZD4vb29tX2FkaiBpcyBkZXByZWNhdGVkLCBzZWUKKyAqIERvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dC4KKyAqCisgKiAvcHJvYy88cGlkPi9vb21fYWRqIHNldCB0byAtMTcgcHJvdGVjdHMgZnJvbSB0aGUgb29tLWtpbGxlcgorICovCiAjZGVmaW5lIE9PTV9ESVNBQkxFICgtMTcpCiAvKiBpbmNsdXNpdmUgKi8KICNkZWZpbmUgT09NX0FESlVTVF9NSU4gKC0xNikKICNkZWZpbmUgT09NX0FESlVTVF9NQVggMTUKIAorLyoKKyAqIC9wcm9jLzxwaWQ+L29vbV9zY29yZV9hZGogc2V0IHRvIE9PTV9TQ09SRV9BREpfTUlOIGRpc2FibGVzIG9vbSBraWxsaW5nIGZvcgorICogcGlkLgorICovCisjZGVmaW5lIE9PTV9TQ09SRV9BREpfTUlOCSgtMTAwMCkKKyNkZWZpbmUgT09NX1NDT1JFX0FESl9NQVgJMTAwMAorCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAKIHN0cnVjdCB6b25lbGlzdDsKIHN0cnVjdCBub3RpZmllcl9ibG9jazsKK3N0cnVjdCBtZW1fY2dyb3VwOworc3RydWN0IHRhc2tfc3RydWN0OwogCiAvKgogICogVHlwZXMgb2YgbGltaXRhdGlvbnMgdG8gdGhlIG5vZGVzIGZyb20gd2hpY2ggYWxsb2NhdGlvbnMgbWF5IG9jY3VyCkBAIC0yMiw5ICszNywxMiBAQAogCUNPTlNUUkFJTlRfTk9ORSwKIAlDT05TVFJBSU5UX0NQVVNFVCwKIAlDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1ksCisJQ09OU1RSQUlOVF9NRU1DRywKIH07CiAKLWV4dGVybiBpbnQgdHJ5X3NldF96b25lX29vbShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfZmxhZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGludCBvb21fYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQljb25zdCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzKTsKK2V4dGVybiBpbnQgdHJ5X3NldF96b25lbGlzdF9vb20oc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIGV4dGVybiB2b2lkIGNsZWFyX3pvbmVsaXN0X29vbShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLApAQCAtNDMsNSArNjEsMTYgQEAKIHsKIAlvb21fa2lsbGVyX2Rpc2FibGVkID0gZmFsc2U7CiB9CisKKy8qIFRoZSBiYWRuZXNzIGZyb20gdGhlIE9PTSBraWxsZXIgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGJhZG5lc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkgICAgICBjb25zdCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgbG9uZyB1cHRpbWUpOworCitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2xvY2tfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworCisvKiBzeXNjdGxzICovCitleHRlcm4gaW50IHN5c2N0bF9vb21fZHVtcF90YXNrczsKK2V4dGVybiBpbnQgc3lzY3RsX29vbV9raWxsX2FsbG9jYXRpbmdfdGFzazsKK2V4dGVybiBpbnQgc3lzY3RsX3BhbmljX29uX29vbTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fKi8KICNlbmRpZiAvKiBfSU5DTFVERV9MSU5VWF9PT01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA1YjU5ZjM1Li42ZmEzMTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtMTI4LDcgKzEyOCw2IEBACiAKIAkvKiBTTFVCICovCiAJUEdfc2x1Yl9mcm96ZW4gPSBQR19hY3RpdmUsCi0JUEdfc2x1Yl9kZWJ1ZyA9IFBHX2Vycm9yLAogfTsKIAogI2lmbmRlZiBfX0dFTkVSQVRJTkdfQk9VTkRTX0gKQEAgLTIxNSw3ICsyMTQsNiBAQAogX19QQUdFRkxBRyhTbG9iRnJlZSwgc2xvYl9mcmVlKQogCiBfX1BBR0VGTEFHKFNsdWJGcm96ZW4sIHNsdWJfZnJvemVuKQotX19QQUdFRkxBRyhTbHViRGVidWcsIHNsdWJfZGVidWcpCiAKIC8qCiAgKiBQcml2YXRlIHBhZ2UgbWFya2luZ3MgdGhhdCBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSB0aGF0IG93bnMgdGhlIHBhZ2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZW1hcC5oIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKaW5kZXggM2M2MmVkNC4uNzhhNzAyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlbWFwLmgKQEAgLTQyMyw4ICs0MjMsMTAgQEAKIAkJY29uc3QgY2hhciBfX3VzZXIgKmVuZCA9IHVhZGRyICsgc2l6ZSAtIDE7CiAKIAkJaWYgKCgodW5zaWduZWQgbG9uZyl1YWRkciAmIFBBR0VfTUFTSykgIT0KLQkJCQkoKHVuc2lnbmVkIGxvbmcpZW5kICYgUEFHRV9NQVNLKSkKKwkJCQkoKHVuc2lnbmVkIGxvbmcpZW5kICYgUEFHRV9NQVNLKSkgewogCQkgCXJldCA9IF9fZ2V0X3VzZXIoYywgZW5kKTsKKwkJCSh2b2lkKWM7CisJCX0KIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGF0aC5oIGIvaW5jbHVkZS9saW51eC9wYXRoLmgKaW5kZXggOTE1ZTBjMy4uZWRjOThkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYXRoLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYXRoLmgKQEAgLTEyLDQgKzEyLDkgQEAKIGV4dGVybiB2b2lkIHBhdGhfZ2V0KHN0cnVjdCBwYXRoICopOwogZXh0ZXJuIHZvaWQgcGF0aF9wdXQoc3RydWN0IHBhdGggKik7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBhdGhfZXF1YWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgxLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aDIpCit7CisJcmV0dXJuIHBhdGgxLT5tbnQgPT0gcGF0aDItPm1udCAmJiBwYXRoMS0+ZGVudHJ5ID09IHBhdGgyLT5kZW50cnk7Cit9CisKICNlbmRpZiAgLyogX0xJTlVYX1BBVEhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2hfZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaF9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGFmZTUyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wY2hfZG1hLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgUENIX0RNQV9ICisjZGVmaW5lIFBDSF9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisKK2VudW0gcGNoX2RtYV93aWR0aCB7CisJUENIX0RNQV9XSURUSF8xX0JZVEUsCisJUENIX0RNQV9XSURUSF8yX0JZVEVTLAorCVBDSF9ETUFfV0lEVEhfNF9CWVRFUywKK307CisKK3N0cnVjdCBwY2hfZG1hX3NsYXZlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZG1hX2RldjsKKwl1bnNpZ25lZCBpbnQJCWNoYW5faWQ7CisJZG1hX2FkZHJfdAkJdHhfcmVnOworCWRtYV9hZGRyX3QJCXJ4X3JlZzsKKwllbnVtIHBjaF9kbWFfd2lkdGgJd2lkdGg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IGYyNmZkYTcuLmIxZDE3OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjcwLDYgKzI3MCw4IEBACiAJdW5zaWduZWQgaW50CWQxX3N1cHBvcnQ6MTsJLyogTG93IHBvd2VyIHN0YXRlIEQxIGlzIHN1cHBvcnRlZCAqLwogCXVuc2lnbmVkIGludAlkMl9zdXBwb3J0OjE7CS8qIExvdyBwb3dlciBzdGF0ZSBEMiBpcyBzdXBwb3J0ZWQgKi8KIAl1bnNpZ25lZCBpbnQJbm9fZDFkMjoxOwkvKiBPbmx5IGFsbG93IEQwIGFuZCBEMyAqLworCXVuc2lnbmVkIGludAltbWlvX2Fsd2F5c19vbjoxOwkvKiBkaXNhbGxvdyB0dXJuaW5nIG9mZiBpby9tZW0KKwkJCQkJCSAgIGRlY29kaW5nIGR1cmluZyBiYXIgc2l6aW5nICovCiAJdW5zaWduZWQgaW50CXdha2V1cF9wcmVwYXJlZDoxOwogCXVuc2lnbmVkIGludAlkM19kZWxheTsJLyogRDMtPkQwIHRyYW5zaXRpb24gdGltZSBpbiBtcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDQwYzgwNGQuLmY2YTNiMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0yMzI1LDkgKzIzMjUsMTEgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MQkweDIzNjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MgkweDIzNjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MwkweDIzNjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NAkweDIzNjQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NQkweDIzNjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NgkweDIzNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OAkweDIzNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OQkweDIzNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9TRAkweDIzODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM4WF9NTUMgMHgyMzgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUIzOFhfTVMJMHgyMzgzCkBAIC0yMzcwLDYgKzIzNzIsOSBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FLUwkJMHg0MTZjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUtTX0FMQURESU5DQVJECTB4MDEwMAogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUNDRVNTSU8JCTB4NDk0ZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FDQ0VTU0lPX1dER19DU00JMHgyMmMwCisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TMwkJMHg1MzMzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfVFJJTwkJMHg4ODExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfODY4CQkweDg4ODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAppbmRleCBjODhkNjdiLi44YTdkNTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC00MCw2ICs0MCw3IEBACiB2b2lkIHBlcmNwdV9jb3VudGVyX3NldChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCk7CiB2b2lkIF9fcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50LCBzMzIgYmF0Y2gpOwogczY0IF9fcGVyY3B1X2NvdW50ZXJfc3VtKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjKTsKK2ludCBwZXJjcHVfY291bnRlcl9jb21wYXJlKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgcmhzKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHBlcmNwdV9jb3VudGVyX2FkZChzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IGFtb3VudCkKIHsKQEAgLTk4LDYgKzk5LDE2IEBACiAJZmJjLT5jb3VudCA9IGFtb3VudDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcGVyY3B1X2NvdW50ZXJfY29tcGFyZShzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgKmZiYywgczY0IHJocykKK3sKKwlpZiAoZmJjLT5jb3VudCA+IHJocykKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoZmJjLT5jb3VudCA8IHJocykKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogcGVyY3B1X2NvdW50ZXJfYWRkKHN0cnVjdCBwZXJjcHVfY291bnRlciAqZmJjLCBzNjQgYW1vdW50KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA1ZDAyNjZkLi43MTZmOTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMjE0LDggKzIxNCw5IEBACiAJCQkJICogIFNlZSBhbHNvIFBFUkZfUkVDT1JEX01JU0NfRVhBQ1RfSVAKIAkJCQkgKi8KIAkJCQlwcmVjaXNlX2lwICAgICA6ICAyLCAvKiBza2lkIGNvbnN0cmFpbnQgICAgICAgKi8KKwkJCQltbWFwX2RhdGEgICAgICA6ICAxLCAvKiBub24tZXhlYyBtbWFwIGRhdGEgICAgKi8KIAotCQkJCV9fcmVzZXJ2ZWRfMSAgIDogNDc7CisJCQkJX19yZXNlcnZlZF8xICAgOiA0NjsKIAogCXVuaW9uIHsKIAkJX191MzIJCXdha2V1cF9ldmVudHM7CSAgLyogd2FrZXVwIGV2ZXJ5IG4gZXZlbnRzICovCkBAIC00NjEsNiArNDYyLDcgQEAKIAogI2lmZGVmIENPTkZJR19QRVJGX0VWRU5UUwogIyBpbmNsdWRlIDxhc20vcGVyZl9ldmVudC5oPgorIyBpbmNsdWRlIDxhc20vbG9jYWw2NC5oPgogI2VuZGlmCiAKIHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzIHsKQEAgLTUzMSwxNCArNTMzLDE2IEBACiAJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwogCQl9OwogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKLQkJLyogYnJlYWtwb2ludCAqLwotCQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50CWluZm87CisJCXN0cnVjdCB7IC8qIGJyZWFrcG9pbnQgKi8KKwkJCXN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQJaW5mbzsKKwkJCXN0cnVjdCBsaXN0X2hlYWQJCWJwX2xpc3Q7CisJCX07CiAjZW5kaWYKIAl9OwotCWF0b21pYzY0X3QJCQlwcmV2X2NvdW50OworCWxvY2FsNjRfdAkJCXByZXZfY291bnQ7CiAJdTY0CQkJCXNhbXBsZV9wZXJpb2Q7CiAJdTY0CQkJCWxhc3RfcGVyaW9kOwotCWF0b21pYzY0X3QJCQlwZXJpb2RfbGVmdDsKKwlsb2NhbDY0X3QJCQlwZXJpb2RfbGVmdDsKIAl1NjQJCQkJaW50ZXJydXB0czsKIAogCXU2NAkJCQlmcmVxX3RpbWVfc3RhbXA7CkBAIC01NDgsNyArNTUyLDEwIEBACiAKIHN0cnVjdCBwZXJmX2V2ZW50OwogCi0jZGVmaW5lIFBFUkZfRVZFTlRfVFhOX1NUQVJURUQgMQorLyoKKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgcG11Ojp7c3RhcnQsY29tbWl0LGNhbmNlbH1fdHhuCisgKi8KKyNkZWZpbmUgUEVSRl9FVkVOVF9UWE4gMHgxCiAKIC8qKgogICogc3RydWN0IHBtdSAtIGdlbmVyaWMgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0CkBAIC01NjIsMTQgKzU2OSwyOCBAQAogCXZvaWQgKCp1bnRocm90dGxlKQkJKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiAKIAkvKgotCSAqIGdyb3VwIGV2ZW50cyBzY2hlZHVsaW5nIGlzIHRyZWF0ZWQgYXMgYSB0cmFuc2FjdGlvbiwKLQkgKiBhZGQgZ3JvdXAgZXZlbnRzIGFzIGEgd2hvbGUgYW5kIHBlcmZvcm0gb25lIHNjaGVkdWxhYmlsaXR5IHRlc3QuCi0JICogSWYgdGVzdCBmYWlscywgcm9sbCBiYWNrIHRoZSB3aG9sZSBncm91cAorCSAqIEdyb3VwIGV2ZW50cyBzY2hlZHVsaW5nIGlzIHRyZWF0ZWQgYXMgYSB0cmFuc2FjdGlvbiwgYWRkIGdyb3VwCisJICogZXZlbnRzIGFzIGEgd2hvbGUgYW5kIHBlcmZvcm0gb25lIHNjaGVkdWxhYmlsaXR5IHRlc3QuIElmIHRoZSB0ZXN0CisJICogZmFpbHMsIHJvbGwgYmFjayB0aGUgd2hvbGUgZ3JvdXAKIAkgKi8KIAorCS8qCisJICogU3RhcnQgdGhlIHRyYW5zYWN0aW9uLCBhZnRlciB0aGlzIC0+ZW5hYmxlKCkgZG9lc24ndCBuZWVkCisJICogdG8gZG8gc2NoZWR1bGFiaWxpdHkgdGVzdHMuCisJICovCiAJdm9pZCAoKnN0YXJ0X3R4bikJKGNvbnN0IHN0cnVjdCBwbXUgKnBtdSk7Ci0Jdm9pZCAoKmNhbmNlbF90eG4pCShjb25zdCBzdHJ1Y3QgcG11ICpwbXUpOworCS8qCisJICogSWYgLT5zdGFydF90eG4oKSBkaXNhYmxlZCB0aGUgLT5lbmFibGUoKSBzY2hlZHVsYWJpbGl0eSB0ZXN0CisJICogdGhlbiAtPmNvbW1pdF90eG4oKSBpcyByZXF1aXJlZCB0byBwZXJmb3JtIG9uZS4gT24gc3VjY2VzcworCSAqIHRoZSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQuIE9uIGVycm9yIHRoZSB0cmFuc2FjdGlvbiBpcyBrZXB0CisJICogb3BlbiB1bnRpbCAtPmNhbmNlbF90eG4oKSBpcyBjYWxsZWQuCisJICovCiAJaW50ICAoKmNvbW1pdF90eG4pCShjb25zdCBzdHJ1Y3QgcG11ICpwbXUpOworCS8qCisJICogV2lsbCBjYW5jZWwgdGhlIHRyYW5zYWN0aW9uLCBhc3N1bWVzIC0+ZGlzYWJsZSgpIGlzIGNhbGxlZCBmb3IKKwkgKiBlYWNoIHN1Y2Nlc3NmdWxsIC0+ZW5hYmxlKCkgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwl2b2lkICgqY2FuY2VsX3R4bikJKGNvbnN0IHN0cnVjdCBwbXUgKnBtdSk7CiB9OwogCiAvKioKQEAgLTU4NCw3ICs2MDUsOSBAQAogCiBzdHJ1Y3QgZmlsZTsKIAotc3RydWN0IHBlcmZfbW1hcF9kYXRhIHsKKyNkZWZpbmUgUEVSRl9CVUZGRVJfV1JJVEFCTEUJCTB4MDEKKworc3RydWN0IHBlcmZfYnVmZmVyIHsKIAlhdG9taWNfdAkJCXJlZmNvdW50OwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdV9oZWFkOwogI2lmZGVmIENPTkZJR19QRVJGX1VTRV9WTUFMTE9DCkBAIC02NTAsNyArNjczLDggQEAKIAogCWVudW0gcGVyZl9ldmVudF9hY3RpdmVfc3RhdGUJc3RhdGU7CiAJdW5zaWduZWQgaW50CQkJYXR0YWNoX3N0YXRlOwotCWF0b21pYzY0X3QJCQljb3VudDsKKwlsb2NhbDY0X3QJCQljb3VudDsKKwlhdG9taWM2NF90CQkJY2hpbGRfY291bnQ7CiAKIAkvKgogCSAqIFRoZXNlIGFyZSB0aGUgdG90YWwgdGltZSBpbiBuYW5vc2Vjb25kcyB0aGF0IHRoZSBldmVudApAQCAtNzA5LDcgKzczMyw3IEBACiAJYXRvbWljX3QJCQltbWFwX2NvdW50OwogCWludAkJCQltbWFwX2xvY2tlZDsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QJCSptbWFwX3VzZXI7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhCQkqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIJCSpidWZmZXI7CiAKIAkvKiBwb2xsIHJlbGF0ZWQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAkJd2FpdHE7CkBAIC04MDcsNyArODMxLDcgQEAKIAogc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSB7CiAJc3RydWN0IHBlcmZfZXZlbnQJCSpldmVudDsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEJCSpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlcgkJKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nCQkJd2FrZXVwOwogCXVuc2lnbmVkIGxvbmcJCQlzaXplOwogCXZvaWQJCQkJKmFkZHI7CkBAIC05MTAsOCArOTM0LDEwIEBACiAKIGV4dGVybiB2b2lkIF9fcGVyZl9zd19ldmVudCh1MzIsIHU2NCwgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOwogCi1leHRlcm4gdm9pZAotcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlwLCBpbnQgc2tpcCk7CisjaWZuZGVmIHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncworc3RhdGljIGlubGluZSB2b2lkCitwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXApIHsgfQorI2VuZGlmCiAKIC8qCiAgKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIHJlZ3MuIFNraXAgaXAgYW5kIGZyYW1lIHBvaW50ZXIgdG8KQEAgLTkyMSwzMSArOTQ3LDExIEBACiAgKiAtIGJwIGZvciBjYWxsY2hhaW5zCiAgKiAtIGVmbGFncywgZm9yIGZ1dHVyZSBwdXJwb3NlcywganVzdCBpbiBjYXNlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgc2tpcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGxvbmcgaXA7Ci0KIAltZW1zZXQocmVncywgMCwgc2l6ZW9mKCpyZWdzKSk7CiAKLQlzd2l0Y2ggKHNraXApIHsKLQljYXNlIDEgOgotCQlpcCA9IENBTExFUl9BRERSMDsKLQkJYnJlYWs7Ci0JY2FzZSAyIDoKLQkJaXAgPSBDQUxMRVJfQUREUjE7Ci0JCWJyZWFrOwotCWNhc2UgMyA6Ci0JCWlwID0gQ0FMTEVSX0FERFIyOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWlwID0gQ0FMTEVSX0FERFIzOwotCQlicmVhazsKLQkvKiBObyBuZWVkIHRvIHN1cHBvcnQgZnVydGhlciBmb3Igbm93ICovCi0JZGVmYXVsdDoKLQkJaXAgPSAwOwotCX0KLQotCXJldHVybiBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MocmVncywgaXAsIHNraXApOworCXBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncyhyZWdzLCBDQUxMRVJfQUREUjApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTk1NSwyMSArOTYxLDE0IEBACiAJCXN0cnVjdCBwdF9yZWdzIGhvdF9yZWdzOwogCiAJCWlmICghcmVncykgewotCQkJcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmaG90X3JlZ3MsIDEpOworCQkJcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmaG90X3JlZ3MpOwogCQkJcmVncyA9ICZob3RfcmVnczsKIAkJfQogCQlfX3BlcmZfc3dfZXZlbnQoZXZlbnRfaWQsIG5yLCBubWksIHJlZ3MsIGFkZHIpOwogCX0KIH0KIAotZXh0ZXJuIHZvaWQgX19wZXJmX2V2ZW50X21tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKLQkJX19wZXJmX2V2ZW50X21tYXAodm1hKTsKLX0KLQorZXh0ZXJuIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyAqcGVyZl9ndWVzdF9jYnM7CiBleHRlcm4gaW50IHBlcmZfcmVnaXN0ZXJfZ3Vlc3RfaW5mb19jYWxsYmFja3Moc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgKmNhbGxiYWNrcyk7CiBleHRlcm4gaW50IHBlcmZfdW5yZWdpc3Rlcl9ndWVzdF9pbmZvX2NhbGxiYWNrcyhzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyAqY2FsbGJhY2tzKTsKQEAgLTEwMDEsNyArMTAwMCw3IEBACiBleHRlcm4gdm9pZCBwZXJmX2V2ZW50X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBwZXJmX3RwX2V2ZW50KHU2NCBhZGRyLCB1NjQgY291bnQsIHZvaWQgKnJlY29yZCwKIAkJCSAgaW50IGVudHJ5X3NpemUsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCk7CisJCQkgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLCBpbnQgcmN0eCk7CiBleHRlcm4gdm9pZCBwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSk7CiAKICNpZm5kZWYgcGVyZl9taXNjX2ZsYWdzCkBAIC0xMDY4LDcgKzEwNjcsNyBAQAogI2RlZmluZSBwZXJmX2NwdV9ub3RpZmllcihmbikJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbmIgX19jcHVpbml0ZGF0YSA9CVwKLQkJeyAubm90aWZpZXJfY2FsbCA9IGZuLCAucHJpb3JpdHkgPSAyMCB9OwlcCisJCXsgLm5vdGlmaWVyX2NhbGwgPSBmbiwgLnByaW9yaXR5ID0gQ1BVX1BSSV9QRVJGIH07IFwKIAlmbigmZm4jI19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCQlcCiAJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsJXAogCWZuKCZmbiMjX25iLCAodW5zaWduZWQgbG9uZylDUFVfU1RBUlRJTkcsCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCA1NDE3OTQ0Li5kN2VjYWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTQzLDEwICs0Myw2NCBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHBsYXRmb3JtX2FkZF9kZXZpY2VzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiosIGludCk7CiAKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKGNvbnN0IGNoYXIgKiwgaW50IGlkLAotCQkJCQljb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShzdHJ1Y3QgZGV2aWNlICosCi0JCWNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3Jlc25kYXRhKAorCQlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCwKKwkJY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBudW0sCisJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKTsKKworLyoqCisgKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlIC0gYWRkIGEgcGxhdGZvcm0tbGV2ZWwgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzCisgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCisgKiBAaWQ6IGluc3RhbmNlIGlkCisgKiBAcmVzOiBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlCisgKiBAbnVtOiBudW1iZXIgb2YgcmVzb3VyY2VzCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc2ltcGxlIHBsYXRmb3JtIGRldmljZSB0aGF0IHJlcXVpcmVzIG1pbmltYWwKKyAqIHJlc291cmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQ2FubmVkIHJlbGVhc2UgZnVuY3Rpb24gZnJlZWluZyBtZW1vcnkKKyAqIGFsbG9jYXRlZCBmb3IgdGhlIGRldmljZSBhbGxvd3MgZHJpdmVycyB1c2luZyBzdWNoIGRldmljZXMgdG8gYmUKKyAqIHVubG9hZGVkIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgdG8gYmUKKyAqIGRyb3BwZWQuCisgKgorICogVGhpcyBpbnRlcmZhY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciB1c2Ugd2l0aCBsZWdhY3kgZHJpdmVycyB3aGljaAorICogcHJvYmUgaGFyZHdhcmUgZGlyZWN0bHkuICBCZWNhdXNlIHN1Y2ggZHJpdmVycyBjcmVhdGUgc3lzZnMgZGV2aWNlIG5vZGVzCisgKiB0aGVtc2VsdmVzLCByYXRoZXIgdGhhbiBsZXR0aW5nIHN5c3RlbSBpbmZyYXN0cnVjdHVyZSBoYW5kbGUgc3VjaCBkZXZpY2UKKyAqIGVudW1lcmF0aW9uIHRhc2tzLCB0aGV5IGRvbid0IGZ1bGx5IGNvbmZvcm0gdG8gdGhlIExpbnV4IGRyaXZlciBtb2RlbC4KKyAqIEluIHBhcnRpY3VsYXIsIHdoZW4gc3VjaCBkcml2ZXJzIGFyZSBidWlsdCBhcyBtb2R1bGVzLCB0aGV5IGNhbid0IGJlCisgKiAiaG90cGx1Z2dlZCIuCisgKgorICogUmV0dXJucyAmc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb2ludGVyIG9uIHN1Y2Nlc3MsIG9yIEVSUl9QVFIoKSBvbiBlcnJvci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKAorCQljb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEoTlVMTCwgbmFtZSwgaWQsCisJCQlyZXMsIG51bSwgTlVMTCwgMCk7Cit9CisKKy8qKgorICogcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEgLSBhZGQgYSBwbGF0Zm9ybS1sZXZlbCBkZXZpY2Ugd2l0aCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhCisgKiBAcGFyZW50OiBwYXJlbnQgZGV2aWNlIGZvciB0aGUgZGV2aWNlIHdlJ3JlIGFkZGluZworICogQG5hbWU6IGJhc2UgbmFtZSBvZiB0aGUgZGV2aWNlIHdlJ3JlIGFkZGluZworICogQGlkOiBpbnN0YW5jZSBpZAorICogQGRhdGE6IHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIHRoaXMgcGxhdGZvcm0gZGV2aWNlCisgKiBAc2l6ZTogc2l6ZSBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc2ltcGxlIHBsYXRmb3JtIGRldmljZSB0aGF0IHJlcXVpcmVzIG1pbmltYWwKKyAqIHJlc291cmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gQ2FubmVkIHJlbGVhc2UgZnVuY3Rpb24gZnJlZWluZyBtZW1vcnkKKyAqIGFsbG9jYXRlZCBmb3IgdGhlIGRldmljZSBhbGxvd3MgZHJpdmVycyB1c2luZyBzdWNoIGRldmljZXMgdG8gYmUKKyAqIHVubG9hZGVkIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgdG8gYmUKKyAqIGRyb3BwZWQuCisgKgorICogUmV0dXJucyAmc3RydWN0IHBsYXRmb3JtX2RldmljZSBwb2ludGVyIG9uIHN1Y2Nlc3MsIG9yIEVSUl9QVFIoKSBvbiBlcnJvci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSgKKwkJc3RydWN0IGRldmljZSAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgaWQsCisJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfcmVzbmRhdGEocGFyZW50LCBuYW1lLCBpZCwKKwkJCU5VTEwsIDAsIGRhdGEsIHNpemUpOworfQogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsIGludCBpZCk7CiBleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAppbmRleCA0ZjcxYmY0Li4zZTIzODQ0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCkBAIC0xMTcsNiArMTE3LDYgQEAKIAogbG9uZyBjbG9ja19uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jayk7CiAKLXZvaWQgdXBkYXRlX3JsaW1pdF9jcHUodW5zaWduZWQgbG9uZyBybGltX25ldyk7Cit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBybGltX25ldyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IGJmZjk4ZWMuLjVkODdmODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTM2LDcgKzM2LDcgQEAKIAogc3RydWN0IHBwcF9jaGFubmVsIHsKIAl2b2lkCQkqcHJpdmF0ZTsJLyogY2hhbm5lbCBwcml2YXRlIGRhdGEgKi8KLQlzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzICpvcHM7CS8qIG9wZXJhdGlvbnMgZm9yIHRoaXMgY2hhbm5lbCAqLworCWNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgKm9wczsgLyogb3BlcmF0aW9ucyBmb3IgdGhpcyBjaGFubmVsICovCiAJaW50CQltdHU7CQkvKiBtYXggdHJhbnNtaXQgcGFja2V0IHNpemUgKi8KIAlpbnQJCWhkcmxlbjsJCS8qIGFtb3VudCBvZiBoZWFkcm9vbSBjaGFubmVsIG5lZWRzICovCiAJdm9pZAkJKnBwcDsJCS8qIG9wYXF1ZSB0byBjaGFubmVsICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggYWEzNjc5My4uZDUwYmE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtMjgsNiArMjgsMTIgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1FVT1RBKQogCisjZGVmaW5lIHF1b3RhX2Vycm9yKHNiLCBmbXQsIGFyZ3MuLi4pIFwKKwlfX3F1b3RhX2Vycm9yKChzYiksIF9fZnVuY19fLCBmbXQgLCAjIyBhcmdzKQorCitleHRlcm4gdm9pZCBfX3F1b3RhX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmMsCisJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pOworCiAvKgogICogZGVjbGFyYXRpb24gb2YgcXVvdGFfZnVuY3Rpb24gY2FsbHMgaW4ga2VybmVsLgogICovCkBAIC0xNDUsMTEgKzE1MSw2IEBACiAJICAgICAgICFzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCB0eXBlKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzYl9hbnlfcXVvdGFfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JcmV0dXJuIHNiX2FueV9xdW90YV9sb2FkZWQoc2IpICYgfnNiX2FueV9xdW90YV9zdXNwZW5kZWQoc2IpOwotfQotCiAvKgogICogT3BlcmF0aW9ucyBzdXBwb3J0ZWQgZm9yIGRpc2txdW90YXMuCiAgKi8KQEAgLTE5NCwxMSArMTk1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2JfYW55X3F1b3RhX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogfQpAQCAtMjcwLDcgKzI2Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfYWxsb2Nfc3BhY2Vfbm9mYWlsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7CiAJX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnIsIERRVU9UX1NQQUNFX1dBUk58RFFVT1RfU1BBQ0VfTk9GQUlMKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQpAQCAtMjc5LDcgKzI3NSw3IEBACiAKIAlyZXQgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucik7CiAJaWYgKCFyZXQpCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMwOSw3ICszMDUsNyBAQAogCiAJcmV0ID0gZHF1b3RfcHJlYWxsb2NfYmxvY2tfbm9kaXJ0eShpbm9kZSwgbnIpOwogCWlmICghcmV0KQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMjUsNyArMzIxLDcgQEAKIAogCXJldCA9IGRxdW90X2NsYWltX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogCWlmICghcmV0KQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMzcsNyArMzMzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7CiAJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBucik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaAppbmRleCA1NWNhNzNjLi42MzRiOGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhZGl4LXRyZWUuaApAQCAtNTUsNyArNTUsNyBAQAogCiAvKioqIHJhZGl4LXRyZWUgQVBJIHN0YXJ0cyBoZXJlICoqKi8KIAotI2RlZmluZSBSQURJWF9UUkVFX01BWF9UQUdTIDIKKyNkZWZpbmUgUkFESVhfVFJFRV9NQVhfVEFHUyAzCiAKIC8qIHJvb3QgdGFncyBhcmUgc3RvcmVkIGluIGdmcF9tYXNrLCBzaGlmdGVkIGJ5IF9fR0ZQX0JJVFNfU0hJRlQgKi8KIHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgewpAQCAtMTkyLDYgKzE5MiwxMCBAQAogcmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWdfc2xvdChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB2b2lkICoqKnJlc3VsdHMsCiAJCXVuc2lnbmVkIGxvbmcgZmlyc3RfaW5kZXgsIHVuc2lnbmVkIGludCBtYXhfaXRlbXMsCiAJCXVuc2lnbmVkIGludCB0YWcpOwordW5zaWduZWQgbG9uZyByYWRpeF90cmVlX3JhbmdlX3RhZ19pZl90YWdnZWQoc3RydWN0IHJhZGl4X3RyZWVfcm9vdCAqcm9vdCwKKwkJdW5zaWduZWQgbG9uZyAqZmlyc3RfaW5kZXhwLCB1bnNpZ25lZCBsb25nIGxhc3RfaW5kZXgsCisJCXVuc2lnbmVkIGxvbmcgbnJfdG9fdGFnLAorCQl1bnNpZ25lZCBpbnQgZnJvbXRhZywgdW5zaWduZWQgaW50IHRvdGFnKTsKIGludCByYWRpeF90cmVlX3RhZ2dlZChzdHJ1Y3QgcmFkaXhfdHJlZV9yb290ICpyb290LCB1bnNpZ25lZCBpbnQgdGFnKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHJhZGl4X3RyZWVfcHJlbG9hZF9lbmQodm9pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaCBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaAppbmRleCBiNjUzYjRhLi45ZmJjNTRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CiAKICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVAogZXh0ZXJuIGludCByY3V0b3J0dXJlX3J1bm5hYmxlOyAvKiBmb3Igc3lzY3RsICovCkBAIC03OSw2ICs4MCwxNiBAQAogICAgICAgIChwdHIpLT5uZXh0ID0gTlVMTDsgKHB0ciktPmZ1bmMgPSBOVUxMOyBcCiB9IHdoaWxlICgwKQogCisvKgorICogaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpL2Rlc3Ryb3lfcmN1X2hlYWRfb25fc3RhY2soKSBhcmUgbmVlZGVkIGZvciBkeW5hbWljCisgKiBpbml0aWFsaXphdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gb2YgcmN1X2hlYWQgb24gdGhlIHN0YWNrLiByY3VfaGVhZCBzdHJ1Y3R1cmVzCisgKiBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGhlYXAgb3IgZGVmaW5lZCBzdGF0aWNhbGx5IGRvbid0IG5lZWQgYW55CisgKiBpbml0aWFsaXphdGlvbi4KKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECitleHRlcm4gdm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CitleHRlcm4gdm9pZCBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCk7CisjZWxzZSAvKiAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIH0KQEAgLTg2LDYgKzk3LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIH0KKyNlbmRpZgkvKiAjZWxzZSAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAKQEAgLTUxNyw0ICs1MjksNzQgQEAKIGV4dGVybiB2b2lkIGNhbGxfcmN1X2JoKHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKIAkJCXZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpKTsKIAorLyoKKyAqIGRlYnVnX3JjdV9oZWFkX3F1ZXVlKCkvZGVidWdfcmN1X2hlYWRfdW5xdWV1ZSgpIGFyZSB1c2VkIGludGVybmFsbHkKKyAqIGJ5IGNhbGxfcmN1KCkgYW5kIHJjdSBjYWxsYmFjayBleGVjdXRpb24sIGFuZCBhcmUgdGhlcmVmb3JlIG5vdCBwYXJ0IG9mIHRoZQorICogUkNVIEFQSS4gTGVhdmluZyBpbiByY3VwZGF0ZS5oIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBieSBhbGwgUkNVIGZsYXZvcnMuCisgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECisjIGRlZmluZSBTVEFURV9SQ1VfSEVBRF9SRUFEWQkwCisjIGRlZmluZSBTVEFURV9SQ1VfSEVBRF9RVUVVRUQJMQorCitleHRlcm4gc3RydWN0IGRlYnVnX29ial9kZXNjciByY3VoZWFkX2RlYnVnX2Rlc2NyOworCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCWRlYnVnX29iamVjdF9hY3RpdmF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7CisJZGVidWdfb2JqZWN0X2FjdGl2ZV9zdGF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjciwKKwkJCQkgIFNUQVRFX1JDVV9IRUFEX1JFQURZLAorCQkJCSAgU1RBVEVfUkNVX0hFQURfUVVFVUVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3JjdV9oZWFkX3VucXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCWRlYnVnX29iamVjdF9hY3RpdmVfc3RhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IsCisJCQkJICBTVEFURV9SQ1VfSEVBRF9RVUVVRUQsCisJCQkJICBTVEFURV9SQ1VfSEVBRF9SRUFEWSk7CisJZGVidWdfb2JqZWN0X2RlYWN0aXZhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorI2Vsc2UJLyogIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEICovCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfcXVldWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfdW5xdWV1ZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7Cit9CisjZW5kaWYJLyogI2Vsc2UgIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEICovCisKKyNpZm5kZWYgQ09ORklHX1BST1ZFX1JDVQorI2RlZmluZSBfX2RvX3JjdV9kZXJlZmVyZW5jZV9jaGVjayhjKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UgKi8KKworI2RlZmluZSBfX3JjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhwLCBjKSBcCisJKHsgXAorCQl0eXBlb2YocCkgX19fX19fX19fcDEgPSBBQ0NFU1NfT05DRShwKTsgXAorCQlfX2RvX3JjdV9kZXJlZmVyZW5jZV9jaGVjayhjKTsgXAorCQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgXAorCQkoX19fX19fX19fcDEpOyBcCisJfSkKKworLyoqCisgKiByY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soKSAtIHJjdV9kZXJlZmVyZW5jZSBmb3IgaW5kaWNlcyB3aXRoIGRlYnVnIGNoZWNraW5nCisgKiBAcDogVGhlIHBvaW50ZXIgdG8gcmVhZCwgcHJpb3IgdG8gZGVyZWZlcmVuY2luZworICogQGM6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBkZXJlZmVyZW5jZSB3aWxsIHRha2UgcGxhY2UKKyAqCisgKiBTaW1pbGFyIHRvIHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpLCBidXQgb21pdHMgdGhlIHNwYXJzZSBjaGVja2luZy4KKyAqIFRoaXMgYWxsb3dzIHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygpIHRvIGJlIHVzZWQgb24gaW50ZWdlcnMsCisgKiB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIGFzIGFycmF5IGluZGljZXMuICBBdHRlbXB0aW5nIHRvIHVzZQorICogcmN1X2RlcmVmZXJlbmNlX2NoZWNrKCkgb24gYW4gaW50ZWdlciB3aWxsIGdpdmUgY29tcGlsZXIgd2FybmluZ3MKKyAqIGJlY2F1c2UgdGhlIHNwYXJzZSBhZGRyZXNzLXNwYWNlIG1lY2hhbmlzbSByZWxpZXMgb24gZGVyZWZlcmVuY2luZworICogdGhlIFJDVS1wcm90ZWN0ZWQgcG9pbnRlci4gIERlcmVmZXJlbmNpbmcgaW50ZWdlcnMgaXMgbm90IHNvbWV0aGluZworICogdGhhdCBldmVuIGdjYyB3aWxsIHB1dCB1cCB3aXRoLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGltcGxpY2l0bHkgY2hlY2sgZm9yIFJDVSByZWFkLXNpZGUKKyAqIGNyaXRpY2FsIHNlY3Rpb25zLiAgSWYgdGhpcyBmdW5jdGlvbiBnYWlucyBsb3RzIG9mIHVzZXMsIGl0IG1pZ2h0CisgKiBtYWtlIHNlbnNlIHRvIHByb3ZpZGUgdmVyc2lvbnMgZm9yIGVhY2ggZmxhdm9yIG9mIFJDVSwgYnV0IGl0IGRvZXMKKyAqIG5vdCBtYWtlIHNlbnNlIGFzIG9mIGVhcmx5IDIwMTAuCisgKi8KKyNkZWZpbmUgcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKHAsIGMpIFwKKwlfX3JjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjaygocCksIChjKSkKKwogI2VuZGlmIC8qIF9fTElOVVhfUkNVUERBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IGJhMzk0MTYuLjkxYTQxNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTIwMzMsNyArMjAzMyw3IEBACiAJCQkJc3RydWN0IHJlaXNlcmZzX2lnZXRfYXJncyAqYXJncyk7CiBpbnQgcmVpc2VyZnNfZmluZF9hY3RvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpwKTsKIGludCByZWlzZXJmc19pbml0X2xvY2tlZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpwKTsKLXZvaWQgcmVpc2VyZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCByZWlzZXJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCByZWlzZXJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBpbnQgcmVpc2VyZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAogCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaAppbmRleCA4OWY0ZDNhLi45Nzk1OWJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaApAQCAtMjUsNyArMjUsNiBAQAogCWlfbGlua19zYXZlZF90cnVuY2F0ZV9tYXNrID0gMHgwMDIwLAogCWlfaGFzX3hhdHRyX2RpciA9IDB4MDA0MCwKIAlpX2RhdGFfbG9nID0gMHgwMDgwLAotCWlfZXZlcl9tYXBwZWQgPSAweDAxMDAKIH0gcmVpc2VyZnNfaW5vZGVfZmxhZ3M7CiAKIHN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvIHsKQEAgLTUzLDcgKzUyLDggQEAKIAkgKiogZmx1c2hlZCAqLwogCXVuc2lnbmVkIGludCBpX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmlfamw7Ci0Jc3RydWN0IG11dGV4IGlfbW1hcDsKKwlhdG9taWNfdCBvcGVuZXJzOworCXN0cnVjdCBtdXRleCB0YWlscGFjazsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGlfeGF0dHJfc2VtOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmggYi9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgKaW5kZXggZjFlOTE0ZS4uODhkMzZmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaApAQCAtNDMsNiArNDMsMTMgQEAKIAl1bnNpZ25lZCBsb25nCXJsaW1fbWF4OwogfTsKIAorI2RlZmluZSBSTElNNjRfSU5GSU5JVFkJCSh+MFVMTCkKKworc3RydWN0IHJsaW1pdDY0IHsKKwlfX3U2NCBybGltX2N1cjsKKwlfX3U2NCBybGltX21heDsKK307CisKICNkZWZpbmUJUFJJT19NSU4JKC0yMCkKICNkZWZpbmUJUFJJT19NQVgJMjAKIApAQCAtNzMsNiArODAsOCBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogCiBpbnQgZ2V0cnVzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdobywgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KTsKK2ludCBkb19wcmxpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCXN0cnVjdCBybGltaXQgKm5ld19ybGltLCBzdHJ1Y3QgcmxpbWl0ICpvbGRfcmxpbSk7CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggNzcyMTY3NC4uZDY2NjFkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogc3RydWN0IGFub25fdm1hIHsKIAlzcGlubG9ja190IGxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdm1hIGxpc3QgKi8KKwlzdHJ1Y3QgYW5vbl92bWEgKnJvb3Q7CS8qIFJvb3Qgb2YgdGhpcyBhbm9uX3ZtYSB0cmVlICovCiAjaWYgZGVmaW5lZChDT05GSUdfS1NNKSB8fCBkZWZpbmVkKENPTkZJR19NSUdSQVRJT04pCiAKIAkvKgpAQCAtODAsNiArODEsMTMgQEAKIHsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmFub25fdm1hLT5leHRlcm5hbF9yZWZjb3VudCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlhdG9taWNfaW5jKCZhbm9uX3ZtYS0+ZXh0ZXJuYWxfcmVmY291bnQpOworfQorCit2b2lkIGRyb3BfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBhbm9udm1hX2V4dGVybmFsX3JlZmNvdW50X2luaXQoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKQEAgLTg5LDYgKzk3LDE0IEBACiB7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRyb3BfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKK30KICNlbmRpZiAvKiBDT05GSUdfS1NNICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICpwYWdlX2Fub25fdm1hKHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtOTksMTggKzExNSwyOCBAQAogCXJldHVybiBwYWdlX3JtYXBwaW5nKHBhZ2UpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfbG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbG9ja19hbm9uX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKIAlpZiAoYW5vbl92bWEpCi0JCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOworCQlzcGluX2xvY2soJmFub25fdm1hLT5yb290LT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX3VubG9jayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bWFfdW5sb2NrX2Fub25fdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwogCWlmIChhbm9uX3ZtYSkKLQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5yb290LT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX2xvY2soc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlzcGluX2xvY2soJmFub25fdm1hLT5yb290LT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX3VubG9jayhzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQoreworCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+cm9vdC0+bG9jayk7CiB9CiAKIC8qCkBAIC0xMzYsNiArMTYyLDggQEAKICAqLwogdm9pZCBwYWdlX21vdmVfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgcGFnZV9hZGRfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQgZG9fcGFnZV9hZGRfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLAorCQkJICAgdW5zaWduZWQgbG9uZywgaW50KTsKIHZvaWQgcGFnZV9hZGRfbmV3X2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CiB2b2lkIHBhZ2VfYWRkX2ZpbGVfcm1hcChzdHJ1Y3QgcGFnZSAqKTsKIHZvaWQgcGFnZV9yZW1vdmVfcm1hcChzdHJ1Y3QgcGFnZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAwNDc4ODg4Li5jZTE2MGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNzIsMTkgKzI3MiwxMCBAQAogCiBleHRlcm4gY3B1bWFza192YXJfdCBub2h6X2NwdV9tYXNrOwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfTk9fSFopCi1leHRlcm4gaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IGNwdSk7Ci1leHRlcm4gaW50IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIodm9pZCk7Ci1leHRlcm4gaW50IG5vaHpfcmF0ZWxpbWl0KGludCBjcHUpOworZXh0ZXJuIHZvaWQgc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcihpbnQgc3RvcF90aWNrKTsKK2V4dGVybiBpbnQgZ2V0X25vaHpfdGltZXJfdGFyZ2V0KHZvaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IGNwdSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbm9oel9yYXRlbGltaXQoaW50IGNwdSkKLXsKLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spIHsgfQogI2VuZGlmCiAKIC8qCkBAIC0zMTYsMjAgKzMwNywxNiBAQAogCiBleHRlcm4gdm9pZCBzY2hlZF9zaG93X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAotI2lmZGVmIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUAotZXh0ZXJuIHZvaWQgc29mdGxvY2t1cF90aWNrKHZvaWQpOworI2lmZGVmIENPTkZJR19MT0NLVVBfREVURUNUT1IKIGV4dGVybiB2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCk7CiBleHRlcm4gdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCk7CiBleHRlcm4gdm9pZCB0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3Modm9pZCk7Ci1leHRlcm4gaW50IHByb2NfZG9zb2Z0bG9ja3VwX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJCSAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CitleHRlcm4gaW50IHByb2NfZG93YXRjaGRvZ190aHJlc2goc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkgIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiBleHRlcm4gdW5zaWduZWQgaW50ICBzb2Z0bG9ja3VwX3BhbmljOwogZXh0ZXJuIGludCBzb2Z0bG9ja3VwX3RocmVzaDsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc29mdGxvY2t1cF90aWNrKHZvaWQpCi17Ci19CiBzdGF0aWMgaW5saW5lIHZvaWQgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZyh2b2lkKQogewogfQpAQCAtNjM0LDcgKzYyMSw4IEBACiAJc3RydWN0IHR0eV9hdWRpdF9idWYgKnR0eV9hdWRpdF9idWY7CiAjZW5kaWYKIAotCWludCBvb21fYWRqOwkvKiBPT00ga2lsbCBzY29yZSBhZGp1c3RtZW50IChiaXQgc2hpZnQpICovCisJaW50IG9vbV9hZGo7CQkvKiBPT00ga2lsbCBzY29yZSBhZGp1c3RtZW50IChiaXQgc2hpZnQpICovCisJaW50IG9vbV9zY29yZV9hZGo7CS8qIE9PTSBraWxsIHNjb3JlIGFkanVzdG1lbnQgKi8KIH07CiAKIC8qIENvbnRleHQgc3dpdGNoIG11c3QgYmUgdW5sb2NrZWQgaWYgaW50ZXJydXB0cyBhcmUgdG8gYmUgZW5hYmxlZCAqLwpAQCAtODA1LDcgKzc5Myw3IEBACiAjZGVmaW5lIFNEX1BPV0VSU0FWSU5HU19CQUxBTkNFCTB4MDEwMAkvKiBCYWxhbmNlIGZvciBwb3dlciBzYXZpbmdzICovCiAjZGVmaW5lIFNEX1NIQVJFX1BLR19SRVNPVVJDRVMJMHgwMjAwCS8qIERvbWFpbiBtZW1iZXJzIHNoYXJlIGNwdSBwa2cgcmVzb3VyY2VzICovCiAjZGVmaW5lIFNEX1NFUklBTElaRQkJMHgwNDAwCS8qIE9ubHkgYSBzaW5nbGUgbG9hZCBiYWxhbmNpbmcgaW5zdGFuY2UgKi8KLQorI2RlZmluZSBTRF9BU1lNX1BBQ0tJTkcJCTB4MDgwMCAgLyogUGxhY2UgYnVzeSBncm91cHMgZWFybGllciBpbiB0aGUgZG9tYWluICovCiAjZGVmaW5lIFNEX1BSRUZFUl9TSUJMSU5HCTB4MTAwMAkvKiBQcmVmZXIgdG8gcGxhY2UgdGFza3MgaW4gYSBzaWJsaW5nIGRvbWFpbiAqLwogCiBlbnVtIHBvd2Vyc2F2aW5nc19iYWxhbmNlX2xldmVsIHsKQEAgLTg0MCw2ICs4MjgsOCBAQAogCXJldHVybiBTRF9QUkVGRVJfU0lCTElORzsKIH0KIAorZXh0ZXJuIGludCBfX3dlYWsgYXJjaF9zZF9zaWJpbGluZ19hc3ltX3BhY2tpbmcodm9pZCk7CisKIC8qCiAgKiBPcHRpbWlzZSBTRCBmbGFncyBmb3IgcG93ZXIgc2F2aW5nczoKICAqIFNEX0JBTEFOQ0VfTkVXSURMRSBoZWxwcyBhZ3Jlc3NpdmUgdGFzayBjb25zb2xpZGF0aW9uIGFuZCBwb3dlciBzYXZpbmdzLgpAQCAtODYxLDcgKzg1MSw3IEBACiAJICogQ1BVIHBvd2VyIG9mIHRoaXMgZ3JvdXAsIFNDSEVEX0xPQURfU0NBTEUgYmVpbmcgbWF4IHBvd2VyIGZvciBhCiAJICogc2luZ2xlIENQVS4KIAkgKi8KLQl1bnNpZ25lZCBpbnQgY3B1X3Bvd2VyOworCXVuc2lnbmVkIGludCBjcHVfcG93ZXIsIGNwdV9wb3dlcl9vcmlnOwogCiAJLyoKIAkgKiBUaGUgQ1BVcyB0aGlzIGdyb3VwIGNvdmVycy4KQEAgLTE2OTcsNiArMTY4Nyw3IEBACiAjZGVmaW5lIFBGX0VYSVRJTkcJMHgwMDAwMDAwNAkvKiBnZXR0aW5nIHNodXQgZG93biAqLwogI2RlZmluZSBQRl9FWElUUElET05FCTB4MDAwMDAwMDgJLyogcGkgZXhpdCBkb25lIG9uIHNodXQgZG93biAqLwogI2RlZmluZSBQRl9WQ1BVCQkweDAwMDAwMDEwCS8qIEknbSBhIHZpcnR1YWwgQ1BVICovCisjZGVmaW5lIFBGX1dRX1dPUktFUgkweDAwMDAwMDIwCS8qIEknbSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi8KICNkZWZpbmUgUEZfRk9SS05PRVhFQwkweDAwMDAwMDQwCS8qIGZvcmtlZCBidXQgZGlkbid0IGV4ZWMgKi8KICNkZWZpbmUgUEZfTUNFX1BST0NFU1MgIDB4MDAwMDAwODAgICAgICAvKiBwcm9jZXNzIHBvbGljeSBvbiBtY2UgZXJyb3JzICovCiAjZGVmaW5lIFBGX1NVUEVSUFJJVgkweDAwMDAwMTAwCS8qIHVzZWQgc3VwZXItdXNlciBwcml2aWxlZ2VzICovCkBAIC0xNzkxLDIwICsxNzgyLDIzIEBACiAjZW5kaWYKIAogLyoKLSAqIEFyY2hpdGVjdHVyZXMgY2FuIHNldCB0aGlzIHRvIDEgaWYgdGhleSBoYXZlIHNwZWNpZmllZAotICogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgaW4gdGhlaXIgYXJjaCBLY29uZmlnLAotICogYnV0IHRoZW4gZHVyaW5nIGJvb3R1cCBpdCB0dXJucyBvdXQgdGhhdCBzY2hlZF9jbG9jaygpCi0gKiBpcyByZWxpYWJsZSBhZnRlciBhbGw6CisgKiBEbyBub3QgdXNlIG91dHNpZGUgb2YgYXJjaGl0ZWN0dXJlIGNvZGUgd2hpY2gga25vd3MgaXRzIGxpbWl0YXRpb25zLgorICoKKyAqIHNjaGVkX2Nsb2NrKCkgaGFzIG5vIHByb21pc2Ugb2YgbW9ub3RvbmljaXR5IG9yIGJvdW5kZWQgZHJpZnQgYmV0d2VlbgorICogQ1BVcywgdXNlICh3aGljaCB5b3Ugc2hvdWxkIG5vdCkgcmVxdWlyZXMgZGlzYWJsaW5nIElSUXMuCisgKgorICogUGxlYXNlIHVzZSBvbmUgb2YgdGhlIHRocmVlIGludGVyZmFjZXMgYmVsb3cuCiAgKi8KLSNpZmRlZiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSwotZXh0ZXJuIGludCBzY2hlZF9jbG9ja19zdGFibGU7Ci0jZW5kaWYKLQotLyogZnRyYWNlIGNhbGxzIHNjaGVkX2Nsb2NrKCkgZGlyZWN0bHkgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKTsKKy8qCisgKiBTZWUgdGhlIGNvbW1lbnQgaW4ga2VybmVsL3NjaGVkX2Nsb2NrLmMKKyAqLworZXh0ZXJuIHU2NCBjcHVfY2xvY2soaW50IGNwdSk7CitleHRlcm4gdTY0IGxvY2FsX2Nsb2NrKHZvaWQpOworZXh0ZXJuIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSk7CisKIAogZXh0ZXJuIHZvaWQgc2NoZWRfY2xvY2tfaW5pdCh2b2lkKTsKLWV4dGVybiB1NjQgc2NoZWRfY2xvY2tfY3B1KGludCBjcHUpOwogCiAjaWZuZGVmIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWRfY2xvY2tfdGljayh2b2lkKQpAQCAtMTgxOSwxNyArMTgxMywxOSBAQAogewogfQogI2Vsc2UKKy8qCisgKiBBcmNoaXRlY3R1cmVzIGNhbiBzZXQgdGhpcyB0byAxIGlmIHRoZXkgaGF2ZSBzcGVjaWZpZWQKKyAqIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLIGluIHRoZWlyIGFyY2ggS2NvbmZpZywKKyAqIGJ1dCB0aGVuIGR1cmluZyBib290dXAgaXQgdHVybnMgb3V0IHRoYXQgc2NoZWRfY2xvY2soKQorICogaXMgcmVsaWFibGUgYWZ0ZXIgYWxsOgorICovCitleHRlcm4gaW50IHNjaGVkX2Nsb2NrX3N0YWJsZTsKKwogZXh0ZXJuIHZvaWQgc2NoZWRfY2xvY2tfdGljayh2b2lkKTsKIGV4dGVybiB2b2lkIHNjaGVkX2Nsb2NrX2lkbGVfc2xlZXBfZXZlbnQodm9pZCk7CiBleHRlcm4gdm9pZCBzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudCh1NjQgZGVsdGFfbnMpOwogI2VuZGlmCiAKLS8qCi0gKiBGb3Iga2VybmVsLWludGVybmFsIHVzZTogaGlnaC1zcGVlZCAoYnV0IHNsaWdodGx5IGluY29ycmVjdCkgcGVyLWNwdQotICogY2xvY2sgY29uc3RydWN0ZWQgZnJvbSBzY2hlZF9jbG9jaygpOgotICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KTsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZwogdGFza19zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHRocmVhZF9ncm91cF9zY2hlZF9ydW50aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CkBAIC0yNDM1LDE4ICsyNDMxLDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2lmZGVmIENPTkZJR19UUkFDSU5HCi1leHRlcm4gdm9pZAotX190cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKLQkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkCi1fX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAotCQl1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczKQotewotfQotI2VuZGlmCi0KIGV4dGVybiBsb25nIHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm5ld19tYXNrKTsKIGV4dGVybiBsb25nIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc3RydWN0IGNwdW1hc2sgKm1hc2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggNzIzYTkzZC4uYTIyMjE5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBfX0xJTlVYX1NFQ1VSSVRZX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KQEAgLTE0OTgsNyArMTQ5OSw4IEBACiAJaW50ICgqdGFza19zZXRuaWNlKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZSk7CiAJaW50ICgqdGFza19zZXRpb3ByaW8pIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpb3ByaW8pOwogCWludCAoKnRhc2tfZ2V0aW9wcmlvKSAoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKLQlpbnQgKCp0YXNrX3NldHJsaW1pdCkgKHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pOworCWludCAoKnRhc2tfc2V0cmxpbWl0KSAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCQlzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSk7CiAJaW50ICgqdGFza19zZXRzY2hlZHVsZXIpIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksCiAJCQkJICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKmxwKTsKIAlpbnQgKCp0YXNrX2dldHNjaGVkdWxlcikgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CkBAIC0xNzQ4LDcgKzE3NTAsOCBAQAogaW50IHNlY3VyaXR5X3Rhc2tfc2V0bmljZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWNlKTsKIGludCBzZWN1cml0eV90YXNrX3NldGlvcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpb3ByaW8pOwogaW50IHNlY3VyaXR5X3Rhc2tfZ2V0aW9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7Ci1pbnQgc2VjdXJpdHlfdGFza19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSk7CitpbnQgc2VjdXJpdHlfdGFza19zZXRybGltaXQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCXN0cnVjdCBybGltaXQgKm5ld19ybGltKTsKIGludCBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJaW50IHBvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpscCk7CiBpbnQgc2VjdXJpdHlfdGFza19nZXRzY2hlZHVsZXIoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKQEAgLTIzMTAsNyArMjMxMyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCiAJCQkJCSAgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWwuaAppbmRleCBjODYxM2MzLi4xZWJjNjk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsLmgKQEAgLTc3LDcgKzc3LDggQEAKICNkZWZpbmUgUE9SVF8xNjY1NAkxMQogI2RlZmluZSBQT1JUXzE2ODUwCTEyCiAjZGVmaW5lIFBPUlRfUlNBCTEzCS8qIFJTQS1EViBJSS9TIGNhcmQgKi8KLSNkZWZpbmUgUE9SVF9NQVgJMTMKKyNkZWZpbmUgUE9SVF9VNl8xNjU1MEEJMTQKKyNkZWZpbmUgUE9SVF9NQVgJMTQKIAogI2RlZmluZSBTRVJJQUxfSU9fUE9SVAkwCiAjZGVmaW5lIFNFUklBTF9JT19IVUI2CTEKQEAgLTE1MSw3ICsxNTIsNyBAQAogI2RlZmluZSBBU1lOQ19CVUdHWV9VQVJUCSgxVSA8PCBBU1lOQ0JfQlVHR1lfVUFSVCkKICNkZWZpbmUgQVNZTkNfQVVUT1BST0JFCQkoMVUgPDwgQVNZTkNCX0FVVE9QUk9CRSkKIAotI2RlZmluZSBBU1lOQ19GTEFHUwkJKCgxVSA8PCBBU1lOQ0JfTEFTVF9VU0VSKSAtIDEpCisjZGVmaW5lIEFTWU5DX0ZMQUdTCQkoKDFVIDw8IChBU1lOQ0JfTEFTVF9VU0VSICsgMSkpIC0gMSkKICNkZWZpbmUgQVNZTkNfVVNSX01BU0sJCShBU1lOQ19TUERfSEl8QVNZTkNfU1BEX1ZISXwgXAogCQlBU1lOQ19DQUxMT1VUX05PSFVQfEFTWU5DX1NQRF9TSEl8QVNZTkNfTE9XX0xBVEVOQ1kpCiAjZGVmaW5lIEFTWU5DX1NQRF9DVVNUCQkoQVNZTkNfU1BEX0hJfEFTWU5DX1NQRF9WSEkpCkBAIC0yMTAsOCArMjExLDEwIEBACiAjZGVmaW5lIFNFUl9SUzQ4NV9FTkFCTEVECQkoMSA8PCAwKQogI2RlZmluZSBTRVJfUlM0ODVfUlRTX09OX1NFTkQJCSgxIDw8IDEpCiAjZGVmaW5lIFNFUl9SUzQ4NV9SVFNfQUZURVJfU0VORAkoMSA8PCAyKQorI2RlZmluZSBTRVJfUlM0ODVfUlRTX0JFRk9SRV9TRU5ECSgxIDw8IDMpCiAJX191MzIJZGVsYXlfcnRzX2JlZm9yZV9zZW5kOwkvKiBNaWxsaXNlY29uZHMgKi8KLQlfX3UzMglwYWRkaW5nWzZdOwkJLyogTWVtb3J5IGlzIGNoZWFwLCBuZXcgc3RydWN0cworCV9fdTMyCWRlbGF5X3J0c19hZnRlcl9zZW5kOwkvKiBNaWxsaXNlY29uZHMgKi8KKwlfX3UzMglwYWRkaW5nWzVdOwkJLyogTWVtb3J5IGlzIGNoZWFwLCBuZXcgc3RydWN0cwogCQkJCQkgICBhcmUgYSByb3lhbCBQSVRBIC4uICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF84MjUwLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF84MjUwLmgKaW5kZXggZmI0NmFiYS4uNzYzOGRlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfODI1MC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsXzgyNTAuaApAQCAtMzIsNiArMzIsOSBAQAogCXVuc2lnbmVkIGludAl0eXBlOwkJLyogSWYgVVBGX0ZJWEVEX1RZUEUgKi8KIAl1bnNpZ25lZCBpbnQJKCpzZXJpYWxfaW4pKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50KTsKIAl2b2lkCQkoKnNlcmlhbF9vdXQpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50LCBpbnQpOworCXZvaWQJCSgqc2V0X3Rlcm1pb3MpKHN0cnVjdCB1YXJ0X3BvcnQgKiwKKwkJCSAgICAgICAgICAgICAgIHN0cnVjdCBrdGVybWlvcyAqbmV3LAorCQkJICAgICAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogfTsKIAogLyoKQEAgLTcxLDUgKzc0LDcgQEAKIGV4dGVybiBpbnQgc2VyaWFsODI1MF9maW5kX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcCk7CiBleHRlcm4gaW50IHNlcmlhbDgyNTBfZmluZF9wb3J0X2Zvcl9lYXJseWNvbih2b2lkKTsKIGV4dGVybiBpbnQgc2V0dXBfZWFybHlfc2VyaWFsODI1MF9jb25zb2xlKGNoYXIgKmNtZGxpbmUpOworZXh0ZXJuIHZvaWQgc2VyaWFsODI1MF9kb19zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKaW5kZXggZjEwZGI2ZS4uM2MyYWQ5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMTg2LDYgKzE4NiwxNSBAQAogI2RlZmluZSBQT1JUX0FMVEVSQV9KVEFHVUFSVAk5MQogI2RlZmluZSBQT1JUX0FMVEVSQV9VQVJUCTkyCiAKKy8qIFNILVNDSSAqLworI2RlZmluZSBQT1JUX1NDSUZCCTkzCisKKy8qIE1BWDMxMDcgKi8KKyNkZWZpbmUgUE9SVF9NQVgzMTA3CTk0CisKKy8qIEhpZ2ggU3BlZWQgVUFSVCBmb3IgTWVkZmllbGQgKi8KKyNkZWZpbmUgUE9SVF9NRkQJOTUKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC0yMjAsNyArMjI5LDcgQEAKIAl2b2lkCQkoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHVhcnRfcG9ydCAqKTsKIAl2b2lkCQkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdWFydF9wb3J0ICosIHN0cnVjdCBrdGVybWlvcyAqbmV3LAogCQkJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7Ci0Jdm9pZAkJKCpzZXRfbGRpc2MpKHN0cnVjdCB1YXJ0X3BvcnQgKik7CisJdm9pZAkJKCpzZXRfbGRpc2MpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50IG5ldyk7CiAJdm9pZAkJKCpwbSkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQgc3RhdGUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkc3RhdGUpOwogCWludAkJKCpzZXRfd2FrZSkoc3RydWN0IHVhcnRfcG9ydCAqLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwpAQCAtMjc2LDYgKzI4NSw5IEBACiAJdW5zaWduZWQgY2hhciBfX2lvbWVtCSptZW1iYXNlOwkJLyogcmVhZC93cml0ZVtid2xdICovCiAJdW5zaWduZWQgaW50CQkoKnNlcmlhbF9pbikoc3RydWN0IHVhcnRfcG9ydCAqLCBpbnQpOwogCXZvaWQJCQkoKnNlcmlhbF9vdXQpKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50LCBpbnQpOworCXZvaWQJCQkoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdWFydF9wb3J0ICosCisJCQkJICAgICAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpuZXcsCisJCQkJICAgICAgICAgICAgICAgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogCXVuc2lnbmVkIGludAkJaXJxOwkJCS8qIGlycSBudW1iZXIgKi8KIAl1bnNpZ25lZCBsb25nCQlpcnFmbGFnczsJCS8qIGlycSBmbGFncyAgKi8KIAl1bnNpZ25lZCBpbnQJCXVhcnRjbGs7CQkvKiBiYXNlIHVhcnQgY2xvY2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX21mZC5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfbWZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwNzFlMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc2VyaWFsX21mZC5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgX1NFUklBTF9NRkRfSF8KKyNkZWZpbmUgX1NFUklBTF9NRkRfSF8KKworLyogSFcgcmVnaXN0ZXIgb2Zmc2V0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgVUFSVF9GT1IJMHgwOAorI2RlZmluZSBVQVJUX1BTCQkweDBDCisjZGVmaW5lIFVBUlRfTVVMCTB4MEQKKyNkZWZpbmUgVUFSVF9ESVYJMHgwRQorCisjZGVmaW5lIEhTVV9HQkxfSUVOCTB4MAorI2RlZmluZSBIU1VfR0JMX0lTVAkweDQKKworI2RlZmluZSBIU1VfR0JMX0lOVF9CSVRfUE9SVDAJMHgwCisjZGVmaW5lIEhTVV9HQkxfSU5UX0JJVF9QT1JUMQkweDEKKyNkZWZpbmUgSFNVX0dCTF9JTlRfQklUX1BPUlQyCTB4MgorI2RlZmluZSBIU1VfR0JMX0lOVF9CSVRfSVJJCTB4MworI2RlZmluZSBIU1VfR0JMX0lOVF9CSVRfSERMQwkweDQKKyNkZWZpbmUgSFNVX0dCTF9JTlRfQklUX0RNQQkweDUKKworI2RlZmluZSBIU1VfR0JMX0lTUgkweDgKKyNkZWZpbmUgSFNVX0dCTF9ETUFTUgkweDQwMAorI2RlZmluZSBIU1VfR0JMX0RNQUlTUgkweDQwNAorCisjZGVmaW5lIEhTVV9QT1JUX1JFR19PRkZTRVQJMHg4MAorI2RlZmluZSBIU1VfUE9SVDBfUkVHX09GRlNFVAkweDgwCisjZGVmaW5lIEhTVV9QT1JUMV9SRUdfT0ZGU0VUCTB4MTAwCisjZGVmaW5lIEhTVV9QT1JUMl9SRUdfT0ZGU0VUCTB4MTgwCisjZGVmaW5lIEhTVV9QT1JUX1JFR19MRU5HVEgJMHg4MAorCisjZGVmaW5lIEhTVV9ETUFfQ0hBTlNfUkVHX09GRlNFVAkweDUwMAorI2RlZmluZSBIU1VfRE1BX0NIQU5TX1JFR19MRU5HVEgJMHg0MAorCisjZGVmaW5lIEhTVV9DSF9TUgkJMHgwCS8qIGNoYW5uZWwgc3RhdHVzIHJlZyAqLworI2RlZmluZSBIU1VfQ0hfQ1IJCTB4NAkvKiBjb250cm9sIHJlZyAqLworI2RlZmluZSBIU1VfQ0hfRENSCQkweDgJLyogZGVzY3JpcHRvciBjb250cm9sIHJlZyAqLworI2RlZmluZSBIU1VfQ0hfQlNSCQkweDEwCS8qIG1heCBmaWZvIGJ1ZmZlciBzaXplIHJlZyAqLworI2RlZmluZSBIU1VfQ0hfTU9UU1IJCTB4MTQJLyogbWluaW11bSBvY3AgdHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZSBIU1VfQ0hfRDBTQVIJCTB4MjAJLyogZGVzYyAwIHN0YXJ0IGFkZHIgKi8KKyNkZWZpbmUgSFNVX0NIX0QwVFNSCQkweDI0CS8qIGRlc2MgMCB0cmFuc2ZlciBzaXplICovCisjZGVmaW5lIEhTVV9DSF9EMVNBUgkJMHgyOAorI2RlZmluZSBIU1VfQ0hfRDFUU1IJCTB4MkMKKyNkZWZpbmUgSFNVX0NIX0QyU0FSCQkweDMwCisjZGVmaW5lIEhTVV9DSF9EMlRTUgkJMHgzNAorI2RlZmluZSBIU1VfQ0hfRDNTQVIJCTB4MzgKKyNkZWZpbmUgSFNVX0NIX0QzVFNSCQkweDNDCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfcmVnLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaAppbmRleCBjZjkzMjdjLi5jN2EwY2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtMjIxLDggKzIyMSwyNCBAQAogI2RlZmluZSBVQVJUX0ZDUl9QWEFSMTYJMHg4MAkvKiByZWNlaXZlIEZJRk8gdGhyZXNob2xkID0gMTYgKi8KICNkZWZpbmUgVUFSVF9GQ1JfUFhBUjMyCTB4YzAJLyogcmVjZWl2ZSBGSUZPIHRocmVzaG9sZCA9IDMyICovCiAKKy8qCisgKiBJbnRlbCBNSUQgb24tY2hpcCBIU1UgKEhpZ2ggU3BlZWQgVUFSVCkgZGVmaW5lZCBiaXRzCisgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzY0XzFCCTB4MDAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gMSAqLworI2RlZmluZSBVQVJUX0ZDUl9IU1VfNjRfMTZCCTB4NDAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gMTYgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzY0XzMyQgkweDgwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDMyICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV82NF81NkIJMHhjMAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSA1NiAqLwogCisjZGVmaW5lIFVBUlRfRkNSX0hTVV8xNl8xQgkweDAwCS8qIHJlY2VpdmUgRklGTyB0cmVzaG9sZCA9IDEgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzE2XzRCCTB4NDAJLyogcmVjZWl2ZSBGSUZPIHRyZXNob2xkID0gNCAqLworI2RlZmluZSBVQVJUX0ZDUl9IU1VfMTZfOEIJMHg4MAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSA4ICovCisjZGVmaW5lIFVBUlRfRkNSX0hTVV8xNl8xNEIJMHhjMAkvKiByZWNlaXZlIEZJRk8gdHJlc2hvbGQgPSAxNCAqLwogCisjZGVmaW5lIFVBUlRfRkNSX0hTVV82NEJfRklGTwkweDIwCS8qIGNob3NlIDY0IGJ5dGVzIEZJRk8gKi8KKyNkZWZpbmUgVUFSVF9GQ1JfSFNVXzE2Ql9GSUZPCTB4MDAJLyogY2hvc2UgMTYgYnl0ZXMgRklGTyAqLworCisjZGVmaW5lIFVBUlRfRkNSX0hBTEZfRU1QVF9UWEkJMHgwMAkvKiB0cmlnZ2VyIFRYX0VNUFQgSVJRIGZvciBoYWxmIGVtcHR5ICovCisjZGVmaW5lIFVBUlRfRkNSX0ZVTExfRU1QVF9UWEkJMHgwOAkvKiB0cmlnZ2VyIFRYX0VNUFQgSVJRIGZvciBmdWxsIGVtcHR5ICovCiAKIC8qCiAgKiBUaGVzZSByZWdpc3RlciBkZWZpbml0aW9ucyBhcmUgZm9yIHRoZSAxNkM5NTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfY2xrLmggYi9pbmNsdWRlL2xpbnV4L3NoX2Nsay5oCmluZGV4IDE2MzZkMWUuLjg3NWNlNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2hfY2xrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaF9jbGsuaApAQCAtMjUsNiArMjUsMTAgQEAKIAlpbnQJCQlpZDsKIAogCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CisJc3RydWN0IGNsawkJKipwYXJlbnRfdGFibGU7CS8qIGxpc3Qgb2YgcGFyZW50cyB0byAqLworCXVuc2lnbmVkIHNob3J0CQlwYXJlbnRfbnVtOwkvKiBjaG9vc2UgYmV0d2VlbiAqLworCXVuc2lnbmVkIGNoYXIJCXNyY19zaGlmdDsJLyogc291cmNlIGNsb2NrIGZpZWxkIGluIHRoZSAqLworCXVuc2lnbmVkIGNoYXIJCXNyY193aWR0aDsJLyogY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwogCXN0cnVjdCBjbGtfb3BzCQkqb3BzOwogCiAJc3RydWN0IGxpc3RfaGVhZAljaGlsZHJlbjsKQEAgLTEzOCwxMyArMTQyLDIyIEBACiBpbnQgc2hfY2xrX2RpdjRfcmVwYXJlbnRfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yLAogCQkJIHN0cnVjdCBjbGtfZGl2NF90YWJsZSAqdGFibGUpOwogCi0jZGVmaW5lIFNIX0NMS19ESVY2KF9wYXJlbnQsIF9yZWcsIF9mbGFncykJXAotewkJCQkJCVwKLQkucGFyZW50ID0gX3BhcmVudCwJCQlcCi0JLmVuYWJsZV9yZWcgPSAodm9pZCBfX2lvbWVtICopX3JlZywJXAotCS5mbGFncyA9IF9mbGFncywJCQlcCisjZGVmaW5lIFNIX0NMS19ESVY2X0VYVChfcGFyZW50LCBfcmVnLCBfZmxhZ3MsIF9wYXJlbnRzLAlcCisJCQlfbnVtX3BhcmVudHMsIF9zcmNfc2hpZnQsIF9zcmNfd2lkdGgpCVwKK3sJCQkJCQkJCVwKKwkucGFyZW50ID0gX3BhcmVudCwJCQkJCVwKKwkuZW5hYmxlX3JlZyA9ICh2b2lkIF9faW9tZW0gKilfcmVnLAkJCVwKKwkuZmxhZ3MgPSBfZmxhZ3MsCQkJCQlcCisJLnBhcmVudF90YWJsZSA9IF9wYXJlbnRzLAkJCQlcCisJLnBhcmVudF9udW0gPSBfbnVtX3BhcmVudHMsCQkJCVwKKwkuc3JjX3NoaWZ0ID0gX3NyY19zaGlmdCwJCQkJXAorCS5zcmNfd2lkdGggPSBfc3JjX3dpZHRoLAkJCQlcCiB9CiAKKyNkZWZpbmUgU0hfQ0xLX0RJVjYoX3BhcmVudCwgX3JlZywgX2ZsYWdzKQkJCVwKKwlTSF9DTEtfRElWNl9FWFQoX3BhcmVudCwgX3JlZywgX2ZsYWdzLCBOVUxMLCAwLCAwLCAwKQorCiBpbnQgc2hfY2xrX2RpdjZfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrcywgaW50IG5yKTsKK2ludCBzaF9jbGtfZGl2Nl9yZXBhcmVudF9yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGtzLCBpbnQgbnIpOwogCiAjZW5kaWYgLyogX19TSF9DTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKaW5kZXggZTE2NDI5MS4uMzk5YmU1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHVfY291bnRlci5oPgogCiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqLwogCkBAIC0yMyw3ICsyNCw3IEBACiAKIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3M7ICAgLyogSG93IG1hbnkgYmxvY2tzIGFyZSBhbGxvd2VkICovCi0JdW5zaWduZWQgbG9uZyBmcmVlX2Jsb2NrczsgIC8qIEhvdyBtYW55IGFyZSBsZWZ0IGZvciBhbGxvY2F0aW9uICovCisJc3RydWN0IHBlcmNwdV9jb3VudGVyIHVzZWRfYmxvY2tzOyAgLyogSG93IG1hbnkgYXJlIGFsbG9jYXRlZCAqLwogCXVuc2lnbmVkIGxvbmcgbWF4X2lub2RlczsgICAvKiBIb3cgbWFueSBpbm9kZXMgYXJlIGFsbG93ZWQgKi8KIAl1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOyAgLyogSG93IG1hbnkgYXJlIGxlZnQgZm9yIGFsbG9jYXRpb24gKi8KIAlzcGlubG9ja190IHN0YXRfbG9jazsJICAgIC8qIFNlcmlhbGl6ZSBzaG1lbV9zYl9pbmZvIGNoYW5nZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGQyMGQ5ZTcuLjc3ZWI2MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTM3OSw2ICsxMzc5LDExIEBACiAJcmV0dXJuIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwc2tiX25ldHdvcmtfbWF5X3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlyZXR1cm4gcHNrYl9tYXlfcHVsbChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgbGVuKTsKK30KKwogLyoKICAqIENQVXMgb2Z0ZW4gdGFrZSBhIHBlcmZvcm1hbmNlIGhpdCB3aGVuIGFjY2Vzc2luZyB1bmFsaWduZWQgbWVtb3J5CiAgKiBsb2NhdGlvbnMuIFRoZSBhY3R1YWwgcGVyZm9ybWFuY2UgaGl0IHZhcmllcywgaXQgY2FuIGJlIHNtYWxsIGlmIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCA0OWQxMjQ3Li41OTI2MGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtMjY4LDcgKzI2OCw4IEBACiAgKiBhbGxvY2F0b3Igd2hlcmUgd2UgY2FyZSBhYm91dCB0aGUgcmVhbCBwbGFjZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24KICAqIHJlcXVlc3QgY29tZXMgZnJvbS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1NMVUIpCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfU0xVQikgfHwgXAorCShkZWZpbmVkKENPTkZJR19TTEFCKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDSU5HKSkKIGV4dGVybiB2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCwgZ2ZwX3QsIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBrbWFsbG9jX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncykgXAogCV9fa21hbGxvY190cmFja19jYWxsZXIoc2l6ZSwgZmxhZ3MsIF9SRVRfSVBfKQpAQCAtMjg2LDcgKzI4Nyw4IEBACiAgKiBzdGFuZGFyZCBhbGxvY2F0b3Igd2hlcmUgd2UgY2FyZSBhYm91dCB0aGUgcmVhbCBwbGFjZSB0aGUgbWVtb3J5CiAgKiBhbGxvY2F0aW9uIHJlcXVlc3QgY29tZXMgZnJvbS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NMQUIpIHx8IGRlZmluZWQoQ09ORklHX1NMVUIpCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfU0xBQikgfHwgZGVmaW5lZChDT05GSUdfU0xVQikgfHwgXAorCShkZWZpbmVkKENPTkZJR19TTEFCKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDSU5HKSkKIGV4dGVybiB2b2lkICpfX2ttYWxsb2Nfbm9kZV90cmFja19jYWxsZXIoc2l6ZV90LCBnZnBfdCwgaW50LCB1bnNpZ25lZCBsb25nKTsKICNkZWZpbmUga21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgbm9kZSkgXAogCV9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplLCBmbGFncywgbm9kZSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCmluZGV4IDE4MTJkYWMuLjc5MWE1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKQEAgLTE0LDkgKzE0LDkgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgkJLyoga21hbGxvY19zaXplcy5oIG5lZWRzIFBBR0VfU0laRSAqLwogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgkJLyoga21hbGxvY19zaXplcy5oIG5lZWRzIEwxX0NBQ0hFX0JZVEVTICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KIAotI2lmbmRlZiBBUkNIX0tNQUxMT0NfTUlOQUxJR04KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva21lbS5oPgorCiAvKgogICogRW5mb3JjZSBhIG1pbmltdW0gYWxpZ25tZW50IGZvciB0aGUga21hbGxvYyBjYWNoZXMuCiAgKiBVc3VhbGx5LCB0aGUga21hbGxvYyBjYWNoZXMgYXJlIGNhY2hlX2xpbmVfc2l6ZSgpIGFsaWduZWQsIGV4Y2VwdCB3aGVuCkBAIC0yNiw2ICsyNiw5IEBACiAgKiBBUkNIX0tNQUxMT0NfTUlOQUxJR04gYWxsb3dzIHRoYXQuCiAgKiBOb3RlIHRoYXQgaW5jcmVhc2luZyB0aGlzIHZhbHVlIG1heSBkaXNhYmxlIHNvbWUgZGVidWcgZmVhdHVyZXMuCiAgKi8KKyNpZmRlZiBBUkNIX0RNQV9NSU5BTElHTgorI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04gQVJDSF9ETUFfTUlOQUxJR04KKyNlbHNlCiAjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTiBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCmluZGV4IDYyNjY3ZjcuLjQzODJkYjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKQEAgLTEsNyArMSw5IEBACiAjaWZuZGVmIF9fTElOVVhfU0xPQl9ERUZfSAogI2RlZmluZSBfX0xJTlVYX1NMT0JfREVGX0gKIAotI2lmbmRlZiBBUkNIX0tNQUxMT0NfTUlOQUxJR04KKyNpZmRlZiBBUkNIX0RNQV9NSU5BTElHTgorI2RlZmluZSBBUkNIX0tNQUxMT0NfTUlOQUxJR04gQVJDSF9ETUFfTUlOQUxJR04KKyNlbHNlCiAjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTiBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvdy13b3JrLmggYi9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzMzN2JmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvc2xvdy13b3JrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyogV29ya2VyIHRocmVhZCBwb29sIGZvciBzbG93IGl0ZW1zLCBzdWNoIGFzIGZpbGVzeXN0ZW0gbG9va3VwcyBvciBta2RpcnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogU2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dAotICovCi0KLSNpZm5kZWYgX0xJTlVYX1NMT1dfV09SS19ICi0jZGVmaW5lIF9MSU5VWF9TTE9XX1dPUktfSAotCi0jaWZkZWYgQ09ORklHX1NMT1dfV09SSwotCi0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLQotc3RydWN0IHNsb3dfd29yazsKLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCi1zdHJ1Y3Qgc2VxX2ZpbGU7Ci0jZW5kaWYKLQotLyoKLSAqIFRoZSBvcGVyYXRpb25zIHVzZWQgdG8gc3VwcG9ydCBzbG93IHdvcmsgaXRlbXMKLSAqLwotc3RydWN0IHNsb3dfd29ya19vcHMgewotCS8qIG93bmVyICovCi0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0KLQkvKiBnZXQgYSByZWYgb24gYSB3b3JrIGl0ZW0KLQkgKiAtIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC12ZSBpZiBub3QKLQkgKi8KLQlpbnQgKCpnZXRfcmVmKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKLQotCS8qIGRpc2NhcmQgYSByZWYgdG8gYSB3b3JrIGl0ZW0gKi8KLQl2b2lkICgqcHV0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7Ci0KLQkvKiBleGVjdXRlIGEgd29yayBpdGVtICovCi0Jdm9pZCAoKmV4ZWN1dGUpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOwotCi0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotCS8qIGRlc2NyaWJlIGEgd29yayBpdGVtIGZvciBkZWJ1Z2ZzICovCi0Jdm9pZCAoKmRlc2MpKHN0cnVjdCBzbG93X3dvcmsgKndvcmssIHN0cnVjdCBzZXFfZmlsZSAqbSk7Ci0jZW5kaWYKLX07Ci0KLS8qCi0gKiBBIHNsb3cgd29yayBpdGVtCi0gKiAtIEEgcmVmZXJlbmNlIGlzIGhlbGQgb24gdGhlIHBhcmVudCBvYmplY3QgYnkgdGhlIHRocmVhZCBwb29sIHdoZW4gaXQgaXMKLSAqICAgcXVldWVkCi0gKi8KLXN0cnVjdCBzbG93X3dvcmsgewotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsJLyogdGhlIG93bmluZyBtb2R1bGUgKi8KLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLSNkZWZpbmUgU0xPV19XT1JLX1BFTkRJTkcJMAkvKiBpdGVtIHBlbmRpbmcgKGZ1cnRoZXIpIGV4ZWN1dGlvbiAqLwotI2RlZmluZSBTTE9XX1dPUktfRVhFQ1VUSU5HCTEJLyogaXRlbSBjdXJyZW50bHkgZXhlY3V0aW5nICovCi0jZGVmaW5lIFNMT1dfV09SS19FTlFfREVGRVJSRUQJMgkvKiBpdGVtIGVucXVldWUgZGVmZXJyZWQgKi8KLSNkZWZpbmUgU0xPV19XT1JLX1ZFUllfU0xPVwkzCS8qIGl0ZW0gaXMgdmVyeSBzbG93ICovCi0jZGVmaW5lIFNMT1dfV09SS19DQU5DRUxMSU5HCTQJLyogaXRlbSBpcyBiZWluZyBjYW5jZWxsZWQsIGRvbid0IGVucXVldWUgKi8KLSNkZWZpbmUgU0xPV19XT1JLX0RFTEFZRUQJNQkvKiBpdGVtIGlzIHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayB3aXRoIGFjdGl2ZSB0aW1lciAqLwotCWNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzICpvcHM7IC8qIG9wZXJhdGlvbnMgdGFibGUgZm9yIHRoaXMgaXRlbSAqLwotCXN0cnVjdCBsaXN0X2hlYWQJbGluazsJLyogbGluayBpbiBxdWV1ZSAqLwotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLQlzdHJ1Y3QgdGltZXNwZWMJCW1hcms7CS8qIGppZmZpZXMgYXQgd2hpY2ggcXVldWVkIG9yIGV4ZWMgYmVndW4gKi8KLSNlbmRpZgotfTsKLQotc3RydWN0IGRlbGF5ZWRfc2xvd193b3JrIHsKLQlzdHJ1Y3Qgc2xvd193b3JrCXdvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Ci19OwotCi0vKioKLSAqIHNsb3dfd29ya19pbml0IC0gSW5pdGlhbGlzZSBhIHNsb3cgd29yayBpdGVtCi0gKiBAd29yazogVGhlIHdvcmsgaXRlbSB0byBpbml0aWFsaXNlCi0gKiBAb3BzOiBUaGUgb3BlcmF0aW9ucyB0byB1c2UgdG8gaGFuZGxlIHRoZSBzbG93IHdvcmsgaXRlbQotICoKLSAqIEluaXRpYWxpc2UgYSBzbG93IHdvcmsgaXRlbS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19pbml0KHN0cnVjdCBzbG93X3dvcmsgKndvcmssCi0JCQkJICBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyAqb3BzKQotewotCXdvcmstPmZsYWdzID0gMDsKLQl3b3JrLT5vcHMgPSBvcHM7Ci0JSU5JVF9MSVNUX0hFQUQoJndvcmstPmxpbmspOwotfQotCi0vKioKLSAqIHNsb3dfd29ya19pbml0IC0gSW5pdGlhbGlzZSBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0KLSAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIGluaXRpYWxpc2UKLSAqIEBvcHM6IFRoZSBvcGVyYXRpb25zIHRvIHVzZSB0byBoYW5kbGUgdGhlIHNsb3cgd29yayBpdGVtCi0gKgotICogSW5pdGlhbGlzZSBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWVkX3Nsb3dfd29ya19pbml0KHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmssCi0JCQkJCSAgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wcykKLXsKLQlpbml0X3RpbWVyKCZkd29yay0+dGltZXIpOwotCXNsb3dfd29ya19pbml0KCZkd29yay0+d29yaywgb3BzKTsKLX0KLQotLyoqCi0gKiB2c2xvd193b3JrX2luaXQgLSBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbQotICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gaW5pdGlhbGlzZQotICogQG9wczogVGhlIG9wZXJhdGlvbnMgdG8gdXNlIHRvIGhhbmRsZSB0aGUgc2xvdyB3b3JrIGl0ZW0KLSAqCi0gKiBJbml0aWFsaXNlIGEgdmVyeSBzbG93IHdvcmsgaXRlbS4gIFRoaXMgaXRlbSB3aWxsIGJlIHJlc3RyaWN0ZWQgc3VjaCB0aGF0Ci0gKiBvbmx5IGEgY2VydGFpbiBudW1iZXIgb2YgdGhlIHBvb2wgdGhyZWFkcyB3aWxsIGJlIGFibGUgdG8gZXhlY3V0ZSBpdGVtcyBvZgotICogdGhpcyB0eXBlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdnNsb3dfd29ya19pbml0KHN0cnVjdCBzbG93X3dvcmsgKndvcmssCi0JCQkJICAgY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wcykKLXsKLQl3b3JrLT5mbGFncyA9IDEgPDwgU0xPV19XT1JLX1ZFUllfU0xPVzsKLQl3b3JrLT5vcHMgPSBvcHM7Ci0JSU5JVF9MSVNUX0hFQUQoJndvcmstPmxpbmspOwotfQotCi0vKioKLSAqIHNsb3dfd29ya19pc19xdWV1ZWQgLSBEZXRlcm1pbmUgaWYgYSBzbG93IHdvcmsgaXRlbSBpcyBvbiB0aGUgd29yayBxdWV1ZQotICogd29yazogVGhlIHdvcmsgaXRlbSB0byB0ZXN0Ci0gKgotICogRGV0ZXJtaW5lIGlmIHRoZSBzcGVjaWZpZWQgc2xvdy13b3JrIGl0ZW0gaXMgb24gdGhlIHdvcmsgcXVldWUuICBUaGlzCi0gKiByZXR1cm5zIHRydWUgaWYgaXQgaXMgYWN0dWFsbHkgb24gdGhlIHF1ZXVlLgotICoKLSAqIElmIHRoZSBpdGVtIGlzIGV4ZWN1dGluZyBhbmQgaGFzIGJlZW4gbWFya2VkIGZvciByZXF1ZXVlIHdoZW4gZXhlY3V0aW9uCi0gKiBmaW5pc2hlcywgdGhlbiBmYWxzZSB3aWxsIGJlIHJldHVybmVkLgotICoKLSAqIEFueW9uZSB3aXNoaW5nIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgZXhlY3V0aW9uIGNhbiB3YWl0IG9uIHRoZQotICogU0xPV19XT1JLX0VYRUNVVElORyBiaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBzbG93X3dvcmtfaXNfcXVldWVkKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IHdvcmstPmZsYWdzOwotCXJldHVybiBmbGFncyAmIFNMT1dfV09SS19QRU5ESU5HICYmICEoZmxhZ3MgJiBTTE9XX1dPUktfRVhFQ1VUSU5HKTsKLX0KLQotZXh0ZXJuIGludCBzbG93X3dvcmtfZW5xdWV1ZShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKLWV4dGVybiB2b2lkIHNsb3dfd29ya19jYW5jZWwoc3RydWN0IHNsb3dfd29yayAqd29yayk7Ci1leHRlcm4gaW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHN0cnVjdCBtb2R1bGUgKm93bmVyKTsKLWV4dGVybiB2b2lkIHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIoc3RydWN0IG1vZHVsZSAqb3duZXIpOwotCi1leHRlcm4gaW50IGRlbGF5ZWRfc2xvd193b3JrX2VucXVldWUoc3RydWN0IGRlbGF5ZWRfc2xvd193b3JrICpkd29yaywKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXllZF9zbG93X3dvcmtfY2FuY2VsKHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmspCi17Ci0Jc2xvd193b3JrX2NhbmNlbCgmZHdvcmstPndvcmspOwotfQotCi1leHRlcm4gYm9vbCBzbG93X3dvcmtfc2xlZXBfdGlsbF90aHJlYWRfbmVlZGVkKHN0cnVjdCBzbG93X3dvcmsgKndvcmssCi0JCQkJCSAgICAgICBzaWduZWQgbG9uZyAqX3RpbWVvdXQpOwotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotZXh0ZXJuIGN0bF90YWJsZSBzbG93X3dvcmtfc3lzY3Rsc1tdOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBDT05GSUdfU0xPV19XT1JLICovCi0jZW5kaWYgLyogX0xJTlVYX1NMT1dfV09SS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggNGJhNTljZi4uNmQxNDQwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtMTAsOSArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8bGludXgva21lbXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KIAorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CisKIGVudW0gc3RhdF9pdGVtIHsKIAlBTExPQ19GQVNUUEFUSCwJCS8qIEFsbG9jYXRpb24gZnJvbSBjcHUgc2xhYiAqLwogCUFMTE9DX1NMT1dQQVRILAkJLyogQWxsb2NhdGlvbiBieSBnZXR0aW5nIGEgbmV3IGNwdSBzbGFiICovCkBAIC0xMDUsMTUgKzEwNiwxNyBAQAogLyoKICAqIEttYWxsb2Mgc3Vic3lzdGVtLgogICovCi0jaWYgZGVmaW5lZChBUkNIX0tNQUxMT0NfTUlOQUxJR04pICYmIEFSQ0hfS01BTExPQ19NSU5BTElHTiA+IDgKLSNkZWZpbmUgS01BTExPQ19NSU5fU0laRSBBUkNIX0tNQUxMT0NfTUlOQUxJR04KKyNpZiBkZWZpbmVkKEFSQ0hfRE1BX01JTkFMSUdOKSAmJiBBUkNIX0RNQV9NSU5BTElHTiA+IDgKKyNkZWZpbmUgS01BTExPQ19NSU5fU0laRSBBUkNIX0RNQV9NSU5BTElHTgogI2Vsc2UKICNkZWZpbmUgS01BTExPQ19NSU5fU0laRSA4CiAjZW5kaWYKIAogI2RlZmluZSBLTUFMTE9DX1NISUZUX0xPVyBpbG9nMihLTUFMTE9DX01JTl9TSVpFKQogCi0jaWZuZGVmIEFSQ0hfS01BTExPQ19NSU5BTElHTgorI2lmZGVmIEFSQ0hfRE1BX01JTkFMSUdOCisjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTiBBUkNIX0RNQV9NSU5BTElHTgorI2Vsc2UKICNkZWZpbmUgQVJDSF9LTUFMTE9DX01JTkFMSUdOIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcgbG9uZykKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9tYXg3MzAxLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9tYXg3MzAxLmgKaW5kZXggMzRhZjBhMy4uYmNhYTJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvbWF4NzMwMS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaApAQCAtMTEsNiArMTEsNyBAQAogCXN0cnVjdCBtdXRleAlsb2NrOwogCXU4CQlwb3J0X2NvbmZpZ1s4XTsJLyogZmllbGQgMCBpcyB1bnVzZWQgKi8KIAl1MzIJCW91dF9sZXZlbDsJLyogY2FjaGVkIG91dHB1dCBsZXZlbHMgKi8KKwl1MzIJCWlucHV0X3B1bGx1cF9hY3RpdmU7CiAJc3RydWN0IGdwaW9fY2hpcCBjaGlwOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgKCp3cml0ZSkoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKTsKQEAgLTIwLDYgKzIxLDEzIEBACiBzdHJ1Y3QgbWF4NzMwMV9wbGF0Zm9ybV9kYXRhIHsKIAkvKiBudW1iZXIgYXNzaWduZWQgdG8gdGhlIGZpcnN0IEdQSU8gKi8KIAl1bnNpZ25lZAliYXNlOworCS8qCisJICogYml0bWFzayBjb250cm9sbGluZyB0aGUgcHVsbHVwIGNvbmZpZ3VyYXRpb24sCisJICoKKwkgKiBfbm90ZV8gdGhlIDQgbG93ZXN0IGJpdHMgYXJlIHVudXNlZCwgYmVjYXVzZSB0aGUgZmlyc3QgNAorCSAqIHBvcnRzIG9mIHRoZSBjb250cm9sbGVyIGFyZSBub3QgdXNlZCwgdG9vLgorCSAqLworCXUzMgkJaW5wdXRfcHVsbHVwX2FjdGl2ZTsKIH07CiAKIGV4dGVybiBpbnQgX19tYXg3MzB4X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdGF0ZnMuaCBiL2luY2x1ZGUvbGludXgvc3RhdGZzLmgKaW5kZXggYjM0Y2M4Mi4uMDE2NmQzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdGF0ZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0YXRmcy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfU1RBVEZTX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNpbmNsdWRlIDxhc20vc3RhdGZzLmg+CiAKIHN0cnVjdCBrc3RhdGZzIHsKQEAgLTE2LDcgKzE1LDI5IEBACiAJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKIAlsb25nIGZfbmFtZWxlbjsKIAlsb25nIGZfZnJzaXplOwotCWxvbmcgZl9zcGFyZVs1XTsKKwlsb25nIGZfZmxhZ3M7CisJbG9uZyBmX3NwYXJlWzRdOwogfTsKIAorLyoKKyAqIERlZmluaXRpb25zIGZvciB0aGUgZmxhZyBpbiBmX2ZsYWcuCisgKgorICogR2VuZXJhbGx5IHRoZXNlIGZsYWdzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBNU18gZmxhZ3MgdXNlZCBpbiB0aGUgbW91bnQKKyAqIEFCSS4gIFRoZSBleGNlcHRpb24gaXMgU1RfVkFMSUQgd2hpY2ggaGFzIHRoZSBzYW1lIHZhbHVlIGFzIE1TX1JFTU9VTlQKKyAqIHdoaWNoIGRvZXNuJ3QgbWFrZSBhbnkgc2Vuc2UgZm9yIHN0YXRmcy4KKyAqLworI2RlZmluZSBTVF9SRE9OTFkJMHgwMDAxCS8qIG1vdW50IHJlYWQtb25seSAqLworI2RlZmluZSBTVF9OT1NVSUQJMHgwMDAyCS8qIGlnbm9yZSBzdWlkIGFuZCBzZ2lkIGJpdHMgKi8KKyNkZWZpbmUgU1RfTk9ERVYJMHgwMDA0CS8qIGRpc2FsbG93IGFjY2VzcyB0byBkZXZpY2Ugc3BlY2lhbCBmaWxlcyAqLworI2RlZmluZSBTVF9OT0VYRUMJMHgwMDA4CS8qIGRpc2FsbG93IHByb2dyYW0gZXhlY3V0aW9uICovCisjZGVmaW5lIFNUX1NZTkNIUk9OT1VTCTB4MDAxMAkvKiB3cml0ZXMgYXJlIHN5bmNlZCBhdCBvbmNlICovCisjZGVmaW5lIFNUX1ZBTElECTB4MDAyMAkvKiBmX2ZsYWdzIHN1cHBvcnQgaXMgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgU1RfTUFORExPQ0sJMHgwMDQwCS8qIGFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiBhbiBGUyAqLworLyogMHgwMDgwIHVzZWQgZm9yIFNUX1dSSVRFIGluIGdsaWJjICovCisvKiAweDAxMDAgdXNlZCBmb3IgU1RfQVBQRU5EIGluIGdsaWJjICovCisvKiAweDAyMDAgdXNlZCBmb3IgU1RfSU1NVVRBQkxFIGluIGdsaWJjICovCisjZGVmaW5lIFNUX05PQVRJTUUJMHgwNDAwCS8qIGRvIG5vdCB1cGRhdGUgYWNjZXNzIHRpbWVzICovCisjZGVmaW5lIFNUX05PRElSQVRJTUUJMHgwODAwCS8qIGRvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcyAqLworI2RlZmluZSBTVF9SRUxBVElNRQkweDEwMDAJLyogdXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCmluZGV4IDg3ZDdlYzAuLjViYmM0NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKQEAgLTYxLDEzICs2MSw3IEBACiAvKgogICogQ2xpZW50IGF1dGhlbnRpY2F0aW9uIGhhbmRsZQogICovCi0jZGVmaW5lIFJQQ19DUkVEQ0FDSEVfSEFTSEJJVFMJNAotI2RlZmluZSBSUENfQ1JFRENBQ0hFX05SCSgxIDw8IFJQQ19DUkVEQ0FDSEVfSEFTSEJJVFMpCi1zdHJ1Y3QgcnBjX2NyZWRfY2FjaGUgewotCXN0cnVjdCBobGlzdF9oZWFkCWhhc2h0YWJsZVtSUENfQ1JFRENBQ0hFX05SXTsKLQlzcGlubG9ja190CQlsb2NrOwotfTsKLQorc3RydWN0IHJwY19jcmVkX2NhY2hlOwogc3RydWN0IHJwY19hdXRob3BzOwogc3RydWN0IHJwY19hdXRoIHsKIAl1bnNpZ25lZCBpbnQJCWF1X2NzbGFjazsJLyogY2FsbCBjcmVkIHNpemUgZXN0aW1hdGUgKi8KQEAgLTExMiw3ICsxMDYsNyBAQAogCXZvaWQJCQkoKmNyZGVzdHJveSkoc3RydWN0IHJwY19jcmVkICopOwogCiAJaW50CQkJKCpjcm1hdGNoKShzdHJ1Y3QgYXV0aF9jcmVkICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwotCXZvaWQJCQkoKmNyYmluZCkoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOworCXN0cnVjdCBycGNfY3JlZCAqCSgqY3JiaW5kKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IHJwY19jcmVkICosIGludCk7CiAJX19iZTMyICoJCSgqY3JtYXJzaGFsKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOwogCWludAkJCSgqY3JyZWZyZXNoKShzdHJ1Y3QgcnBjX3Rhc2sgKik7CiAJX19iZTMyICoJCSgqY3J2YWxpZGF0ZSkoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKQEAgLTEyNSwxMSArMTE5LDEyIEBACiBleHRlcm4gY29uc3Qgc3RydWN0IHJwY19hdXRob3BzCWF1dGh1bml4X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcnBjX2F1dGhvcHMJYXV0aG51bGxfb3BzOwogCi12b2lkIF9faW5pdAkJcnBjX2luaXRfYXV0aHVuaXgodm9pZCk7Ci12b2lkIF9faW5pdAkJcnBjX2luaXRfZ2VuZXJpY19hdXRoKHZvaWQpOwotdm9pZCBfX2luaXQJCXJwY2F1dGhfaW5pdF9tb2R1bGUodm9pZCk7CitpbnQgX19pbml0CQlycGNfaW5pdF9hdXRodW5peCh2b2lkKTsKK2ludCBfX2luaXQJCXJwY19pbml0X2dlbmVyaWNfYXV0aCh2b2lkKTsKK2ludCBfX2luaXQJCXJwY2F1dGhfaW5pdF9tb2R1bGUodm9pZCk7CiB2b2lkIF9fZXhpdAkJcnBjYXV0aF9yZW1vdmVfbW9kdWxlKHZvaWQpOwogdm9pZCBfX2V4aXQJCXJwY19kZXN0cm95X2dlbmVyaWNfYXV0aCh2b2lkKTsKK3ZvaWQgCQkJcnBjX2Rlc3Ryb3lfYXV0aHVuaXgodm9pZCk7CiAKIHN0cnVjdCBycGNfY3JlZCAqCXJwY19sb29rdXBfY3JlZCh2b2lkKTsKIHN0cnVjdCBycGNfY3JlZCAqCXJwY19sb29rdXBfbWFjaGluZV9jcmVkKHZvaWQpOwpAQCAtMTQwLDEwICsxMzUsOCBAQAogc3RydWN0IHJwY19jcmVkICoJcnBjYXV0aF9sb29rdXBfY3JlZGNhY2hlKHN0cnVjdCBycGNfYXV0aCAqLCBzdHJ1Y3QgYXV0aF9jcmVkICosIGludCk7CiB2b2lkCQkJcnBjYXV0aF9pbml0X2NyZWQoc3RydWN0IHJwY19jcmVkICosIGNvbnN0IHN0cnVjdCBhdXRoX2NyZWQgKiwgc3RydWN0IHJwY19hdXRoICosIGNvbnN0IHN0cnVjdCBycGNfY3JlZG9wcyAqKTsKIHN0cnVjdCBycGNfY3JlZCAqCXJwY2F1dGhfbG9va3VwY3JlZChzdHJ1Y3QgcnBjX2F1dGggKiwgaW50KTsKLXZvaWQJCQlycGNhdXRoX2JpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwgaW50KTsKLXZvaWQJCQlycGNhdXRoX2dlbmVyaWNfYmluZF9jcmVkKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwgaW50KTsKK3N0cnVjdCBycGNfY3JlZCAqCXJwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBycGNfY3JlZCAqLCBpbnQpOwogdm9pZAkJCXB1dF9ycGNjcmVkKHN0cnVjdCBycGNfY3JlZCAqKTsKLXZvaWQJCQlycGNhdXRoX3VuYmluZGNyZWQoc3RydWN0IHJwY190YXNrICopOwogX19iZTMyICoJCXJwY2F1dGhfbWFyc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7CiBfX2JlMzIgKgkJcnBjYXV0aF9jaGVja3ZlcmYoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKIGludAkJCXJwY2F1dGhfd3JhcF9yZXEoc3RydWN0IHJwY190YXNrICp0YXNrLCBreGRycHJvY190IGVuY29kZSwgdm9pZCAqcnFzdHAsIF9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jYWNoZS5oCmluZGV4IDZmNTJiNGQuLjdiZjNlODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2FjaGUuaApAQCAtMTkyLDYgKzE5Miw3IEBACiBleHRlcm4gdm9pZCBjYWNoZV9mbHVzaCh2b2lkKTsKIGV4dGVybiB2b2lkIGNhY2hlX3B1cmdlKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmRldGFpbCk7CiAjZGVmaW5lIE5FVkVSICgweDdGRkZGRkZGKQorZXh0ZXJuIHZvaWQgX19pbml0IGNhY2hlX2luaXRpYWxpemUodm9pZCk7CiBleHRlcm4gaW50IGNhY2hlX3JlZ2lzdGVyKHN0cnVjdCBjYWNoZV9kZXRhaWwgKmNkKTsKIGV4dGVybiB2b2lkIGNhY2hlX3VucmVnaXN0ZXIoc3RydWN0IGNhY2hlX2RldGFpbCAqY2QpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKaW5kZXggOGVkOTY0Mi4uNTY5ZGM3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaApAQCAtMTMxLDYgKzEzMSw3IEBACiBzdHJ1Y3QgcnBjX2NsbnQgKnJwY19jbG9uZV9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOwogdm9pZAkJcnBjX3NodXRkb3duX2NsaWVudChzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQlycGNfcmVsZWFzZV9jbGllbnQoc3RydWN0IHJwY19jbG50ICopOwordm9pZAkJcnBjX3Rhc2tfcmVsZWFzZV9jbGllbnQoc3RydWN0IHJwY190YXNrICopOwogCiBpbnQJCXJwY2JfcmVnaXN0ZXIodTMyLCB1MzIsIGludCwgdW5zaWduZWQgc2hvcnQpOwogaW50CQlycGNiX3Y0X3JlZ2lzdGVyKGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKQEAgLTE0OCw4ICsxNDksOCBAQAogCQkJICAgICAgY29uc3Qgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGludCBmbGFncyk7CiBzdHJ1Y3QgcnBjX3Rhc2sgKnJwY19jYWxsX251bGwoc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsCiAJCQkgICAgICAgaW50IGZsYWdzKTsKLXZvaWQJCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKik7Ci12b2lkCQlycGNfcmVzdGFydF9jYWxsKHN0cnVjdCBycGNfdGFzayAqKTsKK2ludAkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHN0cnVjdCBycGNfdGFzayAqKTsKK2ludAkJcnBjX3Jlc3RhcnRfY2FsbChzdHJ1Y3QgcnBjX3Rhc2sgKik7CiB2b2lkCQlycGNfc2V0YnVmc2l6ZShzdHJ1Y3QgcnBjX2NsbnQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogc2l6ZV90CQlycGNfbWF4X3BheWxvYWQoc3RydWN0IHJwY19jbG50ICopOwogdm9pZAkJcnBjX2ZvcmNlX3JlYmluZChzdHJ1Y3QgcnBjX2NsbnQgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaAppbmRleCA3YmU0ZjNhLi44ODUxM2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogCQkJCWNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKm9wcyk7CiB2b2lkCQlycGNfcHV0X3Rhc2soc3RydWN0IHJwY190YXNrICopOwogdm9pZAkJcnBjX2V4aXRfdGFzayhzdHJ1Y3QgcnBjX3Rhc2sgKik7Cit2b2lkCQlycGNfZXhpdChzdHJ1Y3QgcnBjX3Rhc2sgKiwgaW50KTsKIHZvaWQJCXJwY19yZWxlYXNlX2NhbGxkYXRhKGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKiwgdm9pZCAqKTsKIHZvaWQJCXJwY19raWxsYWxsX3Rhc2tzKHN0cnVjdCBycGNfY2xudCAqKTsKIHZvaWQJCXJwY19leGVjdXRlKHN0cnVjdCBycGNfdGFzayAqKTsKQEAgLTI0MSwxMiArMjQyLDYgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnBjaW9kX3dvcmtxdWV1ZTsKIHZvaWQJCXJwY19wcmVwYXJlX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJwY19leGl0KHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IHN0YXR1cykKLXsKLQl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7Ci0JdGFzay0+dGtfYWN0aW9uID0gcnBjX2V4aXRfdGFzazsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJcmV0dXJuIF9fcnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayh0YXNrLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAppbmRleCBiNTE0NzAzLi5mZjVhNzdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCkBAIC02NCw2ICs2NCw3IEBACiAJICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBwYXJ0CiAJICovCiAJc3RydWN0IHJwY190YXNrICoJcnFfdGFzazsJLyogUlBDIHRhc2sgZGF0YSAqLworCXN0cnVjdCBycGNfY3JlZCAqCXJxX2NyZWQ7CS8qIEJvdW5kIGNyZWQgKi8KIAlfX2JlMzIJCQlycV94aWQ7CQkvKiByZXF1ZXN0IFhJRCAqLwogCWludAkJCXJxX2Nvbmc7CS8qIGhhcyBpbmNyZW1lbnRlZCB4cHJ0LT5jb25nICovCiAJdTMyCQkJcnFfc2Vxbm87CS8qIGdzcyBzZXEgbm8uIHVzZWQgb24gcmVxLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBmZjRhY2VhLi4yZmVlNTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMjQ0LDggKzI0NCw3IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlX3pvbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKIAkJCQkJCXVuc2lnbmVkIGludCBzd2FwcGluZXNzLAotCQkJCQkJc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJCQlpbnQgbmlkKTsKKwkJCQkJCXN0cnVjdCB6b25lICp6b25lKTsKIGV4dGVybiBpbnQgX19pc29sYXRlX2xydV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbW9kZSwgaW50IGZpbGUpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7CkBAIC0zMTYsNyArMzE1LDYgQEAKIGV4dGVybiBsb25nIHRvdGFsX3N3YXBfcGFnZXM7CiBleHRlcm4gdm9pZCBzaV9zd2FwaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqKTsKIGV4dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlKHZvaWQpOwotZXh0ZXJuIHN3cF9lbnRyeV90IGdldF9zd2FwX3BhZ2Vfb2ZfdHlwZShpbnQpOwogZXh0ZXJuIGludCB2YWxpZF9zd2FwaGFuZGxlcyhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiBpbnQgYWRkX3N3YXBfY291bnRfY29udGludWF0aW9uKHN3cF9lbnRyeV90LCBnZnBfdCk7CiBleHRlcm4gdm9pZCBzd2FwX3NobWVtX2FsbG9jKHN3cF9lbnRyeV90KTsKQEAgLTMzMyw2ICszMzEsMTMgQEAKIGV4dGVybiBpbnQgdHJ5X3RvX2ZyZWVfc3dhcChzdHJ1Y3QgcGFnZSAqKTsKIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvOwogCisjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCit2b2lkIGhpYmVybmF0aW9uX2ZyZWV6ZV9zd2FwKHZvaWQpOwordm9pZCBoaWJlcm5hdGlvbl90aGF3X3N3YXAodm9pZCk7Citzd3BfZW50cnlfdCBnZXRfc3dhcF9mb3JfaGliZXJuYXRpb24oaW50IHR5cGUpOwordm9pZCBzd2FwX2ZyZWVfZm9yX2hpYmVybmF0aW9uKHN3cF9lbnRyeV90IHZhbCk7CisjZW5kaWYKKwogLyogbGludXgvbW0vdGhyYXNoLmMgKi8KIGV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICpzd2FwX3Rva2VuX21tOwogZXh0ZXJuIHZvaWQgZ3JhYl9zd2FwX3Rva2VuKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKaW5kZXggMTNlYmI1NC4uMWI2N2JkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaApAQCAtMzUsNiArMzUsNyBAQAogc3RydWN0IG9sZF91dHNuYW1lOwogc3RydWN0IHBvbGxmZDsKIHN0cnVjdCBybGltaXQ7CitzdHJ1Y3QgcmxpbWl0NjQ7CiBzdHJ1Y3QgcnVzYWdlOwogc3RydWN0IHNjaGVkX3BhcmFtOwogc3RydWN0IHNlbF9hcmdfc3RydWN0OwpAQCAtMTY3LDcgKzE2OCw2IEBACiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl8jI3NuYW1lLAkJXAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0XyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQkJLmV4aXRfZmllbGRzCT0gTElTVF9IRUFEX0lOSVQoX19zeXNjYWxsX21ldGFfIyNzbmFtZS5leGl0X2ZpZWxkcyksIFwKIAl9OwogCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCVwKQEAgLTE4Miw3ICsxODIsNiBAQAogCQkuZW50ZXJfZXZlbnQJPSAmZXZlbnRfZW50ZXJfXyMjc25hbWUsCVwKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF9fIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQkJLmV4aXRfZmllbGRzCT0gTElTVF9IRUFEX0lOSVQoX19zeXNjYWxsX21ldGFfXyMjc25hbWUuZXhpdF9maWVsZHMpLCBcCiAJfTsJCQkJCQkJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQogI2Vsc2UKQEAgLTY0Niw2ICs2NDUsOSBAQAogI2VuZGlmCiBhc21saW5rYWdlIGxvbmcgc3lzX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCiAJCQkJc3RydWN0IHJsaW1pdCBfX3VzZXIgKnJsaW0pOworYXNtbGlua2FnZSBsb25nIHN5c19wcmxpbWl0NjQocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCQkJY29uc3Qgc3RydWN0IHJsaW1pdDY0IF9fdXNlciAqbmV3X3JsaW0sCisJCQkJc3RydWN0IHJsaW1pdDY0IF9fdXNlciAqb2xkX3JsaW0pOwogYXNtbGlua2FnZSBsb25nIHN5c19nZXRydXNhZ2UoaW50IHdobywgc3RydWN0IHJ1c2FnZSBfX3VzZXIgKnJ1KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdW1hc2soaW50IG1hc2spOwogCkBAIC04MTMsNiArODE1LDEwIEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3Bwb2xsKHN0cnVjdCBwb2xsZmQgX191c2VyICosIHVuc2lnbmVkIGludCwKIAkJCSAgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqLCBjb25zdCBzaWdzZXRfdCBfX3VzZXIgKiwKIAkJCSAgc2l6ZV90KTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZmFub3RpZnlfaW5pdCh1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBldmVudF9mX2ZsYWdzKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZmFub3RpZnlfbWFyayhpbnQgZmFub3RpZnlfZmQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgIHU2NCBtYXNrLCBpbnQgZmQsCisJCQkJICBjb25zdCBjaGFyICBfX3VzZXIgKnBhdGhuYW1lKTsKIAogaW50IGtlcm5lbF9leGVjdmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNmcy5oIGIvaW5jbHVkZS9saW51eC9zeXNmcy5oCmluZGV4IGYyNjk0ZWIuLjNjOTIxMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKQEAgLTIyLDE0ICsyMiw4IEBACiBzdHJ1Y3QgbW9kdWxlOwogZW51bSBrb2JqX25zX3R5cGU7CiAKLS8qIEZJWE1FCi0gKiBUaGUgKm93bmVyIGZpZWxkIGlzIG5vIGxvbmdlciB1c2VkLgotICogeDg2IHRyZWUgaGFzIGJlZW4gY2xlYW5lZCB1cC4gVGhlIG93bmVyCi0gKiBhdHRyaWJ1dGUgaXMgc3RpbGwgbGVmdCBmb3Igb3RoZXIgYXJjaGVzLgotICovCiBzdHJ1Y3QgYXR0cmlidXRlIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJbW9kZV90CQkJbW9kZTsKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogCXN0cnVjdCBsb2NrX2NsYXNzX2tleQkqa2V5OwpAQCAtMTM2LDggKzEzMCw4IEBACiAJCQkJICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cik7CiBpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NyZWF0ZV9maWxlcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cik7Ci1pbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NobW9kX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICBtb2RlX3QgbW9kZSk7CitpbnQgX19tdXN0X2NoZWNrIHN5c2ZzX2NobW9kX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBtb2RlX3QgbW9kZSk7CiB2b2lkIHN5c2ZzX3JlbW92ZV9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cik7CiAKQEAgLTIyNSw3ICsyMTksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jaG1vZF9maWxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIG1vZGVfdCBtb2RlKQorCQkJCSAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIG1vZGVfdCBtb2RlKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXN2X2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c3ZfZnMuaAppbmRleCA5NjQxMTMwLi5lNDdkNmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c3ZfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c3ZfZnMuaApAQCAtMTQ4LDYgKzE0OCwxNyBAQAogCWNoYXIgICAgc19mbmFtZVs2XTsgICAgIC8qIGZpbGUgc3lzdGVtIG5hbWUgKi8KIAljaGFyICAgIHNfZnBhY2tbNl07ICAgICAvKiBmaWxlIHN5c3RlbSBwYWNrIG5hbWUgKi8KIH07CisvKiBDb25zdGFudHMgdG8gYWlkIHNhbml0eSBjaGVja2luZyAqLworLyogVGhpcyBpcyBub3QgYSBoYXJkIGxpbWl0LCBub3IgZW5mb3JjZWQgYnkgdjcga2VybmVsLiBJdCdzIGFjdHVhbGx5IGp1c3QKKyAqIHRoZSBsaW1pdCB1c2VkIGJ5IFNldmVudGggRWRpdGlvbidzIGxzLCB0aG91Z2ggaXMgaGlnaCBlbm91Z2ggdG8gYXNzdW1lCisgKiB0aGF0IG5vIHJlYXNvbmFibGUgZmlsZSBzeXN0ZW0gd291bGQgaGF2ZSB0aGF0IG11Y2ggZW50cmllcyBpbiByb290CisgKiBkaXJlY3RvcnkuIFRodXMsIGlmIHdlIHNlZSBhbnl0aGluZyBoaWdoZXIsIHdlIGp1c3QgcHJvYmFibHkgZ290IHRoZQorICogZW5kaWFubmVzIHdyb25nLiAqLworI2RlZmluZSBWN19ORklMRVMJMTAyNAorLyogVGhlIGRpc2sgYWRkcmVzc2VzIGFyZSB0aHJlZS1ieXRlIChkZXNwaXRlIGRpcmVjdCBibG9jayBhZGRyZXNzZXMgYmVpbmcKKyAqIGFsaWduZWQgd29yZC13aXNlIGluIGlub2RlKS4gSWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpcyBub24temVybywKKyAqIHNvbWV0aGluZyBpcyBtb3N0IGxpa2VseSB3cm9uZyAobm90IGEgZmlsZXN5c3RlbSwgYmFkIGJ5dGVzZXgpLiAqLworI2RlZmluZSBWN19NQVhTSVpFCTB4MDBmZmZmZmYKIAogLyogQ29oZXJlbnQgc3VwZXItYmxvY2sgZGF0YSBvbiBkaXNrICovCiAjZGVmaW5lIENPSF9OSUNJTk9ECTEwMAkvKiBudW1iZXIgb2YgaW5vZGUgY2FjaGUgZW50cmllcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCBlYTM1NTlmMC4uY2IzNGUzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTc2LDkgKzc2LDI1IEBACiAJCQkgICAgY29uc3QgdW5zaWduZWQgaW50IG1pbiwgY29uc3QgdW5zaWduZWQgaW50IHNlYyk7CiAKIGV4dGVybiB2b2lkIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHRpbWVfdCBzZWMsIHM2NCBuc2VjKTsKKworLyoKKyAqIHRpbWVzcGVjX2FkZF9zYWZlIGFzc3VtZXMgYm90aCB2YWx1ZXMgYXJlIHBvc2l0aXZlIGFuZCBjaGVja3MKKyAqIGZvciBvdmVyZmxvdy4gSXQgd2lsbCByZXR1cm4gVElNRV9UX01BWCBpZiB0aGUgcmV1dHJuIHdvdWxkIGJlCisgKiBzbWFsbGVyIHRoZW4gZWl0aGVyIG9mIHRoZSBhcmd1bWVudHMuCisgKi8KIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgdGltZXNwZWNfYWRkX3NhZmUoY29uc3Qgc3RydWN0IHRpbWVzcGVjIGxocywKIAkJCQkJIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyByaHMpOwogCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbWVzcGVjIHRpbWVzcGVjX2FkZChzdHJ1Y3QgdGltZXNwZWMgbGhzLAorCQkJCQkJc3RydWN0IHRpbWVzcGVjIHJocykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHNfZGVsdGE7CisJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnRzX2RlbHRhLCBsaHMudHZfc2VjICsgcmhzLnR2X3NlYywKKwkJCQlsaHMudHZfbnNlYyArIHJocy50dl9uc2VjKTsKKwlyZXR1cm4gdHNfZGVsdGE7Cit9CisKIC8qCiAgKiBzdWIgPSBsaHMgLSByaHMsIGluIG5vcm1hbGl6ZWQgZm9ybQogICovCkBAIC05Nyw4ICsxMTMsNiBAQAogI2RlZmluZSB0aW1lc3BlY192YWxpZCh0cykgXAogCSgoKHRzKS0+dHZfc2VjID49IDApICYmICgoKHVuc2lnbmVkIGxvbmcpICh0cyktPnR2X25zZWMpIDwgTlNFQ19QRVJfU0VDKSkKIAotZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyB4dGltZTsKLWV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgd2FsbF90b19tb25vdG9uaWM7CiBleHRlcm4gc2VxbG9ja190IHh0aW1lX2xvY2s7CiAKIGV4dGVybiB2b2lkIHJlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKTsKQEAgLTExMCw3ICsxMjQsOCBAQAogCiB1bnNpZ25lZCBsb25nIGdldF9zZWNvbmRzKHZvaWQpOwogc3RydWN0IHRpbWVzcGVjIGN1cnJlbnRfa2VybmVsX3RpbWUodm9pZCk7Ci1zdHJ1Y3QgdGltZXNwZWMgX19jdXJyZW50X2tlcm5lbF90aW1lKHZvaWQpOyAvKiBkb2VzIG5vdCBob2xkIHh0aW1lX2xvY2sgKi8KK3N0cnVjdCB0aW1lc3BlYyBfX2N1cnJlbnRfa2VybmVsX3RpbWUodm9pZCk7IC8qIGRvZXMgbm90IHRha2UgeHRpbWVfbG9jayAqLworc3RydWN0IHRpbWVzcGVjIF9fZ2V0X3dhbGxfdG9fbW9ub3RvbmljKHZvaWQpOyAvKiBkb2VzIG5vdCB0YWtlIHh0aW1lX2xvY2sgKi8KIHN0cnVjdCB0aW1lc3BlYyBnZXRfbW9ub3RvbmljX2NvYXJzZSh2b2lkKTsKIAogI2RlZmluZSBDVVJSRU5UX1RJTUUJCShjdXJyZW50X2tlcm5lbF90aW1lKCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKaW5kZXggYzQ0ZGY1MC4uNjRlMDg0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaApAQCAtMTAzLDYgKzEwMyw3IEBACiAJCQkJfCAxKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXAogCQkJCXwgMCpTRF9QUkVGRVJfU0lCTElORwkJCVwKKwkJCQl8IGFyY2hfc2Rfc2libGluZ19hc3ltX3BhY2tpbmcoKQlcCiAJCQkJLAkJCQkJXAogCS5sYXN0X2JhbGFuY2UJCT0gamlmZmllcywJCQkJXAogCS5iYWxhbmNlX2ludGVydmFsCT0gMSwJCQkJCVwKQEAgLTI5MSwxMCArMjkyLDYgQEAKIAogI2Vsc2UJLyogIUNPTkZJR19IQVZFX01FTU9SWUxFU1NfTk9ERVMgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hX21lbShpbnQgbm9kZSkge30KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9jcHVfbnVtYV9tZW0oaW50IGNwdSwgaW50IG5vZGUpIHt9Ci0KICNpZm5kZWYgbnVtYV9tZW1faWQKIC8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgbmVhcmVzdCBOb2RlIHdpdGggbWVtb3J5ICovCiBzdGF0aWMgaW5saW5lIGludCBudW1hX21lbV9pZCh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggOTMxMDc4Yi4uMTQzN2RhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9sZGlzYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMTc5LDYgKzE4MCw3IEBACiAjZGVmaW5lIExfRkxVU0hPKHR0eSkJX0xfRkxBRygodHR5KSwgRkxVU0hPKQogI2RlZmluZSBMX1BFTkRJTih0dHkpCV9MX0ZMQUcoKHR0eSksIFBFTkRJTikKICNkZWZpbmUgTF9JRVhURU4odHR5KQlfTF9GTEFHKCh0dHkpLCBJRVhURU4pCisjZGVmaW5lIExfRVhUUFJPQyh0dHkpCV9MX0ZMQUcoKHR0eSksIEVYVFBST0MpCiAKIHN0cnVjdCBkZXZpY2U7CiBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdDsKQEAgLTQxNSw2ICs0MTcsNyBAQAogZXh0ZXJuIGludCB0dHlfc2lnbmFsKGludCBzaWcsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIGV4dGVybiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXBfbG9ja2VkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXBfc2VsZih2b2lkKTsKIGV4dGVybiB2b2lkIHR0eV91bmhhbmd1cChzdHJ1Y3QgZmlsZSAqZmlscCk7CiBleHRlcm4gaW50IHR0eV9odW5nX3VwX3Aoc3RydWN0IGZpbGUgKmZpbHApOwpAQCAtNTUyLDYgKzU1NSw5IEBACiB9CiAjZW5kaWYKIAorLyogdHR5X2lvLmMgKi8KK2V4dGVybiBpbnQgX19pbml0IHR0eV9pbml0KHZvaWQpOworCiAvKiB0dHlfaW9jdGwuYyAqLwogZXh0ZXJuIGludCBuX3R0eV9pb2N0bF9oZWxwZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CkBAIC01NzIsNSArNTc4LDU0IEBACiBleHRlcm4gbG9uZyB2dF9jb21wYXRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIAorLyogdHR5X211dGV4LmMgKi8KKy8qIGZ1bmN0aW9ucyBmb3IgcHJlcGFyYXRpb24gb2YgQktMIHJlbW92YWwgKi8KK2V4dGVybiB2b2lkIF9fbG9ja2Z1bmMgdHR5X2xvY2sodm9pZCkgX19hY3F1aXJlcyh0dHlfbG9jayk7CitleHRlcm4gdm9pZCBfX2xvY2tmdW5jIHR0eV91bmxvY2sodm9pZCkgX19yZWxlYXNlcyh0dHlfbG9jayk7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpfX2JpZ190dHlfbXV0ZXhfb3duZXI7CisjZGVmaW5lIHR0eV9sb2NrZWQoKQkJKGN1cnJlbnQgPT0gX19iaWdfdHR5X211dGV4X293bmVyKQorCisvKgorICogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3R0eSAtLSB3YWl0IGZvciBhIGNvbmRpdGlvbiB3aXRoIHRoZSB0dHkgbG9jayBoZWxkCisgKgorICogVGhlIGNvbmRpdGlvbiB3ZSBhcmUgd2FpdGluZyBmb3IgbWlnaHQgdGFrZSBhIGxvbmcgdGltZSB0bworICogYmVjb21lIHRydWUsIG9yIG1pZ2h0IGRlcGVuZCBvbiBhbm90aGVyIHRocmVhZCB0YWtpbmcgdGhlCisgKiBCVE0uIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRvIGRyb3AgdGhlIEJUTSB0byBndWFyYW50ZWUKKyAqIGZvcndhcmQgcHJvZ3Jlc3MuIFRoaXMgaXMgYSBsZWZ0b3ZlciBmcm9tIHRoZSBjb252ZXJzaW9uCisgKiBmcm9tIHRoZSBCS0wgYW5kIHNob3VsZCBldmVudHVhbGx5IGdldCByZW1vdmVkIGFzIHRoZSBCVE0KKyAqIGZhbGxzIG91dCBvZiB1c2UuCisgKgorICogRG8gbm90IHVzZSBpbiBuZXcgY29kZS4KKyAqLworI2RlZmluZSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdHR5KHdxLCBjb25kaXRpb24pCQkJXAorKHsJCQkJCQkJCQlcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJXAorCWlmICghKGNvbmRpdGlvbikpIHsJCQkJCQlcCisJCV9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3R0eSh3cSwgY29uZGl0aW9uLCBfX3JldCk7CVwKKwl9CQkJCQkJCQlcCisJX19yZXQ7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3R0eSh3cSwgY29uZGl0aW9uLCByZXQpCQlcCitkbyB7CQkJCQkJCQkJXAorCURFRklORV9XQUlUKF9fd2FpdCk7CQkJCQkJXAorCQkJCQkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlwcmVwYXJlX3RvX3dhaXQoJndxLCAmX193YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwlcCisJCWlmIChjb25kaXRpb24pCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CQkJCVwKKwkJCXR0eV91bmxvY2soKTsJCQkJCVwKKwkJCXNjaGVkdWxlKCk7CQkJCQlcCisJCQl0dHlfbG9jaygpOwkJCQkJXAorCQkJY29udGludWU7CQkJCQlcCisJCX0JCQkJCQkJXAorCQlyZXQgPSAtRVJFU1RBUlRTWVM7CQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWZpbmlzaF93YWl0KCZ3cSwgJl9fd2FpdCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCAzMzFkOGJhLi4wMWEwODJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0yMDAsNiArMjAwLDE4IEBACiB9IGF0b21pYzY0X3Q7CiAjZW5kaWYKIAorc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCitzdHJ1Y3QgaGxpc3RfaGVhZCB7CisJc3RydWN0IGhsaXN0X25vZGUgKmZpcnN0OworfTsKKworc3RydWN0IGhsaXN0X25vZGUgeworCXN0cnVjdCBobGlzdF9ub2RlICpuZXh0LCAqKnBwcmV2OworfTsKKwogc3RydWN0IHVzdGF0IHsKIAlfX2tlcm5lbF9kYWRkcl90CWZfdGZyZWU7CiAJX19rZXJuZWxfaW5vX3QJCWZfdGlub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDU5MjJhOC4uMzVmZTZhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xMjcsNiArMTI3LDggQEAKICAqICAgICAgcXVldWVkIHJlc2V0IHNvIHRoYXQgdXNiX2NhbmNlbF9xdWV1ZWRfcmVzZXQoKSBkb2Vzbid0IHRyeSB0bwogICogICAgICByZW1vdmUgZnJvbSB0aGUgd29ya3F1ZXVlIHdoZW4gcnVubmluZyBpbnNpZGUgdGhlIHdvcmtlcgogICogICAgICB0aHJlYWQuIFNlZSBfX3VzYl9xdWV1ZV9yZXNldF9kZXZpY2UoKS4KKyAqIEByZXNldHRpbmdfZGV2aWNlOiBVU0IgY29yZSByZXNldCB0aGUgZGV2aWNlLCBzbyB1c2UgYWx0IHNldHRpbmcgMCBhcworICoJY3VycmVudDsgbmVlZHMgYmFuZHdpZHRoIGFsbG9jIGFmdGVyIHJlc2V0LgogICoKICAqIFVTQiBkZXZpY2UgZHJpdmVycyBhdHRhY2ggdG8gaW50ZXJmYWNlcyBvbiBhIHBoeXNpY2FsIGRldmljZS4gIEVhY2gKICAqIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgYSBzaW5nbGUgaGlnaCBsZXZlbCBmdW5jdGlvbiwgc3VjaCBhcyBmZWVkaW5nCkBAIC04NDMsNyArODQ1LDcgQEAKIAogCXZvaWQgKCpkaXNjb25uZWN0KSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCi0JaW50ICgqaW9jdGwpIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsCisJaW50ICgqdW5sb2NrZWRfaW9jdGwpIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGNvZGUsCiAJCQl2b2lkICpidWYpOwogCiAJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CkBAIC0xMDE1LDYgKzEwMTcsNyBAQAogICoJaXMgYSBkaWZmZXJlbnQgZW5kcG9pbnQgKGFuZCBwaXBlKSBmcm9tICJvdXQiIGVuZHBvaW50IHR3by4KICAqCVRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gY29udHJvbHMgdGhlIGV4aXN0ZW5jZSwgdHlwZSwgYW5kCiAgKgltYXhpbXVtIHBhY2tldCBzaXplIG9mIGFueSBnaXZlbiBlbmRwb2ludC4KKyAqIEBzdHJlYW1faWQ6IHRoZSBlbmRwb2ludCdzIHN0cmVhbSBJRCBmb3IgYnVsayBzdHJlYW1zCiAgKiBAZGV2OiBJZGVudGlmaWVzIHRoZSBVU0IgZGV2aWNlIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3QuCiAgKiBAc3RhdHVzOiBUaGlzIGlzIHJlYWQgaW4gbm9uLWlzbyBjb21wbGV0aW9uIGZ1bmN0aW9ucyB0byBnZXQgdGhlCiAgKglzdGF0dXMgb2YgdGhlIHBhcnRpY3VsYXIgcmVxdWVzdC4gIElTTyByZXF1ZXN0cyBvbmx5IHVzZSBpdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8tdjIuaCBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLXYyLmgKaW5kZXggMzgzYjk0Yi4uOTY0Y2I2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8tdjIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby12Mi5oCkBAIC0xOCw2ICsxOCwyMSBAQAogLyogdjEuMCBhbmQgdjIuMCBvZiB0aGlzIHN0YW5kYXJkIGhhdmUgbWFueSB0aGluZ3MgaW4gY29tbW9uLiBGb3IgdGhlIHJlc3QKICAqIG9mIHRoZSBkZWZpbml0aW9ucywgcGxlYXNlIHJlZmVyIHRvIGF1ZGlvLmggKi8KIAorLyoKKyAqIGJtQ29udHJvbCBmaWVsZCBkZWNvZGVycworICoKKyAqIEZyb20gdGhlIFVTQiBBdWRpbyBzcGVjIHYyLjA6CisgKgorICogICBibWFDb250cm9scygpIGlzIGEgKGNoKzEpLWVsZW1lbnQgYXJyYXkgb2YgNC1ieXRlIGJpdG1hcHMsCisgKiAgIGVhY2ggY29udGFpbmluZyBhIHNldCBvZiBiaXQgcGFpcnMuIElmIGEgQ29udHJvbCBpcyBwcmVzZW50LAorICogICBpdCBtdXN0IGJlIEhvc3QgcmVhZGFibGUuIElmIGEgY2VydGFpbiBDb250cm9sIGlzIG5vdAorICogICBwcmVzZW50IHRoZW4gdGhlIGJpdCBwYWlyIG11c3QgYmUgc2V0IHRvIDBiMDAuCisgKiAgIElmIGEgQ29udHJvbCBpcyBwcmVzZW50IGJ1dCByZWFkLW9ubHksIHRoZSBiaXQgcGFpciBtdXN0IGJlCisgKiAgIHNldCB0byAwYjAxLiBJZiBhIENvbnRyb2wgaXMgYWxzbyBIb3N0IHByb2dyYW1tYWJsZSwgdGhlIGJpdAorICogICBwYWlyIG11c3QgYmUgc2V0IHRvIDBiMTEuIFRoZSB2YWx1ZSAwYjEwIGlzIG5vdCBhbGxvd2VkLgorICoKKyAqLworCiBzdGF0aWMgaW5saW5lIGJvb2wgdWFjMl9jb250cm9sX2lzX3JlYWRhYmxlKHUzMiBibUNvbnRyb2xzLCB1OCBjb250cm9sKQogewogCXJldHVybiAoYm1Db250cm9scyA+PiAoY29udHJvbCAqIDIpKSAmIDB4MTsKQEAgLTEyMSw3ICsxMzYsNyBAQAogCiAvKiA0LjkuMiBDbGFzcy1TcGVjaWZpYyBBUyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwogCi1zdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YyIHsKK3N0cnVjdCB1YWMyX2FzX2hlYWRlcl9kZXNjcmlwdG9yIHsKIAlfX3U4IGJMZW5ndGg7CiAJX191OCBiRGVzY3JpcHRvclR5cGU7CiAJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAppbmRleCBjNTEyMDBjLi5hNTRiODI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKQEAgLTM5LDggKzM5LDggQEAKICNkZWZpbmUgVUFDX01JWEVSX1VOSVQJCQkweDA0CiAjZGVmaW5lIFVBQ19TRUxFQ1RPUl9VTklUCQkweDA1CiAjZGVmaW5lIFVBQ19GRUFUVVJFX1VOSVQJCTB4MDYKLSNkZWZpbmUgVUFDX1BST0NFU1NJTkdfVU5JVF9WMQkJMHgwNwotI2RlZmluZSBVQUNfRVhURU5TSU9OX1VOSVRfVjEJCTB4MDgKKyNkZWZpbmUgVUFDMV9QUk9DRVNTSU5HX1VOSVQJCTB4MDcKKyNkZWZpbmUgVUFDMV9FWFRFTlNJT05fVU5JVAkJMHgwOAogCiAvKiBBLjYgQXVkaW8gQ2xhc3MtU3BlY2lmaWMgQVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KICNkZWZpbmUgVUFDX0FTX0dFTkVSQUwJCQkweDAxCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogLyogVGVybWluYWwgQ29udHJvbCBTZWxlY3RvcnMgKi8KIC8qIDQuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLwotc3RydWN0IHVhY19hY19oZWFkZXJfZGVzY3JpcHRvcl92MSB7CitzdHJ1Y3QgdWFjMV9hY19oZWFkZXJfZGVzY3JpcHRvciB7CiAJX191OCAgYkxlbmd0aDsJCQkvKiA4ICsgbiAqLwogCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8qIFVTQl9EVF9DU19JTlRFUkZBQ0UgKi8KIAlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8qIFVBQ19NU19IRUFERVIgKi8KQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAvKiBBcyBhYm92ZSwgYnV0IG1vcmUgdXNlZnVsIGZvciBkZWZpbmluZyB5b3VyIG93biBkZXNjcmlwdG9yczogKi8KICNkZWZpbmUgREVDTEFSRV9VQUNfQUNfSEVBREVSX0RFU0NSSVBUT1IobikJCQlcCi1zdHJ1Y3QgdWFjX2FjX2hlYWRlcl9kZXNjcmlwdG9yX3YxXyMjbiB7CQkJXAorc3RydWN0IHVhYzFfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQlcCiAJX191OCAgYkxlbmd0aDsJCQkJCQlcCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJCQkJXAogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJCQkJXApAQCAtMjA1LDcgKzIwNSw3IEBACiAjZGVmaW5lIFVBQ19URVJNSU5BTF9DU19DT1BZX1BST1RFQ1RfQ09OVFJPTAkJMHgwMQogCiAvKiA0LjMuMi4yIE91dHB1dCBUZXJtaW5hbCBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yX3YxIHsKK3N0cnVjdCB1YWMxX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA5ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogQ1NfSU5URVJGQUNFIGRlc2NyaXB0b3IgdHlwZSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogT1VUUFVUX1RFUk1JTkFMIGRlc2NyaXB0b3Igc3VidHlwZSAqLwpAQCAtMzk1LDcgKzM5NSw3IEBACiB9CiAKIC8qIDQuNS4yIENsYXNzLVNwZWNpZmljIEFTIEludGVyZmFjZSBEZXNjcmlwdG9yICovCi1zdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YxIHsKK3N0cnVjdCB1YWMxX2FzX2hlYWRlcl9kZXNjcmlwdG9yIHsKIAlfX3U4ICBiTGVuZ3RoOwkJCS8qIGluIGJ5dGVzOiA3ICovCiAJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLyogVVNCX0RUX0NTX0lOVEVSRkFDRSAqLwogCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLyogQVNfR0VORVJBTCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAppbmRleCAxMzkzNTNlLi44OTBiYzE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaApAQCAtMjc2LDYgKzI3Niw4IEBACiAJaW50CQkJKCpiaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CiAJaW50CQkJKCp1bmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKIAorCXZvaWQJCQkoKmRpc2Nvbm5lY3QpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKwogCS8qIGdsb2JhbCBzdXNwZW5kIGhvb2tzICovCiAJdm9pZAkJCSgqc3VzcGVuZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogCXZvaWQJCQkoKnJlc3VtZSkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwpAQCAtMzQyLDYgKzM0NCwxMCBAQAogfTsKIAogZXh0ZXJuIGludCB1c2Jfc3RyaW5nX2lkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqYyk7CitleHRlcm4gaW50IHVzYl9zdHJpbmdfaWRzX3RhYihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmMsCisJCQkgICAgICBzdHJ1Y3QgdXNiX3N0cmluZyAqc3RyKTsKK2V4dGVybiBpbnQgdXNiX3N0cmluZ19pZHNfbihzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmMsIHVuc2lnbmVkIG4pOworCiAKIC8qIG1lc3NhZ2luZyB1dGlscyAqLwogI2RlZmluZSBEQkcoZCwgZm10LCBhcmdzLi4uKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oIGIvaW5jbHVkZS9saW51eC91c2IvZWhjaV9kZWYuaAppbmRleCA4MDI4N2FmLi4yZTI2MmNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfZGVmLmgKQEAgLTM5LDYgKzM5LDEyIEBACiAjZGVmaW5lIEhDU19OX1BPUlRTKHApCQkoKChwKT4+MCkmMHhmKQkvKiBiaXRzIDM6MCwgcG9ydHMgb24gSEMgKi8KIAogCXUzMgkJaGNjX3BhcmFtczsgICAgICAvKiBIQ0NQQVJBTVMgLSBvZmZzZXQgMHg4ICovCisvKiBFSENJIDEuMSBhZGRlbmR1bSAqLworI2RlZmluZSBIQ0NfMzJGUkFNRV9QRVJJT0RJQ19MSVNUKHApCSgocCkmKDEgPDwgMTkpKQorI2RlZmluZSBIQ0NfUEVSX1BPUlRfQ0hBTkdFX0VWRU5UKHApCSgocCkmKDEgPDwgMTgpKQorI2RlZmluZSBIQ0NfTFBNKHApCQkJKChwKSYoMSA8PCAxNykpCisjZGVmaW5lIEhDQ19IV19QUkVGRVRDSChwKQkJKChwKSYoMSA8PCAxNikpCisKICNkZWZpbmUgSENDX0VYVF9DQVBTKHApCQkoKChwKT4+OCkmMHhmZikJLyogZm9yIHBjaSBleHRlbmRlZCBjYXBzICovCiAjZGVmaW5lIEhDQ19JU09DX0NBQ0hFKHApICAgICAgICgocCkmKDEgPDwgNykpICAvKiB0cnVlOiBjYW4gY2FjaGUgaXNvYyBmcmFtZSAqLwogI2RlZmluZSBIQ0NfSVNPQ19USFJFUyhwKSAgICAgICAoKChwKT4+NCkmMHg3KSAgLyogYml0cyA2OjQsIHVmcmFtZXMgY2FjaGVkICovCkBAIC01NCw2ICs2MCwxMyBAQAogCiAJLyogVVNCQ01EOiBvZmZzZXQgMHgwMCAqLwogCXUzMgkJY29tbWFuZDsKKworLyogRUhDSSAxLjEgYWRkZW5kdW0gKi8KKyNkZWZpbmUgQ01EX0hJUkQJKDB4Zjw8MjQpCS8qIGhvc3QgaW5pdGlhdGVkIHJlc3VtZSBkdXJhdGlvbiAqLworI2RlZmluZSBDTURfUFBDRUUJKDE8PDE1KQkJLyogcGVyIHBvcnQgY2hhbmdlIGV2ZW50IGVuYWJsZSAqLworI2RlZmluZSBDTURfRlNQCQkoMTw8MTQpCQkvKiBmdWxseSBzeW5jaHJvbml6ZWQgcHJlZmV0Y2ggKi8KKyNkZWZpbmUgQ01EX0FTUEUJKDE8PDEzKQkJLyogYXN5bmMgc2NoZWR1bGUgcHJlZmV0Y2ggZW5hYmxlICovCisjZGVmaW5lIENNRF9QU1BFCSgxPDwxMikJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHByZWZldGNoIGVuYWJsZSAqLwogLyogMjM6MTYgaXMgci93IGludHIgcmF0ZSwgaW4gbWljcm9mcmFtZXM7IGRlZmF1bHQgIjgiID09IDEvbXNlYyAqLwogI2RlZmluZSBDTURfUEFSSwkoMTw8MTEpCQkvKiBlbmFibGUgInBhcmsiIG9uIGFzeW5jIHFoICovCiAjZGVmaW5lIENNRF9QQVJLX0NOVChjKQkoKChjKT4+OCkmMykJLyogaG93IG1hbnkgdHJhbnNmZXJzIHRvIHBhcmsgZm9yICovCkBAIC02Nyw2ICs4MCw3IEBACiAKIAkvKiBVU0JTVFM6IG9mZnNldCAweDA0ICovCiAJdTMyCQlzdGF0dXM7CisjZGVmaW5lIFNUU19QUENFX01BU0sJKDB4ZmY8PDE2KQkvKiBQZXItUG9ydCBjaGFuZ2UgZXZlbnQgMS0xNiAqLwogI2RlZmluZSBTVFNfQVNTCQkoMTw8MTUpCQkvKiBBc3luYyBTY2hlZHVsZSBTdGF0dXMgKi8KICNkZWZpbmUgU1RTX1BTUwkJKDE8PDE0KQkJLyogUGVyaW9kaWMgU2NoZWR1bGUgU3RhdHVzICovCiAjZGVmaW5lIFNUU19SRUNMCSgxPDwxMykJCS8qIFJlY2xhbWF0aW9uICovCkBAIC0xMDAsNiArMTE0LDE0IEBACiAKIAkvKiBQT1JUU0M6IG9mZnNldCAweDQ0ICovCiAJdTMyCQlwb3J0X3N0YXR1c1swXTsJLyogdXAgdG8gTl9QT1JUUyAqLworLyogRUhDSSAxLjEgYWRkZW5kdW0gKi8KKyNkZWZpbmUgUE9SVFNDX1NVU1BFTkRfU1RTX0FDSyAwCisjZGVmaW5lIFBPUlRTQ19TVVNQRU5EX1NUU19OWUVUIDEKKyNkZWZpbmUgUE9SVFNDX1NVU1BFTkRfU1RTX1NUQUxMIDIKKyNkZWZpbmUgUE9SVFNDX1NVU1BFTkRfU1RTX0VSUiAzCisKKyNkZWZpbmUgUE9SVF9ERVZfQUREUgkoMHg3Zjw8MjUpCQkvKiBkZXZpY2UgYWRkcmVzcyAqLworI2RlZmluZSBQT1JUX1NTVFMJKDB4Mzw8MjMpCQkvKiBzdXNwZW5kIHN0YXR1cyAqLwogLyogMzE6MjMgcmVzZXJ2ZWQgKi8KICNkZWZpbmUgUE9SVF9XS09DX0UJKDE8PDIyKQkJLyogd2FrZSBvbiBvdmVyY3VycmVudCAoZW5hYmxlKSAqLwogI2RlZmluZSBQT1JUX1dLRElTQ19FCSgxPDwyMSkJCS8qIHdha2Ugb24gZGlzY29ubmVjdCAoZW5hYmxlKSAqLwpAQCAtMTE1LDYgKzEzNyw3IEBACiAjZGVmaW5lIFBPUlRfVVNCMTEoeCkgKCgoeCkmKDM8PDEwKSkgPT0gKDE8PDEwKSkJLyogVVNCIDEuMSBkZXZpY2UgKi8KIC8qIDExOjEwIGZvciBkZXRlY3RpbmcgbG93c3BlZWQgZGV2aWNlcyAocmVzZXQgdnMgcmVsZWFzZSBvd25lcnNoaXApICovCiAvKiA5IHJlc2VydmVkICovCisjZGVmaW5lIFBPUlRfTFBNCSgxPDw5KQkJLyogTFBNIHRyYW5zYWN0aW9uICovCiAjZGVmaW5lIFBPUlRfUkVTRVQJKDE8PDgpCQkvKiByZXNldCBwb3J0ICovCiAjZGVmaW5lIFBPUlRfU1VTUEVORAkoMTw8NykJCS8qIHN1c3BlbmQgcG9ydCAqLwogI2RlZmluZSBQT1JUX1JFU1VNRQkoMTw8NikJCS8qIHJlc3VtZSBpdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvZnVuY3Rpb25mcy5oIGIvaW5jbHVkZS9saW51eC91c2IvZnVuY3Rpb25mcy5oCmluZGV4IGEzNGEyYTAuLjZmNjQ5YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2Z1bmN0aW9uZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9mdW5jdGlvbmZzLmgKQEAgLTE4MCw5ICsxODAsOSBAQAogc3RhdGljIHZvaWQgZnVuY3Rpb25mc191bmJpbmQoc3RydWN0IGZmc19kYXRhICpmZnMpCiAJX19hdHRyaWJ1dGVfXygobm9ubnVsbCkpOwogCi1zdGF0aWMgaW50IGZ1bmN0aW9uZnNfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwKLQkJCSAgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLAotCQkJICBzdHJ1Y3QgZmZzX2RhdGEgKmZmcykKK3N0YXRpYyBpbnQgZnVuY3Rpb25mc19iaW5kX2NvbmZpZyhzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsCisJCQkJICBzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsCisJCQkJICBzdHJ1Y3QgZmZzX2RhdGEgKmZmcykKIAlfX2F0dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQsIG5vbm51bGwpKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaCBiL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oCmluZGV4IDJlM2E0ZWEuLjNiNTcxZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oCkBAIC04OSwxOCArODksMzMgQEAKIAkgKi8KIAljb25zdCBzdHJ1Y3QgaGNfZHJpdmVyCSpkcml2ZXI7CS8qIGh3LXNwZWNpZmljIGhvb2tzICovCiAKLQkvKiBGbGFncyB0aGF0IG5lZWQgdG8gYmUgbWFuaXB1bGF0ZWQgYXRvbWljYWxseSAqLworCS8qIEZsYWdzIHRoYXQgbmVlZCB0byBiZSBtYW5pcHVsYXRlZCBhdG9taWNhbGx5IGJlY2F1c2UgdGhleSBjYW4KKwkgKiBjaGFuZ2Ugd2hpbGUgdGhlIGhvc3QgY29udHJvbGxlciBpcyBydW5uaW5nLiAgQWx3YXlzIHVzZQorCSAqIHNldF9iaXQoKSBvciBjbGVhcl9iaXQoKSB0byBjaGFuZ2UgdGhlaXIgdmFsdWVzLgorCSAqLwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotI2RlZmluZSBIQ0RfRkxBR19IV19BQ0NFU1NJQkxFCTB4MDAwMDAwMDEKLSNkZWZpbmUgSENEX0ZMQUdfU0FXX0lSUQkweDAwMDAwMDAyCisjZGVmaW5lIEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUJCTAJLyogYXQgZnVsbCBwb3dlciAqLworI2RlZmluZSBIQ0RfRkxBR19TQVdfSVJRCQkxCisjZGVmaW5lIEhDRF9GTEFHX1BPTExfUkgJCTIJLyogcG9sbCBmb3Igcmggc3RhdHVzPyAqLworI2RlZmluZSBIQ0RfRkxBR19QT0xMX1BFTkRJTkcJCTMJLyogc3RhdHVzIGhhcyBjaGFuZ2VkPyAqLworI2RlZmluZSBIQ0RfRkxBR19XQUtFVVBfUEVORElORwkJNAkvKiByb290IGh1YiBpcyByZXN1bWluZz8gKi8KIAorCS8qIFRoZSBmbGFncyBjYW4gYmUgdGVzdGVkIHVzaW5nIHRoZXNlIG1hY3JvczsgdGhleSBhcmUgbGlrZWx5IHRvCisJICogYmUgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGVzdF9iaXQoKS4KKwkgKi8KKyNkZWZpbmUgSENEX0hXX0FDQ0VTU0lCTEUoaGNkKQkoKGhjZCktPmZsYWdzICYgKDFVIDw8IEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUpKQorI2RlZmluZSBIQ0RfU0FXX0lSUShoY2QpCSgoaGNkKS0+ZmxhZ3MgJiAoMVUgPDwgSENEX0ZMQUdfU0FXX0lSUSkpCisjZGVmaW5lIEhDRF9QT0xMX1JIKGhjZCkJKChoY2QpLT5mbGFncyAmICgxVSA8PCBIQ0RfRkxBR19QT0xMX1JIKSkKKyNkZWZpbmUgSENEX1BPTExfUEVORElORyhoY2QpCSgoaGNkKS0+ZmxhZ3MgJiAoMVUgPDwgSENEX0ZMQUdfUE9MTF9QRU5ESU5HKSkKKyNkZWZpbmUgSENEX1dBS0VVUF9QRU5ESU5HKGhjZCkJKChoY2QpLT5mbGFncyAmICgxVSA8PCBIQ0RfRkxBR19XQUtFVVBfUEVORElORykpCisKKwkvKiBGbGFncyB0aGF0IGdldCBzZXQgb25seSBkdXJpbmcgSENEIHJlZ2lzdHJhdGlvbiBvciByZW1vdmFsLiAqLwogCXVuc2lnbmVkCQlyaF9yZWdpc3RlcmVkOjE7LyogaXMgcm9vdCBodWIgcmVnaXN0ZXJlZD8gKi8KKwl1bnNpZ25lZAkJcmhfcG9sbGFibGU6MTsJLyogbWF5IHdlIHBvbGwgdGhlIHJvb3QgaHViPyAqLwogCiAJLyogVGhlIG5leHQgZmxhZyBpcyBhIHN0b3BnYXAsIHRvIGJlIHJlbW92ZWQgd2hlbiBhbGwgdGhlIEhDRHMKIAkgKiBzdXBwb3J0IHRoZSBuZXcgcm9vdC1odWIgcG9sbGluZyBtZWNoYW5pc20uICovCiAJdW5zaWduZWQJCXVzZXNfbmV3X3BvbGxpbmc6MTsKLQl1bnNpZ25lZAkJcG9sbF9yaDoxOwkvKiBwb2xsIGZvciByaCBzdGF0dXM/ICovCi0JdW5zaWduZWQJCXBvbGxfcGVuZGluZzoxOwkvKiBzdGF0dXMgaGFzIGNoYW5nZWQ/ICovCiAJdW5zaWduZWQJCXdpcmVsZXNzOjE7CS8qIFdpcmVsZXNzIFVTQiBIQ0QgKi8KIAl1bnNpZ25lZAkJYXV0aG9yaXplZF9kZWZhdWx0OjE7CiAJdW5zaWduZWQJCWhhc190dDoxOwkvKiBJbnRlZ3JhdGVkIFRUIGluIHJvb3QgaHViICovCkBAIC0xOTgsNyArMjEzLDcgQEAKIAkgKiBhIHdob2xlLCBub3QganVzdCB0aGUgcm9vdCBodWI7IHRoZXkncmUgZm9yIFBDSSBidXMgZ2x1ZS4KIAkgKi8KIAkvKiBjYWxsZWQgYWZ0ZXIgc3VzcGVuZGluZyB0aGUgaHViLCBiZWZvcmUgZW50ZXJpbmcgRDMgZXRjICovCi0JaW50CSgqcGNpX3N1c3BlbmQpKHN0cnVjdCB1c2JfaGNkICpoY2QpOworCWludAkoKnBjaV9zdXNwZW5kKShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBib29sIGRvX3dha2V1cCk7CiAKIAkvKiBjYWxsZWQgYWZ0ZXIgZW50ZXJpbmcgRDAgKGV0YyksIGJlZm9yZSByZXN1bWluZyB0aGUgaHViICovCiAJaW50CSgqcGNpX3Jlc3VtZSkoc3RydWN0IHVzYl9oY2QgKmhjZCwgYm9vbCBoaWJlcm5hdGVkKTsKQEAgLTI5OSw2ICszMTQsMTAgQEAKIAlpbnQJKCp1cGRhdGVfaHViX2RldmljZSkoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYsCiAJCQlzdHJ1Y3QgdXNiX3R0ICp0dCwgZ2ZwX3QgbWVtX2ZsYWdzKTsKIAlpbnQJKCpyZXNldF9kZXZpY2UpKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCB1c2JfZGV2aWNlICopOworCQkvKiBOb3RpZmllcyB0aGUgSENEIGFmdGVyIGEgZGV2aWNlIGlzIGNvbm5lY3RlZCBhbmQgaXRzCisJCSAqIGFkZHJlc3MgaXMgc2V0CisJCSAqLworCWludAkoKnVwZGF0ZV9kZXZpY2UpKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCB1c2JfZGV2aWNlICopOwogfTsKIAogZXh0ZXJuIGludCB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaCBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCmluZGV4IGY4MzAyZDAuLjU0NWNiYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCkBAIC00MywxMyArNDMsNiBAQAogCVVTQl9FVkVOVF9FTlVNRVJBVEVELCAgIC8qIGdhZGdldCBkcml2ZXIgZW51bWVyYXRlZCAqLwogfTsKIAotI2RlZmluZSBVU0JfT1RHX1BVTExVUF9JRAkJKDEgPDwgMCkKLSNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9EUAkJKDEgPDwgMSkKLSNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9ETQkJKDEgPDwgMikKLSNkZWZpbmUgVVNCX09UR19FWFRfVkJVU19JTkRJQ0FUT1IJKDEgPDwgMykKLSNkZWZpbmUgVVNCX09UR19EUlZfVkJVUwkJKDEgPDwgNCkKLSNkZWZpbmUgVVNCX09UR19EUlZfVkJVU19FWFQJCSgxIDw8IDUpCi0KIHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXI7CiAKIC8qIGZvciB0cmFuc2NlaXZlcnMgY29ubmVjdGVkIHRocnUgYW4gVUxQSSBpbnRlcmZhY2UsIHRoZSB1c2VyIG11c3QKQEAgLTE0NiwxMCArMTM5LDEwIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IG90Z19pb193cml0ZShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHUzMiByZWcsIHUzMiB2YWwpCitzdGF0aWMgaW5saW5lIGludCBvdGdfaW9fd3JpdGUoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLCB1MzIgdmFsLCB1MzIgcmVnKQogewogCWlmIChvdGctPmlvX29wcyAmJiBvdGctPmlvX29wcy0+d3JpdGUpCi0JCXJldHVybiBvdGctPmlvX29wcy0+d3JpdGUob3RnLCByZWcsIHZhbCk7CisJCXJldHVybiBvdGctPmlvX29wcy0+d3JpdGUob3RnLCB2YWwsIHJlZyk7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKaW5kZXggMTZiN2YzMy4uM2U5M2RlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmgKQEAgLTI2LDQgKzI2LDggQEAKICAgIGFuZCBjYW4ndCBoYW5kbGUgdGFsa2luZyB0byB0aGVzZSBpbnRlcmZhY2VzICovCiAjZGVmaW5lIFVTQl9RVUlSS19IT05PUl9CTlVNSU5URVJGQUNFUwkweDAwMDAwMDIwCiAKKy8qIGRldmljZSBuZWVkcyBhIHBhdXNlIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYWZ0ZXIgd2UgcmVhZCB0aGUgZGV2aWNlCisgICBkZXNjcmlwdG9yICovCisjZGVmaW5lIFVTQl9RVUlSS19ERUxBWV9JTklUCQkweDAwMDAwMDQwCisKICNlbmRpZiAvKiBfX0xJTlVYX1VTQl9RVUlSS1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdWxwaS5oIGIvaW5jbHVkZS9saW51eC91c2IvdWxwaS5oCmluZGV4IDIzNjlkMDcuLjgyYjE1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VscGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91bHBpLmgKQEAgLTExLDYgKzExLDQyIEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX1VMUElfSAogI2RlZmluZSBfX0xJTlVYX1VTQl9VTFBJX0gKIAorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBVTFBJIEZsYWdzCisgKi8KKyNkZWZpbmUgVUxQSV9PVEdfSURfUFVMTFVQCQkoMSA8PCAwKQorI2RlZmluZSBVTFBJX09UR19EUF9QVUxMRE9XTl9ESVMJKDEgPDwgMSkKKyNkZWZpbmUgVUxQSV9PVEdfRE1fUFVMTERPV05fRElTCSgxIDw8IDIpCisjZGVmaW5lIFVMUElfT1RHX0RJU0NIUkdWQlVTCQkoMSA8PCAzKQorI2RlZmluZSBVTFBJX09UR19DSFJHVkJVUwkJKDEgPDwgNCkKKyNkZWZpbmUgVUxQSV9PVEdfRFJWVkJVUwkJKDEgPDwgNSkKKyNkZWZpbmUgVUxQSV9PVEdfRFJWVkJVU19FWFQJCSgxIDw8IDYpCisjZGVmaW5lIFVMUElfT1RHX0VYVFZCVVNJTkQJCSgxIDw8IDcpCisKKyNkZWZpbmUgVUxQSV9JQ182UElOX1NFUklBTAkJKDEgPDwgOCkKKyNkZWZpbmUgVUxQSV9JQ18zUElOX1NFUklBTAkJKDEgPDwgOSkKKyNkZWZpbmUgVUxQSV9JQ19DQVJLSVQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgVUxQSV9JQ19DTEtTVVNQTQkJKDEgPDwgMTEpCisjZGVmaW5lIFVMUElfSUNfQVVUT1JFU1VNRQkJKDEgPDwgMTIpCisjZGVmaW5lIFVMUElfSUNfRVhUVkJVU19JTkRJTlYJCSgxIDw8IDEzKQorI2RlZmluZSBVTFBJX0lDX0lORF9QQVNTVEhSVQkJKDEgPDwgMTQpCisjZGVmaW5lIFVMUElfSUNfUFJPVEVDVF9ESVMJCSgxIDw8IDE1KQorCisjZGVmaW5lIFVMUElfRkNfSFMJCQkoMSA8PCAxNikKKyNkZWZpbmUgVUxQSV9GQ19GUwkJCSgxIDw8IDE3KQorI2RlZmluZSBVTFBJX0ZDX0xTCQkJKDEgPDwgMTgpCisjZGVmaW5lIFVMUElfRkNfRlM0TFMJCQkoMSA8PCAxOSkKKyNkZWZpbmUgVUxQSV9GQ19URVJNU0VMCQkJKDEgPDwgMjApCisjZGVmaW5lIFVMUElfRkNfT1BfTk9STQkJCSgxIDw8IDIxKQorI2RlZmluZSBVTFBJX0ZDX09QX05PRFJWCQkoMSA8PCAyMikKKyNkZWZpbmUgVUxQSV9GQ19PUF9ESVNfTlJaSQkJKDEgPDwgMjMpCisjZGVmaW5lIFVMUElfRkNfT1BfTlNZTkNfTkVPUAkJKDEgPDwgMjQpCisjZGVmaW5lIFVMUElfRkNfUlNUCQkJKDEgPDwgMjUpCisjZGVmaW5lIFVMUElfRkNfU1VTUE0JCQkoMSA8PCAyNikKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKQEAgLTU4LDYgKzk0LDEwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qCisgKiBSZWdpc3RlciBCaXRzCisgKi8KKwogLyogRnVuY3Rpb24gQ29udHJvbCAqLwogI2RlZmluZSBVTFBJX0ZVTkNfQ1RSTF9YQ1ZSU0VMCQkJKDEgPDwgMCkKICNkZWZpbmUgIFVMUElfRlVOQ19DVFJMX1hDVlJTRUxfTUFTSwkJKDMgPDwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDA0N2Y3ZTYuLjYxNDkwYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMjc3LDYgKzI3Nyw3IEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjUgIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdQJykgLyogMTYgIFJHQi01LTYtNSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU1NVggdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1EnKSAvKiAxNiAgUkdCLTUtNS01IEJFICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTY1WCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUicpIC8qIDE2ICBSR0ItNS02LTUgQkUgICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1I2NjYgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICdIJykgLyogMTggIEJHUi02LTYtNgkgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IyNCAgIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnUicsICczJykgLyogMjQgIEJHUi04LTgtOCAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjI0ICAgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzMnKSAvKiAyNCAgUkdCLTgtOC04ICAgICAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfQkdSMzIgICB2NGwyX2ZvdXJjYygnQicsICdHJywgJ1InLCAnNCcpIC8qIDMyICBCR1ItOC04LTgtOCAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCAzOTVjMzhhLi4xZmFhODBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bWFsbG9jLmggYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAppbmRleCAyMjdjMmE1Li4wMWMyMTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApAQCAtNyw2ICs3LDggQEAKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwkJLyogdm1hIGRlZmluaW5nIHVzZXIgbWFwcGluZyBpbiBtbV90eXBlcy5oICovCiAKK2V4dGVybiBib29sIHZtYXBfbGF6eV91bm1hcDsKKwogLyogYml0cyBpbiBmbGFncyBvZiB2bWFsbG9jJ3Mgdm1fc3RydWN0IGJlbG93ICovCiAjZGVmaW5lIFZNX0lPUkVNQVAJMHgwMDAwMDAwMQkvKiBpb3JlbWFwKCkgYW5kIGZyaWVuZHMgKi8KICNkZWZpbmUgVk1fQUxMT0MJMHgwMDAwMDAwMgkvKiB2bWFsbG9jKCkgKi8KQEAgLTMwLDcgKzMyLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKIAl1bnNpZ25lZCBpbnQJCW5yX3BhZ2VzOwotCXVuc2lnbmVkIGxvbmcJCXBoeXNfYWRkcjsKKwlwaHlzX2FkZHJfdAkJcGh5c19hZGRyOwogCXZvaWQJCQkqY2FsbGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCA3ZjU2ZGI0Li42NjI1Y2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtNzYsMTcgKzc2LDUyIEBACiAjZGVmaW5lIHZjX3RyYW5zbGF0ZSh2YywgYykgKCh2YyktPnZjX3RyYW5zbGF0ZVsoYykgfAkJCVwKIAkJCQkJKCh2YyktPnZjX3RvZ2dsZV9tZXRhID8gMHg4MCA6IDApXSkKICNlbHNlCi0jZGVmaW5lIGNvbl9zZXRfdHJhbnNfb2xkKGFyZykgKDApCi0jZGVmaW5lIGNvbl9nZXRfdHJhbnNfb2xkKGFyZykgKC1FSU5WQUwpCi0jZGVmaW5lIGNvbl9zZXRfdHJhbnNfbmV3KGFyZykgKDApCi0jZGVmaW5lIGNvbl9nZXRfdHJhbnNfbmV3KGFyZykgKC1FSU5WQUwpCi0jZGVmaW5lIGNvbl9jbGVhcl91bmltYXAodmMsIHVpKSAoMCkKLSNkZWZpbmUgY29uX3NldF91bmltYXAodmMsIGN0LCBsaXN0KSAoMCkKLSNkZWZpbmUgY29uX3NldF9kZWZhdWx0X3VuaW1hcCh2YykgKDApCi0jZGVmaW5lIGNvbl9jb3B5X3VuaW1hcChkLCBzKSAoMCkKLSNkZWZpbmUgY29uX2dldF91bmltYXAodmMsIGN0LCB1Y3QsIGxpc3QpICgtRUlOVkFMKQotI2RlZmluZSBjb25fZnJlZV91bmltYXAodmMpIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBjb25fcHJvdGVjdF91bmltYXAodmMsIHJkb25seSkgZG8geyA7IH0gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIGludCBjb25fc2V0X3RyYW5zX29sZCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqdGFibGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBjb25fZ2V0X3RyYW5zX29sZCh1bnNpZ25lZCBjaGFyIF9fdXNlciAqdGFibGUpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBjb25fc2V0X3RyYW5zX25ldyh1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnRhYmxlKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgY29uX2dldF90cmFuc19uZXcodW5zaWduZWQgc2hvcnQgX191c2VyICp0YWJsZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGNvbl9jbGVhcl91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjLCBzdHJ1Y3QgdW5pbWFwaW5pdCAqdWkpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lCitpbnQgY29uX3NldF91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjLCB1c2hvcnQgY3QsIHN0cnVjdCB1bmlwYWlyIF9fdXNlciAqbGlzdCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUKK2ludCBjb25fZ2V0X3VuaW1hcChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVzaG9ydCBjdCwgdXNob3J0IF9fdXNlciAqdWN0LAorCQkgICBzdHJ1Y3QgdW5pcGFpciBfX3VzZXIgKmxpc3QpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCBjb25fc2V0X2RlZmF1bHRfdW5pbWFwKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25fZnJlZV91bmltYXAoc3RydWN0IHZjX2RhdGEgKnZjKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGNvbl9wcm90ZWN0X3VuaW1hcChzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCByZG9ubHkpCit7Cit9CitzdGF0aWMgaW5saW5lCitpbnQgY29uX2NvcHlfdW5pbWFwKHN0cnVjdCB2Y19kYXRhICpkc3RfdmMsIHN0cnVjdCB2Y19kYXRhICpzcmNfdmMpCit7CisJcmV0dXJuIDA7Cit9CiAKICNkZWZpbmUgdmNfdHJhbnNsYXRlKHZjLCBjKSAoYykKICNlbmRpZgpAQCAtMTAwLDYgKzEzNSwxMyBAQAogCQkJICAgICBpbnQgZGVmbHQpOwogaW50IHZ0eV9pbml0KGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmNvbnNvbGVfZm9wcyk7CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCB2dF9mb3JjZV9vb3BzX291dHB1dChzdHJ1Y3QgdmNfZGF0YSAqdmMpCit7CisJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MgJiYgdmMtPnZjX3BhbmljX2ZvcmNlX3dyaXRlKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiB2Y19zY3JlZW4uYyBzaGFyZXMgdGhpcyB0ZW1wb3JhcnkgYnVmZmVyIHdpdGggdGhlIGNvbnNvbGUgd3JpdGUgY29kZSBzbyB0aGF0CiAgKiB3ZSBjYW4gZWFzaWx5IGF2b2lkIHRvdWNoaW5nIHVzZXIgc3BhY2Ugd2hpbGUgaG9sZGluZyB0aGUgY29uc29sZSBzcGlubG9jay4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd205N3h4X2JhdHQuaCBiL2luY2x1ZGUvbGludXgvd205N3h4X2JhdHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFkNjQxOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3dtOTd4eF9iYXR0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9XTTk3WFhfQkFUX0gKLSNkZWZpbmUgX0xJTlVYX1dNOTdYWF9CQVRfSAotCi0jaW5jbHVkZSA8bGludXgvd205N3h4Lmg+Ci0KLSN3YXJuaW5nIFRoaXMgZmlsZSB3aWxsIGJlIHJlbW92ZWQgc29vbiwgdXNlIHdtOTd4eC5oIGluc3RlYWQhCi0KLSNkZWZpbmUgd205N3h4X2JhdHRfaW5mbyB3bTk3eHhfYmF0dF9wZGF0YQotCi0jaWZkZWYgQ09ORklHX0JBVFRFUllfV005N1hYCi12b2lkIHdtOTd4eF9iYXRfc2V0X3BkYXRhKHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvICpkYXRhKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgd205N3h4X2JhdF9zZXRfcGRhdGEoc3RydWN0IHdtOTd4eF9iYXR0X2luZm8gKmRhdGEpIHt9Ci0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAppbmRleCA5NDY2ZTg2Li40ZjlkMjc3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKQEAgLTIyLDEyICsyMyw1OSBAQAogICovCiAjZGVmaW5lIHdvcmtfZGF0YV9iaXRzKHdvcmspICgodW5zaWduZWQgbG9uZyAqKSgmKHdvcmspLT5kYXRhKSkKIAorZW51bSB7CisJV09SS19TVFJVQ1RfUEVORElOR19CSVQJPSAwLAkvKiB3b3JrIGl0ZW0gaXMgcGVuZGluZyBleGVjdXRpb24gKi8KKwlXT1JLX1NUUlVDVF9DV1FfQklUCT0gMSwJLyogZGF0YSBwb2ludHMgdG8gY3dxICovCisJV09SS19TVFJVQ1RfTElOS0VEX0JJVAk9IDIsCS8qIG5leHQgd29yayBpcyBsaW5rZWQgdG8gdGhpcyBvbmUgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfT0JKRUNUU19XT1JLCisJV09SS19TVFJVQ1RfU1RBVElDX0JJVAk9IDMsCS8qIHN0YXRpYyBpbml0aWFsaXplciAoZGVidWdvYmplY3RzKSAqLworCVdPUktfU1RSVUNUX0NPTE9SX1NISUZUCT0gNCwJLyogY29sb3IgZm9yIHdvcmtxdWV1ZSBmbHVzaGluZyAqLworI2Vsc2UKKwlXT1JLX1NUUlVDVF9DT0xPUl9TSElGVAk9IDMsCS8qIGNvbG9yIGZvciB3b3JrcXVldWUgZmx1c2hpbmcgKi8KKyNlbmRpZgorCisJV09SS19TVFJVQ1RfQ09MT1JfQklUUwk9IDQsCisKKwlXT1JLX1NUUlVDVF9QRU5ESU5HCT0gMSA8PCBXT1JLX1NUUlVDVF9QRU5ESU5HX0JJVCwKKwlXT1JLX1NUUlVDVF9DV1EJCT0gMSA8PCBXT1JLX1NUUlVDVF9DV1FfQklULAorCVdPUktfU1RSVUNUX0xJTktFRAk9IDEgPDwgV09SS19TVFJVQ1RfTElOS0VEX0JJVCwKKyNpZmRlZiBDT05GSUdfREVCVUdfT0JKRUNUU19XT1JLCisJV09SS19TVFJVQ1RfU1RBVElDCT0gMSA8PCBXT1JLX1NUUlVDVF9TVEFUSUNfQklULAorI2Vsc2UKKwlXT1JLX1NUUlVDVF9TVEFUSUMJPSAwLAorI2VuZGlmCisKKwkvKgorCSAqIFRoZSBsYXN0IGNvbG9yIGlzIG5vIGNvbG9yIHVzZWQgZm9yIHdvcmtzIHdoaWNoIGRvbid0CisJICogcGFydGljaXBhdGUgaW4gd29ya3F1ZXVlIGZsdXNoaW5nLgorCSAqLworCVdPUktfTlJfQ09MT1JTCQk9ICgxIDw8IFdPUktfU1RSVUNUX0NPTE9SX0JJVFMpIC0gMSwKKwlXT1JLX05PX0NPTE9SCQk9IFdPUktfTlJfQ09MT1JTLAorCisJLyogc3BlY2lhbCBjcHUgSURzICovCisJV09SS19DUFVfVU5CT1VORAk9IE5SX0NQVVMsCisJV09SS19DUFVfTk9ORQkJPSBOUl9DUFVTICsgMSwKKwlXT1JLX0NQVV9MQVNUCQk9IFdPUktfQ1BVX05PTkUsCisKKwkvKgorCSAqIFJlc2VydmUgNyBiaXRzIG9mZiBvZiBjd3EgcG9pbnRlciB3LyBkZWJ1Z29iamVjdHMgdHVybmVkCisJICogb2ZmLiAgVGhpcyBtYWtlcyBjd3FzIGFsaWduZWQgdG8gMTI4IGJ5dGVzIHdoaWNoIGlzbid0IHRvbworCSAqIGV4Y2Vzc2l2ZSB3aGlsZSBhbGxvd2luZyAxNSB3b3JrcXVldWUgZmx1c2ggY29sb3JzLgorCSAqLworCVdPUktfU1RSVUNUX0ZMQUdfQklUUwk9IFdPUktfU1RSVUNUX0NPTE9SX1NISUZUICsKKwkJCQkgIFdPUktfU1RSVUNUX0NPTE9SX0JJVFMsCisKKwlXT1JLX1NUUlVDVF9GTEFHX01BU0sJPSAoMVVMIDw8IFdPUktfU1RSVUNUX0ZMQUdfQklUUykgLSAxLAorCVdPUktfU1RSVUNUX1dRX0RBVEFfTUFTSyA9IH5XT1JLX1NUUlVDVF9GTEFHX01BU0ssCisJV09SS19TVFJVQ1RfTk9fQ1BVCT0gV09SS19DUFVfTk9ORSA8PCBXT1JLX1NUUlVDVF9GTEFHX0JJVFMsCisKKwkvKiBiaXQgbWFzayBmb3Igd29ya19idXN5KCkgcmV0dXJuIHZhbHVlcyAqLworCVdPUktfQlVTWV9QRU5ESU5HCT0gMSA8PCAwLAorCVdPUktfQlVTWV9SVU5OSU5HCT0gMSA8PCAxLAorfTsKKwogc3RydWN0IHdvcmtfc3RydWN0IHsKIAlhdG9taWNfbG9uZ190IGRhdGE7Ci0jZGVmaW5lIFdPUktfU1RSVUNUX1BFTkRJTkcgMAkJLyogVCBpZiB3b3JrIGl0ZW0gcGVuZGluZyBleGVjdXRpb24gKi8KLSNkZWZpbmUgV09SS19TVFJVQ1RfU1RBVElDICAxCQkvKiBzdGF0aWMgaW5pdGlhbGl6ZXIgKGRlYnVnb2JqZWN0cykgKi8KLSNkZWZpbmUgV09SS19TVFJVQ1RfRkxBR19NQVNLICgzVUwpCi0jZGVmaW5lIFdPUktfU1RSVUNUX1dRX0RBVEFfTUFTSyAofldPUktfU1RSVUNUX0ZMQUdfTUFTSykKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwogCXdvcmtfZnVuY190IGZ1bmM7CiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKQEAgLTM1LDggKzgzLDkgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBXT1JLX0RBVEFfSU5JVCgpCUFUT01JQ19MT05HX0lOSVQoMCkKLSNkZWZpbmUgV09SS19EQVRBX1NUQVRJQ19JTklUKCkJQVRPTUlDX0xPTkdfSU5JVCgyKQorI2RlZmluZSBXT1JLX0RBVEFfSU5JVCgpCUFUT01JQ19MT05HX0lOSVQoV09SS19TVFJVQ1RfTk9fQ1BVKQorI2RlZmluZSBXT1JLX0RBVEFfU1RBVElDX0lOSVQoKQlcCisJQVRPTUlDX0xPTkdfSU5JVChXT1JLX1NUUlVDVF9OT19DUFUgfCBXT1JLX1NUUlVDVF9TVEFUSUMpCiAKIHN0cnVjdCBkZWxheWVkX3dvcmsgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwpAQCAtOTYsOSArMTQ1LDE0IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfV09SSwogZXh0ZXJuIHZvaWQgX19pbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLCBpbnQgb25zdGFjayk7CiBleHRlcm4gdm9pZCBkZXN0cm95X3dvcmtfb25fc3RhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdvcmtfc3RhdGljKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZXR1cm4gKndvcmtfZGF0YV9iaXRzKHdvcmspICYgV09SS19TVFJVQ1RfU1RBVElDOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIGludCBvbnN0YWNrKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3dvcmtfb25fc3RhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSB7IH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdvcmtfc3RhdGljKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKIC8qCkBAIC0xNjIsNyArMjE2LDcgQEAKICAqIEB3b3JrOiBUaGUgd29yayBpdGVtIGluIHF1ZXN0aW9uCiAgKi8KICNkZWZpbmUgd29ya19wZW5kaW5nKHdvcmspIFwKLQl0ZXN0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HLCB3b3JrX2RhdGFfYml0cyh3b3JrKSkKKwl0ZXN0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HX0JJVCwgd29ya19kYXRhX2JpdHMod29yaykpCiAKIC8qKgogICogZGVsYXllZF93b3JrX3BlbmRpbmcgLSBGaW5kIG91dCB3aGV0aGVyIGEgZGVsYXlhYmxlIHdvcmsgaXRlbSBpcyBjdXJyZW50bHkKQEAgLTE3NywxNiArMjMxLDU2IEBACiAgKiBAd29yazogVGhlIHdvcmsgaXRlbSBpbiBxdWVzdGlvbgogICovCiAjZGVmaW5lIHdvcmtfY2xlYXJfcGVuZGluZyh3b3JrKSBcCi0JY2xlYXJfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKQorCWNsZWFyX2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HX0JJVCwgd29ya19kYXRhX2JpdHMod29yaykpCiAKK2VudW0geworCVdRX05PTl9SRUVOVFJBTlQJPSAxIDw8IDAsIC8qIGd1YXJhbnRlZSBub24tcmVlbnRyYW5jZSAqLworCVdRX1VOQk9VTkQJCT0gMSA8PCAxLCAvKiBub3QgYm91bmQgdG8gYW55IGNwdSAqLworCVdRX0ZSRUVaRUFCTEUJCT0gMSA8PCAyLCAvKiBmcmVlemUgZHVyaW5nIHN1c3BlbmQgKi8KKwlXUV9SRVNDVUVSCQk9IDEgPDwgMywgLyogaGFzIGFuIHJlc2N1ZSB3b3JrZXIgKi8KKwlXUV9ISUdIUFJJCQk9IDEgPDwgNCwgLyogaGlnaCBwcmlvcml0eSAqLworCVdRX0NQVV9JTlRFTlNJVkUJPSAxIDw8IDUsIC8qIGNwdSBpbnN0ZW5zaXZlIHdvcmtxdWV1ZSAqLworCisJV1FfTUFYX0FDVElWRQkJPSA1MTIsCSAgLyogSSBsaWtlIDUxMiwgYmV0dGVyIGlkZWFzPyAqLworCVdRX01BWF9VTkJPVU5EX1BFUl9DUFUJPSA0LAkgIC8qIDQgKiAjY3B1cyBmb3IgdW5ib3VuZCB3cSAqLworCVdRX0RGTF9BQ1RJVkUJCT0gV1FfTUFYX0FDVElWRSAvIDIsCit9OworCisvKiB1bmJvdW5kIHdxJ3MgYXJlbid0IHBlci1jcHUsIHNjYWxlIG1heF9hY3RpdmUgYWNjb3JkaW5nIHRvICNjcHVzICovCisjZGVmaW5lIFdRX1VOQk9VTkRfTUFYX0FDVElWRQlcCisJbWF4X3QoaW50LCBXUV9NQVhfQUNUSVZFLCBudW1fcG9zc2libGVfY3B1cygpICogV1FfTUFYX1VOQk9VTkRfUEVSX0NQVSkKKworLyoKKyAqIFN5c3RlbS13aWRlIHdvcmtxdWV1ZXMgd2hpY2ggYXJlIGFsd2F5cyBwcmVzZW50LgorICoKKyAqIHN5c3RlbV93cSBpcyB0aGUgb25lIHVzZWQgYnkgc2NoZWR1bGVbX2RlbGF5ZWRdX3dvcmtbX29uXSgpLgorICogTXVsdGktQ1BVIG11bHRpLXRocmVhZGVkLiAgVGhlcmUgYXJlIHVzZXJzIHdoaWNoIGV4cGVjdCByZWxhdGl2ZWx5CisgKiBzaG9ydCBxdWV1ZSBmbHVzaCB0aW1lLiAgRG9uJ3QgcXVldWUgd29ya3Mgd2hpY2ggY2FuIHJ1biBmb3IgdG9vCisgKiBsb25nLgorICoKKyAqIHN5c3RlbV9sb25nX3dxIGlzIHNpbWlsYXIgdG8gc3lzdGVtX3dxIGJ1dCBtYXkgaG9zdCBsb25nIHJ1bm5pbmcKKyAqIHdvcmtzLiAgUXVldWUgZmx1c2hpbmcgbWlnaHQgdGFrZSByZWxhdGl2ZWx5IGxvbmcuCisgKgorICogc3lzdGVtX25ydF93cSBpcyBub24tcmVlbnRyYW50IGFuZCBndWFyYW50ZWVzIHRoYXQgYW55IGdpdmVuIHdvcmsKKyAqIGl0ZW0gaXMgbmV2ZXIgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgYnkgbXVsdGlwbGUgQ1BVcy4gIFF1ZXVlCisgKiBmbHVzaGluZyBtaWdodCB0YWtlIHJlbGF0aXZlbHkgbG9uZy4KKyAqCisgKiBzeXN0ZW1fdW5ib3VuZF93cSBpcyB1bmJvdW5kIHdvcmtxdWV1ZS4gIFdvcmtlcnMgYXJlIG5vdCBib3VuZCB0bworICogYW55IHNwZWNpZmljIENQVSwgbm90IGNvbmN1cnJlbmN5IG1hbmFnZWQsIGFuZCBhbGwgcXVldWVkIHdvcmtzIGFyZQorICogZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYXMgbG9uZyBhcyBtYXhfYWN0aXZlIGxpbWl0IGlzIG5vdCByZWFjaGVkIGFuZAorICogcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuCisgKi8KK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3lzdGVtX3dxOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzeXN0ZW1fbG9uZ193cTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3lzdGVtX25ydF93cTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3lzdGVtX3VuYm91bmRfd3E7CiAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqCi1fX2NyZWF0ZV93b3JrcXVldWVfa2V5KGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaW5nbGV0aHJlYWQsCi0JCSAgICAgICBpbnQgZnJlZXplYWJsZSwgaW50IHJ0LCBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKLQkJICAgICAgIGNvbnN0IGNoYXIgKmxvY2tfbmFtZSk7CitfX2FsbG9jX3dvcmtxdWV1ZV9rZXkoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgbWF4X2FjdGl2ZSwKKwkJICAgICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXksIGNvbnN0IGNoYXIgKmxvY2tfbmFtZSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAotI2RlZmluZSBfX2NyZWF0ZV93b3JrcXVldWUobmFtZSwgc2luZ2xldGhyZWFkLCBmcmVlemVhYmxlLCBydCkJXAorI2RlZmluZSBhbGxvY193b3JrcXVldWUobmFtZSwgZmxhZ3MsIG1heF9hY3RpdmUpCQlcCiAoewkJCQkJCQkJXAogCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAogCWNvbnN0IGNoYXIgKl9fbG9ja19uYW1lOwkJCQlcCkBAIC0xOTYsMjAgKzI5MCwyMCBAQAogCWVsc2UJCQkJCQkJXAogCQlfX2xvY2tfbmFtZSA9ICNuYW1lOwkJCQlcCiAJCQkJCQkJCVwKLQlfX2NyZWF0ZV93b3JrcXVldWVfa2V5KChuYW1lKSwgKHNpbmdsZXRocmVhZCksCQlcCi0JCQkgICAgICAgKGZyZWV6ZWFibGUpLCAocnQpLCAmX19rZXksCVwKLQkJCSAgICAgICBfX2xvY2tfbmFtZSk7CQkJXAorCV9fYWxsb2Nfd29ya3F1ZXVlX2tleSgobmFtZSksIChmbGFncyksIChtYXhfYWN0aXZlKSwJXAorCQkJICAgICAgJl9fa2V5LCBfX2xvY2tfbmFtZSk7CQlcCiB9KQogI2Vsc2UKLSNkZWZpbmUgX19jcmVhdGVfd29ya3F1ZXVlKG5hbWUsIHNpbmdsZXRocmVhZCwgZnJlZXplYWJsZSwgcnQpCVwKLQlfX2NyZWF0ZV93b3JrcXVldWVfa2V5KChuYW1lKSwgKHNpbmdsZXRocmVhZCksIChmcmVlemVhYmxlKSwgKHJ0KSwgXAotCQkJICAgICAgIE5VTEwsIE5VTEwpCisjZGVmaW5lIGFsbG9jX3dvcmtxdWV1ZShuYW1lLCBmbGFncywgbWF4X2FjdGl2ZSkJCVwKKwlfX2FsbG9jX3dvcmtxdWV1ZV9rZXkoKG5hbWUpLCAoZmxhZ3MpLCAobWF4X2FjdGl2ZSksIE5VTEwsIE5VTEwpCiAjZW5kaWYKIAotI2RlZmluZSBjcmVhdGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDAsIDAsIDApCi0jZGVmaW5lIGNyZWF0ZV9ydF93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCwgMCwgMSkKLSNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDEsIDApCi0jZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDAsIDApCisjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkJCQkJCVwKKwlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9SRVNDVUVSLCAxKQorI2RlZmluZSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUobmFtZSkJCQlcCisJYWxsb2Nfd29ya3F1ZXVlKChuYW1lKSwgV1FfRlJFRVpFQUJMRSB8IFdRX1VOQk9VTkQgfCBXUV9SRVNDVUVSLCAxKQorI2RlZmluZSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKQkJCVwKKwlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9VTkJPVU5EIHwgV1FfUkVTQ1VFUiwgMSkKIAogZXh0ZXJuIHZvaWQgZGVzdHJveV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKIApAQCAtMjMxLDE2ICszMjUsMTkgQEAKIGV4dGVybiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsIHN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmssCiAJCQkJCXVuc2lnbmVkIGxvbmcgZGVsYXkpOwogZXh0ZXJuIGludCBzY2hlZHVsZV9vbl9lYWNoX2NwdSh3b3JrX2Z1bmNfdCBmdW5jKTsKLWV4dGVybiBpbnQgY3VycmVudF9pc19rZXZlbnRkKHZvaWQpOwogZXh0ZXJuIGludCBrZXZlbnRkX3VwKHZvaWQpOwogCi1leHRlcm4gdm9pZCBpbml0X3dvcmtxdWV1ZXModm9pZCk7CiBpbnQgZXhlY3V0ZV9pbl9wcm9jZXNzX2NvbnRleHQod29ya19mdW5jX3QgZm4sIHN0cnVjdCBleGVjdXRlX3dvcmsgKik7CiAKIGV4dGVybiBpbnQgZmx1c2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCiBleHRlcm4gaW50IGNhbmNlbF93b3JrX3N5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorZXh0ZXJuIHZvaWQgd29ya3F1ZXVlX3NldF9tYXhfYWN0aXZlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKKwkJCQkgICAgIGludCBtYXhfYWN0aXZlKTsKK2V4dGVybiBib29sIHdvcmtxdWV1ZV9jb25nZXN0ZWQodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgd29ya19jcHUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgd29ya19idXN5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIC8qCiAgKiBLaWxsIG9mZiBhIHBlbmRpbmcgc2NoZWR1bGVfZGVsYXllZF93b3JrKCkuICBOb3RlIHRoYXQgdGhlIHdvcmsgY2FsbGJhY2sKICAqIGZ1bmN0aW9uIG1heSBzdGlsbCBiZSBydW5uaW5nIG9uIHJldHVybiBmcm9tIGNhbmNlbF9kZWxheWVkX3dvcmsoKSwgdW5sZXNzCkBAIC0yOTcsNCArMzk0LDE1IEBACiAjZWxzZQogbG9uZyB3b3JrX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBsb25nICgqZm4pKHZvaWQgKiksIHZvaWQgKmFyZyk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisjaWZkZWYgQ09ORklHX0ZSRUVaRVIKK2V4dGVybiB2b2lkIGZyZWV6ZV93b3JrcXVldWVzX2JlZ2luKHZvaWQpOworZXh0ZXJuIGJvb2wgZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSh2b2lkKTsKK2V4dGVybiB2b2lkIHRoYXdfd29ya3F1ZXVlcyh2b2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfRlJFRVpFUiAqLworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKK2ludCBpbl93b3JrcXVldWVfY29udGV4dChzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOworI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggYzI0ZWNhNy4uNzJhNWQ2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC0xMjQsOCArMTI0LDkgQEAKIGludCBkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsCiAJCQkJICAgICAgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKIAotdm9pZCBnZXRfZGlydHlfbGltaXRzKHVuc2lnbmVkIGxvbmcgKnBiYWNrZ3JvdW5kLCB1bnNpZ25lZCBsb25nICpwZGlydHksCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgKnBiZGlfZGlydHksIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwordm9pZCBnbG9iYWxfZGlydHlfbGltaXRzKHVuc2lnbmVkIGxvbmcgKnBiYWNrZ3JvdW5kLCB1bnNpZ25lZCBsb25nICpwZGlydHkpOwordW5zaWduZWQgbG9uZyBiZGlfZGlydHlfbGltaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRpcnR5KTsKIAogdm9pZCBwYWdlX3dyaXRlYmFja19pbml0KHZvaWQpOwogdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkX25yKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmggYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAppbmRleCA5ZWJlODU1Li44ZDA4ZWJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2N4MjM0MXguaAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjM0MXguaApAQCAtMTksNiArMTksOCBAQAogI2lmbmRlZiBDWDIzNDFYX0gKICNkZWZpbmUgQ1gyMzQxWF9ICiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisKIGVudW0gY3gyMzQxeF9wb3J0IHsKIAlDWDIzNDFYX1BPUlRfTUVNT1JZICAgID0gMCwKIAlDWDIzNDFYX1BPUlRfU1RSRUFNSU5HID0gMSwKQEAgLTk5LDYgKzEwMSwxMDEgQEAKIHZvaWQgY3gyMzQxeF9maWxsX2RlZmF1bHRzKHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwKTsKIHZvaWQgY3gyMzQxeF9sb2dfc3RhdHVzKGNvbnN0IHN0cnVjdCBjeDIzNDF4X21wZWdfcGFyYW1zICpwLCBjb25zdCBjaGFyICpwcmVmaXgpOwogCitzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyOworCitzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyX29wcyB7CisJLyogbmVlZGVkIGZvciB0aGUgdmlkZW8gY2xvY2sgZnJlcSAqLworCWludCAoKnNfYXVkaW9fc2FtcGxpbmdfZnJlcSkoc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqaGRsLCB1MzIgdmFsKTsKKwkvKiBuZWVkZWQgZm9yIGR1YWx3YXRjaCAqLworCWludCAoKnNfYXVkaW9fbW9kZSkoc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqaGRsLCB1MzIgdmFsKTsKKwkvKiBuZWVkZWQgZm9yIHNldHRpbmcgdXAgdGhlIHZpZGVvIHJlc29sdXRpb24gKi8KKwlpbnQgKCpzX3ZpZGVvX2VuY29kaW5nKShzdHJ1Y3QgY3gyMzQxeF9oYW5kbGVyICpoZGwsIHUzMiB2YWwpOworCS8qIG5lZWRlZCBmb3Igc2V0dGluZyB1cCB0aGUgc2xpY2VkIHZiaSBpbnNlcnRpb24gZGF0YSBzdHJ1Y3R1cmVzICovCisJaW50ICgqc19zdHJlYW1fdmJpX2ZtdCkoc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqaGRsLCB1MzIgdmFsKTsKK307CisKK3N0cnVjdCBjeDIzNDF4X2hhbmRsZXIgeworCXUzMiBjYXBhYmlsaXRpZXM7CisJZW51bSBjeDIzNDF4X3BvcnQgcG9ydDsKKwl1MTYgd2lkdGg7CisJdTE2IGhlaWdodDsKKwl1MTYgaXNfNTBoejsKKwl1MzIgYXVkaW9fcHJvcGVydGllczsKKworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoZGw7CisJdm9pZCAqcHJpdjsKKwljeDIzNDF4X21ib3hfZnVuYyBmdW5jOworCWNvbnN0IHN0cnVjdCBjeDIzNDF4X2hhbmRsZXJfb3BzICpvcHM7CisKKwlzdHJ1Y3QgdjRsMl9jdHJsICpzdHJlYW1fdmJpX2ZtdDsKKworCXN0cnVjdCB7CisJCS8qIGF1ZGlvIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybCAqYXVkaW9fc2FtcGxpbmdfZnJlcTsKKwkJc3RydWN0IHY0bDJfY3RybCAqYXVkaW9fZW5jb2Rpbmc7CisJCXN0cnVjdCB2NGwyX2N0cmwgKmF1ZGlvX2wyX2JpdHJhdGU7CisJCXN0cnVjdCB2NGwyX2N0cmwgKmF1ZGlvX21vZGU7CisJCXN0cnVjdCB2NGwyX2N0cmwgKmF1ZGlvX21vZGVfZXh0ZW5zaW9uOworCQlzdHJ1Y3QgdjRsMl9jdHJsICphdWRpb19lbXBoYXNpczsKKwkJc3RydWN0IHY0bDJfY3RybCAqYXVkaW9fY3JjOworCQlzdHJ1Y3QgdjRsMl9jdHJsICphdWRpb19hYzNfYml0cmF0ZTsKKwl9OworCisJc3RydWN0IHsKKwkJLyogdmlkZW8gZ29wIGNsdXN0ZXIgKi8KKwkJc3RydWN0IHY0bDJfY3RybCAqdmlkZW9fYl9mcmFtZXM7CisJCXN0cnVjdCB2NGwyX2N0cmwgKnZpZGVvX2dvcF9zaXplOworCX07CisKKwlzdHJ1Y3QgeworCQkvKiBzdHJlYW0gdHlwZSBjbHVzdGVyICovCisJCXN0cnVjdCB2NGwyX2N0cmwgKnN0cmVhbV90eXBlOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19lbmNvZGluZzsKKwkJc3RydWN0IHY0bDJfY3RybCAqdmlkZW9fYml0cmF0ZV9tb2RlOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19iaXRyYXRlOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19iaXRyYXRlX3BlYWs7CisJfTsKKworCXN0cnVjdCB7CisJCS8qIHZpZGVvIG11dGUgY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19tdXRlOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19tdXRlX3l1djsKKwl9OworCisJc3RydWN0IHsKKwkJLyogdmlkZW8gZmlsdGVyIG1vZGUgY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb190ZW1wb3JhbF9maWx0ZXJfbW9kZTsKKwkJc3RydWN0IHY0bDJfY3RybCAqdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlOworCX07CisKKwlzdHJ1Y3QgeworCQkvKiB2aWRlbyBmaWx0ZXIgdHlwZSBjbHVzdGVyICovCisJCXN0cnVjdCB2NGwyX2N0cmwgKnZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZTsKKwkJc3RydWN0IHY0bDJfY3RybCAqdmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGU7CisJfTsKKworCXN0cnVjdCAgeworCQkvKiB2aWRlbyBmaWx0ZXIgY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19zcGF0aWFsX2ZpbHRlcjsKKwkJc3RydWN0IHY0bDJfY3RybCAqdmlkZW9fdGVtcG9yYWxfZmlsdGVyOworCX07CisKKwlzdHJ1Y3QgeworCQkvKiB2aWRlbyBtZWRpYW4gY2x1c3RlciAqLworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfdG9wOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfYm90dG9tOworCQlzdHJ1Y3QgdjRsMl9jdHJsICp2aWRlb19jaHJvbWFfbWVkaWFuX2ZpbHRlcl90b3A7CisJCXN0cnVjdCB2NGwyX2N0cmwgKnZpZGVvX2Nocm9tYV9tZWRpYW5fZmlsdGVyX2JvdHRvbTsKKwl9OworfTsKKworaW50IGN4MjM0MXhfaGFuZGxlcl9pbml0KHN0cnVjdCBjeDIzNDF4X2hhbmRsZXIgKmN4aGRsLAorCQkJIHVuc2lnbmVkIG5yX29mX2NvbnRyb2xzX2hpbnQpOwordm9pZCBjeDIzNDF4X2hhbmRsZXJfc2V0XzUwaHooc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqY3hoZGwsIGludCBpc181MGh6KTsKK2ludCBjeDIzNDF4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqY3hoZGwpOwordm9pZCBjeDIzNDF4X2hhbmRsZXJfc2V0X2J1c3koc3RydWN0IGN4MjM0MXhfaGFuZGxlciAqY3hoZGwsIGludCBidXN5KTsKKwogLyogRmlybXdhcmUgbmFtZXMgKi8KICNkZWZpbmUgQ1gyMzQxWF9GSVJNX0VOQ19GSUxFTkFNRSAidjRsLWN4MjM0MXgtZW5jLmZ3IgogLyogRGVjb2RlciBmaXJtd2FyZSBmb3IgdGhlIGN4MjM0MTUgb25seSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmggYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaAppbmRleCAwYjBjYjE3Li40NmQxYTE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaAorKysgYi9pbmNsdWRlL21lZGlhL2N4MjU4NDAuaApAQCAtOTcsNCArOTcsOTEgQEAKIAlDWDI1ODQwX0FVRElPOCwKIH07CiAKK2VudW0gY3gyNTg0MF9pb19waW4geworCUNYMjU4NDBfUElOX0RWQUxJRF9QUkdNMCA9IDAsCisJQ1gyNTg0MF9QSU5fRklFTERfUFJHTTEsCisJQ1gyNTg0MF9QSU5fSFJFU0VUX1BSR00yLAorCUNYMjU4NDBfUElOX1ZSRVNFVF9IQ1RMX1BSR00zLAorCUNYMjU4NDBfUElOX0lSUV9OX1BSR000LAorCUNYMjU4NDBfUElOX0lSX1RYX1BSR002LAorCUNYMjU4NDBfUElOX0lSX1JYX1BSR001LAorCUNYMjU4NDBfUElOX0dQSU8wX1BSR004LAorCUNYMjU4NDBfUElOX0dQSU8xX1BSR005LAorCUNYMjU4NDBfUElOX1NBX1NESU4sCQkvKiBBbHRlcm5hdGUgR1AgSW5wdXQgb25seSAqLworCUNYMjU4NDBfUElOX1NBX1NET1VULAkJLyogQWx0ZXJuYXRlIEdQIElucHV0IG9ubHkgKi8KKwlDWDI1ODQwX1BJTl9QTExfQ0xLX1BSR003LAorCUNYMjU4NDBfUElOX0NISVBfU0VMX1ZJUENMSywJLyogT3V0cHV0IG9ubHkgKi8KK307CisKK2VudW0gY3gyNTg0MF9pb19wYWQgeworCS8qIE91dHB1dCBwYWRzICovCisJQ1gyNTg0MF9QQURfREVGQVVMVCA9IDAsCisJQ1gyNTg0MF9QQURfQUNUSVZFLAorCUNYMjU4NDBfUEFEX1ZBQ1RJVkUsCisJQ1gyNTg0MF9QQURfQ0JGTEFHLAorCUNYMjU4NDBfUEFEX1ZJRF9EQVRBX0VYVDAsCisJQ1gyNTg0MF9QQURfVklEX0RBVEFfRVhUMSwKKwlDWDI1ODQwX1BBRF9HUE8wLAorCUNYMjU4NDBfUEFEX0dQTzEsCisJQ1gyNTg0MF9QQURfR1BPMiwKKwlDWDI1ODQwX1BBRF9HUE8zLAorCUNYMjU4NDBfUEFEX0lSUV9OLAorCUNYMjU4NDBfUEFEX0FDX1NZTkMsCisJQ1gyNTg0MF9QQURfQUNfU0RPVVQsCisJQ1gyNTg0MF9QQURfUExMX0NMSywKKwlDWDI1ODQwX1BBRF9WUkVTRVQsCisJQ1gyNTg0MF9QQURfUkVTRVJWRUQsCisJLyogUGFkcyBmb3IgUExMX0NMSyBvdXRwdXQgb25seSAqLworCUNYMjU4NDBfUEFEX1hUSV9YNV9ETEwsCisJQ1gyNTg0MF9QQURfQVVYX1BMTCwKKwlDWDI1ODQwX1BBRF9WSURfUExMLAorCUNYMjU4NDBfUEFEX1hUSSwKKwkvKiBJbnB1dCBQYWRzICovCisJQ1gyNTg0MF9QQURfR1BJMCwKKwlDWDI1ODQwX1BBRF9HUEkxLAorCUNYMjU4NDBfUEFEX0dQSTIsCisJQ1gyNTg0MF9QQURfR1BJMywKK307CisKK2VudW0gY3gyNTg0MF9pb19waW5fc3RyZW5ndGggeworCUNYMjU4NDBfUElOX0RSSVZFX01FRElVTSA9IDAsCisJQ1gyNTg0MF9QSU5fRFJJVkVfU0xPVywKKwlDWDI1ODQwX1BJTl9EUklWRV9GQVNULAorfTsKKworZW51bSBjeDIzODg1X2lvX3BpbiB7CisJQ1gyMzg4NV9QSU5fSVJfUlhfR1BJTzE5LAorCUNYMjM4ODVfUElOX0lSX1RYX0dQSU8yMCwKKwlDWDIzODg1X1BJTl9JMlNfU0RBVF9HUElPMjEsCisJQ1gyMzg4NV9QSU5fSTJTX1dDTEtfR1BJTzIyLAorCUNYMjM4ODVfUElOX0kyU19CQ0xLX0dQSU8yMywKKwlDWDIzODg1X1BJTl9JUlFfTl9HUElPMTYsCit9OworCitlbnVtIGN4MjM4ODVfaW9fcGFkIHsKKwlDWDIzODg1X1BBRF9JUl9SWCwKKwlDWDIzODg1X1BBRF9HUElPMTksCisJQ1gyMzg4NV9QQURfSVJfVFgsCisJQ1gyMzg4NV9QQURfR1BJTzIwLAorCUNYMjM4ODVfUEFEX0kyU19TREFULAorCUNYMjM4ODVfUEFEX0dQSU8yMSwKKwlDWDIzODg1X1BBRF9JMlNfV0NMSywKKwlDWDIzODg1X1BBRF9HUElPMjIsCisJQ1gyMzg4NV9QQURfSTJTX0JDTEssCisJQ1gyMzg4NV9QQURfR1BJTzIzLAorCUNYMjM4ODVfUEFEX0lSUV9OLAorCUNYMjM4ODVfUEFEX0dQSU8xNiwKK307CisKKy8qIHB2cjE1MF93b3JrYXJvdW5kIGFjdGl2YXRlcyBhIHdvcmthcm91bmQgZm9yIGEgaGFyZHdhcmUgYnVnIHRoYXQgaXMKKyAgIHByZXNlbnQgaW4gSGF1cHBhdWdlIFBWUi0xNTAgKGFuZCBwb3NzaWJseSBQVlItNTAwKSBjYXJkcyB0aGF0IGhhdmUKKyAgIGNlcnRhaW4gTlRTQyB0dW5lcnMgKHR2ZWVwcm9tIHR1bmVyIG1vZGVsIG51bWJlcnMgODUsIDk5IGFuZCAxMTIpLiBUaGUKKyAgIGF1ZGlvIGF1dG9kZXRlY3QgZmFpbHMgb24gc29tZSBjaGFubmVscyBmb3IgdGhlc2UgbW9kZWxzIGFuZCB0aGUgd29ya2Fyb3VuZAorICAgaXMgdG8gc2VsZWN0IHRoZSBhdWRpbyBzdGFuZGFyZCBleHBsaWNpdGx5LiBNYW55IHRoYW5rcyB0byBIYXVwcGF1Z2UgZm9yCisgICBwcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbi4KKyAgIFRoaXMgcGxhdGZvcm0gZGF0YSBvbmx5IG5lZWRzIHRvIGJlIHN1cHBsaWVkIGJ5IHRoZSBpdnR2IGRyaXZlci4gKi8KK3N0cnVjdCBjeDI1ODQwX3BsYXRmb3JtX2RhdGEgeworCWludCBwdnIxNTBfd29ya2Fyb3VuZDsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb3JlLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAppbmRleCA1MTNlNjBkLi5lYjdmZGRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvcmUuaApAQCAtNDEsNiArNDEsMTEgQEAKICAqCWFueXRoaW5nIHdpdGggaXQuIFlldCwgYXMgdGhlIHNhbWUga2V5Y29kZSB0YWJsZSBjYW4gYmUgdXNlZCB3aXRoIG90aGVyCiAgKglkZXZpY2VzLCBhIG1hc2sgaXMgcHJvdmlkZWQgdG8gYWxsb3cgaXRzIHVzYWdlLiBEcml2ZXJzIHNob3VsZCBnZW5lcmFsbHkKICAqCWxlYXZlIHRoaXMgZmllbGQgaW4gYmxhbmsKKyAqIEB0aW1lb3V0OiBvcHRpb25hbCB0aW1lIGFmdGVyIHdoaWNoIGRldmljZSBzdG9wcyBzZW5kaW5nIGRhdGEKKyAqIEBtaW5fdGltZW91dDogbWluaW11bSB0aW1lb3V0IHN1cHBvcnRlZCBieSBkZXZpY2UKKyAqIEBtYXhfdGltZW91dDogbWF4aW11bSB0aW1lb3V0IHN1cHBvcnRlZCBieSBkZXZpY2UKKyAqIEByeF9yZXNvbHV0aW9uIDogcmVzb2x1dGlvbiAoaW4gbnMpIG9mIGlucHV0IHNhbXBsZXIKKyAqIEB0eF9yZXNvbHV0aW9uOiByZXNvbHV0aW9uIChpbiBucykgb2Ygb3V0cHV0IHNhbXBsZXIKICAqIEBwcml2OiBkcml2ZXItc3BlY2lmaWMgZGF0YSwgdG8gYmUgdXNlZCBvbiB0aGUgY2FsbGJhY2tzCiAgKiBAY2hhbmdlX3Byb3RvY29sOiBhbGxvdyBjaGFuZ2luZyB0aGUgcHJvdG9jb2wgdXNlZCBvbiBoYXJkd2FyZSBkZWNvZGVycwogICogQG9wZW46IGNhbGxiYWNrIHRvIGFsbG93IGRyaXZlcnMgdG8gZW5hYmxlIHBvbGxpbmcvaXJxIHdoZW4gSVIgaW5wdXQgZGV2aWNlCkBAIC00OSwxOSArNTQsMzYgQEAKICAqCWlzIG9wZW5lZC4KICAqIEBzX3R4X21hc2s6IHNldCB0cmFuc21pdHRlciBtYXNrIChmb3IgZGV2aWNlcyB3aXRoIG11bHRpcGxlIHR4IG91dHB1dHMpCiAgKiBAc190eF9jYXJyaWVyOiBzZXQgdHJhbnNtaXQgY2FycmllciBmcmVxdWVuY3kKKyAqIEBzX3R4X2R1dHlfY3ljbGU6IHNldCB0cmFuc21pdCBkdXR5IGN5Y2xlICgwJSAtIDEwMCUpCisgKiBAc19yeF9jYXJyaWVyOiBpbmZvcm0gZHJpdmVyIGFib3V0IGNhcnJpZXIgaXQgaXMgZXhwZWN0ZWQgdG8gaGFuZGxlCiAgKiBAdHhfaXI6IHRyYW5zbWl0IElSCisgKiBAc19pZGxlOiBvcHRpb25hbDogZW5hYmxlL2Rpc2FibGUgaGFyZHdhcmUgaWRsZSBtb2RlLCB1cG9uIHdoaWNoLAorCWRldmljZSBkb2Vzbid0IGludGVycnVwdCBob3N0IHVudGlsIGl0IHNlZXMgSVIgcHVsc2VzCisgKiBAc19sZWFybmluZ19tb2RlOiBlbmFibGUgd2lkZSBiYW5kIHJlY2VpdmVyIHVzZWQgZm9yIGxlYXJuaW5nCiAgKi8KIHN0cnVjdCBpcl9kZXZfcHJvcHMgewogCWVudW0gcmNfZHJpdmVyX3R5cGUJZHJpdmVyX3R5cGU7CiAJdW5zaWduZWQgbG9uZwkJYWxsb3dlZF9wcm90b3M7CiAJdTMyCQkJc2Nhbm1hc2s7CisKKwl1MzIJCQl0aW1lb3V0OworCXUzMgkJCW1pbl90aW1lb3V0OworCXUzMgkJCW1heF90aW1lb3V0OworCisJdTMyCQkJcnhfcmVzb2x1dGlvbjsKKwl1MzIJCQl0eF9yZXNvbHV0aW9uOworCiAJdm9pZAkJCSpwcml2OwogCWludAkJCSgqY2hhbmdlX3Byb3RvY29sKSh2b2lkICpwcml2LCB1NjQgaXJfdHlwZSk7CiAJaW50CQkJKCpvcGVuKSh2b2lkICpwcml2KTsKIAl2b2lkCQkJKCpjbG9zZSkodm9pZCAqcHJpdik7CiAJaW50CQkJKCpzX3R4X21hc2spKHZvaWQgKnByaXYsIHUzMiBtYXNrKTsKIAlpbnQJCQkoKnNfdHhfY2Fycmllcikodm9pZCAqcHJpdiwgdTMyIGNhcnJpZXIpOworCWludAkJCSgqc190eF9kdXR5X2N5Y2xlKSh2b2lkICpwcml2LCB1MzIgZHV0eV9jeWNsZSk7CisJaW50CQkJKCpzX3J4X2NhcnJpZXJfcmFuZ2UpKHZvaWQgKnByaXYsIHUzMiBtaW4sIHUzMiBtYXgpOwogCWludAkJCSgqdHhfaXIpKHZvaWQgKnByaXYsIGludCAqdHhidWYsIHUzMiBuKTsKKwl2b2lkCQkJKCpzX2lkbGUpKHZvaWQgKnByaXYsIGludCBlbmFibGUpOworCWludAkJCSgqc19sZWFybmluZ19tb2RlKSh2b2lkICpwcml2LCBpbnQgZW5hYmxlKTsKIH07CiAKIHN0cnVjdCBpcl9pbnB1dF9kZXYgewpAQCAtNjksOSArOTEsMTAgQEAKIAljaGFyCQkJCSpkcml2ZXJfbmFtZTsJLyogTmFtZSBvZiB0aGUgZHJpdmVyIG1vZHVsZSAqLwogCXN0cnVjdCBpcl9zY2FuY29kZV90YWJsZQlyY190YWI7CQkvKiBzY2FuL2tleSB0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcJCQlkZXZubzsJCS8qIGRldmljZSBudW1iZXIgKi8KLQljb25zdCBzdHJ1Y3QgaXJfZGV2X3Byb3BzCSpwcm9wczsJCS8qIERldmljZSBwcm9wZXJ0aWVzICovCisJc3RydWN0IGlyX2Rldl9wcm9wcwkJKnByb3BzOwkJLyogRGV2aWNlIHByb3BlcnRpZXMgKi8KIAlzdHJ1Y3QgaXJfcmF3X2V2ZW50X2N0cmwJKnJhdzsJCS8qIGZvciByYXcgcHVsc2Uvc3BhY2UgZXZlbnRzICovCiAJc3RydWN0IGlucHV0X2RldgkJKmlucHV0X2RldjsJLyogdGhlIGlucHV0IGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UgKi8KKwlib29sCQkJCWlkbGU7CiAKIAkvKiBrZXkgaW5mbyAtIG5lZWRlZCBieSBJUiBrZXljb2RlIGhhbmRsZXJzICovCiAJc3BpbmxvY2tfdAkJCWtleWxvY2s7CS8qIHByb3RlY3RzIHRoZSBiZWxvdyBtZW1iZXJzICovCkBAIC05NSwxMiArMTE4LDEyIEBACiAvKiBGcm9tIGlyLWtleXRhYmxlLmMgKi8KIGludCBfX2lyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJICAgICAgY29uc3Qgc3RydWN0IGlyX3NjYW5jb2RlX3RhYmxlICppcl9jb2RlcywKLQkJICAgICAgY29uc3Qgc3RydWN0IGlyX2Rldl9wcm9wcyAqcHJvcHMsCisJCSAgICAgIHN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzLAogCQkgICAgICBjb25zdCBjaGFyICpkcml2ZXJfbmFtZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlyX2lucHV0X3JlZ2lzdGVyKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKIAkJICAgICAgY29uc3QgY2hhciAqbWFwX25hbWUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpcl9kZXZfcHJvcHMgKnByb3BzLAorCQkgICAgICBzdHJ1Y3QgaXJfZGV2X3Byb3BzICpwcm9wcywKIAkJICAgICAgY29uc3QgY2hhciAqZHJpdmVyX25hbWUpIHsKIAlzdHJ1Y3QgaXJfc2NhbmNvZGVfdGFibGUgKmlyX2NvZGVzOwogCXN0cnVjdCBpcl9pbnB1dF9kZXYgKmlyX2RldjsKQEAgLTExMCw4ICsxMzMsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpcl9jb2RlcyA9IGdldF9yY19tYXAobWFwX25hbWUpOwotCWlmICghaXJfY29kZXMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghaXJfY29kZXMpIHsKKwkJaXJfY29kZXMgPSBnZXRfcmNfbWFwKFJDX01BUF9FTVBUWSk7CisKKwkJaWYgKCFpcl9jb2RlcykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJjID0gX19pcl9pbnB1dF9yZWdpc3RlcihkZXYsIGlyX2NvZGVzLCBwcm9wcywgZHJpdmVyX25hbWUpOwogCWlmIChyYyA8IDApCkBAIC0xNDQsNiArMTcxLDEwIEBACiB2b2lkIGlyX3Jhd19ldmVudF9oYW5kbGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KTsKIGludCBpcl9yYXdfZXZlbnRfc3RvcmUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3QgaXJfcmF3X2V2ZW50ICpldik7CiBpbnQgaXJfcmF3X2V2ZW50X3N0b3JlX2VkZ2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBlbnVtIHJhd19ldmVudF90eXBlIHR5cGUpOworaW50IGlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCisJCQkJc3RydWN0IGlyX3Jhd19ldmVudCAqZXYpOwordm9pZCBpcl9yYXdfZXZlbnRfc2V0X2lkbGUoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBpbnQgaWRsZSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcl9yYXdfZXZlbnRfcmVzZXQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2KQogewogCXN0cnVjdCBpcl9yYXdfZXZlbnQgZXYgPSB7IC5wdWxzZSA9IGZhbHNlLCAuZHVyYXRpb24gPSAwIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2xpcmMuaCBiL2luY2x1ZGUvbWVkaWEvbGlyYy5oCmluZGV4IDQyYzQ2N2MuLjY2NzhhMTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2xpcmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2xpcmMuaApAQCAtNzcsNiArNzcsNyBAQAogI2RlZmluZSBMSVJDX0NBTl9TRVRfUkVDX0ZJTFRFUiAgICAgICAgICAgMHgwODAwMDAwMAogCiAjZGVmaW5lIExJUkNfQ0FOX01FQVNVUkVfQ0FSUklFUiAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIExJUkNfQ0FOX1VTRV9XSURFQkFORF9SRUNFSVZFUiAgICAweDA0MDAwMDAwCiAKICNkZWZpbmUgTElSQ19DQU5fU0VORCh4KSAoKHgpJkxJUkNfQ0FOX1NFTkRfTUFTSykKICNkZWZpbmUgTElSQ19DQU5fUkVDKHgpICgoeCkmTElSQ19DQU5fUkVDX01BU0spCkBAIC0xNDUsNyArMTQ2LDcgQEAKICAqIGlmIGVuYWJsZWQgZnJvbSB0aGUgbmV4dCBrZXkgcHJlc3Mgb24gdGhlIGRyaXZlciB3aWxsIHNlbmQKICAqIExJUkNfTU9ERTJfRlJFUVVFTkNZIHBhY2tldHMKICAqLwotI2RlZmluZSBMSVJDX1NFVF9NRUFTVVJFX0NBUlJJRVJfTU9ERSAgX0lPVygnaScsIDB4MDAwMDAwMWQsIF9fdTMyKQorI2RlZmluZSBMSVJDX1NFVF9NRUFTVVJFX0NBUlJJRVJfTU9ERQlfSU9XKCdpJywgMHgwMDAwMDAxZCwgX191MzIpCiAKIC8qCiAgKiB0byBzZXQgYSByYW5nZSB1c2UKQEAgLTE2Miw0ICsxNjMsNiBAQAogI2RlZmluZSBMSVJDX1NFVFVQX1NUQVJUICAgICAgICAgICAgICAgX0lPKCdpJywgMHgwMDAwMDAyMSkKICNkZWZpbmUgTElSQ19TRVRVUF9FTkQgICAgICAgICAgICAgICAgIF9JTygnaScsIDB4MDAwMDAwMjIpCiAKKyNkZWZpbmUgTElSQ19TRVRfV0lERUJBTkRfUkVDRUlWRVIgICAgIF9JT1coJ2knLCAweDAwMDAwMDIzLCBfX3UzMikKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3JjLW1hcC5oIGIvaW5jbHVkZS9tZWRpYS9yYy1tYXAuaAppbmRleCA5NTY5ZDA4Li5hOWMwNDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3JjLW1hcC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvcmMtbWFwLmgKQEAgLTExNCw2ICsxMTQsNyBAQAogI2RlZmluZSBSQ19NQVBfUFVSUExFVFYgICAgICAgICAgICAgICAgICAicmMtcHVycGxldHYiCiAjZGVmaW5lIFJDX01BUF9QVjk1MSAgICAgICAgICAgICAgICAgICAgICJyYy1wdjk1MSIKICNkZWZpbmUgUkNfTUFQX1JDNV9IQVVQUEFVR0VfTkVXICAgICAgICAgInJjLXJjNS1oYXVwcGF1Z2UtbmV3IgorI2RlZmluZSBSQ19NQVBfUkM1X1NUUkVBTVpBUCAgICAgICAgICAgICAicmMtcmM1LXN0cmVhbXphcCIKICNkZWZpbmUgUkNfTUFQX1JDNV9UViAgICAgICAgICAgICAgICAgICAgInJjLXJjNS10diIKICNkZWZpbmUgUkNfTUFQX1JDNl9NQ0UgICAgICAgICAgICAgICAgICAgInJjLXJjNi1tY2UiCiAjZGVmaW5lIFJDX01BUF9SRUFMX0FVRElPXzIyMF8zMl9LRVlTICAgICJyYy1yZWFsLWF1ZGlvLTIyMC0zMi1rZXlzIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY3RybHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdiZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWN0cmxzLmgKQEAgLTAsMCArMSw0NjAgQEAKKy8qCisgICAgVjRMMiBjb250cm9scyBzdXBwb3J0IGhlYWRlci4KKworICAgIENvcHlyaWdodCAoQykgMjAxMCAgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfVjRMMl9DVFJMU19ICisjZGVmaW5lIF9WNEwyX0NUUkxTX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworLyogZm9yd2FyZCByZWZlcmVuY2VzICovCitzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXI7CitzdHJ1Y3QgdjRsMl9jdHJsOworc3RydWN0IHZpZGVvX2RldmljZTsKK3N0cnVjdCB2NGwyX3N1YmRldjsKKworLyoqIHN0cnVjdCB2NGwyX2N0cmxfb3BzIC0gVGhlIGNvbnRyb2wgb3BlcmF0aW9ucyB0aGF0IHRoZSBkcml2ZXIgaGFzIHRvIHByb3ZpZGUuCisgICogQGdfdm9sYXRpbGVfY3RybDogR2V0IGEgbmV3IHZhbHVlIGZvciB0aGlzIGNvbnRyb2wuIEdlbmVyYWxseSBvbmx5IHJlbGV2YW50CisgICoJCWZvciB2b2xhdGlsZSAoYW5kIHVzdWFsbHkgcmVhZC1vbmx5KSBjb250cm9scyBzdWNoIGFzIGEgY29udHJvbAorICAqCQl0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgc2lnbmFsIHN0cmVuZ3RoIHdoaWNoIGNoYW5nZXMKKyAgKgkJY29udGludW91c2x5LgorICAqCQlJZiBub3Qgc2V0LCB0aGVuIHRoZSBjdXJyZW50bHkgY2FjaGVkIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQuCisgICogQHRyeV9jdHJsOglUZXN0IHdoZXRoZXIgdGhlIGNvbnRyb2wncyB2YWx1ZSBpcyB2YWxpZC4gT25seSByZWxldmFudCB3aGVuCisgICoJCXRoZSB1c3VhbCBtaW4vbWF4L3N0ZXAgY2hlY2tzIGFyZSBub3Qgc3VmZmljaWVudC4KKyAgKiBAc19jdHJsOglBY3R1YWxseSBzZXQgdGhlIG5ldyBjb250cm9sIHZhbHVlLiBzX2N0cmwgaXMgY29tcHVsc29yeS4gVGhlCisgICoJCWN0cmwtPmhhbmRsZXItPmxvY2sgaXMgaGVsZCB3aGVuIHRoZXNlIG9wcyBhcmUgY2FsbGVkLCBzbyBubworICAqCQlvbmUgZWxzZSBjYW4gYWNjZXNzIGNvbnRyb2xzIG93bmVkIGJ5IHRoYXQgaGFuZGxlci4KKyAgKi8KK3N0cnVjdCB2NGwyX2N0cmxfb3BzIHsKKwlpbnQgKCpnX3ZvbGF0aWxlX2N0cmwpKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOworCWludCAoKnRyeV9jdHJsKShzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKTsKKwlpbnQgKCpzX2N0cmwpKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpOworfTsKKworLyoqIHN0cnVjdCB2NGwyX2N0cmwgLSBUaGUgY29udHJvbCBzdHJ1Y3R1cmUuCisgICogQG5vZGU6CVRoZSBsaXN0IG5vZGUuCisgICogQGhhbmRsZXI6CVRoZSBoYW5kbGVyIHRoYXQgb3ducyB0aGUgY29udHJvbC4KKyAgKiBAY2x1c3RlcjoJUG9pbnQgdG8gc3RhcnQgb2YgY2x1c3RlciBhcnJheS4KKyAgKiBAbmNvbnRyb2xzOglOdW1iZXIgb2YgY29udHJvbHMgaW4gY2x1c3RlciBhcnJheS4KKyAgKiBAaGFzX25ldzoJSW50ZXJuYWwgZmxhZzogc2V0IHdoZW4gdGhlcmUgaXMgYSB2YWxpZCBuZXcgdmFsdWUuCisgICogQGRvbmU6CUludGVybmFsIGZsYWc6IHNldCBmb3IgZWFjaCBwcm9jZXNzZWQgY29udHJvbC4KKyAgKiBAaXNfcHJpdmF0ZTogSWYgc2V0LCB0aGVuIHRoaXMgY29udHJvbCBpcyBwcml2YXRlIHRvIGl0cyBoYW5kbGVyIGFuZCBpdAorICAqCQl3aWxsIG5vdCBiZSBhZGRlZCB0byBhbnkgb3RoZXIgaGFuZGxlcnMuIERyaXZlcnMgY2FuIHNldAorICAqCQl0aGlzIGZsYWcuCisgICogQGlzX3ZvbGF0aWxlOiBJZiBzZXQsIHRoZW4gdGhpcyBjb250cm9sIGlzIHZvbGF0aWxlLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgICoJCWNvbnRyb2wncyBjdXJyZW50IHZhbHVlIGNhbm5vdCBiZSBjYWNoZWQgYW5kIG5lZWRzIHRvIGJlCisgICoJCXJldHJpZXZlZCB0aHJvdWdoIHRoZSBnX3ZvbGF0aWxlX2N0cmwgb3AuIERyaXZlcnMgY2FuIHNldAorICAqCQl0aGlzIGZsYWcuCisgICogQG9wczoJVGhlIGNvbnRyb2wgb3BzLgorICAqIEBpZDoJVGhlIGNvbnRyb2wgSUQuCisgICogQG5hbWU6CVRoZSBjb250cm9sIG5hbWUuCisgICogQHR5cGU6CVRoZSBjb250cm9sIHR5cGUuCisgICogQG1pbmltdW06CVRoZSBjb250cm9sJ3MgbWluaW11bSB2YWx1ZS4KKyAgKiBAbWF4aW11bToJVGhlIGNvbnRyb2wncyBtYXhpbXVtIHZhbHVlLgorICAqIEBkZWZhdWx0X3ZhbHVlOiBUaGUgY29udHJvbCdzIGRlZmF1bHQgdmFsdWUuCisgICogQHN0ZXA6CVRoZSBjb250cm9sJ3Mgc3RlcCB2YWx1ZSBmb3Igbm9uLW1lbnUgY29udHJvbHMuCisgICogQG1lbnVfc2tpcF9tYXNrOiBUaGUgY29udHJvbCdzIHNraXAgbWFzayBmb3IgbWVudSBjb250cm9scy4gVGhpcyBtYWtlcyBpdAorICAqCQllYXN5IHRvIHNraXAgbWVudSBpdGVtcyB0aGF0IGFyZSBub3QgdmFsaWQuIElmIGJpdCBYIGlzIHNldCwKKyAgKgkJdGhlbiBtZW51IGl0ZW0gWCBpcyBza2lwcGVkLiBPZiBjb3Vyc2UsIHRoaXMgb25seSB3b3JrcyBmb3IKKyAgKgkJbWVudXMgd2l0aCA8PSAzMiBtZW51IGl0ZW1zLiBUaGVyZSBhcmUgbm8gbWVudXMgdGhhdCBjb21lCisgICoJCWNsb3NlIHRvIHRoYXQgbnVtYmVyLCBzbyB0aGlzIGlzIE9LLiBTaG91bGQgd2UgZXZlciBuZWVkIG1vcmUsCisgICoJCXRoZW4gdGhpcyB3aWxsIGhhdmUgdG8gYmUgZXh0ZW5kZWQgdG8gYSB1NjQgb3IgYSBiaXQgYXJyYXkuCisgICogQHFtZW51OglBIGNvbnN0IGNoYXIgKiBhcnJheSBmb3IgYWxsIG1lbnUgaXRlbXMuIEFycmF5IGVudHJpZXMgdGhhdCBhcmUKKyAgKgkJZW1wdHkgc3RyaW5ncyAoIiIpIGNvcnJlc3BvbmQgdG8gbm9uLWV4aXN0aW5nIG1lbnUgaXRlbXMgKHRoaXMKKyAgKgkJaXMgaW4gYWRkaXRpb24gdG8gdGhlIG1lbnVfc2tpcF9tYXNrIGFib3ZlKS4gVGhlIGxhc3QgZW50cnkKKyAgKgkJbXVzdCBiZSBOVUxMLgorICAqIEBmbGFnczoJVGhlIGNvbnRyb2wncyBmbGFncy4KKyAgKiBAY3VyOglUaGUgY29udHJvbCdzIGN1cnJlbnQgdmFsdWUuCisgICogQHZhbDoJVGhlIGNvbnRyb2wncyBuZXcgczMyIHZhbHVlLgorICAqIEB2YWw2NDoJVGhlIGNvbnRyb2wncyBuZXcgczY0IHZhbHVlLgorICAqIEBzdHJpbmc6CVRoZSBjb250cm9sJ3MgbmV3IHN0cmluZyB2YWx1ZS4KKyAgKiBAcHJpdjoJVGhlIGNvbnRyb2wncyBwcml2YXRlIHBvaW50ZXIuIEZvciB1c2UgYnkgdGhlIGRyaXZlci4gSXQgaXMKKyAgKgkJdW50b3VjaGVkIGJ5IHRoZSBjb250cm9sIGZyYW1ld29yay4gTm90ZSB0aGF0IHRoaXMgcG9pbnRlciBpcworICAqCQlub3QgZnJlZWQgd2hlbiB0aGUgY29udHJvbCBpcyBkZWxldGVkLiBTaG91bGQgdGhpcyBiZSBuZWVkZWQKKyAgKgkJdGhlbiBhIG5ldyBpbnRlcm5hbCBiaXRmaWVsZCBjYW4gYmUgYWRkZWQgdG8gdGVsbCB0aGUgZnJhbWV3b3JrCisgICoJCXRvIGZyZWUgdGhpcyBwb2ludGVyLgorICAqLworc3RydWN0IHY0bDJfY3RybCB7CisJLyogQWRtaW5pc3RyYXRpdmUgZmllbGRzICovCisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGFuZGxlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsICoqY2x1c3RlcjsKKwl1bnNpZ25lZCBuY29udHJvbHM7CisJdW5zaWduZWQgaW50IGhhc19uZXc6MTsKKwl1bnNpZ25lZCBpbnQgZG9uZToxOworCisJdW5zaWduZWQgaW50IGlzX3ByaXZhdGU6MTsKKwl1bnNpZ25lZCBpbnQgaXNfdm9sYXRpbGU6MTsKKworCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHM7CisJdTMyIGlkOworCWNvbnN0IGNoYXIgKm5hbWU7CisJZW51bSB2NGwyX2N0cmxfdHlwZSB0eXBlOworCXMzMiBtaW5pbXVtLCBtYXhpbXVtLCBkZWZhdWx0X3ZhbHVlOworCXVuaW9uIHsKKwkJdTMyIHN0ZXA7CisJCXUzMiBtZW51X3NraXBfbWFzazsKKwl9OworCWNvbnN0IGNoYXIgKipxbWVudTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuaW9uIHsKKwkJczMyIHZhbDsKKwkJczY0IHZhbDY0OworCQljaGFyICpzdHJpbmc7CisJfSBjdXI7CisJdW5pb24geworCQlzMzIgdmFsOworCQlzNjQgdmFsNjQ7CisJCWNoYXIgKnN0cmluZzsKKwl9OworCXZvaWQgKnByaXY7Cit9OworCisvKiogc3RydWN0IHY0bDJfY3RybF9yZWYgLSBUaGUgY29udHJvbCByZWZlcmVuY2UuCisgICogQG5vZGU6CUxpc3Qgbm9kZSBmb3IgdGhlIHNvcnRlZCBsaXN0LgorICAqIEBuZXh0OglTaW5nbGUtbGluayBsaXN0IG5vZGUgZm9yIHRoZSBoYXNoLgorICAqIEBjdHJsOglUaGUgYWN0dWFsIGNvbnRyb2wgaW5mb3JtYXRpb24uCisgICoKKyAgKiBFYWNoIGNvbnRyb2wgaGFuZGxlciBoYXMgYSBsaXN0IG9mIHRoZXNlIHJlZnMuIFRoZSBsaXN0X2hlYWQgaXMgdXNlZCB0bworICAqIGtlZXAgYSBzb3J0ZWQtYnktY29udHJvbC1JRCBsaXN0IG9mIGFsbCBjb250cm9scywgd2hpbGUgdGhlIG5leHQgcG9pbnRlcgorICAqIGlzIHVzZWQgdG8gbGluayB0aGUgY29udHJvbCBpbiB0aGUgaGFzaCdzIGJ1Y2tldC4KKyAgKi8KK3N0cnVjdCB2NGwyX2N0cmxfcmVmIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IHY0bDJfY3RybF9yZWYgKm5leHQ7CisJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKK307CisKKy8qKiBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgLSBUaGUgY29udHJvbCBoYW5kbGVyIGtlZXBzIHRyYWNrIG9mIGFsbCB0aGUKKyAgKiBjb250cm9sczogYm90aCB0aGUgY29udHJvbHMgb3duZWQgYnkgdGhlIGhhbmRsZXIgYW5kIHRob3NlIGluaGVyaXRlZAorICAqIGZyb20gb3RoZXIgaGFuZGxlcnMuCisgICogQGxvY2s6CUxvY2sgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhpcyBoYW5kbGVyIGFuZCBpdHMgY29udHJvbHMuCisgICogQGN0cmxzOglUaGUgbGlzdCBvZiBjb250cm9scyBvd25lZCBieSB0aGlzIGhhbmRsZXIuCisgICogQGN0cmxfcmVmczoJVGhlIGxpc3Qgb2YgY29udHJvbCByZWZlcmVuY2VzLgorICAqIEBjYWNoZWQ6CVRoZSBsYXN0IGZvdW5kIGNvbnRyb2wgcmVmZXJlbmNlLiBJdCBpcyBjb21tb24gdGhhdCB0aGUgc2FtZQorICAqCQljb250cm9sIGlzIG5lZWRlZCBtdWx0aXBsZSB0aW1lcywgc28gdGhpcyBpcyBhIHNpbXBsZQorICAqCQlvcHRpbWl6YXRpb24uCisgICogQGJ1Y2tldHM6CUJ1Y2tldHMgZm9yIHRoZSBoYXNoaW5nLiBBbGxvd3MgZm9yIHF1aWNrIGNvbnRyb2wgbG9va3VwLgorICAqIEBucl9vZl9idWNrZXRzOiBUb3RhbCBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgYXJyYXkuCisgICogQGVycm9yOglUaGUgZXJyb3IgY29kZSBvZiB0aGUgZmlyc3QgZmFpbGVkIGNvbnRyb2wgYWRkaXRpb24uCisgICovCitzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgeworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY3RybHM7CisJc3RydWN0IGxpc3RfaGVhZCBjdHJsX3JlZnM7CisJc3RydWN0IHY0bDJfY3RybF9yZWYgKmNhY2hlZDsKKwlzdHJ1Y3QgdjRsMl9jdHJsX3JlZiAqKmJ1Y2tldHM7CisJdTE2IG5yX29mX2J1Y2tldHM7CisJaW50IGVycm9yOworfTsKKworLyoqIHN0cnVjdCB2NGwyX2N0cmxfY29uZmlnIC0gQ29udHJvbCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZS4KKyAgKiBAb3BzOglUaGUgY29udHJvbCBvcHMuCisgICogQGlkOglUaGUgY29udHJvbCBJRC4KKyAgKiBAbmFtZToJVGhlIGNvbnRyb2wgbmFtZS4KKyAgKiBAdHlwZToJVGhlIGNvbnRyb2wgdHlwZS4KKyAgKiBAbWluOglUaGUgY29udHJvbCdzIG1pbmltdW0gdmFsdWUuCisgICogQG1heDoJVGhlIGNvbnRyb2wncyBtYXhpbXVtIHZhbHVlLgorICAqIEBzdGVwOglUaGUgY29udHJvbCdzIHN0ZXAgdmFsdWUgZm9yIG5vbi1tZW51IGNvbnRyb2xzLgorICAqIEBkZWY6IAlUaGUgY29udHJvbCdzIGRlZmF1bHQgdmFsdWUuCisgICogQGZsYWdzOglUaGUgY29udHJvbCdzIGZsYWdzLgorICAqIEBtZW51X3NraXBfbWFzazogVGhlIGNvbnRyb2wncyBza2lwIG1hc2sgZm9yIG1lbnUgY29udHJvbHMuIFRoaXMgbWFrZXMgaXQKKyAgKgkJZWFzeSB0byBza2lwIG1lbnUgaXRlbXMgdGhhdCBhcmUgbm90IHZhbGlkLiBJZiBiaXQgWCBpcyBzZXQsCisgICoJCXRoZW4gbWVudSBpdGVtIFggaXMgc2tpcHBlZC4gT2YgY291cnNlLCB0aGlzIG9ubHkgd29ya3MgZm9yCisgICoJCW1lbnVzIHdpdGggPD0gMzIgbWVudSBpdGVtcy4gVGhlcmUgYXJlIG5vIG1lbnVzIHRoYXQgY29tZQorICAqCQljbG9zZSB0byB0aGF0IG51bWJlciwgc28gdGhpcyBpcyBPSy4gU2hvdWxkIHdlIGV2ZXIgbmVlZCBtb3JlLAorICAqCQl0aGVuIHRoaXMgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkIHRvIGEgdTY0IG9yIGEgYml0IGFycmF5LgorICAqIEBxbWVudToJQSBjb25zdCBjaGFyICogYXJyYXkgZm9yIGFsbCBtZW51IGl0ZW1zLiBBcnJheSBlbnRyaWVzIHRoYXQgYXJlCisgICoJCWVtcHR5IHN0cmluZ3MgKCIiKSBjb3JyZXNwb25kIHRvIG5vbi1leGlzdGluZyBtZW51IGl0ZW1zICh0aGlzCisgICoJCWlzIGluIGFkZGl0aW9uIHRvIHRoZSBtZW51X3NraXBfbWFzayBhYm92ZSkuIFRoZSBsYXN0IGVudHJ5CisgICoJCW11c3QgYmUgTlVMTC4KKyAgKiBAaXNfcHJpdmF0ZTogSWYgc2V0LCB0aGVuIHRoaXMgY29udHJvbCBpcyBwcml2YXRlIHRvIGl0cyBoYW5kbGVyIGFuZCBpdAorICAqCQl3aWxsIG5vdCBiZSBhZGRlZCB0byBhbnkgb3RoZXIgaGFuZGxlcnMuCisgICogQGlzX3ZvbGF0aWxlOiBJZiBzZXQsIHRoZW4gdGhpcyBjb250cm9sIGlzIHZvbGF0aWxlLiBUaGlzIG1lYW5zIHRoYXQgdGhlCisgICoJCWNvbnRyb2wncyBjdXJyZW50IHZhbHVlIGNhbm5vdCBiZSBjYWNoZWQgYW5kIG5lZWRzIHRvIGJlCisgICoJCXJldHJpZXZlZCB0aHJvdWdoIHRoZSBnX3ZvbGF0aWxlX2N0cmwgb3AuCisgICovCitzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyB7CisJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wczsKKwl1MzIgaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIHY0bDJfY3RybF90eXBlIHR5cGU7CisJczMyIG1pbjsKKwlzMzIgbWF4OworCXUzMiBzdGVwOworCXMzMiBkZWY7CisJdTMyIGZsYWdzOworCXUzMiBtZW51X3NraXBfbWFzazsKKwljb25zdCBjaGFyICoqcW1lbnU7CisJdW5zaWduZWQgaW50IGlzX3ByaXZhdGU6MTsKKwl1bnNpZ25lZCBpbnQgaXNfdm9sYXRpbGU6MTsKK307CisKKy8qKiB2NGwyX2N0cmxfZmlsbCgpIC0gRmlsbCBpbiB0aGUgY29udHJvbCBmaWVsZHMgYmFzZWQgb24gdGhlIGNvbnRyb2wgSUQuCisgICoKKyAgKiBUaGlzIHdvcmtzIGZvciBhbGwgc3RhbmRhcmQgVjRMMiBjb250cm9scy4KKyAgKiBGb3Igbm9uLXN0YW5kYXJkIGNvbnRyb2xzIGl0IHdpbGwgb25seSBmaWxsIGluIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgKiBhbmQgQG5hbWUgd2lsbCBiZSBOVUxMLgorICAqCisgICogVGhpcyBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgY29udGVudHMgb2YgQG5hbWUsIEB0eXBlIGFuZCBAZmxhZ3MuCisgICogVGhlIGNvbnRlbnRzIG9mIEBtaW4sIEBtYXgsIEBzdGVwIGFuZCBAZGVmIG1heSBiZSBtb2RpZmllZCBkZXBlbmRpbmcgb24KKyAgKiB0aGUgdHlwZS4KKyAgKgorICAqIERvIG5vdCB1c2UgaW4gZHJpdmVycyEgSXQgaXMgdXNlZCBpbnRlcm5hbGx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAqIGNvbnRyb2wgaGFuZGxpbmcgb25seS4gT25jZSBhbGwgZHJpdmVycyBhcmUgY29udmVydGVkIHRvIHVzZSB0aGUgbmV3CisgICogY29udHJvbCBmcmFtZXdvcmsgdGhpcyBmdW5jdGlvbiB3aWxsIG5vIGxvbmdlciBiZSBleHBvcnRlZC4KKyAgKi8KK3ZvaWQgdjRsMl9jdHJsX2ZpbGwodTMyIGlkLCBjb25zdCBjaGFyICoqbmFtZSwgZW51bSB2NGwyX2N0cmxfdHlwZSAqdHlwZSwKKwkJICAgIHMzMiAqbWluLCBzMzIgKm1heCwgczMyICpzdGVwLCBzMzIgKmRlZiwgdTMyICpmbGFncyk7CisKKworLyoqIHY0bDJfY3RybF9oYW5kbGVyX2luaXQoKSAtIEluaXRpYWxpemUgdGhlIGNvbnRyb2wgaGFuZGxlci4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqIEBucl9vZl9jb250cm9sc19oaW50OiBBIGhpbnQgb2YgaG93IG1hbnkgY29udHJvbHMgdGhpcyBoYW5kbGVyIGlzCisgICoJCWV4cGVjdGVkIHRvIHJlZmVyIHRvLiBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIsIHNvIGluY2x1ZGluZworICAqCQlhbnkgaW5oZXJpdGVkIGNvbnRyb2xzLiBJdCBkb2Vzbid0IGhhdmUgdG8gYmUgcHJlY2lzZSwgYnV0IGlmCisgICoJCWl0IGlzIHdheSBvZmYsIHRoZW4geW91IGVpdGhlciB3YXN0ZSBtZW1vcnkgKHRvbyBtYW55IGJ1Y2tldHMKKyAgKgkJYXJlIGFsbG9jYXRlZCkgb3IgdGhlIGNvbnRyb2wgbG9va3VwIGJlY29tZXMgc2xvd2VyIChub3QgZW5vdWdoCisgICoJCWJ1Y2tldHMgYXJlIGFsbG9jYXRlZCwgc28gdGhlcmUgYXJlIG1vcmUgc2xvdyBsaXN0IGxvb2t1cHMpLgorICAqCQlJdCB3aWxsIGFsd2F5cyB3b3JrLCB0aG91Z2guCisgICoKKyAgKiBSZXR1cm5zIGFuIGVycm9yIGlmIHRoZSBidWNrZXRzIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuIFRoaXMgZXJyb3Igd2lsbAorICAqIGFsc28gYmUgc3RvcmVkIGluIEBoZGwtPmVycm9yLgorICAqLworaW50IHY0bDJfY3RybF9oYW5kbGVyX2luaXQoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkgICB1bnNpZ25lZCBucl9vZl9jb250cm9sc19oaW50KTsKKworLyoqIHY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoKSAtIEZyZWUgYWxsIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBoYW5kbGVyIGFuZCBmcmVlCisgICogdGhlIGNvbnRyb2wgbGlzdC4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqCisgICogRG9lcyBub3RoaW5nIGlmIEBoZGwgPT0gTlVMTC4KKyAgKi8KK3ZvaWQgdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCk7CisKKy8qKiB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgpIC0gQ2FsbCB0aGUgc19jdHJsIG9wIGZvciBhbGwgY29udHJvbHMgYmVsb25naW5nCisgICogdG8gdGhlIGhhbmRsZXIgdG8gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgdG8gdGhlIGN1cnJlbnQgY29udHJvbCB2YWx1ZXMuCisgICogQGhkbDoJVGhlIGNvbnRyb2wgaGFuZGxlci4KKyAgKgorICAqIEJ1dHRvbiBjb250cm9scyB3aWxsIGJlIHNraXBwZWQsIGFzIGFyZSByZWFkLW9ubHkgY29udHJvbHMuCisgICoKKyAgKiBJZiBAaGRsID09IE5VTEwsIHRoZW4gdGhpcyBqdXN0IHJldHVybnMgMC4KKyAgKi8KK2ludCB2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCk7CisKKy8qKiB2NGwyX2N0cmxfaGFuZGxlcl9sb2dfc3RhdHVzKCkgLSBMb2cgYWxsIGNvbnRyb2xzIG93bmVkIGJ5IHRoZSBoYW5kbGVyLgorICAqIEBoZGw6CVRoZSBjb250cm9sIGhhbmRsZXIuCisgICogQHByZWZpeDoJVGhlIHByZWZpeCB0byB1c2Ugd2hlbiBsb2dnaW5nIHRoZSBjb250cm9sIHZhbHVlcy4gSWYgdGhlCisgICoJCXByZWZpeCBkb2VzIG5vdCBlbmQgd2l0aCBhIHNwYWNlLCB0aGVuICI6ICIgd2lsbCBiZSBhZGRlZAorICAqCQlhZnRlciB0aGUgcHJlZml4LiBJZiBAcHJlZml4ID09IE5VTEwsIHRoZW4gbm8gcHJlZml4IHdpbGwgYmUKKyAgKgkJdXNlZC4KKyAgKgorICAqIEZvciB1c2Ugd2l0aCBWSURJT0NfTE9HX1NUQVRVUy4KKyAgKgorICAqIERvZXMgbm90aGluZyBpZiBAaGRsID09IE5VTEwuCisgICovCit2b2lkIHY0bDJfY3RybF9oYW5kbGVyX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQkJICBjb25zdCBjaGFyICpwcmVmaXgpOworCisvKiogdjRsMl9jdHJsX25ld19jdXN0b20oKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IGN1c3RvbSBWNEwyCisgICogY29udHJvbC4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqIEBjZmc6CVRoZSBjb250cm9sJ3MgY29uZmlndXJhdGlvbiBkYXRhLgorICAqIEBwcml2OglUaGUgY29udHJvbCdzIGRyaXZlci1zcGVjaWZpYyBwcml2YXRlIGRhdGEuCisgICoKKyAgKiBJZiB0aGUgJnY0bDJfY3RybCBzdHJ1Y3QgY291bGQgbm90IGJlIGFsbG9jYXRlZCB0aGVuIE5VTEwgaXMgcmV0dXJuZWQKKyAgKiBhbmQgQGhkbC0+ZXJyb3IgaXMgc2V0IHRvIHRoZSBlcnJvciBjb2RlIChpZiBpdCB3YXNuJ3Qgc2V0IGFscmVhZHkpLgorICAqLworc3RydWN0IHY0bDJfY3RybCAqdjRsMl9jdHJsX25ld19jdXN0b20oc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsCisJCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2NvbmZpZyAqY2ZnLCB2b2lkICpwcml2KTsKKworLyoqIHY0bDJfY3RybF9uZXdfc3RkKCkgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIG5ldyBzdGFuZGFyZCBWNEwyIG5vbi1tZW51IGNvbnRyb2wuCisgICogQGhkbDoJVGhlIGNvbnRyb2wgaGFuZGxlci4KKyAgKiBAb3BzOglUaGUgY29udHJvbCBvcHMuCisgICogQGlkOglUaGUgY29udHJvbCBJRC4KKyAgKiBAbWluOglUaGUgY29udHJvbCdzIG1pbmltdW0gdmFsdWUuCisgICogQG1heDoJVGhlIGNvbnRyb2wncyBtYXhpbXVtIHZhbHVlLgorICAqIEBzdGVwOglUaGUgY29udHJvbCdzIHN0ZXAgdmFsdWUKKyAgKiBAZGVmOiAJVGhlIGNvbnRyb2wncyBkZWZhdWx0IHZhbHVlLgorICAqCisgICogSWYgdGhlICZ2NGwyX2N0cmwgc3RydWN0IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQsIG9yIHRoZSBjb250cm9sCisgICogSUQgaXMgbm90IGtub3duLCB0aGVuIE5VTEwgaXMgcmV0dXJuZWQgYW5kIEBoZGwtPmVycm9yIGlzIHNldCB0byB0aGUKKyAgKiBhcHByb3ByaWF0ZSBlcnJvciBjb2RlIChpZiBpdCB3YXNuJ3Qgc2V0IGFscmVhZHkpLgorICAqCisgICogSWYgQGlkIHJlZmVycyB0byBhIG1lbnUgY29udHJvbCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwuCisgICoKKyAgKiBVc2UgdjRsMl9jdHJsX25ld19zdGRfbWVudSgpIHdoZW4gYWRkaW5nIG1lbnUgY29udHJvbHMuCisgICovCitzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3X3N0ZChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMsCisJCQl1MzIgaWQsIHMzMiBtaW4sIHMzMiBtYXgsIHUzMiBzdGVwLCBzMzIgZGVmKTsKKworLyoqIHY0bDJfY3RybF9uZXdfc3RkX21lbnUoKSAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHN0YW5kYXJkIFY0TDIgbWVudSBjb250cm9sLgorICAqIEBoZGw6CVRoZSBjb250cm9sIGhhbmRsZXIuCisgICogQG9wczoJVGhlIGNvbnRyb2wgb3BzLgorICAqIEBpZDoJVGhlIGNvbnRyb2wgSUQuCisgICogQG1heDoJVGhlIGNvbnRyb2wncyBtYXhpbXVtIHZhbHVlLgorICAqIEBtYXNrOiAJVGhlIGNvbnRyb2wncyBza2lwIG1hc2sgZm9yIG1lbnUgY29udHJvbHMuIFRoaXMgbWFrZXMgaXQKKyAgKgkJZWFzeSB0byBza2lwIG1lbnUgaXRlbXMgdGhhdCBhcmUgbm90IHZhbGlkLiBJZiBiaXQgWCBpcyBzZXQsCisgICoJCXRoZW4gbWVudSBpdGVtIFggaXMgc2tpcHBlZC4gT2YgY291cnNlLCB0aGlzIG9ubHkgd29ya3MgZm9yCisgICoJCW1lbnVzIHdpdGggPD0gMzIgbWVudSBpdGVtcy4gVGhlcmUgYXJlIG5vIG1lbnVzIHRoYXQgY29tZQorICAqCQljbG9zZSB0byB0aGF0IG51bWJlciwgc28gdGhpcyBpcyBPSy4gU2hvdWxkIHdlIGV2ZXIgbmVlZCBtb3JlLAorICAqCQl0aGVuIHRoaXMgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkIHRvIGEgdTY0IG9yIGEgYml0IGFycmF5LgorICAqIEBkZWY6IAlUaGUgY29udHJvbCdzIGRlZmF1bHQgdmFsdWUuCisgICoKKyAgKiBTYW1lIGFzIHY0bDJfY3RybF9uZXdfc3RkKCksIGJ1dCBAbWluIGlzIHNldCB0byAwIGFuZCB0aGUgQG1hc2sgdmFsdWUKKyAgKiBkZXRlcm1pbmVzIHdoaWNoIG1lbnUgaXRlbXMgYXJlIHRvIGJlIHNraXBwZWQuCisgICoKKyAgKiBJZiBAaWQgcmVmZXJzIHRvIGEgbm9uLW1lbnUgY29udHJvbCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIE5VTEwuCisgICovCitzdHJ1Y3QgdjRsMl9jdHJsICp2NGwyX2N0cmxfbmV3X3N0ZF9tZW51KHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcywKKwkJCXUzMiBpZCwgczMyIG1heCwgczMyIG1hc2ssIHMzMiBkZWYpOworCisvKiogdjRsMl9jdHJsX2FkZF9jdHJsKCkgLSBBZGQgYSBjb250cm9sIGZyb20gYW5vdGhlciBoYW5kbGVyIHRvIHRoaXMgaGFuZGxlci4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqIEBjdHJsOglUaGUgY29udHJvbCB0byBhZGQuCisgICoKKyAgKiBJdCB3aWxsIHJldHVybiBOVUxMIGlmIGl0IHdhcyB1bmFibGUgdG8gYWRkIHRoZSBjb250cm9sIHJlZmVyZW5jZS4KKyAgKiBJZiB0aGUgY29udHJvbCBhbHJlYWR5IGJlbG9uZ2VkIHRvIHRoZSBoYW5kbGVyLCB0aGVuIGl0IHdpbGwgZG8KKyAgKiBub3RoaW5nIGFuZCBqdXN0IHJldHVybiBAY3RybC4KKyAgKi8KK3N0cnVjdCB2NGwyX2N0cmwgKnY0bDJfY3RybF9hZGRfY3RybChzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwKKwkJCQkJICBzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKTsKKworLyoqIHY0bDJfY3RybF9hZGRfaGFuZGxlcigpIC0gQWRkIGFsbCBjb250cm9scyBmcm9tIGhhbmRsZXIgQGFkZCB0bworICAqIGhhbmRsZXIgQGhkbC4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqIEBhZGQ6CVRoZSBjb250cm9sIGhhbmRsZXIgd2hvc2UgY29udHJvbHMgeW91IHdhbnQgdG8gYWRkIHRvCisgICoJCXRoZSBAaGRsIGNvbnRyb2wgaGFuZGxlci4KKyAgKgorICAqIERvZXMgbm90aGluZyBpZiBlaXRoZXIgb2YgdGhlIHR3byBpcyBhIE5VTEwgcG9pbnRlci4KKyAgKiBJbiBjYXNlIG9mIGFuIGVycm9yIEBoZGwtPmVycm9yIHdpbGwgYmUgc2V0IHRvIHRoZSBlcnJvciBjb2RlIChpZiBpdAorICAqIHdhc24ndCBzZXQgYWxyZWFkeSkuCisgICovCitpbnQgdjRsMl9jdHJsX2FkZF9oYW5kbGVyKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLAorCQkJICBzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmFkZCk7CisKKworLyoqIHY0bDJfY3RybF9jbHVzdGVyKCkgLSBNYXJrIGFsbCBjb250cm9scyBpbiB0aGUgY2x1c3RlciBhcyBiZWxvbmdpbmcgdG8gdGhhdCBjbHVzdGVyLgorICAqIEBuY29udHJvbHM6CVRoZSBudW1iZXIgb2YgY29udHJvbHMgaW4gdGhpcyBjbHVzdGVyLgorICAqIEBjb250cm9sczogCVRoZSBjbHVzdGVyIGNvbnRyb2wgYXJyYXkgb2Ygc2l6ZSBAbmNvbnRyb2xzLgorICAqLwordm9pZCB2NGwyX2N0cmxfY2x1c3Rlcih1bnNpZ25lZCBuY29udHJvbHMsIHN0cnVjdCB2NGwyX2N0cmwgKipjb250cm9scyk7CisKKworLyoqIHY0bDJfY3RybF9maW5kKCkgLSBGaW5kIGEgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBJRC4KKyAgKiBAaGRsOglUaGUgY29udHJvbCBoYW5kbGVyLgorICAqIEBpZDoJVGhlIGNvbnRyb2wgSUQgdG8gZmluZC4KKyAgKgorICAqIElmIEBoZGwgPT0gTlVMTCB0aGlzIHdpbGwgcmV0dXJuIE5VTEwgYXMgd2VsbC4gV2lsbCBsb2NrIHRoZSBoYW5kbGVyIHNvCisgICogZG8gbm90IHVzZSBmcm9tIGluc2lkZSAmdjRsMl9jdHJsX29wcy4KKyAgKi8KK3N0cnVjdCB2NGwyX2N0cmwgKnY0bDJfY3RybF9maW5kKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCB1MzIgaWQpOworCisvKiogdjRsMl9jdHJsX2FjdGl2YXRlKCkgLSBNYWtlIHRoZSBjb250cm9sIGFjdGl2ZSBvciBpbmFjdGl2ZS4KKyAgKiBAY3RybDoJVGhlIGNvbnRyb2wgdG8gKGRlKWFjdGl2YXRlLgorICAqIEBhY3RpdmU6CVRydWUgaWYgdGhlIGNvbnRyb2wgc2hvdWxkIGJlY29tZSBhY3RpdmUuCisgICoKKyAgKiBUaGlzIHNldHMgb3IgY2xlYXJzIHRoZSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSBmbGFnIGF0b21pY2FsbHkuCisgICogRG9lcyBub3RoaW5nIGlmIEBjdHJsID09IE5VTEwuCisgICogVGhpcyB3aWxsIHVzdWFsbHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBzX2N0cmwgb3AuCisgICoKKyAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250cm9sIGhhbmRsZXIKKyAgKiBpcyBsb2NrZWQgb3Igbm90LgorICAqLwordm9pZCB2NGwyX2N0cmxfYWN0aXZhdGUoc3RydWN0IHY0bDJfY3RybCAqY3RybCwgYm9vbCBhY3RpdmUpOworCisvKiogdjRsMl9jdHJsX2dyYWIoKSAtIE1hcmsgdGhlIGNvbnRyb2wgYXMgZ3JhYmJlZCBvciBub3QgZ3JhYmJlZC4KKyAgKiBAY3RybDoJVGhlIGNvbnRyb2wgdG8gKGRlKWFjdGl2YXRlLgorICAqIEBncmFiYmVkOglUcnVlIGlmIHRoZSBjb250cm9sIHNob3VsZCBiZWNvbWUgZ3JhYmJlZC4KKyAgKgorICAqIFRoaXMgc2V0cyBvciBjbGVhcnMgdGhlIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgZmxhZyBhdG9taWNhbGx5LgorICAqIERvZXMgbm90aGluZyBpZiBAY3RybCA9PSBOVUxMLgorICAqIFRoaXMgd2lsbCB1c3VhbGx5IGJlIGNhbGxlZCB3aGVuIHN0YXJ0aW5nIG9yIHN0b3BwaW5nIHN0cmVhbWluZyBpbiB0aGUKKyAgKiBkcml2ZXIuCisgICoKKyAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250cm9sIGhhbmRsZXIKKyAgKiBpcyBsb2NrZWQgb3Igbm90LgorICAqLwordm9pZCB2NGwyX2N0cmxfZ3JhYihzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsLCBib29sIGdyYWJiZWQpOworCisvKiogdjRsMl9jdHJsX2xvY2soKSAtIEhlbHBlciBmdW5jdGlvbiB0byBsb2NrIHRoZSBoYW5kbGVyCisgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250cm9sLgorICAqIEBjdHJsOglUaGUgY29udHJvbCB0byBsb2NrLgorICAqLworc3RhdGljIGlubGluZSB2b2lkIHY0bDJfY3RybF9sb2NrKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJbXV0ZXhfbG9jaygmY3RybC0+aGFuZGxlci0+bG9jayk7Cit9CisKKy8qKiB2NGwyX2N0cmxfbG9jaygpIC0gSGVscGVyIGZ1bmN0aW9uIHRvIHVubG9jayB0aGUgaGFuZGxlcgorICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udHJvbC4KKyAgKiBAY3RybDoJVGhlIGNvbnRyb2wgdG8gdW5sb2NrLgorICAqLworc3RhdGljIGlubGluZSB2b2lkIHY0bDJfY3RybF91bmxvY2soc3RydWN0IHY0bDJfY3RybCAqY3RybCkKK3sKKwltdXRleF91bmxvY2soJmN0cmwtPmhhbmRsZXItPmxvY2spOworfQorCisvKiogdjRsMl9jdHJsX2dfY3RybCgpIC0gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29udHJvbCdzIHZhbHVlIGZyb20gd2l0aGluIGEgZHJpdmVyLgorICAqIEBjdHJsOglUaGUgY29udHJvbC4KKyAgKgorICAqIFRoaXMgcmV0dXJucyB0aGUgY29udHJvbCdzIHZhbHVlIHNhZmVseSBieSBnb2luZyB0aHJvdWdoIHRoZSBjb250cm9sCisgICogZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9jayB0aGUgY29udHJvbCdzIGhhbmRsZXIsIHNvIGl0IGNhbm5vdCBiZQorICAqIHVzZWQgZnJvbSB3aXRoaW4gdGhlICZ2NGwyX2N0cmxfb3BzIGZ1bmN0aW9ucy4KKyAgKgorICAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGludGVnZXIgdHlwZSBjb250cm9scyBvbmx5LgorICAqLworczMyIHY0bDJfY3RybF9nX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCk7CisKKy8qKiB2NGwyX2N0cmxfc19jdHJsKCkgLSBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IHRoZSBjb250cm9sJ3MgdmFsdWUgZnJvbSB3aXRoaW4gYSBkcml2ZXIuCisgICogQGN0cmw6CVRoZSBjb250cm9sLgorICAqIEB2YWw6CVRoZSBuZXcgdmFsdWUuCisgICoKKyAgKiBUaGlzIHNldCB0aGUgY29udHJvbCdzIG5ldyB2YWx1ZSBzYWZlbHkgYnkgZ29pbmcgdGhyb3VnaCB0aGUgY29udHJvbAorICAqIGZyYW1ld29yay4gVGhpcyBmdW5jdGlvbiB3aWxsIGxvY2sgdGhlIGNvbnRyb2wncyBoYW5kbGVyLCBzbyBpdCBjYW5ub3QgYmUKKyAgKiB1c2VkIGZyb20gd2l0aGluIHRoZSAmdjRsMl9jdHJsX29wcyBmdW5jdGlvbnMuCisgICoKKyAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBpbnRlZ2VyIHR5cGUgY29udHJvbHMgb25seS4KKyAgKi8KK2ludCB2NGwyX2N0cmxfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwsIHMzMiB2YWwpOworCisKKy8qIEhlbHBlcnMgZm9yIGlvY3RsX29wcy4gSWYgaGRsID09IE5VTEwgdGhlbiB0aGV5IHdpbGwgYWxsIHJldHVybiAtRUlOVkFMLiAqLworaW50IHY0bDJfcXVlcnljdHJsKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKTsKK2ludCB2NGwyX3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CitpbnQgdjRsMl9nX2N0cmwoc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworaW50IHY0bDJfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCB2NGwyX2dfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMpOworaW50IHY0bDJfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjKTsKK2ludCB2NGwyX3NfZXh0X2N0cmxzKHN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmMpOworCisvKiBIZWxwZXJzIGZvciBzdWJkZXZpY2VzLiBJZiB0aGUgYXNzb2NpYXRlZCBjdHJsX2hhbmRsZXIgPT0gTlVMTCB0aGVuIHRoZXkKKyAgIHdpbGwgYWxsIHJldHVybiAtRUlOVkFMLiAqLworaW50IHY0bDJfc3ViZGV2X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKTsKK2ludCB2NGwyX3N1YmRldl9xdWVyeW1lbnUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CitpbnQgdjRsMl9zdWJkZXZfZ19leHRfY3RybHMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjcyk7CitpbnQgdjRsMl9zdWJkZXZfdHJ5X2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKTsKK2ludCB2NGwyX3N1YmRldl9zX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmNzKTsKK2ludCB2NGwyX3N1YmRldl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CitpbnQgdjRsMl9zdWJkZXZfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCBiZWJlNDRiLi4xZWZjYWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0yNyw2ICsyNyw3IEBACiBzdHJ1Y3QgdjRsMl9pb2N0bF9jYWxsYmFja3M7CiBzdHJ1Y3QgdmlkZW9fZGV2aWNlOwogc3RydWN0IHY0bDJfZGV2aWNlOworc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyOwogCiAvKiBGbGFnIHRvIG1hcmsgdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgYXMgcmVnaXN0ZXJlZC4KICAgIERyaXZlcnMgY2FuIGNsZWFyIHRoaXMgZmxhZyBpZiB0aGV5IHdhbnQgdG8gYmxvY2sgYWxsIGZ1dHVyZQpAQCAtNjcsNiArNjgsOSBAQAogCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsJCS8qIGRldmljZSBwYXJlbnQgKi8KIAlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwkvKiB2NGwyX2RldmljZSBwYXJlbnQgKi8KIAorCS8qIENvbnRyb2wgaGFuZGxlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2Ugbm9kZS4gTWF5IGJlIE5VTEwuICovCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpjdHJsX2hhbmRsZXI7CisKIAkvKiBkZXZpY2UgaW5mbyAqLwogCWNoYXIgbmFtZVszMl07CiAJaW50IHZmbF90eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCmluZGV4IDVkNWQ1NTAuLjhiY2JkN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKQEAgLTMyLDYgKzMyLDggQEAKIAogI2RlZmluZSBWNEwyX0RFVklDRV9OQU1FX1NJWkUgKDIwICsgMTYpCiAKK3N0cnVjdCB2NGwyX2N0cmxfaGFuZGxlcjsKKwogc3RydWN0IHY0bDJfZGV2aWNlIHsKIAkvKiBkZXYtPmRyaXZlcl9kYXRhIHBvaW50cyB0byB0aGlzIHN0cnVjdC4KIAkgICBOb3RlOiBkZXYgbWlnaHQgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBwYXJlbnQgZGV2aWNlCkBAIC00Nyw2ICs0OSw4IEBACiAJLyogbm90aWZ5IGNhbGxiYWNrIGNhbGxlZCBieSBzb21lIHN1Yi1kZXZpY2VzLiAqLwogCXZvaWQgKCpub3RpZnkpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQl1bnNpZ25lZCBpbnQgbm90aWZpY2F0aW9uLCB2b2lkICphcmcpOworCS8qIFRoZSBjb250cm9sIGhhbmRsZXIuIE1heSBiZSBOVUxMLiAqLworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqY3RybF9oYW5kbGVyOwogfTsKIAogLyogSW5pdGlhbGl6ZSB2NGwyX2RldiBhbmQgbWFrZSBkZXYtPmRyaXZlcl9kYXRhIHBvaW50IHRvIHY0bDJfZGV2LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDAyYzZmNGQuLjRhOTdkNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTM1LDYgKzM1LDcgQEAKICNkZWZpbmUgVjRMMl9TVUJERVZfSVJfVFhfRklGT19TRVJWSUNFX1JFUQkweDAwMDAwMDAxCiAKIHN0cnVjdCB2NGwyX2RldmljZTsKK3N0cnVjdCB2NGwyX2N0cmxfaGFuZGxlcjsKIHN0cnVjdCB2NGwyX3N1YmRldjsKIHN0cnVjdCB0dW5lcl9zZXR1cDsKIApAQCAtOTAsMTAgKzkxLDMxIEBACiAgICBub3QgeWV0IGltcGxlbWVudGVkKSBzaW5jZSBvcHMgcHJvdmlkZSBwcm9wZXIgdHlwZS1jaGVja2luZy4KICAqLwogCisvKiBTdWJkZXZpY2UgZXh0ZXJuYWwgSU8gcGluIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVjRMMl9TVUJERVZfSU9fUElOX0RJU0FCTEUJKDEgPDwgMCkgLyogRU5BQkxFIGFzc3VtZWQgKi8KKyNkZWZpbmUgVjRMMl9TVUJERVZfSU9fUElOX09VVFBVVAkoMSA8PCAxKQorI2RlZmluZSBWNEwyX1NVQkRFVl9JT19QSU5fSU5QVVQJKDEgPDwgMikKKyNkZWZpbmUgVjRMMl9TVUJERVZfSU9fUElOX1NFVF9WQUxVRQkoMSA8PCAzKSAvKiBTZXQgb3V0cHV0IHZhbHVlICovCisjZGVmaW5lIFY0TDJfU1VCREVWX0lPX1BJTl9BQ1RJVkVfTE9XCSgxIDw8IDQpIC8qIEFDVElWRSBISUdIIGFzc3VtZWQgKi8KKworc3RydWN0IHY0bDJfc3ViZGV2X2lvX3Bpbl9jb25maWcgeworCXUzMiBmbGFnczsJLyogVjRMMl9TVUJERVZfSU9fUElOXyogZmxhZ3MgZm9yIHRoaXMgcGluJ3MgY29uZmlnICovCisJdTggcGluOwkJLyogQ2hpcCBleHRlcm5hbCBJTyBwaW4gdG8gY29uZmlndXJlICovCisJdTggZnVuY3Rpb247CS8qIEludGVybmFsIHNpZ25hbCBwYWQvZnVuY3Rpb24gdG8gcm91dGUgdG8gSU8gcGluICovCisJdTggdmFsdWU7CS8qIEluaXRpYWwgdmFsdWUgZm9yIHBpbiAtIGUuZy4gR1BJTyBvdXRwdXQgdmFsdWUgKi8KKwl1OCBzdHJlbmd0aDsJLyogUGluIGRyaXZlIHN0cmVuZ3RoICovCit9OworCiAvKiBzX2NvbmZpZzogaWYgc2V0LCB0aGVuIGl0IGlzIGFsd2F5cyBjYWxsZWQgYnkgdGhlIHY0bDJfaTJjX25ld19zdWJkZXYqCiAJZnVuY3Rpb25zIGFmdGVyIHRoZSB2NGwyX3N1YmRldiB3YXMgcmVnaXN0ZXJlZC4gSXQgaXMgdXNlZCB0byBwYXNzCiAJcGxhdGZvcm0gZGF0YSB0byB0aGUgc3ViZGV2IHdoaWNoIGNhbiBiZSB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4KIAorICAgc19pb19waW5fY29uZmlnOiBjb25maWd1cmUgb25lIG9yIG1vcmUgY2hpcCBJL08gcGlucyBmb3IgY2hpcHMgdGhhdAorCW11bHRpcGxleCBkaWZmZXJlbnQgaW50ZXJuYWwgc2lnbmFsIHBhZHMgb3V0IHRvIElPIHBpbnMuICBUaGlzIGZ1bmN0aW9uCisJdGFrZXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mICduJyBwaW4gY29uZmlndXJhdGlvbiBlbnRyaWVzLCBvbmUgZm9yCisJZWFjaCBwaW4gYmVpbmcgY29uZmlndXJlZC4gIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIGF0IHRpbWVzCisJb3RoZXIgdGhhbiBqdXN0IHN1YmRldmljZSBpbml0aWFsaXphdGlvbi4KKwogICAgaW5pdDogaW5pdGlhbGl6ZSB0aGUgc2Vuc29yIHJlZ2lzdG9ycyB0byBzb21lIHNvcnQgb2YgcmVhc29uYWJsZSBkZWZhdWx0CiAJdmFsdWVzLiBEbyBub3QgdXNlIGZvciBuZXcgZHJpdmVycyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgaW4gZXhpc3RpbmcKIAlkcml2ZXJzLgpAQCAtMTEwLDExICsxMzIsMTggQEAKIAogICAgc19wb3dlcjogcHV0cyBzdWJkZXZpY2UgaW4gcG93ZXIgc2F2aW5nIG1vZGUgKG9uID09IDApIG9yIG5vcm1hbCBvcGVyYXRpb24KIAltb2RlIChvbiA9PSAxKS4KKworICAgaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZTogQ2FsbGVkIGJ5IHRoZSBicmlkZ2UgY2hpcCdzIGludGVycnVwdCBzZXJ2aWNlCisJaGFuZGxlciwgd2hlbiBhbiBpbnRlcnJ1cHQgc3RhdHVzIGhhcyBiZSByYWlzZWQgZHVlIHRvIHRoaXMgc3ViZGV2LAorCXNvIHRoYXQgdGhpcyBzdWJkZXYgY2FuIGhhbmRsZSB0aGUgZGV0YWlscy4gIEl0IG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlCisJcGVyZm9ybWVkIGxhdGVyLiAgSXQgbXVzdCBub3Qgc2xlZXAuICAqQ2FsbGVkIGZyb20gYW4gSVJRIGNvbnRleHQqLgogICovCiBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgewogCWludCAoKmdfY2hpcF9pZGVudCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApOwogCWludCAoKmxvZ19zdGF0dXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogCWludCAoKnNfY29uZmlnKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaXJxLCB2b2lkICpwbGF0Zm9ybV9kYXRhKTsKKwlpbnQgKCpzX2lvX3Bpbl9jb25maWcpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHNpemVfdCBuLAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9pb19waW5fY29uZmlnICpwaW5jZmcpOwogCWludCAoKmluaXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpOwogCWludCAoKmxvYWRfZncpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogCWludCAoKnJlc2V0KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKTsKQEAgLTEzMyw2ICsxNjIsOCBAQAogCWludCAoKnNfcmVnaXN0ZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKTsKICNlbmRpZgogCWludCAoKnNfcG93ZXIpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBvbik7CisJaW50ICgqaW50ZXJydXB0X3NlcnZpY2Vfcm91dGluZSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkJCXUzMiBzdGF0dXMsIGJvb2wgKmhhbmRsZWQpOwogfTsKIAogLyogc19tb2RlOiBzd2l0Y2ggdGhlIHR1bmVyIHRvIGEgc3BlY2lmaWMgdHVuZXIgbW9kZS4gUmVwbGFjZW1lbnQgb2Ygc19yYWRpby4KQEAgLTMwNywxMSArMzM4LDYgQEAKIH07CiAKIC8qCi0gICBpbnRlcnJ1cHRfc2VydmljZV9yb3V0aW5lOiBDYWxsZWQgYnkgdGhlIGJyaWRnZSBjaGlwJ3MgaW50ZXJydXB0IHNlcnZpY2UKLQloYW5kbGVyLCB3aGVuIGFuIElSIGludGVycnVwdCBzdGF0dXMgaGFzIGJlIHJhaXNlZCBkdWUgdG8gdGhpcyBzdWJkZXYsCi0Jc28gdGhhdCB0aGlzIHN1YmRldiBjYW4gaGFuZGxlIHRoZSBkZXRhaWxzLiAgSXQgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUKLQlwZXJmb3JtZWQgbGF0ZXIuICBJdCBtdXN0IG5vdCBzbGVlcC4gICpDYWxsZWQgZnJvbSBhbiBJUlEgY29udGV4dCouCi0KICAgIFtydF14X2dfcGFyYW1ldGVyczogR2V0IHRoZSBjdXJyZW50IG9wZXJhdGluZyBwYXJhbWV0ZXJzIGFuZCBzdGF0ZSBvZiB0aGUKIAl0aGUgSVIgcmVjZWl2ZXIgb3IgdHJhbnNtaXR0ZXIuCiAKQEAgLTMzNSwxNCArMzYxLDkgQEAKICAqLwogCiBlbnVtIHY0bDJfc3ViZGV2X2lyX21vZGUgewotCVY0TDJfU1VCREVWX0lSX01PREVfUFVMU0VfV0lEVEgsIC8qIHNwYWNlICYgbWFyayB3aWR0aHMgaW4gbmFub3NlY3MgKi8KKwlWNEwyX1NVQkRFVl9JUl9NT0RFX1BVTFNFX1dJRFRILCAvKiB1c2VzIHN0cnVjdCBpcl9yYXdfZXZlbnQgcmVjb3JkcyAqLwogfTsKIAotLyogRGF0YSBmb3JtYXQgb2YgZGF0YSByZWFkIG9yIHdyaXR0ZW4gZm9yIFY0TDJfU1VCREVWX0lSX01PREVfUFVMU0VfV0lEVEggKi8KLSNkZWZpbmUgVjRMMl9TVUJERVZfSVJfUFVMU0VfTUFYX1dJRFRIX05TCTB4N2ZmZmZmZmYKLSNkZWZpbmUgVjRMMl9TVUJERVZfSVJfUFVMU0VfTEVWRUxfTUFTSwkJMHg4MDAwMDAwMAotI2RlZmluZSBWNEwyX1NVQkRFVl9JUl9QVUxTRV9SWF9TRVFfRU5ECQkweGZmZmZmZmZmCi0KIHN0cnVjdCB2NGwyX3N1YmRldl9pcl9wYXJhbWV0ZXJzIHsKIAkvKiBFaXRoZXIgUnggb3IgVHggKi8KIAl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX2RhdGFfZWxlbWVudDsgLyogb2YgZGF0YSBpbiByZWFkIG9yIHdyaXRlIGNhbGwgKi8KQEAgLTM1Niw3ICszNzcsMTAgQEAKIAl1MzIgbWF4X3B1bHNlX3dpZHRoOyAgICAgICAvKiBucywgICAgICB2YWxpZCBvbmx5IGZvciBiYXNlYmFuZCBzaWduYWwgKi8KIAl1bnNpZ25lZCBpbnQgY2Fycmllcl9mcmVxOyAvKiBIeiwgICAgICB2YWxpZCBvbmx5IGZvciBtb2R1bGF0ZWQgc2lnbmFsKi8KIAl1bnNpZ25lZCBpbnQgZHV0eV9jeWNsZTsgICAvKiBwZXJjZW50LCB2YWxpZCBvbmx5IGZvciBtb2R1bGF0ZWQgc2lnbmFsKi8KLQlib29sIGludmVydDsJCSAgIC8qIGxvZ2ljYWxseSBpbnZlcnQgc2Vuc2Ugb2YgbWFyay9zcGFjZSAqLworCWJvb2wgaW52ZXJ0X2xldmVsOwkgICAvKiBpbnZlcnQgc2lnbmFsIGxldmVsICovCisKKwkvKiBUeCBvbmx5ICovCisJYm9vbCBpbnZlcnRfY2Fycmllcl9zZW5zZTsgLyogU2VuZCAwL3NwYWNlIGFzIGEgY2FycmllciBidXJzdCAqLwogCiAJLyogUnggb25seSAqLwogCXUzMiBub2lzZV9maWx0ZXJfbWluX3dpZHRoOyAgICAgICAvKiBucywgbWluIHRpbWUgb2YgYSB2YWxpZCBwdWxzZSAqLwpAQCAtMzY2LDEwICszOTAsNiBAQAogfTsKIAogc3RydWN0IHY0bDJfc3ViZGV2X2lyX29wcyB7Ci0JLyogQ29tbW9uIHRvIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciAqLwotCWludCAoKmludGVycnVwdF9zZXJ2aWNlX3JvdXRpbmUpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCQkJCQl1MzIgc3RhdHVzLCBib29sICpoYW5kbGVkKTsKLQogCS8qIFJlY2VpdmVyICovCiAJaW50ICgqcnhfcmVhZCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJCXNzaXplX3QgKm51bSk7CkBAIC00MTUsNiArNDM1LDggQEAKIAl1MzIgZmxhZ3M7CiAJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CisJLyogVGhlIGNvbnRyb2wgaGFuZGxlciBvZiB0aGlzIHN1YmRldi4gTWF5IGJlIE5VTEwuICovCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpjdHJsX2hhbmRsZXI7CiAJLyogbmFtZSBtdXN0IGJlIHVuaXF1ZSAqLwogCWNoYXIgbmFtZVtWNEwyX1NVQkRFVl9OQU1FX1NJWkVdOwogCS8qIGNhbiBiZSB1c2VkIHRvIGdyb3VwIHNpbWlsYXIgc3ViZGV2cywgdmFsdWUgaXMgZHJpdmVyLXNwZWNpZmljICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9tdGQtYWJpLmggYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKaW5kZXggYmU1MWFlMi4uNGRlYmI0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCisrKyBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaApAQCAtMSw1ICsxLDIwIEBACiAvKgotICogUG9ydGlvbnMgb2YgTVREIEFCSSBkZWZpbml0aW9uIHdoaWNoIGFyZSBzaGFyZWQgYnkga2VybmVsIGFuZCB1c2VyIHNwYWNlCisgKiBDb3B5cmlnaHQgwqkgMTk5OS0yMDEwIERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2lmbmRlZiBfX01URF9BQklfSF9fCkBAIC0xMTAsNiArMTI1LDcgQEAKICNkZWZpbmUgTUVNRVJBU0U2NAkJX0lPVygnTScsIDIwLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyNjQpCiAjZGVmaW5lIE1FTVdSSVRFT09CNjQJCV9JT1dSKCdNJywgMjEsIHN0cnVjdCBtdGRfb29iX2J1ZjY0KQogI2RlZmluZSBNRU1SRUFET09CNjQJCV9JT1dSKCdNJywgMjIsIHN0cnVjdCBtdGRfb29iX2J1ZjY0KQorI2RlZmluZSBNRU1JU0xPQ0tFRAkJX0lPUignTScsIDIzLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQogCiAvKgogICogT2Jzb2xldGUgbGVnYWN5IGludGVyZmFjZS4gS2VlcCBpdCBpbiBvcmRlciBub3QgdG8gYnJlYWsgdXNlcnNwYWNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9tdGQtdXNlci5oIGIvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaAppbmRleCAxNzBjZWNhLi5hYTNjMmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL210ZC11c2VyLmgKQEAgLTEsNSArMSwyMCBAQAogLyoKLSAqIE1URCBBQkkgaGVhZGVyIGZvciB1c2UgYnkgdXNlciBzcGFjZSBvbmx5LgorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCiAgKi8KIAogI2lmbmRlZiBfX01URF9VU0VSX0hfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAppbmRleCA5OGU5ZTU3Li5iZGVhYmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaApAQCAtMSw1ICsxLDE5IEBACiAvKgotICogUGFydHMgb2YgTkZUTCBoZWFkZXJzIHNoYXJlZCB3aXRoIHVzZXJzcGFjZQorICogQ29weXJpZ2h0IMKpIDE5OTktMjAxMCBEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCBiL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKaW5kZXggNDY2YTgzMi4uYzBkNDdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC91YmktdXNlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3JwLiwgMjAwNgorICogQ29weXJpZ2h0IMKpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycC4sIDIwMDYKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggOGIyODk2Mi4uNDU2OGI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogCiAJc3RydWN0IGlucXVpcnlfY2FjaGUJaW5xX2NhY2hlOwogCXN0cnVjdCBoY2lfY29ubl9oYXNoCWNvbm5faGFzaDsKLQlzdHJ1Y3QgYmRhZGRyX2xpc3QJYmxhY2tsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQJYmxhY2tsaXN0OwogCiAJc3RydWN0IGhjaV9kZXZfc3RhdHMJc3RhdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY2lzdHBsLmggYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAppbmRleCBjZmRkNWFmLi4xYzUwODhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jaXN0cGwuaApAQCAtMTUsNiArMTUsOCBAQAogI2lmbmRlZiBfTElOVVhfQ0lTVFBMX0gKICNkZWZpbmUgX0xJTlVYX0NJU1RQTF9ICiAKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBjaXNkYXRhX3Q7CisKICNkZWZpbmUgQ0lTVFBMX05VTEwJCTB4MDAKICNkZWZpbmUgQ0lTVFBMX0RFVklDRQkJMHgwMQogI2RlZmluZSBDSVNUUExfTE9OR0xJTktfQ0IJMHgwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvY3MuaCBiL2luY2x1ZGUvcGNtY2lhL2NzLmgKaW5kZXggNTdkOGQwMy4uNjhkOGJkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvY3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9jcy5oCkBAIC0xOSw0NCArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2VuZGlmCiAKLS8qIEZvciBBY2Nlc3NDb25maWd1cmF0aW9uUmVnaXN0ZXIgKi8KLXR5cGVkZWYgc3RydWN0IGNvbmZfcmVnX3QgewotICAgIHVfY2hhcglGdW5jdGlvbjsKLSAgICB1X2ludAlBY3Rpb247Ci0gICAgb2ZmX3QJT2Zmc2V0OwotICAgIHVfaW50CVZhbHVlOwotfSBjb25mX3JlZ190OwotCi0vKiBBY3Rpb25zICovCi0jZGVmaW5lIENTX1JFQUQJCTEKLSNkZWZpbmUgQ1NfV1JJVEUJMgotCi0vKiBmb3IgQWRqdXN0UmVzb3VyY2VJbmZvICovCi0vKiBBY3Rpb24gZmllbGQgKi8KLSNkZWZpbmUgUkVNT1ZFX01BTkFHRURfUkVTT1VSQ0UJCTEKLSNkZWZpbmUgQUREX01BTkFHRURfUkVTT1VSQ0UJCTIKLQotCi10eXBlZGVmIHN0cnVjdCBldmVudF9jYWxsYmFja19hcmdzX3QgewotCXN0cnVjdCBwY21jaWFfZGV2aWNlCSpjbGllbnRfaGFuZGxlOwotCXZvaWQJCQkqY2xpZW50X2RhdGE7Ci19IGV2ZW50X2NhbGxiYWNrX2FyZ3NfdDsKLQotLyogRm9yIENhcmRWYWx1ZXMgZmllbGQgKi8KLSNkZWZpbmUgQ1ZfT1BUSU9OX1ZBTFVFCQkweDAxCi0jZGVmaW5lIENWX1NUQVRVU19WQUxVRQkJMHgwMgotI2RlZmluZSBDVl9QSU5fUkVQTEFDRU1FTlQJMHgwNAotI2RlZmluZSBDVl9DT1BZX1ZBTFVFCQkweDA4Ci0jZGVmaW5lIENWX0VYVF9TVEFUVVMJCTB4MTAKLQotLyogRm9yIEdldEZpcnN0L05leHRDbGllbnQgKi8KLXR5cGVkZWYgc3RydWN0IGNsaWVudF9yZXFfdCB7Ci0gICAgc29ja2V0X3QJU29ja2V0OwotICAgIHVfaW50CUF0dHJpYnV0ZXM7Ci19IGNsaWVudF9yZXFfdDsKLQotI2RlZmluZSBDTElFTlRfVEhJU19TT0NLRVQJMHgwMQotCiAvKiBNb2RpZnlDb25maWd1cmF0aW9uICovCiB0eXBlZGVmIHN0cnVjdCBtb2Rjb25mX3QgewogICAgIHVfaW50CUF0dHJpYnV0ZXM7CkBAIC05NCw0MyArNTYsNiBAQAogI2RlZmluZSBJTlRfQ0FSREJVUwkJMHgwNAogI2RlZmluZSBJTlRfWk9PTUVEX1ZJREVPCTB4MDgKIAotLyogRm9yIFJlcXVlc3RJTyBhbmQgUmVsZWFzZUlPICovCi10eXBlZGVmIHN0cnVjdCBpb19yZXFfdCB7Ci0gICAgdV9pbnQJQmFzZVBvcnQxOwotICAgIHVfaW50CU51bVBvcnRzMTsKLSAgICB1X2ludAlBdHRyaWJ1dGVzMTsKLSAgICB1X2ludAlCYXNlUG9ydDI7Ci0gICAgdV9pbnQJTnVtUG9ydHMyOwotICAgIHVfaW50CUF0dHJpYnV0ZXMyOwotICAgIHVfaW50CUlPQWRkckxpbmVzOwotfSBpb19yZXFfdDsKLQotLyogQXR0cmlidXRlcyBmb3IgUmVxdWVzdElPIGFuZCBSZWxlYXNlSU8gKi8KLSNkZWZpbmUgSU9fU0hBUkVECQkweDAxCi0jZGVmaW5lIElPX0ZJUlNUX1NIQVJFRAkJMHgwMgotI2RlZmluZSBJT19GT1JDRV9BTElBU19BQ0NFU1MJMHgwNAotI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEgJMHgxOAotI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfOAkweDAwCi0jZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF8xNgkweDA4Ci0jZGVmaW5lIElPX0RBVEFfUEFUSF9XSURUSF9BVVRPCTB4MTAKLQotLyogQml0cyBpbiBJUlFJbmZvMSBmaWVsZCAqLwotI2RlZmluZSBJUlFfTk1JX0lECQkweDAxCi0jZGVmaW5lIElSUV9JT0NLX0lECQkweDAyCi0jZGVmaW5lIElSUV9CRVJSX0lECQkweDA0Ci0jZGVmaW5lIElSUV9WRU5EX0lECQkweDA4Ci0jZGVmaW5lIElSUV9JTkZPMl9WQUxJRAkJMHgxMAotI2RlZmluZSBJUlFfTEVWRUxfSUQJCTB4MjAKLSNkZWZpbmUgSVJRX1BVTFNFX0lECQkweDQwCi0jZGVmaW5lIElSUV9TSEFSRV9JRAkJMHg4MAotCi10eXBlZGVmIHN0cnVjdCBldmVudG1hc2tfdCB7Ci0gICAgdV9pbnQJQXR0cmlidXRlczsKLSAgICB1X2ludAlFdmVudE1hc2s7Ci19IGV2ZW50bWFza190OwotCi0jZGVmaW5lIENPTkZfRVZFTlRfTUFTS19WQUxJRAkweDAxCi0KIC8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHByZXNlbnQgKi8KICNkZWZpbmUgUFJFU0VOVF9PUFRJT04JCTB4MDAxCiAjZGVmaW5lIFBSRVNFTlRfU1RBVFVTCQkweDAwMgpAQCAtMTQzLDE4ICs2OCw2IEBACiAjZGVmaW5lIFBSRVNFTlRfSU9CQVNFXzMJMHgxMDAKICNkZWZpbmUgUFJFU0VOVF9JT1NJWkUJCTB4MjAwCiAKLS8qIEZvciBHZXRNZW1QYWdlLCBNYXBNZW1QYWdlICovCi10eXBlZGVmIHN0cnVjdCBtZW1yZXFfdCB7Ci0gICAgdV9pbnQJQ2FyZE9mZnNldDsKLSAgICBwYWdlX3QJUGFnZTsKLX0gbWVtcmVxX3Q7Ci0KLS8qIEZvciBNb2RpZnlXaW5kb3cgKi8KLXR5cGVkZWYgc3RydWN0IG1vZHdpbl90IHsKLSAgICB1X2ludAlBdHRyaWJ1dGVzOwotICAgIHVfaW50CUFjY2Vzc1NwZWVkOwotfSBtb2R3aW5fdDsKLQogLyogRm9yIFJlcXVlc3RXaW5kb3cgKi8KIHR5cGVkZWYgc3RydWN0IHdpbl9yZXFfdCB7CiAgICAgdV9pbnQJQXR0cmlidXRlczsKQEAgLTE2NCw2MSArNzcsMTkgQEAKIH0gd2luX3JlcV90OwogCiAvKiBBdHRyaWJ1dGVzIGZvciBSZXF1ZXN0V2luZG93ICovCi0jZGVmaW5lIFdJTl9BRERSX1NQQUNFCQkweDAwMDEKLSNkZWZpbmUgV0lOX0FERFJfU1BBQ0VfTUVNCTB4MDAwMAotI2RlZmluZSBXSU5fQUREUl9TUEFDRV9JTwkweDAwMDEKLSNkZWZpbmUgV0lOX01FTU9SWV9UWVBFCQkweDAwMDIKLSNkZWZpbmUgV0lOX01FTU9SWV9UWVBFX0NNCTB4MDAwMAotI2RlZmluZSBXSU5fTUVNT1JZX1RZUEVfQU0JMHgwMDAyCi0jZGVmaW5lIFdJTl9FTkFCTEUJCTB4MDAwNAotI2RlZmluZSBXSU5fREFUQV9XSURUSAkJMHgwMDE4Ci0jZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzgJMHgwMDAwCi0jZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzE2CTB4MDAwOAotI2RlZmluZSBXSU5fREFUQV9XSURUSF8zMgkweDAwMTAKLSNkZWZpbmUgV0lOX1BBR0VECQkweDAwMjAKLSNkZWZpbmUgV0lOX1NIQVJFRAkJMHgwMDQwCi0jZGVmaW5lIFdJTl9GSVJTVF9TSEFSRUQJMHgwMDgwCi0jZGVmaW5lIFdJTl9VU0VfV0FJVAkJMHgwMTAwCi0jZGVmaW5lIFdJTl9TVFJJQ1RfQUxJR04JMHgwMjAwCi0jZGVmaW5lIFdJTl9NQVBfQkVMT1dfMU1CCTB4MDQwMAotI2RlZmluZSBXSU5fUFJFRkVUQ0gJCTB4MDgwMAotI2RlZmluZSBXSU5fQ0FDSEVBQkxFCQkweDEwMDAKLSNkZWZpbmUgV0lOX0JBUl9NQVNLCQkweGUwMDAKLSNkZWZpbmUgV0lOX0JBUl9TSElGVAkJMTMKKyNkZWZpbmUgV0lOX01FTU9SWV9UWVBFX0NNCTB4MDAgLyogZGVmYXVsdCAqLworI2RlZmluZSBXSU5fTUVNT1JZX1RZUEVfQU0JMHgyMCAvKiBNQVBfQVRUUklCICovCisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzgJMHgwMCAvKiBkZWZhdWx0ICovCisjZGVmaW5lIFdJTl9EQVRBX1dJRFRIXzE2CTB4MDIgLyogTUFQXzE2QklUICovCisjZGVmaW5lIFdJTl9FTkFCTEUJCTB4MDEgLyogTUFQX0FDVElWRSAqLworI2RlZmluZSBXSU5fVVNFX1dBSVQJCTB4NDAgLyogTUFQX1VTRV9XQUlUICovCiAKLXR5cGVkZWYgc3RydWN0IGVycm9yX2luZm9fdCB7Ci0gICAgaW50CQlmdW5jOwotICAgIGludAkJcmV0Y29kZTsKLX0gZXJyb3JfaW5mb190OwotCi0vKiBGbGFnIHRvIGJpbmQgdG8gYWxsIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBCSU5EX0ZOX0FMTAkweGZmCi0KLS8qIEV2ZW50cyAqLwotI2RlZmluZSBDU19FVkVOVF9QUklfTE9XCQkwCi0jZGVmaW5lIENTX0VWRU5UX1BSSV9ISUdICQkxCi0KLSNkZWZpbmUgQ1NfRVZFTlRfV1JJVEVfUFJPVEVDVAkJMHgwMDAwMDEKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9MT0NLCQkweDAwMDAwMgotI2RlZmluZSBDU19FVkVOVF9DQVJEX0lOU0VSVElPTgkJMHgwMDAwMDQKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9SRU1PVkFMCQkweDAwMDAwOAotI2RlZmluZSBDU19FVkVOVF9CQVRURVJZX0RFQUQJCTB4MDAwMDEwCi0jZGVmaW5lIENTX0VWRU5UX0JBVFRFUllfTE9XCQkweDAwMDAyMAotI2RlZmluZSBDU19FVkVOVF9SRUFEWV9DSEFOR0UJCTB4MDAwMDQwCi0jZGVmaW5lIENTX0VWRU5UX0NBUkRfREVURUNUCQkweDAwMDA4MAotI2RlZmluZSBDU19FVkVOVF9SRVNFVF9SRVFVRVNUCQkweDAwMDEwMAotI2RlZmluZSBDU19FVkVOVF9SRVNFVF9QSFlTSUNBTAkJMHgwMDAyMDAKLSNkZWZpbmUgQ1NfRVZFTlRfQ0FSRF9SRVNFVAkJMHgwMDA0MDAKLSNkZWZpbmUgQ1NfRVZFTlRfUkVHSVNUUkFUSU9OX0NPTVBMRVRFCTB4MDAwODAwCi0jZGVmaW5lIENTX0VWRU5UX1BNX1NVU1BFTkQJCTB4MDAyMDAwCi0jZGVmaW5lIENTX0VWRU5UX1BNX1JFU1VNRQkJMHgwMDQwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfSU5TRVJUSU9OX1JFUVVFU1QJMHgwMDgwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfRUpFQ1RJT05fUkVRVUVTVAkweDAxMDAwMAotI2RlZmluZSBDU19FVkVOVF9NVERfUkVRVUVTVAkJMHgwMjAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfRVJBU0VfQ09NUExFVEUJCTB4MDQwMDAwCi0jZGVmaW5lIENTX0VWRU5UX1JFUVVFU1RfQVRURU5USU9OCTB4MDgwMDAwCi0jZGVmaW5lIENTX0VWRU5UX0NCX0RFVEVDVAkJMHgxMDAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfM1ZDQVJECQkJMHgyMDAwMDAKLSNkZWZpbmUgQ1NfRVZFTlRfWFZDQVJECQkJMHg0MDAwMDAKKyNkZWZpbmUgV0lOX0ZMQUdTX01BUAkJMHg2MyAvKiBNQVBfQVRUUklCIHwgTUFQXzE2QklUIHwgTUFQX0FDVElWRSB8CisJCQkJCU1BUF9VU0VfV0FJVCAqLworI2RlZmluZSBXSU5fRkxBR1NfUkVRCQkweDFjIC8qIG1hcHBpbmcgdG8gc29ja2V0LT53aW5baV06CisJCQkJCTB4MDQgLT4gMAorCQkJCQkweDA4IC0+IDEKKwkJCQkJMHgwYyAtPiAyCisJCQkJCTB4MTAgLT4gMyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmggYi9pbmNsdWRlL3BjbWNpYS9jc190eXBlcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWUzYjgzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvcGNtY2lhL2NzX3R5cGVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogY3NfdHlwZXMuaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCi0gKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcwotICogYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogKEMpIDE5OTkgICAgICAgICAgICAgRGF2aWQgQS4gSGluZHMKLSAqLwotCi0jaWZuZGVmIF9MSU5VWF9DU19UWVBFU19ICi0jZGVmaW5lIF9MSU5VWF9DU19UWVBFU19ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLQotdHlwZWRlZiB1X3Nob3J0CXNvY2tldF90OwotdHlwZWRlZiB1X2ludAlldmVudF90OwotdHlwZWRlZiB1X2NoYXIJY2lzZGF0YV90OwotdHlwZWRlZiB1X3Nob3J0CXBhZ2VfdDsKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHdpbmRvd19oYW5kbGVfdDsKLQotc3RydWN0IHJlZ2lvbl90OwotdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX3QgKm1lbW9yeV9oYW5kbGVfdDsKLQotI2lmbmRlZiBERVZfTkFNRV9MRU4KLSNkZWZpbmUgREVWX05BTUVfTEVOIDMyCi0jZW5kaWYKLQotdHlwZWRlZiBjaGFyIGRldl9pbmZvX3RbREVWX05BTUVfTEVOXTsKLQotI2VuZGlmIC8qIF9MSU5VWF9DU19UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9kcy5oIGIvaW5jbHVkZS9wY21jaWEvZHMuaAppbmRleCBjMTgwMTY1Li43MGM1OGVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RldmljZV9pZC5oPgogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtMzcsNiArMzYsOCBAQAogc3RydWN0IGNvbmZpZ190Owogc3RydWN0IG5ldF9kZXZpY2U7CiAKK3R5cGVkZWYgc3RydWN0IHJlc291cmNlICp3aW5kb3dfaGFuZGxlX3Q7CisKIC8qIGR5bmFtaWMgZGV2aWNlIElEcyBmb3IgUENNQ0lBIGRldmljZSBkcml2ZXJzLiBTZWUKICAqIERvY3VtZW50YXRpb24vcGNtY2lhL2RyaXZlci50eHQgZm9yIGRldGFpbHMuCiAqLwpAQCAtNjIsNiArNjMsMTcgQEAKIGludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpOwogdm9pZCBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjbWNpYV9kcml2ZXIgKmRyaXZlcik7CiAKKy8qIGZvciBzdHJ1Y3QgcmVzb3VyY2UgKiBhcnJheSBlbWJlZGRlZCBpbiBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqLworZW51bSB7CisJUENNQ0lBX0lPUE9SVF8wLAorCVBDTUNJQV9JT1BPUlRfMSwKKwlQQ01DSUFfSU9NRU1fMCwKKwlQQ01DSUFfSU9NRU1fMSwKKwlQQ01DSUFfSU9NRU1fMiwKKwlQQ01DSUFfSU9NRU1fMywKKwlQQ01DSUFfTlVNX1JFU09VUkNFUywKK307CisKIHN0cnVjdCBwY21jaWFfZGV2aWNlIHsKIAkvKiB0aGUgc29ja2V0IGFuZCB0aGUgZGV2aWNlX25vIFtmb3IgbXVsdGlmdW5jdGlvbiBkZXZpY2VzXQogCSAgIHVuaXF1ZWx5IGRlZmluZSBhIHBjbWNpYV9kZXZpY2UgKi8KQEAgLTc5LDEzICs5MSwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJc29ja2V0X2RldmljZV9saXN0OwogCiAJLyogZGVwcmVjYXRlZCwgd2lsbCBiZSBjbGVhbmVkIHVwIHNvb24gKi8KLQl1X2ludAkJCW9wZW47Ci0JaW9fcmVxX3QJCWlvOwogCWNvbmZpZ19yZXFfdAkJY29uZjsKIAl3aW5kb3dfaGFuZGxlX3QJCXdpbjsKIAogCS8qIGRldmljZSBzZXR1cCAqLwogCXVuc2lnbmVkIGludAkJaXJxOworCXN0cnVjdCByZXNvdXJjZQkJKnJlc291cmNlW1BDTUNJQV9OVU1fUkVTT1VSQ0VTXTsKKworCXVuc2lnbmVkIGludAkJaW9fbGluZXM7IC8qIG51bWJlciBvZiBJL08gbGluZXMgKi8KIAogCS8qIElzIHRoZSBkZXZpY2Ugc3VzcGVuZGVkPyAqLwogCXUxNgkJCXN1c3BlbmRlZDoxOwpAQCAtMTE3LDEzICsxMzAsOSBAQAogCXU2NAkJCWRtYV9tYXNrOwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAotI2lmZGVmIENPTkZJR19QQ01DSUFfSU9DVEwKLQkvKiBkZXZpY2UgZHJpdmVyIHdhbnRlZCBieSBjYXJkbWdyICovCi0Jc3RydWN0IHBjbWNpYV9kcml2ZXIJKmNhcmRtZ3I7Ci0jZW5kaWYKLQogCS8qIGRhdGEgcHJpdmF0ZSB0byBkcml2ZXJzICovCiAJdm9pZAkJCSpwcml2OworCXVuc2lnbmVkIGludAkJb3BlbjsKIH07CiAKICNkZWZpbmUgdG9fcGNtY2lhX2RldihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBjbWNpYV9kZXZpY2UsIGRldikKQEAgLTE3OCwxMSArMTg3LDExIEBACiBpbnQgcGNtY2lhX3Jlc2V0X2NhcmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiAKIC8qIENJUyBjb25maWcgKi8KLWludCBwY21jaWFfYWNjZXNzX2NvbmZpZ3VyYXRpb25fcmVnaXN0ZXIoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LAotCQkJCQkgY29uZl9yZWdfdCAqcmVnKTsKK2ludCBwY21jaWFfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIG9mZl90IHdoZXJlLCB1OCAqdmFsKTsKK2ludCBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2LCBvZmZfdCB3aGVyZSwgdTggdmFsKTsKIAogLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLWludCBwY21jaWFfcmVxdWVzdF9pbyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIGlvX3JlcV90ICpyZXEpOworaW50IHBjbWNpYV9yZXF1ZXN0X2lvKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CiAKIGludCBfX211c3RfY2hlY2sKIF9fcGNtY2lhX3JlcXVlc3RfZXhjbHVzaXZlX2lycShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCkBAIC0yMDQsMjE1ICsyMTMsMjcgQEAKIAkJCSAgd2luZG93X2hhbmRsZV90ICp3aCk7CiBpbnQgcGNtY2lhX3JlbGVhc2Vfd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldiwgd2luZG93X2hhbmRsZV90IHdpbik7CiBpbnQgcGNtY2lhX21hcF9tZW1fcGFnZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHdpbmRvd19oYW5kbGVfdCB3aW4sCi0JCQltZW1yZXFfdCAqcmVxKTsKKwkJCXVuc2lnbmVkIGludCBvZmZzZXQpOwogCiBpbnQgcGNtY2lhX21vZGlmeV9jb25maWd1cmF0aW9uKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldiwgbW9kY29uZl90ICptb2QpOwogdm9pZCBwY21jaWFfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAorLyogSU8gcG9ydHMgKi8KKyNkZWZpbmUgSU9fREFUQV9QQVRIX1dJRFRICTB4MTgKKyNkZWZpbmUgSU9fREFUQV9QQVRIX1dJRFRIXzgJMHgwMAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfMTYJMHgwOAorI2RlZmluZSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTwkweDEwCisKKy8qIGNvbnZlcnQgZmxhZyBmb3VuZCBpbiBjZmd0YWJsZSB0byBkYXRhIHBhdGggd2lkdGggcGFyYW1ldGVyICovCitzdGF0aWMgaW5saW5lIGludCBwY21jaWFfaW9fY2ZnX2RhdGFfd2lkdGgodW5zaWduZWQgaW50IGZsYWdzKQoreworCWlmICghKGZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQlyZXR1cm4gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWlmICghKGZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJcmV0dXJuIElPX0RBVEFfUEFUSF9XSURUSF84OworCXJldHVybiBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKK30KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotCi0KLS8qIEJlbG93LCB0aGVyZSBhcmUgb25seSBkZWZpbml0aW9ucyB3aGljaCBhcmUgdXNlZCBieQotICogLSB0aGUgUENNQ0lBIGlvY3RsCi0gKiAtIGRlcHJlY2F0ZWQgUENNQ0lBIHVzZXJzcGFjZSB0b29scyBvbmx5Ci0gKgotICogaGVyZSBiZSBkcmFnb25zIC4uLiBoZXJlIGJlIGRyYWdvbnMgLi4uIGhlcmUgYmUgZHJhZ29ucyAuLi4gaGVyZSBiZSBkcmFnCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgfHwgIWRlZmluZWQoX19LRVJORUxfXykKLQotI2lmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pIHx8IFwKLQlkZWZpbmVkKF9fYmZpbl9fKQotLyogVGhpcyAoaW9hZGRyX3QpIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICYgaGVuY2UgY2Fubm90IGJlIGNoYW5nZWQuICovCi10eXBlZGVmIHVfaW50ICAgaW9hZGRyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1X3Nob3J0CWlvYWRkcl90OwotI2VuZGlmCi0KLS8qIGZvciBBZGp1c3RSZXNvdXJjZUluZm8gKi8KLXR5cGVkZWYgc3RydWN0IGFkanVzdF90IHsKLQl1X2ludAkJCUFjdGlvbjsKLQl1X2ludAkJCVJlc291cmNlOwotCXVfaW50CQkJQXR0cmlidXRlczsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBtZW1vcnkgewotCQkJdV9sb25nCQlCYXNlOwotCQkJdV9sb25nCQlTaXplOwotCQl9IG1lbW9yeTsKLQkJc3RydWN0IGlvIHsKLQkJCWlvYWRkcl90CUJhc2VQb3J0OwotCQkJaW9hZGRyX3QJTnVtUG9ydHM7Ci0JCQl1X2ludAkJSU9BZGRyTGluZXM7Ci0JCX0gaW87Ci0JCXN0cnVjdCBpcnEgewotCQkJdV9pbnQJCUlSUTsKLQkJfSBpcnE7Ci0JfSByZXNvdXJjZTsKLX0gYWRqdXN0X3Q7Ci0KLS8qIEFjdGlvbiBmaWVsZCAqLwotI2RlZmluZSBSRU1PVkVfTUFOQUdFRF9SRVNPVVJDRQkJMQotI2RlZmluZSBBRERfTUFOQUdFRF9SRVNPVVJDRQkJMgotI2RlZmluZSBHRVRfRklSU1RfTUFOQUdFRF9SRVNPVVJDRQkzCi0jZGVmaW5lIEdFVF9ORVhUX01BTkFHRURfUkVTT1VSQ0UJNAotLyogUmVzb3VyY2UgZmllbGQgKi8KLSNkZWZpbmUgUkVTX01FTU9SWV9SQU5HRQkJMQotI2RlZmluZSBSRVNfSU9fUkFOR0UJCQkyCi0jZGVmaW5lIFJFU19JUlEJCQkJMwotLyogQXR0cmlidXRlIGZpZWxkICovCi0jZGVmaW5lIFJFU19JUlFfVFlQRQkJCTB4MDMKLSNkZWZpbmUgUkVTX0lSUV9UWVBFX0VYQ0xVU0lWRQkJMAotI2RlZmluZSBSRVNfSVJRX1RZUEVfVElNRQkJMQotI2RlZmluZSBSRVNfSVJRX1RZUEVfRFlOQU1JQwkJMgotI2RlZmluZSBSRVNfSVJRX0NTQwkJCTB4MDQKLSNkZWZpbmUgUkVTX1NIQVJFRAkJCTB4MDgKLSNkZWZpbmUgUkVTX1JFU0VSVkVECQkJMHgxMAotI2RlZmluZSBSRVNfQUxMT0NBVEVECQkJMHgyMAotI2RlZmluZSBSRVNfUkVNT1ZFRAkJCTB4NDAKLQotCi10eXBlZGVmIHN0cnVjdCB0dXBsZV9wYXJzZV90IHsKLQl0dXBsZV90CQkJdHVwbGU7Ci0JY2lzZGF0YV90CQlkYXRhWzI1NV07Ci0JY2lzcGFyc2VfdAkJcGFyc2U7Ci19IHR1cGxlX3BhcnNlX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHdpbl9pbmZvX3QgewotCXdpbmRvd19oYW5kbGVfdAkJaGFuZGxlOwotCXdpbl9yZXFfdAkJd2luZG93OwotCW1lbXJlcV90CQltYXA7Ci19IHdpbl9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGJpbmRfaW5mb190IHsKLQlkZXZfaW5mb190CQlkZXZfaW5mbzsKLQl1X2NoYXIJCQlmdW5jdGlvbjsKLQlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqaW5zdGFuY2U7Ci0JY2hhcgkJCW5hbWVbREVWX05BTUVfTEVOXTsKLQl1X3Nob3J0CQkJbWFqb3IsIG1pbm9yOwotCXZvaWQJCQkqbmV4dDsKLX0gYmluZF9pbmZvX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3QgewotCWRldl9pbmZvX3QgICAgIAkJZGV2X2luZm87Ci0JdV9pbnQJCQlBdHRyaWJ1dGVzOwotCXVfaW50CQkJQ2FyZE9mZnNldDsKLX0gbXRkX2luZm9fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdCB7Ci0JdV9pbnQJCQlBdHRyaWJ1dGVzOwotCXVfaW50CQkJQ2FyZE9mZnNldDsKLQl1X2ludAkJCVJlZ2lvblNpemU7Ci0JdV9pbnQJCQlBY2Nlc3NTcGVlZDsKLQl1X2ludAkJCUJsb2NrU2l6ZTsKLQl1X2ludAkJCVBhcnRNdWx0aXBsZTsKLQl1X2NoYXIJCQlKZWRlY01mciwgSmVkZWNJbmZvOwotCW1lbW9yeV9oYW5kbGVfdAkJbmV4dDsKLX0gcmVnaW9uX2luZm9fdDsKLQotI2RlZmluZSBSRUdJT05fVFlQRQkJMHgwMDAxCi0jZGVmaW5lIFJFR0lPTl9UWVBFX0NNCQkweDAwMDAKLSNkZWZpbmUgUkVHSU9OX1RZUEVfQU0JCTB4MDAwMQotI2RlZmluZSBSRUdJT05fUFJFRkVUQ0gJCTB4MDAwOAotI2RlZmluZSBSRUdJT05fQ0FDSEVBQkxFCTB4MDAxMAotI2RlZmluZSBSRUdJT05fQkFSX01BU0sJCTB4ZTAwMAotI2RlZmluZSBSRUdJT05fQkFSX1NISUZUCTEzCi0KLS8qIEZvciBSZXBsYWNlQ0lTICovCi10eXBlZGVmIHN0cnVjdCBjaXNkdW1wX3QgewotCXVfaW50CQkJTGVuZ3RoOwotCWNpc2RhdGFfdAkJRGF0YVtDSVNUUExfTUFYX0NJU19TSVpFXTsKLX0gY2lzZHVtcF90OwotCi0vKiBmb3IgR2V0Q29uZmlndXJhdGlvbkluZm8gKi8KLXR5cGVkZWYgc3RydWN0IGNvbmZpZ19pbmZvX3QgewotCXVfY2hhcgkJCUZ1bmN0aW9uOwotCXVfaW50CQkJQXR0cmlidXRlczsKLQl1X2ludAkJCVZjYywgVnBwMSwgVnBwMjsKLQl1X2ludAkJCUludFR5cGU7Ci0JdV9pbnQJCQlDb25maWdCYXNlOwotCXVfY2hhcgkJCVN0YXR1cywgUGluLCBDb3B5LCBPcHRpb24sIEV4dFN0YXR1czsKLQl1X2ludAkJCVByZXNlbnQ7Ci0JdV9pbnQJCQlDYXJkVmFsdWVzOwotCXVfaW50CQkJQXNzaWduZWRJUlE7Ci0JdV9pbnQJCQlJUlFBdHRyaWJ1dGVzOwotCWlvYWRkcl90CQlCYXNlUG9ydDE7Ci0JaW9hZGRyX3QJCU51bVBvcnRzMTsKLQl1X2ludAkJCUF0dHJpYnV0ZXMxOwotCWlvYWRkcl90CQlCYXNlUG9ydDI7Ci0JaW9hZGRyX3QJCU51bVBvcnRzMjsKLQl1X2ludAkJCUF0dHJpYnV0ZXMyOwotCXVfaW50CQkJSU9BZGRyTGluZXM7Ci19IGNvbmZpZ19pbmZvX3Q7Ci0KLS8qIEZvciBWYWxpZGF0ZUNJUyAqLwotdHlwZWRlZiBzdHJ1Y3QgY2lzaW5mb190IHsKLQl1X2ludAkJCUNoYWluczsKLX0gY2lzaW5mb190OwotCi10eXBlZGVmIHN0cnVjdCBjc19zdGF0dXNfdCB7Ci0JdV9jaGFyCQkJRnVuY3Rpb247Ci0JZXZlbnRfdCAJCUNhcmRTdGF0ZTsKLQlldmVudF90CQkJU29ja2V0U3RhdGU7Ci19IGNzX3N0YXR1c190OwotCi10eXBlZGVmIHVuaW9uIGRzX2lvY3RsX2FyZ190IHsKLQlhZGp1c3RfdAkJYWRqdXN0OwotCWNvbmZpZ19pbmZvX3QJCWNvbmZpZzsKLQl0dXBsZV90CQkJdHVwbGU7Ci0JdHVwbGVfcGFyc2VfdAkJdHVwbGVfcGFyc2U7Ci0JY2xpZW50X3JlcV90CQljbGllbnRfcmVxOwotCWNzX3N0YXR1c190CQlzdGF0dXM7Ci0JY29uZl9yZWdfdAkJY29uZl9yZWc7Ci0JY2lzaW5mb190CQljaXNpbmZvOwotCXJlZ2lvbl9pbmZvX3QJCXJlZ2lvbjsKLQliaW5kX2luZm9fdAkJYmluZF9pbmZvOwotCW10ZF9pbmZvX3QJCW10ZF9pbmZvOwotCXdpbl9pbmZvX3QJCXdpbl9pbmZvOwotCWNpc2R1bXBfdAkJY2lzZHVtcDsKLX0gZHNfaW9jdGxfYXJnX3Q7Ci0KLSNkZWZpbmUgRFNfQURKVVNUX1JFU09VUkNFX0lORk8JCQlfSU9XUignZCcsICAyLCBhZGp1c3RfdCkKLSNkZWZpbmUgRFNfR0VUX0NPTkZJR1VSQVRJT05fSU5GTwkJX0lPV1IoJ2QnLCAgMywgY29uZmlnX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1RVUExFCQkJX0lPV1IoJ2QnLCAgNCwgdHVwbGVfdCkKLSNkZWZpbmUgRFNfR0VUX05FWFRfVFVQTEUJCQlfSU9XUignZCcsICA1LCB0dXBsZV90KQotI2RlZmluZSBEU19HRVRfVFVQTEVfREFUQQkJCV9JT1dSKCdkJywgIDYsIHR1cGxlX3BhcnNlX3QpCi0jZGVmaW5lIERTX1BBUlNFX1RVUExFCQkJCV9JT1dSKCdkJywgIDcsIHR1cGxlX3BhcnNlX3QpCi0jZGVmaW5lIERTX1JFU0VUX0NBUkQJCQkJX0lPICAoJ2QnLCAgOCkKLSNkZWZpbmUgRFNfR0VUX1NUQVRVUwkJCQlfSU9XUignZCcsICA5LCBjc19zdGF0dXNfdCkKLSNkZWZpbmUgRFNfQUNDRVNTX0NPTkZJR1VSQVRJT05fUkVHSVNURVIJX0lPV1IoJ2QnLCAxMCwgY29uZl9yZWdfdCkKLSNkZWZpbmUgRFNfVkFMSURBVEVfQ0lTCQkJCV9JT1IgKCdkJywgMTEsIGNpc2luZm9fdCkKLSNkZWZpbmUgRFNfU1VTUEVORF9DQVJECQkJCV9JTyAgKCdkJywgMTIpCi0jZGVmaW5lIERTX1JFU1VNRV9DQVJECQkJCV9JTyAgKCdkJywgMTMpCi0jZGVmaW5lIERTX0VKRUNUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNCkKLSNkZWZpbmUgRFNfSU5TRVJUX0NBUkQJCQkJX0lPICAoJ2QnLCAxNSkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTYsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1JFR0lPTgkJCV9JT1dSKCdkJywgMTcsIHJlZ2lvbl9pbmZvX3QpCi0jZGVmaW5lIERTX1JFUExBQ0VfQ0lTCQkJCV9JT1dSKCdkJywgMTgsIGNpc2R1bXBfdCkKLSNkZWZpbmUgRFNfR0VUX0ZJUlNUX1dJTkRPVwkJCV9JT1IgKCdkJywgMTksIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX1dJTkRPVwkJCV9JT1dSKCdkJywgMjAsIHdpbl9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9NRU1fUEFHRQkJCQlfSU9XUignZCcsIDIxLCB3aW5faW5mb190KQotCi0jZGVmaW5lIERTX0JJTkRfUkVRVUVTVAkJCQlfSU9XUignZCcsIDYwLCBiaW5kX2luZm9fdCkKLSNkZWZpbmUgRFNfR0VUX0RFVklDRV9JTkZPCQkJX0lPV1IoJ2QnLCA2MSwgYmluZF9pbmZvX3QpCi0jZGVmaW5lIERTX0dFVF9ORVhUX0RFVklDRQkJCV9JT1dSKCdkJywgNjIsIGJpbmRfaW5mb190KQotI2RlZmluZSBEU19VTkJJTkRfUkVRVUVTVAkJCV9JT1cgKCdkJywgNjMsIGJpbmRfaW5mb190KQotI2RlZmluZSBEU19CSU5EX01URAkJCQlfSU9XUignZCcsIDY0LCBtdGRfaW5mb190KQotCi0KLS8qIHVzZWQgaW4gdXNlcnNwYWNlIG9ubHkgKi8KLSNkZWZpbmUgQ1NfSU5fVVNFCQkJMHgxZQotCi0jZGVmaW5lIElORk9fTUFTVEVSX0NMSUVOVAkweDAxCi0jZGVmaW5lIElORk9fSU9fQ0xJRU5UCQkweDAyCi0jZGVmaW5lIElORk9fTVREX0NMSUVOVAkJMHgwNAotI2RlZmluZSBJTkZPX01FTV9DTElFTlQJCTB4MDgKLSNkZWZpbmUgTUFYX05VTV9DTElFTlRTCQkzCi0KLSNkZWZpbmUgSU5GT19DQVJEX1NIQVJFCQkweDEwCi0jZGVmaW5lIElORk9fQ0FSRF9FWENMCQkweDIwCi0KLQotI2VuZGlmIC8qICFkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoQ09ORklHX1BDTUNJQV9JT0NUTCkgKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9EU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCA3NjQyODFiLi42MjZiNjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiB0YXNrX3N0cnVjdCwgY29tcGxldGlvbiAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKLSNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpZmRlZiBDT05GSUdfQ0FSREJVUwogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTYyLDE3ICsxNjEsMTAgQEAKIAl1X2ludAkJCQlwY2lfaXJxOwogCXN0cnVjdCBwY2lfZGV2CQkJKmNiX2RldjsKIAotCiAJLyogc29ja2V0IHNldHVwIGlzIGRvbmUgc28gcmVzb3VyY2VzIHNob3VsZCBiZSBhYmxlIHRvIGJlIGFsbG9jYXRlZC4KIAkgKiBPbmx5IGlmIHNldCB0byAxLCBjYWxscyB0byBmaW5kX3tpbyxtZW19X3JlZ2lvbiBhcmUgaGFuZGxlZCwgYW5kCiAJICogaW5zZXJ0aW8gZXZlbnRzIGFyZSBhY3R1YWxseSBtYW5hZ2VkIGJ5IHRoZSBQQ01DSUEgbGF5ZXIuKi8KLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9kb25lOjE7Ci0KLQkvKiBJdCdzIG9sZCBpZiByZXNvdXJjZSBzZXR1cCBpcyBkb25lIHVzaW5nIGFkanVzdF9yZXNvdXJjZV9pbmZvKCkgKi8KLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9vbGQ6MTsKLQl1OAkJCQlyZXNvdXJjZV9zZXR1cF9uZXc6MTsKLQotCXU4CQkJCXJlc2VydmVkOjU7CisJdTgJCQkJcmVzb3VyY2Vfc2V0dXBfZG9uZTsKIAogCS8qIHNvY2tldCBvcGVyYXRpb25zICovCiAJc3RydWN0IHBjY2FyZF9vcGVyYXRpb25zCSpvcHM7CkBAIC0yMTgsMTUgKzIxMCw4IEBACiAJICogaW5jb3JyZWN0bmVzcyBhbmQgY2hhbmdlICovCiAJdTgJCQkJZGV2aWNlX2NvdW50OwogCi0JLyogMTYtYml0IHN0YXRlOiAqLwotCXN0cnVjdCB7Ci0JCS8qICJtYXN0ZXIiIGlvY3RsIGlzIHVzZWQgKi8KLQkJdTgJCQlidXN5OjE7Ci0JCS8qIHRoZSBQQ01DSUEgY2FyZCBjb25zaXN0cyBvZiB0d28gcHNldWRvIGRldmljZXMgKi8KLQkJdTgJCQloYXNfcGZjOjE7Ci0KLQkJdTgJCQlyZXNlcnZlZDo2OwotCX0gcGNtY2lhX3N0YXRlOworCS8qIGRvZXMgdGhlIFBDTUNJQSBjYXJkIGNvbnNpc3Qgb2YgdHdvIHBzZXVkbyBkZXZpY2VzPyAqLworCXU4CQkJCXBjbWNpYV9wZmM7CiAKIAkvKiBub24temVybyBpZiBQQ01DSUEgY2FyZCBpcyBwcmVzZW50ICovCiAJYXRvbWljX3QJCQlwcmVzZW50OwpAQCAtMjM0LDEwICsyMTksNiBAQAogCS8qIElSUSB0byBiZSB1c2VkIGJ5IFBDTUNJQSBkZXZpY2VzLiBNYXkgbm90IGJlIElSUSAwLiAqLwogCXVuc2lnbmVkIGludAkJCXBjbWNpYV9pcnE7CiAKLSNpZmRlZiBDT05GSUdfUENNQ0lBX0lPQ1RMCi0Jc3RydWN0IHVzZXJfaW5mb190CQkqdXNlcjsKLQl3YWl0X3F1ZXVlX2hlYWRfdAkJcXVldWU7Ci0jZW5kaWYgLyogQ09ORklHX1BDTUNJQV9JT0NUTCAqLwogI2VuZGlmIC8qIENPTkZJR19QQ01DSUEgKi8KIAogCS8qIHNvY2tldCBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggZjNlOGYzYy4uODU3YjNiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTU1NSw3ICs1NTUsNyBAQAogCUlCX1FQVF9VQywKIAlJQl9RUFRfVUQsCiAJSUJfUVBUX1JBV19JUFY2LAotCUlCX1FQVF9SQVdfRVRZCisJSUJfUVBUX1JBV19FVEhFUlRZUEUKIH07CiAKIGVudW0gaWJfcXBfY3JlYXRlX2ZsYWdzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaS5oCmluZGV4IDlhZTVjNjEuLjhmY2I2ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2kuaApAQCAtMTUxLDEwICsxNTEsMTAgQEAKIAogLyogZGVmaW5lZCBpbiBUMTAgU0NTSSBQcmltYXJ5IENvbW1hbmRzLTIgKFNQQzIpICovCiBzdHJ1Y3Qgc2NzaV92YXJsZW5fY2RiX2hkciB7Ci0JdTggb3Bjb2RlOyAgICAgICAgLyogb3Bjb2RlIGFsd2F5cyA9PSBWQVJJQUJMRV9MRU5HVEhfQ01EICovCi0JdTggY29udHJvbDsKLQl1OCBtaXNjWzVdOwotCXU4IGFkZGl0aW9uYWxfY2RiX2xlbmd0aDsgICAgICAgICAvKiB0b3RhbCBjZGIgbGVuZ3RoIC0gOCAqLworCV9fdTggb3Bjb2RlOyAgICAgICAgLyogb3Bjb2RlIGFsd2F5cyA9PSBWQVJJQUJMRV9MRU5HVEhfQ01EICovCisJX191OCBjb250cm9sOworCV9fdTggbWlzY1s1XTsKKwlfX3U4IGFkZGl0aW9uYWxfY2RiX2xlbmd0aDsgICAgICAgICAvKiB0b3RhbCBjZGIgbGVuZ3RoIC0gOCAqLwogCV9fYmUxNiBzZXJ2aWNlX2FjdGlvbjsKIAkvKiBzZXJ2aWNlIHNwZWNpZmljIGRhdGEgZm9sbG93cyAqLwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX25ldGxpbmsuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX25ldGxpbmsuaAppbmRleCA1MzY3NTJjLi41OGNlOGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfbmV0bGluay5oCkBAIC0xMDUsOCArMTA1LDggQEAKICAqICAgIFBDSSA6ICBJRCBkYXRhIGlzIHRoZSAxNiBiaXQgUENJIFJlZ2lzdGVyZWQgVmVuZG9yIElECiAgKi8KICNkZWZpbmUgU0NTSV9OTF9WSURfVFlQRV9TSElGVAkJNTYKLSNkZWZpbmUgU0NTSV9OTF9WSURfVFlQRV9NQVNLCQkoKHU2NCkweEZGIDw8IFNDU0lfTkxfVklEX1RZUEVfU0hJRlQpCi0jZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfUENJCQkoKHU2NCkweDAxIDw8IFNDU0lfTkxfVklEX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfTUFTSwkJKChfX3U2NCkweEZGIDw8IFNDU0lfTkxfVklEX1RZUEVfU0hJRlQpCisjZGVmaW5lIFNDU0lfTkxfVklEX1RZUEVfUENJCQkoKF9fdTY0KTB4MDEgPDwgU0NTSV9OTF9WSURfVFlQRV9TSElGVCkKICNkZWZpbmUgU0NTSV9OTF9WSURfSURfTUFTSwkJKH4gU0NTSV9OTF9WSURfVFlQRV9NQVNLKQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDlmMWVlY2YuLmExODAzZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtMjEyLDcgKzIxMiwxMSBAQAogI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1MxOF8zQkUJKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQxKQkvKiBpbiB0aHJlZSBieXRlcyAqLwogI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UxOF8zTEUJKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQyKQkvKiBpbiB0aHJlZSBieXRlcyAqLwogI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUJKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQzKQkvKiBpbiB0aHJlZSBieXRlcyAqLwotI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0xBU1QJCVNORFJWX1BDTV9GT1JNQVRfVTE4XzNCRQorI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjQJKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ0KSAvKiA4IHNhbXBsZXMgaW4gMyBieXRlcyAqLworI2RlZmluZQlTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjRfMUIJKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQ1KSAvKiAxIHNhbXBsZSBpbiAxIGJ5dGUgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0NikgLyogOCBTYW1wbGVzIGluIDUgYnl0ZXMgKi8KKyNkZWZpbmUJU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwXzFCCSgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0NykgLyogMSBzYW1wbGUgaW4gMSBieXRlICovCisjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfTEFTVAkJU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwXzFCCiAKICNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lCVNORFJWX1BDTV9GT1JNQVRfUzE2CQlTTkRSVl9QQ01fRk9STUFUX1MxNl9MRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggNmUzYTI5Ny4uODVmMWM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC0xNzQsNiArMTc0LDEwIEBACiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTE4XzNMRQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UxOF8zTEUpCiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE4XzNCRQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1MxOF8zQkUpCiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfVTE4XzNCRQkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRzcyM18yNAkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjQpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRzcyM18yNF8xQgkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX0c3MjNfMjRfMUIpCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRzcyM180MAkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDApCisjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfRzcyM180MF8xQgkoMVVMTCA8PCBTTkRSVl9QQ01fRk9STUFUX0c3MjNfNDBfMUIpCiAKICNpZmRlZiBTTkRSVl9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIFNORFJWX1BDTV9GTVRCSVRfUzE2CQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRQpAQCAtMzEzLDcgKzMxNyw3IEBACiAJc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sICpjb250cm9sOwogCiAJLyogLS0gbG9ja2luZyAvIHNjaGVkdWxpbmcgLS0gKi8KLQl1bnNpZ25lZCBpbnQgdHdha2U6IDE7CQkvKiBkbyB0cmFuc2ZlciAoIXBvbGwpIHdha2V1cCAqLworCXNuZF9wY21fdWZyYW1lc190IHR3YWtlOyAJLyogZG8gdHJhbnNmZXIgKCFwb2xsKSB3YWtldXAgaWYgbm9uLXplcm8gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsJLyogcG9sbCBzbGVlcCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHRzbGVlcDsJLyogdHJhbnNmZXIgc2xlZXAgKi8KIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zaF9mc2kuaCBiL2luY2x1ZGUvc291bmQvc2hfZnNpLmgKaW5kZXggYzAyMjczNi4uOWQ1MWQ2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zaF9mc2kuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NoX2ZzaS5oCkBAIC0xMiw2ICsxMiw5IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjZGVmaW5lIEZTSV9QT1JUX0EJMAorI2RlZmluZSBGU0lfUE9SVF9CCTEKKwogLyogZmxhZ3MgZm9ybWF0CiAKICAqIDB4QUJDREVFRkYKQEAgLTU1LDEyICs1OCwxNCBAQAogI2RlZmluZSBTSF9GU0lfR0VUX0lGTVQoeCkJKCh4ID4+IDgpICYgU0hfRlNJX0ZNVF9NQVNLKQogI2RlZmluZSBTSF9GU0lfR0VUX09GTVQoeCkJKCh4ID4+IDApICYgU0hfRlNJX0ZNVF9NQVNLKQogCi0jZGVmaW5lIFNIX0ZTSV9GTVRfTU9OTwkJKDEgPDwgMCkKLSNkZWZpbmUgU0hfRlNJX0ZNVF9NT05PX0RFTEFZCSgxIDw8IDEpCi0jZGVmaW5lIFNIX0ZTSV9GTVRfUENNCQkoMSA8PCAyKQotI2RlZmluZSBTSF9GU0lfRk1UX0kyUwkJKDEgPDwgMykKLSNkZWZpbmUgU0hfRlNJX0ZNVF9URE0JCSgxIDw8IDQpCi0jZGVmaW5lIFNIX0ZTSV9GTVRfVERNX0RFTEFZCSgxIDw8IDUpCisjZGVmaW5lIFNIX0ZTSV9GTVRfTU9OTwkJMAorI2RlZmluZSBTSF9GU0lfRk1UX01PTk9fREVMQVkJMQorI2RlZmluZSBTSF9GU0lfRk1UX1BDTQkJMgorI2RlZmluZSBTSF9GU0lfRk1UX0kyUwkJMworI2RlZmluZSBTSF9GU0lfRk1UX1RETQkJNAorI2RlZmluZSBTSF9GU0lfRk1UX1RETV9ERUxBWQk1CisjZGVmaW5lIFNIX0ZTSV9GTVRfU1BESUYJNgorCiAKICNkZWZpbmUgU0hfRlNJX0lGTVRfVERNX0NIKHgpIFwKIAkoU0hfRlNJX0lGTVQoVERNKQl8IFNIX0ZTSV9TRVRfQ0hfSSh4KSkKQEAgLTcyLDkgKzc3LDQxIEBACiAjZGVmaW5lIFNIX0ZTSV9PRk1UX1RETV9ERUxBWV9DSCh4KSBcCiAJKFNIX0ZTSV9PRk1UKFRETV9ERUxBWSkJfCBTSF9GU0lfU0VUX0NIX08oeCkpCiAKKworLyoKKyAqIHNldF9yYXRlIHJldHVybiB2YWx1ZQorICoKKyAqIHNlZSBBQ0tNRC9CUEZNRCBvbgorICogICAgIEFDS19NRCAoRlNJMikKKyAqICAgICBDS0cxICAgKEZTSSkKKyAqCisgKiBlcnI6ICByZXR1cm4gdmFsdWUgPCAwCisgKgorICogMHgtMDAwMDBBQgorICoKKyAqIEE6ICBBQ0tNRCB2YWx1ZQorICogQjogIEJQRk1EIHZhbHVlCisgKi8KKworI2RlZmluZSBTSF9GU0lfQUNLTURfTUFTSwkoMHhGIDw8IDApCisjZGVmaW5lIFNIX0ZTSV9BQ0tNRF81MTIJKDEgPDwgMCkKKyNkZWZpbmUgU0hfRlNJX0FDS01EXzI1NgkoMiA8PCAwKQorI2RlZmluZSBTSF9GU0lfQUNLTURfMTI4CSgzIDw8IDApCisjZGVmaW5lIFNIX0ZTSV9BQ0tNRF82NAkJKDQgPDwgMCkKKyNkZWZpbmUgU0hfRlNJX0FDS01EXzMyCQkoNSA8PCAwKQorCisjZGVmaW5lIFNIX0ZTSV9CUEZNRF9NQVNLCSgweEYgPDwgNCkKKyNkZWZpbmUgU0hfRlNJX0JQRk1EXzUxMgkoMSA8PCA0KQorI2RlZmluZSBTSF9GU0lfQlBGTURfMjU2CSgyIDw8IDQpCisjZGVmaW5lIFNIX0ZTSV9CUEZNRF8xMjgJKDMgPDwgNCkKKyNkZWZpbmUgU0hfRlNJX0JQRk1EXzY0CQkoNCA8PCA0KQorI2RlZmluZSBTSF9GU0lfQlBGTURfMzIJCSg1IDw8IDQpCisjZGVmaW5lIFNIX0ZTSV9CUEZNRF8xNgkJKDYgPDwgNCkKKwogc3RydWN0IHNoX2ZzaV9wbGF0Zm9ybV9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIHBvcnRhX2ZsYWdzOwogCXVuc2lnbmVkIGxvbmcgcG9ydGJfZmxhZ3M7CisJaW50ICgqc2V0X3JhdGUpKGludCBpc19wb3J0YSwgaW50IHJhdGUpOyAvKiBmb3IgbWFzdGVyIG1vZGUgKi8KIH07CiAKIGV4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgZnNpX3NvY19kYWlbMl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggNjZmZjRjMS4uYzVkOTk4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtMjczLDYgKzI3Myw4IEBACiAjZGVmaW5lIFNORF9TT0NfREFQTV9QT1NUX1BNRAkweDgJCS8qIGFmdGVyIHdpZGdldCBwb3dlciBkb3duICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9QUkVfUkVHCTB4MTAJLyogYmVmb3JlIGF1ZGlvIHBhdGggc2V0dXAgKi8KICNkZWZpbmUgU05EX1NPQ19EQVBNX1BPU1RfUkVHCTB4MjAJLyogYWZ0ZXIgYXVkaW8gcGF0aCBzZXR1cCAqLworI2RlZmluZSBTTkRfU09DX0RBUE1fUFJFX1BPU1RfUE1EIFwKKwkJCQkoU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCiAKIC8qIGNvbnZlbmllbmNlIGV2ZW50IHR5cGUgZGV0ZWN0aW9uICovCiAjZGVmaW5lIFNORF9TT0NfREFQTV9FVkVOVF9PTihlKQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCA2OTdlN2ZmLi42NWU5ZDAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTE3MCw2ICsxNzAsMjEgQEAKIAkuZ2V0ID0geGhhbmRsZXJfZ2V0LCAucHV0ID0geGhhbmRsZXJfcHV0LCBcCiAJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZykmeGVudW0gfQogCisjZGVmaW5lIFNPQ19ET1VCTEVfUl9TWF9UTFYoeG5hbWUsIHhyZWdfbGVmdCwgeHJlZ19yaWdodCwgeHNoaWZ0LFwKKwkJeG1pbiwgeG1heCwgdGx2X2FycmF5KSBcCit7CS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9ICh4bmFtZSksIFwKKwkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEIHwgXAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsIFwKKwkudGx2LnAgPSAodGx2X2FycmF5KSwgXAorCS5pbmZvID0gc25kX3NvY19pbmZvX3ZvbHN3XzJyX3N4LCBcCisJLmdldCA9IHNuZF9zb2NfZ2V0X3ZvbHN3XzJyX3N4LCBcCisJLnB1dCA9IHNuZF9zb2NfcHV0X3ZvbHN3XzJyX3N4LCBcCisJLnByaXZhdGVfdmFsdWUgPSAodW5zaWduZWQgbG9uZykmKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCkgXAorCQl7LnJlZyA9IHhyZWdfbGVmdCwgXAorCQkgLnJyZWcgPSB4cmVnX3JpZ2h0LCAuc2hpZnQgPSB4c2hpZnQsIFwKKwkJIC5taW4gPSB4bWluLCAubWF4ID0geG1heH0gfQorCisKIC8qCiAgKiBTaW1wbGlmaWVkIHZlcnNpb25zIG9mIGFib3ZlIG1hY3JvcywgZGVjbGFyaW5nIGEgc3RydWN0IGFuZCBjYWxjdWxhdGluZwogICogQVJSQVlfU0laRSBpbnRlcm5hbGx5CkBAIC0zMjksNiArMzQ0LDEyIEBACiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwogaW50IHNuZF9zb2NfbGltaXRfdm9sdW1lKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAljb25zdCBjaGFyICpuYW1lLCBpbnQgbWF4KTsKK2ludCBzbmRfc29jX2luZm9fdm9sc3dfMnJfc3goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbyk7CitpbnQgc25kX3NvY19nZXRfdm9sc3dfMnJfc3goc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOworaW50IHNuZF9zb2NfcHV0X3ZvbHN3XzJyX3N4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIAogLyoqCiAgKiBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiAtIERlc2NyaWJlcyBhIHBpbiB0byB1cGRhdGUgYmFzZWQgb24gamFjayBkZXRlY3Rpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdGx2MzIwZGFjMzMtcGxhdC5oIGIvaW5jbHVkZS9zb3VuZC90bHYzMjBkYWMzMy1wbGF0LmgKaW5kZXggM2Y0MjhkNS4uNmM2NjQ5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC90bHYzMjBkYWMzMy1wbGF0LmgKKysrIGIvaW5jbHVkZS9zb3VuZC90bHYzMjBkYWMzMy1wbGF0LmgKQEAgLTE1LDYgKzE1LDggQEAKIAogc3RydWN0IHRsdjMyMGRhYzMzX3BsYXRmb3JtX2RhdGEgewogCWludCBwb3dlcl9ncGlvOworCWludCBtb2RlMV9sYXRlbmN5OyAvKiBsYXRlbmN5IGNhdXNlZCBieSB0aGUgaTJjIHdyaXRlcyBpbiB1cyAqLworCWludCBhdXRvX2ZpZm9fY29uZmlnOyAvKiBGSUZPIGNvbmZpZyBiYXNlZCBvbiB0aGUgcGVyaW9kIHNpemUgKi8KIAlpbnQga2VlcF9iY2xrOwkvKiBLZWVwIHRoZSBCQ0xLIHJ1bm5pbmcgaW4gRklGTyBtb2RlcyAqLwogCXU4IGJ1cnN0X2JjbGtkaXY7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC91ZGExMzR4LmggYi9pbmNsdWRlL3NvdW5kL3VkYTEzNHguaAppbmRleCA1MDllZmIwLi5lNDc1NjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3VkYTEzNHguaAorKysgYi9pbmNsdWRlL3NvdW5kL3VkYTEzNHguaApAQCAtMTgsNiArMTgsMTggQEAKIAlzdHJ1Y3QgbDNfcGlucyBsMzsKIAl2b2lkICgqcG93ZXIpIChpbnQpOwogCWludCBtb2RlbDsKKwkvKgorCSAgQUxTQSBTT0MgdXN1YWxseSBwdXRzIHRoZSBkZXZpY2UgaW4gc3RhbmRieSBtb2RlIHdoZW4gaXQncyBub3QgdXNlZAorCSAgZm9yIHNvbWV0aW1lLiBJZiB5b3UgdW5zZXQgaXNfcG93ZXJlZF9vbl9zdGFuZGJ5IHRoZSBkcml2ZXIgd2lsbAorCSAgdHVybiBvZmYgdGhlIEFEQy9EQUMgd2hlbiB0aGlzIGNhbGxiYWNrIGlzIGludm9rZWQgYW5kIHR1cm4gaXQgYmFjaworCSAgb24gd2hlbiBuZWVkZWQuIFVuZm9ydHVuYXRlbHkgdGhpcyB3aWxsIHJlc3VsdCBpbiBhIHZlcnkgbGlnaHQgYnVtcAorCSAgKGl0IGNhbiBiZSBhdWRpYmxlIG9ubHkgd2l0aCBnb29kIGVhcnBob25lcykuIElmIHRoaXMgYm90aGVycyB5b3UKKwkgIHNldCBpc19wb3dlcmVkX29uX3N0YW5kYnksIHlvdSB3aWxsIGhhdmUgc2xpZ2h0bHkgaGlnaGVyIHBvd2VyCisJICBjb25zdW1wdGlvbi4gUGxlYXNlIG5vdGUgdGhhdCBzZW5kaW5nIHRoZSBMMyBjb21tYW5kIGZvciBBREMgaXMKKwkgIGVub3VnaCB0byBtYWtlIHRoZSBidW1wLCBzbyBpdCBkb2Vzbid0IG1ha2UgZGlmZmVyZW5jZSBpZiB5b3UKKwkgIGNvbXBsZXRlbHkgdGFrZSBvZmYgcG93ZXIgZnJvbSB0aGUgY29kZWMuCisJKi8KKwlpbnQgaXNfcG93ZXJlZF9vbl9zdGFuZGJ5OwogI2RlZmluZSBVREExMzRYX1VEQTEzNDAgMQogI2RlZmluZSBVREExMzRYX1VEQTEzNDEgMgogI2RlZmluZSBVREExMzRYX1VEQTEzNDQgMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ib290LmggYi9pbmNsdWRlL3RyYWNlL2Jvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg4ZWEwOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3RyYWNlL2Jvb3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1RSQUNFX0JPT1RfSAotI2RlZmluZSBfTElOVVhfVFJBQ0VfQk9PVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotLyoKLSAqIFN0cnVjdHVyZSB3aGljaCBkZWZpbmVzIHRoZSB0cmFjZSBvZiBhbiBpbml0Y2FsbAotICogd2hpbGUgaXQgaXMgY2FsbGVkLgotICogWW91IGRvbid0IGhhdmUgdG8gZmlsbCB0aGUgZnVuYyBmaWVsZCBzaW5jZSBpdCBpcwotICogb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHRyYWNlci4KLSAqLwotc3RydWN0IGJvb3RfdHJhY2VfY2FsbCB7Ci0JcGlkX3QJCQljYWxsZXI7Ci0JY2hhcgkJCWZ1bmNbS1NZTV9TWU1CT0xfTEVOXTsKLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyB0aGUgdHJhY2Ugb2YgYW4gaW5pdGNhbGwKLSAqIHdoaWxlIGl0IHJldHVybnMuCi0gKi8KLXN0cnVjdCBib290X3RyYWNlX3JldCB7Ci0JY2hhcgkJCWZ1bmNbS1NZTV9TWU1CT0xfTEVOXTsKLQlpbnQJCQkJcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgbG9uZwlkdXJhdGlvbjsJCS8qIG5zZWNzICovCi19OwotCi0jaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCi0vKiBBcHBlbmQgdGhlIHRyYWNlcyBvbiB0aGUgcmluZy1idWZmZXIgKi8KLWV4dGVybiB2b2lkIHRyYWNlX2Jvb3RfY2FsbChzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpidCwgaW5pdGNhbGxfdCBmbik7Ci1leHRlcm4gdm9pZCB0cmFjZV9ib290X3JldChzdHJ1Y3QgYm9vdF90cmFjZV9yZXQgKmJ0LCBpbml0Y2FsbF90IGZuKTsKLQotLyogVGVsbHMgdGhlIHRyYWNlciB0aGF0IHNtcF9wcmVfaW5pdGNhbGwgaXMgZmluaXNoZWQuCi0gKiBTbyB3ZSBjYW4gc3RhcnQgdGhlIHRyYWNpbmcKLSAqLwotZXh0ZXJuIHZvaWQgc3RhcnRfYm9vdF90cmFjZSh2b2lkKTsKLQotLyogUmVzdW1lIHRoZSB0cmFjaW5nIG9mIG90aGVyIG5lY2Vzc2FyeSBldmVudHMKLSAqIHN1Y2ggYXMgc2NoZWQgc3dpdGNoZXMKLSAqLwotZXh0ZXJuIHZvaWQgZW5hYmxlX2Jvb3RfdHJhY2Uodm9pZCk7Ci0KLS8qIFN1c3BlbmQgdGhpcyB0cmFjaW5nLiBBY3R1YWxseSwgb25seSBzY2hlZF9zd2l0Y2hlcyB0cmFjaW5nIGhhdmUKLSAqIHRvIGJlIHN1c3BlbmRlZC4gSW5pdGNhbGxzIGRvZXNuJ3QgbmVlZCBpdC4pCi0gKi8KLWV4dGVybiB2b2lkIGRpc2FibGVfYm9vdF90cmFjZSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lCi12b2lkIHRyYWNlX2Jvb3RfY2FsbChzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpidCwgaW5pdGNhbGxfdCBmbikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUKLXZvaWQgdHJhY2VfYm9vdF9yZXQoc3RydWN0IGJvb3RfdHJhY2VfcmV0ICpidCwgaW5pdGNhbGxfdCBmbikgeyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9ib290X3RyYWNlKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYm9vdF90cmFjZSh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfQk9PVF9UUkFDRVIgKi8KLQotI2VuZGlmIC8qIF9fTElOVVhfVFJBQ0VfQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaAppbmRleCBkODcwYTkxLi5kOGNlMjc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKQEAgLTI1LDggKzI1LDEwIEBACiAKIAlUUF9mYXN0X2Fzc2lnbigKIAkJX19lbnRyeS0+ZGV2CSAgID0gcnEtPnJxX2Rpc2sgPyBkaXNrX2RldnQocnEtPnJxX2Rpc2spIDogMDsKLQkJX19lbnRyeS0+c2VjdG9yICAgID0gYmxrX3BjX3JlcXVlc3QocnEpID8gMCA6IGJsa19ycV9wb3MocnEpOwotCQlfX2VudHJ5LT5ucl9zZWN0b3IgPSBibGtfcGNfcmVxdWVzdChycSkgPyAwIDogYmxrX3JxX3NlY3RvcnMocnEpOworCQlfX2VudHJ5LT5zZWN0b3IgICAgPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJCTAgOiBibGtfcnFfcG9zKHJxKTsKKwkJX19lbnRyeS0+bnJfc2VjdG9yID0gKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgPworCQkJCQkwIDogYmxrX3JxX3NlY3RvcnMocnEpOwogCQlfX2VudHJ5LT5lcnJvcnMgICAgPSBycS0+ZXJyb3JzOwogCiAJCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOwpAQCAtMTA5LDkgKzExMSwxMiBAQAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPmRldgkgICA9IHJxLT5ycV9kaXNrID8gZGlza19kZXZ0KHJxLT5ycV9kaXNrKSA6IDA7Ci0JCV9fZW50cnktPnNlY3RvciAgICA9IGJsa19wY19yZXF1ZXN0KHJxKSA/IDAgOiBibGtfcnFfcG9zKHJxKTsKLQkJX19lbnRyeS0+bnJfc2VjdG9yID0gYmxrX3BjX3JlcXVlc3QocnEpID8gMCA6IGJsa19ycV9zZWN0b3JzKHJxKTsKLQkJX19lbnRyeS0+Ynl0ZXMgICAgID0gYmxrX3BjX3JlcXVlc3QocnEpID8gYmxrX3JxX2J5dGVzKHJxKSA6IDA7CisJCV9fZW50cnktPnNlY3RvciAgICA9IChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpID8KKwkJCQkJMCA6IGJsa19ycV9wb3MocnEpOworCQlfX2VudHJ5LT5ucl9zZWN0b3IgPSAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSA/CisJCQkJCTAgOiBibGtfcnFfc2VjdG9ycyhycSk7CisJCV9fZW50cnktPmJ5dGVzICAgICA9IChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpID8KKwkJCQkJYmxrX3JxX2J5dGVzKHJxKSA6IDA7CiAKIAkJYmxrX2ZpbGxfcndic19ycShfX2VudHJ5LT5yd2JzLCBycSk7CiAJCWJsa19kdW1wX2NtZChfX2dldF9zdHIoY21kKSwgcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCmluZGV4IGYzODY1YzcuLjAxZTllMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKQEAgLTM5NSwxMSArMzk1LDEyIEBACiApOwogCiBUUkFDRV9FVkVOVChleHQ0X21iX3JlbGVhc2VfaW5vZGVfcGEsCi0JVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYywKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkgc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYywKIAkJIHN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSwKIAkJIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgdW5zaWduZWQgaW50IGNvdW50KSwKIAotCVRQX0FSR1MoYWMsIHBhLCBibG9jaywgY291bnQpLAorCVRQX0FSR1Moc2IsIGFjLCBwYSwgYmxvY2ssIGNvdW50KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCkBAIC00MTAsOCArNDExLDkgQEAKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCi0JCV9fZW50cnktPmRldgkJPSBhYy0+YWNfc2ItPnNfZGV2OwotCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+ZGV2CQk9IHNiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IChhYyAmJiBhYy0+YWNfaW5vZGUpID8gCisJCQkJCQlhYy0+YWNfaW5vZGUtPmlfaW5vIDogMDsKIAkJX19lbnRyeS0+YmxvY2sJCT0gYmxvY2s7CiAJCV9fZW50cnktPmNvdW50CQk9IGNvdW50OwogCSksCkBAIC00MjIsMTAgKzQyNCwxMSBAQAogKTsKIAogVFJBQ0VfRVZFTlQoZXh0NF9tYl9yZWxlYXNlX2dyb3VwX3BhLAotCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsCisJVFBfUFJPVE8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJIHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMsCiAJCSBzdHJ1Y3QgZXh0NF9wcmVhbGxvY19zcGFjZSAqcGEpLAogCi0JVFBfQVJHUyhhYywgcGEpLAorCVRQX0FSR1Moc2IsIGFjLCBwYSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQpAQCAtNDM2LDggKzQzOSw5IEBACiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX3NiLT5zX2RldjsKLQkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPmRldgkJPSBzYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSAoYWMgJiYgYWMtPmFjX2lub2RlKSA/CisJCQkJCQlhYy0+YWNfaW5vZGUtPmlfaW5vIDogMDsKIAkJX19lbnRyeS0+cGFfcHN0YXJ0CT0gcGEtPnBhX3BzdGFydDsKIAkJX19lbnRyeS0+cGFfbGVuCQk9IHBhLT5wYV9sZW47CiAJKSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2dmcGZsYWdzLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjE1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBUaGUgb3JkZXIgb2YgdGhlc2UgbWFza3MgaXMgaW1wb3J0YW50LiBNYXRjaGluZyBtYXNrcyB3aWxsIGJlIHNlZW4KKyAqIGZpcnN0IGFuZCB0aGUgbGVmdCBvdmVyIGZsYWdzIHdpbGwgZW5kIHVwIHNob3dpbmcgYnkgdGhlbXNlbHZlcy4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBHRlBfS0VSTkVMIGJlZm9yZSBHRlBfVVNFUiB3ZSB3aWwgZ2V0OgorICoKKyAqICBHRlBfS0VSTkVMfEdGUF9IQVJEV0FMTAorICoKKyAqIFRodXMgbW9zdCBiaXRzIHNldCBnbyBmaXJzdC4KKyAqLworI2RlZmluZSBzaG93X2dmcF9mbGFncyhmbGFncykJCQkJCQlcCisJKGZsYWdzKSA/IF9fcHJpbnRfZmxhZ3MoZmxhZ3MsICJ8IiwJCQkJXAorCXsodW5zaWduZWQgbG9uZylHRlBfSElHSFVTRVJfTU9WQUJMRSwJIkdGUF9ISUdIVVNFUl9NT1ZBQkxFIn0sIFwKKwl7KHVuc2lnbmVkIGxvbmcpR0ZQX0hJR0hVU0VSLAkJIkdGUF9ISUdIVVNFUiJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKUdGUF9VU0VSLAkJIkdGUF9VU0VSIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKUdGUF9URU1QT1JBUlksCQkiR0ZQX1RFTVBPUkFSWSJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKUdGUF9LRVJORUwsCQkiR0ZQX0tFUk5FTCJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylHRlBfTk9GUywJCSJHRlBfTk9GUyJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylHRlBfQVRPTUlDLAkJIkdGUF9BVE9NSUMifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpR0ZQX05PSU8sCQkiR0ZQX05PSU8ifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfSElHSCwJCSJHRlBfSElHSCJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9XQUlULAkJIkdGUF9XQUlUIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX0lPLAkJIkdGUF9JTyJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9DT0xELAkJIkdGUF9DT0xEIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PV0FSTiwJCSJHRlBfTk9XQVJOIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1JFUEVBVCwJCSJHRlBfUkVQRUFUIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PRkFJTCwJCSJHRlBfTk9GQUlMIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PUkVUUlksCQkiR0ZQX05PUkVUUlkifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfQ09NUCwJCSJHRlBfQ09NUCJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9aRVJPLAkJIkdGUF9aRVJPIn0sCQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX05PTUVNQUxMT0MsCSJHRlBfTk9NRU1BTExPQyJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX0hBUkRXQUxMLAkJIkdGUF9IQVJEV0FMTCJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1RISVNOT0RFLAkJIkdGUF9USElTTk9ERSJ9LAlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1JFQ0xBSU1BQkxFLAkiR0ZQX1JFQ0xBSU1BQkxFIn0sCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTU9WQUJMRSwJCSJHRlBfTU9WQUJMRSJ9CQlcCisJKSA6ICJHRlBfTk9XQUlUIgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmgKaW5kZXggM2FkY2EwYy4uYTljODdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva21lbS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ttZW0uaApAQCAtNiw0MyArNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KLQotLyoKLSAqIFRoZSBvcmRlciBvZiB0aGVzZSBtYXNrcyBpcyBpbXBvcnRhbnQuIE1hdGNoaW5nIG1hc2tzIHdpbGwgYmUgc2VlbgotICogZmlyc3QgYW5kIHRoZSBsZWZ0IG92ZXIgZmxhZ3Mgd2lsbCBlbmQgdXAgc2hvd2luZyBieSB0aGVtc2VsdmVzLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIEdGUF9LRVJORUwgYmVmb3JlIEdGUF9VU0VSIHdlIHdpbCBnZXQ6Ci0gKgotICogIEdGUF9LRVJORUx8R0ZQX0hBUkRXQUxMCi0gKgotICogVGh1cyBtb3N0IGJpdHMgc2V0IGdvIGZpcnN0LgotICovCi0jZGVmaW5lIHNob3dfZ2ZwX2ZsYWdzKGZsYWdzKQkJCQkJCVwKLQkoZmxhZ3MpID8gX19wcmludF9mbGFncyhmbGFncywgInwiLAkJCQlcCi0Jeyh1bnNpZ25lZCBsb25nKUdGUF9ISUdIVVNFUl9NT1ZBQkxFLAkiR0ZQX0hJR0hVU0VSX01PVkFCTEUifSwgXAotCXsodW5zaWduZWQgbG9uZylHRlBfSElHSFVTRVIsCQkiR0ZQX0hJR0hVU0VSIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpR0ZQX1VTRVIsCQkiR0ZQX1VTRVIifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpR0ZQX1RFTVBPUkFSWSwJCSJHRlBfVEVNUE9SQVJZIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpR0ZQX0tFUk5FTCwJCSJHRlBfS0VSTkVMIn0sCQlcCi0Jeyh1bnNpZ25lZCBsb25nKUdGUF9OT0ZTLAkJIkdGUF9OT0ZTIn0sCQlcCi0Jeyh1bnNpZ25lZCBsb25nKUdGUF9BVE9NSUMsCQkiR0ZQX0FUT01JQyJ9LAkJXAotCXsodW5zaWduZWQgbG9uZylHRlBfTk9JTywJCSJHRlBfTk9JTyJ9LAkJXAotCXsodW5zaWduZWQgbG9uZylfX0dGUF9ISUdILAkJIkdGUF9ISUdIIn0sCQlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1dBSVQsCQkiR0ZQX1dBSVQifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfSU8sCQkiR0ZQX0lPIn0sCQlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX0NPTEQsCQkiR0ZQX0NPTEQifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9XQVJOLAkJIkdGUF9OT1dBUk4ifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfUkVQRUFULAkJIkdGUF9SRVBFQVQifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9GQUlMLAkJIkdGUF9OT0ZBSUwifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9SRVRSWSwJCSJHRlBfTk9SRVRSWSJ9LAkJXAotCXsodW5zaWduZWQgbG9uZylfX0dGUF9DT01QLAkJIkdGUF9DT01QIn0sCQlcCi0Jeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1pFUk8sCQkiR0ZQX1pFUk8ifSwJCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9NRU1BTExPQywJIkdGUF9OT01FTUFMTE9DIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfSEFSRFdBTEwsCQkiR0ZQX0hBUkRXQUxMIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfVEhJU05PREUsCQkiR0ZQX1RISVNOT0RFIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfUkVDTEFJTUFCTEUsCSJHRlBfUkVDTEFJTUFCTEUifSwJXAotCXsodW5zaWduZWQgbG9uZylfX0dGUF9NT1ZBQkxFLAkJIkdGUF9NT1ZBQkxFIn0JCVwKLQkpIDogIkdGUF9OT1dBSVQiCisjaW5jbHVkZSAiZ2ZwZmxhZ3MuaCIKIAogREVDTEFSRV9FVkVOVF9DTEFTUyhrbWVtX2FsbG9jLAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2NoZWQuaAppbmRleCBiOWUxZGQ2Li45MjA4YzkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NjaGVkLmgKQEAgLTUwLDMxICs1MCw2IEBACiApOwogCiAvKgotICogVHJhY2Vwb2ludCBmb3Igd2FpdGluZyBvbiB0YXNrIHRvIHVuc2NoZWR1bGU6Ci0gKi8KLVRSQUNFX0VWRU5UKHNjaGVkX3dhaXRfdGFzaywKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0KLQlUUF9BUkdTKHApLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCi0JCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCi0JCV9fZmllbGQoCWludCwJcHJpbwkJCSkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkJX19lbnRyeS0+cGlkCT0gcC0+cGlkOwotCQlfX2VudHJ5LT5wcmlvCT0gcC0+cHJpbzsKLQkpLAotCi0JVFBfcHJpbnRrKCJjb21tPSVzIHBpZD0lZCBwcmlvPSVkIiwKLQkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8pCi0pOwotCi0vKgogICogVHJhY2Vwb2ludCBmb3Igd2FraW5nIHVwIGEgdGFzazoKICAqLwogREVDTEFSRV9FVkVOVF9DTEFTUyhzY2hlZF93YWtldXBfdGVtcGxhdGUsCkBAIC0yNDAsNiArMjE1LDEzIEBACiAJICAgICBUUF9BUkdTKHApKTsKIAogLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHdhaXRpbmcgb24gdGFzayB0byB1bnNjaGVkdWxlOgorICovCitERUZJTkVfRVZFTlQoc2NoZWRfcHJvY2Vzc190ZW1wbGF0ZSwgc2NoZWRfd2FpdF90YXNrLAorCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisJVFBfQVJHUyhwKSk7CisKKy8qCiAgKiBUcmFjZXBvaW50IGZvciBhIHdhaXRpbmcgdGFzazoKICAqLwogVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc193YWl0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RpbWVyLmgKaW5kZXggOTQ5NmI5Ni4uYzYyNDEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdGltZXIuaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy90aW1lci5oCkBAIC04LDExICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAotLyoqCi0gKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCi0gKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKLSAqLwotVFJBQ0VfRVZFTlQodGltZXJfaW5pdCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1ModGltZXJfY2xhc3MsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAogCkBAIC0zMCw2ICsyNiwxNyBAQAogKTsKIAogLyoqCisgKiB0aW1lcl9pbml0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIGluaXRpYWxpemVkCisgKiBAdGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IHRpbWVyX2xpc3QKKyAqLworREVGSU5FX0VWRU5UKHRpbWVyX2NsYXNzLCB0aW1lcl9pbml0LAorCisJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKKworCVRQX0FSR1ModGltZXIpCispOworCisvKioKICAqIHRpbWVyX3N0YXJ0IC0gY2FsbGVkIHdoZW4gdGhlIHRpbWVyIGlzIHN0YXJ0ZWQKICAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgdGltZXJfbGlzdAogICogQGV4cGlyZXM6CXRoZSB0aW1lcnMgZXhwaXJ5IHRpbWUKQEAgLTk0LDQyICsxMDEsMjIgQEAKICAqIE5PVEU6IERvIE5PVCBkZXJlZmVybmNlIHRpbWVyIGluIFRQX2Zhc3RfYXNzaWduLiBUaGUgcG9pbnRlciBtaWdodAogICogYmUgaW52YWxpZC4gV2Ugc29sZWx5IHRyYWNrIHRoZSBwb2ludGVyLgogICovCi1UUkFDRV9FVkVOVCh0aW1lcl9leHBpcmVfZXhpdCwKK0RFRklORV9FVkVOVCh0aW1lcl9jbGFzcywgdGltZXJfZXhwaXJlX2V4aXQsCiAKIAlUUF9QUk9UTyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpLAogCi0JVFBfQVJHUyh0aW1lciksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX2ZpZWxkKHZvaWQgKiwJdGltZXIJKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+dGltZXIJPSB0aW1lcjsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0aW1lcj0lcCIsIF9fZW50cnktPnRpbWVyKQorCVRQX0FSR1ModGltZXIpCiApOwogCiAvKioKICAqIHRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSB0aW1lciBpcyBjYW5jZWxlZAogICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCB0aW1lcl9saXN0CiAgKi8KLVRSQUNFX0VWRU5UKHRpbWVyX2NhbmNlbCwKK0RFRklORV9FVkVOVCh0aW1lcl9jbGFzcywgdGltZXJfY2FuY2VsLAogCiAJVFBfUFJPVE8oc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKSwKIAotCVRQX0FSR1ModGltZXIpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggdm9pZCAqLAl0aW1lcgkpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT50aW1lcgk9IHRpbWVyOwotCSksCi0KLQlUUF9wcmludGsoInRpbWVyPSVwIiwgX19lbnRyeS0+dGltZXIpCisJVFBfQVJHUyh0aW1lcikKICk7CiAKIC8qKgpAQCAtMjI0LDE0ICsyMTEsNyBAQAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fbnMoKGt0aW1lX3QpIHsgLnR2NjQgPSBfX2VudHJ5LT5ub3cgfSkpCiAgKTsKIAotLyoqCi0gKiBocnRpbWVyX2V4cGlyZV9leGl0IC0gY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBocnRpbWVyIGNhbGxiYWNrIHJldHVybnMKLSAqIEB0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgotICoKLSAqIFdoZW4gdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBocnRpbWVyX2V4cGlyZV9lbnRyeSB0cmFjZXBvaW50IHdlIGNhbgotICogZGV0ZXJtaW5lIHRoZSBydW50aW1lIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KLSAqLwotVFJBQ0VfRVZFTlQoaHJ0aW1lcl9leHBpcmVfZXhpdCwKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoaHJ0aW1lcl9jbGFzcywKIAogCVRQX1BST1RPKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKSwKIApAQCAtMjQ5LDI0ICsyMjksMjggQEAKICk7CiAKIC8qKgotICogaHJ0aW1lcl9jYW5jZWwgLSBjYWxsZWQgd2hlbiB0aGUgaHJ0aW1lciBpcyBjYW5jZWxlZAotICogQGhydGltZXI6CXBvaW50ZXIgdG8gc3RydWN0IGhydGltZXIKKyAqIGhydGltZXJfZXhwaXJlX2V4aXQgLSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGhydGltZXIgY2FsbGJhY2sgcmV0dXJucworICogQHRpbWVyOglwb2ludGVyIHRvIHN0cnVjdCBocnRpbWVyCisgKgorICogV2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGhydGltZXJfZXhwaXJlX2VudHJ5IHRyYWNlcG9pbnQgd2UgY2FuCisgKiBkZXRlcm1pbmUgdGhlIHJ1bnRpbWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICovCi1UUkFDRV9FVkVOVChocnRpbWVyX2NhbmNlbCwKK0RFRklORV9FVkVOVChocnRpbWVyX2NsYXNzLCBocnRpbWVyX2V4cGlyZV9leGl0LAogCiAJVFBfUFJPVE8oc3RydWN0IGhydGltZXIgKmhydGltZXIpLAogCi0JVFBfQVJHUyhocnRpbWVyKSwKKwlUUF9BUkdTKGhydGltZXIpCispOwogCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCggdm9pZCAqLAlocnRpbWVyCSkKLQkpLAorLyoqCisgKiBocnRpbWVyX2NhbmNlbCAtIGNhbGxlZCB3aGVuIHRoZSBocnRpbWVyIGlzIGNhbmNlbGVkCisgKiBAaHJ0aW1lcjoJcG9pbnRlciB0byBzdHJ1Y3QgaHJ0aW1lcgorICovCitERUZJTkVfRVZFTlQoaHJ0aW1lcl9jbGFzcywgaHJ0aW1lcl9jYW5jZWwsCiAKLQlUUF9mYXN0X2Fzc2lnbigKLQkJX19lbnRyeS0+aHJ0aW1lcgk9IGhydGltZXI7Ci0JKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciksCiAKLQlUUF9wcmludGsoImhydGltZXI9JXAiLCBfX2VudHJ5LT5ocnRpbWVyKQorCVRQX0FSR1MoaHJ0aW1lcikKICk7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBhYTVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgKQEAgLTAsMCArMSwyNzUgQEAKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHZtc2NhbgorCisjaWYgIWRlZmluZWQoX1RSQUNFX1ZNU0NBTl9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfVk1TQ0FOX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgImdmcGZsYWdzLmgiCisKKyNkZWZpbmUgUkVDTEFJTV9XQl9BTk9OCQkweDAwMDF1CisjZGVmaW5lIFJFQ0xBSU1fV0JfRklMRQkJMHgwMDAydQorI2RlZmluZSBSRUNMQUlNX1dCX1NZTkMJCTB4MDAwNHUKKyNkZWZpbmUgUkVDTEFJTV9XQl9BU1lOQwkweDAwMDh1CisKKyNkZWZpbmUgc2hvd19yZWNsYWltX2ZsYWdzKGZsYWdzKQkJCQlcCisJKGZsYWdzKSA/IF9fcHJpbnRfZmxhZ3MoZmxhZ3MsICJ8IiwJCQlcCisJCXtSRUNMQUlNX1dCX0FOT04sCSJSRUNMQUlNX1dCX0FOT04ifSwJXAorCQl7UkVDTEFJTV9XQl9GSUxFLAkiUkVDTEFJTV9XQl9GSUxFIn0sCVwKKwkJe1JFQ0xBSU1fV0JfU1lOQywJIlJFQ0xBSU1fV0JfU1lOQyJ9LAlcCisJCXtSRUNMQUlNX1dCX0FTWU5DLAkiUkVDTEFJTV9XQl9BU1lOQyJ9CVwKKwkJKSA6ICJSRUNMQUlNX1dCX05PTkUiCisKKyNkZWZpbmUgdHJhY2VfcmVjbGFpbV9mbGFncyhwYWdlLCBzeW5jKSAoIFwKKwkocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpID8gUkVDTEFJTV9XQl9GSUxFIDogUkVDTEFJTV9XQl9BTk9OKSB8IFwKKwkoc3luYyA9PSBQQUdFT1VUX0lPX1NZTkMgPyBSRUNMQUlNX1dCX1NZTkMgOiBSRUNMQUlNX1dCX0FTWU5DKSAgIFwKKwkpCisKK1RSQUNFX0VWRU5UKG1tX3Ztc2Nhbl9rc3dhcGRfc2xlZXAsCisKKwlUUF9QUk9UTyhpbnQgbmlkKSwKKworCVRQX0FSR1MobmlkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJbmlkCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm5pZAk9IG5pZDsKKwkpLAorCisJVFBfcHJpbnRrKCJuaWQ9JWQiLCBfX2VudHJ5LT5uaWQpCispOworCitUUkFDRV9FVkVOVChtbV92bXNjYW5fa3N3YXBkX3dha2UsCisKKwlUUF9QUk9UTyhpbnQgbmlkLCBpbnQgb3JkZXIpLAorCisJVFBfQVJHUyhuaWQsIG9yZGVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJbmlkCSkKKwkJX19maWVsZCgJaW50LAlvcmRlcgkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5uaWQJPSBuaWQ7CisJCV9fZW50cnktPm9yZGVyCT0gb3JkZXI7CisJKSwKKworCVRQX3ByaW50aygibmlkPSVkIG9yZGVyPSVkIiwgX19lbnRyeS0+bmlkLCBfX2VudHJ5LT5vcmRlcikKKyk7CisKK1RSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93YWtldXBfa3N3YXBkLAorCisJVFBfUFJPVE8oaW50IG5pZCwgaW50IHppZCwgaW50IG9yZGVyKSwKKworCVRQX0FSR1MobmlkLCB6aWQsIG9yZGVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJCW5pZAkpCisJCV9fZmllbGQoCWludCwJCXppZAkpCisJCV9fZmllbGQoCWludCwJCW9yZGVyCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm5pZAkJPSBuaWQ7CisJCV9fZW50cnktPnppZAkJPSB6aWQ7CisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCSksCisKKwlUUF9wcmludGsoIm5pZD0lZCB6aWQ9JWQgb3JkZXI9JWQiLAorCQlfX2VudHJ5LT5uaWQsCisJCV9fZW50cnktPnppZCwKKwkJX19lbnRyeS0+b3JkZXIpCispOworCitERUNMQVJFX0VWRU5UX0NMQVNTKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwKKworCVRQX1BST1RPKGludCBvcmRlciwgaW50IG1heV93cml0ZXBhZ2UsIGdmcF90IGdmcF9mbGFncyksCisKKwlUUF9BUkdTKG9yZGVyLCBtYXlfd3JpdGVwYWdlLCBnZnBfZmxhZ3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJaW50LAlvcmRlcgkJKQorCQlfX2ZpZWxkKAlpbnQsCW1heV93cml0ZXBhZ2UJKQorCQlfX2ZpZWxkKAlnZnBfdCwJZ2ZwX2ZsYWdzCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm9yZGVyCQk9IG9yZGVyOworCQlfX2VudHJ5LT5tYXlfd3JpdGVwYWdlCT0gbWF5X3dyaXRlcGFnZTsKKwkJX19lbnRyeS0+Z2ZwX2ZsYWdzCT0gZ2ZwX2ZsYWdzOworCSksCisKKwlUUF9wcmludGsoIm9yZGVyPSVkIG1heV93cml0ZXBhZ2U9JWQgZ2ZwX2ZsYWdzPSVzIiwKKwkJX19lbnRyeS0+b3JkZXIsCisJCV9fZW50cnktPm1heV93cml0ZXBhZ2UsCisJCXNob3dfZ2ZwX2ZsYWdzKF9fZW50cnktPmdmcF9mbGFncykpCispOworCitERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luX3RlbXBsYXRlLCBtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fYmVnaW4sCisKKwlUUF9QUk9UTyhpbnQgb3JkZXIsIGludCBtYXlfd3JpdGVwYWdlLCBnZnBfdCBnZnBfZmxhZ3MpLAorCisJVFBfQVJHUyhvcmRlciwgbWF5X3dyaXRlcGFnZSwgZ2ZwX2ZsYWdzKQorKTsKKworREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fYmVnaW4sCisKKwlUUF9QUk9UTyhpbnQgb3JkZXIsIGludCBtYXlfd3JpdGVwYWdlLCBnZnBfdCBnZnBfZmxhZ3MpLAorCisJVFBfQVJHUyhvcmRlciwgbWF5X3dyaXRlcGFnZSwgZ2ZwX2ZsYWdzKQorKTsKKworREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbl90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luLAorCisJVFBfUFJPVE8oaW50IG9yZGVyLCBpbnQgbWF5X3dyaXRlcGFnZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKSwKKworCVRQX0FSR1Mob3JkZXIsIG1heV93cml0ZXBhZ2UsIGdmcF9mbGFncykKKyk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwKKworCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkKSwKKworCVRQX0FSR1MobnJfcmVjbGFpbWVkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCW5yX3JlY2xhaW1lZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ucl9yZWNsYWltZWQJPSBucl9yZWNsYWltZWQ7CisJKSwKKworCVRQX3ByaW50aygibnJfcmVjbGFpbWVkPSVsdSIsIF9fZW50cnktPm5yX3JlY2xhaW1lZCkKKyk7CisKK0RFRklORV9FVkVOVChtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kX3RlbXBsYXRlLCBtbV92bXNjYW5fZGlyZWN0X3JlY2xhaW1fZW5kLAorCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQpLAorCisJVFBfQVJHUyhucl9yZWNsYWltZWQpCispOworCitERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fZW5kLAorCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQpLAorCisJVFBfQVJHUyhucl9yZWNsYWltZWQpCispOworCitERUZJTkVfRVZFTlQobW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZF90ZW1wbGF0ZSwgbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2VuZCwKKworCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkKSwKKworCVRQX0FSR1MobnJfcmVjbGFpbWVkKQorKTsKKworCitERUNMQVJFX0VWRU5UX0NMQVNTKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZV90ZW1wbGF0ZSwKKworCVRQX1BST1RPKGludCBvcmRlciwKKwkJdW5zaWduZWQgbG9uZyBucl9yZXF1ZXN0ZWQsCisJCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCwKKwkJdW5zaWduZWQgbG9uZyBucl90YWtlbiwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV90YWtlbiwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV9kaXJ0eSwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV9mYWlsZWQsCisJCWludCBpc29sYXRlX21vZGUpLAorCisJVFBfQVJHUyhvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLCBucl90YWtlbiwgbnJfbHVtcHlfdGFrZW4sIG5yX2x1bXB5X2RpcnR5LCBucl9sdW1weV9mYWlsZWQsIGlzb2xhdGVfbW9kZSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGludCwgb3JkZXIpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfcmVxdWVzdGVkKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG5yX3NjYW5uZWQpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfdGFrZW4pCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfbHVtcHlfdGFrZW4pCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfbHVtcHlfZGlydHkpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfbHVtcHlfZmFpbGVkKQorCQlfX2ZpZWxkKGludCwgaXNvbGF0ZV9tb2RlKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+b3JkZXIgPSBvcmRlcjsKKwkJX19lbnRyeS0+bnJfcmVxdWVzdGVkID0gbnJfcmVxdWVzdGVkOworCQlfX2VudHJ5LT5ucl9zY2FubmVkID0gbnJfc2Nhbm5lZDsKKwkJX19lbnRyeS0+bnJfdGFrZW4gPSBucl90YWtlbjsKKwkJX19lbnRyeS0+bnJfbHVtcHlfdGFrZW4gPSBucl9sdW1weV90YWtlbjsKKwkJX19lbnRyeS0+bnJfbHVtcHlfZGlydHkgPSBucl9sdW1weV9kaXJ0eTsKKwkJX19lbnRyeS0+bnJfbHVtcHlfZmFpbGVkID0gbnJfbHVtcHlfZmFpbGVkOworCQlfX2VudHJ5LT5pc29sYXRlX21vZGUgPSBpc29sYXRlX21vZGU7CisJKSwKKworCVRQX3ByaW50aygiaXNvbGF0ZV9tb2RlPSVkIG9yZGVyPSVkIG5yX3JlcXVlc3RlZD0lbHUgbnJfc2Nhbm5lZD0lbHUgbnJfdGFrZW49JWx1IGNvbnRpZ190YWtlbj0lbHUgY29udGlnX2RpcnR5PSVsdSBjb250aWdfZmFpbGVkPSVsdSIsCisJCV9fZW50cnktPmlzb2xhdGVfbW9kZSwKKwkJX19lbnRyeS0+b3JkZXIsCisJCV9fZW50cnktPm5yX3JlcXVlc3RlZCwKKwkJX19lbnRyeS0+bnJfc2Nhbm5lZCwKKwkJX19lbnRyeS0+bnJfdGFrZW4sCisJCV9fZW50cnktPm5yX2x1bXB5X3Rha2VuLAorCQlfX2VudHJ5LT5ucl9sdW1weV9kaXJ0eSwKKwkJX19lbnRyeS0+bnJfbHVtcHlfZmFpbGVkKQorKTsKKworREVGSU5FX0VWRU5UKG1tX3Ztc2Nhbl9scnVfaXNvbGF0ZV90ZW1wbGF0ZSwgbW1fdm1zY2FuX2xydV9pc29sYXRlLAorCisJVFBfUFJPVE8oaW50IG9yZGVyLAorCQl1bnNpZ25lZCBsb25nIG5yX3JlcXVlc3RlZCwKKwkJdW5zaWduZWQgbG9uZyBucl9zY2FubmVkLAorCQl1bnNpZ25lZCBsb25nIG5yX3Rha2VuLAorCQl1bnNpZ25lZCBsb25nIG5yX2x1bXB5X3Rha2VuLAorCQl1bnNpZ25lZCBsb25nIG5yX2x1bXB5X2RpcnR5LAorCQl1bnNpZ25lZCBsb25nIG5yX2x1bXB5X2ZhaWxlZCwKKwkJaW50IGlzb2xhdGVfbW9kZSksCisKKwlUUF9BUkdTKG9yZGVyLCBucl9yZXF1ZXN0ZWQsIG5yX3NjYW5uZWQsIG5yX3Rha2VuLCBucl9sdW1weV90YWtlbiwgbnJfbHVtcHlfZGlydHksIG5yX2x1bXB5X2ZhaWxlZCwgaXNvbGF0ZV9tb2RlKQorCispOworCitERUZJTkVfRVZFTlQobW1fdm1zY2FuX2xydV9pc29sYXRlX3RlbXBsYXRlLCBtbV92bXNjYW5fbWVtY2dfaXNvbGF0ZSwKKworCVRQX1BST1RPKGludCBvcmRlciwKKwkJdW5zaWduZWQgbG9uZyBucl9yZXF1ZXN0ZWQsCisJCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCwKKwkJdW5zaWduZWQgbG9uZyBucl90YWtlbiwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV90YWtlbiwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV9kaXJ0eSwKKwkJdW5zaWduZWQgbG9uZyBucl9sdW1weV9mYWlsZWQsCisJCWludCBpc29sYXRlX21vZGUpLAorCisJVFBfQVJHUyhvcmRlciwgbnJfcmVxdWVzdGVkLCBucl9zY2FubmVkLCBucl90YWtlbiwgbnJfbHVtcHlfdGFrZW4sIG5yX2x1bXB5X2RpcnR5LCBucl9sdW1weV9mYWlsZWQsIGlzb2xhdGVfbW9kZSkKKworKTsKKworVFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlcGFnZSwKKworCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgcmVjbGFpbV9mbGFncyksCisKKwlUUF9BUkdTKHBhZ2UsIHJlY2xhaW1fZmxhZ3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgcGFnZSAqLCBwYWdlKQorCQlfX2ZpZWxkKGludCwgcmVjbGFpbV9mbGFncykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnBhZ2UgPSBwYWdlOworCQlfX2VudHJ5LT5yZWNsYWltX2ZsYWdzID0gcmVjbGFpbV9mbGFnczsKKwkpLAorCisJVFBfcHJpbnRrKCJwYWdlPSVwIHBmbj0lbHUgZmxhZ3M9JXMiLAorCQlfX2VudHJ5LT5wYWdlLAorCQlwYWdlX3RvX3BmbihfX2VudHJ5LT5wYWdlKSwKKwkJc2hvd19yZWNsYWltX2ZsYWdzKF9fZW50cnktPnJlY2xhaW1fZmxhZ3MpKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9WTVNDQU5fSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2Yzk3NDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jdW5kZWYgVFJBQ0VfU1lTVEVNCi0jZGVmaW5lIFRSQUNFX1NZU1RFTSB3b3JrcXVldWUKLQotI2lmICFkZWZpbmVkKF9UUkFDRV9XT1JLUVVFVUVfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKLSNkZWZpbmUgX1RSQUNFX1dPUktRVUVVRV9ICi0KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KLQotREVDTEFSRV9FVkVOVF9DTEFTUyh3b3JrcXVldWUsCi0KLQlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSwKLQotCVRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoY2hhciwJCXRocmVhZF9jb21tLAlUQVNLX0NPTU1fTEVOKQotCQlfX2ZpZWxkKHBpZF90LAkJdGhyZWFkX3BpZCkKLQkJX19maWVsZCh3b3JrX2Z1bmNfdCwJZnVuYykKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCW1lbWNweShfX2VudHJ5LT50aHJlYWRfY29tbSwgd3FfdGhyZWFkLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKLQkJX19lbnRyeS0+dGhyZWFkX3BpZAk9IHdxX3RocmVhZC0+cGlkOwotCQlfX2VudHJ5LT5mdW5jCQk9IHdvcmstPmZ1bmM7Ci0JKSwKLQotCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCi0JCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCi0pOwotCi1ERUZJTkVfRVZFTlQod29ya3F1ZXVlLCB3b3JrcXVldWVfaW5zZXJ0aW9uLAotCi0JVFBfUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayksCi0KLQlUUF9BUkdTKHdxX3RocmVhZCwgd29yaykKLSk7Ci0KLURFRklORV9FVkVOVCh3b3JrcXVldWUsIHdvcmtxdWV1ZV9leGVjdXRpb24sCi0KLQlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSwKLQotCVRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKQotKTsKLQotLyogVHJhY2UgdGhlIGNyZWF0aW9uIG9mIG9uZSB3b3JrcXVldWUgdGhyZWFkIG9uIGEgY3B1ICovCi1UUkFDRV9FVkVOVCh3b3JrcXVldWVfY3JlYXRpb24sCi0KLQlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgaW50IGNwdSksCi0KLQlUUF9BUkdTKHdxX3RocmVhZCwgY3B1KSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoY2hhciwJdGhyZWFkX2NvbW0sCVRBU0tfQ09NTV9MRU4pCi0JCV9fZmllbGQocGlkX3QsCXRocmVhZF9waWQpCi0JCV9fZmllbGQoaW50LAljcHUpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQltZW1jcHkoX19lbnRyeS0+dGhyZWFkX2NvbW0sIHdxX3RocmVhZC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JCV9fZW50cnktPnRocmVhZF9waWQJPSB3cV90aHJlYWQtPnBpZDsKLQkJX19lbnRyeS0+Y3B1CQk9IGNwdTsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgY3B1PSVkIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCi0JCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmNwdSkKLSk7Ci0KLVRSQUNFX0VWRU5UKHdvcmtxdWV1ZV9kZXN0cnVjdGlvbiwKLQotCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkKSwKLQotCVRQX0FSR1Mod3FfdGhyZWFkKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCV9fYXJyYXkoY2hhciwJdGhyZWFkX2NvbW0sCVRBU0tfQ09NTV9MRU4pCi0JCV9fZmllbGQocGlkX3QsCXRocmVhZF9waWQpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQltZW1jcHkoX19lbnRyeS0+dGhyZWFkX2NvbW0sIHdxX3RocmVhZC0+Y29tbSwgVEFTS19DT01NX0xFTik7Ci0JCV9fZW50cnktPnRocmVhZF9waWQJPSB3cV90aHJlYWQtPnBpZDsKLQkpLAotCi0JVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwgX19lbnRyeS0+dGhyZWFkX3BpZCkKLSk7Ci0KLSNlbmRpZiAvKiBfVFJBQ0VfV09SS1FVRVVFX0ggKi8KLQotLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCi0jaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dyaXRlYmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNDVmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy93cml0ZWJhY2suaApAQCAtMCwwICsxLDE1OSBAQAorI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gd3JpdGViYWNrCisKKyNpZiAhZGVmaW5lZChfVFJBQ0VfV1JJVEVCQUNLX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9XUklURUJBQ0tfSAorCisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKworc3RydWN0IHdiX3dyaXRlYmFja193b3JrOworCitERUNMQVJFX0VWRU5UX0NMQVNTKHdyaXRlYmFja193b3JrX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayAqd29yayksCisJVFBfQVJHUyhiZGksIHdvcmspLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoY2hhciwgbmFtZSwgMzIpCisJCV9fZmllbGQobG9uZywgbnJfcGFnZXMpCisJCV9fZmllbGQoZGV2X3QsIHNiX2RldikKKwkJX19maWVsZChpbnQsIHN5bmNfbW9kZSkKKwkJX19maWVsZChpbnQsIGZvcl9rdXBkYXRlKQorCQlfX2ZpZWxkKGludCwgcmFuZ2VfY3ljbGljKQorCQlfX2ZpZWxkKGludCwgZm9yX2JhY2tncm91bmQpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJc3RybmNweShfX2VudHJ5LT5uYW1lLCBkZXZfbmFtZShiZGktPmRldiksIDMyKTsKKwkJX19lbnRyeS0+bnJfcGFnZXMgPSB3b3JrLT5ucl9wYWdlczsKKwkJX19lbnRyeS0+c2JfZGV2ID0gd29yay0+c2IgPyB3b3JrLT5zYi0+c19kZXYgOiAwOworCQlfX2VudHJ5LT5zeW5jX21vZGUgPSB3b3JrLT5zeW5jX21vZGU7CisJCV9fZW50cnktPmZvcl9rdXBkYXRlID0gd29yay0+Zm9yX2t1cGRhdGU7CisJCV9fZW50cnktPnJhbmdlX2N5Y2xpYyA9IHdvcmstPnJhbmdlX2N5Y2xpYzsKKwkJX19lbnRyeS0+Zm9yX2JhY2tncm91bmQJPSB3b3JrLT5mb3JfYmFja2dyb3VuZDsKKwkpLAorCVRQX3ByaW50aygiYmRpICVzOiBzYl9kZXYgJWQ6JWQgbnJfcGFnZXM9JWxkIHN5bmNfbW9kZT0lZCAiCisJCSAgImt1cGRhdGU9JWQgcmFuZ2VfY3ljbGljPSVkIGJhY2tncm91bmQ9JWQiLAorCQkgIF9fZW50cnktPm5hbWUsCisJCSAgTUFKT1IoX19lbnRyeS0+c2JfZGV2KSwgTUlOT1IoX19lbnRyeS0+c2JfZGV2KSwKKwkJICBfX2VudHJ5LT5ucl9wYWdlcywKKwkJICBfX2VudHJ5LT5zeW5jX21vZGUsCisJCSAgX19lbnRyeS0+Zm9yX2t1cGRhdGUsCisJCSAgX19lbnRyeS0+cmFuZ2VfY3ljbGljLAorCQkgIF9fZW50cnktPmZvcl9iYWNrZ3JvdW5kCisJKQorKTsKKyNkZWZpbmUgREVGSU5FX1dSSVRFQkFDS19XT1JLX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh3cml0ZWJhY2tfd29ya19jbGFzcywgbmFtZSwgXAorCVRQX1BST1RPKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCB3Yl93cml0ZWJhY2tfd29yayAqd29yayksIFwKKwlUUF9BUkdTKGJkaSwgd29yaykpCitERUZJTkVfV1JJVEVCQUNLX1dPUktfRVZFTlQod3JpdGViYWNrX25vdGhyZWFkKTsKK0RFRklORV9XUklURUJBQ0tfV09SS19FVkVOVCh3cml0ZWJhY2tfcXVldWUpOworREVGSU5FX1dSSVRFQkFDS19XT1JLX0VWRU5UKHdyaXRlYmFja19leGVjKTsKKworVFJBQ0VfRVZFTlQod3JpdGViYWNrX3BhZ2VzX3dyaXR0ZW4sCisJVFBfUFJPVE8obG9uZyBwYWdlc193cml0dGVuKSwKKwlUUF9BUkdTKHBhZ2VzX3dyaXR0ZW4pLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQobG9uZywJCXBhZ2VzKQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnBhZ2VzCQk9IHBhZ2VzX3dyaXR0ZW47CisJKSwKKwlUUF9wcmludGsoIiVsZCIsIF9fZW50cnktPnBhZ2VzKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyh3cml0ZWJhY2tfY2xhc3MsCisJVFBfUFJPVE8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSksCisJVFBfQVJHUyhiZGkpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoY2hhciwgbmFtZSwgMzIpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJc3RybmNweShfX2VudHJ5LT5uYW1lLCBkZXZfbmFtZShiZGktPmRldiksIDMyKTsKKwkpLAorCVRQX3ByaW50aygiYmRpICVzIiwKKwkJICBfX2VudHJ5LT5uYW1lCisJKQorKTsKKyNkZWZpbmUgREVGSU5FX1dSSVRFQkFDS19FVkVOVChuYW1lKSBcCitERUZJTkVfRVZFTlQod3JpdGViYWNrX2NsYXNzLCBuYW1lLCBcCisJVFBfUFJPVE8oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSksIFwKKwlUUF9BUkdTKGJkaSkpCisKK0RFRklORV9XUklURUJBQ0tfRVZFTlQod3JpdGViYWNrX25vd29yayk7CitERUZJTkVfV1JJVEVCQUNLX0VWRU5UKHdyaXRlYmFja193YWtlX3RocmVhZCk7CitERUZJTkVfV1JJVEVCQUNLX0VWRU5UKHdyaXRlYmFja193YWtlX2Zvcmtlcl90aHJlYWQpOworREVGSU5FX1dSSVRFQkFDS19FVkVOVCh3cml0ZWJhY2tfYmRpX3JlZ2lzdGVyKTsKK0RFRklORV9XUklURUJBQ0tfRVZFTlQod3JpdGViYWNrX2JkaV91bnJlZ2lzdGVyKTsKK0RFRklORV9XUklURUJBQ0tfRVZFTlQod3JpdGViYWNrX3RocmVhZF9zdGFydCk7CitERUZJTkVfV1JJVEVCQUNLX0VWRU5UKHdyaXRlYmFja190aHJlYWRfc3RvcCk7CisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1Mod2JjX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKSwKKwlUUF9BUkdTKHdiYywgYmRpKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KGNoYXIsIG5hbWUsIDMyKQorCQlfX2ZpZWxkKGxvbmcsIG5yX3RvX3dyaXRlKQorCQlfX2ZpZWxkKGxvbmcsIHBhZ2VzX3NraXBwZWQpCisJCV9fZmllbGQoaW50LCBzeW5jX21vZGUpCisJCV9fZmllbGQoaW50LCBub25ibG9ja2luZykKKwkJX19maWVsZChpbnQsIGVuY291bnRlcmVkX2Nvbmdlc3Rpb24pCisJCV9fZmllbGQoaW50LCBmb3Jfa3VwZGF0ZSkKKwkJX19maWVsZChpbnQsIGZvcl9iYWNrZ3JvdW5kKQorCQlfX2ZpZWxkKGludCwgZm9yX3JlY2xhaW0pCisJCV9fZmllbGQoaW50LCByYW5nZV9jeWNsaWMpCisJCV9fZmllbGQoaW50LCBtb3JlX2lvKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIG9sZGVyX3RoYW5fdGhpcykKKwkJX19maWVsZChsb25nLCByYW5nZV9zdGFydCkKKwkJX19maWVsZChsb25nLCByYW5nZV9lbmQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlzdHJuY3B5KF9fZW50cnktPm5hbWUsIGRldl9uYW1lKGJkaS0+ZGV2KSwgMzIpOworCQlfX2VudHJ5LT5ucl90b193cml0ZQk9IHdiYy0+bnJfdG9fd3JpdGU7CisJCV9fZW50cnktPnBhZ2VzX3NraXBwZWQJPSB3YmMtPnBhZ2VzX3NraXBwZWQ7CisJCV9fZW50cnktPnN5bmNfbW9kZQk9IHdiYy0+c3luY19tb2RlOworCQlfX2VudHJ5LT5mb3Jfa3VwZGF0ZQk9IHdiYy0+Zm9yX2t1cGRhdGU7CisJCV9fZW50cnktPmZvcl9iYWNrZ3JvdW5kCT0gd2JjLT5mb3JfYmFja2dyb3VuZDsKKwkJX19lbnRyeS0+Zm9yX3JlY2xhaW0JPSB3YmMtPmZvcl9yZWNsYWltOworCQlfX2VudHJ5LT5yYW5nZV9jeWNsaWMJPSB3YmMtPnJhbmdlX2N5Y2xpYzsKKwkJX19lbnRyeS0+bW9yZV9pbwk9IHdiYy0+bW9yZV9pbzsKKwkJX19lbnRyeS0+b2xkZXJfdGhhbl90aGlzID0gd2JjLT5vbGRlcl90aGFuX3RoaXMgPworCQkJCQkJKndiYy0+b2xkZXJfdGhhbl90aGlzIDogMDsKKwkJX19lbnRyeS0+cmFuZ2Vfc3RhcnQJPSAobG9uZyl3YmMtPnJhbmdlX3N0YXJ0OworCQlfX2VudHJ5LT5yYW5nZV9lbmQJPSAobG9uZyl3YmMtPnJhbmdlX2VuZDsKKwkpLAorCisJVFBfcHJpbnRrKCJiZGkgJXM6IHRvd3J0PSVsZCBza2lwPSVsZCBtb2RlPSVkIGt1cGQ9JWQgIgorCQkiYmdyZD0lZCByZWNsbT0lZCBjeWNsaWM9JWQgbW9yZT0lZCBvbGRlcj0weCVseCAiCisJCSJzdGFydD0weCVseCBlbmQ9MHglbHgiLAorCQlfX2VudHJ5LT5uYW1lLAorCQlfX2VudHJ5LT5ucl90b193cml0ZSwKKwkJX19lbnRyeS0+cGFnZXNfc2tpcHBlZCwKKwkJX19lbnRyeS0+c3luY19tb2RlLAorCQlfX2VudHJ5LT5mb3Jfa3VwZGF0ZSwKKwkJX19lbnRyeS0+Zm9yX2JhY2tncm91bmQsCisJCV9fZW50cnktPmZvcl9yZWNsYWltLAorCQlfX2VudHJ5LT5yYW5nZV9jeWNsaWMsCisJCV9fZW50cnktPm1vcmVfaW8sCisJCV9fZW50cnktPm9sZGVyX3RoYW5fdGhpcywKKwkJX19lbnRyeS0+cmFuZ2Vfc3RhcnQsCisJCV9fZW50cnktPnJhbmdlX2VuZCkKKykKKworI2RlZmluZSBERUZJTkVfV0JDX0VWRU5UKG5hbWUpIFwKK0RFRklORV9FVkVOVCh3YmNfY2xhc3MsIG5hbWUsIFwKKwlUUF9QUk9UTyhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSksIFwKKwlUUF9BUkdTKHdiYywgYmRpKSkKK0RFRklORV9XQkNfRVZFTlQod2JjX3dyaXRlYmFja19zdGFydCk7CitERUZJTkVfV0JDX0VWRU5UKHdiY193cml0ZWJhY2tfd3JpdHRlbik7CitERUZJTkVfV0JDX0VWRU5UKHdiY193cml0ZWJhY2tfd2FpdCk7CitERUZJTkVfV0JDX0VWRU5UKHdiY19iYWxhbmNlX2RpcnR5X3N0YXJ0KTsKK0RFRklORV9XQkNfRVZFTlQod2JjX2JhbGFuY2VfZGlydHlfd3JpdHRlbik7CitERUZJTkVfV0JDX0VWRU5UKHdiY19iYWxhbmNlX2RpcnR5X3dhaXQpOworREVGSU5FX1dCQ19FVkVOVCh3YmNfd3JpdGVwYWdlKTsKKworI2VuZGlmIC8qIF9UUkFDRV9XUklURUJBQ0tfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmggYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCmluZGV4IDVhNjQ5MDUuLmE5Mzc3YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaApAQCAtNzUsMTUgKzc1LDEyIEBACiAjZGVmaW5lIERFRklORV9FVkVOVF9QUklOVCh0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHByaW50KQlcCiAJREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBuYW1lLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCiAKLSN1bmRlZiBfX2NwcGFyZwotI2RlZmluZSBfX2NwcGFyZyhhcmcuLi4pIGFyZwotCiAvKiBDYWxsYmFja3MgYXJlIG1lYW5pbmdsZXNzIHRvIGZ0cmFjZS4gKi8KICN1bmRlZiBUUkFDRV9FVkVOVF9GTgogI2RlZmluZSBUUkFDRV9FVkVOVF9GTihuYW1lLCBwcm90bywgYXJncywgdHN0cnVjdCwJCQlcCiAJCWFzc2lnbiwgcHJpbnQsIHJlZywgdW5yZWcpCQkJCVwKLQlUUkFDRV9FVkVOVChuYW1lLCBfX2NwcGFyZyhwcm90byksIF9fY3BwYXJnKGFyZ3MpLAkJXAotCQlfX2NwcGFyZyh0c3RydWN0KSwgX19jcHBhcmcoYXNzaWduKSwgX19jcHBhcmcocHJpbnQpKQlcCisJVFJBQ0VfRVZFTlQobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpLAkJCVwKKwkJUEFSQU1TKHRzdHJ1Y3QpLCBQQVJBTVMoYXNzaWduKSwgUEFSQU1TKHByaW50KSkJCVwKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKQEAgLTE0NSw3ICsxNDIsNyBAQAogICoJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAgKglzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4gKmZpZWxkOyA8LS0gZGVmaW5lZCBpbiBzdGFnZSAxCiAgKglzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwotICoJc3RydWN0IHRyYWNlX3NlcSAqcDsKKyAqCXN0cnVjdCB0cmFjZV9zZXEgKnAgPSAmaXRlci0+dG1wX3NlcTsKICAqCWludCByZXQ7CiAgKgogICoJZW50cnkgPSBpdGVyLT5lbnQ7CkBAIC0xNTcsMTIgKzE1NCwxMCBAQAogICoKICAqCWZpZWxkID0gKHR5cGVvZihmaWVsZCkpZW50cnk7CiAgKgotICoJcCA9ICZnZXRfY3B1X3ZhcihmdHJhY2VfZXZlbnRfc2VxKTsKICAqCXRyYWNlX3NlcV9pbml0KHApOwogICoJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICIsIDxjYWxsPik7CiAgKglpZiAocmV0KQogICoJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgPFRQX3ByaW50az4gIlxuIik7Ci0gKglwdXRfY3B1KCk7CiAgKglpZiAoIXJldCkKICAqCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAgKgpAQCAtMjE2LDcgKzIxMSw3IEBACiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CQkJCVwKIAlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgKmZpZWxkOwkJCQlcCiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsJCQkJCVwKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpwOwkJCQkJCVwKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpwID0gJml0ZXItPnRtcF9zZXE7CQkJCVwKIAlpbnQgcmV0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJZXZlbnQgPSBjb250YWluZXJfb2YodHJhY2VfZXZlbnQsIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCwJXApAQCAtMjMxLDEyICsyMjYsMTAgQEAKIAkJCQkJCQkJCVwKIAlmaWVsZCA9ICh0eXBlb2YoZmllbGQpKWVudHJ5OwkJCQkJXAogCQkJCQkJCQkJXAotCXAgPSAmZ2V0X2NwdV92YXIoZnRyYWNlX2V2ZW50X3NlcSk7CQkJCVwKIAl0cmFjZV9zZXFfaW5pdChwKTsJCQkJCQlcCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICIsIGV2ZW50LT5uYW1lKTsJCQlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIHByaW50KTsJCQlcCi0JcHV0X2NwdSgpOwkJCQkJCQlcCiAJaWYgKCFyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJCQlcCiAJCQkJCQkJCQlcCkBAIC0yNTUsNyArMjQ4LDcgQEAKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsJCQkJXAogCXN0cnVjdCBmdHJhY2VfcmF3XyMjdGVtcGxhdGUgKmZpZWxkOwkJCQlcCiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsJCQkJCVwKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpwOwkJCQkJCVwKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpwID0gJml0ZXItPnRtcF9zZXE7CQkJCVwKIAlpbnQgcmV0OwkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJZW50cnkgPSBpdGVyLT5lbnQ7CQkJCQkJXApAQCAtMjY3LDEyICsyNjAsMTAgQEAKIAkJCQkJCQkJCVwKIAlmaWVsZCA9ICh0eXBlb2YoZmllbGQpKWVudHJ5OwkJCQkJXAogCQkJCQkJCQkJXAotCXAgPSAmZ2V0X2NwdV92YXIoZnRyYWNlX2V2ZW50X3NlcSk7CQkJCVwKIAl0cmFjZV9zZXFfaW5pdChwKTsJCQkJCQlcCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXM6ICIsICNjYWxsKTsJCQlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsIHByaW50KTsJCQlcCi0JcHV0X2NwdSgpOwkJCQkJCQlcCiAJaWYgKCFyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwkJCQlcCiAJCQkJCQkJCQlcCkBAIC00MzksNiArNDMwLDcgQEAKICAqCS5maWVsZHMJCQk9IExJU1RfSEVBRF9JTklUKGV2ZW50X2NsYXNzXyMjY2FsbC5maWVsZHMpLAogICoJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAogICoJLnByb2JlCQkJPSBmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCwKKyAqCS5yZWcJCQk9IGZ0cmFjZV9ldmVudF9yZWcsCiAgKiB9OwogICoKICAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCkBAIC01NjcsNiArNTU5LDcgQEAKIAkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc18jI2NhbGwuZmllbGRzKSxcCiAJLnJhd19pbml0CQk9IHRyYWNlX2V2ZW50X3Jhd19pbml0LAkJCVwKIAkucHJvYmUJCQk9IGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsLAkJXAorCS5yZWcJCQk9IGZ0cmFjZV9ldmVudF9yZWcsCQkJXAogCV9UUkFDRV9QRVJGX0lOSVQoY2FsbCkJCQkJCQlcCiB9OwogCkBAIC03MDUsNyArNjk4LDcgQEAKIAlpbnQgX19kYXRhX3NpemU7CQkJCQkJXAogCWludCByY3R4OwkJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmX19yZWdzLCAxKTsJCQkJXAorCXBlcmZfZmV0Y2hfY2FsbGVyX3JlZ3MoJl9fcmVncyk7CQkJCVwKIAkJCQkJCQkJCVwKIAlfX2RhdGFfc2l6ZSA9IGZ0cmFjZV9nZXRfb2Zmc2V0c18jI2NhbGwoJl9fZGF0YV9vZmZzZXRzLCBhcmdzKTsgXAogCV9fZW50cnlfc2l6ZSA9IEFMSUdOKF9fZGF0YV9zaXplICsgc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodTMyKSxcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3N5c2NhbGwuaCBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCmluZGV4IDI1N2UwODkuLjMxOTY2YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc3lzY2FsbC5oCkBAIC0yNiw3ICsyNiw2IEBACiAJY29uc3QgY2hhcgkqKnR5cGVzOwogCWNvbnN0IGNoYXIJKiphcmdzOwogCXN0cnVjdCBsaXN0X2hlYWQgZW50ZXJfZmllbGRzOwotCXN0cnVjdCBsaXN0X2hlYWQgZXhpdF9maWVsZHM7CiAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmVudGVyX2V2ZW50OwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqZXhpdF9ldmVudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbWlwaV9kaXNwbGF5LmggYi9pbmNsdWRlL3ZpZGVvL21pcGlfZGlzcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2M4Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3ZpZGVvL21pcGlfZGlzcGxheS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogRGVmaW5lcyBmb3IgTW9iaWxlIEluZHVzdHJ5IFByb2Nlc3NvciBJbnRlcmZhY2UgKE1JUEkoUikpCisgKiBEaXNwbGF5IFdvcmtpbmcgR3JvdXAgc3RhbmRhcmRzOiBEU0ksIERDUywgREJJLCBEUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgTUlQSV9ESVNQTEFZX0gKKyNkZWZpbmUgTUlQSV9ESVNQTEFZX0gKKworLyogTUlQSSBEU0kgUHJvY2Vzc29yLXRvLVBlcmlwaGVyYWwgdHJhbnNhY3Rpb24gdHlwZXMgKi8KK2VudW0geworCU1JUElfRFNJX1ZfU1lOQ19TVEFSVAkJCQk9IDB4MDEsCisJTUlQSV9EU0lfVl9TWU5DX0VORAkJCQk9IDB4MTEsCisJTUlQSV9EU0lfSF9TWU5DX1NUQVJUCQkJCT0gMHgyMSwKKwlNSVBJX0RTSV9IX1NZTkNfRU5ECQkJCT0gMHgzMSwKKworCU1JUElfRFNJX0NPTE9SX01PREVfT0ZGCQkJCT0gMHgwMiwKKwlNSVBJX0RTSV9DT0xPUl9NT0RFX09OCQkJCT0gMHgxMiwKKwlNSVBJX0RTSV9TSFVURE9XTl9QRVJJUEhFUkFMCQkJPSAweDIyLAorCU1JUElfRFNJX1RVUk5fT05fUEVSSVBIRVJBTAkJCT0gMHgzMiwKKworCU1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMF9QQVJBTQkJPSAweDAzLAorCU1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMV9QQVJBTQkJPSAweDEzLAorCU1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMl9QQVJBTQkJPSAweDIzLAorCisJTUlQSV9EU0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTQkJPSAweDA0LAorCU1JUElfRFNJX0dFTkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0JCT0gMHgxNCwKKwlNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFNCQk9IDB4MjQsCisKKwlNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEUJCQk9IDB4MDUsCisJTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFX1BBUkFNCQkJPSAweDE1LAorCisJTUlQSV9EU0lfRENTX1JFQUQJCQkJPSAweDA2LAorCisJTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFCQk9IDB4MzcsCisKKwlNSVBJX0RTSV9FTkRfT0ZfVFJBTlNNSVNTSU9OCQkJPSAweDA4LAorCisJTUlQSV9EU0lfTlVMTF9QQUNLRVQJCQkJPSAweDA5LAorCU1JUElfRFNJX0JMQU5LSU5HX1BBQ0tFVAkJCT0gMHgxOSwKKwlNSVBJX0RTSV9HRU5FUklDX0xPTkdfV1JJVEUJCQk9IDB4MjksCisJTUlQSV9EU0lfRENTX0xPTkdfV1JJVEUJCQkJPSAweDM5LAorCisJTUlQSV9EU0lfTE9PU0VMWV9QQUNLRURfUElYRUxfU1RSRUFNX1lDQkNSMjAJPSAweDBjLAorCU1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fWUNCQ1IyNAkJPSAweDFjLAorCU1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fWUNCQ1IxNgkJPSAweDJjLAorCisJTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8zMAkJCT0gMHgwZCwKKwlNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzM2CQkJPSAweDFkLAorCU1JUElfRFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fWUNCQ1IxMgkJPSAweDNkLAorCisJTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8xNgkJCT0gMHgwZSwKKwlNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzE4CQkJPSAweDFlLAorCU1JUElfRFNJX1BJWEVMX1NUUkVBTV8zQllURV8xOAkJCT0gMHgyZSwKKwlNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzI0CQkJPSAweDNlLAorfTsKKworLyogTUlQSSBEU0kgUGVyaXBoZXJhbC10by1Qcm9jZXNzb3IgdHJhbnNhY3Rpb24gdHlwZXMgKi8KK2VudW0geworCU1JUElfRFNJX1JYX0FDS05PV0xFREdFX0FORF9FUlJPUl9SRVBPUlQJPSAweDAyLAorCU1JUElfRFNJX1JYX0VORF9PRl9UUkFOU01JU1NJT04JCQk9IDB4MDgsCisJTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFCT0gMHgxMSwKKwlNSVBJX0RTSV9SWF9HRU5FUklDX1NIT1JUX1JFQURfUkVTUE9OU0VfMkJZVEUJPSAweDEyLAorCU1JUElfRFNJX1JYX0dFTkVSSUNfTE9OR19SRUFEX1JFU1BPTlNFCQk9IDB4MWEsCisJTUlQSV9EU0lfUlhfRENTX0xPTkdfUkVBRF9SRVNQT05TRQkJPSAweDFjLAorCU1JUElfRFNJX1JYX0RDU19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFCT0gMHgyMSwKKwlNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8yQllURQk9IDB4MjIsCit9OworCisvKiBNSVBJIERDUyBjb21tYW5kcyAqLworZW51bSB7CisJTUlQSV9EQ1NfTk9QCQkJPSAweDAwLAorCU1JUElfRENTX1NPRlRfUkVTRVQJCT0gMHgwMSwKKwlNSVBJX0RDU19HRVRfRElTUExBWV9JRAkJPSAweDA0LAorCU1JUElfRENTX0dFVF9SRURfQ0hBTk5FTAk9IDB4MDYsCisJTUlQSV9EQ1NfR0VUX0dSRUVOX0NIQU5ORUwJPSAweDA3LAorCU1JUElfRENTX0dFVF9CTFVFX0NIQU5ORUwJPSAweDA4LAorCU1JUElfRENTX0dFVF9ESVNQTEFZX1NUQVRVUwk9IDB4MDksCisJTUlQSV9EQ1NfR0VUX1BPV0VSX01PREUJCT0gMHgwQSwKKwlNSVBJX0RDU19HRVRfQUREUkVTU19NT0RFCT0gMHgwQiwKKwlNSVBJX0RDU19HRVRfUElYRUxfRk9STUFUCT0gMHgwQywKKwlNSVBJX0RDU19HRVRfRElTUExBWV9NT0RFCT0gMHgwRCwKKwlNSVBJX0RDU19HRVRfU0lHTkFMX01PREUJPSAweDBFLAorCU1JUElfRENTX0dFVF9ESUFHTk9TVElDX1JFU1VMVAk9IDB4MEYsCisJTUlQSV9EQ1NfRU5URVJfU0xFRVBfTU9ERQk9IDB4MTAsCisJTUlQSV9EQ1NfRVhJVF9TTEVFUF9NT0RFCT0gMHgxMSwKKwlNSVBJX0RDU19FTlRFUl9QQVJUSUFMX01PREUJPSAweDEyLAorCU1JUElfRENTX0VOVEVSX05PUk1BTF9NT0RFCT0gMHgxMywKKwlNSVBJX0RDU19FWElUX0lOVkVSVF9NT0RFCT0gMHgyMCwKKwlNSVBJX0RDU19FTlRFUl9JTlZFUlRfTU9ERQk9IDB4MjEsCisJTUlQSV9EQ1NfU0VUX0dBTU1BX0NVUlZFCT0gMHgyNiwKKwlNSVBJX0RDU19TRVRfRElTUExBWV9PRkYJPSAweDI4LAorCU1JUElfRENTX1NFVF9ESVNQTEFZX09OCQk9IDB4MjksCisJTUlQSV9EQ1NfU0VUX0NPTFVNTl9BRERSRVNTCT0gMHgyQSwKKwlNSVBJX0RDU19TRVRfUEFHRV9BRERSRVNTCT0gMHgyQiwKKwlNSVBJX0RDU19XUklURV9NRU1PUllfU1RBUlQJPSAweDJDLAorCU1JUElfRENTX1dSSVRFX0xVVAkJPSAweDJELAorCU1JUElfRENTX1JFQURfTUVNT1JZX1NUQVJUCT0gMHgyRSwKKwlNSVBJX0RDU19TRVRfUEFSVElBTF9BUkVBCT0gMHgzMCwKKwlNSVBJX0RDU19TRVRfU0NST0xMX0FSRUEJPSAweDMzLAorCU1JUElfRENTX1NFVF9URUFSX09GRgkJPSAweDM0LAorCU1JUElfRENTX1NFVF9URUFSX09OCQk9IDB4MzUsCisJTUlQSV9EQ1NfU0VUX0FERFJFU1NfTU9ERQk9IDB4MzYsCisJTUlQSV9EQ1NfU0VUX1NDUk9MTF9TVEFSVAk9IDB4MzcsCisJTUlQSV9EQ1NfRVhJVF9JRExFX01PREUJCT0gMHgzOCwKKwlNSVBJX0RDU19FTlRFUl9JRExFX01PREUJPSAweDM5LAorCU1JUElfRENTX1NFVF9QSVhFTF9GT1JNQVQJPSAweDNBLAorCU1JUElfRENTX1dSSVRFX01FTU9SWV9DT05USU5VRQk9IDB4M0MsCisJTUlQSV9EQ1NfUkVBRF9NRU1PUllfQ09OVElOVUUJPSAweDNFLAorCU1JUElfRENTX1NFVF9URUFSX1NDQU5MSU5FCT0gMHg0NCwKKwlNSVBJX0RDU19HRVRfU0NBTkxJTkUJCT0gMHg0NSwKKwlNSVBJX0RDU19SRUFEX0REQl9TVEFSVAkJPSAweEExLAorCU1JUElfRENTX1JFQURfRERCX0NPTlRJTlVFCT0gMHhBOCwKK307CisKKy8qIE1JUEkgRENTIHBpeGVsIGZvcm1hdHMgKi8KKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzI0QklUCTcKKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzE4QklUCTYKKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzE2QklUCTUKKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzEyQklUCTMKKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzhCSVQJCTIKKyNkZWZpbmUgTUlQSV9EQ1NfUElYRUxfRk1UXzNCSVQJCTEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21pcGlfZHNpLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21pcGlfZHNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiY2EwOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbWlwaV9kc2kuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogUHVibGljIFNILW1vYmlsZSBNSVBJIERTSSBoZWFkZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBWSURFT19TSF9NSVBJX0RTSV9ICisjZGVmaW5lIFZJREVPX1NIX01JUElfRFNJX0gKKworZW51bSBzaF9taXBpX2RzaV9kYXRhX2ZtdCB7CisJTUlQSV9SR0I4ODgsCisJTUlQSV9SR0I1NjUsCisJTUlQSV9SR0I2NjZfTFAsCisJTUlQSV9SR0I2NjYsCisJTUlQSV9CR1I4ODgsCisJTUlQSV9CR1I1NjUsCisJTUlQSV9CR1I2NjZfTFAsCisJTUlQSV9CR1I2NjYsCisJTUlQSV9ZVVlWLAorCU1JUElfVVlWWSwKKwlNSVBJX1lVVjQyMF9MLAorCU1JUElfWVVWNDIwLAorfTsKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnOworCitzdHJ1Y3Qgc2hfbWlwaV9kc2lfaW5mbyB7CisJZW51bSBzaF9taXBpX2RzaV9kYXRhX2ZtdAlkYXRhX2Zvcm1hdDsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbl9jZmcJKmxjZF9jaGFuOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc3Y2YxOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2hkbWkuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogU0gtTW9iaWxlIEhpZ2gtRGVmaW5pdGlvbiBNdWx0aW1lZGlhIEludGVyZmFjZSAoSERNSSkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBTSF9NT0JJTEVfSERNSV9ICisjZGVmaW5lIFNIX01PQklMRV9IRE1JX0gKKworc3RydWN0IHNoX21vYmlsZV9sY2RjX2NoYW5fY2ZnOworc3RydWN0IGRldmljZTsKKworc3RydWN0IHNoX21vYmlsZV9oZG1pX2luZm8geworCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19jaGFuX2NmZwkqbGNkX2NoYW47CisJc3RydWN0IGRldmljZQkJCSpsY2RfZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmggYi9pbmNsdWRlL3ZpZGVvL3NoX21vYmlsZV9sY2RjLmgKaW5kZXggMjg4MjA1NC4uNTVkNzAwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9zaF9tb2JpbGVfbGNkYy5oCisrKyBiL2luY2x1ZGUvdmlkZW8vc2hfbW9iaWxlX2xjZGMuaApAQCAtMywyNCArMywyNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAotZW51bSB7IFJHQjgsICAgLyogMjRicHAsIDg6ODo4ICovCi0gICAgICAgUkdCOSwgICAvKiAxOGJwcCwgOTo5ICovCi0gICAgICAgUkdCMTJBLCAvKiAyNGJwcCwgMTI6MTIgKi8KLSAgICAgICBSR0IxMkIsIC8qIDEyYnBwICovCi0gICAgICAgUkdCMTYsICAvKiAxNmJwcCAqLwotICAgICAgIFJHQjE4LCAgLyogMThicHAgKi8KLSAgICAgICBSR0IyNCwgIC8qIDI0YnBwICovCi0gICAgICAgU1lTOEEsICAvKiAyNGJwcCwgODo4OjggKi8KLSAgICAgICBTWVM4QiwgIC8qIDE4YnBwLCA4Ojg6MiAqLwotICAgICAgIFNZUzhDLCAgLyogMThicHAsIDI6ODo4ICovCi0gICAgICAgU1lTOEQsICAvKiAxNmJwcCwgODo4ICovCi0gICAgICAgU1lTOSwgICAvKiAxOGJwcCwgOTo5ICovCi0gICAgICAgU1lTMTIsICAvKiAyNGJwcCwgMTI6MTIgKi8KLSAgICAgICBTWVMxNkEsIC8qIDE2YnBwICovCi0gICAgICAgU1lTMTZCLCAvKiAxOGJwcCwgMTY6MiAqLwotICAgICAgIFNZUzE2QywgLyogMThicHAsIDI6MTYgKi8KLSAgICAgICBTWVMxOCwgIC8qIDE4YnBwICovCi0gICAgICAgU1lTMjQgfTsvKiAyNGJwcCAqLworZW51bSB7CisJUkdCOCwgICAvKiAyNGJwcCwgODo4OjggKi8KKwlSR0I5LCAgIC8qIDE4YnBwLCA5OjkgKi8KKwlSR0IxMkEsIC8qIDI0YnBwLCAxMjoxMiAqLworCVJHQjEyQiwgLyogMTJicHAgKi8KKwlSR0IxNiwgIC8qIDE2YnBwICovCisJUkdCMTgsICAvKiAxOGJwcCAqLworCVJHQjI0LCAgLyogMjRicHAgKi8KKwlZVVY0MjIsIC8qIDE2YnBwICovCisJU1lTOEEsICAvKiAyNGJwcCwgODo4OjggKi8KKwlTWVM4QiwgIC8qIDE4YnBwLCA4Ojg6MiAqLworCVNZUzhDLCAgLyogMThicHAsIDI6ODo4ICovCisJU1lTOEQsICAvKiAxNmJwcCwgODo4ICovCisJU1lTOSwgICAvKiAxOGJwcCwgOTo5ICovCisJU1lTMTIsICAvKiAyNGJwcCwgMTI6MTIgKi8KKwlTWVMxNkEsIC8qIDE2YnBwICovCisJU1lTMTZCLCAvKiAxOGJwcCwgMTY6MiAqLworCVNZUzE2QywgLyogMThicHAsIDI6MTYgKi8KKwlTWVMxOCwgIC8qIDE4YnBwICovCisJU1lTMjQsICAvKiAyNGJwcCAqLworfTsKIAogZW51bSB7IExDRENfQ0hBTl9ESVNBQkxFRCA9IDAsCiAgICAgICAgTENEQ19DSEFOX01BSU5MQ0QsCkBAIC01Miw3ICs1NSw3IEBACiAJCQkgc3RydWN0IHNoX21vYmlsZV9sY2RjX3N5c19idXNfb3BzICpzeXNfb3BzKTsKIAl2b2lkICgqc3RhcnRfdHJhbnNmZXIpKHZvaWQgKmJvYXJkX2RhdGEsIHZvaWQgKnN5c19vcHNfaGFuZGxlLAogCQkJICAgICAgIHN0cnVjdCBzaF9tb2JpbGVfbGNkY19zeXNfYnVzX29wcyAqc3lzX29wcyk7Ci0Jdm9pZCAoKmRpc3BsYXlfb24pKHZvaWQgKmJvYXJkX2RhdGEpOworCXZvaWQgKCpkaXNwbGF5X29uKSh2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAJdm9pZCAoKmRpc3BsYXlfb2ZmKSh2b2lkICpib2FyZF9kYXRhKTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9tZW1vcnkuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9tZW1vcnkuaAppbmRleCBhZjM2ZWFkLi5kMzkzOGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL21lbW9yeS5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfX1hFTl9QVUJMSUNfTUVNT1JZX0hfXwogI2RlZmluZSBfX1hFTl9QVUJMSUNfTUVNT1JZX0hfXwogCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKwogLyoKICAqIEluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBzcGVjaWZpZWQgZG9tYWluJ3MgbWVtb3J5IHJlc2VydmF0aW9uLiBSZXR1cm5zIGEKICAqIC12ZSBlcnJjb2RlIG9uIGZhaWx1cmUsIG9yIHRoZSAjIGV4dGVudHMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBvciBmcmVlZC4KQEAgLTUzLDYgKzU1LDQ4IEBACiBERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh4ZW5fbWVtb3J5X3Jlc2VydmF0aW9uKTsKIAogLyoKKyAqIEFuIGF0b21pYyBleGNoYW5nZSBvZiBtZW1vcnkgcGFnZXMuIElmIHJldHVybiBjb2RlIGlzIHplcm8gdGhlbgorICogQG91dC5leHRlbnRfbGlzdCBwcm92aWRlcyBHTUZOcyBvZiB0aGUgbmV3bHktYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFJldHVybnMgemVybyBvbiBjb21wbGV0ZSBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICogT24gY29tcGxldGUgc3VjY2VzcyB0aGVuIGFsd2F5cyBAbnJfZXhjaGFuZ2VkID09IEBpbi5ucl9leHRlbnRzLgorICogT24gcGFydGlhbCBzdWNjZXNzIEBucl9leGNoYW5nZWQgaW5kaWNhdGVzIGhvdyBtdWNoIHdvcmsgd2FzIGRvbmUuCisgKi8KKyNkZWZpbmUgWEVOTUVNX2V4Y2hhbmdlICAgICAgICAgICAgIDExCitzdHJ1Y3QgeGVuX21lbW9yeV9leGNoYW5nZSB7CisgICAgLyoKKyAgICAgKiBbSU5dIERldGFpbHMgb2YgbWVtb3J5IGV4dGVudHMgdG8gYmUgZXhjaGFuZ2VkIChHTUZOIGJhc2VzKS4KKyAgICAgKiBOb3RlIHRoYXQgQGluLmFkZHJlc3NfYml0cyBpcyBpZ25vcmVkIGFuZCB1bnVzZWQuCisgICAgICovCisgICAgc3RydWN0IHhlbl9tZW1vcnlfcmVzZXJ2YXRpb24gaW47CisKKyAgICAvKgorICAgICAqIFtJTi9PVVRdIERldGFpbHMgb2YgbmV3IG1lbW9yeSBleHRlbnRzLgorICAgICAqIFdlIHJlcXVpcmUgdGhhdDoKKyAgICAgKiAgMS4gQGluLmRvbWlkID09IEBvdXQuZG9taWQKKyAgICAgKiAgMi4gQGluLm5yX2V4dGVudHMgIDw8IEBpbi5leHRlbnRfb3JkZXIgPT0KKyAgICAgKiAgICAgQG91dC5ucl9leHRlbnRzIDw8IEBvdXQuZXh0ZW50X29yZGVyCisgICAgICogIDMuIEBpbi5leHRlbnRfc3RhcnQgYW5kIEBvdXQuZXh0ZW50X3N0YXJ0IGxpc3RzIG11c3Qgbm90IG92ZXJsYXAKKyAgICAgKiAgNC4gQG91dC5leHRlbnRfc3RhcnQgbGlzdHMgR1BGTiBiYXNlcyB0byBiZSBwb3B1bGF0ZWQKKyAgICAgKiAgNS4gQG91dC5leHRlbnRfc3RhcnQgaXMgb3ZlcndyaXR0ZW4gd2l0aCBhbGxvY2F0ZWQgR01GTiBiYXNlcworICAgICAqLworICAgIHN0cnVjdCB4ZW5fbWVtb3J5X3Jlc2VydmF0aW9uIG91dDsKKworICAgIC8qCisgICAgICogW09VVF0gTnVtYmVyIG9mIGlucHV0IGV4dGVudHMgdGhhdCB3ZXJlIHN1Y2Nlc3NmdWxseSBleGNoYW5nZWQ6CisgICAgICogIDEuIFRoZSBmaXJzdCBAbnJfZXhjaGFuZ2VkIGlucHV0IGV4dGVudHMgd2VyZSBzdWNjZXNzZnVsbHkKKyAgICAgKiAgICAgZGVhbGxvY2F0ZWQuCisgICAgICogIDIuIFRoZSBjb3JyZXNwb25kaW5nIGZpcnN0IGVudHJpZXMgaW4gdGhlIG91dHB1dCBleHRlbnQgbGlzdCBjb3JyZWN0bHkKKyAgICAgKiAgICAgaW5kaWNhdGUgdGhlIEdNRk5zIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgZXhjaGFuZ2VkLgorICAgICAqICAzLiBBbGwgb3RoZXIgaW5wdXQgYW5kIG91dHB1dCBleHRlbnRzIGFyZSB1bnRvdWNoZWQuCisgICAgICogIDQuIElmIG5vdCBhbGwgaW5wdXQgZXhlbnRzIGFyZSBleGNoYW5nZWQgdGhlbiB0aGUgcmV0dXJuIGNvZGUgb2YgdGhpcworICAgICAqICAgICBjb21tYW5kIHdpbGwgYmUgbm9uLXplcm8uCisgICAgICogIDUuIFRISVMgRklFTEQgTVVTVCBCRSBJTklUSUFMSVNFRCBUTyBaRVJPIEJZIFRIRSBDQUxMRVIhCisgICAgICovCisgICAgdW5zaWduZWQgbG9uZyBucl9leGNoYW5nZWQ7Cit9OworCitERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh4ZW5fbWVtb3J5X2V4Y2hhbmdlKTsKKy8qCiAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG1hY2hpbmUgZnJhbWUgbnVtYmVyIG9mIG1hcHBlZCBSQU0gaW4gdGhpcyBzeXN0ZW0uCiAgKiBUaGlzIGNvbW1hbmQgYWx3YXlzIHN1Y2NlZWRzIChpdCBuZXZlciByZXR1cm5zIGFuIGVycm9yIGNvZGUpLgogICogYXJnID09IE5VTEwuCkBAIC0xNDIsNCArMTg2LDEwIEBACiB9OwogREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX3RyYW5zbGF0ZV9ncGZuX2xpc3QpOwogCisKKy8qCisgKiBQcmV2ZW50IHRoZSBiYWxsb29uIGRyaXZlciBmcm9tIGNoYW5naW5nIHRoZSBtZW1vcnkgcmVzZXJ2YXRpb24KKyAqIGR1cmluZyBhIGRyaXZlciBjcml0aWNhbCByZWdpb24uCisgKi8KK2V4dGVybiBzcGlubG9ja190IHhlbl9yZXNlcnZhdGlvbl9sb2NrOwogI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19NRU1PUllfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9zd2lvdGxiLXhlbi5oIGIvaW5jbHVkZS94ZW4vc3dpb3RsYi14ZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWEyZmRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS94ZW4vc3dpb3RsYi14ZW4uaApAQCAtMCwwICsxLDY1IEBACisjaWZuZGVmIF9fTElOVVhfU1dJT1RMQl9YRU5fSAorI2RlZmluZSBfX0xJTlVYX1NXSU9UTEJfWEVOX0gKKworI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KKworZXh0ZXJuIHZvaWQgeGVuX3N3aW90bGJfaW5pdChpbnQgdmVyYm9zZSk7CisKK2V4dGVybiB2b2lkCisqeGVuX3N3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKTsKKworZXh0ZXJuIHZvaWQKK3hlbl9zd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAorCQkJICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKworZXh0ZXJuIGRtYV9hZGRyX3QgeGVuX3N3aW90bGJfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKworZXh0ZXJuIHZvaWQgeGVuX3N3aW90bGJfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCQkgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKy8qCitleHRlcm4gaW50Cit4ZW5fc3dpb3RsYl9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKKwkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKworZXh0ZXJuIHZvaWQKK3hlbl9zd2lvdGxiX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKyovCitleHRlcm4gaW50Cit4ZW5fc3dpb3RsYl9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisKK2V4dGVybiB2b2lkCit4ZW5fc3dpb3RsYl91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisKK2V4dGVybiB2b2lkCit4ZW5fc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCitleHRlcm4gdm9pZAoreGVuX3N3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisKK2V4dGVybiB2b2lkCit4ZW5fc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJCSAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCitleHRlcm4gdm9pZAoreGVuX3N3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisKK2V4dGVybiBpbnQKK3hlbl9zd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKworZXh0ZXJuIGludAoreGVuX3N3aW90bGJfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOworCisjZW5kaWYgLyogX19MSU5VWF9TV0lPVExCX1hFTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi94ZW4tb3BzLmggYi9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKaW5kZXggNDZiYzgxZS4uMzUxZjQwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4veGVuLW9wcy5oCisrKyBiL2luY2x1ZGUveGVuL3hlbi1vcHMuaApAQCAtMTcsNCArMTcsMTAgQEAKIAogaW50IHhlbl9zZXR1cF9zaHV0ZG93bl9ldmVudCh2b2lkKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnhlbl9jb250aWd1b3VzX2JpdG1hcDsKK2ludCB4ZW5fY3JlYXRlX2NvbnRpZ3VvdXNfcmVnaW9uKHVuc2lnbmVkIGxvbmcgdnN0YXJ0LCB1bnNpZ25lZCBpbnQgb3JkZXIsCisJCQkJdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cyk7CisKK3ZvaWQgeGVuX2Rlc3Ryb3lfY29udGlndW91c19yZWdpb24odW5zaWduZWQgbG9uZyB2c3RhcnQsIHVuc2lnbmVkIGludCBvcmRlcik7CisKICNlbmRpZiAvKiBJTkNMVURFX1hFTl9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDVjZmY5YTkuLjJkZTViMWMgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTMyMCwxMyArMzIwLDE3IEBACiAJaGVscAogCSAgRW5hYmxlIGxvdy1vdmVyaGVhZCBzeXN0ZW0tY2FsbCBhdWRpdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0CiAJICBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9yIHdpdGggYW5vdGhlciBrZXJuZWwgc3Vic3lzdGVtLAotCSAgc3VjaCBhcyBTRUxpbnV4LiAgVG8gdXNlIGF1ZGl0J3MgZmlsZXN5c3RlbSB3YXRjaCBmZWF0dXJlLCBwbGVhc2UKLQkgIGVuc3VyZSB0aGF0IElOT1RJRlkgaXMgY29uZmlndXJlZC4KKwkgIHN1Y2ggYXMgU0VMaW51eC4KKworY29uZmlnIEFVRElUX1dBVENICisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQVVESVRTWVNDQUxMCisJc2VsZWN0IEZTTk9USUZZCiAKIGNvbmZpZyBBVURJVF9UUkVFCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gQVVESVRTWVNDQUxMCi0Jc2VsZWN0IElOT1RJRlkKKwlzZWxlY3QgRlNOT1RJRlkKIAogbWVudSAiUkNVIFN1YnN5c3RlbSIKIApAQCAtNTczLDggKzU3Nyw4IEBACiAJICBjb3VsZCBpbiB0dXJuIGFkZCBzb21lIGZvcmsvZXhpdCBvdmVyaGVhZC4KIAogY29uZmlnIENHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUAotCWJvb2wgIk1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyIFN3YXAgRXh0ZW5zaW9uKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBDR1JPVVBfTUVNX1JFU19DVExSICYmIFNXQVAgJiYgRVhQRVJJTUVOVEFMCisJYm9vbCAiTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIgU3dhcCBFeHRlbnNpb24iCisJZGVwZW5kcyBvbiBDR1JPVVBfTUVNX1JFU19DVExSICYmIFNXQVAKIAloZWxwCiAJICBBZGQgc3dhcCBtYW5hZ2VtZW50IGZlYXR1cmUgdG8gbWVtb3J5IHJlc291cmNlIGNvbnRyb2xsZXIuIFdoZW4geW91CiAJICBlbmFibGUgdGhpcywgeW91IGNhbiBsaW1pdCBtZW0rc3dhcCB1c2FnZSBwZXIgY2dyb3VwLiBJbiBvdGhlciB3b3JkcywKQEAgLTExNDMsMzAgKzExNDcsNiBAQAogCiBzb3VyY2UgImFyY2gvS2NvbmZpZyIKIAotY29uZmlnIFNMT1dfV09SSwotCWRlZmF1bHQgbgotCWJvb2wKLQloZWxwCi0JICBUaGUgc2xvdyB3b3JrIHRocmVhZCBwb29sIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAotCSAgdGhyZWFkcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQKLQkgIHRha2UgYSByZWxhdGl2ZWx5IGxvbmcgdGltZS4KLQotCSAgQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIENhY2hlRmlsZXMgZG9pbmcgYSBwYXRoIGxvb2t1cCBmb2xsb3dlZAotCSAgYnkgYSBzZXJpZXMgb2YgbWtkaXJzIGFuZCBhIGNyZWF0ZSBjYWxsLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB0b3VjaAotCSAgZGlzay4KLQotCSAgU2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dC4KLQotY29uZmlnIFNMT1dfV09SS19ERUJVRwotCWJvb2wgIlNsb3cgd29yayBkZWJ1Z2dpbmcgdGhyb3VnaCBkZWJ1Z2ZzIgotCWRlZmF1bHQgbgotCWRlcGVuZHMgb24gU0xPV19XT1JLICYmIERFQlVHX0ZTCi0JaGVscAotCSAgRGlzcGxheSB0aGUgY29udGVudHMgb2YgdGhlIHNsb3cgd29yayBydW4gcXVldWUgdGhyb3VnaCBkZWJ1Z2ZzLAotCSAgaW5jbHVkaW5nIGl0ZW1zIGN1cnJlbnRseSBleGVjdXRpbmcuCi0KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQuCi0KIGVuZG1lbnUJCSMgR2VuZXJhbCBzZXR1cAogCiBjb25maWcgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVApkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA0ZGRiNTNmLi44NmNiZmQwIDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXJ0X2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTY2LDExICs2NSw5IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZmkuaD4KICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDx0cmFjZS9ib290Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYnVncy5oPgpAQCAtNDQ0LDcgKzQ0MSw2IEBACiAJa3RocmVhZGRfdGFzayA9IGZpbmRfdGFza19ieV9waWRfbnMocGlkLCAmaW5pdF9waWRfbnMpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWNvbXBsZXRlKCZrdGhyZWFkZF9kb25lKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAKIAkvKgogCSAqIFRoZSBib290IGlkbGUgdGhyZWFkIG11c3QgZXhlY3V0ZSBzY2hlZHVsZSgpCkBAIC01NjYsNyArNTYyLDYgQEAKICAqIEludGVycnVwdHMgYXJlIHN0aWxsIGRpc2FibGVkLiBEbyBuZWNlc3Nhcnkgc2V0dXBzLCB0aGVuCiAgKiBlbmFibGUgdGhlbQogICovCi0JbG9ja19rZXJuZWwoKTsKIAl0aWNrX2luaXQoKTsKIAlib290X2NwdV9pbml0KCk7CiAJcGFnZV9hZGRyZXNzX2luaXQoKTsKQEAgLTY2NCw3ICs2NTksNiBAQAogI2VuZGlmCiAJcGFnZV9jZ3JvdXBfaW5pdCgpOwogCWVuYWJsZV9kZWJ1Z19wYWdlYWxsb2MoKTsKLQlrbWVtdHJhY2VfaW5pdCgpOwogCWttZW1sZWFrX2luaXQoKTsKIAlkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7CiAJaWRyX2luaXRfY2FjaGUoKTsKQEAgLTcyNiwzOCArNzIwLDM5IEBACiBjb3JlX3BhcmFtKGluaXRjYWxsX2RlYnVnLCBpbml0Y2FsbF9kZWJ1ZywgYm9vbCwgMDY0NCk7CiAKIHN0YXRpYyBjaGFyIG1zZ2J1Zls2NF07Ci1zdGF0aWMgc3RydWN0IGJvb3RfdHJhY2VfY2FsbCBjYWxsOwotc3RhdGljIHN0cnVjdCBib290X3RyYWNlX3JldCByZXQ7CiAKLWludCBkb19vbmVfaW5pdGNhbGwoaW5pdGNhbGxfdCBmbikKK3N0YXRpYyBpbnQgX19pbml0X29yX21vZHVsZSBkb19vbmVfaW5pdGNhbGxfZGVidWcoaW5pdGNhbGxfdCBmbikKK3sKKwlrdGltZV90IGNhbGx0aW1lLCBkZWx0YSwgcmV0dGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb247CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0RFQlVHICJjYWxsaW5nICAlcEYgQCAlaVxuIiwgZm4sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCXJldCA9IGZuKCk7CisJcmV0dGltZSA9IGt0aW1lX2dldCgpOworCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKKwlkdXJhdGlvbiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMDsKKwlwcmludGsoS0VSTl9ERUJVRyAiaW5pdGNhbGwgJXBGIHJldHVybmVkICVkIGFmdGVyICVsbGQgdXNlY3NcbiIsIGZuLAorCQlyZXQsIGR1cmF0aW9uKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXRfb3JfbW9kdWxlIGRvX29uZV9pbml0Y2FsbChpbml0Y2FsbF90IGZuKQogewogCWludCBjb3VudCA9IHByZWVtcHRfY291bnQoKTsKLQlrdGltZV90IGNhbGx0aW1lLCBkZWx0YSwgcmV0dGltZTsKKwlpbnQgcmV0OwogCi0JaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCWNhbGwuY2FsbGVyID0gdGFza19waWRfbnIoY3VycmVudCk7Ci0JCXByaW50aygiY2FsbGluZyAgJXBGIEAgJWlcbiIsIGZuLCBjYWxsLmNhbGxlcik7Ci0JCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7Ci0JCXRyYWNlX2Jvb3RfY2FsbCgmY2FsbCwgZm4pOwotCQllbmFibGVfYm9vdF90cmFjZSgpOwotCX0KLQotCXJldC5yZXN1bHQgPSBmbigpOwotCi0JaWYgKGluaXRjYWxsX2RlYnVnKSB7Ci0JCWRpc2FibGVfYm9vdF90cmFjZSgpOwotCQlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7Ci0JCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKLQkJcmV0LmR1cmF0aW9uID0gKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwOwotCQl0cmFjZV9ib290X3JldCgmcmV0LCBmbik7Ci0JCXByaW50aygiaW5pdGNhbGwgJXBGIHJldHVybmVkICVkIGFmdGVyICVMZCB1c2Vjc1xuIiwgZm4sCi0JCQlyZXQucmVzdWx0LCByZXQuZHVyYXRpb24pOwotCX0KKwlpZiAoaW5pdGNhbGxfZGVidWcpCisJCXJldCA9IGRvX29uZV9pbml0Y2FsbF9kZWJ1Zyhmbik7CisJZWxzZQorCQlyZXQgPSBmbigpOwogCiAJbXNnYnVmWzBdID0gMDsKIAotCWlmIChyZXQucmVzdWx0ICYmIHJldC5yZXN1bHQgIT0gLUVOT0RFViAmJiBpbml0Y2FsbF9kZWJ1ZykKLQkJc3ByaW50Zihtc2didWYsICJlcnJvciBjb2RlICVkICIsIHJldC5yZXN1bHQpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9ERVYgJiYgaW5pdGNhbGxfZGVidWcpCisJCXNwcmludGYobXNnYnVmLCAiZXJyb3IgY29kZSAlZCAiLCByZXQpOwogCiAJaWYgKHByZWVtcHRfY291bnQoKSAhPSBjb3VudCkgewogCQlzdHJsY2F0KG1zZ2J1ZiwgInByZWVtcHRpb24gaW1iYWxhbmNlICIsIHNpemVvZihtc2didWYpKTsKQEAgLTc3MSw3ICs3NjYsNyBAQAogCQlwcmludGsoImluaXRjYWxsICVwRiByZXR1cm5lZCB3aXRoICVzXG4iLCBmbiwgbXNnYnVmKTsKIAl9CiAKLQlyZXR1cm4gcmV0LnJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTc5Nyw3ICs3OTIsNiBAQAogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZG9fYmFzaWNfc2V0dXAodm9pZCkKIHsKLQlpbml0X3dvcmtxdWV1ZXMoKTsKIAljcHVzZXRfaW5pdF9zbXAoKTsKIAl1c2VybW9kZWhlbHBlcl9pbml0KCk7CiAJaW5pdF90bXBmcygpOwpAQCAtODMwLDcgKzgyNCw2IEBACiAJLyogbmVlZCB0byBmaW5pc2ggYWxsIGFzeW5jIF9faW5pdCBjb2RlIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkgKi8KIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CiAJZnJlZV9pbml0bWVtKCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCW1hcmtfcm9kYXRhX3JvKCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JVTk5JTkc7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOwpAQCAtODcwLDggKzg2Myw2IEBACiAJICogV2FpdCB1bnRpbCBrdGhyZWFkZCBpcyBhbGwgc2V0LXVwLgogCSAqLwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmt0aHJlYWRkX2RvbmUpOwotCWxvY2tfa2VybmVsKCk7Ci0KIAkvKgogCSAqIGluaXQgY2FuIGFsbG9jYXRlIHBhZ2VzIG9uIGFueSBub2RlCiAJICovCkBAIC04OTUsNyArODg2LDYgQEAKIAlzbXBfcHJlcGFyZV9jcHVzKHNldHVwX21heF9jcHVzKTsKIAogCWRvX3ByZV9zbXBfaW5pdGNhbGxzKCk7Ci0Jc3RhcnRfYm9vdF90cmFjZSgpOwogCiAJc21wX2luaXQoKTsKIAlzY2hlZF9pbml0X3NtcCgpOwpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IGM5M2ZkM2YuLmM2MGU1MTkgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCQkgCSAgICB1LT5tcV9ieXRlcyArIG1xX2J5dGVzID4KIAkJCSAgICB0YXNrX3JsaW1pdChwLCBSTElNSVRfTVNHUVVFVUUpKSB7CiAJCQkJc3Bpbl91bmxvY2soJm1xX2xvY2spOwotCQkJCS8qIG1xdWV1ZV9kZWxldGVfaW5vZGUoKSByZWxlYXNlcyBpbmZvLT5tZXNzYWdlcyAqLworCQkJCS8qIG1xdWV1ZV9ldmljdF9pbm9kZSgpIHJlbGVhc2VzIGluZm8tPm1lc3NhZ2VzICovCiAJCQkJZ290byBvdXRfaW5vZGU7CiAJCQl9CiAJCQl1LT5tcV9ieXRlcyArPSBtcV9ieXRlczsKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWttZW1fY2FjaGVfZnJlZShtcXVldWVfaW5vZGVfY2FjaGVwLCBNUVVFVUVfSShpbm9kZSkpOwogfQogCi1zdGF0aWMgdm9pZCBtcXVldWVfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBtcXVldWVfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgbXF1ZXVlX2lub2RlX2luZm8gKmluZm87CiAJc3RydWN0IHVzZXJfc3RydWN0ICp1c2VyOwpAQCAtMjQ5LDEwICsyNDksMTEgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqaXBjX25zOwogCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJY2xlYXJfaW5vZGUoaW5vZGUpOworCWVuZF93cml0ZWJhY2soaW5vZGUpOworCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCXJldHVybjsKLQl9CisKIAlpcGNfbnMgPSBnZXRfbnNfZnJvbV9pbm9kZShpbm9kZSk7CiAJaW5mbyA9IE1RVUVVRV9JKGlub2RlKTsKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwpAQCAtMjYxLDggKzI2Miw2IEBACiAJa2ZyZWUoaW5mby0+bWVzc2FnZXMpOwogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAotCWNsZWFyX2lub2RlKGlub2RlKTsKLQogCS8qIFRvdGFsIGFtb3VudCBvZiBieXRlcyBhY2NvdW50ZWQgZm9yIHRoZSBtcXVldWUgKi8KIAltcV9ieXRlcyA9IGluZm8tPmF0dHIubXFfbWF4bXNnICogKHNpemVvZihzdHJ1Y3QgbXNnX21zZyAqKQogCSAgICArIGluZm8tPmF0dHIubXFfbXNnc2l6ZSk7CkBAIC0xMjI1LDkgKzEyMjQsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIG1xdWV1ZV9zdXBlcl9vcHMgPSB7CiAJLmFsbG9jX2lub2RlID0gbXF1ZXVlX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlID0gbXF1ZXVlX2Rlc3Ryb3lfaW5vZGUsCisJLmV2aWN0X2lub2RlID0gbXF1ZXVlX2V2aWN0X2lub2RlLAogCS5zdGF0ZnMgPSBzaW1wbGVfc3RhdGZzLAotCS5kZWxldGVfaW5vZGUgPSBtcXVldWVfZGVsZXRlX2lub2RlLAotCS5kcm9wX2lub2RlID0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbXF1ZXVlX2ZzX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMDU3NDcyZi4uMGI3MmQxYSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtNzAsMTQgKzcwLDE1IEBACiBvYmotJChDT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlMpICs9IHJlc19jb3VudGVyLm8KIG9iai0kKENPTkZJR19TTVApICs9IHN0b3BfbWFjaGluZS5vCiBvYmotJChDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCkgKz0gdGVzdF9rcHJvYmVzLm8KLW9iai0kKENPTkZJR19BVURJVCkgKz0gYXVkaXQubyBhdWRpdGZpbHRlci5vIGF1ZGl0X3dhdGNoLm8KK29iai0kKENPTkZJR19BVURJVCkgKz0gYXVkaXQubyBhdWRpdGZpbHRlci5vCiBvYmotJChDT05GSUdfQVVESVRTWVNDQUxMKSArPSBhdWRpdHNjLm8KLW9iai0kKENPTkZJR19HQ09WX0tFUk5FTCkgKz0gZ2Nvdi8KK29iai0kKENPTkZJR19BVURJVF9XQVRDSCkgKz0gYXVkaXRfd2F0Y2gubwogb2JqLSQoQ09ORklHX0FVRElUX1RSRUUpICs9IGF1ZGl0X3RyZWUubworb2JqLSQoQ09ORklHX0dDT1ZfS0VSTkVMKSArPSBnY292Lwogb2JqLSQoQ09ORklHX0tQUk9CRVMpICs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX0tHREIpICs9IGRlYnVnLwotb2JqLSQoQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQKSArPSBzb2Z0bG9ja3VwLm8KIG9iai0kKENPTkZJR19ERVRFQ1RfSFVOR19UQVNLKSArPSBodW5nX3Rhc2subworb2JqLSQoQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUikgKz0gd2F0Y2hkb2cubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICs9IGlycS8KIG9iai0kKENPTkZJR19TRUNDT01QKSArPSBzZWNjb21wLm8KIG9iai0kKENPTkZJR19SQ1VfVE9SVFVSRV9URVNUKSArPSByY3V0b3J0dXJlLm8KQEAgLTk5LDggKzEwMCw2IEBACiBvYmotJChDT05GSUdfWDg2X0RTKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19SSU5HX0JVRkZFUikgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfU01QKSArPSBzY2hlZF9jcHVwcmkubwotb2JqLSQoQ09ORklHX1NMT1dfV09SSykgKz0gc2xvdy13b3JrLm8KLW9iai0kKENPTkZJR19TTE9XX1dPUktfREVCVUcpICs9IHNsb3ctd29yay1kZWJ1Z2ZzLm8KIG9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCiBvYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSArPSBod19icmVha3BvaW50Lm8KIG9iai0kKENPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUikgKz0gdXNlci1yZXR1cm4tbm90aWZpZXIubwpkaWZmIC0tZ2l0IGEva2VybmVsL2FjY3QuYyBiL2tlcm5lbC9hY2N0LmMKaW5kZXggMzg1Yjg4NC4uZmE3ZWIzZCAxMDA2NDQKLS0tIGEva2VybmVsL2FjY3QuYworKysgYi9rZXJuZWwvYWNjdC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlzcGluX3VubG9jaygmYWNjdF9sb2NrKTsKIAogCS8qIE1heSBibG9jayAqLwotCWlmICh2ZnNfc3RhdGZzKGZpbGUtPmZfcGF0aC5kZW50cnksICZzYnVmKSkKKwlpZiAodmZzX3N0YXRmcygmZmlsZS0+Zl9wYXRoLCAmc2J1ZikpCiAJCXJldHVybiByZXM7CiAJc3VzcGVuZCA9IHNidWYuZl9ibG9ja3MgKiBTVVNQRU5EOwogCXJlc3VtZSA9IHNidWYuZl9ibG9ja3MgKiBSRVNVTUU7CmRpZmYgLS1naXQgYS9rZXJuZWwvYXN5bmMuYyBiL2tlcm5lbC9hc3luYy5jCmluZGV4IDE1MzE5ZDYuLmNkOWRiYjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hc3luYy5jCisrKyBiL2tlcm5lbC9hc3luYy5jCkBAIC00OSw0MCArNDksMzMgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9hc3luYy5oPgotI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdGF0aWMgYXN5bmNfY29va2llX3QgbmV4dF9jb29raWUgPSAxOwogCi0jZGVmaW5lIE1BWF9USFJFQURTCTI1NgogI2RlZmluZSBNQVhfV09SSwkzMjc2OAogCiBzdGF0aWMgTElTVF9IRUFEKGFzeW5jX3BlbmRpbmcpOwogc3RhdGljIExJU1RfSEVBRChhc3luY19ydW5uaW5nKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXN5bmNfbG9jayk7CiAKLXN0YXRpYyBpbnQgYXN5bmNfZW5hYmxlZCA9IDA7Ci0KIHN0cnVjdCBhc3luY19lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWFzeW5jX2Nvb2tpZV90ICAgY29va2llOwotCWFzeW5jX2Z1bmNfcHRyCSAqZnVuYzsKLQl2b2lkICAgICAgICAgICAgICpkYXRhOwotCXN0cnVjdCBsaXN0X2hlYWQgKnJ1bm5pbmc7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOworCWFzeW5jX2Nvb2tpZV90CQljb29raWU7CisJYXN5bmNfZnVuY19wdHIJCSpmdW5jOworCXZvaWQJCQkqZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSpydW5uaW5nOwogfTsKIAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFzeW5jX2RvbmUpOwotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFzeW5jX25ldyk7CiAKIHN0YXRpYyBhdG9taWNfdCBlbnRyeV9jb3VudDsKLXN0YXRpYyBhdG9taWNfdCB0aHJlYWRfY291bnQ7CiAKIGV4dGVybiBpbnQgaW5pdGNhbGxfZGVidWc7CiAKQEAgLTExNywyNyArMTEwLDIzIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXN5bmNfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CisKIC8qCiAgKiBwaWNrIHRoZSBmaXJzdCBwZW5kaW5nIGVudHJ5IGFuZCBydW4gaXQKICAqLwotc3RhdGljIHZvaWQgcnVuX29uZV9lbnRyeSh2b2lkKQorc3RhdGljIHZvaWQgYXN5bmNfcnVuX2VudHJ5X2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgYXN5bmNfZW50cnkgKmVudHJ5ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhc3luY19lbnRyeSwgd29yayk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXN5bmNfZW50cnkgKmVudHJ5OwogCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOwogCi0JLyogMSkgcGljayBvbmUgdGFzayBmcm9tIHRoZSBwZW5kaW5nIHF1ZXVlICovCi0KKwkvKiAxKSBtb3ZlIHNlbGYgdG8gdGhlIHJ1bm5pbmcgcXVldWUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXN5bmNfbG9jaywgZmxhZ3MpOwotCWlmIChsaXN0X2VtcHR5KCZhc3luY19wZW5kaW5nKSkKLQkJZ290byBvdXQ7Ci0JZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhc3luY19wZW5kaW5nLCBzdHJ1Y3QgYXN5bmNfZW50cnksIGxpc3QpOwotCi0JLyogMikgbW92ZSBpdCB0byB0aGUgcnVubmluZyBxdWV1ZSAqLwogCWxpc3RfbW92ZV90YWlsKCZlbnRyeS0+bGlzdCwgZW50cnktPnJ1bm5pbmcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKIAotCS8qIDMpIHJ1biBpdCAoYW5kIHByaW50IGR1cmF0aW9uKSovCisJLyogMikgcnVuIChhbmQgcHJpbnQgZHVyYXRpb24pICovCiAJaWYgKGluaXRjYWxsX2RlYnVnICYmIHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgewogCQlwcmludGsoImNhbGxpbmcgICVsbGlfJXBGIEAgJWlcbiIsIChsb25nIGxvbmcpZW50cnktPmNvb2tpZSwKIAkJCWVudHJ5LT5mdW5jLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CkBAIC0xNTMsMzEgKzE0MiwyNSBAQAogCQkJKGxvbmcgbG9uZylrdGltZV90b19ucyhkZWx0YSkgPj4gMTApOwogCX0KIAotCS8qIDQpIHJlbW92ZSBpdCBmcm9tIHRoZSBydW5uaW5nIHF1ZXVlICovCisJLyogMykgcmVtb3ZlIHNlbGYgZnJvbSB0aGUgcnVubmluZyBxdWV1ZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhc3luY19sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKIAotCS8qIDUpIGZyZWUgdGhlIGVudHJ5ICAqLworCS8qIDQpIGZyZWUgdGhlIGVudHJ5ICovCiAJa2ZyZWUoZW50cnkpOwogCWF0b21pY19kZWMoJmVudHJ5X2NvdW50KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKIAotCS8qIDYpIHdha2UgdXAgYW55IHdhaXRlcnMuICovCisJLyogNSkgd2FrZSB1cCBhbnkgd2FpdGVycyAqLwogCXdha2VfdXAoJmFzeW5jX2RvbmUpOwotCXJldHVybjsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKIH0KIAotCiBzdGF0aWMgYXN5bmNfY29va2llX3QgX19hc3luY19zY2hlZHVsZShhc3luY19mdW5jX3B0ciAqcHRyLCB2b2lkICpkYXRhLCBzdHJ1Y3QgbGlzdF9oZWFkICpydW5uaW5nKQogewogCXN0cnVjdCBhc3luY19lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlhc3luY19jb29raWVfdCBuZXdjb29raWU7Ci0JCiAKIAkvKiBhbGxvdyBpcnEtb2ZmIGNhbGxlcnMgKi8KIAllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhc3luY19lbnRyeSksIEdGUF9BVE9NSUMpOwpAQCAtMTg2LDcgKzE2OSw3IEBACiAJICogSWYgd2UncmUgb3V0IG9mIG1lbW9yeSBvciBpZiB0aGVyZSdzIHRvbyBtdWNoIHdvcmsKIAkgKiBwZW5kaW5nIGFscmVhZHksIHdlIGV4ZWN1dGUgc3luY2hyb25vdXNseS4KIAkgKi8KLQlpZiAoIWFzeW5jX2VuYWJsZWQgfHwgIWVudHJ5IHx8IGF0b21pY19yZWFkKCZlbnRyeV9jb3VudCkgPiBNQVhfV09SSykgeworCWlmICghZW50cnkgfHwgYXRvbWljX3JlYWQoJmVudHJ5X2NvdW50KSA+IE1BWF9XT1JLKSB7CiAJCWtmcmVlKGVudHJ5KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKIAkJbmV3Y29va2llID0gbmV4dF9jb29raWUrKzsKQEAgLTE5Niw2ICsxNzksNyBAQAogCQlwdHIoZGF0YSwgbmV3Y29va2llKTsKIAkJcmV0dXJuIG5ld2Nvb2tpZTsKIAl9CisJSU5JVF9XT1JLKCZlbnRyeS0+d29yaywgYXN5bmNfcnVuX2VudHJ5X2ZuKTsKIAllbnRyeS0+ZnVuYyA9IHB0cjsKIAllbnRyeS0+ZGF0YSA9IGRhdGE7CiAJZW50cnktPnJ1bm5pbmcgPSBydW5uaW5nOwpAQCAtMjA1LDcgKzE4OSwxMCBAQAogCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmYXN5bmNfcGVuZGluZyk7CiAJYXRvbWljX2luYygmZW50cnlfY291bnQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFzeW5jX2xvY2ssIGZsYWdzKTsKLQl3YWtlX3VwKCZhc3luY19uZXcpOworCisJLyogc2NoZWR1bGUgZm9yIGV4ZWN1dGlvbiAqLworCXF1ZXVlX3dvcmsoc3lzdGVtX3VuYm91bmRfd3EsICZlbnRyeS0+d29yayk7CisKIAlyZXR1cm4gbmV3Y29va2llOwogfQogCkBAIC0zMTIsODcgKzI5OSwzIEBACiAJYXN5bmNfc3luY2hyb25pemVfY29va2llX2RvbWFpbihjb29raWUsICZhc3luY19ydW5uaW5nKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFzeW5jX3N5bmNocm9uaXplX2Nvb2tpZSk7Ci0KLQotc3RhdGljIGludCBhc3luY190aHJlYWQodm9pZCAqdW51c2VkKQotewotCURFQ0xBUkVfV0FJVFFVRVVFKHdxLCBjdXJyZW50KTsKLQlhZGRfd2FpdF9xdWV1ZSgmYXN5bmNfbmV3LCAmd3EpOwotCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKLQkJaW50IHJldCA9IEhaOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkvKgotCQkgKiBjaGVjayB0aGUgbGlzdCBoZWFkIHdpdGhvdXQgbG9jay4uIGZhbHNlIHBvc2l0aXZlcwotCQkgKiBhcmUgZGVhbHQgd2l0aCBpbnNpZGUgcnVuX29uZV9lbnRyeSgpIHdoaWxlIGhvbGRpbmcKLQkJICogdGhlIGxvY2suCi0JCSAqLwotCQlybWIoKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZhc3luY19wZW5kaW5nKSkKLQkJCXJ1bl9vbmVfZW50cnkoKTsKLQkJZWxzZQotCQkJcmV0ID0gc2NoZWR1bGVfdGltZW91dChIWik7Ci0KLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQkvKgotCQkJICogd2UgdGltZWQgb3V0LCB0aGlzIG1lYW5zIHdlIGFzIHRocmVhZCBhcmUgcmVkdW5kYW50LgotCQkJICogd2Ugc2lnbiBvZmYgYW5kIGRpZSwgYnV0IHdlIHRvIGF2b2lkIGFueSByYWNlcyB0aGVyZQotCQkJICogaXMgYSBsYXN0LXN0cmF3IGNoZWNrIHRvIHNlZSBpZiB3b3JrIHNudWNrIGluLgotCQkJICovCi0JCQlhdG9taWNfZGVjKCZ0aHJlYWRfY291bnQpOwotCQkJd21iKCk7IC8qIG1hbmFnZXIgbXVzdCBzZWUgb3VyIGRlcGFydHVyZSBmaXJzdCAqLwotCQkJaWYgKGxpc3RfZW1wdHkoJmFzeW5jX3BlbmRpbmcpKQotCQkJCWJyZWFrOwotCQkJLyoKLQkJCSAqIHdvb3BzIHdvcmsgY2FtZSBpbiBiZXR3ZWVuIHVzIHRpbWluZyBvdXQgYW5kIHVzCi0JCQkgKiBzaWduaW5nIG9mZjsgd2UgbmVlZCB0byBzdGF5IGFsaXZlIGFuZCBrZWVwIHdvcmtpbmcuCi0JCQkgKi8KLQkJCWF0b21pY19pbmMoJnRocmVhZF9jb3VudCk7Ci0JCX0KLQl9Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJmFzeW5jX25ldywgJndxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFzeW5jX21hbmFnZXJfdGhyZWFkKHZvaWQgKnVudXNlZCkKLXsKLQlERUNMQVJFX1dBSVRRVUVVRSh3cSwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJmFzeW5jX25ldywgJndxKTsKLQotCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWludCB0YywgZWM7Ci0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQotCQl0YyA9IGF0b21pY19yZWFkKCZ0aHJlYWRfY291bnQpOwotCQlybWIoKTsKLQkJZWMgPSBhdG9taWNfcmVhZCgmZW50cnlfY291bnQpOwotCi0JCXdoaWxlICh0YyA8IGVjICYmIHRjIDwgTUFYX1RIUkVBRFMpIHsKLQkJCWlmIChJU19FUlIoa3RocmVhZF9ydW4oYXN5bmNfdGhyZWFkLCBOVUxMLCAiYXN5bmMvJWkiLAotCQkJCQkgICAgICAgdGMpKSkgewotCQkJCW1zbGVlcCgxMDApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYXRvbWljX2luYygmdGhyZWFkX2NvdW50KTsKLQkJCXRjKys7Ci0JCX0KLQotCQlzY2hlZHVsZSgpOwotCX0KLQlyZW1vdmVfd2FpdF9xdWV1ZSgmYXN5bmNfbmV3LCAmd3EpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFzeW5jX2luaXQodm9pZCkKLXsKLQlhc3luY19lbmFibGVkID0KLQkJIUlTX0VSUihrdGhyZWFkX3J1bihhc3luY19tYW5hZ2VyX3RocmVhZCwgTlVMTCwgImFzeW5jL21nciIpKTsKLQotCVdBUk5fT04oIWFzeW5jX2VuYWJsZWQpOwotCXJldHVybiAwOwotfQotCi1jb3JlX2luaXRjYWxsKGFzeW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCA4Mjk2YWE1Li5kOTYwNDU3IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtNTYsNyArNTYsNiBAQAogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5oIGIva2VybmVsL2F1ZGl0LmgKaW5kZXggMjA4Njg3Yi4uZjcyMDZkYiAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmgKKysrIGIva2VybmVsL2F1ZGl0LmgKQEAgLTEwMywyMSArMTAzLDI3IEBACiBleHRlcm4gdm9pZCBhdWRpdF9mcmVlX3J1bGVfcmN1KHN0cnVjdCByY3VfaGVhZCAqKTsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGl0X2ZpbHRlcl9saXN0W107CiAKK2V4dGVybiBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2R1cGVfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKm9sZCk7CisKIC8qIGF1ZGl0IHdhdGNoIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXVkaXRfd2F0Y2hfaW5vZGUoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCk7Ci1leHRlcm4gZGV2X3QgYXVkaXRfd2F0Y2hfZGV2KHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpOworI2lmZGVmIENPTkZJR19BVURJVF9XQVRDSAogZXh0ZXJuIHZvaWQgYXVkaXRfcHV0X3dhdGNoKHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpOwogZXh0ZXJuIHZvaWQgYXVkaXRfZ2V0X3dhdGNoKHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpOwogZXh0ZXJuIGludCBhdWRpdF90b193YXRjaChzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlLCBjaGFyICpwYXRoLCBpbnQgbGVuLCB1MzIgb3ApOwotZXh0ZXJuIGludCBhdWRpdF9hZGRfd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSk7Ci1leHRlcm4gdm9pZCBhdWRpdF9yZW1vdmVfd2F0Y2goc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCk7Ci1leHRlcm4gdm9pZCBhdWRpdF9yZW1vdmVfd2F0Y2hfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKLWV4dGVybiB2b2lkIGF1ZGl0X2lub3RpZnlfdW5yZWdpc3RlcihzdHJ1Y3QgbGlzdF9oZWFkICppbl9saXN0KTsKK2V4dGVybiBpbnQgYXVkaXRfYWRkX3dhdGNoKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsIHN0cnVjdCBsaXN0X2hlYWQgKipsaXN0KTsKK2V4dGVybiB2b2lkIGF1ZGl0X3JlbW92ZV93YXRjaF9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUpOwogZXh0ZXJuIGNoYXIgKmF1ZGl0X3dhdGNoX3BhdGgoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCk7Ci1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqYXVkaXRfd2F0Y2hfcnVsZXMoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCk7CitleHRlcm4gaW50IGF1ZGl0X3dhdGNoX2NvbXBhcmUoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCwgdW5zaWduZWQgbG9uZyBpbm8sIGRldl90IGRldik7CisjZWxzZQorI2RlZmluZSBhdWRpdF9wdXRfd2F0Y2godykge30KKyNkZWZpbmUgYXVkaXRfZ2V0X3dhdGNoKHcpIHt9CisjZGVmaW5lIGF1ZGl0X3RvX3dhdGNoKGssIHAsIGwsIG8pICgtRUlOVkFMKQorI2RlZmluZSBhdWRpdF9hZGRfd2F0Y2goaywgbCkgKC1FSU5WQUwpCisjZGVmaW5lIGF1ZGl0X3JlbW92ZV93YXRjaF9ydWxlKGspIEJVRygpCisjZGVmaW5lIGF1ZGl0X3dhdGNoX3BhdGgodykgIiIKKyNkZWZpbmUgYXVkaXRfd2F0Y2hfY29tcGFyZSh3LCBpLCBkKSAwCiAKLWV4dGVybiBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2R1cGVfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKm9sZCwKLQkJCQkJICAgc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCk7CisjZW5kaWYgLyogQ09ORklHX0FVRElUX1dBVENIICovCiAKICNpZmRlZiBDT05GSUdfQVVESVRfVFJFRQogZXh0ZXJuIHN0cnVjdCBhdWRpdF9jaHVuayAqYXVkaXRfdHJlZV9sb29rdXAoY29uc3Qgc3RydWN0IGlub2RlICopOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0X3RyZWUuYyBiL2tlcm5lbC9hdWRpdF90cmVlLmMKaW5kZXggNDZhNTdiNS4uN2YxOGQzYSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0X3RyZWUuYworKysgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgImF1ZGl0LmgiCi0jaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5X2JhY2tlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgpAQCAtMjIsNyArMjIsNyBAQAogCiBzdHJ1Y3QgYXVkaXRfY2h1bmsgewogCXN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKLQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCB3YXRjaDsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayBtYXJrOwogCXN0cnVjdCBsaXN0X2hlYWQgdHJlZXM7CQkvKiB3aXRoIHJvb3QgaGVyZSAqLwogCWludCBkZWFkOwogCWludCBjb3VudDsKQEAgLTU5LDcgKzU5LDcgQEAKICAqIHRyZWUgaXMgcmVmY291bnRlZDsgb25lIHJlZmVyZW5jZSBmb3IgInNvbWUgcnVsZXMgb24gcnVsZXNfbGlzdCByZWZlciB0bwogICogaXQiLCBvbmUgZm9yIGVhY2ggY2h1bmsgd2l0aCBwb2ludGVyIHRvIGl0LgogICoKLSAqIGNodW5rIGlzIHJlZmNvdW50ZWQgYnkgZW1iZWRkZWQgaW5vdGlmeV93YXRjaCArIC5yZWZzIChub24temVybyByZWZjb3VudAorICogY2h1bmsgaXMgcmVmY291bnRlZCBieSBlbWJlZGRlZCBmc25vdGlmeV9tYXJrICsgLnJlZnMgKG5vbi16ZXJvIHJlZmNvdW50CiAgKiBvZiB3YXRjaCBjb250cmlidXRlcyAxIHRvIC5yZWZzKS4KICAqCiAgKiBub2RlLmluZGV4IGFsbG93cyB0byBnZXQgZnJvbSBub2RlLmxpc3QgdG8gY29udGFpbmluZyBjaHVuay4KQEAgLTY4LDcgKzY4LDcgQEAKICAqIHRoYXQgbWFrZXMgYSBkaWZmZXJlbmNlLiAgU29tZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IGlub3RpZnlfaGFuZGxlICpydHJlZV9paDsKK3N0YXRpYyBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmF1ZGl0X3RyZWVfZ3JvdXA7CiAKIHN0YXRpYyBzdHJ1Y3QgYXVkaXRfdHJlZSAqYWxsb2NfdHJlZShjb25zdCBjaGFyICpzKQogewpAQCAtMTExLDI5ICsxMTEsNiBAQAogCXJldHVybiB0cmVlLT5wYXRobmFtZTsKIH0KIAotc3RhdGljIHN0cnVjdCBhdWRpdF9jaHVuayAqYWxsb2NfY2h1bmsoaW50IGNvdW50KQotewotCXN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bms7Ci0Jc2l6ZV90IHNpemU7Ci0JaW50IGk7Ci0KLQlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IGF1ZGl0X2NodW5rLCBvd25lcnMpICsgY291bnQgKiBzaXplb2Yoc3RydWN0IG5vZGUpOwotCWNodW5rID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNodW5rKQotCQlyZXR1cm4gTlVMTDsKLQotCUlOSVRfTElTVF9IRUFEKCZjaHVuay0+aGFzaCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNodW5rLT50cmVlcyk7Ci0JY2h1bmstPmNvdW50ID0gY291bnQ7Ci0JYXRvbWljX2xvbmdfc2V0KCZjaHVuay0+cmVmcywgMSk7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmNodW5rLT5vd25lcnNbaV0ubGlzdCk7Ci0JCWNodW5rLT5vd25lcnNbaV0uaW5kZXggPSBpOwotCX0KLQlpbm90aWZ5X2luaXRfd2F0Y2goJmNodW5rLT53YXRjaCk7Ci0JcmV0dXJuIGNodW5rOwotfQotCiBzdGF0aWMgdm9pZCBmcmVlX2NodW5rKHN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmspCiB7CiAJaW50IGk7CkBAIC0xNTcsNiArMTM0LDM1IEBACiAJYXVkaXRfcHV0X2NodW5rKGNodW5rKTsKIH0KIAorc3RhdGljIHZvaWQgYXVkaXRfdHJlZV9kZXN0cm95X3dhdGNoKHN0cnVjdCBmc25vdGlmeV9tYXJrICplbnRyeSkKK3sKKwlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgYXVkaXRfY2h1bmssIG1hcmspOworCWNhbGxfcmN1KCZjaHVuay0+aGVhZCwgX19wdXRfY2h1bmspOworfQorCitzdGF0aWMgc3RydWN0IGF1ZGl0X2NodW5rICphbGxvY19jaHVuayhpbnQgY291bnQpCit7CisJc3RydWN0IGF1ZGl0X2NodW5rICpjaHVuazsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgaTsKKworCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3QgYXVkaXRfY2h1bmssIG93bmVycykgKyBjb3VudCAqIHNpemVvZihzdHJ1Y3Qgbm9kZSk7CisJY2h1bmsgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghY2h1bmspCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJmNodW5rLT5oYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmY2h1bmstPnRyZWVzKTsKKwljaHVuay0+Y291bnQgPSBjb3VudDsKKwlhdG9taWNfbG9uZ19zZXQoJmNodW5rLT5yZWZzLCAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmY2h1bmstPm93bmVyc1tpXS5saXN0KTsKKwkJY2h1bmstPm93bmVyc1tpXS5pbmRleCA9IGk7CisJfQorCWZzbm90aWZ5X2luaXRfbWFyaygmY2h1bmstPm1hcmssIGF1ZGl0X3RyZWVfZGVzdHJveV93YXRjaCk7CisJcmV0dXJuIGNodW5rOworfQorCiBlbnVtIHtIQVNIX1NJWkUgPSAxMjh9Owogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY2h1bmtfaGFzaF9oZWFkc1tIQVNIX1NJWkVdOwogc3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhoYXNoX2xvY2spOwpAQCAtMTY3LDEwICsxNzMsMTUgQEAKIAlyZXR1cm4gY2h1bmtfaGFzaF9oZWFkcyArIG4gJSBIQVNIX1NJWkU7CiB9CiAKLS8qIGhhc2hfbG9jayBpcyBoZWxkIGJ5IGNhbGxlciAqLworLyogaGFzaF9sb2NrICYgZW50cnktPmxvY2sgaXMgaGVsZCBieSBjYWxsZXIgKi8KIHN0YXRpYyB2b2lkIGluc2VydF9oYXNoKHN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmspCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9IGNodW5rX2hhc2goY2h1bmstPndhdGNoLmlub2RlKTsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZW50cnkgPSAmY2h1bmstPm1hcms7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCWlmICghZW50cnktPmkuaW5vZGUpCisJCXJldHVybjsKKwlsaXN0ID0gY2h1bmtfaGFzaChlbnRyeS0+aS5pbm9kZSk7CiAJbGlzdF9hZGRfcmN1KCZjaHVuay0+aGFzaCwgbGlzdCk7CiB9CiAKQEAgLTE4MSw3ICsxOTIsOCBAQAogCXN0cnVjdCBhdWRpdF9jaHVuayAqcDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIGxpc3QsIGhhc2gpIHsKLQkJaWYgKHAtPndhdGNoLmlub2RlID09IGlub2RlKSB7CisJCS8qIG1hcmsuaW5vZGUgbWF5IGhhdmUgZ29uZSBOVUxMLCBidXQgd2hvIGNhcmVzPyAqLworCQlpZiAocC0+bWFyay5pLmlub2RlID09IGlub2RlKSB7CiAJCQlhdG9taWNfbG9uZ19pbmMoJnAtPnJlZnMpOwogCQkJcmV0dXJuIHA7CiAJCX0KQEAgLTIxMCwzOCArMjIyLDE5IEBACiBzdGF0aWMgdm9pZCB1bnRhZ19jaHVuayhzdHJ1Y3Qgbm9kZSAqcCkKIHsKIAlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gZmluZF9jaHVuayhwKTsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZW50cnkgPSAmY2h1bmstPm1hcms7CiAJc3RydWN0IGF1ZGl0X2NodW5rICpuZXc7CiAJc3RydWN0IGF1ZGl0X3RyZWUgKm93bmVyOwogCWludCBzaXplID0gY2h1bmstPmNvdW50IC0gMTsKIAlpbnQgaSwgajsKIAotCWlmICghcGluX2lub3RpZnlfd2F0Y2goJmNodW5rLT53YXRjaCkpIHsKLQkJLyoKLQkJICogRmlsZXN5c3RlbSBpcyBzaHV0dGluZyBkb3duOyBhbGwgd2F0Y2hlcyBhcmUgZ2V0dGluZwotCQkgKiBldmljdGVkLCBqdXN0IHRha2UgaXQgb2ZmIHRoZSBub2RlIGxpc3QgZm9yIHRoaXMKLQkJICogdHJlZSBhbmQgbGV0IHRoZSBldmljdGlvbiBsb2dpY3MgdGFrZSBjYXJlIG9mIHRoZQotCQkgKiByZXN0LgotCQkgKi8KLQkJb3duZXIgPSBwLT5vd25lcjsKLQkJaWYgKG93bmVyLT5yb290ID09IGNodW5rKSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZvd25lci0+c2FtZV9yb290KTsKLQkJCW93bmVyLT5yb290ID0gTlVMTDsKLQkJfQotCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKLQkJcC0+b3duZXIgPSBOVUxMOwotCQlwdXRfdHJlZShvd25lcik7Ci0JCXJldHVybjsKLQl9CisJZnNub3RpZnlfZ2V0X21hcmsoZW50cnkpOwogCiAJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CiAKLQkvKgotCSAqIHBpbl9pbm90aWZ5X3dhdGNoKCkgc3VjY2VlZGVkLCBzbyB0aGUgd2F0Y2ggd29uJ3QgZ28gYXdheQotCSAqIGZyb20gdW5kZXIgdXMuCi0JICovCi0JbXV0ZXhfbG9jaygmY2h1bmstPndhdGNoLmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlpZiAoY2h1bmstPmRlYWQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjaHVuay0+d2F0Y2guaW5vZGUtPmlub3RpZnlfbXV0ZXgpOworCXNwaW5fbG9jaygmZW50cnktPmxvY2spOworCWlmIChjaHVuay0+ZGVhZCB8fCAhZW50cnktPmkuaW5vZGUpIHsKKwkJc3Bpbl91bmxvY2soJmVudHJ5LT5sb2NrKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTYsMTYgKzI0OSwxNyBAQAogCQlsaXN0X2RlbF9pbml0KCZwLT5saXN0KTsKIAkJbGlzdF9kZWxfcmN1KCZjaHVuay0+aGFzaCk7CiAJCXNwaW5fdW5sb2NrKCZoYXNoX2xvY2spOwotCQlpbm90aWZ5X2V2aWN0X3dhdGNoKCZjaHVuay0+d2F0Y2gpOwotCQltdXRleF91bmxvY2soJmNodW5rLT53YXRjaC5pbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JCXB1dF9pbm90aWZ5X3dhdGNoKCZjaHVuay0+d2F0Y2gpOworCQlzcGluX3VubG9jaygmZW50cnktPmxvY2spOworCQlmc25vdGlmeV9kZXN0cm95X21hcmsoZW50cnkpOworCQlmc25vdGlmeV9wdXRfbWFyayhlbnRyeSk7CiAJCWdvdG8gb3V0OwogCX0KIAogCW5ldyA9IGFsbG9jX2NodW5rKHNpemUpOwogCWlmICghbmV3KQogCQlnb3RvIEZhbGxiYWNrOwotCWlmIChpbm90aWZ5X2Nsb25lX3dhdGNoKCZjaHVuay0+d2F0Y2gsICZuZXctPndhdGNoKSA8IDApIHsKKwlmc25vdGlmeV9kdXBsaWNhdGVfbWFyaygmbmV3LT5tYXJrLCBlbnRyeSk7CisJaWYgKGZzbm90aWZ5X2FkZF9tYXJrKCZuZXctPm1hcmssIG5ldy0+bWFyay5ncm91cCwgbmV3LT5tYXJrLmkuaW5vZGUsIE5VTEwsIDEpKSB7CiAJCWZyZWVfY2h1bmsobmV3KTsKIAkJZ290byBGYWxsYmFjazsKIAl9CkBAIC0yOTgsOSArMjkyLDkgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG93bmVyLCAmbmV3LT50cmVlcywgc2FtZV9yb290KQogCQlvd25lci0+cm9vdCA9IG5ldzsKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlpbm90aWZ5X2V2aWN0X3dhdGNoKCZjaHVuay0+d2F0Y2gpOwotCW11dGV4X3VubG9jaygmY2h1bmstPndhdGNoLmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmY2h1bmstPndhdGNoKTsKKwlzcGluX3VubG9jaygmZW50cnktPmxvY2spOworCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhlbnRyeSk7CisJZnNub3RpZnlfcHV0X21hcmsoZW50cnkpOwogCWdvdG8gb3V0OwogCiBGYWxsYmFjazoKQEAgLTMxNCwzMSArMzA4LDMzIEBACiAJcC0+b3duZXIgPSBOVUxMOwogCXB1dF90cmVlKG93bmVyKTsKIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQltdXRleF91bmxvY2soJmNodW5rLT53YXRjaC5pbm9kZS0+aW5vdGlmeV9tdXRleCk7CisJc3Bpbl91bmxvY2soJmVudHJ5LT5sb2NrKTsKIG91dDoKLQl1bnBpbl9pbm90aWZ5X3dhdGNoKCZjaHVuay0+d2F0Y2gpOworCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKIAlzcGluX2xvY2soJmhhc2hfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgY3JlYXRlX2NodW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhdWRpdF90cmVlICp0cmVlKQogeworCXN0cnVjdCBmc25vdGlmeV9tYXJrICplbnRyeTsKIAlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gYWxsb2NfY2h1bmsoMSk7CiAJaWYgKCFjaHVuaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoaW5vdGlmeV9hZGRfd2F0Y2gocnRyZWVfaWgsICZjaHVuay0+d2F0Y2gsIGlub2RlLCBJTl9JR05PUkVEIHwgSU5fREVMRVRFX1NFTEYpIDwgMCkgeworCWVudHJ5ID0gJmNodW5rLT5tYXJrOworCWlmIChmc25vdGlmeV9hZGRfbWFyayhlbnRyeSwgYXVkaXRfdHJlZV9ncm91cCwgaW5vZGUsIE5VTEwsIDApKSB7CiAJCWZyZWVfY2h1bmsoY2h1bmspOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKLQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CisJc3Bpbl9sb2NrKCZlbnRyeS0+bG9jayk7CiAJc3Bpbl9sb2NrKCZoYXNoX2xvY2spOwogCWlmICh0cmVlLT5nb25lcikgewogCQlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKIAkJY2h1bmstPmRlYWQgPSAxOwotCQlpbm90aWZ5X2V2aWN0X3dhdGNoKCZjaHVuay0+d2F0Y2gpOwotCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQkJcHV0X2lub3RpZnlfd2F0Y2goJmNodW5rLT53YXRjaCk7CisJCXNwaW5fdW5sb2NrKCZlbnRyeS0+bG9jayk7CisJCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyayhlbnRyeSk7CisJCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKIAkJcmV0dXJuIDA7CiAJfQogCWNodW5rLT5vd25lcnNbMF0uaW5kZXggPSAoMVUgPDwgMzEpOwpAQCAtMzUxLDMwICszNDcsMzEgQEAKIAl9CiAJaW5zZXJ0X2hhc2goY2h1bmspOwogCXNwaW5fdW5sb2NrKCZoYXNoX2xvY2spOwotCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZlbnRyeS0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIHRoZSBmaXJzdCB0YWdnZWQgaW5vZGUgYmVjb21lcyByb290IG9mIHRyZWUgKi8KIHN0YXRpYyBpbnQgdGFnX2NodW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhdWRpdF90cmVlICp0cmVlKQogewotCXN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaDsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqb2xkX2VudHJ5LCAqY2h1bmtfZW50cnk7CiAJc3RydWN0IGF1ZGl0X3RyZWUgKm93bmVyOwogCXN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmssICpvbGQ7CiAJc3RydWN0IG5vZGUgKnA7CiAJaW50IG47CiAKLQlpZiAoaW5vdGlmeV9maW5kX3dhdGNoKHJ0cmVlX2loLCBpbm9kZSwgJndhdGNoKSA8IDApCisJb2xkX2VudHJ5ID0gZnNub3RpZnlfZmluZF9pbm9kZV9tYXJrKGF1ZGl0X3RyZWVfZ3JvdXAsIGlub2RlKTsKKwlpZiAoIW9sZF9lbnRyeSkKIAkJcmV0dXJuIGNyZWF0ZV9jaHVuayhpbm9kZSwgdHJlZSk7CiAKLQlvbGQgPSBjb250YWluZXJfb2Yod2F0Y2gsIHN0cnVjdCBhdWRpdF9jaHVuaywgd2F0Y2gpOworCW9sZCA9IGNvbnRhaW5lcl9vZihvbGRfZW50cnksIHN0cnVjdCBhdWRpdF9jaHVuaywgbWFyayk7CiAKIAkvKiBhcmUgd2UgYWxyZWFkeSB0aGVyZT8gKi8KIAlzcGluX2xvY2soJmhhc2hfbG9jayk7CiAJZm9yIChuID0gMDsgbiA8IG9sZC0+Y291bnQ7IG4rKykgewogCQlpZiAob2xkLT5vd25lcnNbbl0ub3duZXIgPT0gdHJlZSkgewogCQkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7Ci0JCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJCQlmc25vdGlmeV9wdXRfbWFyayhvbGRfZW50cnkpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC0zODIsMjUgKzM3OSw0NCBAQAogCiAJY2h1bmsgPSBhbGxvY19jaHVuayhvbGQtPmNvdW50ICsgMSk7CiAJaWYgKCFjaHVuaykgewotCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJCWZzbm90aWZ5X3B1dF9tYXJrKG9sZF9lbnRyeSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlpZiAoaW5vdGlmeV9jbG9uZV93YXRjaCgmb2xkLT53YXRjaCwgJmNodW5rLT53YXRjaCkgPCAwKSB7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7CisJY2h1bmtfZW50cnkgPSAmY2h1bmstPm1hcms7CisKKwlzcGluX2xvY2soJm9sZF9lbnRyeS0+bG9jayk7CisJaWYgKCFvbGRfZW50cnktPmkuaW5vZGUpIHsKKwkJLyogb2xkX2VudHJ5IGlzIGJlaW5nIHNob3QsIGxldHMganVzdCBsaWUgKi8KKwkJc3Bpbl91bmxvY2soJm9sZF9lbnRyeS0+bG9jayk7CisJCWZzbm90aWZ5X3B1dF9tYXJrKG9sZF9lbnRyeSk7CiAJCWZyZWVfY2h1bmsoY2h1bmspOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlmc25vdGlmeV9kdXBsaWNhdGVfbWFyayhjaHVua19lbnRyeSwgb2xkX2VudHJ5KTsKKwlpZiAoZnNub3RpZnlfYWRkX21hcmsoY2h1bmtfZW50cnksIGNodW5rX2VudHJ5LT5ncm91cCwgY2h1bmtfZW50cnktPmkuaW5vZGUsIE5VTEwsIDEpKSB7CisJCXNwaW5fdW5sb2NrKCZvbGRfZW50cnktPmxvY2spOworCQlmcmVlX2NodW5rKGNodW5rKTsKKwkJZnNub3RpZnlfcHV0X21hcmsob2xkX2VudHJ5KTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQorCisJLyogZXZlbiB0aG91Z2ggd2UgaG9sZCBvbGRfZW50cnktPmxvY2ssIHRoaXMgaXMgc2FmZSBzaW5jZSBjaHVua19lbnRyeS0+bG9jayBjb3VsZCBORVZFUiBoYXZlIGJlZW4gZ3JhYmJlZCBiZWZvcmUgKi8KKwlzcGluX2xvY2soJmNodW5rX2VudHJ5LT5sb2NrKTsKIAlzcGluX2xvY2soJmhhc2hfbG9jayk7CisKKwkvKiB3ZSBub3cgaG9sZCBvbGRfZW50cnktPmxvY2ssIGNodW5rX2VudHJ5LT5sb2NrLCBhbmQgaGFzaF9sb2NrICovCiAJaWYgKHRyZWUtPmdvbmVyKSB7CiAJCXNwaW5fdW5sb2NrKCZoYXNoX2xvY2spOwogCQljaHVuay0+ZGVhZCA9IDE7Ci0JCWlub3RpZnlfZXZpY3Rfd2F0Y2goJmNodW5rLT53YXRjaCk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7Ci0JCXB1dF9pbm90aWZ5X3dhdGNoKCZjaHVuay0+d2F0Y2gpOworCQlzcGluX3VubG9jaygmY2h1bmtfZW50cnktPmxvY2spOworCQlzcGluX3VubG9jaygmb2xkX2VudHJ5LT5sb2NrKTsKKworCQlmc25vdGlmeV9kZXN0cm95X21hcmsoY2h1bmtfZW50cnkpOworCisJCWZzbm90aWZ5X3B1dF9tYXJrKGNodW5rX2VudHJ5KTsKKwkJZnNub3RpZnlfcHV0X21hcmsob2xkX2VudHJ5KTsKIAkJcmV0dXJuIDA7CiAJfQogCWxpc3RfcmVwbGFjZV9pbml0KCZvbGQtPnRyZWVzLCAmY2h1bmstPnRyZWVzKTsKQEAgLTQyNiwxMCArNDQyLDExIEBACiAJCWxpc3RfYWRkKCZ0cmVlLT5zYW1lX3Jvb3QsICZjaHVuay0+dHJlZXMpOwogCX0KIAlzcGluX3VubG9jaygmaGFzaF9sb2NrKTsKLQlpbm90aWZ5X2V2aWN0X3dhdGNoKCZvbGQtPndhdGNoKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQlwdXRfaW5vdGlmeV93YXRjaCgmb2xkLT53YXRjaCk7IC8qIHBhaXIgdG8gaW5vdGlmeV9maW5kX3dhdGNoICovCi0JcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOyAvKiBhbmQga2lsbCBpdCAqLworCXNwaW5fdW5sb2NrKCZjaHVua19lbnRyeS0+bG9jayk7CisJc3Bpbl91bmxvY2soJm9sZF9lbnRyeS0+bG9jayk7CisJZnNub3RpZnlfZGVzdHJveV9tYXJrKG9sZF9lbnRyeSk7CisJZnNub3RpZnlfcHV0X21hcmsob2xkX2VudHJ5KTsgLyogcGFpciB0byBmc25vdGlmeV9maW5kIG1hcmtfZW50cnkgKi8KKwlmc25vdGlmeV9wdXRfbWFyayhvbGRfZW50cnkpOyAvKiBhbmQga2lsbCBpdCAqLwogCXJldHVybiAwOwogfQogCkBAIC01ODQsNyArNjAxLDkgQEAKIAogCQlzcGluX2xvY2soJmhhc2hfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnRyZWUtPmNodW5rcywgbGlzdCkgewotCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbmRfY2h1bmsobm9kZSktPndhdGNoLmlub2RlOworCQkJc3RydWN0IGF1ZGl0X2NodW5rICpjaHVuayA9IGZpbmRfY2h1bmsobm9kZSk7CisJCQkvKiB0aGlzIGNvdWxkIGJlIE5VTEwgaWYgdGhlIHdhdGNoIGlzIGRpZWluZyBlbHNlIHdoZXJlLi4uICovCisJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2h1bmstPm1hcmsuaS5pbm9kZTsKIAkJCW5vZGUtPmluZGV4IHw9IDFVPDwzMTsKIAkJCWlmIChpdGVyYXRlX21vdW50cyhjb21wYXJlX3Jvb3QsIGlub2RlLCByb290X21udCkpCiAJCQkJbm9kZS0+aW5kZXggJj0gfigxVTw8MzEpOwpAQCAtODQ2LDcgKzg2NSw2IEBACiAgKiAgSGVyZSBjb21lcyB0aGUgc3R1ZmYgYXN5bmNocm9ub3VzIHRvIGF1ZGl0Y3RsIG9wZXJhdGlvbnMKICAqLwogCi0vKiBpbm9kZS0+aW5vdGlmeV9tdXRleCBpcyBsb2NrZWQgKi8KIHN0YXRpYyB2b2lkIGV2aWN0X2NodW5rKHN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmspCiB7CiAJc3RydWN0IGF1ZGl0X3RyZWUgKm93bmVyOwpAQCAtODg1LDM1ICs5MDMsNDYgQEAKIAltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsIHUzMiB3ZCwgdTMyIG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqZG5hbWUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW50IGF1ZGl0X3RyZWVfaGFuZGxlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgc3RydWN0IGZzbm90aWZ5X21hcmsgKmlub2RlX21hcmssCisJCQkJICAgc3RydWN0IGZzbm90aWZ5X21hcmsgKnZmc21vbnV0X21hcmssCisJCQkJICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCkKIHsKLQlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gY29udGFpbmVyX29mKHdhdGNoLCBzdHJ1Y3QgYXVkaXRfY2h1bmssIHdhdGNoKTsKLQotCWlmIChtYXNrICYgSU5fSUdOT1JFRCkgewotCQlldmljdF9jaHVuayhjaHVuayk7Ci0JCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQl9CisJQlVHKCk7CisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3N0YXRpYyB2b2lkIGF1ZGl0X3RyZWVfZnJlZWluZ19tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICplbnRyeSwgc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCkKIHsKLQlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gY29udGFpbmVyX29mKHdhdGNoLCBzdHJ1Y3QgYXVkaXRfY2h1bmssIHdhdGNoKTsKLQljYWxsX3JjdSgmY2h1bmstPmhlYWQsIF9fcHV0X2NodW5rKTsKKwlzdHJ1Y3QgYXVkaXRfY2h1bmsgKmNodW5rID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgYXVkaXRfY2h1bmssIG1hcmspOworCisJZXZpY3RfY2h1bmsoY2h1bmspOworCWZzbm90aWZ5X3B1dF9tYXJrKGVudHJ5KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgcnRyZWVfaW5vdGlmeV9vcHMgPSB7Ci0JLmhhbmRsZV9ldmVudAk9IGhhbmRsZV9ldmVudCwKLQkuZGVzdHJveV93YXRjaAk9IGRlc3Ryb3lfd2F0Y2gsCitzdGF0aWMgYm9vbCBhdWRpdF90cmVlX3NlbmRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgIHN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLAorCQkJCSAgc3RydWN0IGZzbm90aWZ5X21hcmsgKnZmc21vdW50X21hcmssCisJCQkJICBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV90eXBlKQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmc25vdGlmeV9vcHMgYXVkaXRfdHJlZV9vcHMgPSB7CisJLmhhbmRsZV9ldmVudCA9IGF1ZGl0X3RyZWVfaGFuZGxlX2V2ZW50LAorCS5zaG91bGRfc2VuZF9ldmVudCA9IGF1ZGl0X3RyZWVfc2VuZF9ldmVudCwKKwkuZnJlZV9ncm91cF9wcml2ID0gTlVMTCwKKwkuZnJlZV9ldmVudF9wcml2ID0gTlVMTCwKKwkuZnJlZWluZ19tYXJrID0gYXVkaXRfdHJlZV9mcmVlaW5nX21hcmssCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhdWRpdF90cmVlX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIAotCXJ0cmVlX2loID0gaW5vdGlmeV9pbml0KCZydHJlZV9pbm90aWZ5X29wcyk7Ci0JaWYgKElTX0VSUihydHJlZV9paCkpCi0JCWF1ZGl0X3BhbmljKCJjYW5ub3QgaW5pdGlhbGl6ZSBpbm90aWZ5IGhhbmRsZSBmb3IgcmVjdHJlZSB3YXRjaGVzIik7CisJYXVkaXRfdHJlZV9ncm91cCA9IGZzbm90aWZ5X2FsbG9jX2dyb3VwKCZhdWRpdF90cmVlX29wcyk7CisJaWYgKElTX0VSUihhdWRpdF90cmVlX2dyb3VwKSkKKwkJYXVkaXRfcGFuaWMoImNhbm5vdCBpbml0aWFsaXplIGZzbm90aWZ5IGdyb3VwIGZvciByZWN0cmVlIHdhdGNoZXMiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBIQVNIX1NJWkU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmNodW5rX2hhc2hfaGVhZHNbaV0pOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0X3dhdGNoLmMgYi9rZXJuZWwvYXVkaXRfd2F0Y2guYwppbmRleCA4ZGY0MzY5Li42YmYyMzA2IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRfd2F0Y2guYworKysgYi9rZXJuZWwvYXVkaXRfd2F0Y2guYwpAQCAtMjQsMTggKzI0LDE4IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeV9iYWNrZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAiYXVkaXQuaCIKIAogLyoKICAqIFJlZmVyZW5jZSBjb3VudGluZzoKICAqCi0gKiBhdWRpdF9wYXJlbnQ6IGxpZmV0aW1lIGlzIGZyb20gYXVkaXRfaW5pdF9wYXJlbnQoKSB0byByZWNlaXB0IG9mIGFuIElOX0lHTk9SRUQKKyAqIGF1ZGl0X3BhcmVudDogbGlmZXRpbWUgaXMgZnJvbSBhdWRpdF9pbml0X3BhcmVudCgpIHRvIHJlY2VpcHQgb2YgYW4gRlNfSUdOT1JFRAogICogCWV2ZW50LiAgRWFjaCBhdWRpdF93YXRjaCBob2xkcyBhIHJlZmVyZW5jZSB0byBpdHMgYXNzb2NpYXRlZCBwYXJlbnQuCiAgKgogICogYXVkaXRfd2F0Y2g6IGlmIGFkZGVkIHRvIGxpc3RzLCBsaWZldGltZSBpcyBmcm9tIGF1ZGl0X2luaXRfd2F0Y2goKSB0bwpAQCAtNTEsNDAgKzUxLDYxIEBACiAJdW5zaWduZWQgbG9uZwkJaW5vOwkvKiBhc3NvY2lhdGVkIGlub2RlIG51bWJlciAqLwogCXN0cnVjdCBhdWRpdF9wYXJlbnQJKnBhcmVudDsgLyogYXNzb2NpYXRlZCBwYXJlbnQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXdsaXN0OwkvKiBlbnRyeSBpbiBwYXJlbnQtPndhdGNoZXMgbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQJcnVsZXM7CS8qIGFzc29jaWF0ZWQgcnVsZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJ1bGVzOwkvKiBhbmNob3IgZm9yIGtydWxlLT5ybGlzdCAqLwogfTsKIAogc3RydWN0IGF1ZGl0X3BhcmVudCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlpbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeSByZWdpc3RyYXRpb24gbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQJd2F0Y2hlczsgLyogYXNzb2NpYXRlZCB3YXRjaGVzICovCi0Jc3RydWN0IGlub3RpZnlfd2F0Y2gJd2RhdGE7CS8qIGlub3RpZnkgd2F0Y2ggZGF0YSAqLwotCXVuc2lnbmVkCQlmbGFnczsJLyogc3RhdHVzIGZsYWdzICovCisJc3RydWN0IGxpc3RfaGVhZAl3YXRjaGVzOyAvKiBhbmNob3IgZm9yIGF1ZGl0X3dhdGNoLT53bGlzdCAqLworCXN0cnVjdCBmc25vdGlmeV9tYXJrIG1hcms7IC8qIGZzbm90aWZ5IG1hcmsgb24gdGhlIGlub2RlICovCiB9OwogCi0vKiBJbm90aWZ5IGhhbmRsZS4gKi8KLXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqYXVkaXRfaWg7CisvKiBmc25vdGlmeSBoYW5kbGUuICovCitzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmF1ZGl0X3dhdGNoX2dyb3VwOwogCi0vKgotICogYXVkaXRfcGFyZW50IHN0YXR1cyBmbGFnczoKLSAqCi0gKiBBVURJVF9QQVJFTlRfSU5WQUxJRCAtIHNldCBhbnl0aW1lIHJ1bGVzL3dhdGNoZXMgYXJlIGF1dG8tcmVtb3ZlZCBkdWUgdG8KLSAqIGEgZmlsZXN5c3RlbSBldmVudCB0byBlbnN1cmUgd2UncmUgYWRkaW5nIGF1ZGl0IHdhdGNoZXMgdG8gYSB2YWxpZCBwYXJlbnQuCi0gKiBUZWNobmljYWxseSBub3QgbmVlZGVkIGZvciBJTl9ERUxFVEVfU0VMRiBvciBJTl9VTk1PVU5UIGV2ZW50cywgYXMgd2UgY2Fubm90Ci0gKiByZWNlaXZlIHRoZW0gd2hpbGUgd2UgaGF2ZSBuYW1laWRhdGEsIGJ1dCBtdXN0IGJlIHVzZWQgZm9yIElOX01PVkVfU0VMRiB3aGljaAotICogd2UgY2FuIHJlY2VpdmUgd2hpbGUgaG9sZGluZyBuYW1laWRhdGEuCi0gKi8KLSNkZWZpbmUgQVVESVRfUEFSRU5UX0lOVkFMSUQJMHgwMDEKKy8qIGZzbm90aWZ5IGV2ZW50cyB3ZSBjYXJlIGFib3V0LiAqLworI2RlZmluZSBBVURJVF9GU19XQVRDSCAoRlNfTU9WRSB8IEZTX0NSRUFURSB8IEZTX0RFTEVURSB8IEZTX0RFTEVURV9TRUxGIHxcCisJCQlGU19NT1ZFX1NFTEYgfCBGU19FVkVOVF9PTl9DSElMRCkKIAotLyogSW5vdGlmeSBldmVudHMgd2UgY2FyZSBhYm91dC4gKi8KLSNkZWZpbmUgQVVESVRfSU5fV0FUQ0ggSU5fTU9WRXxJTl9DUkVBVEV8SU5fREVMRVRFfElOX0RFTEVURV9TRUxGfElOX01PVkVfU0VMRgorc3RhdGljIHZvaWQgYXVkaXRfZnJlZV9wYXJlbnQoc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50KQoreworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBhcmVudC0+d2F0Y2hlcykpOworCWtmcmVlKHBhcmVudCk7Cit9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X2ZyZWVfcGFyZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoKQorc3RhdGljIHZvaWQgYXVkaXRfd2F0Y2hfZnJlZV9tYXJrKHN0cnVjdCBmc25vdGlmeV9tYXJrICplbnRyeSkKIHsKIAlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CiAKLQlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOwotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBhcmVudC0+d2F0Y2hlcykpOwotCWtmcmVlKHBhcmVudCk7CisJcGFyZW50ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCBtYXJrKTsKKwlhdWRpdF9mcmVlX3BhcmVudChwYXJlbnQpOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9nZXRfcGFyZW50KHN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudCkKK3sKKwlpZiAobGlrZWx5KHBhcmVudCkpCisJCWZzbm90aWZ5X2dldF9tYXJrKCZwYXJlbnQtPm1hcmspOworfQorCitzdGF0aWMgdm9pZCBhdWRpdF9wdXRfcGFyZW50KHN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudCkKK3sKKwlpZiAobGlrZWx5KHBhcmVudCkpCisJCWZzbm90aWZ5X3B1dF9tYXJrKCZwYXJlbnQtPm1hcmspOworfQorCisvKgorICogRmluZCBhbmQgcmV0dXJuIHRoZSBhdWRpdF9wYXJlbnQgb24gdGhlIGdpdmVuIGlub2RlLiAgSWYgZm91bmQgYSByZWZlcmVuY2UKKyAqIGlzIHRha2VuIG9uIHRoaXMgcGFyZW50LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdWRpdF9wYXJlbnQgKmF1ZGl0X2ZpbmRfcGFyZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgZnNub3RpZnlfbWFyayAqZW50cnk7CisKKwllbnRyeSA9IGZzbm90aWZ5X2ZpbmRfaW5vZGVfbWFyayhhdWRpdF93YXRjaF9ncm91cCwgaW5vZGUpOworCWlmIChlbnRyeSkKKwkJcGFyZW50ID0gY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCBtYXJrKTsKKworCXJldHVybiBwYXJlbnQ7CiB9CiAKIHZvaWQgYXVkaXRfZ2V0X3dhdGNoKHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCkBAIC0xMDUsNyArMTI2LDcgQEAKIHZvaWQgYXVkaXRfcmVtb3ZlX3dhdGNoKHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCiB7CiAJbGlzdF9kZWwoJndhdGNoLT53bGlzdCk7Ci0JcHV0X2lub3RpZnlfd2F0Y2goJndhdGNoLT5wYXJlbnQtPndkYXRhKTsKKwlhdWRpdF9wdXRfcGFyZW50KHdhdGNoLT5wYXJlbnQpOwogCXdhdGNoLT5wYXJlbnQgPSBOVUxMOwogCWF1ZGl0X3B1dF93YXRjaCh3YXRjaCk7IC8qIG1hdGNoIGluaXRpYWwgZ2V0ICovCiB9CkBAIC0xMTUsNDIgKzEzNiwzMiBAQAogCXJldHVybiB3YXRjaC0+cGF0aDsKIH0KIAotc3RydWN0IGxpc3RfaGVhZCAqYXVkaXRfd2F0Y2hfcnVsZXMoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKK2ludCBhdWRpdF93YXRjaF9jb21wYXJlKHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gsIHVuc2lnbmVkIGxvbmcgaW5vLCBkZXZfdCBkZXYpCiB7Ci0JcmV0dXJuICZ3YXRjaC0+cnVsZXM7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgYXVkaXRfd2F0Y2hfaW5vZGUoc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKLXsKLQlyZXR1cm4gd2F0Y2gtPmlubzsKLX0KLQotZGV2X3QgYXVkaXRfd2F0Y2hfZGV2KHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCi17Ci0JcmV0dXJuIHdhdGNoLT5kZXY7CisJcmV0dXJuICh3YXRjaC0+aW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKSAmJgorCQkod2F0Y2gtPmlubyA9PSBpbm8pICYmCisJCSh3YXRjaC0+ZGV2ID09IGRldik7CiB9CiAKIC8qIEluaXRpYWxpemUgYSBwYXJlbnQgd2F0Y2ggZW50cnkuICovCiBzdGF0aWMgc3RydWN0IGF1ZGl0X3BhcmVudCAqYXVkaXRfaW5pdF9wYXJlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmRwKQogeworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZHAtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKLQlzMzIgd2Q7CisJaW50IHJldDsKIAogCXBhcmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJlbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXBhcmVudCkpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJSU5JVF9MSVNUX0hFQUQoJnBhcmVudC0+d2F0Y2hlcyk7Ci0JcGFyZW50LT5mbGFncyA9IDA7CiAKLQlpbm90aWZ5X2luaXRfd2F0Y2goJnBhcmVudC0+d2RhdGEpOwotCS8qIGdyYWIgYSByZWYgc28gaW5vdGlmeSB3YXRjaCBoYW5ncyBhcm91bmQgdW50aWwgd2UgdGFrZSBhdWRpdF9maWx0ZXJfbXV0ZXggKi8KLQlnZXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7Ci0Jd2QgPSBpbm90aWZ5X2FkZF93YXRjaChhdWRpdF9paCwgJnBhcmVudC0+d2RhdGEsCi0JCQkgICAgICAgbmRwLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwgQVVESVRfSU5fV0FUQ0gpOwotCWlmICh3ZCA8IDApIHsKLQkJYXVkaXRfZnJlZV9wYXJlbnQoJnBhcmVudC0+d2RhdGEpOwotCQlyZXR1cm4gRVJSX1BUUih3ZCk7CisJZnNub3RpZnlfaW5pdF9tYXJrKCZwYXJlbnQtPm1hcmssIGF1ZGl0X3dhdGNoX2ZyZWVfbWFyayk7CisJcGFyZW50LT5tYXJrLm1hc2sgPSBBVURJVF9GU19XQVRDSDsKKwlyZXQgPSBmc25vdGlmeV9hZGRfbWFyaygmcGFyZW50LT5tYXJrLCBhdWRpdF93YXRjaF9ncm91cCwgaW5vZGUsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWF1ZGl0X2ZyZWVfcGFyZW50KHBhcmVudCk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJfQogCiAJcmV0dXJuIHBhcmVudDsKQEAgLTE3OSw3ICsxOTAsNyBAQAogewogCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2g7CiAKLQlpZiAoIWF1ZGl0X2loKQorCWlmICghYXVkaXRfd2F0Y2hfZ3JvdXApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChwYXRoWzBdICE9ICcvJyB8fCBwYXRoW2xlbi0xXSA9PSAnLycgfHwKQEAgLTIxNyw3ICsyMjgsNyBAQAogCiAJbmV3LT5kZXYgPSBvbGQtPmRldjsKIAluZXctPmlubyA9IG9sZC0+aW5vOwotCWdldF9pbm90aWZ5X3dhdGNoKCZvbGQtPnBhcmVudC0+d2RhdGEpOworCWF1ZGl0X2dldF9wYXJlbnQob2xkLT5wYXJlbnQpOwogCW5ldy0+cGFyZW50ID0gb2xkLT5wYXJlbnQ7CiAKIG91dDoKQEAgLTI1MSwxNSArMjYyLDE5IEBACiAJc3RydWN0IGF1ZGl0X2VudHJ5ICpvZW50cnksICpuZW50cnk7CiAKIAltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCS8qIFJ1biBhbGwgb2YgdGhlIHdhdGNoZXMgb24gdGhpcyBwYXJlbnQgbG9va2luZyBmb3IgdGhlIG9uZSB0aGF0CisJICogbWF0Y2hlcyB0aGUgZ2l2ZW4gZG5hbWUgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3dhdGNoLCBuZXh0dywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKIAkJaWYgKGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgb3dhdGNoLT5wYXRoLCBOVUxMKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIElmIHRoZSB1cGRhdGUgaW52b2x2ZXMgaW52YWxpZGF0aW5nIHJ1bGVzLCBkbyB0aGUgaW5vZGUtYmFzZWQKIAkJICogZmlsdGVyaW5nIG5vdywgc28gd2UgZG9uJ3Qgb21pdCByZWNvcmRzLiAqLwotCQlpZiAoaW52YWxpZGF0aW5nICYmIGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpCisJCWlmIChpbnZhbGlkYXRpbmcgJiYgIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkKIAkJCWF1ZGl0X2ZpbHRlcl9pbm9kZXMoY3VycmVudCwgY3VycmVudC0+YXVkaXRfY29udGV4dCk7CiAKKwkJLyogdXBkYXRpbmcgaW5vIHdpbGwgbGlrZWx5IGNoYW5nZSB3aGljaCBhdWRpdF9oYXNoX2xpc3Qgd2UKKwkJICogYXJlIG9uIHNvIHdlIG5lZWQgYSBuZXcgd2F0Y2ggZm9yIHRoZSBuZXcgbGlzdCAqLwogCQlud2F0Y2ggPSBhdWRpdF9kdXBlX3dhdGNoKG93YXRjaCk7CiAJCWlmIChJU19FUlIobndhdGNoKSkgewogCQkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwpAQCAtMjc1LDEyICsyOTAsMjEgQEAKIAkJCWxpc3RfZGVsKCZvZW50cnktPnJ1bGUucmxpc3QpOwogCQkJbGlzdF9kZWxfcmN1KCZvZW50cnktPmxpc3QpOwogCi0JCQluZW50cnkgPSBhdWRpdF9kdXBlX3J1bGUoJm9lbnRyeS0+cnVsZSwgbndhdGNoKTsKKwkJCW5lbnRyeSA9IGF1ZGl0X2R1cGVfcnVsZSgmb2VudHJ5LT5ydWxlKTsKIAkJCWlmIChJU19FUlIobmVudHJ5KSkgewogCQkJCWxpc3RfZGVsKCZvZW50cnktPnJ1bGUubGlzdCk7CiAJCQkJYXVkaXRfcGFuaWMoImVycm9yIHVwZGF0aW5nIHdhdGNoLCByZW1vdmluZyIpOwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgaCA9IGF1ZGl0X2hhc2hfaW5vKCh1MzIpaW5vKTsKKworCQkJCS8qCisJCQkJICogbmVudHJ5LT5ydWxlLndhdGNoID09IG9lbnRyeS0+cnVsZS53YXRjaCBzbworCQkJCSAqIHdlIG11c3QgZHJvcCB0aGF0IHJlZmVyZW5jZSBhbmQgc2V0IGl0IHRvIG91cgorCQkJCSAqIG5ldyB3YXRjaC4KKwkJCQkgKi8KKwkJCQlhdWRpdF9wdXRfd2F0Y2gobmVudHJ5LT5ydWxlLndhdGNoKTsKKwkJCQlhdWRpdF9nZXRfd2F0Y2gobndhdGNoKTsKKwkJCQluZW50cnktPnJ1bGUud2F0Y2ggPSBud2F0Y2g7CiAJCQkJbGlzdF9hZGQoJm5lbnRyeS0+cnVsZS5ybGlzdCwgJm53YXRjaC0+cnVsZXMpOwogCQkJCWxpc3RfYWRkX3JjdSgmbmVudHJ5LT5saXN0LCAmYXVkaXRfaW5vZGVfaGFzaFtoXSk7CiAJCQkJbGlzdF9yZXBsYWNlKCZvZW50cnktPnJ1bGUubGlzdCwKQEAgLTMxMiw3ICszMzYsNiBAQAogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKIAogCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7Ci0JcGFyZW50LT5mbGFncyB8PSBBVURJVF9QQVJFTlRfSU5WQUxJRDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodywgbmV4dHcsICZwYXJlbnQtPndhdGNoZXMsIHdsaXN0KSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyLCBuZXh0ciwgJnctPnJ1bGVzLCBybGlzdCkgewogCQkJZSA9IGNvbnRhaW5lcl9vZihyLCBzdHJ1Y3QgYXVkaXRfZW50cnksIHJ1bGUpOwpAQCAtMzI1LDIwICszNDgsOCBAQAogCQlhdWRpdF9yZW1vdmVfd2F0Y2godyk7CiAJfQogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKLX0KIAotLyogVW5yZWdpc3RlciBpbm90aWZ5IHdhdGNoZXMgZm9yIHBhcmVudHMgb24gaW5fbGlzdC4KLSAqIEdlbmVyYXRlcyBhbiBJTl9JR05PUkVEIGV2ZW50LiAqLwotdm9pZCBhdWRpdF9pbm90aWZ5X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfaGVhZCAqaW5fbGlzdCkKLXsKLQlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwLCAqbjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBpbl9saXN0LCBpbGlzdCkgewotCQlsaXN0X2RlbCgmcC0+aWxpc3QpOwotCQlpbm90aWZ5X3JtX3dhdGNoKGF1ZGl0X2loLCAmcC0+d2RhdGEpOwotCQkvKiB0aGUgdW5waW4gbWF0Y2hpbmcgdGhlIHBpbiBpbiBhdWRpdF9kb19kZWxfcnVsZSgpICovCi0JCXVucGluX2lub3RpZnlfd2F0Y2goJnAtPndkYXRhKTsKLQl9CisJZnNub3RpZnlfZGVzdHJveV9tYXJrKCZwYXJlbnQtPm1hcmspOwogfQogCiAvKiBHZXQgcGF0aCBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIGFkZGluZyB3YXRjaGVzLiAqLwpAQCAtMzg5LDcgKzQwMCw3IEBACiAJfQogfQogCi0vKiBBc3NvY2lhdGUgdGhlIGdpdmVuIHJ1bGUgd2l0aCBhbiBleGlzdGluZyBwYXJlbnQgaW5vdGlmeV93YXRjaC4KKy8qIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gcnVsZSB3aXRoIGFuIGV4aXN0aW5nIHBhcmVudC4KICAqIENhbGxlciBtdXN0IGhvbGQgYXVkaXRfZmlsdGVyX211dGV4LiAqLwogc3RhdGljIHZvaWQgYXVkaXRfYWRkX3RvX3BhcmVudChzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlLAogCQkJCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudCkKQEAgLTM5Nyw2ICs0MDgsOCBAQAogCXN0cnVjdCBhdWRpdF93YXRjaCAqdywgKndhdGNoID0ga3J1bGUtPndhdGNoOwogCWludCB3YXRjaF9mb3VuZCA9IDA7CiAKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmYXVkaXRfZmlsdGVyX211dGV4KSk7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwYXJlbnQtPndhdGNoZXMsIHdsaXN0KSB7CiAJCWlmIChzdHJjbXAod2F0Y2gtPnBhdGgsIHctPnBhdGgpKQogCQkJY29udGludWU7CkBAIC00MTMsNyArNDI2LDcgQEAKIAl9CiAKIAlpZiAoIXdhdGNoX2ZvdW5kKSB7Ci0JCWdldF9pbm90aWZ5X3dhdGNoKCZwYXJlbnQtPndkYXRhKTsKKwkJYXVkaXRfZ2V0X3BhcmVudChwYXJlbnQpOwogCQl3YXRjaC0+cGFyZW50ID0gcGFyZW50OwogCiAJCWxpc3RfYWRkKCZ3YXRjaC0+d2xpc3QsICZwYXJlbnQtPndhdGNoZXMpOwpAQCAtNDIzLDEzICs0MzYsMTIgQEAKIAogLyogRmluZCBhIG1hdGNoaW5nIHdhdGNoIGVudHJ5LCBvciBhZGQgdGhpcyBvbmUuCiAgKiBDYWxsZXIgbXVzdCBob2xkIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KLWludCBhdWRpdF9hZGRfd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSkKK2ludCBhdWRpdF9hZGRfd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwgc3RydWN0IGxpc3RfaGVhZCAqKmxpc3QpCiB7CiAJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCA9IGtydWxlLT53YXRjaDsKLQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaV93YXRjaDsKIAlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQ7CiAJc3RydWN0IG5hbWVpZGF0YSAqbmRwID0gTlVMTCwgKm5kdyA9IE5VTEw7Ci0JaW50IHJldCA9IDA7CisJaW50IGgsIHJldCA9IDA7CiAKIAltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiAKQEAgLTQ0MSw0NyArNDUzLDM4IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwogCS8qIHVwZGF0ZSB3YXRjaCBmaWx0ZXIgZmllbGRzICovCiAJaWYgKG5kdykgewogCQl3YXRjaC0+ZGV2ID0gbmR3LT5wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19kZXY7CiAJCXdhdGNoLT5pbm8gPSBuZHctPnBhdGguZGVudHJ5LT5kX2lub2RlLT5pX2lubzsKIAl9CiAKLQkvKiBUaGUgYXVkaXRfZmlsdGVyX211dGV4IG11c3Qgbm90IGJlIGhlbGQgZHVyaW5nIGlub3RpZnkgY2FsbHMgYmVjYXVzZQotCSAqIHdlIGhvbGQgaXQgZHVyaW5nIGlub3RpZnkgZXZlbnQgY2FsbGJhY2sgcHJvY2Vzc2luZy4gIElmIGFuIGV4aXN0aW5nCi0JICogaW5vdGlmeSB3YXRjaCBpcyBmb3VuZCwgaW5vdGlmeV9maW5kX3dhdGNoKCkgZ3JhYnMgYSByZWZlcmVuY2UgYmVmb3JlCi0JICogcmV0dXJuaW5nLgotCSAqLwotCWlmIChpbm90aWZ5X2ZpbmRfd2F0Y2goYXVkaXRfaWgsIG5kcC0+cGF0aC5kZW50cnktPmRfaW5vZGUsCi0JCQkgICAgICAgJmlfd2F0Y2gpIDwgMCkgeworCS8qIGVpdGhlciBmaW5kIGFuIG9sZCBwYXJlbnQgb3IgYXR0YWNoIGEgbmV3IG9uZSAqLworCXBhcmVudCA9IGF1ZGl0X2ZpbmRfcGFyZW50KG5kcC0+cGF0aC5kZW50cnktPmRfaW5vZGUpOworCWlmICghcGFyZW50KSB7CiAJCXBhcmVudCA9IGF1ZGl0X2luaXRfcGFyZW50KG5kcCk7CiAJCWlmIChJU19FUlIocGFyZW50KSkgewotCQkJLyogY2FsbGVyIGV4cGVjdHMgbXV0ZXggbG9ja2VkICovCi0JCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQkJcmV0ID0gUFRSX0VSUihwYXJlbnQpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCX0gZWxzZQotCQlwYXJlbnQgPSBjb250YWluZXJfb2YoaV93YXRjaCwgc3RydWN0IGF1ZGl0X3BhcmVudCwgd2RhdGEpOworCX0KIAotCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJYXVkaXRfYWRkX3RvX3BhcmVudChrcnVsZSwgcGFyZW50KTsKIAotCS8qIHBhcmVudCB3YXMgbW92ZWQgYmVmb3JlIHdlIHRvb2sgYXVkaXRfZmlsdGVyX211dGV4ICovCi0JaWYgKHBhcmVudC0+ZmxhZ3MgJiBBVURJVF9QQVJFTlRfSU5WQUxJRCkKLQkJcmV0ID0gLUVOT0VOVDsKLQllbHNlCi0JCWF1ZGl0X2FkZF90b19wYXJlbnQoa3J1bGUsIHBhcmVudCk7CisJLyogbWF0Y2ggZ2V0IGluIGF1ZGl0X2ZpbmRfcGFyZW50IG9yIGF1ZGl0X2luaXRfcGFyZW50ICovCisJYXVkaXRfcHV0X3BhcmVudChwYXJlbnQpOwogCi0JLyogbWF0Y2ggZ2V0IGluIGF1ZGl0X2luaXRfcGFyZW50IG9yIGlub3RpZnlfZmluZF93YXRjaCAqLwotCXB1dF9pbm90aWZ5X3dhdGNoKCZwYXJlbnQtPndkYXRhKTsKLQorCWggPSBhdWRpdF9oYXNoX2lubygodTMyKXdhdGNoLT5pbm8pOworCSpsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CiBlcnJvcjoKIAlhdWRpdF9wdXRfbmQobmRwLCBuZHcpOwkJLyogTlVMTCBhcmdzIE9LICovCiAJcmV0dXJuIHJldDsKIAogfQogCi12b2lkIGF1ZGl0X3JlbW92ZV93YXRjaF9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit2b2lkIGF1ZGl0X3JlbW92ZV93YXRjaF9ydWxlKHN0cnVjdCBhdWRpdF9rcnVsZSAqa3J1bGUpCiB7CiAJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCA9IGtydWxlLT53YXRjaDsKIAlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQgPSB3YXRjaC0+cGFyZW50OwpAQCAtNDkyLDUzICs0OTUsNzQgQEAKIAkJYXVkaXRfcmVtb3ZlX3dhdGNoKHdhdGNoKTsKIAogCQlpZiAobGlzdF9lbXB0eSgmcGFyZW50LT53YXRjaGVzKSkgewotCQkJLyogUHV0IHBhcmVudCBvbiB0aGUgaW5vdGlmeSB1bi1yZWdpc3RyYXRpb24KLQkJCSAqIGxpc3QuICBHcmFiIGEgcmVmZXJlbmNlIGJlZm9yZSByZWxlYXNpbmcKLQkJCSAqIGF1ZGl0X2ZpbHRlcl9tdXRleCwgdG8gYmUgcmVsZWFzZWQgaW4KLQkJCSAqIGF1ZGl0X2lub3RpZnlfdW5yZWdpc3RlcigpLgotCQkJICogSWYgZmlsZXN5c3RlbSBpcyBnb2luZyBhd2F5LCBqdXN0IGxlYXZlCi0JCQkgKiB0aGUgc3Vja2VyIGFsb25lLCBldmljdGlvbiB3aWxsIHRha2UKLQkJCSAqIGNhcmUgb2YgaXQuICovCi0JCQlpZiAocGluX2lub3RpZnlfd2F0Y2goJnBhcmVudC0+d2RhdGEpKQotCQkJCWxpc3RfYWRkKCZwYXJlbnQtPmlsaXN0LCBsaXN0KTsKKwkJCWF1ZGl0X2dldF9wYXJlbnQocGFyZW50KTsKKwkJCWZzbm90aWZ5X2Rlc3Ryb3lfbWFyaygmcGFyZW50LT5tYXJrKTsKKwkJCWF1ZGl0X3B1dF9wYXJlbnQocGFyZW50KTsKIAkJfQogCX0KIH0KIAotLyogVXBkYXRlIHdhdGNoIGRhdGEgaW4gYXVkaXQgcnVsZXMgYmFzZWQgb24gaW5vdGlmeSBldmVudHMuICovCi1zdGF0aWMgdm9pZCBhdWRpdF9oYW5kbGVfaWV2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoLCB1MzIgd2QsIHUzMiBtYXNrLAotCQkJIHUzMiBjb29raWUsIGNvbnN0IGNoYXIgKmRuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGJvb2wgYXVkaXRfd2F0Y2hfc2hvdWxkX3NlbmRfZXZlbnQoc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqaW5vZGVfbWFyaywKKwkJCQkJICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCQkJICBfX3UzMiBtYXNrLCB2b2lkICpkYXRhLCBpbnQgZGF0YV90eXBlKQogewotCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKLQotCXBhcmVudCA9IGNvbnRhaW5lcl9vZihpX3dhdGNoLCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCB3ZGF0YSk7Ci0KLQlpZiAobWFzayAmIChJTl9DUkVBVEV8SU5fTU9WRURfVE8pICYmIGlub2RlKQotCQlhdWRpdF91cGRhdGVfd2F0Y2gocGFyZW50LCBkbmFtZSwgaW5vZGUtPmlfc2ItPnNfZGV2LAotCQkJCSAgIGlub2RlLT5pX2lubywgMCk7Ci0JZWxzZSBpZiAobWFzayAmIChJTl9ERUxFVEV8SU5fTU9WRURfRlJPTSkpCi0JCWF1ZGl0X3VwZGF0ZV93YXRjaChwYXJlbnQsIGRuYW1lLCAoZGV2X3QpLTEsICh1bnNpZ25lZCBsb25nKS0xLCAxKTsKLQkvKiBpbm90aWZ5IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyB0aGUgd2F0Y2ggYW5kIHNlbmRzIElOX0lHTk9SRUQgKi8KLQllbHNlIGlmIChtYXNrICYgKElOX0RFTEVURV9TRUxGfElOX1VOTU9VTlQpKQotCQlhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMocGFyZW50KTsKLQkvKiBpbm90aWZ5IGRvZXMgbm90IHJlbW92ZSB0aGUgd2F0Y2gsIHNvIHJlbW92ZSBpdCBtYW51YWxseSAqLwotCWVsc2UgaWYobWFzayAmIElOX01PVkVfU0VMRikgewotCQlhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMocGFyZW50KTsKLQkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGF1ZGl0X2loLCBpX3dhdGNoKTsKLQl9IGVsc2UgaWYgKG1hc2sgJiBJTl9JR05PUkVEKQotCQlwdXRfaW5vdGlmeV93YXRjaChpX3dhdGNoKTsKKyAgICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgYXVkaXRfaW5vdGlmeV9vcHMgPSB7Ci0JLmhhbmRsZV9ldmVudCAgID0gYXVkaXRfaGFuZGxlX2lldmVudCwKLQkuZGVzdHJveV93YXRjaCAgPSBhdWRpdF9mcmVlX3BhcmVudCwKKy8qIFVwZGF0ZSB3YXRjaCBkYXRhIGluIGF1ZGl0IHJ1bGVzIGJhc2VkIG9uIGZzbm90aWZ5IGV2ZW50cy4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfd2F0Y2hfaGFuZGxlX2V2ZW50KHN0cnVjdCBmc25vdGlmeV9ncm91cCAqZ3JvdXAsCisJCQkJICAgIHN0cnVjdCBmc25vdGlmeV9tYXJrICppbm9kZV9tYXJrLAorCQkJCSAgICBzdHJ1Y3QgZnNub3RpZnlfbWFyayAqdmZzbW91bnRfbWFyaywKKwkJCQkgICAgc3RydWN0IGZzbm90aWZ5X2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCV9fdTMyIG1hc2sgPSBldmVudC0+bWFzazsKKwljb25zdCBjaGFyICpkbmFtZSA9IGV2ZW50LT5maWxlX25hbWU7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50OworCisJcGFyZW50ID0gY29udGFpbmVyX29mKGlub2RlX21hcmssIHN0cnVjdCBhdWRpdF9wYXJlbnQsIG1hcmspOworCisJQlVHX09OKGdyb3VwICE9IGF1ZGl0X3dhdGNoX2dyb3VwKTsKKworCXN3aXRjaCAoZXZlbnQtPmRhdGFfdHlwZSkgeworCWNhc2UgKEZTTk9USUZZX0VWRU5UX0ZJTEUpOgorCQlpbm9kZSA9IGV2ZW50LT5maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCQlicmVhazsKKwljYXNlIChGU05PVElGWV9FVkVOVF9JTk9ERSk6CisJCWlub2RlID0gZXZlbnQtPmlub2RlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJaW5vZGUgPSBOVUxMOworCQlicmVhazsKKwl9OworCisJaWYgKG1hc2sgJiAoRlNfQ1JFQVRFfEZTX01PVkVEX1RPKSAmJiBpbm9kZSkKKwkJYXVkaXRfdXBkYXRlX3dhdGNoKHBhcmVudCwgZG5hbWUsIGlub2RlLT5pX3NiLT5zX2RldiwgaW5vZGUtPmlfaW5vLCAwKTsKKwllbHNlIGlmIChtYXNrICYgKEZTX0RFTEVURXxGU19NT1ZFRF9GUk9NKSkKKwkJYXVkaXRfdXBkYXRlX3dhdGNoKHBhcmVudCwgZG5hbWUsIChkZXZfdCktMSwgKHVuc2lnbmVkIGxvbmcpLTEsIDEpOworCWVsc2UgaWYgKG1hc2sgJiAoRlNfREVMRVRFX1NFTEZ8RlNfVU5NT1VOVHxGU19NT1ZFX1NFTEYpKQorCQlhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMocGFyZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZzbm90aWZ5X29wcyBhdWRpdF93YXRjaF9mc25vdGlmeV9vcHMgPSB7CisJLnNob3VsZF9zZW5kX2V2ZW50ID0gCWF1ZGl0X3dhdGNoX3Nob3VsZF9zZW5kX2V2ZW50LAorCS5oYW5kbGVfZXZlbnQgPSAJYXVkaXRfd2F0Y2hfaGFuZGxlX2V2ZW50LAorCS5mcmVlX2dyb3VwX3ByaXYgPSAJTlVMTCwKKwkuZnJlZWluZ19tYXJrID0gCU5VTEwsCisJLmZyZWVfZXZlbnRfcHJpdiA9IAlOVUxMLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXVkaXRfd2F0Y2hfaW5pdCh2b2lkKQogewotCWF1ZGl0X2loID0gaW5vdGlmeV9pbml0KCZhdWRpdF9pbm90aWZ5X29wcyk7Ci0JaWYgKElTX0VSUihhdWRpdF9paCkpCi0JCWF1ZGl0X3BhbmljKCJjYW5ub3QgaW5pdGlhbGl6ZSBpbm90aWZ5IGhhbmRsZSIpOworCWF1ZGl0X3dhdGNoX2dyb3VwID0gZnNub3RpZnlfYWxsb2NfZ3JvdXAoJmF1ZGl0X3dhdGNoX2Zzbm90aWZ5X29wcyk7CisJaWYgKElTX0VSUihhdWRpdF93YXRjaF9ncm91cCkpIHsKKwkJYXVkaXRfd2F0Y2hfZ3JvdXAgPSBOVUxMOworCQlhdWRpdF9wYW5pYygiY2Fubm90IGNyZWF0ZSBhdWRpdCBmc25vdGlmeSBncm91cCIpOworCX0KIAlyZXR1cm4gMDsKIH0KLXN1YnN5c19pbml0Y2FsbChhdWRpdF93YXRjaF9pbml0KTsKK2RldmljZV9pbml0Y2FsbChhdWRpdF93YXRjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggY2UwODA0MS4uZWI3Njc1NCAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTcxLDYgKzcxLDcgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYXVkaXRfa3J1bGUgKmVydWxlID0gJmUtPnJ1bGU7CisKIAkvKiBzb21lIHJ1bGVzIGRvbid0IGhhdmUgYXNzb2NpYXRlZCB3YXRjaGVzICovCiAJaWYgKGVydWxlLT53YXRjaCkKIAkJYXVkaXRfcHV0X3dhdGNoKGVydWxlLT53YXRjaCk7CkBAIC03NDYsOCArNzQ3LDcgQEAKICAqIHJ1bGUgd2l0aCB0aGUgbmV3IHJ1bGUgaW4gdGhlIGZpbHRlcmxpc3QsIHRoZW4gZnJlZSB0aGUgb2xkIHJ1bGUuCiAgKiBUaGUgcmxpc3QgZWxlbWVudCBpcyB1bmRlZmluZWQ7IGxpc3QgbWFuaXB1bGF0aW9ucyBhcmUgaGFuZGxlZCBhcGFydCBmcm9tCiAgKiB0aGUgaW5pdGlhbCBjb3B5LiAqLwotc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9kdXBlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpvbGQsCi0JCQkJICAgIHN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2gpCitzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2R1cGVfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKm9sZCkKIHsKIAl1MzIgZmNvdW50ID0gb2xkLT5maWVsZF9jb3VudDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwpAQCAtNzY5LDggKzc2OSw4IEBACiAJbmV3LT5wcmlvID0gb2xkLT5wcmlvOwogCW5ldy0+YnVmbGVuID0gb2xkLT5idWZsZW47CiAJbmV3LT5pbm9kZV9mID0gb2xkLT5pbm9kZV9mOwotCW5ldy0+d2F0Y2ggPSBOVUxMOwogCW5ldy0+ZmllbGRfY291bnQgPSBvbGQtPmZpZWxkX2NvdW50OworCiAJLyoKIAkgKiBub3RlIHRoYXQgd2UgYXJlIE9LIHdpdGggbm90IHJlZmNvdW50aW5nIGhlcmU7IGF1ZGl0X21hdGNoX3RyZWUoKQogCSAqIG5ldmVyIGRlcmVmZXJlbmNlcyB0cmVlIGFuZCB3ZSBjYW4ndCBnZXQgZmFsc2UgcG9zaXRpdmVzIHRoZXJlCkBAIC04MTEsOSArODExLDkgQEAKIAkJfQogCX0KIAotCWlmICh3YXRjaCkgewotCQlhdWRpdF9nZXRfd2F0Y2god2F0Y2gpOwotCQluZXctPndhdGNoID0gd2F0Y2g7CisJaWYgKG9sZC0+d2F0Y2gpIHsKKwkJYXVkaXRfZ2V0X3dhdGNoKG9sZC0+d2F0Y2gpOworCQluZXctPndhdGNoID0gb2xkLT53YXRjaDsKIAl9CiAKIAlyZXR1cm4gZW50cnk7CkBAIC04NjYsNyArODY2LDcgQEAKIAlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoID0gZW50cnktPnJ1bGUud2F0Y2g7CiAJc3RydWN0IGF1ZGl0X3RyZWUgKnRyZWUgPSBlbnRyeS0+cnVsZS50cmVlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0JaW50IGgsIGVycjsKKwlpbnQgZXJyOwogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKIAlpbnQgZG9udF9jb3VudCA9IDA7CiAKQEAgLTg4OSwxNSArODg5LDExIEBACiAKIAlpZiAod2F0Y2gpIHsKIAkJLyogYXVkaXRfZmlsdGVyX211dGV4IGlzIGRyb3BwZWQgYW5kIHJlLXRha2VuIGR1cmluZyB0aGlzIGNhbGwgKi8KLQkJZXJyID0gYXVkaXRfYWRkX3dhdGNoKCZlbnRyeS0+cnVsZSk7CisJCWVyciA9IGF1ZGl0X2FkZF93YXRjaCgmZW50cnktPnJ1bGUsICZsaXN0KTsKIAkJaWYgKGVycikgewogCQkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQkvKiBlbnRyeS0+cnVsZS53YXRjaCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBhdWRpdF9hZGRfd2F0Y2goKSAqLwotCQl3YXRjaCA9IGVudHJ5LT5ydWxlLndhdGNoOwotCQloID0gYXVkaXRfaGFzaF9pbm8oKHUzMilhdWRpdF93YXRjaF9pbm9kZSh3YXRjaCkpOwotCQlsaXN0ID0gJmF1ZGl0X2lub2RlX2hhc2hbaF07CiAJfQogCWlmICh0cmVlKSB7CiAJCWVyciA9IGF1ZGl0X2FkZF90cmVlX3J1bGUoJmVudHJ5LT5ydWxlKTsKQEAgLTk0OSw3ICs5NDUsNiBAQAogCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKIAlzdHJ1Y3QgYXVkaXRfdHJlZSAqdHJlZSA9IGVudHJ5LT5ydWxlLnRyZWU7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlMSVNUX0hFQUQoaW5vdGlmeV9saXN0KTsKIAlpbnQgcmV0ID0gMDsKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAJaW50IGRvbnRfY291bnQgPSAwOwpAQCAtOTY5LDcgKzk2NCw3IEBACiAJfQogCiAJaWYgKGUtPnJ1bGUud2F0Y2gpCi0JCWF1ZGl0X3JlbW92ZV93YXRjaF9ydWxlKCZlLT5ydWxlLCAmaW5vdGlmeV9saXN0KTsKKwkJYXVkaXRfcmVtb3ZlX3dhdGNoX3J1bGUoJmUtPnJ1bGUpOwogCiAJaWYgKGUtPnJ1bGUudHJlZSkKIAkJYXVkaXRfcmVtb3ZlX3RyZWVfcnVsZSgmZS0+cnVsZSk7CkBAIC05ODcsOSArOTgyLDYgQEAKICNlbmRpZgogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAotCWlmICghbGlzdF9lbXB0eSgmaW5vdGlmeV9saXN0KSkKLQkJYXVkaXRfaW5vdGlmeV91bnJlZ2lzdGVyKCZpbm90aWZ5X2xpc3QpOwotCiBvdXQ6CiAJaWYgKHdhdGNoKQogCQlhdWRpdF9wdXRfd2F0Y2god2F0Y2gpOyAvKiBtYXRjaCBpbml0aWFsIGdldCAqLwpAQCAtMTMyMywzMCArMTMxNSwyMyBAQAogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnkgPSBjb250YWluZXJfb2Yociwgc3RydWN0IGF1ZGl0X2VudHJ5LCBydWxlKTsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKm5lbnRyeTsKLQlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoOwotCXN0cnVjdCBhdWRpdF90cmVlICp0cmVlOwogCWludCBlcnIgPSAwOwogCiAJaWYgKCFzZWN1cml0eV9hdWRpdF9ydWxlX2tub3duKHIpKQogCQlyZXR1cm4gMDsKIAotCXdhdGNoID0gci0+d2F0Y2g7Ci0JdHJlZSA9IHItPnRyZWU7Ci0JbmVudHJ5ID0gYXVkaXRfZHVwZV9ydWxlKHIsIHdhdGNoKTsKKwluZW50cnkgPSBhdWRpdF9kdXBlX3J1bGUocik7CiAJaWYgKElTX0VSUihuZW50cnkpKSB7CiAJCS8qIHNhdmUgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkIGZvciB0aGUKIAkJICogcmV0dXJuIHZhbHVlICovCiAJCWVyciA9IFBUUl9FUlIobmVudHJ5KTsKIAkJYXVkaXRfcGFuaWMoImVycm9yIHVwZGF0aW5nIExTTSBmaWx0ZXJzIik7Ci0JCWlmICh3YXRjaCkKKwkJaWYgKHItPndhdGNoKQogCQkJbGlzdF9kZWwoJnItPnJsaXN0KTsKIAkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7CiAJCWxpc3RfZGVsKCZyLT5saXN0KTsKIAl9IGVsc2UgewotCQlpZiAod2F0Y2gpIHsKLQkJCWxpc3RfYWRkKCZuZW50cnktPnJ1bGUucmxpc3QsIGF1ZGl0X3dhdGNoX3J1bGVzKHdhdGNoKSk7Ci0JCQlsaXN0X2RlbCgmci0+cmxpc3QpOwotCQl9IGVsc2UgaWYgKHRyZWUpCisJCWlmIChyLT53YXRjaCB8fCByLT50cmVlKQogCQkJbGlzdF9yZXBsYWNlX2luaXQoJnItPnJsaXN0LCAmbmVudHJ5LT5ydWxlLnJsaXN0KTsKIAkJbGlzdF9yZXBsYWNlX3JjdSgmZW50cnktPmxpc3QsICZuZW50cnktPmxpc3QpOwogCQlsaXN0X3JlcGxhY2UoJnItPmxpc3QsICZuZW50cnktPnJ1bGUubGlzdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCAzODI4YWQ1Li4xYjMxYzEzIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIApAQCAtNTQ5LDkgKzU0OCw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBBVURJVF9XQVRDSDoKLQkJCWlmIChuYW1lICYmIGF1ZGl0X3dhdGNoX2lub2RlKHJ1bGUtPndhdGNoKSAhPSAodW5zaWduZWQgbG9uZyktMSkKLQkJCQlyZXN1bHQgPSAobmFtZS0+ZGV2ID09IGF1ZGl0X3dhdGNoX2RldihydWxlLT53YXRjaCkgJiYKLQkJCQkJICBuYW1lLT5pbm8gPT0gYXVkaXRfd2F0Y2hfaW5vZGUocnVsZS0+d2F0Y2gpKTsKKwkJCWlmIChuYW1lKQorCQkJCXJlc3VsdCA9IGF1ZGl0X3dhdGNoX2NvbXBhcmUocnVsZS0+d2F0Y2gsIG5hbWUtPmlubywgbmFtZS0+ZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RJUjoKIAkJCWlmIChjdHgpCkBAIC0xNzI2LDcgKzE3MjQsNyBAQAogCXN0cnVjdCBhdWRpdF90cmVlX3JlZnMgKnA7CiAJc3RydWN0IGF1ZGl0X2NodW5rICpjaHVuazsKIAlpbnQgY291bnQ7Ci0JaWYgKGxpa2VseShsaXN0X2VtcHR5KCZpbm9kZS0+aW5vdGlmeV93YXRjaGVzKSkpCisJaWYgKGxpa2VseShobGlzdF9lbXB0eSgmaW5vZGUtPmlfZnNub3RpZnlfbWFya3MpKSkKIAkJcmV0dXJuOwogCWNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwogCXAgPSBjb250ZXh0LT50cmVlczsKQEAgLTE3NjksNyArMTc2Nyw3IEBACiAJc2VxID0gcmVhZF9zZXFiZWdpbigmcmVuYW1lX2xvY2spOwogCWZvcig7OykgewogCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZC0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlICYmIHVubGlrZWx5KCFsaXN0X2VtcHR5KCZpbm9kZS0+aW5vdGlmeV93YXRjaGVzKSkpIHsKKwkJaWYgKGlub2RlICYmIHVubGlrZWx5KCFobGlzdF9lbXB0eSgmaW5vZGUtPmlfZnNub3RpZnlfbWFya3MpKSkgewogCQkJc3RydWN0IGF1ZGl0X2NodW5rICpjaHVuazsKIAkJCWNodW5rID0gYXVkaXRfdHJlZV9sb29rdXAoaW5vZGUpOwogCQkJaWYgKGNodW5rKSB7CkBAIC0xODM3LDEzICsxODM1LDggQEAKIAljb250ZXh0LT5uYW1lc1tjb250ZXh0LT5uYW1lX2NvdW50XS5pbm8gID0gKHVuc2lnbmVkIGxvbmcpLTE7CiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0ub3NpZCA9IDA7CiAJKytjb250ZXh0LT5uYW1lX2NvdW50OwotCWlmICghY29udGV4dC0+cHdkLmRlbnRyeSkgewotCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQkJY29udGV4dC0+cHdkID0gY3VycmVudC0+ZnMtPnB3ZDsKLQkJcGF0aF9nZXQoJmN1cnJlbnQtPmZzLT5wd2QpOwotCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCX0KLQorCWlmICghY29udGV4dC0+cHdkLmRlbnRyeSkKKwkJZ2V0X2ZzX3B3ZChjdXJyZW50LT5mcywgJmNvbnRleHQtPnB3ZCk7CiB9CiAKIC8qIGF1ZGl0X3B1dG5hbWUgLSBpbnRlcmNlcHQgYSBwdXRuYW1lIHJlcXVlc3QKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBhOGNlMDk5Li4xOTJmODhjIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogCQkJaWYgKG9wdHMtPnJlbGVhc2VfYWdlbnQpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlvcHRzLT5yZWxlYXNlX2FnZW50ID0KLQkJCQlrc3RybmR1cCh0b2tlbiArIDE0LCBQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJCQkJa3N0cm5kdXAodG9rZW4gKyAxNCwgUEFUSF9NQVggLSAxLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghb3B0cy0+cmVsZWFzZV9hZ2VudCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJfSBlbHNlIGlmICghc3RybmNtcCh0b2tlbiwgIm5hbWU9IiwgNSkpIHsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCQlpZiAob3B0cy0+bmFtZSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCW9wdHMtPm5hbWUgPSBrc3RybmR1cChuYW1lLAotCQkJCQkgICAgICBNQVhfQ0dST1VQX1JPT1RfTkFNRUxFTiwKKwkJCQkJICAgICAgTUFYX0NHUk9VUF9ST09UX05BTUVMRU4gLSAxLAogCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAkJCWlmICghb3B0cy0+bmFtZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE2MjMsNiArMTYyMyw4IEBACiAJLmtpbGxfc2IgPSBjZ3JvdXBfa2lsbF9zYiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqY2dyb3VwX2tvYmo7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCAqX19kX2NncnAoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXJldHVybiBkZW50cnktPmRfZnNkYXRhOwpAQCAtMzg5NCw5ICszODk2LDE4IEBACiAJaGhlYWQgPSBjc3Nfc2V0X2hhc2goaW5pdF9jc3Nfc2V0LnN1YnN5cyk7CiAJaGxpc3RfYWRkX2hlYWQoJmluaXRfY3NzX3NldC5obGlzdCwgaGhlYWQpOwogCUJVR19PTighaW5pdF9yb290X2lkKCZyb290bm9kZSkpOwotCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNncm91cF9mc190eXBlKTsKLQlpZiAoZXJyIDwgMCkKKworCWNncm91cF9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiY2dyb3VwIiwgZnNfa29iaik7CisJaWYgKCFjZ3JvdXBfa29iaikgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZjZ3JvdXBfZnNfdHlwZSk7CisJaWYgKGVyciA8IDApIHsKKwkJa29iamVjdF9wdXQoY2dyb3VwX2tvYmopOworCQlnb3RvIG91dDsKKwl9CiAKIAlwcm9jX2NyZWF0ZSgiY2dyb3VwcyIsIDAsIE5VTEwsICZwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggNWFkYWIwNS4uZTE2N2VmYyAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtMjc5LDExICsyNzksNiBAQAogCQlzdHJ1Y3QgY29tcGF0X3JsaW1pdCBfX3VzZXIgKnJsaW0pCiB7CiAJc3RydWN0IHJsaW1pdCByOwotCWludCByZXQ7Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcyAoKTsKLQotCWlmIChyZXNvdXJjZSA+PSBSTElNX05MSU1JVFMpCi0JCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHJsaW0sIHNpemVvZigqcmxpbSkpIHx8CiAJICAgIF9fZ2V0X3VzZXIoci5ybGltX2N1ciwgJnJsaW0tPnJsaW1fY3VyKSB8fApAQCAtMjk0LDEwICsyODksNyBAQAogCQlyLnJsaW1fY3VyID0gUkxJTV9JTkZJTklUWTsKIAlpZiAoci5ybGltX21heCA9PSBDT01QQVRfUkxJTV9JTkZJTklUWSkKIAkJci5ybGltX21heCA9IFJMSU1fSU5GSU5JVFk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3NldHJsaW1pdChyZXNvdXJjZSwgKHN0cnVjdCBybGltaXQgX191c2VyICopICZyKTsKLQlzZXRfZnMob2xkX2ZzKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBkb19wcmxpbWl0KGN1cnJlbnQsIHJlc291cmNlLCAmciwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT01QQVRfUkxJTV9PTERfSU5GSU5JVFkKQEAgLTMyOSwxNiArMzIxLDEzIEBACiAKICNlbmRpZgogCi1hc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19nZXRybGltaXQgKHVuc2lnbmVkIGludCByZXNvdXJjZSwKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2dldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCiAJCXN0cnVjdCBjb21wYXRfcmxpbWl0IF9fdXNlciAqcmxpbSkKIHsKIAlzdHJ1Y3QgcmxpbWl0IHI7CiAJaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7CiAKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfZ2V0cmxpbWl0KHJlc291cmNlLCAoc3RydWN0IHJsaW1pdCBfX3VzZXIgKikgJnIpOwotCXNldF9mcyhvbGRfZnMpOworCXJldCA9IGRvX3BybGltaXQoY3VycmVudCwgcmVzb3VyY2UsIE5VTEwsICZyKTsKIAlpZiAoIXJldCkgewogCQlpZiAoci5ybGltX2N1ciA+IENPTVBBVF9STElNX0lORklOSVRZKQogCQkJci5ybGltX2N1ciA9IENPTVBBVF9STElNX0lORklOSVRZOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDk3ZDFiNDIuLmY2ZTcyNmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTIzNSwxMSArMjM1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljcHVfaG90cGx1Z19iZWdpbigpOwotCXNldF9jcHVfYWN0aXZlKGNwdSwgZmFsc2UpOwogCWVyciA9IF9fY3B1X25vdGlmeShDUFVfRE9XTl9QUkVQQVJFIHwgbW9kLCBoY3B1LCAtMSwgJm5yX2NhbGxzKTsKIAlpZiAoZXJyKSB7Ci0JCXNldF9jcHVfYWN0aXZlKGNwdSwgdHJ1ZSk7Ci0KIAkJbnJfY2FsbHMtLTsKIAkJX19jcHVfbm90aWZ5KENQVV9ET1dOX0ZBSUxFRCB8IG1vZCwgaGNwdSwgbnJfY2FsbHMsIE5VTEwpOwogCQlwcmludGsoIiVzOiBhdHRlbXB0IHRvIHRha2UgZG93biBDUFUgJXUgZmFpbGVkXG4iLApAQCAtMjQ5LDcgKzI0Niw2IEBACiAKIAllcnIgPSBfX3N0b3BfbWFjaGluZSh0YWtlX2NwdV9kb3duLCAmdGNkX3BhcmFtLCBjcHVtYXNrX29mKGNwdSkpOwogCWlmIChlcnIpIHsKLQkJc2V0X2NwdV9hY3RpdmUoY3B1LCB0cnVlKTsKIAkJLyogQ1BVIGRpZG4ndCBkaWU6IHRlbGwgZXZlcnlvbmUuICBDYW4ndCBjb21wbGFpbi4gKi8KIAkJY3B1X25vdGlmeV9ub2ZhaWwoQ1BVX0RPV05fRkFJTEVEIHwgbW9kLCBoY3B1KTsKIApAQCAtMzIxLDggKzMxNyw2IEBACiAJCWdvdG8gb3V0X25vdGlmeTsKIAlCVUdfT04oIWNwdV9vbmxpbmUoY3B1KSk7CiAKLQlzZXRfY3B1X2FjdGl2ZShjcHUsIHRydWUpOwotCiAJLyogTm93IGNhbGwgbm90aWZpZXIgaW4gcHJlcGFyYXRpb24uICovCiAJY3B1X25vdGlmeShDUFVfT05MSU5FIHwgbW9kLCBoY3B1KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IDdjYjM3ZDguLmIyM2MwOTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTIxMTMsMzEgKzIxMTMsMTcgQEAKICAqIGJ1dCBtYWtpbmcgbm8gYWN0aXZlIHVzZSBvZiBjcHVzZXRzLgogICoKICAqIFRoaXMgcm91dGluZSBlbnN1cmVzIHRoYXQgdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgdHJhY2tzCi0gKiBjcHVfb25saW5lX21hcCBvbiBlYWNoIENQVSBob3RwbHVnIChjcHVocCkgZXZlbnQuCisgKiBjcHVfYWN0aXZlX21hc2sgb24gZWFjaCBDUFUgaG90cGx1ZyAoY3B1aHApIGV2ZW50LgogICoKICAqIENhbGxlZCB3aXRoaW4gZ2V0X29ubGluZV9jcHVzKCkuICBOZWVkcyB0byBjYWxsIGNncm91cF9sb2NrKCkKICAqIGJlZm9yZSBjYWxsaW5nIGdlbmVyYXRlX3NjaGVkX2RvbWFpbnMoKS4KICAqLwotc3RhdGljIGludCBjcHVzZXRfdHJhY2tfb25saW5lX2NwdXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWRfbmIsCi0JCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqdW51c2VkX2NwdSkKK3ZvaWQgY3B1c2V0X3VwZGF0ZV9hY3RpdmVfY3B1cyh2b2lkKQogewogCXN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0cjsKIAljcHVtYXNrX3Zhcl90ICpkb21zOwogCWludCBuZG9tczsKIAotCXN3aXRjaCAocGhhc2UpIHsKLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKLQljYXNlIENQVV9ET1dOX0ZBSUxFRDoKLQljYXNlIENQVV9ET1dOX0ZBSUxFRF9GUk9aRU46Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIE5PVElGWV9ET05FOwotCX0KLQogCWNncm91cF9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNwdW1hc2tfY29weSh0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCwgY3B1X2FjdGl2ZV9tYXNrKTsKQEAgLTIxNDgsOCArMjEzNCw2IEBACiAKIAkvKiBIYXZlIHNjaGVkdWxlciByZWJ1aWxkIHRoZSBkb21haW5zICovCiAJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMobmRvbXMsIGRvbXMsIGF0dHIpOwotCi0JcmV0dXJuIE5PVElGWV9PSzsKIH0KIAogI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwpAQCAtMjIwMyw3ICsyMTg3LDYgQEAKIAljcHVtYXNrX2NvcHkodG9wX2NwdXNldC5jcHVzX2FsbG93ZWQsIGNwdV9hY3RpdmVfbWFzayk7CiAJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXTsKIAotCWhvdGNwdV9ub3RpZmllcihjcHVzZXRfdHJhY2tfb25saW5lX2NwdXMsIDApOwogCWhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMsIDEwKTsKIAogCWNwdXNldF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJjcHVzZXQiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYyBiL2tlcm5lbC9kZWJ1Zy9rZGIva2RiX21haW4uYwppbmRleCA4NTc3ZTQ1Li4yOGI4NDQxIDEwMDY0NAotLS0gYS9rZXJuZWwvZGVidWcva2RiL2tkYl9tYWluLmMKKysrIGIva2VybmVsL2RlYnVnL2tkYi9rZGJfbWFpbi5jCkBAIC0yNTQ4LDYgKzI1NDgsNyBAQAogICovCiBzdGF0aWMgaW50IGtkYl9zdW1tYXJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKKwlzdHJ1Y3QgdGltZXNwZWMgbm93OwogCXN0cnVjdCBrZGJfdG0gdG07CiAJc3RydWN0IHN5c2luZm8gdmFsOwogCkBAIC0yNTYyLDcgKzI1NjMsOCBAQAogCWtkYl9wcmludGYoImRvbWFpbm5hbWUgJXNcbiIsIGluaXRfdXRzX25zLm5hbWUuZG9tYWlubmFtZSk7CiAJa2RiX3ByaW50ZigiY2N2ZXJzaW9uICAlc1xuIiwgX19zdHJpbmdpZnkoQ0NWRVJTSU9OKSk7CiAKLQlrZGJfZ210aW1lKCZ4dGltZSwgJnRtKTsKKwlub3cgPSBfX2N1cnJlbnRfa2VybmVsX3RpbWUoKTsKKwlrZGJfZ210aW1lKCZub3csICZ0bSk7CiAJa2RiX3ByaW50ZigiZGF0ZSAgICAgICAlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAiCiAJCSAgICJ0el9taW51dGVzd2VzdCAlZFxuIiwKIAkJMTkwMCt0bS50bV95ZWFyLCB0bS50bV9tb24rMSwgdG0udG1fbWRheSwKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGVjX2RvbWFpbi5jIGIva2VybmVsL2V4ZWNfZG9tYWluLmMKaW5kZXggZGQ2MmY4ZS4uMGRiZWFlMyAxMDA2NDQKLS0tIGEva2VybmVsL2V4ZWNfZG9tYWluLmMKKysrIGIva2VybmVsL2V4ZWNfZG9tYWluLmMKQEAgLTEzNCwyMyArMTM0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAotX19zZXRfcGVyc29uYWxpdHkodW5zaWduZWQgaW50IHBlcnNvbmFsaXR5KQoraW50IF9fc2V0X3BlcnNvbmFsaXR5KHVuc2lnbmVkIGludCBwZXJzb25hbGl0eSkKIHsKLQlzdHJ1Y3QgZXhlY19kb21haW4JKmVwLCAqb2VwOworCXN0cnVjdCBleGVjX2RvbWFpbiAqb2VwID0gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbjsKIAotCWVwID0gbG9va3VwX2V4ZWNfZG9tYWluKHBlcnNvbmFsaXR5KTsKLQlpZiAoZXAgPT0gY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbikgewotCQljdXJyZW50LT5wZXJzb25hbGl0eSA9IHBlcnNvbmFsaXR5OwotCQltb2R1bGVfcHV0KGVwLT5tb2R1bGUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KKwljdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluID0gbG9va3VwX2V4ZWNfZG9tYWluKHBlcnNvbmFsaXR5KTsKIAljdXJyZW50LT5wZXJzb25hbGl0eSA9IHBlcnNvbmFsaXR5OwotCW9lcCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW47Ci0JY3VycmVudF90aHJlYWRfaW5mbygpLT5leGVjX2RvbWFpbiA9IGVwOwotCiAJbW9kdWxlX3B1dChvZXAtPm1vZHVsZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkyLDExICsxODMsOCBAQAogewogCXVuc2lnbmVkIGludCBvbGQgPSBjdXJyZW50LT5wZXJzb25hbGl0eTsKIAotCWlmIChwZXJzb25hbGl0eSAhPSAweGZmZmZmZmZmKSB7CisJaWYgKHBlcnNvbmFsaXR5ICE9IDB4ZmZmZmZmZmYpCiAJCXNldF9wZXJzb25hbGl0eShwZXJzb25hbGl0eSk7Ci0JCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSAhPSBwZXJzb25hbGl0eSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCXJldHVybiBvbGQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCBjZWZmYzY3Li42NzFlZDU2IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTc3MSw5ICs3NzEsMTIgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuLCAqcmVhcGVyOwogCUxJU1RfSEVBRChkZWFkX2NoaWxkcmVuKTsKIAotCWV4aXRfcHRyYWNlKGZhdGhlcik7Ci0KIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJLyoKKwkgKiBOb3RlIHRoYXQgZXhpdF9wdHJhY2UoKSBhbmQgZmluZF9uZXdfcmVhcGVyKCkgbWlnaHQKKwkgKiBkcm9wIHRhc2tsaXN0X2xvY2sgYW5kIHJlYWNxdWlyZSBpdC4KKwkgKi8KKwlleGl0X3B0cmFjZShmYXRoZXIpOwogCXJlYXBlciA9IGZpbmRfbmV3X3JlYXBlcihmYXRoZXIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZmYXRoZXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCBiNmNjZTE0Li45OGI0NTA4IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTg5OSw2ICs4OTksNyBAQAogCXR0eV9hdWRpdF9mb3JrKHNpZyk7CiAKIAlzaWctPm9vbV9hZGogPSBjdXJyZW50LT5zaWduYWwtPm9vbV9hZGo7CisJc2lnLT5vb21fc2NvcmVfYWRqID0gY3VycmVudC0+c2lnbmFsLT5vb21fc2NvcmVfYWRqOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MDcsNyArOTA4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IHAtPmZsYWdzOwogCi0JbmV3X2ZsYWdzICY9IH5QRl9TVVBFUlBSSVY7CisJbmV3X2ZsYWdzICY9IH4oUEZfU1VQRVJQUklWIHwgUEZfV1FfV09SS0VSKTsKIAluZXdfZmxhZ3MgfD0gUEZfRk9SS05PRVhFQzsKIAluZXdfZmxhZ3MgfD0gUEZfU1RBUlRJTkc7CiAJcC0+ZmxhZ3MgPSBuZXdfZmxhZ3M7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCA1YzY5ZTk5Li5jZTY2OTE3IDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwogCQl4dHMgPSBfX2N1cnJlbnRfa2VybmVsX3RpbWUoKTsKLQkJdG9tID0gd2FsbF90b19tb25vdG9uaWM7CisJCXRvbSA9IF9fZ2V0X3dhbGxfdG9fbW9ub3RvbmljKCk7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7CiAKIAl4dGltID0gdGltZXNwZWNfdG9fa3RpbWUoeHRzKTsKQEAgLTE0NCwxMiArMTQ0LDggQEAKIHN0YXRpYyBpbnQgaHJ0aW1lcl9nZXRfdGFyZ2V0KGludCB0aGlzX2NwdSwgaW50IHBpbm5lZCkKIHsKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAoIXBpbm5lZCAmJiBnZXRfc3lzY3RsX3RpbWVyX21pZ3JhdGlvbigpICYmIGlkbGVfY3B1KHRoaXNfY3B1KSkgewotCQlpbnQgcHJlZmVycmVkX2NwdSA9IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIoKTsKLQotCQlpZiAocHJlZmVycmVkX2NwdSA+PSAwKQotCQkJcmV0dXJuIHByZWZlcnJlZF9jcHU7Ci0JfQorCWlmICghcGlubmVkICYmIGdldF9zeXNjdGxfdGltZXJfbWlncmF0aW9uKCkgJiYgaWRsZV9jcHUodGhpc19jcHUpKQorCQlyZXR1cm4gZ2V0X25vaHpfdGltZXJfdGFyZ2V0KCk7CiAjZW5kaWYKIAlyZXR1cm4gdGhpc19jcHU7CiB9CkBAIC02MTIsNyArNjA4LDcgQEAKIHN0YXRpYyB2b2lkIHJldHJpZ2dlcl9uZXh0X2V2ZW50KHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZTsKLQlzdHJ1Y3QgdGltZXNwZWMgcmVhbHRpbWVfb2Zmc2V0OworCXN0cnVjdCB0aW1lc3BlYyByZWFsdGltZV9vZmZzZXQsIHd0bTsKIAl1bnNpZ25lZCBsb25nIHNlcTsKIAogCWlmICghaHJ0aW1lcl9ocmVzX2FjdGl2ZSgpKQpAQCAtNjIwLDEwICs2MTYsOSBAQAogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnJlYWx0aW1lX29mZnNldCwKLQkJCQkJLXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYywKLQkJCQkJLXdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMpOworCQl3dG0gPSBfX2dldF93YWxsX3RvX21vbm90b25pYygpOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZyZWFsdGltZV9vZmZzZXQsIC13dG0udHZfc2VjLCAtd3RtLnR2X25zZWMpOwogCiAJYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCA3MWVkM2NlLi5kNzFhOTg3IDEwMDY0NAotLS0gYS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCkBAIC02Miw2ICs2Myw5IEBACiAKIHN0YXRpYyBpbnQgbnJfc2xvdHNbVFlQRV9NQVhdOwogCisvKiBLZWVwIHRyYWNrIG9mIHRoZSBicmVha3BvaW50cyBhdHRhY2hlZCB0byB0YXNrcyAqLworc3RhdGljIExJU1RfSEVBRChicF90YXNrX2hlYWQpOworCiBzdGF0aWMgaW50IGNvbnN0cmFpbnRzX2luaXRpYWxpemVkOwogCiAvKiBHYXRoZXIgdGhlIG51bWJlciBvZiB0b3RhbCBwaW5uZWQgYW5kIHVuLXBpbm5lZCBicCBpbiBhIGNwdXNldCAqLwpAQCAtMTAzLDMzICsxMDcsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YXNrX2JwX3Bpbm5lZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgZW51bSBicF90eXBlX2lkeCB0eXBlKQorLyoKKyAqIENvdW50IHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgc2FtZSB0YXNrLgorICogVGhlIGdpdmVuIGV2ZW50IG11c3QgYmUgbm90IG9uIHRoZSBsaXN0LgorICovCitzdGF0aWMgaW50IHRhc2tfYnBfcGlubmVkKHN0cnVjdCBwZXJmX2V2ZW50ICpicCwgZW51bSBicF90eXBlX2lkeCB0eXBlKQogewotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCA9IHRzay0+cGVyZl9ldmVudF9jdHhwOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IHBlcmZfZXZlbnQgKmJwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gYnAtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqaXRlcjsKIAlpbnQgY291bnQgPSAwOwogCi0JaWYgKFdBUk5fT05DRSghY3R4LCAiTm8gcGVyZiBjb250ZXh0IGZvciB0aGlzIHRhc2siKSkKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0ID0gJmN0eC0+ZXZlbnRfbGlzdDsKLQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFRoZSBjdXJyZW50IGJyZWFrcG9pbnQgY291bnRlciBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxpc3QKLQkgKiBhdCB0aGUgb3BlbigpIGNhbGxiYWNrIHRpbWUKLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJwLCBsaXN0LCBldmVudF9lbnRyeSkgewotCQlpZiAoYnAtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfQlJFQUtQT0lOVCkKLQkJCWlmIChmaW5kX3Nsb3RfaWR4KGJwKSA9PSB0eXBlKQotCQkJCWNvdW50ICs9IGh3X2JyZWFrcG9pbnRfd2VpZ2h0KGJwKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZicF90YXNrX2hlYWQsIGh3LmJwX2xpc3QpIHsKKwkJaWYgKGl0ZXItPmN0eCA9PSBjdHggJiYgZmluZF9zbG90X2lkeChpdGVyKSA9PSB0eXBlKQorCQkJY291bnQgKz0gaHdfYnJlYWtwb2ludF93ZWlnaHQoaXRlcik7CiAJfQogCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0eC0+bG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0xNDksNyArMTQxLDcgQEAKIAkJaWYgKCF0c2spCiAJCQlzbG90cy0+cGlubmVkICs9IG1heF90YXNrX2JwX3Bpbm5lZChjcHUsIHR5cGUpOwogCQllbHNlCi0JCQlzbG90cy0+cGlubmVkICs9IHRhc2tfYnBfcGlubmVkKHRzaywgdHlwZSk7CisJCQlzbG90cy0+cGlubmVkICs9IHRhc2tfYnBfcGlubmVkKGJwLCB0eXBlKTsKIAkJc2xvdHMtPmZsZXhpYmxlID0gcGVyX2NwdShucl9icF9mbGV4aWJsZVt0eXBlXSwgY3B1KTsKIAogCQlyZXR1cm47CkBAIC0xNjIsNyArMTU0LDcgQEAKIAkJaWYgKCF0c2spCiAJCQluciArPSBtYXhfdGFza19icF9waW5uZWQoY3B1LCB0eXBlKTsKIAkJZWxzZQotCQkJbnIgKz0gdGFza19icF9waW5uZWQodHNrLCB0eXBlKTsKKwkJCW5yICs9IHRhc2tfYnBfcGlubmVkKGJwLCB0eXBlKTsKIAogCQlpZiAobnIgPiBzbG90cy0+cGlubmVkKQogCQkJc2xvdHMtPnBpbm5lZCA9IG5yOwpAQCAtMTg4LDcgKzE4MCw3IEBACiAvKgogICogQWRkIGEgcGlubmVkIGJyZWFrcG9pbnQgZm9yIHRoZSBnaXZlbiB0YXNrIGluIG91ciBjb25zdHJhaW50IHRhYmxlCiAgKi8KLXN0YXRpYyB2b2lkIHRvZ2dsZV9icF90YXNrX3Nsb3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjcHUsIGJvb2wgZW5hYmxlLAorc3RhdGljIHZvaWQgdG9nZ2xlX2JwX3Rhc2tfc2xvdChzdHJ1Y3QgcGVyZl9ldmVudCAqYnAsIGludCBjcHUsIGJvb2wgZW5hYmxlLAogCQkJCWVudW0gYnBfdHlwZV9pZHggdHlwZSwgaW50IHdlaWdodCkKIHsKIAl1bnNpZ25lZCBpbnQgKnRza19waW5uZWQ7CkBAIC0xOTYsMTAgKzE4OCwxMSBAQAogCWludCBvbGRfaWR4ID0gMDsKIAlpbnQgaWR4ID0gMDsKIAotCW9sZF9jb3VudCA9IHRhc2tfYnBfcGlubmVkKHRzaywgdHlwZSk7CisJb2xkX2NvdW50ID0gdGFza19icF9waW5uZWQoYnAsIHR5cGUpOwogCW9sZF9pZHggPSBvbGRfY291bnQgLSAxOwogCWlkeCA9IG9sZF9pZHggKyB3ZWlnaHQ7CiAKKwkvKiB0c2tfcGlubmVkW25dIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgaGF2aW5nIG4gYnJlYWtwb2ludHMgKi8KIAl0c2tfcGlubmVkID0gcGVyX2NwdShucl90YXNrX2JwX3Bpbm5lZFt0eXBlXSwgY3B1KTsKIAlpZiAoZW5hYmxlKSB7CiAJCXRza19waW5uZWRbaWR4XSsrOwpAQCAtMjIyLDIzICsyMTUsMzAgQEAKIAlpbnQgY3B1ID0gYnAtPmNwdTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGJwLT5jdHgtPnRhc2s7CiAKLQkvKiBQaW5uZWQgY291bnRlciB0YXNrIHByb2ZpbGluZyAqLwotCWlmICh0c2spIHsKLQkJaWYgKGNwdSA+PSAwKSB7Ci0JCQl0b2dnbGVfYnBfdGFza19zbG90KHRzaywgY3B1LCBlbmFibGUsIHR5cGUsIHdlaWdodCk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkvKiBQaW5uZWQgY291bnRlciBjcHUgcHJvZmlsaW5nICovCisJaWYgKCF0c2spIHsKIAotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCXRvZ2dsZV9icF90YXNrX3Nsb3QodHNrLCBjcHUsIGVuYWJsZSwgdHlwZSwgd2VpZ2h0KTsKKwkJaWYgKGVuYWJsZSkKKwkJCXBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZFt0eXBlXSwgYnAtPmNwdSkgKz0gd2VpZ2h0OworCQllbHNlCisJCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWRbdHlwZV0sIGJwLT5jcHUpIC09IHdlaWdodDsKIAkJcmV0dXJuOwogCX0KIAotCS8qIFBpbm5lZCBjb3VudGVyIGNwdSBwcm9maWxpbmcgKi8KKwkvKiBQaW5uZWQgY291bnRlciB0YXNrIHByb2ZpbGluZyAqLworCisJaWYgKCFlbmFibGUpCisJCWxpc3RfZGVsKCZicC0+aHcuYnBfbGlzdCk7CisKKwlpZiAoY3B1ID49IDApIHsKKwkJdG9nZ2xlX2JwX3Rhc2tfc2xvdChicCwgY3B1LCBlbmFibGUsIHR5cGUsIHdlaWdodCk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCQl0b2dnbGVfYnBfdGFza19zbG90KGJwLCBjcHUsIGVuYWJsZSwgdHlwZSwgd2VpZ2h0KTsKKwl9CisKIAlpZiAoZW5hYmxlKQotCQlwZXJfY3B1KG5yX2NwdV9icF9waW5uZWRbdHlwZV0sIGJwLT5jcHUpICs9IHdlaWdodDsKLQllbHNlCi0JCXBlcl9jcHUobnJfY3B1X2JwX3Bpbm5lZFt0eXBlXSwgYnAtPmNwdSkgLT0gd2VpZ2h0OworCQlsaXN0X2FkZF90YWlsKCZicC0+aHcuYnBfbGlzdCwgJmJwX3Rhc2tfaGVhZCk7CiB9CiAKIC8qCkBAIC0zMTIsNiArMzEyLDEwIEBACiAJd2VpZ2h0ID0gaHdfYnJlYWtwb2ludF93ZWlnaHQoYnApOwogCiAJZmV0Y2hfYnBfYnVzeV9zbG90cygmc2xvdHMsIGJwLCB0eXBlKTsKKwkvKgorCSAqIFNpbXVsYXRlIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGJyZWFrcG9pbnQgdG8gdGhlIGNvbnN0cmFpbnRzCisJICogYW5kIHNlZSB0aGUgcmVzdWx0LgorCSAqLwogCWZldGNoX3RoaXNfc2xvdCgmc2xvdHMsIHdlaWdodCk7CiAKIAkvKiBGbGV4aWJsZSBjb3VudGVycyBuZWVkIHRvIGtlZXAgYXQgbGVhc3Qgb25lIHNsb3QgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IGUxNDk3NDguLmMzMDAzZTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiB2b2lkIF9fZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1bnNpZ25lZCBpbnQgaXJxLCBib29sIHN1c3BlbmQpCiB7CiAJaWYgKHN1c3BlbmQpIHsKLQkJaWYgKCFkZXNjLT5hY3Rpb24gfHwgKGRlc2MtPmFjdGlvbi0+ZmxhZ3MgJiBJUlFGX1RJTUVSKSkKKwkJaWYgKCFkZXNjLT5hY3Rpb24gfHwgKGRlc2MtPmFjdGlvbi0+ZmxhZ3MgJiBJUlFGX05PX1NVU1BFTkQpKQogCQkJcmV0dXJuOwogCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1NVU1BFTkRFRDsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDEzMWIxNzAuLmMwNjEzZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0xNTEsOCArMTUxLDEwIEBACiAJaW1hZ2UtPm5yX3NlZ21lbnRzID0gbnJfc2VnbWVudHM7CiAJc2VnbWVudF9ieXRlcyA9IG5yX3NlZ21lbnRzICogc2l6ZW9mKCpzZWdtZW50cyk7CiAJcmVzdWx0ID0gY29weV9mcm9tX3VzZXIoaW1hZ2UtPnNlZ21lbnQsIHNlZ21lbnRzLCBzZWdtZW50X2J5dGVzKTsKLQlpZiAocmVzdWx0KQorCWlmIChyZXN1bHQpIHsKKwkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBvdXQ7CisJfQogCiAJLyoKIAkgKiBWZXJpZnkgd2UgaGF2ZSBnb29kIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gIFRoZSBjYWxsZXIgaXMKQEAgLTgyNyw3ICs4MjksNyBAQAogCQlyZXN1bHQgPSBjb3B5X2Zyb21fdXNlcihwdHIsIGJ1ZiwgdWNodW5rKTsKIAkJa3VubWFwKHBhZ2UpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlyZXN1bHQgPSAocmVzdWx0IDwgMCkgPyByZXN1bHQgOiAtRUlPOworCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXVieXRlcyAtPSB1Y2h1bms7CkBAIC04ODIsNyArODg0LDcgQEAKIAkJa2V4ZWNfZmx1c2hfaWNhY2hlX3BhZ2UocGFnZSk7CiAJCWt1bm1hcChwYWdlKTsKIAkJaWYgKHJlc3VsdCkgewotCQkJcmVzdWx0ID0gKHJlc3VsdCA8IDApID8gcmVzdWx0IDogLUVJTzsKKwkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1Ynl0ZXMgLT0gdWNodW5rOwpkaWZmIC0tZ2l0IGEva2VybmVsL2tmaWZvLmMgYi9rZXJuZWwva2ZpZm8uYwppbmRleCAzNWVkYmUyLi40NTAyNjA0IDEwMDY0NAotLS0gYS9rZXJuZWwva2ZpZm8uYworKysgYi9rZXJuZWwva2ZpZm8uYwpAQCAtMSw4ICsxLDcgQEAKIC8qCi0gKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24uCisgKiBBIGdlbmVyaWMga2VybmVsIEZJRk8gaW1wbGVtZW50YXRpb24KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PgotICogQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWxpYW4gUG9wIDxzdGVsaWFuQHBvcGllcy5uZXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkvMjAxMCBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMSw3ICsxMCw3IEBACiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNCw0MjIgKzIzLDU3OSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAotc3RhdGljIHZvaWQgX2tmaWZvX2luaXQoc3RydWN0IGtmaWZvICpmaWZvLCB2b2lkICpidWZmZXIsCi0JCXVuc2lnbmVkIGludCBzaXplKQorLyoKKyAqIGludGVybmFsIGhlbHBlciB0byBjYWxjdWxhdGUgdGhlIHVudXNlZCBlbGVtZW50cyBpbiBhIGZpZm8KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2ZpZm9fdW51c2VkKHN0cnVjdCBfX2tmaWZvICpmaWZvKQogewotCWZpZm8tPmJ1ZmZlciA9IGJ1ZmZlcjsKLQlmaWZvLT5zaXplID0gc2l6ZTsKLQotCWtmaWZvX3Jlc2V0KGZpZm8pOworCXJldHVybiAoZmlmby0+bWFzayArIDEpIC0gKGZpZm8tPmluIC0gZmlmby0+b3V0KTsKIH0KIAotLyoqCi0gKiBrZmlmb19pbml0IC0gaW5pdGlhbGl6ZSBhIEZJRk8gdXNpbmcgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZSBidWZmZXIKLSAqIEBidWZmZXI6IHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyIHRvIGJlIHVzZWQuCi0gKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgdGhpcyBoYXMgdG8gYmUgYSBwb3dlciBvZiAyLgotICoKLSAqLwotdm9pZCBrZmlmb19pbml0KHN0cnVjdCBrZmlmbyAqZmlmbywgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK2ludCBfX2tmaWZvX2FsbG9jKHN0cnVjdCBfX2tmaWZvICpmaWZvLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJc2l6ZV90IGVzaXplLCBnZnBfdCBnZnBfbWFzaykKIHsKLQkvKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyICovCi0JQlVHX09OKCFpc19wb3dlcl9vZl8yKHNpemUpKTsKLQotCV9rZmlmb19pbml0KGZpZm8sIGJ1ZmZlciwgc2l6ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGtmaWZvX2luaXQpOwotCi0vKioKLSAqIGtmaWZvX2FsbG9jIC0gYWxsb2NhdGVzIGEgbmV3IEZJRk8gaW50ZXJuYWwgYnVmZmVyCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYXNzaWduIHRoZW4gbmV3IGJ1ZmZlcgotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLCB0aGlzIGhhdmUgdG8gYmUgYSBwb3dlciBvZiAyLgotICogQGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8ga21hbGxvYygpCi0gKgotICogVGhpcyBmdW5jdGlvbiBkeW5hbWljYWxseSBhbGxvY2F0ZXMgYSBuZXcgZmlmbyBpbnRlcm5hbCBidWZmZXIKLSAqCi0gKiBUaGUgc2l6ZSB3aWxsIGJlIHJvdW5kZWQtdXAgdG8gYSBwb3dlciBvZiAyLgotICogVGhlIGJ1ZmZlciB3aWxsIGJlIHJlbGVhc2Ugd2l0aCBrZmlmb19mcmVlKCkuCi0gKiBSZXR1cm4gMCBpZiBubyBlcnJvciwgb3RoZXJ3aXNlIHRoZSBhbiBlcnJvciBjb2RlCi0gKi8KLWludCBrZmlmb19hbGxvYyhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzaykKLXsKLQl1bnNpZ25lZCBjaGFyICpidWZmZXI7Ci0KIAkvKgotCSAqIHJvdW5kIHVwIHRvIHRoZSBuZXh0IHBvd2VyIG9mIDIsIHNpbmNlIG91ciAnbGV0IHRoZSBpbmRpY2VzCisJICogcm91bmQgZG93biB0byB0aGUgbmV4dCBwb3dlciBvZiAyLCBzaW5jZSBvdXIgJ2xldCB0aGUgaW5kaWNlcwogCSAqIHdyYXAnIHRlY2huaXF1ZSB3b3JrcyBvbmx5IGluIHRoaXMgY2FzZS4KIAkgKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoc2l6ZSkpIHsKLQkJQlVHX09OKHNpemUgPiAweDgwMDAwMDAwKTsKLQkJc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhzaXplKTsKKwlpZiAoIWlzX3Bvd2VyX29mXzIoc2l6ZSkpCisJCXNpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTsKKworCWZpZm8tPmluID0gMDsKKwlmaWZvLT5vdXQgPSAwOworCWZpZm8tPmVzaXplID0gZXNpemU7CisKKwlpZiAoc2l6ZSA8IDIpIHsKKwkJZmlmby0+ZGF0YSA9IE5VTEw7CisJCWZpZm8tPm1hc2sgPSAwOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlidWZmZXIgPSBrbWFsbG9jKHNpemUsIGdmcF9tYXNrKTsKLQlpZiAoIWJ1ZmZlcikgewotCQlfa2ZpZm9faW5pdChmaWZvLCBOVUxMLCAwKTsKKwlmaWZvLT5kYXRhID0ga21hbGxvYyhzaXplICogZXNpemUsIGdmcF9tYXNrKTsKKworCWlmICghZmlmby0+ZGF0YSkgeworCQlmaWZvLT5tYXNrID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCi0JX2tmaWZvX2luaXQoZmlmbywgYnVmZmVyLCBzaXplKTsKKwlmaWZvLT5tYXNrID0gc2l6ZSAtIDE7CiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woa2ZpZm9fYWxsb2MpOworRVhQT1JUX1NZTUJPTChfX2tmaWZvX2FsbG9jKTsKIAotLyoqCi0gKiBrZmlmb19mcmVlIC0gZnJlZXMgdGhlIEZJRk8gaW50ZXJuYWwgYnVmZmVyCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgZnJlZWQuCi0gKi8KLXZvaWQga2ZpZm9fZnJlZShzdHJ1Y3Qga2ZpZm8gKmZpZm8pCit2b2lkIF9fa2ZpZm9fZnJlZShzdHJ1Y3QgX19rZmlmbyAqZmlmbykKIHsKLQlrZnJlZShmaWZvLT5idWZmZXIpOwotCV9rZmlmb19pbml0KGZpZm8sIE5VTEwsIDApOworCWtmcmVlKGZpZm8tPmRhdGEpOworCWZpZm8tPmluID0gMDsKKwlmaWZvLT5vdXQgPSAwOworCWZpZm8tPmVzaXplID0gMDsKKwlmaWZvLT5kYXRhID0gTlVMTDsKKwlmaWZvLT5tYXNrID0gMDsKIH0KLUVYUE9SVF9TWU1CT0woa2ZpZm9fZnJlZSk7CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJlZSk7CiAKLS8qKgotICoga2ZpZm9fc2tpcCAtIHNraXAgb3V0cHV0IGRhdGEKLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAKLSAqLwotdm9pZCBrZmlmb19za2lwKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IGxlbikKK2ludCBfX2tmaWZvX2luaXQoc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgKmJ1ZmZlciwKKwkJdW5zaWduZWQgaW50IHNpemUsIHNpemVfdCBlc2l6ZSkKIHsKLQlpZiAobGVuIDwga2ZpZm9fbGVuKGZpZm8pKSB7Ci0JCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOwotCQlyZXR1cm47CisJc2l6ZSAvPSBlc2l6ZTsKKworCWlmICghaXNfcG93ZXJfb2ZfMihzaXplKSkKKwkJc2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKHNpemUpOworCisJZmlmby0+aW4gPSAwOworCWZpZm8tPm91dCA9IDA7CisJZmlmby0+ZXNpemUgPSBlc2l6ZTsKKwlmaWZvLT5kYXRhID0gYnVmZmVyOworCisJaWYgKHNpemUgPCAyKSB7CisJCWZpZm8tPm1hc2sgPSAwOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Ja2ZpZm9fcmVzZXRfb3V0KGZpZm8pOwotfQotRVhQT1JUX1NZTUJPTChrZmlmb19za2lwKTsKKwlmaWZvLT5tYXNrID0gc2l6ZSAtIDE7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX2luX2RhdGEoc3RydWN0IGtmaWZvICpmaWZvLAotCQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmKQotewotCXVuc2lnbmVkIGludCBsOwotCi0JLyoKLQkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPm91dCBpbmRleCAtYmVmb3JlLSB3ZQotCSAqIHN0YXJ0IHB1dHRpbmcgYnl0ZXMgaW50byB0aGUga2ZpZm8uCi0JICovCi0KLQlzbXBfbWIoKTsKLQotCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPmluICsgb2ZmKTsKLQotCS8qIGZpcnN0IHB1dCB0aGUgZGF0YSBzdGFydGluZyBmcm9tIGZpZm8tPmluIHRvIGJ1ZmZlciBlbmQgKi8KLQlsID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIG9mZik7Ci0JbWVtY3B5KGZpZm8tPmJ1ZmZlciArIG9mZiwgZnJvbSwgbCk7Ci0KLQkvKiB0aGVuIHB1dCB0aGUgcmVzdCAoaWYgYW55KSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQltZW1jcHkoZmlmby0+YnVmZmVyLCBmcm9tICsgbCwgbGVuIC0gbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2tmaWZvX291dF9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJdm9pZCAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCi17Ci0JdW5zaWduZWQgaW50IGw7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+aW4gaW5kZXggLWJlZm9yZS0gd2UKLQkgKiBzdGFydCByZW1vdmluZyBieXRlcyBmcm9tIHRoZSBrZmlmby4KLQkgKi8KLQotCXNtcF9ybWIoKTsKLQotCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPm91dCArIG9mZik7Ci0KLQkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCi0JbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOwotCW1lbWNweSh0bywgZmlmby0+YnVmZmVyICsgb2ZmLCBsKTsKLQotCS8qIHRoZW4gZ2V0IHRoZSByZXN0IChpZiBhbnkpIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyICovCi0JbWVtY3B5KHRvICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19rZmlmb19mcm9tX3VzZXJfZGF0YShzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmLAotCSB1bnNpZ25lZCAqbGVub3V0KQotewotCXVuc2lnbmVkIGludCBsOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+b3V0IGluZGV4IC1iZWZvcmUtIHdlCi0JICogc3RhcnQgcHV0dGluZyBieXRlcyBpbnRvIHRoZSBrZmlmby4KLQkgKi8KLQotCXNtcF9tYigpOwotCi0Jb2ZmID0gX19rZmlmb19vZmYoZmlmbywgZmlmby0+aW4gKyBvZmYpOwotCi0JLyogZmlyc3QgcHV0IHRoZSBkYXRhIHN0YXJ0aW5nIGZyb20gZmlmby0+aW4gdG8gYnVmZmVyIGVuZCAqLwotCWwgPSBtaW4obGVuLCBmaWZvLT5zaXplIC0gb2ZmKTsKLQlyZXQgPSBjb3B5X2Zyb21fdXNlcihmaWZvLT5idWZmZXIgKyBvZmYsIGZyb20sIGwpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCSpsZW5vdXQgPSByZXQ7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqbGVub3V0ID0gbDsKLQotCS8qIHRoZW4gcHV0IHRoZSByZXN0IChpZiBhbnkpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwotCXJldCA9IGNvcHlfZnJvbV91c2VyKGZpZm8tPmJ1ZmZlciwgZnJvbSArIGwsIGxlbiAtIGwpOwotCSpsZW5vdXQgKz0gcmV0ID8gcmV0IDogbGVuIC0gbDsKLQlyZXR1cm4gcmV0ID8gLUVGQVVMVCA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fa2ZpZm9fdG9fdXNlcl9kYXRhKHN0cnVjdCBrZmlmbyAqZmlmbywKLQkJdm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCAqbGVub3V0KQotewotCXVuc2lnbmVkIGludCBsOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIEVuc3VyZSB0aGF0IHdlIHNhbXBsZSB0aGUgZmlmby0+aW4gaW5kZXggLWJlZm9yZS0gd2UKLQkgKiBzdGFydCByZW1vdmluZyBieXRlcyBmcm9tIHRoZSBrZmlmby4KLQkgKi8KLQotCXNtcF9ybWIoKTsKLQotCW9mZiA9IF9fa2ZpZm9fb2ZmKGZpZm8sIGZpZm8tPm91dCArIG9mZik7Ci0KLQkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCi0JbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSBvZmYpOwotCXJldCA9IGNvcHlfdG9fdXNlcih0bywgZmlmby0+YnVmZmVyICsgb2ZmLCBsKTsKLQkqbGVub3V0ID0gbDsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQkqbGVub3V0IC09IHJldDsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JLyogdGhlbiBnZXQgdGhlIHJlc3QgKGlmIGFueSkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KLQlsZW4gLT0gbDsKLQlyZXQgPSBjb3B5X3RvX3VzZXIodG8gKyBsLCBmaWZvLT5idWZmZXIsIGxlbik7Ci0JaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJKmxlbm91dCArPSBsZW4gLSByZXQ7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqbGVub3V0ICs9IGxlbjsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woX19rZmlmb19pbml0KTsKIAotdW5zaWduZWQgaW50IF9fa2ZpZm9faW5fbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0JY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCitzdGF0aWMgdm9pZCBrZmlmb19jb3B5X2luKHN0cnVjdCBfX2tmaWZvICpmaWZvLCBjb25zdCB2b2lkICpzcmMsCisJCXVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7Ci0JaWYgKGtmaWZvX2F2YWlsKGZpZm8pIDwgbGVuICsgcmVjc2l6ZSkKLQkJcmV0dXJuIGxlbiArIDE7CisJdW5zaWduZWQgaW50IHNpemUgPSBmaWZvLT5tYXNrICsgMTsKKwl1bnNpZ25lZCBpbnQgZXNpemUgPSBmaWZvLT5lc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbDsKIAotCV9fa2ZpZm9faW5fZGF0YShmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOwotCXJldHVybiAwOworCW9mZiAmPSBmaWZvLT5tYXNrOworCWlmIChlc2l6ZSAhPSAxKSB7CisJCW9mZiAqPSBlc2l6ZTsKKwkJc2l6ZSAqPSBlc2l6ZTsKKwkJbGVuICo9IGVzaXplOworCX0KKwlsID0gbWluKGxlbiwgc2l6ZSAtIG9mZik7CisKKwltZW1jcHkoZmlmby0+ZGF0YSArIG9mZiwgc3JjLCBsKTsKKwltZW1jcHkoZmlmby0+ZGF0YSwgc3JjICsgbCwgbGVuIC0gbCk7CisJLyoKKwkgKiBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBpbiB0aGUgZmlmbyBpcyB1cCB0byBkYXRlIGJlZm9yZQorCSAqIGluY3JlbWVudGluZyB0aGUgZmlmby0+aW4gaW5kZXggY291bnRlcgorCSAqLworCXNtcF93bWIoKTsKIH0KLUVYUE9SVF9TWU1CT0woX19rZmlmb19pbl9uKTsKIAotLyoqCi0gKiBrZmlmb19pbiAtIHB1dHMgc29tZSBkYXRhIGludG8gdGhlIEZJRk8KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQGZyb206IHRoZSBkYXRhIHRvIGJlIGFkZGVkLgotICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhdCBtb3N0IEBsZW4gYnl0ZXMgZnJvbSB0aGUgQGZyb20gYnVmZmVyIGludG8KLSAqIHRoZSBGSUZPIGRlcGVuZGluZyBvbiB0aGUgZnJlZSBzcGFjZSwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgotICogYnl0ZXMgY29waWVkLgotICoKLSAqIE5vdGUgdGhhdCB3aXRoIG9ubHkgb25lIGNvbmN1cnJlbnQgcmVhZGVyIGFuZCBvbmUgY29uY3VycmVudAotICogd3JpdGVyLCB5b3UgZG9uJ3QgbmVlZCBleHRyYSBsb2NraW5nIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCi0gKi8KLXVuc2lnbmVkIGludCBrZmlmb19pbihzdHJ1Y3Qga2ZpZm8gKmZpZm8sIGNvbnN0IHZvaWQgKmZyb20sCi0JCQkJdW5zaWduZWQgaW50IGxlbikKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2luKHN0cnVjdCBfX2tmaWZvICpmaWZvLAorCQljb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JbGVuID0gbWluKGtmaWZvX2F2YWlsKGZpZm8pLCBsZW4pOworCXVuc2lnbmVkIGludCBsOwogCi0JX19rZmlmb19pbl9kYXRhKGZpZm8sIGZyb20sIGxlbiwgMCk7Ci0JX19rZmlmb19hZGRfaW4oZmlmbywgbGVuKTsKKwlsID0ga2ZpZm9fdW51c2VkKGZpZm8pOworCWlmIChsZW4gPiBsKQorCQlsZW4gPSBsOworCisJa2ZpZm9fY29weV9pbihmaWZvLCBidWYsIGxlbiwgZmlmby0+aW4pOworCWZpZm8tPmluICs9IGxlbjsKIAlyZXR1cm4gbGVuOwogfQotRVhQT1JUX1NZTUJPTChrZmlmb19pbik7CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9faW4pOwogCi11bnNpZ25lZCBpbnQgX19rZmlmb19pbl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKLQljb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3N0YXRpYyB2b2lkIGtmaWZvX2NvcHlfb3V0KHN0cnVjdCBfX2tmaWZvICpmaWZvLCB2b2lkICpkc3QsCisJCXVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7Ci0JcmV0dXJuIF9fa2ZpZm9faW5fcmVjKGZpZm8sIGZyb20sIGxlbiwgcmVjc2l6ZSk7CisJdW5zaWduZWQgaW50IHNpemUgPSBmaWZvLT5tYXNrICsgMTsKKwl1bnNpZ25lZCBpbnQgZXNpemUgPSBmaWZvLT5lc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbDsKKworCW9mZiAmPSBmaWZvLT5tYXNrOworCWlmIChlc2l6ZSAhPSAxKSB7CisJCW9mZiAqPSBlc2l6ZTsKKwkJc2l6ZSAqPSBlc2l6ZTsKKwkJbGVuICo9IGVzaXplOworCX0KKwlsID0gbWluKGxlbiwgc2l6ZSAtIG9mZik7CisKKwltZW1jcHkoZHN0LCBmaWZvLT5kYXRhICsgb2ZmLCBsKTsKKwltZW1jcHkoZHN0ICsgbCwgZmlmby0+ZGF0YSwgbGVuIC0gbCk7CisJLyoKKwkgKiBtYWtlIHN1cmUgdGhhdCB0aGUgZGF0YSBpcyBjb3BpZWQgYmVmb3JlCisJICogaW5jcmVtZW50aW5nIHRoZSBmaWZvLT5vdXQgaW5kZXggY291bnRlcgorCSAqLworCXNtcF93bWIoKTsKIH0KLUVYUE9SVF9TWU1CT0woX19rZmlmb19pbl9nZW5lcmljKTsKIAotdW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X24oc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSkKK3Vuc2lnbmVkIGludCBfX2tmaWZvX291dF9wZWVrKHN0cnVjdCBfX2tmaWZvICpmaWZvLAorCQl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JaWYgKGtmaWZvX2xlbihmaWZvKSA8IGxlbiArIHJlY3NpemUpCi0JCXJldHVybiBsZW47CisJdW5zaWduZWQgaW50IGw7CiAKLQlfX2tmaWZvX291dF9kYXRhKGZpZm8sIHRvLCBsZW4sIHJlY3NpemUpOwotCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4gKyByZWNzaXplKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfbik7CisJbCA9IGZpZm8tPmluIC0gZmlmby0+b3V0OworCWlmIChsZW4gPiBsKQorCQlsZW4gPSBsOwogCi0vKioKLSAqIGtmaWZvX291dCAtIGdldHMgc29tZSBkYXRhIGZyb20gdGhlIEZJRk8KLSAqIEBmaWZvOiB0aGUgZmlmbyB0byBiZSB1c2VkLgotICogQHRvOiB3aGVyZSB0aGUgZGF0YSBtdXN0IGJlIGNvcGllZC4KLSAqIEBsZW46IHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEZJRk8gaW50byB0aGUKLSAqIEB0byBidWZmZXIgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3BpZWQgYnl0ZXMuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotdW5zaWduZWQgaW50IGtmaWZvX291dChzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWxlbiA9IG1pbihrZmlmb19sZW4oZmlmbyksIGxlbik7Ci0KLQlfX2tmaWZvX291dF9kYXRhKGZpZm8sIHRvLCBsZW4sIDApOwotCV9fa2ZpZm9fYWRkX291dChmaWZvLCBsZW4pOwotCisJa2ZpZm9fY29weV9vdXQoZmlmbywgYnVmLCBsZW4sIGZpZm8tPm91dCk7CiAJcmV0dXJuIGxlbjsKIH0KLUVYUE9SVF9TWU1CT0woa2ZpZm9fb3V0KTsKK0VYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfcGVlayk7CiAKLS8qKgotICoga2ZpZm9fb3V0X3BlZWsgLSBjb3B5IHNvbWUgZGF0YSBmcm9tIHRoZSBGSUZPLCBidXQgZG8gbm90IHJlbW92ZSBpdAotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAdG86IHdoZXJlIHRoZSBkYXRhIG11c3QgYmUgY29waWVkLgotICogQGxlbjogdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4KLSAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBmaWZvCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGF0IEBvZmZzZXQgZnJvbSB0aGUgRklGTwotICogaW50byB0aGUgQHRvIGJ1ZmZlciBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvcGllZCBieXRlcy4KLSAqIFRoZSBkYXRhIGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIEZJRk8uCi0gKi8KLXVuc2lnbmVkIGludCBrZmlmb19vdXRfcGVlayhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLAotCQkJICAgIHVuc2lnbmVkIG9mZnNldCkKK3Vuc2lnbmVkIGludCBfX2tmaWZvX291dChzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWxlbiA9IG1pbihrZmlmb19sZW4oZmlmbyksIGxlbiArIG9mZnNldCk7Ci0KLQlfX2tmaWZvX291dF9kYXRhKGZpZm8sIHRvLCBsZW4sIG9mZnNldCk7CisJbGVuID0gX19rZmlmb19vdXRfcGVlayhmaWZvLCBidWYsIGxlbik7CisJZmlmby0+b3V0ICs9IGxlbjsKIAlyZXR1cm4gbGVuOwogfQotRVhQT1JUX1NZTUJPTChrZmlmb19vdXRfcGVlayk7CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fb3V0KTsKIAotdW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgKnRvLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgcmVjc2l6ZSwKLQl1bnNpZ25lZCBpbnQgKnRvdGFsKQorc3RhdGljIHVuc2lnbmVkIGxvbmcga2ZpZm9fY29weV9mcm9tX3VzZXIoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmYsCisJdW5zaWduZWQgaW50ICpjb3BpZWQpCiB7Ci0JcmV0dXJuIF9fa2ZpZm9fb3V0X3JlYyhmaWZvLCB0bywgbGVuLCByZWNzaXplLCB0b3RhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fb3V0X2dlbmVyaWMpOworCXVuc2lnbmVkIGludCBzaXplID0gZmlmby0+bWFzayArIDE7CisJdW5zaWduZWQgaW50IGVzaXplID0gZmlmby0+ZXNpemU7CisJdW5zaWduZWQgaW50IGw7CisJdW5zaWduZWQgbG9uZyByZXQ7CiAKLXVuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKLQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JdW5zaWduZWQgdG90YWw7CisJb2ZmICY9IGZpZm8tPm1hc2s7CisJaWYgKGVzaXplICE9IDEpIHsKKwkJb2ZmICo9IGVzaXplOworCQlzaXplICo9IGVzaXplOworCQlsZW4gKj0gZXNpemU7CisJfQorCWwgPSBtaW4obGVuLCBzaXplIC0gb2ZmKTsKIAotCWlmIChrZmlmb19hdmFpbChmaWZvKSA8IGxlbiArIHJlY3NpemUpCi0JCXJldHVybiBsZW4gKyAxOwotCi0JX19rZmlmb19mcm9tX3VzZXJfZGF0YShmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUsICZ0b3RhbCk7Ci0JcmV0dXJuIHRvdGFsOwotfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX2Zyb21fdXNlcl9uKTsKLQotLyoqCi0gKiBrZmlmb19mcm9tX3VzZXIgLSBwdXRzIHNvbWUgZGF0YSBmcm9tIHVzZXIgc3BhY2UgaW50byB0aGUgRklGTwotICogQGZpZm86IHRoZSBmaWZvIHRvIGJlIHVzZWQuCi0gKiBAZnJvbTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBhZGRlZC4KLSAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gYmUgYWRkZWQuCi0gKiBAdG90YWw6IHRoZSBhY3R1YWwgcmV0dXJuZWQgZGF0YSBsZW5ndGguCi0gKgotICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYXQgbW9zdCBAbGVuIGJ5dGVzIGZyb20gdGhlIEBmcm9tIGludG8gdGhlCi0gKiBGSUZPIGRlcGVuZGluZyBhbmQgcmV0dXJucyAtRUZBVUxULzAuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotaW50IGtmaWZvX2Zyb21fdXNlcihzdHJ1Y3Qga2ZpZm8gKmZpZm8sCi0gICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCAqdG90YWwpCi17Ci0JaW50IHJldDsKLQlsZW4gPSBtaW4oa2ZpZm9fYXZhaWwoZmlmbyksIGxlbik7Ci0JcmV0ID0gX19rZmlmb19mcm9tX3VzZXJfZGF0YShmaWZvLCBmcm9tLCBsZW4sIDAsIHRvdGFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCV9fa2ZpZm9fYWRkX2luKGZpZm8sIGxlbik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGtmaWZvX2Zyb21fdXNlcik7Ci0KLXVuc2lnbmVkIGludCBfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywKLQljb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JcmV0dXJuIF9fa2ZpZm9fZnJvbV91c2VyX3JlYyhmaWZvLCBmcm9tLCBsZW4sIHJlY3NpemUpOwotfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX2Zyb21fdXNlcl9nZW5lcmljKTsKLQotdW5zaWduZWQgaW50IF9fa2ZpZm9fdG9fdXNlcl9uKHN0cnVjdCBrZmlmbyAqZmlmbywKLQl2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCByZWNsZW4sCi0JdW5zaWduZWQgaW50IHJlY3NpemUpCi17Ci0JdW5zaWduZWQgaW50IHJldCwgdG90YWw7Ci0KLQlpZiAoa2ZpZm9fbGVuKGZpZm8pIDwgcmVjbGVuICsgcmVjc2l6ZSkKLQkJcmV0dXJuIGxlbjsKLQotCXJldCA9IF9fa2ZpZm9fdG9fdXNlcl9kYXRhKGZpZm8sIHRvLCByZWNsZW4sIHJlY3NpemUsICZ0b3RhbCk7Ci0KLQlpZiAobGlrZWx5KHJldCA9PSAwKSkKLQkJX19rZmlmb19hZGRfb3V0KGZpZm8sIHJlY2xlbiArIHJlY3NpemUpOwotCi0JcmV0dXJuIHRvdGFsOwotfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXJfbik7Ci0KLS8qKgotICoga2ZpZm9fdG9fdXNlciAtIGdldHMgZGF0YSBmcm9tIHRoZSBGSUZPIGFuZCB3cml0ZSBpdCB0byB1c2VyIHNwYWNlCi0gKiBAZmlmbzogdGhlIGZpZm8gdG8gYmUgdXNlZC4KLSAqIEB0bzogd2hlcmUgdGhlIGRhdGEgbXVzdCBiZSBjb3BpZWQuCi0gKiBAbGVuOiB0aGUgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICogQGxlbm91dDogcG9pbnRlciB0byBvdXRwdXQgdmFyaWFibGUgd2l0aCBjb3BpZWQgZGF0YQotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGF0IG1vc3QgQGxlbiBieXRlcyBmcm9tIHRoZSBGSUZPIGludG8gdGhlCi0gKiBAdG8gYnVmZmVyIGFuZCAwIG9yIC1FRkFVTFQuCi0gKgotICogTm90ZSB0aGF0IHdpdGggb25seSBvbmUgY29uY3VycmVudCByZWFkZXIgYW5kIG9uZSBjb25jdXJyZW50Ci0gKiB3cml0ZXIsIHlvdSBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcgdG8gdXNlIHRoZXNlIGZ1bmN0aW9ucy4KLSAqLwotaW50IGtmaWZvX3RvX3VzZXIoc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgKmxlbm91dCkKLXsKLQlpbnQgcmV0OwotCWxlbiA9IG1pbihrZmlmb19sZW4oZmlmbyksIGxlbik7Ci0JcmV0ID0gX19rZmlmb190b191c2VyX2RhdGEoZmlmbywgdG8sIGxlbiwgMCwgbGVub3V0KTsKLQlfX2tmaWZvX2FkZF9vdXQoZmlmbywgKmxlbm91dCk7CisJcmV0ID0gY29weV9mcm9tX3VzZXIoZmlmby0+ZGF0YSArIG9mZiwgZnJvbSwgbCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldCA9IERJVl9ST1VORF9VUChyZXQgKyBsZW4gLSBsLCBlc2l6ZSk7CisJZWxzZSB7CisJCXJldCA9IGNvcHlfZnJvbV91c2VyKGZpZm8tPmRhdGEsIGZyb20gKyBsLCBsZW4gLSBsKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXQgPSBESVZfUk9VTkRfVVAocmV0LCBlc2l6ZSk7CisJfQorCS8qCisJICogbWFrZSBzdXJlIHRoYXQgdGhlIGRhdGEgaW4gdGhlIGZpZm8gaXMgdXAgdG8gZGF0ZSBiZWZvcmUKKwkgKiBpbmNyZW1lbnRpbmcgdGhlIGZpZm8tPmluIGluZGV4IGNvdW50ZXIKKwkgKi8KKwlzbXBfd21iKCk7CisJKmNvcGllZCA9IGxlbiAtIHJldDsKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyB3aGljaCBhcmUgbm90IGNvcGllZCAqLwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MKGtmaWZvX3RvX3VzZXIpOwogCi11bnNpZ25lZCBpbnQgX19rZmlmb190b191c2VyX2dlbmVyaWMoc3RydWN0IGtmaWZvICpmaWZvLAotCXZvaWQgX191c2VyICp0bywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IHJlY3NpemUsCi0JdW5zaWduZWQgaW50ICp0b3RhbCkKK2ludCBfX2tmaWZvX2Zyb21fdXNlcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sCisJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgKmNvcGllZCkKIHsKLQlyZXR1cm4gX19rZmlmb190b191c2VyX3JlYyhmaWZvLCB0bywgbGVuLCByZWNzaXplLCB0b3RhbCk7CisJdW5zaWduZWQgaW50IGw7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgaW50IGVzaXplID0gZmlmby0+ZXNpemU7CisJaW50IGVycjsKKworCWlmIChlc2l6ZSAhPSAxKQorCQlsZW4gLz0gZXNpemU7CisKKwlsID0ga2ZpZm9fdW51c2VkKGZpZm8pOworCWlmIChsZW4gPiBsKQorCQlsZW4gPSBsOworCisJcmV0ID0ga2ZpZm9fY29weV9mcm9tX3VzZXIoZmlmbywgZnJvbSwgbGVuLCBmaWZvLT5pbiwgY29waWVkKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlsZW4gLT0gcmV0OworCQllcnIgPSAtRUZBVUxUOworCX0gZWxzZQorCQllcnIgPSAwOworCWZpZm8tPmluICs9IGxlbjsKKwlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXJfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyKTsKIAotdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHJlY3NpemUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrZmlmb19jb3B5X3RvX3VzZXIoc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgX191c2VyICp0bywKKwkJdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50ICpjb3BpZWQpCiB7Ci0JaWYgKHJlY3NpemUgPT0gMCkKLQkJcmV0dXJuIGtmaWZvX2F2YWlsKGZpZm8pOworCXVuc2lnbmVkIGludCBsOworCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGludCBzaXplID0gZmlmby0+bWFzayArIDE7CisJdW5zaWduZWQgaW50IGVzaXplID0gZmlmby0+ZXNpemU7CiAKKwlvZmYgJj0gZmlmby0+bWFzazsKKwlpZiAoZXNpemUgIT0gMSkgeworCQlvZmYgKj0gZXNpemU7CisJCXNpemUgKj0gZXNpemU7CisJCWxlbiAqPSBlc2l6ZTsKKwl9CisJbCA9IG1pbihsZW4sIHNpemUgLSBvZmYpOworCisJcmV0ID0gY29weV90b191c2VyKHRvLCBmaWZvLT5kYXRhICsgb2ZmLCBsKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0ID0gRElWX1JPVU5EX1VQKHJldCArIGxlbiAtIGwsIGVzaXplKTsKKwllbHNlIHsKKwkJcmV0ID0gY29weV90b191c2VyKHRvICsgbCwgZmlmby0+ZGF0YSwgbGVuIC0gbCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0ID0gRElWX1JPVU5EX1VQKHJldCwgZXNpemUpOworCX0KKwkvKgorCSAqIG1ha2Ugc3VyZSB0aGF0IHRoZSBkYXRhIGlzIGNvcGllZCBiZWZvcmUKKwkgKiBpbmNyZW1lbnRpbmcgdGhlIGZpZm8tPm91dCBpbmRleCBjb3VudGVyCisJICovCisJc21wX3dtYigpOworCSpjb3BpZWQgPSBsZW4gLSByZXQ7CisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggYXJlIG5vdCBjb3BpZWQgKi8KKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19rZmlmb190b191c2VyKHN0cnVjdCBfX2tmaWZvICpmaWZvLCB2b2lkIF9fdXNlciAqdG8sCisJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBpbnQgKmNvcGllZCkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKwl1bnNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBpbnQgZXNpemUgPSBmaWZvLT5lc2l6ZTsKKwlpbnQgZXJyOworCisJaWYgKGVzaXplICE9IDEpCisJCWxlbiAvPSBlc2l6ZTsKKworCWwgPSBmaWZvLT5pbiAtIGZpZm8tPm91dDsKKwlpZiAobGVuID4gbCkKKwkJbGVuID0gbDsKKwlyZXQgPSBrZmlmb19jb3B5X3RvX3VzZXIoZmlmbywgdG8sIGxlbiwgZmlmby0+b3V0LCBjb3BpZWQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWxlbiAtPSByZXQ7CisJCWVyciA9IC1FRkFVTFQ7CisJfSBlbHNlCisJCWVyciA9IDA7CisJZmlmby0+b3V0ICs9IGxlbjsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX3RvX3VzZXIpOworCitzdGF0aWMgaW50IHNldHVwX3NnbF9idWYoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHZvaWQgKmJ1ZiwKKwkJaW50IG5lbnRzLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCBuOworCXVuc2lnbmVkIGludCBsOworCXVuc2lnbmVkIGludCBvZmY7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAoIW5lbnRzKQorCQlyZXR1cm4gMDsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCW4gPSAwOworCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKKwlvZmYgPSBvZmZzZXRfaW5fcGFnZShidWYpOworCWwgPSAwOworCisJd2hpbGUgKGxlbiA+PSBsICsgUEFHRV9TSVpFIC0gb2ZmKSB7CisJCXN0cnVjdCBwYWdlICpucGFnZTsKKworCQlsICs9IFBBR0VfU0laRTsKKwkJYnVmICs9IFBBR0VfU0laRTsKKwkJbnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoYnVmKTsKKwkJaWYgKHBhZ2VfdG9fcGh5cyhwYWdlKSAhPSBwYWdlX3RvX3BoeXMobnBhZ2UpIC0gbCkgeworCQkJc2dfc2V0X3BhZ2Uoc2dsLCBwYWdlLCBsIC0gb2ZmLCBvZmYpOworCQkJc2dsID0gc2dfbmV4dChzZ2wpOworCQkJaWYgKCsrbiA9PSBuZW50cyB8fCBzZ2wgPT0gTlVMTCkKKwkJCQlyZXR1cm4gbjsKKwkJCXBhZ2UgPSBucGFnZTsKKwkJCWxlbiAtPSBsIC0gb2ZmOworCQkJbCA9IG9mZiA9IDA7CisJCX0KKwl9CisJc2dfc2V0X3BhZ2Uoc2dsLCBwYWdlLCBsZW4sIG9mZik7CisJcmV0dXJuIG4gKyAxOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNldHVwX3NnbChzdHJ1Y3QgX19rZmlmbyAqZmlmbywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCWludCBuZW50cywgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZikKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGZpZm8tPm1hc2sgKyAxOworCXVuc2lnbmVkIGludCBlc2l6ZSA9IGZpZm8tPmVzaXplOworCXVuc2lnbmVkIGludCBsOworCXVuc2lnbmVkIGludCBuOworCisJb2ZmICY9IGZpZm8tPm1hc2s7CisJaWYgKGVzaXplICE9IDEpIHsKKwkJb2ZmICo9IGVzaXplOworCQlzaXplICo9IGVzaXplOworCQlsZW4gKj0gZXNpemU7CisJfQorCWwgPSBtaW4obGVuLCBzaXplIC0gb2ZmKTsKKworCW4gPSBzZXR1cF9zZ2xfYnVmKHNnbCwgZmlmby0+ZGF0YSArIG9mZiwgbmVudHMsIGwpOworCW4gKz0gc2V0dXBfc2dsX2J1ZihzZ2wgKyBuLCBmaWZvLT5kYXRhLCBuZW50cyAtIG4sIGxlbiAtIGwpOworCisJaWYgKG4pCisJCXNnX21hcmtfZW5kKHNnbCArIG4gLSAxKTsKKwlyZXR1cm4gbjsKK30KKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZG1hX2luX3ByZXBhcmUoc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IGw7CisKKwlsID0ga2ZpZm9fdW51c2VkKGZpZm8pOworCWlmIChsZW4gPiBsKQorCQlsZW4gPSBsOworCisJcmV0dXJuIHNldHVwX3NnbChmaWZvLCBzZ2wsIG5lbnRzLCBsZW4sIGZpZm8tPmluKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19kbWFfaW5fcHJlcGFyZSk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX2RtYV9vdXRfcHJlcGFyZShzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKworCWwgPSBmaWZvLT5pbiAtIGZpZm8tPm91dDsKKwlpZiAobGVuID4gbCkKKwkJbGVuID0gbDsKKworCXJldHVybiBzZXR1cF9zZ2woZmlmbywgc2dsLCBuZW50cywgbGVuLCBmaWZvLT5vdXQpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2RtYV9vdXRfcHJlcGFyZSk7CisKK3Vuc2lnbmVkIGludCBfX2tmaWZvX21heF9yKHVuc2lnbmVkIGludCBsZW4sIHNpemVfdCByZWNzaXplKQoreworCXVuc2lnbmVkIGludCBtYXggPSAoMSA8PCAocmVjc2l6ZSA8PCAzKSkgLSAxOworCisJaWYgKGxlbiA+IG1heCkKKwkJcmV0dXJuIG1heDsKKwlyZXR1cm4gbGVuOworfQorCisjZGVmaW5lCV9fS0ZJRk9fUEVFSyhkYXRhLCBvdXQsIG1hc2spIFwKKwkoKGRhdGEpWyhvdXQpICYgKG1hc2spXSkKKy8qCisgKiBfX2tmaWZvX3BlZWtfbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGRldGVybWluYXRlIHRoZSBsZW5ndGggb2YKKyAqIHRoZSBuZXh0IHJlY29yZCBpbiB0aGUgZmlmbworICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9fa2ZpZm9fcGVla19uKHN0cnVjdCBfX2tmaWZvICpmaWZvLCBzaXplX3QgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGZpZm8tPm1hc2s7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGZpZm8tPmRhdGE7CisKKwlsID0gX19LRklGT19QRUVLKGRhdGEsIGZpZm8tPm91dCwgbWFzayk7CisKKwlpZiAoLS1yZWNzaXplKQorCQlsIHw9IF9fS0ZJRk9fUEVFSyhkYXRhLCBmaWZvLT5vdXQgKyAxLCBtYXNrKSA8PCA4OworCisJcmV0dXJuIGw7Cit9CisKKyNkZWZpbmUJX19LRklGT19QT0tFKGRhdGEsIGluLCBtYXNrLCB2YWwpIFwKKwkoIFwKKwkoZGF0YSlbKGluKSAmIChtYXNrKV0gPSAodW5zaWduZWQgY2hhcikodmFsKSBcCisJKQorCisvKgorICogX19rZmlmb19wb2tlX24gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIGZvciBzdG9yZWluZyB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgcmVjb3JkIGludG8gdGhlIGZpZm8KKyAqLworc3RhdGljIHZvaWQgX19rZmlmb19wb2tlX24oc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHVuc2lnbmVkIGludCBuLCBzaXplX3QgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGZpZm8tPm1hc2s7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IGZpZm8tPmRhdGE7CisKKwlfX0tGSUZPX1BPS0UoZGF0YSwgZmlmby0+aW4sIG1hc2ssIG4pOworCisJaWYgKHJlY3NpemUgPiAxKQorCQlfX0tGSUZPX1BPS0UoZGF0YSwgZmlmby0+aW4gKyAxLCBtYXNrLCBuID4+IDgpOworfQorCit1bnNpZ25lZCBpbnQgX19rZmlmb19sZW5fcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywgc2l6ZV90IHJlY3NpemUpCit7CiAJcmV0dXJuIF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOwogfQotRVhQT1JUX1NZTUJPTChfX2tmaWZvX3BlZWtfZ2VuZXJpYyk7CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fbGVuX3IpOwogCi12b2lkIF9fa2ZpZm9fc2tpcF9nZW5lcmljKHN0cnVjdCBrZmlmbyAqZmlmbywgdW5zaWduZWQgaW50IHJlY3NpemUpCit1bnNpZ25lZCBpbnQgX19rZmlmb19pbl9yKHN0cnVjdCBfX2tmaWZvICpmaWZvLCBjb25zdCB2b2lkICpidWYsCisJCXVuc2lnbmVkIGludCBsZW4sIHNpemVfdCByZWNzaXplKQogewotCV9fa2ZpZm9fc2tpcF9yZWMoZmlmbywgcmVjc2l6ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fa2ZpZm9fc2tpcF9nZW5lcmljKTsKKwlpZiAobGVuICsgcmVjc2l6ZSA+IGtmaWZvX3VudXNlZChmaWZvKSkKKwkJcmV0dXJuIDA7CiAKKwlfX2tmaWZvX3Bva2VfbihmaWZvLCBsZW4sIHJlY3NpemUpOworCisJa2ZpZm9fY29weV9pbihmaWZvLCBidWYsIGxlbiwgZmlmby0+aW4gKyByZWNzaXplKTsKKwlmaWZvLT5pbiArPSBsZW4gKyByZWNzaXplOworCXJldHVybiBsZW47Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9faW5fcik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQga2ZpZm9fb3V0X2NvcHlfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwl2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4sIHNpemVfdCByZWNzaXplLCB1bnNpZ25lZCBpbnQgKm4pCit7CisJKm4gPSBfX2tmaWZvX3BlZWtfbihmaWZvLCByZWNzaXplKTsKKworCWlmIChsZW4gPiAqbikKKwkJbGVuID0gKm47CisKKwlrZmlmb19jb3B5X291dChmaWZvLCBidWYsIGxlbiwgZmlmby0+b3V0ICsgcmVjc2l6ZSk7CisJcmV0dXJuIGxlbjsKK30KKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X3BlZWtfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywgdm9pZCAqYnVmLAorCQl1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbjsKKworCWlmIChmaWZvLT5pbiA9PSBmaWZvLT5vdXQpCisJCXJldHVybiAwOworCisJcmV0dXJuIGtmaWZvX291dF9jb3B5X3IoZmlmbywgYnVmLCBsZW4sIHJlY3NpemUsICZuKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfcGVla19yKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fb3V0X3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgKmJ1ZiwKKwkJdW5zaWduZWQgaW50IGxlbiwgc2l6ZV90IHJlY3NpemUpCit7CisJdW5zaWduZWQgaW50IG47CisKKwlpZiAoZmlmby0+aW4gPT0gZmlmby0+b3V0KQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGtmaWZvX291dF9jb3B5X3IoZmlmbywgYnVmLCBsZW4sIHJlY3NpemUsICZuKTsKKwlmaWZvLT5vdXQgKz0gbiArIHJlY3NpemU7CisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19vdXRfcik7CisKK2ludCBfX2tmaWZvX2Zyb21fdXNlcl9yKHN0cnVjdCBfX2tmaWZvICpmaWZvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwKKwl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgaW50ICpjb3BpZWQsIHNpemVfdCByZWNzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJbGVuID0gX19rZmlmb19tYXhfcihsZW4sIHJlY3NpemUpOworCisJaWYgKGxlbiArIHJlY3NpemUgPiBrZmlmb191bnVzZWQoZmlmbykpIHsKKwkJKmNvcGllZCA9IDA7CisJCXJldHVybiAwOworCX0KKworCV9fa2ZpZm9fcG9rZV9uKGZpZm8sIGxlbiwgcmVjc2l6ZSk7CisKKwlyZXQgPSBrZmlmb19jb3B5X2Zyb21fdXNlcihmaWZvLCBmcm9tLCBsZW4sIGZpZm8tPmluICsgcmVjc2l6ZSwgY29waWVkKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQkqY29waWVkID0gMDsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWZpZm8tPmluICs9IGxlbiArIHJlY3NpemU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZnJvbV91c2VyX3IpOworCitpbnQgX19rZmlmb190b191c2VyX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sIHZvaWQgX191c2VyICp0bywKKwl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgaW50ICpjb3BpZWQsIHNpemVfdCByZWNzaXplKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGludCBuOworCisJaWYgKGZpZm8tPmluID09IGZpZm8tPm91dCkgeworCQkqY29waWVkID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJbiA9IF9fa2ZpZm9fcGVla19uKGZpZm8sIHJlY3NpemUpOworCWlmIChsZW4gPiBuKQorCQlsZW4gPSBuOworCisJcmV0ID0ga2ZpZm9fY29weV90b191c2VyKGZpZm8sIHRvLCBsZW4sIGZpZm8tPm91dCArIHJlY3NpemUsIGNvcGllZCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJKmNvcGllZCA9IDA7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlmaWZvLT5vdXQgKz0gbiArIHJlY3NpemU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fdG9fdXNlcl9yKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZG1hX2luX3ByZXBhcmVfcihzdHJ1Y3QgX19rZmlmbyAqZmlmbywKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLCB1bnNpZ25lZCBpbnQgbGVuLCBzaXplX3QgcmVjc2l6ZSkKK3sKKwlpZiAoIW5lbnRzKQorCQlCVUcoKTsKKworCWxlbiA9IF9fa2ZpZm9fbWF4X3IobGVuLCByZWNzaXplKTsKKworCWlmIChsZW4gKyByZWNzaXplID4ga2ZpZm9fdW51c2VkKGZpZm8pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzZXR1cF9zZ2woZmlmbywgc2dsLCBuZW50cywgbGVuLCBmaWZvLT5pbiArIHJlY3NpemUpOworfQorRVhQT1JUX1NZTUJPTChfX2tmaWZvX2RtYV9pbl9wcmVwYXJlX3IpOworCit2b2lkIF9fa2ZpZm9fZG1hX2luX2ZpbmlzaF9yKHN0cnVjdCBfX2tmaWZvICpmaWZvLAorCXVuc2lnbmVkIGludCBsZW4sIHNpemVfdCByZWNzaXplKQoreworCWxlbiA9IF9fa2ZpZm9fbWF4X3IobGVuLCByZWNzaXplKTsKKwlfX2tmaWZvX3Bva2VfbihmaWZvLCBsZW4sIHJlY3NpemUpOworCWZpZm8tPmluICs9IGxlbiArIHJlY3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZG1hX2luX2ZpbmlzaF9yKTsKKwordW5zaWduZWQgaW50IF9fa2ZpZm9fZG1hX291dF9wcmVwYXJlX3Ioc3RydWN0IF9fa2ZpZm8gKmZpZm8sCisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIGludCBuZW50cywgdW5zaWduZWQgaW50IGxlbiwgc2l6ZV90IHJlY3NpemUpCit7CisJaWYgKCFuZW50cykKKwkJQlVHKCk7CisKKwlsZW4gPSBfX2tmaWZvX21heF9yKGxlbiwgcmVjc2l6ZSk7CisKKwlpZiAobGVuICsgcmVjc2l6ZSA+IGZpZm8tPmluIC0gZmlmby0+b3V0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzZXR1cF9zZ2woZmlmbywgc2dsLCBuZW50cywgbGVuLCBmaWZvLT5vdXQgKyByZWNzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woX19rZmlmb19kbWFfb3V0X3ByZXBhcmVfcik7CisKK3ZvaWQgX19rZmlmb19kbWFfb3V0X2ZpbmlzaF9yKHN0cnVjdCBfX2tmaWZvICpmaWZvLCBzaXplX3QgcmVjc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gX19rZmlmb19wZWVrX24oZmlmbywgcmVjc2l6ZSk7CisJZmlmby0+b3V0ICs9IGxlbiArIHJlY3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKF9fa2ZpZm9fZG1hX291dF9maW5pc2hfcik7CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCA4MzkxMWM3Li4yZGMzNzg2IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zY2hlZC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGt0aHJlYWRfY3JlYXRlX2xvY2spOwpAQCAtMzUsNiArMzcsNyBAQAogCiBzdHJ1Y3Qga3RocmVhZCB7CiAJaW50IHNob3VsZF9zdG9wOworCXZvaWQgKmRhdGE7CiAJc3RydWN0IGNvbXBsZXRpb24gZXhpdGVkOwogfTsKIApAQCAtNTQsNiArNTcsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woa3RocmVhZF9zaG91bGRfc3RvcCk7CiAKKy8qKgorICoga3RocmVhZF9kYXRhIC0gcmV0dXJuIGRhdGEgdmFsdWUgc3BlY2lmaWVkIG9uIGt0aHJlYWQgY3JlYXRpb24KKyAqIEB0YXNrOiBrdGhyZWFkIHRhc2sgaW4gcXVlc3Rpb24KKyAqCisgKiBSZXR1cm4gdGhlIGRhdGEgdmFsdWUgc3BlY2lmaWVkIHdoZW4ga3RocmVhZCBAdGFzayB3YXMgY3JlYXRlZC4KKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoZSB2YWxpZGl0eSBvZiBAdGFzayB3aGVuCisgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3ZvaWQgKmt0aHJlYWRfZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIHRvX2t0aHJlYWQodGFzayktPmRhdGE7Cit9CisKIHN0YXRpYyBpbnQga3RocmVhZCh2b2lkICpfY3JlYXRlKQogewogCS8qIENvcHkgZGF0YTogaXQncyBvbiBrdGhyZWFkJ3Mgc3RhY2sgKi8KQEAgLTY0LDYgKzgwLDcgQEAKIAlpbnQgcmV0OwogCiAJc2VsZi5zaG91bGRfc3RvcCA9IDA7CisJc2VsZi5kYXRhID0gZGF0YTsKIAlpbml0X2NvbXBsZXRpb24oJnNlbGYuZXhpdGVkKTsKIAljdXJyZW50LT52Zm9ya19kb25lID0gJnNlbGYuZXhpdGVkOwogCkBAIC0yNDcsMyArMjY0LDE1MCBAQAogCiAJcmV0dXJuIDA7CiB9CisKKy8qKgorICoga3RocmVhZF93b3JrZXJfZm4gLSBrdGhyZWFkIGZ1bmN0aW9uIHRvIHByb2Nlc3Mga3RocmVhZF93b3JrZXIKKyAqIEB3b3JrZXJfcHRyOiBwb2ludGVyIHRvIGluaXRpYWxpemVkIGt0aHJlYWRfd29ya2VyCisgKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBAdGhyZWFkZm4gdG8ga3RocmVhZF9jcmVhdGUoKSBvcgorICoga3RocmVhZF9ydW4oKSB3aXRoIEB3b3JrZXJfcHRyIGFyZ3VtZW50IHBvaW50aW5nIHRvIGFuIGluaXRpYWxpemVkCisgKiBrdGhyZWFkX3dvcmtlci4gIFRoZSBzdGFydGVkIGt0aHJlYWQgd2lsbCBwcm9jZXNzIHdvcmtfbGlzdCB1bnRpbAorICogdGhlIGl0IGlzIHN0b3BwZWQgd2l0aCBrdGhyZWFkX3N0b3AoKS4gIEEga3RocmVhZCBjYW4gYWxzbyBjYWxsCisgKiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5IGFmdGVyIGV4dHJhIGluaXRpYWxpemF0aW9uLgorICoKKyAqIERpZmZlcmVudCBrdGhyZWFkcyBjYW4gYmUgdXNlZCBmb3IgdGhlIHNhbWUga3RocmVhZF93b3JrZXIgYXMgbG9uZworICogYXMgdGhlcmUncyBvbmx5IG9uZSBrdGhyZWFkIGF0dGFjaGVkIHRvIGl0IGF0IGFueSBnaXZlbiB0aW1lLiAgQQorICoga3RocmVhZF93b3JrZXIgd2l0aG91dCBhbiBhdHRhY2hlZCBrdGhyZWFkIHNpbXBseSBjb2xsZWN0cyBxdWV1ZWQKKyAqIGt0aHJlYWRfd29ya3MuCisgKi8KK2ludCBrdGhyZWFkX3dvcmtlcl9mbih2b2lkICp3b3JrZXJfcHRyKQoreworCXN0cnVjdCBrdGhyZWFkX3dvcmtlciAqd29ya2VyID0gd29ya2VyX3B0cjsKKwlzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrOworCisJV0FSTl9PTih3b3JrZXItPnRhc2spOworCXdvcmtlci0+dGFzayA9IGN1cnJlbnQ7CityZXBlYXQ6CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJLyogbWIgcGFpcmVkIHcvIGt0aHJlYWRfc3RvcCAqLworCisJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCXNwaW5fbG9ja19pcnEoJndvcmtlci0+bG9jayk7CisJCXdvcmtlci0+dGFzayA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmd29ya2VyLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd29yayA9IE5VTEw7CisJc3Bpbl9sb2NrX2lycSgmd29ya2VyLT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJndvcmtlci0+d29ya19saXN0KSkgeworCQl3b3JrID0gbGlzdF9maXJzdF9lbnRyeSgmd29ya2VyLT53b3JrX2xpc3QsCisJCQkJCXN0cnVjdCBrdGhyZWFkX3dvcmssIG5vZGUpOworCQlsaXN0X2RlbF9pbml0KCZ3b3JrLT5ub2RlKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZ3b3JrZXItPmxvY2spOworCisJaWYgKHdvcmspIHsKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQl3b3JrLT5mdW5jKHdvcmspOworCQlzbXBfd21iKCk7CS8qIHdtYiB3b3JrZXItYjAgcGFpcmVkIHdpdGggZmx1c2gtYjEgKi8KKwkJd29yay0+ZG9uZV9zZXEgPSB3b3JrLT5xdWV1ZV9zZXE7CisJCXNtcF9tYigpOwkvKiBtYiB3b3JrZXItYjEgcGFpcmVkIHdpdGggZmx1c2gtYjAgKi8KKwkJaWYgKGF0b21pY19yZWFkKCZ3b3JrLT5mbHVzaGluZykpCisJCQl3YWtlX3VwX2FsbCgmd29yay0+ZG9uZSk7CisJfSBlbHNlIGlmICghZnJlZXppbmcoY3VycmVudCkpCisJCXNjaGVkdWxlKCk7CisKKwl0cnlfdG9fZnJlZXplKCk7CisJZ290byByZXBlYXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdGhyZWFkX3dvcmtlcl9mbik7CisKKy8qKgorICogcXVldWVfa3RocmVhZF93b3JrIC0gcXVldWUgYSBrdGhyZWFkX3dvcmsKKyAqIEB3b3JrZXI6IHRhcmdldCBrdGhyZWFkX3dvcmtlcgorICogQHdvcms6IGt0aHJlYWRfd29yayB0byBxdWV1ZQorICoKKyAqIFF1ZXVlIEB3b3JrIHRvIHdvcmsgcHJvY2Vzc29yIEB0YXNrIGZvciBhc3luYyBleGVjdXRpb24uICBAdGFzaworICogbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIGt0aHJlYWRfd29ya2VyX2NyZWF0ZSgpLiAgUmV0dXJucyAldHJ1ZQorICogaWYgQHdvcmsgd2FzIHN1Y2Nlc3NmdWxseSBxdWV1ZWQsICVmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBwZW5kaW5nLgorICovCitib29sIHF1ZXVlX2t0aHJlYWRfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrZXIgKndvcmtlciwKKwkJCXN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCit7CisJYm9vbCByZXQgPSBmYWxzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtlci0+bG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZ3b3JrLT5ub2RlKSkgeworCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5ub2RlLCAmd29ya2VyLT53b3JrX2xpc3QpOworCQl3b3JrLT5xdWV1ZV9zZXErKzsKKwkJaWYgKGxpa2VseSh3b3JrZXItPnRhc2spKQorCQkJd2FrZV91cF9wcm9jZXNzKHdvcmtlci0+dGFzayk7CisJCXJldCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtlci0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChxdWV1ZV9rdGhyZWFkX3dvcmspOworCisvKioKKyAqIGZsdXNoX2t0aHJlYWRfd29yayAtIGZsdXNoIGEga3RocmVhZF93b3JrCisgKiBAd29yazogd29yayB0byBmbHVzaAorICoKKyAqIElmIEB3b3JrIGlzIHF1ZXVlZCBvciBleGVjdXRpbmcsIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBleGVjdXRpb24uCisgKi8KK3ZvaWQgZmx1c2hfa3RocmVhZF93b3JrKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCit7CisJaW50IHNlcSA9IHdvcmstPnF1ZXVlX3NlcTsKKworCWF0b21pY19pbmMoJndvcmstPmZsdXNoaW5nKTsKKworCS8qCisJICogbWIgZmx1c2gtYjAgcGFpcmVkIHdpdGggd29ya2VyLWIxLCB0byBtYWtlIHN1cmUgZWl0aGVyCisJICogd29ya2VyIHNlZXMgdGhlIGFib3ZlIGluY3JlbWVudCBvciB3ZSBzZWUgZG9uZV9zZXEgdXBkYXRlLgorCSAqLworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOworCisJLyogQSAtIEIgPD0gMCB0ZXN0cyB3aGV0aGVyIEIgaXMgaW4gZnJvbnQgb2YgQSByZWdhcmRsZXNzIG9mIG92ZXJmbG93ICovCisJd2FpdF9ldmVudCh3b3JrLT5kb25lLCBzZXEgLSB3b3JrLT5kb25lX3NlcSA8PSAwKTsKKwlhdG9taWNfZGVjKCZ3b3JrLT5mbHVzaGluZyk7CisKKwkvKgorCSAqIHJtYiBmbHVzaC1iMSBwYWlyZWQgd2l0aCB3b3JrZXItYjAsIHRvIG1ha2Ugc3VyZSBvdXIgY2FsbGVyCisJICogc2VlcyBldmVyeSBjaGFuZ2UgbWFkZSBieSB3b3JrLT5mdW5jKCkuCisJICovCisJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF9rdGhyZWFkX3dvcmspOworCitzdHJ1Y3Qga3RocmVhZF9mbHVzaF93b3JrIHsKKwlzdHJ1Y3Qga3RocmVhZF93b3JrCXdvcms7CisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKK307CisKK3N0YXRpYyB2b2lkIGt0aHJlYWRfZmx1c2hfd29ya19mbihzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKQoreworCXN0cnVjdCBrdGhyZWFkX2ZsdXNoX3dvcmsgKmZ3b3JrID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdGhyZWFkX2ZsdXNoX3dvcmssIHdvcmspOworCWNvbXBsZXRlKCZmd29yay0+ZG9uZSk7Cit9CisKKy8qKgorICogZmx1c2hfa3RocmVhZF93b3JrZXIgLSBmbHVzaCBhbGwgY3VycmVudCB3b3JrcyBvbiBhIGt0aHJlYWRfd29ya2VyCisgKiBAd29ya2VyOiB3b3JrZXIgdG8gZmx1c2gKKyAqCisgKiBXYWl0IHVudGlsIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIG9yIHBlbmRpbmcgd29ya3Mgb24gQHdvcmtlciBhcmUKKyAqIGZpbmlzaGVkLgorICovCit2b2lkIGZsdXNoX2t0aHJlYWRfd29ya2VyKHN0cnVjdCBrdGhyZWFkX3dvcmtlciAqd29ya2VyKQoreworCXN0cnVjdCBrdGhyZWFkX2ZsdXNoX3dvcmsgZndvcmsgPSB7CisJCUtUSFJFQURfV09SS19JTklUKGZ3b3JrLndvcmssIGt0aHJlYWRfZmx1c2hfd29ya19mbiksCisJCUNPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyhmd29yay5kb25lKSwKKwl9OworCisJcXVldWVfa3RocmVhZF93b3JrKHdvcmtlciwgJmZ3b3JrLndvcmspOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZ3b3JrLmRvbmUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfa3RocmVhZF93b3JrZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNTQyODY3OS4uZjI4NTJhNSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAogc3RhdGljIGlubGluZSB1NjQgbG9ja3N0YXRfY2xvY2sodm9pZCkKIHsKLQlyZXR1cm4gY3B1X2Nsb2NrKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGxvY2FsX2Nsb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgbG9ja19wb2ludCh1bnNpZ25lZCBsb25nIHBvaW50c1tdLCB1bnNpZ25lZCBsb25nIGlwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCAzYjE2Y2Q5Li40YzEzYjFhIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCisjZGVmaW5lIFBBTklDX1RJTUVSX1NURVAgMTAwCisjZGVmaW5lIFBBTklDX0JMSU5LX1NQRCAxOAorCiBpbnQgcGFuaWNfb25fb29wczsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRhaW50ZWRfbWFzazsKIHN0YXRpYyBpbnQgcGF1c2Vfb25fb29wczsKQEAgLTM2LDM2ICszOSwxNSBAQAogCiBFWFBPUlRfU1lNQk9MKHBhbmljX25vdGlmaWVyX2xpc3QpOwogCi0vKiBSZXR1cm5zIGhvdyBsb25nIGl0IHdhaXRlZCBpbiBtcyAqLwotbG9uZyAoKnBhbmljX2JsaW5rKShsb25nIHRpbWUpOwotRVhQT1JUX1NZTUJPTChwYW5pY19ibGluayk7Ci0KLXN0YXRpYyB2b2lkIHBhbmljX2JsaW5rX29uZV9zZWNvbmQodm9pZCkKK3N0YXRpYyBsb25nIG5vX2JsaW5rKGludCBzdGF0ZSkKIHsKLQlzdGF0aWMgbG9uZyBpID0gMCwgZW5kOwotCi0JaWYgKHBhbmljX2JsaW5rKSB7Ci0JCWVuZCA9IGkgKyBNU0VDX1BFUl9TRUM7Ci0KLQkJd2hpbGUgKGkgPCBlbmQpIHsKLQkJCWkgKz0gcGFuaWNfYmxpbmsoaSk7Ci0JCQltZGVsYXkoMSk7Ci0JCQlpKys7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBXaGVuIHJ1bm5pbmcgdW5kZXIgYSBoeXBlcnZpc29yIGEgc21hbGwgbWRlbGF5IG1heSBnZXQKLQkJICogcm91bmRlZCB1cCB0byB0aGUgaHlwZXJ2aXNvciB0aW1lc2xpY2UuIEZvciBleGFtcGxlLCB3aXRoCi0JCSAqIGEgMW1zIGluIDEwbXMgaHlwZXJ2aXNvciB0aW1lc2xpY2Ugd2UgbWlnaHQgaW5mbGF0ZSBhCi0JCSAqIG1kZWxheSgxKSBsb29wIGJ5IDEweC4KLQkJICoKLQkJICogSWYgd2UgaGF2ZSBub3RoaW5nIHRvIGJsaW5rLCBzcGluIG9uIDEgc2Vjb25kIGNhbGxzIHRvCi0JCSAqIG1kZWxheSB0byBhdm9pZCB0aGlzLgotCQkgKi8KLQkJbWRlbGF5KE1TRUNfUEVSX1NFQyk7Ci0JfQorCXJldHVybiAwOwogfQogCisvKiBSZXR1cm5zIGhvdyBsb25nIGl0IHdhaXRlZCBpbiBtcyAqLworbG9uZyAoKnBhbmljX2JsaW5rKShpbnQgc3RhdGUpOworRVhQT1JUX1NZTUJPTChwYW5pY19ibGluayk7CisKIC8qKgogICoJcGFuaWMgLSBoYWx0IHRoZSBzeXN0ZW0KICAqCUBmbXQ6IFRoZSB0ZXh0IHN0cmluZyB0byBwcmludApAQCAtNzgsNyArNjAsOCBAQAogewogCXN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsKIAl2YV9saXN0IGFyZ3M7Ci0JbG9uZyBpOworCWxvbmcgaSwgaV9uZXh0ID0gMDsKKwlpbnQgc3RhdGUgPSAwOwogCiAJLyoKIAkgKiBJdCdzIHBvc3NpYmxlIHRvIGNvbWUgaGVyZSBkaXJlY3RseSBmcm9tIGEgcGFuaWMtYXNzZXJ0aW9uIGFuZApAQCAtMTE3LDYgKzEwMCw5IEBACiAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAorCWlmICghcGFuaWNfYmxpbmspCisJCXBhbmljX2JsaW5rID0gbm9fYmxpbms7CisKIAlpZiAocGFuaWNfdGltZW91dCA+IDApIHsKIAkJLyoKIAkJICogRGVsYXkgdGltZW91dCBzZWNvbmRzIGJlZm9yZSByZWJvb3RpbmcgdGhlIG1hY2hpbmUuCkBAIC0xMjQsOSArMTEwLDEzIEBACiAJCSAqLwogCQlwcmludGsoS0VSTl9FTUVSRyAiUmVib290aW5nIGluICVkIHNlY29uZHMuLiIsIHBhbmljX3RpbWVvdXQpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBwYW5pY190aW1lb3V0OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHBhbmljX3RpbWVvdXQgKiAxMDAwOyBpICs9IFBBTklDX1RJTUVSX1NURVApIHsKIAkJCXRvdWNoX25taV93YXRjaGRvZygpOwotCQkJcGFuaWNfYmxpbmtfb25lX3NlY29uZCgpOworCQkJaWYgKGkgPj0gaV9uZXh0KSB7CisJCQkJaSArPSBwYW5pY19ibGluayhzdGF0ZSBePSAxKTsKKwkJCQlpX25leHQgPSBpICsgMzYwMCAvIFBBTklDX0JMSU5LX1NQRDsKKwkJCX0KKwkJCW1kZWxheShQQU5JQ19USU1FUl9TVEVQKTsKIAkJfQogCQkvKgogCQkgKiBUaGlzIHdpbGwgbm90IGJlIGEgY2xlYW4gcmVib290LCB3aXRoIGV2ZXJ5dGhpbmcKQEAgLTE1Miw5ICsxNDIsMTMgQEAKIAl9CiAjZW5kaWYKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0Jd2hpbGUgKDEpIHsKKwlmb3IgKGkgPSAwOyA7IGkgKz0gUEFOSUNfVElNRVJfU1RFUCkgewogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCXBhbmljX2JsaW5rX29uZV9zZWNvbmQoKTsKKwkJaWYgKGkgPj0gaV9uZXh0KSB7CisJCQlpICs9IHBhbmljX2JsaW5rKHN0YXRlIF49IDEpOworCQkJaV9uZXh0ID0gaSArIDM2MDAgLyBQQU5JQ19CTElOS19TUEQ7CisJCX0KKwkJbWRlbGF5KFBBTklDX1RJTUVSX1NURVApOwogCX0KIH0KIApAQCAtMzQ0LDcgKzMzOCw3IEBACiB9CiBsYXRlX2luaXRjYWxsKGluaXRfb29wc19pZCk7CiAKLXN0YXRpYyB2b2lkIHByaW50X29vcHNfZW5kX21hcmtlcih2b2lkKQordm9pZCBwcmludF9vb3BzX2VuZF9tYXJrZXIodm9pZCkKIHsKIAlpbml0X29vcHNfaWQoKTsKIAlwcmludGsoS0VSTl9XQVJOSU5HICItLS1bIGVuZCB0cmFjZSAlMDE2bGx4IF0tLS1cbiIsCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBmZjg2YzU1Li40MDNkMTgwIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHU2NCBwZXJmX2Nsb2NrKHZvaWQpCiB7Ci0JcmV0dXJuIGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gbG9jYWxfY2xvY2soKTsKIH0KIAogLyoKQEAgLTY3NSw3ICs2NzUsNiBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnBhcnRpYWxfZ3JvdXAgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBwbXUgKnBtdSA9IGdyb3VwX2V2ZW50LT5wbXU7CiAJYm9vbCB0eG4gPSBmYWxzZTsKLQlpbnQgcmV0OwogCiAJaWYgKGdyb3VwX2V2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKIAkJcmV0dXJuIDA7CkBAIC03MDMsMTUgKzcwMiw5IEBACiAJCX0KIAl9CiAKLQlpZiAoIXR4bikKKwlpZiAoIXR4biB8fCAhcG11LT5jb21taXRfdHhuKHBtdSkpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gcG11LT5jb21taXRfdHhuKHBtdSk7Ci0JaWYgKCFyZXQpIHsKLQkJcG11LT5jYW5jZWxfdHhuKHBtdSk7Ci0JCXJldHVybiAwOwotCX0KLQogZ3JvdXBfZXJyb3I6CiAJLyoKIAkgKiBHcm91cHMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhcyBvbmUgdW5pdCBvbmx5LCBzbyB1bmRvIGFueQpAQCAtMTE1NSw5ICsxMTQ4LDkgQEAKIAkgKiBJbiBvcmRlciB0byBrZWVwIHBlci10YXNrIHN0YXRzIHJlbGlhYmxlIHdlIG5lZWQgdG8gZmxpcCB0aGUgZXZlbnQKIAkgKiB2YWx1ZXMgd2hlbiB3ZSBmbGlwIHRoZSBjb250ZXh0cy4KIAkgKi8KLQl2YWx1ZSA9IGF0b21pYzY0X3JlYWQoJm5leHRfZXZlbnQtPmNvdW50KTsKLQl2YWx1ZSA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5jb3VudCwgdmFsdWUpOwotCWF0b21pYzY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKKwl2YWx1ZSA9IGxvY2FsNjRfcmVhZCgmbmV4dF9ldmVudC0+Y291bnQpOworCXZhbHVlID0gbG9jYWw2NF94Y2hnKCZldmVudC0+Y291bnQsIHZhbHVlKTsKKwlsb2NhbDY0X3NldCgmbmV4dF9ldmVudC0+Y291bnQsIHZhbHVlKTsKIAogCXN3YXAoZXZlbnQtPnRvdGFsX3RpbWVfZW5hYmxlZCwgbmV4dF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkKTsKIAlzd2FwKGV2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsIG5leHRfZXZlbnQtPnRvdGFsX3RpbWVfcnVubmluZyk7CkBAIC0xNTQ3LDEwICsxNTQwLDEwIEBACiAKIAlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOwogCi0JaWYgKGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpID4gOCpzYW1wbGVfcGVyaW9kKSB7CisJaWYgKGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCkgPiA4KnNhbXBsZV9wZXJpb2QpIHsKIAkJcGVyZl9kaXNhYmxlKCk7CiAJCXBlcmZfZXZlbnRfc3RvcChldmVudCk7Ci0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCAwKTsKIAkJcGVyZl9ldmVudF9zdGFydChldmVudCk7CiAJCXBlcmZfZW5hYmxlKCk7CiAJfQpAQCAtMTU5MSw3ICsxNTg0LDcgQEAKIAogCQlwZXJmX2Rpc2FibGUoKTsKIAkJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7Ci0JCW5vdyA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5jb3VudCk7CisJCW5vdyA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKIAkJZGVsdGEgPSBub3cgLSBod2MtPmZyZXFfY291bnRfc3RhbXA7CiAJCWh3Yy0+ZnJlcV9jb3VudF9zdGFtcCA9IG5vdzsKIApAQCAtMTc0Myw2ICsxNzM2LDExIEBACiAJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IHBlcmZfZXZlbnRfY291bnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBsb2NhbDY0X3JlYWQoJmV2ZW50LT5jb3VudCkgKyBhdG9taWM2NF9yZWFkKCZldmVudC0+Y2hpbGRfY291bnQpOworfQorCiBzdGF0aWMgdTY0IHBlcmZfZXZlbnRfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJLyoKQEAgLTE3NjIsNyArMTc2MCw3IEBACiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmxvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwlyZXR1cm4gcGVyZl9ldmVudF9jb3VudChldmVudCk7CiB9CiAKIC8qCkBAIC0xODgzLDcgKzE4ODEsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBwZXJmX3BlbmRpbmdfc3luYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOwotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfcHV0KHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSk7CitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9wdXQoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpOwogCiBzdGF0aWMgdm9pZCBmcmVlX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKQEAgLTE4OTEsNyArMTg4OSw3IEBACiAKIAlpZiAoIWV2ZW50LT5wYXJlbnQpIHsKIAkJYXRvbWljX2RlYygmbnJfZXZlbnRzKTsKLQkJaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJCWlmIChldmVudC0+YXR0ci5tbWFwIHx8IGV2ZW50LT5hdHRyLm1tYXBfZGF0YSkKIAkJCWF0b21pY19kZWMoJm5yX21tYXBfZXZlbnRzKTsKIAkJaWYgKGV2ZW50LT5hdHRyLmNvbW0pCiAJCQlhdG9taWNfZGVjKCZucl9jb21tX2V2ZW50cyk7CkBAIC0xODk5LDkgKzE4OTcsOSBAQAogCQkJYXRvbWljX2RlYygmbnJfdGFza19ldmVudHMpOwogCX0KIAotCWlmIChldmVudC0+ZGF0YSkgewotCQlwZXJmX21tYXBfZGF0YV9wdXQoZXZlbnQtPmRhdGEpOwotCQlldmVudC0+ZGF0YSA9IE5VTEw7CisJaWYgKGV2ZW50LT5idWZmZXIpIHsKKwkJcGVyZl9idWZmZXJfcHV0KGV2ZW50LT5idWZmZXIpOworCQlldmVudC0+YnVmZmVyID0gTlVMTDsKIAl9CiAKIAlpZiAoZXZlbnQtPmRlc3Ryb3kpCkBAIC0yMTI2LDEzICsyMTI0LDEzIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHBlcmZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGludCBldmVudHMgPSBQT0xMX0hVUDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKLQlpZiAoZGF0YSkKLQkJZXZlbnRzID0gYXRvbWljX3hjaGcoJmRhdGEtPnBvbGwsIDApOworCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoYnVmZmVyKQorCQlldmVudHMgPSBhdG9taWNfeGNoZygmYnVmZmVyLT5wb2xsLCAwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXBvbGxfd2FpdChmaWxlLCAmZXZlbnQtPndhaXRxLCB3YWl0KTsKQEAgLTIxNDMsNyArMjE0MSw3IEBACiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAkodm9pZClwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOwotCWF0b21pYzY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKKwlsb2NhbDY0X3NldCgmZXZlbnQtPmNvdW50LCAwKTsKIAlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiB9CiAKQEAgLTIzNDIsMTQgKzIzNDAsMTQgQEAKIHZvaWQgcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSAqdXNlcnBnOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlkYXRhID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5kYXRhKTsKLQlpZiAoIWRhdGEpCisJYnVmZmVyID0gcmN1X2RlcmVmZXJlbmNlKGV2ZW50LT5idWZmZXIpOworCWlmICghYnVmZmVyKQogCQlnb3RvIHVubG9jazsKIAotCXVzZXJwZyA9IGRhdGEtPnVzZXJfcGFnZTsKKwl1c2VycGcgPSBidWZmZXItPnVzZXJfcGFnZTsKIAogCS8qCiAJICogRGlzYWJsZSBwcmVlbXB0aW9uIHNvIGFzIHRvIG5vdCBsZXQgdGhlIGNvcnJlc3BvbmRpbmcgdXNlci1zcGFjZQpAQCAtMjM1OSw5ICsyMzU3LDkgQEAKIAkrK3VzZXJwZy0+bG9jazsKIAliYXJyaWVyKCk7CiAJdXNlcnBnLT5pbmRleCA9IHBlcmZfZXZlbnRfaW5kZXgoZXZlbnQpOwotCXVzZXJwZy0+b2Zmc2V0ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwl1c2VycGctPm9mZnNldCA9IHBlcmZfZXZlbnRfY291bnQoZXZlbnQpOwogCWlmIChldmVudC0+c3RhdGUgPT0gUEVSRl9FVkVOVF9TVEFURV9BQ1RJVkUpCi0JCXVzZXJwZy0+b2Zmc2V0IC09IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKKwkJdXNlcnBnLT5vZmZzZXQgLT0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAKIAl1c2VycGctPnRpbWVfZW5hYmxlZCA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKwogCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CkBAIC0yMzc2LDYgKzIzNzQsMjUgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyZl9kYXRhX3NpemUoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpOworCitzdGF0aWMgdm9pZAorcGVyZl9idWZmZXJfaW5pdChzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgbG9uZyB3YXRlcm1hcmssIGludCBmbGFncykKK3sKKwlsb25nIG1heF9zaXplID0gcGVyZl9kYXRhX3NpemUoYnVmZmVyKTsKKworCWlmICh3YXRlcm1hcmspCisJCWJ1ZmZlci0+d2F0ZXJtYXJrID0gbWluKG1heF9zaXplLCB3YXRlcm1hcmspOworCisJaWYgKCFidWZmZXItPndhdGVybWFyaykKKwkJYnVmZmVyLT53YXRlcm1hcmsgPSBtYXhfc2l6ZSAvIDI7CisKKwlpZiAoZmxhZ3MgJiBQRVJGX0JVRkZFUl9XUklUQUJMRSkKKwkJYnVmZmVyLT53cml0YWJsZSA9IDE7CisKKwlhdG9taWNfc2V0KCZidWZmZXItPnJlZmNvdW50LCAxKTsKK30KKwogI2lmbmRlZiBDT05GSUdfUEVSRl9VU0VfVk1BTExPQwogCiAvKgpAQCAtMjM4MywxNSArMjQwMCwxNSBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqCi1wZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBwZ29mZikKIHsKLQlpZiAocGdvZmYgPiBkYXRhLT5ucl9wYWdlcykKKwlpZiAocGdvZmYgPiBidWZmZXItPm5yX3BhZ2VzKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChwZ29mZiA9PSAwKQotCQlyZXR1cm4gdmlydF90b19wYWdlKGRhdGEtPnVzZXJfcGFnZSk7CisJCXJldHVybiB2aXJ0X3RvX3BhZ2UoYnVmZmVyLT51c2VyX3BhZ2UpOwogCi0JcmV0dXJuIHZpcnRfdG9fcGFnZShkYXRhLT5kYXRhX3BhZ2VzW3Bnb2ZmIC0gMV0pOworCXJldHVybiB2aXJ0X3RvX3BhZ2UoYnVmZmVyLT5kYXRhX3BhZ2VzW3Bnb2ZmIC0gMV0pOwogfQogCiBzdGF0aWMgdm9pZCAqcGVyZl9tbWFwX2FsbG9jX3BhZ2UoaW50IGNwdSkKQEAgLTI0MDcsNDIgKzI0MjQsNDQgQEAKIAlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcmZfbW1hcF9kYXRhICoKLXBlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQorc3RhdGljIHN0cnVjdCBwZXJmX2J1ZmZlciAqCitwZXJmX2J1ZmZlcl9hbGxvYyhpbnQgbnJfcGFnZXMsIGxvbmcgd2F0ZXJtYXJrLCBpbnQgY3B1LCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAlpbnQgaTsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2J1ZmZlcik7CiAJc2l6ZSArPSBucl9wYWdlcyAqIHNpemVvZih2b2lkICopOwogCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCiAJCWdvdG8gZmFpbDsKIAotCWRhdGEtPnVzZXJfcGFnZSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGV2ZW50LT5jcHUpOwotCWlmICghZGF0YS0+dXNlcl9wYWdlKQorCWJ1ZmZlci0+dXNlcl9wYWdlID0gcGVyZl9tbWFwX2FsbG9jX3BhZ2UoY3B1KTsKKwlpZiAoIWJ1ZmZlci0+dXNlcl9wYWdlKQogCQlnb3RvIGZhaWxfdXNlcl9wYWdlOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJZGF0YS0+ZGF0YV9wYWdlc1tpXSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGV2ZW50LT5jcHUpOwotCQlpZiAoIWRhdGEtPmRhdGFfcGFnZXNbaV0pCisJCWJ1ZmZlci0+ZGF0YV9wYWdlc1tpXSA9IHBlcmZfbW1hcF9hbGxvY19wYWdlKGNwdSk7CisJCWlmICghYnVmZmVyLT5kYXRhX3BhZ2VzW2ldKQogCQkJZ290byBmYWlsX2RhdGFfcGFnZXM7CiAJfQogCi0JZGF0YS0+bnJfcGFnZXMgPSBucl9wYWdlczsKKwlidWZmZXItPm5yX3BhZ2VzID0gbnJfcGFnZXM7CiAKLQlyZXR1cm4gZGF0YTsKKwlwZXJmX2J1ZmZlcl9pbml0KGJ1ZmZlciwgd2F0ZXJtYXJrLCBmbGFncyk7CisKKwlyZXR1cm4gYnVmZmVyOwogCiBmYWlsX2RhdGFfcGFnZXM6CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZGF0YS0+ZGF0YV9wYWdlc1tpXSk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWZmZXItPmRhdGFfcGFnZXNbaV0pOwogCi0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPnVzZXJfcGFnZSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlci0+dXNlcl9wYWdlKTsKIAogZmFpbF91c2VyX3BhZ2U6Ci0Ja2ZyZWUoZGF0YSk7CisJa2ZyZWUoYnVmZmVyKTsKIAogZmFpbDoKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NTYsMTcgKzI0NzUsMTcgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewogCWludCBpOwogCi0JcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucl9wYWdlczsgaSsrKQotCQlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPmRhdGFfcGFnZXNbaV0pOwotCWtmcmVlKGRhdGEpOworCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT51c2VyX3BhZ2UpOworCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPm5yX3BhZ2VzOyBpKyspCisJCXBlcmZfbW1hcF9mcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyLT5kYXRhX3BhZ2VzW2ldKTsKKwlrZnJlZShidWZmZXIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwYWdlX29yZGVyKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2Vfb3JkZXIoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDc5LDE4ICsyNDk4LDE4IEBACiAgKiBSZXF1aXJlZCBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgZC1jYWNoZSBhbGlhc2luZyBpc3N1ZXMuCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgcGFnZV9vcmRlcihzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgaW5saW5lIGludCBwYWdlX29yZGVyKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCXJldHVybiBkYXRhLT5wYWdlX29yZGVyOworCXJldHVybiBidWZmZXItPnBhZ2Vfb3JkZXI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqCi1wZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCitwZXJmX21tYXBfdG9fcGFnZShzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBwZ29mZikKIHsKLQlpZiAocGdvZmYgPiAoMVVMIDw8IHBhZ2Vfb3JkZXIoZGF0YSkpKQorCWlmIChwZ29mZiA+ICgxVUwgPDwgcGFnZV9vcmRlcihidWZmZXIpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKCh2b2lkICopZGF0YS0+dXNlcl9wYWdlICsgcGdvZmYgKiBQQUdFX1NJWkUpOworCXJldHVybiB2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilidWZmZXItPnVzZXJfcGFnZSArIHBnb2ZmICogUEFHRV9TSVpFKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX3VubWFya19wYWdlKHZvaWQgKmFkZHIpCkBAIC0yNTAwLDU3ICsyNTE5LDU5IEBACiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAl2b2lkICpiYXNlOwogCWludCBpLCBucjsKIAotCWRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCB3b3JrKTsKLQluciA9IDEgPDwgcGFnZV9vcmRlcihkYXRhKTsKKwlidWZmZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBlcmZfYnVmZmVyLCB3b3JrKTsKKwluciA9IDEgPDwgcGFnZV9vcmRlcihidWZmZXIpOwogCi0JYmFzZSA9IGRhdGEtPnVzZXJfcGFnZTsKKwliYXNlID0gYnVmZmVyLT51c2VyX3BhZ2U7CiAJZm9yIChpID0gMDsgaSA8IG5yICsgMTsgaSsrKQogCQlwZXJmX21tYXBfdW5tYXJrX3BhZ2UoYmFzZSArIChpICogUEFHRV9TSVpFKSk7CiAKIAl2ZnJlZShiYXNlKTsKLQlrZnJlZShkYXRhKTsKKwlrZnJlZShidWZmZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyB2b2lkIHBlcmZfYnVmZmVyX2ZyZWUoc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIpCiB7Ci0Jc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CisJc2NoZWR1bGVfd29yaygmYnVmZmVyLT53b3JrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqCi1wZXJmX21tYXBfZGF0YV9hbGxvYyhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBucl9wYWdlcykKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9idWZmZXIgKgorcGVyZl9idWZmZXJfYWxsb2MoaW50IG5yX3BhZ2VzLCBsb25nIHdhdGVybWFyaywgaW50IGNwdSwgaW50IGZsYWdzKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdm9pZCAqYWxsX2J1ZjsKIAotCXNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfbW1hcF9kYXRhKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX2J1ZmZlcik7CiAJc2l6ZSArPSBzaXplb2Yodm9pZCAqKTsKIAotCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKKwlidWZmZXIgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQogCQlnb3RvIGZhaWw7CiAKLQlJTklUX1dPUksoJmRhdGEtPndvcmssIHBlcmZfbW1hcF9kYXRhX2ZyZWVfd29yayk7CisJSU5JVF9XT1JLKCZidWZmZXItPndvcmssIHBlcmZfYnVmZmVyX2ZyZWVfd29yayk7CiAKIAlhbGxfYnVmID0gdm1hbGxvY191c2VyKChucl9wYWdlcyArIDEpICogUEFHRV9TSVpFKTsKIAlpZiAoIWFsbF9idWYpCiAJCWdvdG8gZmFpbF9hbGxfYnVmOwogCi0JZGF0YS0+dXNlcl9wYWdlID0gYWxsX2J1ZjsKLQlkYXRhLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKLQlkYXRhLT5wYWdlX29yZGVyID0gaWxvZzIobnJfcGFnZXMpOwotCWRhdGEtPm5yX3BhZ2VzID0gMTsKKwlidWZmZXItPnVzZXJfcGFnZSA9IGFsbF9idWY7CisJYnVmZmVyLT5kYXRhX3BhZ2VzWzBdID0gYWxsX2J1ZiArIFBBR0VfU0laRTsKKwlidWZmZXItPnBhZ2Vfb3JkZXIgPSBpbG9nMihucl9wYWdlcyk7CisJYnVmZmVyLT5ucl9wYWdlcyA9IDE7CiAKLQlyZXR1cm4gZGF0YTsKKwlwZXJmX2J1ZmZlcl9pbml0KGJ1ZmZlciwgd2F0ZXJtYXJrLCBmbGFncyk7CisKKwlyZXR1cm4gYnVmZmVyOwogCiBmYWlsX2FsbF9idWY6Ci0Ja2ZyZWUoZGF0YSk7CisJa2ZyZWUoYnVmZmVyKTsKIAogZmFpbDoKIAlyZXR1cm4gTlVMTDsKQEAgLTI1NTgsMTUgKzI1NzksMTUgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZGF0YV9zaXplKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBlcmZfZGF0YV9zaXplKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCXJldHVybiBkYXRhLT5ucl9wYWdlcyA8PCAoUEFHRV9TSElGVCArIHBhZ2Vfb3JkZXIoZGF0YSkpOworCXJldHVybiBidWZmZXItPm5yX3BhZ2VzIDw8IChQQUdFX1NISUZUICsgcGFnZV9vcmRlcihidWZmZXIpKTsKIH0KIAogc3RhdGljIGludCBwZXJmX21tYXBfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAlpbnQgcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCiAJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX01LV1JJVEUpIHsKQEAgLTI1NzYsMTQgKzI1OTcsMTQgQEAKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoIWJ1ZmZlcikKIAkJZ290byB1bmxvY2s7CiAKIAlpZiAodm1mLT5wZ29mZiAmJiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQogCQlnb3RvIHVubG9jazsKIAotCXZtZi0+cGFnZSA9IHBlcmZfbW1hcF90b19wYWdlKGRhdGEsIHZtZi0+cGdvZmYpOworCXZtZi0+cGFnZSA9IHBlcmZfbW1hcF90b19wYWdlKGJ1ZmZlciwgdm1mLT5wZ29mZik7CiAJaWYgKCF2bWYtPnBhZ2UpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC0yNTk4LDUyICsyNjE5LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQKLXBlcmZfbW1hcF9kYXRhX2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEpCitzdGF0aWMgdm9pZCBwZXJmX2J1ZmZlcl9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQogewotCWxvbmcgbWF4X3NpemUgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlcjsKIAotCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKLQkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgbWF4X3NpemUsCi0JCQkJCWV2ZW50LT5hdHRyLndha2V1cF93YXRlcm1hcmspOwotCX0KLQotCWlmICghZGF0YS0+d2F0ZXJtYXJrKQotCQlkYXRhLT53YXRlcm1hcmsgPSBtYXhfc2l6ZSAvIDI7Ci0KLQlhdG9taWNfc2V0KCZkYXRhLT5yZWZjb3VudCwgMSk7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5kYXRhLCBkYXRhKTsKKwlidWZmZXIgPSBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCBwZXJmX2J1ZmZlciwgcmN1X2hlYWQpOworCXBlcmZfYnVmZmVyX2ZyZWUoYnVmZmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9idWZmZXIgKnBlcmZfYnVmZmVyX2dldChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IHBlcmZfbW1hcF9kYXRhLCByY3VfaGVhZCk7Ci0JcGVyZl9tbWFwX2RhdGFfZnJlZShkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqcGVyZl9tbWFwX2RhdGFfZ2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZkYXRhLT5yZWZjb3VudCkpCi0JCQlkYXRhID0gTlVMTDsKKwlidWZmZXIgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmJ1ZmZlcik7CisJaWYgKGJ1ZmZlcikgeworCQlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmJ1ZmZlci0+cmVmY291bnQpKQorCQkJYnVmZmVyID0gTlVMTDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gZGF0YTsKKwlyZXR1cm4gYnVmZmVyOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9wdXQoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQorc3RhdGljIHZvaWQgcGVyZl9idWZmZXJfcHV0KHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyKQogewotCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmZGF0YS0+cmVmY291bnQpKQorCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmYnVmZmVyLT5yZWZjb3VudCkpCiAJCXJldHVybjsKIAotCWNhbGxfcmN1KCZkYXRhLT5yY3VfaGVhZCwgcGVyZl9tbWFwX2RhdGFfZnJlZV9yY3UpOworCWNhbGxfcmN1KCZidWZmZXItPnJjdV9oZWFkLCBwZXJmX2J1ZmZlcl9mcmVlX3JjdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtMjY1OCwxNiArMjY2MiwxNiBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmV2ZW50LT5tbWFwX2NvdW50LCAmZXZlbnQtPm1tYXBfbXV0ZXgpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHBlcmZfZGF0YV9zaXplKGV2ZW50LT5kYXRhKTsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcGVyZl9kYXRhX3NpemUoZXZlbnQtPmJ1ZmZlcik7CiAJCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGV2ZW50LT5tbWFwX3VzZXI7Ci0JCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGV2ZW50LT5kYXRhOworCQlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGV2ZW50LT5idWZmZXI7CiAKIAkJYXRvbWljX2xvbmdfc3ViKChzaXplID4+IFBBR0VfU0hJRlQpICsgMSwgJnVzZXItPmxvY2tlZF92bSk7CiAJCXZtYS0+dm1fbW0tPmxvY2tlZF92bSAtPSBldmVudC0+bW1hcF9sb2NrZWQ7Ci0JCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgTlVMTCk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+YnVmZmVyLCBOVUxMKTsKIAkJbXV0ZXhfdW5sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7CiAKLQkJcGVyZl9tbWFwX2RhdGFfcHV0KGRhdGEpOworCQlwZXJmX2J1ZmZlcl9wdXQoYnVmZmVyKTsKIAkJZnJlZV91aWQodXNlcik7CiAJfQogfQpAQCAtMjY4NSwxMSArMjY4OSwxMSBAQAogCXVuc2lnbmVkIGxvbmcgdXNlcl9sb2NrZWQsIHVzZXJfbG9ja19saW1pdDsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKIAl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyB2bWFfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwogCWxvbmcgdXNlcl9leHRyYSwgZXh0cmE7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIGZsYWdzID0gMDsKIAogCS8qCiAJICogRG9uJ3QgYWxsb3cgbW1hcCgpIG9mIGluaGVyaXRlZCBwZXItdGFzayBjb3VudGVycy4gVGhpcyB3b3VsZApAQCAtMjcwNiw3ICsyNzEwLDcgQEAKIAlucl9wYWdlcyA9ICh2bWFfc2l6ZSAvIFBBR0VfU0laRSkgLSAxOwogCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGRhdGEgcGFnZXMgZW5zdXJlIHRoZXkncmUgYSBwb3dlci1vZi10d28gbnVtYmVyLCBzbyB3ZQorCSAqIElmIHdlIGhhdmUgYnVmZmVyIHBhZ2VzIGVuc3VyZSB0aGV5J3JlIGEgcG93ZXItb2YtdHdvIG51bWJlciwgc28gd2UKIAkgKiBjYW4gZG8gYml0bWFza3MgaW5zdGVhZCBvZiBtb2R1bG8uCiAJICovCiAJaWYgKG5yX3BhZ2VzICE9IDAgJiYgIWlzX3Bvd2VyX29mXzIobnJfcGFnZXMpKQpAQCAtMjcyMCw5ICsyNzI0LDkgQEAKIAogCVdBUk5fT05fT05DRShldmVudC0+Y3R4LT5wYXJlbnRfY3R4KTsKIAltdXRleF9sb2NrKCZldmVudC0+bW1hcF9tdXRleCk7Ci0JaWYgKGV2ZW50LT5kYXRhKSB7Ci0JCWlmIChldmVudC0+ZGF0YS0+bnJfcGFnZXMgPT0gbnJfcGFnZXMpCi0JCQlhdG9taWNfaW5jKCZldmVudC0+ZGF0YS0+cmVmY291bnQpOworCWlmIChldmVudC0+YnVmZmVyKSB7CisJCWlmIChldmVudC0+YnVmZmVyLT5ucl9wYWdlcyA9PSBucl9wYWdlcykKKwkJCWF0b21pY19pbmMoJmV2ZW50LT5idWZmZXItPnJlZmNvdW50KTsKIAkJZWxzZQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CkBAIC0yNzUyLDE3ICsyNzU2LDE4IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCVdBUk5fT04oZXZlbnQtPmRhdGEpOworCVdBUk5fT04oZXZlbnQtPmJ1ZmZlcik7CiAKLQlkYXRhID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKLQlpZiAoIWRhdGEpIHsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQorCQlmbGFncyB8PSBQRVJGX0JVRkZFUl9XUklUQUJMRTsKKworCWJ1ZmZlciA9IHBlcmZfYnVmZmVyX2FsbG9jKG5yX3BhZ2VzLCBldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrLAorCQkJCSAgIGV2ZW50LT5jcHUsIGZsYWdzKTsKKwlpZiAoIWJ1ZmZlcikgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIHVubG9jazsKIAl9Ci0KLQlwZXJmX21tYXBfZGF0YV9pbml0KGV2ZW50LCBkYXRhKTsKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKQotCQlldmVudC0+ZGF0YS0+d3JpdGFibGUgPSAxOworCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+YnVmZmVyLCBidWZmZXIpOwogCiAJYXRvbWljX2xvbmdfYWRkKHVzZXJfZXh0cmEsICZ1c2VyLT5sb2NrZWRfdm0pOwogCWV2ZW50LT5tbWFwX2xvY2tlZCA9IGV4dHJhOwpAQCAtMjk0MSwxMSArMjk0Niw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLV9fd2Vhawotdm9pZCBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXAsIGludCBza2lwKQotewotfQotCiAKIC8qCiAgKiBXZSBhc3N1bWUgdGhlcmUgaXMgb25seSBLVk0gc3VwcG9ydGluZyB0aGUgY2FsbGJhY2tzLgpAQCAtMjk3MSwxNSArMjk3MSwxNSBAQAogLyoKICAqIE91dHB1dAogICovCi1zdGF0aWMgYm9vbCBwZXJmX291dHB1dF9zcGFjZShzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGxvbmcgdGFpbCwKK3N0YXRpYyBib29sIHBlcmZfb3V0cHV0X3NwYWNlKHN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHRhaWwsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBoZWFkKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCWlmICghZGF0YS0+d3JpdGFibGUpCisJaWYgKCFidWZmZXItPndyaXRhYmxlKQogCQlyZXR1cm4gdHJ1ZTsKIAotCW1hc2sgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKSAtIDE7CisJbWFzayA9IHBlcmZfZGF0YV9zaXplKGJ1ZmZlcikgLSAxOwogCiAJb2Zmc2V0ID0gKG9mZnNldCAtIHRhaWwpICYgbWFzazsKIAloZWFkICAgPSAoaGVhZCAgIC0gdGFpbCkgJiBtYXNrOwpAQCAtMjk5Miw3ICsyOTkyLDcgQEAKIAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfd2FrZXVwKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlhdG9taWNfc2V0KCZoYW5kbGUtPmRhdGEtPnBvbGwsIFBPTExfSU4pOworCWF0b21pY19zZXQoJmhhbmRsZS0+YnVmZmVyLT5wb2xsLCBQT0xMX0lOKTsKIAogCWlmIChoYW5kbGUtPm5taSkgewogCQloYW5kbGUtPmV2ZW50LT5wZW5kaW5nX3dha2V1cCA9IDE7CkBAIC0zMDEyLDQ1ICszMDEyLDQ1IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBlcmZfb3V0cHV0X2dldF9oYW5kbGUoc3RydWN0IHBlcmZfb3V0cHV0X2hhbmRsZSAqaGFuZGxlKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGhhbmRsZS0+YnVmZmVyOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbG9jYWxfaW5jKCZkYXRhLT5uZXN0KTsKLQloYW5kbGUtPndha2V1cCA9IGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCk7CisJbG9jYWxfaW5jKCZidWZmZXItPm5lc3QpOworCWhhbmRsZS0+d2FrZXVwID0gbG9jYWxfcmVhZCgmYnVmZmVyLT53YWtldXApOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX291dHB1dF9wdXRfaGFuZGxlKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGEgPSBoYW5kbGUtPmRhdGE7CisJc3RydWN0IHBlcmZfYnVmZmVyICpidWZmZXIgPSBoYW5kbGUtPmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGhlYWQ7CiAKIGFnYWluOgotCWhlYWQgPSBsb2NhbF9yZWFkKCZkYXRhLT5oZWFkKTsKKwloZWFkID0gbG9jYWxfcmVhZCgmYnVmZmVyLT5oZWFkKTsKIAogCS8qCiAJICogSVJRL05NSSBjYW4gaGFwcGVuIGhlcmUsIHdoaWNoIG1lYW5zIHdlIGNhbiBtaXNzIGEgaGVhZCB1cGRhdGUuCiAJICovCiAKLQlpZiAoIWxvY2FsX2RlY19hbmRfdGVzdCgmZGF0YS0+bmVzdCkpCisJaWYgKCFsb2NhbF9kZWNfYW5kX3Rlc3QoJmJ1ZmZlci0+bmVzdCkpCiAJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBQdWJsaXNoIHRoZSBrbm93biBnb29kIGhlYWQuIFJlbHkgb24gdGhlIGZ1bGwgYmFycmllciBpbXBsaWVkCi0JICogYnkgYXRvbWljX2RlY19hbmRfdGVzdCgpIG9yZGVyIHRoZSBkYXRhLT5oZWFkIHJlYWQgYW5kIHRoaXMKKwkgKiBieSBhdG9taWNfZGVjX2FuZF90ZXN0KCkgb3JkZXIgdGhlIGJ1ZmZlci0+aGVhZCByZWFkIGFuZCB0aGlzCiAJICogd3JpdGUuCiAJICovCi0JZGF0YS0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOworCWJ1ZmZlci0+dXNlcl9wYWdlLT5kYXRhX2hlYWQgPSBoZWFkOwogCiAJLyoKIAkgKiBOb3cgY2hlY2sgaWYgd2UgbWlzc2VkIGFuIHVwZGF0ZSwgcmVseSBvbiB0aGUgKGNvbXBpbGVyKQotCSAqIGJhcnJpZXIgaW4gYXRvbWljX2RlY19hbmRfdGVzdCgpIHRvIHJlLXJlYWQgZGF0YS0+aGVhZC4KKwkgKiBiYXJyaWVyIGluIGF0b21pY19kZWNfYW5kX3Rlc3QoKSB0byByZS1yZWFkIGJ1ZmZlci0+aGVhZC4KIAkgKi8KLQlpZiAodW5saWtlbHkoaGVhZCAhPSBsb2NhbF9yZWFkKCZkYXRhLT5oZWFkKSkpIHsKLQkJbG9jYWxfaW5jKCZkYXRhLT5uZXN0KTsKKwlpZiAodW5saWtlbHkoaGVhZCAhPSBsb2NhbF9yZWFkKCZidWZmZXItPmhlYWQpKSkgeworCQlsb2NhbF9pbmMoJmJ1ZmZlci0+bmVzdCk7CiAJCWdvdG8gYWdhaW47CiAJfQogCi0JaWYgKGhhbmRsZS0+d2FrZXVwICE9IGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCkpCisJaWYgKGhhbmRsZS0+d2FrZXVwICE9IGxvY2FsX3JlYWQoJmJ1ZmZlci0+d2FrZXVwKSkKIAkJcGVyZl9vdXRwdXRfd2FrZXVwKGhhbmRsZSk7CiAKICBvdXQ6CkBAIC0zMDcwLDEyICszMDcwLDEyIEBACiAJCWJ1ZiArPSBzaXplOwogCQloYW5kbGUtPnNpemUgLT0gc2l6ZTsKIAkJaWYgKCFoYW5kbGUtPnNpemUpIHsKLQkJCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwkJCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyID0gaGFuZGxlLT5idWZmZXI7CiAKIAkJCWhhbmRsZS0+cGFnZSsrOwotCQkJaGFuZGxlLT5wYWdlICY9IGRhdGEtPm5yX3BhZ2VzIC0gMTsKLQkJCWhhbmRsZS0+YWRkciA9IGRhdGEtPmRhdGFfcGFnZXNbaGFuZGxlLT5wYWdlXTsKLQkJCWhhbmRsZS0+c2l6ZSA9IFBBR0VfU0laRSA8PCBwYWdlX29yZGVyKGRhdGEpOworCQkJaGFuZGxlLT5wYWdlICY9IGJ1ZmZlci0+bnJfcGFnZXMgLSAxOworCQkJaGFuZGxlLT5hZGRyID0gYnVmZmVyLT5kYXRhX3BhZ2VzW2hhbmRsZS0+cGFnZV07CisJCQloYW5kbGUtPnNpemUgPSBQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihidWZmZXIpOwogCQl9CiAJfSB3aGlsZSAobGVuKTsKIH0KQEAgLTMwODQsNyArMzA4NCw3IEBACiAJCSAgICAgIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdW5zaWduZWQgaW50IHNpemUsCiAJCSAgICAgIGludCBubWksIGludCBzYW1wbGUpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhOworCXN0cnVjdCBwZXJmX2J1ZmZlciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgdGFpbCwgb2Zmc2V0LCBoZWFkOwogCWludCBoYXZlX2xvc3Q7CiAJc3RydWN0IHsKQEAgLTMxMDAsMTkgKzMxMDAsMTkgQEAKIAlpZiAoZXZlbnQtPnBhcmVudCkKIAkJZXZlbnQgPSBldmVudC0+cGFyZW50OwogCi0JZGF0YSA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+ZGF0YSk7Ci0JaWYgKCFkYXRhKQorCWJ1ZmZlciA9IHJjdV9kZXJlZmVyZW5jZShldmVudC0+YnVmZmVyKTsKKwlpZiAoIWJ1ZmZlcikKIAkJZ290byBvdXQ7CiAKLQloYW5kbGUtPmRhdGEJPSBkYXRhOworCWhhbmRsZS0+YnVmZmVyCT0gYnVmZmVyOwogCWhhbmRsZS0+ZXZlbnQJPSBldmVudDsKIAloYW5kbGUtPm5taQk9IG5taTsKIAloYW5kbGUtPnNhbXBsZQk9IHNhbXBsZTsKIAotCWlmICghZGF0YS0+bnJfcGFnZXMpCisJaWYgKCFidWZmZXItPm5yX3BhZ2VzKQogCQlnb3RvIG91dDsKIAotCWhhdmVfbG9zdCA9IGxvY2FsX3JlYWQoJmRhdGEtPmxvc3QpOworCWhhdmVfbG9zdCA9IGxvY2FsX3JlYWQoJmJ1ZmZlci0+bG9zdCk7CiAJaWYgKGhhdmVfbG9zdCkKIAkJc2l6ZSArPSBzaXplb2YobG9zdF9ldmVudCk7CiAKQEAgLTMxMjQsMzAgKzMxMjQsMzAgQEAKIAkJICogdGFpbCBwb2ludGVyLiBTbyB0aGF0IGFsbCByZWFkcyB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlCiAJCSAqIHdyaXRlIGlzIGlzc3VlZC4KIAkJICovCi0JCXRhaWwgPSBBQ0NFU1NfT05DRShkYXRhLT51c2VyX3BhZ2UtPmRhdGFfdGFpbCk7CisJCXRhaWwgPSBBQ0NFU1NfT05DRShidWZmZXItPnVzZXJfcGFnZS0+ZGF0YV90YWlsKTsKIAkJc21wX3JtYigpOwotCQlvZmZzZXQgPSBoZWFkID0gbG9jYWxfcmVhZCgmZGF0YS0+aGVhZCk7CisJCW9mZnNldCA9IGhlYWQgPSBsb2NhbF9yZWFkKCZidWZmZXItPmhlYWQpOwogCQloZWFkICs9IHNpemU7Ci0JCWlmICh1bmxpa2VseSghcGVyZl9vdXRwdXRfc3BhY2UoZGF0YSwgdGFpbCwgb2Zmc2V0LCBoZWFkKSkpCisJCWlmICh1bmxpa2VseSghcGVyZl9vdXRwdXRfc3BhY2UoYnVmZmVyLCB0YWlsLCBvZmZzZXQsIGhlYWQpKSkKIAkJCWdvdG8gZmFpbDsKLQl9IHdoaWxlIChsb2NhbF9jbXB4Y2hnKCZkYXRhLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7CisJfSB3aGlsZSAobG9jYWxfY21weGNoZygmYnVmZmVyLT5oZWFkLCBvZmZzZXQsIGhlYWQpICE9IG9mZnNldCk7CiAKLQlpZiAoaGVhZCAtIGxvY2FsX3JlYWQoJmRhdGEtPndha2V1cCkgPiBkYXRhLT53YXRlcm1hcmspCi0JCWxvY2FsX2FkZChkYXRhLT53YXRlcm1hcmssICZkYXRhLT53YWtldXApOworCWlmIChoZWFkIC0gbG9jYWxfcmVhZCgmYnVmZmVyLT53YWtldXApID4gYnVmZmVyLT53YXRlcm1hcmspCisJCWxvY2FsX2FkZChidWZmZXItPndhdGVybWFyaywgJmJ1ZmZlci0+d2FrZXVwKTsKIAotCWhhbmRsZS0+cGFnZSA9IG9mZnNldCA+PiAoUEFHRV9TSElGVCArIHBhZ2Vfb3JkZXIoZGF0YSkpOwotCWhhbmRsZS0+cGFnZSAmPSBkYXRhLT5ucl9wYWdlcyAtIDE7Ci0JaGFuZGxlLT5zaXplID0gb2Zmc2V0ICYgKChQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihkYXRhKSkgLSAxKTsKLQloYW5kbGUtPmFkZHIgPSBkYXRhLT5kYXRhX3BhZ2VzW2hhbmRsZS0+cGFnZV07CisJaGFuZGxlLT5wYWdlID0gb2Zmc2V0ID4+IChQQUdFX1NISUZUICsgcGFnZV9vcmRlcihidWZmZXIpKTsKKwloYW5kbGUtPnBhZ2UgJj0gYnVmZmVyLT5ucl9wYWdlcyAtIDE7CisJaGFuZGxlLT5zaXplID0gb2Zmc2V0ICYgKChQQUdFX1NJWkUgPDwgcGFnZV9vcmRlcihidWZmZXIpKSAtIDEpOworCWhhbmRsZS0+YWRkciA9IGJ1ZmZlci0+ZGF0YV9wYWdlc1toYW5kbGUtPnBhZ2VdOwogCWhhbmRsZS0+YWRkciArPSBoYW5kbGUtPnNpemU7Ci0JaGFuZGxlLT5zaXplID0gKFBBR0VfU0laRSA8PCBwYWdlX29yZGVyKGRhdGEpKSAtIGhhbmRsZS0+c2l6ZTsKKwloYW5kbGUtPnNpemUgPSAoUEFHRV9TSVpFIDw8IHBhZ2Vfb3JkZXIoYnVmZmVyKSkgLSBoYW5kbGUtPnNpemU7CiAKIAlpZiAoaGF2ZV9sb3N0KSB7CiAJCWxvc3RfZXZlbnQuaGVhZGVyLnR5cGUgPSBQRVJGX1JFQ09SRF9MT1NUOwogCQlsb3N0X2V2ZW50LmhlYWRlci5taXNjID0gMDsKIAkJbG9zdF9ldmVudC5oZWFkZXIuc2l6ZSA9IHNpemVvZihsb3N0X2V2ZW50KTsKIAkJbG9zdF9ldmVudC5pZCAgICAgICAgICA9IGV2ZW50LT5pZDsKLQkJbG9zdF9ldmVudC5sb3N0ICAgICAgICA9IGxvY2FsX3hjaGcoJmRhdGEtPmxvc3QsIDApOworCQlsb3N0X2V2ZW50Lmxvc3QgICAgICAgID0gbG9jYWxfeGNoZygmYnVmZmVyLT5sb3N0LCAwKTsKIAogCQlwZXJmX291dHB1dF9wdXQoaGFuZGxlLCBsb3N0X2V2ZW50KTsKIAl9CkBAIC0zMTU1LDcgKzMxNTUsNyBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCWxvY2FsX2luYygmZGF0YS0+bG9zdCk7CisJbG9jYWxfaW5jKCZidWZmZXItPmxvc3QpOwogCXBlcmZfb3V0cHV0X3B1dF9oYW5kbGUoaGFuZGxlKTsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTMxNjYsMTUgKzMxNjYsMTUgQEAKIHZvaWQgcGVyZl9vdXRwdXRfZW5kKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBoYW5kbGUtPmV2ZW50OwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSA9IGhhbmRsZS0+ZGF0YTsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IGhhbmRsZS0+YnVmZmVyOwogCiAJaW50IHdha2V1cF9ldmVudHMgPSBldmVudC0+YXR0ci53YWtldXBfZXZlbnRzOwogCiAJaWYgKGhhbmRsZS0+c2FtcGxlICYmIHdha2V1cF9ldmVudHMpIHsKLQkJaW50IGV2ZW50cyA9IGxvY2FsX2luY19yZXR1cm4oJmRhdGEtPmV2ZW50cyk7CisJCWludCBldmVudHMgPSBsb2NhbF9pbmNfcmV0dXJuKCZidWZmZXItPmV2ZW50cyk7CiAJCWlmIChldmVudHMgPj0gd2FrZXVwX2V2ZW50cykgewotCQkJbG9jYWxfc3ViKHdha2V1cF9ldmVudHMsICZkYXRhLT5ldmVudHMpOwotCQkJbG9jYWxfaW5jKCZkYXRhLT53YWtldXApOworCQkJbG9jYWxfc3ViKHdha2V1cF9ldmVudHMsICZidWZmZXItPmV2ZW50cyk7CisJCQlsb2NhbF9pbmMoJmJ1ZmZlci0+d2FrZXVwKTsKIAkJfQogCX0KIApAQCAtMzIxMSw3ICszMjExLDcgQEAKIAl1NjQgdmFsdWVzWzRdOwogCWludCBuID0gMDsKIAotCXZhbHVlc1tuKytdID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNvdW50KTsKKwl2YWx1ZXNbbisrXSA9IHBlcmZfZXZlbnRfY291bnQoZXZlbnQpOwogCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX1RPVEFMX1RJTUVfRU5BQkxFRCkgewogCQl2YWx1ZXNbbisrXSA9IGV2ZW50LT50b3RhbF90aW1lX2VuYWJsZWQgKwogCQkJYXRvbWljNjRfcmVhZCgmZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CkBAIC0zMjQ4LDcgKzMyNDgsNyBAQAogCWlmIChsZWFkZXIgIT0gZXZlbnQpCiAJCWxlYWRlci0+cG11LT5yZWFkKGxlYWRlcik7CiAKLQl2YWx1ZXNbbisrXSA9IGF0b21pYzY0X3JlYWQoJmxlYWRlci0+Y291bnQpOworCXZhbHVlc1tuKytdID0gcGVyZl9ldmVudF9jb3VudChsZWFkZXIpOwogCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQogCQl2YWx1ZXNbbisrXSA9IHByaW1hcnlfZXZlbnRfaWQobGVhZGVyKTsKIApAQCAtMzI2MCw3ICszMjYwLDcgQEAKIAkJaWYgKHN1YiAhPSBldmVudCkKIAkJCXN1Yi0+cG11LT5yZWFkKHN1Yik7CiAKLQkJdmFsdWVzW24rK10gPSBhdG9taWM2NF9yZWFkKCZzdWItPmNvdW50KTsKKwkJdmFsdWVzW24rK10gPSBwZXJmX2V2ZW50X2NvdW50KHN1Yik7CiAJCWlmIChyZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKQogCQkJdmFsdWVzW24rK10gPSBwcmltYXJ5X2V2ZW50X2lkKHN1Yik7CiAKQEAgLTM0OTEsNyArMzQ5MSw3IEBACiAvKgogICogdGFzayB0cmFja2luZyAtLSBmb3JrL2V4aXQKICAqCi0gKiBlbmFibGVkIGJ5OiBhdHRyLmNvbW0gfCBhdHRyLm1tYXAgfCBhdHRyLnRhc2sKKyAqIGVuYWJsZWQgYnk6IGF0dHIuY29tbSB8IGF0dHIubW1hcCB8IGF0dHIubW1hcF9kYXRhIHwgYXR0ci50YXNrCiAgKi8KIAogc3RydWN0IHBlcmZfdGFza19ldmVudCB7CkBAIC0zNTQxLDcgKzM1NDEsOCBAQAogCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQogCQlyZXR1cm4gMDsKIAotCWlmIChldmVudC0+YXR0ci5jb21tIHx8IGV2ZW50LT5hdHRyLm1tYXAgfHwgZXZlbnQtPmF0dHIudGFzaykKKwlpZiAoZXZlbnQtPmF0dHIuY29tbSB8fCBldmVudC0+YXR0ci5tbWFwIHx8CisJICAgIGV2ZW50LT5hdHRyLm1tYXBfZGF0YSB8fCBldmVudC0+YXR0ci50YXNrKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtMzc2Niw3ICszNzY3LDggQEAKIH0KIAogc3RhdGljIGludCBwZXJmX2V2ZW50X21tYXBfbWF0Y2goc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAotCQkJCSAgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCisJCQkJICAgc3RydWN0IHBlcmZfbW1hcF9ldmVudCAqbW1hcF9ldmVudCwKKwkJCQkgICBpbnQgZXhlY3V0YWJsZSkKIHsKIAlpZiAoZXZlbnQtPnN0YXRlIDwgUEVSRl9FVkVOVF9TVEFURV9JTkFDVElWRSkKIAkJcmV0dXJuIDA7CkBAIC0zNzc0LDE5ICszNzc2LDIxIEBACiAJaWYgKGV2ZW50LT5jcHUgIT0gLTEgJiYgZXZlbnQtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGV2ZW50LT5hdHRyLm1tYXApCisJaWYgKCghZXhlY3V0YWJsZSAmJiBldmVudC0+YXR0ci5tbWFwX2RhdGEpIHx8CisJICAgIChleGVjdXRhYmxlICYmIGV2ZW50LT5hdHRyLm1tYXApKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwZXJmX2V2ZW50X21tYXBfY3R4KHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCwKLQkJCQkgIHN0cnVjdCBwZXJmX21tYXBfZXZlbnQgKm1tYXBfZXZlbnQpCisJCQkJICBzdHJ1Y3QgcGVyZl9tbWFwX2V2ZW50ICptbWFwX2V2ZW50LAorCQkJCSAgaW50IGV4ZWN1dGFibGUpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChwZXJmX2V2ZW50X21tYXBfbWF0Y2goZXZlbnQsIG1tYXBfZXZlbnQpKQorCQlpZiAocGVyZl9ldmVudF9tbWFwX21hdGNoKGV2ZW50LCBtbWFwX2V2ZW50LCBleGVjdXRhYmxlKSkKIAkJCXBlcmZfZXZlbnRfbW1hcF9vdXRwdXQoZXZlbnQsIG1tYXBfZXZlbnQpOwogCX0KIH0KQEAgLTM4MzAsNiArMzgzNCwxNCBAQAogCQlpZiAoIXZtYS0+dm1fbW0pIHsKIAkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIlt2ZHNvXSIsIHNpemVvZih0bXApKTsKIAkJCWdvdG8gZ290X25hbWU7CisJCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSB2bWEtPnZtX21tLT5zdGFydF9icmsgJiYKKwkJCQl2bWEtPnZtX2VuZCA+PSB2bWEtPnZtX21tLT5icmspIHsKKwkJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIltoZWFwXSIsIHNpemVvZih0bXApKTsKKwkJCWdvdG8gZ290X25hbWU7CisJCX0gZWxzZSBpZiAodm1hLT52bV9zdGFydCA8PSB2bWEtPnZtX21tLT5zdGFydF9zdGFjayAmJgorCQkJCXZtYS0+dm1fZW5kID49IHZtYS0+dm1fbW0tPnN0YXJ0X3N0YWNrKSB7CisJCQluYW1lID0gc3RybmNweSh0bXAsICJbc3RhY2tdIiwgc2l6ZW9mKHRtcCkpOworCQkJZ290byBnb3RfbmFtZTsKIAkJfQogCiAJCW5hbWUgPSBzdHJuY3B5KHRtcCwgIi8vYW5vbiIsIHNpemVvZih0bXApKTsKQEAgLTM4NDYsMTcgKzM4NTgsMTcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAljcHVjdHggPSAmZ2V0X2NwdV92YXIocGVyZl9jcHVfY29udGV4dCk7Ci0JcGVyZl9ldmVudF9tbWFwX2N0eCgmY3B1Y3R4LT5jdHgsIG1tYXBfZXZlbnQpOworCXBlcmZfZXZlbnRfbW1hcF9jdHgoJmNwdWN0eC0+Y3R4LCBtbWFwX2V2ZW50LCB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQyk7CiAJY3R4ID0gcmN1X2RlcmVmZXJlbmNlKGN1cnJlbnQtPnBlcmZfZXZlbnRfY3R4cCk7CiAJaWYgKGN0eCkKLQkJcGVyZl9ldmVudF9tbWFwX2N0eChjdHgsIG1tYXBfZXZlbnQpOworCQlwZXJmX2V2ZW50X21tYXBfY3R4KGN0eCwgbW1hcF9ldmVudCwgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMpOwogCXB1dF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJa2ZyZWUoYnVmKTsKIH0KIAotdm9pZCBfX3BlcmZfZXZlbnRfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3ZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBwZXJmX21tYXBfZXZlbnQgbW1hcF9ldmVudDsKIApAQCAtNDAxOCwxNCArNDAzMCwxNCBAQAogCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAKIGFnYWluOgotCW9sZCA9IHZhbCA9IGF0b21pYzY0X3JlYWQoJmh3Yy0+cGVyaW9kX2xlZnQpOworCW9sZCA9IHZhbCA9IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiAwOwogCiAJbnIgPSBkaXY2NF91NjQocGVyaW9kICsgdmFsLCBwZXJpb2QpOwogCW9mZnNldCA9IG5yICogcGVyaW9kOwogCXZhbCAtPSBvZmZzZXQ7Ci0JaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cGVyaW9kX2xlZnQsIG9sZCwgdmFsKSAhPSBvbGQpCisJaWYgKGxvY2FsNjRfY21weGNoZygmaHdjLT5wZXJpb2RfbGVmdCwgb2xkLCB2YWwpICE9IG9sZCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiBucjsKQEAgLTQwNjQsNyArNDA3Niw3IEBACiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CiAKLQlhdG9taWM2NF9hZGQobnIsICZldmVudC0+Y291bnQpOworCWxvY2FsNjRfYWRkKG5yLCAmZXZlbnQtPmNvdW50KTsKIAogCWlmICghcmVncykKIAkJcmV0dXJuOwpAQCAtNDA3NSw3ICs0MDg3LDcgQEAKIAlpZiAobnIgPT0gMSAmJiBod2MtPnNhbXBsZV9wZXJpb2QgPT0gMSAmJiAhZXZlbnQtPmF0dHIuZnJlcSkKIAkJcmV0dXJuIHBlcmZfc3dldmVudF9vdmVyZmxvdyhldmVudCwgMSwgbm1pLCBkYXRhLCByZWdzKTsKIAotCWlmIChhdG9taWM2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKKwlpZiAobG9jYWw2NF9hZGRfbmVnYXRpdmUobnIsICZod2MtPnBlcmlvZF9sZWZ0KSkKIAkJcmV0dXJuOwogCiAJcGVyZl9zd2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCBubWksIGRhdGEsIHJlZ3MpOwpAQCAtNDIxMywxNCArNDIyNSwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCk7CiAKLXZvaWQgcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChpbnQgcmN0eCkKK3ZvaWQgaW5saW5lIHBlcmZfc3dldmVudF9wdXRfcmVjdXJzaW9uX2NvbnRleHQoaW50IHJjdHgpCiB7CiAJc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9ICZfX2dldF9jcHVfdmFyKHBlcmZfY3B1X2NvbnRleHQpOwogCWJhcnJpZXIoKTsKIAljcHVjdHgtPnJlY3Vyc2lvbltyY3R4XS0tOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dCk7Ci0KIAogdm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIGludCBubWksCiAJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQpAQCAtNDM2OCw4ICs0Mzc4LDggQEAKIAl1NjQgbm93OwogCiAJbm93ID0gY3B1X2Nsb2NrKGNwdSk7Ci0JcHJldiA9IGF0b21pYzY0X3hjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBub3cpOwotCWF0b21pYzY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKKwlwcmV2ID0gbG9jYWw2NF94Y2hnKCZldmVudC0+aHcucHJldl9jb3VudCwgbm93KTsKKwlsb2NhbDY0X2FkZChub3cgLSBwcmV2LCAmZXZlbnQtPmNvdW50KTsKIH0KIAogc3RhdGljIGludCBjcHVfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDM3Nyw3ICs0Mzg3LDcgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAlpbnQgY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWF0b21pYzY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBjcHVfY2xvY2soY3B1KSk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgY3B1X2Nsb2NrKGNwdSkpOwogCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwpAQCAtNDQwOSw5ICs0NDE5LDkgQEAKIAl1NjQgcHJldjsKIAlzNjQgZGVsdGE7CiAKLQlwcmV2ID0gYXRvbWljNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CisJcHJldiA9IGxvY2FsNjRfeGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIG5vdyk7CiAJZGVsdGEgPSBub3cgLSBwcmV2OwotCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogfQogCiBzdGF0aWMgaW50IHRhc2tfY2xvY2tfcGVyZl9ldmVudF9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtNDQyMSw3ICs0NDMxLDcgQEAKIAogCW5vdyA9IGV2ZW50LT5jdHgtPnRpbWU7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbm93KTsKKwlsb2NhbDY0X3NldCgmaHdjLT5wcmV2X2NvdW50LCBub3cpOwogCiAJcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoZXZlbnQpOwogCkBAIC00NjAxLDcgKzQ2MTEsNyBAQAogfQogCiB2b2lkIHBlcmZfdHBfZXZlbnQodTY0IGFkZHIsIHU2NCBjb3VudCwgdm9pZCAqcmVjb3JkLCBpbnQgZW50cnlfc2l6ZSwKLQkJICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKQorCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGludCByY3R4KQogewogCXN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhIGRhdGE7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwpAQCAtNDYxNSwxMiArNDYyNSwxMiBAQAogCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgYWRkcik7CiAJZGF0YS5yYXcgPSAmcmF3OwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgbm9kZSwgaGVhZCwgaGxpc3RfZW50cnkpIHsKIAkJaWYgKHBlcmZfdHBfZXZlbnRfbWF0Y2goZXZlbnQsICZkYXRhLCByZWdzKSkKIAkJCXBlcmZfc3dldmVudF9hZGQoZXZlbnQsIGNvdW50LCAxLCAmZGF0YSwgcmVncyk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOworCisJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfdHBfZXZlbnQpOwogCkBAIC00ODY0LDcgKzQ4NzQsNyBAQAogCQlod2MtPnNhbXBsZV9wZXJpb2QgPSAxOwogCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAKLQlhdG9taWM2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisJbG9jYWw2NF9zZXQoJmh3Yy0+cGVyaW9kX2xlZnQsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CiAKIAkvKgogCSAqIHdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBQRVJGX0ZPUk1BVF9HUk9VUCBvbiBpbmhlcml0ZWQgZXZlbnRzCkBAIC00OTEzLDcgKzQ5MjMsNyBAQAogCiAJaWYgKCFldmVudC0+cGFyZW50KSB7CiAJCWF0b21pY19pbmMoJm5yX2V2ZW50cyk7Ci0JCWlmIChldmVudC0+YXR0ci5tbWFwKQorCQlpZiAoZXZlbnQtPmF0dHIubW1hcCB8fCBldmVudC0+YXR0ci5tbWFwX2RhdGEpCiAJCQlhdG9taWNfaW5jKCZucl9tbWFwX2V2ZW50cyk7CiAJCWlmIChldmVudC0+YXR0ci5jb21tKQogCQkJYXRvbWljX2luYygmbnJfY29tbV9ldmVudHMpOwpAQCAtNTAwNyw3ICs1MDE3LDcgQEAKIHN0YXRpYyBpbnQKIHBlcmZfZXZlbnRfc2V0X291dHB1dChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBwZXJmX2V2ZW50ICpvdXRwdXRfZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gTlVMTCwgKm9sZF9kYXRhID0gTlVMTDsKKwlzdHJ1Y3QgcGVyZl9idWZmZXIgKmJ1ZmZlciA9IE5VTEwsICpvbGRfYnVmZmVyID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghb3V0cHV0X2V2ZW50KQpAQCAtNTAzNywxOSArNTA0NywxOSBAQAogCiAJaWYgKG91dHB1dF9ldmVudCkgewogCQkvKiBnZXQgdGhlIGJ1ZmZlciB3ZSB3YW50IHRvIHJlZGlyZWN0IHRvICovCi0JCWRhdGEgPSBwZXJmX21tYXBfZGF0YV9nZXQob3V0cHV0X2V2ZW50KTsKLQkJaWYgKCFkYXRhKQorCQlidWZmZXIgPSBwZXJmX2J1ZmZlcl9nZXQob3V0cHV0X2V2ZW50KTsKKwkJaWYgKCFidWZmZXIpCiAJCQlnb3RvIHVubG9jazsKIAl9CiAKLQlvbGRfZGF0YSA9IGV2ZW50LT5kYXRhOwotCXJjdV9hc3NpZ25fcG9pbnRlcihldmVudC0+ZGF0YSwgZGF0YSk7CisJb2xkX2J1ZmZlciA9IGV2ZW50LT5idWZmZXI7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5idWZmZXIsIGJ1ZmZlcik7CiAJcmV0ID0gMDsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmV2ZW50LT5tbWFwX211dGV4KTsKIAotCWlmIChvbGRfZGF0YSkKLQkJcGVyZl9tbWFwX2RhdGFfcHV0KG9sZF9kYXRhKTsKKwlpZiAob2xkX2J1ZmZlcikKKwkJcGVyZl9idWZmZXJfcHV0KG9sZF9idWZmZXIpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC01Mjk4LDcgKzUzMDgsNyBAQAogCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBzYW1wbGVfcGVyaW9kOwogCQlod2MtPmxhc3RfcGVyaW9kICAgPSBzYW1wbGVfcGVyaW9kOwogCi0JCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgc2FtcGxlX3BlcmlvZCk7CisJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBzYW1wbGVfcGVyaW9kKTsKIAl9CiAKIAljaGlsZF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlciA9IHBhcmVudF9ldmVudC0+b3ZlcmZsb3dfaGFuZGxlcjsKQEAgLTUzNTksMTIgKzUzNjksMTIgQEAKIAlpZiAoY2hpbGRfZXZlbnQtPmF0dHIuaW5oZXJpdF9zdGF0KQogCQlwZXJmX2V2ZW50X3JlYWRfZXZlbnQoY2hpbGRfZXZlbnQsIGNoaWxkKTsKIAotCWNoaWxkX3ZhbCA9IGF0b21pYzY0X3JlYWQoJmNoaWxkX2V2ZW50LT5jb3VudCk7CisJY2hpbGRfdmFsID0gcGVyZl9ldmVudF9jb3VudChjaGlsZF9ldmVudCk7CiAKIAkvKgogCSAqIEFkZCBiYWNrIHRoZSBjaGlsZCdzIGNvdW50IHRvIHRoZSBwYXJlbnQncyBjb3VudDoKIAkgKi8KLQlhdG9taWM2NF9hZGQoY2hpbGRfdmFsLCAmcGFyZW50X2V2ZW50LT5jb3VudCk7CisJYXRvbWljNjRfYWRkKGNoaWxkX3ZhbCwgJnBhcmVudF9ldmVudC0+Y2hpbGRfY291bnQpOwogCWF0b21pYzY0X2FkZChjaGlsZF9ldmVudC0+dG90YWxfdGltZV9lbmFibGVkLAogCQkgICAgICZwYXJlbnRfZXZlbnQtPmNoaWxkX3RvdGFsX3RpbWVfZW5hYmxlZCk7CiAJYXRvbWljNjRfYWRkKGNoaWxkX2V2ZW50LT50b3RhbF90aW1lX3J1bm5pbmcsCmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggZTlmZDhjMS4uZDU1YzZmYiAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtMTIyLDYgKzEyMiw0MyBAQAogCWF0b21pY19pbmMoJm1hcC0+bnJfZnJlZSk7CiB9CiAKKy8qCisgKiBJZiB3ZSBzdGFydGVkIHdhbGtpbmcgcGlkcyBhdCAnYmFzZScsIGlzICdhJyBzZWVuIGJlZm9yZSAnYic/CisgKi8KK3N0YXRpYyBpbnQgcGlkX2JlZm9yZShpbnQgYmFzZSwgaW50IGEsIGludCBiKQoreworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcyBzYXlpbmcKKwkgKgorCSAqIChhIC0gYmFzZSArIE1BWFVJTlQpICUgTUFYVUlOVCA8IChiIC0gYmFzZSArIE1BWFVJTlQpICUgTUFYVUlOVAorCSAqIGFuZCB0aGF0IG1hcHBpbmcgb3JkZXJzICdhJyBhbmQgJ2InIHdpdGggcmVzcGVjdCB0byAnYmFzZScuCisJICovCisJcmV0dXJuICh1bnNpZ25lZCkoYSAtIGJhc2UpIDwgKHVuc2lnbmVkKShiIC0gYmFzZSk7Cit9CisKKy8qCisgKiBXZSBtaWdodCBiZSByYWNpbmcgd2l0aCBzb21lb25lIGVsc2UgdHJ5aW5nIHRvIHNldCBwaWRfbnMtPmxhc3RfcGlkLgorICogV2Ugd2FudCB0aGUgd2lubmVyIHRvIGhhdmUgdGhlICJsYXRlciIgdmFsdWUsIGJlY2F1c2UgaWYgdGhlCisgKiAiZWFybGllciIgdmFsdWUgcHJldmFpbHMsIHRoZW4gYSBwaWQgbWF5IGdldCByZXVzZWQgaW1tZWRpYXRlbHkuCisgKgorICogU2luY2UgcGlkcyByb2xsb3ZlciwgaXQgaXMgbm90IHN1ZmZpY2llbnQgdG8ganVzdCBwaWNrIHRoZSBiaWdnZXIKKyAqIHZhbHVlLiAgV2UgaGF2ZSB0byBjb25zaWRlciB3aGVyZSB3ZSBzdGFydGVkIGNvdW50aW5nIGZyb20uCisgKgorICogJ2Jhc2UnIGlzIHRoZSB2YWx1ZSBvZiBwaWRfbnMtPmxhc3RfcGlkIHRoYXQgd2Ugb2JzZXJ2ZWQgd2hlbgorICogd2Ugc3RhcnRlZCBsb29raW5nIGZvciBhIHBpZC4KKyAqCisgKiAncGlkJyBpcyB0aGUgcGlkIHRoYXQgd2UgZXZlbnR1YWxseSBmb3VuZC4KKyAqLworc3RhdGljIHZvaWQgc2V0X2xhc3RfcGlkKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMsIGludCBiYXNlLCBpbnQgcGlkKQoreworCWludCBwcmV2OworCWludCBsYXN0X3dyaXRlID0gYmFzZTsKKwlkbyB7CisJCXByZXYgPSBsYXN0X3dyaXRlOworCQlsYXN0X3dyaXRlID0gY21weGNoZygmcGlkX25zLT5sYXN0X3BpZCwgcHJldiwgcGlkKTsKKwl9IHdoaWxlICgocHJldiAhPSBsYXN0X3dyaXRlKSAmJiAocGlkX2JlZm9yZShiYXNlLCBsYXN0X3dyaXRlLCBwaWQpKSk7Cit9CisKIHN0YXRpYyBpbnQgYWxsb2NfcGlkbWFwKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMpCiB7CiAJaW50IGksIG9mZnNldCwgbWF4X3NjYW4sIHBpZCwgbGFzdCA9IHBpZF9ucy0+bGFzdF9waWQ7CkBAIC0xMzIsNyArMTY5LDEyIEBACiAJCXBpZCA9IFJFU0VSVkVEX1BJRFM7CiAJb2Zmc2V0ID0gcGlkICYgQklUU19QRVJfUEFHRV9NQVNLOwogCW1hcCA9ICZwaWRfbnMtPnBpZG1hcFtwaWQvQklUU19QRVJfUEFHRV07Ci0JbWF4X3NjYW4gPSAocGlkX21heCArIEJJVFNfUEVSX1BBR0UgLSAxKS9CSVRTX1BFUl9QQUdFIC0gIW9mZnNldDsKKwkvKgorCSAqIElmIGxhc3RfcGlkIHBvaW50cyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIG1hcC0+cGFnZSB3ZQorCSAqIHdhbnQgdG8gc2NhbiB0aGlzIGJpdG1hcCBibG9jayB0d2ljZSwgdGhlIHNlY29uZCB0aW1lCisJICogd2Ugc3RhcnQgd2l0aCBvZmZzZXQgPT0gMCAob3IgUkVTRVJWRURfUElEUykuCisJICovCisJbWF4X3NjYW4gPSBESVZfUk9VTkRfVVAocGlkX21heCwgQklUU19QRVJfUEFHRSkgLSAhb2Zmc2V0OwogCWZvciAoaSA9IDA7IGkgPD0gbWF4X3NjYW47ICsraSkgewogCQlpZiAodW5saWtlbHkoIW1hcC0+cGFnZSkpIHsKIAkJCXZvaWQgKnBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CkBAIC0xNTQsMjAgKzE5NiwxMiBAQAogCQkJZG8gewogCQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChvZmZzZXQsIG1hcC0+cGFnZSkpIHsKIAkJCQkJYXRvbWljX2RlYygmbWFwLT5ucl9mcmVlKTsKLQkJCQkJcGlkX25zLT5sYXN0X3BpZCA9IHBpZDsKKwkJCQkJc2V0X2xhc3RfcGlkKHBpZF9ucywgbGFzdCwgcGlkKTsKIAkJCQkJcmV0dXJuIHBpZDsKIAkJCQl9CiAJCQkJb2Zmc2V0ID0gZmluZF9uZXh0X29mZnNldChtYXAsIG9mZnNldCk7CiAJCQkJcGlkID0gbWtfcGlkKHBpZF9ucywgbWFwLCBvZmZzZXQpOwotCQkJLyoKLQkJCSAqIGZpbmRfbmV4dF9vZmZzZXQoKSBmb3VuZCBhIGJpdCwgdGhlIHBpZCBmcm9tIGl0Ci0JCQkgKiBpcyBpbi1ib3VuZHMsIGFuZCBpZiB3ZSBmZWxsIGJhY2sgdG8gdGhlIGxhc3QKLQkJCSAqIGJpdG1hcCBibG9jayBhbmQgdGhlIGZpbmFsIGJsb2NrIHdhcyB0aGUgc2FtZQotCQkJICogYXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBwaWQgaXMgYmVmb3JlIGxhc3RfcGlkLgotCQkJICovCi0JCQl9IHdoaWxlIChvZmZzZXQgPCBCSVRTX1BFUl9QQUdFICYmIHBpZCA8IHBpZF9tYXggJiYKLQkJCQkJKGkgIT0gbWF4X3NjYW4gfHwgcGlkIDwgbGFzdCB8fAotCQkJCQkgICAgISgobGFzdCsxKSAmIEJJVFNfUEVSX1BBR0VfTUFTSykpKTsKKwkJCX0gd2hpbGUgKG9mZnNldCA8IEJJVFNfUEVSX1BBR0UgJiYgcGlkIDwgcGlkX21heCk7CiAJCX0KIAkJaWYgKG1hcCA8ICZwaWRfbnMtPnBpZG1hcFsocGlkX21heC0xKS9CSVRTX1BFUl9QQUdFXSkgewogCQkJKyttYXA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCA5ODI5NjQ2Li42ODQyZWViIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTE2LDEzICsxNiwxMyBAQAogICogc2lnbG9jayBwcm90ZWN0aW9uIHNpbmNlIG90aGVyIGNvZGUgbWF5IHVwZGF0ZSBleHBpcmF0aW9uIGNhY2hlIGFzCiAgKiB3ZWxsLgogICovCi12b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHVuc2lnbmVkIGxvbmcgcmxpbV9uZXcpCit2b2lkIHVwZGF0ZV9ybGltaXRfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBybGltX25ldykKIHsKIAljcHV0aW1lX3QgY3B1dGltZSA9IHNlY3NfdG9fY3B1dGltZShybGltX25ldyk7CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzZXRfcHJvY2Vzc19jcHVfdGltZXIoY3VycmVudCwgQ1BVQ0xPQ0tfUFJPRiwgJmNwdXRpbWUsIE5VTEwpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdGFzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJc2V0X3Byb2Nlc3NfY3B1X3RpbWVyKHRhc2ssIENQVUNMT0NLX1BST0YsICZjcHV0aW1lLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEoJnRhc2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2Nsb2NrKGNvbnN0IGNsb2NraWRfdCB3aGljaF9jbG9jaykKQEAgLTIzMiwzMSArMjMyLDI0IEBACiAKIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCB0YXNrX2NwdXRpbWUgKnRpbWVzKQogewotCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaGFuZDsKLQlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOworCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0c2stPnNpZ25hbDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiAKLQkqdGltZXMgPSBJTklUX0NQVVRJTUU7CisJdGltZXMtPnV0aW1lID0gc2lnLT51dGltZTsKKwl0aW1lcy0+c3RpbWUgPSBzaWctPnN0aW1lOworCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lID0gc2lnLT5zdW1fc2NoZWRfcnVudGltZTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzaWdoYW5kID0gcmN1X2RlcmVmZXJlbmNlKHRzay0+c2lnaGFuZCk7Ci0JaWYgKCFzaWdoYW5kKQorCS8qIG1ha2Ugc3VyZSB3ZSBjYW4gdHJ1c3QgdHNrLT50aHJlYWRfZ3JvdXAgbGlzdCAqLworCWlmICghbGlrZWx5KHBpZF9hbGl2ZSh0c2spKSkKIAkJZ290byBvdXQ7CiAKLQlzaWcgPSB0c2stPnNpZ25hbDsKLQogCXQgPSB0c2s7CiAJZG8gewogCQl0aW1lcy0+dXRpbWUgPSBjcHV0aW1lX2FkZCh0aW1lcy0+dXRpbWUsIHQtPnV0aW1lKTsKIAkJdGltZXMtPnN0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnN0aW1lLCB0LT5zdGltZSk7CiAJCXRpbWVzLT5zdW1fZXhlY19ydW50aW1lICs9IHQtPnNlLnN1bV9leGVjX3J1bnRpbWU7Ci0KLQkJdCA9IG5leHRfdGhyZWFkKHQpOwotCX0gd2hpbGUgKHQgIT0gdHNrKTsKLQotCXRpbWVzLT51dGltZSA9IGNwdXRpbWVfYWRkKHRpbWVzLT51dGltZSwgc2lnLT51dGltZSk7Ci0JdGltZXMtPnN0aW1lID0gY3B1dGltZV9hZGQodGltZXMtPnN0aW1lLCBzaWctPnN0aW1lKTsKLQl0aW1lcy0+c3VtX2V4ZWNfcnVudGltZSArPSBzaWctPnN1bV9zY2hlZF9ydW50aW1lOworCX0gd2hpbGVfZWFjaF90aHJlYWQodHNrLCB0KTsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTEyNzksMTAgKzEyNzIsNiBAQAogewogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7CiAKLQkvKiB0c2sgPT0gY3VycmVudCwgZW5zdXJlIGl0IGlzIHNhZmUgdG8gdXNlIC0+c2lnbmFsL3NpZ2hhbmQgKi8KLQlpZiAodW5saWtlbHkodHNrLT5leGl0X3N0YXRlKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIXRhc2tfY3B1dGltZV96ZXJvKCZ0c2stPmNwdXRpbWVfZXhwaXJlcykpIHsKIAkJc3RydWN0IHRhc2tfY3B1dGltZSB0YXNrX3NhbXBsZSA9IHsKIAkJCS51dGltZSA9IHRzay0+dXRpbWUsCkBAIC0xMjk4LDcgKzEyODcsMTAgQEAKIAlpZiAoc2lnLT5jcHV0aW1lci5ydW5uaW5nKSB7CiAJCXN0cnVjdCB0YXNrX2NwdXRpbWUgZ3JvdXBfc2FtcGxlOwogCi0JCXRocmVhZF9ncm91cF9jcHV0aW1lcih0c2ssICZncm91cF9zYW1wbGUpOworCQlzcGluX2xvY2soJnNpZy0+Y3B1dGltZXIubG9jayk7CisJCWdyb3VwX3NhbXBsZSA9IHNpZy0+Y3B1dGltZXIuY3B1dGltZTsKKwkJc3Bpbl91bmxvY2soJnNpZy0+Y3B1dGltZXIubG9jayk7CisKIAkJaWYgKHRhc2tfY3B1dGltZV9leHBpcmVkKCZncm91cF9zYW1wbGUsICZzaWctPmNwdXRpbWVfZXhwaXJlcykpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0xMzE1LDYgKzEzMDcsNyBAQAogewogCUxJU1RfSEVBRChmaXJpbmcpOwogCXN0cnVjdCBrX2l0aW1lciAqdGltZXIsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKQEAgLTEzMjUsNyArMTMxOCw4IEBACiAJaWYgKCFmYXN0cGF0aF90aW1lcl9jaGVjayh0c2spKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CisJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZCh0c2ssICZmbGFncykpCisJCXJldHVybjsKIAkvKgogCSAqIEhlcmUgd2UgdGFrZSBvZmYgdHNrLT5zaWduYWwtPmNwdV90aW1lcnNbTl0gYW5kCiAJICogdHNrLT5jcHVfdGltZXJzW05dIGFsbCB0aGUgdGltZXJzIHRoYXQgYXJlIGZpcmluZywgYW5kCkBAIC0xMzQ3LDcgKzEzNDEsNyBAQAogCSAqIHRoYXQgZ2V0cyB0aGUgdGltZXIgbG9jayBiZWZvcmUgd2UgZG8gd2lsbCBnaXZlIGl0IHVwIGFuZAogCSAqIHNwaW4gdW50aWwgd2UndmUgdGFrZW4gY2FyZSBvZiB0aGF0IHRpbWVyIGJlbG93LgogCSAqLwotCXNwaW5fdW5sb2NrKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOworCXVubG9ja190YXNrX3NpZ2hhbmQodHNrLCAmZmxhZ3MpOwogCiAJLyoKIAkgKiBOb3cgdGhhdCBhbGwgdGhlIHRpbWVycyBvbiBvdXIgbGlzdCBoYXZlIHRoZSBmaXJpbmcgZmxhZywKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCBhZDcyMzQyLi45Y2E0OTczIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC01NjAsMTEgKzU2MCw2IEBACiAJbmV3X3RpbWVyLT5pdF9jbG9jayA9IHdoaWNoX2Nsb2NrOwogCW5ld190aW1lci0+aXRfb3ZlcnJ1biA9IC0xOwogCi0JaWYgKGNvcHlfdG9fdXNlcihjcmVhdGVkX3RpbWVyX2lkLAotCQkJICZuZXdfdGltZXJfaWQsIHNpemVvZiAobmV3X3RpbWVyX2lkKSkpIHsKLQkJZXJyb3IgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9CiAJaWYgKHRpbWVyX2V2ZW50X3NwZWMpIHsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZldmVudCwgdGltZXJfZXZlbnRfc3BlYywgc2l6ZW9mIChldmVudCkpKSB7CiAJCQllcnJvciA9IC1FRkFVTFQ7CkBAIC01OTAsNiArNTg1LDEyIEBACiAJbmV3X3RpbWVyLT5zaWdxLT5pbmZvLnNpX3RpZCAgID0gbmV3X3RpbWVyLT5pdF9pZDsKIAluZXdfdGltZXItPnNpZ3EtPmluZm8uc2lfY29kZSAgPSBTSV9USU1FUjsKIAorCWlmIChjb3B5X3RvX3VzZXIoY3JlYXRlZF90aW1lcl9pZCwKKwkJCSAmbmV3X3RpbWVyX2lkLCBzaXplb2YgKG5ld190aW1lcl9pZCkpKSB7CisJCWVycm9yID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyb3IgPSBDTE9DS19ESVNQQVRDSCh3aGljaF9jbG9jaywgdGltZXJfY3JlYXRlLCAobmV3X3RpbWVyKSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9ibG9ja19pby5jIGIva2VybmVsL3Bvd2VyL2Jsb2NrX2lvLmMKaW5kZXggOTcwMjRmZC4uODNiYmM3YyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Jsb2NrX2lvLmMKKysrIGIva2VybmVsL3Bvd2VyL2Jsb2NrX2lvLmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyBpbnQgc3VibWl0KGludCBydywgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGJpbyAqKmJpb19jaGFpbikKIHsKLQljb25zdCBpbnQgYmlvX3J3ID0gcncgfCAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpOworCWNvbnN0IGludCBiaW9fcncgPSBydyB8IFJFUV9TWU5DIHwgUkVRX1VOUExVRzsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKIAliaW8gPSBiaW9fYWxsb2MoX19HRlBfV0FJVCB8IF9fR0ZQX0hJR0gsIDEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDhkYzMxZTAuLmM3Nzk2MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTMzOCw2ICszMzgsNyBAQAogCQlnb3RvIENsb3NlOwogCiAJc3VzcGVuZF9jb25zb2xlKCk7CisJaGliZXJuYXRpb25fZnJlZXplX3N3YXAoKTsKIAlzYXZlZF9tYXNrID0gY2xlYXJfZ2ZwX2FsbG93ZWRfbWFzayhHRlBfSU9GUyk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX0ZSRUVaRSk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKaW5kZXggNzFhZTI5MC4uMDI4YTk5NSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYworKysgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogLyogCiAgKiBUaW1lb3V0IGZvciBzdG9wcGluZyBwcm9jZXNzZXMKQEAgLTM1LDYgKzM2LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiAJdW5zaWduZWQgaW50IHRvZG87CisJYm9vbCB3cV9idXN5ID0gZmFsc2U7CiAJc3RydWN0IHRpbWV2YWwgc3RhcnQsIGVuZDsKIAl1NjQgZWxhcHNlZF9jc2VjczY0OwogCXVuc2lnbmVkIGludCBlbGFwc2VkX2NzZWNzOwpAQCAtNDIsNiArNDQsMTAgQEAKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKIAogCWVuZF90aW1lID0gamlmZmllcyArIFRJTUVPVVQ7CisKKwlpZiAoIXNpZ19vbmx5KQorCQlmcmVlemVfd29ya3F1ZXVlc19iZWdpbigpOworCiAJd2hpbGUgKHRydWUpIHsKIAkJdG9kbyA9IDA7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC02Myw2ICs2OSwxMiBAQAogCQkJCXRvZG8rKzsKIAkJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCisJCWlmICghc2lnX29ubHkpIHsKKwkJCXdxX2J1c3kgPSBmcmVlemVfd29ya3F1ZXVlc19idXN5KCk7CisJCQl0b2RvICs9IHdxX2J1c3k7CisJCX0KKwogCQlpZiAoIXRvZG8gfHwgdGltZV9hZnRlcihqaWZmaWVzLCBlbmRfdGltZSkpCiAJCQlicmVhazsKIApAQCAtODYsOCArOTgsMTIgQEAKIAkJICovCiAJCXByaW50aygiXG4iKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJGcmVlemluZyBvZiB0YXNrcyBmYWlsZWQgYWZ0ZXIgJWQuJTAyZCBzZWNvbmRzICIKLQkJCQkiKCVkIHRhc2tzIHJlZnVzaW5nIHRvIGZyZWV6ZSk6XG4iLAotCQkJCWVsYXBzZWRfY3NlY3MgLyAxMDAsIGVsYXBzZWRfY3NlY3MgJSAxMDAsIHRvZG8pOworCQkgICAgICAgIiglZCB0YXNrcyByZWZ1c2luZyB0byBmcmVlemUsIHdxX2J1c3k9JWQpOlxuIiwKKwkJICAgICAgIGVsYXBzZWRfY3NlY3MgLyAxMDAsIGVsYXBzZWRfY3NlY3MgJSAxMDAsCisJCSAgICAgICB0b2RvIC0gd3FfYnVzeSwgd3FfYnVzeSk7CisKKwkJdGhhd193b3JrcXVldWVzKCk7CisKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewogCQkJdGFza19sb2NrKHApOwpAQCAtMTU3LDYgKzE3Myw3IEBACiAJb29tX2tpbGxlcl9lbmFibGUoKTsKIAogCXByaW50aygiUmVzdGFydGluZyB0YXNrcyAuLi4gIik7CisJdGhhd193b3JrcXVldWVzKCk7CiAJdGhhd190YXNrcyh0cnVlKTsKIAl0aGF3X3Rhc2tzKGZhbHNlKTsKIAlzY2hlZHVsZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCBmNmNkNmZhLi41ZTdlZGZiIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTA4Niw2ICsxMDg2LDcgQEAKIAlidWZmZXIgPSBOVUxMOwogCWFsbG9jX25vcm1hbCA9IDA7CiAJYWxsb2NfaGlnaG1lbSA9IDA7CisJaGliZXJuYXRpb25fdGhhd19zd2FwKCk7CiB9CiAKIC8qIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBmb3IgdGhlIHNocmlua2luZyBvZiBtZW1vcnkuICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dhcC5jIGIva2VybmVsL3Bvd2VyL3N3YXAuYwppbmRleCBlNmE1YmRmLi41ZDAwNTllIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dhcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd2FwLmMKQEAgLTEzNiwxMCArMTM2LDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKLQlvZmZzZXQgPSBzd3Bfb2Zmc2V0KGdldF9zd2FwX3BhZ2Vfb2ZfdHlwZShzd2FwKSk7CisJb2Zmc2V0ID0gc3dwX29mZnNldChnZXRfc3dhcF9mb3JfaGliZXJuYXRpb24oc3dhcCkpOwogCWlmIChvZmZzZXQpIHsKIAkJaWYgKHN3c3VzcF9leHRlbnRzX2luc2VydChvZmZzZXQpKQotCQkJc3dhcF9mcmVlKHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTsKKwkJCXN3YXBfZnJlZV9mb3JfaGliZXJuYXRpb24oc3dwX2VudHJ5KHN3YXAsIG9mZnNldCkpOwogCQllbHNlCiAJCQlyZXR1cm4gc3dhcGRldl9ibG9jayhzd2FwLCBvZmZzZXQpOwogCX0KQEAgLTE2Myw3ICsxNjMsNyBAQAogCQlleHQgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHN3c3VzcF9leHRlbnQsIG5vZGUpOwogCQlyYl9lcmFzZShub2RlLCAmc3dzdXNwX2V4dGVudHMpOwogCQlmb3IgKG9mZnNldCA9IGV4dC0+c3RhcnQ7IG9mZnNldCA8PSBleHQtPmVuZDsgb2Zmc2V0KyspCi0JCQlzd2FwX2ZyZWUoc3dwX2VudHJ5KHN3YXAsIG9mZnNldCkpOworCQkJc3dhcF9mcmVlX2Zvcl9oaWJlcm5hdGlvbihzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7CiAKIAkJa2ZyZWUoZXh0KTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNGFiMDE2NC4uOGZlNDY1YSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMTU0OSw5ICsxNTQ5LDkgQEAKIAljaGFycyA9IGxvZ2dlZF9jaGFyczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGxvZ2dlZF9jaGFycyA+IGVuZCkgewotCQlzMSA9IGxvZ19idWYgKyBsb2dfYnVmX2xlbiAtIGxvZ2dlZF9jaGFycyArIGVuZDsKLQkJbDEgPSBsb2dnZWRfY2hhcnMgLSBlbmQ7CisJaWYgKGNoYXJzID4gZW5kKSB7CisJCXMxID0gbG9nX2J1ZiArIGxvZ19idWZfbGVuIC0gY2hhcnMgKyBlbmQ7CisJCWwxID0gY2hhcnMgLSBlbmQ7CiAKIAkJczIgPSBsb2dfYnVmOwogCQlsMiA9IGVuZDsKQEAgLTE1NTksOCArMTU1OSw4IEBACiAJCXMxID0gIiI7CiAJCWwxID0gMDsKIAotCQlzMiA9IGxvZ19idWYgKyBlbmQgLSBsb2dnZWRfY2hhcnM7Ci0JCWwyID0gbG9nZ2VkX2NoYXJzOworCQlzMiA9IGxvZ19idWYgKyBlbmQgLSBjaGFyczsKKwkJbDIgPSBjaGFyczsKIAl9CiAKIAlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZkdW1wX2xpc3RfbG9jaywgZmxhZ3MpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNzRhM2Q2OS4uZjM0ZDc5OCAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzI0LDI2ICszMjQsMzIgQEAKIH0KIAogLyoKLSAqIERldGFjaCBhbGwgdGFza3Mgd2Ugd2VyZSB1c2luZyBwdHJhY2Ugb24uCisgKiBEZXRhY2ggYWxsIHRhc2tzIHdlIHdlcmUgdXNpbmcgcHRyYWNlIG9uLiBDYWxsZWQgd2l0aCB0YXNrbGlzdCBoZWxkCisgKiBmb3Igd3JpdGluZywgYW5kIHJldHVybnMgd2l0aCBpdCBoZWxkIHRvby4gQnV0IG5vdGUgaXQgY2FuIHJlbGVhc2UKKyAqIGFuZCByZWFjcXVpcmUgdGhlIGxvY2suCiAgKi8KIHZvaWQgZXhpdF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0cmFjZXIpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKIAlMSVNUX0hFQUQocHRyYWNlX2RlYWQpOwogCi0Jd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCWlmIChsaWtlbHkobGlzdF9lbXB0eSgmdHJhY2VyLT5wdHJhY2VkKSkpCisJCXJldHVybjsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmdHJhY2VyLT5wdHJhY2VkLCBwdHJhY2VfZW50cnkpIHsKIAkJaWYgKF9fcHRyYWNlX2RldGFjaCh0cmFjZXIsIHApKQogCQkJbGlzdF9hZGQoJnAtPnB0cmFjZV9lbnRyeSwgJnB0cmFjZV9kZWFkKTsKIAl9Ci0Jd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKKwl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnRyYWNlci0+cHRyYWNlZCkpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwdHJhY2VfZGVhZCwgcHRyYWNlX2VudHJ5KSB7CiAJCWxpc3RfZGVsX2luaXQoJnAtPnB0cmFjZV9lbnRyeSk7CiAJCXJlbGVhc2VfdGFzayhwKTsKIAl9CisKKwl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiB9CiAKIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JhbmdlLmMgYi9rZXJuZWwvcmFuZ2UuYwppbmRleCA3NGUyZTYxLi40NzFiNjZhIDEwMDY0NAotLS0gYS9rZXJuZWwvcmFuZ2UuYworKysgYi9rZXJuZWwvcmFuZ2UuYwpAQCAtNywxMCArNyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCi0jaWZuZGVmIEFSUkFZX1NJWkUKLSNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCi0jZW5kaWYKLQogaW50IGFkZF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosIGludCBucl9yYW5nZSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogewogCWlmIChzdGFydCA+PSBlbmQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDcyYThkYzkuLjRkMTY5ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0xMTQsMyArMTE0LDE2MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmN1X215X3RocmVhZF9ncm91cF9lbXB0eSk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UgKi8KKworI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFECitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaW5pdF9yY3VfaGVhZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2luaXQoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfcmN1X2hlYWRfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2ZyZWUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorCisvKgorICogZml4dXBfaW5pdCBpcyBjYWxsZWQgd2hlbjoKKyAqIC0gYW4gYWN0aXZlIG9iamVjdCBpcyBpbml0aWFsaXplZAorICovCitzdGF0aWMgaW50IHJjdWhlYWRfZml4dXBfaW5pdCh2b2lkICphZGRyLCBlbnVtIGRlYnVnX29ial9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSBhZGRyOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgcXVldWVkIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZWN1dGVkLgorCQkgKiBJZiB3ZSBkZXRlY3QgdGhhdCB3ZSBhcmUgbmVzdGVkIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCQkgKiBzZWN0aW9uLCB3ZSBzaG91bGQgc2ltcGx5IGZhaWwsIG90aGVyd2lzZSB3ZSB3b3VsZCBkZWFkbG9jay4KKwkJICovCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9pbml0KGhlYWQsICZyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogZml4dXBfYWN0aXZhdGUgaXMgY2FsbGVkIHdoZW46CisgKiAtIGFuIGFjdGl2ZSBvYmplY3QgaXMgYWN0aXZhdGVkCisgKiAtIGFuIHVua25vd24gb2JqZWN0IGlzIGFjdGl2YXRlZCAobWlnaHQgYmUgYSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIG9iamVjdCkKKyAqIEFjdGl2YXRpb24gaXMgcGVyZm9ybWVkIGludGVybmFsbHkgYnkgY2FsbF9yY3UoKS4KKyAqLworc3RhdGljIGludCByY3VoZWFkX2ZpeHVwX2FjdGl2YXRlKHZvaWQgKmFkZHIsIGVudW0gZGVidWdfb2JqX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9IGFkZHI7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisKKwljYXNlIE9ERUJVR19TVEFURV9OT1RBVkFJTEFCTEU6CisJCS8qCisJCSAqIFRoaXMgaXMgbm90IHJlYWxseSBhIGZpeHVwLiBXZSBqdXN0IG1ha2Ugc3VyZSB0aGF0IGl0IGlzCisJCSAqIHRyYWNrZWQgaW4gdGhlIG9iamVjdCB0cmFja2VyLgorCQkgKi8KKwkJZGVidWdfb2JqZWN0X2luaXQoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworCQlkZWJ1Z19vYmplY3RfYWN0aXZhdGUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworCQlyZXR1cm4gMDsKKworCWNhc2UgT0RFQlVHX1NUQVRFX0FDVElWRToKKwkJLyoKKwkJICogRW5zdXJlIHRoYXQgcXVldWVkIGNhbGxiYWNrcyBhcmUgYWxsIGV4ZWN1dGVkLgorCQkgKiBJZiB3ZSBkZXRlY3QgdGhhdCB3ZSBhcmUgbmVzdGVkIGluIGEgUkNVIHJlYWQtc2lkZSBjcml0aWNhbAorCQkgKiBzZWN0aW9uLCB3ZSBzaG91bGQgc2ltcGx5IGZhaWwsIG90aGVyd2lzZSB3ZSB3b3VsZCBkZWFkbG9jay4KKwkJICovCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9hY3RpdmF0ZShoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIGZpeHVwX2ZyZWUgaXMgY2FsbGVkIHdoZW46CisgKiAtIGFuIGFjdGl2ZSBvYmplY3QgaXMgZnJlZWQKKyAqLworc3RhdGljIGludCByY3VoZWFkX2ZpeHVwX2ZyZWUodm9pZCAqYWRkciwgZW51bSBkZWJ1Z19vYmpfc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IHJjdV9oZWFkICpoZWFkID0gYWRkcjsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIE9ERUJVR19TVEFURV9BQ1RJVkU6CisJCS8qCisJCSAqIEVuc3VyZSB0aGF0IHF1ZXVlZCBjYWxsYmFja3MgYXJlIGFsbCBleGVjdXRlZC4KKwkJICogSWYgd2UgZGV0ZWN0IHRoYXQgd2UgYXJlIG5lc3RlZCBpbiBhIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKwkJICogc2VjdGlvbiwgd2Ugc2hvdWxkIHNpbXBseSBmYWlsLCBvdGhlcndpc2Ugd2Ugd291bGQgZGVhZGxvY2suCisJCSAqLworI2lmbmRlZiBDT05GSUdfUFJFRU1QVAorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gMDsKKyNlbHNlCisJCWlmIChyY3VfcHJlZW1wdF9kZXB0aCgpICE9IDAgfHwgcHJlZW1wdF9jb3VudCgpICE9IDAgfHwKKwkJICAgIGlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9iYXJyaWVyKCk7CisJCXJjdV9iYXJyaWVyX3NjaGVkKCk7CisJCXJjdV9iYXJyaWVyX2JoKCk7CisJCWRlYnVnX29iamVjdF9mcmVlKGhlYWQsICZyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKwkJcmV0dXJuIDE7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKgorICogaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpIC0gaW5pdGlhbGl6ZSBvbi1zdGFjayByY3VfaGVhZCBmb3IgZGVidWdvYmplY3RzCisgKiBAaGVhZDogcG9pbnRlciB0byByY3VfaGVhZCBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluZm9ybXMgZGVidWdvYmplY3RzIG9mIGEgbmV3IHJjdV9oZWFkIHN0cnVjdHVyZSB0aGF0CisgKiBoYXMgYmVlbiBhbGxvY2F0ZWQgYXMgYW4gYXV0byB2YXJpYWJsZSBvbiB0aGUgc3RhY2suICBUaGlzIGZ1bmN0aW9uCisgKiBpcyBub3QgcmVxdWlyZWQgZm9yIHJjdV9oZWFkIHN0cnVjdHVyZXMgdGhhdCBhcmUgc3RhdGljYWxseSBkZWZpbmVkIG9yCisgKiB0aGF0IGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuICBUaGlzIGZ1bmN0aW9uIGhhcyBubworICogZWZmZWN0IGZvciAhQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQga2VybmVsIGJ1aWxkcy4KKyAqLwordm9pZCBpbml0X3JjdV9oZWFkX29uX3N0YWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayhoZWFkLCAmcmN1aGVhZF9kZWJ1Z19kZXNjcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X3JjdV9oZWFkX29uX3N0YWNrKTsKKworLyoqCisgKiBkZXN0cm95X3JjdV9oZWFkX29uX3N0YWNrKCkgLSBkZXN0cm95IG9uLXN0YWNrIHJjdV9oZWFkIGZvciBkZWJ1Z29iamVjdHMKKyAqIEBoZWFkOiBwb2ludGVyIHRvIHJjdV9oZWFkIHN0cnVjdHVyZSB0byBiZSBpbml0aWFsaXplZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5mb3JtcyBkZWJ1Z29iamVjdHMgdGhhdCBhbiBvbi1zdGFjayByY3VfaGVhZCBzdHJ1Y3R1cmUKKyAqIGlzIGFib3V0IHRvIGdvIG91dCBvZiBzY29wZS4gIEFzIHdpdGggaW5pdF9yY3VfaGVhZF9vbl9zdGFjaygpLCB0aGlzCisgKiBmdW5jdGlvbiBpcyBub3QgcmVxdWlyZWQgZm9yIHJjdV9oZWFkIHN0cnVjdHVyZXMgdGhhdCBhcmUgc3RhdGljYWxseQorICogZGVmaW5lZCBvciB0aGF0IGFyZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgb24gdGhlIGhlYXAuICBBbHNvIGFzIHdpdGgKKyAqIGluaXRfcmN1X2hlYWRfb25fc3RhY2soKSwgdGhpcyBmdW5jdGlvbiBoYXMgbm8gZWZmZWN0IGZvcgorICogIUNPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEIGtlcm5lbCBidWlsZHMuCisgKi8KK3ZvaWQgZGVzdHJveV9yY3VfaGVhZF9vbl9zdGFjayhzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJZGVidWdfb2JqZWN0X2ZyZWUoaGVhZCwgJnJjdWhlYWRfZGVidWdfZGVzY3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVzdHJveV9yY3VfaGVhZF9vbl9zdGFjayk7CisKK3N0cnVjdCBkZWJ1Z19vYmpfZGVzY3IgcmN1aGVhZF9kZWJ1Z19kZXNjciA9IHsKKwkubmFtZSA9ICJyY3VfaGVhZCIsCisJLmZpeHVwX2luaXQgPSByY3VoZWFkX2ZpeHVwX2luaXQsCisJLmZpeHVwX2FjdGl2YXRlID0gcmN1aGVhZF9maXh1cF9hY3RpdmF0ZSwKKwkuZml4dXBfZnJlZSA9IHJjdWhlYWRfZml4dXBfZnJlZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChyY3VoZWFkX2RlYnVnX2Rlc2NyKTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfUkNVX0hFQUQgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0aW55LmMgYi9rZXJuZWwvcmN1dGlueS5jCmluZGV4IDM4NzI5ZDMuLjE5NmVjMDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0aW55LmMKKysrIGIva2VybmVsL3JjdXRpbnkuYwpAQCAtMTY5LDYgKzE2OSw3IEBACiAJd2hpbGUgKGxpc3QpIHsKIAkJbmV4dCA9IGxpc3QtPm5leHQ7CiAJCXByZWZldGNoKG5leHQpOworCQlkZWJ1Z19yY3VfaGVhZF91bnF1ZXVlKGxpc3QpOwogCQlsaXN0LT5mdW5jKGxpc3QpOwogCQlsaXN0ID0gbmV4dDsKIAl9CkBAIC0yMTEsNiArMjEyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJZGVidWdfcmN1X2hlYWRfcXVldWUoaGVhZCk7CiAJaGVhZC0+ZnVuYyA9IGZ1bmM7CiAJaGVhZC0+bmV4dCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDY1MzVhYzguLjJlMjcyNmQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTIzOSw4ICsyMzksNyBAQAogcmN1X3JhbmRvbShzdHJ1Y3QgcmN1X3JhbmRvbV9zdGF0ZSAqcnJzcCkKIHsKIAlpZiAoLS1ycnNwLT5ycnNfY291bnQgPCAwKSB7Ci0JCXJyc3AtPnJyc19zdGF0ZSArPQotCQkJKHVuc2lnbmVkIGxvbmcpY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCQlycnNwLT5ycnNfc3RhdGUgKz0gKHVuc2lnbmVkIGxvbmcpbG9jYWxfY2xvY2soKTsKIAkJcnJzcC0+cnJzX2NvdW50ID0gUkNVX1JBTkRPTV9SRUZSRVNIOwogCX0KIAlycnNwLT5ycnNfc3RhdGUgPSBycnNwLT5ycnNfc3RhdGUgKiBSQ1VfUkFORE9NX01VTFQgKyBSQ1VfUkFORE9NX0FERDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlLmMgYi9rZXJuZWwvcmN1dHJlZS5jCmluZGV4IGQ0NDM3MzQuLmQ1YmM0MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlLmMKKysrIGIva2VybmVsL3JjdXRyZWUuYwpAQCAtMTExMiw2ICsxMTEyLDcgQEAKIAl3aGlsZSAobGlzdCkgewogCQluZXh0ID0gbGlzdC0+bmV4dDsKIAkJcHJlZmV0Y2gobmV4dCk7CisJCWRlYnVnX3JjdV9oZWFkX3VucXVldWUobGlzdCk7CiAJCWxpc3QtPmZ1bmMobGlzdCk7CiAJCWxpc3QgPSBuZXh0OwogCQlpZiAoKytjb3VudCA+PSByZHAtPmJsaW1pdCkKQEAgLTEzODgsNiArMTM4OSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcDsKIAorCWRlYnVnX3JjdV9oZWFkX3F1ZXVlKGhlYWQpOwogCWhlYWQtPmZ1bmMgPSBmdW5jOwogCWhlYWQtPm5leHQgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGY1MmE4ODAuLjQxNTQxZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CiAKICNpbmNsdWRlICJzY2hlZF9jcHVwcmkuaCIKKyNpbmNsdWRlICJ3b3JrcXVldWVfc2NoZWQuaCIKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3NjaGVkLmg+CkBAIC00NTYsOSArNDU3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nOwogCSNkZWZpbmUgQ1BVX0xPQURfSURYX01BWCA1CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfbG9hZF91cGRhdGVfdGljazsKICNpZmRlZiBDT05GSUdfTk9fSFoKIAl1NjQgbm9oel9zdGFtcDsKLQl1bnNpZ25lZCBjaGFyIGluX25vaHpfcmVjZW50bHk7CisJdW5zaWduZWQgY2hhciBub2h6X2JhbGFuY2Vfa2ljazsKICNlbmRpZgogCXVuc2lnbmVkIGludCBza2lwX2Nsb2NrX3VwZGF0ZTsKIApAQCAtMTE5Myw2ICsxMTk1LDI3IEBACiAKICNpZmRlZiBDT05GSUdfTk9fSFoKIC8qCisgKiBJbiB0aGUgc2VtaSBpZGxlIGNhc2UsIHVzZSB0aGUgbmVhcmVzdCBidXN5IGNwdSBmb3IgbWlncmF0aW5nIHRpbWVycworICogZnJvbSBhbiBpZGxlIGNwdS4gIFRoaXMgaXMgZ29vZCBmb3IgcG93ZXItc2F2aW5ncy4KKyAqCisgKiBXZSBkb24ndCBkbyBzaW1pbGFyIG9wdGltaXphdGlvbiBmb3IgY29tcGxldGVseSBpZGxlIHN5c3RlbSwgYXMKKyAqIHNlbGVjdGluZyBhbiBpZGxlIGNwdSB3aWxsIGFkZCBtb3JlIGRlbGF5cyB0byB0aGUgdGltZXJzIHRoYW4gaW50ZW5kZWQKKyAqIChhcyB0aGF0IGNwdSdzIHRpbWVyIGJhc2UgbWF5IG5vdCBiZSB1cHRvZGF0ZSB3cnQgamlmZmllcyBldGMpLgorICovCitpbnQgZ2V0X25vaHpfdGltZXJfdGFyZ2V0KHZvaWQpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKKworCWZvcl9lYWNoX2RvbWFpbihjcHUsIHNkKSB7CisJCWZvcl9lYWNoX2NwdShpLCBzY2hlZF9kb21haW5fc3BhbihzZCkpCisJCQlpZiAoIWlkbGVfY3B1KGkpKQorCQkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gY3B1OworfQorLyoKICAqIFdoZW4gYWRkX3RpbWVyX29uKCkgZW5xdWV1ZXMgYSB0aW1lciBpbnRvIHRoZSB0aW1lciB3aGVlbCBvZiBhbgogICogaWRsZSBDUFUgdGhlbiB0aGlzIHRpbWVyIG1pZ2h0IGV4cGlyZSBiZWZvcmUgdGhlIG5leHQgdGltZXIgZXZlbnQKICAqIHdoaWNoIGlzIHNjaGVkdWxlZCB0byB3YWtlIHVwIHRoYXQgQ1BVLiBJbiBjYXNlIG9mIGEgY29tcGxldGVseQpAQCAtMTIzMiwxNiArMTI1NSw2IEBACiAJCXNtcF9zZW5kX3Jlc2NoZWR1bGUoY3B1KTsKIH0KIAotaW50IG5vaHpfcmF0ZWxpbWl0KGludCBjcHUpCi17Ci0Jc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOwotCXU2NCBkaWZmID0gcnEtPmNsb2NrIC0gcnEtPm5vaHpfc3RhbXA7Ci0KLQlycS0+bm9oel9zdGFtcCA9IHJxLT5jbG9jazsKLQotCXJldHVybiBkaWZmIDwgKE5TRUNfUEVSX1NFQyAvIEhaKSA+PiAxOwotfQotCiAjZW5kaWYgLyogQ09ORklHX05PX0haICovCiAKIHN0YXRpYyB1NjQgc2NoZWRfYXZnX3BlcmlvZCh2b2lkKQpAQCAtMTY1Miw3ICsxNjY1LDcgQEAKIAlpZiAocm9vdF90YXNrX2dyb3VwX2VtcHR5KCkpCiAJCXJldHVybjsKIAotCW5vdyA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlub3cgPSBsb2NhbF9jbG9jaygpOwogCWVsYXBzZWQgPSBub3cgLSBzZC0+bGFzdF91cGRhdGU7CiAKIAlpZiAoZWxhcHNlZCA+PSAoczY0KSh1NjQpc3lzY3RsX3NjaGVkX3NoYXJlc19yYXRlbGltaXQpIHsKQEAgLTE4MDUsNiArMTgxOCw3IEBACiBzdGF0aWMgdm9pZCBjYWxjX2xvYWRfYWNjb3VudF9pZGxlKHN0cnVjdCBycSAqdGhpc19ycSk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfc3lzY3RsKHZvaWQpOwogc3RhdGljIGludCBnZXRfdXBkYXRlX3N5c2N0bF9mYWN0b3Iodm9pZCk7CitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2xvYWQoc3RydWN0IHJxICp0aGlzX3JxKTsKIAogc3RhdGljIGlubGluZSB2b2lkIF9fc2V0X3Rhc2tfY3B1KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKIHsKQEAgLTIyNjcsMTEgKzIyODEsNTUgQEAKIH0KICNlbmRpZgogCi0vKioqCitzdGF0aWMgaW5saW5lIHZvaWQgdHR3dV9hY3RpdmF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsCisJCQkJIGJvb2wgaXNfc3luYywgYm9vbCBpc19taWdyYXRlLCBib29sIGlzX2xvY2FsLAorCQkJCSB1bnNpZ25lZCBsb25nIGVuX2ZsYWdzKQoreworCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzKTsKKwlpZiAoaXNfc3luYykKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfc3luYyk7CisJaWYgKGlzX21pZ3JhdGUpCisJCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOworCWlmIChpc19sb2NhbCkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbG9jYWwpOworCWVsc2UKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfcmVtb3RlKTsKKworCWFjdGl2YXRlX3Rhc2socnEsIHAsIGVuX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHR0d3VfcG9zdF9hY3RpdmF0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwKKwkJCQkJaW50IHdha2VfZmxhZ3MsIGJvb2wgc3VjY2VzcykKK3sKKwl0cmFjZV9zY2hlZF93YWtldXAocCwgc3VjY2Vzcyk7CisJY2hlY2tfcHJlZW1wdF9jdXJyKHJxLCBwLCB3YWtlX2ZsYWdzKTsKKworCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOworI2lmZGVmIENPTkZJR19TTVAKKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4pCisJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKKworCWlmICh1bmxpa2VseShycS0+aWRsZV9zdGFtcCkpIHsKKwkJdTY0IGRlbHRhID0gcnEtPmNsb2NrIC0gcnEtPmlkbGVfc3RhbXA7CisJCXU2NCBtYXggPSAyKnN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKKworCQlpZiAoZGVsdGEgPiBtYXgpCisJCQlycS0+YXZnX2lkbGUgPSBtYXg7CisJCWVsc2UKKwkJCXVwZGF0ZV9hdmcoJnJxLT5hdmdfaWRsZSwgZGVsdGEpOworCQlycS0+aWRsZV9zdGFtcCA9IDA7CisJfQorI2VuZGlmCisJLyogaWYgYSB3b3JrZXIgaXMgd2FraW5nIHVwLCBub3RpZnkgd29ya3F1ZXVlICovCisJaWYgKChwLT5mbGFncyAmIFBGX1dRX1dPUktFUikgJiYgc3VjY2VzcykKKwkJd3Ffd29ya2VyX3dha2luZ191cChwLCBjcHVfb2YocnEpKTsKK30KKworLyoqCiAgKiB0cnlfdG9fd2FrZV91cCAtIHdha2UgdXAgYSB0aHJlYWQKLSAqIEBwOiB0aGUgdG8tYmUtd29rZW4tdXAgdGhyZWFkCisgKiBAcDogdGhlIHRocmVhZCB0byBiZSBhd2FrZW5lZAogICogQHN0YXRlOiB0aGUgbWFzayBvZiB0YXNrIHN0YXRlcyB0aGF0IGNhbiBiZSB3b2tlbgotICogQHN5bmM6IGRvIGEgc3luY2hyb25vdXMgd2FrZXVwPworICogQHdha2VfZmxhZ3M6IHdha2UgbW9kaWZpZXIgZmxhZ3MgKFdGXyopCiAgKgogICogUHV0IGl0IG9uIHRoZSBydW4tcXVldWUgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS4gVGhlICJjdXJyZW50IgogICogdGhyZWFkIGlzIGFsd2F5cyBvbiB0aGUgcnVuLXF1ZXVlIChleGNlcHQgd2hlbiB0aGUgYWN0dWFsCkBAIC0yMjc5LDcgKzIzMzcsOCBAQAogICogdGhlIHNpbXBsZXIgImN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HIiB0byBtYXJrIHlvdXJzZWxmCiAgKiBydW5uYWJsZSB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiB0aGlzLgogICoKLSAqIHJldHVybnMgZmFpbHVyZSBvbmx5IGlmIHRoZSB0YXNrIGlzIGFscmVhZHkgYWN0aXZlLgorICogUmV0dXJucyAldHJ1ZSBpZiBAcCB3YXMgd29rZW4gdXAsICVmYWxzZSBpZiBpdCB3YXMgYWxyZWFkeSBydW5uaW5nCisgKiBvciBAc3RhdGUgZGlkbid0IG1hdGNoIEBwJ3Mgc3RhdGUuCiAgKi8KIHN0YXRpYyBpbnQgdHJ5X3RvX3dha2VfdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgc3RhdGUsCiAJCQkgIGludCB3YWtlX2ZsYWdzKQpAQCAtMjM1OSwzOCArMjQxOCwxMSBAQAogCiBvdXRfYWN0aXZhdGU6CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzKTsKLQlpZiAod2FrZV9mbGFncyAmIFdGX1NZTkMpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX3N5bmMpOwotCWlmIChvcmlnX2NwdSAhPSBjcHUpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOwotCWlmIChjcHUgPT0gdGhpc19jcHUpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX2xvY2FsKTsKLQllbHNlCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX3JlbW90ZSk7Ci0JYWN0aXZhdGVfdGFzayhycSwgcCwgZW5fZmxhZ3MpOworCXR0d3VfYWN0aXZhdGUocCwgcnEsIHdha2VfZmxhZ3MgJiBXRl9TWU5DLCBvcmlnX2NwdSAhPSBjcHUsCisJCSAgICAgIGNwdSA9PSB0aGlzX2NwdSwgZW5fZmxhZ3MpOwogCXN1Y2Nlc3MgPSAxOwotCiBvdXRfcnVubmluZzoKLQl0cmFjZV9zY2hlZF93YWtldXAocCwgc3VjY2Vzcyk7Ci0JY2hlY2tfcHJlZW1wdF9jdXJyKHJxLCBwLCB3YWtlX2ZsYWdzKTsKLQotCXAtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4pCi0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dva2VuKHJxLCBwKTsKLQotCWlmICh1bmxpa2VseShycS0+aWRsZV9zdGFtcCkpIHsKLQkJdTY0IGRlbHRhID0gcnEtPmNsb2NrIC0gcnEtPmlkbGVfc3RhbXA7Ci0JCXU2NCBtYXggPSAyKnN5c2N0bF9zY2hlZF9taWdyYXRpb25fY29zdDsKLQotCQlpZiAoZGVsdGEgPiBtYXgpCi0JCQlycS0+YXZnX2lkbGUgPSBtYXg7Ci0JCWVsc2UKLQkJCXVwZGF0ZV9hdmcoJnJxLT5hdmdfaWRsZSwgZGVsdGEpOwotCQlycS0+aWRsZV9zdGFtcCA9IDA7Ci0JfQotI2VuZGlmCisJdHR3dV9wb3N0X2FjdGl2YXRpb24ocCwgcnEsIHdha2VfZmxhZ3MsIHN1Y2Nlc3MpOwogb3V0OgogCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwogCXB1dF9jcHUoKTsKQEAgLTIzOTksNiArMjQzMSwzNyBAQAogfQogCiAvKioKKyAqIHRyeV90b193YWtlX3VwX2xvY2FsIC0gdHJ5IHRvIHdha2UgdXAgYSBsb2NhbCB0YXNrIHdpdGggcnEgbG9jayBoZWxkCisgKiBAcDogdGhlIHRocmVhZCB0byBiZSBhd2FrZW5lZAorICoKKyAqIFB1dCBAcCBvbiB0aGUgcnVuLXF1ZXVlIGlmIGl0J3Mgbm90IGFscmVkeSB0aGVyZS4gIFRoZSBjYWxsZXIgbXVzdAorICogZW5zdXJlIHRoYXQgdGhpc19ycSgpIGlzIGxvY2tlZCwgQHAgaXMgYm91bmQgdG8gdGhpc19ycSgpIGFuZCBub3QKKyAqIHRoZSBjdXJyZW50IHRhc2suICB0aGlzX3JxKCkgc3RheXMgbG9ja2VkIG92ZXIgaW52b2NhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgdHJ5X3RvX3dha2VfdXBfbG9jYWwoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOworCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisJQlVHX09OKHJxICE9IHRoaXNfcnEoKSk7CisJQlVHX09OKHAgPT0gY3VycmVudCk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmxvY2spOworCisJaWYgKCEocC0+c3RhdGUgJiBUQVNLX05PUk1BTCkpCisJCXJldHVybjsKKworCWlmICghcC0+c2Uub25fcnEpIHsKKwkJaWYgKGxpa2VseSghdGFza19ydW5uaW5nKHJxLCBwKSkpIHsKKwkJCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfY291bnQpOworCQkJc2NoZWRzdGF0X2luYyhycSwgdHR3dV9sb2NhbCk7CisJCX0KKwkJdHR3dV9hY3RpdmF0ZShwLCBycSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBFTlFVRVVFX1dBS0VVUCk7CisJCXN1Y2Nlc3MgPSB0cnVlOworCX0KKwl0dHd1X3Bvc3RfYWN0aXZhdGlvbihwLCBycSwgMCwgc3VjY2Vzcyk7Cit9CisKKy8qKgogICogd2FrZV91cF9wcm9jZXNzIC0gV2FrZSB1cCBhIHNwZWNpZmljIHByb2Nlc3MKICAqIEBwOiBUaGUgcHJvY2VzcyB0byBiZSB3b2tlbiB1cC4KICAqCkBAIC0zMDEyLDIzICszMDc1LDEwMiBAQAogfQogCiAvKgorICogVGhlIGV4YWN0IGNwdWxvYWQgYXQgdmFyaW91cyBpZHggdmFsdWVzLCBjYWxjdWxhdGVkIGF0IGV2ZXJ5IHRpY2sgd291bGQgYmUKKyAqIGxvYWQgPSAoMl5pZHggLSAxKSAvIDJeaWR4ICogbG9hZCArIDEgLyAyXmlkeCAqIGN1cl9sb2FkCisgKgorICogSWYgYSBjcHUgbWlzc2VzIHVwZGF0ZXMgZm9yIG4tMSB0aWNrcyAoYXMgaXQgd2FzIGlkbGUpIGFuZCB1cGRhdGUgZ2V0cyBjYWxsZWQKKyAqIG9uIG50aCB0aWNrIHdoZW4gY3B1IG1heSBiZSBidXN5LCB0aGVuIHdlIGhhdmU6CisgKiBsb2FkID0gKCgyXmlkeCAtIDEpIC8gMl5pZHgpXihuLTEpICogbG9hZAorICogbG9hZCA9ICgyXmlkeCAtIDEpIC8gMl5pZHgpICogbG9hZCArIDEgLyAyXmlkeCAqIGN1cl9sb2FkCisgKgorICogZGVjYXlfbG9hZF9taXNzZWQoKSBiZWxvdyBkb2VzIGVmZmljaWVudCBjYWxjdWxhdGlvbiBvZgorICogbG9hZCA9ICgoMl5pZHggLSAxKSAvIDJeaWR4KV4obi0xKSAqIGxvYWQKKyAqIGF2b2lkaW5nIDAuLm4tMSBsb29wIGRvaW5nIGxvYWQgPSAoKDJeaWR4IC0gMSkgLyAyXmlkeCkgKiBsb2FkCisgKgorICogVGhlIGNhbGN1bGF0aW9uIGlzIGFwcHJveGltYXRlZCBvbiBhIDEyOCBwb2ludCBzY2FsZS4KKyAqIGRlZ3JhZGVfemVyb190aWNrcyBpcyB0aGUgbnVtYmVyIG9mIHRpY2tzIGFmdGVyIHdoaWNoIGxvYWQgYXQgYW55CisgKiBwYXJ0aWN1bGFyIGlkeCBpcyBhcHByb3hpbWF0ZWQgdG8gYmUgemVyby4KKyAqIGRlZ3JhZGVfZmFjdG9yIGlzIGEgcHJlY29tcHV0ZWQgdGFibGUsIGEgcm93IGZvciBlYWNoIGxvYWQgaWR4LgorICogRWFjaCBjb2x1bW4gY29ycmVzcG9uZHMgdG8gZGVncmFkYXRpb24gZmFjdG9yIGZvciBhIHBvd2VyIG9mIHR3byB0aWNrcywKKyAqIGJhc2VkIG9uIDEyOCBwb2ludCBzY2FsZS4KKyAqIEV4YW1wbGU6CisgKiByb3cgMiwgY29sIDMgKD0xMikgc2F5cyB0aGF0IHRoZSBkZWdyYWRhdGlvbiBhdCBsb2FkIGlkeCAyIGFmdGVyCisgKiA4IHRpY2tzIGlzIDEyLzEyOCAod2hpY2ggaXMgYW4gYXBwcm94aW1hdGlvbiBvZiBleGFjdCBmYWN0b3IgM144LzReOCkuCisgKgorICogV2l0aCB0aGlzIHBvd2VyIG9mIDIgbG9hZCBmYWN0b3JzLCB3ZSBjYW4gZGVncmFkZSB0aGUgbG9hZCBuIHRpbWVzCisgKiBieSBsb29raW5nIGF0IDEgYml0cyBpbiBuIGFuZCBkb2luZyBhcyBtYW55IG11bHQvc2hpZnQgaW5zdGVhZCBvZgorICogbiBtdWx0L3NoaWZ0cyBuZWVkZWQgYnkgdGhlIGV4YWN0IGRlZ3JhZGF0aW9uLgorICovCisjZGVmaW5lIERFR1JBREVfU0hJRlQJCTcKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyCisJCWRlZ3JhZGVfemVyb190aWNrc1tDUFVfTE9BRF9JRFhfTUFYXSA9IHswLCA4LCAzMiwgNjQsIDEyOH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhcgorCQlkZWdyYWRlX2ZhY3RvcltDUFVfTE9BRF9JRFhfTUFYXVtERUdSQURFX1NISUZUICsgMV0gPSB7CisJCQkJCXswLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKKwkJCQkJezY0LCAzMiwgOCwgMCwgMCwgMCwgMCwgMH0sCisJCQkJCXs5NiwgNzIsIDQwLCAxMiwgMSwgMCwgMH0sCisJCQkJCXsxMTIsIDk4LCA3NSwgNDMsIDE1LCAxLCAwfSwKKwkJCQkJezEyMCwgMTEyLCA5OCwgNzYsIDQ1LCAxNiwgMn0gfTsKKworLyoKKyAqIFVwZGF0ZSBjcHVfbG9hZCBmb3IgYW55IG1pc3NlZCB0aWNrcywgZHVlIHRvIHRpY2tsZXNzIGlkbGUuIFRoZSBiYWNrbG9nCisgKiB3b3VsZCBiZSB3aGVuIENQVSBpcyBpZGxlIGFuZCBzbyB3ZSBqdXN0IGRlY2F5IHRoZSBvbGQgbG9hZCB3aXRob3V0CisgKiBhZGRpbmcgYW55IG5ldyBsb2FkLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZworZGVjYXlfbG9hZF9taXNzZWQodW5zaWduZWQgbG9uZyBsb2FkLCB1bnNpZ25lZCBsb25nIG1pc3NlZF91cGRhdGVzLCBpbnQgaWR4KQoreworCWludCBqID0gMDsKKworCWlmICghbWlzc2VkX3VwZGF0ZXMpCisJCXJldHVybiBsb2FkOworCisJaWYgKG1pc3NlZF91cGRhdGVzID49IGRlZ3JhZGVfemVyb190aWNrc1tpZHhdKQorCQlyZXR1cm4gMDsKKworCWlmIChpZHggPT0gMSkKKwkJcmV0dXJuIGxvYWQgPj4gbWlzc2VkX3VwZGF0ZXM7CisKKwl3aGlsZSAobWlzc2VkX3VwZGF0ZXMpIHsKKwkJaWYgKG1pc3NlZF91cGRhdGVzICUgMikKKwkJCWxvYWQgPSAobG9hZCAqIGRlZ3JhZGVfZmFjdG9yW2lkeF1bal0pID4+IERFR1JBREVfU0hJRlQ7CisKKwkJbWlzc2VkX3VwZGF0ZXMgPj49IDE7CisJCWorKzsKKwl9CisJcmV0dXJuIGxvYWQ7Cit9CisKKy8qCiAgKiBVcGRhdGUgcnEtPmNwdV9sb2FkW10gc3RhdGlzdGljcy4gVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBldmVyeQotICogc2NoZWR1bGVyIHRpY2sgKFRJQ0tfTlNFQykuCisgKiBzY2hlZHVsZXIgdGljayAoVElDS19OU0VDKS4gV2l0aCB0aWNrbGVzcyBpZGxlIHRoaXMgd2lsbCBub3QgYmUgY2FsbGVkCisgKiBldmVyeSB0aWNrLiBXZSBmaXggaXQgdXAgYmFzZWQgb24gamlmZmllcy4KICAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2NwdV9sb2FkKHN0cnVjdCBycSAqdGhpc19ycSkKIHsKIAl1bnNpZ25lZCBsb25nIHRoaXNfbG9hZCA9IHRoaXNfcnEtPmxvYWQud2VpZ2h0OworCXVuc2lnbmVkIGxvbmcgY3Vycl9qaWZmaWVzID0gamlmZmllczsKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmdfdXBkYXRlczsKIAlpbnQgaSwgc2NhbGU7CiAKIAl0aGlzX3JxLT5ucl9sb2FkX3VwZGF0ZXMrKzsKIAorCS8qIEF2b2lkIHJlcGVhdGVkIGNhbGxzIG9uIHNhbWUgamlmZnksIHdoZW4gbW92aW5nIGluIGFuZCBvdXQgb2YgaWRsZSAqLworCWlmIChjdXJyX2ppZmZpZXMgPT0gdGhpc19ycS0+bGFzdF9sb2FkX3VwZGF0ZV90aWNrKQorCQlyZXR1cm47CisKKwlwZW5kaW5nX3VwZGF0ZXMgPSBjdXJyX2ppZmZpZXMgLSB0aGlzX3JxLT5sYXN0X2xvYWRfdXBkYXRlX3RpY2s7CisJdGhpc19ycS0+bGFzdF9sb2FkX3VwZGF0ZV90aWNrID0gY3Vycl9qaWZmaWVzOworCiAJLyogVXBkYXRlIG91ciBsb2FkOiAqLwotCWZvciAoaSA9IDAsIHNjYWxlID0gMTsgaSA8IENQVV9MT0FEX0lEWF9NQVg7IGkrKywgc2NhbGUgKz0gc2NhbGUpIHsKKwl0aGlzX3JxLT5jcHVfbG9hZFswXSA9IHRoaXNfbG9hZDsgLyogRmFzdHRyYWNrIGZvciBpZHggMCAqLworCWZvciAoaSA9IDEsIHNjYWxlID0gMjsgaSA8IENQVV9MT0FEX0lEWF9NQVg7IGkrKywgc2NhbGUgKz0gc2NhbGUpIHsKIAkJdW5zaWduZWQgbG9uZyBvbGRfbG9hZCwgbmV3X2xvYWQ7CiAKIAkJLyogc2NhbGUgaXMgZWZmZWN0aXZlbHkgMSA8PCBpIG5vdywgYW5kID4+IGkgZGl2aWRlcyBieSBzY2FsZSAqLwogCiAJCW9sZF9sb2FkID0gdGhpc19ycS0+Y3B1X2xvYWRbaV07CisJCW9sZF9sb2FkID0gZGVjYXlfbG9hZF9taXNzZWQob2xkX2xvYWQsIHBlbmRpbmdfdXBkYXRlcyAtIDEsIGkpOwogCQluZXdfbG9hZCA9IHRoaXNfbG9hZDsKIAkJLyoKIAkJICogUm91bmQgdXAgdGhlIGF2ZXJhZ2luZyBkaXZpc2lvbiBpZiBsb2FkIGlzIGluY3JlYXNpbmcuIFRoaXMKQEAgLTMwMzYsOSArMzE3OCwxNSBAQAogCQkgKiBleGFtcGxlLgogCQkgKi8KIAkJaWYgKG5ld19sb2FkID4gb2xkX2xvYWQpCi0JCQluZXdfbG9hZCArPSBzY2FsZS0xOwotCQl0aGlzX3JxLT5jcHVfbG9hZFtpXSA9IChvbGRfbG9hZCooc2NhbGUtMSkgKyBuZXdfbG9hZCkgPj4gaTsKKwkJCW5ld19sb2FkICs9IHNjYWxlIC0gMTsKKworCQl0aGlzX3JxLT5jcHVfbG9hZFtpXSA9IChvbGRfbG9hZCAqIChzY2FsZSAtIDEpICsgbmV3X2xvYWQpID4+IGk7CiAJfQorfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2xvYWRfYWN0aXZlKHN0cnVjdCBycSAqdGhpc19ycSkKK3sKKwl1cGRhdGVfY3B1X2xvYWQodGhpc19ycSk7CiAKIAljYWxjX2xvYWRfYWNjb3VudF9hY3RpdmUodGhpc19ycSk7CiB9CkBAIC0zNDI2LDcgKzM1NzQsNyBAQAogCiAJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JdXBkYXRlX2NwdV9sb2FkKHJxKTsKKwl1cGRhdGVfY3B1X2xvYWRfYWN0aXZlKHJxKTsKIAljdXJyLT5zY2hlZF9jbGFzcy0+dGFza190aWNrKHJxLCBjdXJyLCAwKTsKIAlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIApAQCAtMzU5OCw3ICszNzQ2LDYgQEAKIAlycSA9IGNwdV9ycShjcHUpOwogCXJjdV9ub3RlX2NvbnRleHRfc3dpdGNoKGNwdSk7CiAJcHJldiA9IHJxLT5jdXJyOwotCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7CiAKIAlyZWxlYXNlX2tlcm5lbF9sb2NrKHByZXYpOwogbmVlZF9yZXNjaGVkX25vbnByZWVtcHRpYmxlOgpAQCAtMzYxMSwxMSArMzc1OCwyNiBAQAogCXJhd19zcGluX2xvY2tfaXJxKCZycS0+bG9jayk7CiAJY2xlYXJfdHNrX25lZWRfcmVzY2hlZChwcmV2KTsKIAorCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7CiAJaWYgKHByZXYtPnN0YXRlICYmICEocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpKSB7Ci0JCWlmICh1bmxpa2VseShzaWduYWxfcGVuZGluZ19zdGF0ZShwcmV2LT5zdGF0ZSwgcHJldikpKQorCQlpZiAodW5saWtlbHkoc2lnbmFsX3BlbmRpbmdfc3RhdGUocHJldi0+c3RhdGUsIHByZXYpKSkgewogCQkJcHJldi0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJZiBhIHdvcmtlciBpcyBnb2luZyB0byBzbGVlcCwgbm90aWZ5IGFuZAorCQkJICogYXNrIHdvcmtxdWV1ZSB3aGV0aGVyIGl0IHdhbnRzIHRvIHdha2UgdXAgYQorCQkJICogdGFzayB0byBtYWludGFpbiBjb25jdXJyZW5jeS4gIElmIHNvLCB3YWtlCisJCQkgKiB1cCB0aGUgdGFzay4KKwkJCSAqLworCQkJaWYgKHByZXYtPmZsYWdzICYgUEZfV1FfV09SS0VSKSB7CisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0b193YWtldXA7CisKKwkJCQl0b193YWtldXAgPSB3cV93b3JrZXJfc2xlZXBpbmcocHJldiwgY3B1KTsKKwkJCQlpZiAodG9fd2FrZXVwKQorCQkJCQl0cnlfdG9fd2FrZV91cF9sb2NhbCh0b193YWtldXApOworCQkJfQogCQkJZGVhY3RpdmF0ZV90YXNrKHJxLCBwcmV2LCBERVFVRVVFX1NMRUVQKTsKKwkJfQogCQlzd2l0Y2hfY291bnQgPSAmcHJldi0+bnZjc3c7CiAJfQogCkBAIC0zNjM3LDggKzM3OTksMTAgQEAKIAogCQljb250ZXh0X3N3aXRjaChycSwgcHJldiwgbmV4dCk7IC8qIHVubG9ja3MgdGhlIHJxICovCiAJCS8qCi0JCSAqIHRoZSBjb250ZXh0IHN3aXRjaCBtaWdodCBoYXZlIGZsaXBwZWQgdGhlIHN0YWNrIGZyb20gdW5kZXIKLQkJICogdXMsIGhlbmNlIHJlZnJlc2ggdGhlIGxvY2FsIHZhcmlhYmxlcy4KKwkJICogVGhlIGNvbnRleHQgc3dpdGNoIGhhdmUgZmxpcHBlZCB0aGUgc3RhY2sgZnJvbSB1bmRlciB1cworCQkgKiBhbmQgcmVzdG9yZWQgdGhlIGxvY2FsIHZhcmlhYmxlcyB3aGljaCB3ZXJlIHNhdmVkIHdoZW4KKwkJICogdGhpcyB0YXNrIGNhbGxlZCBzY2hlZHVsZSgpIGluIHRoZSBwYXN0LiBwcmV2ID09IGN1cnJlbnQKKwkJICogaXMgc3RpbGwgY29ycmVjdCwgYnV0IGl0IGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIGNwdS9ycS4KIAkJICovCiAJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJcnEgPSBjcHVfcnEoY3B1KTsKQEAgLTM2NDcsMTEgKzM4MTEsOCBAQAogCiAJcG9zdF9zY2hlZHVsZShycSk7CiAKLQlpZiAodW5saWtlbHkocmVhY3F1aXJlX2tlcm5lbF9sb2NrKGN1cnJlbnQpIDwgMCkpIHsKLQkJcHJldiA9IHJxLT5jdXJyOwotCQlzd2l0Y2hfY291bnQgPSAmcHJldi0+bml2Y3N3OworCWlmICh1bmxpa2VseShyZWFjcXVpcmVfa2VybmVsX2xvY2socHJldikpKQogCQlnb3RvIG5lZWRfcmVzY2hlZF9ub25wcmVlbXB0aWJsZTsKLQl9CiAKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJaWYgKG5lZWRfcmVzY2hlZCgpKQpAQCAtMzcyNiw3ICszODg3LDcgQEAKICAqIG9mZiBvZiBwcmVlbXB0X2VuYWJsZS4gS2VybmVsIHByZWVtcHRpb25zIG9mZiByZXR1cm4gZnJvbSBpbnRlcnJ1cHQKICAqIG9jY3VyIHRoZXJlIGFuZCBjYWxsIHNjaGVkdWxlIGRpcmVjdGx5LgogICovCi1hc21saW5rYWdlIHZvaWQgX19zY2hlZCBwcmVlbXB0X3NjaGVkdWxlKHZvaWQpCithc21saW5rYWdlIHZvaWQgX19zY2hlZCBub3RyYWNlIHByZWVtcHRfc2NoZWR1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCkBAIC0zNzM4LDkgKzM4OTksOSBAQAogCQlyZXR1cm47CiAKIAlkbyB7Ci0JCWFkZF9wcmVlbXB0X2NvdW50KFBSRUVNUFRfQUNUSVZFKTsKKwkJYWRkX3ByZWVtcHRfY291bnRfbm90cmFjZShQUkVFTVBUX0FDVElWRSk7CiAJCXNjaGVkdWxlKCk7Ci0JCXN1Yl9wcmVlbXB0X2NvdW50KFBSRUVNUFRfQUNUSVZFKTsKKwkJc3ViX3ByZWVtcHRfY291bnRfbm90cmFjZShQUkVFTVBUX0FDVElWRSk7CiAKIAkJLyoKIAkJICogQ2hlY2sgYWdhaW4gaW4gY2FzZSB3ZSBtaXNzZWQgYSBwcmVlbXB0aW9uIG9wcG9ydHVuaXR5CkBAIC00NDQxLDEyICs0NjAyLDggQEAKIAkgKi8KIAlpZiAodXNlciAmJiAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWlmIChydF9wb2xpY3kocG9saWN5KSkgewotCQkJdW5zaWduZWQgbG9uZyBybGltX3J0cHJpbzsKLQotCQkJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKQotCQkJCXJldHVybiAtRVNSQ0g7Ci0JCQlybGltX3J0cHJpbyA9IHRhc2tfcmxpbWl0KHAsIFJMSU1JVF9SVFBSSU8pOwotCQkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOworCQkJdW5zaWduZWQgbG9uZyBybGltX3J0cHJpbyA9CisJCQkJCXRhc2tfcmxpbWl0KHAsIFJMSU1JVF9SVFBSSU8pOwogCiAJCQkvKiBjYW4ndCBzZXQvY2hhbmdlIHRoZSBydCBwb2xpY3kgKi8KIAkJCWlmIChwb2xpY3kgIT0gcC0+cG9saWN5ICYmICFybGltX3J0cHJpbykKQEAgLTU4MTYsMjAgKzU5NzMsNDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIG1pZ3JhdGlvbl9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG1pZ3JhdGlvbl9jYWxsLAotCS5wcmlvcml0eSA9IDEwCisJLnByaW9yaXR5ID0gQ1BVX1BSSV9NSUdSQVRJT04sCiB9OwogCitzdGF0aWMgaW50IF9fY3B1aW5pdCBzY2hlZF9jcHVfYWN0aXZlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXN3aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCXNldF9jcHVfYWN0aXZlKChsb25nKWhjcHUsIHRydWUpOworCQlyZXR1cm4gTk9USUZZX09LOworCWRlZmF1bHQ6CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IHNjaGVkX2NwdV9pbmFjdGl2ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgeworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJc2V0X2NwdV9hY3RpdmUoKGxvbmcpaGNwdSwgZmFsc2UpOworCQlyZXR1cm4gTk9USUZZX09LOworCWRlZmF1bHQ6CisJCXJldHVybiBOT1RJRllfRE9ORTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG1pZ3JhdGlvbl9pbml0KHZvaWQpCiB7CiAJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAotCS8qIFN0YXJ0IG9uZSBmb3IgdGhlIGJvb3QgQ1BVOiAqLworCS8qIEluaXRpYWxpemUgbWlncmF0aW9uIGZvciB0aGUgYm9vdCBDUFUgKi8KIAllcnIgPSBtaWdyYXRpb25fY2FsbCgmbWlncmF0aW9uX25vdGlmaWVyLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAlCVUdfT04oZXJyID09IE5PVElGWV9CQUQpOwogCW1pZ3JhdGlvbl9jYWxsKCZtaWdyYXRpb25fbm90aWZpZXIsIENQVV9PTkxJTkUsIGNwdSk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZtaWdyYXRpb25fbm90aWZpZXIpOwogCisJLyogUmVnaXN0ZXIgY3B1IGFjdGl2ZSBub3RpZmllcnMgKi8KKwljcHVfbm90aWZpZXIoc2NoZWRfY3B1X2FjdGl2ZSwgQ1BVX1BSSV9TQ0hFRF9BQ1RJVkUpOworCWNwdV9ub3RpZmllcihzY2hlZF9jcHVfaW5hY3RpdmUsIENQVV9QUklfU0NIRURfSU5BQ1RJVkUpOworCiAJcmV0dXJuIDA7CiB9CiBlYXJseV9pbml0Y2FsbChtaWdyYXRpb25faW5pdCk7CkBAIC02MDY0LDIzICs2MjUwLDE4IEBACiAJCWZyZWVfcm9vdGRvbWFpbihvbGRfcmQpOwogfQogCi1zdGF0aWMgaW50IGluaXRfcm9vdGRvbWFpbihzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkLCBib29sIGJvb3RtZW0pCitzdGF0aWMgaW50IGluaXRfcm9vdGRvbWFpbihzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKQogewotCWdmcF90IGdmcCA9IEdGUF9LRVJORUw7Ci0KIAltZW1zZXQocmQsIDAsIHNpemVvZigqcmQpKTsKIAotCWlmIChib290bWVtKQotCQlnZnAgPSBHRlBfTk9XQUlUOwotCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmQtPnNwYW4sIGdmcCkpCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmQtPnNwYW4sIEdGUF9LRVJORUwpKQogCQlnb3RvIG91dDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+b25saW5lLCBnZnApKQorCWlmICghYWxsb2NfY3B1bWFza192YXIoJnJkLT5vbmxpbmUsIEdGUF9LRVJORUwpKQogCQlnb3RvIGZyZWVfc3BhbjsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZyZC0+cnRvX21hc2ssIGdmcCkpCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmQtPnJ0b19tYXNrLCBHRlBfS0VSTkVMKSkKIAkJZ290byBmcmVlX29ubGluZTsKIAotCWlmIChjcHVwcmlfaW5pdCgmcmQtPmNwdXByaSwgYm9vdG1lbSkgIT0gMCkKKwlpZiAoY3B1cHJpX2luaXQoJnJkLT5jcHVwcmkpICE9IDApCiAJCWdvdG8gZnJlZV9ydG9fbWFzazsKIAlyZXR1cm4gMDsKIApAQCAtNjA5Niw3ICs2Mjc3LDcgQEAKIAogc3RhdGljIHZvaWQgaW5pdF9kZWZyb290ZG9tYWluKHZvaWQpCiB7Ci0JaW5pdF9yb290ZG9tYWluKCZkZWZfcm9vdF9kb21haW4sIHRydWUpOworCWluaXRfcm9vdGRvbWFpbigmZGVmX3Jvb3RfZG9tYWluKTsKIAogCWF0b21pY19zZXQoJmRlZl9yb290X2RvbWFpbi5yZWZjb3VudCwgMSk7CiB9CkBAIC02MTA5LDcgKzYyOTAsNyBAQAogCWlmICghcmQpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKGluaXRfcm9vdGRvbWFpbihyZCwgZmFsc2UpICE9IDApIHsKKwlpZiAoaW5pdF9yb290ZG9tYWluKHJkKSAhPSAwKSB7CiAJCWtmcmVlKHJkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzI4OCwyOSArNzQ2OSwzNSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UICovCiAKLSNpZm5kZWYgQ09ORklHX0NQVVNFVFMKIC8qCi0gKiBBZGQgb25saW5lIGFuZCByZW1vdmUgb2ZmbGluZSBDUFVzIGZyb20gdGhlIHNjaGVkdWxlciBkb21haW5zLgotICogV2hlbiBjcHVzZXRzIGFyZSBlbmFibGVkIHRoZXkgdGFrZSBvdmVyIHRoaXMgZnVuY3Rpb24uCisgKiBVcGRhdGUgY3B1c2V0cyBhY2NvcmRpbmcgdG8gY3B1X2FjdGl2ZSBtYXNrLiAgSWYgY3B1c2V0cyBhcmUKKyAqIGRpc2FibGVkLCBjcHVzZXRfdXBkYXRlX2FjdGl2ZV9jcHVzKCkgYmVjb21lcyBhIHNpbXBsZSB3cmFwcGVyCisgKiBhcm91bmQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKS4KICAqLwotc3RhdGljIGludCB1cGRhdGVfc2NoZWRfZG9tYWlucyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKLQkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3N0YXRpYyBpbnQgY3B1c2V0X2NwdV9hY3RpdmUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpoY3B1KQogewotCXN3aXRjaCAoYWN0aW9uKSB7CisJc3dpdGNoIChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgewogCWNhc2UgQ1BVX09OTElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKLQljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgotCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKLQkJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoMSwgTlVMTCwgTlVMTCk7CisJCWNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXMoKTsKIAkJcmV0dXJuIE5PVElGWV9PSzsKLQogCWRlZmF1bHQ6CiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl9CiB9Ci0jZW5kaWYKKworc3RhdGljIGludCBjcHVzZXRfY3B1X2luYWN0aXZlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgICAgICB2b2lkICpoY3B1KQoreworCXN3aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCWNwdXNldF91cGRhdGVfYWN0aXZlX2NwdXMoKTsKKwkJcmV0dXJuIE5PVElGWV9PSzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9ydW50aW1lKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQpAQCAtNzM1NiwxMCArNzU0Myw4IEBACiAJbXV0ZXhfdW5sb2NrKCZzY2hlZF9kb21haW5zX211dGV4KTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIAotI2lmbmRlZiBDT05GSUdfQ1BVU0VUUwotCS8qIFhYWDogVGhlb3JldGljYWwgcmFjZSBoZXJlIC0gQ1BVIG1heSBiZSBob3RwbHVnZ2VkIG5vdyAqLwotCWhvdGNwdV9ub3RpZmllcih1cGRhdGVfc2NoZWRfZG9tYWlucywgMCk7Ci0jZW5kaWYKKwlob3RjcHVfbm90aWZpZXIoY3B1c2V0X2NwdV9hY3RpdmUsIENQVV9QUklfQ1BVU0VUX0FDVElWRSk7CisJaG90Y3B1X25vdGlmaWVyKGNwdXNldF9jcHVfaW5hY3RpdmUsIENQVV9QUklfQ1BVU0VUX0lOQUNUSVZFKTsKIAogCS8qIFJUIHJ1bnRpbWUgY29kZSBuZWVkcyB0byBoYW5kbGUgc29tZSBob3RwbHVnIGV2ZW50cyAqLwogCWhvdGNwdV9ub3RpZmllcih1cGRhdGVfcnVudGltZSwgMCk7CkBAIC03NjA0LDYgKzc3ODksOSBAQAogCiAJCWZvciAoaiA9IDA7IGogPCBDUFVfTE9BRF9JRFhfTUFYOyBqKyspCiAJCQlycS0+Y3B1X2xvYWRbal0gPSAwOworCisJCXJxLT5sYXN0X2xvYWRfdXBkYXRlX3RpY2sgPSBqaWZmaWVzOworCiAjaWZkZWYgQ09ORklHX1NNUAogCQlycS0+c2QgPSBOVUxMOwogCQlycS0+cmQgPSBOVUxMOwpAQCAtNzYxNyw2ICs3ODA1LDEwIEBACiAJCXJxLT5pZGxlX3N0YW1wID0gMDsKIAkJcnEtPmF2Z19pZGxlID0gMipzeXNjdGxfc2NoZWRfbWlncmF0aW9uX2Nvc3Q7CiAJCXJxX2F0dGFjaF9yb290KHJxLCAmZGVmX3Jvb3RfZG9tYWluKTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwkJcnEtPm5vaHpfYmFsYW5jZV9raWNrID0gMDsKKwkJaW5pdF9zY2hlZF9zb2Z0aXJxX2NzZCgmcGVyX2NwdShyZW1vdGVfc2NoZWRfc29mdGlycV9jYiwgaSkpOworI2VuZGlmCiAjZW5kaWYKIAkJaW5pdF9ycV9ocnRpY2socnEpOwogCQlhdG9taWNfc2V0KCZycS0+bnJfaW93YWl0LCAwKTsKQEAgLTc2NjEsOCArNzg1MywxMSBAQAogCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAjaWZkZWYgQ09ORklHX1NNUAogI2lmZGVmIENPTkZJR19OT19IWgotCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5jcHVfbWFzaywgR0ZQX05PV0FJVCk7Ci0JYWxsb2NfY3B1bWFza192YXIoJm5vaHouaWxiX2dycF9ub2h6X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5pZGxlX2NwdXNfbWFzaywgR0ZQX05PV0FJVCk7CisJYWxsb2NfY3B1bWFza192YXIoJm5vaHouZ3JwX2lkbGVfbWFzaywgR0ZQX05PV0FJVCk7CisJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCBucl9jcHVfaWRzKTsKKwlhdG9taWNfc2V0KCZub2h6LmZpcnN0X3BpY2tfY3B1LCBucl9jcHVfaWRzKTsKKwlhdG9taWNfc2V0KCZub2h6LnNlY29uZF9waWNrX2NwdSwgbnJfY3B1X2lkcyk7CiAjZW5kaWYKIAkvKiBNYXkgYmUgYWxsb2NhdGVkIGF0IGlzb2xjcHVzIGNtZGxpbmUgcGFyc2UgdGltZSAqLwogCWlmIChjcHVfaXNvbGF0ZWRfbWFwID09IE5VTEwpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY2xvY2suYyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCmluZGV4IDkwNmEwZjcuLjUyZjFhMTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jbG9jay5jCisrKyBiL2tlcm5lbC9zY2hlZF9jbG9jay5jCkBAIC0xMCwxOSArMTAsNTUgQEAKICAqICAgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKiAgIEd1aWxsYXVtZSBDaGF6YXJhaW4gPGd1aWNoYXpAZ21haWwuY29tPgogICoKLSAqIENyZWF0ZSBhIHNlbWkgc3RhYmxlIGNsb2NrIGZyb20gYSBtaXh0dXJlIG9mIG90aGVyIGV2ZW50cywgaW5jbHVkaW5nOgotICogIC0gZ3RvZAorICoKKyAqIFdoYXQ6CisgKgorICogY3B1X2Nsb2NrKGkpIHByb3ZpZGVzIGEgZmFzdCAoZXhlY3V0aW9uIHRpbWUpIGhpZ2ggcmVzb2x1dGlvbgorICogY2xvY2sgd2l0aCBib3VuZGVkIGRyaWZ0IGJldHdlZW4gQ1BVcy4gVGhlIHZhbHVlIG9mIGNwdV9jbG9jayhpKQorICogaXMgbW9ub3RvbmljIGZvciBjb25zdGFudCBpLiBUaGUgdGltZXN0YW1wIHJldHVybmVkIGlzIGluIG5hbm9zZWNvbmRzLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklHIEZBVCBXQVJOSU5HICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKiAjIHdoZW4gY29tcGFyaW5nIGNwdV9jbG9jayhpKSB0byBjcHVfY2xvY2soaikgZm9yIGkgIT0gaiwgdGltZSBjYW4gIworICogIyBnbyBiYWNrd2FyZHMgISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogVGhlcmUgaXMgbm8gc3RyaWN0IHByb21pc2UgYWJvdXQgdGhlIGJhc2UsIGFsdGhvdWdoIGl0IHRlbmRzIHRvIHN0YXJ0CisgKiBhdCAwIG9uIGJvb3QgKGJ1dCBwZW9wbGUgcmVhbGx5IHNob3VsZG4ndCByZWx5IG9uIHRoYXQpLgorICoKKyAqIGNwdV9jbG9jayhpKSAgICAgICAtLSBjYW4gYmUgdXNlZCBmcm9tIGFueSBjb250ZXh0LCBpbmNsdWRpbmcgTk1JLgorICogc2NoZWRfY2xvY2tfY3B1KGkpIC0tIG11c3QgYmUgdXNlZCB3aXRoIGxvY2FsIElSUXMgZGlzYWJsZWQgKGltcGxpZWQgYnkgTk1JKQorICogbG9jYWxfY2xvY2soKSAgICAgIC0tIGlzIGNwdV9jbG9jaygpIG9uIHRoZSBjdXJyZW50IGNwdS4KKyAqCisgKiBIb3c6CisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGVpdGhlciB1c2VzIHNjaGVkX2Nsb2NrKCkgd2hlbgorICogIUNPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLLCB3aGljaCBtZWFucyBpbiB0aGF0IGNhc2UgdGhlCisgKiBzY2hlZF9jbG9jaygpIGlzIGFzc3VtZWQgdG8gcHJvdmlkZSB0aGVzZSBwcm9wZXJ0aWVzIChtb3N0bHkgaXQgbWVhbnMKKyAqIHRoZSBhcmNoaXRlY3R1cmUgcHJvdmlkZXMgYSBnbG9iYWxseSBzeW5jaHJvbml6ZWQgaGlnaHJlcyB0aW1lIHNvdXJjZSkuCisgKgorICogT3RoZXJ3aXNlIGl0IHRyaWVzIHRvIGNyZWF0ZSBhIHNlbWkgc3RhYmxlIGNsb2NrIGZyb20gYSBtaXh0dXJlIG9mIG90aGVyCisgKiBjbG9ja3MsIGluY2x1ZGluZzoKKyAqCisgKiAgLSBHVE9EIChjbG9jayBtb25vdG9taWMpCiAgKiAgLSBzY2hlZF9jbG9jaygpCiAgKiAgLSBleHBsaWNpdCBpZGxlIGV2ZW50cwogICoKLSAqIFdlIHVzZSBndG9kIGFzIGJhc2UgYW5kIHRoZSB1bnN0YWJsZSBjbG9jayBkZWx0YXMuIFRoZSBkZWx0YXMgYXJlIGZpbHRlcmVkLAotICogbWFraW5nIGl0IG1vbm90b25pYyBhbmQga2VlcGluZyBpdCB3aXRoaW4gYW4gZXhwZWN0ZWQgd2luZG93LgorICogV2UgdXNlIEdUT0QgYXMgYmFzZSBhbmQgdXNlIHNjaGVkX2Nsb2NrKCkgZGVsdGFzIHRvIGltcHJvdmUgcmVzb2x1dGlvbi4gVGhlCisgKiBkZWx0YXMgYXJlIGZpbHRlcmVkIHRvIHByb3ZpZGUgbW9ub3RvbmljaXR5IGFuZCBrZWVwaW5nIGl0IHdpdGhpbiBhbgorICogZXhwZWN0ZWQgd2luZG93LgogICoKICAqIEZ1cnRoZXJtb3JlLCBleHBsaWNpdCBzbGVlcCBhbmQgd2FrZXVwIGhvb2tzIGFsbG93IHVzIHRvIGFjY291bnQgZm9yIHRpbWUKICAqIHRoYXQgaXMgb3RoZXJ3aXNlIGludmlzaWJsZSAoVFNDIGdldHMgc3RvcHBlZCkuCiAgKgotICogVGhlIGNsb2NrOiBzY2hlZF9jbG9ja19jcHUoKSBpcyBtb25vdG9uaWMgcGVyIGNwdSwgYW5kIHNob3VsZCBiZSBzb21ld2hhdAotICogY29uc2lzdGVudCBiZXR3ZWVuIGNwdXMgKG5ldmVyIG1vcmUgdGhhbiAyIGppZmZpZXMgZGlmZmVyZW5jZSkuCisgKgorICogTm90ZXM6CisgKgorICogVGhlICFJUlEtc2FmZXRseSBvZiBzY2hlZF9jbG9jaygpIGFuZCBzY2hlZF9jbG9ja19jcHUoKSBjb21lcyBmcm9tIHRoaW5ncworICogbGlrZSBjcHVmcmVxIGludGVycnVwdHMgdGhhdCBjYW4gY2hhbmdlIHRoZSBiYXNlIGNsb2NrIChUU0MpIG11bHRpcGxpZXIKKyAqIGFuZCBjYXVzZSBmdW5ueSBqdW1wcyBpbiB0aW1lIC0tIGFsdGhvdWdoIHRoZSBmaWx0ZXJpbmcgcHJvdmlkZWQgYnkKKyAqIHNjaGVkX2Nsb2NrX2NwdSgpIHNob3VsZCBtaXRpZ2F0ZSBzZXJpb3VzIGFydGlmYWN0cyB3ZSBjYW5ub3QgcmVseSBvbiBpdAorICogaW4gZ2VuZXJhbCBzaW5jZSBmb3IgIUNPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLIHdlIGZ1bGx5IHJlbHkgb24KKyAqIHNjaGVkX2Nsb2NrKCkuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KQEAgLTE3MCw2ICsyMDYsMTEgQEAKIAlyZXR1cm4gdmFsOwogfQogCisvKgorICogU2ltaWxhciB0byBjcHVfY2xvY2soKSwgYnV0IHJlcXVpcmVzIGxvY2FsIElSUXMgdG8gYmUgZGlzYWJsZWQuCisgKgorICogU2VlIGNwdV9jbG9jaygpLgorICovCiB1NjQgc2NoZWRfY2xvY2tfY3B1KGludCBjcHUpCiB7CiAJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKQEAgLTIzNyw5ICsyNzgsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KTsKIAotdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQorLyoKKyAqIEFzIG91dGxpbmVkIGF0IHRoZSB0b3AsIHByb3ZpZGVzIGEgZmFzdCwgaGlnaCByZXNvbHV0aW9uLCBuYW5vc2Vjb25kCisgKiB0aW1lIHNvdXJjZSB0aGF0IGlzIG1vbm90b25pYyBwZXIgY3B1IGFyZ3VtZW50IGFuZCBoYXMgYm91bmRlZCBkcmlmdAorICogYmV0d2VlbiBjcHVzLgorICoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQklHIEZBVCBXQVJOSU5HICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKiAjIHdoZW4gY29tcGFyaW5nIGNwdV9jbG9jayhpKSB0byBjcHVfY2xvY2soaikgZm9yIGkgIT0gaiwgdGltZSBjYW4gIworICogIyBnbyBiYWNrd2FyZHMgISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKi8KK3U2NCBjcHVfY2xvY2soaW50IGNwdSkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2xvY2s7CisJdTY0IGNsb2NrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0yNDksNiArMzAwLDI1IEBACiAJcmV0dXJuIGNsb2NrOwogfQogCisvKgorICogU2ltaWxhciB0byBjcHVfY2xvY2soKSBmb3IgdGhlIGN1cnJlbnQgY3B1LiBUaW1lIHdpbGwgb25seSBiZSBvYnNlcnZlZAorICogdG8gYmUgbW9ub3RvbmljIGlmIGNhcmUgaXMgdGFrZW4gdG8gb25seSBjb21wYXJlIHRpbWVzdGFtcHQgdGFrZW4gb24gdGhlCisgKiBzYW1lIENQVS4KKyAqCisgKiBTZWUgY3B1X2Nsb2NrKCkuCisgKi8KK3U2NCBsb2NhbF9jbG9jayh2b2lkKQoreworCXU2NCBjbG9jazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNsb2NrID0gc2NoZWRfY2xvY2tfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGNsb2NrOworfQorCiAjZWxzZSAvKiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSyAqLwogCiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCkKQEAgLTI2NCwxMiArMzM0LDE3IEBACiAJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiB9CiAKLQotdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQordTY0IGNwdV9jbG9jayhpbnQgY3B1KQogewogCXJldHVybiBzY2hlZF9jbG9ja19jcHUoY3B1KTsKIH0KIAordTY0IGxvY2FsX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIHNjaGVkX2Nsb2NrX2NwdSgwKTsKK30KKwogI2VuZGlmIC8qIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLICovCiAKIEVYUE9SVF9TWU1CT0xfR1BMKGNwdV9jbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChsb2NhbF9jbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKaW5kZXggZTY4NzFjYi4uMjcyMmRjMSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5jCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwpAQCAtMTY2LDE0ICsxNjYsMTAgQEAKICAqCiAgKiBSZXR1cm5zOiAtRU5PTUVNIGlmIG1lbW9yeSBmYWlscy4KICAqLwotaW50IGNwdXByaV9pbml0KHN0cnVjdCBjcHVwcmkgKmNwLCBib29sIGJvb3RtZW0pCitpbnQgY3B1cHJpX2luaXQoc3RydWN0IGNwdXByaSAqY3ApCiB7Ci0JZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTDsKIAlpbnQgaTsKIAotCWlmIChib290bWVtKQotCQlnZnAgPSBHRlBfTk9XQUlUOwotCiAJbWVtc2V0KGNwLCAwLCBzaXplb2YoKmNwKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ1BVUFJJX05SX1BSSU9SSVRJRVM7IGkrKykgewpAQCAtMTgxLDcgKzE3Nyw3IEBACiAKIAkJcmF3X3NwaW5fbG9ja19pbml0KCZ2ZWMtPmxvY2spOwogCQl2ZWMtPmNvdW50ID0gMDsKLQkJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnZlYy0+bWFzaywgZ2ZwKSkKKwkJaWYgKCF6YWxsb2NfY3B1bWFza192YXIoJnZlYy0+bWFzaywgR0ZQX0tFUk5FTCkpCiAJCQlnb3RvIGNsZWFudXA7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmggYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmgKaW5kZXggN2NiNWJiNi4uOWZjN2QzOCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5oCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuaApAQCAtMjcsNyArMjcsNyBAQAogaW50ICBjcHVwcmlfZmluZChzdHJ1Y3QgY3B1cHJpICpjcCwKIAkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGNwdW1hc2sgKmxvd2VzdF9tYXNrKTsKIHZvaWQgY3B1cHJpX3NldChzdHJ1Y3QgY3B1cHJpICpjcCwgaW50IGNwdSwgaW50IHByaSk7Ci1pbnQgY3B1cHJpX2luaXQoc3RydWN0IGNwdXByaSAqY3AsIGJvb2wgYm9vdG1lbSk7CitpbnQgY3B1cHJpX2luaXQoc3RydWN0IGNwdXByaSAqY3ApOwogdm9pZCBjcHVwcmlfY2xlYW51cChzdHJ1Y3QgY3B1cHJpICpjcCk7CiAjZWxzZQogI2RlZmluZSBjcHVwcmlfc2V0KGNwLCBjcHUsIHByaSkgZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCAzNTU2NTM5Li4yZTFiMGQxIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZGVidWcuYworKysgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJUE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOwogCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwotCVBOKHN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0KTsKKwlQKHN5c2N0bF9zY2hlZF9jaGlsZF9ydW5zX2ZpcnN0KTsKIAlQKHN5c2N0bF9zY2hlZF9mZWF0dXJlcyk7CiAjdW5kZWYgUE4KICN1bmRlZiBQCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZmFpci5jIGIva2VybmVsL3NjaGVkX2ZhaXIuYwppbmRleCBhODc4YjUzLi44MDZkMWIyIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKQEAgLTIyODcsMTMgKzIyODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgcG93ZXIgPSBTQ0hFRF9MT0FEX1NDQUxFOwogCXN0cnVjdCBzY2hlZF9ncm91cCAqc2RnID0gc2QtPmdyb3VwczsKIAotCWlmIChzY2hlZF9mZWF0KEFSQ0hfUE9XRVIpKQotCQlwb3dlciAqPSBhcmNoX3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0JZWxzZQotCQlwb3dlciAqPSBkZWZhdWx0X3NjYWxlX2ZyZXFfcG93ZXIoc2QsIGNwdSk7Ci0KLQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKLQogCWlmICgoc2QtPmZsYWdzICYgU0RfU0hBUkVfQ1BVUE9XRVIpICYmIHdlaWdodCA+IDEpIHsKIAkJaWYgKHNjaGVkX2ZlYXQoQVJDSF9QT1dFUikpCiAJCQlwb3dlciAqPSBhcmNoX3NjYWxlX3NtdF9wb3dlcihzZCwgY3B1KTsKQEAgLTIzMDMsNiArMjI5NiwxNSBAQAogCQlwb3dlciA+Pj0gU0NIRURfTE9BRF9TSElGVDsKIAl9CiAKKwlzZGctPmNwdV9wb3dlcl9vcmlnID0gcG93ZXI7CisKKwlpZiAoc2NoZWRfZmVhdChBUkNIX1BPV0VSKSkKKwkJcG93ZXIgKj0gYXJjaF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCWVsc2UKKwkJcG93ZXIgKj0gZGVmYXVsdF9zY2FsZV9mcmVxX3Bvd2VyKHNkLCBjcHUpOworCisJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7CisKIAlwb3dlciAqPSBzY2FsZV9ydF9wb3dlcihjcHUpOwogCXBvd2VyID4+PSBTQ0hFRF9MT0FEX1NISUZUOwogCkBAIC0yMzM1LDYgKzIzMzcsMzEgQEAKIAlzZGctPmNwdV9wb3dlciA9IHBvd2VyOwogfQogCisvKgorICogVHJ5IGFuZCBmaXggdXAgY2FwYWNpdHkgZm9yIHRpbnkgc2libGluZ3MsIHRoaXMgaXMgbmVlZGVkIHdoZW4KKyAqIHRoaW5ncyBsaWtlIFNEX0FTWU1fUEFDS0lORyBuZWVkIGZfYl9nIHRvIHNlbGVjdCBhbm90aGVyIHNpYmxpbmcKKyAqIHdoaWNoIG9uIGl0cyBvd24gaXNuJ3QgcG93ZXJmdWwgZW5vdWdoLgorICoKKyAqIFNlZSB1cGRhdGVfc2RfcGlja19idXNpZXN0KCkgYW5kIGNoZWNrX2FzeW1fcGFja2luZygpLgorICovCitzdGF0aWMgaW5saW5lIGludAorZml4X3NtYWxsX2NhcGFjaXR5KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwKQoreworCS8qCisJICogT25seSBzaWJsaW5ncyBjYW4gaGF2ZSBzaWduaWZpY2FudGx5IGxlc3MgdGhhbiBTQ0hFRF9MT0FEX1NDQUxFCisJICovCisJaWYgKHNkLT5sZXZlbCAhPSBTRF9MVl9TSUJMSU5HKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgfjkwJSBvZiB0aGUgY3B1X3Bvd2VyIGlzIHN0aWxsIHRoZXJlLCB3ZSdyZSBnb29kLgorCSAqLworCWlmIChncm91cC0+Y3B1X3Bvd2VyICogMzIgPiBncm91cC0+Y3B1X3Bvd2VyX29yaWcgKiAyOSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KICAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgpAQCAtMjQwMCwxNCArMjQyNywxNCBAQAogCSAqIGRvbWFpbnMuIEluIHRoZSBuZXdseSBpZGxlIGNhc2UsIHdlIHdpbGwgYWxsb3cgYWxsIHRoZSBjcHUncwogCSAqIHRvIGRvIHRoZSBuZXdseSBpZGxlIGxvYWQgYmFsYW5jZS4KIAkgKi8KLQlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCAmJgotCSAgICBiYWxhbmNlX2NwdSAhPSB0aGlzX2NwdSkgewotCQkqYmFsYW5jZSA9IDA7Ci0JCXJldHVybjsKKwlpZiAoaWRsZSAhPSBDUFVfTkVXTFlfSURMRSAmJiBsb2NhbF9ncm91cCkgeworCQlpZiAoYmFsYW5jZV9jcHUgIT0gdGhpc19jcHUpIHsKKwkJCSpiYWxhbmNlID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQl1cGRhdGVfZ3JvdXBfcG93ZXIoc2QsIHRoaXNfY3B1KTsKIAl9CiAKLQl1cGRhdGVfZ3JvdXBfcG93ZXIoc2QsIHRoaXNfY3B1KTsKLQogCS8qIEFkanVzdCBieSByZWxhdGl2ZSBDUFUgcG93ZXIgb2YgdGhlIGdyb3VwICovCiAJc2dzLT5hdmdfbG9hZCA9IChzZ3MtPmdyb3VwX2xvYWQgKiBTQ0hFRF9MT0FEX1NDQUxFKSAvIGdyb3VwLT5jcHVfcG93ZXI7CiAKQEAgLTI0MjgsNiArMjQ1NSw1MSBAQAogCiAJc2dzLT5ncm91cF9jYXBhY2l0eSA9CiAJCURJVl9ST1VORF9DTE9TRVNUKGdyb3VwLT5jcHVfcG93ZXIsIFNDSEVEX0xPQURfU0NBTEUpOworCWlmICghc2dzLT5ncm91cF9jYXBhY2l0eSkKKwkJc2dzLT5ncm91cF9jYXBhY2l0eSA9IGZpeF9zbWFsbF9jYXBhY2l0eShzZCwgZ3JvdXApOworfQorCisvKioKKyAqIHVwZGF0ZV9zZF9waWNrX2J1c2llc3QgLSByZXR1cm4gMSBvbiBidXNpZXN0IGdyb3VwCisgKiBAc2Q6IHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSBjaGVja2VkCisgKiBAc2RzOiBzY2hlZF9kb21haW4gc3RhdGlzdGljcworICogQHNnOiBzY2hlZF9ncm91cCBjYW5kaWRhdGUgdG8gYmUgY2hlY2tlZCBmb3IgYmVpbmcgdGhlIGJ1c2llc3QKKyAqIEBzZ3M6IHNjaGVkX2dyb3VwIHN0YXRpc3RpY3MKKyAqIEB0aGlzX2NwdTogdGhlIGN1cnJlbnQgY3B1CisgKgorICogRGV0ZXJtaW5lIGlmIEBzZyBpcyBhIGJ1c2llciBncm91cCB0aGFuIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkCisgKiBidXNpZXN0IGdyb3VwLgorICovCitzdGF0aWMgYm9vbCB1cGRhdGVfc2RfcGlja19idXNpZXN0KHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJCSAgIHN0cnVjdCBzZF9sYl9zdGF0cyAqc2RzLAorCQkJCSAgIHN0cnVjdCBzY2hlZF9ncm91cCAqc2csCisJCQkJICAgc3RydWN0IHNnX2xiX3N0YXRzICpzZ3MsCisJCQkJICAgaW50IHRoaXNfY3B1KQoreworCWlmIChzZ3MtPmF2Z19sb2FkIDw9IHNkcy0+bWF4X2xvYWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChzZ3MtPnN1bV9ucl9ydW5uaW5nID4gc2dzLT5ncm91cF9jYXBhY2l0eSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoc2dzLT5ncm91cF9pbWIpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBBU1lNX1BBQ0tJTkcgbmVlZHMgdG8gbW92ZSBhbGwgdGhlIHdvcmsgdG8gdGhlIGxvd2VzdAorCSAqIG51bWJlcmVkIENQVXMgaW4gdGhlIGdyb3VwLCB0aGVyZWZvcmUgbWFyayBhbGwgZ3JvdXBzCisJICogaGlnaGVyIHRoYW4gb3Vyc2VsZiBhcyBidXN5LgorCSAqLworCWlmICgoc2QtPmZsYWdzICYgU0RfQVNZTV9QQUNLSU5HKSAmJiBzZ3MtPnN1bV9ucl9ydW5uaW5nICYmCisJICAgIHRoaXNfY3B1IDwgZ3JvdXBfZmlyc3RfY3B1KHNnKSkgeworCQlpZiAoIXNkcy0+YnVzaWVzdCkKKwkJCXJldHVybiB0cnVlOworCisJCWlmIChncm91cF9maXJzdF9jcHUoc2RzLT5idXNpZXN0KSA+IGdyb3VwX2ZpcnN0X2NwdShzZykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKgpAQCAtMjQzNSw3ICsyNTA3LDcgQEAKICAqIEBzZDogc2NoZWRfZG9tYWluIHdob3NlIHN0YXRpc3RpY3MgYXJlIHRvIGJlIHVwZGF0ZWQuCiAgKiBAdGhpc19jcHU6IENwdSBmb3Igd2hpY2ggbG9hZCBiYWxhbmNlIGlzIGN1cnJlbnRseSBwZXJmb3JtZWQuCiAgKiBAaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhpc19jcHUKLSAqIEBzZF9pZGxlOiBJZGxlIHN0YXR1cyBvZiB0aGUgc2NoZWRfZG9tYWluIGNvbnRhaW5pbmcgZ3JvdXAuCisgKiBAc2RfaWRsZTogSWRsZSBzdGF0dXMgb2YgdGhlIHNjaGVkX2RvbWFpbiBjb250YWluaW5nIHNnLgogICogQGNwdXM6IFNldCBvZiBjcHVzIGNvbnNpZGVyZWQgZm9yIGxvYWQgYmFsYW5jaW5nLgogICogQGJhbGFuY2U6IFNob3VsZCB3ZSBiYWxhbmNlLgogICogQHNkczogdmFyaWFibGUgdG8gaG9sZCB0aGUgc3RhdGlzdGljcyBmb3IgdGhpcyBzY2hlZF9kb21haW4uCkBAIC0yNDQ2LDcgKzI1MTgsNyBAQAogCQkJc3RydWN0IHNkX2xiX3N0YXRzICpzZHMpCiB7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQgPSBzZC0+Y2hpbGQ7Ci0Jc3RydWN0IHNjaGVkX2dyb3VwICpncm91cCA9IHNkLT5ncm91cHM7CisJc3RydWN0IHNjaGVkX2dyb3VwICpzZyA9IHNkLT5ncm91cHM7CiAJc3RydWN0IHNnX2xiX3N0YXRzIHNnczsKIAlpbnQgbG9hZF9pZHgsIHByZWZlcl9zaWJsaW5nID0gMDsKIApAQCAtMjQ1OSwyMSArMjUzMSwyMCBAQAogCWRvIHsKIAkJaW50IGxvY2FsX2dyb3VwOwogCi0JCWxvY2FsX2dyb3VwID0gY3B1bWFza190ZXN0X2NwdSh0aGlzX2NwdSwKLQkJCQkJICAgICAgIHNjaGVkX2dyb3VwX2NwdXMoZ3JvdXApKTsKKwkJbG9jYWxfZ3JvdXAgPSBjcHVtYXNrX3Rlc3RfY3B1KHRoaXNfY3B1LCBzY2hlZF9ncm91cF9jcHVzKHNnKSk7CiAJCW1lbXNldCgmc2dzLCAwLCBzaXplb2Yoc2dzKSk7Ci0JCXVwZGF0ZV9zZ19sYl9zdGF0cyhzZCwgZ3JvdXAsIHRoaXNfY3B1LCBpZGxlLCBsb2FkX2lkeCwgc2RfaWRsZSwKKwkJdXBkYXRlX3NnX2xiX3N0YXRzKHNkLCBzZywgdGhpc19jcHUsIGlkbGUsIGxvYWRfaWR4LCBzZF9pZGxlLAogCQkJCWxvY2FsX2dyb3VwLCBjcHVzLCBiYWxhbmNlLCAmc2dzKTsKIAogCQlpZiAobG9jYWxfZ3JvdXAgJiYgISgqYmFsYW5jZSkpCiAJCQlyZXR1cm47CiAKIAkJc2RzLT50b3RhbF9sb2FkICs9IHNncy5ncm91cF9sb2FkOwotCQlzZHMtPnRvdGFsX3B3ciArPSBncm91cC0+Y3B1X3Bvd2VyOworCQlzZHMtPnRvdGFsX3B3ciArPSBzZy0+Y3B1X3Bvd2VyOwogCiAJCS8qCiAJCSAqIEluIGNhc2UgdGhlIGNoaWxkIGRvbWFpbiBwcmVmZXJzIHRhc2tzIGdvIHRvIHNpYmxpbmdzCi0JCSAqIGZpcnN0LCBsb3dlciB0aGUgZ3JvdXAgY2FwYWNpdHkgdG8gb25lIHNvIHRoYXQgd2UnbGwgdHJ5CisJCSAqIGZpcnN0LCBsb3dlciB0aGUgc2cgY2FwYWNpdHkgdG8gb25lIHNvIHRoYXQgd2UnbGwgdHJ5CiAJCSAqIGFuZCBtb3ZlIGFsbCB0aGUgZXhjZXNzIHRhc2tzIGF3YXkuCiAJCSAqLwogCQlpZiAocHJlZmVyX3NpYmxpbmcpCkBAIC0yNDgxLDIzICsyNTUyLDcyIEBACiAKIAkJaWYgKGxvY2FsX2dyb3VwKSB7CiAJCQlzZHMtPnRoaXNfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+dGhpcyA9IGdyb3VwOworCQkJc2RzLT50aGlzID0gc2c7CiAJCQlzZHMtPnRoaXNfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKIAkJCXNkcy0+dGhpc19sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOwotCQl9IGVsc2UgaWYgKHNncy5hdmdfbG9hZCA+IHNkcy0+bWF4X2xvYWQgJiYKLQkJCSAgIChzZ3Muc3VtX25yX3J1bm5pbmcgPiBzZ3MuZ3JvdXBfY2FwYWNpdHkgfHwKLQkJCQlzZ3MuZ3JvdXBfaW1iKSkgeworCQl9IGVsc2UgaWYgKHVwZGF0ZV9zZF9waWNrX2J1c2llc3Qoc2QsIHNkcywgc2csICZzZ3MsIHRoaXNfY3B1KSkgewogCQkJc2RzLT5tYXhfbG9hZCA9IHNncy5hdmdfbG9hZDsKLQkJCXNkcy0+YnVzaWVzdCA9IGdyb3VwOworCQkJc2RzLT5idXNpZXN0ID0gc2c7CiAJCQlzZHMtPmJ1c2llc3RfbnJfcnVubmluZyA9IHNncy5zdW1fbnJfcnVubmluZzsKIAkJCXNkcy0+YnVzaWVzdF9ncm91cF9jYXBhY2l0eSA9IHNncy5ncm91cF9jYXBhY2l0eTsKIAkJCXNkcy0+YnVzaWVzdF9sb2FkX3Blcl90YXNrID0gc2dzLnN1bV93ZWlnaHRlZF9sb2FkOwogCQkJc2RzLT5ncm91cF9pbWIgPSBzZ3MuZ3JvdXBfaW1iOwogCQl9CiAKLQkJdXBkYXRlX3NkX3Bvd2VyX3NhdmluZ3Nfc3RhdHMoZ3JvdXAsIHNkcywgbG9jYWxfZ3JvdXAsICZzZ3MpOwotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IHNkLT5ncm91cHMpOworCQl1cGRhdGVfc2RfcG93ZXJfc2F2aW5nc19zdGF0cyhzZywgc2RzLCBsb2NhbF9ncm91cCwgJnNncyk7CisJCXNnID0gc2ctPm5leHQ7CisJfSB3aGlsZSAoc2cgIT0gc2QtPmdyb3Vwcyk7Cit9CisKK2ludCBfX3dlYWsgYXJjaF9zZF9zaWJsaW5nX2FzeW1fcGFja2luZyh2b2lkKQoreworICAgICAgIHJldHVybiAwKlNEX0FTWU1fUEFDS0lORzsKK30KKworLyoqCisgKiBjaGVja19hc3ltX3BhY2tpbmcgLSBDaGVjayB0byBzZWUgaWYgdGhlIGdyb3VwIGlzIHBhY2tlZCBpbnRvIHRoZQorICoJCQlzY2hlZCBkb21hbi4KKyAqCisgKiBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byB1c2VkIGF0IHRoZSBzaWJsaW5nIGxldmVsLiAgU29tZQorICogY29yZXMgbGlrZSBQT1dFUjcgcHJlZmVyIHRvIHVzZSBsb3dlciBudW1iZXJlZCBTTVQgdGhyZWFkcy4gIEluIHRoZQorICogY2FzZSBvZiBQT1dFUjcsIGl0IGNhbiBtb3ZlIHRvIGxvd2VyIFNNVCBtb2RlcyBvbmx5IHdoZW4gaGlnaGVyCisgKiB0aHJlYWRzIGFyZSBpZGxlLiAgV2hlbiBpbiBsb3dlciBTTVQgbW9kZXMsIHRoZSB0aHJlYWRzIHdpbGwKKyAqIHBlcmZvcm0gYmV0dGVyIHNpbmNlIHRoZXkgc2hhcmUgbGVzcyBjb3JlIHJlc291cmNlcy4gIEhlbmNlIHdoZW4gd2UKKyAqIGhhdmUgaWRsZSB0aHJlYWRzLCB3ZSB3YW50IHRoZW0gdG8gYmUgdGhlIGhpZ2hlciBvbmVzLgorICoKKyAqIFRoaXMgcGFja2luZyBmdW5jdGlvbiBpcyBydW4gb24gaWRsZSB0aHJlYWRzLiAgSXQgY2hlY2tzIHRvIHNlZSBpZgorICogdGhlIGJ1c2llc3QgQ1BVIGluIHRoaXMgZG9tYWluIChjb3JlIGluIHRoZSBQNyBjYXNlKSBoYXMgYSBoaWdoZXIKKyAqIENQVSBudW1iZXIgdGhhbiB0aGUgcGFja2luZyBmdW5jdGlvbiBpcyBiZWluZyBydW4gb24uICBIZXJlIHdlIGFyZQorICogYXNzdW1pbmcgbG93ZXIgQ1BVIG51bWJlciB3aWxsIGJlIGVxdWl2YWxlbnQgdG8gbG93ZXIgYSBTTVQgdGhyZWFkCisgKiBudW1iZXIuCisgKgorICogUmV0dXJucyAxIHdoZW4gcGFja2luZyBpcyByZXF1aXJlZCBhbmQgYSB0YXNrIHNob3VsZCBiZSBtb3ZlZCB0bworICogdGhpcyBDUFUuICBUaGUgYW1vdW50IG9mIHRoZSBpbWJhbGFuY2UgaXMgcmV0dXJuZWQgaW4gKmltYmFsYW5jZS4KKyAqCisgKiBAc2Q6IFRoZSBzY2hlZF9kb21haW4gd2hvc2UgcGFja2luZyBpcyB0byBiZSBjaGVja2VkLgorICogQHNkczogU3RhdGlzdGljcyBvZiB0aGUgc2NoZWRfZG9tYWluIHdoaWNoIGlzIHRvIGJlIHBhY2tlZAorICogQHRoaXNfY3B1OiBUaGUgY3B1IGF0IHdob3NlIHNjaGVkX2RvbWFpbiB3ZSdyZSBwZXJmb3JtaW5nIGxvYWQtYmFsYW5jZS4KKyAqIEBpbWJhbGFuY2U6IHJldHVybnMgYW1vdW50IG9mIGltYmFsYW5jZWQgZHVlIHRvIHBhY2tpbmcuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfYXN5bV9wYWNraW5nKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAorCQkJICAgICAgc3RydWN0IHNkX2xiX3N0YXRzICpzZHMsCisJCQkgICAgICBpbnQgdGhpc19jcHUsIHVuc2lnbmVkIGxvbmcgKmltYmFsYW5jZSkKK3sKKwlpbnQgYnVzaWVzdF9jcHU7CisKKwlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9BU1lNX1BBQ0tJTkcpKQorCQlyZXR1cm4gMDsKKworCWlmICghc2RzLT5idXNpZXN0KQorCQlyZXR1cm4gMDsKKworCWJ1c2llc3RfY3B1ID0gZ3JvdXBfZmlyc3RfY3B1KHNkcy0+YnVzaWVzdCk7CisJaWYgKHRoaXNfY3B1ID4gYnVzaWVzdF9jcHUpCisJCXJldHVybiAwOworCisJKmltYmFsYW5jZSA9IERJVl9ST1VORF9DTE9TRVNUKHNkcy0+bWF4X2xvYWQgKiBzZHMtPmJ1c2llc3QtPmNwdV9wb3dlciwKKwkJCQkgICAgICAgU0NIRURfTE9BRF9TQ0FMRSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMjY5Miw2ICsyODEyLDEwIEBACiAJaWYgKCEoKmJhbGFuY2UpKQogCQlnb3RvIHJldDsKIAorCWlmICgoaWRsZSA9PSBDUFVfSURMRSB8fCBpZGxlID09IENQVV9ORVdMWV9JRExFKSAmJgorCSAgICBjaGVja19hc3ltX3BhY2tpbmcoc2QsICZzZHMsIHRoaXNfY3B1LCBpbWJhbGFuY2UpKQorCQlyZXR1cm4gc2RzLmJ1c2llc3Q7CisKIAlpZiAoIXNkcy5idXNpZXN0IHx8IHNkcy5idXNpZXN0X25yX3J1bm5pbmcgPT0gMCkKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAKQEAgLTI3MjYsOCArMjg1MCw5IEBACiAgKiBmaW5kX2J1c2llc3RfcXVldWUgLSBmaW5kIHRoZSBidXNpZXN0IHJ1bnF1ZXVlIGFtb25nIHRoZSBjcHVzIGluIGdyb3VwLgogICovCiBzdGF0aWMgc3RydWN0IHJxICoKLWZpbmRfYnVzaWVzdF9xdWV1ZShzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICAgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQorZmluZF9idXNpZXN0X3F1ZXVlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmdyb3VwLAorCQkgICBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwgdW5zaWduZWQgbG9uZyBpbWJhbGFuY2UsCisJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVzKQogewogCXN0cnVjdCBycSAqYnVzaWVzdCA9IE5VTEwsICpycTsKIAl1bnNpZ25lZCBsb25nIG1heF9sb2FkID0gMDsKQEAgLTI3MzgsNiArMjg2Myw5IEBACiAJCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHkgPSBESVZfUk9VTkRfQ0xPU0VTVChwb3dlciwgU0NIRURfTE9BRF9TQ0FMRSk7CiAJCXVuc2lnbmVkIGxvbmcgd2w7CiAKKwkJaWYgKCFjYXBhY2l0eSkKKwkJCWNhcGFjaXR5ID0gZml4X3NtYWxsX2NhcGFjaXR5KHNkLCBncm91cCk7CisKIAkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdXMpKQogCQkJY29udGludWU7CiAKQEAgLTI3NzcsOSArMjkwNSwxOSBAQAogLyogV29ya2luZyBjcHVtYXNrIGZvciBsb2FkX2JhbGFuY2UgYW5kIGxvYWRfYmFsYW5jZV9uZXdpZGxlLiAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKGNwdW1hc2tfdmFyX3QsIGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKIAotc3RhdGljIGludCBuZWVkX2FjdGl2ZV9iYWxhbmNlKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgc2RfaWRsZSwgaW50IGlkbGUpCitzdGF0aWMgaW50IG5lZWRfYWN0aXZlX2JhbGFuY2Uoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBzZF9pZGxlLCBpbnQgaWRsZSwKKwkJCSAgICAgICBpbnQgYnVzaWVzdF9jcHUsIGludCB0aGlzX2NwdSkKIHsKIAlpZiAoaWRsZSA9PSBDUFVfTkVXTFlfSURMRSkgeworCisJCS8qCisJCSAqIEFTWU1fUEFDS0lORyBuZWVkcyB0byBmb3JjZSBtaWdyYXRlIHRhc2tzIGZyb20gYnVzeSBidXQKKwkJICogaGlnaGVyIG51bWJlcmVkIENQVXMgaW4gb3JkZXIgdG8gcGFjayBhbGwgdGFza3MgaW4gdGhlCisJCSAqIGxvd2VzdCBudW1iZXJlZCBDUFVzLgorCQkgKi8KKwkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9BU1lNX1BBQ0tJTkcpICYmIGJ1c2llc3RfY3B1ID4gdGhpc19jcHUpCisJCQlyZXR1cm4gMTsKKwogCQkvKgogCQkgKiBUaGUgb25seSB0YXNrIHJ1bm5pbmcgaW4gYSBub24taWRsZSBjcHUgY2FuIGJlIG1vdmVkIHRvIHRoaXMKIAkJICogY3B1IGluIGFuIGF0dGVtcHQgdG8gY29tcGxldGVseSBmcmVldXAgdGhlIG90aGVyIENQVQpAQCAtMjg1NCw3ICsyOTkyLDcgQEAKIAkJZ290byBvdXRfYmFsYW5jZWQ7CiAJfQogCi0JYnVzaWVzdCA9IGZpbmRfYnVzaWVzdF9xdWV1ZShncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKKwlidXNpZXN0ID0gZmluZF9idXNpZXN0X3F1ZXVlKHNkLCBncm91cCwgaWRsZSwgaW1iYWxhbmNlLCBjcHVzKTsKIAlpZiAoIWJ1c2llc3QpIHsKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfbm9idXN5cVtpZGxlXSk7CiAJCWdvdG8gb3V0X2JhbGFuY2VkOwpAQCAtMjg5OCw3ICszMDM2LDggQEAKIAkJc2NoZWRzdGF0X2luYyhzZCwgbGJfZmFpbGVkW2lkbGVdKTsKIAkJc2QtPm5yX2JhbGFuY2VfZmFpbGVkKys7CiAKLQkJaWYgKG5lZWRfYWN0aXZlX2JhbGFuY2Uoc2QsIHNkX2lkbGUsIGlkbGUpKSB7CisJCWlmIChuZWVkX2FjdGl2ZV9iYWxhbmNlKHNkLCBzZF9pZGxlLCBpZGxlLCBjcHVfb2YoYnVzaWVzdCksCisJCQkJCXRoaXNfY3B1KSkgewogCQkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZidXNpZXN0LT5sb2NrLCBmbGFncyk7CiAKIAkJCS8qIGRvbid0IGtpY2sgdGhlIGFjdGl2ZV9sb2FkX2JhbGFuY2VfY3B1X3N0b3AsCkBAIC0zMDkzLDEzICszMjMyLDQwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhLCByZW1vdGVfc2NoZWRfc29mdGlycV9jYik7CisKK3N0YXRpYyB2b2lkIHRyaWdnZXJfc2NoZWRfc29mdGlycSh2b2lkICpkYXRhKQoreworCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKFNDSEVEX1NPRlRJUlEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zY2hlZF9zb2Z0aXJxX2NzZChzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqY3NkKQoreworCWNzZC0+ZnVuYyA9IHRyaWdnZXJfc2NoZWRfc29mdGlycTsKKwljc2QtPmluZm8gPSBOVUxMOworCWNzZC0+ZmxhZ3MgPSAwOworCWNzZC0+cHJpdiA9IDA7Cit9CisKKy8qCisgKiBpZGxlIGxvYWQgYmFsYW5jaW5nIGRldGFpbHMKKyAqIC0gT25lIG9mIHRoZSBpZGxlIENQVXMgbm9taW5hdGVzIGl0c2VsZiBhcyBpZGxlIGxvYWRfYmFsYW5jZXIsIHdoaWxlCisgKiAgIGVudGVyaW5nIGlkbGUuCisgKiAtIFRoaXMgaWRsZSBsb2FkIGJhbGFuY2VyIENQVSB3aWxsIGFsc28gZ28gaW50byB0aWNrbGVzcyBtb2RlIHdoZW4KKyAqICAgaXQgaXMgaWRsZSwganVzdCBsaWtlIGFsbCBvdGhlciBpZGxlIENQVXMKKyAqIC0gV2hlbiBvbmUgb2YgdGhlIGJ1c3kgQ1BVcyBub3RpY2UgdGhhdCB0aGVyZSBtYXkgYmUgYW4gaWRsZSByZWJhbGFuY2luZworICogICBuZWVkZWQsIHRoZXkgd2lsbCBraWNrIHRoZSBpZGxlIGxvYWQgYmFsYW5jZXIsIHdoaWNoIHRoZW4gZG9lcyBpZGxlCisgKiAgIGxvYWQgYmFsYW5jaW5nIGZvciBhbGwgdGhlIGlkbGUgQ1BVcy4KKyAqLwogc3RhdGljIHN0cnVjdCB7CiAJYXRvbWljX3QgbG9hZF9iYWxhbmNlcjsKLQljcHVtYXNrX3Zhcl90IGNwdV9tYXNrOwotCWNwdW1hc2tfdmFyX3QgaWxiX2dycF9ub2h6X21hc2s7Ci19IG5vaHogX19fX2NhY2hlbGluZV9hbGlnbmVkID0gewotCS5sb2FkX2JhbGFuY2VyID0gQVRPTUlDX0lOSVQoLTEpLAotfTsKKwlhdG9taWNfdCBmaXJzdF9waWNrX2NwdTsKKwlhdG9taWNfdCBzZWNvbmRfcGlja19jcHU7CisJY3B1bWFza192YXJfdCBpZGxlX2NwdXNfbWFzazsKKwljcHVtYXNrX3Zhcl90IGdycF9pZGxlX21hc2s7CisJdW5zaWduZWQgbG9uZyBuZXh0X2JhbGFuY2U7ICAgICAvKiBpbiBqaWZmeSB1bml0cyAqLworfSBub2h6IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogaW50IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIodm9pZCkKIHsKQEAgLTMxNTMsMTcgKzMzMTksMTcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfc2VtaV9pZGxlX2dyb3VwKHN0cnVjdCBzY2hlZF9ncm91cCAqaWxiX2dyb3VwKQogewotCWNwdW1hc2tfYW5kKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIG5vaHouY3B1X21hc2ssCisJY3B1bWFza19hbmQobm9oei5ncnBfaWRsZV9tYXNrLCBub2h6LmlkbGVfY3B1c19tYXNrLAogCQkJCQlzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpOwogCiAJLyoKIAkgKiBBIHNjaGVkX2dyb3VwIGlzIHNlbWktaWRsZSB3aGVuIGl0IGhhcyBhdGxlYXN0IG9uZSBidXN5IGNwdQogCSAqIGFuZCBhdGxlYXN0IG9uZSBpZGxlIGNwdS4KIAkgKi8KLQlpZiAoY3B1bWFza19lbXB0eShub2h6LmlsYl9ncnBfbm9oel9tYXNrKSkKKwlpZiAoY3B1bWFza19lbXB0eShub2h6LmdycF9pZGxlX21hc2spKQogCQlyZXR1cm4gMDsKIAotCWlmIChjcHVtYXNrX2VxdWFsKG5vaHouaWxiX2dycF9ub2h6X21hc2ssIHNjaGVkX2dyb3VwX2NwdXMoaWxiX2dyb3VwKSkpCisJaWYgKGNwdW1hc2tfZXF1YWwobm9oei5ncnBfaWRsZV9tYXNrLCBzY2hlZF9ncm91cF9jcHVzKGlsYl9ncm91cCkpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMzE5Niw3ICszMzYyLDcgQEAKIAkgKiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBoYXZlIG5vIGlkbGUgQ1BVcyBvciBvbmx5IG9uZQogCSAqIGlkbGUgQ1BVLiBEb24ndCB3YWxrIHRoZSBzY2hlZF9kb21haW4gaGllcmFyY2h5IGluIHN1Y2ggY2FzZXMKIAkgKi8KLQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPCAyKQorCWlmIChjcHVtYXNrX3dlaWdodChub2h6LmlkbGVfY3B1c19tYXNrKSA8IDIpCiAJCWdvdG8gb3V0X2RvbmU7CiAKIAlmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkgewpAQCAtMzIwNCw3ICszMzcwLDcgQEAKIAogCQlkbyB7CiAJCQlpZiAoaXNfc2VtaV9pZGxlX2dyb3VwKGlsYl9ncm91cCkpCi0JCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5pbGJfZ3JwX25vaHpfbWFzayk7CisJCQkJcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5ncnBfaWRsZV9tYXNrKTsKIAogCQkJaWxiX2dyb3VwID0gaWxiX2dyb3VwLT5uZXh0OwogCkBAIC0zMjEyLDk4ICszMzc4LDExNiBAQAogCX0KIAogb3V0X2RvbmU6Ci0JcmV0dXJuIGNwdW1hc2tfZmlyc3Qobm9oei5jcHVfbWFzayk7CisJcmV0dXJuIG5yX2NwdV9pZHM7CiB9CiAjZWxzZSAvKiAgKENPTkZJR19TQ0hFRF9NQyB8fCBDT05GSUdfU0NIRURfU01UKSAqLwogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXdfaWxiKGludCBjYWxsX2NwdSkKIHsKLQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmNwdV9tYXNrKTsKKwlyZXR1cm4gbnJfY3B1X2lkczsKIH0KICNlbmRpZgogCiAvKgorICogS2ljayBhIENQVSB0byBkbyB0aGUgbm9oeiBiYWxhbmNpbmcsIGlmIGl0IGlzIHRpbWUgZm9yIGl0LiBXZSBwaWNrIHRoZQorICogbm9oel9sb2FkX2JhbGFuY2VyIENQVSAoaWYgdGhlcmUgaXMgb25lKSBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYW55IGlkbGUKKyAqIENQVSAoaWYgdGhlcmUgaXMgb25lKS4KKyAqLworc3RhdGljIHZvaWQgbm9oel9iYWxhbmNlcl9raWNrKGludCBjcHUpCit7CisJaW50IGlsYl9jcHU7CisKKwlub2h6Lm5leHRfYmFsYW5jZSsrOworCisJaWxiX2NwdSA9IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIoKTsKKworCWlmIChpbGJfY3B1ID49IG5yX2NwdV9pZHMpIHsKKwkJaWxiX2NwdSA9IGNwdW1hc2tfZmlyc3Qobm9oei5pZGxlX2NwdXNfbWFzayk7CisJCWlmIChpbGJfY3B1ID49IG5yX2NwdV9pZHMpCisJCQlyZXR1cm47CisJfQorCisJaWYgKCFjcHVfcnEoaWxiX2NwdSktPm5vaHpfYmFsYW5jZV9raWNrKSB7CisJCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpjcDsKKworCQljcHVfcnEoaWxiX2NwdSktPm5vaHpfYmFsYW5jZV9raWNrID0gMTsKKwkJY3AgPSAmcGVyX2NwdShyZW1vdGVfc2NoZWRfc29mdGlycV9jYiwgY3B1KTsKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaWxiX2NwdSwgY3AsIDApOworCX0KKwlyZXR1cm47Cit9CisKKy8qCiAgKiBUaGlzIHJvdXRpbmUgd2lsbCB0cnkgdG8gbm9taW5hdGUgdGhlIGlsYiAoaWRsZSBsb2FkIGJhbGFuY2luZykKICAqIG93bmVyIGFtb25nIHRoZSBjcHVzIHdob3NlIHRpY2tzIGFyZSBzdG9wcGVkLiBpbGIgb3duZXIgd2lsbCBkbyB0aGUgaWRsZQotICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLiBJZiBhbGwgdGhlIGNwdXMgaW4gdGhlIHN5c3RlbQotICogZ28gaW50byB0aGlzIHRpY2tsZXNzIG1vZGUsIHRoZW4gdGhlcmUgd2lsbCBiZSBubyBpbGIgb3duZXIgKGFzIHRoZXJlIGlzCi0gKiBubyBuZWVkIGZvciBvbmUpIGFuZCBhbGwgdGhlIGNwdXMgd2lsbCBzbGVlcCB0aWxsIHRoZSBuZXh0IHdha2V1cCBldmVudAotICogYXJyaXZlcy4uLgorICogbG9hZCBiYWxhbmNpbmcgb24gYmVoYWxmIG9mIGFsbCB0aG9zZSBjcHVzLgogICoKLSAqIEZvciB0aGUgaWxiIG93bmVyLCB0aWNrIGlzIG5vdCBzdG9wcGVkLiBBbmQgdGhpcyB0aWNrIHdpbGwgYmUgdXNlZAotICogZm9yIGlkbGUgbG9hZCBiYWxhbmNpbmcuIGlsYiBvd25lciB3aWxsIHN0aWxsIGJlIHBhcnQgb2YKLSAqIG5vaHouY3B1X21hc2suLgorICogV2hlbiB0aGUgaWxiIG93bmVyIGJlY29tZXMgYnVzeSwgd2Ugd2lsbCBub3QgaGF2ZSBuZXcgaWxiIG93bmVyIHVudGlsIHNvbWUKKyAqIGlkbGUgQ1BVIHdha2VzIHVwIGFuZCBnb2VzIGJhY2sgdG8gaWRsZSBvciBzb21lIGJ1c3kgQ1BVIHRyaWVzIHRvIGtpY2sKKyAqIGlkbGUgbG9hZCBiYWxhbmNpbmcgYnkga2lja2luZyBvbmUgb2YgdGhlIGlkbGUgQ1BVcy4KICAqCi0gKiBXaGlsZSBzdG9wcGluZyB0aGUgdGljaywgdGhpcyBjcHUgd2lsbCBiZWNvbWUgdGhlIGlsYiBvd25lciBpZiB0aGVyZQotICogaXMgbm8gb3RoZXIgb3duZXIuIEFuZCB3aWxsIGJlIHRoZSBvd25lciB0aWxsIHRoYXQgY3B1IGJlY29tZXMgYnVzeQotICogb3IgaWYgYWxsIGNwdXMgaW4gdGhlIHN5c3RlbSBzdG9wIHRoZWlyIHRpY2tzIGF0IHdoaWNoIHBvaW50Ci0gKiB0aGVyZSBpcyBubyBuZWVkIGZvciBpbGIgb3duZXIuCi0gKgotICogV2hlbiB0aGUgaWxiIG93bmVyIGJlY29tZXMgYnVzeSwgaXQgbm9taW5hdGVzIGFub3RoZXIgb3duZXIsIGR1cmluZyB0aGUKLSAqIG5leHQgYnVzeSBzY2hlZHVsZXJfdGljaygpCisgKiBUaWNrcyBhcmUgc3RvcHBlZCBmb3IgdGhlIGlsYiBvd25lciBhcyB3ZWxsLCB3aXRoIGJ1c3kgQ1BVIGtpY2tpbmcgdGhpcworICogaWxiIG93bmVyIENQVSBpbiBmdXR1cmUgKHdoZW4gdGhlcmUgaXMgYSBuZWVkIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nIG9uCisgKiBiZWhhbGYgb2YgYWxsIGlkbGUgQ1BVcykuCiAgKi8KLWludCBzZWxlY3Rfbm9oel9sb2FkX2JhbGFuY2VyKGludCBzdG9wX3RpY2spCit2b2lkIHNlbGVjdF9ub2h6X2xvYWRfYmFsYW5jZXIoaW50IHN0b3BfdGljaykKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaWYgKHN0b3BfdGljaykgewotCQljcHVfcnEoY3B1KS0+aW5fbm9oel9yZWNlbnRseSA9IDE7Ci0KIAkJaWYgKCFjcHVfYWN0aXZlKGNwdSkpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSAhPSBjcHUpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuOwogCiAJCQkvKgogCQkJICogSWYgd2UgYXJlIGdvaW5nIG9mZmxpbmUgYW5kIHN0aWxsIHRoZSBsZWFkZXIsCiAJCQkgKiBnaXZlIHVwIQogCQkJICovCi0JCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LCAtMSkgIT0gY3B1KQorCQkJaWYgKGF0b21pY19jbXB4Y2hnKCZub2h6LmxvYWRfYmFsYW5jZXIsIGNwdSwKKwkJCQkJICAgbnJfY3B1X2lkcykgIT0gY3B1KQogCQkJCUJVRygpOwogCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybjsKIAkJfQogCi0JCWNwdW1hc2tfc2V0X2NwdShjcHUsIG5vaHouY3B1X21hc2spOworCQljcHVtYXNrX3NldF9jcHUoY3B1LCBub2h6LmlkbGVfY3B1c19tYXNrKTsKIAotCQkvKiB0aW1lIGZvciBpbGIgb3duZXIgYWxzbyB0byBzbGVlcCAqLwotCQlpZiAoY3B1bWFza193ZWlnaHQobm9oei5jcHVfbWFzaykgPT0gbnVtX2FjdGl2ZV9jcHVzKCkpIHsKLQkJCWlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpCi0JCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAoYXRvbWljX3JlYWQoJm5vaHouZmlyc3RfcGlja19jcHUpID09IGNwdSkKKwkJCWF0b21pY19jbXB4Y2hnKCZub2h6LmZpcnN0X3BpY2tfY3B1LCBjcHUsIG5yX2NwdV9pZHMpOworCQlpZiAoYXRvbWljX3JlYWQoJm5vaHouc2Vjb25kX3BpY2tfY3B1KSA9PSBjcHUpCisJCQlhdG9taWNfY21weGNoZygmbm9oei5zZWNvbmRfcGlja19jcHUsIGNwdSwgbnJfY3B1X2lkcyk7CiAKLQkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IC0xKSB7Ci0JCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSwgY3B1KSA9PSAtMSkKLQkJCQlyZXR1cm4gMTsKLQkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbm9oei5sb2FkX2JhbGFuY2VyKSA9PSBjcHUpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID49IG5yX2NwdV9pZHMpIHsKIAkJCWludCBuZXdfaWxiOwogCi0JCQlpZiAoIShzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyB8fAotCQkJCQkJc2NoZWRfbWNfcG93ZXJfc2F2aW5ncykpCi0JCQkJcmV0dXJuIDE7CisJCQkvKiBtYWtlIG1lIHRoZSBpbGIgb3duZXIgKi8KKwkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBucl9jcHVfaWRzLAorCQkJCQkgICBjcHUpICE9IG5yX2NwdV9pZHMpCisJCQkJcmV0dXJuOworCiAJCQkvKgogCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbW9yZSBwb3dlci1lZmZpY2llbnQKIAkJCSAqIGlsYi4KIAkJCSAqLwogCQkJbmV3X2lsYiA9IGZpbmRfbmV3X2lsYihjcHUpOwogCQkJaWYgKG5ld19pbGIgPCBucl9jcHVfaWRzICYmIG5ld19pbGIgIT0gY3B1KSB7Ci0JCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7CisJCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCBucl9jcHVfaWRzKTsKIAkJCQlyZXNjaGVkX2NwdShuZXdfaWxiKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouY3B1X21hc2spKQotCQkJcmV0dXJuIDA7CisJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG5vaHouaWRsZV9jcHVzX21hc2spKQorCQkJcmV0dXJuOwogCi0JCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5jcHVfbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9oei5pZGxlX2NwdXNfbWFzayk7CiAKIAkJaWYgKGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpID09IGNwdSkKLQkJCWlmIChhdG9taWNfY21weGNoZygmbm9oei5sb2FkX2JhbGFuY2VyLCBjcHUsIC0xKSAhPSBjcHUpCisJCQlpZiAoYXRvbWljX2NtcHhjaGcoJm5vaHoubG9hZF9iYWxhbmNlciwgY3B1LAorCQkJCQkgICBucl9jcHVfaWRzKSAhPSBjcHUpCiAJCQkJQlVHKCk7CiAJfQotCXJldHVybiAwOworCXJldHVybjsKIH0KICNlbmRpZgogCkBAIC0zMzg1LDEwICszNTY5LDEwMSBAQAogCQlycS0+bmV4dF9iYWxhbmNlID0gbmV4dF9iYWxhbmNlOwogfQogCisjaWZkZWYgQ09ORklHX05PX0haCisvKgorICogSW4gQ09ORklHX05PX0haIGNhc2UsIHRoZSBpZGxlIGJhbGFuY2Uga2lja2VlIHdpbGwgZG8gdGhlCisgKiByZWJhbGFuY2luZyBmb3IgYWxsIHRoZSBjcHVzIGZvciB3aG9tIHNjaGVkdWxlciB0aWNrcyBhcmUgc3RvcHBlZC4KKyAqLworc3RhdGljIHZvaWQgbm9oel9pZGxlX2JhbGFuY2UoaW50IHRoaXNfY3B1LCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSkKK3sKKwlzdHJ1Y3QgcnEgKnRoaXNfcnEgPSBjcHVfcnEodGhpc19jcHUpOworCXN0cnVjdCBycSAqcnE7CisJaW50IGJhbGFuY2VfY3B1OworCisJaWYgKGlkbGUgIT0gQ1BVX0lETEUgfHwgIXRoaXNfcnEtPm5vaHpfYmFsYW5jZV9raWNrKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9jcHUoYmFsYW5jZV9jcHUsIG5vaHouaWRsZV9jcHVzX21hc2spIHsKKwkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZworCQkgKiB3b3JrIGJlaW5nIGRvbmUgZm9yIG90aGVyIGNwdXMuIE5leHQgbG9hZAorCQkgKiBiYWxhbmNpbmcgb3duZXIgd2lsbCBwaWNrIGl0IHVwLgorCQkgKi8KKwkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCQl0aGlzX3JxLT5ub2h6X2JhbGFuY2Vfa2ljayA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXJhd19zcGluX2xvY2tfaXJxKCZ0aGlzX3JxLT5sb2NrKTsKKwkJdXBkYXRlX3JxX2Nsb2NrKHRoaXNfcnEpOworCQl1cGRhdGVfY3B1X2xvYWQodGhpc19ycSk7CisJCXJhd19zcGluX3VubG9ja19pcnEoJnRoaXNfcnEtPmxvY2spOworCisJCXJlYmFsYW5jZV9kb21haW5zKGJhbGFuY2VfY3B1LCBDUFVfSURMRSk7CisKKwkJcnEgPSBjcHVfcnEoYmFsYW5jZV9jcHUpOworCQlpZiAodGltZV9hZnRlcih0aGlzX3JxLT5uZXh0X2JhbGFuY2UsIHJxLT5uZXh0X2JhbGFuY2UpKQorCQkJdGhpc19ycS0+bmV4dF9iYWxhbmNlID0gcnEtPm5leHRfYmFsYW5jZTsKKwl9CisJbm9oei5uZXh0X2JhbGFuY2UgPSB0aGlzX3JxLT5uZXh0X2JhbGFuY2U7CisJdGhpc19ycS0+bm9oel9iYWxhbmNlX2tpY2sgPSAwOworfQorCisvKgorICogQ3VycmVudCBoZXVyaXN0aWMgZm9yIGtpY2tpbmcgdGhlIGlkbGUgbG9hZCBiYWxhbmNlcgorICogLSBmaXJzdF9waWNrX2NwdSBpcyB0aGUgb25lIG9mIHRoZSBidXN5IENQVXMuIEl0IHdpbGwga2ljaworICogICBpZGxlIGxvYWQgYmFsYW5jZXIgd2hlbiBpdCBoYXMgbW9yZSB0aGFuIG9uZSBwcm9jZXNzIGFjdGl2ZS4gVGhpcworICogICBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBpZGxlIGxvYWQgYmFsYW5jaW5nIGFsdG9nZXRoZXIgd2hlbiB3ZSBoYXZlCisgKiAgIG9ubHkgb25lIHJ1bm5pbmcgcHJvY2VzcyBpbiB0aGUgc3lzdGVtIChjb21tb24gY2FzZSkuCisgKiAtIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGJ1c3kgQ1BVLCBpZGxlIGxvYWQgYmFsYW5jZXIgbWF5IGhhdmUKKyAqICAgdG8gcnVuIGZvciBhY3RpdmVfbG9hZF9iYWxhbmNlIHRvIGhhcHBlbiAoaS5lLiwgdHdvIGJ1c3kgQ1BVcyBhcmUKKyAqICAgU01UIG9yIGNvcmUgc2libGluZ3MgYW5kIGNhbiBydW4gYmV0dGVyIGlmIHRoZXkgbW92ZSB0byBkaWZmZXJlbnQKKyAqICAgcGh5c2ljYWwgQ1BVcykuIFNvLCBzZWNvbmRfcGlja19jcHUgaXMgdGhlIHNlY29uZCBvZiB0aGUgYnVzeSBDUFVzCisgKiAgIHdoaWNoIHdpbGwga2ljayBpZGxlIGxvYWQgYmFsYW5jZXIgYXMgc29vbiBhcyBpdCBoYXMgYW55IGxvYWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vaHpfa2lja19uZWVkZWQoc3RydWN0IHJxICpycSwgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJaW50IHJldDsKKwlpbnQgZmlyc3RfcGlja19jcHUsIHNlY29uZF9waWNrX2NwdTsKKworCWlmICh0aW1lX2JlZm9yZShub3csIG5vaHoubmV4dF9iYWxhbmNlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXJxLT5ucl9ydW5uaW5nKQorCQlyZXR1cm4gMDsKKworCWZpcnN0X3BpY2tfY3B1ID0gYXRvbWljX3JlYWQoJm5vaHouZmlyc3RfcGlja19jcHUpOworCXNlY29uZF9waWNrX2NwdSA9IGF0b21pY19yZWFkKCZub2h6LnNlY29uZF9waWNrX2NwdSk7CisKKwlpZiAoZmlyc3RfcGlja19jcHUgPCBucl9jcHVfaWRzICYmIGZpcnN0X3BpY2tfY3B1ICE9IGNwdSAmJgorCSAgICBzZWNvbmRfcGlja19jcHUgPCBucl9jcHVfaWRzICYmIHNlY29uZF9waWNrX2NwdSAhPSBjcHUpCisJCXJldHVybiAwOworCisJcmV0ID0gYXRvbWljX2NtcHhjaGcoJm5vaHouZmlyc3RfcGlja19jcHUsIG5yX2NwdV9pZHMsIGNwdSk7CisJaWYgKHJldCA9PSBucl9jcHVfaWRzIHx8IHJldCA9PSBjcHUpIHsKKwkJYXRvbWljX2NtcHhjaGcoJm5vaHouc2Vjb25kX3BpY2tfY3B1LCBjcHUsIG5yX2NwdV9pZHMpOworCQlpZiAocnEtPm5yX3J1bm5pbmcgPiAxKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0ID0gYXRvbWljX2NtcHhjaGcoJm5vaHouc2Vjb25kX3BpY2tfY3B1LCBucl9jcHVfaWRzLCBjcHUpOworCQlpZiAocmV0ID09IG5yX2NwdV9pZHMgfHwgcmV0ID09IGNwdSkgeworCQkJaWYgKHJxLT5ucl9ydW5uaW5nKQorCQkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG5vaHpfaWRsZV9iYWxhbmNlKGludCB0aGlzX2NwdSwgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpIHsgfQorI2VuZGlmCisKIC8qCiAgKiBydW5fcmViYWxhbmNlX2RvbWFpbnMgaXMgdHJpZ2dlcmVkIHdoZW4gbmVlZGVkIGZyb20gdGhlIHNjaGVkdWxlciB0aWNrLgotICogSW4gQ09ORklHX05PX0haIGNhc2UsIHRoZSBpZGxlIGxvYWQgYmFsYW5jZSBvd25lciB3aWxsIGRvIHRoZQotICogcmViYWxhbmNpbmcgZm9yIGFsbCB0aGUgY3B1cyBmb3Igd2hvbSBzY2hlZHVsZXIgdGlja3MgYXJlIHN0b3BwZWQuCisgKiBBbHNvIHRyaWdnZXJlZCBmb3Igbm9oeiBpZGxlIGJhbGFuY2luZyAod2l0aCBub2h6X2JhbGFuY2luZ19raWNrIHNldCkuCiAgKi8KIHN0YXRpYyB2b2lkIHJ1bl9yZWJhbGFuY2VfZG9tYWlucyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCiB7CkBAIC0zMzk5LDM3ICszNjc0LDEyIEBACiAKIAlyZWJhbGFuY2VfZG9tYWlucyh0aGlzX2NwdSwgaWRsZSk7CiAKLSNpZmRlZiBDT05GSUdfTk9fSFoKIAkvKgotCSAqIElmIHRoaXMgY3B1IGlzIHRoZSBvd25lciBmb3IgaWRsZSBsb2FkIGJhbGFuY2luZywgdGhlbiBkbyB0aGUKKwkgKiBJZiB0aGlzIGNwdSBoYXMgYSBwZW5kaW5nIG5vaHpfYmFsYW5jZV9raWNrLCB0aGVuIGRvIHRoZQogCSAqIGJhbGFuY2luZyBvbiBiZWhhbGYgb2YgdGhlIG90aGVyIGlkbGUgY3B1cyB3aG9zZSB0aWNrcyBhcmUKIAkgKiBzdG9wcGVkLgogCSAqLwotCWlmICh0aGlzX3JxLT5pZGxlX2F0X3RpY2sgJiYKLQkgICAgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gdGhpc19jcHUpIHsKLQkJc3RydWN0IHJxICpycTsKLQkJaW50IGJhbGFuY2VfY3B1OwotCi0JCWZvcl9lYWNoX2NwdShiYWxhbmNlX2NwdSwgbm9oei5jcHVfbWFzaykgewotCQkJaWYgKGJhbGFuY2VfY3B1ID09IHRoaXNfY3B1KQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBjcHUgZ2V0cyB3b3JrIHRvIGRvLCBzdG9wIHRoZSBsb2FkIGJhbGFuY2luZwotCQkJICogd29yayBiZWluZyBkb25lIGZvciBvdGhlciBjcHVzLiBOZXh0IGxvYWQKLQkJCSAqIGJhbGFuY2luZyBvd25lciB3aWxsIHBpY2sgaXQgdXAuCi0JCQkgKi8KLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJCQlicmVhazsKLQotCQkJcmViYWxhbmNlX2RvbWFpbnMoYmFsYW5jZV9jcHUsIENQVV9JRExFKTsKLQotCQkJcnEgPSBjcHVfcnEoYmFsYW5jZV9jcHUpOwotCQkJaWYgKHRpbWVfYWZ0ZXIodGhpc19ycS0+bmV4dF9iYWxhbmNlLCBycS0+bmV4dF9iYWxhbmNlKSkKLQkJCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBycS0+bmV4dF9iYWxhbmNlOwotCQl9Ci0JfQotI2VuZGlmCisJbm9oel9pZGxlX2JhbGFuY2UodGhpc19jcHUsIGlkbGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBvbl9udWxsX2RvbWFpbihpbnQgY3B1KQpAQCAtMzQzOSw1NyArMzY4OSwxNyBAQAogCiAvKgogICogVHJpZ2dlciB0aGUgU0NIRURfU09GVElSUSBpZiBpdCBpcyB0aW1lIHRvIGRvIHBlcmlvZGljIGxvYWQgYmFsYW5jaW5nLgotICoKLSAqIEluIGNhc2Ugb2YgQ09ORklHX05PX0haLCB0aGlzIGlzIHRoZSBwbGFjZSB3aGVyZSB3ZSBub21pbmF0ZSBhIG5ldwotICogaWRsZSBsb2FkIGJhbGFuY2luZyBvd25lciBvciBkZWNpZGUgdG8gc3RvcCB0aGUgcGVyaW9kaWMgbG9hZCBiYWxhbmNpbmcsCi0gKiBpZiB0aGUgd2hvbGUgc3lzdGVtIGlzIGlkbGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0cmlnZ2VyX2xvYWRfYmFsYW5jZShzdHJ1Y3QgcnEgKnJxLCBpbnQgY3B1KQogewotI2lmZGVmIENPTkZJR19OT19IWgotCS8qCi0JICogSWYgd2Ugd2VyZSBpbiB0aGUgbm9oeiBtb2RlIHJlY2VudGx5IGFuZCBidXN5IGF0IHRoZSBjdXJyZW50Ci0JICogc2NoZWR1bGVyIHRpY2ssIHRoZW4gY2hlY2sgaWYgd2UgbmVlZCB0byBub21pbmF0ZSBuZXcgaWRsZQotCSAqIGxvYWQgYmFsYW5jZXIuCi0JICovCi0JaWYgKHJxLT5pbl9ub2h6X3JlY2VudGx5ICYmICFycS0+aWRsZV9hdF90aWNrKSB7Ci0JCXJxLT5pbl9ub2h6X3JlY2VudGx5ID0gMDsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1KSB7Ci0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHouY3B1X21hc2spOwotCQkJYXRvbWljX3NldCgmbm9oei5sb2FkX2JhbGFuY2VyLCAtMSk7Ci0JCX0KLQotCQlpZiAoYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gLTEpIHsKLQkJCWludCBpbGIgPSBmaW5kX25ld19pbGIoY3B1KTsKLQotCQkJaWYgKGlsYiA8IG5yX2NwdV9pZHMpCi0JCQkJcmVzY2hlZF9jcHUoaWxiKTsKLQkJfQotCX0KLQotCS8qCi0JICogSWYgdGhpcyBjcHUgaXMgaWRsZSBhbmQgZG9pbmcgaWRsZSBsb2FkIGJhbGFuY2luZyBmb3IgYWxsIHRoZQotCSAqIGNwdXMgd2l0aCB0aWNrcyBzdG9wcGVkLCBpcyBpdCB0aW1lIGZvciB0aGF0IHRvIHN0b3A/Ci0JICovCi0JaWYgKHJxLT5pZGxlX2F0X3RpY2sgJiYgYXRvbWljX3JlYWQoJm5vaHoubG9hZF9iYWxhbmNlcikgPT0gY3B1ICYmCi0JICAgIGNwdW1hc2tfd2VpZ2h0KG5vaHouY3B1X21hc2spID09IG51bV9vbmxpbmVfY3B1cygpKSB7Ci0JCXJlc2NoZWRfY3B1KGNwdSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHRoaXMgY3B1IGlzIGlkbGUgYW5kIHRoZSBpZGxlIGxvYWQgYmFsYW5jaW5nIGlzIGRvbmUgYnkKLQkgKiBzb21lb25lIGVsc2UsIHRoZW4gbm8gbmVlZCByYWlzZSB0aGUgU0NIRURfU09GVElSUQotCSAqLwotCWlmIChycS0+aWRsZV9hdF90aWNrICYmIGF0b21pY19yZWFkKCZub2h6LmxvYWRfYmFsYW5jZXIpICE9IGNwdSAmJgotCSAgICBjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9oei5jcHVfbWFzaykpCi0JCXJldHVybjsKLSNlbmRpZgogCS8qIERvbid0IG5lZWQgdG8gcmViYWxhbmNlIHdoaWxlIGF0dGFjaGVkIHRvIE5VTEwgZG9tYWluICovCiAJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgcnEtPm5leHRfYmFsYW5jZSkgJiYKIAkgICAgbGlrZWx5KCFvbl9udWxsX2RvbWFpbihjcHUpKSkKIAkJcmFpc2Vfc29mdGlycShTQ0hFRF9TT0ZUSVJRKTsKKyNpZmRlZiBDT05GSUdfTk9fSFoKKwllbHNlIGlmIChub2h6X2tpY2tfbmVlZGVkKHJxLCBjcHUpICYmIGxpa2VseSghb25fbnVsbF9kb21haW4oY3B1KSkpCisJCW5vaHpfYmFsYW5jZXJfa2ljayhjcHUpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHJxX29ubGluZV9mYWlyKHN0cnVjdCBycSAqcnEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IDhhZmI5NTMuLmQxMGM4MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0xNjYzLDkgKzE2NjMsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgc29mdCwgaGFyZDsKIAotCWlmICghcC0+c2lnbmFsKQotCQlyZXR1cm47Ci0KIAkvKiBtYXggbWF5IGNoYW5nZSBhZnRlciBjdXIgd2FzIHJlYWQsIHRoaXMgd2lsbCBiZSBmaXhlZCBuZXh0IHRpY2sgKi8KIAlzb2Z0ID0gdGFza19ybGltaXQocCwgUkxJTUlUX1JUVElNRSk7CiAJaGFyZCA9IHRhc2tfcmxpbWl0X21heChwLCBSTElNSVRfUlRUSU1FKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKaW5kZXggMzJkMmJkNC4uMjVjMmY5NiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3N0YXRzLmgKKysrIGIva2VybmVsL3NjaGVkX3N0YXRzLmgKQEAgLTI5NSwxMyArMjk1LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkJICAgY3B1dGltZV90IGNwdXRpbWUpCiB7Ci0Jc3RydWN0IHRocmVhZF9ncm91cF9jcHV0aW1lciAqY3B1dGltZXI7Ci0KLQkvKiB0c2sgPT0gY3VycmVudCwgZW5zdXJlIGl0IGlzIHNhZmUgdG8gdXNlIC0+c2lnbmFsICovCi0JaWYgKHVubGlrZWx5KHRzay0+ZXhpdF9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWNwdXRpbWVyID0gJnRzay0+c2lnbmFsLT5jcHV0aW1lcjsKKwlzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWVyICpjcHV0aW1lciA9ICZ0c2stPnNpZ25hbC0+Y3B1dGltZXI7CiAKIAlpZiAoIWNwdXRpbWVyLT5ydW5uaW5nKQogCQlyZXR1cm47CkBAIC0zMjUsMTMgKzMxOSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9ncm91cF9zeXN0ZW1fdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkJICAgICBjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlzdHJ1Y3QgdGhyZWFkX2dyb3VwX2NwdXRpbWVyICpjcHV0aW1lcjsKLQotCS8qIHRzayA9PSBjdXJyZW50LCBlbnN1cmUgaXQgaXMgc2FmZSB0byB1c2UgLT5zaWduYWwgKi8KLQlpZiAodW5saWtlbHkodHNrLT5leGl0X3N0YXRlKSkKLQkJcmV0dXJuOwotCi0JY3B1dGltZXIgPSAmdHNrLT5zaWduYWwtPmNwdXRpbWVyOworCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZXIgKmNwdXRpbWVyID0gJnRzay0+c2lnbmFsLT5jcHV0aW1lcjsKIAogCWlmICghY3B1dGltZXItPnJ1bm5pbmcpCiAJCXJldHVybjsKQEAgLTM1NSwxNiArMzQzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2dyb3VwX2V4ZWNfcnVudGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG5zKQogewotCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZXIgKmNwdXRpbWVyOwotCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWc7Ci0KLQlzaWcgPSB0c2stPnNpZ25hbDsKLQkvKiBzZWUgX19leGl0X3NpZ25hbCgpLT50YXNrX3JxX3VubG9ja193YWl0KCkgKi8KLQliYXJyaWVyKCk7Ci0JaWYgKHVubGlrZWx5KCFzaWcpKQotCQlyZXR1cm47Ci0KLQljcHV0aW1lciA9ICZzaWctPmNwdXRpbWVyOworCXN0cnVjdCB0aHJlYWRfZ3JvdXBfY3B1dGltZXIgKmNwdXRpbWVyID0gJnRzay0+c2lnbmFsLT5jcHV0aW1lcjsKIAogCWlmICghY3B1dGltZXItPnJ1bm5pbmcpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zbG93LXdvcmstZGVidWdmcy5jIGIva2VybmVsL3Nsb3ctd29yay1kZWJ1Z2ZzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NWM0MzYuLjAwMDAwMDAKLS0tIGEva2VybmVsL3Nsb3ctd29yay1kZWJ1Z2ZzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotLyogU2xvdyB3b3JrIGRlYnVnZ2luZwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlICJzbG93LXdvcmsuaCIKLQotI2RlZmluZSBJVEVSQVRPUl9TSElGVAkJKEJJVFNfUEVSX0xPTkcgLSA0KQotI2RlZmluZSBJVEVSQVRPUl9TRUxFQ1RPUgkoMHhmVUwgPDwgSVRFUkFUT1JfU0hJRlQpCi0jZGVmaW5lIElURVJBVE9SX0NPVU5URVIJKH5JVEVSQVRPUl9TRUxFQ1RPUikKLQotdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9kZXNjKHN0cnVjdCBzbG93X3dvcmsgKndvcmssIHN0cnVjdCBzZXFfZmlsZSAqbSkKLXsKLQlzZXFfcHV0cyhtLCAiU2xvdy13b3JrOiBOZXcgdGhyZWFkIik7Ci19Ci0KLS8qCi0gKiBSZW5kZXIgdGhlIHRpbWUgbWFyayBmaWVsZCBvbiBhIHdvcmsgaXRlbSBpbnRvIGEgNS1jaGFyIHRpbWUgd2l0aCB1bml0cyBwbHVzCi0gKiBhIHNwYWNlCi0gKi8KLXN0YXRpYyB2b2lkIHNsb3dfd29ya19wcmludF9tYXJrKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93LCBkaWZmOwotCi0Jbm93ID0gQ1VSUkVOVF9USU1FOwotCWRpZmYgPSB0aW1lc3BlY19zdWIobm93LCB3b3JrLT5tYXJrKTsKLQotCWlmIChkaWZmLnR2X3NlYyA8IDApCi0JCXNlcV9wdXRzKG0sICIgIC12ZSAiKTsKLQllbHNlIGlmIChkaWZmLnR2X3NlYyA9PSAwICYmIGRpZmYudHZfbnNlYyA8IDEwMDApCi0JCXNlcV9wcmludGYobSwgIiUzbHVucyAiLCBkaWZmLnR2X25zZWMpOwotCWVsc2UgaWYgKGRpZmYudHZfc2VjID09IDAgJiYgZGlmZi50dl9uc2VjIDwgMTAwMDAwMCkKLQkJc2VxX3ByaW50ZihtLCAiJTNsdXVzICIsIGRpZmYudHZfbnNlYyAvIDEwMDApOwotCWVsc2UgaWYgKGRpZmYudHZfc2VjID09IDAgJiYgZGlmZi50dl9uc2VjIDwgMTAwMDAwMDAwMCkKLQkJc2VxX3ByaW50ZihtLCAiJTNsdW1zICIsIGRpZmYudHZfbnNlYyAvIDEwMDAwMDApOwotCWVsc2UgaWYgKGRpZmYudHZfc2VjIDw9IDEpCi0JCXNlcV9wdXRzKG0sICIgICAxcyAiKTsKLQllbHNlIGlmIChkaWZmLnR2X3NlYyA8IDYwKQotCQlzZXFfcHJpbnRmKG0sICIlNGx1cyAiLCBkaWZmLnR2X3NlYyk7Ci0JZWxzZSBpZiAoZGlmZi50dl9zZWMgPCA2MCAqIDYwKQotCQlzZXFfcHJpbnRmKG0sICIlNGx1bSAiLCBkaWZmLnR2X3NlYyAvIDYwKTsKLQllbHNlIGlmIChkaWZmLnR2X3NlYyA8IDYwICogNjAgKiAyNCkKLQkJc2VxX3ByaW50ZihtLCAiJTRsdWggIiwgZGlmZi50dl9zZWMgLyAzNjAwKTsKLQllbHNlCi0JCXNlcV9wdXRzKG0sICJleGNlcyAiKTsKLX0KLQotLyoKLSAqIERlc2NyaWJlIGEgc2xvdyB3b3JrIGl0ZW0gZm9yIGRlYnVnZnMKLSAqLwotc3RhdGljIGludCBzbG93X3dvcmtfcnVucXVldWVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0Jc3RydWN0IHNsb3dfd29yayAqd29yazsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwID0gdjsKLQl1bnNpZ25lZCBsb25nIGlkOwotCi0Jc3dpdGNoICgodW5zaWduZWQgbG9uZykgdikgewotCWNhc2UgMToKLQkJc2VxX3B1dHMobSwgIlRIUiBQSUQgICBJVEVNIEFERFIgICAgICAgIEZMIE1BUksgIERFU0NcbiIpOwotCQlyZXR1cm4gMDsKLQljYXNlIDI6Ci0JCXNlcV9wdXRzKG0sICI9PT0gPT09PT0gPT09PT09PT09PT09PT09PSA9PSA9PT09PSA9PT09PT09PT09XG4iKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIDMgLi4uIDMgKyBTTE9XX1dPUktfVEhSRUFEX0xJTUlUIC0gMToKLQkJaWQgPSAodW5zaWduZWQgbG9uZykgdiAtIDM7Ci0KLQkJcmVhZF9sb2NrKCZzbG93X3dvcmtfZXhlY3NfbG9jayk7Ci0JCXdvcmsgPSBzbG93X3dvcmtfZXhlY3NbaWRdOwotCQlpZiAod29yaykgewotCQkJc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7Ci0KLQkJCXNlcV9wcmludGYobSwgIiUzbHUgJTVkICUxNnAgJTJseCAiLAotCQkJCSAgIGlkLCBzbG93X3dvcmtfcGlkc1tpZF0sIHdvcmssIHdvcmstPmZsYWdzKTsKLQkJCXNsb3dfd29ya19wcmludF9tYXJrKG0sIHdvcmspOwotCi0JCQlpZiAod29yay0+b3BzLT5kZXNjKQotCQkJCXdvcmstPm9wcy0+ZGVzYyh3b3JrLCBtKTsKLQkJCXNlcV9wdXRjKG0sICdcbicpOwotCQl9Ci0JCXJlYWRfdW5sb2NrKCZzbG93X3dvcmtfZXhlY3NfbG9jayk7Ci0JCXJldHVybiAwOwotCi0JZGVmYXVsdDoKLQkJd29yayA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNsb3dfd29yaywgbGluayk7Ci0JCXNlcV9wcmludGYobSwgIiUzcyAgICAgLSAlMTZwICUybHggIiwKLQkJCSAgIHdvcmstPmZsYWdzICYgU0xPV19XT1JLX1ZFUllfU0xPVyA/ICJ2c3EiIDogInNxIiwKLQkJCSAgIHdvcmssIHdvcmstPmZsYWdzKTsKLQkJc2xvd193b3JrX3ByaW50X21hcmsobSwgd29yayk7Ci0KLQkJaWYgKHdvcmstPm9wcy0+ZGVzYykKLQkJCXdvcmstPm9wcy0+ZGVzYyh3b3JrLCBtKTsKLQkJc2VxX3B1dGMobSwgJ1xuJyk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotLyoKLSAqIG1hcCB0aGUgaXRlcmF0b3IgdG8gYSB3b3JrIGl0ZW0KLSAqLwotc3RhdGljIHZvaWQgKnNsb3dfd29ya19ydW5xdWV1ZV9pbmRleChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqX3BvcykKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOwotCXVuc2lnbmVkIGxvbmcgY291bnQsIGlkOwotCi0Jc3dpdGNoICgqX3BvcyA+PiBJVEVSQVRPUl9TSElGVCkgewotCWNhc2UgMHgwOgotCQlpZiAoKl9wb3MgPT0gMCkKLQkJCSpfcG9zID0gMTsKLQkJaWYgKCpfcG9zIDwgMykKLQkJCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSAqX3BvczsKLQkJaWYgKCpfcG9zIDwgMyArIFNMT1dfV09SS19USFJFQURfTElNSVQpCi0JCQlmb3IgKGlkID0gKl9wb3MgLSAzOwotCQkJICAgICBpZCA8IFNMT1dfV09SS19USFJFQURfTElNSVQ7Ci0JCQkgICAgIGlkKyssICgqX3BvcykrKykKLQkJCQlpZiAoc2xvd193b3JrX2V4ZWNzW2lkXSkKLQkJCQkJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpfcG9zOwotCQkqX3BvcyA9IDB4MVVMIDw8IElURVJBVE9SX1NISUZUOwotCi0JY2FzZSAweDE6Ci0JCWNvdW50ID0gKl9wb3MgJiBJVEVSQVRPUl9DT1VOVEVSOwotCQlsaXN0X2Zvcl9lYWNoKHAsICZzbG93X3dvcmtfcXVldWUpIHsKLQkJCWlmIChjb3VudCA9PSAwKQotCQkJCXJldHVybiBwOwotCQkJY291bnQtLTsKLQkJfQotCQkqX3BvcyA9IDB4MlVMIDw8IElURVJBVE9SX1NISUZUOwotCi0JY2FzZSAweDI6Ci0JCWNvdW50ID0gKl9wb3MgJiBJVEVSQVRPUl9DT1VOVEVSOwotCQlsaXN0X2Zvcl9lYWNoKHAsICZ2c2xvd193b3JrX3F1ZXVlKSB7Ci0JCQlpZiAoY291bnQgPT0gMCkKLQkJCQlyZXR1cm4gcDsKLQkJCWNvdW50LS07Ci0JCX0KLQkJKl9wb3MgPSAweDNVTCA8PCBJVEVSQVRPUl9TSElGVDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotLyoKLSAqIHNldCB1cCB0aGUgaXRlcmF0b3IgdG8gc3RhcnQgcmVhZGluZyBmcm9tIHRoZSBmaXJzdCBsaW5lCi0gKi8KLXN0YXRpYyB2b2lkICpzbG93X3dvcmtfcnVucXVldWVfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKl9wb3MpCi17Ci0Jc3Bpbl9sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOwotCXJldHVybiBzbG93X3dvcmtfcnVucXVldWVfaW5kZXgobSwgX3Bvcyk7Ci19Ci0KLS8qCi0gKiBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUKLSAqLwotc3RhdGljIHZvaWQgKnNsb3dfd29ya19ydW5xdWV1ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpfcG9zKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnAgPSB2OwotCXVuc2lnbmVkIGxvbmcgc2VsZWN0b3IgPSAqX3BvcyA+PiBJVEVSQVRPUl9TSElGVDsKLQotCSgqX3BvcykrKzsKLQlzd2l0Y2ggKHNlbGVjdG9yKSB7Ci0JY2FzZSAweDA6Ci0JCXJldHVybiBzbG93X3dvcmtfcnVucXVldWVfaW5kZXgobSwgX3Bvcyk7Ci0KLQljYXNlIDB4MToKLQkJaWYgKCpfcG9zID4+IElURVJBVE9SX1NISUZUID09IDB4MSkgewotCQkJcCA9IHAtPm5leHQ7Ci0JCQlpZiAocCAhPSAmc2xvd193b3JrX3F1ZXVlKQotCQkJCXJldHVybiBwOwotCQl9Ci0JCSpfcG9zID0gMHgyVUwgPDwgSVRFUkFUT1JfU0hJRlQ7Ci0JCXAgPSAmdnNsb3dfd29ya19xdWV1ZTsKLQotCWNhc2UgMHgyOgotCQlpZiAoKl9wb3MgPj4gSVRFUkFUT1JfU0hJRlQgPT0gMHgyKSB7Ci0JCQlwID0gcC0+bmV4dDsKLQkJCWlmIChwICE9ICZ2c2xvd193b3JrX3F1ZXVlKQotCQkJCXJldHVybiBwOwotCQl9Ci0JCSpfcG9zID0gMHgzVUwgPDwgSVRFUkFUT1JfU0hJRlQ7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gTlVMTDsKLQl9Ci19Ci0KLS8qCi0gKiBjbGVhbiB1cCBhZnRlciByZWFkaW5nCi0gKi8KLXN0YXRpYyB2b2lkIHNsb3dfd29ya19ydW5xdWV1ZV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzbG93X3dvcmtfcnVucXVldWVfb3BzID0gewotCS5zdGFydAkJPSBzbG93X3dvcmtfcnVucXVldWVfc3RhcnQsCi0JLnN0b3AJCT0gc2xvd193b3JrX3J1bnF1ZXVlX3N0b3AsCi0JLm5leHQJCT0gc2xvd193b3JrX3J1bnF1ZXVlX25leHQsCi0JLnNob3cJCT0gc2xvd193b3JrX3J1bnF1ZXVlX3Nob3csCi19OwotCi0vKgotICogb3BlbiAiL3N5cy9rZXJuZWwvZGVidWcvc2xvd193b3JrL3J1bnF1ZXVlIiB0byBsaXN0IHF1ZXVlIGNvbnRlbnRzCi0gKi8KLXN0YXRpYyBpbnQgc2xvd193b3JrX3J1bnF1ZXVlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzbG93X3dvcmtfcnVucXVldWVfb3BzKTsKLX0KLQotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzbG93X3dvcmtfcnVucXVldWVfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gc2xvd193b3JrX3J1bnF1ZXVlX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKLX07CmRpZmYgLS1naXQgYS9rZXJuZWwvc2xvdy13b3JrLmMgYi9rZXJuZWwvc2xvdy13b3JrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkM2Y0ZmEuLjAwMDAwMDAKLS0tIGEva2VybmVsL3Nsb3ctd29yay5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA2OCArMCwwIEBACi0vKiBXb3JrZXIgdGhyZWFkIHBvb2wgZm9yIHNsb3cgaXRlbXMsIHN1Y2ggYXMgZmlsZXN5c3RlbSBsb29rdXBzIG9yIG1rZGlycwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBTZWUgRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlICJzbG93LXdvcmsuaCIKLQotc3RhdGljIHZvaWQgc2xvd193b3JrX2N1bGxfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHNsb3dfd29ya19vb21fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKLQotI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyBpbnQgc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwKLQkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLQotc3RhdGljIGludCBzbG93X3dvcmtfbWF4X3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50ICwKLQkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLSNlbmRpZgotCi0vKgotICogVGhlIHBvb2wgb2YgdGhyZWFkcyBoYXMgYXQgbGVhc3QgbWluIHRocmVhZHMgaW4gaXQgYXMgbG9uZyBhcyBzb21lb25lIGlzCi0gKiB1c2luZyB0aGUgZmFjaWxpdHksIGFuZCBtYXkgaGF2ZSBhcyBtYW55IGFzIG1heC4KLSAqCi0gKiBBIHBvcnRpb24gb2YgdGhlIHBvb2wgbWF5IGJlIHByb2Nlc3NpbmcgdmVyeSBzbG93IG9wZXJhdGlvbnMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzbG93X3dvcmtfbWluX3RocmVhZHMgPSAyOwotc3RhdGljIHVuc2lnbmVkIHNsb3dfd29ya19tYXhfdGhyZWFkcyA9IDQ7Ci1zdGF0aWMgdW5zaWduZWQgdnNsb3dfd29ya19wcm9wb3J0aW9uID0gNTA7IC8qICUgb2YgdGhyZWFkcyB0aGF0IG1heSBwcm9jZXNzCi0JCQkJCSAgICAgKiB2ZXJ5IHNsb3cgd29yayAqLwotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWluX21pbl90aHJlYWRzID0gMjsKLXN0YXRpYyBpbnQgc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IFNMT1dfV09SS19USFJFQURfTElNSVQ7Ci1zdGF0aWMgY29uc3QgaW50IHNsb3dfd29ya19taW5fdnNsb3cgPSAxOwotc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWF4X3ZzbG93ID0gOTk7Ci0KLWN0bF90YWJsZSBzbG93X3dvcmtfc3lzY3Rsc1tdID0gewotCXsKLQkJLnByb2NuYW1lCT0gIm1pbi10aHJlYWRzIiwKLQkJLmRhdGEJCT0gJnNsb3dfd29ya19taW5fdGhyZWFkcywKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bCwKLQkJLmV4dHJhMQkJPSAodm9pZCAqKSAmc2xvd193b3JrX21pbl9taW5fdGhyZWFkcywKLQkJLmV4dHJhMgkJPSAmc2xvd193b3JrX21heF90aHJlYWRzLAotCX0sCi0JewotCQkucHJvY25hbWUJPSAibWF4LXRocmVhZHMiLAotCQkuZGF0YQkJPSAmc2xvd193b3JrX21heF90aHJlYWRzLAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBzbG93X3dvcmtfbWF4X3RocmVhZHNfc3lzY3RsLAotCQkuZXh0cmExCQk9ICZzbG93X3dvcmtfbWluX3RocmVhZHMsCi0JCS5leHRyYTIJCT0gKHZvaWQgKikgJnNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMsCi0JfSwKLQl7Ci0JCS5wcm9jbmFtZQk9ICJ2c2xvdy1wZXJjZW50YWdlIiwKLQkJLmRhdGEJCT0gJnZzbG93X3dvcmtfcHJvcG9ydGlvbiwKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5leHRyYTEJCT0gKHZvaWQgKikgJnNsb3dfd29ya19taW5fdnNsb3csCi0JCS5leHRyYTIJCT0gKHZvaWQgKikgJnNsb3dfd29ya19tYXhfdnNsb3csCi0JfSwKLQl7fQotfTsKLSNlbmRpZgotCi0vKgotICogVGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIHBvb2wKLSAqLwotc3RhdGljIGF0b21pY190IHNsb3dfd29ya190aHJlYWRfY291bnQ7Ci1zdGF0aWMgYXRvbWljX3QgdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQ7Ci0KLXN0YXRpYyBib29sIHNsb3dfd29ya19tYXlfbm90X3N0YXJ0X25ld190aHJlYWQ7Ci1zdGF0aWMgYm9vbCBzbG93X3dvcmtfY3VsbDsgLyogY3VsbCBhIHRocmVhZCBkdWUgdG8gbGFjayBvZiBhY3Rpdml0eSAqLwotc3RhdGljIERFRklORV9USU1FUihzbG93X3dvcmtfY3VsbF90aW1lciwgc2xvd193b3JrX2N1bGxfdGltZW91dCwgMCwgMCk7Ci1zdGF0aWMgREVGSU5FX1RJTUVSKHNsb3dfd29ya19vb21fdGltZXIsIHNsb3dfd29ya19vb21fdGltZW91dCwgMCwgMCk7Ci1zdGF0aWMgc3RydWN0IHNsb3dfd29yayBzbG93X3dvcmtfbmV3X3RocmVhZDsgLyogbmV3IHRocmVhZCBzdGFydGVyICovCi0KLS8qCi0gKiBzbG93IHdvcmsgSUQgYWxsb2NhdGlvbiAodXNlIHNsb3dfd29ya19xdWV1ZV9sb2NrKQotICovCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoc2xvd193b3JrX2lkcywgU0xPV19XT1JLX1RIUkVBRF9MSU1JVCk7Ci0KLS8qCi0gKiBVbnJlZ2lzdHJhdGlvbiB0cmFja2luZyB0byBwcmV2ZW50IHB1dF9yZWYoKSBmcm9tIGRpc2FwcGVhcmluZyBkdXJpbmcgbW9kdWxlCi0gKiB1bmxvYWQKLSAqLwotI2lmZGVmIENPTkZJR19NT0RVTEVTCi1zdGF0aWMgc3RydWN0IG1vZHVsZSAqc2xvd193b3JrX3RocmVhZF9wcm9jZXNzaW5nW1NMT1dfV09SS19USFJFQURfTElNSVRdOwotc3RhdGljIHN0cnVjdCBtb2R1bGUgKnNsb3dfd29ya191bnJlZ19tb2R1bGU7Ci1zdGF0aWMgc3RydWN0IHNsb3dfd29yayAqc2xvd193b3JrX3VucmVnX3dvcmtfaXRlbTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzbG93X3dvcmtfdW5yZWdfd3EpOwotc3RhdGljIERFRklORV9NVVRFWChzbG93X3dvcmtfdW5yZWdfc3luY19sb2NrKTsKLQotc3RhdGljIHZvaWQgc2xvd193b3JrX3NldF90aHJlYWRfcHJvY2Vzc2luZyhpbnQgaWQsIHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0JaWYgKHdvcmspCi0JCXNsb3dfd29ya190aHJlYWRfcHJvY2Vzc2luZ1tpZF0gPSB3b3JrLT5vd25lcjsKLX0KLXN0YXRpYyB2b2lkIHNsb3dfd29ya19kb25lX3RocmVhZF9wcm9jZXNzaW5nKGludCBpZCwgc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUgPSBzbG93X3dvcmtfdGhyZWFkX3Byb2Nlc3NpbmdbaWRdOwotCi0Jc2xvd193b3JrX3RocmVhZF9wcm9jZXNzaW5nW2lkXSA9IE5VTEw7Ci0Jc21wX21iKCk7Ci0JaWYgKHNsb3dfd29ya191bnJlZ193b3JrX2l0ZW0gPT0gd29yayB8fAotCSAgICBzbG93X3dvcmtfdW5yZWdfbW9kdWxlID09IG1vZHVsZSkKLQkJd2FrZV91cF9hbGwoJnNsb3dfd29ya191bnJlZ193cSk7Ci19Ci1zdGF0aWMgdm9pZCBzbG93X3dvcmtfY2xlYXJfdGhyZWFkX3Byb2Nlc3NpbmcoaW50IGlkKQotewotCXNsb3dfd29ya190aHJlYWRfcHJvY2Vzc2luZ1tpZF0gPSBOVUxMOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHNsb3dfd29ya19zZXRfdGhyZWFkX3Byb2Nlc3NpbmcoaW50IGlkLCBzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKSB7fQotc3RhdGljIHZvaWQgc2xvd193b3JrX2RvbmVfdGhyZWFkX3Byb2Nlc3NpbmcoaW50IGlkLCBzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKSB7fQotc3RhdGljIHZvaWQgc2xvd193b3JrX2NsZWFyX3RocmVhZF9wcm9jZXNzaW5nKGludCBpZCkge30KLSNlbmRpZgotCi0vKgotICogRGF0YSBmb3IgdHJhY2tpbmcgY3VycmVudGx5IGV4ZWN1dGluZyBpdGVtcyBmb3IgaW5kaWNhdGlvbiB0aHJvdWdoIC9wcm9jCi0gKi8KLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCi1zdHJ1Y3Qgc2xvd193b3JrICpzbG93X3dvcmtfZXhlY3NbU0xPV19XT1JLX1RIUkVBRF9MSU1JVF07Ci1waWRfdCBzbG93X3dvcmtfcGlkc1tTTE9XX1dPUktfVEhSRUFEX0xJTUlUXTsKLURFRklORV9SV0xPQ0soc2xvd193b3JrX2V4ZWNzX2xvY2spOwotI2VuZGlmCi0KLS8qCi0gKiBUaGUgcXVldWVzIG9mIHdvcmsgaXRlbXMgYW5kIHRoZSBsb2NrIGdvdmVybmluZyBhY2Nlc3MgdG8gdGhlbS4gIFRoZXNlIGFyZQotICogc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBDUFVzLiAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgcGVyLUNQVSBxdWV1ZXMKLSAqIGFzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgbnVtYmVyIG9mIENQVXMuCi0gKgotICogVGhlcmUgYXJlIHR3byBxdWV1ZXMgb2Ygd29yayBpdGVtczogb25lIGZvciBzbG93IHdvcmsgaXRlbXMsIGFuZCBvbmUgZm9yCi0gKiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KLSAqLwotTElTVF9IRUFEKHNsb3dfd29ya19xdWV1ZSk7Ci1MSVNUX0hFQUQodnNsb3dfd29ya19xdWV1ZSk7Ci1ERUZJTkVfU1BJTkxPQ0soc2xvd193b3JrX3F1ZXVlX2xvY2spOwotCi0vKgotICogVGhlIGZvbGxvd2luZyBhcmUgdHdvIHdhaXQgcXVldWVzIHRoYXQgZ2V0IHBpbmdlZCB3aGVuIGEgd29yayBpdGVtIGlzIHBsYWNlZAotICogb24gYW4gZW1wdHkgcXVldWUuICBUaGVzZSBhbGxvdyB3b3JrIGl0ZW1zIHRoYXQgYXJlIGhvZ2dpbmcgYSB0aHJlYWQgYnkKLSAqIHNsZWVwaW5nIGluIGEgd2F5IHRoYXQgY291bGQgYmUgZGVmZXJyZWQgdG8geWllbGQgdGhlaXIgdGhyZWFkIGFuZCBlbnF1ZXVlCi0gKiB0aGVtc2VsdmVzLgotICovCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoc2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uKTsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh2c2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uKTsKLQotLyoKLSAqIFRoZSB0aHJlYWQgY29udHJvbHMuICBBIHZhcmlhYmxlIHVzZWQgdG8gc2lnbmFsIHRvIHRoZSB0aHJlYWRzIHRoYXQgdGhleQotICogc2hvdWxkIGV4aXQgd2hlbiB0aGUgcXVldWUgaXMgZW1wdHksIGEgd2FpdHF1ZXVlIHVzZWQgYnkgdGhlIHRocmVhZHMgdG8gd2FpdAotICogZm9yIHNpZ25hbHMsIGFuZCBhIGNvbXBsZXRpb24gc2V0IGJ5IHRoZSBsYXN0IHRocmVhZCB0byBleGl0LgotICovCi1zdGF0aWMgYm9vbCBzbG93X3dvcmtfdGhyZWFkc19zaG91bGRfZXhpdDsKLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChzbG93X3dvcmtfdGhyZWFkX3dxKTsKLXN0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCk7Ci0KLS8qCi0gKiBUaGUgbnVtYmVyIG9mIHVzZXJzIG9mIHRoZSB0aHJlYWQgcG9vbCBhbmQgaXRzIGxvY2suICBXaGlsc3QgdGhpcyBpcyB6ZXJvIHdlCi0gKiBoYXZlIG5vIHRocmVhZHMgaGFuZ2luZyBhcm91bmQsIGFuZCB3aGVuIHRoaXMgcmVhY2hlcyB6ZXJvLCB3ZSB3YWl0IGZvciBhbGwKLSAqIGFjdGl2ZSBvciBxdWV1ZWQgd29yayBpdGVtcyB0byBjb21wbGV0ZSBhbmQga2lsbCBhbGwgdGhlIHRocmVhZHMgd2UgZG8gaGF2ZS4KLSAqLwotc3RhdGljIGludCBzbG93X3dvcmtfdXNlcl9jb3VudDsKLXN0YXRpYyBERUZJTkVfTVVURVgoc2xvd193b3JrX3VzZXJfbG9jayk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNsb3dfd29ya19nZXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0JaWYgKHdvcmstPm9wcy0+Z2V0X3JlZikKLQkJcmV0dXJuIHdvcmstPm9wcy0+Z2V0X3JlZih3b3JrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xvd193b3JrX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlpZiAod29yay0+b3BzLT5wdXRfcmVmKQotCQl3b3JrLT5vcHMtPnB1dF9yZWYod29yayk7Ci19Ci0KLS8qCi0gKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSB0aHJlYWRzIGluIHRoZSBwb29sIHRoYXQgYXJlCi0gKiBwZXJtaXR0ZWQgdG8gcHJvY2VzcyB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KLSAqCi0gKiBUaGUgYW5zd2VyIGlzIHJvdW5kZWQgdXAgdG8gYXQgbGVhc3QgMSwgYnV0IG1heSBub3QgZXF1YWwgb3IgZXhjZWVkIHRoZQotICogbWF4aW11bSBudW1iZXIgb2YgdGhlIHRocmVhZHMgaW4gdGhlIHBvb2wuICBUaGlzIG1lYW5zIHdlIGFsd2F5cyBoYXZlIGF0Ci0gKiBsZWFzdCBvbmUgdGhyZWFkIHRoYXQgY2FuIHByb2Nlc3Mgc2xvdyB3b3JrIGl0ZW1zLCBhbmQgd2UgYWx3YXlzIGhhdmUgYXQKLSAqIGxlYXN0IG9uZSB0aHJlYWQgdGhhdCB3b24ndCBnZXQgdGllZCB1cCBkb2luZyBzby4KLSAqLwotc3RhdGljIHVuc2lnbmVkIHNsb3dfd29ya19jYWxjX3ZzbWF4KHZvaWQpCi17Ci0JdW5zaWduZWQgdnNtYXg7Ci0KLQl2c21heCA9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSAqIHZzbG93X3dvcmtfcHJvcG9ydGlvbjsKLQl2c21heCAvPSAxMDA7Ci0JdnNtYXggPSBtYXgodnNtYXgsIDFVKTsKLQlyZXR1cm4gbWluKHZzbWF4LCBzbG93X3dvcmtfbWF4X3RocmVhZHMgLSAxKTsKLX0KLQotLyoKLSAqIEF0dGVtcHQgdG8gZXhlY3V0ZSBzdHVmZiBxdWV1ZWQgb24gYSBzbG93IHRocmVhZC4gIFJldHVybiB0cnVlIGlmIHdlIG1hbmFnZWQKLSAqIGl0LCBmYWxzZSBpZiB0aGVyZSB3YXMgbm90aGluZyB0byBkby4KLSAqLwotc3RhdGljIG5vaW5saW5lIGJvb2wgc2xvd193b3JrX2V4ZWN1dGUoaW50IGlkKQotewotCXN0cnVjdCBzbG93X3dvcmsgKndvcmsgPSBOVUxMOwotCXVuc2lnbmVkIHZzbWF4OwotCWJvb2wgdmVyeV9zbG93OwotCi0JdnNtYXggPSBzbG93X3dvcmtfY2FsY192c21heCgpOwotCi0JLyogc2VlIGlmIHdlIGNhbiBzY2hlZHVsZSBhIG5ldyB0aHJlYWQgdG8gYmUgc3RhcnRlZCBpZiB3ZSdyZSBub3QKLQkgKiBrZWVwaW5nIHVwIHdpdGggdGhlIHdvcmsgKi8KLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnNsb3dfd29ya190aHJlYWRfd3EpICYmCi0JICAgICghbGlzdF9lbXB0eSgmc2xvd193b3JrX3F1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkpICYmCi0JICAgIGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSA8IHNsb3dfd29ya19tYXhfdGhyZWFkcyAmJgotCSAgICAhc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCkKLQkJc2xvd193b3JrX2VucXVldWUoJnNsb3dfd29ya19uZXdfdGhyZWFkKTsKLQotCS8qIGZpbmQgc29tZXRoaW5nIHRvIGV4ZWN1dGUgKi8KLQlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7Ci0JaWYgKCFsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgotCSAgICBhdG9taWNfcmVhZCgmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpIDwgdnNtYXgpIHsKLQkJd29yayA9IGxpc3RfZW50cnkodnNsb3dfd29ya19xdWV1ZS5uZXh0LAotCQkJCSAgc3RydWN0IHNsb3dfd29yaywgbGluayk7Ci0JCWlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKSkKLQkJCUJVRygpOwotCQlsaXN0X2RlbF9pbml0KCZ3b3JrLT5saW5rKTsKLQkJYXRvbWljX2luYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOwotCQl2ZXJ5X3Nsb3cgPSB0cnVlOwotCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkpIHsKLQkJd29yayA9IGxpc3RfZW50cnkoc2xvd193b3JrX3F1ZXVlLm5leHQsCi0JCQkJICBzdHJ1Y3Qgc2xvd193b3JrLCBsaW5rKTsKLQkJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKQotCQkJQlVHKCk7Ci0JCWxpc3RfZGVsX2luaXQoJndvcmstPmxpbmspOwotCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsKLQl9IGVsc2UgewotCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsgLyogYXZvaWQgdGhlIGNvbXBpbGVyIHdhcm5pbmcgKi8KLQl9Ci0KLQlzbG93X3dvcmtfc2V0X3RocmVhZF9wcm9jZXNzaW5nKGlkLCB3b3JrKTsKLQlpZiAod29yaykgewotCQlzbG93X3dvcmtfbWFya190aW1lKHdvcmspOwotCQlzbG93X3dvcmtfYmVnaW5fZXhlYyhpZCwgd29yayk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7Ci0KLQlpZiAoIXdvcmspCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKQotCQlCVUcoKTsKLQotCS8qIGRvbid0IGV4ZWN1dGUgaWYgdGhlIHdvcmsgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY2FuY2VsbGVkICovCi0JaWYgKCF0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKLQkJd29yay0+b3BzLT5leGVjdXRlKHdvcmspOwotCi0JaWYgKHZlcnlfc2xvdykKLQkJYXRvbWljX2RlYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOwotCWNsZWFyX2JpdF91bmxvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKTsKLQotCS8qIHdha2UgdXAgYW55b25lIHdhaXRpbmcgZm9yIHRoaXMgd29yayB0byBiZSBjb21wbGV0ZSAqLwotCXdha2VfdXBfYml0KCZ3b3JrLT5mbGFncywgU0xPV19XT1JLX0VYRUNVVElORyk7Ci0KLQlzbG93X3dvcmtfZW5kX2V4ZWMoaWQsIHdvcmspOwotCi0JLyogaWYgc29tZW9uZSB0cmllZCB0byBlbnF1ZXVlIHRoZSBpdGVtIHdoaWxzdCB3ZSB3ZXJlIGV4ZWN1dGluZyBpdCwKLQkgKiB0aGVuIGl0J2xsIGJlIGxlZnQgdW5lbnF1ZXVlZCB0byBhdm9pZCBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0bwotCSAqIGV4ZWN1dGUgaXQgc2ltdWx0YW5lb3VzbHkKLQkgKgotCSAqIHRoZXJlIGlzLCBob3dldmVyLCBhIHJhY2UgYmV0d2VlbiB1cyB0ZXN0aW5nIHRoZSBwZW5kaW5nIGZsYWcgYW5kCi0JICogZ2V0dGluZyB0aGUgc3BpbmxvY2ssIGFuZCBiZXR3ZWVuIHRoZSBlbnF1ZXVlciBzZXR0aW5nIHRoZSBwZW5kaW5nCi0JICogZmxhZyBhbmQgZ2V0dGluZyB0aGUgc3BpbmxvY2ssIHNvIHdlIHVzZSBhIGRlZmVycmFsIGJpdCB0byB0ZWxsIHVzCi0JICogaWYgdGhlIGVucXVldWVyIGdvdCB0aGVyZSBmaXJzdAotCSAqLwotCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKSkgewotCQlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpICYmCi0JCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoU0xPV19XT1JLX0VOUV9ERUZFUlJFRCwgJndvcmstPmZsYWdzKSkKLQkJCWdvdG8gYXV0b19yZXF1ZXVlOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOwotCX0KLQotCS8qIHNvcnQgb3V0IHRoZSByYWNlIGJldHdlZW4gbW9kdWxlIHVubG9hZGluZyBhbmQgcHV0X3JlZigpICovCi0Jc2xvd193b3JrX3B1dF9yZWYod29yayk7Ci0Jc2xvd193b3JrX2RvbmVfdGhyZWFkX3Byb2Nlc3NpbmcoaWQsIHdvcmspOwotCi0JcmV0dXJuIHRydWU7Ci0KLWF1dG9fcmVxdWV1ZToKLQkvKiB3ZSBtdXN0IGNvbXBsZXRlIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbgotCSAqIC0gd2UgdHJhbnNmZXIgb3VyIHJlZiBvbiB0aGUgaXRlbSBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBxdWV1ZQotCSAqIC0gZG9uJ3Qgd2FrZSBhbm90aGVyIHRocmVhZCB1cCBhcyB3ZSdyZSBhd2FrZSBhbHJlYWR5Ci0JICovCi0Jc2xvd193b3JrX21hcmtfdGltZSh3b3JrKTsKLQlpZiAodGVzdF9iaXQoU0xPV19XT1JLX1ZFUllfU0xPVywgJndvcmstPmZsYWdzKSkKLQkJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgJnZzbG93X3dvcmtfcXVldWUpOwotCWVsc2UKLQkJbGlzdF9hZGRfdGFpbCgmd29yay0+bGluaywgJnNsb3dfd29ya19xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7Ci0Jc2xvd193b3JrX2NsZWFyX3RocmVhZF9wcm9jZXNzaW5nKGlkKTsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoqCi0gKiBzbG93X3dvcmtfc2xlZXBfdGlsbF90aHJlYWRfbmVlZGVkIC0gU2xlZXAgdGlsbCB0aHJlYWQgbmVlZGVkIGJ5IG90aGVyIHdvcmsKLSAqIHdvcms6IFRoZSB3b3JrIGl0ZW0gdW5kZXIgZXhlY3V0aW9uIHRoYXQgd2FudHMgdG8gc2xlZXAKLSAqIF90aW1lb3V0OiBTY2hlZHVsZXIgc2xlZXAgdGltZW91dAotICoKLSAqIEFsbG93IGEgcmVxdWV1ZWFibGUgd29yayBpdGVtIHRvIHNsZWVwIG9uIGEgc2xvdy13b3JrIHByb2Nlc3NvciB0aHJlYWQgdW50aWwKLSAqIHRoYXQgdGhyZWFkIGlzIG5lZWRlZCB0byBkbyBzb21lIG90aGVyIHdvcmsgb3IgdGhlIHNsZWVwIGlzIGludGVycnVwdGVkIGJ5Ci0gKiBzb21lIG90aGVyIGV2ZW50LgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBzZXQgdXAgYSB3YWtlIHVwIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHRoaXMgYW5kIG11c3QgaGF2ZSBzZXQKLSAqIHRoZSBhcHByb3ByaWF0ZSBzbGVlcCBtb2RlIChzdWNoIGFzIFRBU0tfVU5JTlRFUlJVUFRJQkxFKSBhbmQgdGVzdGVkIGl0cyBvd24KLSAqIGNvbmRpdGlvbiBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFzIG5vIHRlc3QgaXMgbWFkZSBoZXJlLgotICoKLSAqIEZhbHNlIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vdGhpbmcgb24gdGhlIHF1ZXVlOyB0cnVlIGlzIHJldHVybmVkIGlmIHRoZQotICogd29yayBpdGVtIHNob3VsZCBiZSByZXF1ZXVlZAotICovCi1ib29sIHNsb3dfd29ya19zbGVlcF90aWxsX3RocmVhZF9uZWVkZWQoc3RydWN0IHNsb3dfd29yayAqd29yaywKLQkJCQkJc2lnbmVkIGxvbmcgKl90aW1lb3V0KQotewotCXdhaXRfcXVldWVfaGVhZF90ICp3Zm9fd3E7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcXVldWU7Ci0KLQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKSB7Ci0JCXdmb193cSA9ICZ2c2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uOwotCQlxdWV1ZSA9ICZ2c2xvd193b3JrX3F1ZXVlOwotCX0gZWxzZSB7Ci0JCXdmb193cSA9ICZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247Ci0JCXF1ZXVlID0gJnNsb3dfd29ya19xdWV1ZTsKLQl9Ci0KLQlpZiAoIWxpc3RfZW1wdHkocXVldWUpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3Zm9fd3EsICZ3YWl0KTsKLQlpZiAobGlzdF9lbXB0eShxdWV1ZSkpCi0JCSpfdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoKl90aW1lb3V0KTsKLQlmaW5pc2hfd2FpdCh3Zm9fd3EsICZ3YWl0KTsKLQotCXJldHVybiAhbGlzdF9lbXB0eShxdWV1ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNsb3dfd29ya19zbGVlcF90aWxsX3RocmVhZF9uZWVkZWQpOwotCi0vKioKLSAqIHNsb3dfd29ya19lbnF1ZXVlIC0gU2NoZWR1bGUgYSBzbG93IHdvcmsgaXRlbSBmb3IgcHJvY2Vzc2luZwotICogQHdvcms6IFRoZSB3b3JrIGl0ZW0gdG8gcXVldWUKLSAqCi0gKiBTY2hlZHVsZSBhIHNsb3cgd29yayBpdGVtIGZvciBwcm9jZXNzaW5nLiAgSWYgdGhlIGl0ZW0gaXMgYWxyZWFkeSB1bmRlcmdvaW5nCi0gKiBleGVjdXRpb24sIHRoaXMgZ3VhcmFudGVlcyBub3QgdG8gcmUtZW50ZXIgdGhlIGV4ZWN1dGlvbiByb3V0aW5lIHVudGlsIHRoZQotICogZmlyc3QgZXhlY3V0aW9uIGZpbmlzaGVzLgotICoKLSAqIFRoZSBpdGVtIGlzIHBpbm5lZCBieSB0aGlzIGZ1bmN0aW9uIGFzIGl0IHJldGFpbnMgYSByZWZlcmVuY2UgdG8gaXQsIG1hbmFnZWQKLSAqIHRocm91Z2ggdGhlIGl0ZW0gb3BlcmF0aW9ucy4gIFRoZSBpdGVtIGlzIHVucGlubmVkIG9uY2UgaXQgaGFzIGJlZW4KLSAqIGV4ZWN1dGVkLgotICoKLSAqIEFuIGl0ZW0gbWF5IGhvZyB0aGUgdGhyZWFkIHRoYXQgaXMgcnVubmluZyBpdCBmb3IgYSByZWxhdGl2ZWx5IGxhcmdlIGFtb3VudAotICogb2YgdGltZSwgc3VmZmljaWVudCwgZm9yIGV4YW1wbGUsIHRvIHBlcmZvcm0gc2V2ZXJhbCBsb29rdXAsIG1rZGlyLCBjcmVhdGUKLSAqIGFuZCBzZXR4YXR0ciBvcGVyYXRpb25zLiAgSXQgbWF5IHNsZWVwIG9uIEkvTyBhbmQgbWF5IHNsZWVwIHRvIG9idGFpbiBsb2Nrcy4KLSAqCi0gKiBDb252ZXJzZWx5LCBpZiBhIG51bWJlciBvZiBpdGVtcyBhcmUgYXdhaXRpbmcgcHJvY2Vzc2luZywgaXQgbWF5IHRha2Ugc29tZQotICogdGltZSBiZWZvcmUgYW55IGdpdmVuIGl0ZW0gaXMgZ2l2ZW4gYXR0ZW50aW9uLiAgVGhlIG51bWJlciBvZiB0aHJlYWRzIGluIHRoZQotICogcG9vbCBtYXkgYmUgaW5jcmVhc2VkIHRvIGRlYWwgd2l0aCBkZW1hbmQsIGJ1dCBvbmx5IHVwIHRvIGEgbGltaXQuCi0gKgotICogSWYgU0xPV19XT1JLX1ZFUllfU0xPVyBpcyBzZXQgb24gdGhlIHdvcmsgaXRlbSwgdGhlbiBpdCB3aWxsIGJlIHBsYWNlZCBpbgotICogdGhlIHZlcnkgc2xvdyBxdWV1ZSwgZnJvbSB3aGljaCBvbmx5IGEgcG9ydGlvbiBvZiB0aGUgdGhyZWFkcyB3aWxsIGJlCi0gKiBhbGxvd2VkIHRvIHBpY2sgaXRlbXMgdG8gZXhlY3V0ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHZlcnkgc2xvdyBpdGVtcyB3b24ndAotICogb3Zlcmx5IGJsb2NrIG9uZXMgdGhhdCBhcmUganVzdCBvcmRpbmFyaWx5IHNsb3cuCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIC1FQUdBSU4gaWYgbm90IChvciAtRUNBTkNFTEVEIGlmIGNhbmNlbGxlZCB3b3JrIGlzCi0gKiBhdHRlbXB0ZWQgcXVldWVkKQotICovCi1pbnQgc2xvd193b3JrX2VucXVldWUoc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd2ZvX3dxOwotCXN0cnVjdCBsaXN0X2hlYWQgKnF1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKLQkJcmV0dXJuIC1FQ0FOQ0VMRUQ7Ci0KLQlCVUdfT04oc2xvd193b3JrX3VzZXJfY291bnQgPD0gMCk7Ci0JQlVHX09OKCF3b3JrKTsKLQlCVUdfT04oIXdvcmstPm9wcyk7Ci0KLQkvKiB3aGVuIGhvbm91cmluZyBhbiBlbnF1ZXVlIHJlcXVlc3QsIHdlIG9ubHkgcHJvbWlzZSB0aGF0IHdlIHdpbGwgcnVuCi0JICogdGhlIHdvcmsgZnVuY3Rpb24gaW4gdGhlIGZ1dHVyZTsgd2UgZG8gbm90IHByb21pc2UgdG8gcnVuIGl0IG9uY2UKLQkgKiBwZXIgZW5xdWV1ZSByZXF1ZXN0Ci0JICoKLQkgKiB3ZSB1c2UgdGhlIFBFTkRJTkcgYml0IHRvIG1lcmdlIHRvZ2V0aGVyIHJlcGVhdCByZXF1ZXN0cyB3aXRob3V0Ci0JICogaGF2aW5nIHRvIGRpc2FibGUgSVJRcyBhbmQgdGFrZSB0aGUgc3BpbmxvY2ssIHdoaWxzdCBzdGlsbAotCSAqIG1haW50YWluaW5nIG91ciBwcm9taXNlCi0JICovCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpIHsKLQkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpIHsKLQkJCXdmb193cSA9ICZ2c2xvd193b3JrX3F1ZXVlX3dhaXRzX2Zvcl9vY2N1cGF0aW9uOwotCQkJcXVldWUgPSAmdnNsb3dfd29ya19xdWV1ZTsKLQkJfSBlbHNlIHsKLQkJCXdmb193cSA9ICZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247Ci0JCQlxdWV1ZSA9ICZzbG93X3dvcmtfcXVldWU7Ci0JCX0KLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkodGVzdF9iaXQoU0xPV19XT1JLX0NBTkNFTExJTkcsICZ3b3JrLT5mbGFncykpKQotCQkJZ290byBjYW5jZWxsZWQ7Ci0KLQkJLyogd2UgcHJvbWlzZSB0aGF0IHdlIHdpbGwgbm90IGF0dGVtcHQgdG8gZXhlY3V0ZSB0aGUgd29yawotCQkgKiBmdW5jdGlvbiBpbiBtb3JlIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseQotCQkgKgotCQkgKiB0aGlzLCBob3dldmVyLCBsZWF2ZXMgdXMgd2l0aCBhIHByb2JsZW0gaWYgd2UncmUgYXNrZWQgdG8KLQkJICogZW5xdWV1ZSB0aGUgd29yayB3aGlsc3Qgc29tZW9uZSBpcyBleGVjdXRpbmcgdGhlIHdvcmsKLQkJICogZnVuY3Rpb24gYXMgc2ltcGx5IHF1ZXVlaW5nIHRoZSB3b3JrIGltbWVkaWF0ZWx5IG1lYW5zIHRoYXQKLQkJICogYW5vdGhlciB0aHJlYWQgbWF5IHRyeSBleGVjdXRpbmcgaXQgd2hpbHN0IGl0IGlzIGFscmVhZHkKLQkJICogdW5kZXIgZXhlY3V0aW9uCi0JCSAqCi0JCSAqIHRvIGRlYWwgd2l0aCB0aGlzLCB3ZSBzZXQgdGhlIEVOUV9ERUZFUlJFRCBiaXQgaW5zdGVhZCBvZgotCQkgKiBlbnF1ZXVlaW5nLCBhbmQgdGhlIHRocmVhZCBjdXJyZW50bHkgZXhlY3V0aW5nIHRoZSB3b3JrCi0JCSAqIGZ1bmN0aW9uIHdpbGwgZW5xdWV1ZSB0aGUgd29yayBpdGVtIHdoZW4gdGhlIHdvcmsgZnVuY3Rpb24KLQkJICogcmV0dXJucyBhbmQgaXQgaGFzIGNsZWFyZWQgdGhlIEVYRUNVVElORyBiaXQKLQkJICovCi0JCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKSB7Ci0JCQlzZXRfYml0KFNMT1dfV09SS19FTlFfREVGRVJSRUQsICZ3b3JrLT5mbGFncyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSBzbG93X3dvcmtfZ2V0X3JlZih3b3JrKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gZmFpbGVkOwotCQkJc2xvd193b3JrX21hcmtfdGltZSh3b3JrKTsKLQkJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssIHF1ZXVlKTsKLQkJCXdha2VfdXAoJnNsb3dfd29ya190aHJlYWRfd3EpOwotCi0JCQkvKiBpZiBzb21lb25lIHdobyBjb3VsZCBiZSByZXF1ZXVlZCBpcyBzbGVlcGluZyBvbiBhCi0JCQkgKiB0aHJlYWQsIHRoZW4gYXNrIHRoZW0gdG8geWllbGQgdGhlaXIgdGhyZWFkICovCi0JCQlpZiAod29yay0+bGluay5wcmV2ID09IHF1ZXVlKQotCQkJCXdha2VfdXAod2ZvX3dxKTsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JfQotCXJldHVybiAwOwotCi1jYW5jZWxsZWQ6Ci0JcmV0ID0gLUVDQU5DRUxFRDsKLWZhaWxlZDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHNsb3dfd29ya19lbnF1ZXVlKTsKLQotc3RhdGljIGludCBzbG93X3dvcmtfd2FpdCh2b2lkICp3b3JkKQotewotCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogc2xvd193b3JrX2NhbmNlbCAtIENhbmNlbCBhIHNsb3cgd29yayBpdGVtCi0gKiBAd29yazogVGhlIHdvcmsgaXRlbSB0byBjYW5jZWwKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FuY2VsIGEgcHJldmlvdXNseSBlbnF1ZXVlZCB3b3JrIGl0ZW0uIElmIHdlIGNhbm5vdAotICogY2FuY2VsIHRoZSB3b3JrIGl0ZW0sIGl0IGlzIGd1YXJlbnRlZWQgdG8gaGF2ZSBydW4gd2hlbiB0aGlzIGZ1bmN0aW9uCi0gKiByZXR1cm5zLgotICovCi12b2lkIHNsb3dfd29ya19jYW5jZWwoc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLQlib29sIHdhaXQgPSB0cnVlLCBwdXQgPSBmYWxzZTsKLQotCXNldF9iaXQoU0xPV19XT1JLX0NBTkNFTExJTkcsICZ3b3JrLT5mbGFncyk7Ci0Jc21wX21iKCk7Ci0KLQkvKiBpZiB0aGUgd29yayBpdGVtIGlzIGEgZGVsYXllZCB3b3JrIGl0ZW0gd2l0aCBhbiBhY3RpdmUgdGltZXIsIHdlCi0JICogbmVlZCB0byB3YWl0IGZvciB0aGUgdGltZXIgdG8gZmluaXNoIF9iZWZvcmVfIGdldHRpbmcgdGhlIHNwaW5sb2NrLAotCSAqIGxlc3Qgd2UgZGVhZGxvY2sgYWdhaW5zdCB0aGUgdGltZXIgcm91dGluZQotCSAqCi0JICogdGhlIHRpbWVyIHJvdXRpbmUgd2lsbCBsZWF2ZSBERUxBWUVEIHNldCBpZiBpdCBub3RpY2VzIHRoZQotCSAqIENBTkNFTExJTkcgZmxhZyBpbiB0aW1lCi0JICovCi0JaWYgKHRlc3RfYml0KFNMT1dfV09SS19ERUxBWUVELCAmd29yay0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmsgPQotCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yaywgd29yayk7Ci0JCWRlbF90aW1lcl9zeW5jKCZkd29yay0+dGltZXIpOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQotCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfREVMQVlFRCwgJndvcmstPmZsYWdzKSkgewotCQkvKiB0aGUgdGltZXIgcm91dGluZSBhYm9ydGVkIG9yIG5ldmVyIGhhcHBlbmVkLCBzbyB3ZSBhcmUgbGVmdAotCQkgKiBob2xkaW5nIHRoZSB0aW1lcidzIHJlZmVyZW5jZSBvbiB0aGUgaXRlbSBhbmQgc2hvdWxkIGp1c3QKLQkJICogZHJvcCB0aGUgcGVuZGluZyBmbGFnIGFuZCB3YWl0IGZvciBhbnkgb25nb2luZyBleGVjdXRpb24gdG8KLQkJICogZmluaXNoICovCi0JCXN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmsgPQotCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yaywgd29yayk7Ci0KLQkJQlVHX09OKHRpbWVyX3BlbmRpbmcoJmR3b3JrLT50aW1lcikpOwotCQlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmstPmxpbmspKTsKLQotCQljbGVhcl9iaXQoU0xPV19XT1JLX0RFTEFZRUQsICZ3b3JrLT5mbGFncyk7Ci0JCXB1dCA9IHRydWU7Ci0JCWNsZWFyX2JpdChTTE9XX1dPUktfUEVORElORywgJndvcmstPmZsYWdzKTsKLQotCX0gZWxzZSBpZiAodGVzdF9iaXQoU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykgJiYKLQkJICAgIWxpc3RfZW1wdHkoJndvcmstPmxpbmspKSB7Ci0JCS8qIHRoZSBsaW5rIGluIHRoZSBwZW5kaW5nIHF1ZXVlIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBpdGVtCi0JCSAqIHRoYXQgd2Ugd2lsbCBuZWVkIHRvIHJlbGVhc2UgKi8KLQkJbGlzdF9kZWxfaW5pdCgmd29yay0+bGluayk7Ci0JCXdhaXQgPSBmYWxzZTsKLQkJcHV0ID0gdHJ1ZTsKLQkJY2xlYXJfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpOwotCi0JfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU0xPV19XT1JLX0VOUV9ERUZFUlJFRCwgJndvcmstPmZsYWdzKSkgewotCQkvKiB0aGUgZXhlY3V0b3IgaXMgaG9sZGluZyBvdXIgb25seSByZWZlcmVuY2Ugb24gdGhlIGl0ZW0sIHNvCi0JCSAqIHdlIG1lcmVseSBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBleGVjdXRpbmcgKi8KLQkJY2xlYXJfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycSgmc2xvd193b3JrX3F1ZXVlX2xvY2spOwotCi0JLyogdGhlIEVYRUNVVElORyBmbGFnIGlzIHNldCBieSB0aGUgZXhlY3V0b3Igd2hpbHN0IHRoZSBzcGlubG9jayBpcyBzZXQKLQkgKiBhbmQgYmVmb3JlIHRoZSBpdGVtIGlzIGRlcXVldWVkIC0gc28gYXNzdW1pbmcgdGhlIGFib3ZlIGRvZXNuJ3QKLQkgKiBhY3R1YWxseSBkZXF1ZXVlIGl0LCBzaW1wbHkgd2FpdGluZyBmb3IgdGhlIEVYRUNVVElORyBmbGFnIHRvIGJlCi0JICogcmVsZWFzZWQgaGVyZSBzaG91bGQgYmUgc3VmZmljaWVudCAqLwotCWlmICh3YWl0KQotCQl3YWl0X29uX2JpdCgmd29yay0+ZmxhZ3MsIFNMT1dfV09SS19FWEVDVVRJTkcsIHNsb3dfd29ya193YWl0LAotCQkJICAgIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQotCWNsZWFyX2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKTsKLQlpZiAocHV0KQotCQlzbG93X3dvcmtfcHV0X3JlZih3b3JrKTsKLX0KLUVYUE9SVF9TWU1CT0woc2xvd193b3JrX2NhbmNlbCk7Ci0KLS8qCi0gKiBIYW5kbGUgZXhwaXJ5IG9mIHRoZSBkZWxheSB0aW1lciwgaW5kaWNhdGluZyB0aGF0IGEgZGVsYXllZCBzbG93IHdvcmsgaXRlbQotICogc2hvdWxkIG5vdyBiZSBxdWV1ZWQgaWYgbm90IGNhbmNlbGxlZAotICovCi1zdGF0aWMgdm9pZCBkZWxheWVkX3Nsb3dfd29ya190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgKndmb193cTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZTsKLQlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrID0gKHN0cnVjdCBzbG93X3dvcmsgKikgZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWJvb2wgcXVldWVkID0gZmFsc2UsIHB1dCA9IGZhbHNlLCBmaXJzdCA9IGZhbHNlOwotCi0JaWYgKHRlc3RfYml0KFNMT1dfV09SS19WRVJZX1NMT1csICZ3b3JrLT5mbGFncykpIHsKLQkJd2ZvX3dxID0gJnZzbG93X3dvcmtfcXVldWVfd2FpdHNfZm9yX29jY3VwYXRpb247Ci0JCXF1ZXVlID0gJnZzbG93X3dvcmtfcXVldWU7Ci0JfSBlbHNlIHsKLQkJd2ZvX3dxID0gJnNsb3dfd29ya19xdWV1ZV93YWl0c19mb3Jfb2NjdXBhdGlvbjsKLQkJcXVldWUgPSAmc2xvd193b3JrX3F1ZXVlOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNMT1dfV09SS19DQU5DRUxMSU5HLCAmd29yay0+ZmxhZ3MpKSkgewotCQljbGVhcl9iaXQoU0xPV19XT1JLX0RFTEFZRUQsICZ3b3JrLT5mbGFncyk7Ci0KLQkJaWYgKHRlc3RfYml0KFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykpIHsKLQkJCS8qIHdlIGRpc2NhcmQgdGhlIHJlZmVyZW5jZSB0aGUgdGltZXIgd2FzIGhvbGRpbmcgaW4KLQkJCSAqIGZhdm91ciBvZiB0aGUgb25lIHRoZSBleGVjdXRvciBob2xkcyAqLwotCQkJc2V0X2JpdChTTE9XX1dPUktfRU5RX0RFRkVSUkVELCAmd29yay0+ZmxhZ3MpOwotCQkJcHV0ID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCXNsb3dfd29ya19tYXJrX3RpbWUod29yayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCBxdWV1ZSk7Ci0JCQlxdWV1ZWQgPSB0cnVlOwotCQkJaWYgKHdvcmstPmxpbmsucHJldiA9PSBxdWV1ZSkKLQkJCQlmaXJzdCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmIChwdXQpCi0JCXNsb3dfd29ya19wdXRfcmVmKHdvcmspOwotCWlmIChmaXJzdCkKLQkJd2FrZV91cCh3Zm9fd3EpOwotCWlmIChxdWV1ZWQpCi0JCXdha2VfdXAoJnNsb3dfd29ya190aHJlYWRfd3EpOwotfQotCi0vKioKLSAqIGRlbGF5ZWRfc2xvd193b3JrX2VucXVldWUgLSBTY2hlZHVsZSBhIGRlbGF5ZWQgc2xvdyB3b3JrIGl0ZW0gZm9yIHByb2Nlc3NpbmcKLSAqIEBkd29yazogVGhlIGRlbGF5ZWQgd29yayBpdGVtIHRvIHF1ZXVlCi0gKiBAZGVsYXk6IFdoZW4gdG8gc3RhcnQgZXhlY3V0aW5nIHRoZSB3b3JrLCBpbiBqaWZmaWVzIGZyb20gbm93Ci0gKgotICogVGhpcyBpcyBzaW1pbGFyIHRvIHNsb3dfd29ya19lbnF1ZXVlKCksIGJ1dCBpdCBhZGRzIGEgZGVsYXkgYmVmb3JlIHRoZSB3b3JrCi0gKiBpcyBhY3R1YWxseSBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcuCi0gKgotICogVGhlIGl0ZW0gY2FuIGhhdmUgZGVsYXllZCBwcm9jZXNzaW5nIHJlcXVlc3RlZCBvbiBpdCB3aGlsc3QgaXQgaXMgYmVpbmcKLSAqIGV4ZWN1dGVkLiAgVGhlIGRlbGF5IHdpbGwgYmVnaW4gaW1tZWRpYXRlbHksIGFuZCBpZiBpdCBleHBpcmVzIGJlZm9yZSB0aGUKLSAqIGl0ZW0gZmluaXNoZXMgZXhlY3V0aW5nLCB0aGUgaXRlbSB3aWxsIGJlIHBsYWNlZCBiYWNrIG9uIHRoZSBxdWV1ZSB3aGVuIGl0Ci0gKiBoYXMgZG9uZSBleGVjdXRpbmcuCi0gKi8KLWludCBkZWxheWVkX3Nsb3dfd29ya19lbnF1ZXVlKHN0cnVjdCBkZWxheWVkX3Nsb3dfd29yayAqZHdvcmssCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGRlbGF5KQotewotCXN0cnVjdCBzbG93X3dvcmsgKndvcmsgPSAmZHdvcmstPndvcms7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0JaWYgKGRlbGF5ID09IDApCi0JCXJldHVybiBzbG93X3dvcmtfZW5xdWV1ZSgmZHdvcmstPndvcmspOwotCi0JQlVHX09OKHNsb3dfd29ya191c2VyX2NvdW50IDw9IDApOwotCUJVR19PTighd29yayk7Ci0JQlVHX09OKCF3b3JrLT5vcHMpOwotCi0JaWYgKHRlc3RfYml0KFNMT1dfV09SS19DQU5DRUxMSU5HLCAmd29yay0+ZmxhZ3MpKQotCQlyZXR1cm4gLUVDQU5DRUxFRDsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCi0JCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfQ0FOQ0VMTElORywgJndvcmstPmZsYWdzKSkKLQkJCWdvdG8gY2FuY2VsbGVkOwotCi0JCS8qIHRoZSB0aW1lciBob2xkcyBhIHJlZmVyZW5jZSB3aGlsc3QgaXQgaXMgcGVuZGluZyAqLwotCQlyZXQgPSBzbG93X3dvcmtfZ2V0X3JlZih3b3JrKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGNhbnRfZ2V0X3JlZjsKLQotCQlpZiAodGVzdF9hbmRfc2V0X2JpdChTTE9XX1dPUktfREVMQVlFRCwgJndvcmstPmZsYWdzKSkKLQkJCUJVRygpOwotCQlkd29yay0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBkZWxheTsKLQkJZHdvcmstPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgd29yazsKLQkJZHdvcmstPnRpbWVyLmZ1bmN0aW9uID0gZGVsYXllZF9zbG93X3dvcmtfdGltZXI7Ci0JCWFkZF90aW1lcigmZHdvcmstPnRpbWVyKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiAwOwotCi1jYW5jZWxsZWQ6Ci0JcmV0ID0gLUVDQU5DRUxFRDsKLWNhbnRfZ2V0X3JlZjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGRlbGF5ZWRfc2xvd193b3JrX2VucXVldWUpOwotCi0vKgotICogU2NoZWR1bGUgYSBjdWxsIG9mIHRoZSB0aHJlYWQgcG9vbCBhdCBzb21lIHRpbWUgaW4gdGhlIG5lYXIgZnV0dXJlCi0gKi8KLXN0YXRpYyB2b2lkIHNsb3dfd29ya19zY2hlZHVsZV9jdWxsKHZvaWQpCi17Ci0JbW9kX3RpbWVyKCZzbG93X3dvcmtfY3VsbF90aW1lciwKLQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKSk7Ci19Ci0KLS8qCi0gKiBXb3JrZXIgdGhyZWFkIGN1bGxpbmcgYWxnb3JpdGhtCi0gKi8KLXN0YXRpYyBib29sIHNsb3dfd29ya19jdWxsX3RocmVhZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBkb19jdWxsID0gZmFsc2U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCWlmIChzbG93X3dvcmtfY3VsbCkgewotCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOwotCi0JCWlmIChsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpICYmCi0JCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgotCQkgICAgYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID4KLQkJICAgIHNsb3dfd29ya19taW5fdGhyZWFkcykgewotCQkJc2xvd193b3JrX3NjaGVkdWxlX2N1bGwoKTsKLQkJCWRvX2N1bGwgPSB0cnVlOwotCQl9Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZG9fY3VsbDsKLX0KLQotLyoKLSAqIERldGVybWluZSBpZiB0aGVyZSBpcyBzbG93IHdvcmsgYXZhaWxhYmxlIGZvciBkaXNwYXRjaAotICovCi1zdGF0aWMgaW5saW5lIGJvb2wgc2xvd193b3JrX2F2YWlsYWJsZShpbnQgdnNtYXgpCi17Ci0JcmV0dXJuICFsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpIHx8Ci0JCSghbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkgJiYKLQkJIGF0b21pY19yZWFkKCZ2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudCkgPCB2c21heCk7Ci19Ci0KLS8qCi0gKiBXb3JrZXIgdGhyZWFkIGRpc3BhdGNoZXIKLSAqLwotc3RhdGljIGludCBzbG93X3dvcmtfdGhyZWFkKHZvaWQgKl9kYXRhKQotewotCWludCB2c21heCwgaWQ7Ci0KLQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCXNldF9mcmVlemFibGUoKTsKLQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC01KTsKLQotCS8qIGFsbG9jYXRlIG91cnNlbHZlcyBhbiBJRCAqLwotCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQlpZCA9IGZpbmRfZmlyc3RfemVyb19iaXQoc2xvd193b3JrX2lkcywgU0xPV19XT1JLX1RIUkVBRF9MSU1JVCk7Ci0JQlVHX09OKGlkIDwgMCB8fCBpZCA+PSBTTE9XX1dPUktfVEhSRUFEX0xJTUlUKTsKLQlfX3NldF9iaXQoaWQsIHNsb3dfd29ya19pZHMpOwotCXNsb3dfd29ya19zZXRfdGhyZWFkX3BpZChpZCwgY3VycmVudC0+cGlkKTsKLQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQotCXNwcmludGYoY3VycmVudC0+Y29tbSwgImtzbG93ZCUwM3UiLCBpZCk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXZzbWF4ID0gdnNsb3dfd29ya19wcm9wb3J0aW9uOwotCQl2c21heCAqPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCk7Ci0JCXZzbWF4IC89IDEwMDsKLQotCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZzbG93X3dvcmtfdGhyZWFkX3dxLCAmd2FpdCwKLQkJCQkJICBUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlpZiAoIWZyZWV6aW5nKGN1cnJlbnQpICYmCi0JCSAgICAhc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgJiYKLQkJICAgICFzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJgotCQkgICAgIXNsb3dfd29ya19jdWxsKQotCQkJc2NoZWR1bGUoKTsKLQkJZmluaXNoX3dhaXQoJnNsb3dfd29ya190aHJlYWRfd3EsICZ3YWl0KTsKLQotCQl0cnlfdG9fZnJlZXplKCk7Ci0KLQkJdnNtYXggPSB2c2xvd193b3JrX3Byb3BvcnRpb247Ci0JCXZzbWF4ICo9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKLQkJdnNtYXggLz0gMTAwOwotCi0JCWlmIChzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJiBzbG93X3dvcmtfZXhlY3V0ZShpZCkpIHsKLQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJaWYgKGxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkgJiYKLQkJCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgotCQkJICAgIGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSA+Ci0JCQkgICAgc2xvd193b3JrX21pbl90aHJlYWRzKQotCQkJCXNsb3dfd29ya19zY2hlZHVsZV9jdWxsKCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzbG93X3dvcmtfdGhyZWFkc19zaG91bGRfZXhpdCkKLQkJCWJyZWFrOwotCi0JCWlmIChzbG93X3dvcmtfY3VsbCAmJiBzbG93X3dvcmtfY3VsbF90aHJlYWQoKSkKLQkJCWJyZWFrOwotCX0KLQotCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQlzbG93X3dvcmtfc2V0X3RocmVhZF9waWQoaWQsIDApOwotCV9fY2xlYXJfYml0KGlkLCBzbG93X3dvcmtfaWRzKTsKLQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSkKLQkJY29tcGxldGVfYW5kX2V4aXQoJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQsIDApOwotCXJldHVybiAwOwotfQotCi0vKgotICogSGFuZGxlIHRocmVhZCBjdWxsIHRpbWVyIGV4cGlyYXRpb24KLSAqLwotc3RhdGljIHZvaWQgc2xvd193b3JrX2N1bGxfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc2xvd193b3JrX2N1bGwgPSB0cnVlOwotCXdha2VfdXAoJnNsb3dfd29ya190aHJlYWRfd3EpOwotfQotCi0vKgotICogU3RhcnQgYSBuZXcgc2xvdyB3b3JrIHRocmVhZAotICovCi1zdGF0aWMgdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCi0JaWYgKHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0KQotCQlyZXR1cm47Ci0KLQlpZiAoYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID49IHNsb3dfd29ya19tYXhfdGhyZWFkcykKLQkJcmV0dXJuOwotCi0JaWYgKCFtdXRleF90cnlsb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKSkKLQkJcmV0dXJuOwotCi0Jc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IHRydWU7Ci0JYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7Ci0JcCA9IGt0aHJlYWRfcnVuKHNsb3dfd29ya190aHJlYWQsIE5VTEwsICJrc2xvd2QiKTsKLQlpZiAoSVNfRVJSKHApKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IE9PTVxuIik7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSkKLQkJCUJVRygpOyAvKiB3ZSdyZSBydW5uaW5nIG9uIGEgc2xvdyB3b3JrIHRocmVhZC4uLiAqLwotCQltb2RfdGltZXIoJnNsb3dfd29ya19vb21fdGltZXIsCi0JCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIFNMT1dfV09SS19PT01fVElNRU9VVCkpOwotCX0gZWxzZSB7Ci0JCS8qIHJhdGVsaW1pdCB0aGUgc3RhcnRpbmcgb2YgbmV3IHRocmVhZHMgKi8KLQkJbW9kX3RpbWVyKCZzbG93X3dvcmtfb29tX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIHNsb3dfd29ya19uZXdfdGhyZWFkX29wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmV4ZWN1dGUJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlLAotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLQkuZGVzYwkJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9kZXNjLAotI2VuZGlmCi19OwotCi0vKgotICogcG9zdC1PT00gbmV3IHRocmVhZCBzdGFydCBzdXBwcmVzc2lvbiBleHBpcmF0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIHNsb3dfd29ya19vb21fdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IGZhbHNlOwotfQotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotLyoKLSAqIEhhbmRsZSBhZGp1c3RtZW50IG9mIHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aHJlYWRzCi0gKi8KLXN0YXRpYyBpbnQgc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJCQl2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCWludCBuOwotCi0JaWYgKHJldCA9PSAwKSB7Ci0JCW11dGV4X2xvY2soJnNsb3dfd29ya191c2VyX2xvY2spOwotCQlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPiAwKSB7Ci0JCQkvKiBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBvciBzdG9wIHRocmVhZHMgKi8KLQkJCW4gPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgLQotCQkJCXNsb3dfd29ya19taW5fdGhyZWFkczsKLQotCQkJaWYgKG4gPCAwICYmICFzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkKQotCQkJCXNsb3dfd29ya19lbnF1ZXVlKCZzbG93X3dvcmtfbmV3X3RocmVhZCk7Ci0JCQllbHNlIGlmIChuID4gMCkKLQkJCQlzbG93X3dvcmtfc2NoZWR1bGVfY3VsbCgpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIEhhbmRsZSBhZGp1c3RtZW50IG9mIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzCi0gKi8KLXN0YXRpYyBpbnQgc2xvd193b3JrX21heF90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJCQl2b2lkIF9fdXNlciAqYnVmZmVyLAotCQkJCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCWludCBuOwotCi0JaWYgKHJldCA9PSAwKSB7Ci0JCW11dGV4X2xvY2soJnNsb3dfd29ya191c2VyX2xvY2spOwotCQlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPiAwKSB7Ci0JCQkvKiBzZWUgaWYgd2UgbmVlZCB0byBzdG9wIHRocmVhZHMgKi8KLQkJCW4gPSBzbG93X3dvcmtfbWF4X3RocmVhZHMgLQotCQkJCWF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKLQotCQkJaWYgKG4gPCAwKQotCQkJCXNsb3dfd29ya19zY2hlZHVsZV9jdWxsKCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KLQotLyoqCi0gKiBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlciAtIFJlZ2lzdGVyIGEgdXNlciBvZiB0aGUgZmFjaWxpdHkKLSAqIEBtb2R1bGU6IFRoZSBtb2R1bGUgYWJvdXQgdG8gbWFrZSB1c2Ugb2YgdGhlIGZhY2lsaXR5Ci0gKgotICogUmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eSwgc3RhcnRpbmcgdXAgdGhlIGluaXRpYWwgdGhyZWFkcyBpZiB0aGVyZQotICogYXJlbid0IGFueSBvdGhlciB1c2VycyBhdCB0aGlzIHBvaW50LiAgVGhpcyB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yCi0gKiBhbiBlcnJvciBpZiBub3QuCi0gKi8KLWludCBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcihzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCWludCBsb29wOwotCi0JbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7Ci0KLQlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPT0gMCkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNsb3cgd29yayB0aHJlYWQgcG9vbDogU3RhcnRpbmcgdXBcbiIpOwotCQlpbml0X2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOwotCi0JCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gZmFsc2U7Ci0JCXNsb3dfd29ya19pbml0KCZzbG93X3dvcmtfbmV3X3RocmVhZCwKLQkJCSAgICAgICAmc2xvd193b3JrX25ld190aHJlYWRfb3BzKTsKLQkJc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IGZhbHNlOwotCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOwotCi0JCS8qIHN0YXJ0IHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aHJlYWRzICovCi0JCWZvciAobG9vcCA9IDA7IGxvb3AgPCBzbG93X3dvcmtfbWluX3RocmVhZHM7IGxvb3ArKykgewotCQkJYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7Ci0JCQlwID0ga3RocmVhZF9ydW4oc2xvd193b3JrX3RocmVhZCwgTlVMTCwgImtzbG93ZCIpOwotCQkJaWYgKElTX0VSUihwKSkKLQkJCQlnb3RvIGVycm9yOwotCQl9Ci0JCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBSZWFkeVxuIik7Ci0JfQotCi0Jc2xvd193b3JrX3VzZXJfY291bnQrKzsKLQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOwotCXJldHVybiAwOwotCi1lcnJvcjoKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkpCi0JCWNvbXBsZXRlKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKLQlpZiAobG9vcCA+IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IgotCQkgICAgICAgIiBBYm9ydGluZyBzdGFydHVwIG9uIEVOT01FTVxuIik7Ci0JCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gdHJ1ZTsKLQkJd2FrZV91cF9hbGwoJnNsb3dfd29ya190aHJlYWRfd3EpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IEFib3J0ZWRcbiIpOwotCX0KLQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOwotCXJldHVybiBQVFJfRVJSKHApOwotfQotRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcik7Ci0KLS8qCi0gKiB3YWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgaXRlbXMgZnJvbSB0aGUgY2FsbGluZyBtb2R1bGUgdG8gY29tcGxldGUKLSAqIC0gbm90ZSB0aGF0IG1vcmUgaXRlbXMgbWF5IGJlIHF1ZXVlZCB3aGlsc3Qgd2UncmUgd2FpdGluZwotICovCi1zdGF0aWMgdm9pZCBzbG93X3dvcmtfd2FpdF9mb3JfaXRlbXMoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQotewotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JREVDTEFSRV9XQUlUUVVFVUUobXlzZWxmLCBjdXJyZW50KTsKLQlzdHJ1Y3Qgc2xvd193b3JrICp3b3JrOwotCWludCBsb29wOwotCi0JbXV0ZXhfbG9jaygmc2xvd193b3JrX3VucmVnX3N5bmNfbG9jayk7Ci0JYWRkX3dhaXRfcXVldWUoJnNsb3dfd29ya191bnJlZ193cSwgJm15c2VsZik7Ci0KLQlmb3IgKDs7KSB7Ci0JCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQotCQkvKiBmaXJzdCBvZiBhbGwsIHdlIHdhaXQgZm9yIHRoZSBsYXN0IHF1ZXVlZCBpdGVtIGluIGVhY2ggbGlzdAotCQkgKiB0byBiZSBwcm9jZXNzZWQgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHdvcmssICZ2c2xvd193b3JrX3F1ZXVlLCBsaW5rKSB7Ci0JCQlpZiAod29yay0+b3duZXIgPT0gbW9kdWxlKSB7Ci0JCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJCXNsb3dfd29ya191bnJlZ193b3JrX2l0ZW0gPSB3b3JrOwotCQkJCWdvdG8gZG9fd2FpdDsKLQkJCX0KLQkJfQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uod29yaywgJnNsb3dfd29ya19xdWV1ZSwgbGluaykgewotCQkJaWYgKHdvcmstPm93bmVyID09IG1vZHVsZSkgewotCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCQlzbG93X3dvcmtfdW5yZWdfd29ya19pdGVtID0gd29yazsKLQkJCQlnb3RvIGRvX3dhaXQ7Ci0JCQl9Ci0JCX0KLQotCQkvKiB0aGVuIHdlIHdhaXQgZm9yIHRoZSBpdGVtcyBiZWluZyBwcm9jZXNzZWQgdG8gZmluaXNoICovCi0JCXNsb3dfd29ya191bnJlZ19tb2R1bGUgPSBtb2R1bGU7Ci0JCXNtcF9tYigpOwotCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgU0xPV19XT1JLX1RIUkVBRF9MSU1JVDsgbG9vcCsrKSB7Ci0JCQlpZiAoc2xvd193b3JrX3RocmVhZF9wcm9jZXNzaW5nW2xvb3BdID09IG1vZHVsZSkKLQkJCQlnb3RvIGRvX3dhaXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7Ci0JCWJyZWFrOyAvKiBva2F5LCB3ZSdyZSBkb25lICovCi0KLQlkb193YWl0OgotCQlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKLQkJc2NoZWR1bGUoKTsKLQkJc2xvd193b3JrX3VucmVnX3dvcmtfaXRlbSA9IE5VTEw7Ci0JCXNsb3dfd29ya191bnJlZ19tb2R1bGUgPSBOVUxMOwotCX0KLQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzbG93X3dvcmtfdW5yZWdfd3EsICZteXNlbGYpOwotCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VucmVnX3N5bmNfbG9jayk7Ci0jZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KLX0KLQotLyoqCi0gKiBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyIC0gVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5Ci0gKiBAbW9kdWxlOiBUaGUgbW9kdWxlIHdob3NlIGl0ZW1zIHNob3VsZCBiZSBjbGVhcmVkCi0gKgotICogVW5yZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5LCBraWxsaW5nIGFsbCB0aGUgdGhyZWFkcyBpZiB0aGlzIHdhcyB0aGUKLSAqIGxhc3Qgb25lLgotICoKLSAqIFRoaXMgd2FpdHMgZm9yIGFsbCB0aGUgd29yayBpdGVtcyBiZWxvbmdpbmcgdG8gdGhlIG5vbWluYXRlZCBtb2R1bGUgdG8gZ28KLSAqIGF3YXkgYmVmb3JlIHByb2NlZWRpbmcuCi0gKi8KLXZvaWQgc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcihzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCi17Ci0JLyogZmlyc3Qgb2YgYWxsLCB3YWl0IGZvciBhbGwgb3V0c3RhbmRpbmcgaXRlbXMgZnJvbSB0aGUgY2FsbGluZyBtb2R1bGUKLQkgKiB0byBjb21wbGV0ZSAqLwotCWlmIChtb2R1bGUpCi0JCXNsb3dfd29ya193YWl0X2Zvcl9pdGVtcyhtb2R1bGUpOwotCi0JLyogdGhlbiB3ZSBjYW4gYWN0dWFsbHkgZ28gYWJvdXQgc2h1dHRpbmcgZG93biB0aGUgZmFjaWxpdHkgaWYgbmVlZAotCSAqIGJlICovCi0JbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7Ci0KLQlCVUdfT04oc2xvd193b3JrX3VzZXJfY291bnQgPD0gMCk7Ci0KLQlzbG93X3dvcmtfdXNlcl9jb3VudC0tOwotCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBTaHV0dGluZyBkb3duXG4iKTsKLQkJc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgPSB0cnVlOwotCQlkZWxfdGltZXJfc3luYygmc2xvd193b3JrX2N1bGxfdGltZXIpOwotCQlkZWxfdGltZXJfc3luYygmc2xvd193b3JrX29vbV90aW1lcik7Ci0JCXdha2VfdXBfYWxsKCZzbG93X3dvcmtfdGhyZWFkX3dxKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiIKLQkJICAgICAgICIgU2h1dCBkb3duIGNvbXBsZXRlXG4iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOwotfQotRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKTsKLQotLyoKLSAqIEluaXRpYWxpc2UgdGhlIHNsb3cgd29yayBmYWNpbGl0eQotICovCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3Nsb3dfd29yayh2b2lkKQotewotCXVuc2lnbmVkIG5yX2NwdXMgPSBudW1fcG9zc2libGVfY3B1cygpOwotCi0JaWYgKHNsb3dfd29ya19tYXhfdGhyZWFkcyA8IG5yX2NwdXMpCi0JCXNsb3dfd29ya19tYXhfdGhyZWFkcyA9IG5yX2NwdXM7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCWlmIChzbG93X3dvcmtfbWF4X21heF90aHJlYWRzIDwgbnJfY3B1cyAqIDIpCi0JCXNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPSBucl9jcHVzICogMjsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTE9XX1dPUktfREVCVUcKLQl7Ci0JCXN0cnVjdCBkZW50cnkgKmRiZGlyOwotCi0JCWRiZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzbG93X3dvcmsiLCBOVUxMKTsKLQkJaWYgKGRiZGlyICYmICFJU19FUlIoZGJkaXIpKQotCQkJZGVidWdmc19jcmVhdGVfZmlsZSgicnVucXVldWUiLCBTX0lGUkVHIHwgMDQwMCwgZGJkaXIsCi0JCQkJCSAgICBOVUxMLCAmc2xvd193b3JrX3J1bnF1ZXVlX2ZvcHMpOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdWJzeXNfaW5pdGNhbGwoaW5pdF9zbG93X3dvcmspOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Nsb3ctd29yay5oIGIva2VybmVsL3Nsb3ctd29yay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjllYmQxLi4wMDAwMDAwCi0tLSBhL2tlcm5lbC9zbG93LXdvcmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qIFNsb3cgd29yayBwcml2YXRlIGRlZmluaXRpb25zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNkZWZpbmUgU0xPV19XT1JLX0NVTExfVElNRU9VVCAoNSAqIEhaKQkvKiBjdWxsIHRocmVhZHMgNXMgYWZ0ZXIgcnVubmluZyBvdXQgb2YKLQkJCQkJICogdGhpbmdzIHRvIGRvICovCi0jZGVmaW5lIFNMT1dfV09SS19PT01fVElNRU9VVCAoNSAqIEhaKQkvKiBjYW4ndCBzdGFydCBuZXcgdGhyZWFkcyBmb3IgNXMgYWZ0ZXIKLQkJCQkJICogT09NICovCi0KLSNkZWZpbmUgU0xPV19XT1JLX1RIUkVBRF9MSU1JVAkyNTUJLyogYWJzIG1heGltdW0gbnVtYmVyIG9mIHNsb3ctd29yayB0aHJlYWRzICovCi0KLS8qCi0gKiBzbG93LXdvcmsuYwotICovCi0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotZXh0ZXJuIHN0cnVjdCBzbG93X3dvcmsgKnNsb3dfd29ya19leGVjc1tdOwotZXh0ZXJuIHBpZF90IHNsb3dfd29ya19waWRzW107Ci1leHRlcm4gcndsb2NrX3Qgc2xvd193b3JrX2V4ZWNzX2xvY2s7Ci0jZW5kaWYKLQotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc2xvd193b3JrX3F1ZXVlOwotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdnNsb3dfd29ya19xdWV1ZTsKLWV4dGVybiBzcGlubG9ja190IHNsb3dfd29ya19xdWV1ZV9sb2NrOwotCi0vKgotICogc2xvdy13b3JrLWRlYnVnZnMuYwotICovCi0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2xvd193b3JrX3J1bnF1ZXVlX2ZvcHM7Ci0KLWV4dGVybiB2b2lkIHNsb3dfd29ya19uZXdfdGhyZWFkX2Rlc2Moc3RydWN0IHNsb3dfd29yayAqLCBzdHJ1Y3Qgc2VxX2ZpbGUgKik7Ci0jZW5kaWYKLQotLyoKLSAqIEhlbHBlciBmdW5jdGlvbnMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19zZXRfdGhyZWFkX3BpZChpbnQgaWQsIHBpZF90IHBpZCkKLXsKLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCi0Jc2xvd193b3JrX3BpZHNbaWRdID0gcGlkOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X3dvcmtfbWFya190aW1lKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotCXdvcmstPm1hcmsgPSBDVVJSRU5UX1RJTUU7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19iZWdpbl9leGVjKGludCBpZCwgc3RydWN0IHNsb3dfd29yayAqd29yaykKLXsKLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLX0RFQlVHCi0Jc2xvd193b3JrX2V4ZWNzW2lkXSA9IHdvcms7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19lbmRfZXhlYyhpbnQgaWQsIHN0cnVjdCBzbG93X3dvcmsgKndvcmspCi17Ci0jaWZkZWYgQ09ORklHX1NMT1dfV09SS19ERUJVRwotCXdyaXRlX2xvY2soJnNsb3dfd29ya19leGVjc19sb2NrKTsKLQlzbG93X3dvcmtfZXhlY3NbaWRdID0gTlVMTDsKLQl3cml0ZV91bmxvY2soJnNsb3dfd29ya19leGVjc19sb2NrKTsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDkzZjYuLjAwMDAwMDAKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi0vKgotICogRGV0ZWN0IFNvZnQgTG9ja3VwcwotICoKLSAqIHN0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIsIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCi0gKgotICogdGhpcyBjb2RlIGRldGVjdHMgc29mdCBsb2NrdXBzOiBpbmNpZGVudHMgaW4gd2hlcmUgb24gYSBDUFUKLSAqIHRoZSBrZXJuZWwgZG9lcyBub3QgcmVzY2hlZHVsZSBmb3IgMTAgc2Vjb25kcyBvciBtb3JlLgotICovCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9ubWkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotCi0jaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHJpbnRfbG9jayk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzb2Z0bG9ja3VwX3RvdWNoX3RzKTsgLyogdG91Y2ggdGltZXN0YW1wICovCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgc29mdGxvY2t1cF9wcmludF90cyk7IC8qIHByaW50IHRpbWVzdGFtcCAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzb2Z0bG9ja3VwX3dhdGNoZG9nKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCBzb2Z0bG9ja190b3VjaF9zeW5jKTsKLQotc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGRpZF9wYW5pYzsKLWludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfdGhyZXNoID0gNjA7Ci0KLS8qCi0gKiBTaG91bGQgd2UgcGFuaWMgKGFuZCByZWJvb3QsIGlmIHBhbmljX3RpbWVvdXQ9IGlzIHNldCkgd2hlbiBhCi0gKiBzb2Z0LWxvY2t1cCBvY2N1cnM6Ci0gKi8KLXVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHNvZnRsb2NrdXBfcGFuaWMgPQotCQkJCUNPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRTsKLQotc3RhdGljIGludCBfX2luaXQgc29mdGxvY2t1cF9wYW5pY19zZXR1cChjaGFyICpzdHIpCi17Ci0Jc29mdGxvY2t1cF9wYW5pYyA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7Ci0KLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoInNvZnRsb2NrdXBfcGFuaWM9Iiwgc29mdGxvY2t1cF9wYW5pY19zZXR1cCk7Ci0KLXN0YXRpYyBpbnQKLXNvZnRsb2NrX3BhbmljKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQotewotCWRpZF9wYW5pYyA9IDE7Ci0KLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGFuaWNfYmxvY2sgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBzb2Z0bG9ja19wYW5pYywKLX07Ci0KLS8qCi0gKiBSZXR1cm5zIHNlY29uZHMsIGFwcHJveGltYXRlbHkuICBXZSBkb24ndCBuZWVkIG5hbm9zZWNvbmQKLSAqIHJlc29sdXRpb24sIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHdhc3RlIHRpbWUgd2l0aCBhIGJpZyBkaXZpZGUgd2hlbgotICogMl4zMG5zID09IDEuMDc0cy4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3RpbWVzdGFtcChpbnQgdGhpc19jcHUpCi17Ci0JcmV0dXJuIGNwdV9jbG9jayh0aGlzX2NwdSkgPj4gMzBMTDsgIC8qIDJeMzAgfj0gMTBeOSAqLwotfQotCi1zdGF0aWMgdm9pZCBfX3RvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCkKLXsKLQlpbnQgdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JX19yYXdfZ2V0X2NwdV92YXIoc29mdGxvY2t1cF90b3VjaF90cykgPSBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KTsKLX0KLQotdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKHZvaWQpCi17Ci0JX19yYXdfZ2V0X2NwdV92YXIoc29mdGxvY2t1cF90b3VjaF90cykgPSAwOwotfQotRVhQT1JUX1NZTUJPTCh0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKTsKLQotdm9pZCB0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nX3N5bmModm9pZCkKLXsKLQlfX3Jhd19nZXRfY3B1X3Zhcihzb2Z0bG9ja190b3VjaF9zeW5jKSA9IHRydWU7Ci0JX19yYXdfZ2V0X2NwdV92YXIoc29mdGxvY2t1cF90b3VjaF90cykgPSAwOwotfQotCi12b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQotewotCWludCBjcHU7Ci0KLQkvKiBDYXVzZSBlYWNoIENQVSB0byByZS11cGRhdGUgaXRzIHRpbWVzdGFtcCByYXRoZXIgdGhhbiBjb21wbGFpbiAqLwotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlwZXJfY3B1KHNvZnRsb2NrdXBfdG91Y2hfdHMsIGNwdSkgPSAwOwotfQotRVhQT1JUX1NZTUJPTCh0b3VjaF9hbGxfc29mdGxvY2t1cF93YXRjaGRvZ3MpOwotCi1pbnQgcHJvY19kb3NvZnRsb2NrdXBfdGhyZXNoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCi0JCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsCi0JCQkgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQotewotCXRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncygpOwotCXJldHVybiBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGJ1ZmZlciwgbGVucCwgcHBvcyk7Ci19Ci0KLS8qCi0gKiBUaGlzIGNhbGxiYWNrIHJ1bnMgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0LCBhbmQgY2hlY2tzCi0gKiB3aGV0aGVyIHRoZSB3YXRjaGRvZyB0aHJlYWQgaGFzIGh1bmcgb3Igbm90OgotICovCi12b2lkIHNvZnRsb2NrdXBfdGljayh2b2lkKQotewotCWludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQl1bnNpZ25lZCBsb25nIHRvdWNoX3RzID0gcGVyX2NwdShzb2Z0bG9ja3VwX3RvdWNoX3RzLCB0aGlzX2NwdSk7Ci0JdW5zaWduZWQgbG9uZyBwcmludF90czsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGdldF9pcnFfcmVncygpOwotCXVuc2lnbmVkIGxvbmcgbm93OwotCi0JLyogSXMgZGV0ZWN0aW9uIHN3aXRjaGVkIG9mZj8gKi8KLQlpZiAoIXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgdGhpc19jcHUpIHx8IHNvZnRsb2NrdXBfdGhyZXNoIDw9IDApIHsKLQkJLyogQmUgc3VyZSB3ZSBkb24ndCBmYWxzZSB0cmlnZ2VyIGlmIHN3aXRjaGVkIGJhY2sgb24gKi8KLQkJaWYgKHRvdWNoX3RzKQotCQkJcGVyX2NwdShzb2Z0bG9ja3VwX3RvdWNoX3RzLCB0aGlzX2NwdSkgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHRvdWNoX3RzID09IDApIHsKLQkJaWYgKHVubGlrZWx5KHBlcl9jcHUoc29mdGxvY2tfdG91Y2hfc3luYywgdGhpc19jcHUpKSkgewotCQkJLyoKLQkJCSAqIElmIHRoZSB0aW1lIHN0YW1wIHdhcyB0b3VjaGVkIGF0b21pY2FsbHkKLQkJCSAqIG1ha2Ugc3VyZSB0aGUgc2NoZWR1bGVyIHRpY2sgaXMgdXAgdG8gZGF0ZS4KLQkJCSAqLwotCQkJcGVyX2NwdShzb2Z0bG9ja190b3VjaF9zeW5jLCB0aGlzX2NwdSkgPSBmYWxzZTsKLQkJCXNjaGVkX2Nsb2NrX3RpY2soKTsKLQkJfQotCQlfX3RvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaW50X3RzID0gcGVyX2NwdShzb2Z0bG9ja3VwX3ByaW50X3RzLCB0aGlzX2NwdSk7Ci0KLQkvKiByZXBvcnQgYXQgbW9zdCBvbmNlIGEgc2Vjb25kICovCi0JaWYgKHByaW50X3RzID09IHRvdWNoX3RzIHx8IGRpZF9wYW5pYykKLQkJcmV0dXJuOwotCi0JLyogZG8gbm90IHByaW50IGR1cmluZyBlYXJseSBib290dXA6ICovCi0JaWYgKHVubGlrZWx5KHN5c3RlbV9zdGF0ZSAhPSBTWVNURU1fUlVOTklORykpIHsKLQkJX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlub3cgPSBnZXRfdGltZXN0YW1wKHRoaXNfY3B1KTsKLQotCS8qCi0JICogV2FrZSB1cCB0aGUgaGlnaC1wcmlvIHdhdGNoZG9nIHRhc2sgdHdpY2UgcGVyCi0JICogdGhyZXNob2xkIHRpbWVzcGFuLgotCSAqLwotCWlmICh0aW1lX2FmdGVyKG5vdyAtIHNvZnRsb2NrdXBfdGhyZXNoLzIsIHRvdWNoX3RzKSkKLQkJd2FrZV91cF9wcm9jZXNzKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgdGhpc19jcHUpKTsKLQotCS8qIFdhcm4gYWJvdXQgdW5yZWFzb25hYmxlIGRlbGF5czogKi8KLQlpZiAodGltZV9iZWZvcmVfZXEobm93IC0gc29mdGxvY2t1cF90aHJlc2gsIHRvdWNoX3RzKSkKLQkJcmV0dXJuOwotCi0JcGVyX2NwdShzb2Z0bG9ja3VwX3ByaW50X3RzLCB0aGlzX2NwdSkgPSB0b3VjaF90czsKLQotCXNwaW5fbG9jaygmcHJpbnRfbG9jayk7Ci0JcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNvZnQgbG9ja3VwIC0gQ1BVIyVkIHN0dWNrIGZvciAlbHVzISBbJXM6JWRdXG4iLAotCQkJdGhpc19jcHUsIG5vdyAtIHRvdWNoX3RzLAotCQkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwotCXByaW50X21vZHVsZXMoKTsKLQlwcmludF9pcnF0cmFjZV9ldmVudHMoY3VycmVudCk7Ci0JaWYgKHJlZ3MpCi0JCXNob3dfcmVncyhyZWdzKTsKLQllbHNlCi0JCWR1bXBfc3RhY2soKTsKLQlzcGluX3VubG9jaygmcHJpbnRfbG9jayk7Ci0KLQlpZiAoc29mdGxvY2t1cF9wYW5pYykKLQkJcGFuaWMoInNvZnRsb2NrdXA6IGh1bmcgdGFza3MiKTsKLX0KLQotLyoKLSAqIFRoZSB3YXRjaGRvZyB0aHJlYWQgLSBydW5zIGV2ZXJ5IHNlY29uZCBhbmQgdG91Y2hlcyB0aGUgdGltZXN0YW1wLgotICovCi1zdGF0aWMgaW50IHdhdGNoZG9nKHZvaWQgKl9fYmluZF9jcHUpCi17Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07Ci0KLQlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKLQotCS8qIGluaXRpYWxpemUgdGltZXN0YW1wICovCi0JX190b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCS8qCi0JICogUnVuIGJyaWVmbHkgb25jZSBwZXIgc2Vjb25kIHRvIHJlc2V0IHRoZSBzb2Z0bG9ja3VwIHRpbWVzdGFtcC4KLQkgKiBJZiB0aGlzIGdldHMgZGVsYXllZCBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMgdGhlbiB0aGUKLQkgKiBkZWJ1Zy1wcmludG91dCB0cmlnZ2VycyBpbiBzb2Z0bG9ja3VwX3RpY2soKS4KLQkgKi8KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewotCQlfX3RvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKLQkJc2NoZWR1bGUoKTsKLQotCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQotCQkJYnJlYWs7Ci0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQl9Ci0JX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDcmVhdGUvZGVzdHJveSB3YXRjaGRvZyB0aHJlYWRzIGFzIENQVXMgY29tZSBhbmQgZ286Ci0gKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0Ci1jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQotewotCWludCBob3RjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJQlVHX09OKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSk7Ci0JCXAgPSBrdGhyZWFkX2NyZWF0ZSh3YXRjaGRvZywgaGNwdSwgIndhdGNoZG9nLyVkIiwgaG90Y3B1KTsKLQkJaWYgKElTX0VSUihwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBob3RjcHUpOwotCQkJcmV0dXJuIE5PVElGWV9CQUQ7Ci0JCX0KLQkJcGVyX2NwdShzb2Z0bG9ja3VwX3RvdWNoX3RzLCBob3RjcHUpID0gMDsKLQkJcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBob3RjcHUpID0gcDsKLQkJa3RocmVhZF9iaW5kKHAsIGhvdGNwdSk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX09OTElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQl3YWtlX3VwX3Byb2Nlc3MocGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBob3RjcHUpKTsKLQkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6Ci0JY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgotCQlpZiAoIXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSkKLQkJCWJyZWFrOwotCQkvKiBVbmJpbmQgc28gaXQgY2FuIHJ1bi4gIEZhbGwgdGhydS4gKi8KLQkJa3RocmVhZF9iaW5kKHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KSwKLQkJCSAgICAgY3B1bWFza19hbnkoY3B1X29ubGluZV9tYXNrKSk7Ci0JY2FzZSBDUFVfREVBRDoKLQljYXNlIENQVV9ERUFEX0ZST1pFTjoKLQkJcCA9IHBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgaG90Y3B1KTsKLQkJcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBob3RjcHUpID0gTlVMTDsKLQkJa3RocmVhZF9zdG9wKHApOwotCQlicmVhazsKLSNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KLQl9Ci0JcmV0dXJuIE5PVElGWV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNwdV9uZmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBjcHVfY2FsbGJhY2sKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBub3NvZnRsb2NrdXA7Ci0KLXN0YXRpYyBpbnQgX19pbml0IG5vc29mdGxvY2t1cF9zZXR1cChjaGFyICpzdHIpCi17Ci0Jbm9zb2Z0bG9ja3VwID0gMTsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNwYXduX3NvZnRsb2NrdXBfdGFzayh2b2lkKQotewotCXZvaWQgKmNwdSA9ICh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBlcnI7Ci0KLQlpZiAobm9zb2Z0bG9ja3VwKQotCQlyZXR1cm4gMDsKLQotCWVyciA9IGNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7Ci0JaWYgKGVyciA9PSBOT1RJRllfQkFEKSB7Ci0JCUJVRygpOwotCQlyZXR1cm4gMTsKLQl9Ci0JY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfT05MSU5FLCBjcHUpOwotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7Ci0KLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsICZwYW5pY19ibG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X2luaXRjYWxsKHNwYXduX3NvZnRsb2NrdXBfdGFzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggNzBmOGQ5MC4uNDM3MmNjYiAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMzUsOSArMzUsOSBAQAogLyogdGhlIGFjdHVhbCBzdG9wcGVyLCBvbmUgcGVyIGV2ZXJ5IHBvc3NpYmxlIGNwdSwgZW5hYmxlZCBvbiBvbmxpbmUgY3B1cyAqLwogc3RydWN0IGNwdV9zdG9wcGVyIHsKIAlzcGlubG9ja190CQlsb2NrOworCWJvb2wJCQllbmFibGVkOwkvKiBpcyB0aGlzIHN0b3BwZXIgZW5hYmxlZD8gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtzOwkJLyogbGlzdCBvZiBwZW5kaW5nIHdvcmtzICovCiAJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CS8qIHN0b3BwZXIgdGhyZWFkICovCi0JYm9vbAkJCWVuYWJsZWQ7CS8qIGlzIHRoaXMgc3RvcHBlciBlbmFibGVkPyAqLwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfc3RvcHBlciwgY3B1X3N0b3BwZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGU4M2RkYmIuLmU5YWQ0NDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTEyMzYsMTUgKzEyMzYsMTQgQEAKIAogU1lTQ0FMTF9ERUZJTkUyKGdldHJsaW1pdCwgdW5zaWduZWQgaW50LCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCBfX3VzZXIgKiwgcmxpbSkKIHsKLQlpZiAocmVzb3VyY2UgPj0gUkxJTV9OTElNSVRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIHsKLQkJc3RydWN0IHJsaW1pdCB2YWx1ZTsKLQkJdGFza19sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7Ci0JCXZhbHVlID0gY3VycmVudC0+c2lnbmFsLT5ybGltW3Jlc291cmNlXTsKLQkJdGFza191bmxvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihybGltLCAmdmFsdWUsIHNpemVvZigqcmxpbSkpID8gLUVGQVVMVCA6IDA7Ci0JfQorCXN0cnVjdCBybGltaXQgdmFsdWU7CisJaW50IHJldDsKKworCXJldCA9IGRvX3BybGltaXQoY3VycmVudCwgcmVzb3VyY2UsIE5VTEwsICZ2YWx1ZSk7CisJaWYgKCFyZXQpCisJCXJldCA9IGNvcHlfdG9fdXNlcihybGltLCAmdmFsdWUsIHNpemVvZigqcmxpbSkpID8gLUVGQVVMVCA6IDA7CisKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKQEAgLTEyNzIsNDQgKzEyNzEsODkgQEAKIAogI2VuZGlmCiAKLVNZU0NBTExfREVGSU5FMihzZXRybGltaXQsIHVuc2lnbmVkIGludCwgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgX191c2VyICosIHJsaW0pCitzdGF0aWMgaW5saW5lIGJvb2wgcmxpbTY0X2lzX2luZmluaXR5KF9fdTY0IHJsaW02NCkKIHsKLQlzdHJ1Y3QgcmxpbWl0IG5ld19ybGltLCAqb2xkX3JsaW07Ci0JaW50IHJldHZhbDsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwlyZXR1cm4gcmxpbTY0ID49IFVMT05HX01BWDsKKyNlbHNlCisJcmV0dXJuIHJsaW02NCA9PSBSTElNNjRfSU5GSU5JVFk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcmxpbV90b19ybGltNjQoY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxpbSwgc3RydWN0IHJsaW1pdDY0ICpybGltNjQpCit7CisJaWYgKHJsaW0tPnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJCXJsaW02NC0+cmxpbV9jdXIgPSBSTElNNjRfSU5GSU5JVFk7CisJZWxzZQorCQlybGltNjQtPnJsaW1fY3VyID0gcmxpbS0+cmxpbV9jdXI7CisJaWYgKHJsaW0tPnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkpCisJCXJsaW02NC0+cmxpbV9tYXggPSBSTElNNjRfSU5GSU5JVFk7CisJZWxzZQorCQlybGltNjQtPnJsaW1fbWF4ID0gcmxpbS0+cmxpbV9tYXg7Cit9CisKK3N0YXRpYyB2b2lkIHJsaW02NF90b19ybGltKGNvbnN0IHN0cnVjdCBybGltaXQ2NCAqcmxpbTY0LCBzdHJ1Y3QgcmxpbWl0ICpybGltKQoreworCWlmIChybGltNjRfaXNfaW5maW5pdHkocmxpbTY0LT5ybGltX2N1cikpCisJCXJsaW0tPnJsaW1fY3VyID0gUkxJTV9JTkZJTklUWTsKKwllbHNlCisJCXJsaW0tPnJsaW1fY3VyID0gKHVuc2lnbmVkIGxvbmcpcmxpbTY0LT5ybGltX2N1cjsKKwlpZiAocmxpbTY0X2lzX2luZmluaXR5KHJsaW02NC0+cmxpbV9tYXgpKQorCQlybGltLT5ybGltX21heCA9IFJMSU1fSU5GSU5JVFk7CisJZWxzZQorCQlybGltLT5ybGltX21heCA9ICh1bnNpZ25lZCBsb25nKXJsaW02NC0+cmxpbV9tYXg7Cit9CisKKy8qIG1ha2Ugc3VyZSB5b3UgYXJlIGFsbG93ZWQgdG8gY2hhbmdlIEB0c2sgbGltaXRzIGJlZm9yZSBjYWxsaW5nIHRoaXMgKi8KK2ludCBkb19wcmxpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCXN0cnVjdCBybGltaXQgKm5ld19ybGltLCBzdHJ1Y3QgcmxpbWl0ICpvbGRfcmxpbSkKK3sKKwlzdHJ1Y3QgcmxpbWl0ICpybGltOworCWludCByZXR2YWwgPSAwOwogCiAJaWYgKHJlc291cmNlID49IFJMSU1fTkxJTUlUUykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfcmxpbSwgcmxpbSwgc2l6ZW9mKCpybGltKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChuZXdfcmxpbS5ybGltX2N1ciA+IG5ld19ybGltLnJsaW1fbWF4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlvbGRfcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbSArIHJlc291cmNlOwotCWlmICgobmV3X3JsaW0ucmxpbV9tYXggPiBvbGRfcmxpbS0+cmxpbV9tYXgpICYmCi0JICAgICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQotCQlyZXR1cm4gLUVQRVJNOwotCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfTk9GSUxFICYmIG5ld19ybGltLnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgJm5ld19ybGltKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JaWYgKHJlc291cmNlID09IFJMSU1JVF9DUFUgJiYgbmV3X3JsaW0ucmxpbV9jdXIgPT0gMCkgewotCQkvKgotCQkgKiBUaGUgY2FsbGVyIGlzIGFza2luZyBmb3IgYW4gaW1tZWRpYXRlIFJMSU1JVF9DUFUKLQkJICogZXhwaXJ5LiAgQnV0IHdlIHVzZSB0aGUgemVybyB2YWx1ZSB0byBtZWFuICJpdCB3YXMKLQkJICogbmV2ZXIgc2V0Ii4gIFNvIGxldCdzIGNoZWF0IGFuZCBtYWtlIGl0IG9uZSBzZWNvbmQKLQkJICogaW5zdGVhZAotCQkgKi8KLQkJbmV3X3JsaW0ucmxpbV9jdXIgPSAxOworCWlmIChuZXdfcmxpbSkgeworCQlpZiAobmV3X3JsaW0tPnJsaW1fY3VyID4gbmV3X3JsaW0tPnJsaW1fbWF4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfTk9GSUxFICYmCisJCQkJbmV3X3JsaW0tPnJsaW1fbWF4ID4gc3lzY3RsX25yX29wZW4pCisJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCXRhc2tfbG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwotCSpvbGRfcmxpbSA9IG5ld19ybGltOwotCXRhc2tfdW5sb2NrKGN1cnJlbnQtPmdyb3VwX2xlYWRlcik7Ci0KLQlpZiAocmVzb3VyY2UgIT0gUkxJTUlUX0NQVSkKKwkvKiBwcm90ZWN0IHRzay0+c2lnbmFsIGFuZCB0c2stPnNpZ2hhbmQgZnJvbSBkaXNhcHBlYXJpbmcgKi8KKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCWlmICghdHNrLT5zaWdoYW5kKSB7CisJCXJldHZhbCA9IC1FU1JDSDsKIAkJZ290byBvdXQ7CisJfQorCisJcmxpbSA9IHRzay0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2U7CisJdGFza19sb2NrKHRzay0+Z3JvdXBfbGVhZGVyKTsKKwlpZiAobmV3X3JsaW0pIHsKKwkJaWYgKG5ld19ybGltLT5ybGltX21heCA+IHJsaW0tPnJsaW1fbWF4ICYmCisJCQkJIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCisJCQlyZXR2YWwgPSAtRVBFUk07CisJCWlmICghcmV0dmFsKQorCQkJcmV0dmFsID0gc2VjdXJpdHlfdGFza19zZXRybGltaXQodHNrLT5ncm91cF9sZWFkZXIsCisJCQkJCXJlc291cmNlLCBuZXdfcmxpbSk7CisJCWlmIChyZXNvdXJjZSA9PSBSTElNSVRfQ1BVICYmIG5ld19ybGltLT5ybGltX2N1ciA9PSAwKSB7CisJCQkvKgorCQkJICogVGhlIGNhbGxlciBpcyBhc2tpbmcgZm9yIGFuIGltbWVkaWF0ZSBSTElNSVRfQ1BVCisJCQkgKiBleHBpcnkuICBCdXQgd2UgdXNlIHRoZSB6ZXJvIHZhbHVlIHRvIG1lYW4gIml0IHdhcworCQkJICogbmV2ZXIgc2V0Ii4gIFNvIGxldCdzIGNoZWF0IGFuZCBtYWtlIGl0IG9uZSBzZWNvbmQKKwkJCSAqIGluc3RlYWQKKwkJCSAqLworCQkJbmV3X3JsaW0tPnJsaW1fY3VyID0gMTsKKwkJfQorCX0KKwlpZiAoIXJldHZhbCkgeworCQlpZiAob2xkX3JsaW0pCisJCQkqb2xkX3JsaW0gPSAqcmxpbTsKKwkJaWYgKG5ld19ybGltKQorCQkJKnJsaW0gPSAqbmV3X3JsaW07CisJfQorCXRhc2tfdW5sb2NrKHRzay0+Z3JvdXBfbGVhZGVyKTsKIAogCS8qCiAJICogUkxJTUlUX0NQVSBoYW5kbGluZy4gICBOb3RlIHRoYXQgdGhlIGtlcm5lbCBmYWlscyB0byByZXR1cm4gYW4gZXJyb3IKQEAgLTEzMTcsMTQgKzEzNjEsODQgQEAKIAkgKiB2ZXJ5IGxvbmctc3RhbmRpbmcgZXJyb3IsIGFuZCBmaXhpbmcgaXQgbm93IHJpc2tzIGJyZWFrYWdlIG9mCiAJICogYXBwbGljYXRpb25zLCBzbyB3ZSBsaXZlIHdpdGggaXQKIAkgKi8KLQlpZiAobmV3X3JsaW0ucmxpbV9jdXIgPT0gUkxJTV9JTkZJTklUWSkKLQkJZ290byBvdXQ7Ci0KLQl1cGRhdGVfcmxpbWl0X2NwdShuZXdfcmxpbS5ybGltX2N1cik7CisJIGlmICghcmV0dmFsICYmIG5ld19ybGltICYmIHJlc291cmNlID09IFJMSU1JVF9DUFUgJiYKKwkJCSBuZXdfcmxpbS0+cmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkKKwkJdXBkYXRlX3JsaW1pdF9jcHUodHNrLCBuZXdfcmxpbS0+cmxpbV9jdXIpOwogb3V0OgorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiByY3UgbG9jayBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcHJsaW1pdF9wZXJtaXNzaW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpLCAqdGNyZWQ7CisKKwl0Y3JlZCA9IF9fdGFza19jcmVkKHRhc2spOworCWlmICgoY3JlZC0+dWlkICE9IHRjcmVkLT5ldWlkIHx8CisJICAgICBjcmVkLT51aWQgIT0gdGNyZWQtPnN1aWQgfHwKKwkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+dWlkICB8fAorCSAgICAgY3JlZC0+Z2lkICE9IHRjcmVkLT5lZ2lkIHx8CisJICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPnNnaWQgfHwKKwkgICAgIGNyZWQtPmdpZCAhPSB0Y3JlZC0+Z2lkKSAmJgorCSAgICAgIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAorU1lTQ0FMTF9ERUZJTkU0KHBybGltaXQ2NCwgcGlkX3QsIHBpZCwgdW5zaWduZWQgaW50LCByZXNvdXJjZSwKKwkJY29uc3Qgc3RydWN0IHJsaW1pdDY0IF9fdXNlciAqLCBuZXdfcmxpbSwKKwkJc3RydWN0IHJsaW1pdDY0IF9fdXNlciAqLCBvbGRfcmxpbSkKK3sKKwlzdHJ1Y3QgcmxpbWl0NjQgb2xkNjQsIG5ldzY0OworCXN0cnVjdCBybGltaXQgb2xkLCBuZXc7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJaW50IHJldDsKKworCWlmIChuZXdfcmxpbSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJm5ldzY0LCBuZXdfcmxpbSwgc2l6ZW9mKG5ldzY0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmxpbTY0X3RvX3JsaW0oJm5ldzY0LCAmbmV3KTsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJdHNrID0gcGlkID8gZmluZF90YXNrX2J5X3ZwaWQocGlkKSA6IGN1cnJlbnQ7CisJaWYgKCF0c2spIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRVNSQ0g7CisJfQorCXJldCA9IGNoZWNrX3BybGltaXRfcGVybWlzc2lvbih0c2spOworCWlmIChyZXQpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CisJfQorCWdldF90YXNrX3N0cnVjdCh0c2spOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0ID0gZG9fcHJsaW1pdCh0c2ssIHJlc291cmNlLCBuZXdfcmxpbSA/ICZuZXcgOiBOVUxMLAorCQkJb2xkX3JsaW0gPyAmb2xkIDogTlVMTCk7CisKKwlpZiAoIXJldCAmJiBvbGRfcmxpbSkgeworCQlybGltX3RvX3JsaW02NCgmb2xkLCAmb2xkNjQpOworCQlpZiAoY29weV90b191c2VyKG9sZF9ybGltLCAmb2xkNjQsIHNpemVvZihvbGQ2NCkpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwl9CisKKwlwdXRfdGFza19zdHJ1Y3QodHNrKTsKKwlyZXR1cm4gcmV0OworfQorCitTWVNDQUxMX0RFRklORTIoc2V0cmxpbWl0LCB1bnNpZ25lZCBpbnQsIHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqLCBybGltKQoreworCXN0cnVjdCBybGltaXQgbmV3X3JsaW07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19ybGltLCBybGltLCBzaXplb2YoKnJsaW0pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGRvX3BybGltaXQoY3VycmVudCwgcmVzb3VyY2UsICZuZXdfcmxpbSwgTlVMTCk7Cit9CisKIC8qCiAgKiBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHB1dCBzdHJ1Y3QgcnVzYWdlIGluIHRoZSB0YXNrX3N0cnVjdCwKICAqIGV4Y2VwdCB0aGF0IHdvdWxkIG1ha2UgdGhlIHRhc2tfc3RydWN0IGJlICpyZWFsbHkgYmlnKi4gIEFmdGVyCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzX25pLmMgYi9rZXJuZWwvc3lzX25pLmMKaW5kZXggNzBmMmVhNy4uYmFkMzY5ZSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTgxLDMgKzE4MSw3IEBACiAKIC8qIHBlcmZvcm1hbmNlIGNvdW50ZXJzOiAqLwogY29uZF9zeXNjYWxsKHN5c19wZXJmX2V2ZW50X29wZW4pOworCisvKiBmYW5vdGlmeSEgKi8KK2NvbmRfc3lzY2FsbChzeXNfZmFub3RpZnlfaW5pdCk7Citjb25kX3N5c2NhbGwoc3lzX2Zhbm90aWZ5X21hcmspOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGQyNGY3NjEuLmNhMzhlOGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTQ0LDE2ICs0NCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvZG5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGlwZV9mc19pLmg+CisjaW5jbHVkZSA8bGludXgvb29tLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTc2LDE1ICs3NywxNiBAQAogI2luY2x1ZGUgPHNjc2kvc2cuaD4KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgorI2luY2x1ZGUgPGxpbnV4L25taS5oPgorI2VuZGlmCisKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAogLyogRXh0ZXJuYWwgdmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLwogZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CiBleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvOwotZXh0ZXJuIGludCBzeXNjdGxfcGFuaWNfb25fb29tOwotZXh0ZXJuIGludCBzeXNjdGxfb29tX2tpbGxfYWxsb2NhdGluZ190YXNrOwotZXh0ZXJuIGludCBzeXNjdGxfb29tX2R1bXBfdGFza3M7CiBleHRlcm4gaW50IG1heF90aHJlYWRzOwogZXh0ZXJuIGludCBjb3JlX3VzZXNfcGlkOwogZXh0ZXJuIGludCBzdWlkX2R1bXBhYmxlOwpAQCAtMTA2LDcgKzEwOCw3IEBACiAjZW5kaWYKIAogLyogQ29uc3RhbnRzIHVzZWQgZm9yIG1pbmltdW0gYW5kICBtYXhpbXVtICovCi0jaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCisjaWZkZWYgQ09ORklHX0xPQ0tVUF9ERVRFQ1RPUgogc3RhdGljIGludCBzaXh0eSA9IDYwOwogc3RhdGljIGludCBuZWdfb25lID0gLTE7CiAjZW5kaWYKQEAgLTEzMCw2ICsxMzIsOSBAQAogCiBzdGF0aWMgaW50IG5ncm91cHNfbWF4ID0gTkdST1VQU19NQVg7CiAKKyNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NQQVJDCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2VuZGlmCkBAIC0yMDYsOSArMjExLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRlYnVnX3RhYmxlW107CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkZXZfdGFibGVbXTsKIGV4dGVybiBzdHJ1Y3QgY3RsX3RhYmxlIHJhbmRvbV90YWJsZVtdOwotI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKLWV4dGVybiBzdHJ1Y3QgY3RsX3RhYmxlIGlub3RpZnlfdGFibGVbXTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19FUE9MTAogZXh0ZXJuIHN0cnVjdCBjdGxfdGFibGUgZXBvbGxfdGFibGVbXTsKICNlbmRpZgpAQCAtNTYyLDcgKzU2NCw3IEBACiAJCS5leHRyYTIJCT0gJm9uZSwKIAl9LAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfSE9UUExVRykgJiYgZGVmaW5lZChDT05GSUdfTkVUKQorI2lmZGVmIENPTkZJR19IT1RQTFVHCiAJewogCQkucHJvY25hbWUJPSAiaG90cGx1ZyIsCiAJCS5kYXRhCQk9ICZ1ZXZlbnRfaGVscGVyLApAQCAtNzEwLDcgKzcxMiwzNCBAQAogCQkubW9kZQkJPSAwNDQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19YODYpCisjaWYgZGVmaW5lZChDT05GSUdfTE9DS1VQX0RFVEVDVE9SKQorCXsKKwkJLnByb2NuYW1lICAgICAgID0gIndhdGNoZG9nIiwKKwkJLmRhdGEgICAgICAgICAgID0gJndhdGNoZG9nX2VuYWJsZWQsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZiAoaW50KSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb3dhdGNoZG9nX2VuYWJsZWQsCisJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJ3YXRjaGRvZ190aHJlc2giLAorCQkuZGF0YQkJPSAmc29mdGxvY2t1cF90aHJlc2gsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2Rvd2F0Y2hkb2dfdGhyZXNoLAorCQkuZXh0cmExCQk9ICZuZWdfb25lLAorCQkuZXh0cmEyCQk9ICZzaXh0eSwKKwl9LAorCXsKKwkJLnByb2NuYW1lCT0gInNvZnRsb2NrdXBfcGFuaWMiLAorCQkuZGF0YQkJPSAmc29mdGxvY2t1cF9wYW5pYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCQkuZXh0cmEyCQk9ICZvbmUsCisJfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiBkZWZpbmVkKENPTkZJR19YODYpICYmICFkZWZpbmVkKENPTkZJR19MT0NLVVBfREVURUNUT1IpCiAJewogCQkucHJvY25hbWUgICAgICAgPSAidW5rbm93bl9ubWlfcGFuaWMiLAogCQkuZGF0YSAgICAgICAgICAgPSAmdW5rbm93bl9ubWlfcGFuaWMsCkBAIC04MTMsMjYgKzg0Miw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAKLQl7Ci0JCS5wcm9jbmFtZQk9ICJzb2Z0bG9ja3VwX3BhbmljIiwKLQkJLmRhdGEJCT0gJnNvZnRsb2NrdXBfcGFuaWMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21pbm1heCwKLQkJLmV4dHJhMQkJPSAmemVybywKLQkJLmV4dHJhMgkJPSAmb25lLAotCX0sCi0JewotCQkucHJvY25hbWUJPSAic29mdGxvY2t1cF90aHJlc2giLAotCQkuZGF0YQkJPSAmc29mdGxvY2t1cF90aHJlc2gsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2Rvc29mdGxvY2t1cF90aHJlc2gsCi0JCS5leHRyYTEJCT0gJm5lZ19vbmUsCi0JCS5leHRyYTIJCT0gJnNpeHR5LAotCX0sCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfREVURUNUX0hVTkdfVEFTSwogCXsKIAkJLnByb2NuYW1lCT0gImh1bmdfdGFza19wYW5pYyIsCkBAIC05MDYsMTMgKzkxNSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfU0xPV19XT1JLCi0JewotCQkucHJvY25hbWUJPSAic2xvdy13b3JrIiwKLQkJLm1vZGUJCT0gMDU1NSwKLQkJLmNoaWxkCQk9IHNsb3dfd29ya19zeXNjdGxzLAotCX0sCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKIAl7CiAJCS5wcm9jbmFtZQk9ICJwZXJmX2V2ZW50X3BhcmFub2lkIiwKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDg0OGIxYzIuLmJhOWIzMzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtMzAwLDIyICszMDAsNiBAQAogfQogRVhQT1JUX1NZTUJPTCh0aW1lc3BlY190cnVuYyk7CiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQotLyoKLSAqIFNpbXVsYXRlIGdldHRpbWVvZmRheSB1c2luZyBkb19nZXR0aW1lb2ZkYXkgd2hpY2ggb25seSBhbGxvd3MgYSB0aW1ldmFsCi0gKiBhbmQgdGhlcmVmb3JlIG9ubHkgeWllbGRzIHVzZWMgYWNjdXJhY3kKLSAqLwotdm9pZCBnZXRuc3RpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQotewotCXN0cnVjdCB0aW1ldmFsIHg7Ci0KLQlkb19nZXR0aW1lb2ZkYXkoJngpOwotCXR2LT50dl9zZWMgPSB4LnR2X3NlYzsKLQl0di0+dHZfbnNlYyA9IHgudHZfdXNlYyAqIE5TRUNfUEVSX1VTRUM7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChnZXRuc3RpbWVvZmRheSk7Ci0jZW5kaWYKLQogLyogQ29udmVydHMgR3JlZ29yaWFuIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSAxOTcwLTAxLTAxIDAwOjAwOjAwLgogICogQXNzdW1lcyBpbnB1dCBpbiBub3JtYWwgZGF0ZSBmb3JtYXQsIGkuZS4gMTk4MC0xMi0zMSAyMzo1OTo1OQogICogPT4geWVhcj0xOTgwLCBtb249MTIsIGRheT0zMSwgaG91cj0yMywgbWluPTU5LCBzZWM9NTkuCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9LY29uZmlnIGIva2VybmVsL3RpbWUvS2NvbmZpZwppbmRleCA5NWVkNDI5Li5mMDZhOGEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9LY29uZmlnCisrKyBiL2tlcm5lbC90aW1lL0tjb25maWcKQEAgLTYsNyArNiw3IEBACiAKIGNvbmZpZyBOT19IWgogCWJvb2wgIlRpY2tsZXNzIFN5c3RlbSAoRHluYW1pYyBUaWNrcykiCi0JZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUgJiYgR0VORVJJQ19DTE9DS0VWRU5UUworCWRlcGVuZHMgb24gIUFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUICYmIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlzZWxlY3QgVElDS19PTkVTSE9UCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRpY2tsZXNzIHN5c3RlbTogdGltZXIgaW50ZXJydXB0cyB3aWxsCkBAIC0xNSw3ICsxNSw3IEBACiAKIGNvbmZpZyBISUdIX1JFU19USU1FUlMKIAlib29sICJIaWdoIFJlc29sdXRpb24gVGltZXIgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTCisJZGVwZW5kcyBvbiAhQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQgJiYgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBUSUNLX09ORVNIT1QKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBzdXBwb3J0LiBJZiB5b3VyCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCBmMDhlOTljLi5jMThkN2VmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTUzMSw3ICs1MzEsNyBAQAogCXJldHVybiBtYXhfbnNlY3MgLSAobWF4X25zZWNzID4+IDUpOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQorI2lmbmRlZiBDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKIAogLyoqCiAgKiBjbG9ja3NvdXJjZV9zZWxlY3QgLSBTZWxlY3QgdGhlIGJlc3QgY2xvY2tzb3VyY2UgYXZhaWxhYmxlCkBAIC01NzcsNyArNTc3LDcgQEAKIAl9CiB9CiAKLSNlbHNlIC8qIENPTkZJR19HRU5FUklDX1RJTUUgKi8KKyNlbHNlIC8qICFDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGNsb2Nrc291cmNlX3NlbGVjdCh2b2lkKSB7IH0KIApAQCAtNjM5LDYgKzYzOSwzMiBAQAogI2RlZmluZSBNQVhfVVBEQVRFX0xFTkdUSCA1IC8qIFNlY29uZHMgKi8KIAogLyoqCisgKiBfX2Nsb2Nrc291cmNlX3VwZGF0ZWZyZXFfc2NhbGUgLSBVc2VkIHVwZGF0ZSBjbG9ja3NvdXJjZSB3aXRoIG5ldyBmcmVxCisgKiBAdDoJCWNsb2Nrc291cmNlIHRvIGJlIHJlZ2lzdGVyZWQKKyAqIEBzY2FsZToJU2NhbGUgZmFjdG9yIG11bHRpcGxpZWQgYWdhaW5zdCBmcmVxIHRvIGdldCBjbG9ja3NvdXJjZSBoegorICogQGZyZXE6CWNsb2Nrc291cmNlIGZyZXF1ZW5jeSAoY3ljbGVzIHBlciBzZWNvbmQpIGRpdmlkZWQgYnkgc2NhbGUKKyAqCisgKiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBjbG9ja3NvdXJjZS0+ZW5hYmxlKCkgbWV0aG9kLgorICoKKyAqIFRoaXMgKlNIT1VMRCBOT1QqIGJlIGNhbGxlZCBkaXJlY3RseSEgUGxlYXNlIHVzZSB0aGUKKyAqIGNsb2Nrc291cmNlX3VwZGF0ZWZyZXFfaHooKSBvciBjbG9ja3NvdXJjZV91cGRhdGVmcmVxX2toeiBoZWxwZXIgZnVuY3Rpb25zLgorICovCit2b2lkIF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgc2NhbGUsIHUzMiBmcmVxKQoreworCS8qCisJICogSWRlYWxseSB3ZSB3YW50IHRvIHVzZSAgc29tZSBvZiB0aGUgbGltaXRzIHVzZWQgaW4KKwkgKiBjbG9ja3NvdXJjZV9tYXhfZGVmZXJtZW50LCB0byBwcm92aWRlIGEgbW9yZSBpbmZvcm1lZAorCSAqIE1BWF9VUERBVEVfTEVOR1RILiBCdXQgZm9yIG5vdyB0aGlzIGp1c3QgZ2V0cyB0aGUKKwkgKiByZWdpc3RlciBpbnRlcmZhY2Ugd29ya2luZyBwcm9wZXJseS4KKwkgKi8KKwljbG9ja3NfY2FsY19tdWx0X3NoaWZ0KCZjcy0+bXVsdCwgJmNzLT5zaGlmdCwgZnJlcSwKKwkJCQkgICAgICBOU0VDX1BFUl9TRUMvc2NhbGUsCisJCQkJICAgICAgTUFYX1VQREFURV9MRU5HVEgqc2NhbGUpOworCWNzLT5tYXhfaWRsZV9ucyA9IGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQoY3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlKTsKKworLyoqCiAgKiBfX2Nsb2Nrc291cmNlX3JlZ2lzdGVyX3NjYWxlIC0gVXNlZCB0byBpbnN0YWxsIG5ldyBjbG9ja3NvdXJjZXMKICAqIEB0OgkJY2xvY2tzb3VyY2UgdG8gYmUgcmVnaXN0ZXJlZAogICogQHNjYWxlOglTY2FsZSBmYWN0b3IgbXVsdGlwbGllZCBhZ2FpbnN0IGZyZXEgdG8gZ2V0IGNsb2Nrc291cmNlIGh6CkBAIC02NTIsMTcgKzY3OCwxMCBAQAogaW50IF9fY2xvY2tzb3VyY2VfcmVnaXN0ZXJfc2NhbGUoc3RydWN0IGNsb2Nrc291cmNlICpjcywgdTMyIHNjYWxlLCB1MzIgZnJlcSkKIHsKIAotCS8qCi0JICogSWRlYWxseSB3ZSB3YW50IHRvIHVzZSAgc29tZSBvZiB0aGUgbGltaXRzIHVzZWQgaW4KLQkgKiBjbG9ja3NvdXJjZV9tYXhfZGVmZXJtZW50LCB0byBwcm92aWRlIGEgbW9yZSBpbmZvcm1lZAotCSAqIE1BWF9VUERBVEVfTEVOR1RILiBCdXQgZm9yIG5vdyB0aGlzIGp1c3QgZ2V0cyB0aGUKLQkgKiByZWdpc3RlciBpbnRlcmZhY2Ugd29ya2luZyBwcm9wZXJseS4KLQkgKi8KLQljbG9ja3NfY2FsY19tdWx0X3NoaWZ0KCZjcy0+bXVsdCwgJmNzLT5zaGlmdCwgZnJlcSwKLQkJCQkgICAgICBOU0VDX1BFUl9TRUMvc2NhbGUsCi0JCQkJICAgICAgTUFYX1VQREFURV9MRU5HVEgqc2NhbGUpOwotCWNzLT5tYXhfaWRsZV9ucyA9IGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQoY3MpOworCS8qIEludGlhbGl6ZSBtdWx0L3NoaWZ0IGFuZCBtYXhfaWRsZV9ucyAqLworCV9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZShjcywgc2NhbGUsIGZyZXEpOwogCisJLyogQWRkIGNsb2Nrc291cmNlIHRvIHRoZSBjbGNva3NvdXJjZSBsaXN0ICovCiAJbXV0ZXhfbG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogCWNsb2Nrc291cmNlX2VucXVldWUoY3MpOwogCWNsb2Nrc291cmNlX3NlbGVjdCgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IDgxMzk5M2IuLjNlMjE2ZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCiAJaWYgKHJjdV9uZWVkc19jcHUoY3B1KSB8fCBwcmludGtfbmVlZHNfY3B1KGNwdSkgfHwKLQkgICAgYXJjaF9uZWVkc19jcHUoY3B1KSB8fCBub2h6X3JhdGVsaW1pdChjcHUpKSB7CisJICAgIGFyY2hfbmVlZHNfY3B1KGNwdSkpIHsKIAkJbmV4dF9qaWZmaWVzID0gbGFzdF9qaWZmaWVzICsgMTsKIAkJZGVsdGFfamlmZmllcyA9IDE7CiAJfSBlbHNlIHsKQEAgLTQwNSwxMyArNDA1LDcgQEAKIAkJICogdGhlIHNjaGVkdWxlciB0aWNrIGluIG5vaHpfcmVzdGFydF9zY2hlZF90aWNrLgogCQkgKi8KIAkJaWYgKCF0cy0+dGlja19zdG9wcGVkKSB7Ci0JCQlpZiAoc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcigxKSkgewotCQkJCS8qCi0JCQkJICogc2NoZWQgdGljayBub3Qgc3RvcHBlZCEKLQkJCQkgKi8KLQkJCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vaHpfY3B1X21hc2spOwotCQkJCWdvdG8gb3V0OwotCQkJfQorCQkJc2VsZWN0X25vaHpfbG9hZF9iYWxhbmNlcigxKTsKIAogCQkJdHMtPmlkbGVfdGljayA9IGhydGltZXJfZ2V0X2V4cGlyZXMoJnRzLT5zY2hlZF90aW1lcik7CiAJCQl0cy0+dGlja19zdG9wcGVkID0gMTsKQEAgLTc4MCw3ICs3NzQsNiBAQAogewogCXN0cnVjdCB0aWNrX3NjaGVkICp0cyA9ICZfX2dldF9jcHVfdmFyKHRpY2tfY3B1X3NjaGVkKTsKIAlrdGltZV90IG5vdyA9IGt0aW1lX2dldCgpOwotCXU2NCBvZmZzZXQ7CiAKIAkvKgogCSAqIEVtdWxhdGUgdGljayBwcm9jZXNzaW5nIHZpYSBwZXItQ1BVIGhydGltZXJzOgpAQCAtNzkwLDEwICs3ODMsNiBAQAogCiAJLyogR2V0IHRoZSBuZXh0IHBlcmlvZCAocGVyIGNwdSkgKi8KIAlocnRpbWVyX3NldF9leHBpcmVzKCZ0cy0+c2NoZWRfdGltZXIsIHRpY2tfaW5pdF9qaWZmeV91cGRhdGUoKSk7Ci0Jb2Zmc2V0ID0ga3RpbWVfdG9fbnModGlja19wZXJpb2QpID4+IDE7Ci0JZG9fZGl2KG9mZnNldCwgbnVtX3Bvc3NpYmxlX2NwdXMoKSk7Ci0Jb2Zmc2V0ICo9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZ0cy0+c2NoZWRfdGltZXIsIG9mZnNldCk7CiAKIAlmb3IgKDs7KSB7CiAJCWhydGltZXJfZm9yd2FyZCgmdHMtPnNjaGVkX3RpbWVyLCBub3csIHRpY2tfcGVyaW9kKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGNhZjhkNGQuLmUxNGM4MzkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMTUzLDggKzE1Myw4IEBACiAgKiAtIHdhbGxfdG9fbW9ub3RvbmljIGlzIG5vIGxvbmdlciB0aGUgYm9vdCB0aW1lLCBnZXRib290dGltZSBtdXN0IGJlCiAgKiB1c2VkIGluc3RlYWQuCiAgKi8KLXN0cnVjdCB0aW1lc3BlYyB4dGltZSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7Ci1zdHJ1Y3QgdGltZXNwZWMgd2FsbF90b19tb25vdG9uaWMgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB4dGltZSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7CitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHdhbGxfdG9fbW9ub3RvbmljIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKIHN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdG90YWxfc2xlZXBfdGltZTsKIAogLyoKQEAgLTE3MCwxMSArMTcwLDEwIEBACiB7CiAJeHRpbWUudHZfc2VjICs9IGxlYXBzZWNvbmQ7CiAJd2FsbF90b19tb25vdG9uaWMudHZfc2VjIC09IGxlYXBzZWNvbmQ7Ci0JdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgdGltZWtlZXBlci5jbG9jaywgdGltZWtlZXBlci5tdWx0KTsKKwl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCAmd2FsbF90b19tb25vdG9uaWMsIHRpbWVrZWVwZXIuY2xvY2ssCisJCQl0aW1la2VlcGVyLm11bHQpOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQotCiAvKioKICAqIHRpbWVrZWVwaW5nX2ZvcndhcmRfbm93IC0gdXBkYXRlIGNsb2NrIHRvIHRoZSBjdXJyZW50IHRpbWUKICAqCkBAIC0zMjgsNyArMzI3LDggQEAKIAl0aW1la2VlcGVyLm50cF9lcnJvciA9IDA7CiAJbnRwX2NsZWFyKCk7CiAKLQl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCB0aW1la2VlcGVyLmNsb2NrLCB0aW1la2VlcGVyLm11bHQpOworCXVwZGF0ZV92c3lzY2FsbCgmeHRpbWUsICZ3YWxsX3RvX21vbm90b25pYywgdGltZWtlZXBlci5jbG9jaywKKwkJCQl0aW1la2VlcGVyLm11bHQpOwogCiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIApAQCAtMzc2LDUyICszNzYsNiBAQAogCXRpY2tfY2xvY2tfbm90aWZ5KCk7CiB9CiAKLSNlbHNlIC8qIEdFTkVSSUNfVElNRSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGltZWtlZXBpbmdfZm9yd2FyZF9ub3codm9pZCkgeyB9Ci0KLS8qKgotICoga3RpbWVfZ2V0IC0gZ2V0IHRoZSBtb25vdG9uaWMgdGltZSBpbiBrdGltZV90IGZvcm1hdAotICoKLSAqIHJldHVybnMgdGhlIHRpbWUgaW4ga3RpbWVfdCBmb3JtYXQKLSAqLwota3RpbWVfdCBrdGltZV9nZXQodm9pZCkKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCi0Ja3RpbWVfZ2V0X3RzKCZub3cpOwotCi0JcmV0dXJuIHRpbWVzcGVjX3RvX2t0aW1lKG5vdyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrdGltZV9nZXQpOwotCi0vKioKLSAqIGt0aW1lX2dldF90cyAtIGdldCB0aGUgbW9ub3RvbmljIGNsb2NrIGluIHRpbWVzcGVjIGZvcm1hdAotICogQHRzOgkJcG9pbnRlciB0byB0aW1lc3BlYyB2YXJpYWJsZQotICoKLSAqIFRoZSBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtb25vdG9uaWMgY2xvY2sgZnJvbSB0aGUgcmVhbHRpbWUKLSAqIGNsb2NrIGFuZCB0aGUgd2FsbF90b19tb25vdG9uaWMgb2Zmc2V0IGFuZCBzdG9yZXMgdGhlIHJlc3VsdAotICogaW4gbm9ybWFsaXplZCB0aW1lc3BlYyBmb3JtYXQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgdG8gYnkgQHRzLgotICovCi12b2lkIGt0aW1lX2dldF90cyhzdHJ1Y3QgdGltZXNwZWMgKnRzKQotewotCXN0cnVjdCB0aW1lc3BlYyB0b21vbm87Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0KLQlkbyB7Ci0JCXNlcSA9IHJlYWRfc2VxYmVnaW4oJnh0aW1lX2xvY2spOwotCQlnZXRuc3RpbWVvZmRheSh0cyk7Ci0JCXRvbW9ubyA9IHdhbGxfdG9fbW9ub3RvbmljOwotCi0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeSgmeHRpbWVfbG9jaywgc2VxKSk7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYyh0cywgdHMtPnR2X3NlYyArIHRvbW9uby50dl9zZWMsCi0JCQkJdHMtPnR2X25zZWMgKyB0b21vbm8udHZfbnNlYyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrdGltZV9nZXRfdHMpOwotCi0jZW5kaWYgLyogIUdFTkVSSUNfVElNRSAqLwotCiAvKioKICAqIGt0aW1lX2dldF9yZWFsIC0gZ2V0IHRoZSByZWFsICh3YWxsLSkgdGltZSBpbiBrdGltZV90IGZvcm1hdAogICoKQEAgLTU3OSw5ICs1MzMsOSBAQAogCiAJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJnRzLCAmdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lKSA+IDApIHsKIAkJdHMgPSB0aW1lc3BlY19zdWIodHMsIHRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSk7Ci0JCXh0aW1lID0gdGltZXNwZWNfYWRkX3NhZmUoeHRpbWUsIHRzKTsKKwkJeHRpbWUgPSB0aW1lc3BlY19hZGQoeHRpbWUsIHRzKTsKIAkJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsIHRzKTsKLQkJdG90YWxfc2xlZXBfdGltZSA9IHRpbWVzcGVjX2FkZF9zYWZlKHRvdGFsX3NsZWVwX3RpbWUsIHRzKTsKKwkJdG90YWxfc2xlZXBfdGltZSA9IHRpbWVzcGVjX2FkZCh0b3RhbF9zbGVlcF90aW1lLCB0cyk7CiAJfQogCS8qIHJlLWJhc2UgdGhlIGxhc3QgY3ljbGUgdmFsdWUgKi8KIAl0aW1la2VlcGVyLmNsb2NrLT5jeWNsZV9sYXN0ID0gdGltZWtlZXBlci5jbG9jay0+cmVhZCh0aW1la2VlcGVyLmNsb2NrKTsKQEAgLTc4NCwxMCArNzM4LDExIEBACiAJCXJldHVybjsKIAogCWNsb2NrID0gdGltZWtlZXBlci5jbG9jazsKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi0Jb2Zmc2V0ID0gKGNsb2NrLT5yZWFkKGNsb2NrKSAtIGNsb2NrLT5jeWNsZV9sYXN0KSAmIGNsb2NrLT5tYXNrOwotI2Vsc2UKKworI2lmZGVmIENPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCW9mZnNldCA9IHRpbWVrZWVwZXIuY3ljbGVfaW50ZXJ2YWw7CisjZWxzZQorCW9mZnNldCA9IChjbG9jay0+cmVhZChjbG9jaykgLSBjbG9jay0+Y3ljbGVfbGFzdCkgJiBjbG9jay0+bWFzazsKICNlbmRpZgogCXRpbWVrZWVwZXIueHRpbWVfbnNlYyA9IChzNjQpeHRpbWUudHZfbnNlYyA8PCB0aW1la2VlcGVyLnNoaWZ0OwogCkBAIC04NTYsNyArODExLDggQEAKIAl9CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBuZXcgY2xvY2tzb3VyY2UgdG8gdXNlICovCi0JdXBkYXRlX3ZzeXNjYWxsKCZ4dGltZSwgdGltZWtlZXBlci5jbG9jaywgdGltZWtlZXBlci5tdWx0KTsKKwl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCAmd2FsbF90b19tb25vdG9uaWMsIHRpbWVrZWVwZXIuY2xvY2ssCisJCQkJdGltZWtlZXBlci5tdWx0KTsKIH0KIAogLyoqCkBAIC04ODcsNyArODQzLDcgQEAKICAqLwogdm9pZCBtb25vdG9uaWNfdG9fYm9vdGJhc2VkKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7Ci0JKnRzID0gdGltZXNwZWNfYWRkX3NhZmUoKnRzLCB0b3RhbF9zbGVlcF90aW1lKTsKKwkqdHMgPSB0aW1lc3BlY19hZGQoKnRzLCB0b3RhbF9zbGVlcF90aW1lKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1vbm90b25pY190b19ib290YmFzZWQpOwogCkBAIC05MDIsNiArODU4LDExIEBACiAJcmV0dXJuIHh0aW1lOwogfQogCitzdHJ1Y3QgdGltZXNwZWMgX19nZXRfd2FsbF90b19tb25vdG9uaWModm9pZCkKK3sKKwlyZXR1cm4gd2FsbF90b19tb25vdG9uaWM7Cit9CisKIHN0cnVjdCB0aW1lc3BlYyBjdXJyZW50X2tlcm5lbF90aW1lKHZvaWQpCiB7CiAJc3RydWN0IHRpbWVzcGVjIG5vdzsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggZWZkZTExZS4uOTdiZjA1YiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTkwLDggKzkwLDEzIEBACiAKIC8qCiAgKiBOb3RlIHRoYXQgYWxsIHR2ZWNfYmFzZXMgYXJlIDIgYnl0ZSBhbGlnbmVkIGFuZCBsb3dlciBiaXQgb2YKLSAqIGJhc2UgaW4gdGltZXJfbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIFVzZSB0aGUgTFNCIGZvcgotICogdGhlIG5ldyBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHRpbWVyIGlzIGRlZmVycmFibGUKKyAqIGJhc2UgaW4gdGltZXJfbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8uIFVzZSB0aGUgTFNCIHRvCisgKiBpbmRpY2F0ZSB3aGV0aGVyIHRoZSB0aW1lciBpcyBkZWZlcnJhYmxlLgorICoKKyAqIEEgZGVmZXJyYWJsZSB0aW1lciB3aWxsIHdvcmsgbm9ybWFsbHkgd2hlbiB0aGUgc3lzdGVtIGlzIGJ1c3ksIGJ1dAorICogd2lsbCBub3QgY2F1c2UgYSBDUFUgdG8gY29tZSBvdXQgb2YgaWRsZSBqdXN0IHRvIHNlcnZpY2UgaXQ7IGluc3RlYWQsCisgKiB0aGUgdGltZXIgd2lsbCBiZSBzZXJ2aWNlZCB3aGVuIHRoZSBDUFUgZXZlbnR1YWxseSB3YWtlcyB1cCB3aXRoIGEKKyAqIHN1YnNlcXVlbnQgbm9uLWRlZmVycmFibGUgdGltZXIuCiAgKi8KICNkZWZpbmUgVEJBU0VfREVGRVJSQUJMRV9GTEFHCQkoMHgxKQogCkBAIC0zMjEsNiArMzI2LDcgQEAKIAogLyoqCiAgKiBzZXRfdGltZXJfc2xhY2sgLSBzZXQgdGhlIGFsbG93ZWQgc2xhY2sgZm9yIGEgdGltZXIKKyAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIG1vZGlmaWVkCiAgKiBAc2xhY2tfaHo6IHRoZSBhbW91bnQgb2YgdGltZSAoaW4gamlmZmllcykgYWxsb3dlZCBmb3Igcm91bmRpbmcKICAqCiAgKiBTZXQgdGhlIGFtb3VudCBvZiB0aW1lLCBpbiBqaWZmaWVzLCB0aGF0IGEgY2VydGFpbiB0aW1lciBoYXMKQEAgLTY5MiwxMiArNjk4LDggQEAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19OT19IWikgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCWlmICghcGlubmVkICYmIGdldF9zeXNjdGxfdGltZXJfbWlncmF0aW9uKCkgJiYgaWRsZV9jcHUoY3B1KSkgewotCQlpbnQgcHJlZmVycmVkX2NwdSA9IGdldF9ub2h6X2xvYWRfYmFsYW5jZXIoKTsKLQotCQlpZiAocHJlZmVycmVkX2NwdSA+PSAwKQotCQkJY3B1ID0gcHJlZmVycmVkX2NwdTsKLQl9CisJaWYgKCFwaW5uZWQgJiYgZ2V0X3N5c2N0bF90aW1lcl9taWdyYXRpb24oKSAmJiBpZGxlX2NwdShjcHUpKQorCQljcHUgPSBnZXRfbm9oel90aW1lcl90YXJnZXQoKTsKICNlbmRpZgogCW5ld19iYXNlID0gcGVyX2NwdSh0dmVjX2Jhc2VzLCBjcHUpOwogCkBAIC0xMzAyLDcgKzEzMDQsNiBAQAogewogCWhydGltZXJfcnVuX3F1ZXVlcygpOwogCXJhaXNlX3NvZnRpcnEoVElNRVJfU09GVElSUSk7Ci0Jc29mdGxvY2t1cF90aWNrKCk7CiB9CiAKIC8qCkBAIC0xNzYzLDMgKzE3NjQsMjUgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChtc2xlZXBfaW50ZXJydXB0aWJsZSk7CisKK3N0YXRpYyBpbnQgX19zY2hlZCBkb191c2xlZXBfcmFuZ2UodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4KQoreworCWt0aW1lX3Qga21pbjsKKwl1bnNpZ25lZCBsb25nIGRlbHRhOworCisJa21pbiA9IGt0aW1lX3NldCgwLCBtaW4gKiBOU0VDX1BFUl9VU0VDKTsKKwlkZWx0YSA9IChtYXggLSBtaW4pICogTlNFQ19QRVJfVVNFQzsKKwlyZXR1cm4gc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKCZrbWluLCBkZWx0YSwgSFJUSU1FUl9NT0RFX1JFTCk7Cit9CisKKy8qKgorICogdXNsZWVwX3JhbmdlIC0gRHJvcCBpbiByZXBsYWNlbWVudCBmb3IgdWRlbGF5IHdoZXJlIHdha2V1cCBpcyBmbGV4aWJsZQorICogQG1pbjogTWluaW11bSB0aW1lIGluIHVzZWNzIHRvIHNsZWVwCisgKiBAbWF4OiBNYXhpbXVtIHRpbWUgaW4gdXNlY3MgdG8gc2xlZXAKKyAqLwordm9pZCB1c2xlZXBfcmFuZ2UodW5zaWduZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4KQoreworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCWRvX3VzbGVlcF9yYW5nZShtaW4sIG1heCk7Cit9CitFWFBPUlRfU1lNQk9MKHVzbGVlcF9yYW5nZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvS2NvbmZpZyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCmluZGV4IDhiMTc5N2MuLjUzODUwMWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9LY29uZmlnCisrKyBiL2tlcm5lbC90cmFjZS9LY29uZmlnCkBAIC0xNTMsNyArMTUzLDcgQEAKIAlib29sICJJbnRlcnJ1cHRzLW9mZiBMYXRlbmN5IFRyYWNlciIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQorCWRlcGVuZHMgb24gIUFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCiAJc2VsZWN0IFRSQUNFX0lSUUZMQUdTCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCiAJc2VsZWN0IFRSQUNFUl9NQVhfVFJBQ0UKQEAgLTE3NSw3ICsxNzUsNyBAQAogY29uZmlnIFBSRUVNUFRfVFJBQ0VSCiAJYm9vbCAiUHJlZW1wdGlvbi1vZmYgTGF0ZW5jeSBUcmFjZXIiCiAJZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKKwlkZXBlbmRzIG9uICFBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogCWRlcGVuZHMgb24gUFJFRU1QVAogCXNlbGVjdCBHRU5FUklDX1RSQUNFUgogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCkBAIC0xOTQsMTUgKzE5NCw2IEBACiAJICBlbmFibGVkLiBUaGlzIG9wdGlvbiBhbmQgdGhlIGlycXMtb2ZmIHRpbWluZyBvcHRpb24gY2FuIGJlCiAJICB1c2VkIHRvZ2V0aGVyIG9yIHNlcGFyYXRlbHkuKQogCi1jb25maWcgU1lTUFJPRl9UUkFDRVIKLQlib29sICJTeXNwcm9mIFRyYWNlciIKLQlkZXBlbmRzIG9uIFg4NgotCXNlbGVjdCBHRU5FUklDX1RSQUNFUgotCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKLQloZWxwCi0JICBUaGlzIHRyYWNlciBwcm92aWRlcyB0aGUgdHJhY2UgbmVlZGVkIGJ5IHRoZSAnU3lzcHJvZicgdXNlcnNwYWNlCi0JICB0b29sLgotCiBjb25maWcgU0NIRURfVFJBQ0VSCiAJYm9vbCAiU2NoZWR1bGluZyBMYXRlbmN5IFRyYWNlciIKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKQEAgLTIyOSwyMyArMjIwLDYgQEAKIAloZWxwCiAJICBCYXNpYyB0cmFjZXIgdG8gY2F0Y2ggdGhlIHN5c2NhbGwgZW50cnkgYW5kIGV4aXQgZXZlbnRzLgogCi1jb25maWcgQk9PVF9UUkFDRVIKLQlib29sICJUcmFjZSBib290IGluaXRjYWxscyIKLQlzZWxlY3QgR0VORVJJQ19UUkFDRVIKLQlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCi0JaGVscAotCSAgVGhpcyB0cmFjZXIgaGVscHMgZGV2ZWxvcGVycyB0byBvcHRpbWl6ZSBib290IHRpbWVzOiBpdCByZWNvcmRzCi0JICB0aGUgdGltaW5ncyBvZiB0aGUgaW5pdGNhbGxzIGFuZCB0cmFjZXMga2V5IGV2ZW50cyBhbmQgdGhlIGlkZW50aXR5Ci0JICBvZiB0YXNrcyB0aGF0IGNhbiBjYXVzZSBib290IGRlbGF5cywgc3VjaCBhcyBjb250ZXh0LXN3aXRjaGVzLgotCi0JICBJdHMgYWltIGlzIHRvIGJlIHBhcnNlZCBieSB0aGUgc2NyaXB0cy9ib290Z3JhcGgucGwgdG9vbCB0bwotCSAgcHJvZHVjZSBwcmV0dHkgZ3JhcGhpY3MgYWJvdXQgYm9vdCBpbmVmZmljaWVuY2llcywgZ2l2aW5nIGEgdmlzdWFsCi0JICByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVsYXlzIGR1cmluZyBpbml0Y2FsbHMgLSBidXQgdGhlIHJhdwotCSAgL2RlYnVnL3RyYWNpbmcvdHJhY2UgdGV4dCBvdXRwdXQgaXMgcmVhZGFibGUgdG9vLgotCi0JICBZb3UgbXVzdCBwYXNzIGluIGluaXRjYWxsX2RlYnVnIGFuZCBmdHJhY2U9aW5pdGNhbGwgdG8gdGhlIGtlcm5lbAotCSAgY29tbWFuZCBsaW5lIHRvIGVuYWJsZSB0aGlzIG9uIGJvb3R1cC4KLQogY29uZmlnIFRSQUNFX0JSQU5DSF9QUk9GSUxJTkcKIAlib29sCiAJc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCkBAIC0zMjUsMjggKzI5OSw2IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAotY29uZmlnIEtTWU1fVFJBQ0VSCi0JYm9vbCAiVHJhY2UgcmVhZCBhbmQgd3JpdGUgYWNjZXNzIG9uIGtlcm5lbCBtZW1vcnkgbG9jYXRpb25zIgotCWRlcGVuZHMgb24gSEFWRV9IV19CUkVBS1BPSU5UCi0Jc2VsZWN0IFRSQUNJTkcKLQloZWxwCi0JICBUaGlzIHRyYWNlciBoZWxwcyBmaW5kIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24gYW55IGdpdmVuIGtlcm5lbAotCSAgc3ltYm9sIGkuZS4gL3Byb2Mva2FsbHN5bXMuCi0KLWNvbmZpZyBQUk9GSUxFX0tTWU1fVFJBQ0VSCi0JYm9vbCAiUHJvZmlsZSBhbGwga2VybmVsIG1lbW9yeSBhY2Nlc3NlcyBvbiAnd2F0Y2hlZCcgdmFyaWFibGVzIgotCWRlcGVuZHMgb24gS1NZTV9UUkFDRVIKLQloZWxwCi0JICBUaGlzIHRyYWNlciBwcm9maWxlcyBrZXJuZWwgYWNjZXNzZXMgb24gdmFyaWFibGVzIHdhdGNoZWQgdGhyb3VnaCB0aGUKLQkgIGtzeW0gdHJhY2VyIGZ0cmFjZSBwbHVnaW4uIERlcGVuZGluZyB1cG9uIHRoZSBoYXJkd2FyZSwgYWxsIHJlYWQKLQkgIGFuZCB3cml0ZSBvcGVyYXRpb25zIG9uIGtlcm5lbCB2YXJpYWJsZXMgY2FuIGJlIG1vbml0b3JlZCBmb3IKLQkgIGFjY2Vzc2VzLgotCi0JICBUaGUgcmVzdWx0cyB3aWxsIGJlIGRpc3BsYXllZCBpbjoKLQkgIC9kZWJ1Z2ZzL3RyYWNpbmcvcHJvZmlsZV9rc3ltCi0KLQkgIFNheSBOIGlmIHVuc3VyZS4KLQogY29uZmlnIFNUQUNLX1RSQUNFUgogCWJvb2wgIlRyYWNlIG1heCBzdGFjayIKIAlkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSCkBAIC0zNzEsMzcgKzMyMyw2IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAotY29uZmlnIEtNRU1UUkFDRQotCWJvb2wgIlRyYWNlIFNMQUIgYWxsb2NhdGlvbnMiCi0Jc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCi0JaGVscAotCSAga21lbXRyYWNlIHByb3ZpZGVzIHRyYWNpbmcgZm9yIHNsYWIgYWxsb2NhdG9yIGZ1bmN0aW9ucywgc3VjaCBhcwotCSAga21hbGxvYywga2ZyZWUsIGttZW1fY2FjaGVfYWxsb2MsIGttZW1fY2FjaGVfZnJlZSwgZXRjLiBDb2xsZWN0ZWQKLQkgIGRhdGEgaXMgdGhlbiBmZWQgdG8gdGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBpbiBvcmRlciB0byBhbmFseXNlCi0JICBhbGxvY2F0aW9uIGhvdHNwb3RzLCBpbnRlcm5hbCBmcmFnbWVudGF0aW9uIGFuZCBzbyBvbiwgbWFraW5nIGl0Ci0JICBwb3NzaWJsZSB0byBzZWUgaG93IHdlbGwgYW4gYWxsb2NhdG9yIHBlcmZvcm1zLCBhcyB3ZWxsIGFzIGRlYnVnCi0JICBhbmQgcHJvZmlsZSBrZXJuZWwgY29kZS4KLQotCSAgVGhpcyByZXF1aXJlcyBhbiB1c2Vyc3BhY2UgYXBwbGljYXRpb24gdG8gdXNlLiBTZWUKLQkgIERvY3VtZW50YXRpb24vdHJhY2Uva21lbXRyYWNlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQotCSAgU2F5aW5nIFkgd2lsbCBtYWtlIHRoZSBrZXJuZWwgc29tZXdoYXQgbGFyZ2VyIGFuZCBzbG93ZXIuIEhvd2V2ZXIsCi0JICBpZiB5b3UgZGlzYWJsZSBrbWVtdHJhY2UgYXQgcnVuLXRpbWUgb3IgYm9vdC10aW1lLCB0aGUgcGVyZm9ybWFuY2UKLQkgIGltcGFjdCBpcyBtaW5pbWFsIChkZXBlbmRpbmcgb24gdGhlIGFyY2ggdGhlIGtlcm5lbCBpcyBidWlsdCBmb3IpLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgV09SS1FVRVVFX1RSQUNFUgotCWJvb2wgIlRyYWNlIHdvcmtxdWV1ZXMiCi0Jc2VsZWN0IEdFTkVSSUNfVFJBQ0VSCi0JaGVscAotCSAgVGhlIHdvcmtxdWV1ZSB0cmFjZXIgcHJvdmlkZXMgc29tZSBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbgotICAgICAgICAgIGFib3V0IGVhY2ggY3B1IHdvcmtxdWV1ZSB0aHJlYWQgc3VjaCBhcyB0aGUgbnVtYmVyIG9mIHRoZQotICAgICAgICAgIHdvcmtzIGluc2VydGVkIGFuZCBleGVjdXRlZCBzaW5jZSB0aGVpciBjcmVhdGlvbi4gSXQgY2FuIGhlbHAKLSAgICAgICAgICB0byBldmFsdWF0ZSB0aGUgYW1vdW50IG9mIHdvcmsgZWFjaCBvZiB0aGVtIGhhcyB0byBwZXJmb3JtLgotICAgICAgICAgIEZvciBleGFtcGxlIGl0IGNhbiBoZWxwIGEgZGV2ZWxvcGVyIHRvIGRlY2lkZSB3aGV0aGVyIGhlIHNob3VsZAotICAgICAgICAgIGNob29zZSBhIHBlci1jcHUgd29ya3F1ZXVlIGluc3RlYWQgb2YgYSBzaW5nbGV0aHJlYWRlZCBvbmUuCi0KIGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFCiAJYm9vbCAiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zIgogCWRlcGVuZHMgb24gU1lTRlMKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCA0MjE1NTMwLi41M2YzMzgxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC0zMCw3ICszMCw2IEBACiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Vfc3RhdC5vCiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2VfcHJpbnRrLm8KIG9iai0kKENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIpICs9IHRyYWNlX3NjaGVkX3N3aXRjaC5vCi1vYmotJChDT05GSUdfU1lTUFJPRl9UUkFDRVIpICs9IHRyYWNlX3N5c3Byb2Yubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikgKz0gdHJhY2VfZnVuY3Rpb25zLm8KIG9iai0kKENPTkZJR19JUlFTT0ZGX1RSQUNFUikgKz0gdHJhY2VfaXJxc29mZi5vCiBvYmotJChDT05GSUdfUFJFRU1QVF9UUkFDRVIpICs9IHRyYWNlX2lycXNvZmYubwpAQCAtMzgsMTAgKzM3LDggQEAKIG9iai0kKENPTkZJR19OT1BfVFJBQ0VSKSArPSB0cmFjZV9ub3Aubwogb2JqLSQoQ09ORklHX1NUQUNLX1RSQUNFUikgKz0gdHJhY2Vfc3RhY2subwogb2JqLSQoQ09ORklHX01NSU9UUkFDRSkgKz0gdHJhY2VfbW1pb3RyYWNlLm8KLW9iai0kKENPTkZJR19CT09UX1RSQUNFUikgKz0gdHJhY2VfYm9vdC5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSB0cmFjZV9mdW5jdGlvbnNfZ3JhcGgubwogb2JqLSQoQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcpICs9IHRyYWNlX2JyYW5jaC5vCi1vYmotJChDT05GSUdfS01FTVRSQUNFKSArPSBrbWVtdHJhY2Uubwogb2JqLSQoQ09ORklHX1dPUktRVUVVRV9UUkFDRVIpICs9IHRyYWNlX3dvcmtxdWV1ZS5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2UubwogaWZlcSAoJChDT05GSUdfQkxPQ0spLHkpCkBAIC01NSw3ICs1Miw2IEBACiBlbmRpZgogb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IHRyYWNlX2V2ZW50c19maWx0ZXIubwogb2JqLSQoQ09ORklHX0tQUk9CRV9FVkVOVCkgKz0gdHJhY2Vfa3Byb2JlLm8KLW9iai0kKENPTkZJR19LU1lNX1RSQUNFUikgKz0gdHJhY2Vfa3N5bS5vCiBvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgKz0gcG93ZXItdHJhY2VzLm8KIGlmZXEgKCQoQ09ORklHX1RSQUNJTkcpLHkpCiBvYmotJChDT05GSUdfS0dEQl9LREIpICs9IHRyYWNlX2tkYi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDYzODcxMWMuLjk1OWY4ZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0xNjksOSArMTY5LDEyIEBACiBzdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSwKIAkJCQkgQkxLX1RDX0FDVChCTEtfVENfV1JJVEUpIH07CiAKKyNkZWZpbmUgQkxLX1RDX0hBUkRCQVJSSUVSCUJMS19UQ19CQVJSSUVSCisjZGVmaW5lIEJMS19UQ19SQUhFQUQJCUJMS19UQ19BSEVBRAorCiAvKiBUaGUgaWxvZzIoKSBjYWxscyBmYWxsIG91dCBiZWNhdXNlIHRoZXkncmUgY29uc3RhbnQgKi8KLSNkZWZpbmUgTUFTS19UQ19CSVQocncsIF9fbmFtZSkgKChydyAmICgxIDw8IEJJT19SV18gIyMgX19uYW1lKSkgPDwgXAotCSAgKGlsb2cyKEJMS19UQ18gIyMgX19uYW1lKSArIEJMS19UQ19TSElGVCAtIEJJT19SV18gIyMgX19uYW1lKSkKKyNkZWZpbmUgTUFTS19UQ19CSVQocncsIF9fbmFtZSkgKChydyAmIFJFUV8gIyMgX19uYW1lKSA8PCBcCisJICAoaWxvZzIoQkxLX1RDXyAjIyBfX25hbWUpICsgQkxLX1RDX1NISUZUIC0gX19SRVFfICMjIF9fbmFtZSkpCiAKIC8qCiAgKiBUaGUgd29ya2VyIGZvciB0aGUgdmFyaW91cyBibGtfYWRkX3RyYWNlKigpIHR5cGVzLiBGaWxscyBvdXQgYQpAQCAtMTk0LDkgKzE5Nyw5IEBACiAJCXJldHVybjsKIAogCXdoYXQgfD0gZGRpcl9hY3RbcncgJiBXUklURV07Ci0Jd2hhdCB8PSBNQVNLX1RDX0JJVChydywgQkFSUklFUik7Ci0Jd2hhdCB8PSBNQVNLX1RDX0JJVChydywgU1lOQ0lPKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBBSEVBRCk7CisJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgSEFSREJBUlJJRVIpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFNZTkMpOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIFJBSEVBRCk7CiAJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgTUVUQSk7CiAJd2hhdCB8PSBNQVNLX1RDX0JJVChydywgRElTQ0FSRCk7CiAKQEAgLTU0OSw2ICs1NTIsNDEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DT01QQVQpICYmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkKK3N0YXRpYyBpbnQgY29tcGF0X2Jsa190cmFjZV9zZXR1cChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY2hhciAqbmFtZSwKKwkJCQkgIGRldl90IGRldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJCQkgIGNoYXIgX191c2VyICphcmcpCit7CisJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7CisJc3RydWN0IGNvbXBhdF9ibGtfdXNlcl90cmFjZV9zZXR1cCBjYnV0czsKKwlpbnQgcmV0OworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjYnV0cywgYXJnLCBzaXplb2YoY2J1dHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidXRzID0gKHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCkgeworCQkuYWN0X21hc2sgPSBjYnV0cy5hY3RfbWFzaywKKwkJLmJ1Zl9zaXplID0gY2J1dHMuYnVmX3NpemUsCisJCS5idWZfbnIgPSBjYnV0cy5idWZfbnIsCisJCS5zdGFydF9sYmEgPSBjYnV0cy5zdGFydF9sYmEsCisJCS5lbmRfbGJhID0gY2J1dHMuZW5kX2xiYSwKKwkJLnBpZCA9IGNidXRzLnBpZCwKKwl9OworCW1lbWNweSgmYnV0cy5uYW1lLCAmY2J1dHMubmFtZSwgMzIpOworCisJcmV0ID0gZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgYmRldiwgJmJ1dHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMubmFtZSwgMzIpKSB7CisJCWJsa190cmFjZV9yZW1vdmUocSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIGludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpCiB7CiAJaW50IHJldDsKQEAgLTYwMSw2ICs2MzksNyBAQAogCWlmICghcSkKIAkJcmV0dXJuIC1FTlhJTzsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTYwOCw2ICs2NDcsMTIgQEAKIAkJYmRldm5hbWUoYmRldiwgYik7CiAJCXJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LT5iZF9kZXYsIGJkZXYsIGFyZyk7CiAJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVCkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQorCWNhc2UgQkxLVFJBQ0VTRVRVUDMyOgorCQliZGV2bmFtZShiZGV2LCBiKTsKKwkJcmV0ID0gY29tcGF0X2Jsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LT5iZF9kZXYsIGJkZXYsIGFyZyk7CisJCWJyZWFrOworI2VuZGlmCiAJY2FzZSBCTEtUUkFDRVNUQVJUOgogCQlzdGFydCA9IDE7CiAJY2FzZSBCTEtUUkFDRVNUT1A6CkBAIC02MjIsNiArNjY3LDcgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjYxLDEwICs3MDcsMTMgQEAKIAlpZiAobGlrZWx5KCFidCkpCiAJCXJldHVybjsKIAotCWlmIChibGtfZGlzY2FyZF9ycShycSkpCi0JCXJ3IHw9ICgxIDw8IEJJT19SV19ESVNDQVJEKTsKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQorCQlydyB8PSBSRVFfRElTQ0FSRDsKIAotCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9TRUNVUkUpCisJCXJ3IHw9IFJFUV9TRUNVUkU7CisKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKSB7CiAJCXdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfUEMpOwogCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIGJsa19ycV9ieXRlcyhycSksIHJ3LAogCQkJCXdoYXQsIHJxLT5lcnJvcnMsIHJxLT5jbWRfbGVuLCBycS0+Y21kKTsKQEAgLTkyNSw3ICs5NzQsNyBAQAogCWlmIChsaWtlbHkoIWJ0KSkKIAkJcmV0dXJuOwogCi0JaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQogCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIGJsa19ycV9ieXRlcyhycSksIDAsCiAJCQkJQkxLX1RBX0RSVl9EQVRBLCBycS0+ZXJyb3JzLCBsZW4sIGRhdGEpOwogCWVsc2UKQEAgLTE3MzAsNyArMTc3OSw3IEBACiAJaW50IGxlbiA9IHJxLT5jbWRfbGVuOwogCXVuc2lnbmVkIGNoYXIgKmNtZCA9IHJxLT5jbWQ7CiAKLQlpZiAoIWJsa19wY19yZXF1ZXN0KHJxKSkgeworCWlmIChycS0+Y21kX3R5cGUgIT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJYnVmWzBdID0gJ1wwJzsKIAkJcmV0dXJuOwogCX0KQEAgLTE3NTUsMjEgKzE4MDQsMjMgQEAKIAogCWlmIChydyAmIFdSSVRFKQogCQlyd2JzW2krK10gPSAnVyc7Ci0JZWxzZSBpZiAocncgJiAxIDw8IEJJT19SV19ESVNDQVJEKQorCWVsc2UgaWYgKHJ3ICYgUkVRX0RJU0NBUkQpCiAJCXJ3YnNbaSsrXSA9ICdEJzsKIAllbHNlIGlmIChieXRlcykKIAkJcndic1tpKytdID0gJ1InOwogCWVsc2UKIAkJcndic1tpKytdID0gJ04nOwogCi0JaWYgKHJ3ICYgMSA8PCBCSU9fUldfQUhFQUQpCisJaWYgKHJ3ICYgUkVRX1JBSEVBRCkKIAkJcndic1tpKytdID0gJ0EnOwotCWlmIChydyAmIDEgPDwgQklPX1JXX0JBUlJJRVIpCisJaWYgKHJ3ICYgUkVRX0hBUkRCQVJSSUVSKQogCQlyd2JzW2krK10gPSAnQic7Ci0JaWYgKHJ3ICYgMSA8PCBCSU9fUldfU1lOQ0lPKQorCWlmIChydyAmIFJFUV9TWU5DKQogCQlyd2JzW2krK10gPSAnUyc7Ci0JaWYgKHJ3ICYgMSA8PCBCSU9fUldfTUVUQSkKKwlpZiAocncgJiBSRVFfTUVUQSkKIAkJcndic1tpKytdID0gJ00nOworCWlmIChydyAmIFJFUV9TRUNVUkUpCisJCXJ3YnNbaSsrXSA9ICdFJzsKIAogCXJ3YnNbaV0gPSAnXDAnOwogfQpAQCAtMTc3OSw4ICsxODMwLDExIEBACiAJaW50IHJ3ID0gcnEtPmNtZF9mbGFncyAmIDB4MDM7CiAJaW50IGJ5dGVzOwogCi0JaWYgKGJsa19kaXNjYXJkX3JxKHJxKSkKLQkJcncgfD0gKDEgPDwgQklPX1JXX0RJU0NBUkQpOworCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX0RJU0NBUkQpCisJCXJ3IHw9IFJFUV9ESVNDQVJEOworCisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfU0VDVVJFKQorCQlydyB8PSBSRVFfU0VDVVJFOwogCiAJYnl0ZXMgPSBibGtfcnFfYnl0ZXMocnEpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggNmQyY2IxNC4uMGQ4OGNlOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMTg4Myw3ICsxODgzLDYgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhkOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCXVuc2lnbmVkIGxvbmcga2V5OwotCWludCByZXNjaGVkOwogCiAJa2V5ID0gaGFzaF9sb25nKGlwLCBGVFJBQ0VfSEFTSF9CSVRTKTsKIApAQCAtMTg5NywxMiArMTg5NiwxMiBAQAogCSAqIHBlcmlvZC4gVGhpcyBzeW5jcyB0aGUgaGFzaCBpdGVyYXRpb24gYW5kIGZyZWVpbmcgb2YgaXRlbXMKIAkgKiBvbiB0aGUgaGFzaC4gcmN1X3JlYWRfbG9jayBpcyB0b28gZGFuZ2Vyb3VzIGhlcmUuCiAJICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbiwgaGhkLCBub2RlKSB7CiAJCWlmIChlbnRyeS0+aXAgPT0gaXApCiAJCQllbnRyeS0+b3BzLT5mdW5jKGlwLCBwYXJlbnRfaXAsICZlbnRyeS0+ZGF0YSk7CiAJfQotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9wcm9iZV9vcHMgX19yZWFkX21vc3RseSA9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZmMxYmIuLjAwMDAwMDAKLS0tIGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI5ICswLDAgQEAKLS8qCi0gKiBNZW1vcnkgYWxsb2NhdG9yIHRyYWNpbmcKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQotICogQ29weXJpZ2h0IChDKSAyMDA4IFBla2thIEVuYmVyZyA8cGVuYmVyZ0Bjcy5oZWxzaW5raS5maT4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotCi0jaW5jbHVkZSA8bGludXgva21lbXRyYWNlLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKLSNpbmNsdWRlICJ0cmFjZS5oIgotCi0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovCi0jZGVmaW5lIFRSQUNFX0tNRU1fT1BUX01JTklNQUwJMHgxCi0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBrbWVtX29wdHNbXSA9IHsKLQkvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KLQl7IFRSQUNFUl9PUFQoa21lbV9taW5pbWFsaXN0aWMsIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlcl9mbGFncyBrbWVtX3RyYWNlcl9mbGFncyA9IHsKLQkudmFsCQkJPSAwLAotCS5vcHRzCQkJPSBrbWVtX29wdHMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmttZW10cmFjZV9hcnJheTsKLQotLyogVHJhY2UgYWxsb2NhdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfYWxsb2MoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCSAgIGNvbnN0IHZvaWQgKnB0ciwKLQkJCQkgICBzaXplX3QgYnl0ZXNfcmVxLAotCQkJCSAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkgICBnZnBfdCBnZnBfZmxhZ3MsCi0JCQkJICAgaW50IG5vZGUpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2ttZW1fYWxsb2M7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGttZW10cmFjZV9hcnJheTsKLQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSkpOwotCWlmICghZXZlbnQpCi0JCXJldHVybjsKLQotCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0KLQllbnRyeS0+ZW50LnR5cGUJCT0gVFJBQ0VfS01FTV9BTExPQzsKLQllbnRyeS0+dHlwZV9pZAkJPSB0eXBlX2lkOwotCWVudHJ5LT5jYWxsX3NpdGUJPSBjYWxsX3NpdGU7Ci0JZW50cnktPnB0cgkJPSBwdHI7Ci0JZW50cnktPmJ5dGVzX3JlcQk9IGJ5dGVzX3JlcTsKLQllbnRyeS0+Ynl0ZXNfYWxsb2MJPSBieXRlc19hbGxvYzsKLQllbnRyeS0+Z2ZwX2ZsYWdzCT0gZ2ZwX2ZsYWdzOwotCWVudHJ5LT5ub2RlCQk9IG5vZGU7Ci0KLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX2ZyZWUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAotCQkJCSAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkJICBjb25zdCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2ttZW1fZnJlZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0ga21lbXRyYWNlX2FycmF5OwotCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQotCWVudHJ5LT5lbnQudHlwZQkJPSBUUkFDRV9LTUVNX0ZSRUU7Ci0JZW50cnktPnR5cGVfaWQJCT0gdHlwZV9pZDsKLQllbnRyeS0+Y2FsbF9zaXRlCT0gY2FsbF9zaXRlOwotCWVudHJ5LT5wdHIJCT0gcHRyOwotCi0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgdHItPmJ1ZmZlciwgZXZlbnQpKQotCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2ttYWxsb2Modm9pZCAqaWdub3JlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkgICAgICBjb25zdCB2b2lkICpwdHIsCi0JCQkgICAgICBzaXplX3QgYnl0ZXNfcmVxLAotCQkJICAgICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAotCQkJICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBjYWxsX3NpdGUsIHB0ciwKLQkJCWJ5dGVzX3JlcSwgYnl0ZXNfYWxsb2MsIGdmcF9mbGFncywgLTEpOwotfQotCi1zdGF0aWMgdm9pZCBrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyh2b2lkICppZ25vcmUsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCSAgICAgICBjb25zdCB2b2lkICpwdHIsCi0JCQkJICAgICAgIHNpemVfdCBieXRlc19yZXEsCi0JCQkJICAgICAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkgICAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIC0xKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2ttYWxsb2Nfbm9kZSh2b2lkICppZ25vcmUsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCi0JCQkJICAgY29uc3Qgdm9pZCAqcHRyLAotCQkJCSAgIHNpemVfdCBieXRlc19yZXEsCi0JCQkJICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAotCQkJCSAgIGdmcF90IGdmcF9mbGFncywKLQkJCQkgICBpbnQgbm9kZSkKLXsKLQlrbWVtdHJhY2VfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIG5vZGUpOwotfQotCi1zdGF0aWMgdm9pZCBrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvY19ub2RlKHZvaWQgKmlnbm9yZSwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAotCQkJCQkgICAgY29uc3Qgdm9pZCAqcHRyLAotCQkJCQkgICAgc2l6ZV90IGJ5dGVzX3JlcSwKLQkJCQkJICAgIHNpemVfdCBieXRlc19hbGxvYywKLQkJCQkJICAgIGdmcF90IGdmcF9mbGFncywKLQkJCQkJICAgIGludCBub2RlKQotewotCWttZW10cmFjZV9hbGxvYyhLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgY2FsbF9zaXRlLCBwdHIsCi0JCQlieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIG5vZGUpOwotfQotCi1zdGF0aWMgdm9pZAota21lbXRyYWNlX2tmcmVlKHZvaWQgKmlnbm9yZSwgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsIGNvbnN0IHZvaWQgKnB0cikKLXsKLQlrbWVtdHJhY2VfZnJlZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBjYWxsX3NpdGUsIHB0cik7Ci19Ci0KLXN0YXRpYyB2b2lkIGttZW10cmFjZV9rbWVtX2NhY2hlX2ZyZWUodm9pZCAqaWdub3JlLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLCBjb25zdCB2b2lkICpwdHIpCi17Ci0Ja21lbXRyYWNlX2ZyZWUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIGNhbGxfc2l0ZSwgcHRyKTsKLX0KLQotc3RhdGljIGludCBrbWVtdHJhY2Vfc3RhcnRfcHJvYmVzKHZvaWQpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHJlZ2lzdGVyX3RyYWNlX2ttYWxsb2Moa21lbXRyYWNlX2ttYWxsb2MsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gcmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyhrbWVtdHJhY2Vfa21lbV9jYWNoZV9hbGxvYywgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rbWFsbG9jX25vZGUoa21lbXRyYWNlX2ttYWxsb2Nfbm9kZSwgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rbWVtX2NhY2hlX2FsbG9jX25vZGUoa21lbXRyYWNlX2ttZW1fY2FjaGVfYWxsb2Nfbm9kZSwgTlVMTCk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQllcnIgPSByZWdpc3Rlcl90cmFjZV9rZnJlZShrbWVtdHJhY2Vfa2ZyZWUsIE5VTEwpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gcmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9mcmVlKGttZW10cmFjZV9rbWVtX2NhY2hlX2ZyZWUsIE5VTEwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX3N0b3BfcHJvYmVzKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl90cmFjZV9rbWFsbG9jKGttZW10cmFjZV9rbWFsbG9jLCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2ttZW1fY2FjaGVfYWxsb2Moa21lbXRyYWNlX2ttZW1fY2FjaGVfYWxsb2MsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa21hbGxvY19ub2RlKGttZW10cmFjZV9rbWFsbG9jX25vZGUsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa21lbV9jYWNoZV9hbGxvY19ub2RlKGttZW10cmFjZV9rbWVtX2NhY2hlX2FsbG9jX25vZGUsIE5VTEwpOwotCXVucmVnaXN0ZXJfdHJhY2Vfa2ZyZWUoa21lbXRyYWNlX2tmcmVlLCBOVUxMKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2ttZW1fY2FjaGVfZnJlZShrbWVtdHJhY2Vfa21lbV9jYWNoZV9mcmVlLCBOVUxMKTsKLX0KLQotc3RhdGljIGludCBrbWVtX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlrbWVtdHJhY2VfYXJyYXkgPSB0cjsKLQotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwotCi0Ja21lbXRyYWNlX3N0YXJ0X3Byb2JlcygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGttZW1fdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlrbWVtdHJhY2Vfc3RvcF9wcm9iZXMoKTsKLX0KLQotc3RhdGljIHZvaWQga21lbXRyYWNlX2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICpzKQotewotCS8qIERvbid0IG5lZWQgaGVhZGVycyBmb3IgdGhlIG9yaWdpbmFsIGttZW10cmFjZSBvdXRwdXQgKi8KLQlpZiAoIShrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKSkKLQkJcmV0dXJuOwotCi0Jc2VxX3ByaW50ZihzLCAiI1xuIik7Ci0Jc2VxX3ByaW50ZihzLCAiIyBBTExPQyAgVFlQRSAgUkVRICAgR0lWRU4gIEZMQUdTICAgICAiCi0JCQkiICAgICAgUE9JTlRFUiAgICAgICAgIE5PREUgICAgQ0FMTEVSXG4iKTsKLQlzZXFfcHJpbnRmKHMsICIjIEZSRUUgICB8ICAgICAgfCAgICAgfCAgICAgICB8ICAgICAgICIKLQkJCSIgICAgICAgfCAgIHwgICAgICAgICAgICB8ICAgICAgICB8XG4iKTsKLQlzZXFfcHJpbnRmKHMsICIjIHxcblxuIik7Ci19Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBnaXZlIHRoZSBvcmlnaW5hbCBvdXRwdXQgZnJvbSBrbWVtdHJhY2UsCi0gKiBwbHVzIHRoZSBvcmlnaW4gQ1BVLCBzaW5jZSByZW9yZGVyaW5nIG9jY3VycyBpbi1rZXJuZWwgbm93LgotICovCi0KLSNkZWZpbmUgS01FTVRSQUNFX1VTRVJfQUxMT0MJMAotI2RlZmluZSBLTUVNVFJBQ0VfVVNFUl9GUkVFCTEKLQotc3RydWN0IGttZW10cmFjZV91c2VyX2V2ZW50IHsKLQl1OAkJCWV2ZW50X2lkOwotCXU4CQkJdHlwZV9pZDsKLQl1MTYJCQlldmVudF9zaXplOwotCXUzMgkJCWNwdTsKLQl1NjQJCQl0aW1lc3RhbXA7Ci0JdW5zaWduZWQgbG9uZwkJY2FsbF9zaXRlOwotCXVuc2lnbmVkIGxvbmcJCXB0cjsKLX07Ci0KLXN0cnVjdCBrbWVtdHJhY2VfdXNlcl9ldmVudF9hbGxvYyB7Ci0Jc2l6ZV90CQkJYnl0ZXNfcmVxOwotCXNpemVfdAkJCWJ5dGVzX2FsbG9jOwotCXVuc2lnbmVkCQlnZnBfZmxhZ3M7Ci0JaW50CQkJbm9kZTsKLX07Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLAotCQkgICAgICBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShlbnRyeSwgaXRlci0+ZW50KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVwRiBwdHIgJWx1ICIKLQkgICAgImJ5dGVzX3JlcSAlbHUgYnl0ZXNfYWxsb2MgJWx1IGdmcF9mbGFncyAlbHUgbm9kZSAlZFxuIiwKLQkgICAgZW50cnktPnR5cGVfaWQsICh2b2lkICopZW50cnktPmNhbGxfc2l0ZSwgKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0ciwKLQkgICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ5dGVzX3JlcSwgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ5dGVzX2FsbG9jLAotCSAgICAodW5zaWduZWQgbG9uZyllbnRyeS0+Z2ZwX2ZsYWdzLCBlbnRyeS0+bm9kZSk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2ZyZWUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCSAgICAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5OwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShlbnRyeSwgaXRlci0+ZW50KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVwRiBwdHIgJWx1XG4iLAotCQkJICAgICAgIGVudHJ5LT50eXBlX2lkLCAodm9pZCAqKWVudHJ5LT5jYWxsX3NpdGUsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0cik7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCQkgICBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCBrbWVtdHJhY2VfYWxsb2NfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBrbWVtdHJhY2VfdXNlcl9ldmVudCAqZXY7Ci0Jc3RydWN0IGttZW10cmFjZV91c2VyX2V2ZW50X2FsbG9jICpldl9hbGxvYzsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGVudHJ5LCBpdGVyLT5lbnQpOwotCi0JZXYgPSB0cmFjZV9zZXFfcmVzZXJ2ZShzLCBzaXplb2YoKmV2KSk7Ci0JaWYgKCFldikKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JZXYtPmV2ZW50X2lkCQk9IEtNRU1UUkFDRV9VU0VSX0FMTE9DOwotCWV2LT50eXBlX2lkCQk9IGVudHJ5LT50eXBlX2lkOwotCWV2LT5ldmVudF9zaXplCQk9IHNpemVvZigqZXYpICsgc2l6ZW9mKCpldl9hbGxvYyk7Ci0JZXYtPmNwdQkJCT0gaXRlci0+Y3B1OwotCWV2LT50aW1lc3RhbXAJCT0gaXRlci0+dHM7Ci0JZXYtPmNhbGxfc2l0ZQkJPSBlbnRyeS0+Y2FsbF9zaXRlOwotCWV2LT5wdHIJCQk9ICh1bnNpZ25lZCBsb25nKWVudHJ5LT5wdHI7Ci0KLQlldl9hbGxvYyA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXZfYWxsb2MpKTsKLQlpZiAoIWV2X2FsbG9jKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlldl9hbGxvYy0+Ynl0ZXNfcmVxCT0gZW50cnktPmJ5dGVzX3JlcTsKLQlldl9hbGxvYy0+Ynl0ZXNfYWxsb2MJPSBlbnRyeS0+Ynl0ZXNfYWxsb2M7Ci0JZXZfYWxsb2MtPmdmcF9mbGFncwk9IGVudHJ5LT5nZnBfZmxhZ3M7Ci0JZXZfYWxsb2MtPm5vZGUJCT0gZW50cnktPm5vZGU7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWttZW10cmFjZV9wcmludF9mcmVlX3VzZXIoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MsCi0JCQkgIHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpCi17Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0Jc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qga21lbXRyYWNlX3VzZXJfZXZlbnQgKmV2OwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7Ci0KLQlldiA9IHRyYWNlX3NlcV9yZXNlcnZlKHMsIHNpemVvZigqZXYpKTsKLQlpZiAoIWV2KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlldi0+ZXZlbnRfaWQJCT0gS01FTVRSQUNFX1VTRVJfRlJFRTsKLQlldi0+dHlwZV9pZAkJPSBlbnRyeS0+dHlwZV9pZDsKLQlldi0+ZXZlbnRfc2l6ZQkJPSBzaXplb2YoKmV2KTsKLQlldi0+Y3B1CQkJPSBpdGVyLT5jcHU7Ci0JZXYtPnRpbWVzdGFtcAkJPSBpdGVyLT50czsKLQlldi0+Y2FsbF9zaXRlCQk9IGVudHJ5LT5jYWxsX3NpdGU7Ci0JZXYtPnB0cgkJCT0gKHVuc2lnbmVkIGxvbmcpZW50cnktPnB0cjsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLS8qIFRoZSB0d28gb3RoZXIgZm9sbG93aW5nIHByb3ZpZGUgYSBtb3JlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlpbnQgcmV0OwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZW50cnksIGl0ZXItPmVudCk7Ci0KLQkvKiBBbGxvYyBlbnRyeSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgKyAgICAgICIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBUeXBlICovCi0Jc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgewotCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICIpOwotCQlicmVhazsKLQljYXNlIEtNRU1UUkFDRV9UWVBFX0NBQ0hFOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJDICAgIik7Ci0JCWJyZWFrOwotCWNhc2UgS01FTVRSQUNFX1RZUEVfUEFHRVM6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlAgICAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICIpOwotCX0KLQotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBSZXF1ZXN0ZWQgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNHp1ICAgIiwgZW50cnktPmJ5dGVzX3JlcSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIEFsbG9jYXRlZCAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0enUgICAiLCBlbnRyeS0+Ynl0ZXNfYWxsb2MpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBGbGFncwotCSAqIFRPRE86IHdvdWxkIGJlIGJldHRlciB0byBzZWUgdGhlIG5hbWUgb2YgdGhlIEdGUCBmbGFnIG5hbWVzCi0JICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTA4eCAgICIsIGVudHJ5LT5nZnBfZmxhZ3MpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBQb2ludGVyIHRvIGFsbG9jYXRlZCAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjB4JXR4ICAgIiwgKHB0cmRpZmZfdCllbnRyeS0+cHRyKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JLyogTm9kZSBhbmQgY2FsbCBzaXRlKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNGQgICAlcGZcbiIsIGVudHJ5LT5ub2RlLAotCQkJCQkJICh2b2lkICopZW50cnktPmNhbGxfc2l0ZSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAota21lbXRyYWNlX3ByaW50X2ZyZWVfY29tcHJlc3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0JaW50IHJldDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGVudHJ5LCBpdGVyLT5lbnQpOwotCi0JLyogRnJlZSBlbnRyeSAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgLSAgICAgICIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBUeXBlICovCi0Jc3dpdGNoIChlbnRyeS0+dHlwZV9pZCkgewotCWNhc2UgS01FTVRSQUNFX1RZUEVfS01BTExPQzoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiSyAgICAgIik7Ci0JCWJyZWFrOwotCWNhc2UgS01FTVRSQUNFX1RZUEVfQ0FDSEU6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIkMgICAgICIpOwotCQlicmVhazsKLQljYXNlIEtNRU1UUkFDRV9UWVBFX1BBR0VTOgotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJQICAgICAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPyAgICAgIik7Ci0JfQotCi0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIFNraXAgcmVxdWVzdGVkL2FsbG9jYXRlZC9mbGFncyAqLwotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAgICAgICAgICAgICAgICAgICAgICAgIik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCS8qIFBvaW50ZXIgdG8gYWxsb2NhdGVkICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMHgldHggICAiLCAocHRyZGlmZl90KWVudHJ5LT5wdHIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkvKiBTa2lwIG5vZGUgYW5kIHByaW50IGNhbGwgc2l0ZSovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICVwZlxuIiwgKHZvaWQgKillbnRyeS0+Y2FsbF9zaXRlKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGttZW10cmFjZV9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCi0JaWYgKCEoa21lbV90cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfS01FTV9PUFRfTUlOSU1BTCkpCi0JCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0tNRU1fQUxMT0M6Ci0JCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfYWxsb2NfY29tcHJlc3MoaXRlcik7Ci0JY2FzZSBUUkFDRV9LTUVNX0ZSRUU6Ci0JCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfZnJlZV9jb21wcmVzcyhpdGVyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBrbWVtX3RyYWNlX2FsbG9jX2Z1bmNzID0gewotCS50cmFjZQkJCT0ga21lbXRyYWNlX3ByaW50X2FsbG9jLAotCS5iaW5hcnkJCQk9IGttZW10cmFjZV9wcmludF9hbGxvY191c2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBrbWVtX3RyYWNlX2FsbG9jID0gewotCS50eXBlCQkJPSBUUkFDRV9LTUVNX0FMTE9DLAotCS5mdW5jcwkJCT0gJmttZW1fdHJhY2VfYWxsb2NfZnVuY3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBrbWVtX3RyYWNlX2ZyZWVfZnVuY3MgPSB7Ci0JLnRyYWNlCQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZSwKLQkuYmluYXJ5CQkJPSBrbWVtdHJhY2VfcHJpbnRfZnJlZV91c2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCBrbWVtX3RyYWNlX2ZyZWUgPSB7Ci0JLnR5cGUJCQk9IFRSQUNFX0tNRU1fRlJFRSwKLQkuZnVuY3MJCQk9ICZrbWVtX3RyYWNlX2ZyZWVfZnVuY3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlciBrbWVtX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQkJPSAia21lbXRyYWNlIiwKLQkuaW5pdAkJCT0ga21lbV90cmFjZV9pbml0LAotCS5yZXNldAkJCT0ga21lbV90cmFjZV9yZXNldCwKLQkucHJpbnRfbGluZQkJPSBrbWVtdHJhY2VfcHJpbnRfbGluZSwKLQkucHJpbnRfaGVhZGVyCQk9IGttZW10cmFjZV9oZWFkZXJzLAotCS5mbGFncwkJCT0gJmttZW1fdHJhY2VyX2ZsYWdzCi19OwotCi12b2lkIGttZW10cmFjZV9pbml0KHZvaWQpCi17Ci0JLyogZWFybGllc3Qgb3Bwb3J0dW5pdHkgdG8gc3RhcnQga21lbSB0cmFjaW5nICovCi19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfa21lbV90cmFjZXIodm9pZCkKLXsKLQlpZiAoIXJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgma21lbV90cmFjZV9hbGxvYykpIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKCFyZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJmttZW1fdHJhY2VfZnJlZSkpIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGttZW0gZXZlbnRzXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYgKHJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpICE9IDApIHsKLQkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIHRoZSBrbWVtIHRyYWNlclxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotZGV2aWNlX2luaXRjYWxsKGluaXRfa21lbV90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwppbmRleCAxZGE3YjZlLi4zNjMyY2U4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYworKysgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYwpAQCAtNDQzLDYgKzQ0Myw3IEBACiAgKi8KIHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1IHsKIAlpbnQJCQkJY3B1OworCWF0b21pY190CQkJcmVjb3JkX2Rpc2FibGVkOwogCXN0cnVjdCByaW5nX2J1ZmZlcgkJKmJ1ZmZlcjsKIAlzcGlubG9ja190CQkJcmVhZGVyX2xvY2s7CS8qIHNlcmlhbGl6ZSByZWFkZXJzICovCiAJYXJjaF9zcGlubG9ja190CQkJbG9jazsKQEAgLTQ2Miw3ICs0NjMsNiBAQAogCXVuc2lnbmVkIGxvbmcJCQlyZWFkOwogCXU2NAkJCQl3cml0ZV9zdGFtcDsKIAl1NjQJCQkJcmVhZF9zdGFtcDsKLQlhdG9taWNfdAkJCXJlY29yZF9kaXNhYmxlZDsKIH07CiAKIHN0cnVjdCByaW5nX2J1ZmZlciB7CkBAIC0yMjQyLDggKzIyNDIsNiBAQAogCiAjZW5kaWYKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKGludCwgcmJfbmVlZF9yZXNjaGVkKTsKLQogLyoqCiAgKiByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUgLSByZXNlcnZlIGEgcGFydCBvZiB0aGUgYnVmZmVyCiAgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIgdG8gcmVzZXJ2ZSBmcm9tCkBAIC0yMjY0LDEzICsyMjYyLDEzIEBACiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlpbnQgY3B1LCByZXNjaGVkOworCWludCBjcHU7CiAKIAlpZiAocmluZ19idWZmZXJfZmxhZ3MgIT0gUkJfQlVGRkVSU19PTikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBJZiB3ZSBhcmUgdHJhY2luZyBzY2hlZHVsZSwgd2UgZG9uJ3Qgd2FudCB0byByZWN1cnNlICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCiAJaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnJlY29yZF9kaXNhYmxlZCkpCiAJCWdvdG8gb3V0X25vY2hlY2s7CkBAIC0yMjk1LDIxICsyMjkzLDEzIEBACiAJaWYgKCFldmVudCkKIAkJZ290byBvdXQ7CiAKLQkvKgotCSAqIE5lZWQgdG8gc3RvcmUgcmVzY2hlZCBzdGF0ZSBvbiB0aGlzIGNwdS4KLQkgKiBPbmx5IHRoZSBmaXJzdCBuZWVkcyB0by4KLQkgKi8KLQotCWlmIChwcmVlbXB0X2NvdW50KCkgPT0gMSkKLQkJcGVyX2NwdShyYl9uZWVkX3Jlc2NoZWQsIGNwdSkgPSByZXNjaGVkOwotCiAJcmV0dXJuIGV2ZW50OwogCiAgb3V0OgogCXRyYWNlX3JlY3Vyc2l2ZV91bmxvY2soKTsKIAogIG91dF9ub2NoZWNrOgotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUpOwpAQCAtMjM1NSwxMyArMjM0NSw3IEBACiAKIAl0cmFjZV9yZWN1cnNpdmVfdW5sb2NrKCk7CiAKLQkvKgotCSAqIE9ubHkgdGhlIGxhc3QgcHJlZW1wdCBjb3VudCBuZWVkcyB0byByZXN0b3JlIHByZWVtcHRpb24uCi0JICovCi0JaWYgKHByZWVtcHRfY291bnQoKSA9PSAxKQotCQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocGVyX2NwdShyYl9uZWVkX3Jlc2NoZWQsIGNwdSkpOwotCWVsc2UKLQkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDY5LDEzICsyNDUzLDcgQEAKIAogCXRyYWNlX3JlY3Vyc2l2ZV91bmxvY2soKTsKIAotCS8qCi0JICogT25seSB0aGUgbGFzdCBwcmVlbXB0IGNvdW50IG5lZWRzIHRvIHJlc3RvcmUgcHJlZW1wdGlvbi4KLQkgKi8KLQlpZiAocHJlZW1wdF9jb3VudCgpID09IDEpCi0JCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShwZXJfY3B1KHJiX25lZWRfcmVzY2hlZCwgY3B1KSk7Ci0JZWxzZQotCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2Rpc2NhcmRfY29tbWl0KTsKQEAgLTI1MDEsMTIgKzI0NzksMTIgQEAKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXZvaWQgKmJvZHk7CiAJaW50IHJldCA9IC1FQlVTWTsKLQlpbnQgY3B1LCByZXNjaGVkOworCWludCBjcHU7CiAKIAlpZiAocmluZ19idWZmZXJfZmxhZ3MgIT0gUkJfQlVGRkVSU19PTikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIAogCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5yZWNvcmRfZGlzYWJsZWQpKQogCQlnb3RvIG91dDsKQEAgLTI1MzYsNyArMjUxNCw3IEBACiAKIAlyZXQgPSAwOwogIG91dDoKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggZDY3MzZiOS4uYmExNGEyMiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTM0MSw3ICszNDEsNyBAQAogLyogdHJhY2VfZmxhZ3MgaG9sZHMgdHJhY2Vfb3B0aW9ucyBkZWZhdWx0IHZhbHVlcyAqLwogdW5zaWduZWQgbG9uZyB0cmFjZV9mbGFncyA9IFRSQUNFX0lURVJfUFJJTlRfUEFSRU5UIHwgVFJBQ0VfSVRFUl9QUklOVEsgfAogCVRSQUNFX0lURVJfQU5OT1RBVEUgfCBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTyB8IFRSQUNFX0lURVJfU0xFRVBfVElNRSB8Ci0JVFJBQ0VfSVRFUl9HUkFQSF9USU1FOworCVRSQUNFX0lURVJfR1JBUEhfVElNRSB8IFRSQUNFX0lURVJfUkVDT1JEX0NNRDsKIAogc3RhdGljIGludCB0cmFjZV9zdG9wX2NvdW50Owogc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjaW5nX3N0YXJ0X2xvY2spOwpAQCAtNDI1LDYgKzQyNSw3IEBACiAJImxhdGVuY3ktZm9ybWF0IiwKIAkic2xlZXAtdGltZSIsCiAJImdyYXBoLXRpbWUiLAorCSJyZWNvcmQtY21kIiwKIAlOVUxMCiB9OwogCkBAIC02NTYsNiArNjU3LDEwIEBACiAJCXJldHVybjsKIAogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKKwlpZiAoIWN1cnJlbnRfdHJhY2UtPnVzZV9tYXhfdHIpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQogCWFyY2hfc3Bpbl9sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwogCiAJdHItPmJ1ZmZlciA9IG1heF90ci5idWZmZXI7CkBAIC02ODIsNiArNjg3LDExIEBACiAJCXJldHVybjsKIAogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKKwlpZiAoIWN1cnJlbnRfdHJhY2UtPnVzZV9tYXhfdHIpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm47CisJfQorCiAJYXJjaF9zcGluX2xvY2soJmZ0cmFjZV9tYXhfbG9jayk7CiAKIAlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKQEAgLTcyNiwxOCArNzM2LDExIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoc3RybGVuKHR5cGUtPm5hbWUpID4gTUFYX1RSQUNFUl9TSVpFKSB7CisJaWYgKHN0cmxlbih0eXBlLT5uYW1lKSA+PSBNQVhfVFJBQ0VSX1NJWkUpIHsKIAkJcHJfaW5mbygiVHJhY2VyIGhhcyBhIG5hbWUgbG9uZ2VyIHRoYW4gJWRcbiIsIE1BWF9UUkFDRVJfU0laRSk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQkvKgotCSAqIFdoZW4gdGhpcyBnZXRzIGNhbGxlZCB3ZSBob2xkIHRoZSBCS0wgd2hpY2ggbWVhbnMgdGhhdAotCSAqIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFZhcmlvdXMgdHJhY2Ugc2VsZnRlc3RzIGhvd2V2ZXIKLQkgKiBuZWVkIHRvIGRpc2FibGUgYW5kIGVuYWJsZSBwcmVlbXB0aW9uIGZvciBzdWNjZXNzZnVsIHRlc3RzLgotCSAqIFNvIHdlIGRyb3AgdGhlIEJLTCBoZXJlIGFuZCBncmFiIGl0IGFmdGVyIHRoZSB0ZXN0cyBhZ2Fpbi4KLQkgKi8KLQl1bmxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKIAl0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgPSB0cnVlOwpAQCAtODE5LDcgKzgyMiw2IEBACiAjZW5kaWYKIAogIG91dF91bmxvY2s6Ci0JbG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzI4LDYxICsxMzMwLDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TVEFDS1RSQUNFICovCiAKLXN0YXRpYyB2b2lkCi1mdHJhY2VfdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCi0JCSAgICAgaW50IHBjKQotewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9zcGVjaWFsOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IF9fdHI7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOwotCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICplbnRyeTsKLQotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX1NQRUNJQUwsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+YXJnMQkJCT0gYXJnMTsKLQllbnRyeS0+YXJnMgkJCT0gYXJnMjsKLQllbnRyeS0+YXJnMwkJCT0gYXJnMzsKLQotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCBwYyk7Ci19Ci0KLXZvaWQKLV9fdHJhY2Vfc3BlY2lhbCh2b2lkICpfX3RyLCB2b2lkICpfX2RhdGEsCi0JCXVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpCi17Ci0JZnRyYWNlX3RyYWNlX3NwZWNpYWwoX190ciwgYXJnMSwgYXJnMiwgYXJnMywgcHJlZW1wdF9jb3VudCgpKTsKLX0KLQotdm9pZAotZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKLXsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNwdTsKLQlpbnQgcGM7Ci0KLQlpZiAodHJhY2luZ19kaXNhYmxlZCkKLQkJcmV0dXJuOwotCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7Ci0JZGF0YSA9IHRyLT5kYXRhW2NwdV07Ci0KLQlpZiAobGlrZWx5KGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCkgPT0gMSkpCi0JCWZ0cmFjZV90cmFjZV9zcGVjaWFsKHRyLCBhcmcxLCBhcmcyLCBhcmczLCBwYyk7Ci0KLQlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCiAvKioKICAqIHRyYWNlX3ZicHJpbnRrIC0gd3JpdGUgYmluYXJ5IG1zZyB0byB0cmFjaW5nIGJ1ZmZlcgogICoKQEAgLTE0MDEsNyArMTM0OCw2IEBACiAJc3RydWN0IGJwcmludF9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZGlzYWJsZTsKLQlpbnQgcmVzY2hlZDsKIAlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKIAogCWlmICh1bmxpa2VseSh0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgfHwgdHJhY2luZ19kaXNhYmxlZCkpCkBAIC0xNDExLDcgKzEzNTcsNyBAQAogCXBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKIAogCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwogCkBAIC0xNDQ5LDcgKzEzOTUsNyBAQAogCiBvdXQ6CiAJYXRvbWljX2RlY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCXVucGF1c2VfZ3JhcGhfdHJhY2luZygpOwogCiAJcmV0dXJuIGxlbjsKQEAgLTIzODYsNiArMjMzMiw3IEBACiAJLm9wZW4JCT0gc2hvd190cmFjZXNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogfTsKIAogLyoKQEAgLTI0NzksNiArMjQyNiw3IEBACiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19jcHVtYXNrX3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfY3B1bWFza193cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgaW50IHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTI1NTQsNiArMjUwMiw5IEBACiAJCXRyYWNlX2ZsYWdzIHw9IG1hc2s7CiAJZWxzZQogCQl0cmFjZV9mbGFncyAmPSB+bWFzazsKKworCWlmIChtYXNrID09IFRSQUNFX0lURVJfUkVDT1JEX0NNRCkKKwkJdHJhY2VfZXZlbnRfZW5hYmxlX2NtZF9yZWNvcmQoZW5hYmxlZCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNjQ1LDYgKzI1OTYsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19yZWFkbWVfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRtZV9yZWFkLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0yNjk1LDYgKzI2NDcsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19zYXZlZF9jbWRsaW5lc19mb3BzID0gewogICAgIC5vcGVuICAgICAgID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAgICAgLnJlYWQgICAgICAgPSB0cmFjaW5nX3NhdmVkX2NtZGxpbmVzX3JlYWQsCisgICAgLmxsc2Vlawk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgc3NpemVfdApAQCAtMjc5MCw2ICsyNzQzLDkgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCWlmICghY3VycmVudF90cmFjZS0+dXNlX21heF90cikKKwkJZ290byBvdXQ7CisKIAlyZXQgPSByaW5nX2J1ZmZlcl9yZXNpemUobWF4X3RyLmJ1ZmZlciwgc2l6ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJaW50IHI7CkBAIC0yODE3LDExICsyNzczLDE0IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbWF4X3RyLmVudHJpZXMgPSBzaXplOworIG91dDoKIAlnbG9iYWxfdHJhY2UuZW50cmllcyA9IHNpemU7CiAKIAlyZXR1cm4gcmV0OwogfQogCisKIC8qKgogICogdHJhY2luZ191cGRhdGVfYnVmZmVycyAtIHVzZWQgYnkgdHJhY2luZyBmYWNpbGl0eSB0byBleHBhbmQgcmluZyBidWZmZXJzCiAgKgpAQCAtMjg4MiwxMiArMjg0MSwyNiBAQAogCXRyYWNlX2JyYW5jaF9kaXNhYmxlKCk7CiAJaWYgKGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZS0+cmVzZXQpCiAJCWN1cnJlbnRfdHJhY2UtPnJlc2V0KHRyKTsKLQorCWlmIChjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UtPnVzZV9tYXhfdHIpIHsKKwkJLyoKKwkJICogV2UgZG9uJ3QgZnJlZSB0aGUgcmluZyBidWZmZXIuIGluc3RlYWQsIHJlc2l6ZSBpdCBiZWNhdXNlCisJCSAqIFRoZSBtYXhfdHIgcmluZyBidWZmZXIgaGFzIHNvbWUgc3RhdGUgKGUuZy4gcmluZy0+Y2xvY2spIGFuZAorCQkgKiB3ZSB3YW50IHByZXNlcnZlIGl0LgorCQkgKi8KKwkJcmluZ19idWZmZXJfcmVzaXplKG1heF90ci5idWZmZXIsIDEpOworCQltYXhfdHIuZW50cmllcyA9IDE7CisJfQogCWRlc3Ryb3lfdHJhY2Vfb3B0aW9uX2ZpbGVzKHRvcHRzKTsKIAogCWN1cnJlbnRfdHJhY2UgPSB0OwogCiAJdG9wdHMgPSBjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGVzKGN1cnJlbnRfdHJhY2UpOworCWlmIChjdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7CisJCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCW1heF90ci5lbnRyaWVzID0gZ2xvYmFsX3RyYWNlLmVudHJpZXM7CisJfQogCiAJaWYgKHQtPmluaXQpIHsKIAkJcmV0ID0gdHJhY2VyX2luaXQodCwgdHIpOwpAQCAtMzAyNCw2ICsyOTk3LDcgQEAKIAlpZiAoaXRlci0+dHJhY2UtPnBpcGVfb3BlbikKIAkJaXRlci0+dHJhY2UtPnBpcGVfb3BlbihpdGVyKTsKIAorCW5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOwogb3V0OgogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJcmV0dXJuIHJldDsKQEAgLTM0NjksNyArMzQ0Myw2IEBACiAJfQogCiAJdHJhY2luZ19zdGFydCgpOwotCW1heF90ci5lbnRyaWVzID0gZ2xvYmFsX3RyYWNlLmVudHJpZXM7CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogCXJldHVybiBjbnQ7CkBAIC0zNTgyLDE4ICszNTU1LDIxIEBACiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19tYXhfbGF0X3JlYWQsCiAJLndyaXRlCQk9IHRyYWNpbmdfbWF4X2xhdF93cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2N0cmxfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX2N0cmxfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19jdHJsX3dyaXRlLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNldF90cmFjZXJfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3NldF90cmFjZV9yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX3NldF90cmFjZV93cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3BpcGVfZm9wcyA9IHsKQEAgLTM2MDIsMTcgKzM1NzgsMjAgQEAKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRfcGlwZSwKIAkuc3BsaWNlX3JlYWQJPSB0cmFjaW5nX3NwbGljZV9yZWFkX3BpcGUsCiAJLnJlbGVhc2UJPSB0cmFjaW5nX3JlbGVhc2VfcGlwZSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZW50cmllc19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfZW50cmllc19yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX2VudHJpZXNfd3JpdGUsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19tYXJrX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLndyaXRlCQk9IHRyYWNpbmdfbWFya193cml0ZSwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZV9jbG9ja19mb3BzID0gewpAQCAtMzkxOCw2ICszODk3LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3N0YXRzX3JlYWQsCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQpAQCAtMzk1NCw2ICszOTM0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZHluX2luZm9fZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRfZHluX2luZm8sCisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKICNlbmRpZgogCkBAIC00MTA3LDYgKzQwODgsNyBAQAogCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQgPSB0cmFjZV9vcHRpb25zX3JlYWQsCiAJLndyaXRlID0gdHJhY2Vfb3B0aW9uc193cml0ZSwKKwkubGxzZWVrCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC00MTU4LDYgKzQxNDAsNyBAQAogCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQgPSB0cmFjZV9vcHRpb25zX2NvcmVfcmVhZCwKIAkud3JpdGUgPSB0cmFjZV9vcHRpb25zX2NvcmVfd3JpdGUsCisJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCiBzdHJ1Y3QgZGVudHJ5ICp0cmFjZV9jcmVhdGVfZmlsZShjb25zdCBjaGFyICpuYW1lLApAQCAtNDM0Nyw5ICs0MzMwLDYgQEAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiZHluX2Z0cmFjZV90b3RhbF9pbmZvIiwgMDQ0NCwgZF90cmFjZXIsCiAJCQkmZnRyYWNlX3VwZGF0ZV90b3RfY250LCAmdHJhY2luZ19keW5faW5mb19mb3BzKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19TWVNQUk9GX1RSQUNFUgotCWluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhkX3RyYWNlcik7Ci0jZW5kaWYKIAogCWNyZWF0ZV90cmFjZV9vcHRpb25zX2RpcigpOwogCkBAIC00NTc2LDE2ICs0NTU2LDE0IEBACiAKIAogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHJpbmdfYnVmX3NpemUsCi0JCQkJCSAgICAgVFJBQ0VfQlVGRkVSX0ZMQUdTKTsKKwltYXhfdHIuYnVmZmVyID0gcmluZ19idWZmZXJfYWxsb2MoMSwgVFJBQ0VfQlVGRkVSX0ZMQUdTKTsKIAlpZiAoIW1heF90ci5idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0cmFjZXI6IGZhaWxlZCB0byBhbGxvY2F0ZSBtYXggcmluZyBidWZmZXIhXG4iKTsKIAkJV0FSTl9PTigxKTsKIAkJcmluZ19idWZmZXJfZnJlZShnbG9iYWxfdHJhY2UuYnVmZmVyKTsKIAkJZ290byBvdXRfZnJlZV9jcHVtYXNrOwogCX0KLQltYXhfdHIuZW50cmllcyA9IHJpbmdfYnVmZmVyX3NpemUobWF4X3RyLmJ1ZmZlcik7Ci0JV0FSTl9PTihtYXhfdHIuZW50cmllcyAhPSBnbG9iYWxfdHJhY2UuZW50cmllcyk7CisJbWF4X3RyLmVudHJpZXMgPSAxOwogI2VuZGlmCiAKIAkvKiBBbGxvY2F0ZSB0aGUgZmlyc3QgcGFnZSBmb3IgYWxsIGJ1ZmZlcnMgKi8KQEAgLTQ1OTgsOSArNDU3Niw2IEBACiAKIAlyZWdpc3Rlcl90cmFjZXIoJm5vcF90cmFjZSk7CiAJY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7Ci0jaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCi0JcmVnaXN0ZXJfdHJhY2VyKCZib290X3RyYWNlcik7Ci0jZW5kaWYKIAkvKiBBbGwgc2VlbXMgT0ssIGVuYWJsZSB0cmFjaW5nICovCiAJdHJhY2luZ19kaXNhYmxlZCA9IDA7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5oIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKaW5kZXggMDYwNWZjMC4uZDM5YjNjNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmgKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmgKQEAgLTksMTAgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21taW90cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDx0cmFjZS9ib290Lmg+Ci0jaW5jbHVkZSA8bGludXgva21lbXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaHdfYnJlYWtwb2ludC5oPgotCiAjaW5jbHVkZSA8bGludXgvdHJhY2Vfc2VxLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAKQEAgLTI1LDMwICsyMiwxNyBAQAogCVRSQUNFX1NUQUNLLAogCVRSQUNFX1BSSU5ULAogCVRSQUNFX0JQUklOVCwKLQlUUkFDRV9TUEVDSUFMLAogCVRSQUNFX01NSU9fUlcsCiAJVFJBQ0VfTU1JT19NQVAsCiAJVFJBQ0VfQlJBTkNILAotCVRSQUNFX0JPT1RfQ0FMTCwKLQlUUkFDRV9CT09UX1JFVCwKIAlUUkFDRV9HUkFQSF9SRVQsCiAJVFJBQ0VfR1JBUEhfRU5ULAogCVRSQUNFX1VTRVJfU1RBQ0ssCi0JVFJBQ0VfS01FTV9BTExPQywKLQlUUkFDRV9LTUVNX0ZSRUUsCiAJVFJBQ0VfQkxLLAotCVRSQUNFX0tTWU0sCiAKIAlfX1RSQUNFX0xBU1RfVFlQRSwKIH07CiAKLWVudW0ga21lbXRyYWNlX3R5cGVfaWQgewotCUtNRU1UUkFDRV9UWVBFX0tNQUxMT0MgPSAwLAkvKiBrbWFsbG9jKCkgb3Iga2ZyZWUoKS4gKi8KLQlLTUVNVFJBQ0VfVFlQRV9DQUNIRSwJCS8qIGttZW1fY2FjaGVfKigpLiAqLwotCUtNRU1UUkFDRV9UWVBFX1BBR0VTLAkJLyogX19nZXRfZnJlZV9wYWdlcygpIGFuZCBmcmllbmRzLiAqLwotfTsKLQotZXh0ZXJuIHN0cnVjdCB0cmFjZXIgYm9vdF90cmFjZXI7CiAKICN1bmRlZiBfX2ZpZWxkCiAjZGVmaW5lIF9fZmllbGQodHlwZSwgaXRlbSkJCXR5cGUJaXRlbTsKQEAgLTIwNCwyMyArMTg4LDE1IEBACiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHVzZXJzdGFja19lbnRyeSwgVFJBQ0VfVVNFUl9TVEFDSyk7XAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBwcmludF9lbnRyeSwgVFJBQ0VfUFJJTlQpOwlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGJwcmludF9lbnRyeSwgVFJBQ0VfQlBSSU5UKTsJXAotCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBzcGVjaWFsX2VudHJ5LCAwKTsJCVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfbW1pb3RyYWNlX3J3LAkJXAogCQkJICBUUkFDRV9NTUlPX1JXKTsJCQkJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwLAkJXAogCQkJICBUUkFDRV9NTUlPX01BUCk7CQkJCVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsLCBUUkFDRV9CT09UX0NBTEwpO1wKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfYm9vdF9yZXQsIFRSQUNFX0JPT1RfUkVUKTtcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX2JyYW5jaCwgVFJBQ0VfQlJBTkNIKTsgXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5LAlcCiAJCQkgIFRSQUNFX0dSQVBIX0VOVCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnksCVwKIAkJCSAgVFJBQ0VfR1JBUEhfUkVUKTsJCVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5LAlcCi0JCQkgIFRSQUNFX0tNRU1fQUxMT0MpOwlcCi0JCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5LAlcCi0JCQkgIFRSQUNFX0tNRU1fRlJFRSk7CVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga3N5bV90cmFjZV9lbnRyeSwgVFJBQ0VfS1NZTSk7XAogCQlfX2Z0cmFjZV9iYWRfdHlwZSgpOwkJCQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTI5OCw2ICsyNzQsNyBAQAogCXN0cnVjdCB0cmFjZXIJCSpuZXh0OwogCWludAkJCXByaW50X21heDsKIAlzdHJ1Y3QgdHJhY2VyX2ZsYWdzCSpmbGFnczsKKwlpbnQJCQl1c2VfbWF4X3RyOwogfTsKIAogCkBAIC0zMTgsNyArMjk1LDYgQEAKIAkJCQkgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyk7CiAKIHN0cnVjdCBkZW50cnkgKnRyYWNpbmdfaW5pdF9kZW50cnkodm9pZCk7Ci12b2lkIGluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcik7CiAKIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudDsKIApAQCAtMzYzLDExICszMzksNiBAQAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKLXZvaWQgdHJhY2Vfc3BlY2lhbChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCi0JCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJICAgdW5zaWduZWQgbG9uZyBhcmczLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAogCQkgICAgdW5zaWduZWQgbG9uZyBpcCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLApAQCAtMzk4LDggKzM2OSw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkJXAogCWZvcl9lYWNoX2NwdShjcHUsIHRyYWNpbmdfYnVmZmVyX21hc2spCiAKLWV4dGVybiBpbnQgcHJvY2Vzc19uZXdfa3N5bV9lbnRyeShjaGFyICprc3ltbmFtZSwgaW50IG9wLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotCiBleHRlcm4gdW5zaWduZWQgbG9uZyBuc2Vjc190b191c2Vjcyh1bnNpZ25lZCBsb25nIG5zZWNzKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJhY2luZ190aHJlc2g7CkBAIC00NjksMTIgKzQzOCw4IEBACiAJCQkJCSBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIGV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9zY2hlZF9zd2l0Y2goc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgICAgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKLWV4dGVybiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9zeXNwcm9mKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAotCQkJCQkgICAgICAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfYnJhbmNoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7Ci1leHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfa3N5bShzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKLQkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogI2VuZGlmIC8qIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUICovCiAKIGV4dGVybiB2b2lkICpoZWFkX3BhZ2Uoc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSk7CkBAIC02MzYsNiArNjAxLDcgQEAKIAlUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UCQk9IDB4MjAwMDAsCiAJVFJBQ0VfSVRFUl9TTEVFUF9USU1FCQk9IDB4NDAwMDAsCiAJVFJBQ0VfSVRFUl9HUkFQSF9USU1FCQk9IDB4ODAwMDAsCisJVFJBQ0VfSVRFUl9SRUNPUkRfQ01ECQk9IDB4MTAwMDAwLAogfTsKIAogLyoKQEAgLTY0Nyw1NCArNjEzLDYgQEAKIAogZXh0ZXJuIHN0cnVjdCB0cmFjZXIgbm9wX3RyYWNlOwogCi0vKioKLSAqIGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUgLSBkaXNhYmxlIHByZWVtcHRpb24gc2NoZWR1bGVyIHNhZmUKLSAqCi0gKiBXaGVuIHRyYWNpbmcgY2FuIGhhcHBlbiBpbnNpZGUgdGhlIHNjaGVkdWxlciwgdGhlcmUgZXhpc3RzCi0gKiBjYXNlcyB0aGF0IHRoZSB0cmFjaW5nIG1pZ2h0IGhhcHBlbiBiZWZvcmUgdGhlIG5lZWRfcmVzY2hlZAotICogZmxhZyBpcyBjaGVja2VkLiBJZiB0aGlzIGhhcHBlbnMgYW5kIHRoZSB0cmFjZXIgY2FsbHMKLSAqIHByZWVtcHRfZW5hYmxlIChhZnRlciBhIGRpc2FibGUpLCBhIHNjaGVkdWxlIG1pZ2h0IHRha2UgcGxhY2UKLSAqIGNhdXNpbmcgYW4gaW5maW5pdGUgcmVjdXJzaW9uLgotICoKLSAqIFRvIHByZXZlbnQgdGhpcywgd2UgcmVhZCB0aGUgbmVlZF9yZXNjaGVkIGZsYWcgYmVmb3JlCi0gKiBkaXNhYmxpbmcgcHJlZW1wdGlvbi4gV2hlbiB3ZSB3YW50IHRvIGVuYWJsZSBwcmVlbXB0aW9uIHdlCi0gKiBjaGVjayB0aGUgZmxhZywgaWYgaXQgaXMgc2V0LCB0aGVuIHdlIGNhbGwgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZC4KLSAqIE90aGVyd2lzZSwgd2UgY2FsbCBwcmVlbXB0X2VuYWJsZS4KLSAqCi0gKiBUaGUgcmF0aW9uYWwgZm9yIGRvaW5nIHRoZSBhYm92ZSBpcyB0aGF0IGlmIG5lZWRfcmVzY2hlZCBpcyBzZXQKLSAqIGFuZCB3ZSBoYXZlIHlldCB0byByZXNjaGVkdWxlLCB3ZSBhcmUgZWl0aGVyIGluIGFuIGF0b21pYyBsb2NhdGlvbgotICogKHdoZXJlIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGZvciBzY2hlZHVsaW5nKSBvciB3ZSBhcmUgaW5zaWRlCi0gKiB0aGUgc2NoZWR1bGVyIGFuZCBkbyBub3Qgd2FudCB0byByZXNjaGVkLgotICovCi1zdGF0aWMgaW5saW5lIGludCBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKHZvaWQpCi17Ci0JaW50IHJlc2NoZWQ7Ci0KLQlyZXNjaGVkID0gbmVlZF9yZXNjaGVkKCk7Ci0JcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKLQotCXJldHVybiByZXNjaGVkOwotfQotCi0vKioKLSAqIGZ0cmFjZV9wcmVlbXB0X2VuYWJsZSAtIGVuYWJsZSBwcmVlbXB0aW9uIHNjaGVkdWxlciBzYWZlCi0gKiBAcmVzY2hlZDogdGhlIHJldHVybiB2YWx1ZSBmcm9tIGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUKLSAqCi0gKiBUaGlzIGlzIGEgc2NoZWR1bGVyIHNhZmUgd2F5IHRvIGVuYWJsZSBwcmVlbXB0aW9uIGFuZCBub3QgbWlzcwotICogYW55IHByZWVtcHRpb24gY2hlY2tzLiBUaGUgZGlzYWJsZWQgc2F2ZWQgdGhlIHN0YXRlIG9mIHByZWVtcHRpb24uCi0gKiBJZiByZXNjaGVkIGlzIHNldCwgdGhlbiB3ZSBhcmUgZWl0aGVyIGluc2lkZSBhbiBhdG9taWMgb3IKLSAqIGFyZSBpbnNpZGUgdGhlIHNjaGVkdWxlciAod2Ugd291bGQgaGF2ZSBhbHJlYWR5IHNjaGVkdWxlZAotICogb3RoZXJ3aXNlKS4gSW4gdGhpcyBjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBjYWxsIG5vcm1hbAotICogcHJlZW1wdF9lbmFibGUsIGJ1dCBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkIGluc3RlYWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcHJlZW1wdF9lbmFibGUoaW50IHJlc2NoZWQpCi17Ci0JaWYgKHJlc2NoZWQpCi0JCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWRfbm90cmFjZSgpOwotCWVsc2UKLQkJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwotfQotCiAjaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKIGV4dGVybiBpbnQgZW5hYmxlX2JyYW5jaF90cmFjaW5nKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9icmFuY2hfdHJhY2luZyh2b2lkKTsKQEAgLTc4NSw2ICs3MDMsOCBAQAogCWludCAJCQlwb3BfbjsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGZ0cmFjZV9jb21tb25fZmllbGRzOworCiBleHRlcm4gZW51bSByZWdleF90eXBlCiBmaWx0ZXJfcGFyc2VfcmVnZXgoY2hhciAqYnVmZiwgaW50IGxlbiwgY2hhciAqKnNlYXJjaCwgaW50ICpub3QpOwogZXh0ZXJuIHZvaWQgcHJpbnRfZXZlbnRfZmlsdGVyKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKQEAgLTgxNCw2ICs3MzQsOCBAQAogCXJldHVybiAwOwogfQogCitleHRlcm4gdm9pZCB0cmFjZV9ldmVudF9lbmFibGVfY21kX3JlY29yZChib29sIGVuYWJsZSk7CisKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggZXZlbnRfbXV0ZXg7CiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBmdHJhY2VfZXZlbnRzOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxZDVmMy4uMDAwMDAwMAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiByaW5nIGJ1ZmZlciBiYXNlZCBpbml0Y2FsbHMgdHJhY2VyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0KLSNpbmNsdWRlICJ0cmFjZS5oIgotI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpib290X3RyYWNlOwotc3RhdGljIGJvb2wgcHJlX2luaXRjYWxsc19maW5pc2hlZDsKLQotLyogVGVsbHMgdGhlIGJvb3QgdHJhY2VyIHRoYXQgdGhlIHByZV9zbXBfaW5pdGNhbGxzIGFyZSBmaW5pc2hlZC4KLSAqIFNvIHdlIGFyZSByZWFkeSAuCi0gKiBJdCBkb2Vzbid0IGVuYWJsZSBzY2hlZCBldmVudHMgdHJhY2luZyBob3dldmVyLgotICogWW91IGhhdmUgdG8gY2FsbCBlbmFibGVfYm9vdF90cmFjZSB0byBkbyBzby4KLSAqLwotdm9pZCBzdGFydF9ib290X3RyYWNlKHZvaWQpCi17Ci0JcHJlX2luaXRjYWxsc19maW5pc2hlZCA9IHRydWU7Ci19Ci0KLXZvaWQgZW5hYmxlX2Jvb3RfdHJhY2Uodm9pZCkKLXsKLQlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQotCQl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKLX0KLQotdm9pZCBkaXNhYmxlX2Jvb3RfdHJhY2Uodm9pZCkKLXsKLQlpZiAoYm9vdF90cmFjZSAmJiBwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQotCQl0cmFjaW5nX3N0b3Bfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwotfQotCi1zdGF0aWMgaW50IGJvb3RfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWJvb3RfdHJhY2UgPSB0cjsKLQotCWlmICghdHIpCi0JCXJldHVybiAwOwotCi0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci0KLQl0cmFjaW5nX3NjaGVkX3N3aXRjaF9hc3NpZ25fdHJhY2UodHIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLWluaXRjYWxsX2NhbGxfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsICpmaWVsZDsKLQlzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsICpjYWxsOwotCXU2NCB0czsKLQl1bnNpZ25lZCBsb25nIG5zZWNfcmVtOwotCWludCByZXQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCWNhbGwgPSAmZmllbGQtPmJvb3RfY2FsbDsKLQl0cyA9IGl0ZXItPnRzOwotCW5zZWNfcmVtID0gZG9fZGl2KHRzLCBOU0VDX1BFUl9TRUMpOwotCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyU1bGQuJTA5bGRdIGNhbGxpbmcgICVzIEAgJWlcbiIsCi0JCQkodW5zaWduZWQgbG9uZyl0cywgbnNlY19yZW0sIGNhbGwtPmZ1bmMsIGNhbGwtPmNhbGxlcik7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCWVsc2UKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1pbml0Y2FsbF9yZXRfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9yZXQgKmZpZWxkOwotCXN0cnVjdCBib290X3RyYWNlX3JldCAqaW5pdF9yZXQ7Ci0JdTY0IHRzOwotCXVuc2lnbmVkIGxvbmcgbnNlY19yZW07Ci0JaW50IHJldDsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JaW5pdF9yZXQgPSAmZmllbGQtPmJvb3RfcmV0OwotCXRzID0gaXRlci0+dHM7Ci0JbnNlY19yZW0gPSBkb19kaXYodHMsIE5TRUNfUEVSX1NFQyk7Ci0KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJTVsZC4lMDlsZF0gaW5pdGNhbGwgJXMgIgotCQkJInJldHVybmVkICVkIGFmdGVyICVsbHUgbXNlY3NcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgdHMsCi0JCQluc2VjX3JlbSwKLQkJCWluaXRfcmV0LT5mdW5jLCBpbml0X3JldC0+cmVzdWx0LCBpbml0X3JldC0+ZHVyYXRpb24pOwotCi0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQllbHNlCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBpbml0Y2FsbF9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCi0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgVFJBQ0VfQk9PVF9DQUxMOgotCQlyZXR1cm4gaW5pdGNhbGxfY2FsbF9wcmludF9saW5lKGl0ZXIpOwotCWNhc2UgVFJBQ0VfQk9PVF9SRVQ6Ci0JCXJldHVybiBpbml0Y2FsbF9yZXRfcHJpbnRfbGluZShpdGVyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7Ci0JfQotfQotCi1zdHJ1Y3QgdHJhY2VyIGJvb3RfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPQotewotCS5uYW1lCQk9ICJpbml0Y2FsbCIsCi0JLmluaXQJCT0gYm9vdF90cmFjZV9pbml0LAotCS5yZXNldAkJPSB0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzLAotCS5wcmludF9saW5lCT0gaW5pdGNhbGxfcHJpbnRfbGluZSwKLX07Ci0KLXZvaWQgdHJhY2VfYm9vdF9jYWxsKHN0cnVjdCBib290X3RyYWNlX2NhbGwgKmJ0LCBpbml0Y2FsbF90IGZuKQotewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZldmVudF9ib290X2NhbGw7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKLQlzdHJ1Y3QgdHJhY2VfYm9vdF9jYWxsICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKLQotCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCi0JCXJldHVybjsKLQotCS8qIEdldCBpdHMgbmFtZSBub3cgc2luY2UgdGhpcyBmdW5jdGlvbiBjb3VsZAotCSAqIGRpc2FwcGVhciBiZWNhdXNlIGl0IGlzIGluIHRoZSAuaW5pdCBzZWN0aW9uLgotCSAqLwotCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWJ1ZmZlciA9IHRyLT5idWZmZXI7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQk9PVF9DQUxMLAotCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCWVudHJ5LT5ib290X2NhbGwgPSAqYnQ7Ci0JaWYgKCFmaWx0ZXJfY2hlY2tfZGlzY2FyZChjYWxsLCBlbnRyeSwgYnVmZmVyLCBldmVudCkpCi0JCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIDAsIDApOwotIG91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCi12b2lkIHRyYWNlX2Jvb3RfcmV0KHN0cnVjdCBib290X3RyYWNlX3JldCAqYnQsIGluaXRjYWxsX3QgZm4pCi17Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50X2Jvb3RfcmV0OwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0Jc3RydWN0IHRyYWNlX2Jvb3RfcmV0ICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKLQotCWlmICghdHIgfHwgIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCi0JCXJldHVybjsKLQotCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQotCWJ1ZmZlciA9IHRyLT5idWZmZXI7Ci0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQk9PVF9SRVQsCi0JCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwotCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OwotCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JZW50cnktPmJvb3RfcmV0ID0gKmJ0OwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQotCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCAwKTsKLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKaW5kZXggOWQ1ODlkOC4uNjg1YTY3ZCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Nsb2NrLmMKQEAgLTMyLDE2ICszMiwxNSBAQAogdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCkKIHsKIAl1NjQgY2xvY2s7Ci0JaW50IHJlc2NoZWQ7CiAKIAkvKgogCSAqIHNjaGVkX2Nsb2NrKCkgaXMgYW4gYXJjaGl0ZWN0dXJlIGltcGxlbWVudGVkLCBmYXN0LCBzY2FsYWJsZSwKIAkgKiBsb2NrbGVzcyBjbG9jay4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29oZXJlbnQgYWNyb3NzCiAJICogQ1BVcywgbm9yIGFjcm9zcyBDUFUgaWRsZSBldmVudHMuCiAJICovCi0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWNsb2NrID0gc2NoZWRfY2xvY2soKTsKLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogCiAJcmV0dXJuIGNsb2NrOwogfQpAQCAtNTYsNyArNTUsNyBAQAogICovCiB1NjQgbm90cmFjZSB0cmFjZV9jbG9jayh2b2lkKQogewotCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJcmV0dXJuIGxvY2FsX2Nsb2NrKCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9lbnRyaWVzLmgKaW5kZXggZGMwMDhjMS4uZTNkZmVjYSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2VudHJpZXMuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZW50cmllcy5oCkBAIC0xNTEsMjMgKzE1MSw2IEBACiApOwogCiAvKgotICogU3BlY2lhbCAoZnJlZS1mb3JtKSB0cmFjZSBlbnRyeToKLSAqLwotRlRSQUNFX0VOVFJZKHNwZWNpYWwsIHNwZWNpYWxfZW50cnksCi0KLQlUUkFDRV9TUEVDSUFMLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWFyZzEJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlhcmcyCSkKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJYXJnMwkpCi0JKSwKLQotCUZfcHJpbnRrKCIoJTA4bHgpICglMDhseCkgKCUwOGx4KSIsCi0JCSBfX2VudHJ5LT5hcmcxLCBfX2VudHJ5LT5hcmcyLCBfX2VudHJ5LT5hcmczKQotKTsKLQotLyoKICAqIFN0YWNrLXRyYWNlIGVudHJ5OgogICovCiAKQEAgLTI3MSwzMyArMjU0LDYgQEAKIAkJIF9fZW50cnktPm1hcF9pZCwgX19lbnRyeS0+b3Bjb2RlKQogKTsKIAotRlRSQUNFX0VOVFJZKGJvb3RfY2FsbCwgdHJhY2VfYm9vdF9jYWxsLAotCi0JVFJBQ0VfQk9PVF9DQUxMLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGRfc3RydWN0KAlzdHJ1Y3QgYm9vdF90cmFjZV9jYWxsLAlib290X2NhbGwJKQotCQlfX2ZpZWxkX2Rlc2MoCXBpZF90LAlib290X2NhbGwsCWNhbGxlcgkJKQotCQlfX2FycmF5X2Rlc2MoCWNoYXIsCWJvb3RfY2FsbCwJZnVuYywJS1NZTV9TWU1CT0xfTEVOKQotCSksCi0KLQlGX3ByaW50aygiJWQgICVzIiwgX19lbnRyeS0+Y2FsbGVyLCBfX2VudHJ5LT5mdW5jKQotKTsKLQotRlRSQUNFX0VOVFJZKGJvb3RfcmV0LCB0cmFjZV9ib290X3JldCwKLQotCVRSQUNFX0JPT1RfUkVULAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGRfc3RydWN0KAlzdHJ1Y3QgYm9vdF90cmFjZV9yZXQsCWJvb3RfcmV0CSkKLQkJX19hcnJheV9kZXNjKAljaGFyLAlib290X3JldCwJZnVuYywJS1NZTV9TWU1CT0xfTEVOKQotCQlfX2ZpZWxkX2Rlc2MoCWludCwJYm9vdF9yZXQsCXJlc3VsdAkJKQotCQlfX2ZpZWxkX2Rlc2MoCXVuc2lnbmVkIGxvbmcsIGJvb3RfcmV0LCBkdXJhdGlvbgkpCi0JKSwKLQotCUZfcHJpbnRrKCIlcyAlZCAlbHgiLAotCQkgX19lbnRyeS0+ZnVuYywgX19lbnRyeS0+cmVzdWx0LCBfX2VudHJ5LT5kdXJhdGlvbikKLSk7CiAKICNkZWZpbmUgVFJBQ0VfRlVOQ19TSVpFIDMwCiAjZGVmaW5lIFRSQUNFX0ZJTEVfU0laRSAyMApAQCAtMzE4LDUzICsyNzQsMyBAQAogCQkgX19lbnRyeS0+ZnVuYywgX19lbnRyeS0+ZmlsZSwgX19lbnRyeS0+Y29ycmVjdCkKICk7CiAKLUZUUkFDRV9FTlRSWShrbWVtX2FsbG9jLCBrbWVtdHJhY2VfYWxsb2NfZW50cnksCi0KLQlUUkFDRV9LTUVNX0FMTE9DLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCWVudW0ga21lbXRyYWNlX3R5cGVfaWQsCXR5cGVfaWQJCSkKLQkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJCWNhbGxfc2l0ZQkpCi0JCV9fZmllbGQoCWNvbnN0IHZvaWQgKiwJCXB0cgkJKQotCQlfX2ZpZWxkKAlzaXplX3QsCQkJYnl0ZXNfcmVxCSkKLQkJX19maWVsZCgJc2l6ZV90LAkJCWJ5dGVzX2FsbG9jCSkKLQkJX19maWVsZCgJZ2ZwX3QsCQkJZ2ZwX2ZsYWdzCSkKLQkJX19maWVsZCgJaW50LAkJCW5vZGUJCSkKLQkpLAotCi0JRl9wcmludGsoInR5cGU6JXUgY2FsbF9zaXRlOiVseCBwdHI6JXAgcmVxOiV6aSBhbGxvYzolemkiCi0JCSAiIGZsYWdzOiV4IG5vZGU6JWQiLAotCQkgX19lbnRyeS0+dHlwZV9pZCwgX19lbnRyeS0+Y2FsbF9zaXRlLCBfX2VudHJ5LT5wdHIsCi0JCSBfX2VudHJ5LT5ieXRlc19yZXEsIF9fZW50cnktPmJ5dGVzX2FsbG9jLAotCQkgX19lbnRyeS0+Z2ZwX2ZsYWdzLCBfX2VudHJ5LT5ub2RlKQotKTsKLQotRlRSQUNFX0VOVFJZKGttZW1fZnJlZSwga21lbXRyYWNlX2ZyZWVfZW50cnksCi0KLQlUUkFDRV9LTUVNX0ZSRUUsCi0KLQlGX1NUUlVDVCgKLQkJX19maWVsZCgJZW51bSBrbWVtdHJhY2VfdHlwZV9pZCwJdHlwZV9pZAkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAkJY2FsbF9zaXRlCSkKLQkJX19maWVsZCgJY29uc3Qgdm9pZCAqLAkJcHRyCQkpCi0JKSwKLQotCUZfcHJpbnRrKCJ0eXBlOiV1IGNhbGxfc2l0ZTolbHggcHRyOiVwIiwKLQkJIF9fZW50cnktPnR5cGVfaWQsIF9fZW50cnktPmNhbGxfc2l0ZSwgX19lbnRyeS0+cHRyKQotKTsKLQotRlRSQUNFX0VOVFJZKGtzeW1fdHJhY2UsIGtzeW1fdHJhY2VfZW50cnksCi0KLQlUUkFDRV9LU1lNLAotCi0JRl9TVFJVQ1QoCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWlwCQkJICApCi0JCV9fZmllbGQoCXVuc2lnbmVkIGNoYXIsCXR5cGUJCQkgICkKLQkJX19hcnJheSgJY2hhcgkgICAgICwJY21kLAkgICBUQVNLX0NPTU1fTEVOICApCi0JCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsICBhZGRyCQkJICApCi0JKSwKLQotCUZfcHJpbnRrKCJpcDogJXBGIHR5cGU6ICVkIGtzeW1fbmFtZTogJXBTIGNtZDogJXMiLAotCQkodm9pZCAqKV9fZW50cnktPmlwLCAodW5zaWduZWQgaW50KV9fZW50cnktPnR5cGUsCi0JCSh2b2lkICopX19lbnRyeS0+YWRkciwgIF9fZW50cnktPmNtZCkKLSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3BlcmYuYwppbmRleCA4YTJiNzNmLi4wMDBlNmU4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMKQEAgLTksOCArOSw2IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgInRyYWNlLmgiCiAKLUVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncyk7Ci0KIHN0YXRpYyBjaGFyICpwZXJmX3RyYWNlX2J1Zls0XTsKIAogLyoKQEAgLTU2LDEzICs1NCw3IEBACiAJCX0KIAl9CiAKLQlpZiAodHBfZXZlbnQtPmNsYXNzLT5yZWcpCi0JCXJldCA9IHRwX2V2ZW50LT5jbGFzcy0+cmVnKHRwX2V2ZW50LCBUUkFDRV9SRUdfUEVSRl9SRUdJU1RFUik7Ci0JZWxzZQotCQlyZXQgPSB0cmFjZXBvaW50X3Byb2JlX3JlZ2lzdGVyKHRwX2V2ZW50LT5uYW1lLAotCQkJCQkJdHBfZXZlbnQtPmNsYXNzLT5wZXJmX3Byb2JlLAotCQkJCQkJdHBfZXZlbnQpOwotCisJcmV0ID0gdHBfZXZlbnQtPmNsYXNzLT5yZWcodHBfZXZlbnQsIFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKQEAgLTk2LDkgKzg4LDcgQEAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cF9ldmVudCwgJmZ0cmFjZV9ldmVudHMsIGxpc3QpIHsKIAkJaWYgKHRwX2V2ZW50LT5ldmVudC50eXBlID09IGV2ZW50X2lkICYmCi0JCSAgICB0cF9ldmVudC0+Y2xhc3MgJiYKLQkJICAgICh0cF9ldmVudC0+Y2xhc3MtPnBlcmZfcHJvYmUgfHwKLQkJICAgICB0cF9ldmVudC0+Y2xhc3MtPnJlZykgJiYKKwkJICAgIHRwX2V2ZW50LT5jbGFzcyAmJiB0cF9ldmVudC0+Y2xhc3MtPnJlZyAmJgogCQkgICAgdHJ5X21vZHVsZV9nZXQodHBfZXZlbnQtPm1vZCkpIHsKIAkJCXJldCA9IHBlcmZfdHJhY2VfZXZlbnRfaW5pdCh0cF9ldmVudCwgcF9ldmVudCk7CiAJCQlicmVhazsKQEAgLTEzOCwxOCArMTI4LDEzIEBACiAJaWYgKC0tdHBfZXZlbnQtPnBlcmZfcmVmY291bnQgPiAwKQogCQlnb3RvIG91dDsKIAotCWlmICh0cF9ldmVudC0+Y2xhc3MtPnJlZykKLQkJdHBfZXZlbnQtPmNsYXNzLT5yZWcodHBfZXZlbnQsIFRSQUNFX1JFR19QRVJGX1VOUkVHSVNURVIpOwotCWVsc2UKLQkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKHRwX2V2ZW50LT5uYW1lLAotCQkJCQkgICAgdHBfZXZlbnQtPmNsYXNzLT5wZXJmX3Byb2JlLAotCQkJCQkgICAgdHBfZXZlbnQpOworCXRwX2V2ZW50LT5jbGFzcy0+cmVnKHRwX2V2ZW50LCBUUkFDRV9SRUdfUEVSRl9VTlJFR0lTVEVSKTsKIAogCS8qCi0JICogRW5zdXJlIG91ciBjYWxsYmFjayB3b24ndCBiZSBjYWxsZWQgYW55bW9yZS4gU2VlCi0JICogdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKCkgYW5kIF9fRE9fVFJBQ0UoKS4KKwkgKiBFbnN1cmUgb3VyIGNhbGxiYWNrIHdvbid0IGJlIGNhbGxlZCBhbnltb3JlLiBUaGUgYnVmZmVycworCSAqIHdpbGwgYmUgZnJlZWQgYWZ0ZXIgdGhhdC4KIAkgKi8KLQlzeW5jaHJvbml6ZV9zY2hlZCgpOworCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwogCiAJZnJlZV9wZXJjcHUodHBfZXZlbnQtPnBlcmZfZXZlbnRzKTsKIAl0cF9ldmVudC0+cGVyZl9ldmVudHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IDUzY2ZmYzAuLjA5YjRmYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTI4LDYgKzI4LDcgQEAKIERFRklORV9NVVRFWChldmVudF9tdXRleCk7CiAKIExJU1RfSEVBRChmdHJhY2VfZXZlbnRzKTsKK0xJU1RfSEVBRChmdHJhY2VfY29tbW9uX2ZpZWxkcyk7CiAKIHN0cnVjdCBsaXN0X2hlYWQgKgogdHJhY2VfZ2V0X2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwpCkBAIC0zNywxNSArMzgsMTEgQEAKIAlyZXR1cm4gZXZlbnRfY2FsbC0+Y2xhc3MtPmdldF9maWVsZHMoZXZlbnRfY2FsbCk7CiB9CiAKLWludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjb25zdCBjaGFyICp0eXBlLAotCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBpc19zaWduZWQsCi0JCSAgICAgICBpbnQgZmlsdGVyX3R5cGUpCitzdGF0aWMgaW50IF9fdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsCisJCQkJaW50IGlzX3NpZ25lZCwgaW50IGZpbHRlcl90eXBlKQogewogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0KLQlpZiAoV0FSTl9PTighY2FsbC0+Y2xhc3MpKQotCQlyZXR1cm4gMDsKIAogCWZpZWxkID0ga3phbGxvYyhzaXplb2YoKmZpZWxkKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWVsZCkKQEAgLTY4LDcgKzY1LDYgQEAKIAlmaWVsZC0+c2l6ZSA9IHNpemU7CiAJZmllbGQtPmlzX3NpZ25lZCA9IGlzX3NpZ25lZDsKIAotCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwogCWxpc3RfYWRkKCZmaWVsZC0+bGluaywgaGVhZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgwLDE3ICs3NiwzMiBAQAogCiAJcmV0dXJuIC1FTk9NRU07CiB9CisKK2ludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjb25zdCBjaGFyICp0eXBlLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUsIGludCBpc19zaWduZWQsCisJCSAgICAgICBpbnQgZmlsdGVyX3R5cGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKworCWlmIChXQVJOX09OKCFjYWxsLT5jbGFzcykpCisJCXJldHVybiAwOworCisJaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CisJcmV0dXJuIF9fdHJhY2VfZGVmaW5lX2ZpZWxkKGhlYWQsIHR5cGUsIG5hbWUsIG9mZnNldCwgc2l6ZSwKKwkJCQkgICAgaXNfc2lnbmVkLCBmaWx0ZXJfdHlwZSk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9kZWZpbmVfZmllbGQpOwogCiAjZGVmaW5lIF9fY29tbW9uX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCi0JcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsICN0eXBlLCAiY29tbW9uXyIgI2l0ZW0sCQlcCi0JCQkJIG9mZnNldG9mKHR5cGVvZihlbnQpLCBpdGVtKSwJCVwKLQkJCQkgc2l6ZW9mKGVudC5pdGVtKSwJCQlcCi0JCQkJIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCisJcmV0ID0gX190cmFjZV9kZWZpbmVfZmllbGQoJmZ0cmFjZV9jb21tb25fZmllbGRzLCAjdHlwZSwJXAorCQkJCSAgICJjb21tb25fIiAjaXRlbSwJCQlcCisJCQkJICAgb2Zmc2V0b2YodHlwZW9mKGVudCksIGl0ZW0pLAkJXAorCQkJCSAgIHNpemVvZihlbnQuaXRlbSksCQkJXAorCQkJCSAgIGlzX3NpZ25lZF90eXBlKHR5cGUpLCBGSUxURVJfT1RIRVIpOwlcCiAJaWYgKHJldCkJCQkJCQkJXAogCQlyZXR1cm4gcmV0OwogCi1zdGF0aWMgaW50IHRyYWNlX2RlZmluZV9jb21tb25fZmllbGRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkKK3N0YXRpYyBpbnQgdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHModm9pZCkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB0cmFjZV9lbnRyeSBlbnQ7CkBAIC0xMzAsNiArMTQxLDU1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9ldmVudF9yYXdfaW5pdCk7CiAKK2ludCBmdHJhY2VfZXZlbnRfcmVnKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgZW51bSB0cmFjZV9yZWcgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRSQUNFX1JFR19SRUdJU1RFUjoKKwkJcmV0dXJuIHRyYWNlcG9pbnRfcHJvYmVfcmVnaXN0ZXIoY2FsbC0+bmFtZSwKKwkJCQkJCSBjYWxsLT5jbGFzcy0+cHJvYmUsCisJCQkJCQkgY2FsbCk7CisJY2FzZSBUUkFDRV9SRUdfVU5SRUdJU1RFUjoKKwkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCisJCQkJCSAgICBjYWxsLT5jbGFzcy0+cHJvYmUsCisJCQkJCSAgICBjYWxsKTsKKwkJcmV0dXJuIDA7CisKKyNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwljYXNlIFRSQUNFX1JFR19QRVJGX1JFR0lTVEVSOgorCQlyZXR1cm4gdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlcihjYWxsLT5uYW1lLAorCQkJCQkJIGNhbGwtPmNsYXNzLT5wZXJmX3Byb2JlLAorCQkJCQkJIGNhbGwpOworCWNhc2UgVFJBQ0VfUkVHX1BFUkZfVU5SRUdJU1RFUjoKKwkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCisJCQkJCSAgICBjYWxsLT5jbGFzcy0+cGVyZl9wcm9iZSwKKwkJCQkJICAgIGNhbGwpOworCQlyZXR1cm4gMDsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9ldmVudF9yZWcpOworCit2b2lkIHRyYWNlX2V2ZW50X2VuYWJsZV9jbWRfcmVjb3JkKGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKworCW11dGV4X2xvY2soJmV2ZW50X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7CisJCWlmICghKGNhbGwtPmZsYWdzICYgVFJBQ0VfRVZFTlRfRkxfRU5BQkxFRCkpCisJCQljb250aW51ZTsKKworCQlpZiAoZW5hYmxlKSB7CisJCQl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7CisJCQljYWxsLT5mbGFncyB8PSBUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQ7CisJCX0gZWxzZSB7CisJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKKwkJCWNhbGwtPmZsYWdzICY9IH5UUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQ7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7Cit9CisKIHN0YXRpYyBpbnQgZnRyYWNlX2V2ZW50X2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKIAkJCQkJaW50IGVuYWJsZSkKIHsKQEAgLTEzOSwyNCArMTk5LDIwIEBACiAJY2FzZSAwOgogCQlpZiAoY2FsbC0+ZmxhZ3MgJiBUUkFDRV9FVkVOVF9GTF9FTkFCTEVEKSB7CiAJCQljYWxsLT5mbGFncyAmPSB+VFJBQ0VfRVZFTlRfRkxfRU5BQkxFRDsKLQkJCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwotCQkJaWYgKGNhbGwtPmNsYXNzLT5yZWcpCi0JCQkJY2FsbC0+Y2xhc3MtPnJlZyhjYWxsLCBUUkFDRV9SRUdfVU5SRUdJU1RFUik7Ci0JCQllbHNlCi0JCQkJdHJhY2Vwb2ludF9wcm9iZV91bnJlZ2lzdGVyKGNhbGwtPm5hbWUsCi0JCQkJCQkJICAgIGNhbGwtPmNsYXNzLT5wcm9iZSwKLQkJCQkJCQkgICAgY2FsbCk7CisJCQlpZiAoY2FsbC0+ZmxhZ3MgJiBUUkFDRV9FVkVOVF9GTF9SRUNPUkRFRF9DTUQpIHsKKwkJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKKwkJCQljYWxsLT5mbGFncyAmPSB+VFJBQ0VfRVZFTlRfRkxfUkVDT1JERURfQ01EOworCQkJfQorCQkJY2FsbC0+Y2xhc3MtPnJlZyhjYWxsLCBUUkFDRV9SRUdfVU5SRUdJU1RFUik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlpZiAoIShjYWxsLT5mbGFncyAmIFRSQUNFX0VWRU5UX0ZMX0VOQUJMRUQpKSB7Ci0JCQl0cmFjaW5nX3N0YXJ0X2NtZGxpbmVfcmVjb3JkKCk7Ci0JCQlpZiAoY2FsbC0+Y2xhc3MtPnJlZykKLQkJCQlyZXQgPSBjYWxsLT5jbGFzcy0+cmVnKGNhbGwsIFRSQUNFX1JFR19SRUdJU1RFUik7Ci0JCQllbHNlCi0JCQkJcmV0ID0gdHJhY2Vwb2ludF9wcm9iZV9yZWdpc3RlcihjYWxsLT5uYW1lLAotCQkJCQkJCQljYWxsLT5jbGFzcy0+cHJvYmUsCi0JCQkJCQkJCWNhbGwpOworCQkJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9SRUNPUkRfQ01EKSB7CisJCQkJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOworCQkJCWNhbGwtPmZsYWdzIHw9IFRSQUNFX0VWRU5UX0ZMX1JFQ09SREVEX0NNRDsKKwkJCX0KKwkJCXJldCA9IGNhbGwtPmNsYXNzLT5yZWcoY2FsbCwgVFJBQ0VfUkVHX1JFR0lTVEVSKTsKIAkJCWlmIChyZXQpIHsKIAkJCQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKIAkJCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGVuYWJsZSBldmVudCAiCkBAIC0xOTQsOCArMjUwLDcgQEAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCi0JCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+Y2xhc3MgfHwKLQkJICAgICghY2FsbC0+Y2xhc3MtPnByb2JlICYmICFjYWxsLT5jbGFzcy0+cmVnKSkKKwkJaWYgKCFjYWxsLT5uYW1lIHx8ICFjYWxsLT5jbGFzcyB8fCAhY2FsbC0+Y2xhc3MtPnJlZykKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChtYXRjaCAmJgpAQCAtMzIxLDcgKzM3Niw3IEBACiAJCSAqIFRoZSBmdHJhY2Ugc3Vic3lzdGVtIGlzIGZvciBzaG93aW5nIGZvcm1hdHMgb25seS4KIAkJICogVGhleSBjYW4gbm90IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdmlhIHRoZSBldmVudCBmaWxlcy4KIAkJICovCi0JCWlmIChjYWxsLT5jbGFzcyAmJiAoY2FsbC0+Y2xhc3MtPnByb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpKQorCQlpZiAoY2FsbC0+Y2xhc3MgJiYgY2FsbC0+Y2xhc3MtPnJlZykKIAkJCXJldHVybiBjYWxsOwogCX0KIApAQCAtNDc0LDggKzUyOSw3IEBACiAKIAltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewotCQlpZiAoIWNhbGwtPm5hbWUgfHwgIWNhbGwtPmNsYXNzIHx8Ci0JCSAgICAoIWNhbGwtPmNsYXNzLT5wcm9iZSAmJiAhY2FsbC0+Y2xhc3MtPnJlZykpCisJCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+Y2xhc3MgfHwgIWNhbGwtPmNsYXNzLT5yZWcpCiAJCQljb250aW51ZTsKIAogCQlpZiAoc3lzdGVtICYmIHN0cmNtcChjYWxsLT5jbGFzcy0+c3lzdGVtLCBzeXN0ZW0pICE9IDApCkBAIC01NDQsMzIgKzU5OCwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1ldmVudF9mb3JtYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCi0JCSAgbG9mZl90ICpwcG9zKQorc3RhdGljIHZvaWQgcHJpbnRfZXZlbnRfZmllbGRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqczsKLQlpbnQgY29tbW9uX2ZpZWxkX2NvdW50ID0gNTsKLQljaGFyICpidWY7Ci0JaW50IHIgPSAwOwogCi0JaWYgKCpwcG9zKQotCQlyZXR1cm4gMDsKLQotCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0cmFjZV9zZXFfaW5pdChzKTsKLQotCXRyYWNlX3NlcV9wcmludGYocywgIm5hbWU6ICVzXG4iLCBjYWxsLT5uYW1lKTsKLQl0cmFjZV9zZXFfcHJpbnRmKHMsICJJRDogJWRcbiIsIGNhbGwtPmV2ZW50LnR5cGUpOwotCXRyYWNlX3NlcV9wcmludGYocywgImZvcm1hdDpcbiIpOwotCi0JaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGZpZWxkLCBoZWFkLCBsaW5rKSB7CiAJCS8qCiAJCSAqIFNtYXJ0bHkgc2hvd3MgdGhlIGFycmF5IHR5cGUoZXhjZXB0IGR5bmFtaWMgYXJyYXkpLgpAQCAtNTg0LDI5ICs2MTYsNTQgQEAKIAkJCWFycmF5X2Rlc2NyaXB0b3IgPSBOVUxMOwogCiAJCWlmICghYXJyYXlfZGVzY3JpcHRvcikgewotCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXU7IgorCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDolcyAlcztcdG9mZnNldDoldTsiCiAJCQkJCSJcdHNpemU6JXU7XHRzaWduZWQ6JWQ7XG4iLAogCQkJCQlmaWVsZC0+dHlwZSwgZmllbGQtPm5hbWUsIGZpZWxkLT5vZmZzZXQsCiAJCQkJCWZpZWxkLT5zaXplLCAhIWZpZWxkLT5pc19zaWduZWQpOwogCQl9IGVsc2UgewotCQkJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6JS4qcyAlcyVzO1x0b2Zmc2V0OiV1OyIKIAkJCQkJIlx0c2l6ZToldTtcdHNpZ25lZDolZDtcbiIsCiAJCQkJCShpbnQpKGFycmF5X2Rlc2NyaXB0b3IgLSBmaWVsZC0+dHlwZSksCiAJCQkJCWZpZWxkLT50eXBlLCBmaWVsZC0+bmFtZSwKIAkJCQkJYXJyYXlfZGVzY3JpcHRvciwgZmllbGQtPm9mZnNldCwKIAkJCQkJZmllbGQtPnNpemUsICEhZmllbGQtPmlzX3NpZ25lZCk7CiAJCX0KLQotCQlpZiAoLS1jb21tb25fZmllbGRfY291bnQgPT0gMCkKLQkJCXIgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpOwotCi0JCWlmICghcikKLQkJCWJyZWFrOwogCX0KK30KIAotCWlmIChyKQotCQlyID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG5wcmludCBmbXQ6ICVzXG4iLAotCQkJCWNhbGwtPnByaW50X2ZtdCk7CitzdGF0aWMgc3NpemVfdAorZXZlbnRfZm9ybWF0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWNoYXIgKmJ1ZjsKKwlpbnQgcjsKKworCWlmICgqcHBvcykKKwkJcmV0dXJuIDA7CisKKwlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXMpCisJCXJldHVybiAtRU5PTUVNOworCisJdHJhY2Vfc2VxX2luaXQocyk7CisKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJuYW1lOiAlc1xuIiwgY2FsbC0+bmFtZSk7CisJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSUQ6ICVkXG4iLCBjYWxsLT5ldmVudC50eXBlKTsKKwl0cmFjZV9zZXFfcHJpbnRmKHMsICJmb3JtYXQ6XG4iKTsKKworCS8qIHByaW50IGNvbW1vbiBmaWVsZHMgKi8KKwlwcmludF9ldmVudF9maWVsZHMocywgJmZ0cmFjZV9jb21tb25fZmllbGRzKTsKKworCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOworCisJLyogcHJpbnQgZXZlbnQgc3BlY2lmaWMgZmllbGRzICovCisJaGVhZCA9IHRyYWNlX2dldF9maWVsZHMoY2FsbCk7CisJcHJpbnRfZXZlbnRfZmllbGRzKHMsIGhlYWQpOworCisJciA9IHRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAlc1xuIiwgY2FsbC0+cHJpbnRfZm10KTsKIAogCWlmICghcikgewogCQkvKgpAQCAtOTYzLDM1ICsxMDIwLDMxIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoY2FsbC0+Y2xhc3MtPnByb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpCisJaWYgKGNhbGwtPmNsYXNzLT5yZWcpCiAJCXRyYWNlX2NyZWF0ZV9maWxlKCJlbmFibGUiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCiAJCQkJICBlbmFibGUpOwogCiAjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCi0JaWYgKGNhbGwtPmV2ZW50LnR5cGUgJiYgKGNhbGwtPmNsYXNzLT5wZXJmX3Byb2JlIHx8IGNhbGwtPmNsYXNzLT5yZWcpKQorCWlmIChjYWxsLT5ldmVudC50eXBlICYmIGNhbGwtPmNsYXNzLT5yZWcpCiAJCXRyYWNlX2NyZWF0ZV9maWxlKCJpZCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKIAkJIAkJICBpZCk7CiAjZW5kaWYKIAotCWlmIChjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcykgewotCQkvKgotCQkgKiBPdGhlciBldmVudHMgbWF5IGhhdmUgdGhlIHNhbWUgY2xhc3MuIE9ubHkgdXBkYXRlCi0JCSAqIHRoZSBmaWVsZHMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgZGVmaW5lZC4KLQkJICovCi0JCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwotCQlpZiAobGlzdF9lbXB0eShoZWFkKSkgewotCQkJcmV0ID0gdHJhY2VfZGVmaW5lX2NvbW1vbl9maWVsZHMoY2FsbCk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSBjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgcG9pbnQiCi0JCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQorCS8qCisJICogT3RoZXIgZXZlbnRzIG1heSBoYXZlIHRoZSBzYW1lIGNsYXNzLiBPbmx5IHVwZGF0ZQorCSAqIHRoZSBmaWVsZHMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgZGVmaW5lZC4KKwkgKi8KKwloZWFkID0gdHJhY2VfZ2V0X2ZpZWxkcyhjYWxsKTsKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkgeworCQlyZXQgPSBjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyhjYWxsKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbml0aWFsaXplIHRyYWNlIHBvaW50IgorCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCXJldHVybiByZXQ7CiAJCX0KLQkJdHJhY2VfY3JlYXRlX2ZpbGUoImZpbHRlciIsIDA2NDQsIGNhbGwtPmRpciwgY2FsbCwKLQkJCQkgIGZpbHRlcik7CiAJfQorCXRyYWNlX2NyZWF0ZV9maWxlKCJmaWx0ZXIiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkgIGZpbHRlcik7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiZm9ybWF0IiwgMDQ0NCwgY2FsbC0+ZGlyLCBjYWxsLAogCQkJICBmb3JtYXQpOwpAQCAtOTk5LDExICsxMDUyLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX190cmFjZV9hZGRfZXZlbnRfY2FsbChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCitzdGF0aWMgaW50CitfX3RyYWNlX2FkZF9ldmVudF9jYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgc3RydWN0IG1vZHVsZSAqbW9kLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqaWQsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICplbmFibGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmaWx0ZXIsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3JtYXQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CiAJaW50IHJldDsKIAorCS8qIFRoZSBsaW5rZXIgbWF5IGxlYXZlIGJsYW5rcyAqLwogCWlmICghY2FsbC0+bmFtZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTEwMTEsOCArMTA3MCw4IEBACiAJCXJldCA9IGNhbGwtPmNsYXNzLT5yYXdfaW5pdChjYWxsKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWlmIChyZXQgIT0gLUVOT1NZUykKLQkJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSAiCi0JCQkJImV2ZW50cy8lc1xuIiwgY2FsbC0+bmFtZSk7CisJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgZXZlbnRzLyVzXG4iLAorCQkJCQkgICBjYWxsLT5uYW1lKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CkBAIC0xMDIxLDExICsxMDgwLDEwIEBACiAJaWYgKCFkX2V2ZW50cykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCi0JCQkJJmZ0cmFjZV9lbmFibGVfZm9wcywgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKLQkJCQkmZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzKTsKKwlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLCBpZCwgZW5hYmxlLCBmaWx0ZXIsIGZvcm1hdCk7CiAJaWYgKCFyZXQpCiAJCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7CisJY2FsbC0+bW9kID0gbW9kOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMzUsNyArMTA5MywxMCBAQAogewogCWludCByZXQ7CiAJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOwotCXJldCA9IF9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoY2FsbCk7CisJcmV0ID0gX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCQkJICAgICAmZnRyYWNlX2VuYWJsZV9mb3BzLAorCQkJCSAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKKwkJCQkgICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwogCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMTUyLDggKzEyMTMsNiBAQAogewogCXN0cnVjdCBmdHJhY2VfbW9kdWxlX2ZpbGVfb3BzICpmaWxlX29wcyA9IE5VTEw7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCAqc3RhcnQsICplbmQ7Ci0Jc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7Ci0JaW50IHJldDsKIAogCXN0YXJ0ID0gbW9kLT50cmFjZV9ldmVudHM7CiAJZW5kID0gbW9kLT50cmFjZV9ldmVudHMgKyBtb2QtPm51bV90cmFjZV9ldmVudHM7CkBAIC0xMTYxLDM4ICsxMjIwLDE0IEBACiAJaWYgKHN0YXJ0ID09IGVuZCkKIAkJcmV0dXJuOwogCi0JZF9ldmVudHMgPSBldmVudF90cmFjZV9ldmVudHNfZGlyKCk7Ci0JaWYgKCFkX2V2ZW50cykKKwlmaWxlX29wcyA9IHRyYWNlX2NyZWF0ZV9maWxlX29wcyhtb2QpOworCWlmICghZmlsZV9vcHMpCiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJLyogVGhlIGxpbmtlciBtYXkgbGVhdmUgYmxhbmtzICovCi0JCWlmICghY2FsbC0+bmFtZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoY2FsbC0+Y2xhc3MtPnJhd19pbml0KSB7Ci0JCQlyZXQgPSBjYWxsLT5jbGFzcy0+cmF3X2luaXQoY2FsbCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCWlmIChyZXQgIT0gLUVOT1NZUykKLQkJCQkJcHJfd2FybmluZygiQ291bGQgbm90IGluaXRpYWxpemUgdHJhY2UgIgotCQkJCQkicG9pbnQgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBUaGlzIG1vZHVsZSBoYXMgZXZlbnRzLCBjcmVhdGUgZmlsZSBvcHMgZm9yIHRoaXMgbW9kdWxlCi0JCSAqIGlmIG5vdCBhbHJlYWR5IGRvbmUuCi0JCSAqLwotCQlpZiAoIWZpbGVfb3BzKSB7Ci0JCQlmaWxlX29wcyA9IHRyYWNlX2NyZWF0ZV9maWxlX29wcyhtb2QpOwotCQkJaWYgKCFmaWxlX29wcykKLQkJCQlyZXR1cm47Ci0JCX0KLQkJY2FsbC0+bW9kID0gbW9kOwotCQlyZXQgPSBldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzLAorCQlfX3RyYWNlX2FkZF9ldmVudF9jYWxsKGNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7Ci0JCWlmICghcmV0KQotCQkJbGlzdF9hZGQoJmNhbGwtPmxpc3QsICZmdHJhY2VfZXZlbnRzKTsKIAl9CiB9CiAKQEAgLTEzMTksMjUgKzEzNTQsMTQgQEAKIAl0cmFjZV9jcmVhdGVfZmlsZSgiZW5hYmxlIiwgMDY0NCwgZF9ldmVudHMsCiAJCQkgIE5VTEwsICZmdHJhY2Vfc3lzdGVtX2VuYWJsZV9mb3BzKTsKIAorCWlmICh0cmFjZV9kZWZpbmVfY29tbW9uX2ZpZWxkcygpKQorCQlwcl93YXJuaW5nKCJ0cmFjaW5nOiBGYWlsZWQgdG8gYWxsb2NhdGUgY29tbW9uIGZpZWxkcyIpOworCiAJZm9yX2VhY2hfZXZlbnQoY2FsbCwgX19zdGFydF9mdHJhY2VfZXZlbnRzLCBfX3N0b3BfZnRyYWNlX2V2ZW50cykgewotCQkvKiBUaGUgbGlua2VyIG1heSBsZWF2ZSBibGFua3MgKi8KLQkJaWYgKCFjYWxsLT5uYW1lKQotCQkJY29udGludWU7Ci0JCWlmIChjYWxsLT5jbGFzcy0+cmF3X2luaXQpIHsKLQkJCXJldCA9IGNhbGwtPmNsYXNzLT5yYXdfaW5pdChjYWxsKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJaWYgKHJldCAhPSAtRU5PU1lTKQotCQkJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFjZSAiCi0JCQkJCSJwb2ludCBldmVudHMvJXNcbiIsIGNhbGwtPm5hbWUpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCXJldCA9IGV2ZW50X2NyZWF0ZV9kaXIoY2FsbCwgZF9ldmVudHMsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKKwkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZW5hYmxlX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZmlsdGVyX2ZvcHMsCiAJCQkJICAgICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOwotCQlpZiAoIXJldCkKLQkJCWxpc3RfYWRkKCZjYWxsLT5saXN0LCAmZnRyYWNlX2V2ZW50cyk7CiAJfQogCiAJd2hpbGUgKHRydWUpIHsKQEAgLTE1MjQsMTIgKzE1NDgsMTEgQEAKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IHJlc2NoZWQ7CiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKIAlwYyA9IHByZWVtcHRfY291bnQoKTsKLQlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZwZXJfY3B1KGZ0cmFjZV90ZXN0X2V2ZW50X2Rpc2FibGUsIGNwdSkpOwogCkBAIC0xNTUxLDcgKzE1NzQsNyBAQAogCiAgb3V0OgogCWF0b21pY19kZWMoJnBlcl9jcHUoZnRyYWNlX3Rlc3RfZXZlbnRfZGlzYWJsZSwgY3B1KSk7Ci0JZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX2luaXRkYXRhICA9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwppbmRleCA1N2JiMWJiLi4zNmQ0MDEwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKQEAgLTQ5NywxMiArNDk3LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICoKLWZpbmRfZXZlbnRfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICpuYW1lKQorX19maW5kX2V2ZW50X2ZpZWxkKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKIAotCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmllbGQsIGhlYWQsIGxpbmspIHsKIAkJaWYgKCFzdHJjbXAoZmllbGQtPm5hbWUsIG5hbWUpKQogCQkJcmV0dXJuIGZpZWxkOwpAQCAtNTExLDYgKzUwOSwyMCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqCitmaW5kX2V2ZW50X2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCisJZmllbGQgPSBfX2ZpbmRfZXZlbnRfZmllbGQoJmZ0cmFjZV9jb21tb25fZmllbGRzLCBuYW1lKTsKKwlpZiAoZmllbGQpCisJCXJldHVybiBmaWVsZDsKKworCWhlYWQgPSB0cmFjZV9nZXRfZmllbGRzKGNhbGwpOworCXJldHVybiBfX2ZpbmRfZXZlbnRfZmllbGQoaGVhZCwgbmFtZSk7Cit9CisKIHN0YXRpYyB2b2lkIGZpbHRlcl9mcmVlX3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQogewogCWlmICghcHJlZCkKQEAgLTYyNyw5ICs2MzksNiBAQAogCWludCBlcnI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbGwsICZmdHJhY2VfZXZlbnRzLCBsaXN0KSB7Ci0JCWlmICghY2FsbC0+Y2xhc3MgfHwgIWNhbGwtPmNsYXNzLT5kZWZpbmVfZmllbGRzKQotCQkJY29udGludWU7Ci0KIAkJaWYgKHN0cmNtcChjYWxsLT5jbGFzcy0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpICE9IDApCiAJCQljb250aW51ZTsKIApAQCAtNjQ2LDkgKzY1NSw2IEBACiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewotCQlpZiAoIWNhbGwtPmNsYXNzIHx8ICFjYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcykKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChzdHJjbXAoY2FsbC0+Y2xhc3MtPnN5c3RlbSwgc3lzdGVtLT5uYW1lKSAhPSAwKQogCQkJY29udGludWU7CiAKQEAgLTEyNTEsOSArMTI1Nyw2IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWxsLCAmZnRyYWNlX2V2ZW50cywgbGlzdCkgewogCQlzdHJ1Y3QgZXZlbnRfZmlsdGVyICpmaWx0ZXIgPSBjYWxsLT5maWx0ZXI7CiAKLQkJaWYgKCFjYWxsLT5jbGFzcyB8fCAhY2FsbC0+Y2xhc3MtPmRlZmluZV9maWVsZHMpCi0JCQljb250aW51ZTsKLQogCQlpZiAoc3RyY21wKGNhbGwtPmNsYXNzLT5zeXN0ZW0sIHN5c3RlbS0+bmFtZSkgIT0gMCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggODUzNmUyYS4uNGJhNDRkZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTI1LDEyICsxMjUsNiBAQAogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgogCi1zdGF0aWMgaW50IGZ0cmFjZV9yYXdfaW5pdF9ldmVudChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCi17Ci0JSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmNsYXNzLT5maWVsZHMpOwotCXJldHVybiAwOwotfQotCiAjdW5kZWYgX19lbnRyeQogI2RlZmluZSBfX2VudHJ5IFJFQwogCkBAIC0xNTgsNyArMTUyLDcgQEAKIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2xhc3MgZXZlbnRfY2xhc3NfZnRyYWNlXyMjY2FsbCA9IHsJCQlcCiAJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKIAkuZGVmaW5lX2ZpZWxkcwkJPSBmdHJhY2VfZGVmaW5lX2ZpZWxkc18jI2NhbGwsCQlcCi0JLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudCwJCVwKKwkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCmluZGV4IGIzZjM3NzYuLjE2YWVlNGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKQEAgLTU0LDE0ICs1NCwxNCBAQAogCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOwotCWludCBjcHUsIHJlc2NoZWQ7CisJaW50IGNwdTsKIAlpbnQgcGM7CiAKIAlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKIAkJcmV0dXJuOwogCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJZGF0YSA9IHRyLT5kYXRhW2NwdV07CkBAIC03MSw3ICs3MSw3IEBACiAJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKKwlwcmVlbXB0X2VuYWJsZV9ub3RyYWNlKCk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKaW5kZXggNzlmNGJhYy4uNmJmZjIzNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwpAQCAtNjQxLDcgKzY0MSw4IEBACiAKIAkvKiBQcmludCBuc2VjcyAod2UgZG9uJ3Qgd2FudCB0byBleGNlZWQgNyBudW1iZXJzKSAqLwogCWlmIChsZW4gPCA3KSB7Ci0JCXNucHJpbnRmKG5zZWNzX3N0ciwgOCAtIGxlbiwgIiUwM2x1IiwgbnNlY3NfcmVtKTsKKwkJc25wcmludGYobnNlY3Nfc3RyLCBtaW4oc2l6ZW9mKG5zZWNzX3N0ciksIDhVTCAtIGxlbiksICIlMDNsdSIsCisJCQkgbnNlY3NfcmVtKTsKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiLiVzIiwgbnNlY3Nfc3RyKTsKIAkJaWYgKCFyZXQpCiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwppbmRleCA2ZmQ0ODZlLi43M2E2YjA2IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTY0OSw2ICs2NDksNyBAQAogI2VuZGlmCiAJLm9wZW4gICAgICAgICAgID0gaXJxc29mZl90cmFjZV9vcGVuLAogCS5jbG9zZSAgICAgICAgICA9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKICMgZGVmaW5lIHJlZ2lzdGVyX2lycXNvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCiAjZWxzZQpAQCAtNjgxLDYgKzY4Miw3IEBACiAjZW5kaWYKIAkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlX29wZW4sCiAJLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKICMgZGVmaW5lIHJlZ2lzdGVyX3ByZWVtcHRvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCiAjZWxzZQpAQCAtNzE1LDYgKzcxNyw3IEBACiAjZW5kaWYKIAkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlX29wZW4sCiAJLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VfY2xvc2UsCisJLnVzZV9tYXhfdHIJPSAxLAogfTsKIAogIyBkZWZpbmUgcmVnaXN0ZXJfcHJlZW1wdGlycXNvZmYodHJhY2UpIHJlZ2lzdGVyX3RyYWNlcigmdHJhY2UpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggZjUyYjVmNS4uOGIyN2M5OCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgpAQCAtMzgsNiArNDAsNyBAQAogI2RlZmluZSBNQVhfVFJBQ0VfQVJHUyAxMjgKICNkZWZpbmUgTUFYX0FSR1NUUl9MRU4gNjMKICNkZWZpbmUgTUFYX0VWRU5UX05BTUVfTEVOIDY0CisjZGVmaW5lIE1BWF9TVFJJTkdfU0laRSBQQVRIX01BWAogI2RlZmluZSBLUFJPQkVfRVZFTlRfU1lTVEVNICJrcHJvYmVzIgogCiAvKiBSZXNlcnZlZCBmaWVsZCBuYW1lcyAqLwpAQCAtNTgsMTQgKzYxLDE2IEBACiB9OwogCiAvKiBQcmludGluZyBmdW5jdGlvbiB0eXBlICovCi10eXBlZGVmIGludCAoKnByaW50X3R5cGVfZnVuY190KShzdHJ1Y3QgdHJhY2Vfc2VxICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50ICgqcHJpbnRfdHlwZV9mdW5jX3QpKHN0cnVjdCB0cmFjZV9zZXEgKiwgY29uc3QgY2hhciAqLCB2b2lkICosCisJCQkJIHZvaWQgKik7CiAjZGVmaW5lIFBSSU5UX1RZUEVfRlVOQ19OQU1FKHR5cGUpCXByaW50X3R5cGVfIyN0eXBlCiAjZGVmaW5lIFBSSU5UX1RZUEVfRk1UX05BTUUodHlwZSkJcHJpbnRfdHlwZV9mb3JtYXRfIyN0eXBlCiAKIC8qIFByaW50aW5nICBpbiBiYXNpYyB0eXBlIGZ1bmN0aW9uIHRlbXBsYXRlICovCiAjZGVmaW5lIERFRklORV9CQVNJQ19QUklOVF9UWVBFX0ZVTkModHlwZSwgZm10LCBjYXN0KQkJCVwKIHN0YXRpYyBfX2twcm9iZXMgaW50IFBSSU5UX1RZUEVfRlVOQ19OQU1FKHR5cGUpKHN0cnVjdCB0cmFjZV9zZXEgKnMsCVwKLQkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpXAorCQkJCQkJY29uc3QgY2hhciAqbmFtZSwJXAorCQkJCQkJdm9pZCAqZGF0YSwgdm9pZCAqZW50KVwKIHsJCQkJCQkJCQlcCiAJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAlcz0iIGZtdCwgbmFtZSwgKGNhc3QpKih0eXBlICopZGF0YSk7XAogfQkJCQkJCQkJCVwKQEAgLTgwLDYgKzg1LDQ5IEBACiBERUZJTkVfQkFTSUNfUFJJTlRfVFlQRV9GVU5DKHMzMiwgIiVsZCIsIGxvbmcpCiBERUZJTkVfQkFTSUNfUFJJTlRfVFlQRV9GVU5DKHM2NCwgIiVsbGQiLCBsb25nIGxvbmcpCiAKKy8qIGRhdGFfcmxvYzogZGF0YSByZWxhdGl2ZSBsb2NhdGlvbiwgY29tcGF0aWJsZSB3aXRoIHUzMiAqLworI2RlZmluZSBtYWtlX2RhdGFfcmxvYyhsZW4sIHJvZmZzKQlcCisJKCgodTMyKShsZW4pIDw8IDE2KSB8ICgodTMyKShyb2ZmcykgJiAweGZmZmYpKQorI2RlZmluZSBnZXRfcmxvY19sZW4oZGwpCSgodTMyKShkbCkgPj4gMTYpCisjZGVmaW5lIGdldF9ybG9jX29mZnMoZGwpCSgodTMyKShkbCkgJiAweGZmZmYpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X3Jsb2NfZGF0YSh1MzIgKmRsKQoreworCXJldHVybiAodTggKilkbCArIGdldF9ybG9jX29mZnMoKmRsKTsKK30KKworLyogRm9yIGRhdGFfbG9jIGNvbnZlcnNpb24gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2xvY19kYXRhKHUzMiAqZGwsIHZvaWQgKmVudCkKK3sKKwlyZXR1cm4gKHU4ICopZW50ICsgZ2V0X3Jsb2Nfb2ZmcygqZGwpOworfQorCisvKgorICogQ29udmVydCBkYXRhX3Jsb2MgdG8gZGF0YV9sb2M6CisgKiAgZGF0YV9ybG9jIHN0b3JlcyB0aGUgb2Zmc2V0IGZyb20gZGF0YV9ybG9jIGl0c2VsZiwgYnV0IGRhdGFfbG9jCisgKiAgc3RvcmVzIHRoZSBvZmZzZXQgZnJvbSBldmVudCBlbnRyeS4KKyAqLworI2RlZmluZSBjb252ZXJ0X3Jsb2NfdG9fbG9jKGRsLCBvZmZzKQkoKHUzMikoZGwpICsgKG9mZnMpKQorCisvKiBGb3IgZGVmaW5pbmcgbWFjcm9zLCBkZWZpbmUgc3RyaW5nL3N0cmluZ19zaXplIHR5cGVzICovCit0eXBlZGVmIHUzMiBzdHJpbmc7Cit0eXBlZGVmIHUzMiBzdHJpbmdfc2l6ZTsKKworLyogUHJpbnQgdHlwZSBmdW5jdGlvbiBmb3Igc3RyaW5nIHR5cGUgKi8KK3N0YXRpYyBfX2twcm9iZXMgaW50IFBSSU5UX1RZUEVfRlVOQ19OQU1FKHN0cmluZykoc3RydWN0IHRyYWNlX3NlcSAqcywKKwkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJCSAgdm9pZCAqZGF0YSwgdm9pZCAqZW50KQoreworCWludCBsZW4gPSAqKHUzMiAqKWRhdGEgPj4gMTY7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAlcz0oZmF1bHQpIiwgbmFtZSk7CisJZWxzZQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICVzPVwiJXNcIiIsIG5hbWUsCisJCQkJCShjb25zdCBjaGFyICopZ2V0X2xvY19kYXRhKGRhdGEsIGVudCkpOworfQorc3RhdGljIGNvbnN0IGNoYXIgUFJJTlRfVFlQRV9GTVRfTkFNRShzdHJpbmcpW10gPSAiXFxcIiVzXFxcIiI7CisKIC8qIERhdGEgZmV0Y2ggZnVuY3Rpb24gdHlwZSAqLwogdHlwZWRlZgl2b2lkICgqZmV0Y2hfZnVuY190KShzdHJ1Y3QgcHRfcmVncyAqLCB2b2lkICosIHZvaWQgKik7CiAKQEAgLTk0LDMyICsxNDIsMzggQEAKIAlyZXR1cm4gZnBybS0+Zm4ocmVncywgZnBybS0+ZGF0YSwgZGVzdCk7CiB9CiAKLSNkZWZpbmUgRkVUQ0hfRlVOQ19OQU1FKGtpbmQsIHR5cGUpCWZldGNoXyMja2luZCMjXyMjdHlwZQorI2RlZmluZSBGRVRDSF9GVU5DX05BTUUobWV0aG9kLCB0eXBlKQlmZXRjaF8jI21ldGhvZCMjXyMjdHlwZQogLyoKICAqIERlZmluZSBtYWNybyBmb3IgYmFzaWMgdHlwZXMgLSB3ZSBkb24ndCBuZWVkIHRvIGRlZmluZSBzKiB0eXBlcywgYmVjYXVzZQogICogd2UgaGF2ZSB0byBjYXJlIG9ubHkgYWJvdXQgYml0d2lkdGggYXQgcmVjb3JkaW5nIHRpbWUuCiAgKi8KLSNkZWZpbmUgREVGSU5FX0JBU0lDX0ZFVENIX0ZVTkNTKGtpbmQpICBcCi1ERUZJTkVfRkVUQ0hfIyNraW5kKHU4KQkJCVwKLURFRklORV9GRVRDSF8jI2tpbmQodTE2KQkJXAotREVGSU5FX0ZFVENIXyMja2luZCh1MzIpCQlcCi1ERUZJTkVfRkVUQ0hfIyNraW5kKHU2NCkKKyNkZWZpbmUgREVGSU5FX0JBU0lDX0ZFVENIX0ZVTkNTKG1ldGhvZCkgXAorREVGSU5FX0ZFVENIXyMjbWV0aG9kKHU4KQkJXAorREVGSU5FX0ZFVENIXyMjbWV0aG9kKHUxNikJCVwKK0RFRklORV9GRVRDSF8jI21ldGhvZCh1MzIpCQlcCitERUZJTkVfRkVUQ0hfIyNtZXRob2QodTY0KQogCi0jZGVmaW5lIENIRUNLX0JBU0lDX0ZFVENIX0ZVTkNTKGtpbmQsIGZuKQlcCi0JKChGRVRDSF9GVU5DX05BTUUoa2luZCwgdTgpID09IGZuKSB8fAlcCi0JIChGRVRDSF9GVU5DX05BTUUoa2luZCwgdTE2KSA9PSBmbikgfHwJXAotCSAoRkVUQ0hfRlVOQ19OQU1FKGtpbmQsIHUzMikgPT0gZm4pIHx8CVwKLQkgKEZFVENIX0ZVTkNfTkFNRShraW5kLCB1NjQpID09IGZuKSkKKyNkZWZpbmUgQ0hFQ0tfRkVUQ0hfRlVOQ1MobWV0aG9kLCBmbikJCQlcCisJKCgoRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgdTgpID09IGZuKSB8fAlcCisJICAoRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgdTE2KSA9PSBmbikgfHwJXAorCSAgKEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHUzMikgPT0gZm4pIHx8CVwKKwkgIChGRVRDSF9GVU5DX05BTUUobWV0aG9kLCB1NjQpID09IGZuKSB8fAlcCisJICAoRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgc3RyaW5nKSA9PSBmbikgfHwJXAorCSAgKEZFVENIX0ZVTkNfTkFNRShtZXRob2QsIHN0cmluZ19zaXplKSA9PSBmbikpIFwKKwkgJiYgKGZuICE9IE5VTEwpKQogCiAvKiBEYXRhIGZldGNoIGZ1bmN0aW9uIHRlbXBsYXRlcyAqLwogI2RlZmluZSBERUZJTkVfRkVUQ0hfcmVnKHR5cGUpCQkJCQkJXAogc3RhdGljIF9fa3Byb2JlcyB2b2lkIEZFVENIX0ZVTkNfTkFNRShyZWcsIHR5cGUpKHN0cnVjdCBwdF9yZWdzICpyZWdzLAlcCi0JCQkJCSAgdm9pZCAqb2Zmc2V0LCB2b2lkICpkZXN0KQlcCisJCQkJCXZvaWQgKm9mZnNldCwgdm9pZCAqZGVzdCkJXAogewkJCQkJCQkJCVwKIAkqKHR5cGUgKilkZXN0ID0gKHR5cGUpcmVnc19nZXRfcmVnaXN0ZXIocmVncywJCQlcCiAJCQkJKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpb2Zmc2V0KSk7CVwKIH0KIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhyZWcpCisvKiBObyBzdHJpbmcgb24gdGhlIHJlZ2lzdGVyICovCisjZGVmaW5lIGZldGNoX3JlZ19zdHJpbmcgTlVMTAorI2RlZmluZSBmZXRjaF9yZWdfc3RyaW5nX3NpemUgTlVMTAogCiAjZGVmaW5lIERFRklORV9GRVRDSF9zdGFjayh0eXBlKQkJCQkJXAogc3RhdGljIF9fa3Byb2JlcyB2b2lkIEZFVENIX0ZVTkNfTkFNRShzdGFjaywgdHlwZSkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXApAQCAtMTI5LDYgKzE4Myw5IEBACiAJCQkJKHVuc2lnbmVkIGludCkoKHVuc2lnbmVkIGxvbmcpb2Zmc2V0KSk7CVwKIH0KIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhzdGFjaykKKy8qIE5vIHN0cmluZyBvbiB0aGUgc3RhY2sgZW50cnkgKi8KKyNkZWZpbmUgZmV0Y2hfc3RhY2tfc3RyaW5nIE5VTEwKKyNkZWZpbmUgZmV0Y2hfc3RhY2tfc3RyaW5nX3NpemUgTlVMTAogCiAjZGVmaW5lIERFRklORV9GRVRDSF9yZXR2YWwodHlwZSkJCQkJCVwKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBGRVRDSF9GVU5DX05BTUUocmV0dmFsLCB0eXBlKShzdHJ1Y3QgcHRfcmVncyAqcmVncyxcCkBAIC0xMzcsNiArMTk0LDkgQEAKIAkqKHR5cGUgKilkZXN0ID0gKHR5cGUpcmVnc19yZXR1cm5fdmFsdWUocmVncyk7CQkJXAogfQogREVGSU5FX0JBU0lDX0ZFVENIX0ZVTkNTKHJldHZhbCkKKy8qIE5vIHN0cmluZyBvbiB0aGUgcmV0dmFsICovCisjZGVmaW5lIGZldGNoX3JldHZhbF9zdHJpbmcgTlVMTAorI2RlZmluZSBmZXRjaF9yZXR2YWxfc3RyaW5nX3NpemUgTlVMTAogCiAjZGVmaW5lIERFRklORV9GRVRDSF9tZW1vcnkodHlwZSkJCQkJCVwKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBGRVRDSF9GVU5DX05BTUUobWVtb3J5LCB0eXBlKShzdHJ1Y3QgcHRfcmVncyAqcmVncyxcCkBAIC0xNDksNiArMjA5LDYyIEBACiAJCSoodHlwZSAqKWRlc3QgPSByZXR2YWw7CQkJCQlcCiB9CiBERUZJTkVfQkFTSUNfRkVUQ0hfRlVOQ1MobWVtb3J5KQorLyoKKyAqIEZldGNoIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4gQ2FsbGVyIE1VU1Qgc2V0ICoodTMyICopZGVzdCB3aXRoIG1heAorICogbGVuZ3RoIGFuZCByZWxhdGl2ZSBkYXRhIGxvY2F0aW9uLgorICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgRkVUQ0hfRlVOQ19OQU1FKG1lbW9yeSwgc3RyaW5nKShzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJCQkJCSAgICAgIHZvaWQgKmFkZHIsIHZvaWQgKmRlc3QpCit7CisJbG9uZyByZXQ7CisJaW50IG1heGxlbiA9IGdldF9ybG9jX2xlbigqKHUzMiAqKWRlc3QpOworCXU4ICpkc3QgPSBnZXRfcmxvY19kYXRhKGRlc3QpOworCXU4ICpzcmMgPSBhZGRyOworCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKwlpZiAoIW1heGxlbikKKwkJcmV0dXJuOworCS8qCisJICogVHJ5IHRvIGdldCBzdHJpbmcgYWdhaW4sIHNpbmNlIHRoZSBzdHJpbmcgY2FuIGJlIGNoYW5nZWQgd2hpbGUKKwkgKiBwcm9iaW5nLgorCSAqLworCXNldF9mcyhLRVJORUxfRFMpOworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJZG8KKwkJcmV0ID0gX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhkc3QrKywgc3JjKyssIDEpOworCXdoaWxlIChkc3RbLTFdICYmIHJldCA9PSAwICYmIHNyYyAtICh1OCAqKWFkZHIgPCBtYXhsZW4pOworCWRzdFstMV0gPSAnXDAnOworCXBhZ2VmYXVsdF9lbmFibGUoKTsKKwlzZXRfZnMob2xkX2ZzKTsKKworCWlmIChyZXQgPCAwKSB7CS8qIEZhaWxlZCB0byBmZXRjaCBzdHJpbmcgKi8KKwkJKCh1OCAqKWdldF9ybG9jX2RhdGEoZGVzdCkpWzBdID0gJ1wwJzsKKwkJKih1MzIgKilkZXN0ID0gbWFrZV9kYXRhX3Jsb2MoMCwgZ2V0X3Jsb2Nfb2ZmcygqKHUzMiAqKWRlc3QpKTsKKwl9IGVsc2UKKwkJKih1MzIgKilkZXN0ID0gbWFrZV9kYXRhX3Jsb2Moc3JjIC0gKHU4ICopYWRkciwKKwkJCQkJICAgICAgZ2V0X3Jsb2Nfb2ZmcygqKHUzMiAqKWRlc3QpKTsKK30KKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHN0cmluZyAtLSBpbmNsdWRpbmcgbnVsbCB0ZXJtaW5hbCBieXRlICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgRkVUQ0hfRlVOQ19OQU1FKG1lbW9yeSwgc3RyaW5nX3NpemUpKHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkJCXZvaWQgKmFkZHIsIHZvaWQgKmRlc3QpCit7CisJaW50IHJldCwgbGVuID0gMDsKKwl1OCBjOworCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKworCXNldF9mcyhLRVJORUxfRFMpOworCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CisJZG8geworCQlyZXQgPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKCZjLCAodTggKilhZGRyICsgbGVuLCAxKTsKKwkJbGVuKys7CisJfSB3aGlsZSAoYyAmJiByZXQgPT0gMCAmJiBsZW4gPCBNQVhfU1RSSU5HX1NJWkUpOworCXBhZ2VmYXVsdF9lbmFibGUoKTsKKwlzZXRfZnMob2xkX2ZzKTsKKworCWlmIChyZXQgPCAwKQkvKiBGYWlsZWQgdG8gY2hlY2sgdGhlIGxlbmd0aCAqLworCQkqKHUzMiAqKWRlc3QgPSAwOworCWVsc2UKKwkJKih1MzIgKilkZXN0ID0gbGVuOworfQogCiAvKiBNZW1vcnkgZmV0Y2hpbmcgYnkgc3ltYm9sICovCiBzdHJ1Y3Qgc3ltYm9sX2NhY2hlIHsKQEAgLTIwMyw2ICszMTksOCBAQAogCQkqKHR5cGUgKilkZXN0ID0gMDsJCQkJCVwKIH0KIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhzeW1ib2wpCitERUZJTkVfRkVUQ0hfc3ltYm9sKHN0cmluZykKK0RFRklORV9GRVRDSF9zeW1ib2woc3RyaW5nX3NpemUpCiAKIC8qIERlcmVmZXJlbmNlIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb24gKi8KIHN0cnVjdCBkZXJlZl9mZXRjaF9wYXJhbSB7CkBAIC0yMjQsMTIgKzM0MiwxNCBAQAogCQkqKHR5cGUgKilkZXN0ID0gMDsJCQkJCVwKIH0KIERFRklORV9CQVNJQ19GRVRDSF9GVU5DUyhkZXJlZikKK0RFRklORV9GRVRDSF9kZXJlZihzdHJpbmcpCitERUZJTkVfRkVUQ0hfZGVyZWYoc3RyaW5nX3NpemUpCiAKIHN0YXRpYyBfX2twcm9iZXMgdm9pZCBmcmVlX2RlcmVmX2ZldGNoX3BhcmFtKHN0cnVjdCBkZXJlZl9mZXRjaF9wYXJhbSAqZGF0YSkKIHsKLQlpZiAoQ0hFQ0tfQkFTSUNfRkVUQ0hfRlVOQ1MoZGVyZWYsIGRhdGEtPm9yaWcuZm4pKQorCWlmIChDSEVDS19GRVRDSF9GVU5DUyhkZXJlZiwgZGF0YS0+b3JpZy5mbikpCiAJCWZyZWVfZGVyZWZfZmV0Y2hfcGFyYW0oZGF0YS0+b3JpZy5kYXRhKTsKLQllbHNlIGlmIChDSEVDS19CQVNJQ19GRVRDSF9GVU5DUyhzeW1ib2wsIGRhdGEtPm9yaWcuZm4pKQorCWVsc2UgaWYgKENIRUNLX0ZFVENIX0ZVTkNTKHN5bWJvbCwgZGF0YS0+b3JpZy5mbikpCiAJCWZyZWVfc3ltYm9sX2NhY2hlKGRhdGEtPm9yaWcuZGF0YSk7CiAJa2ZyZWUoZGF0YSk7CiB9CkBAIC0yNDAsMjMgKzM2MCw0MyBAQAogI2RlZmluZSBERUZBVUxUX0ZFVENIX1RZUEUgX0RFRkFVTFRfRkVUQ0hfVFlQRShCSVRTX1BFUl9MT05HKQogI2RlZmluZSBERUZBVUxUX0ZFVENIX1RZUEVfU1RSIF9fc3RyaW5naWZ5KERFRkFVTFRfRkVUQ0hfVFlQRSkKIAotI2RlZmluZSBBU1NJR05fRkVUQ0hfRlVOQyhraW5kLCB0eXBlKQlcCi0JLmtpbmQgPSBGRVRDSF9GVU5DX05BTUUoa2luZCwgdHlwZSkKKy8qIEZldGNoIHR5cGVzICovCitlbnVtIHsKKwlGRVRDSF9NVERfcmVnID0gMCwKKwlGRVRDSF9NVERfc3RhY2ssCisJRkVUQ0hfTVREX3JldHZhbCwKKwlGRVRDSF9NVERfbWVtb3J5LAorCUZFVENIX01URF9zeW1ib2wsCisJRkVUQ0hfTVREX2RlcmVmLAorCUZFVENIX01URF9FTkQsCit9OwogCi0jZGVmaW5lIEFTU0lHTl9GRVRDSF9UWVBFKHB0eXBlLCBmdHlwZSwgc2lnbikJXAotCXsubmFtZSA9ICNwdHlwZSwJCQlcCi0JIC5zaXplID0gc2l6ZW9mKGZ0eXBlKSwJCQlcCi0JIC5pc19zaWduZWQgPSBzaWduLAkJCVwKLQkgLnByaW50ID0gUFJJTlRfVFlQRV9GVU5DX05BTUUocHR5cGUpLAlcCi0JIC5mbXQgPSBQUklOVF9UWVBFX0ZNVF9OQU1FKHB0eXBlKSwJXAotQVNTSUdOX0ZFVENIX0ZVTkMocmVnLCBmdHlwZSksCQkJXAotQVNTSUdOX0ZFVENIX0ZVTkMoc3RhY2ssIGZ0eXBlKSwJCVwKLUFTU0lHTl9GRVRDSF9GVU5DKHJldHZhbCwgZnR5cGUpLAkJXAotQVNTSUdOX0ZFVENIX0ZVTkMobWVtb3J5LCBmdHlwZSksCQlcCi1BU1NJR05fRkVUQ0hfRlVOQyhzeW1ib2wsIGZ0eXBlKSwJCVwKLUFTU0lHTl9GRVRDSF9GVU5DKGRlcmVmLCBmdHlwZSksCQlcCisjZGVmaW5lIEFTU0lHTl9GRVRDSF9GVU5DKG1ldGhvZCwgdHlwZSkJXAorCVtGRVRDSF9NVERfIyNtZXRob2RdID0gRkVUQ0hfRlVOQ19OQU1FKG1ldGhvZCwgdHlwZSkKKworI2RlZmluZSBfX0FTU0lHTl9GRVRDSF9UWVBFKF9uYW1lLCBwdHlwZSwgZnR5cGUsIF9zaXplLCBzaWduLCBfZm10dHlwZSkJXAorCXsubmFtZSA9IF9uYW1lLAkJCQlcCisJIC5zaXplID0gX3NpemUsCQkJCQlcCisJIC5pc19zaWduZWQgPSBzaWduLAkJCQlcCisJIC5wcmludCA9IFBSSU5UX1RZUEVfRlVOQ19OQU1FKHB0eXBlKSwJCVwKKwkgLmZtdCA9IFBSSU5UX1RZUEVfRk1UX05BTUUocHR5cGUpLAkJXAorCSAuZm10dHlwZSA9IF9mbXR0eXBlLAkJCQlcCisJIC5mZXRjaCA9IHsJCQkJCVwKK0FTU0lHTl9GRVRDSF9GVU5DKHJlZywgZnR5cGUpLAkJCQlcCitBU1NJR05fRkVUQ0hfRlVOQyhzdGFjaywgZnR5cGUpLAkJCVwKK0FTU0lHTl9GRVRDSF9GVU5DKHJldHZhbCwgZnR5cGUpLAkJCVwKK0FTU0lHTl9GRVRDSF9GVU5DKG1lbW9yeSwgZnR5cGUpLAkJCVwKK0FTU0lHTl9GRVRDSF9GVU5DKHN5bWJvbCwgZnR5cGUpLAkJCVwKK0FTU0lHTl9GRVRDSF9GVU5DKGRlcmVmLCBmdHlwZSksCQkJXAorCSAgfQkJCQkJCVwKIAl9CiAKKyNkZWZpbmUgQVNTSUdOX0ZFVENIX1RZUEUocHR5cGUsIGZ0eXBlLCBzaWduKQkJCVwKKwlfX0FTU0lHTl9GRVRDSF9UWVBFKCNwdHlwZSwgcHR5cGUsIGZ0eXBlLCBzaXplb2YoZnR5cGUpLCBzaWduLCAjcHR5cGUpCisKKyNkZWZpbmUgRkVUQ0hfVFlQRV9TVFJJTkcgMAorI2RlZmluZSBGRVRDSF9UWVBFX1NUUlNJWkUgMQorCiAvKiBGZXRjaCB0eXBlIGluZm9ybWF0aW9uIHRhYmxlICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZldGNoX3R5cGUgewogCWNvbnN0IGNoYXIJKm5hbWU7CQkvKiBOYW1lIG9mIHR5cGUgKi8KQEAgLTI2NCwxNCArNDA0LDE2IEBACiAJaW50CQlpc19zaWduZWQ7CS8qIFNpZ25lZCBmbGFnICovCiAJcHJpbnRfdHlwZV9mdW5jX3QJcHJpbnQ7CS8qIFByaW50IGZ1bmN0aW9ucyAqLwogCWNvbnN0IGNoYXIJKmZtdDsJCS8qIEZyb21hdCBzdHJpbmcgKi8KKwljb25zdCBjaGFyCSpmbXR0eXBlOwkvKiBOYW1lIGluIGZvcm1hdCBmaWxlICovCiAJLyogRmV0Y2ggZnVuY3Rpb25zICovCi0JZmV0Y2hfZnVuY190CXJlZzsKLQlmZXRjaF9mdW5jX3QJc3RhY2s7Ci0JZmV0Y2hfZnVuY190CXJldHZhbDsKLQlmZXRjaF9mdW5jX3QJbWVtb3J5OwotCWZldGNoX2Z1bmNfdAlzeW1ib2w7Ci0JZmV0Y2hfZnVuY190CWRlcmVmOworCWZldGNoX2Z1bmNfdAlmZXRjaFtGRVRDSF9NVERfRU5EXTsKIH0gZmV0Y2hfdHlwZV90YWJsZVtdID0geworCS8qIFNwZWNpYWwgdHlwZXMgKi8KKwlbRkVUQ0hfVFlQRV9TVFJJTkddID0gX19BU1NJR05fRkVUQ0hfVFlQRSgic3RyaW5nIiwgc3RyaW5nLCBzdHJpbmcsCisJCQkJCXNpemVvZih1MzIpLCAxLCAiX19kYXRhX2xvYyBjaGFyW10iKSwKKwlbRkVUQ0hfVFlQRV9TVFJTSVpFXSA9IF9fQVNTSUdOX0ZFVENIX1RZUEUoInN0cmluZ19zaXplIiwgdTMyLAorCQkJCQlzdHJpbmdfc2l6ZSwgc2l6ZW9mKHUzMiksIDAsICJ1MzIiKSwKKwkvKiBCYXNpYyB0eXBlcyAqLwogCUFTU0lHTl9GRVRDSF9UWVBFKHU4LCAgdTgsICAwKSwKIAlBU1NJR05fRkVUQ0hfVFlQRSh1MTYsIHUxNiwgMCksCiAJQVNTSUdOX0ZFVENIX1RZUEUodTMyLCB1MzIsIDApLApAQCAtMzAyLDEyICs0NDQsMjggQEAKIAkqKHVuc2lnbmVkIGxvbmcgKilkZXN0ID0ga2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CiB9CiAKK3N0YXRpYyBmZXRjaF9mdW5jX3QgZ2V0X2ZldGNoX3NpemVfZnVuY3Rpb24oY29uc3Qgc3RydWN0IGZldGNoX3R5cGUgKnR5cGUsCisJCQkJCSAgICBmZXRjaF9mdW5jX3Qgb3JpZ19mbikKK3sKKwlpbnQgaTsKKworCWlmICh0eXBlICE9ICZmZXRjaF90eXBlX3RhYmxlW0ZFVENIX1RZUEVfU1RSSU5HXSkKKwkJcmV0dXJuIE5VTEw7CS8qIE9ubHkgc3RyaW5nIHR5cGUgbmVlZHMgc2l6ZSBmdW5jdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCBGRVRDSF9NVERfRU5EOyBpKyspCisJCWlmICh0eXBlLT5mZXRjaFtpXSA9PSBvcmlnX2ZuKQorCQkJcmV0dXJuIGZldGNoX3R5cGVfdGFibGVbRkVUQ0hfVFlQRV9TVFJTSVpFXS5mZXRjaFtpXTsKKworCVdBUk5fT04oMSk7CS8qIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBLcHJvYmUgZXZlbnQgY29yZSBmdW5jdGlvbnMKICAqLwogCiBzdHJ1Y3QgcHJvYmVfYXJnIHsKIAlzdHJ1Y3QgZmV0Y2hfcGFyYW0JZmV0Y2g7CisJc3RydWN0IGZldGNoX3BhcmFtCWZldGNoX3NpemU7CiAJdW5zaWduZWQgaW50CQlvZmZzZXQ7CS8qIE9mZnNldCBmcm9tIGFyZ3VtZW50IGVudHJ5ICovCiAJY29uc3QgY2hhcgkJKm5hbWU7CS8qIE5hbWUgb2YgdGhpcyBhcmd1bWVudCAqLwogCWNvbnN0IGNoYXIJCSpjb21tOwkvKiBDb21tYW5kIG9mIHRoaXMgYXJndW1lbnQgKi8KQEAgLTQyOSw5ICs1ODcsOSBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX3Byb2JlX2FyZyhzdHJ1Y3QgcHJvYmVfYXJnICphcmcpCiB7Ci0JaWYgKENIRUNLX0JBU0lDX0ZFVENIX0ZVTkNTKGRlcmVmLCBhcmctPmZldGNoLmZuKSkKKwlpZiAoQ0hFQ0tfRkVUQ0hfRlVOQ1MoZGVyZWYsIGFyZy0+ZmV0Y2guZm4pKQogCQlmcmVlX2RlcmVmX2ZldGNoX3BhcmFtKGFyZy0+ZmV0Y2guZGF0YSk7Ci0JZWxzZSBpZiAoQ0hFQ0tfQkFTSUNfRkVUQ0hfRlVOQ1Moc3ltYm9sLCBhcmctPmZldGNoLmZuKSkKKwllbHNlIGlmIChDSEVDS19GRVRDSF9GVU5DUyhzeW1ib2wsIGFyZy0+ZmV0Y2guZm4pKQogCQlmcmVlX3N5bWJvbF9jYWNoZShhcmctPmZldGNoLmRhdGEpOwogCWtmcmVlKGFyZy0+bmFtZSk7CiAJa2ZyZWUoYXJnLT5jb21tKTsKQEAgLTU0OCw3ICs3MDYsNyBAQAogCiAJaWYgKHN0cmNtcChhcmcsICJyZXR2YWwiKSA9PSAwKSB7CiAJCWlmIChpc19yZXR1cm4pCi0JCQlmLT5mbiA9IHQtPnJldHZhbDsKKwkJCWYtPmZuID0gdC0+ZmV0Y2hbRkVUQ0hfTVREX3JldHZhbF07CiAJCWVsc2UKIAkJCXJldCA9IC1FSU5WQUw7CiAJfSBlbHNlIGlmIChzdHJuY21wKGFyZywgInN0YWNrIiwgNSkgPT0gMCkgewpAQCAtNTYyLDcgKzcyMCw3IEBACiAJCQlpZiAocmV0IHx8IHBhcmFtID4gUEFSQU1fTUFYX1NUQUNLKQogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQllbHNlIHsKLQkJCQlmLT5mbiA9IHQtPnN0YWNrOworCQkJCWYtPmZuID0gdC0+ZmV0Y2hbRkVUQ0hfTVREX3N0YWNrXTsKIAkJCQlmLT5kYXRhID0gKHZvaWQgKilwYXJhbTsKIAkJCX0KIAkJfSBlbHNlCkBAIC01ODgsNyArNzQ2LDcgQEAKIAljYXNlICclJzoJLyogbmFtZWQgcmVnaXN0ZXIgKi8KIAkJcmV0ID0gcmVnc19xdWVyeV9yZWdpc3Rlcl9vZmZzZXQoYXJnICsgMSk7CiAJCWlmIChyZXQgPj0gMCkgewotCQkJZi0+Zm4gPSB0LT5yZWc7CisJCQlmLT5mbiA9IHQtPmZldGNoW0ZFVENIX01URF9yZWddOwogCQkJZi0+ZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpcmV0OwogCQkJcmV0ID0gMDsKIAkJfQpAQCAtNTk4LDcgKzc1Niw3IEBACiAJCQlyZXQgPSBzdHJpY3Rfc3RydG91bChhcmcgKyAxLCAwLCAmcGFyYW0pOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKLQkJCWYtPmZuID0gdC0+bWVtb3J5OworCQkJZi0+Zm4gPSB0LT5mZXRjaFtGRVRDSF9NVERfbWVtb3J5XTsKIAkJCWYtPmRhdGEgPSAodm9pZCAqKXBhcmFtOwogCQl9IGVsc2UgewogCQkJcmV0ID0gc3BsaXRfc3ltYm9sX29mZnNldChhcmcgKyAxLCAmb2Zmc2V0KTsKQEAgLTYwNiw3ICs3NjQsNyBAQAogCQkJCWJyZWFrOwogCQkJZi0+ZGF0YSA9IGFsbG9jX3N5bWJvbF9jYWNoZShhcmcgKyAxLCBvZmZzZXQpOwogCQkJaWYgKGYtPmRhdGEpCi0JCQkJZi0+Zm4gPSB0LT5zeW1ib2w7CisJCQkJZi0+Zm4gPSB0LT5mZXRjaFtGRVRDSF9NVERfc3ltYm9sXTsKIAkJfQogCQlicmVhazsKIAljYXNlICcrJzoJLyogZGVyZWYgbWVtb3J5ICovCkBAIC02MzYsMTQgKzc5NCwxNyBAQAogCQkJaWYgKHJldCkKIAkJCQlrZnJlZShkcHJtKTsKIAkJCWVsc2UgewotCQkJCWYtPmZuID0gdC0+ZGVyZWY7CisJCQkJZi0+Zm4gPSB0LT5mZXRjaFtGRVRDSF9NVERfZGVyZWZdOwogCQkJCWYtPmRhdGEgPSAodm9pZCAqKWRwcm07CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJfQotCWlmICghcmV0ICYmICFmLT5mbikKKwlpZiAoIXJldCAmJiAhZi0+Zm4pIHsJLyogUGFyc2VkLCBidXQgZG8gbm90IGZpbmQgZmV0Y2ggbWV0aG9kICovCisJCXByX2luZm8oIiVzIHR5cGUgaGFzIG5vIGNvcnJlc3BvbmRpbmcgZmV0Y2ggbWV0aG9kLlxuIiwKKwkJCXQtPm5hbWUpOwogCQlyZXQgPSAtRUlOVkFMOworCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NTIsNiArODEzLDcgQEAKIAkJCSAgIHN0cnVjdCBwcm9iZV9hcmcgKnBhcmcsIGludCBpc19yZXR1cm4pCiB7CiAJY29uc3QgY2hhciAqdDsKKwlpbnQgcmV0OwogCiAJaWYgKHN0cmxlbihhcmcpID4gTUFYX0FSR1NUUl9MRU4pIHsKIAkJcHJfaW5mbygiQXJndW1lbnQgaXMgdG9vIGxvbmcuOiAlc1xuIiwgIGFyZyk7CkBAIC02NzQsNyArODM2LDEzIEBACiAJfQogCXBhcmctPm9mZnNldCA9IHRwLT5zaXplOwogCXRwLT5zaXplICs9IHBhcmctPnR5cGUtPnNpemU7Ci0JcmV0dXJuIF9fcGFyc2VfcHJvYmVfYXJnKGFyZywgcGFyZy0+dHlwZSwgJnBhcmctPmZldGNoLCBpc19yZXR1cm4pOworCXJldCA9IF9fcGFyc2VfcHJvYmVfYXJnKGFyZywgcGFyZy0+dHlwZSwgJnBhcmctPmZldGNoLCBpc19yZXR1cm4pOworCWlmIChyZXQgPj0gMCkgeworCQlwYXJnLT5mZXRjaF9zaXplLmZuID0gZ2V0X2ZldGNoX3NpemVfZnVuY3Rpb24ocGFyZy0+dHlwZSwKKwkJCQkJCQkgICAgICBwYXJnLT5mZXRjaC5mbik7CisJCXBhcmctPmZldGNoX3NpemUuZGF0YSA9IHBhcmctPmZldGNoLmRhdGE7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qIFJldHVybiAxIGlmIG5hbWUgaXMgcmVzZXJ2ZWQgb3IgYWxyZWFkeSB1c2VkIGJ5IGFub3RoZXIgYXJndW1lbnQgKi8KQEAgLTc1NywxNCArOTI1LDE3IEBACiAJCQlwcl9pbmZvKCJEZWxldGUgY29tbWFuZCBuZWVkcyBhbiBldmVudCBuYW1lLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQltdXRleF9sb2NrKCZwcm9iZV9sb2NrKTsKIAkJdHAgPSBmaW5kX3Byb2JlX2V2ZW50KGV2ZW50LCBncm91cCk7CiAJCWlmICghdHApIHsKKwkJCW11dGV4X3VubG9jaygmcHJvYmVfbG9jayk7CiAJCQlwcl9pbmZvKCJFdmVudCAlcy8lcyBkb2Vzbid0IGV4aXN0LlxuIiwgZ3JvdXAsIGV2ZW50KTsKIAkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJCS8qIGRlbGV0ZSBhbiBldmVudCAqLwogCQl1bnJlZ2lzdGVyX3RyYWNlX3Byb2JlKHRwKTsKIAkJZnJlZV90cmFjZV9wcm9iZSh0cCk7CisJCW11dGV4X3VubG9jaygmcHJvYmVfbG9jayk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTA0Myw2ICsxMjE0LDU0IEBACiAJLnJlbGVhc2UgICAgICAgID0gc2VxX3JlbGVhc2UsCiB9OwogCisvKiBTdW0gdXAgdG90YWwgZGF0YSBsZW5ndGggZm9yIGR5bmFtaWMgYXJyYWllcyAoc3RyaW5ncykgKi8KK3N0YXRpYyBfX2twcm9iZXMgaW50IF9fZ2V0X2RhdGFfc2l6ZShzdHJ1Y3QgdHJhY2VfcHJvYmUgKnRwLAorCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGksIHJldCA9IDA7CisJdTMyIGxlbjsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQorCQlpZiAodW5saWtlbHkodHAtPmFyZ3NbaV0uZmV0Y2hfc2l6ZS5mbikpIHsKKwkJCWNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoX3NpemUsIHJlZ3MsICZsZW4pOworCQkJcmV0ICs9IGxlbjsKKwkJfQorCisJcmV0dXJuIHJldDsKK30KKworLyogU3RvcmUgdGhlIHZhbHVlIG9mIGVhY2ggYXJndW1lbnQgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCBzdG9yZV90cmFjZV9hcmdzKGludCBlbnRfc2l6ZSwgc3RydWN0IHRyYWNlX3Byb2JlICp0cCwKKwkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICAgICAgIHU4ICpkYXRhLCBpbnQgbWF4bGVuKQoreworCWludCBpOworCXUzMiBlbmQgPSB0cC0+c2l6ZTsKKwl1MzIgKmRsOwkvKiBEYXRhIChyZWxhdGl2ZSkgbG9jYXRpb24gKi8KKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7CisJCWlmICh1bmxpa2VseSh0cC0+YXJnc1tpXS5mZXRjaF9zaXplLmZuKSkgeworCQkJLyoKKwkJCSAqIEZpcnN0LCB3ZSBzZXQgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIGFuZAorCQkJICogbWF4aW11bSBkYXRhIGxlbmd0aCB0byAqZGwKKwkJCSAqLworCQkJZGwgPSAodTMyICopKGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpOworCQkJKmRsID0gbWFrZV9kYXRhX3Jsb2MobWF4bGVuLCBlbmQgLSB0cC0+YXJnc1tpXS5vZmZzZXQpOworCQkJLyogVGhlbiB0cnkgdG8gZmV0Y2ggc3RyaW5nIG9yIGR5bmFtaWMgYXJyYXkgZGF0YSAqLworCQkJY2FsbF9mZXRjaCgmdHAtPmFyZ3NbaV0uZmV0Y2gsIHJlZ3MsIGRsKTsKKwkJCS8qIFJlZHVjZSBtYXhpbXVtIGxlbmd0aCAqLworCQkJZW5kICs9IGdldF9ybG9jX2xlbigqZGwpOworCQkJbWF4bGVuIC09IGdldF9ybG9jX2xlbigqZGwpOworCQkJLyogVHJpY2sgaGVyZSwgY29udmVydCBkYXRhX3Jsb2MgdG8gZGF0YV9sb2MgKi8KKwkJCSpkbCA9IGNvbnZlcnRfcmxvY190b19sb2MoKmRsLAorCQkJCSBlbnRfc2l6ZSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJCX0gZWxzZQorCQkJLyogSnVzdCBmZXRjaGluZyBkYXRhIG5vcm1hbGx5ICovCisJCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncywKKwkJCQkgICBkYXRhICsgdHAtPmFyZ3NbaV0ub2Zmc2V0KTsKKwl9Cit9CisKIC8qIEtwcm9iZSBoYW5kbGVyICovCiBzdGF0aWMgX19rcHJvYmVzIHZvaWQga3Byb2JlX3RyYWNlX2Z1bmMoc3RydWN0IGtwcm9iZSAqa3AsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMTA1MCw4ICsxMjY5LDcgQEAKIAlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2VudHJ5X2hlYWQgKmVudHJ5OwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7Ci0JdTggKmRhdGE7Ci0JaW50IHNpemUsIGksIHBjOworCWludCBzaXplLCBkc2l6ZSwgcGM7CiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJnRwLT5jYWxsOwogCkBAIC0xMDYwLDcgKzEyNzgsOCBAQAogCWxvY2FsX3NhdmVfZmxhZ3MoaXJxX2ZsYWdzKTsKIAlwYyA9IHByZWVtcHRfY291bnQoKTsKIAotCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIHRwLT5zaXplOworCWRzaXplID0gX19nZXRfZGF0YV9zaXplKHRwLCByZWdzKTsKKwlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZSArIGRzaXplOwogCiAJZXZlbnQgPSB0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmJ1ZmZlciwgY2FsbC0+ZXZlbnQudHlwZSwKIAkJCQkJCSAgc2l6ZSwgaXJxX2ZsYWdzLCBwYyk7CkBAIC0xMDY5LDkgKzEyODgsNyBAQAogCiAJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAllbnRyeS0+aXAgPSAodW5zaWduZWQgbG9uZylrcC0+YWRkcjsKLQlkYXRhID0gKHU4ICopJmVudHJ5WzFdOwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncywgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJc3RvcmVfdHJhY2VfYXJncyhzaXplb2YoKmVudHJ5KSwgdHAsIHJlZ3MsICh1OCAqKSZlbnRyeVsxXSwgZHNpemUpOwogCiAJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncywgcGMpOwpAQCAtMTA4NSwxNSArMTMwMiwxNSBAQAogCXN0cnVjdCBrcmV0cHJvYmVfdHJhY2VfZW50cnlfaGVhZCAqZW50cnk7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKLQl1OCAqZGF0YTsKLQlpbnQgc2l6ZSwgaSwgcGM7CisJaW50IHNpemUsIHBjLCBkc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGlycV9mbGFncyk7CiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZTsKKwlkc2l6ZSA9IF9fZ2V0X2RhdGFfc2l6ZSh0cCwgcmVncyk7CisJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgdHAtPnNpemUgKyBkc2l6ZTsKIAogCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKCZidWZmZXIsIGNhbGwtPmV2ZW50LnR5cGUsCiAJCQkJCQkgIHNpemUsIGlycV9mbGFncywgcGMpOwpAQCAtMTEwMyw5ICsxMzIwLDcgQEAKIAllbnRyeSA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CiAJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKLQlkYXRhID0gKHU4ICopJmVudHJ5WzFdOwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncywgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJc3RvcmVfdHJhY2VfYXJncyhzaXplb2YoKmVudHJ5KSwgdHAsIHJlZ3MsICh1OCAqKSZlbnRyeVsxXSwgZHNpemUpOwogCiAJaWYgKCFmaWx0ZXJfY3VycmVudF9jaGVja19kaXNjYXJkKGJ1ZmZlciwgY2FsbCwgZW50cnksIGV2ZW50KSkKIAkJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncywgcGMpOwpAQCAtMTEzNyw3ICsxMzUyLDcgQEAKIAlkYXRhID0gKHU4ICopJmZpZWxkWzFdOwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQogCQlpZiAoIXRwLT5hcmdzW2ldLnR5cGUtPnByaW50KHMsIHRwLT5hcmdzW2ldLm5hbWUsCi0JCQkJCSAgICAgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCkpCisJCQkJCSAgICAgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCwgZmllbGQpKQogCQkJZ290byBwYXJ0aWFsOwogCiAJaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKSkKQEAgLTExNzksNyArMTM5NCw3IEBACiAJZGF0YSA9ICh1OCAqKSZmaWVsZFsxXTsKIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykKIAkJaWYgKCF0cC0+YXJnc1tpXS50eXBlLT5wcmludChzLCB0cC0+YXJnc1tpXS5uYW1lLAotCQkJCQkgICAgIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQpKQorCQkJCQkgICAgIGRhdGEgKyB0cC0+YXJnc1tpXS5vZmZzZXQsIGZpZWxkKSkKIAkJCWdvdG8gcGFydGlhbDsKIAogCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIlxuIikpCkBAIC0xMjE0LDExICsxNDI5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcHJvYmVfZXZlbnRfcmF3X2luaXQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsKQotewotCXJldHVybiAwOwotfQotCiAjdW5kZWYgREVGSU5FX0ZJRUxECiAjZGVmaW5lIERFRklORV9GSUVMRCh0eXBlLCBpdGVtLCBuYW1lLCBpc19zaWduZWQpCQkJXAogCWRvIHsJCQkJCQkJCVwKQEAgLTEyMzksNyArMTQ0OSw3IEBACiAJREVGSU5FX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBGSUVMRF9TVFJJTkdfSVAsIDApOwogCS8qIFNldCBhcmd1bWVudCBuYW1lcyBhcyBmaWVsZHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdHAtPm5yX2FyZ3M7IGkrKykgewotCQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgdHAtPmFyZ3NbaV0udHlwZS0+bmFtZSwKKwkJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsIHRwLT5hcmdzW2ldLnR5cGUtPmZtdHR5cGUsCiAJCQkJCSB0cC0+YXJnc1tpXS5uYW1lLAogCQkJCQkgc2l6ZW9mKGZpZWxkKSArIHRwLT5hcmdzW2ldLm9mZnNldCwKIAkJCQkJIHRwLT5hcmdzW2ldLnR5cGUtPnNpemUsCkBAIC0xMjYxLDcgKzE0NzEsNyBAQAogCURFRklORV9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXRfaXAsIEZJRUxEX1NUUklOR19SRVRJUCwgMCk7CiAJLyogU2V0IGFyZ3VtZW50IG5hbWVzIGFzIGZpZWxkcyAqLwogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7Ci0JCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChldmVudF9jYWxsLCB0cC0+YXJnc1tpXS50eXBlLT5uYW1lLAorCQlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgdHAtPmFyZ3NbaV0udHlwZS0+Zm10dHlwZSwKIAkJCQkJIHRwLT5hcmdzW2ldLm5hbWUsCiAJCQkJCSBzaXplb2YoZmllbGQpICsgdHAtPmFyZ3NbaV0ub2Zmc2V0LAogCQkJCQkgdHAtPmFyZ3NbaV0udHlwZS0+c2l6ZSwKQEAgLTEzMDEsOCArMTUxMSwxMyBAQAogCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiXCIsICVzIiwgYXJnKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKSB7Ci0JCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiLCBSRUMtPiVzIiwKLQkJCQl0cC0+YXJnc1tpXS5uYW1lKTsKKwkJaWYgKHN0cmNtcCh0cC0+YXJnc1tpXS50eXBlLT5uYW1lLCAic3RyaW5nIikgPT0gMCkKKwkJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLAorCQkJCQkiLCBfX2dldF9zdHIoJXMpIiwKKwkJCQkJdHAtPmFyZ3NbaV0ubmFtZSk7CisJCWVsc2UKKwkJCXBvcyArPSBzbnByaW50ZihidWYgKyBwb3MsIExFTl9PUl9aRVJPLCAiLCBSRUMtPiVzIiwKKwkJCQkJdHAtPmFyZ3NbaV0ubmFtZSk7CiAJfQogCiAjdW5kZWYgTEVOX09SX1pFUk8KQEAgLTEzMzksMTEgKzE1NTQsMTEgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmdHAtPmNhbGw7CiAJc3RydWN0IGtwcm9iZV90cmFjZV9lbnRyeV9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQl1OCAqZGF0YTsKLQlpbnQgc2l6ZSwgX19zaXplLCBpOworCWludCBzaXplLCBfX3NpemUsIGRzaXplOwogCWludCByY3R4OwogCi0JX19zaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZTsKKwlkc2l6ZSA9IF9fZ2V0X2RhdGFfc2l6ZSh0cCwgcmVncyk7CisJX19zaXplID0gc2l6ZW9mKCplbnRyeSkgKyB0cC0+c2l6ZSArIGRzaXplOwogCXNpemUgPSBBTElHTihfX3NpemUgKyBzaXplb2YodTMyKSwgc2l6ZW9mKHU2NCkpOwogCXNpemUgLT0gc2l6ZW9mKHUzMik7CiAJaWYgKFdBUk5fT05DRShzaXplID4gUEVSRl9NQVhfVFJBQ0VfU0laRSwKQEAgLTEzNTUsOSArMTU3MCw4IEBACiAJCXJldHVybjsKIAogCWVudHJ5LT5pcCA9ICh1bnNpZ25lZCBsb25nKWtwLT5hZGRyOwotCWRhdGEgPSAodTggKikmZW50cnlbMV07Ci0JZm9yIChpID0gMDsgaSA8IHRwLT5ucl9hcmdzOyBpKyspCi0JCWNhbGxfZmV0Y2goJnRwLT5hcmdzW2ldLmZldGNoLCByZWdzLCBkYXRhICsgdHAtPmFyZ3NbaV0ub2Zmc2V0KTsKKwltZW1zZXQoJmVudHJ5WzFdLCAwLCBkc2l6ZSk7CisJc3RvcmVfdHJhY2VfYXJncyhzaXplb2YoKmVudHJ5KSwgdHAsIHJlZ3MsICh1OCAqKSZlbnRyeVsxXSwgZHNpemUpOwogCiAJaGVhZCA9IHRoaXNfY3B1X3B0cihjYWxsLT5wZXJmX2V2ZW50cyk7CiAJcGVyZl90cmFjZV9idWZfc3VibWl0KGVudHJ5LCBzaXplLCByY3R4LCBlbnRyeS0+aXAsIDEsIHJlZ3MsIGhlYWQpOwpAQCAtMTM3MSwxMSArMTU4NSwxMSBAQAogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9ICZ0cC0+Y2FsbDsKIAlzdHJ1Y3Qga3JldHByb2JlX3RyYWNlX2VudHJ5X2hlYWQgKmVudHJ5OwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXU4ICpkYXRhOwotCWludCBzaXplLCBfX3NpemUsIGk7CisJaW50IHNpemUsIF9fc2l6ZSwgZHNpemU7CiAJaW50IHJjdHg7CiAKLQlfX3NpemUgPSBzaXplb2YoKmVudHJ5KSArIHRwLT5zaXplOworCWRzaXplID0gX19nZXRfZGF0YV9zaXplKHRwLCByZWdzKTsKKwlfX3NpemUgPSBzaXplb2YoKmVudHJ5KSArIHRwLT5zaXplICsgZHNpemU7CiAJc2l6ZSA9IEFMSUdOKF9fc2l6ZSArIHNpemVvZih1MzIpLCBzaXplb2YodTY0KSk7CiAJc2l6ZSAtPSBzaXplb2YodTMyKTsKIAlpZiAoV0FSTl9PTkNFKHNpemUgPiBQRVJGX01BWF9UUkFDRV9TSVpFLApAQCAtMTM4OCw5ICsxNjAyLDcgQEAKIAogCWVudHJ5LT5mdW5jID0gKHVuc2lnbmVkIGxvbmcpdHAtPnJwLmtwLmFkZHI7CiAJZW50cnktPnJldF9pcCA9ICh1bnNpZ25lZCBsb25nKXJpLT5yZXRfYWRkcjsKLQlkYXRhID0gKHU4ICopJmVudHJ5WzFdOwotCWZvciAoaSA9IDA7IGkgPCB0cC0+bnJfYXJnczsgaSsrKQotCQljYWxsX2ZldGNoKCZ0cC0+YXJnc1tpXS5mZXRjaCwgcmVncywgZGF0YSArIHRwLT5hcmdzW2ldLm9mZnNldCk7CisJc3RvcmVfdHJhY2VfYXJncyhzaXplb2YoKmVudHJ5KSwgdHAsIHJlZ3MsICh1OCAqKSZlbnRyeVsxXSwgZHNpemUpOwogCiAJaGVhZCA9IHRoaXNfY3B1X3B0cihjYWxsLT5wZXJmX2V2ZW50cyk7CiAJcGVyZl90cmFjZV9idWZfc3VibWl0KGVudHJ5LCBzaXplLCByY3R4LCBlbnRyeS0+cmV0X2lwLCAxLCByZWdzLCBoZWFkKTsKQEAgLTE0ODYsMTUgKzE2OTgsMTIgQEAKIAlpbnQgcmV0OwogCiAJLyogSW5pdGlhbGl6ZSBmdHJhY2VfZXZlbnRfY2FsbCAqLworCUlOSVRfTElTVF9IRUFEKCZjYWxsLT5jbGFzcy0+ZmllbGRzKTsKIAlpZiAocHJvYmVfaXNfcmV0dXJuKHRwKSkgewotCQlJTklUX0xJU1RfSEVBRCgmY2FsbC0+Y2xhc3MtPmZpZWxkcyk7CiAJCWNhbGwtPmV2ZW50LmZ1bmNzID0gJmtyZXRwcm9iZV9mdW5jczsKLQkJY2FsbC0+Y2xhc3MtPnJhd19pbml0ID0gcHJvYmVfZXZlbnRfcmF3X2luaXQ7CiAJCWNhbGwtPmNsYXNzLT5kZWZpbmVfZmllbGRzID0ga3JldHByb2JlX2V2ZW50X2RlZmluZV9maWVsZHM7CiAJfSBlbHNlIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmNhbGwtPmNsYXNzLT5maWVsZHMpOwogCQljYWxsLT5ldmVudC5mdW5jcyA9ICZrcHJvYmVfZnVuY3M7Ci0JCWNhbGwtPmNsYXNzLT5yYXdfaW5pdCA9IHByb2JlX2V2ZW50X3Jhd19pbml0OwogCQljYWxsLT5jbGFzcy0+ZGVmaW5lX2ZpZWxkcyA9IGtwcm9iZV9ldmVudF9kZWZpbmVfZmllbGRzOwogCX0KIAlpZiAoc2V0X3ByaW50X2ZtdCh0cCkgPCAwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2tzeW0uYyBiL2tlcm5lbC90cmFjZS90cmFjZV9rc3ltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlYWYwMDcuLjAwMDAwMDAKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2tzeW0uYworKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKgotICogdHJhY2Vfa3N5bS5jIC0gS2VybmVsIFN5bWJvbCBUcmFjZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA5Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLQotI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgotI2luY2x1ZGUgInRyYWNlLmgiCi0KLSNpbmNsdWRlIDxsaW51eC9od19icmVha3BvaW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2h3X2JyZWFrcG9pbnQuaD4KLQotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQotI2RlZmluZSBLU1lNX1RSQUNFUl9PUF9MRU4gMyAvKiBydy0gKi8KLQotc3RydWN0IHRyYWNlX2tzeW0gewotCXN0cnVjdCBwZXJmX2V2ZW50CSoqa3N5bV9oYnA7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfYXR0cglhdHRyOwotI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCi0JYXRvbWljNjRfdAkJY291bnRlcjsKLSNlbmRpZgotCXN0cnVjdCBobGlzdF9ub2RlCWtzeW1faGxpc3Q7Ci19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICprc3ltX3RyYWNlX2FycmF5OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGtzeW1fdHJhY2luZ19lbmFibGVkOwotCi1zdGF0aWMgSExJU1RfSEVBRChrc3ltX2ZpbHRlcl9oZWFkKTsKLQotc3RhdGljIERFRklORV9NVVRFWChrc3ltX3RyYWNlcl9tdXRleCk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPRklMRV9LU1lNX1RSQUNFUgotCi0jZGVmaW5lIE1BWF9VTF9JTlQgMHhmZmZmZmZmZgotCi12b2lkIGtzeW1fY29sbGVjdF9zdGF0cyh1bnNpZ25lZCBsb25nIGhicF9oaXRfYWRkcikKLXsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGVudHJ5LCBub2RlLCAma3N5bV9maWx0ZXJfaGVhZCwga3N5bV9obGlzdCkgewotCQlpZiAoZW50cnktPmF0dHIuYnBfYWRkciA9PSBoYnBfaGl0X2FkZHIpIHsKLQkJCWF0b21pYzY0X2luYygmZW50cnktPmNvdW50ZXIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIgKi8KLQotdm9pZCBrc3ltX2hicF9oYW5kbGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpoYnAsIGludCBubWksCi0JCSAgICAgIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhICpkYXRhLAotCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBrc3ltX3RyYWNlX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcjsKLQlpbnQgcGM7Ci0KLQlpZiAoIWtzeW1fdHJhY2luZ19lbmFibGVkKQotCQlyZXR1cm47Ci0KLQlidWZmZXIgPSBrc3ltX3RyYWNlX2FycmF5LT5idWZmZXI7Ci0KLQlwYyA9IHByZWVtcHRfY291bnQoKTsKLQotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0tTWU0sCi0JCQkJCQkJc2l6ZW9mKCplbnRyeSksIDAsIHBjKTsKLQlpZiAoIWV2ZW50KQotCQlyZXR1cm47Ci0KLQllbnRyeQkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQllbnRyeS0+aXAJPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwotCWVudHJ5LT50eXBlCT0gaHdfYnJlYWtwb2ludF90eXBlKGhicCk7Ci0JZW50cnktPmFkZHIJPSBod19icmVha3BvaW50X2FkZHIoaGJwKTsKLQlzdHJsY3B5KGVudHJ5LT5jbWQsIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOwotCi0jaWZkZWYgQ09ORklHX1BST0ZJTEVfS1NZTV9UUkFDRVIKLQlrc3ltX2NvbGxlY3Rfc3RhdHMoaHdfYnJlYWtwb2ludF9hZGRyKGhicCkpOwotI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSICovCi0KLQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50LCAwLCBwYyk7Ci19Ci0KLS8qIFZhbGlkIGFjY2VzcyB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYXMKLSAqCi0gKiBydy0gOiBTZXQgUmVhZC9Xcml0ZSBBY2Nlc3MgQnJlYWtwb2ludAotICogLXctIDogU2V0IFdyaXRlIEFjY2VzcyBCcmVha3BvaW50Ci0gKiAtLS0gOiBDbGVhciBCcmVha3BvaW50cwotICogLS14IDogU2V0IEV4ZWN1dGlvbiBCcmVhayBwb2ludHMgKE5vdCBhdmFpbGFibGUgeWV0KQotICoKLSAqLwotc3RhdGljIGludCBrc3ltX3RyYWNlX2dldF9hY2Nlc3NfdHlwZShjaGFyICpzdHIpCi17Ci0JaW50IGFjY2VzcyA9IDA7Ci0KLQlpZiAoc3RyWzBdID09ICdyJykKLQkJYWNjZXNzIHw9IEhXX0JSRUFLUE9JTlRfUjsKLQotCWlmIChzdHJbMV0gPT0gJ3cnKQotCQlhY2Nlc3MgfD0gSFdfQlJFQUtQT0lOVF9XOwotCi0JaWYgKHN0clsyXSA9PSAneCcpCi0JCWFjY2VzcyB8PSBIV19CUkVBS1BPSU5UX1g7Ci0KLQlzd2l0Y2ggKGFjY2VzcykgewotCWNhc2UgSFdfQlJFQUtQT0lOVF9SOgotCWNhc2UgSFdfQlJFQUtQT0lOVF9XOgotCWNhc2UgSFdfQlJFQUtQT0lOVF9XIHwgSFdfQlJFQUtQT0lOVF9SOgotCQlyZXR1cm4gYWNjZXNzOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotLyoKLSAqIFRoZXJlIGNhbiBiZSBzZXZlcmFsIHBvc3NpYmxlIG1hbGZvcm1lZCByZXF1ZXN0cyBhbmQgd2UgYXR0ZW1wdCB0byBjYXB0dXJlCi0gKiBhbGwgb2YgdGhlbS4gV2UgZW51bWVyYXRlIHNvbWUgb2YgdGhlIHJ1bGVzCi0gKiAxLiBXZSB3aWxsIG5vdCBhbGxvdyBrZXJuZWwgc3ltYm9scyB3aXRoICc6JyBzaW5jZSBpdCBpcyB1c2VkIGFzIGEgZGVsaW1pdGVyLgotICogICAgaS5lLiBtdWx0aXBsZSAnOicgc3ltYm9scyBkaXNhbGxvd2VkLiBQb3NzaWJsZSB1c2VzIGFyZSBvZiB0aGUgZm9ybQotICogICAgPG1vZHVsZT46PGtzeW1fbmFtZT46PG9wPi4KLSAqIDIuIE5vIGRlbGltaXRlciBzeW1ib2wgJzonIGluIHRoZSBpbnB1dCBzdHJpbmcKLSAqIDMuIFNwdXJpb3VzIG9wZXJhdG9yIHN5bWJvbHMgb3Igc3ltYm9scyBub3QgaW4gdGhlaXIgcmVzcGVjdGl2ZSBwb3NpdGlvbnMKLSAqIDQuIDxrc3ltX25hbWU+Oi0tLSBpLmUuIGNsZWFyIGJyZWFrcG9pbnQgcmVxdWVzdCB3aGVuIGtzeW1fbmFtZSBub3QgaW4gZmlsZQotICogNS4gS2VybmVsIHN5bWJvbCBub3QgYSBwYXJ0IG9mIC9wcm9jL2thbGxzeW1zCi0gKiA2LiBEdXBsaWNhdGUgcmVxdWVzdHMKLSAqLwotc3RhdGljIGludCBwYXJzZV9rc3ltX3RyYWNlX3N0cihjaGFyICppbnB1dF9zdHJpbmcsIGNoYXIgKiprc3ltbmFtZSwKLQkJCQkJCQl1bnNpZ25lZCBsb25nICphZGRyKQotewotCWludCByZXQ7Ci0KLQkqa3N5bW5hbWUgPSBzdHJzZXAoJmlucHV0X3N0cmluZywgIjoiKTsKLQkqYWRkciA9IGthbGxzeW1zX2xvb2t1cF9uYW1lKCprc3ltbmFtZSk7Ci0KLQkvKiBDaGVjayBmb3IgbWFsZm9ybWVkIHJlcXVlc3Q6ICgyKSwgKDEpIGFuZCAoNSkgKi8KLQlpZiAoKCFpbnB1dF9zdHJpbmcpIHx8Ci0JICAgIChzdHJsZW4oaW5wdXRfc3RyaW5nKSAhPSBLU1lNX1RSQUNFUl9PUF9MRU4pIHx8Ci0JICAgICgqYWRkciA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7OwotCi0JcmV0ID0ga3N5bV90cmFjZV9nZXRfYWNjZXNzX3R5cGUoaW5wdXRfc3RyaW5nKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBwcm9jZXNzX25ld19rc3ltX2VudHJ5KGNoYXIgKmtzeW1uYW1lLCBpbnQgb3AsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7Ci0JaW50IHJldCA9IC1FTk9NRU07Ci0KLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFjZV9rc3ltKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnRyeSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlod19icmVha3BvaW50X2luaXQoJmVudHJ5LT5hdHRyKTsKLQotCWVudHJ5LT5hdHRyLmJwX3R5cGUgPSBvcDsKLQllbnRyeS0+YXR0ci5icF9hZGRyID0gYWRkcjsKLQllbnRyeS0+YXR0ci5icF9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl80OwotCi0JZW50cnktPmtzeW1faGJwID0gcmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KCZlbnRyeS0+YXR0ciwKLQkJCQkJa3N5bV9oYnBfaGFuZGxlcik7Ci0KLQlpZiAoSVNfRVJSKGVudHJ5LT5rc3ltX2hicCkpIHsKLQkJcmV0ID0gUFRSX0VSUihlbnRyeS0+a3N5bV9oYnApOwotCQlpZiAocmV0ID09IC1FTk9TUEMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAia3N5bV90cmFjZXI6IE1heGltdW0gbGltaXQgcmVhY2hlZC4iCi0JCQkiIE5vIG5ldyByZXF1ZXN0cyBmb3IgdHJhY2luZyBjYW4gYmUgYWNjZXB0ZWQgbm93LlxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJrc3ltX3RyYWNlciByZXF1ZXN0IGZhaWxlZC4gVHJ5IGFnYWluIgotCQkJCQkgIiBsYXRlciEhXG4iKTsKLQkJfQotCQlnb3RvIGVycjsKLQl9Ci0KLQlobGlzdF9hZGRfaGVhZF9yY3UoJihlbnRyeS0+a3N5bV9obGlzdCksICZrc3ltX2ZpbHRlcl9oZWFkKTsKLQotCXJldHVybiAwOwotCi1lcnI6Ci0Ja2ZyZWUoZW50cnkpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHNzaXplX3Qga3N5bV90cmFjZV9maWx0ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqczsKLQlzc2l6ZV90IGNudCA9IDA7Ci0JaW50IHJldDsKLQotCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdHJhY2Vfc2VxX2luaXQocyk7Ci0KLQltdXRleF9sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7Ci0KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJmtzeW1fZmlsdGVyX2hlYWQsIGtzeW1faGxpc3QpIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXBTOiIsCi0JCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZyllbnRyeS0+YXR0ci5icF9hZGRyKTsKLQkJaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9SKQotCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgInItLVxuIik7Ci0JCWVsc2UgaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9XKQotCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIi13LVxuIik7Ci0JCWVsc2UgaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgPT0gKEhXX0JSRUFLUE9JTlRfVyB8IEhXX0JSRUFLUE9JTlRfUikpCi0JCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAicnctXG4iKTsKLQkJV0FSTl9PTl9PTkNFKCFyZXQpOwotCX0KLQotCWNudCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7Ci0KLQltdXRleF91bmxvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKLQotCWtmcmVlKHMpOwotCi0JcmV0dXJuIGNudDsKLX0KLQotc3RhdGljIHZvaWQgX19rc3ltX3RyYWNlX3Jlc2V0KHZvaWQpCi17Ci0Jc3RydWN0IHRyYWNlX2tzeW0gKmVudHJ5OwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZTE7Ci0KLQltdXRleF9sb2NrKCZrc3ltX3RyYWNlcl9tdXRleCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbm9kZTEsICZrc3ltX2ZpbHRlcl9oZWFkLAotCQkJCQkJCQlrc3ltX2hsaXN0KSB7Ci0JCXVucmVnaXN0ZXJfd2lkZV9od19icmVha3BvaW50KGVudHJ5LT5rc3ltX2hicCk7Ci0JCWhsaXN0X2RlbF9yY3UoJihlbnRyeS0+a3N5bV9obGlzdCkpOwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJa2ZyZWUoZW50cnkpOwotCX0KLQltdXRleF91bmxvY2soJmtzeW1fdHJhY2VyX211dGV4KTsKLX0KLQotc3RhdGljIHNzaXplX3Qga3N5bV90cmFjZV9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JY2hhciAqYnVmLCAqaW5wdXRfc3RyaW5nLCAqa3N5bW5hbWUgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcga3N5bV9hZGRyID0gMDsKLQlpbnQgcmV0LCBvcCwgY2hhbmdlZCA9IDA7Ci0KLQlidWYgPSBremFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0ID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkKLQkJZ290byBvdXQ7Ci0KLQlidWZbY291bnRdID0gJ1wwJzsKLQlpbnB1dF9zdHJpbmcgPSBzdHJzdHJpcChidWYpOwotCi0JLyoKLQkgKiBDbGVhciBhbGwgYnJlYWtwb2ludHMgaWY6Ci0JICogMTogZWNobyA+IGtzeW1fdHJhY2VfZmlsdGVyCi0JICogMjogZWNobyAwID4ga3N5bV90cmFjZV9maWx0ZXIKLQkgKiAzOiBlY2hvICIqOi0tLSIgPiBrc3ltX3RyYWNlX2ZpbHRlcgotCSAqLwotCWlmICghaW5wdXRfc3RyaW5nWzBdIHx8ICFzdHJjbXAoaW5wdXRfc3RyaW5nLCAiMCIpIHx8Ci0JICAgICFzdHJjbXAoaW5wdXRfc3RyaW5nLCAiKjotLS0iKSkgewotCQlfX2tzeW1fdHJhY2VfcmVzZXQoKTsKLQkJcmV0ID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gb3AgPSBwYXJzZV9rc3ltX3RyYWNlX3N0cihpbnB1dF9zdHJpbmcsICZrc3ltbmFtZSwgJmtzeW1fYWRkcik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JbXV0ZXhfbG9jaygma3N5bV90cmFjZXJfbXV0ZXgpOwotCi0JcmV0ID0gLUVJTlZBTDsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJmtzeW1fZmlsdGVyX2hlYWQsIGtzeW1faGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5hdHRyLmJwX2FkZHIgPT0ga3N5bV9hZGRyKSB7Ci0JCQkvKiBDaGVjayBmb3IgbWFsZm9ybWVkIHJlcXVlc3Q6ICg2KSAqLwotCQkJaWYgKGVudHJ5LT5hdHRyLmJwX3R5cGUgIT0gb3ApCi0JCQkJY2hhbmdlZCA9IDE7Ci0JCQllbHNlCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNoYW5nZWQpIHsKLQkJdW5yZWdpc3Rlcl93aWRlX2h3X2JyZWFrcG9pbnQoZW50cnktPmtzeW1faGJwKTsKLQkJZW50cnktPmF0dHIuYnBfdHlwZSA9IG9wOwotCQlyZXQgPSAwOwotCQlpZiAob3AgPiAwKSB7Ci0JCQllbnRyeS0+a3N5bV9oYnAgPQotCQkJCXJlZ2lzdGVyX3dpZGVfaHdfYnJlYWtwb2ludCgmZW50cnktPmF0dHIsCi0JCQkJCWtzeW1faGJwX2hhbmRsZXIpOwotCQkJaWYgKElTX0VSUihlbnRyeS0+a3N5bV9oYnApKQotCQkJCXJldCA9IFBUUl9FUlIoZW50cnktPmtzeW1faGJwKTsKLQkJCWVsc2UKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQkJLyogRXJyb3Igb3IgInN5bWJvbDotLS0iIGNhc2U6IGRyb3AgaXQgKi8KLQkJaGxpc3RfZGVsX3JjdSgmKGVudHJ5LT5rc3ltX2hsaXN0KSk7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCQlrZnJlZShlbnRyeSk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9IGVsc2UgewotCQkvKiBDaGVjayBmb3IgbWFsZm9ybWVkIHJlcXVlc3Q6ICg0KSAqLwotCQlpZiAob3ApCi0JCQlyZXQgPSBwcm9jZXNzX25ld19rc3ltX2VudHJ5KGtzeW1uYW1lLCBvcCwga3N5bV9hZGRyKTsKLQl9Ci1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygma3N5bV90cmFjZXJfbXV0ZXgpOwotb3V0OgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuICFyZXQgPyBjb3VudCA6IHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga3N5bV90cmFjaW5nX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCi0JLnJlYWQJCT0ga3N5bV90cmFjZV9maWx0ZXJfcmVhZCwKLQkud3JpdGUJCT0ga3N5bV90cmFjZV9maWx0ZXJfd3JpdGUsCi19OwotCi1zdGF0aWMgdm9pZCBrc3ltX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0Ja3N5bV90cmFjaW5nX2VuYWJsZWQgPSAwOwotCV9fa3N5bV90cmFjZV9yZXNldCgpOwotfQotCi1zdGF0aWMgaW50IGtzeW1fdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCWludCBjcHUsIHJldCA9IDA7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKLQlrc3ltX3RyYWNpbmdfZW5hYmxlZCA9IDE7Ci0Ja3N5bV90cmFjZV9hcnJheSA9IHRyOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQga3N5bV90cmFjZV9wcmludF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQotewotCXNlcV9wdXRzKG0sCi0JCSAiIyAgICAgICBUQVNLLVBJRCAgIENQVSMgICAgICBTeW1ib2wgICAgICAgICAgICAgICAgICAgICIKLQkJICJUeXBlICAgIEZ1bmN0aW9uXG4iKTsKLQlzZXFfcHV0cyhtLAotCQkgIiMgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAiCi0JCSAiIHwgICAgICAgICB8XG4iKTsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGtzeW1fdHJhY2Vfb3V0cHV0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCBrc3ltX3RyYWNlX2VudHJ5ICpmaWVsZDsKLQljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwotCWludCByZXQ7Ci0KLQlpZiAoZW50cnktPnR5cGUgIT0gVFJBQ0VfS1NZTSkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiUxMXMtJS01ZCBbJTAzZF0gJXBTIiwgZmllbGQtPmNtZCwKLQkJCQllbnRyeS0+cGlkLCBpdGVyLT5jcHUsIChjaGFyICopZmllbGQtPmFkZHIpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlzd2l0Y2ggKGZpZWxkLT50eXBlKSB7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1I6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiBSICAiKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1c6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiBXICAiKTsKLQkJYnJlYWs7Ci0JY2FzZSBIV19CUkVBS1BPSU5UX1IgfCBIV19CUkVBS1BPSU5UX1c6Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiBSVyAiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQlzcHJpbnRfc3ltYm9sKHN0ciwgZmllbGQtPmlwKTsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlc1xuIiwgc3RyKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RydWN0IHRyYWNlciBrc3ltX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KLXsKLQkubmFtZQkJPSAia3N5bV90cmFjZXIiLAotCS5pbml0CQk9IGtzeW1fdHJhY2VfaW5pdCwKLQkucmVzZXQJCT0ga3N5bV90cmFjZV9yZXNldCwKLSNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCi0JLnNlbGZ0ZXN0CT0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9rc3ltLAotI2VuZGlmCi0JLnByaW50X2hlYWRlciAgID0ga3N5bV90cmFjZV9wcmludF9oZWFkZXIsCi0JLnByaW50X2xpbmUJPSBrc3ltX3RyYWNlX291dHB1dAotfTsKLQotI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCi1zdGF0aWMgaW50IGtzeW1fcHJvZmlsZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgdHJhY2Vfa3N5bSAqZW50cnk7Ci0JaW50IGFjY2Vzc190eXBlID0gMDsKLQljaGFyIGZuX25hbWVbS1NZTV9OQU1FX0xFTl07Ci0KLQlzZXFfcHV0cyhtLCAiICBBY2Nlc3MgVHlwZSAiKTsKLQlzZXFfcHV0cyhtLCAiICBTeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudGVyXG4iKTsKLQlzZXFfcHV0cyhtLCAiICAtLS0tLS0tLS0tLSAiKTsKLQlzZXFfcHV0cyhtLCAiICAtLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tXG4iKTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIG5vZGUsICZrc3ltX2ZpbHRlcl9oZWFkLCBrc3ltX2hsaXN0KSB7Ci0KLQkJYWNjZXNzX3R5cGUgPSBlbnRyeS0+YXR0ci5icF90eXBlOwotCi0JCXN3aXRjaCAoYWNjZXNzX3R5cGUpIHsKLQkJY2FzZSBIV19CUkVBS1BPSU5UX1I6Ci0JCQlzZXFfcHV0cyhtLCAiICBSICAgICAgICAgICAiKTsKLQkJCWJyZWFrOwotCQljYXNlIEhXX0JSRUFLUE9JTlRfVzoKLQkJCXNlcV9wdXRzKG0sICIgIFcgICAgICAgICAgICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XOgotCQkJc2VxX3B1dHMobSwgIiAgUlcgICAgICAgICAgIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXNlcV9wdXRzKG0sICIgIE5BICAgICAgICAgICIpOwotCQl9Ci0KLQkJaWYgKGxvb2t1cF9zeW1ib2xfbmFtZShlbnRyeS0+YXR0ci5icF9hZGRyLCBmbl9uYW1lKSA+PSAwKQotCQkJc2VxX3ByaW50ZihtLCAiICAlLTM2cyIsIGZuX25hbWUpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKG0sICIgICUtMzZzIiwgIjxOQT4iKTsKLQkJc2VxX3ByaW50ZihtLCAiICUxNWxsdVxuIiwKLQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXRvbWljNjRfcmVhZCgmZW50cnktPmNvdW50ZXIpKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBrc3ltX3Byb2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKm5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBrc3ltX3Byb2ZpbGVfc2hvdywgTlVMTCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGtzeW1fcHJvZmlsZV9mb3BzID0gewotCS5vcGVuCQk9IGtzeW1fcHJvZmlsZV9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSICovCi0KLV9faW5pdCBzdGF0aWMgaW50IGluaXRfa3N5bV90cmFjZSh2b2lkKQotewotCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwotCi0JZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7Ci0KLQl0cmFjZV9jcmVhdGVfZmlsZSgia3N5bV90cmFjZV9maWx0ZXIiLCAwNjQ0LCBkX3RyYWNlciwKLQkJCSAgTlVMTCwgJmtzeW1fdHJhY2luZ19mb3BzKTsKLQotI2lmZGVmIENPTkZJR19QUk9GSUxFX0tTWU1fVFJBQ0VSCi0JdHJhY2VfY3JlYXRlX2ZpbGUoImtzeW1fcHJvZmlsZSIsIDA0NDQsIGRfdHJhY2VyLAotCQkJICBOVUxMLCAma3N5bV9wcm9maWxlX2ZvcHMpOwotI2VuZGlmCi0KLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZrc3ltX3RyYWNlcik7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW5pdF9rc3ltX3RyYWNlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwppbmRleCA1N2MxYjQ1Li4wMjI3MmJhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC0xNiw5ICsxNiw2IEBACiAKIERFQ0xBUkVfUldTRU0odHJhY2VfZXZlbnRfbXV0ZXgpOwogCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdHJhY2Vfc2VxLCBmdHJhY2VfZXZlbnRfc2VxKTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChmdHJhY2VfZXZlbnRfc2VxKTsKLQogc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGV2ZW50X2hhc2hbRVZFTlRfSEFTSFNJWkVdIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbnQgbmV4dF9ldmVudF90eXBlID0gX19UUkFDRV9MQVNUX1RZUEUgKyAxOwpAQCAtMTA2OSw2NSArMTA2Niw2IEBACiAJLmZ1bmNzCQk9ICZ0cmFjZV93YWtlX2Z1bmNzLAogfTsKIAotLyogVFJBQ0VfU1BFQ0lBTCAqLwotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3NwZWNpYWxfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAotCQkJCQkgICAgIGludCBmbGFncywgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKLQotCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiIyAlbGQgJWxkICVsZFxuIiwKLQkJCSAgICAgIGZpZWxkLT5hcmcxLAotCQkJICAgICAgZmllbGQtPmFyZzIsCi0JCQkgICAgICBmaWVsZC0+YXJnMykpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCi0JCQkJCSAgIGludCBmbGFncywgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKLXsKLQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7Ci0Jc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7Ci0KLQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKLQotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMSk7Ci0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKLQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQotc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3NwZWNpYWxfYmluKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKLQkJCQkJICAgaW50IGZsYWdzLCBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQotewotCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKLQlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKLQotCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwotCi0JU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOwotCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMyk7Ci0KLQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyB0cmFjZV9zcGVjaWFsX2Z1bmNzID0gewotCS50cmFjZQkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAotCS5yYXcJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKLQkuaGV4CQk9IHRyYWNlX3NwZWNpYWxfaGV4LAotCS5iaW5hcnkJCT0gdHJhY2Vfc3BlY2lhbF9iaW4sCi19OwotCi1zdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3NwZWNpYWxfZXZlbnQgPSB7Ci0JLnR5cGUJCT0gVFJBQ0VfU1BFQ0lBTCwKLQkuZnVuY3MJCT0gJnRyYWNlX3NwZWNpYWxfZnVuY3MsCi19OwotCiAvKiBUUkFDRV9TVEFDSyAqLwogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3RhY2tfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLApAQCAtMTE2MSw5ICsxMDk5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2Vfc3RhY2tfZnVuY3MgPSB7CiAJLnRyYWNlCQk9IHRyYWNlX3N0YWNrX3ByaW50LAotCS5yYXcJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKLQkuaGV4CQk9IHRyYWNlX3NwZWNpYWxfaGV4LAotCS5iaW5hcnkJCT0gdHJhY2Vfc3BlY2lhbF9iaW4sCiB9OwogCiBzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3N0YWNrX2V2ZW50ID0gewpAQCAtMTE5NCw5ICsxMTI5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudF9mdW5jdGlvbnMgdHJhY2VfdXNlcl9zdGFja19mdW5jcyA9IHsKIAkudHJhY2UJCT0gdHJhY2VfdXNlcl9zdGFja19wcmludCwKLQkucmF3CQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCi0JLmhleAkJPSB0cmFjZV9zcGVjaWFsX2hleCwKLQkuYmluYXJ5CQk9IHRyYWNlX3NwZWNpYWxfYmluLAogfTsKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV91c2VyX3N0YWNrX2V2ZW50ID0gewpAQCAtMTMxNCw3ICsxMjQ2LDYgQEAKIAkmdHJhY2VfZm5fZXZlbnQsCiAJJnRyYWNlX2N0eF9ldmVudCwKIAkmdHJhY2Vfd2FrZV9ldmVudCwKLQkmdHJhY2Vfc3BlY2lhbF9ldmVudCwKIAkmdHJhY2Vfc3RhY2tfZXZlbnQsCiAJJnRyYWNlX3VzZXJfc3RhY2tfZXZlbnQsCiAJJnRyYWNlX2JwcmludF9ldmVudCwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwppbmRleCAwZTczYmMyLi40MDg2ZWFlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCkBAIC00Niw3ICs0Niw2IEBACiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IHJlc2NoZWQ7CiAJaW50IGNwdTsKIAlpbnQgcGM7CiAKQEAgLTU0LDcgKzUzLDcgQEAKIAkJcmV0dXJuOwogCiAJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwogCiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoY3B1ICE9IHdha2V1cF9jdXJyZW50X2NwdSkKQEAgLTc0LDcgKzczLDcgQEAKICBvdXQ6CiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogIG91dF9lbmFibGU6Ci0JZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0KQEAgLTM4Myw2ICszODIsNyBAQAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3dha2V1cCwKICNlbmRpZgorCS51c2VfbWF4X3RyCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIHdha2V1cF9ydF90cmFjZXIgX19yZWFkX21vc3RseSA9CkBAIC0zOTcsNiArMzk3LDcgQEAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF93YWtldXAsCiAjZW5kaWYKKwkudXNlX21heF90cgk9IDEsCiB9OwogCiBfX2luaXQgc3RhdGljIGludCBpbml0X3dha2V1cF90cmFjZXIodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggMjUwZTdmOS4uMTU1YTQxNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTEzLDExICsxMyw5IEBACiAJY2FzZSBUUkFDRV9XQUtFOgogCWNhc2UgVFJBQ0VfU1RBQ0s6CiAJY2FzZSBUUkFDRV9QUklOVDoKLQljYXNlIFRSQUNFX1NQRUNJQUw6CiAJY2FzZSBUUkFDRV9CUkFOQ0g6CiAJY2FzZSBUUkFDRV9HUkFQSF9FTlQ6CiAJY2FzZSBUUkFDRV9HUkFQSF9SRVQ6Ci0JY2FzZSBUUkFDRV9LU1lNOgogCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC02OTEsMzggKzY4OSw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiAqLwogCi0jaWZkZWYgQ09ORklHX1NZU1BST0ZfVFJBQ0VSCi1pbnQKLXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc3lzcHJvZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7Ci0KLQkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7Ci0JaWYgKHJldCkgewotCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBTbGVlcCBmb3IgYSAxLzEwIG9mIGEgc2Vjb25kICovCi0JbXNsZWVwKDEwMCk7Ci0JLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KLQl0cmFjaW5nX3N0b3AoKTsKLQkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCi0JcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7Ci0JdHJhY2UtPnJlc2V0KHRyKTsKLQl0cmFjaW5nX3N0YXJ0KCk7Ci0KLQlpZiAoIXJldCAmJiAhY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gbm8gZW50cmllcyBmb3VuZCAuLiIpOwotCQlyZXQgPSAtMTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19TWVNQUk9GX1RSQUNFUiAqLwotCiAjaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKIGludAogdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9icmFuY2goc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC03NTUsNTYgKzcyMSwzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0JSQU5DSF9UUkFDRVIgKi8KIAotI2lmZGVmIENPTkZJR19LU1lNX1RSQUNFUgotc3RhdGljIGludCBrc3ltX3NlbGZ0ZXN0X2R1bW15OwotCi1pbnQKLXRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfa3N5bShzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7Ci0KLQkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7Ci0JaWYgKHJldCkgewotCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlrc3ltX3NlbGZ0ZXN0X2R1bW15ID0gMDsKLQkvKiBSZWdpc3RlciB0aGUgcmVhZC13cml0ZSB0cmFjaW5nIHJlcXVlc3QgKi8KLQotCXJldCA9IHByb2Nlc3NfbmV3X2tzeW1fZW50cnkoImtzeW1fc2VsZnRlc3RfZHVtbXkiLAotCQkJCSAgICAgSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XLAotCQkJCQkodW5zaWduZWQgbG9uZykoJmtzeW1fc2VsZnRlc3RfZHVtbXkpKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgImtzeW1fdHJhY2UgcmVhZC13cml0ZSBzdGFydHVwIHRlc3QgZmFpbGVkXG4iKTsKLQkJZ290byByZXRfcGF0aDsKLQl9Ci0JLyogUGVyZm9ybSBhIHJlYWQgYW5kIGEgd3JpdGUgb3BlcmF0aW9uIG92ZXIgdGhlIGR1bW15IHZhcmlhYmxlIHRvCi0JICogdHJpZ2dlciB0aGUgdHJhY2VyCi0JICovCi0JaWYgKGtzeW1fc2VsZnRlc3RfZHVtbXkgPT0gMCkKLQkJa3N5bV9zZWxmdGVzdF9kdW1teSsrOwotCi0JLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KLQl0cmFjaW5nX3N0b3AoKTsKLQkvKiBjaGVjayB0aGUgdHJhY2UgYnVmZmVyICovCi0JcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsICZjb3VudCk7Ci0JdHJhY2UtPnJlc2V0KHRyKTsKLQl0cmFjaW5nX3N0YXJ0KCk7Ci0KLQkvKiByZWFkICYgd3JpdGUgb3BlcmF0aW9ucyAtIG9uZSBlYWNoIGlzIHBlcmZvcm1lZCBvbiB0aGUgZHVtbXkgdmFyaWFibGUKLQkgKiB0cmlnZ2VyaW5nIHR3byBlbnRyaWVzIGluIHRoZSB0cmFjZSBidWZmZXIKLQkgKi8KLQlpZiAoIXJldCAmJiBjb3VudCAhPSAyKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgIktzeW0gdHJhY2VyIHN0YXJ0dXAgdGVzdCBmYWlsZWQiKTsKLQkJcmV0ID0gLTE7Ci0JfQotCi1yZXRfcGF0aDoKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmIC8qIENPTkZJR19LU1lNX1RSQUNFUiAqLwotCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCmluZGV4IGY0YmM5YjIuLjA1NjQ2OGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jCkBAIC0xMTAsMTIgKzExMCwxMiBAQAogc3RhdGljIHZvaWQKIHN0YWNrX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCiB7Ci0JaW50IGNwdSwgcmVzY2hlZDsKKwlpbnQgY3B1OwogCiAJaWYgKHVubGlrZWx5KCFmdHJhY2VfZW5hYmxlZCB8fCBzdGFja190cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAotCXJlc2NoZWQgPSBmdHJhY2VfcHJlZW1wdF9kaXNhYmxlKCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIAogCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAJLyogbm8gYXRvbWljIG5lZWRlZCwgd2Ugb25seSBtb2RpZnkgdGhpcyB2YXJpYWJsZSBieSB0aGlzIGNwdSAqLwpAQCAtMTI3LDcgKzEyNyw3IEBACiAgb3V0OgogCXBlcl9jcHUodHJhY2VfYWN0aXZlLCBjcHUpLS07CiAJLyogcHJldmVudCByZWN1cnNpb24gaW4gc2NoZWR1bGUgKi8KLQlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCAzNGUzNTgwLi5iYWM3NTJmIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMjMsNiArMjMsOSBAQAogc3RhdGljIGludCBzeXNjYWxsX2VudGVyX2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIHN0YXRpYyBpbnQgc3lzY2FsbF9leGl0X2RlZmluZV9maWVsZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKIAorLyogQWxsIHN5c2NhbGwgZXhpdCBldmVudHMgaGF2ZSB0aGUgc2FtZSBmaWVsZHMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoc3lzY2FsbF9leGl0X2ZpZWxkcyk7CisKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICoKIHN5c2NhbGxfZ2V0X2VudGVyX2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7CkBAIC0zNCw5ICszNyw3IEBACiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqCiBzeXNjYWxsX2dldF9leGl0X2ZpZWxkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwpCiB7Ci0Jc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5ID0gY2FsbC0+ZGF0YTsKLQotCXJldHVybiAmZW50cnktPmV4aXRfZmllbGRzOworCXJldHVybiAmc3lzY2FsbF9leGl0X2ZpZWxkczsKIH0KIAogc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBlbnRlcl9zeXNjYWxsX3ByaW50X2Z1bmNzID0gewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3OTc0YTUuLjAwMDAwMDAKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYworKysgL2Rldi9udWxsCkBAIC0xLDMyOSArMCwwIEBACi0vKgotICogdHJhY2Ugc3RhY2sgdHJhY2VzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDgsIFNvZXJlbiBTYW5kbWFubgotICogQ29weXJpZ2h0IChDKSAyMDA3IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotICovCi0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotCi0jaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KLQotI2luY2x1ZGUgInRyYWNlLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkJKnN5c3Byb2ZfdHJhY2U7Ci1zdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkJdHJhY2VyX2VuYWJsZWQ7Ci0KLS8qCi0gKiAxIG1zZWMgc2FtcGxlIGludGVydmFsIGJ5IGRlZmF1bHQ6Ci0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhbXBsZV9wZXJpb2QgPSAxMDAwMDAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzYW1wbGVfbWF4X2RlcHRoID0gNTEyOwotCi1zdGF0aWMgREVGSU5FX01VVEVYKHNhbXBsZV90aW1lcl9sb2NrKTsKLS8qCi0gKiBQZXIgQ1BVIGhydGltZXJzIHRoYXQgZG8gdGhlIHByb2ZpbGluZzoKLSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBocnRpbWVyLCBzdGFja190cmFjZV9ocnRpbWVyKTsKLQotc3RydWN0IHN0YWNrX2ZyYW1lIHsKLQljb25zdCB2b2lkIF9fdXNlcgkqbmV4dF9mcDsKLQl1bnNpZ25lZCBsb25nCQlyZXR1cm5fYWRkcmVzczsKLX07Ci0KLXN0YXRpYyBpbnQgY29weV9zdGFja19mcmFtZShjb25zdCB2b2lkIF9fdXNlciAqZnAsIHN0cnVjdCBzdGFja19mcmFtZSAqZnJhbWUpCi17Ci0JaW50IHJldDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBmcCwgc2l6ZW9mKCpmcmFtZSkpKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IDE7Ci0JcGFnZWZhdWx0X2Rpc2FibGUoKTsKLQlpZiAoX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyhmcmFtZSwgZnAsIHNpemVvZigqZnJhbWUpKSkKLQkJcmV0ID0gMDsKLQlwYWdlZmF1bHRfZW5hYmxlKCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3QgYmFja3RyYWNlX2luZm8gewotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUJKmRhdGE7Ci0Jc3RydWN0IHRyYWNlX2FycmF5CSp0cjsKLQlpbnQJCQlwb3M7Ci19OwotCi1zdGF0aWMgdm9pZAotYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sKHZvaWQgKmRhdGEsIGNoYXIgKm1zZywgdW5zaWduZWQgbG9uZyBzeW1ib2wpCi17Ci0JLyogSWdub3JlIHdhcm5pbmdzICovCi19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQotc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKLXsKLQkvKiBEb24ndCBib3RoZXIgd2l0aCBJUlEgc3RhY2tzIGZvciBub3cgKi8KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV9hZGRyZXNzKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHJlbGlhYmxlKQotewotCXN0cnVjdCBiYWNrdHJhY2VfaW5mbyAqaW5mbyA9IGRhdGE7Ci0KLQlpZiAoaW5mby0+cG9zIDwgc2FtcGxlX21heF9kZXB0aCAmJiByZWxpYWJsZSkgewotCQlfX3RyYWNlX3NwZWNpYWwoaW5mby0+dHIsIGluZm8tPmRhdGEsIDEsIGFkZHIsIDApOwotCi0JCWluZm8tPnBvcysrOwotCX0KLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0gewotCS53YXJuaW5nCQk9IGJhY2t0cmFjZV93YXJuaW5nLAotCS53YXJuaW5nX3N5bWJvbAkJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCi0JLnN0YWNrCQkJPSBiYWNrdHJhY2Vfc3RhY2ssCi0JLmFkZHJlc3MJCT0gYmFja3RyYWNlX2FkZHJlc3MsCi0JLndhbGtfc3RhY2sJCT0gcHJpbnRfY29udGV4dF9zdGFjaywKLX07Ci0KLXN0YXRpYyBpbnQKLXRyYWNlX2tlcm5lbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkgICAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpCi17Ci0Jc3RydWN0IGJhY2t0cmFjZV9pbmZvIGluZm87Ci0JdW5zaWduZWQgbG9uZyBicDsKLQljaGFyICpzdGFjazsKLQotCWluZm8udHIgPSB0cjsKLQlpbmZvLmRhdGEgPSBkYXRhOwotCWluZm8ucG9zID0gMTsKLQotCV9fdHJhY2Vfc3BlY2lhbChpbmZvLnRyLCBpbmZvLmRhdGEsIDEsIHJlZ3MtPmlwLCAwKTsKLQotCXN0YWNrID0gKChjaGFyICopcmVncyArIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwotI2lmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCi0JYnAgPSByZWdzLT5icDsKLSNlbHNlCi0JYnAgPSAwOwotI2VuZGlmCi0KLQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsICh2b2lkICopc3RhY2ssIGJwLCAmYmFja3RyYWNlX29wcywgJmluZm8pOwotCi0JcmV0dXJuIGluZm8ucG9zOwotfQotCi1zdGF0aWMgdm9pZCB0aW1lcl9ub3RpZnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjcHUpCi17Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQlzdHJ1Y3Qgc3RhY2tfZnJhbWUgZnJhbWU7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0cjsKLQljb25zdCB2b2lkIF9fdXNlciAqZnA7Ci0JaW50IGlzX3VzZXI7Ci0JaW50IGk7Ci0KLQlpZiAoIXJlZ3MpCi0JCXJldHVybjsKLQotCXRyID0gc3lzcHJvZl90cmFjZTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlpc191c2VyID0gdXNlcl9tb2RlKHJlZ3MpOwotCi0JaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQtPnBpZCA9PSAwKQotCQlyZXR1cm47Ci0KLQlpZiAoaXNfdXNlciAmJiBjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCi0JCXJldHVybjsKLQotCV9fdHJhY2Vfc3BlY2lhbCh0ciwgZGF0YSwgMCwgMCwgY3VycmVudC0+cGlkKTsKLQotCWlmICghaXNfdXNlcikKLQkJaSA9IHRyYWNlX2tlcm5lbChyZWdzLCB0ciwgZGF0YSk7Ci0JZWxzZQotCQlpID0gMDsKLQotCS8qCi0JICogVHJhY2UgdXNlciBzdGFjayBpZiB3ZSBhcmUgbm90IGEga2VybmVsIHRocmVhZAotCSAqLwotCWlmIChjdXJyZW50LT5tbSAmJiBpIDwgc2FtcGxlX21heF9kZXB0aCkgewotCQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopY3VycmVudC0+dGhyZWFkLnNwMCAtIDE7Ci0KLQkJZnAgPSAodm9pZCBfX3VzZXIgKilyZWdzLT5icDsKLQotCQlfX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIDIsIHJlZ3MtPmlwLCAwKTsKLQotCQl3aGlsZSAoaSA8IHNhbXBsZV9tYXhfZGVwdGgpIHsKLQkJCWZyYW1lLm5leHRfZnAgPSBOVUxMOwotCQkJZnJhbWUucmV0dXJuX2FkZHJlc3MgPSAwOwotCQkJaWYgKCFjb3B5X3N0YWNrX2ZyYW1lKGZwLCAmZnJhbWUpKQotCQkJCWJyZWFrOwotCQkJaWYgKCh1bnNpZ25lZCBsb25nKWZwIDwgcmVncy0+c3ApCi0JCQkJYnJlYWs7Ci0KLQkJCV9fdHJhY2Vfc3BlY2lhbCh0ciwgZGF0YSwgMiwgZnJhbWUucmV0dXJuX2FkZHJlc3MsCi0JCQkJCSh1bnNpZ25lZCBsb25nKWZwKTsKLQkJCWZwID0gZnJhbWUubmV4dF9mcDsKLQotCQkJaSsrOwotCQl9Ci0KLQl9Ci0KLQkvKgotCSAqIFNwZWNpYWwgdHJhY2UgZW50cnkgaWYgd2Ugb3ZlcmZsb3cgdGhlIG1heCBkZXB0aDoKLQkgKi8KLQlpZiAoaSA9PSBzYW1wbGVfbWF4X2RlcHRoKQotCQlfX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIC0xLCAtMSwgLTEpOwotCi0JX190cmFjZV9zcGVjaWFsKHRyLCBkYXRhLCAzLCBjdXJyZW50LT5waWQsIGkpOwotfQotCi1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgc3RhY2tfdHJhY2VfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmhydGltZXIpCi17Ci0JLyogdHJhY2UgaGVyZSAqLwotCXRpbWVyX25vdGlmeShnZXRfaXJxX3JlZ3MoKSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoc2FtcGxlX3BlcmlvZCkpOwotCi0JcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKLX0KLQotc3RhdGljIHZvaWQgc3RhcnRfc3RhY2tfdGltZXIodm9pZCAqdW51c2VkKQotewotCXN0cnVjdCBocnRpbWVyICpocnRpbWVyID0gJl9fZ2V0X2NwdV92YXIoc3RhY2tfdHJhY2VfaHJ0aW1lcik7Ci0KLQlocnRpbWVyX2luaXQoaHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQlocnRpbWVyLT5mdW5jdGlvbiA9IHN0YWNrX3RyYWNlX3RpbWVyX2ZuOwotCi0JaHJ0aW1lcl9zdGFydChocnRpbWVyLCBuc190b19rdGltZShzYW1wbGVfcGVyaW9kKSwKLQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTF9QSU5ORUQpOwotfQotCi1zdGF0aWMgdm9pZCBzdGFydF9zdGFja190aW1lcnModm9pZCkKLXsKLQlvbl9lYWNoX2NwdShzdGFydF9zdGFja190aW1lciwgTlVMTCwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3Bfc3RhY2tfdGltZXIoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lciA9ICZwZXJfY3B1KHN0YWNrX3RyYWNlX2hydGltZXIsIGNwdSk7Ci0KLQlocnRpbWVyX2NhbmNlbChocnRpbWVyKTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9zdGFja190aW1lcnModm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXN0b3Bfc3RhY2tfdGltZXIoY3B1KTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9zdGFja190cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCW11dGV4X2xvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLQlzdG9wX3N0YWNrX3RpbWVycygpOwotCXRyYWNlcl9lbmFibGVkID0gMDsKLQltdXRleF91bmxvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLX0KLQotc3RhdGljIGludCBzdGFja190cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCi17Ci0Jc3lzcHJvZl90cmFjZSA9IHRyOwotCi0JdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOwotCi0JbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotCXN0YXJ0X3N0YWNrX3RpbWVycygpOwotCXRyYWNlcl9lbmFibGVkID0gMTsKLQltdXRleF91bmxvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RhY2tfdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKLQlzdG9wX3N0YWNrX3RyYWNlKHRyKTsKLX0KLQotc3RhdGljIHN0cnVjdCB0cmFjZXIgc3RhY2tfdHJhY2UgX19yZWFkX21vc3RseSA9Ci17Ci0JLm5hbWUJCT0gInN5c3Byb2YiLAotCS5pbml0CQk9IHN0YWNrX3RyYWNlX2luaXQsCi0JLnJlc2V0CQk9IHN0YWNrX3RyYWNlX3Jlc2V0LAotI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKLQkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX3N5c3Byb2YsCi0jZW5kaWYKLX07Ci0KLV9faW5pdCBzdGF0aWMgaW50IGluaXRfc3RhY2tfdHJhY2Uodm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZzdGFja190cmFjZSk7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoaW5pdF9zdGFja190cmFjZSk7Ci0KLSNkZWZpbmUgTUFYX0xPTkdfRElHSVRTIDIyCi0KLXN0YXRpYyBzc2l6ZV90Ci1zeXNwcm9mX3NhbXBsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZltNQVhfTE9OR19ESUdJVFNdOwotCWludCByOwotCi0JciA9IHNwcmludGYoYnVmLCAiJWxkXG4iLCBuc2Vjc190b191c2VjcyhzYW1wbGVfcGVyaW9kKSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIHIpOwotfQotCi1zdGF0aWMgc3NpemVfdAotc3lzcHJvZl9zYW1wbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAotCQkgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKLXsKLQljaGFyIGJ1ZltNQVhfTE9OR19ESUdJVFNdOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0JaWYgKGNudCA+IE1BWF9MT05HX0RJR0lUUy0xKQotCQljbnQgPSBNQVhfTE9OR19ESUdJVFMtMTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWJ1ZltjbnRdID0gMDsKLQotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwotCS8qCi0JICogRW5mb3JjZSBhIG1pbmltdW0gc2FtcGxlIHBlcmlvZCBvZiAxMDAgdXNlY3M6Ci0JICovCi0JaWYgKHZhbCA8IDEwMCkKLQkJdmFsID0gMTAwOwotCi0JbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotCXN0b3Bfc3RhY2tfdGltZXJzKCk7Ci0Jc2FtcGxlX3BlcmlvZCA9IHZhbCAqIDEwMDA7Ci0Jc3RhcnRfc3RhY2tfdGltZXJzKCk7Ci0JbXV0ZXhfdW5sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7Ci0KLQlyZXR1cm4gY250OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXNwcm9mX3NhbXBsZV9mb3BzID0gewotCS5yZWFkCQk9IHN5c3Byb2Zfc2FtcGxlX3JlYWQsCi0JLndyaXRlCQk9IHN5c3Byb2Zfc2FtcGxlX3dyaXRlLAotfTsKLQotdm9pZCBpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoc3RydWN0IGRlbnRyeSAqZF90cmFjZXIpCi17Ci0KLQl0cmFjZV9jcmVhdGVfZmlsZSgic3lzcHJvZl9zYW1wbGVfcGVyaW9kIiwgMDY0NCwKLQkJCWRfdHJhY2VyLCBOVUxMLCAmc3lzcHJvZl9zYW1wbGVfZm9wcyk7Ci19CmRpZmYgLS1naXQgYS9rZXJuZWwvd2F0Y2hkb2cuYyBiL2tlcm5lbC93YXRjaGRvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2JjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAqIERldGVjdCBoYXJkIGFuZCBzb2Z0IGxvY2t1cHMgb24gYSBzeXN0ZW0KKyAqCisgKiBzdGFydGVkIGJ5IERvbiBaaWNrdXMsIENvcHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCisgKgorICogdGhpcyBjb2RlIGRldGVjdHMgaGFyZCBsb2NrdXBzOiBpbmNpZGVudHMgaW4gd2hlcmUgb24gYSBDUFUKKyAqIHRoZSBrZXJuZWwgZG9lcyBub3QgcmVzcG9uZCB0byBhbnl0aGluZyBleGNlcHQgTk1JLgorICoKKyAqIE5vdGU6IE1vc3Qgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGhlYXZpbHkgZnJvbSBzb2Z0bG9ja3VwLmMsCisgKiBzbyB0aGFua3MgdG8gSW5nbyBmb3IgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCisgKiBTb21lIGNodW5rcyBhbHNvIHRha2VuIGZyb20gYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMsIHRoYW5rcworICogdG8gdGhvc2UgY29udHJpYnV0b3JzIGFzIHdlbGwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKworaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgd2F0Y2hkb2dfdG91Y2hfdHMpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBzb2Z0bG9ja3VwX3dhdGNoZG9nKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaHJ0aW1lciwgd2F0Y2hkb2dfaHJ0aW1lcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgc29mdGxvY2t1cF90b3VjaF9zeW5jKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCBzb2Z0X3dhdGNoZG9nX3dhcm4pOworI2lmZGVmIENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgaGFyZF93YXRjaGRvZ193YXJuKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB3YXRjaGRvZ19ubWlfdG91Y2gpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGhydGltZXJfaW50ZXJydXB0cyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaHJ0aW1lcl9pbnRlcnJ1cHRzX3NhdmVkKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyZl9ldmVudCAqLCB3YXRjaGRvZ19ldik7CisjZW5kaWYKKworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGRpZF9wYW5pYzsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBub193YXRjaGRvZzsKKworCisvKiBib290IGNvbW1hbmRzICovCisvKgorICogU2hvdWxkIHdlIHBhbmljIHdoZW4gYSBzb2Z0LWxvY2t1cCBvciBoYXJkLWxvY2t1cCBvY2N1cnM6CisgKi8KKyNpZmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgorc3RhdGljIGludCBoYXJkbG9ja3VwX3BhbmljOworCitzdGF0aWMgaW50IF9faW5pdCBoYXJkbG9ja3VwX3BhbmljX3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKKwkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJubWlfd2F0Y2hkb2c9IiwgaGFyZGxvY2t1cF9wYW5pY19zZXR1cCk7CisjZW5kaWYKKwordW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgc29mdGxvY2t1cF9wYW5pYyA9CisJCQlDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU7CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRsb2NrdXBfcGFuaWNfc2V0dXAoY2hhciAqc3RyKQoreworCXNvZnRsb2NrdXBfcGFuaWMgPSBzaW1wbGVfc3RydG91bChzdHIsIE5VTEwsIDApOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJzb2Z0bG9ja3VwX3BhbmljPSIsIHNvZnRsb2NrdXBfcGFuaWNfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBub3dhdGNoZG9nX3NldHVwKGNoYXIgKnN0cikKK3sKKwlub193YXRjaGRvZyA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub3dhdGNoZG9nIiwgbm93YXRjaGRvZ19zZXR1cCk7CisKKy8qIGRlcHJlY2F0ZWQgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5vc29mdGxvY2t1cF9zZXR1cChjaGFyICpzdHIpCit7CisJbm9fd2F0Y2hkb2cgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgibm9zb2Z0bG9ja3VwIiwgbm9zb2Z0bG9ja3VwX3NldHVwKTsKKy8qICAqLworCisKKy8qCisgKiBSZXR1cm5zIHNlY29uZHMsIGFwcHJveGltYXRlbHkuICBXZSBkb24ndCBuZWVkIG5hbm9zZWNvbmQKKyAqIHJlc29sdXRpb24sIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHdhc3RlIHRpbWUgd2l0aCBhIGJpZyBkaXZpZGUgd2hlbgorICogMl4zMG5zID09IDEuMDc0cy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3RpbWVzdGFtcChpbnQgdGhpc19jcHUpCit7CisJcmV0dXJuIGNwdV9jbG9jayh0aGlzX2NwdSkgPj4gMzBMTDsgIC8qIDJeMzAgfj0gMTBeOSAqLworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfc2FtcGxlX3BlcmlvZCh2b2lkKQoreworCS8qCisJICogY29udmVydCBzb2Z0bG9ja3VwX3RocmVzaCBmcm9tIHNlY29uZHMgdG8gbnMKKwkgKiB0aGUgZGl2aWRlIGJ5IDUgaXMgdG8gZ2l2ZSBocnRpbWVyIDUgY2hhbmNlcyB0bworCSAqIGluY3JlbWVudCBiZWZvcmUgdGhlIGhhcmRsb2NrdXAgZGV0ZWN0b3IgZ2VuZXJhdGVzCisJICogYSB3YXJuaW5nCisJICovCisJcmV0dXJuIHNvZnRsb2NrdXBfdGhyZXNoIC8gNSAqIE5TRUNfUEVSX1NFQzsKK30KKworLyogQ29tbWFuZHMgZm9yIHJlc2V0dGluZyB0aGUgd2F0Y2hkb2cgKi8KK3N0YXRpYyB2b2lkIF9fdG91Y2hfd2F0Y2hkb2codm9pZCkKK3sKKwlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlfX2dldF9jcHVfdmFyKHdhdGNoZG9nX3RvdWNoX3RzKSA9IGdldF90aW1lc3RhbXAodGhpc19jcHUpOworfQorCit2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2codm9pZCkKK3sKKwlfX2dldF9jcHVfdmFyKHdhdGNoZG9nX3RvdWNoX3RzKSA9IDA7Cit9CitFWFBPUlRfU1lNQk9MKHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2cpOworCit2b2lkIHRvdWNoX2FsbF9zb2Z0bG9ja3VwX3dhdGNoZG9ncyh2b2lkKQoreworCWludCBjcHU7CisKKwkvKgorCSAqIHRoaXMgaXMgZG9uZSBsb2NrbGVzcworCSAqIGRvIHdlIGNhcmUgaWYgYSAwIHJhY2VzIHdpdGggYSB0aW1lc3RhbXA/CisJICogYWxsIGl0IG1lYW5zIGlzIHRoZSBzb2Z0bG9jayBjaGVjayBzdGFydHMgb25lIGN5Y2xlIGxhdGVyCisJICovCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXBlcl9jcHUod2F0Y2hkb2dfdG91Y2hfdHMsIGNwdSkgPSAwOworfQorCisjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKK3ZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpCit7CisJX19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ubWlfdG91Y2gpID0gdHJ1ZTsKKwl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Cit9CitFWFBPUlRfU1lNQk9MKHRvdWNoX25taV93YXRjaGRvZyk7CisKKyNlbmRpZgorCit2b2lkIHRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2dfc3luYyh2b2lkKQoreworCV9fcmF3X2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfc3luYykgPSB0cnVlOworCV9fcmF3X2dldF9jcHVfdmFyKHdhdGNoZG9nX3RvdWNoX3RzKSA9IDA7Cit9CisKKyNpZmRlZiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUgorLyogd2F0Y2hkb2cgZGV0ZWN0b3IgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGlzX2hhcmRsb2NrdXAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGhyaW50ID0gX19nZXRfY3B1X3ZhcihocnRpbWVyX2ludGVycnVwdHMpOworCisJaWYgKF9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9pbnRlcnJ1cHRzX3NhdmVkKSA9PSBocmludCkKKwkJcmV0dXJuIDE7CisKKwlfX2dldF9jcHVfdmFyKGhydGltZXJfaW50ZXJydXB0c19zYXZlZCkgPSBocmludDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGlzX3NvZnRsb2NrdXAodW5zaWduZWQgbG9uZyB0b3VjaF90cykKK3sKKwl1bnNpZ25lZCBsb25nIG5vdyA9IGdldF90aW1lc3RhbXAoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCS8qIFdhcm4gYWJvdXQgdW5yZWFzb25hYmxlIGRlbGF5czogKi8KKwlpZiAodGltZV9hZnRlcihub3csIHRvdWNoX3RzICsgc29mdGxvY2t1cF90aHJlc2gpKQorCQlyZXR1cm4gbm93IC0gdG91Y2hfdHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2F0Y2hkb2dfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJZGlkX3BhbmljID0gMTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ibG9jayA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdhdGNoZG9nX3BhbmljLAorfTsKKworI2lmZGVmIENPTkZJR19IQVJETE9DS1VQX0RFVEVDVE9SCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB3ZF9od19hdHRyID0geworCS50eXBlCQk9IFBFUkZfVFlQRV9IQVJEV0FSRSwKKwkuY29uZmlnCQk9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUywKKwkuc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksCisJLnBpbm5lZAkJPSAxLAorCS5kaXNhYmxlZAk9IDEsCit9OworCisvKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcGVyZiBldmVudCBzdWJzeXN0ZW0gKi8KK3ZvaWQgd2F0Y2hkb2dfb3ZlcmZsb3dfY2FsbGJhY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbm1pLAorCQkgc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsCisJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoX19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ubWlfdG91Y2gpID09IHRydWUpIHsKKwkJX19nZXRfY3B1X3Zhcih3YXRjaGRvZ19ubWlfdG91Y2gpID0gZmFsc2U7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayBmb3IgYSBoYXJkbG9ja3VwCisJICogVGhpcyBpcyBkb25lIGJ5IG1ha2luZyBzdXJlIG91ciB0aW1lciBpbnRlcnJ1cHQKKwkgKiBpcyBpbmNyZW1lbnRpbmcuICBUaGUgdGltZXIgaW50ZXJydXB0IHNob3VsZCBoYXZlCisJICogZmlyZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHdlIG92ZXJmbG93J2QuICBJZiBpdCBoYXNuJ3QKKwkgKiB0aGVuIHRoaXMgaXMgYSBnb29kIGluZGljYXRpb24gdGhlIGNwdSBpcyBzdHVjaworCSAqLworCWlmIChpc19oYXJkbG9ja3VwKCkpIHsKKwkJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJCS8qIG9ubHkgcHJpbnQgaGFyZGxvY2t1cHMgb25jZSAqLworCQlpZiAoX19nZXRfY3B1X3ZhcihoYXJkX3dhdGNoZG9nX3dhcm4pID09IHRydWUpCisJCQlyZXR1cm47CisKKwkJaWYgKGhhcmRsb2NrdXBfcGFuaWMpCisJCQlwYW5pYygiV2F0Y2hkb2cgZGV0ZWN0ZWQgaGFyZCBMT0NLVVAgb24gY3B1ICVkIiwgdGhpc19jcHUpOworCQllbHNlCisJCQlXQVJOKDEsICJXYXRjaGRvZyBkZXRlY3RlZCBoYXJkIExPQ0tVUCBvbiBjcHUgJWQiLCB0aGlzX2NwdSk7CisKKwkJX19nZXRfY3B1X3ZhcihoYXJkX3dhdGNoZG9nX3dhcm4pID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKworCV9fZ2V0X2NwdV92YXIoaGFyZF93YXRjaGRvZ193YXJuKSA9IGZhbHNlOworCXJldHVybjsKK30KK3N0YXRpYyB2b2lkIHdhdGNoZG9nX2ludGVycnVwdF9jb3VudCh2b2lkKQoreworCV9fZ2V0X2NwdV92YXIoaHJ0aW1lcl9pbnRlcnJ1cHRzKSsrOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YXRjaGRvZ19pbnRlcnJ1cHRfY291bnQodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZiAvKiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUiAqLworCisvKiB3YXRjaGRvZyBraWNrZXIgZnVuY3Rpb25zICovCitzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgd2F0Y2hkb2dfdGltZXJfZm4oc3RydWN0IGhydGltZXIgKmhydGltZXIpCit7CisJdW5zaWduZWQgbG9uZyB0b3VjaF90cyA9IF9fZ2V0X2NwdV92YXIod2F0Y2hkb2dfdG91Y2hfdHMpOworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gZ2V0X2lycV9yZWdzKCk7CisJaW50IGR1cmF0aW9uOworCisJLyoga2ljayB0aGUgaGFyZGxvY2t1cCBkZXRlY3RvciAqLworCXdhdGNoZG9nX2ludGVycnVwdF9jb3VudCgpOworCisJLyoga2ljayB0aGUgc29mdGxvY2t1cCBkZXRlY3RvciAqLworCXdha2VfdXBfcHJvY2VzcyhfX2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfd2F0Y2hkb2cpKTsKKworCS8qIC4uIGFuZCByZXBlYXQgKi8KKwlocnRpbWVyX2ZvcndhcmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKGdldF9zYW1wbGVfcGVyaW9kKCkpKTsKKworCWlmICh0b3VjaF90cyA9PSAwKSB7CisJCWlmICh1bmxpa2VseShfX2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfc3luYykpKSB7CisJCQkvKgorCQkJICogSWYgdGhlIHRpbWUgc3RhbXAgd2FzIHRvdWNoZWQgYXRvbWljYWxseQorCQkJICogbWFrZSBzdXJlIHRoZSBzY2hlZHVsZXIgdGljayBpcyB1cCB0byBkYXRlLgorCQkJICovCisJCQlfX2dldF9jcHVfdmFyKHNvZnRsb2NrdXBfdG91Y2hfc3luYykgPSBmYWxzZTsKKwkJCXNjaGVkX2Nsb2NrX3RpY2soKTsKKwkJfQorCQlfX3RvdWNoX3dhdGNoZG9nKCk7CisJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CisJfQorCisJLyogY2hlY2sgZm9yIGEgc29mdGxvY2t1cAorCSAqIFRoaXMgaXMgZG9uZSBieSBtYWtpbmcgc3VyZSBhIGhpZ2ggcHJpb3JpdHkgdGFzayBpcworCSAqIGJlaW5nIHNjaGVkdWxlZC4gIFRoZSB0YXNrIHRvdWNoZXMgdGhlIHdhdGNoZG9nIHRvCisJICogaW5kaWNhdGUgaXQgaXMgZ2V0dGluZyBjcHUgdGltZS4gIElmIGl0IGhhc24ndCB0aGVuCisJICogdGhpcyBpcyBhIGdvb2QgaW5kaWNhdGlvbiBzb21lIHRhc2sgaXMgaG9nZ2luZyB0aGUgY3B1CisJICovCisJZHVyYXRpb24gPSBpc19zb2Z0bG9ja3VwKHRvdWNoX3RzKTsKKwlpZiAodW5saWtlbHkoZHVyYXRpb24pKSB7CisJCS8qIG9ubHkgd2FybiBvbmNlICovCisJCWlmIChfX2dldF9jcHVfdmFyKHNvZnRfd2F0Y2hkb2dfd2FybikgPT0gdHJ1ZSkKKwkJCXJldHVybiBIUlRJTUVSX1JFU1RBUlQ7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJCVUc6IHNvZnQgbG9ja3VwIC0gQ1BVIyVkIHN0dWNrIGZvciAldXMhIFslczolZF1cbiIsCisJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGR1cmF0aW9uLAorCQkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQlwcmludF9tb2R1bGVzKCk7CisJCXByaW50X2lycXRyYWNlX2V2ZW50cyhjdXJyZW50KTsKKwkJaWYgKHJlZ3MpCisJCQlzaG93X3JlZ3MocmVncyk7CisJCWVsc2UKKwkJCWR1bXBfc3RhY2soKTsKKworCQlpZiAoc29mdGxvY2t1cF9wYW5pYykKKwkJCXBhbmljKCJzb2Z0bG9ja3VwOiBodW5nIHRhc2tzIik7CisJCV9fZ2V0X2NwdV92YXIoc29mdF93YXRjaGRvZ193YXJuKSA9IHRydWU7CisJfSBlbHNlCisJCV9fZ2V0X2NwdV92YXIoc29mdF93YXRjaGRvZ193YXJuKSA9IGZhbHNlOworCisJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKK30KKworCisvKgorICogVGhlIHdhdGNoZG9nIHRocmVhZCAtIHRvdWNoZXMgdGhlIHRpbWVzdGFtcC4KKyAqLworc3RhdGljIGludCB3YXRjaGRvZyh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSBNQVhfUlRfUFJJTy0xIH07CisJc3RydWN0IGhydGltZXIgKmhydGltZXIgPSAmX19yYXdfZ2V0X2NwdV92YXIod2F0Y2hkb2dfaHJ0aW1lcik7CisKKwlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfRklGTywgJnBhcmFtKTsKKworCS8qIGluaXRpYWxpemUgdGltZXN0YW1wICovCisJX190b3VjaF93YXRjaGRvZygpOworCisJLyoga2ljayBvZmYgdGhlIHRpbWVyIGZvciB0aGUgaGFyZGxvY2t1cCBkZXRlY3RvciAqLworCS8qIGRvbmUgaGVyZSBiZWNhdXNlIGhydGltZXJfc3RhcnQgY2FuIG9ubHkgcGluIHRvIHNtcF9wcm9jZXNzb3JfaWQoKSAqLworCWhydGltZXJfc3RhcnQoaHJ0aW1lciwgbnNfdG9fa3RpbWUoZ2V0X3NhbXBsZV9wZXJpb2QoKSksCisJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTsKKworCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJLyoKKwkgKiBSdW4gYnJpZWZseSBvbmNlIHBlciBzZWNvbmQgdG8gcmVzZXQgdGhlIHNvZnRsb2NrdXAgdGltZXN0YW1wLgorCSAqIElmIHRoaXMgZ2V0cyBkZWxheWVkIGZvciBtb3JlIHRoYW4gNjAgc2Vjb25kcyB0aGVuIHRoZQorCSAqIGRlYnVnLXByaW50b3V0IHRyaWdnZXJzIGluIHdhdGNoZG9nX3RpbWVyX2ZuKCkuCisJICovCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJX190b3VjaF93YXRjaGRvZygpOworCQlzY2hlZHVsZSgpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX0hBUkRMT0NLVVBfREVURUNUT1IKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfbm1pX2VuYWJsZShpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKndkX2F0dHI7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50ID0gcGVyX2NwdSh3YXRjaGRvZ19ldiwgY3B1KTsKKworCS8qIGlzIGl0IGFscmVhZHkgc2V0dXAgYW5kIGVuYWJsZWQ/ICovCisJaWYgKGV2ZW50ICYmIGV2ZW50LT5zdGF0ZSA+IFBFUkZfRVZFTlRfU1RBVEVfT0ZGKQorCQlnb3RvIG91dDsKKworCS8qIGl0IGlzIHNldHVwIGJ1dCBub3QgZW5hYmxlZCAqLworCWlmIChldmVudCAhPSBOVUxMKQorCQlnb3RvIG91dF9lbmFibGU7CisKKwkvKiBUcnkgdG8gcmVnaXN0ZXIgdXNpbmcgaGFyZHdhcmUgcGVyZiBldmVudHMgKi8KKwl3ZF9hdHRyID0gJndkX2h3X2F0dHI7CisJd2RfYXR0ci0+c2FtcGxlX3BlcmlvZCA9IGh3X25taV9nZXRfc2FtcGxlX3BlcmlvZCgpOworCWV2ZW50ID0gcGVyZl9ldmVudF9jcmVhdGVfa2VybmVsX2NvdW50ZXIod2RfYXR0ciwgY3B1LCAtMSwgd2F0Y2hkb2dfb3ZlcmZsb3dfY2FsbGJhY2spOworCWlmICghSVNfRVJSKGV2ZW50KSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOTUkgd2F0Y2hkb2cgZW5hYmxlZCwgdGFrZXMgb25lIGh3LXBtdSBjb3VudGVyLlxuIik7CisJCWdvdG8gb3V0X3NhdmU7CisJfQorCisJcHJpbnRrKEtFUk5fRVJSICJOTUkgd2F0Y2hkb2cgZmFpbGVkIHRvIGNyZWF0ZSBwZXJmIGV2ZW50IG9uIGNwdSVpOiAlcFxuIiwgY3B1LCBldmVudCk7CisJcmV0dXJuIC0xOworCisJLyogc3VjY2VzcyBwYXRoICovCitvdXRfc2F2ZToKKwlwZXJfY3B1KHdhdGNoZG9nX2V2LCBjcHUpID0gZXZlbnQ7CitvdXRfZW5hYmxlOgorCXBlcmZfZXZlbnRfZW5hYmxlKHBlcl9jcHUod2F0Y2hkb2dfZXYsIGNwdSkpOworb3V0OgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YXRjaGRvZ19ubWlfZGlzYWJsZShpbnQgY3B1KQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHBlcl9jcHUod2F0Y2hkb2dfZXYsIGNwdSk7CisKKwlpZiAoZXZlbnQpIHsKKwkJcGVyZl9ldmVudF9kaXNhYmxlKGV2ZW50KTsKKwkJcGVyX2NwdSh3YXRjaGRvZ19ldiwgY3B1KSA9IE5VTEw7CisKKwkJLyogc2hvdWxkIGJlIGluIGNsZWFudXAsIGJ1dCBibG9ja3Mgb3Byb2ZpbGUgKi8KKwkJcGVyZl9ldmVudF9yZWxlYXNlX2tlcm5lbChldmVudCk7CisJfQorCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW50IHdhdGNoZG9nX25taV9lbmFibGUoaW50IGNwdSkgeyByZXR1cm4gMDsgfQorc3RhdGljIHZvaWQgd2F0Y2hkb2dfbm1pX2Rpc2FibGUoaW50IGNwdSkgeyByZXR1cm47IH0KKyNlbmRpZiAvKiBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUiAqLworCisvKiBwcmVwYXJlL2VuYWJsZS9kaXNhYmxlIHJvdXRpbmVzICovCitzdGF0aWMgaW50IHdhdGNoZG9nX3ByZXBhcmVfY3B1KGludCBjcHUpCit7CisJc3RydWN0IGhydGltZXIgKmhydGltZXIgPSAmcGVyX2NwdSh3YXRjaGRvZ19ocnRpbWVyLCBjcHUpOworCisJV0FSTl9PTihwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGNwdSkpOworCWhydGltZXJfaW5pdChocnRpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOworCWhydGltZXItPmZ1bmN0aW9uID0gd2F0Y2hkb2dfdGltZXJfZm47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3YXRjaGRvZ19lbmFibGUoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBwZXJfY3B1KHNvZnRsb2NrdXBfd2F0Y2hkb2csIGNwdSk7CisKKwkvKiBlbmFibGUgdGhlIHBlcmYgZXZlbnQgKi8KKwlpZiAod2F0Y2hkb2dfbm1pX2VuYWJsZShjcHUpICE9IDApCisJCXJldHVybiAtMTsKKworCS8qIGNyZWF0ZSB0aGUgd2F0Y2hkb2cgdGhyZWFkICovCisJaWYgKCFwKSB7CisJCXAgPSBrdGhyZWFkX2NyZWF0ZSh3YXRjaGRvZywgKHZvaWQgKikodW5zaWduZWQgbG9uZyljcHUsICJ3YXRjaGRvZy8lZCIsIGNwdSk7CisJCWlmIChJU19FUlIocCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAic29mdGxvY2t1cCB3YXRjaGRvZyBmb3IgJWkgZmFpbGVkXG4iLCBjcHUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWt0aHJlYWRfYmluZChwLCBjcHUpOworCQlwZXJfY3B1KHdhdGNoZG9nX3RvdWNoX3RzLCBjcHUpID0gMDsKKwkJcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBjcHUpID0gcDsKKwkJd2FrZV91cF9wcm9jZXNzKHApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3YXRjaGRvZ19kaXNhYmxlKGludCBjcHUpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcGVyX2NwdShzb2Z0bG9ja3VwX3dhdGNoZG9nLCBjcHUpOworCXN0cnVjdCBocnRpbWVyICpocnRpbWVyID0gJnBlcl9jcHUod2F0Y2hkb2dfaHJ0aW1lciwgY3B1KTsKKworCS8qCisJICogY2FuY2VsIHRoZSB0aW1lciBmaXJzdCB0byBzdG9wIGluY3JlbWVudGluZyB0aGUgc3RhdHMKKwkgKiBhbmQgd2FraW5nIHVwIHRoZSBrdGhyZWFkCisJICovCisJaHJ0aW1lcl9jYW5jZWwoaHJ0aW1lcik7CisKKwkvKiBkaXNhYmxlIHRoZSBwZXJmIGV2ZW50ICovCisJd2F0Y2hkb2dfbm1pX2Rpc2FibGUoY3B1KTsKKworCS8qIHN0b3AgdGhlIHdhdGNoZG9nIHRocmVhZCAqLworCWlmIChwKSB7CisJCXBlcl9jcHUoc29mdGxvY2t1cF93YXRjaGRvZywgY3B1KSA9IE5VTEw7CisJCWt0aHJlYWRfc3RvcChwKTsKKwl9CisKKwkvKiBpZiBhbnkgY3B1IHN1Y2NlZWRzLCB3YXRjaGRvZyBpcyBjb25zaWRlcmVkIGVuYWJsZWQgZm9yIHRoZSBzeXN0ZW0gKi8KKwl3YXRjaGRvZ19lbmFibGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKHZvaWQpCit7CisJaW50IGNwdTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorCQlyZXN1bHQgKz0gd2F0Y2hkb2dfZW5hYmxlKGNwdSk7CisKKwlpZiAocmVzdWx0KQorCQlwcmludGsoS0VSTl9FUlIgIndhdGNoZG9nOiBmYWlsZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGNwdXNcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXModm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCXdhdGNoZG9nX2Rpc2FibGUoY3B1KTsKKworCS8qIGlmIGFsbCB3YXRjaGRvZ3MgYXJlIGRpc2FibGVkLCB0aGVuIHRoZXkgYXJlIGRpc2FibGVkIGZvciB0aGUgc3lzdGVtICovCisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7Cit9CisKKworLyogc3lzY3RsIGZ1bmN0aW9ucyAqLworI2lmZGVmIENPTkZJR19TWVNDVEwKKy8qCisgKiBwcm9jIGhhbmRsZXIgZm9yIC9wcm9jL3N5cy9rZXJuZWwvbm1pX3dhdGNoZG9nCisgKi8KKworaW50IHByb2NfZG93YXRjaGRvZ19lbmFibGVkKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKK3sKKwlwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCisJaWYgKHdhdGNoZG9nX2VuYWJsZWQpCisJCXdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cygpOworCWVsc2UKKwkJd2F0Y2hkb2dfZGlzYWJsZV9hbGxfY3B1cygpOworCXJldHVybiAwOworfQorCitpbnQgcHJvY19kb3dhdGNoZG9nX3RocmVzaChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworCisvKgorICogQ3JlYXRlL2Rlc3Ryb3kgd2F0Y2hkb2cgdGhyZWFkcyBhcyBDUFVzIGNvbWUgYW5kIGdvOgorICovCitzdGF0aWMgaW50IF9fY3B1aW5pdAorY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJaWYgKHdhdGNoZG9nX3ByZXBhcmVfY3B1KGhvdGNwdSkpCisJCQlyZXR1cm4gTk9USUZZX0JBRDsKKwkJYnJlYWs7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJCWlmICh3YXRjaGRvZ19lbmFibGUoaG90Y3B1KSkKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CisJCXdhdGNoZG9nX2Rpc2FibGUoaG90Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVBRDoKKwljYXNlIENQVV9ERUFEX0ZST1pFTjoKKwkJd2F0Y2hkb2dfZGlzYWJsZShob3RjcHUpOworCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNwdV9uZmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjcHVfY2FsbGJhY2sKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwYXduX3dhdGNoZG9nX3Rhc2sodm9pZCkKK3sKKwl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgZXJyOworCisJaWYgKG5vX3dhdGNoZG9nKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CisJV0FSTl9PTihlcnIgPT0gTk9USUZZX0JBRCk7CisKKwljcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9PTkxJTkUsIGNwdSk7CisJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfbmZiKTsKKworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwgJnBhbmljX2Jsb2NrKTsKKworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoc3Bhd25fd2F0Y2hkb2dfdGFzayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMzI3ZDJkZS4uMjk5NGEwZSAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMzMsNDEgKzMzLDI4NyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+Ci0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKLSNpbmNsdWRlIDx0cmFjZS9ldmVudHMvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlICJ3b3JrcXVldWVfc2NoZWQuaCIKKworZW51bSB7CisJLyogZ2xvYmFsX2N3cSBmbGFncyAqLworCUdDV1FfTUFOQUdFX1dPUktFUlMJPSAxIDw8IDAsCS8qIG5lZWQgdG8gbWFuYWdlIHdvcmtlcnMgKi8KKwlHQ1dRX01BTkFHSU5HX1dPUktFUlMJPSAxIDw8IDEsCS8qIG1hbmFnaW5nIHdvcmtlcnMgKi8KKwlHQ1dRX0RJU0FTU09DSUFURUQJPSAxIDw8IDIsCS8qIGNwdSBjYW4ndCBzZXJ2ZSB3b3JrZXJzICovCisJR0NXUV9GUkVFWklORwkJPSAxIDw8IDMsCS8qIGZyZWV6ZSBpbiBwcm9ncmVzcyAqLworCUdDV1FfSElHSFBSSV9QRU5ESU5HCT0gMSA8PCA0LAkvKiBoaWdocHJpIHdvcmtzIG9uIHF1ZXVlICovCisKKwkvKiB3b3JrZXIgZmxhZ3MgKi8KKwlXT1JLRVJfU1RBUlRFRAkJPSAxIDw8IDAsCS8qIHN0YXJ0ZWQgKi8KKwlXT1JLRVJfRElFCQk9IDEgPDwgMSwJLyogZGllIGRpZSBkaWUgKi8KKwlXT1JLRVJfSURMRQkJPSAxIDw8IDIsCS8qIGlzIGlkbGUgKi8KKwlXT1JLRVJfUFJFUAkJPSAxIDw8IDMsCS8qIHByZXBhcmluZyB0byBydW4gd29ya3MgKi8KKwlXT1JLRVJfUk9HVUUJCT0gMSA8PCA0LAkvKiBub3QgYm91bmQgdG8gYW55IGNwdSAqLworCVdPUktFUl9SRUJJTkQJCT0gMSA8PCA1LAkvKiBtb20gaXMgaG9tZSwgY29tZSBiYWNrICovCisJV09SS0VSX0NQVV9JTlRFTlNJVkUJPSAxIDw8IDYsCS8qIGNwdSBpbnRlbnNpdmUgKi8KKwlXT1JLRVJfVU5CT1VORAkJPSAxIDw8IDcsCS8qIHdvcmtlciBpcyB1bmJvdW5kICovCisKKwlXT1JLRVJfTk9UX1JVTk5JTkcJPSBXT1JLRVJfUFJFUCB8IFdPUktFUl9ST0dVRSB8IFdPUktFUl9SRUJJTkQgfAorCQkJCSAgV09SS0VSX0NQVV9JTlRFTlNJVkUgfCBXT1JLRVJfVU5CT1VORCwKKworCS8qIGdjd3EtPnRydXN0ZWVfc3RhdGUgKi8KKwlUUlVTVEVFX1NUQVJUCQk9IDAsCQkvKiBzdGFydCAqLworCVRSVVNURUVfSU5fQ0hBUkdFCT0gMSwJCS8qIHRydXN0ZWUgaW4gY2hhcmdlIG9mIGdjd3EgKi8KKwlUUlVTVEVFX0JVVENIRVIJCT0gMiwJCS8qIGJ1dGNoZXIgd29ya2VycyAqLworCVRSVVNURUVfUkVMRUFTRQkJPSAzLAkJLyogcmVsZWFzZSB3b3JrZXJzICovCisJVFJVU1RFRV9ET05FCQk9IDQsCQkvKiB0cnVzdGVlIGlzIGRvbmUgKi8KKworCUJVU1lfV09SS0VSX0hBU0hfT1JERVIJPSA2LAkJLyogNjQgcG9pbnRlcnMgKi8KKwlCVVNZX1dPUktFUl9IQVNIX1NJWkUJPSAxIDw8IEJVU1lfV09SS0VSX0hBU0hfT1JERVIsCisJQlVTWV9XT1JLRVJfSEFTSF9NQVNLCT0gQlVTWV9XT1JLRVJfSEFTSF9TSVpFIC0gMSwKKworCU1BWF9JRExFX1dPUktFUlNfUkFUSU8JPSA0LAkJLyogMS80IG9mIGJ1c3kgY2FuIGJlIGlkbGUgKi8KKwlJRExFX1dPUktFUl9USU1FT1VUCT0gMzAwICogSFosCS8qIGtlZXAgaWRsZSBvbmVzIGZvciA1IG1pbnMgKi8KKworCU1BWURBWV9JTklUSUFMX1RJTUVPVVQJPSBIWiAvIDEwMCwJLyogY2FsbCBmb3IgaGVscCBhZnRlciAxMG1zICovCisJTUFZREFZX0lOVEVSVkFMCQk9IEhaIC8gMTAsCS8qIGFuZCB0aGVuIGV2ZXJ5IDEwMG1zICovCisJQ1JFQVRFX0NPT0xET1dOCQk9IEhaLAkJLyogdGltZSB0byBicmVhdGggYWZ0ZXIgZmFpbCAqLworCVRSVVNURUVfQ09PTERPV04JPSBIWiAvIDEwLAkvKiBmb3IgdHJ1c3RlZSBkcmFpbmluZyAqLworCisJLyoKKwkgKiBSZXNjdWUgd29ya2VycyBhcmUgdXNlZCBvbmx5IG9uIGVtZXJnZW5jaWVzIGFuZCBzaGFyZWQgYnkKKwkgKiBhbGwgY3B1cy4gIEdpdmUgLTIwLgorCSAqLworCVJFU0NVRVJfTklDRV9MRVZFTAk9IC0yMCwKK307CiAKIC8qCi0gKiBUaGUgcGVyLUNQVSB3b3JrcXVldWUgKGlmIHNpbmdsZSB0aHJlYWQsIHdlIGFsd2F5cyB1c2UgdGhlIGZpcnN0Ci0gKiBwb3NzaWJsZSBjcHUpLgorICogU3RydWN0dXJlIGZpZWxkcyBmb2xsb3cgb25lIG9mIHRoZSBmb2xsb3dpbmcgZXhjbHVzaW9uIHJ1bGVzLgorICoKKyAqIEk6IFNldCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIHJlYWQtb25seSBhZnRlcndhcmRzLgorICoKKyAqIFA6IFByZWVtcHRpb24gcHJvdGVjdGVkLiAgRGlzYWJsaW5nIHByZWVtcHRpb24gaXMgZW5vdWdoIGFuZCBzaG91bGQKKyAqICAgIG9ubHkgYmUgbW9kaWZpZWQgYW5kIGFjY2Vzc2VkIGZyb20gdGhlIGxvY2FsIGNwdS4KKyAqCisgKiBMOiBnY3dxLT5sb2NrIHByb3RlY3RlZC4gIEFjY2VzcyB3aXRoIGdjd3EtPmxvY2sgaGVsZC4KKyAqCisgKiBYOiBEdXJpbmcgbm9ybWFsIG9wZXJhdGlvbiwgbW9kaWZpY2F0aW9uIHJlcXVpcmVzIGdjd3EtPmxvY2sgYW5kCisgKiAgICBzaG91bGQgYmUgZG9uZSBvbmx5IGZyb20gbG9jYWwgY3B1LiAgRWl0aGVyIGRpc2FibGluZyBwcmVlbXB0aW9uCisgKiAgICBvbiBsb2NhbCBjcHUgb3IgZ3JhYmJpbmcgZ2N3cS0+bG9jayBpcyBlbm91Z2ggZm9yIHJlYWQgYWNjZXNzLgorICogICAgSWYgR0NXUV9ESVNBU1NPQ0lBVEVEIGlzIHNldCwgaXQncyBpZGVudGljYWwgdG8gTC4KKyAqCisgKiBGOiB3cS0+Zmx1c2hfbXV0ZXggcHJvdGVjdGVkLgorICoKKyAqIFc6IHdvcmtxdWV1ZV9sb2NrIHByb3RlY3RlZC4KKyAqLworCitzdHJ1Y3QgZ2xvYmFsX2N3cTsKKworLyoKKyAqIFRoZSBwb29yIGd1eXMgZG9pbmcgdGhlIGFjdHVhbCBoZWF2eSBsaWZ0aW5nLiAgQWxsIG9uLWR1dHkgd29ya2VycworICogYXJlIGVpdGhlciBzZXJ2aW5nIHRoZSBtYW5hZ2VyIHJvbGUsIG9uIGlkbGUgbGlzdCBvciBvbiBidXN5IGhhc2guCisgKi8KK3N0cnVjdCB3b3JrZXIgeworCS8qIG9uIGlkbGUgbGlzdCB3aGlsZSBpZGxlLCBvbiBidXN5IGhhc2ggdGFibGUgd2hpbGUgYnVzeSAqLworCXVuaW9uIHsKKwkJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsJLyogTDogd2hpbGUgaWRsZSAqLworCQlzdHJ1Y3QgaGxpc3Rfbm9kZQloZW50cnk7CS8qIEw6IHdoaWxlIGJ1c3kgKi8KKwl9OworCisJc3RydWN0IHdvcmtfc3RydWN0CSpjdXJyZW50X3dvcms7CS8qIEw6IHdvcmsgYmVpbmcgcHJvY2Vzc2VkICovCisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjdXJyZW50X2N3cTsgLyogTDogY3VycmVudF93b3JrJ3MgY3dxICovCisJc3RydWN0IGxpc3RfaGVhZAlzY2hlZHVsZWQ7CS8qIEw6IHNjaGVkdWxlZCB3b3JrcyAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGFzazsJCS8qIEk6IHdvcmtlciB0YXNrICovCisJc3RydWN0IGdsb2JhbF9jd3EJKmdjd3E7CQkvKiBJOiB0aGUgYXNzb2NpYXRlZCBnY3dxICovCisJLyogNjQgYnl0ZXMgYm91bmRhcnkgb24gNjRiaXQsIDMyIG9uIDMyYml0ICovCisJdW5zaWduZWQgbG9uZwkJbGFzdF9hY3RpdmU7CS8qIEw6IGxhc3QgYWN0aXZlIHRpbWVzdGFtcCAqLworCXVuc2lnbmVkIGludAkJZmxhZ3M7CQkvKiBYOiBmbGFncyAqLworCWludAkJCWlkOwkJLyogSTogd29ya2VyIGlkICovCisJc3RydWN0IHdvcmtfc3RydWN0CXJlYmluZF93b3JrOwkvKiBMOiByZWJpbmQgd29ya2VyIHRvIGNwdSAqLworfTsKKworLyoKKyAqIEdsb2JhbCBwZXItY3B1IHdvcmtxdWV1ZS4gIFRoZXJlJ3Mgb25lIGFuZCBvbmx5IG9uZSBmb3IgZWFjaCBjcHUKKyAqIGFuZCBhbGwgd29ya3MgYXJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGhlcmUgcmVnYXJkbGVzcyBvZiB0aGVpcgorICogdGFyZ2V0IHdvcmtxdWV1ZXMuCisgKi8KK3N0cnVjdCBnbG9iYWxfY3dxIHsKKwlzcGlubG9ja190CQlsb2NrOwkJLyogdGhlIGdjd3EgbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQJd29ya2xpc3Q7CS8qIEw6IGxpc3Qgb2YgcGVuZGluZyB3b3JrcyAqLworCXVuc2lnbmVkIGludAkJY3B1OwkJLyogSTogdGhlIGFzc29jaWF0ZWQgY3B1ICovCisJdW5zaWduZWQgaW50CQlmbGFnczsJCS8qIEw6IEdDV1FfKiBmbGFncyAqLworCisJaW50CQkJbnJfd29ya2VyczsJLyogTDogdG90YWwgbnVtYmVyIG9mIHdvcmtlcnMgKi8KKwlpbnQJCQlucl9pZGxlOwkvKiBMOiBjdXJyZW50bHkgaWRsZSBvbmVzICovCisKKwkvKiB3b3JrZXJzIGFyZSBjaGFpbmVkIGVpdGhlciBpbiB0aGUgaWRsZV9saXN0IG9yIGJ1c3lfaGFzaCAqLworCXN0cnVjdCBsaXN0X2hlYWQJaWRsZV9saXN0OwkvKiBYOiBsaXN0IG9mIGlkbGUgd29ya2VycyAqLworCXN0cnVjdCBobGlzdF9oZWFkCWJ1c3lfaGFzaFtCVVNZX1dPUktFUl9IQVNIX1NJWkVdOworCQkJCQkJLyogTDogaGFzaCBvZiBidXN5IHdvcmtlcnMgKi8KKworCXN0cnVjdCB0aW1lcl9saXN0CWlkbGVfdGltZXI7CS8qIEw6IHdvcmtlciBpZGxlIHRpbWVvdXQgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdAltYXlkYXlfdGltZXI7CS8qIEw6IFNPUyB0aW1lciBmb3IgZHdvcmtlcnMgKi8KKworCXN0cnVjdCBpZGEJCXdvcmtlcl9pZGE7CS8qIEw6IGZvciB3b3JrZXIgSURzICovCisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRydXN0ZWU7CS8qIEw6IGZvciBnY3dxIHNodXRkb3duICovCisJdW5zaWduZWQgaW50CQl0cnVzdGVlX3N0YXRlOwkvKiBMOiB0cnVzdGVlIHN0YXRlICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJdHJ1c3RlZV93YWl0OwkvKiB0cnVzdGVlIHdhaXQgKi8KKwlzdHJ1Y3Qgd29ya2VyCQkqZmlyc3RfaWRsZTsJLyogTDogZmlyc3QgaWRsZSB3b3JrZXIgKi8KK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKworLyoKKyAqIFRoZSBwZXItQ1BVIHdvcmtxdWV1ZS4gIFRoZSBsb3dlciBXT1JLX1NUUlVDVF9GTEFHX0JJVFMgb2YKKyAqIHdvcmtfc3RydWN0LT5kYXRhIGFyZSB1c2VkIGZvciBmbGFncyBhbmQgdGh1cyBjd3FzIG5lZWQgdG8gYmUKKyAqIGFsaWduZWQgYXQgdHdvJ3MgcG93ZXIgb2YgdGhlIG51bWJlciBvZiBmbGFnIGJpdHMuCiAgKi8KIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCB7CisJc3RydWN0IGdsb2JhbF9jd3EJKmdjd3E7CQkvKiBJOiB0aGUgYXNzb2NpYXRlZCBnY3dxICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwkJLyogSTogdGhlIG93bmluZyB3b3JrcXVldWUgKi8KKwlpbnQJCQl3b3JrX2NvbG9yOwkvKiBMOiBjdXJyZW50IGNvbG9yICovCisJaW50CQkJZmx1c2hfY29sb3I7CS8qIEw6IGZsdXNoaW5nIGNvbG9yICovCisJaW50CQkJbnJfaW5fZmxpZ2h0W1dPUktfTlJfQ09MT1JTXTsKKwkJCQkJCS8qIEw6IG5yIG9mIGluX2ZsaWdodCB3b3JrcyAqLworCWludAkJCW5yX2FjdGl2ZTsJLyogTDogbnIgb2YgYWN0aXZlIHdvcmtzICovCisJaW50CQkJbWF4X2FjdGl2ZTsJLyogTDogbWF4IGFjdGl2ZSB3b3JrcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGVsYXllZF93b3JrczsJLyogTDogZGVsYXllZCB3b3JrcyAqLworfTsKIAotCXNwaW5sb2NrX3QgbG9jazsKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byB3YWl0IGZvciB3b3JrcXVldWUgZmx1c2guCisgKi8KK3N0cnVjdCB3cV9mbHVzaGVyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBGOiBsaXN0IG9mIGZsdXNoZXJzICovCisJaW50CQkJZmx1c2hfY29sb3I7CS8qIEY6IGZsdXNoIGNvbG9yIHdhaXRpbmcgZm9yICovCisJc3RydWN0IGNvbXBsZXRpb24JZG9uZTsJCS8qIGZsdXNoIGNvbXBsZXRpb24gKi8KK307CiAKLQlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtsaXN0OwotCXdhaXRfcXVldWVfaGVhZF90IG1vcmVfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmN1cnJlbnRfd29yazsKLQotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworLyoKKyAqIEFsbCBjcHVtYXNrcyBhcmUgYXNzdW1lZCB0byBiZSBhbHdheXMgc2V0IG9uIFVQIGFuZCB0aHVzIGNhbid0IGJlCisgKiB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXJlJ3Mgc29tZXRoaW5nIHRvIGJlIGRvbmUuCisgKi8KKyNpZmRlZiBDT05GSUdfU01QCit0eXBlZGVmIGNwdW1hc2tfdmFyX3QgbWF5ZGF5X21hc2tfdDsKKyNkZWZpbmUgbWF5ZGF5X3Rlc3RfYW5kX3NldF9jcHUoY3B1LCBtYXNrKQlcCisJY3B1bWFza190ZXN0X2FuZF9zZXRfY3B1KChjcHUpLCAobWFzaykpCisjZGVmaW5lIG1heWRheV9jbGVhcl9jcHUoY3B1LCBtYXNrKQkJY3B1bWFza19jbGVhcl9jcHUoKGNwdSksIChtYXNrKSkKKyNkZWZpbmUgZm9yX2VhY2hfbWF5ZGF5X2NwdShjcHUsIG1hc2spCQlmb3JfZWFjaF9jcHUoKGNwdSksIChtYXNrKSkKKyNkZWZpbmUgYWxsb2NfbWF5ZGF5X21hc2sobWFza3AsIGdmcCkJCWFsbG9jX2NwdW1hc2tfdmFyKChtYXNrcCksIChnZnApKQorI2RlZmluZSBmcmVlX21heWRheV9tYXNrKG1hc2spCQkJZnJlZV9jcHVtYXNrX3ZhcigobWFzaykpCisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1heWRheV9tYXNrX3Q7CisjZGVmaW5lIG1heWRheV90ZXN0X2FuZF9zZXRfY3B1KGNwdSwgbWFzaykJdGVzdF9hbmRfc2V0X2JpdCgwLCAmKG1hc2spKQorI2RlZmluZSBtYXlkYXlfY2xlYXJfY3B1KGNwdSwgbWFzaykJCWNsZWFyX2JpdCgwLCAmKG1hc2spKQorI2RlZmluZSBmb3JfZWFjaF9tYXlkYXlfY3B1KGNwdSwgbWFzaykJCWlmICgoY3B1KSA9IDAsIChtYXNrKSkKKyNkZWZpbmUgYWxsb2NfbWF5ZGF5X21hc2sobWFza3AsIGdmcCkJCXRydWUKKyNkZWZpbmUgZnJlZV9tYXlkYXlfbWFzayhtYXNrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgogCiAvKgogICogVGhlIGV4dGVybmFsbHkgdmlzaWJsZSB3b3JrcXVldWUgYWJzdHJhY3Rpb24gaXMgYW4gYXJyYXkgb2YKICAqIHBlci1DUFUgd29ya3F1ZXVlczoKICAqLwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgewotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3B1X3dxOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBjaGFyICpuYW1lOwotCWludCBzaW5nbGV0aHJlYWQ7Ci0JaW50IGZyZWV6ZWFibGU7CQkvKiBGcmVlemUgdGhyZWFkcyBkdXJpbmcgc3VzcGVuZCAqLwotCWludCBydDsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzOwkJLyogSTogV1FfKiBmbGFncyAqLworCXVuaW9uIHsKKwkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0IF9fcGVyY3B1CSpwY3B1OworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QJCSpzaW5nbGU7CisJCXVuc2lnbmVkIGxvbmcJCQkJdjsKKwl9IGNwdV93cTsJCQkJLyogSTogY3dxJ3MgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBXOiBsaXN0IG9mIGFsbCB3b3JrcXVldWVzICovCisKKwlzdHJ1Y3QgbXV0ZXgJCWZsdXNoX211dGV4OwkvKiBwcm90ZWN0cyB3cSBmbHVzaGluZyAqLworCWludAkJCXdvcmtfY29sb3I7CS8qIEY6IGN1cnJlbnQgd29yayBjb2xvciAqLworCWludAkJCWZsdXNoX2NvbG9yOwkvKiBGOiBjdXJyZW50IGZsdXNoIGNvbG9yICovCisJYXRvbWljX3QJCW5yX2N3cXNfdG9fZmx1c2g7IC8qIGZsdXNoIGluIHByb2dyZXNzICovCisJc3RydWN0IHdxX2ZsdXNoZXIJKmZpcnN0X2ZsdXNoZXI7CS8qIEY6IGZpcnN0IGZsdXNoZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsdXNoZXJfcXVldWU7CS8qIEY6IGZsdXNoIHdhaXRlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsdXNoZXJfb3ZlcmZsb3c7IC8qIEY6IGZsdXNoIG92ZXJmbG93IGxpc3QgKi8KKworCW1heWRheV9tYXNrX3QJCW1heWRheV9tYXNrOwkvKiBjcHVzIHJlcXVlc3RpbmcgcmVzY3VlICovCisJc3RydWN0IHdvcmtlcgkJKnJlc2N1ZXI7CS8qIEk6IHJlc2N1ZSB3b3JrZXIgKi8KKworCWludAkJCXNhdmVkX21heF9hY3RpdmU7IC8qIFc6IHNhdmVkIGN3cSBtYXhfYWN0aXZlICovCisJY29uc3QgY2hhcgkJKm5hbWU7CQkvKiBJOiB3b3JrcXVldWUgbmFtZSAqLwogI2lmZGVmIENPTkZJR19MT0NLREVQCi0Jc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwOworCXN0cnVjdCBsb2NrZGVwX21hcAlsb2NrZGVwX21hcDsKICNlbmRpZgogfTsKIAorc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN5c3RlbV93cSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN5c3RlbV9sb25nX3dxIF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3lzdGVtX25ydF93cSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN5c3RlbV91bmJvdW5kX3dxIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChzeXN0ZW1fd3EpOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzdGVtX2xvbmdfd3EpOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzdGVtX25ydF93cSk7CitFWFBPUlRfU1lNQk9MX0dQTChzeXN0ZW1fdW5ib3VuZF93cSk7CisKKyNkZWZpbmUgZm9yX2VhY2hfYnVzeV93b3JrZXIod29ya2VyLCBpLCBwb3MsIGdjd3EpCQkJXAorCWZvciAoaSA9IDA7IGkgPCBCVVNZX1dPUktFUl9IQVNIX1NJWkU7IGkrKykJCQlcCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHdvcmtlciwgcG9zLCAmZ2N3cS0+YnVzeV9oYXNoW2ldLCBoZW50cnkpCisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbmV4dF9nY3dxX2NwdShpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQkgIHVuc2lnbmVkIGludCBzdykKK3sKKwlpZiAoY3B1IDwgbnJfY3B1X2lkcykgeworCQlpZiAoc3cgJiAxKSB7CisJCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBtYXNrKTsKKwkJCWlmIChjcHUgPCBucl9jcHVfaWRzKQorCQkJCXJldHVybiBjcHU7CisJCX0KKwkJaWYgKHN3ICYgMikKKwkJCXJldHVybiBXT1JLX0NQVV9VTkJPVU5EOworCX0KKwlyZXR1cm4gV09SS19DUFVfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19uZXh0X3dxX2NwdShpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKKwkJCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCit7CisJcmV0dXJuIF9fbmV4dF9nY3dxX2NwdShjcHUsIG1hc2ssICEod3EtPmZsYWdzICYgV1FfVU5CT1VORCkgPyAxIDogMik7Cit9CisKKy8qCisgKiBDUFUgaXRlcmF0b3JzCisgKgorICogQW4gZXh0cmEgZ2N3cSBpcyBkZWZpbmVkIGZvciBhbiBpbnZhbGlkIGNwdSBudW1iZXIKKyAqIChXT1JLX0NQVV9VTkJPVU5EKSB0byBob3N0IHdvcmtxdWV1ZXMgd2hpY2ggYXJlIG5vdCBib3VuZCB0byBhbnkKKyAqIHNwZWNpZmljIENQVS4gIFRoZSBmb2xsb3dpbmcgaXRlcmF0b3JzIGFyZSBzaW1pbGFyIHRvCisgKiBmb3JfZWFjaF8qX2NwdSgpIGl0ZXJhdG9ycyBidXQgYWxzbyBjb25zaWRlcnMgdGhlIHVuYm91bmQgZ2N3cS4KKyAqCisgKiBmb3JfZWFjaF9nY3dxX2NwdSgpCQk6IHBvc3NpYmxlIENQVXMgKyBXT1JLX0NQVV9VTkJPVU5ECisgKiBmb3JfZWFjaF9vbmxpbmVfZ2N3cV9jcHUoKQk6IG9ubGluZSBDUFVzICsgV09SS19DUFVfVU5CT1VORAorICogZm9yX2VhY2hfY3dxX2NwdSgpCQk6IHBvc3NpYmxlIENQVXMgZm9yIGJvdW5kIHdvcmtxdWV1ZXMsCisgKgkJCQkgIFdPUktfQ1BVX1VOQk9VTkQgZm9yIHVuYm91bmQgd29ya3F1ZXVlcworICovCisjZGVmaW5lIGZvcl9lYWNoX2djd3FfY3B1KGNwdSkJCQkJCQlcCisJZm9yICgoY3B1KSA9IF9fbmV4dF9nY3dxX2NwdSgtMSwgY3B1X3Bvc3NpYmxlX21hc2ssIDMpOwkJXAorCSAgICAgKGNwdSkgPCBXT1JLX0NQVV9OT05FOwkJCQkJXAorCSAgICAgKGNwdSkgPSBfX25leHRfZ2N3cV9jcHUoKGNwdSksIGNwdV9wb3NzaWJsZV9tYXNrLCAzKSkKKworI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfZ2N3cV9jcHUoY3B1KQkJCQkJXAorCWZvciAoKGNwdSkgPSBfX25leHRfZ2N3cV9jcHUoLTEsIGNwdV9vbmxpbmVfbWFzaywgMyk7CQlcCisJICAgICAoY3B1KSA8IFdPUktfQ1BVX05PTkU7CQkJCQlcCisJICAgICAoY3B1KSA9IF9fbmV4dF9nY3dxX2NwdSgoY3B1KSwgY3B1X29ubGluZV9tYXNrLCAzKSkKKworI2RlZmluZSBmb3JfZWFjaF9jd3FfY3B1KGNwdSwgd3EpCQkJCQlcCisJZm9yICgoY3B1KSA9IF9fbmV4dF93cV9jcHUoLTEsIGNwdV9wb3NzaWJsZV9tYXNrLCAod3EpKTsJXAorCSAgICAgKGNwdSkgPCBXT1JLX0NQVV9OT05FOwkJCQkJXAorCSAgICAgKGNwdSkgPSBfX25leHRfd3FfY3B1KChjcHUpLCBjcHVfcG9zc2libGVfbWFzaywgKHdxKSkpCisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorLyoqCisgKiBpbl93b3JrcXVldWVfY29udGV4dCgpIC0gaW4gY29udGV4dCBvZiBzcGVjaWZpZWQgd29ya3F1ZXVlPworICogQHdxOiB0aGUgd29ya3F1ZXVlIG9mIGludGVyZXN0CisgKgorICogQ2hlY2tzIGxvY2tkZXAgc3RhdGUgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgZXhlY3V0aW5nIGZyb20KKyAqIHdpdGhpbiBhIHdvcmtxdWV1ZSBpdGVtLiAgVGhpcyBmdW5jdGlvbiBleGlzdHMgb25seSBpZiBsb2NrZGVwIGlzCisgKiBlbmFibGVkLgorICovCitpbnQgaW5fd29ya3F1ZXVlX2NvbnRleHQoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQoreworCXJldHVybiBsb2NrX2lzX2hlbGQoJndxLT5sb2NrZGVwX21hcCk7Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19ERUJVR19PQkpFQ1RTX1dPUksKIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmpfZGVzY3Igd29ya19kZWJ1Z19kZXNjcjsKQEAgLTEwNyw3ICszNTMsNyBAQAogCQkgKiBzdGF0aWNhbGx5IGluaXRpYWxpemVkLiBXZSBqdXN0IG1ha2Ugc3VyZSB0aGF0IGl0CiAJCSAqIGlzIHRyYWNrZWQgaW4gdGhlIG9iamVjdCB0cmFja2VyLgogCQkgKi8KLQkJaWYgKHRlc3RfYml0KFdPUktfU1RSVUNUX1NUQVRJQywgd29ya19kYXRhX2JpdHMod29yaykpKSB7CisJCWlmICh0ZXN0X2JpdChXT1JLX1NUUlVDVF9TVEFUSUNfQklULCB3b3JrX2RhdGFfYml0cyh3b3JrKSkpIHsKIAkJCWRlYnVnX29iamVjdF9pbml0KHdvcmssICZ3b3JrX2RlYnVnX2Rlc2NyKTsKIAkJCWRlYnVnX29iamVjdF9hY3RpdmF0ZSh3b3JrLCAmd29ya19kZWJ1Z19kZXNjcik7CiAJCQlyZXR1cm4gMDsKQEAgLTE4MSw5NCArNDI3LDU3NSBAQAogLyogU2VyaWFsaXplcyB0aGUgYWNjZXNzZXMgdG8gdGhlIGxpc3Qgb2Ygd29ya3F1ZXVlcy4gKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sod29ya3F1ZXVlX2xvY2spOwogc3RhdGljIExJU1RfSEVBRCh3b3JrcXVldWVzKTsKK3N0YXRpYyBib29sIHdvcmtxdWV1ZV9mcmVlemluZzsJCS8qIFc6IGhhdmUgd3FzIHN0YXJ0ZWQgZnJlZXppbmc/ICovCiAKLXN0YXRpYyBpbnQgc2luZ2xldGhyZWFkX2NwdSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfc2luZ2xldGhyZWFkX21hcCBfX3JlYWRfbW9zdGx5OwogLyoKLSAqIF9jcHVfZG93bigpIGZpcnN0IHJlbW92ZXMgQ1BVIGZyb20gY3B1X29ubGluZV9tYXAsIHRoZW4gQ1BVX0RFQUQKLSAqIGZsdXNoZXMgY3dxLT53b3JrbGlzdC4gVGhpcyBtZWFucyB0aGF0IGZsdXNoX3dvcmtxdWV1ZS93YWl0X29uX3dvcmsKLSAqIHdoaWNoIGNvbWVzIGluIGJldHdlZW4gY2FuJ3QgdXNlIGZvcl9lYWNoX29ubGluZV9jcHUoKS4gV2UgY291bGQKLSAqIHVzZSBjcHVfcG9zc2libGVfbWFwLCB0aGUgY3B1bWFzayBiZWxvdyBpcyBtb3JlIGEgZG9jdW1lbnRhdGlvbgotICogdGhhbiBvcHRpbWl6YXRpb24uCisgKiBUaGUgYWxtaWdodHkgZ2xvYmFsIGNwdSB3b3JrcXVldWVzLiAgbnJfcnVubmluZyBpcyB0aGUgb25seSBmaWVsZAorICogd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgdXNlZCBmcmVxdWVudGx5IGJ5IG90aGVyIGNwdXMgdmlhCisgKiB0cnlfdG9fd2FrZV91cCgpLiAgUHV0IGl0IGluIGEgc2VwYXJhdGUgY2FjaGVsaW5lLgogICovCi1zdGF0aWMgY3B1bWFza192YXJfdCBjcHVfcG9wdWxhdGVkX21hcCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBnbG9iYWxfY3dxLCBnbG9iYWxfY3dxKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChhdG9taWNfdCwgZ2N3cV9ucl9ydW5uaW5nKTsKIAotLyogSWYgaXQncyBzaW5nbGUgdGhyZWFkZWQsIGl0IGlzbid0IGluIHRoZSBsaXN0IG9mIHdvcmtxdWV1ZXMuICovCi1zdGF0aWMgaW5saW5lIGludCBpc193cV9zaW5nbGVfdGhyZWFkZWQoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQorLyoKKyAqIEdsb2JhbCBjcHUgd29ya3F1ZXVlIGFuZCBucl9ydW5uaW5nIGNvdW50ZXIgZm9yIHVuYm91bmQgZ2N3cS4gIFRoZQorICogZ2N3cSBpcyBhbHdheXMgb25saW5lLCBoYXMgR0NXUV9ESVNBU1NPQ0lBVEVEIHNldCwgYW5kIGFsbCBpdHMKKyAqIHdvcmtlcnMgaGF2ZSBXT1JLRVJfVU5CT1VORCBzZXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2xvYmFsX2N3cSB1bmJvdW5kX2dsb2JhbF9jd3E7CitzdGF0aWMgYXRvbWljX3QgdW5ib3VuZF9nY3dxX25yX3J1bm5pbmcgPSBBVE9NSUNfSU5JVCgwKTsJLyogYWx3YXlzIDAgKi8KKworc3RhdGljIGludCB3b3JrZXJfdGhyZWFkKHZvaWQgKl9fd29ya2VyKTsKKworc3RhdGljIHN0cnVjdCBnbG9iYWxfY3dxICpnZXRfZ2N3cSh1bnNpZ25lZCBpbnQgY3B1KQogewotCXJldHVybiB3cS0+c2luZ2xldGhyZWFkOworCWlmIChjcHUgIT0gV09SS19DUFVfVU5CT1VORCkKKwkJcmV0dXJuICZwZXJfY3B1KGdsb2JhbF9jd3EsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gJnVuYm91bmRfZ2xvYmFsX2N3cTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp3cV9jcHVfbWFwKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKK3N0YXRpYyBhdG9taWNfdCAqZ2V0X2djd3FfbnJfcnVubmluZyh1bnNpZ25lZCBpbnQgY3B1KQogewotCXJldHVybiBpc193cV9zaW5nbGVfdGhyZWFkZWQod3EpCi0JCT8gY3B1X3NpbmdsZXRocmVhZF9tYXAgOiBjcHVfcG9wdWxhdGVkX21hcDsKKwlpZiAoY3B1ICE9IFdPUktfQ1BVX1VOQk9VTkQpCisJCXJldHVybiAmcGVyX2NwdShnY3dxX25yX3J1bm5pbmcsIGNwdSk7CisJZWxzZQorCQlyZXR1cm4gJnVuYm91bmRfZ2N3cV9ucl9ydW5uaW5nOwogfQogCi1zdGF0aWMKLXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqd3FfcGVyX2NwdShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsIGludCBjcHUpCitzdGF0aWMgc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpnZXRfY3dxKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCSAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCiB7Ci0JaWYgKHVubGlrZWx5KGlzX3dxX3NpbmdsZV90aHJlYWRlZCh3cSkpKQotCQljcHUgPSBzaW5nbGV0aHJlYWRfY3B1OwotCXJldHVybiBwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpOworCWlmICghKHdxLT5mbGFncyAmIFdRX1VOQk9VTkQpKSB7CisJCWlmIChsaWtlbHkoY3B1IDwgbnJfY3B1X2lkcykpIHsKKyNpZmRlZiBDT05GSUdfU01QCisJCQlyZXR1cm4gcGVyX2NwdV9wdHIod3EtPmNwdV93cS5wY3B1LCBjcHUpOworI2Vsc2UKKwkJCXJldHVybiB3cS0+Y3B1X3dxLnNpbmdsZTsKKyNlbmRpZgorCQl9CisJfSBlbHNlIGlmIChsaWtlbHkoY3B1ID09IFdPUktfQ1BVX1VOQk9VTkQpKQorCQlyZXR1cm4gd3EtPmNwdV93cS5zaW5nbGU7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd29ya19jb2xvcl90b19mbGFncyhpbnQgY29sb3IpCit7CisJcmV0dXJuIGNvbG9yIDw8IFdPUktfU1RSVUNUX0NPTE9SX1NISUZUOworfQorCitzdGF0aWMgaW50IGdldF93b3JrX2NvbG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZXR1cm4gKCp3b3JrX2RhdGFfYml0cyh3b3JrKSA+PiBXT1JLX1NUUlVDVF9DT0xPUl9TSElGVCkgJgorCQkoKDEgPDwgV09SS19TVFJVQ1RfQ09MT1JfQklUUykgLSAxKTsKK30KKworc3RhdGljIGludCB3b3JrX25leHRfY29sb3IoaW50IGNvbG9yKQoreworCXJldHVybiAoY29sb3IgKyAxKSAlIFdPUktfTlJfQ09MT1JTOwogfQogCiAvKgotICogU2V0IHRoZSB3b3JrcXVldWUgb24gd2hpY2ggYSB3b3JrIGl0ZW0gaXMgdG8gYmUgcnVuCi0gKiAtIE11c3QgKm9ubHkqIGJlIGNhbGxlZCBpZiB0aGUgcGVuZGluZyBmbGFnIGlzIHNldAorICogQSB3b3JrJ3MgZGF0YSBwb2ludHMgdG8gdGhlIGN3cSB3aXRoIFdPUktfU1RSVUNUX0NXUSBzZXQgd2hpbGUgdGhlCisgKiB3b3JrIGlzIG9uIHF1ZXVlLiAgT25jZSBleGVjdXRpb24gc3RhcnRzLCBXT1JLX1NUUlVDVF9DV1EgaXMKKyAqIGNsZWFyZWQgYW5kIHRoZSB3b3JrIGRhdGEgY29udGFpbnMgdGhlIGNwdSBudW1iZXIgaXQgd2FzIGxhc3Qgb24uCisgKgorICogc2V0X3dvcmtfe2N3cXxjcHV9KCkgYW5kIGNsZWFyX3dvcmtfZGF0YSgpIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUKKyAqIGN3cSwgY3B1IG9yIGNsZWFyIHdvcmstPmRhdGEuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUKKyAqIGNhbGxlZCB3aGlsZSB0aGUgd29yayBpcyBvd25lZCAtIGllLiB3aGlsZSB0aGUgUEVORElORyBiaXQgaXMgc2V0LgorICoKKyAqIGdldF93b3JrX1tnXWN3cSgpIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aGUgZ2N3cSBvciBjd3EKKyAqIGNvcnJlc3BvbmRpbmcgdG8gYSB3b3JrLiAgZ2N3cSBpcyBhdmFpbGFibGUgb25jZSB0aGUgd29yayBoYXMgYmVlbgorICogcXVldWVkIGFueXdoZXJlIGFmdGVyIGluaXRpYWxpemF0aW9uLiAgY3dxIGlzIGF2YWlsYWJsZSBvbmx5IGZyb20KKyAqIHF1ZXVlaW5nIHVudGlsIGV4ZWN1dGlvbiBzdGFydHMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfd3FfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssCi0JCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3dvcmtfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHVuc2lnbmVkIGxvbmcgZGF0YSwKKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQl1bnNpZ25lZCBsb25nIG5ldzsKLQogCUJVR19PTighd29ya19wZW5kaW5nKHdvcmspKTsKKwlhdG9taWNfbG9uZ19zZXQoJndvcmstPmRhdGEsIGRhdGEgfCBmbGFncyB8IHdvcmtfc3RhdGljKHdvcmspKTsKK30KIAotCW5ldyA9ICh1bnNpZ25lZCBsb25nKSBjd3EgfCAoMVVMIDw8IFdPUktfU1RSVUNUX1BFTkRJTkcpOwotCW5ldyB8PSBXT1JLX1NUUlVDVF9GTEFHX01BU0sgJiAqd29ya19kYXRhX2JpdHMod29yayk7Ci0JYXRvbWljX2xvbmdfc2V0KCZ3b3JrLT5kYXRhLCBuZXcpOworc3RhdGljIHZvaWQgc2V0X3dvcmtfY3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywKKwkJCSBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwKKwkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX2ZsYWdzKQoreworCXNldF93b3JrX2RhdGEod29yaywgKHVuc2lnbmVkIGxvbmcpY3dxLAorCQkgICAgICBXT1JLX1NUUlVDVF9QRU5ESU5HIHwgV09SS19TVFJVQ1RfQ1dRIHwgZXh0cmFfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRfd29ya19jcHUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCXNldF93b3JrX2RhdGEod29yaywgY3B1IDw8IFdPUktfU1RSVUNUX0ZMQUdfQklUUywgV09SS19TVFJVQ1RfUEVORElORyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3dvcmtfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc2V0X3dvcmtfZGF0YSh3b3JrLCBXT1JLX1NUUlVDVF9OT19DUFUsIDApOworfQorCitzdGF0aWMgc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpnZXRfd29ya19jd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YSA9IGF0b21pY19sb25nX3JlYWQoJndvcmstPmRhdGEpOworCisJaWYgKGRhdGEgJiBXT1JLX1NUUlVDVF9DV1EpCisJCXJldHVybiAodm9pZCAqKShkYXRhICYgV09SS19TVFJVQ1RfV1FfREFUQV9NQVNLKTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGdsb2JhbF9jd3EgKmdldF93b3JrX2djd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXVuc2lnbmVkIGxvbmcgZGF0YSA9IGF0b21pY19sb25nX3JlYWQoJndvcmstPmRhdGEpOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlpZiAoZGF0YSAmIFdPUktfU1RSVUNUX0NXUSkKKwkJcmV0dXJuICgoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICopCisJCQkoZGF0YSAmIFdPUktfU1RSVUNUX1dRX0RBVEFfTUFTSykpLT5nY3dxOworCisJY3B1ID0gZGF0YSA+PiBXT1JLX1NUUlVDVF9GTEFHX0JJVFM7CisJaWYgKGNwdSA9PSBXT1JLX0NQVV9OT05FKQorCQlyZXR1cm4gTlVMTDsKKworCUJVR19PTihjcHUgPj0gbnJfY3B1X2lkcyAmJiBjcHUgIT0gV09SS19DUFVfVU5CT1VORCk7CisJcmV0dXJuIGdldF9nY3dxKGNwdSk7CiB9CiAKIC8qCi0gKiBDbGVhciBXT1JLX1NUUlVDVF9QRU5ESU5HIGFuZCB0aGUgd29ya3F1ZXVlIG9uIHdoaWNoIGl0IHdhcyBxdWV1ZWQuCisgKiBQb2xpY3kgZnVuY3Rpb25zLiAgVGhlc2UgZGVmaW5lIHRoZSBwb2xpY2llcyBvbiBob3cgdGhlIGdsb2JhbAorICogd29ya2VyIHBvb2wgaXMgbWFuYWdlZC4gIFVubGVzcyBub3RlZCBvdGhlcndpc2UsIHRoZXNlIGZ1bmN0aW9ucworICogYXNzdW1lIHRoYXQgdGhleSdyZSBiZWluZyBjYWxsZWQgd2l0aCBnY3dxLT5sb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl93cV9kYXRhKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKworc3RhdGljIGJvb2wgX19uZWVkX21vcmVfd29ya2VyKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAqd29ya19kYXRhX2JpdHMod29yaykgJgotCQkJCSgxVUwgPDwgV09SS19TVFJVQ1RfU1RBVElDKTsKLQlhdG9taWNfbG9uZ19zZXQoJndvcmstPmRhdGEsIGZsYWdzKTsKKwlyZXR1cm4gIWF0b21pY19yZWFkKGdldF9nY3dxX25yX3J1bm5pbmcoZ2N3cS0+Y3B1KSkgfHwKKwkJZ2N3cS0+ZmxhZ3MgJiBHQ1dRX0hJR0hQUklfUEVORElORzsKIH0KIAotc3RhdGljIGlubGluZQotc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpnZXRfd3FfZGF0YShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisvKgorICogTmVlZCB0byB3YWtlIHVwIGEgd29ya2VyPyAgQ2FsbGVkIGZyb20gYW55dGhpbmcgYnV0IGN1cnJlbnRseQorICogcnVubmluZyB3b3JrZXJzLgorICovCitzdGF0aWMgYm9vbCBuZWVkX21vcmVfd29ya2VyKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQogewotCXJldHVybiAodm9pZCAqKSAoYXRvbWljX2xvbmdfcmVhZCgmd29yay0+ZGF0YSkgJiBXT1JLX1NUUlVDVF9XUV9EQVRBX01BU0spOworCXJldHVybiAhbGlzdF9lbXB0eSgmZ2N3cS0+d29ya2xpc3QpICYmIF9fbmVlZF9tb3JlX3dvcmtlcihnY3dxKTsKIH0KIAorLyogQ2FuIEkgc3RhcnQgd29ya2luZz8gIENhbGxlZCBmcm9tIGJ1c3kgYnV0ICFydW5uaW5nIHdvcmtlcnMuICovCitzdGF0aWMgYm9vbCBtYXlfc3RhcnRfd29ya2luZyhzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSkKK3sKKwlyZXR1cm4gZ2N3cS0+bnJfaWRsZTsKK30KKworLyogRG8gSSBuZWVkIHRvIGtlZXAgd29ya2luZz8gIENhbGxlZCBmcm9tIGN1cnJlbnRseSBydW5uaW5nIHdvcmtlcnMuICovCitzdGF0aWMgYm9vbCBrZWVwX3dvcmtpbmcoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EpCit7CisJYXRvbWljX3QgKm5yX3J1bm5pbmcgPSBnZXRfZ2N3cV9ucl9ydW5uaW5nKGdjd3EtPmNwdSk7CisKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJmdjd3EtPndvcmtsaXN0KSAmJiBhdG9taWNfcmVhZChucl9ydW5uaW5nKSA8PSAxOworfQorCisvKiBEbyB3ZSBuZWVkIGEgbmV3IHdvcmtlcj8gIENhbGxlZCBmcm9tIG1hbmFnZXIuICovCitzdGF0aWMgYm9vbCBuZWVkX3RvX2NyZWF0ZV93b3JrZXIoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EpCit7CisJcmV0dXJuIG5lZWRfbW9yZV93b3JrZXIoZ2N3cSkgJiYgIW1heV9zdGFydF93b3JraW5nKGdjd3EpOworfQorCisvKiBEbyBJIG5lZWQgdG8gYmUgdGhlIG1hbmFnZXI/ICovCitzdGF0aWMgYm9vbCBuZWVkX3RvX21hbmFnZV93b3JrZXJzKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQoreworCXJldHVybiBuZWVkX3RvX2NyZWF0ZV93b3JrZXIoZ2N3cSkgfHwgZ2N3cS0+ZmxhZ3MgJiBHQ1dRX01BTkFHRV9XT1JLRVJTOworfQorCisvKiBEbyB3ZSBoYXZlIHRvbyBtYW55IHdvcmtlcnMgYW5kIHNob3VsZCBzb21lIGdvIGF3YXk/ICovCitzdGF0aWMgYm9vbCB0b29fbWFueV93b3JrZXJzKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQoreworCWJvb2wgbWFuYWdpbmcgPSBnY3dxLT5mbGFncyAmIEdDV1FfTUFOQUdJTkdfV09SS0VSUzsKKwlpbnQgbnJfaWRsZSA9IGdjd3EtPm5yX2lkbGUgKyBtYW5hZ2luZzsgLyogbWFuYWdlciBpcyBjb25zaWRlcmVkIGlkbGUgKi8KKwlpbnQgbnJfYnVzeSA9IGdjd3EtPm5yX3dvcmtlcnMgLSBucl9pZGxlOworCisJcmV0dXJuIG5yX2lkbGUgPiAyICYmIChucl9pZGxlIC0gMikgKiBNQVhfSURMRV9XT1JLRVJTX1JBVElPID49IG5yX2J1c3k7Cit9CisKKy8qCisgKiBXYWtlIHVwIGZ1bmN0aW9ucy4KKyAqLworCisvKiBSZXR1cm4gdGhlIGZpcnN0IHdvcmtlci4gIFNhZmUgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkICovCitzdGF0aWMgc3RydWN0IHdvcmtlciAqZmlyc3Rfd29ya2VyKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQoreworCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZnY3dxLT5pZGxlX2xpc3QpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmZ2N3cS0+aWRsZV9saXN0LCBzdHJ1Y3Qgd29ya2VyLCBlbnRyeSk7Cit9CisKKy8qKgorICogd2FrZV91cF93b3JrZXIgLSB3YWtlIHVwIGFuIGlkbGUgd29ya2VyCisgKiBAZ2N3cTogZ2N3cSB0byB3YWtlIHdvcmtlciBmb3IKKyAqCisgKiBXYWtlIHVwIHRoZSBmaXJzdCBpZGxlIHdvcmtlciBvZiBAZ2N3cS4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqLworc3RhdGljIHZvaWQgd2FrZV91cF93b3JrZXIoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EpCit7CisJc3RydWN0IHdvcmtlciAqd29ya2VyID0gZmlyc3Rfd29ya2VyKGdjd3EpOworCisJaWYgKGxpa2VseSh3b3JrZXIpKQorCQl3YWtlX3VwX3Byb2Nlc3Mod29ya2VyLT50YXNrKTsKK30KKworLyoqCisgKiB3cV93b3JrZXJfd2FraW5nX3VwIC0gYSB3b3JrZXIgaXMgd2FraW5nIHVwCisgKiBAdGFzazogdGFzayB3YWtpbmcgdXAKKyAqIEBjcHU6IENQVSBAdGFzayBpcyB3YWtpbmcgdXAgdG8KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgdHJ5X3RvX3dha2VfdXAoKSB3aGVuIGEgd29ya2VyIGlzCisgKiBiZWluZyBhd29rZW4uCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEocnEtPmxvY2spCisgKi8KK3ZvaWQgd3Ffd29ya2VyX3dha2luZ191cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHdvcmtlciAqd29ya2VyID0ga3RocmVhZF9kYXRhKHRhc2spOworCisJaWYgKGxpa2VseSghKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfTk9UX1JVTk5JTkcpKSkKKwkJYXRvbWljX2luYyhnZXRfZ2N3cV9ucl9ydW5uaW5nKGNwdSkpOworfQorCisvKioKKyAqIHdxX3dvcmtlcl9zbGVlcGluZyAtIGEgd29ya2VyIGlzIGdvaW5nIHRvIHNsZWVwCisgKiBAdGFzazogdGFzayBnb2luZyB0byBzbGVlcAorICogQGNwdTogQ1BVIGluIHF1ZXN0aW9uLCBtdXN0IGJlIHRoZSBjdXJyZW50IENQVSBudW1iZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc2NoZWR1bGUoKSB3aGVuIGEgYnVzeSB3b3JrZXIgaXMKKyAqIGdvaW5nIHRvIHNsZWVwLiAgV29ya2VyIG9uIHRoZSBzYW1lIGNwdSBjYW4gYmUgd29rZW4gdXAgYnkKKyAqIHJldHVybmluZyBwb2ludGVyIHRvIGl0cyB0YXNrLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKHJxLT5sb2NrKQorICoKKyAqIFJFVFVSTlM6CisgKiBXb3JrZXIgdGFzayBvbiBAY3B1IHRvIHdha2UgdXAsICVOVUxMIGlmIG5vbmUuCisgKi8KK3N0cnVjdCB0YXNrX3N0cnVjdCAqd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBrdGhyZWFkX2RhdGEodGFzayksICp0b193YWtldXAgPSBOVUxMOworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gZ2V0X2djd3EoY3B1KTsKKwlhdG9taWNfdCAqbnJfcnVubmluZyA9IGdldF9nY3dxX25yX3J1bm5pbmcoY3B1KTsKKworCWlmICh1bmxpa2VseSh3b3JrZXItPmZsYWdzICYgV09SS0VSX05PVF9SVU5OSU5HKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBvbiB0aGUgbG9jYWwgY3B1ICovCisJQlVHX09OKGNwdSAhPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCS8qCisJICogVGhlIGNvdW50ZXJwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgZGVjX2FuZF90ZXN0LCBpbXBsaWVkIG1iLAorCSAqIHdvcmtsaXN0IG5vdCBlbXB0eSB0ZXN0IHNlcXVlbmNlIGlzIGluIGluc2VydF93b3JrKCkuCisJICogUGxlYXNlIHJlYWQgY29tbWVudCB0aGVyZS4KKwkgKgorCSAqIE5PVF9SVU5OSU5HIGlzIGNsZWFyLiAgVGhpcyBtZWFucyB0aGF0IHRydXN0ZWUgaXMgbm90IGluCisJICogY2hhcmdlIGFuZCB3ZSdyZSBydW5uaW5nIG9uIHRoZSBsb2NhbCBjcHUgdy8gcnEgbG9jayBoZWxkCisJICogYW5kIHByZWVtcHRpb24gZGlzYWJsZWQsIHdoaWNoIGluIHR1cm4gbWVhbnMgdGhhdCBub25lIGVsc2UKKwkgKiBjb3VsZCBiZSBtYW5pcHVsYXRpbmcgaWRsZV9saXN0LCBzbyBkZXJlZmVyZW5jaW5nIGlkbGVfbGlzdAorCSAqIHdpdGhvdXQgZ2N3cSBsb2NrIGlzIHNhZmUuCisJICovCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QobnJfcnVubmluZykgJiYgIWxpc3RfZW1wdHkoJmdjd3EtPndvcmtsaXN0KSkKKwkJdG9fd2FrZXVwID0gZmlyc3Rfd29ya2VyKGdjd3EpOworCXJldHVybiB0b193YWtldXAgPyB0b193YWtldXAtPnRhc2sgOiBOVUxMOworfQorCisvKioKKyAqIHdvcmtlcl9zZXRfZmxhZ3MgLSBzZXQgd29ya2VyIGZsYWdzIGFuZCBhZGp1c3QgbnJfcnVubmluZyBhY2NvcmRpbmdseQorICogQHdvcmtlcjogc2VsZgorICogQGZsYWdzOiBmbGFncyB0byBzZXQKKyAqIEB3YWtldXA6IHdha2V1cCBhbiBpZGxlIHdvcmtlciBpZiBuZWNlc3NhcnkKKyAqCisgKiBTZXQgQGZsYWdzIGluIEB3b3JrZXItPmZsYWdzIGFuZCBhZGp1c3QgbnJfcnVubmluZyBhY2NvcmRpbmdseS4gIElmCisgKiBucl9ydW5uaW5nIGJlY29tZXMgemVybyBhbmQgQHdha2V1cCBpcyAldHJ1ZSwgYW4gaWRsZSB3b3JrZXIgaXMKKyAqIHdva2VuIHVwLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3b3JrZXJfc2V0X2ZsYWdzKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJCSAgICBib29sIHdha2V1cCkKK3sKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IHdvcmtlci0+Z2N3cTsKKworCVdBUk5fT05fT05DRSh3b3JrZXItPnRhc2sgIT0gY3VycmVudCk7CisKKwkvKgorCSAqIElmIHRyYW5zaXRpb25pbmcgaW50byBOT1RfUlVOTklORywgYWRqdXN0IG5yX3J1bm5pbmcgYW5kCisJICogd2FrZSB1cCBhbiBpZGxlIHdvcmtlciBhcyBuZWNlc3NhcnkgaWYgcmVxdWVzdGVkIGJ5CisJICogQHdha2V1cC4KKwkgKi8KKwlpZiAoKGZsYWdzICYgV09SS0VSX05PVF9SVU5OSU5HKSAmJgorCSAgICAhKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfTk9UX1JVTk5JTkcpKSB7CisJCWF0b21pY190ICpucl9ydW5uaW5nID0gZ2V0X2djd3FfbnJfcnVubmluZyhnY3dxLT5jcHUpOworCisJCWlmICh3YWtldXApIHsKKwkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KG5yX3J1bm5pbmcpICYmCisJCQkgICAgIWxpc3RfZW1wdHkoJmdjd3EtPndvcmtsaXN0KSkKKwkJCQl3YWtlX3VwX3dvcmtlcihnY3dxKTsKKwkJfSBlbHNlCisJCQlhdG9taWNfZGVjKG5yX3J1bm5pbmcpOworCX0KKworCXdvcmtlci0+ZmxhZ3MgfD0gZmxhZ3M7Cit9CisKKy8qKgorICogd29ya2VyX2Nscl9mbGFncyAtIGNsZWFyIHdvcmtlciBmbGFncyBhbmQgYWRqdXN0IG5yX3J1bm5pbmcgYWNjb3JkaW5nbHkKKyAqIEB3b3JrZXI6IHNlbGYKKyAqIEBmbGFnczogZmxhZ3MgdG8gY2xlYXIKKyAqCisgKiBDbGVhciBAZmxhZ3MgaW4gQHdvcmtlci0+ZmxhZ3MgYW5kIGFkanVzdCBucl9ydW5uaW5nIGFjY29yZGluZ2x5LgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB3b3JrZXJfY2xyX2ZsYWdzKHN0cnVjdCB3b3JrZXIgKndvcmtlciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gd29ya2VyLT5nY3dxOworCXVuc2lnbmVkIGludCBvZmxhZ3MgPSB3b3JrZXItPmZsYWdzOworCisJV0FSTl9PTl9PTkNFKHdvcmtlci0+dGFzayAhPSBjdXJyZW50KTsKKworCXdvcmtlci0+ZmxhZ3MgJj0gfmZsYWdzOworCisJLyogaWYgdHJhbnNpdGlvbmluZyBvdXQgb2YgTk9UX1JVTk5JTkcsIGluY3JlbWVudCBucl9ydW5uaW5nICovCisJaWYgKChmbGFncyAmIFdPUktFUl9OT1RfUlVOTklORykgJiYgKG9mbGFncyAmIFdPUktFUl9OT1RfUlVOTklORykpCisJCWlmICghKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfTk9UX1JVTk5JTkcpKQorCQkJYXRvbWljX2luYyhnZXRfZ2N3cV9ucl9ydW5uaW5nKGdjd3EtPmNwdSkpOworfQorCisvKioKKyAqIGJ1c3lfd29ya2VyX2hlYWQgLSByZXR1cm4gdGhlIGJ1c3kgaGFzaCBoZWFkIGZvciBhIHdvcmsKKyAqIEBnY3dxOiBnY3dxIG9mIGludGVyZXN0CisgKiBAd29yazogd29yayB0byBiZSBoYXNoZWQKKyAqCisgKiBSZXR1cm4gaGFzaCBoZWFkIG9mIEBnY3dxIGZvciBAd29yay4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqCisgKiBSRVRVUk5TOgorICogUG9pbnRlciB0byB0aGUgaGFzaCBoZWFkLgorICovCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmJ1c3lfd29ya2VyX2hlYWQoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EsCisJCQkJCSAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwljb25zdCBpbnQgYmFzZV9zaGlmdCA9IGlsb2cyKHNpemVvZihzdHJ1Y3Qgd29ya19zdHJ1Y3QpKTsKKwl1bnNpZ25lZCBsb25nIHYgPSAodW5zaWduZWQgbG9uZyl3b3JrOworCisJLyogc2ltcGxlIHNoaWZ0IGFuZCBmb2xkIGhhc2gsIGRvIHdlIG5lZWQgc29tZXRoaW5nIGJldHRlcj8gKi8KKwl2ID4+PSBiYXNlX3NoaWZ0OworCXYgKz0gdiA+PiBCVVNZX1dPUktFUl9IQVNIX09SREVSOworCXYgJj0gQlVTWV9XT1JLRVJfSEFTSF9NQVNLOworCisJcmV0dXJuICZnY3dxLT5idXN5X2hhc2hbdl07Cit9CisKKy8qKgorICogX19maW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayAtIGZpbmQgd29ya2VyIHdoaWNoIGlzIGV4ZWN1dGluZyBhIHdvcmsKKyAqIEBnY3dxOiBnY3dxIG9mIGludGVyZXN0CisgKiBAYndoOiBoYXNoIGhlYWQgYXMgcmV0dXJuZWQgYnkgYnVzeV93b3JrZXJfaGVhZCgpCisgKiBAd29yazogd29yayB0byBmaW5kIHdvcmtlciBmb3IKKyAqCisgKiBGaW5kIGEgd29ya2VyIHdoaWNoIGlzIGV4ZWN1dGluZyBAd29yayBvbiBAZ2N3cS4gIEBid2ggc2hvdWxkIGJlCisgKiB0aGUgaGFzaCBoZWFkIG9idGFpbmVkIGJ5IGNhbGxpbmcgYnVzeV93b3JrZXJfaGVhZCgpIHdpdGggdGhlIHNhbWUKKyAqIHdvcmsuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykuCisgKgorICogUkVUVVJOUzoKKyAqIFBvaW50ZXIgdG8gd29ya2VyIHdoaWNoIGlzIGV4ZWN1dGluZyBAd29yayBpZiBmb3VuZCwgTlVMTAorICogb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3RydWN0IHdvcmtlciAqX19maW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayhzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSwKKwkJCQkJCSAgIHN0cnVjdCBobGlzdF9oZWFkICpid2gsCisJCQkJCQkgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdvcmtlciAqd29ya2VyOworCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeSh3b3JrZXIsIHRtcCwgYndoLCBoZW50cnkpCisJCWlmICh3b3JrZXItPmN1cnJlbnRfd29yayA9PSB3b3JrKQorCQkJcmV0dXJuIHdvcmtlcjsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBmaW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayAtIGZpbmQgd29ya2VyIHdoaWNoIGlzIGV4ZWN1dGluZyBhIHdvcmsKKyAqIEBnY3dxOiBnY3dxIG9mIGludGVyZXN0CisgKiBAd29yazogd29yayB0byBmaW5kIHdvcmtlciBmb3IKKyAqCisgKiBGaW5kIGEgd29ya2VyIHdoaWNoIGlzIGV4ZWN1dGluZyBAd29yayBvbiBAZ2N3cS4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGlkZW50aWNhbCB0byBfX2ZpbmRfd29ya2VyX2V4ZWN1dGluZ193b3JrKCkgZXhjZXB0IHRoYXQgdGhpcworICogZnVuY3Rpb24gY2FsY3VsYXRlcyBAYndoIGl0c2VsZi4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqCisgKiBSRVRVUk5TOgorICogUG9pbnRlciB0byB3b3JrZXIgd2hpY2ggaXMgZXhlY3V0aW5nIEB3b3JrIGlmIGZvdW5kLCBOVUxMCisgKiBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya2VyICpmaW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayhzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSwKKwkJCQkJCSBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJcmV0dXJuIF9fZmluZF93b3JrZXJfZXhlY3V0aW5nX3dvcmsoZ2N3cSwgYnVzeV93b3JrZXJfaGVhZChnY3dxLCB3b3JrKSwKKwkJCQkJICAgIHdvcmspOworfQorCisvKioKKyAqIGdjd3FfZGV0ZXJtaW5lX2luc19wb3MgLSBmaW5kIGluc2VydGlvbiBwb3NpdGlvbgorICogQGdjd3E6IGdjd3Egb2YgaW50ZXJlc3QKKyAqIEBjd3E6IGN3cSBhIHdvcmsgaXMgYmVpbmcgcXVldWVkIGZvcgorICoKKyAqIEEgd29yayBmb3IgQGN3cSBpcyBhYm91dCB0byBiZSBxdWV1ZWQgb24gQGdjd3EsIGRldGVybWluZSBpbnNlcnRpb24KKyAqIHBvc2l0aW9uIGZvciB0aGUgd29yay4gIElmIEBjd3EgaXMgZm9yIEhJR0hQUkkgd3EsIHRoZSB3b3JrIGlzCisgKiBxdWV1ZWQgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIGJ1dCBpbiBGSUZPIG9yZGVyIHdpdGggcmVzcGVjdCB0bworICogb3RoZXIgSElHSFBSSSB3b3Jrczsgb3RoZXJ3aXNlLCBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gIFRoaXMKKyAqIGZ1bmN0aW9uIGFsc28gc2V0cyBHQ1dRX0hJR0hQUklfUEVORElORyBmbGFnIHRvIGhpbnQgQGdjd3EgdGhhdAorICogdGhlcmUgYXJlIEhJR0hQUkkgd29ya3MgcGVuZGluZy4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqCisgKiBSRVRVUk5TOgorICogUG9pbnRlciB0byBpbnNlcnN0aW9uIHBvc2l0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKmdjd3FfZGV0ZXJtaW5lX2luc19wb3Moc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EsCisJCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKK3sKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnR3b3JrOworCisJaWYgKGxpa2VseSghKGN3cS0+d3EtPmZsYWdzICYgV1FfSElHSFBSSSkpKQorCQlyZXR1cm4gJmdjd3EtPndvcmtsaXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0d29yaywgJmdjd3EtPndvcmtsaXN0LCBlbnRyeSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKnRjd3EgPSBnZXRfd29ya19jd3EodHdvcmspOworCisJCWlmICghKHRjd3EtPndxLT5mbGFncyAmIFdRX0hJR0hQUkkpKQorCQkJYnJlYWs7CisJfQorCisJZ2N3cS0+ZmxhZ3MgfD0gR0NXUV9ISUdIUFJJX1BFTkRJTkc7CisJcmV0dXJuICZ0d29yay0+ZW50cnk7Cit9CisKKy8qKgorICogaW5zZXJ0X3dvcmsgLSBpbnNlcnQgYSB3b3JrIGludG8gZ2N3cQorICogQGN3cTogY3dxIEB3b3JrIGJlbG9uZ3MgdG8KKyAqIEB3b3JrOiB3b3JrIHRvIGluc2VydAorICogQGhlYWQ6IGluc2VydGlvbiBwb2ludAorICogQGV4dHJhX2ZsYWdzOiBleHRyYSBXT1JLX1NUUlVDVF8qIGZsYWdzIHRvIHNldAorICoKKyAqIEluc2VydCBAd29yayB3aGljaCBiZWxvbmdzIHRvIEBjd3EgaW50byBAZ2N3cSBhZnRlciBAaGVhZC4KKyAqIEBleHRyYV9mbGFncyBpcyBvcidkIHRvIHdvcmtfc3RydWN0IGZsYWdzLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spLgorICovCiBzdGF0aWMgdm9pZCBpbnNlcnRfd29yayhzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwKLQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKKwkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJCXVuc2lnbmVkIGludCBleHRyYV9mbGFncykKIHsKLQl0cmFjZV93b3JrcXVldWVfaW5zZXJ0aW9uKGN3cS0+dGhyZWFkLCB3b3JrKTsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGN3cS0+Z2N3cTsKIAotCXNldF93cV9kYXRhKHdvcmssIGN3cSk7CisJLyogd2Ugb3duIEB3b3JrLCBzZXQgZGF0YSBhbmQgbGluayAqLworCXNldF93b3JrX2N3cSh3b3JrLCBjd3EsIGV4dHJhX2ZsYWdzKTsKKwogCS8qCiAJICogRW5zdXJlIHRoYXQgd2UgZ2V0IHRoZSByaWdodCB3b3JrLT5kYXRhIGlmIHdlIHNlZSB0aGUKIAkgKiByZXN1bHQgb2YgbGlzdF9hZGQoKSBiZWxvdywgc2VlIHRyeV90b19ncmFiX3BlbmRpbmcoKS4KIAkgKi8KIAlzbXBfd21iKCk7CisKIAlsaXN0X2FkZF90YWlsKCZ3b3JrLT5lbnRyeSwgaGVhZCk7Ci0Jd2FrZV91cCgmY3dxLT5tb3JlX3dvcmspOworCisJLyoKKwkgKiBFbnN1cmUgZWl0aGVyIHdvcmtlcl9zY2hlZF9kZWFjdGl2YXRlZCgpIHNlZXMgdGhlIGFib3ZlCisJICogbGlzdF9hZGRfdGFpbCgpIG9yIHdlIHNlZSB6ZXJvIG5yX3J1bm5pbmcgdG8gYXZvaWQgd29ya2VycworCSAqIGx5aW5nIGFyb3VuZCBsYXppbHkgd2hpbGUgdGhlcmUgYXJlIHdvcmtzIHRvIGJlIHByb2Nlc3NlZC4KKwkgKi8KKwlzbXBfbWIoKTsKKworCWlmIChfX25lZWRfbW9yZV93b3JrZXIoZ2N3cSkpCisJCXdha2VfdXBfd29ya2VyKGdjd3EpOwogfQogCi1zdGF0aWMgdm9pZCBfX3F1ZXVlX3dvcmsoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCitzdGF0aWMgdm9pZCBfX3F1ZXVlX3dvcmsodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLAogCQkJIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cTsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp3b3JrbGlzdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGVidWdfd29ya19hY3RpdmF0ZSh3b3JrKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3dxLT5sb2NrLCBmbGFncyk7Ci0JaW5zZXJ0X3dvcmsoY3dxLCB3b3JrLCAmY3dxLT53b3JrbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3dxLT5sb2NrLCBmbGFncyk7CisKKwkvKiBkZXRlcm1pbmUgZ2N3cSB0byB1c2UgKi8KKwlpZiAoISh3cS0+ZmxhZ3MgJiBXUV9VTkJPVU5EKSkgeworCQlzdHJ1Y3QgZ2xvYmFsX2N3cSAqbGFzdF9nY3dxOworCisJCWlmICh1bmxpa2VseShjcHUgPT0gV09SS19DUFVfVU5CT1VORCkpCisJCQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJCS8qCisJCSAqIEl0J3MgbXVsdGkgY3B1LiAgSWYgQHdxIGlzIG5vbi1yZWVudHJhbnQgYW5kIEB3b3JrCisJCSAqIHdhcyBwcmV2aW91c2x5IG9uIGEgZGlmZmVyZW50IGNwdSwgaXQgbWlnaHQgc3RpbGwKKwkJICogYmUgcnVubmluZyB0aGVyZSwgaW4gd2hpY2ggY2FzZSB0aGUgd29yayBuZWVkcyB0bworCQkgKiBiZSBxdWV1ZWQgb24gdGhhdCBjcHUgdG8gZ3VhcmFudGVlIG5vbi1yZWVudHJhbmNlLgorCQkgKi8KKwkJZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisJCWlmICh3cS0+ZmxhZ3MgJiBXUV9OT05fUkVFTlRSQU5UICYmCisJCSAgICAobGFzdF9nY3dxID0gZ2V0X3dvcmtfZ2N3cSh3b3JrKSkgJiYgbGFzdF9nY3dxICE9IGdjd3EpIHsKKwkJCXN0cnVjdCB3b3JrZXIgKndvcmtlcjsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxhc3RfZ2N3cS0+bG9jaywgZmxhZ3MpOworCisJCQl3b3JrZXIgPSBmaW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayhsYXN0X2djd3EsIHdvcmspOworCisJCQlpZiAod29ya2VyICYmIHdvcmtlci0+Y3VycmVudF9jd3EtPndxID09IHdxKQorCQkJCWdjd3EgPSBsYXN0X2djd3E7CisJCQllbHNlIHsKKwkJCQkvKiBtZWguLi4gbm90IHJ1bm5pbmcgdGhlcmUsIHF1ZXVlIGhlcmUgKi8KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXN0X2djd3EtPmxvY2ssIGZsYWdzKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2N3cS0+bG9jaywgZmxhZ3MpOworCQkJfQorCQl9IGVsc2UKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZnY3dxLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJZ2N3cSA9IGdldF9nY3dxKFdPUktfQ1BVX1VOQk9VTkQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2N3cS0+bG9jaywgZmxhZ3MpOworCX0KKworCS8qIGdjd3EgZGV0ZXJtaW5lZCwgZ2V0IGN3cSBhbmQgcXVldWUgKi8KKwljd3EgPSBnZXRfY3dxKGdjd3EtPmNwdSwgd3EpOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpOworCisJY3dxLT5ucl9pbl9mbGlnaHRbY3dxLT53b3JrX2NvbG9yXSsrOworCisJaWYgKGxpa2VseShjd3EtPm5yX2FjdGl2ZSA8IGN3cS0+bWF4X2FjdGl2ZSkpIHsKKwkJY3dxLT5ucl9hY3RpdmUrKzsKKwkJd29ya2xpc3QgPSBnY3dxX2RldGVybWluZV9pbnNfcG9zKGdjd3EsIGN3cSk7CisJfSBlbHNlCisJCXdvcmtsaXN0ID0gJmN3cS0+ZGVsYXllZF93b3JrczsKKworCWluc2VydF93b3JrKGN3cSwgd29yaywgd29ya2xpc3QsIHdvcmtfY29sb3JfdG9fZmxhZ3MoY3dxLT53b3JrX2NvbG9yKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnY3dxLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMzA4LDkgKzEwMzUsOCBAQAogewogCWludCByZXQgPSAwOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkgewotCQlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSk7Ci0JCV9fcXVldWVfd29yayh3cV9wZXJfY3B1KHdxLCBjcHUpLCB3b3JrKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElOR19CSVQsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkgeworCQlfX3F1ZXVlX3dvcmsoY3B1LCB3cSwgd29yayk7CiAJCXJldCA9IDE7CiAJfQogCXJldHVybiByZXQ7CkBAIC0zMjAsMTAgKzEwNDYsOSBAQAogc3RhdGljIHZvaWQgZGVsYXllZF93b3JrX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgX19kYXRhKQogewogCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gKHN0cnVjdCBkZWxheWVkX3dvcmsgKilfX2RhdGE7Ci0Jc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfd3FfZGF0YSgmZHdvcmstPndvcmspOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSA9IGN3cS0+d3E7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfd29ya19jd3EoJmR3b3JrLT53b3JrKTsKIAotCV9fcXVldWVfd29yayh3cV9wZXJfY3B1KHdxLCBzbXBfcHJvY2Vzc29yX2lkKCkpLCAmZHdvcmstPndvcmspOworCV9fcXVldWVfd29yayhzbXBfcHJvY2Vzc29yX2lkKCksIGN3cS0+d3EsICZkd29yay0+d29yayk7CiB9CiAKIC8qKgpAQCAtMzYwLDE0ICsxMDg1LDMxIEBACiAJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyID0gJmR3b3JrLT50aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSAmZHdvcmstPndvcms7CiAKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElORywgd29ya19kYXRhX2JpdHMod29yaykpKSB7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkdfQklULCB3b3JrX2RhdGFfYml0cyh3b3JrKSkpIHsKKwkJdW5zaWduZWQgaW50IGxjcHU7CisKIAkJQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrLT5lbnRyeSkpOwogCiAJCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKCZkd29yay0+dGltZXIpOwogCi0JCS8qIFRoaXMgc3RvcmVzIGN3cSBmb3IgdGhlIG1vbWVudCwgZm9yIHRoZSB0aW1lcl9mbiAqLwotCQlzZXRfd3FfZGF0YSh3b3JrLCB3cV9wZXJfY3B1KHdxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSk7CisJCS8qCisJCSAqIFRoaXMgc3RvcmVzIGN3cSBmb3IgdGhlIG1vbWVudCwgZm9yIHRoZSB0aW1lcl9mbi4KKwkJICogTm90ZSB0aGF0IHRoZSB3b3JrJ3MgZ2N3cSBpcyBwcmVzZXJ2ZWQgdG8gYWxsb3cKKwkJICogcmVlbnRyYW5jZSBkZXRlY3Rpb24gZm9yIGRlbGF5ZWQgd29ya3MuCisJCSAqLworCQlpZiAoISh3cS0+ZmxhZ3MgJiBXUV9VTkJPVU5EKSkgeworCQkJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSBnZXRfd29ya19nY3dxKHdvcmspOworCisJCQlpZiAoZ2N3cSAmJiBnY3dxLT5jcHUgIT0gV09SS19DUFVfVU5CT1VORCkKKwkJCQlsY3B1ID0gZ2N3cS0+Y3B1OworCQkJZWxzZQorCQkJCWxjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCQl9IGVsc2UKKwkJCWxjcHUgPSBXT1JLX0NQVV9VTkJPVU5EOworCisJCXNldF93b3JrX2N3cSh3b3JrLCBnZXRfY3dxKGxjcHUsIHdxKSwgMCk7CisKIAkJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZGVsYXk7CiAJCXRpbWVyLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZHdvcms7CiAJCXRpbWVyLT5mdW5jdGlvbiA9IGRlbGF5ZWRfd29ya190aW1lcl9mbjsKQEAgLTM4Miw4MCArMTEyNCw4NzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2RlbGF5ZWRfd29ya19vbik7CiAKLXN0YXRpYyB2b2lkIHJ1bl93b3JrcXVldWUoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCisvKioKKyAqIHdvcmtlcl9lbnRlcl9pZGxlIC0gZW50ZXIgaWRsZSBzdGF0ZQorICogQHdvcmtlcjogd29ya2VyIHdoaWNoIGlzIGVudGVyaW5nIGlkbGUgc3RhdGUKKyAqCisgKiBAd29ya2VyIGlzIGVudGVyaW5nIGlkbGUgc3RhdGUuICBVcGRhdGUgc3RhdHMgYW5kIGlkbGUgdGltZXIgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqCisgKiBMT0NLSU5HOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqLworc3RhdGljIHZvaWQgd29ya2VyX2VudGVyX2lkbGUoc3RydWN0IHdvcmtlciAqd29ya2VyKQogewotCXNwaW5fbG9ja19pcnEoJmN3cS0+bG9jayk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZjd3EtPndvcmtsaXN0KSkgewotCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSBsaXN0X2VudHJ5KGN3cS0+d29ya2xpc3QubmV4dCwKLQkJCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCwgZW50cnkpOwotCQl3b3JrX2Z1bmNfdCBmID0gd29yay0+ZnVuYzsKLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCQkvKgotCQkgKiBJdCBpcyBwZXJtaXNzaWJsZSB0byBmcmVlIHRoZSBzdHJ1Y3Qgd29ya19zdHJ1Y3QKLQkJICogZnJvbSBpbnNpZGUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZyb20gaXQsCi0JCSAqIHRoaXMgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBmb3IgbG9ja2RlcCB0b28uCi0JCSAqIFRvIGF2b2lkIGJvZ3VzICJoZWxkIGxvY2sgZnJlZWQiIHdhcm5pbmdzIGFzIHdlbGwKLQkJICogYXMgcHJvYmxlbXMgd2hlbiBsb29raW5nIGludG8gd29yay0+bG9ja2RlcF9tYXAsCi0JCSAqIG1ha2UgYSBjb3B5IGFuZCB1c2UgdGhhdCBoZXJlLgotCQkgKi8KLQkJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwID0gd29yay0+bG9ja2RlcF9tYXA7Ci0jZW5kaWYKLQkJdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGlvbihjd3EtPnRocmVhZCwgd29yayk7Ci0JCWRlYnVnX3dvcmtfZGVhY3RpdmF0ZSh3b3JrKTsKLQkJY3dxLT5jdXJyZW50X3dvcmsgPSB3b3JrOwotCQlsaXN0X2RlbF9pbml0KGN3cS0+d29ya2xpc3QubmV4dCk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IHdvcmtlci0+Z2N3cTsKIAotCQlCVUdfT04oZ2V0X3dxX2RhdGEod29yaykgIT0gY3dxKTsKLQkJd29ya19jbGVhcl9wZW5kaW5nKHdvcmspOwotCQlsb2NrX21hcF9hY3F1aXJlKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7Ci0JCWxvY2tfbWFwX2FjcXVpcmUoJmxvY2tkZXBfbWFwKTsKLQkJZih3b3JrKTsKLQkJbG9ja19tYXBfcmVsZWFzZSgmbG9ja2RlcF9tYXApOwotCQlsb2NrX21hcF9yZWxlYXNlKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7CisJQlVHX09OKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfSURMRSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZ3b3JrZXItPmVudHJ5KSAmJgorCSAgICAgICAod29ya2VyLT5oZW50cnkubmV4dCB8fCB3b3JrZXItPmhlbnRyeS5wcHJldikpOwogCi0JCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCBsb2NrZGVwX2RlcHRoKGN1cnJlbnQpID4gMCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiQlVHOiB3b3JrcXVldWUgbGVha2VkIGxvY2sgb3IgYXRvbWljOiAiCi0JCQkJCSIlcy8weCUwOHgvJWRcbiIsCi0JCQkJCWN1cnJlbnQtPmNvbW0sIHByZWVtcHRfY291bnQoKSwKLQkJCQkgICAgICAgCXRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiICAgIGxhc3QgZnVuY3Rpb246ICIpOwotCQkJcHJpbnRfc3ltYm9sKCIlc1xuIiwgKHVuc2lnbmVkIGxvbmcpZik7Ci0JCQlkZWJ1Z19zaG93X2hlbGRfbG9ja3MoY3VycmVudCk7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCX0KKwkvKiBjYW4ndCB1c2Ugd29ya2VyX3NldF9mbGFncygpLCBhbHNvIGNhbGxlZCBmcm9tIHN0YXJ0X3dvcmtlcigpICovCisJd29ya2VyLT5mbGFncyB8PSBXT1JLRVJfSURMRTsKKwlnY3dxLT5ucl9pZGxlKys7CisJd29ya2VyLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CiAKLQkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQkJY3dxLT5jdXJyZW50X3dvcmsgPSBOVUxMOwotCX0KLQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CisJLyogaWRsZV9saXN0IGlzIExJRk8gKi8KKwlsaXN0X2FkZCgmd29ya2VyLT5lbnRyeSwgJmdjd3EtPmlkbGVfbGlzdCk7CisKKwlpZiAobGlrZWx5KCEod29ya2VyLT5mbGFncyAmIFdPUktFUl9ST0dVRSkpKSB7CisJCWlmICh0b29fbWFueV93b3JrZXJzKGdjd3EpICYmICF0aW1lcl9wZW5kaW5nKCZnY3dxLT5pZGxlX3RpbWVyKSkKKwkJCW1vZF90aW1lcigmZ2N3cS0+aWRsZV90aW1lciwKKwkJCQkgIGppZmZpZXMgKyBJRExFX1dPUktFUl9USU1FT1VUKTsKKwl9IGVsc2UKKwkJd2FrZV91cF9hbGwoJmdjd3EtPnRydXN0ZWVfd2FpdCk7CisKKwkvKiBzYW5pdHkgY2hlY2sgbnJfcnVubmluZyAqLworCVdBUk5fT05fT05DRShnY3dxLT5ucl93b3JrZXJzID09IGdjd3EtPm5yX2lkbGUgJiYKKwkJICAgICBhdG9taWNfcmVhZChnZXRfZ2N3cV9ucl9ydW5uaW5nKGdjd3EtPmNwdSkpKTsKIH0KIAotc3RhdGljIGludCB3b3JrZXJfdGhyZWFkKHZvaWQgKl9fY3dxKQorLyoqCisgKiB3b3JrZXJfbGVhdmVfaWRsZSAtIGxlYXZlIGlkbGUgc3RhdGUKKyAqIEB3b3JrZXI6IHdvcmtlciB3aGljaCBpcyBsZWF2aW5nIGlkbGUgc3RhdGUKKyAqCisgKiBAd29ya2VyIGlzIGxlYXZpbmcgaWRsZSBzdGF0ZS4gIFVwZGF0ZSBzdGF0cy4KKyAqCisgKiBMT0NLSU5HOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqLworc3RhdGljIHZvaWQgd29ya2VyX2xlYXZlX2lkbGUoc3RydWN0IHdvcmtlciAqd29ya2VyKQogewotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gX19jd3E7Ci0JREVGSU5FX1dBSVQod2FpdCk7CisJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSB3b3JrZXItPmdjd3E7CiAKLQlpZiAoY3dxLT53cS0+ZnJlZXplYWJsZSkKLQkJc2V0X2ZyZWV6YWJsZSgpOworCUJVR19PTighKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfSURMRSkpOworCXdvcmtlcl9jbHJfZmxhZ3Mod29ya2VyLCBXT1JLRVJfSURMRSk7CisJZ2N3cS0+bnJfaWRsZS0tOworCWxpc3RfZGVsX2luaXQoJndvcmtlci0+ZW50cnkpOworfQogCi0JZm9yICg7OykgewotCQlwcmVwYXJlX3RvX3dhaXQoJmN3cS0+bW9yZV93b3JrLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKCFmcmVlemluZyhjdXJyZW50KSAmJgotCQkgICAgIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJgotCQkgICAgbGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkpCi0JCQlzY2hlZHVsZSgpOwotCQlmaW5pc2hfd2FpdCgmY3dxLT5tb3JlX3dvcmssICZ3YWl0KTsKKy8qKgorICogd29ya2VyX21heWJlX2JpbmRfYW5kX2xvY2sgLSBiaW5kIHdvcmtlciB0byBpdHMgY3B1IGlmIHBvc3NpYmxlIGFuZCBsb2NrIGdjd3EKKyAqIEB3b3JrZXI6IHNlbGYKKyAqCisgKiBXb3JrcyB3aGljaCBhcmUgc2NoZWR1bGVkIHdoaWxlIHRoZSBjcHUgaXMgb25saW5lIG11c3QgYXQgbGVhc3QgYmUKKyAqIHNjaGVkdWxlZCB0byBhIHdvcmtlciB3aGljaCBpcyBib3VuZCB0byB0aGUgY3B1IHNvIHRoYXQgaWYgdGhleSBhcmUKKyAqIGZsdXNoZWQgZnJvbSBjcHUgY2FsbGJhY2tzIHdoaWxlIGNwdSBpcyBnb2luZyBkb3duLCB0aGV5IGFyZQorICogZ3VhcmFudGVlZCB0byBleGVjdXRlIG9uIHRoZSBjcHUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0byBiZSB1c2VkIGJ5IHJvZ3VlIHdvcmtlcnMgYW5kIHJlc2N1ZXJzIHRvIGJpbmQKKyAqIHRoZW1zZWx2ZXMgdG8gdGhlIHRhcmdldCBjcHUgYW5kIG1heSByYWNlIHdpdGggY3B1IGdvaW5nIGRvd24gb3IKKyAqIGNvbWluZyBvbmxpbmUuICBrdGhyZWFkX2JpbmQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgaXQgbWF5IHB1dCB0aGUKKyAqIHdvcmtlciB0byBhbHJlYWR5IGRlYWQgY3B1IGFuZCBzZXRfY3B1c19hbGxvd2VkX3B0cigpIGNhbid0IGJlIHVzZWQKKyAqIHZlcmJhdGltIGFzIGl0J3MgYmVzdCBlZmZvcnQgYW5kIGJsb2NraW5nIGFuZCBnY3dxIG1heSBiZQorICogW2Rpc11hc3NvY2lhdGVkIGluIHRoZSBtZWFudGltZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHNldF9jcHVzX2FsbG93ZWQoKSBhbmQgbG9ja3MgZ2N3cSBhbmQgdmVyaWZpZXMKKyAqIHRoZSBiaW5kaW5nIGFnYWluc3QgR0NXUV9ESVNBU1NPQ0lBVEVEIHdoaWNoIGlzIHNldCBkdXJpbmcKKyAqIENQVV9EWUlORyBhbmQgY2xlYXJlZCBkdXJpbmcgQ1BVX09OTElORSwgc28gaWYgdGhlIHdvcmtlciBlbnRlcnMKKyAqIGlkbGUgc3RhdGUgb3IgZmV0Y2hlcyB3b3JrcyB3aXRob3V0IGRyb3BwaW5nIGxvY2ssIGl0IGNhbiBndWFyYW50ZWUKKyAqIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50IGRlc2NyaWJlZCBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoLgorICoKKyAqIENPTlRFWFQ6CisgKiBNaWdodCBzbGVlcC4gIENhbGxlZCB3aXRob3V0IGFueSBsb2NrIGJ1dCByZXR1cm5zIHdpdGggZ2N3cS0+bG9jaworICogaGVsZC4KKyAqCisgKiBSRVRVUk5TOgorICogJXRydWUgaWYgdGhlIGFzc29jaWF0ZWQgZ2N3cSBpcyBvbmxpbmUgKEB3b3JrZXIgaXMgc3VjY2Vzc2Z1bGx5CisgKiBib3VuZCksICVmYWxzZSBpZiBvZmZsaW5lLgorICovCitzdGF0aWMgYm9vbCB3b3JrZXJfbWF5YmVfYmluZF9hbmRfbG9jayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpCit7CisJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSB3b3JrZXItPmdjd3E7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gd29ya2VyLT50YXNrOwogCi0JCXRyeV90b19mcmVlemUoKTsKKwl3aGlsZSAodHJ1ZSkgeworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIGNhbGwgbWF5IGZhaWwsIHN1Y2NlZWQgb3Igc3VjY2VlZAorCQkgKiB3aXRob3V0IGFjdHVhbGx5IG1pZ3JhdGluZyB0aGUgdGFzayB0byB0aGUgY3B1IGlmCisJCSAqIGl0IHJhY2VzIHdpdGggY3B1IGhvdHVucGx1ZyBvcGVyYXRpb24uICBWZXJpZnkKKwkJICogYWdhaW5zdCBHQ1dRX0RJU0FTU09DSUFURUQuCisJCSAqLworCQlpZiAoIShnY3dxLT5mbGFncyAmIEdDV1FfRElTQVNTT0NJQVRFRCkpCisJCQlzZXRfY3B1c19hbGxvd2VkX3B0cih0YXNrLCBnZXRfY3B1X21hc2soZ2N3cS0+Y3B1KSk7CiAKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOworCQlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwkJaWYgKGdjd3EtPmZsYWdzICYgR0NXUV9ESVNBU1NPQ0lBVEVEKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAodGFza19jcHUodGFzaykgPT0gZ2N3cS0+Y3B1ICYmCisJCSAgICBjcHVtYXNrX2VxdWFsKCZjdXJyZW50LT5jcHVzX2FsbG93ZWQsCisJCQkJICBnZXRfY3B1X21hc2soZ2N3cS0+Y3B1KSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKIAotCQlydW5fd29ya3F1ZXVlKGN3cSk7CisJCS8qIENQVSBoYXMgY29tZSB1cCBpbmJldHdlZW4sIHJldHJ5IG1pZ3JhdGlvbiAqLworCQljcHVfcmVsYXgoKTsKKwl9Cit9CisKKy8qCisgKiBGdW5jdGlvbiBmb3Igd29ya2VyLT5yZWJpbmRfd29yayB1c2VkIHRvIHJlYmluZCByb2d1ZSBidXN5IHdvcmtlcnMKKyAqIHRvIHRoZSBhc3NvY2lhdGVkIGNwdSB3aGljaCBpcyBjb21pbmcgYmFjayBvbmxpbmUuICBUaGlzIGlzCisgKiBzY2hlZHVsZWQgYnkgY3B1IHVwIGJ1dCBjYW4gcmFjZSB3aXRoIG90aGVyIGNwdSBob3RwbHVnIG9wZXJhdGlvbnMKKyAqIGFuZCBtYXkgYmUgZXhlY3V0ZWQgdHdpY2Ugd2l0aG91dCBpbnRlcnZlbmluZyBjcHUgZG93bi4KKyAqLworc3RhdGljIHZvaWQgd29ya2VyX3JlYmluZF9mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdvcmtlciAqd29ya2VyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3b3JrZXIsIHJlYmluZF93b3JrKTsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IHdvcmtlci0+Z2N3cTsKKworCWlmICh3b3JrZXJfbWF5YmVfYmluZF9hbmRfbG9jayh3b3JrZXIpKQorCQl3b3JrZXJfY2xyX2ZsYWdzKHdvcmtlciwgV09SS0VSX1JFQklORCk7CisKKwlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IHdvcmtlciAqYWxsb2Nfd29ya2VyKHZvaWQpCit7CisJc3RydWN0IHdvcmtlciAqd29ya2VyOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJndvcmtlci0+ZW50cnkpOworCQlJTklUX0xJU1RfSEVBRCgmd29ya2VyLT5zY2hlZHVsZWQpOworCQlJTklUX1dPUksoJndvcmtlci0+cmViaW5kX3dvcmssIHdvcmtlcl9yZWJpbmRfZm4pOworCQkvKiBvbiBjcmVhdGlvbiBhIHdvcmtlciBpcyBpbiAhaWRsZSAmJiBwcmVwIHN0YXRlICovCisJCXdvcmtlci0+ZmxhZ3MgPSBXT1JLRVJfUFJFUDsKKwl9CisJcmV0dXJuIHdvcmtlcjsKK30KKworLyoqCisgKiBjcmVhdGVfd29ya2VyIC0gY3JlYXRlIGEgbmV3IHdvcmtxdWV1ZSB3b3JrZXIKKyAqIEBnY3dxOiBnY3dxIHRoZSBuZXcgd29ya2VyIHdpbGwgYmVsb25nIHRvCisgKiBAYmluZDogd2hldGhlciB0byBzZXQgYWZmaW5pdHkgdG8gQGNwdSBvciBub3QKKyAqCisgKiBDcmVhdGUgYSBuZXcgd29ya2VyIHdoaWNoIGlzIGJvdW5kIHRvIEBnY3dxLiAgVGhlIHJldHVybmVkIHdvcmtlcgorICogY2FuIGJlIHN0YXJ0ZWQgYnkgY2FsbGluZyBzdGFydF93b3JrZXIoKSBvciBkZXN0cm95ZWQgdXNpbmcKKyAqIGRlc3Ryb3lfd29ya2VyKCkuCisgKgorICogQ09OVEVYVDoKKyAqIE1pZ2h0IHNsZWVwLiAgRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb25zLgorICoKKyAqIFJFVFVSTlM6CisgKiBQb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIHdvcmtlci4KKyAqLworc3RhdGljIHN0cnVjdCB3b3JrZXIgKmNyZWF0ZV93b3JrZXIoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EsIGJvb2wgYmluZCkKK3sKKwlib29sIG9uX3VuYm91bmRfY3B1ID0gZ2N3cS0+Y3B1ID09IFdPUktfQ1BVX1VOQk9VTkQ7CisJc3RydWN0IHdvcmtlciAqd29ya2VyID0gTlVMTDsKKwlpbnQgaWQgPSAtMTsKKworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCXdoaWxlIChpZGFfZ2V0X25ldygmZ2N3cS0+d29ya2VyX2lkYSwgJmlkKSkgeworCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworCQlpZiAoIWlkYV9wcmVfZ2V0KCZnY3dxLT53b3JrZXJfaWRhLCBHRlBfS0VSTkVMKSkKKwkJCWdvdG8gZmFpbDsKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwl3b3JrZXIgPSBhbGxvY193b3JrZXIoKTsKKwlpZiAoIXdvcmtlcikKKwkJZ290byBmYWlsOworCisJd29ya2VyLT5nY3dxID0gZ2N3cTsKKwl3b3JrZXItPmlkID0gaWQ7CisKKwlpZiAoIW9uX3VuYm91bmRfY3B1KQorCQl3b3JrZXItPnRhc2sgPSBrdGhyZWFkX2NyZWF0ZSh3b3JrZXJfdGhyZWFkLCB3b3JrZXIsCisJCQkJCSAgICAgICJrd29ya2VyLyV1OiVkIiwgZ2N3cS0+Y3B1LCBpZCk7CisJZWxzZQorCQl3b3JrZXItPnRhc2sgPSBrdGhyZWFkX2NyZWF0ZSh3b3JrZXJfdGhyZWFkLCB3b3JrZXIsCisJCQkJCSAgICAgICJrd29ya2VyL3U6JWQiLCBpZCk7CisJaWYgKElTX0VSUih3b3JrZXItPnRhc2spKQorCQlnb3RvIGZhaWw7CisKKwkvKgorCSAqIEEgcm9ndWUgd29ya2VyIHdpbGwgYmVjb21lIGEgcmVndWxhciBvbmUgaWYgQ1BVIGNvbWVzCisJICogb25saW5lIGxhdGVyIG9uLiAgTWFrZSBzdXJlIGV2ZXJ5IHdvcmtlciBoYXMKKwkgKiBQRl9USFJFQURfQk9VTkQgc2V0LgorCSAqLworCWlmIChiaW5kICYmICFvbl91bmJvdW5kX2NwdSkKKwkJa3RocmVhZF9iaW5kKHdvcmtlci0+dGFzaywgZ2N3cS0+Y3B1KTsKKwllbHNlIHsKKwkJd29ya2VyLT50YXNrLT5mbGFncyB8PSBQRl9USFJFQURfQk9VTkQ7CisJCWlmIChvbl91bmJvdW5kX2NwdSkKKwkJCXdvcmtlci0+ZmxhZ3MgfD0gV09SS0VSX1VOQk9VTkQ7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHdvcmtlcjsKK2ZhaWw6CisJaWYgKGlkID49IDApIHsKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJCWlkYV9yZW1vdmUoJmdjd3EtPndvcmtlcl9pZGEsIGlkKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwl9CisJa2ZyZWUod29ya2VyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBzdGFydF93b3JrZXIgLSBzdGFydCBhIG5ld2x5IGNyZWF0ZWQgd29ya2VyCisgKiBAd29ya2VyOiB3b3JrZXIgdG8gc3RhcnQKKyAqCisgKiBNYWtlIHRoZSBnY3dxIGF3YXJlIG9mIEB3b3JrZXIgYW5kIHN0YXJ0IGl0LgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spLgorICovCitzdGF0aWMgdm9pZCBzdGFydF93b3JrZXIoc3RydWN0IHdvcmtlciAqd29ya2VyKQoreworCXdvcmtlci0+ZmxhZ3MgfD0gV09SS0VSX1NUQVJURUQ7CisJd29ya2VyLT5nY3dxLT5ucl93b3JrZXJzKys7CisJd29ya2VyX2VudGVyX2lkbGUod29ya2VyKTsKKwl3YWtlX3VwX3Byb2Nlc3Mod29ya2VyLT50YXNrKTsKK30KKworLyoqCisgKiBkZXN0cm95X3dvcmtlciAtIGRlc3Ryb3kgYSB3b3JrcXVldWUgd29ya2VyCisgKiBAd29ya2VyOiB3b3JrZXIgdG8gYmUgZGVzdHJveWVkCisgKgorICogRGVzdHJveSBAd29ya2VyIGFuZCBhZGp1c3QgQGdjd3Egc3RhdHMgYWNjb3JkaW5nbHkuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykgd2hpY2ggaXMgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZC4KKyAqLworc3RhdGljIHZvaWQgZGVzdHJveV93b3JrZXIoc3RydWN0IHdvcmtlciAqd29ya2VyKQoreworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gd29ya2VyLT5nY3dxOworCWludCBpZCA9IHdvcmtlci0+aWQ7CisKKwkvKiBzYW5pdHkgY2hlY2sgZnJlbnp5ICovCisJQlVHX09OKHdvcmtlci0+Y3VycmVudF93b3JrKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmtlci0+c2NoZWR1bGVkKSk7CisKKwlpZiAod29ya2VyLT5mbGFncyAmIFdPUktFUl9TVEFSVEVEKQorCQlnY3dxLT5ucl93b3JrZXJzLS07CisJaWYgKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfSURMRSkKKwkJZ2N3cS0+bnJfaWRsZS0tOworCisJbGlzdF9kZWxfaW5pdCgmd29ya2VyLT5lbnRyeSk7CisJd29ya2VyLT5mbGFncyB8PSBXT1JLRVJfRElFOworCisJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKworCWt0aHJlYWRfc3RvcCh3b3JrZXItPnRhc2spOworCWtmcmVlKHdvcmtlcik7CisKKwlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwlpZGFfcmVtb3ZlKCZnY3dxLT53b3JrZXJfaWRhLCBpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkbGVfd29ya2VyX3RpbWVvdXQodW5zaWduZWQgbG9uZyBfX2djd3EpCit7CisJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSAodm9pZCAqKV9fZ2N3cTsKKworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCisJaWYgKHRvb19tYW55X3dvcmtlcnMoZ2N3cSkpIHsKKwkJc3RydWN0IHdvcmtlciAqd29ya2VyOworCQl1bnNpZ25lZCBsb25nIGV4cGlyZXM7CisKKwkJLyogaWRsZV9saXN0IGlzIGtlcHQgaW4gTElGTyBvcmRlciwgY2hlY2sgdGhlIGxhc3Qgb25lICovCisJCXdvcmtlciA9IGxpc3RfZW50cnkoZ2N3cS0+aWRsZV9saXN0LnByZXYsIHN0cnVjdCB3b3JrZXIsIGVudHJ5KTsKKwkJZXhwaXJlcyA9IHdvcmtlci0+bGFzdF9hY3RpdmUgKyBJRExFX1dPUktFUl9USU1FT1VUOworCisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmVzKSkKKwkJCW1vZF90aW1lcigmZ2N3cS0+aWRsZV90aW1lciwgZXhwaXJlcyk7CisJCWVsc2UgeworCQkJLyogaXQncyBiZWVuIGlkbGUgZm9yIHRvbyBsb25nLCB3YWtlIHVwIG1hbmFnZXIgKi8KKwkJCWdjd3EtPmZsYWdzIHw9IEdDV1FfTUFOQUdFX1dPUktFUlM7CisJCQl3YWtlX3VwX3dvcmtlcihnY3dxKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7Cit9CisKK3N0YXRpYyBib29sIHNlbmRfbWF5ZGF5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF93b3JrX2N3cSh3b3JrKTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EgPSBjd3EtPndxOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlpZiAoISh3cS0+ZmxhZ3MgJiBXUV9SRVNDVUVSKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogbWF5ZGF5IG1heWRheSBtYXlkYXkgKi8KKwljcHUgPSBjd3EtPmdjd3EtPmNwdTsKKwkvKiBXT1JLX0NQVV9VTkJPVU5EIGNhbid0IGJlIHNldCBpbiBjcHVtYXNrLCB1c2UgY3B1IDAgaW5zdGVhZCAqLworCWlmIChjcHUgPT0gV09SS19DUFVfVU5CT1VORCkKKwkJY3B1ID0gMDsKKwlpZiAoIW1heWRheV90ZXN0X2FuZF9zZXRfY3B1KGNwdSwgd3EtPm1heWRheV9tYXNrKSkKKwkJd2FrZV91cF9wcm9jZXNzKHdxLT5yZXNjdWVyLT50YXNrKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZ2N3cV9tYXlkYXlfdGltZW91dCh1bnNpZ25lZCBsb25nIF9fZ2N3cSkKK3sKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9ICh2b2lkICopX19nY3dxOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCisJaWYgKG5lZWRfdG9fY3JlYXRlX3dvcmtlcihnY3dxKSkgeworCQkvKgorCQkgKiBXZSd2ZSBiZWVuIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgd29ya2VyIGJ1dAorCQkgKiBoYXZlbid0IGJlZW4gc3VjY2Vzc2Z1bC4gIFdlIG1pZ2h0IGJlIGhpdHRpbmcgYW4KKwkJICogYWxsb2NhdGlvbiBkZWFkbG9jay4gIFNlbmQgZGlzdHJlc3Mgc2lnbmFscyB0bworCQkgKiByZXNjdWVycy4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkod29yaywgJmdjd3EtPndvcmtsaXN0LCBlbnRyeSkKKwkJCXNlbmRfbWF5ZGF5KHdvcmspOworCX0KKworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwltb2RfdGltZXIoJmdjd3EtPm1heWRheV90aW1lciwgamlmZmllcyArIE1BWURBWV9JTlRFUlZBTCk7Cit9CisKKy8qKgorICogbWF5YmVfY3JlYXRlX3dvcmtlciAtIGNyZWF0ZSBhIG5ldyB3b3JrZXIgaWYgbmVjZXNzYXJ5CisgKiBAZ2N3cTogZ2N3cSB0byBjcmVhdGUgYSBuZXcgd29ya2VyIGZvcgorICoKKyAqIENyZWF0ZSBhIG5ldyB3b3JrZXIgZm9yIEBnY3dxIGlmIG5lY2Vzc2FyeS4gIEBnY3dxIGlzIGd1YXJhbnRlZWQgdG8KKyAqIGhhdmUgYXQgbGVhc3Qgb25lIGlkbGUgd29ya2VyIG9uIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uICBJZgorICogY3JlYXRpbmcgYSBuZXcgd29ya2VyIHRha2VzIGxvbmdlciB0aGFuIE1BWURBWV9JTlRFUlZBTCwgbWF5ZGF5IGlzCisgKiBzZW50IHRvIGFsbCByZXNjdWVycyB3aXRoIHdvcmtzIHNjaGVkdWxlZCBvbiBAZ2N3cSB0byByZXNvbHZlCisgKiBwb3NzaWJsZSBhbGxvY2F0aW9uIGRlYWRsb2NrLgorICoKKyAqIE9uIHJldHVybiwgbmVlZF90b19jcmVhdGVfd29ya2VyKCkgaXMgZ3VhcmFudGVlZCB0byBiZSBmYWxzZSBhbmQKKyAqIG1heV9zdGFydF93b3JraW5nKCkgdHJ1ZS4KKyAqCisgKiBMT0NLSU5HOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKSB3aGljaCBtYXkgYmUgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZAorICogbXVsdGlwbGUgdGltZXMuICBEb2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbnMuICBDYWxsZWQgb25seSBmcm9tCisgKiBtYW5hZ2VyLgorICoKKyAqIFJFVFVSTlM6CisgKiBmYWxzZSBpZiBubyBhY3Rpb24gd2FzIHRha2VuIGFuZCBnY3dxLT5sb2NrIHN0YXllZCBsb2NrZWQsIHRydWUKKyAqIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgbWF5YmVfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSkKK3sKKwlpZiAoIW5lZWRfdG9fY3JlYXRlX3dvcmtlcihnY3dxKSkKKwkJcmV0dXJuIGZhbHNlOworcmVzdGFydDoKKwlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworCisJLyogaWYgd2UgZG9uJ3QgbWFrZSBwcm9ncmVzcyBpbiBNQVlEQVlfSU5JVElBTF9USU1FT1VULCBjYWxsIGZvciBoZWxwICovCisJbW9kX3RpbWVyKCZnY3dxLT5tYXlkYXlfdGltZXIsIGppZmZpZXMgKyBNQVlEQVlfSU5JVElBTF9USU1FT1VUKTsKKworCXdoaWxlICh0cnVlKSB7CisJCXN0cnVjdCB3b3JrZXIgKndvcmtlcjsKKworCQl3b3JrZXIgPSBjcmVhdGVfd29ya2VyKGdjd3EsIHRydWUpOworCQlpZiAod29ya2VyKSB7CisJCQlkZWxfdGltZXJfc3luYygmZ2N3cS0+bWF5ZGF5X3RpbWVyKTsKKwkJCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCQkJc3RhcnRfd29ya2VyKHdvcmtlcik7CisJCQlCVUdfT04obmVlZF90b19jcmVhdGVfd29ya2VyKGdjd3EpKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJaWYgKCFuZWVkX3RvX2NyZWF0ZV93b3JrZXIoZ2N3cSkpCisJCQlicmVhazsKKworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoQ1JFQVRFX0NPT0xET1dOKTsKKworCQlpZiAoIW5lZWRfdG9fY3JlYXRlX3dvcmtlcihnY3dxKSkKKwkJCWJyZWFrOworCX0KKworCWRlbF90aW1lcl9zeW5jKCZnY3dxLT5tYXlkYXlfdGltZXIpOworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCWlmIChuZWVkX3RvX2NyZWF0ZV93b3JrZXIoZ2N3cSkpCisJCWdvdG8gcmVzdGFydDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBtYXliZV9kZXN0cm95X3dvcmtlciAtIGRlc3Ryb3kgd29ya2VycyB3aGljaCBoYXZlIGJlZW4gaWRsZSBmb3IgYSB3aGlsZQorICogQGdjd3E6IGdjd3EgdG8gZGVzdHJveSB3b3JrZXJzIGZvcgorICoKKyAqIERlc3Ryb3kgQGdjd3Egd29ya2VycyB3aGljaCBoYXZlIGJlZW4gaWRsZSBmb3IgbG9uZ2VyIHRoYW4KKyAqIElETEVfV09SS0VSX1RJTUVPVVQuCisgKgorICogTE9DS0lORzoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykgd2hpY2ggbWF5IGJlIHJlbGVhc2VkIGFuZCByZWdyYWJiZWQKKyAqIG11bHRpcGxlIHRpbWVzLiAgQ2FsbGVkIG9ubHkgZnJvbSBtYW5hZ2VyLgorICoKKyAqIFJFVFVSTlM6CisgKiBmYWxzZSBpZiBubyBhY3Rpb24gd2FzIHRha2VuIGFuZCBnY3dxLT5sb2NrIHN0YXllZCBsb2NrZWQsIHRydWUKKyAqIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgbWF5YmVfZGVzdHJveV93b3JrZXJzKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwl3aGlsZSAodG9vX21hbnlfd29ya2VycyhnY3dxKSkgeworCQlzdHJ1Y3Qgd29ya2VyICp3b3JrZXI7CisJCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKworCQl3b3JrZXIgPSBsaXN0X2VudHJ5KGdjd3EtPmlkbGVfbGlzdC5wcmV2LCBzdHJ1Y3Qgd29ya2VyLCBlbnRyeSk7CisJCWV4cGlyZXMgPSB3b3JrZXItPmxhc3RfYWN0aXZlICsgSURMRV9XT1JLRVJfVElNRU9VVDsKKworCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgZXhwaXJlcykpIHsKKwkJCW1vZF90aW1lcigmZ2N3cS0+aWRsZV90aW1lciwgZXhwaXJlcyk7CisJCQlicmVhazsKKwkJfQorCisJCWRlc3Ryb3lfd29ya2VyKHdvcmtlcik7CisJCXJldCA9IHRydWU7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBtYW5hZ2Vfd29ya2VycyAtIG1hbmFnZSB3b3JrZXIgcG9vbAorICogQHdvcmtlcjogc2VsZgorICoKKyAqIEFzc3VtZSB0aGUgbWFuYWdlciByb2xlIGFuZCBtYW5hZ2UgZ2N3cSB3b3JrZXIgcG9vbCBAd29ya2VyIGJlbG9uZ3MKKyAqIHRvLiAgQXQgYW55IGdpdmVuIHRpbWUsIHRoZXJlIGNhbiBiZSBvbmx5IHplcm8gb3Igb25lIG1hbmFnZXIgcGVyCisgKiBnY3dxLiAgVGhlIGV4Y2x1c2lvbiBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBUaGUgY2FsbGVyIGNhbiBzYWZlbHkgc3RhcnQgcHJvY2Vzc2luZyB3b3JrcyBvbiBmYWxzZSByZXR1cm4uICBPbgorICogdHJ1ZSByZXR1cm4sIGl0J3MgZ3VhcmFudGVlZCB0aGF0IG5lZWRfdG9fY3JlYXRlX3dvcmtlcigpIGlzIGZhbHNlCisgKiBhbmQgbWF5X3N0YXJ0X3dvcmtpbmcoKSBpcyB0cnVlLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spIHdoaWNoIG1heSBiZSByZWxlYXNlZCBhbmQgcmVncmFiYmVkCisgKiBtdWx0aXBsZSB0aW1lcy4gIERvZXMgR0ZQX0tFUk5FTCBhbGxvY2F0aW9ucy4KKyAqCisgKiBSRVRVUk5TOgorICogZmFsc2UgaWYgbm8gYWN0aW9uIHdhcyB0YWtlbiBhbmQgZ2N3cS0+bG9jayBzdGF5ZWQgbG9ja2VkLCB0cnVlIGlmCisgKiBzb21lIGFjdGlvbiB3YXMgdGFrZW4uCisgKi8KK3N0YXRpYyBib29sIG1hbmFnZV93b3JrZXJzKHN0cnVjdCB3b3JrZXIgKndvcmtlcikKK3sKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IHdvcmtlci0+Z2N3cTsKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGdjd3EtPmZsYWdzICYgR0NXUV9NQU5BR0lOR19XT1JLRVJTKQorCQlyZXR1cm4gcmV0OworCisJZ2N3cS0+ZmxhZ3MgJj0gfkdDV1FfTUFOQUdFX1dPUktFUlM7CisJZ2N3cS0+ZmxhZ3MgfD0gR0NXUV9NQU5BR0lOR19XT1JLRVJTOworCisJLyoKKwkgKiBEZXN0cm95IGFuZCB0aGVuIGNyZWF0ZSBzbyB0aGF0IG1heV9zdGFydF93b3JraW5nKCkgaXMgdHJ1ZQorCSAqIG9uIHJldHVybi4KKwkgKi8KKwlyZXQgfD0gbWF5YmVfZGVzdHJveV93b3JrZXJzKGdjd3EpOworCXJldCB8PSBtYXliZV9jcmVhdGVfd29ya2VyKGdjd3EpOworCisJZ2N3cS0+ZmxhZ3MgJj0gfkdDV1FfTUFOQUdJTkdfV09SS0VSUzsKKworCS8qCisJICogVGhlIHRydXN0ZWUgbWlnaHQgYmUgd2FpdGluZyB0byB0YWtlIG92ZXIgdGhlIG1hbmFnZXIKKwkgKiBwb3NpdGlvbiwgdGVsbCBpdCB3ZSdyZSBkb25lLgorCSAqLworCWlmICh1bmxpa2VseShnY3dxLT50cnVzdGVlKSkKKwkJd2FrZV91cF9hbGwoJmdjd3EtPnRydXN0ZWVfd2FpdCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG1vdmVfbGlua2VkX3dvcmtzIC0gbW92ZSBsaW5rZWQgd29ya3MgdG8gYSBsaXN0CisgKiBAd29yazogc3RhcnQgb2Ygc2VyaWVzIG9mIHdvcmtzIHRvIGJlIHNjaGVkdWxlZAorICogQGhlYWQ6IHRhcmdldCBsaXN0IHRvIGFwcGVuZCBAd29yayB0bworICogQG5leHRwOiBvdXQgcGFyYW10ZXIgZm9yIG5lc3RlZCB3b3JrbGlzdCB3YWxraW5nCisgKgorICogU2NoZWR1bGUgbGlua2VkIHdvcmtzIHN0YXJ0aW5nIGZyb20gQHdvcmsgdG8gQGhlYWQuICBXb3JrIHNlcmllcyB0bworICogYmUgc2NoZWR1bGVkIHN0YXJ0cyBhdCBAd29yayBhbmQgaW5jbHVkZXMgYW55IGNvbnNlY3V0aXZlIHdvcmsgd2l0aAorICogV09SS19TVFJVQ1RfTElOS0VEIHNldCBpbiBpdHMgcHJlZGVjZXNzb3IuCisgKgorICogSWYgQG5leHRwIGlzIG5vdCBOVUxMLCBpdCdzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIG5leHQgd29yayBvZgorICogdGhlIGxhc3Qgc2NoZWR1bGVkIHdvcmsuICBUaGlzIGFsbG93cyBtb3ZlX2xpbmtlZF93b3JrcygpIHRvIGJlCisgKiBuZXN0ZWQgaW5zaWRlIG91dGVyIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSgpLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spLgorICovCitzdGF0aWMgdm9pZCBtb3ZlX2xpbmtlZF93b3JrcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKipuZXh0cCkKK3sKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKm47CisKKwkvKgorCSAqIExpbmtlZCB3b3JrbGlzdCB3aWxsIGFsd2F5cyBlbmQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxpc3QsCisJICogdXNlIE5VTEwgZm9yIGxpc3QgaGVhZC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbSh3b3JrLCBuLCBOVUxMLCBlbnRyeSkgeworCQlsaXN0X21vdmVfdGFpbCgmd29yay0+ZW50cnksIGhlYWQpOworCQlpZiAoISgqd29ya19kYXRhX2JpdHMod29yaykgJiBXT1JLX1NUUlVDVF9MSU5LRUQpKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSBhbHJlYWR5IGluc2lkZSBzYWZlIGxpc3QgdHJhdmVyc2FsIGFuZCBoYXZlIG1vdmVkCisJICogbXVsdGlwbGUgd29ya3MgdG8gdGhlIHNjaGVkdWxlZCBxdWV1ZSwgdGhlIG5leHQgcG9zaXRpb24KKwkgKiBuZWVkcyB0byBiZSB1cGRhdGVkLgorCSAqLworCWlmIChuZXh0cCkKKwkJKm5leHRwID0gbjsKK30KKworc3RhdGljIHZvaWQgY3dxX2FjdGl2YXRlX2ZpcnN0X2RlbGF5ZWQoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EpCit7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gbGlzdF9maXJzdF9lbnRyeSgmY3dxLT5kZWxheWVkX3dvcmtzLAorCQkJCQkJICAgIHN0cnVjdCB3b3JrX3N0cnVjdCwgZW50cnkpOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IGdjd3FfZGV0ZXJtaW5lX2luc19wb3MoY3dxLT5nY3dxLCBjd3EpOworCisJbW92ZV9saW5rZWRfd29ya3Mod29yaywgcG9zLCBOVUxMKTsKKwljd3EtPm5yX2FjdGl2ZSsrOworfQorCisvKioKKyAqIGN3cV9kZWNfbnJfaW5fZmxpZ2h0IC0gZGVjcmVtZW50IGN3cSdzIG5yX2luX2ZsaWdodAorICogQGN3cTogY3dxIG9mIGludGVyZXN0CisgKiBAY29sb3I6IGNvbG9yIG9mIHdvcmsgd2hpY2ggbGVmdCB0aGUgcXVldWUKKyAqCisgKiBBIHdvcmsgZWl0aGVyIGhhcyBjb21wbGV0ZWQgb3IgaXMgcmVtb3ZlZCBmcm9tIHBlbmRpbmcgcXVldWUsCisgKiBkZWNyZW1lbnQgbnJfaW5fZmxpZ2h0IG9mIGl0cyBjd3EgYW5kIGhhbmRsZSB3b3JrcXVldWUgZmx1c2hpbmcuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykuCisgKi8KK3N0YXRpYyB2b2lkIGN3cV9kZWNfbnJfaW5fZmxpZ2h0KHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLCBpbnQgY29sb3IpCit7CisJLyogaWdub3JlIHVuY29sb3JlZCB3b3JrcyAqLworCWlmIChjb2xvciA9PSBXT1JLX05PX0NPTE9SKQorCQlyZXR1cm47CisKKwljd3EtPm5yX2luX2ZsaWdodFtjb2xvcl0tLTsKKwljd3EtPm5yX2FjdGl2ZS0tOworCisJaWYgKCFsaXN0X2VtcHR5KCZjd3EtPmRlbGF5ZWRfd29ya3MpKSB7CisJCS8qIG9uZSBkb3duLCBzdWJtaXQgYSBkZWxheWVkIG9uZSAqLworCQlpZiAoY3dxLT5ucl9hY3RpdmUgPCBjd3EtPm1heF9hY3RpdmUpCisJCQljd3FfYWN0aXZhdGVfZmlyc3RfZGVsYXllZChjd3EpOworCX0KKworCS8qIGlzIGZsdXNoIGluIHByb2dyZXNzIGFuZCBhcmUgd2UgYXQgdGhlIGZsdXNoaW5nIHRpcD8gKi8KKwlpZiAobGlrZWx5KGN3cS0+Zmx1c2hfY29sb3IgIT0gY29sb3IpKQorCQlyZXR1cm47CisKKwkvKiBhcmUgdGhlcmUgc3RpbGwgaW4tZmxpZ2h0IHdvcmtzPyAqLworCWlmIChjd3EtPm5yX2luX2ZsaWdodFtjb2xvcl0pCisJCXJldHVybjsKKworCS8qIHRoaXMgY3dxIGlzIGRvbmUsIGNsZWFyIGZsdXNoX2NvbG9yICovCisJY3dxLT5mbHVzaF9jb2xvciA9IC0xOworCisJLyoKKwkgKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBjd3EsIHdha2UgdXAgdGhlIGZpcnN0IGZsdXNoZXIuICBJdAorCSAqIHdpbGwgaGFuZGxlIHRoZSByZXN0LgorCSAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjd3EtPndxLT5ucl9jd3FzX3RvX2ZsdXNoKSkKKwkJY29tcGxldGUoJmN3cS0+d3EtPmZpcnN0X2ZsdXNoZXItPmRvbmUpOworfQorCisvKioKKyAqIHByb2Nlc3Nfb25lX3dvcmsgLSBwcm9jZXNzIHNpbmdsZSB3b3JrCisgKiBAd29ya2VyOiBzZWxmCisgKiBAd29yazogd29yayB0byBwcm9jZXNzCisgKgorICogUHJvY2VzcyBAd29yay4gIFRoaXMgZnVuY3Rpb24gY29udGFpbnMgYWxsIHRoZSBsb2dpY3MgbmVjZXNzYXJ5IHRvCisgKiBwcm9jZXNzIGEgc2luZ2xlIHdvcmsgaW5jbHVkaW5nIHN5bmNocm9uaXphdGlvbiBhZ2FpbnN0IGFuZAorICogaW50ZXJhY3Rpb24gd2l0aCBvdGhlciB3b3JrZXJzIG9uIHRoZSBzYW1lIGNwdSwgcXVldWVpbmcgYW5kCisgKiBmbHVzaGluZy4gIEFzIGxvbmcgYXMgY29udGV4dCByZXF1aXJlbWVudCBpcyBtZXQsIGFueSB3b3JrZXIgY2FuCisgKiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcHJvY2VzcyBhIHdvcmsuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykgd2hpY2ggaXMgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZC4KKyAqLworc3RhdGljIHZvaWQgcHJvY2Vzc19vbmVfd29yayhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF93b3JrX2N3cSh3b3JrKTsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGN3cS0+Z2N3cTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYndoID0gYnVzeV93b3JrZXJfaGVhZChnY3dxLCB3b3JrKTsKKwlib29sIGNwdV9pbnRlbnNpdmUgPSBjd3EtPndxLT5mbGFncyAmIFdRX0NQVV9JTlRFTlNJVkU7CisJd29ya19mdW5jX3QgZiA9IHdvcmstPmZ1bmM7CisJaW50IHdvcmtfY29sb3I7CisJc3RydWN0IHdvcmtlciAqY29sbGlzaW9uOworI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBJdCBpcyBwZXJtaXNzaWJsZSB0byBmcmVlIHRoZSBzdHJ1Y3Qgd29ya19zdHJ1Y3QgZnJvbQorCSAqIGluc2lkZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZnJvbSBpdCwgdGhpcyB3ZSBuZWVkIHRvCisJICogdGFrZSBpbnRvIGFjY291bnQgZm9yIGxvY2tkZXAgdG9vLiAgVG8gYXZvaWQgYm9ndXMgImhlbGQKKwkgKiBsb2NrIGZyZWVkIiB3YXJuaW5ncyBhcyB3ZWxsIGFzIHByb2JsZW1zIHdoZW4gbG9va2luZyBpbnRvCisJICogd29yay0+bG9ja2RlcF9tYXAsIG1ha2UgYSBjb3B5IGFuZCB1c2UgdGhhdCBoZXJlLgorCSAqLworCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcCA9IHdvcmstPmxvY2tkZXBfbWFwOworI2VuZGlmCisJLyoKKwkgKiBBIHNpbmdsZSB3b3JrIHNob3VsZG4ndCBiZSBleGVjdXRlZCBjb25jdXJyZW50bHkgYnkKKwkgKiBtdWx0aXBsZSB3b3JrZXJzIG9uIGEgc2luZ2xlIGNwdS4gIENoZWNrIHdoZXRoZXIgYW55b25lIGlzCisJICogYWxyZWFkeSBwcm9jZXNzaW5nIHRoZSB3b3JrLiAgSWYgc28sIGRlZmVyIHRoZSB3b3JrIHRvIHRoZQorCSAqIGN1cnJlbnRseSBleGVjdXRpbmcgb25lLgorCSAqLworCWNvbGxpc2lvbiA9IF9fZmluZF93b3JrZXJfZXhlY3V0aW5nX3dvcmsoZ2N3cSwgYndoLCB3b3JrKTsKKwlpZiAodW5saWtlbHkoY29sbGlzaW9uKSkgeworCQltb3ZlX2xpbmtlZF93b3Jrcyh3b3JrLCAmY29sbGlzaW9uLT5zY2hlZHVsZWQsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyogY2xhaW0gYW5kIHByb2Nlc3MgKi8KKwlkZWJ1Z193b3JrX2RlYWN0aXZhdGUod29yayk7CisJaGxpc3RfYWRkX2hlYWQoJndvcmtlci0+aGVudHJ5LCBid2gpOworCXdvcmtlci0+Y3VycmVudF93b3JrID0gd29yazsKKwl3b3JrZXItPmN1cnJlbnRfY3dxID0gY3dxOworCXdvcmtfY29sb3IgPSBnZXRfd29ya19jb2xvcih3b3JrKTsKKworCS8qIHJlY29yZCB0aGUgY3VycmVudCBjcHUgbnVtYmVyIGluIHRoZSB3b3JrIGRhdGEgYW5kIGRlcXVldWUgKi8KKwlzZXRfd29ya19jcHUod29yaywgZ2N3cS0+Y3B1KTsKKwlsaXN0X2RlbF9pbml0KCZ3b3JrLT5lbnRyeSk7CisKKwkvKgorCSAqIElmIEhJR0hQUklfUEVORElORywgY2hlY2sgdGhlIG5leHQgd29yaywgYW5kLCBpZiBISUdIUFJJLAorCSAqIHdha2UgdXAgYW5vdGhlciB3b3JrZXI7IG90aGVyd2lzZSwgY2xlYXIgSElHSFBSSV9QRU5ESU5HLgorCSAqLworCWlmICh1bmxpa2VseShnY3dxLT5mbGFncyAmIEdDV1FfSElHSFBSSV9QRU5ESU5HKSkgeworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKm53b3JrID0gbGlzdF9maXJzdF9lbnRyeSgmZ2N3cS0+d29ya2xpc3QsCisJCQkJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QsIGVudHJ5KTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmdjd3EtPndvcmtsaXN0KSAmJgorCQkgICAgZ2V0X3dvcmtfY3dxKG53b3JrKS0+d3EtPmZsYWdzICYgV1FfSElHSFBSSSkKKwkJCXdha2VfdXBfd29ya2VyKGdjd3EpOworCQllbHNlCisJCQlnY3dxLT5mbGFncyAmPSB+R0NXUV9ISUdIUFJJX1BFTkRJTkc7CisJfQorCisJLyoKKwkgKiBDUFUgaW50ZW5zaXZlIHdvcmtzIGRvbid0IHBhcnRpY2lwYXRlIGluIGNvbmN1cnJlbmN5CisJICogbWFuYWdlbWVudC4gIFRoZXkncmUgdGhlIHNjaGVkdWxlcidzIHJlc3BvbnNpYmlsaXR5LgorCSAqLworCWlmICh1bmxpa2VseShjcHVfaW50ZW5zaXZlKSkKKwkJd29ya2VyX3NldF9mbGFncyh3b3JrZXIsIFdPUktFUl9DUFVfSU5URU5TSVZFLCB0cnVlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwl3b3JrX2NsZWFyX3BlbmRpbmcod29yayk7CisJbG9ja19tYXBfYWNxdWlyZSgmY3dxLT53cS0+bG9ja2RlcF9tYXApOworCWxvY2tfbWFwX2FjcXVpcmUoJmxvY2tkZXBfbWFwKTsKKwlmKHdvcmspOworCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKKwlsb2NrX21hcF9yZWxlYXNlKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7CisKKwlpZiAodW5saWtlbHkoaW5fYXRvbWljKCkgfHwgbG9ja2RlcF9kZXB0aChjdXJyZW50KSA+IDApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQlVHOiB3b3JrcXVldWUgbGVha2VkIGxvY2sgb3IgYXRvbWljOiAiCisJCSAgICAgICAiJXMvMHglMDh4LyVkXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSwgcHJlZW1wdF9jb3VudCgpLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJCXByaW50ayhLRVJOX0VSUiAiICAgIGxhc3QgZnVuY3Rpb246ICIpOworCQlwcmludF9zeW1ib2woIiVzXG4iLCAodW5zaWduZWQgbG9uZylmKTsKKwkJZGVidWdfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOworCQlkdW1wX3N0YWNrKCk7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwkvKiBjbGVhciBjcHUgaW50ZW5zaXZlIHN0YXR1cyAqLworCWlmICh1bmxpa2VseShjcHVfaW50ZW5zaXZlKSkKKwkJd29ya2VyX2Nscl9mbGFncyh3b3JrZXIsIFdPUktFUl9DUFVfSU5URU5TSVZFKTsKKworCS8qIHdlJ3JlIGRvbmUgd2l0aCBpdCwgcmVsZWFzZSAqLworCWhsaXN0X2RlbF9pbml0KCZ3b3JrZXItPmhlbnRyeSk7CisJd29ya2VyLT5jdXJyZW50X3dvcmsgPSBOVUxMOworCXdvcmtlci0+Y3VycmVudF9jd3EgPSBOVUxMOworCWN3cV9kZWNfbnJfaW5fZmxpZ2h0KGN3cSwgd29ya19jb2xvcik7Cit9CisKKy8qKgorICogcHJvY2Vzc19zY2hlZHVsZWRfd29ya3MgLSBwcm9jZXNzIHNjaGVkdWxlZCB3b3JrcworICogQHdvcmtlcjogc2VsZgorICoKKyAqIFByb2Nlc3MgYWxsIHNjaGVkdWxlZCB3b3Jrcy4gIFBsZWFzZSBub3RlIHRoYXQgdGhlIHNjaGVkdWxlZCBsaXN0CisgKiBtYXkgY2hhbmdlIHdoaWxlIHByb2Nlc3NpbmcgYSB3b3JrLCBzbyB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHkKKyAqIGZldGNoZXMgYSB3b3JrIGZyb20gdGhlIHRvcCBhbmQgZXhlY3V0ZXMgaXQuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykgd2hpY2ggbWF5IGJlIHJlbGVhc2VkIGFuZCByZWdyYWJiZWQKKyAqIG11bHRpcGxlIHRpbWVzLgorICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX3NjaGVkdWxlZF93b3JrcyhzdHJ1Y3Qgd29ya2VyICp3b3JrZXIpCit7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ3b3JrZXItPnNjaGVkdWxlZCkpIHsKKwkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gbGlzdF9maXJzdF9lbnRyeSgmd29ya2VyLT5zY2hlZHVsZWQsCisJCQkJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QsIGVudHJ5KTsKKwkJcHJvY2Vzc19vbmVfd29yayh3b3JrZXIsIHdvcmspOworCX0KK30KKworLyoqCisgKiB3b3JrZXJfdGhyZWFkIC0gdGhlIHdvcmtlciB0aHJlYWQgZnVuY3Rpb24KKyAqIEBfX3dvcmtlcjogc2VsZgorICoKKyAqIFRoZSBnY3dxIHdvcmtlciB0aHJlYWQgZnVuY3Rpb24uICBUaGVyZSdzIGEgc2luZ2xlIGR5bmFtaWMgcG9vbCBvZgorICogdGhlc2UgcGVyIGVhY2ggY3B1LiAgVGhlc2Ugd29ya2VycyBwcm9jZXNzIGFsbCB3b3JrcyByZWdhcmRsZXNzIG9mCisgKiB0aGVpciBzcGVjaWZpYyB0YXJnZXQgd29ya3F1ZXVlLiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdvcmtzIHdoaWNoCisgKiBiZWxvbmcgdG8gd29ya3F1ZXVlcyB3aXRoIGEgcmVzY3VlciB3aGljaCB3aWxsIGJlIGV4cGxhaW5lZCBpbgorICogcmVzY3Vlcl90aHJlYWQoKS4KKyAqLworc3RhdGljIGludCB3b3JrZXJfdGhyZWFkKHZvaWQgKl9fd29ya2VyKQoreworCXN0cnVjdCB3b3JrZXIgKndvcmtlciA9IF9fd29ya2VyOworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gd29ya2VyLT5nY3dxOworCisJLyogdGVsbCB0aGUgc2NoZWR1bGVyIHRoYXQgdGhpcyBpcyBhIHdvcmtxdWV1ZSB3b3JrZXIgKi8KKwl3b3JrZXItPnRhc2stPmZsYWdzIHw9IFBGX1dRX1dPUktFUjsKK3dva2VfdXA6CisJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwkvKiBESUUgY2FuIGJlIHNldCBvbmx5IHdoaWxlIHdlJ3JlIGlkbGUsIGNoZWNraW5nIGhlcmUgaXMgZW5vdWdoICovCisJaWYgKHdvcmtlci0+ZmxhZ3MgJiBXT1JLRVJfRElFKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJCXdvcmtlci0+dGFzay0+ZmxhZ3MgJj0gflBGX1dRX1dPUktFUjsKKwkJcmV0dXJuIDA7CisJfQorCisJd29ya2VyX2xlYXZlX2lkbGUod29ya2VyKTsKK3JlY2hlY2s6CisJLyogbm8gbW9yZSB3b3JrZXIgbmVjZXNzYXJ5PyAqLworCWlmICghbmVlZF9tb3JlX3dvcmtlcihnY3dxKSkKKwkJZ290byBzbGVlcDsKKworCS8qIGRvIHdlIG5lZWQgdG8gbWFuYWdlPyAqLworCWlmICh1bmxpa2VseSghbWF5X3N0YXJ0X3dvcmtpbmcoZ2N3cSkpICYmIG1hbmFnZV93b3JrZXJzKHdvcmtlcikpCisJCWdvdG8gcmVjaGVjazsKKworCS8qCisJICogLT5zY2hlZHVsZWQgbGlzdCBjYW4gb25seSBiZSBmaWxsZWQgd2hpbGUgYSB3b3JrZXIgaXMKKwkgKiBwcmVwYXJpbmcgdG8gcHJvY2VzcyBhIHdvcmsgb3IgYWN0dWFsbHkgcHJvY2Vzc2luZyBpdC4KKwkgKiBNYWtlIHN1cmUgbm9ib2R5IGRpZGRsZWQgd2l0aCBpdCB3aGlsZSBJIHdhcyBzbGVlcGluZy4KKwkgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJndvcmtlci0+c2NoZWR1bGVkKSk7CisKKwkvKgorCSAqIFdoZW4gY29udHJvbCByZWFjaGVzIHRoaXMgcG9pbnQsIHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZQorCSAqIGF0IGxlYXN0IG9uZSBpZGxlIHdvcmtlciBvciB0aGF0IHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeQorCSAqIGFzc3VtZWQgdGhlIG1hbmFnZXIgcm9sZS4KKwkgKi8KKwl3b3JrZXJfY2xyX2ZsYWdzKHdvcmtlciwgV09SS0VSX1BSRVApOworCisJZG8geworCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPQorCQkJbGlzdF9maXJzdF9lbnRyeSgmZ2N3cS0+d29ya2xpc3QsCisJCQkJCSBzdHJ1Y3Qgd29ya19zdHJ1Y3QsIGVudHJ5KTsKKworCQlpZiAobGlrZWx5KCEoKndvcmtfZGF0YV9iaXRzKHdvcmspICYgV09SS19TVFJVQ1RfTElOS0VEKSkpIHsKKwkJCS8qIG9wdGltaXphdGlvbiBwYXRoLCBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5ICovCisJCQlwcm9jZXNzX29uZV93b3JrKHdvcmtlciwgd29yayk7CisJCQlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJndvcmtlci0+c2NoZWR1bGVkKSkpCisJCQkJcHJvY2Vzc19zY2hlZHVsZWRfd29ya3Mod29ya2VyKTsKKwkJfSBlbHNlIHsKKwkJCW1vdmVfbGlua2VkX3dvcmtzKHdvcmssICZ3b3JrZXItPnNjaGVkdWxlZCwgTlVMTCk7CisJCQlwcm9jZXNzX3NjaGVkdWxlZF93b3Jrcyh3b3JrZXIpOworCQl9CisJfSB3aGlsZSAoa2VlcF93b3JraW5nKGdjd3EpKTsKKworCXdvcmtlcl9zZXRfZmxhZ3Mod29ya2VyLCBXT1JLRVJfUFJFUCwgZmFsc2UpOworc2xlZXA6CisJaWYgKHVubGlrZWx5KG5lZWRfdG9fbWFuYWdlX3dvcmtlcnMoZ2N3cSkpICYmIG1hbmFnZV93b3JrZXJzKHdvcmtlcikpCisJCWdvdG8gcmVjaGVjazsKKworCS8qCisJICogZ2N3cS0+bG9jayBpcyBoZWxkIGFuZCB0aGVyZSdzIG5vIHdvcmsgdG8gcHJvY2VzcyBhbmQgbm8KKwkgKiBuZWVkIHRvIG1hbmFnZSwgc2xlZXAuICBXb3JrZXJzIGFyZSB3b2tlbiB1cCBvbmx5IHdoaWxlCisJICogaG9sZGluZyBnY3dxLT5sb2NrIG9yIGZyb20gbG9jYWwgY3B1LCBzbyBzZXR0aW5nIHRoZQorCSAqIGN1cnJlbnQgc3RhdGUgYmVmb3JlIHJlbGVhc2luZyBnY3dxLT5sb2NrIGlzIGVub3VnaCB0bworCSAqIHByZXZlbnQgbG9zaW5nIGFueSBldmVudC4KKwkgKi8KKwl3b3JrZXJfZW50ZXJfaWRsZSh3b3JrZXIpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworCXNjaGVkdWxlKCk7CisJZ290byB3b2tlX3VwOworfQorCisvKioKKyAqIHJlc2N1ZXJfdGhyZWFkIC0gdGhlIHJlc2N1ZXIgdGhyZWFkIGZ1bmN0aW9uCisgKiBAX193cTogdGhlIGFzc29jaWF0ZWQgd29ya3F1ZXVlCisgKgorICogV29ya3F1ZXVlIHJlc2N1ZXIgdGhyZWFkIGZ1bmN0aW9uLiAgVGhlcmUncyBvbmUgcmVzY3VlciBmb3IgZWFjaAorICogd29ya3F1ZXVlIHdoaWNoIGhhcyBXUV9SRVNDVUVSIHNldC4KKyAqCisgKiBSZWd1bGFyIHdvcmsgcHJvY2Vzc2luZyBvbiBhIGdjd3EgbWF5IGJsb2NrIHRyeWluZyB0byBjcmVhdGUgYSBuZXcKKyAqIHdvcmtlciB3aGljaCB1c2VzIEdGUF9LRVJORUwgYWxsb2NhdGlvbiB3aGljaCBoYXMgc2xpZ2h0IGNoYW5jZSBvZgorICogZGV2ZWxvcGluZyBpbnRvIGRlYWRsb2NrIGlmIHNvbWUgd29ya3MgY3VycmVudGx5IG9uIHRoZSBzYW1lIHF1ZXVlCisgKiBuZWVkIHRvIGJlIHByb2Nlc3NlZCB0byBzYXRpc2Z5IHRoZSBHRlBfS0VSTkVMIGFsbG9jYXRpb24uICBUaGlzIGlzCisgKiB0aGUgcHJvYmxlbSByZXNjdWVyIHNvbHZlcy4KKyAqCisgKiBXaGVuIHN1Y2ggY29uZGl0aW9uIGlzIHBvc3NpYmxlLCB0aGUgZ2N3cSBzdW1tb25zIHJlc2N1ZXJzIG9mIGFsbAorICogd29ya3F1ZXVlcyB3aGljaCBoYXZlIHdvcmtzIHF1ZXVlZCBvbiB0aGUgZ2N3cSBhbmQgbGV0IHRoZW0gcHJvY2VzcworICogdGhvc2Ugd29ya3Mgc28gdGhhdCBmb3J3YXJkIHByb2dyZXNzIGNhbiBiZSBndWFyYW50ZWVkLgorICoKKyAqIFRoaXMgc2hvdWxkIGhhcHBlbiByYXJlbHkuCisgKi8KK3N0YXRpYyBpbnQgcmVzY3Vlcl90aHJlYWQodm9pZCAqX193cSkKK3sKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EgPSBfX3dxOworCXN0cnVjdCB3b3JrZXIgKnJlc2N1ZXIgPSB3cS0+cmVzY3VlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpzY2hlZHVsZWQgPSAmcmVzY3Vlci0+c2NoZWR1bGVkOworCWJvb2wgaXNfdW5ib3VuZCA9IHdxLT5mbGFncyAmIFdRX1VOQk9VTkQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXNldF91c2VyX25pY2UoY3VycmVudCwgUkVTQ1VFUl9OSUNFX0xFVkVMKTsKK3JlcGVhdDoKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFNlZSB3aGV0aGVyIGFueSBjcHUgaXMgYXNraW5nIGZvciBoZWxwLiAgVW5ib3VuZGVkCisJICogd29ya3F1ZXVlcyB1c2UgY3B1IDAgaW4gbWF5ZGF5X21hc2sgZm9yIENQVV9VTkJPVU5ELgorCSAqLworCWZvcl9lYWNoX21heWRheV9jcHUoY3B1LCB3cS0+bWF5ZGF5X21hc2spIHsKKwkJdW5zaWduZWQgaW50IHRjcHUgPSBpc191bmJvdW5kID8gV09SS19DUFVfVU5CT1VORCA6IGNwdTsKKwkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKHRjcHUsIHdxKTsKKwkJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSBjd3EtPmdjd3E7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgKm47CisKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQltYXlkYXlfY2xlYXJfY3B1KGNwdSwgd3EtPm1heWRheV9tYXNrKTsKKworCQkvKiBtaWdyYXRlIHRvIHRoZSB0YXJnZXQgY3B1IGlmIHBvc3NpYmxlICovCisJCXJlc2N1ZXItPmdjd3EgPSBnY3dxOworCQl3b3JrZXJfbWF5YmVfYmluZF9hbmRfbG9jayhyZXNjdWVyKTsKKworCQkvKgorCQkgKiBTbHVycCBpbiBhbGwgd29ya3MgaXNzdWVkIHZpYSB0aGlzIHdvcmtxdWV1ZSBhbmQKKwkJICogcHJvY2VzcydlbS4KKwkJICovCisJCUJVR19PTighbGlzdF9lbXB0eSgmcmVzY3Vlci0+c2NoZWR1bGVkKSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3b3JrLCBuLCAmZ2N3cS0+d29ya2xpc3QsIGVudHJ5KQorCQkJaWYgKGdldF93b3JrX2N3cSh3b3JrKSA9PSBjd3EpCisJCQkJbW92ZV9saW5rZWRfd29ya3Mod29yaywgc2NoZWR1bGVkLCAmbik7CisKKwkJcHJvY2Vzc19zY2hlZHVsZWRfd29ya3MocmVzY3Vlcik7CisJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJfQorCisJc2NoZWR1bGUoKTsKKwlnb3RvIHJlcGVhdDsKIH0KIAogc3RydWN0IHdxX2JhcnJpZXIgewpAQCAtNDY5LDQ0ICsyMDAzLDEzNyBAQAogCWNvbXBsZXRlKCZiYXJyLT5kb25lKTsKIH0KIAorLyoqCisgKiBpbnNlcnRfd3FfYmFycmllciAtIGluc2VydCBhIGJhcnJpZXIgd29yaworICogQGN3cTogY3dxIHRvIGluc2VydCBiYXJyaWVyIGludG8KKyAqIEBiYXJyOiB3cV9iYXJyaWVyIHRvIGluc2VydAorICogQHRhcmdldDogdGFyZ2V0IHdvcmsgdG8gYXR0YWNoIEBiYXJyIHRvCisgKiBAd29ya2VyOiB3b3JrZXIgY3VycmVudGx5IGV4ZWN1dGluZyBAdGFyZ2V0LCBOVUxMIGlmIEB0YXJnZXQgaXMgbm90IGV4ZWN1dGluZworICoKKyAqIEBiYXJyIGlzIGxpbmtlZCB0byBAdGFyZ2V0IHN1Y2ggdGhhdCBAYmFyciBpcyBjb21wbGV0ZWQgb25seSBhZnRlcgorICogQHRhcmdldCBmaW5pc2hlcyBleGVjdXRpb24uICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBvcmRlcmluZworICogZ3VhcmFudGVlIGlzIG9ic2VydmVkIG9ubHkgd2l0aCByZXNwZWN0IHRvIEB0YXJnZXQgYW5kIG9uIHRoZSBsb2NhbAorICogY3B1LgorICoKKyAqIEN1cnJlbnRseSwgYSBxdWV1ZWQgYmFycmllciBjYW4ndCBiZSBjYW5jZWxlZC4gIFRoaXMgaXMgYmVjYXVzZQorICogdHJ5X3RvX2dyYWJfcGVuZGluZygpIGNhbid0IGRldGVybWluZSB3aGV0aGVyIHRoZSB3b3JrIHRvIGJlCisgKiBncmFiYmVkIGlzIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSBhbmQgdGh1cyBjYW4ndCBjbGVhciBMSU5LRUQKKyAqIGZsYWcgb2YgdGhlIHByZXZpb3VzIHdvcmsgd2hpbGUgdGhlcmUgbXVzdCBiZSBhIHZhbGlkIG5leHQgd29yaworICogYWZ0ZXIgYSB3b3JrIHdpdGggTElOS0VEIGZsYWcgc2V0LgorICoKKyAqIE5vdGUgdGhhdCB3aGVuIEB3b3JrZXIgaXMgbm9uLU5VTEwsIEB0YXJnZXQgbWF5IGJlIG1vZGlmaWVkCisgKiB1bmRlcm5lYXRoIHVzLCBzbyB3ZSBjYW4ndCByZWxpYWJseSBkZXRlcm1pbmUgY3dxIGZyb20gQHRhcmdldC4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKS4KKyAqLwogc3RhdGljIHZvaWQgaW5zZXJ0X3dxX2JhcnJpZXIoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsCi0JCQlzdHJ1Y3Qgd3FfYmFycmllciAqYmFyciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKKwkJCSAgICAgIHN0cnVjdCB3cV9iYXJyaWVyICpiYXJyLAorCQkJICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICp0YXJnZXQsIHN0cnVjdCB3b3JrZXIgKndvcmtlcikKIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXVuc2lnbmVkIGludCBsaW5rZWQgPSAwOworCiAJLyoKLQkgKiBkZWJ1Z29iamVjdCBjYWxscyBhcmUgc2FmZSBoZXJlIGV2ZW4gd2l0aCBjd3EtPmxvY2sgbG9ja2VkCisJICogZGVidWdvYmplY3QgY2FsbHMgYXJlIHNhZmUgaGVyZSBldmVuIHdpdGggZ2N3cS0+bG9jayBsb2NrZWQKIAkgKiBhcyB3ZSBrbm93IGZvciBzdXJlIHRoYXQgdGhpcyB3aWxsIG5vdCB0cmlnZ2VyIGFueSBvZiB0aGUKIAkgKiBjaGVja3MgYW5kIGNhbGwgYmFjayBpbnRvIHRoZSBmaXh1cCBmdW5jdGlvbnMgd2hlcmUgd2UKIAkgKiBtaWdodCBkZWFkbG9jay4KIAkgKi8KIAlJTklUX1dPUktfT05fU1RBQ0soJmJhcnItPndvcmssIHdxX2JhcnJpZXJfZnVuYyk7Ci0JX19zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKCZiYXJyLT53b3JrKSk7Ci0KKwlfX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElOR19CSVQsIHdvcmtfZGF0YV9iaXRzKCZiYXJyLT53b3JrKSk7CiAJaW5pdF9jb21wbGV0aW9uKCZiYXJyLT5kb25lKTsKIAorCS8qCisJICogSWYgQHRhcmdldCBpcyBjdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQsIHNjaGVkdWxlIHRoZQorCSAqIGJhcnJpZXIgdG8gdGhlIHdvcmtlcjsgb3RoZXJ3aXNlLCBwdXQgaXQgYWZ0ZXIgQHRhcmdldC4KKwkgKi8KKwlpZiAod29ya2VyKQorCQloZWFkID0gd29ya2VyLT5zY2hlZHVsZWQubmV4dDsKKwllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyAqYml0cyA9IHdvcmtfZGF0YV9iaXRzKHRhcmdldCk7CisKKwkJaGVhZCA9IHRhcmdldC0+ZW50cnkubmV4dDsKKwkJLyogdGhlcmUgY2FuIGFscmVhZHkgYmUgb3RoZXIgbGlua2VkIHdvcmtzLCBpbmhlcml0IGFuZCBzZXQgKi8KKwkJbGlua2VkID0gKmJpdHMgJiBXT1JLX1NUUlVDVF9MSU5LRUQ7CisJCV9fc2V0X2JpdChXT1JLX1NUUlVDVF9MSU5LRURfQklULCBiaXRzKTsKKwl9CisKIAlkZWJ1Z193b3JrX2FjdGl2YXRlKCZiYXJyLT53b3JrKTsKLQlpbnNlcnRfd29yayhjd3EsICZiYXJyLT53b3JrLCBoZWFkKTsKKwlpbnNlcnRfd29yayhjd3EsICZiYXJyLT53b3JrLCBoZWFkLAorCQkgICAgd29ya19jb2xvcl90b19mbGFncyhXT1JLX05PX0NPTE9SKSB8IGxpbmtlZCk7CiB9CiAKLXN0YXRpYyBpbnQgZmx1c2hfY3B1X3dvcmtxdWV1ZShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKKy8qKgorICogZmx1c2hfd29ya3F1ZXVlX3ByZXBfY3dxcyAtIHByZXBhcmUgY3dxcyBmb3Igd29ya3F1ZXVlIGZsdXNoaW5nCisgKiBAd3E6IHdvcmtxdWV1ZSBiZWluZyBmbHVzaGVkCisgKiBAZmx1c2hfY29sb3I6IG5ldyBmbHVzaCBjb2xvciwgPCAwIGZvciBuby1vcAorICogQHdvcmtfY29sb3I6IG5ldyB3b3JrIGNvbG9yLCA8IDAgZm9yIG5vLW9wCisgKgorICogUHJlcGFyZSBjd3FzIGZvciB3b3JrcXVldWUgZmx1c2hpbmcuCisgKgorICogSWYgQGZsdXNoX2NvbG9yIGlzIG5vbi1uZWdhdGl2ZSwgZmx1c2hfY29sb3Igb24gYWxsIGN3cXMgc2hvdWxkIGJlCisgKiAtMS4gIElmIG5vIGN3cSBoYXMgaW4tZmxpZ2h0IGNvbW1hbmRzIGF0IHRoZSBzcGVjaWZpZWQgY29sb3IsIGFsbAorICogY3dxLT5mbHVzaF9jb2xvcidzIHN0YXkgYXQgLTEgYW5kICVmYWxzZSBpcyByZXR1cm5lZC4gIElmIGFueSBjd3EKKyAqIGhhcyBpbiBmbGlnaHQgY29tbWFuZHMsIGl0cyBjd3EtPmZsdXNoX2NvbG9yIGlzIHNldCB0bworICogQGZsdXNoX2NvbG9yLCBAd3EtPm5yX2N3cXNfdG9fZmx1c2ggaXMgdXBkYXRlZCBhY2NvcmRpbmdseSwgY3dxCisgKiB3YWtldXAgbG9naWMgaXMgYXJtZWQgYW5kICV0cnVlIGlzIHJldHVybmVkLgorICoKKyAqIFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgQHdxLT5maXJzdF9mbHVzaGVyIHByaW9yIHRvCisgKiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBub24tbmVnYXRpdmUgQGZsdXNoX2NvbG9yLiAgSWYKKyAqIEBmbHVzaF9jb2xvciBpcyBuZWdhdGl2ZSwgbm8gZmx1c2ggY29sb3IgdXBkYXRlIGlzIGRvbmUgYW5kICVmYWxzZQorICogaXMgcmV0dXJuZWQuCisgKgorICogSWYgQHdvcmtfY29sb3IgaXMgbm9uLW5lZ2F0aXZlLCBhbGwgY3dxcyBzaG91bGQgaGF2ZSB0aGUgc2FtZQorICogd29ya19jb2xvciB3aGljaCBpcyBwcmV2aW91cyB0byBAd29ya19jb2xvciBhbmQgYWxsIHdpbGwgYmUKKyAqIGFkdmFuY2VkIHRvIEB3b3JrX2NvbG9yLgorICoKKyAqIENPTlRFWFQ6CisgKiBtdXRleF9sb2NrKHdxLT5mbHVzaF9tdXRleCkuCisgKgorICogUkVUVVJOUzoKKyAqICV0cnVlIGlmIEBmbHVzaF9jb2xvciA+PSAwIGFuZCB0aGVyZSdzIHNvbWV0aGluZyB0byBmbHVzaC4gICVmYWxzZQorICogb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCBmbHVzaF93b3JrcXVldWVfcHJlcF9jd3FzKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKKwkJCQkgICAgICBpbnQgZmx1c2hfY29sb3IsIGludCB3b3JrX2NvbG9yKQogewotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCB3cV9iYXJyaWVyIGJhcnI7CisJYm9vbCB3YWl0ID0gZmFsc2U7CisJdW5zaWduZWQgaW50IGNwdTsKIAotCVdBUk5fT04oY3dxLT50aHJlYWQgPT0gY3VycmVudCk7Ci0KLQlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwotCWlmICghbGlzdF9lbXB0eSgmY3dxLT53b3JrbGlzdCkgfHwgY3dxLT5jdXJyZW50X3dvcmsgIT0gTlVMTCkgewotCQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCAmY3dxLT53b3JrbGlzdCk7Ci0JCWFjdGl2ZSA9IDE7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQotCWlmIChhY3RpdmUpIHsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKLQkJZGVzdHJveV93b3JrX29uX3N0YWNrKCZiYXJyLndvcmspOworCWlmIChmbHVzaF9jb2xvciA+PSAwKSB7CisJCUJVR19PTihhdG9taWNfcmVhZCgmd3EtPm5yX2N3cXNfdG9fZmx1c2gpKTsKKwkJYXRvbWljX3NldCgmd3EtPm5yX2N3cXNfdG9fZmx1c2gsIDEpOwogCX0KIAotCXJldHVybiBhY3RpdmU7CisJZm9yX2VhY2hfY3dxX2NwdShjcHUsIHdxKSB7CisJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKKwkJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSBjd3EtPmdjd3E7CisKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwkJaWYgKGZsdXNoX2NvbG9yID49IDApIHsKKwkJCUJVR19PTihjd3EtPmZsdXNoX2NvbG9yICE9IC0xKTsKKworCQkJaWYgKGN3cS0+bnJfaW5fZmxpZ2h0W2ZsdXNoX2NvbG9yXSkgeworCQkJCWN3cS0+Zmx1c2hfY29sb3IgPSBmbHVzaF9jb2xvcjsKKwkJCQlhdG9taWNfaW5jKCZ3cS0+bnJfY3dxc190b19mbHVzaCk7CisJCQkJd2FpdCA9IHRydWU7CisJCQl9CisJCX0KKworCQlpZiAod29ya19jb2xvciA+PSAwKSB7CisJCQlCVUdfT04od29ya19jb2xvciAhPSB3b3JrX25leHRfY29sb3IoY3dxLT53b3JrX2NvbG9yKSk7CisJCQljd3EtPndvcmtfY29sb3IgPSB3b3JrX2NvbG9yOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwl9CisKKwlpZiAoZmx1c2hfY29sb3IgPj0gMCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZ3cS0+bnJfY3dxc190b19mbHVzaCkpCisJCWNvbXBsZXRlKCZ3cS0+Zmlyc3RfZmx1c2hlci0+ZG9uZSk7CisKKwlyZXR1cm4gd2FpdDsKIH0KIAogLyoqCkBAIC01MTgsMjAgKzIxNDUsMTUwIEBACiAgKgogICogV2Ugc2xlZXAgdW50aWwgYWxsIHdvcmtzIHdoaWNoIHdlcmUgcXVldWVkIG9uIGVudHJ5IGhhdmUgYmVlbiBoYW5kbGVkLAogICogYnV0IHdlIGFyZSBub3QgbGl2ZWxvY2tlZCBieSBuZXcgaW5jb21pbmcgb25lcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcnVuIHRoZSB3b3JrcXVldWVzIGl0c2VsZi4gIE5vdyB3ZSBqdXN0IHdhaXQgZm9yIHRoZQotICogaGVscGVyIHRocmVhZHMgdG8gZG8gaXQuCiAgKi8KIHZvaWQgZmx1c2hfd29ya3F1ZXVlKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSkKIHsKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCA9IHdxX2NwdV9tYXAod3EpOwotCWludCBjcHU7CisJc3RydWN0IHdxX2ZsdXNoZXIgdGhpc19mbHVzaGVyID0geworCQkubGlzdCA9IExJU1RfSEVBRF9JTklUKHRoaXNfZmx1c2hlci5saXN0KSwKKwkJLmZsdXNoX2NvbG9yID0gLTEsCisJCS5kb25lID0gQ09NUExFVElPTl9JTklUSUFMSVpFUl9PTlNUQUNLKHRoaXNfZmx1c2hlci5kb25lKSwKKwl9OworCWludCBuZXh0X2NvbG9yOwogCi0JbWlnaHRfc2xlZXAoKTsKIAlsb2NrX21hcF9hY3F1aXJlKCZ3cS0+bG9ja2RlcF9tYXApOwogCWxvY2tfbWFwX3JlbGVhc2UoJndxLT5sb2NrZGVwX21hcCk7Ci0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X21hcCkKLQkJZmx1c2hfY3B1X3dvcmtxdWV1ZShwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpKTsKKworCW11dGV4X2xvY2soJndxLT5mbHVzaF9tdXRleCk7CisKKwkvKgorCSAqIFN0YXJ0LXRvLXdhaXQgcGhhc2UKKwkgKi8KKwluZXh0X2NvbG9yID0gd29ya19uZXh0X2NvbG9yKHdxLT53b3JrX2NvbG9yKTsKKworCWlmIChuZXh0X2NvbG9yICE9IHdxLT5mbHVzaF9jb2xvcikgeworCQkvKgorCQkgKiBDb2xvciBzcGFjZSBpcyBub3QgZnVsbC4gIFRoZSBjdXJyZW50IHdvcmtfY29sb3IKKwkJICogYmVjb21lcyBvdXIgZmx1c2hfY29sb3IgYW5kIHdvcmtfY29sb3IgaXMgYWR2YW5jZWQKKwkJICogYnkgb25lLgorCQkgKi8KKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3cS0+Zmx1c2hlcl9vdmVyZmxvdykpOworCQl0aGlzX2ZsdXNoZXIuZmx1c2hfY29sb3IgPSB3cS0+d29ya19jb2xvcjsKKwkJd3EtPndvcmtfY29sb3IgPSBuZXh0X2NvbG9yOworCisJCWlmICghd3EtPmZpcnN0X2ZsdXNoZXIpIHsKKwkJCS8qIG5vIGZsdXNoIGluIHByb2dyZXNzLCBiZWNvbWUgdGhlIGZpcnN0IGZsdXNoZXIgKi8KKwkJCUJVR19PTih3cS0+Zmx1c2hfY29sb3IgIT0gdGhpc19mbHVzaGVyLmZsdXNoX2NvbG9yKTsKKworCQkJd3EtPmZpcnN0X2ZsdXNoZXIgPSAmdGhpc19mbHVzaGVyOworCisJCQlpZiAoIWZsdXNoX3dvcmtxdWV1ZV9wcmVwX2N3cXMod3EsIHdxLT5mbHVzaF9jb2xvciwKKwkJCQkJCSAgICAgICB3cS0+d29ya19jb2xvcikpIHsKKwkJCQkvKiBub3RoaW5nIHRvIGZsdXNoLCBkb25lICovCisJCQkJd3EtPmZsdXNoX2NvbG9yID0gbmV4dF9jb2xvcjsKKwkJCQl3cS0+Zmlyc3RfZmx1c2hlciA9IE5VTEw7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogd2FpdCBpbiBxdWV1ZSAqLworCQkJQlVHX09OKHdxLT5mbHVzaF9jb2xvciA9PSB0aGlzX2ZsdXNoZXIuZmx1c2hfY29sb3IpOworCQkJbGlzdF9hZGRfdGFpbCgmdGhpc19mbHVzaGVyLmxpc3QsICZ3cS0+Zmx1c2hlcl9xdWV1ZSk7CisJCQlmbHVzaF93b3JrcXVldWVfcHJlcF9jd3FzKHdxLCAtMSwgd3EtPndvcmtfY29sb3IpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogT29wcywgY29sb3Igc3BhY2UgaXMgZnVsbCwgd2FpdCBvbiBvdmVyZmxvdyBxdWV1ZS4KKwkJICogVGhlIG5leHQgZmx1c2ggY29tcGxldGlvbiB3aWxsIGFzc2lnbiB1cworCQkgKiBmbHVzaF9jb2xvciBhbmQgdHJhbnNmZXIgdG8gZmx1c2hlcl9xdWV1ZS4KKwkJICovCisJCWxpc3RfYWRkX3RhaWwoJnRoaXNfZmx1c2hlci5saXN0LCAmd3EtPmZsdXNoZXJfb3ZlcmZsb3cpOworCX0KKworCW11dGV4X3VubG9jaygmd3EtPmZsdXNoX211dGV4KTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRoaXNfZmx1c2hlci5kb25lKTsKKworCS8qCisJICogV2FrZS11cC1hbmQtY2FzY2FkZSBwaGFzZQorCSAqCisJICogRmlyc3QgZmx1c2hlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjYXNjYWRpbmcgZmx1c2hlcyBhbmQKKwkgKiBoYW5kbGluZyBvdmVyZmxvdy4gIE5vbi1maXJzdCBmbHVzaGVycyBjYW4gc2ltcGx5IHJldHVybi4KKwkgKi8KKwlpZiAod3EtPmZpcnN0X2ZsdXNoZXIgIT0gJnRoaXNfZmx1c2hlcikKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmd3EtPmZsdXNoX211dGV4KTsKKworCS8qIHdlIG1pZ2h0IGhhdmUgcmFjZWQsIGNoZWNrIGFnYWluIHdpdGggbXV0ZXggaGVsZCAqLworCWlmICh3cS0+Zmlyc3RfZmx1c2hlciAhPSAmdGhpc19mbHVzaGVyKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwl3cS0+Zmlyc3RfZmx1c2hlciA9IE5VTEw7CisKKwlCVUdfT04oIWxpc3RfZW1wdHkoJnRoaXNfZmx1c2hlci5saXN0KSk7CisJQlVHX09OKHdxLT5mbHVzaF9jb2xvciAhPSB0aGlzX2ZsdXNoZXIuZmx1c2hfY29sb3IpOworCisJd2hpbGUgKHRydWUpIHsKKwkJc3RydWN0IHdxX2ZsdXNoZXIgKm5leHQsICp0bXA7CisKKwkJLyogY29tcGxldGUgYWxsIHRoZSBmbHVzaGVycyBzaGFyaW5nIHRoZSBjdXJyZW50IGZsdXNoIGNvbG9yICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZXh0LCB0bXAsICZ3cS0+Zmx1c2hlcl9xdWV1ZSwgbGlzdCkgeworCQkJaWYgKG5leHQtPmZsdXNoX2NvbG9yICE9IHdxLT5mbHVzaF9jb2xvcikKKwkJCQlicmVhazsKKwkJCWxpc3RfZGVsX2luaXQoJm5leHQtPmxpc3QpOworCQkJY29tcGxldGUoJm5leHQtPmRvbmUpOworCQl9CisKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZ3cS0+Zmx1c2hlcl9vdmVyZmxvdykgJiYKKwkJICAgICAgIHdxLT5mbHVzaF9jb2xvciAhPSB3b3JrX25leHRfY29sb3Iod3EtPndvcmtfY29sb3IpKTsKKworCQkvKiB0aGlzIGZsdXNoX2NvbG9yIGlzIGZpbmlzaGVkLCBhZHZhbmNlIGJ5IG9uZSAqLworCQl3cS0+Zmx1c2hfY29sb3IgPSB3b3JrX25leHRfY29sb3Iod3EtPmZsdXNoX2NvbG9yKTsKKworCQkvKiBvbmUgY29sb3IgaGFzIGJlZW4gZnJlZWQsIGhhbmRsZSBvdmVyZmxvdyBxdWV1ZSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJndxLT5mbHVzaGVyX292ZXJmbG93KSkgeworCQkJLyoKKwkJCSAqIEFzc2lnbiB0aGUgc2FtZSBjb2xvciB0byBhbGwgb3ZlcmZsb3dlZAorCQkJICogZmx1c2hlcnMsIGFkdmFuY2Ugd29ya19jb2xvciBhbmQgYXBwZW5kIHRvCisJCQkgKiBmbHVzaGVyX3F1ZXVlLiAgVGhpcyBpcyB0aGUgc3RhcnQtdG8td2FpdAorCQkJICogcGhhc2UgZm9yIHRoZXNlIG92ZXJmbG93ZWQgZmx1c2hlcnMuCisJCQkgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmd3EtPmZsdXNoZXJfb3ZlcmZsb3csIGxpc3QpCisJCQkJdG1wLT5mbHVzaF9jb2xvciA9IHdxLT53b3JrX2NvbG9yOworCisJCQl3cS0+d29ya19jb2xvciA9IHdvcmtfbmV4dF9jb2xvcih3cS0+d29ya19jb2xvcik7CisKKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmd3EtPmZsdXNoZXJfb3ZlcmZsb3csCisJCQkJCSAgICAgICZ3cS0+Zmx1c2hlcl9xdWV1ZSk7CisJCQlmbHVzaF93b3JrcXVldWVfcHJlcF9jd3FzKHdxLCAtMSwgd3EtPndvcmtfY29sb3IpOworCQl9CisKKwkJaWYgKGxpc3RfZW1wdHkoJndxLT5mbHVzaGVyX3F1ZXVlKSkgeworCQkJQlVHX09OKHdxLT5mbHVzaF9jb2xvciAhPSB3cS0+d29ya19jb2xvcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIE5lZWQgdG8gZmx1c2ggbW9yZSBjb2xvcnMuICBNYWtlIHRoZSBuZXh0IGZsdXNoZXIKKwkJICogdGhlIG5ldyBmaXJzdCBmbHVzaGVyIGFuZCBhcm0gY3dxcy4KKwkJICovCisJCUJVR19PTih3cS0+Zmx1c2hfY29sb3IgPT0gd3EtPndvcmtfY29sb3IpOworCQlCVUdfT04od3EtPmZsdXNoX2NvbG9yICE9IG5leHQtPmZsdXNoX2NvbG9yKTsKKworCQlsaXN0X2RlbF9pbml0KCZuZXh0LT5saXN0KTsKKwkJd3EtPmZpcnN0X2ZsdXNoZXIgPSBuZXh0OworCisJCWlmIChmbHVzaF93b3JrcXVldWVfcHJlcF9jd3FzKHdxLCB3cS0+Zmx1c2hfY29sb3IsIC0xKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE1laC4uLiB0aGlzIGNvbG9yIGlzIGFscmVhZHkgZG9uZSwgY2xlYXIgZmlyc3QKKwkJICogZmx1c2hlciBhbmQgcmVwZWF0IGNhc2NhZGluZy4KKwkJICovCisJCXdxLT5maXJzdF9mbHVzaGVyID0gTlVMTDsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ3cS0+Zmx1c2hfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfd29ya3F1ZXVlKTsKIApAQCAtNTQ3LDQzICsyMzA0LDQ2IEBACiAgKi8KIGludCBmbHVzaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3Qgd29ya2VyICp3b3JrZXIgPSBOVUxMOworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxOwogCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOwotCXN0cnVjdCBsaXN0X2hlYWQgKnByZXY7CiAJc3RydWN0IHdxX2JhcnJpZXIgYmFycjsKIAogCW1pZ2h0X3NsZWVwKCk7Ci0JY3dxID0gZ2V0X3dxX2RhdGEod29yayk7Ci0JaWYgKCFjd3EpCisJZ2N3cSA9IGdldF93b3JrX2djd3Eod29yayk7CisJaWYgKCFnY3dxKQogCQlyZXR1cm4gMDsKIAorCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCWlmICghbGlzdF9lbXB0eSgmd29yay0+ZW50cnkpKSB7CisJCS8qCisJCSAqIFNlZSB0aGUgY29tbWVudCBuZWFyIHRyeV90b19ncmFiX3BlbmRpbmcoKS0+c21wX3JtYigpLgorCQkgKiBJZiBpdCB3YXMgcmUtcXVldWVkIHRvIGEgZGlmZmVyZW50IGdjd3EgdW5kZXIgdXMsIHdlCisJCSAqIGFyZSBub3QgZ29pbmcgdG8gd2FpdC4KKwkJICovCisJCXNtcF9ybWIoKTsKKwkJY3dxID0gZ2V0X3dvcmtfY3dxKHdvcmspOworCQlpZiAodW5saWtlbHkoIWN3cSB8fCBnY3dxICE9IGN3cS0+Z2N3cSkpCisJCQlnb3RvIGFscmVhZHlfZ29uZTsKKwl9IGVsc2UgeworCQl3b3JrZXIgPSBmaW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayhnY3dxLCB3b3JrKTsKKwkJaWYgKCF3b3JrZXIpCisJCQlnb3RvIGFscmVhZHlfZ29uZTsKKwkJY3dxID0gd29ya2VyLT5jdXJyZW50X2N3cTsKKwl9CisKKwlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCB3b3JrLCB3b3JrZXIpOworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKIAlsb2NrX21hcF9hY3F1aXJlKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmY3dxLT53cS0+bG9ja2RlcF9tYXApOwogCi0JcHJldiA9IE5VTEw7Ci0Jc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJndvcmstPmVudHJ5KSkgewotCQkvKgotCQkgKiBTZWUgdGhlIGNvbW1lbnQgbmVhciB0cnlfdG9fZ3JhYl9wZW5kaW5nKCktPnNtcF9ybWIoKS4KLQkJICogSWYgaXQgd2FzIHJlLXF1ZXVlZCB1bmRlciB1cyB3ZSBhcmUgbm90IGdvaW5nIHRvIHdhaXQuCi0JCSAqLwotCQlzbXBfcm1iKCk7Ci0JCWlmICh1bmxpa2VseShjd3EgIT0gZ2V0X3dxX2RhdGEod29yaykpKQotCQkJZ290byBvdXQ7Ci0JCXByZXYgPSAmd29yay0+ZW50cnk7Ci0JfSBlbHNlIHsKLQkJaWYgKGN3cS0+Y3VycmVudF93b3JrICE9IHdvcmspCi0JCQlnb3RvIG91dDsKLQkJcHJldiA9ICZjd3EtPndvcmtsaXN0OwotCX0KLQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCBwcmV2LT5uZXh0KTsKLW91dDoKLQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7Ci0JaWYgKCFwcmV2KQotCQlyZXR1cm4gMDsKLQogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJhcnIuZG9uZSk7CiAJZGVzdHJveV93b3JrX29uX3N0YWNrKCZiYXJyLndvcmspOwogCXJldHVybiAxOworYWxyZWFkeV9nb25lOgorCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF93b3JrKTsKIApAQCAtNTkzLDU0ICsyMzUzLDU1IEBACiAgKi8KIHN0YXRpYyBpbnQgdHJ5X3RvX2dyYWJfcGVuZGluZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7CisJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3E7CiAJaW50IHJldCA9IC0xOwogCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19TVFJVQ1RfUEVORElOR19CSVQsIHdvcmtfZGF0YV9iaXRzKHdvcmspKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFRoZSBxdWV1ZWluZyBpcyBpbiBwcm9ncmVzcywgb3IgaXQgaXMgYWxyZWFkeSBxdWV1ZWQuIFRyeSB0bwogCSAqIHN0ZWFsIGl0IGZyb20gLT53b3JrbGlzdCB3aXRob3V0IGNsZWFyaW5nIFdPUktfU1RSVUNUX1BFTkRJTkcuCiAJICovCi0KLQljd3EgPSBnZXRfd3FfZGF0YSh3b3JrKTsKLQlpZiAoIWN3cSkKKwlnY3dxID0gZ2V0X3dvcmtfZ2N3cSh3b3JrKTsKKwlpZiAoIWdjd3EpCiAJCXJldHVybiByZXQ7CiAKLQlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOwogCWlmICghbGlzdF9lbXB0eSgmd29yay0+ZW50cnkpKSB7CiAJCS8qCi0JCSAqIFRoaXMgd29yayBpcyBxdWV1ZWQsIGJ1dCBwZXJoYXBzIHdlIGxvY2tlZCB0aGUgd3JvbmcgY3dxLgorCQkgKiBUaGlzIHdvcmsgaXMgcXVldWVkLCBidXQgcGVyaGFwcyB3ZSBsb2NrZWQgdGhlIHdyb25nIGdjd3EuCiAJCSAqIEluIHRoYXQgY2FzZSB3ZSBtdXN0IHNlZSB0aGUgbmV3IHZhbHVlIGFmdGVyIHJtYigpLCBzZWUKIAkJICogaW5zZXJ0X3dvcmsoKS0+d21iKCkuCiAJCSAqLwogCQlzbXBfcm1iKCk7Ci0JCWlmIChjd3EgPT0gZ2V0X3dxX2RhdGEod29yaykpIHsKKwkJaWYgKGdjd3EgPT0gZ2V0X3dvcmtfZ2N3cSh3b3JrKSkgewogCQkJZGVidWdfd29ya19kZWFjdGl2YXRlKHdvcmspOwogCQkJbGlzdF9kZWxfaW5pdCgmd29yay0+ZW50cnkpOworCQkJY3dxX2RlY19ucl9pbl9mbGlnaHQoZ2V0X3dvcmtfY3dxKHdvcmspLAorCQkJCQkgICAgIGdldF93b3JrX2NvbG9yKHdvcmspKTsKIAkJCXJldCA9IDE7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB3YWl0X29uX2NwdV93b3JrKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxLAotCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHdhaXRfb25fY3B1X3dvcmsoc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgd3FfYmFycmllciBiYXJyOwotCWludCBydW5uaW5nID0gMDsKKwlzdHJ1Y3Qgd29ya2VyICp3b3JrZXI7CiAKLQlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwotCWlmICh1bmxpa2VseShjd3EtPmN1cnJlbnRfd29yayA9PSB3b3JrKSkgewotCQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCBjd3EtPndvcmtsaXN0Lm5leHQpOwotCQlydW5uaW5nID0gMTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOwogCi0JaWYgKHVubGlrZWx5KHJ1bm5pbmcpKSB7CisJd29ya2VyID0gZmluZF93b3JrZXJfZXhlY3V0aW5nX3dvcmsoZ2N3cSwgd29yayk7CisJaWYgKHVubGlrZWx5KHdvcmtlcikpCisJCWluc2VydF93cV9iYXJyaWVyKHdvcmtlci0+Y3VycmVudF9jd3EsICZiYXJyLCB3b3JrLCB3b3JrZXIpOworCisJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSh3b3JrZXIpKSB7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJhcnIuZG9uZSk7CiAJCWRlc3Ryb3lfd29ya19vbl9zdGFjaygmYmFyci53b3JrKTsKIAl9CkBAIC02NDgsOSArMjQwOSw2IEBACiAKIHN0YXRpYyB2b2lkIHdhaXRfb25fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwOwogCWludCBjcHU7CiAKIAltaWdodF9zbGVlcCgpOwpAQCAtNjU4LDE1ICsyNDE2LDggQEAKIAlsb2NrX21hcF9hY3F1aXJlKCZ3b3JrLT5sb2NrZGVwX21hcCk7CiAJbG9ja19tYXBfcmVsZWFzZSgmd29yay0+bG9ja2RlcF9tYXApOwogCi0JY3dxID0gZ2V0X3dxX2RhdGEod29yayk7Ci0JaWYgKCFjd3EpCi0JCXJldHVybjsKLQotCXdxID0gY3dxLT53cTsKLQljcHVfbWFwID0gd3FfY3B1X21hcCh3cSk7Ci0KLQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfbWFwKQotCQl3YWl0X29uX2NwdV93b3JrKHBlcl9jcHVfcHRyKHdxLT5jcHVfd3EsIGNwdSksIHdvcmspOworCWZvcl9lYWNoX2djd3FfY3B1KGNwdSkKKwkJd2FpdF9vbl9jcHVfd29yayhnZXRfZ2N3cShjcHUpLCB3b3JrKTsKIH0KIAogc3RhdGljIGludCBfX2NhbmNlbF93b3JrX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywKQEAgLTY4MSw3ICsyNDMyLDcgQEAKIAkJd2FpdF9vbl93b3JrKHdvcmspOwogCX0gd2hpbGUgKHVubGlrZWx5KHJldCA8IDApKTsKIAotCWNsZWFyX3dxX2RhdGEod29yayk7CisJY2xlYXJfd29ya19kYXRhKHdvcmspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyNyw4ICsyNDc4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKTsKIAotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprZXZlbnRkX3dxIF9fcmVhZF9tb3N0bHk7Ci0KIC8qKgogICogc2NoZWR1bGVfd29yayAtIHB1dCB3b3JrIHRhc2sgaW4gZ2xvYmFsIHdvcmtxdWV1ZQogICogQHdvcms6IGpvYiB0byBiZSBkb25lCkBAIC03NDIsNyArMjQ5MSw3IEBACiAgKi8KIGludCBzY2hlZHVsZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlyZXR1cm4gcXVldWVfd29yayhrZXZlbnRkX3dxLCB3b3JrKTsKKwlyZXR1cm4gcXVldWVfd29yayhzeXN0ZW1fd3EsIHdvcmspOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV93b3JrKTsKIApAQCAtNzU1LDcgKzI1MDQsNyBAQAogICovCiBpbnQgc2NoZWR1bGVfd29ya19vbihpbnQgY3B1LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JcmV0dXJuIHF1ZXVlX3dvcmtfb24oY3B1LCBrZXZlbnRkX3dxLCB3b3JrKTsKKwlyZXR1cm4gcXVldWVfd29ya19vbihjcHUsIHN5c3RlbV93cSwgd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjaGVkdWxlX3dvcmtfb24pOwogCkBAIC03NzAsNyArMjUxOSw3IEBACiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrLAogCQkJCQl1bnNpZ25lZCBsb25nIGRlbGF5KQogewotCXJldHVybiBxdWV1ZV9kZWxheWVkX3dvcmsoa2V2ZW50ZF93cSwgZHdvcmssIGRlbGF5KTsKKwlyZXR1cm4gcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV93cSwgZHdvcmssIGRlbGF5KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NoZWR1bGVfZGVsYXllZF93b3JrKTsKIApAQCAtNzgzLDkgKzI1MzIsOCBAQAogdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmspCiB7CiAJaWYgKGRlbF90aW1lcl9zeW5jKCZkd29yay0+dGltZXIpKSB7Ci0JCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOwotCQljd3EgPSB3cV9wZXJfY3B1KGdldF93cV9kYXRhKCZkd29yay0+d29yayktPndxLCBnZXRfY3B1KCkpOwotCQlfX3F1ZXVlX3dvcmsoY3dxLCAmZHdvcmstPndvcmspOworCQlfX3F1ZXVlX3dvcmsoZ2V0X2NwdSgpLCBnZXRfd29ya19jd3EoJmR3b3JrLT53b3JrKS0+d3EsCisJCQkgICAgICZkd29yay0+d29yayk7CiAJCXB1dF9jcHUoKTsKIAl9CiAJZmx1c2hfd29yaygmZHdvcmstPndvcmspOwpAQCAtODA0LDcgKzI1NTIsNyBAQAogaW50IHNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihpbnQgY3B1LAogCQkJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7Ci0JcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtldmVudGRfd3EsIGR3b3JrLCBkZWxheSk7CisJcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIHN5c3RlbV93cSwgZHdvcmssIGRlbGF5KTsKIH0KIEVYUE9SVF9TWU1CT0woc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKTsKIApAQCAtODIwLDggKzI1NjgsNyBAQAogaW50IHNjaGVkdWxlX29uX2VhY2hfY3B1KHdvcmtfZnVuY190IGZ1bmMpCiB7CiAJaW50IGNwdTsKLQlpbnQgb3JpZyA9IC0xOwotCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya3M7CisJc3RydWN0IHdvcmtfc3RydWN0IF9fcGVyY3B1ICp3b3JrczsKIAogCXdvcmtzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCk7CiAJaWYgKCF3b3JrcykKQEAgLTgyOSwyMyArMjU3NiwxMiBAQAogCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAKLQkvKgotCSAqIFdoZW4gcnVubmluZyBpbiBrZXZlbnRkIGRvbid0IHNjaGVkdWxlIGEgd29yayBpdGVtIG9uCi0JICogaXRzZWxmLiAgQ2FuIGp1c3QgY2FsbCBkaXJlY3RseSBiZWNhdXNlIHRoZSB3b3JrIHF1ZXVlIGlzCi0JICogYWxyZWFkeSBib3VuZC4gIFRoaXMgYWxzbyBpcyBmYXN0ZXIuCi0JICovCi0JaWYgKGN1cnJlbnRfaXNfa2V2ZW50ZCgpKQotCQlvcmlnID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpOwogCiAJCUlOSVRfV09SSyh3b3JrLCBmdW5jKTsKLQkJaWYgKGNwdSAhPSBvcmlnKQotCQkJc2NoZWR1bGVfd29ya19vbihjcHUsIHdvcmspOworCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CiAJfQotCWlmIChvcmlnID49IDApCi0JCWZ1bmMocGVyX2NwdV9wdHIod29ya3MsIG9yaWcpKTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlmbHVzaF93b3JrKHBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKQEAgLTg4MSw3ICsyNjE3LDcgQEAKICAqLwogdm9pZCBmbHVzaF9zY2hlZHVsZWRfd29yayh2b2lkKQogewotCWZsdXNoX3dvcmtxdWV1ZShrZXZlbnRkX3dxKTsKKwlmbHVzaF93b3JrcXVldWUoc3lzdGVtX3dxKTsKIH0KIEVYUE9SVF9TWU1CT0woZmx1c2hfc2NoZWR1bGVkX3dvcmspOwogCkBAIC05MTMsMTcwICsyNjQ5LDE3MCBAQAogCiBpbnQga2V2ZW50ZF91cCh2b2lkKQogewotCXJldHVybiBrZXZlbnRkX3dxICE9IE5VTEw7CisJcmV0dXJuIHN5c3RlbV93cSAhPSBOVUxMOwogfQogCi1pbnQgY3VycmVudF9pc19rZXZlbnRkKHZvaWQpCitzdGF0aWMgaW50IGFsbG9jX2N3cXMoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQogewotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOwotCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOyAvKiBwcmVlbXB0LXNhZmU6IGtldmVudGQgaXMgcGVyLWNwdSAqLwotCWludCByZXQgPSAwOwotCi0JQlVHX09OKCFrZXZlbnRkX3dxKTsKLQotCWN3cSA9IHBlcl9jcHVfcHRyKGtldmVudGRfd3EtPmNwdV93cSwgY3B1KTsKLQlpZiAoY3VycmVudCA9PSBjd3EtPnRocmVhZCkKLQkJcmV0ID0gMTsKLQotCXJldHVybiByZXQ7Ci0KLX0KLQotc3RhdGljIHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqCi1pbml0X2NwdV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBpbnQgY3B1KQotewotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KTsKLQotCWN3cS0+d3EgPSB3cTsKLQlzcGluX2xvY2tfaW5pdCgmY3dxLT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY3dxLT53b3JrbGlzdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmY3dxLT5tb3JlX3dvcmspOwotCi0JcmV0dXJuIGN3cTsKLX0KLQotc3RhdGljIGludCBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwgaW50IGNwdSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPLTEgfTsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EgPSBjd3EtPndxOwotCWNvbnN0IGNoYXIgKmZtdCA9IGlzX3dxX3NpbmdsZV90aHJlYWRlZCh3cSkgPyAiJXMiIDogIiVzLyVkIjsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0KLQlwID0ga3RocmVhZF9jcmVhdGUod29ya2VyX3RocmVhZCwgY3dxLCBmbXQsIHdxLT5uYW1lLCBjcHUpOwogCS8qCi0JICogTm9ib2R5IGNhbiBhZGQgdGhlIHdvcmtfc3RydWN0IHRvIHRoaXMgY3dxLAotCSAqCWlmIChjYWxsZXIgaXMgX19jcmVhdGVfd29ya3F1ZXVlKQotCSAqCQlub2JvZHkgc2hvdWxkIHNlZSB0aGlzIHdxCi0JICoJZWxzZSAvLyBjYWxsZXIgaXMgQ1BVX1VQX1BSRVBBUkUKLQkgKgkJY3B1IGlzIG5vdCBvbiBjcHVfb25saW5lX21hcAotCSAqIHNvIHdlIGNhbiBhYm9ydCBzYWZlbHkuCisJICogY3dxcyBhcmUgZm9yY2VkIGFsaWduZWQgYWNjb3JkaW5nIHRvIFdPUktfU1RSVUNUX0ZMQUdfQklUUy4KKwkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgYWxpZ25tZW50IGlzbid0IGxvd2VyIHRoYW4gdGhhdCBvZgorCSAqIHVuc2lnbmVkIGxvbmcgbG9uZy4KIAkgKi8KLQlpZiAoSVNfRVJSKHApKQotCQlyZXR1cm4gUFRSX0VSUihwKTsKLQlpZiAoY3dxLT53cS0+cnQpCi0JCXNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKHAsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci0JY3dxLT50aHJlYWQgPSBwOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCk7CisJY29uc3Qgc2l6ZV90IGFsaWduID0gbWF4X3Qoc2l6ZV90LCAxIDw8IFdPUktfU1RSVUNUX0ZMQUdfQklUUywKKwkJCQkgICBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKTsKKyNpZmRlZiBDT05GSUdfU01QCisJYm9vbCBwZXJjcHUgPSAhKHdxLT5mbGFncyAmIFdRX1VOQk9VTkQpOworI2Vsc2UKKwlib29sIHBlcmNwdSA9IGZhbHNlOworI2VuZGlmCiAKLQl0cmFjZV93b3JrcXVldWVfY3JlYXRpb24oY3dxLT50aHJlYWQsIGNwdSk7CisJaWYgKHBlcmNwdSkKKwkJd3EtPmNwdV93cS5wY3B1ID0gX19hbGxvY19wZXJjcHUoc2l6ZSwgYWxpZ24pOworCWVsc2UgeworCQl2b2lkICpwdHI7CiAKLQlyZXR1cm4gMDsKKwkJLyoKKwkJICogQWxsb2NhdGUgZW5vdWdoIHJvb20gdG8gYWxpZ24gY3dxIGFuZCBwdXQgYW4gZXh0cmEKKwkJICogcG9pbnRlciBhdCB0aGUgZW5kIHBvaW50aW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsbHkKKwkJICogYWxsb2NhdGVkIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBmcmVlLgorCQkgKi8KKwkJcHRyID0ga3phbGxvYyhzaXplICsgYWxpZ24gKyBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwdHIpIHsKKwkJCXdxLT5jcHVfd3Euc2luZ2xlID0gUFRSX0FMSUdOKHB0ciwgYWxpZ24pOworCQkJKih2b2lkICoqKSh3cS0+Y3B1X3dxLnNpbmdsZSArIDEpID0gcHRyOworCQl9CisJfQorCisJLyoganVzdCBpbiBjYXNlLCBtYWtlIHN1cmUgaXQncyBhY3R1YWxseSBhbGlnbmVkICovCisJQlVHX09OKCFJU19BTElHTkVEKHdxLT5jcHVfd3EudiwgYWxpZ24pKTsKKwlyZXR1cm4gd3EtPmNwdV93cS52ID8gMCA6IC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIHN0YXJ0X3dvcmtxdWV1ZV90aHJlYWQoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsIGludCBjcHUpCitzdGF0aWMgdm9pZCBmcmVlX2N3cXMoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGN3cS0+dGhyZWFkOworI2lmZGVmIENPTkZJR19TTVAKKwlib29sIHBlcmNwdSA9ICEod3EtPmZsYWdzICYgV1FfVU5CT1VORCk7CisjZWxzZQorCWJvb2wgcGVyY3B1ID0gZmFsc2U7CisjZW5kaWYKIAotCWlmIChwICE9IE5VTEwpIHsKLQkJaWYgKGNwdSA+PSAwKQotCQkJa3RocmVhZF9iaW5kKHAsIGNwdSk7Ci0JCXdha2VfdXBfcHJvY2VzcyhwKTsKKwlpZiAocGVyY3B1KQorCQlmcmVlX3BlcmNwdSh3cS0+Y3B1X3dxLnBjcHUpOworCWVsc2UgaWYgKHdxLT5jcHVfd3Euc2luZ2xlKSB7CisJCS8qIHRoZSBwb2ludGVyIHRvIGZyZWUgaXMgc3RvcmVkIHJpZ2h0IGFmdGVyIHRoZSBjd3EgKi8KKwkJa2ZyZWUoKih2b2lkICoqKSh3cS0+Y3B1X3dxLnNpbmdsZSArIDEpKTsKIAl9CiB9CiAKLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfX2NyZWF0ZV93b3JrcXVldWVfa2V5KGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCQlpbnQgc2luZ2xldGhyZWFkLAotCQkJCQkJaW50IGZyZWV6ZWFibGUsCi0JCQkJCQlpbnQgcnQsCi0JCQkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKLQkJCQkJCWNvbnN0IGNoYXIgKmxvY2tfbmFtZSkKK3N0YXRpYyBpbnQgd3FfY2xhbXBfbWF4X2FjdGl2ZShpbnQgbWF4X2FjdGl2ZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGxpbSA9IGZsYWdzICYgV1FfVU5CT1VORCA/IFdRX1VOQk9VTkRfTUFYX0FDVElWRSA6IFdRX01BWF9BQ1RJVkU7CisKKwlpZiAobWF4X2FjdGl2ZSA8IDEgfHwgbWF4X2FjdGl2ZSA+IGxpbSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAid29ya3F1ZXVlOiBtYXhfYWN0aXZlICVkIHJlcXVlc3RlZCBmb3IgJXMgIgorCQkgICAgICAgImlzIG91dCBvZiByYW5nZSwgY2xhbXBpbmcgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCSAgICAgICBtYXhfYWN0aXZlLCBuYW1lLCAxLCBsaW0pOworCisJcmV0dXJuIGNsYW1wX3ZhbChtYXhfYWN0aXZlLCAxLCBsaW0pOworfQorCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX19hbGxvY193b3JrcXVldWVfa2V5KGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJCSAgICAgICBpbnQgbWF4X2FjdGl2ZSwKKwkJCQkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5LAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbG9ja19uYW1lKQogewogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cTsKLQlpbnQgZXJyID0gMCwgY3B1OworCXVuc2lnbmVkIGludCBjcHU7CisKKwkvKgorCSAqIFVuYm91bmQgd29ya3F1ZXVlcyBhcmVuJ3QgY29uY3VycmVuY3kgbWFuYWdlZCBhbmQgc2hvdWxkIGJlCisJICogZGlzcGF0Y2hlZCB0byB3b3JrZXJzIGltbWVkaWF0ZWx5LgorCSAqLworCWlmIChmbGFncyAmIFdRX1VOQk9VTkQpCisJCWZsYWdzIHw9IFdRX0hJR0hQUkk7CisKKwltYXhfYWN0aXZlID0gbWF4X2FjdGl2ZSA/OiBXUV9ERkxfQUNUSVZFOworCW1heF9hY3RpdmUgPSB3cV9jbGFtcF9tYXhfYWN0aXZlKG1heF9hY3RpdmUsIGZsYWdzLCBuYW1lKTsKIAogCXdxID0ga3phbGxvYyhzaXplb2YoKndxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF3cSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyOwogCi0Jd3EtPmNwdV93cSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QpOwotCWlmICghd3EtPmNwdV93cSkgewotCQlrZnJlZSh3cSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwl3cS0+ZmxhZ3MgPSBmbGFnczsKKwl3cS0+c2F2ZWRfbWF4X2FjdGl2ZSA9IG1heF9hY3RpdmU7CisJbXV0ZXhfaW5pdCgmd3EtPmZsdXNoX211dGV4KTsKKwlhdG9taWNfc2V0KCZ3cS0+bnJfY3dxc190b19mbHVzaCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJndxLT5mbHVzaGVyX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmd3EtPmZsdXNoZXJfb3ZlcmZsb3cpOwogCiAJd3EtPm5hbWUgPSBuYW1lOwogCWxvY2tkZXBfaW5pdF9tYXAoJndxLT5sb2NrZGVwX21hcCwgbG9ja19uYW1lLCBrZXksIDApOwotCXdxLT5zaW5nbGV0aHJlYWQgPSBzaW5nbGV0aHJlYWQ7Ci0Jd3EtPmZyZWV6ZWFibGUgPSBmcmVlemVhYmxlOwotCXdxLT5ydCA9IHJ0OwogCUlOSVRfTElTVF9IRUFEKCZ3cS0+bGlzdCk7CiAKLQlpZiAoc2luZ2xldGhyZWFkKSB7Ci0JCWN3cSA9IGluaXRfY3B1X3dvcmtxdWV1ZSh3cSwgc2luZ2xldGhyZWFkX2NwdSk7Ci0JCWVyciA9IGNyZWF0ZV93b3JrcXVldWVfdGhyZWFkKGN3cSwgc2luZ2xldGhyZWFkX2NwdSk7Ci0JCXN0YXJ0X3dvcmtxdWV1ZV90aHJlYWQoY3dxLCAtMSk7Ci0JfSBlbHNlIHsKLQkJY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7Ci0JCS8qCi0JCSAqIFdlIG11c3QgcGxhY2UgdGhpcyB3cSBvbiBsaXN0IGV2ZW4gaWYgdGhlIGNvZGUgYmVsb3cgZmFpbHMuCi0JCSAqIGNwdV9kb3duKGNwdSkgY2FuIHJlbW92ZSBjcHUgZnJvbSBjcHVfcG9wdWxhdGVkX21hcCBiZWZvcmUKLQkJICogZGVzdHJveV93b3JrcXVldWUoKSB0YWtlcyB0aGUgbG9jaywgaW4gdGhhdCBjYXNlIHdlIGxlYWsKLQkJICogY3dxW2NwdV0tPnRocmVhZC4KLQkJICovCi0JCXNwaW5fbG9jaygmd29ya3F1ZXVlX2xvY2spOwotCQlsaXN0X2FkZCgmd3EtPmxpc3QsICZ3b3JrcXVldWVzKTsKLQkJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKLQkJLyoKLQkJICogV2UgbXVzdCBpbml0aWFsaXplIGN3cXMgZm9yIGVhY2ggcG9zc2libGUgY3B1IGV2ZW4gaWYgd2UKLQkJICogYXJlIGdvaW5nIHRvIGNhbGwgZGVzdHJveV93b3JrcXVldWUoKSBmaW5hbGx5LiBPdGhlcndpc2UKLQkJICogY3B1X3VwKCkgY2FuIGhpdCB0aGUgdW5pbml0aWFsaXplZCBjd3Egb25jZSB3ZSBkcm9wIHRoZQotCQkgKiBsb2NrLgotCQkgKi8KLQkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQkJY3dxID0gaW5pdF9jcHVfd29ya3F1ZXVlKHdxLCBjcHUpOwotCQkJaWYgKGVyciB8fCAhY3B1X29ubGluZShjcHUpKQotCQkJCWNvbnRpbnVlOwotCQkJZXJyID0gY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBjcHUpOwotCQkJc3RhcnRfd29ya3F1ZXVlX3RocmVhZChjd3EsIGNwdSk7Ci0JCX0KLQkJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKKwlpZiAoYWxsb2NfY3dxcyh3cSkgPCAwKQorCQlnb3RvIGVycjsKKworCWZvcl9lYWNoX2N3cV9jcHUoY3B1LCB3cSkgeworCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CisJCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gZ2V0X2djd3EoY3B1KTsKKworCQlCVUdfT04oKHVuc2lnbmVkIGxvbmcpY3dxICYgV09SS19TVFJVQ1RfRkxBR19NQVNLKTsKKwkJY3dxLT5nY3dxID0gZ2N3cTsKKwkJY3dxLT53cSA9IHdxOworCQljd3EtPmZsdXNoX2NvbG9yID0gLTE7CisJCWN3cS0+bWF4X2FjdGl2ZSA9IG1heF9hY3RpdmU7CisJCUlOSVRfTElTVF9IRUFEKCZjd3EtPmRlbGF5ZWRfd29ya3MpOwogCX0KIAotCWlmIChlcnIpIHsKLQkJZGVzdHJveV93b3JrcXVldWUod3EpOwotCQl3cSA9IE5VTEw7CisJaWYgKGZsYWdzICYgV1FfUkVTQ1VFUikgeworCQlzdHJ1Y3Qgd29ya2VyICpyZXNjdWVyOworCisJCWlmICghYWxsb2NfbWF5ZGF5X21hc2soJndxLT5tYXlkYXlfbWFzaywgR0ZQX0tFUk5FTCkpCisJCQlnb3RvIGVycjsKKworCQl3cS0+cmVzY3VlciA9IHJlc2N1ZXIgPSBhbGxvY193b3JrZXIoKTsKKwkJaWYgKCFyZXNjdWVyKQorCQkJZ290byBlcnI7CisKKwkJcmVzY3Vlci0+dGFzayA9IGt0aHJlYWRfY3JlYXRlKHJlc2N1ZXJfdGhyZWFkLCB3cSwgIiVzIiwgbmFtZSk7CisJCWlmIChJU19FUlIocmVzY3Vlci0+dGFzaykpCisJCQlnb3RvIGVycjsKKworCQl3cS0+cmVzY3VlciA9IHJlc2N1ZXI7CisJCXJlc2N1ZXItPnRhc2stPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKKwkJd2FrZV91cF9wcm9jZXNzKHJlc2N1ZXItPnRhc2spOwogCX0KKworCS8qCisJICogd29ya3F1ZXVlX2xvY2sgcHJvdGVjdHMgZ2xvYmFsIGZyZWV6ZSBzdGF0ZSBhbmQgd29ya3F1ZXVlcworCSAqIGxpc3QuICBHcmFiIGl0LCBzZXQgbWF4X2FjdGl2ZSBhY2NvcmRpbmdseSBhbmQgYWRkIHRoZSBuZXcKKwkgKiB3b3JrcXVldWUgdG8gd29ya3F1ZXVlcyBsaXN0LgorCSAqLworCXNwaW5fbG9jaygmd29ya3F1ZXVlX2xvY2spOworCisJaWYgKHdvcmtxdWV1ZV9mcmVlemluZyAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKQorCQlmb3JfZWFjaF9jd3FfY3B1KGNwdSwgd3EpCisJCQlnZXRfY3dxKGNwdSwgd3EpLT5tYXhfYWN0aXZlID0gMDsKKworCWxpc3RfYWRkKCZ3cS0+bGlzdCwgJndvcmtxdWV1ZXMpOworCisJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKKwogCXJldHVybiB3cTsKK2VycjoKKwlpZiAod3EpIHsKKwkJZnJlZV9jd3FzKHdxKTsKKwkJZnJlZV9tYXlkYXlfbWFzayh3cS0+bWF5ZGF5X21hc2spOworCQlrZnJlZSh3cS0+cmVzY3Vlcik7CisJCWtmcmVlKHdxKTsKKwl9CisJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2NyZWF0ZV93b3JrcXVldWVfa2V5KTsKLQotc3RhdGljIHZvaWQgY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQotewotCS8qCi0JICogT3VyIGNhbGxlciBpcyBlaXRoZXIgZGVzdHJveV93b3JrcXVldWUoKSBvciBDUFVfUE9TVF9ERUFELAotCSAqIGNwdV9hZGRfcmVtb3ZlX2xvY2sgcHJvdGVjdHMgY3dxLT50aHJlYWQuCi0JICovCi0JaWYgKGN3cS0+dGhyZWFkID09IE5VTEwpCi0JCXJldHVybjsKLQotCWxvY2tfbWFwX2FjcXVpcmUoJmN3cS0+d3EtPmxvY2tkZXBfbWFwKTsKLQlsb2NrX21hcF9yZWxlYXNlKCZjd3EtPndxLT5sb2NrZGVwX21hcCk7Ci0KLQlmbHVzaF9jcHVfd29ya3F1ZXVlKGN3cSk7Ci0JLyoKLQkgKiBJZiB0aGUgY2FsbGVyIGlzIENQVV9QT1NUX0RFQUQgYW5kIGN3cS0+d29ya2xpc3Qgd2FzIG5vdCBlbXB0eSwKLQkgKiBhIGNvbmN1cnJlbnQgZmx1c2hfd29ya3F1ZXVlKCkgY2FuIGluc2VydCBhIGJhcnJpZXIgYWZ0ZXIgdXMuCi0JICogSG93ZXZlciwgaW4gdGhhdCBjYXNlIHJ1bl93b3JrcXVldWUoKSB3b24ndCByZXR1cm4gYW5kIGNoZWNrCi0JICoga3RocmVhZF9zaG91bGRfc3RvcCgpIHVudGlsIGl0IGZsdXNoZXMgYWxsIHdvcmtfc3RydWN0J3MuCi0JICogV2hlbiAtPndvcmtsaXN0IGJlY29tZXMgZW1wdHkgaXQgaXMgc2FmZSB0byBleGl0IGJlY2F1c2Ugbm8KLQkgKiBtb3JlIHdvcmtfc3RydWN0cyBjYW4gYmUgcXVldWVkIG9uIHRoaXMgY3dxOiBmbHVzaF93b3JrcXVldWUKLQkgKiBjaGVja3MgbGlzdF9lbXB0eSgpLCBhbmQgYSAibm9ybWFsIiBxdWV1ZV93b3JrKCkgY2FuJ3QgdXNlCi0JICogYSBkZWFkIENQVS4KLQkgKi8KLQl0cmFjZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24oY3dxLT50aHJlYWQpOwotCWt0aHJlYWRfc3RvcChjd3EtPnRocmVhZCk7Ci0JY3dxLT50aHJlYWQgPSBOVUxMOwotfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hbGxvY193b3JrcXVldWVfa2V5KTsKIAogLyoqCiAgKiBkZXN0cm95X3dvcmtxdWV1ZSAtIHNhZmVseSB0ZXJtaW5hdGUgYSB3b3JrcXVldWUKQEAgLTEwODYsNzIgKzI4MjIsNTE2IEBACiAgKi8KIHZvaWQgZGVzdHJveV93b3JrcXVldWUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxKQogewotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwID0gd3FfY3B1X21hcCh3cSk7Ci0JaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCi0JY3B1X21hcHNfdXBkYXRlX2JlZ2luKCk7CisJZmx1c2hfd29ya3F1ZXVlKHdxKTsKKworCS8qCisJICogd3EgbGlzdCBpcyB1c2VkIHRvIGZyZWV6ZSB3cSwgcmVtb3ZlIGZyb20gbGlzdCBhZnRlcgorCSAqIGZsdXNoaW5nIGlzIGNvbXBsZXRlIGluIGNhc2UgZnJlZXplIHJhY2VzIHVzLgorCSAqLwogCXNwaW5fbG9jaygmd29ya3F1ZXVlX2xvY2spOwogCWxpc3RfZGVsKCZ3cS0+bGlzdCk7CiAJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9tYXApCi0JCWNsZWFudXBfd29ya3F1ZXVlX3RocmVhZChwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpKTsKLSAJY3B1X21hcHNfdXBkYXRlX2RvbmUoKTsKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlmb3JfZWFjaF9jd3FfY3B1KGNwdSwgd3EpIHsKKwkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOworCQlpbnQgaTsKIAotCWZyZWVfcGVyY3B1KHdxLT5jcHVfd3EpOworCQlmb3IgKGkgPSAwOyBpIDwgV09SS19OUl9DT0xPUlM7IGkrKykKKwkJCUJVR19PTihjd3EtPm5yX2luX2ZsaWdodFtpXSk7CisJCUJVR19PTihjd3EtPm5yX2FjdGl2ZSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmY3dxLT5kZWxheWVkX3dvcmtzKSk7CisJfQorCisJaWYgKHdxLT5mbGFncyAmIFdRX1JFU0NVRVIpIHsKKwkJa3RocmVhZF9zdG9wKHdxLT5yZXNjdWVyLT50YXNrKTsKKwkJZnJlZV9tYXlkYXlfbWFzayh3cS0+bWF5ZGF5X21hc2spOworCX0KKworCWZyZWVfY3dxcyh3cSk7CiAJa2ZyZWUod3EpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGVzdHJveV93b3JrcXVldWUpOwogCisvKioKKyAqIHdvcmtxdWV1ZV9zZXRfbWF4X2FjdGl2ZSAtIGFkanVzdCBtYXhfYWN0aXZlIG9mIGEgd29ya3F1ZXVlCisgKiBAd3E6IHRhcmdldCB3b3JrcXVldWUKKyAqIEBtYXhfYWN0aXZlOiBuZXcgbWF4X2FjdGl2ZSB2YWx1ZS4KKyAqCisgKiBTZXQgbWF4X2FjdGl2ZSBvZiBAd3EgdG8gQG1heF9hY3RpdmUuCisgKgorICogQ09OVEVYVDoKKyAqIERvbid0IGNhbGwgZnJvbSBJUlEgY29udGV4dC4KKyAqLwordm9pZCB3b3JrcXVldWVfc2V0X21heF9hY3RpdmUoc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBpbnQgbWF4X2FjdGl2ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJbWF4X2FjdGl2ZSA9IHdxX2NsYW1wX21heF9hY3RpdmUobWF4X2FjdGl2ZSwgd3EtPmZsYWdzLCB3cS0+bmFtZSk7CisKKwlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKKworCXdxLT5zYXZlZF9tYXhfYWN0aXZlID0gbWF4X2FjdGl2ZTsKKworCWZvcl9lYWNoX2N3cV9jcHUoY3B1LCB3cSkgeworCQlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwkJaWYgKCEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkgfHwKKwkJICAgICEoZ2N3cS0+ZmxhZ3MgJiBHQ1dRX0ZSRUVaSU5HKSkKKwkJCWdldF9jd3EoZ2N3cS0+Y3B1LCB3cSktPm1heF9hY3RpdmUgPSBtYXhfYWN0aXZlOworCisJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdvcmtxdWV1ZV9zZXRfbWF4X2FjdGl2ZSk7CisKKy8qKgorICogd29ya3F1ZXVlX2Nvbmdlc3RlZCAtIHRlc3Qgd2hldGhlciBhIHdvcmtxdWV1ZSBpcyBjb25nZXN0ZWQKKyAqIEBjcHU6IENQVSBpbiBxdWVzdGlvbgorICogQHdxOiB0YXJnZXQgd29ya3F1ZXVlCisgKgorICogVGVzdCB3aGV0aGVyIEB3cSdzIGNwdSB3b3JrcXVldWUgZm9yIEBjcHUgaXMgY29uZ2VzdGVkLiAgVGhlcmUgaXMKKyAqIG5vIHN5bmNocm9uaXphdGlvbiBhcm91bmQgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIHRlc3QgcmVzdWx0IGlzCisgKiB1bnJlbGlhYmxlIGFuZCBvbmx5IHVzZWZ1bCBhcyBhZHZpc29yeSBoaW50cyBvciBmb3IgZGVidWdnaW5nLgorICoKKyAqIFJFVFVSTlM6CisgKiAldHJ1ZSBpZiBjb25nZXN0ZWQsICVmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgd29ya3F1ZXVlX2Nvbmdlc3RlZCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCit7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOworCisJcmV0dXJuICFsaXN0X2VtcHR5KCZjd3EtPmRlbGF5ZWRfd29ya3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwod29ya3F1ZXVlX2Nvbmdlc3RlZCk7CisKKy8qKgorICogd29ya19jcHUgLSByZXR1cm4gdGhlIGxhc3Qga25vd24gYXNzb2NpYXRlZCBjcHUgZm9yIEB3b3JrCisgKiBAd29yazogdGhlIHdvcmsgb2YgaW50ZXJlc3QKKyAqCisgKiBSRVRVUk5TOgorICogQ1BVIG51bWJlciBpZiBAd29yayB3YXMgZXZlciBxdWV1ZWQuICBXT1JLX0NQVV9OT05FIG90aGVyd2lzZS4KKyAqLwordW5zaWduZWQgaW50IHdvcmtfY3B1KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF93b3JrX2djd3Eod29yayk7CisKKwlyZXR1cm4gZ2N3cSA/IGdjd3EtPmNwdSA6IFdPUktfQ1BVX05PTkU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3b3JrX2NwdSk7CisKKy8qKgorICogd29ya19idXN5IC0gdGVzdCB3aGV0aGVyIGEgd29yayBpcyBjdXJyZW50bHkgcGVuZGluZyBvciBydW5uaW5nCisgKiBAd29yazogdGhlIHdvcmsgdG8gYmUgdGVzdGVkCisgKgorICogVGVzdCB3aGV0aGVyIEB3b3JrIGlzIGN1cnJlbnRseSBwZW5kaW5nIG9yIHJ1bm5pbmcuICBUaGVyZSBpcyBubworICogc3luY2hyb25pemF0aW9uIGFyb3VuZCB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgdGVzdCByZXN1bHQgaXMKKyAqIHVucmVsaWFibGUgYW5kIG9ubHkgdXNlZnVsIGFzIGFkdmlzb3J5IGhpbnRzIG9yIGZvciBkZWJ1Z2dpbmcuCisgKiBFc3BlY2lhbGx5IGZvciByZWVudHJhbnQgd3FzLCB0aGUgcGVuZGluZyBzdGF0ZSBtaWdodCBoaWRlIHRoZQorICogcnVubmluZyBzdGF0ZS4KKyAqCisgKiBSRVRVUk5TOgorICogT1InZCBiaXRtYXNrIG9mIFdPUktfQlVTWV8qIGJpdHMuCisgKi8KK3Vuc2lnbmVkIGludCB3b3JrX2J1c3koc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gZ2V0X3dvcmtfZ2N3cSh3b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJaWYgKCFnY3dxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2N3cS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHdvcmtfcGVuZGluZyh3b3JrKSkKKwkJcmV0IHw9IFdPUktfQlVTWV9QRU5ESU5HOworCWlmIChmaW5kX3dvcmtlcl9leGVjdXRpbmdfd29yayhnY3dxLCB3b3JrKSkKKwkJcmV0IHw9IFdPUktfQlVTWV9SVU5OSU5HOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2N3cS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdvcmtfYnVzeSk7CisKKy8qCisgKiBDUFUgaG90cGx1Zy4KKyAqCisgKiBUaGVyZSBhcmUgdHdvIGNoYWxsZW5nZXMgaW4gc3VwcG9ydGluZyBDUFUgaG90cGx1Zy4gIEZpcnN0bHksIHRoZXJlCisgKiBhcmUgYSBsb3Qgb2YgYXNzdW1wdGlvbnMgb24gc3Ryb25nIGFzc29jaWF0aW9ucyBhbW9uZyB3b3JrLCBjd3EgYW5kCisgKiBnY3dxIHdoaWNoIG1ha2UgbWlncmF0aW5nIHBlbmRpbmcgYW5kIHNjaGVkdWxlZCB3b3JrcyB2ZXJ5CisgKiBkaWZmaWN1bHQgdG8gaW1wbGVtZW50IHdpdGhvdXQgaW1wYWN0aW5nIGhvdCBwYXRocy4gIFNlY29uZGx5LAorICogZ2N3cXMgc2VydmUgbWl4IG9mIHNob3J0LCBsb25nIGFuZCB2ZXJ5IGxvbmcgcnVubmluZyB3b3JrcyBtYWtpbmcKKyAqIGJsb2NrZWQgZHJhaW5pbmcgaW1wcmFjdGljYWwuCisgKgorICogVGhpcyBpcyBzb2x2ZWQgYnkgYWxsb3dpbmcgYSBnY3dxIHRvIGJlIGRldGFjaGVkIGZyb20gQ1BVLCBydW5uaW5nCisgKiBpdCB3aXRoIHVuYm91bmQgKHJvZ3VlKSB3b3JrZXJzIGFuZCBhbGxvd2luZyBpdCB0byBiZSByZWF0dGFjaGVkCisgKiBsYXRlciBpZiB0aGUgY3B1IGNvbWVzIGJhY2sgb25saW5lLiAgQSBzZXBhcmF0ZSB0aHJlYWQgaXMgY3JlYXRlZAorICogdG8gZ292ZXJuIGEgZ2N3cSBpbiBzdWNoIHN0YXRlIGFuZCBpcyBjYWxsZWQgdGhlIHRydXN0ZWUgb2YgdGhlCisgKiBnY3dxLgorICoKKyAqIFRydXN0ZWUgc3RhdGVzIGFuZCB0aGVpciBkZXNjcmlwdGlvbnMuCisgKgorICogU1RBUlQJQ29tbWFuZCBzdGF0ZSB1c2VkIG9uIHN0YXJ0dXAuICBPbiBDUFVfRE9XTl9QUkVQQVJFLCBhCisgKgkJbmV3IHRydXN0ZWUgaXMgc3RhcnRlZCB3aXRoIHRoaXMgc3RhdGUuCisgKgorICogSU5fQ0hBUkdFCU9uY2Ugc3RhcnRlZCwgdHJ1c3RlZSB3aWxsIGVudGVyIHRoaXMgc3RhdGUgYWZ0ZXIKKyAqCQlhc3N1bWluZyB0aGUgbWFuYWdlciByb2xlIGFuZCBtYWtpbmcgYWxsIGV4aXN0aW5nCisgKgkJd29ya2VycyByb2d1ZS4gIERPV05fUFJFUEFSRSB3YWl0cyBmb3IgdHJ1c3RlZSB0bworICoJCWVudGVyIHRoaXMgc3RhdGUuICBBZnRlciByZWFjaGluZyBJTl9DSEFSR0UsIHRydXN0ZWUKKyAqCQl0cmllcyB0byBleGVjdXRlIHRoZSBwZW5kaW5nIHdvcmtsaXN0IHVudGlsIGl0J3MgZW1wdHkKKyAqCQlhbmQgdGhlIHN0YXRlIGlzIHNldCB0byBCVVRDSEVSLCBvciB0aGUgc3RhdGUgaXMgc2V0CisgKgkJdG8gUkVMRUFTRS4KKyAqCisgKiBCVVRDSEVSCUNvbW1hbmQgc3RhdGUgd2hpY2ggaXMgc2V0IGJ5IHRoZSBjcHUgY2FsbGJhY2sgYWZ0ZXIKKyAqCQl0aGUgY3B1IGhhcyB3ZW50IGRvd24uICBPbmNlIHRoaXMgc3RhdGUgaXMgc2V0IHRydXN0ZWUKKyAqCQlrbm93cyB0aGF0IHRoZXJlIHdpbGwgYmUgbm8gbmV3IHdvcmtzIG9uIHRoZSB3b3JrbGlzdAorICoJCWFuZCBvbmNlIHRoZSB3b3JrbGlzdCBpcyBlbXB0eSBpdCBjYW4gcHJvY2VlZCB0bworICoJCWtpbGxpbmcgaWRsZSB3b3JrZXJzLgorICoKKyAqIFJFTEVBU0UJQ29tbWFuZCBzdGF0ZSB3aGljaCBpcyBzZXQgYnkgdGhlIGNwdSBjYWxsYmFjayBpZiB0aGUKKyAqCQljcHUgZG93biBoYXMgYmVlbiBjYW5jZWxlZCBvciBpdCBoYXMgY29tZSBvbmxpbmUKKyAqCQlhZ2Fpbi4gIEFmdGVyIHJlY29nbml6aW5nIHRoaXMgc3RhdGUsIHRydXN0ZWUgc3RvcHMKKyAqCQl0cnlpbmcgdG8gZHJhaW4gb3IgYnV0Y2hlciBhbmQgY2xlYXJzIFJPR1VFLCByZWJpbmRzCisgKgkJYWxsIHJlbWFpbmluZyB3b3JrZXJzIGJhY2sgdG8gdGhlIGNwdSBhbmQgcmVsZWFzZXMKKyAqCQltYW5hZ2VyIHJvbGUuCisgKgorICogRE9ORQkJVHJ1c3RlZSB3aWxsIGVudGVyIHRoaXMgc3RhdGUgYWZ0ZXIgQlVUQ0hFUiBvciBSRUxFQVNFCisgKgkJaXMgY29tcGxldGUuCisgKgorICogICAgICAgICAgdHJ1c3RlZSAgICAgICAgICAgICAgICAgQ1BVICAgICAgICAgICAgICAgIGRyYWluaW5nCisgKiAgICAgICAgIHRvb2sgb3ZlciAgICAgICAgICAgICAgICBkb3duICAgICAgICAgICAgICAgY29tcGxldGUKKyAqIFNUQVJUIC0tLS0tLS0tLS0tPiBJTl9DSEFSR0UgLS0tLS0tLS0tLS0+IEJVVENIRVIgLS0tLS0tLS0tLS0+IERPTkUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICBeCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHwgQ1BVIGlzIGJhY2sgb25saW5lICB2ICAgcmV0dXJuIHdvcmtlcnMgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLT4gUkVMRUFTRSAtLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogdHJ1c3RlZV93YWl0X2V2ZW50X3RpbWVvdXQgLSB0aW1lZCBldmVudCB3YWl0IGZvciB0cnVzdGVlCisgKiBAY29uZDogY29uZGl0aW9uIHRvIHdhaXQgZm9yCisgKiBAdGltZW91dDogdGltZW91dCBpbiBqaWZmaWVzCisgKgorICogd2FpdF9ldmVudF90aW1lb3V0KCkgZm9yIHRydXN0ZWUgdG8gdXNlLiAgSGFuZGxlcyBsb2NraW5nIGFuZAorICogY2hlY2tzIGZvciBSRUxFQVNFIHJlcXVlc3QuCisgKgorICogQ09OVEVYVDoKKyAqIHNwaW5fbG9ja19pcnEoZ2N3cS0+bG9jaykgd2hpY2ggbWF5IGJlIHJlbGVhc2VkIGFuZCByZWdyYWJiZWQKKyAqIG11bHRpcGxlIHRpbWVzLiAgVG8gYmUgdXNlZCBieSB0cnVzdGVlLgorICoKKyAqIFJFVFVSTlM6CisgKiBQb3NpdGl2ZSBpbmRpY2F0aW5nIGxlZnQgdGltZSBpZiBAY29uZCBpcyBzYXRpc2ZpZWQsIDAgaWYgdGltZWQKKyAqIG91dCwgLTEgaWYgY2FuY2VsZWQuCisgKi8KKyNkZWZpbmUgdHJ1c3RlZV93YWl0X2V2ZW50X3RpbWVvdXQoY29uZCwgdGltZW91dCkgKHsJCQlcCisJbG9uZyBfX3JldCA9ICh0aW1lb3V0KTsJCQkJCQlcCisJd2hpbGUgKCEoKGNvbmQpIHx8IChnY3dxLT50cnVzdGVlX3N0YXRlID09IFRSVVNURUVfUkVMRUFTRSkpICYmCVwKKwkgICAgICAgX19yZXQpIHsJCQkJCQkJXAorCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwkJCQlcCisJCV9fd2FpdF9ldmVudF90aW1lb3V0KGdjd3EtPnRydXN0ZWVfd2FpdCwgKGNvbmQpIHx8CVwKKwkJCShnY3dxLT50cnVzdGVlX3N0YXRlID09IFRSVVNURUVfUkVMRUFTRSksCVwKKwkJCV9fcmV0KTsJCQkJCQlcCisJCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOwkJCQlcCisJfQkJCQkJCQkJXAorCWdjd3EtPnRydXN0ZWVfc3RhdGUgPT0gVFJVU1RFRV9SRUxFQVNFID8gLTEgOiAoX19yZXQpOwkJXAorfSkKKworLyoqCisgKiB0cnVzdGVlX3dhaXRfZXZlbnQgLSBldmVudCB3YWl0IGZvciB0cnVzdGVlCisgKiBAY29uZDogY29uZGl0aW9uIHRvIHdhaXQgZm9yCisgKgorICogd2FpdF9ldmVudCgpIGZvciB0cnVzdGVlIHRvIHVzZS4gIEF1dG9tYXRpY2FsbHkgaGFuZGxlcyBsb2NraW5nIGFuZAorICogY2hlY2tzIGZvciBDQU5DRUwgcmVxdWVzdC4KKyAqCisgKiBDT05URVhUOgorICogc3Bpbl9sb2NrX2lycShnY3dxLT5sb2NrKSB3aGljaCBtYXkgYmUgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZAorICogbXVsdGlwbGUgdGltZXMuICBUbyBiZSB1c2VkIGJ5IHRydXN0ZWUuCisgKgorICogUkVUVVJOUzoKKyAqIDAgaWYgQGNvbmQgaXMgc2F0aXNmaWVkLCAtMSBpZiBjYW5jZWxlZC4KKyAqLworI2RlZmluZSB0cnVzdGVlX3dhaXRfZXZlbnQoY29uZCkgKHsJCQkJCVwKKwlsb25nIF9fcmV0MTsJCQkJCQkJXAorCV9fcmV0MSA9IHRydXN0ZWVfd2FpdF9ldmVudF90aW1lb3V0KGNvbmQsIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcCisJX19yZXQxIDwgMCA/IC0xIDogMDsJCQkJCQlcCit9KQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCB0cnVzdGVlX3RocmVhZCh2b2lkICpfX2djd3EpCit7CisJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSBfX2djd3E7CisJc3RydWN0IHdvcmtlciAqd29ya2VyOworCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yazsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCWxvbmcgcmM7CisJaW50IGk7CisKKwlCVUdfT04oZ2N3cS0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwkvKgorCSAqIENsYWltIHRoZSBtYW5hZ2VyIHBvc2l0aW9uIGFuZCBtYWtlIGFsbCB3b3JrZXJzIHJvZ3VlLgorCSAqIFRydXN0ZWUgbXVzdCBiZSBib3VuZCB0byB0aGUgdGFyZ2V0IGNwdSBhbmQgY2FuJ3QgYmUKKwkgKiBjYW5jZWxsZWQuCisJICovCisJQlVHX09OKGdjd3EtPmNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJjID0gdHJ1c3RlZV93YWl0X2V2ZW50KCEoZ2N3cS0+ZmxhZ3MgJiBHQ1dRX01BTkFHSU5HX1dPUktFUlMpKTsKKwlCVUdfT04ocmMgPCAwKTsKKworCWdjd3EtPmZsYWdzIHw9IEdDV1FfTUFOQUdJTkdfV09SS0VSUzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkod29ya2VyLCAmZ2N3cS0+aWRsZV9saXN0LCBlbnRyeSkKKwkJd29ya2VyLT5mbGFncyB8PSBXT1JLRVJfUk9HVUU7CisKKwlmb3JfZWFjaF9idXN5X3dvcmtlcih3b3JrZXIsIGksIHBvcywgZ2N3cSkKKwkJd29ya2VyLT5mbGFncyB8PSBXT1JLRVJfUk9HVUU7CisKKwkvKgorCSAqIENhbGwgc2NoZWR1bGUoKSBzbyB0aGF0IHdlIGNyb3NzIHJxLT5sb2NrIGFuZCB0aHVzIGNhbgorCSAqIGd1YXJhbnRlZSBzY2hlZCBjYWxsYmFja3Mgc2VlIHRoZSByb2d1ZSBmbGFnLiAgVGhpcyBpcworCSAqIG5lY2Vzc2FyeSBhcyBzY2hlZHVsZXIgY2FsbGJhY2tzIG1heSBiZSBpbnZva2VkIGZyb20gb3RoZXIKKwkgKiBjcHVzLgorCSAqLworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJc2NoZWR1bGUoKTsKKwlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKworCS8qCisJICogU2NoZWQgY2FsbGJhY2tzIGFyZSBkaXNhYmxlZCBub3cuICBaYXAgbnJfcnVubmluZy4gIEFmdGVyCisJICogdGhpcywgbnJfcnVubmluZyBzdGF5cyB6ZXJvIGFuZCBuZWVkX21vcmVfd29ya2VyKCkgYW5kCisJICoga2VlcF93b3JraW5nKCkgYXJlIGFsd2F5cyB0cnVlIGFzIGxvbmcgYXMgdGhlIHdvcmtsaXN0IGlzCisJICogbm90IGVtcHR5LgorCSAqLworCWF0b21pY19zZXQoZ2V0X2djd3FfbnJfcnVubmluZyhnY3dxLT5jcHUpLCAwKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJZGVsX3RpbWVyX3N5bmMoJmdjd3EtPmlkbGVfdGltZXIpOworCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCisJLyoKKwkgKiBXZSdyZSBub3cgaW4gY2hhcmdlLiAgTm90aWZ5IGFuZCBwcm9jZWVkIHRvIGRyYWluLiAgV2UgbmVlZAorCSAqIHRvIGtlZXAgdGhlIGdjd3EgcnVubmluZyBkdXJpbmcgdGhlIHdob2xlIENQVSBkb3duCisJICogcHJvY2VkdXJlIGFzIG90aGVyIGNwdSBob3R1bnBsdWcgY2FsbGJhY2tzIG1heSBuZWVkIHRvCisJICogZmx1c2ggY3VycmVudGx5IHJ1bm5pbmcgdGFza3MuCisJICovCisJZ2N3cS0+dHJ1c3RlZV9zdGF0ZSA9IFRSVVNURUVfSU5fQ0hBUkdFOworCXdha2VfdXBfYWxsKCZnY3dxLT50cnVzdGVlX3dhaXQpOworCisJLyoKKwkgKiBUaGUgb3JpZ2luYWwgY3B1IGlzIGluIHRoZSBwcm9jZXNzIG9mIGR5aW5nIGFuZCBtYXkgZ28gYXdheQorCSAqIGFueXRpbWUgbm93LiAgV2hlbiB0aGF0IGhhcHBlbnMsIHdlIGFuZCBhbGwgd29ya2VycyB3b3VsZAorCSAqIGJlIG1pZ3JhdGVkIHRvIG90aGVyIGNwdXMuICBUcnkgZHJhaW5pbmcgYW55IGxlZnQgd29yay4gIFdlCisJICogd2FudCB0byBnZXQgaXQgb3ZlciB3aXRoIEFTQVAgLSBzcGFtIHJlc2N1ZXJzLCB3YWtlIHVwIGFzCisJICogbWFueSBpZGxlcnMgYXMgbmVjZXNzYXJ5IGFuZCBjcmVhdGUgbmV3IG9uZXMgdGlsbCB0aGUKKwkgKiB3b3JrbGlzdCBpcyBlbXB0eS4gIE5vdGUgdGhhdCBpZiB0aGUgZ2N3cSBpcyBmcm96ZW4sIHRoZXJlCisJICogbWF5IGJlIGZyb3plbiB3b3JrcyBpbiBmcmVlemVhYmxlIGN3cXMuICBEb24ndCBkZWNsYXJlCisJICogY29tcGxldGlvbiB3aGlsZSBmcm96ZW4uCisJICovCisJd2hpbGUgKGdjd3EtPm5yX3dvcmtlcnMgIT0gZ2N3cS0+bnJfaWRsZSB8fAorCSAgICAgICBnY3dxLT5mbGFncyAmIEdDV1FfRlJFRVpJTkcgfHwKKwkgICAgICAgZ2N3cS0+dHJ1c3RlZV9zdGF0ZSA9PSBUUlVTVEVFX0lOX0NIQVJHRSkgeworCQlpbnQgbnJfd29ya3MgPSAwOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkod29yaywgJmdjd3EtPndvcmtsaXN0LCBlbnRyeSkgeworCQkJc2VuZF9tYXlkYXkod29yayk7CisJCQlucl93b3JrcysrOworCQl9CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3b3JrZXIsICZnY3dxLT5pZGxlX2xpc3QsIGVudHJ5KSB7CisJCQlpZiAoIW5yX3dvcmtzLS0pCisJCQkJYnJlYWs7CisJCQl3YWtlX3VwX3Byb2Nlc3Mod29ya2VyLT50YXNrKTsKKwkJfQorCisJCWlmIChuZWVkX3RvX2NyZWF0ZV93b3JrZXIoZ2N3cSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJCQl3b3JrZXIgPSBjcmVhdGVfd29ya2VyKGdjd3EsIGZhbHNlKTsKKwkJCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCQkJaWYgKHdvcmtlcikgeworCQkJCXdvcmtlci0+ZmxhZ3MgfD0gV09SS0VSX1JPR1VFOworCQkJCXN0YXJ0X3dvcmtlcih3b3JrZXIpOworCQkJfQorCQl9CisKKwkJLyogZ2l2ZSBhIGJyZWF0aGVyICovCisJCWlmICh0cnVzdGVlX3dhaXRfZXZlbnRfdGltZW91dChmYWxzZSwgVFJVU1RFRV9DT09MRE9XTikgPCAwKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgYWxsIHdvcmtzIGhhdmUgYmVlbiBzY2hlZHVsZWQgYW5kIGNwdSBpcyBkb3duLCBvcgorCSAqIGNwdSBkb3duIGhhcyBhbHJlYWR5IGJlZW4gY2FuY2VsZWQuICBXYWl0IGZvciBhbmQgYnV0Y2hlcgorCSAqIGFsbCB3b3JrZXJzIHRpbGwgd2UncmUgY2FuY2VsZWQuCisJICovCisJZG8geworCQlyYyA9IHRydXN0ZWVfd2FpdF9ldmVudCghbGlzdF9lbXB0eSgmZ2N3cS0+aWRsZV9saXN0KSk7CisJCXdoaWxlICghbGlzdF9lbXB0eSgmZ2N3cS0+aWRsZV9saXN0KSkKKwkJCWRlc3Ryb3lfd29ya2VyKGxpc3RfZmlyc3RfZW50cnkoJmdjd3EtPmlkbGVfbGlzdCwKKwkJCQkJCQlzdHJ1Y3Qgd29ya2VyLCBlbnRyeSkpOworCX0gd2hpbGUgKGdjd3EtPm5yX3dvcmtlcnMgJiYgcmMgPj0gMCk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIGVpdGhlciBkcmFpbmluZyBoYXMgY29tcGxldGVkIGFuZCBubyB3b3JrZXIKKwkgKiBpcyBsZWZ0LCBvciBjcHUgZG93biBoYXMgYmVlbiBjYW5jZWxlZCBvciB0aGUgY3B1IGlzIGJlaW5nCisJICogYnJvdWdodCBiYWNrIHVwLiAgVGhlcmUgc2hvdWxkbid0IGJlIGFueSBpZGxlIG9uZSBsZWZ0LgorCSAqIFRlbGwgdGhlIHJlbWFpbmluZyBidXN5IG9uZXMgdG8gcmViaW5kIG9uY2UgaXQgZmluaXNoZXMgdGhlCisJICogY3VycmVudGx5IHNjaGVkdWxlZCB3b3JrcyBieSBzY2hlZHVsaW5nIHRoZSByZWJpbmRfd29yay4KKwkgKi8KKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZnY3dxLT5pZGxlX2xpc3QpKTsKKworCWZvcl9lYWNoX2J1c3lfd29ya2VyKHdvcmtlciwgaSwgcG9zLCBnY3dxKSB7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCAqcmViaW5kX3dvcmsgPSAmd29ya2VyLT5yZWJpbmRfd29yazsKKworCQkvKgorCQkgKiBSZWJpbmRfd29yayBtYXkgcmFjZSB3aXRoIGZ1dHVyZSBjcHUgaG90cGx1ZworCQkgKiBvcGVyYXRpb25zLiAgVXNlIGEgc2VwYXJhdGUgZmxhZyB0byBtYXJrIHRoYXQKKwkJICogcmViaW5kaW5nIGlzIHNjaGVkdWxlZC4KKwkJICovCisJCXdvcmtlci0+ZmxhZ3MgfD0gV09SS0VSX1JFQklORDsKKwkJd29ya2VyLT5mbGFncyAmPSB+V09SS0VSX1JPR1VFOworCisJCS8qIHF1ZXVlIHJlYmluZF93b3JrLCB3cSBkb2Vzbid0IG1hdHRlciwgdXNlIHRoZSBkZWZhdWx0IG9uZSAqLworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChXT1JLX1NUUlVDVF9QRU5ESU5HX0JJVCwKKwkJCQkgICAgIHdvcmtfZGF0YV9iaXRzKHJlYmluZF93b3JrKSkpCisJCQljb250aW51ZTsKKworCQlkZWJ1Z193b3JrX2FjdGl2YXRlKHJlYmluZF93b3JrKTsKKwkJaW5zZXJ0X3dvcmsoZ2V0X2N3cShnY3dxLT5jcHUsIHN5c3RlbV93cSksIHJlYmluZF93b3JrLAorCQkJICAgIHdvcmtlci0+c2NoZWR1bGVkLm5leHQsCisJCQkgICAgd29ya19jb2xvcl90b19mbGFncyhXT1JLX05PX0NPTE9SKSk7CisJfQorCisJLyogcmVsaW5xdWlzaCBtYW5hZ2VyIHJvbGUgKi8KKwlnY3dxLT5mbGFncyAmPSB+R0NXUV9NQU5BR0lOR19XT1JLRVJTOworCisJLyogbm90aWZ5IGNvbXBsZXRpb24gKi8KKwlnY3dxLT50cnVzdGVlID0gTlVMTDsKKwlnY3dxLT50cnVzdGVlX3N0YXRlID0gVFJVU1RFRV9ET05FOworCXdha2VfdXBfYWxsKCZnY3dxLT50cnVzdGVlX3dhaXQpOworCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogd2FpdF90cnVzdGVlX3N0YXRlIC0gd2FpdCBmb3IgdHJ1c3RlZSB0byBlbnRlciB0aGUgc3BlY2lmaWVkIHN0YXRlCisgKiBAZ2N3cTogZ2N3cSB0aGUgdHJ1c3RlZSBvZiBpbnRlcmVzdCBiZWxvbmdzIHRvCisgKiBAc3RhdGU6IHRhcmdldCBzdGF0ZSB0byB3YWl0IGZvcgorICoKKyAqIFdhaXQgZm9yIHRoZSB0cnVzdGVlIHRvIHJlYWNoIEBzdGF0ZS4gIERPTkUgaXMgYWxyZWFkeSBtYXRjaGVkLgorICoKKyAqIENPTlRFWFQ6CisgKiBzcGluX2xvY2tfaXJxKGdjd3EtPmxvY2spIHdoaWNoIG1heSBiZSByZWxlYXNlZCBhbmQgcmVncmFiYmVkCisgKiBtdWx0aXBsZSB0aW1lcy4gIFRvIGJlIHVzZWQgYnkgY3B1X2NhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgd2FpdF90cnVzdGVlX3N0YXRlKHN0cnVjdCBnbG9iYWxfY3dxICpnY3dxLCBpbnQgc3RhdGUpCit7CisJaWYgKCEoZ2N3cS0+dHJ1c3RlZV9zdGF0ZSA9PSBzdGF0ZSB8fAorCSAgICAgIGdjd3EtPnRydXN0ZWVfc3RhdGUgPT0gVFJVU1RFRV9ET05FKSkgeworCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworCQlfX3dhaXRfZXZlbnQoZ2N3cS0+dHJ1c3RlZV93YWl0LAorCQkJICAgICBnY3dxLT50cnVzdGVlX3N0YXRlID09IHN0YXRlIHx8CisJCQkgICAgIGdjd3EtPnRydXN0ZWVfc3RhdGUgPT0gVFJVU1RFRV9ET05FKTsKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJfQorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB3b3JrcXVldWVfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkJCQl2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwotCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpuZXdfdHJ1c3RlZSA9IE5VTEw7CisJc3RydWN0IHdvcmtlciAqdW5pbml0aWFsaXplZF92YXIobmV3X3dvcmtlcik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWFjdGlvbiAmPSB+Q1BVX1RBU0tTX0ZST1pFTjsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQluZXdfdHJ1c3RlZSA9IGt0aHJlYWRfY3JlYXRlKHRydXN0ZWVfdGhyZWFkLCBnY3dxLAorCQkJCQkgICAgICJ3b3JrcXVldWVfdHJ1c3RlZS8lZFxuIiwgY3B1KTsKKwkJaWYgKElTX0VSUihuZXdfdHJ1c3RlZSkpCisJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhQVFJfRVJSKG5ld190cnVzdGVlKSk7CisJCWt0aHJlYWRfYmluZChuZXdfdHJ1c3RlZSwgY3B1KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X3BvcHVsYXRlZF9tYXApOwotCX0KLXVuZG86Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKLQkJY3dxID0gcGVyX2NwdV9wdHIod3EtPmNwdV93cSwgY3B1KTsKLQotCQlzd2l0Y2ggKGFjdGlvbikgewotCQljYXNlIENQVV9VUF9QUkVQQVJFOgotCQkJZXJyID0gY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBjcHUpOwotCQkJaWYgKCFlcnIpCi0JCQkJYnJlYWs7Ci0JCQlwcmludGsoS0VSTl9FUlIgIndvcmtxdWV1ZSBbJXNdIGZvciAlaSBmYWlsZWRcbiIsCi0JCQkJd3EtPm5hbWUsIGNwdSk7Ci0JCQlhY3Rpb24gPSBDUFVfVVBfQ0FOQ0VMRUQ7Ci0JCQllcnIgPSAtRU5PTUVNOwotCQkJZ290byB1bmRvOwotCi0JCWNhc2UgQ1BVX09OTElORToKLQkJCXN0YXJ0X3dvcmtxdWV1ZV90aHJlYWQoY3dxLCBjcHUpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6Ci0JCQlzdGFydF93b3JrcXVldWVfdGhyZWFkKGN3cSwgLTEpOwotCQljYXNlIENQVV9QT1NUX0RFQUQ6Ci0JCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQoY3dxKTsKLQkJCWJyZWFrOworCQlCVUdfT04oZ2N3cS0+Zmlyc3RfaWRsZSk7CisJCW5ld193b3JrZXIgPSBjcmVhdGVfd29ya2VyKGdjd3EsIGZhbHNlKTsKKwkJaWYgKCFuZXdfd29ya2VyKSB7CisJCQlpZiAobmV3X3RydXN0ZWUpCisJCQkJa3RocmVhZF9zdG9wKG5ld190cnVzdGVlKTsKKwkJCXJldHVybiBOT1RJRllfQkFEOwogCQl9CiAJfQogCisJLyogc29tZSBhcmUgY2FsbGVkIHcvIGlycSBkaXNhYmxlZCwgZG9uJ3QgZGlzdHVyYiBpcnEgc3RhdHVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdjd3EtPmxvY2ssIGZsYWdzKTsKKwogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQkvKiBpbml0aWFsaXplIHRydXN0ZWUgYW5kIHRlbGwgaXQgdG8gYWNxdWlyZSB0aGUgZ2N3cSAqLworCQlCVUdfT04oZ2N3cS0+dHJ1c3RlZSB8fCBnY3dxLT50cnVzdGVlX3N0YXRlICE9IFRSVVNURUVfRE9ORSk7CisJCWdjd3EtPnRydXN0ZWUgPSBuZXdfdHJ1c3RlZTsKKwkJZ2N3cS0+dHJ1c3RlZV9zdGF0ZSA9IFRSVVNURUVfU1RBUlQ7CisJCXdha2VfdXBfcHJvY2VzcyhnY3dxLT50cnVzdGVlKTsKKwkJd2FpdF90cnVzdGVlX3N0YXRlKGdjd3EsIFRSVVNURUVfSU5fQ0hBUkdFKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwkJQlVHX09OKGdjd3EtPmZpcnN0X2lkbGUpOworCQlnY3dxLT5maXJzdF9pZGxlID0gbmV3X3dvcmtlcjsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9EWUlORzoKKwkJLyoKKwkJICogQmVmb3JlIHRoaXMsIHRoZSB0cnVzdGVlIGFuZCBhbGwgd29ya2VycyBleGNlcHQgZm9yCisJCSAqIHRoZSBvbmVzIHdoaWNoIGFyZSBzdGlsbCBleGVjdXRpbmcgd29ya3MgZnJvbQorCQkgKiBiZWZvcmUgdGhlIGxhc3QgQ1BVIGRvd24gbXVzdCBiZSBvbiB0aGUgY3B1LiAgQWZ0ZXIKKwkJICogdGhpcywgdGhleSdsbCBhbGwgYmUgZGlhc3BvcmFzLgorCQkgKi8KKwkJZ2N3cS0+ZmxhZ3MgfD0gR0NXUV9ESVNBU1NPQ0lBVEVEOworCQlicmVhazsKKwogCWNhc2UgQ1BVX1BPU1RfREVBRDoKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBjcHVfcG9wdWxhdGVkX21hcCk7CisJCWdjd3EtPnRydXN0ZWVfc3RhdGUgPSBUUlVTVEVFX0JVVENIRVI7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCQlkZXN0cm95X3dvcmtlcihnY3dxLT5maXJzdF9pZGxlKTsKKwkJZ2N3cS0+Zmlyc3RfaWRsZSA9IE5VTEw7CisJCWJyZWFrOworCisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJY2FzZSBDUFVfT05MSU5FOgorCQlnY3dxLT5mbGFncyAmPSB+R0NXUV9ESVNBU1NPQ0lBVEVEOworCQlpZiAoZ2N3cS0+dHJ1c3RlZV9zdGF0ZSAhPSBUUlVTVEVFX0RPTkUpIHsKKwkJCWdjd3EtPnRydXN0ZWVfc3RhdGUgPSBUUlVTVEVFX1JFTEVBU0U7CisJCQl3YWtlX3VwX3Byb2Nlc3MoZ2N3cS0+dHJ1c3RlZSk7CisJCQl3YWl0X3RydXN0ZWVfc3RhdGUoZ2N3cSwgVFJVU1RFRV9ET05FKTsKKwkJfQorCisJCS8qCisJCSAqIFRydXN0ZWUgaXMgZG9uZSBhbmQgdGhlcmUgbWlnaHQgYmUgbm8gd29ya2VyIGxlZnQuCisJCSAqIFB1dCB0aGUgZmlyc3RfaWRsZSBpbiBhbmQgcmVxdWVzdCBhIHJlYWwgbWFuYWdlciB0bworCQkgKiB0YWtlIGEgbG9vay4KKwkJICovCisJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJCWt0aHJlYWRfYmluZChnY3dxLT5maXJzdF9pZGxlLT50YXNrLCBjcHUpOworCQlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwkJZ2N3cS0+ZmxhZ3MgfD0gR0NXUV9NQU5BR0VfV09SS0VSUzsKKwkJc3RhcnRfd29ya2VyKGdjd3EtPmZpcnN0X2lkbGUpOworCQlnY3dxLT5maXJzdF9pZGxlID0gTlVMTDsKKwkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnY3dxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygwKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTEyMDEsMTQgKzMzODEsMTk5IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh3b3JrX29uX2NwdSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi12b2lkIF9faW5pdCBpbml0X3dvcmtxdWV1ZXModm9pZCkKLXsKLQlhbGxvY19jcHVtYXNrX3ZhcigmY3B1X3BvcHVsYXRlZF9tYXAsIEdGUF9LRVJORUwpOworI2lmZGVmIENPTkZJR19GUkVFWkVSCiAKLQljcHVtYXNrX2NvcHkoY3B1X3BvcHVsYXRlZF9tYXAsIGNwdV9vbmxpbmVfbWFzayk7Ci0Jc2luZ2xldGhyZWFkX2NwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X3Bvc3NpYmxlX21hc2spOwotCWNwdV9zaW5nbGV0aHJlYWRfbWFwID0gY3B1bWFza19vZihzaW5nbGV0aHJlYWRfY3B1KTsKLQlob3RjcHVfbm90aWZpZXIod29ya3F1ZXVlX2NwdV9jYWxsYmFjaywgMCk7Ci0Ja2V2ZW50ZF93cSA9IGNyZWF0ZV93b3JrcXVldWUoImV2ZW50cyIpOwotCUJVR19PTigha2V2ZW50ZF93cSk7CisvKioKKyAqIGZyZWV6ZV93b3JrcXVldWVzX2JlZ2luIC0gYmVnaW4gZnJlZXppbmcgd29ya3F1ZXVlcworICoKKyAqIFN0YXJ0IGZyZWV6aW5nIHdvcmtxdWV1ZXMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbAorICogZnJlZXplYWJsZSB3b3JrcXVldWVzIHdpbGwgcXVldWUgbmV3IHdvcmtzIHRvIHRoZWlyIGZyb3plbl93b3JrcworICogbGlzdCBpbnN0ZWFkIG9mIGdjd3EtPndvcmtsaXN0LgorICoKKyAqIENPTlRFWFQ6CisgKiBHcmFicyBhbmQgcmVsZWFzZXMgd29ya3F1ZXVlX2xvY2sgYW5kIGdjd3EtPmxvY2sncy4KKyAqLwordm9pZCBmcmVlemVfd29ya3F1ZXVlc19iZWdpbih2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHU7CisKKwlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKKworCUJVR19PTih3b3JrcXVldWVfZnJlZXppbmcpOworCXdvcmtxdWV1ZV9mcmVlemluZyA9IHRydWU7CisKKwlmb3JfZWFjaF9nY3dxX2NwdShjcHUpIHsKKwkJc3RydWN0IGdsb2JhbF9jd3EgKmdjd3EgPSBnZXRfZ2N3cShjcHUpOworCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisKKwkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisKKwkJQlVHX09OKGdjd3EtPmZsYWdzICYgR0NXUV9GUkVFWklORyk7CisJCWdjd3EtPmZsYWdzIHw9IEdDV1FfRlJFRVpJTkc7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKKwkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKKworCQkJaWYgKGN3cSAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKQorCQkJCWN3cS0+bWF4X2FjdGl2ZSA9IDA7CisJCX0KKworCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZ3b3JrcXVldWVfbG9jayk7CiB9CisKKy8qKgorICogZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSAtIGFyZSBmcmVlemVhYmxlIHdvcmtxdWV1ZXMgc3RpbGwgYnVzeT8KKyAqCisgKiBDaGVjayB3aGV0aGVyIGZyZWV6aW5nIGlzIGNvbXBsZXRlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICogYmV0d2VlbiBmcmVlemVfd29ya3F1ZXVlc19iZWdpbigpIGFuZCB0aGF3X3dvcmtxdWV1ZXMoKS4KKyAqCisgKiBDT05URVhUOgorICogR3JhYnMgYW5kIHJlbGVhc2VzIHdvcmtxdWV1ZV9sb2NrLgorICoKKyAqIFJFVFVSTlM6CisgKiAldHJ1ZSBpZiBzb21lIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyBhcmUgc3RpbGwgYnVzeS4gICVmYWxzZSBpZgorICogZnJlZXppbmcgaXMgY29tcGxldGUuCisgKi8KK2Jvb2wgZnJlZXplX3dvcmtxdWV1ZXNfYnVzeSh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJYm9vbCBidXN5ID0gZmFsc2U7CisKKwlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKKworCUJVR19PTighd29ya3F1ZXVlX2ZyZWV6aW5nKTsKKworCWZvcl9lYWNoX2djd3FfY3B1KGNwdSkgeworCQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJCS8qCisJCSAqIG5yX2FjdGl2ZSBpcyBtb25vdG9uaWNhbGx5IGRlY3JlYXNpbmcuICBJdCdzIHNhZmUKKwkJICogdG8gcGVlayB3aXRob3V0IGxvY2suCisJCSAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgeworCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOworCisJCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpKQorCQkJCWNvbnRpbnVlOworCisJCQlCVUdfT04oY3dxLT5ucl9hY3RpdmUgPCAwKTsKKwkJCWlmIChjd3EtPm5yX2FjdGl2ZSkgeworCQkJCWJ1c3kgPSB0cnVlOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJfQorCX0KK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKKwlyZXR1cm4gYnVzeTsKK30KKworLyoqCisgKiB0aGF3X3dvcmtxdWV1ZXMgLSB0aGF3IHdvcmtxdWV1ZXMKKyAqCisgKiBUaGF3IHdvcmtxdWV1ZXMuICBOb3JtYWwgcXVldWVpbmcgaXMgcmVzdG9yZWQgYW5kIGFsbCBjb2xsZWN0ZWQKKyAqIGZyb3plbiB3b3JrcyBhcmUgdHJhbnNmZXJyZWQgdG8gdGhlaXIgcmVzcGVjdGl2ZSBnY3dxIHdvcmtsaXN0cy4KKyAqCisgKiBDT05URVhUOgorICogR3JhYnMgYW5kIHJlbGVhc2VzIHdvcmtxdWV1ZV9sb2NrIGFuZCBnY3dxLT5sb2NrJ3MuCisgKi8KK3ZvaWQgdGhhd193b3JrcXVldWVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXNwaW5fbG9jaygmd29ya3F1ZXVlX2xvY2spOworCisJaWYgKCF3b3JrcXVldWVfZnJlZXppbmcpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWZvcl9lYWNoX2djd3FfY3B1KGNwdSkgeworCQlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisJCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKworCQlzcGluX2xvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKworCQlCVUdfT04oIShnY3dxLT5mbGFncyAmIEdDV1FfRlJFRVpJTkcpKTsKKwkJZ2N3cS0+ZmxhZ3MgJj0gfkdDV1FfRlJFRVpJTkc7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKKwkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKKworCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogcmVzdG9yZSBtYXhfYWN0aXZlIGFuZCByZXBvcHVsYXRlIHdvcmtsaXN0ICovCisJCQljd3EtPm1heF9hY3RpdmUgPSB3cS0+c2F2ZWRfbWF4X2FjdGl2ZTsKKworCQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjd3EtPmRlbGF5ZWRfd29ya3MpICYmCisJCQkgICAgICAgY3dxLT5ucl9hY3RpdmUgPCBjd3EtPm1heF9hY3RpdmUpCisJCQkJY3dxX2FjdGl2YXRlX2ZpcnN0X2RlbGF5ZWQoY3dxKTsKKwkJfQorCisJCXdha2VfdXBfd29ya2VyKGdjd3EpOworCisJCXNwaW5fdW5sb2NrX2lycSgmZ2N3cS0+bG9jayk7CisJfQorCisJd29ya3F1ZXVlX2ZyZWV6aW5nID0gZmFsc2U7CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZ3b3JrcXVldWVfbG9jayk7Cit9CisjZW5kaWYgLyogQ09ORklHX0ZSRUVaRVIgKi8KKworc3RhdGljIGludCBfX2luaXQgaW5pdF93b3JrcXVldWVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlpbnQgaTsKKworCWNwdV9ub3RpZmllcih3b3JrcXVldWVfY3B1X2NhbGxiYWNrLCBDUFVfUFJJX1dPUktRVUVVRSk7CisKKwkvKiBpbml0aWFsaXplIGdjd3FzICovCisJZm9yX2VhY2hfZ2N3cV9jcHUoY3B1KSB7CisJCXN0cnVjdCBnbG9iYWxfY3dxICpnY3dxID0gZ2V0X2djd3EoY3B1KTsKKworCQlzcGluX2xvY2tfaW5pdCgmZ2N3cS0+bG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZnY3dxLT53b3JrbGlzdCk7CisJCWdjd3EtPmNwdSA9IGNwdTsKKwkJaWYgKGNwdSA9PSBXT1JLX0NQVV9VTkJPVU5EKQorCQkJZ2N3cS0+ZmxhZ3MgfD0gR0NXUV9ESVNBU1NPQ0lBVEVEOworCisJCUlOSVRfTElTVF9IRUFEKCZnY3dxLT5pZGxlX2xpc3QpOworCQlmb3IgKGkgPSAwOyBpIDwgQlVTWV9XT1JLRVJfSEFTSF9TSVpFOyBpKyspCisJCQlJTklUX0hMSVNUX0hFQUQoJmdjd3EtPmJ1c3lfaGFzaFtpXSk7CisKKwkJaW5pdF90aW1lcl9kZWZlcnJhYmxlKCZnY3dxLT5pZGxlX3RpbWVyKTsKKwkJZ2N3cS0+aWRsZV90aW1lci5mdW5jdGlvbiA9IGlkbGVfd29ya2VyX3RpbWVvdXQ7CisJCWdjd3EtPmlkbGVfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWdjd3E7CisKKwkJc2V0dXBfdGltZXIoJmdjd3EtPm1heWRheV90aW1lciwgZ2N3cV9tYXlkYXlfdGltZW91dCwKKwkJCSAgICAodW5zaWduZWQgbG9uZylnY3dxKTsKKworCQlpZGFfaW5pdCgmZ2N3cS0+d29ya2VyX2lkYSk7CisKKwkJZ2N3cS0+dHJ1c3RlZV9zdGF0ZSA9IFRSVVNURUVfRE9ORTsKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZ2N3cS0+dHJ1c3RlZV93YWl0KTsKKwl9CisKKwkvKiBjcmVhdGUgdGhlIGluaXRpYWwgd29ya2VyICovCisJZm9yX2VhY2hfb25saW5lX2djd3FfY3B1KGNwdSkgeworCQlzdHJ1Y3QgZ2xvYmFsX2N3cSAqZ2N3cSA9IGdldF9nY3dxKGNwdSk7CisJCXN0cnVjdCB3b3JrZXIgKndvcmtlcjsKKworCQl3b3JrZXIgPSBjcmVhdGVfd29ya2VyKGdjd3EsIHRydWUpOworCQlCVUdfT04oIXdvcmtlcik7CisJCXNwaW5fbG9ja19pcnEoJmdjd3EtPmxvY2spOworCQlzdGFydF93b3JrZXIod29ya2VyKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZnY3dxLT5sb2NrKTsKKwl9CisKKwlzeXN0ZW1fd3EgPSBhbGxvY193b3JrcXVldWUoImV2ZW50cyIsIDAsIDApOworCXN5c3RlbV9sb25nX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJldmVudHNfbG9uZyIsIDAsIDApOworCXN5c3RlbV9ucnRfd3EgPSBhbGxvY193b3JrcXVldWUoImV2ZW50c19ucnQiLCBXUV9OT05fUkVFTlRSQU5ULCAwKTsKKwlzeXN0ZW1fdW5ib3VuZF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgiZXZlbnRzX3VuYm91bmQiLCBXUV9VTkJPVU5ELAorCQkJCQkgICAgV1FfVU5CT1VORF9NQVhfQUNUSVZFKTsKKwlCVUdfT04oIXN5c3RlbV93cSB8fCAhc3lzdGVtX2xvbmdfd3EgfHwgIXN5c3RlbV9ucnRfd3EpOworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoaW5pdF93b3JrcXVldWVzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWVfc2NoZWQuaCBiL2tlcm5lbC93b3JrcXVldWVfc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDEwZmM5Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3dvcmtxdWV1ZV9zY2hlZC5oCkBAIC0wLDAgKzEsOSBAQAorLyoKKyAqIGtlcm5lbC93b3JrcXVldWVfc2NoZWQuaAorICoKKyAqIFNjaGVkdWxlciBob29rcyBmb3IgY29uY3VycmVuY3kgbWFuYWdlZCB3b3JrcXVldWUuICBPbmx5IHRvIGJlCisgKiBpbmNsdWRlZCBmcm9tIHNjaGVkLmMgYW5kIHdvcmtxdWV1ZS5jLgorICovCit2b2lkIHdxX3dvcmtlcl93YWtpbmdfdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBpbnQgY3B1KTsKK3N0cnVjdCB0YXNrX3N0cnVjdCAqd3Ffd29ya2VyX3NsZWVwaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDViOTE2YmMuLmZhOWJmMmMgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC03LDYgKzcsOSBAQAogCiBtZW51ICJMaWJyYXJ5IHJvdXRpbmVzIgogCitjb25maWcgUkFJRDZfUFEKKwl0cmlzdGF0ZQorCiBjb25maWcgQklUUkVWRVJTRQogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggNjdmYTc3NC4uOWUwNmI3ZiAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTc2LDcgKzc2LDYgQEAKIAogY29uZmlnIERFQlVHX0ZTCiAJYm9vbCAiRGVidWcgRmlsZXN5c3RlbSIKLQlkZXBlbmRzIG9uIFNZU0ZTCiAJaGVscAogCSAgZGVidWdmcyBpcyBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0gdGhhdCBrZXJuZWwgZGV2ZWxvcGVycyB1c2UgdG8gcHV0CiAJICBkZWJ1Z2dpbmcgZmlsZXMgaW50by4gIEVuYWJsZSB0aGlzIG9wdGlvbiB0byBiZSBhYmxlIHRvIHJlYWQgYW5kCkBAIC0xNTIsMjggKzE1MSwzMyBAQAogCSAgRHJpdmVycyBvdWdodCB0byBiZSBhYmxlIHRvIGhhbmRsZSBpbnRlcnJ1cHRzIGNvbWluZyBpbiBhdCB0aG9zZQogCSAgcG9pbnRzOyBzb21lIGRvbid0IGFuZCBuZWVkIHRvIGJlIGNhdWdodC4KIAotY29uZmlnIERFVEVDVF9TT0ZUTE9DS1VQCi0JYm9vbCAiRGV0ZWN0IFNvZnQgTG9ja3VwcyIKK2NvbmZpZyBMT0NLVVBfREVURUNUT1IKKwlib29sICJEZXRlY3QgSGFyZCBhbmQgU29mdCBMb2NrdXBzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmICFTMzkwCi0JZGVmYXVsdCB5CiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBkZXRlY3QgInNvZnQgbG9ja3VwcyIsCi0JICB3aGljaCBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBrZXJuZWwgdG8gbG9vcCBpbiBrZXJuZWwKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXJuZWwgdG8gYWN0IGFzIGEgd2F0Y2hkb2cgdG8gZGV0ZWN0CisJICBoYXJkIGFuZCBzb2Z0IGxvY2t1cHMuCisKKwkgIFNvZnRsb2NrdXBzIGFyZSBidWdzIHRoYXQgY2F1c2UgdGhlIGtlcm5lbCB0byBsb29wIGluIGtlcm5lbAogCSAgbW9kZSBmb3IgbW9yZSB0aGFuIDYwIHNlY29uZHMsIHdpdGhvdXQgZ2l2aW5nIG90aGVyIHRhc2tzIGEKLQkgIGNoYW5jZSB0byBydW4uCisJICBjaGFuY2UgdG8gcnVuLiAgVGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgaXMgZGlzcGxheWVkIHVwb24KKwkgIGRldGVjdGlvbiBhbmQgdGhlIHN5c3RlbSB3aWxsIHN0YXkgbG9ja2VkIHVwLgogCi0JICBXaGVuIGEgc29mdC1sb2NrdXAgaXMgZGV0ZWN0ZWQsIHRoZSBrZXJuZWwgd2lsbCBwcmludCB0aGUKLQkgIGN1cnJlbnQgc3RhY2sgdHJhY2UgKHdoaWNoIHlvdSBzaG91bGQgcmVwb3J0KSwgYnV0IHRoZQotCSAgc3lzdGVtIHdpbGwgc3RheSBsb2NrZWQgdXAuIFRoaXMgZmVhdHVyZSBoYXMgbmVnbGlnaWJsZQotCSAgb3ZlcmhlYWQuCisJICBIYXJkbG9ja3VwcyBhcmUgYnVncyB0aGF0IGNhdXNlIHRoZSBDUFUgdG8gbG9vcCBpbiBrZXJuZWwgbW9kZQorCSAgZm9yIG1vcmUgdGhhbiA2MCBzZWNvbmRzLCB3aXRob3V0IGxldHRpbmcgb3RoZXIgaW50ZXJydXB0cyBoYXZlIGEKKwkgIGNoYW5jZSB0byBydW4uICBUaGUgY3VycmVudCBzdGFjayB0cmFjZSBpcyBkaXNwbGF5ZWQgdXBvbiBkZXRlY3Rpb24KKwkgIGFuZCB0aGUgc3lzdGVtIHdpbGwgc3RheSBsb2NrZWQgdXAuCiAKLQkgIChOb3RlIHRoYXQgImhhcmQgbG9ja3VwcyIgYXJlIHNlcGFyYXRlIHR5cGUgb2YgYnVncyB0aGF0Ci0JICAgY2FuIGJlIGRldGVjdGVkIHZpYSB0aGUgTk1JLXdhdGNoZG9nLCBvbiBwbGF0Zm9ybXMgdGhhdAotCSAgIHN1cHBvcnQgaXQuKQorCSAgVGhlIG92ZXJoZWFkIHNob3VsZCBiZSBtaW5pbWFsLiAgQSBwZXJpb2RpYyBocnRpbWVyIHJ1bnMgdG8KKwkgIGdlbmVyYXRlIGludGVycnVwdHMgYW5kIGtpY2sgdGhlIHdhdGNoZG9nIHRhc2sgZXZlcnkgMTAtMTIgc2Vjb25kcy4KKwkgIEFuIE5NSSBpcyBnZW5lcmF0ZWQgZXZlcnkgNjAgc2Vjb25kcyBvciBzbyB0byBjaGVjayBmb3IgaGFyZGxvY2t1cHMuCisKK2NvbmZpZyBIQVJETE9DS1VQX0RFVEVDVE9SCisJZGVmX2Jvb2wgTE9DS1VQX0RFVEVDVE9SICYmIFBFUkZfRVZFTlRTICYmIEhBVkVfUEVSRl9FVkVOVFNfTk1JCiAKIGNvbmZpZyBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwogCWJvb2wgIlBhbmljIChSZWJvb3QpIE9uIFNvZnQgTG9ja3VwcyIKLQlkZXBlbmRzIG9uIERFVEVDVF9TT0ZUTE9DS1VQCisJZGVwZW5kcyBvbiBMT0NLVVBfREVURUNUT1IKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUga2VybmVsIHRvIHBhbmljIG9uICJzb2Z0IGxvY2t1cHMiLAogCSAgd2hpY2ggYXJlIGJ1Z3MgdGhhdCBjYXVzZSB0aGUga2VybmVsIHRvIGxvb3AgaW4ga2VybmVsCkBAIC0xOTAsNyArMTk0LDcgQEAKIAogY29uZmlnIEJPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFCiAJaW50Ci0JZGVwZW5kcyBvbiBERVRFQ1RfU09GVExPQ0tVUAorCWRlcGVuZHMgb24gTE9DS1VQX0RFVEVDVE9SCiAJcmFuZ2UgMCAxCiAJZGVmYXVsdCAwIGlmICFCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwogCWRlZmF1bHQgMSBpZiBCT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQwpAQCAtMzA3LDYgKzMxMSwxMiBAQAogCSAgd29yayBxdWV1ZSByb3V0aW5lcyB0byB0cmFjayB0aGUgbGlmZSB0aW1lIG9mIHdvcmsgb2JqZWN0cyBhbmQKIAkgIHZhbGlkYXRlIHRoZSB3b3JrIG9wZXJhdGlvbnMuCiAKK2NvbmZpZyBERUJVR19PQkpFQ1RTX1JDVV9IRUFECisJYm9vbCAiRGVidWcgUkNVIGNhbGxiYWNrcyBvYmplY3RzIgorCWRlcGVuZHMgb24gREVCVUdfT0JKRUNUUyAmJiBQUkVFTVBUCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gdHVybiBvbiBkZWJ1Z2dpbmcgb2YgUkNVIGxpc3QgaGVhZHMgKGNhbGxfcmN1KCkgdXNhZ2UpLgorCiBjb25maWcgREVCVUdfT0JKRUNUU19FTkFCTEVfREVGQVVMVAogCWludCAiZGVidWdfb2JqZWN0cyBib290dXAgZGVmYXVsdCB2YWx1ZSAoMC0xKSIKICAgICAgICAgcmFuZ2UgMCAxCkBAIC00MDAsNiArNDEwLDEzIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBERUJVR19LTUVNTEVBS19ERUZBVUxUX09GRgorCWJvb2wgIkRlZmF1bHQga21lbWxlYWsgdG8gb2ZmIgorCWRlcGVuZHMgb24gREVCVUdfS01FTUxFQUsKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGRpc2FibGUga21lbWxlYWsgYnkgZGVmYXVsdC4gSXQgY2FuIHRoZW4gYmUgZW5hYmxlZAorCSAgb24gdGhlIGNvbW1hbmQgbGluZSB2aWEga21lbWxlYWs9b24uCisKIGNvbmZpZyBERUJVR19QUkVFTVBUCiAJYm9vbCAiRGVidWcgcHJlZW1wdGlibGUga2VybmVsIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIFBSRUVNUFQgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDBiZmFiYmEuLmU2YTM3NjMgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTY5LDYgKzY5LDcgQEAKIG9iai0kKENPTkZJR19SRUVEX1NPTE9NT04pICs9IHJlZWRfc29sb21vbi8KIG9iai0kKENPTkZJR19MWk9fQ09NUFJFU1MpICs9IGx6by8KIG9iai0kKENPTkZJR19MWk9fREVDT01QUkVTUykgKz0gbHpvLworb2JqLSQoQ09ORklHX1JBSUQ2X1BRKSArPSByYWlkNi8KIAogbGliLSQoQ09ORklHX0RFQ09NUFJFU1NfR1pJUCkgKz0gZGVjb21wcmVzc19pbmZsYXRlLm8KIGxpYi0kKENPTkZJR19ERUNPTVBSRVNTX0JaSVAyKSArPSBkZWNvbXByZXNzX2J1bnppcDIubwpkaWZmIC0tZ2l0IGEvbGliL2J1Zy5jIGIvbGliL2J1Zy5jCmluZGV4IGYxM2RhZjQuLjdjZGZhZDggMTAwNjQ0Ci0tLSBhL2xpYi9idWcuYworKysgYi9saWIvYnVnLmMKQEAgLTEzNiw4ICsxMzYsNiBAQAogCiAJYnVnID0gZmluZF9idWcoYnVnYWRkcik7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tXG4iKTsKLQogCWZpbGUgPSBOVUxMOwogCWxpbmUgPSAwOwogCXdhcm5pbmcgPSAwOwpAQCAtMTU2LDE5ICsxNTQsMjUgQEAKIAogCWlmICh3YXJuaW5nKSB7CiAJCS8qIHRoaXMgaXMgYSBXQVJOX09OIHJhdGhlciB0aGFuIEJVRy9CVUdfT04gKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tXG4iKTsKKwogCQlpZiAoZmlsZSkKLQkJCXByaW50ayhLRVJOX0VSUiAiQmFkbmVzcyBhdCAlczoldVxuIiwKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IGF0ICVzOiV1XG4iLAogCQkJICAgICAgIGZpbGUsIGxpbmUpOwogCQllbHNlCi0JCQlwcmludGsoS0VSTl9FUlIgIkJhZG5lc3MgYXQgJXAgIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogYXQgJXAgIgogCQkJICAgICAgICJbdmVyYm9zZSBkZWJ1ZyBpbmZvIHVuYXZhaWxhYmxlXVxuIiwKIAkJCSAgICAgICAodm9pZCAqKWJ1Z2FkZHIpOwogCisJCXByaW50X21vZHVsZXMoKTsKIAkJc2hvd19yZWdzKHJlZ3MpOworCQlwcmludF9vb3BzX2VuZF9tYXJrZXIoKTsKIAkJYWRkX3RhaW50KEJVR19HRVRfVEFJTlQoYnVnKSk7CiAJCXJldHVybiBCVUdfVFJBUF9UWVBFX1dBUk47CiAJfQogCisJcHJpbnRrKEtFUk5fRU1FUkcgIi0tLS0tLS0tLS0tLVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLVxuIik7CisKIAlpZiAoZmlsZSkKIAkJcHJpbnRrKEtFUk5fQ1JJVCAia2VybmVsIEJVRyBhdCAlczoldSFcbiIsCiAJCSAgICAgICBmaWxlLCBsaW5lKTsKZGlmZiAtLWdpdCBhL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyBiL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYwppbmRleCBhNGU5NzFkLi44MWM4YmIxIDEwMDY0NAotLS0gYS9saWIvZGVjb21wcmVzc19idW56aXAyLmMKKysrIGIvbGliL2RlY29tcHJlc3NfYnVuemlwMi5jCkBAIC0xMDcsNiArMTA3LDggQEAKIAl1bnNpZ25lZCBjaGFyIHNlbGVjdG9yc1szMjc2OF07CQkvKiBuU2VsZWN0b3JzID0gMTUgYml0cyAqLwogCXN0cnVjdCBncm91cF9kYXRhIGdyb3Vwc1tNQVhfR1JPVVBTXTsJLyogSHVmZm1hbiBjb2RpbmcgdGFibGVzICovCiAJaW50IGlvX2Vycm9yOwkJCS8qIG5vbi16ZXJvIGlmIHdlIGhhdmUgSU8gZXJyb3IgKi8KKwlpbnQgYnl0ZUNvdW50WzI1Nl07CisJdW5zaWduZWQgY2hhciBzeW1Ub0J5dGVbMjU2XSwgbXRmU3ltYm9sWzI1Nl07CiB9OwogCiAKQEAgLTE1OCwxNCArMTYwLDE2IEBACiAJaW50ICpiYXNlID0gTlVMTDsKIAlpbnQgKmxpbWl0ID0gTlVMTDsKIAlpbnQgZGJ1ZkNvdW50LCBuZXh0U3ltLCBkYnVmU2l6ZSwgZ3JvdXBDb3VudCwgc2VsZWN0b3IsCi0JCWksIGosIGssIHQsIHJ1blBvcywgc3ltQ291bnQsIHN5bVRvdGFsLCBuU2VsZWN0b3JzLAotCQlieXRlQ291bnRbMjU2XTsKLQl1bnNpZ25lZCBjaGFyIHVjLCBzeW1Ub0J5dGVbMjU2XSwgbXRmU3ltYm9sWzI1Nl0sICpzZWxlY3RvcnM7CisJCWksIGosIGssIHQsIHJ1blBvcywgc3ltQ291bnQsIHN5bVRvdGFsLCBuU2VsZWN0b3JzLCAqYnl0ZUNvdW50OworCXVuc2lnbmVkIGNoYXIgdWMsICpzeW1Ub0J5dGUsICptdGZTeW1ib2wsICpzZWxlY3RvcnM7CiAJdW5zaWduZWQgaW50ICpkYnVmLCBvcmlnUHRyOwogCiAJZGJ1ZiA9IGJkLT5kYnVmOwogCWRidWZTaXplID0gYmQtPmRidWZTaXplOwogCXNlbGVjdG9ycyA9IGJkLT5zZWxlY3RvcnM7CisJYnl0ZUNvdW50ID0gYmQtPmJ5dGVDb3VudDsKKwlzeW1Ub0J5dGUgPSBiZC0+c3ltVG9CeXRlOworCW10ZlN5bWJvbCA9IGJkLT5tdGZTeW1ib2w7CiAKIAkvKiBSZWFkIGluIGhlYWRlciBzaWduYXR1cmUgYW5kIENSQywgdGhlbiB2YWxpZGF0ZSBzaWduYXR1cmUuCiAJICAgKGxhc3QgYmxvY2sgc2lnbmF0dXJlIG1lYW5zIENSQyBpcyBmb3Igd2hvbGUgZmlsZSwgcmV0dXJuIG5vdykgKi8KZGlmZiAtLWdpdCBhL2xpYi9mbGV4X2FycmF5LmMgYi9saWIvZmxleF9hcnJheS5jCmluZGV4IDQxYjE4MDQuLjc3YTZmZWEgMTAwNjQ0Ci0tLSBhL2xpYi9mbGV4X2FycmF5LmMKKysrIGIvbGliL2ZsZXhfYXJyYXkuYwpAQCAtMTcxLDYgKzE3MSw4IEBACiAgKiBOb3RlIHRoYXQgdGhpcyAqY29waWVzKiB0aGUgY29udGVudHMgb2YgQHNyYyBpbnRvCiAgKiB0aGUgYXJyYXkuICBJZiB5b3UgYXJlIHRyeWluZyB0byBzdG9yZSBhbiBhcnJheSBvZgogICogcG9pbnRlcnMsIG1ha2Ugc3VyZSB0byBwYXNzIGluICZwdHIgaW5zdGVhZCBvZiBwdHIuCisgKiBZb3UgbWF5IGluc3RlYWQgd2lzaCB0byB1c2UgdGhlIGZsZXhfYXJyYXlfcHV0X3B0cigpCisgKiBoZWxwZXIgZnVuY3Rpb24uCiAgKgogICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgKi8KQEAgLTI2NSw3ICsyNjcsOCBAQAogICoKICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkYXRhIGF0IGluZGV4IEBlbGVtZW50X25yLiAgTm90ZQogICogdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgZGF0YSB0aGF0IHdhcyBwYXNzZWQgaW4uICBJZiB5b3UKLSAqIGFyZSB1c2luZyB0aGlzIHRvIHN0b3JlIHBvaW50ZXJzLCB5b3UnbGwgZ2V0IGJhY2sgJnB0ci4KKyAqIGFyZSB1c2luZyB0aGlzIHRvIHN0b3JlIHBvaW50ZXJzLCB5b3UnbGwgZ2V0IGJhY2sgJnB0ci4gIFlvdQorICogbWF5IGluc3RlYWQgd2lzaCB0byB1c2UgdGhlIGZsZXhfYXJyYXlfZ2V0X3B0ciBoZWxwZXIuCiAgKgogICogTG9ja2luZyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgKi8KQEAgLTI4Niw2ICsyODksMjYgQEAKIAlyZXR1cm4gJnBhcnQtPmVsZW1lbnRzW2luZGV4X2luc2lkZV9wYXJ0KGZhLCBlbGVtZW50X25yKV07CiB9CiAKKy8qKgorICogZmxleF9hcnJheV9nZXRfcHRyIC0gcHVsbCBhIHB0ciBiYWNrIG91dCBvZiB0aGUgYXJyYXkKKyAqIEBmYToJCXRoZSBmbGV4IGFycmF5IGZyb20gd2hpY2ggdG8gZXh0cmFjdCBkYXRhCisgKiBAZWxlbWVudF9ucjoJaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gZmV0Y2ggZnJvbSB0aGUgYXJyYXkKKyAqCisgKiBSZXR1cm5zIHRoZSBwb2ludGVyIHBsYWNlZCBpbiB0aGUgZmxleCBhcnJheSBhdCBlbGVtZW50X25yIHVzaW5nCisgKiBmbGV4X2FycmF5X3B1dF9wdHIoKS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgdGhlCisgKiBlbGVtZW50IGluIHF1ZXN0aW9uIHdhcyBub3Qgc2V0IHVzaW5nIHRoZSBfcHV0X3B0cigpIGhlbHBlci4KKyAqLwordm9pZCAqZmxleF9hcnJheV9nZXRfcHRyKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIpCit7CisJdm9pZCAqKnRtcDsKKworCXRtcCA9IGZsZXhfYXJyYXlfZ2V0KGZhLCBlbGVtZW50X25yKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKnRtcDsKK30KKwogc3RhdGljIGludCBwYXJ0X2lzX2ZyZWUoc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2xpYi9pb21tdS1oZWxwZXIuYyBiL2xpYi9pb21tdS1oZWxwZXIuYwppbmRleCBjMDI1MWY0Li5kYTA1MzMxIDEwMDY0NAotLS0gYS9saWIvaW9tbXUtaGVscGVyLmMKKysrIGIvbGliL2lvbW11LWhlbHBlci5jCkBAIC0zOCwxMiArMzgsMyBAQAogCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0woaW9tbXVfYXJlYV9hbGxvYyk7Ci0KLXVuc2lnbmVkIGxvbmcgaW9tbXVfbnVtX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGlvX3BhZ2Vfc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSAoYWRkciAmIChpb19wYWdlX3NpemUgLSAxKSkgKyBsZW47Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKHNpemUsIGlvX3BhZ2Vfc2l6ZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGlvbW11X251bV9wYWdlcyk7CmRpZmYgLS1naXQgYS9saWIvaW9yZW1hcC5jIGIvbGliL2lvcmVtYXAuYwppbmRleCAxNGM2MDc4Li41NzMwZWNkIDEwMDY0NAotLS0gYS9saWIvaW9yZW1hcC5jCisrKyBiL2xpYi9pb3JlbWFwLmMKQEAgLTEzLDEwICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKIHN0YXRpYyBpbnQgaW9yZW1hcF9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcHRlX3QgKnB0ZTsKLQl1bnNpZ25lZCBsb25nIHBmbjsKKwl1NjQgcGZuOwogCiAJcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7CiAJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIGFkZHIpOwpAQCAtMzEsNyArMzEsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBpb3JlbWFwX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKQEAgLTQ5LDcgKzQ5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaW9yZW1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCisJCXVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcHVkX3QgKnB1ZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CkBAIC02Nyw3ICs2Nyw3IEBACiB9CiAKIGludCBpb3JlbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KQorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CmRpZmYgLS1naXQgYS9saWIvbGlzdF9kZWJ1Zy5jIGIvbGliL2xpc3RfZGVidWcuYwppbmRleCAxYTM5ZjRlLi4zNDRjNzEwIDEwMDY0NAotLS0gYS9saWIvbGlzdF9kZWJ1Zy5jCisrKyBiL2xpYi9saXN0X2RlYnVnLmMKQEAgLTQzLDYgKzQzLDEyIEBACiAgKi8KIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCiB7CisJV0FSTihlbnRyeS0+bmV4dCA9PSBMSVNUX1BPSVNPTjEsCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLCBuZXh0IGlzIExJU1RfUE9JU09OMSAoJXApXG4iLAorCQlMSVNUX1BPSVNPTjEpOworCVdBUk4oZW50cnktPm5leHQgIT0gTElTVF9QT0lTT04xICYmIGVudHJ5LT5wcmV2ID09IExJU1RfUE9JU09OMiwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24sIHByZXYgaXMgTElTVF9QT0lTT04yICglcClcbiIsCisJCUxJU1RfUE9JU09OMik7CiAJV0FSTihlbnRyeS0+cHJldi0+bmV4dCAhPSBlbnRyeSwKIAkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIHByZXYtPm5leHQgc2hvdWxkIGJlICVwLCAiCiAJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgZW50cnktPnByZXYtPm5leHQpOwpkaWZmIC0tZ2l0IGEvbGliL3BlcmNwdV9jb3VudGVyLmMgYi9saWIvcGVyY3B1X2NvdW50ZXIuYwppbmRleCBhZWFhNmQ3Li5lYzkwNDhlIDEwMDY0NAotLS0gYS9saWIvcGVyY3B1X2NvdW50ZXIuYworKysgYi9saWIvcGVyY3B1X2NvdW50ZXIuYwpAQCAtMTM3LDYgKzEzNywzMyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKKy8qCisgKiBDb21wYXJlIGNvdW50ZXIgYWdhaW5zdCBnaXZlbiB2YWx1ZS4KKyAqIFJldHVybiAxIGlmIGdyZWF0ZXIsIDAgaWYgZXF1YWwgYW5kIC0xIGlmIGxlc3MKKyAqLworaW50IHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoc3RydWN0IHBlcmNwdV9jb3VudGVyICpmYmMsIHM2NCByaHMpCit7CisJczY0CWNvdW50OworCisJY291bnQgPSBwZXJjcHVfY291bnRlcl9yZWFkKGZiYyk7CisJLyogQ2hlY2sgdG8gc2VlIGlmIHJvdWdoIGNvdW50IHdpbGwgYmUgc3VmZmljaWVudCBmb3IgY29tcGFyaXNvbiAqLworCWlmIChhYnMoY291bnQgLSByaHMpID4gKHBlcmNwdV9jb3VudGVyX2JhdGNoKm51bV9vbmxpbmVfY3B1cygpKSkgeworCQlpZiAoY291bnQgPiByaHMpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCX0KKwkvKiBOZWVkIHRvIHVzZSBwcmVjaXNlIGNvdW50ICovCisJY291bnQgPSBwZXJjcHVfY291bnRlcl9zdW0oZmJjKTsKKwlpZiAoY291bnQgPiByaHMpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGNvdW50IDwgcmhzKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocGVyY3B1X2NvdW50ZXJfY29tcGFyZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IHBlcmNwdV9jb3VudGVyX3N0YXJ0dXAodm9pZCkKIHsKIAljb21wdXRlX2JhdGNoX3ZhbHVlKCk7CmRpZmYgLS1naXQgYS9saWIvcmFkaXgtdHJlZS5jIGIvbGliL3JhZGl4LXRyZWUuYwppbmRleCAwNWRhMzhiLi5lOTA3ODU4IDEwMDY0NAotLS0gYS9saWIvcmFkaXgtdHJlZS5jCisrKyBiL2xpYi9yYWRpeC10cmVlLmMKQEAgLTYwOSw2ICs2MDksMTAwIEBACiBFWFBPUlRfU1lNQk9MKHJhZGl4X3RyZWVfdGFnX2dldCk7CiAKIC8qKgorICogcmFkaXhfdHJlZV9yYW5nZV90YWdfaWZfdGFnZ2VkIC0gZm9yIGVhY2ggaXRlbSBpbiBnaXZlbiByYW5nZSBzZXQgZ2l2ZW4KKyAqCQkJCSAgIHRhZyBpZiBpdGVtIGhhcyBhbm90aGVyIHRhZyBzZXQKKyAqIEByb290OgkJcmFkaXggdHJlZSByb290CisgKiBAZmlyc3RfaW5kZXhwOglwb2ludGVyIHRvIGEgc3RhcnRpbmcgaW5kZXggb2YgYSByYW5nZSB0byBzY2FuCisgKiBAbGFzdF9pbmRleDoJCWxhc3QgaW5kZXggb2YgYSByYW5nZSB0byBzY2FuCisgKiBAbnJfdG9fdGFnOgkJbWF4aW11bSBudW1iZXIgaXRlbXMgdG8gdGFnCisgKiBAaWZ0YWc6CQl0YWcgaW5kZXggdG8gdGVzdAorICogQHNldHRhZzoJCXRhZyBpbmRleCB0byBzZXQgaWYgdGVzdGVkIHRhZyBpcyBzZXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHJhbmdlIG9mIHJhZGl4IHRyZWUgZnJvbSBmaXJzdF9pbmRleCB0byBsYXN0X2luZGV4CisgKiAoaW5jbHVzaXZlKS4gIEZvciBlYWNoIGl0ZW0gaW4gdGhlIHJhbmdlIGlmIGlmdGFnIGlzIHNldCwgdGhlIGZ1bmN0aW9uIHNldHMKKyAqIGFsc28gc2V0dGFnLiBUaGUgZnVuY3Rpb24gc3RvcHMgZWl0aGVyIGFmdGVyIHRhZ2dpbmcgbnJfdG9fdGFnIGl0ZW1zIG9yCisgKiBhZnRlciByZWFjaGluZyBsYXN0X2luZGV4LgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZiBsZWF2ZXMgd2hlcmUgdGhlIHRhZyB3YXMgc2V0IGFuZCBzZXRzCisgKiAqZmlyc3RfaW5kZXhwIHRvIHRoZSBmaXJzdCB1bnNjYW5uZWQgaW5kZXguCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmFkaXhfdHJlZV9yYW5nZV90YWdfaWZfdGFnZ2VkKHN0cnVjdCByYWRpeF90cmVlX3Jvb3QgKnJvb3QsCisJCXVuc2lnbmVkIGxvbmcgKmZpcnN0X2luZGV4cCwgdW5zaWduZWQgbG9uZyBsYXN0X2luZGV4LAorCQl1bnNpZ25lZCBsb25nIG5yX3RvX3RhZywKKwkJdW5zaWduZWQgaW50IGlmdGFnLCB1bnNpZ25lZCBpbnQgc2V0dGFnKQoreworCXVuc2lnbmVkIGludCBoZWlnaHQgPSByb290LT5oZWlnaHQsIHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgdGFnZ2VkID0gMCwgaW5kZXggPSAqZmlyc3RfaW5kZXhwOworCXN0cnVjdCByYWRpeF90cmVlX25vZGUgKm9wZW5fc2xvdHNbaGVpZ2h0XSwgKnNsb3Q7CisKKwlsYXN0X2luZGV4ID0gbWluKGxhc3RfaW5kZXgsIHJhZGl4X3RyZWVfbWF4aW5kZXgoaGVpZ2h0KSk7CisJaWYgKGluZGV4ID4gbGFzdF9pbmRleCkKKwkJcmV0dXJuIDA7CisJaWYgKCFucl90b190YWcpCisJCXJldHVybiAwOworCWlmICghcm9vdF90YWdfZ2V0KHJvb3QsIGlmdGFnKSkgeworCQkqZmlyc3RfaW5kZXhwID0gbGFzdF9pbmRleCArIDE7CisJCXJldHVybiAwOworCX0KKwlpZiAoaGVpZ2h0ID09IDApIHsKKwkJKmZpcnN0X2luZGV4cCA9IGxhc3RfaW5kZXggKyAxOworCQlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2hpZnQgPSAoaGVpZ2h0IC0gMSkgKiBSQURJWF9UUkVFX01BUF9TSElGVDsKKwlzbG90ID0gcmFkaXhfdHJlZV9pbmRpcmVjdF90b19wdHIocm9vdC0+cm5vZGUpOworCisJZm9yICg7OykgeworCQlpbnQgb2Zmc2V0OworCisJCW9mZnNldCA9IChpbmRleCA+PiBzaGlmdCkgJiBSQURJWF9UUkVFX01BUF9NQVNLOworCQlpZiAoIXNsb3QtPnNsb3RzW29mZnNldF0pCisJCQlnb3RvIG5leHQ7CisJCWlmICghdGFnX2dldChzbG90LCBpZnRhZywgb2Zmc2V0KSkKKwkJCWdvdG8gbmV4dDsKKwkJdGFnX3NldChzbG90LCBzZXR0YWcsIG9mZnNldCk7CisJCWlmIChoZWlnaHQgPT0gMSkgeworCQkJdGFnZ2VkKys7CisJCQlnb3RvIG5leHQ7CisJCX0KKwkJLyogR28gZG93biBvbmUgbGV2ZWwgKi8KKwkJaGVpZ2h0LS07CisJCXNoaWZ0IC09IFJBRElYX1RSRUVfTUFQX1NISUZUOworCQlvcGVuX3Nsb3RzW2hlaWdodF0gPSBzbG90OworCQlzbG90ID0gc2xvdC0+c2xvdHNbb2Zmc2V0XTsKKwkJY29udGludWU7CituZXh0OgorCQkvKiBHbyB0byBuZXh0IGl0ZW0gYXQgbGV2ZWwgZGV0ZXJtaW5lZCBieSAnc2hpZnQnICovCisJCWluZGV4ID0gKChpbmRleCA+PiBzaGlmdCkgKyAxKSA8PCBzaGlmdDsKKwkJaWYgKGluZGV4ID4gbGFzdF9pbmRleCkKKwkJCWJyZWFrOworCQlpZiAodGFnZ2VkID49IG5yX3RvX3RhZykKKwkJCWJyZWFrOworCQl3aGlsZSAoKChpbmRleCA+PiBzaGlmdCkgJiBSQURJWF9UUkVFX01BUF9NQVNLKSA9PSAwKSB7CisJCQkvKgorCQkJICogV2UndmUgZnVsbHkgc2Nhbm5lZCB0aGlzIG5vZGUuIEdvIHVwLiBCZWNhdXNlCisJCQkgKiBsYXN0X2luZGV4IGlzIGd1YXJhbnRlZWQgdG8gYmUgaW4gdGhlIHRyZWUsIHdoYXQKKwkJCSAqIHdlIGRvIGJlbG93IGNhbm5vdCB3YW5kZXIgYXN0cmF5LgorCQkJICovCisJCQlzbG90ID0gb3Blbl9zbG90c1toZWlnaHRdOworCQkJaGVpZ2h0Kys7CisJCQlzaGlmdCArPSBSQURJWF9UUkVFX01BUF9TSElGVDsKKwkJfQorCX0KKwkvKgorCSAqIFRoZSBpZnRhZyBtdXN0IGhhdmUgYmVlbiBzZXQgc29tZXdoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlCisJICogd2Ugd291bGQgcmV0dXJuIGltbWVkaWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24KKwkgKi8KKwlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKKwkqZmlyc3RfaW5kZXhwID0gaW5kZXg7CisKKwlyZXR1cm4gdGFnZ2VkOworfQorRVhQT1JUX1NZTUJPTChyYWRpeF90cmVlX3JhbmdlX3RhZ19pZl90YWdnZWQpOworCisKKy8qKgogICoJcmFkaXhfdHJlZV9uZXh0X2hvbGUgICAgLSAgICBmaW5kIHRoZSBuZXh0IGhvbGUgKG5vdC1wcmVzZW50IGVudHJ5KQogICoJQHJvb3Q6CQl0cmVlIHJvb3QKICAqCUBpbmRleDoJCWluZGV4IGtleQpkaWZmIC0tZ2l0IGEvbGliL3JhaWQ2L01ha2VmaWxlIGIvbGliL3JhaWQ2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YmYzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvcmFpZDYvTWFrZWZpbGUKQEAgLTAsMCArMSw3OCBAQAorb2JqLSQoQ09ORklHX1JBSUQ2X1BRKQkrPSByYWlkNl9wcS5vCisKK3JhaWQ2X3BxLXkJKz0gcmFpZDZhbGdvcy5vIHJhaWQ2cmVjb3YubyByYWlkNnRhYmxlcy5vIFwKKwkJICAgcmFpZDZpbnQxLm8gcmFpZDZpbnQyLm8gcmFpZDZpbnQ0Lm8gXAorCQkgICByYWlkNmludDgubyByYWlkNmludDE2Lm8gcmFpZDZpbnQzMi5vIFwKKwkJICAgcmFpZDZhbHRpdmVjMS5vIHJhaWQ2YWx0aXZlYzIubyByYWlkNmFsdGl2ZWM0Lm8gXAorCQkgICByYWlkNmFsdGl2ZWM4Lm8gXAorCQkgICByYWlkNm1teC5vIHJhaWQ2c3NlMS5vIHJhaWQ2c3NlMi5vCitob3N0cHJvZ3MteQkrPSBta3RhYmxlcworCitxdWlldF9jbWRfdW5yb2xsID0gVU5ST0xMICAkQAorICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCisgICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKKworaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKK2FsdGl2ZWNfZmxhZ3MgOj0gLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMKK2VuZGlmCisKK3RhcmdldHMgKz0gcmFpZDZpbnQxLmMKKyQob2JqKS9yYWlkNmludDEuYzogICBVTlJPTEwgOj0gMQorJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKKwordGFyZ2V0cyArPSByYWlkNmludDIuYworJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCiskKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQorCit0YXJnZXRzICs9IHJhaWQ2aW50NC5jCiskKG9iaikvcmFpZDZpbnQ0LmM6ICAgVU5ST0xMIDo9IDQKKyQob2JqKS9yYWlkNmludDQuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCisKK3RhcmdldHMgKz0gcmFpZDZpbnQ4LmMKKyQob2JqKS9yYWlkNmludDguYzogICBVTlJPTEwgOj0gOAorJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKKwordGFyZ2V0cyArPSByYWlkNmludDE2LmMKKyQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKKyQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCisKK3RhcmdldHMgKz0gcmFpZDZpbnQzMi5jCiskKG9iaikvcmFpZDZpbnQzMi5jOiAgVU5ST0xMIDo9IDMyCiskKG9iaikvcmFpZDZpbnQzMi5jOiAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQorCitDRkxBR1NfcmFpZDZhbHRpdmVjMS5vICs9ICQoYWx0aXZlY19mbGFncykKK3RhcmdldHMgKz0gcmFpZDZhbHRpdmVjMS5jCiskKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgIFVOUk9MTCA6PSAxCiskKG9iaikvcmFpZDZhbHRpdmVjMS5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCisKK0NGTEFHU19yYWlkNmFsdGl2ZWMyLm8gKz0gJChhbHRpdmVjX2ZsYWdzKQordGFyZ2V0cyArPSByYWlkNmFsdGl2ZWMyLmMKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgVU5ST0xMIDo9IDIKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKKworQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCit0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYworJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAorJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQorCitDRkxBR1NfcmFpZDZhbHRpdmVjOC5vICs9ICQoYWx0aXZlY19mbGFncykKK3RhcmdldHMgKz0gcmFpZDZhbHRpdmVjOC5jCiskKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgIFVOUk9MTCA6PSA4CiskKG9iaikvcmFpZDZhbHRpdmVjOC5jOiAgICQoc3JjKS9yYWlkNmFsdGl2ZWMudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCisKK3F1aWV0X2NtZF9ta3RhYmxlID0gVEFCTEUgICAkQAorICAgICAgY21kX21rdGFibGUgPSAkKG9iaikvbWt0YWJsZXMgPiAkQCB8fCAoIHJtIC1mICRAICYmIGV4aXQgMSApCisKK3RhcmdldHMgKz0gcmFpZDZ0YWJsZXMuYworJChvYmopL3JhaWQ2dGFibGVzLmM6ICQob2JqKS9ta3RhYmxlcyBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLG1rdGFibGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21rdGFibGVzLmMgYi9saWIvcmFpZDYvbWt0YWJsZXMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9ta3RhYmxlcy5jCnJlbmFtZSB0byBsaWIvcmFpZDYvbWt0YWJsZXMuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsZ29zLmMgYi9saWIvcmFpZDYvcmFpZDZhbGdvcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2YWxnb3MuYwpyZW5hbWUgdG8gbGliL3JhaWQ2L3JhaWQ2YWxnb3MuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMgYi9saWIvcmFpZDYvcmFpZDZhbHRpdmVjLnVjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2YWx0aXZlYy51YwpyZW5hbWUgdG8gbGliL3JhaWQ2L3JhaWQ2YWx0aXZlYy51YwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmludC51YyBiL2xpYi9yYWlkNi9yYWlkNmludC51YwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9yYWlkNmludC51YwpyZW5hbWUgdG8gbGliL3JhaWQ2L3JhaWQ2aW50LnVjCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2bW14LmMgYi9saWIvcmFpZDYvcmFpZDZtbXguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9yYWlkNm1teC5jCnJlbmFtZSB0byBsaWIvcmFpZDYvcmFpZDZtbXguYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnJlY292LmMgYi9saWIvcmFpZDYvcmFpZDZyZWNvdi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2cmVjb3YuYwpyZW5hbWUgdG8gbGliL3JhaWQ2L3JhaWQ2cmVjb3YuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnNzZTEuYyBiL2xpYi9yYWlkNi9yYWlkNnNzZTEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9yYWlkNnNzZTEuYwpyZW5hbWUgdG8gbGliL3JhaWQ2L3JhaWQ2c3NlMS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2c3NlMi5jIGIvbGliL3JhaWQ2L3JhaWQ2c3NlMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2c3NlMi5jCnJlbmFtZSB0byBsaWIvcmFpZDYvcmFpZDZzc2UyLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlIGIvbGliL3JhaWQ2L3JhaWQ2dGVzdC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKcmVuYW1lIHRvIGxpYi9yYWlkNi9yYWlkNnRlc3QvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L3Rlc3QuYyBiL2xpYi9yYWlkNi9yYWlkNnRlc3QvdGVzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21kL3JhaWQ2dGVzdC90ZXN0LmMKcmVuYW1lIHRvIGxpYi9yYWlkNi9yYWlkNnRlc3QvdGVzdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2eDg2LmggYi9saWIvcmFpZDYvcmFpZDZ4ODYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9tZC9yYWlkNng4Ni5oCnJlbmFtZSB0byBsaWIvcmFpZDYvcmFpZDZ4ODYuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC91bnJvbGwuYXdrIGIvbGliL3JhaWQ2L3Vucm9sbC5hd2sKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWQvdW5yb2xsLmF3awpyZW5hbWUgdG8gbGliL3JhaWQ2L3Vucm9sbC5hd2sKZGlmZiAtLWdpdCBhL2xpYi9yd3NlbS5jIGIvbGliL3J3c2VtLmMKaW5kZXggY2ViYThlMi4uZjIzNmQ3YyAxMDA2NDQKLS0tIGEvbGliL3J3c2VtLmMKKysrIGIvbGliL3J3c2VtLmMKQEAgLTM2LDQ1ICszNiw1NiBAQAogI2RlZmluZSBSV1NFTV9XQUlUSU5HX0ZPUl9XUklURQkweDAwMDAwMDAyCiB9OwogCisvKiBXYWtlIHR5cGVzIGZvciBfX3J3c2VtX2RvX3dha2UoKS4gIE5vdGUgdGhhdCBSV1NFTV9XQUtFX05PX0FDVElWRSBhbmQKKyAqIFJXU0VNX1dBS0VfUkVBRF9PV05FRCBpbXBseSB0aGF0IHRoZSBzcGlubG9jayBtdXN0IGhhdmUgYmVlbiBrZXB0IGhlbGQKKyAqIHNpbmNlIHRoZSByd3NlbSB2YWx1ZSB3YXMgb2JzZXJ2ZWQuCisgKi8KKyNkZWZpbmUgUldTRU1fV0FLRV9BTlkgICAgICAgIDAgLyogV2FrZSB3aGF0ZXZlcidzIGF0IGhlYWQgb2Ygd2FpdCBsaXN0ICovCisjZGVmaW5lIFJXU0VNX1dBS0VfTk9fQUNUSVZFICAxIC8qIHJ3c2VtIHdhcyBvYnNlcnZlZCB3aXRoIG5vIGFjdGl2ZSB0aHJlYWQgKi8KKyNkZWZpbmUgUldTRU1fV0FLRV9SRUFEX09XTkVEIDIgLyogcndzZW0gd2FzIG9ic2VydmVkIHRvIGJlIHJlYWQgb3duZWQgKi8KKwogLyoKICAqIGhhbmRsZSB0aGUgbG9jayByZWxlYXNlIHdoZW4gcHJvY2Vzc2VzIGJsb2NrZWQgb24gaXQgdGhhdCBjYW4gbm93IHJ1bgogICogLSBpZiB3ZSBjb21lIGhlcmUgZnJvbSB1cF94eHh4KCksIHRoZW46CiAgKiAgIC0gdGhlICdhY3RpdmUgcGFydCcgb2YgY291bnQgKCYweDAwMDBmZmZmKSByZWFjaGVkIDAgKGJ1dCBtYXkgaGF2ZSBjaGFuZ2VkKQogICogICAtIHRoZSAnd2FpdGluZyBwYXJ0JyBvZiBjb3VudCAoJjB4ZmZmZjAwMDApIGlzIC12ZSAoYW5kIHdpbGwgc3RpbGwgYmUgc28pCi0gKiAgIC0gdGhlcmUgbXVzdCBiZSBzb21lb25lIG9uIHRoZSBxdWV1ZQorICogLSB0aGVyZSBtdXN0IGJlIHNvbWVvbmUgb24gdGhlIHF1ZXVlCiAgKiAtIHRoZSBzcGlubG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlcgogICogLSB3b2tlbiBwcm9jZXNzIGJsb2NrcyBhcmUgZGlzY2FyZGVkIGZyb20gdGhlIGxpc3QgYWZ0ZXIgaGF2aW5nIHRhc2sgemVyb2VkCiAgKiAtIHdyaXRlcnMgYXJlIG9ubHkgd29rZW4gaWYgZG93bmdyYWRpbmcgaXMgZmFsc2UKICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKLV9fcndzZW1fZG9fd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCBkb3duZ3JhZGluZykKK3N0YXRpYyBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKK19fcndzZW1fZG9fd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sIGludCB3YWtlX3R5cGUpCiB7CiAJc3RydWN0IHJ3c2VtX3dhaXRlciAqd2FpdGVyOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7Ci0Jc2lnbmVkIGxvbmcgb2xkY291bnQsIHdva2VuLCBsb29wOwotCi0JaWYgKGRvd25ncmFkaW5nKQotCQlnb3RvIGRvbnRfd2FrZV93cml0ZXJzOwotCi0JLyogaWYgd2UgY2FtZSB0aHJvdWdoIGFuIHVwX3h4eHgoKSBjYWxsLCB3ZSBvbmx5IG9ubHkgd2FrZSBzb21lb25lIHVwCi0JICogaWYgd2UgY2FuIHRyYW5zaXRpb24gdGhlIGFjdGl2ZSBwYXJ0IG9mIHRoZSBjb3VudCBmcm9tIDAgLT4gMQotCSAqLwotIHRyeV9hZ2FpbjoKLQlvbGRjb3VudCA9IHJ3c2VtX2F0b21pY191cGRhdGUoUldTRU1fQUNUSVZFX0JJQVMsIHNlbSkKLQkJCQkJCS0gUldTRU1fQUNUSVZFX0JJQVM7Ci0JaWYgKG9sZGNvdW50ICYgUldTRU1fQUNUSVZFX01BU0spCi0JCWdvdG8gdW5kbzsKKwlzaWduZWQgbG9uZyBvbGRjb3VudCwgd29rZW4sIGxvb3AsIGFkanVzdG1lbnQ7CiAKIAl3YWl0ZXIgPSBsaXN0X2VudHJ5KHNlbS0+d2FpdF9saXN0Lm5leHQsIHN0cnVjdCByd3NlbV93YWl0ZXIsIGxpc3QpOwotCi0JLyogdHJ5IHRvIGdyYW50IGEgc2luZ2xlIHdyaXRlIGxvY2sgaWYgdGhlcmUncyBhIHdyaXRlciBhdCB0aGUgZnJvbnQKLQkgKiBvZiB0aGUgcXVldWUgLSBub3RlIHdlIGxlYXZlIHRoZSAnYWN0aXZlIHBhcnQnIG9mIHRoZSBjb3VudAotCSAqIGluY3JlbWVudGVkIGJ5IDEgYW5kIHRoZSB3YWl0aW5nIHBhcnQgaW5jcmVtZW50ZWQgYnkgMHgwMDAxMDAwMAotCSAqLwogCWlmICghKHdhaXRlci0+ZmxhZ3MgJiBSV1NFTV9XQUlUSU5HX0ZPUl9XUklURSkpCiAJCWdvdG8gcmVhZGVyc19vbmx5OwogCisJaWYgKHdha2VfdHlwZSA9PSBSV1NFTV9XQUtFX1JFQURfT1dORUQpCisJCS8qIEFub3RoZXIgYWN0aXZlIHJlYWRlciB3YXMgb2JzZXJ2ZWQsIHNvIHdha2V1cCBpcyBub3QKKwkJICogbGlrZWx5IHRvIHN1Y2NlZWQuIFNhdmUgdGhlIGF0b21pYyBvcC4KKwkJICovCisJCWdvdG8gb3V0OworCisJLyogVGhlcmUncyBhIHdyaXRlciBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIC0gdHJ5IHRvIGdyYW50IGl0IHRoZQorCSAqIHdyaXRlIGxvY2suICBIb3dldmVyLCB3ZSBvbmx5IHdha2UgdGhpcyB3cml0ZXIgaWYgd2UgY2FuIHRyYW5zaXRpb24KKwkgKiB0aGUgYWN0aXZlIHBhcnQgb2YgdGhlIGNvdW50IGZyb20gMCAtPiAxCisJICovCisJYWRqdXN0bWVudCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOworCWlmICh3YWl0ZXItPmxpc3QubmV4dCA9PSAmc2VtLT53YWl0X2xpc3QpCisJCWFkanVzdG1lbnQgLT0gUldTRU1fV0FJVElOR19CSUFTOworCisgdHJ5X2FnYWluX3dyaXRlOgorCW9sZGNvdW50ID0gcndzZW1fYXRvbWljX3VwZGF0ZShhZGp1c3RtZW50LCBzZW0pIC0gYWRqdXN0bWVudDsKKwlpZiAob2xkY291bnQgJiBSV1NFTV9BQ1RJVkVfTUFTSykKKwkJLyogU29tZW9uZSBncmFiYmVkIHRoZSBzZW0gYWxyZWFkeSAqLworCQlnb3RvIHVuZG9fd3JpdGU7CisKIAkvKiBXZSBtdXN0IGJlIGNhcmVmdWwgbm90IHRvIHRvdWNoICd3YWl0ZXInIGFmdGVyIHdlIHNldCAtPnRhc2sgPSBOVUxMLgogCSAqIEl0IGlzIGFuIGFsbG9jYXRlZCBvbiB0aGUgd2FpdGVyJ3Mgc3RhY2sgYW5kIG1heSBiZWNvbWUgaW52YWxpZCBhdAogCSAqIGFueSB0aW1lIGFmdGVyIHRoYXQgcG9pbnQgKGR1ZSB0byBhIHdha2V1cCBmcm9tIGFub3RoZXIgc291cmNlKS4KQEAgLTg3LDE4ICs5OCwzMCBAQAogCXB1dF90YXNrX3N0cnVjdCh0c2spOwogCWdvdG8gb3V0OwogCi0JLyogZG9uJ3Qgd2FudCB0byB3YWtlIGFueSB3cml0ZXJzICovCi0gZG9udF93YWtlX3dyaXRlcnM6Ci0Jd2FpdGVyID0gbGlzdF9lbnRyeShzZW0tPndhaXRfbGlzdC5uZXh0LCBzdHJ1Y3QgcndzZW1fd2FpdGVyLCBsaXN0KTsKLQlpZiAod2FpdGVyLT5mbGFncyAmIFJXU0VNX1dBSVRJTkdfRk9SX1dSSVRFKQorIHJlYWRlcnNfb25seToKKwkvKiBJZiB3ZSBjb21lIGhlcmUgZnJvbSB1cF94eHh4KCksIGFub3RoZXIgdGhyZWFkIG1pZ2h0IGhhdmUgcmVhY2hlZAorCSAqIHJ3c2VtX2Rvd25fZmFpbGVkX2NvbW1vbigpIGJlZm9yZSB3ZSBhY3F1aXJlZCB0aGUgc3BpbmxvY2sgYW5kCisJICogd29rZW4gdXAgYSB3YWl0ZXIsIG1ha2luZyBpdCBub3cgYWN0aXZlLiAgV2UgcHJlZmVyIHRvIGNoZWNrIGZvcgorCSAqIHRoaXMgZmlyc3QgaW4gb3JkZXIgdG8gbm90IHNwZW5kIHRvbyBtdWNoIHRpbWUgd2l0aCB0aGUgc3BpbmxvY2sKKwkgKiBoZWxkIGlmIHdlJ3JlIG5vdCBnb2luZyB0byBiZSBhYmxlIHRvIHdha2UgdXAgcmVhZGVycyBpbiB0aGUgZW5kLgorCSAqCisJICogTm90ZSB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSB0aGUgcndzZW0gY291bnQ6IGFueSB3cml0ZXIKKwkgKiB0cnlpbmcgdG8gYWNxdWlyZSByd3NlbSB3aWxsIHJ1biByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZCgpIGR1ZQorCSAqIHRvIHRoZSB3YWl0aW5nIHRocmVhZHMgYW5kIGJsb2NrIHRyeWluZyB0byBhY3F1aXJlIHRoZSBzcGlubG9jay4KKwkgKgorCSAqIFdlIHVzZSBhIGR1bW15IGF0b21pYyB1cGRhdGUgaW4gb3JkZXIgdG8gYWNxdWlyZSB0aGUgY2FjaGUgbGluZQorCSAqIGV4Y2x1c2l2ZWx5IHNpbmNlIHdlIGV4cGVjdCB0byBzdWNjZWVkIGFuZCBydW4gdGhlIGZpbmFsIHJ3c2VtCisJICogY291bnQgYWRqdXN0bWVudCBwcmV0dHkgc29vbi4KKwkgKi8KKwlpZiAod2FrZV90eXBlID09IFJXU0VNX1dBS0VfQU5ZICYmCisJICAgIHJ3c2VtX2F0b21pY191cGRhdGUoMCwgc2VtKSA8IFJXU0VNX1dBSVRJTkdfQklBUykKKwkJLyogU29tZW9uZSBncmFiYmVkIHRoZSBzZW0gZm9yIHdyaXRlIGFscmVhZHkgKi8KIAkJZ290byBvdXQ7CiAKLQkvKiBncmFudCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgcmVhZCBsb2NrcyB0byB0aGUgcmVhZGVycyBhdCB0aGUgZnJvbnQKLQkgKiBvZiB0aGUgcXVldWUKLQkgKiAtIG5vdGUgd2UgaW5jcmVtZW50IHRoZSAnYWN0aXZlIHBhcnQnIG9mIHRoZSBjb3VudCBieSB0aGUgbnVtYmVyIG9mCi0JICogICByZWFkZXJzIGJlZm9yZSB3YWtpbmcgYW55IHByb2Nlc3NlcyB1cAorCS8qIEdyYW50IGFuIGluZmluaXRlIG51bWJlciBvZiByZWFkIGxvY2tzIHRvIHRoZSByZWFkZXJzIGF0IHRoZSBmcm9udAorCSAqIG9mIHRoZSBxdWV1ZS4gIE5vdGUgd2UgaW5jcmVtZW50IHRoZSAnYWN0aXZlIHBhcnQnIG9mIHRoZSBjb3VudCBieQorCSAqIHRoZSBudW1iZXIgb2YgcmVhZGVycyBiZWZvcmUgd2FraW5nIGFueSBwcm9jZXNzZXMgdXAuCiAJICovCi0gcmVhZGVyc19vbmx5OgogCXdva2VuID0gMDsKIAlkbyB7CiAJCXdva2VuKys7CkBAIC0xMTEsMTYgKzEzNCwxNSBAQAogCiAJfSB3aGlsZSAod2FpdGVyLT5mbGFncyAmIFJXU0VNX1dBSVRJTkdfRk9SX1JFQUQpOwogCi0JbG9vcCA9IHdva2VuOwotCXdva2VuICo9IFJXU0VNX0FDVElWRV9CSUFTIC0gUldTRU1fV0FJVElOR19CSUFTOwotCWlmICghZG93bmdyYWRpbmcpCi0JCS8qIHdlJ2QgYWxyZWFkeSBkb25lIG9uZSBpbmNyZW1lbnQgZWFybGllciAqLwotCQl3b2tlbiAtPSBSV1NFTV9BQ1RJVkVfQklBUzsKKwlhZGp1c3RtZW50ID0gd29rZW4gKiBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOworCWlmICh3YWl0ZXItPmZsYWdzICYgUldTRU1fV0FJVElOR19GT1JfUkVBRCkKKwkJLyogaGl0IGVuZCBvZiBsaXN0IGFib3ZlICovCisJCWFkanVzdG1lbnQgLT0gUldTRU1fV0FJVElOR19CSUFTOwogCi0JcndzZW1fYXRvbWljX2FkZCh3b2tlbiwgc2VtKTsKKwlyd3NlbV9hdG9taWNfYWRkKGFkanVzdG1lbnQsIHNlbSk7CiAKIAluZXh0ID0gc2VtLT53YWl0X2xpc3QubmV4dDsKLQlmb3IgKDsgbG9vcCA+IDA7IGxvb3AtLSkgeworCWZvciAobG9vcCA9IHdva2VuOyBsb29wID4gMDsgbG9vcC0tKSB7CiAJCXdhaXRlciA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHJ3c2VtX3dhaXRlciwgbGlzdCk7CiAJCW5leHQgPSB3YWl0ZXItPmxpc3QubmV4dDsKIAkJdHNrID0gd2FpdGVyLT50YXNrOwpAQCAtMTM4LDEwICsxNjAsMTAgQEAKIAogCS8qIHVuZG8gdGhlIGNoYW5nZSB0byB0aGUgYWN0aXZlIGNvdW50LCBidXQgY2hlY2sgZm9yIGEgdHJhbnNpdGlvbgogCSAqIDEtPjAgKi8KLSB1bmRvOgotCWlmIChyd3NlbV9hdG9taWNfdXBkYXRlKC1SV1NFTV9BQ1RJVkVfQklBUywgc2VtKSAmIFJXU0VNX0FDVElWRV9NQVNLKQorIHVuZG9fd3JpdGU6CisJaWYgKHJ3c2VtX2F0b21pY191cGRhdGUoLWFkanVzdG1lbnQsIHNlbSkgJiBSV1NFTV9BQ1RJVkVfTUFTSykKIAkJZ290byBvdXQ7Ci0JZ290byB0cnlfYWdhaW47CisJZ290byB0cnlfYWdhaW5fd3JpdGU7CiB9CiAKIC8qCkBAIC0xNDksOCArMTcxLDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCByd19zZW1hcGhvcmUgX19zY2hlZCAqCiByd3NlbV9kb3duX2ZhaWxlZF9jb21tb24oc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtLAotCQkJc3RydWN0IHJ3c2VtX3dhaXRlciAqd2FpdGVyLCBzaWduZWQgbG9uZyBhZGp1c3RtZW50KQorCQkJIHVuc2lnbmVkIGludCBmbGFncywgc2lnbmVkIGxvbmcgYWRqdXN0bWVudCkKIHsKKwlzdHJ1Y3QgcndzZW1fd2FpdGVyIHdhaXRlcjsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAJc2lnbmVkIGxvbmcgY291bnQ7CiAKQEAgLTE1OCwyMyArMTgxLDM0IEBACiAKIAkvKiBzZXQgdXAgbXkgb3duIHN0eWxlIG9mIHdhaXRxdWV1ZSAqLwogCXNwaW5fbG9ja19pcnEoJnNlbS0+d2FpdF9sb2NrKTsKLQl3YWl0ZXItPnRhc2sgPSB0c2s7CisJd2FpdGVyLnRhc2sgPSB0c2s7CisJd2FpdGVyLmZsYWdzID0gZmxhZ3M7CiAJZ2V0X3Rhc2tfc3RydWN0KHRzayk7CiAKLQlsaXN0X2FkZF90YWlsKCZ3YWl0ZXItPmxpc3QsICZzZW0tPndhaXRfbGlzdCk7CisJaWYgKGxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSkKKwkJYWRqdXN0bWVudCArPSBSV1NFTV9XQUlUSU5HX0JJQVM7CisJbGlzdF9hZGRfdGFpbCgmd2FpdGVyLmxpc3QsICZzZW0tPndhaXRfbGlzdCk7CiAKLQkvKiB3ZSdyZSBub3cgd2FpdGluZyBvbiB0aGUgbG9jaywgYnV0IG5vIGxvbmdlciBhY3RpdmVseSByZWFkLWxvY2tpbmcgKi8KKwkvKiB3ZSdyZSBub3cgd2FpdGluZyBvbiB0aGUgbG9jaywgYnV0IG5vIGxvbmdlciBhY3RpdmVseSBsb2NraW5nICovCiAJY291bnQgPSByd3NlbV9hdG9taWNfdXBkYXRlKGFkanVzdG1lbnQsIHNlbSk7CiAKLQkvKiBpZiB0aGVyZSBhcmUgbm8gYWN0aXZlIGxvY2tzLCB3YWtlIHRoZSBmcm9udCBxdWV1ZWQgcHJvY2VzcyhlcykgdXAgKi8KLQlpZiAoIShjb3VudCAmIFJXU0VNX0FDVElWRV9NQVNLKSkKLQkJc2VtID0gX19yd3NlbV9kb193YWtlKHNlbSwgMCk7CisJLyogSWYgdGhlcmUgYXJlIG5vIGFjdGl2ZSBsb2Nrcywgd2FrZSB0aGUgZnJvbnQgcXVldWVkIHByb2Nlc3MoZXMpIHVwLgorCSAqCisJICogQWx0ZXJuYXRpdmVseSwgaWYgd2UncmUgY2FsbGVkIGZyb20gYSBmYWlsZWQgZG93bl93cml0ZSgpLCB0aGVyZQorCSAqIHdlcmUgYWxyZWFkeSB0aHJlYWRzIHF1ZXVlZCBiZWZvcmUgdXMgYW5kIHRoZXJlIGFyZSBubyBhY3RpdmUKKwkgKiB3cml0ZXJzLCB0aGUgbG9jayBtdXN0IGJlIHJlYWQgb3duZWQ7IHNvIHdlIHRyeSB0byB3YWtlIGFueSByZWFkCisJICogbG9ja3MgdGhhdCB3ZXJlIHF1ZXVlZCBhaGVhZCBvZiB1cy4gKi8KKwlpZiAoY291bnQgPT0gUldTRU1fV0FJVElOR19CSUFTKQorCQlzZW0gPSBfX3J3c2VtX2RvX3dha2Uoc2VtLCBSV1NFTV9XQUtFX05PX0FDVElWRSk7CisJZWxzZSBpZiAoY291bnQgPiBSV1NFTV9XQUlUSU5HX0JJQVMgJiYKKwkJIGFkanVzdG1lbnQgPT0gLVJXU0VNX0FDVElWRV9XUklURV9CSUFTKQorCQlzZW0gPSBfX3J3c2VtX2RvX3dha2Uoc2VtLCBSV1NFTV9XQUtFX1JFQURfT1dORUQpOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZzZW0tPndhaXRfbG9jayk7CiAKIAkvKiB3YWl0IHRvIGJlIGdpdmVuIHRoZSBsb2NrICovCiAJZm9yICg7OykgewotCQlpZiAoIXdhaXRlci0+dGFzaykKKwkJaWYgKCF3YWl0ZXIudGFzaykKIAkJCWJyZWFrOwogCQlzY2hlZHVsZSgpOwogCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKQEAgLTE5MSwxMiArMjI1LDggQEAKIGFzbXJlZ3Bhcm0gc3RydWN0IHJ3X3NlbWFwaG9yZSBfX3NjaGVkICoKIHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewotCXN0cnVjdCByd3NlbV93YWl0ZXIgd2FpdGVyOwotCi0Jd2FpdGVyLmZsYWdzID0gUldTRU1fV0FJVElOR19GT1JfUkVBRDsKLQlyd3NlbV9kb3duX2ZhaWxlZF9jb21tb24oc2VtLCAmd2FpdGVyLAotCQkJCVJXU0VNX1dBSVRJTkdfQklBUyAtIFJXU0VNX0FDVElWRV9CSUFTKTsKLQlyZXR1cm4gc2VtOworCXJldHVybiByd3NlbV9kb3duX2ZhaWxlZF9jb21tb24oc2VtLCBSV1NFTV9XQUlUSU5HX0ZPUl9SRUFELAorCQkJCQktUldTRU1fQUNUSVZFX1JFQURfQklBUyk7CiB9CiAKIC8qCkBAIC0yMDUsMTIgKzIzNSw4IEBACiBhc21yZWdwYXJtIHN0cnVjdCByd19zZW1hcGhvcmUgX19zY2hlZCAqCiByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0Jc3RydWN0IHJ3c2VtX3dhaXRlciB3YWl0ZXI7Ci0KLQl3YWl0ZXIuZmxhZ3MgPSBSV1NFTV9XQUlUSU5HX0ZPUl9XUklURTsKLQlyd3NlbV9kb3duX2ZhaWxlZF9jb21tb24oc2VtLCAmd2FpdGVyLCAtUldTRU1fQUNUSVZFX0JJQVMpOwotCi0JcmV0dXJuIHNlbTsKKwlyZXR1cm4gcndzZW1fZG93bl9mYWlsZWRfY29tbW9uKHNlbSwgUldTRU1fV0FJVElOR19GT1JfV1JJVEUsCisJCQkJCS1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUyk7CiB9CiAKIC8qCkBAIC0yMjUsNyArMjUxLDcgQEAKIAogCS8qIGRvIG5vdGhpbmcgaWYgbGlzdCBlbXB0eSAqLwogCWlmICghbGlzdF9lbXB0eSgmc2VtLT53YWl0X2xpc3QpKQotCQlzZW0gPSBfX3J3c2VtX2RvX3dha2Uoc2VtLCAwKTsKKwkJc2VtID0gX19yd3NlbV9kb193YWtlKHNlbSwgUldTRU1fV0FLRV9BTlkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VtLT53YWl0X2xvY2ssIGZsYWdzKTsKIApAQCAtMjQ1LDcgKzI3MSw3IEBACiAKIAkvKiBkbyBub3RoaW5nIGlmIGxpc3QgZW1wdHkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJnNlbS0+d2FpdF9saXN0KSkKLQkJc2VtID0gX19yd3NlbV9kb193YWtlKHNlbSwgMSk7CisJCXNlbSA9IF9fcndzZW1fZG9fd2FrZShzZW0sIFJXU0VNX1dBS0VfUkVBRF9PV05FRCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW0tPndhaXRfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9saWIvc2NhdHRlcmxpc3QuYyBiL2xpYi9zY2F0dGVybGlzdC5jCmluZGV4IDlhZmEyNWIuLmE1ZWM0MjggMTAwNjQ0Ci0tLSBhL2xpYi9zY2F0dGVybGlzdC5jCisrKyBiL2xpYi9zY2F0dGVybGlzdC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CiAKIC8qKgogICogc2dfbmV4dCAtIHJldHVybiB0aGUgbmV4dCBzY2F0dGVybGlzdCBlbnRyeSBpbiBhIGxpc3QKQEAgLTExNSwxNyArMTE2LDI5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2ttYWxsb2ModW5zaWduZWQgaW50IG5lbnRzLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlpZiAobmVudHMgPT0gU0dfTUFYX1NJTkdMRV9BTExPQykKLQkJcmV0dXJuIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgX19nZXRfZnJlZV9wYWdlKGdmcF9tYXNrKTsKLQllbHNlCisJaWYgKG5lbnRzID09IFNHX01BWF9TSU5HTEVfQUxMT0MpIHsKKwkJLyoKKwkJICogS21lbWxlYWsgZG9lc24ndCB0cmFjayBwYWdlIGFsbG9jYXRpb25zIGFzIHRoZXkgYXJlIG5vdAorCQkgKiBjb21tb25seSB1c2VkIChpbiBhIHJhdyBmb3JtKSBmb3Iga2VybmVsIGRhdGEgc3RydWN0dXJlcy4KKwkJICogQXMgd2UgY2hhaW4gdG9nZXRoZXIgYSBsaXN0IG9mIHBhZ2VzIGFuZCB0aGVuIGEgbm9ybWFsCisJCSAqIGttYWxsb2MgKHRyYWNrZWQgYnkga21lbWxlYWspLCBpbiBvcmRlciB0byBmb3IgdGhhdCBsYXN0CisJCSAqIGFsbG9jYXRpb24gbm90IHRvIGJlY29tZSBkZWNvdXBsZWQgKGFuZCB0aHVzIGEKKwkJICogZmFsc2UtcG9zaXRpdmUpIHdlIG5lZWQgdG8gaW5mb3JtIGttZW1sZWFrIG9mIGFsbCB0aGUKKwkJICogaW50ZXJtZWRpYXRlIGFsbG9jYXRpb25zLgorCQkgKi8KKwkJdm9pZCAqcHRyID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKGdmcF9tYXNrKTsKKwkJa21lbWxlYWtfYWxsb2MocHRyLCBQQUdFX1NJWkUsIDEsIGdmcF9tYXNrKTsKKwkJcmV0dXJuIHB0cjsKKwl9IGVsc2UKIAkJcmV0dXJuIGttYWxsb2MobmVudHMgKiBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSwgZ2ZwX21hc2spOwogfQogCiBzdGF0aWMgdm9pZCBzZ19rZnJlZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMpCiB7Ci0JaWYgKG5lbnRzID09IFNHX01BWF9TSU5HTEVfQUxMT0MpCisJaWYgKG5lbnRzID09IFNHX01BWF9TSU5HTEVfQUxMT0MpIHsKKwkJa21lbWxlYWtfZnJlZShzZyk7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2cpOwotCWVsc2UKKwl9IGVsc2UKIAkJa2ZyZWUoc2cpOwogfQogCmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDRlZTE5ZDAuLjdhZjlkODQgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0xNDYsMTkgKzE0NiwxNiBAQAogewogCWNoYXIgKnRhaWw7CiAJdW5zaWduZWQgbG9uZyB2YWw7Ci0Jc2l6ZV90IGxlbjsKIAogCSpyZXMgPSAwOwotCWxlbiA9IHN0cmxlbihjcCk7Ci0JaWYgKGxlbiA9PSAwKQorCWlmICghKmNwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGNwLCAmdGFpbCwgYmFzZSk7CiAJaWYgKHRhaWwgPT0gY3ApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCgqdGFpbCA9PSAnXDAnKSB8fAotCQkoKGxlbiA9PSAoc2l6ZV90KSh0YWlsIC0gY3ApICsgMSkgJiYgKCp0YWlsID09ICdcbicpKSkgeworCWlmICgodGFpbFswXSA9PSAnXDAnKSB8fCAodGFpbFswXSA9PSAnXG4nICYmIHRhaWxbMV0gPT0gJ1wwJykpIHsKIAkJKnJlcyA9IHZhbDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjIwLDE4ICsyMTcsMTUgQEAKIHsKIAljaGFyICp0YWlsOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Ci0Jc2l6ZV90IGxlbjsKIAogCSpyZXMgPSAwOwotCWxlbiA9IHN0cmxlbihjcCk7Ci0JaWYgKGxlbiA9PSAwKQorCWlmICghKmNwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsbChjcCwgJnRhaWwsIGJhc2UpOwogCWlmICh0YWlsID09IGNwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKCp0YWlsID09ICdcMCcpIHx8Ci0JCSgobGVuID09IChzaXplX3QpKHRhaWwgLSBjcCkgKyAxKSAmJiAoKnRhaWwgPT0gJ1xuJykpKSB7CisJaWYgKCh0YWlsWzBdID09ICdcMCcpIHx8ICh0YWlsWzBdID09ICdcbicgJiYgdGFpbFsxXSA9PSAnXDAnKSkgewogCQkqcmVzID0gdmFsOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCAxMjNiY2VmLi5lYWE0YTViIDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvd3JpdGViYWNrLmg+CiAKIHN0YXRpYyBhdG9taWNfbG9uZ190IGJkaV9zZXEgPSBBVE9NSUNfTE9OR19JTklUKDApOwogCkBAIC00OSw4ICs1MCw2IEBACiBzdGF0aWMgaW50IGJkaV9zeW5jX3N1cGVycyh2b2lkICopOwogc3RhdGljIHZvaWQgc3luY19zdXBlcnNfdGltZXJfZm4odW5zaWduZWQgbG9uZyk7CiAKLXN0YXRpYyB2b2lkIGJkaV9hZGRfZGVmYXVsdF9mbHVzaGVyX3Rhc2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfRlMKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTY1LDMxICs2NCwyNSBAQAogc3RhdGljIGludCBiZGlfZGVidWdfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGJkaV93cml0ZWJhY2sgKndiOworCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZiZGktPndiOwogCXVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBkaXJ0eV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBiZGlfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgbnJfZGlydHksIG5yX2lvLCBucl9tb3JlX2lvLCBucl93YjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCi0JLyoKLQkgKiBpbm9kZSBsb2NrIGlzIGVub3VnaCBoZXJlLCB0aGUgYmRpLT53Yl9saXN0IGlzIHByb3RlY3RlZCBieQotCSAqIFJDVSBvbiB0aGUgcmVhZGVyIHNpZGUKLQkgKi8KIAlucl93YiA9IG5yX2RpcnR5ID0gbnJfaW8gPSBucl9tb3JlX2lvID0gMDsKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkod2IsICZiZGktPndiX2xpc3QsIGxpc3QpIHsKLQkJbnJfd2IrKzsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJndiLT5iX2RpcnR5LCBpX2xpc3QpCi0JCQlucl9kaXJ0eSsrOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmd2ItPmJfaW8sIGlfbGlzdCkKLQkJCW5yX2lvKys7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZ3Yi0+Yl9tb3JlX2lvLCBpX2xpc3QpCi0JCQlucl9tb3JlX2lvKys7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZ3Yi0+Yl9kaXJ0eSwgaV9saXN0KQorCQlucl9kaXJ0eSsrOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZ3Yi0+Yl9pbywgaV9saXN0KQorCQlucl9pbysrOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZ3Yi0+Yl9tb3JlX2lvLCBpX2xpc3QpCisJCW5yX21vcmVfaW8rKzsKIAlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKLQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgJmJkaV90aHJlc2gsIGJkaSk7CisJZ2xvYmFsX2RpcnR5X2xpbWl0cygmYmFja2dyb3VuZF90aHJlc2gsICZkaXJ0eV90aHJlc2gpOworCWJkaV90aHJlc2ggPSBiZGlfZGlydHlfbGltaXQoYmRpLCBkaXJ0eV90aHJlc2gpOwogCiAjZGVmaW5lIEsoeCkgKCh4KSA8PCAoUEFHRV9TSElGVCAtIDEwKSkKIAlzZXFfcHJpbnRmKG0sCkBAIC05OCwxOSArOTEsMTYgQEAKIAkJICAgIkJkaURpcnR5VGhyZXNoOiAgICU4bHUga0JcbiIKIAkJICAgIkRpcnR5VGhyZXNoOiAgICAgICU4bHUga0JcbiIKIAkJICAgIkJhY2tncm91bmRUaHJlc2g6ICU4bHUga0JcbiIKLQkJICAgIldyaXRlYmFja1RocmVhZHM6ICU4bHVcbiIKIAkJICAgImJfZGlydHk6ICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfaW86ICAgICAgICAgICAgICU4bHVcbiIKIAkJICAgImJfbW9yZV9pbzogICAgICAgICU4bHVcbiIKIAkJICAgImJkaV9saXN0OiAgICAgICAgICU4dVxuIgotCQkgICAic3RhdGU6ICAgICAgICAgICAgJThseFxuIgotCQkgICAid2JfbGlzdDogICAgICAgICAgJTh1XG4iLAorCQkgICAic3RhdGU6ICAgICAgICAgICAgJThseFxuIiwKIAkJICAgKHVuc2lnbmVkIGxvbmcpIEsoYmRpX3N0YXQoYmRpLCBCRElfV1JJVEVCQUNLKSksCiAJCSAgICh1bnNpZ25lZCBsb25nKSBLKGJkaV9zdGF0KGJkaSwgQkRJX1JFQ0xBSU1BQkxFKSksCiAJCSAgIEsoYmRpX3RocmVzaCksIEsoZGlydHlfdGhyZXNoKSwKLQkJICAgSyhiYWNrZ3JvdW5kX3RocmVzaCksIG5yX3diLCBucl9kaXJ0eSwgbnJfaW8sIG5yX21vcmVfaW8sCi0JCSAgICFsaXN0X2VtcHR5KCZiZGktPmJkaV9saXN0KSwgYmRpLT5zdGF0ZSwKLQkJICAgIWxpc3RfZW1wdHkoJmJkaS0+d2JfbGlzdCkpOworCQkgICBLKGJhY2tncm91bmRfdGhyZXNoKSwgbnJfZGlydHksIG5yX2lvLCBucl9tb3JlX2lvLAorCQkgICAhbGlzdF9lbXB0eSgmYmRpLT5iZGlfbGlzdCksIGJkaS0+c3RhdGUpOwogI3VuZGVmIEsKIAogCXJldHVybiAwOwpAQCAtMjQ3LDcgKzIzNyw2IEBACiAJc3luY19zdXBlcnNfdHNrID0ga3RocmVhZF9ydW4oYmRpX3N5bmNfc3VwZXJzLCBOVUxMLCAic3luY19zdXBlcnMiKTsKIAlCVUdfT04oSVNfRVJSKHN5bmNfc3VwZXJzX3RzaykpOwogCi0JaW5pdF90aW1lcigmc3luY19zdXBlcnNfdGltZXIpOwogCXNldHVwX3RpbWVyKCZzeW5jX3N1cGVyc190aW1lciwgc3luY19zdXBlcnNfdGltZXJfZm4sIDApOwogCWJkaV9hcm1fc3VwZXJzX3RpbWVyKCk7CiAKQEAgLTI1OSw3NyArMjQ4LDYgQEAKIH0KIHN1YnN5c19pbml0Y2FsbChkZWZhdWx0X2JkaV9pbml0KTsKIAotc3RhdGljIHZvaWQgYmRpX3diX2luaXQoc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLCBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQotewotCW1lbXNldCh3YiwgMCwgc2l6ZW9mKCp3YikpOwotCi0Jd2ItPmJkaSA9IGJkaTsKLQl3Yi0+bGFzdF9vbGRfZmx1c2ggPSBqaWZmaWVzOwotCUlOSVRfTElTVF9IRUFEKCZ3Yi0+Yl9kaXJ0eSk7Ci0JSU5JVF9MSVNUX0hFQUQoJndiLT5iX2lvKTsKLQlJTklUX0xJU1RfSEVBRCgmd2ItPmJfbW9yZV9pbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJkaV90YXNrX2luaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKLQkJCSAgc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCXNwaW5fbG9jaygmYmRpLT53Yl9sb2NrKTsKLQlsaXN0X2FkZF90YWlsX3JjdSgmd2ItPmxpc3QsICZiZGktPndiX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZiZGktPndiX2xvY2spOwotCi0JdHNrLT5mbGFncyB8PSBQRl9GTFVTSEVSIHwgUEZfU1dBUFdSSVRFOwotCXNldF9mcmVlemFibGUoKTsKLQotCS8qCi0JICogT3VyIHBhcmVudCBtYXkgcnVuIGF0IGEgZGlmZmVyZW50IHByaW9yaXR5LCBqdXN0IHNldCB1cyB0byBub3JtYWwKLQkgKi8KLQlzZXRfdXNlcl9uaWNlKHRzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgYmRpX3N0YXJ0X2ZuKHZvaWQgKnB0cikKLXsKLQlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2IgPSBwdHI7Ci0Jc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IHdiLT5iZGk7Ci0JaW50IHJldDsKLQotCS8qCi0JICogQWRkIHVzIHRvIHRoZSBhY3RpdmUgYmRpX2xpc3QKLQkgKi8KLQlzcGluX2xvY2tfYmgoJmJkaV9sb2NrKTsKLQlsaXN0X2FkZF9yY3UoJmJkaS0+YmRpX2xpc3QsICZiZGlfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmJkaV9sb2NrKTsKLQotCWJkaV90YXNrX2luaXQoYmRpLCB3Yik7Ci0KLQkvKgotCSAqIENsZWFyIHBlbmRpbmcgYml0IGFuZCB3YWtldXAgYW55Ym9keSB3YWl0aW5nIHRvIHRlYXIgdXMgZG93bgotCSAqLwotCWNsZWFyX2JpdChCRElfcGVuZGluZywgJmJkaS0+c3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0Jd2FrZV91cF9iaXQoJmJkaS0+c3RhdGUsIEJESV9wZW5kaW5nKTsKLQotCXJldCA9IGJkaV93cml0ZWJhY2tfdGFzayh3Yik7Ci0KLQkvKgotCSAqIFJlbW92ZSB1cyBmcm9tIHRoZSBsaXN0Ci0JICovCi0Jc3Bpbl9sb2NrKCZiZGktPndiX2xvY2spOwotCWxpc3RfZGVsX3JjdSgmd2ItPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZiZGktPndiX2xvY2spOwotCi0JLyoKLQkgKiBGbHVzaCBhbnkgd29yayB0aGF0IHJhY2VkIHdpdGggdXMgZXhpdGluZy4gTm8gbmV3IHdvcmsKLQkgKiB3aWxsIGJlIGFkZGVkLCBzaW5jZSB0aGlzIGJkaSBpc24ndCBkaXNjb3ZlcmFibGUgYW55bW9yZS4KLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmJkaS0+d29ya19saXN0KSkKLQkJd2JfZG9fd3JpdGViYWNrKHdiLCAxKTsKLQotCXdiLT50YXNrID0gTlVMTDsKLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgYmRpX2hhc19kaXJ0eV9pbyhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCXJldHVybiB3Yl9oYXNfZGlydHlfaW8oJmJkaS0+d2IpOwpAQCAtMzQ4LDEwICsyNjYsMTAgQEAKIH0KIAogLyoKLSAqIGt1cGRhdGVkKCkgdXNlZCB0byBkbyB0aGlzLiBXZSBjYW5ub3QgZG8gaXQgZnJvbSB0aGUgYmRpX2Zvcmtlcl90YXNrKCkKKyAqIGt1cGRhdGVkKCkgdXNlZCB0byBkbyB0aGlzLiBXZSBjYW5ub3QgZG8gaXQgZnJvbSB0aGUgYmRpX2Zvcmtlcl90aHJlYWQoKQogICogb3Igd2UgcmlzayBkZWFkbG9ja2luZyBvbiAtPnNfdW1vdW50LiBUaGUgbG9uZ2VyIHRlcm0gc29sdXRpb24gd291bGQgYmUKICAqIHRvIGltcGxlbWVudCBzeW5jX3N1cGVyc19iZGkoKSBvciBzaW1pbGFyIGFuZCBzaW1wbHkgZG8gaXQgZnJvbSB0aGUKLSAqIGJkaSB3cml0ZWJhY2sgdGFza3MgaW5kaXZpZHVhbGx5LgorICogYmRpIHdyaXRlYmFjayB0aHJlYWQgaW5kaXZpZHVhbGx5LgogICovCiBzdGF0aWMgaW50IGJkaV9zeW5jX3N1cGVycyh2b2lkICp1bnVzZWQpCiB7CkBAIC0zODcsMTQ0ICszMDUsMTk4IEBACiAJYmRpX2FybV9zdXBlcnNfdGltZXIoKTsKIH0KIAotc3RhdGljIGludCBiZGlfZm9ya2VyX3Rhc2sodm9pZCAqcHRyKQorc3RhdGljIHZvaWQgd2FrZXVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICopZGF0YTsKKworCXNwaW5fbG9ja19iaCgmYmRpLT53Yl9sb2NrKTsKKwlpZiAoYmRpLT53Yi50YXNrKSB7CisJCXRyYWNlX3dyaXRlYmFja193YWtlX3RocmVhZChiZGkpOworCQl3YWtlX3VwX3Byb2Nlc3MoYmRpLT53Yi50YXNrKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXaGVuIGJkaSB0YXNrcyBhcmUgaW5hY3RpdmUgZm9yIGxvbmcgdGltZSwgdGhleSBhcmUga2lsbGVkLgorCQkgKiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byB3YWtlLXVwIHRoZSBmb3JrZXIgdGhyZWFkIHdoaWNoCisJCSAqIHNob3VsZCBjcmVhdGUgYW5kIHJ1biB0aGUgYmRpIHRocmVhZC4KKwkJICovCisJCXRyYWNlX3dyaXRlYmFja193YWtlX2Zvcmtlcl90aHJlYWQoYmRpKTsKKwkJd2FrZV91cF9wcm9jZXNzKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mby53Yi50YXNrKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmJkaS0+d2JfbG9jayk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiB0aGUgZmlyc3QgaW5vZGUgZm9yIHRoaXMgYmRpIGlzIG1hcmtlZCBkaXJ0eS4gSXQKKyAqIHdha2VzLXVwIHRoZSBjb3JyZXNwb25kaW5nIGJkaSB0aHJlYWQgd2hpY2ggc2hvdWxkIHRoZW4gdGFrZSBjYXJlIG9mIHRoZQorICogcGVyaW9kaWMgYmFja2dyb3VuZCB3cml0ZS1vdXQgb2YgZGlydHkgaW5vZGVzLiBTaW5jZSB0aGUgd3JpdGUtb3V0IHdvdWxkCisgKiBzdGFydHMgb25seSAnZGlydHlfd3JpdGViYWNrX2ludGVydmFsJyBjZW50aXNlY3MgZnJvbSBub3cgYW55d2F5LCB3ZSBqdXN0CisgKiBzZXQgdXAgYSB0aW1lciB3aGljaCB3YWtlcyB0aGUgYmRpIHRocmVhZCB1cCBsYXRlci4KKyAqCisgKiBOb3RlLCB3ZSB3b3VsZG4ndCBib3RoZXIgc2V0dGluZyB1cCB0aGUgdGltZXIsIGJ1dCB0aGlzIGZ1bmN0aW9uIGlzIG9uIHRoZQorICogZmFzdC1wYXRoICh1c2VkIGJ5ICdfX21hcmtfaW5vZGVfZGlydHkoKScpLCBzbyB3ZSBzYXZlIGZldyBjb250ZXh0IHN3aXRjaGVzCisgKiBieSBkZWxheWluZyB0aGUgd2FrZS11cC4KKyAqLwordm9pZCBiZGlfd2FrZXVwX3RocmVhZF9kZWxheWVkKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoZGlydHlfd3JpdGViYWNrX2ludGVydmFsICogMTApOworCW1vZF90aW1lcigmYmRpLT53Yi53YWtldXBfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKK30KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgbG9uZ2VzdCBpbnRlcnZhbCAoamlmZmllcykgYmRpIHRocmVhZHMgYXJlIGFsbG93ZWQgdG8gYmUKKyAqIGluYWN0aXZlLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiZGlfbG9uZ2VzdF9pbmFjdGl2ZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CisKKwlpbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoZGlydHlfd3JpdGViYWNrX2ludGVydmFsICogMTApOworCXJldHVybiBtYXgoNVVMICogNjAgKiBIWiwgaW50ZXJ2YWwpOworfQorCitzdGF0aWMgaW50IGJkaV9mb3JrZXJfdGhyZWFkKHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqbWUgPSBwdHI7CiAKLQliZGlfdGFza19pbml0KG1lLT5iZGksIG1lKTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9GTFVTSEVSIHwgUEZfU1dBUFdSSVRFOworCXNldF9mcmVlemFibGUoKTsKKworCS8qCisJICogT3VyIHBhcmVudCBtYXkgcnVuIGF0IGEgZGlmZmVyZW50IHByaW9yaXR5LCBqdXN0IHNldCB1cyB0byBub3JtYWwKKwkgKi8KKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDApOwogCiAJZm9yICg7OykgewotCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCAqdG1wOwotCQlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IE5VTEw7CisJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGk7CisJCWVudW0geworCQkJTk9fQUNUSU9OLCAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKwkJCUZPUktfVEhSRUFELCAvKiBGb3JrIGJkaSB0aHJlYWQgKi8KKwkJCUtJTExfVEhSRUFELCAvKiBLaWxsIGluYWN0aXZlIGJkaSB0aHJlYWQgKi8KKwkJfSBhY3Rpb24gPSBOT19BQ1RJT047CiAKIAkJLyoKIAkJICogVGVtcG9yYXJ5IG1lYXN1cmUsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IHNlZQogCQkgKiBkaXJ0eSBkYXRhIG9uIHRoZSBkZWZhdWx0IGJhY2tpbmdfZGV2X2luZm8KIAkJICovCi0JCWlmICh3Yl9oYXNfZGlydHlfaW8obWUpIHx8ICFsaXN0X2VtcHR5KCZtZS0+YmRpLT53b3JrX2xpc3QpKQorCQlpZiAod2JfaGFzX2RpcnR5X2lvKG1lKSB8fCAhbGlzdF9lbXB0eSgmbWUtPmJkaS0+d29ya19saXN0KSkgeworCQkJZGVsX3RpbWVyKCZtZS0+d2FrZXVwX3RpbWVyKTsKIAkJCXdiX2RvX3dyaXRlYmFjayhtZSwgMCk7Ci0KLQkJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7Ci0KLQkJLyoKLQkJICogQ2hlY2sgaWYgYW55IGV4aXN0aW5nIGJkaSdzIGhhdmUgZGlydHkgZGF0YSB3aXRob3V0Ci0JCSAqIGEgdGhyZWFkIHJlZ2lzdGVyZWQuIElmIHNvLCBzZXQgdGhhdCB1cC4KLQkJICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShiZGksIHRtcCwgJmJkaV9saXN0LCBiZGlfbGlzdCkgewotCQkJaWYgKGJkaS0+d2IudGFzaykKLQkJCQljb250aW51ZTsKLQkJCWlmIChsaXN0X2VtcHR5KCZiZGktPndvcmtfbGlzdCkgJiYKLQkJCSAgICAhYmRpX2hhc19kaXJ0eV9pbyhiZGkpKQotCQkJCWNvbnRpbnVlOwotCi0JCQliZGlfYWRkX2RlZmF1bHRfZmx1c2hlcl90YXNrKGJkaSk7CiAJCX0KIAorCQlzcGluX2xvY2tfYmgoJmJkaV9sb2NrKTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAotCQlpZiAobGlzdF9lbXB0eSgmYmRpX3BlbmRpbmdfbGlzdCkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgd2FpdDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShiZGksICZiZGlfbGlzdCwgYmRpX2xpc3QpIHsKKwkJCWJvb2wgaGF2ZV9kaXJ0eV9pbzsKIAotCQkJc3Bpbl91bmxvY2tfYmgoJmJkaV9sb2NrKTsKLQkJCXdhaXQgPSBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKLQkJCWlmICh3YWl0KQotCQkJCXNjaGVkdWxlX3RpbWVvdXQod2FpdCk7CisJCQlpZiAoIWJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkgfHwKKwkJCSAgICAgYmRpX2NhcF9mbHVzaF9mb3JrZXIoYmRpKSkKKwkJCQljb250aW51ZTsKKworCQkJV0FSTighdGVzdF9iaXQoQkRJX3JlZ2lzdGVyZWQsICZiZGktPnN0YXRlKSwKKwkJCSAgICAgImJkaSAlcC8lcyBpcyBub3QgcmVnaXN0ZXJlZCFcbiIsIGJkaSwgYmRpLT5uYW1lKTsKKworCQkJaGF2ZV9kaXJ0eV9pbyA9ICFsaXN0X2VtcHR5KCZiZGktPndvcmtfbGlzdCkgfHwKKwkJCQkJd2JfaGFzX2RpcnR5X2lvKCZiZGktPndiKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZSBiZGkgaGFzIHdvcmsgdG8gZG8sIGJ1dCB0aGUgdGhyZWFkIGRvZXMgbm90CisJCQkgKiBleGlzdCAtIGNyZWF0ZSBpdC4KKwkJCSAqLworCQkJaWYgKCFiZGktPndiLnRhc2sgJiYgaGF2ZV9kaXJ0eV9pbykgeworCQkJCS8qCisJCQkJICogU2V0IHRoZSBwZW5kaW5nIGJpdCAtIGlmIHNvbWVvbmUgd2lsbCB0cnkgdG8KKwkJCQkgKiB1bnJlZ2lzdGVyIHRoaXMgYmRpIC0gaXQnbGwgd2FpdCBvbiB0aGlzIGJpdC4KKwkJCQkgKi8KKwkJCQlzZXRfYml0KEJESV9wZW5kaW5nLCAmYmRpLT5zdGF0ZSk7CisJCQkJYWN0aW9uID0gRk9SS19USFJFQUQ7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXNwaW5fbG9jaygmYmRpLT53Yl9sb2NrKTsKKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8gYW5kIHRoZSBiZGkgdGhyZWFkIHdhcworCQkJICogaW5hY3RpdmUgbG9uZyBlbm91Z2ggLSBraWxsIGl0LiBUaGUgd2JfbG9jayBpcyB0YWtlbgorCQkJICogdG8gbWFrZSBzdXJlIG5vLW9uZSBhZGRzIG1vcmUgd29yayB0byB0aGlzIGJkaSBhbmQKKwkJCSAqIHdha2VzIHRoZSBiZGkgdGhyZWFkIHVwLgorCQkJICovCisJCQlpZiAoYmRpLT53Yi50YXNrICYmICFoYXZlX2RpcnR5X2lvICYmCisJCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBiZGktPndiLmxhc3RfYWN0aXZlICsKKwkJCQkJCWJkaV9sb25nZXN0X2luYWN0aXZlKCkpKSB7CisJCQkJdGFzayA9IGJkaS0+d2IudGFzazsKKwkJCQliZGktPndiLnRhc2sgPSBOVUxMOworCQkJCXNwaW5fdW5sb2NrKCZiZGktPndiX2xvY2spOworCQkJCXNldF9iaXQoQkRJX3BlbmRpbmcsICZiZGktPnN0YXRlKTsKKwkJCQlhY3Rpb24gPSBLSUxMX1RIUkVBRDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZiZGktPndiX2xvY2spOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZiZGlfbG9jayk7CisKKwkJLyogS2VlcCB3b3JraW5nIGlmIGRlZmF1bHQgYmRpIHN0aWxsIGhhcyB0aGluZ3MgdG8gZG8gKi8KKwkJaWYgKCFsaXN0X2VtcHR5KCZtZS0+YmRpLT53b3JrX2xpc3QpKQorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgRk9SS19USFJFQUQ6CisJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQl0YXNrID0ga3RocmVhZF9ydW4oYmRpX3dyaXRlYmFja190aHJlYWQsICZiZGktPndiLCAiZmx1c2gtJXMiLAorCQkJCQkgICBkZXZfbmFtZShiZGktPmRldikpOworCQkJaWYgKElTX0VSUih0YXNrKSkgeworCQkJCS8qCisJCQkJICogSWYgdGhyZWFkIGNyZWF0aW9uIGZhaWxzLCBmb3JjZSB3cml0ZW91dCBvZgorCQkJCSAqIHRoZSBiZGkgZnJvbSB0aGUgdGhyZWFkLgorCQkJCSAqLworCQkJCWJkaV9mbHVzaF9pbyhiZGkpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBzcGlubG9jayBtYWtlcyBzdXJlIHdlIGRvIG5vdCBsb3NlCisJCQkJICogd2FrZS11cHMgd2hlbiByYWNpbmcgd2l0aCAnYmRpX3F1ZXVlX3dvcmsoKScuCisJCQkJICovCisJCQkJc3Bpbl9sb2NrX2JoKCZiZGktPndiX2xvY2spOworCQkJCWJkaS0+d2IudGFzayA9IHRhc2s7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmJkaS0+d2JfbG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEtJTExfVEhSRUFEOgorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJa3RocmVhZF9zdG9wKHRhc2spOworCQkJYnJlYWs7CisKKwkJY2FzZSBOT19BQ1RJT046CisJCQlpZiAoIXdiX2hhc19kaXJ0eV9pbyhtZSkgfHwgIWRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKKwkJCQkvKgorCQkJCSAqIFRoZXJlIGFyZSBubyBkaXJ0eSBkYXRhLiBUaGUgb25seSB0aGluZyB3ZQorCQkJCSAqIHNob3VsZCBub3cgY2FyZSBhYm91dCBpcyBjaGVja2luZyBmb3IKKwkJCQkgKiBpbmFjdGl2ZSBiZGkgdGhyZWFkcyBhbmQga2lsbGluZyB0aGVtLiBUaHVzLAorCQkJCSAqIGxldCdzIHNsZWVwIGZvciBsb25nZXIgdGltZSwgc2F2ZSBlbmVyZ3kgYW5kCisJCQkJICogYmUgZnJpZW5kbHkgZm9yIGJhdHRlcnktZHJpdmVuIGRldmljZXMuCisJCQkJICovCisJCQkJc2NoZWR1bGVfdGltZW91dChiZGlfbG9uZ2VzdF9pbmFjdGl2ZSgpKTsKIAkJCWVsc2UKLQkJCQlzY2hlZHVsZSgpOworCQkJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcyhkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgKiAxMCkpOwogCQkJdHJ5X3RvX2ZyZWV6ZSgpOworCQkJLyogQmFjayB0byB0aGUgbWFpbiBsb29wICovCiAJCQljb250aW51ZTsKIAkJfQogCi0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQogCQkvKgotCQkgKiBUaGlzIGlzIG91ciByZWFsIGpvYiAtIGNoZWNrIGZvciBwZW5kaW5nIGVudHJpZXMgaW4KLQkJICogYmRpX3BlbmRpbmdfbGlzdCwgYW5kIGNyZWF0ZSB0aGUgdGFza3MgdGhhdCBnb3QgYWRkZWQKKwkJICogQ2xlYXIgcGVuZGluZyBiaXQgYW5kIHdha2V1cCBhbnlib2R5IHdhaXRpbmcgdG8gdGVhciB1cyBkb3duLgogCQkgKi8KLQkJYmRpID0gbGlzdF9lbnRyeShiZGlfcGVuZGluZ19saXN0Lm5leHQsIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvLAotCQkJCSBiZGlfbGlzdCk7Ci0JCWxpc3RfZGVsX2luaXQoJmJkaS0+YmRpX2xpc3QpOwotCQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOwotCi0JCXdiID0gJmJkaS0+d2I7Ci0JCXdiLT50YXNrID0ga3RocmVhZF9ydW4oYmRpX3N0YXJ0X2ZuLCB3YiwgImZsdXNoLSVzIiwKLQkJCQkJZGV2X25hbWUoYmRpLT5kZXYpKTsKLQkJLyoKLQkJICogSWYgdGFzayBjcmVhdGlvbiBmYWlscywgdGhlbiByZWFkZCB0aGUgYmRpIHRvCi0JCSAqIHRoZSBwZW5kaW5nIGxpc3QgYW5kIGZvcmNlIHdyaXRlb3V0IG9mIHRoZSBiZGkKLQkJICogZnJvbSB0aGlzIGZvcmtlciB0aHJlYWQuIFRoYXQgd2lsbCBmcmVlIHNvbWUgbWVtb3J5Ci0JCSAqIGFuZCB3ZSBjYW4gdHJ5IGFnYWluLgotCQkgKi8KLQkJaWYgKElTX0VSUih3Yi0+dGFzaykpIHsKLQkJCXdiLT50YXNrID0gTlVMTDsKLQotCQkJLyoKLQkJCSAqIEFkZCB0aGlzICdiZGknIHRvIHRoZSBiYWNrLCBzbyB3ZSBnZXQKLQkJCSAqIGEgY2hhbmNlIHRvIGZsdXNoIG90aGVyIGJkaSdzIHRvIGZyZWUKLQkJCSAqIG1lbW9yeS4KLQkJCSAqLwotCQkJc3Bpbl9sb2NrX2JoKCZiZGlfbG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZiZGktPmJkaV9saXN0LCAmYmRpX3BlbmRpbmdfbGlzdCk7Ci0JCQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOwotCi0JCQliZGlfZmx1c2hfaW8oYmRpKTsKLQkJfQorCQljbGVhcl9iaXQoQkRJX3BlbmRpbmcsICZiZGktPnN0YXRlKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJd2FrZV91cF9iaXQoJmJkaS0+c3RhdGUsIEJESV9wZW5kaW5nKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmRpX2FkZF90b19wZW5kaW5nKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpOwotCi0JYmRpID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvLCByY3VfaGVhZCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmJkaS0+YmRpX2xpc3QpOwotCi0Jc3Bpbl9sb2NrKCZiZGlfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmYmRpLT5iZGlfbGlzdCwgJmJkaV9wZW5kaW5nX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZiZGlfbG9jayk7Ci0KLQkvKgotCSAqIFdlIGFyZSBub3cgb24gdGhlIHBlbmRpbmcgbGlzdCwgd2FrZSB1cCBiZGlfZm9ya2VyX3Rhc2soKQotCSAqIHRvIGZpbmlzaCB0aGUgam9iIGFuZCBhZGQgdXMgYmFjayB0byB0aGUgYWN0aXZlIGJkaV9saXN0Ci0JICovCi0Jd2FrZV91cF9wcm9jZXNzKGRlZmF1bHRfYmFja2luZ19kZXZfaW5mby53Yi50YXNrKTsKLX0KLQotLyoKLSAqIEFkZCB0aGUgZGVmYXVsdCBmbHVzaGVyIHRhc2sgdGhhdCBnZXRzIGNyZWF0ZWQgZm9yIGFueSBiZGkKLSAqIHRoYXQgaGFzIGRpcnR5IGRhdGEgcGVuZGluZyB3cml0ZW91dAotICovCi12b2lkIHN0YXRpYyBiZGlfYWRkX2RlZmF1bHRfZmx1c2hlcl90YXNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpCi17Ci0JaWYgKCFiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkpKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTighdGVzdF9iaXQoQkRJX3JlZ2lzdGVyZWQsICZiZGktPnN0YXRlKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiZGkgJXAvJXMgaXMgbm90IHJlZ2lzdGVyZWQhXG4iLAotCQkJCQkJCWJkaSwgYmRpLT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2l0aCB0aGUgaGVscGVyIHdoZXRoZXIgdG8gcHJvY2VlZCBhZGRpbmcgYSB0YXNrLiBXaWxsIG9ubHkKLQkgKiBhYm9ydCBpZiB3ZSB0d28gb3IgbW9yZSBzaW11bHRhbm91cyBjYWxscyB0bwotCSAqIGJkaV9hZGRfZGVmYXVsdF9mbHVzaGVyX3Rhc2soKSBvY2N1cmVkLCBmdXJ0aGVyIGFkZGl0aW9ucyB3aWxsIGJsb2NrCi0JICogd2FpdGluZyBmb3IgcHJldmlvdXMgYWRkaXRpb25zIHRvIGZpbmlzaC4KLQkgKi8KLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQkRJX3BlbmRpbmcsICZiZGktPnN0YXRlKSkgewotCQlsaXN0X2RlbF9yY3UoJmJkaS0+YmRpX2xpc3QpOwotCi0JCS8qCi0JCSAqIFdlIG11c3Qgd2FpdCBmb3IgdGhlIGN1cnJlbnQgUkNVIHBlcmlvZCB0byBlbmQgYmVmb3JlCi0JCSAqIG1vdmluZyB0byB0aGUgcGVuZGluZyBsaXN0LiBTbyBzY2hlZHVsZSB0aGF0IG9wZXJhdGlvbgotCQkgKiBmcm9tIGFuIFJDVSBjYWxsYmFjay4KLQkJICovCi0JCWNhbGxfcmN1KCZiZGktPnJjdV9oZWFkLCBiZGlfYWRkX3RvX3BlbmRpbmcpOwotCX0KLX0KLQogLyoKICAqIFJlbW92ZSBiZGkgZnJvbSBiZGlfbGlzdCwgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIG5vIGxvbmdlciB2aXNpYmxlCiAgKi8KQEAgLTU0MSwyMyArNTEzLDE2IEBACiAJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAlpZiAoYmRpLT5kZXYpCS8qIFRoZSBkcml2ZXIgbmVlZHMgdG8gdXNlIHNlcGFyYXRlIHF1ZXVlcyBwZXIgZGV2aWNlICovCi0JCWdvdG8gZXhpdDsKKwkJcmV0dXJuIDA7CiAKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCWRldiA9IGRldmljZV9jcmVhdGVfdmFyZ3MoYmRpX2NsYXNzLCBwYXJlbnQsIE1LREVWKDAsIDApLCBiZGksIGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwotCWlmIChJU19FUlIoZGV2KSkgewotCQlyZXQgPSBQVFJfRVJSKGRldik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJmJkaV9sb2NrKTsKLQlsaXN0X2FkZF90YWlsX3JjdSgmYmRpLT5iZGlfbGlzdCwgJmJkaV9saXN0KTsKLQlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCWlmIChJU19FUlIoZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGV2KTsKIAogCWJkaS0+ZGV2ID0gZGV2OwogCkBAIC01NjksMjEgKzUzNCwyMSBAQAogCWlmIChiZGlfY2FwX2ZsdXNoX2ZvcmtlcihiZGkpKSB7CiAJCXN0cnVjdCBiZGlfd3JpdGViYWNrICp3YiA9ICZiZGktPndiOwogCi0JCXdiLT50YXNrID0ga3RocmVhZF9ydW4oYmRpX2Zvcmtlcl90YXNrLCB3YiwgImJkaS0lcyIsCisJCXdiLT50YXNrID0ga3RocmVhZF9ydW4oYmRpX2Zvcmtlcl90aHJlYWQsIHdiLCAiYmRpLSVzIiwKIAkJCQkJCWRldl9uYW1lKGRldikpOwotCQlpZiAoSVNfRVJSKHdiLT50YXNrKSkgewotCQkJd2ItPnRhc2sgPSBOVUxMOwotCQkJcmV0ID0gLUVOT01FTTsKLQotCQkJYmRpX3JlbW92ZV9mcm9tX2xpc3QoYmRpKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQorCQlpZiAoSVNfRVJSKHdiLT50YXNrKSkKKwkJCXJldHVybiBQVFJfRVJSKHdiLT50YXNrKTsKIAl9CiAKIAliZGlfZGVidWdfcmVnaXN0ZXIoYmRpLCBkZXZfbmFtZShkZXYpKTsKIAlzZXRfYml0KEJESV9yZWdpc3RlcmVkLCAmYmRpLT5zdGF0ZSk7Ci1leGl0OgotCXJldHVybiByZXQ7CisKKwlzcGluX2xvY2tfYmgoJmJkaV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmYmRpLT5iZGlfbGlzdCwgJmJkaV9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmYmRpX2xvY2spOworCisJdHJhY2Vfd3JpdGViYWNrX2JkaV9yZWdpc3RlcihiZGkpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChiZGlfcmVnaXN0ZXIpOwogCkBAIC01OTgsMzEgKzU2MywyOSBAQAogICovCiBzdGF0aWMgdm9pZCBiZGlfd2Jfc2h1dGRvd24oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKLQlzdHJ1Y3QgYmRpX3dyaXRlYmFjayAqd2I7Ci0KIAlpZiAoIWJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkpCiAJCXJldHVybjsKIAogCS8qCisJICogTWFrZSBzdXJlIG5vYm9keSBmaW5kcyB1cyBvbiB0aGUgYmRpX2xpc3QgYW55bW9yZQorCSAqLworCWJkaV9yZW1vdmVfZnJvbV9saXN0KGJkaSk7CisKKwkvKgogCSAqIElmIHNldHVwIGlzIHBlbmRpbmcsIHdhaXQgZm9yIHRoYXQgdG8gY29tcGxldGUgZmlyc3QKIAkgKi8KIAl3YWl0X29uX2JpdCgmYmRpLT5zdGF0ZSwgQkRJX3BlbmRpbmcsIGJkaV9zY2hlZF93YWl0LAogCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCiAJLyoKLQkgKiBNYWtlIHN1cmUgbm9ib2R5IGZpbmRzIHVzIG9uIHRoZSBiZGlfbGlzdCBhbnltb3JlCi0JICovCi0JYmRpX3JlbW92ZV9mcm9tX2xpc3QoYmRpKTsKLQotCS8qCi0JICogRmluYWxseSwga2lsbCB0aGUga2VybmVsIHRocmVhZHMuIFdlIGRvbid0IG5lZWQgdG8gYmUgUkNVCisJICogRmluYWxseSwga2lsbCB0aGUga2VybmVsIHRocmVhZC4gV2UgZG9uJ3QgbmVlZCB0byBiZSBSQ1UKIAkgKiBzYWZlIGFueW1vcmUsIHNpbmNlIHRoZSBiZGkgaXMgZ29uZSBmcm9tIHZpc2liaWxpdHkuIEZvcmNlCiAJICogdW5mcmVlemUgb2YgdGhlIHRocmVhZCBiZWZvcmUgY2FsbGluZyBrdGhyZWFkX3N0b3AoKSwgb3RoZXJ3aXNlCiAJICogaXQgd291bGQgbmV2ZXIgZXhldCBpZiBpdCBpcyBjdXJyZW50bHkgc3R1Y2sgaW4gdGhlIHJlZnJpZ2VyYXRvci4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdiLCAmYmRpLT53Yl9saXN0LCBsaXN0KSB7Ci0JCXRoYXdfcHJvY2Vzcyh3Yi0+dGFzayk7Ci0JCWt0aHJlYWRfc3RvcCh3Yi0+dGFzayk7CisJaWYgKGJkaS0+d2IudGFzaykgeworCQl0aGF3X3Byb2Nlc3MoYmRpLT53Yi50YXNrKTsKKwkJa3RocmVhZF9zdG9wKGJkaS0+d2IudGFzayk7CiAJfQogfQogCkBAIC02NDQsNyArNjA3LDkgQEAKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKIAlpZiAoYmRpLT5kZXYpIHsKKwkJdHJhY2Vfd3JpdGViYWNrX2JkaV91bnJlZ2lzdGVyKGJkaSk7CiAJCWJkaV9wcnVuZV9zYihiZGkpOworCQlkZWxfdGltZXJfc3luYygmYmRpLT53Yi53YWtldXBfdGltZXIpOwogCiAJCWlmICghYmRpX2NhcF9mbHVzaF9mb3JrZXIoYmRpKSkKIAkJCWJkaV93Yl9zaHV0ZG93bihiZGkpOwpAQCAtNjU1LDYgKzYyMCwxOCBAQAogfQogRVhQT1JUX1NZTUJPTChiZGlfdW5yZWdpc3Rlcik7CiAKK3N0YXRpYyB2b2lkIGJkaV93Yl9pbml0KHN0cnVjdCBiZGlfd3JpdGViYWNrICp3Yiwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwltZW1zZXQod2IsIDAsIHNpemVvZigqd2IpKTsKKworCXdiLT5iZGkgPSBiZGk7CisJd2ItPmxhc3Rfb2xkX2ZsdXNoID0gamlmZmllczsKKwlJTklUX0xJU1RfSEVBRCgmd2ItPmJfZGlydHkpOworCUlOSVRfTElTVF9IRUFEKCZ3Yi0+Yl9pbyk7CisJSU5JVF9MSVNUX0hFQUQoJndiLT5iX21vcmVfaW8pOworCXNldHVwX3RpbWVyKCZ3Yi0+d2FrZXVwX3RpbWVyLCB3YWtldXBfdGltZXJfZm4sICh1bnNpZ25lZCBsb25nKWJkaSk7Cit9CisKIGludCBiZGlfaW5pdChzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQogewogCWludCBpLCBlcnI7CkBAIC02NjUsOSArNjQyLDcgQEAKIAliZGktPm1heF9yYXRpbyA9IDEwMDsKIAliZGktPm1heF9wcm9wX2ZyYWMgPSBQUk9QX0ZSQUNfQkFTRTsKIAlzcGluX2xvY2tfaW5pdCgmYmRpLT53Yl9sb2NrKTsKLQlJTklUX1JDVV9IRUFEKCZiZGktPnJjdV9oZWFkKTsKIAlJTklUX0xJU1RfSEVBRCgmYmRpLT5iZGlfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmJkaS0+d2JfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmJkaS0+d29ya19saXN0KTsKIAogCWJkaV93Yl9pbml0KCZiZGktPndiLCBiZGkpOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDIwZTU2NDIuLjNkNGRmNDQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTIyMzgsMTQgKzIyMzgsMTIgQEAKIAogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JCXBnb2ZmX3QgaW5kZXg7CQkvKiBQYWdlY2FjaGUgaW5kZXggZm9yIGN1cnJlbnQgcGFnZSAqLwogCQl1bnNpZ25lZCBsb25nIG9mZnNldDsJLyogT2Zmc2V0IGludG8gcGFnZWNhY2hlIHBhZ2UgKi8KIAkJdW5zaWduZWQgbG9uZyBieXRlczsJLyogQnl0ZXMgdG8gd3JpdGUgdG8gcGFnZSAqLwogCQlzaXplX3QgY29waWVkOwkJLyogQnl0ZXMgY29waWVkIGZyb20gdXNlciAqLwogCQl2b2lkICpmc2RhdGE7CiAKIAkJb2Zmc2V0ID0gKHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSk7Ci0JCWluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWJ5dGVzID0gbWluX3QodW5zaWduZWQgbG9uZywgUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0LAogCQkJCQkJaW92X2l0ZXJfY291bnQoaSkpOwogCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNTRkNDJiMC4uYjYxZDJkYiAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMjM0OSwxMSArMjM0OSwxNyBAQAogCXB0ZXAgPSBodWdlX3B0ZV9vZmZzZXQobW0sIGFkZHJlc3MgJiBodWdlX3BhZ2VfbWFzayhoKSk7CiAJaWYgKGxpa2VseShwdGVfc2FtZShodWdlX3B0ZXBfZ2V0KHB0ZXApLCBwdGUpKSkgewogCQkvKiBCcmVhayBDT1cgKi8KKwkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sCisJCQlhZGRyZXNzICYgaHVnZV9wYWdlX21hc2soaCksCisJCQkoYWRkcmVzcyAmIGh1Z2VfcGFnZV9tYXNrKGgpKSArIGh1Z2VfcGFnZV9zaXplKGgpKTsKIAkJaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcHRlcCk7CiAJCXNldF9odWdlX3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlcCwKIAkJCQltYWtlX2h1Z2VfcHRlKHZtYSwgbmV3X3BhZ2UsIDEpKTsKIAkJLyogTWFrZSB0aGUgb2xkIHBhZ2UgYmUgZnJlZWQgYmVsb3cgKi8KIAkJbmV3X3BhZ2UgPSBvbGRfcGFnZTsKKwkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLAorCQkJYWRkcmVzcyAmIGh1Z2VfcGFnZV9tYXNrKGgpLAorCQkJKGFkZHJlc3MgJiBodWdlX3BhZ2VfbWFzayhoKSkgKyBodWdlX3BhZ2Vfc2l6ZShoKSk7CiAJfQogCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKZGlmZiAtLWdpdCBhL21tL2luaXQtbW0uYyBiL21tL2luaXQtbW0uYwppbmRleCA1N2FiYTBkLi4xZDI5Y2RmIDEwMDY0NAotLS0gYS9tbS9pbml0LW1tLmMKKysrIGIvbW0vaW5pdC1tbS5jCkBAIC03LDYgKzcsMTEgQEAKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKworI2lmbmRlZiBJTklUX01NX0NPTlRFWFQKKyNkZWZpbmUgSU5JVF9NTV9DT05URVhUKG5hbWUpCisjZW5kaWYKIAogc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0gewogCS5tbV9yYgkJPSBSQl9ST09ULApAQCAtMTcsNCArMjIsNSBAQAogCS5wYWdlX3RhYmxlX2xvY2sgPSAgX19TUElOX0xPQ0tfVU5MT0NLRUQoaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2spLAogCS5tbWxpc3QJCT0gTElTVF9IRUFEX0lOSVQoaW5pdF9tbS5tbWxpc3QpLAogCS5jcHVfdm1fbWFzawk9IENQVV9NQVNLX0FMTCwKKwlJTklUX01NX0NPTlRFWFQoaW5pdF9tbSkKIH07CmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCAyYzBkMDMyLi5iZDliYzIxIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTIxMSw2ICsyMTEsOSBAQAogc3RhdGljIGludCBrbWVtbGVha19zdGFja19zY2FuID0gMTsKIC8qIHByb3RlY3RzIHRoZSBtZW1vcnkgc2Nhbm5pbmcsIHBhcmFtZXRlcnMgYW5kIGRlYnVnL2ttZW1sZWFrIGZpbGUgYWNjZXNzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKHNjYW5fbXV0ZXgpOworLyogc2V0dGluZyBrbWVtbGVhaz1vbiwgd2lsbCBzZXQgdGhpcyB2YXIsIHNraXBwaW5nIHRoZSBkaXNhYmxlICovCitzdGF0aWMgaW50IGttZW1sZWFrX3NraXBfZGlzYWJsZTsKKwogCiAvKgogICogRWFybHkgb2JqZWN0IGFsbG9jYXRpb24vZnJlZWluZyBsb2dnaW5nLiBLbWVtbGVhayBpcyBpbml0aWFsaXplZCBhZnRlciB0aGUKQEAgLTM5OCw3ICs0MDEsOSBAQAogCQlvYmplY3QgPSBwcmlvX3RyZWVfZW50cnkobm9kZSwgc3RydWN0IGttZW1sZWFrX29iamVjdCwKIAkJCQkJIHRyZWVfbm9kZSk7CiAJCWlmICghYWxpYXMgJiYgb2JqZWN0LT5wb2ludGVyICE9IHB0cikgewotCQkJa21lbWxlYWtfd2FybigiRm91bmQgb2JqZWN0IGJ5IGFsaWFzIik7CisJCQlwcl93YXJuaW5nKCJGb3VuZCBvYmplY3QgYnkgYWxpYXMgYXQgMHglMDhseFxuIiwgcHRyKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCWR1bXBfb2JqZWN0X2luZm8ob2JqZWN0KTsKIAkJCW9iamVjdCA9IE5VTEw7CiAJCX0KIAl9IGVsc2UKQEAgLTY5NSw3ICs3MDAsNyBAQAogfQogCiAvKgotICogTWFrZSBhIG9iamVjdCBwZXJtYW5lbnRseSBhcyBncmF5LWNvbG9yZWQgc28gdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlCisgKiBNYXJrIGFuIG9iamVjdCBwZXJtYW5lbnRseSBhcyBncmF5LWNvbG9yZWQgc28gdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlCiAgKiByZXBvcnRlZCBhcyBhIGxlYWsuIFRoaXMgaXMgdXNlZCBpbiBnZW5lcmFsIHRvIG1hcmsgYSBmYWxzZSBwb3NpdGl2ZS4KICAqLwogc3RhdGljIHZvaWQgbWFrZV9ncmF5X29iamVjdCh1bnNpZ25lZCBsb25nIHB0cikKQEAgLTgzOCwxMCArODQzLDE5IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLS8qCi0gKiBNZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUKLSAqIGtlcm5lbCBhbGxvY2F0b3JzIHdoZW4gYSBuZXcgYmxvY2sgaXMgYWxsb2NhdGVkIChrbWVtX2NhY2hlX2FsbG9jLCBrbWFsbG9jLAotICogdm1hbGxvYyBldGMuKS4KKy8qKgorICoga21lbWxlYWtfYWxsb2MgLSByZWdpc3RlciBhIG5ld2x5IGFsbG9jYXRlZCBvYmplY3QKKyAqIEBwdHI6CXBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIHRoZSBvYmplY3QKKyAqIEBzaXplOglzaXplIG9mIHRoZSBvYmplY3QKKyAqIEBtaW5fY291bnQ6CW1pbmltdW0gbnVtYmVyIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBvYmplY3QuIElmIGR1cmluZyBtZW1vcnkKKyAqCQlzY2FubmluZyBhIG51bWJlciBvZiByZWZlcmVuY2VzIGxlc3MgdGhhbiBAbWluX2NvdW50IGlzIGZvdW5kLAorICoJCXRoZSBvYmplY3QgaXMgcmVwb3J0ZWQgYXMgYSBtZW1vcnkgbGVhay4gSWYgQG1pbl9jb3VudCBpcyAwLAorICoJCXRoZSBvYmplY3QgaXMgbmV2ZXIgcmVwb3J0ZWQgYXMgYSBsZWFrLiBJZiBAbWluX2NvdW50IGlzIC0xLAorICoJCXRoZSBvYmplY3QgaXMgaWdub3JlZCAobm90IHNjYW5uZWQgYW5kIG5vdCByZXBvcnRlZCBhcyBhIGxlYWspCisgKiBAZ2ZwOglrbWFsbG9jKCkgZmxhZ3MgdXNlZCBmb3Iga21lbWxlYWsgaW50ZXJuYWwgbWVtb3J5IGFsbG9jYXRpb25zCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsIGFsbG9jYXRvcnMgd2hlbiBhIG5ldyBvYmplY3QKKyAqIChtZW1vcnkgYmxvY2spIGlzIGFsbG9jYXRlZCAoa21lbV9jYWNoZV9hbGxvYywga21hbGxvYywgdm1hbGxvYyBldGMuKS4KICAqLwogdm9pZCBfX3JlZiBrbWVtbGVha19hbGxvYyhjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBpbnQgbWluX2NvdW50LAogCQkJICBnZnBfdCBnZnApCkBAIC04NTUsOSArODY5LDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19hbGxvYyk7CiAKLS8qCi0gKiBNZW1vcnkgZnJlZWluZyBmdW5jdGlvbiBjYWxsYmFjay4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUga2VybmVsCi0gKiBhbGxvY2F0b3JzIHdoZW4gYSBibG9jayBpcyBmcmVlZCAoa21lbV9jYWNoZV9mcmVlLCBrZnJlZSwgdmZyZWUgZXRjLikuCisvKioKKyAqIGttZW1sZWFrX2ZyZWUgLSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdAorICogQHB0cjoJcG9pbnRlciB0byBiZWdpbm5pbmcgb2YgdGhlIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbCBhbGxvY2F0b3JzIHdoZW4gYW4gb2JqZWN0IChtZW1vcnkKKyAqIGJsb2NrKSBpcyBmcmVlZCAoa21lbV9jYWNoZV9mcmVlLCBrZnJlZSwgdmZyZWUgZXRjLikuCiAgKi8KIHZvaWQgX19yZWYga21lbWxlYWtfZnJlZShjb25zdCB2b2lkICpwdHIpCiB7CkBAIC04NzAsOSArODg3LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWVtbGVha19mcmVlKTsKIAotLyoKLSAqIFBhcnRpYWwgbWVtb3J5IGZyZWVpbmcgZnVuY3Rpb24gY2FsbGJhY2suIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQKLSAqIGZyb20gYm9vdG1lbSBhbGxvY2F0b3Igd2hlbiAocGFydCBvZikgYSBtZW1vcnkgYmxvY2sgaXMgZnJlZWQuCisvKioKKyAqIGttZW1sZWFrX2ZyZWVfcGFydCAtIHBhcnRpYWxseSB1bnJlZ2lzdGVyIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIG9iamVjdAorICogQHB0cjoJcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9yIGluc2lkZSB0aGUgb2JqZWN0LiBUaGlzIGFsc28KKyAqCQlyZXByZXNlbnRzIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUgZnJlZWQKKyAqIEBzaXplOglzaXplIHRvIGJlIHVucmVnaXN0ZXJlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gb25seSBhIHBhcnQgb2YgYSBtZW1vcnkgYmxvY2sgaXMgZnJlZWQKKyAqICh1c3VhbGx5IGZyb20gdGhlIGJvb3RtZW0gYWxsb2NhdG9yKS4KICAqLwogdm9pZCBfX3JlZiBrbWVtbGVha19mcmVlX3BhcnQoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTg4NSw5ICs5MDcsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGttZW1sZWFrX2ZyZWVfcGFydCk7CiAKLS8qCi0gKiBNYXJrIGFuIGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSBibG9jayBhcyBhIGZhbHNlIHBvc2l0aXZlLiBUaGlzIHdpbGwgY2F1c2UKLSAqIHRoZSBibG9jayB0byBubyBsb25nZXIgYmUgcmVwb3J0ZWQgYXMgbGVhayBhbmQgYWx3YXlzIGJlIHNjYW5uZWQuCisvKioKKyAqIGttZW1sZWFrX25vdF9sZWFrIC0gbWFyayBhbiBhbGxvY2F0ZWQgb2JqZWN0IGFzIGZhbHNlIHBvc2l0aXZlCisgKiBAcHRyOglwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0CisgKgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIG9iamVjdCB3aWxsIGNhdXNlIHRoZSBtZW1vcnkgYmxvY2sgdG8gbm8gbG9uZ2VyCisgKiBiZSByZXBvcnRlZCBhcyBsZWFrIGFuZCBhbHdheXMgYmUgc2Nhbm5lZC4KICAqLwogdm9pZCBfX3JlZiBrbWVtbGVha19ub3RfbGVhayhjb25zdCB2b2lkICpwdHIpCiB7CkBAIC05MDAsMTAgKzkyNSwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChrbWVtbGVha19ub3RfbGVhayk7CiAKLS8qCi0gKiBJZ25vcmUgYSBtZW1vcnkgYmxvY2suIFRoaXMgaXMgdXN1YWxseSBkb25lIHdoZW4gaXQgaXMga25vd24gdGhhdCB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgYmxvY2sgaXMgbm90IGEgbGVhayBhbmQgZG9lcyBub3QgY29udGFpbiBhbnkgcmVmZXJlbmNlcyB0bwotICogb3RoZXIgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MuCisvKioKKyAqIGttZW1sZWFrX2lnbm9yZSAtIGlnbm9yZSBhbiBhbGxvY2F0ZWQgb2JqZWN0CisgKiBAcHRyOglwb2ludGVyIHRvIGJlZ2lubmluZyBvZiB0aGUgb2JqZWN0CisgKgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG9uIGFuIG9iamVjdCB3aWxsIGNhdXNlIHRoZSBtZW1vcnkgYmxvY2sgdG8gYmUKKyAqIGlnbm9yZWQgKG5vdCBzY2FubmVkIGFuZCBub3QgcmVwb3J0ZWQgYXMgYSBsZWFrKS4gVGhpcyBpcyB1c3VhbGx5IGRvbmUgd2hlbgorICogaXQgaXMga25vd24gdGhhdCB0aGUgY29ycmVzcG9uZGluZyBibG9jayBpcyBub3QgYSBsZWFrIGFuZCBkb2VzIG5vdCBjb250YWluCisgKiBhbnkgcmVmZXJlbmNlcyB0byBvdGhlciBhbGxvY2F0ZWQgbWVtb3J5IGJsb2Nrcy4KICAqLwogdm9pZCBfX3JlZiBrbWVtbGVha19pZ25vcmUoY29uc3Qgdm9pZCAqcHRyKQogewpAQCAtOTE2LDggKzk0NSwxNiBAQAogfQogRVhQT1JUX1NZTUJPTChrbWVtbGVha19pZ25vcmUpOwogCi0vKgotICogTGltaXQgdGhlIHJhbmdlIHRvIGJlIHNjYW5uZWQgaW4gYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jay4KKy8qKgorICoga21lbWxlYWtfc2Nhbl9hcmVhIC0gbGltaXQgdGhlIHJhbmdlIHRvIGJlIHNjYW5uZWQgaW4gYW4gYWxsb2NhdGVkIG9iamVjdAorICogQHB0cjoJcG9pbnRlciB0byBiZWdpbm5pbmcgb3IgaW5zaWRlIHRoZSBvYmplY3QuIFRoaXMgYWxzbworICoJCXJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuIGFyZWEKKyAqIEBzaXplOglzaXplIG9mIHRoZSBzY2FuIGFyZWEKKyAqIEBnZnA6CWttYWxsb2MoKSBmbGFncyB1c2VkIGZvciBrbWVtbGVhayBpbnRlcm5hbCBtZW1vcnkgYWxsb2NhdGlvbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBpdCBpcyBrbm93biB0aGF0IG9ubHkgY2VydGFpbiBwYXJ0cyBvZiBhbiBvYmplY3QKKyAqIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLiBLbWVtbGVhayB3aWxsIG9ubHkgc2NhbiB0aGVzZSBhcmVhcworICogcmVkdWNpbmcgdGhlIG51bWJlciBmYWxzZSBuZWdhdGl2ZXMuCiAgKi8KIHZvaWQgX19yZWYga21lbWxlYWtfc2Nhbl9hcmVhKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKIHsKQEAgLTkzMCw4ICs5NjcsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0woa21lbWxlYWtfc2Nhbl9hcmVhKTsKIAotLyoKLSAqIEluZm9ybSBrbWVtbGVhayBub3QgdG8gc2NhbiB0aGUgZ2l2ZW4gbWVtb3J5IGJsb2NrLgorLyoqCisgKiBrbWVtbGVha19ub19zY2FuIC0gZG8gbm90IHNjYW4gYW4gYWxsb2NhdGVkIG9iamVjdAorICogQHB0cjoJcG9pbnRlciB0byBiZWdpbm5pbmcgb2YgdGhlIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbm90aWZpZXMga21lbWxlYWsgbm90IHRvIHNjYW4gdGhlIGdpdmVuIG1lbW9yeSBibG9jay4gVXNlZnVsCisgKiBpbiBzaXR1YXRpb25zIHdoZXJlIGl0IGlzIGtub3duIHRoYXQgdGhlIGdpdmVuIG9iamVjdCBkb2VzIG5vdCBjb250YWluIGFueQorICogcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLiBLbWVtbGVhayB3aWxsIG5vdCBzY2FuIHN1Y2ggb2JqZWN0cyByZWR1Y2luZworICogdGhlIG51bWJlciBvZiBmYWxzZSBuZWdhdGl2ZXMuCiAgKi8KIHZvaWQgX19yZWYga21lbWxlYWtfbm9fc2Nhbihjb25zdCB2b2lkICpwdHIpCiB7CkBAIC0xNjAyLDcgKzE2NDUsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDApCiAJCWttZW1sZWFrX2Rpc2FibGUoKTsKLQllbHNlIGlmIChzdHJjbXAoc3RyLCAib24iKSAhPSAwKQorCWVsc2UgaWYgKHN0cmNtcChzdHIsICJvbiIpID09IDApCisJCWttZW1sZWFrX3NraXBfZGlzYWJsZSA9IDE7CisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MTYsNiArMTY2MSwxMyBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfS01FTUxFQUtfREVGQVVMVF9PRkYKKwlpZiAoIWttZW1sZWFrX3NraXBfZGlzYWJsZSkgeworCQlrbWVtbGVha19kaXNhYmxlKCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCWppZmZpZXNfbWluX2FnZSA9IG1zZWNzX3RvX2ppZmZpZXMoTVNFQ1NfTUlOX0FHRSk7CiAJamlmZmllc19zY2FuX3dhaXQgPSBtc2Vjc190b19qaWZmaWVzKFNFQ1NfU0NBTl9XQUlUICogMTAwMCk7CiAKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggNmMzZTk5Yi4uZTJhZTAwNCAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgva3NtLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKQEAgLTE1Myw4ICsxNTQsOSBAQAogc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3Rfc3RhYmxlX3RyZWUgPSBSQl9ST09UOwogc3RhdGljIHN0cnVjdCByYl9yb290IHJvb3RfdW5zdGFibGVfdHJlZSA9IFJCX1JPT1Q7CiAKLSNkZWZpbmUgTU1fU0xPVFNfSEFTSF9IRUFEUyAxMDI0Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKm1tX3Nsb3RzX2hhc2g7CisjZGVmaW5lIE1NX1NMT1RTX0hBU0hfU0hJRlQgMTAKKyNkZWZpbmUgTU1fU0xPVFNfSEFTSF9IRUFEUyAoMSA8PCBNTV9TTE9UU19IQVNIX1NISUZUKQorc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1tX3Nsb3RzX2hhc2hbTU1fU0xPVFNfSEFTSF9IRUFEU107CiAKIHN0YXRpYyBzdHJ1Y3QgbW1fc2xvdCBrc21fbW1faGVhZCA9IHsKIAkubW1fbGlzdCA9IExJU1RfSEVBRF9JTklUKGtzbV9tbV9oZWFkLm1tX2xpc3QpLApAQCAtMjY5LDI4ICsyNzEsMTMgQEAKIAlrbWVtX2NhY2hlX2ZyZWUobW1fc2xvdF9jYWNoZSwgbW1fc2xvdCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1tX3Nsb3RzX2hhc2hfaW5pdCh2b2lkKQotewotCW1tX3Nsb3RzX2hhc2ggPSBremFsbG9jKE1NX1NMT1RTX0hBU0hfSEVBRFMgKiBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghbW1fc2xvdHNfaGFzaCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBtbV9zbG90c19oYXNoX2ZyZWUodm9pZCkKLXsKLQlrZnJlZShtbV9zbG90c19oYXNoKTsKLX0KLQogc3RhdGljIHN0cnVjdCBtbV9zbG90ICpnZXRfbW1fc2xvdChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbW1fc2xvdCAqbW1fc2xvdDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCi0JYnVja2V0ID0gJm1tX3Nsb3RzX2hhc2hbKCh1bnNpZ25lZCBsb25nKW1tIC8gc2l6ZW9mKHN0cnVjdCBtbV9zdHJ1Y3QpKQotCQkJCSUgTU1fU0xPVFNfSEFTSF9IRUFEU107CisJYnVja2V0ID0gJm1tX3Nsb3RzX2hhc2hbaGFzaF9wdHIobW0sIE1NX1NMT1RTX0hBU0hfU0hJRlQpXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShtbV9zbG90LCBub2RlLCBidWNrZXQsIGxpbmspIHsKIAkJaWYgKG1tID09IG1tX3Nsb3QtPm1tKQogCQkJcmV0dXJuIG1tX3Nsb3Q7CkBAIC0zMDMsOCArMjkwLDcgQEAKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwogCi0JYnVja2V0ID0gJm1tX3Nsb3RzX2hhc2hbKCh1bnNpZ25lZCBsb25nKW1tIC8gc2l6ZW9mKHN0cnVjdCBtbV9zdHJ1Y3QpKQotCQkJCSUgTU1fU0xPVFNfSEFTSF9IRUFEU107CisJYnVja2V0ID0gJm1tX3Nsb3RzX2hhc2hbaGFzaF9wdHIobW0sIE1NX1NMT1RTX0hBU0hfU0hJRlQpXTsKIAltbV9zbG90LT5tbSA9IG1tOwogCWhsaXN0X2FkZF9oZWFkKCZtbV9zbG90LT5saW5rLCBidWNrZXQpOwogfQpAQCAtMzE4LDE5ICszMDQsMTQgQEAKIAkJCSAgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKIAlybWFwX2l0ZW0tPmFub25fdm1hID0gYW5vbl92bWE7Ci0JYXRvbWljX2luYygmYW5vbl92bWEtPmV4dGVybmFsX3JlZmNvdW50KTsKKwlnZXRfYW5vbl92bWEoYW5vbl92bWEpOwogfQogCi1zdGF0aWMgdm9pZCBkcm9wX2Fub25fdm1hKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKK3N0YXRpYyB2b2lkIGtzbV9kcm9wX2Fub25fdm1hKHN0cnVjdCBybWFwX2l0ZW0gKnJtYXBfaXRlbSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKIAotCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZhbm9uX3ZtYS0+ZXh0ZXJuYWxfcmVmY291bnQsICZhbm9uX3ZtYS0+bG9jaykpIHsKLQkJaW50IGVtcHR5ID0gbGlzdF9lbXB0eSgmYW5vbl92bWEtPmhlYWQpOwotCQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwotCQlpZiAoZW1wdHkpCi0JCQlhbm9uX3ZtYV9mcmVlKGFub25fdm1hKTsKLQl9CisJZHJvcF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiB9CiAKIC8qCkBAIC00MTUsNyArMzk2LDcgQEAKIAkgKiBJdCBpcyBub3QgYW4gYWNjaWRlbnQgdGhhdCB3aGVuZXZlciB3ZSB3YW50IHRvIGJyZWFrIENPVwogCSAqIHRvIHVuZG8sIHdlIGFsc28gbmVlZCB0byBkcm9wIGEgcmVmZXJlbmNlIHRvIHRoZSBhbm9uX3ZtYS4KIAkgKi8KLQlkcm9wX2Fub25fdm1hKHJtYXBfaXRlbSk7CisJa3NtX2Ryb3BfYW5vbl92bWEocm1hcF9pdGVtKTsKIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCkBAIC00NzAsNyArNDUxLDcgQEAKIAkJCWtzbV9wYWdlc19zaGFyaW5nLS07CiAJCWVsc2UKIAkJCWtzbV9wYWdlc19zaGFyZWQtLTsKLQkJZHJvcF9hbm9uX3ZtYShybWFwX2l0ZW0pOworCQlrc21fZHJvcF9hbm9uX3ZtYShybWFwX2l0ZW0pOwogCQlybWFwX2l0ZW0tPmFkZHJlc3MgJj0gUEFHRV9NQVNLOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CkBAIC01NTgsNyArNTM5LDcgQEAKIAkJZWxzZQogCQkJa3NtX3BhZ2VzX3NoYXJlZC0tOwogCi0JCWRyb3BfYW5vbl92bWEocm1hcF9pdGVtKTsKKwkJa3NtX2Ryb3BfYW5vbl92bWEocm1hcF9pdGVtKTsKIAkJcm1hcF9pdGVtLT5hZGRyZXNzICY9IFBBR0VfTUFTSzsKIAogCX0gZWxzZSBpZiAocm1hcF9pdGVtLT5hZGRyZXNzICYgVU5TVEFCTEVfRkxBRykgewpAQCAtMTU2Niw3ICsxNTQ3LDcgQEAKIAkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAotCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJYW5vbl92bWFfbG9jayhhbm9uX3ZtYSk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hYywgJmFub25fdm1hLT5oZWFkLCBzYW1lX2Fub25fdm1hKSB7CiAJCQl2bWEgPSB2bWFjLT52bWE7CiAJCQlpZiAocm1hcF9pdGVtLT5hZGRyZXNzIDwgdm1hLT52bV9zdGFydCB8fApAQCAtMTU4OSw3ICsxNTcwLDcgQEAKIAkJCWlmICghc2VhcmNoX25ld19mb3JrcyB8fCAhbWFwY291bnQpCiAJCQkJYnJlYWs7CiAJCX0KLQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJYW5vbl92bWFfdW5sb2NrKGFub25fdm1hKTsKIAkJaWYgKCFtYXBjb3VudCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTE2MTksNyArMTYwMCw3IEBACiAJCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYzsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYWMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgewogCQkJdm1hID0gdm1hYy0+dm1hOwogCQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwKQEAgLTE2MzcsMTEgKzE2MTgsMTEgQEAKIAkJCXJldCA9IHRyeV90b191bm1hcF9vbmUocGFnZSwgdm1hLAogCQkJCQlybWFwX2l0ZW0tPmFkZHJlc3MsIGZsYWdzKTsKIAkJCWlmIChyZXQgIT0gU1dBUF9BR0FJTiB8fCAhcGFnZV9tYXBwZWQocGFnZSkpIHsKLQkJCQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOworCQkJCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KLQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJYW5vbl92bWFfdW5sb2NrKGFub25fdm1hKTsKIAl9CiAJaWYgKCFzZWFyY2hfbmV3X2ZvcmtzKyspCiAJCWdvdG8gYWdhaW47CkBAIC0xNjcxLDcgKzE2NTIsNyBAQAogCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCi0JCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOworCQlhbm9uX3ZtYV9sb2NrKGFub25fdm1hKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWFjLCAmYW5vbl92bWEtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKIAkJCXZtYSA9IHZtYWMtPnZtYTsKIAkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CkBAIC0xNjg4LDExICsxNjY5LDExIEBACiAKIAkJCXJldCA9IHJtYXBfb25lKHBhZ2UsIHZtYSwgcm1hcF9pdGVtLT5hZGRyZXNzLCBhcmcpOwogCQkJaWYgKHJldCAhPSBTV0FQX0FHQUlOKSB7Ci0JCQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJCQlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAJfQogCWlmICghc2VhcmNoX25ld19mb3JrcysrKQogCQlnb3RvIGFnYWluOwpAQCAtMTk0MywxNSArMTkyNCwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gbW1fc2xvdHNfaGFzaF9pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZnJlZTE7Ci0KIAlrc21fdGhyZWFkID0ga3RocmVhZF9ydW4oa3NtX3NjYW5fdGhyZWFkLCBOVUxMLCAia3NtZCIpOwogCWlmIChJU19FUlIoa3NtX3RocmVhZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJrc206IGNyZWF0aW5nIGt0aHJlYWQgZmFpbGVkXG4iKTsKIAkJZXJyID0gUFRSX0VSUihrc21fdGhyZWFkKTsKLQkJZ290byBvdXRfZnJlZTI7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCkBAIC0xOTU5LDcgKzE5MzYsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJrc206IHJlZ2lzdGVyIHN5c2ZzIGZhaWxlZFxuIik7CiAJCWt0aHJlYWRfc3RvcChrc21fdGhyZWFkKTsKLQkJZ290byBvdXRfZnJlZTI7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogI2Vsc2UKIAlrc21fcnVuID0gS1NNX1JVTl9NRVJHRTsJLyogbm8gd2F5IGZvciB1c2VyIHRvIHN0YXJ0IGl0ICovCkBAIC0xOTc1LDkgKzE5NTIsNyBAQAogI2VuZGlmCiAJcmV0dXJuIDA7CiAKLW91dF9mcmVlMjoKLQltbV9zbG90c19oYXNoX2ZyZWUoKTsKLW91dF9mcmVlMToKK291dF9mcmVlOgogCWtzbV9zbGFiX2ZyZWUoKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmMKaW5kZXggMzAyNGViMy4uNDM4NDBiMyAxMDA2NDQKLS0tIGEvbW0vbWVtYmxvY2suYworKysgYi9tbS9tZW1ibG9jay5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAogaW50IG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZCh1NjQgYmFzZSwgdTY0IHNpemUpCiB7Ci0JcmV0dXJuIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbigmbWVtYmxvY2sucmVzZXJ2ZWQsIGJhc2UsIHNpemUpOworCXJldHVybiBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oJm1lbWJsb2NrLnJlc2VydmVkLCBiYXNlLCBzaXplKSA+PSAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDIwYTgxOTMuLjNlZWQ1ODMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTQ3LDEwICs0NywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21tX2lubGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VfY2dyb3VwLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvb29tLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvdm1zY2FuLmg+CisKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbV9jZ3JvdXBfc3Vic3lzIF9fcmVhZF9tb3N0bHk7CiAjZGVmaW5lIE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTCTUKIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbV9jZ3JvdXAgX19yZWFkX21vc3RseTsKQEAgLTIxMSw4ICsyMTQsNiBAQAogCSovCiAJc3BpbmxvY2tfdCByZWNsYWltX3BhcmFtX2xvY2s7CiAKLQlpbnQJcHJldl9wcmlvcml0eTsJLyogZm9yIHJlY29yZGluZyByZWNsYWltIHByaW9yaXR5ICovCi0KIAkvKgogCSAqIFdoaWxlIHJlY2xhaW1pbmcgaW4gYSBoaWVyYXJjaHksIHdlIGNhY2hlIHRoZSBsYXN0IGNoaWxkIHdlCiAJICogcmVjbGFpbWVkIGZyb20uCkBAIC0yNjgsNiArMjY5LDcgQEAKIAogLyogIm1jIiBhbmQgaXRzIG1lbWJlcnMgYXJlIHByb3RlY3RlZCBieSBjZ3JvdXBfbXV0ZXggKi8KIHN0YXRpYyBzdHJ1Y3QgbW92ZV9jaGFyZ2Vfc3RydWN0IHsKKwlzcGlubG9ja190CSAgbG9jazsgLyogZm9yIGZyb20sIHRvLCBtb3ZpbmdfdGFzayAqLwogCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tOwogCXN0cnVjdCBtZW1fY2dyb3VwICp0bzsKIAl1bnNpZ25lZCBsb25nIHByZWNoYXJnZTsKQEAgLTI3Niw2ICsyNzgsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbW92aW5nX3Rhc2s7CS8qIGEgdGFzayBtb3ZpbmcgY2hhcmdlcyAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwkJLyogYSB3YWl0cSBmb3Igb3RoZXIgY29udGV4dCAqLwogfSBtYyA9IHsKKwkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG1jLmxvY2spLAogCS53YWl0cSA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKG1jLndhaXRxKSwKIH07CiAKQEAgLTgzNiwxMiArODM5LDEzIEBACiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyciA9IE5VTEw7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCi0JdGFza19sb2NrKHRhc2spOwotCXJjdV9yZWFkX2xvY2soKTsKLQljdXJyID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0odGFzay0+bW0pOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXRhc2tfdW5sb2NrKHRhc2spOworCXAgPSBmaW5kX2xvY2tfdGFza19tbSh0YXNrKTsKKwlpZiAoIXApCisJCXJldHVybiAwOworCWN1cnIgPSB0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShwLT5tbSk7CisJdGFza191bmxvY2socCk7CiAJaWYgKCFjdXJyKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtODU4LDM1ICs4NjIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBwcmV2X3ByaW9yaXR5IGNvbnRyb2wuLi50aGlzIHdpbGwgYmUgdXNlZCBpbiBtZW1vcnkgcmVjbGFpbSBwYXRoLgotICovCi1pbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQotewotCWludCBwcmV2X3ByaW9yaXR5OwotCi0Jc3Bpbl9sb2NrKCZtZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7Ci0JcHJldl9wcmlvcml0eSA9IG1lbS0+cHJldl9wcmlvcml0eTsKLQlzcGluX3VubG9jaygmbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOwotCi0JcmV0dXJuIHByZXZfcHJpb3JpdHk7Ci19Ci0KLXZvaWQgbWVtX2Nncm91cF9ub3RlX3JlY2xhaW1fcHJpb3JpdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgaW50IHByaW9yaXR5KQotewotCXNwaW5fbG9jaygmbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOwotCWlmIChwcmlvcml0eSA8IG1lbS0+cHJldl9wcmlvcml0eSkKLQkJbWVtLT5wcmV2X3ByaW9yaXR5ID0gcHJpb3JpdHk7Ci0Jc3Bpbl91bmxvY2soJm1lbS0+cmVjbGFpbV9wYXJhbV9sb2NrKTsKLX0KLQotdm9pZCBtZW1fY2dyb3VwX3JlY29yZF9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGludCBwcmlvcml0eSkKLXsKLQlzcGluX2xvY2soJm1lbS0+cmVjbGFpbV9wYXJhbV9sb2NrKTsKLQltZW0tPnByZXZfcHJpb3JpdHkgPSBwcmlvcml0eTsKLQlzcGluX3VubG9jaygmbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOwotfQotCiBzdGF0aWMgaW50IGNhbGNfaW5hY3RpdmVfcmF0aW8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nICpwcmVzZW50X3BhZ2VzKQogewogCXVuc2lnbmVkIGxvbmcgYWN0aXZlOwpAQCAtOTQ0LDcgKzkxOSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCB6b25lICp6b25lLAogCQkJCSAgICAgICBlbnVtIGxydV9saXN0IGxydSkKIHsKLQlpbnQgbmlkID0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKKwlpbnQgbmlkID0gem9uZV90b19uaWQoem9uZSk7CiAJaW50IHppZCA9IHpvbmVfaWR4KHpvbmUpOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtY2csIG5pZCwgemlkKTsKIApAQCAtOTU0LDcgKzkyOSw3IEBACiBzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKm1lbV9jZ3JvdXBfZ2V0X3JlY2xhaW1fc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCQkgICAgICBzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlpbnQgbmlkID0gem9uZS0+em9uZV9wZ2RhdC0+bm9kZV9pZDsKKwlpbnQgbmlkID0gem9uZV90b19uaWQoem9uZSk7CiAJaW50IHppZCA9IHpvbmVfaWR4KHpvbmUpOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtY2csIG5pZCwgemlkKTsKIApAQCAtOTk5LDcgKzk3NCw3IEBACiAJTElTVF9IRUFEKHBjX2xpc3QpOwogCXN0cnVjdCBsaXN0X2hlYWQgKnNyYzsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjLCAqdG1wOwotCWludCBuaWQgPSB6LT56b25lX3BnZGF0LT5ub2RlX2lkOworCWludCBuaWQgPSB6b25lX3RvX25pZCh6KTsKIAlpbnQgemlkID0gem9uZV9pZHgoeik7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCWludCBscnUgPSBMUlVfRklMRSAqIGZpbGUgKyBhY3RpdmU7CkBAIC0xMDM4LDYgKzEwMTMsMTAgQEAKIAl9CiAKIAkqc2Nhbm5lZCA9IHNjYW47CisKKwl0cmFjZV9tbV92bXNjYW5fbWVtY2dfaXNvbGF0ZSgwLCBucl90b19zY2FuLCBzY2FuLCBucl90YWtlbiwKKwkJCQkgICAgICAwLCAwLCAwLCBtb2RlKTsKKwogCXJldHVybiBucl90YWtlbjsKIH0KIApAQCAtMTA3Miw2ICsxMDUxLDQ3IEBACiAJcmV0dXJuIHN3YXBwaW5lc3M7CiB9CiAKKy8qIEEgcm91dGluZSBmb3IgdGVzdGluZyBtZW0gaXMgbm90IHVuZGVyIG1vdmVfYWNjb3VudCAqLworCitzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX3VuZGVyX21vdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqdG87CisJYm9vbCByZXQgPSBmYWxzZTsKKwkvKgorCSAqIFVubGlrZSB0YXNrX21vdmUgcm91dGluZXMsIHdlIGFjY2VzcyBtYy50bywgbWMuZnJvbSBub3QgdW5kZXIKKwkgKiBtdXR1YWwgZXhjbHVzaW9uIGJ5IGNncm91cF9tdXRleC4gSGVyZSwgd2UgdGFrZSBzcGlubG9jayBpbnN0ZWFkLgorCSAqLworCXNwaW5fbG9jaygmbWMubG9jayk7CisJZnJvbSA9IG1jLmZyb207CisJdG8gPSBtYy50bzsKKwlpZiAoIWZyb20pCisJCWdvdG8gdW5sb2NrOworCWlmIChmcm9tID09IG1lbSB8fCB0byA9PSBtZW0KKwkgICAgfHwgKG1lbS0+dXNlX2hpZXJhcmNoeSAmJiBjc3NfaXNfYW5jZXN0b3IoJmZyb20tPmNzcywgJm1lbS0+Y3NzKSkKKwkgICAgfHwgKG1lbS0+dXNlX2hpZXJhcmNoeSAmJiBjc3NfaXNfYW5jZXN0b3IoJnRvLT5jc3MsCSZtZW0tPmNzcykpKQorCQlyZXQgPSB0cnVlOwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZtYy5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX3dhaXRfYWNjdF9tb3ZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJaWYgKG1jLm1vdmluZ190YXNrICYmIGN1cnJlbnQgIT0gbWMubW92aW5nX3Rhc2spIHsKKwkJaWYgKG1lbV9jZ3JvdXBfdW5kZXJfbW92ZShtZW0pKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKwkJCXByZXBhcmVfdG9fd2FpdCgmbWMud2FpdHEsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJLyogbW92aW5nIGNoYXJnZSBjb250ZXh0IG1pZ2h0IGhhdmUgZmluaXNoZWQuICovCisJCQlpZiAobWMubW92aW5nX3Rhc2spCisJCQkJc2NoZWR1bGUoKTsKKwkJCWZpbmlzaF93YWl0KCZtYy53YWl0cSwgJndhaXQpOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW5fY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgKnZhbCA9IGRhdGE7CkBAIC0xMTU4LDYgKzExNzgsMjQgQEAKIH0KIAogLyoKKyAqIFJldHVybiB0aGUgbWVtb3J5IChhbmQgc3dhcCwgaWYgY29uZmlndXJlZCkgbGltaXQgZm9yIGEgbWVtY2cuCisgKi8KK3U2NCBtZW1fY2dyb3VwX2dldF9saW1pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCit7CisJdTY0IGxpbWl0OworCXU2NCBtZW1zdzsKKworCWxpbWl0ID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19MSU1JVCkgKworCQkJdG90YWxfc3dhcF9wYWdlczsKKwltZW1zdyA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19MSU1JVCk7CisJLyoKKwkgKiBJZiBtZW1zdyBpcyBmaW5pdGUgYW5kIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN3YXAgc3BhY2UgYXZhaWxhYmxlCisJICogdG8gdGhpcyBtZW1jZywgcmV0dXJuIHRoYXQgbGltaXQuCisJICovCisJcmV0dXJuIG1pbihsaW1pdCwgbWVtc3cpOworfQorCisvKgogICogVmlzaXQgdGhlIGZpcnN0IGNoaWxkIChuZWVkIG5vdCBiZSB0aGUgZmlyc3QgY2hpbGQgYXMgcGVyIHRoZSBvcmRlcmluZwogICogb2YgdGhlIGNncm91cCBsaXN0LCBzaW5jZSB3ZSB0cmFjayBsYXN0X3NjYW5uZWRfY2hpbGQpIG9mIEBtZW0gYW5kIHVzZQogICogdGhhdCB0byByZWNsYWltIGZyZWUgcGFnZXMgZnJvbS4KQEAgLTEyNjIsOCArMTMwMCw3IEBACiAJCS8qIHdlIHVzZSBzd2FwcGluZXNzIG9mIGxvY2FsIGNncm91cCAqLwogCQlpZiAoY2hlY2tfc29mdCkKIAkJCXJldCA9IG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVfem9uZSh2aWN0aW0sIGdmcF9tYXNrLAotCQkJCW5vc3dhcCwgZ2V0X3N3YXBwaW5lc3ModmljdGltKSwgem9uZSwKLQkJCQl6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkKTsKKwkJCQlub3N3YXAsIGdldF9zd2FwcGluZXNzKHZpY3RpbSksIHpvbmUpOwogCQllbHNlCiAJCQlyZXQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHZpY3RpbSwgZ2ZwX21hc2ssCiAJCQkJCQlub3N3YXAsIGdldF9zd2FwcGluZXNzKHZpY3RpbSkpOwpAQCAtMTM3MCw3ICsxNDA3LDcgQEAKIAogc3RhdGljIHZvaWQgbWVtY2dfb29tX3JlY292ZXIoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKLQlpZiAoYXRvbWljX3JlYWQoJm1lbS0+b29tX2xvY2spKQorCWlmIChtZW0gJiYgYXRvbWljX3JlYWQoJm1lbS0+b29tX2xvY2spKQogCQltZW1jZ193YWtldXBfb29tKG1lbSk7CiB9CiAKQEAgLTE1ODIsMTYgKzE2MTksODMgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCisKKy8qIFNlZSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZSgpIGZvciBkZXRhaWxzICovCitlbnVtIHsKKwlDSEFSR0VfT0ssCQkvKiBzdWNjZXNzICovCisJQ0hBUkdFX1JFVFJZLAkJLyogbmVlZCB0byByZXRyeSBidXQgcmV0cnkgaXMgbm90IGJhZCAqLworCUNIQVJHRV9OT01FTSwJCS8qIHdlIGNhbid0IGRvIG1vcmUuIHJldHVybiAtRU5PTUVNICovCisJQ0hBUkdFX1dPVUxEQkxPQ0ssCS8qIEdGUF9XQUlUIHdhc24ndCBzZXQgYW5kIG5vIGVub3VnaCByZXMuICovCisJQ0hBUkdFX09PTV9ESUUsCQkvKiB0aGUgY3VycmVudCBpcyBraWxsZWQgYmVjYXVzZSBvZiBPT00gKi8KK307CisKK3N0YXRpYyBpbnQgX19tZW1fY2dyb3VwX2RvX2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBnZnBfdCBnZnBfbWFzaywKKwkJCQlpbnQgY3NpemUsIGJvb2wgb29tX2NoZWNrKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fb3Zlcl9saW1pdDsKKwlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBjc2l6ZSwgJmZhaWxfcmVzKTsKKworCWlmIChsaWtlbHkoIXJldCkpIHsKKwkJaWYgKCFkb19zd2FwX2FjY291bnQpCisJCQlyZXR1cm4gQ0hBUkdFX09LOworCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+bWVtc3csIGNzaXplLCAmZmFpbF9yZXMpOworCQlpZiAobGlrZWx5KCFyZXQpKQorCQkJcmV0dXJuIENIQVJHRV9PSzsKKworCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgbWVtc3cpOworCQlmbGFncyB8PSBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOworCX0gZWxzZQorCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywgcmVzKTsKKworCWlmIChjc2l6ZSA+IFBBR0VfU0laRSkgLyogY2hhbmdlIGNzaXplIGFuZCByZXRyeSAqLworCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOworCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9XQUlUKSkKKwkJcmV0dXJuIENIQVJHRV9XT1VMREJMT0NLOworCisJcmV0ID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1fb3Zlcl9saW1pdCwgTlVMTCwKKwkJCQkJZ2ZwX21hc2ssIGZsYWdzKTsKKwkvKgorCSAqIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoKSBtaWdodCBub3QgZ2l2ZSB1cyBhIGZ1bGwKKwkgKiBwaWN0dXJlIG9mIHJlY2xhaW0uIFNvbWUgcGFnZXMgYXJlIHJlY2xhaW1lZCBhbmQgbWlnaHQgYmUKKwkgKiBtb3ZlZCB0byBzd2FwIGNhY2hlIG9yIGp1c3QgdW5tYXBwZWQgZnJvbSB0aGUgY2dyb3VwLgorCSAqIENoZWNrIHRoZSBsaW1pdCBhZ2FpbiB0byBzZWUgaWYgdGhlIHJlY2xhaW0gcmVkdWNlZCB0aGUKKwkgKiBjdXJyZW50IHVzYWdlIG9mIHRoZSBjZ3JvdXAgYmVmb3JlIGdpdmluZyB1cAorCSAqLworCWlmIChyZXQgfHwgbWVtX2Nncm91cF9jaGVja191bmRlcl9saW1pdChtZW1fb3Zlcl9saW1pdCkpCisJCXJldHVybiBDSEFSR0VfUkVUUlk7CisKKwkvKgorCSAqIEF0IHRhc2sgbW92ZSwgY2hhcmdlIGFjY291bnRzIGNhbiBiZSBkb3VibHkgY291bnRlZC4gU28sIGl0J3MKKwkgKiBiZXR0ZXIgdG8gd2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRhc2tfbW92ZSBpZiBzb21ldGhpbmcgaXMgZ29pbmcgb24uCisJICovCisJaWYgKG1lbV9jZ3JvdXBfd2FpdF9hY2N0X21vdmUobWVtX292ZXJfbGltaXQpKQorCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOworCisJLyogSWYgd2UgZG9uJ3QgbmVlZCB0byBjYWxsIG9vbS1raWxsZXIgYXQgZWwsIHJldHVybiBpbW1lZGlhdGVseSAqLworCWlmICghb29tX2NoZWNrKQorCQlyZXR1cm4gQ0hBUkdFX05PTUVNOworCS8qIGNoZWNrIE9PTSAqLworCWlmICghbWVtX2Nncm91cF9oYW5kbGVfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzaykpCisJCXJldHVybiBDSEFSR0VfT09NX0RJRTsKKworCXJldHVybiBDSEFSR0VfUkVUUlk7Cit9CisKIC8qCiAgKiBVbmxpa2UgZXhwb3J0ZWQgaW50ZXJmYWNlLCAib29tIiBwYXJhbWV0ZXIgaXMgYWRkZWQuIGlmIG9vbT09dHJ1ZSwKICAqIG9vbS1raWxsZXIgY2FuIGJlIGludm9rZWQuCiAgKi8KIHN0YXRpYyBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywgYm9vbCBvb20pCisJCWdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnLCBib29sIG9vbSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQ7Ci0JaW50IG5yX3JldHJpZXMgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOworCWludCBucl9vb21fcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOworCWludCByZXQ7CiAJaW50IGNzaXplID0gQ0hBUkdFX1NJWkU7CiAKIAkvKgpAQCAtMTYwOSwxMjYgKzE3MTMsMTA4IEBACiAJICogdGhyZWFkIGdyb3VwIGxlYWRlciBtaWdyYXRlcy4gSXQncyBwb3NzaWJsZSB0aGF0IG1tIGlzIG5vdAogCSAqIHNldCwgaWYgc28gY2hhcmdlIHRoZSBpbml0X21tIChoYXBwZW5zIGZvciBwYWdlY2FjaGUgdXNhZ2UpLgogCSAqLwotCW1lbSA9ICptZW1jZzsKLQlpZiAobGlrZWx5KCFtZW0pKSB7Ci0JCW1lbSA9IHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKLQkJKm1lbWNnID0gbWVtOwotCX0gZWxzZSB7Ci0JCWNzc19nZXQoJm1lbS0+Y3NzKTsKLQl9Ci0JaWYgKHVubGlrZWx5KCFtZW0pKQotCQlyZXR1cm4gMDsKLQotCVZNX0JVR19PTihjc3NfaXNfcmVtb3ZlZCgmbWVtLT5jc3MpKTsKLQlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbSkpCi0JCWdvdG8gZG9uZTsKLQotCXdoaWxlICgxKSB7Ci0JCWludCByZXQgPSAwOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQorCWlmICghKm1lbWNnICYmICFtbSkKKwkJZ290byBieXBhc3M7CithZ2FpbjoKKwlpZiAoKm1lbWNnKSB7IC8qIGNzcyBzaG91bGQgYmUgYSB2YWxpZCBvbmUgKi8KKwkJbWVtID0gKm1lbWNnOworCQlWTV9CVUdfT04oY3NzX2lzX3JlbW92ZWQoJm1lbS0+Y3NzKSk7CisJCWlmIChtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkKKwkJCWdvdG8gZG9uZTsKIAkJaWYgKGNvbnN1bWVfc3RvY2sobWVtKSkKIAkJCWdvdG8gZG9uZTsKKwkJY3NzX2dldCgmbWVtLT5jc3MpOworCX0gZWxzZSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAotCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBjc2l6ZSwgJmZhaWxfcmVzKTsKLQkJaWYgKGxpa2VseSghcmV0KSkgewotCQkJaWYgKCFkb19zd2FwX2FjY291bnQpCi0JCQkJYnJlYWs7Ci0JCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+bWVtc3csIGNzaXplLCAmZmFpbF9yZXMpOwotCQkJaWYgKGxpa2VseSghcmV0KSkKLQkJCQlicmVhazsKLQkJCS8qIG1lbStzd2FwIGNvdW50ZXIgZmFpbHMgKi8KLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgY3NpemUpOwotCQkJZmxhZ3MgfD0gTUVNX0NHUk9VUF9SRUNMQUlNX05PU1dBUDsKLQkJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLAotCQkJCQkJCQkJbWVtc3cpOwotCQl9IGVsc2UKLQkJCS8qIG1lbSBjb3VudGVyIGZhaWxzICovCi0JCQltZW1fb3Zlcl9saW1pdCA9IG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihmYWlsX3JlcywKLQkJCQkJCQkJCXJlcyk7Ci0KLQkJLyogcmVkdWNlIHJlcXVlc3Qgc2l6ZSBhbmQgcmV0cnkgKi8KLQkJaWYgKGNzaXplID4gUEFHRV9TSVpFKSB7Ci0JCQljc2l6ZSA9IFBBR0VfU0laRTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghKGdmcF9tYXNrICYgX19HRlBfV0FJVCkpCi0JCQlnb3RvIG5vbWVtOwotCi0JCXJldCA9IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0obWVtX292ZXJfbGltaXQsIE5VTEwsCi0JCQkJCQlnZnBfbWFzaywgZmxhZ3MpOwotCQlpZiAocmV0KQotCQkJY29udGludWU7Ci0KKwkJcmN1X3JlYWRfbG9jaygpOworCQlwID0gcmN1X2RlcmVmZXJlbmNlKG1tLT5vd25lcik7CisJCVZNX0JVR19PTighcCk7CiAJCS8qCi0JCSAqIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoKSBtaWdodCBub3QgZ2l2ZSB1cyBhIGZ1bGwKLQkJICogcGljdHVyZSBvZiByZWNsYWltLiBTb21lIHBhZ2VzIGFyZSByZWNsYWltZWQgYW5kIG1pZ2h0IGJlCi0JCSAqIG1vdmVkIHRvIHN3YXAgY2FjaGUgb3IganVzdCB1bm1hcHBlZCBmcm9tIHRoZSBjZ3JvdXAuCi0JCSAqIENoZWNrIHRoZSBsaW1pdCBhZ2FpbiB0byBzZWUgaWYgdGhlIHJlY2xhaW0gcmVkdWNlZCB0aGUKLQkJICogY3VycmVudCB1c2FnZSBvZiB0aGUgY2dyb3VwIGJlZm9yZSBnaXZpbmcgdXAKLQkJICoKKwkJICogYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRhc2tfbG9jaygpLCAicCIgY2FuIGV4aXQgd2hpbGUKKwkJICogd2UncmUgaGVyZS4gSW4gdGhhdCBjYXNlLCAibWVtIiBjYW4gcG9pbnQgdG8gcm9vdAorCQkgKiBjZ3JvdXAgYnV0IG5ldmVyIGJlIE5VTEwuIChhbmQgdGFza19zdHJ1Y3QgaXRzZWxmIGlzIGZyZWVkCisJCSAqIGJ5IFJDVSwgY2dyb3VwIGl0c2VsZiBpcyBSQ1Ugc2FmZS4pIFRoZW4sIHdlIGhhdmUgc21hbGwKKwkJICogcmlzayBoZXJlIHRvIGdldCB3cm9uZyBjZ3JvdXAuIEJ1dCBzdWNoIGtpbmQgb2YgbWlzLWFjY291bnQKKwkJICogYnkgcmFjZSBhbHdheXMgaGFwcGVucyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2dyb3VwX211dGV4KCkuCisJCSAqIEl0J3Mgb3ZlcmtpbGwgYW5kIHdlIGFsbG93IHRoYXQgc21hbGwgcmFjZSwgaGVyZS4KIAkJICovCi0JCWlmIChtZW1fY2dyb3VwX2NoZWNrX3VuZGVyX2xpbWl0KG1lbV9vdmVyX2xpbWl0KSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHRyeSB0byBhdm9pZCBvb20gd2hpbGUgc29tZW9uZSBpcyBtb3ZpbmcgY2hhcmdlICovCi0JCWlmIChtYy5tb3ZpbmdfdGFzayAmJiBjdXJyZW50ICE9IG1jLm1vdmluZ190YXNrKSB7Ci0JCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgKnRvOwotCQkJYm9vbCBkb19jb250aW51ZSA9IGZhbHNlOwotCQkJLyoKLQkJCSAqIFRoZXJlIGlzIGEgc21hbGwgcmFjZSB0aGF0ICJmcm9tIiBvciAidG8iIGNhbiBiZQotCQkJICogZnJlZWQgYnkgcm1kaXIsIHNvIHdlIHVzZSBjc3NfdHJ5Z2V0KCkuCi0JCQkgKi8KLQkJCWZyb20gPSBtYy5mcm9tOwotCQkJdG8gPSBtYy50bzsKLQkJCWlmIChmcm9tICYmIGNzc190cnlnZXQoJmZyb20tPmNzcykpIHsKLQkJCQlpZiAobWVtX292ZXJfbGltaXQtPnVzZV9oaWVyYXJjaHkpCi0JCQkJCWRvX2NvbnRpbnVlID0gY3NzX2lzX2FuY2VzdG9yKAotCQkJCQkJCSZmcm9tLT5jc3MsCi0JCQkJCQkJJm1lbV9vdmVyX2xpbWl0LT5jc3MpOwotCQkJCWVsc2UKLQkJCQkJZG9fY29udGludWUgPSAoZnJvbSA9PSBtZW1fb3Zlcl9saW1pdCk7Ci0JCQkJY3NzX3B1dCgmZnJvbS0+Y3NzKTsKLQkJCX0KLQkJCWlmICghZG9fY29udGludWUgJiYgdG8gJiYgY3NzX3RyeWdldCgmdG8tPmNzcykpIHsKLQkJCQlpZiAobWVtX292ZXJfbGltaXQtPnVzZV9oaWVyYXJjaHkpCi0JCQkJCWRvX2NvbnRpbnVlID0gY3NzX2lzX2FuY2VzdG9yKAotCQkJCQkJCSZ0by0+Y3NzLAotCQkJCQkJCSZtZW1fb3Zlcl9saW1pdC0+Y3NzKTsKLQkJCQllbHNlCi0JCQkJCWRvX2NvbnRpbnVlID0gKHRvID09IG1lbV9vdmVyX2xpbWl0KTsKLQkJCQljc3NfcHV0KCZ0by0+Y3NzKTsKLQkJCX0KLQkJCWlmIChkb19jb250aW51ZSkgewotCQkJCURFRklORV9XQUlUKHdhaXQpOwotCQkJCXByZXBhcmVfdG9fd2FpdCgmbWMud2FpdHEsICZ3YWl0LAotCQkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQkJLyogbW92aW5nIGNoYXJnZSBjb250ZXh0IG1pZ2h0IGhhdmUgZmluaXNoZWQuICovCi0JCQkJaWYgKG1jLm1vdmluZ190YXNrKQotCQkJCQlzY2hlZHVsZSgpOwotCQkJCWZpbmlzaF93YWl0KCZtYy53YWl0cSwgJndhaXQpOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQltZW0gPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhwKTsKKwkJVk1fQlVHX09OKCFtZW0pOworCQlpZiAobWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBkb25lOwogCQl9CisJCWlmIChjb25zdW1lX3N0b2NrKG1lbSkpIHsKKwkJCS8qCisJCQkgKiBJdCBzZWVtcyBkYWdlcm91cyB0byBhY2Nlc3MgbWVtY2cgd2l0aG91dCBjc3NfZ2V0KCkuCisJCQkgKiBCdXQgY29uc2lkZXJpbmcgaG93IGNvbnN1bWVfc3RvayB3b3JrcywgaXQncyBub3QKKwkJCSAqIG5lY2Vzc2FyeS4gSWYgY29uc3VtZV9zdG9jayBzdWNjZXNzLCBzb21lIGNoYXJnZXMKKwkJCSAqIGZyb20gdGhpcyBtZW1jZyBhcmUgY2FjaGVkIG9uIHRoaXMgY3B1LiBTbywgd2UKKwkJCSAqIGRvbid0IG5lZWQgdG8gY2FsbCBjc3NfZ2V0KCkvY3NzX3RyeWdldCgpIGJlZm9yZQorCQkJICogY2FsbGluZyBjb25zdW1lX3N0b2NrKCkuCisJCQkgKi8KKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBkb25lOworCQl9CisJCS8qIGFmdGVyIGhlcmUsIHdlIG1heSBiZSBibG9ja2VkLiB3ZSBuZWVkIHRvIGdldCByZWZjbnQgKi8KKwkJaWYgKCFjc3NfdHJ5Z2V0KCZtZW0tPmNzcykpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CiAKLQkJaWYgKCFucl9yZXRyaWVzLS0pIHsKLQkJCWlmICghb29tKQotCQkJCWdvdG8gbm9tZW07Ci0JCQlpZiAobWVtX2Nncm91cF9oYW5kbGVfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzaykpIHsKLQkJCQlucl9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBXaGVuIHdlIHJlYWNoIGhlcmUsIGN1cnJlbnQgdGFzayBpcyBkeWluZyAuKi8KKwlkbyB7CisJCWJvb2wgb29tX2NoZWNrOworCisJCS8qIElmIGtpbGxlZCwgYnlwYXNzIGNoYXJnZSAqLworCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCWNzc19wdXQoJm1lbS0+Y3NzKTsKIAkJCWdvdG8gYnlwYXNzOwogCQl9Ci0JfQorCisJCW9vbV9jaGVjayA9IGZhbHNlOworCQlpZiAob29tICYmICFucl9vb21fcmV0cmllcykgeworCQkJb29tX2NoZWNrID0gdHJ1ZTsKKwkJCW5yX29vbV9yZXRyaWVzID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CisJCX0KKworCQlyZXQgPSBfX21lbV9jZ3JvdXBfZG9fY2hhcmdlKG1lbSwgZ2ZwX21hc2ssIGNzaXplLCBvb21fY2hlY2spOworCisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgQ0hBUkdFX09LOgorCQkJYnJlYWs7CisJCWNhc2UgQ0hBUkdFX1JFVFJZOiAvKiBub3QgaW4gT09NIHNpdHVhdGlvbiBidXQgcmV0cnkgKi8KKwkJCWNzaXplID0gUEFHRV9TSVpFOworCQkJY3NzX3B1dCgmbWVtLT5jc3MpOworCQkJbWVtID0gTlVMTDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgQ0hBUkdFX1dPVUxEQkxPQ0s6IC8qICFfX0dGUF9XQUlUICovCisJCQljc3NfcHV0KCZtZW0tPmNzcyk7CisJCQlnb3RvIG5vbWVtOworCQljYXNlIENIQVJHRV9OT01FTTogLyogT09NIHJvdXRpbmUgd29ya3MgKi8KKwkJCWlmICghb29tKSB7CisJCQkJY3NzX3B1dCgmbWVtLT5jc3MpOworCQkJCWdvdG8gbm9tZW07CisJCQl9CisJCQkvKiBJZiBvb20sIHdlIG5ldmVyIHJldHVybiAtRU5PTUVNICovCisJCQlucl9vb21fcmV0cmllcy0tOworCQkJYnJlYWs7CisJCWNhc2UgQ0hBUkdFX09PTV9ESUU6IC8qIEtpbGxlZCBieSBPT00gS2lsbGVyICovCisJCQljc3NfcHV0KCZtZW0tPmNzcyk7CisJCQlnb3RvIGJ5cGFzczsKKwkJfQorCX0gd2hpbGUgKHJldCAhPSBDSEFSR0VfT0spOworCiAJaWYgKGNzaXplID4gUEFHRV9TSVpFKQogCQlyZWZpbGxfc3RvY2sobWVtLCBjc2l6ZSAtIFBBR0VfU0laRSk7CisJY3NzX3B1dCgmbWVtLT5jc3MpOwogZG9uZToKKwkqbWVtY2cgPSBtZW07CiAJcmV0dXJuIDA7CiBub21lbToKLQljc3NfcHV0KCZtZW0tPmNzcyk7CisJKm1lbWNnID0gTlVMTDsKIAlyZXR1cm4gLUVOT01FTTsKIGJ5cGFzczoKIAkqbWVtY2cgPSBOVUxMOwpAQCAtMTc0NywxMSArMTgzMyw3IEBACiAJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFICogY291bnQpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQogCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSAqIGNvdW50KTsKLQkJVk1fQlVHX09OKHRlc3RfYml0KENTU19ST09ULCAmbWVtLT5jc3MuZmxhZ3MpKTsKLQkJV0FSTl9PTl9PTkNFKGNvdW50ID4gSU5UX01BWCk7Ci0JCV9fY3NzX3B1dCgmbWVtLT5jc3MsIChpbnQpY291bnQpOwogCX0KLQkvKiB3ZSBkb24ndCBuZWVkIGNzc19wdXQgZm9yIHJvb3QgKi8KIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCkBAIC0xOTc5LDEwICsyMDYxLDkgQEAKICAqIDwgMCBpZiB0aGUgY2dyb3VwIGlzIG92ZXIgaXRzIGxpbWl0CiAgKi8KIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQlnZnBfdCBnZnBfbWFzaywgZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCisJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCWludCByZXQ7CiAKQEAgLTE5OTIsNyArMjA3Myw2IEBACiAJCXJldHVybiAwOwogCXByZWZldGNodyhwYyk7CiAKLQltZW0gPSBtZW1jZzsKIAlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgZ2ZwX21hc2ssICZtZW0sIHRydWUpOwogCWlmIChyZXQgfHwgIW1lbSkKIAkJcmV0dXJuIHJldDsKQEAgLTIwMjAsNyArMjEwMCw3IEBACiAJaWYgKHVubGlrZWx5KCFtbSkpCiAJCW1tID0gJmluaXRfbW07CiAJcmV0dXJuIG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCi0JCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQsIE5VTEwpOworCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwMzAsNyArMjExMCw2IEBACiBpbnQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCWdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCWludCByZXQ7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQpAQCAtMjA1MSw3ICsyMTMwLDYgQEAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKSB7CiAJCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKLQogCQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKIAkJaWYgKCFwYykKIAkJCXJldHVybiAwOwpAQCAtMjA2MywyMiArMjE0MSwyNCBAQAogCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCX0KIAotCWlmICh1bmxpa2VseSghbW0gJiYgIW1lbSkpCisJaWYgKHVubGlrZWx5KCFtbSkpCiAJCW1tID0gJmluaXRfbW07CiAKIAlpZiAocGFnZV9pc19maWxlX2NhY2hlKHBhZ2UpKQogCQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKLQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFLCBOVUxMKTsKKwkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFKTsKIAogCS8qIHNobWVtICovCiAJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7CisKIAkJcmV0ID0gbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBpbihtbSwgcGFnZSwgZ2ZwX21hc2ssICZtZW0pOwogCQlpZiAoIXJldCkKIAkJCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihwYWdlLCBtZW0sCiAJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0pOwogCX0gZWxzZQogCQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAotCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLCBtZW0pOworCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTE0LDcgKzIxOTQsNiBAQAogCQlnb3RvIGNoYXJnZV9jdXJfbW07CiAJKnB0ciA9IG1lbTsKIAlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBtYXNrLCBwdHIsIHRydWUpOwotCS8qIGRyb3AgZXh0cmEgcmVmY250IGZyb20gdHJ5Z2V0ICovCiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogCXJldHVybiByZXQ7CiBjaGFyZ2VfY3VyX21tOgpAQCAtMjI0NSw3ICsyMzI0LDYgQEAKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwotCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKIAogCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMjI4NSwxMCArMjM2Myw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpCi0JCV9fZG9fdW5jaGFyZ2UobWVtLCBjdHlwZSk7Ci0JaWYgKGN0eXBlID09IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKLQkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtLCB0cnVlKTsKIAltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgcGMsIGZhbHNlKTsKIAogCUNsZWFyUGFnZUNncm91cFVzZWQocGMpOwpAQCAtMjI5OSwxMyArMjM3MywxOCBAQAogCSAqIHNwZWNpYWwgZnVuY3Rpb25zLgogCSAqLwogCi0JbXogPSBwYWdlX2Nncm91cF96b25laW5mbyhwYyk7CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKLQorCS8qCisJICogZXZlbiBhZnRlciB1bmxvY2ssIHdlIGhhdmUgbWVtLT5yZXMudXNhZ2UgaGVyZSBhbmQgdGhpcyBtZW1jZworCSAqIHdpbGwgbmV2ZXIgYmUgZnJlZWQuCisJICovCiAJbWVtY2dfY2hlY2tfZXZlbnRzKG1lbSwgcGFnZSk7Ci0JLyogYXQgc3dhcG91dCwgdGhpcyBtZW1jZyB3aWxsIGJlIGFjY2Vzc2VkIHRvIHJlY29yZCB0byBzd2FwICovCi0JaWYgKGN0eXBlICE9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKLQkJY3NzX3B1dCgmbWVtLT5jc3MpOworCWlmIChkb19zd2FwX2FjY291bnQgJiYgY3R5cGUgPT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKSB7CisJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbSwgdHJ1ZSk7CisJCW1lbV9jZ3JvdXBfZ2V0KG1lbSk7CisJfQorCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpCisJCV9fZG9fdW5jaGFyZ2UobWVtLCBjdHlwZSk7CiAKIAlyZXR1cm4gbWVtOwogCkBAIC0yMzkyLDEzICsyNDcxLDEyIEBACiAKIAltZW1jZyA9IF9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24ocGFnZSwgY3R5cGUpOwogCi0JLyogcmVjb3JkIG1lbWNnIGluZm9ybWF0aW9uICovCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBzd2Fwb3V0ICYmIG1lbWNnKSB7CisJLyoKKwkgKiByZWNvcmQgbWVtY2cgaW5mb3JtYXRpb24sICBpZiBzd2Fwb3V0ICYmIG1lbWNnICE9IE5VTEwsCisJICogbWVtX2Nncm91cF9nZXQoKSB3YXMgY2FsbGVkIGluIHVuY2hhcmdlKCkuCisJICovCisJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBzd2Fwb3V0ICYmIG1lbWNnKQogCQlzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBjc3NfaWQoJm1lbWNnLT5jc3MpKTsKLQkJbWVtX2Nncm91cF9nZXQobWVtY2cpOwotCX0KLQlpZiAoc3dhcG91dCAmJiBtZW1jZykKLQkJY3NzX3B1dCgmbWVtY2ctPmNzcyk7CiB9CiAjZW5kaWYKIApAQCAtMjQ3Niw3ICsyNTU0LDYgQEAKIAkJCSAqLwogCQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QodG8pKQogCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZ0by0+cmVzLCBQQUdFX1NJWkUpOwotCQkJY3NzX3B1dCgmdG8tPmNzcyk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjYxMSwxMSArMjY4OCw4IEBACiAJQ2xlYXJQYWdlQ2dyb3VwTWlncmF0aW9uKHBjKTsKIAl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCi0JaWYgKHVudXNlZCAhPSBvbGRwYWdlKQotCQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cCh1bnVzZWQpOwogCV9fbWVtX2Nncm91cF91bmNoYXJnZV9jb21tb24odW51c2VkLCBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0ZPUkNFKTsKIAotCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHVzZWQpOwogCS8qCiAJICogSWYgYSBwYWdlIGlzIGEgZmlsZSBjYWNoZSwgcmFkaXgtdHJlZSByZXBsYWNlbWVudCBpcyB2ZXJ5IGF0b21pYwogCSAqIGFuZCB3ZSBjYW4gc2tpcCB0aGlzIGNoZWNrLiBXaGVuIGl0IHdhcyBhbiBBbm9uIHBhZ2UsIGl0cyBtYXBjb3VudApAQCAtMjc5MSw4ICsyODY1LDcgQEAKIH0KIAogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAotCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsCi0JCQkJCQlpbnQgemlkKQorCQkJCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSAwOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwgKm5leHRfbXogPSBOVUxMOwpAQCAtMjgwNCw3ICsyODc3LDcgQEAKIAlpZiAob3JkZXIgPiAwKQogCQlyZXR1cm4gMDsKIAotCW1jdHogPSBzb2Z0X2xpbWl0X3RyZWVfbm9kZV96b25lKG5pZCwgemlkKTsKKwltY3R6ID0gc29mdF9saW1pdF90cmVlX25vZGVfem9uZSh6b25lX3RvX25pZCh6b25lKSwgem9uZV9pZHgoem9uZSkpOwogCS8qCiAJICogVGhpcyBsb29wIGNhbiBydW4gYSB3aGlsZSwgc3BlY2lhbGx5IGlmIG1lbV9jZ3JvdXAncyBjb250aW51b3VzbHkKIAkgKiBrZWVwIGV4Y2VlZGluZyB0aGVpciBzb2Z0IGxpbWl0IGFuZCBwdXR0aW5nIHRoZSBzeXN0ZW0gdW5kZXIKQEAgLTM3NTksOCArMzgzMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKi8KIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fY29udHJvbF93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCXN0cnVjdCBjZnR5cGUgKmNmdCwgdTY0IHZhbCkKIHsKQEAgLTQxODAsOSArNDI1MSw2IEBACiAJCQlnb3RvIG9uZV9ieV9vbmU7CiAJCX0KIAkJbWMucHJlY2hhcmdlICs9IGNvdW50OwotCQlWTV9CVUdfT04odGVzdF9iaXQoQ1NTX1JPT1QsICZtZW0tPmNzcy5mbGFncykpOwotCQlXQVJOX09OX09OQ0UoY291bnQgPiBJTlRfTUFYKTsKLQkJX19jc3NfZ2V0KCZtZW0tPmNzcywgKGludCljb3VudCk7CiAJCXJldHVybiByZXQ7CiAJfQogb25lX2J5X29uZToKQEAgLTQ0MDAsMTEgKzQ0NjgsMTMgQEAKIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jbGVhcl9tYyh2b2lkKQogeworCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tID0gbWMuZnJvbTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqdG8gPSBtYy50bzsKKwogCS8qIHdlIG11c3QgdW5jaGFyZ2UgYWxsIHRoZSBsZWZ0b3ZlciBwcmVjaGFyZ2VzIGZyb20gbWMudG8gKi8KIAlpZiAobWMucHJlY2hhcmdlKSB7CiAJCV9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKG1jLnRvLCBtYy5wcmVjaGFyZ2UpOwogCQltYy5wcmVjaGFyZ2UgPSAwOwotCQltZW1jZ19vb21fcmVjb3ZlcihtYy50byk7CiAJfQogCS8qCiAJICogd2UgZGlkbid0IHVuY2hhcmdlIGZyb20gbWMuZnJvbSBhdCBtZW1fY2dyb3VwX21vdmVfYWNjb3VudCgpLCBzbwpAQCAtNDQxMywxMSArNDQ4Myw5IEBACiAJaWYgKG1jLm1vdmVkX2NoYXJnZSkgewogCQlfX21lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShtYy5mcm9tLCBtYy5tb3ZlZF9jaGFyZ2UpOwogCQltYy5tb3ZlZF9jaGFyZ2UgPSAwOwotCQltZW1jZ19vb21fcmVjb3ZlcihtYy5mcm9tKTsKIAl9CiAJLyogd2UgbXVzdCBmaXh1cCByZWZjbnRzIGFuZCBjaGFyZ2VzICovCiAJaWYgKG1jLm1vdmVkX3N3YXApIHsKLQkJV0FSTl9PTl9PTkNFKG1jLm1vdmVkX3N3YXAgPiBJTlRfTUFYKTsKIAkJLyogdW5jaGFyZ2Ugc3dhcCBhY2NvdW50IGZyb20gdGhlIG9sZCBjZ3JvdXAgKi8KIAkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWMuZnJvbSkpCiAJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWMuZnJvbS0+bWVtc3csCkBAIC00NDMxLDE2ICs0NDk5LDE4IEBACiAJCQkgKi8KIAkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtYy50by0+cmVzLAogCQkJCQkJUEFHRV9TSVpFICogbWMubW92ZWRfc3dhcCk7Ci0JCQlWTV9CVUdfT04odGVzdF9iaXQoQ1NTX1JPT1QsICZtYy50by0+Y3NzLmZsYWdzKSk7Ci0JCQlfX2Nzc19wdXQoJm1jLnRvLT5jc3MsIG1jLm1vdmVkX3N3YXApOwogCQl9CiAJCS8qIHdlJ3ZlIGFscmVhZHkgZG9uZSBtZW1fY2dyb3VwX2dldChtYy50bykgKi8KIAogCQltYy5tb3ZlZF9zd2FwID0gMDsKIAl9CisJc3Bpbl9sb2NrKCZtYy5sb2NrKTsKIAltYy5mcm9tID0gTlVMTDsKIAltYy50byA9IE5VTEw7CiAJbWMubW92aW5nX3Rhc2sgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZtYy5sb2NrKTsKKwltZW1jZ19vb21fcmVjb3Zlcihmcm9tKTsKKwltZW1jZ19vb21fcmVjb3Zlcih0byk7CiAJd2FrZV91cF9hbGwoJm1jLndhaXRxKTsKIH0KIApAQCAtNDQ2OSwxMiArNDUzOSwxNCBAQAogCQkJVk1fQlVHX09OKG1jLm1vdmVkX2NoYXJnZSk7CiAJCQlWTV9CVUdfT04obWMubW92ZWRfc3dhcCk7CiAJCQlWTV9CVUdfT04obWMubW92aW5nX3Rhc2spOworCQkJc3Bpbl9sb2NrKCZtYy5sb2NrKTsKIAkJCW1jLmZyb20gPSBmcm9tOwogCQkJbWMudG8gPSBtZW07CiAJCQltYy5wcmVjaGFyZ2UgPSAwOwogCQkJbWMubW92ZWRfY2hhcmdlID0gMDsKIAkJCW1jLm1vdmVkX3N3YXAgPSAwOwogCQkJbWMubW92aW5nX3Rhc2sgPSBjdXJyZW50OworCQkJc3Bpbl91bmxvY2soJm1jLmxvY2spOwogCiAJCQlyZXQgPSBtZW1fY2dyb3VwX3ByZWNoYXJnZV9tYyhtbSk7CiAJCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBiZGU0MmM2Li44NTg4MjlkIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMzA3LDcgKzMwNyw2IEBACiB7CiAJcGdkX3QgKnBnZDsKIAl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKIAogCS8qCiAJICogVGhlIG5leHQgZmV3IGxpbmVzIGhhdmUgZ2l2ZW4gdXMgbG90cyBvZiBncmllZi4uLgpAQCAtMzUxLDcgKzM1MCw2IEBACiAJaWYgKGFkZHIgPiBlbmQgLSAxKQogCQlyZXR1cm47CiAKLQlzdGFydCA9IGFkZHI7CiAJcGdkID0gcGdkX29mZnNldCh0bGItPm1tLCBhZGRyKTsKIAlkbyB7CiAJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKQEAgLTIwMDgsMTEgKzIwMDYsMTAgQEAKIHsKIAlwZ2RfdCAqcGdkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gYWRkciwgZW5kID0gYWRkciArIHNpemU7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyICsgc2l6ZTsKIAlpbnQgZXJyOwogCiAJQlVHX09OKGFkZHIgPj0gZW5kKTsKLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIGVuZCk7CiAJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcik7CiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CkBAIC0yMDIwLDcgKzIwMTcsNyBAQAogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAJfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCBzdGFydCwgZW5kKTsKKwogCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhcHBseV90b19wYWdlX3JhbmdlKTsKQEAgLTI2MzAsNiArMjYyNyw3IEBACiAJc3dwX2VudHJ5X3QgZW50cnk7CiAJcHRlX3QgcHRlOwogCXN0cnVjdCBtZW1fY2dyb3VwICpwdHIgPSBOVUxMOworCWludCBleGNsdXNpdmUgPSAwOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpCkBAIC0yNzI0LDEwICsyNzIyLDEyIEBACiAJaWYgKChmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmIHJldXNlX3N3YXBfcGFnZShwYWdlKSkgewogCQlwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIHZtYSk7CiAJCWZsYWdzICY9IH5GQVVMVF9GTEFHX1dSSVRFOworCQlyZXQgfD0gVk1fRkFVTFRfV1JJVEU7CisJCWV4Y2x1c2l2ZSA9IDE7CiAJfQogCWZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSk7CiAJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgcHRlKTsKLQlwYWdlX2FkZF9hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKKwlkb19wYWdlX2FkZF9hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzLCBleGNsdXNpdmUpOwogCS8qIEl0J3MgYmV0dGVyIHRvIGNhbGwgY29tbWl0LWNoYXJnZSBhZnRlciBybWFwIGlzIGVzdGFibGlzaGVkICovCiAJbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihwYWdlLCBwdHIpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDViYzBhOTYuLmY5NjlkYTUgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC0xMjc1LDMzICsxMjc1LDQyIEBACiAJCWNvbnN0IHVuc2lnbmVkIGxvbmcgX191c2VyICosIG5ld19ub2RlcykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpLCAqdGNyZWQ7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlub2RlbWFza190IG9sZDsKLQlub2RlbWFza190IG5ldzsKIAlub2RlbWFza190IHRhc2tfbm9kZXM7CiAJaW50IGVycjsKKwlub2RlbWFza190ICpvbGQ7CisJbm9kZW1hc2tfdCAqbmV3OworCU5PREVNQVNLX1NDUkFUQ0goc2NyYXRjaCk7CiAKLQllcnIgPSBnZXRfbm9kZXMoJm9sZCwgb2xkX25vZGVzLCBtYXhub2RlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSBnZXRfbm9kZXMoJm5ldywgbmV3X25vZGVzLCBtYXhub2RlKTsKKwlvbGQgPSAmc2NyYXRjaC0+bWFzazE7CisJbmV3ID0gJnNjcmF0Y2gtPm1hc2syOworCisJZXJyID0gZ2V0X25vZGVzKG9sZCwgb2xkX25vZGVzLCBtYXhub2RlKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKKworCWVyciA9IGdldF9ub2RlcyhuZXcsIG5ld19ub2RlcywgbWF4bm9kZSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CiAKIAkvKiBGaW5kIHRoZSBtbV9zdHJ1Y3QgKi8KIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCXRhc2sgPSBwaWQgPyBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpIDogY3VycmVudDsKIAlpZiAoIXRhc2spIHsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQlyZXR1cm4gLUVTUkNIOworCQllcnIgPSAtRVNSQ0g7CisJCWdvdG8gb3V0OwogCX0KIAltbSA9IGdldF90YXNrX21tKHRhc2spOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAorCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFtbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBDaGVjayBpZiB0aGlzIHByb2Nlc3MgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHNwZWNpZmllZApAQCAtMTMyMiwxMiArMTMzMSwxMiBAQAogCiAJdGFza19ub2RlcyA9IGNwdXNldF9tZW1zX2FsbG93ZWQodGFzayk7CiAJLyogSXMgdGhlIHVzZXIgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIHRhcmdldCBub2Rlcz8gKi8KLQlpZiAoIW5vZGVzX3N1YnNldChuZXcsIHRhc2tfbm9kZXMpICYmICFjYXBhYmxlKENBUF9TWVNfTklDRSkpIHsKKwlpZiAoIW5vZGVzX3N1YnNldCgqbmV3LCB0YXNrX25vZGVzKSAmJiAhY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7CiAJCWVyciA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFub2Rlc19zdWJzZXQobmV3LCBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSkpIHsKKwlpZiAoIW5vZGVzX3N1YnNldCgqbmV3LCBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSkpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTMzNiwxMCArMTM0NSwxMyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JZXJyID0gZG9fbWlncmF0ZV9wYWdlcyhtbSwgJm9sZCwgJm5ldywKKwllcnIgPSBkb19taWdyYXRlX3BhZ2VzKG1tLCBvbGQsIG5ldywKIAkJY2FwYWJsZShDQVBfU1lTX05JQ0UpID8gTVBPTF9NRl9NT1ZFX0FMTCA6IE1QT0xfTUZfTU9WRSk7CiBvdXQ6Ci0JbW1wdXQobW0pOworCWlmIChtbSkKKwkJbW1wdXQobW0pOworCU5PREVNQVNLX1NDUkFUQ0hfRlJFRShzY3JhdGNoKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3MTIsNiArMTcyNCw1MCBAQAogfQogI2VuZGlmCiAKKy8qCisgKiBtZW1wb2xpY3lfbm9kZW1hc2tfaW50ZXJzZWN0cworICoKKyAqIElmIHRzaydzIG1lbXBvbGljeSBpcyAiZGVmYXVsdCIgW05VTExdLCByZXR1cm4gJ3RydWUnIHRvIGluZGljYXRlIGRlZmF1bHQKKyAqIHBvbGljeS4gIE90aGVyd2lzZSwgY2hlY2sgZm9yIGludGVyc2VjdGlvbiBiZXR3ZWVuIG1hc2sgYW5kIHRoZSBwb2xpY3kKKyAqIG5vZGVtYXNrIGZvciAnYmluZCcgb3IgJ2ludGVybGVhdmUnIHBvbGljeS4gIEZvciAncGVyZmVycmVkJyBvciAnbG9jYWwnCisgKiBwb2xpY3ksIGFsd2F5cyByZXR1cm4gdHJ1ZSBzaW5jZSBpdCBtYXkgYWxsb2NhdGUgZWxzZXdoZXJlIG9uIGZhbGxiYWNrLgorICoKKyAqIFRha2VzIHRhc2tfbG9jayh0c2spIHRvIHByZXZlbnQgZnJlZWluZyBvZiBpdHMgbWVtcG9saWN5LgorICovCitib29sIG1lbXBvbGljeV9ub2RlbWFza19pbnRlcnNlY3RzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQljb25zdCBub2RlbWFza190ICptYXNrKQoreworCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsKKwlib29sIHJldCA9IHRydWU7CisKKwlpZiAoIW1hc2spCisJCXJldHVybiByZXQ7CisJdGFza19sb2NrKHRzayk7CisJbWVtcG9saWN5ID0gdHNrLT5tZW1wb2xpY3k7CisJaWYgKCFtZW1wb2xpY3kpCisJCWdvdG8gb3V0OworCisJc3dpdGNoIChtZW1wb2xpY3ktPm1vZGUpIHsKKwljYXNlIE1QT0xfUFJFRkVSUkVEOgorCQkvKgorCQkgKiBNUE9MX1BSRUZFUlJFRCBhbmQgTVBPTF9GX0xPQ0FMIGFyZSBvbmx5IHByZWZlcnJlZCBub2RlcyB0bworCQkgKiBhbGxvY2F0ZSBmcm9tLCB0aGV5IG1heSBmYWxsYmFjayB0byBvdGhlciBub2RlcyB3aGVuIG9vbS4KKwkJICogVGh1cywgaXQncyBwb3NzaWJsZSBmb3IgdHNrIHRvIGhhdmUgYWxsb2NhdGVkIG1lbW9yeSBmcm9tCisJCSAqIG5vZGVzIGluIG1hc2suCisJCSAqLworCQlicmVhazsKKwljYXNlIE1QT0xfQklORDoKKwljYXNlIE1QT0xfSU5URVJMRUFWRToKKwkJcmV0ID0gbm9kZXNfaW50ZXJzZWN0cyhtZW1wb2xpY3ktPnYubm9kZXMsICptYXNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorb3V0OgorCXRhc2tfdW5sb2NrKHRzayk7CisJcmV0dXJuIHJldDsKK30KKwogLyogQWxsb2NhdGUgYSBwYWdlIGluIGludGVybGVhdmVkIHBvbGljeS4KICAgIE93biBwYXRoIGJlY2F1c2UgaXQgbmVlZHMgdG8gZG8gc3BlY2lhbCBhY2NvdW50aW5nLiAqLwogc3RhdGljIHN0cnVjdCBwYWdlICphbGxvY19wYWdlX2ludGVybGVhdmUoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBvcmRlciwKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0MjA1YjFkLi4zOGU3Y2FkIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC02MzksNyArNjM5LDcgQEAKIAkJCSAqIGV4aXN0IHdoZW4gdGhlIHBhZ2UgaXMgcmVtYXBwZWQgbGF0ZXIKIAkJCSAqLwogCQkJYW5vbl92bWEgPSBwYWdlX2Fub25fdm1hKHBhZ2UpOwotCQkJYXRvbWljX2luYygmYW5vbl92bWEtPmV4dGVybmFsX3JlZmNvdW50KTsKKwkJCWdldF9hbm9uX3ZtYShhbm9uX3ZtYSk7CiAJCX0KIAl9CiAKQEAgLTY4MiwxMiArNjgyLDggQEAKIHJjdV91bmxvY2s6CiAKIAkvKiBEcm9wIGFuIGFub25fdm1hIHJlZmVyZW5jZSBpZiB3ZSB0b29rIG9uZSAqLwotCWlmIChhbm9uX3ZtYSAmJiBhdG9taWNfZGVjX2FuZF9sb2NrKCZhbm9uX3ZtYS0+ZXh0ZXJuYWxfcmVmY291bnQsICZhbm9uX3ZtYS0+bG9jaykpIHsKLQkJaW50IGVtcHR5ID0gbGlzdF9lbXB0eSgmYW5vbl92bWEtPmhlYWQpOwotCQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwotCQlpZiAoZW1wdHkpCi0JCQlhbm9uX3ZtYV9mcmVlKGFub25fdm1hKTsKLQl9CisJaWYgKGFub25fdm1hKQorCQlkcm9wX2Fub25fdm1hKGFub25fdm1hKTsKIAogCWlmIChyY3VfbG9ja2VkKQogCQlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA0NTZlYzZmLi4zMTAwMzMzIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC00NTIsMTIgKzQ1MiwxMCBAQAogCQlzcGluX2xvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIAkJdm1hLT52bV90cnVuY2F0ZV9jb3VudCA9IG1hcHBpbmctPnRydW5jYXRlX2NvdW50OwogCX0KLQlhbm9uX3ZtYV9sb2NrKHZtYSk7CiAKIAlfX3ZtYV9saW5rKG1tLCB2bWEsIHByZXYsIHJiX2xpbmssIHJiX3BhcmVudCk7CiAJX192bWFfbGlua19maWxlKHZtYSk7CiAKLQlhbm9uX3ZtYV91bmxvY2sodm1hKTsKIAlpZiAobWFwcGluZykKIAkJc3Bpbl91bmxvY2soJm1hcHBpbmctPmlfbW1hcF9sb2NrKTsKIApAQCAtNTA2LDYgKzUwNCw3IEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICppbXBvcnRlciA9IE5VTEw7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBOVUxMOwogCXN0cnVjdCBwcmlvX3RyZWVfcm9vdCAqcm9vdCA9IE5VTEw7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IE5VTEw7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSB2bWEtPnZtX2ZpbGU7CiAJbG9uZyBhZGp1c3RfbmV4dCA9IDA7CiAJaW50IHJlbW92ZV9uZXh0ID0gMDsKQEAgLTU3OCw2ICs1NzcsMTcgQEAKIAkJfQogCX0KIAorCS8qCisJICogV2hlbiBjaGFuZ2luZyBvbmx5IHZtYS0+dm1fZW5kLCB3ZSBkb24ndCByZWFsbHkgbmVlZCBhbm9uX3ZtYQorCSAqIGxvY2suIFRoaXMgaXMgYSBmYWlybHkgcmFyZSBjYXNlIGJ5IGl0c2VsZiwgYnV0IHRoZSBhbm9uX3ZtYQorCSAqIGxvY2sgbWF5IGJlIHNoYXJlZCBiZXR3ZWVuIG1hbnkgc2libGluZyBwcm9jZXNzZXMuICBTa2lwcGluZworCSAqIHRoZSBsb2NrIGZvciBicmsgYWRqdXN0bWVudHMgbWFrZXMgYSBkaWZmZXJlbmNlIHNvbWV0aW1lcy4KKwkgKi8KKwlpZiAodm1hLT5hbm9uX3ZtYSAmJiAoaW5zZXJ0IHx8IGltcG9ydGVyIHx8IHN0YXJ0ICE9IHZtYS0+dm1fc3RhcnQpKSB7CisJCWFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKwkJYW5vbl92bWFfbG9jayhhbm9uX3ZtYSk7CisJfQorCiAJaWYgKHJvb3QpIHsKIAkJZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTsKIAkJdm1hX3ByaW9fdHJlZV9yZW1vdmUodm1hLCByb290KTsKQEAgLTYxNyw2ICs2MjcsOCBAQAogCQlfX2luc2VydF92bV9zdHJ1Y3QobW0sIGluc2VydCk7CiAJfQogCisJaWYgKGFub25fdm1hKQorCQlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOwogCWlmIChtYXBwaW5nKQogCQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCkBAIC0xNzEwLDcgKzE3MjIsNyBAQAogCSAqLwogCWlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhbm9uX3ZtYV9sb2NrKHZtYSk7CisJdm1hX2xvY2tfYW5vbl92bWEodm1hKTsKIAogCS8qCiAJICogdm1hLT52bV9zdGFydC92bV9lbmQgY2Fubm90IGNoYW5nZSB1bmRlciB1cyBiZWNhdXNlIHRoZSBjYWxsZXIKQEAgLTE3MjEsNyArMTczMyw3IEBACiAJaWYgKGFkZHJlc3MgPCBQQUdFX0FMSUdOKGFkZHJlc3MrNCkpCiAJCWFkZHJlc3MgPSBQQUdFX0FMSUdOKGFkZHJlc3MrNCk7CiAJZWxzZSB7Ci0JCWFub25fdm1hX3VubG9jayh2bWEpOworCQl2bWFfdW5sb2NrX2Fub25fdm1hKHZtYSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAllcnJvciA9IDA7CkBAIC0xNzM0LDEwICsxNzQ2LDEyIEBACiAJCWdyb3cgPSAoYWRkcmVzcyAtIHZtYS0+dm1fZW5kKSA+PiBQQUdFX1NISUZUOwogCiAJCWVycm9yID0gYWNjdF9zdGFja19ncm93dGgodm1hLCBzaXplLCBncm93KTsKLQkJaWYgKCFlcnJvcikKKwkJaWYgKCFlcnJvcikgewogCQkJdm1hLT52bV9lbmQgPSBhZGRyZXNzOworCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CisJCX0KIAl9Ci0JYW5vbl92bWFfdW5sb2NrKHZtYSk7CisJdm1hX3VubG9ja19hbm9uX3ZtYSh2bWEpOwogCXJldHVybiBlcnJvcjsKIH0KICNlbmRpZiAvKiBDT05GSUdfU1RBQ0tfR1JPV1NVUCB8fCBDT05GSUdfSUE2NCAqLwpAQCAtMTc2Miw3ICsxNzc2LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWFub25fdm1hX2xvY2sodm1hKTsKKwl2bWFfbG9ja19hbm9uX3ZtYSh2bWEpOwogCiAJLyoKIAkgKiB2bWEtPnZtX3N0YXJ0L3ZtX2VuZCBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2UgdGhlIGNhbGxlcgpAQCAtMTc4MSw5ICsxNzk1LDEwIEBACiAJCWlmICghZXJyb3IpIHsKIAkJCXZtYS0+dm1fc3RhcnQgPSBhZGRyZXNzOwogCQkJdm1hLT52bV9wZ29mZiAtPSBncm93OworCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CiAJCX0KIAl9Ci0JYW5vbl92bWFfdW5sb2NrKHZtYSk7CisJdm1hX3VubG9ja19hbm9uX3ZtYSh2bWEpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjIwOCw2ICsyMjIzLDcgQEAKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3QoZmxhZ3MpOwogCXZtYV9saW5rKG1tLCB2bWEsIHByZXYsIHJiX2xpbmssIHJiX3BhcmVudCk7CiBvdXQ6CisJcGVyZl9ldmVudF9tbWFwKHZtYSk7CiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCWlmIChmbGFncyAmIFZNX0xPQ0tFRCkgewogCQlpZiAoIW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pKQpAQCAtMjQ2NiwyMyArMjQ4MiwyMyBAQAogCiBzdGF0aWMgdm9pZCB2bV9sb2NrX2Fub25fdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQogewotCWlmICghdGVzdF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKikgJmFub25fdm1hLT5oZWFkLm5leHQpKSB7CisJaWYgKCF0ZXN0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSAmYW5vbl92bWEtPnJvb3QtPmhlYWQubmV4dCkpIHsKIAkJLyoKIAkJICogVGhlIExTQiBvZiBoZWFkLm5leHQgY2FuJ3QgY2hhbmdlIGZyb20gdW5kZXIgdXMKIAkJICogYmVjYXVzZSB3ZSBob2xkIHRoZSBtbV9hbGxfbG9ja3NfbXV0ZXguCiAJCSAqLwotCQlzcGluX2xvY2tfbmVzdF9sb2NrKCZhbm9uX3ZtYS0+bG9jaywgJm1tLT5tbWFwX3NlbSk7CisJCXNwaW5fbG9ja19uZXN0X2xvY2soJmFub25fdm1hLT5yb290LT5sb2NrLCAmbW0tPm1tYXBfc2VtKTsKIAkJLyoKIAkJICogV2UgY2FuIHNhZmVseSBtb2RpZnkgaGVhZC5uZXh0IGFmdGVyIHRha2luZyB0aGUKLQkJICogYW5vbl92bWEtPmxvY2suIElmIHNvbWUgb3RoZXIgdm1hIGluIHRoaXMgbW0gc2hhcmVzCisJCSAqIGFub25fdm1hLT5yb290LT5sb2NrLiBJZiBzb21lIG90aGVyIHZtYSBpbiB0aGlzIG1tIHNoYXJlcwogCQkgKiB0aGUgc2FtZSBhbm9uX3ZtYSB3ZSB3b24ndCB0YWtlIGl0IGFnYWluLgogCQkgKgogCQkgKiBObyBuZWVkIG9mIGF0b21pYyBpbnN0cnVjdGlvbnMgaGVyZSwgaGVhZC5uZXh0CiAJCSAqIGNhbid0IGNoYW5nZSBmcm9tIHVuZGVyIHVzIHRoYW5rcyB0byB0aGUKLQkJICogYW5vbl92bWEtPmxvY2suCisJCSAqIGFub25fdm1hLT5yb290LT5sb2NrLgogCQkgKi8KIAkJaWYgKF9fdGVzdF9hbmRfc2V0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKQotCQkJCSAgICAgICAmYW5vbl92bWEtPmhlYWQubmV4dCkpCisJCQkJICAgICAgICZhbm9uX3ZtYS0+cm9vdC0+aGVhZC5uZXh0KSkKIAkJCUJVRygpOwogCX0KIH0KQEAgLTI1NzMsNyArMjU4OSw3IEBACiAKIHN0YXRpYyB2b2lkIHZtX3VubG9ja19hbm9uX3ZtYShzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hKQogewotCWlmICh0ZXN0X2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKSAmYW5vbl92bWEtPmhlYWQubmV4dCkpIHsKKwlpZiAodGVzdF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKikgJmFub25fdm1hLT5yb290LT5oZWFkLm5leHQpKSB7CiAJCS8qCiAJCSAqIFRoZSBMU0Igb2YgaGVhZC5uZXh0IGNhbid0IGNoYW5nZSB0byAwIGZyb20gdW5kZXIKIAkJICogdXMgYmVjYXVzZSB3ZSBob2xkIHRoZSBtbV9hbGxfbG9ja3NfbXV0ZXguCkBAIC0yNTg0LDEyICsyNjAwLDEyIEBACiAJCSAqCiAJCSAqIE5vIG5lZWQgb2YgYXRvbWljIGluc3RydWN0aW9ucyBoZXJlLCBoZWFkLm5leHQKIAkJICogY2FuJ3QgY2hhbmdlIGZyb20gdW5kZXIgdXMgdW50aWwgd2UgcmVsZWFzZSB0aGUKLQkJICogYW5vbl92bWEtPmxvY2suCisJCSAqIGFub25fdm1hLT5yb290LT5sb2NrLgogCQkgKi8KIAkJaWYgKCFfX3Rlc3RfYW5kX2NsZWFyX2JpdCgwLCAodW5zaWduZWQgbG9uZyAqKQotCQkJCQkgICZhbm9uX3ZtYS0+aGVhZC5uZXh0KSkKKwkJCQkJICAmYW5vbl92bWEtPnJvb3QtPmhlYWQubmV4dCkpCiAJCQlCVUcoKTsKLQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJYW5vbl92bWFfdW5sb2NrKGFub25fdm1hKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IDcwOWFlZGYuLjUwMTRlNTAgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtNCw2ICs0LDggQEAKICAqICBDb3B5cmlnaHQgKEMpICAxOTk4LDIwMDAgIFJpayB2YW4gUmllbAogICoJVGhhbmtzIGdvIG91dCB0byBDbGF1cyBGaXNjaGVyIGZvciBzb21lIHNlcmlvdXMgaW5zcGlyYXRpb24gYW5kCiAgKglmb3IgZ29hZGluZyBtZSBpbnRvIGNvZGluZyB0aGlzIGZpbGUuLi4KKyAqICBDb3B5cmlnaHQgKEMpICAyMDEwICBHb29nbGUsIEluYy4KKyAqCVJld3JpdHRlbiBieSBEYXZpZCBSaWVudGplcwogICoKICAqICBUaGUgcm91dGluZXMgaW4gdGhpcyBmaWxlIGFyZSB1c2VkIHRvIGtpbGwgYSBwcm9jZXNzIHdoZW4KICAqICB3ZSdyZSBzZXJpb3VzbHkgb3V0IG9mIG1lbW9yeS4gVGhpcyBnZXRzIGNhbGxlZCBmcm9tIF9fYWxsb2NfcGFnZXMoKQpAQCAtMjcsMTcxICsyOSwxODggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWNvbnRyb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb2xpY3kuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCiBpbnQgc3lzY3RsX3BhbmljX29uX29vbTsKIGludCBzeXNjdGxfb29tX2tpbGxfYWxsb2NhdGluZ190YXNrOwotaW50IHN5c2N0bF9vb21fZHVtcF90YXNrczsKK2ludCBzeXNjdGxfb29tX2R1bXBfdGFza3MgPSAxOwogc3RhdGljIERFRklORV9TUElOTE9DSyh6b25lX3NjYW5fbG9jayk7Ci0vKiAjZGVmaW5lIERFQlVHICovCisKKyNpZmRlZiBDT05GSUdfTlVNQQorLyoqCisgKiBoYXNfaW50ZXJzZWN0c19tZW1zX2FsbG93ZWQoKSAtIGNoZWNrIHRhc2sgZWxpZ2libGl0eSBmb3Iga2lsbAorICogQHRzazogdGFzayBzdHJ1Y3Qgb2Ygd2hpY2ggdGFzayB0byBjb25zaWRlcgorICogQG1hc2s6IG5vZGVtYXNrIHBhc3NlZCB0byBwYWdlIGFsbG9jYXRvciBmb3IgbWVtcG9saWN5IG9vbXMKKyAqCisgKiBUYXNrIGVsaWdpYmlsaXR5IGlzIGRldGVybWluZWQgYnkgd2hldGhlciBvciBub3QgYSBjYW5kaWRhdGUgdGFzaywgQHRzaywKKyAqIHNoYXJlcyB0aGUgc2FtZSBtZW1wb2xpY3kgbm9kZXMgYXMgY3VycmVudCBpZiBpdCBpcyBib3VuZCBieSBzdWNoIGEgcG9saWN5CisgKiBhbmQgd2hldGhlciBvciBub3QgaXQgaGFzIHRoZSBzYW1lIHNldCBvZiBhbGxvd2VkIGNwdXNldCBub2Rlcy4KKyAqLworc3RhdGljIGJvb2wgaGFzX2ludGVyc2VjdHNfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQljb25zdCBub2RlbWFza190ICptYXNrKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQgPSB0c2s7CisKKwlkbyB7CisJCWlmIChtYXNrKSB7CisJCQkvKgorCQkJICogSWYgdGhpcyBpcyBhIG1lbXBvbGljeSBjb25zdHJhaW5lZCBvb20sIHRzaydzCisJCQkgKiBjcHVzZXQgaXMgaXJyZWxldmFudC4gIE9ubHkgcmV0dXJuIHRydWUgaWYgaXRzCisJCQkgKiBtZW1wb2xpY3kgaW50ZXJzZWN0cyBjdXJyZW50LCBvdGhlcndpc2UgaXQgbWF5IGJlCisJCQkgKiBuZWVkbGVzc2x5IGtpbGxlZC4KKwkJCSAqLworCQkJaWYgKG1lbXBvbGljeV9ub2RlbWFza19pbnRlcnNlY3RzKHRzaywgbWFzaykpCisJCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBub3QgYSBtZW1wb2xpY3kgY29uc3RyYWluZWQgb29tLCBzbyBvbmx5CisJCQkgKiBjaGVjayB0aGUgbWVtcyBvZiB0c2sncyBjcHVzZXQuCisJCQkgKi8KKwkJCWlmIChjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY3VycmVudCwgdHNrKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0gd2hpbGVfZWFjaF90aHJlYWQoc3RhcnQsIHRzayk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisjZWxzZQorc3RhdGljIGJvb2wgaGFzX2ludGVyc2VjdHNfbWVtc19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQljb25zdCBub2RlbWFza190ICptYXNrKQoreworCXJldHVybiB0cnVlOworfQorI2VuZGlmIC8qIENPTkZJR19OVU1BICovCiAKIC8qCi0gKiBJcyBhbGwgdGhyZWFkcyBvZiB0aGUgdGFyZ2V0IHByb2Nlc3Mgbm9kZXMgb3ZlcmxhcCBvdXJzPworICogSWYgdGhpcyBpcyBhIHN5c3RlbSBPT00gKG5vdCBhIG1lbWNnIE9PTSkgYW5kIHRoZSB0YXNrIHNlbGVjdGVkIHRvIGJlCisgKiBraWxsZWQgaXMgbm90IGFscmVhZHkgcnVubmluZyBhdCBoaWdoIChSVCkgcHJpb3JpdGllcywgc3BlZWQgdXAgdGhlCisgKiByZWNvdmVyeSBieSBib29zdGluZyB0aGUgZHlpbmcgdGFzayB0byB0aGUgbG93ZXN0IEZJRk8gcHJpb3JpdHkuCisgKiBUaGF0IGhlbHBzIHdpdGggdGhlIHJlY292ZXJ5IGFuZCBhdm9pZHMgaW50ZXJmZXJpbmcgd2l0aCBSVCB0YXNrcy4KICAqLwotc3RhdGljIGludCBoYXNfaW50ZXJzZWN0c19tZW1zX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZCBib29zdF9keWluZ190YXNrX3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0geyAuc2NoZWRfcHJpb3JpdHkgPSAxIH07CiAKLQl0ID0gdHNrOworCWlmIChtZW0pCisJCXJldHVybjsKKworCWlmICghcnRfdGFzayhwKSkKKwkJc2NoZWRfc2V0c2NoZWR1bGVyX25vY2hlY2socCwgU0NIRURfRklGTywgJnBhcmFtKTsKK30KKworLyoKKyAqIFRoZSBwcm9jZXNzIHAgbWF5IGhhdmUgZGV0YWNoZWQgaXRzIG93biAtPm1tIHdoaWxlIGV4aXRpbmcgb3IgdGhyb3VnaAorICogdXNlX21tKCksIGJ1dCBvbmUgb3IgbW9yZSBvZiBpdHMgc3VidGhyZWFkcyBtYXkgc3RpbGwgaGF2ZSBhIHZhbGlkCisgKiBwb2ludGVyLiAgUmV0dXJuIHAsIG9yIGFueSBvZiBpdHMgc3VidGhyZWFkcyB3aXRoIGEgdmFsaWQgLT5tbSwgd2l0aAorICogdGFza19sb2NrKCkgaGVsZC4KKyAqLworc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2xvY2tfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0ID0gcDsKKwogCWRvIHsKLQkJaWYgKGNwdXNldF9tZW1zX2FsbG93ZWRfaW50ZXJzZWN0cyhjdXJyZW50LCB0KSkKLQkJCXJldHVybiAxOwotCQl0ID0gbmV4dF90aHJlYWQodCk7Ci0JfSB3aGlsZSAodCAhPSB0c2spOworCQl0YXNrX2xvY2sodCk7CisJCWlmIChsaWtlbHkodC0+bW0pKQorCQkJcmV0dXJuIHQ7CisJCXRhc2tfdW5sb2NrKHQpOworCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgdCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIHRydWUgaWYgdGhlIHRhc2sgaXMgbm90IGFkZXF1YXRlIGFzIGNhbmRpZGF0ZSB2aWN0aW0gdGFzay4gKi8KK3N0YXRpYyBib29sIG9vbV91bmtpbGxhYmxlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkJICAgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2spCit7CisJaWYgKGlzX2dsb2JhbF9pbml0KHApKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAocC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIFdoZW4gbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KCkgYW5kIHAgaXMgbm90IG1lbWJlciBvZiB0aGUgZ3JvdXAgKi8KKwlpZiAobWVtICYmICF0YXNrX2luX21lbV9jZ3JvdXAocCwgbWVtKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBwIG1heSBub3QgaGF2ZSBmcmVlYWJsZSBtZW1vcnkgaW4gbm9kZW1hc2sgKi8KKwlpZiAoIWhhc19pbnRlcnNlY3RzX21lbXNfYWxsb3dlZChwLCBub2RlbWFzaykpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKLSAqIGJhZG5lc3MgLSBjYWxjdWxhdGUgYSBudW1lcmljIHZhbHVlIGZvciBob3cgYmFkIHRoaXMgdGFzayBoYXMgYmVlbgorICogb29tX2JhZG5lc3MgLSBoZXVyaXN0aWMgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGNhbmRpZGF0ZSB0YXNrIHRvIGtpbGwKICAqIEBwOiB0YXNrIHN0cnVjdCBvZiB3aGljaCB0YXNrIHdlIHNob3VsZCBjYWxjdWxhdGUKLSAqIEB1cHRpbWU6IGN1cnJlbnQgdXB0aW1lIGluIHNlY29uZHMKKyAqIEB0b3RhbHBhZ2VzOiB0b3RhbCBwcmVzZW50IFJBTSBhbGxvd2VkIGZvciBwYWdlIGFsbG9jYXRpb24KICAqCi0gKiBUaGUgZm9ybXVsYSB1c2VkIGlzIHJlbGF0aXZlbHkgc2ltcGxlIGFuZCBkb2N1bWVudGVkIGlubGluZSBpbiB0aGUKLSAqIGZ1bmN0aW9uLiBUaGUgbWFpbiByYXRpb25hbGUgaXMgdGhhdCB3ZSB3YW50IHRvIHNlbGVjdCBhIGdvb2QgdGFzawotICogdG8ga2lsbCB3aGVuIHdlIHJ1biBvdXQgb2YgbWVtb3J5LgotICoKLSAqIEdvb2QgaW4gdGhpcyBjb250ZXh0IG1lYW5zIHRoYXQ6Ci0gKiAxKSB3ZSBsb3NlIHRoZSBtaW5pbXVtIGFtb3VudCBvZiB3b3JrIGRvbmUKLSAqIDIpIHdlIHJlY292ZXIgYSBsYXJnZSBhbW91bnQgb2YgbWVtb3J5Ci0gKiAzKSB3ZSBkb24ndCBraWxsIGFueXRoaW5nIGlubm9jZW50IG9mIGVhdGluZyB0b25zIG9mIG1lbW9yeQotICogNCkgd2Ugd2FudCB0byBraWxsIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBwcm9jZXNzZXMgKG9uZSkKLSAqIDUpIHdlIHRyeSB0byBraWxsIHRoZSBwcm9jZXNzIHRoZSB1c2VyIGV4cGVjdHMgdXMgdG8ga2lsbCwgdGhpcwotICogICAgYWxnb3JpdGhtIGhhcyBiZWVuIG1ldGljdWxvdXNseSB0dW5lZCB0byBtZWV0IHRoZSBwcmluY2lwbGUKLSAqICAgIG9mIGxlYXN0IHN1cnByaXNlIC4uLiAoYmUgY2FyZWZ1bCB3aGVuIHlvdSBjaGFuZ2UgaXQpCisgKiBUaGUgaGV1cmlzdGljIGZvciBkZXRlcm1pbmluZyB3aGljaCB0YXNrIHRvIGtpbGwgaXMgbWFkZSB0byBiZSBhcyBzaW1wbGUgYW5kCisgKiBwcmVkaWN0YWJsZSBhcyBwb3NzaWJsZS4gIFRoZSBnb2FsIGlzIHRvIHJldHVybiB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlCisgKiB0YXNrIGNvbnN1bWluZyB0aGUgbW9zdCBtZW1vcnkgdG8gYXZvaWQgc3Vic2VxdWVudCBvb20gZmFpbHVyZXMuCiAgKi8KLQotdW5zaWduZWQgbG9uZyBiYWRuZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyB1cHRpbWUpCit1bnNpZ25lZCBpbnQgb29tX2JhZG5lc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQkgICAgICBjb25zdCBub2RlbWFza190ICpub2RlbWFzaywgdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzKQogewotCXVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjcHVfdGltZSwgcnVuX3RpbWU7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZDsKLQlpbnQgb29tX2FkaiA9IHAtPnNpZ25hbC0+b29tX2FkajsKLQlzdHJ1Y3QgdGFza19jcHV0aW1lIHRhc2tfdGltZTsKLQl1bnNpZ25lZCBsb25nIHV0aW1lOwotCXVuc2lnbmVkIGxvbmcgc3RpbWU7CisJaW50IHBvaW50czsKIAotCWlmIChvb21fYWRqID09IE9PTV9ESVNBQkxFKQorCWlmIChvb21fdW5raWxsYWJsZV90YXNrKHAsIG1lbSwgbm9kZW1hc2spKQogCQlyZXR1cm4gMDsKIAotCXRhc2tfbG9jayhwKTsKLQltbSA9IHAtPm1tOwotCWlmICghbW0pIHsKKwlwID0gZmluZF9sb2NrX3Rhc2tfbW0ocCk7CisJaWYgKCFwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogU2hvcnRjdXQgY2hlY2sgZm9yIE9PTV9TQ09SRV9BREpfTUlOIHNvIHRoZSBlbnRpcmUgaGV1cmlzdGljIGRvZXNuJ3QKKwkgKiBuZWVkIHRvIGJlIGV4ZWN1dGVkIGZvciBzb21ldGhpbmcgdGhhdCBjYW5ub3QgYmUga2lsbGVkLgorCSAqLworCWlmIChwLT5zaWduYWwtPm9vbV9zY29yZV9hZGogPT0gT09NX1NDT1JFX0FESl9NSU4pIHsKIAkJdGFza191bmxvY2socCk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qCi0JICogVGhlIG1lbW9yeSBzaXplIG9mIHRoZSBwcm9jZXNzIGlzIHRoZSBiYXNpcyBmb3IgdGhlIGJhZG5lc3MuCisJICogV2hlbiB0aGUgUEZfT09NX09SSUdJTiBiaXQgaXMgc2V0LCBpdCBpbmRpY2F0ZXMgdGhlIHRhc2sgc2hvdWxkIGhhdmUKKwkgKiBwcmlvcml0eSBmb3Igb29tIGtpbGxpbmcuCiAJICovCi0JcG9pbnRzID0gbW0tPnRvdGFsX3ZtOworCWlmIChwLT5mbGFncyAmIFBGX09PTV9PUklHSU4pIHsKKwkJdGFza191bmxvY2socCk7CisJCXJldHVybiAxMDAwOworCX0KIAogCS8qCi0JICogQWZ0ZXIgdGhpcyB1bmxvY2sgd2UgY2FuIG5vIGxvbmdlciBkZXJlZmVyZW5jZSBsb2NhbCB2YXJpYWJsZSBgbW0nCisJICogVGhlIG1lbW9yeSBjb250cm9sbGVyIG1heSBoYXZlIGEgbGltaXQgb2YgMCBieXRlcywgc28gYXZvaWQgYSBkaXZpZGUKKwkgKiBieSB6ZXJvLCBpZiBuZWNlc3NhcnkuCiAJICovCisJaWYgKCF0b3RhbHBhZ2VzKQorCQl0b3RhbHBhZ2VzID0gMTsKKworCS8qCisJICogVGhlIGJhc2VsaW5lIGZvciB0aGUgYmFkbmVzcyBzY29yZSBpcyB0aGUgcHJvcG9ydGlvbiBvZiBSQU0gdGhhdCBlYWNoCisJICogdGFzaydzIHJzcyBhbmQgc3dhcCBzcGFjZSB1c2UuCisJICovCisJcG9pbnRzID0gKGdldF9tbV9yc3MocC0+bW0pICsgZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX1NXQVBFTlRTKSkgKiAxMDAwIC8KKwkJCXRvdGFscGFnZXM7CiAJdGFza191bmxvY2socCk7CiAKIAkvKgotCSAqIHN3YXBvZmYgY2FuIGVhc2lseSB1c2UgdXAgYWxsIG1lbW9yeSwgc28ga2lsbCB0aG9zZSBmaXJzdC4KKwkgKiBSb290IHByb2Nlc3NlcyBnZXQgMyUgYm9udXMsIGp1c3QgbGlrZSB0aGUgX192bV9lbm91Z2hfbWVtb3J5KCkKKwkgKiBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IExTTXMuCiAJICovCi0JaWYgKHAtPmZsYWdzICYgUEZfT09NX09SSUdJTikKLQkJcmV0dXJuIFVMT05HX01BWDsKKwlpZiAoaGFzX2NhcGFiaWxpdHlfbm9hdWRpdChwLCBDQVBfU1lTX0FETUlOKSkKKwkJcG9pbnRzIC09IDMwOwogCiAJLyoKLQkgKiBQcm9jZXNzZXMgd2hpY2ggZm9yayBhIGxvdCBvZiBjaGlsZCBwcm9jZXNzZXMgYXJlIGxpa2VseQotCSAqIGEgZ29vZCBjaG9pY2UuIFdlIGFkZCBoYWxmIHRoZSB2bXNpemUgb2YgdGhlIGNoaWxkcmVuIGlmIHRoZXkKLQkgKiBoYXZlIGFuIG93biBtbS4gVGhpcyBwcmV2ZW50cyBmb3JraW5nIHNlcnZlcnMgdG8gZmxvb2QgdGhlCi0JICogbWFjaGluZSB3aXRoIGFuIGVuZGxlc3MgYW1vdW50IG9mIGNoaWxkcmVuLiBJbiBjYXNlIGEgc2luZ2xlCi0JICogY2hpbGQgaXMgZWF0aW5nIHRoZSB2YXN0IG1ham9yaXR5IG9mIG1lbW9yeSwgYWRkaW5nIG9ubHkgaGFsZgotCSAqIHRvIHRoZSBwYXJlbnRzIHdpbGwgbWFrZSB0aGUgY2hpbGQgb3VyIGtpbGwgY2FuZGlkYXRlIG9mIGNob2ljZS4KKwkgKiAvcHJvYy9waWQvb29tX3Njb3JlX2FkaiByYW5nZXMgZnJvbSAtMTAwMCB0byArMTAwMCBzdWNoIHRoYXQgaXQgbWF5CisJICogZWl0aGVyIGNvbXBsZXRlbHkgZGlzYWJsZSBvb20ga2lsbGluZyBvciBhbHdheXMgcHJlZmVyIGEgY2VydGFpbgorCSAqIHRhc2suCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnAtPmNoaWxkcmVuLCBzaWJsaW5nKSB7Ci0JCXRhc2tfbG9jayhjaGlsZCk7Ci0JCWlmIChjaGlsZC0+bW0gIT0gbW0gJiYgY2hpbGQtPm1tKQotCQkJcG9pbnRzICs9IGNoaWxkLT5tbS0+dG90YWxfdm0vMiArIDE7Ci0JCXRhc2tfdW5sb2NrKGNoaWxkKTsKLQl9CisJcG9pbnRzICs9IHAtPnNpZ25hbC0+b29tX3Njb3JlX2FkajsKIAotCS8qCi0JICogQ1BVIHRpbWUgaXMgaW4gdGVucyBvZiBzZWNvbmRzIGFuZCBydW4gdGltZSBpcyBpbiB0aG91c2FuZHMKLSAgICAgICAgICogb2Ygc2Vjb25kcy4gVGhlcmUgaXMgbm8gcGFydGljdWxhciByZWFzb24gZm9yIHRoaXMgb3RoZXIgdGhhbgotICAgICAgICAgKiB0aGF0IGl0IHR1cm5lZCBvdXQgdG8gd29yayB2ZXJ5IHdlbGwgaW4gcHJhY3RpY2UuCi0JICovCi0JdGhyZWFkX2dyb3VwX2NwdXRpbWUocCwgJnRhc2tfdGltZSk7Ci0JdXRpbWUgPSBjcHV0aW1lX3RvX2ppZmZpZXModGFza190aW1lLnV0aW1lKTsKLQlzdGltZSA9IGNwdXRpbWVfdG9famlmZmllcyh0YXNrX3RpbWUuc3RpbWUpOwotCWNwdV90aW1lID0gKHV0aW1lICsgc3RpbWUpID4+IChTSElGVF9IWiArIDMpOwotCi0KLQlpZiAodXB0aW1lID49IHAtPnN0YXJ0X3RpbWUudHZfc2VjKQotCQlydW5fdGltZSA9ICh1cHRpbWUgLSBwLT5zdGFydF90aW1lLnR2X3NlYykgPj4gMTA7Ci0JZWxzZQotCQlydW5fdGltZSA9IDA7Ci0KLQlpZiAoY3B1X3RpbWUpCi0JCXBvaW50cyAvPSBpbnRfc3FydChjcHVfdGltZSk7Ci0JaWYgKHJ1bl90aW1lKQotCQlwb2ludHMgLz0gaW50X3NxcnQoaW50X3NxcnQocnVuX3RpbWUpKTsKLQotCS8qCi0JICogTmljZWQgcHJvY2Vzc2VzIGFyZSBtb3N0IGxpa2VseSBsZXNzIGltcG9ydGFudCwgc28gZG91YmxlCi0JICogdGhlaXIgYmFkbmVzcyBwb2ludHMuCi0JICovCi0JaWYgKHRhc2tfbmljZShwKSA+IDApCi0JCXBvaW50cyAqPSAyOwotCi0JLyoKLQkgKiBTdXBlcnVzZXIgcHJvY2Vzc2VzIGFyZSB1c3VhbGx5IG1vcmUgaW1wb3J0YW50LCBzbyB3ZSBtYWtlIGl0Ci0JICogbGVzcyBsaWtlbHkgdGhhdCB3ZSBraWxsIHRob3NlLgotCSAqLwotCWlmIChoYXNfY2FwYWJpbGl0eV9ub2F1ZGl0KHAsIENBUF9TWVNfQURNSU4pIHx8Ci0JICAgIGhhc19jYXBhYmlsaXR5X25vYXVkaXQocCwgQ0FQX1NZU19SRVNPVVJDRSkpCi0JCXBvaW50cyAvPSA0OwotCi0JLyoKLQkgKiBXZSBkb24ndCB3YW50IHRvIGtpbGwgYSBwcm9jZXNzIHdpdGggZGlyZWN0IGhhcmR3YXJlIGFjY2Vzcy4KLQkgKiBOb3Qgb25seSBjb3VsZCB0aGF0IG1lc3MgdXAgdGhlIGhhcmR3YXJlLCBidXQgdXN1YWxseSB1c2VycwotCSAqIHRlbmQgdG8gb25seSBoYXZlIHRoaXMgZmxhZyBzZXQgb24gYXBwbGljYXRpb25zIHRoZXkgdGhpbmsKLQkgKiBvZiBhcyBpbXBvcnRhbnQuCi0JICovCi0JaWYgKGhhc19jYXBhYmlsaXR5X25vYXVkaXQocCwgQ0FQX1NZU19SQVdJTykpCi0JCXBvaW50cyAvPSA0OwotCi0JLyoKLQkgKiBJZiBwJ3Mgbm9kZXMgZG9uJ3Qgb3ZlcmxhcCBvdXJzLCBpdCBtYXkgc3RpbGwgaGVscCB0byBraWxsIHAKLQkgKiBiZWNhdXNlIHAgbWF5IGhhdmUgYWxsb2NhdGVkIG9yIG90aGVyd2lzZSBtYXBwZWQgbWVtb3J5IG9uCi0JICogdGhpcyBub2RlIGJlZm9yZS4gSG93ZXZlciBpdCB3aWxsIGJlIGxlc3MgbGlrZWx5LgotCSAqLwotCWlmICghaGFzX2ludGVyc2VjdHNfbWVtc19hbGxvd2VkKHApKQotCQlwb2ludHMgLz0gODsKLQotCS8qCi0JICogQWRqdXN0IHRoZSBzY29yZSBieSBvb21fYWRqLgotCSAqLwotCWlmIChvb21fYWRqKSB7Ci0JCWlmIChvb21fYWRqID4gMCkgewotCQkJaWYgKCFwb2ludHMpCi0JCQkJcG9pbnRzID0gMTsKLQkJCXBvaW50cyA8PD0gb29tX2FkajsKLQkJfSBlbHNlCi0JCQlwb2ludHMgPj49IC0ob29tX2Fkaik7Ci0JfQotCi0jaWZkZWYgREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiT09Na2lsbDogdGFzayAlZCAoJXMpIGdvdCAlbHUgcG9pbnRzXG4iLAotCXAtPnBpZCwgcC0+Y29tbSwgcG9pbnRzKTsKLSNlbmRpZgotCXJldHVybiBwb2ludHM7CisJaWYgKHBvaW50cyA8IDApCisJCXJldHVybiAwOworCXJldHVybiAocG9pbnRzIDwgMTAwMCkgPyBwb2ludHMgOiAxMDAwOwogfQogCiAvKgpAQCAtMTk5LDEyICsyMTgsMjAgQEAKICAqLwogI2lmZGVmIENPTkZJR19OVU1BCiBzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LAotCQkJCSAgICBnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2spCisJCQkJZ2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm5vZGVtYXNrLAorCQkJCXVuc2lnbmVkIGxvbmcgKnRvdGFscGFnZXMpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJc3RydWN0IHpvbmVyZWYgKno7CiAJZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spOworCWJvb2wgY3B1c2V0X2xpbWl0ZWQgPSBmYWxzZTsKKwlpbnQgbmlkOwogCisJLyogRGVmYXVsdCB0byBhbGwgYXZhaWxhYmxlIG1lbW9yeSAqLworCSp0b3RhbHBhZ2VzID0gdG90YWxyYW1fcGFnZXMgKyB0b3RhbF9zd2FwX3BhZ2VzOworCisJaWYgKCF6b25lbGlzdCkKKwkJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKIAkvKgogCSAqIFJlYWNoIGhlcmUgb25seSB3aGVuIF9fR0ZQX05PRkFJTCBpcyB1c2VkLiBTbywgd2Ugc2hvdWxkIGF2b2lkCiAJICogdG8ga2lsbCBjdXJyZW50LldlIGhhdmUgdG8gcmFuZG9tIHRhc2sga2lsbCBpbiB0aGlzIGNhc2UuCkBAIC0yMTQsMjYgKzI0MSwzNyBAQAogCQlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwogCiAJLyoKLQkgKiBUaGUgbm9kZW1hc2sgaGVyZSBpcyBhIG5vZGVtYXNrIHBhc3NlZCB0byBhbGxvY19wYWdlcygpLiBOb3csCi0JICogY3B1c2V0IGRvZXNuJ3QgdXNlIHRoaXMgbm9kZW1hc2sgZm9yIGl0cyBoYXJkd2FsbC9zb2Z0d2FsbC9oaWVyYXJjaHkKLQkgKiBmZWF0dXJlLiBtZW1wb2xpY3kgaXMgYW4gb25seSB1c2VyIG9mIG5vZGVtYXNrIGhlcmUuCi0JICogY2hlY2sgbWVtcG9saWN5J3Mgbm9kZW1hc2sgY29udGFpbnMgYWxsIE5fSElHSF9NRU1PUlkKKwkgKiBUaGlzIGlzIG5vdCBhIF9fR0ZQX1RISVNOT0RFIGFsbG9jYXRpb24sIHNvIGEgdHJ1bmNhdGVkIG5vZGVtYXNrIGluCisJICogdGhlIHBhZ2UgYWxsb2NhdG9yIG1lYW5zIGEgbWVtcG9saWN5IGlzIGluIGVmZmVjdC4gIENwdXNldCBwb2xpY3kKKwkgKiBpcyBlbmZvcmNlZCBpbiBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KCkuCiAJICovCi0JaWYgKG5vZGVtYXNrICYmICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0sICpub2RlbWFzaykpCisJaWYgKG5vZGVtYXNrICYmICFub2Rlc19zdWJzZXQobm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV0sICpub2RlbWFzaykpIHsKKwkJKnRvdGFscGFnZXMgPSB0b3RhbF9zd2FwX3BhZ2VzOworCQlmb3JfZWFjaF9ub2RlX21hc2sobmlkLCAqbm9kZW1hc2spCisJCQkqdG90YWxwYWdlcyArPSBub2RlX3NwYW5uZWRfcGFnZXMobmlkKTsKIAkJcmV0dXJuIENPTlNUUkFJTlRfTUVNT1JZX1BPTElDWTsKKwl9CiAKIAkvKiBDaGVjayB0aGlzIGFsbG9jYXRpb24gZmFpbHVyZSBpcyBjYXVzZWQgYnkgY3B1c2V0J3Mgd2FsbCBmdW5jdGlvbiAqLwogCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsCiAJCQloaWdoX3pvbmVpZHgsIG5vZGVtYXNrKQogCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoem9uZSwgZ2ZwX21hc2spKQotCQkJcmV0dXJuIENPTlNUUkFJTlRfQ1BVU0VUOworCQkJY3B1c2V0X2xpbWl0ZWQgPSB0cnVlOwogCisJaWYgKGNwdXNldF9saW1pdGVkKSB7CisJCSp0b3RhbHBhZ2VzID0gdG90YWxfc3dhcF9wYWdlczsKKwkJZm9yX2VhY2hfbm9kZV9tYXNrKG5pZCwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKQorCQkJKnRvdGFscGFnZXMgKz0gbm9kZV9zcGFubmVkX3BhZ2VzKG5pZCk7CisJCXJldHVybiBDT05TVFJBSU5UX0NQVVNFVDsKKwl9CiAJcmV0dXJuIENPTlNUUkFJTlRfTk9ORTsKIH0KICNlbHNlCiBzdGF0aWMgZW51bSBvb21fY29uc3RyYWludCBjb25zdHJhaW5lZF9hbGxvYyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LAotCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaykKKwkJCQlnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2ssCisJCQkJdW5zaWduZWQgbG9uZyAqdG90YWxwYWdlcykKIHsKKwkqdG90YWxwYWdlcyA9IHRvdGFscmFtX3BhZ2VzICsgdG90YWxfc3dhcF9wYWdlczsKIAlyZXR1cm4gQ09OU1RSQUlOVF9OT05FOwogfQogI2VuZGlmCkBAIC0yNDQsMjggKzI4MiwxOCBAQAogICoKICAqIChub3QgZG9jYm9va2VkLCB3ZSBkb24ndCB3YW50IHRoaXMgb25lIGNsdXR0ZXJpbmcgdXAgdGhlIG1hbnVhbCkKICAqLwotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc2VsZWN0X2JhZF9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgKnBwb2ludHMsCi0JCQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqc2VsZWN0X2JhZF9wcm9jZXNzKHVuc2lnbmVkIGludCAqcHBvaW50cywKKwkJdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAorCQljb25zdCBub2RlbWFza190ICpub2RlbWFzaykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjaG9zZW4gPSBOVUxMOwotCXN0cnVjdCB0aW1lc3BlYyB1cHRpbWU7CiAJKnBwb2ludHMgPSAwOwogCi0JZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CiAJZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcG9pbnRzOworCQl1bnNpZ25lZCBpbnQgcG9pbnRzOwogCi0JCS8qCi0JCSAqIHNraXAga2VybmVsIHRocmVhZHMgYW5kIHRhc2tzIHdoaWNoIGhhdmUgYWxyZWFkeSByZWxlYXNlZAotCQkgKiB0aGVpciBtbS4KLQkJICovCi0JCWlmICghcC0+bW0pCi0JCQljb250aW51ZTsKLQkJLyogc2tpcCB0aGUgaW5pdCB0YXNrICovCi0JCWlmIChpc19nbG9iYWxfaW5pdChwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAobWVtICYmICF0YXNrX2luX21lbV9jZ3JvdXAocCwgbWVtKSkKKwkJaWYgKG9vbV91bmtpbGxhYmxlX3Rhc2socCwgbWVtLCBub2RlbWFzaykpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMjkwLDE5ICszMTgsMTYgQEAKIAkJICogdGhlIHByb2Nlc3Mgb2YgZXhpdGluZyBhbmQgcmVsZWFzaW5nIGl0cyByZXNvdXJjZXMuCiAJCSAqIE90aGVyd2lzZSB3ZSBjb3VsZCBnZXQgYW4gZWFzeSBPT00gZGVhZGxvY2suCiAJCSAqLwotCQlpZiAocC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSB7CisJCWlmICh0aHJlYWRfZ3JvdXBfZW1wdHkocCkgJiYgKHAtPmZsYWdzICYgUEZfRVhJVElORykgJiYgcC0+bW0pIHsKIAkJCWlmIChwICE9IGN1cnJlbnQpCiAJCQkJcmV0dXJuIEVSUl9QVFIoLTFVTCk7CiAKIAkJCWNob3NlbiA9IHA7Ci0JCQkqcHBvaW50cyA9IFVMT05HX01BWDsKKwkJCSpwcG9pbnRzID0gMTAwMDsKIAkJfQogCi0JCWlmIChwLT5zaWduYWwtPm9vbV9hZGogPT0gT09NX0RJU0FCTEUpCi0JCQljb250aW51ZTsKLQotCQlwb2ludHMgPSBiYWRuZXNzKHAsIHVwdGltZS50dl9zZWMpOwotCQlpZiAocG9pbnRzID4gKnBwb2ludHMgfHwgIWNob3NlbikgeworCQlwb2ludHMgPSBvb21fYmFkbmVzcyhwLCBtZW0sIG5vZGVtYXNrLCB0b3RhbHBhZ2VzKTsKKwkJaWYgKHBvaW50cyA+ICpwcG9pbnRzKSB7CiAJCQljaG9zZW4gPSBwOwogCQkJKnBwb2ludHMgPSBwb2ludHM7CiAJCX0KQEAgLTMxMywxMSArMzM4LDExIEBACiAKIC8qKgogICogZHVtcF90YXNrcyAtIGR1bXAgY3VycmVudCBtZW1vcnkgc3RhdGUgb2YgYWxsIHN5c3RlbSB0YXNrcwotICogQG1lbTogdGFyZ2V0IG1lbW9yeSBjb250cm9sbGVyCisgKiBAbWVtOiBjdXJyZW50J3MgbWVtb3J5IGNvbnRyb2xsZXIsIGlmIGNvbnN0cmFpbmVkCiAgKgogICogRHVtcHMgdGhlIGN1cnJlbnQgbWVtb3J5IHN0YXRlIG9mIGFsbCBzeXN0ZW0gdGFza3MsIGV4Y2x1ZGluZyBrZXJuZWwgdGhyZWFkcy4KICAqIFN0YXRlIGluZm9ybWF0aW9uIGluY2x1ZGVzIHRhc2sncyBwaWQsIHVpZCwgdGdpZCwgdm0gc2l6ZSwgcnNzLCBjcHUsIG9vbV9hZGoKLSAqIHNjb3JlLCBhbmQgbmFtZS4KKyAqIHZhbHVlLCBvb21fc2NvcmVfYWRqIHZhbHVlLCBhbmQgbmFtZS4KICAqCiAgKiBJZiB0aGUgYWN0dWFsIGlzIG5vbi1OVUxMLCBvbmx5IHRhc2tzIHRoYXQgYXJlIGEgbWVtYmVyIG9mIHRoZSBtZW1fY2dyb3VwIGFyZQogICogc2hvd24uCkBAIC0zMjYsNDQgKzM1MSw0MyBAQAogICovCiBzdGF0aWMgdm9pZCBkdW1wX3Rhc2tzKGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiWyBwaWQgXSAgIHVpZCAgdGdpZCB0b3RhbF92bSAgICAgIHJzcyBjcHUgb29tX2FkaiAiCi0JICAgICAgICJuYW1lXG4iKTsKLQlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwotCisJcHJfaW5mbygiWyBwaWQgXSAgIHVpZCAgdGdpZCB0b3RhbF92bSAgICAgIHJzcyBjcHUgb29tX2FkaiBvb21fc2NvcmVfYWRqIG5hbWVcbiIpOworCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQlpZiAocC0+ZmxhZ3MgJiBQRl9LVEhSRUFEKQorCQkJY29udGludWU7CiAJCWlmIChtZW0gJiYgIXRhc2tfaW5fbWVtX2Nncm91cChwLCBtZW0pKQogCQkJY29udGludWU7Ci0JCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcihwKSkKLQkJCWNvbnRpbnVlOwogCi0JCXRhc2tfbG9jayhwKTsKLQkJbW0gPSBwLT5tbTsKLQkJaWYgKCFtbSkgeworCQl0YXNrID0gZmluZF9sb2NrX3Rhc2tfbW0ocCk7CisJCWlmICghdGFzaykgewogCQkJLyoKLQkJCSAqIHRvdGFsX3ZtIGFuZCByc3Mgc2l6ZXMgZG8gbm90IGV4aXN0IGZvciB0YXNrcyB3aXRoIG5vCi0JCQkgKiBtbSBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gcmVwb3J0IHRoZW07IHRoZXkgY2FuJ3QgYmUKLQkJCSAqIG9vbSBraWxsZWQgYW55d2F5LgorCQkJICogVGhpcyBpcyBhIGt0aHJlYWQgb3IgYWxsIG9mIHAncyB0aHJlYWRzIGhhdmUgYWxyZWFkeQorCQkJICogZGV0YWNoZWQgdGhlaXIgbW0ncy4gIFRoZXJlJ3Mgbm8gbmVlZCB0byByZXBvcnQKKwkJCSAqIHRoZW07IHRoZXkgY2FuJ3QgYmUgb29tIGtpbGxlZCBhbnl3YXkuCiAJCQkgKi8KLQkJCXRhc2tfdW5sb2NrKHApOwogCQkJY29udGludWU7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiWyU1ZF0gJTVkICU1ZCAlOGx1ICU4bHUgJTNkICAgICAlM2QgJXNcbiIsCi0JCSAgICAgICBwLT5waWQsIF9fdGFza19jcmVkKHApLT51aWQsIHAtPnRnaWQsIG1tLT50b3RhbF92bSwKLQkJICAgICAgIGdldF9tbV9yc3MobW0pLCAoaW50KXRhc2tfY3B1KHApLCBwLT5zaWduYWwtPm9vbV9hZGosCi0JCSAgICAgICBwLT5jb21tKTsKLQkJdGFza191bmxvY2socCk7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKworCQlwcl9pbmZvKCJbJTVkXSAlNWQgJTVkICU4bHUgJThsdSAlM3UgICAgICUzZCAgICAgICAgICU1ZCAlc1xuIiwKKwkJCXRhc2stPnBpZCwgX190YXNrX2NyZWQodGFzayktPnVpZCwgdGFzay0+dGdpZCwKKwkJCXRhc2stPm1tLT50b3RhbF92bSwgZ2V0X21tX3Jzcyh0YXNrLT5tbSksCisJCQl0YXNrX2NwdSh0YXNrKSwgdGFzay0+c2lnbmFsLT5vb21fYWRqLAorCQkJdGFzay0+c2lnbmFsLT5vb21fc2NvcmVfYWRqLCB0YXNrLT5jb21tKTsKKwkJdGFza191bmxvY2sodGFzayk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsCiAJCQkJCQkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKLQlwcl93YXJuaW5nKCIlcyBpbnZva2VkIG9vbS1raWxsZXI6IGdmcF9tYXNrPTB4JXgsIG9yZGVyPSVkLCAiCi0JCSJvb21fYWRqPSVkXG4iLAotCQljdXJyZW50LT5jb21tLCBnZnBfbWFzaywgb3JkZXIsIGN1cnJlbnQtPnNpZ25hbC0+b29tX2Fkaik7CiAJdGFza19sb2NrKGN1cnJlbnQpOworCXByX3dhcm5pbmcoIiVzIGludm9rZWQgb29tLWtpbGxlcjogZ2ZwX21hc2s9MHgleCwgb3JkZXI9JWQsICIKKwkJIm9vbV9hZGo9JWQsIG9vbV9zY29yZV9hZGo9JWRcbiIsCisJCWN1cnJlbnQtPmNvbW0sIGdmcF9tYXNrLCBvcmRlciwgY3VycmVudC0+c2lnbmFsLT5vb21fYWRqLAorCQljdXJyZW50LT5zaWduYWwtPm9vbV9zY29yZV9hZGopOwogCWNwdXNldF9wcmludF90YXNrX21lbXNfYWxsb3dlZChjdXJyZW50KTsKIAl0YXNrX3VubG9jayhjdXJyZW50KTsKIAlkdW1wX3N0YWNrKCk7CkBAIC0zNzQsNzIgKzM5OCw0MyBAQAogfQogCiAjZGVmaW5lIEsoeCkgKCh4KSA8PCAoUEFHRV9TSElGVC0xMCkpCi0KLS8qCi0gKiBTZW5kIFNJR0tJTEwgdG8gdGhlIHNlbGVjdGVkICBwcm9jZXNzIGlycmVzcGVjdGl2ZSBvZiAgQ0FQX1NZU19SQVdfSU8KLSAqIGZsYWcgdGhvdWdoIGl0J3MgdW5saWtlbHkgdGhhdCAgd2Ugc2VsZWN0IGEgcHJvY2VzcyB3aXRoIENBUF9TWVNfUkFXX0lPCi0gKiBzZXQuCi0gKi8KLXN0YXRpYyB2b2lkIF9fb29tX2tpbGxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB2ZXJib3NlKQorc3RhdGljIGludCBvb21fa2lsbF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKLQlpZiAoaXNfZ2xvYmFsX2luaXQocCkpIHsKLQkJV0FSTl9PTigxKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAidHJpZWQgdG8ga2lsbCBpbml0IVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQl0YXNrX2xvY2socCk7Ci0JaWYgKCFwLT5tbSkgewotCQlXQVJOX09OKDEpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0cmllZCB0byBraWxsIGFuIG1tLWxlc3MgdGFzayAlZCAoJXMpIVxuIiwKLQkJCXRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKKwlwID0gZmluZF9sb2NrX3Rhc2tfbW0ocCk7CisJaWYgKCFwKSB7CiAJCXRhc2tfdW5sb2NrKHApOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KLQotCWlmICh2ZXJib3NlKQotCQlwcmludGsoS0VSTl9FUlIgIktpbGxlZCBwcm9jZXNzICVkICglcykgIgotCQkgICAgICAgInZzejolbHVrQiwgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCXG4iLAotCQkgICAgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0sCi0JCSAgICAgICBLKHAtPm1tLT50b3RhbF92bSksCi0JCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9BTk9OUEFHRVMpKSwKLQkJICAgICAgIEsoZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX0ZJTEVQQUdFUykpKTsKKwlwcl9lcnIoIktpbGxlZCBwcm9jZXNzICVkICglcykgdG90YWwtdm06JWx1a0IsIGFub24tcnNzOiVsdWtCLCBmaWxlLXJzczolbHVrQlxuIiwKKwkJdGFza19waWRfbnIocCksIHAtPmNvbW0sIEsocC0+bW0tPnRvdGFsX3ZtKSwKKwkJSyhnZXRfbW1fY291bnRlcihwLT5tbSwgTU1fQU5PTlBBR0VTKSksCisJCUsoZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX0ZJTEVQQUdFUykpKTsKIAl0YXNrX3VubG9jayhwKTsKIAorCisJc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKTsKKwlmb3JjZV9zaWcoU0lHS0lMTCwgcCk7CisKIAkvKgogCSAqIFdlIGdpdmUgb3VyIHNhY3JpZmljaWFsIGxhbWIgaGlnaCBwcmlvcml0eSBhbmQgYWNjZXNzIHRvCiAJICogYWxsIHRoZSBtZW1vcnkgaXQgbmVlZHMuIFRoYXQgd2F5IGl0IHNob3VsZCBiZSBhYmxlIHRvCiAJICogZXhpdCgpIGFuZCBjbGVhciBvdXQgaXRzIHJlc291cmNlcyBxdWlja2x5Li4uCiAJICovCi0JcC0+cnQudGltZV9zbGljZSA9IEhaOwotCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX01FTURJRSk7Ci0KLQlmb3JjZV9zaWcoU0lHS0lMTCwgcCk7Ci19Ci0KLXN0YXRpYyBpbnQgb29tX2tpbGxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JLyogV0FSTklORzogbW0gbWF5IG5vdCBiZSBkZXJlZmVyZW5jZWQgc2luY2Ugd2UgZGlkIG5vdCBvYnRhaW4gaXRzCi0JICogdmFsdWUgZnJvbSBnZXRfdGFza19tbShwKS4gIFRoaXMgaXMgT0sgc2luY2UgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkgKiBjb21wYXJlIG1tIHRvIHEtPm1tIGJlbG93LgotCSAqCi0JICogRnVydGhlcm1vcmUsIGV2ZW4gaWYgbW0gY29udGFpbnMgYSBub24tTlVMTCB2YWx1ZSwgcC0+bW0gbWF5Ci0JICogY2hhbmdlIHRvIE5VTEwgYXQgYW55IHRpbWUgc2luY2Ugd2UgZG8gbm90IGhvbGQgdGFza19sb2NrKHApLgotCSAqIEhvd2V2ZXIsIHRoaXMgaXMgb2Ygbm8gY29uY2VybiB0byB1cy4KLQkgKi8KLQlpZiAoIXAtPm1tIHx8IHAtPnNpZ25hbC0+b29tX2FkaiA9PSBPT01fRElTQUJMRSkKLQkJcmV0dXJuIDE7Ci0KLQlfX29vbV9raWxsX3Rhc2socCwgMSk7CisJYm9vc3RfZHlpbmdfdGFza19wcmlvKHAsIG1lbSk7CiAKIAlyZXR1cm4gMDsKIH0KKyN1bmRlZiBLCiAKIHN0YXRpYyBpbnQgb29tX2tpbGxfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBwb2ludHMsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCQkgICAgdW5zaWduZWQgaW50IHBvaW50cywgdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzLAorCQkJICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIG5vZGVtYXNrX3QgKm5vZGVtYXNrLAogCQkJICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdmljdGltID0gcDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdCA9IHA7CisJdW5zaWduZWQgaW50IHZpY3RpbV9wb2ludHMgPSAwOwogCiAJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJZHVtcF9oZWFkZXIocCwgZ2ZwX21hc2ssIG9yZGVyLCBtZW0pOwpAQCAtNDQ5LDQwICs0NDQsODEgQEAKIAkgKiBpdHMgY2hpbGRyZW4gb3IgdGhyZWFkcywganVzdCBzZXQgVElGX01FTURJRSBzbyBpdCBjYW4gZGllIHF1aWNrbHkKIAkgKi8KIAlpZiAocC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSB7Ci0JCV9fb29tX2tpbGxfdGFzayhwLCAwKTsKKwkJc2V0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKTsKKwkJYm9vc3RfZHlpbmdfdGFza19wcmlvKHAsIG1lbSk7CiAJCXJldHVybiAwOwogCX0KIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IGtpbGwgcHJvY2VzcyAlZCAoJXMpIHNjb3JlICVsaSBvciBhIGNoaWxkXG4iLAotCQkJCQltZXNzYWdlLCB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgcG9pbnRzKTsKKwl0YXNrX2xvY2socCk7CisJcHJfZXJyKCIlczogS2lsbCBwcm9jZXNzICVkICglcykgc2NvcmUgJWQgb3Igc2FjcmlmaWNlIGNoaWxkXG4iLAorCQltZXNzYWdlLCB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgcG9pbnRzKTsKKwl0YXNrX3VubG9jayhwKTsKIAotCS8qIFRyeSB0byBraWxsIGEgY2hpbGQgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwLT5jaGlsZHJlbiwgc2libGluZykgewotCQlpZiAoYy0+bW0gPT0gcC0+bW0pCi0JCQljb250aW51ZTsKLQkJaWYgKG1lbSAmJiAhdGFza19pbl9tZW1fY2dyb3VwKGMsIG1lbSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFvb21fa2lsbF90YXNrKGMpKQotCQkJcmV0dXJuIDA7CisJLyoKKwkgKiBJZiBhbnkgb2YgcCdzIGNoaWxkcmVuIGhhcyBhIGRpZmZlcmVudCBtbSBhbmQgaXMgZWxpZ2libGUgZm9yIGtpbGwsCisJICogdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IGJhZG5lc3MoKSBzY29yZSBpcyBzYWNyaWZpY2VkIGZvciBpdHMKKwkgKiBwYXJlbnQuICBUaGlzIGF0dGVtcHRzIHRvIGxvc2UgdGhlIG1pbmltYWwgYW1vdW50IG9mIHdvcmsgZG9uZSB3aGlsZQorCSAqIHN0aWxsIGZyZWVpbmcgbWVtb3J5LgorCSAqLworCWRvIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGlsZCwgJnQtPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCQl1bnNpZ25lZCBpbnQgY2hpbGRfcG9pbnRzOworCisJCQkvKgorCQkJICogb29tX2JhZG5lc3MoKSByZXR1cm5zIDAgaWYgdGhlIHRocmVhZCBpcyB1bmtpbGxhYmxlCisJCQkgKi8KKwkJCWNoaWxkX3BvaW50cyA9IG9vbV9iYWRuZXNzKGNoaWxkLCBtZW0sIG5vZGVtYXNrLAorCQkJCQkJCQl0b3RhbHBhZ2VzKTsKKwkJCWlmIChjaGlsZF9wb2ludHMgPiB2aWN0aW1fcG9pbnRzKSB7CisJCQkJdmljdGltID0gY2hpbGQ7CisJCQkJdmljdGltX3BvaW50cyA9IGNoaWxkX3BvaW50czsKKwkJCX0KKwkJfQorCX0gd2hpbGVfZWFjaF90aHJlYWQocCwgdCk7CisKKwlyZXR1cm4gb29tX2tpbGxfdGFzayh2aWN0aW0sIG1lbSk7Cit9CisKKy8qCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGtlcm5lbCBtdXN0IHBhbmljIGJlY2F1c2Ugb2YgdGhlIHBhbmljX29uX29vbSBzeXNjdGwuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX3BhbmljX29uX29vbShlbnVtIG9vbV9jb25zdHJhaW50IGNvbnN0cmFpbnQsIGdmcF90IGdmcF9tYXNrLAorCQkJCWludCBvcmRlcikKK3sKKwlpZiAobGlrZWx5KCFzeXNjdGxfcGFuaWNfb25fb29tKSkKKwkJcmV0dXJuOworCWlmIChzeXNjdGxfcGFuaWNfb25fb29tICE9IDIpIHsKKwkJLyoKKwkJICogcGFuaWNfb25fb29tID09IDEgb25seSBhZmZlY3RzIENPTlNUUkFJTlRfTk9ORSwgdGhlIGtlcm5lbAorCQkgKiBkb2VzIG5vdCBwYW5pYyBmb3IgY3B1c2V0LCBtZW1wb2xpY3ksIG9yIG1lbWNnIGFsbG9jYXRpb24KKwkJICogZmFpbHVyZXMuCisJCSAqLworCQlpZiAoY29uc3RyYWludCAhPSBDT05TVFJBSU5UX05PTkUpCisJCQlyZXR1cm47CiAJfQotCXJldHVybiBvb21fa2lsbF90YXNrKHApOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJZHVtcF9oZWFkZXIoTlVMTCwgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcGFuaWMoIk91dCBvZiBtZW1vcnk6ICVzIHBhbmljX29uX29vbSBpcyBlbmFibGVkXG4iLAorCQlzeXNjdGxfcGFuaWNfb25fb29tID09IDIgPyAiY29tcHVsc29yeSIgOiAic3lzdGVtLXdpZGUiKTsKIH0KIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCiB2b2lkIG1lbV9jZ3JvdXBfb3V0X29mX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBnZnBfdCBnZnBfbWFzaykKIHsKLQl1bnNpZ25lZCBsb25nIHBvaW50cyA9IDA7CisJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwl1bnNpZ25lZCBpbnQgcG9pbnRzID0gMDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKLQlpZiAoc3lzY3RsX3BhbmljX29uX29vbSA9PSAyKQotCQlwYW5pYygib3V0IG9mIG1lbW9yeShtZW1jZykuIHBhbmljX29uX29vbSBpcyBzZWxlY3RlZC5cbiIpOworCWNoZWNrX3BhbmljX29uX29vbShDT05TVFJBSU5UX01FTUNHLCBnZnBfbWFzaywgMCk7CisJbGltaXQgPSBtZW1fY2dyb3VwX2dldF9saW1pdChtZW0pID4+IFBBR0VfU0hJRlQ7CiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIHJldHJ5OgotCXAgPSBzZWxlY3RfYmFkX3Byb2Nlc3MoJnBvaW50cywgbWVtKTsKKwlwID0gc2VsZWN0X2JhZF9wcm9jZXNzKCZwb2ludHMsIGxpbWl0LCBtZW0sIE5VTEwpOwogCWlmICghcCB8fCBQVFJfRVJSKHApID09IC0xVUwpCiAJCWdvdG8gb3V0OwogCi0JaWYgKG9vbV9raWxsX3Byb2Nlc3MocCwgZ2ZwX21hc2ssIDAsIHBvaW50cywgbWVtLAorCWlmIChvb21fa2lsbF9wcm9jZXNzKHAsIGdmcF9tYXNrLCAwLCBwb2ludHMsIGxpbWl0LCBtZW0sIE5VTEwsCiAJCQkJIk1lbW9yeSBjZ3JvdXAgb3V0IG9mIG1lbW9yeSIpKQogCQlnb3RvIHJldHJ5Owogb3V0OgpAQCAtNTA5LDcgKzU0NSw3IEBACiAgKiBpZiBhIHBhcmFsbGVsIE9PTSBraWxsaW5nIGlzIGFscmVhZHkgdGFraW5nIHBsYWNlIHRoYXQgaW5jbHVkZXMgYSB6b25lIGluCiAgKiB0aGUgem9uZWxpc3QuICBPdGhlcndpc2UsIGxvY2tzIGFsbCB6b25lcyBpbiB0aGUgem9uZWxpc3QgYW5kIHJldHVybnMgMS4KICAqLwotaW50IHRyeV9zZXRfem9uZV9vb20oc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgdHJ5X3NldF96b25lbGlzdF9vb20oc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHpvbmVyZWYgKno7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC01MjYsNyArNTYyLDcgQEAKIAlmb3JfZWFjaF96b25lX3pvbmVsaXN0KHpvbmUsIHosIHpvbmVsaXN0LCBnZnBfem9uZShnZnBfbWFzaykpIHsKIAkJLyoKIAkJICogTG9jayBlYWNoIHpvbmUgaW4gdGhlIHpvbmVsaXN0IHVuZGVyIHpvbmVfc2Nhbl9sb2NrIHNvIGEKLQkJICogcGFyYWxsZWwgaW52b2NhdGlvbiBvZiB0cnlfc2V0X3pvbmVfb29tKCkgZG9lc24ndCBzdWNjZWVkCisJCSAqIHBhcmFsbGVsIGludm9jYXRpb24gb2YgdHJ5X3NldF96b25lbGlzdF9vb20oKSBkb2Vzbid0IHN1Y2NlZWQKIAkJICogd2hlbiBpdCBzaG91bGRuJ3QuCiAJCSAqLwogCQl6b25lX3NldF9mbGFnKHpvbmUsIFpPTkVfT09NX0xPQ0tFRCk7CkBAIC01NTUsNjUgKzU5MSw0MCBAQAogfQogCiAvKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0YXNrbGlzdF9sb2NrIGhlbGQgZm9yIHJlYWQuCisgKiBUcnkgdG8gYWNxdWlyZSB0aGUgb29tIGtpbGxlciBsb2NrIGZvciBhbGwgc3lzdGVtIHpvbmVzLiAgUmV0dXJucyB6ZXJvIGlmIGEKKyAqIHBhcmFsbGVsIG9vbSBraWxsaW5nIGlzIHRha2luZyBwbGFjZSwgb3RoZXJ3aXNlIGxvY2tzIGFsbCB6b25lcyBhbmQgcmV0dXJucworICogbm9uLXplcm8uCiAgKi8KLXN0YXRpYyB2b2lkIF9fb3V0X29mX21lbW9yeShnZnBfdCBnZnBfbWFzaywgaW50IG9yZGVyKQorc3RhdGljIGludCB0cnlfc2V0X3N5c3RlbV9vb20odm9pZCkKIHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7Ci0JdW5zaWduZWQgbG9uZyBwb2ludHM7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJaW50IHJldCA9IDE7CiAKLQlpZiAoc3lzY3RsX29vbV9raWxsX2FsbG9jYXRpbmdfdGFzaykKLQkJaWYgKCFvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIGdmcF9tYXNrLCBvcmRlciwgMCwgTlVMTCwKLQkJCQkiT3V0IG9mIG1lbW9yeSAob29tX2tpbGxfYWxsb2NhdGluZ190YXNrKSIpKQotCQkJcmV0dXJuOwotcmV0cnk6Ci0JLyoKLQkgKiBSYW1ibyBtb2RlOiBTaG9vdCBkb3duIGEgcHJvY2VzcyBhbmQgaG9wZSBpdCBzb2x2ZXMgd2hhdGV2ZXIKLQkgKiBpc3N1ZXMgd2UgbWF5IGhhdmUuCi0JICovCi0JcCA9IHNlbGVjdF9iYWRfcHJvY2VzcygmcG9pbnRzLCBOVUxMKTsKLQotCWlmIChQVFJfRVJSKHApID09IC0xVUwpCi0JCXJldHVybjsKLQotCS8qIEZvdW5kIG5vdGhpbmc/IT8hIEVpdGhlciB3ZSBoYW5nIGZvcmV2ZXIsIG9yIHdlIHBhbmljLiAqLwotCWlmICghcCkgewotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCWR1bXBfaGVhZGVyKE5VTEwsIGdmcF9tYXNrLCBvcmRlciwgTlVMTCk7Ci0JCXBhbmljKCJPdXQgb2YgbWVtb3J5IGFuZCBubyBraWxsYWJsZSBwcm9jZXNzZXMuLi5cbiIpOwotCX0KLQotCWlmIChvb21fa2lsbF9wcm9jZXNzKHAsIGdmcF9tYXNrLCBvcmRlciwgcG9pbnRzLCBOVUxMLAotCQkJICAgICAiT3V0IG9mIG1lbW9yeSIpKQotCQlnb3RvIHJldHJ5OworCXNwaW5fbG9jaygmem9uZV9zY2FuX2xvY2spOworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpCisJCWlmICh6b25lX2lzX29vbV9sb2NrZWQoem9uZSkpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpCisJCXpvbmVfc2V0X2ZsYWcoem9uZSwgWk9ORV9PT01fTE9DS0VEKTsKK291dDoKKwlzcGluX3VubG9jaygmem9uZV9zY2FuX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBwYWdlZmF1bHQgaGFuZGxlciBjYWxscyBpbnRvIGhlcmUgYmVjYXVzZSBpdCBpcyBvdXQgb2YgbWVtb3J5IGJ1dAotICogZG9lc24ndCBrbm93IGV4YWN0bHkgaG93IG9yIHdoeS4KKyAqIENsZWFycyBaT05FX09PTV9MT0NLRUQgZm9yIGFsbCBzeXN0ZW0gem9uZXMgc28gdGhhdCBmYWlsZWQgYWxsb2NhdGlvbgorICogYXR0ZW1wdHMgb3IgcGFnZSBmYXVsdHMgbWF5IG5vdyByZWNhbGwgdGhlIG9vbSBraWxsZXIsIGlmIG5lY2Vzc2FyeS4KICAqLwotdm9pZCBwYWdlZmF1bHRfb3V0X29mX21lbW9yeSh2b2lkKQorc3RhdGljIHZvaWQgY2xlYXJfc3lzdGVtX29vbSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOworCXN0cnVjdCB6b25lICp6b25lOwogCi0JYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmb29tX25vdGlmeV9saXN0LCAwLCAmZnJlZWQpOwotCWlmIChmcmVlZCA+IDApCi0JCS8qIEdvdCBzb21lIG1lbW9yeSBiYWNrIGluIHRoZSBsYXN0IHNlY29uZC4gKi8KLQkJcmV0dXJuOwotCi0JaWYgKHN5c2N0bF9wYW5pY19vbl9vb20pCi0JCXBhbmljKCJvdXQgb2YgbWVtb3J5IGZyb20gcGFnZSBmYXVsdC4gcGFuaWNfb25fb29tIGlzIHNlbGVjdGVkLlxuIik7Ci0KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCV9fb3V0X29mX21lbW9yeSgwLCAwKTsgLyogdW5rbm93biBnZnBfbWFzayBhbmQgb3JkZXIgKi8KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkvKgotCSAqIEdpdmUgInAiIGEgZ29vZCBjaGFuY2Ugb2Yga2lsbGluZyBpdHNlbGYgYmVmb3JlIHdlCi0JICogcmV0cnkgdG8gYWxsb2NhdGUgbWVtb3J5LgotCSAqLwotCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkKLQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJc3Bpbl9sb2NrKCZ6b25lX3NjYW5fbG9jayk7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkKKwkJem9uZV9jbGVhcl9mbGFnKHpvbmUsIFpPTkVfT09NX0xPQ0tFRCk7CisJc3Bpbl91bmxvY2soJnpvbmVfc2Nhbl9sb2NrKTsKIH0KIAogLyoqCkBAIC02MjEsNiArNjMyLDcgQEAKICAqIEB6b25lbGlzdDogem9uZWxpc3QgcG9pbnRlcgogICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICogQG9yZGVyOiBhbW91bnQgb2YgbWVtb3J5IGJlaW5nIHJlcXVlc3RlZCBhcyBhIHBvd2VyIG9mIDIKKyAqIEBub2RlbWFzazogbm9kZW1hc2sgcGFzc2VkIHRvIHBhZ2UgYWxsb2NhdG9yCiAgKgogICogSWYgd2UgcnVuIG91dCBvZiBtZW1vcnksIHdlIGhhdmUgdGhlIGNob2ljZSBiZXR3ZWVuIGVpdGhlcgogICoga2lsbGluZyBhIHJhbmRvbSB0YXNrIChiYWQpLCBsZXR0aW5nIHRoZSBzeXN0ZW0gY3Jhc2ggKHdvcnNlKQpAQCAtNjMwLDQzICs2NDIsNjggQEAKIHZvaWQgb3V0X29mX21lbW9yeShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfbWFzaywKIAkJaW50IG9yZGVyLCBub2RlbWFza190ICpub2RlbWFzaykKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgZnJlZWQgPSAwOwotCWVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWludDsKKwl1bnNpZ25lZCBpbnQgcG9pbnRzOworCWVudW0gb29tX2NvbnN0cmFpbnQgY29uc3RyYWludCA9IENPTlNUUkFJTlRfTk9ORTsKIAogCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJm9vbV9ub3RpZnlfbGlzdCwgMCwgJmZyZWVkKTsKIAlpZiAoZnJlZWQgPiAwKQogCQkvKiBHb3Qgc29tZSBtZW1vcnkgYmFjayBpbiB0aGUgbGFzdCBzZWNvbmQuICovCiAJCXJldHVybjsKIAotCWlmIChzeXNjdGxfcGFuaWNfb25fb29tID09IDIpIHsKLQkJZHVtcF9oZWFkZXIoTlVMTCwgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKLQkJcGFuaWMoIm91dCBvZiBtZW1vcnkuIENvbXB1bHNvcnkgcGFuaWNfb25fb29tIGlzIHNlbGVjdGVkLlxuIik7CisJLyoKKwkgKiBJZiBjdXJyZW50IGhhcyBhIHBlbmRpbmcgU0lHS0lMTCwgdGhlbiBhdXRvbWF0aWNhbGx5IHNlbGVjdCBpdC4gIFRoZQorCSAqIGdvYWwgaXMgdG8gYWxsb3cgaXQgdG8gYWxsb2NhdGUgc28gdGhhdCBpdCBtYXkgcXVpY2tseSBleGl0IGFuZCBmcmVlCisJICogaXRzIG1lbW9yeS4KKwkgKi8KKwlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJc2V0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpOworCQlib29zdF9keWluZ190YXNrX3ByaW8oY3VycmVudCwgTlVMTCk7CisJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlIHdlcmUgbGltaXRhdGlvbnMgb24gdGhlIGFsbG9jYXRpb24gKG9ubHkgcmVsZXZhbnQgZm9yCiAJICogTlVNQSkgdGhhdCBtYXkgcmVxdWlyZSBkaWZmZXJlbnQgaGFuZGxpbmcuCiAJICovCi0JY29uc3RyYWludCA9IGNvbnN0cmFpbmVkX2FsbG9jKHpvbmVsaXN0LCBnZnBfbWFzaywgbm9kZW1hc2spOworCWNvbnN0cmFpbnQgPSBjb25zdHJhaW5lZF9hbGxvYyh6b25lbGlzdCwgZ2ZwX21hc2ssIG5vZGVtYXNrLAorCQkJCQkJJnRvdGFscGFnZXMpOworCWNoZWNrX3BhbmljX29uX29vbShjb25zdHJhaW50LCBnZnBfbWFzaywgb3JkZXIpOworCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQotCXN3aXRjaCAoY29uc3RyYWludCkgewotCWNhc2UgQ09OU1RSQUlOVF9NRU1PUllfUE9MSUNZOgotCQlvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIGdmcF9tYXNrLCBvcmRlciwgMCwgTlVMTCwKLQkJCQkiTm8gYXZhaWxhYmxlIG1lbW9yeSAoTVBPTF9CSU5EKSIpOwotCQlicmVhazsKLQotCWNhc2UgQ09OU1RSQUlOVF9OT05FOgotCQlpZiAoc3lzY3RsX3BhbmljX29uX29vbSkgewotCQkJZHVtcF9oZWFkZXIoTlVMTCwgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKLQkJCXBhbmljKCJvdXQgb2YgbWVtb3J5LiBwYW5pY19vbl9vb20gaXMgc2VsZWN0ZWRcbiIpOwotCQl9Ci0JCS8qIEZhbGwtdGhyb3VnaCAqLwotCWNhc2UgQ09OU1RSQUlOVF9DUFVTRVQ6Ci0JCV9fb3V0X29mX21lbW9yeShnZnBfbWFzaywgb3JkZXIpOwotCQlicmVhazsKKwlpZiAoc3lzY3RsX29vbV9raWxsX2FsbG9jYXRpbmdfdGFzayAmJgorCSAgICAhb29tX3Vua2lsbGFibGVfdGFzayhjdXJyZW50LCBOVUxMLCBub2RlbWFzaykgJiYKKwkgICAgKGN1cnJlbnQtPnNpZ25hbC0+b29tX2FkaiAhPSBPT01fRElTQUJMRSkpIHsKKwkJLyoKKwkJICogb29tX2tpbGxfcHJvY2VzcygpIG5lZWRzIHRhc2tsaXN0X2xvY2sgaGVsZC4gIElmIGl0IHJldHVybnMKKwkJICogbm9uLXplcm8sIGN1cnJlbnQgY291bGQgbm90IGJlIGtpbGxlZCBzbyB3ZSBtdXN0IGZhbGxiYWNrIHRvCisJCSAqIHRoZSB0YXNrbGlzdCBzY2FuLgorCQkgKi8KKwkJaWYgKCFvb21fa2lsbF9wcm9jZXNzKGN1cnJlbnQsIGdmcF9tYXNrLCBvcmRlciwgMCwgdG90YWxwYWdlcywKKwkJCQlOVUxMLCBub2RlbWFzaywKKwkJCQkiT3V0IG9mIG1lbW9yeSAob29tX2tpbGxfYWxsb2NhdGluZ190YXNrKSIpKQorCQkJcmV0dXJuOwogCX0KIAorcmV0cnk6CisJcCA9IHNlbGVjdF9iYWRfcHJvY2VzcygmcG9pbnRzLCB0b3RhbHBhZ2VzLCBOVUxMLAorCQkJY29uc3RyYWludCA9PSBDT05TVFJBSU5UX01FTU9SWV9QT0xJQ1kgPyBub2RlbWFzayA6CisJCQkJCQkJCSBOVUxMKTsKKwlpZiAoUFRSX0VSUihwKSA9PSAtMVVMKQorCQlyZXR1cm47CisKKwkvKiBGb3VuZCBub3RoaW5nPyE/ISBFaXRoZXIgd2UgaGFuZyBmb3JldmVyLCBvciB3ZSBwYW5pYy4gKi8KKwlpZiAoIXApIHsKKwkJZHVtcF9oZWFkZXIoTlVMTCwgZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlwYW5pYygiT3V0IG9mIG1lbW9yeSBhbmQgbm8ga2lsbGFibGUgcHJvY2Vzc2VzLi4uXG4iKTsKKwl9CisKKwlpZiAob29tX2tpbGxfcHJvY2VzcyhwLCBnZnBfbWFzaywgb3JkZXIsIHBvaW50cywgdG90YWxwYWdlcywgTlVMTCwKKwkJCQlub2RlbWFzaywgIk91dCBvZiBtZW1vcnkiKSkKKwkJZ290byByZXRyeTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAKIAkvKgpAQCAtNjc2LDMgKzcxMywxOSBAQAogCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiB9CisKKy8qCisgKiBUaGUgcGFnZWZhdWx0IGhhbmRsZXIgY2FsbHMgaGVyZSBiZWNhdXNlIGl0IGlzIG91dCBvZiBtZW1vcnksIHNvIGtpbGwgYQorICogbWVtb3J5LWhvZ2dpbmcgdGFzay4gIElmIGEgcG9wdWxhdGVkIHpvbmUgaGFzIFpPTkVfT09NX0xPQ0tFRCBzZXQsIGEgcGFyYWxsZWwKKyAqIG9vbSBraWxsaW5nIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3Mgc28gZG8gbm90aGluZy4gIElmIGEgdGFzayBpcyBmb3VuZCB3aXRoCisgKiBUSUZfTUVNRElFIHNldCwgaXQgaGFzIGJlZW4ga2lsbGVkIHNvIGRvIG5vdGhpbmcgYW5kIGFsbG93IGl0IHRvIGV4aXQuCisgKi8KK3ZvaWQgcGFnZWZhdWx0X291dF9vZl9tZW1vcnkodm9pZCkKK3sKKwlpZiAodHJ5X3NldF9zeXN0ZW1fb29tKCkpIHsKKwkJb3V0X29mX21lbW9yeShOVUxMLCAwLCAwLCBOVUxMKTsKKwkJY2xlYXJfc3lzdGVtX29vbSgpOworCX0KKwlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpCisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOworfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggMzc0OThlZi4uMjA4OTBkOCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMvd3JpdGViYWNrLmg+CiAKIC8qCiAgKiBBZnRlciBhIENQVSBoYXMgZGlydGllZCB0aGlzIG1hbnkgcGFnZXMsIGJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQKQEAgLTI1MiwzMiArMjUzLDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBDbGlwIHRoZSBlYXJuZWQgc2hhcmUgb2YgZGlydHkgcGFnZXMgdG8gdGhhdCB3aGljaCBpcyBhY3R1YWxseSBhdmFpbGFibGUuCi0gKiBUaGlzIGF2b2lkcyBleGNlZWRpbmcgdGhlIHRvdGFsIGRpcnR5X2xpbWl0IHdoZW4gdGhlIGZsb2F0aW5nIGF2ZXJhZ2VzCi0gKiBmbHVjdHVhdGUgdG9vIHF1aWNrbHkuCi0gKi8KLXN0YXRpYyB2b2lkIGNsaXBfYmRpX2RpcnR5X2xpbWl0KHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksCi0JCXVuc2lnbmVkIGxvbmcgZGlydHksIHVuc2lnbmVkIGxvbmcgKnBiZGlfZGlydHkpCi17Ci0JdW5zaWduZWQgbG9uZyBhdmFpbF9kaXJ0eTsKLQotCWF2YWlsX2RpcnR5ID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKwotCQkgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfV1JJVEVCQUNLKSArCi0JCSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpICsKLQkJIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDS19URU1QKTsKLQotCWlmIChhdmFpbF9kaXJ0eSA8IGRpcnR5KQotCQlhdmFpbF9kaXJ0eSA9IGRpcnR5IC0gYXZhaWxfZGlydHk7Ci0JZWxzZQotCQlhdmFpbF9kaXJ0eSA9IDA7Ci0KLQlhdmFpbF9kaXJ0eSArPSBiZGlfc3RhdChiZGksIEJESV9SRUNMQUlNQUJMRSkgKwotCQliZGlfc3RhdChiZGksIEJESV9XUklURUJBQ0spOwotCi0JKnBiZGlfZGlydHkgPSBtaW4oKnBiZGlfZGlydHksIGF2YWlsX2RpcnR5KTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHRhc2tfZGlydGllc19mcmFjdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJbG9uZyAqbnVtZXJhdG9yLCBsb25nICpkZW5vbWluYXRvcikKIHsKQEAgLTI4NiwxNiArMjYxLDI0IEBACiB9CiAKIC8qCi0gKiBzY2FsZSB0aGUgZGlydHkgbGltaXQKKyAqIHRhc2tfZGlydHlfbGltaXQgLSBzY2FsZSBkb3duIGRpcnR5IHRocm90dGxpbmcgdGhyZXNob2xkIGZvciBvbmUgdGFzawogICoKICAqIHRhc2sgc3BlY2lmaWMgZGlydHkgbGltaXQ6CiAgKgogICogICBkaXJ0eSAtPSAoZGlydHkvOCkgKiBwX3t0fQorICoKKyAqIFRvIHByb3RlY3QgbGlnaHQvc2xvdyBkaXJ0eWluZyB0YXNrcyBmcm9tIGhlYXZpZXIvZmFzdCBvbmVzLCB3ZSBzdGFydAorICogdGhyb3R0bGluZyBpbmRpdmlkdWFsIHRhc2tzIGJlZm9yZSByZWFjaGluZyB0aGUgYmRpIGRpcnR5IGxpbWl0LgorICogUmVsYXRpdmVseSBsb3cgdGhyZXNob2xkcyB3aWxsIGJlIGFsbG9jYXRlZCB0byBoZWF2eSBkaXJ0aWVycy4gU28gd2hlbgorICogZGlydHkgcGFnZXMgZ3JvdyBsYXJnZSwgaGVhdnkgZGlydGllcnMgd2lsbCBiZSB0aHJvdHRsZWQgZmlyc3QsIHdoaWNoIHdpbGwKKyAqIGVmZmVjdGl2ZWx5IGN1cmIgdGhlIGdyb3d0aCBvZiBkaXJ0eSBwYWdlcy4gTGlnaHQgZGlydGllcnMgd2l0aCBoaWdoIGVub3VnaAorICogZGlydHkgdGhyZXNob2xkIG1heSBuZXZlciBnZXQgdGhyb3R0bGVkLgogICovCi1zdGF0aWMgdm9pZCB0YXNrX2RpcnR5X2xpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nICpwZGlydHkpCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0YXNrX2RpcnR5X2xpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJkaV9kaXJ0eSkKIHsKIAlsb25nIG51bWVyYXRvciwgZGVub21pbmF0b3I7Ci0JdW5zaWduZWQgbG9uZyBkaXJ0eSA9ICpwZGlydHk7CisJdW5zaWduZWQgbG9uZyBkaXJ0eSA9IGJkaV9kaXJ0eTsKIAl1NjQgaW52ID0gZGlydHkgPj4gMzsKIAogCXRhc2tfZGlydGllc19mcmFjdGlvbih0c2ssICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CkBAIC0zMDMsMTAgKzI4Niw4IEBACiAJZG9fZGl2KGludiwgZGVub21pbmF0b3IpOwogCiAJZGlydHkgLT0gaW52OwotCWlmIChkaXJ0eSA8ICpwZGlydHkvMikKLQkJZGlydHkgPSAqcGRpcnR5LzI7CiAKLQkqcGRpcnR5ID0gZGlydHk7CisJcmV0dXJuIG1heChkaXJ0eSwgYmRpX2RpcnR5LzIpOwogfQogCiAvKgpAQCAtNDE2LDkgKzM5NywxNiBAQAogCXJldHVybiB4ICsgMTsJLyogRW5zdXJlIHRoYXQgd2UgbmV2ZXIgcmV0dXJuIDAgKi8KIH0KIAotdm9pZAotZ2V0X2RpcnR5X2xpbWl0cyh1bnNpZ25lZCBsb25nICpwYmFja2dyb3VuZCwgdW5zaWduZWQgbG9uZyAqcGRpcnR5LAotCQkgdW5zaWduZWQgbG9uZyAqcGJkaV9kaXJ0eSwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKKy8qKgorICogZ2xvYmFsX2RpcnR5X2xpbWl0cyAtIGJhY2tncm91bmQtd3JpdGViYWNrIGFuZCBkaXJ0eS10aHJvdHRsaW5nIHRocmVzaG9sZHMKKyAqCisgKiBDYWxjdWxhdGUgdGhlIGRpcnR5IHRocmVzaG9sZHMgYmFzZWQgb24gc3lzY3RsIHBhcmFtZXRlcnMKKyAqIC0gdm0uZGlydHlfYmFja2dyb3VuZF9yYXRpbyAgb3IgIHZtLmRpcnR5X2JhY2tncm91bmRfYnl0ZXMKKyAqIC0gdm0uZGlydHlfcmF0aW8gICAgICAgICAgICAgb3IgIHZtLmRpcnR5X2J5dGVzCisgKiBUaGUgZGlydHkgbGltaXRzIHdpbGwgYmUgbGlmdGVkIGJ5IDEvNCBmb3IgUEZfTEVTU19USFJPVFRMRSAoaWUuIG5mc2QpIGFuZAorICogcnVudGltZSB0YXNrcy4KKyAqLwordm9pZCBnbG9iYWxfZGlydHlfbGltaXRzKHVuc2lnbmVkIGxvbmcgKnBiYWNrZ3JvdW5kLCB1bnNpZ25lZCBsb25nICpwZGlydHkpCiB7CiAJdW5zaWduZWQgbG9uZyBiYWNrZ3JvdW5kOwogCXVuc2lnbmVkIGxvbmcgZGlydHk7CkBAIC00NTAsMjcgKzQzOCwzNyBAQAogCX0KIAkqcGJhY2tncm91bmQgPSBiYWNrZ3JvdW5kOwogCSpwZGlydHkgPSBkaXJ0eTsKK30KIAotCWlmIChiZGkpIHsKLQkJdTY0IGJkaV9kaXJ0eTsKLQkJbG9uZyBudW1lcmF0b3IsIGRlbm9taW5hdG9yOworLyoqCisgKiBiZGlfZGlydHlfbGltaXQgLSBAYmRpJ3Mgc2hhcmUgb2YgZGlydHkgdGhyb3R0bGluZyB0aHJlc2hvbGQKKyAqCisgKiBBbGxvY2F0ZSBoaWdoL2xvdyBkaXJ0eSBsaW1pdHMgdG8gZmFzdC9zbG93IGRldmljZXMsIGluIG9yZGVyIHRvIHByZXZlbnQKKyAqIC0gc3RhcnZpbmcgZmFzdCBkZXZpY2VzCisgKiAtIHBpbGluZyB1cCBkaXJ0eSBwYWdlcyAodGhhdCB3aWxsIHRha2UgbG9uZyB0aW1lIHRvIHN5bmMpIG9uIHNsb3cgZGV2aWNlcworICoKKyAqIFRoZSBiZGkncyBzaGFyZSBvZiBkaXJ0eSBsaW1pdCB3aWxsIGJlIGFkYXB0aW5nIHRvIGl0cyB0aHJvdWdocHV0IGFuZAorICogYm91bmRlZCBieSB0aGUgYmRpLT5taW5fcmF0aW8gYW5kL29yIGJkaS0+bWF4X3JhdGlvIHBhcmFtZXRlcnMsIGlmIHNldC4KKyAqLwordW5zaWduZWQgbG9uZyBiZGlfZGlydHlfbGltaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgdW5zaWduZWQgbG9uZyBkaXJ0eSkKK3sKKwl1NjQgYmRpX2RpcnR5OworCWxvbmcgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhpcyBCREkncyBzaGFyZSBvZiB0aGUgZGlydHkgcmF0aW8uCi0JCSAqLwotCQliZGlfd3JpdGVvdXRfZnJhY3Rpb24oYmRpLCAmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IpOworCS8qCisJICogQ2FsY3VsYXRlIHRoaXMgQkRJJ3Mgc2hhcmUgb2YgdGhlIGRpcnR5IHJhdGlvLgorCSAqLworCWJkaV93cml0ZW91dF9mcmFjdGlvbihiZGksICZudW1lcmF0b3IsICZkZW5vbWluYXRvcik7CiAKLQkJYmRpX2RpcnR5ID0gKGRpcnR5ICogKDEwMCAtIGJkaV9taW5fcmF0aW8pKSAvIDEwMDsKLQkJYmRpX2RpcnR5ICo9IG51bWVyYXRvcjsKLQkJZG9fZGl2KGJkaV9kaXJ0eSwgZGVub21pbmF0b3IpOwotCQliZGlfZGlydHkgKz0gKGRpcnR5ICogYmRpLT5taW5fcmF0aW8pIC8gMTAwOwotCQlpZiAoYmRpX2RpcnR5ID4gKGRpcnR5ICogYmRpLT5tYXhfcmF0aW8pIC8gMTAwKQotCQkJYmRpX2RpcnR5ID0gZGlydHkgKiBiZGktPm1heF9yYXRpbyAvIDEwMDsKKwliZGlfZGlydHkgPSAoZGlydHkgKiAoMTAwIC0gYmRpX21pbl9yYXRpbykpIC8gMTAwOworCWJkaV9kaXJ0eSAqPSBudW1lcmF0b3I7CisJZG9fZGl2KGJkaV9kaXJ0eSwgZGVub21pbmF0b3IpOwogCi0JCSpwYmRpX2RpcnR5ID0gYmRpX2RpcnR5OwotCQljbGlwX2JkaV9kaXJ0eV9saW1pdChiZGksIGRpcnR5LCBwYmRpX2RpcnR5KTsKLQkJdGFza19kaXJ0eV9saW1pdChjdXJyZW50LCBwYmRpX2RpcnR5KTsKLQl9CisJYmRpX2RpcnR5ICs9IChkaXJ0eSAqIGJkaS0+bWluX3JhdGlvKSAvIDEwMDsKKwlpZiAoYmRpX2RpcnR5ID4gKGRpcnR5ICogYmRpLT5tYXhfcmF0aW8pIC8gMTAwKQorCQliZGlfZGlydHkgPSBkaXJ0eSAqIGJkaS0+bWF4X3JhdGlvIC8gMTAwOworCisJcmV0dXJuIGJkaV9kaXJ0eTsKIH0KIAogLyoKQEAgLTQ5MCw3ICs0ODgsNyBAQAogCXVuc2lnbmVkIGxvbmcgYmRpX3RocmVzaDsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzX3dyaXR0ZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgcGF1c2UgPSAxOwotCisJYm9vbCBkaXJ0eV9leGNlZWRlZCA9IGZhbHNlOwogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCiAJZm9yICg7OykgewpAQCAtNTAxLDE4ICs0OTksMTEgQEAKIAkJCS5yYW5nZV9jeWNsaWMJPSAxLAogCQl9OwogCi0JCWdldF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoLAotCQkJCSZiZGlfdGhyZXNoLCBiZGkpOwotCiAJCW5yX3JlY2xhaW1hYmxlID0gZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkgKwogCQkJCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpOwogCQlucl93cml0ZWJhY2sgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9XUklURUJBQ0spOwogCi0JCWJkaV9ucl9yZWNsYWltYWJsZSA9IGJkaV9zdGF0KGJkaSwgQkRJX1JFQ0xBSU1BQkxFKTsKLQkJYmRpX25yX3dyaXRlYmFjayA9IGJkaV9zdGF0KGJkaSwgQkRJX1dSSVRFQkFDSyk7Ci0KLQkJaWYgKGJkaV9ucl9yZWNsYWltYWJsZSArIGJkaV9ucl93cml0ZWJhY2sgPD0gYmRpX3RocmVzaCkKLQkJCWJyZWFrOworCQlnbG9iYWxfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCk7CiAKIAkJLyoKIAkJICogVGhyb3R0bGUgaXQgb25seSB3aGVuIHRoZSBiYWNrZ3JvdW5kIHdyaXRlYmFjayBjYW5ub3QKQEAgLTUyMywyNCArNTE0LDggQEAKIAkJCQkoYmFja2dyb3VuZF90aHJlc2ggKyBkaXJ0eV90aHJlc2gpIC8gMikKIAkJCWJyZWFrOwogCi0JCWlmICghYmRpLT5kaXJ0eV9leGNlZWRlZCkKLQkJCWJkaS0+ZGlydHlfZXhjZWVkZWQgPSAxOwotCi0JCS8qIE5vdGU6IG5yX3JlY2xhaW1hYmxlIGRlbm90ZXMgbnJfZGlydHkgKyBucl91bnN0YWJsZS4KLQkJICogVW5zdGFibGUgd3JpdGVzIGFyZSBhIGZlYXR1cmUgb2YgY2VydGFpbiBuZXR3b3JrZWQKLQkJICogZmlsZXN5c3RlbXMgKGkuZS4gTkZTKSBpbiB3aGljaCBkYXRhIG1heSBoYXZlIGJlZW4KLQkJICogd3JpdHRlbiB0byB0aGUgc2VydmVyJ3Mgd3JpdGUgY2FjaGUsIGJ1dCBoYXMgbm90IHlldAotCQkgKiBiZWVuIGZsdXNoZWQgdG8gcGVybWFuZW50IHN0b3JhZ2UuCi0JCSAqIE9ubHkgbW92ZSBwYWdlcyB0byB3cml0ZWJhY2sgaWYgdGhpcyBiZGkgaXMgb3ZlciBpdHMKLQkJICogdGhyZXNob2xkIG90aGVyd2lzZSB3YWl0IHVudGlsIHRoZSBkaXNrIHdyaXRlcyBjYXRjaAotCQkgKiB1cC4KLQkJICovCi0JCWlmIChiZGlfbnJfcmVjbGFpbWFibGUgPiBiZGlfdGhyZXNoKSB7Ci0JCQl3cml0ZWJhY2tfaW5vZGVzX3diKCZiZGktPndiLCAmd2JjKTsKLQkJCXBhZ2VzX3dyaXR0ZW4gKz0gd3JpdGVfY2h1bmsgLSB3YmMubnJfdG9fd3JpdGU7Ci0JCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwKLQkJCQkgICAgICAgJmJkaV90aHJlc2gsIGJkaSk7Ci0JCX0KKwkJYmRpX3RocmVzaCA9IGJkaV9kaXJ0eV9saW1pdChiZGksIGRpcnR5X3RocmVzaCk7CisJCWJkaV90aHJlc2ggPSB0YXNrX2RpcnR5X2xpbWl0KGN1cnJlbnQsIGJkaV90aHJlc2gpOwogCiAJCS8qCiAJCSAqIEluIG9yZGVyIHRvIGF2b2lkIHRoZSBzdGFja2VkIEJESSBkZWFkbG9jayB3ZSBuZWVkCkBAIC01NTUsMTYgKzUzMCw0NSBAQAogCQlpZiAoYmRpX3RocmVzaCA8IDIqYmRpX3N0YXRfZXJyb3IoYmRpKSkgewogCQkJYmRpX25yX3JlY2xhaW1hYmxlID0gYmRpX3N0YXRfc3VtKGJkaSwgQkRJX1JFQ0xBSU1BQkxFKTsKIAkJCWJkaV9ucl93cml0ZWJhY2sgPSBiZGlfc3RhdF9zdW0oYmRpLCBCRElfV1JJVEVCQUNLKTsKLQkJfSBlbHNlIGlmIChiZGlfbnJfcmVjbGFpbWFibGUpIHsKKwkJfSBlbHNlIHsKIAkJCWJkaV9ucl9yZWNsYWltYWJsZSA9IGJkaV9zdGF0KGJkaSwgQkRJX1JFQ0xBSU1BQkxFKTsKIAkJCWJkaV9ucl93cml0ZWJhY2sgPSBiZGlfc3RhdChiZGksIEJESV9XUklURUJBQ0spOwogCQl9CiAKLQkJaWYgKGJkaV9ucl9yZWNsYWltYWJsZSArIGJkaV9ucl93cml0ZWJhY2sgPD0gYmRpX3RocmVzaCkKLQkJCWJyZWFrOwotCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykKLQkJCWJyZWFrOwkJLyogV2UndmUgZG9uZSBvdXIgZHV0eSAqLworCQkvKgorCQkgKiBUaGUgYmRpIHRocmVzaCBpcyBzb21laG93ICJzb2Z0IiBsaW1pdCBkZXJpdmVkIGZyb20gdGhlCisJCSAqIGdsb2JhbCAiaGFyZCIgbGltaXQuIFRoZSBmb3JtZXIgaGVscHMgdG8gcHJldmVudCBoZWF2eSBJTworCQkgKiBiZGkgb3IgcHJvY2VzcyBmcm9tIGhvbGRpbmcgYmFjayBsaWdodCBvbmVzOyBUaGUgbGF0dGVyIGlzCisJCSAqIHRoZSBsYXN0IHJlc29ydCBzYWZlZ3VhcmQuCisJCSAqLworCQlkaXJ0eV9leGNlZWRlZCA9CisJCQkoYmRpX25yX3JlY2xhaW1hYmxlICsgYmRpX25yX3dyaXRlYmFjayA+PSBiZGlfdGhyZXNoKQorCQkJfHwgKG5yX3JlY2xhaW1hYmxlICsgbnJfd3JpdGViYWNrID49IGRpcnR5X3RocmVzaCk7CiAKKwkJaWYgKCFkaXJ0eV9leGNlZWRlZCkKKwkJCWJyZWFrOworCisJCWlmICghYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwkJCWJkaS0+ZGlydHlfZXhjZWVkZWQgPSAxOworCisJCS8qIE5vdGU6IG5yX3JlY2xhaW1hYmxlIGRlbm90ZXMgbnJfZGlydHkgKyBucl91bnN0YWJsZS4KKwkJICogVW5zdGFibGUgd3JpdGVzIGFyZSBhIGZlYXR1cmUgb2YgY2VydGFpbiBuZXR3b3JrZWQKKwkJICogZmlsZXN5c3RlbXMgKGkuZS4gTkZTKSBpbiB3aGljaCBkYXRhIG1heSBoYXZlIGJlZW4KKwkJICogd3JpdHRlbiB0byB0aGUgc2VydmVyJ3Mgd3JpdGUgY2FjaGUsIGJ1dCBoYXMgbm90IHlldAorCQkgKiBiZWVuIGZsdXNoZWQgdG8gcGVybWFuZW50IHN0b3JhZ2UuCisJCSAqIE9ubHkgbW92ZSBwYWdlcyB0byB3cml0ZWJhY2sgaWYgdGhpcyBiZGkgaXMgb3ZlciBpdHMKKwkJICogdGhyZXNob2xkIG90aGVyd2lzZSB3YWl0IHVudGlsIHRoZSBkaXNrIHdyaXRlcyBjYXRjaAorCQkgKiB1cC4KKwkJICovCisJCXRyYWNlX3diY19iYWxhbmNlX2RpcnR5X3N0YXJ0KCZ3YmMsIGJkaSk7CisJCWlmIChiZGlfbnJfcmVjbGFpbWFibGUgPiBiZGlfdGhyZXNoKSB7CisJCQl3cml0ZWJhY2tfaW5vZGVzX3diKCZiZGktPndiLCAmd2JjKTsKKwkJCXBhZ2VzX3dyaXR0ZW4gKz0gd3JpdGVfY2h1bmsgLSB3YmMubnJfdG9fd3JpdGU7CisJCQl0cmFjZV93YmNfYmFsYW5jZV9kaXJ0eV93cml0dGVuKCZ3YmMsIGJkaSk7CisJCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykKKwkJCQlicmVhazsJCS8qIFdlJ3ZlIGRvbmUgb3VyIGR1dHkgKi8KKwkJfQorCQl0cmFjZV93YmNfYmFsYW5jZV9kaXJ0eV93YWl0KCZ3YmMsIGJkaSk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaW9fc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CiAKQEAgLTU3Nyw4ICs1ODEsNyBAQAogCQkJcGF1c2UgPSBIWiAvIDEwOwogCX0KIAotCWlmIChiZGlfbnJfcmVjbGFpbWFibGUgKyBiZGlfbnJfd3JpdGViYWNrIDwgYmRpX3RocmVzaCAmJgotCQkJYmRpLT5kaXJ0eV9leGNlZWRlZCkKKwlpZiAoIWRpcnR5X2V4Y2VlZGVkICYmIGJkaS0+ZGlydHlfZXhjZWVkZWQpCiAJCWJkaS0+ZGlydHlfZXhjZWVkZWQgPSAwOwogCiAJaWYgKHdyaXRlYmFja19pbl9wcm9ncmVzcyhiZGkpKQpAQCAtNTkzLDkgKzU5Niw3IEBACiAJICogYmFja2dyb3VuZF90aHJlc2gsIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBkaXJ0eSBtZW1vcnkgbG93LgogCSAqLwogCWlmICgobGFwdG9wX21vZGUgJiYgcGFnZXNfd3JpdHRlbikgfHwKLQkgICAgKCFsYXB0b3BfbW9kZSAmJiAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpCi0JCQkgICAgICAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpKQotCQkJCQkgID4gYmFja2dyb3VuZF90aHJlc2gpKSkKKwkgICAgKCFsYXB0b3BfbW9kZSAmJiAobnJfcmVjbGFpbWFibGUgPiBiYWNrZ3JvdW5kX3RocmVzaCkpKQogCQliZGlfc3RhcnRfYmFja2dyb3VuZF93cml0ZWJhY2soYmRpKTsKIH0KIApAQCAtNjU5LDcgKzY2MCw3IEBACiAJdW5zaWduZWQgbG9uZyBkaXJ0eV90aHJlc2g7CiAKICAgICAgICAgZm9yICggOyA7ICkgewotCQlnZXRfZGlydHlfbGltaXRzKCZiYWNrZ3JvdW5kX3RocmVzaCwgJmRpcnR5X3RocmVzaCwgTlVMTCwgTlVMTCk7CisJCWdsb2JhbF9kaXJ0eV9saW1pdHMoJmJhY2tncm91bmRfdGhyZXNoLCAmZGlydHlfdGhyZXNoKTsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogQm9vc3QgdGhlIGFsbG93YWJsZSBkaXJ0eSB0aHJlc2hvbGQgYSBiaXQgZm9yIHBhZ2UKQEAgLTgwNSw2ICs4MDYsNDEgQEAKIH0KIAogLyoqCisgKiB0YWdfcGFnZXNfZm9yX3dyaXRlYmFjayAtIHRhZyBwYWdlcyB0byBiZSB3cml0dGVuIGJ5IHdyaXRlX2NhY2hlX3BhZ2VzCisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKKyAqIEBzdGFydDogc3RhcnRpbmcgcGFnZSBpbmRleAorICogQGVuZDogZW5kaW5nIHBhZ2UgaW5kZXggKGluY2x1c2l2ZSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRoZSBwYWdlIHJhbmdlIGZyb20gQHN0YXJ0IHRvIEBlbmQgKGluY2x1c2l2ZSkgYW5kIHRhZ3MKKyAqIGFsbCBwYWdlcyB0aGF0IGhhdmUgRElSVFkgdGFnIHNldCB3aXRoIGEgc3BlY2lhbCBUT1dSSVRFIHRhZy4gVGhlIGlkZWEgaXMKKyAqIHRoYXQgd3JpdGVfY2FjaGVfcGFnZXMgKG9yIHdob2V2ZXIgY2FsbHMgdGhpcyBmdW5jdGlvbikgd2lsbCB0aGVuIHVzZQorICogVE9XUklURSB0YWcgdG8gaWRlbnRpZnkgcGFnZXMgZWxpZ2libGUgZm9yIHdyaXRlYmFjay4gIFRoaXMgbWVjaGFuaXNtIGlzCisgKiB1c2VkIHRvIGF2b2lkIGxpdmVsb2NraW5nIG9mIHdyaXRlYmFjayBieSBhIHByb2Nlc3Mgc3RlYWRpbHkgY3JlYXRpbmcgbmV3CisgKiBkaXJ0eSBwYWdlcyBpbiB0aGUgZmlsZSAodGh1cyBpdCBpcyBpbXBvcnRhbnQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gYmUgcXVpY2sKKyAqIHNvIHRoYXQgaXQgY2FuIHRhZyBwYWdlcyBmYXN0ZXIgdGhhbiBhIGRpcnR5aW5nIHByb2Nlc3MgY2FuIGNyZWF0ZSB0aGVtKS4KKyAqLworLyoKKyAqIFdlIHRhZyBwYWdlcyBpbiBiYXRjaGVzIG9mIFdSSVRFQkFDS19UQUdfQkFUQ0ggdG8gcmVkdWNlIHRyZWVfbG9jayBsYXRlbmN5LgorICovCit2b2lkIHRhZ19wYWdlc19mb3Jfd3JpdGViYWNrKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJICAgICBwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCkKK3sKKyNkZWZpbmUgV1JJVEVCQUNLX1RBR19CQVRDSCA0MDk2CisJdW5zaWduZWQgbG9uZyB0YWdnZWQ7CisKKwlkbyB7CisJCXNwaW5fbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJCXRhZ2dlZCA9IHJhZGl4X3RyZWVfcmFuZ2VfdGFnX2lmX3RhZ2dlZCgmbWFwcGluZy0+cGFnZV90cmVlLAorCQkJCSZzdGFydCwgZW5kLCBXUklURUJBQ0tfVEFHX0JBVENILAorCQkJCVBBR0VDQUNIRV9UQUdfRElSVFksIFBBR0VDQUNIRV9UQUdfVE9XUklURSk7CisJCXNwaW5fdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwkJV0FSTl9PTl9PTkNFKHRhZ2dlZCA+IFdSSVRFQkFDS19UQUdfQkFUQ0gpOworCQljb25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxlICh0YWdnZWQgPj0gV1JJVEVCQUNLX1RBR19CQVRDSCk7Cit9CitFWFBPUlRfU1lNQk9MKHRhZ19wYWdlc19mb3Jfd3JpdGViYWNrKTsKKworLyoqCiAgKiB3cml0ZV9jYWNoZV9wYWdlcyAtIHdhbGsgdGhlIGxpc3Qgb2YgZGlydHkgcGFnZXMgb2YgdGhlIGdpdmVuIGFkZHJlc3Mgc3BhY2UgYW5kIHdyaXRlIGFsbCBvZiB0aGVtLgogICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCiAgKiBAd2JjOiBzdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gcGFnZXMgZnJvbSAqQHdiYy0+bnJfdG9fd3JpdGUKQEAgLTgxOCw2ICs4NTQsMTMgQEAKICAqIHRoZSBjYWxsIHdhcyBtYWRlIGdldCBuZXcgSS9PIHN0YXJ0ZWQgYWdhaW5zdCB0aGVtLiAgSWYgd2JjLT5zeW5jX21vZGUgaXMKICAqIFdCX1NZTkNfQUxMIHRoZW4gd2Ugd2VyZSBjYWxsZWQgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCB3ZSBtdXN0IHdhaXQgZm9yCiAgKiBleGlzdGluZyBJTyB0byBjb21wbGV0ZS4KKyAqCisgKiBUbyBhdm9pZCBsaXZlbG9ja3MgKHdoZW4gb3RoZXIgcHJvY2VzcyBkaXJ0aWVzIG5ldyBwYWdlcyksIHdlIGZpcnN0IHRhZworICogcGFnZXMgd2hpY2ggc2hvdWxkIGJlIHdyaXR0ZW4gYmFjayB3aXRoIFRPV1JJVEUgdGFnIGFuZCBvbmx5IHRoZW4gc3RhcnQKKyAqIHdyaXRpbmcgdGhlbS4gRm9yIGRhdGEtaW50ZWdyaXR5IHN5bmMgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHNvIHRoYXQgd2UgZG8KKyAqIG5vdCBtaXNzIHNvbWUgcGFnZXMgKGUuZy4sIGJlY2F1c2Ugc29tZSBvdGhlciBwcm9jZXNzIGhhcyBjbGVhcmVkIFRPV1JJVEUKKyAqIHRhZyB3ZSBzZXQpLiBUaGUgcnVsZSB3ZSBmb2xsb3cgaXMgdGhhdCBUT1dSSVRFIHRhZyBjYW4gYmUgY2xlYXJlZCBvbmx5CisgKiBieSB0aGUgcHJvY2VzcyBjbGVhcmluZyB0aGUgRElSVFkgdGFnIChhbmQgc3VibWl0dGluZyB0aGUgcGFnZSBmb3IgSU8pLgogICovCiBpbnQgd3JpdGVfY2FjaGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCB3cml0ZXBhZ2VfdCB3cml0ZXBhZ2UsCkBAIC04MzMsNiArODc2LDcgQEAKIAlwZ29mZl90IGRvbmVfaW5kZXg7CiAJaW50IGN5Y2xlZDsKIAlpbnQgcmFuZ2Vfd2hvbGUgPSAwOworCWludCB0YWc7CiAKIAlwYWdldmVjX2luaXQoJnB2ZWMsIDApOwogCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgewpAQCAtODQ5LDI5ICs4OTMsMTkgQEAKIAkJaWYgKHdiYy0+cmFuZ2Vfc3RhcnQgPT0gMCAmJiB3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpCiAJCQlyYW5nZV93aG9sZSA9IDE7CiAJCWN5Y2xlZCA9IDE7IC8qIGlnbm9yZSByYW5nZV9jeWNsaWMgdGVzdHMgKi8KLQotCQkvKgotCQkgKiBJZiB0aGlzIGlzIGEgZGF0YSBpbnRlZ3JpdHkgc3luYywgY2FwIHRoZSB3cml0ZWJhY2sgdG8gdGhlCi0JCSAqIGN1cnJlbnQgZW5kIG9mIGZpbGUuIEFueSBleHRlbnNpb24gdG8gdGhlIGZpbGUgdGhhdCBvY2N1cnMKLQkJICogYWZ0ZXIgdGhpcyBpcyBhIG5ldyB3cml0ZSBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3cml0ZSB0aG9zZQotCQkgKiBwYWdlcyBvdXQgdG8gZnVsZmlsIG91ciBkYXRhIGludGVncml0eSByZXF1aXJlbWVudHMuIElmIHdlCi0JCSAqIHRyeSB0byB3cml0ZSB0aGVtIG91dCwgd2UgY2FuIGdldCBzdHVjayBpbiB0aGlzIHNjYW4gdW50aWwKLQkJICogdGhlIGNvbmN1cnJlbnQgd3JpdGVyIHN0b3BzIGFkZGluZyBkaXJ0eSBwYWdlcyBhbmQgZXh0ZW5kaW5nCi0JCSAqIEVPRi4KLQkJICovCi0JCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCAmJgotCQkgICAgd2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKSB7Ci0JCQllbmQgPSBpX3NpemVfcmVhZChtYXBwaW5nLT5ob3N0KSA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQl9CiAJfQotCisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQorCQl0YWcgPSBQQUdFQ0FDSEVfVEFHX1RPV1JJVEU7CisJZWxzZQorCQl0YWcgPSBQQUdFQ0FDSEVfVEFHX0RJUlRZOwogcmV0cnk6CisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQorCQl0YWdfcGFnZXNfZm9yX3dyaXRlYmFjayhtYXBwaW5nLCBpbmRleCwgZW5kKTsKIAlkb25lX2luZGV4ID0gaW5kZXg7CiAJd2hpbGUgKCFkb25lICYmIChpbmRleCA8PSBlbmQpKSB7CiAJCWludCBpOwogCi0JCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCi0JCQkgICAgICBQQUdFQ0FDSEVfVEFHX0RJUlRZLAorCQlucl9wYWdlcyA9IHBhZ2V2ZWNfbG9va3VwX3RhZygmcHZlYywgbWFwcGluZywgJmluZGV4LCB0YWcsCiAJCQkgICAgICBtaW4oZW5kIC0gaW5kZXgsIChwZ29mZl90KVBBR0VWRUNfU0laRS0xKSArIDEpOwogCQlpZiAobnJfcGFnZXMgPT0gMCkKIAkJCWJyZWFrOwpAQCAtOTI5LDYgKzk2Myw3IEBACiAJCQlpZiAoIWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpKQogCQkJCWdvdG8gY29udGludWVfdW5sb2NrOwogCisJCQl0cmFjZV93YmNfd3JpdGVwYWdlKHdiYywgbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyk7CiAJCQlyZXQgPSAoKndyaXRlcGFnZSkocGFnZSwgd2JjLCBkYXRhKTsKIAkJCWlmICh1bmxpa2VseShyZXQpKSB7CiAJCQkJaWYgKHJldCA9PSBBT1BfV1JJVEVQQUdFX0FDVElWQVRFKSB7CkBAIC0xMzI3LDYgKzEzNjIsOSBAQAogCQkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJm1hcHBpbmctPnBhZ2VfdHJlZSwKIAkJCQkJCXBhZ2VfaW5kZXgocGFnZSksCiAJCQkJCQlQQUdFQ0FDSEVfVEFHX0RJUlRZKTsKKwkJcmFkaXhfdHJlZV90YWdfY2xlYXIoJm1hcHBpbmctPnBhZ2VfdHJlZSwKKwkJCQkgICAgIHBhZ2VfaW5kZXgocGFnZSksCisJCQkJICAgICBQQUdFQ0FDSEVfVEFHX1RPV1JJVEUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXBwaW5nLT50cmVlX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlyZXQgPSBUZXN0U2V0UGFnZVdyaXRlYmFjayhwYWdlKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA5YmQzMzllLi5hOTY0OWY0IDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xNzM4LDcgKzE3MzgsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJLyogQWNxdWlyZSB0aGUgT09NIGtpbGxlciBsb2NrIGZvciB0aGUgem9uZXMgaW4gem9uZWxpc3QgKi8KLQlpZiAoIXRyeV9zZXRfem9uZV9vb20oem9uZWxpc3QsIGdmcF9tYXNrKSkgeworCWlmICghdHJ5X3NldF96b25lbGlzdF9vb20oem9uZWxpc3QsIGdmcF9tYXNrKSkgewogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTc1OSw2ICsxNzU5LDkgQEAKIAkJLyogVGhlIE9PTSBraWxsZXIgd2lsbCBub3QgaGVscCBoaWdoZXIgb3JkZXIgYWxsb2NzICovCiAJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKQogCQkJZ290byBvdXQ7CisJCS8qIFRoZSBPT00ga2lsbGVyIGRvZXMgbm90IG5lZWRsZXNzbHkga2lsbCB0YXNrcyBmb3IgbG93bWVtICovCisJCWlmIChoaWdoX3pvbmVpZHggPCBaT05FX05PUk1BTCkKKwkJCWdvdG8gb3V0OwogCQkvKgogCQkgKiBHRlBfVEhJU05PREUgY29udGFpbnMgX19HRlBfTk9SRVRSWSBhbmQgd2UgbmV2ZXIgaGl0IHRoaXMuCiAJCSAqIFNhbml0eSBjaGVjayBmb3IgYmFyZSBjYWxscyBvZiBfX0dGUF9USElTTk9ERSwgbm90IHJlYWwgT09NLgpAQCAtMjA1MiwxNSArMjA1NSwyMyBAQAogCQkJaWYgKHBhZ2UpCiAJCQkJZ290byBnb3RfcGc7CiAKLQkJCS8qCi0JCQkgKiBUaGUgT09NIGtpbGxlciBkb2VzIG5vdCB0cmlnZ2VyIGZvciBoaWdoLW9yZGVyCi0JCQkgKiB+X19HRlBfTk9GQUlMIGFsbG9jYXRpb25zIHNvIGlmIG5vIHByb2dyZXNzIGlzIGJlaW5nCi0JCQkgKiBtYWRlLCB0aGVyZSBhcmUgbm8gb3RoZXIgb3B0aW9ucyBhbmQgcmV0cnlpbmcgaXMKLQkJCSAqIHVubGlrZWx5IHRvIGhlbHAuCi0JCQkgKi8KLQkJCWlmIChvcmRlciA+IFBBR0VfQUxMT0NfQ09TVExZX09SREVSICYmCi0JCQkJCQkhKGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKSkKLQkJCQlnb3RvIG5vcGFnZTsKKwkJCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKSkgeworCQkJCS8qCisJCQkJICogVGhlIG9vbSBraWxsZXIgaXMgbm90IGNhbGxlZCBmb3IgaGlnaC1vcmRlcgorCQkJCSAqIGFsbG9jYXRpb25zIHRoYXQgbWF5IGZhaWwsIHNvIGlmIG5vIHByb2dyZXNzCisJCQkJICogaXMgYmVpbmcgbWFkZSwgdGhlcmUgYXJlIG5vIG90aGVyIG9wdGlvbnMgYW5kCisJCQkJICogcmV0cnlpbmcgaXMgdW5saWtlbHkgdG8gaGVscC4KKwkJCQkgKi8KKwkJCQlpZiAob3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikKKwkJCQkJZ290byBub3BhZ2U7CisJCQkJLyoKKwkJCQkgKiBUaGUgb29tIGtpbGxlciBpcyBub3QgY2FsbGVkIGZvciBsb3dtZW0KKwkJCQkgKiBhbGxvY2F0aW9ucyB0byBwcmV2ZW50IG5lZWRsZXNzbHkga2lsbGluZworCQkJCSAqIGlubm9jZW50IHRhc2tzLgorCQkJCSAqLworCQkJCWlmIChoaWdoX3pvbmVpZHggPCBaT05FX05PUk1BTCkKKwkJCQkJZ290byBub3BhZ2U7CisJCQl9CiAKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQpAQCAtNDA4OSw4ICs0MTAwLDYgQEAKIAkJem9uZV9zZXFsb2NrX2luaXQoem9uZSk7CiAJCXpvbmUtPnpvbmVfcGdkYXQgPSBwZ2RhdDsKIAotCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gREVGX1BSSU9SSVRZOwotCiAJCXpvbmVfcGNwX2luaXQoem9uZSk7CiAJCWZvcl9lYWNoX2xydShsKSB7CiAJCQlJTklUX0xJU1RfSEVBRCgmem9uZS0+bHJ1W2xdLmxpc3QpOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IDMxYTNiOTYuLjJkZWU5NzUgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYworKysgYi9tbS9wYWdlX2lvLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQotCQlydyB8PSAoMSA8PCBCSU9fUldfU1lOQ0lPKSB8ICgxIDw8IEJJT19SV19VTlBMVUcpOworCQlydyB8PSBSRVFfU1lOQyB8IFJFUV9VTlBMVUc7CiAJY291bnRfdm1fZXZlbnQoUFNXUE9VVCk7CiAJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDM4YTMzNmUuLmE3ZDBmNTQgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTEzMiw5ICsxMzIsMTQgQEAKIAkJCWlmICh1bmxpa2VseSghYW5vbl92bWEpKQogCQkJCWdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YzsKIAkJCWFsbG9jYXRlZCA9IGFub25fdm1hOworCQkJLyoKKwkJCSAqIFRoaXMgVk1BIGhhZCBubyBhbm9uX3ZtYSB5ZXQuICBUaGlzIGFub25fdm1hIGlzCisJCQkgKiB0aGUgcm9vdCBvZiBhbnkgYW5vbl92bWEgdHJlZSB0aGF0IG1pZ2h0IGZvcm0uCisJCQkgKi8KKwkJCWFub25fdm1hLT5yb290ID0gYW5vbl92bWE7CiAJCX0KIAotCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwkJYW5vbl92bWFfbG9jayhhbm9uX3ZtYSk7CiAJCS8qIHBhZ2VfdGFibGVfbG9jayB0byBwcm90ZWN0IGFnYWluc3QgdGhyZWFkcyAqLwogCQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlpZiAobGlrZWx5KCF2bWEtPmFub25fdm1hKSkgewpAQCAtMTQyLDEyICsxNDcsMTIgQEAKIAkJCWF2Yy0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKIAkJCWF2Yy0+dm1hID0gdm1hOwogCQkJbGlzdF9hZGQoJmF2Yy0+c2FtZV92bWEsICZ2bWEtPmFub25fdm1hX2NoYWluKTsKLQkJCWxpc3RfYWRkKCZhdmMtPnNhbWVfYW5vbl92bWEsICZhbm9uX3ZtYS0+aGVhZCk7CisJCQlsaXN0X2FkZF90YWlsKCZhdmMtPnNhbWVfYW5vbl92bWEsICZhbm9uX3ZtYS0+aGVhZCk7CiAJCQlhbGxvY2F0ZWQgPSBOVUxMOwogCQkJYXZjID0gTlVMTDsKIAkJfQogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAKIAkJaWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpCiAJCQlhbm9uX3ZtYV9mcmVlKGFsbG9jYXRlZCk7CkBAIC0xNzAsOSArMTc1LDkgQEAKIAlhdmMtPmFub25fdm1hID0gYW5vbl92bWE7CiAJbGlzdF9hZGQoJmF2Yy0+c2FtZV92bWEsICZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAotCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOworCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwogCWxpc3RfYWRkX3RhaWwoJmF2Yy0+c2FtZV9hbm9uX3ZtYSwgJmFub25fdm1hLT5oZWFkKTsKLQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOworCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiB9CiAKIC8qCkBAIC0yMjQsOSArMjI5LDIxIEBACiAJYXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoKTsKIAlpZiAoIWF2YykKIAkJZ290byBvdXRfZXJyb3JfZnJlZV9hbm9uX3ZtYTsKLQlhbm9uX3ZtYV9jaGFpbl9saW5rKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CisKKwkvKgorCSAqIFRoZSByb290IGFub25fdm1hJ3Mgc3BpbmxvY2sgaXMgdGhlIGxvY2sgYWN0dWFsbHkgdXNlZCB3aGVuIHdlCisJICogbG9jayBhbnkgb2YgdGhlIGFub25fdm1hcyBpbiB0aGlzIGFub25fdm1hIHRyZWUuCisJICovCisJYW5vbl92bWEtPnJvb3QgPSBwdm1hLT5hbm9uX3ZtYS0+cm9vdDsKKwkvKgorCSAqIFdpdGggS1NNIHJlZmNvdW50cywgYW4gYW5vbl92bWEgY2FuIHN0YXkgYXJvdW5kIGxvbmdlciB0aGFuIHRoZQorCSAqIHByb2Nlc3MgaXQgYmVsb25ncyB0by4gIFRoZSByb290IGFub25fdm1hIG5lZWRzIHRvIGJlIHBpbm5lZAorCSAqIHVudGlsIHRoaXMgYW5vbl92bWEgaXMgZnJlZWQsIGJlY2F1c2UgdGhlIGxvY2sgbGl2ZXMgaW4gdGhlIHJvb3QuCisJICovCisJZ2V0X2Fub25fdm1hKGFub25fdm1hLT5yb290KTsKIAkvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovCiAJdm1hLT5hbm9uX3ZtYSA9IGFub25fdm1hOworCWFub25fdm1hX2NoYWluX2xpbmsodm1hLCBhdmMsIGFub25fdm1hKTsKIAogCXJldHVybiAwOwogCkBAIC0yNDYsMjIgKzI2MywyOSBAQAogCWlmICghYW5vbl92bWEpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOworCWFub25fdm1hX2xvY2soYW5vbl92bWEpOwogCWxpc3RfZGVsKCZhbm9uX3ZtYV9jaGFpbi0+c2FtZV9hbm9uX3ZtYSk7CiAKIAkvKiBXZSBtdXN0IGdhcmJhZ2UgY29sbGVjdCB0aGUgYW5vbl92bWEgaWYgaXQncyBlbXB0eSAqLwogCWVtcHR5ID0gbGlzdF9lbXB0eSgmYW5vbl92bWEtPmhlYWQpICYmICFhbm9udm1hX2V4dGVybmFsX3JlZmNvdW50KGFub25fdm1hKTsKLQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOworCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAKLQlpZiAoZW1wdHkpCisJaWYgKGVtcHR5KSB7CisJCS8qIFdlIG5vIGxvbmdlciBuZWVkIHRoZSByb290IGFub25fdm1hICovCisJCWlmIChhbm9uX3ZtYS0+cm9vdCAhPSBhbm9uX3ZtYSkKKwkJCWRyb3BfYW5vbl92bWEoYW5vbl92bWEtPnJvb3QpOwogCQlhbm9uX3ZtYV9mcmVlKGFub25fdm1hKTsKKwl9CiB9CiAKIHZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKm5leHQ7CiAKLQkvKiBVbmxpbmsgZWFjaCBhbm9uX3ZtYSBjaGFpbmVkIHRvIHRoZSBWTUEuICovCisJLyoKKwkgKiBVbmxpbmsgZWFjaCBhbm9uX3ZtYSBjaGFpbmVkIHRvIHRoZSBWTUEuICBUaGlzIGxpc3QgaXMgb3JkZXJlZAorCSAqIGZyb20gbmV3ZXN0IHRvIG9sZGVzdCwgZW5zdXJpbmcgdGhlIHJvb3QgYW5vbl92bWEgZ2V0cyBmcmVlZCBsYXN0LgorCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdmMsIG5leHQsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgewogCQlhbm9uX3ZtYV91bmxpbmsoYXZjKTsKIAkJbGlzdF9kZWwoJmF2Yy0+c2FtZV92bWEpOwpAQCAtMzAyLDcgKzMyNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJYW5vbl92bWEgPSAoc3RydWN0IGFub25fdm1hICopIChhbm9uX21hcHBpbmcgLSBQQUdFX01BUFBJTkdfQU5PTik7Ci0Jc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJYW5vbl92bWFfbG9jayhhbm9uX3ZtYSk7CiAJcmV0dXJuIGFub25fdm1hOwogb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMzExLDcgKzMzNSw3IEBACiAKIHZvaWQgcGFnZV91bmxvY2tfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKLQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOworCWFub25fdm1hX3VubG9jayhhbm9uX3ZtYSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTM0MCw5ICszNjQsMTAgQEAKICAqLwogdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKLQlpZiAoUGFnZUFub24ocGFnZSkpCi0JCTsKLQllbHNlIGlmIChwYWdlLT5tYXBwaW5nICYmICEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpIHsKKwlpZiAoUGFnZUFub24ocGFnZSkpIHsKKwkJaWYgKHZtYS0+YW5vbl92bWEtPnJvb3QgIT0gcGFnZV9hbm9uX3ZtYShwYWdlKS0+cm9vdCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0gZWxzZSBpZiAocGFnZS0+bWFwcGluZyAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSB7CiAJCWlmICghdm1hLT52bV9maWxlIHx8CiAJCSAgICB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyAhPSBwYWdlLT5tYXBwaW5nKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC03NDMsMTQgKzc2OCwyMCBAQAogCSAqIElmIHRoZSBwYWdlIGlzbid0IGV4Y2x1c2l2ZWx5IG1hcHBlZCBpbnRvIHRoaXMgdm1hLAogCSAqIHdlIG11c3QgdXNlIHRoZSBfb2xkZXN0XyBwb3NzaWJsZSBhbm9uX3ZtYSBmb3IgdGhlCiAJICogcGFnZSBtYXBwaW5nIQotCSAqCi0JICogU28gdGFrZSB0aGUgbGFzdCBBVkMgY2hhaW4gZW50cnkgaW4gdGhlIHZtYSwgd2hpY2ggaXMKLQkgKiB0aGUgZGVlcGVzdCBhbmNlc3RvciwgYW5kIHVzZSB0aGUgYW5vbl92bWEgZnJvbSB0aGF0LgogCSAqLwogCWlmICghZXhjbHVzaXZlKSB7Ci0JCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOwotCQlhdmMgPSBsaXN0X2VudHJ5KHZtYS0+YW5vbl92bWFfY2hhaW4ucHJldiwgc3RydWN0IGFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSk7Ci0JCWFub25fdm1hID0gYXZjLT5hbm9uX3ZtYTsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJcmV0dXJuOworCQlhbm9uX3ZtYSA9IGFub25fdm1hLT5yb290OworCX0gZWxzZSB7CisJCS8qCisJCSAqIEluIHRoaXMgY2FzZSwgc3dhcHBlZC1vdXQtYnV0LW5vdC1kaXNjYXJkZWQgc3dhcC1jYWNoZQorCQkgKiBpcyByZW1hcHBlZC4gU28sIG5vIG5lZWQgdG8gdXBkYXRlIHBhZ2UtPm1hcHBpbmcgaGVyZS4KKwkJICogV2UgY29udmljZSBhbm9uX3ZtYSBwb2l0bmVkIGJ5IHBhZ2UtPm1hcHBpbmcgaXMgbm90IG9ic29sZXRlCisJCSAqIGJlY2F1c2Ugdm1hLT5hbm9uX3ZtYSBpcyBuZWNlc3NhcnkgdG8gYmUgYSBmYW1pbHkgb2YgaXQuCisJCSAqLworCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQlyZXR1cm47CiAJfQogCiAJYW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIFBBR0VfTUFQUElOR19BTk9OOwpAQCAtNzgwLDYgKzgxMSw3IEBACiAJICogYXJlIGluaXRpYWxseSBvbmx5IHZpc2libGUgdmlhIHRoZSBwYWdldGFibGVzLCBhbmQgdGhlIHB0ZSBpcyBsb2NrZWQKIAkgKiBvdmVyIHRoZSBjYWxsIHRvIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAuCiAJICovCisJQlVHX09OKHBhZ2VfYW5vbl92bWEocGFnZSktPnJvb3QgIT0gdm1hLT5hbm9uX3ZtYS0+cm9vdCk7CiAJQlVHX09OKHBhZ2UtPmluZGV4ICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOwogI2VuZGlmCiB9CkBAIC03OTgsNiArODMwLDE3IEBACiB2b2lkIHBhZ2VfYWRkX2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqcGFnZSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeworCWRvX3BhZ2VfYWRkX2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MsIDApOworfQorCisvKgorICogU3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSBmb3IgZG9fc3dhcF9wYWdlLCB3aGljaCBvZnRlbiBydW5zCisgKiBpbnRvIHBhZ2VzIHRoYXQgYXJlIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3MuCisgKiBFdmVyeWJvZHkgZWxzZSBzaG91bGQgY29udGludWUgdG8gdXNlIHBhZ2VfYWRkX2Fub25fcm1hcCBhYm92ZS4KKyAqLwordm9pZCBkb19wYWdlX2FkZF9hbm9uX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UsCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IGV4Y2x1c2l2ZSkKK3sKIAlpbnQgZmlyc3QgPSBhdG9taWNfaW5jX2FuZF90ZXN0KCZwYWdlLT5fbWFwY291bnQpOwogCWlmIChmaXJzdCkKIAkJX19pbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0FOT05fUEFHRVMpOwpAQCAtODA3LDcgKzg1MCw3IEBACiAJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlWTV9CVUdfT04oYWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwgYWRkcmVzcyA+PSB2bWEtPnZtX2VuZCk7CiAJaWYgKGZpcnN0KQotCQlfX3BhZ2Vfc2V0X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MsIDApOworCQlfX3BhZ2Vfc2V0X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MsIGV4Y2x1c2l2ZSk7CiAJZWxzZQogCQlfX3BhZ2VfY2hlY2tfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CiB9CkBAIC0xMzY4LDYgKzE0MTEsNDIgQEAKIAkJcmV0dXJuIHRyeV90b191bm1hcF9maWxlKHBhZ2UsIFRUVV9NVU5MT0NLKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0tTTSkgfHwgZGVmaW5lZChDT05GSUdfTUlHUkFUSU9OKQorLyoKKyAqIERyb3AgYW4gYW5vbl92bWEgcmVmY291bnQsIGZyZWVpbmcgdGhlIGFub25fdm1hIGFuZCBhbm9uX3ZtYS0+cm9vdAorICogaWYgbmVjZXNzYXJ5LiAgQmUgY2FyZWZ1bCB0byBkbyBhbGwgdGhlIHRlc3RzIHVuZGVyIHRoZSBsb2NrLiAgT25jZQorICogd2Uga25vdyB3ZSBhcmUgdGhlIGxhc3QgdXNlciwgbm9ib2R5IGVsc2UgY2FuIGdldCBhIHJlZmVyZW5jZSBhbmQgd2UKKyAqIGNhbiBkbyB0aGUgZnJlZWluZyB3aXRob3V0IHRoZSBsb2NrLgorICovCit2b2lkIGRyb3BfYW5vbl92bWEoc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJmFub25fdm1hLT5leHRlcm5hbF9yZWZjb3VudCkgPD0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJmFub25fdm1hLT5leHRlcm5hbF9yZWZjb3VudCwgJmFub25fdm1hLT5yb290LT5sb2NrKSkgeworCQlzdHJ1Y3QgYW5vbl92bWEgKnJvb3QgPSBhbm9uX3ZtYS0+cm9vdDsKKwkJaW50IGVtcHR5ID0gbGlzdF9lbXB0eSgmYW5vbl92bWEtPmhlYWQpOworCQlpbnQgbGFzdF9yb290X3VzZXIgPSAwOworCQlpbnQgcm9vdF9lbXB0eSA9IDA7CisKKwkJLyoKKwkJICogVGhlIHJlZmNvdW50IG9uIGEgbm9uLXJvb3QgYW5vbl92bWEgZ290IGRyb3BwZWQuICBEcm9wCisJCSAqIHRoZSByZWZjb3VudCBvbiB0aGUgcm9vdCBhbmQgY2hlY2sgaWYgd2UgbmVlZCB0byBmcmVlIGl0LgorCQkgKi8KKwkJaWYgKGVtcHR5ICYmIGFub25fdm1hICE9IHJvb3QpIHsKKwkJCUJVR19PTihhdG9taWNfcmVhZCgmcm9vdC0+ZXh0ZXJuYWxfcmVmY291bnQpIDw9IDApOworCQkJbGFzdF9yb290X3VzZXIgPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZyb290LT5leHRlcm5hbF9yZWZjb3VudCk7CisJCQlyb290X2VtcHR5ID0gbGlzdF9lbXB0eSgmcm9vdC0+aGVhZCk7CisJCX0KKwkJYW5vbl92bWFfdW5sb2NrKGFub25fdm1hKTsKKworCQlpZiAoZW1wdHkpIHsKKwkJCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOworCQkJaWYgKHJvb3RfZW1wdHkgJiYgbGFzdF9yb290X3VzZXIpCisJCQkJYW5vbl92bWFfZnJlZShyb290KTsKKwkJfQorCX0KK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgogLyoKICAqIHJtYXBfd2FsaygpIGFuZCBpdHMgaGVscGVycyBybWFwX3dhbGtfYW5vbigpIGFuZCBybWFwX3dhbGtfZmlsZSgpOgpAQCAtMTM4OSw3ICsxNDY4LDcgQEAKIAlhbm9uX3ZtYSA9IHBhZ2VfYW5vbl92bWEocGFnZSk7CiAJaWYgKCFhbm9uX3ZtYSkKIAkJcmV0dXJuIHJldDsKLQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKKwlhbm9uX3ZtYV9sb2NrKGFub25fdm1hKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF2YywgJmFub25fdm1hLT5oZWFkLCBzYW1lX2Fub25fdm1hKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXZjLT52bWE7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CkBAIC0xMzk5LDcgKzE0NzgsNyBAQAogCQlpZiAocmV0ICE9IFNXQVBfQUdBSU4pCiAJCQlicmVhazsKIAl9Ci0Jc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwlhbm9uX3ZtYV91bmxvY2soYW5vbl92bWEpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGY2NWY4NDAuLmRmYWEwZjQgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdV9jb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzaG1fbW50OwpAQCAtMjMzLDEwICsyMzQsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtPmlfc2IpOwogCWlmIChzYmluZm8tPm1heF9ibG9ja3MpIHsKLQkJc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7Ci0JCXNiaW5mby0+ZnJlZV9ibG9ja3MgKz0gcGFnZXM7CisJCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpbmZvLT51c2VkX2Jsb2NrcywgLXBhZ2VzKTsKKwkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJaW5vZGUtPmlfYmxvY2tzIC09IHBhZ2VzKkJMT0NLU19QRVJfUEFHRTsKLQkJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCX0KIH0KIApAQCAtNDE2LDE5ICs0MTcsMTcgQEAKIAkJaWYgKHNncCA9PSBTR1BfUkVBRCkKIAkJCXJldHVybiBzaG1lbV9zd3BfbWFwKFpFUk9fUEFHRSgwKSk7CiAJCS8qCi0JCSAqIFRlc3QgZnJlZV9ibG9ja3MgYWdhaW5zdCAxIG5vdCAwLCBzaW5jZSB3ZSBoYXZlIDEgZGF0YQorCQkgKiBUZXN0IHVzZWRfYmxvY2tzIGFnYWluc3QgMSBsZXNzIG1heF9ibG9ja3MsIHNpbmNlIHdlIGhhdmUgMSBkYXRhCiAJCSAqIHBhZ2UgKGFuZCBwZXJoYXBzIGluZGlyZWN0IGluZGV4IHBhZ2VzKSB5ZXQgdG8gYWxsb2NhdGU6CiAJCSAqIGEgd2FzdGUgdG8gYWxsb2NhdGUgaW5kZXggaWYgd2UgY2Fubm90IGFsbG9jYXRlIGRhdGEuCiAJCSAqLwogCQlpZiAoc2JpbmZvLT5tYXhfYmxvY2tzKSB7Ci0JCQlzcGluX2xvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKLQkJCWlmIChzYmluZm8tPmZyZWVfYmxvY2tzIDw9IDEpIHsKLQkJCQlzcGluX3VubG9jaygmc2JpbmZvLT5zdGF0X2xvY2spOworCQkJaWYgKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsIChzYmluZm8tPm1heF9ibG9ja3MgLSAxKSkgPiAwKQogCQkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwotCQkJfQotCQkJc2JpbmZvLT5mcmVlX2Jsb2Nrcy0tOworCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKKwkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwotCQkJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJfQogCiAJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTc2Nyw2ICs3NjYsMTAgQEAKIAlsb2ZmX3QgbmV3c2l6ZSA9IGF0dHItPmlhX3NpemU7CiAJaW50IGVycm9yOwogCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQogCQkJCQkmJiBuZXdzaXplICE9IGlub2RlLT5pX3NpemUpIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwpAQCAtODAxLDI1ICs4MDQsMjIgQEAKIAkJCX0KIAkJfQogCi0JCWVycm9yID0gc2ltcGxlX3NldHNpemUoaW5vZGUsIG5ld3NpemUpOworCQkvKiBYWFgodHJ1bmNhdGUpOiB0cnVuY2F0ZV9zZXRzaXplIHNob3VsZCBiZSBjYWxsZWQgbGFzdCAqLworCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBuZXdzaXplKTsKIAkJaWYgKHBhZ2UpCiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKIAkJc2htZW1fdHJ1bmNhdGVfcmFuZ2UoaW5vZGUsIG5ld3NpemUsIChsb2ZmX3QpLTEpOwogCX0KIAotCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKLQlpZiAoIWVycm9yKQotCQlnZW5lcmljX3NldGF0dHIoaW5vZGUsIGF0dHIpOworCXNldGF0dHJfY29weShpbm9kZSwgYXR0cik7CiAjaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTAotCWlmICghZXJyb3IgJiYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpCiAJCWVycm9yID0gZ2VuZXJpY19hY2xfY2htb2QoaW5vZGUpOwogI2VuZGlmCiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBzaG1lbV9kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyB2b2lkIHNobWVtX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKIApAQCAtODM2LDcgKzgzNiw3IEBACiAJfQogCUJVR19PTihpbm9kZS0+aV9ibG9ja3MpOwogCXNobWVtX2ZyZWVfaW5vZGUoaW5vZGUtPmlfc2IpOwotCWNsZWFyX2lub2RlKGlub2RlKTsKKwllbmRfd3JpdGViYWNrKGlub2RlKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2htZW1fZmluZF9zd3Aoc3dwX2VudHJ5X3QgZW50cnksIHN3cF9lbnRyeV90ICpkaXIsIHN3cF9lbnRyeV90ICplZGlyKQpAQCAtOTMzLDcgKzkzMyw3IEBACiAKIAkvKgogCSAqIE1vdmUgX2hlYWRfIHRvIHN0YXJ0IHNlYXJjaCBmb3IgbmV4dCBmcm9tIGhlcmUuCi0JICogQnV0IGJlIGNhcmVmdWw6IHNobWVtX2RlbGV0ZV9pbm9kZSBjaGVja3MgbGlzdF9lbXB0eSB3aXRob3V0IHRha2luZworCSAqIEJ1dCBiZSBjYXJlZnVsOiBzaG1lbV9ldmljdF9pbm9kZSBjaGVja3MgbGlzdF9lbXB0eSB3aXRob3V0IHRha2luZwogCSAqIG11dGV4LCBhbmQgdGhlcmUncyBhbiBpbnN0YW50IGluIGxpc3RfbW92ZV90YWlsIHdoZW4gaW5mby0+c3dhcGxpc3QKIAkgKiB3b3VsZCBhcHBlYXIgZW1wdHksIGlmIGl0IHdlcmUgdGhlIG9ubHkgb25lIG9uIHNobWVtX3N3YXBsaXN0LiAgV2UKIAkgKiBjb3VsZCBhdm9pZCBkb2luZyBpdCBpZiBpbm9kZSBOVUxMOyBvciB1c2UgdGhpcyBtaW5vciBvcHRpbWl6YXRpb24uCkBAIC0xMjIzLDYgKzEyMjMsNyBAQAogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm87CiAJc3RydWN0IHBhZ2UgKmZpbGVwYWdlID0gKnBhZ2VwOwogCXN0cnVjdCBwYWdlICpzd2FwcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcHJlYWxsb2NfcGFnZSA9IE5VTEw7CiAJc3dwX2VudHJ5X3QgKmVudHJ5OwogCXN3cF9lbnRyeV90IHN3YXA7CiAJZ2ZwX3QgZ2ZwOwpAQCAtMTI0Nyw3ICsxMjQ4LDYgQEAKIAkJZmlsZXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpZHgpOwogCWlmIChmaWxlcGFnZSAmJiBQYWdlVXB0b2RhdGUoZmlsZXBhZ2UpKQogCQlnb3RvIGRvbmU7Ci0JZXJyb3IgPSAwOwogCWdmcCA9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7CiAJaWYgKCFmaWxlcGFnZSkgewogCQkvKgpAQCAtMTI1OCw3ICsxMjU4LDE5IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZmFpbGVkOwogCQlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CisJCWlmIChzZ3AgIT0gU0dQX1JFQUQgJiYgIXByZWFsbG9jX3BhZ2UpIHsKKwkJCS8qIFdlIGRvbid0IGNhcmUgaWYgdGhpcyBmYWlscyAqLworCQkJcHJlYWxsb2NfcGFnZSA9IHNobWVtX2FsbG9jX3BhZ2UoZ2ZwLCBpbmZvLCBpZHgpOworCQkJaWYgKHByZWFsbG9jX3BhZ2UpIHsKKwkJCQlpZiAobWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocHJlYWxsb2NfcGFnZSwKKwkJCQkJCWN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKSkgeworCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocHJlYWxsb2NfcGFnZSk7CisJCQkJCXByZWFsbG9jX3BhZ2UgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJfQogCX0KKwllcnJvciA9IDA7CiAKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOwogCXNobWVtX3JlY2FsY19pbm9kZShpbm9kZSk7CkBAIC0xMzg3LDE3ICsxMzk5LDE2IEBACiAJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7CiAJCXNiaW5mbyA9IFNITUVNX1NCKGlub2RlLT5pX3NiKTsKIAkJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykgewotCQkJc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7Ci0JCQlpZiAoc2JpbmZvLT5mcmVlX2Jsb2NrcyA9PSAwIHx8CisJCQlpZiAoKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsIHNiaW5mby0+bWF4X2Jsb2NrcykgPiAwKSB8fAogCQkJICAgIHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQkJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKIAkJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCQkJZXJyb3IgPSAtRU5PU1BDOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQotCQkJc2JpbmZvLT5mcmVlX2Jsb2Nrcy0tOworCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKKwkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwotCQkJc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJfSBlbHNlIGlmIChzaG1lbV9hY2N0X2Jsb2NrKGluZm8tPmZsYWdzKSkgewogCQkJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOwogCQkJZXJyb3IgPSAtRU5PU1BDOwpAQCAtMTQwNywyOCArMTQxOCwzOCBAQAogCQlpZiAoIWZpbGVwYWdlKSB7CiAJCQlpbnQgcmV0OwogCi0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQlmaWxlcGFnZSA9IHNobWVtX2FsbG9jX3BhZ2UoZ2ZwLCBpbmZvLCBpZHgpOwotCQkJaWYgKCFmaWxlcGFnZSkgewotCQkJCXNobWVtX3VuYWNjdF9ibG9ja3MoaW5mby0+ZmxhZ3MsIDEpOwotCQkJCXNobWVtX2ZyZWVfYmxvY2tzKGlub2RlLCAxKTsKLQkJCQllcnJvciA9IC1FTk9NRU07Ci0JCQkJZ290byBmYWlsZWQ7Ci0JCQl9Ci0JCQlTZXRQYWdlU3dhcEJhY2tlZChmaWxlcGFnZSk7CisJCQlpZiAoIXByZWFsbG9jX3BhZ2UpIHsKKwkJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCQkJZmlsZXBhZ2UgPSBzaG1lbV9hbGxvY19wYWdlKGdmcCwgaW5mbywgaWR4KTsKKwkJCQlpZiAoIWZpbGVwYWdlKSB7CisJCQkJCXNobWVtX3VuYWNjdF9ibG9ja3MoaW5mby0+ZmxhZ3MsIDEpOworCQkJCQlzaG1lbV9mcmVlX2Jsb2Nrcyhpbm9kZSwgMSk7CisJCQkJCWVycm9yID0gLUVOT01FTTsKKwkJCQkJZ290byBmYWlsZWQ7CisJCQkJfQorCQkJCVNldFBhZ2VTd2FwQmFja2VkKGZpbGVwYWdlKTsKIAotCQkJLyogUHJlY2hhcmdlIHBhZ2Ugd2hpbGUgd2UgY2FuIHdhaXQsIGNvbXBlbnNhdGUgYWZ0ZXIgKi8KLQkJCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UoZmlsZXBhZ2UsIGN1cnJlbnQtPm1tLAotCQkJCQlHRlBfS0VSTkVMKTsKLQkJCWlmIChlcnJvcikgewotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShmaWxlcGFnZSk7Ci0JCQkJc2htZW1fdW5hY2N0X2Jsb2NrcyhpbmZvLT5mbGFncywgMSk7Ci0JCQkJc2htZW1fZnJlZV9ibG9ja3MoaW5vZGUsIDEpOwotCQkJCWZpbGVwYWdlID0gTlVMTDsKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQkvKgorCQkJCSAqIFByZWNoYXJnZSBwYWdlIHdoaWxlIHdlIGNhbiB3YWl0LCBjb21wZW5zYXRlCisJCQkJICogYWZ0ZXIKKwkJCQkgKi8KKwkJCQllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKGZpbGVwYWdlLAorCQkJCQljdXJyZW50LT5tbSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKGVycm9yKSB7CisJCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShmaWxlcGFnZSk7CisJCQkJCXNobWVtX3VuYWNjdF9ibG9ja3MoaW5mby0+ZmxhZ3MsIDEpOworCQkJCQlzaG1lbV9mcmVlX2Jsb2Nrcyhpbm9kZSwgMSk7CisJCQkJCWZpbGVwYWdlID0gTlVMTDsKKwkJCQkJZ290byBmYWlsZWQ7CisJCQkJfQorCisJCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCX0gZWxzZSB7CisJCQkJZmlsZXBhZ2UgPSBwcmVhbGxvY19wYWdlOworCQkJCXByZWFsbG9jX3BhZ2UgPSBOVUxMOworCQkJCVNldFBhZ2VTd2FwQmFja2VkKGZpbGVwYWdlKTsKIAkJCX0KIAotCQkJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAkJCWVudHJ5ID0gc2htZW1fc3dwX2FsbG9jKGluZm8sIGlkeCwgc2dwKTsKIAkJCWlmIChJU19FUlIoZW50cnkpKQogCQkJCWVycm9yID0gUFRSX0VSUihlbnRyeSk7CkBAIC0xNDY5LDEzICsxNDkwLDE5IEBACiAJfQogZG9uZToKIAkqcGFnZXAgPSBmaWxlcGFnZTsKLQlyZXR1cm4gMDsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CiAKIGZhaWxlZDoKIAlpZiAoKnBhZ2VwICE9IGZpbGVwYWdlKSB7CiAJCXVubG9ja19wYWdlKGZpbGVwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKGZpbGVwYWdlKTsKIAl9CitvdXQ6CisJaWYgKHByZWFsbG9jX3BhZ2UpIHsKKwkJbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlKHByZWFsbG9jX3BhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocHJlYWxsb2NfcGFnZSk7CisJfQogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTc5MSwxNyArMTgxOCwxNiBAQAogCWJ1Zi0+Zl90eXBlID0gVE1QRlNfTUFHSUM7CiAJYnVmLT5mX2JzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCWJ1Zi0+Zl9uYW1lbGVuID0gTkFNRV9NQVg7Ci0Jc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7CiAJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykgewogCQlidWYtPmZfYmxvY2tzID0gc2JpbmZvLT5tYXhfYmxvY2tzOwotCQlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlID0gc2JpbmZvLT5mcmVlX2Jsb2NrczsKKwkJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZSA9CisJCQkJc2JpbmZvLT5tYXhfYmxvY2tzIC0gcGVyY3B1X2NvdW50ZXJfc3VtKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKIAl9CiAJaWYgKHNiaW5mby0+bWF4X2lub2RlcykgewogCQlidWYtPmZfZmlsZXMgPSBzYmluZm8tPm1heF9pbm9kZXM7CiAJCWJ1Zi0+Zl9mZnJlZSA9IHNiaW5mby0+ZnJlZV9pbm9kZXM7CiAJfQogCS8qIGVsc2UgbGVhdmUgdGhvc2UgZmllbGRzIDAgbGlrZSBzaW1wbGVfc3RhdGZzICovCi0Jc3Bpbl91bmxvY2soJnNiaW5mby0+c3RhdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI0Miw3ICsyMjY4LDYgQEAKIHsKIAlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpOwogCXN0cnVjdCBzaG1lbV9zYl9pbmZvIGNvbmZpZyA9ICpzYmluZm87Ci0JdW5zaWduZWQgbG9uZyBibG9ja3M7CiAJdW5zaWduZWQgbG9uZyBpbm9kZXM7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIApAQCAtMjI1MCw5ICsyMjc1LDggQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJc3Bpbl9sb2NrKCZzYmluZm8tPnN0YXRfbG9jayk7Ci0JYmxvY2tzID0gc2JpbmZvLT5tYXhfYmxvY2tzIC0gc2JpbmZvLT5mcmVlX2Jsb2NrczsKIAlpbm9kZXMgPSBzYmluZm8tPm1heF9pbm9kZXMgLSBzYmluZm8tPmZyZWVfaW5vZGVzOwotCWlmIChjb25maWcubWF4X2Jsb2NrcyA8IGJsb2NrcykKKwlpZiAocGVyY3B1X2NvdW50ZXJfY29tcGFyZSgmc2JpbmZvLT51c2VkX2Jsb2NrcywgY29uZmlnLm1heF9ibG9ja3MpID4gMCkKIAkJZ290byBvdXQ7CiAJaWYgKGNvbmZpZy5tYXhfaW5vZGVzIDwgaW5vZGVzKQogCQlnb3RvIG91dDsKQEAgLTIyNjksNyArMjI5Myw2IEBACiAKIAllcnJvciA9IDA7CiAJc2JpbmZvLT5tYXhfYmxvY2tzICA9IGNvbmZpZy5tYXhfYmxvY2tzOwotCXNiaW5mby0+ZnJlZV9ibG9ja3MgPSBjb25maWcubWF4X2Jsb2NrcyAtIGJsb2NrczsKIAlzYmluZm8tPm1heF9pbm9kZXMgID0gY29uZmlnLm1heF9pbm9kZXM7CiAJc2JpbmZvLT5mcmVlX2lub2RlcyA9IGNvbmZpZy5tYXhfaW5vZGVzIC0gaW5vZGVzOwogCkBAIC0yMzQ0LDcgKzIzNjcsNyBAQAogI2VuZGlmCiAKIAlzcGluX2xvY2tfaW5pdCgmc2JpbmZvLT5zdGF0X2xvY2spOwotCXNiaW5mby0+ZnJlZV9ibG9ja3MgPSBzYmluZm8tPm1heF9ibG9ja3M7CisJcGVyY3B1X2NvdW50ZXJfaW5pdCgmc2JpbmZvLT51c2VkX2Jsb2NrcywgMCk7CiAJc2JpbmZvLT5mcmVlX2lub2RlcyA9IHNiaW5mby0+bWF4X2lub2RlczsKIAogCXNiLT5zX21heGJ5dGVzID0gU0hNRU1fTUFYX0JZVEVTOwpAQCAtMjQ5Niw3ICsyNTE5LDcgQEAKIAkucmVtb3VudF9mcwk9IHNobWVtX3JlbW91bnRfZnMsCiAJLnNob3dfb3B0aW9ucwk9IHNobWVtX3Nob3dfb3B0aW9ucywKICNlbmRpZgotCS5kZWxldGVfaW5vZGUJPSBzaG1lbV9kZWxldGVfaW5vZGUsCisJLmV2aWN0X2lub2RlCT0gc2htZW1fZXZpY3RfaW5vZGUsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKIAkucHV0X3N1cGVyCT0gc2htZW1fcHV0X3N1cGVyLAogfTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCBlNDlmOGY0Li44ODQzNWZjIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNsdWRlCTxsaW51eC9jcHUuaD4KICNpbmNsdWRlCTxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlCTxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlCTxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlCTxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUJPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUJPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTM5NSw3ICszOTQsNyBAQAogI2RlZmluZQlTVEFUU19ERUNfQUNUSVZFKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX0FMTE9DRUQoeCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZQlTVEFUU19JTkNfR1JPV04oeCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZQlTVEFUU19BRERfUkVBUEVEKHgseSkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZQlTVEFUU19BRERfUkVBUEVEKHgseSkJZG8geyAodm9pZCkoeSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX1NFVF9ISUdIKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUJU1RBVFNfSU5DX0VSUih4KQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lCVNUQVRTX0lOQ19OT0RFQUxMT0NTKHgpCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTg2MSw3ICs4NjAsNyBAQAogCSAqLwogCWlmIChrZXZlbnRkX3VwKCkgJiYgcmVhcF93b3JrLT53b3JrLmZ1bmMgPT0gTlVMTCkgewogCQlpbml0X3JlYXBfbm9kZShjcHUpOwotCQlJTklUX0RFTEFZRURfV09SSyhyZWFwX3dvcmssIGNhY2hlX3JlYXApOworCQlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKHJlYXBfd29yaywgY2FjaGVfcmVhcCk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHJlYXBfd29yaywKIAkJCQkJX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKEhaLCBjcHUpKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggMjM2MzFlMi4uZDU4MjE3MSAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtNjYsOCArNjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgorCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2ttZW0uaD4KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyoKQEAgLTM5NCw2ICszOTYsNyBAQAogCXNsb2JfdCAqcHJldiwgKm5leHQsICpiID0gKHNsb2JfdCAqKWJsb2NrOwogCXNsb2JpZHhfdCB1bml0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQgKnNsb2JfbGlzdDsKIAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGJsb2NrKSkpCiAJCXJldHVybjsKQEAgLTQyMiw3ICs0MjUsMTMgQEAKIAkJc2V0X3Nsb2IoYiwgdW5pdHMsCiAJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoYiArCiAJCQkJCVNMT0JfVU5JVFMoUEFHRV9TSVpFKSkgJiBQQUdFX01BU0spKTsKLQkJc2V0X3Nsb2JfcGFnZV9mcmVlKHNwLCAmZnJlZV9zbG9iX3NtYWxsKTsKKwkJaWYgKHNpemUgPCBTTE9CX0JSRUFLMSkKKwkJCXNsb2JfbGlzdCA9ICZmcmVlX3Nsb2Jfc21hbGw7CisJCWVsc2UgaWYgKHNpemUgPCBTTE9CX0JSRUFLMikKKwkJCXNsb2JfbGlzdCA9ICZmcmVlX3Nsb2JfbWVkaXVtOworCQllbHNlCisJCQlzbG9iX2xpc3QgPSAmZnJlZV9zbG9iX2xhcmdlOworCQlzZXRfc2xvYl9wYWdlX2ZyZWUoc3AsIHNsb2JfbGlzdCk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNjM5LDcgKzY0OCw2IEBACiAJaWYgKHVubGlrZWx5KGMtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpIHsKIAkJc3RydWN0IHNsb2JfcmN1ICpzbG9iX3JjdTsKIAkJc2xvYl9yY3UgPSBiICsgKGMtPnNpemUgLSBzaXplb2Yoc3RydWN0IHNsb2JfcmN1KSk7Ci0JCUlOSVRfUkNVX0hFQUQoJnNsb2JfcmN1LT5oZWFkKTsKIAkJc2xvYl9yY3UtPnNpemUgPSBjLT5zaXplOwogCQljYWxsX3JjdSgmc2xvYl9yY3UtPmhlYWQsIGttZW1fcmN1X2ZyZWUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggNTc4ZjY4Zi4uMTNmZmZlMSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KQEAgLTEwNywxMSArMTA2LDE3IEBACiAgKiAJCQl0aGUgZmFzdCBwYXRoIGFuZCBkaXNhYmxlcyBsb2NrbGVzcyBmcmVlbGlzdHMuCiAgKi8KIAorI2RlZmluZSBTTEFCX0RFQlVHX0ZMQUdTIChTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfCBTTEFCX1NUT1JFX1VTRVIgfCBcCisJCVNMQUJfVFJBQ0UgfCBTTEFCX0RFQlVHX0ZSRUUpCisKK3N0YXRpYyBpbmxpbmUgaW50IGttZW1fY2FjaGVfZGVidWcoc3RydWN0IGttZW1fY2FjaGUgKnMpCit7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKLSNkZWZpbmUgU0xBQkRFQlVHIDEKKwlyZXR1cm4gdW5saWtlbHkocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX0ZMQUdTKTsKICNlbHNlCi0jZGVmaW5lIFNMQUJERUJVRyAwCisJcmV0dXJuIDA7CiAjZW5kaWYKK30KIAogLyoKICAqIElzc3VlcyBzdGlsbCB0byBiZSByZXNvbHZlZDoKQEAgLTE2Miw4ICsxNjcsOCBAQAogI2RlZmluZSBNQVhfT0JKU19QRVJfUEFHRQk2NTUzNSAvKiBzaW5jZSBwYWdlLm9iamVjdHMgaXMgdTE2ICovCiAKIC8qIEludGVybmFsIFNMVUIgZmxhZ3MgKi8KLSNkZWZpbmUgX19PQkpFQ1RfUE9JU09OCQkweDgwMDAwMDAwIC8qIFBvaXNvbiBvYmplY3QgKi8KLSNkZWZpbmUgX19TWVNGU19BRERfREVGRVJSRUQJMHg0MDAwMDAwMCAvKiBOb3QgeWV0IHZpc2libGUgdmlhIHN5c2ZzICovCisjZGVmaW5lIF9fT0JKRUNUX1BPSVNPTgkJMHg4MDAwMDAwMFVMIC8qIFBvaXNvbiBvYmplY3QgKi8KKyNkZWZpbmUgX19TWVNGU19BRERfREVGRVJSRUQJMHg0MDAwMDAwMFVMIC8qIE5vdCB5ZXQgdmlzaWJsZSB2aWEgc3lzZnMgKi8KIAogc3RhdGljIGludCBrbWVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGUpOwogCkBAIC0xMDczLDcgKzEwNzgsNyBAQAogCiAJZmxhZ3MgfD0gX19HRlBfTk9UUkFDSzsKIAotCWlmIChub2RlID09IC0xKQorCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkKIAkJcmV0dXJuIGFsbG9jX3BhZ2VzKGZsYWdzLCBvcmRlcik7CiAJZWxzZQogCQlyZXR1cm4gYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZShub2RlLCBmbGFncywgb3JkZXIpOwpAQCAtMTE1Nyw5ICsxMTYyLDYgQEAKIAlpbmNfc2xhYnNfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSwgcGFnZS0+b2JqZWN0cyk7CiAJcGFnZS0+c2xhYiA9IHM7CiAJcGFnZS0+ZmxhZ3MgfD0gMSA8PCBQR19zbGFiOwotCWlmIChzLT5mbGFncyAmIChTTEFCX0RFQlVHX0ZSRUUgfCBTTEFCX1JFRF9aT05FIHwgU0xBQl9QT0lTT04gfAotCQkJU0xBQl9TVE9SRV9VU0VSIHwgU0xBQl9UUkFDRSkpCi0JCV9fU2V0UGFnZVNsdWJEZWJ1ZyhwYWdlKTsKIAogCXN0YXJ0ID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCkBAIC0xMTg2LDE0ICsxMTg4LDEzIEBACiAJaW50IG9yZGVyID0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJaW50IHBhZ2VzID0gMSA8PCBvcmRlcjsKIAotCWlmICh1bmxpa2VseShTTEFCREVCVUcgJiYgUGFnZVNsdWJEZWJ1ZyhwYWdlKSkpIHsKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkgewogCQl2b2lkICpwOwogCiAJCXNsYWJfcGFkX2NoZWNrKHMsIHBhZ2UpOwogCQlmb3JfZWFjaF9vYmplY3QocCwgcywgcGFnZV9hZGRyZXNzKHBhZ2UpLAogCQkJCQkJcGFnZS0+b2JqZWN0cykKIAkJCWNoZWNrX29iamVjdChzLCBwYWdlLCBwLCAwKTsKLQkJX19DbGVhclBhZ2VTbHViRGVidWcocGFnZSk7CiAJfQogCiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIGNvbXBvdW5kX29yZGVyKHBhZ2UpKTsKQEAgLTEzODcsMTAgKzEzODgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgc2VhcmNobm9kZSA9IChub2RlID09IC0xKSA/IG51bWFfbm9kZV9pZCgpIDogbm9kZTsKKwlpbnQgc2VhcmNobm9kZSA9IChub2RlID09IE5VTUFfTk9fTk9ERSkgPyBudW1hX25vZGVfaWQoKSA6IG5vZGU7CiAKIAlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShnZXRfbm9kZShzLCBzZWFyY2hub2RlKSk7Ci0JaWYgKHBhZ2UgfHwgKGZsYWdzICYgX19HRlBfVEhJU05PREUpKQorCWlmIChwYWdlIHx8IG5vZGUgIT0gLTEpCiAJCXJldHVybiBwYWdlOwogCiAJcmV0dXJuIGdldF9hbnlfcGFydGlhbChzLCBmbGFncyk7CkBAIC0xNDE1LDggKzE0MTYsNyBAQAogCQkJc3RhdChzLCB0YWlsID8gREVBQ1RJVkFURV9UT19UQUlMIDogREVBQ1RJVkFURV9UT19IRUFEKTsKIAkJfSBlbHNlIHsKIAkJCXN0YXQocywgREVBQ1RJVkFURV9GVUxMKTsKLQkJCWlmIChTTEFCREVCVUcgJiYgUGFnZVNsdWJEZWJ1ZyhwYWdlKSAmJgotCQkJCQkJKHMtPmZsYWdzICYgU0xBQl9TVE9SRV9VU0VSKSkKKwkJCWlmIChrbWVtX2NhY2hlX2RlYnVnKHMpICYmIChzLT5mbGFncyAmIFNMQUJfU1RPUkVfVVNFUikpCiAJCQkJYWRkX2Z1bGwobiwgcGFnZSk7CiAJCX0KIAkJc2xhYl91bmxvY2socGFnZSk7CkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogc3RhdGljIGlubGluZSBpbnQgbm9kZV9tYXRjaChzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMsIGludCBub2RlKQogewogI2lmZGVmIENPTkZJR19OVU1BCi0JaWYgKG5vZGUgIT0gLTEgJiYgYy0+bm9kZSAhPSBub2RlKQorCWlmIChub2RlICE9IE5VTUFfTk9fTk9ERSAmJiBjLT5ub2RlICE9IG5vZGUpCiAJCXJldHVybiAwOwogI2VuZGlmCiAJcmV0dXJuIDE7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCW9iamVjdCA9IGMtPnBhZ2UtPmZyZWVsaXN0OwogCWlmICh1bmxpa2VseSghb2JqZWN0KSkKIAkJZ290byBhbm90aGVyX3NsYWI7Ci0JaWYgKHVubGlrZWx5KFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKGMtPnBhZ2UpKSkKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKIAkJZ290byBkZWJ1ZzsKIAogCWMtPmZyZWVsaXN0ID0gZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCk7CkBAIC0xNzI3LDcgKzE3MjcsNyBAQAogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKIHsKLQl2b2lkICpyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCXZvaWQgKnJldCA9IHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgX1JFVF9JUF8pOwogCiAJdHJhY2Vfa21lbV9jYWNoZV9hbGxvYyhfUkVUX0lQXywgcmV0LCBzLT5vYmpzaXplLCBzLT5zaXplLCBnZnBmbGFncyk7CiAKQEAgLTE3MzgsNyArMTczOCw3IEBACiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MpCiB7Ci0JcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIC0xLCBfUkVUX0lQXyk7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIE5VTUFfTk9fTk9ERSwgX1JFVF9JUF8pOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UpOwogI2VuZGlmCkBAIC0xNzgzLDcgKzE3ODMsNyBAQAogCXN0YXQocywgRlJFRV9TTE9XUEFUSCk7CiAJc2xhYl9sb2NrKHBhZ2UpOwogCi0JaWYgKHVubGlrZWx5KFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKHBhZ2UpKSkKKwlpZiAoa21lbV9jYWNoZV9kZWJ1ZyhzKSkKIAkJZ290byBkZWJ1ZzsKIAogY2hlY2tzX29rOgpAQCAtMjQ5MCw3ICsyNDkwLDYgQEAKIAlzLT5yZWZjb3VudC0tOwogCWlmICghcy0+cmVmY291bnQpIHsKIAkJbGlzdF9kZWwoJnMtPmxpc3QpOwotCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJaWYgKGttZW1fY2FjaGVfY2xvc2UocykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogJXMgY2FsbGVkIGZvciBjYWNoZSB0aGF0ICIKIAkJCQkic3RpbGwgaGFzIG9iamVjdHMuXG4iLCBzLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0yNDk5LDggKzI0OTgsOCBAQAogCQlpZiAocy0+ZmxhZ3MgJiBTTEFCX0RFU1RST1lfQllfUkNVKQogCQkJcmN1X2JhcnJpZXIoKTsKIAkJc3lzZnNfc2xhYl9yZW1vdmUocyk7Ci0JfSBlbHNlCi0JCXVwX3dyaXRlKCZzbHViX2xvY2spOworCX0KKwl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTsKIApAQCAtMjcyOCw3ICsyNzI3LDcgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0ID0gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGZsYWdzLCBOVU1BX05PX05PREUsIF9SRVRfSVBfKTsKIAogCXRyYWNlX2ttYWxsb2MoX1JFVF9JUF8sIHJldCwgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MpOwogCkBAIC0zMTE4LDkgKzMxMTcsMTIgQEAKIAlzbGFiX3N0YXRlID0gVVA7CiAKIAkvKiBQcm92aWRlIHRoZSBjb3JyZWN0IGttYWxsb2MgbmFtZXMgbm93IHRoYXQgdGhlIGNhY2hlcyBhcmUgdXAgKi8KLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKQotCQlrbWFsbG9jX2NhY2hlc1tpXS4gbmFtZSA9Ci0JCQlrYXNwcmludGYoR0ZQX05PV0FJVCwgImttYWxsb2MtJWQiLCAxIDw8IGkpOworCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDwgU0xVQl9QQUdFX1NISUZUOyBpKyspIHsKKwkJY2hhciAqcyA9IGthc3ByaW50ZihHRlBfTk9XQUlULCAia21hbGxvYy0lZCIsIDEgPDwgaSk7CisKKwkJQlVHX09OKCFzKTsKKwkJa21hbGxvY19jYWNoZXNbaV0ubmFtZSA9IHM7CisJfQogCiAjaWZkZWYgQ09ORklHX1NNUAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmc2xhYl9ub3RpZmllcik7CkBAIC0zMjIzLDE0ICszMjI1LDEyIEBACiAJCSAqLwogCQlzLT5vYmpzaXplID0gbWF4KHMtPm9ianNpemUsIChpbnQpc2l6ZSk7CiAJCXMtPmludXNlID0gbWF4X3QoaW50LCBzLT5pbnVzZSwgQUxJR04oc2l6ZSwgc2l6ZW9mKHZvaWQgKikpKTsKLQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAKIAkJaWYgKHN5c2ZzX3NsYWJfYWxpYXMocywgbmFtZSkpIHsKLQkJCWRvd25fd3JpdGUoJnNsdWJfbG9jayk7CiAJCQlzLT5yZWZjb3VudC0tOwotCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCQlnb3RvIGVycjsKIAkJfQorCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJcmV0dXJuIHM7CiAJfQogCkBAIC0zMjM5LDE0ICszMjM5LDEyIEBACiAJCWlmIChrbWVtX2NhY2hlX29wZW4ocywgR0ZQX0tFUk5FTCwgbmFtZSwKIAkJCQlzaXplLCBhbGlnbiwgZmxhZ3MsIGN0b3IpKSB7CiAJCQlsaXN0X2FkZCgmcy0+bGlzdCwgJnNsYWJfY2FjaGVzKTsKLQkJCXVwX3dyaXRlKCZzbHViX2xvY2spOwogCQkJaWYgKHN5c2ZzX3NsYWJfYWRkKHMpKSB7Ci0JCQkJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJCQlsaXN0X2RlbCgmcy0+bGlzdCk7Ci0JCQkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCQkJa2ZyZWUocyk7CiAJCQkJZ290byBlcnI7CiAJCQl9CisJCQl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAkJCXJldHVybiBzOwogCQl9CiAJCWtmcmVlKHMpOwpAQCAtMzMxMiw3ICszMzEwLDcgQEAKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihzKSkpCiAJCXJldHVybiBzOwogCi0JcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgTlVNQV9OT19OT0RFLCBjYWxsZXIpOwogCiAJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLwogCXRyYWNlX2ttYWxsb2MoY2FsbGVyLCByZXQsIHNpemUsIHMtPnNpemUsIGdmcGZsYWdzKTsKQEAgLTMzOTUsMTYgKzMzOTMsNiBAQAogCX0gZWxzZQogCQlwcmludGsoS0VSTl9JTkZPICJTTFVCICVzOiBTa2lwcGVkIGJ1c3kgc2xhYiAweCVwXG4iLAogCQkJcy0+bmFtZSwgcGFnZSk7Ci0KLQlpZiAocy0+ZmxhZ3MgJiBERUJVR19ERUZBVUxUX0ZMQUdTKSB7Ci0JCWlmICghUGFnZVNsdWJEZWJ1ZyhwYWdlKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiU0xVQiAlczogU2x1YkRlYnVnIG5vdCBzZXQgIgotCQkJCSJvbiBzbGFiIDB4JXBcbiIsIHMtPm5hbWUsIHBhZ2UpOwotCX0gZWxzZSB7Ci0JCWlmIChQYWdlU2x1YkRlYnVnKHBhZ2UpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJTTFVCICVzOiBTbHViRGVidWcgc2V0IG9uICIKLQkJCQkic2xhYiAweCVwXG4iLCBzLT5uYW1lLCBwYWdlKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2xhYl9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLApAQCAtNDUwNCw2ICs0NDkyLDEzIEBACiAKIHN0YXRpYyB2b2lkIHN5c2ZzX3NsYWJfcmVtb3ZlKHN0cnVjdCBrbWVtX2NhY2hlICpzKQogeworCWlmIChzbGFiX3N0YXRlIDwgU1lTRlMpCisJCS8qCisJCSAqIFN5c2ZzIGhhcyBub3QgYmVlbiBzZXR1cCB5ZXQgc28gbm8gbmVlZCB0byByZW1vdmUgdGhlCisJCSAqIGNhY2hlIGZyb20gc3lzZnMuCisJCSAqLworCQlyZXR1cm47CisKIAlrb2JqZWN0X3VldmVudCgmcy0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZzLT5rb2JqKTsKIAlrb2JqZWN0X3B1dCgmcy0+a29iaik7CkBAIC00NTQ5LDggKzQ1NDQsMTEgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAlpbnQgZXJyOwogCisJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKKwogCXNsYWJfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoInNsYWIiLCAmc2xhYl91ZXZlbnRfb3BzLCBrZXJuZWxfa29iaik7CiAJaWYgKCFzbGFiX2tzZXQpIHsKKwkJdXBfd3JpdGUoJnNsdWJfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHJlZ2lzdGVyIHNsYWIgc3Vic3lzdGVtLlxuIik7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KQEAgLTQ1NzUsNiArNDU3Myw3IEBACiAJCWtmcmVlKGFsKTsKIAl9CiAKKwl1cF93cml0ZSgmc2x1Yl9sb2NrKTsKIAlyZXNpbGllbmN5X3Rlc3QoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDAzYWEyZDUuLjFmM2Y5YzUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtNDcsNiArNDcsOCBAQAogbG9uZyB0b3RhbF9zd2FwX3BhZ2VzOwogc3RhdGljIGludCBsZWFzdF9wcmlvcml0eTsKIAorc3RhdGljIGJvb2wgc3dhcF9mb3JfaGliZXJuYXRpb247CisKIHN0YXRpYyBjb25zdCBjaGFyIEJhZF9maWxlW10gPSAiQmFkIHN3YXAgZmlsZSBlbnRyeSAiOwogc3RhdGljIGNvbnN0IGNoYXIgVW51c2VkX2ZpbGVbXSA9ICJVbnVzZWQgc3dhcCBmaWxlIGVudHJ5ICI7CiBzdGF0aWMgY29uc3QgY2hhciBCYWRfb2Zmc2V0W10gPSAiQmFkIHN3YXAgb2Zmc2V0IGVudHJ5ICI7CkBAIC0zMTgsOCArMzIwLDEwIEBACiAJaWYgKG9mZnNldCA+IHNpLT5oaWdoZXN0X2JpdCkKIAkJc2Nhbl9iYXNlID0gb2Zmc2V0ID0gc2ktPmxvd2VzdF9iaXQ7CiAKLQkvKiByZXVzZSBzd2FwIGVudHJ5IG9mIGNhY2hlLW9ubHkgc3dhcCBpZiBub3QgYnVzeS4gKi8KLQlpZiAodm1fc3dhcF9mdWxsKCkgJiYgc2ktPnN3YXBfbWFwW29mZnNldF0gPT0gU1dBUF9IQVNfQ0FDSEUpIHsKKwkvKiByZXVzZSBzd2FwIGVudHJ5IG9mIGNhY2hlLW9ubHkgc3dhcCBpZiBub3QgaGliZXJuYXRpb24uICovCisJaWYgKHZtX3N3YXBfZnVsbCgpCisJCSYmIHVzYWdlID09IFNXQVBfSEFTX0NBQ0hFCisJCSYmIHNpLT5zd2FwX21hcFtvZmZzZXRdID09IFNXQVBfSEFTX0NBQ0hFKSB7CiAJCWludCBzd2FwX3dhc19mcmVlZDsKIAkJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CiAJCXN3YXBfd2FzX2ZyZWVkID0gX190cnlfdG9fcmVjbGFpbV9zd2FwKHNpLCBvZmZzZXQpOwpAQCAtNDQ5LDYgKzQ1Myw4IEBACiAJc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwogCWlmIChucl9zd2FwX3BhZ2VzIDw9IDApCiAJCWdvdG8gbm9zd2FwOworCWlmIChzd2FwX2Zvcl9oaWJlcm5hdGlvbikKKwkJZ290byBub3N3YXA7CiAJbnJfc3dhcF9wYWdlcy0tOwogCiAJZm9yICh0eXBlID0gc3dhcF9saXN0Lm5leHQ7IHR5cGUgPj0gMCAmJiB3cmFwcGVkIDwgMjsgdHlwZSA9IG5leHQpIHsKQEAgLTQ4MSwyOCArNDg3LDYgQEAKIAlyZXR1cm4gKHN3cF9lbnRyeV90KSB7MH07CiB9CiAKLS8qIFRoZSBvbmx5IGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdyBzdXN1cGVuZCByb3V0aW5lICovCi1zd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlX29mX3R5cGUoaW50IHR5cGUpCi17Ci0Jc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpOwotCXBnb2ZmX3Qgb2Zmc2V0OwotCi0Jc3Bpbl9sb2NrKCZzd2FwX2xvY2spOwotCXNpID0gc3dhcF9pbmZvW3R5cGVdOwotCWlmIChzaSAmJiAoc2ktPmZsYWdzICYgU1dQX1dSSVRFT0spKSB7Ci0JCW5yX3N3YXBfcGFnZXMtLTsKLQkJLyogVGhpcyBpcyBjYWxsZWQgZm9yIGFsbG9jYXRpbmcgc3dhcCBlbnRyeSwgbm90IGNhY2hlICovCi0JCW9mZnNldCA9IHNjYW5fc3dhcF9tYXAoc2ksIDEpOwotCQlpZiAob2Zmc2V0KSB7Ci0JCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKLQkJCXJldHVybiBzd3BfZW50cnkodHlwZSwgb2Zmc2V0KTsKLQkJfQotCQlucl9zd2FwX3BhZ2VzKys7Ci0JfQotCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOwotCXJldHVybiAoc3dwX2VudHJ5X3QpIHswfTsKLX0KLQogc3RhdGljIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzd2FwX2luZm9fZ2V0KHN3cF9lbnRyeV90IGVudHJ5KQogewogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOwpAQCAtNzYyLDYgKzc0Niw3NCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKworc3RhdGljIHBnb2ZmX3QgaGliZXJuYXRpb25fb2Zmc2V0W01BWF9TV0FQRklMRVNdOworLyoKKyAqIE9uY2UgaGliZXJuYXRpb24gc3RhcnRzIHRvIHVzZSBzd2FwLCB3ZSBmcmVlemUgc3dhcF9tYXBbXS4gT3RoZXJ3aXNlLAorICogc2F2ZWQgc3dhcF9tYXBbXSBpbWFnZSB0byB0aGUgZGlzayB3aWxsIGJlIGFuIGluY29tcGxldGUgYmVjYXVzZSBpdCdzCisgKiBjaGFuZ2luZyB3aXRob3V0IHN5bmNocm9uaXphdGlvbiB3aXRoIGhpYmVybmF0aW9uIHNuYXAgc2hvdC4KKyAqIEF0IHJlc3VtZSwgd2UganVzdCBtYWtlIHN3YXBfZm9yX2hpYmVybmF0aW9uPWZhbHNlLiBXZSBjYW4gZm9yZ2V0CisgKiB1c2VkIG1hcHMgZWFzaWx5LgorICovCit2b2lkIGhpYmVybmF0aW9uX2ZyZWV6ZV9zd2FwKHZvaWQpCit7CisJaW50IGk7CisKKwlzcGluX2xvY2soJnN3YXBfbG9jayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJQTTogRnJlZXplIFN3YXBcbiIpOworCXN3YXBfZm9yX2hpYmVybmF0aW9uID0gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NXQVBGSUxFUzsgaSsrKQorCQloaWJlcm5hdGlvbl9vZmZzZXRbaV0gPSAxOworCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworfQorCit2b2lkIGhpYmVybmF0aW9uX3RoYXdfc3dhcCh2b2lkKQoreworCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKKwlpZiAoc3dhcF9mb3JfaGliZXJuYXRpb24pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUE06IFRoYXcgU3dhcFxuIik7CisJCXN3YXBfZm9yX2hpYmVybmF0aW9uID0gZmFsc2U7CisJfQorCXNwaW5fdW5sb2NrKCZzd2FwX2xvY2spOworfQorCisvKgorICogQmVjYXVzZSB1cGRhdGVpbmcgc3dhcF9tYXBbXSBjYW4gbWFrZSBub3Qtc2F2ZWQtc3RhdHVzLWNoYW5nZSwKKyAqIHdlIHVzZSBvdXIgb3duIGVhc3kgYWxsb2NhdG9yLgorICogUGxlYXNlIHNlZSBrZXJuZWwvcG93ZXIvc3dhcC5jLCBVc2VkIHN3YXBzIGFyZSByZWNvcmRlZCBpbnRvCisgKiBSQi10cmVlLgorICovCitzd3BfZW50cnlfdCBnZXRfc3dhcF9mb3JfaGliZXJuYXRpb24oaW50IHR5cGUpCit7CisJcGdvZmZfdCBvZmY7CisJc3dwX2VudHJ5X3QgdmFsID0gezB9OworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKKworCXNwaW5fbG9jaygmc3dhcF9sb2NrKTsKKworCXNpID0gc3dhcF9pbmZvW3R5cGVdOworCWlmICghc2kgfHwgIShzaS0+ZmxhZ3MgJiBTV1BfV1JJVEVPSykpCisJCWdvdG8gZG9uZTsKKworCWZvciAob2ZmID0gaGliZXJuYXRpb25fb2Zmc2V0W3R5cGVdOyBvZmYgPCBzaS0+bWF4OyArK29mZikgeworCQlpZiAoIXNpLT5zd2FwX21hcFtvZmZdKQorCQkJYnJlYWs7CisJfQorCWlmIChvZmYgPCBzaS0+bWF4KSB7CisJCXZhbCA9IHN3cF9lbnRyeSh0eXBlLCBvZmYpOworCQloaWJlcm5hdGlvbl9vZmZzZXRbdHlwZV0gPSBvZmYgKyAxOworCX0KK2RvbmU6CisJc3Bpbl91bmxvY2soJnN3YXBfbG9jayk7CisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBzd2FwX2ZyZWVfZm9yX2hpYmVybmF0aW9uKHN3cF9lbnRyeV90IGVudCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CisKIC8qCiAgKiBGaW5kIHRoZSBzd2FwIHR5cGUgdGhhdCBjb3JyZXNwb25kcyB0byBnaXZlbiBkZXZpY2UgKGlmIGFueSkuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggOTM3NTcxYi4uYmE4ODdiZiAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC01NDEsMjggKzU0MSw0OCBAQAogRVhQT1JUX1NZTUJPTCh0cnVuY2F0ZV9wYWdlY2FjaGUpOwogCiAvKioKKyAqIHRydW5jYXRlX3NldHNpemUgLSB1cGRhdGUgaW5vZGUgYW5kIHBhZ2VjYWNoZSBmb3IgYSBuZXcgZmlsZSBzaXplCisgKiBAaW5vZGU6IGlub2RlCisgKiBAbmV3c2l6ZTogbmV3IGZpbGUgc2l6ZQorICoKKyAqIHRydW5jYXRlX3NldHNpemUgdXBkYXN0ZXMgaV9zaXplIHVwZGF0ZSBhbmQgcGVyZm9ybXMgcGFnZWNhY2hlCisgKiB0cnVuY2F0aW9uIChpZiBuZWNlc3NhcnkpIGZvciBhIGZpbGUgc2l6ZSB1cGRhdGVzLiBJdCB3aWxsIGJlCisgKiB0eXBpY2FsbHkgYmUgY2FsbGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0ncyBzZXRhdHRyIGZ1bmN0aW9uIHdoZW4KKyAqIEFUVFJfU0laRSBpcyBwYXNzZWQgaW4uCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpbm9kZV9tdXRleCBoZWxkIGFuZCBhZnRlciBhbGwgZmlsZXN5c3RlbQorICogc3BlY2lmaWMgYmxvY2sgdHJ1bmNhdGlvbiBoYXMgYmVlbiBwZXJmb3JtZWQuCisgKi8KK3ZvaWQgdHJ1bmNhdGVfc2V0c2l6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbmV3c2l6ZSkKK3sKKwlsb2ZmX3Qgb2xkc2l6ZTsKKworCW9sZHNpemUgPSBpbm9kZS0+aV9zaXplOworCWlfc2l6ZV93cml0ZShpbm9kZSwgbmV3c2l6ZSk7CisKKwl0cnVuY2F0ZV9wYWdlY2FjaGUoaW5vZGUsIG9sZHNpemUsIG5ld3NpemUpOworfQorRVhQT1JUX1NZTUJPTCh0cnVuY2F0ZV9zZXRzaXplKTsKKworLyoqCiAgKiB2bXRydW5jYXRlIC0gdW5tYXAgbWFwcGluZ3MgImZyZWVkIiBieSB0cnVuY2F0ZSgpIHN5c2NhbGwKICAqIEBpbm9kZTogaW5vZGUgb2YgdGhlIGZpbGUgdXNlZAogICogQG9mZnNldDogZmlsZSBvZmZzZXQgdG8gc3RhcnQgdHJ1bmNhdGluZwogICoKLSAqIE5PVEUhIFdlIGhhdmUgdG8gYmUgcmVhZHkgdG8gdXBkYXRlIHRoZSBtZW1vcnkgc2hhcmluZwotICogYmV0d2VlbiB0aGUgZmlsZSBhbmQgdGhlIG1lbW9yeSBtYXAgZm9yIGEgcG90ZW50aWFsIGxhc3QKLSAqIGluY29tcGxldGUgcGFnZS4gIFVnbHksIGJ1dCBuZWNlc3NhcnkuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBzaW1wbGVfc2V0c2l6ZSBvciB0cnVuY2F0ZV9wYWdlY2FjaGUKLSAqIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHRydW5jYXRlX3NldHNpemUgb3IgdHJ1bmNhdGVfcGFnZWNhY2hlCisgKiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLCB0b2dldGhlciB3aXRoIGZpbGVzeXN0ZW0gc3BlY2lmaWMgYmxvY2sgdHJ1bmNhdGlvbi4KICAqLwogaW50IHZtdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCkKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHNpbXBsZV9zZXRzaXplKGlub2RlLCBvZmZzZXQpOworCWVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgb2Zmc2V0KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAorCXRydW5jYXRlX3NldHNpemUoaW5vZGUsIG9mZnNldCk7CiAJaWYgKGlub2RlLT5pX29wLT50cnVuY2F0ZSkKIAkJaW5vZGUtPmlfb3AtPnRydW5jYXRlKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodm10cnVuY2F0ZSk7CmRpZmYgLS1naXQgYS9tbS91dGlsLmMgYi9tbS91dGlsLmMKaW5kZXggZjU3MTJlOC4uNDczNWVhNCAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCisrKyBiL21tL3V0aWwuYwpAQCAtMjI1LDE1ICsyMjUsMTAgQEAKIAlpZiAobGVuZ3RoID4gbikKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlwID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOworCXAgPSBtZW1kdXBfdXNlcihzLCBsZW5ndGgpOwogCi0JaWYgKCFwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihwLCBzLCBsZW5ndGgpKSB7Ci0JCWtmcmVlKHApOwotCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKLQl9CisJaWYgKElTX0VSUihwKSkKKwkJcmV0dXJuIHA7CiAKIAlwW2xlbmd0aCAtIDFdID0gJ1wwJzsKIApkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGFlMDA3NDYuLjZiODg4OWQgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYworKysgYi9tbS92bWFsbG9jLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KIAorYm9vbCB2bWFwX2xhenlfdW5tYXAgX19yZWFkX21vc3RseSA9IHRydWU7CiAKIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KIApAQCAtNTAyLDYgKzUwMyw5IEBACiB7CiAJdW5zaWduZWQgaW50IGxvZzsKIAorCWlmICghdm1hcF9sYXp5X3VubWFwKQorCQlyZXR1cm4gMDsKKwogCWxvZyA9IGZscyhudW1fb25saW5lX2NwdXMoKSk7CiAKIAlyZXR1cm4gbG9nICogKDMyVUwgKiAxMDI0ICogMTAyNCAvIFBBR0VfU0laRSk7CkBAIC03MzIsNyArNzM2LDcgQEAKIAkJCQkJbm9kZSwgZ2ZwX21hc2spOwogCWlmICh1bmxpa2VseShJU19FUlIodmEpKSkgewogCQlrZnJlZSh2Yik7Ci0JCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodmEpKTsKKwkJcmV0dXJuIEVSUl9DQVNUKHZhKTsKIAl9CiAKIAllcnIgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwX21hc2spOwpAQCAtMjQwMyw3ICsyNDA3LDcgQEAKIAkJc2VxX3ByaW50ZihtLCAiIHBhZ2VzPSVkIiwgdi0+bnJfcGFnZXMpOwogCiAJaWYgKHYtPnBoeXNfYWRkcikKLQkJc2VxX3ByaW50ZihtLCAiIHBoeXM9JWx4Iiwgdi0+cGh5c19hZGRyKTsKKwkJc2VxX3ByaW50ZihtLCAiIHBoeXM9JWxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpdi0+cGh5c19hZGRyKTsKIAogCWlmICh2LT5mbGFncyAmIFZNX0lPUkVNQVApCiAJCXNlcV9wcmludGYobSwgIiBpb3JlbWFwIik7CkBAIC0yNDM3LDggKzI0NDEsMTEgQEAKIAl1bnNpZ25lZCBpbnQgKnB0ciA9IE5VTEw7CiAJaW50IHJldDsKIAotCWlmIChOVU1BX0JVSUxEKQorCWlmIChOVU1BX0JVSUxEKSB7CiAJCXB0ciA9IGttYWxsb2MobnJfbm9kZV9pZHMgKiBzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChwdHIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAlyZXQgPSBzZXFfb3BlbihmaWxlLCAmdm1hbGxvY19vcCk7CiAJaWYgKCFyZXQpIHsKIAkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiOTRmZTFiLi5jMzkxYzMyIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNDgsNiArNDgsOSBAQAogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPgorCiBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKIAkvKiBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGluYWN0aXZlIHBhZ2VzIHRoYXQgd2VyZSBzY2FubmVkICovCiAJdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwpAQCAtMzk4LDYgKzQwMSw4IEBACiAJCQkvKiBzeW5jaHJvbm91cyB3cml0ZSBvciBicm9rZW4gYV9vcHM/ICovCiAJCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwogCQl9CisJCXRyYWNlX21tX3Ztc2Nhbl93cml0ZXBhZ2UocGFnZSwKKwkJCXRyYWNlX3JlY2xhaW1fZmxhZ3MocGFnZSwgc3luY193cml0ZWJhY2spKTsKIAkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9WTVNDQU5fV1JJVEUpOwogCQlyZXR1cm4gUEFHRV9TVUNDRVNTOwogCX0KQEAgLTYxNyw2ICs2MjIsMjQgQEAKIAlyZXR1cm4gUEFHRVJFRl9SRUNMQUlNOwogfQogCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQgZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZnJlZV9wYWdlcykKK3sKKwlzdHJ1Y3QgcGFnZXZlYyBmcmVlZF9wdmVjOworCXN0cnVjdCBwYWdlICpwYWdlLCAqdG1wOworCisJcGFnZXZlY19pbml0KCZmcmVlZF9wdmVjLCAxKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlLCB0bXAsIGZyZWVfcGFnZXMsIGxydSkgeworCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwkJaWYgKCFwYWdldmVjX2FkZCgmZnJlZWRfcHZlYywgcGFnZSkpIHsKKwkJCV9fcGFnZXZlY19mcmVlKCZmcmVlZF9wdmVjKTsKKwkJCXBhZ2V2ZWNfcmVpbml0KCZmcmVlZF9wdmVjKTsKKwkJfQorCX0KKworCXBhZ2V2ZWNfZnJlZSgmZnJlZWRfcHZlYyk7Cit9CisKIC8qCiAgKiBzaHJpbmtfcGFnZV9saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlcwogICovCkBAIC02MjUsMTMgKzY0OCwxMiBAQAogCQkJCQllbnVtIHBhZ2VvdXRfaW8gc3luY193cml0ZWJhY2spCiB7CiAJTElTVF9IRUFEKHJldF9wYWdlcyk7Ci0Jc3RydWN0IHBhZ2V2ZWMgZnJlZWRfcHZlYzsKKwlMSVNUX0hFQUQoZnJlZV9wYWdlcyk7CiAJaW50IHBnYWN0aXZhdGUgPSAwOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAogCWNvbmRfcmVzY2hlZCgpOwogCi0JcGFnZXZlY19pbml0KCZmcmVlZF9wdmVjLCAxKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZV9saXN0KSkgewogCQllbnVtIHBhZ2VfcmVmZXJlbmNlcyByZWZlcmVuY2VzOwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKQEAgLTgwNiwxMCArODI4LDEyIEBACiAJCV9fY2xlYXJfcGFnZV9sb2NrZWQocGFnZSk7CiBmcmVlX2l0OgogCQlucl9yZWNsYWltZWQrKzsKLQkJaWYgKCFwYWdldmVjX2FkZCgmZnJlZWRfcHZlYywgcGFnZSkpIHsKLQkJCV9fcGFnZXZlY19mcmVlKCZmcmVlZF9wdmVjKTsKLQkJCXBhZ2V2ZWNfcmVpbml0KCZmcmVlZF9wdmVjKTsKLQkJfQorCisJCS8qCisJCSAqIElzIHRoZXJlIG5lZWQgdG8gcGVyaW9kaWNhbGx5IGZyZWVfcGFnZV9saXN0PyBJdCB3b3VsZAorCQkgKiBhcHBlYXIgbm90IGFzIHRoZSBjb3VudHMgc2hvdWxkIGJlIGxvdworCQkgKi8KKwkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJmZyZWVfcGFnZXMpOwogCQljb250aW51ZTsKIAogY3VsbF9tbG9ja2VkOgpAQCAtODMyLDkgKzg1NiwxMCBAQAogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmcmV0X3BhZ2VzKTsKIAkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkgfHwgUGFnZVVuZXZpY3RhYmxlKHBhZ2UpKTsKIAl9CisKKwlmcmVlX3BhZ2VfbGlzdCgmZnJlZV9wYWdlcyk7CisKIAlsaXN0X3NwbGljZSgmcmV0X3BhZ2VzLCBwYWdlX2xpc3QpOwotCWlmIChwYWdldmVjX2NvdW50KCZmcmVlZF9wdmVjKSkKLQkJX19wYWdldmVjX2ZyZWUoJmZyZWVkX3B2ZWMpOwogCWNvdW50X3ZtX2V2ZW50cyhQR0FDVElWQVRFLCBwZ2FjdGl2YXRlKTsKIAlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQpAQCAtOTE2LDYgKzk0MSw5IEBACiAJCXVuc2lnbmVkIGxvbmcgKnNjYW5uZWQsIGludCBvcmRlciwgaW50IG1vZGUsIGludCBmaWxlKQogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfbHVtcHlfdGFrZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfbHVtcHlfZGlydHkgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfbHVtcHlfZmFpbGVkID0gMDsKIAl1bnNpZ25lZCBsb25nIHNjYW47CiAKIAlmb3IgKHNjYW4gPSAwOyBzY2FuIDwgbnJfdG9fc2NhbiAmJiAhbGlzdF9lbXB0eShzcmMpOyBzY2FuKyspIHsKQEAgLTk5MywxMiArMTAyMSwyNSBAQAogCQkJCWxpc3RfbW92ZSgmY3Vyc29yX3BhZ2UtPmxydSwgZHN0KTsKIAkJCQltZW1fY2dyb3VwX2RlbF9scnUoY3Vyc29yX3BhZ2UpOwogCQkJCW5yX3Rha2VuKys7CisJCQkJbnJfbHVtcHlfdGFrZW4rKzsKKwkJCQlpZiAoUGFnZURpcnR5KGN1cnNvcl9wYWdlKSkKKwkJCQkJbnJfbHVtcHlfZGlydHkrKzsKIAkJCQlzY2FuKys7CisJCQl9IGVsc2UgeworCQkJCWlmIChtb2RlID09IElTT0xBVEVfQk9USCAmJgorCQkJCQkJcGFnZV9jb3VudChjdXJzb3JfcGFnZSkpCisJCQkJCW5yX2x1bXB5X2ZhaWxlZCsrOwogCQkJfQogCQl9CiAJfQogCiAJKnNjYW5uZWQgPSBzY2FuOworCisJdHJhY2VfbW1fdm1zY2FuX2xydV9pc29sYXRlKG9yZGVyLAorCQkJbnJfdG9fc2Nhbiwgc2NhbiwKKwkJCW5yX3Rha2VuLAorCQkJbnJfbHVtcHlfdGFrZW4sIG5yX2x1bXB5X2RpcnR5LCBucl9sdW1weV9mYWlsZWQsCisJCQltb2RlKTsKIAlyZXR1cm4gbnJfdGFrZW47CiB9CiAKQEAgLTEwMzUsNyArMTA3Niw4IEBACiAJCQlDbGVhclBhZ2VBY3RpdmUocGFnZSk7CiAJCQlucl9hY3RpdmUrKzsKIAkJfQotCQljb3VudFtscnVdKys7CisJCWlmIChjb3VudCkKKwkJCWNvdW50W2xydV0rKzsKIAl9CiAKIAlyZXR1cm4gbnJfYWN0aXZlOwpAQCAtMTExMiwxOCArMTE1NCwxNDEgQEAKIH0KIAogLyoKKyAqIFRPRE86IFRyeSBtZXJnaW5nIHdpdGggbWlncmF0aW9ucyB2ZXJzaW9uIG9mIHB1dGJhY2tfbHJ1X3BhZ2VzCisgKi8KK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZAorcHV0YmFja19scnVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLAorCQkJCXVuc2lnbmVkIGxvbmcgbnJfYW5vbiwgdW5zaWduZWQgbG9uZyBucl9maWxlLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VfbGlzdCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwdmVjOworCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCAqcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDEpOworCisJLyoKKwkgKiBQdXQgYmFjayBhbnkgdW5mcmVlYWJsZSBwYWdlcy4KKwkgKi8KKwlzcGluX2xvY2soJnpvbmUtPmxydV9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZV9saXN0KSkgeworCQlpbnQgbHJ1OworCQlwYWdlID0gbHJ1X3RvX3BhZ2UocGFnZV9saXN0KTsKKwkJVk1fQlVHX09OKFBhZ2VMUlUocGFnZSkpOworCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKKwkJaWYgKHVubGlrZWx5KCFwYWdlX2V2aWN0YWJsZShwYWdlLCBOVUxMKSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKKwkJCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNldFBhZ2VMUlUocGFnZSk7CisJCWxydSA9IHBhZ2VfbHJ1KHBhZ2UpOworCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOworCQlpZiAoaXNfYWN0aXZlX2xydShscnUpKSB7CisJCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CisJCQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkW2ZpbGVdKys7CisJCX0KKwkJaWYgKCFwYWdldmVjX2FkZCgmcHZlYywgcGFnZSkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQkJX19wYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQkJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCQl9CisJfQorCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OLCAtbnJfYW5vbik7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUsIC1ucl9maWxlKTsKKworCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOworCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Cit9CisKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCB1cGRhdGVfaXNvbGF0ZWRfY291bnRzKHN0cnVjdCB6b25lICp6b25lLAorCQkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKKwkJCQkJdW5zaWduZWQgbG9uZyAqbnJfYW5vbiwKKwkJCQkJdW5zaWduZWQgbG9uZyAqbnJfZmlsZSwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqaXNvbGF0ZWRfbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nIG5yX2FjdGl2ZTsKKwl1bnNpZ25lZCBpbnQgY291bnRbTlJfTFJVX0xJU1RTXSA9IHsgMCwgfTsKKwlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOworCisJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKGlzb2xhdGVkX2xpc3QsIGNvdW50KTsKKwlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7CisKKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsCisJCQkgICAgICAtY291bnRbTFJVX0FDVElWRV9GSUxFXSk7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0ZJTEUsCisJCQkgICAgICAtY291bnRbTFJVX0lOQUNUSVZFX0ZJTEVdKTsKKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0FOT04sCisJCQkgICAgICAtY291bnRbTFJVX0FDVElWRV9BTk9OXSk7CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04sCisJCQkgICAgICAtY291bnRbTFJVX0lOQUNUSVZFX0FOT05dKTsKKworCSpucl9hbm9uID0gY291bnRbTFJVX0FDVElWRV9BTk9OXSArIGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKKwkqbnJfZmlsZSA9IGNvdW50W0xSVV9BQ1RJVkVfRklMRV0gKyBjb3VudFtMUlVfSU5BQ1RJVkVfRklMRV07CisJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0FOT04sICpucl9hbm9uKTsKKwlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfSVNPTEFURURfRklMRSwgKm5yX2ZpbGUpOworCisJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFswXSArPSAqbnJfYW5vbjsKKwlyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzFdICs9ICpucl9maWxlOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHdhaXQgdG8gY2xlYW4gZGlydHkvd3JpdGViYWNrIHBhZ2VzLgorICoKKyAqIElmIHdlIGFyZSBkaXJlY3QgcmVjbGFpbWluZyBmb3IgY29udGlndW91cyBwYWdlcyBhbmQgd2UgZG8gbm90IHJlY2xhaW0KKyAqIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3QsIHRyeSBhZ2FpbiBhbmQgd2FpdCBmb3Igd3JpdGViYWNrIElPIHRvIGNvbXBsZXRlLgorICogVGhpcyB3aWxsIHN0YWxsIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgbm90aWNlYWJseS4gT25seSBkbyB0aGF0IHdoZW4gcmVhbGx5CisgKiBuZWVkIHRvIGZyZWUgdGhlIHBhZ2VzIHVuZGVyIGhpZ2ggbWVtb3J5IHByZXNzdXJlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlY2xhaW1fc3RhbGwodW5zaWduZWQgbG9uZyBucl90YWtlbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBucl9mcmVlZCwKKwkJCQkJaW50IHByaW9yaXR5LAorCQkJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3sKKwlpbnQgbHVtcHlfc3RhbGxfcHJpb3JpdHk7CisKKwkvKiBrc3dhcGQgc2hvdWxkIG5vdCBzdGFsbCBvbiBzeW5jIElPICovCisJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIE9ubHkgc3RhbGwgb24gbHVtcHkgcmVjbGFpbSAqLworCWlmICghc2MtPmx1bXB5X3JlY2xhaW1fbW9kZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogSWYgd2UgaGF2ZSByZWxhaW1lZCBldmVyeXRoaW5nIG9uIHRoZSBpc29sYXRlZCBsaXN0LCBubyBzdGFsbCAqLworCWlmIChucl9mcmVlZCA9PSBucl90YWtlbikKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBGb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucywgdGhlcmUgYXJlIHR3byBzdGFsbCB0aHJlc2hvbGRzLgorCSAqIEhpZ2gtY29zdCBhbGxvY2F0aW9ucyBzdGFsbCBpbW1lZGlhdGVseSB3aGVyZSBhcyBsb3dlcgorCSAqIG9yZGVyIGFsbG9jYXRpb25zIHN1Y2ggYXMgc3RhY2tzIHJlcXVpcmUgdGhlIHNjYW5uaW5nCisJICogcHJpb3JpdHkgdG8gYmUgbXVjaCBoaWdoZXIgYmVmb3JlIHN0YWxsaW5nLgorCSAqLworCWlmIChzYy0+b3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikKKwkJbHVtcHlfc3RhbGxfcHJpb3JpdHkgPSBERUZfUFJJT1JJVFk7CisJZWxzZQorCQlsdW1weV9zdGFsbF9wcmlvcml0eSA9IERFRl9QUklPUklUWSAvIDM7CisKKwlyZXR1cm4gcHJpb3JpdHkgPD0gbHVtcHlfc3RhbGxfcHJpb3JpdHk7Cit9CisKKy8qCiAgKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfem9uZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyCiAgKiBvZiByZWNsYWltZWQgcGFnZXMKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBtYXhfc2NhbiwKLQkJCXN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywKLQkJCWludCBwcmlvcml0eSwgaW50IGZpbGUpCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHVuc2lnbmVkIGxvbmcKK3Nocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IHpvbmUgKnpvbmUsCisJCQlzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHByaW9yaXR5LCBpbnQgZmlsZSkKIHsKIAlMSVNUX0hFQUQocGFnZV9saXN0KTsKLQlzdHJ1Y3QgcGFnZXZlYyBwdmVjOwotCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKLQlzdHJ1Y3Qgem9uZV9yZWNsYWltX3N0YXQgKnJlY2xhaW1fc3RhdCA9IGdldF9yZWNsYWltX3N0YXQoem9uZSwgc2MpOworCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47CisJdW5zaWduZWQgbG9uZyBucl9hY3RpdmU7CisJdW5zaWduZWQgbG9uZyBucl9hbm9uOworCXVuc2lnbmVkIGxvbmcgbnJfZmlsZTsKIAogCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZCh6b25lLCBmaWxlLCBzYykpKSB7CiAJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKQEAgLTExMzQsMTUyICsxMjk5LDY3IEBACiAJfQogCiAKLQlwYWdldmVjX2luaXQoJnB2ZWMsIDEpOwotCiAJbHJ1X2FkZF9kcmFpbigpOwogCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQl1bnNpZ25lZCBsb25nIG5yX3Rha2VuOwotCQl1bnNpZ25lZCBsb25nIG5yX3NjYW47Ci0JCXVuc2lnbmVkIGxvbmcgbnJfZnJlZWQ7Ci0JCXVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlOwotCQl1bnNpZ25lZCBpbnQgY291bnRbTlJfTFJVX0xJU1RTXSA9IHsgMCwgfTsKLQkJaW50IG1vZGUgPSBzYy0+bHVtcHlfcmVjbGFpbV9tb2RlID8gSVNPTEFURV9CT1RIIDogSVNPTEFURV9JTkFDVElWRTsKLQkJdW5zaWduZWQgbG9uZyBucl9hbm9uOwotCQl1bnNpZ25lZCBsb25nIG5yX2ZpbGU7CiAKLQkJaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKSB7Ci0JCQlucl90YWtlbiA9IGlzb2xhdGVfcGFnZXNfZ2xvYmFsKFNXQVBfQ0xVU1RFUl9NQVgsCi0JCQkJCQkJJnBhZ2VfbGlzdCwgJm5yX3NjYW4sCi0JCQkJCQkJc2MtPm9yZGVyLCBtb2RlLAotCQkJCQkJCXpvbmUsIDAsIGZpbGUpOwotCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCArPSBucl9zY2FuOwotCQkJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCi0JCQkJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1NDQU5fS1NXQVBELCB6b25lLAotCQkJCQkJICAgICAgIG5yX3NjYW4pOwotCQkJZWxzZQotCQkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0RJUkVDVCwgem9uZSwKLQkJCQkJCSAgICAgICBucl9zY2FuKTsKLQkJfSBlbHNlIHsKLQkJCW5yX3Rha2VuID0gbWVtX2Nncm91cF9pc29sYXRlX3BhZ2VzKFNXQVBfQ0xVU1RFUl9NQVgsCi0JCQkJCQkJJnBhZ2VfbGlzdCwgJm5yX3NjYW4sCi0JCQkJCQkJc2MtPm9yZGVyLCBtb2RlLAotCQkJCQkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLAotCQkJCQkJCTAsIGZpbGUpOwotCQkJLyoKLQkJCSAqIG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcygpIGtlZXBzIHRyYWNrIG9mCi0JCQkgKiBzY2FubmVkIHBhZ2VzIG9uIGl0cyBvd24uCi0JCQkgKi8KLQkJfQotCi0JCWlmIChucl90YWtlbiA9PSAwKQotCQkJZ290byBkb25lOwotCi0JCW5yX2FjdGl2ZSA9IGNsZWFyX2FjdGl2ZV9mbGFncygmcGFnZV9saXN0LCBjb3VudCk7Ci0JCV9fY291bnRfdm1fZXZlbnRzKFBHREVBQ1RJVkFURSwgbnJfYWN0aXZlKTsKLQotCQlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQUNUSVZFX0ZJTEUsCi0JCQkJCQktY291bnRbTFJVX0FDVElWRV9GSUxFXSk7Ci0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JTkFDVElWRV9GSUxFLAotCQkJCQkJLWNvdW50W0xSVV9JTkFDVElWRV9GSUxFXSk7Ci0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9BQ1RJVkVfQU5PTiwKLQkJCQkJCS1jb3VudFtMUlVfQUNUSVZFX0FOT05dKTsKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lOQUNUSVZFX0FOT04sCi0JCQkJCQktY291bnRbTFJVX0lOQUNUSVZFX0FOT05dKTsKLQotCQlucl9hbm9uID0gY291bnRbTFJVX0FDVElWRV9BTk9OXSArIGNvdW50W0xSVV9JTkFDVElWRV9BTk9OXTsKLQkJbnJfZmlsZSA9IGNvdW50W0xSVV9BQ1RJVkVfRklMRV0gKyBjb3VudFtMUlVfSU5BQ1RJVkVfRklMRV07Ci0JCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9JU09MQVRFRF9BTk9OLCBucl9hbm9uKTsKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUsIG5yX2ZpbGUpOwotCi0JCXJlY2xhaW1fc3RhdC0+cmVjZW50X3NjYW5uZWRbMF0gKz0gbnJfYW5vbjsKLQkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFsxXSArPSBucl9maWxlOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCi0JCW5yX3NjYW5uZWQgKz0gbnJfc2NhbjsKLQkJbnJfZnJlZWQgPSBzaHJpbmtfcGFnZV9saXN0KCZwYWdlX2xpc3QsIHNjLCBQQUdFT1VUX0lPX0FTWU5DKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBhcmUgZGlyZWN0IHJlY2xhaW1pbmcgZm9yIGNvbnRpZ3VvdXMgcGFnZXMgYW5kIHdlIGRvCi0JCSAqIG5vdCByZWNsYWltIGV2ZXJ5dGhpbmcgaW4gdGhlIGxpc3QsIHRyeSBhZ2FpbiBhbmQgd2FpdAotCQkgKiBmb3IgSU8gdG8gY29tcGxldGUuIFRoaXMgd2lsbCBzdGFsbCBoaWdoLW9yZGVyIGFsbG9jYXRpb25zCi0JCSAqIGJ1dCB0aGF0IHNob3VsZCBiZSBhY2NlcHRhYmxlIHRvIHRoZSBjYWxsZXIKLQkJICovCi0JCWlmIChucl9mcmVlZCA8IG5yX3Rha2VuICYmICFjdXJyZW50X2lzX2tzd2FwZCgpICYmCi0JCSAgICBzYy0+bHVtcHlfcmVjbGFpbV9tb2RlKSB7Ci0JCQljb25nZXN0aW9uX3dhaXQoQkxLX1JXX0FTWU5DLCBIWi8xMCk7Ci0KLQkJCS8qCi0JCQkgKiBUaGUgYXR0ZW1wdCBhdCBwYWdlIG91dCBtYXkgaGF2ZSBtYWRlIHNvbWUKLQkJCSAqIG9mIHRoZSBwYWdlcyBhY3RpdmUsIG1hcmsgdGhlbSBpbmFjdGl2ZSBhZ2Fpbi4KLQkJCSAqLwotCQkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QsIGNvdW50KTsKLQkJCWNvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIG5yX2FjdGl2ZSk7Ci0KLQkJCW5yX2ZyZWVkICs9IHNocmlua19wYWdlX2xpc3QoJnBhZ2VfbGlzdCwgc2MsCi0JCQkJCQkJUEFHRU9VVF9JT19TWU5DKTsKLQkJfQotCi0JCW5yX3JlY2xhaW1lZCArPSBucl9mcmVlZDsKLQotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkgeworCQlucl90YWtlbiA9IGlzb2xhdGVfcGFnZXNfZ2xvYmFsKG5yX3RvX3NjYW4sCisJCQkmcGFnZV9saXN0LCAmbnJfc2Nhbm5lZCwgc2MtPm9yZGVyLAorCQkJc2MtPmx1bXB5X3JlY2xhaW1fbW9kZSA/CisJCQkJSVNPTEFURV9CT1RIIDogSVNPTEFURV9JTkFDVElWRSwKKwkJCXpvbmUsIDAsIGZpbGUpOworCQl6b25lLT5wYWdlc19zY2FubmVkICs9IG5yX3NjYW5uZWQ7CiAJCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKQotCQkJX19jb3VudF92bV9ldmVudHMoS1NXQVBEX1NURUFMLCBucl9mcmVlZCk7Ci0JCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTVEVBTCwgem9uZSwgbnJfZnJlZWQpOwotCi0JCXNwaW5fbG9jaygmem9uZS0+bHJ1X2xvY2spOworCQkJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1NDQU5fS1NXQVBELCB6b25lLAorCQkJCQkgICAgICAgbnJfc2Nhbm5lZCk7CisJCWVsc2UKKwkJCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdTQ0FOX0RJUkVDVCwgem9uZSwKKwkJCQkJICAgICAgIG5yX3NjYW5uZWQpOworCX0gZWxzZSB7CisJCW5yX3Rha2VuID0gbWVtX2Nncm91cF9pc29sYXRlX3BhZ2VzKG5yX3RvX3NjYW4sCisJCQkmcGFnZV9saXN0LCAmbnJfc2Nhbm5lZCwgc2MtPm9yZGVyLAorCQkJc2MtPmx1bXB5X3JlY2xhaW1fbW9kZSA/CisJCQkJSVNPTEFURV9CT1RIIDogSVNPTEFURV9JTkFDVElWRSwKKwkJCXpvbmUsIHNjLT5tZW1fY2dyb3VwLAorCQkJMCwgZmlsZSk7CiAJCS8qCi0JCSAqIFB1dCBiYWNrIGFueSB1bmZyZWVhYmxlIHBhZ2VzLgorCQkgKiBtZW1fY2dyb3VwX2lzb2xhdGVfcGFnZXMoKSBrZWVwcyB0cmFjayBvZgorCQkgKiBzY2FubmVkIHBhZ2VzIG9uIGl0cyBvd24uCiAJCSAqLwotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJnBhZ2VfbGlzdCkpIHsKLQkJCWludCBscnU7Ci0JCQlwYWdlID0gbHJ1X3RvX3BhZ2UoJnBhZ2VfbGlzdCk7Ci0JCQlWTV9CVUdfT04oUGFnZUxSVShwYWdlKSk7Ci0JCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQkJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKLQkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlTZXRQYWdlTFJVKHBhZ2UpOwotCQkJbHJ1ID0gcGFnZV9scnUocGFnZSk7Ci0JCQlhZGRfcGFnZV90b19scnVfbGlzdCh6b25lLCBwYWdlLCBscnUpOwotCQkJaWYgKGlzX2FjdGl2ZV9scnUobHJ1KSkgewotCQkJCWludCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKLQkJCQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkW2ZpbGVdKys7Ci0JCQl9Ci0JCQlpZiAoIXBhZ2V2ZWNfYWRkKCZwdmVjLCBwYWdlKSkgewotCQkJCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwotCQkJCV9fcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKLQkJCQlzcGluX2xvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JCQl9Ci0JCX0KLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0FOT04sIC1ucl9hbm9uKTsKLQkJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0lTT0xBVEVEX0ZJTEUsIC1ucl9maWxlKTsKKwl9CiAKLSAgCX0gd2hpbGUgKG5yX3NjYW5uZWQgPCBtYXhfc2Nhbik7CisJaWYgKG5yX3Rha2VuID09IDApIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7CisJCXJldHVybiAwOworCX0KIAotZG9uZToKKwl1cGRhdGVfaXNvbGF0ZWRfY291bnRzKHpvbmUsIHNjLCAmbnJfYW5vbiwgJm5yX2ZpbGUsICZwYWdlX2xpc3QpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKLQlyZXR1cm4gbnJfcmVjbGFpbWVkOwotfQogCi0vKgotICogV2UgYXJlIGFib3V0IHRvIHNjYW4gdGhpcyB6b25lIGF0IGEgY2VydGFpbiBwcmlvcml0eSBsZXZlbC4gIElmIHRoYXQgcHJpb3JpdHkKLSAqIGxldmVsIGlzIHNtYWxsZXIgKGllOiBtb3JlIHVyZ2VudCkgdGhhbiB0aGUgcHJldmlvdXMgcHJpb3JpdHksIHRoZW4gbm90ZQotICogdGhhdCBwcmlvcml0eSBsZXZlbCB3aXRoaW4gdGhlIHpvbmUuICBUaGlzIGlzIGRvbmUgc28gdGhhdCB3aGVuIHRoZSBuZXh0Ci0gKiBwcm9jZXNzIGNvbWVzIGluIHRvIHNjYW4gdGhpcyB6b25lLCBpdCB3aWxsIGltbWVkaWF0ZWx5IHN0YXJ0IG91dCBhdCB0aGlzCi0gKiBwcmlvcml0eSBsZXZlbCByYXRoZXIgdGhhbiBoYXZpbmcgdG8gYnVpbGQgdXAgaXRzIG93biBzY2FubmluZyBwcmlvcml0eS4KLSAqIEhlcmUsIHRoaXMgcHJpb3JpdHkgYWZmZWN0cyBvbmx5IHRoZSByZWNsYWltLW1hcHBlZCB0aHJlc2hvbGQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBub3RlX3pvbmVfc2Nhbm5pbmdfcHJpb3JpdHkoc3RydWN0IHpvbmUgKnpvbmUsIGludCBwcmlvcml0eSkKLXsKLQlpZiAocHJpb3JpdHkgPCB6b25lLT5wcmV2X3ByaW9yaXR5KQotCQl6b25lLT5wcmV2X3ByaW9yaXR5ID0gcHJpb3JpdHk7CisJbnJfcmVjbGFpbWVkID0gc2hyaW5rX3BhZ2VfbGlzdCgmcGFnZV9saXN0LCBzYywgUEFHRU9VVF9JT19BU1lOQyk7CisKKwkvKiBDaGVjayBpZiB3ZSBzaG91bGQgc3luY3Jvbm91c2x5IHdhaXQgZm9yIHdyaXRlYmFjayAqLworCWlmIChzaG91bGRfcmVjbGFpbV9zdGFsbChucl90YWtlbiwgbnJfcmVjbGFpbWVkLCBwcmlvcml0eSwgc2MpKSB7CisJCWNvbmdlc3Rpb25fd2FpdChCTEtfUldfQVNZTkMsIEhaLzEwKTsKKworCQkvKgorCQkgKiBUaGUgYXR0ZW1wdCBhdCBwYWdlIG91dCBtYXkgaGF2ZSBtYWRlIHNvbWUKKwkJICogb2YgdGhlIHBhZ2VzIGFjdGl2ZSwgbWFyayB0aGVtIGluYWN0aXZlIGFnYWluLgorCQkgKi8KKwkJbnJfYWN0aXZlID0gY2xlYXJfYWN0aXZlX2ZsYWdzKCZwYWdlX2xpc3QsIE5VTEwpOworCQljb3VudF92bV9ldmVudHMoUEdERUFDVElWQVRFLCBucl9hY3RpdmUpOworCisJCW5yX3JlY2xhaW1lZCArPSBzaHJpbmtfcGFnZV9saXN0KCZwYWdlX2xpc3QsIHNjLCBQQUdFT1VUX0lPX1NZTkMpOworCX0KKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCV9fY291bnRfdm1fZXZlbnRzKEtTV0FQRF9TVEVBTCwgbnJfcmVjbGFpbWVkKTsKKwlfX2NvdW50X3pvbmVfdm1fZXZlbnRzKFBHU1RFQUwsIHpvbmUsIG5yX3JlY2xhaW1lZCk7CisKKwlwdXRiYWNrX2xydV9wYWdlcyh6b25lLCBzYywgbnJfYW5vbiwgbnJfZmlsZSwgJnBhZ2VfbGlzdCk7CisJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KIAogLyoKQEAgLTE1ODMsNiArMTY2MywxMyBAQAogCX0KIAogCS8qCisJICogV2l0aCBzd2FwcGluZXNzIGF0IDEwMCwgYW5vbnltb3VzIGFuZCBmaWxlIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuCisJICogVGhpcyBzY2FubmluZyBwcmlvcml0eSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBJTyBjb3N0LgorCSAqLworCWFub25fcHJpbyA9IHNjLT5zd2FwcGluZXNzOworCWZpbGVfcHJpbyA9IDIwMCAtIHNjLT5zd2FwcGluZXNzOworCisJLyoKIAkgKiBPSywgc28gd2UgaGF2ZSBzd2FwIHNwYWNlIGFuZCBhIGZhaXIgYW1vdW50IG9mIHBhZ2UgY2FjaGUKIAkgKiBwYWdlcy4gIFdlIHVzZSB0aGUgcmVjZW50bHkgcm90YXRlZCAvIHJlY2VudGx5IHNjYW5uZWQKIAkgKiByYXRpb3MgdG8gZGV0ZXJtaW5lIGhvdyB2YWx1YWJsZSBlYWNoIGNhY2hlIGlzLgpAQCAtMTU5MywyOCArMTY4MCwxOCBAQAogCSAqCiAJICogYW5vbiBpbiBbMF0sIGZpbGUgaW4gWzFdCiAJICovCisJc3Bpbl9sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCWlmICh1bmxpa2VseShyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzBdID4gYW5vbiAvIDQpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFswXSAvPSAyOwogCQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkWzBdIC89IDI7Ci0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCX0KIAogCWlmICh1bmxpa2VseShyZWNsYWltX3N0YXQtPnJlY2VudF9zY2FubmVkWzFdID4gZmlsZSAvIDQpKSB7Ci0JCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKIAkJcmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFsxXSAvPSAyOwogCQlyZWNsYWltX3N0YXQtPnJlY2VudF9yb3RhdGVkWzFdIC89IDI7Ci0JCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCX0KIAogCS8qCi0JICogV2l0aCBzd2FwcGluZXNzIGF0IDEwMCwgYW5vbnltb3VzIGFuZCBmaWxlIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuCi0JICogVGhpcyBzY2FubmluZyBwcmlvcml0eSBpcyBlc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBJTyBjb3N0LgotCSAqLwotCWFub25fcHJpbyA9IHNjLT5zd2FwcGluZXNzOwotCWZpbGVfcHJpbyA9IDIwMCAtIHNjLT5zd2FwcGluZXNzOwotCi0JLyoKIAkgKiBUaGUgYW1vdW50IG9mIHByZXNzdXJlIG9uIGFub24gdnMgZmlsZSBwYWdlcyBpcyBpbnZlcnNlbHkKIAkgKiBwcm9wb3J0aW9uYWwgdG8gdGhlIGZyYWN0aW9uIG9mIHJlY2VudGx5IHNjYW5uZWQgcGFnZXMgb24KIAkgKiBlYWNoIGxpc3QgdGhhdCB3ZXJlIHJlY2VudGx5IHJlZmVyZW5jZWQgYW5kIGluIGFjdGl2ZSB1c2UuCkBAIC0xNjI0LDYgKzE3MDEsNyBAQAogCiAJZnAgPSAoZmlsZV9wcmlvICsgMSkgKiAocmVjbGFpbV9zdGF0LT5yZWNlbnRfc2Nhbm5lZFsxXSArIDEpOwogCWZwIC89IHJlY2xhaW1fc3RhdC0+cmVjZW50X3JvdGF0ZWRbMV0gKyAxOworCXNwaW5fdW5sb2NrX2lycSgmem9uZS0+bHJ1X2xvY2spOwogCiAJZnJhY3Rpb25bMF0gPSBhcDsKIAlmcmFjdGlvblsxXSA9IGZwOwpAQCAtMTcyOSwxMyArMTgwNywxMiBAQAogc3RhdGljIGJvb2wgc2hyaW5rX3pvbmVzKGludCBwcmlvcml0eSwgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKIAkJCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7Ci0JZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4ID0gZ2ZwX3pvbmUoc2MtPmdmcF9tYXNrKTsKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlib29sIGFsbF91bnJlY2xhaW1hYmxlID0gdHJ1ZTsKIAotCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKLQkJCQkJc2MtPm5vZGVtYXNrKSB7CisJZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwKKwkJCQkJZ2ZwX3pvbmUoc2MtPmdmcF9tYXNrKSwgc2MtPm5vZGVtYXNrKSB7CiAJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCiAJCQljb250aW51ZTsKIAkJLyoKQEAgLTE3NDUsMTcgKzE4MjIsOCBAQAogCQlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpIHsKIAkJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKIAkJCQljb250aW51ZTsKLQkJCW5vdGVfem9uZV9zY2FubmluZ19wcmlvcml0eSh6b25lLCBwcmlvcml0eSk7Ci0KIAkJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSAmJiBwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCiAJCQkJY29udGludWU7CS8qIExldCBrc3dhcGQgcG9sbCBpdCAqLwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElnbm9yZSBjcHVzZXQgbGltaXRhdGlvbiBoZXJlLiBXZSBqdXN0IHdhbnQgdG8gcmVkdWNlCi0JCQkgKiAjIG9mIHVzZWQgcGFnZXMgYnkgdXMgcmVnYXJkbGVzcyBvZiBtZW1vcnkgc2hvcnRhZ2UuCi0JCQkgKi8KLQkJCW1lbV9jZ3JvdXBfbm90ZV9yZWNsYWltX3ByaW9yaXR5KHNjLT5tZW1fY2dyb3VwLAotCQkJCQkJCXByaW9yaXR5KTsKIAkJfQogCiAJCXNocmlua196b25lKHByaW9yaXR5LCB6b25lLCBzYyk7CkBAIC0xNzg3LDEwICsxODU1LDggQEAKIAlib29sIGFsbF91bnJlY2xhaW1hYmxlOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfc2Nhbm5lZCA9IDA7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJlY2xhaW1fc3RhdGUgPSBjdXJyZW50LT5yZWNsYWltX3N0YXRlOwotCXVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzID0gMDsKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKLQllbnVtIHpvbmVfdHlwZSBoaWdoX3pvbmVpZHggPSBnZnBfem9uZShzYy0+Z2ZwX21hc2spOwogCXVuc2lnbmVkIGxvbmcgd3JpdGViYWNrX3RocmVzaG9sZDsKIAogCWdldF9tZW1zX2FsbG93ZWQoKTsKQEAgLTE3OTgsMTggKzE4NjQsNiBAQAogCiAJaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKQogCQljb3VudF92bV9ldmVudChBTExPQ1NUQUxMKTsKLQkvKgotCSAqIG1lbV9jZ3JvdXAgd2lsbCBub3QgZG8gc2hyaW5rX3NsYWIuCi0JICovCi0JaWYgKHNjYW5uaW5nX2dsb2JhbF9scnUoc2MpKSB7Ci0JCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Qoem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCkgewotCi0JCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgR0ZQX0tFUk5FTCkpCi0JCQkJY29udGludWU7Ci0KLQkJCWxydV9wYWdlcyArPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpOwotCQl9Ci0JfQogCiAJZm9yIChwcmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gMDsgcHJpb3JpdHktLSkgewogCQlzYy0+bnJfc2Nhbm5lZCA9IDA7CkBAIC0xODIxLDYgKzE4NzUsMTUgQEAKIAkJICogb3ZlciBsaW1pdCBjZ3JvdXBzCiAJCSAqLwogCQlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpIHsKKwkJCXVuc2lnbmVkIGxvbmcgbHJ1X3BhZ2VzID0gMDsKKwkJCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Qoem9uZSwgeiwgem9uZWxpc3QsCisJCQkJCWdmcF96b25lKHNjLT5nZnBfbWFzaykpIHsKKwkJCQlpZiAoIWNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgR0ZQX0tFUk5FTCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJbHJ1X3BhZ2VzICs9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSk7CisJCQl9CisKIAkJCXNocmlua19zbGFiKHNjLT5ucl9zY2FubmVkLCBzYy0+Z2ZwX21hc2ssIGxydV9wYWdlcyk7CiAJCQlpZiAocmVjbGFpbV9zdGF0ZSkgewogCQkJCXNjLT5ucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9zdGF0ZS0+cmVjbGFpbWVkX3NsYWI7CkBAIC0xODYxLDE3ICsxOTI0LDYgQEAKIAlpZiAocHJpb3JpdHkgPCAwKQogCQlwcmlvcml0eSA9IDA7CiAKLQlpZiAoc2Nhbm5pbmdfZ2xvYmFsX2xydShzYykpIHsKLQkJZm9yX2VhY2hfem9uZV96b25lbGlzdCh6b25lLCB6LCB6b25lbGlzdCwgaGlnaF96b25laWR4KSB7Ci0KLQkJCWlmICghY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbCh6b25lLCBHRlBfS0VSTkVMKSkKLQkJCQljb250aW51ZTsKLQotCQkJem9uZS0+cHJldl9wcmlvcml0eSA9IHByaW9yaXR5OwotCQl9Ci0JfSBlbHNlCi0JCW1lbV9jZ3JvdXBfcmVjb3JkX3JlY2xhaW1fcHJpb3JpdHkoc2MtPm1lbV9jZ3JvdXAsIHByaW9yaXR5KTsKLQogCWRlbGF5YWNjdF9mcmVlcGFnZXNfZW5kKCk7CiAJcHV0X21lbXNfYWxsb3dlZCgpOwogCkBAIC0xODg4LDYgKzE5NDAsNyBAQAogdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiAJCQkJZ2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm5vZGVtYXNrKQogeworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkOwogCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7CiAJCS5nZnBfbWFzayA9IGdmcF9tYXNrLAogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKQEAgLTE5MDAsNyArMTk1MywxNSBAQAogCQkubm9kZW1hc2sgPSBub2RlbWFzaywKIAl9OwogCi0JcmV0dXJuIGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCAmc2MpOworCXRyYWNlX21tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9iZWdpbihvcmRlciwKKwkJCQlzYy5tYXlfd3JpdGVwYWdlLAorCQkJCWdmcF9tYXNrKTsKKworCW5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCAmc2MpOworCisJdHJhY2VfbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2VuZChucl9yZWNsYWltZWQpOworCisJcmV0dXJuIG5yX3JlY2xhaW1lZDsKIH0KIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCkBAIC0xOTA4LDkgKzE5NjksMTAgQEAKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZV96b25lKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQlnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCiAJCQkJCQl1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcywKLQkJCQkJCXN0cnVjdCB6b25lICp6b25lLCBpbnQgbmlkKQorCQkJCQkJc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKKwkJLm5yX3RvX3JlY2xhaW0gPSBTV0FQX0NMVVNURVJfTUFYLAogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKIAkJLm1heV91bm1hcCA9IDEsCiAJCS5tYXlfc3dhcCA9ICFub3N3YXAsCkBAIC0xOTE4LDEzICsxOTgwLDEzIEBACiAJCS5vcmRlciA9IDAsCiAJCS5tZW1fY2dyb3VwID0gbWVtLAogCX07Ci0Jbm9kZW1hc2tfdCBubSAgPSBub2RlbWFza19vZl9ub2RlKG5pZCk7Ci0KIAlzYy5nZnBfbWFzayA9IChnZnBfbWFzayAmIEdGUF9SRUNMQUlNX01BU0spIHwKIAkJCShHRlBfSElHSFVTRVJfTU9WQUJMRSAmIH5HRlBfUkVDTEFJTV9NQVNLKTsKLQlzYy5ub2RlbWFzayA9ICZubTsKLQlzYy5ucl9yZWNsYWltZWQgPSAwOwotCXNjLm5yX3NjYW5uZWQgPSAwOworCisJdHJhY2VfbW1fdm1zY2FuX21lbWNnX3NvZnRsaW1pdF9yZWNsYWltX2JlZ2luKDAsCisJCQkJCQkgICAgICBzYy5tYXlfd3JpdGVwYWdlLAorCQkJCQkJICAgICAgc2MuZ2ZwX21hc2spOworCiAJLyoKIAkgKiBOT1RFOiBBbHRob3VnaCB3ZSBjYW4gZ2V0IHRoZSBwcmlvcml0eSBmaWVsZCwgdXNpbmcgaXQKIAkgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi4KQEAgLTE5MzMsNiArMTk5NSw5IEBACiAJICogdGhlIHByaW9yaXR5IGFuZCBtYWtlIGl0IHplcm8uCiAJICovCiAJc2hyaW5rX3pvbmUoMCwgem9uZSwgJnNjKTsKKworCXRyYWNlX21tX3Ztc2Nhbl9tZW1jZ19zb2Z0bGltaXRfcmVjbGFpbV9lbmQoc2MubnJfcmVjbGFpbWVkKTsKKwogCXJldHVybiBzYy5ucl9yZWNsYWltZWQ7CiB9CiAKQEAgLTE5NDIsNiArMjAwNyw3IEBACiAJCQkJCSAgIHVuc2lnbmVkIGludCBzd2FwcGluZXNzKQogewogCXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7CisJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQ7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGUsCiAJCS5tYXlfdW5tYXAgPSAxLApAQCAtMTk1Niw3ICsyMDIyLDE2IEBACiAJc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKSB8CiAJCQkoR0ZQX0hJR0hVU0VSX01PVkFCTEUgJiB+R0ZQX1JFQ0xBSU1fTUFTSyk7CiAJem9uZWxpc3QgPSBOT0RFX0RBVEEobnVtYV9ub2RlX2lkKCkpLT5ub2RlX3pvbmVsaXN0czsKLQlyZXR1cm4gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsICZzYyk7CisKKwl0cmFjZV9tbV92bXNjYW5fbWVtY2dfcmVjbGFpbV9iZWdpbigwLAorCQkJCQkgICAgc2MubWF5X3dyaXRlcGFnZSwKKwkJCQkJICAgIHNjLmdmcF9tYXNrKTsKKworCW5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCAmc2MpOworCisJdHJhY2VfbW1fdm1zY2FuX21lbWNnX3JlY2xhaW1fZW5kKG5yX3JlY2xhaW1lZCk7CisKKwlyZXR1cm4gbnJfcmVjbGFpbWVkOwogfQogI2VuZGlmCiAKQEAgLTIwMjgsMjIgKzIxMDMsMTIgQEAKIAkJLm9yZGVyID0gb3JkZXIsCiAJCS5tZW1fY2dyb3VwID0gTlVMTCwKIAl9OwotCS8qCi0JICogdGVtcF9wcmlvcml0eSBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoZSBzY2FubmluZyBwcmlvcml0eSBhdCB3aGljaAotCSAqIHRoaXMgem9uZSB3YXMgc3VjY2Vzc2Z1bGx5IHJlZmlsbGVkIHRvCi0JICogZnJlZV9wYWdlcyA9PSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLgotCSAqLwotCWludCB0ZW1wX3ByaW9yaXR5W01BWF9OUl9aT05FU107Ci0KIGxvb3BfYWdhaW46CiAJdG90YWxfc2Nhbm5lZCA9IDA7CiAJc2MubnJfcmVjbGFpbWVkID0gMDsKIAlzYy5tYXlfd3JpdGVwYWdlID0gIWxhcHRvcF9tb2RlOwogCWNvdW50X3ZtX2V2ZW50KFBBR0VPVVRSVU4pOwogCi0JZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ucl96b25lczsgaSsrKQotCQl0ZW1wX3ByaW9yaXR5W2ldID0gREVGX1BSSU9SSVRZOwotCiAJZm9yIChwcmlvcml0eSA9IERFRl9QUklPUklUWTsgcHJpb3JpdHkgPj0gMDsgcHJpb3JpdHktLSkgewogCQlpbnQgZW5kX3pvbmUgPSAwOwkvKiBJbmNsdXNpdmUuICAwID0gWk9ORV9ETUEgKi8KIAkJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMgPSAwOwpAQCAtMjEwMyw3ICsyMTY4LDYgQEAKIAkJZm9yIChpID0gMDsgaSA8PSBlbmRfem9uZTsgaSsrKSB7CiAJCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBnZGF0LT5ub2RlX3pvbmVzICsgaTsKIAkJCWludCBucl9zbGFiOwotCQkJaW50IG5pZCwgemlkOwogCiAJCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjExMSwxOCArMjE3NSwxNCBAQAogCQkJaWYgKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlICYmIHByaW9yaXR5ICE9IERFRl9QUklPUklUWSkKIAkJCQljb250aW51ZTsKIAotCQkJdGVtcF9wcmlvcml0eVtpXSA9IHByaW9yaXR5OwogCQkJc2MubnJfc2Nhbm5lZCA9IDA7Ci0JCQlub3RlX3pvbmVfc2Nhbm5pbmdfcHJpb3JpdHkoem9uZSwgcHJpb3JpdHkpOwogCi0JCQluaWQgPSBwZ2RhdC0+bm9kZV9pZDsKLQkJCXppZCA9IHpvbmVfaWR4KHpvbmUpOwogCQkJLyoKIAkJCSAqIENhbGwgc29mdCBsaW1pdCByZWNsYWltIGJlZm9yZSBjYWxsaW5nIHNocmlua196b25lLgogCQkJICogRm9yIG5vdyB3ZSBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZQogCQkJICovCi0JCQltZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVjbGFpbSh6b25lLCBvcmRlciwgc2MuZ2ZwX21hc2ssCi0JCQkJCQkJbmlkLCB6aWQpOworCQkJbWVtX2Nncm91cF9zb2Z0X2xpbWl0X3JlY2xhaW0oem9uZSwgb3JkZXIsIHNjLmdmcF9tYXNrKTsKKwogCQkJLyoKIAkJCSAqIFdlIHB1dCBlcXVhbCBwcmVzc3VyZSBvbiBldmVyeSB6b25lLCB1bmxlc3Mgb25lCiAJCQkgKiB6b25lIGhhcyB3YXkgdG9vIG1hbnkgcGFnZXMgZnJlZSBhbHJlYWR5LgpAQCAtMjE4NiwxNiArMjI0Niw2IEBACiAJCQlicmVhazsKIAl9CiBvdXQ6Ci0JLyoKLQkgKiBOb3RlIHdpdGhpbiBlYWNoIHpvbmUgdGhlIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHRoaXMgem9uZSB3YXMKLQkgKiBicm91Z2h0IGludG8gYSBoYXBweSBzdGF0ZS4gIFNvIHRoYXQgdGhlIG5leHQgdGhyZWFkIHdoaWNoIHNjYW5zIHRoaXMKLQkgKiB6b25lIHdpbGwgc3RhcnQgb3V0IGF0IHRoYXQgcHJpb3JpdHkgbGV2ZWwuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IHBnZGF0LT5ucl96b25lczsgaSsrKSB7Ci0JCXN0cnVjdCB6b25lICp6b25lID0gcGdkYXQtPm5vZGVfem9uZXMgKyBpOwotCi0JCXpvbmUtPnByZXZfcHJpb3JpdHkgPSB0ZW1wX3ByaW9yaXR5W2ldOwotCX0KIAlpZiAoIWFsbF96b25lc19vaykgewogCQljb25kX3Jlc2NoZWQoKTsKIApAQCAtMjI5OSw5ICsyMzQ5LDEwIEBACiAJCQkJICogcHJlbWF0dXJlIHNsZWVwLiBJZiBub3QsIHRoZW4gZ28gZnVsbHkKIAkJCQkgKiB0byBzbGVlcCB1bnRpbCBleHBsaWNpdGx5IHdva2VuIHVwCiAJCQkJICovCi0JCQkJaWYgKCFzbGVlcGluZ19wcmVtYXR1cmVseShwZ2RhdCwgb3JkZXIsIHJlbWFpbmluZykpCisJCQkJaWYgKCFzbGVlcGluZ19wcmVtYXR1cmVseShwZ2RhdCwgb3JkZXIsIHJlbWFpbmluZykpIHsKKwkJCQkJdHJhY2VfbW1fdm1zY2FuX2tzd2FwZF9zbGVlcChwZ2RhdC0+bm9kZV9pZCk7CiAJCQkJCXNjaGVkdWxlKCk7Ci0JCQkJZWxzZSB7CisJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKHJlbWFpbmluZykKIAkJCQkJCWNvdW50X3ZtX2V2ZW50KEtTV0FQRF9MT1dfV01BUktfSElUX1FVSUNLTFkpOwogCQkJCQllbHNlCkBAIC0yMzIxLDggKzIzNzIsMTAgQEAKIAkJICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJ3QgY2FsbCBiYWxhbmNlX3BnZGF0CiAJCSAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3IKIAkJICovCi0JCWlmICghcmV0KQorCQlpZiAoIXJldCkgeworCQkJdHJhY2VfbW1fdm1zY2FuX2tzd2FwZF93YWtlKHBnZGF0LT5ub2RlX2lkLCBvcmRlcik7CiAJCQliYWxhbmNlX3BnZGF0KHBnZGF0LCBvcmRlcik7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzQyLDYgKzIzOTUsNyBAQAogCQlyZXR1cm47CiAJaWYgKHBnZGF0LT5rc3dhcGRfbWF4X29yZGVyIDwgb3JkZXIpCiAJCXBnZGF0LT5rc3dhcGRfbWF4X29yZGVyID0gb3JkZXI7CisJdHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtPm5vZGVfaWQsIHpvbmVfaWR4KHpvbmUpLCBvcmRlcik7CiAJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIEdGUF9LRVJORUwpKQogCQlyZXR1cm47CiAJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZwZ2RhdC0+a3N3YXBkX3dhaXQpKQpAQCAtMjU5MCw5ICsyNjQ0LDggQEAKIAkJLnN3YXBwaW5lc3MgPSB2bV9zd2FwcGluZXNzLAogCQkub3JkZXIgPSBvcmRlciwKIAl9OwotCXVuc2lnbmVkIGxvbmcgc2xhYl9yZWNsYWltYWJsZTsKKwl1bnNpZ25lZCBsb25nIG5yX3NsYWJfcGFnZXMwLCBucl9zbGFiX3BhZ2VzMTsKIAotCWRpc2FibGVfc3dhcF90b2tlbigpOwogCWNvbmRfcmVzY2hlZCgpOwogCS8qCiAJICogV2UgbmVlZCB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIGZyb20gdGhlIHJlc2VydmVzIGZvciBSRUNMQUlNX1NXQVAKQEAgLTI2MTEsMTQgKzI2NjQsMTMgQEAKIAkJICovCiAJCXByaW9yaXR5ID0gWk9ORV9SRUNMQUlNX1BSSU9SSVRZOwogCQlkbyB7Ci0JCQlub3RlX3pvbmVfc2Nhbm5pbmdfcHJpb3JpdHkoem9uZSwgcHJpb3JpdHkpOwogCQkJc2hyaW5rX3pvbmUocHJpb3JpdHksIHpvbmUsICZzYyk7CiAJCQlwcmlvcml0eS0tOwogCQl9IHdoaWxlIChwcmlvcml0eSA+PSAwICYmIHNjLm5yX3JlY2xhaW1lZCA8IG5yX3BhZ2VzKTsKIAl9CiAKLQlzbGFiX3JlY2xhaW1hYmxlID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1NMQUJfUkVDTEFJTUFCTEUpOwotCWlmIChzbGFiX3JlY2xhaW1hYmxlID4gem9uZS0+bWluX3NsYWJfcGFnZXMpIHsKKwlucl9zbGFiX3BhZ2VzMCA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKKwlpZiAobnJfc2xhYl9wYWdlczAgPiB6b25lLT5taW5fc2xhYl9wYWdlcykgewogCQkvKgogCQkgKiBzaHJpbmtfc2xhYigpIGRvZXMgbm90IGN1cnJlbnRseSBhbGxvdyB1cyB0byBkZXRlcm1pbmUgaG93CiAJCSAqIG1hbnkgcGFnZXMgd2VyZSBmcmVlZCBpbiB0aGlzIHpvbmUuIFNvIHdlIHRha2UgdGhlIGN1cnJlbnQKQEAgLTI2MjksMTcgKzI2ODEsMjcgQEAKIAkJICogTm90ZSB0aGF0IHNocmlua19zbGFiIHdpbGwgZnJlZSBtZW1vcnkgb24gYWxsIHpvbmVzIGFuZCBtYXkKIAkJICogdGFrZSBhIGxvbmcgdGltZS4KIAkJICovCi0JCXdoaWxlIChzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBnZnBfbWFzaywgb3JkZXIpICYmCi0JCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfU0xBQl9SRUNMQUlNQUJMRSkgPgotCQkJCXNsYWJfcmVjbGFpbWFibGUgLSBucl9wYWdlcykKLQkJCTsKKwkJZm9yICg7OykgeworCQkJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMgPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpOworCisJCQkvKiBObyByZWNsYWltYWJsZSBzbGFiIG9yIHZlcnkgbG93IG1lbW9yeSBwcmVzc3VyZSAqLworCQkJaWYgKCFzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBnZnBfbWFzaywgbHJ1X3BhZ2VzKSkKKwkJCQlicmVhazsKKworCQkJLyogRnJlZWQgZW5vdWdoIG1lbW9yeSAqLworCQkJbnJfc2xhYl9wYWdlczEgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwKKwkJCQkJCQlOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKKwkJCWlmIChucl9zbGFiX3BhZ2VzMSArIG5yX3BhZ2VzIDw9IG5yX3NsYWJfcGFnZXMwKQorCQkJCWJyZWFrOworCQl9CiAKIAkJLyoKIAkJICogVXBkYXRlIG5yX3JlY2xhaW1lZCBieSB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgd2UKIAkJICogcmVjbGFpbWVkIGZyb20gdGhpcyB6b25lLgogCQkgKi8KLQkJc2MubnJfcmVjbGFpbWVkICs9IHNsYWJfcmVjbGFpbWFibGUgLQotCQkJem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX1NMQUJfUkVDTEFJTUFCTEUpOworCQlucl9zbGFiX3BhZ2VzMSA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKTsKKwkJaWYgKG5yX3NsYWJfcGFnZXMxIDwgbnJfc2xhYl9wYWdlczApCisJCQlzYy5ucl9yZWNsYWltZWQgKz0gbnJfc2xhYl9wYWdlczAgLSBucl9zbGFiX3BhZ2VzMTsKIAl9CiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggNzc1OTk0MS4uZjM4OTE2OCAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTIyLDE0ICsyMiwxNCBAQAogREVGSU5FX1BFUl9DUFUoc3RydWN0IHZtX2V2ZW50X3N0YXRlLCB2bV9ldmVudF9zdGF0ZXMpID0ge3swfX07CiBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodm1fZXZlbnRfc3RhdGVzKTsKIAotc3RhdGljIHZvaWQgc3VtX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICpyZXQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrKQorc3RhdGljIHZvaWQgc3VtX3ZtX2V2ZW50cyh1bnNpZ25lZCBsb25nICpyZXQpCiB7CiAJaW50IGNwdTsKIAlpbnQgaTsKIAogCW1lbXNldChyZXQsIDAsIE5SX1ZNX0VWRU5UX0lURU1TICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAotCWZvcl9lYWNoX2NwdShjcHUsIGNwdW1hc2spIHsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlzdHJ1Y3Qgdm1fZXZlbnRfc3RhdGUgKnRoaXMgPSAmcGVyX2NwdSh2bV9ldmVudF9zdGF0ZXMsIGNwdSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IE5SX1ZNX0VWRU5UX0lURU1TOyBpKyspCkBAIC00NSw3ICs0NSw3IEBACiB2b2lkIGFsbF92bV9ldmVudHModW5zaWduZWQgbG9uZyAqcmV0KQogewogCWdldF9vbmxpbmVfY3B1cygpOwotCXN1bV92bV9ldmVudHMocmV0LCBjcHVfb25saW5lX21hc2spOworCXN1bV92bV9ldmVudHMocmV0KTsKIAlwdXRfb25saW5lX2NwdXMoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFsbF92bV9ldmVudHMpOwpAQCAtODUzLDExICs4NTMsOSBAQAogCX0KIAlzZXFfcHJpbnRmKG0sCiAJCSAgICJcbiAgYWxsX3VucmVjbGFpbWFibGU6ICV1IgotCQkgICAiXG4gIHByZXZfcHJpb3JpdHk6ICAgICAlaSIKIAkJICAgIlxuICBzdGFydF9wZm46ICAgICAgICAgJWx1IgogCQkgICAiXG4gIGluYWN0aXZlX3JhdGlvOiAgICAldSIsCiAJCSAgIHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlLAotCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAogCQkgICB6b25lLT56b25lX3N0YXJ0X3BmbiwKIAkJICAgem9uZS0+aW5hY3RpdmVfcmF0aW8pOwogCXNlcV9wdXRjKG0sICdcbicpOwpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBlMjRmYTA4Li5lMzMwNTk0IDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjEzLDYgKzIxMyw3IEBACiBzb3VyY2UgIm5ldC9pZWVlODAyMTU0L0tjb25maWciCiBzb3VyY2UgIm5ldC9zY2hlZC9LY29uZmlnIgogc291cmNlICJuZXQvZGNiL0tjb25maWciCitzb3VyY2UgIm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZyIKIAogY29uZmlnIFJQUwogCWJvb2xlYW4KZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQppbmRleCA0MWQ0MjAwLi5lYTYwZmJjIDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L01ha2VmaWxlCkBAIC02NywzICs2Nyw0IEBACiBvYmotJChDT05GSUdfU1lTQ1RMKQkJKz0gc3lzY3RsX25ldC5vCiBlbmRpZgogb2JqLSQoQ09ORklHX1dJTUFYKQkJKz0gd2ltYXgvCitvYmotJChDT05GSUdfRE5TX1JFU09MVkVSKQkrPSBkbnNfcmVzb2x2ZXIvCmRpZmYgLS1naXQgYS9uZXQvYXRtL3BwcG9hdG0uYyBiL25ldC9hdG0vcHBwb2F0bS5jCmluZGV4IGU0OWJiNmQ5Li5lOWFjZWQwIDEwMDY0NAotLS0gYS9uZXQvYXRtL3BwcG9hdG0uYworKysgYi9uZXQvYXRtL3BwcG9hdG0uYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJcmV0dXJuIC1FTk9UVFk7CiB9CiAKLXN0YXRpYyAvKmNvbnN0Ki8gc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvYXRtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9hdG1fb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwb2F0bV9zZW5kLAogCS5pb2N0bCA9IHBwcG9hdG1fZGV2cHBwX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA4MzAzZjFjLi5jNTJmMDkxIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC05MjQsNyArOTI0LDcgQEAKIAogCWhjaV9jb25uX2hhc2hfaW5pdChoZGV2KTsKIAotCUlOSVRfTElTVF9IRUFEKCZoZGV2LT5ibGFja2xpc3QubGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhkZXYtPmJsYWNrbGlzdCk7CiAKIAltZW1zZXQoJmhkZXYtPnN0YXQsIDAsIHNpemVvZihzdHJ1Y3QgaGNpX2Rldl9zdGF0cykpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKaW5kZXggNGYxNzBhNS4uODNhY2QxNiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwpAQCAtMTY4LDkgKzE2OCw4IEBACiBzdHJ1Y3QgYmRhZGRyX2xpc3QgKmhjaV9ibGFja2xpc3RfbG9va3VwKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnA7Ci0Jc3RydWN0IGJkYWRkcl9saXN0ICpibGFja2xpc3QgPSAmaGRldi0+YmxhY2tsaXN0OwogCi0JbGlzdF9mb3JfZWFjaChwLCAmYmxhY2tsaXN0LT5saXN0KSB7CisJbGlzdF9mb3JfZWFjaChwLCAmaGRldi0+YmxhY2tsaXN0KSB7CiAJCXN0cnVjdCBiZGFkZHJfbGlzdCAqYjsKIAogCQliID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmRhZGRyX2xpc3QsIGxpc3QpOwpAQCAtMjAyLDcgKzIwMSw3IEBACiAKIAliYWNweSgmZW50cnktPmJkYWRkciwgJmJkYWRkcik7CiAKLQlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZoZGV2LT5ibGFja2xpc3QubGlzdCk7CisJbGlzdF9hZGQoJmVudHJ5LT5saXN0LCAmaGRldi0+YmxhY2tsaXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjEwLDkgKzIwOSw4IEBACiBpbnQgaGNpX2JsYWNrbGlzdF9jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmJsYWNrbGlzdCA9ICZoZGV2LT5ibGFja2xpc3Q7CiAKLQlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsYWNrbGlzdC0+bGlzdCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmaGRldi0+YmxhY2tsaXN0KSB7CiAJCXN0cnVjdCBiZGFkZHJfbGlzdCAqYjsKIAogCQliID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgYmRhZGRyX2xpc3QsIGxpc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKaW5kZXggY2U0NGM0Ny4uOGZiOTY3YiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCkBAIC00MzksMTIgKzQzOSwxMSBAQAogc3RhdGljIGludCBibGFja2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnApCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCXN0cnVjdCBiZGFkZHJfbGlzdCAqYmxhY2tsaXN0ID0gJmhkZXYtPmJsYWNrbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCiAJaGNpX2Rldl9sb2NrX2JoKGhkZXYpOwogCi0JbGlzdF9mb3JfZWFjaChsLCAmYmxhY2tsaXN0LT5saXN0KSB7CisJbGlzdF9mb3JfZWFjaChsLCAmaGRldi0+YmxhY2tsaXN0KSB7CiAJCXN0cnVjdCBiZGFkZHJfbGlzdCAqYjsKIAkJYmRhZGRyX3QgYmRhZGRyOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggOWJhMWU4ZS4uM2UzY2Q5ZCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtMjUyNyw2ICsyNTI3LDEwIEBACiAJCWlmIChwaS0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKIAkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOwogCisJCWlmICghKHBpLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0VSVE0pICYmCisJCQkJIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9TVFJFQU1JTkcpKQorCQkJYnJlYWs7CisKIAkJcmZjLm1vZGUgICAgICAgICAgICA9IEwyQ0FQX01PREVfQkFTSUM7CiAJCXJmYy50eHdpbl9zaXplICAgICAgPSAwOwogCQlyZmMubWF4X3RyYW5zbWl0ICAgID0gMDsKQEAgLTI1MzQsNiArMjUzOCw4IEBACiAJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSAwOwogCQlyZmMubWF4X3BkdV9zaXplICAgID0gMDsKIAorCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsIHNpemVvZihyZmMpLAorCQkJCQkJCSh1bnNpZ25lZCBsb25nKSAmcmZjKTsKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX01PREVfRVJUTToKQEAgLTI1NDYsNiArMjU1Miw5IEBACiAJCWlmIChMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSA+IHBpLT5jb25uLT5tdHUgLSAxMCkKIAkJCXJmYy5tYXhfcGR1X3NpemUgPSBjcHVfdG9fbGUxNihwaS0+Y29ubi0+bXR1IC0gMTApOwogCisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywgc2l6ZW9mKHJmYyksCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCiAJCWlmICghKHBpLT5jb25uLT5mZWF0X21hc2sgJiBMMkNBUF9GRUFUX0ZDUykpCiAJCQlicmVhazsKIApAQCAtMjU2Niw2ICsyNTc1LDkgQEAKIAkJaWYgKEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFID4gcGktPmNvbm4tPm10dSAtIDEwKQogCQkJcmZjLm1heF9wZHVfc2l6ZSA9IGNwdV90b19sZTE2KHBpLT5jb25uLT5tdHUgLSAxMCk7CiAKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLCBzaXplb2YocmZjKSwKKwkJCQkJCQkodW5zaWduZWQgbG9uZykgJnJmYyk7CisKIAkJaWYgKCEocGktPmNvbm4tPmZlYXRfbWFzayAmIEwyQ0FQX0ZFQVRfRkNTKSkKIAkJCWJyZWFrOwogCkBAIC0yNTc3LDkgKzI1ODksNiBAQAogCQlicmVhazsKIAl9CiAKLQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsIHNpemVvZihyZmMpLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcpICZyZmMpOwotCiAJLyogRklYTUU6IE5lZWQgYWN0dWFsIHZhbHVlIG9mIHRoZSBmbHVzaCB0aW1lb3V0ICovCiAJLy9pZiAoZmx1c2hfdG8gIT0gTDJDQVBfREVGQVVMVF9GTFVTSF9UTykKIAkvLyAgIGwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZMVVNIX1RPLCAyLCBwaS0+Zmx1c2hfdG8pOwpAQCAtMzMzOSw2ICszMzQ4LDE1IEBACiAKIAlkZWxfdGltZXIoJmNvbm4tPmluZm9fdGltZXIpOwogCisJaWYgKHJlc3VsdCAhPSBMMkNBUF9JUl9TVUNDRVNTKSB7CisJCWNvbm4tPmluZm9fc3RhdGUgfD0gTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX0RPTkU7CisJCWNvbm4tPmluZm9faWRlbnQgPSAwOworCisJCWwyY2FwX2Nvbm5fc3RhcnQoY29ubik7CisKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHR5cGUgPT0gTDJDQVBfSVRfRkVBVF9NQVNLKSB7CiAJCWNvbm4tPmZlYXRfbWFzayA9IGdldF91bmFsaWduZWRfbGUzMihyc3AtPmRhdGEpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IDAyNjIwNWMuLmJlZmMzYTUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0xMTgzLDcgKzExODMsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9fZXhpdCByZmNvbW1fY2xlYW51cF90dHlzKHZvaWQpCit2b2lkIHJmY29tbV9jbGVhbnVwX3R0eXModm9pZCkKIHsKIAl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIocmZjb21tX3R0eV9kcml2ZXIpOwogCXB1dF90dHlfZHJpdmVyKHJmY29tbV90dHlfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZTFjMWNkYy4uMWFlNjU0MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTI1MTcsNiArMjUxNyw3IEBACiAJCXN0cnVjdCBycHNfZGV2X2Zsb3cgdm9pZGZsb3csICpyZmxvdyA9ICZ2b2lkZmxvdzsKIAkJaW50IGNwdTsKIAorCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAkJcmN1X3JlYWRfbG9jaygpOwogCiAJCWNwdSA9IGdldF9ycHNfY3B1KHNrYi0+ZGV2LCBza2IsICZyZmxvdyk7CkBAIC0yNTI2LDYgKzI1MjcsNyBAQAogCQlyZXQgPSBlbnF1ZXVlX3RvX2JhY2tsb2coc2tiLCBjcHUsICZyZmxvdy0+bGFzdF9xdGFpbCk7CiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXByZWVtcHRfZW5hYmxlKCk7CiAJfQogI2Vsc2UKIAl7CkBAIC0zMDcyLDcgKzMwNzQsNyBAQAogCWludCBtYWNfbGVuOwogCWVudW0gZ3JvX3Jlc3VsdCByZXQ7CiAKLQlpZiAoIShza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTykpCisJaWYgKCEoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pIHx8IG5ldHBvbGxfcnhfb24oc2tiKSkKIAkJZ290byBub3JtYWw7CiAKIAlpZiAoc2tiX2lzX2dzbyhza2IpIHx8IHNrYl9oYXNfZnJhZ3Moc2tiKSkKQEAgLTMxNTksOSArMzE2MSw2IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKLQlpZiAobmV0cG9sbF9yeF9vbihza2IpKQotCQlyZXR1cm4gR1JPX05PUk1BTDsKLQogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewogCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0KIAkJCShwLT5kZXYgPT0gc2tiLT5kZXYpICYmCmRpZmYgLS1naXQgYS9uZXQvZG5zX3Jlc29sdmVyL0tjb25maWcgYi9uZXQvZG5zX3Jlc29sdmVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkNDlmNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZwpAQCAtMCwwICsxLDI3IEBACisjCisjIENvbmZpZ3VyYXRpb24gZm9yIEROUyBSZXNvbHZlcgorIworY29uZmlnIEROU19SRVNPTFZFUgorCXRyaXN0YXRlICJETlMgUmVzb2x2ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVCAmJiBLRVlTCisJaGVscAorCSAgU2F5aW5nIFkgaGVyZSB3aWxsIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEROUyBSZXNvbHZlciBrZXkgdHlwZQorCSAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWFrZSB1cGNhbGxzIHRvIHBlcmZvcm0gRE5TIGxvb2t1cHMgaW4KKwkgIHVzZXJzcGFjZS4KKworCSAgRE5TIFJlc29sdmVyIGlzIHVzZWQgdG8gcXVlcnkgRE5TIHNlcnZlciBmb3IgaW5mb3JtYXRpb24uICBFeGFtcGxlcworCSAgYmVpbmcgcmVzb2x2aW5nIGEgVU5DIGhvc3RuYW1lIGVsZW1lbnQgdG8gYW4gSVAgYWRkcmVzcyBmb3IgQ0lGUyBvcgorCSAgcGVyZm9ybWluZyBhIEROUyBxdWVyeSBmb3IgQUZTREIgcmVjb3JkcyBzbyB0aGF0IEFGUyBjYW4gbG9jYXRlIGEKKwkgIGNlbGwncyB2b2x1bWUgbG9jYXRpb24gZGF0YWJhc2Ugc2VydmVycy4KKworCSAgRE5TIFJlc29sdmVyIGlzIHVzZWQgYnkgdGhlIENJRlMgYW5kIEFGUyBtb2R1bGVzLCBhbmQgd291bGQgc3VwcG9ydAorCSAgU01CMiBsYXRlci4gIEROUyBSZXNvbHZlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVzZXJzcGFjZSB1cGNhbGwKKwkgIGhlbHBlciAiL3NiaW4vZG5zLnJlc29sdmVyIiB2aWEgL2V0Yy9yZXF1ZXN0LWtleS5jb25mLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci50eHQ+IGZvciBmdXJ0aGVyCisJICBpbmZvcm1hdGlvbi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICBkbnNyZXNvbHZlci4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvTWFrZWZpbGUgYi9uZXQvZG5zX3Jlc29sdmVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZWY0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZG5zX3Jlc29sdmVyL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IEROUyBSZXNvbHZlci4KKyMKKworb2JqLSQoQ09ORklHX0ROU19SRVNPTFZFUikgKz0gZG5zX3Jlc29sdmVyLm8KKworZG5zX3Jlc29sdmVyLW9ianMgOj0gIGRuc19rZXkubyBkbnNfcXVlcnkubwpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMgYi9uZXQvZG5zX3Jlc29sdmVyL2Ruc19rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDBhMDRkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qIEtleSB0eXBlIHVzZWQgdG8gY2FjaGUgRE5TIGxvb2t1cHMgbWFkZSBieSB0aGUga2VybmVsCisgKgorICogU2VlIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CisgKgorICogICBDb3B5cmlnaHQgKGMpIDIwMDcgSWdvciBNYW1tZWRvdgorICogICBBdXRob3Iocyk6IElnb3IgTWFtbWVkb3YgKG5pYWxsYWluQGdtYWlsLmNvbSkKKyAqICAgICAgICAgICAgICBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqICAgICAgICAgICAgICBXYW5nIExlaSAod2FuZzg0MDkyNUBnbWFpbC5jb20pCisgKgkJRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva2V5Y3RsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8a2V5cy9kbnNfcmVzb2x2ZXItdHlwZS5oPgorI2luY2x1ZGUgPGtleXMvdXNlci10eXBlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJETlMgUmVzb2x2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIldhbmcgTGVpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3Vuc2lnbmVkIGRuc19yZXNvbHZlcl9kZWJ1ZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZG5zX3Jlc29sdmVyX2RlYnVnLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRE5TIFJlc29sdmVyIGRlYnVnZ2luZyBtYXNrIik7CisKK2NvbnN0IHN0cnVjdCBjcmVkICpkbnNfcmVzb2x2ZXJfY2FjaGU7CisKKy8qCisgKiBJbnN0YW50aWF0ZSBhIHVzZXIgZGVmaW5lZCBrZXkgZm9yIGRuc19yZXNvbHZlci4KKyAqCisgKiBUaGUgZGF0YSBtdXN0IGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLCB3aXRoIHRoZSBOVUwgY2hhciBhY2NvdW50ZWQgaW4KKyAqIGRhdGFsZW4uCisgKgorICogSWYgdGhlIGRhdGEgY29udGFpbnMgYSAnIycgY2hhcmFjdGVycywgdGhlbiB3ZSB0YWtlIHRoZSBjbGF1c2UgYWZ0ZXIgZWFjaAorICogb25lIHRvIGJlIGFuIG9wdGlvbiBvZiB0aGUgZm9ybSAna2V5PXZhbHVlJy4gIFRoZSBhY3R1YWwgZGF0YSBvZiBpbnRlcmVzdCBpcworICogdGhlIHN0cmluZyBsZWFkaW5nIHVwIHRvIHRoZSBmaXJzdCAnIycuICBGb3IgaW5zdGFuY2U6CisgKgorICogICAgICAgICJpcDEsaXAyLC4uLiNmb289YmFyIgorICovCitzdGF0aWMgaW50CitkbnNfcmVzb2x2ZXJfaW5zdGFudGlhdGUoc3RydWN0IGtleSAqa2V5LCBjb25zdCB2b2lkICpfZGF0YSwgc2l6ZV90IGRhdGFsZW4pCit7CisJc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkOworCWludCByZXQ7CisJc2l6ZV90IHJlc3VsdF9sZW4gPSAwOworCWNvbnN0IGNoYXIgKmRhdGEgPSBfZGF0YSwgKm9wdDsKKworCWtlbnRlcigiJSUlZCwlcywnJXMnLCV6dSIsCisJICAgICAgIGtleS0+c2VyaWFsLCBrZXktPmRlc2NyaXB0aW9uLCBkYXRhLCBkYXRhbGVuKTsKKworCWlmIChkYXRhbGVuIDw9IDEgfHwgIWRhdGEgfHwgZGF0YVtkYXRhbGVuIC0gMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YWxlbi0tOworCisJLyogZGVhbCB3aXRoIGFueSBvcHRpb25zIGVtYmVkZGVkIGluIHRoZSBkYXRhICovCisJb3B0ID0gbWVtY2hyKGRhdGEsICcjJywgZGF0YWxlbik7CisJaWYgKCFvcHQpIHsKKwkJa2RlYnVnKCJubyBvcHRpb25zIGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzdWx0X2xlbiA9IGRhdGFsZW47CisJcmV0ID0ga2V5X3BheWxvYWRfcmVzZXJ2ZShrZXksIHJlc3VsdF9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVwYXlsb2FkID0ga21hbGxvYyhzaXplb2YoKnVwYXlsb2FkKSArIHJlc3VsdF9sZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVwYXlsb2FkKSB7CisJCWtsZWF2ZSgiID0gLUVOT01FTSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1cGF5bG9hZC0+ZGF0YWxlbiA9IHJlc3VsdF9sZW47CisJbWVtY3B5KHVwYXlsb2FkLT5kYXRhLCBkYXRhLCByZXN1bHRfbGVuKTsKKwl1cGF5bG9hZC0+ZGF0YVtyZXN1bHRfbGVuXSA9ICdcMCc7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGtleS0+cGF5bG9hZC5kYXRhLCB1cGF5bG9hZCk7CisKKwlrbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBkZXNjcmlwdGlvbiBpcyBvZiB0aGUgZm9ybSAiWzx0eXBlPjpdPGRvbWFpbl9uYW1lPiIKKyAqCisgKiBUaGUgZG9tYWluIG5hbWUgbWF5IGJlIGEgc2ltcGxlIG5hbWUgb3IgYW4gYWJzb2x1dGUgZG9tYWluIG5hbWUgKHdoaWNoCisgKiBzaG91bGQgZW5kIHdpdGggYSBwZXJpb2QpLiAgVGhlIGRvbWFpbiBuYW1lIGlzIGNhc2UtaW5kZXBlbmRlbnQuCisgKi8KK3N0YXRpYyBpbnQKK2Ruc19yZXNvbHZlcl9tYXRjaChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNvbnN0IHZvaWQgKmRlc2NyaXB0aW9uKQoreworCWludCBzbGVuLCBkbGVuLCByZXQgPSAwOworCWNvbnN0IGNoYXIgKnNyYyA9IGtleS0+ZGVzY3JpcHRpb24sICpkc3AgPSBkZXNjcmlwdGlvbjsKKworCWtlbnRlcigiJXMsJXMiLCBzcmMsIGRzcCk7CisKKwlpZiAoIXNyYyB8fCAhZHNwKQorCQlnb3RvIG5vX21hdGNoOworCisJaWYgKHN0cmNhc2VjbXAoc3JjLCBkc3ApID09IDApCisJCWdvdG8gbWF0Y2hlZDsKKworCXNsZW4gPSBzdHJsZW4oc3JjKTsKKwlkbGVuID0gc3RybGVuKGRzcCk7CisJaWYgKHNsZW4gPD0gMCB8fCBkbGVuIDw9IDApCisJCWdvdG8gbm9fbWF0Y2g7CisJaWYgKHNyY1tzbGVuIC0gMV0gPT0gJy4nKQorCQlzbGVuLS07CisJaWYgKGRzcFtkbGVuIC0gMV0gPT0gJy4nKQorCQlkbGVuLS07CisJaWYgKHNsZW4gIT0gZGxlbiB8fCBzdHJuY2FzZWNtcChzcmMsIGRzcCwgc2xlbikgIT0gMCkKKwkJZ290byBub19tYXRjaDsKKworbWF0Y2hlZDoKKwlyZXQgPSAxOworbm9fbWF0Y2g6CisJa2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGtleV90eXBlIGtleV90eXBlX2Ruc19yZXNvbHZlciA9IHsKKwkubmFtZQkJPSAiZG5zX3Jlc29sdmVyIiwKKwkuaW5zdGFudGlhdGUJPSBkbnNfcmVzb2x2ZXJfaW5zdGFudGlhdGUsCisJLm1hdGNoCQk9IGRuc19yZXNvbHZlcl9tYXRjaCwKKwkucmV2b2tlCQk9IHVzZXJfcmV2b2tlLAorCS5kZXN0cm95CT0gdXNlcl9kZXN0cm95LAorCS5kZXNjcmliZQk9IHVzZXJfZGVzY3JpYmUsCisJLnJlYWQJCT0gdXNlcl9yZWFkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kbnNfcmVzb2x2ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqY3JlZDsKKwlzdHJ1Y3Qga2V5ICprZXlyaW5nOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlJlZ2lzdGVyaW5nIHRoZSAlcyBrZXkgdHlwZVxuIiwKKwkgICAgICAga2V5X3R5cGVfZG5zX3Jlc29sdmVyLm5hbWUpOworCisJLyogY3JlYXRlIGFuIG92ZXJyaWRlIGNyZWRlbnRpYWwgc2V0IHdpdGggYSBzcGVjaWFsIHRocmVhZCBrZXlyaW5nIGluCisJICogd2hpY2ggRE5TIHJlcXVlc3RzIGFyZSBjYWNoZWQKKwkgKgorCSAqIHRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IG1hbGljaW91cyByZWRpcmVjdGlvbnMgZnJvbSBiZWluZyBpbnN0YWxsZWQKKwkgKiB3aXRoIGFkZF9rZXkoKS4KKwkgKi8KKwljcmVkID0gcHJlcGFyZV9rZXJuZWxfY3JlZChOVUxMKTsKKwlpZiAoIWNyZWQpCisJCXJldHVybiAtRU5PTUVNOworCisJa2V5cmluZyA9IGtleV9hbGxvYygma2V5X3R5cGVfa2V5cmluZywgIi5kbnNfcmVzb2x2ZXIiLCAwLCAwLCBjcmVkLAorCQkJICAgIChLRVlfUE9TX0FMTCAmIH5LRVlfUE9TX1NFVEFUVFIpIHwKKwkJCSAgICBLRVlfVVNSX1ZJRVcgfCBLRVlfVVNSX1JFQUQsCisJCQkgICAgS0VZX0FMTE9DX05PVF9JTl9RVU9UQSk7CisJaWYgKElTX0VSUihrZXlyaW5nKSkgeworCQlyZXQgPSBQVFJfRVJSKGtleXJpbmcpOworCQlnb3RvIGZhaWxlZF9wdXRfY3JlZDsKKwl9CisKKwlyZXQgPSBrZXlfaW5zdGFudGlhdGVfYW5kX2xpbmsoa2V5cmluZywgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkX3B1dF9rZXk7CisKKwlyZXQgPSByZWdpc3Rlcl9rZXlfdHlwZSgma2V5X3R5cGVfZG5zX3Jlc29sdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWRfcHV0X2tleTsKKworCS8qIGluc3RydWN0IHJlcXVlc3Rfa2V5KCkgdG8gdXNlIHRoaXMgc3BlY2lhbCBrZXlyaW5nIGFzIGEgY2FjaGUgZm9yCisJICogdGhlIHJlc3VsdHMgaXQgbG9va3MgdXAgKi8KKwljcmVkLT50aHJlYWRfa2V5cmluZyA9IGtleXJpbmc7CisJY3JlZC0+aml0X2tleXJpbmcgPSBLRVlfUkVRS0VZX0RFRkxfVEhSRUFEX0tFWVJJTkc7CisJZG5zX3Jlc29sdmVyX2NhY2hlID0gY3JlZDsKKworCWtkZWJ1ZygiRE5TIHJlc29sdmVyIGtleXJpbmc6ICVkXG4iLCBrZXlfc2VyaWFsKGtleXJpbmcpKTsKKwlyZXR1cm4gMDsKKworZmFpbGVkX3B1dF9rZXk6CisJa2V5X3B1dChrZXlyaW5nKTsKK2ZhaWxlZF9wdXRfY3JlZDoKKwlwdXRfY3JlZChjcmVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kbnNfcmVzb2x2ZXIodm9pZCkKK3sKKwlrZXlfcmV2b2tlKGRuc19yZXNvbHZlcl9jYWNoZS0+dGhyZWFkX2tleXJpbmcpOworCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX2Ruc19yZXNvbHZlcik7CisJcHV0X2NyZWQoZG5zX3Jlc29sdmVyX2NhY2hlKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlVucmVnaXN0ZXJlZCAlcyBrZXkgdHlwZVxuIiwKKwkgICAgICAga2V5X3R5cGVfZG5zX3Jlc29sdmVyLm5hbWUpOworfQorCittb2R1bGVfaW5pdChpbml0X2Ruc19yZXNvbHZlcikKK21vZHVsZV9leGl0KGV4aXRfZG5zX3Jlc29sdmVyKQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfcXVlcnkuYyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkNTI1NQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9kbnNfcmVzb2x2ZXIvZG5zX3F1ZXJ5LmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qIFVwY2FsbCByb3V0aW5lLCBkZXNpZ25lZCB0byB3b3JrIGFzIGEga2V5IHR5cGUgYW5kIHdvcmtpbmcgdGhyb3VnaAorICogL3NiaW4vcmVxdWVzdC1rZXkgdG8gY29udGFjdCB1c2Vyc3BhY2Ugd2hlbiBoYW5kbGluZyBETlMgcXVlcmllcy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Ruc19yZXNvbHZlci50eHQKKyAqCisgKiAgIENvcHlyaWdodCAoYykgMjAwNyBJZ29yIE1hbW1lZG92CisgKiAgIEF1dGhvcihzKTogSWdvciBNYW1tZWRvdiAobmlhbGxhaW5AZ21haWwuY29tKQorICogICAgICAgICAgICAgIFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICogICAgICAgICAgICAgIFdhbmcgTGVpICh3YW5nODQwOTI1QGdtYWlsLmNvbSkKKyAqCQlEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqICAgVGhlIHVwY2FsbCB3cmFwcGVyIHVzZWQgdG8gbWFrZSBhbiBhcmJpdHJhcnkgRE5TIHF1ZXJ5LgorICoKKyAqICAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgYXBwcm9wcmlhdGUgdXNlcnNwYWNlIHRvb2wgZG5zLnVwY2FsbCB0byBiZQorICogICBpbnN0YWxsZWQgYW5kIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQorICogICAvZXRjL3JlcXVlc3Qta2V5LmNvbmYgZmlsZToKKyAqCisgKgljcmVhdGUgZG5zX3Jlc29sdmVyICogKiAvc2Jpbi9kbnMudXBjYWxsICVrCisgKgorICogICBGb3IgZXhhbXBsZSB0byB1c2UgdGhpcyBtb2R1bGUgdG8gcXVlcnkgQUZTREIgUlI6CisgKgorICoJY3JlYXRlIGRuc19yZXNvbHZlciBhZnNkYjoqICogL3NiaW4vZG5zLmFmc2RiICVrCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Ruc19yZXNvbHZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGtleXMvZG5zX3Jlc29sdmVyLXR5cGUuaD4KKyNpbmNsdWRlIDxrZXlzL3VzZXItdHlwZS5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoqCisgKiBkbnNfcXVlcnkgLSBRdWVyeSB0aGUgRE5TCisgKiBAdHlwZTogUXVlcnkgdHlwZSAob3IgTlVMTCBmb3Igc3RyYWlnaHQgaG9zdC0+SVAgbG9va3VwKQorICogQG5hbWU6IE5hbWUgdG8gbG9vayB1cAorICogQG5hbWVsZW46IExlbmd0aCBvZiBuYW1lCisgKiBAb3B0aW9uczogUmVxdWVzdCBvcHRpb25zIChvciBOVUxMIGlmIG5vIG9wdGlvbnMpCisgKiBAX3Jlc3VsdDogV2hlcmUgdG8gcGxhY2UgdGhlIHJldHVybmVkIGRhdGEuCisgKiBAX2V4cGlyeTogV2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdCBleHBpcnkgdGltZSAob3IgTlVMTCkKKyAqCisgKiBUaGUgZGF0YSB3aWxsIGJlIHJldHVybmVkIGluIHRoZSBwb2ludGVyIGF0ICpyZXN1bHQsIGFuZCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBpdC4KKyAqCisgKiBUaGUgZGVzY3JpcHRpb24gc2hvdWxkIGJlIG9mIHRoZSBmb3JtICJbPHF1ZXJ5X3R5cGU+Ol08ZG9tYWluX25hbWU+IiwgYW5kCisgKiB0aGUgb3B0aW9ucyBuZWVkIHRvIGJlIGFwcHJvcHJpYXRlIGZvciB0aGUgcXVlcnkgdHlwZSByZXF1ZXN0ZWQuICBJZiBubworICogcXVlcnlfdHlwZSBpcyBnaXZlbiwgdGhlbiB0aGUgcXVlcnkgaXMgYSBzdHJhaWdodCBob3N0bmFtZSB0byBJUCBhZGRyZXNzCisgKiBsb29rdXAuCisgKgorICogVGhlIEROUyByZXNvbHV0aW9uIGxvb2t1cCBpcyBwZXJmb3JtZWQgYnkgdXBjYWxsaW5nIHRvIHVzZXJzcGFjZSBieSB3YXkgb2YKKyAqIHJlcXVlc3RpbmcgYSBrZXkgb2YgdHlwZSBkbnNfcmVzb2x2ZXIuCisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IG9uIHN1Y2Nlc3MsIC12ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRuc19xdWVyeShjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKwkgICAgICBjb25zdCBjaGFyICpvcHRpb25zLCBjaGFyICoqX3Jlc3VsdCwgdGltZV90ICpfZXhwaXJ5KQoreworCXN0cnVjdCBrZXkgKnJrZXk7CisJc3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkOworCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOworCXNpemVfdCB0eXBlbGVuLCBkZXNjbGVuOworCWNoYXIgKmRlc2MsICpjcDsKKwlpbnQgcmV0LCBsZW47CisKKwlrZW50ZXIoIiVzLCUqLipzLCV6dSwlcyIsCisJICAgICAgIHR5cGUsIChpbnQpbmFtZWxlbiwgKGludCluYW1lbGVuLCBuYW1lLCBuYW1lbGVuLCBvcHRpb25zKTsKKworCWlmICghbmFtZSB8fCBuYW1lbGVuID09IDAgfHwgIV9yZXN1bHQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogY29uc3RydWN0IHRoZSBxdWVyeSBrZXkgZGVzY3JpcHRpb24gYXMgIls8dHlwZT46XTxuYW1lPiIgKi8KKwl0eXBlbGVuID0gMDsKKwlkZXNjbGVuID0gMDsKKwlpZiAodHlwZSkgeworCQl0eXBlbGVuID0gc3RybGVuKHR5cGUpOworCQlpZiAodHlwZWxlbiA8IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZGVzY2xlbiArPSB0eXBlbGVuICsgMTsKKwl9CisKKwlpZiAoIW5hbWVsZW4pCisJCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJaWYgKG5hbWVsZW4gPCAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZXNjbGVuICs9IG5hbWVsZW4gKyAxOworCisJZGVzYyA9IGttYWxsb2MoZGVzY2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNwID0gZGVzYzsKKwlpZiAodHlwZSkgeworCQltZW1jcHkoY3AsIHR5cGUsIHR5cGVsZW4pOworCQljcCArPSB0eXBlbGVuOworCQkqY3ArKyA9ICc6JzsKKwl9CisJbWVtY3B5KGNwLCBuYW1lLCBuYW1lbGVuKTsKKwljcCArPSBuYW1lbGVuOworCSpjcCA9ICdcMCc7CisKKwlpZiAoIW9wdGlvbnMpCisJCW9wdGlvbnMgPSAiIjsKKwlrZGVidWcoImNhbGwgcmVxdWVzdF9rZXkoLCVzLCVzKSIsIGRlc2MsIG9wdGlvbnMpOworCisJLyogbWFrZSB0aGUgdXBjYWxsLCB1c2luZyBzcGVjaWFsIGNyZWRlbnRpYWxzIHRvIHByZXZlbnQgdGhlIHVzZSBvZgorCSAqIGFkZF9rZXkoKSB0byBwcmVpbnN0YWxsIG1hbGljaW91cyByZWRpcmVjdGlvbnMKKwkgKi8KKwlzYXZlZF9jcmVkID0gb3ZlcnJpZGVfY3JlZHMoZG5zX3Jlc29sdmVyX2NhY2hlKTsKKwlya2V5ID0gcmVxdWVzdF9rZXkoJmtleV90eXBlX2Ruc19yZXNvbHZlciwgZGVzYywgb3B0aW9ucyk7CisJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOworCWtmcmVlKGRlc2MpOworCWlmIChJU19FUlIocmtleSkpIHsKKwkJcmV0ID0gUFRSX0VSUihya2V5KTsKKwkJZ290byBvdXQ7CisJfQorCisJZG93bl9yZWFkKCZya2V5LT5zZW0pOworCXJrZXktPnBlcm0gfD0gS0VZX1VTUl9WSUVXOworCisJcmV0ID0ga2V5X3ZhbGlkYXRlKHJrZXkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHB1dDsKKworCXVwYXlsb2FkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChya2V5LT5wYXlsb2FkLmRhdGEsCisJCQkJCSAgICAgbG9ja2RlcF9pc19oZWxkKCZya2V5LT5zZW0pKTsKKwlsZW4gPSB1cGF5bG9hZC0+ZGF0YWxlbjsKKworCXJldCA9IC1FTk9NRU07CisJKl9yZXN1bHQgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOworCWlmICghKl9yZXN1bHQpCisJCWdvdG8gcHV0OworCisJbWVtY3B5KCpfcmVzdWx0LCB1cGF5bG9hZC0+ZGF0YSwgbGVuICsgMSk7CisJaWYgKF9leHBpcnkpCisJCSpfZXhwaXJ5ID0gcmtleS0+ZXhwaXJ5OworCisJcmV0ID0gbGVuOworcHV0OgorCXVwX3JlYWQoJnJrZXktPnNlbSk7CisJa2V5X3B1dChya2V5KTsKK291dDoKKwlrbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkbnNfcXVlcnkpOwpkaWZmIC0tZ2l0IGEvbmV0L2Ruc19yZXNvbHZlci9pbnRlcm5hbC5oIGIvbmV0L2Ruc19yZXNvbHZlci9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OWNhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvZG5zX3Jlc29sdmVyL2ludGVybmFsLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICAgQ29weXJpZ2h0IChjKSAyMDEwIFdhbmcgTGVpCisgKiAgIEF1dGhvcihzKTogV2FuZyBMZWkgKHdhbmc4NDA5MjVAZ21haWwuY29tKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgIEludGVybmFsIEROUyBSc29sdmVyIHN0dWZmCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQorICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisvKgorICogZG5zX2tleS5jCisgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3JlZCAqZG5zX3Jlc29sdmVyX2NhY2hlOworCisvKgorICogZGVidWcgdHJhY2luZworICovCitleHRlcm4gdW5zaWduZWQgZG5zX3Jlc29sdmVyX2RlYnVnOworCisjZGVmaW5lCWtkZWJ1ZyhGTVQsIC4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKHVubGlrZWx5KGRuc19yZXNvbHZlcl9kZWJ1ZykpCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJbJS02LjZzXSAiRk1UIlxuIiwJXAorCQkgICAgICAgY3VycmVudC0+Y29tbSwgIyNfX1ZBX0FSR1NfXyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBrZGVidWcoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2xlYXZlKEZNVCwgLi4uKSBrZGVidWcoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggM2M0MjZjYi4uZTY2M2I3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTM5MzAsNyArMzkzMCw3IEBACiAJCQlpZiAob3BzaXplIDwgMiB8fCBvcHNpemUgPiBsZW5ndGgpCiAJCQkJcmV0dXJuIE5VTEw7CiAJCQlpZiAob3Bjb2RlID09IFRDUE9QVF9NRDVTSUcpCi0JCQkJcmV0dXJuIHB0cjsKKwkJCQlyZXR1cm4gb3BzaXplID09IFRDUE9MRU5fTUQ1U0lHID8gcHRyIDogTlVMTDsKIAkJfQogCQlwdHIgKz0gb3BzaXplIC0gMjsKIAkJbGVuZ3RoIC09IG9wc2l6ZTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKaW5kZXggODAwYmM1My4uZGZlN2IzOCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMKQEAgLTIwLDcgKzIwLDcgQEAKIC8qIFBsZWFzZSBwdXQgb3RoZXIgaGVhZGVycyBpbiBpcm5ldC5oIC0gVGhhbmtzICovCiAKIC8qIEdlbmVyaWMgUFBQIGNhbGxiYWNrcyAodG8gY2FsbCB1cykgKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIGlybmV0X3BwcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBpcm5ldF9wcHBfb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwX2lybmV0X3NlbmQsCiAJLmlvY3RsID0gcHBwX2lybmV0X2lvY3RsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmMKaW5kZXggOTBkODJiMy4uZmY5NTRiMyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuYworKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jCkBAIC0xMzUsNyArMTM1LDEwIEBACiAKIHN0YXRpYyBpbnQgcHBwb2wydHBfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpOwogCi1zdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvbDJ0cF9jaGFuX29wcyA9IHsgcHBwb2wydHBfeG1pdCAsIE5VTEwgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9sMnRwX2NoYW5fb3BzID0geworCS5zdGFydF94bWl0ID0gIHBwcG9sMnRwX3htaXQsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7CiAKIC8qIEhlbHBlcnMgdG8gb2J0YWluIHR1bm5lbC9zZXNzaW9uIGNvbnRleHRzIGZyb20gc29ja2V0cy4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDdjYzRmOTEuLjc5OGE5MWIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtNjg1LDEwICs2ODUsMTIgQEAKIAogCXJldHVybiAwOwogCisjaWZkZWYgQ09ORklHX0lORVQKICBmYWlsX2lmYToKIAlwbV9xb3NfcmVtb3ZlX25vdGlmaWVyKFBNX1FPU19ORVRXT1JLX0xBVEVOQ1ksCiAJCQkgICAgICAgJmxvY2FsLT5uZXR3b3JrX2xhdGVuY3lfbm90aWZpZXIpOwogCXJ0bmxfbG9jaygpOworI2VuZGlmCiAgZmFpbF9wbV9xb3M6CiAJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMobG9jYWwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggNDFmMjBmYi4uODcyZDdiNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC00MDAsMTkgKzQwMCw3IEBACiAJZWxzZQogCQlfX3NldF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyk7CiAKLQkvKgotCSAqIEtpY2tpbmcgb2ZmIHRoZSBzY2FuIG5lZWQgbm90IGJlIHByb3RlY3RlZCwKLQkgKiBvbmx5IHRoZSBzY2FuIHZhcmlhYmxlIHN0dWZmLCBzaW5jZSBub3cKLQkgKiBsb2NhbC0+c2Nhbl9yZXEgaXMgYXNzaWduZWQgYW5kIG90aGVyIGNhbGxlcnMKLQkgKiB3aWxsIGFib3J0IHRoZWlyIHNjYW4gYXR0ZW1wdHMuCi0JICoKLQkgKiBUaGlzIGF2b2lkcyB0b28gbWFueSBsb2NraW5nIGRlcGVuZGVuY2llcwotCSAqIHNvIHRoYXQgdGhlIHNjYW4gY29tcGxldGVkIGNhbGxzIGhhdmUgbW9yZQotCSAqIGxvY2tpbmcgZnJlZWRvbS4KLQkgKi8KLQogCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCiAJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pIHsKIAkJV0FSTl9PTighaWVlZTgwMjExX3ByZXBfaHdfc2Nhbihsb2NhbCkpOwpAQCAtNDIwLDggKzQwOCw2IEBACiAJfSBlbHNlCiAJCXJjID0gaWVlZTgwMjExX3N0YXJ0X3N3X3NjYW4obG9jYWwpOwogCi0JbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKLQogCWlmIChyYykgewogCQlrZnJlZShsb2NhbC0+aHdfc2Nhbl9yZXEpOwogCQlsb2NhbC0+aHdfc2Nhbl9yZXEgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWFjay5jIGIvbmV0L3J4cnBjL2FyLWFjay5jCmluZGV4IDI3MTRkYTEuLmI2ZmZlNGUgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1hY2suYworKysgYi9uZXQvcnhycGMvYXItYWNrLmMKQEAgLTI0NSw2ICsyNDUsOSBAQAogCV9lbnRlcigiJWQsJWQsJWQiLAogCSAgICAgICBjYWxsLT5hY2tzX3RhaWwsIGNhbGwtPmFja3NfdW5hY2tlZCwgY2FsbC0+YWNrc19oZWFkKTsKIAorCWlmIChjYWxsLT5zdGF0ZSA+PSBSWFJQQ19DQUxMX0NPTVBMRVRFKQorCQlyZXR1cm47CisKIAlyZXNlbmQgPSAwOwogCXJlc2VuZF9hdCA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1jYWxsLmMgYi9uZXQvcnhycGMvYXItY2FsbC5jCmluZGV4IDkwOWQwOTIuLmJmNjU2YzIgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1jYWxsLmMKKysrIGIvbmV0L3J4cnBjL2FyLWNhbGwuYwpAQCAtNzg2LDYgKzc4Niw3IEBACiAKIC8qCiAgKiBoYW5kbGUgcmVzZW5kIHRpbWVyIGV4cGlyeQorICogLSBtYXkgbm90IHRha2UgY2FsbC0+c3RhdGVfbG9jayBhcyB0aGlzIGNhbiBkZWFkbG9jayBhZ2FpbnN0IGRlbF90aW1lcl9zeW5jKCkKICAqLwogc3RhdGljIHZvaWQgcnhycGNfcmVzZW5kX3RpbWVfZXhwaXJlZCh1bnNpZ25lZCBsb25nIF9jYWxsKQogewpAQCAtNzk2LDEyICs3OTcsOSBAQAogCWlmIChjYWxsLT5zdGF0ZSA+PSBSWFJQQ19DQUxMX0NPTVBMRVRFKQogCQlyZXR1cm47CiAKLQlyZWFkX2xvY2tfYmgoJmNhbGwtPnN0YXRlX2xvY2spOwogCWNsZWFyX2JpdChSWFJQQ19DQUxMX1JVTl9SVElNRVIsICZjYWxsLT5mbGFncyk7Ci0JaWYgKGNhbGwtPnN0YXRlIDwgUlhSUENfQ0FMTF9DT01QTEVURSAmJgotCSAgICAhdGVzdF9hbmRfc2V0X2JpdChSWFJQQ19DQUxMX1JFU0VORF9USU1FUiwgJmNhbGwtPmV2ZW50cykpCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFJYUlBDX0NBTExfUkVTRU5EX1RJTUVSLCAmY2FsbC0+ZXZlbnRzKSkKIAkJcnhycGNfcXVldWVfY2FsbChjYWxsKTsKLQlyZWFkX3VubG9ja19iaCgmY2FsbC0+c3RhdGVfbG9jayk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X25hdC5jIGIvbmV0L3NjaGVkL2FjdF9uYXQuYwppbmRleCBkMDM4NmE0Li41MDlhMmQ1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X25hdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfbmF0LmMKQEAgLTExNCw2ICsxMTQsNyBAQAogCWludCBlZ3Jlc3M7CiAJaW50IGFjdGlvbjsKIAlpbnQgaWhsOworCWludCBub2ZmOwogCiAJc3Bpbl9sb2NrKCZwLT50Y2ZfbG9jayk7CiAKQEAgLTEzMiw3ICsxMzMsOCBAQAogCWlmICh1bmxpa2VseShhY3Rpb24gPT0gVENfQUNUX1NIT1QpKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQorCW5vZmYgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkgKyBub2ZmKSkKIAkJZ290byBkcm9wOwogCiAJaXBoID0gaXBfaGRyKHNrYik7CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAogCWlmICghKChvbGRfYWRkciBeIGFkZHIpICYgbWFzaykpIHsKIAkJaWYgKHNrYl9jbG9uZWQoc2tiKSAmJgotCQkgICAgIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZigqaXBoKSkgJiYKKwkJICAgICFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBzaXplb2YoKmlwaCkgKyBub2ZmKSAmJgogCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQogCQkJZ290byBkcm9wOwogCkBAIC0xNzIsOSArMTc0LDkgQEAKIAl7CiAJCXN0cnVjdCB0Y3BoZHIgKnRjcGg7CiAKLQkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaWhsICsgc2l6ZW9mKCp0Y3BoKSkgfHwKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaWhsICsgc2l6ZW9mKCp0Y3BoKSArIG5vZmYpIHx8CiAJCSAgICAoc2tiX2Nsb25lZChza2IpICYmCi0JCSAgICAgIXNrYl9jbG9uZV93cml0YWJsZShza2IsIGlobCArIHNpemVvZigqdGNwaCkpICYmCisJCSAgICAgIXNrYl9jbG9uZV93cml0YWJsZShza2IsIGlobCArIHNpemVvZigqdGNwaCkgKyBub2ZmKSAmJgogCQkgICAgIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkpCiAJCQlnb3RvIGRyb3A7CiAKQEAgLTE4Niw5ICsxODgsOSBAQAogCXsKIAkJc3RydWN0IHVkcGhkciAqdWRwaDsKIAotCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpaGwgKyBzaXplb2YoKnVkcGgpKSB8fAorCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpaGwgKyBzaXplb2YoKnVkcGgpICsgbm9mZikgfHwKIAkJICAgIChza2JfY2xvbmVkKHNrYikgJiYKLQkJICAgICAhc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgaWhsICsgc2l6ZW9mKCp1ZHBoKSkgJiYKKwkJICAgICAhc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgaWhsICsgc2l6ZW9mKCp1ZHBoKSArIG5vZmYpICYmCiAJCSAgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSkKIAkJCWdvdG8gZHJvcDsKIApAQCAtMjA1LDcgKzIwNyw3IEBACiAJewogCQlzdHJ1Y3QgaWNtcGhkciAqaWNtcGg7CiAKLQkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaWhsICsgc2l6ZW9mKCppY21waCkpKQorCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBpaGwgKyBzaXplb2YoKmljbXBoKSArIG5vZmYpKQogCQkJZ290byBkcm9wOwogCiAJCWljbXBoID0gKHZvaWQgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBpaGwpOwpAQCAtMjE1LDcgKzIxNyw4IEBACiAJCSAgICAoaWNtcGgtPnR5cGUgIT0gSUNNUF9QQVJBTUVURVJQUk9CKSkKIAkJCWJyZWFrOwogCi0JCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGlobCArIHNpemVvZigqaWNtcGgpICsgc2l6ZW9mKCppcGgpKSkKKwkJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaWhsICsgc2l6ZW9mKCppY21waCkgKyBzaXplb2YoKmlwaCkgKworCQkJCQlub2ZmKSkKIAkJCWdvdG8gZHJvcDsKIAogCQlpY21waCA9ICh2b2lkICopKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgaWhsKTsKQEAgLTIyOSw4ICsyMzIsOCBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKHNrYl9jbG9uZWQoc2tiKSAmJgotCQkgICAgIXNrYl9jbG9uZV93cml0YWJsZShza2IsCi0JCQkJCWlobCArIHNpemVvZigqaWNtcGgpICsgc2l6ZW9mKCppcGgpKSAmJgorCQkgICAgIXNrYl9jbG9uZV93cml0YWJsZShza2IsIGlobCArIHNpemVvZigqaWNtcGgpICsKKwkJCQkJICAgICBzaXplb2YoKmlwaCkgKyBub2ZmKSAmJgogCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKQogCQkJZ290byBkcm9wOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCmluZGV4IGY3MzU0MmQuLmUxNzA5NmUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvdy5jCisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCkBAIC02NSwzNyArNjUsNDcgQEAKIAlyZXR1cm4gKGEgJiAweEZGRkZGRkZGKSBeIChCSVRTX1BFUl9MT05HID4gMzIgPyBhID4+IDMyIDogMCk7CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19nZXRfc3JjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIGZsb3dfZ2V0X3NyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlyZXR1cm4gbnRvaGwoaXBfaGRyKHNrYiktPnNhZGRyKTsKKwkJaWYgKHBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKwkJCXJldHVybiBudG9obChpcF9oZHIoc2tiKS0+c2FkZHIpOworCQlicmVhazsKIAljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgotCQlyZXR1cm4gbnRvaGwoaXB2Nl9oZHIoc2tiKS0+c2FkZHIuczZfYWRkcjMyWzNdKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gYWRkcl9mb2xkKHNrYi0+c2spOworCQlpZiAocHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCQlyZXR1cm4gbnRvaGwoaXB2Nl9oZHIoc2tiKS0+c2FkZHIuczZfYWRkcjMyWzNdKTsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIGFkZHJfZm9sZChza2ItPnNrKTsKIH0KIAotc3RhdGljIHUzMiBmbG93X2dldF9kc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB1MzIgZmxvd19nZXRfZHN0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6Ci0JCXJldHVybiBudG9obChpcF9oZHIoc2tiKS0+ZGFkZHIpOworCQlpZiAocHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQorCQkJcmV0dXJuIG50b2hsKGlwX2hkcihza2IpLT5kYWRkcik7CisJCWJyZWFrOwogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6Ci0JCXJldHVybiBudG9obChpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM10pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBhZGRyX2ZvbGQoc2tiX2RzdChza2IpKSBeIChfX2ZvcmNlIHUxNilza2ItPnByb3RvY29sOworCQlpZiAocHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpCisJCQlyZXR1cm4gbnRvaGwoaXB2Nl9oZHIoc2tiKS0+ZGFkZHIuczZfYWRkcjMyWzNdKTsKKwkJYnJlYWs7CiAJfQorCisJcmV0dXJuIGFkZHJfZm9sZChza2JfZHN0KHNrYikpIF4gKF9fZm9yY2UgdTE2KXNrYi0+cHJvdG9jb2w7CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19nZXRfcHJvdG8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB1MzIgZmxvd19nZXRfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKIAljYXNlIGh0b25zKEVUSF9QX0lQKToKLQkJcmV0dXJuIGlwX2hkcihza2IpLT5wcm90b2NvbDsKKwkJcmV0dXJuIHBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSA/CisJCSAgICAgICBpcF9oZHIoc2tiKS0+cHJvdG9jb2wgOiAwOwogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6Ci0JCXJldHVybiBpcHY2X2hkcihza2IpLT5uZXh0aGRyOworCQlyZXR1cm4gcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgPworCQkgICAgICAgaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA6IDA7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTE2LDU4ICsxMjYsNjQgQEAKIAl9CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19nZXRfcHJvdG9fc3JjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIGZsb3dfZ2V0X3Byb3RvX3NyYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiByZXMgPSAwOwotCiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6IHsKLQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwkJc3RydWN0IGlwaGRyICppcGg7CiAKKwkJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQorCQkJYnJlYWs7CisJCWlwaCA9IGlwX2hkcihza2IpOwogCQlpZiAoIShpcGgtPmZyYWdfb2ZmJmh0b25zKElQX01GfElQX09GRlNFVCkpICYmCi0JCSAgICBoYXNfcG9ydHMoaXBoLT5wcm90b2NvbCkpCi0JCQlyZXMgPSBudG9ocygqKF9fYmUxNiAqKSgodm9pZCAqKWlwaCArIGlwaC0+aWhsICogNCkpOworCQkgICAgaGFzX3BvcnRzKGlwaC0+cHJvdG9jb2wpICYmCisJCSAgICBwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBpcGgtPmlobCAqIDQgKyAyKSkKKwkJCXJldHVybiBudG9ocygqKF9fYmUxNiAqKSgodm9pZCAqKWlwaCArIGlwaC0+aWhsICogNCkpOwogCQlicmVhazsKIAl9CiAJY2FzZSBodG9ucyhFVEhfUF9JUFY2KTogewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwkJc3RydWN0IGlwdjZoZHIgKmlwaDsKIAorCQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSArIDIpKQorCQkJYnJlYWs7CisJCWlwaCA9IGlwdjZfaGRyKHNrYik7CiAJCWlmIChoYXNfcG9ydHMoaXBoLT5uZXh0aGRyKSkKLQkJCXJlcyA9IG50b2hzKCooX19iZTE2ICopJmlwaFsxXSk7CisJCQlyZXR1cm4gbnRvaHMoKihfX2JlMTYgKikmaXBoWzFdKTsKIAkJYnJlYWs7CiAJfQotCWRlZmF1bHQ6Ci0JCXJlcyA9IGFkZHJfZm9sZChza2ItPnNrKTsKIAl9CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiBhZGRyX2ZvbGQoc2tiLT5zayk7CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19nZXRfcHJvdG9fZHN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIGZsb3dfZ2V0X3Byb3RvX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiByZXMgPSAwOwotCiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6IHsKLQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwkJc3RydWN0IGlwaGRyICppcGg7CiAKKwkJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpKQorCQkJYnJlYWs7CisJCWlwaCA9IGlwX2hkcihza2IpOwogCQlpZiAoIShpcGgtPmZyYWdfb2ZmJmh0b25zKElQX01GfElQX09GRlNFVCkpICYmCi0JCSAgICBoYXNfcG9ydHMoaXBoLT5wcm90b2NvbCkpCi0JCQlyZXMgPSBudG9ocygqKF9fYmUxNiAqKSgodm9pZCAqKWlwaCArIGlwaC0+aWhsICogNCArIDIpKTsKKwkJICAgIGhhc19wb3J0cyhpcGgtPnByb3RvY29sKSAmJgorCQkgICAgcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgaXBoLT5paGwgKiA0ICsgNCkpCisJCQlyZXR1cm4gbnRvaHMoKihfX2JlMTYgKikoKHZvaWQgKilpcGggKyBpcGgtPmlobCAqIDQgKyAyKSk7CiAJCWJyZWFrOwogCX0KIAljYXNlIGh0b25zKEVUSF9QX0lQVjYpOiB7Ci0JCXN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpOworCQlzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCisJCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpICsgNCkpCisJCQlicmVhazsKKwkJaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAkJaWYgKGhhc19wb3J0cyhpcGgtPm5leHRoZHIpKQotCQkJcmVzID0gbnRvaHMoKihfX2JlMTYgKikoKHZvaWQgKikmaXBoWzFdICsgMikpOworCQkJcmV0dXJuIG50b2hzKCooX19iZTE2ICopKCh2b2lkICopJmlwaFsxXSArIDIpKTsKIAkJYnJlYWs7CiAJfQotCWRlZmF1bHQ6Ci0JCXJlcyA9IGFkZHJfZm9sZChza2JfZHN0KHNrYikpIF4gKF9fZm9yY2UgdTE2KXNrYi0+cHJvdG9jb2w7CiAJfQogCi0JcmV0dXJuIHJlczsKKwlyZXR1cm4gYWRkcl9mb2xkKHNrYl9kc3Qoc2tiKSkgXiAoX19mb3JjZSB1MTYpc2tiLT5wcm90b2NvbDsKIH0KIAogc3RhdGljIHUzMiBmbG93X2dldF9paWYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTIxMSw3ICsyMjcsNyBAQAogfSkKICNlbmRpZgogCi1zdGF0aWMgdTMyIGZsb3dfZ2V0X25mY3Rfc3JjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIGZsb3dfZ2V0X25mY3Rfc3JjKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CkBAIC0yMjMsNyArMjM5LDcgQEAKIAlyZXR1cm4gZmxvd19nZXRfc3JjKHNrYik7CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19nZXRfbmZjdF9kc3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB1MzIgZmxvd19nZXRfbmZjdF9kc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKIAljYXNlIGh0b25zKEVUSF9QX0lQKToKQEAgLTIzNSwxNCArMjUxLDE0IEBACiAJcmV0dXJuIGZsb3dfZ2V0X2RzdChza2IpOwogfQogCi1zdGF0aWMgdTMyIGZsb3dfZ2V0X25mY3RfcHJvdG9fc3JjKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIGZsb3dfZ2V0X25mY3RfcHJvdG9fc3JjKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIG50b2hzKENUVFVQTEUoc2tiLCBzcmMudS5hbGwpKTsKIGZhbGxiYWNrOgogCXJldHVybiBmbG93X2dldF9wcm90b19zcmMoc2tiKTsKIH0KIAotc3RhdGljIHUzMiBmbG93X2dldF9uZmN0X3Byb3RvX2RzdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHUzMiBmbG93X2dldF9uZmN0X3Byb3RvX2RzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBudG9ocyhDVFRVUExFKHNrYiwgZHN0LnUuYWxsKSk7CiBmYWxsYmFjazoKQEAgLTI4MSw3ICsyOTcsNyBAQAogCXJldHVybiB0YWcgJiBWTEFOX1ZJRF9NQVNLOwogfQogCi1zdGF0aWMgdTMyIGZsb3dfa2V5X2dldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQga2V5KQorc3RhdGljIHUzMiBmbG93X2tleV9nZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGtleSkKIHsKIAlzd2l0Y2ggKGtleSkgewogCWNhc2UgRkxPV19LRVlfU1JDOgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yc3ZwLmggYi9uZXQvc2NoZWQvY2xzX3JzdnAuaAppbmRleCBkZDk0MTRlLi40MjVhMTc5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX3JzdnAuaAorKysgYi9uZXQvc2NoZWQvY2xzX3JzdnAuaApAQCAtMTQzLDkgKzE0MywxNyBAQAogCXU4IHR1bm5lbGlkID0gMDsKIAl1OCAqeHBydDsKICNpZiBSU1ZQX0RTVF9MRU4gPT0gNAotCXN0cnVjdCBpcHY2aGRyICpuaHB0ciA9IGlwdjZfaGRyKHNrYik7CisJc3RydWN0IGlwdjZoZHIgKm5ocHRyOworCisJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKm5ocHRyKSkpCisJCXJldHVybiAtMTsKKwluaHB0ciA9IGlwdjZfaGRyKHNrYik7CiAjZWxzZQotCXN0cnVjdCBpcGhkciAqbmhwdHIgPSBpcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaXBoZHIgKm5ocHRyOworCisJaWYgKCFwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2YoKm5ocHRyKSkpCisJCXJldHVybiAtMTsKKwluaHB0ciA9IGlwX2hkcihza2IpOwogI2VuZGlmCiAKIHJlc3RhcnQ6CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCBjNjU3NjI4Li41MzRmMzMyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTEyMiw3ICsxMjIsMTEgQEAKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKIAljYXNlIGh0b25zKEVUSF9QX0lQKToKIAl7Ci0JCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOworCisJCWlmICghcHNrYl9uZXR3b3JrX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkKKwkJCWdvdG8gZXJyOworCQlpcGggPSBpcF9oZHIoc2tiKTsKIAkJaCA9IChfX2ZvcmNlIHUzMilpcGgtPmRhZGRyOwogCQloMiA9IChfX2ZvcmNlIHUzMilpcGgtPnNhZGRyIF4gaXBoLT5wcm90b2NvbDsKIAkJaWYgKCEoaXBoLT5mcmFnX29mZiZodG9ucyhJUF9NRnxJUF9PRkZTRVQpKSAmJgpAQCAtMTMxLDI1ICsxMzUsMzIgQEAKIAkJICAgICBpcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQTElURSB8fAogCQkgICAgIGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQIHx8CiAJCSAgICAgaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0RDQ1AgfHwKLQkJICAgICBpcGgtPnByb3RvY29sID09IElQUFJPVE9fRVNQKSkKKwkJICAgICBpcGgtPnByb3RvY29sID09IElQUFJPVE9fRVNQKSAmJgorCQkgICAgIHBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIGlwaC0+aWhsICogNCArIDQpKQogCQkJaDIgXj0gKigoKHUzMiopaXBoKSArIGlwaC0+aWhsKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CiAJewotCQlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwkJc3RydWN0IGlwdjZoZHIgKmlwaDsKKworCQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpCisJCQlnb3RvIGVycjsKKwkJaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAkJaCA9IChfX2ZvcmNlIHUzMilpcGgtPmRhZGRyLnM2X2FkZHIzMlszXTsKIAkJaDIgPSAoX19mb3JjZSB1MzIpaXBoLT5zYWRkci5zNl9hZGRyMzJbM10gXiBpcGgtPm5leHRoZHI7Ci0JCWlmIChpcGgtPm5leHRoZHIgPT0gSVBQUk9UT19UQ1AgfHwKLQkJICAgIGlwaC0+bmV4dGhkciA9PSBJUFBST1RPX1VEUCB8fAotCQkgICAgaXBoLT5uZXh0aGRyID09IElQUFJPVE9fVURQTElURSB8fAotCQkgICAgaXBoLT5uZXh0aGRyID09IElQUFJPVE9fU0NUUCB8fAotCQkgICAgaXBoLT5uZXh0aGRyID09IElQUFJPVE9fRENDUCB8fAotCQkgICAgaXBoLT5uZXh0aGRyID09IElQUFJPVE9fRVNQKQorCQlpZiAoKGlwaC0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCB8fAorCQkgICAgIGlwaC0+bmV4dGhkciA9PSBJUFBST1RPX1VEUCB8fAorCQkgICAgIGlwaC0+bmV4dGhkciA9PSBJUFBST1RPX1VEUExJVEUgfHwKKwkJICAgICBpcGgtPm5leHRoZHIgPT0gSVBQUk9UT19TQ1RQIHx8CisJCSAgICAgaXBoLT5uZXh0aGRyID09IElQUFJPVE9fRENDUCB8fAorCQkgICAgIGlwaC0+bmV4dGhkciA9PSBJUFBST1RPX0VTUCkgJiYKKwkJICAgIHBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSArIDQpKQogCQkJaDIgXj0gKih1MzIqKSZpcGhbMV07CiAJCWJyZWFrOwogCX0KIAlkZWZhdWx0OgorZXJyOgogCQloID0gKHVuc2lnbmVkIGxvbmcpc2tiX2RzdChza2IpIF4gKF9fZm9yY2UgdTMyKXNrYi0+cHJvdG9jb2w7CiAJCWgyID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5zazsKIAl9CkBAIC01MDIsNiArNTEzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNmcV9iaW5kKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIHBhcmVudCwKKwkJCSAgICAgIHUzMiBjbGFzc2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHRjZl9wcm90byAqKnNmcV9maW5kX3RjZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKIHsKIAlzdHJ1Y3Qgc2ZxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CkBAIC01NTYsNiArNTczLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHNmcV9jbGFzc19vcHMgPSB7CiAJLmdldAkJPQlzZnFfZ2V0LAogCS50Y2ZfY2hhaW4JPQlzZnFfZmluZF90Y2YsCisJLmJpbmRfdGNmCT0Jc2ZxX2JpbmQsCiAJLmR1bXAJCT0Jc2ZxX2R1bXBfY2xhc3MsCiAJLmR1bXBfc3RhdHMJPQlzZnFfZHVtcF9jbGFzc19zdGF0cywKIAkud2FsawkJPQlzZnFfd2FsaywKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aC5jIGIvbmV0L3N1bnJwYy9hdXRoLmMKaW5kZXggOGRjNDdmMS4uODgwZDBkZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoLmMKQEAgLTE5LDYgKzE5LDE1IEBACiAjIGRlZmluZSBSUENEQkdfRkFDSUxJVFkJUlBDREJHX0FVVEgKICNlbmRpZgogCisjZGVmaW5lIFJQQ19DUkVEQ0FDSEVfREVGQVVMVF9IQVNIQklUUwkoNCkKK3N0cnVjdCBycGNfY3JlZF9jYWNoZSB7CisJc3RydWN0IGhsaXN0X2hlYWQJKmhhc2h0YWJsZTsKKwl1bnNpZ25lZCBpbnQJCWhhc2hiaXRzOworCXNwaW5sb2NrX3QJCWxvY2s7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGF1dGhfaGFzaGJpdHMgPSBSUENfQ1JFRENBQ0hFX0RFRkFVTFRfSEFTSEJJVFM7CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socnBjX2F1dGhmbGF2b3JfbG9jayk7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19hdXRob3BzICphdXRoX2ZsYXZvcnNbUlBDX0FVVEhfTUFYRkxBVk9SXSA9IHsKIAkmYXV0aG51bGxfb3BzLAkJLyogQVVUSF9OVUxMICovCkBAIC0yOSw2ICszOCw0MiBAQAogc3RhdGljIExJU1RfSEVBRChjcmVkX3VudXNlZCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1iZXJfY3JlZF91bnVzZWQ7CiAKKyNkZWZpbmUgTUFYX0hBU0hUQUJMRV9CSVRTICgxMCkgCitzdGF0aWMgaW50IHBhcmFtX3NldF9oYXNodGJsX3N6KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJdW5zaWduZWQgbG9uZyBudW07CisJdW5zaWduZWQgaW50IG5iaXRzOworCWludCByZXQ7CisKKwlpZiAoIXZhbCkKKwkJZ290byBvdXRfaW52YWw7CisJcmV0ID0gc3RyaWN0X3N0cnRvdWwodmFsLCAwLCAmbnVtKTsKKwlpZiAocmV0ID09IC1FSU5WQUwpCisJCWdvdG8gb3V0X2ludmFsOworCW5iaXRzID0gZmxzKG51bSk7CisJaWYgKG51bSA+ICgxVSA8PCBuYml0cykpCisJCW5iaXRzKys7CisJaWYgKG5iaXRzID4gTUFYX0hBU0hUQUJMRV9CSVRTIHx8IG5iaXRzIDwgMikKKwkJZ290byBvdXRfaW52YWw7CisJKih1bnNpZ25lZCBpbnQgKilrcC0+YXJnID0gbmJpdHM7CisJcmV0dXJuIDA7CitvdXRfaW52YWw6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X2hhc2h0Ymxfc3ooY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwl1bnNpZ25lZCBpbnQgbmJpdHM7CisKKwluYml0cyA9ICoodW5zaWduZWQgaW50ICopa3AtPmFyZzsKKwlyZXR1cm4gc3ByaW50ZihidWZmZXIsICIldSIsIDFVIDw8IG5iaXRzKTsKK30KKworI2RlZmluZSBwYXJhbV9jaGVja19oYXNodGJsX3N6KG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdW5zaWduZWQgaW50KTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGF1dGhfaGFzaHRhYmxlX3NpemUsIGF1dGhfaGFzaGJpdHMsIGhhc2h0Ymxfc3osIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhhdXRoX2hhc2h0YWJsZV9zaXplLCAiUlBDIGNyZWRlbnRpYWwgY2FjaGUgaGFzaHRhYmxlIHNpemUiKTsKKwogc3RhdGljIHUzMgogcHNldWRvZmxhdm9yX3RvX2ZsYXZvcih1MzIgZmxhdm9yKSB7CiAJaWYgKGZsYXZvciA+PSBSUENfQVVUSF9NQVhGTEFWT1IpCkBAIC0xNDUsMTYgKzE5MCwyMyBAQAogcnBjYXV0aF9pbml0X2NyZWRjYWNoZShzdHJ1Y3QgcnBjX2F1dGggKmF1dGgpCiB7CiAJc3RydWN0IHJwY19jcmVkX2NhY2hlICpuZXc7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGhhc2hzaXplOwogCiAJbmV3ID0ga21hbGxvYyhzaXplb2YoKm5ldyksIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQotCQlyZXR1cm4gLUVOT01FTTsKLQlmb3IgKGkgPSAwOyBpIDwgUlBDX0NSRURDQUNIRV9OUjsgaSsrKQotCQlJTklUX0hMSVNUX0hFQUQoJm5ldy0+aGFzaHRhYmxlW2ldKTsKKwkJZ290byBvdXRfbm9jYWNoZTsKKwluZXctPmhhc2hiaXRzID0gYXV0aF9oYXNoYml0czsKKwloYXNoc2l6ZSA9IDFVIDw8IG5ldy0+aGFzaGJpdHM7CisJbmV3LT5oYXNodGFibGUgPSBrY2FsbG9jKGhhc2hzaXplLCBzaXplb2YobmV3LT5oYXNodGFibGVbMF0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldy0+aGFzaHRhYmxlKQorCQlnb3RvIG91dF9ub2hhc2h0Ymw7CiAJc3Bpbl9sb2NrX2luaXQoJm5ldy0+bG9jayk7CiAJYXV0aC0+YXVfY3JlZGNhY2hlID0gbmV3OwogCXJldHVybiAwOworb3V0X25vaGFzaHRibDoKKwlrZnJlZShuZXcpOworb3V0X25vY2FjaGU6CisJcmV0dXJuIC1FTk9NRU07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNhdXRoX2luaXRfY3JlZGNhY2hlKTsKIApAQCAtMTgzLDExICsyMzUsMTIgQEAKIAlMSVNUX0hFQUQoZnJlZSk7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IHJwY19jcmVkCSpjcmVkOworCXVuc2lnbmVkIGludCBoYXNoc2l6ZSA9IDFVIDw8IGNhY2hlLT5oYXNoYml0czsKIAlpbnQJCWk7CiAKIAlzcGluX2xvY2soJnJwY19jcmVkY2FjaGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZjYWNoZS0+bG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IFJQQ19DUkVEQ0FDSEVfTlI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBoYXNoc2l6ZTsgaSsrKSB7CiAJCWhlYWQgPSAmY2FjaGUtPmhhc2h0YWJsZVtpXTsKIAkJd2hpbGUgKCFobGlzdF9lbXB0eShoZWFkKSkgewogCQkJY3JlZCA9IGhsaXN0X2VudHJ5KGhlYWQtPmZpcnN0LCBzdHJ1Y3QgcnBjX2NyZWQsIGNyX2hhc2gpOwpAQCAtMjE2LDYgKzI2OSw3IEBACiAJaWYgKGNhY2hlKSB7CiAJCWF1dGgtPmF1X2NyZWRjYWNoZSA9IE5VTEw7CiAJCXJwY2F1dGhfY2xlYXJfY3JlZGNhY2hlKGNhY2hlKTsKKwkJa2ZyZWUoY2FjaGUtPmhhc2h0YWJsZSk7CiAJCWtmcmVlKGNhY2hlKTsKIAl9CiB9CkBAIC0yOTcsNyArMzUxLDcgQEAKIAkJCSplbnRyeSwgKm5ldzsKIAl1bnNpZ25lZCBpbnQgbnI7CiAKLQluciA9IGhhc2hfbG9uZyhhY3JlZC0+dWlkLCBSUENfQ1JFRENBQ0hFX0hBU0hCSVRTKTsKKwluciA9IGhhc2hfbG9uZyhhY3JlZC0+dWlkLCBjYWNoZS0+aGFzaGJpdHMpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgcG9zLCAmY2FjaGUtPmhhc2h0YWJsZVtucl0sIGNyX2hhc2gpIHsKQEAgLTM5MCwxNiArNDQ0LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChycGNhdXRoX2luaXRfY3JlZCk7CiAKLXZvaWQKK3N0cnVjdCBycGNfY3JlZCAqCiBycGNhdXRoX2dlbmVyaWNfYmluZF9jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19jcmVkICpjcmVkLCBpbnQgbG9va3VwZmxhZ3MpCiB7Ci0JdGFzay0+dGtfbXNnLnJwY19jcmVkID0gZ2V0X3JwY2NyZWQoY3JlZCk7CiAJZHByaW50aygiUlBDOiAlNXUgaG9sZGluZyAlcyBjcmVkICVwXG4iLCB0YXNrLT50a19waWQsCiAJCQljcmVkLT5jcl9hdXRoLT5hdV9vcHMtPmF1X25hbWUsIGNyZWQpOworCXJldHVybiBnZXRfcnBjY3JlZChjcmVkKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY2F1dGhfZ2VuZXJpY19iaW5kX2NyZWQpOwogCi1zdGF0aWMgdm9pZAorc3RhdGljIHN0cnVjdCBycGNfY3JlZCAqCiBycGNhdXRoX2JpbmRfcm9vdF9jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKQEAgLTQwNyw0NSArNDYxLDQzIEBACiAJCS51aWQgPSAwLAogCQkuZ2lkID0gMCwKIAl9OwotCXN0cnVjdCBycGNfY3JlZCAqcmV0OwogCiAJZHByaW50aygiUlBDOiAlNXUgbG9va2luZyB1cCAlcyBjcmVkXG4iLAogCQl0YXNrLT50a19waWQsIHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aC0+YXVfb3BzLT5hdV9uYW1lKTsKLQlyZXQgPSBhdXRoLT5hdV9vcHMtPmxvb2t1cF9jcmVkKGF1dGgsICZhY3JlZCwgbG9va3VwZmxhZ3MpOwotCWlmICghSVNfRVJSKHJldCkpCi0JCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKLQllbHNlCi0JCXRhc2stPnRrX3N0YXR1cyA9IFBUUl9FUlIocmV0KTsKKwlyZXR1cm4gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCAmYWNyZWQsIGxvb2t1cGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBzdHJ1Y3QgcnBjX2NyZWQgKgogcnBjYXV0aF9iaW5kX25ld19jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKLQlzdHJ1Y3QgcnBjX2NyZWQgKnJldDsKIAogCWRwcmludGsoIlJQQzogJTV1IGxvb2tpbmcgdXAgJXMgY3JlZFxuIiwKIAkJdGFzay0+dGtfcGlkLCBhdXRoLT5hdV9vcHMtPmF1X25hbWUpOwotCXJldCA9IHJwY2F1dGhfbG9va3VwY3JlZChhdXRoLCBsb29rdXBmbGFncyk7Ci0JaWYgKCFJU19FUlIocmV0KSkKLQkJdGFzay0+dGtfbXNnLnJwY19jcmVkID0gcmV0OwotCWVsc2UKLQkJdGFzay0+dGtfc3RhdHVzID0gUFRSX0VSUihyZXQpOworCXJldHVybiBycGNhdXRoX2xvb2t1cGNyZWQoYXV0aCwgbG9va3VwZmxhZ3MpOwogfQogCi12b2lkCitzdGF0aWMgaW50CiBycGNhdXRoX2JpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19jcmVkICpjcmVkLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKm5ldzsKIAlpbnQgbG9va3VwZmxhZ3MgPSAwOwogCiAJaWYgKGZsYWdzICYgUlBDX1RBU0tfQVNZTkMpCiAJCWxvb2t1cGZsYWdzIHw9IFJQQ0FVVEhfTE9PS1VQX05FVzsKIAlpZiAoY3JlZCAhPSBOVUxMKQotCQljcmVkLT5jcl9vcHMtPmNyYmluZCh0YXNrLCBjcmVkLCBsb29rdXBmbGFncyk7CisJCW5ldyA9IGNyZWQtPmNyX29wcy0+Y3JiaW5kKHRhc2ssIGNyZWQsIGxvb2t1cGZsYWdzKTsKIAllbHNlIGlmIChmbGFncyAmIFJQQ19UQVNLX1JPT1RDUkVEUykKLQkJcnBjYXV0aF9iaW5kX3Jvb3RfY3JlZCh0YXNrLCBsb29rdXBmbGFncyk7CisJCW5ldyA9IHJwY2F1dGhfYmluZF9yb290X2NyZWQodGFzaywgbG9va3VwZmxhZ3MpOwogCWVsc2UKLQkJcnBjYXV0aF9iaW5kX25ld19jcmVkKHRhc2ssIGxvb2t1cGZsYWdzKTsKKwkJbmV3ID0gcnBjYXV0aF9iaW5kX25ld19jcmVkKHRhc2ssIGxvb2t1cGZsYWdzKTsKKwlpZiAoSVNfRVJSKG5ldykpCisJCXJldHVybiBQVFJfRVJSKG5ldyk7CisJaWYgKHJlcS0+cnFfY3JlZCAhPSBOVUxMKQorCQlwdXRfcnBjY3JlZChyZXEtPnJxX2NyZWQpOworCXJlcS0+cnFfY3JlZCA9IG5ldzsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZApAQCAtNDg0LDIyICs1MzYsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHB1dF9ycGNjcmVkKTsKIAotdm9pZAotcnBjYXV0aF91bmJpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKLXsKLQlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7Ci0KLQlkcHJpbnRrKCJSUEM6ICU1dSByZWxlYXNpbmcgJXMgY3JlZCAlcFxuIiwKLQkJdGFzay0+dGtfcGlkLCBjcmVkLT5jcl9hdXRoLT5hdV9vcHMtPmF1X25hbWUsIGNyZWQpOwotCi0JcHV0X3JwY2NyZWQoY3JlZCk7Ci0JdGFzay0+dGtfbXNnLnJwY19jcmVkID0gTlVMTDsKLX0KLQogX19iZTMyICoKIHJwY2F1dGhfbWFyc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgX19iZTMyICpwKQogewotCXN0cnVjdCBycGNfY3JlZAkqY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKKwlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKIAogCWRwcmludGsoIlJQQzogJTV1IG1hcnNoYWxpbmcgJXMgY3JlZCAlcFxuIiwKIAkJdGFzay0+dGtfcGlkLCBjcmVkLT5jcl9hdXRoLT5hdV9vcHMtPmF1X25hbWUsIGNyZWQpOwpAQCAtNTEwLDcgKzU1MCw3IEBACiBfX2JlMzIgKgogcnBjYXV0aF9jaGVja3ZlcmYoc3RydWN0IHJwY190YXNrICp0YXNrLCBfX2JlMzIgKnApCiB7Ci0Jc3RydWN0IHJwY19jcmVkCSpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOworCXN0cnVjdCBycGNfY3JlZAkqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCiAJZHByaW50aygiUlBDOiAlNXUgdmFsaWRhdGluZyAlcyBjcmVkICVwXG4iLAogCQl0YXNrLT50a19waWQsIGNyZWQtPmNyX2F1dGgtPmF1X29wcy0+YXVfbmFtZSwgY3JlZCk7CkBAIC01MjIsNyArNTYyLDcgQEAKIHJwY2F1dGhfd3JhcF9yZXEoc3RydWN0IHJwY190YXNrICp0YXNrLCBreGRycHJvY190IGVuY29kZSwgdm9pZCAqcnFzdHAsCiAJCV9fYmUzMiAqZGF0YSwgdm9pZCAqb2JqKQogewotCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKIAogCWRwcmludGsoIlJQQzogJTV1IHVzaW5nICVzIGNyZWQgJXAgdG8gd3JhcCBycGMgZGF0YVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgY3JlZC0+Y3Jfb3BzLT5jcl9uYW1lLCBjcmVkKTsKQEAgLTUzNiw3ICs1NzYsNyBAQAogcnBjYXV0aF91bndyYXBfcmVzcChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIGt4ZHJwcm9jX3QgZGVjb2RlLCB2b2lkICpycXN0cCwKIAkJX19iZTMyICpkYXRhLCB2b2lkICpvYmopCiB7Ci0Jc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOworCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCiAJZHByaW50aygiUlBDOiAlNXUgdXNpbmcgJXMgY3JlZCAlcCB0byB1bndyYXAgcnBjIGRhdGFcbiIsCiAJCQl0YXNrLT50a19waWQsIGNyZWQtPmNyX29wcy0+Y3JfbmFtZSwgY3JlZCk7CkBAIC01NTAsMTMgKzU5MCwyMSBAQAogaW50CiBycGNhdXRoX3JlZnJlc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgcnBjX2NyZWQJKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CisJc3RydWN0IHJwY19jcmVkCSpjcmVkID0gdGFzay0+dGtfcnFzdHAtPnJxX2NyZWQ7CiAJaW50IGVycjsKIAorCWNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKKwlpZiAoY3JlZCA9PSBOVUxMKSB7CisJCWVyciA9IHJwY2F1dGhfYmluZGNyZWQodGFzaywgdGFzay0+dGtfbXNnLnJwY19jcmVkLCB0YXNrLT50a19mbGFncyk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKKwl9OwogCWRwcmludGsoIlJQQzogJTV1IHJlZnJlc2hpbmcgJXMgY3JlZCAlcFxuIiwKIAkJdGFzay0+dGtfcGlkLCBjcmVkLT5jcl9hdXRoLT5hdV9vcHMtPmF1X25hbWUsIGNyZWQpOwogCiAJZXJyID0gY3JlZC0+Y3Jfb3BzLT5jcnJlZnJlc2godGFzayk7CitvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXRhc2stPnRrX3N0YXR1cyA9IGVycjsKIAlyZXR1cm4gZXJyOwpAQCAtNTY1LDcgKzYxMyw3IEBACiB2b2lkCiBycGNhdXRoX2ludmFsY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOworCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCiAJZHByaW50aygiUlBDOiAlNXUgaW52YWxpZGF0aW5nICVzIGNyZWQgJXBcbiIsCiAJCXRhc2stPnRrX3BpZCwgY3JlZC0+Y3JfYXV0aC0+YXVfb3BzLT5hdV9uYW1lLCBjcmVkKTsKQEAgLTU3Niw3ICs2MjQsNyBAQAogaW50CiBycGNhdXRoX3VwdG9kYXRlY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOworCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCiAJcmV0dXJuIGNyZWQgPT0gTlVMTCB8fAogCQl0ZXN0X2JpdChSUENBVVRIX0NSRURfVVBUT0RBVEUsICZjcmVkLT5jcl9mbGFncykgIT0gMDsKQEAgLTU4NywxNCArNjM1LDI3IEBACiAJLnNlZWtzID0gREVGQVVMVF9TRUVLUywKIH07CiAKLXZvaWQgX19pbml0IHJwY2F1dGhfaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgcnBjYXV0aF9pbml0X21vZHVsZSh2b2lkKQogewotCXJwY19pbml0X2F1dGh1bml4KCk7Ci0JcnBjX2luaXRfZ2VuZXJpY19hdXRoKCk7CisJaW50IGVycjsKKworCWVyciA9IHJwY19pbml0X2F1dGh1bml4KCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0MTsKKwllcnIgPSBycGNfaW5pdF9nZW5lcmljX2F1dGgoKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQyOwogCXJlZ2lzdGVyX3Nocmlua2VyKCZycGNfY3JlZF9zaHJpbmtlcik7CisJcmV0dXJuIDA7CitvdXQyOgorCXJwY19kZXN0cm95X2F1dGh1bml4KCk7CitvdXQxOgorCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgX19leGl0IHJwY2F1dGhfcmVtb3ZlX21vZHVsZSh2b2lkKQogeworCXJwY19kZXN0cm95X2F1dGh1bml4KCk7CisJcnBjX2Rlc3Ryb3lfZ2VuZXJpY19hdXRoKCk7CiAJdW5yZWdpc3Rlcl9zaHJpbmtlcigmcnBjX2NyZWRfc2hyaW5rZXIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYyBiL25ldC9zdW5ycGMvYXV0aF9nZW5lcmljLmMKaW5kZXggOGY2MjNiMC4uNDMxNjJiYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dlbmVyaWMuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ2VuZXJpYy5jCkBAIC0yNyw3ICsyNyw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJwY19hdXRoIGdlbmVyaWNfYXV0aDsKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NyZWRfY2FjaGUgZ2VuZXJpY19jcmVkX2NhY2hlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY3JlZG9wcyBnZW5lcmljX2NyZWRvcHM7CiAKIC8qCkBAIC01NSwxOCArNTQsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19sb29rdXBfbWFjaGluZV9jcmVkKTsKIAotc3RhdGljIHZvaWQKLWdlbmVyaWNfYmluZF9jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19jcmVkICpjcmVkLCBpbnQgbG9va3VwZmxhZ3MpCitzdGF0aWMgc3RydWN0IHJwY19jcmVkICpnZW5lcmljX2JpbmRfY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCisJCXN0cnVjdCBycGNfY3JlZCAqY3JlZCwgaW50IGxvb2t1cGZsYWdzKQogewogCXN0cnVjdCBycGNfYXV0aCAqYXV0aCA9IHRhc2stPnRrX2NsaWVudC0+Y2xfYXV0aDsKIAlzdHJ1Y3QgYXV0aF9jcmVkICphY3JlZCA9ICZjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdlbmVyaWNfY3JlZCwgZ2NfYmFzZSktPmFjcmVkOwotCXN0cnVjdCBycGNfY3JlZCAqcmV0OwogCi0JcmV0ID0gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgbG9va3VwZmxhZ3MpOwotCWlmICghSVNfRVJSKHJldCkpCi0JCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IHJldDsKLQllbHNlCi0JCXRhc2stPnRrX3N0YXR1cyA9IFBUUl9FUlIocmV0KTsKKwlyZXR1cm4gYXV0aC0+YXVfb3BzLT5sb29rdXBfY3JlZChhdXRoLCBhY3JlZCwgbG9va3VwZmxhZ3MpOwogfQogCiAvKgpAQCAtMTU5LDIwICsxNTMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2luaXQgcnBjX2luaXRfZ2VuZXJpY19hdXRoKHZvaWQpCitpbnQgX19pbml0IHJwY19pbml0X2dlbmVyaWNfYXV0aCh2b2lkKQogewotCXNwaW5fbG9ja19pbml0KCZnZW5lcmljX2NyZWRfY2FjaGUubG9jayk7CisJcmV0dXJuIHJwY2F1dGhfaW5pdF9jcmVkY2FjaGUoJmdlbmVyaWNfYXV0aCk7CiB9CiAKIHZvaWQgX19leGl0IHJwY19kZXN0cm95X2dlbmVyaWNfYXV0aCh2b2lkKQogewotCXJwY2F1dGhfY2xlYXJfY3JlZGNhY2hlKCZnZW5lcmljX2NyZWRfY2FjaGUpOworCXJwY2F1dGhfZGVzdHJveV9jcmVkY2FjaGUoJmdlbmVyaWNfYXV0aCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NyZWRfY2FjaGUgZ2VuZXJpY19jcmVkX2NhY2hlID0gewotCXt7IE5VTEwsIH0sfSwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2F1dGhvcHMgZ2VuZXJpY19hdXRoX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuYXVfbmFtZSA9ICJHZW5lcmljIiwKQEAgLTE4Myw3ICsxNzMsNiBAQAogc3RhdGljIHN0cnVjdCBycGNfYXV0aCBnZW5lcmljX2F1dGggPSB7CiAJLmF1X29wcyA9ICZnZW5lcmljX2F1dGhfb3BzLAogCS5hdV9jb3VudCA9IEFUT01JQ19JTklUKDApLAotCS5hdV9jcmVkY2FjaGUgPSAmZ2VuZXJpY19jcmVkX2NhY2hlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY3JlZG9wcyBnZW5lcmljX2NyZWRvcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKaW5kZXggOGRhMmEwZS4uZGNmYzY2YiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtMzczLDcgKzM3Myw3IEBACiBzdGF0aWMgdm9pZAogZ3NzX3VwY2FsbF9jYWxsYmFjayhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IGdzc19jcmVkICpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZih0YXNrLT50a19tc2cucnBjX2NyZWQsCisJc3RydWN0IGdzc19jcmVkICpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZih0YXNrLT50a19ycXN0cC0+cnFfY3JlZCwKIAkJCXN0cnVjdCBnc3NfY3JlZCwgZ2NfYmFzZSk7CiAJc3RydWN0IGdzc191cGNhbGxfbXNnICpnc3NfbXNnID0gZ3NzX2NyZWQtPmdjX3VwY2FsbDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJmdzc19tc2ctPmlub2RlLT52ZnNfaW5vZGU7CkBAIC01MDIsNyArNTAyLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBnc3NfcmVmcmVzaF91cGNhbGwoc3RydWN0IHJwY190YXNrICp0YXNrKQogewotCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKIAlzdHJ1Y3QgZ3NzX2F1dGggKmdzc19hdXRoID0gY29udGFpbmVyX29mKGNyZWQtPmNyX2F1dGgsCiAJCQlzdHJ1Y3QgZ3NzX2F1dGgsIHJwY19hdXRoKTsKIAlzdHJ1Y3QgZ3NzX2NyZWQgKmdzc19jcmVkID0gY29udGFpbmVyX29mKGNyZWQsCkBAIC05MjgsNiArOTI4LDcgQEAKIHsKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGdzc19mcmVlX2N0eFxuIik7CiAKKwlnc3NfZGVsZXRlX3NlY19jb250ZXh0KCZjdHgtPmdjX2dzc19jdHgpOwogCWtmcmVlKGN0eC0+Z2Nfd2lyZV9jdHguZGF0YSk7CiAJa2ZyZWUoY3R4KTsKIH0KQEAgLTk0MiwxMyArOTQzLDcgQEAKIHN0YXRpYyB2b2lkCiBnc3NfZnJlZV9jdHgoc3RydWN0IGdzc19jbF9jdHggKmN0eCkKIHsKLQlzdHJ1Y3QgZ3NzX2N0eCAqZ2NfZ3NzX2N0eDsKLQotCWdjX2dzc19jdHggPSByY3VfZGVyZWZlcmVuY2UoY3R4LT5nY19nc3NfY3R4KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIoY3R4LT5nY19nc3NfY3R4LCBOVUxMKTsKIAljYWxsX3JjdSgmY3R4LT5nY19yY3UsIGdzc19mcmVlX2N0eF9jYWxsYmFjayk7Ci0JaWYgKGdjX2dzc19jdHgpCi0JCWdzc19kZWxldGVfc2VjX2NvbnRleHQoJmdjX2dzc19jdHgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTA2NCwxMiArMTA1OSwxMiBAQAogc3RhdGljIF9fYmUzMiAqCiBnc3NfbWFyc2hhbChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIF9fYmUzMiAqcCkKIHsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CisJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSByZXEtPnJxX2NyZWQ7CiAJc3RydWN0IGdzc19jcmVkCSpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZihjcmVkLCBzdHJ1Y3QgZ3NzX2NyZWQsCiAJCQkJCQkgZ2NfYmFzZSk7CiAJc3RydWN0IGdzc19jbF9jdHgJKmN0eCA9IGdzc19jcmVkX2dldF9jdHgoY3JlZCk7CiAJX19iZTMyCQkqY3JlZF9sZW47Ci0Jc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKIAl1MzIgICAgICAgICAgICAgbWFqX3N0YXQgPSAwOwogCXN0cnVjdCB4ZHJfbmV0b2JqIG1pYzsKIAlzdHJ1Y3Qga3ZlYwlpb3Y7CkBAIC0xMTE5LDcgKzExMTQsNyBAQAogCiBzdGF0aWMgaW50IGdzc19yZW5ld19jcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgcnBjX2NyZWQgKm9sZGNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CisJc3RydWN0IHJwY19jcmVkICpvbGRjcmVkID0gdGFzay0+dGtfcnFzdHAtPnJxX2NyZWQ7CiAJc3RydWN0IGdzc19jcmVkICpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZihvbGRjcmVkLAogCQkJCQkJIHN0cnVjdCBnc3NfY3JlZCwKIAkJCQkJCSBnY19iYXNlKTsKQEAgLTExMzMsNyArMTEyOCw3IEBACiAJbmV3ID0gZ3NzX2xvb2t1cF9jcmVkKGF1dGgsICZhY3JlZCwgUlBDQVVUSF9MT09LVVBfTkVXKTsKIAlpZiAoSVNfRVJSKG5ldykpCiAJCXJldHVybiBQVFJfRVJSKG5ldyk7Ci0JdGFzay0+dGtfbXNnLnJwY19jcmVkID0gbmV3OworCXRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkID0gbmV3OwogCXB1dF9ycGNjcmVkKG9sZGNyZWQpOwogCXJldHVybiAwOwogfQpAQCAtMTE2MSw3ICsxMTU2LDcgQEAKIHN0YXRpYyBpbnQKIGdzc19yZWZyZXNoKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CisJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfcnFzdHAtPnJxX2NyZWQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZ3NzX2NyZWRfaXNfbmVnYXRpdmVfZW50cnkoY3JlZCkpCkBAIC0xMTcyLDcgKzExNjcsNyBAQAogCQlyZXQgPSBnc3NfcmVuZXdfY3JlZCh0YXNrKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKLQkJY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKKwkJY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCX0KIAogCWlmICh0ZXN0X2JpdChSUENBVVRIX0NSRURfTkVXLCAmY3JlZC0+Y3JfZmxhZ3MpKQpAQCAtMTE5MSw3ICsxMTg2LDcgQEAKIHN0YXRpYyBfX2JlMzIgKgogZ3NzX3ZhbGlkYXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgX19iZTMyICpwKQogewotCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19ycXN0cC0+cnFfY3JlZDsKIAlzdHJ1Y3QgZ3NzX2NsX2N0eCAqY3R4ID0gZ3NzX2NyZWRfZ2V0X2N0eChjcmVkKTsKIAlfX2JlMzIJCXNlcTsKIAlzdHJ1Y3Qga3ZlYwlpb3Y7CkBAIC0xNDAwLDcgKzEzOTUsNyBAQAogZ3NzX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywKIAkgICAgIGt4ZHJwcm9jX3QgZW5jb2RlLCB2b2lkICpycXN0cCwgX19iZTMyICpwLCB2b2lkICpvYmopCiB7Ci0Jc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOworCXN0cnVjdCBycGNfY3JlZCAqY3JlZCA9IHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkOwogCXN0cnVjdCBnc3NfY3JlZAkqZ3NzX2NyZWQgPSBjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdzc19jcmVkLAogCQkJZ2NfYmFzZSk7CiAJc3RydWN0IGdzc19jbF9jdHggKmN0eCA9IGdzc19jcmVkX2dldF9jdHgoY3JlZCk7CkBAIC0xNTAzLDcgKzE0OTgsNyBAQAogZ3NzX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywKIAkJa3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKm9iaikKIHsKLQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CisJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfcnFzdHAtPnJxX2NyZWQ7CiAJc3RydWN0IGdzc19jcmVkICpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZihjcmVkLCBzdHJ1Y3QgZ3NzX2NyZWQsCiAJCQlnY19iYXNlKTsKIAlzdHJ1Y3QgZ3NzX2NsX2N0eCAqY3R4ID0gZ3NzX2NyZWRfZ2V0X2N0eChjcmVkKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9udWxsLmMgYi9uZXQvc3VucnBjL2F1dGhfbnVsbC5jCmluZGV4IDFkYjYxOGYuLmE1YzM2YzAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9udWxsLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX251bGwuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIGludAogbnVsX3JlZnJlc2goc3RydWN0IHJwY190YXNrICp0YXNrKQogewotCXNldF9iaXQoUlBDQVVUSF9DUkVEX1VQVE9EQVRFLCAmdGFzay0+dGtfbXNnLnJwY19jcmVkLT5jcl9mbGFncyk7CisJc2V0X2JpdChSUENBVVRIX0NSRURfVVBUT0RBVEUsICZ0YXNrLT50a19ycXN0cC0+cnFfY3JlZC0+Y3JfZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9hdXRoX3VuaXguYwppbmRleCBhYWMyZjhiLi40Y2I3MGRjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF91bml4LmMKQEAgLTI5LDcgKzI5LDYgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHJwY19hdXRoCQl1bml4X2F1dGg7Ci1zdGF0aWMgc3RydWN0IHJwY19jcmVkX2NhY2hlCXVuaXhfY3JlZF9jYWNoZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NyZWRvcHMJdW5peF9jcmVkb3BzOwogCiBzdGF0aWMgc3RydWN0IHJwY19hdXRoICoKQEAgLTE0MSw3ICsxNDAsNyBAQAogdW54X21hcnNoYWwoc3RydWN0IHJwY190YXNrICp0YXNrLCBfX2JlMzIgKnApCiB7CiAJc3RydWN0IHJwY19jbG50CSpjbG50ID0gdGFzay0+dGtfY2xpZW50OwotCXN0cnVjdCB1bnhfY3JlZAkqY3JlZCA9IGNvbnRhaW5lcl9vZih0YXNrLT50a19tc2cucnBjX2NyZWQsIHN0cnVjdCB1bnhfY3JlZCwgdWNfYmFzZSk7CisJc3RydWN0IHVueF9jcmVkCSpjcmVkID0gY29udGFpbmVyX29mKHRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkLCBzdHJ1Y3QgdW54X2NyZWQsIHVjX2Jhc2UpOwogCV9fYmUzMgkJKmJhc2UsICpob2xkOwogCWludAkJaTsKIApAQCAtMTc0LDcgKzE3Myw3IEBACiBzdGF0aWMgaW50CiB1bnhfcmVmcmVzaChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc2V0X2JpdChSUENBVVRIX0NSRURfVVBUT0RBVEUsICZ0YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2ZsYWdzKTsKKwlzZXRfYml0KFJQQ0FVVEhfQ1JFRF9VUFRPREFURSwgJnRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkLT5jcl9mbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NywxNSArMTk2LDIwIEBACiAJCXByaW50aygiUlBDOiBnaWFudCB2ZXJmIHNpemU6ICV1XG4iLCBzaXplKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXRhc2stPnRrX21zZy5ycGNfY3JlZC0+Y3JfYXV0aC0+YXVfcnNsYWNrID0gKHNpemUgPj4gMikgKyAyOworCXRhc2stPnRrX3Jxc3RwLT5ycV9jcmVkLT5jcl9hdXRoLT5hdV9yc2xhY2sgPSAoc2l6ZSA+PiAyKSArIDI7CiAJcCArPSAoc2l6ZSA+PiAyKTsKIAogCXJldHVybiBwOwogfQogCi12b2lkIF9faW5pdCBycGNfaW5pdF9hdXRodW5peCh2b2lkKQoraW50IF9faW5pdCBycGNfaW5pdF9hdXRodW5peCh2b2lkKQogewotCXNwaW5fbG9ja19pbml0KCZ1bml4X2NyZWRfY2FjaGUubG9jayk7CisJcmV0dXJuIHJwY2F1dGhfaW5pdF9jcmVkY2FjaGUoJnVuaXhfYXV0aCk7Cit9CisKK3ZvaWQgcnBjX2Rlc3Ryb3lfYXV0aHVuaXgodm9pZCkKK3sKKwlycGNhdXRoX2Rlc3Ryb3lfY3JlZGNhY2hlKCZ1bml4X2F1dGgpOwogfQogCiBjb25zdCBzdHJ1Y3QgcnBjX2F1dGhvcHMgYXV0aHVuaXhfb3BzID0gewpAQCAtMjE5LDE3ICsyMjMsMTIgQEAKIH07CiAKIHN0YXRpYwotc3RydWN0IHJwY19jcmVkX2NhY2hlCXVuaXhfY3JlZF9jYWNoZSA9IHsKLX07Ci0KLXN0YXRpYwogc3RydWN0IHJwY19hdXRoCQl1bml4X2F1dGggPSB7CiAJLmF1X2NzbGFjawk9IFVOWF9XUklURVNMQUNLLAogCS5hdV9yc2xhY2sJPSAyLAkJCS8qIGFzc3VtZSBBVVRIX05VTEwgdmVyZiAqLwogCS5hdV9vcHMJCT0gJmF1dGh1bml4X29wcywKIAkuYXVfZmxhdm9yCT0gUlBDX0FVVEhfVU5JWCwKIAkuYXVfY291bnQJPSBBVE9NSUNfSU5JVCgwKSwKLQkuYXVfY3JlZGNhY2hlCT0gJnVuaXhfY3JlZF9jYWNoZSwKIH07CiAKIHN0YXRpYwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jYWNoZS5jIGIvbmV0L3N1bnJwYy9jYWNoZS5jCmluZGV4IDU4ZGU3NmMuLjJiMDY0MTAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYworKysgYi9uZXQvc3VucnBjL2NhY2hlLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjZGVmaW5lCSBSUENEQkdfRkFDSUxJVFkgUlBDREJHX0NBQ0hFCiAKQEAgLTMyMCw3ICszMTksNyBAQAogc3RhdGljIGludCBjdXJyZW50X2luZGV4OwogCiBzdGF0aWMgdm9pZCBkb19jYWNoZV9jbGVhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKGNhY2hlX2NsZWFuZXIsIGRvX2NhY2hlX2NsZWFuKTsKK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIGNhY2hlX2NsZWFuZXI7CiAKIHN0YXRpYyB2b2lkIHN1bnJwY19pbml0X2NhY2hlX2RldGFpbChzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKIHsKQEAgLTE1MDQsNiArMTUwMywxMSBAQAogfQogI2VuZGlmCiAKK3ZvaWQgX19pbml0IGNhY2hlX2luaXRpYWxpemUodm9pZCkKK3sKKwlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKCZjYWNoZV9jbGVhbmVyLCBkb19jYWNoZV9jbGVhbik7Cit9CisKIGludCBjYWNoZV9yZWdpc3RlcihzdHJ1Y3QgY2FjaGVfZGV0YWlsICpjZCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCA3NTZmYzMyLi4yMzg4ZDgzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtNDE0LDYgKzQxNCwzNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2Nsb25lX2NsaWVudCk7CiAKIC8qCisgKiBLaWxsIGFsbCB0YXNrcyBmb3IgdGhlIGdpdmVuIGNsaWVudC4KKyAqIFhYWDoga2lsbCB0aGVpciBkZXNjZW5kYW50cyBhcyB3ZWxsPworICovCit2b2lkIHJwY19raWxsYWxsX3Rhc2tzKHN0cnVjdCBycGNfY2xudCAqY2xudCkKK3sKKwlzdHJ1Y3QgcnBjX3Rhc2sJKnJvdnI7CisKKworCWlmIChsaXN0X2VtcHR5KCZjbG50LT5jbF90YXNrcykpCisJCXJldHVybjsKKwlkcHJpbnRrKCJSUEM6ICAgICAgIGtpbGxpbmcgYWxsIHRhc2tzIGZvciBjbGllbnQgJXBcbiIsIGNsbnQpOworCS8qCisJICogU3BpbiBsb2NrIGFsbF90YXNrcyB0byBwcmV2ZW50IGNoYW5nZXMuLi4KKwkgKi8KKwlzcGluX2xvY2soJmNsbnQtPmNsX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocm92ciwgJmNsbnQtPmNsX3Rhc2tzLCB0a190YXNrKSB7CisJCWlmICghUlBDX0lTX0FDVElWQVRFRChyb3ZyKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShyb3ZyLT50a19mbGFncyAmIFJQQ19UQVNLX0tJTExFRCkpIHsKKwkJCXJvdnItPnRrX2ZsYWdzIHw9IFJQQ19UQVNLX0tJTExFRDsKKwkJCXJwY19leGl0KHJvdnIsIC1FSU8pOworCQkJcnBjX3dha2VfdXBfcXVldWVkX3Rhc2socm92ci0+dGtfd2FpdHF1ZXVlLCByb3ZyKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmY2xudC0+Y2xfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGNfa2lsbGFsbF90YXNrcyk7CisKKy8qCiAgKiBQcm9wZXJseSBzaHV0IGRvd24gYW4gUlBDIGNsaWVudCwgdGVybWluYXRpbmcgYWxsIG91dHN0YW5kaW5nCiAgKiByZXF1ZXN0cy4KICAqLwpAQCAtNTM4LDYgKzU2Nyw0OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnBjX2JpbmRfbmV3X3Byb2dyYW0pOwogCit2b2lkIHJwY190YXNrX3JlbGVhc2VfY2xpZW50KHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSB0YXNrLT50a19jbGllbnQ7CisKKwlpZiAoY2xudCAhPSBOVUxMKSB7CisJCS8qIFJlbW92ZSBmcm9tIGNsaWVudCB0YXNrIGxpc3QgKi8KKwkJc3Bpbl9sb2NrKCZjbG50LT5jbF9sb2NrKTsKKwkJbGlzdF9kZWwoJnRhc2stPnRrX3Rhc2spOworCQlzcGluX3VubG9jaygmY2xudC0+Y2xfbG9jayk7CisJCXRhc2stPnRrX2NsaWVudCA9IE5VTEw7CisKKwkJcnBjX3JlbGVhc2VfY2xpZW50KGNsbnQpOworCX0KK30KKworc3RhdGljCit2b2lkIHJwY190YXNrX3NldF9jbGllbnQoc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpCit7CisJaWYgKGNsbnQgIT0gTlVMTCkgeworCQlycGNfdGFza19yZWxlYXNlX2NsaWVudCh0YXNrKTsKKwkJdGFzay0+dGtfY2xpZW50ID0gY2xudDsKKwkJa3JlZl9nZXQoJmNsbnQtPmNsX2tyZWYpOworCQlpZiAoY2xudC0+Y2xfc29mdHJ0cnkpCisJCQl0YXNrLT50a19mbGFncyB8PSBSUENfVEFTS19TT0ZUOworCQkvKiBBZGQgdG8gdGhlIGNsaWVudCdzIGxpc3Qgb2YgYWxsIHRhc2tzICovCisJCXNwaW5fbG9jaygmY2xudC0+Y2xfbG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJnRhc2stPnRrX3Rhc2ssICZjbG50LT5jbF90YXNrcyk7CisJCXNwaW5fdW5sb2NrKCZjbG50LT5jbF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitycGNfdGFza19zZXRfcnBjX21lc3NhZ2Uoc3RydWN0IHJwY190YXNrICp0YXNrLCBjb25zdCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKK3sKKwlpZiAobXNnICE9IE5VTEwpIHsKKwkJdGFzay0+dGtfbXNnLnJwY19wcm9jID0gbXNnLT5ycGNfcHJvYzsKKwkJdGFzay0+dGtfbXNnLnJwY19hcmdwID0gbXNnLT5ycGNfYXJncDsKKwkJdGFzay0+dGtfbXNnLnJwY19yZXNwID0gbXNnLT5ycGNfcmVzcDsKKwkJaWYgKG1zZy0+cnBjX2NyZWQgIT0gTlVMTCkKKwkJCXRhc2stPnRrX21zZy5ycGNfY3JlZCA9IGdldF9ycGNjcmVkKG1zZy0+cnBjX2NyZWQpOworCX0KK30KKwogLyoKICAqIERlZmF1bHQgY2FsbGJhY2sgZm9yIGFzeW5jIFJQQyBjYWxscwogICovCkBAIC01NjIsNiArNjM0LDE4IEBACiAJaWYgKElTX0VSUih0YXNrKSkKIAkJZ290byBvdXQ7CiAKKwlycGNfdGFza19zZXRfY2xpZW50KHRhc2ssIHRhc2tfc2V0dXBfZGF0YS0+cnBjX2NsaWVudCk7CisJcnBjX3Rhc2tfc2V0X3JwY19tZXNzYWdlKHRhc2ssIHRhc2tfc2V0dXBfZGF0YS0+cnBjX21lc3NhZ2UpOworCisJaWYgKHRhc2stPnRrX3N0YXR1cyAhPSAwKSB7CisJCWludCByZXQgPSB0YXNrLT50a19zdGF0dXM7CisJCXJwY19wdXRfdGFzayh0YXNrKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisKKwlpZiAodGFzay0+dGtfYWN0aW9uID09IE5VTEwpCisJCXJwY19jYWxsX3N0YXJ0KHRhc2spOworCiAJYXRvbWljX2luYygmdGFzay0+dGtfY291bnQpOwogCXJwY19leGVjdXRlKHRhc2spOwogb3V0OgpAQCAtNzU2LDEyICs4NDAsMTMgQEAKICAqIFJlc3RhcnQgYW4gKGFzeW5jKSBSUEMgY2FsbCBmcm9tIHRoZSBjYWxsX3ByZXBhcmUgc3RhdGUuCiAgKiBVc3VhbGx5IGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgZXhpdCBoYW5kbGVyLgogICovCi12b2lkCitpbnQKIHJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJaWYgKFJQQ19BU1NBU1NJTkFURUQodGFzaykpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJdGFzay0+dGtfYWN0aW9uID0gcnBjX3ByZXBhcmVfdGFzazsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSk7CiAKQEAgLTc2OSwxMyArODU0LDEzIEBACiAgKiBSZXN0YXJ0IGFuIChhc3luYykgUlBDIGNhbGwuIFVzdWFsbHkgY2FsbGVkIGZyb20gd2l0aGluIHRoZQogICogZXhpdCBoYW5kbGVyLgogICovCi12b2lkCitpbnQKIHJwY19yZXN0YXJ0X2NhbGwoc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCWlmIChSUENfQVNTQVNTSU5BVEVEKHRhc2spKQotCQlyZXR1cm47Ci0KKwkJcmV0dXJuIDA7CiAJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9zdGFydDsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19yZXN0YXJ0X2NhbGwpOwogCkBAIC04MjQsMTEgKzkwOSw2IEBACiB7CiAJZHByaW50X3N0YXR1cyh0YXNrKTsKIAotCWlmICghcnBjYXV0aF91cHRvZGF0ZWNyZWQodGFzaykpIHsKLQkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9yZWZyZXNoOwotCQlyZXR1cm47Ci0JfQotCiAJdGFzay0+dGtfc3RhdHVzICA9IDA7CiAJdGFzay0+dGtfYWN0aW9uICA9IGNhbGxfcmVzZXJ2ZXJlc3VsdDsKIAl4cHJ0X3Jlc2VydmUodGFzayk7CkBAIC04OTIsNyArOTcyLDcgQEAKIHN0YXRpYyB2b2lkCiBjYWxsX2FsbG9jYXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQl1bnNpZ25lZCBpbnQgc2xhY2sgPSB0YXNrLT50a19tc2cucnBjX2NyZWQtPmNyX2F1dGgtPmF1X2NzbGFjazsKKwl1bnNpZ25lZCBpbnQgc2xhY2sgPSB0YXNrLT50a19jbGllbnQtPmNsX2F1dGgtPmF1X2NzbGFjazsKIAlzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSA9IHRhc2stPnRrX3Jxc3RwOwogCXN0cnVjdCBycGNfeHBydCAqeHBydCA9IHRhc2stPnRrX3hwcnQ7CiAJc3RydWN0IHJwY19wcm9jaW5mbyAqcHJvYyA9IHRhc2stPnRrX21zZy5ycGNfcHJvYzsKQEAgLTkwMCw3ICs5ODAsNyBAQAogCWRwcmludF9zdGF0dXModGFzayk7CiAKIAl0YXNrLT50a19zdGF0dXMgPSAwOwotCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKKwl0YXNrLT50a19hY3Rpb24gPSBjYWxsX3JlZnJlc2g7CiAKIAlpZiAocmVxLT5ycV9idWZmZXIpCiAJCXJldHVybjsKQEAgLTkzNyw2ICsxMDE3LDQ3IEBACiAJcnBjX2V4aXQodGFzaywgLUVSRVNUQVJUU1lTKTsKIH0KIAorLyoKKyAqIDJhLglCaW5kIGFuZC9vciByZWZyZXNoIHRoZSBjcmVkZW50aWFscworICovCitzdGF0aWMgdm9pZAorY2FsbF9yZWZyZXNoKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlkcHJpbnRfc3RhdHVzKHRhc2spOworCisJdGFzay0+dGtfYWN0aW9uID0gY2FsbF9yZWZyZXNocmVzdWx0OworCXRhc2stPnRrX3N0YXR1cyA9IDA7CisJdGFzay0+dGtfY2xpZW50LT5jbF9zdGF0cy0+cnBjYXV0aHJlZnJlc2grKzsKKwlycGNhdXRoX3JlZnJlc2hjcmVkKHRhc2spOworfQorCisvKgorICogMmIuCVByb2Nlc3MgdGhlIHJlc3VsdHMgb2YgYSBjcmVkZW50aWFsIHJlZnJlc2gKKyAqLworc3RhdGljIHZvaWQKK2NhbGxfcmVmcmVzaHJlc3VsdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCit7CisJaW50IHN0YXR1cyA9IHRhc2stPnRrX3N0YXR1czsKKworCWRwcmludF9zdGF0dXModGFzayk7CisKKwl0YXNrLT50a19zdGF0dXMgPSAwOworCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKKwlpZiAoc3RhdHVzID49IDAgJiYgcnBjYXV0aF91cHRvZGF0ZWNyZWQodGFzaykpCisJCXJldHVybjsKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgLUVBQ0NFUzoKKwkJcnBjX2V4aXQodGFzaywgLUVBQ0NFUyk7CisJCXJldHVybjsKKwljYXNlIC1FTk9NRU06CisJCXJwY19leGl0KHRhc2ssIC1FTk9NRU0pOworCQlyZXR1cm47CisJY2FzZSAtRVRJTUVET1VUOgorCQlycGNfZGVsYXkodGFzaywgMypIWik7CisJfQorCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfcmVmcmVzaDsKK30KKwogc3RhdGljIGlubGluZSBpbnQKIHJwY190YXNrX25lZWRfZW5jb2RlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKQEAgLTE0NzIsNDMgKzE1OTMsNiBAQAogCX0KIH0KIAotLyoKLSAqIDguCVJlZnJlc2ggdGhlIGNyZWRlbnRpYWxzIGlmIHJlamVjdGVkIGJ5IHRoZSBzZXJ2ZXIKLSAqLwotc3RhdGljIHZvaWQKLWNhbGxfcmVmcmVzaChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCi17Ci0JZHByaW50X3N0YXR1cyh0YXNrKTsKLQotCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfcmVmcmVzaHJlc3VsdDsKLQl0YXNrLT50a19zdGF0dXMgPSAwOwotCXRhc2stPnRrX2NsaWVudC0+Y2xfc3RhdHMtPnJwY2F1dGhyZWZyZXNoKys7Ci0JcnBjYXV0aF9yZWZyZXNoY3JlZCh0YXNrKTsKLX0KLQotLyoKLSAqIDhhLglQcm9jZXNzIHRoZSByZXN1bHRzIG9mIGEgY3JlZGVudGlhbCByZWZyZXNoCi0gKi8KLXN0YXRpYyB2b2lkCi1jYWxsX3JlZnJlc2hyZXN1bHQoc3RydWN0IHJwY190YXNrICp0YXNrKQotewotCWludCBzdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7Ci0KLQlkcHJpbnRfc3RhdHVzKHRhc2spOwotCi0JdGFzay0+dGtfc3RhdHVzID0gMDsKLQl0YXNrLT50a19hY3Rpb24gPSBjYWxsX3Jlc2VydmU7Ci0JaWYgKHN0YXR1cyA+PSAwICYmIHJwY2F1dGhfdXB0b2RhdGVjcmVkKHRhc2spKQotCQlyZXR1cm47Ci0JaWYgKHN0YXR1cyA9PSAtRUFDQ0VTKSB7Ci0JCXJwY19leGl0KHRhc2ssIC1FQUNDRVMpOwotCQlyZXR1cm47Ci0JfQotCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfcmVmcmVzaDsKLQlpZiAoc3RhdHVzICE9IC1FVElNRURPVVQpCi0JCXJwY19kZWxheSh0YXNrLCAzKkhaKTsKLX0KLQogc3RhdGljIF9fYmUzMiAqCiBycGNfZW5jb2RlX2hlYWRlcihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggNGE4NDNiOC4uY2FjZTYwNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtMjQ2LDE3ICsyNDYsOCBAQAogCiBzdGF0aWMgdm9pZCBycGNfc2V0X2FjdGl2ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IHJwY19jbG50ICpjbG50OwotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFJQQ19UQVNLX0FDVElWRSwgJnRhc2stPnRrX3J1bnN0YXRlKSAhPSAwKQotCQlyZXR1cm47CiAJcnBjX3Rhc2tfc2V0X2RlYnVnaW5mbyh0YXNrKTsKLQkvKiBBZGQgdG8gZ2xvYmFsIGxpc3Qgb2YgYWxsIHRhc2tzICovCi0JY2xudCA9IHRhc2stPnRrX2NsaWVudDsKLQlpZiAoY2xudCAhPSBOVUxMKSB7Ci0JCXNwaW5fbG9jaygmY2xudC0+Y2xfbG9jayk7Ci0JCWxpc3RfYWRkX3RhaWwoJnRhc2stPnRrX3Rhc2ssICZjbG50LT5jbF90YXNrcyk7Ci0JCXNwaW5fdW5sb2NrKCZjbG50LT5jbF9sb2NrKTsKLQl9CisJc2V0X2JpdChSUENfVEFTS19BQ1RJVkUsICZ0YXNrLT50a19ydW5zdGF0ZSk7CiB9CiAKIC8qCkBAIC0zMTksMTEgKzMxMCw2IEBACiAJZHByaW50aygiUlBDOiAlNXUgc2xlZXBfb24ocXVldWUgXCIlc1wiIHRpbWUgJWx1KVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgcnBjX3FuYW1lKHEpLCBqaWZmaWVzKTsKIAotCWlmICghUlBDX0lTX0FTWU5DKHRhc2spICYmICFSUENfSVNfQUNUSVZBVEVEKHRhc2spKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUlBDOiBJbmFjdGl2ZSBzeW5jaHJvbm91cyB0YXNrIHB1dCB0byBzbGVlcCFcbiIpOwotCQlyZXR1cm47Ci0JfQotCiAJX19ycGNfYWRkX3dhaXRfcXVldWUocSwgdGFzayk7CiAKIAlCVUdfT04odGFzay0+dGtfY2FsbGJhY2sgIT0gTlVMTCk7CkBAIC0zMzQsOCArMzIwLDggQEAKIHZvaWQgcnBjX3NsZWVwX29uKHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqcSwgc3RydWN0IHJwY190YXNrICp0YXNrLAogCQkJCXJwY19hY3Rpb24gYWN0aW9uKQogewotCS8qIE1hcmsgdGhlIHRhc2sgYXMgYmVpbmcgYWN0aXZhdGVkIGlmIHNvIG5lZWRlZCAqLwotCXJwY19zZXRfYWN0aXZlKHRhc2spOworCS8qIFdlIHNob3VsZG4ndCBldmVyIHB1dCBhbiBpbmFjdGl2ZSB0YXNrIHRvIHNsZWVwICovCisJQlVHX09OKCFSUENfSVNfQUNUSVZBVEVEKHRhc2spKTsKIAogCS8qCiAJICogUHJvdGVjdCB0aGUgcXVldWUgb3BlcmF0aW9ucy4KQEAgLTQwNiwxNCArMzkyLDYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJwY193YWtlX3VwX3F1ZXVlZF90YXNrKTsKIAogLyoKLSAqIFdha2UgdXAgdGhlIHNwZWNpZmllZCB0YXNrCi0gKi8KLXN0YXRpYyB2b2lkIHJwY193YWtlX3VwX3Rhc2soc3RydWN0IHJwY190YXNrICp0YXNrKQotewotCXJwY193YWtlX3VwX3F1ZXVlZF90YXNrKHRhc2stPnRrX3dhaXRxdWV1ZSwgdGFzayk7Ci19Ci0KLS8qCiAgKiBXYWtlIHVwIHRoZSBuZXh0IHRhc2sgb24gYSBwcmlvcml0eSBxdWV1ZS4KICAqLwogc3RhdGljIHN0cnVjdCBycGNfdGFzayAqIF9fcnBjX3dha2VfdXBfbmV4dF9wcmlvcml0eShzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKnF1ZXVlKQpAQCAtNjAwLDcgKzU3OCwxNSBAQAogCQl9CiAJfQogfQotRVhQT1JUX1NZTUJPTF9HUEwocnBjX2V4aXRfdGFzayk7CisKK3ZvaWQgcnBjX2V4aXQoc3RydWN0IHJwY190YXNrICp0YXNrLCBpbnQgc3RhdHVzKQoreworCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKKwl0YXNrLT50a19hY3Rpb24gPSBycGNfZXhpdF90YXNrOworCWlmIChSUENfSVNfUVVFVUVEKHRhc2spKQorCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzayh0YXNrLT50a193YWl0cXVldWUsIHRhc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnBjX2V4aXQpOwogCiB2b2lkIHJwY19yZWxlYXNlX2NhbGxkYXRhKGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKm9wcywgdm9pZCAqY2FsbGRhdGEpCiB7CkBAIC02OTAsNyArNjc2LDYgQEAKIAkJCWRwcmludGsoIlJQQzogJTV1IGdvdCBzaWduYWxcbiIsIHRhc2stPnRrX3BpZCk7CiAJCQl0YXNrLT50a19mbGFncyB8PSBSUENfVEFTS19LSUxMRUQ7CiAJCQlycGNfZXhpdCh0YXNrLCAtRVJFU1RBUlRTWVMpOwotCQkJcnBjX3dha2VfdXBfdGFzayh0YXNrKTsKIAkJfQogCQlycGNfc2V0X3J1bm5pbmcodGFzayk7CiAJCWRwcmludGsoIlJQQzogJTV1IHN5bmMgdGFzayByZXN1bWluZ1xuIiwgdGFzay0+dGtfcGlkKTsKQEAgLTcxNCw4ICs2OTksOSBAQAogdm9pZCBycGNfZXhlY3V0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJcnBjX3NldF9hY3RpdmUodGFzayk7Ci0JcnBjX3NldF9ydW5uaW5nKHRhc2spOwotCV9fcnBjX2V4ZWN1dGUodGFzayk7CisJcnBjX21ha2VfcnVubmFibGUodGFzayk7CisJaWYgKCFSUENfSVNfQVNZTkModGFzaykpCisJCV9fcnBjX2V4ZWN1dGUodGFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJwY19hc3luY19zY2hlZHVsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC04MDgsMjYgKzc5NCw5IEBACiAJLyogSW5pdGlhbGl6ZSB3b3JrcXVldWUgZm9yIGFzeW5jIHRhc2tzICovCiAJdGFzay0+dGtfd29ya3F1ZXVlID0gdGFza19zZXR1cF9kYXRhLT53b3JrcXVldWU7CiAKLQl0YXNrLT50a19jbGllbnQgPSB0YXNrX3NldHVwX2RhdGEtPnJwY19jbGllbnQ7Ci0JaWYgKHRhc2stPnRrX2NsaWVudCAhPSBOVUxMKSB7Ci0JCWtyZWZfZ2V0KCZ0YXNrLT50a19jbGllbnQtPmNsX2tyZWYpOwotCQlpZiAodGFzay0+dGtfY2xpZW50LT5jbF9zb2Z0cnRyeSkKLQkJCXRhc2stPnRrX2ZsYWdzIHw9IFJQQ19UQVNLX1NPRlQ7Ci0JfQotCiAJaWYgKHRhc2stPnRrX29wcy0+cnBjX2NhbGxfcHJlcGFyZSAhPSBOVUxMKQogCQl0YXNrLT50a19hY3Rpb24gPSBycGNfcHJlcGFyZV90YXNrOwogCi0JaWYgKHRhc2tfc2V0dXBfZGF0YS0+cnBjX21lc3NhZ2UgIT0gTlVMTCkgewotCQl0YXNrLT50a19tc2cucnBjX3Byb2MgPSB0YXNrX3NldHVwX2RhdGEtPnJwY19tZXNzYWdlLT5ycGNfcHJvYzsKLQkJdGFzay0+dGtfbXNnLnJwY19hcmdwID0gdGFza19zZXR1cF9kYXRhLT5ycGNfbWVzc2FnZS0+cnBjX2FyZ3A7Ci0JCXRhc2stPnRrX21zZy5ycGNfcmVzcCA9IHRhc2tfc2V0dXBfZGF0YS0+cnBjX21lc3NhZ2UtPnJwY19yZXNwOwotCQkvKiBCaW5kIHRoZSB1c2VyIGNyZWQgKi8KLQkJcnBjYXV0aF9iaW5kY3JlZCh0YXNrLCB0YXNrX3NldHVwX2RhdGEtPnJwY19tZXNzYWdlLT5ycGNfY3JlZCwgdGFza19zZXR1cF9kYXRhLT5mbGFncyk7Ci0JCWlmICh0YXNrLT50a19hY3Rpb24gPT0gTlVMTCkKLQkJCXJwY19jYWxsX3N0YXJ0KHRhc2spOwotCX0KLQogCS8qIHN0YXJ0aW5nIHRpbWVzdGFtcCAqLwogCXRhc2stPnRrX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7CiAKQEAgLTg5NiwxMSArODY1LDggQEAKIAlpZiAodGFzay0+dGtfcnFzdHApCiAJCXhwcnRfcmVsZWFzZSh0YXNrKTsKIAlpZiAodGFzay0+dGtfbXNnLnJwY19jcmVkKQotCQlycGNhdXRoX3VuYmluZGNyZWQodGFzayk7Ci0JaWYgKHRhc2stPnRrX2NsaWVudCkgewotCQlycGNfcmVsZWFzZV9jbGllbnQodGFzay0+dGtfY2xpZW50KTsKLQkJdGFzay0+dGtfY2xpZW50ID0gTlVMTDsKLQl9CisJCXB1dF9ycGNjcmVkKHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CisJcnBjX3Rhc2tfcmVsZWFzZV9jbGllbnQodGFzayk7CiAJaWYgKHRhc2stPnRrX3dvcmtxdWV1ZSAhPSBOVUxMKSB7CiAJCUlOSVRfV09SSygmdGFzay0+dS50a193b3JrLCBycGNfYXN5bmNfcmVsZWFzZSk7CiAJCXF1ZXVlX3dvcmsodGFzay0+dGtfd29ya3F1ZXVlLCAmdGFzay0+dS50a193b3JrKTsKQEAgLTkxMywxMyArODc5LDYgQEAKIHsKIAlkcHJpbnRrKCJSUEM6ICU1dSByZWxlYXNlIHRhc2tcbiIsIHRhc2stPnRrX3BpZCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJnRhc2stPnRrX3Rhc2spKSB7Ci0JCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKLQkJLyogUmVtb3ZlIGZyb20gY2xpZW50IHRhc2sgbGlzdCAqLwotCQlzcGluX2xvY2soJmNsbnQtPmNsX2xvY2spOwotCQlsaXN0X2RlbCgmdGFzay0+dGtfdGFzayk7Ci0JCXNwaW5fdW5sb2NrKCZjbG50LT5jbF9sb2NrKTsKLQl9CiAJQlVHX09OIChSUENfSVNfUVVFVUVEKHRhc2spKTsKIAogCS8qIFdha2UgdXAgYW55b25lIHdobyBpcyB3YWl0aW5nIGZvciB0YXNrIGNvbXBsZXRpb24gKi8KQEAgLTkyOCwzNSArODg3LDYgQEAKIAlycGNfcHV0X3Rhc2sodGFzayk7CiB9CiAKLS8qCi0gKiBLaWxsIGFsbCB0YXNrcyBmb3IgdGhlIGdpdmVuIGNsaWVudC4KLSAqIFhYWDoga2lsbCB0aGVpciBkZXNjZW5kYW50cyBhcyB3ZWxsPwotICovCi12b2lkIHJwY19raWxsYWxsX3Rhc2tzKHN0cnVjdCBycGNfY2xudCAqY2xudCkKLXsKLQlzdHJ1Y3QgcnBjX3Rhc2sJKnJvdnI7Ci0KLQotCWlmIChsaXN0X2VtcHR5KCZjbG50LT5jbF90YXNrcykpCi0JCXJldHVybjsKLQlkcHJpbnRrKCJSUEM6ICAgICAgIGtpbGxpbmcgYWxsIHRhc2tzIGZvciBjbGllbnQgJXBcbiIsIGNsbnQpOwotCS8qCi0JICogU3BpbiBsb2NrIGFsbF90YXNrcyB0byBwcmV2ZW50IGNoYW5nZXMuLi4KLQkgKi8KLQlzcGluX2xvY2soJmNsbnQtPmNsX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocm92ciwgJmNsbnQtPmNsX3Rhc2tzLCB0a190YXNrKSB7Ci0JCWlmICghIFJQQ19JU19BQ1RJVkFURUQocm92cikpCi0JCQljb250aW51ZTsKLQkJaWYgKCEocm92ci0+dGtfZmxhZ3MgJiBSUENfVEFTS19LSUxMRUQpKSB7Ci0JCQlyb3ZyLT50a19mbGFncyB8PSBSUENfVEFTS19LSUxMRUQ7Ci0JCQlycGNfZXhpdChyb3ZyLCAtRUlPKTsKLQkJCXJwY193YWtlX3VwX3Rhc2socm92cik7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmNsbnQtPmNsX2xvY2spOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocnBjX2tpbGxhbGxfdGFza3MpOwotCiBpbnQgcnBjaW9kX3VwKHZvaWQpCiB7CiAJcmV0dXJuIHRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSA/IDAgOiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jIGIvbmV0L3N1bnJwYy9zdW5ycGNfc3ltcy5jCmluZGV4IGY0MzgzNDcuLmMwZDA4NTAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3VucnBjX3N5bXMuYworKysgYi9uZXQvc3VucnBjL3N1bnJwY19zeW1zLmMKQEAgLTMzLDIxICszMywyNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCWVyciA9IHJwY19pbml0X21lbXBvb2woKTsKLQlpZiAoZXJyKSB7Ci0JCXVucmVnaXN0ZXJfcnBjX3BpcGVmcygpOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKGVycikKKwkJZ290byBvdXQyOworCWVyciA9IHJwY2F1dGhfaW5pdF9tb2R1bGUoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDM7CiAjaWZkZWYgUlBDX0RFQlVHCiAJcnBjX3JlZ2lzdGVyX3N5c2N0bCgpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlycGNfcHJvY19pbml0KCk7CiAjZW5kaWYKKwljYWNoZV9pbml0aWFsaXplKCk7CiAJY2FjaGVfcmVnaXN0ZXIoJmlwX21hcF9jYWNoZSk7CiAJY2FjaGVfcmVnaXN0ZXIoJnVuaXhfZ2lkX2NhY2hlKTsKIAlzdmNfaW5pdF94cHJ0X3NvY2soKTsJLyogc3ZjIHNvY2sgdHJhbnNwb3J0ICovCiAJaW5pdF9zb2NrZXRfeHBydCgpOwkvKiBjbG50IHNvY2sgdHJhbnNwb3J0ICovCi0JcnBjYXV0aF9pbml0X21vZHVsZSgpOworCXJldHVybiAwOworb3V0MzoKKwlycGNfZGVzdHJveV9tZW1wb29sKCk7CitvdXQyOgorCXVucmVnaXN0ZXJfcnBjX3BpcGVmcygpOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IGRjZDAxMzIuLjk3MGZiMDAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC0xMDMyLDYgKzEwMzIsOCBAQAogCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAJaWYgKHJlcS0+cnFfYnVmZmVyKQogCQl4cHJ0LT5vcHMtPmJ1Zl9mcmVlKHJlcS0+cnFfYnVmZmVyKTsKKwlpZiAocmVxLT5ycV9jcmVkICE9IE5VTEwpCisJCXB1dF9ycGNjcmVkKHJlcS0+cnFfY3JlZCk7CiAJdGFzay0+dGtfcnFzdHAgPSBOVUxMOwogCWlmIChyZXEtPnJxX3JlbGVhc2Vfc25kX2J1ZikKIAkJcmVxLT5ycV9yZWxlYXNlX3NuZF9idWYocmVxKTsKQEAgLTExMjksNiArMTEzMSw3IEBACiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+c2VuZGluZyk7CiAJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmeHBydC0+cmVzZW5kKTsKIAlycGNfZGVzdHJveV93YWl0X3F1ZXVlKCZ4cHJ0LT5iYWNrbG9nKTsKKwljYW5jZWxfd29ya19zeW5jKCZ4cHJ0LT50YXNrX2NsZWFudXApOwogCS8qCiAJICogVGVhciBkb3duIHRyYW5zcG9ydCBzdGF0ZSBhbmQgZnJlZSB0aGUgcnBjX3hwcnQKIAkgKi8KZGlmZiAtLWdpdCBhL3NhbXBsZXMvS2NvbmZpZyBiL3NhbXBsZXMvS2NvbmZpZwppbmRleCA4OTI0ZjcyLi45NTRhMWQ1IDEwMDY0NAotLS0gYS9zYW1wbGVzL0tjb25maWcKKysrIGIvc2FtcGxlcy9LY29uZmlnCkBAIC00NCw0ICs0NCwxNCBAQAogCWhlbHAKIAkgIFRoaXMgYnVpbGRzIGtlcm5lbCBoYXJkd2FyZSBicmVha3BvaW50IGV4YW1wbGUgbW9kdWxlcy4KIAorY29uZmlnIFNBTVBMRV9LRklGTworCXRyaXN0YXRlICJCdWlsZCBrZmlmbyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCisJZGVwZW5kcyBvbiBtCisJaGVscAorCSAgVGhpcyBjb25maWcgb3B0aW9uIHdpbGwgYWxsb3cgeW91IHRvIGJ1aWxkIGEgbnVtYmVyIG9mCisJICBkaWZmZXJlbnQga2ZpZm8gc2FtcGxlIG1vZHVsZXMgc2hvd2luZyBob3cgdG8gdXNlIHRoZQorCSAgZ2VuZXJpYyBrZmlmbyBBUEkuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgIk4iIGhlcmUuCisKIGVuZGlmICMgU0FNUExFUwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9NYWtlZmlsZSBiL3NhbXBsZXMvTWFrZWZpbGUKaW5kZXggMGYxNWU2ZC4uNzZiM2MzNCAxMDA2NDQKLS0tIGEvc2FtcGxlcy9NYWtlZmlsZQorKysgYi9zYW1wbGVzL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAogIyBNYWtlZmlsZSBmb3IgTGludXggc2FtcGxlcyBjb2RlCiAKIG9iai0kKENPTkZJR19TQU1QTEVTKQkrPSBrb2JqZWN0LyBrcHJvYmVzLyB0cmFjZXBvaW50cy8gdHJhY2VfZXZlbnRzLyBcCi0JCQkgICBod19icmVha3BvaW50LworCQkJICAgaHdfYnJlYWtwb2ludC8ga2ZpZm8vCmRpZmYgLS1naXQgYS9zYW1wbGVzL2tmaWZvL01ha2VmaWxlIGIvc2FtcGxlcy9rZmlmby9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2M5NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9rZmlmby9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU0FNUExFX0tGSUZPKSArPSBieXRlc3RyZWFtLWV4YW1wbGUubyBkbWEtZXhhbXBsZS5vIGludHR5cGUtZXhhbXBsZS5vIHJlY29yZC1leGFtcGxlLm8KZGlmZiAtLWdpdCBhL3NhbXBsZXMva2ZpZm8vYnl0ZXN0cmVhbS1leGFtcGxlLmMgYi9zYW1wbGVzL2tmaWZvL2J5dGVzdHJlYW0tZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MmVlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2tmaWZvL2J5dGVzdHJlYW0tZXhhbXBsZS5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogU2FtcGxlIGtmaWZvIGJ5dGUgc3RyZWFtIGltcGxlbWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZWZhbmkgU2VpYm9sZCA8c3RlZmFuaUBzZWlib2xkLm5ldD4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR1BMIHZlcnNpb24gMiBvbmx5LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisKKy8qCisgKiBUaGlzIG1vZHVsZSBzaG93cyBob3cgdG8gY3JlYXRlIGEgYnl0ZSBzdHJlYW0gZmlmby4KKyAqLworCisvKiBmaWZvIHNpemUgaW4gZWxlbWVudHMgKGJ5dGVzKSAqLworI2RlZmluZSBGSUZPX1NJWkUJMzIKKworLyogbmFtZSBvZiB0aGUgcHJvYyBlbnRyeSAqLworI2RlZmluZQlQUk9DX0ZJRk8JImJ5dGVzdHJlYW0tZmlmbyIKKworLyogbG9jayBmb3IgcHJvY2ZzIHJlYWQgYWNjZXNzICovCitzdGF0aWMgREVGSU5FX01VVEVYKHJlYWRfbG9jayk7CisKKy8qIGxvY2sgZm9yIHByb2NmcyB3cml0ZSBhY2Nlc3MgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgod3JpdGVfbG9jayk7CisKKy8qCisgKiBkZWZpbmUgRFlOQU1JQyBpbiB0aGlzIGV4YW1wbGUgZm9yIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGZpZm8uCisgKgorICogT3RoZXJ3aXNlIHRoZSBmaWZvIHN0b3JhZ2Ugd2lsbCBiZSBhIHBhcnQgb2YgdGhlIGZpZm8gc3RydWN0dXJlLgorICovCisjaWYgMAorI2RlZmluZSBEWU5BTUlDCisjZW5kaWYKKworI2lmZGVmIERZTkFNSUMKK3N0YXRpYyBzdHJ1Y3Qga2ZpZm8gdGVzdDsKKyNlbHNlCitzdGF0aWMgREVDTEFSRV9LRklGTyh0ZXN0LCB1bnNpZ25lZCBjaGFyLCBGSUZPX1NJWkUpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3RmdW5jKHZvaWQpCit7CisJdW5zaWduZWQgY2hhcglidWZbNl07CisJdW5zaWduZWQgY2hhcglpOworCXVuc2lnbmVkIGludAlyZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJieXRlIHN0cmVhbSBmaWZvIHRlc3Qgc3RhcnRcbiIpOworCisJLyogcHV0IHN0cmluZyBpbnRvIHRoZSBmaWZvICovCisJa2ZpZm9faW4oJnRlc3QsICJoZWxsbyIsIDUpOworCisJLyogcHV0IHZhbHVlcyBpbnRvIHRoZSBmaWZvICovCisJZm9yIChpID0gMDsgaSAhPSAxMDsgaSsrKQorCQlrZmlmb19wdXQoJnRlc3QsICZpKTsKKworCS8qIHNob3cgdGhlIG51bWJlciBvZiB1c2VkIGVsZW1lbnRzICovCisJcHJpbnRrKEtFUk5fSU5GTyAiZmlmbyBsZW46ICV1XG4iLCBrZmlmb19sZW4oJnRlc3QpKTsKKworCS8qIGdldCBtYXggb2YgNSBieXRlcyBmcm9tIHRoZSBmaWZvICovCisJaSA9IGtmaWZvX291dCgmdGVzdCwgYnVmLCA1KTsKKwlwcmludGsoS0VSTl9JTkZPICJidWY6ICUuKnNcbiIsIGksIGJ1Zik7CisKKwkvKiBnZXQgbWF4IG9mIDIgZWxlbWVudHMgZnJvbSB0aGUgZmlmbyAqLworCXJldCA9IGtmaWZvX291dCgmdGVzdCwgYnVmLCAyKTsKKwlwcmludGsoS0VSTl9JTkZPICJyZXQ6ICVkXG4iLCByZXQpOworCS8qIGFuZCBwdXQgaXQgYmFjayB0byB0aGUgZW5kIG9mIHRoZSBmaWZvICovCisJcmV0ID0ga2ZpZm9faW4oJnRlc3QsIGJ1ZiwgcmV0KTsKKwlwcmludGsoS0VSTl9JTkZPICJyZXQ6ICVkXG4iLCByZXQpOworCisJLyogcHV0IHZhbHVlcyBpbnRvIHRoZSBmaWZvIHVudGlsIGlzIGZ1bGwgKi8KKwlmb3IgKGkgPSAyMDsga2ZpZm9fcHV0KCZ0ZXN0LCAmaSk7IGkrKykKKwkJOworCisJcHJpbnRrKEtFUk5fSU5GTyAicXVldWUgbGVuOiAldVxuIiwga2ZpZm9fbGVuKCZ0ZXN0KSk7CisKKwkvKiBwcmludCBvdXQgYWxsIHZhbHVlcyBpbiB0aGUgZmlmbyAqLworCXdoaWxlIChrZmlmb19nZXQoJnRlc3QsICZpKSkKKwkJcHJpbnRrKCIlZCAiLCBpKTsKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgZmlmb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGNvcGllZDsKKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJndyaXRlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJcmV0ID0ga2ZpZm9fZnJvbV91c2VyKCZ0ZXN0LCBidWYsIGNvdW50LCAmY29waWVkKTsKKworCW11dGV4X3VubG9jaygmd3JpdGVfbG9jayk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkOworfQorCitzdGF0aWMgc3NpemVfdCBmaWZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjb3BpZWQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyZWFkX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJcmV0ID0ga2ZpZm9fdG9fdXNlcigmdGVzdCwgYnVmLCBjb3VudCwgJmNvcGllZCk7CisKKwltdXRleF91bmxvY2soJnJlYWRfbG9jayk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmaWZvX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IGZpZm9fcmVhZCwKKwkud3JpdGUJCT0gZmlmb193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGV4YW1wbGVfaW5pdCh2b2lkKQoreworI2lmZGVmIERZTkFNSUMKKwlpbnQgcmV0OworCisJcmV0ID0ga2ZpZm9fYWxsb2MoJnRlc3QsIEZJRk9fU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImVycm9yIGtmaWZvX2FsbG9jXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisjZWxzZQorCUlOSVRfS0ZJRk8odGVzdCk7CisjZW5kaWYKKwl0ZXN0ZnVuYygpOworCisJaWYgKHByb2NfY3JlYXRlKFBST0NfRklGTywgMCwgTlVMTCwgJmZpZm9fZm9wcykgPT0gTlVMTCkgeworI2lmZGVmIERZTkFNSUMKKwkJa2ZpZm9fZnJlZSgmdGVzdCk7CisjZW5kaWYKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhhbXBsZV9leGl0KHZvaWQpCit7CisJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUZPLCBOVUxMKTsKKyNpZmRlZiBEWU5BTUlDCisJa2ZpZm9fZnJlZSgmdGVzdCk7CisjZW5kaWYKK30KKworbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KTsKK21vZHVsZV9leGl0KGV4YW1wbGVfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+Iik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2tmaWZvL2RtYS1leGFtcGxlLmMgYi9zYW1wbGVzL2tmaWZvL2RtYS1leGFtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0ODJjMgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMva2ZpZm8vZG1hLWV4YW1wbGUuYwpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIFNhbXBsZSBmaWZvIGRtYSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb25seS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorCisvKgorICogVGhpcyBtb2R1bGUgc2hvd3MgaG93IHRvIGhhbmRsZSBmaWZvIGRtYSBvcGVyYXRpb25zLgorICovCisKKy8qIGZpZm8gc2l6ZSBpbiBlbGVtZW50cyAoYnl0ZXMpICovCisjZGVmaW5lIEZJRk9fU0laRQkzMgorCitzdGF0aWMgc3RydWN0IGtmaWZvIGZpZm87CisKK3N0YXRpYyBpbnQgX19pbml0IGV4YW1wbGVfaW5pdCh2b2lkKQoreworCWludAkJCWk7CisJdW5zaWduZWQgaW50CQlyZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0CXNnWzEwXTsKKworCXByaW50ayhLRVJOX0lORk8gIkRNQSBmaWZvIHRlc3Qgc3RhcnRcbiIpOworCisJaWYgKGtmaWZvX2FsbG9jKCZmaWZvLCBGSUZPX1NJWkUsIEdGUF9LRVJORUwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3Iga2ZpZm9fYWxsb2NcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJxdWV1ZSBzaXplOiAldVxuIiwga2ZpZm9fc2l6ZSgmZmlmbykpOworCisJa2ZpZm9faW4oJmZpZm8sICJ0ZXN0IiwgNCk7CisKKwlmb3IgKGkgPSAwOyBpICE9IDk7IGkrKykKKwkJa2ZpZm9fcHV0KCZmaWZvLCAmaSk7CisKKwkvKiBraWNrIGF3YXkgZmlyc3QgYnl0ZSAqLworCXJldCA9IGtmaWZvX2dldCgmZmlmbywgJmkpOworCisJcHJpbnRrKEtFUk5fSU5GTyAicXVldWUgbGVuOiAldVxuIiwga2ZpZm9fbGVuKCZmaWZvKSk7CisKKwlyZXQgPSBrZmlmb19kbWFfaW5fcHJlcGFyZSgmZmlmbywgc2csIEFSUkFZX1NJWkUoc2cpLCBGSUZPX1NJWkUpOworCXByaW50ayhLRVJOX0lORk8gIkRNQSBzZ2wgZW50cmllczogJWRcbiIsIHJldCk7CisKKwkvKiBpZiAwIHdhcyByZXR1cm5lZCwgZmlmbyBpcyBmdWxsIGFuZCBubyBzZ2wgd2FzIGNyZWF0ZWQgKi8KKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gInNjYXR0ZXJsaXN0IGZvciByZWNlaXZlOlxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNnKTsgaSsrKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkic2dbJWRdIC0+ICIKKwkJCSJwYWdlX2xpbmsgMHglLjhseCBvZmZzZXQgMHglLjh4IGxlbmd0aCAweCUuOHhcbiIsCisJCQkJaSwgc2dbaV0ucGFnZV9saW5rLCBzZ1tpXS5vZmZzZXQsIHNnW2ldLmxlbmd0aCk7CisKKwkJCWlmIChzZ19pc19sYXN0KCZzZ1tpXSkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBidXQgaGVyZSB5b3VyIGNvZGUgdG8gc2V0dXAgYW5kIGV4ZWN0dXRlIHRoZSBkbWEgb3BlcmF0aW9uICovCisJCS8qIC4uLiAqLworCisJCS8qIGV4YW1wbGU6IHplcm8gYnl0ZXMgcmVjZWl2ZWQgKi8KKwkJcmV0ID0gMDsKKworCQkvKiBmaW5pc2ggdGhlIGRtYSBvcGVyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmVjZWl2ZWQgZGF0YSAqLworCQlrZmlmb19kbWFfaW5fZmluaXNoKCZmaWZvLCByZXQpOworCX0KKworCXJldCA9IGtmaWZvX2RtYV9vdXRfcHJlcGFyZSgmZmlmbywgc2csIEFSUkFZX1NJWkUoc2cpLCA4KTsKKwlwcmludGsoS0VSTl9JTkZPICJETUEgc2dsIGVudHJpZXM6ICVkXG4iLCByZXQpOworCisJLyogaWYgMCB3YXMgcmV0dXJuZWQsIG5vIGRhdGEgd2FzIGF2YWlsYWJsZSBhbmQgbm8gc2dsIHdhcyBjcmVhdGVkICovCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPICJzY2F0dGVybGlzdCBmb3IgdHJhbnNtaXQ6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2cpOyBpKyspIHsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSJzZ1slZF0gLT4gIgorCQkJInBhZ2VfbGluayAweCUuOGx4IG9mZnNldCAweCUuOHggbGVuZ3RoIDB4JS44eFxuIiwKKwkJCQlpLCBzZ1tpXS5wYWdlX2xpbmssIHNnW2ldLm9mZnNldCwgc2dbaV0ubGVuZ3RoKTsKKworCQkJaWYgKHNnX2lzX2xhc3QoJnNnW2ldKSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIGJ1dCBoZXJlIHlvdXIgY29kZSB0byBzZXR1cCBhbmQgZXhlY3R1dGUgdGhlIGRtYSBvcGVyYXRpb24gKi8KKwkJLyogLi4uICovCisKKwkJLyogZXhhbXBsZTogNSBieXRlcyB0cmFuc21pdHRlZCAqLworCQlyZXQgPSA1OworCisJCS8qIGZpbmlzaCB0aGUgZG1hIG9wZXJhdGlvbiBhbmQgdXBkYXRlIHRoZSB0cmFuc21pdHRlZCBkYXRhICovCisJCWtmaWZvX2RtYV9vdXRfZmluaXNoKCZmaWZvLCByZXQpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gInF1ZXVlIGxlbjogJXVcbiIsIGtmaWZvX2xlbigmZmlmbykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGFtcGxlX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBEWU5BTUlDCisJa2ZpZm9fZnJlZSgmdGVzdCk7CisjZW5kaWYKK30KKworbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KTsKK21vZHVsZV9leGl0KGV4YW1wbGVfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+Iik7CmRpZmYgLS1naXQgYS9zYW1wbGVzL2tmaWZvL2ludHR5cGUtZXhhbXBsZS5jIGIvc2FtcGxlcy9rZmlmby9pbnR0eXBlLWV4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmM1YjdkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9rZmlmby9pbnR0eXBlLWV4YW1wbGUuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIFNhbXBsZSBrZmlmbyBpbnQgdHlwZSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb25seS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorCisvKgorICogVGhpcyBtb2R1bGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIGludCB0eXBlIGZpZm8uCisgKi8KKworLyogZmlmbyBzaXplIGluIGVsZW1lbnRzIChpbnRzKSAqLworI2RlZmluZSBGSUZPX1NJWkUJMzIKKworLyogbmFtZSBvZiB0aGUgcHJvYyBlbnRyeSAqLworI2RlZmluZQlQUk9DX0ZJRk8JImludC1maWZvIgorCisvKiBsb2NrIGZvciBwcm9jZnMgcmVhZCBhY2Nlc3MgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgocmVhZF9sb2NrKTsKKworLyogbG9jayBmb3IgcHJvY2ZzIHdyaXRlIGFjY2VzcyAqLworc3RhdGljIERFRklORV9NVVRFWCh3cml0ZV9sb2NrKTsKKworLyoKKyAqIGRlZmluZSBEWU5BTUlDIGluIHRoaXMgZXhhbXBsZSBmb3IgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZmlmby4KKyAqCisgKiBPdGhlcndpc2UgdGhlIGZpZm8gc3RvcmFnZSB3aWxsIGJlIGEgcGFydCBvZiB0aGUgZmlmbyBzdHJ1Y3R1cmUuCisgKi8KKyNpZiAwCisjZGVmaW5lIERZTkFNSUMKKyNlbmRpZgorCisjaWZkZWYgRFlOQU1JQworc3RhdGljIERFQ0xBUkVfS0ZJRk9fUFRSKHRlc3QsIGludCk7CisjZWxzZQorc3RhdGljIERFRklORV9LRklGTyh0ZXN0LCBpbnQsIEZJRk9fU0laRSk7CisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgdGVzdGZ1bmModm9pZCkKK3sKKwlpbnQJCWJ1Zls2XTsKKwlpbnQJCWk7CisJdW5zaWduZWQgaW50CXJldDsKKworCXByaW50ayhLRVJOX0lORk8gImludCBmaWZvIHRlc3Qgc3RhcnRcbiIpOworCisJLyogcHV0IHZhbHVlcyBpbnRvIHRoZSBmaWZvICovCisJZm9yIChpID0gMDsgaSAhPSAxMDsgaSsrKQorCQlrZmlmb19wdXQoJnRlc3QsICZpKTsKKworCS8qIHNob3cgdGhlIG51bWJlciBvZiB1c2VkIGVsZW1lbnRzICovCisJcHJpbnRrKEtFUk5fSU5GTyAiZmlmbyBsZW46ICV1XG4iLCBrZmlmb19sZW4oJnRlc3QpKTsKKworCS8qIGdldCBtYXggb2YgMiBlbGVtZW50cyBmcm9tIHRoZSBmaWZvICovCisJcmV0ID0ga2ZpZm9fb3V0KCZ0ZXN0LCBidWYsIDIpOworCXByaW50ayhLRVJOX0lORk8gInJldDogJWRcbiIsIHJldCk7CisJLyogYW5kIHB1dCBpdCBiYWNrIHRvIHRoZSBlbmQgb2YgdGhlIGZpZm8gKi8KKwlyZXQgPSBrZmlmb19pbigmdGVzdCwgYnVmLCByZXQpOworCXByaW50ayhLRVJOX0lORk8gInJldDogJWRcbiIsIHJldCk7CisKKwlmb3IgKGkgPSAyMDsgaSAhPSAzMDsgaSsrKQorCQlrZmlmb19wdXQoJnRlc3QsICZpKTsKKworCXByaW50ayhLRVJOX0lORk8gInF1ZXVlIGxlbjogJXVcbiIsIGtmaWZvX2xlbigmdGVzdCkpOworCisJLyogc2hvdyB0aGUgZmlyc3QgdmFsdWUgd2l0aG91dCByZW1vdmluZyBmcm9tIHRoZSBmaWZvICovCisJaWYgKGtmaWZvX3BlZWsoJnRlc3QsICZpKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJWRcbiIsIGkpOworCisJLyogcHJpbnQgb3V0IGFsbCB2YWx1ZXMgaW4gdGhlIGZpZm8gKi8KKwl3aGlsZSAoa2ZpZm9fZ2V0KCZ0ZXN0LCAmaSkpCisJCXByaW50aygiJWQgIiwgaSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpZm9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjb3BpZWQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3cml0ZV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldCA9IGtmaWZvX2Zyb21fdXNlcigmdGVzdCwgYnVmLCBjb3VudCwgJmNvcGllZCk7CisKKwltdXRleF91bmxvY2soJndyaXRlX2xvY2spOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKK30KKworc3RhdGljIHNzaXplX3QgZmlmb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgY29waWVkOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVhZF9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldCA9IGtmaWZvX3RvX3VzZXIoJnRlc3QsIGJ1ZiwgY291bnQsICZjb3BpZWQpOworCisJbXV0ZXhfdW5sb2NrKCZyZWFkX2xvY2spOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlmb19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBmaWZvX3JlYWQsCisJLndyaXRlCQk9IGZpZm9fd3JpdGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBEWU5BTUlDCisJaW50IHJldDsKKworCXJldCA9IGtmaWZvX2FsbG9jKCZ0ZXN0LCBGSUZPX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBrZmlmb19hbGxvY1xuIik7CisJCXJldHVybiByZXQ7CisJfQorI2VuZGlmCisJdGVzdGZ1bmMoKTsKKworCWlmIChwcm9jX2NyZWF0ZShQUk9DX0ZJRk8sIDAsIE5VTEwsICZmaWZvX2ZvcHMpID09IE5VTEwpIHsKKyNpZmRlZiBEWU5BTUlDCisJCWtmaWZvX2ZyZWUoJnRlc3QpOworI2VuZGlmCisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4YW1wbGVfZXhpdCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklGTywgTlVMTCk7CisjaWZkZWYgRFlOQU1JQworCWtmaWZvX2ZyZWUoJnRlc3QpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KGV4YW1wbGVfaW5pdCk7Cittb2R1bGVfZXhpdChleGFtcGxlX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rZmlmby9yZWNvcmQtZXhhbXBsZS5jIGIvc2FtcGxlcy9rZmlmby9yZWNvcmQtZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYzZlMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2tmaWZvL3JlY29yZC1leGFtcGxlLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBTYW1wbGUgZHluYW1pYyBzaXplZCByZWNvcmQgZmlmbyBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVmYW5pIFNlaWJvbGQgPHN0ZWZhbmlAc2VpYm9sZC5uZXQ+CisgKgorICogUmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb25seS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgorCisvKgorICogVGhpcyBtb2R1bGUgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIHZhcmlhYmxlIHNpemVkIHJlY29yZCBmaWZvLgorICovCisKKy8qIGZpZm8gc2l6ZSBpbiBlbGVtZW50cyAoYnl0ZXMpICovCisjZGVmaW5lIEZJRk9fU0laRQkxMjgKKworLyogbmFtZSBvZiB0aGUgcHJvYyBlbnRyeSAqLworI2RlZmluZQlQUk9DX0ZJRk8JInJlY29yZC1maWZvIgorCisvKiBsb2NrIGZvciBwcm9jZnMgcmVhZCBhY2Nlc3MgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgocmVhZF9sb2NrKTsKKworLyogbG9jayBmb3IgcHJvY2ZzIHdyaXRlIGFjY2VzcyAqLworc3RhdGljIERFRklORV9NVVRFWCh3cml0ZV9sb2NrKTsKKworLyoKKyAqIGRlZmluZSBEWU5BTUlDIGluIHRoaXMgZXhhbXBsZSBmb3IgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZmlmby4KKyAqCisgKiBPdGhlcndpc2UgdGhlIGZpZm8gc3RvcmFnZSB3aWxsIGJlIGEgcGFydCBvZiB0aGUgZmlmbyBzdHJ1Y3R1cmUuCisgKi8KKyNpZiAwCisjZGVmaW5lIERZTkFNSUMKKyNlbmRpZgorCisvKgorICogc3RydWN0IGtmaWZvX3JlY19wdHJfMSBhbmQgIFNUUlVDVF9LRklGT19SRUNfMSBjYW4gaGFuZGxlIHJlY29yZHMgb2YgYQorICogbGVuZ3RoIGJldHdlZW4gMCBhbmQgMjU1IGJ5dGVzLgorICoKKyAqIHN0cnVjdCBrZmlmb19yZWNfcHRyXzIgYW5kICBTVFJVQ1RfS0ZJRk9fUkVDXzIgY2FuIGhhbmRsZSByZWNvcmRzIG9mIGEKKyAqIGxlbmd0aCBiZXR3ZWVuIDAgYW5kIDY1NTM1IGJ5dGVzLgorICovCisKKyNpZmRlZiBEWU5BTUlDCitzdHJ1Y3Qga2ZpZm9fcmVjX3B0cl8xIHRlc3Q7CisKKyNlbHNlCit0eXBlZGVmIFNUUlVDVF9LRklGT19SRUNfMShGSUZPX1NJWkUpIG15dGVzdDsKKworc3RhdGljIG15dGVzdCB0ZXN0OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3RmdW5jKHZvaWQpCit7CisJY2hhcgkJYnVmWzEwMF07CisJdW5zaWduZWQgaW50CWk7CisJdW5zaWduZWQgaW50CXJldDsKKwlzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIGJ1Zls2XTsgfSBoZWxsbyA9IHsgImhlbGxvIiB9OworCisJcHJpbnRrKEtFUk5fSU5GTyAicmVjb3JkIGZpZm8gdGVzdCBzdGFydFxuIik7CisKKwlrZmlmb19pbigmdGVzdCwgJmhlbGxvLCBzaXplb2YoaGVsbG8pKTsKKworCS8qIHNob3cgdGhlIHNpemUgb2YgdGhlIG5leHQgcmVjb3JkIGluIHRoZSBmaWZvICovCisJcHJpbnRrKEtFUk5fSU5GTyAiZmlmbyBwZWVrIGxlbjogJXVcbiIsIGtmaWZvX3BlZWtfbGVuKCZ0ZXN0KSk7CisKKwkvKiBwdXQgaW4gdmFyaWFibGUgbGVuZ3RoIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZW1zZXQoYnVmLCAnYScgKyBpLCBpICsgMSk7CisJCWtmaWZvX2luKCZ0ZXN0LCBidWYsIGkgKyAxKTsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJmaWZvIGxlbjogJXVcbiIsIGtmaWZvX2xlbigmdGVzdCkpOworCisJLyogc2hvdyB0aGUgZmlyc3QgcmVjb3JkIHdpdGhvdXQgcmVtb3ZpbmcgZnJvbSB0aGUgZmlmbyAqLworCXJldCA9IGtmaWZvX291dF9wZWVrKCZ0ZXN0LCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9JTkZPICIlLipzXG4iLCByZXQsIGJ1Zik7CisKKwkvKiBwcmludCBvdXQgYWxsIHJlY29yZHMgaW4gdGhlIGZpZm8gKi8KKwl3aGlsZSAoIWtmaWZvX2lzX2VtcHR5KCZ0ZXN0KSkgeworCQlyZXQgPSBrZmlmb19vdXQoJnRlc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlwcmludGsoS0VSTl9JTkZPICIlLipzXG4iLCByZXQsIGJ1Zik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpZm9fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjb3BpZWQ7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3cml0ZV9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldCA9IGtmaWZvX2Zyb21fdXNlcigmdGVzdCwgYnVmLCBjb3VudCwgJmNvcGllZCk7CisKKwltdXRleF91bmxvY2soJndyaXRlX2xvY2spOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKK30KKworc3RhdGljIHNzaXplX3QgZmlmb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgY29waWVkOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVhZF9sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXJldCA9IGtmaWZvX3RvX3VzZXIoJnRlc3QsIGJ1ZiwgY291bnQsICZjb3BpZWQpOworCisJbXV0ZXhfdW5sb2NrKCZyZWFkX2xvY2spOworCisJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmlmb19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBmaWZvX3JlYWQsCisJLndyaXRlCQk9IGZpZm9fd3JpdGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKK3sKKyNpZmRlZiBEWU5BTUlDCisJaW50IHJldDsKKworCXJldCA9IGtmaWZvX2FsbG9jKCZ0ZXN0LCBGSUZPX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBrZmlmb19hbGxvY1xuIik7CisJCXJldHVybiByZXQ7CisJfQorI2Vsc2UKKwlJTklUX0tGSUZPKHRlc3QpOworI2VuZGlmCisJdGVzdGZ1bmMoKTsKKworCWlmIChwcm9jX2NyZWF0ZShQUk9DX0ZJRk8sIDAsIE5VTEwsICZmaWZvX2ZvcHMpID09IE5VTEwpIHsKKyNpZmRlZiBEWU5BTUlDCisJCWtmaWZvX2ZyZWUoJnRlc3QpOworI2VuZGlmCisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4YW1wbGVfZXhpdCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklGTywgTlVMTCk7CisjaWZkZWYgRFlOQU1JQworCWtmaWZvX2ZyZWUoJnRlc3QpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KGV4YW1wbGVfaW5pdCk7Cittb2R1bGVfZXhpdChleGFtcGxlX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU3RlZmFuaSBTZWlib2xkIDxzdGVmYW5pQHNlaWJvbGQubmV0PiIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IGJkODhmMTEuLjIwMzlhY2QgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTE5NSw3ICsxOTUsNyBAQAogb3VyICRsb2dGdW5jdGlvbnMgPSBxcnsoP3g6CiAJcHJpbnRrfAogCXByXyhkZWJ1Z3xkYmd8dmRiZ3xkZXZlbHxpbmZvfHdhcm5pbmd8ZXJyfG5vdGljZXxhbGVydHxjcml0fGVtZXJnfGNvbnQpfAotCWRldl8ocHJpbnRrfGRiZ3x2ZGJnfGluZm98d2FybnxlcnJ8bm90aWNlfGFsZXJ0fGNyaXR8ZW1lcmd8V0FSTil8CisJKGRldnxuZXRkZXZ8bmV0aWYpXyhwcmludGt8ZGJnfHZkYmd8aW5mb3x3YXJufGVycnxub3RpY2V8YWxlcnR8Y3JpdHxlbWVyZ3xXQVJOKXwKIAlXQVJOfAogCXBhbmljCiApfTsKQEAgLTIyNCw2ICsyMjQsMTIgQEAKIAlxcntmYXN0Y2FsbH0sCiApOwogCitvdXIgJGFsbG93ZWRfYXNtX2luY2x1ZGVzID0gcXJ7KD94OgorCWlycXwKKwltZW1vcnkKKyl9OworIyBtZW1vcnkuaDogQVJNIGhhcyBhIGN1c3RvbSBvbmUKKwogc3ViIGJ1aWxkX3R5cGVzIHsKIAlteSAkbW9kcyA9ICIoP3g6ICBcbiIgLiBqb2luKCJ8XG4gICIsIEBtb2RpZmllckxpc3QpIC4gIlxuKSI7CiAJbXkgJGFsbCA9ICIoP3g6ICBcbiIgLiBqb2luKCJ8XG4gICIsIEB0eXBlTGlzdCkgLiAiXG4pIjsKQEAgLTU1Miw2ICs1NTgsOSBAQAogCQkJJHR5cGUgPSAoJGxldmVsICE9IDApPyAneycgOiAnJzsKIAogCQkJaWYgKCRsZXZlbCA9PSAwKSB7CisJCQkJaWYgKHN1YnN0cigkYmxrLCAkb2ZmICsgMSwgMSkgZXEgJzsnKSB7CisJCQkJCSRvZmYrKzsKKwkJCQl9CiAJCQkJbGFzdDsKIAkJCX0KIAkJfQpAQCAtMTQwMyw3ICsxNDEyLDggQEAKICM4MCBjb2x1bW4gbGltaXQKIAkJaWYgKCRsaW5lID1+IC9eXCsvICYmICRwcmV2cmF3bGluZSAhfiAvXC9cKlwqLyAmJgogCQkgICAgJHJhd2xpbmUgIX4gL14uXHMqXCpccypcQCRJZGVudFxzLyAmJgotCQkgICAgJGxpbmUgIX4gL15cK1xzKiRsb2dGdW5jdGlvbnNccypcKFxzKig/OktFUk5fXFMrXHMqKT8iW1hcdF0qIlxzKig/Oix8XClccyo7KVxzKiQvICYmCisJCSAgICAhKCRsaW5lID1+IC9eXCtccyokbG9nRnVuY3Rpb25zXHMqXChccyooPzooS0VSTl9cUytccyp8W14iXSopKT8iW1hcdF0qIlxzKig/Oix8XClccyo7KVxzKiQvIHx8CisJCSAgICAkbGluZSA9fiAvXlwrXHMqIlteIl0qIlxzKig/OlxzKnwsfFwpXHMqOylccyokLykgJiYKIAkJICAgICRsZW5ndGggPiA4MCkKIAkJewogCQkJV0FSTigibGluZSBvdmVyIDgwIGNoYXJhY3RlcnNcbiIgLiAkaGVyZWN1cnIpOwpAQCAtMTQ0OCw2ICsxNDU4LDEzIEBACiAJCQlXQVJOKCJwbGVhc2UsIG5vIHNwYWNlIGJlZm9yZSB0YWJzXG4iIC4gJGhlcmV2ZXQpOwogCQl9CiAKKyMgY2hlY2sgZm9yIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkJaWYgKCRyYXdsaW5lID1+IC9eXCsgLyAmJiAkcmF3bGluZSAhfiAvXCsgK1wqLykgIHsKKwkJCW15ICRoZXJldmV0ID0gIiRoZXJlXG4iIC4gY2F0X3ZldCgkcmF3bGluZSkgLiAiXG4iOworCQkJV0FSTigicGxlYXNlLCBubyBzcGFjZSBmb3Igc3RhcnRpbmcgYSBsaW5lLCBcCisJCQkJZXhjbHVkaW5nIGNvbW1lbnRzXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKICMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgQyBzb3VyY2UgZmlsZSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCiAJCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjKSQvKTsKIApAQCAtMTc3OCw5ICsxNzk1LDkgQEAKIAkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKLSMgY2hlY2sgZm9yIGV4dGVybmFsIGluaXRpYWxpc2Vycy4KKyMgY2hlY2sgZm9yIGdsb2JhbCBpbml0aWFsaXNlcnMuCiAJCWlmICgkbGluZSA9fiAvXi4kVHlwZVxzKiRJZGVudFxzKig/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKLQkJCUVSUk9SKCJkbyBub3QgaW5pdGlhbGlzZSBleHRlcm5hbHMgdG8gMCBvciBOVUxMXG4iIC4KKwkJCUVSUk9SKCJkbyBub3QgaW5pdGlhbGlzZSBnbG9iYWxzIHRvIDAgb3IgTlVMTFxuIiAuCiAJCQkJJGhlcmVjdXJyKTsKIAkJfQogIyBjaGVjayBmb3Igc3RhdGljIGluaXRpYWxpc2Vycy4KQEAgLTIzMDgsNyArMjMyNSw3IEBACiAJCQlteSAkY2hlY2tmaWxlID0gImluY2x1ZGUvbGludXgvJGZpbGUiOwogCQkJaWYgKC1mICIkcm9vdC8kY2hlY2tmaWxlIiAmJgogCQkJICAgICRyZWFsZmlsZSBuZSAkY2hlY2tmaWxlICYmCi0JCQkgICAgJDEgbmUgJ2lycScpCisJCQkgICAgJDEgIX4gLyRhbGxvd2VkX2FzbV9pbmNsdWRlcy8pCiAJCQl7CiAJCQkJaWYgKCRyZWFsZmlsZSA9fiBte15hcmNoL30pIHsKIAkJCQkJQ0hLKCJDb25zaWRlciB1c2luZyAjaW5jbHVkZSA8bGludXgvJGZpbGU+IGluc3RlYWQgb2YgPGFzbS8kZmlsZT5cbiIgLiAkaGVyZWN1cnIpOwpAQCAtMjU3MCw2ICsyNTg3LDIxIEBACiAJCQl9CiAJCX0KIAorIyBwcmVmZXIgdXNsZWVwX3JhbmdlIG92ZXIgdWRlbGF5CisJCWlmICgkbGluZSA9fiAvXGJ1ZGVsYXlccypcKFxzKihcdyspXHMqXCkvKSB7CisJCQkjIGlnbm9yZSB1ZGVsYXkncyA8IDEwLCBob3dldmVyCisJCQlpZiAoISAoKCQxID1+IC8oXGQrKS8pICYmICgkMSA8IDEwKSkgKSB7CisJCQkJQ0hLKCJ1c2xlZXBfcmFuZ2UgaXMgcHJlZmVycmVkIG92ZXIgdWRlbGF5OyBzZWUgRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dFxuIiAuICRsaW5lKTsKKwkJCX0KKwkJfQorCisjIHdhcm4gYWJvdXQgdW5leHBlY3RlZGx5IGxvbmcgbXNsZWVwJ3MKKwkJaWYgKCRsaW5lID1+IC9cYm1zbGVlcFxzKlwoKFxkKylcKTsvKSB7CisJCQlpZiAoJDEgPCAyMCkgeworCQkJCVdBUk4oIm1zbGVlcCA8IDIwbXMgY2FuIHNsZWVwIGZvciB1cCB0byAyMG1zOyBzZWUgRG9jdW1lbnRhdGlvbi90aW1lcnMvdGltZXJzLWhvd3RvLnR4dFxuIiAuICRsaW5lKTsKKwkJCX0KKwkJfQorCiAjIHdhcm4gYWJvdXQgI2lmZGVmcyBpbiBDIGZpbGVzCiAjCQlpZiAoJGxpbmUgPX4gL14uXHMqXCNccyppZih8bilkZWYvICYmICgkcmVhbGZpbGUgPX4gL1wuYyQvKSkgewogIwkJCXByaW50ICIjaWZkZWYgaW4gQyBmaWxlcyBzaG91bGQgYmUgYXZvaWRlZFxuIjsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2tzeXNjYWxscy5zaCBiL3NjcmlwdHMvY2hlY2tzeXNjYWxscy5zaAppbmRleCA2NmFkMzc1Li42YmI0MmU3IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrc3lzY2FsbHMuc2gKKysrIGIvc2NyaXB0cy9jaGVja3N5c2NhbGxzLnNoCkBAIC0xODMsNyArMTgzLDYgQEAKICNkZWZpbmUgX19JR05PUkVfdXN0YXQJCS8qIHN0YXRmcyAqLwogI2RlZmluZSBfX0lHTk9SRV91dGltZQkJLyogdXRpbWVzICovCiAjZGVmaW5lIF9fSUdOT1JFX3Zmb3JrCQkvKiBjbG9uZSAqLwotI2RlZmluZSBfX0lHTk9SRV93YWl0NAkJLyogd2FpdGlkICovCiAKIC8qIHN5bmNfZmlsZV9yYW5nZSBoYWQgYSBzdHVwaWQgQUJJLiBBbGxvdyBzeW5jX2ZpbGVfcmFuZ2UyIGluc3RlYWQgKi8KICNpZmRlZiBfX05SX3N5bmNfZmlsZV9yYW5nZTIKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDAxMDYwMGUuLjI3NGYyNzEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtNTk5LDEyICs1OTksMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSBzYXZlZGVmY29uZmlnOgogCQlicmVhazsKLQljYXNlIG9sZGNvbmZpZzoKIAljYXNlIG9sZGFza2NvbmZpZzoKIAkJcm9vdEVudHJ5ID0gJnJvb3RtZW51OwogCQljb25mKCZyb290bWVudSk7CiAJCWlucHV0X21vZGUgPSBzaWxlbnRvbGRjb25maWc7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugb2xkY29uZmlnOgogCWNhc2UgbGlzdG5ld2NvbmZpZzoKIAljYXNlIG9sZG5vY29uZmlnOgogCWNhc2Ugc2lsZW50b2xkY29uZmlnOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rZXJuZWwtZG9jIGIvc2NyaXB0cy9rZXJuZWwtZG9jCmluZGV4IGZjZGZiMjQuLjEwMmUxMjMgMTAwNzU1Ci0tLSBhL3NjcmlwdHMva2VybmVsLWRvYworKysgYi9zY3JpcHRzL2tlcm5lbC1kb2MKQEAgLTE0NTQsNiArMTQ1NCw4IEBACiAgICAgbXkgJGZpbGUgPSBzaGlmdDsKIAogICAgICR4ID1+IHNAL1wqLio/XCovQEBnb3M7CSMgc3RyaXAgY29tbWVudHMuCisgICAgJHggPX4gcy9eI1xzKmRlZmluZVxzKy4qJC8vOyAjIHN0cmlwICNkZWZpbmUgbWFjcm9zIGluc2lkZSBlbnVtcworCiAgICAgaWYgKCR4ID1+IC9lbnVtXHMrKFx3Kylccyp7KC4qKX0vKSB7CiAJJGRlY2xhcmF0aW9uX25hbWUgPSAkMTsKIAlteSAkbWVtYmVycyA9ICQyOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCmluZGV4IGM4MjczMDkuLjdhY2JkZDggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgX0dOVV9TT1VSQ0UKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSAibW9kcG9zdC5oIgogI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiCiAjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9saW51eC9saWNlbnNlLmgiCkBAIC0xMjE3LDcgKzEyMTgsNyBAQAogCQkJc3RyY2F0KHAsICIgIik7CiAJCXJldHVybiByOyAvKiB3ZSBsZWFrIGhlciBidXQgd2UgZG8gbm90IGNhcmUgKi8KIAl9IGVsc2UgewotCQlyZXR1cm4gIiI7CisJCXJldHVybiBzdHJkdXAoIiIpOwogCX0KIH0KIApAQCAtMTI0NSw2ICsxMjQ2LDggQEAKIHsKIAljb25zdCBjaGFyICpmcm9tLCAqZnJvbV9wOwogCWNvbnN0IGNoYXIgKnRvLCAqdG9fcDsKKwljaGFyICpwcmxfZnJvbTsKKwljaGFyICpwcmxfdG87CiAKIAlzd2l0Y2ggKGZyb21faXNfZnVuYykgewogCWNhc2UgMDogZnJvbSA9ICJ2YXJpYWJsZSI7IGZyb21fcCA9ICIiOyAgIGJyZWFrOwpAQCAtMTI2OCwxNiArMTI3MSwyMSBAQAogCiAJc3dpdGNoIChtaXNtYXRjaC0+bWlzbWF0Y2gpIHsKIAljYXNlIFRFWFRfVE9fQU5ZX0lOSVQ6CisJCXBybF9mcm9tID0gc2VjMmFubm90YXRpb24oZnJvbXNlYyk7CisJCXBybF90byA9IHNlYzJhbm5vdGF0aW9uKHRvc2VjKTsKIAkJZnByaW50ZihzdGRlcnIsCiAJCSJUaGUgZnVuY3Rpb24gJXMlcygpIHJlZmVyZW5jZXNcbiIKIAkJInRoZSAlcyAlcyVzJXMuXG4iCiAJCSJUaGlzIGlzIG9mdGVuIGJlY2F1c2UgJXMgbGFja3MgYSAlc1xuIgogCQkiYW5ub3RhdGlvbiBvciB0aGUgYW5ub3RhdGlvbiBvZiAlcyBpcyB3cm9uZy5cbiIsCi0JCXNlYzJhbm5vdGF0aW9uKGZyb21zZWMpLCBmcm9tc3ltLAotCQl0bywgc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCwKLQkJZnJvbXN5bSwgc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSk7CisJCXBybF9mcm9tLCBmcm9tc3ltLAorCQl0bywgcHJsX3RvLCB0b3N5bSwgdG9fcCwKKwkJZnJvbXN5bSwgcHJsX3RvLCB0b3N5bSk7CisJCWZyZWUocHJsX2Zyb20pOworCQlmcmVlKHBybF90byk7CiAJCWJyZWFrOwogCWNhc2UgREFUQV9UT19BTllfSU5JVDogeworCQlwcmxfdG8gPSBzZWMyYW5ub3RhdGlvbih0b3NlYyk7CiAJCWNvbnN0IGNoYXIgKmNvbnN0ICpzID0gbWlzbWF0Y2gtPnN5bWJvbF93aGl0ZV9saXN0OwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJIlRoZSB2YXJpYWJsZSAlcyByZWZlcmVuY2VzXG4iCkBAIC0xMjg1LDIwICsxMjkzLDI0IEBACiAJCSJJZiB0aGUgcmVmZXJlbmNlIGlzIHZhbGlkIHRoZW4gYW5ub3RhdGUgdGhlXG4iCiAJCSJ2YXJpYWJsZSB3aXRoIF9faW5pdCogb3IgX19yZWZkYXRhIChzZWUgbGludXgvaW5pdC5oKSAiCiAJCSJvciBuYW1lIHRoZSB2YXJpYWJsZTpcbiIsCi0JCWZyb21zeW0sIHRvLCBzZWMyYW5ub3RhdGlvbih0b3NlYyksIHRvc3ltLCB0b19wKTsKKwkJZnJvbXN5bSwgdG8sIHBybF90bywgdG9zeW0sIHRvX3ApOwogCQl3aGlsZSAoKnMpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIiVzLCAiLCAqcysrKTsKIAkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlmcmVlKHBybF90byk7CiAJCWJyZWFrOwogCX0KIAljYXNlIFRFWFRfVE9fQU5ZX0VYSVQ6CisJCXBybF90byA9IHNlYzJhbm5vdGF0aW9uKHRvc2VjKTsKIAkJZnByaW50ZihzdGRlcnIsCiAJCSJUaGUgZnVuY3Rpb24gJXMoKSByZWZlcmVuY2VzIGEgJXMgaW4gYW4gZXhpdCBzZWN0aW9uLlxuIgogCQkiT2Z0ZW4gdGhlICVzICVzJXMgaGFzIHZhbGlkIHVzYWdlIG91dHNpZGUgdGhlIGV4aXQgc2VjdGlvblxuIgogCQkiYW5kIHRoZSBmaXggaXMgdG8gcmVtb3ZlIHRoZSAlc2Fubm90YXRpb24gb2YgJXMuXG4iLAotCQlmcm9tc3ltLCB0bywgdG8sIHRvc3ltLCB0b19wLCBzZWMyYW5ub3RhdGlvbih0b3NlYyksIHRvc3ltKTsKKwkJZnJvbXN5bSwgdG8sIHRvLCB0b3N5bSwgdG9fcCwgcHJsX3RvLCB0b3N5bSk7CisJCWZyZWUocHJsX3RvKTsKIAkJYnJlYWs7CiAJY2FzZSBEQVRBX1RPX0FOWV9FWElUOiB7CisJCXBybF90byA9IHNlYzJhbm5vdGF0aW9uKHRvc2VjKTsKIAkJY29uc3QgY2hhciAqY29uc3QgKnMgPSBtaXNtYXRjaC0+c3ltYm9sX3doaXRlX2xpc3Q7CiAJCWZwcmludGYoc3RkZXJyLAogCQkiVGhlIHZhcmlhYmxlICVzIHJlZmVyZW5jZXNcbiIKQEAgLTEzMDYsMjQgKzEzMTgsMzEgQEAKIAkJIklmIHRoZSByZWZlcmVuY2UgaXMgdmFsaWQgdGhlbiBhbm5vdGF0ZSB0aGVcbiIKIAkJInZhcmlhYmxlIHdpdGggX19leGl0KiAoc2VlIGxpbnV4L2luaXQuaCkgb3IgIgogCQkibmFtZSB0aGUgdmFyaWFibGU6XG4iLAotCQlmcm9tc3ltLCB0bywgc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCk7CisJCWZyb21zeW0sIHRvLCBwcmxfdG8sIHRvc3ltLCB0b19wKTsKIAkJd2hpbGUgKCpzKQogCQkJZnByaW50ZihzdGRlcnIsICIlcywgIiwgKnMrKyk7CiAJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnJlZShwcmxfdG8pOwogCQlicmVhazsKIAl9CiAJY2FzZSBYWFhJTklUX1RPX1NPTUVfSU5JVDoKIAljYXNlIFhYWEVYSVRfVE9fU09NRV9FWElUOgorCQlwcmxfZnJvbSA9IHNlYzJhbm5vdGF0aW9uKGZyb21zZWMpOworCQlwcmxfdG8gPSBzZWMyYW5ub3RhdGlvbih0b3NlYyk7CiAJCWZwcmludGYoc3RkZXJyLAogCQkiVGhlICVzICVzJXMlcyByZWZlcmVuY2VzXG4iCiAJCSJhICVzICVzJXMlcy5cbiIKIAkJIklmICVzIGlzIG9ubHkgdXNlZCBieSAlcyB0aGVuXG4iCiAJCSJhbm5vdGF0ZSAlcyB3aXRoIGEgbWF0Y2hpbmcgYW5ub3RhdGlvbi5cbiIsCi0JCWZyb20sIHNlYzJhbm5vdGF0aW9uKGZyb21zZWMpLCBmcm9tc3ltLCBmcm9tX3AsCi0JCXRvLCBzZWMyYW5ub3RhdGlvbih0b3NlYyksIHRvc3ltLCB0b19wLAorCQlmcm9tLCBwcmxfZnJvbSwgZnJvbXN5bSwgZnJvbV9wLAorCQl0bywgcHJsX3RvLCB0b3N5bSwgdG9fcCwKIAkJdG9zeW0sIGZyb21zeW0sIHRvc3ltKTsKKwkJZnJlZShwcmxfZnJvbSk7CisJCWZyZWUocHJsX3RvKTsKIAkJYnJlYWs7CiAJY2FzZSBBTllfSU5JVF9UT19BTllfRVhJVDoKKwkJcHJsX2Zyb20gPSBzZWMyYW5ub3RhdGlvbihmcm9tc2VjKTsKKwkJcHJsX3RvID0gc2VjMmFubm90YXRpb24odG9zZWMpOwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJIlRoZSAlcyAlcyVzJXMgcmVmZXJlbmNlc1xuIgogCQkiYSAlcyAlcyVzJXMuXG4iCkBAIC0xMzMyLDExICsxMzUxLDE1IEBACiAJCSJ1c2VzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGV4aXQgcGF0aC5cbiIKIAkJIlRoZSBmaXggaXMgb2Z0ZW4gdG8gcmVtb3ZlIHRoZSAlc2Fubm90YXRpb24gb2ZcbiIKIAkJIiVzJXMgc28gaXQgbWF5IGJlIHVzZWQgb3V0c2lkZSBhbiBleGl0IHNlY3Rpb24uXG4iLAotCQlmcm9tLCBzZWMyYW5ub3RhdGlvbihmcm9tc2VjKSwgZnJvbXN5bSwgZnJvbV9wLAotCQl0bywgc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCwKLQkJc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCk7CisJCWZyb20sIHBybF9mcm9tLCBmcm9tc3ltLCBmcm9tX3AsCisJCXRvLCBwcmxfdG8sIHRvc3ltLCB0b19wLAorCQlwcmxfdG8sIHRvc3ltLCB0b19wKTsKKwkJZnJlZShwcmxfZnJvbSk7CisJCWZyZWUocHJsX3RvKTsKIAkJYnJlYWs7CiAJY2FzZSBBTllfRVhJVF9UT19BTllfSU5JVDoKKwkJcHJsX2Zyb20gPSBzZWMyYW5ub3RhdGlvbihmcm9tc2VjKTsKKwkJcHJsX3RvID0gc2VjMmFubm90YXRpb24odG9zZWMpOwogCQlmcHJpbnRmKHN0ZGVyciwKIAkJIlRoZSAlcyAlcyVzJXMgcmVmZXJlbmNlc1xuIgogCQkiYSAlcyAlcyVzJXMuXG4iCkBAIC0xMzQ1LDE2ICsxMzY4LDIwIEBACiAJCSJ1c2VzIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGluaXQgcGF0aC5cbiIKIAkJIlRoZSBmaXggaXMgb2Z0ZW4gdG8gcmVtb3ZlIHRoZSAlc2Fubm90YXRpb24gb2ZcbiIKIAkJIiVzJXMgc28gaXQgbWF5IGJlIHVzZWQgb3V0c2lkZSBhbiBpbml0IHNlY3Rpb24uXG4iLAotCQlmcm9tLCBzZWMyYW5ub3RhdGlvbihmcm9tc2VjKSwgZnJvbXN5bSwgZnJvbV9wLAotCQl0bywgc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCwKLQkJc2VjMmFubm90YXRpb24odG9zZWMpLCB0b3N5bSwgdG9fcCk7CisJCWZyb20sIHBybF9mcm9tLCBmcm9tc3ltLCBmcm9tX3AsCisJCXRvLCBwcmxfdG8sIHRvc3ltLCB0b19wLAorCQlwcmxfdG8sIHRvc3ltLCB0b19wKTsKKwkJZnJlZShwcmxfZnJvbSk7CisJCWZyZWUocHJsX3RvKTsKIAkJYnJlYWs7CiAJY2FzZSBFWFBPUlRfVE9fSU5JVF9FWElUOgorCQlwcmxfdG8gPSBzZWMyYW5ub3RhdGlvbih0b3NlYyk7CiAJCWZwcmludGYoc3RkZXJyLAogCQkiVGhlIHN5bWJvbCAlcyBpcyBleHBvcnRlZCBhbmQgYW5ub3RhdGVkICVzXG4iCiAJCSJGaXggdGhpcyBieSByZW1vdmluZyB0aGUgJXNhbm5vdGF0aW9uIG9mICVzICIKIAkJIm9yIGRyb3AgdGhlIGV4cG9ydC5cbiIsCi0JCXRvc3ltLCBzZWMyYW5ub3RhdGlvbih0b3NlYyksIHNlYzJhbm5vdGF0aW9uKHRvc2VjKSwgdG9zeW0pOworCQl0b3N5bSwgcHJsX3RvLCBwcmxfdG8sIHRvc3ltKTsKKwkJZnJlZShwcmxfdG8pOwogCQlicmVhazsKIAl9CiAJZnByaW50ZihzdGRlcnIsICJcbiIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCmluZGV4IGQyYzI5YjYuLmQwYjkzMWIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQorKysgYi9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKQEAgLTExMSwxMyArMTExLDM4IEBACiBjbGVhbi1kaXJzICs9ICQob2JqdHJlZSkvdGFyLWluc3RhbGwvCiAKIAorIyBwZXJmLXBrZyAtIGdlbmVyYXRlIGEgc291cmNlIHRhcmJhbGwgd2l0aCBwZXJmIHNvdXJjZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGVyZi10YXI9cGVyZi0kKEtFUk5FTFZFUlNJT04pCisKK3F1aWV0X2NtZF9wZXJmX3RhciA9IFRBUgorICAgICAgY21kX3BlcmZfdGFyID0gXAorZ2l0IGFyY2hpdmUgLS1wcmVmaXg9JChwZXJmLXRhcikvIEhFQURee3RyZWV9ICAgICAgICAgICAgICAgICAgICAgICBcCisJJCQoY2F0ICQoc3JjdHJlZSkvdG9vbHMvcGVyZi9NQU5JRkVTVCkgLW8gJChwZXJmLXRhcikudGFyOyAgXAorbWtkaXIgLXAgJChwZXJmLXRhcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitnaXQgcmV2LXBhcnNlIEhFQUQgPiAkKHBlcmYtdGFyKS9IRUFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RhciByZiAkKHBlcmYtdGFyKS50YXIgJChwZXJmLXRhcikvSEVBRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorcm0gLXIgJChwZXJmLXRhcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKGlmICQoZmluZHN0cmluZyB0YXItc3JjLCRAKSwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoaWYgJChmaW5kc3RyaW5nIGJ6MiwkQCksYnppcDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorJChpZiAkKGZpbmRzdHJpbmcgZ3osJEApLGd6aXAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiskKGVycm9yIHVua25vd24gdGFyZ2V0ICRAKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS1mIC05ICQocGVyZi10YXIpLnRhcikKKworcGVyZi0lcGtnOiBGT1JDRQorCSQoY2FsbCBjbWQscGVyZl90YXIpCisKICMgSGVscCB0ZXh0IGRpc3BsYXllZCB3aGVuIGV4ZWN1dGluZyAnbWFrZSBoZWxwJwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGhlbHA6IEZPUkNFCi0JQGVjaG8gJyAgcnBtLXBrZyAgICAgICAgIC0gQnVpbGQgYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBSUE0ga2VybmVsIHBhY2thZ2VzJwotCUBlY2hvICcgIGJpbnJwbS1wa2cgICAgICAtIEJ1aWxkIG9ubHkgdGhlIGJpbmFyeSBrZXJuZWwgcGFja2FnZScKLQlAZWNobyAnICBkZWItcGtnICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGFuIGRlYiBwYWNrYWdlJwotCUBlY2hvICcgIHRhci1wa2cgICAgICAgICAtIEJ1aWxkIHRoZSBrZXJuZWwgYXMgYW4gdW5jb21wcmVzc2VkIHRhcmJhbGwnCi0JQGVjaG8gJyAgdGFyZ3otcGtnICAgICAgIC0gQnVpbGQgdGhlIGtlcm5lbCBhcyBhIGd6aXAgY29tcHJlc3NlZCB0YXJiYWxsJwotCUBlY2hvICcgIHRhcmJ6Mi1wa2cgICAgICAtIEJ1aWxkIHRoZSBrZXJuZWwgYXMgYSBiemlwMiBjb21wcmVzc2VkIHRhcmJhbGwnCisJQGVjaG8gJyAgcnBtLXBrZyAgICAgICAgICAgICAtIEJ1aWxkIGJvdGggc291cmNlIGFuZCBiaW5hcnkgUlBNIGtlcm5lbCBwYWNrYWdlcycKKwlAZWNobyAnICBiaW5ycG0tcGtnICAgICAgICAgIC0gQnVpbGQgb25seSB0aGUgYmluYXJ5IGtlcm5lbCBwYWNrYWdlJworCUBlY2hvICcgIGRlYi1wa2cgICAgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGFuIGRlYiBwYWNrYWdlJworCUBlY2hvICcgIHRhci1wa2cgICAgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGFuIHVuY29tcHJlc3NlZCB0YXJiYWxsJworCUBlY2hvICcgIHRhcmd6LXBrZyAgICAgICAgICAgLSBCdWlsZCB0aGUga2VybmVsIGFzIGEgZ3ppcCBjb21wcmVzc2VkIHRhcmJhbGwnCisJQGVjaG8gJyAgdGFyYnoyLXBrZyAgICAgICAgICAtIEJ1aWxkIHRoZSBrZXJuZWwgYXMgYSBiemlwMiBjb21wcmVzc2VkIHRhcmJhbGwnCisJQGVjaG8gJyAgcGVyZi10YXItc3JjLXBrZyAgICAtIEJ1aWxkICQocGVyZi10YXIpLnRhciBzb3VyY2UgdGFyYmFsbCcKKwlAZWNobyAnICBwZXJmLXRhcmd6LXNyYy1wa2cgIC0gQnVpbGQgJChwZXJmLXRhcikudGFyLmd6IHNvdXJjZSB0YXJiYWxsJworCUBlY2hvICcgIHBlcmYtdGFyYnoyLXNyYy1wa2cgLSBCdWlsZCAkKHBlcmYtdGFyKS50YXIuYnoyIHNvdXJjZSB0YXJiYWxsJwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IGYzYzljMGEuLjAxNzEwNjAgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0zMjYsNyArMzI2LDcgQEAKICAgICAjICAgICAgICAgICAgICAgICAgICAxNDogUl9NSVBTX05PTkUgKkFCUyoKICAgICAjCSAxODogICAwMDAyMDAyMSAgICAgICAgbm9wCiAgICAgaWYgKCRpc19tb2R1bGUgZXEgIjAiKSB7Ci0JICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTouKlxcc19tY291bnRcJCI7CisJICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTogUl9NSVBTXzI2XFxzK19tY291bnRcJCI7CiAgICAgfSBlbHNlIHsKIAkgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOiBSX01JUFNfSEkxNlxccytfbWNvdW50XCQiOwogICAgIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYyBiL3NlY3VyaXR5L2NhcGFiaWxpdHkuYwppbmRleCBhMGJiZjMwLi45NWE2NTk5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jYXBhYmlsaXR5LmMKKysrIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCkBAIC00MTEsNyArNDExLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYXBfdGFza19zZXRybGltaXQodW5zaWduZWQgaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKK3N0YXRpYyBpbnQgY2FwX3Rhc2tfc2V0cmxpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCQlzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCAwZDI2ZjY4Li4wMDg4ZGQ4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC01MzcsNiArNTM3LDggQEAKIAkJCSAgaW50ciA/IFRBU0tfSU5URVJSVVBUSUJMRSA6IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKKwlpZiAodGVzdF9iaXQoS0VZX0ZMQUdfTkVHQVRJVkUsICZrZXktPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9LRVk7CiAJcmV0dXJuIGtleV92YWxpZGF0ZShrZXkpOwogfQogRVhQT1JUX1NZTUJPTCh3YWl0X2Zvcl9rZXlfY29uc3RydWN0aW9uKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY3VyaXR5LmMgYi9zZWN1cml0eS9zZWN1cml0eS5jCmluZGV4IGU4Yzg3YjguLmM1Mzk0OWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlY3VyaXR5LmMKKysrIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtNjE5LDcgKzYxOSwxMyBAQAogCiBpbnQgc2VjdXJpdHlfZmlsZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbWFzaykKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5maWxlX3Blcm1pc3Npb24oZmlsZSwgbWFzayk7CisJaW50IHJldDsKKworCXJldCA9IHNlY3VyaXR5X29wcy0+ZmlsZV9wZXJtaXNzaW9uKGZpbGUsIG1hc2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZnNub3RpZnlfcGVybShmaWxlLCBtYXNrKTsKIH0KIAogaW50IHNlY3VyaXR5X2ZpbGVfYWxsb2Moc3RydWN0IGZpbGUgKmZpbGUpCkBAIC02ODMsNyArNjg5LDEzIEBACiAKIGludCBzZWN1cml0eV9kZW50cnlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+ZGVudHJ5X29wZW4oZmlsZSwgY3JlZCk7CisJaW50IHJldDsKKworCXJldCA9IHNlY3VyaXR5X29wcy0+ZGVudHJ5X29wZW4oZmlsZSwgY3JlZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBmc25vdGlmeV9wZXJtKGZpbGUsIE1BWV9PUEVOKTsKIH0KIAogaW50IHNlY3VyaXR5X3Rhc2tfY3JlYXRlKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpCkBAIC03NjgsOSArNzgwLDEwIEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+dGFza19nZXRpb3ByaW8ocCk7CiB9CiAKLWludCBzZWN1cml0eV90YXNrX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKm5ld19ybGltKQoraW50IHNlY3VyaXR5X3Rhc2tfc2V0cmxpbWl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IHJlc291cmNlLAorCQlzdHJ1Y3QgcmxpbWl0ICpuZXdfcmxpbSkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT50YXNrX3NldHJsaW1pdChyZXNvdXJjZSwgbmV3X3JsaW0pOworCXJldHVybiBzZWN1cml0eV9vcHMtPnRhc2tfc2V0cmxpbWl0KHAsIHJlc291cmNlLCBuZXdfcmxpbSk7CiB9CiAKIGludCBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlIGIvc2VjdXJpdHkvc2VsaW51eC9NYWtlZmlsZQppbmRleCBmMDEzOTgyLi41OGQ4MGYzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L3NlbGludXgvTWFrZWZpbGUKQEAgLTI1LDYgKzI1LDYgQEAKIHF1aWV0X2NtZF9mbGFzayA9IEdFTiAgICAgJChvYmopL2ZsYXNrLmggJChvYmopL2F2X3Blcm1pc3Npb25zLmgKICAgICAgIGNtZF9mbGFzayA9IHNjcmlwdHMvc2VsaW51eC9nZW5oZWFkZXJzL2dlbmhlYWRlcnMgJChvYmopL2ZsYXNrLmggJChvYmopL2F2X3Blcm1pc3Npb25zLmgKIAotdGFyZ2V0cyArPSBmbGFzay5oCit0YXJnZXRzICs9IGZsYXNrLmggYXZfcGVybWlzc2lvbnMuaAogJChvYmopL2ZsYXNrLmg6ICQoc3JjKS9pbmNsdWRlL2NsYXNzbWFwLmggRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxmbGFzaykKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCA5YjQwZjRjLi40MjA0M2Y5IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0yMjg0LDEyICsyMjg0LDE1IEBACiAJcmMgPSBhdmNfaGFzX3Blcm0obmV3X3RzZWMtPm9zaWQsIG5ld190c2VjLT5zaWQsIFNFQ0NMQVNTX1BST0NFU1MsCiAJCQkgIFBST0NFU1NfX1JMSU1JVElOSCwgTlVMTCk7CiAJaWYgKHJjKSB7CisJCS8qIHByb3RlY3QgYWdhaW5zdCBkb19wcmxpbWl0KCkgKi8KKwkJdGFza19sb2NrKGN1cnJlbnQpOwogCQlmb3IgKGkgPSAwOyBpIDwgUkxJTV9OTElNSVRTOyBpKyspIHsKIAkJCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW0gKyBpOwogCQkJaW5pdHJsaW0gPSBpbml0X3Rhc2suc2lnbmFsLT5ybGltICsgaTsKIAkJCXJsaW0tPnJsaW1fY3VyID0gbWluKHJsaW0tPnJsaW1fbWF4LCBpbml0cmxpbS0+cmxpbV9jdXIpOwogCQl9Ci0JCXVwZGF0ZV9ybGltaXRfY3B1KGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7CisJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOworCQl1cGRhdGVfcmxpbWl0X2NwdShjdXJyZW50LCBybGltaXQoUkxJTUlUX0NQVSkpOwogCX0KIH0KIApAQCAtMzMzMywxNiArMzMzNiwxNyBAQAogCXJldHVybiBjdXJyZW50X2hhc19wZXJtKHAsIFBST0NFU1NfX0dFVFNDSEVEKTsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3Rhc2tfc2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCitzdGF0aWMgaW50IHNlbGludXhfdGFza19zZXRybGltaXQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJCXN0cnVjdCBybGltaXQgKm5ld19ybGltKQogewotCXN0cnVjdCBybGltaXQgKm9sZF9ybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltICsgcmVzb3VyY2U7CisJc3RydWN0IHJsaW1pdCAqb2xkX3JsaW0gPSBwLT5zaWduYWwtPnJsaW0gKyByZXNvdXJjZTsKIAogCS8qIENvbnRyb2wgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIHRoZSBoYXJkIGxpbWl0ICh3aGV0aGVyCiAJICAgbG93ZXJpbmcgb3IgcmFpc2luZyBpdCksIHNvIHRoYXQgdGhlIGhhcmQgbGltaXQgY2FuCiAJICAgbGF0ZXIgYmUgdXNlZCBhcyBhIHNhZmUgcmVzZXQgcG9pbnQgZm9yIHRoZSBzb2Z0IGxpbWl0CiAJICAgdXBvbiBjb250ZXh0IHRyYW5zaXRpb25zLiAgU2VlIHNlbGludXhfYnBybV9jb21taXR0aW5nX2NyZWRzLiAqLwogCWlmIChvbGRfcmxpbS0+cmxpbV9tYXggIT0gbmV3X3JsaW0tPnJsaW1fbWF4KQotCQlyZXR1cm4gY3VycmVudF9oYXNfcGVybShjdXJyZW50LCBQUk9DRVNTX19TRVRSTElNSVQpOworCQlyZXR1cm4gY3VycmVudF9oYXNfcGVybShwLCBQUk9DRVNTX19TRVRSTElNSVQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9saWIuYyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCmluZGV4IGU5ZDk4YmUuLmUyM2UwZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX2xpYi5jCkBAIC02Nyw2ICs2Nyw4IEBACiAJfSBlbHNlIHsKIAkJaWYgKG5ld19od19wdHIgPT0gVUxPTkdfTUFYKSB7CS8qIGluaXRpYWxpemF0aW9uICovCiAJCQlzbmRfcGNtX3NmcmFtZXNfdCBhdmFpbCA9IHNuZF9wY21fcGxheWJhY2tfaHdfYXZhaWwocnVudGltZSk7CisJCQlpZiAoYXZhaWwgPiBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJCQlhdmFpbCA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwogCQkJcnVudGltZS0+c2lsZW5jZV9maWxsZWQgPSBhdmFpbCA+IDAgPyBhdmFpbCA6IDA7CiAJCQlydW50aW1lLT5zaWxlbmNlX3N0YXJ0ID0gKHJ1bnRpbWUtPnN0YXR1cy0+aHdfcHRyICsKIAkJCQkJCSAgcnVudGltZS0+c2lsZW5jZV9maWxsZWQpICUKQEAgLTI4Nyw4ICsyODksMTEgQEAKIAkJCXJldHVybiAtRVBJUEU7CiAJCX0KIAl9Ci0JaWYgKGF2YWlsID49IHJ1bnRpbWUtPmNvbnRyb2wtPmF2YWlsX21pbikKLQkJd2FrZV91cChydW50aW1lLT50d2FrZSA/ICZydW50aW1lLT50c2xlZXAgOiAmcnVudGltZS0+c2xlZXApOworCWlmIChydW50aW1lLT50d2FrZSkgeworCQlpZiAoYXZhaWwgPj0gcnVudGltZS0+dHdha2UpCisJCQl3YWtlX3VwKCZydW50aW1lLT50c2xlZXApOworCX0gZWxzZSBpZiAoYXZhaWwgPj0gcnVudGltZS0+Y29udHJvbC0+YXZhaWxfbWluKQorCQl3YWtlX3VwKCZydW50aW1lLT5zbGVlcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MDcsNyArMTcxMiw3IEBACiAgKiBUaGUgYXZhaWxhYmxlIHNwYWNlIGlzIHN0b3JlZCBvbiBhdmFpbHAuICBXaGVuIGVyciA9IDAgYW5kIGF2YWlsID0gMAogICogb24gdGhlIGNhcHR1cmUgc3RyZWFtLCBpdCBpbmRpY2F0ZXMgdGhlIHN0cmVhbSBpcyBpbiBEUkFJTklORyBzdGF0ZS4KICAqLwotc3RhdGljIGludCB3YWl0X2Zvcl9hdmFpbF9taW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCitzdGF0aWMgaW50IHdhaXRfZm9yX2F2YWlsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICAgc25kX3BjbV91ZnJhbWVzX3QgKmF2YWlscCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMTc1Nyw3ICsxNzYyLDcgQEAKIAkJCWF2YWlsID0gc25kX3BjbV9wbGF5YmFja19hdmFpbChydW50aW1lKTsKIAkJZWxzZQogCQkJYXZhaWwgPSBzbmRfcGNtX2NhcHR1cmVfYXZhaWwocnVudGltZSk7Ci0JCWlmIChhdmFpbCA+PSBydW50aW1lLT5jb250cm9sLT5hdmFpbF9taW4pCisJCWlmIChhdmFpbCA+PSBydW50aW1lLT50d2FrZSkKIAkJCWJyZWFrOwogCX0KICBfZW5kbG9vcDoKQEAgLTE4MjAsNyArMTgyNSw3IEBACiAJCWdvdG8gX2VuZF91bmxvY2s7CiAJfQogCi0JcnVudGltZS0+dHdha2UgPSAxOworCXJ1bnRpbWUtPnR3YWtlID0gcnVudGltZS0+Y29udHJvbC0+YXZhaWxfbWluID8gOiAxOwogCXdoaWxlIChzaXplID4gMCkgewogCQlzbmRfcGNtX3VmcmFtZXNfdCBmcmFtZXMsIGFwcGxfcHRyLCBhcHBsX29mczsKIAkJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CkBAIC0xODMzLDcgKzE4MzgsOSBAQAogCQkJCWVyciA9IC1FQUdBSU47CiAJCQkJZ290byBfZW5kX3VubG9jazsKIAkJCX0KLQkJCWVyciA9IHdhaXRfZm9yX2F2YWlsX21pbihzdWJzdHJlYW0sICZhdmFpbCk7CisJCQlydW50aW1lLT50d2FrZSA9IG1pbl90KHNuZF9wY21fdWZyYW1lc190LCBzaXplLAorCQkJCQlydW50aW1lLT5jb250cm9sLT5hdmFpbF9taW4gPyA6IDEpOworCQkJZXJyID0gd2FpdF9mb3JfYXZhaWwoc3Vic3RyZWFtLCAmYXZhaWwpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJZ290byBfZW5kX3VubG9jazsKIAkJfQpAQCAtMjA0Miw3ICsyMDQ5LDcgQEAKIAkJZ290byBfZW5kX3VubG9jazsKIAl9CiAKLQlydW50aW1lLT50d2FrZSA9IDE7CisJcnVudGltZS0+dHdha2UgPSBydW50aW1lLT5jb250cm9sLT5hdmFpbF9taW4gPyA6IDE7CiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCXNuZF9wY21fdWZyYW1lc190IGZyYW1lcywgYXBwbF9wdHIsIGFwcGxfb2ZzOwogCQlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbDsKQEAgLTIwNjAsNyArMjA2Nyw5IEBACiAJCQkJZXJyID0gLUVBR0FJTjsKIAkJCQlnb3RvIF9lbmRfdW5sb2NrOwogCQkJfQotCQkJZXJyID0gd2FpdF9mb3JfYXZhaWxfbWluKHN1YnN0cmVhbSwgJmF2YWlsKTsKKwkJCXJ1bnRpbWUtPnR3YWtlID0gbWluX3Qoc25kX3BjbV91ZnJhbWVzX3QsIHNpemUsCisJCQkJCXJ1bnRpbWUtPmNvbnRyb2wtPmF2YWlsX21pbiA/IDogMSk7CisJCQllcnIgPSB3YWl0X2Zvcl9hdmFpbChzdWJzdHJlYW0sICZhdmFpbCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlnb3RvIF9lbmRfdW5sb2NrOwogCQkJaWYgKCFhdmFpbCkKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX21pc2MuYyBiL3NvdW5kL2NvcmUvcGNtX21pc2MuYwppbmRleCBlYTJiZjgyLi40MzRhZjNjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9taXNjLmMKKysrIGIvc291bmQvY29yZS9wY21fbWlzYy5jCkBAIC0xMjgsNiArMTI4LDE0IEBACiAJCS53aWR0aCA9IDQsIC5waHlzID0gNCwgLmxlID0gLTEsIC5zaWduZCA9IC0xLAogCQkuc2lsZW5jZSA9IHt9LAogCX0sCisJW1NORFJWX1BDTV9GT1JNQVRfRzcyM18yNF0gPSB7CisJCS53aWR0aCA9IDMsIC5waHlzID0gMywgLmxlID0gLTEsIC5zaWduZCA9IC0xLAorCQkuc2lsZW5jZSA9IHt9LAorCX0sCisJW1NORFJWX1BDTV9GT1JNQVRfRzcyM180MF0gPSB7CisJCS53aWR0aCA9IDUsIC5waHlzID0gNSwgLmxlID0gLTEsIC5zaWduZCA9IC0xLAorCQkuc2lsZW5jZSA9IHt9LAorCX0sCiAJLyogRklYTUU6IHRoZSBmb2xsb3dpbmcgdGhyZWUgZm9ybWF0cyBhcmUgbm90IGRlZmluZWQgcHJvcGVybHkgeWV0ICovCiAJW1NORFJWX1BDTV9GT1JNQVRfTVBFR10gPSB7CiAJCS5sZSA9IC0xLCAuc2lnbmQgPSAtMSwKQEAgLTE4Niw2ICsxOTQsMTQgQEAKIAkJLndpZHRoID0gMTgsIC5waHlzID0gMjQsIC5sZSA9IDAsIC5zaWduZCA9IDAsCiAJCS5zaWxlbmNlID0geyAweDAyLCAweDAwLCAweDAwIH0sCiAJfSwKKwlbU05EUlZfUENNX0ZPUk1BVF9HNzIzXzI0XzFCXSA9IHsKKwkJLndpZHRoID0gMywgLnBoeXMgPSA4LCAubGUgPSAtMSwgLnNpZ25kID0gLTEsCisJCS5zaWxlbmNlID0ge30sCisJfSwKKwlbU05EUlZfUENNX0ZPUk1BVF9HNzIzXzQwXzFCXSA9IHsKKwkJLndpZHRoID0gNSwgLnBoeXMgPSA4LCAubGUgPSAtMSwgLnNpZ25kID0gLTEsCisJCS5zaWxlbmNlID0ge30sCisJfSwKIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9LY29uZmlnIGIvc291bmQvZHJpdmVycy9LY29uZmlnCmluZGV4IGMyOTBjZWUuLjQ4MGMzODYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvS2NvbmZpZworKysgYi9zb3VuZC9kcml2ZXJzL0tjb25maWcKQEAgLTE3MCw5ICsxNzAsMjUgQEAKIAkgIEFDOTcgY29kZWNzLiAgSW4gdGhpcyBtb2RlLCB0aGUgcG93ZXItbW9kZSBpcyBkeW5hbWljYWxseQogCSAgY29udHJvbGxlZCBhdCBlYWNoIG9wZW4vY2xvc2UuCiAKLQkgIFRoZSBtb2RlIGlzIGFjdGl2YXRlZCBieSBwYXNzaW5nIHBvd2VyX3NhdmU9MSBvcHRpb24gdG8KLQkgIHNuZC1hYzk3LWNvZGVjIGRyaXZlci4gIFlvdSBjYW4gdG9nZ2xlIGl0IGR5bmFtaWNhbGx5IG92ZXIKLQkgIHN5c2ZzLCB0b28uCisJICBUaGUgbW9kZSBpcyBhY3RpdmF0ZWQgYnkgcGFzc2luZyAncG93ZXJfc2F2ZT1YJyB0byB0aGUKKwkgIHNuZC1hYzk3LWNvZGVjIGRyaXZlciBtb2R1bGUsIHdoZXJlICdYJyBpcyB0aGUgdGltZS1vdXQKKwkgIHZhbHVlLCBhIG5vbm5lZ2F0aXZlIGludGVnZXIgdGhhdCBzcGVjaWZpZXMgaG93IG1hbnkKKwkgIHNlY29uZHMgb2YgaWRsZSB0aW1lIHRoZSBkcml2ZXIgbXVzdCBjb3VudCBiZWZvcmUgaXQgbWF5CisJICBwdXQgdGhlIEFDOTcgaW50byBwb3dlci1zYXZlIG1vZGU7ICBhIHZhbHVlIG9mIDAgKHplcm8pCisJICBkaXNhYmxlcyB0aGUgdXNlIG9mIHRoaXMgcG93ZXItc2F2ZSBtb2RlLgorCisJICBBZnRlciB0aGUgc25kLWFjOTctY29kZWMgZHJpdmVyIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQsCisJICB0aGUgJ3Bvd2VyX3NhdmUnIHBhcmFtZXRlciBjYW4gYmUgc2V0IHZpYSBzeXNmcyBhcyBmb2xsb3dzOgorCisJICAgIGVjaG8gMTAgPiAvc3lzL21vZHVsZS9zbmRfYWM5N19jb2RlYy9wYXJhbWV0ZXJzL3Bvd2VyX3NhdmUKKworCSAgSW4gdGhpcyBjYXNlLCB0aGUgdGltZS1vdXQgaXMgc2V0IHRvIDEwIHNlY29uZHM7IHNldHRpbmcKKwkgIHRoZSB0aW1lLW91dCB0byAxIHNlY29uZCAodGhlIG1pbmltdW0gYWN0aXZhdGlvbiB2YWx1ZSkKKwkgIGlzbid0IHJlY29tbWVuZGVkIGJlY2F1c2UgbWFueSBhcHBsaWNhdGlvbnMgdHJ5IHRvIHJlb3BlbgorCSAgdGhlIGRldmljZSBmcmVxdWVudGx5LiAgQSB2YWx1ZSBvZiAxMCBzZWNvbmRzIHdvdWxkIGJlIGEKKwkgIGdvb2QgY2hvaWNlIGZvciBub3JtYWwgb3BlcmF0aW9ucy4KKworCSAgU2VlIERvY3VtZW50YXRpb24vc291bmQvYWxzYS9wb3dlcnNhdmUudHh0IGZvciBtb3JlIGRldGFpbHMuCiAKIGNvbmZpZyBTTkRfQUM5N19QT1dFUl9TQVZFX0RFRkFVTFQKIAlpbnQgIkRlZmF1bHQgdGltZS1vdXQgZm9yIEFDOTcgcG93ZXItc2F2ZSBtb2RlIgpAQCAtMTgyLDQgKzE5OCw2IEBACiAJICBUaGUgZGVmYXVsdCB0aW1lLW91dCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBBQzk3IGF1dG9tYXRpYwogCSAgcG93ZXItc2F2ZSBtb2RlLiAgMCBtZWFucyB0byBkaXNhYmxlIHRoZSBwb3dlci1zYXZlIG1vZGUuCiAKKwkgIFNlZSBTTkRfQUM5N19QT1dFUl9TQVZFIGZvciBtb3JlIGRldGFpbHMuCisKIGVuZGlmCSMgU05EX0RSSVZFUlMKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYwppbmRleCA2MGI2YWJkLi41ZjNlNjg0IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCkBAIC01NDksNyArNTQ5LDEwIEBACiAJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENvdWxkbid0IGdyYWIgSVJRICVkXG4iLCBjaGlwLT5pcnEpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCBjYXJkLT5zaG9ydG5hbWUpOworCWlmIChyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCBjYXJkLT5zaG9ydG5hbWUpID09IE5VTEwpIHsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSwgY2FyZC0+c2hvcnRuYW1lKSkgewogCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMgYi9zb3VuZC9pc2Evc2IvZW11ODAwMF9wY20uYwppbmRleCBjY2VkYmZlLi4yZjg1YzY2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvZW11ODAwMF9wY20uYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMF9wY20uYwpAQCAtNDMzLDcgKzQzMyw4IEBACiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQl1bnNpZ25lZCBzaG9ydCBzdmFsOwogCQlDSEVDS19TQ0hFRFVMRVIoKTsKLQkJZ2V0X3VzZXIoc3ZhbCwgYnVmKTsKKwkJaWYgKGdldF91c2VyKHN2YWwsIGJ1ZikpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJRU1VODAwMF9TTUxEX1dSSVRFKGVtdSwgc3ZhbCk7CiAJCWJ1ZisrOwogCQljb3VudC0tOwpAQCAtNTI1LDEyICs1MjYsMTQgQEAKIAl3aGlsZSAoY291bnQtLSA+IDApIHsKIAkJdW5zaWduZWQgc2hvcnQgc3ZhbDsKIAkJQ0hFQ0tfU0NIRURVTEVSKCk7Ci0JCWdldF91c2VyKHN2YWwsIGJ1Zik7CisJCWlmIChnZXRfdXNlcihzdmFsLCBidWYpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCUVNVTgwMDBfU01MRF9XUklURShlbXUsIHN2YWwpOwogCQlidWYrKzsKIAkJaWYgKHJlYy0+dm9pY2VzID4gMSkgewogCQkJQ0hFQ0tfU0NIRURVTEVSKCk7Ci0JCQlnZXRfdXNlcihzdmFsLCBidWYpOworCQkJaWYgKGdldF91c2VyKHN2YWwsIGJ1ZikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlFTVU4MDAwX1NNUkRfV1JJVEUoZW11LCBzdmFsKTsKIAkJCWJ1ZisrOwogCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCmluZGV4IGMxMDcwZTMuLmM0YTRjZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCisrKyBiL3NvdW5kL29zcy9hdTE1NTBfYWM5Ny5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNjIsMTkgKzE2MywxMCBAQAogc3RhdGljIHZvaWQKIGF1MTU1MF9kZWxheShpbnQgbXNlYykKIHsKLQl1bnNpZ25lZCBsb25nICAgdG1vOwotCXNpZ25lZCBsb25nICAgICB0bW8yOwotCiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlyZXR1cm47CiAKLQl0bW8gPSBqaWZmaWVzICsgKG1zZWMgKiBIWikgLyAxMDAwOwotCWZvciAoOzspIHsKLQkJdG1vMiA9IHRtbyAtIGppZmZpZXM7Ci0JCWlmICh0bW8yIDw9IDApCi0JCQlicmVhazsKLQkJc2NoZWR1bGVfdGltZW91dCh0bW8yKTsKLQl9CisJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhtc2VjKSk7CiB9CiAKIHN0YXRpYyB1MTYKQEAgLTgwNyw3ICs3OTksOSBAQAogc3RhdGljIGludAogYXUxNTUwX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWxvY2tfa2VybmVsKCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJmF1MTU1MF9zdGF0ZTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgyNCwyMiArODE4LDI2IEBACiAJcmV0dXJuIGNvZGVjLT5taXhlcl9pb2N0bChjb2RlYywgY21kLCBhcmcpOwogfQogCi1zdGF0aWMgaW50Ci1hdTE1NTBfaW9jdGxfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcKK2F1MTU1MF9pb2N0bF9taXhkZXYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBhdTE1NTBfc3RhdGUgKnMgPSAoc3RydWN0IGF1MTU1MF9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMgPSBzLT5jb2RlYzsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIG1peGRldl9pb2N0bChjb2RlYywgY21kLCBhcmcpOworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gbWl4ZGV2X2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIC8qY29uc3QgKi8gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhdTE1NTBfbWl4ZXJfZm9wcyA9IHsKLQlvd25lcjpUSElTX01PRFVMRSwKLQlsbHNlZWs6YXUxNTUwX2xsc2VlaywKLQlpb2N0bDphdTE1NTBfaW9jdGxfbWl4ZGV2LAotCW9wZW46YXUxNTUwX29wZW5fbWl4ZGV2LAotCXJlbGVhc2U6YXUxNTUwX3JlbGVhc2VfbWl4ZGV2LAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IGF1MTU1MF9sbHNlZWssCisJLnVubG9ja2VkX2lvY3RsCT0gYXUxNTUwX2lvY3RsX21peGRldiwKKwkub3BlbgkJPSBhdTE1NTBfb3Blbl9taXhkZXYsCisJLnJlbGVhc2UJPSBhdTE1NTBfcmVsZWFzZV9taXhkZXYsCiB9OwogCiBzdGF0aWMgaW50CkBAIC0xMzQzLDggKzEzNDEsNyBAQAogCiAKIHN0YXRpYyBpbnQKLWF1MTU1MF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK2F1MTU1MF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGF1MTU1MF9zdGF0ZSAqcyA9IChzdHJ1Y3QgYXUxNTUwX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKQEAgLTE3ODAsNiArMTc3NywxNyBAQAogCXJldHVybiBtaXhkZXZfaW9jdGwocy0+Y29kZWMsIGNtZCwgYXJnKTsKIH0KIAorc3RhdGljIGxvbmcKK2F1MTU1MF91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gYXUxNTUwX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgaW50CiBhdTE1NTBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE3OTcsMjEgKzE4MDUsMjIgQEAKICNlbmRpZgogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKKwlsb2NrX2tlcm5lbCgpOwogCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwogCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCXdoaWxlIChzLT5vcGVuX21vZGUgJiBmaWxlLT5mX21vZGUpIHsKLQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQorCQlyZXQgPSAtRUJVU1k7CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJCWdvdG8gb3V0OwogCQlhZGRfd2FpdF9xdWV1ZSgmcy0+b3Blbl93YWl0LCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKIAkJc2NoZWR1bGUoKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQlnb3RvIG91dDI7CiAJCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwogCX0KIApAQCAtMTg0MCwxNyArMTg0OSwyMSBAQAogCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCX0KIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMocykpKQotCQkJcmV0dXJuIHJldDsKKwkJCWdvdG8gb3V0OwogCX0KIAogCXMtPm9wZW5fbW9kZSB8PSBmaWxlLT5mX21vZGUgJiAoRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFKTsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwogCW11dGV4X2luaXQoJnMtPnNlbSk7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOworb3V0MjoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMTg4NSwxNSArMTg5OCwxNSBAQAogfQogCiBzdGF0aWMgLypjb25zdCAqLyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1MTU1MF9hdWRpb19mb3BzID0gewotCW93bmVyOgkJVEhJU19NT0RVTEUsCi0JbGxzZWVrOgkJYXUxNTUwX2xsc2VlaywKLQlyZWFkOgkJYXUxNTUwX3JlYWQsCi0Jd3JpdGU6CQlhdTE1NTBfd3JpdGUsCi0JcG9sbDoJCWF1MTU1MF9wb2xsLAotCWlvY3RsOgkJYXUxNTUwX2lvY3RsLAotCW1tYXA6CQlhdTE1NTBfbW1hcCwKLQlvcGVuOgkJYXUxNTUwX29wZW4sCi0JcmVsZWFzZToJYXUxNTUwX3JlbGVhc2UsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gYXUxNTUwX2xsc2VlaywKKwkucmVhZAkJPSBhdTE1NTBfcmVhZCwKKwkud3JpdGUJCT0gYXUxNTUwX3dyaXRlLAorCS5wb2xsCQk9IGF1MTU1MF9wb2xsLAorCS51bmxvY2tlZF9pb2N0bAk9IGF1MTU1MF91bmxvY2tlZF9pb2N0bCwKKwkubW1hcAkJPSBhdTE1NTBfbW1hcCwKKwkub3BlbgkJPSBhdTE1NTBfb3BlbiwKKwkucmVsZWFzZQk9IGF1MTU1MF9yZWxlYXNlLAogfTsKIAogTU9EVUxFX0FVVEhPUigiQWR2YW5jZWQgTWljcm8gRGV2aWNlcyAoQU1EKSwgZGFuQGVtYmVkZGVkZWRnZS5jb20iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDNmM2MzZjcuLjZlY2Q0MWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMzIzLDkgKzMyMywxMyBAQAogCiBzdGF0aWMgaW50IG1peGVyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKCF0cnlfbW9kdWxlX2dldChkbWFzb3VuZC5tYWNoLm93bmVyKSkKKwlsb2NrX2tlcm5lbCgpOworCWlmICghdHJ5X21vZHVsZV9nZXQoZG1hc291bmQubWFjaC5vd25lcikpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJbWl4ZXIuYnVzeSA9IDE7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0zMzcsOCArMzQxLDggQEAKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IG1peGVyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsCi0JCSAgICAgICB1X2xvbmcgYXJnKQorCitzdGF0aWMgaW50IG1peGVyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAJaWYgKF9TSU9DX0RJUihjbWQpICYgX1NJT0NfV1JJVEUpCiAJICAgIG1peGVyLm1vZGlmeV9jb3VudGVyKys7CkBAIC0zNjIsMTEgKzM2NiwyMiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgbG9uZyBtaXhlcl91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQoreworCWludCByZXQ7CisKKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IG1peGVyX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaXhlcl9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCi0JLmlvY3RsCQk9IG1peGVyX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IG1peGVyX3VubG9ja2VkX2lvY3RsLAogCS5vcGVuCQk9IG1peGVyX29wZW4sCiAJLnJlbGVhc2UJPSBtaXhlcl9yZWxlYXNlLAogfTsKQEAgLTczNyw4ICs3NTIsMTEgQEAKIHsKIAlpbnQgcmM7CiAKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRtYXNvdW5kLm1hY2gub3duZXIpKQorCWxvY2tfa2VybmVsKCk7CisJaWYgKCF0cnlfbW9kdWxlX2dldChkbWFzb3VuZC5tYWNoLm93bmVyKSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCXJjID0gd3JpdGVfc3Ffb3BlbihmaWxlKTsgLyogY2hlY2tzIHRoZSBmX21vZGUgKi8KIAlpZiAocmMpCkBAIC03ODEsMTAgKzc5OSwxMSBAQAogCQlzb3VuZF9zZXRfZm9ybWF0KEFGTVRfTVVfTEFXKTsKIAl9CiAjZW5kaWYKLQorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKICBvdXQ6CiAJbW9kdWxlX3B1dChkbWFzb3VuZC5tYWNoLm93bmVyKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC05NTUsOCArOTc0LDcgQEAKIAlyZXR1cm4gMCA7CiB9CiAKLXN0YXRpYyBpbnQgc3FfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVfaW50IGNtZCwKLQkJICAgIHVfbG9uZyBhcmcpCitzdGF0aWMgaW50IHNxX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCiB7CiAJaW50IHZhbCwgcmVzdWx0OwogCXVfbG9uZyBmbXQ7CkBAIC0xMTE0LDE4ICsxMTMyLDI5IEBACiAJCXJldHVybiBJT0NUTF9PVVQoYXJnLHZhbCk7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gbWl4ZXJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcmV0dXJuIG1peGVyX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBsb25nIHNxX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1X2ludCBjbWQsIHVfbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gc3FfaW9jdGwoZmlsZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNxX2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkud3JpdGUJCT0gc3Ffd3JpdGUsCiAJLnBvbGwJCT0gc3FfcG9sbCwKLQkuaW9jdGwJCT0gc3FfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gc3FfdW5sb2NrZWRfaW9jdGwsCiAJLm9wZW4JCT0gc3Ffb3BlbiwKIAkucmVsZWFzZQk9IHNxX3JlbGVhc2UsCiB9OwpAQCAtMTIyNiwxMiArMTI1NSwxNyBAQAogewogCWNoYXIgKmJ1ZmZlciA9IHN0YXRlLmJ1ZjsKIAlpbnQgbGVuID0gMDsKKwlpbnQgcmV0OwogCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSAtRUJVU1k7CiAJaWYgKHN0YXRlLmJ1c3kpCi0JCXJldHVybiAtRUJVU1k7CisJCWdvdG8gb3V0OwogCisJcmV0ID0gLUVOT0RFVjsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRtYXNvdW5kLm1hY2gub3duZXIpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisKIAlzdGF0ZS5wdHIgPSAwOwogCXN0YXRlLmJ1c3kgPSAxOwogCkBAIC0xMjkzLDcgKzEzMjcsMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZF9jb3JlOiBzdGF0IGJ1ZmZlciBvdmVyZmxvd2VkIVxuIik7CiAKIAlzdGF0ZS5sZW4gPSBsZW47Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzdGF0ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21pZGlfc3ludGguYyBiL3NvdW5kL29zcy9taWRpX3N5bnRoLmMKaW5kZXggM2JjNzEwNC4uM2MwOTM3NCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21pZGlfc3ludGguYworKysgYi9zb3VuZC9vc3MvbWlkaV9zeW50aC5jCkBAIC01MjMsNyArNTIzLDkgQEAKIAl7CiAJCXVuc2lnbmVkIGNoYXIgICBkYXRhOwogCi0JCWdldF91c2VyKCoodW5zaWduZWQgY2hhciAqKSAmZGF0YSwgKHVuc2lnbmVkIGNoYXIgX191c2VyICopICYoKGFkZHIpW2hkcl9zaXplICsgaV0pKTsKKwkJaWYgKGdldF91c2VyKGRhdGEsCisJCSAgICAodW5zaWduZWQgY2hhciBfX3VzZXIgKikoYWRkciArIGhkcl9zaXplICsgaSkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJZW94X3NlZW4gPSAoaSA+IDAgJiYgZGF0YSAmIDB4ODApOwkvKiBFbmQgb2Ygc3lzZXggKi8KIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYyBiL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMKaW5kZXggYTFlM2Y5Ni4uMmU0OGIxNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYworKysgYi9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jCkBAIC02MzksMjEgKzYzOSwyNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGRldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CisJaW50IG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWludCByZXQ7CiAKIAlpZiAoY21kID09IE9TU19HRVRWRVJTSU9OKSB7CiAJCWludCBzb3VuZF92ZXJzaW9uID0gU09VTkRfVkVSU0lPTjsKIAkJcmV0dXJuIHB1dF91c2VyKHNvdW5kX3ZlcnNpb24sIChpbnQgX191c2VyICopYXJnKTsKIAl9CiAKLQlpZiAobWlub3IgPT0gZGV2LmRzcF9taW5vcikKLQkJcmV0dXJuIGRzcF9pb2N0bChmaWxlLCBjbWQsIGFyZyk7Ci0JZWxzZSBpZiAobWlub3IgPT0gZGV2Lm1peGVyX21pbm9yKQotCQlyZXR1cm4gbWl4ZXJfaW9jdGwoY21kLCBhcmcpOworCXJldCA9IC1FSU5WQUw7CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlsb2NrX2tlcm5lbCgpOworCWlmIChtaW5vciA9PSBkZXYuZHNwX21pbm9yKQorCQlyZXQgPSBkc3BfaW9jdGwoZmlsZSwgY21kLCBhcmcpOworCWVsc2UgaWYgKG1pbm9yID09IGRldi5taXhlcl9taW5vcikKKwkJcmV0ID0gbWl4ZXJfaW9jdGwoY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGRzcF93cml0ZV9mbHVzaCh2b2lkKQpAQCAtNzU2LDEyICs3NjEsMTUgQEAKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCWludCBlcnIgPSAwOwogCisJbG9ja19rZXJuZWwoKTsKIAlpZiAobWlub3IgPT0gZGV2LmRzcF9taW5vcikgewogCQlpZiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmCiAJCSAgICAgdGVzdF9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmRldi5mbGFncykpIHx8CiAJCSAgICAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCAmJgotCQkgICAgIHRlc3RfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmRldi5mbGFncykpKQotCQkJcmV0dXJuIC1FQlVTWTsKKwkJICAgICB0ZXN0X2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZkZXYuZmxhZ3MpKSkgeworCQkJZXJyID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KIAogCQlpZiAoKGVyciA9IGRzcF9vcGVuKGZpbGUpKSA+PSAwKSB7CiAJCQlkZXYubnJlc2V0cyA9IDA7CkBAIC03ODIsNyArNzkwLDggQEAKIAkJLyogbm90aGluZyAqLwogCX0gZWxzZQogCQllcnIgPSAtRUlOVkFMOwotCitvdXQ6CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExMDUsNyArMTExNCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGRldl9yZWFkLAogCS53cml0ZQkJPSBkZXZfd3JpdGUsCi0JLmlvY3RsCQk9IGRldl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwJPSBkZXZfaW9jdGwsCiAJLm9wZW4JCT0gZGV2X29wZW4sCiAJLnJlbGVhc2UJPSBkZXZfcmVsZWFzZSwKIH07CkBAIC0xMzkxLDkgKzE0MDAsMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ291bGRuJ3QgZ3JhYiBJUlEgJWRcbiIsIGRldi5pcnEpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlyZXF1ZXN0X3JlZ2lvbihkZXYuaW8sIGRldi5udW1pbywgZGV2Lm5hbWUpOworCWlmIChyZXF1ZXN0X3JlZ2lvbihkZXYuaW8sIGRldi5udW1pbywgZGV2Lm5hbWUpID09IE5VTEwpIHsKKwkJZnJlZV9pcnEoZGV2LmlycSwgJmRldik7CisJCXJldHVybiAtRUJVU1k7CisJfQogCi0gICAgICAgIGlmICgoZXJyID0gZHNwX2Z1bGxfcmVzZXQoKSkgPCAwKSB7CisJZXJyID0gZHNwX2Z1bGxfcmVzZXQoKTsKKwlpZiAoZXJyIDwgMCkgewogCQlyZWxlYXNlX3JlZ2lvbihkZXYuaW8sIGRldi5udW1pbyk7CiAJCWZyZWVfaXJxKGRldi5pcnEsICZkZXYpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jIGIvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCmluZGV4IDQxNTM3NTIuLmZkYjU4ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYworKysgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKQEAgLTE1LDcgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgpAQCAtOTIsNyArOTQsNyBAQAogCXdha2V1cHNfcGVyX3NlY29uZCA9IGt0aW1lX3NldCgwLCAxMDAwMDAwMDAwIC8gcmF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgZGFjX2F1ZGlvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBkYWNfYXVkaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgdmFsOwpAQCAtMTU4LDYgKzE2MCwxNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgbG9uZyBkYWNfYXVkaW9fdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVfaW50IGNtZCwgdV9sb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBkYWNfYXVkaW9faW9jdGwoZmlsZSwgY21kLCBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRhY19hdWRpb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgICAgbG9mZl90ICogcHBvcykKIHsKQEAgLTIxNiwxMyArMjI5LDE3IEBACiB7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCiAJCXJldHVybiAtRU5PREVWOwotCWlmIChpbl91c2UpCisKKwlsb2NrX2tlcm5lbCgpOworCWlmIChpbl91c2UpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCWluX3VzZSA9IDE7CiAKIAlkYWNfYXVkaW9fc3RhcnQoKTsKLQorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM3LDggKzI1NCw4IEBACiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjX2F1ZGlvX2ZvcHMgPSB7CiAgICAgICAucmVhZCA9CQlkYWNfYXVkaW9fcmVhZCwKLSAgICAgIC53cml0ZSA9CWRhY19hdWRpb193cml0ZSwKLSAgICAgIC5pb2N0bCA9CWRhY19hdWRpb19pb2N0bCwKKyAgICAgIC53cml0ZSA9CQlkYWNfYXVkaW9fd3JpdGUsCisgICAgICAudW5sb2NrZWRfaW9jdGwgPQlkYWNfYXVkaW9fdW5sb2NrZWRfaW9jdGwsCiAgICAgICAub3BlbiA9CQlkYWNfYXVkaW9fb3BlbiwKICAgICAgIC5yZWxlYXNlID0JZGFjX2F1ZGlvX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NvdW5kY2FyZC5jIGIvc291bmQvb3NzL3NvdW5kY2FyZC5jCmluZGV4IDJkOWM1MTMuLjkyYWE3NjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zb3VuZGNhcmQuYworKysgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKQEAgLTIxMCw0MiArMjEwLDQ0IEBACiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBtaW5vciBkZXZpY2UgJWRcbiIsIGRldik7CiAJCXJldHVybiAtRU5YSU87CiAJfQorCWxvY2tfa2VybmVsKCk7CiAJc3dpdGNoIChkZXYgJiAweDBmKSB7CiAJY2FzZSBTTkRfREVWX0NUTDoKIAkJZGV2ID4+PSA0OwogCQlpZiAoZGV2ID49IDAgJiYgZGV2IDwgTUFYX01JWEVSX0RFViAmJiBtaXhlcl9kZXZzW2Rldl0gPT0gTlVMTCkgewogCQkJcmVxdWVzdF9tb2R1bGUoIm1peGVyJWQiLCBkZXYpOwogCQl9CisJCXJldHZhbCA9IC1FTlhJTzsKIAkJaWYgKGRldiAmJiAoZGV2ID49IG51bV9taXhlcnMgfHwgbWl4ZXJfZGV2c1tkZXZdID09IE5VTEwpKQotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWJyZWFrOwogCQogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KG1peGVyX2RldnNbZGV2XS0+b3duZXIpKQotCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWJyZWFrOworCisJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX1NFUToKIAljYXNlIFNORF9ERVZfU0VRMjoKLQkJaWYgKChyZXR2YWwgPSBzZXF1ZW5jZXJfb3BlbihkZXYsIGZpbGUpKSA8IDApCi0JCQlyZXR1cm4gcmV0dmFsOworCQlyZXR2YWwgPSBzZXF1ZW5jZXJfb3BlbihkZXYsIGZpbGUpOwogCQlicmVhazsKIAogCWNhc2UgU05EX0RFVl9NSURJTjoKLQkJaWYgKChyZXR2YWwgPSBNSURJYnVmX29wZW4oZGV2LCBmaWxlKSkgPCAwKQotCQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dmFsID0gTUlESWJ1Zl9vcGVuKGRldiwgZmlsZSk7CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfREVWX0RTUDoKIAljYXNlIFNORF9ERVZfRFNQMTY6CiAJY2FzZSBTTkRfREVWX0FVRElPOgotCQlpZiAoKHJldHZhbCA9IGF1ZGlvX29wZW4oZGV2LCBmaWxlKSkgPCAwKQotCQkJcmV0dXJuIHJldHZhbDsKKwkJcmV0dmFsID0gYXVkaW9fb3BlbihkZXYsIGZpbGUpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBtaW5vciBkZXZpY2UgJWRcbiIsIGRldik7Ci0JCXJldHVybiAtRU5YSU87CisJCXJldHZhbCA9IC1FTlhJTzsKIAl9CiAKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IDMxMzZjODguLmIxNTg0MGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtNjgsNiArNjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0xNTM0LDYgKzE1MzUsNyBAQAogCUNTX0RCR09VVChDU19GVU5DVElPTiB8IENTX09QRU4sIDQsCiAJCSAgcHJpbnRrKEtFUk5fSU5GTyAiY3M0Mjk3YTogY3M0Mjk3YV9vcGVuX21peGRldigpK1xuIikpOwogCisJbG9ja19rZXJuZWwoKTsKIAlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmY3M0Mjk3YV9kZXZzKQogCXsKIAkJcyA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBjczQyOTdhX3N0YXRlLCBsaXN0KTsKQEAgLTE1NDQsNiArMTU0Niw4IEBACiAJewogCQlDU19EQkdPVVQoQ1NfRlVOQ1RJT04gfCBDU19PUEVOIHwgQ1NfRVJST1IsIDIsCiAJCQlwcmludGsoS0VSTl9JTkZPICJjczQyOTdhOiBjczQyOTdhX29wZW5fbWl4ZGV2KCktIC1FTk9ERVZcbiIpKTsKKworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlWQUxJREFURV9TVEFURShzKTsKQEAgLTE1NTEsNiArMTU1NSw3IEBACiAKIAlDU19EQkdPVVQoQ1NfRlVOQ1RJT04gfCBDU19PUEVOLCA0LAogCQkgIHByaW50ayhLRVJOX0lORk8gImNzNDI5N2E6IGNzNDI5N2Ffb3Blbl9taXhkZXYoKS0gMFxuIikpOworCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KQEAgLTE1NjYsMTEgKzE1NzEsMTUgQEAKIH0KIAogCi1zdGF0aWMgaW50IGNzNDI5N2FfaW9jdGxfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCBjczQyOTdhX2lvY3RsX21peGRldihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gbWl4ZXJfaW9jdGwoKHN0cnVjdCBjczQyOTdhX3N0YXRlICopIGZpbGUtPnByaXZhdGVfZGF0YSwgY21kLAorCWludCByZXQ7CisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBtaXhlcl9pb2N0bCgoc3RydWN0IGNzNDI5N2Ffc3RhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhLCBjbWQsCiAJCQkgICBhcmcpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTE1ODAsNyArMTU4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjczQyOTdhX21peGVyX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5pb2N0bAkJPSBjczQyOTdhX2lvY3RsX21peGRldiwKKwkudW5sb2NrZWRfaW9jdGwJPSBjczQyOTdhX2lvY3RsX21peGRldiwKIAkub3BlbgkJPSBjczQyOTdhX29wZW5fbWl4ZGV2LAogCS5yZWxlYXNlCT0gY3M0Mjk3YV9yZWxlYXNlX21peGRldiwKIH07CkBAIC0xOTQ0LDcgKzE5NTMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY3M0Mjk3YV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKK3N0YXRpYyBpbnQgY3M0Mjk3YV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjczQyOTdhX3N0YXRlICpzID0KQEAgLTIzMzcsNiArMjM0NiwxNiBAQAogCXJldHVybiBtaXhlcl9pb2N0bChzLCBjbWQsIGFyZyk7CiB9CiAKK3N0YXRpYyBsb25nIGNzNDI5N2FfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVfaW50IGNtZCwgdV9sb25nIGFyZykKK3sKKwlpbnQgcmV0OworCisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBjczQyOTdhX2lvY3RsKGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgaW50IGNzNDI5N2FfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTIzNjksNyArMjM4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3M0Mjk3YV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBjczQyOTdhX2xvY2tlZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiAJc3RydWN0IGNzNDI5N2Ffc3RhdGUgKnM9TlVMTDsKQEAgLTI0ODYsNiArMjUwNSwxNiBAQAogCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKIH0KIAorc3RhdGljIGludCBjczQyOTdhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gY3M0Mjk3YV9vcGVuKGlub2RlLCBmaWxlKTsKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gcmV0OworfQogCiAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC8vICAgV2F2ZSAoYXVkaW8pIGZpbGUgb3BlcmF0aW9ucyBzdHJ1Y3QuCkBAIC0yNDk2LDcgKzI1MjUsNyBAQAogCS5yZWFkCQk9IGNzNDI5N2FfcmVhZCwKIAkud3JpdGUJCT0gY3M0Mjk3YV93cml0ZSwKIAkucG9sbAkJPSBjczQyOTdhX3BvbGwsCi0JLmlvY3RsCQk9IGNzNDI5N2FfaW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gY3M0Mjk3YV91bmxvY2tlZF9pb2N0bCwKIAkubW1hcAkJPSBjczQyOTdhX21tYXAsCiAJLm9wZW4JCT0gY3M0Mjk3YV9vcGVuLAogCS5yZWxlYXNlCT0gY3M0Mjk3YV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3ZpZGMuYyBiL3NvdW5kL29zcy92aWRjLmMKaW5kZXggYWMzOWE1My4uZjBlMGNhYSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3ZpZGMuYworKysgYi9zb3VuZC9vc3MvdmlkYy5jCkBAIC00OTEsOSArNDkxLDYgQEAKIAl2aWRjX2FkZXYgPSBhZGV2OwogCXZpZGNfbWl4ZXJfc2V0KFNPVU5EX01JWEVSX1ZPTFVNRSwgKDg1IHwgODUgPDwgOCkpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfU09VTkRfU09GVE9TUykgfHwgZGVmaW5lZChDT05GSUdfU09VTkRfU09GVE9TU19NT0RVTEUpCi0Jc29mdG9zc19kZXYgPSBhZGV2OwotI2VuZGlmCiAJcmV0dXJuOwogCiBpcnFfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3Z3c25kLmMgYi9zb3VuZC9vc3MvdndzbmQuYwppbmRleCAyMGIzYjMyLi44Y2Q3M2NkIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdndzbmQuYworKysgYi9zb3VuZC9vc3MvdndzbmQuYwpAQCAtMjQyOSw4ICsyNDI5LDcgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIGludCB2d3NuZF9hdWRpb19kb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGludCB2d3NuZF9hdWRpb19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgY21kLAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMjQ0Niw4ICsyNDQ1LDggQEAKIAlpbnQgaXZhbDsKIAogCQotCURCR0VWKCIoaW5vZGU9MHglcCwgZmlsZT0weCVwLCBjbWQ9MHgleCwgYXJnPTB4JWx4KVxuIiwKLQkgICAgICBpbm9kZSwgZmlsZSwgY21kLCBhcmcpOworCURCR0VWKCIoZmlsZT0weCVwLCBjbWQ9MHgleCwgYXJnPTB4JWx4KVxuIiwKKwkgICAgICBmaWxlLCBjbWQsIGFyZyk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE9TU19HRVRWRVJTSU9OOgkJLyogX1NJT1IgKCdNJywgMTE4LCBpbnQpICovCiAJCURCR1goIk9TU19HRVRWRVJTSU9OXG4iKTsKQEAgLTI4ODUsMTcgKzI4ODQsMTkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2d3NuZF9hdWRpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGxvbmcgdndzbmRfYXVkaW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAl2d3NuZF9kZXZfdCAqZGV2YyA9ICh2d3NuZF9kZXZfdCAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHJldDsKIAorCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmZGV2Yy0+aW9fbXV0ZXgpOwotCXJldCA9IHZ3c25kX2F1ZGlvX2RvX2lvY3RsKGlub2RlLCBmaWxlLCBjbWQsIGFyZyk7CisJcmV0ID0gdndzbmRfYXVkaW9fZG9faW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCW11dGV4X3VubG9jaygmZGV2Yy0+aW9fbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5MjEsNiArMjkyMiw3IEBACiAKIAlEQkdFKCIoaW5vZGU9MHglcCwgZmlsZT0weCVwKVxuIiwgaW5vZGUsIGZpbGUpOwogCisJbG9ja19rZXJuZWwoKTsKIAlJTkNfVVNFX0NPVU5UOwogCWZvciAoZGV2YyA9IHZ3c25kX2Rldl9saXN0OyBkZXZjOyBkZXZjID0gZGV2Yy0+bmV4dF9kZXYpCiAJCWlmICgoZGV2Yy0+YXVkaW9fbWlub3IgJiB+MHgwRikgPT0gKG1pbm9yICYgfjB4MEYpKQpAQCAtMjkyOCw2ICsyOTMwLDcgQEAKIAogCWlmIChkZXZjID09IE5VTEwpIHsKIAkJREVDX1VTRV9DT1VOVDsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI5MzYsMTEgKzI5MzksMTMgQEAKIAkJbXV0ZXhfdW5sb2NrKCZkZXZjLT5vcGVuX211dGV4KTsKIAkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CiAJCQlERUNfVVNFX0NPVU5UOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZkZXZjLT5vcGVuX3dhaXQpOwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCURFQ19VU0VfQ09VTlQ7CisJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCQl9CiAJCW11dGV4X2xvY2soJmRldmMtPm9wZW5fbXV0ZXgpOwpAQCAtMjk5Myw2ICsyOTk4LDcgQEAKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldmM7CiAJREJHUlYoKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNDQsNyArMzA1MCw3IEBACiAJLnJlYWQgPQkJdndzbmRfYXVkaW9fcmVhZCwKIAkud3JpdGUgPQl2d3NuZF9hdWRpb193cml0ZSwKIAkucG9sbCA9CQl2d3NuZF9hdWRpb19wb2xsLAotCS5pb2N0bCA9CXZ3c25kX2F1ZGlvX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9IHZ3c25kX2F1ZGlvX2lvY3RsLAogCS5tbWFwID0JCXZ3c25kX2F1ZGlvX21tYXAsCiAJLm9wZW4gPQkJdndzbmRfYXVkaW9fb3BlbiwKIAkucmVsZWFzZSA9CXZ3c25kX2F1ZGlvX3JlbGVhc2UsCkBAIC0zMDYyLDE1ICszMDY4LDE4IEBACiAJREJHRVYoIihpbm9kZT0weCVwLCBmaWxlPTB4JXApXG4iLCBpbm9kZSwgZmlsZSk7CiAKIAlJTkNfVVNFX0NPVU5UOworCWxvY2tfa2VybmVsKCk7CiAJZm9yIChkZXZjID0gdndzbmRfZGV2X2xpc3Q7IGRldmM7IGRldmMgPSBkZXZjLT5uZXh0X2RldikKIAkJaWYgKGRldmMtPm1peGVyX21pbm9yID09IGltaW5vcihpbm9kZSkpCiAJCQlicmVhazsKIAogCWlmIChkZXZjID09IE5VTEwpIHsKIAkJREVDX1VTRV9DT1VOVDsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2YzsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMDMsOCArMzIxMiw3IEBACiAKIC8qIFRoaXMgaXMgdGhlIGlvY3RsIGVudHJ5IHRvIHRoZSBtaXhlciBkcml2ZXIuICovCiAKLXN0YXRpYyBpbnQgdndzbmRfbWl4ZXJfaW9jdGwoc3RydWN0IGlub2RlICppb2N0bCwKLQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGxvbmcgdndzbmRfbWl4ZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0zMjE1LDYgKzMyMjMsNyBAQAogCiAJREJHRVYoIihkZXZjPTB4JXAsIGNtZD0weCV4LCBhcmc9MHglbHgpXG4iLCBkZXZjLCBjbWQsIGFyZyk7CiAKKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmRldmMtPm1peF9tdXRleCk7CiAJewogCQlpZiAoKGNtZCAmIH5ucm1hc2spID09IE1JWEVSX1JFQUQoMCkpCkBAIC0zMjI1LDEzICszMjM0LDE0IEBACiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0KIAltdXRleF91bmxvY2soJmRldmMtPm1peF9tdXRleCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZ3c25kX21peGVyX2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLmxsc2VlayA9CW5vX2xsc2VlaywKLQkuaW9jdGwgPQl2d3NuZF9taXhlcl9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSB2d3NuZF9taXhlcl9pb2N0bCwKIAkub3BlbiA9CQl2d3NuZF9taXhlcl9vcGVuLAogCS5yZWxlYXNlID0JdndzbmRfbWl4ZXJfcmVsZWFzZSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jIGIvc291bmQvb3NzL3dhdmVhcnRpc3QuYwppbmRleCBlNjg4ZGRlLi41MjQ2ODc0IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvd2F2ZWFydGlzdC5jCisrKyBiL3NvdW5kL29zcy93YXZlYXJ0aXN0LmMKQEAgLTE4NCwxNCArMTg0LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiB3YXZlYXJ0aXN0X3NsZWVwKGludCB0aW1lb3V0X21zKQogewotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gdGltZW91dF9tcyAqIDEwICogSFogLyAxMDA7Ci0KLQlkbyB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCX0gd2hpbGUgKHRpbWVvdXQpOwotCi0JcmV0dXJuIDA7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMqMTAwKTsKKwlyZXR1cm4gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRpbWVvdXQpOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzNDAwMC5jIGIvc291bmQvcGNpL2FsczQwMDAuYwppbmRleCA2Y2YxZGU4Li4wZTI0N2NiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTc2Myw5ICs3NjMsOSBAQAogCS8qIFNQRUNTX1BBR0U6IDM5ICovCiAJZm9yIChpID0gQUxTNEtfR0NSOTFfRE1BMF9BRERSOyBpIDw9IEFMUzRLX0dDUjk2X0RNQTNfTU9ERV9DT1VOVDsgKytpKQogCQlzbmRfYWxzNGtfZ2NyX3dyaXRlKGNoaXAsIGksIDApOwotCQorCS8qIGVuYWJsZSBidXJzdCBtb2RlIHRvIHByZXZlbnQgZHJvcG91dHMgZHVyaW5nIGhpZ2ggUENJIGJ1cyB1c2FnZSAqLwogCXNuZF9hbHM0a19nY3Jfd3JpdGUoY2hpcCwgQUxTNEtfR0NSOTlfRE1BX0VNVUxBVElPTl9DVFJMLAotCQlzbmRfYWxzNGtfZ2NyX3JlYWQoY2hpcCwgQUxTNEtfR0NSOTlfRE1BX0VNVUxBVElPTl9DVFJMKSk7CisJCShzbmRfYWxzNGtfZ2NyX3JlYWQoY2hpcCwgQUxTNEtfR0NSOTlfRE1BX0VNVUxBVElPTl9DVFJMKSAmIH4weDA3KSB8IDB4MDQpOwogCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jIGIvc291bmQvcGNpL2FzaWhwaS9hc2locGkuYwppbmRleCAxZGI1ODZhLi5jODBiMGI4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKQEAgLTQ2MCw2ICs0NjAsNyBAQAogCXN0cnVjdCBzbmRfY2FyZF9hc2locGkgKmNhcmQgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CiAJaW50IGVycjsKIAl1MTYgZm9ybWF0OworCWludCB3aWR0aDsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NlYzsKIAogCXByaW50X2h3cGFyYW1zKHBhcmFtcyk7CkBAIC01MTIsOSArNTEzLDEwIEBACiAJCQkJZHBjbS0+aHBpX2J1ZmZlcl9hdHRhY2hlZCk7CiAJfQogCWJ5dGVzX3Blcl9zZWMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7Ci0JYnl0ZXNfcGVyX3NlYyAqPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCXdpZHRoID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwlieXRlc19wZXJfc2VjICo9IHdpZHRoOwogCWJ5dGVzX3Blcl9zZWMgLz0gODsKLQlpZiAoYnl0ZXNfcGVyX3NlYyA8PSAwKQorCWlmICh3aWR0aCA8IDAgfHwgYnl0ZXNfcGVyX3NlYyA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRwY20tPmJ5dGVzX3Blcl9zZWMgPSBieXRlc19wZXJfc2VjOwpAQCAtMTM4Myw3ICsxMzg1LDcgQEAKIAogY29tcGlsZV90aW1lX2Fzc2VydCgKIAkoQVJSQVlfU0laRShhc2locGlfc3JjX25hbWVzKSA9PQotCQkoSFBJX1NPVVJDRU5PREVfTEFTVF9JTkRFWC1IUElfU09VUkNFTk9ERV9CQVNFKzEpKSwKKwkJKEhQSV9TT1VSQ0VOT0RFX0xBU1RfSU5ERVgtSFBJX1NPVVJDRU5PREVfTk9ORSsxKSksCiAJYXNzZXJ0X3NyY19uYW1lc19zaXplKTsKIAogI2lmIEFTSV9TVFlMRV9OQU1FUwpAQCAtMTQxNCw3ICsxNDE2LDcgQEAKIAogY29tcGlsZV90aW1lX2Fzc2VydCgKIAkoQVJSQVlfU0laRShhc2locGlfZHN0X25hbWVzKSA9PQotCQkoSFBJX0RFU1ROT0RFX0xBU1RfSU5ERVgtSFBJX0RFU1ROT0RFX0JBU0UrMSkpLAorCQkoSFBJX0RFU1ROT0RFX0xBU1RfSU5ERVgtSFBJX0RFU1ROT0RFX05PTkUrMSkpLAogCWFzc2VydF9kc3RfbmFtZXNfc2l6ZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGN0bF9hZGQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY3RsLApAQCAtMjE3MSw3ICsyMTczLDcgQEAKIAkJCQkJJnNyY19ub2RlX3R5cGUsICZzcmNfbm9kZV9pbmRleCk7CiAKIAlzcHJpbnRmKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsICIlcyAlZCIsCi0JCWFzaWhwaV9zcmNfbmFtZXNbc3JjX25vZGVfdHlwZSAtIEhQSV9TT1VSQ0VOT0RFX0JBU0VdLAorCQlhc2locGlfc3JjX25hbWVzW3NyY19ub2RlX3R5cGUgLSBIUElfU09VUkNFTk9ERV9OT05FXSwKIAkJc3JjX25vZGVfaW5kZXgpOwogCXJldHVybiAwOwogfQpAQCAtMjYwMyw4ICsyNjA1LDggQEAKIAogCQl9CiAKLQkJaHBpX2N0bC5zcmNfbm9kZV90eXBlIC09IEhQSV9TT1VSQ0VOT0RFX0JBU0U7Ci0JCWhwaV9jdGwuZHN0X25vZGVfdHlwZSAtPSBIUElfREVTVE5PREVfQkFTRTsKKwkJaHBpX2N0bC5zcmNfbm9kZV90eXBlIC09IEhQSV9TT1VSQ0VOT0RFX05PTkU7CisJCWhwaV9jdGwuZHN0X25vZGVfdHlwZSAtPSBIUElfREVTVE5PREVfTk9ORTsKIAogCQkvKiBBU0k1MHh4IGluIFNTWCBtb2RlIGhhcyBtdWx0aXBsZSBtZXRlcnMgb24gdGhlIHNhbWUgbm9kZS4KIAkJICAgVXNlIHN1YmluZGV4IHRvIGNyZWF0ZSBkaXN0aW5jdCBBTFNBIGNvbnRyb2xzCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaS5oIGIvc291bmQvcGNpL2FzaWhwaS9ocGkuaAppbmRleCAwMTczYmJlLi4yMzM5OWQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaS5oCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpLmgKQEAgLTUwLDcgKzUwLDggQEAKICNkZWZpbmUgSFBJX1ZFUl9SRUxFQVNFKHYpICgoaW50KSh2ICYgMHhGRikpCiAKIC8qIFVzZSBzaW5nbGUgZGlnaXRzIGZvciB2ZXJzaW9ucyBsZXNzIHRoYXQgMTAgdG8gYXZvaWQgb2N0YWwuICovCi0jZGVmaW5lIEhQSV9WRVIgSFBJX1ZFUlNJT05fQ09OU1RSVUNUT1IoNEwsIDMsIDI1KQorI2RlZmluZSBIUElfVkVSIEhQSV9WRVJTSU9OX0NPTlNUUlVDVE9SKDRMLCA0LCAxKQorI2RlZmluZSBIUElfVkVSX1NUUklORyAiNC4wNC4wMSIKIAogLyogTGlicmFyeSB2ZXJzaW9uIGFzIGRvY3VtZW50ZWQgaW4gaHBpLWFwaS12ZXJzaW9ucy50eHQgKi8KICNkZWZpbmUgSFBJX0xJQl9WRVIgIEhQSV9WRVJTSU9OX0NPTlNUUlVDVE9SKDksIDAsIDApCkBAIC0yMDMsOCArMjA0LDYgQEAKIAlleGlzdHMgb24gYSBkZXN0aW5hdGlvbiBub2RlIGNhbiBiZSBzZWFyY2hlZCBmb3IgdXNpbmcgYSBzb3VyY2UKIAlub2RlIHZhbHVlIG9mIGVpdGhlciAwLCBvciBIUElfU09VUkNFTk9ERV9OT05FICovCiAJSFBJX1NPVVJDRU5PREVfTk9ORSA9IDEwMCwKLQkvKiogXGRlcHJlY2F0ZWQgVXNlIEhQSV9TT1VSQ0VOT0RFX05PTkUgaW5zdGVhZC4gKi8KLQlIUElfU09VUkNFTk9ERV9CQVNFID0gMTAwLAogCS8qKiBPdXQgU3RyZWFtIChQbGF5KSBub2RlLiAqLwogCUhQSV9TT1VSQ0VOT0RFX09TVFJFQU0gPSAxMDEsCiAJLyoqIExpbmUgaW4gbm9kZSAtIGNvdWxkIGJlIGFuYWxvZywgQUVTL0VCVSBvciBuZXR3b3JrLiAqLwpAQCAtMjM1LDggKzIzNCw2IEBACiAJZXhpc3RzIG9uIGEgc291cmNlIG5vZGUgY2FuIGJlIHNlYXJjaGVkIGZvciB1c2luZyBhIGRlc3RpbmF0aW9uCiAJbm9kZSB2YWx1ZSBvZiBlaXRoZXIgMCwgb3IgSFBJX0RFU1ROT0RFX05PTkUgKi8KIAlIUElfREVTVE5PREVfTk9ORSA9IDIwMCwKLQkvKiogXGRlcHJlY2F0ZWQgVXNlIEhQSV9ERVNUTk9ERV9OT05FIGluc3RlYWQuICovCi0JSFBJX0RFU1ROT0RFX0JBU0UgPSAyMDAsCiAJLyoqIEluIFN0cmVhbSAoUmVjb3JkKSBub2RlLiAqLwogCUhQSV9ERVNUTk9ERV9JU1RSRUFNID0gMjAxLAogCUhQSV9ERVNUTk9ERV9MSU5FT1VUID0gMjAyLAkgICAgLyoqPCBsaW5lIG91dCBub2RlLiAqLwpAQCAtNDMyLDcgKzQyOSwxOCBAQAogUHJvcGVydHkgMSAtIGFkYXB0ZXIgY2FuIGRvIHNhbXBsZXJhdGUgY29udmVyc2lvbiAoTVJYKQogUHJvcGVydHkgMiAtIGFkYXB0ZXIgY2FuIGRvIHRpbWVzdHJldGNoIChUU1gpCiAqLwotCUhQSV9BREFQVEVSX1BST1BFUlRZX0NBUFMyID0gMjY5CisJSFBJX0FEQVBURVJfUFJPUEVSVFlfQ0FQUzIgPSAyNjksCisKKy8qKiBSZWFkb25seSBhZGFwdGVyIHN5bmMgaGVhZGVyIGNvbm5lY3Rpb24gY291bnQuCisqLworCUhQSV9BREFQVEVSX1BST1BFUlRZX1NZTkNfSEVBREVSX0NPTk5FQ1RJT05TID0gMjcwLAorLyoqIFJlYWRvbmx5IHN1cHBvcnRzIFNTWDIgcHJvcGVydHkuCitJbmRpY2F0ZXMgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgU1NYMiBpbiBzb21lIG1vZGUgc2V0dGluZy4gVGhlCityZXR1cm4gdmFsdWUgaXMgdHJ1ZSAoMSkgb3IgZmFsc2UgKDApLiBJZiB0aGUgY3VycmVudCBhZGFwdGVyCittb2RlIGlzIE1PTk8gU1NYMiBpcyBkaXNhYmxlZCwgZXZlbiB0aG91Z2ggdGhpcyBwcm9wZXJ0eSB3aWxsCityZXR1cm4gdHJ1ZS4KKyovCisJSFBJX0FEQVBURVJfUFJPUEVSVFlfU1VQUE9SVFNfU1NYMiA9IDI3MQogfTsKIAogLyoqIEFkYXB0ZXIgbW9kZSBjb21tYW5kcwpAQCAtODEzLDggKzgyMSw2IEBACiAvKiogVGhlIHNhbXBsZWNsb2NrIG91dHB1dCBpcyBkZXJpdmVkIGZyb20gaXRzIGxvY2FsIHNhbXBsZXJhdGUgZ2VuZXJhdG9yLgogICAgIFRoZSBsb2NhbCBzYW1wbGVyYXRlIG1heSBiZSBzZXQgdXNpbmcgSFBJX1NhbXBsZUNsb2NrX1NldExvY2FsUmF0ZSgpLiAqLwogCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfTE9DQUwgPSAxLAotLyoqIFxkZXByZWNhdGVkIFVzZSBIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0xPQ0FMIGluc3RlYWQgKi8KLQlIUElfU0FNUExFQ0xPQ0tfU09VUkNFX0FEQVBURVIgPSAxLAogLyoqIFRoZSBhZGFwdGVyIGlzIGNsb2NrZWQgZnJvbSBhIGRlZGljYXRlZCBBRVMvRUJVIFNhbXBsZUNsb2NrIGlucHV0LiovCiAJSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9BRVNFQlVfU1lOQyA9IDIsCiAvKiogRnJvbSBleHRlcm5hbCB3b3JkY2xvY2sgY29ubmVjdG9yICovCkBAIC04MjUsMTAgKzgzMSw2IEBACiAJSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9TTVBURSA9IDUsCiAvKiogT25lIG9mIHRoZSBhZXNlYnUgaW5wdXRzICovCiAJSFBJX1NBTVBMRUNMT0NLX1NPVVJDRV9BRVNFQlVfSU5QVVQgPSA2LAotLyoqIFxkZXByZWNhdGVkIFRoZSBmaXJzdCBhZXNlYnUgaW5wdXQgd2l0aCBhIHZhbGlkIHNpZ25hbAotU3VwZXJzZWRlZCBieSBzZXBhcmF0ZSBBdXRvIGVuYWJsZSBmbGFnCi0qLwotCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfQUVTRUJVX0FVVE8gPSA3LAogLyoqIEZyb20gYSBuZXR3b3JrIGludGVyZmFjZSBlLmcuIENvYnJhbmV0IG9yIExpdmV3aXJlIGF0IGVpdGhlciA0OCBvciA5NmtIeiAqLwogCUhQSV9TQU1QTEVDTE9DS19TT1VSQ0VfTkVUV09SSyA9IDgsCiAvKiogRnJvbSBwcmV2aW91cyBhZGphY2VudCBtb2R1bGUgKEFTSTI0MTYgb25seSkqLwpAQCAtMTAxNSw4ICsxMDE3LDYgQEAKIAlIUElfRVJST1JfQ09OVFJPTF9ESVNBQkxFRCA9IDQwNCwKIAkvKiogSTJDIHRyYW5zYWN0aW9uIGZhaWxlZCBkdWUgdG8gYSBtaXNzaW5nIEFDSy4gKi8KIAlIUElfRVJST1JfQ09OVFJPTF9JMkNfTUlTU0lOR19BQ0sgPSA0MDUsCi0JLyoqIENvbnRyb2wgYXR0cmlidXRlIGlzIHZhbGlkLCBidXQgbm90IHN1cHBvcnRlZCBieSB0aGlzIGhhcmR3YXJlLiAqLwotCUhQSV9FUlJPUl9VTlNVUFBPUlRFRF9DT05UUk9MX0FUVFJJQlVURSA9IDQwNiwKIAkvKiogQ29udHJvbCBpcyBidXN5LCBvciBjb21pbmcgb3V0IG9mCiAJcmVzZXQgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBhdCB0aGlzIHRpbWUuICovCiAJSFBJX0VSUk9SX0NPTlRST0xfTk9UX1JFQURZID0gNDA3LApAQCAtMTgyNywxMyArMTgyNyw0MSBAQAogICBDb21wcmVzc29yIEV4cGFuZGVyIGNvbnRyb2wKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXUxNiBocGlfY29tcGFuZGVyX3NldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgYXR0YWNrLCB1MTYgZGVjYXksIHNob3J0IHJhdGlvMTAwLCBzaG9ydCB0aHJlc2hvbGQwXzAxZEIsCi0Jc2hvcnQgbWFrZXVwX2dhaW4wXzAxZEIpOwordTE2IGhwaV9jb21wYW5kZXJfc2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgb24pOwogCi11MTYgaHBpX2NvbXBhbmRlcl9nZXQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCi0JdTE2ICpwd19hdHRhY2ssIHUxNiAqcHdfZGVjYXksIHNob3J0ICpwd19yYXRpbzEwMCwKLQlzaG9ydCAqcG5fdGhyZXNob2xkMF8wMWRCLCBzaG9ydCAqcG5fbWFrZXVwX2dhaW4wXzAxZEIpOwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgKnBvbik7CisKK3UxNiBocGlfY29tcGFuZGVyX3NldF9tYWtldXBfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCBzaG9ydCBtYWtldXBfZ2FpbjBfMDFkQik7CisKK3UxNiBocGlfY29tcGFuZGVyX2dldF9tYWtldXBfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCBzaG9ydCAqcG5fbWFrZXVwX2dhaW4wXzAxZEIpOworCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfYXR0YWNrX3RpbWVfY29uc3RhbnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzCisJKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCB1MzIgYXR0YWNrKTsKKwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2F0dGFja190aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cworCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpwd19hdHRhY2spOworCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfZGVjYXlfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiBkZWNheSk7CisKK3UxNiBocGlfY29tcGFuZGVyX2dldF9kZWNheV90aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyICpwd19kZWNheSk7CisKK3UxNiBocGlfY29tcGFuZGVyX3NldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCisJdTMyIGhfY29udHJvbCwgdTMyIGluZGV4LCBzaG9ydCB0aHJlc2hvbGQwXzAxZEIpOworCit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgc2hvcnQgKnBuX3RocmVzaG9sZDBfMDFkQik7CisKK3UxNiBocGlfY29tcGFuZGVyX3NldF9yYXRpbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiByYXRpbzEwMCk7CisKK3UxNiBocGlfY29tcGFuZGVyX2dldF9yYXRpbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiAqcHdfcmF0aW8xMDApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBDb2JyYW5ldCBITUkgY29udHJvbApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwppbmRleCAxMmRhYjVlLi5mN2UzNzRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwpAQCAtNjg3LDYgKzY4Nyw3IEBACiAJc3dpdGNoIChwYW8tPnBjaS5zdWJzeXNfZGV2aWNlX2lkKSB7CiAJY2FzZSAweDUxMDA6CiAJY2FzZSAweDUxMTA6CS8qIEFTSTUxMDAgcmV2QiBvciBoaWdoZXIgd2l0aCBDNjcxMUQgKi8KKwljYXNlIDB4NTIwMDoJLyogQVNJNTIwMCBQQ19pZSB2ZXJzaW9uIG9mIEFTSTUxMDAgKi8KIAljYXNlIDB4NjEwMDoKIAljYXNlIDB4NjIwMDoKIAkJYm9vdF9sb2FkX2ZhbWlseSA9IEhQSV9BREFQVEVSX0ZBTUlMWV9BU0koMHg2MjAwKTsKQEAgLTExMzMsNiArMTEzNCwxMiBAQAogCQkJCQkJc3Vic3lzX2RldmljZV9pZCkgPT0KIAkJCQkJSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDUxMDApKQogCQkJCQltYXNrID0gMHgwMDAwMDAwMEw7CisJCQkJLyogQVNJNTIwMCB1c2VzIEFYNiBjb2RlLCAqLworCQkJCS8qIGJ1dCBoYXMgbm8gUExEIHIvdyByZWdpc3RlciB0byB0ZXN0ICovCisJCQkJaWYgKEhQSV9BREFQVEVSX0ZBTUlMWV9BU0kocGFvLT5wY2kuCisJCQkJCQlzdWJzeXNfZGV2aWNlX2lkKSA9PQorCQkJCQlIUElfQURBUFRFUl9GQU1JTFlfQVNJKDB4NTIwMCkpCisJCQkJCW1hc2sgPSAweDAwMDAwMDAwTDsKIAkJCQlicmVhazsKIAkJCWNhc2UgSFBJX0FEQVBURVJfRkFNSUxZX0FTSSgweDg4MDApOgogCQkJCS8qIEFTSTg4MDAgaGFzIDE2Yml0IHBhdGggdG8gRlBHQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaCBiL3NvdW5kL3BjaS9hc2locGkvaHBpX2ludGVybmFsLmgKaW5kZXggZmRkMGNlMC4uMTZmNTAyZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlfaW50ZXJuYWwuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaV9pbnRlcm5hbC5oCkBAIC0xMDQsOSArMTA0LDkgQEAKICNkZWZpbmUgU1RSX1JPTEVfRklFTERfTUFYIDI1NVUKIAogc3RydWN0IGhwaV9lbnRpdHlfc3RyIHsKLQl1aW50MTZfdCBzaXplOwotCXVpbnQ4X3QgdHlwZTsKLQl1aW50OF90IHJvbGU7CisJdTE2IHNpemU7CisJdTggdHlwZTsKKwl1OCByb2xlOwogfTsKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCkBAIC0xMTksMTEgKzExOSwxMSBAQAogI2lmICEgZGVmaW5lZChIUElfT1NfRFNQX0M2MDAwKSB8fCAoZGVmaW5lZChIUElfT1NfRFNQX0M2MDAwKSAmJiAoX19USV9DT01QSUxFUl9WRVJTSU9OX18gPiA2MDAwMDA4KSkKIAkvKiBEU1AgQzYwMDAgY29tcGlsZXIgdjYuMC44IGFuZCBsb3dlcgogCSAgIGRvIG5vdCBzdXBwb3J0ICBmbGV4aWJsZSBhcnJheSBtZW1iZXIgKi8KLQl1aW50OF90IHZhbHVlW107CisJdTggdmFsdWVbXTsKICNlbHNlCiAJLyogTk9URSEgVXNpbmcgc2l6ZW9mKHN0cnVjdCBocGlfZW50aXR5KSB3aWxsIGdpdmUgZXJyb25lb3VzIHJlc3VsdHMgKi8KICNkZWZpbmUgSFBJX0lOVEVSTkFMX1dBUk5fQUJPVVRfRU5USVRZX1ZBTFVFCi0JdWludDhfdCB2YWx1ZVsxXTsKKwl1OCB2YWx1ZVsxXTsKICNlbmRpZgogfTsKIApAQCAtMTQyLDEyICsxNDIsMTUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENPTlRST0wgQVRUUklCVVRFUyAqKioqLwogLyogKGluIG9yZGVyIG9mIGNvbnRyb2wgdHlwZSBJRCAqLwogCi0JLyogVGhpcyBhbGxvd3MgZm9yIDI1NSBjb250cm9sIHR5cGVzLCAyNTYgdW5pcXVlIGF0dHJpYnV0ZXMgZWFjaCAqLworLyogVGhpcyBhbGxvd3MgZm9yIDI1NSBjb250cm9sIHR5cGVzLCAyNTYgdW5pcXVlIGF0dHJpYnV0ZXMgZWFjaCAqLwogI2RlZmluZSBIUElfQ1RMX0FUVFIoY3RsLCBhaSkgKEhQSV9DT05UUk9MXyMjY3RsICogMHgxMDAgKyBhaSkKIAogLyogR2V0IHRoZSBzdWItaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSBmb3IgYSBjb250cm9sIHR5cGUgKi8KICNkZWZpbmUgSFBJX0NUTF9BVFRSX0lOREVYKGkpIChpJjB4ZmYpCiAKKy8qIEV4dHJhY3QgdGhlIGNvbnRyb2wgZnJvbSB0aGUgY29udHJvbCBhdHRyaWJ1dGUgKi8KKyNkZWZpbmUgSFBJX0NUTF9BVFRSX0NPTlRST0woaSkgKGk+PjgpCisKIC8qIEdlbmVyaWMgY29udHJvbCBhdHRyaWJ1dGVzLiAgKi8KIAogLyoqIEVuYWJsZSBhIGNvbnRyb2wuCkBAIC0zMTEsOCArMzE0LDcgQEAKIC8qIE1pY3JvcGhvbmUgY29udHJvbCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIEhQSV9NSUNST1BIT05FX1BIQU5UT01fUE9XRVIgSFBJX0NUTF9BVFRSKE1JQ1JPUEhPTkUsIDEpCiAKLS8qKiBFcXVhbGl6ZXIgY29udHJvbCBhdHRyaWJ1dGVzCi0qLworLyoqIEVxdWFsaXplciBjb250cm9sIGF0dHJpYnV0ZXMgKi8KIC8qKiBVc2VkIHRvIGdldCBudW1iZXIgb2YgZmlsdGVycyBpbiBhbiBFUS4gKENhbid0IHNldCkgKi8KICNkZWZpbmUgSFBJX0VRVUFMSVpFUl9OVU1fRklMVEVSUyBIUElfQ1RMX0FUVFIoRVFVQUxJWkVSLCAxKQogLyoqIFNldC9nZXQgdGhlIGZpbHRlciBieSB0eXBlLCBmcmVxLCBRLCBnYWluICovCkBAIC0zMjAsMTMgKzMyMiwxNSBAQAogLyoqIEdldCB0aGUgYmlxdWFkIGNvZWZmaWNpZW50cyAqLwogI2RlZmluZSBIUElfRVFVQUxJWkVSX0NPRUZGSUNJRU5UUyBIUElfQ1RMX0FUVFIoRVFVQUxJWkVSLCAzKQogCi0jZGVmaW5lIEhQSV9DT01QQU5ERVJfUEFSQU1TIEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDEpCisvKiBOb3RlIGNvbXBhbmRlciBhbHNvIHVzZXMgSFBJX0dFTkVSSUNfRU5BQkxFICovCisjZGVmaW5lIEhQSV9DT01QQU5ERVJfUEFSQU1TICAgICBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCAxKQorI2RlZmluZSBIUElfQ09NUEFOREVSX01BS0VVUEdBSU4gSFBJX0NUTF9BVFRSKENPTVBBTkRFUiwgMikKKyNkZWZpbmUgSFBJX0NPTVBBTkRFUl9USFJFU0hPTEQgIEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDMpCisjZGVmaW5lIEhQSV9DT01QQU5ERVJfUkFUSU8gICAgICBIUElfQ1RMX0FUVFIoQ09NUEFOREVSLCA0KQorI2RlZmluZSBIUElfQ09NUEFOREVSX0FUVEFDSyAgICAgSFBJX0NUTF9BVFRSKENPTVBBTkRFUiwgNSkKKyNkZWZpbmUgSFBJX0NPTVBBTkRFUl9ERUNBWSAgICAgIEhQSV9DVExfQVRUUihDT01QQU5ERVIsIDYpCiAKLS8qIENvYnJhbmV0IGNvbnRyb2wgYXR0cmlidXRlcy4KLSAgIE1VU1QgYmUgZGlzdGluY3QgZnJvbSBhbGwgb3RoZXIgY29udHJvbCBhdHRyaWJ1dGVzLgotICAgVGhpcyBpcyBzbyB0aGF0IGhvc3Qgc2lkZSBwcm9jZXNzaW5nIGNhbiBlYXNpbHkgaWRlbnRpZnkgYSBDb2JyYW5ldCBjb250cm9sCi0gICBhbmQgYXBwbHkgYWRkaXRpb25hbCBob3N0IHNpZGUgb3BlcmF0aW9ucyAobGlrZSBjb3B5aW5nIGRhdGEpIGFzIHJlcXVpcmVkLgotKi8KKy8qIENvYnJhbmV0IGNvbnRyb2wgYXR0cmlidXRlcy4gKi8KICNkZWZpbmUgSFBJX0NPQlJBTkVUX1NFVCAgICAgICAgIEhQSV9DVExfQVRUUihDT0JSQU5FVCwgMSkKICNkZWZpbmUgSFBJX0NPQlJBTkVUX0dFVCAgICAgICAgIEhQSV9DVExfQVRUUihDT0JSQU5FVCwgMikKICNkZWZpbmUgSFBJX0NPQlJBTkVUX1NFVF9EQVRBICAgIEhQSV9DVExfQVRUUihDT0JSQU5FVCwgMykKQEAgLTE1MTIsMTEgKzE1MTYsMTEgQEAKIAlzdHJ1Y3QgaHBpX2NvbnRyb2xfY2FjaGVfaW5mbyBpOwogCXVuaW9uIHsKIAkJc3RydWN0IHsJLyogdm9sdW1lICovCi0JCQl1MTYgYW5fbG9nWzJdOworCQkJc2hvcnQgYW5fbG9nWzJdOwogCQl9IHY7CiAJCXN0cnVjdCB7CS8qIHBlYWsgbWV0ZXIgKi8KLQkJCXUxNiBhbl9sb2dfcGVha1syXTsKLQkJCXUxNiBhbl9sb2dSTVNbMl07CisJCQlzaG9ydCBhbl9sb2dfcGVha1syXTsKKwkJCXNob3J0IGFuX2xvZ1JNU1syXTsKIAkJfSBwOwogCQlzdHJ1Y3QgewkvKiBjaGFubmVsIG1vZGUgKi8KIAkJCXUxNiBtb2RlOwpAQCAtMTUyNiw3ICsxNTMwLDcgQEAKIAkJCXUxNiBzb3VyY2Vfbm9kZV9pbmRleDsKIAkJfSB4OwogCQlzdHJ1Y3QgewkvKiBsZXZlbC90cmltICovCi0JCQl1MTYgYW5fbG9nWzJdOworCQkJc2hvcnQgYW5fbG9nWzJdOwogCQl9IGw7CiAJCXN0cnVjdCB7CS8qIHR1bmVyIC0gcGFydGlhbCBjYWNoaW5nLgogCQkJCSAgIHNvbWUgYXR0cmlidXRlcyBnbyB0byB0aGUgRFNQLiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpY21uLmMKaW5kZXggZmNkNjQ1My4uZGRhNGYxYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGljbW4uYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWNtbi5jCkBAIC0zNTMsNyArMzUzLDEyIEBACiAJCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS50LmJhbmQ7CiAJCWVsc2UgaWYgKChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1RVTkVSX0xFVkVMKQogCQkJJiYgKHBobS0+dS5jLnBhcmFtMSA9PSBIUElfVFVORVJfTEVWRUxfQVZFUkFHRSkpCi0JCQlwaHItPnUuYy5wYXJhbTEgPSBwQy0+dS50LmxldmVsOworCQkJaWYgKHBDLT51LnQubGV2ZWwgPT0gSFBJX0VSUk9SX0lMTEVHQUxfQ0FDSEVfVkFMVUUpIHsKKwkJCQlwaHItPnUuYy5wYXJhbTEgPSAwOworCQkJCXBoci0+ZXJyb3IgPQorCQkJCQlIUElfRVJST1JfSU5WQUxJRF9DT05UUk9MX0FUVFJJQlVURTsKKwkJCX0gZWxzZQorCQkJCXBoci0+dS5jLnBhcmFtMSA9IHBDLT51LnQubGV2ZWw7CiAJCWVsc2UKIAkJCWZvdW5kID0gMDsKIAkJYnJlYWs7CkBAIC0zOTcsNyArNDAyLDggQEAKIAkJCWlmIChwQy0+dS5jbGsuc291cmNlX2luZGV4ID09CiAJCQkJSFBJX0VSUk9SX0lMTEVHQUxfQ0FDSEVfVkFMVUUpIHsKIAkJCQlwaHItPnUuYy5wYXJhbTEgPSAwOwotCQkJCXBoci0+ZXJyb3IgPSBIUElfRVJST1JfSU5WQUxJRF9PUEVSQVRJT047CisJCQkJcGhyLT5lcnJvciA9CisJCQkJCUhQSV9FUlJPUl9JTlZBTElEX0NPTlRST0xfQVRUUklCVVRFOwogCQkJfSBlbHNlCiAJCQkJcGhyLT51LmMucGFyYW0xID0gcEMtPnUuY2xrLnNvdXJjZV9pbmRleDsKIAkJfSBlbHNlIGlmIChwaG0tPnUuYy5hdHRyaWJ1dGUgPT0gSFBJX1NBTVBMRUNMT0NLX1NBTVBMRVJBVEUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmMKaW5kZXggNGNkODVhNC4uOTQ5ODM2ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FzaWhwaS9ocGlkZWJ1Zy5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZGVidWcuYwpAQCAtMTExLDcgKzExMSw3IEBACiAgICZocGlfcHJvZmlsZV9zdHJpbmdzLFwKICAgJmhwaV9jb250cm9sX3N0cmluZ3MsIFwKICAgJmhwaV9hc3luY2V2ZW50X3N0cmluZ3MgXAotfTsKK30KIAltYWtlX3RyZWVub2RlX2Zyb21fYXJyYXkoaHBpX2Z1bmN0aW9uX3N0cmluZ3MsIEhQSV9GVU5DVElPTl9TVFJJTkdTKQogCiAJY29tcGlsZV90aW1lX2Fzc2VydChIUElfT0JKX01BWElOREVYID09IDE0LCBvYmpfbGlzdF9kb2VzbnRfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlkZWJ1Zy5oIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkZWJ1Zy5oCmluZGV4IDQ0ZGNjYWQuLmEyZjA5NTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpZGVidWcuaAorKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRlYnVnLmgKQEAgLTM1Niw3ICszNTYsNyBAQAogCSJIUElfU09VUkNFTk9ERV9BREFQVEVSIiBcCiB9CiAKLWNvbXBpbGVfdGltZV9hc3NlcnQoKEhQSV9TT1VSQ0VOT0RFX0xBU1RfSU5ERVggLSBIUElfU09VUkNFTk9ERV9CQVNFICsgMSkgPT0KK2NvbXBpbGVfdGltZV9hc3NlcnQoKEhQSV9TT1VSQ0VOT0RFX0xBU1RfSU5ERVggLSBIUElfU09VUkNFTk9ERV9OT05FICsgMSkgPT0KIAkoMTIpLCBzb3VyY2Vub2RlX3N0cmluZ3NfbWF0Y2hfZGVmcyk7CiAKICNkZWZpbmUgSFBJX0RFU1ROT0RFX1NUUklOR1MgXApAQCAtMzcwLDcgKzM3MCw3IEBACiAJIkhQSV9ERVNUTk9ERV9DT0JSQU5FVCIsIFwKIAkiSFBJX0RFU1ROT0RFX0FOQUxPRyIgXAogfQotY29tcGlsZV90aW1lX2Fzc2VydCgoSFBJX0RFU1ROT0RFX0xBU1RfSU5ERVggLSBIUElfREVTVE5PREVfQkFTRSArIDEpID09ICg4KSwKK2NvbXBpbGVfdGltZV9hc3NlcnQoKEhQSV9ERVNUTk9ERV9MQVNUX0lOREVYIC0gSFBJX0RFU1ROT0RFX05PTkUgKyAxKSA9PSAoOCksCiAJZGVzdG5vZGVfc3RyaW5nc19tYXRjaF9kZWZzKTsKIAogI2RlZmluZSBIUElfQ09OVFJPTF9DSEFOTkVMX01PREVfU1RSSU5HUyBcCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaWZ1bmMuYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZnVuYy5jCmluZGV4IDI5OGVlZjMuLjFlOTJlYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpZnVuYy5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpZnVuYy5jCkBAIC05Niw4ICs5Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHBpX2hzdWJzeXMgZ2hfc3Vic3lzOwogCi1zdHJ1Y3QgaHBpX2hzdWJzeXMgKmhwaV9zdWJzeXNfY3JlYXRlKHZvaWQKLQkpCitzdHJ1Y3QgaHBpX2hzdWJzeXMgKmhwaV9zdWJzeXNfY3JlYXRlKHZvaWQpCiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CkBAIC0zMDIsNiArMzAxLDcgQEAKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQURBUFRFUiwKIAkJSFBJX0FEQVBURVJfU0VUX01PREUpOwogCWhtLmFkYXB0ZXJfaW5kZXggPSBhZGFwdGVyX2luZGV4OwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJaG0uYWRhcHRlcl9pbmRleCA9IGFkYXB0ZXJfaW5kZXg7CiAJaG0udS5heC5kZWJ1Z19yZWFkLmRzcF9hZGRyZXNzID0gZHNwX2FkZHJlc3M7CiAKLQlpZiAoKmNvdW50X2J5dGVzID4gc2l6ZW9mKGhyLnUuYnl0ZXMpKQorCWlmICgqY291bnRfYnl0ZXMgPiAoaW50KXNpemVvZihoci51LmJ5dGVzKSkKIAkJKmNvdW50X2J5dGVzID0gc2l6ZW9mKGhyLnUuYnl0ZXMpOwogCiAJaG0udS5heC5kZWJ1Z19yZWFkLmNvdW50X2J5dGVzID0gKmNvdW50X2J5dGVzOwpAQCAtOTc2LDYgKzk3Niw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX09TVFJFQU0sCiAJCUhQSV9PU1RSRUFNX0FOQ19SRUFEKTsKIAl1MzJUT0lOREVYRVMoaF9vdXRzdHJlYW0sICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTE1ODEsNiArMTU4Miw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX1NFVF9TVEFURSk7CiAJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwpAQCAtMTU5MSw2ICsxNTkzLDIyIEBACiAJcmV0dXJuIGhyLmVycm9yOwogfQogCitzdGF0aWMgdTE2IGhwaV9jb250cm9sX2xvZ19zZXQyKHUzMiBoX2NvbnRyb2wsIHUxNiBhdHRyaWIsIHNob3J0IHN2MCwKKwlzaG9ydCBzdjEpCit7CisJc3RydWN0IGhwaV9tZXNzYWdlIGhtOworCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKKwlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCisJCUhQSV9DT05UUk9MX1NFVF9TVEFURSk7CisJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOworCWhtLnUuYy5hdHRyaWJ1dGUgPSBhdHRyaWI7CisJaG0udS5jLmFuX2xvZ192YWx1ZVswXSA9IHN2MDsKKwlobS51LmMuYW5fbG9nX3ZhbHVlWzFdID0gc3YxOworCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOworCXJldHVybiBoci5lcnJvcjsKK30KKwogc3RhdGljCiB1MTYgaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCWNvbnN0IHUzMiBoX2NvbnRyb2wsIGNvbnN0IHUxNiBhdHRyaWIsIHUzMiBwYXJhbTEsIHUzMiBwYXJhbTIsCkBAIC0xNTk4LDYgKzE2MTYsNyBAQAogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTE2MDUsOCArMTYyNCw4IEBACiAJaG0udS5jLnBhcmFtMSA9IHBhcmFtMTsKIAlobS51LmMucGFyYW0yID0gcGFyYW0yOwogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCWlmIChwcGFyYW0xKQotCQkqcHBhcmFtMSA9IGhyLnUuYy5wYXJhbTE7CisKKwkqcHBhcmFtMSA9IGhyLnUuYy5wYXJhbTE7CiAJaWYgKHBwYXJhbTIpCiAJCSpwcGFyYW0yID0gaHIudS5jLnBhcmFtMjsKIApAQCAtMTYxNywxMCArMTYzNiwyMyBAQAogCQlocGlfY29udHJvbF9wYXJhbV9nZXQocywgaCwgYSwgMCwgMCwgcDEsIE5VTEwpCiAjZGVmaW5lIGhwaV9jb250cm9sX3BhcmFtMl9nZXQocywgaCwgYSwgcDEsIHAyKSBcCiAJCWhwaV9jb250cm9sX3BhcmFtX2dldChzLCBoLCBhLCAwLCAwLCBwMSwgcDIpCi0jZGVmaW5lIGhwaV9jb250cm9sX2V4X3BhcmFtMV9nZXQocywgaCwgYSwgcDEpIFwKLQkJaHBpX2NvbnRyb2xfZXhfcGFyYW1fZ2V0KHMsIGgsIGEsIDAsIDAsIHAxLCBOVUxMKQotI2RlZmluZSBocGlfY29udHJvbF9leF9wYXJhbTJfZ2V0KHMsIGgsIGEsIHAxLCBwMikgXAotCQlocGlfY29udHJvbF9leF9wYXJhbV9nZXQocywgaCwgYSwgMCwgMCwgcDEsIHAyKQorCitzdGF0aWMgdTE2IGhwaV9jb250cm9sX2xvZ19nZXQyKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUxNiBhdHRyaWIsIHNob3J0ICpzdjAsIHNob3J0ICpzdjEpCit7CisJc3RydWN0IGhwaV9tZXNzYWdlIGhtOworCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAorCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOworCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKKwlobS51LmMuYXR0cmlidXRlID0gYXR0cmliOworCisJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CisJKnN2MCA9IGhyLnUuYy5hbl9sb2dfdmFsdWVbMF07CisJaWYgKHN2MSkKKwkJKnN2MSA9IGhyLnUuYy5hbl9sb2dfdmFsdWVbMV07CisJcmV0dXJuIGhyLmVycm9yOworfQogCiBzdGF0aWMKIHUxNiBocGlfY29udHJvbF9xdWVyeShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKQEAgLTE2MjksNiArMTY2MSw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9JTkZPKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0xNjQzLDkgKzE2NzYsOCBAQAogCXJldHVybiBoci5lcnJvcjsKIH0KIAotc3RhdGljIHUxNiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAotCWNvbnN0IHUzMiBoX2NvbnRyb2wsIGNvbnN0IHUxNiBhdHRyaWJ1dGUsIGNoYXIgKnBzel9zdHJpbmcsCi0JY29uc3QgdTMyIHN0cmluZ19sZW5ndGgpCitzdGF0aWMgdTE2IGhwaV9jb250cm9sX2dldF9zdHJpbmcoY29uc3QgdTMyIGhfY29udHJvbCwgY29uc3QgdTE2IGF0dHJpYnV0ZSwKKwljaGFyICpwc3pfc3RyaW5nLCBjb25zdCB1MzIgc3RyaW5nX2xlbmd0aCkKIHsKIAl1bnNpZ25lZCBpbnQgc3ViX3N0cmluZ19pbmRleCA9IDAsIGogPSAwOwogCWNoYXIgYyA9IDA7CkBAIC0xOTE2LDYgKzE5NDgsNyBAQAogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MRVgsCiAJCUhQSV9DT05UUk9MX1NFVF9TVEFURSk7CiAJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwpAQCAtMTk0MSw2ICsxOTc0LDcgQEAKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTEVYLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTE5ODAsNiArMjAxNCw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0xFWCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0yMDA2LDYgKzIwNDEsNyBAQAogCXUzMiBieXRlX2NvdW50OwogCXUzMiBpUDsKIAl1MTYgZXJyb3I7CisKIAllcnJvciA9IGhwaV9jb2JyYW5ldF9obWlfcmVhZChwaF9zdWJzeXMsIGhfY29udHJvbCwKIAkJSFBJX0NPQlJBTkVUX0hNSV9jb2JyYV9pcF9tb25fY3VycmVudElQLCA0LCAmYnl0ZV9jb3VudCwKIAkJKHU4ICopJmlQKTsKQEAgLTIwODIsNiArMjExOCw3IEBACiAJdTMyIGJ5dGVfY291bnQ7CiAJdTE2IGVycm9yOwogCXUzMiBtQUM7CisKIAllcnJvciA9IGhwaV9jb2JyYW5ldF9obWlfcmVhZChwaF9zdWJzeXMsIGhfY29udHJvbCwKIAkJSFBJX0NPQlJBTkVUX0hNSV9jb2JyYV9pZl9waHlfYWRkcmVzcywgNCwgJmJ5dGVfY291bnQsCiAJCSh1OCAqKSZtQUMpOwpAQCAtMjEwMyw2MCArMjE0MCwxMTkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXUxNiBocGlfY29tcGFuZGVyX3NldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgYXR0YWNrLCB1MTYgZGVjYXksIHNob3J0IHJhdGlvMTAwLCBzaG9ydCB0aHJlc2hvbGQwXzAxZEIsCi0Jc2hvcnQgbWFrZXVwX2dhaW4wXzAxZEIpCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUzMiBlbmFibGUpCit7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX0dFTkVSSUNfRU5BQkxFLAorCQllbmFibGUsIDApOworfQorCit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUzMiAqZW5hYmxlKQoreworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCQlIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSk7Cit9CisKK3UxNiBocGlfY29tcGFuZGVyX3NldF9tYWtldXBfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCBzaG9ydCBtYWtldXBfZ2FpbjBfMDFkQikKK3sKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX3NldDIoaF9jb250cm9sLCBIUElfQ09NUEFOREVSX01BS0VVUEdBSU4sCisJCW1ha2V1cF9nYWluMF8wMWRCLCAwKTsKK30KKwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X21ha2V1cF9nYWluKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHNob3J0ICptYWtldXBfZ2FpbjBfMDFkQikKK3sKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX2dldDIocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9DT01QQU5ERVJfTUFLRVVQR0FJTiwgbWFrZXVwX2dhaW4wXzAxZEIsIE5VTEwpOworfQorCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfYXR0YWNrX3RpbWVfY29uc3RhbnQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzCisJKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LCB1MzIgYXR0YWNrKQoreworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9DT01QQU5ERVJfQVRUQUNLLCBhdHRhY2ssIGluZGV4KTsKK30KKwordTE2IGhwaV9jb21wYW5kZXJfZ2V0X2F0dGFja190aW1lX2NvbnN0YW50KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cworCSpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwgdTMyICphdHRhY2spCit7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX0NPTVBBTkRFUl9BVFRBQ0ssIDAsIGluZGV4LCBhdHRhY2ssIE5VTEwpOworfQorCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfZGVjYXlfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUzMiBkZWNheSkKK3sKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCQlIUElfQ09NUEFOREVSX0RFQ0FZLCBkZWNheSwgaW5kZXgpOworfQorCit1MTYgaHBpX2NvbXBhbmRlcl9nZXRfZGVjYXlfdGltZV9jb25zdGFudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUzMiAqZGVjYXkpCit7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX0NPTVBBTkRFUl9ERUNBWSwgMCwgaW5kZXgsIGRlY2F5LCBOVUxMKTsKKworfQorCit1MTYgaHBpX2NvbXBhbmRlcl9zZXRfdGhyZXNob2xkKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHVuc2lnbmVkIGludCBpbmRleCwgc2hvcnQgdGhyZXNob2xkMF8wMWRCKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKLQotCWhtLnUuYy5wYXJhbTEgPSBhdHRhY2sgKyAoKHUzMilyYXRpbzEwMCA8PCAxNik7Ci0JaG0udS5jLnBhcmFtMiA9IChkZWNheSAmIDB4RkZGRkwpOworCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfQ09NUEFOREVSX1RIUkVTSE9MRDsKKwlobS51LmMucGFyYW0yID0gaW5kZXg7CiAJaG0udS5jLmFuX2xvZ192YWx1ZVswXSA9IHRocmVzaG9sZDBfMDFkQjsKLQlobS51LmMuYW5fbG9nX3ZhbHVlWzFdID0gbWFrZXVwX2dhaW4wXzAxZEI7Ci0JaG0udS5jLmF0dHJpYnV0ZSA9IEhQSV9DT01QQU5ERVJfUEFSQU1TOwogCiAJaHBpX3NlbmRfcmVjdigmaG0sICZocik7CiAKIAlyZXR1cm4gaHIuZXJyb3I7CiB9CiAKLXUxNiBocGlfY29tcGFuZGVyX2dldChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKLQl1MTYgKnB3X2F0dGFjaywgdTE2ICpwd19kZWNheSwgc2hvcnQgKnB3X3JhdGlvMTAwLAotCXNob3J0ICpwbl90aHJlc2hvbGQwXzAxZEIsIHNob3J0ICpwbl9tYWtldXBfZ2FpbjBfMDFkQikKK3UxNiBocGlfY29tcGFuZGVyX2dldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCisJdTMyIGhfY29udHJvbCwgdW5zaWduZWQgaW50IGluZGV4LCBzaG9ydCAqdGhyZXNob2xkMF8wMWRCKQogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKLQlobS51LmMuYXR0cmlidXRlID0gSFBJX0NPTVBBTkRFUl9QQVJBTVM7CisJaG0udS5jLmF0dHJpYnV0ZSA9IEhQSV9DT01QQU5ERVJfVEhSRVNIT0xEOworCWhtLnUuYy5wYXJhbTIgPSBpbmRleDsKIAogCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JaWYgKHB3X2F0dGFjaykKLQkJKnB3X2F0dGFjayA9IChzaG9ydCkoaHIudS5jLnBhcmFtMSAmIDB4RkZGRik7Ci0JaWYgKHB3X2RlY2F5KQotCQkqcHdfZGVjYXkgPSAoc2hvcnQpKGhyLnUuYy5wYXJhbTIgJiAweEZGRkYpOwotCWlmIChwd19yYXRpbzEwMCkKLQkJKnB3X3JhdGlvMTAwID0gKHNob3J0KShoci51LmMucGFyYW0xID4+IDE2KTsKLQotCWlmIChwbl90aHJlc2hvbGQwXzAxZEIpCi0JCSpwbl90aHJlc2hvbGQwXzAxZEIgPSBoci51LmMuYW5fbG9nX3ZhbHVlWzBdOwotCWlmIChwbl9tYWtldXBfZ2FpbjBfMDFkQikKLQkJKnBuX21ha2V1cF9nYWluMF8wMWRCID0gaHIudS5jLmFuX2xvZ192YWx1ZVsxXTsKKwkqdGhyZXNob2xkMF8wMWRCID0gaHIudS5jLmFuX2xvZ192YWx1ZVswXTsKIAogCXJldHVybiBoci5lcnJvcjsKIH0KIAordTE2IGhwaV9jb21wYW5kZXJfc2V0X3JhdGlvKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAorCXUzMiBoX2NvbnRyb2wsIHUzMiBpbmRleCwgdTMyIHJhdGlvMTAwKQoreworCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9DT01QQU5ERVJfUkFUSU8sIHJhdGlvMTAwLCBpbmRleCk7Cit9CisKK3UxNiBocGlfY29tcGFuZGVyX2dldF9yYXRpbyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKKwl1MzIgaF9jb250cm9sLCB1MzIgaW5kZXgsIHUzMiAqcmF0aW8xMDApCit7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX0NPTVBBTkRFUl9SQVRJTywgMCwgaW5kZXgsIHJhdGlvMTAwLCBOVUxMKTsKK30KKwogdTE2IGhwaV9sZXZlbF9xdWVyeV9yYW5nZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKIAlzaG9ydCAqbWluX2dhaW5fMDFkQiwgc2hvcnQgKm1heF9nYWluXzAxZEIsIHNob3J0ICpzdGVwX2dhaW5fMDFkQikKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0yMTgxLDM3ICsyMjc3LDE2IEBACiAJc2hvcnQgYW5fZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQotCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKLQkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKLQl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7Ci0JbWVtY3B5KGhtLnUuYy5hbl9sb2dfdmFsdWUsIGFuX2dhaW4wXzAxZEIsCi0JCXNpemVvZihzaG9ydCkgKiBIUElfTUFYX0NIQU5ORUxTKTsKLQlobS51LmMuYXR0cmlidXRlID0gSFBJX0xFVkVMX0dBSU47Ci0KLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCXJldHVybiBoci5lcnJvcjsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX3NldDIoaF9jb250cm9sLCBIUElfTEVWRUxfR0FJTiwKKwkJYW5fZ2FpbjBfMDFkQlswXSwgYW5fZ2FpbjBfMDFkQlsxXSk7CiB9CiAKIHUxNiBocGlfbGV2ZWxfZ2V0X2dhaW4oY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCiAJc2hvcnQgYW5fZ2FpbjBfMDFkQltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCi0JCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfTEVWRUxfR0FJTjsKLQotCWhwaV9zZW5kX3JlY3YoJmhtLCAmaHIpOwotCi0JbWVtY3B5KGFuX2dhaW4wXzAxZEIsIGhyLnUuYy5hbl9sb2dfdmFsdWUsCi0JCXNpemVvZihzaG9ydCkgKiBIUElfTUFYX0NIQU5ORUxTKTsKLQlyZXR1cm4gaHIuZXJyb3I7CisJcmV0dXJuIGhwaV9jb250cm9sX2xvZ19nZXQyKHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfTEVWRUxfR0FJTiwKKwkJJmFuX2dhaW4wXzAxZEJbMF0sICZhbl9nYWluMF8wMWRCWzFdKTsKIH0KIAogdTE2IGhwaV9tZXRlcl9xdWVyeV9jaGFubmVscyhjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKQEAgLTI0MTMsNiArMjQ4OCw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7CiAJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwpAQCAtMjQzOSw2ICsyNTE1LDcgQEAKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0yNDYwLDYgKzI1MzcsNyBAQAogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTI2MjMsOCArMjcwMSw4IEBACiB1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiAqc3RhdGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1RPTkVERVRFQ1RPUl9TVEFURSwgMCwgMCwgKHUzMiAqKXN0YXRlLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX1RPTkVERVRFQ1RPUl9TVEFURSwgc3RhdGUpOwogfQogCiB1MTYgaHBpX3RvbmVfZGV0ZWN0b3Jfc2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKQEAgLTI2MzcsOCArMjcxNSw4IEBACiB1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCB1MzIgKmVuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfR0VORVJJQ19FTkFCTEUsCi0JCTAsIDAsICh1MzIgKillbmFibGUsIE5VTEwpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCQlIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSk7CiB9CiAKIHUxNiBocGlfdG9uZV9kZXRlY3Rvcl9zZXRfZXZlbnRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLApAQCAtMjY1MSw4ICsyNzI5LDggQEAKIHUxNiBocGlfdG9uZV9kZXRlY3Rvcl9nZXRfZXZlbnRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiAqZXZlbnRfZW5hYmxlKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwgMCwgMCwgKHUzMiAqKWV2ZW50X2VuYWJsZSwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwgZXZlbnRfZW5hYmxlKTsKIH0KIAogdTE2IGhwaV90b25lX2RldGVjdG9yX3NldF90aHJlc2hvbGQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCkBAIC0yNjY1LDE1ICsyNzQzLDE1IEBACiB1MTYgaHBpX3RvbmVfZGV0ZWN0b3JfZ2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCBpbnQgKnRocmVzaG9sZCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfVE9ORURFVEVDVE9SX1RIUkVTSE9MRCwgMCwgMCwgKHUzMiAqKXRocmVzaG9sZCwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9UT05FREVURUNUT1JfVEhSRVNIT0xELCAodTMyICopdGhyZXNob2xkKTsKIH0KIAogdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCB1MzIgKnN0YXRlKQogewotCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TSUxFTkNFREVURUNUT1JfU1RBVEUsIDAsIDAsICh1MzIgKilzdGF0ZSwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9TSUxFTkNFREVURUNUT1JfU1RBVEUsIHN0YXRlKTsKIH0KIAogdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX3NldF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCkBAIC0yNjg2LDUwICsyNzY0LDUwIEBACiB1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2VuYWJsZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCB1MzIgKmVuYWJsZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfR0VORVJJQ19FTkFCTEUsCi0JCTAsIDAsICh1MzIgKillbmFibGUsIE5VTEwpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCQlIUElfR0VORVJJQ19FTkFCTEUsIGVuYWJsZSk7CiB9CiAKIHUxNiBocGlfc2lsZW5jZV9kZXRlY3Rvcl9zZXRfZXZlbnRfZW5hYmxlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiBldmVudF9lbmFibGUpCiB7CiAJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX3NldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLCAodTMyKWV2ZW50X2VuYWJsZSwgMCk7CisJCUhQSV9HRU5FUklDX0VWRU5UX0VOQUJMRSwgZXZlbnRfZW5hYmxlLCAwKTsKIH0KIAogdTE2IGhwaV9zaWxlbmNlX2RldGVjdG9yX2dldF9ldmVudF9lbmFibGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCiAJdTMyIGhfY29udHJvbCwgdTMyICpldmVudF9lbmFibGUpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLCAwLCAwLCAodTMyICopZXZlbnRfZW5hYmxlLCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX0dFTkVSSUNfRVZFTlRfRU5BQkxFLCBldmVudF9lbmFibGUpOwogfQogCiB1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X2RlbGF5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiBkZWxheSkKIHsKIAlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fc2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfU0lMRU5DRURFVEVDVE9SX0RFTEFZLCAodTMyKWRlbGF5LCAwKTsKKwkJSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSwgZGVsYXksIDApOwogfQogCiB1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X2RlbGF5KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiAqZGVsYXkpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSwgMCwgMCwgKHUzMiAqKWRlbGF5LCBOVUxMKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW0xX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKKwkJSFBJX1NJTEVOQ0VERVRFQ1RPUl9ERUxBWSwgZGVsYXkpOwogfQogCiB1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3Jfc2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCBpbnQgdGhyZXNob2xkKQogewogCXJldHVybiBocGlfY29udHJvbF9wYXJhbV9zZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCi0JCUhQSV9TSUxFTkNFREVURUNUT1JfVEhSRVNIT0xELCAodTMyKXRocmVzaG9sZCwgMCk7CisJCUhQSV9TSUxFTkNFREVURUNUT1JfVEhSRVNIT0xELCB0aHJlc2hvbGQsIDApOwogfQogCiB1MTYgaHBpX3NpbGVuY2VfZGV0ZWN0b3JfZ2V0X3RocmVzaG9sZChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCBpbnQgKnRocmVzaG9sZCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfU0lMRU5DRURFVEVDVE9SX1RIUkVTSE9MRCwgMCwgMCwgKHUzMiAqKXRocmVzaG9sZCwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9TSUxFTkNFREVURUNUT1JfVEhSRVNIT0xELCAodTMyICopdGhyZXNob2xkKTsKIH0KIAogdTE2IGhwaV90dW5lcl9xdWVyeV9iYW5kKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLApAQCAtMjgyMiw2ICsyOTAwLDcgQEAKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfR0VUX1NUQVRFKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0yODM4LDYgKzI5MTcsNyBAQAogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTI4OTQsMTQgKzI5NzQsMTQgQEAKIHUxNiBocGlfdHVuZXJfZ2V0X2hkX3JhZGlvX2RzcF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9kc3BfdmVyc2lvbiwgY29uc3QgdTMyIHN0cmluZ19zaXplKQogewotCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKHBoX3N1YnN5cywgaF9jb250cm9sLAorCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGhfY29udHJvbCwKIAkJSFBJX1RVTkVSX0hEUkFESU9fRFNQX1ZFUlNJT04sIHBzel9kc3BfdmVyc2lvbiwgc3RyaW5nX3NpemUpOwogfQogCiB1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zZGtfdmVyc2lvbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywKIAl1MzIgaF9jb250cm9sLCBjaGFyICpwc3pfc2RrX3ZlcnNpb24sIGNvbnN0IHUzMiBzdHJpbmdfc2l6ZSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhwaF9zdWJzeXMsIGhfY29udHJvbCwKKwlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhoX2NvbnRyb2wsCiAJCUhQSV9UVU5FUl9IRFJBRElPX1NES19WRVJTSU9OLCBwc3pfc2RrX3ZlcnNpb24sIHN0cmluZ19zaXplKTsKIH0KIApAQCAtMjk0MiwxNSArMzAyMiwxNSBAQAogdTE2IGhwaV90dW5lcl9nZXRfaGRfcmFkaW9fc2lnbmFsX3F1YWxpdHkoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCiAJdTMyIGhfY29udHJvbCwgdTMyICpwcXVhbGl0eSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfVFVORVJfSERSQURJT19TSUdOQUxfUVVBTElUWSwgMCwgMCwgcHF1YWxpdHksIE5VTEwpOworCXJldHVybiBocGlfY29udHJvbF9wYXJhbTFfZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAorCQlIUElfVFVORVJfSERSQURJT19TSUdOQUxfUVVBTElUWSwgcHF1YWxpdHkpOwogfQogCiB1MTYgaHBpX3R1bmVyX2dldF9oZF9yYWRpb19zaWduYWxfYmxlbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCiAJdTMyIGhfY29udHJvbCwgdTMyICpwYmxlbmQpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtX2dldChwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1RVTkVSX0hEUkFESU9fQkxFTkQsIDAsIDAsIHBibGVuZCwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9UVU5FUl9IRFJBRElPX0JMRU5ELCBwYmxlbmQpOwogfQogCiB1MTYgaHBpX3R1bmVyX3NldF9oZF9yYWRpb19zaWduYWxfYmxlbmQoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCkBAIC0yOTY1LDYgKzMwNDUsNyBAQAogewogCXN0cnVjdCBocGlfbWVzc2FnZSBobTsKIAlzdHJ1Y3QgaHBpX3Jlc3BvbnNlIGhyOworCiAJaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAogCQlIUElfQ09OVFJPTF9HRVRfU1RBVEUpOwogCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKQEAgLTI5ODEsNDMgKzMwNjIsNDMgQEAKIHUxNiBIUElfUEFEX19nZXRfY2hhbm5lbF9uYW1lKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIGNoYXIgKnBzel9zdHJpbmcsIGNvbnN0IHUzMiBkYXRhX2xlbmd0aCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhwaF9zdWJzeXMsIGhfY29udHJvbCwKLQkJSFBJX1BBRF9DSEFOTkVMX05BTUUsIHBzel9zdHJpbmcsIGRhdGFfbGVuZ3RoKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhoX2NvbnRyb2wsIEhQSV9QQURfQ0hBTk5FTF9OQU1FLAorCQlwc3pfc3RyaW5nLCBkYXRhX2xlbmd0aCk7CiB9CiAKIHUxNiBIUElfUEFEX19nZXRfYXJ0aXN0KGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLCB1MzIgaF9jb250cm9sLAogCWNoYXIgKnBzel9zdHJpbmcsIGNvbnN0IHUzMiBkYXRhX2xlbmd0aCkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhwaF9zdWJzeXMsIGhfY29udHJvbCwgSFBJX1BBRF9BUlRJU1QsCi0JCXBzel9zdHJpbmcsIGRhdGFfbGVuZ3RoKTsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfZ2V0X3N0cmluZyhoX2NvbnRyb2wsIEhQSV9QQURfQVJUSVNULCBwc3pfc3RyaW5nLAorCQlkYXRhX2xlbmd0aCk7CiB9CiAKIHUxNiBIUElfUEFEX19nZXRfdGl0bGUoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsIHUzMiBoX2NvbnRyb2wsCiAJY2hhciAqcHN6X3N0cmluZywgY29uc3QgdTMyIGRhdGFfbGVuZ3RoKQogewotCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfUEFEX1RJVExFLAotCQlwc3pfc3RyaW5nLCBkYXRhX2xlbmd0aCk7CisJcmV0dXJuIGhwaV9jb250cm9sX2dldF9zdHJpbmcoaF9jb250cm9sLCBIUElfUEFEX1RJVExFLCBwc3pfc3RyaW5nLAorCQlkYXRhX2xlbmd0aCk7CiB9CiAKIHUxNiBIUElfUEFEX19nZXRfY29tbWVudChjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKIAljaGFyICpwc3pfc3RyaW5nLCBjb25zdCB1MzIgZGF0YV9sZW5ndGgpCiB7Ci0JcmV0dXJuIGhwaV9jb250cm9sX2dldF9zdHJpbmcocGhfc3Vic3lzLCBoX2NvbnRyb2wsIEhQSV9QQURfQ09NTUVOVCwKLQkJcHN6X3N0cmluZywgZGF0YV9sZW5ndGgpOworCXJldHVybiBocGlfY29udHJvbF9nZXRfc3RyaW5nKGhfY29udHJvbCwgSFBJX1BBRF9DT01NRU5ULCBwc3pfc3RyaW5nLAorCQlkYXRhX2xlbmd0aCk7CiB9CiAKIHUxNiBIUElfUEFEX19nZXRfcHJvZ3JhbV90eXBlKGNvbnN0IHN0cnVjdCBocGlfaHN1YnN5cyAqcGhfc3Vic3lzLAogCXUzMiBoX2NvbnRyb2wsIHUzMiAqcHBUWSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLAotCQlIUElfUEFEX1BST0dSQU1fVFlQRSwgMCwgMCwgcHBUWSwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9QQURfUFJPR1JBTV9UWVBFLCBwcFRZKTsKIH0KIAogdTE2IEhQSV9QQURfX2dldF9yZHNQSShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKIAl1MzIgKnBwSSkKIHsKLQlyZXR1cm4gaHBpX2NvbnRyb2xfcGFyYW1fZ2V0KHBoX3N1YnN5cywgaF9jb250cm9sLCBIUElfUEFEX1BST0dSQU1fSUQsCi0JCTAsIDAsIHBwSSwgTlVMTCk7CisJcmV0dXJuIGhwaV9jb250cm9sX3BhcmFtMV9nZXQocGhfc3Vic3lzLCBoX2NvbnRyb2wsCisJCUhQSV9QQURfUFJPR1JBTV9JRCwgcHBJKTsKIH0KIAogdTE2IGhwaV92b2x1bWVfcXVlcnlfY2hhbm5lbHMoY29uc3Qgc3RydWN0IGhwaV9oc3Vic3lzICpwaF9zdWJzeXMsCkBAIC0zMDMxLDM2ICszMTEyLDE2IEBACiAJc2hvcnQgYW5fbG9nX2dhaW5bSFBJX01BWF9DSEFOTkVMU10KIAkpCiB7Ci0Jc3RydWN0IGhwaV9tZXNzYWdlIGhtOwotCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7Ci0JaHBpX2luaXRfbWVzc2FnZV9yZXNwb25zZSgmaG0sICZociwgSFBJX09CSl9DT05UUk9MLAotCQlIUElfQ09OVFJPTF9TRVRfU1RBVEUpOwotCXUzMlRPSU5ERVhFUyhoX2NvbnRyb2wsICZobS5hZGFwdGVyX2luZGV4LCAmaG0ub2JqX2luZGV4KTsKLQltZW1jcHkoaG0udS5jLmFuX2xvZ192YWx1ZSwgYW5fbG9nX2dhaW4sCi0JCXNpemVvZihzaG9ydCkgKiBIUElfTUFYX0NIQU5ORUxTKTsKLQlobS51LmMuYXR0cmlidXRlID0gSFBJX1ZPTFVNRV9HQUlOOwotCi0JaHBpX3NlbmRfcmVjdigmaG0sICZocik7Ci0KLQlyZXR1cm4gaHIuZXJyb3I7CisJcmV0dXJuIGhwaV9jb250cm9sX2xvZ19zZXQyKGhfY29udHJvbCwgSFBJX1ZPTFVNRV9HQUlOLAorCQlhbl9sb2dfZ2FpblswXSwgYW5fbG9nX2dhaW5bMV0pOwogfQogCiB1MTYgaHBpX3ZvbHVtZV9nZXRfZ2Fpbihjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKIAlzaG9ydCBhbl9sb2dfZ2FpbltIUElfTUFYX0NIQU5ORUxTXQogCSkKIHsKLQlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07Ci0Jc3RydWN0IGhwaV9yZXNwb25zZSBocjsKLQlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCi0JCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7Ci0JdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwotCWhtLnUuYy5hdHRyaWJ1dGUgPSBIUElfVk9MVU1FX0dBSU47Ci0KLQlocGlfc2VuZF9yZWN2KCZobSwgJmhyKTsKLQotCW1lbWNweShhbl9sb2dfZ2FpbiwgaHIudS5jLmFuX2xvZ192YWx1ZSwKLQkJc2l6ZW9mKHNob3J0KSAqIEhQSV9NQVhfQ0hBTk5FTFMpOwotCXJldHVybiBoci5lcnJvcjsKKwlyZXR1cm4gaHBpX2NvbnRyb2xfbG9nX2dldDIocGhfc3Vic3lzLCBoX2NvbnRyb2wsIEhQSV9WT0xVTUVfR0FJTiwKKwkJJmFuX2xvZ19nYWluWzBdLCAmYW5fbG9nX2dhaW5bMV0pOwogfQogCiB1MTYgaHBpX3ZvbHVtZV9xdWVyeV9yYW5nZShjb25zdCBzdHJ1Y3QgaHBpX2hzdWJzeXMgKnBoX3N1YnN5cywgdTMyIGhfY29udHJvbCwKQEAgLTMwNjgsNiArMzEyOSw3IEBACiB7CiAJc3RydWN0IGhwaV9tZXNzYWdlIGhtOwogCXN0cnVjdCBocGlfcmVzcG9uc2UgaHI7CisKIAlocGlfaW5pdF9tZXNzYWdlX3Jlc3BvbnNlKCZobSwgJmhyLCBIUElfT0JKX0NPTlRST0wsCiAJCUhQSV9DT05UUk9MX0dFVF9TVEFURSk7CiAJdTMyVE9JTkRFWEVTKGhfY29udHJvbCwgJmhtLmFkYXB0ZXJfaW5kZXgsICZobS5vYmpfaW5kZXgpOwpAQCAtMzA5NCw2ICszMTU2LDcgQEAKIHsKIAlzdHJ1Y3QgaHBpX21lc3NhZ2UgaG07CiAJc3RydWN0IGhwaV9yZXNwb25zZSBocjsKKwogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfQ09OVFJPTCwKIAkJSFBJX0NPTlRST0xfU0VUX1NUQVRFKTsKIAl1MzJUT0lOREVYRVMoaF9jb250cm9sLCAmaG0uYWRhcHRlcl9pbmRleCwgJmhtLm9ial9pbmRleCk7CkBAIC0zMTcwLDQzICszMjMzLDQyIEBACiAJNiAqIHNpemVvZihjaGFyKSwKIH07CiAKLWlubGluZSBzaXplX3QgaHBpX2VudGl0eV9zaXplKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHlfcHRyKQorc3RhdGljIGlubGluZSBzaXplX3QgaHBpX2VudGl0eV9zaXplKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHlfcHRyKQogewogCXJldHVybiBlbnRpdHlfcHRyLT5oZWFkZXIuc2l6ZTsKIH0KIAotaW5saW5lIHNpemVfdCBocGlfZW50aXR5X2hlYWRlcl9zaXplKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHlfcHRyKQorc3RhdGljIGlubGluZSBzaXplX3QgaHBpX2VudGl0eV9oZWFkZXJfc2l6ZShzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5X3B0cikKIHsKIAlyZXR1cm4gc2l6ZW9mKGVudGl0eV9wdHItPmhlYWRlcik7CiB9CiAKLWlubGluZSBzaXplX3QgaHBpX2VudGl0eV92YWx1ZV9zaXplKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHlfcHRyKQorc3RhdGljIGlubGluZSBzaXplX3QgaHBpX2VudGl0eV92YWx1ZV9zaXplKHN0cnVjdCBocGlfZW50aXR5ICplbnRpdHlfcHRyKQogewogCXJldHVybiBocGlfZW50aXR5X3NpemUoZW50aXR5X3B0cikgLQogCQlocGlfZW50aXR5X2hlYWRlcl9zaXplKGVudGl0eV9wdHIpOwogfQogCi1pbmxpbmUgc2l6ZV90IGhwaV9lbnRpdHlfaXRlbV9jb3VudChzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5X3B0cikKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGhwaV9lbnRpdHlfaXRlbV9jb3VudChzdHJ1Y3QgaHBpX2VudGl0eSAqZW50aXR5X3B0cikKIHsKIAlyZXR1cm4gaHBpX2VudGl0eV92YWx1ZV9zaXplKGVudGl0eV9wdHIpIC8KIAkJZW50aXR5X3R5cGVfdG9fc2l6ZVtlbnRpdHlfcHRyLT5oZWFkZXIudHlwZV07CiB9CiAKLWlubGluZSBzdHJ1Y3QgaHBpX2VudGl0eSAqaHBpX2VudGl0eV9wdHJfdG9fbmV4dChzdHJ1Y3QgaHBpX2VudGl0eQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBpX2VudGl0eSAqaHBpX2VudGl0eV9wdHJfdG9fbmV4dChzdHJ1Y3QgaHBpX2VudGl0eQogCSplbnRpdHlfcHRyKQogewotCXJldHVybiAodm9pZCAqKSgoKHVpbnQ4X3QgKikgZW50aXR5X3B0cikgKwotCQlocGlfZW50aXR5X3NpemUoZW50aXR5X3B0cikpOworCXJldHVybiAodm9pZCAqKSgoKHU4ICopZW50aXR5X3B0cikgKyBocGlfZW50aXR5X3NpemUoZW50aXR5X3B0cikpOwogfQogCi1pbmxpbmUgdTE2IGhwaV9lbnRpdHlfY2hlY2tfdHlwZShjb25zdCBlbnVtIGVfZW50aXR5X3R5cGUgdCkKK3N0YXRpYyBpbmxpbmUgdTE2IGhwaV9lbnRpdHlfY2hlY2tfdHlwZShjb25zdCBlbnVtIGVfZW50aXR5X3R5cGUgdCkKIHsKIAlpZiAodCA+PSAwICYmIHQgPCBTVFJfVFlQRV9GSUVMRF9NQVgpCiAJCXJldHVybiAwOwogCXJldHVybiBIUElfRVJST1JfRU5USVRZX1RZUEVfSU5WQUxJRDsKIH0KIAotaW5saW5lIHUxNiBocGlfZW50aXR5X2NoZWNrX3JvbGUoY29uc3QgZW51bSBlX2VudGl0eV9yb2xlIHIpCitzdGF0aWMgaW5saW5lIHUxNiBocGlfZW50aXR5X2NoZWNrX3JvbGUoY29uc3QgZW51bSBlX2VudGl0eV9yb2xlIHIpCiB7CiAJaWYgKHIgPj0gMCAmJiByIDwgU1RSX1JPTEVfRklFTERfTUFYKQogCQlyZXR1cm4gMDsKQEAgLTM2MjQsNiArMzY4Niw3IEBACiAJdTE2IG1heGltdW1fZXZlbnRzLCBzdHJ1Y3QgaHBpX2FzeW5jX2V2ZW50ICpwX2V2ZW50cywKIAl1MTYgKnB3X251bWJlcl9yZXR1cm5lZCkKIHsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW1zZ3guYyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCmluZGV4IDJlZTkwZGMuLmYwMWFiOTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCisrKyBiL3NvdW5kL3BjaS9hc2locGkvaHBpbXNneC5jCkBAIC03NDEsNyArNzQxLDcgQEAKIAkJaHBpX2luaXRfcmVzcG9uc2UoJmhyLCBIUElfT0JKX1NVQlNZU1RFTSwKIAkJCUhQSV9TVUJTWVNfRklORF9BREFQVEVSUywgMCk7CiAJCW1lbWNweSgmZ1JFU1BfSFBJX1NVQlNZU19GSU5EX0FEQVBURVJTLCAmaHIsCi0JCQlzaXplb2YoJmdSRVNQX0hQSV9TVUJTWVNfRklORF9BREFQVEVSUykpOworCQkJc2l6ZW9mKGdSRVNQX0hQSV9TVUJTWVNfRklORF9BREFQVEVSUykpOwogCiAJCWZvciAoYWRhcHRlciA9IDA7IGFkYXB0ZXIgPCBIUElfTUFYX0FEQVBURVJTOyBhZGFwdGVyKyspIHsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwppbmRleCA3Mzk2YWM1Li42Mjg5NWE3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwpAQCAtMTIxLDExICsxMjEsMTcgQEAKIAlwaHBpX2lvY3RsX2RhdGEgPSAoc3RydWN0IGhwaV9pb2N0bF9saW51eCBfX3VzZXIgKilhcmc7CiAKIAkvKiBSZWFkIHRoZSBtZXNzYWdlIGFuZCByZXNwb25zZSBwb2ludGVycyBmcm9tIHVzZXIgc3BhY2UuICAqLwotCWdldF91c2VyKHB1aG0sICZwaHBpX2lvY3RsX2RhdGEtPnBobSk7Ci0JZ2V0X3VzZXIocHVociwgJnBocGlfaW9jdGxfZGF0YS0+cGhyKTsKKwlpZiAoZ2V0X3VzZXIocHVobSwgJnBocGlfaW9jdGxfZGF0YS0+cGhtKSB8fAorCSAgICBnZXRfdXNlcihwdWhyLCAmcGhwaV9pb2N0bF9kYXRhLT5waHIpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KIAogCS8qIE5vdyByZWFkIHRoZSBtZXNzYWdlIHNpemUgYW5kIGRhdGEgZnJvbSB1c2VyIHNwYWNlLiAgKi8KLQlnZXRfdXNlcihobS0+aC5zaXplLCAodTE2IF9fdXNlciAqKXB1aG0pOworCWlmIChnZXRfdXNlcihobS0+aC5zaXplLCAodTE2IF9fdXNlciAqKXB1aG0pKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KIAlpZiAoaG0tPmguc2l6ZSA+IHNpemVvZigqaG0pKQogCQlobS0+aC5zaXplID0gc2l6ZW9mKCpobSk7CiAKQEAgLTEzOCw3ICsxNDQsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZ2V0X3VzZXIocmVzX21heF9zaXplLCAodTE2IF9fdXNlciAqKXB1aHIpOworCWlmIChnZXRfdXNlcihyZXNfbWF4X3NpemUsICh1MTYgX191c2VyICopcHVocikpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQogCS8qIHByaW50ayhLRVJOX0lORk8gInVzZXIgcmVzcG9uc2Ugc2l6ZSAlZFxuIiwgcmVzX21heF9zaXplKTsgKi8KIAlpZiAocmVzX21heF9zaXplIDwgc2l6ZW9mKHN0cnVjdCBocGlfcmVzcG9uc2VfaGVhZGVyKSkgewogCQlIUElfREVCVUdfTE9HKFdBUk5JTkcsICJzbWFsbCByZXMgc2l6ZSAlZFxuIiwgcmVzX21heF9zaXplKTsKQEAgLTQ2NCw5ICs0NzMsNyBAQAogCiAJbWVtc2V0KGFkYXB0ZXJzLCAwLCBzaXplb2YoYWRhcHRlcnMpKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkFTSUhQSSBkcml2ZXIgJWQuJTAyZC4lMDJkXG4iLAotCQlIUElfVkVSX01BSk9SKEhQSV9WRVIpLCBIUElfVkVSX01JTk9SKEhQSV9WRVIpLAotCQlIUElfVkVSX1JFTEVBU0UoSFBJX1ZFUikpOworCXByaW50ayhLRVJOX0lORk8gIkFTSUhQSSBkcml2ZXIgIiBIUElfVkVSX1NUUklORyAiXG4iKTsKIAogCWhwaV9pbml0X21lc3NhZ2VfcmVzcG9uc2UoJmhtLCAmaHIsIEhQSV9PQkpfU1VCU1lTVEVNLAogCQlIUElfU1VCU1lTX0RSSVZFUl9MT0FEKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IDY2OGE1ZWMuLjIwNzYzZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtMjI1MCw2ICsyMjUwLDggQEAKIAlERV9JTklUKCgicmVzdW1lIHN0YXJ0XG4iKSk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKIAljb21tcGFnZV9iYWsgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWNob2F1ZGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvbW1wYWdlX2JhayA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAljb21tcGFnZSA9IGNoaXAtPmNvbW1fcGFnZTsKIAltZW1jcHkoY29tbXBhZ2VfYmFrLCBjb21tcGFnZSwgc2l6ZW9mKHN0cnVjdCBjb21tX3BhZ2UpKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggYmEyMDk4ZC4uYTc4MDJiOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC0zOTYsMTUgKzM5NiwxOCBAQAogCQkJfQogCQkJZm9yIChuID0gcHJldl9uaWQgKyAxOyBuIDw9IHZhbDsgbisrKSB7CiAJCQkJaWYgKGNvbm5zID49IG1heF9jb25ucykgewotCQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSCi0JCQkJCQkgICAiVG9vIG1hbnkgY29ubmVjdGlvbnNcbiIpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6ICIKKwkJCQkJCSAgICJUb28gbWFueSBjb25uZWN0aW9ucyAlZCBmb3IgTklEIDB4JXhcbiIsCisJCQkJCQkgICBjb25ucywgbmlkKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJCWNvbm5fbGlzdFtjb25ucysrXSA9IG47CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoY29ubnMgPj0gbWF4X2Nvbm5zKSB7Ci0JCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgY29ubmVjdGlvbnNcbiIpOworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogIgorCQkJCQkgICAiVG9vIG1hbnkgY29ubmVjdGlvbnMgJWQgZm9yIE5JRCAweCV4XG4iLAorCQkJCQkgICBjb25ucywgbmlkKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWNvbm5fbGlzdFtjb25ucysrXSA9IHZhbDsKQEAgLTczMCwxNSArNzMzLDE3IEBACiAJdG90YWxfbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIEFDX05PREVfUk9PVCwgJm5pZCk7CiAJZm9yIChpID0gMDsgaSA8IHRvdGFsX25vZGVzOyBpKyssIG5pZCsrKSB7CiAJCWZ1bmN0aW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQlBQ19QQVJfRlVOQ1RJT05fVFlQRSkgJiAweGZmOwotCQlzd2l0Y2ggKGZ1bmN0aW9uX2lkKSB7CisJCQkJCQlBQ19QQVJfRlVOQ1RJT05fVFlQRSk7CisJCXN3aXRjaCAoZnVuY3Rpb25faWQgJiAweGZmKSB7CiAJCWNhc2UgQUNfR1JQX0FVRElPX0ZVTkNUSU9OOgogCQkJY29kZWMtPmFmZyA9IG5pZDsKLQkJCWNvZGVjLT5mdW5jdGlvbl9pZCA9IGZ1bmN0aW9uX2lkOworCQkJY29kZWMtPmFmZ19mdW5jdGlvbl9pZCA9IGZ1bmN0aW9uX2lkICYgMHhmZjsKKwkJCWNvZGVjLT5hZmdfdW5zb2wgPSAoZnVuY3Rpb25faWQgPj4gOCkgJiAxOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfR1JQX01PREVNX0ZVTkNUSU9OOgogCQkJY29kZWMtPm1mZyA9IG5pZDsKLQkJCWNvZGVjLT5mdW5jdGlvbl9pZCA9IGZ1bmN0aW9uX2lkOworCQkJY29kZWMtPm1mZ19mdW5jdGlvbl9pZCA9IGZ1bmN0aW9uX2lkICYgMHhmZjsKKwkJCWNvZGVjLT5tZmdfdW5zb2wgPSAoZnVuY3Rpb25faWQgPj4gOCkgJiAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTE1NjUsNiArMTU3MCwxNyBAQAogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKTsKICNlbmRpZiAvKiBTTkRfSERBX05FRURTX1JFU1VNRSAqLwogCitzdGF0aWMgdTMyIGdldF9hbXBfbWF4X3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLCBpbnQgZGlyLAorCQkJICAgICB1bnNpZ25lZCBpbnQgb2ZzKQoreworCXUzMiBjYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKKwkvKiBnZXQgbnVtIHN0ZXBzICovCisJY2FwcyA9IChjYXBzICYgQUNfQU1QQ0FQX05VTV9TVEVQUykgPj4gQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVDsKKwlpZiAob2ZzIDwgY2FwcykKKwkJY2FwcyAtPSBvZnM7CisJcmV0dXJuIGNhcHM7Cit9CisKIC8qKgogICogc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8gLSBJbmZvIGNhbGxiYWNrIGZvciBhIHN0YW5kYXJkIEFNUCBtaXhlcgogICoKQEAgLTE1NzksMjMgKzE1OTUsMTcgQEAKIAl1OCBjaHMgPSBnZXRfYW1wX2NoYW5uZWxzKGtjb250cm9sKTsKIAlpbnQgZGlyID0gZ2V0X2FtcF9kaXJlY3Rpb24oa2NvbnRyb2wpOwogCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7Ci0JdTMyIGNhcHM7CiAKLQljYXBzID0gcXVlcnlfYW1wX2NhcHMoY29kZWMsIG5pZCwgZGlyKTsKLQkvKiBudW0gc3RlcHMgKi8KLQljYXBzID0gKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKSA+PiBBQ19BTVBDQVBfTlVNX1NURVBTX1NISUZUOwotCWlmICghY2FwcykgeworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IGNocyA9PSAzID8gMiA6IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBnZXRfYW1wX21heF92YWx1ZShjb2RlYywgbmlkLCBkaXIsIG9mcyk7CisJaWYgKCF1aW5mby0+dmFsdWUuaW50ZWdlci5tYXgpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGRhX2NvZGVjOiAiCiAJCSAgICAgICAibnVtX3N0ZXBzID0gMCBmb3IgTklEPTB4JXggKGN0bCA9ICVzKVxuIiwgbmlkLAogCQkgICAgICAga2NvbnRyb2wtPmlkLm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKG9mcyA8IGNhcHMpCi0JCWNhcHMgLT0gb2ZzOwotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwotCXVpbmZvLT5jb3VudCA9IGNocyA9PSAzID8gMiA6IDE7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBjYXBzOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8pOwpAQCAtMTYyMCw4ICsxNjMwLDE0IEBACiAJCSBpbnQgY2gsIGludCBkaXIsIGludCBpZHgsIHVuc2lnbmVkIGludCBvZnMsCiAJCSB1bnNpZ25lZCBpbnQgdmFsKQogeworCXVuc2lnbmVkIGludCBtYXh2YWw7CisKIAlpZiAodmFsID4gMCkKIAkJdmFsICs9IG9mczsKKwkvKiBvZnMgPSAwOiByYXcgbWF4IHZhbHVlICovCisJbWF4dmFsID0gZ2V0X2FtcF9tYXhfdmFsdWUoY29kZWMsIG5pZCwgZGlyLCAwKTsKKwlpZiAodmFsID4gbWF4dmFsKQorCQl2YWwgPSBtYXh2YWw7CiAJcmV0dXJuIHNuZF9oZGFfY29kZWNfYW1wX3VwZGF0ZShjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgsCiAJCQkJCUhEQV9BTVBfVk9MTUFTSywgdmFsKTsKIH0KQEAgLTI5OTksMjYgKzMwMTUsMzEgQEAKIAl1bnNpZ25lZCBpbnQgaGRhX2ZtdDsKIH07CiAKKy8qIHJhdGUgPSBiYXNlICogbXVsdCAvIGRpdiAqLworI2RlZmluZSBIREFfUkFURShiYXNlLCBtdWx0LCBkaXYpIFwKKwkoQUNfRk1UX0JBU0VfIyNiYXNlIyNLIHwgKCgobXVsdCkgLSAxKSA8PCBBQ19GTVRfTVVMVF9TSElGVCkgfCBcCisJICgoKGRpdikgLSAxKSA8PCBBQ19GTVRfRElWX1NISUZUKSkKKwogc3RhdGljIHN0cnVjdCBoZGFfcmF0ZV90YmwgcmF0ZV9iaXRzW10gPSB7CiAJLyogcmF0ZSBpbiBIeiwgQUxTQSByYXRlIGJpdG1hc2ssIEhEQSBmb3JtYXQgdmFsdWUgKi8KIAogCS8qIGF1dG9kZXRlY3RlZCB2YWx1ZSB1c2VkIGluIHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbSAqLwotCXsgODAwMCwgU05EUlZfUENNX1JBVEVfODAwMCwgMHgwNTAwIH0sIC8qIDEvNiB4IDQ4ICovCi0JeyAxMTAyNSwgU05EUlZfUENNX1JBVEVfMTEwMjUsIDB4NDMwMCB9LCAvKiAxLzQgeCA0NCAqLwotCXsgMTYwMDAsIFNORFJWX1BDTV9SQVRFXzE2MDAwLCAweDAyMDAgfSwgLyogMS8zIHggNDggKi8KLQl7IDIyMDUwLCBTTkRSVl9QQ01fUkFURV8yMjA1MCwgMHg0MTAwIH0sIC8qIDEvMiB4IDQ0ICovCi0JeyAzMjAwMCwgU05EUlZfUENNX1JBVEVfMzIwMDAsIDB4MGEwMCB9LCAvKiAyLzMgeCA0OCAqLwotCXsgNDQxMDAsIFNORFJWX1BDTV9SQVRFXzQ0MTAwLCAweDQwMDAgfSwgLyogNDQgKi8KLQl7IDQ4MDAwLCBTTkRSVl9QQ01fUkFURV80ODAwMCwgMHgwMDAwIH0sIC8qIDQ4ICovCi0JeyA4ODIwMCwgU05EUlZfUENNX1JBVEVfODgyMDAsIDB4NDgwMCB9LCAvKiAyIHggNDQgKi8KLQl7IDk2MDAwLCBTTkRSVl9QQ01fUkFURV85NjAwMCwgMHgwODAwIH0sIC8qIDIgeCA0OCAqLwotCXsgMTc2NDAwLCBTTkRSVl9QQ01fUkFURV8xNzY0MDAsIDB4NTgwMCB9LC8qIDQgeCA0NCAqLwotCXsgMTkyMDAwLCBTTkRSVl9QQ01fUkFURV8xOTIwMDAsIDB4MTgwMCB9LCAvKiA0IHggNDggKi8KKwl7IDgwMDAsIFNORFJWX1BDTV9SQVRFXzgwMDAsIEhEQV9SQVRFKDQ4LCAxLCA2KSB9LAorCXsgMTEwMjUsIFNORFJWX1BDTV9SQVRFXzExMDI1LCBIREFfUkFURSg0NCwgMSwgNCkgfSwKKwl7IDE2MDAwLCBTTkRSVl9QQ01fUkFURV8xNjAwMCwgSERBX1JBVEUoNDgsIDEsIDMpIH0sCisJeyAyMjA1MCwgU05EUlZfUENNX1JBVEVfMjIwNTAsIEhEQV9SQVRFKDQ0LCAxLCAyKSB9LAorCXsgMzIwMDAsIFNORFJWX1BDTV9SQVRFXzMyMDAwLCBIREFfUkFURSg0OCwgMiwgMykgfSwKKwl7IDQ0MTAwLCBTTkRSVl9QQ01fUkFURV80NDEwMCwgSERBX1JBVEUoNDQsIDEsIDEpIH0sCisJeyA0ODAwMCwgU05EUlZfUENNX1JBVEVfNDgwMDAsIEhEQV9SQVRFKDQ4LCAxLCAxKSB9LAorCXsgODgyMDAsIFNORFJWX1BDTV9SQVRFXzg4MjAwLCBIREFfUkFURSg0NCwgMiwgMSkgfSwKKwl7IDk2MDAwLCBTTkRSVl9QQ01fUkFURV85NjAwMCwgSERBX1JBVEUoNDgsIDIsIDEpIH0sCisJeyAxNzY0MDAsIFNORFJWX1BDTV9SQVRFXzE3NjQwMCwgSERBX1JBVEUoNDQsIDQsIDEpIH0sCisJeyAxOTIwMDAsIFNORFJWX1BDTV9SQVRFXzE5MjAwMCwgSERBX1JBVEUoNDgsIDQsIDEpIH0sCiAjZGVmaW5lIEFDX1BBUl9QQ01fUkFURV9CSVRTCTExCiAJLyogdXAgdG8gYml0cyAxMCwgMzg0a0haIGlzbid0IHN1cHBvcnRlZCBwcm9wZXJseSAqLwogCiAJLyogbm90IGF1dG9kZXRlY3RlZCB2YWx1ZSAqLwotCXsgOTYwMCwgU05EUlZfUENNX1JBVEVfS05PVCwgMHgwNDAwIH0sIC8qIDEvNSB4IDQ4ICovCisJeyA5NjAwLCBTTkRSVl9QQ01fUkFURV9LTk9ULCBIREFfUkFURSg0OCwgMSwgNSkgfSwKIAogCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KIH07CkBAIC0zMDM3LDcgKzMwNTgsOCBAQAogdW5zaWduZWQgaW50IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHVuc2lnbmVkIGludCByYXRlLAogCQkJCQl1bnNpZ25lZCBpbnQgY2hhbm5lbHMsCiAJCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCi0JCQkJCXVuc2lnbmVkIGludCBtYXhicHMpCisJCQkJCXVuc2lnbmVkIGludCBtYXhicHMsCisJCQkJCXVuc2lnbmVkIHNob3J0IHNwZGlmX2N0bHMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgaW50IHZhbCA9IDA7CkBAIC0zMDYwLDIwICszMDgyLDIwIEBACiAKIAlzd2l0Y2ggKHNuZF9wY21fZm9ybWF0X3dpZHRoKGZvcm1hdCkpIHsKIAljYXNlIDg6Ci0JCXZhbCB8PSAweDAwOworCQl2YWwgfD0gQUNfRk1UX0JJVFNfODsKIAkJYnJlYWs7CiAJY2FzZSAxNjoKLQkJdmFsIHw9IDB4MTA7CisJCXZhbCB8PSBBQ19GTVRfQklUU18xNjsKIAkJYnJlYWs7CiAJY2FzZSAyMDoKIAljYXNlIDI0OgogCWNhc2UgMzI6CiAJCWlmIChtYXhicHMgPj0gMzIgfHwgZm9ybWF0ID09IFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUpCi0JCQl2YWwgfD0gMHg0MDsKKwkJCXZhbCB8PSBBQ19GTVRfQklUU18zMjsKIAkJZWxzZSBpZiAobWF4YnBzID49IDI0KQotCQkJdmFsIHw9IDB4MzA7CisJCQl2YWwgfD0gQUNfRk1UX0JJVFNfMjQ7CiAJCWVsc2UKLQkJCXZhbCB8PSAweDIwOworCQkJdmFsIHw9IEFDX0ZNVF9CSVRTXzIwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRkZCgiaW52YWxpZCBmb3JtYXQgd2lkdGggJWRcbiIsCkBAIC0zMDgxLDYgKzMxMDMsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoc3BkaWZfY3RscyAmIEFDX0RJRzFfTk9OQVVESU8pCisJCXZhbCB8PSBBQ19GTVRfVFlQRV9OT05fUENNOworCiAJcmV0dXJuIHZhbDsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDU5OTFkMTQuLjAzMjhjZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtMjI0LDYgKzIyNCwyNyBAQAogLyogSW5wdXQgY29udmVydGVyIFNESSBzZWxlY3QgKi8KICNkZWZpbmUgQUNfU0RJX1NFTEVDVAkJCSgweGY8PDApCiAKKy8qIHN0cmVhbSBmb3JtYXQgaWQgKi8KKyNkZWZpbmUgQUNfRk1UX0NIQU5fU0hJRlQJCTAKKyNkZWZpbmUgQUNfRk1UX0NIQU5fTUFTSwkJKDB4MGYgPDwgMCkKKyNkZWZpbmUgQUNfRk1UX0JJVFNfU0hJRlQJCTQKKyNkZWZpbmUgQUNfRk1UX0JJVFNfTUFTSwkJKDcgPDwgNCkKKyNkZWZpbmUgQUNfRk1UX0JJVFNfOAkJCSgwIDw8IDQpCisjZGVmaW5lIEFDX0ZNVF9CSVRTXzE2CQkJKDEgPDwgNCkKKyNkZWZpbmUgQUNfRk1UX0JJVFNfMjAJCQkoMiA8PCA0KQorI2RlZmluZSBBQ19GTVRfQklUU18yNAkJCSgzIDw8IDQpCisjZGVmaW5lIEFDX0ZNVF9CSVRTXzMyCQkJKDQgPDwgNCkKKyNkZWZpbmUgQUNfRk1UX0RJVl9TSElGVAkJOAorI2RlZmluZSBBQ19GTVRfRElWX01BU0sJCQkoNyA8PCA4KQorI2RlZmluZSBBQ19GTVRfTVVMVF9TSElGVAkJMTEKKyNkZWZpbmUgQUNfRk1UX01VTFRfTUFTSwkJKDcgPDwgMTEpCisjZGVmaW5lIEFDX0ZNVF9CQVNFX1NISUZUCQkxNAorI2RlZmluZSBBQ19GTVRfQkFTRV80OEsJCQkoMCA8PCAxNCkKKyNkZWZpbmUgQUNfRk1UX0JBU0VfNDRLCQkJKDEgPDwgMTQpCisjZGVmaW5lIEFDX0ZNVF9UWVBFX1NISUZUCQkxNQorI2RlZmluZSBBQ19GTVRfVFlQRV9QQ00JCQkoMCA8PCAxNSkKKyNkZWZpbmUgQUNfRk1UX1RZUEVfTk9OX1BDTQkJKDEgPDwgMTUpCisKIC8qIFVuc29saWNpdGVkIHJlc3BvbnNlIGNvbnRyb2wgKi8KICNkZWZpbmUgQUNfVU5TT0xfVEFHCQkJKDB4M2Y8PDApCiAjZGVmaW5lIEFDX1VOU09MX0VOQUJMRUQJCSgxPDw3KQpAQCAtMzY0LDYgKzM4NSw5IEBACiAjZGVmaW5lIEFDX0RJRzJfQ0MJCQkoMHg3Zjw8MCkKIAogLyogUGluIHdpZGdldCBjb250cm9sIC0gOGJpdCAqLworI2RlZmluZSBBQ19QSU5DVExfRVBUCQkJKDB4Mzw8MCkKKyNkZWZpbmUgQUNfUElOQ1RMX0VQVF9OQVRJVkUJCTAKKyNkZWZpbmUgQUNfUElOQ1RMX0VQVF9IQlIJCTMKICNkZWZpbmUgQUNfUElOQ1RMX1ZSRUZFTgkJKDB4Nzw8MCkKICNkZWZpbmUgQUNfUElOQ1RMX1ZSRUZfSElaCQkwCS8qIEhpLVogKi8KICNkZWZpbmUgQUNfUElOQ1RMX1ZSRUZfNTAJCTEJLyogNTAlICovCkBAIC03NjAsNyArNzg0LDEwIEBACiAJaGRhX25pZF90IG1mZzsJLyogTUZHIG5vZGUgaWQgKi8KIAogCS8qIGlkcyAqLwotCXUzMiBmdW5jdGlvbl9pZDsKKwl1OCBhZmdfZnVuY3Rpb25faWQ7CisJdTggbWZnX2Z1bmN0aW9uX2lkOworCXU4IGFmZ191bnNvbDsKKwl1OCBtZmdfdW5zb2w7CiAJdTMyIHZlbmRvcl9pZDsKIAl1MzIgc3Vic3lzdGVtX2lkOwogCXUzMiByZXZpc2lvbl9pZDsKQEAgLTkyOCw3ICs5NTUsOCBAQAogdW5zaWduZWQgaW50IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHVuc2lnbmVkIGludCByYXRlLAogCQkJCQl1bnNpZ25lZCBpbnQgY2hhbm5lbHMsCiAJCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCi0JCQkJCXVuc2lnbmVkIGludCBtYXhicHMpOworCQkJCQl1bnNpZ25lZCBpbnQgbWF4YnBzLAorCQkJCQl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzKTsKIGludCBzbmRfaGRhX2lzX3N1cHBvcnRlZF9mb3JtYXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdW5zaWduZWQgaW50IGZvcm1hdCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCmluZGV4IGExZmM4MzcuLmJmM2NlZDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwpAQCAtNjQ5LDcgKzY0OSw5IEBACiAJKmNvZGVjcCA9IE5VTEw7CiAJaWYgKHNzY2FuZihidWYsICIlaSAlaSAlaSIsICZ2ZW5kb3JpZCwgJnN1YmlkLCAmY2FkZHIpID09IDMpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewotCQkJaWYgKGNvZGVjLT5hZGRyID09IGNhZGRyKSB7CisJCQlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSB2ZW5kb3JpZCAmJgorCQkJICAgIGNvZGVjLT5zdWJzeXN0ZW1faWQgPT0gc3ViaWQgJiYKKwkJCSAgICBjb2RlYy0+YWRkciA9PSBjYWRkcikgewogCQkJCSpjb2RlY3AgPSBjb2RlYzsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDFkZjI1Y2YuLjY2ZDQyMDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMTY1Myw3ICsxNjUzLDggQEAKIAlmb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKIAkJCQkJCXJ1bnRpbWUtPmNoYW5uZWxzLAogCQkJCQkJcnVudGltZS0+Zm9ybWF0LAotCQkJCQkJaGluZm8tPm1heGJwcyk7CisJCQkJCQloaW5mby0+bWF4YnBzLAorCQkJCQkJYXBjbS0+Y29kZWMtPnNwZGlmX2N0bHMpOwogCWlmICghZm9ybWF0X3ZhbCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWAogCQkJICAgImludmFsaWQgZm9ybWF0X3ZhbCwgcmF0ZT0lZCwgY2g9JWQsIGZvcm1hdD0lZFxuIiwKQEAgLTE5NjAsNyArMTk2MSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCQlpZiAoIXBlbmRpbmcpCiAJCQlyZXR1cm47Ci0JCWNvbmRfcmVzY2hlZCgpOworCQltc2xlZXAoMSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggZjk3ZDM1ZC4uZjAyNTIwMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtNTU3LDcgKzU1NywxMiBAQAogCWVsc2UKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiTm90IFNldFxuIik7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiQWRkcmVzczogJWRcbiIsIGNvZGVjLT5hZGRyKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJGdW5jdGlvbiBJZDogMHgleFxuIiwgY29kZWMtPmZ1bmN0aW9uX2lkKTsKKwlpZiAoY29kZWMtPmFmZykKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiQUZHIEZ1bmN0aW9uIElkOiAweCV4ICh1bnNvbCAldSlcbiIsCisJCQljb2RlYy0+YWZnX2Z1bmN0aW9uX2lkLCBjb2RlYy0+YWZnX3Vuc29sKTsKKwlpZiAoY29kZWMtPm1mZykKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiTUZHIEZ1bmN0aW9uIElkOiAweCV4ICh1bnNvbCAldSlcbiIsCisJCQljb2RlYy0+bWZnX2Z1bmN0aW9uX2lkLCBjb2RlYy0+bWZnX3Vuc29sKTsKIAlzbmRfaXByaW50ZihidWZmZXIsICJWZW5kb3IgSWQ6IDB4JTA4eFxuIiwgY29kZWMtPnZlbmRvcl9pZCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiU3Vic3lzdGVtIElkOiAweCUwOHhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlJldmlzaW9uIElkOiAweCV4XG4iLCBjb2RlYy0+cmV2aXNpb25faWQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggYWZiZTMxNC4uYjY5N2ZkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC0zNjYyLDcgKzM2NjIsMTIgQEAKIAkJY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zID0gYWQxOTg0X2J1aWxkX3BjbXM7CiAJCWJyZWFrOwogCWNhc2UgQUQxOTg0X1RISU5LUEFEOgotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFEMTg4NF9TUERJRl9PVVQ7CisJCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTIwZmIpIHsKKwkJCS8qIFRoaW5wYWQgWDMwMCBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGRvIFNQRElGLAorCQkJICAgb3IgYXR0YWNoIHRvIGRvY2tpbmcgc3RhdGlvbiB0byB1c2UgU1BESUYgKi8KKwkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJfSBlbHNlCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFEMTg4NF9TUERJRl9PVVQ7CiAJCXNwZWMtPmlucHV0X211eCA9ICZhZDE5ODRfdGhpbmtwYWRfY2FwdHVyZV9zb3VyY2U7CiAJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NF90aGlua3BhZF9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnMrK10gPSBhZDE5ODRfdGhpbmtwYWRfaW5pdF92ZXJiczsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCAyYmYyY2I1Li5kZjhiMTliIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMzEsNiArMTMxLDggQEAKIAl1bnNpZ25lZCBpbnQgZGNfZW5hYmxlOwogCXVuc2lnbmVkIGludCBkY19pbnB1dF9iaWFzOyAvKiBvZmZzZXQgaW50byBjeHQ1MDY2X29scGNfZGNfYmlhcyAqLwogCXVuc2lnbmVkIGludCBtaWNfYm9vc3Q7IC8qIG9mZnNldCBpbnRvIGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCAqLworCisJdW5zaWduZWQgaW50IGJlZXBfYW1wOwogfTsKIAogc3RhdGljIGludCBjb25leGFudF9wbGF5YmFja19wY21fb3BlbihzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApAQCAtNTE1LDYgKzUxNywxNSBAQAogCXt9CiB9OwogCisjaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUAorLyogYWRkaXRpb25hbCBiZWVwIG1peGVyczsgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbiBhdCBidWlsZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dF9iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDAsIDEsIDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFX0JFRVBfTU9OTygiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAwLCAxLCAwLCBIREFfT1VUUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworI2VuZGlmCisKIHN0YXRpYyBjb25zdCBjaGFyICpzbGF2ZV92b2xzW10gPSB7CiAJIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLAogCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCkBAIC01ODAsMTYgKzU5MSw1MiBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBjeHRfYmVlcF9taXhlcjsga25ldy0+bmFtZTsga25ldysrKSB7CisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOworCQkJa2N0bCA9IHNuZF9jdGxfbmV3MShrbmV3LCBjb2RlYyk7CisJCQlpZiAoIWtjdGwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlrY3RsLT5wcml2YXRlX3ZhbHVlID0gc3BlYy0+YmVlcF9hbXA7CisJCQllcnIgPSBzbmRfaGRhX2N0bF9hZGQoY29kZWMsIDAsIGtjdGwpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCitzdGF0aWMgaW50IGNvbmV4YW50X3N1c3BlbmQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzbmRfaGRhX3NodXR1cF9waW5zKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgY29uZXhhbnRfcGF0Y2hfb3BzID0gewogCS5idWlsZF9jb250cm9scyA9IGNvbmV4YW50X2J1aWxkX2NvbnRyb2xzLAogCS5idWlsZF9wY21zID0gY29uZXhhbnRfYnVpbGRfcGNtcywKIAkuaW5pdCA9IGNvbmV4YW50X2luaXQsCiAJLmZyZWUgPSBjb25leGFudF9mcmVlLAorI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkuc3VzcGVuZCA9IGNvbmV4YW50X3N1c3BlbmQsCisjZW5kaWYKKwkucmVib290X25vdGlmeSA9IHNuZF9oZGFfc2h1dHVwX3BpbnMsCiB9OwogCisjaWZkZWYgQ09ORklHX1NORF9IREFfSU5QVVRfQkVFUAorI2RlZmluZSBzZXRfYmVlcF9hbXAoc3BlYywgbmlkLCBpZHgsIGRpcikgXAorCSgoc3BlYyktPmJlZXBfYW1wID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIGlkeCwgZGlyKSkKKyNlbHNlCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSAvKiBOT1AgKi8KKyNlbmRpZgorCiAvKgogICogRUFQRCBjb250cm9sCiAgKiB0aGUgcHJpdmF0ZSB2YWx1ZSA9IG5pZCB8IChpbnZlcnQgPDwgOCkKQEAgLTExMzAsOSArMTE3NywxMCBAQAogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA0NV9pbml0X3ZlcmJzOwogCXNwZWMtPnNwZGlmX3JvdXRlID0gMDsKLQlzcGVjLT5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShjeHQ1MDQ1X21vZGVzKSwKLQlzcGVjLT5jaGFubmVsX21vZGUgPSBjeHQ1MDQ1X21vZGVzLAorCXNwZWMtPm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGN4dDUwNDVfbW9kZXMpOworCXNwZWMtPmNoYW5uZWxfbW9kZSA9IGN4dDUwNDVfbW9kZXM7CiAKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxNiwgMCwgMSk7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gY29uZXhhbnRfcGF0Y2hfb3BzOwogCkBAIC0xMjExLDYgKzEyNTksOSBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoc3BlYy0+YmVlcF9hbXApCisJCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCBzcGVjLT5iZWVwX2FtcCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYzMiw2ICsxNjgzLDExIEBACiAJcGluY3RsID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IFBJTl9PVVQgOiAwOwogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MWEsIDAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKIAkJCSAgICBwaW5jdGwpOworCS8qIG9uIGlkZWFwYWQgdGhlcmUgaXMgYW4gYWRpdGlvbmFsIHNwZWFrZXIgKHN1Yndvb2ZlcikgdG8gbXV0ZSAqLworCWlmIChzcGVjLT5pZGVhcGFkKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJICAgIHBpbmN0bCk7CiB9CiAKIC8qIHR1cm4gb24vb2ZmIEVBUEQgKCsgbXV0ZSBIUCkgYXMgYSBtYXN0ZXIgc3dpdGNoICovCkBAIC0xODg4LDYgKzE5NDQsMTMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfaWRlYXBhZF9pbml0X3ZlcmJzW10gPSB7CisJLyogU3Vid29vZmVyICovCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwl7IH0gLyogZW5kICovCit9OworCiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNTFfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTE5MTcsNiArMTk4MCw3IEBACiAJQ1hUNTA1MV9MRU5PVk9fWDIwMCwJLyogTGVub3ZvIFgyMDAgbGFwdG9wLCBhbHNvIHVzZWQgZm9yIEFkdmFuY2VkIE1pbmkgRG9jayAyNTA0MTAgKi8KIAlDWFQ1MDUxX0Y3MDAsICAgICAgIC8qIEhQIENvbXBhcSBQcmVzYXJpbyBGNzAwICovCiAJQ1hUNTA1MV9UT1NISUJBLAkvKiBUb3NoaWJhIE0zMDAgJiBjbyAqLworCUNYVDUwNTFfSURFQVBBRCwJLyogTGVub3ZvIElkZWFQYWQgWTQzMCAqLwogCUNYVDUwNTFfTU9ERUxTCiB9OwogCkBAIC0xOTI3LDYgKzE5OTEsNyBAQAogCVtDWFQ1MDUxX0xFTk9WT19YMjAwXQk9ICJsZW5vdm8teDIwMCIsCiAJW0NYVDUwNTFfRjcwMF0gICAgICAgICAgPSAiaHAtNzAwIiwKIAlbQ1hUNTA1MV9UT1NISUJBXQk9ICJ0b3NoaWJhIiwKKwlbQ1hUNTA1MV9JREVBUEFEXQk9ICJpZGVhcGFkIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBjeHQ1MDUxX2NmZ190YmxbXSA9IHsKQEAgLTE5MzgsNiArMjAwMyw3IEBACiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiTGVub3ZvIFgyMDAiLCBDWFQ1MDUxX0xFTk9WT19YMjAwKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYTBkLCAiTGVub3ZvIElkZWFQYWQiLCBDWFQ1MDUxX0lERUFQQUQpLAogCXt9CiB9OwogCkBAIC0xOTcyLDYgKzIwMzgsOCBAQAogCXNwZWMtPmN1cl9hZGMgPSAwOwogCXNwZWMtPmN1cl9hZGNfaWR4ID0gMDsKIAorCXNldF9iZWVwX2FtcChzcGVjLCAweDEzLCAwLCBIREFfT1VUUFVUKTsKKwogCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OwogCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLApAQCAtMTk4OSw2ICsyMDU3LDEwIEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA1MV9MRU5PVk9fWDIwMDoKIAkJc3BlYy0+aW5pdF92ZXJic1swXSA9IGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJiczsKKwkJLyogVGhpbmtwYWQgWDMwMSBkb2VzIG5vdCBoYXZlIFMvUERJRiB3aXJlZCBhbmQgbm8gYWJpbGl0eQorCQkgICB0byB1c2UgYSBkb2NraW5nIHN0YXRpb24uICovCisJCWlmIChjb2RlYy0+c3Vic3lzdGVtX2lkID09IDB4MTdhYTIxMWYpCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA1MV9GNzAwOgogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9mNzAwX2luaXRfdmVyYnM7CkBAIC0xOTk5LDggKzIwNzEsMTYgQEAKIAkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA1MV90b3NoaWJhX21peGVyczsKIAkJc3BlYy0+YXV0b19taWMgPSBBVVRPX01JQ19QT1JUQjsKIAkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX0lERUFQQUQ6CisJCXNwZWMtPmluaXRfdmVyYnNbc3BlYy0+bnVtX2luaXRfdmVyYnMrK10gPQorCQkJY3h0NTA1MV9pZGVhcGFkX2luaXRfdmVyYnM7CisJCXNwZWMtPmlkZWFwYWQgPSAxOworCQlicmVhazsKIAl9CiAKKwlpZiAoc3BlYy0+YmVlcF9hbXApCisJCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCBzcGVjLT5iZWVwX2FtcCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYxNiw3ICsyNjk2LDYgQEAKIAkJLnB1dCA9IGN4dDUwNjZfbWljX2Jvb3N0X211eF9lbnVtX3B1dCwKIAkJLnByaXZhdGVfdmFsdWUgPSAweDIzIHwgMHgxMDAsCiAJfSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMSwgMHgwLCBIREFfT1VUUFVUKSwKIAl7fQogfTsKIApAQCAtMjk3Nyw4ICszMDU2LDEwIEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiMiwgIlRoaW5rcGFkIFgxMDBlIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWIzLCAiVGhpbmtwYWQgRWRnZSAxMyAoMTk3KSIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiNCwgIlRoaW5rcGFkIEVkZ2UiLCBDWFQ1MDY2X0lERUFQQUQpLAorIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCisgCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRyBzZXJpZXMiLCBDWFQ1MDY2X0lERUFQQUQpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM5MzgsICJMZW5vdm8gRyBzZXJpZXMgKEFNRCkiLCBDWFQ1MDY2X0lERUFQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDNhMGQsICJpZGVhcGFkIiwgQ1hUNTA2Nl9JREVBUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCiAJe30KIH07CiAKQEAgLTMwMTQsNiArMzA5NSw4IEBACiAJc3BlYy0+Y3VyX2FkYyA9IDA7CiAJc3BlYy0+Y3VyX2FkY19pZHggPSAwOwogCisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTMsIDAsIEhEQV9PVVRQVVQpOworCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNjZfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDY2X21vZGVscywgY3h0NTA2Nl9jZmdfdGJsKTsKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewpAQCAtMzA2Miw3ICszMTQ1LDYgQEAKIAkJc3BlYy0+cG9ydF9kX21vZGUgPSAwOwogCQlzcGVjLT5kZWxsX3Zvc3RybyA9IDE7CiAJCXNwZWMtPm1pY19ib29zdCA9IDM7IC8qIGRlZmF1bHQgMzBkQiBnYWluICovCi0JCXNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEzKTsKIAogCQkvKiBubyBTL1BESUYgb3V0ICovCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKQEAgLTMxMDQsNiArMzE4Niw5IEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChzcGVjLT5iZWVwX2FtcCkKKwkJc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIHNwZWMtPmJlZXBfYW1wKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDJmYzUzOTYuLjUyMmUwNzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC02OTgsMTEgKzY5OCw1MSBAQAogICogQ2FsbGJhY2tzCiAgKi8KIAotc3RhdGljIHZvaWQgaGRtaV9zZXR1cF9zdHJlYW0oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisvKiBIQlIgc2hvdWxkIGJlIE5vbi1QQ00sIDggY2hhbm5lbHMgKi8KKyNkZWZpbmUgaXNfaGJyX2Zvcm1hdChmb3JtYXQpIFwKKwkoKGZvcm1hdCAmIEFDX0ZNVF9UWVBFX05PTl9QQ00pICYmIChmb3JtYXQgJiBBQ19GTVRfQ0hBTl9NQVNLKSA9PSA3KQorCitzdGF0aWMgaW50IGhkbWlfc2V0dXBfc3RyZWFtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAogCQkJICAgICAgdTMyIHN0cmVhbV90YWcsIGludCBmb3JtYXQpCiB7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCB0YWc7CiAJaW50IGZtdDsKKwlpbnQgcGluY3RsOworCWludCBuZXdfcGluY3RsID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7CisJCWlmIChzcGVjLT5waW5fY3Z0W2ldICE9IG5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIShzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBzcGVjLT5waW5baV0pICYgQUNfUElOQ0FQX0hCUikpCisJCQljb250aW51ZTsKKworCQlwaW5jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHNwZWMtPnBpbltpXSwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMCk7CisKKwkJbmV3X3BpbmN0bCA9IHBpbmN0bCAmIH5BQ19QSU5DVExfRVBUOworCQlpZiAoaXNfaGJyX2Zvcm1hdChmb3JtYXQpKQorCQkJbmV3X3BpbmN0bCB8PSBBQ19QSU5DVExfRVBUX0hCUjsKKwkJZWxzZQorCQkJbmV3X3BpbmN0bCB8PSBBQ19QSU5DVExfRVBUX05BVElWRTsKKworCQlzbmRfcHJpbnRkZCgiaGRtaV9zZXR1cF9zdHJlYW06ICIKKwkJCSAgICAiTklEPTB4JXgsICVzcGluY3RsPTB4JXhcbiIsCisJCQkgICAgc3BlYy0+cGluW2ldLAorCQkJICAgIHBpbmN0bCA9PSBuZXdfcGluY3RsID8gIiIgOiAibmV3LSIsCisJCQkgICAgbmV3X3BpbmN0bCk7CisKKwkJaWYgKHBpbmN0bCAhPSBuZXdfcGluY3RsKQorCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+cGluW2ldLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgICAgbmV3X3BpbmN0bCk7CisJfQorCisJaWYgKGlzX2hicl9mb3JtYXQoZm9ybWF0KSAmJiAhbmV3X3BpbmN0bCkgeworCQlzbmRfcHJpbnRkZCgiaGRtaV9zZXR1cF9zdHJlYW06IEhCUiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJdGFnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTlYsIDApID4+IDQ7CiAJZm10ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1NUUkVBTV9GT1JNQVQsIDApOwpAQCAtNzIyLDYgKzc2Miw3IEBACiAJaWYgKGZtdCAhPSBmb3JtYXQpCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkgICAgQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgZm9ybWF0KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jCmluZGV4IGI4MWQyM2UuLjU5NzJkNWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYwpAQCAtNjYsOCArNjYsNyBAQAogCiAJaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoY29kZWMsIGhpbmZvLT5uaWQsIHN1YnN0cmVhbSk7CiAKLQloZG1pX3NldHVwX3N0cmVhbShjb2RlYywgaGluZm8tPm5pZCwgc3RyZWFtX3RhZywgZm9ybWF0KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaGRtaV9zZXR1cF9zdHJlYW0oY29kZWMsIGhpbmZvLT5uaWQsIHN0cmVhbV90YWcsIGZvcm1hdCk7CiB9CiAKIHN0YXRpYyBpbnQgaW50ZWxfaGRtaV9wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKaW5kZXggYjA2NTJhYy4uYTI4MTgzNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCkBAIC0yMDIsOCArMjAyLDcgQEAKIAogCWhkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGNvZGVjLCBoaW5mby0+bmlkLCBzdWJzdHJlYW0pOwogCi0JaGRtaV9zZXR1cF9zdHJlYW0oY29kZWMsIGhpbmZvLT5uaWQsIHN0cmVhbV90YWcsIGZvcm1hdCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGhkbWlfc2V0dXBfc3RyZWFtKGNvZGVjLCBoaW5mby0+bmlkLCBzdHJlYW1fdGFnLCBmb3JtYXQpOwogfQogCiBzdGF0aWMgaW50IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmVfOGNoKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDU5NmVhMmYuLjZhYzUzZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0yNTYsNiArMjU2LDEzIEBACiAJQUxDODgyX01PREVMX0xBU1QsCiB9OwogCisvKiBBTEM2ODAgbW9kZWxzICovCitlbnVtIHsKKwlBTEM2ODBfQkFTRSwKKwlBTEM2ODBfQVVUTywKKwlBTEM2ODBfTU9ERUxfTEFTVCwKK307CisKIC8qIGZvciBHUElPIFBvbGwgKi8KICNkZWZpbmUgR1BJT19NQVNLCTB4MDMKIApAQCAtMzI2LDYgKzMzMywxMiBAQAogCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CiAJaGRhX25pZF90IGRpZ19pbl9uaWQ7CQkvKiBkaWdpdGFsLWluIE5JRDsgb3B0aW9uYWwgKi8KIAorCS8qIGNhcHR1cmUgc2V0dXAgZm9yIGR5bmFtaWMgZHVhbC1hZGMgc3dpdGNoICovCisJdW5zaWduZWQgaW50IGN1cl9hZGNfaWR4OworCWhkYV9uaWRfdCBjdXJfYWRjOworCXVuc2lnbmVkIGludCBjdXJfYWRjX3N0cmVhbV90YWc7CisJdW5zaWduZWQgaW50IGN1cl9hZGNfZm9ybWF0OworCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX211eF9kZWZzOwogCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbnB1dF9tdXg7CkBAIC0zNjcsNiArMzgwLDcgQEAKIAogCS8qIG90aGVyIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG5vX2FuYWxvZyA6MTsgLyogZGlnaXRhbCBJL08gb25seSAqLworCXVuc2lnbmVkIGludCBkdWFsX2FkY19zd2l0Y2g6MTsgLyogc3dpdGNoIEFEQ3MgKGZvciBBTEMyNzUpICovCiAJaW50IGluaXRfYW1wOwogCiAJLyogZm9yIHZpcnR1YWwgbWFzdGVyICovCkBAIC04MzMsOSArODQ3LDEzIEBACiAKIAlpZiAoYXV0b19waW5fdHlwZSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMpIHsKIAkJdW5zaWduZWQgaW50IHBpbmNhcDsKKwkJdW5zaWduZWQgaW50IG9sZHZhbDsKKwkJb2xkdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOwogCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOwotCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUZfODApCisJCS8qIGlmIHRoZSBkZWZhdWx0IHBpbiBzZXR1cCBpcyB2cmVmNTAsIHdlIGdpdmUgaXQgcHJpb3JpdHkgKi8KKwkJaWYgKChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl84MCkgJiYgb2xkdmFsICE9IFBJTl9WUkVGNTApCiAJCQl2YWwgPSBQSU5fVlJFRjgwOwogCQllbHNlIGlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl81MCkKIAkJCXZhbCA9IFBJTl9WUkVGNTA7CkBAIC0xMDAzLDYgKzEwMjEsMjkgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKy8qIHN3aXRjaCB0aGUgY3VycmVudCBBREMgYWNjb3JkaW5nIHRvIHRoZSBqYWNrIHN0YXRlICovCitzdGF0aWMgdm9pZCBhbGNfZHVhbF9taWNfYWRjX2F1dG9fc3dpdGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXVuc2lnbmVkIGludCBwcmVzZW50OworCWhkYV9uaWRfdCBuZXdfYWRjOworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIHNwZWMtPmV4dF9taWMucGluKTsKKwlpZiAocHJlc2VudCkKKwkJc3BlYy0+Y3VyX2FkY19pZHggPSAxOworCWVsc2UKKwkJc3BlYy0+Y3VyX2FkY19pZHggPSAwOworCW5ld19hZGMgPSBzcGVjLT5hZGNfbmlkc1tzcGVjLT5jdXJfYWRjX2lkeF07CisJaWYgKHNwZWMtPmN1cl9hZGMgJiYgc3BlYy0+Y3VyX2FkYyAhPSBuZXdfYWRjKSB7CisJCS8qIHN0cmVhbSBpcyBydW5uaW5nLCBsZXQncyBzd2FwIHRoZSBjdXJyZW50IEFEQyAqLworCQlzbmRfaGRhX2NvZGVjX2NsZWFudXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5jdXJfYWRjKTsKKwkJc3BlYy0+Y3VyX2FkYyA9IG5ld19hZGM7CisJCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBuZXdfYWRjLAorCQkJCQkgICBzcGVjLT5jdXJfYWRjX3N0cmVhbV90YWcsIDAsCisJCQkJCSAgIHNwZWMtPmN1cl9hZGNfZm9ybWF0KTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGFsY19taWNfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0xMDE3LDYgKzEwNTgsMTEgQEAKIAlpZiAoc25kX0JVR19PTighc3BlYy0+YWRjX25pZHMpKQogCQlyZXR1cm47CiAKKwlpZiAoc3BlYy0+ZHVhbF9hZGNfc3dpdGNoKSB7CisJCWFsY19kdWFsX21pY19hZGNfYXV0b19zd2l0Y2goY29kZWMpOworCQlyZXR1cm47CisJfQorCiAJY2FwX25pZCA9IHNwZWMtPmNhcHNyY19uaWRzID8gc3BlYy0+Y2Fwc3JjX25pZHNbMF0gOiBzcGVjLT5hZGNfbmlkc1swXTsKIAogCXByZXNlbnQgPSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBzcGVjLT5leHRfbWljLnBpbik7CkBAIC0xNDk5LDYgKzE1NDUsNjMgQEAKIAlyZXR1cm4gdmFsOwogfQogCisvKiBzZXQgcmlnaHQgcGluIGNvbnRyb2xzIGZvciBkaWdpdGFsIEkvTyAqLworc3RhdGljIHZvaWQgYWxjX2F1dG9faW5pdF9kaWdpdGFsKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCWhkYV9uaWRfdCBwaW47CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+YXV0b2NmZy5kaWdfb3V0czsgaSsrKSB7CisJCXBpbiA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW5zW2ldOworCQlpZiAocGluKSB7CisJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW4sIDAsCisJCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgICBQSU5fT1VUKTsKKwkJfQorCX0KKwlwaW4gPSBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW47CisJaWYgKHBpbikKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJICAgIFBJTl9JTik7Cit9CisKKy8qIHBhcnNlIGRpZ2l0YWwgSS9PcyBhbmQgc2V0IHVwIE5JRHMgaW4gQklPUyBhdXRvLXBhcnNlIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGFsY19hdXRvX3BhcnNlX2RpZ2l0YWwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGksIGVycjsKKwloZGFfbmlkX3QgZGlnX25pZDsKKworCS8qIHN1cHBvcnQgbXVsdGlwbGUgU1BESUZzOyB0aGUgc2Vjb25kYXJ5IGlzIHNldCB1cCBhcyBhIHNsYXZlICovCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcuZGlnX291dHM7IGkrKykgeworCQllcnIgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywKKwkJCQkJICAgICAgc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbnNbaV0sCisJCQkJCSAgICAgICZkaWdfbmlkLCAxKTsKKwkJaWYgKGVyciA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKCFpKSB7CisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CisJCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwkJfSBlbHNlIHsKKwkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJCQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQkJYnJlYWs7CisJCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOworCQl9CisJfQorCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikgeworCQloZGFfbmlkX3QgZGlnX25pZDsKKwkJZXJyID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCisJCQkJCSAgICAgIHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbiwKKwkJCQkJICAgICAgJmRpZ19uaWQsIDEpOworCQlpZiAoZXJyID4gMCkKKwkJCXNwZWMtPmRpZ19pbl9uaWQgPSBkaWdfbmlkOworCX0KK30KKwogLyoKICAqIEFMQzg4OAogICovCkBAIC0zNjA3LDYgKzM3MTAsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogYW5hbG9nIGNhcHR1cmUgd2l0aCBkeW5hbWljIGR1YWwtYWRjIGNoYW5nZXMgKi8KK3N0YXRpYyBpbnQgZHVhbG1pY19jYXB0dXJlX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJICAgICAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+Y3VyX2FkYyA9IHNwZWMtPmFkY19uaWRzW3NwZWMtPmN1cl9hZGNfaWR4XTsKKwlzcGVjLT5jdXJfYWRjX3N0cmVhbV90YWcgPSBzdHJlYW1fdGFnOworCXNwZWMtPmN1cl9hZGNfZm9ybWF0ID0gZm9ybWF0OworCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBzcGVjLT5jdXJfYWRjLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR1YWxtaWNfY2FwdHVyZV9wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc25kX2hkYV9jb2RlY19jbGVhbnVwX3N0cmVhbShjb2RlYywgc3BlYy0+Y3VyX2FkYyk7CisJc3BlYy0+Y3VyX2FkYyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gZHVhbG1pY19wY21fYW5hbG9nX2NhcHR1cmUgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5jaGFubmVsc19tYXggPSAyLAorCS5uaWQgPSAwLCAvKiBmaWxsIGxhdGVyICovCisJLm9wcyA9IHsKKwkJLnByZXBhcmUgPSBkdWFsbWljX2NhcHR1cmVfcGNtX3ByZXBhcmUsCisJCS5jbGVhbnVwID0gZHVhbG1pY19jYXB0dXJlX3BjbV9jbGVhbnVwCisJfSwKK307CiAKIC8qCiAgKi8KQEAgLTQ5MzYsNyArNTA3NCw3IEBACiBzdGF0aWMgaW50IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGM4ODBfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtNDk2NywyNSArNTEwNSw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQkvKiBjaGVjayBtdWx0aXBsZSBTUERJRi1vdXQgKGZvciByZWNlbnQgY29kZWNzKSAqLwotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzOyBpKyspIHsKLQkJaGRhX25pZF90IGRpZ19uaWQ7Ci0JCWVyciA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLAotCQkJCQkgICAgICBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluc1tpXSwKLQkJCQkJICAgICAgJmRpZ19uaWQsIDEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWkpCi0JCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7Ci0JCWVsc2UgewotCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKLQkJCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKLQkJCQlicmVhazsKLQkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7Ci0JCX0KLQl9Ci0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKLQkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzg4MF9ESUdJTl9OSUQ7CisJYWxjX2F1dG9fcGFyc2VfZGlnaXRhbChjb2RlYyk7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwpAQCAtNTAwOCw2ICs1MTI4LDcgQEAKIAlhbGM4ODBfYXV0b19pbml0X2V4dHJhX291dChjb2RlYyk7CiAJYWxjODgwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzg4MF9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKKwlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KQEAgLTUwNDUsNiArNTE2NiwzOSBAQAogCXNwZWMtPmF1dG9fbWljID0gMDsgLyogZGlzYWJsZSBhdXRvLW1pYyB0byBiZSBzdXJlICovCiB9CiAKKy8qIHNlbGVjdCBvciB1bm11dGUgdGhlIGdpdmVuIGNhcHNyYyByb3V0ZSAqLworc3RhdGljIHZvaWQgc2VsZWN0X29yX3VubXV0ZV9jYXBzcmMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBjYXAsCisJCQkJICAgIGludCBpZHgpCit7CisJaWYgKGdldF93Y2Fwc190eXBlKGdldF93Y2Fwcyhjb2RlYywgY2FwKSkgPT0gQUNfV0lEX0FVRF9NSVgpIHsKKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBjYXAsIEhEQV9JTlBVVCwgaWR4LAorCQkJCQkgSERBX0FNUF9NVVRFLCAwKTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBjYXAsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7CisJfQorfQorCisvKiBzZXQgdGhlIGRlZmF1bHQgY29ubmVjdGlvbiB0byB0aGF0IHBpbiAqLworc3RhdGljIGludCBpbml0X2NhcHNyY19mb3JfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9hZGNfbmlkczsgaSsrKSB7CisJCWhkYV9uaWRfdCBjYXAgPSBzcGVjLT5jYXBzcmNfbmlkcyA/CisJCQlzcGVjLT5jYXBzcmNfbmlkc1tpXSA6IHNwZWMtPmFkY19uaWRzW2ldOworCQlpbnQgaWR4OworCisJCWlkeCA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBjYXAsIHBpbik7CisJCWlmIChpZHggPCAwKQorCQkJY29udGludWU7CisJCXNlbGVjdF9vcl91bm11dGVfY2Fwc3JjKGNvZGVjLCBjYXAsIGlkeCk7CisJCXJldHVybiBpOyAvKiByZXR1cm4gdGhlIGZvdW5kIGluZGV4ICovCisJfQorCXJldHVybiAtMTsgLyogbm90IGZvdW5kICovCit9CisKIC8qIGNob29zZSB0aGUgQURDL01VWCBjb250YWluaW5nIHRoZSBpbnB1dCBwaW4gYW5kIGluaXRpYWxpemUgdGhlIHNldHVwICovCiBzdGF0aWMgdm9pZCBmaXh1cF9zaW5nbGVfYWRjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtNTA2MSwzMyArNTIxNSwyNCBAQAogCX0KIAlpZiAoIXBpbikKIAkJcmV0dXJuOwotCi0JLyogc2V0IHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gdG8gdGhhdCBwaW4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2FkY19uaWRzOyBpKyspIHsKLQkJaGRhX25pZF90IGNhcCA9IHNwZWMtPmNhcHNyY19uaWRzID8KLQkJCXNwZWMtPmNhcHNyY19uaWRzW2ldIDogc3BlYy0+YWRjX25pZHNbaV07Ci0JCWludCBpZHg7Ci0KLQkJaWR4ID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIGNhcCwgcGluKTsKLQkJaWYgKGlkeCA8IDApCi0JCQljb250aW51ZTsKKwlpID0gaW5pdF9jYXBzcmNfZm9yX3Bpbihjb2RlYywgcGluKTsKKwlpZiAoaSA+PSAwKSB7CiAJCS8qIHVzZSBvbmx5IHRoaXMgQURDICovCiAJCWlmIChzcGVjLT5jYXBzcmNfbmlkcykKIAkJCXNwZWMtPmNhcHNyY19uaWRzICs9IGk7CiAJCXNwZWMtPmFkY19uaWRzICs9IGk7CiAJCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7Ci0JCS8qIHNlbGVjdCBvciB1bm11dGUgdGhpcyByb3V0ZSAqLwotCQlpZiAoZ2V0X3djYXBzX3R5cGUoZ2V0X3djYXBzKGNvZGVjLCBjYXApKSA9PSBBQ19XSURfQVVEX01JWCkgewotCQkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCBjYXAsIEhEQV9JTlBVVCwgaWR4LAotCQkJCQkJIEhEQV9BTVBfTVVURSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBjYXAsIDAsCi0JCQkJCSAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIGlkeCk7Ci0JCX0KLQkJcmV0dXJuOwogCX0KIH0KIAorLyogaW5pdGlhbGl6ZSBkdWFsIGFkY3MgKi8KK3N0YXRpYyB2b2lkIGZpeHVwX2R1YWxfYWRjX3N3aXRjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbml0X2NhcHNyY19mb3JfcGluKGNvZGVjLCBzcGVjLT5leHRfbWljLnBpbik7CisJaW5pdF9jYXBzcmNfZm9yX3Bpbihjb2RlYywgc3BlYy0+aW50X21pYy5waW4pOworfQorCiBzdGF0aWMgdm9pZCBzZXRfY2FwdHVyZV9taXhlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTUxMDEsNyArNTI0NiwxMCBAQAogCX07CiAJaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpIHsKIAkJaW50IG11eCA9IDA7Ci0JCWlmIChzcGVjLT5hdXRvX21pYykKKwkJaW50IG51bV9hZGNzID0gc3BlYy0+bnVtX2FkY19uaWRzOworCQlpZiAoc3BlYy0+ZHVhbF9hZGNfc3dpdGNoKQorCQkJZml4dXBfZHVhbF9hZGNfc3dpdGNoKGNvZGVjKTsKKwkJZWxzZSBpZiAoc3BlYy0+YXV0b19taWMpCiAJCQlmaXh1cF9hdXRvbWljX2FkYyhjb2RlYyk7CiAJCWVsc2UgaWYgKHNwZWMtPmlucHV0X211eCkgewogCQkJaWYgKHNwZWMtPmlucHV0X211eC0+bnVtX2l0ZW1zID4gMSkKQEAgLTUxMDksNyArNTI1Nyw5IEBACiAJCQllbHNlIGlmIChzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA9PSAxKQogCQkJCWZpeHVwX3NpbmdsZV9hZGMoY29kZWMpOwogCQl9Ci0JCXNwZWMtPmNhcF9taXhlciA9IGNhcHNbbXV4XVtzcGVjLT5udW1fYWRjX25pZHMgLSAxXTsKKwkJaWYgKHNwZWMtPmR1YWxfYWRjX3N3aXRjaCkKKwkJCW51bV9hZGNzID0gMTsKKwkJc3BlYy0+Y2FwX21peGVyID0gY2Fwc1ttdXhdW251bV9hZGNzIC0gMV07CiAJfQogfQogCkBAIC01MTgzLDYgKzUzMzMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYmVlcF93aGl0ZV9saXN0W10gPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5ZiwgIkFTVVMiLCAxKSwKKwlTTkRfUENJX1FVSVJLKDB4ODA4NiwgMHhkNjEzLCAiSW50ZWwiLCAxKSwKIAl7fQogfTsKIApAQCAtNjYyNCw2ICs2Nzc1LDcgQEAKIAlhbGMyNjBfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJYWxjMjYwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOwogCWFsYzI2MF9hdXRvX2luaXRfaW5wdXRfc3JjKGNvZGVjKTsKKwlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KQEAgLTY2NDAsNiArNjc5MiwyOSBAQAogI2VuZGlmCiAKIC8qCisgKiBQaW4gY29uZmlnIGZpeGVzCisgKi8KK2VudW0geworCVBJTkZJWF9IUF9EQzU3NTAsCit9OworCitzdGF0aWMgc3RydWN0IGFsY19waW5jZmcgYWxjMjYwX2hwX2RjNTc1MF9waW5maXhbXSA9IHsKKwl7IDB4MTEsIDB4OTAxMzAxMTAgfSwgLyogc3BlYWtlciAqLworCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjMjYwX2ZpeHVwc1tdID0geworCVtQSU5GSVhfSFBfREM1NzUwXSA9IHsKKwkJLnBpbnMgPSBhbGMyNjBfaHBfZGM1NzUwX3BpbmZpeAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYwX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkYzU3NTAiLCBQSU5GSVhfSFBfREM1NzUwKSwKKwl7fQorfTsKKworLyoKICAqIEFMQzI2MCBjb25maWd1cmF0aW9ucwogICovCiBzdGF0aWMgY29uc3QgY2hhciAqYWxjMjYwX21vZGVsc1tBTEMyNjBfTU9ERUxfTEFTVF0gPSB7CkBAIC02ODM4LDYgKzcwMTMsOSBAQAogCQlib2FyZF9jb25maWcgPSBBTEMyNjBfQVVUTzsKIAl9CiAKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2MF9BVVRPKQorCQlhbGNfcGlja19maXh1cChjb2RlYywgYWxjMjYwX2ZpeHVwX3RibCwgYWxjMjYwX2ZpeHVwcywgMSk7CisKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2MF9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCQllcnIgPSBhbGMyNjBfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwpAQCAtNjg4Myw2ICs3MDYxLDkgQEAKIAlzZXRfY2FwdHVyZV9taXhlcihjb2RlYyk7CiAJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCk7CiAKKwlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2MF9BVVRPKQorCQlhbGNfcGlja19maXh1cChjb2RlYywgYWxjMjYwX2ZpeHVwX3RibCwgYWxjMjYwX2ZpeHVwcywgMCk7CisKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDg7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKQEAgLTcwMDMsNyArNzE4NCw3IEBACiAJLm51bV9pdGVtcyA9IDQsCiAJLml0ZW1zID0gewogCQl7ICJNaWMiLCAweDAgfSwKLQkJeyAiaU1pYyIsIDB4MSB9LAorCQl7ICJJbnQgTWljIiwgMHgxIH0sCiAJCXsgIkxpbmUiLCAweDIgfSwKIAkJeyAiQ0QiLCAweDQgfSwKIAl9LApAQCAtODU3Myw4ICs4NzU0LDggQEAKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoImlNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJpTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTAyNjUsNyArMTA0NDYsOCBAQAogICogUGluIGNvbmZpZyBmaXhlcwogICovCiBlbnVtIHsKLQlQSU5GSVhfQUJJVF9BVzlEX01BWAorCVBJTkZJWF9BQklUX0FXOURfTUFYLAorCVBJTkZJWF9QQl9NNTIxMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYWxjX3BpbmNmZyBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeFtdID0gewpAQCAtMTAyNzUsMTMgKzEwNDU3LDIyIEBACiAJeyB9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIHBiX201MjEwX3ZlcmJzW10gPSB7CisJeyAweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGNTAgfSwKKwl7fQorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODgyX2ZpeHVwc1tdID0gewogCVtQSU5GSVhfQUJJVF9BVzlEX01BWF0gPSB7CiAJCS5waW5zID0gYWxjODgyX2FiaXRfYXc5ZF9waW5maXgKIAl9LAorCVtQSU5GSVhfUEJfTTUyMTBdID0geworCQkudmVyYnMgPSBwYl9tNTIxMF92ZXJicworCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTUsICJQYWNrYXJkLUJlbGwgTTUxMjAiLCBQSU5GSVhfUEJfTTUyMTApLAogCVNORF9QQ0lfUVVJUksoMHgxNDdiLCAweDEwN2EsICJBYml0IEFXOUQtTUFYIiwgUElORklYX0FCSVRfQVc5RF9NQVgpLAogCXt9CiB9OwpAQCAtMTA0NDYsNyArMTA2MzcsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBoZGFfbmlkX3QgYWxjODgyX2lnbm9yZVtdID0geyAweDFkLCAwIH07Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJZXJyID0gc25kX2hkYV9wYXJzZV9waW5fZGVmX2NvbmZpZyhjb2RlYywgJnNwZWMtPmF1dG9jZmcsCiAJCQkJCSAgIGFsYzg4Ml9pZ25vcmUpOwpAQCAtMTA0NzYsMjUgKzEwNjY3LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCS8qIGNoZWNrIG11bHRpcGxlIFNQRElGLW91dCAoZm9yIHJlY2VudCBjb2RlY3MpICovCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPmF1dG9jZmcuZGlnX291dHM7IGkrKykgewotCQloZGFfbmlkX3QgZGlnX25pZDsKLQkJZXJyID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsCi0JCQkJCSAgICAgIHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW5zW2ldLAotCQkJCQkgICAgICAmZGlnX25pZCwgMSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJY29udGludWU7Ci0JCWlmICghaSkKLQkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKLQkJZWxzZSB7Ci0JCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOwotCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQotCQkJCWJyZWFrOwotCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKLQkJfQotCX0KLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQotCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDODgwX0RJR0lOX05JRDsKKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC0xMDUyNCw2ICsxMDY5Nyw3IEBACiAJYWxjODgyX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzg4Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGM4ODJfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CisJYWxjX2F1dG9faW5pdF9kaWdpdGFsKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CkBAIC0xMjA1NCwxMiArMTIyMjgsNyBAQAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAogIGRpZ19vbmx5OgotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7Ci0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQ7Ci0JCXNwZWMtPmRpZ19vdXRfdHlwZSA9IHNwZWMtPmF1dG9jZmcuZGlnX291dF90eXBlWzBdOwotCX0KLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQotCQlzcGVjLT5kaWdfaW5fbmlkID0gQUxDMjYyX0RJR0lOX05JRDsKKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC0xMjA5MSw2ICsxMjI2MCw3IEBACiAJYWxjMjYyX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzI2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKIAlhbGMyNjJfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CisJYWxjX2F1dG9faW5pdF9kaWdpdGFsKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CkBAIC0xMzAyNCwxMCArMTMxOTQsMTQgQEAKIAkJZGFjID0gMHgwMjsKIAkJYnJlYWs7CiAJY2FzZSAweDE1OgorCWNhc2UgMHgxYTogLyogQUxDMjU5LzI2OSBvbmx5ICovCisJY2FzZSAweDFiOiAvKiBBTEMyNTkvMjY5IG9ubHkgKi8KIAljYXNlIDB4MjE6IC8qIEFMQzI2OXZiIGhhcyB0aGlzIHBpbiwgdG9vICovCiAJCWRhYyA9IDB4MDM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6ICIKKwkJCSAgICJpZ25vcmluZyBwaW4gMHgleCBhcyB1bmtub3duXG4iLCBuaWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzBdICE9IGRhYyAmJgpAQCAtMTMwNzgsNyArMTMyNTIsNyBAQAogCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDAsIEhEQV9JTlBVVCkpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKG5pZCkgewogCQllcnIgPSBhbGMyNjhfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCAiU3BlYWtlciIsIDApOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CkBAIC0xMzIyNywxMCArMTM0MDEsNyBAQAogCiAgZGlnX29ubHk6CiAJLyogZGlnaXRhbCBvbmx5IHN1cHBvcnQgb3V0cHV0ICovCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpIHsKLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjhfRElHT1VUX05JRDsKLQkJc3BlYy0+ZGlnX291dF90eXBlID0gc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3R5cGVbMF07Ci0JfQorCWFsY19hdXRvX3BhcnNlX2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKQEAgLTEzMjYwLDYgKzEzNDMxLDcgQEAKIAlhbGMyNjhfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJYWxjMjY4X2F1dG9faW5pdF9tb25vX3NwZWFrZXJfb3V0KGNvZGVjKTsKIAlhbGMyNjhfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CisJYWxjX2F1dG9faW5pdF9kaWdpdGFsKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CkBAIC0xNDE1Miw2ICsxNDMyNCwzNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUgKi8KIAorc3RhdGljIGludCBhbGMyNzVfc2V0dXBfZHVhbF9hZGMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoY29kZWMtPnZlbmRvcl9pZCAhPSAweDEwZWMwMjc1IHx8ICFzcGVjLT5hdXRvX21pYykKKwkJcmV0dXJuIDA7CisJaWYgKChzcGVjLT5leHRfbWljLnBpbiA+PSAweDE4ICYmIHNwZWMtPmludF9taWMucGluIDw9IDB4MTMpIHx8CisJICAgIChzcGVjLT5leHRfbWljLnBpbiA8PSAweDEyICYmIHNwZWMtPmludF9taWMucGluID49IDB4MTgpKSB7CisJCWlmIChzcGVjLT5leHRfbWljLnBpbiA8PSAweDEyKSB7CisJCQlzcGVjLT5wcml2YXRlX2FkY19uaWRzWzBdID0gMHgwODsKKwkJCXNwZWMtPnByaXZhdGVfYWRjX25pZHNbMV0gPSAweDExOworCQkJc3BlYy0+cHJpdmF0ZV9jYXBzcmNfbmlkc1swXSA9IDB4MjM7CisJCQlzcGVjLT5wcml2YXRlX2NhcHNyY19uaWRzWzFdID0gMHgyMjsKKwkJfSBlbHNlIHsKKwkJCXNwZWMtPnByaXZhdGVfYWRjX25pZHNbMF0gPSAweDExOworCQkJc3BlYy0+cHJpdmF0ZV9hZGNfbmlkc1sxXSA9IDB4MDg7CisJCQlzcGVjLT5wcml2YXRlX2NhcHNyY19uaWRzWzBdID0gMHgyMjsKKwkJCXNwZWMtPnByaXZhdGVfY2Fwc3JjX25pZHNbMV0gPSAweDIzOworCQl9CisJCXNwZWMtPmFkY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9hZGNfbmlkczsKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBzcGVjLT5wcml2YXRlX2NhcHNyY19uaWRzOworCQlzcGVjLT5udW1fYWRjX25pZHMgPSAyOworCQlzcGVjLT5kdWFsX2FkY19zd2l0Y2ggPSAxOworCQlzbmRfcHJpbnRkZCgicmVhbHRlazogZW5hYmxpbmcgZHVhbCBBREMgc3dpdGNoZyAoJTAyeDolMDJ4KVxuIiwKKwkJCSAgICBzcGVjLT5hZGNfbmlkc1swXSwgc3BlYy0+YWRjX25pZHNbMV0pOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgogICovCkBAIC0xNDE3NSw4ICsxNDM3Nyw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjlfRElHT1VUX05JRDsKKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC0xNDE5MSwxMyArMTQzOTIsMTUgQEAKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CiAJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKLQlmaWxsdXBfcHJpdl9hZGNfbmlkcyhjb2RlYywgYWxjMjY5X2FkY19jYW5kaWRhdGVzLAotCQkJICAgICBzaXplb2YoYWxjMjY5X2FkY19jYW5kaWRhdGVzKSk7CisKKwlpZiAoIWFsYzI3NV9zZXR1cF9kdWFsX2FkYyhjb2RlYykpCisJCWZpbGx1cF9wcml2X2FkY19uaWRzKGNvZGVjLCBhbGMyNjlfYWRjX2NhbmRpZGF0ZXMsCisJCQkJICAgICBzaXplb2YoYWxjMjY5X2FkY19jYW5kaWRhdGVzKSk7CiAKIAkvKiBzZXQgZGVmYXVsdCBpbnB1dCBzb3VyY2UgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5jYXBzcmNfbmlkc1swXSwKLQkJCQkgIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAotCQkJCSAgc3BlYy0+aW5wdXRfbXV4LT5pdGVtc1swXS5pbmRleCk7CisJaWYgKCFzcGVjLT5kdWFsX2FkY19zd2l0Y2gpCisJCXNlbGVjdF9vcl91bm11dGVfY2Fwc3JjKGNvZGVjLCBzcGVjLT5jYXBzcmNfbmlkc1swXSwKKwkJCQkJc3BlYy0+aW5wdXRfbXV4LT5pdGVtc1swXS5pbmRleCk7CiAKIAllcnIgPSBhbGNfYXV0b19hZGRfbWljX2Jvb3N0KGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTE0MjIxLDYgKzE0NDI0LDcgQEAKIAlhbGMyNjlfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CiAJYWxjMjY5X2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOwogCWFsYzI2OV9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKKwlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOwogCWlmIChzcGVjLT51bnNvbF9ldmVudCkKIAkJYWxjX2luaXRob29rKGNvZGVjKTsKIH0KQEAgLTE0NDkzLDYgKzE0Njk3LDEwIEBACiAJCSAqLwogCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19wbGF5YmFjazsKIAkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlOworCX0gZWxzZSBpZiAoc3BlYy0+ZHVhbF9hZGNfc3dpdGNoKSB7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7CisJCS8qIHN3aXRjaCBBREMgZHluYW1pY2FsbHkgKi8KKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmR1YWxtaWNfcGNtX2FuYWxvZ19jYXB0dXJlOwogCX0gZWxzZSB7CiAJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7CiAJCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2FuYWxvZ19jYXB0dXJlOwpAQCAtMTUzNzgsOCArMTU1ODYsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCi0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxX0RJR09VVF9OSUQ7CisJYWxjX2F1dG9fcGFyc2VfZGlnaXRhbChjb2RlYyk7CiAKIAlpZiAoc3BlYy0+a2N0bHMubGlzdCkKIAkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOwpAQCAtMTU0MDUsNiArMTU2MTIsNyBAQAogCWFsYzg2MV9hdXRvX2luaXRfbXVsdGlfb3V0KGNvZGVjKTsKIAlhbGM4NjFfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJYWxjODYxX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoY29kZWMpOworCWFsY19hdXRvX2luaXRfZGlnaXRhbChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQpAQCAtMTY1MDksOCArMTY3MTcsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgKiAyOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCi0JCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDODYxVkRfRElHT1VUX05JRDsKKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC0xNjUzNyw2ICsxNjc0NCw3IEBACiAJYWxjODYxdmRfYXV0b19pbml0X2hwX291dChjb2RlYyk7CiAJYWxjODYxdmRfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjODYxdmRfYXV0b19pbml0X2lucHV0X3NyYyhjb2RlYyk7CisJYWxjX2F1dG9faW5pdF9kaWdpdGFsKGNvZGVjKTsKIAlpZiAoc3BlYy0+dW5zb2xfZXZlbnQpCiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CkBAIC0xODUyMCw3ICsxODcyOCw3IEBACiAJCQkJCSAgICAgIGhkYV9uaWRfdCBkYWMpCiB7CiAJaW50IGksIG51bTsKLQloZGFfbmlkX3Qgc3Jjc1s0XTsKKwloZGFfbmlkX3Qgc3Jjc1tIREFfTUFYX0NPTk5FQ1RJT05TXTsKIAogCWFsY19zZXRfcGluX291dHB1dChjb2RlYywgbmlkLCBwaW5fdHlwZSk7CiAJLyogbmVlZCB0aGUgbWFudWFsIGNvbm5lY3Rpb24/ICovCkBAIC0xODYyNCw4ICsxODgzMiw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRDsKKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC0xODYzNSw3ICsxODg0Miw3IEBACiAKIAlhZGRfdmVyYihzcGVjLCBhbGM2NjJfaW5pdF92ZXJicyk7CiAJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDI3MiB8fCBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMgfHwKLQkgICAgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjY1KQorCSAgICBjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjUgfHwgY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwNjcwKQogCQlhZGRfdmVyYihzcGVjLCBhbGM2NjNfaW5pdF92ZXJicyk7CiAKIAlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwMjcyKQpAQCAtMTg2NjIsNiArMTg4NjksNyBAQAogCWFsYzY2Ml9hdXRvX2luaXRfaHBfb3V0KGNvZGVjKTsKIAlhbGM2NjJfYXV0b19pbml0X2FuYWxvZ19pbnB1dChjb2RlYyk7CiAJYWxjNjYyX2F1dG9faW5pdF9pbnB1dF9zcmMoY29kZWMpOworCWFsY19hdXRvX2luaXRfZGlnaXRhbChjb2RlYyk7CiAJaWYgKHNwZWMtPnVuc29sX2V2ZW50KQogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQpAQCAtMTg3ODEsNiArMTg5ODksMzMzIEBACiB9CiAKIC8qCisgKiBBTEM2ODAgc3VwcG9ydAorICovCisjZGVmaW5lIEFMQzY4MF9ESUdPVVRfTklECUFMQzg4MF9ESUdPVVRfTklECisjZGVmaW5lIGFsYzY4MF9tb2RlcwkJYWxjMjYwX21vZGVzCisKK3N0YXRpYyBoZGFfbmlkX3QgYWxjNjgwX2RhY19uaWRzWzNdID0geworCS8qIExvdXQxLCBMb3V0MiwgaHAgKi8KKwkweDAyLCAweDAzLCAweDA0Cit9OworCitzdGF0aWMgaGRhX25pZF90IGFsYzY4MF9hZGNfbmlkc1szXSA9IHsKKwkvKiBBREMwLTIgKi8KKwkvKiBETUlDLCBNSUMsIExpbmUtaW4qLworCTB4MDcsIDB4MDgsIDB4MDkKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM2ODBfYmFzZV9taXhlcltdID0geworCS8qIG91dHB1dCBtaXhlciBjb250cm9sICovCisJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgyLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBQbGF5YmFjayBTd2l0Y2giLCAweDE0LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDQsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE2LCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjNjgwX2NhcHR1cmVfbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMSwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAxLCAweDA4LCAweDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMiwgMHgwOSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAyLCAweDA5LCAweDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworLyoKKyAqIGdlbmVyaWMgaW5pdGlhbGl6YXRpb24gb2YgQURDLCBpbnB1dCBtaXhlcnMgYW5kIG91dHB1dCBtaXhlcnMKKyAqLworc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM2ODBfaW5pdF92ZXJic1tdID0geworCS8qIFVubXV0ZSBEQUMwLTEgYW5kIHNldCB2b2wgPSAwICovCisJezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisJezB4MDQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisKKwl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDQwfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweGMwfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDI0fSwKKwl7MHgxOSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKKworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsgfQorfTsKKworLyogY3JlYXRlIGlucHV0IHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIHRoZSBnaXZlbiBwaW4gKi8KK3N0YXRpYyBpbnQgYWxjNjgwX25ld19hbmFsb2dfb3V0cHV0KHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgaGRhX25pZF90IG5pZCwKKwkJCQkgICAgY29uc3QgY2hhciAqY3RsbmFtZSwgaW50IGlkeCkKK3sKKwloZGFfbmlkX3QgZGFjOworCWludCBlcnI7CisKKwlzd2l0Y2ggKG5pZCkgeworCWNhc2UgMHgxNDoKKwkJZGFjID0gMHgwMjsKKwkJYnJlYWs7CisJY2FzZSAweDE1OgorCQlkYWMgPSAweDAzOworCQlicmVhazsKKwljYXNlIDB4MTY6CisJCWRhYyA9IDB4MDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlpZiAoc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0gIT0gZGFjICYmCisJICAgIHNwZWMtPm11bHRpb3V0LmRhY19uaWRzWzFdICE9IGRhYykgeworCQllcnIgPSBhZGRfcGJfdm9sX2N0cmwoc3BlYywgQUxDX0NUTF9XSURHRVRfVk9MLCBjdGxuYW1lLAorCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChkYWMsIDMsIGlkeCwKKwkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFkZF9wYl9zd19jdHJsKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIGN0bG5hbWUsCisJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCBpZHgsIEhEQV9PVVRQVVQpKTsKKworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW3NwZWMtPm11bHRpb3V0Lm51bV9kYWNzKytdID0gZGFjOworCX0KKworCXJldHVybiAwOworfQorCisvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLworc3RhdGljIGludCBhbGM2ODBfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKK3sKKwloZGFfbmlkX3QgbmlkOworCWludCBlcnI7CisKKwlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPnByaXZhdGVfZGFjX25pZHM7CisKKwluaWQgPSBjZmctPmxpbmVfb3V0X3BpbnNbMF07CisJaWYgKG5pZCkgeworCQljb25zdCBjaGFyICpuYW1lOworCQlpZiAoY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQorCQkJbmFtZSA9ICJTcGVha2VyIjsKKwkJZWxzZQorCQkJbmFtZSA9ICJGcm9udCI7CisJCWVyciA9IGFsYzY4MF9uZXdfYW5hbG9nX291dHB1dChzcGVjLCBuaWQsIG5hbWUsIDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJbmlkID0gY2ZnLT5zcGVha2VyX3BpbnNbMF07CisJaWYgKG5pZCkgeworCQllcnIgPSBhbGM2ODBfbmV3X2FuYWxvZ19vdXRwdXQoc3BlYywgbmlkLCAiU3BlYWtlciIsIDApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCW5pZCA9IGNmZy0+aHBfcGluc1swXTsKKwlpZiAobmlkKSB7CisJCWVyciA9IGFsYzY4MF9uZXdfYW5hbG9nX291dHB1dChzcGVjLCBuaWQsICJIZWFkcGhvbmUiLCAwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbGM2ODBfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBwaW5fdHlwZSkKK3sKKwlhbGNfc2V0X3Bpbl9vdXRwdXQoY29kZWMsIG5pZCwgcGluX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBhbGM2ODBfYXV0b19pbml0X211bHRpX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zWzBdOworCWlmIChuaWQpIHsKKwkJaW50IHBpbl90eXBlID0gZ2V0X3Bpbl90eXBlKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSk7CisJCWFsYzY4MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgbmlkLCBwaW5fdHlwZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGM2ODBfYXV0b19pbml0X2hwX291dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgcGluOworCisJcGluID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOworCWlmIChwaW4pCisJCWFsYzY4MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fSFApOworCXBpbiA9IHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdOworCWlmIChwaW4pCisJCWFsYzY4MF9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VUKTsKK30KKworLyogcGNtIGNvbmZpZ3VyYXRpb246IGlkZW50aWNhbCB3aXRoIEFMQzg4MCAqLworI2RlZmluZSBhbGM2ODBfcGNtX2FuYWxvZ19wbGF5YmFjawlhbGM4ODBfcGNtX2FuYWxvZ19wbGF5YmFjaworI2RlZmluZSBhbGM2ODBfcGNtX2FuYWxvZ19jYXB0dXJlCWFsYzg4MF9wY21fYW5hbG9nX2NhcHR1cmUKKyNkZWZpbmUgYWxjNjgwX3BjbV9hbmFsb2dfYWx0X2NhcHR1cmUJYWxjODgwX3BjbV9hbmFsb2dfYWx0X2NhcHR1cmUKKyNkZWZpbmUgYWxjNjgwX3BjbV9kaWdpdGFsX3BsYXliYWNrCWFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjaworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjNjgwX2NhcHR1cmVfc291cmNlID0geworCS5udW1faXRlbXMgPSAxLAorCS5pdGVtcyA9IHsKKwkJeyAiTWljIiwgMHgwIH0sCisJfSwKK307CisKKy8qCisgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgorICovCitzdGF0aWMgaW50IGFsYzY4MF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgZXJyOworCXN0YXRpYyBoZGFfbmlkX3QgYWxjNjgwX2lnbm9yZVtdID0geyAwIH07CisKKwllcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLCAmc3BlYy0+YXV0b2NmZywKKwkJCQkJICAgYWxjNjgwX2lnbm9yZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQorCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KKwl9CisJZXJyID0gYWxjNjgwX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisKKyBkaWdfb25seToKKwkvKiBkaWdpdGFsIG9ubHkgc3VwcG9ydCBvdXRwdXQgKi8KKwlhbGNfYXV0b19wYXJzZV9kaWdpdGFsKGNvZGVjKTsKKwlpZiAoc3BlYy0+a2N0bHMubGlzdCkKKwkJYWRkX21peGVyKHNwZWMsIHNwZWMtPmtjdGxzLmxpc3QpOworCisJYWRkX3ZlcmIoc3BlYywgYWxjNjgwX2luaXRfdmVyYnMpOworCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7CisJc3BlYy0+aW5wdXRfbXV4ID0gJmFsYzY4MF9jYXB0dXJlX3NvdXJjZTsKKworCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgYWxjNjgwX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQJYWxjODgyX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQKKworLyogaW5pdCBjYWxsYmFjayBmb3IgYXV0by1jb25maWd1cmF0aW9uIG1vZGVsIC0tIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgaW5pdCAqLworc3RhdGljIHZvaWQgYWxjNjgwX2F1dG9faW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlhbGM2ODBfYXV0b19pbml0X211bHRpX291dChjb2RlYyk7CisJYWxjNjgwX2F1dG9faW5pdF9ocF9vdXQoY29kZWMpOworCWFsYzY4MF9hdXRvX2luaXRfYW5hbG9nX2lucHV0KGNvZGVjKTsKKwlhbGNfYXV0b19pbml0X2RpZ2l0YWwoY29kZWMpOworCWlmIChzcGVjLT51bnNvbF9ldmVudCkKKwkJYWxjX2luaXRob29rKGNvZGVjKTsKK30KKworLyoKKyAqIGNvbmZpZ3VyYXRpb24gYW5kIHByZXNldAorICovCitzdGF0aWMgY29uc3QgY2hhciAqYWxjNjgwX21vZGVsc1tBTEM2ODBfTU9ERUxfTEFTVF0gPSB7CisJW0FMQzY4MF9CQVNFXQkJPSAiYmFzZSIsCisJW0FMQzY4MF9BVVRPXQkJPSAiYXV0byIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjgwX2NmZ190YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmYzLCAiQVNVUyBOWDkwIiwgQUxDNjgwX0JBU0UpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGFsY19jb25maWdfcHJlc2V0IGFsYzY4MF9wcmVzZXRzW10gPSB7CisJW0FMQzY4MF9CQVNFXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjNjgwX2Jhc2VfbWl4ZXIgfSwKKwkJLmNhcF9taXhlciA9ICBhbGM2ODBfY2FwdHVyZV9taXhlciwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzY4MF9pbml0X3ZlcmJzIH0sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjNjgwX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjNjgwX2RhY19uaWRzLAorCQkubnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2ODBfYWRjX25pZHMpLAorCQkuYWRjX25pZHMgPSBhbGM2ODBfYWRjX25pZHMsCisJCS5ocF9uaWQgPSAweDA0LAorCQkuZGlnX291dF9uaWQgPSBBTEM2ODBfRElHT1VUX05JRCwKKwkJLm51bV9jaGFubmVsX21vZGUgPSBBUlJBWV9TSVpFKGFsYzY4MF9tb2RlcyksCisJCS5jaGFubmVsX21vZGUgPSBhbGM2ODBfbW9kZXMsCisJCS5pbnB1dF9tdXggPSAmYWxjNjgwX2NhcHR1cmVfc291cmNlLAorCX0sCit9OworCitzdGF0aWMgaW50IHBhdGNoX2FsYzY4MChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CisJaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyOworCisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNwZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYy0+c3BlYyA9IHNwZWM7CisKKwlib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgQUxDNjgwX01PREVMX0xBU1QsCisJCQkJCQkgIGFsYzY4MF9tb2RlbHMsCisJCQkJCQkgIGFsYzY4MF9jZmdfdGJsKTsKKworCWlmIChib2FyZF9jb25maWcgPCAwIHx8IGJvYXJkX2NvbmZpZyA+PSBBTEM2ODBfTU9ERUxfTEFTVCkgeworCQlwcmludGsoS0VSTl9JTkZPICJoZGFfY29kZWM6ICVzOiBCSU9TIGF1dG8tcHJvYmluZy5cbiIsCisJCSAgICAgICBjb2RlYy0+Y2hpcF9uYW1lKTsKKwkJYm9hcmRfY29uZmlnID0gQUxDNjgwX0FVVE87CisJfQorCisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM2ODBfQVVUTykgeworCQkvKiBhdXRvbWF0aWMgcGFyc2UgZnJvbSB0aGUgQklPUyBjb25maWcgKi8KKwkJZXJyID0gYWxjNjgwX3BhcnNlX2F1dG9fY29uZmlnKGNvZGVjKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0gZWxzZSBpZiAoIWVycikgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJoZGFfY29kZWM6IENhbm5vdCBzZXQgdXAgY29uZmlndXJhdGlvbiAiCisJCQkgICAgICAgImZyb20gQklPUy4gIFVzaW5nIGJhc2UgbW9kZS4uLlxuIik7CisJCQlib2FyZF9jb25maWcgPSBBTEM2ODBfQkFTRTsKKwkJfQorCX0KKworCWlmIChib2FyZF9jb25maWcgIT0gQUxDNjgwX0FVVE8pCisJCXNldHVwX3ByZXNldChjb2RlYywgJmFsYzY4MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOworCisJc3BlYy0+c3RyZWFtX2FuYWxvZ19wbGF5YmFjayA9ICZhbGM2ODBfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwlzcGVjLT5zdHJlYW1fYW5hbG9nX2NhcHR1cmUgPSAmYWxjNjgwX3BjbV9hbmFsb2dfY2FwdHVyZTsKKwlzcGVjLT5zdHJlYW1fYW5hbG9nX2FsdF9jYXB0dXJlID0gJmFsYzY4MF9wY21fYW5hbG9nX2FsdF9jYXB0dXJlOworCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzY4MF9wY21fZGlnaXRhbF9wbGF5YmFjazsKKworCWlmICghc3BlYy0+YWRjX25pZHMpIHsKKwkJc3BlYy0+YWRjX25pZHMgPSBhbGM2ODBfYWRjX25pZHM7CisJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjNjgwX2FkY19uaWRzKTsKKwl9CisKKwlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwkJc2V0X2NhcHR1cmVfbWl4ZXIoY29kZWMpOworCisJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOworCisJY29kZWMtPnBhdGNoX29wcyA9IGFsY19wYXRjaF9vcHM7CisJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM2ODBfQVVUTykKKwkJc3BlYy0+aW5pdF9ob29rID0gYWxjNjgwX2F1dG9faW5pdDsKKworCXJldHVybiAwOworfQorCisvKgogICogcGF0Y2ggZW50cmllcwogICovCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfcmVhbHRla1tdID0gewpAQCAtMTg4MDQsNiArMTkzMzksNyBAQAogCXsgLmlkID0gMHgxMGVjMDY2MywgLm5hbWUgPSAiQUxDNjYzIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjYyIH0sCiAJeyAuaWQgPSAweDEwZWMwNjY1LCAubmFtZSA9ICJBTEM2NjUiLCAucGF0Y2ggPSBwYXRjaF9hbGM2NjIgfSwKIAl7IC5pZCA9IDB4MTBlYzA2NzAsIC5uYW1lID0gIkFMQzY3MCIsIC5wYXRjaCA9IHBhdGNoX2FsYzY2MiB9LAorCXsgLmlkID0gMHgxMGVjMDY4MCwgLm5hbWUgPSAiQUxDNjgwIiwgLnBhdGNoID0gcGF0Y2hfYWxjNjgwIH0sCiAJeyAuaWQgPSAweDEwZWMwODgwLCAubmFtZSA9ICJBTEM4ODAiLCAucGF0Y2ggPSBwYXRjaF9hbGM4ODAgfSwKIAl7IC5pZCA9IDB4MTBlYzA4ODIsIC5uYW1lID0gIkFMQzg4MiIsIC5wYXRjaCA9IHBhdGNoX2FsYzg4MiB9LAogCXsgLmlkID0gMHgxMGVjMDg4MywgLm5hbWUgPSAiQUxDODgzIiwgLnBhdGNoID0gcGF0Y2hfYWxjODgyIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggZjFlN2JhYi4uYjhkNzMwYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjAyLDYgKzIwMiw3IEBACiAJdW5zaWduZWQgaW50IHNwZGlmX211dGU6IDE7CiAJdW5zaWduZWQgaW50IGNoZWNrX3ZvbHVtZV9vZmZzZXQ6MTsKIAl1bnNpZ25lZCBpbnQgYXV0b19taWM6MTsKKwl1bnNpZ25lZCBpbnQgbGluZWFyX3RvbmVfYmVlcDoxOwogCiAJLyogZ3BpbyBsaW5lcyAqLwogCXVuc2lnbmVkIGludCBlYXBkX21hc2s7CkBAIC0zODAyLDcgKzM4MDMsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJaWYgKGNvZGVjLT5iZWVwKSB7CiAJCQkvKiBJRFQvU1RBQyBjb2RlY3MgaGF2ZSBsaW5lYXIgYmVlcCB0b25lIHBhcmFtZXRlciAqLwotCQkJY29kZWMtPmJlZXAtPmxpbmVhcl90b25lID0gMTsKKwkJCWNvZGVjLT5iZWVwLT5saW5lYXJfdG9uZSA9IHNwZWMtPmxpbmVhcl90b25lX2JlZXA7CiAJCQkvKiBpZiBubyBiZWVwIHN3aXRjaCBpcyBhdmFpbGFibGUsIG1ha2UgaXRzIG93biBvbmUgKi8KIAkJCWNhcHMgPSBxdWVyeV9hbXBfY2Fwcyhjb2RlYywgbmlkLCBIREFfT1VUUFVUKTsKIAkJCWlmICghKGNhcHMgJiBBQ19BTVBDQVBfTVVURSkpIHsKQEAgLTUwMDUsNiArNTAwNiw3IEBACiAKIAljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAxOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTIwMF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTIwMF9waW5fbmlkczsKIAlzcGVjLT5ib2FyZF9jb25maWcgPSBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvbmZpZyhjb2RlYywgU1RBQ185MjAwX01PREVMUywKQEAgLTUwNjgsNiArNTA3MCw3IEBACiAKIAljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAxOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTI1eF9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTI1eF9waW5fbmlkczsKIApAQCAtNTE1Myw2ICs1MTU2LDcgQEAKIAogCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJc3BlYy0+bGluZWFyX3RvbmVfYmVlcCA9IDA7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ3M3h4X3NsYXZlX2RpZ19vdXRzOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDczeHhfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3M3h4X3Bpbl9uaWRzOwpAQCAtNTMwMCw2ICs1MzA0LDcgQEAKIAogCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJc3BlYy0+bGluZWFyX3RvbmVfYmVlcCA9IDE7CiAJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3RhYzkyaGQ4M3h4eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjE7CiAJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTJoZDgzeHh4X211eF9uaWRzOwpAQCAtNTUyMiw2ICs1NTI3LDcgQEAKIAogCWNvZGVjLT5ub190cmlnZ2VyX3NlbnNlID0gMTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJc3BlYy0+bGluZWFyX3RvbmVfYmVlcCA9IDA7CiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKIAlzcGVjLT5udW1fcGlucyA9IFNUQUM5MkhENzFCWFhfTlVNX1BJTlM7CiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CkBAIC01Nzc5LDYgKzU3ODUsNyBAQAogCiAJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5saW5lYXJfdG9uZV9iZWVwID0gMTsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyMnhfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyMnhfcGluX25pZHM7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIyWF9NT0RFTFMsCkBAIC01ODgzLDYgKzU4OTAsNyBAQAogCiAJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5saW5lYXJfdG9uZV9iZWVwID0gMTsKIAljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyN3hfcGluX25pZHM7CkBAIC02MDE4LDYgKzYwMjYsNyBAQAogCiAJY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UgPSAxOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5saW5lYXJfdG9uZV9iZWVwID0gMTsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyMDVfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyMDVfcGluX25pZHM7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIwNV9NT0RFTFMsCkBAIC02MTc0LDYgKzYxODMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSA9IDE7CiAJY29kZWMtPnNwZWMgPSBzcGVjOworCXNwZWMtPmxpbmVhcl90b25lX2JlZXAgPSAxOwogCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTg3Ml9waW5fbmlkcyk7CiAJc3BlYy0+cGluX25pZHMgPSBzdGFjOTg3Ml9waW5fbmlkczsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggNzM0NTM4MS4uYWUzYWNiMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC01NTIsMjQgKzU1MiwzMCBAQAogCX0KIH0KIAorc3RhdGljIGludCBpc19zbWFydDUxX3BpbnMoc3RydWN0IHZpYV9zcGVjICpzcGVjLCBoZGFfbmlkX3QgcGluKTsKKwogc3RhdGljIHZvaWQgdmlhX2F1dG9faW5pdF9hbmFsb2dfaW5wdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHZpYV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJdW5zaWduZWQgaW50IGN0bDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKKwkJaWYgKCFuaWQpCisJCQljb250aW51ZTsKIAorCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkICYmIGlzX3NtYXJ0NTFfcGlucyhzcGVjLCBuaWQpKQorCQkJY3RsID0gUElOX09VVDsKKwkJZWxzZSBpZiAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMpCisJCQljdGwgPSBQSU5fVlJFRjUwOworCQllbHNlCisJCQljdGwgPSBQSU5fSU47CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCSAgICAoaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCSAgICAgUElOX1ZSRUY1MCA6IFBJTl9JTikpOwotCisJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgY3RsKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaXNfc21hcnQ1MV9waW5zKHN0cnVjdCB2aWFfc3BlYyAqc3BlYywgaGRhX25pZF90IHBpbik7Ci0KIHN0YXRpYyB2b2lkIHNldF9waW5fcG93ZXJfc3RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdW5zaWduZWQgaW50ICphZmZlY3RlZF9wYXJtKQogewpAQCAtNjU4LDYgKzY2NCw4IEBACiAJCS8qIFBXMCAoMTloKSwgU1cxICgxOGgpLCBBT1cxICgxMWgpICovCiAJCXBhcm0gPSBBQ19QV1JTVF9EMzsKIAkJc2V0X3Bpbl9wb3dlcl9zdGF0ZShjb2RlYywgMHgxOSwgJnBhcm0pOworCQlpZiAoc3BlYy0+c21hcnQ1MV9lbmFibGVkKQorCQkJcGFybSA9IEFDX1BXUlNUX0QwOwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDE4LCAwLCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwKIAkJCQkgICAgcGFybSk7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTEsIDAsIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLApAQCAtNjY3LDYgKzY3NSw4IEBACiAJCWlmIChpc184Y2gpIHsKIAkJCXBhcm0gPSBBQ19QV1JTVF9EMzsKIAkJCXNldF9waW5fcG93ZXJfc3RhdGUoY29kZWMsIDB4MjIsICZwYXJtKTsKKwkJCWlmIChzcGVjLT5zbWFydDUxX2VuYWJsZWQpCisJCQkJcGFybSA9IEFDX1BXUlNUX0QwOwogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgMHgyNiwgMCwKIAkJCQkJICAgIEFDX1ZFUkJfU0VUX1BPV0VSX1NUQVRFLCBwYXJtKTsKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjQsIDAsCkBAIC0zOTE1LDYgKzM5MjUsMTMgQEAKIAkJfQogCX0KIAorCS8qIGZvciBTbWFydCA1LjEsIGxpbmUvbWljIGlucHV0cyBkb3VibGUgYXMgb3V0cHV0IHBpbnMgKi8KKwlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSkgeworCQlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDM7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW0FVVE9fU0VRX1NVUlJPVU5EXSA9IDB4MTE7CisJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW0FVVE9fU0VRX0NFTkxGRV0gPSAweDI0OworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zOTMyLDcgKzM5NDksOCBAQAogCWZvciAoaSA9IDA7IGkgPD0gQVVUT19TRVFfU0lERTsgaSsrKSB7CiAJCW5pZCA9IGNmZy0+bGluZV9vdXRfcGluc1tpXTsKIAotCQlpZiAoIW5pZCkKKwkJLyogZm9yIFNtYXJ0IDUuMSwgdGhlcmUgYXJlIGFsd2F5cyBhdCBsZWFzdCBzaXggY2hhbm5lbHMgKi8KKwkJaWYgKCFuaWQgJiYgaSA+IEFVVE9fU0VRX0NFTkxGRSkKIAkJCWNvbnRpbnVlOwogCiAJCW5pZF92b2wgPSBuaWRfdm9sc1tpXTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCBhZDQ0NjI2Li5mNjRmYjdkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC05Nyw2ICs5Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CkBAIC02NjcsMTMgKzY2OCwxMiBAQAogCXVuc2lnbmVkIGNoYXIgYzsKIAogCXdoaWxlIChsZW4pIHsKKwkJaW50IHZhbHVlOworCiAJCWMgPSBpbltsZW4gLSAxXTsKLQkJaWYgKChjID49ICcwJykgJiYgKGMgPD0gJzknKSkKLQkJCXN1bSArPSBtdWx0ICogKGMgLSAnMCcpOwotCQllbHNlIGlmICgoYyA+PSAnQScpICYmIChjIDw9ICdGJykpCi0JCQlzdW0gKz0gbXVsdCAqIChjIC0gKCdBJyAtIDEwKSk7Ci0JCWVsc2UgaWYgKChjID49ICdhJykgJiYgKGMgPD0gJ2YnKSkKLQkJCXN1bSArPSBtdWx0ICogKGMgLSAoJ2EnIC0gMTApKTsKKwkJdmFsdWUgPSBoZXhfdG9fYmluKGMpOworCQlpZiAodmFsdWUgPj0gMCkKKwkJCXN1bSArPSBtdWx0ICogdmFsdWU7CiAJCW11bHQgKj0gMTY7CiAJCS0tbGVuOwogCX0KQEAgLTE2MTUsNyArMTYxNSwxMCBAQAogCiAJY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtW3N1Yl9udW1dID0gc3Vic3RyZWFtOwogCXJ1bnRpbWUtPmh3ID0gc25kX3JpcHRpZGVfcGxheWJhY2s7CisKIAlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjbWh3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZGF0YS0+cGF0aHMgPSBsYnVzX3BsYXlfcGF0aHNbc3ViX251bV07CiAJZGF0YS0+aWQgPSBwbGF5X2lkc1tzdWJfbnVtXTsKIAlkYXRhLT5zb3VyY2UgPSBwbGF5X3NvdXJjZXNbc3ViX251bV07CkBAIC0xNjM1LDcgKzE2MzgsMTAgQEAKIAogCWNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXJ1bnRpbWUtPmh3ID0gc25kX3JpcHRpZGVfY2FwdHVyZTsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGNtaHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAlkYXRhLT5wYXRocyA9IGxidXNfcmVjX3BhdGg7CiAJZGF0YS0+aWQgPSBQQURDOwogCWRhdGEtPnNvdXJjZSA9IEFDTE5LMlBBREM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCA5Y2MxYjVhLi4xYjhmNjc0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTI2NCwxMSArMjY0LDEzIEBACiAJCSAqIGlmIHVzaW5nIHNtYWxsIHBlcmlvZHMuCiAJCSAqCiAJCSAqIElmIHdlJ3JlIGxlc3MgdGhhbiA5IHNhbXBsZXMgYmVoaW5kLCB3ZSdyZSBvbiB0YXJnZXQuCisJCSAqIE90aGVyd2lzZSwgc2hvcnRlbiB0aGUgbmV4dCB2cGVyaW9kIGJ5IHRoZSBhbW91bnQgd2UndmUKKwkJICogYmVlbiBkZWxheWVkLgogCQkgKi8KIAkJaWYgKHN5bmMgPiAtOSkKIAkJCXZvaWNlLT52cGVyaW9kID0gdm9pY2UtPnN5bmNfcGVyaW9kX3NpemUgKyAxOwogCQllbHNlCi0JCQl2b2ljZS0+dnBlcmlvZCA9IHZvaWNlLT5zeW5jX3BlcmlvZF9zaXplIC0gNDsKKwkJCXZvaWNlLT52cGVyaW9kID0gdm9pY2UtPnN5bmNfcGVyaW9kX3NpemUgKyBzeW5jICsgMTA7CiAKIAkJaWYgKHZvaWNlLT52cGVyaW9kIDwgdm9pY2UtPmJ1ZmZlcl9zaXplKSB7CiAJCQlzaXNfdXBkYXRlX3Nzbyh2b2ljZSwgdm9pY2UtPnZwZXJpb2QpOwpAQCAtNzM2LDcgKzczOCw3IEBACiAJcGVyaW9kX3NpemUgPSBidWZmZXJfc2l6ZTsKIAogCS8qIEluaXRpYWxseSwgd2Ugd2FudCB0byBpbnRlcnJ1cHQganVzdCBhIGJpdCBiZWhpbmQgdGhlIGVuZCBvZgotCSAqIHRoZSBwZXJpb2Qgd2UncmUgY2xvY2tpbmcgb3V0LiAxMCBzYW1wbGVzIHNlZW1zIHRvIGdpdmUgYSBnb29kCisJICogdGhlIHBlcmlvZCB3ZSdyZSBjbG9ja2luZyBvdXQuIDEyIHNhbXBsZXMgc2VlbXMgdG8gZ2l2ZSBhIGdvb2QKIAkgKiBkZWxheS4KIAkgKgogCSAqIFdlIHdhbnQgdG8gc3ByZWFkIG91ciBpbnRlcnJ1cHRzIHRocm91Z2hvdXQgdGhlIHZpcnR1YWwgcGVyaW9kLApAQCAtNzQ3LDcgKzc0OSw3IEBACiAJICoKIAkgKiBUaGlzIGlzIGFsbCBtb290IGlmIHdlIGRvbid0IG5lZWQgdG8gdXNlIHZpcnR1YWwgcGVyaW9kcy4KIAkgKi8KLQl2cGVyaW9kID0gcnVudGltZS0+cGVyaW9kX3NpemUgKyAxMDsKKwl2cGVyaW9kID0gcnVudGltZS0+cGVyaW9kX3NpemUgKyAxMjsKIAlpZiAodnBlcmlvZCA+IHBlcmlvZF9zaXplKSB7CiAJCXUxNiB0YWlsID0gdnBlcmlvZCAlIHBlcmlvZF9zaXplOwogCQl1MTYgcXVhcnRlcl9wZXJpb2QgPSBwZXJpb2Rfc2l6ZSAvIDQ7CkBAIC03NzYsNyArNzc4LDcgQEAKIAkgKi8KIAl0aW1pbmctPmZsYWdzIHw9IFZPSUNFX1NZTkNfVElNSU5HOwogCXRpbWluZy0+c3luY19iYXNlID0gdm9pY2UtPmN0cmxfYmFzZTsKLQl0aW1pbmctPnN5bmNfY3NvID0gcnVudGltZS0+cGVyaW9kX3NpemUgLSAxOworCXRpbWluZy0+c3luY19jc28gPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAl0aW1pbmctPnN5bmNfcGVyaW9kX3NpemUgPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKIAl0aW1pbmctPnN5bmNfYnVmZmVyX3NpemUgPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAl0aW1pbmctPnBlcmlvZF9zaXplID0gcGVyaW9kX3NpemU7CkBAIC0xMDQ3LDcgKzEwNDksNyBAQAogCS8qIFJlc2V0IHRoZSBjaGlwLCBhbmQgZGlzYWJsZSBhbGwgaW50ZXJycHV0cy4KIAkgKi8KIAlvdXRsKFNJU19HQ1JfU09GVFdBUkVfUkVTRVQsIHNpcy0+aW9wb3J0ICsgU0lTX0dDUik7Ci0JdWRlbGF5KDEwKTsKKwl1ZGVsYXkoMjUpOwogCW91dGwoMCwgc2lzLT5pb3BvcnQgKyBTSVNfR0NSKTsKIAlvdXRsKDAsIHNpcy0+aW9wb3J0ICsgU0lTX0dJRVIpOwogCkBAIC0xMDgzLDcgKzEwODUsNyBAQAogCS8qIFJlc2V0IHRoZSBhdWRpbyBjb250cm9sbGVyCiAJICovCiAJb3V0bChTSVNfR0NSX1NPRlRXQVJFX1JFU0VULCBpbyArIFNJU19HQ1IpOwotCXVkZWxheSgxMCk7CisJdWRlbGF5KDI1KTsKIAlvdXRsKDAsIGlvICsgU0lTX0dDUik7CiAKIAkvKiBHZXQgdGhlIEFDLWxpbmsgc2VtYXBob3JlLCBhbmQgcmVzZXQgdGhlIGNvZGVjcwpAQCAtMTA5Niw3ICsxMDk4LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlvdXRsKFNJU19BQzk3X0NNRF9DT0RFQ19DT0xEX1JFU0VULCBpbyArIFNJU19BQzk3X0NNRCk7Ci0JdWRlbGF5KDEwKTsKKwl1ZGVsYXkoMjUwKTsKIAogCWNvdW50ID0gMHhmZmZmOwogCXdoaWxlICgoaW53KGlvICsgU0lTX0FDOTdfU1RBVFVTKSAmIFNJU19BQzk3X1NUQVRVU19CVVNZKSAmJiAtLWNvdW50KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggN2U0OTRiNi4uOGM1ZjhiNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC04NSw2ICs4NSw3IEBACiBzdGF0aWMgaW50IGFjOTdfY2xvY2sgPSA0ODAwMDsKIHN0YXRpYyBjaGFyICphYzk3X3F1aXJrOwogc3RhdGljIGludCBkeHNfc3VwcG9ydDsKK3N0YXRpYyBpbnQgZHhzX2luaXRfdm9sdW1lID0gMzE7CiBzdGF0aWMgaW50IG5vZGVsYXk7CiAKIG1vZHVsZV9wYXJhbShpbmRleCwgaW50LCAwNDQ0KTsKQEAgLTEwMyw2ICsxMDQsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhhYzk3X3F1aXJrLCAiQUMnOTcgd29ya2Fyb3VuZCBmb3Igc3RyYW5nZSBoYXJkd2FyZS4iKTsKIG1vZHVsZV9wYXJhbShkeHNfc3VwcG9ydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZHhzX3N1cHBvcnQsICJTdXBwb3J0IGZvciBEWFMgY2hhbm5lbHMgKDAgPSBhdXRvLCAxID0gZW5hYmxlLCAyID0gZGlzYWJsZSwgMyA9IDQ4ayBvbmx5LCA0ID0gbm8gVlJBLCA1ID0gZW5hYmxlIGFueSBzYW1wbGUgcmF0ZSkiKTsKK21vZHVsZV9wYXJhbShkeHNfaW5pdF92b2x1bWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGR4c19pbml0X3ZvbHVtZSwgImluaXRpYWwgRFhTIHZvbHVtZSAoMC0zMSkiKTsKIG1vZHVsZV9wYXJhbShub2RlbGF5LCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhub2RlbGF5LCAiRGlzYWJsZSA1MDBtcyBpbml0IGRlbGF5Iik7CiAKQEAgLTEyNDUsOCArMTI0OCwxMCBAQAogCQlyZXR1cm4gZXJyOwogCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CiAJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7Ci0JCWNoaXAtPnBsYXliYWNrX3ZvbHVtZVtzdHJlYW1dWzBdID0gMDsKLQkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMV0gPSAwOworCQljaGlwLT5wbGF5YmFja192b2x1bWVbc3RyZWFtXVswXSA9CisJCQkJVklBX0RYU19NQVhfVk9MVU1FIC0gKGR4c19pbml0X3ZvbHVtZSAmIDMxKTsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMV0gPQorCQkJCVZJQV9EWFNfTUFYX1ZPTFVNRSAtIChkeHNfaW5pdF92b2x1bWUgJiAzMSk7CiAJCWNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT52ZFswXS5hY2Nlc3MgJj0KIAkJCX5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CiAJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFIHwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IGRmMTEwZGYuLjdhYjkxNzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtMTM5LDggKzEzOSw4IEBACiAJcGRhY2YtPnBfZGV2ID0gbGluazsKIAlsaW5rLT5wcml2ID0gcGRhY2Y7CiAKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlEgfCBDT05GX0VOQUJMRV9QVUxTRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0yMTksNyArMjE5LDcgQEAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJwZGFjZl9jb25maWcgY2FsbGVkXG4iKTsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMHg1OwogCi0JcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZDsKIApAQCAtMjMxLDcgKzIzMSw4IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKLQlpZiAoc25kX3BkYWNmX2Fzc2lnbl9yZXNvdXJjZXMocGRhY2YsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKSA8IDApCisJaWYgKHNuZF9wZGFjZl9hc3NpZ25fcmVzb3VyY2VzKHBkYWNmLCBsaW5rLT5yZXNvdXJjZVswXS0+c3RhcnQsCisJCQkJCWxpbmstPmlycSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaCBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKaW5kZXggYTBhN2VjNi4uNWNjM2U0NSAxMDA2NDQKLS0tIGEvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaAorKysgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA2MjRiNDdhLi5hNmVkZmMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMTU5LDggKzE1OSw4IEBACiAJdnhwLT5wX2RldiA9IGxpbms7CiAJbGluay0+cHJpdiA9IGNoaXA7CiAKLQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOwotCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPnJlc291cmNlWzBdLT5mbGFncyB8PSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwlsaW5rLT5yZXNvdXJjZVswXS0+ZW5kID0gMTY7CiAKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJc3RyY3B5KGNoaXAtPmNhcmQtPmRyaXZlciwgdnhwNDQwX2h3Lm5hbWUpOwogCX0KIAotCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluayk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWQ7CiAKQEAgLTI0MSw3ICsyNDEsOCBAQAogCWNoaXAtPmRldiA9ICZsaW5rLT5kZXY7CiAJc25kX2NhcmRfc2V0X2RldihjaGlwLT5jYXJkLCBjaGlwLT5kZXYpOwogCi0JaWYgKHNuZF92eHBvY2tldF9hc3NpZ25fcmVzb3VyY2VzKGNoaXAsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxKSA8IDApCisJaWYgKHNuZF92eHBvY2tldF9hc3NpZ25fcmVzb3VyY2VzKGNoaXAsIGxpbmstPnJlc291cmNlWzBdLT5zdGFydCwKKwkJCQkJCWxpbmstPmlycSkgPCAwKQogCQlnb3RvIGZhaWxlZDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmggYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuaAppbmRleCBlYTRkZjE2Li5kOTExMDY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuaAorKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuaApAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSA8c291bmQvdnhfY29yZS5oPgogCi0jaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL0tjb25maWcgYi9zb3VuZC9zb2MvS2NvbmZpZwppbmRleCBiMTc0OWJjLi4zZTU5OGU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvS2NvbmZpZwpAQCAtMjgsOSArMjgsMTMgQEAKIHNvdXJjZSAic291bmQvc29jL2F1MXgvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2JsYWNrZmluL0tjb25maWciCiBzb3VyY2UgInNvdW5kL3NvYy9kYXZpbmNpL0tjb25maWciCitzb3VyY2UgInNvdW5kL3NvYy9lcDkzeHgvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL2ZzbC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvaW14L0tjb25maWciCitzb3VyY2UgInNvdW5kL3NvYy9qejQ3NDAvS2NvbmZpZyIKK3NvdXJjZSAic291bmQvc29jL251YzkwMC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2Mvb21hcC9LY29uZmlnIgorc291cmNlICJzb3VuZC9zb2Mva2lya3dvb2QvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3B4YS9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIgogc291cmNlICJzb3VuZC9zb2MvczYwMDAvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCAxNDcwMTQxLi5lYjE4MzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC02LDkgKzYsMTMgQEAKIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSBhdTF4Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGJsYWNrZmluLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGRhdmluY2kvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gZXA5M3h4Lwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IGZzbC8KIG9iai0kKENPTkZJR19TTkRfU09DKSAgICs9IGlteC8KK29iai0kKENPTkZJR19TTkRfU09DKQkrPSBqejQ3NDAvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0gbnVjOTAwLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IG9tYXAvCitvYmotJChDT05GSUdfU05EX1NPQykJKz0ga2lya3dvb2QvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gcHhhLwogb2JqLSQoQ09ORklHX1NORF9TT0MpCSs9IHMzYzI0eHgvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gczYwMDAvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLmMKaW5kZXggZjZiM2NjMC4uZGM1MjQ5ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20uYwpAQCAtNzcsNyArNzcsNiBAQAogCXNpemVfdCBwZXJpb2Rfc2l6ZTsKIAogCWRtYV9hZGRyX3QgcGVyaW9kX3B0cjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbmV4dCBwZXJpb2QgKi8KLQlpbnQgcGVyaW9kczsJCQkvKiBwZXJpb2QgaW5kZXggb2YgcGVyaW9kX3B0ciAqLwogCiAJLyogUERDIHJlZ2lzdGVyIHNhdmUgKi8KIAl1MzIgcGRjX3hwcl9zYXZlOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKaW5kZXggMGI1OTgwNi4uYzg1ODQ0ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCkBAIC01NDksNyArNTQ5LDYgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYXRtZWxfc3NjX2RhaTogdW5zdXBwb3J0ZWQgREFJIGZvcm1hdCAweCV4XG4iLAogCQkJc3NjX3AtPmRhaWZtdCk7CiAJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKIAl9CiAJcHJfZGVidWcoImF0bWVsX3NzY19od19wYXJhbXM6ICIKIAkJCSJSQ01SPSUwOHggUkZNUj0lMDh4IFRDTVI9JTA4eCBURk1SPSUwOHhcbiIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jIGIvc291bmQvc29jL2F1MXgvcHNjLWFjOTcuYwppbmRleCBhNjFjY2QyLi5kMTRhNWE5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1hYzk3LmMKQEAgLTM3NSwxMiArMzc1LDEwIEBACiAJfQogCiAJcmV0ID0gLUVCVVNZOwotCXdkLT5pb2FyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSwKLQkJCQkJImF1MXhwc2NfYWM5NyIpOwotCWlmICghd2QtPmlvYXJlYSkKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSwgcGRldi0+bmFtZSkpCiAJCWdvdG8gb3V0MDsKIAotCXdkLT5tbWlvID0gaW9yZW1hcChyLT5zdGFydCwgMHhmZmZmKTsKKwl3ZC0+bW1pbyA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWlmICghd2QtPm1taW8pCiAJCWdvdG8gb3V0MTsKIApAQCAtNDEwLDggKzQwOCw3IEBACiAKIAlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZhdTF4cHNjX2FjOTdfZGFpKTsKIG91dDE6Ci0JcmVsZWFzZV9yZXNvdXJjZSh3ZC0+aW9hcmVhKTsKLQlrZnJlZSh3ZC0+aW9hcmVhKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogb3V0MDoKIAlrZnJlZSh3ZCk7CiAJcmV0dXJuIHJldDsKQEAgLTQyMCw2ICs0MTcsNyBAQAogc3RhdGljIGludCBfX2RldmV4aXQgYXUxeHBzY19hYzk3X2RydnJlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhdTF4cHNjX2F1ZGlvX2RhdGEgKndkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAogCWlmICh3ZC0+ZG1hcGQpCiAJCWF1MXhwc2NfcGNtX2Rlc3Ryb3kod2QtPmRtYXBkKTsKQEAgLTQzMyw4ICs0MzEsNyBAQAogCWF1X3N5bmMoKTsKIAogCWlvdW5tYXAod2QtPm1taW8pOwotCXJlbGVhc2VfcmVzb3VyY2Uod2QtPmlvYXJlYSk7Ci0Ja2ZyZWUod2QtPmlvYXJlYSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlrZnJlZSh3ZCk7CiAKIAlhdTF4cHNjX2FjOTdfd29ya2RhdGEgPSBOVUxMOwkvKiBNREVWICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMgYi9zb3VuZC9zb2MvYXUxeC9wc2MtaTJzLmMKaW5kZXggMjQ0NTRjOS4uNjA4M2ZlNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F1MXgvcHNjLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L3BzYy1pMnMuYwpAQCAtMzIxLDEyICszMjEsMTAgQEAKIAl9CiAKIAlyZXQgPSAtRUJVU1k7Ci0Jd2QtPmlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLAotCQkJCQkiYXUxeHBzY19pMnMiKTsKLQlpZiAoIXdkLT5pb2FyZWEpCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpKQogCQlnb3RvIG91dDA7CiAKLQl3ZC0+bW1pbyA9IGlvcmVtYXAoci0+c3RhcnQsIDB4ZmZmZik7CisJd2QtPm1taW8gPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoIXdkLT5tbWlvKQogCQlnb3RvIG91dDE7CiAKQEAgLTM2Miw4ICszNjAsNyBAQAogCiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmYXUxeHBzY19pMnNfZGFpKTsKIG91dDE6Ci0JcmVsZWFzZV9yZXNvdXJjZSh3ZC0+aW9hcmVhKTsKLQlrZnJlZSh3ZC0+aW9hcmVhKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogb3V0MDoKIAlrZnJlZSh3ZCk7CiAJcmV0dXJuIHJldDsKQEAgLTM3Miw2ICszNjksNyBAQAogc3RhdGljIGludCBfX2RldmV4aXQgYXUxeHBzY19pMnNfZHJ2cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGF1MXhwc2NfYXVkaW9fZGF0YSAqd2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCiAJaWYgKHdkLT5kbWFwZCkKIAkJYXUxeHBzY19wY21fZGVzdHJveSh3ZC0+ZG1hcGQpOwpAQCAtMzg0LDggKzM4Miw3IEBACiAJYXVfc3luYygpOwogCiAJaW91bm1hcCh3ZC0+bW1pbyk7Ci0JcmVsZWFzZV9yZXNvdXJjZSh3ZC0+aW9hcmVhKTsKLQlrZnJlZSh3ZC0+aW9hcmVhKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCWtmcmVlKHdkKTsKIAogCWF1MXhwc2NfaTJzX3dvcmtkYXRhID0gTlVMTDsJLyogTURFViAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvcHNjLmggYi9zb3VuZC9zb2MvYXUxeC9wc2MuaAppbmRleCAzMmQzODA3Li4wOTM3NzVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9wc2MuaAorKysgYi9zb3VuZC9zb2MvYXUxeC9wc2MuaApAQCAtMzIsNyArMzIsNiBAQAogCXVuc2lnbmVkIGxvbmcgcmF0ZTsKIAogCXVuc2lnbmVkIGxvbmcgcG1bMl07Ci0Jc3RydWN0IHJlc291cmNlICppb2FyZWE7CiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZG1hcGQ7CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hYzk3LmMKaW5kZXggNTIzYjdmYy4uYzBlYmE1MSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWM5Ny5jCkBAIC0yNTUsOCArMjU1LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYmY1eHhfYWM5N19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KLQkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCA9IGRhaS0+cHJpdmF0ZV9kYXRhOwogCiAJcHJfZGVidWcoIiVzIDogc3BvcnQgJWRcbiIsIF9fZnVuY19fLCBkYWktPmlkKTsKIAlpZiAoIWRhaS0+YWN0aXZlKQpAQCAtMjcxLDggKzI3MCw3IEBACiBzdGF0aWMgaW50IGJmNXh4X2FjOTdfcmVzdW1lKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCWludCByZXQ7Ci0Jc3RydWN0IHNwb3J0X2RldmljZSAqc3BvcnQgPQotCQkoc3RydWN0IHNwb3J0X2RldmljZSAqKWRhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0gZGFpLT5wcml2YXRlX2RhdGE7CiAKIAlwcl9kZWJ1ZygiJXMgOiBzcG9ydCAlZFxuIiwgX19mdW5jX18sIGRhaS0+aWQpOwogCWlmICghZGFpLT5hY3RpdmUpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKaW5kZXggNGIzNjAxMi4uMjRjMTQyNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwpAQCAtMjEwLDggKzIxMCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJmNXh4X3RkbV9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KLQkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCA9IGRhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFkYWktPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CkBAIC0yMjUsOCArMjI0LDcgQEAKIHN0YXRpYyBpbnQgYmY1eHhfdGRtX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBzcG9ydF9kZXZpY2UgKnNwb3J0ID0KLQkJKHN0cnVjdCBzcG9ydF9kZXZpY2UgKilkYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3BvcnRfZGV2aWNlICpzcG9ydCA9IGRhaS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFkYWktPmFjdGl2ZSkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKaW5kZXggNWRhMzBlYi4uODNmNWM2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwpAQCAtMjIsOSArMjIsMTEgQEAKIAlzZWxlY3QgU05EX1NPQ19BSzQ2NDIgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfQUs0NjcxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NRMDA5M1ZDIGlmIE1GRF9EQVZJTkNJX1ZPSUNFQ09ERUMKKwlzZWxlY3QgU05EX1NPQ19DUzQyTDUxIGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0NTNDI3MCBpZiBJMkMKLQlzZWxlY3QgU05EX1NPQ19NQVg5ODc3IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX0RBNzIxMCBpZiBJMkMKKwlzZWxlY3QgU05EX1NPQ19KWjQ3NDAgaWYgU09DX0paNDc0MAorCXNlbGVjdCBTTkRfU09DX01BWDk4NzcgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfUENNMzAwOAogCXNlbGVjdCBTTkRfU09DX1NQRElGCiAJc2VsZWN0IFNORF9TT0NfU1NNMjYwMiBpZiBJMkMKQEAgLTQ4LDYgKzUwLDcgQEAKIAlzZWxlY3QgU05EX1NPQ19XTTg3MjcKIAlzZWxlY3QgU05EX1NPQ19XTTg3MjggaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODczMSBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCisJc2VsZWN0IFNORF9TT0NfV004NzQxIGlmIFNORF9TT0NfSTJDX0FORF9TUEkKIAlzZWxlY3QgU05EX1NPQ19XTTg3NTAgaWYgU05EX1NPQ19JMkNfQU5EX1NQSQogCXNlbGVjdCBTTkRfU09DX1dNODc1MyBpZiBTTkRfU09DX0kyQ19BTkRfU1BJCiAJc2VsZWN0IFNORF9TT0NfV004Nzc2IGlmIFNORF9TT0NfSTJDX0FORF9TUEkKQEAgLTEyMCwxMyArMTIzLDEzIEBACiBjb25maWcgU05EX1NPQ19DUTAwOTNWQwogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0NTNDJMNTEKKwl0cmlzdGF0ZQorCiAjIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMKIGNvbmZpZyBTTkRfU09DX0NTNDI3MAogCXRyaXN0YXRlCiAKLWNvbmZpZyBTTkRfU09DX0RBNzIxMAotICAgICAgICB0cmlzdGF0ZQotCiAjIENpcnJ1cyBMb2dpYyBDUzQyNzAgQ29kZWMgVkQgPSAzLjNWIEVycmF0YQogIyBTZWxlY3QgaWYgeW91IGFyZSBhZmZlY3RlZCBieSB0aGUgZXJyYXRhIHdoZXJlIHRoZSBwYXJ0IHdpbGwgbm90IGZ1bmN0aW9uCiAjIGlmIE1DTEsgZGl2aWRlLWJ5LTEuNSBpcyBzZWxlY3RlZCBhbmQgVkQgaXMgc2V0IHRvIDMuM1YuICBUaGUgZHJpdmVyIHdpbGwKQEAgLTEzOCw5ICsxNDEsMTUgQEAKIGNvbmZpZyBTTkRfU09DX0NYMjA0NDIKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19KWjQ3NDBfQ09ERUMKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19MMwogICAgICAgIHRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0RBNzIxMAorICAgICAgICB0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19QQ00zMDA4CiAgICAgICAgdHJpc3RhdGUKIApAQCAtMjA2LDYgKzIxNSw5IEBACiBjb25maWcgU05EX1NPQ19XTTg3MzEKIAl0cmlzdGF0ZQogCitjb25maWcgU05EX1NPQ19XTTg3NDEKKwl0cmlzdGF0ZQorCiBjb25maWcgU05EX1NPQ19XTTg3NTAKIAl0cmlzdGF0ZQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlIGIvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQppbmRleCA5MTQyOWVhLi41MzUyNDA5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBzbmQtc29jLWFrNDY0Mi1vYmpzIDo9IGFrNDY0Mi5vCiBzbmQtc29jLWFrNDY3MS1vYmpzIDo9IGFrNDY3MS5vCiBzbmQtc29jLWNxOTN2Yy1vYmpzIDo9IGNxOTN2Yy5vCitzbmQtc29jLWNzNDJsNTEtb2JqcyA6PSBjczQybDUxLm8KIHNuZC1zb2MtY3M0MjcwLW9ianMgOj0gY3M0MjcwLm8KIHNuZC1zb2MtY3gyMDQ0Mi1vYmpzIDo9IGN4MjA0NDIubwogc25kLXNvYy1kYTcyMTAtb2JqcyA6PSBkYTcyMTAubwpAQCAtMzQsNiArMzUsNyBAQAogc25kLXNvYy13bTg3Mjctb2JqcyA6PSB3bTg3Mjcubwogc25kLXNvYy13bTg3Mjgtb2JqcyA6PSB3bTg3Mjgubwogc25kLXNvYy13bTg3MzEtb2JqcyA6PSB3bTg3MzEubworc25kLXNvYy13bTg3NDEtb2JqcyA6PSB3bTg3NDEubwogc25kLXNvYy13bTg3NTAtb2JqcyA6PSB3bTg3NTAubwogc25kLXNvYy13bTg3NTMtb2JqcyA6PSB3bTg3NTMubwogc25kLXNvYy13bTg3NzYtb2JqcyA6PSB3bTg3NzYubwpAQCAtNTYsNiArNTgsNyBAQAogc25kLXNvYy13bTk3MTItb2JqcyA6PSB3bTk3MTIubwogc25kLXNvYy13bTk3MTMtb2JqcyA6PSB3bTk3MTMubwogc25kLXNvYy13bS1odWJzLW9ianMgOj0gd21faHVicy5vCitzbmQtc29jLWp6NDc0MC1jb2RlYy1vYmpzIDo9IGp6NDc0MC5vCiAKICMgQW1wCiBzbmQtc29jLW1heDk4Nzctb2JqcyA6PSBtYXg5ODc3Lm8KQEAgLTc0LDEwICs3NywxMiBAQAogb2JqLSQoQ09ORklHX1NORF9TT0NfQUs0NjQyKQkrPSBzbmQtc29jLWFrNDY0Mi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19BSzQ2NzEpCSs9IHNuZC1zb2MtYWs0NjcxLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0NRMDA5M1ZDKSArPSBzbmQtc29jLWNxOTN2Yy5vCitvYmotJChDT05GSUdfU05EX1NPQ19DUzQyTDUxKQkrPSBzbmQtc29jLWNzNDJsNTEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfQ1M0MjcwKQkrPSBzbmQtc29jLWNzNDI3MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19DWDIwNDQyKQkrPSBzbmQtc29jLWN4MjA0NDIubwogb2JqLSQoQ09ORklHX1NORF9TT0NfREE3MjEwKQkrPSBzbmQtc29jLWRhNzIxMC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19MMykJKz0gc25kLXNvYy1sMy5vCitvYmotJChDT05GSUdfU05EX1NPQ19KWjQ3NDBfQ09ERUMpCSs9IHNuZC1zb2Mtano0NzQwLWNvZGVjLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1BDTTMwMDgpCSs9IHNuZC1zb2MtcGNtMzAwOC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TUERJRikJKz0gc25kLXNvYy1zcGRpZi5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TU00yNjAyKQkrPSBzbmQtc29jLXNzbTI2MDIubwpAQCAtOTksNiArMTA0LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX1dNODcyNykJKz0gc25kLXNvYy13bTg3Mjcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzI4KQkrPSBzbmQtc29jLXdtODcyOC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3MzEpCSs9IHNuZC1zb2Mtd204NzMxLm8KK29iai0kKENPTkZJR19TTkRfU09DX1dNODc0MSkJKz0gc25kLXNvYy13bTg3NDEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfV004NzUwKQkrPSBzbmQtc29jLXdtODc1MC5vCiBvYmotJChDT05GSUdfU05EX1NPQ19XTTg3NTMpCSs9IHNuZC1zb2Mtd204NzUzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1dNODc3NikJKz0gc25kLXNvYy13bTg3NzYubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggMjE3NTM4NC4uYTAxMDA2YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0yNzIsNiArMjcyLDcgQEAKIAogCWlmIChhZDE4MzZfY29kZWMpIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBhZDE4MzYgaXMgcmVnaXN0ZXJlZFxuIik7CisJCWtmcmVlKGFkMTgzNik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmMKaW5kZXggYzhjYTExNC4uMWRlZjc1ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jCkBAIC0yNCw2ICsyNCw3IEBACiAKIC8qIGNvZGVjIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IGFkMTkzeF9wcml2IHsKKwl1bnNpZ25lZCBpbnQgc3lzY2xrOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwogCXU4IHJlZ19jYWNoZVtBRDE5M1hfTlVNX1JFR1NdOwogfTsKQEAgLTI1MSwxNSArMjUyLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWQxOTN4X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBhZDE5M3hfcHJpdiAqYWQxOTN4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAxMjI4ODAwMDoKKwljYXNlIDE4NDMyMDAwOgorCWNhc2UgMjQ1NzYwMDA6CisJY2FzZSAzNjg2NDAwMDoKKwkJYWQxOTN4LT5zeXNjbGsgPSBmcmVxOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQgYWQxOTN4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCWludCB3b3JkX2xlbiA9IDAsIHJlZyA9IDA7CisJaW50IHdvcmRfbGVuID0gMCwgcmVnID0gMCwgbWFzdGVyX3JhdGUgPSAwOwogCiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3QgYWQxOTN4X3ByaXYgKmFkMTkzeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJLyogYml0IHNpemUgKi8KIAlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgewpAQCAtMjc1LDYgKzI5MywyNSBAQAogCQlicmVhazsKIAl9CiAKKwlzd2l0Y2ggKGFkMTkzeC0+c3lzY2xrKSB7CisJY2FzZSAxMjI4ODAwMDoKKwkJbWFzdGVyX3JhdGUgPSBBRDE5M1hfUExMX0lOUFVUXzI1NjsKKwkJYnJlYWs7CisJY2FzZSAxODQzMjAwMDoKKwkJbWFzdGVyX3JhdGUgPSBBRDE5M1hfUExMX0lOUFVUXzM4NDsKKwkJYnJlYWs7CisJY2FzZSAyNDU3NjAwMDoKKwkJbWFzdGVyX3JhdGUgPSBBRDE5M1hfUExMX0lOUFVUXzUxMjsKKwkJYnJlYWs7CisJY2FzZSAzNjg2NDAwMDoKKwkJbWFzdGVyX3JhdGUgPSBBRDE5M1hfUExMX0lOUFVUXzc2ODsKKwkJYnJlYWs7CisJfQorCisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBRDE5M1hfUExMX0NMS19DVFJMMCk7CisJcmVnID0gKHJlZyAmIEFEMTkzWF9QTExfSU5QVVRfTUFTSykgfCBtYXN0ZXJfcmF0ZTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5M1hfUExMX0NMS19DVFJMMCwgcmVnKTsKKwogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQUQxOTNYX0RBQ19DVFJMMik7CiAJcmVnID0gKHJlZyAmICh+QUQxOTNYX0RBQ19XT1JEX0xFTl9NQVNLKSkgfCB3b3JkX2xlbjsKIAlzbmRfc29jX3dyaXRlKGNvZGVjLCBBRDE5M1hfREFDX0NUUkwyLCByZWcpOwpAQCAtMzQ4LDYgKzM4NSw3IEBACiAJLyogcGxsIGlucHV0OiBtY2xraS94aSAqLwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFEMTkzWF9QTExfQ0xLX0NUUkwwLCAweDk5KTsgLyogbWNsaz0yNC41NzZNaHo6IDB4OUQ7IG1jbGs9MTIuMjg4TWh6OiAweDk5ICovCiAJc25kX3NvY193cml0ZShjb2RlYywgQUQxOTNYX1BMTF9DTEtfQ1RSTDEsIDB4MDQpOworCWFkMTkzeC0+c3lzY2xrID0gMTIyODgwMDA7CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTM4Myw2ICs0MjEsNyBAQAogCS5od19wYXJhbXMgPSBhZDE5M3hfaHdfcGFyYW1zLAogCS5kaWdpdGFsX211dGUgPSBhZDE5M3hfbXV0ZSwKIAkuc2V0X3RkbV9zbG90ID0gYWQxOTN4X3NldF90ZG1fc2xvdCwKKwkuc2V0X3N5c2Nsawk9IGFkMTkzeF9zZXRfZGFpX3N5c2NsaywKIAkuc2V0X2ZtdCA9IGFkMTkzeF9zZXRfZGFpX2ZtdCwKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmggYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5oCmluZGV4IGEwM2M4ODAuLjY1NGJhNjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE5M3guaApAQCAtMTEsNiArMTEsMTEgQEAKIAogI2RlZmluZSBBRDE5M1hfUExMX0NMS19DVFJMMCAgICAweDgwMAogI2RlZmluZSBBRDE5M1hfUExMX1BPV0VSRE9XTiAgICAgICAgICAgMHgwMQorI2RlZmluZSBBRDE5M1hfUExMX0lOUFVUX01BU0sgICAofjB4NikKKyNkZWZpbmUgQUQxOTNYX1BMTF9JTlBVVF8yNTYgICAgKDAgPDwgMSkKKyNkZWZpbmUgQUQxOTNYX1BMTF9JTlBVVF8zODQgICAgKDEgPDwgMSkKKyNkZWZpbmUgQUQxOTNYX1BMTF9JTlBVVF81MTIgICAgKDIgPDwgMSkKKyNkZWZpbmUgQUQxOTNYX1BMTF9JTlBVVF83NjggICAgKDMgPDwgMSkKICNkZWZpbmUgQUQxOTNYX1BMTF9DTEtfQ1RSTDEgICAgMHg4MDEKICNkZWZpbmUgQUQxOTNYX0RBQ19DVFJMMCAgICAgICAgMHg4MDIKICNkZWZpbmUgQUQxOTNYX0RBQ19QT1dFUkRPV04gICAgICAgICAgIDB4MDEKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5jCmluZGV4IDc1MjhhNTQuLjNkN2RjNTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjQyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NDIuYwpAQCAtMjIsMjAgKzIyLDEzIEBACiAgKiBBSzQ2NDMgaXMgdGVzdGVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJhazQ2NDIuaCIKIApAQCAtMTExLDYgKzEwNCwyMyBAQAogCiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9hazQ2NDI7CiAKKy8qCisgKiBQbGF5YmFjayBWb2x1bWUgKHRhYmxlIDM5KQorICoKKyAqIG1heCA6IDB4MDAgOiArMTIuMCBkQgorICogICAgICAgKCAwLjUgZEIgc3RlcCApCisgKiBtaW4gOiAweEZFIDogLTExNS4wIGRCCisgKiBtdXRlOiAweEZGCisgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShvdXRfdGx2LCAtMTE1MDAsIDUwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFrNDY0Ml9zbmRfY29udHJvbHNbXSA9IHsKKworCVNPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgUGxheWJhY2sgVm9sdW1lIiwgTF9EVkMsIFJfRFZDLAorCQkJIDAsIDB4RkYsIDEsIG91dF90bHYpLAorfTsKKworCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBhazQ2NDJfcHJpdiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CkBAIC0yMDQsNyArMjE0LDYgQEAKIAkJICoKIAkJICogUExMLCBNYXN0ZXIgTW9kZQogCQkgKiBBdWRpbyBJL0YgRm9ybWF0IDpNU0IganVzdGlmaWVkIChBREMgJiBEQUMpCi0JCSAqIERpZ2l0YWwgVm9sdW1lOiAtOGRCCiAJCSAqIEJhc3MgQm9vc3QgTGV2ZWwgOiBNaWRkbGUKIAkJICoKIAkJICogVGhpcyBvcGVyYXRpb24gY2FtZSBmcm9tIGV4YW1wbGUgY29kZSBvZgpAQCAtMjE0LDggKzIyMyw2IEBACiAJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwZSwgMHgxOSk7CiAJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwOSwgMHg5MSk7CiAJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwYywgMHg5MSk7Ci0JCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwYSwgMHgyOCk7Ci0JCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwZCwgMHgyOCk7CiAJCWFrNDY0Ml93cml0ZShjb2RlYywgMHgwMCwgMHg2NCk7CiAJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFBXX01HTVQyLCBQTUhQX01BU0ssCVBNSFApOwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBQV19NR01UMiwgSFBNVE4sCUhQTVROKTsKQEAgLTQ5MSw4ICs0OTgsMTAgQEAKIAljb2RlYy0+Y29udHJvbF9kYXRhID0gaTJjOwogCiAJcmV0ID0gYWs0NjQyX2luaXQoYWs0NjQyKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBpbml0aWFsaXNlIEFLNDY0MlxuIik7CisJCWtmcmVlKGFrNDY0Mik7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTU0OCw2ICs1NTcsOSBAQAogCQlnb3RvIHBjbV9lcnI7CiAJfQogCisJc25kX3NvY19hZGRfY29udHJvbHMoYWs0NjQyX2NvZGVjLCBhazQ2NDJfc25kX2NvbnRyb2xzLAorCQkJICAgICBBUlJBWV9TSVpFKGFrNDY0Ml9zbmRfY29udHJvbHMpKTsKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBSzQ2NDIgQXVkaW8gQ29kZWMgJXMiLCBBSzQ2NDJfVkVSU0lPTik7CiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQybDUxLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDliODU1Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQybDUxLmMKQEAgLTAsMCArMSw3NjMgQEAKKy8qCisgKiBjczQybDUxLmMKKyAqCisgKiBBU29DIERyaXZlciBmb3IgQ2lycnVzIExvZ2ljIENTNDJMNTEgY29kZWNzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIEFybmF1ZCBQYXRhcmQgPGFwYXRhcmRAbWFuZHJpdmEuY29tPgorICoKKyAqIEJhc2VkIG9uIGNzNDI3MC5jIC0gQ29weXJpZ2h0IChjKSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBGb3Igbm93OgorICogIC0gT25seSBJMkMgaXMgc3VwcG9ydC4gTm90IFNQSQorICogIC0gbWFzdGVyIG1vZGUgKk5PVCogc3VwcG9ydGVkCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAiY3M0Mmw1MS5oIgorCitlbnVtIG1hc3Rlcl9zbGF2ZV9tb2RlIHsKKwlNT0RFX1NMQVZFLAorCU1PREVfU0xBVkVfQVVUTywKKwlNT0RFX01BU1RFUiwKK307CisKK3N0cnVjdCBjczQybDUxX3ByaXZhdGUgeworCXVuc2lnbmVkIGludCBtY2xrOworCXVuc2lnbmVkIGludCBhdWRpb19tb2RlOwkvKiBUaGUgbW9kZSAoSTJTIG9yIGxlZnQtanVzdGlmaWVkKSAqLworCWVudW0gbWFzdGVyX3NsYXZlX21vZGUgZnVuYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyBjb2RlYzsKKwl1OCByZWdfY2FjaGVbQ1M0Mkw1MV9OVU1SRUdTXTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY3M0Mmw1MV9jb2RlYzsKKworI2RlZmluZSBDUzQyTDUxX0ZPUk1BVFMgKCBcCisJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFICB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0JFICB8IFwKKwkJU05EUlZfUENNX0ZNVEJJVF9TMThfM0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMThfM0JFIHwgXAorCQlTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zQkUgfCBcCisJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFICB8IFNORFJWX1BDTV9GTVRCSVRfUzI0X0JFKQorCitzdGF0aWMgaW50IGNzNDJsNTFfZmlsbF9jYWNoZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJdTggKmNhY2hlID0gY29kZWMtPnJlZ19jYWNoZSArIDE7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQgPSBjb2RlYy0+Y29udHJvbF9kYXRhOworCXMzMiBsZW5ndGg7CisKKwlsZW5ndGggPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShpMmNfY2xpZW50LAorCQkJQ1M0Mkw1MV9GSVJTVFJFRyB8IDB4ODAsIENTNDJMNTFfTlVNUkVHUywgY2FjaGUpOworCWlmIChsZW5ndGggIT0gQ1M0Mkw1MV9OVU1SRUdTKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwKKwkJCQkiSTJDIHJlYWQgZmFpbHVyZSwgYWRkcj0weCV4IChyZXQ9JWQgdnMgJWQpXG4iLAorCQkJCWkyY19jbGllbnQtPmFkZHIsIGxlbmd0aCwgQ1M0Mkw1MV9OVU1SRUdTKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M0Mmw1MV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyY19jbGllbnQsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlzdHJ1Y3QgY3M0Mmw1MV9wcml2YXRlICpjczQybDUxOworCWludCByZXQgPSAwOworCWludCByZWc7CisKKwlpZiAoY3M0Mmw1MV9jb2RlYykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBDUzQyTDUxICovCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyY19jbGllbnQsIENTNDJMNTFfQ0hJUF9SRVZfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byByZWFkIEkyQ1xuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKChyZXQgIT0gQ1M0Mkw1MV9NS19DSElQX1JFVihDUzQyTDUxX0NISVBfSUQsIENTNDJMNTFfQ0hJUF9SRVZfQSkpICYmCisJICAgIChyZXQgIT0gQ1M0Mkw1MV9NS19DSElQX1JFVihDUzQyTDUxX0NISVBfSUQsIENTNDJMNTFfQ0hJUF9SRVZfQikpKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgIkludmFsaWQgY2hpcCBpZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2X2luZm8oJmkyY19jbGllbnQtPmRldiwgImZvdW5kIGRldmljZSBjczQybDUxIHJldiAlZFxuIiwKKwkJCQlyZXQgJiA3KTsKKworCWNzNDJsNTEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3M0Mmw1MV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjczQybDUxKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjb2RlY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljb2RlYyA9ICZjczQybDUxLT5jb2RlYzsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwljb2RlYy0+ZGV2ID0gJmkyY19jbGllbnQtPmRldjsKKwljb2RlYy0+bmFtZSA9ICJDUzQyTDUxIjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmNzNDJsNTFfZGFpOworCWNvZGVjLT5udW1fZGFpID0gMTsKKwlzbmRfc29jX2NvZGVjX3NldF9kcnZkYXRhKGNvZGVjLCBjczQybDUxKTsKKworCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmNfY2xpZW50OworCWNvZGVjLT5yZWdfY2FjaGUgPSBjczQybDUxLT5yZWdfY2FjaGU7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gQ1M0Mkw1MV9OVU1SRUdTOworCWkyY19zZXRfY2xpZW50ZGF0YShpMmNfY2xpZW50LCBjb2RlYyk7CisKKwlyZXQgPSBjczQybDUxX2ZpbGxfY2FjaGUoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgImZhaWxlZCB0byBmaWxsIHJlZ2lzdGVyIGNhY2hlXG4iKTsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgOCwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmkyY19jbGllbnQtPmRldiwgIkZhaWxlZCB0byBzZXQgY2FjaGUgSS9POiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcl9hbGxvYzsKKwl9CisKKwkvKgorCSAqIERBQyBjb25maWd1cmF0aW9uCisJICogLSBVc2Ugc2lnbmFsIHByb2Nlc3NvcgorCSAqIC0gYXV0byBtdXRlCisJICogLSB2b2wgY2hhbmdlcyBpbW1lZGlhdGUKKwkgKiAtIG5vIGRlLWVtcGhhc2l6ZQorCSAqLworCXJlZyA9IENTNDJMNTFfREFDX0NUTF9EQVRBX1NFTCgxKQorCQl8IENTNDJMNTFfREFDX0NUTF9BTVVURSB8IENTNDJMNTFfREFDX0NUTF9EQUNTWigwKTsKKwlyZXQgPSBzbmRfc29jX3dyaXRlKGNvZGVjLCBDUzQyTDUxX0RBQ19DVEwsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfYWxsb2M7CisKKwljczQybDUxX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCWNzNDJsNTFfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycm9yX2FsbG9jOworCX0KKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZjczQybDUxX2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaTJjX2NsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIERBSWVcbiIpOworCQlnb3RvIGVycm9yX3JlZzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3JfcmVnOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnJvcl9hbGxvYzoKKwlrZnJlZShjczQybDUxKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3M0Mmw1MV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGNzNDJsNTFfcHJpdmF0ZSAqY3M0Mmw1MSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmNzNDJsNTFfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY3M0Mmw1MV9jb2RlYyk7CisJY3M0Mmw1MV9jb2RlYyA9IE5VTEw7CisJa2ZyZWUoY3M0Mmw1MSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGNzNDJsNTFfaWRbXSA9IHsKKwl7ImNzNDJsNTEiLCAwfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBjczQybDUxX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGNzNDJsNTFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJDUzQyTDUxIEkyQyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLmlkX3RhYmxlID0gY3M0Mmw1MV9pZCwKKwkucHJvYmUgPSBjczQybDUxX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gY3M0Mmw1MV9pMmNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBjczQybDUxX2dldF9jaGFuX21peChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyTDUxX1BDTV9NSVhFUikmMzsKKworCXN3aXRjaCAodmFsdWUpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSAwOworCQlicmVhazsKKwkvKiBzYW1lIHZhbHVlIDogKEwrUikvMiBhbmQgKFIrTCkvMiAqLworCWNhc2UgMToKKwljYXNlIDI6CisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IDI7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisjZGVmaW5lIENIQU5fTUlYX05PUk1BTAkweDAwCisjZGVmaW5lIENIQU5fTUlYX0JPVEgJMHg1NQorI2RlZmluZSBDSEFOX01JWF9TV0FQCTB4RkYKKworc3RhdGljIGludCBjczQybDUxX3NldF9jaGFuX21peChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCXN3aXRjaCAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJdmFsID0gQ0hBTl9NSVhfTk9STUFMOworCQlicmVhazsKKwljYXNlIDE6CisJCXZhbCA9IENIQU5fTUlYX0JPVEg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdmFsID0gQ0hBTl9NSVhfU1dBUDsKKwkJYnJlYWs7CisJfQorCisJc25kX3NvY193cml0ZShjb2RlYywgQ1M0Mkw1MV9QQ01fTUlYRVIsIHZhbCk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGFkY19wY21fdGx2LCAtNTE1MCwgNTAsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKHRvbmVfdGx2LCAtMTA1MCwgMTUwLCAwKTsKKy8qIFRoaXMgaXMgYSBsaWUuIGFmdGVyIC0xMDIgZGIsIGl0IHN0YXlzIGF0IC0xMDIgKi8KKy8qIG1heWJlIGEgcmFuZ2Ugd291bGQgYmUgYmV0dGVyICovCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYW91dF90bHYsIC0xMTU1MCwgNTAsIDApOworCitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYm9vc3RfdGx2LCAxNjAwLCAxNjAwLCAwKTsKK3N0YXRpYyBjb25zdCBjaGFyICpjaGFuX21peFtdID0geworCSJMIFIiLAorCSJMK1IiLAorCSJSIEwiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBjczQybDUxX2NoYW5fbWl4ID0KKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoY2hhbl9taXgpLCBjaGFuX21peCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQybDUxX3NuZF9jb250cm9sc1tdID0geworCVNPQ19ET1VCTEVfUl9TWF9UTFYoIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCQkJQ1M0Mkw1MV9QQ01BX1ZPTCwgQ1M0Mkw1MV9QQ01CX1ZPTCwKKwkJCTcsIDB4ZmZmZmZmOTksIDB4MTgsIGFkY19wY21fdGx2KSwKKwlTT0NfRE9VQkxFX1IoIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorCQkJQ1M0Mkw1MV9QQ01BX1ZPTCwgQ1M0Mkw1MV9QQ01CX1ZPTCwgNywgMSwgMSksCisJU09DX0RPVUJMRV9SX1NYX1RMVigiQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsCisJCQlDUzQyTDUxX0FPVVRBX1ZPTCwgQ1M0Mkw1MV9BT1VUQl9WT0wsCisJCQk4LCAweGZmZmZmZjE5LCAweDE4LCBhb3V0X3RsdiksCisJU09DX0RPVUJMRV9SX1NYX1RMVigiQURDIE1peGVyIFZvbHVtZSIsCisJCQlDUzQyTDUxX0FEQ0FfVk9MLCBDUzQyTDUxX0FEQ0JfVk9MLAorCQkJNywgMHhmZmZmZmY5OSwgMHgxOCwgYWRjX3BjbV90bHYpLAorCVNPQ19ET1VCTEVfUigiQURDIE1peGVyIFN3aXRjaCIsCisJCQlDUzQyTDUxX0FEQ0FfVk9MLCBDUzQyTDUxX0FEQ0JfVk9MLCA3LCAxLCAxKSwKKwlTT0NfU0lOR0xFKCJQbGF5YmFjayBEZWVtcGhhc2lzIFN3aXRjaCIsIENTNDJMNTFfREFDX0NUTCwgMywgMSwgMCksCisJU09DX1NJTkdMRSgiQXV0by1NdXRlIFN3aXRjaCIsIENTNDJMNTFfREFDX0NUTCwgMiwgMSwgMCksCisJU09DX1NJTkdMRSgiU29mdCBSYW1wIFN3aXRjaCIsIENTNDJMNTFfREFDX0NUTCwgMSwgMSwgMCksCisJU09DX1NJTkdMRSgiWmVybyBDcm9zcyBTd2l0Y2giLCBDUzQyTDUxX0RBQ19DVEwsIDAsIDAsIDApLAorCVNPQ19ET1VCTEVfVExWKCJNaWMgQm9vc3QgVm9sdW1lIiwKKwkJCUNTNDJMNTFfTUlDX0NUTCwgMCwgMSwgMSwgMCwgYm9vc3RfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiQmFzcyBWb2x1bWUiLCBDUzQyTDUxX1RPTkVfQ1RMLCAwLCAweGYsIDEsIHRvbmVfdGx2KSwKKwlTT0NfU0lOR0xFX1RMVigiVHJlYmxlIFZvbHVtZSIsIENTNDJMNTFfVE9ORV9DVEwsIDQsIDB4ZiwgMSwgdG9uZV90bHYpLAorCVNPQ19FTlVNX0VYVCgiUENNIGNoYW5uZWwgbWl4ZXIiLAorCQkJY3M0Mmw1MV9jaGFuX21peCwKKwkJCWNzNDJsNTFfZ2V0X2NoYW5fbWl4LCBjczQybDUxX3NldF9jaGFuX21peCksCit9OworCisvKgorICogdG8gcG93ZXIgZG93biwgb25lIG11c3Q6CisgKiAxLikgRW5hYmxlIHRoZSBQRE4gYml0CisgKiAyLikgZW5hYmxlIHBvd2VyLWRvd24gZm9yIHRoZSBzZWxlY3QgY2hhbm5lbHMKKyAqIDMuKSBkaXNhYmxlIHRoZSBQRE4gYml0LgorICovCitzdGF0aWMgaW50IGNzNDJsNTFfcGRuX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwl2YWx1ZSA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgQ1M0Mkw1MV9QT1dFUl9DVEwxKTsKKwl2YWx1ZSAmPSB+Q1M0Mkw1MV9QT1dFUl9DVEwxX1BETjsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgorCQl2YWx1ZSB8PSBDUzQyTDUxX1BPV0VSX0NUTDFfUEROOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlicmVhazsKKwl9CisJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgQ1M0Mkw1MV9QT1dFUl9DVEwxLAorCQlDUzQyTDUxX1BPV0VSX0NUTDFfUEROLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNzNDJsNTFfZGFjX25hbWVzW10gPSB7IkRpcmVjdCBQQ00iLAorCSJEU1AgUENNIiwgIkFEQyJ9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBjczQybDUxX2RhY19tdXhfZW51bSA9CisJU09DX0VOVU1fU0lOR0xFKENTNDJMNTFfREFDX0NUTCwgNiwgMywgY3M0Mmw1MV9kYWNfbmFtZXMpOworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNzNDJsNTFfZGFjX211eF9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCBjczQybDUxX2RhY19tdXhfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjczQybDUxX2FkY2xfbmFtZXNbXSA9IHsiQUlOMSBMZWZ0IiwgIkFJTjIgTGVmdCIsCisJIk1JQyBMZWZ0IiwgIk1JQytwcmVhbXAgTGVmdCJ9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSBjczQybDUxX2FkY2xfbXV4X2VudW0gPQorCVNPQ19FTlVNX1NJTkdMRShDUzQyTDUxX0FEQ19JTlBVVCwgNCwgNCwgY3M0Mmw1MV9hZGNsX25hbWVzKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjczQybDUxX2FkY2xfbXV4X2NvbnRyb2xzID0KKwlTT0NfREFQTV9FTlVNKCJSb3V0ZSIsIGNzNDJsNTFfYWRjbF9tdXhfZW51bSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjczQybDUxX2FkY3JfbmFtZXNbXSA9IHsiQUlOMSBSaWdodCIsICJBSU4yIFJpZ2h0IiwKKwkiTUlDIFJpZ2h0IiwgIk1JQytwcmVhbXAgUmlnaHQifTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gY3M0Mmw1MV9hZGNyX211eF9lbnVtID0KKwlTT0NfRU5VTV9TSU5HTEUoQ1M0Mkw1MV9BRENfSU5QVVQsIDYsIDQsIGNzNDJsNTFfYWRjcl9uYW1lcyk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3M0Mmw1MV9hZGNyX211eF9jb250cm9scyA9CisJU09DX0RBUE1fRU5VTSgiUm91dGUiLCBjczQybDUxX2FkY3JfbXV4X2VudW0pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgY3M0Mmw1MV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fTUlDQklBUygiTWljIEJpYXMiLCBDUzQyTDUxX01JQ19QT1dFUl9DVEwsIDEsIDEpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiTGVmdCBQR0EiLCBDUzQyTDUxX1BPV0VSX0NUTDEsIDMsIDEsIE5VTEwsIDAsCisJCWNzNDJsNTFfcGRuX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fUEdBX0UoIlJpZ2h0IFBHQSIsIENTNDJMNTFfUE9XRVJfQ1RMMSwgNCwgMSwgTlVMTCwgMCwKKwkJY3M0Mmw1MV9wZG5fZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9BRENfRSgiTGVmdCBBREMiLCAiTGVmdCBIaUZpIENhcHR1cmUiLAorCQlDUzQyTDUxX1BPV0VSX0NUTDEsIDEsIDEsCisJCWNzNDJsNTFfcGRuX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fQURDX0UoIlJpZ2h0IEFEQyIsICJSaWdodCBIaUZpIENhcHR1cmUiLAorCQlDUzQyTDUxX1BPV0VSX0NUTDEsIDIsIDEsCisJCWNzNDJsNTFfcGRuX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fREFDX0UoIkxlZnQgREFDIiwgIkxlZnQgSGlGaSBQbGF5YmFjayIsCisJCUNTNDJMNTFfUE9XRVJfQ1RMMSwgNSwgMSwKKwkJY3M0Mmw1MV9wZG5fZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9EQUNfRSgiUmlnaHQgREFDIiwgIlJpZ2h0IEhpRmkgUGxheWJhY2siLAorCQlDUzQyTDUxX1BPV0VSX0NUTDEsIDYsIDEsCisJCWNzNDJsNTFfcGRuX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BPU1RfUE1EKSwKKworCS8qIGFuYWxvZy9taWMgKi8KKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjFMIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJBSU4xUiIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiQUlOMkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkFJTjJSIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUNMIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUNSIiksCisKKwlTTkRfU09DX0RBUE1fTUlYRVIoIk1pYyBQcmVhbXAgTGVmdCIsCisJCUNTNDJMNTFfTUlDX1BPV0VSX0NUTCwgMiwgMSwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX01JWEVSKCJNaWMgUHJlYW1wIFJpZ2h0IiwKKwkJQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMLCAzLCAxLCBOVUxMLCAwKSwKKworCS8qIEhQICovCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBMIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBSIiksCisKKwkvKiBtdXggKi8KKwlTTkRfU09DX0RBUE1fTVVYKCJEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmY3M0Mmw1MV9kYWNfbXV4X2NvbnRyb2xzKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJQR0EtQURDIE11eCBMZWZ0IiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkmY3M0Mmw1MV9hZGNsX211eF9jb250cm9scyksCisJU05EX1NPQ19EQVBNX01VWCgiUEdBLUFEQyBNdXggUmlnaHQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZjczQybDUxX2FkY3JfbXV4X2NvbnRyb2xzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGNzNDJsNTFfcm91dGVzW10gPSB7CisJeyJIUEwiLCBOVUxMLCAiTGVmdCBEQUMifSwKKwl7IkhQUiIsIE5VTEwsICJSaWdodCBEQUMifSwKKworCXsiTGVmdCBBREMiLCBOVUxMLCAiTGVmdCBQR0EifSwKKwl7IlJpZ2h0IEFEQyIsIE5VTEwsICJSaWdodCBQR0EifSwKKworCXsiTWljIFByZWFtcCBMZWZ0IiwgIE5VTEwsICAiTUlDTCJ9LAorCXsiTWljIFByZWFtcCBSaWdodCIsIE5VTEwsICAiTUlDUiJ9LAorCisJeyJQR0EtQURDIE11eCBMZWZ0IiwgICJBSU4xIExlZnQiLCAgICAgICAgIkFJTjFMIiB9LAorCXsiUEdBLUFEQyBNdXggTGVmdCIsICAiQUlOMiBMZWZ0IiwgICAgICAgICJBSU4yTCIgfSwKKwl7IlBHQS1BREMgTXV4IExlZnQiLCAgIk1JQyBMZWZ0IiwgICAgICAgICAiTUlDTCIgIH0sCisJeyJQR0EtQURDIE11eCBMZWZ0IiwgICJNSUMrcHJlYW1wIExlZnQiLCAgIk1pYyBQcmVhbXAgTGVmdCIgfSwKKwl7IlBHQS1BREMgTXV4IFJpZ2h0IiwgIkFJTjEgUmlnaHQiLCAgICAgICAiQUlOMVIiIH0sCisJeyJQR0EtQURDIE11eCBSaWdodCIsICJBSU4yIFJpZ2h0IiwgICAgICAgIkFJTjJSIiB9LAorCXsiUEdBLUFEQyBNdXggUmlnaHQiLCAiTUlDIFJpZ2h0IiwgICAgICAgICJNSUNSIiB9LAorCXsiUEdBLUFEQyBNdXggUmlnaHQiLCAiTUlDK3ByZWFtcCBSaWdodCIsICJNaWMgUHJlYW1wIFJpZ2h0IiB9LAorCisJeyJMZWZ0IFBHQSIsIE5VTEwsICJQR0EtQURDIE11eCBMZWZ0In0sCisJeyJSaWdodCBQR0EiLCBOVUxMLCAiUEdBLUFEQyBNdXggUmlnaHQifSwKK307CisKK3N0YXRpYyBpbnQgY3M0Mmw1MV9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSwKKwkJdW5zaWduZWQgaW50IGZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBjczQybDUxX3ByaXZhdGUgKmNzNDJsNTEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoZm9ybWF0ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWNzNDJsNTEtPmF1ZGlvX21vZGUgPSBmb3JtYXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiaW52YWxpZCBEQUkgZm9ybWF0XG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZvcm1hdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljczQybDUxLT5mdW5jID0gTU9ERV9NQVNURVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY3M0Mmw1MS0+ZnVuYyA9IE1PREVfU0xBVkVfQVVUTzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGNzNDJsNTFfcmF0aW9zIHsKKwl1bnNpZ25lZCBpbnQgcmF0aW87CisJdW5zaWduZWQgY2hhciBzcGVlZF9tb2RlOworCXVuc2lnbmVkIGNoYXIgbWNsazsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3M0Mmw1MV9yYXRpb3Mgc2xhdmVfcmF0aW9zW10gPSB7CisJeyAgNTEyLCBDUzQyTDUxX1FTTV9NT0RFLCAwIH0sIHsgIDc2OCwgQ1M0Mkw1MV9RU01fTU9ERSwgMCB9LAorCXsgMTAyNCwgQ1M0Mkw1MV9RU01fTU9ERSwgMCB9LCB7IDE1MzYsIENTNDJMNTFfUVNNX01PREUsIDAgfSwKKwl7IDIwNDgsIENTNDJMNTFfUVNNX01PREUsIDAgfSwgeyAzMDcyLCBDUzQyTDUxX1FTTV9NT0RFLCAwIH0sCisJeyAgMjU2LCBDUzQyTDUxX0hTTV9NT0RFLCAwIH0sIHsgIDM4NCwgQ1M0Mkw1MV9IU01fTU9ERSwgMCB9LAorCXsgIDUxMiwgQ1M0Mkw1MV9IU01fTU9ERSwgMCB9LCB7ICA3NjgsIENTNDJMNTFfSFNNX01PREUsIDAgfSwKKwl7IDEwMjQsIENTNDJMNTFfSFNNX01PREUsIDAgfSwgeyAxNTM2LCBDUzQyTDUxX0hTTV9NT0RFLCAwIH0sCisJeyAgMTI4LCBDUzQyTDUxX1NTTV9NT0RFLCAwIH0sIHsgIDE5MiwgQ1M0Mkw1MV9TU01fTU9ERSwgMCB9LAorCXsgIDI1NiwgQ1M0Mkw1MV9TU01fTU9ERSwgMCB9LCB7ICAzODQsIENTNDJMNTFfU1NNX01PREUsIDAgfSwKKwl7ICA1MTIsIENTNDJMNTFfU1NNX01PREUsIDAgfSwgeyAgNzY4LCBDUzQyTDUxX1NTTV9NT0RFLCAwIH0sCisJeyAgMTI4LCBDUzQyTDUxX0RTTV9NT0RFLCAwIH0sIHsgIDE5MiwgQ1M0Mkw1MV9EU01fTU9ERSwgMCB9LAorCXsgIDI1NiwgQ1M0Mkw1MV9EU01fTU9ERSwgMCB9LCB7ICAzODQsIENTNDJMNTFfRFNNX01PREUsIDAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3M0Mmw1MV9yYXRpb3Mgc2xhdmVfYXV0b19yYXRpb3NbXSA9IHsKKwl7IDEwMjQsIENTNDJMNTFfUVNNX01PREUsIDAgfSwgeyAxNTM2LCBDUzQyTDUxX1FTTV9NT0RFLCAwIH0sCisJeyAyMDQ4LCBDUzQyTDUxX1FTTV9NT0RFLCAxIH0sIHsgMzA3MiwgQ1M0Mkw1MV9RU01fTU9ERSwgMSB9LAorCXsgIDUxMiwgQ1M0Mkw1MV9IU01fTU9ERSwgMCB9LCB7ICA3NjgsIENTNDJMNTFfSFNNX01PREUsIDAgfSwKKwl7IDEwMjQsIENTNDJMNTFfSFNNX01PREUsIDEgfSwgeyAxNTM2LCBDUzQyTDUxX0hTTV9NT0RFLCAxIH0sCisJeyAgMjU2LCBDUzQyTDUxX1NTTV9NT0RFLCAwIH0sIHsgIDM4NCwgQ1M0Mkw1MV9TU01fTU9ERSwgMCB9LAorCXsgIDUxMiwgQ1M0Mkw1MV9TU01fTU9ERSwgMSB9LCB7ICA3NjgsIENTNDJMNTFfU1NNX01PREUsIDEgfSwKKwl7ICAxMjgsIENTNDJMNTFfRFNNX01PREUsIDAgfSwgeyAgMTkyLCBDUzQyTDUxX0RTTV9NT0RFLCAwIH0sCisJeyAgMjU2LCBDUzQyTDUxX0RTTV9NT0RFLCAxIH0sIHsgIDM4NCwgQ1M0Mkw1MV9EU01fTU9ERSwgMSB9LAorfTsKKworc3RhdGljIGludCBjczQybDUxX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBjczQybDUxX3ByaXZhdGUgKmNzNDJsNTEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgY3M0Mmw1MV9yYXRpb3MgKnJhdGlvcyA9IE5VTEw7CisJaW50IG5yX3JhdGlvcyA9IDA7CisJdW5zaWduZWQgaW50IHJhdGVzID0gMDsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9taW4gPSAtMTsKKwl1bnNpZ25lZCBpbnQgcmF0ZV9tYXggPSAwOworCWludCBpOworCisJY3M0Mmw1MS0+bWNsayA9IGZyZXE7CisKKwlzd2l0Y2ggKGNzNDJsNTEtPmZ1bmMpIHsKKwljYXNlIE1PREVfTUFTVEVSOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIE1PREVfU0xBVkU6CisJCXJhdGlvcyA9IHNsYXZlX3JhdGlvczsKKwkJbnJfcmF0aW9zID0gQVJSQVlfU0laRShzbGF2ZV9yYXRpb3MpOworCQlicmVhazsKKwljYXNlIE1PREVfU0xBVkVfQVVUTzoKKwkJcmF0aW9zID0gc2xhdmVfYXV0b19yYXRpb3M7CisJCW5yX3JhdGlvcyA9IEFSUkFZX1NJWkUoc2xhdmVfYXV0b19yYXRpb3MpOworCQlicmVhazsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmF0aW9zOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHJhdGUgPSBmcmVxIC8gcmF0aW9zW2ldLnJhdGlvOworCQlyYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQocmF0ZSk7CisJCWlmIChyYXRlIDwgcmF0ZV9taW4pCisJCQlyYXRlX21pbiA9IHJhdGU7CisJCWlmIChyYXRlID4gcmF0ZV9tYXgpCisJCQlyYXRlX21heCA9IHJhdGU7CisJfQorCXJhdGVzICY9IH5TTkRSVl9QQ01fUkFURV9LTk9UOworCisJaWYgKCFyYXRlcykgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHNhbXBsZSByYXRlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29kZWNfZGFpLT5wbGF5YmFjay5yYXRlcyA9IHJhdGVzOworCWNvZGVjX2RhaS0+cGxheWJhY2sucmF0ZV9taW4gPSByYXRlX21pbjsKKwljb2RlY19kYWktPnBsYXliYWNrLnJhdGVfbWF4ID0gcmF0ZV9tYXg7CisKKwljb2RlY19kYWktPmNhcHR1cmUucmF0ZXMgPSByYXRlczsKKwljb2RlY19kYWktPmNhcHR1cmUucmF0ZV9taW4gPSByYXRlX21pbjsKKwljb2RlY19kYWktPmNhcHR1cmUucmF0ZV9tYXggPSByYXRlX21heDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNzNDJsNTFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3QgY3M0Mmw1MV9wcml2YXRlICpjczQybDUxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKKwl1bnNpZ25lZCBpbnQgcmF0aW87CisJc3RydWN0IGNzNDJsNTFfcmF0aW9zICpyYXRpb3MgPSBOVUxMOworCWludCBucl9yYXRpb3MgPSAwOworCWludCBpbnRmX2N0bCwgcG93ZXJfY3RsLCBmbXQ7CisKKwlzd2l0Y2ggKGNzNDJsNTEtPmZ1bmMpIHsKKwljYXNlIE1PREVfTUFTVEVSOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIE1PREVfU0xBVkU6CisJCXJhdGlvcyA9IHNsYXZlX3JhdGlvczsKKwkJbnJfcmF0aW9zID0gQVJSQVlfU0laRShzbGF2ZV9yYXRpb3MpOworCQlicmVhazsKKwljYXNlIE1PREVfU0xBVkVfQVVUTzoKKwkJcmF0aW9zID0gc2xhdmVfYXV0b19yYXRpb3M7CisJCW5yX3JhdGlvcyA9IEFSUkFZX1NJWkUoc2xhdmVfYXV0b19yYXRpb3MpOworCQlicmVhazsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHdoaWNoIE1DTEsvTFJDSyByYXRpbyB0byB1c2UgKi8KKwlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsgICAgIC8qIFNhbXBsaW5nIHJhdGUsIGluIEh6ICovCisJcmF0aW8gPSBjczQybDUxLT5tY2xrIC8gcmF0ZTsgICAgLyogTUNMSy9MUkNLIHJhdGlvICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhdGlvczsgaSsrKSB7CisJCWlmIChyYXRpb3NbaV0ucmF0aW8gPT0gcmF0aW8pCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBucl9yYXRpb3MpIHsKKwkJLyogV2UgZGlkIG5vdCBmaW5kIGEgbWF0Y2hpbmcgcmF0aW8gKi8KKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgbWF0Y2hpbmcgcmF0aW9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbnRmX2N0bCA9IHNuZF9zb2NfcmVhZChjb2RlYywgQ1M0Mkw1MV9JTlRGX0NUTCk7CisJcG93ZXJfY3RsID0gc25kX3NvY19yZWFkKGNvZGVjLCBDUzQyTDUxX01JQ19QT1dFUl9DVEwpOworCisJaW50Zl9jdGwgJj0gfihDUzQyTDUxX0lOVEZfQ1RMX01BU1RFUiB8IENTNDJMNTFfSU5URl9DVExfQURDX0kyUworCQkJfCBDUzQyTDUxX0lOVEZfQ1RMX0RBQ19GT1JNQVQoNykpOworCXBvd2VyX2N0bCAmPSB+KENTNDJMNTFfTUlDX1BPV0VSX0NUTF9TUEVFRCgzKQorCQkJfCBDUzQyTDUxX01JQ19QT1dFUl9DVExfTUNMS19ESVYyKTsKKworCXN3aXRjaCAoY3M0Mmw1MS0+ZnVuYykgeworCWNhc2UgTU9ERV9NQVNURVI6CisJCWludGZfY3RsIHw9IENTNDJMNTFfSU5URl9DVExfTUFTVEVSOworCQlwb3dlcl9jdGwgfD0gQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMX1NQRUVEKHJhdGlvc1tpXS5zcGVlZF9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFX1NMQVZFOgorCQlwb3dlcl9jdGwgfD0gQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMX1NQRUVEKHJhdGlvc1tpXS5zcGVlZF9tb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFX1NMQVZFX0FVVE86CisJCXBvd2VyX2N0bCB8PSBDUzQyTDUxX01JQ19QT1dFUl9DVExfQVVUTzsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjczQybDUxLT5hdWRpb19tb2RlKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCWludGZfY3RsIHw9IENTNDJMNTFfSU5URl9DVExfQURDX0kyUzsKKwkJaW50Zl9jdGwgfD0gQ1M0Mkw1MV9JTlRGX0NUTF9EQUNfRk9STUFUKENTNDJMNTFfREFDX0RJRl9JMlMpOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKKwkJaW50Zl9jdGwgfD0gQ1M0Mkw1MV9JTlRGX0NUTF9EQUNfRk9STUFUKENTNDJMNTFfREFDX0RJRl9MSjI0KTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgorCQlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorCQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0JFOgorCQkJZm10ID0gQ1M0Mkw1MV9EQUNfRElGX1JKMTY7CisJCQlicmVhazsKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEU6CisJCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMThfM0JFOgorCQkJZm10ID0gQ1M0Mkw1MV9EQUNfRElGX1JKMTg7CisJCQlicmVhazsKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEU6CisJCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0JFOgorCQkJZm10ID0gQ1M0Mkw1MV9EQUNfRElGX1JKMjA7CisJCQlicmVhazsKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKwkJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9CRToKKwkJCWZtdCA9IENTNDJMNTFfREFDX0RJRl9SSjI0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJ1bmtub3duIGZvcm1hdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpbnRmX2N0bCB8PSBDUzQyTDUxX0lOVEZfQ1RMX0RBQ19GT1JNQVQoZm10KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAidW5rbm93biBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmF0aW9zW2ldLm1jbGspCisJCXBvd2VyX2N0bCB8PSBDUzQyTDUxX01JQ19QT1dFUl9DVExfTUNMS19ESVYyOworCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0Mkw1MV9JTlRGX0NUTCwgaW50Zl9jdGwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMLCBwb3dlcl9jdGwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3M0Mmw1MV9kYWlfbXV0ZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgaW50IG11dGUpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlpbnQgcmVnOworCWludCBtYXNrID0gQ1M0Mkw1MV9EQUNfT1VUX0NUTF9EQUNBX01VVEV8Q1M0Mkw1MV9EQUNfT1VUX0NUTF9EQUNCX01VVEU7CisKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIENTNDJMNTFfREFDX09VVF9DVEwpOworCisJaWYgKG11dGUpCisJCXJlZyB8PSBtYXNrOworCWVsc2UKKwkJcmVnICY9IH5tYXNrOworCisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIENTNDJMNTFfREFDX09VVF9DVEwsIHJlZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGNzNDJsNTFfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zICAgICAgPSBjczQybDUxX2h3X3BhcmFtcywKKwkuc2V0X3N5c2NsayAgICAgPSBjczQybDUxX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfZm10ICAgICAgICA9IGNzNDJsNTFfc2V0X2RhaV9mbXQsCisJLmRpZ2l0YWxfbXV0ZSAgID0gY3M0Mmw1MV9kYWlfbXV0ZSwKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBjczQybDUxX2RhaSA9IHsKKwkubmFtZSA9ICJDUzQyTDUxIEhpRmkiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwLAorCQkuZm9ybWF0cyA9IENTNDJMNTFfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCisJCS5jaGFubmVsc19taW4gPSAxLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKKwkJLmZvcm1hdHMgPSBDUzQyTDUxX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJmNzNDJsNTFfZGFpX29wcywKK307CitFWFBPUlRfU1lNQk9MX0dQTChjczQybDUxX2RhaSk7CisKKworc3RhdGljIGludCBjczQybDUxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNzNDJsNTFfY29kZWMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1M0Mkw1MSBjb2RlYyBub3QgeWV0IHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzb2NkZXYtPmNhcmQtPmNvZGVjID0gY3M0Mmw1MV9jb2RlYzsKKwljb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwkvKiBSZWdpc3RlciBQQ01zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIFBDTXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBjczQybDUxX3NuZF9jb250cm9scywKKwkJQVJSQVlfU0laRShjczQybDUxX3NuZF9jb250cm9scykpOworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGNzNDJsNTFfZGFwbV93aWRnZXRzLAorCQlBUlJBWV9TSVpFKGNzNDJsNTFfZGFwbV93aWRnZXRzKSk7CisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGNzNDJsNTFfcm91dGVzLAorCQlBUlJBWV9TSVpFKGNzNDJsNTFfcm91dGVzKSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNzNDJsNTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNuZF9zb2NfZnJlZV9wY21zKHNvY2Rldik7CisJc25kX3NvY19kYXBtX2ZyZWUoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9jczQybDUxID0geworCS5wcm9iZSA9CWNzNDJsNTFfcHJvYmUsCisJLnJlbW92ZSA9CWNzNDJsNTFfcmVtb3ZlCit9OworRVhQT1JUX1NZTUJPTF9HUEwoc29jX2NvZGVjX2RldmljZV9jczQybDUxKTsKKworc3RhdGljIGludCBfX2luaXQgY3M0Mmw1MV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZjczQybDUxX2kyY19kcml2ZXIpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBhZGQgaTJjIGRyaXZlclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGNzNDJsNTFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjczQybDUxX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmY3M0Mmw1MV9pMmNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNzNDJsNTFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFybmF1ZCBQYXRhcmQgPGFwYXRhcmRAbWFuZHJpdmEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDaXJydXMgTG9naWMgQ1M0Mkw1MSBBTFNBIFNvQyBDb2RlYyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5oIGIvc291bmQvc29jL2NvZGVjcy9jczQybDUxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYwYmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1MS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogY3M0Mmw1MS5oCisgKgorICogQVNvQyBEcml2ZXIgZm9yIENpcnJ1cyBMb2dpYyBDUzQyTDUxIGNvZGVjcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBBcm5hdWQgUGF0YXJkIDxhcGF0YXJkQG1hbmRyaXZhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX0NTNDJMNTFfSAorI2RlZmluZSBfQ1M0Mkw1MV9ICisKKyNkZWZpbmUgQ1M0Mkw1MV9DSElQX0lECQkJMHgxQgorI2RlZmluZSBDUzQyTDUxX0NISVBfUkVWX0EJCTB4MDAKKyNkZWZpbmUgQ1M0Mkw1MV9DSElQX1JFVl9CCQkweDAxCisKKyNkZWZpbmUgQ1M0Mkw1MV9DSElQX1JFVl9JRAkJMHgwMQorI2RlZmluZSBDUzQyTDUxX01LX0NISVBfUkVWKGEsIGIpCSgoYSk8PDN8KGIpKQorCisjZGVmaW5lIENTNDJMNTFfUE9XRVJfQ1RMMQkJMHgwMgorI2RlZmluZSBDUzQyTDUxX1BPV0VSX0NUTDFfUEROX0RBQ0IJKDE8PDYpCisjZGVmaW5lIENTNDJMNTFfUE9XRVJfQ1RMMV9QRE5fREFDQQkoMTw8NSkKKyNkZWZpbmUgQ1M0Mkw1MV9QT1dFUl9DVEwxX1BETl9QR0FCCSgxPDw0KQorI2RlZmluZSBDUzQyTDUxX1BPV0VSX0NUTDFfUEROX1BHQUEJKDE8PDMpCisjZGVmaW5lIENTNDJMNTFfUE9XRVJfQ1RMMV9QRE5fQURDQgkoMTw8MikKKyNkZWZpbmUgQ1M0Mkw1MV9QT1dFUl9DVEwxX1BETl9BRENBCSgxPDwxKQorI2RlZmluZSBDUzQyTDUxX1BPV0VSX0NUTDFfUEROCQkoMTw8MCkKKworI2RlZmluZSBDUzQyTDUxX01JQ19QT1dFUl9DVEwJCTB4MDMKKyNkZWZpbmUgQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMX0FVVE8JKDE8PDcpCisjZGVmaW5lIENTNDJMNTFfTUlDX1BPV0VSX0NUTF9TUEVFRCh4KQkoKCh4KSYzKTw8NSkKKyNkZWZpbmUgQ1M0Mkw1MV9RU01fTU9ERQkJMworI2RlZmluZSBDUzQyTDUxX0hTTV9NT0RFCQkyCisjZGVmaW5lCUNTNDJMNTFfU1NNX01PREUJCTEKKyNkZWZpbmUgQ1M0Mkw1MV9EU01fTU9ERQkJMAorI2RlZmluZSBDUzQyTDUxX01JQ19QT1dFUl9DVExfM1NUX1NQCSgxPDw0KQorI2RlZmluZSBDUzQyTDUxX01JQ19QT1dFUl9DVExfUEROX01JQ0IJKDE8PDMpCisjZGVmaW5lIENTNDJMNTFfTUlDX1BPV0VSX0NUTF9QRE5fTUlDQQkoMTw8MikKKyNkZWZpbmUgQ1M0Mkw1MV9NSUNfUE9XRVJfQ1RMX1BETl9CSUFTCSgxPDwxKQorI2RlZmluZSBDUzQyTDUxX01JQ19QT1dFUl9DVExfTUNMS19ESVYyCSgxPDwwKQorCisjZGVmaW5lIENTNDJMNTFfSU5URl9DVEwJCTB4MDQKKyNkZWZpbmUgQ1M0Mkw1MV9JTlRGX0NUTF9MT09QQkFDSwkoMTw8NykKKyNkZWZpbmUgQ1M0Mkw1MV9JTlRGX0NUTF9NQVNURVIJCSgxPDw2KQorI2RlZmluZSBDUzQyTDUxX0lOVEZfQ1RMX0RBQ19GT1JNQVQoeCkJKCgoeCkmNyk8PDMpCisjZGVmaW5lIENTNDJMNTFfREFDX0RJRl9MSjI0CQkweDAwCisjZGVmaW5lIENTNDJMNTFfREFDX0RJRl9JMlMJCTB4MDEKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfRElGX1JKMjQJCTB4MDIKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfRElGX1JKMjAJCTB4MDMKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfRElGX1JKMTgJCTB4MDQKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfRElGX1JKMTYJCTB4MDUKKyNkZWZpbmUgQ1M0Mkw1MV9JTlRGX0NUTF9BRENfSTJTCSgxPDwyKQorI2RlZmluZSBDUzQyTDUxX0lOVEZfQ1RMX0RJR01JWAkJKDE8PDEpCisjZGVmaW5lIENTNDJMNTFfSU5URl9DVExfTUlDTUlYCQkoMTw8MCkKKworI2RlZmluZSBDUzQyTDUxX01JQ19DVEwJCQkweDA1CisjZGVmaW5lIENTNDJMNTFfTUlDX0NUTF9BRENfU05HVk9MCSgxPDw3KQorI2RlZmluZSBDUzQyTDUxX01JQ19DVExfQURDRF9EQk9PU1QJKDE8PDYpCisjZGVmaW5lIENTNDJMNTFfTUlDX0NUTF9BRENBX0RCT09TVAkoMTw8NSkKKyNkZWZpbmUgQ1M0Mkw1MV9NSUNfQ1RMX01JQ0JJQVNfU0VMCSgxPDw0KQorI2RlZmluZSBDUzQyTDUxX01JQ19DVExfTUlDQklBU19MVkwoeCkJKCgoeCkmMyk8PDIpCisjZGVmaW5lIENTNDJMNTFfTUlDX0NUTF9NSUNCX0JPT1NUCSgxPDwxKQorI2RlZmluZSBDUzQyTDUxX01JQ19DVExfTUlDQV9CT09TVAkoMTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0FEQ19DVEwJCQkweDA2CisjZGVmaW5lIENTNDJMNTFfQURDX0NUTF9BRENCX0hQRkVOCSgxPDw3KQorI2RlZmluZSBDUzQyTDUxX0FEQ19DVExfQURDQl9IUEZSWgkoMTw8NikKKyNkZWZpbmUgQ1M0Mkw1MV9BRENfQ1RMX0FEQ0FfSFBGRU4JKDE8PDUpCisjZGVmaW5lIENTNDJMNTFfQURDX0NUTF9BRENBX0hQRlJaCSgxPDw0KQorI2RlZmluZSBDUzQyTDUxX0FEQ19DVExfU09GVEIJCSgxPDwzKQorI2RlZmluZSBDUzQyTDUxX0FEQ19DVExfWkNST1NTQgkJKDE8PDIpCisjZGVmaW5lIENTNDJMNTFfQURDX0NUTF9TT0ZUQQkJKDE8PDEpCisjZGVmaW5lIENTNDJMNTFfQURDX0NUTF9aQ1JPU1NBCQkoMTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0FEQ19JTlBVVAkJMHgwNworI2RlZmluZSBDUzQyTDUxX0FEQ19JTlBVVF9BSU5CX01VWCh4KQkoKCh4KSYzKTw8NikKKyNkZWZpbmUgQ1M0Mkw1MV9BRENfSU5QVVRfQUlOQV9NVVgoeCkJKCgoeCkmMyk8PDQpCisjZGVmaW5lIENTNDJMNTFfQURDX0lOUFVUX0lOVl9BRENCCSgxPDwzKQorI2RlZmluZSBDUzQyTDUxX0FEQ19JTlBVVF9JTlZfQURDQQkoMTw8MikKKyNkZWZpbmUgQ1M0Mkw1MV9BRENfSU5QVVRfQURDQl9NVVRFCSgxPDwxKQorI2RlZmluZSBDUzQyTDUxX0FEQ19JTlBVVF9BRENBX01VVEUJKDE8PDApCisKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfT1VUX0NUTAkJMHgwOAorI2RlZmluZSBDUzQyTDUxX0RBQ19PVVRfQ1RMX0hQX0dBSU4oeCkJKCgoeCkmNyk8PDUpCisjZGVmaW5lIENTNDJMNTFfREFDX09VVF9DVExfREFDX1NOR1ZPTAkoMTw8NCkKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfT1VUX0NUTF9JTlZfUENNQgkoMTw8MykKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfT1VUX0NUTF9JTlZfUENNQQkoMTw8MikKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfT1VUX0NUTF9EQUNCX01VVEUJKDE8PDEpCisjZGVmaW5lIENTNDJMNTFfREFDX09VVF9DVExfREFDQV9NVVRFCSgxPDwwKQorCisjZGVmaW5lIENTNDJMNTFfREFDX0NUTAkJCTB4MDkKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfQ1RMX0RBVEFfU0VMKHgpCSgoKHgpJjMpPDw2KQorI2RlZmluZSBDUzQyTDUxX0RBQ19DVExfRlJFRVpFCQkoMTw8NSkKKyNkZWZpbmUgQ1M0Mkw1MV9EQUNfQ1RMX0RFRU1QSAkJKDE8PDMpCisjZGVmaW5lIENTNDJMNTFfREFDX0NUTF9BTVVURQkJKDE8PDIpCisjZGVmaW5lIENTNDJMNTFfREFDX0NUTF9EQUNTWih4KQkoKCh4KSYzKTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0FMQ19QR0FfQ1RMCQkweDBBCisjZGVmaW5lIENTNDJMNTFfQUxDX1BHQl9DVEwJCTB4MEIKKyNkZWZpbmUgQ1M0Mkw1MV9BTENfUEdYX0FMQ1hfU1JESVMJKDE8PDcpCisjZGVmaW5lIENTNDJMNTFfQUxDX1BHWF9BTENYX1pDRElTCSgxPDw2KQorI2RlZmluZSBDUzQyTDUxX0FMQ19QR1hfUEdYX1ZPTCh4KQkoKCh4KSYweDFmKTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0FEQ0FfQVRUCQkweDBDCisjZGVmaW5lIENTNDJMNTFfQURDQl9BVFQJCTB4MEQKKworI2RlZmluZSBDUzQyTDUxX0FEQ0FfVk9MCQkweDBFCisjZGVmaW5lIENTNDJMNTFfQURDQl9WT0wJCTB4MEYKKyNkZWZpbmUgQ1M0Mkw1MV9QQ01BX1ZPTAkJMHgxMAorI2RlZmluZSBDUzQyTDUxX1BDTUJfVk9MCQkweDExCisjZGVmaW5lIENTNDJMNTFfTUlYX01VVEVfQURDTUlYCQkoMTw8NykKKyNkZWZpbmUgQ1M0Mkw1MV9NSVhfVk9MVU1FKHgpCQkoKCh4KSYweDdmKTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0JFRVBfRlJFUQkJMHgxMgorI2RlZmluZSBDUzQyTDUxX0JFRVBfVk9MCQkweDEzCisjZGVmaW5lIENTNDJMNTFfQkVFUF9DT05GCQkweDE0CisKKyNkZWZpbmUgQ1M0Mkw1MV9UT05FX0NUTAkJMHgxNQorI2RlZmluZSBDUzQyTDUxX1RPTkVfQ1RMX1RSRUIoeCkJKCgoeCkmMHhmKTw8NCkKKyNkZWZpbmUgQ1M0Mkw1MV9UT05FX0NUTF9CQVNTKHgpCSgoKHgpJjB4Zik8PDApCisKKyNkZWZpbmUgQ1M0Mkw1MV9BT1VUQV9WT0wJCTB4MTYKKyNkZWZpbmUgQ1M0Mkw1MV9BT1VUQl9WT0wJCTB4MTcKKyNkZWZpbmUgQ1M0Mkw1MV9QQ01fTUlYRVIJCTB4MTgKKyNkZWZpbmUgQ1M0Mkw1MV9MSU1JVF9USFJFU19ESVMJCTB4MTkKKyNkZWZpbmUgQ1M0Mkw1MV9MSU1JVF9SRUwJCTB4MUEKKyNkZWZpbmUgQ1M0Mkw1MV9MSU1JVF9BVFQJCTB4MUIKKyNkZWZpbmUgQ1M0Mkw1MV9BTENfRU4JCQkweDFDCisjZGVmaW5lIENTNDJMNTFfQUxDX1JFTAkJCTB4MUQKKyNkZWZpbmUgQ1M0Mkw1MV9BTENfVEhSRVMJCTB4MUUKKyNkZWZpbmUgQ1M0Mkw1MV9OT0lTRV9DT05GCQkweDFGCisKKyNkZWZpbmUgQ1M0Mkw1MV9TVEFUVVMJCQkweDIwCisjZGVmaW5lIENTNDJMNTFfU1RBVFVTX1NQX0NMS0VSUgkoMTw8NikKKyNkZWZpbmUgQ1M0Mkw1MV9TVEFUVVNfU1BFQV9PVkZMCSgxPDw1KQorI2RlZmluZSBDUzQyTDUxX1NUQVRVU19TUEVCX09WRkwJKDE8PDQpCisjZGVmaW5lIENTNDJMNTFfU1RBVFVTX1BDTUFfT1ZGTAkoMTw8MykKKyNkZWZpbmUgQ1M0Mkw1MV9TVEFUVVNfUENNQl9PVkZMCSgxPDwyKQorI2RlZmluZSBDUzQyTDUxX1NUQVRVU19BRENBX09WRkwJKDE8PDEpCisjZGVmaW5lIENTNDJMNTFfU1RBVFVTX0FEQ0JfT1ZGTAkoMTw8MCkKKworI2RlZmluZSBDUzQyTDUxX0NIQVJHRV9GUkVRCQkweDIxCisKKyNkZWZpbmUgQ1M0Mkw1MV9GSVJTVFJFRwkweDAxCisvKgorICogSGFjazogd2l0aCByZWdpc3RlciAweDIxLCBpdCBtYWtlcyAzMyByZWdpc3RlcnMuIExvb2tzIGxpa2Ugc29tZW9uZSBpbiB0aGUKKyAqIGkyYyBsYXllciBkb2Vzbid0IGxpa2UgaTJjIHNtYnVzIGJsb2NrIHJlYWQgb2YgMzMgcmVncy4gV29ya2Fyb3VuZCBieSB1c2luZworICogMzIgcmVncworICovCisjZGVmaW5lIENTNDJMNTFfTEFTVFJFRwkJMHgyMAorI2RlZmluZSBDUzQyTDUxX05VTVJFR1MJCShDUzQyTDUxX0xBU1RSRUcgLSBDUzQyTDUxX0ZJUlNUUkVHICsgMSkKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBjczQybDUxX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2RldmljZV9jczQybDUxOworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jIGIvc291bmQvc29jL2NvZGVjcy9kYTcyMTAuYwppbmRleCA3NWFmMmQ2Li4zYzUxZDZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2RhNzIxMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MjEwLmMKQEAgLTE1LDIzICsxNSwxNSBAQAogICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0jaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogCiAjaW5jbHVkZSAiZGE3MjEwLmgiCiAKQEAgLTE0NSw2ICsxMzcsMjkgQEAKIAogI2RlZmluZSBEQTcyMTBfVkVSU0lPTiAiMC4wLjEiCiAKKy8qCisgKiBQbGF5YmFjayBWb2x1bWUKKyAqCisgKiBtYXgJCTogMHgzRiAoKzE1LjAgZEIpCisgKgkJICAgKDEuNSBkQiBzdGVwKQorICogbWluCQk6IDB4MTEgKC01NC4wIGRCKQorICogbXV0ZQkJOiAweDEwCisgKiByZXNlcnZlZAk6IDB4MDAgLSAweDBGCisgKgorICogKiogRklYTUUgKioKKyAqCisgKiBSZXNlcnZlZCBhcmVhIGFyZSBjb25zaWRlcmVkIGFzICJtdXRlIi4KKyAqIC0+IG1pbiA9IC03OS41IGRCCisgKi8KK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShocF9vdXRfdGx2LCAtNzk1MCwgMTUwLCAxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhNzIxMF9zbmRfY29udHJvbHNbXSA9IHsKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhlYWRQaG9uZSBQbGF5YmFjayBWb2x1bWUiLAorCQkJIERBNzIxMF9IUF9MX1ZPTCwgREE3MjEwX0hQX1JfVk9MLAorCQkJIDAsIDB4M0YsIDAsIGhwX291dF90bHYpLAorfTsKKwogLyogQ29kZWMgcHJpdmF0ZSBkYXRhICovCiBzdHJ1Y3QgZGE3MjEwX3ByaXYgewogCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOwpAQCAtMjI3LDEwICsyNDIsNiBAQAogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAKIAlpZiAoaXNfcGxheSkgewotCQkvKiBQbGF5QmFjayBWb2x1bWUgNDAgKi8KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX0hQX0xfVk9MLCAweDNGLCA0MCk7Ci0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIERBNzIxMF9IUF9SX1ZPTCwgMHgzRiwgNDApOwotCiAJCS8qIEVuYWJsZSBPdXQgKi8KIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX09VVE1JWF9MLCAweDFGLCAweDEwKTsKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgREE3MjEwX09VVE1JWF9SLCAweDFGLCAweDEwKTsKQEAgLTQ4OCw3ICs0OTksNyBAQAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYTcyMTBfZGFpKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOwotCQlnb3RvIGluaXRfZXJyOworCQlnb3RvIGNvZGVjX2VycjsKIAl9CiAKIAkvKiBGSVhNRQpAQCAtNTc0LDYgKzU4NSw4IEBACiAKIAlyZXR1cm4gcmV0OwogCitjb2RlY19lcnI6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGluaXRfZXJyOgogCWtmcmVlKGNvZGVjLT5yZWdfY2FjaGUpOwogCWNvZGVjLT5yZWdfY2FjaGUgPSBOVUxMOwpAQCAtNjAxLDggKzYxNCwxMCBAQAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAKIAlyZXQgPSBkYTcyMTBfaW5pdChkYTcyMTApOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CiAJCXByX2VycigiRmFpbGVkIHRvIGluaXRpYWxpc2UgZGE3MjEwIGF1ZGlvIGNvZGVjXG4iKTsKKwkJa2ZyZWUoZGE3MjEwKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjU2LDYgKzY3MSw5IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gcGNtX2VycjsKIAorCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGRhNzIxMF9jb2RlYywgZGE3MjEwX3NuZF9jb250cm9scywKKwkJCSAgICAgQVJSQVlfU0laRShkYTcyMTBfc25kX2NvbnRyb2xzKSk7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiREE3MjEwIEF1ZGlvIENvZGVjICVzXG4iLCBEQTcyMTBfVkVSU0lPTik7CiAKIHBjbV9lcnI6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjU1N2RlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwpAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjZGVmaW5lIEpaNDc0MF9SRUdfQ09ERUNfMSAweDAKKyNkZWZpbmUgSlo0NzQwX1JFR19DT0RFQ18yIDB4MQorCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0xJTkVfRU5BQkxFIEJJVCgyOSkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfTUlDX0VOQUJMRSBCSVQoMjgpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX1NXMV9FTkFCTEUgQklUKDI3KQorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMV9BRENfRU5BQkxFIEJJVCgyNikKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfU1cyX0VOQUJMRSBCSVQoMjUpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0RBQ19FTkFCTEUgQklUKDI0KQorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMV9WUkVGX0RJU0FCTEUgQklUKDIwKQorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMV9WUkVGX0FNUF9ESVNBQkxFIEJJVCgxOSkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfVlJFRl9QVUxMRE9XTiBCSVQoMTgpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX1ZSRUZfTE9XX0NVUlJFTlQgQklUKDE3KQorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMV9WUkVGX0hJR0hfQ1VSUkVOVCBCSVQoMTYpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0hFQURQSE9ORV9ESVNBQkxFIEJJVCgxNCkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfSEVBRFBIT05FX0FNUF9DSEFOR0VfQU5ZIEJJVCgxMykKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfSEVBRFBIT05FX0NIQVJHRSBCSVQoMTIpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0hFQURQSE9ORV9QVUxMRE9XTiAoQklUKDExKSB8IEJJVCgxMCkpCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0hFQURQSE9ORV9QT1dFUkRPV05fTSBCSVQoOSkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfSEVBRFBIT05FX1BPV0VSRE9XTiBCSVQoOCkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfU1VTUEVORCBCSVQoMSkKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfUkVTRVQgQklUKDApCisKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzFfTElORV9FTkFCTEVfT0ZGU0VUIDI5CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX01JQ19FTkFCTEVfT0ZGU0VUIDI4CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX1NXMV9FTkFCTEVfT0ZGU0VUIDI3CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0FEQ19FTkFCTEVfT0ZGU0VUIDI2CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX1NXMl9FTkFCTEVfT0ZGU0VUIDI1CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0RBQ19FTkFCTEVfT0ZGU0VUIDI0CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18xX0hFQURQSE9ORV9ESVNBQkxFX09GRlNFVCAxNAorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMV9IRUFEUEhPTkVfUE9XRVJET1dOX09GRlNFVCA4CisKKyNkZWZpbmUgSlo0NzQwX0NPREVDXzJfSU5QVVRfVk9MVU1FX01BU0sJCTB4MWYwMDAwCisjZGVmaW5lIEpaNDc0MF9DT0RFQ18yX1NBTVBMRV9SQVRFX01BU0sJCQkweDAwMGYwMAorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMl9NSUNfQk9PU1RfR0FJTl9NQVNLCQkweDAwMDAzMAorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMl9IRUFEUEhPTkVfVk9MVU1FX01BU0sJMHgwMDAwMDMKKworI2RlZmluZSBKWjQ3NDBfQ09ERUNfMl9JTlBVVF9WT0xVTUVfT0ZGU0VUCQkxNgorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMl9TQU1QTEVfUkFURV9PRkZTRVQJCSA4CisjZGVmaW5lIEpaNDc0MF9DT0RFQ18yX01JQ19CT09TVF9HQUlOX09GRlNFVAkgNAorI2RlZmluZSBKWjQ3NDBfQ09ERUNfMl9IRUFEUEhPTkVfVk9MVU1FX09GRlNFVAkgMAorCitzdGF0aWMgY29uc3QgdWludDMyX3Qgano0NzQwX2NvZGVjX3JlZ3NbXSA9IHsKKwkweDAyMWIyMzAyLCAweDAwMTcwODAzLAorfTsKKworc3RydWN0IGp6NDc0MF9jb2RlYyB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCisJdWludDMyX3QgcmVnX2NhY2hlWzJdOworCXN0cnVjdCBzbmRfc29jX2NvZGVjIGNvZGVjOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgano0NzQwX2NvZGVjICpjb2RlY190b19qejQ3NDAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29kZWMsIHN0cnVjdCBqejQ3NDBfY29kZWMsIGNvZGVjKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBqejQ3NDBfY29kZWNfcmVhZChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3Qgano0NzQwX2NvZGVjICpqejQ3NDBfY29kZWMgPSBjb2RlY190b19qejQ3NDAoY29kZWMpOworCXJldHVybiByZWFkbChqejQ3NDBfY29kZWMtPmJhc2UgKyAocmVnIDw8IDIpKTsKK30KKworc3RhdGljIGludCBqejQ3NDBfY29kZWNfd3JpdGUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IGp6NDc0MF9jb2RlYyAqano0NzQwX2NvZGVjID0gY29kZWNfdG9fano0NzQwKGNvZGVjKTsKKworCWp6NDc0MF9jb2RlYy0+cmVnX2NhY2hlW3JlZ10gPSB2YWw7CisJd3JpdGVsKHZhbCwgano0NzQwX2NvZGVjLT5iYXNlICsgKHJlZyA8PCAyKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGp6NDc0MF9jb2RlY19jb250cm9sc1tdID0geworCVNPQ19TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBKWjQ3NDBfUkVHX0NPREVDXzIsCisJCQlKWjQ3NDBfQ09ERUNfMl9IRUFEUEhPTkVfVk9MVU1FX09GRlNFVCwgMywgMCksCisJU09DX1NJTkdMRSgiTWFzdGVyIENhcHR1cmUgVm9sdW1lIiwgSlo0NzQwX1JFR19DT0RFQ18yLAorCQkJSlo0NzQwX0NPREVDXzJfSU5QVVRfVk9MVU1FX09GRlNFVCwgMzEsIDApLAorCVNPQ19TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBKWjQ3NDBfUkVHX0NPREVDXzEsCisJCQlKWjQ3NDBfQ09ERUNfMV9IRUFEUEhPTkVfRElTQUJMRV9PRkZTRVQsIDEsIDEpLAorCVNPQ19TSU5HTEUoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIEpaNDc0MF9SRUdfQ09ERUNfMiwKKwkJCUpaNDc0MF9DT0RFQ18yX01JQ19CT09TVF9HQUlOX09GRlNFVCwgMywgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgano0NzQwX2NvZGVjX291dHB1dF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRSgiQnlwYXNzIFN3aXRjaCIsIEpaNDc0MF9SRUdfQ09ERUNfMSwKKwkJCUpaNDc0MF9DT0RFQ18xX1NXMV9FTkFCTEVfT0ZGU0VULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkRBQyBTd2l0Y2giLCBKWjQ3NDBfUkVHX0NPREVDXzEsCisJCQlKWjQ3NDBfQ09ERUNfMV9TVzJfRU5BQkxFX09GRlNFVCwgMSwgMCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgano0NzQwX2NvZGVjX2lucHV0X2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fU0lOR0xFKCJMaW5lIENhcHR1cmUgU3dpdGNoIiwgSlo0NzQwX1JFR19DT0RFQ18xLAorCQkJSlo0NzQwX0NPREVDXzFfTElORV9FTkFCTEVfT0ZGU0VULCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIk1pYyBDYXB0dXJlIFN3aXRjaCIsIEpaNDc0MF9SRUdfQ09ERUNfMSwKKwkJCUpaNDc0MF9DT0RFQ18xX01JQ19FTkFCTEVfT0ZGU0VULCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBqejQ3NDBfY29kZWNfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0FEQygiQURDIiwgIkNhcHR1cmUiLCBKWjQ3NDBfUkVHX0NPREVDXzEsCisJCQlKWjQ3NDBfQ09ERUNfMV9BRENfRU5BQkxFX09GRlNFVCwgMCksCisJU05EX1NPQ19EQVBNX0RBQygiREFDIiwgIlBsYXliYWNrIiwgSlo0NzQwX1JFR19DT0RFQ18xLAorCQkJSlo0NzQwX0NPREVDXzFfREFDX0VOQUJMRV9PRkZTRVQsIDApLAorCisJU05EX1NPQ19EQVBNX01JWEVSKCJPdXRwdXQgTWl4ZXIiLCBKWjQ3NDBfUkVHX0NPREVDXzEsCisJCQlKWjQ3NDBfQ09ERUNfMV9IRUFEUEhPTkVfUE9XRVJET1dOX09GRlNFVCwgMSwKKwkJCWp6NDc0MF9jb2RlY19vdXRwdXRfY29udHJvbHMsCisJCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19vdXRwdXRfY29udHJvbHMpKSwKKworCVNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwoIklucHV0IE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJano0NzQwX2NvZGVjX2lucHV0X2NvbnRyb2xzLAorCQkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfaW5wdXRfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxpbmUgSW5wdXQiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCisJU05EX1NPQ19EQVBNX09VVFBVVCgiTE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQiKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDIiksCisJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU4iKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIlJJTiIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgano0NzQwX2NvZGVjX2RhcG1fcm91dGVzW10gPSB7CisJeyJMaW5lIElucHV0IiwgTlVMTCwgIkxJTiJ9LAorCXsiTGluZSBJbnB1dCIsIE5VTEwsICJSSU4ifSwKKworCXsiSW5wdXQgTWl4ZXIiLCAiTGluZSBDYXB0dXJlIFN3aXRjaCIsICJMaW5lIElucHV0In0sCisJeyJJbnB1dCBNaXhlciIsICJNaWMgQ2FwdHVyZSBTd2l0Y2giLCAiTUlDIn0sCisKKwl7IkFEQyIsIE5VTEwsICJJbnB1dCBNaXhlciJ9LAorCisJeyJPdXRwdXQgTWl4ZXIiLCAiQnlwYXNzIFN3aXRjaCIsICJJbnB1dCBNaXhlciJ9LAorCXsiT3V0cHV0IE1peGVyIiwgIkRBQyBTd2l0Y2giLCAiREFDIn0sCisKKwl7IkxPVVQiLCBOVUxMLCAiT3V0cHV0IE1peGVyIn0sCisJeyJST1VUIiwgTlVMTCwgIk91dHB1dCBNaXhlciJ9LAorfTsKKworc3RhdGljIGludCBqejQ3NDBfY29kZWNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1aW50MzJfdCB2YWw7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKworCXN3aXRjaCAocGFyYW1zX3JhdGUocGFyYW1zKSkgeworCWNhc2UgODAwMDoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxMTAyNToKKwkJdmFsID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxMjAwMDoKKwkJdmFsID0gMjsKKwkJYnJlYWs7CisJY2FzZSAxNjAwMDoKKwkJdmFsID0gMzsKKwkJYnJlYWs7CisJY2FzZSAyMjA1MDoKKwkJdmFsID0gNDsKKwkJYnJlYWs7CisJY2FzZSAyNDAwMDoKKwkJdmFsID0gNTsKKwkJYnJlYWs7CisJY2FzZSAzMjAwMDoKKwkJdmFsID0gNjsKKwkJYnJlYWs7CisJY2FzZSA0NDEwMDoKKwkJdmFsID0gNzsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJdmFsID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsIDw8PSBKWjQ3NDBfQ09ERUNfMl9TQU1QTEVfUkFURV9PRkZTRVQ7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBKWjQ3NDBfUkVHX0NPREVDXzIsCisJCQkJSlo0NzQwX0NPREVDXzJfU0FNUExFX1JBVEVfTUFTSywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBqejQ3NDBfY29kZWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gano0NzQwX2NvZGVjX2h3X3BhcmFtcywKK307CisKK3N0cnVjdCBzbmRfc29jX2RhaSBqejQ3NDBfY29kZWNfZGFpID0geworCS5uYW1lID0gImp6NDc0MCIsCisJLnBsYXliYWNrID0geworCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluID0gMiwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1M4LAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5zdHJlYW1fbmFtZSA9ICJDYXB0dXJlIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TOCwKKwl9LAorCS5vcHMgPSAmano0NzQwX2NvZGVjX2RhaV9vcHMsCisJLnN5bW1ldHJpY19yYXRlcyA9IDEsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX2NvZGVjX2RhaSk7CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9jb2RlY193YWtldXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCXVpbnQzMl90ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBKWjQ3NDBfUkVHX0NPREVDXzEsCisJCUpaNDc0MF9DT0RFQ18xX1JFU0VULCBKWjQ3NDBfQ09ERUNfMV9SRVNFVCk7CisJdWRlbGF5KDIpOworCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSlo0NzQwX1JFR19DT0RFQ18xLAorCQlKWjQ3NDBfQ09ERUNfMV9TVVNQRU5EIHwgSlo0NzQwX0NPREVDXzFfUkVTRVQsIDApOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoano0NzQwX2NvZGVjX3JlZ3MpOyArK2kpCisJCWp6NDc0MF9jb2RlY193cml0ZShjb2RlYywgaSwgY2FjaGVbaV0pOworfQorCitzdGF0aWMgaW50IGp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJZW51bSBzbmRfc29jX2JpYXNfbGV2ZWwgbGV2ZWwpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJc3dpdGNoIChsZXZlbCkgeworCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfQklBU19QUkVQQVJFOgorCQltYXNrID0gSlo0NzQwX0NPREVDXzFfVlJFRl9ESVNBQkxFIHwKKwkJCQlKWjQ3NDBfQ09ERUNfMV9WUkVGX0FNUF9ESVNBQkxFIHwKKwkJCQlKWjQ3NDBfQ09ERUNfMV9IRUFEUEhPTkVfUE9XRVJET1dOX007CisJCXZhbHVlID0gMDsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBKWjQ3NDBfUkVHX0NPREVDXzEsIG1hc2ssIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJLyogVGhlIG9ubHkgd2F5IHRvIGNsZWFyIHRoZSBzdXNwZW5kIGZsYWcgaXMgdG8gcmVzZXQgdGhlIGNvZGVjICovCisJCWlmIChjb2RlYy0+Ymlhc19sZXZlbCA9PSBTTkRfU09DX0JJQVNfT0ZGKQorCQkJano0NzQwX2NvZGVjX3dha2V1cChjb2RlYyk7CisKKwkJbWFzayA9IEpaNDc0MF9DT0RFQ18xX1ZSRUZfRElTQUJMRSB8CisJCQlKWjQ3NDBfQ09ERUNfMV9WUkVGX0FNUF9ESVNBQkxFIHwKKwkJCUpaNDc0MF9DT0RFQ18xX0hFQURQSE9ORV9QT1dFUkRPV05fTTsKKwkJdmFsdWUgPSBKWjQ3NDBfQ09ERUNfMV9WUkVGX0RJU0FCTEUgfAorCQkJSlo0NzQwX0NPREVDXzFfVlJFRl9BTVBfRElTQUJMRSB8CisJCQlKWjQ3NDBfQ09ERUNfMV9IRUFEUEhPTkVfUE9XRVJET1dOX007CisKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgSlo0NzQwX1JFR19DT0RFQ18xLCBtYXNrLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKKwkJbWFzayA9IEpaNDc0MF9DT0RFQ18xX1NVU1BFTkQ7CisJCXZhbHVlID0gSlo0NzQwX0NPREVDXzFfU1VTUEVORDsKKworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBKWjQ3NDBfUkVHX0NPREVDXzEsIG1hc2ssIHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY29kZWMtPmJpYXNfbGV2ZWwgPSBsZXZlbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKmp6NDc0MF9jb2RlY19jb2RlYzsKKworc3RhdGljIGludCBqejQ3NDBfY29kZWNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGp6NDc0MF9jb2RlY19jb2RlYzsKKworCUJVR19PTighY29kZWMpOworCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgcGNtczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGp6NDc0MF9jb2RlY19jb250cm9scywKKwkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfY29udHJvbHMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGp6NDc0MF9jb2RlY19kYXBtX3dpZGdldHMsCisJCUFSUkFZX1NJWkUoano0NzQwX2NvZGVjX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcywKKwkJQVJSQVlfU0laRShqejQ3NDBfY29kZWNfZGFwbV9yb3V0ZXMpKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfY29kZWNfZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgaW50IGp6NDc0MF9jb2RlY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisKKwlyZXR1cm4gano0NzQwX2NvZGVjX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKK30KKworc3RhdGljIGludCBqejQ3NDBfY29kZWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCisJcmV0dXJuIGp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOworfQorCisjZWxzZQorI2RlZmluZSBqejQ3NDBfY29kZWNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGp6NDc0MF9jb2RlY19yZXN1bWUgTlVMTAorI2VuZGlmCisKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X2p6NDc0MF9jb2RlYyA9IHsKKwkucHJvYmUgPSBqejQ3NDBfY29kZWNfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBqejQ3NDBfY29kZWNfZGV2X3JlbW92ZSwKKwkuc3VzcGVuZCA9IGp6NDc0MF9jb2RlY19zdXNwZW5kLAorCS5yZXN1bWUgPSBqejQ3NDBfY29kZWNfcmVzdW1lLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNvY19jb2RlY19kZXZfano0NzQwX2NvZGVjKTsKKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgano0NzQwX2NvZGVjICpqejQ3NDBfY29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCisJano0NzQwX2NvZGVjID0ga3phbGxvYyhzaXplb2YoKmp6NDc0MF9jb2RlYyksIEdGUF9LRVJORUwpOworCWlmICghano0NzQwX2NvZGVjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBtbWlvIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2ZyZWVfY29kZWM7CisJfQorCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwgcGRldi0+bmFtZSk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgbW1pbyBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlX2NvZGVjOworCX0KKworCWp6NDc0MF9jb2RlYy0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKKwlpZiAoIWp6NDc0MF9jb2RlYy0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtbWlvIG1lbW9yeVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOworCX0KKwlqejQ3NDBfY29kZWMtPm1lbSA9IG1lbTsKKworCWp6NDc0MF9jb2RlY19kYWkuZGV2ID0gJnBkZXYtPmRldjsKKworCWNvZGVjID0gJmp6NDc0MF9jb2RlYy0+Y29kZWM7CisKKwljb2RlYy0+ZGV2CQk9ICZwZGV2LT5kZXY7CisJY29kZWMtPm5hbWUJCT0gImp6NDc0MCI7CisJY29kZWMtPm93bmVyCQk9IFRISVNfTU9EVUxFOworCisJY29kZWMtPnJlYWQJCT0gano0NzQwX2NvZGVjX3JlYWQ7CisJY29kZWMtPndyaXRlCQk9IGp6NDc0MF9jb2RlY193cml0ZTsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwJPSBqejQ3NDBfY29kZWNfc2V0X2JpYXNfbGV2ZWw7CisJY29kZWMtPmJpYXNfbGV2ZWwJPSBTTkRfU09DX0JJQVNfT0ZGOworCisJY29kZWMtPmRhaQkJPSAmano0NzQwX2NvZGVjX2RhaTsKKwljb2RlYy0+bnVtX2RhaQkJPSAxOworCisJY29kZWMtPnJlZ19jYWNoZQk9IGp6NDc0MF9jb2RlYy0+cmVnX2NhY2hlOworCWNvZGVjLT5yZWdfY2FjaGVfc2l6ZQk9IDI7CisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIGp6NDc0MF9jb2RlY19yZWdzLCBzaXplb2Yoano0NzQwX2NvZGVjX3JlZ3MpKTsKKworCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3dpZGdldHMpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV9wYXRocyk7CisKKwlqejQ3NDBfY29kZWNfY29kZWMgPSBjb2RlYzsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEpaNDc0MF9SRUdfQ09ERUNfMSwKKwkJCUpaNDc0MF9DT0RFQ18xX1NXMl9FTkFCTEUsIEpaNDc0MF9DT0RFQ18xX1NXMl9FTkFCTEUpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgano0NzQwX2NvZGVjKTsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjXG4iKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmano0NzQwX2NvZGVjX2RhaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWMgZGFpXG4iKTsKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9jb2RlYzsKKwl9CisKKwlqejQ3NDBfY29kZWNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKworCXJldHVybiAwOworCitlcnJfdW5yZWdpc3Rlcl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOworZXJyX2lvdW5tYXA6CisJaW91bm1hcChqejQ3NDBfY29kZWMtPmJhc2UpOworZXJyX3JlbGVhc2VfbWVtX3JlZ2lvbjoKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKK2Vycl9mcmVlX2NvZGVjOgorCWtmcmVlKGp6NDc0MF9jb2RlYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBqejQ3NDBfY29kZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGp6NDc0MF9jb2RlYyAqano0NzQwX2NvZGVjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICptZW0gPSBqejQ3NDBfY29kZWMtPm1lbTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJmp6NDc0MF9jb2RlY19kYWkpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmano0NzQwX2NvZGVjLT5jb2RlYyk7CisKKwlpb3VubWFwKGp6NDc0MF9jb2RlYy0+YmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShqejQ3NDBfY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGp6NDc0MF9jb2RlY19kcml2ZXIgPSB7CisJLnByb2JlID0gano0NzQwX2NvZGVjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChqejQ3NDBfY29kZWNfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJqejQ3NDAtY29kZWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgano0NzQwX2NvZGVjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqejQ3NDBfY29kZWNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGp6NDc0MF9jb2RlY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGp6NDc0MF9jb2RlY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmp6NDc0MF9jb2RlY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoano0NzQwX2NvZGVjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkpaNDc0MCBTb0MgaW50ZXJuYWwgY29kZWMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ano0NzQwLWNvZGVjIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5oIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWEwNjkxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1NORF9TT0NfQ09ERUNTX0paNDc0MF9DT0RFQ19IX18KKyNkZWZpbmUgX19TTkRfU09DX0NPREVDU19KWjQ3NDBfQ09ERUNfSF9fCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgano0NzQwX2NvZGVjX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9qejQ3NDBfY29kZWM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zcGRpZl90cmFuc2NpZXZlci5jIGIvc291bmQvc29jL2NvZGVjcy9zcGRpZl90cmFuc2NpZXZlci5jCmluZGV4IGE2MzE5MTEuLjkxMTk4MzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NwZGlmX3RyYW5zY2lldmVyLmMKQEAgLTE2LDggKzE2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKICNpbmNsdWRlICJzcGRpZl90cmFuc2NpZXZlci5oIgogCkBAIC0yNiw2ICsyOCw0OCBAQAogI2RlZmluZSBTVFVCX1JBVEVTCVNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAKICNkZWZpbmUgU1RVQl9GT1JNQVRTCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqc3BkaWZfZGl0X2NvZGVjOworCitzdGF0aWMgaW50IHNwZGlmX2RpdF9jb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQ7CisKKwlpZiAoc3BkaWZfZGl0X2NvZGVjID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29kZWMgZGV2aWNlIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc29jZGV2LT5jYXJkLT5jb2RlYyA9IHNwZGlmX2RpdF9jb2RlYzsKKwljb2RlYyA9IHNwZGlmX2RpdF9jb2RlYzsKKworCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwY21zOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfY3JlYXRlX3BjbXM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jcmVhdGVfcGNtczoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwZGlmX2RpdF9jb2RlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl9zcGRpZl9kaXQgPSB7CisJLnByb2JlCQk9IHNwZGlmX2RpdF9jb2RlY19wcm9iZSwKKwkucmVtb3ZlCQk9IHNwZGlmX2RpdF9jb2RlY19yZW1vdmUsCit9OyBFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3NwZGlmX2RpdCk7CisKIHN0cnVjdCBzbmRfc29jX2RhaSBkaXRfc3R1Yl9kYWkgPSB7CiAJLm5hbWUJCT0gIkRJVCIsCiAJLnBsYXliYWNrIAk9IHsKQEAgLTQwLDEzICs4NCw2MSBAQAogCiBzdGF0aWMgaW50IHNwZGlmX2RpdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKwlpbnQgcmV0OworCisJaWYgKHNwZGlmX2RpdF9jb2RlYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJBbm90aGVyIENvZGVjIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9yZWdfY29kZWM7CisJfQorCisJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOworCWlmIChjb2RlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjLT5kZXYgPSAmcGRldi0+ZGV2OworCisJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKKworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJY29kZWMtPm5hbWUgPSAic3BkaWYtZGl0IjsKKwljb2RlYy0+b3duZXIgPSBUSElTX01PRFVMRTsKKwljb2RlYy0+ZGFpID0gJmRpdF9zdHViX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisKKwlzcGRpZl9kaXRfY29kZWMgPSBjb2RlYzsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ19jb2RlYzsKKwl9CisKIAlkaXRfc3R1Yl9kYWkuZGV2ID0gJnBkZXYtPmRldjsKLQlyZXR1cm4gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmRpdF9zdHViX2RhaSk7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJmRpdF9zdHViX2RhaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRhaTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3JlZ19kYWk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZWdfZGFpOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CitlcnJfcmVnX2NvZGVjOgorCWtmcmVlKHNwZGlmX2RpdF9jb2RlYyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzcGRpZl9kaXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZGl0X3N0dWJfZGFpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoc3BkaWZfZGl0X2NvZGVjKTsKKwlrZnJlZShzcGRpZl9kaXRfY29kZWMpOworCXNwZGlmX2RpdF9jb2RlYyA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvc3BkaWZfdHJhbnNjaWV2ZXIuaAppbmRleCAyOTZmMmViLi4xZTEwMjEyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NwZGlmX3RyYW5zY2lldmVyLmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9zcGRpZl90cmFuc2NpZXZlci5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIENPREVDX1NUVUJTX0gKICNkZWZpbmUgQ09ERUNfU1RVQlNfSAogCitleHRlcm4gc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfc3BkaWZfZGl0OwogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBkaXRfc3R1Yl9kYWk7CiAKICNlbmRpZiAvKiBDT0RFQ19TVFVCU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKaW5kZXggYjBiYWUzNS4uMGE0YjBmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwpAQCAtNTYwLDEzICs1NjAsMTYgQEAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCS8qIHZyZWYvbWlkLCBvc2Mgb24sIGRhYyB1bm11dGUgKi8KKwkJcmVnICY9IH4oVExWMzIwQUlDMjNfREVWSUNFX1BXUl9PRkYgfCBUTFYzMjBBSUMyM19PU0NfT0ZGIHwgXAorCQkJVExWMzIwQUlDMjNfREFDX09GRik7CiAJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IsIHJlZyk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIGV2ZXJ5dGhpbmcgb2ZmIGV4Y2VwdCB2cmVmL3ZtaWQsICovCi0JCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IsIHJlZyB8IDB4MDA0MCk7CisJCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19QV1IsIHJlZyB8IFwKKwkJCVRMVjMyMEFJQzIzX0NMS19PRkYpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfQklBU19PRkY6CiAJCS8qIGV2ZXJ5dGhpbmcgb2ZmLCBkYWMgbXV0ZSwgaW5hY3RpdmUgKi8KQEAgLTYxNSw3ICs2MTgsNiBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAotCXRsdjMyMGFpYzIzX3dyaXRlKGNvZGVjLCBUTFYzMjBBSUMyM19BQ1RJVkUsIDB4MCk7CiAJdGx2MzIwYWljMjNfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCiAJcmV0dXJuIDA7CkBAIC02MzIsNyArNjM0LDYgQEAKIAkJdTE2IHZhbCA9IHRsdjMyMGFpYzIzX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCByZWcpOwogCQl0bHYzMjBhaWMyM193cml0ZShjb2RlYywgcmVnLCB2YWwpOwogCX0KLQogCXRsdjMyMGFpYzIzX3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwppbmRleCA2NWFkYzc3Li44NjUxYjAxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCkBAIC00OSw4ICs0OSw2IEBACiAKICNkZWZpbmUgTlNBTVBMRV9NQVgJCTU3MDAKIAotI2RlZmluZSBMQVRFTkNZX1RJTUVfTVMJCTIwCi0KICNkZWZpbmUgTU9ERTdfTFRIUgkJMTAKICNkZWZpbmUgTU9ERTdfVVRIUgkJKERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgLSAxMCkKIApAQCAtNjIsNiArNjAsOSBAQAogI2RlZmluZSBVU19UT19TQU1QTEVTKHJhdGUsIHVzKSBcCiAJKHJhdGUgLyAoMTAwMDAwMCAvIHVzKSkKIAorI2RlZmluZSBVVEhSX0ZST01fUEVSSU9EX1NJWkUoc2FtcGxlcywgcGxheXJhdGUsIGJ1cnN0cmF0ZSkgXAorCSgoc2FtcGxlcyAqIDUwMDApIC8gKChidXJzdHJhdGUgKiA1MDAwKSAvIChidXJzdHJhdGUgLSBwbGF5cmF0ZSkpKQorCiBzdGF0aWMgdm9pZCBkYWMzM19jYWxjdWxhdGVfdGltZXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogc3RhdGljIGludCBkYWMzM19wcmVwYXJlX2NoaXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogCkBAIC0xMDcsNiArMTA4LDEwIEBACiAJCQkJCSAqIHRoaXMgKi8KIAllbnVtIGRhYzMzX2ZpZm9fbW9kZXMgZmlmb19tb2RlOy8qIEZJRk8gbW9kZSBzZWxlY3Rpb24gKi8KIAl1bnNpZ25lZCBpbnQgbnNhbXBsZTsJCS8qIGJ1cnN0IHJlYWQgYW1vdW50IGZyb20gaG9zdCAqLworCWludCBtb2RlMV9sYXRlbmN5OwkJLyogbGF0ZW5jeSBjYXVzZWQgYnkgdGhlIGkyYyB3cml0ZXMgaW4KKwkJCQkJICogdXMgKi8KKwlpbnQgYXV0b19maWZvX2NvbmZpZzsgCQkvKiBDb25maWd1cmUgdGhlIEZJRk8gYmFzZWQgb24gdGhlCisJCQkJCSAqIHBlcmlvZCBzaXplICovCiAJdTggYnVyc3RfYmNsa2RpdjsJCS8qIEJDTEsgZGl2aWRlciB2YWx1ZSBpbiBidXJzdCBtb2RlICovCiAJdW5zaWduZWQgaW50IGJ1cnN0X3JhdGU7CS8qIEludGVyZmFjZSBzcGVlZCBpbiBCdXJzdCBtb2RlcyAqLwogCkBAIC0xMjAsNiArMTI1LDggQEAKIAkJCQkJICogc2FtcGxlcyAqLwogCXVuc2lnbmVkIGludCBtb2RlN191c190b19sdGhyOwkvKiBUaW1lIHRvIHJlYWNoIGx0aHIgZnJvbSB1dGhyICovCiAKKwl1bnNpZ25lZCBpbnQgdXRocjsKKwogCWVudW0gZGFjMzNfc3RhdGUgc3RhdGU7CiB9OwogCkBAIC00NDIsNiArNDQ5LDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBkYWMzM19nZXRfdXRocihzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGRhYzMzLT51dGhyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjMzNfc2V0X3V0aHIoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQgPSAwOworCisJaWYgKGRhYzMzLT5zdWJzdHJlYW0pCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoZGFjMzMtPnV0aHIgPT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCXJldHVybiAwOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdIDwgKE1PREU3X0xUSFIgKyAxMCkgfHwKKwkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPiBNT0RFN19VVEhSKQorCQlyZXQgPSAtRUlOVkFMOworCWVsc2UKKwkJZGFjMzMtPnV0aHIgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZGFjMzNfZ2V0X2ZpZm9fbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKQEAgLTUwMywxMyArNTQzLDE4IEBACiAJCSBEQUMzM19MSU5FTF9UT19MTE9fVk9MLCBEQUMzM19MSU5FUl9UT19STE9fVk9MLCAwLCAxMjcsIDEpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX25zYW1wbGVfc25kX2NvbnRyb2xzW10gPSB7Ci0JU09DX1NJTkdMRV9FWFQoIm5TYW1wbGUiLCAwLCAwLCA1OTAwLCAwLAotCQkgZGFjMzNfZ2V0X25zYW1wbGUsIGRhYzMzX3NldF9uc2FtcGxlKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMzM19tb2RlX3NuZF9jb250cm9sc1tdID0gewogCVNPQ19FTlVNX0VYVCgiRklGTyBNb2RlIiwgZGFjMzNfZmlmb19tb2RlX2VudW0sCiAJCSBkYWMzM19nZXRfZmlmb19tb2RlLCBkYWMzM19zZXRfZmlmb19tb2RlKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBkYWMzM19maWZvX3NuZF9jb250cm9sc1tdID0geworCVNPQ19TSU5HTEVfRVhUKCJuU2FtcGxlIiwgMCwgMCwgNTkwMCwgMCwKKwkJZGFjMzNfZ2V0X25zYW1wbGUsIGRhYzMzX3NldF9uc2FtcGxlKSwKKwlTT0NfU0lOR0xFX0VYVCgiVVRIUiIsIDAsIDAsIE1PREU3X1VUSFIsIDAsCisJCSBkYWMzM19nZXRfdXRociwgZGFjMzNfc2V0X3V0aHIpLAorfTsKKwogLyogQW5hbG9nIGJ5cGFzcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRhYzMzX2RhcG1fYWJ5cGFzc2xfY29udHJvbCA9CiAJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBEQUMzM19MSU5FTF9UT19MTE9fVk9MLCA3LCAxLCAxKTsKQEAgLTYxMiw3ICs2NTcsNyBAQAogCXN3aXRjaCAoZGFjMzMtPmZpZm9fbW9kZSkgewogCWNhc2UgREFDMzNfRklGT19NT0RFMToKIAkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfTlNBTVBMRV9NU0IsCi0JCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUgKyBkYWMzMy0+YWxhcm1fdGhyZXNob2xkKSk7CisJCQlEQUMzM19USFJSRUcoZGFjMzMtPm5zYW1wbGUpKTsKIAogCQkvKiBUYWtlIHRoZSB0aW1lc3RhbXBzICovCiAJCXNwaW5fbG9ja19pcnEoJmRhYzMzLT5sb2NrKTsKQEAgLTc2MSw2ICs4MDYsMTAgQEAKIAlzdHJ1Y3QgdGx2MzIwZGFjMzNfcHJpdiAqZGFjMzMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCWRhYzMzLT5zdWJzdHJlYW0gPSBOVUxMOworCisJLyogUmVzZXQgdGhlIG5TYW1wbGUgcmVzdHJpY3Rpb25zICovCisJZGFjMzMtPm5zYW1wbGVfbWluID0gMDsKKwlkYWMzMy0+bnNhbXBsZV9tYXggPSBOU0FNUExFX01BWDsKIH0KIAogc3RhdGljIGludCBkYWMzM19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC05ODUsNyArMTAzNCw3IEBACiAJCSAqIENvbmZpZ3VyZSB0aGUgdGhyZXNob2xkIGxldmVscywgYW5kIGxlYXZlIDEwIHNhbXBsZSBzcGFjZQogCQkgKiBhdCB0aGUgYm90dG9tLCBhbmQgYWxzbyBhdCB0aGUgdG9wIG9mIHRoZSBGSUZPCiAJCSAqLwotCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19VVEhSX01TQiwgREFDMzNfVEhSUkVHKE1PREU3X1VUSFIpKTsKKwkJZGFjMzNfd3JpdGUxNihjb2RlYywgREFDMzNfVVRIUl9NU0IsIERBQzMzX1RIUlJFRyhkYWMzMy0+dXRocikpOwogCQlkYWMzM193cml0ZTE2KGNvZGVjLCBEQUMzM19MVEhSX01TQiwgREFDMzNfVEhSUkVHKE1PREU3X0xUSFIpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwMDMsNTcgKzEwNTIsNzEgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHJ0ZC0+c29jZGV2OwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAJc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHBlcmlvZF9zaXplID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmF0ZSA9IHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZTsKIAl1bnNpZ25lZCBpbnQgbnNhbXBsZV9saW1pdDsKIAogCS8qIEluIGJ5cGFzcyBtb2RlIHdlIGRvbid0IG5lZWQgdG8gY2FsY3VsYXRlICovCiAJaWYgKCFkYWMzMy0+Zmlmb19tb2RlKQogCQlyZXR1cm47CiAKLQkvKiBOdW1iZXIgb2Ygc2FtcGxlcyAoMTZiaXQsIHN0ZXJlbykgaW4gb25lIHBlcmlvZCAqLwotCWRhYzMzLT5uc2FtcGxlX21pbiA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pIC8gNDsKLQotCS8qIE51bWJlciBvZiBzYW1wbGVzICgxNmJpdCwgc3RlcmVvKSBpbiBBTFNBIGJ1ZmZlciAqLwotCWRhYzMzLT5uc2FtcGxlX21heCA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8gNDsKLQkvKiBTdWJ0cmFjdCBvbmUgcGVyaW9kIGZyb20gdGhlIHRvdGFsICovCi0JZGFjMzMtPm5zYW1wbGVfbWF4IC09IGRhYzMzLT5uc2FtcGxlX21pbjsKLQotCS8qIE51bWJlciBvZiBzYW1wbGVzIGZvciBMQVRFTkNZX1RJTUVfTVMgLyAyICovCi0JZGFjMzMtPmFsYXJtX3RocmVzaG9sZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSAvCi0JCQkJICgxMDAwIC8gKExBVEVOQ1lfVElNRV9NUyAvIDIpKTsKLQotCS8qIEZpbmQgYW5kIGZpeCB1cCB0aGUgbG93ZXN0IG5zbWFwbGUgbGltaXQgKi8KLQluc2FtcGxlX2xpbWl0ID0gc3Vic3RyZWFtLT5ydW50aW1lLT5yYXRlIC8gKDEwMDAgLyBMQVRFTkNZX1RJTUVfTVMpOwotCi0JaWYgKGRhYzMzLT5uc2FtcGxlX21pbiA8IG5zYW1wbGVfbGltaXQpCi0JCWRhYzMzLT5uc2FtcGxlX21pbiA9IG5zYW1wbGVfbGltaXQ7Ci0KLQlpZiAoZGFjMzMtPm5zYW1wbGUgPCBkYWMzMy0+bnNhbXBsZV9taW4pCi0JCWRhYzMzLT5uc2FtcGxlID0gZGFjMzMtPm5zYW1wbGVfbWluOwotCi0JLyoKLQkgKiBGaW5kIGFuZCBmaXggdXAgdGhlIGhpZ2hlc3QgbnNtYXBsZSBsaW1pdAotCSAqIEluIG9yZGVyIHRvIG5vdCBvdmVyZmxvdyB0aGUgREFDMzMgYnVmZmVyIHN1YnN0cmFjdCB0aGUKLQkgKiBhbGFybV90aHJlc2hvbGQgdmFsdWUgZnJvbSB0aGUgc2l6ZSBvZiB0aGUgREFDMzMgYnVmZmVyCi0JICovCi0JbnNhbXBsZV9saW1pdCA9IERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgLSBkYWMzMy0+YWxhcm1fdGhyZXNob2xkOwotCi0JaWYgKGRhYzMzLT5uc2FtcGxlX21heCA+IG5zYW1wbGVfbGltaXQpCi0JCWRhYzMzLT5uc2FtcGxlX21heCA9IG5zYW1wbGVfbGltaXQ7Ci0KLQlpZiAoZGFjMzMtPm5zYW1wbGUgPiBkYWMzMy0+bnNhbXBsZV9tYXgpCi0JCWRhYzMzLT5uc2FtcGxlID0gZGFjMzMtPm5zYW1wbGVfbWF4OwotCiAJc3dpdGNoIChkYWMzMy0+Zmlmb19tb2RlKSB7CiAJY2FzZSBEQUMzM19GSUZPX01PREUxOgorCQkvKiBOdW1iZXIgb2Ygc2FtcGxlcyB1bmRlciBpMmMgbGF0ZW5jeSAqLworCQlkYWMzMy0+YWxhcm1fdGhyZXNob2xkID0gVVNfVE9fU0FNUExFUyhyYXRlLAorCQkJCQkJZGFjMzMtPm1vZGUxX2xhdGVuY3kpOworCQlpZiAoZGFjMzMtPmF1dG9fZmlmb19jb25maWcpIHsKKwkJCWlmIChwZXJpb2Rfc2l6ZSA8PSBkYWMzMy0+YWxhcm1fdGhyZXNob2xkKQorCQkJCS8qCisJCQkJICogQ29uZmlndXJlIG5TYW1hcGxlIHRvIG51bWJlciBvZiBwZXJpb2RzLAorCQkJCSAqIHdoaWNoIGNvdmVycyB0aGUgbGF0ZW5jeSByZXF1aXJvbm1lbnQuCisJCQkJICovCisJCQkJZGFjMzMtPm5zYW1wbGUgPSBwZXJpb2Rfc2l6ZSAqCisJCQkJICAgICAgICgoZGFjMzMtPmFsYXJtX3RocmVzaG9sZCAvIHBlcmlvZF9zaXplKSArCisJCQkJICAgICAgIChkYWMzMy0+YWxhcm1fdGhyZXNob2xkICUgcGVyaW9kX3NpemUgPworCQkJCSAgICAgICAxIDogMCkpOworCQkJZWxzZQorCQkJCWRhYzMzLT5uc2FtcGxlID0gcGVyaW9kX3NpemU7CisJCX0gZWxzZSB7CisJCQkvKiBuU2FtcGxlIHRpbWUgc2hhbGwgbm90IGJlIHNob3J0ZXIgdGhhbiBpMmMgbGF0ZW5jeSAqLworCQkJZGFjMzMtPm5zYW1wbGVfbWluID0gZGFjMzMtPmFsYXJtX3RocmVzaG9sZDsKKwkJCS8qCisJCQkgKiBuU2FtcGxlIHNob3VsZCBub3QgYmUgYmlnZ2VyIHRoYW4gYWxzYSBidWZmZXIgbWludXMKKwkJCSAqIHNpemUgb2Ygb25lIHBlcmlvZCB0byBhdm9pZCBvdmVycnVucworCQkJICovCisJCQlkYWMzMy0+bnNhbXBsZV9tYXggPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0KKwkJCQkJCXBlcmlvZF9zaXplOworCQkJbnNhbXBsZV9saW1pdCA9IERBQzMzX0JVRkZFUl9TSVpFX1NBTVBMRVMgLQorCQkJCQlkYWMzMy0+YWxhcm1fdGhyZXNob2xkOworCQkJaWYgKGRhYzMzLT5uc2FtcGxlX21heCA+IG5zYW1wbGVfbGltaXQpCisJCQkJZGFjMzMtPm5zYW1wbGVfbWF4ID0gbnNhbXBsZV9saW1pdDsKKworCQkJLyogQ29ycmVjdCB0aGUgblNhbXBsZSBpZiBpdCBpcyBvdXRzaWRlIG9mIHRoZSByYW5nZXMgKi8KKwkJCWlmIChkYWMzMy0+bnNhbXBsZSA8IGRhYzMzLT5uc2FtcGxlX21pbikKKwkJCQlkYWMzMy0+bnNhbXBsZSA9IGRhYzMzLT5uc2FtcGxlX21pbjsKKwkJCWlmIChkYWMzMy0+bnNhbXBsZSA+IGRhYzMzLT5uc2FtcGxlX21heCkKKwkJCQlkYWMzMy0+bnNhbXBsZSA9IGRhYzMzLT5uc2FtcGxlX21heDsKKwkJfQorCiAJCWRhYzMzLT5tb2RlMV91c19idXJzdCA9IFNBTVBMRVNfVE9fVVMoZGFjMzMtPmJ1cnN0X3JhdGUsCiAJCQkJCQkgICAgICBkYWMzMy0+bnNhbXBsZSk7CiAJCWRhYzMzLT50X3N0YW1wMSA9IDA7CiAJCWRhYzMzLT50X3N0YW1wMiA9IDA7CiAJCWJyZWFrOwogCWNhc2UgREFDMzNfRklGT19NT0RFNzoKKwkJaWYgKGRhYzMzLT5hdXRvX2ZpZm9fY29uZmlnKSB7CisJCQlkYWMzMy0+dXRociA9IFVUSFJfRlJPTV9QRVJJT0RfU0laRSgKKwkJCQkJcGVyaW9kX3NpemUsCisJCQkJCXJhdGUsCisJCQkJCWRhYzMzLT5idXJzdF9yYXRlKSArIDk7CisJCQlpZiAoZGFjMzMtPnV0aHIgPiBNT0RFN19VVEhSKQorCQkJCWRhYzMzLT51dGhyID0gTU9ERTdfVVRIUjsKKwkJCWlmIChkYWMzMy0+dXRociA8IChNT0RFN19MVEhSICsgMTApKQorCQkJCWRhYzMzLT51dGhyID0gKE1PREU3X0xUSFIgKyAxMCk7CisJCX0KIAkJZGFjMzMtPm1vZGU3X3VzX3RvX2x0aHIgPQotCQkJCQlTQU1QTEVTX1RPX1VTKHN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSwKLQkJCQkJCU1PREU3X1VUSFIgLSBNT0RFN19MVEhSICsgMSk7CisJCQkJU0FNUExFU19UT19VUyhzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGUsCisJCQkJCWRhYzMzLT51dGhyIC0gTU9ERTdfTFRIUiArIDEpOwogCQlkYWMzMy0+dF9zdGFtcDEgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTEwNCw3ICsxMTY3LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOwogCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB0MCwgdDEsIHRfbm93OwotCXVuc2lnbmVkIGludCB0aW1lX2RlbHRhOworCXVuc2lnbmVkIGludCB0aW1lX2RlbHRhLCB1dGhyOwogCWludCBzYW1wbGVzX291dCwgc2FtcGxlc19pbiwgc2FtcGxlczsKIAlzbmRfcGNtX3NmcmFtZXNfdCBkZWxheSA9IDA7CiAKQEAgLTExODIsNiArMTI0NSw3IEBACiAJY2FzZSBEQUMzM19GSUZPX01PREU3OgogCQlzcGluX2xvY2soJmRhYzMzLT5sb2NrKTsKIAkJdDAgPSBkYWMzMy0+dF9zdGFtcDE7CisJCXV0aHIgPSBkYWMzMy0+dXRocjsKIAkJc3Bpbl91bmxvY2soJmRhYzMzLT5sb2NrKTsKIAkJdF9ub3cgPSBrdGltZV90b191cyhrdGltZV9nZXQoKSk7CiAKQEAgLTExOTQsNyArMTI1OCw3IEBACiAJCQkgKiBFaXRoZXIgdGhlIHRpbWVzdGFtcHMgYXJlIG1lc3NlZCBvciBlcXVhbC4gUmVwb3J0CiAJCQkgKiBtYXhpbXVtIGRlbGF5CiAJCQkgKi8KLQkJCWRlbGF5ID0gTU9ERTdfVVRIUjsKKwkJCWRlbGF5ID0gdXRocjsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTEyMDgsOCArMTI3Miw4IEBACiAJCQkJCXN1YnN0cmVhbS0+cnVudGltZS0+cmF0ZSwKIAkJCQkJdGltZV9kZWx0YSk7CiAKLQkJCWlmIChsaWtlbHkoTU9ERTdfVVRIUiA+IHNhbXBsZXNfb3V0KSkKLQkJCQlkZWxheSA9IE1PREU3X1VUSFIgLSBzYW1wbGVzX291dDsKKwkJCWlmIChsaWtlbHkodXRociA+IHNhbXBsZXNfb3V0KSkKKwkJCQlkZWxheSA9IHV0aHIgLSBzYW1wbGVzX291dDsKIAkJCWVsc2UKIAkJCQlkZWxheSA9IDA7CiAJCX0gZWxzZSB7CkBAIC0xMjI3LDggKzEyOTEsOCBAQAogCQkJCQl0aW1lX2RlbHRhKTsKIAkJCWRlbGF5ID0gTU9ERTdfTFRIUiArIHNhbXBsZXNfaW4gLSBzYW1wbGVzX291dDsKIAotCQkJaWYgKHVubGlrZWx5KGRlbGF5ID4gTU9ERTdfVVRIUikpCi0JCQkJZGVsYXkgPSBNT0RFN19VVEhSOworCQkJaWYgKHVubGlrZWx5KGRlbGF5ID4gdXRocikpCisJCQkJZGVsYXkgPSB1dGhyOwogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xMzQ3LDEwICsxNDExLDE1IEBACiAKIAlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgZGFjMzNfc25kX2NvbnRyb2xzLAogCQkJICAgICBBUlJBWV9TSVpFKGRhYzMzX3NuZF9jb250cm9scykpOwotCS8qIE9ubHkgYWRkIHRoZSBuU2FtcGxlIGNvbnRyb2xzLCBpZiB3ZSBoYXZlIHZhbGlkIElSUSBudW1iZXIgKi8KLQlpZiAoZGFjMzMtPmlycSA+PSAwKQotCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgZGFjMzNfbnNhbXBsZV9zbmRfY29udHJvbHMsCi0JCQkJICAgICBBUlJBWV9TSVpFKGRhYzMzX25zYW1wbGVfc25kX2NvbnRyb2xzKSk7CisJLyogT25seSBhZGQgdGhlIEZJRk8gY29udHJvbHMsIGlmIHdlIGhhdmUgdmFsaWQgSVJRIG51bWJlciAqLworCWlmIChkYWMzMy0+aXJxID49IDApIHsKKwkJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIGRhYzMzX21vZGVfc25kX2NvbnRyb2xzLAorCQkJCSAgICAgQVJSQVlfU0laRShkYWMzM19tb2RlX3NuZF9jb250cm9scykpOworCQkvKiBGSUZPIHVzYWdlIGNvbnRyb2xzIG9ubHksIGlmIGF1dG9pbyBjb25maWcgaXMgbm90IHNlbGVjdGVkICovCisJCWlmICghZGFjMzMtPmF1dG9fZmlmb19jb25maWcpCisJCQlzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgZGFjMzNfZmlmb19zbmRfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUoZGFjMzNfZmlmb19zbmRfY29udHJvbHMpKTsKKwl9CiAKIAlkYWMzM19hZGRfd2lkZ2V0cyhjb2RlYyk7CiAKQEAgLTE0ODEsOSArMTU1MCwxNCBAQAogCS8qIFByZSBjYWxjdWxhdGUgdGhlIGJ1cnN0IHJhdGUgKi8KIAlkYWMzMy0+YnVyc3RfcmF0ZSA9IEJVUlNUX0JBU0VGUkVRX0haIC8gZGFjMzMtPmJ1cnN0X2JjbGtkaXYgLyAzMjsKIAlkYWMzMy0+a2VlcF9iY2xrID0gcGRhdGEtPmtlZXBfYmNsazsKKwlkYWMzMy0+YXV0b19maWZvX2NvbmZpZyA9IHBkYXRhLT5hdXRvX2ZpZm9fY29uZmlnOworCWRhYzMzLT5tb2RlMV9sYXRlbmN5ID0gcGRhdGEtPm1vZGUxX2xhdGVuY3k7CisJaWYgKCFkYWMzMy0+bW9kZTFfbGF0ZW5jeSkKKwkJZGFjMzMtPm1vZGUxX2xhdGVuY3kgPSAxMDAwMDsgLyogMTBtcyAqLwogCWRhYzMzLT5pcnEgPSBjbGllbnQtPmlycTsKIAlkYWMzMy0+bnNhbXBsZSA9IE5TQU1QTEVfTUFYOwogCWRhYzMzLT5uc2FtcGxlX21heCA9IE5TQU1QTEVfTUFYOworCWRhYzMzLT51dGhyID0gTU9ERTdfVVRIUjsKIAkvKiBEaXNhYmxlIEZJRk8gdXNlIGJ5IGRlZmF1bHQgKi8KIAlkYWMzMy0+Zmlmb19tb2RlID0gREFDMzNfRklGT19CWVBBU1M7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggYjRmY2RiMC4uN2I2MThiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTQzLDM3ICs0MywzNyBAQAogICovCiBzdGF0aWMgY29uc3QgdTggdHdsNDAzMF9yZWdbVFdMNDAzMF9DQUNIRVJFR05VTV0gPSB7CiAJMHgwMCwgLyogdGhpcyByZWdpc3RlciBub3QgdXNlZAkJKi8KLQkweDkxLCAvKiBSRUdfQ09ERUNfTU9ERQkJKDB4MSkJKi8KLQkweGMzLCAvKiBSRUdfT1BUSU9OCQkoMHgyKQkqLworCTB4MDAsIC8qIFJFR19DT0RFQ19NT0RFCQkoMHgxKQkqLworCTB4MDAsIC8qIFJFR19PUFRJT04JCSgweDIpCSovCiAJMHgwMCwgLyogUkVHX1VOS05PV04JCSgweDMpCSovCiAJMHgwMCwgLyogUkVHX01JQ0JJQVNfQ1RMCSgweDQpCSovCi0JMHgyMCwgLyogUkVHX0FOQU1JQ0wJCSgweDUpCSovCisJMHgwMCwgLyogUkVHX0FOQU1JQ0wJCSgweDUpCSovCiAJMHgwMCwgLyogUkVHX0FOQU1JQ1IJCSgweDYpCSovCiAJMHgwMCwgLyogUkVHX0FWQURDX0NUTAkJKDB4NykJKi8KIAkweDAwLCAvKiBSRUdfQURDTUlDU0VMCQkoMHg4KQkqLwogCTB4MDAsIC8qIFJFR19ESUdNSVhJTkcJCSgweDkpCSovCi0JMHgwYywgLyogUkVHX0FUWEwxUEdBCQkoMHhBKQkqLwotCTB4MGMsIC8qIFJFR19BVFhSMVBHQQkJKDB4QikJKi8KLQkweDAwLCAvKiBSRUdfQVZUWEwyUEdBCQkoMHhDKQkqLwotCTB4MDAsIC8qIFJFR19BVlRYUjJQR0EJCSgweEQpCSovCisJMHgwZiwgLyogUkVHX0FUWEwxUEdBCQkoMHhBKQkqLworCTB4MGYsIC8qIFJFR19BVFhSMVBHQQkJKDB4QikJKi8KKwkweDBmLCAvKiBSRUdfQVZUWEwyUEdBCQkoMHhDKQkqLworCTB4MGYsIC8qIFJFR19BVlRYUjJQR0EJCSgweEQpCSovCiAJMHgwMCwgLyogUkVHX0FVRElPX0lGCQkoMHhFKQkqLwogCTB4MDAsIC8qIFJFR19WT0lDRV9JRgkJKDB4RikJKi8KLQkweDAwLCAvKiBSRUdfQVJYUjFQR0EJCSgweDEwKQkqLwotCTB4MDAsIC8qIFJFR19BUlhMMVBHQQkJKDB4MTEpCSovCi0JMHg2YywgLyogUkVHX0FSWFIyUEdBCQkoMHgxMikJKi8KLQkweDZjLCAvKiBSRUdfQVJYTDJQR0EJCSgweDEzKQkqLwotCTB4MDAsIC8qIFJFR19WUlhQR0EJCSgweDE0KQkqLworCTB4M2YsIC8qIFJFR19BUlhSMVBHQQkJKDB4MTApCSovCisJMHgzZiwgLyogUkVHX0FSWEwxUEdBCQkoMHgxMSkJKi8KKwkweDNmLCAvKiBSRUdfQVJYUjJQR0EJCSgweDEyKQkqLworCTB4M2YsIC8qIFJFR19BUlhMMlBHQQkJKDB4MTMpCSovCisJMHgyNSwgLyogUkVHX1ZSWFBHQQkJKDB4MTQpCSovCiAJMHgwMCwgLyogUkVHX1ZTVFBHQQkJKDB4MTUpCSovCiAJMHgwMCwgLyogUkVHX1ZSWDJBUlhQR0EJCSgweDE2KQkqLwogCTB4MDAsIC8qIFJFR19BVkRBQ19DVEwJCSgweDE3KQkqLwogCTB4MDAsIC8qIFJFR19BUlgyVlRYUEdBCQkoMHgxOCkJKi8KLQkweDAwLCAvKiBSRUdfQVJYTDFfQVBHQV9DVEwJKDB4MTkpCSovCi0JMHgwMCwgLyogUkVHX0FSWFIxX0FQR0FfQ1RMCSgweDFBKQkqLwotCTB4NGEsIC8qIFJFR19BUlhMMl9BUEdBX0NUTAkoMHgxQikJKi8KLQkweDRhLCAvKiBSRUdfQVJYUjJfQVBHQV9DVEwJKDB4MUMpCSovCisJMHgzMiwgLyogUkVHX0FSWEwxX0FQR0FfQ1RMCSgweDE5KQkqLworCTB4MzIsIC8qIFJFR19BUlhSMV9BUEdBX0NUTAkoMHgxQSkJKi8KKwkweDMyLCAvKiBSRUdfQVJYTDJfQVBHQV9DVEwJKDB4MUIpCSovCisJMHgzMiwgLyogUkVHX0FSWFIyX0FQR0FfQ1RMCSgweDFDKQkqLwogCTB4MDAsIC8qIFJFR19BVFgyQVJYUEdBCQkoMHgxRCkJKi8KIAkweDAwLCAvKiBSRUdfQlRfSUYJCSgweDFFKQkqLwotCTB4MDAsIC8qIFJFR19CVFBHQQkJKDB4MUYpCSovCisJMHg1NSwgLyogUkVHX0JUUEdBCQkoMHgxRikJKi8KIAkweDAwLCAvKiBSRUdfQlRTVFBHQQkJKDB4MjApCSovCiAJMHgwMCwgLyogUkVHX0VBUl9DVEwJCSgweDIxKQkqLwogCTB4MDAsIC8qIFJFR19IU19TRUwJCSgweDIyKQkqLwpAQCAtODUsMzIgKzg1LDMyIEBACiAJMHgwMCwgLyogUkVHX1BSRUNLUl9DVEwJCSgweDI4KQkqLwogCTB4MDAsIC8qIFJFR19IRkxfQ1RMCQkoMHgyOSkJKi8KIAkweDAwLCAvKiBSRUdfSEZSX0NUTAkJKDB4MkEpCSovCi0JMHgwMCwgLyogUkVHX0FMQ19DVEwJCSgweDJCKQkqLworCTB4MDUsIC8qIFJFR19BTENfQ1RMCQkoMHgyQikJKi8KIAkweDAwLCAvKiBSRUdfQUxDX1NFVDEJCSgweDJDKQkqLwogCTB4MDAsIC8qIFJFR19BTENfU0VUMgkJKDB4MkQpCSovCiAJMHgwMCwgLyogUkVHX0JPT1NUX0NUTAkJKDB4MkUpCSovCiAJMHgwMCwgLyogUkVHX1NPRlRWT0xfQ1RMCSgweDJGKQkqLwotCTB4MDAsIC8qIFJFR19EVE1GX0ZSRVFTRUwJKDB4MzApCSovCisJMHgxMywgLyogUkVHX0RUTUZfRlJFUVNFTAkoMHgzMCkJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9UT05FWFQxSAkoMHgzMSkJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9UT05FWFQxTAkoMHgzMikJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9UT05FWFQySAkoMHgzMykJKi8KIAkweDAwLCAvKiBSRUdfRFRNRl9UT05FWFQyTAkoMHgzNCkJKi8KLQkweDAwLCAvKiBSRUdfRFRNRl9UT05PRkYJKDB4MzUpCSovCi0JMHgwMCwgLyogUkVHX0RUTUZfV0FOT05PRkYJKDB4MzYpCSovCisJMHg3OSwgLyogUkVHX0RUTUZfVE9OT0ZGCSgweDM1KQkqLworCTB4MTEsIC8qIFJFR19EVE1GX1dBTk9OT0ZGCSgweDM2KQkqLwogCTB4MDAsIC8qIFJFR19JMlNfUlhfU0NSQU1CTEVfSAkoMHgzNykJKi8KIAkweDAwLCAvKiBSRUdfSTJTX1JYX1NDUkFNQkxFX00JKDB4MzgpCSovCiAJMHgwMCwgLyogUkVHX0kyU19SWF9TQ1JBTUJMRV9MCSgweDM5KQkqLwogCTB4MDYsIC8qIFJFR19BUExMX0NUTAkJKDB4M0EpCSovCiAJMHgwMCwgLyogUkVHX0RUTUZfQ1RMCQkoMHgzQikJKi8KLQkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMgkoMHgzQykJKi8KLQkweDAwLCAvKiBSRUdfRFRNRl9QR0FfQ1RMMQkoMHgzRCkJKi8KKwkweDQ0LCAvKiBSRUdfRFRNRl9QR0FfQ1RMMgkoMHgzQykJKi8KKwkweDY5LCAvKiBSRUdfRFRNRl9QR0FfQ1RMMQkoMHgzRCkJKi8KIAkweDAwLCAvKiBSRUdfTUlTQ19TRVRfMQkJKDB4M0UpCSovCiAJMHgwMCwgLyogUkVHX1BDTUJUTVVYCQkoMHgzRikJKi8KIAkweDAwLCAvKiBub3QgdXNlZAkJKDB4NDApCSovCiAJMHgwMCwgLyogbm90IHVzZWQJCSgweDQxKQkqLwogCTB4MDAsIC8qIG5vdCB1c2VkCQkoMHg0MikJKi8KIAkweDAwLCAvKiBSRUdfUlhfUEFUSF9TRUwJKDB4NDMpCSovCi0JMHgwMCwgLyogUkVHX1ZETF9BUEdBX0NUTAkoMHg0NCkJKi8KKwkweDMyLCAvKiBSRUdfVkRMX0FQR0FfQ1RMCSgweDQ0KQkqLwogCTB4MDAsIC8qIFJFR19WSUJSQV9DVEwJCSgweDQ1KQkqLwogCTB4MDAsIC8qIFJFR19WSUJSQV9TRVQJCSgweDQ2KQkqLwogCTB4MDAsIC8qIFJFR19WSUJSQV9QV01fU0VUCSgweDQ3KQkqLwpAQCAtMTQzLDYgKzE0Myw5IEBACiAJdTggZWFycGllY2VfZW5hYmxlZDsKIAl1OCBwcmVkcml2ZWxfZW5hYmxlZCwgcHJlZHJpdmVyX2VuYWJsZWQ7CiAJdTggY2Fya2l0bF9lbmFibGVkLCBjYXJraXRyX2VuYWJsZWQ7CisKKwkvKiBEZWxheSBuZWVkZWQgYWZ0ZXIgZW5hYmxpbmcgdGhlIGRpZ2ltaWMgaW50ZXJmYWNlICovCisJdW5zaWduZWQgaW50IGRpZ2ltaWNfZGVsYXk7CiB9OwogCiAvKgpAQCAtMjQ0LDIxICsyNDcsMTEyIEBACiAJdWRlbGF5KDEwKTsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF9pbml0X2NoaXAoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQorc3RhdGljIGlubGluZSB2b2lkIHR3bDQwMzBfY2hlY2tfZGVmYXVsdHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXU4ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7Ci0JaW50IGk7CisJaW50IGksIGRpZmZlcmVuY2UgPSAwOworCXU4IHZhbDsKIAotCS8qIGNsZWFyIENPREVDUERaIHByaW9yIHRvIHNldHRpbmcgcmVnaXN0ZXIgZGVmYXVsdHMgKi8KLQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiQ2hlY2tpbmcgVFdMIGF1ZGlvIGRlZmF1bHQgY29uZmlndXJhdGlvblxuIik7CisJZm9yIChpID0gMTsgaSA8PSBUV0w0MDMwX1JFR19NSVNDX1NFVF8yOyBpKyspIHsKKwkJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmdmFsLCBpKTsKKwkJaWYgKHZhbCAhPSB0d2w0MDMwX3JlZ1tpXSkgeworCQkJZGlmZmVyZW5jZSsrOworCQkJZGV2X2RiZyhjb2RlYy0+ZGV2LAorCQkJCSAiUmVnIDB4JTAyeDogY2hpcDogMHglMDJ4IGRyaXZlcjogMHglMDJ4XG4iLAorCQkJCSBpLCB2YWwsIHR3bDQwMzBfcmVnW2ldKTsKKwkJfQorCX0KKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJGb3VuZCAlZCBub24gbWFjaGluZyByZWdpc3RlcnMuICVzXG4iLAorCQkgZGlmZmVyZW5jZSwgZGlmZmVyZW5jZSA/ICJOb3QgT0siIDogIk9LIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0d2w0MDMwX3Jlc2V0X3JlZ2lzdGVycyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGk7CiAKIAkvKiBzZXQgYWxsIGF1ZGlvIHNlY3Rpb24gcmVnaXN0ZXJzIHRvIHJlYXNvbmFibGUgZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSBUV0w0MDMwX1JFR19PUFRJT047IGkgPD0gVFdMNDAzMF9SRUdfTUlTQ19TRVRfMjsgaSsrKQogCQlpZiAoaSAhPSBUV0w0MDMwX1JFR19BUExMX0NUTCkKLQkJCXR3bDQwMzBfd3JpdGUoY29kZWMsIGksCWNhY2hlW2ldKTsKKwkJCXR3bDQwMzBfd3JpdGUoY29kZWMsIGksIHR3bDQwMzBfcmVnW2ldKTsKIAogfQogCitzdGF0aWMgdm9pZCB0d2w0MDMwX2luaXRfY2hpcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHR3bDQwMzBfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdTggcmVnLCBieXRlOworCWludCBpID0gMDsKKworCS8qIENoZWNrIGRlZmF1bHRzLCBpZiBpbnN0cnVjdGVkIGJlZm9yZSBhbnl0aGluZyBlbHNlICovCisJaWYgKHNldHVwICYmIHNldHVwLT5jaGVja19kZWZhdWx0cykKKwkJdHdsNDAzMF9jaGVja19kZWZhdWx0cyhjb2RlYyk7CisKKwkvKiBSZXNldCByZWdpc3RlcnMsIGlmIG5vIHNldHVwIGRhdGEgb3IgaWYgaW5zdHJ1Y3RlZCB0byBkbyBzbyAqLworCWlmICghc2V0dXAgfHwgKHNldHVwICYmIHNldHVwLT5yZXNldF9yZWdpc3RlcnMpKQorCQl0d2w0MDMwX3Jlc2V0X3JlZ2lzdGVycyhjb2RlYyk7CisKKwkvKiBSZWZyZXNoIEFQTExfQ1RMIHJlZ2lzdGVyIGZyb20gSFcgKi8KKwl0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAorCQkJICAgIFRXTDQwMzBfUkVHX0FQTExfQ1RMKTsKKwl0d2w0MDMwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQVBMTF9DVEwsIGJ5dGUpOworCisJLyogYW50aS1wb3Agd2hlbiBjaGFuZ2luZyBhbmFsb2cgZ2FpbiAqLworCXJlZyA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEpOworCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX01JU0NfU0VUXzEsCisJCXJlZyB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7CisKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19PUFRJT04sCisJCVRXTDQwMzBfQVRYTDFfRU4gfCBUV0w0MDMwX0FUWFIxX0VOIHwKKwkJVFdMNDAzMF9BUlhMMl9FTiB8IFRXTDQwMzBfQVJYUjJfRU4pOworCisJLyogUkVHX0FSWFIyX0FQR0FfQ1RMIHJlc2V0IGFjY29yZGluZyB0byB0aGUgVFJNOiAwZEIsIERBX0VOICovCisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVJYUjJfQVBHQV9DVEwsIDB4MzIpOworCisJLyogTWFjaGluZSBkZXBlbmRlbnQgc2V0dXAgKi8KKwlpZiAoIXNldHVwKQorCQlyZXR1cm47CisKKwl0d2w0MDMwLT5kaWdpbWljX2RlbGF5ID0gc2V0dXAtPmRpZ2ltaWNfZGVsYXk7CisKKwkvKiBDb25maWd1cmF0aW9uIGZvciBoZWFkc2V0IHJhbXAgZGVsYXkgZnJvbSBzZXR1cCBkYXRhICovCisJaWYgKHNldHVwLT5zeXNjbGsgIT0gdHdsNDAzMC0+c3lzY2xrKQorCQlkZXZfd2Fybihjb2RlYy0+ZGV2LAorCQkJCSJNaXNtYXRjaCBpbiBBUExMIG1jbGs6ICV1IChjb25maWd1cmVkOiAldSlcbiIsCisJCQkJc2V0dXAtPnN5c2NsaywgdHdsNDAzMC0+c3lzY2xrKTsKKworCXJlZyA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0hTX1BPUE5fU0VUKTsKKwlyZWcgJj0gflRXTDQwMzBfUkFNUF9ERUxBWTsKKwlyZWcgfD0gKHNldHVwLT5yYW1wX2RlbGF5X3ZhbHVlIDw8IDIpOworCXR3bDQwMzBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCwgcmVnKTsKKworCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KKwl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisKKwlyZWcgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMKTsKKwlyZWcgJj0gflRXTDQwMzBfT0ZGU0VUX0NOQ0xfU0VMOworCXJlZyB8PSBzZXR1cC0+b2Zmc2V0X2NuY2xfcGF0aDsKKwl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BTkFNSUNMLAorCQlyZWcgfCBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKTsKKworCS8qIHdhaXQgZm9yIG9mZnNldCBjYW5jZWxsYXRpb24gdG8gY29tcGxldGUgKi8KKwlkbyB7CisJCS8qIHRoaXMgdGFrZXMgYSBsaXR0bGUgd2hpbGUsIHNvIGRvbid0IHNsYW0gaTJjICovCisJCXVkZWxheSgyMDAwKTsKKwkJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0FVRElPX1ZPSUNFLCAmYnl0ZSwKKwkJCQkgICAgVFdMNDAzMF9SRUdfQU5BTUlDTCk7CisJfSB3aGlsZSAoKGkrKyA8IDEwMCkgJiYKKwkJICgoYnl0ZSAmIFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpID09CisJCSAgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkpOworCisJLyogTWFrZSBzdXJlIHRoYXQgdGhlIHJlZ19jYWNoZSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIEhXICovCisJdHdsNDAzMF93cml0ZV9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FOQU1JQ0wsIGJ5dGUpOworCisJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworfQorCiBzdGF0aWMgdm9pZCB0d2w0MDMwX2FwbGxfZW5hYmxlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CkBAIC0yODAsNTUgKzM3NCw2IEBACiAJCXR3bDQwMzBfd3JpdGVfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19BUExMX0NUTCwgc3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl91cChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXU4IGFuYW1pY2wsIHJlZ21pc2MxLCBieXRlOwotCWludCBpID0gMDsKLQotCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKQotCQlyZXR1cm47Ci0KLQkvKiBzZXQgQ09ERUNQRFogdG8gdHVybiBvbiBjb2RlYyAqLwotCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKLQotCS8qIGluaXRpYXRlIG9mZnNldCBjYW5jZWxsYXRpb24gKi8KLQlhbmFtaWNsID0gdHdsNDAzMF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCk7Ci0JdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwKLQkJYW5hbWljbCB8IFRXTDQwMzBfQ05DTF9PRkZTRVRfU1RBUlQpOwotCi0JLyogd2FpdCBmb3Igb2Zmc2V0IGNhbmNlbGxhdGlvbiB0byBjb21wbGV0ZSAqLwotCWRvIHsKLQkJLyogdGhpcyB0YWtlcyBhIGxpdHRsZSB3aGlsZSwgc28gZG9uJ3Qgc2xhbSBpMmMgKi8KLQkJdWRlbGF5KDIwMDApOwotCQl0d2xfaTJjX3JlYWRfdTgoVFdMNDAzMF9NT0RVTEVfQVVESU9fVk9JQ0UsICZieXRlLAotCQkJCSAgICBUV0w0MDMwX1JFR19BTkFNSUNMKTsKLQl9IHdoaWxlICgoaSsrIDwgMTAwKSAmJgotCQkgKChieXRlICYgVFdMNDAzMF9DTkNMX09GRlNFVF9TVEFSVCkgPT0KLQkJICBUV0w0MDMwX0NOQ0xfT0ZGU0VUX1NUQVJUKSk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgcmVnX2NhY2hlIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgSFcgKi8KLQl0d2w0MDMwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfQU5BTUlDTCwgYnl0ZSk7Ci0KLQkvKiBhbnRpLXBvcCB3aGVuIGNoYW5naW5nIGFuYWxvZyBnYWluICovCi0JcmVnbWlzYzEgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xKTsKLQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19NSVNDX1NFVF8xLAotCQlyZWdtaXNjMSB8IFRXTDQwMzBfU01PT1RIX0FOQVZPTF9FTik7Ci0KLQkvKiB0b2dnbGUgQ09ERUNQRFogYXMgcGVyIFRSTSAqLwotCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKLQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7Ci19Ci0KLS8qCi0gKiBVbmNvbmRpdGlvbmFsIHBvd2VyIGRvd24KLSAqLwotc3RhdGljIHZvaWQgdHdsNDAzMF9wb3dlcl9kb3duKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKLXsKLQkvKiBwb3dlciBkb3duICovCi0JdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwotfQotCiAvKiBFYXJwaWVjZSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHR3bDQwMzBfZGFwbV9lYXJwaWVjZV9jb250cm9sc1tdID0gewogCVNPQ19EQVBNX1NJTkdMRSgiVm9pY2UiLCBUV0w0MDMwX1JFR19FQVJfQ1RMLCAwLCAxLCAwKSwKQEAgLTUwMCwxMCArNTQ1LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdHdsNDAzMF9kYXBtX2FieXBhc3N2X2NvbnRyb2wgPQogCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNDAzMF9SRUdfVkRMX0FQR0FfQ1RMLCAyLCAxLCAwKTsKIAotLyogRGlnaXRhbCBieXBhc3MgZ2FpbiwgMCBtdXRlcyB0aGUgYnlwYXNzICovCisvKiBEaWdpdGFsIGJ5cGFzcyBnYWluLCBtdXRlIGluc3RlYWQgb2YgLTMwZEIgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHdsNDAzMF9kYXBtX2RieXBhc3NfdGx2W10gPSB7Ci0JVExWX0RCX1JBTkdFX0hFQUQoMiksCi0JMCwgMywgVExWX0RCX1NDQUxFX0lURU0oLTI0MDAsIDAsIDEpLAorCVRMVl9EQl9SQU5HRV9IRUFEKDMpLAorCTAsIDEsIFRMVl9EQl9TQ0FMRV9JVEVNKC0zMDAwLCA2MDAsIDEpLAorCTIsIDMsIFRMVl9EQl9TQ0FMRV9JVEVNKC0yNDAwLCAwLCAwKSwKIAk0LCA3LCBUTFZfREJfU0NBTEVfSVRFTSgtMTgwMCwgNjAwLCAwKSwKIH07CiAKQEAgLTUzMSwzNiArNTc3LDYgQEAKIAkJCVRXTDQwMzBfUkVHX1ZTVFBHQSwgMCwgMHgyOSwgMCwKIAkJCXR3bDQwMzBfZGFwbV9kYnlwYXNzdl90bHYpOwogCi1zdGF0aWMgaW50IG1pY3BhdGhfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCi0Jc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKLXsKLQlzdHJ1Y3Qgc29jX2VudW0gKmUgPSAoc3RydWN0IHNvY19lbnVtICopdy0+a2NvbnRyb2xzLT5wcml2YXRlX3ZhbHVlOwotCXVuc2lnbmVkIGNoYXIgYWRjbWljc2VsLCBtaWNiaWFzX2N0bDsKLQotCWFkY21pY3NlbCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0FEQ01JQ1NFTCk7Ci0JbWljYmlhc19jdGwgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCk7Ci0JLyogUHJlcGFyZSB0aGUgYml0cyBmb3IgdGhlIGdpdmVuIFRYIHBhdGg6Ci0JICogc2hpZnRfbCA9PSAwOiBUWDEgbWljcm9waG9uZSBwYXRoCi0JICogc2hpZnRfbCA9PSAyOiBUWDIgbWljcm9waG9uZSBwYXRoICovCi0JaWYgKGUtPnNoaWZ0X2wpIHsKLQkJLyogVFgyIG1pY3JvcGhvbmUgcGF0aCAqLwotCQlpZiAoYWRjbWljc2VsICYgVFdMNDAzMF9UWDJJTl9TRUwpCi0JCQltaWNiaWFzX2N0bCB8PSBUV0w0MDMwX01JQ0JJQVMyX0NUTDsgLyogZGlnaW1pYyAqLwotCQllbHNlCi0JCQltaWNiaWFzX2N0bCAmPSB+VFdMNDAzMF9NSUNCSUFTMl9DVEw7Ci0JfSBlbHNlIHsKLQkJLyogVFgxIG1pY3JvcGhvbmUgcGF0aCAqLwotCQlpZiAoYWRjbWljc2VsICYgVFdMNDAzMF9UWDFJTl9TRUwpCi0JCQltaWNiaWFzX2N0bCB8PSBUV0w0MDMwX01JQ0JJQVMxX0NUTDsgLyogZGlnaW1pYyAqLwotCQllbHNlCi0JCQltaWNiaWFzX2N0bCAmPSB+VFdMNDAzMF9NSUNCSUFTMV9DVEw7Ci0JfQotCi0JdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIG1pY2JpYXNfY3RsKTsKLQotCXJldHVybiAwOwotfQotCiAvKgogICogT3V0cHV0IFBHQSBidWlsZGVyOgogICogSGFuZGxlIHRoZSBtdXRpbmcgYW5kIHVubXV0aW5nIG9mIHRoZSBnaXZlbiBvdXRwdXQgKHR1cm5pbmcgb2ZmIHRoZQpAQCAtODE0LDYgKzgzMCwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRpZ2ltaWNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEody0+Y29kZWMpOworCisJaWYgKHR3bDQwMzAtPmRpZ2ltaWNfZGVsYXkpCisJCW1kZWxheSh0d2w0MDMwLT5kaWdpbWljX2RlbGF5KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNvbWUgb2YgdGhlIGdhaW4gY29udHJvbHMgaW4gVFdMIChtb3N0bHkgdGhvc2Ugd2hpY2ggYXJlIGFzc29jaWF0ZWQgd2l0aAogICogdGhlIG91dHB1dHMpIGFyZSBpbXBsZW1lbnRlZCBpbiBhbiBpbnRlcmVzdGluZyB3YXk6CkBAIC0xMzc0LDE0ICsxNDAwLDEwIEBACiAJLyogQW5hbG9nL0RpZ2l0YWwgbWljIHBhdGggc2VsZWN0aW9uLgogCSAgIFRYMSBMZWZ0L1JpZ2h0OiBlaXRoZXIgYW5hbG9nIExlZnQvUmlnaHQgb3IgRGlnaW1pYzAKIAkgICBUWDIgTGVmdC9SaWdodDogZWl0aGVyIGFuYWxvZyBMZWZ0L1JpZ2h0IG9yIERpZ2ltaWMxICovCi0JU05EX1NPQ19EQVBNX01VWF9FKCJUWDEgQ2FwdHVyZSBSb3V0ZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKLQkJJnR3bDQwMzBfZGFwbV9taWNwYXRodHgxX2NvbnRyb2wsIG1pY3BhdGhfZXZlbnQsCi0JCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUR8Ci0JCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCi0JU05EX1NPQ19EQVBNX01VWF9FKCJUWDIgQ2FwdHVyZSBSb3V0ZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKLQkJJnR3bDQwMzBfZGFwbV9taWNwYXRodHgyX2NvbnRyb2wsIG1pY3BhdGhfZXZlbnQsCi0JCVNORF9TT0NfREFQTV9QT1NUX1BNVXxTTkRfU09DX0RBUE1fUE9TVF9QTUR8Ci0JCVNORF9TT0NfREFQTV9QT1NUX1JFRyksCisJU05EX1NPQ19EQVBNX01VWCgiVFgxIENhcHR1cmUgUm91dGUiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCSZ0d2w0MDMwX2RhcG1fbWljcGF0aHR4MV9jb250cm9sKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJUWDIgQ2FwdHVyZSBSb3V0ZSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJJnR3bDQwMzBfZGFwbV9taWNwYXRodHgyX2NvbnRyb2wpLAogCiAJLyogQW5hbG9nIGlucHV0IG1peGVycyBmb3IgdGhlIGNhcHR1cmUgYW1wbGlmaWVycyAqLwogCVNORF9TT0NfREFQTV9NSVhFUigiQW5hbG9nIExlZnQiLApAQCAtMTM5OCwxMCArMTQyMCwxNyBAQAogCVNORF9TT0NfREFQTV9QR0EoIkFEQyBQaHlzaWNhbCBSaWdodCIsCiAJCVRXTDQwMzBfUkVHX0FWQURDX0NUTCwgMSwgMCwgTlVMTCwgMCksCiAKLQlTTkRfU09DX0RBUE1fUEdBKCJEaWdpbWljMCBFbmFibGUiLAotCQlUV0w0MDMwX1JFR19BRENNSUNTRUwsIDEsIDAsIE5VTEwsIDApLAotCVNORF9TT0NfREFQTV9QR0EoIkRpZ2ltaWMxIEVuYWJsZSIsCi0JCVRXTDQwMzBfUkVHX0FEQ01JQ1NFTCwgMywgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJEaWdpbWljMCBFbmFibGUiLAorCQlUV0w0MDMwX1JFR19BRENNSUNTRUwsIDEsIDAsIE5VTEwsIDAsCisJCWRpZ2ltaWNfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJEaWdpbWljMSBFbmFibGUiLAorCQlUV0w0MDMwX1JFR19BRENNSUNTRUwsIDMsIDAsIE5VTEwsIDAsCisJCWRpZ2ltaWNfZXZlbnQsIFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJtaWNiaWFzMSBzZWxlY3QiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgNSwgMCwKKwkJCSAgICBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJtaWNiaWFzMiBzZWxlY3QiLCBUV0w0MDMwX1JFR19NSUNCSUFTX0NUTCwgNiwgMCwKKwkJCSAgICBOVUxMLCAwKSwKIAogCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyAxIiwgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIDAsIDApLAogCVNORF9TT0NfREFQTV9NSUNCSUFTKCJNaWMgQmlhcyAyIiwgVFdMNDAzMF9SRUdfTUlDQklBU19DVEwsIDEsIDApLApAQCAtMTQxOSw4ICsxNDQ4LDExIEBACiAJLyogU3VwcGx5IGZvciB0aGUgZGlnaXRhbCBwYXJ0IChBUExMKSAqLwogCXsiRGlnaXRhbCBWb2ljZSBQbGF5YmFjayBNaXhlciIsIE5VTEwsICJBUExMIEVuYWJsZSJ9LAogCi0JeyJEaWdpdGFsIFIxIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKLQl7IkRpZ2l0YWwgTDEgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiREFDIExlZnQxIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRBQyBSaWdodDEiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCXsiREFDIExlZnQyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKKwl7IkRBQyBSaWdodDEiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAorCiAJeyJEaWdpdGFsIFIyIFBsYXliYWNrIE1peGVyIiwgTlVMTCwgIkFJRiBFbmFibGUifSwKIAl7IkRpZ2l0YWwgTDIgUGxheWJhY2sgTWl4ZXIiLCBOVUxMLCAiQUlGIEVuYWJsZSJ9LAogCkBAIC0xNDkxLDEwICsxNTIzLDEwIEBACiAKIAkvKiBvdXRwdXRzICovCiAJLyogTXVzdCBiZSBhbHdheXMgY29ubmVjdGVkIChmb3IgQUlGIGFuZCBBUExMKSAqLwotCXsiVmlydHVhbCBIaUZpIE9VVCIsIE5VTEwsICJEaWdpdGFsIEwxIFBsYXliYWNrIE1peGVyIn0sCi0JeyJWaXJ0dWFsIEhpRmkgT1VUIiwgTlVMTCwgIkRpZ2l0YWwgUjEgUGxheWJhY2sgTWl4ZXIifSwKLQl7IlZpcnR1YWwgSGlGaSBPVVQiLCBOVUxMLCAiRGlnaXRhbCBMMiBQbGF5YmFjayBNaXhlciJ9LAotCXsiVmlydHVhbCBIaUZpIE9VVCIsIE5VTEwsICJEaWdpdGFsIFIyIFBsYXliYWNrIE1peGVyIn0sCisJeyJWaXJ0dWFsIEhpRmkgT1VUIiwgTlVMTCwgIkRBQyBMZWZ0MSJ9LAorCXsiVmlydHVhbCBIaUZpIE9VVCIsIE5VTEwsICJEQUMgUmlnaHQxIn0sCisJeyJWaXJ0dWFsIEhpRmkgT1VUIiwgTlVMTCwgIkRBQyBMZWZ0MiJ9LAorCXsiVmlydHVhbCBIaUZpIE9VVCIsIE5VTEwsICJEQUMgUmlnaHQyIn0sCiAJLyogTXVzdCBiZSBhbHdheXMgY29ubmVjdGVkIChmb3IgQVBMTCkgKi8KIAl7IlZpcnR1YWwgVm9pY2UgT1VUIiwgTlVMTCwgIkRpZ2l0YWwgVm9pY2UgUGxheWJhY2sgTWl4ZXIifSwKIAkvKiBQaHlzaWNhbCBvdXRwdXRzICovCkBAIC0xNTMxLDYgKzE1NjMsOSBAQAogCXsiRGlnaW1pYzAgRW5hYmxlIiwgTlVMTCwgIkRJR0lNSUMwIn0sCiAJeyJEaWdpbWljMSBFbmFibGUiLCBOVUxMLCAiRElHSU1JQzEifSwKIAorCXsiRElHSU1JQzAiLCBOVUxMLCAibWljYmlhczEgc2VsZWN0In0sCisJeyJESUdJTUlDMSIsIE5VTEwsICJtaWNiaWFzMiBzZWxlY3QifSwKKwogCS8qIFRYMSBMZWZ0IGNhcHR1cmUgcGF0aCAqLwogCXsiVFgxIENhcHR1cmUgUm91dGUiLCAiQW5hbG9nIiwgIkFEQyBQaHlzaWNhbCBMZWZ0In0sCiAJeyJUWDEgQ2FwdHVyZSBSb3V0ZSIsICJEaWdpbWljMCIsICJEaWdpbWljMCBFbmFibGUifSwKQEAgLTE2MDUsMTAgKzE2NDAsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKIAkJaWYgKGNvZGVjLT5iaWFzX2xldmVsID09IFNORF9TT0NfQklBU19PRkYpCi0JCQl0d2w0MDMwX3Bvd2VyX3VwKGNvZGVjKTsKKwkJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgotCQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOworCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCX0KIAljb2RlYy0+Ymlhc19sZXZlbCA9IGxldmVsOwpAQCAtMTc5NCwxMyArMTgyOSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChtb2RlICE9IG9sZF9tb2RlKSB7Ci0JCS8qIGNoYW5nZSByYXRlIGFuZCBzZXQgQ09ERUNQRFogKi8KLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwotCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLCBtb2RlKTsKLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOwotCX0KLQogCS8qIHNhbXBsZSBzaXplICovCiAJb2xkX2Zvcm1hdCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGKTsKIAlmb3JtYXQgPSBvbGRfZm9ybWF0OwpAQCAtMTgxOCwxNiArMTg0NiwyMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKLQotCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwotCi0JCS8qIGNoYW5nZSBmb3JtYXQgKi8KLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7Ci0KLQkJLyogc2V0IENPREVDUERaIGFmdGVyd2FyZHMgKi8KLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworCWlmIChmb3JtYXQgIT0gb2xkX2Zvcm1hdCB8fCBtb2RlICE9IG9sZF9tb2RlKSB7CisJCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGNvZGVjIGlzIHBvd2VyZWQsIHRoYW4gd2UgbmVlZCB0byB0b2dnbGUgdGhlCisJCQkgKiBjb2RlYyBwb3dlci4KKwkJCSAqLworCQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7CisJCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwgZm9ybWF0KTsKKwkJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAxKTsKKwkJfSBlbHNlIHsKKwkJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsIG1vZGUpOworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7CisJCX0KIAl9CiAKIAkvKiBTdG9yZSB0aGUgaW1wb3J0YW50IHBhcmFtZXRlcnMgZm9yIHRoZSBEQUkgY29uZmlndXJhdGlvbiBhbmQgc2V0CkBAIC0xODc3LDYgKzE5MDksNyBAQAogCQkJICAgICB1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGNvZGVjX2RhaS0+Y29kZWM7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXU4IG9sZF9mb3JtYXQsIGZvcm1hdDsKIAogCS8qIGdldCBmb3JtYXQgKi8KQEAgLTE5MTEsMTUgKzE5NDQsMTcgQEAKIAl9CiAKIAlpZiAoZm9ybWF0ICE9IG9sZF9mb3JtYXQpIHsKLQotCQkvKiBjbGVhciBDT0RFQ1BEWiBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0IChjb2RlYyByZXF1aXJlbWVudCkgKi8KLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOwotCi0JCS8qIGNoYW5nZSBmb3JtYXQgKi8KLQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7Ci0KLQkJLyogc2V0IENPREVDUERaIGFmdGVyd2FyZHMgKi8KLQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworCQlpZiAodHdsNDAzMC0+Y29kZWNfcG93ZXJlZCkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBjb2RlYyBpcyBwb3dlcmVkLCB0aGFuIHdlIG5lZWQgdG8gdG9nZ2xlIHRoZQorCQkJICogY29kZWMgcG93ZXIuCisJCQkgKi8KKwkJCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKKwkJCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLCBmb3JtYXQpOworCQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDEpOworCQl9IGVsc2UgeworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsIGZvcm1hdCk7CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIwMTEsNiArMjA0Niw3IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJdTggb2xkX21vZGUsIG1vZGU7CiAKIAkvKiBFbmFibGUgdm9pY2UgZGlnaXRhbCBmaWx0ZXJzICovCkBAIC0yMDM1LDEwICsyMDcxLDE3IEBACiAJfQogCiAJaWYgKG1vZGUgIT0gb2xkX21vZGUpIHsKLQkJLyogY2hhbmdlIHJhdGUgYW5kIHNldCBDT0RFQ1BEWiAqLwotCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7Ci0JCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX0NPREVDX01PREUsIG1vZGUpOwotCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisJCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGNvZGVjIGlzIHBvd2VyZWQsIHRoYW4gd2UgbmVlZCB0byB0b2dnbGUgdGhlCisJCQkgKiBjb2RlYyBwb3dlci4KKwkJCSAqLworCQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQ09ERUNfTU9ERSwgbW9kZSk7CisJCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisJCX0gZWxzZSB7CisJCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19DT0RFQ19NT0RFLCBtb2RlKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjA2OCw2ICsyMTExLDcgQEAKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl1OCBvbGRfZm9ybWF0LCBmb3JtYXQ7CiAKIAkvKiBnZXQgZm9ybWF0ICovCkBAIC0yMDk5LDEwICsyMTQzLDE3IEBACiAJfQogCiAJaWYgKGZvcm1hdCAhPSBvbGRfZm9ybWF0KSB7Ci0JCS8qIGNoYW5nZSBmb3JtYXQgYW5kIHNldCBDT0RFQ1BEWiAqLwotCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMCk7Ci0JCXR3bDQwMzBfd3JpdGUoY29kZWMsIFRXTDQwMzBfUkVHX1ZPSUNFX0lGLCBmb3JtYXQpOwotCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisJCWlmICh0d2w0MDMwLT5jb2RlY19wb3dlcmVkKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGNvZGVjIGlzIHBvd2VyZWQsIHRoYW4gd2UgbmVlZCB0byB0b2dnbGUgdGhlCisJCQkgKiBjb2RlYyBwb3dlci4KKwkJCSAqLworCQkJdHdsNDAzMF9jb2RlY19lbmFibGUoY29kZWMsIDApOworCQkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfVk9JQ0VfSUYsIGZvcm1hdCk7CisJCQl0d2w0MDMwX2NvZGVjX2VuYWJsZShjb2RlYywgMSk7CisJCX0gZWxzZSB7CisJCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19WT0lDRV9JRiwgZm9ybWF0KTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjIwMiwzMSArMjI1MywxNSBAQAogc3RhdGljIGludCB0d2w0MDMwX3NvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHR3bDQwMzBfc2V0dXBfZGF0YSAqc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzA7CiAJaW50IHJldDsKIAogCUJVR19PTighdHdsNDAzMF9jb2RlYyk7CiAKIAljb2RlYyA9IHR3bDQwMzBfY29kZWM7Ci0JdHdsNDAzMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSBjb2RlYzsKIAotCS8qIENvbmZpZ3VyYXRpb24gZm9yIGhlYWRzZXQgcmFtcCBkZWxheSBmcm9tIHNldHVwIGRhdGEgKi8KLQlpZiAoc2V0dXApIHsKLQkJdW5zaWduZWQgY2hhciBoc19wb3A7Ci0KLQkJaWYgKHNldHVwLT5zeXNjbGsgIT0gdHdsNDAzMC0+c3lzY2xrKQotCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKLQkJCQkgIk1pc21hdGNoIGluIEFQTEwgbWNsazogJXUgKGNvbmZpZ3VyZWQ6ICV1KVxuIiwKLQkJCQkgc2V0dXAtPnN5c2NsaywgdHdsNDAzMC0+c3lzY2xrKTsKLQotCQloc19wb3AgPSB0d2w0MDMwX3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBUV0w0MDMwX1JFR19IU19QT1BOX1NFVCk7Ci0JCWhzX3BvcCAmPSB+VFdMNDAzMF9SQU1QX0RFTEFZOwotCQloc19wb3AgfD0gKHNldHVwLT5yYW1wX2RlbGF5X3ZhbHVlIDw8IDIpOwotCQl0d2w0MDMwX3dyaXRlX3JlZ19jYWNoZShjb2RlYywgVFdMNDAzMF9SRUdfSFNfUE9QTl9TRVQsIGhzX3BvcCk7Ci0JfQorCXR3bDQwMzBfaW5pdF9jaGlwKHBkZXYpOwogCiAJLyogcmVnaXN0ZXIgcGNtcyAqLwogCXJldCA9IHNuZF9zb2NfbmV3X3BjbXMoc29jZGV2LCBTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSk7CkBAIC0yMjQ3LDYgKzIyODIsOCBAQAogCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKIAorCS8qIFJlc2V0IHJlZ2lzdGVycyB0byB0aGVpciBjaGlwIGRlZmF1bHQgYmVmb3JlIGxlYXZpbmcgKi8KKwl0d2w0MDMwX3Jlc2V0X3JlZ2lzdGVycyhjb2RlYyk7CiAJdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX09GRik7CiAJc25kX3NvY19mcmVlX3BjbXMoc29jZGV2KTsKIAlzbmRfc29jX2RhcG1fZnJlZShzb2NkZXYpOwpAQCAtMjI4Nyw2ICsyMzI0LDcgQEAKIAljb2RlYy0+cmVhZCA9IHR3bDQwMzBfcmVhZF9yZWdfY2FjaGU7CiAJY29kZWMtPndyaXRlID0gdHdsNDAzMF93cml0ZTsKIAljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB0d2w0MDMwX3NldF9iaWFzX2xldmVsOworCWNvZGVjLT5pZGxlX2JpYXNfb2ZmID0gMTsKIAljb2RlYy0+ZGFpID0gdHdsNDAzMF9kYWk7CiAJY29kZWMtPm51bV9kYWkgPSBBUlJBWV9TSVpFKHR3bDQwMzBfZGFpKTsKIAljb2RlYy0+cmVnX2NhY2hlX3NpemUgPSBzaXplb2YodHdsNDAzMF9yZWcpOwpAQCAtMjMwMiw5ICsyMzQwLDcgQEAKIAogCS8qIFNldCB0aGUgZGVmYXVsdHMsIGFuZCBwb3dlciB1cCB0aGUgY29kZWMgKi8KIAl0d2w0MDMwLT5zeXNjbGsgPSB0d2w0MDMwX2NvZGVjX2dldF9tY2xrKCkgLyAxMDAwOwotCXR3bDQwMzBfaW5pdF9jaGlwKGNvZGVjKTsKIAljb2RlYy0+Ymlhc19sZXZlbCA9IFNORF9TT0NfQklBU19PRkY7Ci0JdHdsNDAzMF9zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0yMzIyLDcgKzIzNTgsNyBAQAogCXJldHVybiAwOwogCiBlcnJvcl9jb2RlYzoKLQl0d2w0MDMwX3Bvd2VyX2Rvd24oY29kZWMpOworCXR3bDQwMzBfY29kZWNfZW5hYmxlKGNvZGVjLCAwKTsKIAlrZnJlZShjb2RlYy0+cmVnX2NhY2hlKTsKIGVycm9yX2NhY2hlOgogCWtmcmVlKHR3bDQwMzApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmggYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAppbmRleCBmMjA2ZDI0Li42YzU3NDMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDQwMzAuaApAQCAtNDEsNyArNDEsMTEgQEAKIAogc3RydWN0IHR3bDQwMzBfc2V0dXBfZGF0YSB7CiAJdW5zaWduZWQgaW50IHJhbXBfZGVsYXlfdmFsdWU7CisJdW5zaWduZWQgaW50IGRpZ2ltaWNfZGVsYXk7IC8qIGluIG1zICovCiAJdW5zaWduZWQgaW50IHN5c2NsazsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0X2NuY2xfcGF0aDsKKwl1bnNpZ25lZCBpbnQgY2hlY2tfZGVmYXVsdHM6MTsKKwl1bnNpZ25lZCBpbnQgcmVzZXRfcmVnaXN0ZXJzOjE7CiAJdW5zaWduZWQgaW50IGhzX2V4dG11dGU6MTsKIAl2b2lkICgqc2V0X2hzX2V4dG11dGUpKGludCBtdXRlKTsKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCmluZGV4IGFmMzYzNDYuLjY0YTgwN2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdHdsNjA0MC5jCkBAIC0zNjAsNiArMzYwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdHdsNjA0MF9oc19kYWNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCW1zbGVlcCgxKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB0d2w2MDQwX3Bvd2VyX21vZGVfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewpAQCAtMzcxLDYgKzM3OCw4IEBACiAJZWxzZQogCQlwcml2LT5ub25fbHAtLTsKIAorCW1zbGVlcCgxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NzEsMjAgKzQ4MCw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGZkYWNyX3N3aXRjaF9jb250cm9scyA9CiAJU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w2MDQwX1JFR19IRlJDVEwsIDIsIDEsIDApOwogCi0vKiBIZWFkc2V0IGRyaXZlciBzd2l0Y2hlcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhzbF9kcml2ZXJfc3dpdGNoX2NvbnRyb2xzID0KLQlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDYwNDBfUkVHX0hTTENUTCwgMiwgMSwgMCk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBoc3JfZHJpdmVyX3N3aXRjaF9jb250cm9scyA9Ci0JU09DX0RBUE1fU0lOR0xFKCJTd2l0Y2giLCBUV0w2MDQwX1JFR19IU1JDVEwsIDIsIDEsIDApOwotCi0vKiBIYW5kc2ZyZWUgZHJpdmVyIHN3aXRjaGVzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgaGZsX2RyaXZlcl9zd2l0Y2hfY29udHJvbHMgPQotCVNPQ19EQVBNX1NJTkdMRSgiU3dpdGNoIiwgVFdMNjA0MF9SRUdfSEZMQ1RMLCA0LCAxLCAwKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGhmcl9kcml2ZXJfc3dpdGNoX2NvbnRyb2xzID0KLQlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDYwNDBfUkVHX0hGUkNUTCwgNCwgMSwgMCk7Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBlcF9kcml2ZXJfc3dpdGNoX2NvbnRyb2xzID0KIAlTT0NfREFQTV9TSU5HTEUoIlN3aXRjaCIsIFRXTDYwNDBfUkVHX0VBUkNUTCwgMCwgMSwgMCk7CiAKQEAgLTU0OCwxMCArNTQzLDE0IEBACiAJCQlUV0w2MDQwX1JFR19ETUlDQkNUTCwgNCwgMCksCiAKIAkvKiBEQUNzICovCi0JU05EX1NPQ19EQVBNX0RBQygiSFNEQUMgTGVmdCIsICJIZWFkc2V0IFBsYXliYWNrIiwKLQkJCVRXTDYwNDBfUkVHX0hTTENUTCwgMCwgMCksCi0JU05EX1NPQ19EQVBNX0RBQygiSFNEQUMgUmlnaHQiLCAiSGVhZHNldCBQbGF5YmFjayIsCi0JCQlUV0w2MDQwX1JFR19IU1JDVEwsIDAsIDApLAorCVNORF9TT0NfREFQTV9EQUNfRSgiSFNEQUMgTGVmdCIsICJIZWFkc2V0IFBsYXliYWNrIiwKKwkJCVRXTDYwNDBfUkVHX0hTTENUTCwgMCwgMCwKKwkJCXR3bDYwNDBfaHNfZGFjX2V2ZW50LAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKKwlTTkRfU09DX0RBUE1fREFDX0UoIkhTREFDIFJpZ2h0IiwgIkhlYWRzZXQgUGxheWJhY2siLAorCQkJVFdMNjA0MF9SRUdfSFNSQ1RMLCAwLCAwLAorCQkJdHdsNjA0MF9oc19kYWNfZXZlbnQsCisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAogCVNORF9TT0NfREFQTV9EQUNfRSgiSEZEQUMgTGVmdCIsICJIYW5kc2ZyZWUgUGxheWJhY2siLAogCQkJVFdMNjA0MF9SRUdfSEZMQ1RMLCAwLCAwLAogCQkJdHdsNjA0MF9wb3dlcl9tb2RlX2V2ZW50LApAQCAtNTcxLDE4ICs1NzAsMTkgQEAKIAlTTkRfU09DX0RBUE1fU1dJVENIKCJIRkRBQyBSaWdodCBQbGF5YmFjayIsCiAJCQlTTkRfU09DX05PUE0sIDAsIDAsICZoZmRhY3Jfc3dpdGNoX2NvbnRyb2xzKSwKIAotCVNORF9TT0NfREFQTV9TV0lUQ0goIkhlYWRzZXQgTGVmdCBEcml2ZXIiLAotCQkJU05EX1NPQ19OT1BNLCAwLCAwLCAmaHNsX2RyaXZlcl9zd2l0Y2hfY29udHJvbHMpLAotCVNORF9TT0NfREFQTV9TV0lUQ0goIkhlYWRzZXQgUmlnaHQgRHJpdmVyIiwKLQkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhzcl9kcml2ZXJfc3dpdGNoX2NvbnRyb2xzKSwKLQlTTkRfU09DX0RBUE1fU1dJVENIX0UoIkhhbmRzZnJlZSBMZWZ0IERyaXZlciIsCi0JCQlTTkRfU09DX05PUE0sIDAsIDAsICZoZmxfZHJpdmVyX3N3aXRjaF9jb250cm9scywKKwkvKiBBbmFsb2cgcGxheWJhY2sgZHJpdmVycyAqLworCVNORF9TT0NfREFQTV9QR0FfRSgiSGFuZHNmcmVlIExlZnQgRHJpdmVyIiwKKwkJCVRXTDYwNDBfUkVHX0hGTENUTCwgNCwgMCwgTlVMTCwgMCwKIAkJCXR3bDYwNDBfcG93ZXJfbW9kZV9ldmVudCwKIAkJCVNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCi0JU05EX1NPQ19EQVBNX1NXSVRDSF9FKCJIYW5kc2ZyZWUgUmlnaHQgRHJpdmVyIiwKLQkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmhmcl9kcml2ZXJfc3dpdGNoX2NvbnRyb2xzLAorCVNORF9TT0NfREFQTV9QR0FfRSgiSGFuZHNmcmVlIFJpZ2h0IERyaXZlciIsCisJCQlUV0w2MDQwX1JFR19IRlJDVEwsIDQsIDAsIE5VTEwsIDAsCiAJCQl0d2w2MDQwX3Bvd2VyX21vZGVfZXZlbnQsCiAJCQlTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0EoIkhlYWRzZXQgTGVmdCBEcml2ZXIiLAorCQkJVFdMNjA0MF9SRUdfSFNMQ1RMLCAyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fUEdBKCJIZWFkc2V0IFJpZ2h0IERyaXZlciIsCisJCQlUV0w2MDQwX1JFR19IU1JDVEwsIDIsIDAsIE5VTEwsIDApLAogCVNORF9TT0NfREFQTV9TV0lUQ0hfRSgiRWFycGhvbmUgRHJpdmVyIiwKIAkJCVNORF9TT0NfTk9QTSwgMCwgMCwgJmVwX2RyaXZlcl9zd2l0Y2hfY29udHJvbHMsCiAJCQl0d2w2MDQwX3Bvd2VyX21vZGVfZXZlbnQsCkBAIC02MTYsOCArNjE2LDggQEAKIAl7IkhTREFDIExlZnQgUGxheWJhY2siLCAiU3dpdGNoIiwgIkhTREFDIExlZnQifSwKIAl7IkhTREFDIFJpZ2h0IFBsYXliYWNrIiwgIlN3aXRjaCIsICJIU0RBQyBSaWdodCJ9LAogCi0JeyJIZWFkc2V0IExlZnQgRHJpdmVyIiwgIlN3aXRjaCIsICJIU0RBQyBMZWZ0IFBsYXliYWNrIn0sCi0JeyJIZWFkc2V0IFJpZ2h0IERyaXZlciIsICJTd2l0Y2giLCAiSFNEQUMgUmlnaHQgUGxheWJhY2sifSwKKwl7IkhlYWRzZXQgTGVmdCBEcml2ZXIiLCBOVUxMLCAiSFNEQUMgTGVmdCBQbGF5YmFjayJ9LAorCXsiSGVhZHNldCBSaWdodCBEcml2ZXIiLCBOVUxMLCAiSFNEQUMgUmlnaHQgUGxheWJhY2sifSwKIAogCXsiSFNPTCIsIE5VTEwsICJIZWFkc2V0IExlZnQgRHJpdmVyIn0sCiAJeyJIU09SIiwgTlVMTCwgIkhlYWRzZXQgUmlnaHQgRHJpdmVyIn0sCkBAIC05MjgsNyArOTI4LDcgQEAKIAkJY2FzZSAxOTIwMDAwMDoKIAkJCS8qIG1jbGsgaW5wdXQsIHBsbCBkaXNhYmxlZCAqLwogCQkJaHBwbGxjdGwgfD0gVFdMNjA0MF9NQ0xLXzE5MjAwS0haIHwKLQkJCQkgICAgVFdMNjA0MF9IUExMU1FSQlAgfAorCQkJCSAgICBUV0w2MDQwX0hQTExTUVJFTkEgfAogCQkJCSAgICBUV0w2MDQwX0hQTExCUDsKIAkJCWJyZWFrOwogCQljYXNlIDI2MDAwMDAwOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYwppbmRleCAyOGFhYzUzLi5mM2I0YzFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguYwpAQCAtMjgsMTkgKzI4LDYgQEAKICNpbmNsdWRlICJ1ZGExMzR4LmgiCiAKIAotI2RlZmluZSBQT1dFUl9PRkZfT05fU1RBTkRCWSAxCi0vKgotICBBTFNBIFNPQyB1c3VhbGx5IHB1dHMgdGhlIGRldmljZSBpbiBzdGFuZGJ5IG1vZGUgd2hlbiBpdCdzIG5vdCB1c2VkCi0gIGZvciBzb21ldGltZS4gSWYgeW91IGRlZmluZSBQT1dFUl9PRkZfT05fU1RBTkRCWSB0aGUgZHJpdmVyIHdpbGwKLSAgdHVybiBvZmYgdGhlIEFEQy9EQUMgd2hlbiB0aGlzIGNhbGxiYWNrIGlzIGludm9rZWQgYW5kIHR1cm4gaXQgYmFjawotICBvbiB3aGVuIG5lZWRlZC4gVW5mb3J0dW5hdGVseSB0aGlzIHdpbGwgcmVzdWx0IGluIGEgdmVyeSBsaWdodCBidW1wCi0gIChpdCBjYW4gYmUgYXVkaWJsZSBvbmx5IHdpdGggZ29vZCBlYXJwaG9uZXMpLiBJZiB0aGlzIGJvdGhlcnMgeW91Ci0gIGp1c3QgY29tbWVudCB0aGlzIGxpbmUsIHlvdSB3aWxsIGhhdmUgc2xpZ2h0bHkgaGlnaGVyIHBvd2VyCi0gIGNvbnN1bXB0aW9uIC4gUGxlYXNlIG5vdGUgdGhhdCBzZW5kaW5nIHRoZSBMMyBjb21tYW5kIGZvciBBREMgaXMKLSAgZW5vdWdoIHRvIG1ha2UgdGhlIGJ1bXAsIHNvIGl0IGRvZXNuJ3QgbWFrZSBkaWZmZXJlbmNlIGlmIHlvdQotICBjb21wbGV0ZWx5IHRha2Ugb2ZmIHBvd2VyIGZyb20gdGhlIGNvZGVjLgotICovCi0KICNkZWZpbmUgVURBMTM0WF9SQVRFUyBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwCiAjZGVmaW5lIFVEQTEzNFhfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TOCB8IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgXAogCQlTTkRSVl9QQ01fRk1UQklUX1MxOF8zTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUpCkBAIC01OCw3ICs0NSw3IEBACiAJLyogRXh0ZW5kZWQgYWRkcmVzcyByZWdpc3RlcnMgKi8KIAkweDA0LCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogCS8qIFN0YXR1cywgZGF0YSByZWdzICovCi0JMHgwMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwKKwkweDAwLCAweDgzLCAweDAwLCAweDQwLCAweDgwLCAweEMwLCAweDAwLAogfTsKIAogLyoKQEAgLTExNyw2ICsxMDQsNyBAQAogCWNhc2UgVURBMTM0WF9EQVRBMDAwOgogCWNhc2UgVURBMTM0WF9EQVRBMDAxOgogCWNhc2UgVURBMTM0WF9EQVRBMDEwOgorCWNhc2UgVURBMTM0WF9EQVRBMDExOgogCQlhZGRyID0gVURBMTM0WF9EQVRBMF9BRERSOwogCQlicmVhazsKIAljYXNlIFVEQTEzNFhfREFUQTE6CkBAIC0zNTMsOCArMzQxLDIyIEBACiAJc3dpdGNoIChsZXZlbCkgewogCWNhc2UgU05EX1NPQ19CSUFTX09OOgogCQkvKiBBREMsIERBQyBvbiAqLwotCQlyZWcgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEpOwotCQl1ZGExMzR4X3dyaXRlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEsIHJlZyB8IDB4MDMpOworCQlzd2l0Y2ggKHBkLT5tb2RlbCkgeworCQljYXNlIFVEQTEzNFhfVURBMTM0MDoKKwkJY2FzZSBVREExMzRYX1VEQTEzNDQ6CisJCWNhc2UgVURBMTM0WF9VREExMzQ1OgorCQkJcmVnID0gdWRhMTM0eF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM0WF9EQVRBMDExKTsKKwkJCXVkYTEzNHhfd3JpdGUoY29kZWMsIFVEQTEzNFhfREFUQTAxMSwgcmVnIHwgMHgwMyk7CisJCQlicmVhazsKKwkJY2FzZSBVREExMzRYX1VEQTEzNDE6CisJCQlyZWcgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEpOworCQkJdWRhMTM0eF93cml0ZShjb2RlYywgVURBMTM0WF9TVEFUVVMxLCByZWcgfCAweDAzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzRYIFNvQyBjb2RlYzogIgorCQkJICAgICAgICJ1bnN1cHBvcnRlZCBtb2RlbCAlZFxuIiwgcGQtPm1vZGVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1BSRVBBUkU6CiAJCS8qIHBvd2VyIG9uICovCkBAIC0zNjcsOCArMzY5LDIyIEBACiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CiAJCS8qIEFEQywgREFDIHBvd2VyIG9mZiAqLwotCQlyZWcgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEpOwotCQl1ZGExMzR4X3dyaXRlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEsIHJlZyAmIH4oMHgwMykpOworCQlzd2l0Y2ggKHBkLT5tb2RlbCkgeworCQljYXNlIFVEQTEzNFhfVURBMTM0MDoKKwkJY2FzZSBVREExMzRYX1VEQTEzNDQ6CisJCWNhc2UgVURBMTM0WF9VREExMzQ1OgorCQkJcmVnID0gdWRhMTM0eF9yZWFkX3JlZ19jYWNoZShjb2RlYywgVURBMTM0WF9EQVRBMDExKTsKKwkJCXVkYTEzNHhfd3JpdGUoY29kZWMsIFVEQTEzNFhfREFUQTAxMSwgcmVnICYgfigweDAzKSk7CisJCQlicmVhazsKKwkJY2FzZSBVREExMzRYX1VEQTEzNDE6CisJCQlyZWcgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlKGNvZGVjLCBVREExMzRYX1NUQVRVUzEpOworCQkJdWRhMTM0eF93cml0ZShjb2RlYywgVURBMTM0WF9TVEFUVVMxLCByZWcgJiB+KDB4MDMpKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJVREExMzRYIFNvQyBjb2RlYzogIgorCQkJICAgICAgICJ1bnN1cHBvcnRlZCBtb2RlbCAlZFxuIiwgcGQtPm1vZGVsKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19CSUFTX09GRjoKIAkJLyogcG93ZXIgb2ZmICovCkBAIC01MzEsOSArNTQ3LDcgQEAKIAljb2RlYy0+bnVtX2RhaSA9IDE7CiAJY29kZWMtPnJlYWQgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlOwogCWNvZGVjLT53cml0ZSA9IHVkYTEzNHhfd3JpdGU7Ci0jaWZkZWYgUE9XRVJfT0ZGX09OX1NUQU5EQlkKLQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSB1ZGExMzR4X3NldF9iaWFzX2xldmVsOwotI2VuZGlmCisKIAlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fd2lkZ2V0cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvZGVjLT5kYXBtX3BhdGhzKTsKIApAQCAtNTQ0LDYgKzU1OCwxNCBAQAogCiAJdWRhMTM0eF9yZXNldChjb2RlYyk7CiAKKwlpZiAocGQtPmlzX3Bvd2VyZWRfb25fc3RhbmRieSkgeworCQljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSBOVUxMOworCQl1ZGExMzR4X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT04pOworCX0gZWxzZSB7CisJCWNvZGVjLT5zZXRfYmlhc19sZXZlbCA9IHVkYTEzNHhfc2V0X2JpYXNfbGV2ZWw7CisJCXVkYTEzNHhfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKKwl9CisKIAkvKiByZWdpc3RlciBwY21zICovCiAJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKIAlpZiAocmV0IDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmggYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguaAppbmRleCA5NGY0NDA0Li4yMDVmMDNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzNHguaApAQCAtMjMsOSArMjMsMTAgQEAKICNkZWZpbmUgVURBMTM0WF9EQVRBMDAwIDEwCiAjZGVmaW5lIFVEQTEzNFhfREFUQTAwMSAxMQogI2RlZmluZSBVREExMzRYX0RBVEEwMTAgMTIKLSNkZWZpbmUgVURBMTM0WF9EQVRBMQkxMworI2RlZmluZSBVREExMzRYX0RBVEEwMTEgMTMKKyNkZWZpbmUgVURBMTM0WF9EQVRBMSAgIDE0CiAKLSNkZWZpbmUgVURBMTM0WF9SRUdTX05VTSAxNAorI2RlZmluZSBVREExMzRYX1JFR1NfTlVNIDE1CiAKICNkZWZpbmUgU1RBVFVTMF9EQUlGTVRfTUFTSyAofig3PDwxKSkKICNkZWZpbmUgU1RBVFVTMF9TWVNDTEtfTUFTSyAofigzPDw0KSkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCmluZGV4IDAwMmUyODkuLjRiY2QxNjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYwpAQCAtNzk1LDYgKzc5NSw4IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJmkyYy0+ZGV2LCB3bTIwMDApOwogCXdtMjAwMC0+YW5jX2VuZ19lbmEgPSAxOworCXdtMjAwMC0+YW5jX2FjdGl2ZSA9IDE7CisJd20yMDAwLT5zcGtfZW5hID0gMTsKIAl3bTIwMDAtPmkyYyA9IGkyYzsKIAogCXdtMjAwMF9yZXNldCh3bTIwMDApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg1MjMuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NTIzLmMKaW5kZXggMzcyNDJhNy4uMGFkMDM5YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg1MjMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODUyMy5jCkBAIC00ODIsNyArNDgyLDggQEAKIAogCWlmICh3bTg1MjNfY29kZWMpIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQW5vdGhlciBXTTg1MjMgaXMgcmVnaXN0ZXJlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKIAl9CiAKIAltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOwpAQCAtNTcwLDE4ICs1NzEsMTkgQEAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJfZW5hYmxlOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg1MjNfZGFpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7Ci0JCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2NvZGVjOwogCX0KIAogCXJldHVybiAwOwogCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGVycl9lbmFibGU6CiAJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODUyMy0+c3VwcGxpZXMpLCB3bTg1MjMtPnN1cHBsaWVzKTsKIGVycl9nZXQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODcxMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MTEuYwppbmRleCBlZmZiMTRlLi5lMmRiYTA3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODcxMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzExLmMKQEAgLTQzOSw3ICs0MzksOCBAQAogCiAJaWYgKHdtODcxMV9jb2RlYykgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODcxMSBpcyByZWdpc3RlcmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOwogCX0KIAogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc0MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWVhODkwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NDEuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIHdtODc0MS5jICAtLSAgV004NzQxIEFMU0EgU29DIEF1ZGlvIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAyMDEwIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBwbGMKKyAqCisgKiBBdXRob3I6IElhbiBMYXJ0ZXkgPGlhbkBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgIndtODc0MS5oIgorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWMgKndtODc0MV9jb2RlYzsKK3N0cnVjdCBzbmRfc29jX2NvZGVjX2RldmljZSBzb2NfY29kZWNfZGV2X3dtODc0MTsKKworI2RlZmluZSBXTTg3NDFfTlVNX1NVUFBMSUVTIDIKK3N0YXRpYyBjb25zdCBjaGFyICp3bTg3NDFfc3VwcGx5X25hbWVzW1dNODc0MV9OVU1fU1VQUExJRVNdID0geworCSJBVkREIiwKKwkiRFZERCIsCit9OworCisjZGVmaW5lIFdNODc0MV9OVU1fUkFURVMgNAorCisvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCB3bTg3NDFfcHJpdiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgY29kZWM7CisJdTE2IHJlZ19jYWNoZVtXTTg3NDFfUkVHSVNURVJfQ09VTlRdOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW1dNODc0MV9OVU1fU1VQUExJRVNdOworCXVuc2lnbmVkIGludCBzeXNjbGs7CisJdW5zaWduZWQgaW50IHJhdGVfY29uc3RyYWludF9saXN0W1dNODc0MV9OVU1fUkFURVNdOworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCByYXRlX2NvbnN0cmFpbnQ7Cit9OworCitzdGF0aWMgY29uc3QgdTE2IHdtODc0MV9yZWdfZGVmYXVsdHNbV004NzQxX1JFR0lTVEVSX0NPVU5UXSA9IHsKKwkweDAwMDAsICAgICAvKiBSMCAgLSBEQUNMTFNCIEF0dGVudWF0aW9uICovCisJMHgwMDAwLCAgICAgLyogUjEgIC0gREFDTE1TQiBBdHRlbnVhdGlvbiAqLworCTB4MDAwMCwgICAgIC8qIFIyICAtIERBQ1JMU0IgQXR0ZW51YXRpb24gKi8KKwkweDAwMDAsICAgICAvKiBSMyAgLSBEQUNSTVNCIEF0dGVudWF0aW9uICovCisJMHgwMDAwLCAgICAgLyogUjQgIC0gVm9sdW1lIENvbnRyb2wgKi8KKwkweDAwMEEsICAgICAvKiBSNSAgLSBGb3JtYXQgQ29udHJvbCAqLworCTB4MDAwMCwgICAgIC8qIFI2ICAtIEZpbHRlciBDb250cm9sICovCisJMHgwMDAwLCAgICAgLyogUjcgIC0gTW9kZSBDb250cm9sIDEgKi8KKwkweDAwMDIsICAgICAvKiBSOCAgLSBNb2RlIENvbnRyb2wgMiAqLworCTB4MDAwMCwJICAgIC8qIFI5ICAtIFJlc2V0ICovCisJMHgwMDAyLCAgICAgLyogUjMyIC0gQURESVRPTkFMX0NPTlRST0xfMSAqLworfTsKKworCitzdGF0aWMgaW50IHdtODc0MV9yZXNldChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJcmV0dXJuIHNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc0MV9SRVNFVCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2X2ZpbmUsIC0xMjcwMCwgMTMsIDApOworc3RhdGljIGNvbnN0IERFQ0xBUkVfVExWX0RCX1NDQUxFKGRhY190bHYsIC0xMjcwMCwgNDAwLCAwKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODc0MV9zbmRfY29udHJvbHNbXSA9IHsKK1NPQ19ET1VCTEVfUl9UTFYoIkZpbmUgUGxheWJhY2sgVm9sdW1lIiwgV004NzQxX0RBQ0xMU0JfQVRURU5VQVRJT04sCisJCSBXTTg3NDFfREFDUkxTQl9BVFRFTlVBVElPTiwgMSwgMjU1LCAxLCBkYWNfdGx2X2ZpbmUpLAorU09DX0RPVUJMRV9SX1RMVigiUGxheWJhY2sgVm9sdW1lIiwgV004NzQxX0RBQ0xNU0JfQVRURU5VQVRJT04sCisJCSBXTTg3NDFfREFDUk1TQl9BVFRFTlVBVElPTiwgMCwgNTExLCAxLCBkYWNfdGx2KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg3NDFfZGFwbV93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fREFDKCJEQUNMIiwgIlBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQ1IiLCAiUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX09VVFBVVCgiVk9VVExQIiksCitTTkRfU09DX0RBUE1fT1VUUFVUKCJWT1VUTE4iKSwKK1NORF9TT0NfREFQTV9PVVRQVVQoIlZPVVRSUCIpLAorU05EX1NPQ19EQVBNX09VVFBVVCgiVk9VVFJOIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBpbnRlcmNvbltdID0geworCXsgIlZPVVRMUCIsIE5VTEwsICJEQUNMIiB9LAorCXsgIlZPVVRMTiIsIE5VTEwsICJEQUNMIiB9LAorCXsgIlZPVVRSUCIsIE5VTEwsICJEQUNSIiB9LAorCXsgIlZPVVRSTiIsIE5VTEwsICJEQUNSIiB9LAorfTsKKworc3RhdGljIGludCB3bTg3NDFfYWRkX3dpZGdldHMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODc0MV9kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHdtODc0MV9kYXBtX3dpZGdldHMpKTsKKworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCB2YWx1ZTsKKwlpbnQgcmF0aW87Cit9IGxyY2xrX3JhdGlvc1tXTTg3NDFfTlVNX1JBVEVTXSA9IHsKKwl7IDEsIDI1NiB9LAorCXsgMiwgMzg0IH0sCisJeyAzLCA1MTIgfSwKKwl7IDQsIDc2OCB9LAorfTsKKworCitzdGF0aWMgaW50IHdtODc0MV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCB3bTg3NDFfcHJpdiAqd204NzQxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwkvKiBUaGUgc2V0IG9mIHNhbXBsZSByYXRlcyB0aGF0IGNhbiBiZSBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUKKwkgKiBNQ0xLIHN1cHBsaWVkIHRvIHRoZSBDT0RFQyAtIGVuZm9yY2UgdGhpcy4KKwkgKi8KKwlpZiAoIXdtODc0MS0+c3lzY2xrKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJObyBNQ0xLIGNvbmZpZ3VyZWQsIGNhbGwgc2V0X3N5c2NsaygpIG9uIGluaXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJICAgJndtODc0MS0+cmF0ZV9jb25zdHJhaW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODc0MV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcnRkLT5zb2NkZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc29jZGV2LT5jYXJkLT5jb2RlYzsKKwlzdHJ1Y3Qgd204NzQxX3ByaXYgKndtODc0MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXUxNiBpZmFjZSA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NzQxX0ZPUk1BVF9DT05UUk9MKSAmIDB4MUZDOworCWludCBpOworCisJLyogRmluZCBhIHN1cHBvcnRlZCBMUkNMSyByYXRpbyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxyY2xrX3JhdGlvcyk7IGkrKykgeworCQlpZiAod204NzQxLT5zeXNjbGsgLyBwYXJhbXNfcmF0ZShwYXJhbXMpID09CisJCSAgICBscmNsa19yYXRpb3NbaV0ucmF0aW8pCisJCQlicmVhazsKKwl9CisKKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLCBzaG91bGQgYmUgaGFuZGxlZCBieSBjb25zdHJhaW50cyAqLworCWlmIChpID09IEFSUkFZX1NJWkUobHJjbGtfcmF0aW9zKSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJNQ0xLL2ZzIHJhdGlvICVkIHVuc3VwcG9ydGVkXG4iLAorCQkJd204NzQxLT5zeXNjbGsgLyBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYml0IHNpemUgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjBfM0xFOgorCQlpZmFjZSB8PSAweDAwMDE7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWlmYWNlIHw9IDB4MDAwMjsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaWZhY2UgfD0gMHgwMDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJ3bTg3NDFfaHdfcGFyYW1zOiAgICBVbnN1cHBvcnRlZCBiaXQgc2l6ZSBwYXJhbSA9ICVkIiwKKwkJCXBhcmFtc19mb3JtYXQocGFyYW1zKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIndtODc0MV9od19wYXJhbXM6ICAgIGJpdCBzaXplIHBhcmFtID0gJWQiLAorCQlwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCisJc25kX3NvY193cml0ZShjb2RlYywgV004NzQxX0ZPUk1BVF9DT05UUk9MLCBpZmFjZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204NzQxX3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpLAorCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCB3bTg3NDFfcHJpdiAqd204NzQxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgaTsKKworCWRldl9kYmcoY29kZWMtPmRldiwgIndtODc0MV9zZXRfZGFpX3N5c2NsayBpbmZvOiBmcmVxPSVkSHpcbiIsIGZyZXEpOworCisJd204NzQxLT5zeXNjbGsgPSBmcmVxOworCisJd204NzQxLT5yYXRlX2NvbnN0cmFpbnQuY291bnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHJjbGtfcmF0aW9zKTsgaSsrKSB7CisJCWRldl9kYmcoY29kZWMtPmRldiwgImluZGV4ID0gJWQsIHJhdGlvID0gJWQsIGZyZXEgPSAlZCIsCisJCQkJaSwgbHJjbGtfcmF0aW9zW2ldLnJhdGlvLCBmcmVxKTsKKworCQl2YWwgPSBmcmVxIC8gbHJjbGtfcmF0aW9zW2ldLnJhdGlvOworCQkvKiBDaGVjayB0aGF0IGl0J3MgYSBzdGFuZGFyZCByYXRlIHNpbmNlIGNvcmUgY2FuJ3QKKwkJICogY29wZSB3aXRoIG90aGVycyBhbmQgaGF2aW5nIHRoZSBvZGQgcmF0ZXMgY29uZnVzZXMKKwkJICogY29uc3RyYWludCBtYXRjaGluZy4KKwkJICovCisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2UgMzIwMDA6CisJCWNhc2UgNDQxMDA6CisJCWNhc2UgNDgwMDA6CisJCWNhc2UgNjQwMDA6CisJCWNhc2UgODgyMDA6CisJCWNhc2UgOTYwMDA6CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTdXBwb3J0ZWQgc2FtcGxlIHJhdGU6ICVkSHpcbiIsCisJCQkJdmFsKTsKKwkJCXdtODc0MS0+cmF0ZV9jb25zdHJhaW50X2xpc3RbaV0gPSB2YWw7CisJCQl3bTg3NDEtPnJhdGVfY29uc3RyYWludC5jb3VudCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGNvZGVjLT5kZXYsICJTa2lwcGluZyBzYW1wbGUgcmF0ZTogJWRIelxuIiwKKwkJCQl2YWwpOworCQl9CisJfQorCisJLyogTmVlZCBhdCBsZWFzdCBvbmUgc3VwcG9ydGVkIHJhdGUuLi4gKi8KKwlpZiAod204NzQxLT5yYXRlX2NvbnN0cmFpbnQuY291bnQgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg3NDFfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWksCisJCXVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKKwl1MTYgaWZhY2UgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODc0MV9GT1JNQVRfQ09OVFJPTCkgJiAweDFDMzsKKworCS8qIGNoZWNrIG1hc3Rlci9zbGF2ZSBhdWRpbyBpbnRlcmZhY2UgKi8KKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBpbnRlcmZhY2UgZm9ybWF0ICovCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlpZmFjZSB8PSAweDAwMDg7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6CisJCWlmYWNlIHw9IDB4MDAwNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKKwkJaWZhY2UgfD0gMHgwMDAzOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9COgorCQlpZmFjZSB8PSAweDAwMTM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNsb2NrIGludmVyc2lvbiAqLworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0lCX0lGOgorCQlpZmFjZSB8PSAweDAwMTA7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWlmYWNlIHw9IDB4MDAyMDsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJaWZhY2UgfD0gMHgwMDMwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKworCWRldl9kYmcoY29kZWMtPmRldiwgIndtODc0MV9zZXRfZGFpX2ZtdDogICAgRm9ybWF0PSV4LCBDbG9jayBJbnY9JXhcbiIsCisJCQkJZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0ssCisJCQkJKChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykpKTsKKworCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODc0MV9GT1JNQVRfQ09OVFJPTCwgaWZhY2UpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNODc0MV9SQVRFUyAoU05EUlZfUENNX1JBVEVfMzIwMDAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfODgyMDAgfCBcCisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCB8IFNORFJWX1BDTV9SQVRFXzE3NjQwMCB8IFwKKwkJCVNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKworI2RlZmluZSBXTTg3NDFfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MyMF8zTEUgfFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHdtODc0MV9kYWlfb3BzID0geworCS5zdGFydHVwCT0gd204NzQxX3N0YXJ0dXAsCisJLmh3X3BhcmFtcwk9IHdtODc0MV9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSB3bTg3NDFfc2V0X2RhaV9zeXNjbGssCisJLnNldF9mbXQJPSB3bTg3NDFfc2V0X2RhaV9mbXQsCit9OworCitzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzQxX2RhaSA9IHsKKwkubmFtZSA9ICJXTTg3NDEiLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lID0gIlBsYXliYWNrIiwKKwkJLmNoYW5uZWxzX21pbiA9IDIsICAvKiBNb25vIG1vZGVzIG5vdCB5ZXQgc3VwcG9ydGVkICovCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBXTTg3NDFfUkFURVMsCisJCS5mb3JtYXRzID0gV004NzQxX0ZPUk1BVFMsCisJfSwKKwkub3BzID0gJndtODc0MV9kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHdtODc0MV9kYWkpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHdtODc0MV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgKnNvY2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNvY2Rldi0+Y2FyZC0+Y29kZWM7CisJdTE2ICpjYWNoZSA9IGNvZGVjLT5yZWdfY2FjaGU7CisJaW50IGk7CisKKwkvKiBSRVNUT1JFIFJFRyBDYWNoZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTg3NDFfUkVHSVNURVJfQ09VTlQ7IGkrKykgeworCQlpZiAoY2FjaGVbaV0gPT0gd204NzQxX3JlZ19kZWZhdWx0c1tpXSB8fCBXTTg3NDFfUkVTRVQgPT0gaSkKKwkJCWNvbnRpbnVlOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBpLCBjYWNoZVtpXSk7CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgd204NzQxX3N1c3BlbmQgTlVMTAorI2RlZmluZSB3bTg3NDFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IHdtODc0MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOworCWludCByZXQgPSAwOworCisJaWYgKHdtODc0MV9jb2RlYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvZGVjIGRldmljZSBub3QgcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXNvY2Rldi0+Y2FyZC0+Y29kZWMgPSB3bTg3NDFfY29kZWM7CisJY29kZWMgPSB3bTg3NDFfY29kZWM7CisKKwkvKiByZWdpc3RlciBwY21zICovCisJcmV0ID0gc25kX3NvY19uZXdfcGNtcyhzb2NkZXYsIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHBjbXM6ICVkXG4iLCByZXQpOworCQlnb3RvIHBjbV9lcnI7CisJfQorCisJc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODc0MV9zbmRfY29udHJvbHMsCisJCQkgICAgIEFSUkFZX1NJWkUod204NzQxX3NuZF9jb250cm9scykpOworCXdtODc0MV9hZGRfd2lkZ2V0cyhjb2RlYyk7CisKKwlyZXR1cm4gcmV0OworCitwY21fZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204NzQxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2RldmljZSAqc29jZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX2ZyZWVfcGNtcyhzb2NkZXYpOworCXNuZF9zb2NfZGFwbV9mcmVlKHNvY2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfY29kZWNfZGV2aWNlIHNvY19jb2RlY19kZXZfd204NzQxID0geworCS5wcm9iZSA9CXdtODc0MV9wcm9iZSwKKwkucmVtb3ZlID0Jd204NzQxX3JlbW92ZSwKKwkucmVzdW1lID0Jd204NzQxX3Jlc3VtZSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChzb2NfY29kZWNfZGV2X3dtODc0MSk7CisKK3N0YXRpYyBpbnQgd204NzQxX3JlZ2lzdGVyKHN0cnVjdCB3bTg3NDFfcHJpdiAqd204NzQxLAorCQkJICAgZW51bSBzbmRfc29jX2NvbnRyb2xfdHlwZSBjb250cm9sKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gJndtODc0MS0+Y29kZWM7CisJaW50IGk7CisKKwlpZiAod204NzQxX2NvZGVjKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004NzQxIGlzIHJlZ2lzdGVyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZjb2RlYy0+bXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjb2RlYy0+ZGFwbV93aWRnZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY29kZWMtPmRhcG1fcGF0aHMpOworCisJc25kX3NvY19jb2RlY19zZXRfZHJ2ZGF0YShjb2RlYywgd204NzQxKTsKKwljb2RlYy0+bmFtZSA9ICJXTTg3NDEiOworCWNvZGVjLT5vd25lciA9IFRISVNfTU9EVUxFOworCWNvZGVjLT5iaWFzX2xldmVsID0gU05EX1NPQ19CSUFTX09GRjsKKwljb2RlYy0+c2V0X2JpYXNfbGV2ZWwgPSBOVUxMOworCWNvZGVjLT5kYWkgPSAmd204NzQxX2RhaTsKKwljb2RlYy0+bnVtX2RhaSA9IDE7CisJY29kZWMtPnJlZ19jYWNoZV9zaXplID0gV004NzQxX1JFR0lTVEVSX0NPVU5UOworCWNvZGVjLT5yZWdfY2FjaGUgPSAmd204NzQxLT5yZWdfY2FjaGU7CisKKwl3bTg3NDEtPnJhdGVfY29uc3RyYWludC5saXN0ID0gJndtODc0MS0+cmF0ZV9jb25zdHJhaW50X2xpc3RbMF07CisJd204NzQxLT5yYXRlX2NvbnN0cmFpbnQuY291bnQgPQorCQlBUlJBWV9TSVpFKHdtODc0MS0+cmF0ZV9jb25zdHJhaW50X2xpc3QpOworCisJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODc0MV9yZWdfZGVmYXVsdHMsCisJCXNpemVvZih3bTg3NDEtPnJlZ19jYWNoZSkpOworCisJcmV0ID0gc25kX3NvY19jb2RlY19zZXRfY2FjaGVfaW8oY29kZWMsIDcsIDksIGNvbnRyb2wpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc0MS0+c3VwcGxpZXMpOyBpKyspCisJCXdtODc0MS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204NzQxX3N1cHBseV9uYW1lc1tpXTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2dldChjb2RlYy0+ZGV2LCBBUlJBWV9TSVpFKHdtODc0MS0+c3VwcGxpZXMpLAorCQkJCSB3bTg3NDEtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3Qgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg3NDEtPnN1cHBsaWVzKSwKKwkJCQkgICAgd204NzQxLT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9nZXQ7CisJfQorCisJcmV0ID0gd204NzQxX3Jlc2V0KGNvZGVjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOworCQlnb3RvIGVycl9lbmFibGU7CisJfQorCisJd204NzQxX2RhaS5kZXYgPSBjb2RlYy0+ZGV2OworCisJLyogQ2hhbmdlIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyAtIGxhdGNoIFZVICovCisJd204NzQxLT5yZWdfY2FjaGVbV004NzQxX0RBQ0xMU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVMTDsKKwl3bTg3NDEtPnJlZ19jYWNoZVtXTTg3NDFfREFDTE1TQl9BVFRFTlVBVElPTl0gfD0gV004NzQxX1VQREFURUxNOworCXdtODc0MS0+cmVnX2NhY2hlW1dNODc0MV9EQUNSTFNCX0FUVEVOVUFUSU9OXSB8PSBXTTg3NDFfVVBEQVRFUkw7CisJd204NzQxLT5yZWdfY2FjaGVbV004NzQxX0RBQ1JMU0JfQVRURU5VQVRJT05dIHw9IFdNODc0MV9VUERBVEVSTTsKKworCXdtODc0MV9jb2RlYyA9IGNvZGVjOworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtODc0MV9kYWkpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKKwkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvblxuIik7CisJcmV0dXJuIDA7CisKK2Vycl9lbmFibGU6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODc0MS0+c3VwcGxpZXMpLCB3bTg3NDEtPnN1cHBsaWVzKTsKKworZXJyX2dldDoKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NzQxLT5zdXBwbGllcyksIHdtODc0MS0+c3VwcGxpZXMpOworCitlcnI6CisJa2ZyZWUod204NzQxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg3NDFfdW5yZWdpc3RlcihzdHJ1Y3Qgd204NzQxX3ByaXYgKndtODc0MSkKK3sKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204NzQxLT5zdXBwbGllcyksIHdtODc0MS0+c3VwcGxpZXMpOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmd204NzQxX2RhaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZ3bTg3NDEtPmNvZGVjKTsKKwlrZnJlZSh3bTg3NDEpOworCXdtODc0MV9jb2RlYyA9IE5VTEw7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg3NDFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB3bTg3NDFfcHJpdiAqd204NzQxOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKKworCXdtODc0MSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg3NDFfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICh3bTg3NDEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYyA9ICZ3bTg3NDEtPmNvZGVjOworCWNvZGVjLT5od193cml0ZSA9IChod193cml0ZV90KWkyY19tYXN0ZXJfc2VuZDsKKworCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODc0MSk7CisJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGkyYzsKKworCWNvZGVjLT5kZXYgPSAmaTJjLT5kZXY7CisKKwlyZXR1cm4gd204NzQxX3JlZ2lzdGVyKHdtODc0MSwgU05EX1NPQ19JMkMpOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg3NDFfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB3bTg3NDFfcHJpdiAqd204NzQxID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJd204NzQxX3VucmVnaXN0ZXIod204NzQxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc0MV9pMmNfaWRbXSA9IHsKKwl7ICJ3bTg3NDEiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHdtODc0MV9pMmNfaWQpOworCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg3NDFfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJXTTg3NDEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9ICAgIHdtODc0MV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9ICAgX19kZXZleGl0X3Aod204NzQxX2kyY19yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdtODc0MV9pMmNfaWQsCit9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHdtODc0MV9tb2Rpbml0KHZvaWQpCit7CisJaW50IHJldDsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJndtODc0MV9pMmNfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgV004NzQxIEkyQyBkcml2ZXI6ICVkXG4iLAorCQkgICAgICAgcmV0KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHdtODc0MV9tb2Rpbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODc0MV9leGl0KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQorCWkyY19kZWxfZHJpdmVyKCZ3bTg3NDFfaTJjX2RyaXZlcik7CisjZW5kaWYKK30KK21vZHVsZV9leGl0KHdtODc0MV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIFdNODc0MSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIklhbiBMYXJ0ZXkgPGlhbkBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc0MS5oIGIvc291bmQvc29jL2NvZGVjcy93bTg3NDEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGVmNmVjCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NDEuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIHdtODc0MS5oICAtLSAgV004NDIzIEFTb0MgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IDIwMTAgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLCBwbGMKKyAqCisgKiBBdXRob3I6IElhbiBMYXJ0ZXkgPGlhbkBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogQmFzZWQgb24gd204NzUzLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1dNODc0MV9ICisjZGVmaW5lIF9XTTg3NDFfSAorCisvKgorICogUmVnaXN0ZXIgdmFsdWVzLgorICovCisjZGVmaW5lIFdNODc0MV9EQUNMTFNCX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFdNODc0MV9EQUNMTVNCX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFdNODc0MV9EQUNSTFNCX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFdNODc0MV9EQUNSTVNCX0FUVEVOVUFUSU9OICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIFdNODc0MV9WT0xVTUVfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFdNODc0MV9GT1JNQVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIFdNODc0MV9GSUxURVJfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFdNODc0MV9NT0RFX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFdNODc0MV9NT0RFX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdNODc0MV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFdNODc0MV9BRERJVElPTkFMX0NPTlRST0xfMSAgICAgICAgICAgICAweDIwCisKKyNkZWZpbmUgV004NzQxX1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFdNODc0MV9NQVhfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAweDIwCisKKy8qCisgKiBGaWVsZCBEZWZpbml0aW9ucy4KKyAqLworCisvKgorICogUjAgKDB4MDApIC0gREFDTExTQl9BVFRFTlVBVElPTgorICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVMTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFVQREFURUxMICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVMTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFVQREFURUxMICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVMTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFVQREFURUxMICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVMTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVQREFURUxMICovCisjZGVmaW5lIFdNODc0MV9MQVRfNF8wX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIExBVFs0OjBdIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NzQxX0xBVF80XzBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTEFUWzQ6MF0gLSBbNDowXSAqLworI2RlZmluZSBXTTg3NDFfTEFUXzRfMF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBMQVRbNDowXSAtIFs0OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBEQUNMTVNCX0FUVEVOVUFUSU9OCisgKi8KKyNkZWZpbmUgV004NzQxX1VQREFURUxNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogVVBEQVRFTE0gKi8KKyNkZWZpbmUgV004NzQxX1VQREFURUxNX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogVVBEQVRFTE0gKi8KKyNkZWZpbmUgV004NzQxX1VQREFURUxNX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogVVBEQVRFTE0gKi8KKyNkZWZpbmUgV004NzQxX1VQREFURUxNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVVBEQVRFTE0gKi8KKyNkZWZpbmUgV004NzQxX0xBVF85XzVfMF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogTEFUWzk6NV0gLSBbNDowXSAqLworI2RlZmluZSBXTTg3NDFfTEFUXzlfNV8wX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBMQVRbOTo1XSAtIFs0OjBdICovCisjZGVmaW5lIFdNODc0MV9MQVRfOV81XzBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIExBVFs5OjVdIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyICgweDAyKSAtIERBQ1JMU0JfQVRURU5VQVRJT04KKyAqLworI2RlZmluZSBXTTg3NDFfVVBEQVRFUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBVUERBVEVSTCAqLworI2RlZmluZSBXTTg3NDFfVVBEQVRFUkxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBVUERBVEVSTCAqLworI2RlZmluZSBXTTg3NDFfVVBEQVRFUkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBVUERBVEVSTCAqLworI2RlZmluZSBXTTg3NDFfVVBEQVRFUkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBVUERBVEVSTCAqLworI2RlZmluZSBXTTg3NDFfUkFUXzRfMF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBSQVRbNDowXSAtIFs0OjBdICovCisjZGVmaW5lIFdNODc0MV9SQVRfNF8wX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFJBVFs0OjBdIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NzQxX1JBVF80XzBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogUkFUWzQ6MF0gLSBbNDowXSAqLworCisvKgorICogUjMgKDB4MDMpIC0gREFDUk1TQl9BVFRFTlVBVElPTgorICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVSTSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFVQREFURVJNICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVSTV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFVQREFURVJNICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVSTV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFVQREFURVJNICovCisjZGVmaW5lIFdNODc0MV9VUERBVEVSTV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFVQREFURVJNICovCisjZGVmaW5lIFdNODc0MV9SQVRfOV81XzBfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIFJBVFs5OjVdIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004NzQxX1JBVF85XzVfMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogUkFUWzk6NV0gLSBbNDowXSAqLworI2RlZmluZSBXTTg3NDFfUkFUXzlfNV8wX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBSQVRbOTo1XSAtIFs0OjBdICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBWT0xVTUVfQ09OVFJPTAorICovCisjZGVmaW5lIFdNODc0MV9BTVVURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFNVVRFICovCisjZGVmaW5lIFdNODc0MV9BTVVURV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFNVVRFICovCisjZGVmaW5lIFdNODc0MV9BTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEFNVVRFICovCisjZGVmaW5lIFdNODc0MV9BTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFNVVRFICovCisjZGVmaW5lIFdNODc0MV9aRkxBR19NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIFpGTEFHIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004NzQxX1pGTEFHX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogWkZMQUcgLSBbNjo1XSAqLworI2RlZmluZSBXTTg3NDFfWkZMQUdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBaRkxBRyAtIFs2OjVdICovCisjZGVmaW5lIFdNODc0MV9JWkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElaRCAqLworI2RlZmluZSBXTTg3NDFfSVpEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJWkQgKi8KKyNkZWZpbmUgV004NzQxX0laRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogSVpEICovCisjZGVmaW5lIFdNODc0MV9JWkRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElaRCAqLworI2RlZmluZSBXTTg3NDFfU09GVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBTT0ZUIE1VVEUgKi8KKyNkZWZpbmUgV004NzQxX1NPRlRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogU09GVCBNVVRFICovCisjZGVmaW5lIFdNODc0MV9TT0ZUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNPRlQgTVVURSAqLworI2RlZmluZSBXTTg3NDFfU09GVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTT0ZUIE1VVEUgKi8KKyNkZWZpbmUgV004NzQxX0FUQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVRDICovCisjZGVmaW5lIFdNODc0MV9BVENfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFUQyAqLworI2RlZmluZSBXTTg3NDFfQVRDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBVEMgKi8KKyNkZWZpbmUgV004NzQxX0FUQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVRDICovCisjZGVmaW5lIFdNODc0MV9BVFQyREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFUVDJEQiAqLworI2RlZmluZSBXTTg3NDFfQVRUMkRCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBVFQyREIgKi8KKyNkZWZpbmUgV004NzQxX0FUVDJEQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVRUMkRCICovCisjZGVmaW5lIFdNODc0MV9BVFQyREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFUVDJEQiAqLworI2RlZmluZSBXTTg3NDFfVk9MX1JBTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWT0xfUkFNUCAqLworI2RlZmluZSBXTTg3NDFfVk9MX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWT0xfUkFNUCAqLworI2RlZmluZSBXTTg3NDFfVk9MX1JBTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWT0xfUkFNUCAqLworI2RlZmluZSBXTTg3NDFfVk9MX1JBTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBWT0xfUkFNUCAqLworCisvKgorICogUjUgKDB4MDUpIC0gRk9STUFUX0NPTlRST0wKKyAqLworI2RlZmluZSBXTTg3NDFfUFdETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBQV0ROICovCisjZGVmaW5lIFdNODc0MV9QV0ROX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFBXRE4gKi8KKyNkZWZpbmUgV004NzQxX1BXRE5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogUFdETiAqLworI2RlZmluZSBXTTg3NDFfUFdETl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBQV0ROICovCisjZGVmaW5lIFdNODc0MV9SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFJFViAqLworI2RlZmluZSBXTTg3NDFfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBSRVYgKi8KKyNkZWZpbmUgV004NzQxX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogUkVWICovCisjZGVmaW5lIFdNODc0MV9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFJFViAqLworI2RlZmluZSBXTTg3NDFfQkNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBCQ1AgKi8KKyNkZWZpbmUgV004NzQxX0JDUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQkNQICovCisjZGVmaW5lIFdNODc0MV9CQ1BfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEJDUCAqLworI2RlZmluZSBXTTg3NDFfQkNQX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ1AgKi8KKyNkZWZpbmUgV004NzQxX0xSUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTFJQICovCisjZGVmaW5lIFdNODc0MV9MUlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExSUCAqLworI2RlZmluZSBXTTg3NDFfTFJQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBMUlAgKi8KKyNkZWZpbmUgV004NzQxX0xSUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTFJQICovCisjZGVmaW5lIFdNODc0MV9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIEZNVCAtIFszOjJdICovCisjZGVmaW5lIFdNODc0MV9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZNVCAtIFszOjJdICovCisjZGVmaW5lIFdNODc0MV9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZNVCAtIFszOjJdICovCisjZGVmaW5lIFdNODc0MV9JV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIElXTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODc0MV9JV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElXTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODc0MV9JV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIElXTCAtIFsxOjBdICovCisKKy8qCisgKiBSNiAoMHgwNikgLSBGSUxURVJfQ09OVFJPTAorICovCisjZGVmaW5lIFdNODc0MV9aRkxBR19ISSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFpGTEFHX0hJICovCisjZGVmaW5lIFdNODc0MV9aRkxBR19ISV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFpGTEFHX0hJICovCisjZGVmaW5lIFdNODc0MV9aRkxBR19ISV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFpGTEFHX0hJICovCisjZGVmaW5lIFdNODc0MV9aRkxBR19ISV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFpGTEFHX0hJICovCisjZGVmaW5lIFdNODc0MV9ERUVNUEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIERFRU1QSCAtIFs2OjVdICovCisjZGVmaW5lIFdNODc0MV9ERUVNUEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIERFRU1QSCAtIFs2OjVdICovCisjZGVmaW5lIFdNODc0MV9ERUVNUEhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERFRU1QSCAtIFs2OjVdICovCisjZGVmaW5lIFdNODc0MV9EU0RGSUxUX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIERTREZJTFQgLSBbNDozXSAqLworI2RlZmluZSBXTTg3NDFfRFNERklMVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEU0RGSUxUIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004NzQxX0RTREZJTFRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRFNERklMVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODc0MV9GSVJTRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZJUlNFTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODc0MV9GSVJTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZJUlNFTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODc0MV9GSVJTRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZJUlNFTCAtIFsyOjBdICovCisKKy8qCisgKiBSNyAoMHgwNykgLSBNT0RFX0NPTlRST0xfMQorICovCisjZGVmaW5lIFdNODc0MV9NT0RFOFggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1PREU4WCAqLworI2RlZmluZSBXTTg3NDFfTU9ERThYX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNT0RFOFggKi8KKyNkZWZpbmUgV004NzQxX01PREU4WF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTU9ERThYICovCisjZGVmaW5lIFdNODc0MV9NT0RFOFhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1PREU4WCAqLworI2RlZmluZSBXTTg3NDFfT1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBPU1IgLSBbNjo1XSAqLworI2RlZmluZSBXTTg3NDFfT1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBPU1IgLSBbNjo1XSAqLworI2RlZmluZSBXTTg3NDFfT1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBPU1IgLSBbNjo1XSAqLworI2RlZmluZSBXTTg3NDFfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFDICAvKiBTUiAtIFs0OjJdICovCisjZGVmaW5lIFdNODc0MV9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNSIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004NzQxX1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogU1IgLSBbNDoyXSAqLworI2RlZmluZSBXTTg3NDFfTU9ERVNFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAzICAvKiBNT0RFU0VMIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004NzQxX01PREVTRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTU9ERVNFTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODc0MV9NT0RFU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1PREVTRUwgLSBbMTowXSAqLworCisvKgorICogUjggKDB4MDgpIC0gTU9ERV9DT05UUk9MXzIKKyAqLworI2RlZmluZSBXTTg3NDFfRFNEX0dBSU4gICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEU0RfR0FJTiAqLworI2RlZmluZSBXTTg3NDFfRFNEX0dBSU5fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBEU0RfR0FJTiAqLworI2RlZmluZSBXTTg3NDFfRFNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBEU0RfR0FJTiAqLworI2RlZmluZSBXTTg3NDFfRFNEX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEU0RfR0FJTiAqLworI2RlZmluZSBXTTg3NDFfU0RPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBTRE9VVCAqLworI2RlZmluZSBXTTg3NDFfU0RPVVRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBTRE9VVCAqLworI2RlZmluZSBXTTg3NDFfU0RPVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBTRE9VVCAqLworI2RlZmluZSBXTTg3NDFfU0RPVVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTRE9VVCAqLworI2RlZmluZSBXTTg3NDFfRE9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBET1VUICovCisjZGVmaW5lIFdNODc0MV9ET1VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERPVVQgKi8KKyNkZWZpbmUgV004NzQxX0RPVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogRE9VVCAqLworI2RlZmluZSBXTTg3NDFfRE9VVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBET1VUICovCisjZGVmaW5lIFdNODc0MV9ESUZGX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIERJRkYgLSBbMzoyXSAqLworI2RlZmluZSBXTTg3NDFfRElGRl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBESUZGIC0gWzM6Ml0gKi8KKyNkZWZpbmUgV004NzQxX0RJRkZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRElGRiAtIFszOjJdICovCisjZGVmaW5lIFdNODc0MV9ESVRIRVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIERJVEhFUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODc0MV9ESVRIRVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERJVEhFUiAtIFsxOjBdICovCisjZGVmaW5lIFdNODc0MV9ESVRIRVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERJVEhFUiAtIFsxOjBdICovCisKKy8qCisgKiBSMzIgKDB4MjApIC0gQURESVRPTkFMX0NPTlRST0xfMQorICovCisjZGVmaW5lIFdNODc0MV9EU0RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERTRF9MRVZFTCAqLworI2RlZmluZSBXTTg3NDFfRFNEX0xFVkVMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEU0RfTEVWRUwgKi8KKyNkZWZpbmUgV004NzQxX0RTRF9MRVZFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRFNEX0xFVkVMICovCisjZGVmaW5lIFdNODc0MV9EU0RfTEVWRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERTRF9MRVZFTCAqLworI2RlZmluZSBXTTg3NDFfRFNEX05PX05PVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEU0RfTk9fTk9UQ0ggKi8KKyNkZWZpbmUgV004NzQxX0RTRF9OT19OT1RDSF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRFNEX05PX05PVENIICovCisjZGVmaW5lIFdNODc0MV9EU0RfTk9fTk9UQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIERTRF9OT19OT1RDSCAqLworI2RlZmluZSBXTTg3NDFfRFNEX05PX05PVENIX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEU0RfTk9fTk9UQ0ggKi8KKworI2RlZmluZSAgV004NzQxX1NZU0NMSyAwCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgd204NzQxX2RhaTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2Ugc29jX2NvZGVjX2Rldl93bTg3NDE7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKaW5kZXggOTQwN2UxOS4uZTJjMDVlMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCkBAIC04ODQsNiArODg0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdtODc1MF9pMmNfaWRbXSA9IHsKIAl7ICJ3bTg3NTAiLCAwIH0sCisJeyAid204OTg3IiwgMCB9LCAvKiBXTTg5ODcgaXMgcmVnaXN0ZXIgY29tcGF0aWJsZSB3aXRoIFdNODc1MCAqLwogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB3bTg3NTBfaTJjX2lkKTsKQEAgLTkyNSwxNCArOTI2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCB3bTg3NTBfc3BpX2lkW10gPSB7CisJeyAid204NzUwIiwgMCB9LAorCXsgIndtODk4NyIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgd204NzUwX3NwaV9pZCk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bTg3NTBfc3BpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ3bTg3NTAiLAorCQkubmFtZQk9ICJXTTg3NTAgU1BJIENvZGVjIiwKIAkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IHdtODc1MF9zcGlfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bTg3NTBfc3BpX3JlbW92ZSksCisJLmlkX3RhYmxlCT0gd204NzUwX3NwaV9pZCwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKaW5kZXggODdmMTRmOC4uZjdkY2FiZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCkBAIC0yNDMzLDcgKzI0MzMsOCBAQAogCiAJaWYgKHdtODkwNF9jb2RlYykgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODkwNCBpcyByZWdpc3RlcmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOwogCX0KIAogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CkBAIC0yNDYyLDcgKzI0NjMsOCBAQAogCWRlZmF1bHQ6CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIlVua25vd24gZGV2aWNlIHR5cGUgJWRcbiIsCiAJCQl3bTg5MDQtPmRldnR5cGUpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCiAJbWVtY3B5KGNvZGVjLT5yZWdfY2FjaGUsIHdtODkwNF9yZWcsIHNpemVvZih3bTg5MDRfcmVnKSk7CkBAIC0yNTY2LDE4ICsyNTY4LDE5IEBACiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2VuYWJsZTsKIAl9CiAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmd204OTA0X2RhaSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUk6ICVkXG4iLCByZXQpOwotCQlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycl9jb2RlYzsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXJyX2NvZGVjOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiBlcnJfZW5hYmxlOgogCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5MDQtPnN1cHBsaWVzKSwgd204OTA0LT5zdXBwbGllcyk7CiBlcnJfZ2V0OgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKaW5kZXggZTNjNGJiZi4uZjBjMTExMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCkBAIC04NDUsNiArODQ1LDcgQEAKIHN0YXRpYyBpbnQgd204OTQwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCB3bTg5NDBfcHJpdiAqd204OTQwOwogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIApAQCAtODU4LDcgKzg1OSwxMSBAQAogCWNvZGVjLT5jb250cm9sX2RhdGEgPSBpMmM7CiAJY29kZWMtPmRldiA9ICZpMmMtPmRldjsKIAotCXJldHVybiB3bTg5NDBfcmVnaXN0ZXIod204OTQwLCBTTkRfU09DX0kyQyk7CisJcmV0ID0gd204OTQwX3JlZ2lzdGVyKHdtODk0MCwgU05EX1NPQ19JMkMpOworCWlmIChyZXQgPCAwKQorCQlrZnJlZSh3bTg5NDApOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgd204OTQwX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCmluZGV4IGZlZGI3NjQuLjVmMDI1NTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpAQCAtOTY0LDcgKzk2NCw4IEBACiAKIAlpZiAod204OTU1X2NvZGVjKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkFub3RoZXIgV004OTU1IGlzIHJlZ2lzdGVyZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCiAJbXV0ZXhfaW5pdCgmY29kZWMtPm11dGV4KTsKQEAgLTEwNDcsMTggKzEwNDgsMTkgQEAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJfZW5hYmxlOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NTVfZGFpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7Ci0JCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2NvZGVjOwogCX0KIAogCXJldHVybiAwOwogCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGVycl9lbmFibGU6CiAJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk1NS0+c3VwcGxpZXMpLCB3bTg5NTUtPnN1cHBsaWVzKTsKIGVycl9nZXQ6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYwppbmRleCA3MjMzY2M2Li4zYzZlZTYxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKQEAgLTc5LDEyICs3OSwxMyBAQAogCXN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpsb3V0MTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqcm91dDE7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKm91dDM7CisJYm9vbCBkZWVtcGg7CisJaW50IHBsYXliYWNrX2ZzOwogfTsKIAogI2RlZmluZSB3bTg5NjBfcmVzZXQoYykJc25kX3NvY193cml0ZShjLCBXTTg5NjBfUkVTRVQsIDApCiAKIC8qIGVudW1lcmF0ZWQgY29udHJvbHMgKi8KLXN0YXRpYyBjb25zdCBjaGFyICp3bTg5NjBfZGVlbXBoW10gPSB7Ik5vbmUiLCAiMzJLaHoiLCAiNDQuMUtoeiIsICI0OEtoeiJ9Owogc3RhdGljIGNvbnN0IGNoYXIgKndtODk2MF9wb2xhcml0eVtdID0geyJObyBJbnZlcnNpb24iLCAiTGVmdCBJbnZlcnRlZCIsCiAJIlJpZ2h0IEludmVydGVkIiwgIlN0ZXJlbyBJbnZlcnNpb24ifTsKIHN0YXRpYyBjb25zdCBjaGFyICp3bTg5NjBfM2RfdXBwZXJfY3V0b2ZmW10gPSB7IkhpZ2giLCAiTG93In07CkBAIC05Myw3ICs5NCw2IEBACiBzdGF0aWMgY29uc3QgY2hhciAqd204OTYwX2FsY21vZGVbXSA9IHsiQUxDIiwgIkxpbWl0ZXIifTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NfZW51bSB3bTg5NjBfZW51bVtdID0gewotCVNPQ19FTlVNX1NJTkdMRShXTTg5NjBfREFDQ1RMMSwgMSwgNCwgd204OTYwX2RlZW1waCksCiAJU09DX0VOVU1fU0lOR0xFKFdNODk2MF9EQUNDVEwxLCA1LCA0LCB3bTg5NjBfcG9sYXJpdHkpLAogCVNPQ19FTlVNX1NJTkdMRShXTTg5NjBfREFDQ1RMMiwgNSwgNCwgd204OTYwX3BvbGFyaXR5KSwKIAlTT0NfRU5VTV9TSU5HTEUoV004OTYwXzNELCA2LCAyLCB3bTg5NjBfM2RfdXBwZXJfY3V0b2ZmKSwKQEAgLTEwMiw2ICsxMDIsNTkgQEAKIAlTT0NfRU5VTV9TSU5HTEUoV004OTYwX0FMQzMsIDgsIDIsIHdtODk2MF9hbGNtb2RlKSwKIH07CiAKK3N0YXRpYyBjb25zdCBpbnQgZGVlbXBoX3NldHRpbmdzW10gPSB7IDAsIDMyMDAwLCA0NDEwMCwgNDgwMDAgfTsKKworc3RhdGljIGludCB3bTg5NjBfc2V0X2RlZW1waChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IHdtODk2MF9wcml2ICp3bTg5NjAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgdmFsLCBpLCBiZXN0OworCisJLyogSWYgd2UncmUgdXNpbmcgZGVlbXBoYXNpcyBzZWxlY3QgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIHNhbXBsZQorCSAqIHJhdGUuCisJICovCisJaWYgKHdtODk2MC0+ZGVlbXBoKSB7CisJCWJlc3QgPSAxOworCQlmb3IgKGkgPSAyOyBpIDwgQVJSQVlfU0laRShkZWVtcGhfc2V0dGluZ3MpOyBpKyspIHsKKwkJCWlmIChhYnMoZGVlbXBoX3NldHRpbmdzW2ldIC0gd204OTYwLT5wbGF5YmFja19mcykgPAorCQkJICAgIGFicyhkZWVtcGhfc2V0dGluZ3NbYmVzdF0gLSB3bTg5NjAtPnBsYXliYWNrX2ZzKSkKKwkJCQliZXN0ID0gaTsKKwkJfQorCisJCXZhbCA9IGJlc3QgPDwgMTsKKwl9IGVsc2UgeworCQl2YWwgPSAwOworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIlNldCBkZWVtcGhhc2lzICVkXG4iLCB2YWwpOworCisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2MF9EQUNDVEwxLAorCQkJCSAgIDB4NiwgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5NjBfZ2V0X2RlZW1waChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB3bTg5NjBfcHJpdiAqd204OTYwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlyZXR1cm4gd204OTYwLT5kZWVtcGg7Cit9CisKK3N0YXRpYyBpbnQgd204OTYwX3B1dF9kZWVtcGgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlzdHJ1Y3Qgd204OTYwX3ByaXYgKndtODk2MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCBkZWVtcGggPSB1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdOworCisJaWYgKGRlZW1waCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJd204OTYwLT5kZWVtcGggPSBkZWVtcGg7CisKKwlyZXR1cm4gd204OTYwX3NldF9kZWVtcGgoY29kZWMpOworfQorCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUoYWRjX3RsdiwgLTk3MDAsIDUwLCAwKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShkYWNfdGx2LCAtMTI3MDAsIDUwLCAxKTsKIHN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShieXBhc3NfdGx2LCAtMjEwMCwgMzAwLCAwKTsKQEAgLTEzMSwyMyArMTg0LDI0IEBACiBTT0NfU0lOR0xFKCJTcGVha2VyIEFDIFZvbHVtZSIsIFdNODk2MF9DTEFTU0QzLCAwLCA1LCAwKSwKIAogU09DX1NJTkdMRSgiUENNIFBsYXliYWNrIC02ZEIgU3dpdGNoIiwgV004OTYwX0RBQ0NUTDEsIDcsIDEsIDApLAotU09DX0VOVU0oIkFEQyBQb2xhcml0eSIsIHdtODk2MF9lbnVtWzFdKSwKLVNPQ19FTlVNKCJQbGF5YmFjayBEZS1lbXBoYXNpcyIsIHdtODk2MF9lbnVtWzBdKSwKK1NPQ19FTlVNKCJBREMgUG9sYXJpdHkiLCB3bTg5NjBfZW51bVswXSksCiBTT0NfU0lOR0xFKCJBREMgSGlnaCBQYXNzIEZpbHRlciBTd2l0Y2giLCBXTTg5NjBfREFDQ1RMMSwgMCwgMSwgMCksCiAKIFNPQ19FTlVNKCJEQUMgUG9sYXJpdHkiLCB3bTg5NjBfZW51bVsyXSksCitTT0NfU0lOR0xFX0JPT0xfRVhUKCJEQUMgRGVlbXBoYXNpcyBTd2l0Y2giLCAwLAorCQkgICAgd204OTYwX2dldF9kZWVtcGgsIHdtODk2MF9wdXRfZGVlbXBoKSwKIAotU09DX0VOVU0oIjNEIEZpbHRlciBVcHBlciBDdXQtT2ZmIiwgd204OTYwX2VudW1bM10pLAotU09DX0VOVU0oIjNEIEZpbHRlciBMb3dlciBDdXQtT2ZmIiwgd204OTYwX2VudW1bNF0pLAorU09DX0VOVU0oIjNEIEZpbHRlciBVcHBlciBDdXQtT2ZmIiwgd204OTYwX2VudW1bMl0pLAorU09DX0VOVU0oIjNEIEZpbHRlciBMb3dlciBDdXQtT2ZmIiwgd204OTYwX2VudW1bM10pLAogU09DX1NJTkdMRSgiM0QgVm9sdW1lIiwgV004OTYwXzNELCAxLCAxNSwgMCksCiBTT0NfU0lOR0xFKCIzRCBTd2l0Y2giLCBXTTg5NjBfM0QsIDAsIDEsIDApLAogCi1TT0NfRU5VTSgiQUxDIEZ1bmN0aW9uIiwgd204OTYwX2VudW1bNV0pLAorU09DX0VOVU0oIkFMQyBGdW5jdGlvbiIsIHdtODk2MF9lbnVtWzRdKSwKIFNPQ19TSU5HTEUoIkFMQyBNYXggR2FpbiIsIFdNODk2MF9BTEMxLCA0LCA3LCAwKSwKIFNPQ19TSU5HTEUoIkFMQyBUYXJnZXQiLCBXTTg5NjBfQUxDMSwgMCwgMTUsIDEpLAogU09DX1NJTkdMRSgiQUxDIE1pbiBHYWluIiwgV004OTYwX0FMQzIsIDQsIDcsIDApLAogU09DX1NJTkdMRSgiQUxDIEhvbGQgVGltZSIsIFdNODk2MF9BTEMyLCAwLCAxNSwgMCksCi1TT0NfRU5VTSgiQUxDIE1vZGUiLCB3bTg5NjBfZW51bVs2XSksCitTT0NfRU5VTSgiQUxDIE1vZGUiLCB3bTg5NjBfZW51bVs1XSksCiBTT0NfU0lOR0xFKCJBTEMgRGVjYXkiLCBXTTg5NjBfQUxDMywgNCwgMTUsIDApLAogU09DX1NJTkdMRSgiQUxDIEF0dGFjayIsIFdNODk2MF9BTEMzLCAwLCAxNSwgMCksCiAKQEAgLTQzMyw2ICs0ODcsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCB7CisJaW50IHJhdGU7CisJdW5zaWduZWQgaW50IHZhbDsKK30gYWxjX3JhdGVzW10gPSB7CisJeyA0ODAwMCwgMCB9LAorCXsgNDQxMDAsIDAgfSwKKwl7IDMyMDAwLCAxIH0sCisJeyAyMjA1MCwgMiB9LAorCXsgMjQwMDAsIDIgfSwKKwl7IDE2MDAwLCAzIH0sCisJeyAxMTI1MCwgNCB9LAorCXsgMTIwMDAsIDQgfSwKKwl7ICA4MDAwLCA1IH0sCit9OworCiBzdGF0aWMgaW50IHdtODk2MF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCkBAIC00NDAsNyArNTA5LDkgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXYgPSBydGQtPnNvY2RldjsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzb2NkZXYtPmNhcmQtPmNvZGVjOworCXN0cnVjdCB3bTg5NjBfcHJpdiAqd204OTYwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJdTE2IGlmYWNlID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjBfSUZBQ0UxKSAmIDB4ZmZmMzsKKwlpbnQgaTsKIAogCS8qIGJpdCBzaXplICovCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKQEAgLTQ1NCw2ICs1MjUsMTggQEAKIAkJYnJlYWs7CiAJfQogCisJLyogVXBkYXRlIGZpbHRlcnMgZm9yIHRoZSBuZXcgcmF0ZSAqLworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXdtODk2MC0+cGxheWJhY2tfZnMgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCQl3bTg5NjBfc2V0X2RlZW1waChjb2RlYyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxjX3JhdGVzKTsgaSsrKQorCQkJaWYgKGFsY19yYXRlc1tpXS5yYXRlID09IHBhcmFtc19yYXRlKHBhcmFtcykpCisJCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywKKwkJCQkJCSAgICBXTTg5NjBfQUREQ1RMMywgMHg3LAorCQkJCQkJICAgIGFsY19yYXRlc1tpXS52YWwpOworCX0KKwogCS8qIHNldCBpZmFjZSAqLwogCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk2MF9JRkFDRTEsIGlmYWNlKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCmluZGV4IDViOWE3NTYuLjI1NDlkM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwpAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAlyZXQgPSB3bTg5NjFfcmVzZXQoY29kZWMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBpc3N1ZSByZXNldFxuIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qIEVuYWJsZSBjbGFzcyBXICovCkBAIC0xMTQ3LDE4ICsxMTQ3LDE5IEBACiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjb2RlYzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZ3bTg5NjFfZGFpKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIERBSTogJWRcbiIsIHJldCk7Ci0JCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYyhjb2RlYyk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2NvZGVjOwogCX0KIAogCXJldHVybiAwOwogCitlcnJfY29kZWM6CisJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGVycjoKIAlrZnJlZSh3bTg5NjEpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzQuYwppbmRleCBhMmM0YjJmLi4xNDY4ZmUxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc0LmMKQEAgLTY3MCw3ICs2NzAsOCBAQAogCiAJaWYgKHdtODk3NF9jb2RlYykgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJBbm90aGVyIFdNODk3NCBpcyByZWdpc3RlcmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOwogCX0KIAogCW11dGV4X2luaXQoJmNvZGVjLT5tdXRleCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NzguYwppbmRleCA1MWQ1ZjQzLi44YTFhZDc3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk3OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTc4LmMKQEAgLTEwNzYsNyArMTA3Niw2IEBACiBlcnJfY29kZWM6CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIGVycjoKLQlrZnJlZSh3bTg5NzgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwODUsMTMgKzEwODQsMTMgQEAKIAl3bTg5Nzhfc2V0X2JpYXNfbGV2ZWwoJndtODk3OC0+Y29kZWMsIFNORF9TT0NfQklBU19PRkYpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWkoJndtODk3OF9kYWkpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmd204OTc4LT5jb2RlYyk7Ci0Ja2ZyZWUod204OTc4KTsKIAl3bTg5NzhfY29kZWMgPSBOVUxMOwogfQogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTg5NzhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCWludCByZXQ7CiAJc3RydWN0IHdtODk3OF9wcml2ICp3bTg5Nzg7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCkBAIC0xMTA3LDEzICsxMTA2LDE4IEBACiAKIAljb2RlYy0+ZGV2ID0gJmkyYy0+ZGV2OwogCi0JcmV0dXJuIHdtODk3OF9yZWdpc3Rlcih3bTg5NzgpOworCXJldCA9IHdtODk3OF9yZWdpc3Rlcih3bTg5NzgpOworCWlmIChyZXQgPCAwKQorCQlrZnJlZSh3bTg5NzgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIF9fZGV2ZXhpdCBpbnQgd204OTc4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3Qgd204OTc4X3ByaXYgKndtODk3OCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXdtODk3OF91bnJlZ2lzdGVyKHdtODk3OCk7CisJa2ZyZWUod204OTc4KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKaW5kZXggYzAxODc3Mi4uZGQ4ZDkwOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJ3bTg5OTAuaCIKIAotI2RlZmluZSBXTTg5OTBfVkVSU0lPTiAiMC4yIgotCiAvKiBjb2RlYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCB3bTg5OTBfcHJpdiB7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKQEAgLTE1MTEsOCArMTUwOSw2IEBACiAJc3RydWN0IHdtODk5MF9wcml2ICp3bTg5OTA7CiAJaW50IHJldDsKIAotCXByX2luZm8oIldNODk5MCBBdWRpbyBDb2RlYyAlc1xuIiwgV004OTkwX1ZFUlNJT04pOwotCiAJc2V0dXAgPSBzb2NkZXYtPmNvZGVjX2RhdGE7CiAJY29kZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX3NvY19jb2RlYyksIEdGUF9LRVJORUwpOwogCWlmIChjb2RlYyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKaW5kZXggZTg0YTExNy4uYTg3MDQ2YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC0xNjc3LDYgKzE2NzcsMjYgQEAKIAogc3RhdGljIGludCB3bTg5OTRfcmVhZGFibGUodW5zaWduZWQgaW50IHJlZykKIHsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgV004OTk0X0dQSU9fMToKKwljYXNlIFdNODk5NF9HUElPXzI6CisJY2FzZSBXTTg5OTRfR1BJT18zOgorCWNhc2UgV004OTk0X0dQSU9fNDoKKwljYXNlIFdNODk5NF9HUElPXzU6CisJY2FzZSBXTTg5OTRfR1BJT182OgorCWNhc2UgV004OTk0X0dQSU9fNzoKKwljYXNlIFdNODk5NF9HUElPXzg6CisJY2FzZSBXTTg5OTRfR1BJT185OgorCWNhc2UgV004OTk0X0dQSU9fMTA6CisJY2FzZSBXTTg5OTRfR1BJT18xMToKKwljYXNlIFdNODk5NF9JTlRFUlJVUFRfU1RBVFVTXzE6CisJY2FzZSBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18yOgorCWNhc2UgV004OTk0X0lOVEVSUlVQVF9SQVdfU1RBVFVTXzI6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwogCWlmIChyZWcgPj0gQVJSQVlfU0laRShhY2Nlc3NfbWFza3MpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gYWNjZXNzX21hc2tzW3JlZ10ucmVhZGFibGUgIT0gMDsKQEAgLTIzNDEsNiArMjM2MSwyMCBAQAogCQkwLCAxLCAwKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMmxfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRNSUMgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMl9MRUZUX01JWEVSX1JPVVRJTkcsCisJCTEsIDEsIDApLAorU09DX0RBUE1fU0lOR0xFKCJBSUYyIFN3aXRjaCIsIFdNODk5NF9BSUYxX0FEQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAorCQkwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYxYWRjMnJfbWl4W10gPSB7CitTT0NfREFQTV9TSU5HTEUoIkRNSUMgU3dpdGNoIiwgV004OTk0X0FJRjFfQURDMl9SSUdIVF9NSVhFUl9ST1VUSU5HLAorCQkxLCAxLCAwKSwKK1NPQ19EQVBNX1NJTkdMRSgiQUlGMiBTd2l0Y2giLCBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX01JWEVSX1JPVVRJTkcsCisJCTAsIDEsIDApLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpZjJkYWMybF9taXhbXSA9IHsKIFNPQ19EQVBNX1NJTkdMRSgiUmlnaHQgU2lkZXRvbmUgU3dpdGNoIiwgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HLAogCQk1LCAxLCAwKSwKQEAgLTI0NzIsNiArMjUwNiw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgd204OTk0X2RhcG1fd2lkZ2V0c1tdID0gewogU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMURBVCIpLAogU05EX1NPQ19EQVBNX0lOUFVUKCJETUlDMkRBVCIpLAorU05EX1NPQ19EQVBNX0lOUFVUKCJDbG9jayIpLAogCiBTTkRfU09DX0RBUE1fU1VQUExZKCJDTEtfU1lTIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBjbGtfc3lzX2V2ZW50LAogCQkgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpLApAQCAtMjUwNiw2ICsyNTQxLDExIEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIkFJRjFBREMxUiBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJICAgYWlmMWFkYzFyX21peCwgQVJSQVlfU0laRShhaWYxYWRjMXJfbWl4KSksCiAKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzJMIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYxYWRjMmxfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMybF9taXgpKSwKK1NORF9TT0NfREFQTV9NSVhFUigiQUlGMUFEQzJSIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkgICBhaWYxYWRjMnJfbWl4LCBBUlJBWV9TSVpFKGFpZjFhZGMycl9taXgpKSwKKwogU05EX1NPQ19EQVBNX01JWEVSKCJBSUYyREFDMkwgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCSAgIGFpZjJkYWMybF9taXgsIEFSUkFZX1NJWkUoYWlmMmRhYzJsX21peCkpLAogU05EX1NPQ19EQVBNX01JWEVSKCJBSUYyREFDMlIgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCkBAIC0yNjY4LDYgKzI3MDgsMTQgQEAKIAl7ICJBSUYxQURDMVIgTWl4ZXIiLCAiQURDL0RNSUMgU3dpdGNoIiwgIkFEQ1IgTXV4IiB9LAogCXsgIkFJRjFBREMxUiBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDUiIgfSwKIAorCXsgIkFJRjFBREMyTCIsIE5VTEwsICJBSUYxQURDMkwgTWl4ZXIiIH0sCisJeyAiQUlGMUFEQzJMIE1peGVyIiwgIkRNSUMgU3dpdGNoIiwgIkRNSUMyTCIgfSwKKwl7ICJBSUYxQURDMkwgTWl4ZXIiLCAiQUlGMiBTd2l0Y2giLCAiQUlGMkRBQ0wiIH0sCisKKwl7ICJBSUYxQURDMlIiLCBOVUxMLCAiQUlGMUFEQzJSIE1peGVyIiB9LAorCXsgIkFJRjFBREMyUiBNaXhlciIsICJETUlDIFN3aXRjaCIsICJETUlDMlIiIH0sCisJeyAiQUlGMUFEQzJSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAorCiAJLyogUGluIGxldmVsIHJvdXRpbmcgZm9yIEFJRjMgKi8KIAl7ICJBSUYxREFDMUwiLCBOVUxMLCAiQUlGMURBQyBNdXgiIH0sCiAJeyAiQUlGMURBQzFSIiwgTlVMTCwgIkFJRjFEQUMgTXV4IiB9LApAQCAtMjk0NiwxMSArMjk5NCwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9wY2xrX2RpdnNbXSA9IHsgMTAsIDIwLCAzMCwgNDAsIDU1LCA2MCwgODAsIDEyMCwgMTYwIH07CisKIHN0YXRpYyBpbnQgd204OTk0X3NldF9kYWlfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAogCQlpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOwogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJaW50IGk7CiAKIAlzd2l0Y2ggKGRhaS0+aWQpIHsKIAljYXNlIDE6CkBAIC0yOTg4LDYgKzMwMzksMjUgQEAKIAkJZGV2X2RiZyhkYWktPmRldiwgIkFJRiVkIHVzaW5nIEZMTDJcbiIsIGRhaS0+aWQpOwogCQlicmVhazsKIAorCWNhc2UgV004OTk0X1NZU0NMS19PUENMSzoKKwkJLyogU3BlY2lhbCBjYXNlIC0gYSBkaXZpc2lvbiAodGltZXMgMTApIGlzIGdpdmVuIGFuZAorCQkgKiBubyBlZmZlY3Qgb24gbWFpbiBjbG9ja2luZy4gCisJCSAqLworCQlpZiAoZnJlcSkgeworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3BjbGtfZGl2cyk7IGkrKykKKwkJCQlpZiAob3BjbGtfZGl2c1tpXSA9PSBmcmVxKQorCQkJCQlicmVhazsKKwkJCWlmIChpID09IEFSUkFZX1NJWkUob3BjbGtfZGl2cykpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMiwKKwkJCQkJICAgIFdNODk5NF9PUENMS19ESVZfTUFTSywgaSk7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJCQkgICAgV004OTk0X09QQ0xLX0VOQSwgV004OTk0X09QQ0xLX0VOQSk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8yLAorCQkJCQkgICAgV004OTk0X09QQ0xLX0VOQSwgMCk7CisJCX0KKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQwMDQsNiArNDA3NCwxMSBAQAogCQkJICAgIDEgPDwgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9TSElGVCwKIAkJCSAgICAxIDw8IFdNODk5NF9BSUYyREFDXzNEX0dBSU5fU0hJRlQpOwogCisJLyogVW5jb25kaXRpb25hbGx5IGVuYWJsZSBBSUYxIEFEQyBURE0gbW9kZTsgaXQgb25seSBhZmZlY3RzCisJICogYmVoYXZpb3VyIG9uIGlkbGUgVERNIGNsb2NrIGN5Y2xlcy4gKi8KKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DT05UUk9MXzEsCisJCQkgICAgV004OTk0X0FJRjFBRENfVERNLCBXTTg5OTRfQUlGMUFEQ19URE0pOworCiAJd204OTk0X3VwZGF0ZV9jbGFzc193KGNvZGVjKTsKIAogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY29kZWMoY29kZWMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaCBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmgKaW5kZXggNzA3MmRjNS4uMmUwY2E2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5oCkBAIC0yMCw2ICsyMCw5IEBACiAjZGVmaW5lIFdNODk5NF9TWVNDTEtfRkxMMSAgMwogI2RlZmluZSBXTTg5OTRfU1lTQ0xLX0ZMTDIgIDQKIAorLyogT1BDTEsgaXMgYWxzbyBjb25maWd1cmVkIHdpdGggc2V0X2RhaV9zeXNjbGssIHNwZWNpZnkgZGl2aXNpb24qMTAgYXMgcmF0ZS4gKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19PUENMSyA1CisKICNkZWZpbmUgV004OTk0X0ZMTDEgMQogI2RlZmluZSBXTTg5OTRfRkxMMiAyCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCmluZGV4IDEzMTg2ZmIuLjc2YjM3ZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwpAQCAtMTM1Niw3ICsxMzU2LDcgQEAKIAlyZXQgPSBzbmRfc29jX2NvZGVjX3NldF9jYWNoZV9pbyhjb2RlYywgOCwgMTYsIGNvbnRyb2wpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNhY2hlIEkvTzogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyOwogCX0KIAogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV005MDgxX1NPRlRXQVJFX1JFU0VUKTsKQEAgLTEzNjksNyArMTM2OSw3IEBACiAJcmV0ID0gd205MDgxX3Jlc2V0KGNvZGVjKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gaXNzdWUgcmVzZXRcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAl9CiAKIAl3bTkwODFfc2V0X2JpYXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19TVEFOREJZKTsKQEAgLTEzODgsMTggKzEzODgsMTkgQEAKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAJfQogCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJndtOTA4MV9kYWkpOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgREFJOiAlZFxuIiwgcmV0KTsKLQkJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKGNvZGVjKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnJfY29kZWM7CiAJfQogCiAJcmV0dXJuIDA7CiAKK2Vycl9jb2RlYzoKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoY29kZWMpOwogZXJyOgogCWtmcmVlKHdtOTA4MSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggMTZmMWE1Ny4uMmNiODE1MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTQxMCw2ICs0MTAsOCBAQAogCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9ETFkgfAogCQkJCSAgICBXTTg5OTNfSFBPVVQxUl9ETFksIDApOwogCisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5M19EQ19TRVJWT18wLCAwKTsKKwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTNfUE9XRVJfTUFOQUdFTUVOVF8xLAogCQkJCSAgICBXTTg5OTNfSFBPVVQxTF9FTkEgfCBXTTg5OTNfSFBPVVQxUl9FTkEsCiAJCQkJICAgIDApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKaW5kZXggYWRhZGNkMy4uOWU4OTMyYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9hc3AuaD4KIAogI2luY2x1ZGUgImRhdmluY2ktcGNtLmgiCisjaW5jbHVkZSAiZGF2aW5jaS1pMnMuaCIKIAogCiAvKgpAQCAtNjgsMTYgKzY5LDIxIEBACiAjZGVmaW5lIERBVklOQ0lfTUNCU1BfUkNSX1JEQVRETFkodikJKCh2KSA8PCAxNikKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9SQ1JfUkZJRwkJKDEgPDwgMTgpCiAjZGVmaW5lIERBVklOQ0lfTUNCU1BfUkNSX1JXRExFTjIodikJKCh2KSA8PCAyMSkKKyNkZWZpbmUgREFWSU5DSV9NQ0JTUF9SQ1JfUkZSTEVOMih2KQkoKHYpIDw8IDI0KQorI2RlZmluZSBEQVZJTkNJX01DQlNQX1JDUl9SUEhBU0UJQklUKDMxKQogCiAjZGVmaW5lIERBVklOQ0lfTUNCU1BfWENSX1hXRExFTjEodikJKCh2KSA8PCA1KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1hDUl9YRlJMRU4xKHYpCSgodikgPDwgOCkKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9YQ1JfWERBVERMWSh2KQkoKHYpIDw8IDE2KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1hDUl9YRklHCQkoMSA8PCAxOCkKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9YQ1JfWFdETEVOMih2KQkoKHYpIDw8IDIxKQorI2RlZmluZSBEQVZJTkNJX01DQlNQX1hDUl9YRlJMRU4yKHYpCSgodikgPDwgMjQpCisjZGVmaW5lIERBVklOQ0lfTUNCU1BfWENSX1hQSEFTRQlCSVQoMzEpCiAKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9TUkdSX0ZXSUQodikJKCh2KSA8PCA4KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1NSR1JfRlBFUih2KQkoKHYpIDw8IDE2KQogI2RlZmluZSBEQVZJTkNJX01DQlNQX1NSR1JfRlNHTQkJKDEgPDwgMjgpCisjZGVmaW5lIERBVklOQ0lfTUNCU1BfU1JHUl9DTEtTTQlCSVQoMjkpCiAKICNkZWZpbmUgREFWSU5DSV9NQ0JTUF9QQ1JfQ0xLUlAJCSgxIDw8IDApCiAjZGVmaW5lIERBVklOQ0lfTUNCU1BfUENSX0NMS1hQCQkoMSA8PCAxKQpAQCAtMTE2LDYgKzEyMiw3IEBACiB9OwogCiBzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcwlkbWFfcGFyYW1zWzJdOwogCXZvaWQgX19pb21lbQkJCSpiYXNlOwogI2RlZmluZSBNT0RfRFNQX0EJMApAQCAtMTQ0LDYgKzE1MSwxMSBAQAogCSAqIHdvbid0IGVuZCB1cCBiZWluZyBzd2FwcGVkIGJlY2F1c2Ugb2YgdGhlIHVuZGVycnVuLgogCSAqLwogCXVuc2lnbmVkIGVuYWJsZV9jaGFubmVsX2NvbWJpbmU6MTsKKworCXVuc2lnbmVkIGludCBmbXQ7CisJaW50IGNsa19kaXY7CisJaW50IGNsa19pbnB1dF9waW47CisJYm9vbCBpMnNfYWNjdXJhdGVfc2NrOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LApAQCAtMjU0LDEwICsyNjYsMTIgQEAKIAlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgcGNyOwogCXVuc2lnbmVkIGludCBzcmdyOworCS8qIEF0dGVudGlvbiBzcmdyIGlzIHVwZGF0ZWQgYnkgaHdfcGFyYW1zISAqLwogCXNyZ3IgPSBEQVZJTkNJX01DQlNQX1NSR1JfRlNHTSB8CiAJCURBVklOQ0lfTUNCU1BfU1JHUl9GUEVSKERFRkFVTFRfQklUUEVSU0FNUExFICogMiAtIDEpIHwKIAkJREFWSU5DSV9NQ0JTUF9TUkdSX0ZXSUQoREVGQVVMVF9CSVRQRVJTQU1QTEUgLSAxKTsKIAorCWRldi0+Zm10ID0gZm10OwogCS8qIHNldCBtYXN0ZXIvc2xhdmUgYXVkaW8gaW50ZXJmYWNlICovCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKQEAgLTI2OCwxMSArMjgyLDI2IEBACiAJCQlEQVZJTkNJX01DQlNQX1BDUl9DTEtSTTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgotCQkvKiBNY0JTUCBDTEtSIHBpbiBpcyB0aGUgaW5wdXQgZm9yIHRoZSBTYW1wbGUgUmF0ZSBHZW5lcmF0b3IuCi0JCSAqIE1jQlNQIEZTUiBhbmQgRlNYIGFyZSBkcml2ZW4gYnkgdGhlIFNhbXBsZSBSYXRlIEdlbmVyYXRvci4gKi8KLQkJcGNyID0gREFWSU5DSV9NQ0JTUF9QQ1JfU0NMS01FIHwKLQkJCURBVklOQ0lfTUNCU1BfUENSX0ZTWE0gfAotCQkJREFWSU5DSV9NQ0JTUF9QQ1JfRlNSTTsKKwkJcGNyID0gREFWSU5DSV9NQ0JTUF9QQ1JfRlNSTSB8IERBVklOQ0lfTUNCU1BfUENSX0ZTWE07CisJCS8qCisJCSAqIFNlbGVjdGlvbiBvZiB0aGUgY2xvY2sgaW5wdXQgcGluIHRoYXQgaXMgdGhlCisJCSAqIGlucHV0IGZvciB0aGUgU2FtcGxlIFJhdGUgR2VuZXJhdG9yLgorCQkgKiBNY0JTUCBGU1IgYW5kIEZTWCBhcmUgZHJpdmVuIGJ5IHRoZSBTYW1wbGUgUmF0ZQorCQkgKiBHZW5lcmF0b3IuCisJCSAqLworCQlzd2l0Y2ggKGRldi0+Y2xrX2lucHV0X3BpbikgeworCQljYXNlIE1DQlNQX0NMS1M6CisJCQlwY3IgfD0gREFWSU5DSV9NQ0JTUF9QQ1JfQ0xLWE0gfAorCQkJCURBVklOQ0lfTUNCU1BfUENSX0NMS1JNOworCQkJYnJlYWs7CisJCWNhc2UgTUNCU1BfQ0xLUjoKKwkJCXBjciB8PSBEQVZJTkNJX01DQlNQX1BDUl9TQ0xLTUU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJiYWQgY2xrX2lucHV0X3BpblxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJLyogY29kZWMgaXMgbWFzdGVyICovCkBAIC0zNzIsNiArNDAxLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZGF2aW5jaV9pMnNfZGFpX3NldF9jbGtkaXYoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQkJCWludCBkaXZfaWQsIGludCBkaXYpCit7CisJc3RydWN0IGRhdmluY2lfbWNic3BfZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGl2X2lkICE9IERBVklOQ0lfTUNCU1BfQ0xLR0RWKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldi0+Y2xrX2RpdiA9IGRpdjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkYXZpbmNpX2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAogCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKQEAgLTM4MCw4ICs0MjEsOCBAQAogCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KIAkJCQkJJmRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9pbnRlcnZhbCAqaSA9IE5VTEw7Ci0JaW50IG1jYnNwX3dvcmRfbGVuZ3RoOwotCXVuc2lnbmVkIGludCByY3IsIHhjciwgc3JncjsKKwlpbnQgbWNic3Bfd29yZF9sZW5ndGgsIG1hc3RlcjsKKwl1bnNpZ25lZCBpbnQgcmNyLCB4Y3IsIHNyZ3IsIGNsa19kaXYsIGZyZXEsIGZyYW1lc2l6ZTsKIAl1MzIgc3BjcjsKIAlzbmRfcGNtX2Zvcm1hdF90IGZtdDsKIAl1bnNpZ25lZCBlbGVtZW50X2NudCA9IDE7CkBAIC0zOTYsMTIgKzQzNyw1OSBAQAogCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfU1BDUl9SRUcsIHNwY3IpOwogCX0KIAotCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUyk7Ci0Jc3JnciA9IERBVklOQ0lfTUNCU1BfU1JHUl9GU0dNOwotCXNyZ3IgfD0gREFWSU5DSV9NQ0JTUF9TUkdSX0ZXSUQoc25kX2ludGVydmFsX3ZhbHVlKGkpIC0gMSk7CisJbWFzdGVyID0gZGV2LT5mbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSzsKKwlmbXQgPSBwYXJhbXNfZm9ybWF0KHBhcmFtcyk7CisJbWNic3Bfd29yZF9sZW5ndGggPSBhc3Bfd29yZF9sZW5ndGhbZm10XTsKIAotCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GUkFNRV9CSVRTKTsKLQlzcmdyIHw9IERBVklOQ0lfTUNCU1BfU1JHUl9GUEVSKHNuZF9pbnRlcnZhbF92YWx1ZShpKSAtIDEpOworCXN3aXRjaCAobWFzdGVyKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQlmcmVxID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrKTsKKwkJc3JnciA9IERBVklOQ0lfTUNCU1BfU1JHUl9GU0dNIHwKKwkJICAgICAgIERBVklOQ0lfTUNCU1BfU1JHUl9DTEtTTTsKKwkJc3JnciB8PSBEQVZJTkNJX01DQlNQX1NSR1JfRldJRChtY2JzcF93b3JkX2xlbmd0aCAqCisJCQkJCQk4IC0gMSk7CisJCWlmIChkZXYtPmkyc19hY2N1cmF0ZV9zY2spIHsKKwkJCWNsa19kaXYgPSAyNTY7CisJCQlkbyB7CisJCQkJZnJhbWVzaXplID0gKGZyZXEgLyAoLS1jbGtfZGl2KSkgLworCQkJCXBhcmFtcy0+cmF0ZV9udW0gKgorCQkJCQlwYXJhbXMtPnJhdGVfZGVuOworCQkJfSB3aGlsZSAoKChmcmFtZXNpemUgPCAzMykgfHwgKGZyYW1lc2l6ZSA+IDQwOTUpKSAmJgorCQkJCSAoY2xrX2RpdikpOworCQkJY2xrX2Rpdi0tOworCQkJc3JnciB8PSBEQVZJTkNJX01DQlNQX1NSR1JfRlBFUihmcmFtZXNpemUgLSAxKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHN5bW1ldHJpYyB3YXZlZm9ybXMgKi8KKwkJCWNsa19kaXYgPSBmcmVxIC8gKG1jYnNwX3dvcmRfbGVuZ3RoICogMTYpIC8KKwkJCQkgIHBhcmFtcy0+cmF0ZV9udW0gKiBwYXJhbXMtPnJhdGVfZGVuOworCQkJc3JnciB8PSBEQVZJTkNJX01DQlNQX1NSR1JfRlBFUihtY2JzcF93b3JkX2xlbmd0aCAqCisJCQkJCQkJMTYgLSAxKTsKKwkJfQorCQljbGtfZGl2ICY9IDB4RkY7CisJCXNyZ3IgfD0gY2xrX2RpdjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlzcmdyID0gREFWSU5DSV9NQ0JTUF9TUkdSX0ZTR007CisJCWNsa19kaXYgPSBkZXYtPmNsa19kaXYgLSAxOworCQlzcmdyIHw9IERBVklOQ0lfTUNCU1BfU1JHUl9GV0lEKG1jYnNwX3dvcmRfbGVuZ3RoICogOCAtIDEpOworCQlzcmdyIHw9IERBVklOQ0lfTUNCU1BfU1JHUl9GUEVSKG1jYnNwX3dvcmRfbGVuZ3RoICogMTYgLSAxKTsKKwkJY2xrX2RpdiAmPSAweEZGOworCQlzcmdyIHw9IGNsa19kaXY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJLyogQ2xvY2sgYW5kIGZyYW1lIHN5bmMgZ2l2ZW4gZnJvbSBleHRlcm5hbCBzb3VyY2VzICovCisJCWkgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUyk7CisJCXNyZ3IgPSBEQVZJTkNJX01DQlNQX1NSR1JfRlNHTTsKKwkJc3JnciB8PSBEQVZJTkNJX01DQlNQX1NSR1JfRldJRChzbmRfaW50ZXJ2YWxfdmFsdWUoaSkgLSAxKTsKKwkJcHJfZGVidWcoIiVzIC0gJWQgIEZXSUQgc2V0OiByZS1yZWFkIHNyZ3IgPSAlWFxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgc25kX2ludGVydmFsX3ZhbHVlKGkpIC0gMSk7CisKKwkJaSA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZSQU1FX0JJVFMpOworCQlzcmdyIHw9IERBVklOQ0lfTUNCU1BfU1JHUl9GUEVSKHNuZF9pbnRlcnZhbF92YWx1ZShpKSAtIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1NSR1JfUkVHLCBzcmdyKTsKIAogCXJjciA9IERBVklOQ0lfTUNCU1BfUkNSX1JGSUc7CkBAIC00MjYsMTIgKzUxNCw0MSBAQAogCQkJZWxlbWVudF9jbnQgPSAxOwogCQkJZm10ID0gZG91YmxlX2ZtdFtmbXRdOwogCQl9CisJCXN3aXRjaCAobWFzdGVyKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZNOgorCQkJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjIoMCk7CisJCQl4Y3IgfD0gREFWSU5DSV9NQ0JTUF9YQ1JfWEZSTEVOMigwKTsKKwkJCXJjciB8PSBEQVZJTkNJX01DQlNQX1JDUl9SUEhBU0U7CisJCQl4Y3IgfD0gREFWSU5DSV9NQ0JTUF9YQ1JfWFBIQVNFOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQkJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjIoZWxlbWVudF9jbnQgLSAxKTsKKwkJCXhjciB8PSBEQVZJTkNJX01DQlNQX1hDUl9YRlJMRU4yKGVsZW1lbnRfY250IC0gMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCWRtYV9wYXJhbXMtPmFjbnQgPSBkbWFfcGFyYW1zLT5kYXRhX3R5cGUgPSBkYXRhX3R5cGVbZm10XTsKIAlkbWFfcGFyYW1zLT5maWZvX2xldmVsID0gMDsKIAltY2JzcF93b3JkX2xlbmd0aCA9IGFzcF93b3JkX2xlbmd0aFtmbXRdOwotCXJjciB8PSBEQVZJTkNJX01DQlNQX1JDUl9SRlJMRU4xKGVsZW1lbnRfY250IC0gMSk7Ci0JeGNyIHw9IERBVklOQ0lfTUNCU1BfWENSX1hGUkxFTjEoZWxlbWVudF9jbnQgLSAxKTsKKworCXN3aXRjaCAobWFzdGVyKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJcmNyIHw9IERBVklOQ0lfTUNCU1BfUkNSX1JGUkxFTjEoMCk7CisJCXhjciB8PSBEQVZJTkNJX01DQlNQX1hDUl9YRlJMRU4xKDApOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQlyY3IgfD0gREFWSU5DSV9NQ0JTUF9SQ1JfUkZSTEVOMShlbGVtZW50X2NudCAtIDEpOworCQl4Y3IgfD0gREFWSU5DSV9NQ0JTUF9YQ1JfWEZSTEVOMShlbGVtZW50X2NudCAtIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyY3IgfD0gREFWSU5DSV9NQ0JTUF9SQ1JfUldETEVOMShtY2JzcF93b3JkX2xlbmd0aCkgfAogCQlEQVZJTkNJX01DQlNQX1JDUl9SV0RMRU4yKG1jYnNwX3dvcmRfbGVuZ3RoKTsKQEAgLTQ0Miw2ICs1NTksMTAgQEAKIAkJZGF2aW5jaV9tY2JzcF93cml0ZV9yZWcoZGV2LCBEQVZJTkNJX01DQlNQX1hDUl9SRUcsIHhjcik7CiAJZWxzZQogCQlkYXZpbmNpX21jYnNwX3dyaXRlX3JlZyhkZXYsIERBVklOQ0lfTUNCU1BfUkNSX1JFRywgcmNyKTsKKworCXByX2RlYnVnKCIlcyAtICVkICBzcmdyPSVYXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHNyZ3IpOworCXByX2RlYnVnKCIlcyAtICVkICB4Y3I9JVhcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgeGNyKTsKKwlwcl9kZWJ1ZygiJXMgLSAlZCAgcmNyPSVYXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHJjcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwMCw2ICs2MjEsNyBAQAogCS50cmlnZ2VyCT0gZGF2aW5jaV9pMnNfdHJpZ2dlciwKIAkuaHdfcGFyYW1zCT0gZGF2aW5jaV9pMnNfaHdfcGFyYW1zLAogCS5zZXRfZm10CT0gZGF2aW5jaV9pMnNfc2V0X2RhaV9mbXQsCisJLnNldF9jbGtkaXYJPSBkYXZpbmNpX2kyc19kYWlfc2V0X2Nsa2RpdiwKIAogfTsKIApAQCAtNTI2LDYgKzY0OCw4IEBACiAJc3RydWN0IHNuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaW9hcmVhLCAqcmVzOworCWVudW0gZG1hX2V2ZW50X3EgYXNwX2NoYW5fcSA9IEVWRU5UUV8wOworCWVudW0gZG1hX2V2ZW50X3EgcmFtX2NoYW5fcSA9IEVWRU5UUV8xOwogCWludCByZXQ7CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtNTUyLDcgKzY3NiwxNyBAQAogCQkJcGRhdGEtPnNyYW1fc2l6ZV9wbGF5YmFjazsKIAkJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3JhbV9zaXplID0KIAkJCXBkYXRhLT5zcmFtX3NpemVfY2FwdHVyZTsKKwkJZGV2LT5jbGtfaW5wdXRfcGluID0gcGRhdGEtPmNsa19pbnB1dF9waW47CisJCWRldi0+aTJzX2FjY3VyYXRlX3NjayA9IHBkYXRhLT5pMnNfYWNjdXJhdGVfc2NrOworCQlhc3BfY2hhbl9xID0gcGRhdGEtPmFzcF9jaGFuX3E7CisJCXJhbV9jaGFuX3EgPSBwZGF0YS0+cmFtX2NoYW5fcTsKIAl9CisKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uYXNwX2NoYW5fcQk9IGFzcF9jaGFuX3E7CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnJhbV9jaGFuX3EJPSByYW1fY2hhbl9xOworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmFzcF9jaGFuX3EJPSBhc3BfY2hhbl9xOworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnJhbV9jaGFuX3EJPSByYW1fY2hhbl9xOworCiAJZGV2LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwogCWlmIChJU19FUlIoZGV2LT5jbGspKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC01ODQsNiArNzE4LDcgQEAKIAkJZ290byBlcnJfZnJlZV9tZW07CiAJfQogCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKIAogCWRhdmluY2lfaTJzX2RhaS5wcml2YXRlX2RhdGEgPSBkZXY7CiAJZGF2aW5jaV9pMnNfZGFpLmNhcHR1cmUuZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuaAppbmRleCAyNDE2NDhjLi4wYjFlNzdiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5oCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmgKQEAgLTEyLDYgKzEyLDExIEBACiAjaWZuZGVmIF9EQVZJTkNJX0kyU19ICiAjZGVmaW5lIF9EQVZJTkNJX0kyU19ICiAKKy8qIE1jQlNQIGRpdmlkZXJzICovCitlbnVtIGRhdmluY2lfbWNic3BfZGl2IHsKKwlEQVZJTkNJX01DQlNQX0NMS0dEViwgICAgICAgICAgICAgIC8qIFNhbXBsZSByYXRlIGdlbmVyYXRvciBkaXZpZGVyICovCit9OworCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIGRhdmluY2lfaTJzX2RhaTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggZDM5NTUwOS4uYjI0NzIwOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtODkwLDcgKzg5MCw4IEBACiAJZGV2LT5yeG51bWV2dCA9IHBkYXRhLT5yeG51bWV2dDsKIAogCWRtYV9kYXRhID0gJmRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKLQlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+YXNwX2NoYW5fcSA9IHBkYXRhLT5hc3BfY2hhbl9xOworCWRtYV9kYXRhLT5yYW1fY2hhbl9xID0gcGRhdGEtPnJhbV9jaGFuX3E7CiAJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpIChwZGF0YS0+dHhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwogCkBAIC05MDQsNyArOTA1LDggQEAKIAlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKLQlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+YXNwX2NoYW5fcSA9IHBkYXRhLT5hc3BfY2hhbl9xOworCWRtYV9kYXRhLT5yYW1fY2hhbl9xID0gcGRhdGEtPnJhbV9jaGFuX3E7CiAJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKIAkJCQkJCQlpb192MnAoZGV2LT5iYXNlKSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCmluZGV4IDJkYzQwNmYuLmE3MTI0MTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJLyogUmVxdWVzdCByYW0gbWFzdGVyIGNoYW5uZWwgKi8KIAlsaW5rID0gcHJ0ZC0+cmFtX2NoYW5uZWwgPSBlZG1hX2FsbG9jX2NoYW5uZWwoRURNQV9DSEFOTkVMX0FOWSwKIAkJCQkgIGRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKLQkJCQkgIEVWRU5UUV8xKTsKKwkJCQkgIHBydGQtPnBhcmFtcy0+cmFtX2NoYW5fcSk7CiAJaWYgKGxpbmsgPCAwKQogCQlnb3RvIGV4aXQxOwogCkBAIC00NzcsNyArNDc3LDggQEAKIAogCS8qIFJlcXVlc3QgYXNwIG1hc3RlciBETUEgY2hhbm5lbCAqLwogCWxpbmsgPSBwcnRkLT5hc3BfY2hhbm5lbCA9IGVkbWFfYWxsb2NfY2hhbm5lbChwYXJhbXMtPmNoYW5uZWwsCi0JCQlkYXZpbmNpX3BjbV9kbWFfaXJxLCBzdWJzdHJlYW0sIEVWRU5UUV8wKTsKKwkJCWRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKKwkJCXBydGQtPnBhcmFtcy0+YXNwX2NoYW5fcSk7CiAJaWYgKGxpbmsgPCAwKQogCQlnb3RvIGV4aXQxOwogCkBAIC04MDAsNyArODAxLDcgQEAKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAogCQkJCSAgICAgIGJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKIAkJYnVmLT5hcmVhID0gTlVMTDsKLQkJaXJhbV9kbWEgPSAoc3RydWN0IHNuZF9kbWFfYnVmZmVyICopYnVmLT5wcml2YXRlX2RhdGE7CisJCWlyYW1fZG1hID0gYnVmLT5wcml2YXRlX2RhdGE7CiAJCWlmIChpcmFtX2RtYSkgewogCQkJc3JhbV9mcmVlKGlyYW1fZG1hLT5hcmVhLCBpcmFtX2RtYS0+Ynl0ZXMpOwogCQkJa2ZyZWUoaXJhbV9kbWEpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKaW5kZXggMDc2NDk0NC4uYjc5OWEwMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCkBAIC0yMSw3ICsyMSw4IEBACiAJdW5zaWduZWQgc2hvcnQgYWNudDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwogCXVuc2lnbmVkIHNyYW1fc2l6ZTsKLQllbnVtIGRtYV9ldmVudF9xIGV2ZW50cV9ubzsJLyogZXZlbnQgcXVldWUgbnVtYmVyICovCisJZW51bSBkbWFfZXZlbnRfcSBhc3BfY2hhbl9xOwkvKiBldmVudCBxdWV1ZSBudW1iZXIgZm9yIEFTUCBjaGFubmVsICovCisJZW51bSBkbWFfZXZlbnRfcSByYW1fY2hhbl9xOwkvKiBldmVudCBxdWV1ZSBudW1iZXIgZm9yIFJBTSBjaGFubmVsICovCiAJdW5zaWduZWQgY2hhciBkYXRhX3R5cGU7CS8qIHhmZXIgZGF0YSB0eXBlICovCiAJdW5zaWduZWQgY2hhciBjb252ZXJ0X21vbm9fc3RlcmVvOwogCXVuc2lnbmVkIGludCBmaWZvX2xldmVsOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS12Y2lmLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXZjaWYuYwppbmRleCA5YWE5ODBkLi40ODY3ODUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXZjaWYuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXZjaWYuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJaW50IHJldDsKIAogCWRhdmluY2lfdmNpZl9kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGF2aW5jaV92Y2lmX2RldiksIEdGUF9LRVJORUwpOwotCWlmICghZGF2aW5jaV92YykgeworCWlmICghZGF2aW5jaV92Y2lmX2RldikgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsCiAJCQkiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcHJpdmF0ZSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZXA5M3h4L0tjb25maWcgYi9zb3VuZC9zb2MvZXA5M3h4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYxN2Y1NgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9lcDkzeHgvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgU05EX0VQOTNYWF9TT0MKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIHRoZSBDaXJydXMgTG9naWMgRVA5M3h4IHNlcmllcyIKKwlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYICYmIFNORF9TT0MKKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KKwkgIHRoZSBFUDkzeHggSTJTIGludGVyZmFjZS4KKworY29uZmlnIFNORF9FUDkzWFhfU09DX0kyUworCXRyaXN0YXRlCisKK2NvbmZpZyBTTkRfRVA5M1hYX1NPQ19TTkFQUEVSQ0wxNQorICAgICAgICB0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIEJsdWV3YXRlciBTeXN0ZW1zIFNuYXBwZXIgQ0wxNSBtb2R1bGUiCisgICAgICAgIGRlcGVuZHMgb24gU05EX0VQOTNYWF9TT0MgJiYgTUFDSF9TTkFQUEVSX0NMMTUKKyAgICAgICAgc2VsZWN0IFNORF9FUDkzWFhfU09DX0kyUworICAgICAgICBzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMworICAgICAgICBoZWxwCisgICAgICAgICAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBJMlMgYXVkaW8gb24gdGhlCisgICAgICAgICAgQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IG1vZHVsZS4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9lcDkzeHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvZXA5M3h4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmU2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvZXA5M3h4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMgRVA5M3h4IFBsYXRmb3JtIFN1cHBvcnQKK3NuZC1zb2MtZXA5M3h4LW9ianMJCQkJOj0gZXA5M3h4LXBjbS5vCitzbmQtc29jLWVwOTN4eC1pMnMtb2JqcwkgCQkJOj0gZXA5M3h4LWkycy5vCisKK29iai0kKENPTkZJR19TTkRfRVA5M1hYX1NPQykJCQkrPSBzbmQtc29jLWVwOTN4eC5vCitvYmotJChDT05GSUdfU05EX0VQOTNYWF9TT0NfSTJTKQkJKz0gc25kLXNvYy1lcDkzeHgtaTJzLm8KKworIyBFUDkzWFggTWFjaGluZSBTdXBwb3J0CitzbmQtc29jLXNuYXBwZXJjbDE1LW9ianMJCQk6PSBzbmFwcGVyY2wxNS5vCisKK29iai0kKENPTkZJR19TTkRfRVA5M1hYX1NPQ19TTkFQUEVSQ0wxNSkJKz0gc25kLXNvYy1zbmFwcGVyY2wxNS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYyBiL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYjk0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuYwpAQCAtMCwwICsxLDQ4NyBAQAorLyoKKyAqIGxpbnV4L3NvdW5kL3NvYy9lcDkzeHgtaTJzLmMKKyAqIEVQOTN4eCBJMlMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogQmFzZWQgb24gdGhlIG9yaWdpbmFsIGRyaXZlciBieToKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA3IENoYXNlIERvdWdsYXMgPGNoYXNlZG91Z2xhc0BnbWFpbD4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2VwOTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKworI2luY2x1ZGUgImVwOTN4eC1wY20uaCIKKyNpbmNsdWRlICJlcDkzeHgtaTJzLmgiCisKKyNkZWZpbmUgRVA5M1hYX0kyU19UWENMS0NGRwkJMHgwMAorI2RlZmluZSBFUDkzWFhfSTJTX1JYQ0xLQ0ZHCQkweDA0CisjZGVmaW5lIEVQOTNYWF9JMlNfR0xDVFJMCQkweDBDCisKKyNkZWZpbmUgRVA5M1hYX0kyU19UWExJTkNUUkxEQVRBCTB4MjgKKyNkZWZpbmUgRVA5M1hYX0kyU19UWENUUkwJCTB4MkMKKyNkZWZpbmUgRVA5M1hYX0kyU19UWFdSRExFTgkJMHgzMAorI2RlZmluZSBFUDkzWFhfSTJTX1RYMEVOCQkweDM0CisKKyNkZWZpbmUgRVA5M1hYX0kyU19SWExJTkNUUkxEQVRBCTB4NTgKKyNkZWZpbmUgRVA5M1hYX0kyU19SWENUUkwJCTB4NUMKKyNkZWZpbmUgRVA5M1hYX0kyU19SWFdSRExFTgkJMHg2MAorI2RlZmluZSBFUDkzWFhfSTJTX1JYMEVOCQkweDY0CisKKyNkZWZpbmUgRVA5M1hYX0kyU19XUkRMRU5fMTYJCSgwIDw8IDApCisjZGVmaW5lIEVQOTNYWF9JMlNfV1JETEVOXzI0CQkoMSA8PCAwKQorI2RlZmluZSBFUDkzWFhfSTJTX1dSRExFTl8zMgkJKDIgPDwgMCkKKworI2RlZmluZSBFUDkzWFhfSTJTX0xJTkNUUkxEQVRBX1JfSlVTVAkoMSA8PCAyKSAvKiBSaWdodCBqdXN0aWZ5ICovCisKKyNkZWZpbmUgRVA5M1hYX0kyU19DTEtDRkdfTFJTCQkoMSA8PCAwKSAvKiBscmNsayBwb2xhcml0eSAqLworI2RlZmluZSBFUDkzWFhfSTJTX0NMS0NGR19DS1AJCSgxIDw8IDEpIC8qIEJpdCBjbG9jayBwb2xhcml0eSAqLworI2RlZmluZSBFUDkzWFhfSTJTX0NMS0NGR19SRUwJCSgxIDw8IDIpIC8qIEZpcnN0IGJpdCB0cmFuc2l0aW9uICovCisjZGVmaW5lIEVQOTNYWF9JMlNfQ0xLQ0ZHX01BU1RFUgkoMSA8PCAzKSAvKiBNYXN0ZXIgbW9kZSAqLworI2RlZmluZSBFUDkzWFhfSTJTX0NMS0NGR19OQkNHCQkoMSA8PCA0KSAvKiBOb3QgYml0IGNsb2NrIGdhdGluZyAqLworCitzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvIHsKKwlzdHJ1Y3QgY2xrCQkJKm1jbGs7CisJc3RydWN0IGNsawkJCSpzY2xrOworCXN0cnVjdCBjbGsJCQkqbHJjbGs7CisJc3RydWN0IGVwOTN4eF9wY21fZG1hX3BhcmFtcwkqZG1hX3BhcmFtczsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqbWVtOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworfTsKKworc3RydWN0IGVwOTN4eF9wY21fZG1hX3BhcmFtcyBlcDkzeHhfaTJzX2RtYV9wYXJhbXNbXSA9IHsKKwlbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSB7CisJCS5uYW1lCQk9ICJpMnMtcGNtLW91dCIsCisJCS5kbWFfcG9ydAk9IEVQOTNYWF9ETUFfTTJQX1BPUlRfSTJTMSwKKwl9LAorCVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0geworCQkubmFtZQkJPSAiaTJzLXBjbS1pbiIsCisJCS5kbWFfcG9ydAk9IEVQOTNYWF9ETUFfTTJQX1BPUlRfSTJTMSwKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9pMnNfd3JpdGVfcmVnKHN0cnVjdCBlcDkzeHhfaTJzX2luZm8gKmluZm8sCisJCQkJCXVuc2lnbmVkIHJlZywgdW5zaWduZWQgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGluZm8tPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGVwOTN4eF9pMnNfcmVhZF9yZWcoc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbywKKwkJCQkJICAgdW5zaWduZWQgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChpbmZvLT5yZWdzICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2kyc19lbmFibGUoc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbywgaW50IHN0cmVhbSkKK3sKKwl1bnNpZ25lZCBiYXNlX3JlZzsKKwlpbnQgaTsKKworCWlmICgoZXA5M3h4X2kyc19yZWFkX3JlZyhpbmZvLCBFUDkzWFhfSTJTX1RYMEVOKSAmIDB4MSkgPT0gMCAmJgorCSAgICAoZXA5M3h4X2kyc19yZWFkX3JlZyhpbmZvLCBFUDkzWFhfSTJTX1JYMEVOKSAmIDB4MSkgPT0gMCkgeworCQkvKiBFbmFibGUgY2xvY2tzICovCisJCWNsa19lbmFibGUoaW5mby0+bWNsayk7CisJCWNsa19lbmFibGUoaW5mby0+c2Nsayk7CisJCWNsa19lbmFibGUoaW5mby0+bHJjbGspOworCisJCS8qIEVuYWJsZSBpMnMgKi8KKwkJZXA5M3h4X2kyc193cml0ZV9yZWcoaW5mbywgRVA5M1hYX0kyU19HTENUUkwsIDEpOworCX0KKworCS8qIEVuYWJsZSBmaWZvcyAqLworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJYmFzZV9yZWcgPSBFUDkzWFhfSTJTX1RYMEVOOworCWVsc2UKKwkJYmFzZV9yZWcgPSBFUDkzWFhfSTJTX1JYMEVOOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIGJhc2VfcmVnICsgKGkgKiA0KSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9pMnNfZGlzYWJsZShzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvLCBpbnQgc3RyZWFtKQoreworCXVuc2lnbmVkIGJhc2VfcmVnOworCWludCBpOworCisJLyogRGlzYWJsZSBmaWZvcyAqLworCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJYmFzZV9yZWcgPSBFUDkzWFhfSTJTX1RYMEVOOworCWVsc2UKKwkJYmFzZV9yZWcgPSBFUDkzWFhfSTJTX1JYMEVOOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIGJhc2VfcmVnICsgKGkgKiA0KSwgMCk7CisKKwlpZiAoKGVwOTN4eF9pMnNfcmVhZF9yZWcoaW5mbywgRVA5M1hYX0kyU19UWDBFTikgJiAweDEpID09IDAgJiYKKwkgICAgKGVwOTN4eF9pMnNfcmVhZF9yZWcoaW5mbywgRVA5M1hYX0kyU19SWDBFTikgJiAweDEpID09IDApIHsKKwkJLyogRGlzYWJsZSBpMnMgKi8KKwkJZXA5M3h4X2kyc193cml0ZV9yZWcoaW5mbywgRVA5M1hYX0kyU19HTENUUkwsIDApOworCisJCS8qIERpc2FibGUgY2xvY2tzICovCisJCWNsa19kaXNhYmxlKGluZm8tPmxyY2xrKTsKKwkJY2xrX2Rpc2FibGUoaW5mby0+c2Nsayk7CisJCWNsa19kaXNhYmxlKGluZm8tPm1jbGspOworCX0KK30KKworc3RhdGljIGludCBlcDkzeHhfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbyA9IHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGE7CisKKwlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoY3B1X2RhaSwgc3Vic3RyZWFtLAorCQkJCSAmaW5mby0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfaTJzX3NodXRkb3duKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKworCWVwOTN4eF9pMnNfZGlzYWJsZShpbmZvLCBzdWJzdHJlYW0tPnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCisJCQkJICB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBlcDkzeHhfaTJzX2luZm8gKmluZm8gPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGNsa19jZmcsIGxpbl9jdHJsOworCisJY2xrX2NmZyAgPSBlcDkzeHhfaTJzX3JlYWRfcmVnKGluZm8sIEVQOTNYWF9JMlNfUlhDTEtDRkcpOworCWxpbl9jdHJsID0gZXA5M3h4X2kyc19yZWFkX3JlZyhpbmZvLCBFUDkzWFhfSTJTX1JYTElOQ1RSTERBVEEpOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQljbGtfY2ZnIHw9IEVQOTNYWF9JMlNfQ0xLQ0ZHX1JFTDsKKwkJbGluX2N0cmwgJj0gfkVQOTNYWF9JMlNfTElOQ1RSTERBVEFfUl9KVVNUOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQljbGtfY2ZnICY9IH5FUDkzWFhfSTJTX0NMS0NGR19SRUw7CisJCWxpbl9jdHJsICY9IH5FUDkzWFhfSTJTX0xJTkNUUkxEQVRBX1JfSlVTVDsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX1JJR0hUX0o6CisJCWNsa19jZmcgJj0gfkVQOTNYWF9JMlNfQ0xLQ0ZHX1JFTDsKKwkJbGluX2N0cmwgfD0gRVA5M1hYX0kyU19MSU5DVFJMREFUQV9SX0pVU1Q7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJLyogQ1BVIGlzIG1hc3RlciAqLworCQljbGtfY2ZnIHw9IEVQOTNYWF9JMlNfQ0xLQ0ZHX01BU1RFUjsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCS8qIENvZGVjIGlzIG1hc3RlciAqLworCQljbGtfY2ZnICY9IH5FUDkzWFhfSTJTX0NMS0NGR19NQVNURVI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfTkY6CisJCS8qIE5lZ2F0aXZlIGJpdCBjbG9jaywgbHJjbGsgbG93IG9uIGxlZnQgd29yZCAqLworCQljbGtfY2ZnICY9IH4oRVA5M1hYX0kyU19DTEtDRkdfQ0tQIHwgRVA5M1hYX0kyU19DTEtDRkdfUkVMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQkvKiBOZWdhdGl2ZSBiaXQgY2xvY2ssIGxyY2xrIGxvdyBvbiByaWdodCB3b3JkICovCisJCWNsa19jZmcgJj0gfkVQOTNYWF9JMlNfQ0xLQ0ZHX0NLUDsKKwkJY2xrX2NmZyB8PSBFUDkzWFhfSTJTX0NMS0NGR19SRUw7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9ORjoKKwkJLyogUG9zaXRpdmUgYml0IGNsb2NrLCBscmNsayBsb3cgb24gbGVmdCB3b3JkICovCisJCWNsa19jZmcgfD0gRVA5M1hYX0kyU19DTEtDRkdfQ0tQOworCQljbGtfY2ZnICY9IH5FUDkzWFhfSTJTX0NMS0NGR19SRUw7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJLyogUG9zaXRpdmUgYml0IGNsb2NrLCBscmNsayBsb3cgb24gcmlnaHQgd29yZCAqLworCQljbGtfY2ZnIHw9IEVQOTNYWF9JMlNfQ0xLQ0ZHX0NLUCB8IEVQOTNYWF9JMlNfQ0xLQ0ZHX1JFTDsKKwkJYnJlYWs7CisJfQorCisJLyogV3JpdGUgbmV3IHJlZ2lzdGVyIHZhbHVlcyAqLworCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfUlhDTEtDRkcsIGNsa19jZmcpOworCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfVFhDTEtDRkcsIGNsa19jZmcpOworCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfUlhMSU5DVFJMREFUQSwgbGluX2N0cmwpOworCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfVFhMSU5DVFJMREFUQSwgbGluX2N0cmwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIHdvcmRfbGVuLCBkaXYsIHNkaXYsIGxyZGl2OworCWludCBmb3VuZCA9IDAsIGVycjsKKworCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd29yZF9sZW4gPSBFUDkzWFhfSTJTX1dSRExFTl8xNjsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorCQl3b3JkX2xlbiA9IEVQOTNYWF9JMlNfV1JETEVOXzI0OworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisJCXdvcmRfbGVuID0gRVA5M1hYX0kyU19XUkRMRU5fMzI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfVFhXUkRMRU4sIHdvcmRfbGVuKTsKKwllbHNlCisJCWVwOTN4eF9pMnNfd3JpdGVfcmVnKGluZm8sIEVQOTNYWF9JMlNfUlhXUkRMRU4sIHdvcmRfbGVuKTsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzZGl2IChiaXQgY2xvY2spIGFuZCBscmRpdiAobGVmdC9yaWdodCBjbG9jaykgdmFsdWVzLgorCSAqIElmIHRoZSBscmNsayBpcyBwdWxzZSBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhlIHdvcmQgc2l6ZSwgdGhlbiB0aGUKKwkgKiBiaXQgY2xvY2sgd2lsbCBiZSBnYXRlZCBmb3IgdGhlIHVudXNlZCBiaXRzLgorCSAqLworCWRpdiA9IChjbGtfZ2V0X3JhdGUoaW5mby0+bWNsaykgLyBwYXJhbXNfcmF0ZShwYXJhbXMpKSAqCisJCXBhcmFtc19jaGFubmVscyhwYXJhbXMpOworCWZvciAoc2RpdiA9IDI7IHNkaXYgPD0gNDsgc2RpdiArPSAyKQorCQlmb3IgKGxyZGl2ID0gMzI7IGxyZGl2IDw9IDEyODsgbHJkaXYgPDw9IDEpCisJCQlpZiAoc2RpdiAqIGxyZGl2ID09IGRpdikgeworCQkJCWZvdW5kID0gMTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KK291dDoKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IGNsa19zZXRfcmF0ZShpbmZvLT5zY2xrLCBjbGtfZ2V0X3JhdGUoaW5mby0+bWNsaykgLyBzZGl2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY2xrX3NldF9yYXRlKGluZm8tPmxyY2xrLCBjbGtfZ2V0X3JhdGUoaW5mby0+c2NsaykgLyBscmRpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVwOTN4eF9pMnNfZW5hYmxlKGluZm8sIHN1YnN0cmVhbS0+c3RyZWFtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDkzeHhfaTJzX3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLCBpbnQgY2xrX2lkLAorCQkJCSB1bnNpZ25lZCBpbnQgZnJlcSwgaW50IGRpcikKK3sKKwlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGRpciA9PSBTTkRfU09DX0NMT0NLX0lOIHx8IGNsa19pZCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjbGtfc2V0X3JhdGUoaW5mby0+bWNsaywgZnJlcSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZXA5M3h4X2kyc19zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBlcDkzeHhfaTJzX2luZm8gKmluZm8gPSBkYWktPnByaXZhdGVfZGF0YTsKKworCWlmICghZGFpLT5hY3RpdmUpCisJCXJldHVybjsKKworCWVwOTN4eF9pMnNfZGlzYWJsZShpbmZvLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwllcDkzeHhfaTJzX2Rpc2FibGUoaW5mbywgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKK30KKworc3RhdGljIGludCBlcDkzeHhfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gZGFpLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWRhaS0+YWN0aXZlKQorCQlyZXR1cm47CisKKwllcDkzeHhfaTJzX2VuYWJsZShpbmZvLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwllcDkzeHhfaTJzX2VuYWJsZShpbmZvLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworfQorI2Vsc2UKKyNkZWZpbmUgZXA5M3h4X2kyc19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgZXA5M3h4X2kyc19yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGVwOTN4eF9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cAk9IGVwOTN4eF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBlcDkzeHhfaTJzX3NodXRkb3duLAorCS5od19wYXJhbXMJPSBlcDkzeHhfaTJzX2h3X3BhcmFtcywKKwkuc2V0X3N5c2Nsawk9IGVwOTN4eF9pMnNfc2V0X3N5c2NsaywKKwkuc2V0X2ZtdAk9IGVwOTN4eF9pMnNfc2V0X2RhaV9mbXQsCit9OworCisjZGVmaW5lIEVQOTNYWF9JMlNfRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBcCisJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBcCisJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0cnVjdCBzbmRfc29jX2RhaSBlcDkzeHhfaTJzX2RhaSA9IHsKKwkubmFtZQkJPSAiZXA5M3h4LWkycyIsCisJLmlkCQk9IDAsCisJLnN5bW1ldHJpY19yYXRlcz0gMSwKKwkuc3VzcGVuZAk9IGVwOTN4eF9pMnNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGVwOTN4eF9pMnNfcmVzdW1lLAorCS5wbGF5YmFjawk9IHsKKwkJLmNoYW5uZWxzX21pbgk9IDIsCisJCS5jaGFubmVsc19tYXgJPSAyLAorCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMJPSBFUDkzWFhfSTJTX0ZPUk1BVFMsCisJfSwKKwkuY2FwdHVyZQk9IHsKKwkJIC5jaGFubmVsc19taW4JPSAyLAorCQkgLmNoYW5uZWxzX21heAk9IDIsCisJCSAucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJIC5mb3JtYXRzCT0gRVA5M1hYX0kyU19GT1JNQVRTLAorCX0sCisJLm9wcwkJPSAmZXA5M3h4X2kyc19kYWlfb3BzLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVwOTN4eF9pMnNfZGFpKTsKKworc3RhdGljIGludCBlcDkzeHhfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGVwOTN4eF9pMnNfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZXJyOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlcDkzeHhfaTJzX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWVwOTN4eF9pMnNfZGFpLmRldiA9ICZwZGV2LT5kZXY7CisJZXA5M3h4X2kyc19kYWkucHJpdmF0ZV9kYXRhID0gaW5mbzsKKwlpbmZvLT5kbWFfcGFyYW1zID0gZXA5M3h4X2kyc19kbWFfcGFyYW1zOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJaW5mby0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJCQkgICAgICAgcGRldi0+bmFtZSk7CisJaWYgKCFpbmZvLT5tZW0pIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZhaWw7CisJfQorCisJaW5mby0+cmVncyA9IGlvcmVtYXAoaW5mby0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpbmZvLT5tZW0pKTsKKwlpZiAoIWluZm8tPnJlZ3MpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGZhaWxfcmVsZWFzZV9tZW07CisJfQorCisJaW5mby0+bWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1jbGsiKTsKKwlpZiAoSVNfRVJSKGluZm8tPm1jbGspKSB7CisJCWVyciA9IFBUUl9FUlIoaW5mby0+bWNsayk7CisJCWdvdG8gZmFpbF91bm1hcF9tZW07CisJfQorCisJaW5mby0+c2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNjbGsiKTsKKwlpZiAoSVNfRVJSKGluZm8tPnNjbGspKSB7CisJCWVyciA9IFBUUl9FUlIoaW5mby0+c2Nsayk7CisJCWdvdG8gZmFpbF9wdXRfbWNsazsKKwl9CisKKwlpbmZvLT5scmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImxyY2xrIik7CisJaWYgKElTX0VSUihpbmZvLT5scmNsaykpIHsKKwkJZXJyID0gUFRSX0VSUihpbmZvLT5scmNsayk7CisJCWdvdG8gZmFpbF9wdXRfc2NsazsKKwl9CisKKwllcnIgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZXA5M3h4X2kyc19kYWkpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9wdXRfbHJjbGs7CisKKwlyZXR1cm4gMDsKKworZmFpbF9wdXRfbHJjbGs6CisJY2xrX3B1dChpbmZvLT5scmNsayk7CitmYWlsX3B1dF9zY2xrOgorCWNsa19wdXQoaW5mby0+c2Nsayk7CitmYWlsX3B1dF9tY2xrOgorCWNsa19wdXQoaW5mby0+bWNsayk7CitmYWlsX3VubWFwX21lbToKKwlpb3VubWFwKGluZm8tPnJlZ3MpOworZmFpbF9yZWxlYXNlX21lbToKKwlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpbmZvLT5tZW0pKTsKKwlrZnJlZShpbmZvKTsKK2ZhaWw6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZXA5M3h4X2kyc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X2kyc19pbmZvICppbmZvID0gZXA5M3h4X2kyc19kYWkucHJpdmF0ZV9kYXRhOworCisJc25kX3NvY191bnJlZ2lzdGVyX2RhaSgmZXA5M3h4X2kyc19kYWkpOworCWNsa19wdXQoaW5mby0+bHJjbGspOworCWNsa19wdXQoaW5mby0+c2Nsayk7CisJY2xrX3B1dChpbmZvLT5tY2xrKTsKKwlpb3VubWFwKGluZm8tPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGluZm8tPm1lbSkpOworCWtmcmVlKGluZm8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlcDkzeHhfaTJzX2RyaXZlciA9IHsKKwkucHJvYmUJPSBlcDkzeHhfaTJzX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChlcDkzeHhfaTJzX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZXA5M3h4LWkycyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfaTJzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlcDkzeHhfaTJzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlcDkzeHhfaTJzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXA5M3h4X2kyc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlcDkzeHhfaTJzX2luaXQpOworbW9kdWxlX2V4aXQoZXA5M3h4X2kyc19leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTplcDkzeHgtaTJzIik7CitNT0RVTEVfQVVUSE9SKCJSeWFuIE1hbGxvbiA8cnlhbkBibHVld2F0ZXJzeXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFUDkzWFggSTJTIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtaTJzLmggYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmQ0ZWJmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtaTJzLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqIGxpbnV4L3NvdW5kL3NvYy9lcDkzeHgtaTJzLmgKKyAqIEVQOTN4eCBJMlMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKiAgCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9FUDkzWFhfU05EX1NPQ19JMlNfSAorI2RlZmluZSBfRVA5M1hYX1NORF9TT0NfSTJTX0gKKworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX2RhaSBlcDkzeHhfaTJzX2RhaTsKKworI2VuZGlmIC8qIF9FUDkzWFhfU05EX1NPQ19JMlNfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMgYi9zb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmE5Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmMKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiBsaW51eC9zb3VuZC9hcm0vZXA5M3h4LXBjbS5jIC0gRVA5M3h4IEFMU0EgUENNIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsaWVkIERhdGEgU3lzdGVtcworICoKKyAqIFJld3JpdHRlbiBmb3IgdGhlIFNvQyBhdWRpbyBzdWJzeXN0ZW0gKEJhc2VkIG9uIFBYQTJ4eCBjb2RlKToKKyAqICAgQ29weXJpZ2h0IChjKSAyMDA4IFJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KKworI2luY2x1ZGUgImVwOTN4eC1wY20uaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGVwOTN4eF9wY21faGFyZHdhcmUgPSB7CisJLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19NTUFQCQl8CisJCQkJICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAl8CisJCQkJICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQJfAorCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSKSwKKwkJCQkgICAKKwkucmF0ZXMJCQk9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJLnJhdGVfbWluCQk9IFNORFJWX1BDTV9SQVRFXzgwMDAsCisJLnJhdGVfbWF4CQk9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAorCQorCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CisJCQkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAorCQkJCSAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKSwKKwkKKwkuYnVmZmVyX2J5dGVzX21heAk9IDEzMTA3MiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDMyLAorCS5wZXJpb2RfYnl0ZXNfbWF4CT0gMzI3NjgsCisJLnBlcmlvZHNfbWluCQk9IDEsCisJLnBlcmlvZHNfbWF4CQk9IDMyLAorCS5maWZvX3NpemUJCT0gMzIsCit9OworCitzdHJ1Y3QgZXA5M3h4X3J1bnRpbWVfZGF0YQoreworCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQJY2w7CisJc3RydWN0IGVwOTN4eF9wY21fZG1hX3BhcmFtcwkqcGFyYW1zOworCWludAkJCQlwb2ludGVyX2J5dGVzOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJcGVyaW9kX3Rhc2tsZXQ7CisJaW50CQkJCXBlcmlvZHM7CisJc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyCWJ1ZlszMl07Cit9OworCitzdGF0aWMgdm9pZCBlcDkzeHhfcGNtX3BlcmlvZF9lbGFwc2VkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKilkYXRhOworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X3BjbV9idWZmZXJfc3RhcnRlZCh2b2lkICpjb29raWUsCisJCQkJICAgICAgc3RydWN0IGVwOTN4eF9kbWFfYnVmZmVyICpidWYpCit7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9wY21fYnVmZmVyX2ZpbmlzaGVkKHZvaWQgKmNvb2tpZSwgCisJCQkJICAgICAgIHN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmLCAKKwkJCQkgICAgICAgaW50IGJ5dGVzLCBpbnQgZXJyb3IpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBjb29raWU7CisJc3RydWN0IGVwOTN4eF9ydW50aW1lX2RhdGEgKnJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGJ1ZiA9PSBydGQtPmJ1ZiArIHJ0ZC0+cGVyaW9kcyAtIDEpCisJCXJ0ZC0+cG9pbnRlcl9ieXRlcyA9IDA7CisJZWxzZQorCQlydGQtPnBvaW50ZXJfYnl0ZXMgKz0gYnVmLT5zaXplOworCisJaWYgKCFlcnJvcikgeworCQllcDkzeHhfZG1hX20ycF9zdWJtaXRfcmVjdXJzaXZlKCZydGQtPmNsLCBidWYpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZydGQtPnBlcmlvZF90YXNrbGV0KTsKKwl9IGVsc2UgeworCQlzbmRfcGNtX3N0b3Aoc3Vic3RyZWFtLCBTTkRSVl9QQ01fU1RBVEVfWFJVTik7CisJfQorfQorCitzdGF0aWMgaW50IGVwOTN4eF9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqc29jX3J0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNvY19ydGQtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3QgZXA5M3h4X3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zOworCXN0cnVjdCBlcDkzeHhfcnVudGltZV9kYXRhICpydGQ7ICAgIAorCWludCByZXQ7CisKKwlkbWFfcGFyYW1zID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGNwdV9kYWksIHN1YnN0cmVhbSk7CisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZlcDkzeHhfcGNtX2hhcmR3YXJlKTsKKworCXJ0ZCA9IGttYWxsb2Moc2l6ZW9mKCpydGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0ZCkgCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KCZydGQtPnBlcmlvZF90YXNrbGV0LCAwLCBzaXplb2YocnRkLT5wZXJpb2RfdGFza2xldCkpOworCXJ0ZC0+cGVyaW9kX3Rhc2tsZXQuZnVuYyA9IGVwOTN4eF9wY21fcGVyaW9kX2VsYXBzZWQ7CisJcnRkLT5wZXJpb2RfdGFza2xldC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc3Vic3RyZWFtOworCisJcnRkLT5jbC5uYW1lID0gZG1hX3BhcmFtcy0+bmFtZTsKKwlydGQtPmNsLmZsYWdzID0gZG1hX3BhcmFtcy0+ZG1hX3BvcnQgfCBFUDkzWFhfRE1BX00yUF9JR05PUkVfRVJST1IgfAorCQkoKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spID8KKwkJIEVQOTNYWF9ETUFfTTJQX1RYIDogRVA5M1hYX0RNQV9NMlBfUlgpOworCXJ0ZC0+Y2wuY29va2llID0gc3Vic3RyZWFtOworCXJ0ZC0+Y2wuYnVmZmVyX3N0YXJ0ZWQgPSBlcDkzeHhfcGNtX2J1ZmZlcl9zdGFydGVkOworCXJ0ZC0+Y2wuYnVmZmVyX2ZpbmlzaGVkID0gZXA5M3h4X3BjbV9idWZmZXJfZmluaXNoZWQ7CisJcmV0ID0gZXA5M3h4X2RtYV9tMnBfY2xpZW50X3JlZ2lzdGVyKCZydGQtPmNsKTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShydGQpOworCQlyZXR1cm4gcmV0OworCX0KKwkKKwlzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IHJ0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDkzeHhfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBlcDkzeHhfcnVudGltZV9kYXRhICpydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWVwOTN4eF9kbWFfbTJwX2NsaWVudF91bnJlZ2lzdGVyKCZydGQtPmNsKTsKKwlrZnJlZShydGQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGVwOTN4eF9ydW50aW1lX2RhdGEgKnJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlzaXplX3QgdG90c2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKTsKKwlzaXplX3QgcGVyaW9kID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhwYXJhbXMpOworCWludCBpOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSB0b3RzaXplOworCisJcnRkLT5wZXJpb2RzID0gKHRvdHNpemUgKyBwZXJpb2QgLSAxKSAvIHBlcmlvZDsKKwlmb3IgKGkgPSAwOyBpIDwgcnRkLT5wZXJpb2RzOyBpKyspIHsKKwkJcnRkLT5idWZbaV0uYnVzX2FkZHIgPSBydW50aW1lLT5kbWFfYWRkciArIChpICogcGVyaW9kKTsKKwkJcnRkLT5idWZbaV0uc2l6ZSA9IHBlcmlvZDsKKwkJaWYgKChpICsgMSkgKiBwZXJpb2QgPiB0b3RzaXplKQorCQkJcnRkLT5idWZbaV0uc2l6ZSA9IHRvdHNpemUgLSAoaSAqIHBlcmlvZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXNuZF9wY21fc2V0X3J1bnRpbWVfYnVmZmVyKHN1YnN0cmVhbSwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBlcDkzeHhfcnVudGltZV9kYXRhICpydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCWludCBpOworCisJcmV0ID0gMDsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlydGQtPnBvaW50ZXJfYnl0ZXMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgcnRkLT5wZXJpb2RzOyBpKyspCisJCQllcDkzeHhfZG1hX20ycF9zdWJtaXQoJnJ0ZC0+Y2wsIHJ0ZC0+YnVmICsgaSk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWVwOTN4eF9kbWFfbTJwX2ZsdXNoKCZydGQtPmNsKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QgZXA5M3h4X3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGVwOTN4eF9ydW50aW1lX2RhdGEgKnJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJLyogRklYTUU6IGltcGxlbWVudCB0aGlzIHdpdGggc3ViLXBlcmlvZCBncmFudWxhcml0eSAqLworCXJldHVybiBieXRlc190b19mcmFtZXMocnVudGltZSwgcnRkLT5wb2ludGVyX2J5dGVzKTsKK30KKworc3RhdGljIGludCBlcDkzeHhfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJcmV0dXJuIGRtYV9tbWFwX3dyaXRlY29tYmluZShzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+ZGV2LCB2bWEsCisJCQkJICAgICBydW50aW1lLT5kbWFfYXJlYSwKKwkJCQkgICAgIHJ1bnRpbWUtPmRtYV9hZGRyLAorCQkJCSAgICAgcnVudGltZS0+ZG1hX2J5dGVzKTsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBlcDkzeHhfcGNtX29wcyA9IHsKKwkub3BlbgkJPSBlcDkzeHhfcGNtX29wZW4sCisJLmNsb3NlCQk9IGVwOTN4eF9wY21fY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBlcDkzeHhfcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZQk9IGVwOTN4eF9wY21faHdfZnJlZSwKKwkudHJpZ2dlcgk9IGVwOTN4eF9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IGVwOTN4eF9wY21fcG9pbnRlciwKKwkubW1hcAkJPSBlcDkzeHhfcGNtX21tYXAsCit9OworCitzdGF0aWMgaW50IGVwOTN4eF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLCBpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IGVwOTN4eF9wY21faGFyZHdhcmUuYnVmZmVyX2J5dGVzX21heDsKKworCWJ1Zi0+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CisJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CisJYnVmLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUocGNtLT5jYXJkLT5kZXYsIHNpemUsCisJCQkJCSAgICZidWYtPmFkZHIsIEdGUF9LRVJORUwpOworCWJ1Zi0+Ynl0ZXMgPSBzaXplOworCisJcmV0dXJuIChidWYtPmFyZWEgPT0gTlVMTCkgPyAtRU5PTUVNIDogMDsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CisJaW50IHN0cmVhbTsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsJCQorCQlzdWJzdHJlYW0gPSBwY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW07CisJCWlmICghc3Vic3RyZWFtKQorCQkJY29udGludWU7CisJCQorCQlidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCQlpZiAoIWJ1Zi0+YXJlYSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9mcmVlX3dyaXRlY29tYmluZShwY20tPmNhcmQtPmRldiwgYnVmLT5ieXRlcywgYnVmLT5hcmVhLAorCQkJCSAgICAgIGJ1Zi0+YWRkcik7CisJCWJ1Zi0+YXJlYSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdTY0IGVwOTN4eF9wY21fZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBpbnQgZXA5M3h4X3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCSAgc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZlcDkzeHhfcGNtX2RtYW1hc2s7CisJaWYgKCFjYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrKQorCQljYXJkLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZjsKKworCWlmIChkYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCQlyZXQgPSBlcDkzeHhfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAorCQkJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGRhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0gZXA5M3h4X3BjbV9wcmVhbGxvY2F0ZV9kbWFfYnVmZmVyKHBjbSwKKwkJCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGVwOTN4eF9zb2NfcGxhdGZvcm0gPSB7CisJLm5hbWUJCT0gImVwOTN4eC1hdWRpbyIsCisJLnBjbV9vcHMJPSAmZXA5M3h4X3BjbV9vcHMsCisJLnBjbV9uZXcJPSAmZXA5M3h4X3BjbV9uZXcsCisJLnBjbV9mcmVlCT0gJmVwOTN4eF9wY21fZnJlZV9kbWFfYnVmZmVycywKK307CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIGludCBfX2luaXQgZXA5M3h4X3NvY19wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJmVwOTN4eF9zb2NfcGxhdGZvcm0pOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXA5M3h4X3NvY19wbGF0Zm9ybV9leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZlcDkzeHhfc29jX3BsYXRmb3JtKTsKK30KKworbW9kdWxlX2luaXQoZXA5M3h4X3NvY19wbGF0Zm9ybV9pbml0KTsKK21vZHVsZV9leGl0KGVwOTN4eF9zb2NfcGxhdGZvcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlJ5YW4gTWFsbG9uIDxyeWFuQGJsdWV3YXRlcnN5cy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVQOTN4eCBBTFNBIFBDTSBpbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LXBjbS5oIGIvc291bmQvc29jL2VwOTN4eC9lcDkzeHgtcGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmZGQzZgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9lcDkzeHgvZXA5M3h4LXBjbS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBzb3VuZC9zb2MvZXA5M3h4L2VwOTN4eC1wY20uaCAtIEVQOTN4eCBBTFNBIFBDTSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGllZCBEYXRhIFN5c3RlbXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0VQOTNYWF9TTkRfU09DX1BDTV9ICisjZGVmaW5lIF9FUDkzWFhfU05EX1NPQ19QQ01fSAorCitzdHJ1Y3QgZXA5M3h4X3BjbV9kbWFfcGFyYW1zIHsKKwljaGFyCSpuYW1lOworCWludAlkbWFfcG9ydDsKK307CisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBlcDkzeHhfc29jX3BsYXRmb3JtOworCisjZW5kaWYgLyogX0VQOTNYWF9TTkRfU09DX1BDTV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZXA5M3h4L3NuYXBwZXJjbDE1LmMgYi9zb3VuZC9zb2MvZXA5M3h4L3NuYXBwZXJjbDE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5NTUzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvZXA5M3h4L3NuYXBwZXJjbDE1LmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBzbmFwcGVyY2wxNS5jIC0tIFNvQyBhdWRpbyBmb3IgQmx1ZXdhdGVyIFN5c3RlbXMgU25hcHBlciBDTDE1IG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBCbHVld2F0ZXIgU3lzdGVtcyBMdGQKKyAqIEF1dGhvcjogUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljMjMuaCIKKyNpbmNsdWRlICJlcDkzeHgtcGNtLmgiCisjaW5jbHVkZSAiZXA5M3h4LWkycy5oIgorCisjZGVmaW5lIENPREVDX0NMT0NLIDU2NDQ4MDAKKworc3RhdGljIGludCBzbmFwcGVyY2wxNV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8IAorCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfSUYgfAkJICAKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgQ09ERUNfQ0xPQ0ssIAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19JTik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgMCwgQ09ERUNfQ0xPQ0ssIAorCQkJCSAgICAgU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBzbmFwcGVyY2wxNV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHNuYXBwZXJjbDE1X2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkxpbmUgSW4iLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJNaWMgSmFjayIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJMSFBPVVQifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlJIUE9VVCJ9LAorCisJeyJMTElORUlOIiwgTlVMTCwgIkxpbmUgSW4ifSwKKwl7IlJMSU5FSU4iLCBOVUxMLCAiTGluZSBJbiJ9LAorCisJeyJNSUNJTiIsIE5VTEwsICJNaWMgSmFjayJ9LAorfTsKKworc3RhdGljIGludCBzbmFwcGVyY2wxNV90bHYzMjBhaWMyM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB0bHYzMjBhaWMyM19kYXBtX3dpZGdldHMsCisJCQkJICBBUlJBWV9TSVpFKHRsdjMyMGFpYzIzX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNuYXBwZXJjbDE1X2RhaSA9IHsKKwkubmFtZQkJPSAidGx2MzIwYWljMjMiLAorCS5zdHJlYW1fbmFtZQk9ICJBSUMyMyIsCisJLmNwdV9kYWkJPSAmZXA5M3h4X2kyc19kYWksCisJLmNvZGVjX2RhaQk9ICZ0bHYzMjBhaWMyM19kYWksCisJLmluaXQJCT0gc25hcHBlcmNsMTVfdGx2MzIwYWljMjNfaW5pdCwKKwkub3BzCQk9ICZzbmFwcGVyY2wxNV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3NuYXBwZXJjbDE1ID0geworCS5uYW1lCQk9ICJTbmFwcGVyIENMMTUiLAorCS5wbGF0Zm9ybQk9ICZlcDkzeHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9ICZzbmFwcGVyY2wxNV9kYWksCisJLm51bV9saW5rcwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIHNuYXBwZXJjbDE1X3NuZF9kZXZkYXRhID0geworCS5jYXJkCQk9ICZzbmRfc29jX3NuYXBwZXJjbDE1LAorCS5jb2RlY19kZXYJPSAmc29jX2NvZGVjX2Rldl90bHYzMjBhaWMyMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbmFwcGVyY2wxNV9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBzbmFwcGVyY2wxNV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19zbmFwcGVyX2NsMTUoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBlcDkzeHhfaTJzX2FjcXVpcmUoRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTT05BQzk3LAorCQkJCSBFUDkzWFhfU1lTQ09OX0kyU0NMS0RJVl9PUklERSB8CisJCQkJIEVQOTNYWF9TWVNDT05fSTJTQ0xLRElWX1NQT0wpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzbmFwcGVyY2wxNV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFzbmFwcGVyY2wxNV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKwkKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShzbmFwcGVyY2wxNV9zbmRfZGV2aWNlLCAmc25hcHBlcmNsMTVfc25kX2RldmRhdGEpOworCXNuYXBwZXJjbDE1X3NuZF9kZXZkYXRhLmRldiA9ICZzbmFwcGVyY2wxNV9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChzbmFwcGVyY2wxNV9zbmRfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNuYXBwZXJjbDE1X3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNuYXBwZXJjbDE1X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzbmFwcGVyY2wxNV9zbmRfZGV2aWNlKTsKKwllcDkzeHhfaTJzX3JlbGVhc2UoKTsKK30KKworbW9kdWxlX2luaXQoc25hcHBlcmNsMTVfaW5pdCk7Cittb2R1bGVfZXhpdChzbmFwcGVyY2wxNV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgU25hcHBlciBDTDE1Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfYWM5Ny5jIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19hYzk3LmMKaW5kZXggYTAzMTAxNy4uYTk1NjAyMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19hYzk3LmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19hYzk3LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KICNpbmNsdWRlIDxhc20vbXBjNTJ4eF9wc2MuaD4KIAogI2luY2x1ZGUgIm1wYzUyMDBfZG1hLmgiCkBAIC0xMDAsMTkgKzEwMSwzMiBAQAogewogCXN0cnVjdCBtcGM1Mnh4X3BzYyBfX2lvbWVtICpyZWdzID0gcHNjX2RtYS0+cHNjX3JlZ3M7CiAKKwltdXRleF9sb2NrKCZwc2NfZG1hLT5tdXRleCk7CisKIAlvdXRfYmUzMigmcmVncy0+c2ljciwgcHNjX2RtYS0+c2ljciB8IE1QQzUyeHhfUFNDX1NJQ1JfQVdSKTsKIAl1ZGVsYXkoMyk7CiAJb3V0X2JlMzIoJnJlZ3MtPnNpY3IsIHBzY19kbWEtPnNpY3IpOworCisJbXV0ZXhfdW5sb2NrKCZwc2NfZG1hLT5tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBzY19hYzk3X2NvbGRfcmVzZXQoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewogCXN0cnVjdCBtcGM1Mnh4X3BzYyBfX2lvbWVtICpyZWdzID0gcHNjX2RtYS0+cHNjX3JlZ3M7CiAKLQkvKiBEbyBhIGNvbGQgcmVzZXQgKi8KLQlvdXRfOCgmcmVncy0+b3AxLCBNUEM1Mnh4X1BTQ19PUF9SRVMpOwotCXVkZWxheSgxMCk7Ci0Jb3V0XzgoJnJlZ3MtPm9wMCwgTVBDNTJ4eF9QU0NfT1BfUkVTKTsKKwltdXRleF9sb2NrKCZwc2NfZG1hLT5tdXRleCk7CisJZGV2X2RiZyhwc2NfZG1hLT5kZXYsICJjb2xkIHJlc2V0XG4iKTsKKworCW1wYzUyMDBfcHNjX2FjOTdfZ3Bpb19yZXNldChwc2NfZG1hLT5pZCk7CisKKwkvKiBOb3RpZnkgdGhlIFBTQyB0aGF0IGEgcmVzZXQgaGFzIG9jY3VycmVkICovCisJb3V0X2JlMzIoJnJlZ3MtPnNpY3IsIHBzY19kbWEtPnNpY3IgfCBNUEM1Mnh4X1BTQ19TSUNSX0FDUkIpOworCisJLyogUmUtZW5hYmxlIFJYIGFuZCBUWCAqLworCW91dF84KCZyZWdzLT5jb21tYW5kLCBNUEM1Mnh4X1BTQ19UWF9FTkFCTEUgfCBNUEM1Mnh4X1BTQ19SWF9FTkFCTEUpOworCisJbXV0ZXhfdW5sb2NrKCZwc2NfZG1hLT5tdXRleCk7CisKIAltc2xlZXAoMSk7CiAJcHNjX2FjOTdfd2FybV9yZXNldChhYzk3KTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMgYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5jCmluZGV4IDlhZWU3NDguLjUzNGYwNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmMKKysrIGIvc291bmQvc29jL2ZzbC9tcGM1MjAwX3BzY19pMnMuYwpAQCAtMTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21wYzUyeHhfcHNjLmg+CiAKLSNpbmNsdWRlICJtcGM1MjAwX3BzY19pMnMuaCIKICNpbmNsdWRlICJtcGM1MjAwX2RtYS5oIgogCiAvKioKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmggYi9zb3VuZC9zb2MvZnNsL21wYzUyMDBfcHNjX2kycy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTU1ZTA3Li4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9mc2wvbXBjNTIwMF9wc2NfaTJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKgotICogRnJlZXNjYWxlIE1QQzUyMDAgUFNDIGluIEkyUyBtb2RlCi0gKiBBTFNBIFNvQyBEaWdpdGFsIEF1ZGlvIEludGVyZmFjZSAoREFJKSBkcml2ZXIKLSAqCi0gKi8KLQotI2lmbmRlZiBfX1NPVU5EX1NPQ19GU0xfTVBDNTJ4eF9QU0NfSTJTX0hfXwotI2RlZmluZSBfX1NPVU5EX1NPQ19GU0xfTVBDNTJ4eF9QU0NfSTJTX0hfXwotCi1leHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHBzY19pMnNfZGFpW107Ci0KLSNlbmRpZiAvKiBfX1NPVU5EX1NPQ19GU0xfTVBDNTJ4eF9QU0NfSTJTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29uZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCmluZGV4IDI1MmRlZmUuLjUyZGFjNWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW14L0tjb25maWcKQEAgLTEsNCArMSw0IEBACi1jb25maWcgU05EX0lNWF9TT0MKK21lbnVjb25maWcgU05EX0lNWF9TT0MKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciBGcmVlc2NhbGUgaS5NWCBDUFVzIgogCWRlcGVuZHMgb24gQVJDSF9NWEMKIAlzZWxlY3QgU05EX1BDTQpAQCAtOCwxNCArOCwxMiBAQAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCiAJICB0aGUgaS5NWCBTU0kgaW50ZXJmYWNlLgogCi1jb25maWcgU05EX01YQ19TT0NfU1NJCi0JdHJpc3RhdGUKK2lmIFNORF9JTVhfU09DCiAKIGNvbmZpZyBTTkRfTVhDX1NPQ19XTTExMzNfRVYxCiAJdHJpc3RhdGUgIkF1ZGlvIG9uIHRoZSB0aGUgaS5NWDMxQURTIHdpdGggV00xMTMzLUVWMSBmaXR0ZWQiCi0JZGVwZW5kcyBvbiBTTkRfSU1YX1NPQyAmJiBNQUNIX01YMzFBRFNfV00xMTMzX0VWMSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE1BQ0hfTVgzMUFEU19XTTExMzNfRVYxICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTTkRfU09DX1dNODM1MAotCXNlbGVjdCBTTkRfTVhDX1NPQ19TU0kKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgYXVkaW8gb24gdGhlIGkuTVgzMUFEUyB3aXRoIHRoZSBXTTExMzMtRVYxCiAJICBQTUlDIGJvYXJkIHdpdGggV004ODM1eCBmaXR0ZWQuCkBAIC0yMyw4ICsyMSwxNyBAQAogY29uZmlnIFNORF9TT0NfUEhZQ09SRV9BQzk3CiAJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBQaHl0ZWMgcGh5Q09SRSAoYW5kIHBoeUNBUkQpIGJvYXJkcyIKIAlkZXBlbmRzIG9uIE1BQ0hfUENNMDQzIHx8IE1BQ0hfUENBMTAwCi0Jc2VsZWN0IFNORF9NWENfU09DX1NTSQogCXNlbGVjdCBTTkRfU09DX1dNOTcxMgogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gUGh5dGVjIHBoeUNPUkUKIAkgIGFuZCBwaHlDQVJEIGJvYXJkcyBpbiBBQzk3IG1vZGUKKworY29uZmlnIFNORF9TT0NfRVVLUkVBX1RMVjMyMAorCXRyaXN0YXRlICJFdWtyZWEgVExWMzIwIgorCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQgfHwgTUFDSF9FVUtSRUFfTUJJTVhTRF9CQVNFQk9BUkQKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMworCWhlbHAKKwkgIEVuYWJsZSBJMlMgYmFzZWQgYWNjZXNzIHRvIHRoZSBUTFYzMjBBSUMyM0IgY29kZWMgYXR0YWNoZWQKKwkgIHRvIHRoZSBTU0kgaW50ZXJmYWNlCisKK2VuZGlmCSMgU05EX0lNWF9TT0MKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvaW14L01ha2VmaWxlCmluZGV4IDJkMjAzNjMuLjdiYzU3YmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL2lteC9NYWtlZmlsZQpAQCAtOCw4ICs4LDEwIEBACiBvYmotJChDT05GSUdfU05EX0lNWF9TT0MpICs9IHNuZC1zb2MtaW14Lm8KIAogIyBpLk1YIE1hY2hpbmUgU3VwcG9ydAorc25kLXNvYy1ldWtyZWEtdGx2MzIwLW9ianMgOj0gZXVrcmVhLXRsdjMyMC5vCiBzbmQtc29jLXBoeWNvcmUtYWM5Ny1vYmpzIDo9IHBoeWNvcmUtYWM5Ny5vCiBzbmQtc29jLXdtMTEzMy1ldjEtb2JqcyA6PSB3bTExMzMtZXYxLm8KIAorb2JqLSQoQ09ORklHX1NORF9TT0NfRVVLUkVBX1RMVjMyMCkgKz0gc25kLXNvYy1ldWtyZWEtdGx2MzIwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1BIWUNPUkVfQUM5NykgKz0gc25kLXNvYy1waHljb3JlLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9NWENfU09DX1dNMTEzM19FVjEpICs9IHNuZC1zb2Mtd20xMTMzLWV2MS5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWRmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIGV1a3JlYS10bHYzMjAuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZXVrcmVhX2NwdWlteFhYIGluIEkyUyBtb2RlCisgKgorICogQ29weXJpZ2h0IDIwMTAgRXJpYyBCw6luYXJkLCBFdWtyw6lhIEVsZWN0cm9tYXRpcXVlIDxlcmljQGV1a3JlYS5jb20+CisgKgorICogYmFzZWQgb24gc291bmQvc29jL3MzYzI0eHgvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworICogd2hpY2ggaXMgQ29weXJpZ2h0IDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBhbmQgb24gc291bmQvc29jL2lteC9waHljb3JlLWFjOTcuYyB3aGljaCBpcworICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqIAorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljMjMuaCIKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKKyNkZWZpbmUgQ09ERUNfQ0xPQ0sgMTIwMDAwMDAKKworc3RhdGljIGludCBldWtyZWFfdGx2MzIwX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiJXM6IGZhaWxlZCBzZXQgY3B1IGRhaSBmb3JtYXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHNldCBjb2RlYyBkYWkgZm9ybWF0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsCisJCQkJICAgICBDT0RFQ19DTE9DSywgU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHNldHRpbmcgY29kZWMgc3lzY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCXNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAweGZmZmZmZmMsIDB4ZmZmZmZmYywgMiwgMCk7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIElNWF9TU1BfU1lTX0NMSywgMCwKKwkJCQlTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiY2FuJ3Qgc2V0IENQVSBzeXN0ZW0gY2xvY2sgSU1YX1NTUF9TWVNfQ0xLXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBldWtyZWFfdGx2MzIwX3NuZF9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IGV1a3JlYV90bHYzMjBfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGV1a3JlYV90bHYzMjBfZGFpID0geworCS5uYW1lCQk9ICJ0bHYzMjBhaWMyMyIsCisJLnN0cmVhbV9uYW1lCT0gIlRMVjMyMEFJQzIzIiwKKwkuY29kZWNfZGFpCT0gJnRsdjMyMGFpYzIzX2RhaSwKKwkub3BzCQk9ICZldWtyZWFfdGx2MzIwX3NuZF9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBldWtyZWFfdGx2MzIwID0geworCS5uYW1lCQk9ICJjcHVpbXgtYXVkaW8iLAorCS5wbGF0Zm9ybQk9ICZpbXhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluawk9ICZldWtyZWFfdGx2MzIwX2RhaSwKKwkubnVtX2xpbmtzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZXVrcmVhX3RsdjMyMF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZAkJPSAmZXVrcmVhX3RsdjMyMCwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfdGx2MzIwYWljMjMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZXVrcmVhX3RsdjMyMF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBldWtyZWFfdGx2MzIwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2V1a3JlYV9jcHVpbXgyNygpICYmICFtYWNoaW5lX2lzX2V1a3JlYV9jcHVpbXgyNXNkKCkKKwkJJiYgIW1hY2hpbmVfaXNfZXVrcmVhX2NwdWlteDM1c2QoKSkKKwkJLyogcmV0dXJuIGhhcHB5LiBXZSBtaWdodCBydW4gb24gYSB0b3RhbGx5IGRpZmZlcmVudCBtYWNoaW5lICovCisJCXJldHVybiAwOworCisJZXVrcmVhX3RsdjMyMF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZXVrcmVhX3RsdjMyMF9kYWkuY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UsICZldWtyZWFfdGx2MzIwX3NuZF9kZXZkYXRhKTsKKwlldWtyZWFfdGx2MzIwX3NuZF9kZXZkYXRhLmRldiA9ICZldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGV1a3JlYV90bHYzMjBfc25kX2RldmljZSk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBldWtyZWFfdGx2MzIwX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChldWtyZWFfdGx2MzIwX2luaXQpOworbW9kdWxlX2V4aXQoZXVrcmVhX3RsdjMyMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRXJpYyBCw6luYXJkIDxlcmljQGV1a3JlYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVUlNWCBBTFNBIFNvQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1kbWEtbXgyLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZG1hLW14Mi5jCmluZGV4IDA1ZjE5YzkuLjBhNTk1ZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1kbWEtbXgyLmMKKysrIGIvc291bmQvc29jL2lteC9pbXgtcGNtLWRtYS1teDIuYwpAQCAtMjkyLDEyICsyOTIsMTYgQEAKIAlpbnQgcmV0OwogCiAJaXBydGQgPSBremFsbG9jKHNpemVvZigqaXBydGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaXBydGQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gaXBydGQ7CiAKIAlyZXQgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihzdWJzdHJlYW0tPnJ1bnRpbWUsCiAJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUyk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKKwkJa2ZyZWUoaXBydGQpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmc25kX2lteF9oYXJkd2FyZSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMgYi9zb3VuZC9zb2MvaW14L2lteC1wY20tZmlxLmMKaW5kZXggNmI1MThlMC4uYjJiZjI3MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9pbXgtcGNtLWZpcS5jCisrKyBiL3NvdW5kL3NvYy9pbXgvaW14LXBjbS1maXEuYwpAQCAtMTkyLDYgKzE5Miw4IEBACiAJaW50IHJldDsKIAogCWlwcnRkID0ga3phbGxvYyhzaXplb2YoKmlwcnRkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGlwcnRkID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGlwcnRkOwogCiAJaXBydGQtPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKQEAgLTIwMiw4ICsyMDQsMTAgQEAKIAogCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHN1YnN0cmVhbS0+cnVudGltZSwKIAkJCVNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShpcHJ0ZCk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZzbmRfaW14X2hhcmR3YXJlKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbXgvaW14LXNzaS5jIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKaW5kZXggNGZkMTNkMC4uYTExZGFhMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9pbXgtc3NpLmMKKysrIGIvc291bmQvc29jL2lteC9pbXgtc3NpLmMKQEAgLTgzLDggKzgzLDYgQEAKIC8qCiAgKiBTU0kgREFJIGZvcm1hdCBjb25maWd1cmF0aW9uLgogICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gcG9ydCBpcyBpbmFjdGl2ZSAoaS5lLiBTU0lFTiA9IDApLgotICogTm90ZTogV2UgZG9uJ3QgdXNlIHRoZSBJMlMgbW9kZXMgYnV0IGluc3RlYWQgbWFudWFsbHkgY29uZmlndXJlIHRoZQotICogU1NJIGZvciBJMlMgYmVjYXVzZSB0aGUgSTJTIG1vZGUgaXMgb25seSBhIHJlZ2lzdGVyIHByZXNldC4KICAqLwogc3RhdGljIGludCBpbXhfc3NpX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwgdW5zaWduZWQgaW50IGZtdCkKIHsKQEAgLTk5LDYgKzk3LDEwIEBACiAJCS8qIGRhdGEgb24gcmlzaW5nIGVkZ2Ugb2YgYmNsaywgZnJhbWUgbG93IDFjbGsgYmVmb3JlIGRhdGEgKi8KIAkJc3RyY3IgfD0gU1NJX1NUQ1JfVEZTSSB8IFNTSV9TVENSX1RFRlMgfCBTU0lfU1RDUl9UWEJJVDA7CiAJCXNjciB8PSBTU0lfU0NSX05FVDsKKwkJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1VTRV9JMlNfU0xBVkUpIHsKKwkJCXNjciAmPSB+U1NJX0kyU19NT0RFX01BU0s7CisJCQlzY3IgfD0gU1NJX1NDUl9JMlNfTU9ERV9TTEFWRTsKKwkJfQogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0xFRlRfSjoKIAkJLyogZGF0YSBvbiByaXNpbmcgZWRnZSBvZiBiY2xrLCBmcmFtZSBoaWdoIHdpdGggZGF0YSAqLwpAQCAtMTQzLDYgKzE0NSwxMSBAQAogCiAJc3RyY3IgfD0gU1NJX1NUQ1JfVEZFTjA7CiAKKwlpZiAoc3NpLT5mbGFncyAmIElNWF9TU0lfTkVUKQorCQlzY3IgfD0gU1NJX1NDUl9ORVQ7CisJaWYgKHNzaS0+ZmxhZ3MgJiBJTVhfU1NJX1NZTikKKwkJc2NyIHw9IFNTSV9TQ1JfU1lOOworCiAJd3JpdGVsKHN0cmNyLCBzc2ktPmJhc2UgKyBTU0lfU1RDUik7CiAJd3JpdGVsKHN0cmNyLCBzc2ktPmJhc2UgKyBTU0lfU1JDUik7CiAJd3JpdGVsKHNjciwgc3NpLT5iYXNlICsgU1NJX1NDUik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL0tjb25maWcgYi9zb3VuZC9zb2Mvano0NzQwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MWNiYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9qejQ3NDAvS2NvbmZpZwpAQCAtMCwwICsxLDIzIEBACitjb25maWcgU05EX0paNDc0MF9TT0MKKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIGZvciBJbmdlbmljIEpaNDc0MCBTb0MiCisJZGVwZW5kcyBvbiBNQUNIX0paNDc0MCAmJiBTTkRfU09DCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCisJICB0aGUgSlo0NzQwIEkyUyBpbnRlcmZhY2UuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvCisJICBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCisKK2NvbmZpZyBTTkRfSlo0NzQwX1NPQ19JMlMKKwlkZXBlbmRzIG9uIFNORF9KWjQ3NDBfU09DCisJdHJpc3RhdGUgIlNvQyBBdWRpbyAoSTJTIHByb3RvY29sKSBmb3IgSW5nZW5pYyBKWjQ3NDAgU29DIgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBJMlMgcHJvdG9jb2wgYW5kIEkyUyBjb2RlYyBvbiBJbmdlbmljIEpaNDc0MAorCSAgYmFzZWQgYm9hcmRzLgorCitjb25maWcgU05EX0paNDc0MF9TT0NfUUlfTEI2MAorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgUWkgTEI2MCIKKwlkZXBlbmRzIG9uIFNORF9KWjQ3NDBfU09DICYmIEpaNDc0MF9RSV9MQjYwCisJc2VsZWN0IFNORF9KWjQ3NDBfU09DX0kyUworICAgIHNlbGVjdCBTTkRfU09DX0paNDc0MF9DT0RFQworCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBBU29DIGF1ZGlvIG9uIHRoZSBRaSBMQjYwIGJvYXJkCisJICBhLmsuYSBRaSBCZW4gTmFub05vdGUuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL01ha2VmaWxlIGIvc291bmQvc29jL2p6NDc0MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg3M2MxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2p6NDc0MC9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIEp6NDc0MCBQbGF0Zm9ybSBTdXBwb3J0CisjCitzbmQtc29jLWp6NDc0MC1vYmpzIDo9IGp6NDc0MC1wY20ubworc25kLXNvYy1qejQ3NDAtaTJzLW9ianMgOj0gano0NzQwLWkycy5vCisKK29iai0kKENPTkZJR19TTkRfSlo0NzQwX1NPQykgKz0gc25kLXNvYy1qejQ3NDAubworb2JqLSQoQ09ORklHX1NORF9KWjQ3NDBfU09DX0kyUykgKz0gc25kLXNvYy1qejQ3NDAtaTJzLm8KKworIyBKejQ3NDAgTWFjaGluZSBTdXBwb3J0CitzbmQtc29jLXFpLWxiNjAtb2JqcyA6PSBxaV9sYjYwLm8KKworb2JqLSQoQ09ORklHX1NORF9KWjQ3NDBfU09DX1FJX0xCNjApICs9IHNuZC1zb2MtcWktbGI2MC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYyBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTE4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYwpAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAsIExhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKyNpbmNsdWRlICJqejQ3NDAtaTJzLmgiCisjaW5jbHVkZSAiano0NzQwLXBjbS5oIgorCisjZGVmaW5lIEpaX1JFR19BSUNfQ09ORgkJMHgwMAorI2RlZmluZSBKWl9SRUdfQUlDX0NUUkwJCTB4MDQKKyNkZWZpbmUgSlpfUkVHX0FJQ19JMlNfRk1UCTB4MTAKKyNkZWZpbmUgSlpfUkVHX0FJQ19GSUZPX1NUQVRVUwkweDE0CisjZGVmaW5lIEpaX1JFR19BSUNfSTJTX1NUQVRVUwkweDFjCisjZGVmaW5lIEpaX1JFR19BSUNfQ0xLX0RJVgkweDMwCisjZGVmaW5lIEpaX1JFR19BSUNfRklGTwkJMHgzNAorCisjZGVmaW5lIEpaX0FJQ19DT05GX0ZJRk9fUlhfVEhSRVNIT0xEX01BU0sgKDB4ZiA8PCAxMikKKyNkZWZpbmUgSlpfQUlDX0NPTkZfRklGT19UWF9USFJFU0hPTERfTUFTSyAoMHhmIDw8ICA4KQorI2RlZmluZSBKWl9BSUNfQ09ORl9PVkVSRkxPV19QTEFZX0xBU1QgQklUKDYpCisjZGVmaW5lIEpaX0FJQ19DT05GX0lOVEVSTkFMX0NPREVDIEJJVCg1KQorI2RlZmluZSBKWl9BSUNfQ09ORl9JMlMgQklUKDQpCisjZGVmaW5lIEpaX0FJQ19DT05GX1JFU0VUIEJJVCgzKQorI2RlZmluZSBKWl9BSUNfQ09ORl9CSVRfQ0xLX01BU1RFUiBCSVQoMikKKyNkZWZpbmUgSlpfQUlDX0NPTkZfU1lOQ19DTEtfTUFTVEVSIEJJVCgxKQorI2RlZmluZSBKWl9BSUNfQ09ORl9FTkFCTEUgQklUKDApCisKKyNkZWZpbmUgSlpfQUlDX0NPTkZfRklGT19SWF9USFJFU0hPTERfT0ZGU0VUIDEyCisjZGVmaW5lIEpaX0FJQ19DT05GX0ZJRk9fVFhfVEhSRVNIT0xEX09GRlNFVCA4CisKKyNkZWZpbmUgSlpfQUlDX0NUUkxfT1VUUFVUX1NBTVBMRV9TSVpFX01BU0sgKDB4NyA8PCAxOSkKKyNkZWZpbmUgSlpfQUlDX0NUUkxfSU5QVVRfU0FNUExFX1NJWkVfTUFTSyAoMHg3IDw8IDE2KQorI2RlZmluZSBKWl9BSUNfQ1RSTF9FTkFCTEVfUlhfRE1BIEJJVCgxNSkKKyNkZWZpbmUgSlpfQUlDX0NUUkxfRU5BQkxFX1RYX0RNQSBCSVQoMTQpCisjZGVmaW5lIEpaX0FJQ19DVFJMX01PTk9fVE9fU1RFUkVPIEJJVCgxMSkKKyNkZWZpbmUgSlpfQUlDX0NUUkxfU1dJVENIX0VORElBTk5FU1MgQklUKDEwKQorI2RlZmluZSBKWl9BSUNfQ1RSTF9TSUdORURfVE9fVU5TSUdORUQgQklUKDkpCisjZGVmaW5lIEpaX0FJQ19DVFJMX0ZMVVNICQlCSVQoOCkKKyNkZWZpbmUgSlpfQUlDX0NUUkxfRU5BQkxFX1JPUl9JTlQgQklUKDYpCisjZGVmaW5lIEpaX0FJQ19DVFJMX0VOQUJMRV9UVVJfSU5UIEJJVCg1KQorI2RlZmluZSBKWl9BSUNfQ1RSTF9FTkFCTEVfUkZTX0lOVCBCSVQoNCkKKyNkZWZpbmUgSlpfQUlDX0NUUkxfRU5BQkxFX1RGU19JTlQgQklUKDMpCisjZGVmaW5lIEpaX0FJQ19DVFJMX0VOQUJMRV9MT09QQkFDSyBCSVQoMikKKyNkZWZpbmUgSlpfQUlDX0NUUkxfRU5BQkxFX1BMQVlCQUNLIEJJVCgxKQorI2RlZmluZSBKWl9BSUNfQ1RSTF9FTkFCTEVfQ0FQVFVSRSBCSVQoMCkKKworI2RlZmluZSBKWl9BSUNfQ1RSTF9PVVRQVVRfU0FNUExFX1NJWkVfT0ZGU0VUIDE5CisjZGVmaW5lIEpaX0FJQ19DVFJMX0lOUFVUX1NBTVBMRV9TSVpFX09GRlNFVCAgMTYKKworI2RlZmluZSBKWl9BSUNfSTJTX0ZNVF9ESVNBQkxFX0JJVF9DTEsgQklUKDEyKQorI2RlZmluZSBKWl9BSUNfSTJTX0ZNVF9FTkFCTEVfU1lTX0NMSyBCSVQoNCkKKyNkZWZpbmUgSlpfQUlDX0kyU19GTVRfTVNCIEJJVCgwKQorCisjZGVmaW5lIEpaX0FJQ19JMlNfU1RBVFVTX0JVU1kgQklUKDIpCisKKyNkZWZpbmUgSlpfQUlDX0NMS19ESVZfTUFTSyAweGYKKworc3RydWN0IGp6NDc0MF9pMnMgeworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlkbWFfYWRkcl90IHBoeXNfYmFzZTsKKworCXN0cnVjdCBjbGsgKmNsa19haWM7CisJc3RydWN0IGNsayAqY2xrX2kyczsKKworCXN0cnVjdCBqejQ3NDBfcGNtX2NvbmZpZyBwY21fY29uZmlnX3BsYXliYWNrOworCXN0cnVjdCBqejQ3NDBfcGNtX2NvbmZpZyBwY21fY29uZmlnX2NhcHR1cmU7Cit9OworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGp6NDc0MF9pMnNfcmVhZChjb25zdCBzdHJ1Y3Qgano0NzQwX2kycyAqaTJzLAorCXVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGkycy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBqejQ3NDBfaTJzX3dyaXRlKGNvbnN0IHN0cnVjdCBqejQ3NDBfaTJzICppMnMsCisJdW5zaWduZWQgaW50IHJlZywgdWludDMyX3QgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBpMnMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBqejQ3NDBfaTJzICpqejQ3NDBfZGFpX3RvX2kycyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlyZXR1cm4gZGFpLT5wcml2YXRlX2RhdGE7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBqejQ3NDBfZGFpX3RvX2kycyhkYWkpOworCXVpbnQzMl90IGNvbmYsIGN0cmw7CisKKwlpZiAoZGFpLT5hY3RpdmUpCisJCXJldHVybiAwOworCisJY3RybCA9IGp6NDc0MF9pMnNfcmVhZChpMnMsIEpaX1JFR19BSUNfQ1RSTCk7CisJY3RybCB8PSBKWl9BSUNfQ1RSTF9GTFVTSDsKKwlqejQ3NDBfaTJzX3dyaXRlKGkycywgSlpfUkVHX0FJQ19DVFJMLCBjdHJsKTsKKworCWNsa19lbmFibGUoaTJzLT5jbGtfaTJzKTsKKworCWNvbmYgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NPTkYpOworCWNvbmYgfD0gSlpfQUlDX0NPTkZfRU5BQkxFOworCWp6NDc0MF9pMnNfd3JpdGUoaTJzLCBKWl9SRUdfQUlDX0NPTkYsIGNvbmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGp6NDc0MF9pMnNfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGp6NDc0MF9pMnMgKmkycyA9IGp6NDc0MF9kYWlfdG9faTJzKGRhaSk7CisJdWludDMyX3QgY29uZjsKKworCWlmICghZGFpLT5hY3RpdmUpCisJCXJldHVybjsKKworCWNvbmYgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NPTkYpOworCWNvbmYgJj0gfkpaX0FJQ19DT05GX0VOQUJMRTsKKwlqejQ3NDBfaTJzX3dyaXRlKGkycywgSlpfUkVHX0FJQ19DT05GLCBjb25mKTsKKworCWNsa19kaXNhYmxlKGkycy0+Y2xrX2kycyk7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAorCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBqejQ3NDBfZGFpX3RvX2kycyhkYWkpOworCisJdWludDMyX3QgY3RybDsKKwl1aW50MzJfdCBtYXNrOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCW1hc2sgPSBKWl9BSUNfQ1RSTF9FTkFCTEVfUExBWUJBQ0sgfCBKWl9BSUNfQ1RSTF9FTkFCTEVfVFhfRE1BOworCWVsc2UKKwkJbWFzayA9IEpaX0FJQ19DVFJMX0VOQUJMRV9DQVBUVVJFIHwgSlpfQUlDX0NUUkxfRU5BQkxFX1JYX0RNQTsKKworCWN0cmwgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NUUkwpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJY3RybCB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJY3RybCAmPSB+bWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJano0NzQwX2kyc193cml0ZShpMnMsIEpaX1JFR19BSUNfQ1RSTCwgY3RybCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfaTJzX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksIHVuc2lnbmVkIGludCBmbXQpCit7CisJc3RydWN0IGp6NDc0MF9pMnMgKmkycyA9IGp6NDc0MF9kYWlfdG9faTJzKGRhaSk7CisKKwl1aW50MzJfdCBmb3JtYXQgPSAwOworCXVpbnQzMl90IGNvbmY7CisKKwljb25mID0gano0NzQwX2kyc19yZWFkKGkycywgSlpfUkVHX0FJQ19DT05GKTsKKworCWNvbmYgJj0gfihKWl9BSUNfQ09ORl9CSVRfQ0xLX01BU1RFUiB8IEpaX0FJQ19DT05GX1NZTkNfQ0xLX01BU1RFUik7CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgorCQljb25mIHw9IEpaX0FJQ19DT05GX0JJVF9DTEtfTUFTVEVSIHwgSlpfQUlDX0NPTkZfU1lOQ19DTEtfTUFTVEVSOworCQlmb3JtYXQgfD0gSlpfQUlDX0kyU19GTVRfRU5BQkxFX1NZU19DTEs7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKKwkJY29uZiB8PSBKWl9BSUNfQ09ORl9TWU5DX0NMS19NQVNURVI7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKKwkJY29uZiB8PSBKWl9BSUNfQ09ORl9CSVRfQ0xLX01BU1RFUjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9NU0I6CisJCWZvcm1hdCB8PSBKWl9BSUNfSTJTX0ZNVF9NU0I7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJano0NzQwX2kyc193cml0ZShpMnMsIEpaX1JFR19BSUNfQ09ORiwgY29uZik7CisJano0NzQwX2kyc193cml0ZShpMnMsIEpaX1JFR19BSUNfSTJTX0ZNVCwgZm9ybWF0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6NDc0MF9pMnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzID0gano0NzQwX2RhaV90b19pMnMoZGFpKTsKKwllbnVtIGp6NDc0MF9kbWFfd2lkdGggZG1hX3dpZHRoOworCXN0cnVjdCBqejQ3NDBfcGNtX2NvbmZpZyAqcGNtX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3NpemU7CisJdWludDMyX3QgY3RybDsKKworCWN0cmwgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NUUkwpOworCisJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzg6CisJCXNhbXBsZV9zaXplID0gMDsKKwkJZG1hX3dpZHRoID0gSlo0NzQwX0RNQV9XSURUSF84QklUOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2OgorCQlzYW1wbGVfc2l6ZSA9IDE7CisJCWRtYV93aWR0aCA9IEpaNDc0MF9ETUFfV0lEVEhfMTZCSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWN0cmwgJj0gfkpaX0FJQ19DVFJMX09VVFBVVF9TQU1QTEVfU0laRV9NQVNLOworCQljdHJsIHw9IHNhbXBsZV9zaXplIDw8IEpaX0FJQ19DVFJMX09VVFBVVF9TQU1QTEVfU0laRV9PRkZTRVQ7CisJCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA9PSAxKQorCQkJY3RybCB8PSBKWl9BSUNfQ1RSTF9NT05PX1RPX1NURVJFTzsKKwkJZWxzZQorCQkJY3RybCAmPSB+SlpfQUlDX0NUUkxfTU9OT19UT19TVEVSRU87CisKKwkJcGNtX2NvbmZpZyA9ICZpMnMtPnBjbV9jb25maWdfcGxheWJhY2s7CisJCXBjbV9jb25maWctPmRtYV9jb25maWcuZHN0X3dpZHRoID0gZG1hX3dpZHRoOworCisJfSBlbHNlIHsKKwkJY3RybCAmPSB+SlpfQUlDX0NUUkxfSU5QVVRfU0FNUExFX1NJWkVfTUFTSzsKKwkJY3RybCB8PSBzYW1wbGVfc2l6ZSA8PCBKWl9BSUNfQ1RSTF9JTlBVVF9TQU1QTEVfU0laRV9PRkZTRVQ7CisKKwkJcGNtX2NvbmZpZyA9ICZpMnMtPnBjbV9jb25maWdfY2FwdHVyZTsKKwkJcGNtX2NvbmZpZy0+ZG1hX2NvbmZpZy5zcmNfd2lkdGggPSBkbWFfd2lkdGg7CisJfQorCisJano0NzQwX2kyc193cml0ZShpMnMsIEpaX1JFR19BSUNfQ1RSTCwgY3RybCk7CisKKwlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoZGFpLCBzdWJzdHJlYW0sIHBjbV9jb25maWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX2kyc19zZXRfc3lzY2xrKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCBpbnQgY2xrX2lkLAorCXVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQoreworCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBqejQ3NDBfZGFpX3RvX2kycyhkYWkpOworCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY2xrX2lkKSB7CisJY2FzZSBKWjQ3NDBfSTJTX0NMS1NSQ19FWFQ6CisJCXBhcmVudCA9IGNsa19nZXQoTlVMTCwgImV4dCIpOworCQljbGtfc2V0X3BhcmVudChpMnMtPmNsa19pMnMsIHBhcmVudCk7CisJCWJyZWFrOworCWNhc2UgSlo0NzQwX0kyU19DTEtTUkNfUExMOgorCQlwYXJlbnQgPSBjbGtfZ2V0KE5VTEwsICJwbGwgaGFsZiIpOworCQljbGtfc2V0X3BhcmVudChpMnMtPmNsa19pMnMsIHBhcmVudCk7CisJCXJldCA9IGNsa19zZXRfcmF0ZShpMnMtPmNsa19pMnMsIGZyZXEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2xrX3B1dChwYXJlbnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBqejQ3NDBfaTJzX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGp6NDc0MF9pMnMgKmkycyA9IGp6NDc0MF9kYWlfdG9faTJzKGRhaSk7CisJdWludDMyX3QgY29uZjsKKworCWlmIChkYWktPmFjdGl2ZSkgeworCQljb25mID0gano0NzQwX2kyc19yZWFkKGkycywgSlpfUkVHX0FJQ19DT05GKTsKKwkJY29uZiAmPSB+SlpfQUlDX0NPTkZfRU5BQkxFOworCQlqejQ3NDBfaTJzX3dyaXRlKGkycywgSlpfUkVHX0FJQ19DT05GLCBjb25mKTsKKworCQljbGtfZGlzYWJsZShpMnMtPmNsa19pMnMpOworCX0KKworCWNsa19kaXNhYmxlKGkycy0+Y2xrX2FpYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfaTJzX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzID0gano0NzQwX2RhaV90b19pMnMoZGFpKTsKKwl1aW50MzJfdCBjb25mOworCisJY2xrX2VuYWJsZShpMnMtPmNsa19haWMpOworCisJaWYgKGRhaS0+YWN0aXZlKSB7CisJCWNsa19lbmFibGUoaTJzLT5jbGtfaTJzKTsKKworCQljb25mID0gano0NzQwX2kyc19yZWFkKGkycywgSlpfUkVHX0FJQ19DT05GKTsKKwkJY29uZiB8PSBKWl9BSUNfQ09ORl9FTkFCTEU7CisJCWp6NDc0MF9pMnNfd3JpdGUoaTJzLCBKWl9SRUdfQUlDX0NPTkYsIGNvbmYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGp6NDc0MF9pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGp6NDc0MF9pMnMgKmkycyA9IGp6NDc0MF9kYWlfdG9faTJzKGRhaSk7CisJdWludDMyX3QgY29uZjsKKworCWNvbmYgPSAoNyA8PCBKWl9BSUNfQ09ORl9GSUZPX1JYX1RIUkVTSE9MRF9PRkZTRVQpIHwKKwkJKDggPDwgSlpfQUlDX0NPTkZfRklGT19UWF9USFJFU0hPTERfT0ZGU0VUKSB8CisJCUpaX0FJQ19DT05GX09WRVJGTE9XX1BMQVlfTEFTVCB8CisJCUpaX0FJQ19DT05GX0kyUyB8CisJCUpaX0FJQ19DT05GX0lOVEVSTkFMX0NPREVDOworCisJano0NzQwX2kyc193cml0ZShpMnMsIEpaX1JFR19BSUNfQ09ORiwgSlpfQUlDX0NPTkZfUkVTRVQpOworCWp6NDc0MF9pMnNfd3JpdGUoaTJzLCBKWl9SRUdfQUlDX0NPTkYsIGNvbmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGp6NDc0MF9pMnNfZGFpX29wcyA9IHsKKwkuc3RhcnR1cCA9IGp6NDc0MF9pMnNfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSBqejQ3NDBfaTJzX3NodXRkb3duLAorCS50cmlnZ2VyID0gano0NzQwX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMgPSBqejQ3NDBfaTJzX2h3X3BhcmFtcywKKwkuc2V0X2ZtdCA9IGp6NDc0MF9pMnNfc2V0X2ZtdCwKKwkuc2V0X3N5c2NsayA9IGp6NDc0MF9pMnNfc2V0X3N5c2NsaywKK307CisKKyNkZWZpbmUgSlo0NzQwX0kyU19GTVRTIChTTkRSVl9QQ01fRk1UQklUX1M4IHwgXAorCQlTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkKKworc3RydWN0IHNuZF9zb2NfZGFpIGp6NDc0MF9pMnNfZGFpID0geworCS5uYW1lID0gImp6NDc0MC1pMnMiLAorCS5wcm9iZSA9IGp6NDc0MF9pMnNfcHJvYmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCisJCS5mb3JtYXRzID0gSlo0NzQwX0kyU19GTVRTLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5jaGFubmVsc19taW4gPSAyLAorCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMgPSBKWjQ3NDBfSTJTX0ZNVFMsCisJfSwKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwkub3BzID0gJmp6NDc0MF9pMnNfZGFpX29wcywKKwkuc3VzcGVuZCA9IGp6NDc0MF9pMnNfc3VzcGVuZCwKKwkucmVzdW1lID0gano0NzQwX2kyc19yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoano0NzQwX2kyc19kYWkpOworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgano0NzQwX2kyY19pbml0X3BjbV9jb25maWcoc3RydWN0IGp6NDc0MF9pMnMgKmkycykKK3sKKwlzdHJ1Y3Qgano0NzQwX2RtYV9jb25maWcgKmRtYV9jb25maWc7CisKKwkvKiBQbGF5YmFjayAqLworCWRtYV9jb25maWcgPSAmaTJzLT5wY21fY29uZmlnX3BsYXliYWNrLmRtYV9jb25maWc7CisJZG1hX2NvbmZpZy0+c3JjX3dpZHRoID0gSlo0NzQwX0RNQV9XSURUSF8zMkJJVCwKKwlkbWFfY29uZmlnLT50cmFuc2Zlcl9zaXplID0gSlo0NzQwX0RNQV9UUkFOU0ZFUl9TSVpFXzE2QllURTsKKwlkbWFfY29uZmlnLT5yZXF1ZXN0X3R5cGUgPSBKWjQ3NDBfRE1BX1RZUEVfQUlDX1RSQU5TTUlUOworCWRtYV9jb25maWctPmZsYWdzID0gSlo0NzQwX0RNQV9TUkNfQVVUT0lOQzsKKwlkbWFfY29uZmlnLT5tb2RlID0gSlo0NzQwX0RNQV9NT0RFX1NJTkdMRTsKKwlpMnMtPnBjbV9jb25maWdfcGxheWJhY2suZmlmb19hZGRyID0gaTJzLT5waHlzX2Jhc2UgKyBKWl9SRUdfQUlDX0ZJRk87CisKKwkvKiBDYXB0dXJlICovCisJZG1hX2NvbmZpZyA9ICZpMnMtPnBjbV9jb25maWdfY2FwdHVyZS5kbWFfY29uZmlnOworCWRtYV9jb25maWctPmRzdF93aWR0aCA9IEpaNDc0MF9ETUFfV0lEVEhfMzJCSVQsCisJZG1hX2NvbmZpZy0+dHJhbnNmZXJfc2l6ZSA9IEpaNDc0MF9ETUFfVFJBTlNGRVJfU0laRV8xNkJZVEU7CisJZG1hX2NvbmZpZy0+cmVxdWVzdF90eXBlID0gSlo0NzQwX0RNQV9UWVBFX0FJQ19SRUNFSVZFOworCWRtYV9jb25maWctPmZsYWdzID0gSlo0NzQwX0RNQV9EU1RfQVVUT0lOQzsKKwlkbWFfY29uZmlnLT5tb2RlID0gSlo0NzQwX0RNQV9NT0RFX1NJTkdMRTsKKwlpMnMtPnBjbV9jb25maWdfY2FwdHVyZS5maWZvX2FkZHIgPSBpMnMtPnBoeXNfYmFzZSArIEpaX1JFR19BSUNfRklGTzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgano0NzQwX2kyc19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzOworCWludCByZXQ7CisKKwlpMnMgPSBremFsbG9jKHNpemVvZigqaTJzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWkycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMnMtPm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFpMnMtPm1lbSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWkycy0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKGkycy0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpMnMtPm1lbSksCisJCQkJcGRldi0+bmFtZSk7CisJaWYgKCFpMnMtPm1lbSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJaTJzLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGkycy0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpMnMtPm1lbSkpOworCWlmICghaTJzLT5iYXNlKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOworCX0KKworCWkycy0+cGh5c19iYXNlID0gaTJzLT5tZW0tPnN0YXJ0OworCisJaTJzLT5jbGtfYWljID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYWljIik7CisJaWYgKElTX0VSUihpMnMtPmNsa19haWMpKSB7CisJCXJldCA9IFBUUl9FUlIoaTJzLT5jbGtfYWljKTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpMnMtPmNsa19pMnMgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpMnMiKTsKKwlpZiAoSVNfRVJSKGkycy0+Y2xrX2kycykpIHsKKwkJcmV0ID0gUFRSX0VSUihpMnMtPmNsa19pMnMpOworCQlnb3RvIGVycl9jbGtfcHV0X2FpYzsKKwl9CisKKwljbGtfZW5hYmxlKGkycy0+Y2xrX2FpYyk7CisKKwlqejQ3NDBfaTJjX2luaXRfcGNtX2NvbmZpZyhpMnMpOworCisJano0NzQwX2kyc19kYWkucHJpdmF0ZV9kYXRhID0gaTJzOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZqejQ3NDBfaTJzX2RhaSk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBEQUlcbiIpOworCQlnb3RvIGVycl9jbGtfcHV0X2kyczsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMnMpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGtfcHV0X2kyczoKKwljbGtfZGlzYWJsZShpMnMtPmNsa19haWMpOworCWNsa19wdXQoaTJzLT5jbGtfaTJzKTsKK2Vycl9jbGtfcHV0X2FpYzoKKwljbGtfcHV0KGkycy0+Y2xrX2FpYyk7CitlcnJfaW91bm1hcDoKKwlpb3VubWFwKGkycy0+YmFzZSk7CitlcnJfcmVsZWFzZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihpMnMtPm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoaTJzLT5tZW0pKTsKK2Vycl9mcmVlOgorCWtmcmVlKGkycyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBqejQ3NDBfaTJzX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZqejQ3NDBfaTJzX2RhaSk7CisKKwljbGtfZGlzYWJsZShpMnMtPmNsa19haWMpOworCWNsa19wdXQoaTJzLT5jbGtfaTJzKTsKKwljbGtfcHV0KGkycy0+Y2xrX2FpYyk7CisKKwlpb3VubWFwKGkycy0+YmFzZSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGkycy0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpMnMtPm1lbSkpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoaTJzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBqejQ3NDBfaTJzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBqejQ3NDBfaTJzX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoano0NzQwX2kyc19kZXZfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJqejQ3NDAtaTJzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp6NDc0MF9pMnNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmp6NDc0MF9pMnNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGp6NDc0MF9pMnNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqejQ3NDBfaTJzX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmano0NzQwX2kyc19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoano0NzQwX2kyc19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTGFycy1QZXRlciBDbGF1c2VuLCA8bGFyc0BtZXRhZm9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmdlbmljIEpaNDc0MCBTb0MgSTJTIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpqejQ3NDAtaTJzIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuaCBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjJlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9KWjQ3NDBfSTJTX0gKKyNkZWZpbmUgX0paNDc0MF9JMlNfSAorCisvKiBJMlMgY2xvY2sgc291cmNlICovCisjZGVmaW5lIEpaNDc0MF9JMlNfQ0xLU1JDX0VYVCAwCisjZGVmaW5lIEpaNDc0MF9JMlNfQ0xLU1JDX1BMTCAxCisKKyNkZWZpbmUgSlo0NzQwX0kyU19CSVRfQ0xLCQkwCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgano0NzQwX2kyc19kYWk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtcGNtLmMgYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY4ZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtcGNtLmMKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlCSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZgkgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUJTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9kbWEuaD4KKyNpbmNsdWRlICJqejQ3NDAtcGNtLmgiCisKK3N0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIGRtYV9wZXJpb2Q7CisJZG1hX2FkZHJfdCBkbWFfc3RhcnQ7CisJZG1hX2FkZHJfdCBkbWFfcG9zOworCWRtYV9hZGRyX3QgZG1hX2VuZDsKKworCXN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYTsKKworCWRtYV9hZGRyX3QgZmlmb19hZGRyOworfTsKKworLyogaWRlbnRpZnkgaGFyZHdhcmUgcGxheWJhY2sgY2FwYWJpbGl0aWVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgano0NzQwX3BjbV9oYXJkd2FyZSA9IHsKKwkuaW5mbyA9IFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TOCwKKworCS5yYXRlcwkJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDEsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gMTYsCisJLnBlcmlvZF9ieXRlc19tYXgJPSAyICogUEFHRV9TSVpFLAorCS5wZXJpb2RzX21pbgkJPSAyLAorCS5wZXJpb2RzX21heAkJPSAxMjgsCisJLmJ1ZmZlcl9ieXRlc19tYXgJPSAxMjggKiAyICogUEFHRV9TSVpFLAorCS5maWZvX3NpemUJCT0gMzIsCit9OworCitzdGF0aWMgdm9pZCBqejQ3NDBfcGNtX3N0YXJ0X3RyYW5zZmVyKHN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkLAorCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXVuc2lnbmVkIGxvbmcgY291bnQ7CisKKwlpZiAocHJ0ZC0+ZG1hX3BvcyA9PSBwcnRkLT5kbWFfZW5kKQorCQlwcnRkLT5kbWFfcG9zID0gcHJ0ZC0+ZG1hX3N0YXJ0OworCisJaWYgKHBydGQtPmRtYV9wb3MgKyBwcnRkLT5kbWFfcGVyaW9kID4gcHJ0ZC0+ZG1hX2VuZCkKKwkJY291bnQgPSBwcnRkLT5kbWFfZW5kIC0gcHJ0ZC0+ZG1hX3BvczsKKwllbHNlCisJCWNvdW50ID0gcHJ0ZC0+ZG1hX3BlcmlvZDsKKworCWp6NDc0MF9kbWFfZGlzYWJsZShwcnRkLT5kbWEpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJano0NzQwX2RtYV9zZXRfc3JjX2FkZHIocHJ0ZC0+ZG1hLCBwcnRkLT5kbWFfcG9zKTsKKwkJano0NzQwX2RtYV9zZXRfZHN0X2FkZHIocHJ0ZC0+ZG1hLCBwcnRkLT5maWZvX2FkZHIpOworCX0gZWxzZSB7CisJCWp6NDc0MF9kbWFfc2V0X3NyY19hZGRyKHBydGQtPmRtYSwgcHJ0ZC0+Zmlmb19hZGRyKTsKKwkJano0NzQwX2RtYV9zZXRfZHN0X2FkZHIocHJ0ZC0+ZG1hLCBwcnRkLT5kbWFfcG9zKTsKKwl9CisKKwlqejQ3NDBfZG1hX3NldF90cmFuc2Zlcl9jb3VudChwcnRkLT5kbWEsIGNvdW50KTsKKworCXBydGQtPmRtYV9wb3MgKz0gY291bnQ7CisKKwlqejQ3NDBfZG1hX2VuYWJsZShwcnRkLT5kbWEpOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfcGNtX2RtYV90cmFuc2Zlcl9kb25lKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSwgaW50IGVyciwKKwl2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBkZXZfaWQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgano0NzQwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKworCWp6NDc0MF9wY21fc3RhcnRfdHJhbnNmZXIocHJ0ZCwgc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBqejQ3NDBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgano0NzQwX3BjbV9jb25maWcgKmNvbmZpZzsKKworCWNvbmZpZyA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShydGQtPmRhaS0+Y3B1X2RhaSwgc3Vic3RyZWFtKTsKKworCWlmICghY29uZmlnKQorCQlyZXR1cm4gMDsKKworCWlmICghcHJ0ZC0+ZG1hKSB7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCQlwcnRkLT5kbWEgPSBqejQ3NDBfZG1hX3JlcXVlc3Qoc3Vic3RyZWFtLCAiUENNIENhcHR1cmUiKTsKKwkJZWxzZQorCQkJcHJ0ZC0+ZG1hID0gano0NzQwX2RtYV9yZXF1ZXN0KHN1YnN0cmVhbSwgIlBDTSBQbGF5YmFjayIpOworCX0KKworCWlmICghcHJ0ZC0+ZG1hKQorCQlyZXR1cm4gLUVCVVNZOworCisJano0NzQwX2RtYV9jb25maWd1cmUocHJ0ZC0+ZG1hLCAmY29uZmlnLT5kbWFfY29uZmlnKTsKKwlwcnRkLT5maWZvX2FkZHIgPSBjb25maWctPmZpZm9fYWRkcjsKKworCWp6NDc0MF9kbWFfc2V0X2NvbXBsZXRlX2NiKHBydGQtPmRtYSwgano0NzQwX3BjbV9kbWFfdHJhbnNmZXJfZG9uZSk7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sICZzdWJzdHJlYW0tPmRtYV9idWZmZXIpOworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKTsKKworCXBydGQtPmRtYV9wZXJpb2QgPSBwYXJhbXNfcGVyaW9kX2J5dGVzKHBhcmFtcyk7CisJcHJ0ZC0+ZG1hX3N0YXJ0ID0gcnVudGltZS0+ZG1hX2FkZHI7CisJcHJ0ZC0+ZG1hX3BvcyA9IHBydGQtPmRtYV9zdGFydDsKKwlwcnRkLT5kbWFfZW5kID0gcHJ0ZC0+ZG1hX3N0YXJ0ICsgcnVudGltZS0+ZG1hX2J5dGVzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sIE5VTEwpOworCWlmIChwcnRkLT5kbWEpIHsKKwkJano0NzQwX2RtYV9mcmVlKHBydGQtPmRtYSk7CisJCXBydGQtPmRtYSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3BjbV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkID0gc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIXBydGQtPmRtYSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXBydGQtPmRtYV9wb3MgPSBwcnRkLT5kbWFfc3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfcGNtX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgano0NzQwX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCWp6NDc0MF9wY21fc3RhcnRfdHJhbnNmZXIocHJ0ZCwgc3Vic3RyZWFtKTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCWp6NDc0MF9kbWFfZGlzYWJsZShwcnRkLT5kbWEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IGp6NDc0MF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYnl0ZV9vZmZzZXQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgb2Zmc2V0OworCXN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSA9IHBydGQtPmRtYTsKKworCS8qIHBydGQtPmRtYV9wb3MgcG9pbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdHJhbnNmZXIuIFNvIGJ5CisJICogc3VidHJhY3RpbmcgcHJkdC0+ZG1hX3N0YXJ0IHdlIGdldCB0aGUgb2Zmc2V0IHRvIHRoZSBlbmQgb2YgdGhlCisJICogY3VycmVudCBwZXJpb2QgaW4gYnl0ZXMuIEJ5IHN1YnRyYWN0aW5nIHRoZSByZXNpZHVlIG9mIHRoZSB0cmFuc2ZlcgorCSAqIHdlIGdldCB0aGUgY3VycmVudCBvZmZzZXQgaW4gYnl0ZXMuICovCisJYnl0ZV9vZmZzZXQgPSBwcnRkLT5kbWFfcG9zIC0gcHJ0ZC0+ZG1hX3N0YXJ0OworCWJ5dGVfb2Zmc2V0IC09IGp6NDc0MF9kbWFfZ2V0X3Jlc2lkdWUoZG1hKTsKKworCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlX29mZnNldCk7CisJaWYgKG9mZnNldCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJb2Zmc2V0ID0gMDsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IGp6NDc0MF9ydW50aW1lX2RhdGEgKnBydGQ7CisKKwlwcnRkID0ga3phbGxvYyhzaXplb2YoKnBydGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJ0ZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmano0NzQwX3BjbV9oYXJkd2FyZSk7CisKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwcnRkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgano0NzQwX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBqejQ3NDBfcnVudGltZV9kYXRhICpwcnRkID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJa2ZyZWUocHJ0ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBqejQ3NDBfcGNtX21tYXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQlzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkciA+PiBQQUdFX1NISUZULAorCQkJdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgano0NzQwX3BjbV9vcHMgPSB7CisJLm9wZW4JCT0gano0NzQwX3BjbV9vcGVuLAorCS5jbG9zZQkJPSBqejQ3NDBfcGNtX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gano0NzQwX3BjbV9od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBqejQ3NDBfcGNtX2h3X2ZyZWUsCisJLnByZXBhcmUJPSBqejQ3NDBfcGNtX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBqejQ3NDBfcGNtX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBqejQ3NDBfcGNtX3BvaW50ZXIsCisJLm1tYXAJCT0gano0NzQwX3BjbV9tbWFwLAorfTsKKworc3RhdGljIGludCBqejQ3NDBfcGNtX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIoc3RydWN0IHNuZF9wY20gKnBjbSwgaW50IHN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZiA9ICZzdWJzdHJlYW0tPmRtYV9idWZmZXI7CisJc2l6ZV90IHNpemUgPSBqejQ3NDBfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CisKKwlidWYtPmRldi50eXBlID0gU05EUlZfRE1BX1RZUEVfREVWOworCWJ1Zi0+ZGV2LmRldiA9IHBjbS0+Y2FyZC0+ZGV2OworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCWJ1Zi0+YXJlYSA9IGRtYV9hbGxvY19ub25jb2hlcmVudChwY20tPmNhcmQtPmRldiwgc2l6ZSwKKwkJCQkJICAmYnVmLT5hZGRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1Zi0+YXJlYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWYtPmJ5dGVzID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBqejQ3NDBfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgKmJ1ZjsKKwlpbnQgc3RyZWFtOworCisJZm9yIChzdHJlYW0gPSAwOyBzdHJlYW0gPCBTTkRSVl9QQ01fU1RSRUFNX0xBU1Q7ICsrc3RyZWFtKSB7CisJCXN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tzdHJlYW1dLnN1YnN0cmVhbTsKKwkJaWYgKCFzdWJzdHJlYW0pCisJCQljb250aW51ZTsKKworCQlidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCQlpZiAoIWJ1Zi0+YXJlYSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9mcmVlX25vbmNvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLCBidWYtPmFyZWEsCisJCQkJYnVmLT5hZGRyKTsKKwkJYnVmLT5hcmVhID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB1NjQgano0NzQwX3BjbV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworaW50IGp6NDc0MF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghY2FyZC0+ZGV2LT5kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5kbWFfbWFzayA9ICZqejQ3NDBfcGNtX2RtYW1hc2s7CisKKwlpZiAoIWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2spCisJCWNhcmQtPmRldi0+Y29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCisJaWYgKGRhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGp6NDc0MF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChkYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCXJldCA9IGp6NDc0MF9wY21fcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQlTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gano0NzQwX3NvY19wbGF0Zm9ybSA9IHsKKwkJLm5hbWUJCT0gImp6NDc0MC1wY20iLAorCQkucGNtX29wcwk9ICZqejQ3NDBfcGNtX29wcywKKwkJLnBjbV9uZXcJPSBqejQ3NDBfcGNtX25ldywKKwkJLnBjbV9mcmVlCT0gano0NzQwX3BjbV9mcmVlLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF9zb2NfcGxhdGZvcm0pOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqejQ3NDBfcGNtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJmp6NDc0MF9zb2NfcGxhdGZvcm0pOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBqejQ3NDBfcGNtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmano0NzQwX3NvY19wbGF0Zm9ybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGp6NDc0MF9wY21fZHJpdmVyID0geworCS5wcm9iZSA9IGp6NDc0MF9wY21fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGp6NDc0MF9wY21fcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJqejQ3NDAtcGNtIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGp6NDc0MF9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmp6NDc0MF9wY21fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGp6NDc0MF9zb2NfcGxhdGZvcm1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBqejQ3NDBfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmp6NDc0MF9wY21fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGp6NDc0MF9zb2NfcGxhdGZvcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxhcnMtUGV0ZXIgQ2xhdXNlbiA8bGFyc0BtZXRhZm9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmdlbmljIFNvQyBKWjQ3NDAgUENNIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtcGNtLmggYi9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1wY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YyMjFlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtcGNtLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX0paNDc0MF9QQ01fSAorI2RlZmluZSBfSlo0NzQwX1BDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9kbWEuaD4KKworLyogcGxhdGZvcm0gZGF0YSAqLworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGp6NDc0MF9zb2NfcGxhdGZvcm07CisKK3N0cnVjdCBqejQ3NDBfcGNtX2NvbmZpZyB7CisJc3RydWN0IGp6NDc0MF9kbWFfY29uZmlnIGRtYV9jb25maWc7CisJcGh5c19hZGRyX3QgZmlmb19hZGRyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL3FpX2xiNjAuYyBiL3NvdW5kL3NvYy9qejQ3NDAvcWlfbGI2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWY0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mvano0NzQwL3FpX2xiNjAuYwpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAiLi4vY29kZWNzL2p6NDc0MC5oIgorI2luY2x1ZGUgImp6NDc0MC1wY20uaCIKKyNpbmNsdWRlICJqejQ3NDAtaTJzLmgiCisKKworI2RlZmluZSBRSV9MQjYwX1NORF9HUElPIEpaX0dQSU9fUE9SVEIoMjkpCisjZGVmaW5lIFFJX0xCNjBfQU1QX0dQSU8gSlpfR1BJT19QT1JURCg0KQorCitzdGF0aWMgaW50IHFpX2xiNjBfc3BrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3aWRnZXQsCisJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0cmwsIGludCBldmVudCkKK3sKKwlpbnQgb24gPSAwOworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNVSkKKwkJb24gPSAxOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTUQpCisJCW9uID0gMDsKKworCWdwaW9fc2V0X3ZhbHVlKFFJX0xCNjBfU05EX0dQSU8sIG9uKTsKKwlncGlvX3NldF92YWx1ZShRSV9MQjYwX0FNUF9HUElPLCBvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHFpX2xiNjBfd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBxaV9sYjYwX3Nwa19ldmVudCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBxaV9sYjYwX3JvdXRlc1tdID0geworCXsiTWljIiwgTlVMTCwgIk1JQyJ9LAorCXsiU3BlYWtlciIsIE5VTEwsICJMT1VUIn0sCisJeyJTcGVha2VyIiwgTlVMTCwgIlJPVVQifSwKK307CisKKyNkZWZpbmUgUUlfTEI2MF9EQUlGTVQgKFNORF9TT0NfREFJRk1UX0kyUyB8IFwKKwkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgXAorCQkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSkKKworc3RhdGljIGludCBxaV9sYjYwX2NvZGVjX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQoreworCWludCByZXQ7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gY29kZWMtPnNvY2Rldi0+Y2FyZC0+ZGFpX2xpbmstPmNwdV9kYWk7CisKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTElOIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTiIpOworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBRSV9MQjYwX0RBSUZNVCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjcHUgZGFpIGZvcm1hdDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgcWlfbGI2MF93aWRnZXRzLCBBUlJBWV9TSVpFKHFpX2xiNjBfd2lkZ2V0cykpOworCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGNvZGVjLCBxaV9sYjYwX3JvdXRlcywgQVJSQVlfU0laRShxaV9sYjYwX3JvdXRlcykpOworCXNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgcWlfbGI2MF9kYWkgPSB7CisJLm5hbWUgPSAiano0NzQwIiwKKwkuc3RyZWFtX25hbWUgPSAiano0NzQwIiwKKwkuY3B1X2RhaSA9ICZqejQ3NDBfaTJzX2RhaSwKKwkuY29kZWNfZGFpID0gJmp6NDc0MF9jb2RlY19kYWksCisJLmluaXQgPSBxaV9sYjYwX2NvZGVjX2luaXQsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBxaV9sYjYwID0geworCS5uYW1lID0gIlFJIExCNjAiLAorCS5kYWlfbGluayA9ICZxaV9sYjYwX2RhaSwKKwkubnVtX2xpbmtzID0gMSwKKwkucGxhdGZvcm0gPSAmano0NzQwX3NvY19wbGF0Zm9ybSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgcWlfbGI2MF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZxaV9sYjYwLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl9qejQ3NDBfY29kZWMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcWlfbGI2MF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBxaV9sYjYwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcWlfbGI2MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisKKwlpZiAoIXFpX2xiNjBfc25kX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUUlfTEI2MF9TTkRfR1BJTywgIlNORCIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJxaV9sYjYwIHNuZDogRmFpbGVkIHRvIHJlcXVlc3QgU05EIEdQSU8oJWQpOiAlZFxuIiwKKwkJCQlRSV9MQjYwX1NORF9HUElPLCByZXQpOworCQlnb3RvIGVycl9kZXZpY2VfcHV0OworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdChRSV9MQjYwX0FNUF9HUElPLCAiQU1QIik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoInFpX2xiNjAgc25kOiBGYWlsZWQgdG8gcmVxdWVzdCBBTVAgR1BJTyglZCk6ICVkXG4iLAorCQkJCVFJX0xCNjBfQU1QX0dQSU8sIHJldCk7CisJCWdvdG8gZXJyX2dwaW9fZnJlZV9zbmQ7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFFJX0xCNjBfU05EX0dQSU8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChRSV9MQjYwX0FNUF9HUElPLCAwKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHFpX2xiNjBfc25kX2RldmljZSwgJnFpX2xiNjBfc25kX2RldmRhdGEpOworCXFpX2xiNjBfc25kX2RldmRhdGEuZGV2ID0gJnFpX2xiNjBfc25kX2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChxaV9sYjYwX3NuZF9kZXZpY2UpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJxaV9sYjYwIHNuZDogRmFpbGVkIHRvIGFkZCBzbmQgc29jIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3Vuc2V0X3BkYXRhOworCX0KKworCSByZXR1cm4gMDsKKworZXJyX3Vuc2V0X3BkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHFpX2xiNjBfc25kX2RldmljZSwgTlVMTCk7CisvKmVycl9ncGlvX2ZyZWVfYW1wOiovCisJZ3Bpb19mcmVlKFFJX0xCNjBfQU1QX0dQSU8pOworZXJyX2dwaW9fZnJlZV9zbmQ6CisJZ3Bpb19mcmVlKFFJX0xCNjBfU05EX0dQSU8pOworZXJyX2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChxaV9sYjYwX3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHFpX2xiNjBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxaV9sYjYwX2V4aXQodm9pZCkKK3sKKwlncGlvX2ZyZWUoUUlfTEI2MF9BTVBfR1BJTyk7CisJZ3Bpb19mcmVlKFFJX0xCNjBfU05EX0dQSU8pOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHFpX2xiNjBfc25kX2RldmljZSk7Cit9Cittb2R1bGVfZXhpdChxaV9sYjYwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgUUkgTEI2MCBBdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2QvS2NvbmZpZyBiL3NvdW5kL3NvYy9raXJrd29vZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZWMyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2QvS2NvbmZpZwpAQCAtMCwwICsxLDIwIEBACitjb25maWcgU05EX0tJUktXT09EX1NPQworCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBNYXJ2ZWxsIEtpcmt3b29kIGNoaXAiCisJZGVwZW5kcyBvbiBBUkNIX0tJUktXT09ECisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCisJICB0aGUgS2lya3dvb2QgSTJTIGludGVyZmFjZS4gWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUKKwkgIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KKworY29uZmlnIFNORF9LSVJLV09PRF9TT0NfSTJTCisJdHJpc3RhdGUKKworY29uZmlnIFNORF9LSVJLV09PRF9TT0NfT1BFTlJECisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBLaXJrd29vZCBPcGVucmQgQ2xpZW50IgorCWRlcGVuZHMgb24gU05EX0tJUktXT09EX1NPQyAmJiBNQUNIX09QRU5SRF9DTElFTlQKKwlzZWxlY3QgU05EX0tJUktXT09EX1NPQ19JMlMKKwlzZWxlY3QgU05EX1NPQ19DUzQyTDUxCisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbgorCSAgT3BlbnJkIENsaWVudC4KKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL01ha2VmaWxlIGIvc291bmQvc29jL2tpcmt3b29kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTE2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2QvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitzbmQtc29jLWtpcmt3b29kLW9ianMgOj0ga2lya3dvb2QtZG1hLm8KK3NuZC1zb2Mta2lya3dvb2QtaTJzLW9ianMgOj0ga2lya3dvb2QtaTJzLm8KKworb2JqLSQoQ09ORklHX1NORF9LSVJLV09PRF9TT0MpICs9IHNuZC1zb2Mta2lya3dvb2Qubworb2JqLSQoQ09ORklHX1NORF9LSVJLV09PRF9TT0NfSTJTKSArPSBzbmQtc29jLWtpcmt3b29kLWkycy5vCisKK3NuZC1zb2Mtb3BlbnJkLW9ianMgOj0ga2lya3dvb2Qtb3BlbnJkLm8KKworb2JqLSQoQ09ORklHX1NORF9LSVJLV09PRF9TT0NfT1BFTlJEKSArPSBzbmQtc29jLW9wZW5yZC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmMgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMjA1YgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1kbWEuYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIGtpcmt3b29kLWRtYS5jCisgKgorICogKGMpIDIwMTAgQXJuYXVkIFBhdGFyZCA8YXBhdGFyZEBtYW5kcml2YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlICJraXJrd29vZC1kbWEuaCIKKyNpbmNsdWRlICJraXJrd29vZC5oIgorCisjZGVmaW5lIEtJUktXT09EX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisjZGVmaW5lIEtJUktXT09EX0ZPUk1BVFMgXAorCShTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8IFwKKwkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfCBcCisJIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQorCitzdHJ1Y3Qga2lya3dvb2RfZG1hX3ByaXYgeworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqcGxheV9zdHJlYW07CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpyZWNfc3RyZWFtOworCXN0cnVjdCBraXJrd29vZF9kbWFfZGF0YSAqZGF0YTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBraXJrd29vZF9kbWFfc25kX2h3ID0geworCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJIFNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZvcm1hdHMJCT0gS0lSS1dPT0RfRk9STUFUUywKKwkucmF0ZXMJCQk9IEtJUktXT09EX1JBVEVTLAorCS5yYXRlX21pbgkJPSA0NDEwMCwKKwkucmF0ZV9tYXgJCT0gOTYwMDAsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IEtJUktXT09EX1NORF9NQVhfUEVSSU9EX0JZVEVTICogS0lSS1dPT0RfU05EX01BWF9QRVJJT0RTLAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gS0lSS1dPT0RfU05EX01JTl9QRVJJT0RfQllURVMsCisJLnBlcmlvZF9ieXRlc19tYXgJPSBLSVJLV09PRF9TTkRfTUFYX1BFUklPRF9CWVRFUywKKwkucGVyaW9kc19taW4JCT0gS0lSS1dPT0RfU05EX01JTl9QRVJJT0RTLAorCS5wZXJpb2RzX21heAkJPSBLSVJLV09PRF9TTkRfTUFYX1BFUklPRFMsCisJLmZpZm9fc2l6ZQkJPSAwLAorfTsKKworc3RhdGljIHU2NCBraXJrd29vZF9kbWFfZG1hbWFzayA9IDB4RkZGRkZGRkZVTDsKKworc3RhdGljIGlycXJldHVybl90IGtpcmt3b29kX2RtYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBraXJrd29vZF9kbWFfcHJpdiAqcHJkYXRhID0gZGV2X2lkOworCXN0cnVjdCBraXJrd29vZF9kbWFfZGF0YSAqcHJpdiA9IHByZGF0YS0+ZGF0YTsKKwl1bnNpZ25lZCBsb25nIG1hc2ssIHN0YXR1cywgY2F1c2U7CisKKwltYXNrID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9JTlRfTUFTSyk7CisJc3RhdHVzID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9JTlRfQ0FVU0UpICYgbWFzazsKKworCWNhdXNlID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9FUlJfQ0FVU0UpOworCWlmICh1bmxpa2VseShjYXVzZSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGdvdCBlcnIgaW50ZXJydXB0IDB4JWx4XG4iLAorCQkJCV9fZnVuY19fLCBjYXVzZSk7CisJCXdyaXRlbChjYXVzZSwgcHJpdi0+aW8gKyBLSVJLV09PRF9FUlJfQ0FVU0UpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogd2UndmUgZW5hYmxlZCBvbmx5IGJ5dGVzIGludGVycnVwdHMgLi4uICovCisJaWYgKHN0YXR1cyAmIH4oS0lSS1dPT0RfSU5UX0NBVVNFX1BMQVlfQllURVMgfCBcCisJCQlLSVJLV09PRF9JTlRfQ0FVU0VfUkVDX0JZVEVTKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5leHBlY3RlZCBpbnRlcnJ1cHQgJWx4XG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBhY2sgaW50ICovCisJd3JpdGVsKHN0YXR1cywgcHJpdi0+aW8gKyBLSVJLV09PRF9JTlRfQ0FVU0UpOworCisJaWYgKHN0YXR1cyAmIEtJUktXT09EX0lOVF9DQVVTRV9QTEFZX0JZVEVTKQorCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHByZGF0YS0+cGxheV9zdHJlYW0pOworCisJaWYgKHN0YXR1cyAmIEtJUktXT09EX0lOVF9DQVVTRV9SRUNfQllURVMpCisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQocHJkYXRhLT5yZWNfc3RyZWFtKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQga2lya3dvb2RfZG1hX2NvbmZfbWJ1c193aW5kb3dzKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IHdpbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBkbWEsCisJCQkJCXN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCit7CisJaW50IGk7CisKKwkvKiBGaXJzdCBkaXNhYmxlIGFuZCBjbGVhciB3aW5kb3dzICovCisJd3JpdGVsKDAsIGJhc2UgKyBLSVJLV09PRF9BVURJT19XSU5fQ1RSTF9SRUcod2luKSk7CisJd3JpdGVsKDAsIGJhc2UgKyBLSVJLV09PRF9BVURJT19XSU5fQkFTRV9SRUcod2luKSk7CisKKwkvKiB0cnkgdG8gZmluZCBtYXRjaGluZyBjcyBmb3IgY3VycmVudCBkbWEgYWRkcmVzcyAqLworCWZvciAoaSA9IDA7IGkgPCBkcmFtLT5udW1fY3M7IGkrKykgeworCQlzdHJ1Y3QgbWJ1c19kcmFtX3dpbmRvdyAqY3MgPSBkcmFtLT5jcyArIGk7CisJCWlmICgoY3MtPmJhc2UgJiAweGZmZmYwMDAwKSA8IChkbWEgJiAweGZmZmYwMDAwKSkgeworCQkJd3JpdGVsKGNzLT5iYXNlICYgMHhmZmZmMDAwMCwKKwkJCQliYXNlICsgS0lSS1dPT0RfQVVESU9fV0lOX0JBU0VfUkVHKHdpbikpOworCQkJd3JpdGVsKCgoY3MtPnNpemUgLSAxKSAmIDB4ZmZmZjAwMDApIHwKKwkJCQkoY3MtPm1idXNfYXR0ciA8PCA4KSB8CisJCQkJKGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQgPDwgNCkgfCAxLAorCQkJCWJhc2UgKyBLSVJLV09PRF9BVURJT19XSU5fQ1RSTF9SRUcod2luKSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQga2lya3dvb2RfZG1hX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNvY19ydW50aW1lLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IGtpcmt3b29kX2RtYV9kYXRhICpwcml2OworCXN0cnVjdCBraXJrd29vZF9kbWFfcHJpdiAqcHJkYXRhID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCXByaXYgPSBzbmRfc29jX2RhaV9nZXRfZG1hX2RhdGEoY3B1X2RhaSwgc3Vic3RyZWFtKTsKKwlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJmtpcmt3b29kX2RtYV9zbmRfaHcpOworCisJLyogRW5zdXJlIHRoYXQgYWxsIGNvbnN0cmFpbnRzIGxpbmtlZCB0byBkbWEgYnVyc3QgYXJlIGZ1bGxmaWxsZWQgKi8KKwllcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAorCQkJcHJpdi0+YnVyc3QgKiAyLAorCQkJS0lSS1dPT0RfQVVESU9fQlVGX01BWC0xKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHJ1bnRpbWUsIDAsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAorCQkJcHJpdi0+YnVyc3QpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfQllURVMsCisJCQkgcHJpdi0+YnVyc3QpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHNvY19ydW50aW1lLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YSA9PSBOVUxMKSB7CisJCXByZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBraXJrd29vZF9kbWFfcHJpdiksIEdGUF9LRVJORUwpOworCQlpZiAocHJkYXRhID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlwcmRhdGEtPmRhdGEgPSBwcml2OworCisJCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwga2lya3dvb2RfZG1hX2lycSwgSVJRRl9TSEFSRUQsCisJCQkJICAia2lya3dvb2QtaTJzIiwgcHJkYXRhKTsKKwkJaWYgKGVycikgeworCQkJa2ZyZWUocHJkYXRhKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlzb2NfcnVudGltZS0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEgPSBwcmRhdGE7CisKKwkJLyoKKwkJICogRW5hYmxlIEVycm9yIGludGVycnVwdHMuIFdlJ3JlIG9ubHkgYWNrJ2luZyB0aGVtIGJ1dAorCQkgKiBpdCdzIHVzZWZ1bGwgZm9yIGRpYWdub3N0aWNzCisJCSAqLworCQl3cml0ZWwoKHVuc2lnbmVkIGxvbmcpLTEsIHByaXYtPmlvICsgS0lSS1dPT0RfRVJSX01BU0spOworCX0KKworCWFkZHIgPSB2aXJ0X3RvX3BoeXMoc3Vic3RyZWFtLT5kbWFfYnVmZmVyLmFyZWEpOworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCXByZGF0YS0+cGxheV9zdHJlYW0gPSBzdWJzdHJlYW07CisJCWtpcmt3b29kX2RtYV9jb25mX21idXNfd2luZG93cyhwcml2LT5pbywKKwkJCUtJUktXT09EX1BMQVlCQUNLX1dJTiwgYWRkciwgcHJpdi0+ZHJhbSk7CisJfSBlbHNlIHsKKwkJcHJkYXRhLT5yZWNfc3RyZWFtID0gc3Vic3RyZWFtOworCQlraXJrd29vZF9kbWFfY29uZl9tYnVzX3dpbmRvd3MocHJpdi0+aW8sCisJCQlLSVJLV09PRF9SRUNPUkRfV0lOLCBhZGRyLCBwcml2LT5kcmFtKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBraXJrd29vZF9kbWFfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gc29jX3J1bnRpbWUtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3Qga2lya3dvb2RfZG1hX3ByaXYgKnByZGF0YSA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qga2lya3dvb2RfZG1hX2RhdGEgKnByaXY7CisKKwlwcml2ID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKGNwdV9kYWksIHN1YnN0cmVhbSk7CisKKwlpZiAoIXByZGF0YSB8fCAhcHJpdikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcHJkYXRhLT5wbGF5X3N0cmVhbSA9IE5VTEw7CisJZWxzZQorCQlwcmRhdGEtPnJlY19zdHJlYW0gPSBOVUxMOworCisJaWYgKCFwcmRhdGEtPnBsYXlfc3RyZWFtICYmICFwcmRhdGEtPnJlY19zdHJlYW0pIHsKKwkJd3JpdGVsKDAsIHByaXYtPmlvICsgS0lSS1dPT0RfRVJSX01BU0spOworCQlmcmVlX2lycShwcml2LT5pcnEsIHByZGF0YSk7CisJCWtmcmVlKHByZGF0YSk7CisJCXNvY19ydW50aW1lLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2lya3dvb2RfZG1hX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJc25kX3BjbV9zZXRfcnVudGltZV9idWZmZXIoc3Vic3RyZWFtLCAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyKTsKKwlydW50aW1lLT5kbWFfYnl0ZXMgPSBwYXJhbXNfYnVmZmVyX2J5dGVzKHBhcmFtcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBraXJrd29vZF9kbWFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX3NldF9ydW50aW1lX2J1ZmZlcihzdWJzdHJlYW0sIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtpcmt3b29kX2RtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnNvY19ydW50aW1lID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gc29jX3J1bnRpbWUtPmRhaS0+Y3B1X2RhaTsKKwlzdHJ1Y3Qga2lya3dvb2RfZG1hX2RhdGEgKnByaXY7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjb3VudDsKKworCXByaXYgPSBzbmRfc29jX2RhaV9nZXRfZG1hX2RhdGEoY3B1X2RhaSwgc3Vic3RyZWFtKTsKKworCS8qIGNvbXB1dGUgYnVmZmVyIHNpemUgaW4gdGVybSBvZiAid29yZHMiIGFzIHJlcXVlc3RlZCBpbiBzcGVjcyAqLworCXNpemUgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+YnVmZmVyX3NpemUpOworCXNpemUgPSAoc2l6ZT4+MiktMTsKKwljb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJd3JpdGVsKGNvdW50LCBwcml2LT5pbyArIEtJUktXT09EX1BMQVlfQllURV9JTlRfQ09VTlQpOworCQl3cml0ZWwocnVudGltZS0+ZG1hX2FkZHIsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWV9CVUZfQUREUik7CisJCXdyaXRlbChzaXplLCBwcml2LT5pbyArIEtJUktXT09EX1BMQVlfQlVGX1NJWkUpOworCX0gZWxzZSB7CisJCXdyaXRlbChjb3VudCwgcHJpdi0+aW8gKyBLSVJLV09PRF9SRUNfQllURV9JTlRfQ09VTlQpOworCQl3cml0ZWwocnVudGltZS0+ZG1hX2FkZHIsIHByaXYtPmlvICsgS0lSS1dPT0RfUkVDX0JVRl9BRERSKTsKKwkJd3JpdGVsKHNpemUsIHByaXYtPmlvICsgS0lSS1dPT0RfUkVDX0JVRl9TSVpFKTsKKwl9CisKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qga2lya3dvb2RfZG1hX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtCisJCQkJCQkqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpzb2NfcnVudGltZSA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHNvY19ydW50aW1lLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IGtpcmt3b29kX2RtYV9kYXRhICpwcml2OworCXNuZF9wY21fdWZyYW1lc190IGNvdW50OworCisJcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShjcHVfZGFpLCBzdWJzdHJlYW0pOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCWNvdW50ID0gYnl0ZXNfdG9fZnJhbWVzKHN1YnN0cmVhbS0+cnVudGltZSwKKwkJCXJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUExBWV9CWVRFX0NPVU5UKSk7CisJZWxzZQorCQljb3VudCA9IGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsCisJCQlyZWFkbChwcml2LT5pbyArIEtJUktXT09EX1JFQ19CWVRFX0NPVU5UKSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0cnVjdCBzbmRfcGNtX29wcyBraXJrd29vZF9kbWFfb3BzID0geworCS5vcGVuID0JCWtpcmt3b29kX2RtYV9vcGVuLAorCS5jbG9zZSA9ICAgICAgICBraXJrd29vZF9kbWFfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CWtpcmt3b29kX2RtYV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSAgICAgIGtpcmt3b29kX2RtYV9od19mcmVlLAorCS5wcmVwYXJlID0gICAgICBraXJrd29vZF9kbWFfcHJlcGFyZSwKKwkucG9pbnRlciA9CWtpcmt3b29kX2RtYV9wb2ludGVyLAorfTsKKworc3RhdGljIGludCBraXJrd29vZF9kbWFfcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihzdHJ1Y3Qgc25kX3BjbSAqcGNtLAorCQlpbnQgc3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqYnVmID0gJnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcjsKKwlzaXplX3Qgc2l6ZSA9IGtpcmt3b29kX2RtYV9zbmRfaHcuYnVmZmVyX2J5dGVzX21heDsKKworCWJ1Zi0+ZGV2LnR5cGUgPSBTTkRSVl9ETUFfVFlQRV9ERVY7CisJYnVmLT5kZXYuZGV2ID0gcGNtLT5jYXJkLT5kZXY7CisJYnVmLT5hcmVhID0gZG1hX2FsbG9jX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBzaXplLAorCQkJJmJ1Zi0+YWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYtPmFyZWEpCisJCXJldHVybiAtRU5PTUVNOworCWJ1Zi0+Ynl0ZXMgPSBzaXplOworCWJ1Zi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtpcmt3b29kX2RtYV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXJkLT5kZXYtPmRtYV9tYXNrKQorCQljYXJkLT5kZXYtPmRtYV9tYXNrID0gJmtpcmt3b29kX2RtYV9kbWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwlpZiAoZGFpLT5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJcmV0ID0ga2lya3dvb2RfZG1hX3ByZWFsbG9jYXRlX2RtYV9idWZmZXIocGNtLAorCQkJCVNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCQlyZXQgPSBraXJrd29vZF9kbWFfcHJlYWxsb2NhdGVfZG1hX2J1ZmZlcihwY20sCisJCQkJU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGtpcmt3b29kX2RtYV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9kbWFfYnVmZmVyICpidWY7CisJaW50IHN0cmVhbTsKKworCWZvciAoc3RyZWFtID0gMDsgc3RyZWFtIDwgMjsgc3RyZWFtKyspIHsKKwkJc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtOworCQlpZiAoIXN1YnN0cmVhbSkKKwkJCWNvbnRpbnVlOworCQlidWYgPSAmc3Vic3RyZWFtLT5kbWFfYnVmZmVyOworCQlpZiAoIWJ1Zi0+YXJlYSkKKwkJCWNvbnRpbnVlOworCisJCWRtYV9mcmVlX2NvaGVyZW50KHBjbS0+Y2FyZC0+ZGV2LCBidWYtPmJ5dGVzLAorCQkJCWJ1Zi0+YXJlYSwgYnVmLT5hZGRyKTsKKwkJYnVmLT5hcmVhID0gTlVMTDsKKwl9Cit9CisKK3N0cnVjdCBzbmRfc29jX3BsYXRmb3JtIGtpcmt3b29kX3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAia2lya3dvb2QtZG1hIiwKKwkucGNtX29wcwk9ICZraXJrd29vZF9kbWFfb3BzLAorCS5wY21fbmV3CT0ga2lya3dvb2RfZG1hX25ldywKKwkucGNtX2ZyZWUJPSBraXJrd29vZF9kbWFfZnJlZV9kbWFfYnVmZmVycywKK307CitFWFBPUlRfU1lNQk9MX0dQTChraXJrd29vZF9zb2NfcGxhdGZvcm0pOworCitzdGF0aWMgaW50IF9faW5pdCBraXJrd29vZF9zb2NfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZraXJrd29vZF9zb2NfcGxhdGZvcm0pOworfQorbW9kdWxlX2luaXQoa2lya3dvb2Rfc29jX3BsYXRmb3JtX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQga2lya3dvb2Rfc29jX3BsYXRmb3JtX2V4aXQodm9pZCkKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJmtpcmt3b29kX3NvY19wbGF0Zm9ybSk7Cit9Cittb2R1bGVfZXhpdChraXJrd29vZF9zb2NfcGxhdGZvcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFybmF1ZCBQYXRhcmQgPGFwYXRhcmRAbWFuZHJpdmEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIEtpcmt3b29kIEF1ZGlvIERNQSBtb2R1bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWRtYS5oIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDQ1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtZG1hLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGtpcmt3b29kLWRtYS5oCisgKgorICogKGMpIDIwMTAgQXJuYXVkIFBhdGFyZCA8YXBhdGFyZEBtYW5kcml2YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfS0lSS1dPT0RfRE1BX0gKKyNkZWZpbmUgX0tJUktXT09EX0RNQV9ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSBraXJrd29vZF9zb2NfcGxhdGZvcm07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MWZmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtaTJzLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBraXJrd29vZC1pMnMuYworICoKKyAqIChjKSAyMDEwIEFybmF1ZCBQYXRhcmQgPGFwYXRhcmRAbWFuZHJpdmEuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KKyNpbmNsdWRlICJraXJrd29vZC1pMnMuaCIKKyNpbmNsdWRlICJraXJrd29vZC5oIgorCisjZGVmaW5lIERSVl9OQU1FCSJraXJrd29vZC1pMnMiCisKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX1JBVEVTIFwKKwkoU05EUlZfUENNX1JBVEVfNDQxMDAgfCBcCisJIFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwgU05EUlZfUENNX1JBVEVfOTYwMDApCisjZGVmaW5lIEtJUktXT09EX0kyU19GT1JNQVRTIFwKKwkoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBcCisJIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwgXAorCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworCitzdHJ1Y3Qgc25kX3NvY19kYWkga2lya3dvb2RfaTJzX2RhaTsKK3N0YXRpYyBzdHJ1Y3Qga2lya3dvb2RfZG1hX2RhdGEgKnByaXY7CisKK3N0YXRpYyBpbnQga2lya3dvb2RfaTJzX3NldF9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLAorCQl1bnNpZ25lZCBpbnQgZm10KQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfUklHSFRfSjoKKwkJbWFzayA9IEtJUktXT09EX0kyU19DVExfUko7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfTEVGVF9KOgorCQltYXNrID0gS0lSS1dPT0RfSTJTX0NUTF9MSjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6CisJCW1hc2sgPSBLSVJLV09PRF9JMlNfQ1RMX0kyUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBTZXQgc2FtZSBmb3JtYXQgZm9yIHBsYXliYWNrIGFuZCByZWNvcmQKKwkgKiBUaGlzIGF2b2lkcyBzb21lIHRyb3VibGVzLgorCSAqLworCXZhbHVlID0gcmVhZGwocHJpdi0+aW8rS0lSS1dPT0RfSTJTX1BMQVlDVEwpOworCXZhbHVlICY9IH5LSVJLV09PRF9JMlNfQ1RMX0pVU1RfTUFTSzsKKwl2YWx1ZSB8PSBtYXNrOworCXdyaXRlbCh2YWx1ZSwgcHJpdi0+aW8rS0lSS1dPT0RfSTJTX1BMQVlDVEwpOworCisJdmFsdWUgPSByZWFkbChwcml2LT5pbytLSVJLV09PRF9JMlNfUkVDQ1RMKTsKKwl2YWx1ZSAmPSB+S0lSS1dPT0RfSTJTX0NUTF9KVVNUX01BU0s7CisJdmFsdWUgfD0gbWFzazsKKwl3cml0ZWwodmFsdWUsIHByaXYtPmlvK0tJUktXT09EX0kyU19SRUNDVEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBraXJrd29vZF9zZXRfZGNvKHZvaWQgX19pb21lbSAqaW8sIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJdmFsdWUgPSBLSVJLV09PRF9EQ09fQ1RMX09GRlNFVF8wOworCXN3aXRjaCAocmF0ZSkgeworCWRlZmF1bHQ6CisJY2FzZSA0NDEwMDoKKwkJdmFsdWUgfD0gS0lSS1dPT0RfRENPX0NUTF9GUkVRXzExOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQl2YWx1ZSB8PSBLSVJLV09PRF9EQ09fQ1RMX0ZSRVFfMTI7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCXZhbHVlIHw9IEtJUktXT09EX0RDT19DVExfRlJFUV8yNDsKKwkJYnJlYWs7CisJfQorCXdyaXRlbCh2YWx1ZSwgaW8gKyBLSVJLV09PRF9EQ09fQ1RMKTsKKworCS8qIHdhaXQgZm9yIGRjbyBsb2NrZWQgKi8KKwlkbyB7CisJCWNwdV9yZWxheCgpOworCQl2YWx1ZSA9IHJlYWRsKGlvICsgS0lSS1dPT0RfRENPX1NQQ1JfU1RBVFVTKTsKKwkJdmFsdWUgJj0gS0lSS1dPT0RfRENPX1NQQ1JfU1RBVFVTOworCX0gd2hpbGUgKHZhbHVlID09IDApOworfQorCitzdGF0aWMgaW50IGtpcmt3b29kX2kyc19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1bnNpZ25lZCBpbnQgaTJzX3JlZywgcmVnOworCXVuc2lnbmVkIGxvbmcgaTJzX3ZhbHVlLCB2YWx1ZTsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWkyc19yZWcgPSBLSVJLV09PRF9JMlNfUExBWUNUTDsKKwkJcmVnID0gS0lSS1dPT0RfUExBWUNUTDsKKwl9IGVsc2UgeworCQlpMnNfcmVnID0gS0lSS1dPT0RfSTJTX1JFQ0NUTDsKKwkJcmVnID0gS0lSS1dPT0RfUkVDQ1RMOworCX0KKworCS8qIHNldCBkY28gY29uZiAqLworCWtpcmt3b29kX3NldF9kY28ocHJpdi0+aW8sIHBhcmFtc19yYXRlKHBhcmFtcykpOworCisJaTJzX3ZhbHVlID0gcmVhZGwocHJpdi0+aW8raTJzX3JlZyk7CisJaTJzX3ZhbHVlICY9IH5LSVJLV09PRF9JMlNfQ1RMX1NJWkVfTUFTSzsKKworCXZhbHVlID0gcmVhZGwocHJpdi0+aW8rcmVnKTsKKwl2YWx1ZSAmPSB+S0lSS1dPT0RfUExBWUNUTF9TSVpFX01BU0s7CisKKwkvKgorCSAqIFNpemUgc2V0dGluZ3MgaW4gcGxheS9yZWMgaTJzIGNvbnRyb2wgcmVncyBhbmQgcGxheS9yZWMgY29udHJvbAorCSAqIHJlZ3MgbXVzdCBiZSB0aGUgc2FtZS4KKwkgKi8KKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQocGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWkyc192YWx1ZSB8PSBLSVJLV09PRF9JMlNfQ1RMX1NJWkVfMTY7CisJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfU0laRV8xNl9DOworCQlicmVhazsKKwkvKgorCSAqIGRvZXNuJ3Qgd29yay4uLiBTMjBfM0xFICE9IGtpcmt3b29kIDIwYml0IGZvcm1hdCA/CisJICoKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKKwkJaTJzX3ZhbHVlIHw9IEtJUktXT09EX0kyU19DVExfU0laRV8yMDsKKwkJdmFsdWUgfD0gS0lSS1dPT0RfUExBWUNUTF9TSVpFXzIwOworCQlicmVhazsKKwkqLworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CisJCWkyc192YWx1ZSB8PSBLSVJLV09PRF9JMlNfQ1RMX1NJWkVfMjQ7CisJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfU0laRV8yNDsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKwkJaTJzX3ZhbHVlIHw9IEtJUktXT09EX0kyU19DVExfU0laRV8zMjsKKwkJdmFsdWUgfD0gS0lSS1dPT0RfUExBWUNUTF9TSVpFXzMyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQl2YWx1ZSAmPSB+S0lSS1dPT0RfUExBWUNUTF9NT05PX01BU0s7CisJCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA9PSAxKQorCQkJdmFsdWUgfD0gS0lSS1dPT0RfUExBWUNUTF9NT05PX0JPVEg7CisJCWVsc2UKKwkJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfTU9OT19PRkY7CisJfQorCisJd3JpdGVsKGkyc192YWx1ZSwgcHJpdi0+aW8raTJzX3JlZyk7CisJd3JpdGVsKHZhbHVlLCBwcml2LT5pbytyZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2lya3dvb2RfaTJzX3BsYXlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCisJLyoKKwkgKiBzcGVjcyBzYXlzIEtJUktXT09EX1BMQVlDVEwgbXVzdCBiZSByZWFkIDIgdGltZXMgYmVmb3JlCisJICogY2hhbmdpbmcgaXQuIFNvIHJlYWQgMSB0aW1lIGhlcmUgYW5kIDEgbGF0ZXIuCisJICovCisJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1BMQVlDVEwpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQkvKiBzdG9wIGF1ZGlvLCBlbmFibGUgaW50ZXJydXB0cyAqLworCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfUEFVU0U7CisJCXdyaXRlbCh2YWx1ZSwgcHJpdi0+aW8gKyBLSVJLV09PRF9QTEFZQ1RMKTsKKworCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfSU5UX01BU0spOworCQl2YWx1ZSB8PSBLSVJLV09PRF9JTlRfQ0FVU0VfUExBWV9CWVRFUzsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX0lOVF9NQVNLKTsKKworCQkvKiBjb25maWd1cmUgYXVkaW8gJiBlbmFibGUgaTJzIHBsYXliYWNrICovCisJCXZhbHVlID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9QTEFZQ1RMKTsKKwkJdmFsdWUgJj0gfktJUktXT09EX1BMQVlDVExfQlVSU1RfTUFTSzsKKwkJdmFsdWUgJj0gfihLSVJLV09PRF9QTEFZQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUExBWUNUTF9JMlNfTVVURQorCQkJCXwgS0lSS1dPT0RfUExBWUNUTF9TUERJRl9FTik7CisKKwkJaWYgKHByaXYtPmJ1cnN0ID09IDMyKQorCQkJdmFsdWUgfD0gS0lSS1dPT0RfUExBWUNUTF9CVVJTVF8zMjsKKwkJZWxzZQorCQkJdmFsdWUgfD0gS0lSS1dPT0RfUExBWUNUTF9CVVJTVF8xMjg7CisJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfSTJTX0VOOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQkvKiBzdG9wIGF1ZGlvLCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1BMQVlDVEwpOworCQl2YWx1ZSB8PSBLSVJLV09PRF9QTEFZQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUExBWUNUTF9JMlNfTVVURTsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX1BMQVlDVEwpOworCisJCXZhbHVlID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9JTlRfTUFTSyk7CisJCXZhbHVlICY9IH5LSVJLV09PRF9JTlRfQ0FVU0VfUExBWV9CWVRFUzsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX0lOVF9NQVNLKTsKKworCQkvKiBkaXNhYmxlIGFsbCBwbGF5YmFja3MgKi8KKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1BMQVlDVEwpOworCQl2YWx1ZSAmPSB+KEtJUktXT09EX1BMQVlDVExfSTJTX0VOIHwgS0lSS1dPT0RfUExBWUNUTF9TUERJRl9FTik7CisJCXdyaXRlbCh2YWx1ZSwgcHJpdi0+aW8gKyBLSVJLV09PRF9QTEFZQ1RMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCXZhbHVlIHw9IEtJUktXT09EX1BMQVlDVExfUEFVU0UgfCBLSVJLV09PRF9QTEFZQ1RMX0kyU19NVVRFOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCXZhbHVlICY9IH4oS0lSS1dPT0RfUExBWUNUTF9QQVVTRSB8IEtJUktXT09EX1BMQVlDVExfSTJTX01VVEUpOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2lya3dvb2RfaTJzX3JlY190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCWludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKwl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwkJLyogc3RvcCBhdWRpbywgZW5hYmxlIGludGVycnVwdHMgKi8KKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1JFQ0NUTCk7CisJCXZhbHVlIHw9IEtJUktXT09EX1JFQ0NUTF9QQVVTRTsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX1JFQ0NUTCk7CisKKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX0lOVF9NQVNLKTsKKwkJdmFsdWUgfD0gS0lSS1dPT0RfSU5UX0NBVVNFX1JFQ19CWVRFUzsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX0lOVF9NQVNLKTsKKworCQkvKiBjb25maWd1cmUgYXVkaW8gJiBlbmFibGUgaTJzIHJlY29yZCAqLworCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKwkJdmFsdWUgJj0gfktJUktXT09EX1JFQ0NUTF9CVVJTVF9NQVNLOworCQl2YWx1ZSAmPSB+S0lSS1dPT0RfUkVDQ1RMX01PTk87CisJCXZhbHVlICY9IH4oS0lSS1dPT0RfUkVDQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUkVDQ1RMX01VVEUKKwkJCXwgS0lSS1dPT0RfUkVDQ1RMX1NQRElGX0VOKTsKKworCQlpZiAocHJpdi0+YnVyc3QgPT0gMzIpCisJCQl2YWx1ZSB8PSBLSVJLV09PRF9SRUNDVExfQlVSU1RfMzI7CisJCWVsc2UKKwkJCXZhbHVlIHw9IEtJUktXT09EX1JFQ0NUTF9CVVJTVF8xMjg7CisJCXZhbHVlIHw9IEtJUktXT09EX1JFQ0NUTF9JMlNfRU47CisKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX1JFQ0NUTCk7CisJCWJyZWFrOworCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQkvKiBzdG9wIGF1ZGlvLCBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1JFQ0NUTCk7CisJCXZhbHVlIHw9IEtJUktXT09EX1JFQ0NUTF9QQVVTRSB8IEtJUktXT09EX1JFQ0NUTF9NVVRFOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKworCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfSU5UX01BU0spOworCQl2YWx1ZSAmPSB+S0lSS1dPT0RfSU5UX0NBVVNFX1JFQ19CWVRFUzsKKwkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktXT09EX0lOVF9NQVNLKTsKKworCQkvKiBkaXNhYmxlIGFsbCByZWNvcmRzICovCisJCXZhbHVlID0gcmVhZGwocHJpdi0+aW8gKyBLSVJLV09PRF9SRUNDVEwpOworCQl2YWx1ZSAmPSB+KEtJUktXT09EX1JFQ0NUTF9JMlNfRU4gfCBLSVJLV09PRF9SRUNDVExfU1BESUZfRU4pOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKwkJdmFsdWUgfD0gS0lSS1dPT0RfUkVDQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUkVDQ1RMX01VVEU7CisJCXdyaXRlbCh2YWx1ZSwgcHJpdi0+aW8gKyBLSVJLV09PRF9SRUNDVEwpOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09EX1JFQ0NUTCk7CisJCXZhbHVlICY9IH4oS0lSS1dPT0RfUkVDQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUkVDQ1RMX01VVEUpOworCQl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBraXJrd29vZF9pMnNfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJcmV0dXJuIGtpcmt3b29kX2kyc19wbGF5X3RyaWdnZXIoc3Vic3RyZWFtLCBjbWQsIGRhaSk7CisJZWxzZQorCQlyZXR1cm4ga2lya3dvb2RfaTJzX3JlY190cmlnZ2VyKHN1YnN0cmVhbSwgY21kLCBkYWkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2lya3dvb2RfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IHJlZ19kYXRhOworCisJLyogcHV0IHN5c3RlbSBpbiBhICJzYWZlIiBzdGF0ZSA6ICovCisJLyogZGlzYWJsZSBhdWRpbyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4ZmZmZmZmZmYsIHByaXYtPmlvICsgS0lSS1dPT0RfSU5UX0NBVVNFKTsKKwl3cml0ZWwoMCwgcHJpdi0+aW8gKyBLSVJLV09PRF9JTlRfTUFTSyk7CisKKwlyZWdfZGF0YSA9IHJlYWRsKHByaXYtPmlvICsgMHgxMjAwKTsKKwlyZWdfZGF0YSAmPSAofigweDMzM0ZGOCkpOworCXJlZ19kYXRhIHw9IDB4MTExRDE4OworCXdyaXRlbChyZWdfZGF0YSwgcHJpdi0+aW8gKyAweDEyMDApOworCisJbXNsZWVwKDUwMCk7CisKKwlyZWdfZGF0YSA9IHJlYWRsKHByaXYtPmlvICsgMHgxMjAwKTsKKwlyZWdfZGF0YSAmPSAofigweDMzM0ZGOCkpOworCXJlZ19kYXRhIHw9IDB4MTExRDE4OworCXdyaXRlbChyZWdfZGF0YSwgcHJpdi0+aW8gKyAweDEyMDApOworCisJLyogZGlzYWJsZSBwbGF5YmFjay9yZWNvcmQgKi8KKwl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisJdmFsdWUgJj0gfihLSVJLV09PRF9QTEFZQ1RMX0kyU19FTnxLSVJLV09PRF9QTEFZQ1RMX1NQRElGX0VOKTsKKwl3cml0ZWwodmFsdWUsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CisKKwl2YWx1ZSA9IHJlYWRsKHByaXYtPmlvICsgS0lSS1dPT0RfUkVDQ1RMKTsKKwl2YWx1ZSAmPSB+KEtJUktXT09EX1JFQ0NUTF9JMlNfRU4gfCBLSVJLV09PRF9SRUNDVExfU1BESUZfRU4pOworCXdyaXRlbCh2YWx1ZSwgcHJpdi0+aW8gKyBLSVJLV09PRF9SRUNDVEwpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIHZvaWQga2lya3dvb2RfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBraXJrd29vZF9pMnNfZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGtpcmt3b29kX2kyc190cmlnZ2VyLAorCS5od19wYXJhbXMgICAgICA9IGtpcmt3b29kX2kyc19od19wYXJhbXMsCisJLnNldF9mbXQgICAgICAgID0ga2lya3dvb2RfaTJzX3NldF9mbXQsCit9OworCisKK3N0cnVjdCBzbmRfc29jX2RhaSBraXJrd29vZF9pMnNfZGFpID0geworCS5uYW1lID0gRFJWX05BTUUsCisJLmlkID0gMCwKKwkucHJvYmUgPSBraXJrd29vZF9pMnNfcHJvYmUsCisJLnJlbW92ZSA9IGtpcmt3b29kX2kyc19yZW1vdmUsCisJLnBsYXliYWNrID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IEtJUktXT09EX0kyU19SQVRFUywKKwkJLmZvcm1hdHMgPSBLSVJLV09PRF9JMlNfRk9STUFUUyx9LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IEtJUktXT09EX0kyU19SQVRFUywKKwkJLmZvcm1hdHMgPSBLSVJLV09PRF9JMlNfRk9STUFUUyx9LAorCS5vcHMgPSAma2lya3dvb2RfaTJzX2RhaV9vcHMsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoa2lya3dvb2RfaTJzX2RhaSk7CisKK3N0YXRpYyBfX2RldmluaXQgaW50IGtpcmt3b29kX2kyc19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3Qga2lya3dvb2RfYXNvY19wbGF0Zm9ybV9kYXRhICpkYXRhID0KKwkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IGVycjsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga2lya3dvb2RfZG1hX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm1fZ2V0X3Jlc291cmNlIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfYWxsb2M7CisJfQorCisJcHJpdi0+bWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIFNaXzE2SywgRFJWX05BTUUpOworCWlmICghcHJpdi0+bWVtKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyb3I7CisJfQorCisJcHJpdi0+aW8gPSBpb3JlbWFwKHByaXYtPm1lbS0+c3RhcnQsIFNaXzE2Syk7CisJaWYgKCFwcml2LT5pbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lvbWVtOworCX0KKworCXByaXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHByaXYtPmlycSA8PSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtX2dldF9pcnEgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWlmICghZGF0YSB8fCAhZGF0YS0+ZHJhbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhID8hXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKKwlwcml2LT5kcmFtID0gZGF0YS0+ZHJhbTsKKwlwcml2LT5idXJzdCA9IGRhdGEtPmJ1cnN0OworCisJa2lya3dvb2RfaTJzX2RhaS5jYXB0dXJlLmRtYV9kYXRhID0gcHJpdjsKKwlraXJrd29vZF9pMnNfZGFpLnBsYXliYWNrLmRtYV9kYXRhID0gcHJpdjsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaSgma2lya3dvb2RfaTJzX2RhaSk7CisKK2Vycl9pb3JlbWFwOgorCWlvdW5tYXAocHJpdi0+aW8pOworZXJyX2lvbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwcml2LT5tZW0tPnN0YXJ0LCBTWl8xNkspOworZXJyX2FsbG9jOgorCWtmcmVlKHByaXYpOworZXJyb3I6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQga2lya3dvb2RfaTJzX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpZiAocHJpdikgeworCQlpb3VubWFwKHByaXYtPmlvKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHByaXYtPm1lbS0+c3RhcnQsIFNaXzE2Syk7CisJCWtmcmVlKHByaXYpOworCX0KKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZraXJrd29vZF9pMnNfZGFpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIga2lya3dvb2RfaTJzX2RyaXZlciA9IHsKKwkucHJvYmUgID0ga2lya3dvb2RfaTJzX2Rldl9wcm9iZSwKKwkucmVtb3ZlID0ga2lya3dvb2RfaTJzX2Rldl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGtpcmt3b29kX2kyc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigma2lya3dvb2RfaTJzX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChraXJrd29vZF9pMnNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBraXJrd29vZF9pMnNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZraXJrd29vZF9pMnNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGtpcmt3b29kX2kyc19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJBcm5hdWQgUGF0YXJkLCA8YXBhdGFyZEBtYW5kcml2YS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIktpcmt3b29kIEkyUyBTb0MgSW50ZXJmYWNlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmtpcmt3b29kLWkycyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5oIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NTk1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtaTJzLmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqIGtpcmt3b29kLWkycy5oCisgKgorICogKGMpIDIwMTAgQXJuYXVkIFBhdGFyZCA8YXBhdGFyZEBtYW5kcml2YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfS0lSS1dPT0RfSTJTX0gKKyNkZWZpbmUgX0tJUktXT09EX0kyU19ICisKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkga2lya3dvb2RfaTJzX2RhaTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2Qtb3BlbnJkLmMgYi9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2Qtb3BlbnJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1M2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1vcGVucmQuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGtpcmt3b29kLW9wZW5yZC5jCisgKgorICogKGMpIDIwMTAgQXJuYXVkIFBhdGFyZCA8YXBhdGFyZEBtYW5kcml2YS5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlIDxwbGF0L2F1ZGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlICJraXJrd29vZC1pMnMuaCIKKyNpbmNsdWRlICJraXJrd29vZC1kbWEuaCIKKyNpbmNsdWRlICIuLi9jb2RlY3MvY3M0Mmw1MS5oIgorCitzdGF0aWMgaW50IG9wZW5yZF9jbGllbnRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGZyZXEsIGZtdDsKKworCWZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX0NCU19DRlM7CisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBmbXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIGZtdCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKKwlkZWZhdWx0OgorCWNhc2UgNDQxMDA6CisJCWZyZXEgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJY2FzZSA0ODAwMDoKKwkJZnJlcSA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDk2MDAwOgorCQlmcmVxID0gMjQ1NzYwMDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgZnJlcSwgU05EX1NPQ19DTE9DS19JTik7CisKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBvcGVucmRfY2xpZW50X29wcyA9IHsKKwkuaHdfcGFyYW1zID0gb3BlbnJkX2NsaWVudF9od19wYXJhbXMsCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBvcGVucmRfY2xpZW50X2RhaVtdID0geworeworCS5uYW1lID0gIkNTNDJMNTEiLAorCS5zdHJlYW1fbmFtZSA9ICJDUzQyTDUxIEhpRmkiLAorCS5jcHVfZGFpID0gJmtpcmt3b29kX2kyc19kYWksCisJLmNvZGVjX2RhaSA9ICZjczQybDUxX2RhaSwKKwkub3BzID0gJm9wZW5yZF9jbGllbnRfb3BzLAorfSwKK307CisKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgb3BlbnJkX2NsaWVudCA9IHsKKwkubmFtZSA9ICJPcGVuUkQgQ2xpZW50IiwKKwkucGxhdGZvcm0gPSAma2lya3dvb2Rfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IG9wZW5yZF9jbGllbnRfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG9wZW5yZF9jbGllbnRfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2Ugb3BlbnJkX2NsaWVudF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZvcGVucmRfY2xpZW50LAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2RldmljZV9jczQybDUxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wZW5yZF9jbGllbnRfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgb3BlbnJkX2NsaWVudF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFjaGluZV9pc19vcGVucmRfY2xpZW50KCkpCisJCXJldHVybiAwOworCisJb3BlbnJkX2NsaWVudF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFvcGVucmRfY2xpZW50X3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEob3BlbnJkX2NsaWVudF9zbmRfZGV2aWNlLAorCQkJJm9wZW5yZF9jbGllbnRfc25kX2RldmRhdGEpOworCW9wZW5yZF9jbGllbnRfc25kX2RldmRhdGEuZGV2ID0gJm9wZW5yZF9jbGllbnRfc25kX2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChvcGVucmRfY2xpZW50X3NuZF9kZXZpY2UpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxhdGZvcm1fZGV2aWNlX2FkZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChvcGVucmRfY2xpZW50X3NuZF9kZXZpY2UpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvcGVucmRfY2xpZW50X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihvcGVucmRfY2xpZW50X3NuZF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChvcGVucmRfY2xpZW50X2luaXQpOworbW9kdWxlX2V4aXQob3BlbnJkX2NsaWVudF9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJBcm5hdWQgUGF0YXJkIDxhcGF0YXJkQG1hbmRyaXZhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgT3BlblJEIENsaWVudCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzb2MtYXVkaW8iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC5oIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZTZhNQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC5oCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICoga2lya3dvb2QuaAorICoKKyAqIChjKSAyMDEwIEFybmF1ZCBQYXRhcmQgPGFwYXRhcmRAbWFuZHJpdmEuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX0tJUktXT09EX0FVRElPX0gKKyNkZWZpbmUgX0tJUktXT09EX0FVRElPX0gKKworI2RlZmluZSBLSVJLV09PRF9SRUNPUkRfV0lOCQkJMAorI2RlZmluZSBLSVJLV09PRF9QTEFZQkFDS19XSU4JCQkxCisjZGVmaW5lIEtJUktXT09EX01BWF9BVURJT19XSU4JCQkyCisKKyNkZWZpbmUgS0lSS1dPT0RfQVVESU9fV0lOX0JBU0VfUkVHKHdpbikJKDB4QTAwICsgKCh3aW4pPDwzKSkKKyNkZWZpbmUgS0lSS1dPT0RfQVVESU9fV0lOX0NUUkxfUkVHKHdpbikJKDB4QTA0ICsgKCh3aW4pPDwzKSkKKworCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTAkJCTB4MTAwMAorI2RlZmluZSBLSVJLV09PRF9SRUNDVExfU1BESUZfRU4JCSgxPDwxMSkKKyNkZWZpbmUgS0lSS1dPT0RfUkVDQ1RMX0kyU19FTgkJCSgxPDwxMCkKKyNkZWZpbmUgS0lSS1dPT0RfUkVDQ1RMX1BBVVNFCQkJKDE8PDkpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9NVVRFCQkJKDE8PDgpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9CVVJTVF9NQVNLCQkoMzw8NSkKKyNkZWZpbmUgS0lSS1dPT0RfUkVDQ1RMX0JVUlNUXzEyOAkJKDI8PDUpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9CVVJTVF8zMgkJKDE8PDUpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9NT05PCQkJKDE8PDQpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9NT05PX0NIQU5fUklHSFQJKDE8PDMpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9NT05PX0NIQU5fTEVGVAkJKDA8PDMpCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9TSVpFX01BU0sJCSg3PDwwKQorI2RlZmluZSBLSVJLV09PRF9SRUNDVExfU0laRV8xNgkJKDc8PDApCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9TSVpFXzE2X0MJCSgzPDwwKQorI2RlZmluZSBLSVJLV09PRF9SRUNDVExfU0laRV8yMAkJKDI8PDApCisjZGVmaW5lIEtJUktXT09EX1JFQ0NUTF9TSVpFXzI0CQkoMTw8MCkKKyNkZWZpbmUgS0lSS1dPT0RfUkVDQ1RMX1NJWkVfMzIJCSgwPDwwKQorCisjZGVmaW5lIEtJUktXT09EX1JFQ19CVUZfQUREUgkJCTB4MTAwNAorI2RlZmluZSBLSVJLV09PRF9SRUNfQlVGX1NJWkUJCQkweDEwMDgKKyNkZWZpbmUgS0lSS1dPT0RfUkVDX0JZVEVfQ09VTlQJCQkweDEwMEMKKworI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMCQkJMHgxMTAwCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfUExBWV9CVVNZCQkoMTw8MTYpCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfQlVSU1RfTUFTSwkJKDM8PDExKQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX0JVUlNUXzEyOAkJKDI8PDExKQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX0JVUlNUXzMyCQkoMTw8MTEpCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfUEFVU0UJCQkoMTw8OSkKKyNkZWZpbmUgS0lSS1dPT0RfUExBWUNUTF9TUERJRl9NVVRFCQkoMTw8OCkKKyNkZWZpbmUgS0lSS1dPT0RfUExBWUNUTF9NT05PX01BU0sJCSgzPDw1KQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX01PTk9fQk9USAkJKDM8PDUpCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfTU9OT19PRkYJCSgwPDw1KQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX0kyU19NVVRFCQkoMTw8NykKKyNkZWZpbmUgS0lSS1dPT0RfUExBWUNUTF9TUERJRl9FTgkJKDE8PDQpCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfSTJTX0VOCQkoMTw8MykKKyNkZWZpbmUgS0lSS1dPT0RfUExBWUNUTF9TSVpFX01BU0sJCSg3PDwwKQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX1NJWkVfMTYJCSg3PDwwKQorI2RlZmluZSBLSVJLV09PRF9QTEFZQ1RMX1NJWkVfMTZfQwkJKDM8PDApCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfU0laRV8yMAkJKDI8PDApCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfU0laRV8yNAkJKDE8PDApCisjZGVmaW5lIEtJUktXT09EX1BMQVlDVExfU0laRV8zMgkJKDA8PDApCisKKyNkZWZpbmUgS0lSS1dPT0RfUExBWV9CVUZfQUREUgkJCTB4MTEwNAorI2RlZmluZSBLSVJLV09PRF9QTEFZX0JVRl9TSVpFCQkJMHgxMTA4CisjZGVmaW5lIEtJUktXT09EX1BMQVlfQllURV9DT1VOVAkJMHgxMTBDCisKKyNkZWZpbmUgS0lSS1dPT0RfRENPX0NUTAkJCTB4MTIwNAorI2RlZmluZSBLSVJLV09PRF9EQ09fQ1RMX09GRlNFVF9NQVNLCQkoMHhGRkY8PDIpCisjZGVmaW5lIEtJUktXT09EX0RDT19DVExfT0ZGU0VUXzAJCSgweDgwMDw8MikKKyNkZWZpbmUgS0lSS1dPT0RfRENPX0NUTF9GUkVRX01BU0sJCSgzPDwwKQorI2RlZmluZSBLSVJLV09PRF9EQ09fQ1RMX0ZSRVFfMTEJCSgwPDwwKQorI2RlZmluZSBLSVJLV09PRF9EQ09fQ1RMX0ZSRVFfMTIJCSgxPDwwKQorI2RlZmluZSBLSVJLV09PRF9EQ09fQ1RMX0ZSRVFfMjQJCSgyPDwwKQorCisjZGVmaW5lIEtJUktXT09EX0RDT19TUENSX1NUQVRVUwkJMHgxMjBjCisjZGVmaW5lIEtJUktXT09EX0RDT19TUENSX1NUQVRVU19EQ09fTE9DSwkoMTw8MTYpCisKKyNkZWZpbmUgS0lSS1dPT0RfRVJSX0NBVVNFCQkJMHgxMzAwCisjZGVmaW5lIEtJUktXT09EX0VSUl9NQVNLCQkJMHgxMzA0CisKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFCQkJMHgxMzA4CisjZGVmaW5lIEtJUktXT09EX0lOVF9NQVNLCQkJMHgxMzBDCisjZGVmaW5lIEtJUktXT09EX0lOVF9DQVVTRV9QTEFZX0JZVEVTCQkoMTw8MTQpCisjZGVmaW5lIEtJUktXT09EX0lOVF9DQVVTRV9SRUNfQllURVMJCSgxPDwxMykKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFX0RNQV9QTEFZX0VORAkoMTw8NykKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFX0RNQV9QTEFZXzNRCQkoMTw8NikKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFX0RNQV9QTEFZX0hBTEYJKDE8PDUpCisjZGVmaW5lIEtJUktXT09EX0lOVF9DQVVTRV9ETUFfUExBWV8xUQkJKDE8PDQpCisjZGVmaW5lIEtJUktXT09EX0lOVF9DQVVTRV9ETUFfUkVDX0VORAkJKDE8PDMpCisjZGVmaW5lIEtJUktXT09EX0lOVF9DQVVTRV9ETUFfUkVDXzNRCQkoMTw8MikKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFX0RNQV9SRUNfSEFMRgkoMTw8MSkKKyNkZWZpbmUgS0lSS1dPT0RfSU5UX0NBVVNFX0RNQV9SRUNfMVEJCSgxPDwwKQorCisjZGVmaW5lIEtJUktXT09EX1JFQ19CWVRFX0lOVF9DT1VOVAkJMHgxMzEwCisjZGVmaW5lIEtJUktXT09EX1BMQVlfQllURV9JTlRfQ09VTlQJCTB4MTMxNAorI2RlZmluZSBLSVJLV09PRF9CWVRFX0lOVF9DT1VOVF9NQVNLCQkweGZmZmZmZgorCisjZGVmaW5lIEtJUktXT09EX0kyU19QTEFZQ1RMCQkJMHgyNTA4CisjZGVmaW5lIEtJUktXT09EX0kyU19SRUNDVEwJCQkweDI0MDgKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX0NUTF9KVVNUX01BU0sJCSgweGY8PDI2KQorI2RlZmluZSBLSVJLV09PRF9JMlNfQ1RMX0xKCQkJKDA8PDI2KQorI2RlZmluZSBLSVJLV09PRF9JMlNfQ1RMX0kyUwkJCSg1PDwyNikKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX0NUTF9SSgkJCSg4PDwyNikKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX0NUTF9TSVpFX01BU0sJCSgzPDwzMCkKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX0NUTF9TSVpFXzE2CQkoMzw8MzApCisjZGVmaW5lIEtJUktXT09EX0kyU19DVExfU0laRV8yMAkJKDI8PDMwKQorI2RlZmluZSBLSVJLV09PRF9JMlNfQ1RMX1NJWkVfMjQJCSgxPDwzMCkKKyNkZWZpbmUgS0lSS1dPT0RfSTJTX0NUTF9TSVpFXzMyCQkoMDw8MzApCisKKyNkZWZpbmUgS0lSS1dPT0RfQVVESU9fQlVGX01BWAkJCSgxNioxMDI0KjEwMjQpCisKKy8qIFRoZXNlcyB2YWx1ZXMgY29tZSBmcm9tIHRoZSBtYXJ2ZWxsIGFsc2EgZHJpdmVyICovCisvKiBuZWVkIHRvIGZpbmQgd2hlcmUgdGhleSBjb21lIGZyb20gICAgICAgICAgICAgICAqLworI2RlZmluZSBLSVJLV09PRF9TTkRfTUlOX1BFUklPRFMJCTgKKyNkZWZpbmUgS0lSS1dPT0RfU05EX01BWF9QRVJJT0RTCQkxNgorI2RlZmluZSBLSVJLV09PRF9TTkRfTUlOX1BFUklPRF9CWVRFUwkJMHg0MDAwCisjZGVmaW5lIEtJUktXT09EX1NORF9NQVhfUEVSSU9EX0JZVEVTCQkweDQwMDAKKworc3RydWN0IGtpcmt3b29kX2RtYV9kYXRhIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwl2b2lkIF9faW9tZW0gKmlvOworCWludCBpcnE7CisJaW50IGJ1cnN0OworCXN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvS2NvbmZpZyBiL3NvdW5kL3NvYy9udWM5MDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGVkMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL251YzkwMC9LY29uZmlnCkBAIC0wLDAgKzEsMjcgQEAKKyMjCisjIyBOVUM5MDAgc2VyaWVzIEFDOTcgQVBJCisjIworY29uZmlnIFNORF9TT0NfTlVDOTAwCisJdHJpc3RhdGUgIlNvQyBBdWRpbyBmb3IgTlVDOTAwIHNlcmllcyIKKwlkZXBlbmRzIG9uIEFSQ0hfVzkwWDkwMAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgQUM5NyBtb2RlIG9uIHRoZSBOVUM5MDAgU29DLgorCitjb25maWcgU05EX1NPQ19OVUM5MDBfQUM5NworCXRyaXN0YXRlCisJc2VsZWN0IEFDOTdfQlVTCisJc2VsZWN0IFNORF9BQzk3X0NPREVDCisJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKKworCisjIworIyMgQm9hcmRzCisjIworY29uZmlnIFNORF9TT0NfTlVDOTAwRVZCCisJdHJpc3RhdGUgIk5VQzkwMCBBQzk3IHN1cHBvcnQgZm9yIGRlbW8gYm9hcmQiCisJZGVwZW5kcyBvbiBTTkRfU09DX05VQzkwMAorCXNlbGVjdCBTTkRfU09DX05VQzkwMF9BQzk3CisJc2VsZWN0IFNORF9TT0NfQUM5N19DT0RFQworCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgYXVkaW8gKEFDOTcpIG9uIHRoZQorCSAgTlVDOTAwIGRlbW9ib2FyZC4KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvTWFrZWZpbGUgYi9zb3VuZC9zb2MvbnVjOTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNDZjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbnVjOTAwL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMgTlVDOTAwIHNlcmllcyBhdWRpbworc25kLXNvYy1udWM5MDAtcGNtLW9ianMgOj0gbnVjOTAwLXBjbS5vCitzbmQtc29jLW51YzkwMC1hYzk3LW9ianMgOj0gbnVjOTAwLWFjOTcubworCitvYmotJChDT05GSUdfU05EX1NPQ19OVUM5MDApICs9IHNuZC1zb2MtbnVjOTAwLXBjbS5vCitvYmotJChDT05GSUdfU05EX1NPQ19OVUM5MDBfQUM5NykgKz0gc25kLXNvYy1udWM5MDAtYWM5Ny5vCisKKyMgQm9hcmRzCitzbmQtc29jLW51YzkwMC1hdWRpby1vYmpzIDo9IG51YzkwMC1hdWRpby5vCisKK29iai0kKENPTkZJR19TTkRfU09DX05VQzkwMEVWQikgKz0gc25kLXNvYy1udWM5MDAtYXVkaW8ubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL251YzkwMC9udWM5MDAtYWM5Ny5jIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtYWM5Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTdjOTAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hYzk3LmMKQEAgLTAsMCArMSw0MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisKKyNpbmNsdWRlICJudWM5MDAtYXVkaW8uaCIKKworc3RhdGljIERFRklORV9NVVRFWChhYzk3X211dGV4KTsKK3N0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hYzk3X2RhdGE7CisKK3N0YXRpYyBpbnQgbnVjOTAwX2NoZWNrcmVhZHkodm9pZCkKK3sKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOworCisJaWYgKCEoQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDSVMwKSAmIENPREVDX1JFQURZKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOworfQorCisvKiBBQzk3IGNvbnRyb2xsZXIgcmVhZHMgY29kZWMgcmVnaXN0ZXIgKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBudWM5MDBfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJCQkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMHgxMDAwMCwgdmFsOworCisJbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7CisKKwl2YWwgPSBudWM5MDBfY2hlY2tyZWFkeSgpOworCWlmICghIXZhbCkgeworCQlkZXZfZXJyKG51YzkwMF9hdWRpby0+ZGV2LCAiQUM5NyBjb2RlYyBpcyBub3QgcmVhZHlcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBzZXQgdGhlIFJfV0IgYml0IGFuZCB3cml0ZSByZWdpc3RlciBpbmRleCAqLworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzEsIFJfV0IgfCByZWcpOworCisJLyogc2V0IHRoZSB2YWxpZCBmcmFtZSBiaXQgYW5kIHZhbGlkIHNsb3RzICovCisJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDT1MwKTsKKwl2YWwgfD0gKFZBTElEX0ZSQU1FIHwgU0xPVDFfVkFMSUQpOworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzAsIHZhbCk7CisKKwl1ZGVsYXkoMTAwKTsKKworCS8qIHBvbGxpbmcgdGhlIEFDX1JfRklOSVNIICovCisJd2hpbGUgKCEoQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDQ09OKSAmIEFDX1JfRklOSVNIKQorCQkJCQkJCQkmJiB0aW1lb3V0LS0pCisJCW1kZWxheSgxKTsKKworCWlmICghdGltZW91dCkgeworCQlkZXZfZXJyKG51YzkwMF9hdWRpby0+ZGV2LCAiQUM5NyByZWFkIHJlZ2lzdGVyIHRpbWUgb3V0ICFcbiIpOworCQl2YWwgPSAtRVBFUk07CisJCWdvdG8gb3V0OworCX0KKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCkgOworCXZhbCAmPSB+U0xPVDFfVkFMSUQ7CisJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCwgdmFsKTsKKworCWlmIChBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNJUzEpID4+IDIgIT0gcmVnKSB7CisJCWRldl9lcnIobnVjOTAwX2F1ZGlvLT5kZXYsCisJCQkJIlJfSU5ERVggb2YgUkVHX0FDVExfQUNJUzEgbm90IG1hdGNoIVxuIik7CisJfQorCisJdWRlbGF5KDEwMCk7CisJdmFsID0gKEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0lTMikgJiAweEZGRkYpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKKwlyZXR1cm4gdmFsOworfQorCisvKiBBQzk3IGNvbnRyb2xsZXIgd3JpdGVzIHRvIGNvZGVjIHJlZ2lzdGVyICovCitzdGF0aWMgdm9pZCBudWM5MDBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCQl1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gbnVjOTAwX2FjOTdfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRtcCwgdGltZW91dCA9IDB4MTAwMDA7CisKKwltdXRleF9sb2NrKCZhYzk3X211dGV4KTsKKworCXRtcCA9IG51YzkwMF9jaGVja3JlYWR5KCk7CisJaWYgKCEhdG1wKQorCQlkZXZfZXJyKG51YzkwMF9hdWRpby0+ZGV2LCAiQUM5NyBjb2RlYyBpcyBub3QgcmVhZHlcbiIpOworCisJLyogY2xlYXIgdGhlIFJfV0IgYml0IGFuZCB3cml0ZSByZWdpc3RlciBpbmRleCAqLworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzEsIHJlZyk7CisKKwkvKiB3cml0ZSByZWdpc3RlciB2YWx1ZSAqLworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzIsIHZhbCk7CisKKwkvKiBzZXQgdGhlIHZhbGlkIGZyYW1lIGJpdCBhbmQgdmFsaWQgc2xvdHMgKi8KKwl0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzApOworCXRtcCB8PSBTTE9UMV9WQUxJRCB8IFNMT1QyX1ZBTElEIHwgVkFMSURfRlJBTUU7CisJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCwgdG1wKTsKKworCXVkZWxheSgxMDApOworCisJLyogcG9sbGluZyB0aGUgQUNfV19GSU5JU0ggKi8KKwl3aGlsZSAoKEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0NPTikgJiBBQ19XX0ZJTklTSCkKKwkJCQkJCQkJJiYgdGltZW91dC0tKQorCQltZGVsYXkoMSk7CisKKwlpZiAoIXRpbWVvdXQpCisJCWRldl9lcnIobnVjOTAwX2F1ZGlvLT5kZXYsICJBQzk3IHdyaXRlIHJlZ2lzdGVyIHRpbWUgb3V0ICFcbiIpOworCisJdG1wID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDT1MwKTsKKwl0bXAgJj0gfihTTE9UMV9WQUxJRCB8IFNMT1QyX1ZBTElEKTsKKwlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDT1MwLCB0bXApOworCisJbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKKworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7CisKKwkvKiB3YXJtIHJlc2V0IEFDIDk3ICovCisJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDQ09OKTsKKwl2YWwgfD0gQUNfV19SRVM7CisJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0NPTiwgdmFsKTsKKworCXVkZWxheSgxMDApOworCisJdmFsID0gbnVjOTAwX2NoZWNrcmVhZHkoKTsKKwlpZiAoISF2YWwpCisJCWRldl9lcnIobnVjOTAwX2F1ZGlvLT5kZXYsICJBQzk3IGNvZGVjIGlzIG5vdCByZWFkeVxuIik7CisKKwltdXRleF91bmxvY2soJmFjOTdfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfYWM5N19jb2xkX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJbXV0ZXhfbG9jaygmYWM5N19tdXRleCk7CisKKwkvKiByZXNldCBBdWRpbyBDb250cm9sbGVyICovCisJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKKwl2YWwgfD0gQUNUTF9SRVNFVF9CSVQ7CisJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCk7CisJdmFsICY9ICh+QUNUTF9SRVNFVF9CSVQpOworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkVTRVQsIHZhbCk7CisKKwkvKiByZXNldCBBQy1saW5rIGludGVyZmFjZSAqLworCisJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKKwl2YWwgfD0gQUNfUkVTRVQ7CisJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCk7CisJdmFsICY9IH5BQ19SRVNFVDsKKwlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VULCB2YWwpOworCisJLyogY29sZCByZXNldCBBQyA5NyAqLworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ0NPTik7CisJdmFsIHw9IEFDX0NfUkVTOworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNDT04sIHZhbCk7CisKKwl2YWwgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNDT04pOworCXZhbCAmPSAofkFDX0NfUkVTKTsKKwlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDQ09OLCB2YWwpOworCisJdWRlbGF5KDEwMCk7CisKKwltdXRleF91bmxvY2soJmFjOTdfbXV0ZXgpOworCit9CisKKy8qIEFDOTcgY29udHJvbGxlciBvcGVyYXRpb25zICovCitzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBzb2NfYWM5N19vcHMgPSB7CisJLnJlYWQJCT0gbnVjOTAwX2FjOTdfcmVhZCwKKwkud3JpdGUJCT0gbnVjOTAwX2FjOTdfd3JpdGUsCisJLnJlc2V0CQk9IG51YzkwMF9hYzk3X2NvbGRfcmVzZXQsCisJLndhcm1fcmVzZXQJPSBudWM5MDBfYWM5N193YXJtX3Jlc2V0LAorfQorRVhQT1JUX1NZTUJPTF9HUEwoc29jX2FjOTdfb3BzKTsKKworc3RhdGljIGludCBudWM5MDBfYWM5N190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCWludCBjbWQsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHZhbCwgdG1wOworCisJcmV0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCXRtcCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCk7CisJCQl0bXAgfD0gKFNMT1QzX1ZBTElEIHwgU0xPVDRfVkFMSUQgfCBWQUxJRF9GUkFNRSk7CisJCQlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0FDT1MwLCB0bXApOworCisJCQl0bXAgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUFNSKTsKKwkJCXRtcCB8PSAoUF9ETUFfRU5EX0lSUSB8IFBfRE1BX01JRERMRV9JUlEpOworCQkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QU1IsIHRtcCk7CisJCQl2YWwgfD0gQUNfUExBWTsKKwkJfSBlbHNlIHsKKwkJCXRtcCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SU1IpOworCQkJdG1wIHw9IChSX0RNQV9FTkRfSVJRIHwgUl9ETUFfTUlERExFX0lSUSk7CisKKwkJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUlNSLCB0bXApOworCQkJdmFsIHw9IEFDX1JFQ09SRDsKKwkJfQorCisJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkVTRVQsIHZhbCk7CisKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwkJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JFU0VUKTsKKwkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJCXRtcCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9BQ09TMCk7CisJCQl0bXAgJj0gfihTTE9UM19WQUxJRCB8IFNMT1Q0X1ZBTElEKTsKKwkJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQUNPUzAsIHRtcCk7CisKKwkJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUFNSLCBSRVNFVF9QUlNSKTsKKwkJCXZhbCAmPSB+QUNfUExBWTsKKwkJfSBlbHNlIHsKKwkJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUlNSLCBSRVNFVF9QUlNSKTsKKwkJCXZhbCAmPSB+QUNfUkVDT1JEOworCQl9CisKKwkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gbnVjOTAwX2FjOTdfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCW11dGV4X2xvY2soJmFjOTdfbXV0ZXgpOworCisJLyogZW5hYmxlIHVuaXQgY2xvY2sgKi8KKwljbGtfZW5hYmxlKG51YzkwMF9hdWRpby0+Y2xrKTsKKworCS8qIGVuYWJsZSBhdWRpbyBjb250cm9sbGVyIGFuZCBBQy1saW5rIGludGVyZmFjZSAqLworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9DT04pOworCXZhbCB8PSAoSUlTX0FDX1BJTl9TRUwgfCBBQ0xJTktfRU4pOworCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfQ09OLCB2YWwpOworCisJbXV0ZXhfdW5sb2NrKCZhYzk3X211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJCXN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IG51YzkwMF9hYzk3X2RhdGE7CisKKwljbGtfZGlzYWJsZShudWM5MDBfYXVkaW8tPmNsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51YzkwMF9hYzk3X2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBudWM5MDBfYWM5N190cmlnZ2VyLAorfTsKKworc3RydWN0IHNuZF9zb2NfZGFpIG51YzkwMF9hYzk3X2RhaSA9IHsKKwkubmFtZQkJCT0gIm51YzkwMC1hYzk3IiwKKwkucHJvYmUJCQk9IG51YzkwMF9hYzk3X3Byb2JlLAorCS5yZW1vdmUJCQk9IG51YzkwMF9hYzk3X3JlbW92ZSwKKwkuYWM5N19jb250cm9sCQk9IDEsCisJLnBsYXliYWNrID0geworCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkJLmZvcm1hdHMJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJLmNoYW5uZWxzX21pbgk9IDEsCisJCS5jaGFubmVsc19tYXgJPSAyLAorCX0sCisJLmNhcHR1cmUgPSB7CisJCS5yYXRlcwkJPSBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorCQkuZm9ybWF0cwk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQkuY2hhbm5lbHNfbWluCT0gMSwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJfSwKKwkub3BzID0gJm51YzkwMF9hYzk3X2RhaV9vcHMsCit9CitFWFBPUlRfU1lNQk9MX0dQTChudWM5MDBfYWM5N19kYWkpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBudWM5MDBfYWM5N19kcnZwcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbzsKKwlpbnQgcmV0OworCisJaWYgKG51YzkwMF9hYzk3X2RhdGEpCisJCXJldHVybiAtRUJVU1k7CisKKwludWM5MDBfYXVkaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbnVjOTAwX2F1ZGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFudWM5MDBfYXVkaW8pCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJm51YzkwMF9hdWRpby0+bG9jayk7CisKKwludWM5MDBfYXVkaW8tPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFudWM5MDBfYXVkaW8tPnJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDA7CisJfQorCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obnVjOTAwX2F1ZGlvLT5yZXMtPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShudWM5MDBfYXVkaW8tPnJlcyksIHBkZXYtPm5hbWUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQwOworCX0KKworCW51YzkwMF9hdWRpby0+bW1pbyA9IGlvcmVtYXAobnVjOTAwX2F1ZGlvLT5yZXMtPnN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplKG51YzkwMF9hdWRpby0+cmVzKSk7CisJaWYgKCFudWM5MDBfYXVkaW8tPm1taW8pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKworCW51YzkwMF9hdWRpby0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKG51YzkwMF9hdWRpby0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKG51YzkwMF9hdWRpby0+Y2xrKTsKKwkJZ290byBvdXQyOworCX0KKworCW51YzkwMF9hdWRpby0+aXJxX251bSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFudWM5MDBfYXVkaW8tPmlycV9udW0pIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDI7CisJfQorCisJbnVjOTAwX2FjOTdfZGF0YSA9IG51YzkwMF9hdWRpbzsKKworCW51YzkwMF9hdWRpby0+ZGV2ID0gbnVjOTAwX2FjOTdfZGFpLmRldiA9ICAmcGRldi0+ZGV2OworCisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9kYWkoJm51YzkwMF9hYzk3X2RhaSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQzOworCisJbWZwX3NldF9ncm91cGcobnVjOTAwX2F1ZGlvLT5kZXYpOyAvKiBlbmJhbGUgYWM5NyBtdWx0aWZ1bmN0aW9uIHBpbiovCisKKwlyZXR1cm4gMDsKKworb3V0MzoKKwljbGtfcHV0KG51YzkwMF9hdWRpby0+Y2xrKTsKK291dDI6CisJaW91bm1hcChudWM5MDBfYXVkaW8tPm1taW8pOworb3V0MToKKwlyZWxlYXNlX21lbV9yZWdpb24obnVjOTAwX2F1ZGlvLT5yZXMtPnN0YXJ0LAorCQkJCQlyZXNvdXJjZV9zaXplKG51YzkwMF9hdWRpby0+cmVzKSk7CitvdXQwOgorCWtmcmVlKG51YzkwMF9hdWRpbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbnVjOTAwX2FjOTdfZHJ2cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpKCZudWM5MDBfYWM5N19kYWkpOworCisJY2xrX3B1dChudWM5MDBfYWM5N19kYXRhLT5jbGspOworCWlvdW5tYXAobnVjOTAwX2FjOTdfZGF0YS0+bW1pbyk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKG51YzkwMF9hYzk3X2RhdGEtPnJlcy0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShudWM5MDBfYWM5N19kYXRhLT5yZXMpKTsKKworCW51YzkwMF9hYzk3X2RhdGEgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG51YzkwMF9hYzk3X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJudWM5MDAtYXVkaW8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBudWM5MDBfYWM5N19kcnZwcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG51YzkwMF9hYzk3X2RydnJlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBudWM5MDBfYWM5N19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbnVjOTAwX2FjOTdfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG51YzkwMF9hYzk3X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbnVjOTAwX2FjOTdfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobnVjOTAwX2FjOTdfaW5pdCk7Cittb2R1bGVfZXhpdChudWM5MDBfYWM5N19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOVUM5MDAgQUM5NyBTb0MgZHJpdmVyISIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpudWM5MDAtYWM5NyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL251YzkwMC9udWM5MDAtYXVkaW8uYyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlNmY1MQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1ZGlvLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9hYzk3LmgiCisjaW5jbHVkZSAibnVjOTAwLWF1ZGlvLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBudWM5MDBldmJfYWM5N19kYWkgPSB7CisJLm5hbWUJCT0gIkFDOTciLAorCS5zdHJlYW1fbmFtZQk9ICJBQzk3IEhpRmkiLAorCS5jcHVfZGFpCT0gJm51YzkwMF9hYzk3X2RhaSwKKwkuY29kZWNfZGFpCT0gJmFjOTdfZGFpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbnVjOTAwZXZiX2F1ZGlvX21hY2hpbmUgPSB7CisJLm5hbWUJCT0gIk5VQzkwMEVWQl9BQzk3IiwKKwkuZGFpX2xpbmsJPSAmbnVjOTAwZXZiX2FjOTdfZGFpLAorCS5udW1fbGlua3MJPSAxLAorCS5wbGF0Zm9ybQk9ICZudWM5MDBfc29jX3BsYXRmb3JtLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBudWM5MDBldmJfYWM5N19kZXZkYXRhID0geworCS5jYXJkCQk9ICZudWM5MDBldmJfYXVkaW9fbWFjaGluZSwKKwkuY29kZWNfZGV2CT0gJnNvY19jb2RlY19kZXZfYWM5NywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5MDBldmJfYXNvY19kZXY7CisKK3N0YXRpYyBpbnQgX19pbml0IG51YzkwMGV2Yl9hdWRpb19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IC1FTk9NRU07CisJbnVjOTAwZXZiX2Fzb2NfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFudWM5MDBldmJfYXNvY19kZXYpCisJCWdvdG8gb3V0OworCisJLyogbnVjOTAwIGJvYXJkIGF1ZGlvIGRldmljZSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG51YzkwMGV2Yl9hc29jX2RldiwgJm51YzkwMGV2Yl9hYzk3X2RldmRhdGEpOworCisJbnVjOTAwZXZiX2FjOTdfZGV2ZGF0YS5kZXYgPSAmbnVjOTAwZXZiX2Fzb2NfZGV2LT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChudWM5MDBldmJfYXNvY19kZXYpOworCisJaWYgKHJldCkgeworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KG51YzkwMGV2Yl9hc29jX2Rldik7CisJCW51YzkwMGV2Yl9hc29jX2RldiA9IE5VTEw7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG51YzkwMGV2Yl9hdWRpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobnVjOTAwZXZiX2Fzb2NfZGV2KTsKK30KKworbW9kdWxlX2luaXQobnVjOTAwZXZiX2F1ZGlvX2luaXQpOworbW9kdWxlX2V4aXQobnVjOTAwZXZiX2F1ZGlvX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5VQzkwMCBTZXJpZXMgQVNvQyBhdWRpbyBzdXBwb3J0Iik7CitNT0RVTEVfQVVUSE9SKCJXYW4gWm9uZ1NodW4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLWF1ZGlvLmggYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzhmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbnVjOTAwL251YzkwMC1hdWRpby5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfTlVDOTAwX0FVRElPX0gKKyNkZWZpbmUgX05VQzkwMF9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisvKiBBdWRpbyBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBBQ1RMX0NPTgkJMHgwMAorI2RlZmluZSBBQ1RMX1JFU0VUCQkweDA0CisjZGVmaW5lIEFDVExfUkRTVEIJCTB4MDgKKyNkZWZpbmUgQUNUTF9SRFNUX0xFTkdUSAkweDBDCisjZGVmaW5lIEFDVExfUkRTVEMJCTB4MTAKKyNkZWZpbmUgQUNUTF9SU1IJCTB4MTQKKyNkZWZpbmUgQUNUTF9QRFNUQgkJMHgxOAorI2RlZmluZSBBQ1RMX1BEU1RfTEVOR1RICTB4MUMKKyNkZWZpbmUgQUNUTF9QRFNUQwkJMHgyMAorI2RlZmluZSBBQ1RMX1BTUgkJMHgyNAorI2RlZmluZSBBQ1RMX0lJU0NPTgkJMHgyOAorI2RlZmluZSBBQ1RMX0FDQ09OCQkweDJDCisjZGVmaW5lIEFDVExfQUNPUzAJCTB4MzAKKyNkZWZpbmUgQUNUTF9BQ09TMQkJMHgzNAorI2RlZmluZSBBQ1RMX0FDT1MyCQkweDM4CisjZGVmaW5lIEFDVExfQUNJUzAJCTB4M0MKKyNkZWZpbmUgQUNUTF9BQ0lTMQkJMHg0MAorI2RlZmluZSBBQ1RMX0FDSVMyCQkweDQ0CisjZGVmaW5lIEFDVExfQ09VTlRFUgkJMHg0OAorCisvKiBiaXQgZGVmaW5pdGlvbiBvZiBSRUdfQUNUTF9DT04gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9ETUFfSVJRCQkweDEwMDAKKyNkZWZpbmUgVF9ETUFfSVJRCQkweDA4MDAKKyNkZWZpbmUgSUlTX0FDX1BJTl9TRUwJCTB4MDEwMAorI2RlZmluZSBGSUZPX1RICQkJMHgwMDgwCisjZGVmaW5lIEFEQ19FTgkJCTB4MDAxMAorI2RlZmluZSBNODBfRU4JCQkweDAwMDgKKyNkZWZpbmUgQUNMSU5LX0VOCQkweDAwMDQKKyNkZWZpbmUgSUlTX0VOCQkJMHgwMDAyCisKKy8qIGJpdCBkZWZpbml0aW9uIG9mIFJFR19BQ1RMX1JFU0VUIHJlZ2lzdGVyICovCisjZGVmaW5lIFc1NjkxX1BMQVkJCTB4MjAwMDAKKyNkZWZpbmUgQUNUTF9SRVNFVF9CSVQJCTB4MTAwMDAKKyNkZWZpbmUgUkVDT1JEX1JJR0hUX0NITk5FTAkweDA4MDAwCisjZGVmaW5lIFJFQ09SRF9MRUZUX0NITk5FTAkweDA0MDAwCisjZGVmaW5lIFBMQVlfUklHSFRfQ0hOTkVMCTB4MDIwMDAKKyNkZWZpbmUgUExBWV9MRUZUX0NITk5FTAkweDAxMDAwCisjZGVmaW5lIERBQ19QTEFZCQkweDAwODAwCisjZGVmaW5lIEFEQ19SRUNPUkQJCTB4MDA0MDAKKyNkZWZpbmUgTTgwX1BMQVkJCTB4MDAyMDAKKyNkZWZpbmUgQUNfUkVDT1JECQkweDAwMTAwCisjZGVmaW5lIEFDX1BMQVkJCQkweDAwMDgwCisjZGVmaW5lIElJU19SRUNPUkQJCTB4MDAwNDAKKyNkZWZpbmUgSUlTX1BMQVkJCTB4MDAwMjAKKyNkZWZpbmUgREFDX1JFU0VUCQkweDAwMDEwCisjZGVmaW5lIEFEQ19SRVNFVAkJMHgwMDAwOAorI2RlZmluZSBNODBfUkVTRVQJCTB4MDAwMDQKKyNkZWZpbmUgQUNfUkVTRVQJCTB4MDAwMDIKKyNkZWZpbmUgSUlTX1JFU0VUCQkweDAwMDAxCisKKy8qIGJpdCBkZWZpbml0aW9uIG9mIFJFR19BQ1RMX0FDQ09OIHJlZ2lzdGVyICovCisjZGVmaW5lIEFDX0JDTEtfUFVfRU4JCTB4MjAKKyNkZWZpbmUgQUNfUl9GSU5JU0gJCTB4MTAKKyNkZWZpbmUgQUNfV19GSU5JU0gJCTB4MDgKKyNkZWZpbmUgQUNfV19SRVMJCTB4MDQKKyNkZWZpbmUgQUNfQ19SRVMJCTB4MDIKKworLyogYml0IGRlZmluaXRpb24gb2YgQUNUTF9SU1IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9GSUZPX0VNUFRZCQkweDA0CisjZGVmaW5lIFJfRE1BX0VORF9JUlEJCTB4MDIKKyNkZWZpbmUgUl9ETUFfTUlERExFX0lSUQkweDAxCisKKy8qIGJpdCBkZWZpbml0aW9uIG9mIEFDVExfUFNSIHJlZ2lzdGVyICovCisjZGVmaW5lIFBfRklGT19FTVBUWQkJMHgwNAorI2RlZmluZSBQX0RNQV9FTkRfSVJRCQkweDAyCisjZGVmaW5lIFBfRE1BX01JRERMRV9JUlEJMHgwMQorCisvKiBiaXQgZGVmaW5pdGlvbiBvZiBBQ1RMX0FDT1MwIHJlZ2lzdGVyICovCisjZGVmaW5lIFNMT1QxX1ZBTElECQkweDAxCisjZGVmaW5lIFNMT1QyX1ZBTElECQkweDAyCisjZGVmaW5lIFNMT1QzX1ZBTElECQkweDA0CisjZGVmaW5lIFNMT1Q0X1ZBTElECQkweDA4CisjZGVmaW5lIFZBTElEX0ZSQU1FCQkweDEwCisKKy8qIGJpdCBkZWZpbml0aW9uIG9mIEFDVExfQUNPUzEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUl9XQgkJCTB4ODAKKworI2RlZmluZSBDT0RFQ19SRUFEWQkJMHgxMAorI2RlZmluZSBSRVNFVF9QUlNSCQkweDAwCisjZGVmaW5lIEFVRElPX1dSSVRFKGFkZHIsIHZhbCkJX19yYXdfd3JpdGVsKHZhbCwgYWRkcikKKyNkZWZpbmUgQVVESU9fUkVBRChhZGRyKQlfX3Jhd19yZWFkbChhZGRyKQorCitzdHJ1Y3QgbnVjOTAwX2F1ZGlvIHsKKwl2b2lkIF9faW9tZW0gKm1taW87CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgZG1hX2FkZHJbMl07CisJdW5zaWduZWQgbG9uZyBidWZmZXJzaXplWzJdOworCXVuc2lnbmVkIGxvbmcgaXJxX251bTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGRldmljZSAqZGV2OworCit9OworCitleHRlcm4gc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2FjOTdfZGF0YTsKK2V4dGVybiBzdHJ1Y3Qgc25kX3NvY19kYWkgbnVjOTAwX2FjOTdfZGFpOworZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIG51YzkwMF9zb2NfcGxhdGZvcm07CisKKyNlbmRpZiAvKmVuZCBfTlVDOTAwX0FVRElPX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLXBjbS5jIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxZTgwMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLXBjbS5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgIm51YzkwMC1hdWRpby5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgbnVjOTAwX3BjbV9oYXJkd2FyZSA9IHsKKwkuaW5mbwkJCT0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCQlTTkRSVl9QQ01fSU5GT19SRVNVTUUsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkuYnVmZmVyX2J5dGVzX21heAk9IDQqMTAyNCwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDEqMTAyNCwKKwkucGVyaW9kX2J5dGVzX21heAk9IDQqMTAyNCwKKwkucGVyaW9kc19taW4JCT0gMSwKKwkucGVyaW9kc19tYXgJCT0gMTAyNCwKK307CisKK3N0YXRpYyBpbnQgbnVjOTAwX2RtYV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZudWM5MDBfYXVkaW8tPmxvY2ssIGZsYWdzKTsKKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwludWM5MDBfYXVkaW8tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwludWM5MDBfYXVkaW8tPmRtYV9hZGRyW3N1YnN0cmVhbS0+c3RyZWFtXSA9IHJ1bnRpbWUtPmRtYV9hZGRyOworCW51YzkwMF9hdWRpby0+YnVmZmVyc2l6ZVtzdWJzdHJlYW0tPnN0cmVhbV0gPQorCQkJCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhwYXJhbXMpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnVjOTAwX2F1ZGlvLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfdXBkYXRlX2RtYV9yZWdpc3RlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICptbWlvX2FkZHIsICptbWlvX2xlbjsKKworCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCW1taW9fYWRkciA9IG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUERTVEI7CisJCW1taW9fbGVuID0gbnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QRFNUX0xFTkdUSDsKKwl9IGVsc2UgeworCQltbWlvX2FkZHIgPSBudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JEU1RCOworCQltbWlvX2xlbiA9IG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkRTVF9MRU5HVEg7CisJfQorCisJQVVESU9fV1JJVEUobW1pb19hZGRyLCBkbWFfYWRkcik7CisJQVVESU9fV1JJVEUobW1pb19sZW4sIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgbnVjOTAwX2RtYV9zdGFydChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9DT04pOworCXZhbCB8PSAoVF9ETUFfSVJRIHwgUl9ETUFfSVJRKTsKKwlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0NPTiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgbnVjOTAwX2RtYV9zdG9wKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0NPTik7CisJdmFsICY9IH4oVF9ETUFfSVJRIHwgUl9ETUFfSVJRKTsKKwlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0NPTiwgdmFsKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG51YzkwMF9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IGRldl9pZDsKKwlzdHJ1Y3QgbnVjOTAwX2F1ZGlvICpudWM5MDBfYXVkaW8gPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXNwaW5fbG9jaygmbnVjOTAwX2F1ZGlvLT5sb2NrKTsKKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9DT04pOworCisJaWYgKHZhbCAmIFJfRE1BX0lSUSkgeworCQlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX0NPTiwgdmFsIHwgUl9ETUFfSVJRKTsKKworCQl2YWwgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUlNSKTsKKworCQlpZiAodmFsICYgUl9ETUFfTUlERExFX0lSUSkgeworCQkJdmFsIHw9IFJfRE1BX01JRERMRV9JUlE7CisJCQlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1JTUiwgdmFsKTsKKwkJfQorCisJCWlmICh2YWwgJiBSX0RNQV9FTkRfSVJRKSB7CisJCQl2YWwgfD0gUl9ETUFfRU5EX0lSUTsKKwkJCUFVRElPX1dSSVRFKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUlNSLCB2YWwpOworCQl9CisJfSBlbHNlIGlmICh2YWwgJiBUX0RNQV9JUlEpIHsKKwkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9DT04sIHZhbCB8IFRfRE1BX0lSUSk7CisKKwkJdmFsID0gQVVESU9fUkVBRChudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1BTUik7CisKKwkJaWYgKHZhbCAmIFBfRE1BX01JRERMRV9JUlEpIHsKKwkJCXZhbCB8PSBQX0RNQV9NSURETEVfSVJROworCQkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QU1IsIHZhbCk7CisJCX0KKworCQlpZiAodmFsICYgUF9ETUFfRU5EX0lSUSkgeworCQkJdmFsIHw9IFBfRE1BX0VORF9JUlE7CisJCQlBVURJT19XUklURShudWM5MDBfYXVkaW8tPm1taW8gKyBBQ1RMX1BTUiwgdmFsKTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIobnVjOTAwX2F1ZGlvLT5kZXYsICJXcm9uZyBETUEgaW50ZXJydXB0IHN0YXR1cyFcbiIpOworCQlzcGluX3VubG9jaygmbnVjOTAwX2F1ZGlvLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXNwaW5fdW5sb2NrKCZudWM5MDBfYXVkaW8tPmxvY2spOworCisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG51YzkwMF9kbWFfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX2RtYV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZudWM5MDBfYXVkaW8tPmxvY2ssIGZsYWdzKTsKKworCW51YzkwMF91cGRhdGVfZG1hX3JlZ2lzdGVyKHN1YnN0cmVhbSwKKwkJCQludWM5MDBfYXVkaW8tPmRtYV9hZGRyW3N1YnN0cmVhbS0+c3RyZWFtXSwKKwkJCQludWM5MDBfYXVkaW8tPmJ1ZmZlcnNpemVbc3Vic3RyZWFtLT5zdHJlYW1dKTsKKworCXZhbCA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCk7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmNoYW5uZWxzKSB7CisJY2FzZSAxOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgeworCQkJdmFsICY9IH4oUExBWV9MRUZUX0NITk5FTCB8IFBMQVlfUklHSFRfQ0hOTkVMKTsKKwkJCXZhbCB8PSBQTEFZX1JJR0hUX0NITk5FTDsKKwkJfSBlbHNlIHsKKwkJCXZhbCAmPSB+KFJFQ09SRF9MRUZUX0NITk5FTCB8IFJFQ09SRF9SSUdIVF9DSE5ORUwpOworCQkJdmFsIHw9IFJFQ09SRF9SSUdIVF9DSE5ORUw7CisJCX0KKwkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCXZhbCB8PSAoUExBWV9MRUZUX0NITk5FTCB8IFBMQVlfUklHSFRfQ0hOTkVMKTsKKwkJZWxzZQorCQkJdmFsIHw9IChSRUNPUkRfTEVGVF9DSE5ORUwgfCBSRUNPUkRfUklHSFRfQ0hOTkVMKTsKKwkJQVVESU9fV1JJVEUobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9SRVNFVCwgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm51YzkwMF9hdWRpby0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG51YzkwMF9kbWFfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJbnVjOTAwX2RtYV9zdGFydChzdWJzdHJlYW0pOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJCW51YzkwMF9kbWFfc3RvcChzdWJzdHJlYW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBudWM5MDBfZG1hX2dldHBvc2l0aW9uKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlkbWFfYWRkcl90ICpzcmMsIGRtYV9hZGRyX3QgKmRzdCkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKworCWlmIChzcmMgIT0gTlVMTCkKKwkJKnNyYyA9IEFVRElPX1JFQUQobnVjOTAwX2F1ZGlvLT5tbWlvICsgQUNUTF9QRFNUQyk7CisKKwlpZiAoZHN0ICE9IE5VTEwpCisJCSpkc3QgPSBBVURJT19SRUFEKG51YzkwMF9hdWRpby0+bW1pbyArIEFDVExfUkRTVEMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBudWM5MDBfZG1hX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlkbWFfYWRkcl90IHNyYywgZHN0OworCXVuc2lnbmVkIGxvbmcgcmVzOworCisJbnVjOTAwX2RtYV9nZXRwb3NpdGlvbihzdWJzdHJlYW0sICZzcmMsICZkc3QpOworCisJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkKKwkJcmVzID0gZHN0IC0gcnVudGltZS0+ZG1hX2FkZHI7CisJZWxzZQorCQlyZXMgPSBzcmMgLSBydW50aW1lLT5kbWFfYWRkcjsKKworCXJldHVybiBieXRlc190b19mcmFtZXMoc3Vic3RyZWFtLT5ydW50aW1lLCByZXMpOworfQorCitzdGF0aWMgaW50IG51YzkwMF9kbWFfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBudWM5MDBfYXVkaW8gKm51YzkwMF9hdWRpbzsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFtLCAmbnVjOTAwX3BjbV9oYXJkd2FyZSk7CisKKwludWM5MDBfYXVkaW8gPSBudWM5MDBfYWM5N19kYXRhOworCisJaWYgKHJlcXVlc3RfaXJxKG51YzkwMF9hdWRpby0+aXJxX251bSwgbnVjOTAwX2RtYV9pbnRlcnJ1cHQsCisJCQlJUlFGX0RJU0FCTEVELCAibnVjOTAwLWRtYSIsIHN1YnN0cmVhbSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBudWM5MDBfYXVkaW87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudWM5MDBfZG1hX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IG51YzkwMF9hdWRpbyAqbnVjOTAwX2F1ZGlvID0gcnVudGltZS0+cHJpdmF0ZV9kYXRhOworCisJZnJlZV9pcnEobnVjOTAwX2F1ZGlvLT5pcnFfbnVtLCBzdWJzdHJlYW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVjOTAwX2RtYV9tbWFwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKHN1YnN0cmVhbS0+cGNtLT5jYXJkLT5kZXYsIHZtYSwKKwkJCQkJcnVudGltZS0+ZG1hX2FyZWEsCisJCQkJCXJ1bnRpbWUtPmRtYV9hZGRyLAorCQkJCQlydW50aW1lLT5kbWFfYnl0ZXMpOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIG51YzkwMF9kbWFfb3BzID0geworCS5vcGVuCQk9IG51YzkwMF9kbWFfb3BlbiwKKwkuY2xvc2UJCT0gbnVjOTAwX2RtYV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IG51YzkwMF9kbWFfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gbnVjOTAwX2RtYV9od19mcmVlLAorCS5wcmVwYXJlCT0gbnVjOTAwX2RtYV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gbnVjOTAwX2RtYV90cmlnZ2VyLAorCS5wb2ludGVyCT0gbnVjOTAwX2RtYV9wb2ludGVyLAorCS5tbWFwCQk9IG51YzkwMF9kbWFfbW1hcCwKK307CisKK3N0YXRpYyB2b2lkIG51YzkwMF9kbWFfZnJlZV9kbWFfYnVmZmVycyhzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOworfQorCitzdGF0aWMgdTY0IG51YzkwMF9wY21fZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgaW50IG51YzkwMF9kbWFfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwgc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlpZiAoIWNhcmQtPmRldi0+ZG1hX21hc2spCisJCWNhcmQtPmRldi0+ZG1hX21hc2sgPSAmbnVjOTAwX3BjbV9kbWFtYXNrOworCWlmICghY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzaykKKwkJY2FyZC0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQljYXJkLT5kZXYsIDQgKiAxMDI0LCAoNCAqIDEwMjQpIC0gMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNuZF9zb2NfcGxhdGZvcm0gbnVjOTAwX3NvY19wbGF0Zm9ybSA9IHsKKwkubmFtZQkJPSAibnVjOTAwLWRtYSIsCisJLnBjbV9vcHMJPSAmbnVjOTAwX2RtYV9vcHMsCisJLnBjbV9uZXcJPSBudWM5MDBfZG1hX25ldywKKwkucGNtX2ZyZWUJPSBudWM5MDBfZG1hX2ZyZWVfZG1hX2J1ZmZlcnMsCit9CitFWFBPUlRfU1lNQk9MX0dQTChudWM5MDBfc29jX3BsYXRmb3JtKTsKKworc3RhdGljIGludCBfX2luaXQgbnVjOTAwX3NvY19wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0oJm51YzkwMF9zb2NfcGxhdGZvcm0pOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbnVjOTAwX3NvY19wbGF0Zm9ybV9leGl0KHZvaWQpCit7CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZudWM5MDBfc29jX3BsYXRmb3JtKTsKK30KKworbW9kdWxlX2luaXQobnVjOTAwX3NvY19wbGF0Zm9ybV9pbml0KTsKK21vZHVsZV9leGl0KG51YzkwMF9zb2NfcGxhdGZvcm1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIldhbiBab25nU2h1biwgPG1jdW9zLmNvbUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm51YzkwMCBBdWRpbyBETUEgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggNmY0NGNiNC4uODZmMjEzOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtNTksNiArNTksNyBAQAogCWludAkJCQljb25maWd1cmVkOwogCXVuc2lnbmVkIGludAkJCWluX2ZyZXE7CiAJaW50CQkJCWNsa19kaXY7CisJaW50CQkJCXdsZW47CiB9OwogCiAjZGVmaW5lIHRvX21jYnNwKHByaXYpCWNvbnRhaW5lcl9vZigocHJpdiksIHN0cnVjdCBvbWFwX21jYnNwX2RhdGEsIGJ1c19pZCkKQEAgLTE1NCwyMCArMTU1LDUxIEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSB0b19tY2JzcChjcHVfZGFpLT5wcml2YXRlX2RhdGEpOworCXN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSAqZG1hX2RhdGE7CiAJaW50IGRtYV9vcF9tb2RlID0gb21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUobWNic3BfZGF0YS0+YnVzX2lkKTsKLQlpbnQgc2FtcGxlczsKKwlpbnQgd29yZHM7CisKKwlkbWFfZGF0YSA9IHNuZF9zb2NfZGFpX2dldF9kbWFfZGF0YShydGQtPmRhaS0+Y3B1X2RhaSwgc3Vic3RyZWFtKTsKIAogCS8qIFRPRE86IEN1cnJlbnRseSwgTU9ERV9FTEVNRU5UID09IE1PREVfRlJBTUUgKi8KIAlpZiAoZG1hX29wX21vZGUgPT0gTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKQotCQlzYW1wbGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSkgPj4gMTsKKwkJLyoKKwkJICogQ29uZmlndXJlIE1jQlNQIHRocmVzaG9sZCBiYXNlZCBvbiBlaXRoZXI6CisJCSAqIHBhY2tldF9zaXplLCB3aGVuIHRoZSBzRE1BIGlzIGluIHBhY2tldCBtb2RlLCBvcgorCQkgKiBiYXNlZCBvbiB0aGUgcGVyaW9kIHNpemUuCisJCSAqLworCQlpZiAoZG1hX2RhdGEtPnBhY2tldF9zaXplKQorCQkJd29yZHMgPSBkbWFfZGF0YS0+cGFja2V0X3NpemU7CisJCWVsc2UKKwkJCXdvcmRzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSkgLworCQkJCQkJCShtY2JzcF9kYXRhLT53bGVuIC8gOCk7CiAJZWxzZQotCQlzYW1wbGVzID0gMTsKKwkJd29yZHMgPSAxOwogCiAJLyogQ29uZmlndXJlIE1jQlNQIGludGVybmFsIGJ1ZmZlciB1c2FnZSAqLwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQobWNic3BfZGF0YS0+YnVzX2lkLCBzYW1wbGVzIC0gMSk7CisJCW9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZChtY2JzcF9kYXRhLT5idXNfaWQsIHdvcmRzKTsKIAllbHNlCi0JCW9tYXBfbWNic3Bfc2V0X3J4X3RocmVzaG9sZChtY2JzcF9kYXRhLT5idXNfaWQsIHNhbXBsZXMgLSAxKTsKKwkJb21hcF9tY2JzcF9zZXRfcnhfdGhyZXNob2xkKG1jYnNwX2RhdGEtPmJ1c19pZCwgd29yZHMpOworfQorCitzdGF0aWMgaW50IG9tYXBfbWNic3BfaHdydWxlX21pbl9idWZmZXJzaXplKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmJ1ZmZlcl9zaXplID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAorCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX1NJWkUpOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKmNoYW5uZWxzID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAorCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCXN0cnVjdCBvbWFwX21jYnNwX2RhdGEgKm1jYnNwX2RhdGEgPSBydWxlLT5wcml2YXRlOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgZnJhbWVzOworCWludCBzaXplOworCisJc25kX2ludGVydmFsX2FueSgmZnJhbWVzKTsKKwlzaXplID0gb21hcF9tY2JzcF9nZXRfZmlmb19zaXplKG1jYnNwX2RhdGEtPmJ1c19pZCk7CisKKwlmcmFtZXMubWluID0gc2l6ZSAvIGNoYW5uZWxzLT5taW47CisJZnJhbWVzLmludGVnZXIgPSAxOworCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGJ1ZmZlcl9zaXplLCAmZnJhbWVzKTsKIH0KIAogc3RhdGljIGludCBvbWFwX21jYnNwX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApAQCAtMTgyLDMzICsyMTQsMzUgQEAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkKIAkJZXJyID0gb21hcF9tY2JzcF9yZXF1ZXN0KGJ1c19pZCk7CiAKKwkvKgorCSAqIE9NQVAzIE1jQlNQIEZJRk8gaXMgd29yZCBzdHJ1Y3R1cmVkLgorCSAqIE1jQlNQMiBoYXMgMTAyNCArIDI1NiA9IDEyODAgd29yZCBsb25nIGJ1ZmZlciwKKwkgKiBNY0JTUDEsMyw0LDUgaGFzIDEyOCB3b3JkIGxvbmcgYnVmZmVyCisJICogVGhpcyBtZWFucyB0aGF0IHRoZSBzaXplIG9mIHRoZSBGSUZPIGRlcGVuZHMgb24gdGhlIHNhbXBsZSBmb3JtYXQuCisJICogRm9yIGV4YW1wbGUgb24gTWNCU1AzOgorCSAqIDE2Yml0IHNhbXBsZXM6IHNpemUgaXMgMTI4ICogMiA9IDI1NiBieXRlcworCSAqIDMyYml0IHNhbXBsZXM6IHNpemUgaXMgMTI4ICogNCA9IDUxMiBieXRlcworCSAqIEl0IGlzIHNpbXBsZXIgdG8gcGxhY2UgY29uc3RyYWludCBmb3IgYnVmZmVyIGFuZCBwZXJpb2QgYmFzZWQgb24KKwkgKiBjaGFubmVscy4KKwkgKiBNY0JTUDMgYXMgZXhhbXBsZSBhZ2FpbiAoMTYgb3IgMzIgYml0IHNhbXBsZXMpOgorCSAqIDEgY2hhbm5lbCAobW9ubyk6IHNpemUgaXMgMTI4IGZyYW1lcyAoMTI4IHdvcmRzKQorCSAqIDIgY2hhbm5lbHMgKHN0ZXJlbyk6IHNpemUgaXMgMTI4IC8gMiA9IDY0IGZyYW1lcyAoMiAqIDY0IHdvcmRzKQorCSAqIDQgY2hhbm5lbHM6IHNpemUgaXMgMTI4IC8gNCA9IDMyIGZyYW1lcyAoNCAqIDMyIHdvcmRzKQorCSAqLwogCWlmIChjcHVfaXNfb21hcDM0M3goKSkgewotCQlpbnQgZG1hX29wX21vZGUgPSBvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZShidXNfaWQpOwotCQlpbnQgbWF4X3BlcmlvZDsKLQogCQkvKgotCQkgKiBNY0JTUDIgaW4gT01BUDMgaGFzIDEwMjQgKiAzMi1iaXQgaW50ZXJuYWwgYXVkaW8gYnVmZmVyLgotCQkgKiBTZXQgY29uc3RyYWludCBmb3IgbWluaW11bSBidWZmZXIgc2l6ZSB0byB0aGUgc2FtZSB0aGFuIEZJRk8KLQkJICogc2l6ZSBpbiBvcmRlciB0byBhdm9pZCB1bmRlcnJ1bnMgaW4gcGxheWJhY2sgc3RhcnR1cCBiZWNhdXNlCi0JCSAqIEhXIGlzIGtlZXBpbmcgdGhlIERNQSByZXF1ZXN0IGFjdGl2ZSB1bnRpbCBGSUZPIGlzIGZpbGxlZC4KLQkJICovCi0JCWlmIChidXNfaWQgPT0gMSkKLQkJCXNuZF9wY21faHdfY29uc3RyYWludF9taW5tYXgoc3Vic3RyZWFtLT5ydW50aW1lLAotCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTLAotCQkJCQk0MDk2LCBVSU5UX01BWCk7CisJCSogUnVsZSBmb3IgdGhlIGJ1ZmZlciBzaXplLiBXZSBzaG91bGQgbm90IGFsbG93CisJCSogc21hbGxlciBidWZmZXIgdGhhbiB0aGUgRklGTyBzaXplIHRvIGF2b2lkIHVuZGVycnVucworCQkqLworCQlzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAorCQkJCSAgICBvbWFwX21jYnNwX2h3cnVsZV9taW5fYnVmZmVyc2l6ZSwKKwkJCQkgICAgbWNic3BfZGF0YSwKKwkJCQkgICAgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLCAtMSk7CiAKLQkJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCQltYXhfcGVyaW9kID0gb21hcF9tY2JzcF9nZXRfbWF4X3R4X3RocmVzaG9sZChidXNfaWQpOwotCQllbHNlCi0JCQltYXhfcGVyaW9kID0gb21hcF9tY2JzcF9nZXRfbWF4X3J4X3RocmVzaG9sZChidXNfaWQpOwotCi0JCW1heF9wZXJpb2QrKzsKLQkJbWF4X3BlcmlvZCA8PD0gMTsKLQotCQlpZiAoZG1hX29wX21vZGUgPT0gTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKQotCQkJc25kX3BjbV9od19jb25zdHJhaW50X21pbm1heChzdWJzdHJlYW0tPnJ1bnRpbWUsCi0JCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTLAotCQkJCQkJMzIsIG1heF9wZXJpb2QpOworCQkvKiBNYWtlIHN1cmUsIHRoYXQgdGhlIHBlcmlvZCBzaXplIGlzIGFsd2F5cyBldmVuICovCisJCXNuZF9wY21faHdfY29uc3RyYWludF9zdGVwKHN1YnN0cmVhbS0+cnVudGltZSwgMCwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLCAyKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMjg5LDExICszMjMsMTQgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9kYXRhICptY2JzcF9kYXRhID0gdG9fbWNic3AoY3B1X2RhaS0+cHJpdmF0ZV9kYXRhKTsKIAlzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnICpyZWdzID0gJm1jYnNwX2RhdGEtPnJlZ3M7Ci0JaW50IGRtYSwgYnVzX2lkID0gbWNic3BfZGF0YS0+YnVzX2lkLCBpZCA9IGNwdV9kYWktPmlkOworCXN0cnVjdCBvbWFwX3BjbV9kbWFfZGF0YSAqZG1hX2RhdGE7CisJaW50IGRtYSwgYnVzX2lkID0gbWNic3BfZGF0YS0+YnVzX2lkOwogCWludCB3bGVuLCBjaGFubmVscywgd3BmLCBzeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX0VMRU1FTlQ7CisJaW50IHBrdF9zaXplID0gMDsKIAl1bnNpZ25lZCBsb25nIHBvcnQ7CiAJdW5zaWduZWQgaW50IGZvcm1hdCwgZGl2LCBmcmFtZXNpemUsIG1hc3RlcjsKIAorCWRtYV9kYXRhID0gJm9tYXBfbWNic3BfZGFpX2RtYV9wYXJhbXNbY3B1X2RhaS0+aWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKIAkJZG1hID0gb21hcDFfZG1hX3JlcXNbYnVzX2lkXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAJCXBvcnQgPSBvbWFwMV9tY2JzcF9wb3J0W2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwpAQCAtMzA2LDM1ICszNDMsNzQgQEAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzQzeCgpKSB7CiAJCWRtYSA9IG9tYXAyNHh4X2RtYV9yZXFzW2J1c19pZF1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCQlwb3J0ID0gb21hcDM0eHhfbWNic3BfcG9ydFtidXNfaWRdW3N1YnN0cmVhbS0+c3RyZWFtXTsKLQkJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLnNldF90aHJlc2hvbGQgPQotCQkJCQkJb21hcF9tY2JzcF9zZXRfdGhyZXNob2xkOwotCQkvKiBUT0RPOiBDdXJyZW50bHksIE1PREVfRUxFTUVOVCA9PSBNT0RFX0ZSQU1FICovCi0JCWlmIChvbWFwX21jYnNwX2dldF9kbWFfb3BfbW9kZShidXNfaWQpID09Ci0JCQkJCQlNQ0JTUF9ETUFfTU9ERV9USFJFU0hPTEQpCi0JCQlzeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX0ZSQU1FOwogCX0gZWxzZSB7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0ubmFtZSA9Ci0JCXN1YnN0cmVhbS0+c3RyZWFtID8gIkF1ZGlvIENhcHR1cmUiIDogIkF1ZGlvIFBsYXliYWNrIjsKLQlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uZG1hX3JlcSA9IGRtYTsKLQlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0ucG9ydF9hZGRyID0gcG9ydDsKLQlvbWFwX21jYnNwX2RhaV9kbWFfcGFyYW1zW2lkXVtzdWJzdHJlYW0tPnN0cmVhbV0uc3luY19tb2RlID0gc3luY19tb2RlOwogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKLQkJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLmRhdGFfdHlwZSA9Ci0JCQkgT01BUF9ETUFfREFUQV9UWVBFX1MxNjsKKwkJZG1hX2RhdGEtPmRhdGFfdHlwZSA9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMTY7CisJCXdsZW4gPSAxNjsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKLQkJb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dLmRhdGFfdHlwZSA9Ci0JCQkgT01BUF9ETUFfREFUQV9UWVBFX1MzMjsKKwkJZG1hX2RhdGEtPmRhdGFfdHlwZSA9IE9NQVBfRE1BX0RBVEFfVFlQRV9TMzI7CisJCXdsZW4gPSAzMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWlmIChjcHVfaXNfb21hcDM0M3goKSkgeworCQlkbWFfZGF0YS0+c2V0X3RocmVzaG9sZCA9IG9tYXBfbWNic3Bfc2V0X3RocmVzaG9sZDsKKwkJLyogVE9ETzogQ3VycmVudGx5LCBNT0RFX0VMRU1FTlQgPT0gTU9ERV9GUkFNRSAqLworCQlpZiAob21hcF9tY2JzcF9nZXRfZG1hX29wX21vZGUoYnVzX2lkKSA9PQorCQkJCQkJTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKSB7CisJCQlpbnQgcGVyaW9kX3dvcmRzLCBtYXhfdGhyc2g7CiAKLQlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoY3B1X2RhaSwgc3Vic3RyZWFtLAotCQkmb21hcF9tY2JzcF9kYWlfZG1hX3BhcmFtc1tpZF1bc3Vic3RyZWFtLT5zdHJlYW1dKTsKKwkJCXBlcmlvZF93b3JkcyA9IHBhcmFtc19wZXJpb2RfYnl0ZXMocGFyYW1zKSAvICh3bGVuIC8gOCk7CisJCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCQltYXhfdGhyc2ggPSBvbWFwX21jYnNwX2dldF9tYXhfdHhfdGhyZXNob2xkKAorCQkJCQkJCSAgICBtY2JzcF9kYXRhLT5idXNfaWQpOworCQkJZWxzZQorCQkJCW1heF90aHJzaCA9IG9tYXBfbWNic3BfZ2V0X21heF9yeF90aHJlc2hvbGQoCisJCQkJCQkJICAgIG1jYnNwX2RhdGEtPmJ1c19pZCk7CisJCQkvKgorCQkJICogSWYgdGhlIHBlcmlvZCBjb250YWlucyBsZXNzIG9yIGVxdWFsIG51bWJlciBvZiB3b3JkcywKKwkJCSAqIHdlIGFyZSB1c2luZyB0aGUgb3JpZ2luYWwgdGhyZXNob2xkIG1vZGUgc2V0dXA6CisJCQkgKiBNY0JTUCB0aHJlc2hvbGQgPSBzRE1BIGZyYW1lIHNpemUgPSBwZXJpb2Rfc2l6ZQorCQkJICogT3RoZXJ3aXNlIHdlIHN3aXRjaCB0byBzRE1BIHBhY2tldCBtb2RlOgorCQkJICogTWNCU1AgdGhyZXNob2xkID0gc0RNQSBwYWNrZXQgc2l6ZQorCQkJICogc0RNQSBmcmFtZSBzaXplID0gcGVyaW9kIHNpemUKKwkJCSAqLworCQkJaWYgKHBlcmlvZF93b3JkcyA+IG1heF90aHJzaCkgeworCQkJCWludCBkaXZpZGVyID0gMDsKKworCQkJCS8qCisJCQkJICogTG9vayBmb3IgdGhlIGJpZ2dlc3QgdGhyZXNob2xkIHZhbHVlLCB3aGljaAorCQkJCSAqIGRpdmlkZXMgdGhlIHBlcmlvZCBzaXplIGV2ZW5seS4KKwkJCQkgKi8KKwkJCQlkaXZpZGVyID0gcGVyaW9kX3dvcmRzIC8gbWF4X3RocnNoOworCQkJCWlmIChwZXJpb2Rfd29yZHMgJSBtYXhfdGhyc2gpCisJCQkJCWRpdmlkZXIrKzsKKwkJCQl3aGlsZSAocGVyaW9kX3dvcmRzICUgZGl2aWRlciAmJgorCQkJCQlkaXZpZGVyIDwgcGVyaW9kX3dvcmRzKQorCQkJCQlkaXZpZGVyKys7CisJCQkJaWYgKGRpdmlkZXIgPT0gcGVyaW9kX3dvcmRzKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJCXBrdF9zaXplID0gcGVyaW9kX3dvcmRzIC8gZGl2aWRlcjsKKwkJCQlzeW5jX21vZGUgPSBPTUFQX0RNQV9TWU5DX1BBQ0tFVDsKKwkJCX0gZWxzZSB7CisJCQkJc3luY19tb2RlID0gT01BUF9ETUFfU1lOQ19GUkFNRTsKKwkJCX0KKwkJfQorCX0KKworCWRtYV9kYXRhLT5uYW1lID0gc3Vic3RyZWFtLT5zdHJlYW0gPyAiQXVkaW8gQ2FwdHVyZSIgOiAiQXVkaW8gUGxheWJhY2siOworCWRtYV9kYXRhLT5kbWFfcmVxID0gZG1hOworCWRtYV9kYXRhLT5wb3J0X2FkZHIgPSBwb3J0OworCWRtYV9kYXRhLT5zeW5jX21vZGUgPSBzeW5jX21vZGU7CisJZG1hX2RhdGEtPnBhY2tldF9zaXplID0gcGt0X3NpemU7CisKKwlzbmRfc29jX2RhaV9zZXRfZG1hX2RhdGEoY3B1X2RhaSwgc3Vic3RyZWFtLCBkbWFfZGF0YSk7CiAKIAlpZiAobWNic3BfZGF0YS0+Y29uZmlndXJlZCkgewogCQkvKiBNY0JTUCBhbHJlYWR5IGNvbmZpZ3VyZWQgYnkgYW5vdGhlciBzdHJlYW0gKi8KQEAgLTM2MCw3ICs0MzYsNiBAQAogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKIAkJLyogU2V0IHdvcmQgbGVuZ3RocyAqLwotCQl3bGVuID0gMTY7CiAJCXJlZ3MtPnJjcjIJfD0gUldETEVOMihPTUFQX01DQlNQX1dPUkRfMTYpOwogCQlyZWdzLT5yY3IxCXw9IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzE2KTsKIAkJcmVncy0+eGNyMgl8PSBYV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8xNik7CkBAIC0zNjgsNyArNDQzLDYgQEAKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJLyogU2V0IHdvcmQgbGVuZ3RocyAqLwotCQl3bGVuID0gMzI7CiAJCXJlZ3MtPnJjcjIJfD0gUldETEVOMihPTUFQX01DQlNQX1dPUkRfMzIpOwogCQlyZWdzLT5yY3IxCXw9IFJXRExFTjEoT01BUF9NQ0JTUF9XT1JEXzMyKTsKIAkJcmVncy0+eGNyMgl8PSBYV0RMRU4yKE9NQVBfTUNCU1BfV09SRF8zMik7CkBAIC00MDksNiArNDgzLDcgQEAKIAl9CiAKIAlvbWFwX21jYnNwX2NvbmZpZyhidXNfaWQsICZtY2JzcF9kYXRhLT5yZWdzKTsKKwltY2JzcF9kYXRhLT53bGVuID0gd2xlbjsKIAltY2JzcF9kYXRhLT5jb25maWd1cmVkID0gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNwYW5kb3JhLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwppbmRleCA4N2NlODQyLi45ZWVjYWMxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYwpAQCAtNDMsMTIgKzQzLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpvbWFwM3BhbmRvcmFfZGFjX3JlZzsKIAotc3RhdGljIGludCBvbWFwM3BhbmRvcmFfY21uX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywgdW5zaWduZWQgaW50IGZtdCkKK3N0YXRpYyBpbnQgb21hcDNwYW5kb3JhX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmRhaS0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOworCWludCBmbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzsKIAlpbnQgcmV0OwogCiAJLyogU2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCkBAIC05MSwyNCArOTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9tYXAzcGFuZG9yYV9vdXRfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXJldHVybiBvbWFwM3BhbmRvcmFfY21uX2h3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywKLQkJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJCQkgIFNORF9TT0NfREFJRk1UX0lCX05GIHwKLQkJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLX0KLQotc3RhdGljIGludCBvbWFwM3BhbmRvcmFfaW5faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQotewotCXJldHVybiBvbWFwM3BhbmRvcmFfY21uX2h3X3BhcmFtcyhzdWJzdHJlYW0sIHBhcmFtcywKLQkJCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLX0KLQogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKIHsKQEAgLTIzMSwxMiArMjE1LDggQEAKIAlyZXR1cm4gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIG9tYXAzcGFuZG9yYV9vdXRfb3BzID0gewotCS5od19wYXJhbXMgPSBvbWFwM3BhbmRvcmFfb3V0X2h3X3BhcmFtcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgb21hcDNwYW5kb3JhX2luX29wcyA9IHsKLQkuaHdfcGFyYW1zID0gb21hcDNwYW5kb3JhX2luX2h3X3BhcmFtcywKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgb21hcDNwYW5kb3JhX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gb21hcDNwYW5kb3JhX2h3X3BhcmFtcywKIH07CiAKIC8qIERpZ2l0YWwgYXVkaW8gaW50ZXJmYWNlIGdsdWUgLSBjb25uZWN0cyBjb2RlYyA8LS0+IENQVSAqLwpAQCAtMjQ2LDE0ICsyMjYsMTQgQEAKIAkJLnN0cmVhbV9uYW1lID0gIkhpRmkgT3V0IiwKIAkJLmNwdV9kYWkgPSAmb21hcF9tY2JzcF9kYWlbMF0sCiAJCS5jb2RlY19kYWkgPSAmdHdsNDAzMF9kYWlbVFdMNDAzMF9EQUlfSElGSV0sCi0JCS5vcHMgPSAmb21hcDNwYW5kb3JhX291dF9vcHMsCisJCS5vcHMgPSAmb21hcDNwYW5kb3JhX29wcywKIAkJLmluaXQgPSBvbWFwM3BhbmRvcmFfb3V0X2luaXQsCiAJfSwgewogCQkubmFtZSA9ICJUV0w0MDMwIiwKIAkJLnN0cmVhbV9uYW1lID0gIkxpbmUvTWljIEluIiwKIAkJLmNwdV9kYWkgPSAmb21hcF9tY2JzcF9kYWlbMV0sCiAJCS5jb2RlY19kYWkgPSAmdHdsNDAzMF9kYWlbVFdMNDAzMF9EQUlfSElGSV0sCi0JCS5vcHMgPSAmb21hcDNwYW5kb3JhX2luX29wcywKKwkJLm9wcyA9ICZvbWFwM3BhbmRvcmFfb3BzLAogCQkuaW5pdCA9IG9tYXAzcGFuZG9yYV9pbl9pbml0LAogCX0KIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9yeDUxLmMgYi9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKaW5kZXggNDdkODMxZS4uODgwNTJkMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvcng1MS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL3J4NTEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CkBAIC0zNywxNCArMzgsMjIgQEAKICNpbmNsdWRlICJvbWFwLXBjbS5oIgogI2luY2x1ZGUgIi4uL2NvZGVjcy90bHYzMjBhaWMzeC5oIgogCisjZGVmaW5lIFJYNTFfVFZPVVRfU0VMX0dQSU8JCTQwCisjZGVmaW5lIFJYNTFfSkFDS19ERVRFQ1RfR1BJTwkJMTc3CiAvKgogICogUkVWSVNJVDogVFdMNDAzMCBHUElPIGJhc2UgaW4gUlgtNTEuIE5vdyBzdGF0aWNhbGx5IGRlZmluZWQgdG8gMTkyLiBUaGlzCiAgKiBncGlvIGlzIHJlc2VydmVkIGluIGFyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCiAgKi8KICNkZWZpbmUgUlg1MV9TUEVBS0VSX0FNUF9UV0xfR1BJTwkoMTkyICsgNykKIAorZW51bSB7CisJUlg1MV9KQUNLX0RJU0FCTEVELAorCVJYNTFfSkFDS19UVk9VVCwJCS8qIHR2LW91dCAqLworfTsKKwogc3RhdGljIGludCByeDUxX3Nwa19mdW5jOwogc3RhdGljIGludCByeDUxX2RtaWNfZnVuYzsKK3N0YXRpYyBpbnQgcng1MV9qYWNrX2Z1bmM7CiAKIHN0YXRpYyB2b2lkIHJ4NTFfZXh0X2NvbnRyb2woc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewpAQCAtNTcsNiArNjYsOSBAQAogCWVsc2UKIAkJc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGNvZGVjLCAiRE1pYyIpOwogCisJZ3Bpb19zZXRfdmFsdWUoUlg1MV9UVk9VVF9TRUxfR1BJTywKKwkJICAgICAgIHJ4NTFfamFja19mdW5jID09IFJYNTFfSkFDS19UVk9VVCk7CisKIAlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CiB9CiAKQEAgLTE2Miw2ICsxNzQsNDAgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCByeDUxX2dldF9qYWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gcng1MV9qYWNrX2Z1bmM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByeDUxX3NldF9qYWNrKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWlmIChyeDUxX2phY2tfZnVuYyA9PSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSkKKwkJcmV0dXJuIDA7CisKKwlyeDUxX2phY2tfZnVuYyA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOworCXJ4NTFfZXh0X2NvbnRyb2woY29kZWMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrIHJ4NTFfYXZfamFjazsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyByeDUxX2F2X2phY2tfZ3Bpb3NbXSA9IHsKKwl7CisJCS5ncGlvID0gUlg1MV9KQUNLX0RFVEVDVF9HUElPLAorCQkubmFtZSA9ICJhdmRldC1ncGlvIiwKKwkJLnJlcG9ydCA9IFNORF9KQUNLX1ZJREVPT1VULAorCQkuaW52ZXJ0ID0gMSwKKwkJLmRlYm91bmNlX3RpbWUgPSAyMDAsCisJfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBhaWMzNF9kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fU1BLKCJFeHQgU3BrIiwgcng1MV9zcGtfZXZlbnQpLAogCVNORF9TT0NfREFQTV9NSUMoIkRNaWMiLCBOVUxMKSwKQEAgLTE3NywxMCArMjIzLDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpzcGtfZnVuY3Rpb25bXSA9IHsiT2ZmIiwgIk9uIn07CiBzdGF0aWMgY29uc3QgY2hhciAqaW5wdXRfZnVuY3Rpb25bXSA9IHsiQURDIiwgIkRpZ2l0YWwgTWljIn07CitzdGF0aWMgY29uc3QgY2hhciAqamFja19mdW5jdGlvbltdID0geyJPZmYiLCAiVFYtT1VUIn07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gcng1MV9lbnVtW10gPSB7CiAJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKHNwa19mdW5jdGlvbiksIHNwa19mdW5jdGlvbiksCiAJU09DX0VOVU1fU0lOR0xFX0VYVChBUlJBWV9TSVpFKGlucHV0X2Z1bmN0aW9uKSwgaW5wdXRfZnVuY3Rpb24pLAorCVNPQ19FTlVNX1NJTkdMRV9FWFQoQVJSQVlfU0laRShqYWNrX2Z1bmN0aW9uKSwgamFja19mdW5jdGlvbiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljMzRfcng1MV9jb250cm9sc1tdID0gewpAQCAtMTg4LDEwICsyMzYsMTMgQEAKIAkJICAgICByeDUxX2dldF9zcGssIHJ4NTFfc2V0X3NwayksCiAJU09DX0VOVU1fRVhUKCJJbnB1dCBTZWxlY3QiLCAgcng1MV9lbnVtWzFdLAogCQkgICAgIHJ4NTFfZ2V0X2lucHV0LCByeDUxX3NldF9pbnB1dCksCisJU09DX0VOVU1fRVhUKCJKYWNrIEZ1bmN0aW9uIiwgcng1MV9lbnVtWzJdLAorCQkgICAgIHJ4NTFfZ2V0X2phY2ssIHJ4NTFfc2V0X2phY2spLAogfTsKIAogc3RhdGljIGludCByeDUxX2FpYzM0X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogeworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBjb2RlYy0+c29jZGV2LT5jYXJkOwogCWludCBlcnI7CiAKIAkvKiBTZXQgdXAgTkMgY29kZWMgcGlucyAqLwpAQCAtMjE0LDcgKzI2NSwxNiBAQAogCiAJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOwogCi0JcmV0dXJuIDA7CisJLyogQVYgamFjayBkZXRlY3Rpb24gKi8KKwllcnIgPSBzbmRfc29jX2phY2tfbmV3KGNhcmQsICJBViBKYWNrIiwKKwkJCSAgICAgICBTTkRfSkFDS19WSURFT09VVCwgJnJ4NTFfYXZfamFjayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwllcnIgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZyeDUxX2F2X2phY2ssCisJCQkJICAgICBBUlJBWV9TSVpFKHJ4NTFfYXZfamFja19ncGlvcyksCisJCQkJICAgICByeDUxX2F2X2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIGVycjsKIH0KIAogLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCkBAIC0yNTksNiArMzE5LDExIEBACiAJaWYgKCFtYWNoaW5lX2lzX25va2lhX3J4NTEoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwllcnIgPSBncGlvX3JlcXVlc3QoUlg1MV9UVk9VVF9TRUxfR1BJTywgInR2b3V0X3NlbCIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2dwaW9fdHZvdXRfc2VsOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChSWDUxX1RWT1VUX1NFTF9HUElPLCAwKTsKKwogCXJ4NTFfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghcng1MV9zbmRfZGV2aWNlKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0yNzcsMTMgKzM0MiwxOSBAQAogZXJyMjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHJ4NTFfc25kX2RldmljZSk7CiBlcnIxOgorCWdwaW9fZnJlZShSWDUxX1RWT1VUX1NFTF9HUElPKTsKK2Vycl9ncGlvX3R2b3V0X3NlbDoKIAogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByeDUxX3NvY19leGl0KHZvaWQpCiB7CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJnJ4NTFfYXZfamFjaywgQVJSQVlfU0laRShyeDUxX2F2X2phY2tfZ3Bpb3MpLAorCQkJCXJ4NTFfYXZfamFja19ncGlvcyk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihyeDUxX3NuZF9kZXZpY2UpOworCWdwaW9fZnJlZShSWDUxX1RWT1VUX1NFTF9HUElPKTsKIH0KIAogbW9kdWxlX2luaXQocng1MV9zb2NfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnIGIvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZwppbmRleCAyYTdjYzIyLi4yMTM5NjNhYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFNORF9TM0MyNFhYX1NPQwogCXRyaXN0YXRlICJTb0MgQXVkaW8gZm9yIHRoZSBTYW1zdW5nIFMzQ1hYWFggY2hpcHMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYIHx8IEFSQ0hfUzVQQzEwMCB8fCBBUkNIX1M1UFYyMTAKIAlzZWxlY3QgUzNDNjRYWF9ETUEgaWYgQVJDSF9TM0M2NFhYCiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvCkBAIC0xMjAsOCArMTIwLDE0IEBACiAKIGNvbmZpZyBTTkRfU09DX1NNREtfV005NzEzCiAJdHJpc3RhdGUgIlNvQyBBQzk3IEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsgd2l0aCBXTTk3MTMiCi0JZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9TTURLNjQxMAorCWRlcGVuZHMgb24gU05EX1MzQzI0WFhfU09DICYmIChNQUNIX1NNREs2NDEwIHx8IE1BQ0hfU01ES0MxMDAgfHwgTUFDSF9TTURLVjIxMCB8fCBNQUNIX1NNREtDMTEwKQogCXNlbGVjdCBTTkRfU09DX1dNOTcxMwogCXNlbGVjdCBTTkRfUzNDX1NPQ19BQzk3CiAJaGVscAogCSAgU2F0IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUgU01ESy4KKworY29uZmlnIFNORF9TM0M2NFhYX1NPQ19TTUFSVFEKKwl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBTbWFydFEgYm9hcmQiCisJZGVwZW5kcyBvbiBTTkRfUzNDMjRYWF9TT0MgJiYgTUFDSF9TTUFSVFEKKwlzZWxlY3QgU05EX1MzQzY0WFhfU09DX0kyUworCXNlbGVjdCBTTkRfU09DX1dNODc1MApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvTWFrZWZpbGUgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQppbmRleCA4MWQ4ZGM1Li41MDE3MmMzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvczNjMjR4eC9NYWtlZmlsZQpAQCAtMjksNiArMjksNyBAQAogc25kLXNvYy1zM2MyNHh4LXNpbXRlYy10bHYzMjBhaWMyMy1vYmpzIDo9IHMzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLm8KIHNuZC1zb2Mtc21kazY0eHgtd204NTgwLW9ianMgOj0gc21kazY0eHhfd204NTgwLm8KIHNuZC1zb2Mtc21kay13bTk3MTMtb2JqcyA6PSBzbWRrX3dtOTcxMy5vCitzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny1vYmpzIDo9IHNtYXJ0cV93bTg5ODcubwogCiBvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DX0pJVkVfV004NzUwKSArPSBzbmQtc29jLWppdmUtd204NzUwLm8KIG9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0NfTkVPMTk3M19XTTg3NTMpICs9IHNuZC1zb2MtbmVvMTk3My13bTg3NTMubwpAQCAtNDEsMyArNDIsNCBAQAogb2JqLSQoQ09ORklHX1NORF9TM0MyNFhYX1NPQ19TSU1URUNfVExWMzIwQUlDMjMpICs9IHNuZC1zb2MtczNjMjR4eC1zaW10ZWMtdGx2MzIwYWljMjMubwogb2JqLSQoQ09ORklHX1NORF9TM0M2NFhYX1NPQ19XTTg1ODApICs9IHNuZC1zb2Mtc21kazY0eHgtd204NTgwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KK29iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfU01BUlRRKSArPSBzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jIGIvc291bmQvc29jL3MzYzI0eHgvczNjLWFjOTcuYwppbmRleCBlY2Y0ZmQwLi4zMWY2ZDQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1hYzk3LmMKQEAgLTMxLDcgKzMxLDYgQEAKICNkZWZpbmUgQUNfQ01EX0RBVEEoeCkgKHggJiAweGZmZmYpCiAKIHN0cnVjdCBzM2NfYWM5N19pbmZvIHsKLQl1bnNpZ25lZCAgICAgICAgICAgc3RhdGU7CiAJc3RydWN0IGNsayAgICAgICAgICphYzk3X2NsazsKIAl2b2lkIF9faW9tZW0JICAgKnJlZ3M7CiAJc3RydWN0IG11dGV4ICAgICAgIGxvY2s7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MtaTJzLXYyLmMKaW5kZXggMTMzMTFjOC4uNjQzNzZiMiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjLWkycy12Mi5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYy1pMnMtdjIuYwpAQCAtMzIsNyArMzIsOCBAQAogCiAjdW5kZWYgUzNDX0lJU19WMl9TVVBQT1JURUQKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDEyKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMykKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0MTMpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19DUFVfUzVQVjIxMCkKICNkZWZpbmUgUzNDX0lJU19WMl9TVVBQT1JURUQKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zbWFydHFfd204OTg3LmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zbWFydHFfd204OTg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MDM0OAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtYXJ0cV93bTg5ODcuYwpAQCAtMCwwICsxLDI5NSBAQAorLyogc291bmQvc29jL3MzYzI0eHgvc21hcnRxX3dtODk4Ny5jCisgKgorICogQ29weXJpZ2h0IDIwMTAgTWF1cnVzIEN1ZWxlbmFlcmUgPG1jdWVsZW5hZXJlQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBzbWRrNjQxMF93bTg5ODcuYworICogICAgIENvcHlyaWdodCAyMDA3IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuIC0gbGludXhAd29sZnNvbm1pY3JvLmNvbQorICogICAgIEdyYWVtZSBHcmVnb3J5IC0gZ3JhZW1lLmdyZWdvcnlAd29sZnNvbm1pY3JvLmNvbQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgInMzYy1kbWEuaCIKKyNpbmNsdWRlICJzM2M2NHh4LWkycy5oIgorCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgorCisvKgorICogV004OTg3IGlzIHJlZ2lzdGVyIGNvbXBhdGlibGUgd2l0aCBXTTg3NTAsIHNvIHVzaW5nIHRoYXQgYXMgYmFzZSBkcml2ZXIuCisgKi8KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19zbWFydHE7CisKK3N0YXRpYyBpbnQgc21hcnRxX2hpZmlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+ZGFpLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CisJc3RydWN0IHMzY19pMnN2Ml9yYXRlX2NhbGMgZGl2OworCXVuc2lnbmVkIGludCBjbGsgPSAwOworCWludCByZXQ7CisKKwlzM2NfaTJzdjJfaWlzX2NhbGNfcmF0ZSgmZGl2LCBOVUxMLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAorCQkJCXMzY19pMnN2Ml9nZXRfY2xvY2soY3B1X2RhaSkpOworCisJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CisJY2FzZSA4MDAwOgorCWNhc2UgMTYwMDA6CisJY2FzZSAzMjAwMDoKKwljYXNlIDQ4MDAwOgorCWNhc2UgOTYwMDA6CisJCWNsayA9IDEyMjg4MDAwOworCQlicmVhazsKKwljYXNlIDExMDI1OgorCWNhc2UgMjIwNTA6CisJY2FzZSA0NDEwMDoKKwljYXNlIDg4MjAwOgorCQljbGsgPSAxMTI4OTYwMDsKKwkJYnJlYWs7CisJfQorCisJLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJCSAgICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCQkgICAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKKwkJCQkJICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCQkgICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3NTBfU1lTQ0xLLCBjbGssCisJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBNQ0xLIGRpdmlzaW9uIGZvciBzYW1wbGUgcmF0ZSAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUzNDX0kyU1YyX0RJVl9SQ0xLLCBkaXYuZnNfZGl2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCBwcmVzY2FsZXIgZGl2aXNpb24gZm9yIHNhbXBsZSByYXRlICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBTM0NfSTJTVjJfRElWX1BSRVNDQUxFUiwKKwkJCQkgICAgIGRpdi5jbGtfZGl2IC0gMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNtYXJ0USBXTTg5ODcgSGlGaSBEQUkgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBzbWFydHFfaGlmaV9vcHMgPSB7CisJLmh3X3BhcmFtcyA9IHNtYXJ0cV9oaWZpX2h3X3BhcmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrIHNtYXJ0cV9qYWNrOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gc21hcnRxX2phY2tfcGluc1tdID0geworCS8qIERpc2FibGUgc3BlYWtlciB3aGVuIGhlYWRwaG9uZSBpcyBwbHVnZ2VkIGluICovCisJeworCQkucGluCT0gIkludGVybmFsIFNwZWFrZXIiLAorCQkubWFzawk9IFNORF9KQUNLX0hFQURQSE9ORSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBzbWFydHFfamFja19ncGlvc1tdID0geworCXsKKwkJLmdwaW8JCT0gUzNDNjRYWF9HUEwoMTIpLAorCQkubmFtZQkJPSAiaGVhZHBob25lIGRldGVjdCIsCisJCS5yZXBvcnQJCT0gU05EX0pBQ0tfSEVBRFBIT05FLAorCQkuZGVib3VuY2VfdGltZQk9IDIwMCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHdtODk4N19zbWFydHFfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJJbnRlcm5hbCBTcGVha2VyIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSGVhZHBob25lIEphY2siKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJJbnRlcm5hbCBNaWMiKSwKK307CisKK3N0YXRpYyBpbnQgc21hcnRxX3NwZWFrZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqaywKKwkJCQlpbnQgZXZlbnQpCit7CisJZ3Bpb19zZXRfdmFsdWUoUzNDNjRYWF9HUEsoMTIpLCBTTkRfU09DX0RBUE1fRVZFTlRfT0ZGKGV2ZW50KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk4N19kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJJbnRlcm5hbCBTcGVha2VyIiwgc21hcnRxX3NwZWFrZXJfZXZlbnQpLAorCVNORF9TT0NfREFQTV9IUCgiSGVhZHBob25lIEphY2siLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJJbnRlcm5hbCBNaWMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiTE9VVDIifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIlJPVVQyIn0sCisKKwl7IkludGVybmFsIFNwZWFrZXIiLCBOVUxMLCAiTE9VVDIifSwKKwl7IkludGVybmFsIFNwZWFrZXIiLCBOVUxMLCAiUk9VVDIifSwKKworCXsiTWljIEJpYXMiLCBOVUxMLCAiSW50ZXJuYWwgTWljIn0sCisJeyJMSU5QVVQyIiwgTlVMTCwgIk1pYyBCaWFzIn0sCit9OworCitzdGF0aWMgaW50IHNtYXJ0cV93bTg5ODdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBBZGQgU21hcnRRIHNwZWNpZmljIHdpZGdldHMgKi8KKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCB3bTg5ODdfZGFwbV93aWRnZXRzLAorCQkJCSAgQVJSQVlfU0laRSh3bTg5ODdfZGFwbV93aWRnZXRzKSk7CisKKwkvKiBhZGQgU21hcnRRIHNwZWNpZmljIGNvbnRyb2xzICovCisJZXJyID0gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIHdtODk4N19zbWFydHFfY29udHJvbHMsCisJCQkJICAgQVJSQVlfU0laRSh3bTg5ODdfc21hcnRxX2NvbnRyb2xzKSk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIHNldHVwIFNtYXJ0USBzcGVjaWZpYyBhdWRpbyBwYXRoICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCS8qIHNldCBlbmRwb2ludHMgdG8gbm90IGNvbm5lY3RlZCAqLworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5QVVQxIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJJTlBVVDEiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiT1VUMyIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJST1VUMSIpOworCisJLyogc2V0IGVuZHBvaW50cyB0byBkZWZhdWx0IG9mZiBtb2RlICovCisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJJbnRlcm5hbCBTcGVha2VyIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJJbnRlcm5hbCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkcGhvbmUgSmFjayIpOworCisJZXJyID0gc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBIZWFkcGhvbmUgamFjayBkZXRlY3Rpb24gKi8KKwllcnIgPSBzbmRfc29jX2phY2tfbmV3KCZzbmRfc29jX3NtYXJ0cSwgIkhlYWRwaG9uZSBKYWNrIiwKKwkJCSAgICAgICBTTkRfSkFDS19IRUFEUEhPTkUsICZzbWFydHFfamFjayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNuZF9zb2NfamFja19hZGRfcGlucygmc21hcnRxX2phY2ssIEFSUkFZX1NJWkUoc21hcnRxX2phY2tfcGlucyksCisJCQkJICAgIHNtYXJ0cV9qYWNrX3BpbnMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZzbWFydHFfamFjaywKKwkJCQkgICAgIEFSUkFZX1NJWkUoc21hcnRxX2phY2tfZ3Bpb3MpLAorCQkJCSAgICAgc21hcnRxX2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNtYXJ0cV9kYWlbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ3bTg5ODciLAorCQkuc3RyZWFtX25hbWUJPSAiU21hcnRRIEhpLUZpIiwKKwkJLmNwdV9kYWkJPSAmczNjNjR4eF9pMnNfZGFpWzBdLAorCQkuY29kZWNfZGFpCT0gJndtODc1MF9kYWksCisJCS5pbml0CQk9IHNtYXJ0cV93bTg5ODdfaW5pdCwKKwkJLm9wcwkJPSAmc21hcnRxX2hpZmlfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX3NtYXJ0cSA9IHsKKwkubmFtZSA9ICJTbWFydFEiLAorCS5wbGF0Zm9ybSA9ICZzM2MyNHh4X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsgPSBzbWFydHFfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKHNtYXJ0cV9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBzbWFydHFfc25kX2RldmRhdGEgPSB7CisJLmNhcmQgPSAmc25kX3NvY19zbWFydHEsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODc1MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWFydHFfc25kX2RldmljZTsKKworc3RhdGljIGludCBfX2luaXQgc21hcnRxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX3NtYXJ0cTcoKSAmJiAhbWFjaGluZV9pc19zbWFydHE1KCkpIHsKKwkJcHJfaW5mbygiT25seSBTbWFydFEgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgQVNvQyBkcml2ZXJcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzbWFydHFfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghc21hcnRxX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoc21hcnRxX3NuZF9kZXZpY2UsICZzbWFydHFfc25kX2RldmRhdGEpOworCXNtYXJ0cV9zbmRfZGV2ZGF0YS5kZXYgPSAmc21hcnRxX3NuZF9kZXZpY2UtPmRldjsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc21hcnRxX3NuZF9kZXZpY2UpOworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChzbWFydHFfc25kX2RldmljZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogSW5pdGlhbGlzZSBHUElPcyB1c2VkIGJ5IGFtcGxpZmllcnMgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEsoMTIpLCAiYW1wbGlmaWVycyBzaHV0ZG93biIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc21hcnRxX3NuZF9kZXZpY2UtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBHUEsxMlxuIik7CisJCWdvdG8gZXJyX3VucmVnaXN0ZXJfZGV2aWNlOworCX0KKworCS8qIERpc2FibGUgYW1wbGlmaWVycyAqLworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQSygxMiksIDEpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc21hcnRxX3NuZF9kZXZpY2UtPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgR1BLMTJcbiIpOworCQlnb3RvIGVycl9mcmVlX2dwaW9fYW1wX3NodXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2dwaW9fYW1wX3NodXQ6CisJZ3Bpb19mcmVlKFMzQzY0WFhfR1BLKDEyKSk7CitlcnJfdW5yZWdpc3Rlcl9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc21hcnRxX3NuZF9kZXZpY2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtYXJ0cV9leGl0KHZvaWQpCit7CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJnNtYXJ0cV9qYWNrLCBBUlJBWV9TSVpFKHNtYXJ0cV9qYWNrX2dwaW9zKSwKKwkJCQlzbWFydHFfamFja19ncGlvcyk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzbWFydHFfc25kX2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHNtYXJ0cV9pbml0KTsKK21vZHVsZV9leGl0KHNtYXJ0cV9leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJNYXVydXMgQ3VlbGVuYWVyZSA8bWN1ZWxlbmFlcmVAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTFNBIFNvQyBTbWFydFEgV004OTg3Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jIGIvc291bmQvc29jL3MzYzI0eHgvc21ka193bTk3MTMuYwppbmRleCAyNGZkMzlmLi41NTI3YjllIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczNjMjR4eC9zbWRrX3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3NtZGtfd205NzEzLmMKQEAgLTI1LDYgKzI1LDkgQEAKICAqIERlZmF1bHQgQ0ZHIHN3aXRjaCBzZXR0aW5ncyB0byB1c2UgdGhpcyBkcml2ZXI6CiAgKgogICogICBTTURLNjQxMDogU2V0IENGRzEgMS0zIE9uLCBDRkcyIDEtNCBPZmYKKyAqICAgU01ES0MxMDA6IFNldCBDRkc2IDEtMyBPbiwgQ0ZHNyAxICAgT24KKyAqICAgU01ES0MxMTA6IFNldCBDRkdCMTAgMS0yIE9mZiwgQ0ZHQjEyIDEtMyBPbgorICogICBTTURLVjIxMDogU2V0IENGR0IxMCAxLTIgT2ZmLCBDRkdCMTIgMS0zIE9uCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYyBiL3NvdW5kL3NvYy9zNjAwMC9zNjAwMC1pMnMuYwppbmRleCA1YjlhYzE3Li41OWUzZmE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvczYwMDAvczYwMDAtaTJzLmMKKysrIGIvc291bmQvc29jL3M2MDAwL3M2MDAwLWkycy5jCkBAIC00NTEsMTYgKzQ1MSwxNSBAQAogCQlnb3RvIGVycl9yZWxlYXNlX25vbmU7CiAJfQogCi0JcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHNjYm1lbS0+c3RhcnQsCi0JCQkJICAgIHNjYm1lbS0+ZW5kIC0gc2NibWVtLT5zdGFydCArIDEsCi0JCQkJICAgIHBkZXYtPm5hbWUpOworCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihzY2JtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNjYm1lbSksCisJCQkJCQkJCXBkZXYtPm5hbWUpOwogCWlmICghcmVnaW9uKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkyUyBTQ0IgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBlcnJfcmVsZWFzZV9ub25lOwogCX0KIAotCW1taW8gPSBpb3JlbWFwKHNjYm1lbS0+c3RhcnQsIHNjYm1lbS0+ZW5kIC0gc2NibWVtLT5zdGFydCArIDEpOworCW1taW8gPSBpb3JlbWFwKHNjYm1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUoc2NibWVtKSk7CiAJaWYgKCFtbWlvKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGlvcmVtYXAgU0NCIHJlZ2lvblxuIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC00NzQsOSArNDczLDggQEAKIAkJZ290byBlcnJfcmVsZWFzZV9tYXA7CiAJfQogCi0JcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKHNpZm1lbS0+c3RhcnQsCi0JCQkJICAgIHNpZm1lbS0+ZW5kIC0gc2lmbWVtLT5zdGFydCArIDEsCi0JCQkJICAgIHBkZXYtPm5hbWUpOworCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihzaWZtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNpZm1lbSksCisJCQkJCQkJCXBkZXYtPm5hbWUpOwogCWlmICghcmVnaW9uKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkyUyBTSUYgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTQ5MCw4ICs0ODgsOCBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3NpZjsKIAl9CiAKLQlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oZG1hMS0+c3RhcnQsIGRtYTEtPmVuZCAtIGRtYTEtPnN0YXJ0ICsgMSwKLQkJCQkgICAgcGRldi0+bmFtZSk7CisJcmVnaW9uID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRtYTEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGRtYTEpLAorCQkJCQkJCQlwZGV2LT5uYW1lKTsKIAlpZiAoIXJlZ2lvbikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJMlMgRE1BIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOwogCQlyZXQgPSAtRUJVU1k7CkBAIC01MDAsOSArNDk4LDggQEAKIAogCWRtYTIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmIChkbWEyKSB7Ci0JCXJlZ2lvbiA9IHJlcXVlc3RfbWVtX3JlZ2lvbihkbWEyLT5zdGFydCwKLQkJCQkJICAgIGRtYTItPmVuZCAtIGRtYTItPnN0YXJ0ICsgMSwKLQkJCQkJICAgIHBkZXYtPm5hbWUpOworCQlyZWdpb24gPSByZXF1ZXN0X21lbV9yZWdpb24oZG1hMi0+c3RhcnQsIHJlc291cmNlX3NpemUoZG1hMiksCisJCQkJCQkJCXBkZXYtPm5hbWUpOwogCQlpZiAoIXJlZ2lvbikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJCSJJMlMgRE1BIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOwpAQCAtNTYxLDE1ICs1NTgsMTUgQEAKIAlrZnJlZShkZXYpOwogZXJyX3JlbGVhc2VfZG1hMjoKIAlpZiAoZG1hMikKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYTItPnN0YXJ0LCBkbWEyLT5lbmQgLSBkbWEyLT5zdGFydCArIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24oZG1hMi0+c3RhcnQsIHJlc291cmNlX3NpemUoZG1hMikpOwogZXJyX3JlbGVhc2VfZG1hMToKLQlyZWxlYXNlX21lbV9yZWdpb24oZG1hMS0+c3RhcnQsIGRtYTEtPmVuZCAtIGRtYTEtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYTEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGRtYTEpKTsKIGVycl9yZWxlYXNlX3NpZjoKLQlyZWxlYXNlX21lbV9yZWdpb24oc2lmbWVtLT5zdGFydCwgKHNpZm1lbS0+ZW5kIC0gc2lmbWVtLT5zdGFydCkgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oc2lmbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzaWZtZW0pKTsKIGVycl9yZWxlYXNlX21hcDoKIAlpb3VubWFwKG1taW8pOwogZXJyX3JlbGVhc2Vfc2NiOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihzY2JtZW0tPnN0YXJ0LCAoc2NibWVtLT5lbmQgLSBzY2JtZW0tPnN0YXJ0KSArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihzY2JtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKHNjYm1lbSkpOwogZXJyX3JlbGVhc2Vfbm9uZToKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTkwLDE5ICs1ODcsMTggQEAKIAlrZnJlZShkZXYpOwogCiAJcmVnaW9uID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfRE1BLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVnaW9uLT5zdGFydCwgcmVnaW9uLT5lbmQgLSByZWdpb24tPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIHJlc291cmNlX3NpemUocmVnaW9uKSk7CiAKIAlyZWdpb24gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmIChyZWdpb24pCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyZWdpb24tPnN0YXJ0LAotCQkJCSAgIHJlZ2lvbi0+ZW5kIC0gcmVnaW9uLT5zdGFydCArIDEpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVnaW9uLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdpb24pKTsKIAogCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIChyZWdpb24tPmVuZCAtIHJlZ2lvbi0+c3RhcnQpICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlZ2lvbi0+c3RhcnQsIHJlc291cmNlX3NpemUocmVnaW9uKSk7CiAKIAlpb3VubWFwKG1taW8pOwogCXJlZ2lvbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVnaW9uLT5zdGFydCwgKHJlZ2lvbi0+ZW5kIC0gcmVnaW9uLT5zdGFydCkgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVnaW9uLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdpb24pKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczYwMDBfaTJzX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9LY29uZmlnIGIvc291bmQvc29jL3NoL0tjb25maWcKaW5kZXggYTFkMTRiYy4uNTJkN2U4ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL0tjb25maWcKKysrIGIvc291bmQvc29jL3NoL0tjb25maWcKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogY29uZmlnIFNORF9GU0lfQUs0NjQyCiAJYm9vbCAiRlNJLUFLNDY0MiBzb3VuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU05EX1NPQ19TSDRfRlNJCisJZGVwZW5kcyBvbiBTTkRfU09DX1NINF9GU0kgJiYgSTJDX1NIX01PQklMRQogCXNlbGVjdCBTTkRfU09DX0FLNDY0MgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKQEAgLTU2LDcgKzU2LDcgQEAKIAogY29uZmlnIFNORF9GU0lfREE3MjEwCiAJYm9vbCAiRlNJLURBNzIxMCBzb3VuZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gU05EX1NPQ19TSDRfRlNJCisJZGVwZW5kcyBvbiBTTkRfU09DX1NINF9GU0kgJiYgSTJDX1NIX01PQklMRQogCXNlbGVjdCBTTkRfU09DX0RBNzIxMAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZ2VuZXJpYyBzb3VuZCBzdXBwb3J0IGZvciB0aGUKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLWFrNDY0Mi5jCmluZGV4IGJlMDE4NTQuLmRhZDU3NWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2ktYWs0NjQyLmMKKysrIGIvc291bmQvc29jL3NoL2ZzaS1hazQ2NDIuYwpAQCAtOSwxNiArOSw3IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+Ci0KICNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KICNpbmNsdWRlIDwuLi9zb3VuZC9zb2MvY29kZWNzL2FrNDY0Mi5oPgogCkBAIC0zOCw3ICsyOSw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZnNpX2RhaV9saW5rID0gewogCS5uYW1lCQk9ICJBSzQ2NDIiLAogCS5zdHJlYW1fbmFtZQk9ICJBSzQ2NDIiLAotCS5jcHVfZGFpCT0gJmZzaV9zb2NfZGFpWzBdLCAvKiBmc2kgKi8KKwkuY3B1X2RhaQk9ICZmc2lfc29jX2RhaVtGU0lfUE9SVF9BXSwKIAkuY29kZWNfZGFpCT0gJmFrNDY0Ml9kYWksCiAJLmluaXQJCT0gZnNpX2FrNDY0Ml9kYWlfaW5pdCwKIAkub3BzCQk9IE5VTEwsCkBAIC02Miw3ICs1Myw3IEBACiB7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKLQlmc2lfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWZzaV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCBGU0lfUE9SVF9BKTsKIAlpZiAoIWZzaV9zbmRfZGV2aWNlKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYyBiL3NvdW5kL3NvYy9zaC9mc2ktZGE3MjEwLmMKaW5kZXggMzNiNGQxNy4uMTIxYmJiMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS1kYTcyMTAuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLWRhNzIxMC5jCkBAIC0xMCwxNiArMTAsNyBAQAogICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgotCiAjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CiAjaW5jbHVkZSAiLi4vY29kZWNzL2RhNzIxMC5oIgogCkBAIC0zMyw3ICsyNCw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZnNpX2RhNzIxMF9kYWkgPSB7CiAJLm5hbWUJCT0gIkRBNzIxMCIsCiAJLnN0cmVhbV9uYW1lCT0gIkRBNzIxMCIsCi0JLmNwdV9kYWkJPSAmZnNpX3NvY19kYWlbMV0sIC8qIEZTSSBCICovCisJLmNwdV9kYWkJPSAmZnNpX3NvY19kYWlbRlNJX1BPUlRfQl0sCiAJLmNvZGVjX2RhaQk9ICZkYTcyMTBfZGFpLAogCS5pbml0CQk9IGZzaV9kYTcyMTBfaW5pdCwKIH07CkBAIC01Niw3ICs0Nyw3IEBACiB7CiAJaW50IHJldDsKIAotCWZzaV9kYTcyMTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWZzaV9kYTcyMTBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgRlNJX1BPUlRfQik7CiAJaWYgKCFmc2lfZGE3MjEwX3NuZF9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggZWM0YWNhYy4uNThjNmJlYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtMTIsMjEgKzEyLDEyIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zaF9mc2kuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNkZWZpbmUgRE9fRk1UCQkweDAwMDAKICNkZWZpbmUgRE9GRl9DVEwJMHgwMDA0CkBAIC0zOSw5ICszMCwxMSBAQAogI2RlZmluZSBESURUCQkweDAwMjAKICNkZWZpbmUgRE9EVAkJMHgwMDI0CiAjZGVmaW5lIE1VVEVfU1QJCTB4MDAyOAotI2RlZmluZSBSRUdfRU5ECQlNVVRFX1NUCisjZGVmaW5lIE9VVF9TRUwJCTB4MDAzMAorI2RlZmluZSBSRUdfRU5ECQlPVVRfU0VMCiAKLQorI2RlZmluZSBBX01TVF9DVExSCTB4MDE4MAorI2RlZmluZSBCX01TVF9DVExSCTB4MDFBMAogI2RlZmluZSBDUFVfSU5UX1NUCTB4MDFGNAogI2RlZmluZSBDUFVfSUVNU0sJMHgwMUY4CiAjZGVmaW5lIENQVV9JTVNLCTB4MDFGQwpAQCAtNTIsMTggKzQ1LDE4IEBACiAjZGVmaW5lIENMS19SU1QJCTB4MDIxMAogI2RlZmluZSBTT0ZUX1JTVAkweDAyMTQKICNkZWZpbmUgRklGT19TWgkJMHgwMjE4Ci0jZGVmaW5lIE1SRUdfU1RBUlQJQ1BVX0lOVF9TVAorI2RlZmluZSBNUkVHX1NUQVJUCUFfTVNUX0NUTFIKICNkZWZpbmUgTVJFR19FTkQJRklGT19TWgogCiAvKiBET19GTVQgKi8KIC8qIERJX0ZNVCAqLwotI2RlZmluZSBDUl9GTVQocGFyYW0pICgocGFyYW0pIDw8IDQpCi0jIGRlZmluZSBDUl9NT05PCTB4MAotIyBkZWZpbmUgQ1JfTU9OT19ECTB4MQotIyBkZWZpbmUgQ1JfUENNCQkweDIKLSMgZGVmaW5lIENSX0kyUwkJMHgzCi0jIGRlZmluZSBDUl9URE0JCTB4NAotIyBkZWZpbmUgQ1JfVERNX0QJMHg1CisjZGVmaW5lIENSX01PTk8JCSgweDAgPDwgNCkKKyNkZWZpbmUgQ1JfTU9OT19ECSgweDEgPDwgNCkKKyNkZWZpbmUgQ1JfUENNCQkoMHgyIDw8IDQpCisjZGVmaW5lIENSX0kyUwkJKDB4MyA8PCA0KQorI2RlZmluZSBDUl9URE0JCSgweDQgPDwgNCkKKyNkZWZpbmUgQ1JfVERNX0QJKDB4NSA8PCA0KQorI2RlZmluZSBDUl9TUERJRgkweDAwMTAwMTIwCiAKIC8qIERPRkZfQ1RMICovCiAvKiBESUZGX0NUTCAqLwpAQCAtNzUsNiArNjgsMTQgQEAKICNkZWZpbmUgRVJSX1VOREVSCTB4MDAwMDAwMDEKICNkZWZpbmUgU1RfRVJSCQkoRVJSX09WRVIgfCBFUlJfVU5ERVIpCiAKKy8qIENLRzEgKi8KKyNkZWZpbmUgQUNLTURfTUFTSwkweDAwMDA3MDAwCisjZGVmaW5lIEJQRk1EX01BU0sJMHgwMDAwMDcwMAorCisvKiBBL0IgTVNUX0NUTFIgKi8KKyNkZWZpbmUgQlAJKDEgPDwgNCkJLyogRml4IHRoZSBzaWduYWwgb2YgQmlwaGFzZSBvdXRwdXQgKi8KKyNkZWZpbmUgU0UJKDEgPDwgMCkJLyogRml4IHRoZSBtYXN0ZXIgY2xvY2sgKi8KKwogLyogQ0xLX1JTVCAqLwogI2RlZmluZSBCX0NMSwkJMHgwMDAwMDAxMAogI2RlZmluZSBBX0NMSwkJMHgwMDAwMDAwMQpAQCAtMTE5LDkgKzEyMCwxMyBAQAogCWludCBwZXJpb2RfbGVuOwogCWludCBidWZmZXJfbGVuOwogCWludCBwZXJpb2RzOworCisJdTMyIG1zdF9jdHJsOwogfTsKIAotc3RydWN0IGZzaV9yZWdzIHsKK3N0cnVjdCBmc2lfY29yZSB7CisJaW50IHZlcjsKKwogCXUzMiBpbnRfc3Q7CiAJdTMyIGllbXNrOwogCXUzMiBpbXNrOwpAQCAtMTMyLDcgKzEzNyw3IEBACiAJaW50IGlycTsKIAlzdHJ1Y3QgZnNpX3ByaXYgZnNpYTsKIAlzdHJ1Y3QgZnNpX3ByaXYgZnNpYjsKLQlzdHJ1Y3QgZnNpX3JlZ3MgKnJlZ3M7CisJc3RydWN0IGZzaV9jb3JlICpjb3JlOwogCXN0cnVjdCBzaF9mc2lfcGxhdGZvcm1faW5mbyAqaW5mbzsKIAlzcGlubG9ja190IGxvY2s7CiB9OwpAQCAtMTY5LDI0ICsxNzQsMzAgQEAKIAogc3RhdGljIHZvaWQgZnNpX3JlZ193cml0ZShzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIGRhdGEpCiB7Ci0JaWYgKHJlZyA+IFJFR19FTkQpCisJaWYgKHJlZyA+IFJFR19FTkQpIHsKKwkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm47CisJfQogCiAJX19mc2lfcmVnX3dyaXRlKCh1MzIpKGZzaS0+YmFzZSArIHJlZyksIGRhdGEpOwogfQogCiBzdGF0aWMgdTMyIGZzaV9yZWdfcmVhZChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZykKIHsKLQlpZiAocmVnID4gUkVHX0VORCkKKwlpZiAocmVnID4gUkVHX0VORCkgeworCQlwcl9lcnIoImZzaTogcmVnaXN0ZXIgYWNjZXNzIGVyciAoJXMpXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOworCX0KIAogCXJldHVybiBfX2ZzaV9yZWdfcmVhZCgodTMyKShmc2ktPmJhc2UgKyByZWcpKTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX3JlZ19tYXNrX3NldChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiBkYXRhKQogewotCWlmIChyZWcgPiBSRUdfRU5EKQorCWlmIChyZWcgPiBSRUdfRU5EKSB7CisJCXByX2VycigiZnNpOiByZWdpc3RlciBhY2Nlc3MgZXJyICglcylcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOworCX0KIAogCV9fZnNpX3JlZ19tYXNrX3NldCgodTMyKShmc2ktPmJhc2UgKyByZWcpLCBtYXNrLCBkYXRhKTsKIH0KQEAgLTE5Niw4ICsyMDcsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAotCSAgICAocmVnID4gTVJFR19FTkQpKQorCSAgICAocmVnID4gTVJFR19FTkQpKSB7CisJCXByX2VycigiZnNpOiByZWdpc3RlciBhY2Nlc3MgZXJyICglcylcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIAlfX2ZzaV9yZWdfd3JpdGUoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgZGF0YSk7CkBAIC0yMTAsOCArMjIzLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgocmVnIDwgTVJFR19TVEFSVCkgfHwKLQkgICAgKHJlZyA+IE1SRUdfRU5EKSkKKwkgICAgKHJlZyA+IE1SRUdfRU5EKSkgeworCQlwcl9lcnIoImZzaTogcmVnaXN0ZXIgYWNjZXNzIGVyciAoJXMpXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIAlyZXQgPSBfX2ZzaV9yZWdfcmVhZCgodTMyKShtYXN0ZXItPmJhc2UgKyByZWcpKTsKQEAgLTIyNiw4ICsyNDEsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChyZWcgPCBNUkVHX1NUQVJUKSB8fAotCSAgICAocmVnID4gTVJFR19FTkQpKQorCSAgICAocmVnID4gTVJFR19FTkQpKSB7CisJCXByX2VycigiZnNpOiByZWdpc3RlciBhY2Nlc3MgZXJyICglcylcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYXN0ZXItPmxvY2ssIGZsYWdzKTsKIAlfX2ZzaV9yZWdfbWFza19zZXQoKHUzMikobWFzdGVyLT5iYXNlICsgcmVnKSwgbWFzaywgZGF0YSk7CkBAIC0zNDksOCArMzY2LDggQEAKIAl1MzIgZGF0YSA9IGZzaV9wb3J0X2FiX2lvX2JpdChmc2ksIGlzX3BsYXkpOwogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+cmVncy0+aW1zaywgIGRhdGEsIGRhdGEpOwotCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBtYXN0ZXItPnJlZ3MtPmllbXNrLCBkYXRhLCBkYXRhKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbXNrLCAgZGF0YSwgZGF0YSk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+Y29yZS0+aWVtc2ssIGRhdGEsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBmc2lfaXJxX2Rpc2FibGUoc3RydWN0IGZzaV9wcml2ICpmc2ksIGludCBpc19wbGF5KQpAQCAtMzU4LDE4ICszNzUsMTggQEAKIAl1MzIgZGF0YSA9IGZzaV9wb3J0X2FiX2lvX2JpdChmc2ksIGlzX3BsYXkpOwogCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCi0JZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+cmVncy0+aW1zaywgIGRhdGEsIDApOwotCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBtYXN0ZXItPnJlZ3MtPmllbXNrLCBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbXNrLCAgZGF0YSwgMCk7CisJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+Y29yZS0+aWVtc2ssIGRhdGEsIDApOwogfQogCiBzdGF0aWMgdTMyIGZzaV9pcnFfZ2V0X3N0YXR1cyhzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyKQogewotCXJldHVybiBmc2lfbWFzdGVyX3JlYWQobWFzdGVyLCBtYXN0ZXItPnJlZ3MtPmludF9zdCk7CisJcmV0dXJuIGZzaV9tYXN0ZXJfcmVhZChtYXN0ZXIsIG1hc3Rlci0+Y29yZS0+aW50X3N0KTsKIH0KIAogc3RhdGljIHZvaWQgZnNpX2lycV9jbGVhcl9hbGxfc3RhdHVzKHN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIpCiB7Ci0JZnNpX21hc3Rlcl93cml0ZShtYXN0ZXIsIG1hc3Rlci0+cmVncy0+aW50X3N0LCAweDAwMDAwMDApOworCWZzaV9tYXN0ZXJfd3JpdGUobWFzdGVyLCBtYXN0ZXItPmNvcmUtPmludF9zdCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZzaV9pcnFfY2xlYXJfc3RhdHVzKHN0cnVjdCBmc2lfcHJpdiAqZnNpKQpAQCAtMzgxLDcgKzM5OCwzMCBAQAogCWRhdGEgfD0gZnNpX3BvcnRfYWJfaW9fYml0KGZzaSwgMSk7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgZmFjdG9yICovCi0JZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIG1hc3Rlci0+cmVncy0+aW50X3N0LCBkYXRhLCAwKTsKKwlmc2lfbWFzdGVyX21hc2tfc2V0KG1hc3RlciwgbWFzdGVyLT5jb3JlLT5pbnRfc3QsIGRhdGEsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQlTUERJRiBtYXN0ZXIgY2xvY2sgZnVuY3Rpb24KKworVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGxhdGVyIEZTSTIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGZzaV9zcGRpZl9jbGtfY3RybChzdHJ1Y3QgZnNpX3ByaXYgKmZzaSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKKwl1MzIgdmFsID0gQlAgfCBTRTsKKworCWlmIChtYXN0ZXItPmNvcmUtPnZlciA8IDIpIHsKKwkJcHJfZXJyKCJmc2k6IHJlZ2lzdGVyIGFjY2VzcyBlcnIgKCVzKVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKGVuYWJsZSkKKwkJZnNpX21hc3Rlcl9tYXNrX3NldChtYXN0ZXIsIGZzaS0+bXN0X2N0cmwsIHZhbCwgdmFsKTsKKwllbHNlCisJCWZzaV9tYXN0ZXJfbWFza19zZXQobWFzdGVyLCBmc2ktPm1zdF9jdHJsLCB2YWwsIDApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NjIsOCArNzAyLDggQEAKIAkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBmc2lfcHJpdiAqZnNpID0gZnNpX2dldF9wcml2KHN1YnN0cmVhbSk7Ci0JY29uc3QgY2hhciAqbXNnOwogCXUzMiBmbGFncyA9IGZzaV9nZXRfaW5mb19mbGFncyhmc2kpOworCXN0cnVjdCBmc2lfbWFzdGVyICptYXN0ZXIgPSBmc2lfZ2V0X21hc3Rlcihmc2kpOwogCXUzMiBmbXQ7CiAJdTMyIHJlZzsKIAl1MzIgZGF0YTsKQEAgLTcwMCwzNiArNzQwLDQwIEBACiAJZm10ID0gaXNfcGxheSA/IFNIX0ZTSV9HRVRfT0ZNVChmbGFncykgOiBTSF9GU0lfR0VUX0lGTVQoZmxhZ3MpOwogCXN3aXRjaCAoZm10KSB7CiAJY2FzZSBTSF9GU0lfRk1UX01PTk86Ci0JCW1zZyA9ICJNT05PIjsKLQkJZGF0YSA9IENSX0ZNVChDUl9NT05PKTsKKwkJZGF0YSA9IENSX01PTk87CiAJCWZzaS0+Y2hhbiA9IDE7CiAJCWJyZWFrOwogCWNhc2UgU0hfRlNJX0ZNVF9NT05PX0RFTEFZOgotCQltc2cgPSAiTU9OTyBEZWxheSI7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfTU9OT19EKTsKKwkJZGF0YSA9IENSX01PTk9fRDsKIAkJZnNpLT5jaGFuID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTSF9GU0lfRk1UX1BDTToKLQkJbXNnID0gIlBDTSI7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfUENNKTsKKwkJZGF0YSA9IENSX1BDTTsKIAkJZnNpLT5jaGFuID0gMjsKIAkJYnJlYWs7CiAJY2FzZSBTSF9GU0lfRk1UX0kyUzoKLQkJbXNnID0gIkkyUyI7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfSTJTKTsKKwkJZGF0YSA9IENSX0kyUzsKIAkJZnNpLT5jaGFuID0gMjsKIAkJYnJlYWs7CiAJY2FzZSBTSF9GU0lfRk1UX1RETToKLQkJbXNnID0gIlRETSI7CiAJCWZzaS0+Y2hhbiA9IGlzX3BsYXkgPwogCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfVERNKSB8IChmc2ktPmNoYW4gLSAxKTsKKwkJZGF0YSA9IENSX1RETSB8IChmc2ktPmNoYW4gLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSBTSF9GU0lfRk1UX1RETV9ERUxBWToKLQkJbXNnID0gIlRETSBEZWxheSI7CiAJCWZzaS0+Y2hhbiA9IGlzX3BsYXkgPwogCQkJU0hfRlNJX0dFVF9DSF9PKGZsYWdzKSA6IFNIX0ZTSV9HRVRfQ0hfSShmbGFncyk7Ci0JCWRhdGEgPSBDUl9GTVQoQ1JfVERNX0QpIHwgKGZzaS0+Y2hhbiAtIDEpOworCQlkYXRhID0gQ1JfVERNX0QgfCAoZnNpLT5jaGFuIC0gMSk7CisJCWJyZWFrOworCWNhc2UgU0hfRlNJX0ZNVF9TUERJRjoKKwkJaWYgKG1hc3Rlci0+Y29yZS0+dmVyIDwgMikgeworCQkJZGV2X2VycihkYWktPmRldiwgIlRoaXMgRlNJIGNhbiBub3QgdXNlIFNQRElGXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRhdGEgPSBDUl9TUERJRjsKKwkJZnNpLT5jaGFuID0gMjsKKwkJZnNpX3NwZGlmX2Nsa19jdHJsKGZzaSwgMSk7CisJCWZzaV9yZWdfbWFza19zZXQoZnNpLCBPVVRfU0VMLCAweDAwMTAsIDB4MDAxMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZGFpLT5kZXYsICJ1bmtub3duIGZvcm1hdC5cbiIpOwpAQCAtNzM3LDEyICs3ODEsNiBAQAogCX0KIAlmc2lfcmVnX3dyaXRlKGZzaSwgcmVnLCBkYXRhKTsKIAotCS8qCi0JICogY2xlYXIgY2xrIHJlc2V0IGlmIG1hc3RlciBtb2RlCi0JICovCi0JaWYgKGlzX21hc3RlcikKLQkJZnNpX2Nsa19jdHJsKGZzaSwgMSk7Ci0KIAkvKiBpcnEgY2xlYXIgKi8KIAlmc2lfaXJxX2Rpc2FibGUoZnNpLCBpc19wbGF5KTsKIAlmc2lfaXJxX2NsZWFyX3N0YXR1cyhmc2kpOwpAQCAtNzg5LDEwICs4MjcsOTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGZzaV9kYWlfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJc3RydWN0IGZzaV9wcml2ICpmc2kgPSBmc2lfZ2V0X3ByaXYoc3Vic3RyZWFtKTsKKwlzdHJ1Y3QgZnNpX21hc3RlciAqbWFzdGVyID0gZnNpX2dldF9tYXN0ZXIoZnNpKTsKKwlpbnQgKCpzZXRfcmF0ZSkoaW50IGlzX3BvcnRhLCBpbnQgcmF0ZSkgPSBtYXN0ZXItPmluZm8tPnNldF9yYXRlOworCWludCBmc2lfdmVyID0gbWFzdGVyLT5jb3JlLT52ZXI7CisJaW50IGlzX3BsYXkgPSAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyk7CisJaW50IHJldDsKKworCS8qIGlmIHNsYXZlIG1vZGUsIHNldF9yYXRlIGlzIG5vdCBuZWVkZWQgKi8KKwlpZiAoIWZzaV9pc19tYXN0ZXJfbW9kZShmc2ksIGlzX3BsYXkpKQorCQlyZXR1cm4gMDsKKworCS8qIGl0IGlzIGVycm9yIGlmIG5vIHNldF9yYXRlICovCisJaWYgKCFzZXRfcmF0ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBzZXRfcmF0ZShmc2lfaXNfcG9ydF9hKGZzaSksIHBhcmFtc19yYXRlKHBhcmFtcykpOworCWlmIChyZXQgPiAwKSB7CisJCXUzMiBkYXRhID0gMDsKKworCQlzd2l0Y2ggKHJldCAmIFNIX0ZTSV9BQ0tNRF9NQVNLKSB7CisJCWRlZmF1bHQ6CisJCQkvKiBGQUxMIFRIUk9VR0ggKi8KKwkJY2FzZSBTSF9GU0lfQUNLTURfNTEyOgorCQkJZGF0YSB8PSAoMHgwIDw8IDEyKTsKKwkJCWJyZWFrOworCQljYXNlIFNIX0ZTSV9BQ0tNRF8yNTY6CisJCQlkYXRhIHw9ICgweDEgPDwgMTIpOworCQkJYnJlYWs7CisJCWNhc2UgU0hfRlNJX0FDS01EXzEyODoKKwkJCWRhdGEgfD0gKDB4MiA8PCAxMik7CisJCQlicmVhazsKKwkJY2FzZSBTSF9GU0lfQUNLTURfNjQ6CisJCQlkYXRhIHw9ICgweDMgPDwgMTIpOworCQkJYnJlYWs7CisJCWNhc2UgU0hfRlNJX0FDS01EXzMyOgorCQkJaWYgKGZzaV92ZXIgPCAyKQorCQkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bnN1cHBvcnRlZCBBQ0tNRFxuIik7CisJCQllbHNlCisJCQkJZGF0YSB8PSAoMHg0IDw8IDEyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChyZXQgJiBTSF9GU0lfQlBGTURfTUFTSykgeworCQlkZWZhdWx0OgorCQkJLyogRkFMTCBUSFJPVUdIICovCisJCWNhc2UgU0hfRlNJX0JQRk1EXzMyOgorCQkJZGF0YSB8PSAoMHgwIDw8IDgpOworCQkJYnJlYWs7CisJCWNhc2UgU0hfRlNJX0JQRk1EXzY0OgorCQkJZGF0YSB8PSAoMHgxIDw8IDgpOworCQkJYnJlYWs7CisJCWNhc2UgU0hfRlNJX0JQRk1EXzEyODoKKwkJCWRhdGEgfD0gKDB4MiA8PCA4KTsKKwkJCWJyZWFrOworCQljYXNlIFNIX0ZTSV9CUEZNRF8yNTY6CisJCQlkYXRhIHw9ICgweDMgPDwgOCk7CisJCQlicmVhazsKKwkJY2FzZSBTSF9GU0lfQlBGTURfNTEyOgorCQkJZGF0YSB8PSAoMHg0IDw8IDgpOworCQkJYnJlYWs7CisJCWNhc2UgU0hfRlNJX0JQRk1EXzE2OgorCQkJaWYgKGZzaV92ZXIgPCAyKQorCQkJCWRldl9lcnIoZGFpLT5kZXYsICJ1bnN1cHBvcnRlZCBBQ0tNRFxuIik7CisJCQllbHNlCisJCQkJZGF0YSB8PSAoMHg3IDw8IDgpOworCQkJYnJlYWs7CisJCX0KKworCQlmc2lfcmVnX21hc2tfc2V0KGZzaSwgQ0tHMSwgKEFDS01EX01BU0sgfCBCUEZNRF9NQVNLKSAsIGRhdGEpOworCQl1ZGVsYXkoMTApOworCQlmc2lfY2xrX2N0cmwoZnNpLCAxKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworCit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGZzaV9kYWlfb3BzID0gewogCS5zdGFydHVwCT0gZnNpX2RhaV9zdGFydHVwLAogCS5zaHV0ZG93bgk9IGZzaV9kYWlfc2h1dGRvd24sCiAJLnRyaWdnZXIJPSBmc2lfZGFpX3RyaWdnZXIsCisJLmh3X3BhcmFtcwk9IGZzaV9kYWlfaHdfcGFyYW1zLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTY1LDExICsxMDg2LDYgQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogCWludCByZXQ7CiAKLQlpZiAoMCAhPSBwZGV2LT5pZCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjdXJyZW50IGZzaSBzdXBwb3J0IGlkIDAgb25seSBub3dcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZF9lbnRyeSA9IHBkZXYtPmlkX2VudHJ5OwogCWlmICghaWRfZW50cnkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5rbm93biBmc2kgZGV2aWNlXG4iKTsKQEAgLTk5OCwxNCArMTExNCwyMSBAQAogCQlnb3RvIGV4aXRfa2ZyZWU7CiAJfQogCisJLyogbWFzdGVyIHNldHRpbmcgKi8KIAltYXN0ZXItPmlycQkJPSBpcnE7CiAJbWFzdGVyLT5pbmZvCQk9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCW1hc3Rlci0+Y29yZQkJPSAoc3RydWN0IGZzaV9jb3JlICopaWRfZW50cnktPmRyaXZlcl9kYXRhOworCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmxvY2spOworCisJLyogRlNJIEEgc2V0dGluZyAqLwogCW1hc3Rlci0+ZnNpYS5iYXNlCT0gbWFzdGVyLT5iYXNlOwogCW1hc3Rlci0+ZnNpYS5tYXN0ZXIJPSBtYXN0ZXI7CisJbWFzdGVyLT5mc2lhLm1zdF9jdHJsCT0gQV9NU1RfQ1RMUjsKKworCS8qIEZTSSBCIHNldHRpbmcgKi8KIAltYXN0ZXItPmZzaWIuYmFzZQk9IG1hc3Rlci0+YmFzZSArIDB4NDA7CiAJbWFzdGVyLT5mc2liLm1hc3Rlcgk9IG1hc3RlcjsKLQltYXN0ZXItPnJlZ3MJCT0gKHN0cnVjdCBmc2lfcmVncyAqKWlkX2VudHJ5LT5kcml2ZXJfZGF0YTsKLQlzcGluX2xvY2tfaW5pdCgmbWFzdGVyLT5sb2NrKTsKKwltYXN0ZXItPmZzaWIubXN0X2N0cmwJPSBCX01TVF9DVExSOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CkBAIC0xMDg1LDIxICsxMjA4LDI3IEBACiAJLnJ1bnRpbWVfcmVzdW1lCQk9IGZzaV9ydW50aW1lX25vcCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnNpX3JlZ3MgZnNpX3JlZ3MgPSB7CitzdGF0aWMgc3RydWN0IGZzaV9jb3JlIGZzaTFfY29yZSA9IHsKKwkudmVyCT0gMSwKKworCS8qIEludGVycnVwdCAqLwogCS5pbnRfc3QJPSBJTlRfU1QsCiAJLmllbXNrCT0gSUVNU0ssCiAJLmltc2sJPSBJTVNLLAogfTsKIAotc3RhdGljIHN0cnVjdCBmc2lfcmVncyBmc2kyX3JlZ3MgPSB7CitzdGF0aWMgc3RydWN0IGZzaV9jb3JlIGZzaTJfY29yZSA9IHsKKwkudmVyCT0gMiwKKworCS8qIEludGVycnVwdCAqLwogCS5pbnRfc3QJPSBDUFVfSU5UX1NULAogCS5pZW1zawk9IENQVV9JRU1TSywKIAkuaW1zawk9IENQVV9JTVNLLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgZnNpX2lkX3RhYmxlW10gPSB7Ci0JeyAic2hfZnNpIiwJKGtlcm5lbF91bG9uZ190KSZmc2lfcmVncyB9LAotCXsgInNoX2ZzaTIiLAkoa2VybmVsX3Vsb25nX3QpJmZzaTJfcmVncyB9LAorCXsgInNoX2ZzaSIsCShrZXJuZWxfdWxvbmdfdCkmZnNpMV9jb3JlIH0sCisJeyAic2hfZnNpMiIsCShrZXJuZWxfdWxvbmdfdCkmZnNpMl9jb3JlIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2lfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCBlMDQ4ZTA5Li44NDRhZTgyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtODQsNyArODQsNyBAQAogLyogY29kZWMgcmVnaXN0ZXIgZHVtcCAqLwogc3RhdGljIHNzaXplX3Qgc29jX2NvZGVjX3JlZ19zaG93KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqYnVmKQogewotCWludCBpLCBzdGVwID0gMSwgY291bnQgPSAwOworCWludCByZXQsIGksIHN0ZXAgPSAxLCBjb3VudCA9IDA7CiAKIAlpZiAoIWNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC0xMDEsMTIgKzEwMSwyNCBAQAogCQlpZiAoY291bnQgPj0gUEFHRV9TSVpFIC0gMSkKIAkJCWJyZWFrOwogCi0JCWlmIChjb2RlYy0+ZGlzcGxheV9yZWdpc3RlcikKKwkJaWYgKGNvZGVjLT5kaXNwbGF5X3JlZ2lzdGVyKSB7CiAJCQljb3VudCArPSBjb2RlYy0+ZGlzcGxheV9yZWdpc3Rlcihjb2RlYywgYnVmICsgY291bnQsCiAJCQkJCQkJIFBBR0VfU0laRSAtIGNvdW50LCBpKTsKLQkJZWxzZQotCQkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsIFBBR0VfU0laRSAtIGNvdW50LAotCQkJCQkgICIlNHgiLCBjb2RlYy0+cmVhZChjb2RlYywgaSkpOworCQl9IGVsc2UgeworCQkJLyogSWYgdGhlIHJlYWQgZmFpbHMgaXQncyBhbG1vc3QgY2VydGFpbmx5IGR1ZSB0bworCQkJICogdGhlIHJlZ2lzdGVyIGJlaW5nIHZvbGF0aWxlIGFuZCB0aGUgZGV2aWNlIGJlaW5nCisJCQkgKiBwb3dlcmVkIG9mZi4KKwkJCSAqLworCQkJcmV0ID0gY29kZWMtPnJlYWQoY29kZWMsIGkpOworCQkJaWYgKHJldCA+PSAwKQorCQkJCWNvdW50ICs9IHNucHJpbnRmKGJ1ZiArIGNvdW50LAorCQkJCQkJICBQQUdFX1NJWkUgLSBjb3VudCwKKwkJCQkJCSAgIiU0eCIsIHJldCk7CisJCQllbHNlCisJCQkJY291bnQgKz0gc25wcmludGYoYnVmICsgY291bnQsCisJCQkJCQkgIFBBR0VfU0laRSAtIGNvdW50LAorCQkJCQkJICAiPG5vIGRhdGE6ICVkPiIsIHJldCk7CisJCX0KIAogCQlpZiAoY291bnQgPj0gUEFHRV9TSVpFIC0gMSkKIAkJCWJyZWFrOwpAQCAtMjM1Myw2ICsyMzY1LDk5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX2xpbWl0X3ZvbHVtZSk7CiAKIC8qKgorICogc25kX3NvY19pbmZvX3ZvbHN3XzJyX3N4IC0gZG91YmxlIHdpdGggdGx2IGFuZCB2YXJpYWJsZSBkYXRhIHNpemUKKyAqICBtaXhlciBpbmZvIGNhbGxiYWNrCisgKiBAa2NvbnRyb2w6IG1peGVyIGNvbnRyb2wKKyAqIEB1aW5mbzogY29udHJvbCBlbGVtZW50IGluZm9ybWF0aW9uCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLgorICovCitpbnQgc25kX3NvY19pbmZvX3ZvbHN3XzJyX3N4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCWludCBtYXggPSBtYy0+bWF4OworCWludCBtaW4gPSBtYy0+bWluOworCisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1heC1taW47CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfaW5mb192b2xzd18ycl9zeCk7CisKKy8qKgorICogc25kX3NvY19nZXRfdm9sc3dfMnJfc3ggLSBkb3VibGUgd2l0aCB0bHYgYW5kIHZhcmlhYmxlIGRhdGEgc2l6ZQorICogIG1peGVyIGdldCBjYWxsYmFjaworICogQGtjb250cm9sOiBtaXhlciBjb250cm9sCisgKiBAdWluZm86IGNvbnRyb2wgZWxlbWVudCBpbmZvcm1hdGlvbgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4KKyAqLworaW50IHNuZF9zb2NfZ2V0X3ZvbHN3XzJyX3N4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrY29udHJvbC0+cHJpdmF0ZV92YWx1ZTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG1hc2sgPSAoMTw8bWMtPnNoaWZ0KS0xOworCWludCBtaW4gPSBtYy0+bWluOworCWludCB2YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIG1jLT5yZWcpICYgbWFzazsKKwlpbnQgdmFsciA9IHNuZF9zb2NfcmVhZChjb2RlYywgbWMtPnJyZWcpICYgbWFzazsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gKCh2YWwgJiAweGZmKS1taW4pICYgbWFzazsKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSA9ICgodmFsciAmIDB4ZmYpLW1pbikgJiBtYXNrOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19nZXRfdm9sc3dfMnJfc3gpOworCisvKioKKyAqIHNuZF9zb2NfcHV0X3ZvbHN3XzJyX3N4IC0gZG91YmxlIHdpdGggdGx2IGFuZCB2YXJpYWJsZSBkYXRhIHNpemUKKyAqICBtaXhlciBwdXQgY2FsbGJhY2sKKyAqIEBrY29udHJvbDogbWl4ZXIgY29udHJvbAorICogQHVpbmZvOiBjb250cm9sIGVsZW1lbnQgaW5mb3JtYXRpb24KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisgKi8KK2ludCBzbmRfc29jX3B1dF92b2xzd18ycl9zeChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBtYXNrID0gKDE8PG1jLT5zaGlmdCktMTsKKwlpbnQgbWluID0gbWMtPm1pbjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCB2YWwsIHZhbHIsIG92YWwsIG92YWxyOworCisJdmFsID0gKCh1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSttaW4pICYgMHhmZik7CisJdmFsICY9IG1hc2s7CisJdmFsciA9ICgodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMV0rbWluKSAmIDB4ZmYpOworCXZhbHIgJj0gbWFzazsKKworCW92YWwgPSBzbmRfc29jX3JlYWQoY29kZWMsIG1jLT5yZWcpICYgbWFzazsKKwlvdmFsciA9IHNuZF9zb2NfcmVhZChjb2RlYywgbWMtPnJyZWcpICYgbWFzazsKKworCXJldCA9IDA7CisJaWYgKG92YWwgIT0gdmFsKSB7CisJCXJldCA9IHNuZF9zb2Nfd3JpdGUoY29kZWMsIG1jLT5yZWcsIHZhbCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJaWYgKG92YWxyICE9IHZhbHIpIHsKKwkJcmV0ID0gc25kX3NvY193cml0ZShjb2RlYywgbWMtPnJyZWcsIHZhbHIpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfc29jX3B1dF92b2xzd18ycl9zeCk7CisKKy8qKgogICogc25kX3NvY19kYWlfc2V0X3N5c2NsayAtIGNvbmZpZ3VyZSBEQUkgc3lzdGVtIG9yIG1hc3RlciBjbG9jay4KICAqIEBkYWk6IERBSQogICogQGNsa19pZDogREFJIHNwZWNpZmljIGNsb2NrIElECmRpZmYgLS1naXQgYS9zb3VuZC9zb3VuZF9jb3JlLmMgYi9zb3VuZC9zb3VuZF9jb3JlLmMKaW5kZXggN2MyZDY3Ny4uY2I2MTMxNyAxMDA2NDQKLS0tIGEvc291bmQvc291bmRfY29yZS5jCisrKyBiL3NvdW5kL3NvdW5kX2NvcmUuYwpAQCAtNTc2LDggKzU3Niw2IEBACiAJc3RydWN0IHNvdW5kX3VuaXQgKnM7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqbmV3X2ZvcHMgPSBOVUxMOwogCi0JbG9ja19rZXJuZWwgKCk7Ci0KIAljaGFpbj11bml0JjB4MEY7CiAJaWYoY2hhaW49PTQgfHwgY2hhaW49PTUpCS8qIGRzcC9hdWRpby9kc3AxNiAqLwogCXsKQEAgLTYzMCwxOCArNjI4LDE5IEBACiAJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm9sZF9mb3BzID0gZmlsZS0+Zl9vcDsKIAkJZmlsZS0+Zl9vcCA9IG5ld19mb3BzOwogCQlzcGluX3VubG9jaygmc291bmRfbG9hZGVyX2xvY2spOwotCQlpZihmaWxlLT5mX29wLT5vcGVuKQorCisJCWlmIChmaWxlLT5mX29wLT5vcGVuKQogCQkJZXJyID0gZmlsZS0+Zl9vcC0+b3Blbihpbm9kZSxmaWxlKTsKKwogCQlpZiAoZXJyKSB7CiAJCQlmb3BzX3B1dChmaWxlLT5mX29wKTsKIAkJCWZpbGUtPmZfb3AgPSBmb3BzX2dldChvbGRfZm9wcyk7CiAJCX0KKwogCQlmb3BzX3B1dChvbGRfZm9wcyk7Ci0JCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJc3Bpbl91bmxvY2soJnNvdW5kX2xvYWRlcl9sb2NrKTsKLQl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYXJkLmMgYi9zb3VuZC91c2IvY2FyZC5jCmluZGV4IDdhOGFjMWQuLjlmZWIwMGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYXJkLmMKKysrIGIvc291bmQvdXNiL2NhcmQuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAlzd2l0Y2ggKHByb3RvY29sKSB7CiAJY2FzZSBVQUNfVkVSU0lPTl8xOiB7Ci0JCXN0cnVjdCB1YWNfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmgxID0gY29udHJvbF9oZWFkZXI7CisJCXN0cnVjdCB1YWMxX2FjX2hlYWRlcl9kZXNjcmlwdG9yICpoMSA9IGNvbnRyb2xfaGVhZGVyOwogCiAJCWlmICghaDEtPmJJbkNvbGxlY3Rpb24pIHsKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJza2lwcGluZyBlbXB0eSBhdWRpbyBpbnRlcmZhY2UgKHYxKVxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2xvY2suYyBiL3NvdW5kL3VzYi9jbG9jay5jCmluZGV4IGI1ODU1MTEuLmI4NTNmOGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jbG9jay5jCisrKyBiL3NvdW5kL3VzYi9jbG9jay5jCkBAIC0xOSwzMyArMTksMTkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC91c2IvYXVkaW8tdjIuaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAogI2luY2x1ZGUgInVzYmF1ZGlvLmgiCiAjaW5jbHVkZSAiY2FyZC5oIgotI2luY2x1ZGUgIm1pZGkuaCIKLSNpbmNsdWRlICJtaXhlci5oIgotI2luY2x1ZGUgInByb2MuaCIKLSNpbmNsdWRlICJxdWlya3MuaCIKLSNpbmNsdWRlICJlbmRwb2ludC5oIgogI2luY2x1ZGUgImhlbHBlci5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGNtLmgiCi0jaW5jbHVkZSAidXJiLmgiCi0jaW5jbHVkZSAiZm9ybWF0LmgiCisjaW5jbHVkZSAiY2xvY2suaCIKIAogc3RhdGljIHN0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgKgogCXNuZF91c2JfZmluZF9jbG9ja19zb3VyY2Uoc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqY3RybF9pZmFjZSwKQEAgLTEzNCwxMCArMTIwLDcgQEAKIAlyZXR1cm4gISFkYXRhOwogfQogCi0vKiBUcnkgdG8gZmluZCB0aGUgY2xvY2sgc291cmNlIElEIG9mIGEgZ2l2ZW4gY2xvY2sgZW50aXR5ICovCi0KIHN0YXRpYyBpbnQgX191YWNfY2xvY2tfZmluZF9zb3VyY2Uoc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAsCi0JCQkJICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdF9pZmFjZSwKIAkJCQkgICBpbnQgZW50aXR5X2lkLCB1bnNpZ25lZCBsb25nICp2aXNpdGVkKQogewogCXN0cnVjdCB1YWNfY2xvY2tfc291cmNlX2Rlc2NyaXB0b3IgKnNvdXJjZTsKQEAgLTE1NCwxMSArMTM3LDExIEBACiAJfQogCiAJLyogZmlyc3QsIHNlZSBpZiB0aGUgSUQgd2UncmUgbG9va2luZyBmb3IgaXMgYSBjbG9jayBzb3VyY2UgYWxyZWFkeSAqLwotCXNvdXJjZSA9IHNuZF91c2JfZmluZF9jbG9ja19zb3VyY2UoaG9zdF9pZmFjZSwgZW50aXR5X2lkKTsKKwlzb3VyY2UgPSBzbmRfdXNiX2ZpbmRfY2xvY2tfc291cmNlKGNoaXAtPmN0cmxfaW50ZiwgZW50aXR5X2lkKTsKIAlpZiAoc291cmNlKQogCQlyZXR1cm4gc291cmNlLT5iQ2xvY2tJRDsKIAotCXNlbGVjdG9yID0gc25kX3VzYl9maW5kX2Nsb2NrX3NlbGVjdG9yKGhvc3RfaWZhY2UsIGVudGl0eV9pZCk7CisJc2VsZWN0b3IgPSBzbmRfdXNiX2ZpbmRfY2xvY2tfc2VsZWN0b3IoY2hpcC0+Y3RybF9pbnRmLCBlbnRpdHlfaWQpOwogCWlmIChzZWxlY3RvcikgewogCQlpbnQgcmV0OwogCkBAIC0xNjgsNiArMTUxLDggQEAKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCisJCS8qIFNlbGVjdG9yIHZhbHVlcyBhcmUgb25lLWJhc2VkICovCisKIAkJaWYgKHJldCA+IHNlbGVjdG9yLT5iTnJJblBpbnMgfHwgcmV0IDwgMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJIiVzKCk6IHNlbGVjdG9yIHJlcG9ydGVkIGlsbGVnYWwgdmFsdWUsIGlkICVkLCByZXQgJWRcbiIsCkBAIC0xNzYsMjcgKzE2MSwzNSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlyZXR1cm4gX191YWNfY2xvY2tfZmluZF9zb3VyY2UoY2hpcCwgaG9zdF9pZmFjZSwKLQkJCQkJICAgICAgIHNlbGVjdG9yLT5iYUNTb3VyY2VJRFtyZXQtMV0sCisJCXJldHVybiBfX3VhY19jbG9ja19maW5kX3NvdXJjZShjaGlwLCBzZWxlY3Rvci0+YmFDU291cmNlSURbcmV0LTFdLAogCQkJCQkgICAgICAgdmlzaXRlZCk7CiAJfQogCiAJLyogRklYTUU6IG11bHRpcGxpZXJzIG9ubHkgYWN0IGFzIHBhc3MtdGhydSBlbGVtZW50IGZvciBub3cgKi8KLQltdWx0aXBsaWVyID0gc25kX3VzYl9maW5kX2Nsb2NrX211bHRpcGxpZXIoaG9zdF9pZmFjZSwgZW50aXR5X2lkKTsKKwltdWx0aXBsaWVyID0gc25kX3VzYl9maW5kX2Nsb2NrX211bHRpcGxpZXIoY2hpcC0+Y3RybF9pbnRmLCBlbnRpdHlfaWQpOwogCWlmIChtdWx0aXBsaWVyKQotCQlyZXR1cm4gX191YWNfY2xvY2tfZmluZF9zb3VyY2UoY2hpcCwgaG9zdF9pZmFjZSwKLQkJCQkJICAgICAgIG11bHRpcGxpZXItPmJDU291cmNlSUQsIHZpc2l0ZWQpOworCQlyZXR1cm4gX191YWNfY2xvY2tfZmluZF9zb3VyY2UoY2hpcCwgbXVsdGlwbGllci0+YkNTb3VyY2VJRCwKKwkJCQkJCXZpc2l0ZWQpOwogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWludCBzbmRfdXNiX2Nsb2NrX2ZpbmRfc291cmNlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAotCQkJICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdF9pZmFjZSwKLQkJCSAgICAgIGludCBlbnRpdHlfaWQpCisvKgorICogRm9yIGFsbCBraW5kcyBvZiBzYW1wbGUgcmF0ZSBzZXR0aW5ncyBhbmQgb3RoZXIgZGV2aWNlIHF1ZXJpZXMsCisgKiB0aGUgY2xvY2sgc291cmNlIChlbmQtbGVhZikgbXVzdCBiZSB1c2VkLiBIb3dldmVyLCBjbG9jayBzZWxlY3RvcnMsCisgKiBjbG9jayBtdWx0aXBsaWVycyBhbmQgc2FtcGxlIHJhdGUgY29udmVydGVycyBtYXkgYmUgc3BlY2lmaWVkIGFzCisgKiBjbG9jayBzb3VyY2UgaW5wdXQgdG8gdGVybWluYWwuIFRoaXMgZnVuY3Rpb25zIHdhbGtzIHRoZSBjbG9jayBwYXRoCisgKiB0byBpdHMgZW5kIGFuZCB0cmllcyB0byBmaW5kIHRoZSBzb3VyY2UuCisgKgorICogVGhlICd2aXNpdGVkJyBiaXRmaWVsZCBpcyB1c2VkIGludGVybmFsbHkgdG8gZGV0ZWN0IHJlY3Vyc2l2ZSBsb29wcy4KKyAqCisgKiBSZXR1cm5zIHRoZSBjbG9jayBzb3VyY2UgVW5pdElEICg+PTApIG9uIHN1Y2Nlc3MsIG9yIGFuIGVycm9yLgorICovCitpbnQgc25kX3VzYl9jbG9ja19maW5kX3NvdXJjZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGVudGl0eV9pZCkKIHsKIAlERUNMQVJFX0JJVE1BUCh2aXNpdGVkLCAyNTYpOwogCW1lbXNldCh2aXNpdGVkLCAwLCBzaXplb2YodmlzaXRlZCkpOwotCXJldHVybiBfX3VhY19jbG9ja19maW5kX3NvdXJjZShjaGlwLCBob3N0X2lmYWNlLCBlbnRpdHlfaWQsIHZpc2l0ZWQpOworCXJldHVybiBfX3VhY19jbG9ja19maW5kX3NvdXJjZShjaGlwLCBlbnRpdHlfaWQsIHZpc2l0ZWQpOwogfQogCiBzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZV92MShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwgaW50IGlmYWNlLApAQCAtMjExLDExICsyMDQsOCBAQAogCWVwID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5iRW5kcG9pbnRBZGRyZXNzOwogCiAJLyogaWYgZW5kcG9pbnQgZG9lc24ndCBoYXZlIHNhbXBsaW5nIHJhdGUgY29udHJvbCwgYmFpbCBvdXQgKi8KLQlpZiAoIShmbXQtPmF0dHJpYnV0ZXMgJiBVQUNfRVBfQ1NfQVRUUl9TQU1QTEVfUkFURSkpIHsKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIiVkOiVkOiVkOiBlbmRwb2ludCBsYWNrcyBzYW1wbGUgcmF0ZSBhdHRyaWJ1dGUgYml0LCBjYW5ub3Qgc2V0LlxuIiwKLQkJCQkgICBkZXYtPmRldm51bSwgaWZhY2UsIGZtdC0+YWx0c2V0dGluZyk7CisJaWYgKCEoZm10LT5hdHRyaWJ1dGVzICYgVUFDX0VQX0NTX0FUVFJfU0FNUExFX1JBVEUpKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlkYXRhWzBdID0gcmF0ZTsKIAlkYXRhWzFdID0gcmF0ZSA+PiA4OwpAQCAtMjU0LDEyICsyNDQsMTMgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gY2hpcC0+ZGV2OwogCXVuc2lnbmVkIGNoYXIgZGF0YVs0XTsKIAlpbnQgZXJyLCBjcmF0ZTsKLQlpbnQgY2xvY2sgPSBzbmRfdXNiX2Nsb2NrX2ZpbmRfc291cmNlKGNoaXAsIGNoaXAtPmN0cmxfaW50ZiwgZm10LT5jbG9jayk7CisJaW50IGNsb2NrID0gc25kX3VzYl9jbG9ja19maW5kX3NvdXJjZShjaGlwLCBmbXQtPmNsb2NrKTsKIAogCWlmIChjbG9jayA8IDApCiAJCXJldHVybiBjbG9jazsKIAogCWlmICghdWFjX2Nsb2NrX3NvdXJjZV9pc192YWxpZChjaGlwLCBjbG9jaykpIHsKKwkJLyogVE9ETzogc2hvdWxkIHdlIHRyeSB0byBmaW5kIHZhbGlkIGNsb2NrIHNldHVwcyBieSBvdXJzZWxmPyAqLwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlZDolZDolZDogY2xvY2sgc291cmNlICVkIGlzIG5vdCB2YWxpZCwgY2Fubm90IHVzZVxuIiwKIAkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCBjbG9jayk7CiAJCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2xvY2suaCBiL3NvdW5kL3VzYi9jbG9jay5oCmluZGV4IGJlYjI1MzYuLjQ2NjMwOTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jbG9jay5oCisrKyBiL3NvdW5kL3VzYi9jbG9jay5oCkBAIC01LDggKzUsNiBAQAogCQkJICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzLAogCQkJICAgICBzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZtdCwgaW50IHJhdGUpOwogCi1pbnQgc25kX3VzYl9jbG9ja19maW5kX3NvdXJjZShzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKLQkJCSAgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RfaWZhY2UsCi0JCQkgICAgICBpbnQgZW50aXR5X2lkKTsKK2ludCBzbmRfdXNiX2Nsb2NrX2ZpbmRfc291cmNlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgZW50aXR5X2lkKTsKIAogI2VuZGlmIC8qIF9fVVNCQVVESU9fQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2VuZHBvaW50LmMgYi9zb3VuZC91c2IvZW5kcG9pbnQuYwppbmRleCA2ZjY1OTZjLi4xYTcwMWYxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvZW5kcG9pbnQuYworKysgYi9zb3VuZC91c2IvZW5kcG9pbnQuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgInBjbS5oIgogI2luY2x1ZGUgImhlbHBlci5oIgogI2luY2x1ZGUgImZvcm1hdC5oIgorI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8qCiAgKiBmcmVlIGEgc3Vic3RyZWFtCkBAIC0yNzUsNyArMjc2LDcgQEAKIAkJLyogZ2V0IGF1ZGlvIGZvcm1hdHMgKi8KIAkJc3dpdGNoIChwcm90b2NvbCkgewogCQljYXNlIFVBQ19WRVJTSU9OXzE6IHsKLQkJCXN0cnVjdCB1YWNfYXNfaGVhZGVyX2Rlc2NyaXB0b3JfdjEgKmFzID0KKwkJCXN0cnVjdCB1YWMxX2FzX2hlYWRlcl9kZXNjcmlwdG9yICphcyA9CiAJCQkJc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoYWx0cy0+ZXh0cmEsIGFsdHMtPmV4dHJhbGVuLCBOVUxMLCBVQUNfQVNfR0VORVJBTCk7CiAKIAkJCWlmICghYXMpIHsKQEAgLTI5Nyw3ICsyOTgsNyBAQAogCQljYXNlIFVBQ19WRVJTSU9OXzI6IHsKIAkJCXN0cnVjdCB1YWMyX2lucHV0X3Rlcm1pbmFsX2Rlc2NyaXB0b3IgKmlucHV0X3Rlcm07CiAJCQlzdHJ1Y3QgdWFjMl9vdXRwdXRfdGVybWluYWxfZGVzY3JpcHRvciAqb3V0cHV0X3Rlcm07Ci0JCQlzdHJ1Y3QgdWFjX2FzX2hlYWRlcl9kZXNjcmlwdG9yX3YyICphcyA9CisJCQlzdHJ1Y3QgdWFjMl9hc19oZWFkZXJfZGVzY3JpcHRvciAqYXMgPQogCQkJCXNuZF91c2JfZmluZF9jc2ludF9kZXNjKGFsdHMtPmV4dHJhLCBhbHRzLT5leHRyYWxlbiwgTlVMTCwgVUFDX0FTX0dFTkVSQUwpOwogCiAJCQlpZiAoIWFzKSB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvZm9ybWF0LmMgYi9zb3VuZC91c2IvZm9ybWF0LmMKaW5kZXggMzAzNjRhYi4uNDM4N2Y1NCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2Zvcm1hdC5jCisrKyBiL3NvdW5kL3VzYi9mb3JtYXQuYwpAQCAtMjY0LDEzICsyNjQsMTIgQEAKICAqIG9uIHRoZSBhdWRpb2Zvcm1hdCB0YWJsZSAoYXVkaW8gY2xhc3MgdjIpLgogICovCiBzdGF0aWMgaW50IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKLQkJCQkgICAgICAgc3RydWN0IGF1ZGlvZm9ybWF0ICpmcCwKLQkJCQkgICAgICAgc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2UpCisJCQkJICAgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZnApCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGNoaXAtPmRldjsKIAl1bnNpZ25lZCBjaGFyIHRtcFsyXSwgKmRhdGE7CiAJaW50IG5yX3RyaXBsZXRzLCBkYXRhX3NpemUsIHJldCA9IDA7Ci0JaW50IGNsb2NrID0gc25kX3VzYl9jbG9ja19maW5kX3NvdXJjZShjaGlwLCBjaGlwLT5jdHJsX2ludGYsIGZwLT5jbG9jayk7CisJaW50IGNsb2NrID0gc25kX3VzYl9jbG9ja19maW5kX3NvdXJjZShjaGlwLCBmcC0+Y2xvY2spOwogCiAJaWYgKGNsb2NrIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICIlcygpOiB1bmFibGUgdG8gZmluZCBjbG9jayBzb3VyY2UgKGNsb2NrICVkKVxuIiwKQEAgLTM5MSw3ICszOTAsNyBAQAogCQlicmVhazsKIAljYXNlIFVBQ19WRVJTSU9OXzI6CiAJCS8qIGZwLT5jaGFubmVscyBpcyBhbHJlYWR5IHNldCBpbiB0aGlzIGNhc2UgKi8KLQkJcmV0ID0gcGFyc2VfYXVkaW9fZm9ybWF0X3JhdGVzX3YyKGNoaXAsIGZwLCBpZmFjZSk7CisJCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCk7CiAJCWJyZWFrOwogCX0KIApAQCAtNDUwLDcgKzQ0OSw3IEBACiAJCWZyYW1lc2l6ZSA9IGxlMTZfdG9fY3B1KGZtdC0+d1NhbXBsZXNQZXJGcmFtZSk7CiAJCXNuZF9wcmludGQoS0VSTl9JTkZPICJmb3VuZCBmb3JtYXQgSUkgd2l0aCBtYXguYml0cmF0ZSA9ICVkLCBmcmFtZSBzaXplPSVkXG4iLCBicmF0ZSwgZnJhbWVzaXplKTsKIAkJZnAtPmZyYW1lX3NpemUgPSBmcmFtZXNpemU7Ci0JCXJldCA9IHBhcnNlX2F1ZGlvX2Zvcm1hdF9yYXRlc192MihjaGlwLCBmcCwgaWZhY2UpOworCQlyZXQgPSBwYXJzZV9hdWRpb19mb3JtYXRfcmF0ZXNfdjIoY2hpcCwgZnApOwogCQlicmVhazsKIAl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL21pZGkuYyBiL3NvdW5kL3VzYi9taWRpLmMKaW5kZXggNDY3ODU2NC4uYjljMmJjNiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21pZGkuYworKysgYi9zb3VuZC91c2IvbWlkaS5jCkBAIC00MzQsNyArNDM0LDcgQEAKIAkJCXU4IGNpbiA9IGJ1ZmZlcltpXSAmIDB4MGY7CiAJCQlzdHJ1Y3QgdXNibWlkaV9pbl9wb3J0ICpwb3J0ID0gJmVwLT5wb3J0c1tjYWJsZV07CiAJCQlpbnQgbGVuZ3RoOwotCQkJCisKIAkJCWxlbmd0aCA9IHNuZF91c2JtaWRpX2Npbl9sZW5ndGhbY2luXTsKIAkJCWlmIChjaW4gPT0gMHhmICYmIGJ1ZmZlcltpICsgMV0gPj0gMHhmOCkKIAkJCQk7IC8qIHJlYWx0aW1lIG1zZzogbm8gcnVubmluZyBzdGF0dXMgY2hhbmdlICovCkBAIC02MjgsMTMgKzYyOCwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9wcm90b2NvbF9vcHMgc25kX3VzYm1pZGlfbWlkaW1hbl9vcHMgPSB7CiAJLmlucHV0ID0gc25kX3VzYm1pZGlfbWlkaW1hbl9pbnB1dCwKLQkub3V0cHV0ID0gc25kX3VzYm1pZGlfc3RhbmRhcmRfb3V0cHV0LCAKKwkub3V0cHV0ID0gc25kX3VzYm1pZGlfc3RhbmRhcmRfb3V0cHV0LAogCS5vdXRwdXRfcGFja2V0ID0gc25kX3VzYm1pZGlfb3V0cHV0X21pZGltYW5fcGFja2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfcHJvdG9jb2xfb3BzIHNuZF91c2JtaWRpX21hdWRpb19icm9rZW5fcnVubmluZ19zdGF0dXNfb3BzID0gewogCS5pbnB1dCA9IHNuZF91c2JtaWRpX21hdWRpb19icm9rZW5fcnVubmluZ19zdGF0dXNfaW5wdXQsCi0JLm91dHB1dCA9IHNuZF91c2JtaWRpX3N0YW5kYXJkX291dHB1dCwgCisJLm91dHB1dCA9IHNuZF91c2JtaWRpX3N0YW5kYXJkX291dHB1dCwKIAkub3V0cHV0X3BhY2tldCA9IHNuZF91c2JtaWRpX291dHB1dF9zdGFuZGFyZF9wYWNrZXQsCiB9OwogCkBAIC0xMjQ4LDcgKzEyNDgsNyBAQAogICovCiBzdGF0aWMgaW50IHNuZF91c2JtaWRpX291dF9lbmRwb2ludF9jcmVhdGUoc3RydWN0IHNuZF91c2JfbWlkaSogdW1pZGksCiAJCQkJCSAgIHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnRfaW5mbyogZXBfaW5mbywKLQkJCSAJCSAgIHN0cnVjdCBzbmRfdXNiX21pZGlfZW5kcG9pbnQqIHJlcCkKKwkJCQkJICAgc3RydWN0IHNuZF91c2JfbWlkaV9lbmRwb2ludCogcmVwKQogewogCXN0cnVjdCBzbmRfdXNiX21pZGlfb3V0X2VuZHBvaW50KiBlcDsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTEzOTgsNyArMTM5OCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzbmRfdXNibWlkaV9maW5kX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3VzYl9taWRpKiB1bWlkaSwKLQkJCQkJCQkgICBpbnQgc3RyZWFtLCBpbnQgbnVtYmVyKQorCQkJCQkJCQlpbnQgc3RyZWFtLCBpbnQgbnVtYmVyKQogewogCXN0cnVjdCBsaXN0X2hlYWQqIGxpc3Q7CiAKQEAgLTE4MTEsNyArMTgxMSw3IEBACiAJCXNuZF91c2JtaWRpX3N3aXRjaF9yb2xhbmRfYWx0c2V0dGluZyh1bWlkaSk7CiAKIAlpZiAoZW5kcG9pbnRbMF0ub3V0X2VwIHx8IGVuZHBvaW50WzBdLmluX2VwKQotCQlyZXR1cm4gMDsJCisJCXJldHVybiAwOwogCiAJaW50ZiA9IHVtaWRpLT5pZmFjZTsKIAlpZiAoIWludGYgfHwgaW50Zi0+bnVtX2FsdHNldHRpbmcgPCAxKQpAQCAtMTg0OSw3ICsxODQ5LDcgQEAKIAkJCQkJCSBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8qIGVuZHBvaW50cykKIHsKIAlpbnQgZXJyLCBpOwotCQorCiAJZXJyID0gc25kX3VzYm1pZGlfZGV0ZWN0X2VuZHBvaW50cyh1bWlkaSwgZW5kcG9pbnRzLCBNSURJX01BWF9FTkRQT0lOVFMpOwogCWZvciAoaSA9IDA7IGkgPCBNSURJX01BWF9FTkRQT0lOVFM7ICsraSkgewogCQlpZiAoZW5kcG9pbnRzW2ldLm91dF9lcCkKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9taXhlci5jIGIvc291bmQvdXNiL21peGVyLmMKaW5kZXggNzM2ZDEzNC4uYzE2NmRiMCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL21peGVyLmMKKysrIGIvc291bmQvdXNiL21peGVyLmMKQEAgLTI2LDYgKzI2LDIyIEBACiAgKgogICovCiAKKy8qCisgKiBUT0RPcywgZm9yIGJvdGggdGhlIG1peGVyIGFuZCB0aGUgc3RyZWFtaW5nIGludGVyZmFjZXM6CisgKgorICogIC0gc3VwcG9ydCBmb3IgVUFDMiBlZmZlY3QgdW5pdHMKKyAqICAtIHN1cHBvcnQgZm9yIGdyYXBoaWNhbCBlcXVhbGl6ZXJzCisgKiAgLSBSQU5HRSBhbmQgTUVNIHNldCBjb21tYW5kcyAoVUFDMikKKyAqICAtIFJBTkdFIGFuZCBNRU0gaW50ZXJydXB0IGRpc3BhdGNoZXJzIChVQUMyKQorICogIC0gYXVkaW8gY2hhbm5lbCBjbHVzdGVyaW5nIChVQUMyKQorICogIC0gYXVkaW8gc2FtcGxlIHJhdGUgY29udmVydGVyIHVuaXRzIChVQUMyKQorICogIC0gcHJvcGVyIGhhbmRsaW5nIG9mIGNsb2NrIG11bHRpcGxpZXJzIChVQUMyKQorICogIC0gZGlzcGF0Y2ggY2xvY2sgY2hhbmdlIG5vdGlmaWNhdGlvbnMgKFVBQzIpCisgKiAgCS0gc3RvcCBQQ00gc3RyZWFtcyB3aGljaCB1c2UgYSBjbG9jayB0aGF0IGJlY2FtZSBpbnZhbGlkCisgKiAgCS0gc3RvcCBQQ00gc3RyZWFtcyB3aGljaCB1c2UgYSBjbG9jayBzZWxlY3RvciB0aGF0IGhhcyBjaGFuZ2VkCisgKiAgCS0gcGFyc2UgYXZhaWxhYmxlIHNhbXBsZSByYXRlcyBhZ2FpbiB3aGVuIGNsb2NrIHNvdXJjZXMgY2hhbmdlZAorICovCisKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMjc1LDI4ICsyOTEsMjggQEAKIAogc3RhdGljIGludCBnZXRfY3RsX3ZhbHVlX3YxKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgcmVxdWVzdCwgaW50IHZhbGlkeCwgaW50ICp2YWx1ZV9yZXQpCiB7CisJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAgPSBjdmFsLT5taXhlci0+Y2hpcDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKIAlpbnQgdmFsX2xlbiA9IGN2YWwtPnZhbF90eXBlID49IFVTQl9NSVhFUl9TMTYgPyAyIDogMTsKIAlpbnQgdGltZW91dCA9IDEwOwogCiAJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKLQkJaWYgKHNuZF91c2JfY3RsX21zZyhjdmFsLT5taXhlci0+Y2hpcC0+ZGV2LAotCQkJCSAgICB1c2JfcmN2Y3RybHBpcGUoY3ZhbC0+bWl4ZXItPmNoaXAtPmRldiwgMCksCi0JCQkJICAgIHJlcXVlc3QsCisJCWlmIChzbmRfdXNiX2N0bF9tc2coY2hpcC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoY2hpcC0+ZGV2LCAwKSwgcmVxdWVzdCwKIAkJCQkgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiwKLQkJCQkgICAgdmFsaWR4LCBjdmFsLT5taXhlci0+Y3RybGlmIHwgKGN2YWwtPmlkIDw8IDgpLAorCQkJCSAgICB2YWxpZHgsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApIHwgKGN2YWwtPmlkIDw8IDgpLAogCQkJCSAgICBidWYsIHZhbF9sZW4sIDEwMCkgPj0gdmFsX2xlbikgewogCQkJKnZhbHVlX3JldCA9IGNvbnZlcnRfc2lnbmVkX3ZhbHVlKGN2YWwsIHNuZF91c2JfY29tYmluZV9ieXRlcyhidWYsIHZhbF9sZW4pKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCXNuZF9wcmludGRkKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN0bCB2YWx1ZTogcmVxID0gJSN4LCB3VmFsdWUgPSAlI3gsIHdJbmRleCA9ICUjeCwgdHlwZSA9ICVkXG4iLAotCQkgICAgcmVxdWVzdCwgdmFsaWR4LCBjdmFsLT5taXhlci0+Y3RybGlmIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSk7CisJCSAgICByZXF1ZXN0LCB2YWxpZHgsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2N0bF92YWx1ZV92MihzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IHJlcXVlc3QsIGludCB2YWxpZHgsIGludCAqdmFsdWVfcmV0KQogeworCXN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwID0gY3ZhbC0+bWl4ZXItPmNoaXA7CiAJdW5zaWduZWQgY2hhciBidWZbMiArIDMqc2l6ZW9mKF9fdTE2KV07IC8qIGVub3VnaCBzcGFjZSBmb3Igb25lIHJhbmdlICovCiAJdW5zaWduZWQgY2hhciAqdmFsOwogCWludCByZXQsIHNpemU7CkBAIC0zMTIsMTYgKzMyOCwxNCBAQAogCiAJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCi0JcmV0ID0gc25kX3VzYl9jdGxfbXNnKGN2YWwtPm1peGVyLT5jaGlwLT5kZXYsCi0JCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoY3ZhbC0+bWl4ZXItPmNoaXAtPmRldiwgMCksCi0JCQkgICAgICBiUmVxdWVzdCwKKwlyZXQgPSBzbmRfdXNiX2N0bF9tc2coY2hpcC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoY2hpcC0+ZGV2LCAwKSwgYlJlcXVlc3QsCiAJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOLAotCQkJICAgICAgdmFsaWR4LCBjdmFsLT5taXhlci0+Y3RybGlmIHwgKGN2YWwtPmlkIDw8IDgpLAorCQkJICAgICAgdmFsaWR4LCBzbmRfdXNiX2N0cmxfaW50ZihjaGlwKSB8IChjdmFsLT5pZCA8PCA4KSwKIAkJCSAgICAgIGJ1Ziwgc2l6ZSwgMTAwMCk7CiAKIAlpZiAocmV0IDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ2V0IGN0bCB2YWx1ZTogcmVxID0gJSN4LCB3VmFsdWUgPSAlI3gsIHdJbmRleCA9ICUjeCwgdHlwZSA9ICVkXG4iLAotCQkJICAgcmVxdWVzdCwgdmFsaWR4LCBjdmFsLT5taXhlci0+Y3RybGlmIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSk7CisJCQkgICByZXF1ZXN0LCB2YWxpZHgsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0zOTcsNiArNDExLDcgQEAKIGludCBzbmRfdXNiX21peGVyX3NldF9jdGxfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsCiAJCQkJaW50IHJlcXVlc3QsIGludCB2YWxpZHgsIGludCB2YWx1ZV9zZXQpCiB7CisJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXAgPSBjdmFsLT5taXhlci0+Y2hpcDsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKIAlpbnQgdmFsX2xlbiwgdGltZW91dCA9IDEwOwogCkBAIC00MTksMTUgKzQzNCwxNCBAQAogCWJ1ZlswXSA9IHZhbHVlX3NldCAmIDB4ZmY7CiAJYnVmWzFdID0gKHZhbHVlX3NldCA+PiA4KSAmIDB4ZmY7CiAJd2hpbGUgKHRpbWVvdXQtLSA+IDApCi0JCWlmIChzbmRfdXNiX2N0bF9tc2coY3ZhbC0+bWl4ZXItPmNoaXAtPmRldiwKLQkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGN2YWwtPm1peGVyLT5jaGlwLT5kZXYsIDApLAotCQkJCSAgICByZXF1ZXN0LAorCQlpZiAoc25kX3VzYl9jdGxfbXNnKGNoaXAtPmRldiwKKwkJCQkgICAgdXNiX3NuZGN0cmxwaXBlKGNoaXAtPmRldiwgMCksIHJlcXVlc3QsCiAJCQkJICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VULAotCQkJCSAgICB2YWxpZHgsIGN2YWwtPm1peGVyLT5jdHJsaWYgfCAoY3ZhbC0+aWQgPDwgOCksCisJCQkJICAgIHZhbGlkeCwgc25kX3VzYl9jdHJsX2ludGYoY2hpcCkgfCAoY3ZhbC0+aWQgPDwgOCksCiAJCQkJICAgIGJ1ZiwgdmFsX2xlbiwgMTAwKSA+PSAwKQogCQkJcmV0dXJuIDA7CiAJc25kX3ByaW50ZGQoS0VSTl9FUlIgImNhbm5vdCBzZXQgY3RsIHZhbHVlOiByZXEgPSAlI3gsIHdWYWx1ZSA9ICUjeCwgd0luZGV4ID0gJSN4LCB0eXBlID0gJWQsIGRhdGEgPSAlI3gvJSN4XG4iLAotCQkgICAgcmVxdWVzdCwgdmFsaWR4LCBjdmFsLT5taXhlci0+Y3RybGlmIHwgKGN2YWwtPmlkIDw8IDgpLCBjdmFsLT52YWxfdHlwZSwgYnVmWzBdLCBidWZbMV0pOworCQkgICAgcmVxdWVzdCwgdmFsaWR4LCBzbmRfdXNiX2N0cmxfaW50ZihjaGlwKSB8IChjdmFsLT5pZCA8PCA4KSwgY3ZhbC0+dmFsX3R5cGUsIGJ1ZlswXSwgYnVmWzFdKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtNTgyLDkgKzU5Niw5IEBACiAJCXN3aXRjaCAoaXRlcm0tPnR5cGUgPj4gMTYpIHsKIAkJY2FzZSBVQUNfU0VMRUNUT1JfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiU2VsZWN0b3IiKTsgcmV0dXJuIDg7Ci0JCWNhc2UgVUFDX1BST0NFU1NJTkdfVU5JVF9WMToKKwkJY2FzZSBVQUMxX1BST0NFU1NJTkdfVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiUHJvY2VzcyBVbml0Iik7IHJldHVybiAxMjsKLQkJY2FzZSBVQUNfRVhURU5TSU9OX1VOSVRfVjE6CisJCWNhc2UgVUFDMV9FWFRFTlNJT05fVU5JVDoKIAkJCXN0cmNweShuYW1lLCAiRXh0IFVuaXQiKTsgcmV0dXJuIDg7CiAJCWNhc2UgVUFDX01JWEVSX1VOSVQ6CiAJCQlzdHJjcHkobmFtZSwgIk1peGVyIik7IHJldHVybiA1OwpAQCAtNjcyLDggKzY4Niw4IEBACiAJCQl0ZXJtLT5uYW1lID0gdWFjX3NlbGVjdG9yX3VuaXRfaVNlbGVjdG9yKGQpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgotCQljYXNlIFVBQ19FWFRFTlNJT05fVU5JVF9WMTogeworCQljYXNlIFVBQzFfUFJPQ0VTU0lOR19VTklUOgorCQljYXNlIFVBQzFfRVhURU5TSU9OX1VOSVQ6IHsKIAkJCXN0cnVjdCB1YWNfcHJvY2Vzc2luZ191bml0X2Rlc2NyaXB0b3IgKmQgPSBwMTsKIAkJCWlmIChkLT5iTnJJblBpbnMpIHsKIAkJCQlpZCA9IGQtPmJhU291cmNlSURbMF07CkBAIC03NDUsNiArNzU5LDggQEAKICAqLwogc3RhdGljIGludCBnZXRfbWluX21heChzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwgaW50IGRlZmF1bHRfbWluKQogeworCXN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwID0gY3ZhbC0+bWl4ZXItPmNoaXA7CisKIAkvKiBmb3IgZmFpbHNhZmUgKi8KIAljdmFsLT5taW4gPSBkZWZhdWx0X21pbjsKIAljdmFsLT5tYXggPSBjdmFsLT5taW4gKyAxOwpAQCAtNzY3LDcgKzc4Myw3IEBACiAJCWlmIChnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUFYLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1heCkgPCAwIHx8CiAJCSAgICBnZXRfY3RsX3ZhbHVlKGN2YWwsIFVBQ19HRVRfTUlOLCAoY3ZhbC0+Y29udHJvbCA8PCA4KSB8IG1pbmNobiwgJmN2YWwtPm1pbikgPCAwKSB7CiAJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICIlZDolZDogY2Fubm90IGdldCBtaW4vbWF4IHZhbHVlcyBmb3IgY29udHJvbCAlZCAoaWQgJWQpXG4iLAotCQkJCSAgIGN2YWwtPmlkLCBjdmFsLT5taXhlci0+Y3RybGlmLCBjdmFsLT5jb250cm9sLCBjdmFsLT5pZCk7CisJCQkJICAgY3ZhbC0+aWQsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApLCBjdmFsLT5jb250cm9sLCBjdmFsLT5pZCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAoZ2V0X2N0bF92YWx1ZShjdmFsLCBVQUNfR0VUX1JFUywgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBtaW5jaG4sICZjdmFsLT5yZXMpIDwgMCkgewpAQCAtMTE5OSwxNCArMTIxNSw2IEBACiAJCX0KIAl9IGVsc2UgeyAvKiBVQUNfVkVSU0lPTl8yICovCiAJCWZvciAoaSA9IDA7IGkgPCAzMC8yOyBpKyspIHsKLQkJCS8qIEZyb20gdGhlIFVTQiBBdWRpbyBzcGVjIHYyLjA6Ci0JCQkgICBibWFDb250cm9scygpIGlzIGEgKGNoKzEpLWVsZW1lbnQgYXJyYXkgb2YgNC1ieXRlIGJpdG1hcHMsCi0JCQkgICBlYWNoIGNvbnRhaW5pbmcgYSBzZXQgb2YgYml0IHBhaXJzLiBJZiBhIENvbnRyb2wgaXMgcHJlc2VudCwKLQkJCSAgIGl0IG11c3QgYmUgSG9zdCByZWFkYWJsZS4gSWYgYSBjZXJ0YWluIENvbnRyb2wgaXMgbm90Ci0JCQkgICBwcmVzZW50IHRoZW4gdGhlIGJpdCBwYWlyIG11c3QgYmUgc2V0IHRvIDBiMDAuCi0JCQkgICBJZiBhIENvbnRyb2wgaXMgcHJlc2VudCBidXQgcmVhZC1vbmx5LCB0aGUgYml0IHBhaXIgbXVzdCBiZQotCQkJICAgc2V0IHRvIDBiMDEuIElmIGEgQ29udHJvbCBpcyBhbHNvIEhvc3QgcHJvZ3JhbW1hYmxlLCB0aGUgYml0Ci0JCQkgICBwYWlyIG11c3QgYmUgc2V0IHRvIDBiMTEuIFRoZSB2YWx1ZSAwYjEwIGlzIG5vdCBhbGxvd2VkLiAqLwogCQkJdW5zaWduZWQgaW50IGNoX2JpdHMgPSAwOwogCQkJdW5zaWduZWQgaW50IGNoX3JlYWRfb25seSA9IDA7CiAKQEAgLTE4NTUsMTMgKzE4NjMsMTMgQEAKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX3NlbGVjdG9yX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwogCWNhc2UgVUFDX0ZFQVRVUkVfVU5JVDoKIAkJcmV0dXJuIHBhcnNlX2F1ZGlvX2ZlYXR1cmVfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7Ci0JY2FzZSBVQUNfUFJPQ0VTU0lOR19VTklUX1YxOgorCWNhc2UgVUFDMV9QUk9DRVNTSU5HX1VOSVQ6CiAJLyogICBVQUMyX0VGRkVDVF9VTklUIGhhcyB0aGUgc2FtZSB2YWx1ZSAqLwogCQlpZiAoc3RhdGUtPm1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKQogCQkJcmV0dXJuIHBhcnNlX2F1ZGlvX3Byb2Nlc3NpbmdfdW5pdChzdGF0ZSwgdW5pdGlkLCBwMSk7CiAJCWVsc2UKIAkJCXJldHVybiAwOyAvKiBGSVhNRSAtIGVmZmVjdCB1bml0cyBub3QgaW1wbGVtZW50ZWQgeWV0ICovCi0JY2FzZSBVQUNfRVhURU5TSU9OX1VOSVRfVjE6CisJY2FzZSBVQUMxX0VYVEVOU0lPTl9VTklUOgogCS8qICAgVUFDMl9QUk9DRVNTSU5HX1VOSVRfVjIgaGFzIHRoZSBzYW1lIHZhbHVlICovCiAJCWlmIChzdGF0ZS0+bWl4ZXItPnByb3RvY29sID09IFVBQ19WRVJTSU9OXzEpCiAJCQlyZXR1cm4gcGFyc2VfYXVkaW9fZXh0ZW5zaW9uX3VuaXQoc3RhdGUsIHVuaXRpZCwgcDEpOwpAQCAtMTkwNSw3ICsxOTEzLDcgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICpob3N0aWY7CiAJdm9pZCAqcDsKIAotCWhvc3RpZiA9ICZ1c2JfaWZudW1fdG9faWYobWl4ZXItPmNoaXAtPmRldiwgbWl4ZXItPmN0cmxpZiktPmFsdHNldHRpbmdbMF07CisJaG9zdGlmID0gbWl4ZXItPmNoaXAtPmN0cmxfaW50ZjsKIAltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKIAlzdGF0ZS5jaGlwID0gbWl4ZXItPmNoaXA7CiAJc3RhdGUubWl4ZXIgPSBtaXhlcjsKQEAgLTE5MjUsNyArMTkzMyw3IEBACiAJcCA9IE5VTEw7CiAJd2hpbGUgKChwID0gc25kX3VzYl9maW5kX2NzaW50X2Rlc2MoaG9zdGlmLT5leHRyYSwgaG9zdGlmLT5leHRyYWxlbiwgcCwgVUFDX09VVFBVVF9URVJNSU5BTCkpICE9IE5VTEwpIHsKIAkJaWYgKG1peGVyLT5wcm90b2NvbCA9PSBVQUNfVkVSU0lPTl8xKSB7Ci0JCQlzdHJ1Y3QgdWFjX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yX3YxICpkZXNjID0gcDsKKwkJCXN0cnVjdCB1YWMxX291dHB1dF90ZXJtaW5hbF9kZXNjcmlwdG9yICpkZXNjID0gcDsKIAogCQkJaWYgKGRlc2MtPmJMZW5ndGggPCBzaXplb2YoKmRlc2MpKQogCQkJCWNvbnRpbnVlOyAvKiBpbnZhbGlkIGRlc2NyaXB0b3I/ICovCkBAIC0xOTk3LDcgKzIwMDUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkobWl4ZXIsICZjaGlwLT5taXhlcl9saXN0LCBsaXN0KSB7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwKIAkJCSJVU0IgTWl4ZXI6IHVzYl9pZD0weCUwOHgsIGN0cmxpZj0laSwgY3RsZXJyPSVpXG4iLAotCQkJCWNoaXAtPnVzYl9pZCwgbWl4ZXItPmN0cmxpZiwKKwkJCQljaGlwLT51c2JfaWQsIHNuZF91c2JfY3RybF9pbnRmKGNoaXApLAogCQkJCW1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiQ2FyZDogJXNcbiIsIGNoaXAtPmNhcmQtPmxvbmduYW1lKTsKIAkJZm9yICh1bml0aWQgPSAwOyB1bml0aWQgPCBNQVhfSURfRUxFTVM7IHVuaXRpZCsrKSB7CkBAIC0yMTE1LDcgKzIxMjMsNyBAQAogCWludCBidWZmZXJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBlcG51bTsKIAotCWhvc3RpZiA9ICZ1c2JfaWZudW1fdG9faWYobWl4ZXItPmNoaXAtPmRldiwgbWl4ZXItPmN0cmxpZiktPmFsdHNldHRpbmdbMF07CisJaG9zdGlmID0gbWl4ZXItPmNoaXAtPmN0cmxfaW50ZjsKIAkvKiB3ZSBuZWVkIG9uZSBpbnRlcnJ1cHQgaW5wdXQgZW5kcG9pbnQgKi8KIAlpZiAoZ2V0X2lmYWNlX2Rlc2MoaG9zdGlmKS0+Yk51bUVuZHBvaW50cyA8IDEpCiAJCXJldHVybiAwOwpAQCAtMjE1OCw3ICsyMTY2LDYgQEAKIAlpZiAoIW1peGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAltaXhlci0+Y2hpcCA9IGNoaXA7Ci0JbWl4ZXItPmN0cmxpZiA9IGN0cmxpZjsKIAltaXhlci0+aWdub3JlX2N0bF9lcnJvciA9IGlnbm9yZV9lcnJvcjsKIAltaXhlci0+aWRfZWxlbXMgPSBrY2FsbG9jKE1BWF9JRF9FTEVNUywgc2l6ZW9mKCptaXhlci0+aWRfZWxlbXMpLAogCQkJCSAgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuaCBiL3NvdW5kL3VzYi9taXhlci5oCmluZGV4IGE3Y2YxMDAuLjI2YzYzNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5oCisrKyBiL3NvdW5kL3VzYi9taXhlci5oCkBAIC0zLDcgKzMsNiBAQAogCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CiAJc3RydWN0IHNuZF91c2JfYXVkaW8gKmNoaXA7Ci0JdW5zaWduZWQgaW50IGN0cmxpZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9jdGxfZXJyb3I7CiAJc3RydWN0IHVyYiAqdXJiOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3BjbS5oIGIvc291bmQvdXNiL3BjbS5oCmluZGV4IDFjOTMxYjYuLmVkM2UyODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9wY20uaAorKysgYi9zb3VuZC91c2IvcGNtLmgKQEAgLTcsOCArNyw1IEBACiAJCSAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzLAogCQkgICAgICAgc3RydWN0IGF1ZGlvZm9ybWF0ICpmbXQpOwogCi1pbnQgc25kX3VzYl9pbml0X3NhbXBsZV9yYXRlKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLCBpbnQgaWZhY2UsCi0JCQkgICAgIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdHMsCi0JCQkgICAgIHN0cnVjdCBhdWRpb2Zvcm1hdCAqZm10LCBpbnQgcmF0ZSk7CiAKICNlbmRpZiAvKiBfX1VTQkFVRElPX1BDTV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmggYi9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKaW5kZXggZjg3OTdmNi4uMmU4MDAzZiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCisrKyBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaApAQCAtMjE1Miw5MSArMjE1Miw3IEBACiAJfQogfSwKIHsKLQlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjAxKSwKLQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8Ci0JCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8Ci0JCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKLQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAotCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7Ci0JCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAotCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKLQkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKLQkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKLQl9Ci19LAotewotCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDIpLAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKLQkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKLQkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAotCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCi0JCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAotCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAotCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAotCX0KLX0sCi17Ci0JVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIwMyksCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAotCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAotCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCi0JLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewotCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKLQkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCi0JfQotfSwKLXsKLQlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjA0KSwKLQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8Ci0JCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8Ci0JCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKLQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAotCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAotCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7Ci0JCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAotCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKLQkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKLQkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKLQl9Ci19LAotewotCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMDUpLAotCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKLQkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKLQkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAotCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCi0JLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCi0JCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAotCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAotCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAotCX0KLX0sCi17Ci0JVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzI1MCksCi0JLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAotCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAotCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCi0JLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKLQkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgewotCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKLQkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCi0JfQotfSwKLXsKLQlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjMwKSwKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjQwKSwKIAkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CiAJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CiAJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKQEAgLTIyNDksNiArMjE2NSwxMDQgQEAKIAkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKIAl9CiB9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMTApLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIxNyksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjFiKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgyMDQwLCAweDcyMWUpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCit7CisJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDIwNDAsIDB4NzIxZiksCisJLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgfAorCQkgICAgICAgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MsCisJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0gVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJihjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkudmVuZG9yX25hbWUgPSAiSGF1cHBhdWdlIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJIVlItOTUwUSIsCisJCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCisJCS50eXBlID0gUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVIsCisJfQorfSwKK3sKKwlVU0JfREVWSUNFX1ZFTkRPUl9TUEVDKDB4MjA0MCwgMHg3MjgwKSwKKwkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CisJCSAgICAgICBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUywKKwkuYkludGVyZmFjZUNsYXNzID0gVVNCX0NMQVNTX0FVRElPLAorCS5iSW50ZXJmYWNlU3ViQ2xhc3MgPSBVU0JfU1VCQ0xBU1NfQVVESU9DT05UUk9MLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJIYXVwcGF1Z2UiLAorCQkucHJvZHVjdF9uYW1lID0gIkhWUi05NTBRIiwKKwkJLmlmbnVtID0gUVVJUktfQU5ZX0lOVEVSRkFDRSwKKwkJLnR5cGUgPSBRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKKwl9Cit9LAoreworCVVTQl9ERVZJQ0VfVkVORE9SX1NQRUMoMHgwZmQ5LCAweDAwMDgpLAorCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTIHwKKwkJICAgICAgIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCisJLmJJbnRlcmZhY2VTdWJDbGFzcyA9IFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wsCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKKwkJLnZlbmRvcl9uYW1lID0gIkhhdXBwYXVnZSIsCisJCS5wcm9kdWN0X25hbWUgPSAiSFZSLTk1MFEiLAorCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0FVRElPX0FMSUdOX1RSQU5TRkVSLAorCX0KK30sCiAKIC8qIERpZ2lkZXNpZ24gTWJveCAqLwogewpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IGI0NWU1NGMuLjlhOWRhMDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJoZWxwZXIuaCIKICNpbmNsdWRlICJlbmRwb2ludC5oIgogI2luY2x1ZGUgInBjbS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8qCiAgKiBoYW5kbGUgdGhlIHF1aXJrcyBmb3IgdGhlIGNvbnRhaW5lZCBpbnRlcmZhY2VzCmRpZmYgLS1naXQgYS90b29scy9maXJld2lyZS9NYWtlZmlsZSBiL3Rvb2xzL2ZpcmV3aXJlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNzY3YWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maXJld2lyZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACitwcmVmaXggPSAvdXNyCitub3N5LWR1bXAtdmVyc2lvbiA9IDAuNAorCitDQyA9IGdjYworCithbGwgOiBub3N5LWR1bXAKKworbm9zeS1kdW1wIDogQ0ZMQUdTID0gLVdhbGwgLU8yIC1nCitub3N5LWR1bXAgOiBDUFBGTEFHUyA9IC1EVkVSU0lPTj1cIiQobm9zeS1kdW1wLXZlcnNpb24pXCIgLUkuLi8uLi9kcml2ZXJzL2ZpcmV3aXJlCitub3N5LWR1bXAgOiBMREZMQUdTID0gLWcKK25vc3ktZHVtcCA6IExETElCUyA9IC1scG9wdAorCitub3N5LWR1bXAgOiBub3N5LWR1bXAubyBkZWNvZGUtZmNwLm8KKworY2xlYW4gOgorCXJtIC1yZiAqLm8gbm9zeS1kdW1wCisKK2luc3RhbGwgOgorCWluc3RhbGwgbm9zeS1kdW1wICQocHJlZml4KS9iaW4vbm9zeS1kdW1wCmRpZmYgLS1naXQgYS90b29scy9maXJld2lyZS9kZWNvZGUtZmNwLmMgYi90b29scy9maXJld2lyZS9kZWNvZGUtZmNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxMjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ZpcmV3aXJlL2RlY29kZS1mY3AuYwpAQCAtMCwwICsxLDIxMyBAQAorI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNvbnN0YW50cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAibm9zeS1kdW1wLmgiCisKKyNkZWZpbmUgQ1NSX0ZDUF9DT01NQU5ECQkJMHhmZmZmZjAwMDBiMDB1bGwKKyNkZWZpbmUgQ1NSX0ZDUF9SRVNQT05TRQkJMHhmZmZmZjAwMDBkMDB1bGwKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjdHlwZV9uYW1lc1tdID0geworCVsweDBdID0gImNvbnRyb2wiLAkJWzB4OF0gPSAibm90IGltcGxlbWVudGVkIiwKKwlbMHgxXSA9ICJzdGF0dXMiLAkJWzB4OV0gPSAiYWNjZXB0ZWQiLAorCVsweDJdID0gInNwZWNpZmljIGlucXVpcnkiLAlbMHhhXSA9ICJyZWplY3RlZCIsCisJWzB4M10gPSAibm90aWZ5IiwJCVsweGJdID0gImluIHRyYW5zaXRpb24iLAorCVsweDRdID0gImdlbmVyYWwgaW5xdWlyeSIsCVsweGNdID0gInN0YWJsZSIsCisJWzB4NV0gPSAiKHJlc2VydmVkIDB4MDUpIiwJWzB4ZF0gPSAiY2hhbmdlZCIsCisJWzB4Nl0gPSAiKHJlc2VydmVkIDB4MDYpIiwJWzB4ZV0gPSAiKHJlc2VydmVkIDB4MGUpIiwKKwlbMHg3XSA9ICIocmVzZXJ2ZWQgMHgwNykiLAlbMHhmXSA9ICJpbnRlcmltIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3VidW5pdF90eXBlX25hbWVzW10gPSB7CisJWzB4MDBdID0gIm1vbml0b3IiLAkJWzB4MTBdID0gIihyZXNlcnZlZCAweDEwKSIsCisJWzB4MDFdID0gImF1ZGlvIiwJCVsweDExXSA9ICIocmVzZXJ2ZWQgMHgxMSkiLAorCVsweDAyXSA9ICJwcmludGVyIiwJCVsweDEyXSA9ICIocmVzZXJ2ZWQgMHgxMikiLAorCVsweDAzXSA9ICJkaXNjIiwJCVsweDEzXSA9ICIocmVzZXJ2ZWQgMHgxMykiLAorCVsweDA0XSA9ICJ0YXBlIHJlY29yZGVyL3BsYXllciIsWzB4MTRdID0gIihyZXNlcnZlZCAweDE0KSIsCisJWzB4MDVdID0gInR1bmVyIiwJCVsweDE1XSA9ICIocmVzZXJ2ZWQgMHgxNSkiLAorCVsweDA2XSA9ICJjYSIsCQkJWzB4MTZdID0gIihyZXNlcnZlZCAweDE2KSIsCisJWzB4MDddID0gImNhbWVyYSIsCQlbMHgxN10gPSAiKHJlc2VydmVkIDB4MTcpIiwKKwlbMHgwOF0gPSAiKHJlc2VydmVkIDB4MDgpIiwJWzB4MThdID0gIihyZXNlcnZlZCAweDE4KSIsCisJWzB4MDldID0gInBhbmVsIiwJCVsweDE5XSA9ICIocmVzZXJ2ZWQgMHgxOSkiLAorCVsweDBhXSA9ICJidWxsZXRpbiBib2FyZCIsCVsweDFhXSA9ICIocmVzZXJ2ZWQgMHgxYSkiLAorCVsweDBiXSA9ICJjYW1lcmEgc3RvcmFnZSIsCVsweDFiXSA9ICIocmVzZXJ2ZWQgMHgxYikiLAorCVsweDBjXSA9ICIocmVzZXJ2ZWQgMHgwYykiLAlbMHgxY10gPSAidmVuZG9yIHVuaXF1ZSIsCisJWzB4MGRdID0gIihyZXNlcnZlZCAweDBkKSIsCVsweDFkXSA9ICJhbGwgc3VidW5pdCB0eXBlcyIsCisJWzB4MGVdID0gIihyZXNlcnZlZCAweDBlKSIsCVsweDFlXSA9ICJzdWJ1bml0X3R5cGUgZXh0ZW5kZWQgdG8gbmV4dCBieXRlIiwKKwlbMHgwZl0gPSAiKHJlc2VydmVkIDB4MGYpIiwJWzB4MWZdID0gInVuaXQiLAorfTsKKworc3RydWN0IGF2Y19lbnVtIHsKKwlpbnQgdmFsdWU7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCBhdmNfZmllbGQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIFNob3J0IG5hbWUgZm9yIGZpZWxkLiAqLworCWludCBvZmZzZXQ7CQkvKiBMb2NhdGlvbiBvZiBmaWVsZCwgc3BlY2lmaWVkIGluIGJpdHM7ICovCisJCQkJLyogbmVnYXRpdmUgbWVhbnMgZnJvbSBlbmQgb2YgcGFja2V0LiAgICAqLworCWludCB3aWR0aDsJCS8qIFdpZHRoIG9mIGZpZWxkLCAwIG1lYW5zIHVzZSBkYXRhX2xlbmd0aC4gKi8KKwlzdHJ1Y3QgYXZjX2VudW0gKm5hbWVzOworfTsKKworc3RydWN0IGF2Y19vcGNvZGVfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgYXZjX2ZpZWxkIGZpZWxkc1s4XTsKK307CisKK3N0cnVjdCBhdmNfZW51bSBwb3dlcl9maWVsZF9uYW1lc1tdID0geworCXsgMHg3MCwgIm9uIiB9LAorCXsgMHg2MCwgIm9mZiIgfSwKKwl7IH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXZjX29wY29kZV9pbmZvIG9wY29kZV9pbmZvWzI1Nl0gPSB7CisKKwkvKiBUQSBEb2N1bWVudCAxOTk5MDI2ICovCisJLyogQVYvQyBEaWdpdGFsIEludGVyZmFjZSBDb21tYW5kIFNldCBHZW5lcmFsIFNwZWNpZmljYXRpb24gNC4wICovCisJWzB4YjJdID0geyAicG93ZXIiLCB7CisJCQl7ICJzdGF0ZSIsIDAsIDgsIHBvd2VyX2ZpZWxkX25hbWVzIH0KKwkJfQorCX0sCisJWzB4MzBdID0geyAidW5pdCBpbmZvIiwgeworCQkJeyAiZm9vIiwgMCwgOCB9LAorCQkJeyAidW5pdF90eXBlIiwgOCwgNSB9LAorCQkJeyAidW5pdCIsIDEzLCAzIH0sCisJCQl7ICJjb21wYW55IGlkIiwgMTYsIDI0IH0sCisJCX0KKwl9LAorCVsweDMxXSA9IHsgInN1YnVuaXQgaW5mbyIgfSwKKwlbMHgwMV0gPSB7ICJyZXNlcnZlIiB9LAorCVsweGIwXSA9IHsgInZlcnNpb24iIH0sCisJWzB4MDBdID0geyAidmVuZG9yIGRlcGVuZGVudCIgfSwKKwlbMHgwMl0gPSB7ICJwbHVnIGluZm8iIH0sCisJWzB4MTJdID0geyAiY2hhbm5lbCB1c2FnZSIgfSwKKwlbMHgyNF0gPSB7ICJjb25uZWN0IiB9LAorCVsweDIwXSA9IHsgImNvbm5lY3QgYXYiIH0sCisJWzB4MjJdID0geyAiY29ubmVjdGlvbnMiIH0sCisJWzB4MTFdID0geyAiZGlnaXRhbCBpbnB1dCIgfSwKKwlbMHgxMF0gPSB7ICJkaWdpdGFsIG91dHB1dCIgfSwKKwlbMHgyNV0gPSB7ICJkaXNjb25uZWN0IiB9LAorCVsweDIxXSA9IHsgImRpc2Nvbm5lY3QgYXYiIH0sCisJWzB4MTldID0geyAiaW5wdXQgcGx1ZyBzaWduYWwgZm9ybWF0IiB9LAorCVsweDE4XSA9IHsgIm91dHB1dCBwbHVnIHNpZ25hbCBmb3JtYXQiIH0sCisJWzB4MWZdID0geyAiZ2VuZXJhbCBidXMgc2V0dXAiIH0sCisKKwkvKiBUQSBEb2N1bWVudCAxOTk5MDI1ICovCisJLyogQVYvQyBEZXNjcmlwdG9yIE1lY2hhbmlzbSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMS4wICovCisJWzB4MGNdID0geyAiY3JlYXRlIGRlc2NyaXB0b3IiIH0sCisJWzB4MDhdID0geyAib3BlbiBkZXNjcmlwdG9yIiB9LAorCVsweDA5XSA9IHsgInJlYWQgZGVzY3JpcHRvciIgfSwKKwlbMHgwYV0gPSB7ICJ3cml0ZSBkZXNjcmlwdG9yIiB9LAorCVsweDA1XSA9IHsgIm9wZW4gaW5mbyBibG9jayIgfSwKKwlbMHgwNl0gPSB7ICJyZWFkIGluZm8gYmxvY2siIH0sCisJWzB4MDddID0geyAid3JpdGUgaW5mbyBibG9jayIgfSwKKwlbMHgwYl0gPSB7ICJzZWFyY2ggZGVzY3JpcHRvciIgfSwKKwlbMHgwZF0gPSB7ICJvYmplY3QgbnVtYmVyIHNlbGVjdCIgfSwKKworCS8qIFRBIERvY3VtZW50IDE5OTkwMTUgKi8KKwkvKiBBVi9DIENvbW1hbmQgU2V0IGZvciBSYXRlIENvbnRyb2wgb2YgSXNvY2hyb25vdXMgRGF0YSBGbG93IDEuMCAqLworCVsweGIzXSA9IHsgInJhdGUiLCB7CisJCQl7ICJzdWJmdW5jdGlvbiIsIDAsIDggfSwKKwkJCXsgInJlc3VsdCIsIDgsIDggfSwKKwkJCXsgInBsdWdfdHlwZSIsIDE2LCA4IH0sCisJCQl7ICJwbHVnX2lkIiwgMTYsIDggfSwKKwkJfQorCX0sCisKKwkvKiBUQSBEb2N1bWVudCAxOTk5MDA4ICovCisJLyogQVYvQyBBdWRpbyBTdWJ1bml0IFNwZWNpZmljYXRpb24gMS4wICovCisJWzB4YjhdID0geyAiZnVuY3Rpb24gYmxvY2siIH0sCisKKwkvKiBUQSBEb2N1bWVudCAyMDAxMDAxICovCisJLyogQVYvQyBQYW5lbCBTdWJ1bml0IFNwZWNpZmljYXRpb24gMS4xICovCisJWzB4N2RdID0geyAiZ3VpIHVwZGF0ZSIgfSwKKwlbMHg3ZV0gPSB7ICJwdXNoIGd1aSBkYXRhIiB9LAorCVsweDdmXSA9IHsgInVzZXIgYWN0aW9uIiB9LAorCVsweDdjXSA9IHsgInBhc3MgdGhyb3VnaCIgfSwKKworCS8qICovCisJWzB4MjZdID0geyAiYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24iIH0sCit9OworCitzdHJ1Y3QgYXZjX2ZyYW1lIHsKKwl1aW50MzJfdCBvcGVyYW5kMDo4OworCXVpbnQzMl90IG9wY29kZTo4OworCXVpbnQzMl90IHN1YnVuaXRfaWQ6MzsKKwl1aW50MzJfdCBzdWJ1bml0X3R5cGU6NTsKKwl1aW50MzJfdCBjdHlwZTo0OworCXVpbnQzMl90IGN0czo0OworfTsKKworc3RhdGljIHZvaWQKK2RlY29kZV9hdmMoc3RydWN0IGxpbmtfdHJhbnNhY3Rpb24gKnQpCit7CisJc3RydWN0IGF2Y19mcmFtZSAqZnJhbWUgPQorCSAgICAoc3RydWN0IGF2Y19mcmFtZSAqKSB0LT5yZXF1ZXN0LT5wYWNrZXQud3JpdGVfYmxvY2suZGF0YTsKKwljb25zdCBzdHJ1Y3QgYXZjX29wY29kZV9pbmZvICppbmZvOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciBidWZmZXJbMzJdOworCWludCBpOworCisJaW5mbyA9ICZvcGNvZGVfaW5mb1tmcmFtZS0+b3Bjb2RlXTsKKwlpZiAoaW5mby0+bmFtZSA9PSBOVUxMKSB7CisJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkgIih1bmtub3duIG9wY29kZSAweCUwMngpIiwgZnJhbWUtPm9wY29kZSk7CisJCW5hbWUgPSBidWZmZXI7CisJfSBlbHNlIHsKKwkJbmFtZSA9IGluZm8tPm5hbWU7CisJfQorCisJcHJpbnRmKCJhdi9jICVzLCBzdWJ1bml0X3R5cGU9JXMsIHN1YnVuaXRfaWQ9JWQsIG9wY29kZT0lcyIsCisJICAgIGN0eXBlX25hbWVzW2ZyYW1lLT5jdHlwZV0sIHN1YnVuaXRfdHlwZV9uYW1lc1tmcmFtZS0+c3VidW5pdF90eXBlXSwKKwkgICAgZnJhbWUtPnN1YnVuaXRfaWQsIG5hbWUpOworCisJZm9yIChpID0gMDsgaW5mby0+ZmllbGRzW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQorCQlwcmludGYoIiwgJXMiLCBpbmZvLT5maWVsZHNbaV0ubmFtZSk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK2ludAorZGVjb2RlX2ZjcChzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdCkKK3sKKwlzdHJ1Y3QgYXZjX2ZyYW1lICpmcmFtZSA9CisJICAgIChzdHJ1Y3QgYXZjX2ZyYW1lICopIHQtPnJlcXVlc3QtPnBhY2tldC53cml0ZV9ibG9jay5kYXRhOworCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQgPQorCSAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZykgdC0+cmVxdWVzdC0+cGFja2V0LmNvbW1vbi5vZmZzZXRfaGlnaCA8PCAzMikgfAorCSAgICB0LT5yZXF1ZXN0LT5wYWNrZXQuY29tbW9uLm9mZnNldF9sb3c7CisKKwlpZiAodC0+cmVxdWVzdC0+cGFja2V0LmNvbW1vbi50Y29kZSAhPSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUKQorCQlyZXR1cm4gMDsKKworCWlmIChvZmZzZXQgPT0gQ1NSX0ZDUF9DT01NQU5EIHx8IG9mZnNldCA9PSBDU1JfRkNQX1JFU1BPTlNFKSB7CisJCXN3aXRjaCAoZnJhbWUtPmN0cykgeworCQljYXNlIDB4MDA6CisJCQlkZWNvZGVfYXZjKHQpOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMToKKwkJCXByaW50ZigiY2FsIGZjcCBmcmFtZSAoY3RzPTB4MDEpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MDI6CisJCQlwcmludGYoImVocyBmY3AgZnJhbWUgKGN0cz0weDAyKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDAzOgorCQkJcHJpbnRmKCJoYXZpIGZjcCBmcmFtZSAoY3RzPTB4MDMpXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIDB4MGU6CisJCQlwcmludGYoInZlbmRvciBzcGVjaWZpYyBmY3AgZnJhbWUgKGN0cz0weDBlKVxuIik7CisJCQlicmVhazsKKwkJY2FzZSAweDBmOgorCQkJcHJpbnRmKCJleHRlbmRlZCBjdHNcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoInJlc2VydmVkIGZjcCBmcmFtZSAoY3R4PTB4JTAyeClcbiIsIGZyYW1lLT5jdHMpOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpcmV3aXJlL2xpc3QuaCBiL3Rvb2xzL2ZpcmV3aXJlL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWY0YmRhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZmlyZXdpcmUvbGlzdC5oCkBAIC0wLDAgKzEsNjIgQEAKK3N0cnVjdCBsaXN0IHsKKwlzdHJ1Y3QgbGlzdCAqbmV4dCwgKnByZXY7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfaW5pdChzdHJ1Y3QgbGlzdCAqbGlzdCkKK3sKKwlsaXN0LT5uZXh0ID0gbGlzdDsKKwlsaXN0LT5wcmV2ID0gbGlzdDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2xpc3RfZW1wdHkoc3RydWN0IGxpc3QgKmxpc3QpCit7CisJcmV0dXJuIGxpc3QtPm5leHQgPT0gbGlzdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitsaXN0X2luc2VydChzdHJ1Y3QgbGlzdCAqbGluaywgc3RydWN0IGxpc3QgKm5ld19saW5rKQoreworCW5ld19saW5rLT5wcmV2CQk9IGxpbmstPnByZXY7CisJbmV3X2xpbmstPm5leHQJCT0gbGluazsKKwluZXdfbGluay0+cHJldi0+bmV4dAk9IG5ld19saW5rOworCW5ld19saW5rLT5uZXh0LT5wcmV2CT0gbmV3X2xpbms7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbGlzdF9hcHBlbmQoc3RydWN0IGxpc3QgKmxpc3QsIHN0cnVjdCBsaXN0ICpuZXdfbGluaykKK3sKKwlsaXN0X2luc2VydCgoc3RydWN0IGxpc3QgKilsaXN0LCBuZXdfbGluayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorbGlzdF9wcmVwZW5kKHN0cnVjdCBsaXN0ICpsaXN0LCBzdHJ1Y3QgbGlzdCAqbmV3X2xpbmspCit7CisJbGlzdF9pbnNlcnQobGlzdC0+bmV4dCwgbmV3X2xpbmspOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xpc3RfcmVtb3ZlKHN0cnVjdCBsaXN0ICpsaW5rKQoreworCWxpbmstPnByZXYtPm5leHQgPSBsaW5rLT5uZXh0OworCWxpbmstPm5leHQtPnByZXYgPSBsaW5rLT5wcmV2OworfQorCisjZGVmaW5lIGxpc3RfZW50cnkobGluaywgdHlwZSwgbWVtYmVyKSBcCisJKCh0eXBlICopKChjaGFyICopKGxpbmspLSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPm1lbWJlcikpKQorCisjZGVmaW5lIGxpc3RfaGVhZChsaXN0LCB0eXBlLCBtZW1iZXIpCQlcCisJbGlzdF9lbnRyeSgobGlzdCktPm5leHQsIHR5cGUsIG1lbWJlcikKKworI2RlZmluZSBsaXN0X3RhaWwobGlzdCwgdHlwZSwgbWVtYmVyKQkJXAorCWxpc3RfZW50cnkoKGxpc3QpLT5wcmV2LCB0eXBlLCBtZW1iZXIpCisKKyNkZWZpbmUgbGlzdF9uZXh0KGVsbSwgbWVtYmVyKQkJCQkJXAorCWxpc3RfZW50cnkoKGVsbSktPm1lbWJlci5uZXh0LCB0eXBlb2YoKmVsbSksIG1lbWJlcikKKworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgbGlzdCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfaGVhZChsaXN0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAobGlzdCk7CQkJCVwKKwkgICAgIHBvcyA9IGxpc3RfbmV4dChwb3MsIG1lbWJlcikpCisKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpcmV3aXJlL25vc3ktZHVtcC5jIGIvdG9vbHMvZmlyZXdpcmUvbm9zeS1kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzYjc3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ZpcmV3aXJlL25vc3ktZHVtcC5jCkBAIC0wLDAgKzEsMTAzMSBAQAorLyoKKyAqIG5vc3ktZHVtcCAtIEludGVyZmFjZSB0byBzbm9vcCBtb2RlIGRyaXZlciBmb3IgVEkgUENJTHlueCAxMzk0IGNvbnRyb2xsZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBLcmlzdGlhbiBIw7hnc2JlcmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxieXRlc3dhcC5oPgorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPHBvcHQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAibGlzdC5oIgorI2luY2x1ZGUgIm5vc3ktZHVtcC5oIgorI2luY2x1ZGUgIm5vc3ktdXNlci5oIgorCitlbnVtIHsKKwlQQUNLRVRfRklFTERfREVUQUlMCQk9IDB4MDEsCisJUEFDS0VUX0ZJRUxEX0RBVEFfTEVOR1RICT0gMHgwMiwKKwkvKiBNYXJrcyB0aGUgZmllbGRzIHdlIHByaW50IGluIHRyYW5zYWN0aW9uIHZpZXcuICovCisJUEFDS0VUX0ZJRUxEX1RSQU5TQUNUSU9OCT0gMHgwNCwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X3BhY2tldCh1aW50MzJfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBkZWNvZGVfbGlua19wYWNrZXQoc3RydWN0IGxpbmtfcGFja2V0ICpwYWNrZXQsIHNpemVfdCBsZW5ndGgsCisJCQkgICAgICAgaW50IGluY2x1ZGVfZmxhZ3MsIGludCBleGNsdWRlX2ZsYWdzKTsKK3N0YXRpYyBpbnQgcnVuID0gMTsKK3NpZ190IHN5c19zaWdpbnRfaGFuZGxlcjsKKworc3RhdGljIGNoYXIgKm9wdGlvbl9ub3N5X2RldmljZSA9ICIvZGV2L25vc3kiOworc3RhdGljIGNoYXIgKm9wdGlvbl92aWV3ID0gInBhY2tldCI7CitzdGF0aWMgY2hhciAqb3B0aW9uX291dHB1dDsKK3N0YXRpYyBjaGFyICpvcHRpb25faW5wdXQ7CitzdGF0aWMgaW50IG9wdGlvbl9oZXg7CitzdGF0aWMgaW50IG9wdGlvbl9pc287CitzdGF0aWMgaW50IG9wdGlvbl9jeWNsZV9zdGFydDsKK3N0YXRpYyBpbnQgb3B0aW9uX3ZlcnNpb247CitzdGF0aWMgaW50IG9wdGlvbl92ZXJib3NlOworCitlbnVtIHsKKwlWSUVXX1RSQU5TQUNUSU9OLAorCVZJRVdfUEFDS0VULAorCVZJRVdfU1RBVFMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvcHRPcHRpb24gb3B0aW9uc1tdID0geworCXsKKwkJLmxvbmdOYW1lCT0gImRldmljZSIsCisJCS5zaG9ydE5hbWUJPSAnZCcsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfU1RSSU5HLAorCQkuYXJnCQk9ICZvcHRpb25fbm9zeV9kZXZpY2UsCisJCS5kZXNjcmlwCT0gIlBhdGggdG8gbm9zeSBkZXZpY2UuIiwKKwkJLmFyZ0Rlc2NyaXAJPSAiREVWSUNFIgorCX0sCisJeworCQkubG9uZ05hbWUJPSAidmlldyIsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfU1RSSU5HLAorCQkuYXJnCQk9ICZvcHRpb25fdmlldywKKwkJLmRlc2NyaXAJPSAiU3BlY2lmeSB2aWV3IG9mIGJ1cyB0cmFmZmljOiBwYWNrZXQsIHRyYW5zYWN0aW9uIG9yIHN0YXRzLiIsCisJCS5hcmdEZXNjcmlwCT0gIlZJRVciCisJfSwKKwl7CisJCS5sb25nTmFtZQk9ICJoZXgiLAorCQkuc2hvcnROYW1lCT0gJ3gnLAorCQkuYXJnSW5mbwk9IFBPUFRfQVJHX05PTkUsCisJCS5hcmcJCT0gJm9wdGlvbl9oZXgsCisJCS5kZXNjcmlwCT0gIlByaW50IGVhY2ggcGFja2V0IGluIGhleC4iLAorCX0sCisJeworCQkubG9uZ05hbWUJPSAiaXNvIiwKKwkJLmFyZ0luZm8JPSBQT1BUX0FSR19OT05FLAorCQkuYXJnCQk9ICZvcHRpb25faXNvLAorCQkuZGVzY3JpcAk9ICJQcmludCBpc28gcGFja2V0cy4iLAorCX0sCisJeworCQkubG9uZ05hbWUJPSAiY3ljbGUtc3RhcnQiLAorCQkuYXJnSW5mbwk9IFBPUFRfQVJHX05PTkUsCisJCS5hcmcJCT0gJm9wdGlvbl9jeWNsZV9zdGFydCwKKwkJLmRlc2NyaXAJPSAiUHJpbnQgY3ljbGUgc3RhcnQgcGFja2V0cy4iLAorCX0sCisJeworCQkubG9uZ05hbWUJPSAidmVyYm9zZSIsCisJCS5zaG9ydE5hbWUJPSAndicsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfTk9ORSwKKwkJLmFyZwkJPSAmb3B0aW9uX3ZlcmJvc2UsCisJCS5kZXNjcmlwCT0gIlZlcmJvc2UgcGFja2V0IHZpZXcuIiwKKwl9LAorCXsKKwkJLmxvbmdOYW1lCT0gIm91dHB1dCIsCisJCS5zaG9ydE5hbWUJPSAnbycsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfU1RSSU5HLAorCQkuYXJnCQk9ICZvcHRpb25fb3V0cHV0LAorCQkuZGVzY3JpcAk9ICJMb2cgdG8gb3V0cHV0IGZpbGUuIiwKKwkJLmFyZ0Rlc2NyaXAJPSAiRklMRU5BTUUiCisJfSwKKwl7CisJCS5sb25nTmFtZQk9ICJpbnB1dCIsCisJCS5zaG9ydE5hbWUJPSAnaScsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfU1RSSU5HLAorCQkuYXJnCQk9ICZvcHRpb25faW5wdXQsCisJCS5kZXNjcmlwCT0gIkRlY29kZSBsb2cgZnJvbSBmaWxlLiIsCisJCS5hcmdEZXNjcmlwCT0gIkZJTEVOQU1FIgorCX0sCisJeworCQkubG9uZ05hbWUJPSAidmVyc2lvbiIsCisJCS5hcmdJbmZvCT0gUE9QVF9BUkdfTk9ORSwKKwkJLmFyZwkJPSAmb3B0aW9uX3ZlcnNpb24sCisJCS5kZXNjcmlwCT0gIlNwZWNpZnkgcHJpbnQgdmVyc2lvbiBpbmZvLiIsCisJfSwKKwlQT1BUX0FVVE9IRUxQCisJUE9QVF9UQUJMRUVORAorfTsKKworLyogQWxsb3cgYWxsIF5DIGV4Y2VwdCB0aGUgZmlyc3QgdG8gaW50ZXJydXB0IHRoZSBwcm9ncmFtIGluIHRoZSB1c3VhbCB3YXkuICovCitzdGF0aWMgdm9pZAorc2lnaW50X2hhbmRsZXIoaW50IHNpZ25hbF9udW0pCit7CisJaWYgKHJ1biA9PSAxKSB7CisJCXJ1biA9IDA7CisJCXNpZ25hbChTSUdJTlQsIFNJR19ERkwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzdWJhY3Rpb24gKgorc3ViYWN0aW9uX2NyZWF0ZSh1aW50MzJfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc3ViYWN0aW9uICpzYTsKKworCS8qIHdlIHB1dCB0aGUgYWNrIGluIHRoZSBzdWJhY3Rpb24gc3RydWN0IGZvciBlYXN5IGFjY2Vzcy4gKi8KKwlzYSA9IG1hbGxvYyhzaXplb2YgKnNhIC0gc2l6ZW9mIHNhLT5wYWNrZXQgKyBsZW5ndGgpOworCXNhLT5hY2sgPSBkYXRhW2xlbmd0aCAvIDQgLSAxXTsKKwlzYS0+bGVuZ3RoID0gbGVuZ3RoOworCW1lbWNweSgmc2EtPnBhY2tldCwgZGF0YSwgbGVuZ3RoKTsKKworCXJldHVybiBzYTsKK30KKworc3RhdGljIHZvaWQKK3N1YmFjdGlvbl9kZXN0cm95KHN0cnVjdCBzdWJhY3Rpb24gKnNhKQoreworCWZyZWUoc2EpOworfQorCitzdGF0aWMgc3RydWN0IGxpc3QgcGVuZGluZ190cmFuc2FjdGlvbl9saXN0ID0geworCSZwZW5kaW5nX3RyYW5zYWN0aW9uX2xpc3QsICZwZW5kaW5nX3RyYW5zYWN0aW9uX2xpc3QKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqCitsaW5rX3RyYW5zYWN0aW9uX2xvb2t1cChpbnQgcmVxdWVzdF9ub2RlLCBpbnQgcmVzcG9uc2Vfbm9kZSwgaW50IHRsYWJlbCkKK3sKKwlzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnBlbmRpbmdfdHJhbnNhY3Rpb25fbGlzdCwgbGluaykgeworCQlpZiAodC0+cmVxdWVzdF9ub2RlID09IHJlcXVlc3Rfbm9kZSAmJgorCQkgICAgdC0+cmVzcG9uc2Vfbm9kZSA9PSByZXNwb25zZV9ub2RlICYmCisJCSAgICB0LT50bGFiZWwgPT0gdGxhYmVsKQorCQkJcmV0dXJuIHQ7CisJfQorCisJdCA9IG1hbGxvYyhzaXplb2YgKnQpOworCXQtPnJlcXVlc3Rfbm9kZSA9IHJlcXVlc3Rfbm9kZTsKKwl0LT5yZXNwb25zZV9ub2RlID0gcmVzcG9uc2Vfbm9kZTsKKwl0LT50bGFiZWwgPSB0bGFiZWw7CisJbGlzdF9pbml0KCZ0LT5yZXF1ZXN0X2xpc3QpOworCWxpc3RfaW5pdCgmdC0+cmVzcG9uc2VfbGlzdCk7CisKKwlsaXN0X2FwcGVuZCgmcGVuZGluZ190cmFuc2FjdGlvbl9saXN0LCAmdC0+bGluayk7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHZvaWQKK2xpbmtfdHJhbnNhY3Rpb25fZGVzdHJveShzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdCkKK3sKKwlzdHJ1Y3Qgc3ViYWN0aW9uICpzYTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmdC0+cmVxdWVzdF9saXN0KSkgeworCQlzYSA9IGxpc3RfaGVhZCgmdC0+cmVxdWVzdF9saXN0LCBzdHJ1Y3Qgc3ViYWN0aW9uLCBsaW5rKTsKKwkJbGlzdF9yZW1vdmUoJnNhLT5saW5rKTsKKwkJc3ViYWN0aW9uX2Rlc3Ryb3koc2EpOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnQtPnJlc3BvbnNlX2xpc3QpKSB7CisJCXNhID0gbGlzdF9oZWFkKCZ0LT5yZXNwb25zZV9saXN0LCBzdHJ1Y3Qgc3ViYWN0aW9uLCBsaW5rKTsKKwkJbGlzdF9yZW1vdmUoJnNhLT5saW5rKTsKKwkJc3ViYWN0aW9uX2Rlc3Ryb3koc2EpOworCX0KKwlmcmVlKHQpOworfQorCitzdHJ1Y3QgcHJvdG9jb2xfZGVjb2RlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCpkZWNvZGUpKHN0cnVjdCBsaW5rX3RyYW5zYWN0aW9uICp0KTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9jb2xfZGVjb2RlciBwcm90b2NvbF9kZWNvZGVyc1tdID0geworCXsgIkZDUCIsIGRlY29kZV9mY3AgfQorfTsKKworc3RhdGljIHZvaWQKK2hhbmRsZV90cmFuc2FjdGlvbihzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdCkKK3sKKwlzdHJ1Y3Qgc3ViYWN0aW9uICpzYTsKKwlpbnQgaTsKKworCWlmICghdC0+cmVxdWVzdCkgeworCQlwcmludGYoIkJVRyBpbiBoYW5kbGVfdHJhbnNhY3Rpb25cbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFycmF5X2xlbmd0aChwcm90b2NvbF9kZWNvZGVycyk7IGkrKykKKwkJaWYgKHByb3RvY29sX2RlY29kZXJzW2ldLmRlY29kZSh0KSkKKwkJCWJyZWFrOworCisJLyogSEFDSzogZGVjb2RlIG9ubHkgZmNwIHJpZ2h0IG5vdy4gKi8KKwlyZXR1cm47CisKKwlkZWNvZGVfbGlua19wYWNrZXQoJnQtPnJlcXVlc3QtPnBhY2tldCwgdC0+cmVxdWVzdC0+bGVuZ3RoLAorCQkJICAgUEFDS0VUX0ZJRUxEX1RSQU5TQUNUSU9OLCAwKTsKKwlpZiAodC0+cmVzcG9uc2UpCisJCWRlY29kZV9saW5rX3BhY2tldCgmdC0+cmVzcG9uc2UtPnBhY2tldCwgdC0+cmVxdWVzdC0+bGVuZ3RoLAorCQkJCSAgIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiwgMCk7CisJZWxzZQorCQlwcmludGYoIltubyByZXNwb25zZV0iKTsKKworCWlmIChvcHRpb25fdmVyYm9zZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNhLCAmdC0+cmVxdWVzdF9saXN0LCBsaW5rKQorCQkJcHJpbnRfcGFja2V0KCh1aW50MzJfdCAqKSAmc2EtPnBhY2tldCwgc2EtPmxlbmd0aCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2EsICZ0LT5yZXNwb25zZV9saXN0LCBsaW5rKQorCQkJcHJpbnRfcGFja2V0KCh1aW50MzJfdCAqKSAmc2EtPnBhY2tldCwgc2EtPmxlbmd0aCk7CisJfQorCXByaW50ZigiXHJcbiIpOworCisJbGlua190cmFuc2FjdGlvbl9kZXN0cm95KHQpOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJfcGVuZGluZ190cmFuc2FjdGlvbl9saXN0KHZvaWQpCit7CisJc3RydWN0IGxpbmtfdHJhbnNhY3Rpb24gKnQ7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBlbmRpbmdfdHJhbnNhY3Rpb25fbGlzdCkpIHsKKwkJdCA9IGxpc3RfaGVhZCgmcGVuZGluZ190cmFuc2FjdGlvbl9saXN0LAorCQkJICAgICAgc3RydWN0IGxpbmtfdHJhbnNhY3Rpb24sIGxpbmspOworCQlsaXN0X3JlbW92ZSgmdC0+bGluayk7CisJCWxpbmtfdHJhbnNhY3Rpb25fZGVzdHJveSh0KTsKKwkJLyogcHJpbnQgdW5maW5pc2hlZCB0cmFuc2FjdGlvbnMgKi8KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGNvZGVfbmFtZXNbXSA9IHsKKwlbMHgwXSA9ICJ3cml0ZV9xdWFkbGV0X3JlcXVlc3QiLAlbMHg2XSA9ICJyZWFkX3F1YWRsZXRfcmVzcG9uc2UiLAorCVsweDFdID0gIndyaXRlX2Jsb2NrX3JlcXVlc3QiLAkJWzB4N10gPSAicmVhZF9ibG9ja19yZXNwb25zZSIsCisJWzB4Ml0gPSAid3JpdGVfcmVzcG9uc2UiLAkJWzB4OF0gPSAiY3ljbGVfc3RhcnQiLAorCVsweDNdID0gInJlc2VydmVkIiwJCQlbMHg5XSA9ICJsb2NrX3JlcXVlc3QiLAorCVsweDRdID0gInJlYWRfcXVhZGxldF9yZXF1ZXN0IiwJCVsweGFdID0gImlzb19kYXRhIiwKKwlbMHg1XSA9ICJyZWFkX2Jsb2NrX3JlcXVlc3QiLAkJWzB4Yl0gPSAibG9ja19yZXNwb25zZSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFja19uYW1lc1tdID0geworCVsweDBdID0gIm5vIGFjayIsCQkJWzB4OF0gPSAicmVzZXJ2ZWQgKDB4MDgpIiwKKwlbMHgxXSA9ICJhY2tfY29tcGxldGUiLAkJCVsweDldID0gInJlc2VydmVkICgweDA5KSIsCisJWzB4Ml0gPSAiYWNrX3BlbmRpbmciLAkJCVsweGFdID0gInJlc2VydmVkICgweDBhKSIsCisJWzB4M10gPSAicmVzZXJ2ZWQgKDB4MDMpIiwJCVsweGJdID0gInJlc2VydmVkICgweDBiKSIsCisJWzB4NF0gPSAiYWNrX2J1c3lfeCIsCQkJWzB4Y10gPSAicmVzZXJ2ZWQgKDB4MGMpIiwKKwlbMHg1XSA9ICJhY2tfYnVzeV9hIiwJCQlbMHhkXSA9ICJhY2tfZGF0YV9lcnJvciIsCisJWzB4Nl0gPSAiYWNrX2J1c3lfYiIsCQkJWzB4ZV0gPSAiYWNrX3R5cGVfZXJyb3IiLAorCVsweDddID0gInJlc2VydmVkICgweDA3KSIsCQlbMHhmXSA9ICJyZXNlcnZlZCAoMHgwZikiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByY29kZV9uYW1lc1tdID0geworCVsweDBdID0gImNvbXBsZXRlIiwJCQlbMHg0XSA9ICJjb25mbGljdF9lcnJvciIsCisJWzB4MV0gPSAicmVzZXJ2ZWQgKDB4MDEpIiwJCVsweDVdID0gImRhdGFfZXJyb3IiLAorCVsweDJdID0gInJlc2VydmVkICgweDAyKSIsCQlbMHg2XSA9ICJ0eXBlX2Vycm9yIiwKKwlbMHgzXSA9ICJyZXNlcnZlZCAoMHgwMykiLAkJWzB4N10gPSAiYWRkcmVzc19lcnJvciIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJldHJ5X25hbWVzW10gPSB7CisJWzB4MF0gPSAicmV0cnlfMSIsCisJWzB4MV0gPSAicmV0cnlfeCIsCisJWzB4Ml0gPSAicmV0cnlfYSIsCisJWzB4M10gPSAicmV0cnlfYiIsCit9OworCitlbnVtIHsKKwlQQUNLRVRfUkVTRVJWRUQsCisJUEFDS0VUX1JFUVVFU1QsCisJUEFDS0VUX1JFU1BPTlNFLAorCVBBQ0tFVF9PVEhFUiwKK307CisKK3N0cnVjdCBwYWNrZXRfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdHlwZTsKKwlpbnQgcmVzcG9uc2VfdGNvZGU7CisJY29uc3Qgc3RydWN0IHBhY2tldF9maWVsZCAqZmllbGRzOworCWludCBmaWVsZF9jb3VudDsKK307CisKK3N0cnVjdCBwYWNrZXRfZmllbGQgeworCWNvbnN0IGNoYXIgKm5hbWU7IC8qIFNob3J0IG5hbWUgZm9yIGZpZWxkLiAqLworCWludCBvZmZzZXQ7CS8qIExvY2F0aW9uIG9mIGZpZWxkLCBzcGVjaWZpZWQgaW4gYml0czsgKi8KKwkJCS8qIG5lZ2F0aXZlIG1lYW5zIGZyb20gZW5kIG9mIHBhY2tldC4gICAgKi8KKwlpbnQgd2lkdGg7CS8qIFdpZHRoIG9mIGZpZWxkLCAwIG1lYW5zIHVzZSBkYXRhX2xlbmd0aC4gKi8KKwlpbnQgZmxhZ3M7CS8qIFNob3cgb3B0aW9ucy4gKi8KKwljb25zdCBjaGFyICogY29uc3QgKnZhbHVlX25hbWVzOworfTsKKworI2RlZmluZSBDT01NT05fUkVRVUVTVF9GSUVMRFMJCQkJCQlcCisJeyAiZGVzdCIsIDAsIDE2LCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04gfSwJCQlcCisJeyAidGwiLCAxNiwgNiB9LAkJCQkJCVwKKwl7ICJydCIsIDIyLCAyLCBQQUNLRVRfRklFTERfREVUQUlMLCByZXRyeV9uYW1lcyB9LAkJXAorCXsgInRjb2RlIiwgMjQsIDQsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiwgdGNvZGVfbmFtZXMgfSwJXAorCXsgInByaSIsIDI4LCA0LCBQQUNLRVRfRklFTERfREVUQUlMIH0sCQkJCVwKKwl7ICJzcmMiLCAzMiwgMTYsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiB9LAkJCVwKKwl7ICJvZmZzIiwgNDgsIDQ4LCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04gfQorCisjZGVmaW5lIENPTU1PTl9SRVNQT05TRV9GSUVMRFMJCQkJCQlcCisJeyAiZGVzdCIsIDAsIDE2IH0sCQkJCQkJXAorCXsgInRsIiwgMTYsIDYgfSwJCQkJCQlcCisJeyAicnQiLCAyMiwgMiwgUEFDS0VUX0ZJRUxEX0RFVEFJTCwgcmV0cnlfbmFtZXMgfSwJCVwKKwl7ICJ0Y29kZSIsIDI0LCA0LCAwLCB0Y29kZV9uYW1lcyB9LAkJCQlcCisJeyAicHJpIiwgMjgsIDQsIFBBQ0tFVF9GSUVMRF9ERVRBSUwgfSwJCQkJXAorCXsgInNyYyIsIDMyLCAxNiB9LAkJCQkJCVwKKwl7ICJyY29kZSIsIDQ4LCA0LCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04sIHJjb2RlX25hbWVzIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYWNrZXRfZmllbGQgcmVhZF9xdWFkbGV0X3JlcXVlc3RfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFUVVFU1RfRklFTERTLAorCXsgImNyYyIsIDk2LCAzMiwgUEFDS0VUX0ZJRUxEX0RFVEFJTCB9LAorCXsgImFjayIsIDE1NiwgNCwgMCwgYWNrX25hbWVzIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhY2tldF9maWVsZCByZWFkX3F1YWRsZXRfcmVzcG9uc2VfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFU1BPTlNFX0ZJRUxEUywKKwl7ICJkYXRhIiwgOTYsIDMyLCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04gfSwKKwl7ICJjcmMiLCAxMjgsIDMyLCBQQUNLRVRfRklFTERfREVUQUlMIH0sCisJeyAiYWNrIiwgMTg4LCA0LCAwLCBhY2tfbmFtZXMgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFja2V0X2ZpZWxkIHJlYWRfYmxvY2tfcmVxdWVzdF9maWVsZHNbXSA9IHsKKwlDT01NT05fUkVRVUVTVF9GSUVMRFMsCisJeyAiZGF0YV9sZW5ndGgiLCA5NiwgMTYsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiB9LAorCXsgImV4dGVuZGVkX3Rjb2RlIiwgMTEyLCAxNiB9LAorCXsgImNyYyIsIDEyOCwgMzIsIFBBQ0tFVF9GSUVMRF9ERVRBSUwgfSwKKwl7ICJhY2siLCAxODgsIDQsIDAsIGFja19uYW1lcyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYWNrZXRfZmllbGQgYmxvY2tfcmVzcG9uc2VfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFU1BPTlNFX0ZJRUxEUywKKwl7ICJkYXRhX2xlbmd0aCIsIDk2LCAxNiwgUEFDS0VUX0ZJRUxEX0RBVEFfTEVOR1RIIH0sCisJeyAiZXh0ZW5kZWRfdGNvZGUiLCAxMTIsIDE2IH0sCisJeyAiY3JjIiwgMTI4LCAzMiwgUEFDS0VUX0ZJRUxEX0RFVEFJTCB9LAorCXsgImRhdGEiLCAxNjAsIDAsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiB9LAorCXsgImNyYyIsIC02NCwgMzIsIFBBQ0tFVF9GSUVMRF9ERVRBSUwgfSwKKwl7ICJhY2siLCAtNCwgNCwgMCwgYWNrX25hbWVzIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBhY2tldF9maWVsZCB3cml0ZV9xdWFkbGV0X3JlcXVlc3RfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFUVVFU1RfRklFTERTLAorCXsgImRhdGEiLCA5NiwgMzIsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiB9LAorCXsgImFjayIsIC00LCA0LCAwLCBhY2tfbmFtZXMgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFja2V0X2ZpZWxkIGJsb2NrX3JlcXVlc3RfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFUVVFU1RfRklFTERTLAorCXsgImRhdGFfbGVuZ3RoIiwgOTYsIDE2LCBQQUNLRVRfRklFTERfREFUQV9MRU5HVEggfCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04gfSwKKwl7ICJleHRlbmRlZF90Y29kZSIsIDExMiwgMTYsIFBBQ0tFVF9GSUVMRF9UUkFOU0FDVElPTiB9LAorCXsgImNyYyIsIDEyOCwgMzIsIFBBQ0tFVF9GSUVMRF9ERVRBSUwgfSwKKwl7ICJkYXRhIiwgMTYwLCAwLCBQQUNLRVRfRklFTERfVFJBTlNBQ1RJT04gfSwKKwl7ICJjcmMiLCAtNjQsIDMyLCBQQUNLRVRfRklFTERfREVUQUlMIH0sCisJeyAiYWNrIiwgLTQsIDQsIDAsIGFja19uYW1lcyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYWNrZXRfZmllbGQgd3JpdGVfcmVzcG9uc2VfZmllbGRzW10gPSB7CisJQ09NTU9OX1JFU1BPTlNFX0ZJRUxEUywKKwl7ICJyZXNlcnZlZCIsIDY0LCAzMiwgUEFDS0VUX0ZJRUxEX0RFVEFJTCB9LAorCXsgImFjayIsIC00LCA0LCAwLCBhY2tfbmFtZXMgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFja2V0X2ZpZWxkIGlzb19kYXRhX2ZpZWxkc1tdID0geworCXsgImRhdGFfbGVuZ3RoIiwgMCwgMTYsIFBBQ0tFVF9GSUVMRF9EQVRBX0xFTkdUSCB9LAorCXsgInRhZyIsIDE2LCAyIH0sCisJeyAiY2hhbm5lbCIsIDE4LCA2IH0sCisJeyAidGNvZGUiLCAyNCwgNCwgMCwgdGNvZGVfbmFtZXMgfSwKKwl7ICJzeSIsIDI4LCA0IH0sCisJeyAiY3JjIiwgMzIsIDMyLCBQQUNLRVRfRklFTERfREVUQUlMIH0sCisJeyAiZGF0YSIsIDY0LCAwIH0sCisJeyAiY3JjIiwgLTY0LCAzMiwgUEFDS0VUX0ZJRUxEX0RFVEFJTCB9LAorCXsgImFjayIsIC00LCA0LCAwLCBhY2tfbmFtZXMgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGFja2V0X2luZm8gcGFja2V0X2luZm9bXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ3cml0ZV9xdWFkbGV0X3JlcXVlc3QiLAorCQkudHlwZQkJPSBQQUNLRVRfUkVRVUVTVCwKKwkJLnJlc3BvbnNlX3Rjb2RlCT0gVENPREVfV1JJVEVfUkVTUE9OU0UsCisJCS5maWVsZHMJCT0gd3JpdGVfcXVhZGxldF9yZXF1ZXN0X2ZpZWxkcywKKwkJLmZpZWxkX2NvdW50CT0gYXJyYXlfbGVuZ3RoKHdyaXRlX3F1YWRsZXRfcmVxdWVzdF9maWVsZHMpCisJfSwKKwl7CisJCS5uYW1lCQk9ICJ3cml0ZV9ibG9ja19yZXF1ZXN0IiwKKwkJLnR5cGUJCT0gUEFDS0VUX1JFUVVFU1QsCisJCS5yZXNwb25zZV90Y29kZQk9IFRDT0RFX1dSSVRFX1JFU1BPTlNFLAorCQkuZmllbGRzCQk9IGJsb2NrX3JlcXVlc3RfZmllbGRzLAorCQkuZmllbGRfY291bnQJPSBhcnJheV9sZW5ndGgoYmxvY2tfcmVxdWVzdF9maWVsZHMpCisJfSwKKwl7CisJCS5uYW1lCQk9ICJ3cml0ZV9yZXNwb25zZSIsCisJCS50eXBlCQk9IFBBQ0tFVF9SRVNQT05TRSwKKwkJLmZpZWxkcwkJPSB3cml0ZV9yZXNwb25zZV9maWVsZHMsCisJCS5maWVsZF9jb3VudAk9IGFycmF5X2xlbmd0aCh3cml0ZV9yZXNwb25zZV9maWVsZHMpCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyZXNlcnZlZCIsCisJCS50eXBlCQk9IFBBQ0tFVF9SRVNFUlZFRCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInJlYWRfcXVhZGxldF9yZXF1ZXN0IiwKKwkJLnR5cGUJCT0gUEFDS0VUX1JFUVVFU1QsCisJCS5yZXNwb25zZV90Y29kZQk9IFRDT0RFX1JFQURfUVVBRExFVF9SRVNQT05TRSwKKwkJLmZpZWxkcwkJPSByZWFkX3F1YWRsZXRfcmVxdWVzdF9maWVsZHMsCisJCS5maWVsZF9jb3VudAk9IGFycmF5X2xlbmd0aChyZWFkX3F1YWRsZXRfcmVxdWVzdF9maWVsZHMpCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyZWFkX2Jsb2NrX3JlcXVlc3QiLAorCQkudHlwZQkJPSBQQUNLRVRfUkVRVUVTVCwKKwkJLnJlc3BvbnNlX3Rjb2RlCT0gVENPREVfUkVBRF9CTE9DS19SRVNQT05TRSwKKwkJLmZpZWxkcwkJPSByZWFkX2Jsb2NrX3JlcXVlc3RfZmllbGRzLAorCQkuZmllbGRfY291bnQJPSBhcnJheV9sZW5ndGgocmVhZF9ibG9ja19yZXF1ZXN0X2ZpZWxkcykKKwl9LAorCXsKKwkJLm5hbWUJCT0gInJlYWRfcXVhZGxldF9yZXNwb25zZSIsCisJCS50eXBlCQk9IFBBQ0tFVF9SRVNQT05TRSwKKwkJLmZpZWxkcwkJPSByZWFkX3F1YWRsZXRfcmVzcG9uc2VfZmllbGRzLAorCQkuZmllbGRfY291bnQJPSBhcnJheV9sZW5ndGgocmVhZF9xdWFkbGV0X3Jlc3BvbnNlX2ZpZWxkcykKKwl9LAorCXsKKwkJLm5hbWUJCT0gInJlYWRfYmxvY2tfcmVzcG9uc2UiLAorCQkudHlwZQkJPSBQQUNLRVRfUkVTUE9OU0UsCisJCS5maWVsZHMJCT0gYmxvY2tfcmVzcG9uc2VfZmllbGRzLAorCQkuZmllbGRfY291bnQJPSBhcnJheV9sZW5ndGgoYmxvY2tfcmVzcG9uc2VfZmllbGRzKQorCX0sCisJeworCQkubmFtZQkJPSAiY3ljbGVfc3RhcnQiLAorCQkudHlwZQkJPSBQQUNLRVRfT1RIRVIsCisJCS5maWVsZHMJCT0gd3JpdGVfcXVhZGxldF9yZXF1ZXN0X2ZpZWxkcywKKwkJLmZpZWxkX2NvdW50CT0gYXJyYXlfbGVuZ3RoKHdyaXRlX3F1YWRsZXRfcmVxdWVzdF9maWVsZHMpCisJfSwKKwl7CisJCS5uYW1lCQk9ICJsb2NrX3JlcXVlc3QiLAorCQkudHlwZQkJPSBQQUNLRVRfUkVRVUVTVCwKKwkJLmZpZWxkcwkJPSBibG9ja19yZXF1ZXN0X2ZpZWxkcywKKwkJLmZpZWxkX2NvdW50CT0gYXJyYXlfbGVuZ3RoKGJsb2NrX3JlcXVlc3RfZmllbGRzKQorCX0sCisJeworCQkubmFtZQkJPSAiaXNvX2RhdGEiLAorCQkudHlwZQkJPSBQQUNLRVRfT1RIRVIsCisJCS5maWVsZHMJCT0gaXNvX2RhdGFfZmllbGRzLAorCQkuZmllbGRfY291bnQJPSBhcnJheV9sZW5ndGgoaXNvX2RhdGFfZmllbGRzKQorCX0sCisJeworCQkubmFtZQkJPSAibG9ja19yZXNwb25zZSIsCisJCS50eXBlCQk9IFBBQ0tFVF9SRVNQT05TRSwKKwkJLmZpZWxkcwkJPSBibG9ja19yZXNwb25zZV9maWVsZHMsCisJCS5maWVsZF9jb3VudAk9IGFycmF5X2xlbmd0aChibG9ja19yZXNwb25zZV9maWVsZHMpCisJfSwKK307CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9yZXF1ZXN0X3BhY2tldCh1aW50MzJfdCAqZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgbGlua19wYWNrZXQgKnAgPSAoc3RydWN0IGxpbmtfcGFja2V0ICopIGRhdGE7CisJc3RydWN0IHN1YmFjdGlvbiAqc2EsICpwcmV2OworCXN0cnVjdCBsaW5rX3RyYW5zYWN0aW9uICp0OworCisJdCA9IGxpbmtfdHJhbnNhY3Rpb25fbG9va3VwKHAtPmNvbW1vbi5zb3VyY2UsIHAtPmNvbW1vbi5kZXN0aW5hdGlvbiwKKwkJCXAtPmNvbW1vbi50bGFiZWwpOworCXNhID0gc3ViYWN0aW9uX2NyZWF0ZShkYXRhLCBsZW5ndGgpOworCXQtPnJlcXVlc3QgPSBzYTsKKworCWlmICghbGlzdF9lbXB0eSgmdC0+cmVxdWVzdF9saXN0KSkgeworCQlwcmV2ID0gbGlzdF90YWlsKCZ0LT5yZXF1ZXN0X2xpc3QsCisJCQkJIHN0cnVjdCBzdWJhY3Rpb24sIGxpbmspOworCisJCWlmICghQUNLX0JVU1kocHJldi0+YWNrKSkgeworCQkJLyoKKwkJCSAqIGVycm9yLCB3ZSBzaG91bGQgb25seSBzZWUgYWNrX2J1c3lfKiBiZWZvcmUgdGhlCisJCQkgKiBhY2tfcGVuZGluZy9hY2tfY29tcGxldGUgLS0gdGhpcyBpcyBhbiBhY2tfcGVuZGluZworCQkJICogaW5zdGVhZCAoYWNrX2NvbXBsZXRlIHdvdWxkIGhhdmUgZmluaXNoZWQgdGhlCisJCQkgKiB0cmFuc2FjdGlvbikuCisJCQkgKi8KKwkJfQorCisJCWlmIChwcmV2LT5wYWNrZXQuY29tbW9uLnRjb2RlICE9IHNhLT5wYWNrZXQuY29tbW9uLnRjb2RlIHx8CisJCSAgICBwcmV2LT5wYWNrZXQuY29tbW9uLnRsYWJlbCAhPSBzYS0+cGFja2V0LmNvbW1vbi50bGFiZWwpIHsKKwkJCS8qIG1lbWNtcCgpID8gKi8KKwkJCS8qIGVycm9yLCB0aGVzZSBzaG91bGQgbWF0Y2ggZm9yIHJldHJpZXMuICovCisJCX0KKwl9CisKKwlsaXN0X2FwcGVuZCgmdC0+cmVxdWVzdF9saXN0LCAmc2EtPmxpbmspOworCisJc3dpdGNoIChzYS0+YWNrKSB7CisJY2FzZSBBQ0tfQ09NUExFVEU6CisJCWlmIChwLT5jb21tb24udGNvZGUgIT0gVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUICYmCisJCSAgICBwLT5jb21tb24udGNvZGUgIT0gVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVCkKKwkJCS8qIGVycm9yLCB1bmlmaWVkIHRyYW5zYWN0aW9ucyBvbmx5IGFsbG93ZWQgZm9yIHdyaXRlICovOworCQlsaXN0X3JlbW92ZSgmdC0+bGluayk7CisJCWhhbmRsZV90cmFuc2FjdGlvbih0KTsKKwkJYnJlYWs7CisKKwljYXNlIEFDS19OT19BQ0s6CisJY2FzZSBBQ0tfREFUQV9FUlJPUjoKKwljYXNlIEFDS19UWVBFX0VSUk9SOgorCQlsaXN0X3JlbW92ZSgmdC0+bGluayk7CisJCWhhbmRsZV90cmFuc2FjdGlvbih0KTsKKwkJYnJlYWs7CisKKwljYXNlIEFDS19QRU5ESU5HOgorCQkvKiByZXF1ZXN0IHN1YmFjdGlvbiBwaGFzZSBvdmVyLCB3YWl0IGZvciByZXNwb25zZS4gKi8KKwkJYnJlYWs7CisKKwljYXNlIEFDS19CVVNZX1g6CisJY2FzZSBBQ0tfQlVTWV9BOgorCWNhc2UgQUNLX0JVU1lfQjoKKwkJLyogb2ssIHdhaXQgZm9yIHJldHJ5LiAqLworCQkvKiBjaGVjayB0aGF0IHJldHJ5IHByb3RvY29sIGlzIHJlc3BlY3RlZC4gKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9yZXNwb25zZV9wYWNrZXQodWludDMyX3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IGxpbmtfcGFja2V0ICpwID0gKHN0cnVjdCBsaW5rX3BhY2tldCAqKSBkYXRhOworCXN0cnVjdCBzdWJhY3Rpb24gKnNhLCAqcHJldjsKKwlzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdDsKKworCXQgPSBsaW5rX3RyYW5zYWN0aW9uX2xvb2t1cChwLT5jb21tb24uZGVzdGluYXRpb24sIHAtPmNvbW1vbi5zb3VyY2UsCisJCQlwLT5jb21tb24udGxhYmVsKTsKKwlpZiAobGlzdF9lbXB0eSgmdC0+cmVxdWVzdF9saXN0KSkgeworCQkvKiB1bnNvbGljaXRlZCByZXNwb25zZSAqLworCX0KKworCXNhID0gc3ViYWN0aW9uX2NyZWF0ZShkYXRhLCBsZW5ndGgpOworCXQtPnJlc3BvbnNlID0gc2E7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnQtPnJlc3BvbnNlX2xpc3QpKSB7CisJCXByZXYgPSBsaXN0X3RhaWwoJnQtPnJlc3BvbnNlX2xpc3QsIHN0cnVjdCBzdWJhY3Rpb24sIGxpbmspOworCisJCWlmICghQUNLX0JVU1kocHJldi0+YWNrKSkgeworCQkJLyoKKwkJCSAqIGVycm9yLCB3ZSBzaG91bGQgb25seSBzZWUgYWNrX2J1c3lfKiBiZWZvcmUgdGhlCisJCQkgKiBhY2tfcGVuZGluZy9hY2tfY29tcGxldGUKKwkJCSAqLworCQl9CisKKwkJaWYgKHByZXYtPnBhY2tldC5jb21tb24udGNvZGUgIT0gc2EtPnBhY2tldC5jb21tb24udGNvZGUgfHwKKwkJICAgIHByZXYtPnBhY2tldC5jb21tb24udGxhYmVsICE9IHNhLT5wYWNrZXQuY29tbW9uLnRsYWJlbCkgeworCQkJLyogdXNlIG1lbWNtcCgpIGluc3RlYWQ/ICovCisJCQkvKiBlcnJvciwgdGhlc2Ugc2hvdWxkIG1hdGNoIGZvciByZXRyaWVzLiAqLworCQl9CisJfSBlbHNlIHsKKwkJcHJldiA9IGxpc3RfdGFpbCgmdC0+cmVxdWVzdF9saXN0LCBzdHJ1Y3Qgc3ViYWN0aW9uLCBsaW5rKTsKKwkJaWYgKHByZXYtPmFjayAhPSBBQ0tfUEVORElORykgeworCQkJLyoKKwkJCSAqIGVycm9yLCBzaG91bGQgbm90IGdldCByZXNwb25zZSB1bmxlc3MgbGFzdCByZXF1ZXN0IGdvdAorCQkJICogYWNrX3BlbmRpbmcuCisJCQkgKi8KKwkJfQorCisJCWlmIChwYWNrZXRfaW5mb1twcmV2LT5wYWNrZXQuY29tbW9uLnRjb2RlXS5yZXNwb25zZV90Y29kZSAhPQorCQkgICAgc2EtPnBhY2tldC5jb21tb24udGNvZGUpIHsKKwkJCS8qIGVycm9yLCB0Y29kZSBtaXNtYXRjaCAqLworCQl9CisJfQorCisJbGlzdF9hcHBlbmQoJnQtPnJlc3BvbnNlX2xpc3QsICZzYS0+bGluayk7CisKKwlzd2l0Y2ggKHNhLT5hY2spIHsKKwljYXNlIEFDS19DT01QTEVURToKKwljYXNlIEFDS19OT19BQ0s6CisJY2FzZSBBQ0tfREFUQV9FUlJPUjoKKwljYXNlIEFDS19UWVBFX0VSUk9SOgorCQlsaXN0X3JlbW92ZSgmdC0+bGluayk7CisJCWhhbmRsZV90cmFuc2FjdGlvbih0KTsKKwkJLyogdHJhbnNhY3Rpb24gY29tcGxldGUsIHJlbW92ZSB0IGZyb20gcGVuZGluZyBsaXN0LiAqLworCQlicmVhazsKKworCWNhc2UgQUNLX1BFTkRJTkc6CisJCS8qIGVycm9yIGZvciByZXNwb25zZXMuICovCisJCWJyZWFrOworCisJY2FzZSBBQ0tfQlVTWV9YOgorCWNhc2UgQUNLX0JVU1lfQToKKwljYXNlIEFDS19CVVNZX0I6CisJCS8qIG5vIHByb2JsZW0sIHdhaXQgZm9yIG5leHQgcmV0cnkgKi8KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9wYWNrZXQodWludDMyX3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJaWYgKGxlbmd0aCA9PSAwKSB7CisJCXByaW50ZigiYnVzIHJlc2V0XHJcbiIpOworCQljbGVhcl9wZW5kaW5nX3RyYW5zYWN0aW9uX2xpc3QoKTsKKwl9IGVsc2UgaWYgKGxlbmd0aCA+IHNpemVvZihzdHJ1Y3QgcGh5X3BhY2tldCkpIHsKKwkJc3RydWN0IGxpbmtfcGFja2V0ICpwID0gKHN0cnVjdCBsaW5rX3BhY2tldCAqKSBkYXRhOworCisJCXN3aXRjaCAocGFja2V0X2luZm9bcC0+Y29tbW9uLnRjb2RlXS50eXBlKSB7CisJCWNhc2UgUEFDS0VUX1JFUVVFU1Q6CisJCQlyZXR1cm4gaGFuZGxlX3JlcXVlc3RfcGFja2V0KGRhdGEsIGxlbmd0aCk7CisKKwkJY2FzZSBQQUNLRVRfUkVTUE9OU0U6CisJCQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX3BhY2tldChkYXRhLCBsZW5ndGgpOworCisJCWNhc2UgUEFDS0VUX09USEVSOgorCQljYXNlIFBBQ0tFVF9SRVNFUlZFRDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2dldF9iaXRzKHN0cnVjdCBsaW5rX3BhY2tldCAqcGFja2V0LCBpbnQgb2Zmc2V0LCBpbnQgd2lkdGgpCit7CisJdWludDMyX3QgKmRhdGEgPSAodWludDMyX3QgKikgcGFja2V0OworCXVpbnQzMl90IGluZGV4LCBzaGlmdCwgbWFzazsKKworCWluZGV4ID0gb2Zmc2V0IC8gMzIgKyAxOworCXNoaWZ0ID0gMzIgLSAob2Zmc2V0ICYgMzEpIC0gd2lkdGg7CisJbWFzayA9IHdpZHRoID09IDMyID8gfjAgOiAoMSA8PCB3aWR0aCkgLSAxOworCisJcmV0dXJuIChkYXRhW2luZGV4XSA+PiBzaGlmdCkgJiBtYXNrOworfQorCisjaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorI2RlZmluZSBieXRlX2luZGV4KGkpICgoaSkgXiAzKQorI2VsaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorI2RlZmluZSBieXRlX2luZGV4KGkpIChpKQorI2Vsc2UKKyNlcnJvciB1bnN1cHBvcnRlZCBieXRlIG9yZGVyLgorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitkdW1wX2RhdGEodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaSwgcHJpbnRfbGVuZ3RoOworCisJaWYgKGxlbmd0aCA+IDEyOCkKKwkJcHJpbnRfbGVuZ3RoID0gMTI4OworCWVsc2UKKwkJcHJpbnRfbGVuZ3RoID0gbGVuZ3RoOworCisJZm9yIChpID0gMDsgaSA8IHByaW50X2xlbmd0aDsgaSsrKQorCQlwcmludGYoIiVzJTAyaGh4IiwKKwkJICAgICAgIChpICUgNCA9PSAwICYmIGkgIT0gMCkgPyAiICIgOiAiIiwKKwkJICAgICAgIGRhdGFbYnl0ZV9pbmRleChpKV0pOworCisJaWYgKHByaW50X2xlbmd0aCA8IGxlbmd0aCkKKwkJcHJpbnRmKCIgKCVkIG1vcmUgYnl0ZXMpIiwgbGVuZ3RoIC0gcHJpbnRfbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQKK2RlY29kZV9saW5rX3BhY2tldChzdHJ1Y3QgbGlua19wYWNrZXQgKnBhY2tldCwgc2l6ZV90IGxlbmd0aCwKKwkJICAgaW50IGluY2x1ZGVfZmxhZ3MsIGludCBleGNsdWRlX2ZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBwYWNrZXRfaW5mbyAqcGk7CisJaW50IGRhdGFfbGVuZ3RoID0gMDsKKwlpbnQgaTsKKworCXBpID0gJnBhY2tldF9pbmZvW3BhY2tldC0+Y29tbW9uLnRjb2RlXTsKKworCWZvciAoaSA9IDA7IGkgPCBwaS0+ZmllbGRfY291bnQ7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcGFja2V0X2ZpZWxkICpmID0gJnBpLT5maWVsZHNbaV07CisJCWludCBvZmZzZXQ7CisKKwkJaWYgKGYtPmZsYWdzICYgZXhjbHVkZV9mbGFncykKKwkJCWNvbnRpbnVlOworCQlpZiAoaW5jbHVkZV9mbGFncyAmJiAhKGYtPmZsYWdzICYgaW5jbHVkZV9mbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoZi0+b2Zmc2V0IDwgMCkKKwkJCW9mZnNldCA9IGxlbmd0aCAqIDggKyBmLT5vZmZzZXQgLSAzMjsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gZi0+b2Zmc2V0OworCisJCWlmIChmLT52YWx1ZV9uYW1lcyAhPSBOVUxMKSB7CisJCQl1aW50MzJfdCBiaXRzOworCisJCQliaXRzID0gZ2V0X2JpdHMocGFja2V0LCBvZmZzZXQsIGYtPndpZHRoKTsKKwkJCXByaW50ZigiJXMiLCBmLT52YWx1ZV9uYW1lc1tiaXRzXSk7CisJCX0gZWxzZSBpZiAoZi0+d2lkdGggPT0gMCkgeworCQkJcHJpbnRmKCIlcz1bIiwgZi0+bmFtZSk7CisJCQlkdW1wX2RhdGEoKHVuc2lnbmVkIGNoYXIgKikgcGFja2V0ICsgKG9mZnNldCAvIDggKyA0KSwgZGF0YV9sZW5ndGgpOworCQkJcHJpbnRmKCJdIik7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBsb25nIGxvbmcgYml0czsKKwkJCWludCBoaWdoX3dpZHRoLCBsb3dfd2lkdGg7CisKKwkJCWlmICgob2Zmc2V0ICYgfjMxKSAhPSAoKG9mZnNldCArIGYtPndpZHRoIC0gMSkgJiB+MzEpKSB7CisJCQkJLyogQml0IGZpZWxkIHNwYW5zIHF1YWRsZXQgYm91bmRhcnkuICovCisJCQkJaGlnaF93aWR0aCA9ICgob2Zmc2V0ICsgMzEpICYgfjMxKSAtIG9mZnNldDsKKwkJCQlsb3dfd2lkdGggPSBmLT53aWR0aCAtIGhpZ2hfd2lkdGg7CisKKwkJCQliaXRzID0gZ2V0X2JpdHMocGFja2V0LCBvZmZzZXQsIGhpZ2hfd2lkdGgpOworCQkJCWJpdHMgPSAoYml0cyA8PCBsb3dfd2lkdGgpIHwKKwkJCQkJZ2V0X2JpdHMocGFja2V0LCBvZmZzZXQgKyBoaWdoX3dpZHRoLCBsb3dfd2lkdGgpOworCQkJfSBlbHNlIHsKKwkJCQliaXRzID0gZ2V0X2JpdHMocGFja2V0LCBvZmZzZXQsIGYtPndpZHRoKTsKKwkJCX0KKworCQkJcHJpbnRmKCIlcz0weCUwKmxseCIsIGYtPm5hbWUsIChmLT53aWR0aCArIDMpIC8gNCwgYml0cyk7CisKKwkJCWlmIChmLT5mbGFncyAmIFBBQ0tFVF9GSUVMRF9EQVRBX0xFTkdUSCkKKwkJCQlkYXRhX2xlbmd0aCA9IGJpdHM7CisJCX0KKworCQlpZiAoaSA8IHBpLT5maWVsZF9jb3VudCAtIDEpCisJCQlwcmludGYoIiwgIik7CisJfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfcGFja2V0KHVpbnQzMl90ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworCWludCBpOworCisJcHJpbnRmKCIlNnUgICIsIGRhdGFbMF0pOworCisJaWYgKGxlbmd0aCA9PSA0KSB7CisJCXByaW50ZigiYnVzIHJlc2V0Iik7CisJfSBlbHNlIGlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IHBoeV9wYWNrZXQpKSB7CisJCXByaW50Zigic2hvcnQgcGFja2V0OiAiKTsKKwkJZm9yIChpID0gMTsgaSA8IGxlbmd0aCAvIDQ7IGkrKykKKwkJCXByaW50ZigiJXMlMDh4IiwgaSA9PSAwID8gIlsiIDogIiAiLCBkYXRhW2ldKTsKKwkJcHJpbnRmKCJdIik7CisKKwl9IGVsc2UgaWYgKGxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHBoeV9wYWNrZXQpICYmIGRhdGFbMV0gPT0gfmRhdGFbMl0pIHsKKwkJc3RydWN0IHBoeV9wYWNrZXQgKnBwID0gKHN0cnVjdCBwaHlfcGFja2V0ICopIGRhdGE7CisKKwkJLyogcGh5IHBhY2tldCBhcmUgMyBxdWFkbGV0czogdGhlIDEgcXVhZGxldCBwYXlsb2FkLAorCQkgKiB0aGUgYml0d2lzZSBpbnZlcnNlIG9mIHRoZSBwYXlsb2FkIGFuZCB0aGUgc25vb3AKKwkJICogbW9kZSBhY2sgKi8KKworCQlzd2l0Y2ggKHBwLT5jb21tb24uaWRlbnRpZmllcikgeworCQljYXNlIFBIWV9QQUNLRVRfQ09ORklHVVJBVElPTjoKKwkJCWlmICghcHAtPnBoeV9jb25maWcuc2V0X3Jvb3QgJiYgIXBwLT5waHlfY29uZmlnLnNldF9nYXBfY291bnQpIHsKKwkJCQlwcmludGYoImV4dCBwaHkgY29uZmlnOiBwaHlfaWQ9JTAyeCIsIHBwLT5waHlfY29uZmlnLnJvb3RfaWQpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGYoInBoeSBjb25maWc6Iik7CisJCQkJaWYgKHBwLT5waHlfY29uZmlnLnNldF9yb290KQorCQkJCQlwcmludGYoIiBzZXRfcm9vdF9pZD0lMDJ4IiwgcHAtPnBoeV9jb25maWcucm9vdF9pZCk7CisJCQkJaWYgKHBwLT5waHlfY29uZmlnLnNldF9nYXBfY291bnQpCisJCQkJCXByaW50ZigiIHNldF9nYXBfY291bnQ9JWQiLCBwcC0+cGh5X2NvbmZpZy5nYXBfY291bnQpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBQSFlfUEFDS0VUX0xJTktfT046CisJCQlwcmludGYoImxpbmstb24gcGFja2V0LCBwaHlfaWQ9JTAyeCIsIHBwLT5saW5rX29uLnBoeV9pZCk7CisJCQlicmVhazsKKworCQljYXNlIFBIWV9QQUNLRVRfU0VMRl9JRDoKKwkJCWlmIChwcC0+c2VsZl9pZC5leHRlbmRlZCkgeworCQkJCXByaW50ZigiZXh0ZW5kZWQgc2VsZiBpZDogcGh5X2lkPSUwMngsIHNlcT0lZCIsCisJCQkJICAgICAgIHBwLT5leHRfc2VsZl9pZC5waHlfaWQsIHBwLT5leHRfc2VsZl9pZC5zZXF1ZW5jZSk7CisJCQl9IGVsc2UgeworCQkJCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3BlZWRfbmFtZXNbXSA9IHsKKwkJCQkJIlMxMDAiLCAiUzIwMCIsICJTNDAwIiwgIkJFVEEiCisJCQkJfTsKKwkJCQlwcmludGYoInNlbGYgaWQ6IHBoeV9pZD0lMDJ4LCBsaW5rICVzLCBnYXBfY291bnQ9JWQsIHNwZWVkPSVzJXMlcyIsCisJCQkJICAgICAgIHBwLT5zZWxmX2lkLnBoeV9pZCwKKwkJCQkgICAgICAgKHBwLT5zZWxmX2lkLmxpbmtfYWN0aXZlID8gImFjdGl2ZSIgOiAibm90IGFjdGl2ZSIpLAorCQkJCSAgICAgICBwcC0+c2VsZl9pZC5nYXBfY291bnQsCisJCQkJICAgICAgIHNwZWVkX25hbWVzW3BwLT5zZWxmX2lkLnBoeV9zcGVlZF0sCisJCQkJICAgICAgIChwcC0+c2VsZl9pZC5jb250ZW5kZXIgPyAiLCBpcm0gY29udGVuZGVyIiA6ICIiKSwKKwkJCQkgICAgICAgKHBwLT5zZWxmX2lkLmluaXRpYXRlZF9yZXNldCA/ICIsIGluaXRpYXRvciIgOiAiIikpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGYoInVua25vd24gcGh5IHBhY2tldDogIik7CisJCQlmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoIC8gNDsgaSsrKQorCQkJCXByaW50ZigiJXMlMDh4IiwgaSA9PSAwID8gIlsiIDogIiAiLCBkYXRhW2ldKTsKKwkJCXByaW50ZigiXSIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgbGlua19wYWNrZXQgKnBhY2tldCA9IChzdHJ1Y3QgbGlua19wYWNrZXQgKikgZGF0YTsKKworCQlkZWNvZGVfbGlua19wYWNrZXQocGFja2V0LCBsZW5ndGgsIDAsCisJCQkJICAgb3B0aW9uX3ZlcmJvc2UgPyAwIDogUEFDS0VUX0ZJRUxEX0RFVEFJTCk7CisJfQorCisJaWYgKG9wdGlvbl9oZXgpIHsKKwkJcHJpbnRmKCIgIFsiKTsKKwkJZHVtcF9kYXRhKCh1bnNpZ25lZCBjaGFyICopIGRhdGEgKyA0LCBsZW5ndGggLSA0KTsKKwkJcHJpbnRmKCJdIik7CisJfQorCisJcHJpbnRmKCJcclxuIik7Cit9CisKKyNkZWZpbmUgSElERV9DVVJTT1IJIlwwMzNbPzI1bCIKKyNkZWZpbmUgU0hPV19DVVJTT1IJIlwwMzNbPzI1aCIKKyNkZWZpbmUgQ0xFQVIJCSJcMDMzW0hcMDMzWzJKIgorCitzdGF0aWMgdm9pZAorcHJpbnRfc3RhdHModWludDMyX3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJc3RhdGljIGludCBidXNfcmVzZXRfY291bnQsIHNob3J0X3BhY2tldF9jb3VudCwgcGh5X3BhY2tldF9jb3VudDsKKwlzdGF0aWMgaW50IHRjb2RlX2NvdW50WzE2XTsKKwlzdGF0aWMgc3RydWN0IHRpbWV2YWwgbGFzdF91cGRhdGU7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCBpOworCisJaWYgKGxlbmd0aCA9PSAwKQorCQlidXNfcmVzZXRfY291bnQrKzsKKwllbHNlIGlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IHBoeV9wYWNrZXQpKQorCQlzaG9ydF9wYWNrZXRfY291bnQrKzsKKwllbHNlIGlmIChsZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBwaHlfcGFja2V0KSAmJiBkYXRhWzFdID09IH5kYXRhWzJdKQorCQlwaHlfcGFja2V0X2NvdW50Kys7CisJZWxzZSB7CisJCXN0cnVjdCBsaW5rX3BhY2tldCAqcGFja2V0ID0gKHN0cnVjdCBsaW5rX3BhY2tldCAqKSBkYXRhOworCQl0Y29kZV9jb3VudFtwYWNrZXQtPmNvbW1vbi50Y29kZV0rKzsKKwl9CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJaWYgKG5vdy50dl9zZWMgPD0gbGFzdF91cGRhdGUudHZfc2VjICYmCisJICAgIG5vdy50dl91c2VjIDwgbGFzdF91cGRhdGUudHZfdXNlYyArIDUwMDAwMCkKKwkJcmV0dXJuOworCisJbGFzdF91cGRhdGUgPSBub3c7CisJcHJpbnRmKENMRUFSIEhJREVfQ1VSU09SCisJICAgICAgICIgIGJ1cyByZXNldHMgICAgICAgICAgICAgIDogJThkXG4iCisJICAgICAgICIgIHNob3J0IHBhY2tldHMgICAgICAgICAgIDogJThkXG4iCisJICAgICAgICIgIHBoeSBwYWNrZXRzICAgICAgICAgICAgIDogJThkXG4iLAorCSAgICAgICBidXNfcmVzZXRfY291bnQsIHNob3J0X3BhY2tldF9jb3VudCwgcGh5X3BhY2tldF9jb3VudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXlfbGVuZ3RoKHBhY2tldF9pbmZvKTsgaSsrKQorCQlpZiAocGFja2V0X2luZm9baV0udHlwZSAhPSBQQUNLRVRfUkVTRVJWRUQpCisJCQlwcmludGYoIiAgJS0yNHM6ICU4ZFxuIiwgcGFja2V0X2luZm9baV0ubmFtZSwgdGNvZGVfY291bnRbaV0pOworCXByaW50ZihTSE9XX0NVUlNPUiAiXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCB0ZXJtaW9zIHNhdmVkX2F0dHJpYnV0ZXM7CisKK3N0YXRpYyB2b2lkCityZXNldF9pbnB1dF9tb2RlKHZvaWQpCit7CisJdGNzZXRhdHRyKFNURElOX0ZJTEVOTywgVENTQU5PVywgJnNhdmVkX2F0dHJpYnV0ZXMpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2lucHV0X21vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgdGVybWlvcyB0YXR0cjsKKworCS8qIE1ha2Ugc3VyZSBzdGRpbiBpcyBhIHRlcm1pbmFsLiAqLworCWlmICghaXNhdHR5KFNURElOX0ZJTEVOTykpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgYSB0ZXJtaW5hbC5cbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJLyogU2F2ZSB0aGUgdGVybWluYWwgYXR0cmlidXRlcyBzbyB3ZSBjYW4gcmVzdG9yZSB0aGVtIGxhdGVyLiAqLworCXRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZzYXZlZF9hdHRyaWJ1dGVzKTsKKwlhdGV4aXQocmVzZXRfaW5wdXRfbW9kZSk7CisKKwkvKiBTZXQgdGhlIGZ1bm55IHRlcm1pbmFsIG1vZGVzLiAqLworCXRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZ0YXR0cik7CisJdGF0dHIuY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsgLyogQ2xlYXIgSUNBTk9OIGFuZCBFQ0hPLiAqLworCXRhdHRyLmNfY2NbVk1JTl0gPSAxOworCXRhdHRyLmNfY2NbVlRJTUVdID0gMDsKKwl0Y3NldGF0dHIoU1RESU5fRklMRU5PLCBUQ1NBRkxVU0gsICZ0YXR0cik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCit7CisJdWludDMyX3QgYnVmWzEyOCAqIDEwMjRdOworCXVpbnQzMl90IGZpbHRlcjsKKwlpbnQgbGVuZ3RoLCByZXR2YWwsIHZpZXc7CisJaW50IGZkID0gLTE7CisJRklMRSAqb3V0cHV0ID0gTlVMTCwgKmlucHV0ID0gTlVMTDsKKwlwb3B0Q29udGV4dCBjb247CisJY2hhciBjOworCXN0cnVjdCBwb2xsZmQgcG9sbGZkc1syXTsKKworCXN5c19zaWdpbnRfaGFuZGxlciA9IHNpZ25hbChTSUdJTlQsIHNpZ2ludF9oYW5kbGVyKTsKKworCWNvbiA9IHBvcHRHZXRDb250ZXh0KE5VTEwsIGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIDApOworCXJldHZhbCA9IHBvcHRHZXROZXh0T3B0KGNvbik7CisJaWYgKHJldHZhbCA8IC0xKSB7CisJCXBvcHRQcmludFVzYWdlKGNvbiwgc3Rkb3V0LCAwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvcHRpb25fdmVyc2lvbikgeworCQlwcmludGYoImR1bXAgdG9vbCBmb3Igbm9zeSBzbmlmZmVyLCB2ZXJzaW9uICVzXG4iLCBWRVJTSU9OKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKF9fQllURV9PUkRFUiAhPSBfX0xJVFRMRV9FTkRJQU4pCisJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogbm9zeSBoYXMgb25seSBiZWVuIHRlc3RlZCBvbiBsaXR0bGUgIgorCQkJImVuZGlhbiBtYWNoaW5lc1xuIik7CisKKwlpZiAob3B0aW9uX2lucHV0ICE9IE5VTEwpIHsKKwkJaW5wdXQgPSBmb3BlbihvcHRpb25faW5wdXQsICJyIik7CisJCWlmIChpbnB1dCA9PSBOVUxMKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuICVzLCAlbVxuIiwgb3B0aW9uX2lucHV0KTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCWZkID0gb3BlbihvcHRpb25fbm9zeV9kZXZpY2UsIE9fUkRXUik7CisJCWlmIChmZCA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJXMsICVtXG4iLCBvcHRpb25fbm9zeV9kZXZpY2UpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXNldF9pbnB1dF9tb2RlKCk7CisJfQorCisJaWYgKHN0cmNtcChvcHRpb25fdmlldywgInRyYW5zYWN0aW9uIikgPT0gMCkKKwkJdmlldyA9IFZJRVdfVFJBTlNBQ1RJT047CisJZWxzZSBpZiAoc3RyY21wKG9wdGlvbl92aWV3LCAic3RhdHMiKSA9PSAwKQorCQl2aWV3ID0gVklFV19TVEFUUzsKKwllbHNlCisJCXZpZXcgPSBWSUVXX1BBQ0tFVDsKKworCWlmIChvcHRpb25fb3V0cHV0KSB7CisJCW91dHB1dCA9IGZvcGVuKG9wdGlvbl9vdXRwdXQsICJ3Iik7CisJCWlmIChvdXRwdXQgPT0gTlVMTCkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAlcywgJW1cbiIsIG9wdGlvbl9vdXRwdXQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKKworCWZpbHRlciA9IH4wOworCWlmICghb3B0aW9uX2lzbykKKwkJZmlsdGVyICY9IH4oMSA8PCBUQ09ERV9TVFJFQU1fREFUQSk7CisJaWYgKCFvcHRpb25fY3ljbGVfc3RhcnQpCisJCWZpbHRlciAmPSB+KDEgPDwgVENPREVfQ1lDTEVfU1RBUlQpOworCWlmICh2aWV3ID09IFZJRVdfU1RBVFMpCisJCWZpbHRlciA9IH4oMSA8PCBUQ09ERV9DWUNMRV9TVEFSVCk7CisKKwlpb2N0bChmZCwgTk9TWV9JT0NfRklMVEVSLCBmaWx0ZXIpOworCisJaW9jdGwoZmQsIE5PU1lfSU9DX1NUQVJUKTsKKworCXBvbGxmZHNbMF0uZmQgPSBmZDsKKwlwb2xsZmRzWzBdLmV2ZW50cyA9IFBPTExJTjsKKwlwb2xsZmRzWzFdLmZkID0gU1RESU5fRklMRU5POworCXBvbGxmZHNbMV0uZXZlbnRzID0gUE9MTElOOworCisJd2hpbGUgKHJ1bikgeworCQlpZiAoaW5wdXQgIT0gTlVMTCkgeworCQkJaWYgKGZyZWFkKCZsZW5ndGgsIHNpemVvZiBsZW5ndGgsIDEsIGlucHV0KSAhPSAxKQorCQkJCXJldHVybiAwOworCQkJZnJlYWQoYnVmLCAxLCBsZW5ndGgsIGlucHV0KTsKKwkJfSBlbHNlIHsKKwkJCXBvbGwocG9sbGZkcywgMiwgLTEpOworCQkJaWYgKHBvbGxmZHNbMV0ucmV2ZW50cykgeworCQkJCXJlYWQoU1RESU5fRklMRU5PLCAmYywgc2l6ZW9mIGMpOworCQkJCXN3aXRjaCAoYykgeworCQkJCWNhc2UgJ3EnOgorCQkJCQlpZiAob3V0cHV0ICE9IE5VTEwpCisJCQkJCQlmY2xvc2Uob3V0cHV0KTsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCisJCQlpZiAocG9sbGZkc1swXS5yZXZlbnRzKQorCQkJCWxlbmd0aCA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAob3V0cHV0ICE9IE5VTEwpIHsKKwkJCWZ3cml0ZSgmbGVuZ3RoLCBzaXplb2YgbGVuZ3RoLCAxLCBvdXRwdXQpOworCQkJZndyaXRlKGJ1ZiwgMSwgbGVuZ3RoLCBvdXRwdXQpOworCQl9CisKKwkJc3dpdGNoICh2aWV3KSB7CisJCWNhc2UgVklFV19UUkFOU0FDVElPTjoKKwkJCWhhbmRsZV9wYWNrZXQoYnVmLCBsZW5ndGgpOworCQkJYnJlYWs7CisJCWNhc2UgVklFV19QQUNLRVQ6CisJCQlwcmludF9wYWNrZXQoYnVmLCBsZW5ndGgpOworCQkJYnJlYWs7CisJCWNhc2UgVklFV19TVEFUUzoKKwkJCXByaW50X3N0YXRzKGJ1ZiwgbGVuZ3RoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG91dHB1dCAhPSBOVUxMKQorCQlmY2xvc2Uob3V0cHV0KTsKKworCWNsb3NlKGZkKTsKKworCXBvcHRGcmVlQ29udGV4dChjb24pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9maXJld2lyZS9ub3N5LWR1bXAuaCBiL3Rvb2xzL2ZpcmV3aXJlL25vc3ktZHVtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNGI1YjMzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZmlyZXdpcmUvbm9zeS1kdW1wLmgKQEAgLTAsMCArMSwxNzMgQEAKKyNpZm5kZWYgX19ub3N5X2R1bXBfaF9fCisjZGVmaW5lIF9fbm9zeV9kdW1wX2hfXworCisjZGVmaW5lIGFycmF5X2xlbmd0aChhcnJheSkgKHNpemVvZihhcnJheSkgLyBzaXplb2YoYXJyYXlbMF0pKQorCisjZGVmaW5lIEFDS19OT19BQ0sgICAweDAKKyNkZWZpbmUgQUNLX0RPTkUoYSkgICgoYSA+PiAyKSA9PSAwKQorI2RlZmluZSBBQ0tfQlVTWShhKSAgKChhID4+IDIpID09IDEpCisjZGVmaW5lIEFDS19FUlJPUihhKSAoKGEgPj4gMikgPT0gMykKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitzdHJ1Y3QgcGh5X3BhY2tldCB7CisJdWludDMyX3QgdGltZXN0YW1wOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IHplcm86MjQ7CisJCQl1aW50MzJfdCBwaHlfaWQ6NjsKKwkJCXVpbnQzMl90IGlkZW50aWZpZXI6MjsKKwkJfSBjb21tb24sIGxpbmtfb247CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IHplcm86MTY7CisJCQl1aW50MzJfdCBnYXBfY291bnQ6NjsKKwkJCXVpbnQzMl90IHNldF9nYXBfY291bnQ6MTsKKwkJCXVpbnQzMl90IHNldF9yb290OjE7CisJCQl1aW50MzJfdCByb290X2lkOjY7CisJCQl1aW50MzJfdCBpZGVudGlmaWVyOjI7CisJCX0gcGh5X2NvbmZpZzsKKworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbW9yZV9wYWNrZXRzOjE7CisJCQl1aW50MzJfdCBpbml0aWF0ZWRfcmVzZXQ6MTsKKwkJCXVpbnQzMl90IHBvcnQyOjI7CisJCQl1aW50MzJfdCBwb3J0MToyOworCQkJdWludDMyX3QgcG9ydDA6MjsKKwkJCXVpbnQzMl90IHBvd2VyX2NsYXNzOjM7CisJCQl1aW50MzJfdCBjb250ZW5kZXI6MTsKKwkJCXVpbnQzMl90IHBoeV9kZWxheToyOworCQkJdWludDMyX3QgcGh5X3NwZWVkOjI7CisJCQl1aW50MzJfdCBnYXBfY291bnQ6NjsKKwkJCXVpbnQzMl90IGxpbmtfYWN0aXZlOjE7CisJCQl1aW50MzJfdCBleHRlbmRlZDoxOworCQkJdWludDMyX3QgcGh5X2lkOjY7CisJCQl1aW50MzJfdCBpZGVudGlmaWVyOjI7CisJCX0gc2VsZl9pZDsKKworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbW9yZV9wYWNrZXRzOjE7CisJCQl1aW50MzJfdCByZXNlcnZlZDE6MTsKKwkJCXVpbnQzMl90IHBvcnRoOjI7CisJCQl1aW50MzJfdCBwb3J0ZzoyOworCQkJdWludDMyX3QgcG9ydGY6MjsKKwkJCXVpbnQzMl90IHBvcnRlOjI7CisJCQl1aW50MzJfdCBwb3J0ZDoyOworCQkJdWludDMyX3QgcG9ydGM6MjsKKwkJCXVpbnQzMl90IHBvcnRiOjI7CisJCQl1aW50MzJfdCBwb3J0YToyOworCQkJdWludDMyX3QgcmVzZXJ2ZWQwOjI7CisJCQl1aW50MzJfdCBzZXF1ZW5jZTozOworCQkJdWludDMyX3QgZXh0ZW5kZWQ6MTsKKwkJCXVpbnQzMl90IHBoeV9pZDo2OworCQkJdWludDMyX3QgaWRlbnRpZmllcjoyOworCQl9IGV4dF9zZWxmX2lkOworCX07CisJdWludDMyX3QgaW52ZXJ0ZWQ7CisJdWludDMyX3QgYWNrOworfTsKKworI2RlZmluZSBUQ09ERV9QSFlfUEFDS0VUIDB4MTAKKworI2RlZmluZSBQSFlfUEFDS0VUX0NPTkZJR1VSQVRJT04gMHgwMAorI2RlZmluZSBQSFlfUEFDS0VUX0xJTktfT04gMHgwMQorI2RlZmluZSBQSFlfUEFDS0VUX1NFTEZfSUQgMHgwMgorCitzdHJ1Y3QgbGlua19wYWNrZXQgeworCXVpbnQzMl90IHRpbWVzdGFtcDsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBwcmlvcml0eTo0OworCQkJdWludDMyX3QgdGNvZGU6NDsKKwkJCXVpbnQzMl90IHJ0OjI7CisJCQl1aW50MzJfdCB0bGFiZWw6NjsKKwkJCXVpbnQzMl90IGRlc3RpbmF0aW9uOjE2OworCisJCQl1aW50MzJfdCBvZmZzZXRfaGlnaDoxNjsKKwkJCXVpbnQzMl90IHNvdXJjZToxNjsKKworCQkJdWludDMyX3Qgb2Zmc2V0X2xvdzsKKwkJfSBjb21tb247CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNvbW1vblszXTsKKwkJCXVpbnQzMl90IGNyYzsKKwkJfSByZWFkX3F1YWRsZXQ7CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNvbW1vblszXTsKKwkJCXVpbnQzMl90IGRhdGE7CisJCQl1aW50MzJfdCBjcmM7CisJCX0gcmVhZF9xdWFkbGV0X3Jlc3BvbnNlOworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjb21tb25bM107CisJCQl1aW50MzJfdCBleHRlbmRlZF90Y29kZToxNjsKKwkJCXVpbnQzMl90IGRhdGFfbGVuZ3RoOjE2OworCQkJdWludDMyX3QgY3JjOworCQl9IHJlYWRfYmxvY2s7CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNvbW1vblszXTsKKwkJCXVpbnQzMl90IGV4dGVuZGVkX3Rjb2RlOjE2OworCQkJdWludDMyX3QgZGF0YV9sZW5ndGg6MTY7CisJCQl1aW50MzJfdCBjcmM7CisJCQl1aW50MzJfdCBkYXRhWzBdOworCQkJLyogY3JjIGFuZCBhY2sgZm9sbG93cy4gKi8KKwkJfSByZWFkX2Jsb2NrX3Jlc3BvbnNlOworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjb21tb25bM107CisJCQl1aW50MzJfdCBkYXRhOworCQkJdWludDMyX3QgY3JjOworCQl9IHdyaXRlX3F1YWRsZXQ7CisKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGNvbW1vblszXTsKKwkJCXVpbnQzMl90IGV4dGVuZGVkX3Rjb2RlOjE2OworCQkJdWludDMyX3QgZGF0YV9sZW5ndGg6MTY7CisJCQl1aW50MzJfdCBjcmM7CisJCQl1aW50MzJfdCBkYXRhWzBdOworCQkJLyogY3JjIGFuZCBhY2sgZm9sbG93cy4gKi8KKwkJfSB3cml0ZV9ibG9jazsKKworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgY29tbW9uWzNdOworCQkJdWludDMyX3QgY3JjOworCQl9IHdyaXRlX3Jlc3BvbnNlOworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBjb21tb25bM107CisJCQl1aW50MzJfdCBkYXRhOworCQkJdWludDMyX3QgY3JjOworCQl9IGN5Y2xlX3N0YXJ0OworCisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBzeTo0OworCQkJdWludDMyX3QgdGNvZGU6NDsKKwkJCXVpbnQzMl90IGNoYW5uZWw6NjsKKwkJCXVpbnQzMl90IHRhZzoyOworCQkJdWludDMyX3QgZGF0YV9sZW5ndGg6MTY7CisKKwkJCXVpbnQzMl90IGNyYzsKKwkJfSBpc29fZGF0YTsKKwl9OworfTsKKworc3RydWN0IHN1YmFjdGlvbiB7CisJdWludDMyX3QgYWNrOworCXNpemVfdCBsZW5ndGg7CisJc3RydWN0IGxpc3QgbGluazsKKwlzdHJ1Y3QgbGlua19wYWNrZXQgcGFja2V0OworfTsKKworc3RydWN0IGxpbmtfdHJhbnNhY3Rpb24geworCWludCByZXF1ZXN0X25vZGUsIHJlc3BvbnNlX25vZGUsIHRsYWJlbDsKKwlzdHJ1Y3Qgc3ViYWN0aW9uICpyZXF1ZXN0LCAqcmVzcG9uc2U7CisJc3RydWN0IGxpc3QgcmVxdWVzdF9saXN0LCByZXNwb25zZV9saXN0OworCXN0cnVjdCBsaXN0IGxpbms7Cit9OworCitpbnQgZGVjb2RlX2ZjcChzdHJ1Y3QgbGlua190cmFuc2FjdGlvbiAqdCk7CisKKyNlbmRpZiAvKiBfX25vc3lfZHVtcF9oX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZSBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQppbmRleCBlMWQ2MGQ3Li5jYjQzMjg5IDEwMDY0NAotLS0gYS90b29scy9wZXJmLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCkBAIC0xOCwzICsxOCw1IEBACiB0YWdzCiBUQUdTCiBjc2NvcGUqCitjb25maWcubWFrCitjb25maWcubWFrLmF1dG9nZW4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKaW5kZXggNWQxYTk1MC4uYzEwNTc3MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtYnVpbGRpZC1jYWNoZS50eHQKQEAgLTEyLDkgKzEyLDkgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1UaGlzIGNvbW1hbmQgbWFuYWdlcyB0aGUgYnVpbGQtaWQgY2FjaGUuIEl0IGNhbiBhZGQgYW5kIHJlbW92ZSBmaWxlcyB0byB0aGUKLWNhY2hlLiBJbiB0aGUgZnV0dXJlIGl0IHNob3VsZCBhcyB3ZWxsIHB1cmdlIG9sZGVyIGVudHJpZXMsIHNldCB1cHBlciBsaW1pdHMKLWZvciB0aGUgc3BhY2UgdXNlZCBieSB0aGUgY2FjaGUsIGV0Yy4KK1RoaXMgY29tbWFuZCBtYW5hZ2VzIHRoZSBidWlsZC1pZCBjYWNoZS4gSXQgY2FuIGFkZCBhbmQgcmVtb3ZlIGZpbGVzIHRvL2Zyb20KK3RoZSBjYWNoZS4gSW4gdGhlIGZ1dHVyZSBpdCBzaG91bGQgYXMgd2VsbCBwdXJnZSBvbGRlciBlbnRyaWVzLCBzZXQgdXBwZXIKK2xpbWl0cyBmb3IgdGhlIHNwYWNlIHVzZWQgYnkgdGhlIGNhY2hlLCBldGMuCiAKIE9QVElPTlMKIC0tLS0tLS0KQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgQWRkIHNwZWNpZmllZCBmaWxlIHRvIHRoZSBjYWNoZS4KIC1yOjoKIC0tcmVtb3ZlPTo6Ci0gICAgICAgIFJlbW92ZSBzcGVjaWZpZWQgZmlsZSB0byB0aGUgY2FjaGUuCisgICAgICAgIFJlbW92ZSBzcGVjaWZpZWQgZmlsZSBmcm9tIHRoZSBjYWNoZS4KIC12OjoKIC0tdmVyYm9zZTo6CiAJQmUgbW9yZSB2ZXJib3NlLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CmluZGV4IDk0YTI1OGMuLjI3ZDUyZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKQEAgLTMxLDYgKzMxLDEwIEBACiAtLXZtbGludXg9UEFUSDo6CiAJU3BlY2lmeSB2bWxpbnV4IHBhdGggd2hpY2ggaGFzIGRlYnVnaW5mbyAoRHdhcmYgYmluYXJ5KS4KIAorLXM6OgorLS1zb3VyY2U9UEFUSDo6CisJU3BlY2lmeSBwYXRoIHRvIGtlcm5lbCBzb3VyY2UuCisKIC12OjoKIC0tdmVyYm9zZTo6CiAgICAgICAgIEJlIG1vcmUgdmVyYm9zZSAoc2hvdyBwYXJzZWQgYXJndW1lbnRzLCBldGMpLgpAQCAtOTAsOCArOTQsOCBAQAogCiAgW05BTUU9XUxPQ0FMVkFSfCRyZXR2YWx8JVJFR3xAU1lNQk9MWzpUWVBFXQogCi0nTkFNRScgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoaXMgYXJndW1lbnQgKG9wdGlvbmFsKS4gWW91IGNhbiB1c2UgdGhlIG5hbWUgb2YgbG9jYWwgdmFyaWFibGUsIGxvY2FsIGRhdGEgc3RydWN0dXJlIG1lbWJlciAoZS5nLiB2YXItPmZpZWxkLCB2YXIuZmllbGQyKSwgb3Iga3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQgKGUuZy4gJHJldHZhbCwgJWF4LCBldGMpLiBOb3RlIHRoYXQgdGhlIG5hbWUgb2YgdGhpcyBhcmd1bWVudCB3aWxsIGJlIHNldCBhcyB0aGUgbGFzdCBtZW1iZXIgbmFtZSBpZiB5b3Ugc3BlY2lmeSBhIGxvY2FsIGRhdGEgc3RydWN0dXJlIG1lbWJlciAoZS5nLiBmaWVsZDIgZm9yICd2YXItPmZpZWxkMS5maWVsZDInLikKLSdUWVBFJyBjYXN0cyB0aGUgdHlwZSBvZiB0aGlzIGFyZ3VtZW50IChvcHRpb25hbCkuIElmIG9taXR0ZWQsIHBlcmYgcHJvYmUgYXV0b21hdGljYWxseSBzZXQgdGhlIHR5cGUgYmFzZWQgb24gZGVidWdpbmZvLgorJ05BTUUnIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGlzIGFyZ3VtZW50IChvcHRpb25hbCkuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBsb2NhbCBkYXRhIHN0cnVjdHVyZSBtZW1iZXIgKGUuZy4gdmFyLT5maWVsZCwgdmFyLmZpZWxkMiksIGxvY2FsIGFycmF5IHdpdGggZml4ZWQgaW5kZXggKGUuZy4gYXJyYXlbMV0sIHZhci0+YXJyYXlbMF0sIHZhci0+cG9pbnRlclsyXSksIG9yIGtwcm9iZS10cmFjZXIgYXJndW1lbnQgZm9ybWF0IChlLmcuICRyZXR2YWwsICVheCwgZXRjKS4gTm90ZSB0aGF0IHRoZSBuYW1lIG9mIHRoaXMgYXJndW1lbnQgd2lsbCBiZSBzZXQgYXMgdGhlIGxhc3QgbWVtYmVyIG5hbWUgaWYgeW91IHNwZWNpZnkgYSBsb2NhbCBkYXRhIHN0cnVjdHVyZSBtZW1iZXIgKGUuZy4gZmllbGQyIGZvciAndmFyLT5maWVsZDEuZmllbGQyJy4pCisnVFlQRScgY2FzdHMgdGhlIHR5cGUgb2YgdGhpcyBhcmd1bWVudCAob3B0aW9uYWwpLiBJZiBvbWl0dGVkLCBwZXJmIHByb2JlIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSB0eXBlIGJhc2VkIG9uIGRlYnVnaW5mby4gWW91IGNhbiBzcGVjaWZ5ICdzdHJpbmcnIHR5cGUgb25seSBmb3IgdGhlIGxvY2FsIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSBtZW1iZXIgd2hpY2ggaXMgYW4gYXJyYXkgb2Ygb3IgYSBwb2ludGVyIHRvICdjaGFyJyBvciAndW5zaWduZWQgY2hhcicgdHlwZS4KIAogTElORSBTWU5UQVgKIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAppbmRleCAzNGUyNTVmLi4zZWUyN2RjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKQEAgLTEwMyw2ICsxMDMsMTkgQEAKIC0tcmF3LXNhbXBsZXM6OgogQ29sbGVjdCByYXcgc2FtcGxlIHJlY29yZHMgZnJvbSBhbGwgb3BlbmVkIGNvdW50ZXJzIChkZWZhdWx0IGZvciB0cmFjZXBvaW50IGNvdW50ZXJzKS4KIAorLUM6OgorLS1jcHU6OgorQ29sbGVjdCBzYW1wbGVzIG9ubHkgb24gdGhlIGxpc3Qgb2YgY3B1cyBwcm92aWRlZC4gTXVsdGlwbGUgQ1BVcyBjYW4gYmUgcHJvdmlkZWQgYXMgYQorY29tbWEtc3BlcmF0ZWQgbGlzdCB3aXRoIG5vIHNwYWNlOiAwLDEuIFJhbmdlcyBvZiBDUFVzIGFyZSBzcGVjaWZpZWQgd2l0aCAtOiAwLTIuCitJbiBwZXItdGhyZWFkIG1vZGUgd2l0aCBpbmhlcml0YW5jZSBtb2RlIG9uIChkZWZhdWx0KSwgc2FtcGxlcyBhcmUgY2FwdHVyZWQgb25seSB3aGVuCit0aGUgdGhyZWFkIGV4ZWN1dGVzIG9uIHRoZSBkZXNpZ25hdGVkIENQVXMuIERlZmF1bHQgaXMgdG8gbW9uaXRvciBhbGwgQ1BVcy4KKworLU46OgorLS1uby1idWlsZGlkLWNhY2hlOjoKK0RvIG5vdCB1cGRhdGUgdGhlIGJ1aWxpZCBjYWNoZS4gVGhpcyBzYXZlcyBzb21lIG92ZXJoZWFkIGluIHNpdHVhdGlvbnMKK3doZXJlIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGVyZi5kYXRhIGZpbGUgKHdoaWNoIGluY2x1ZGVzIGJ1aWxkaWRzKQoraXMgc3VmZmljaWVudC4KKwogU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rcGVyZjpwZXJmLXN0YXRbMV0sIGxpbmtwZXJmOnBlcmYtbGlzdFsxXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc3RhdC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zdGF0LnR4dAppbmRleCA5MDlmYTc2Li40YjNhMmQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zdGF0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zdGF0LnR4dApAQCAtNDYsNiArNDYsMTMgQEAKIC1COjoKICAgICAgICAgcHJpbnQgbGFyZ2UgbnVtYmVycyB3aXRoIHRob3VzYW5kcycgc2VwYXJhdG9ycyBhY2NvcmRpbmcgdG8gbG9jYWxlCiAKKy1DOjoKKy0tY3B1PTo6CitDb3VudCBvbmx5IG9uIHRoZSBsaXN0IG9mIGNwdXMgcHJvdmlkZWQuIE11bHRpcGxlIENQVXMgY2FuIGJlIHByb3ZpZGVkIGFzIGEKK2NvbW1hLXNwZXJhdGVkIGxpc3Qgd2l0aCBubyBzcGFjZTogMCwxLiBSYW5nZXMgb2YgQ1BVcyBhcmUgc3BlY2lmaWVkIHdpdGggLTogMC0yLgorSW4gcGVyLXRocmVhZCBtb2RlLCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkLiBUaGUgLWEgb3B0aW9uIGlzIHN0aWxsIG5lY2Vzc2FyeQordG8gYWN0aXZhdGUgc3lzdGVtLXdpZGUgbW9uaXRvcmluZy4gRGVmYXVsdCBpcyB0byBjb3VudCBvbiBhbGwgQ1BVcy4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10b3AudHh0CmluZGV4IDc4NWI5ZmMuLjFmOTY4NzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRvcC50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdG9wLnR4dApAQCAtMjUsOSArMjUsMTEgQEAKIC0tY291bnQ9PGNvdW50Pjo6CiAJRXZlbnQgcGVyaW9kIHRvIHNhbXBsZS4KIAotLUMgPGNwdT46OgotLS1DUFU9PGNwdT46OgotCUNQVSB0byBwcm9maWxlLgorLUMgPGNwdS1saXN0Pjo6CistLWNwdT08Y3B1Pjo6CitNb25pdG9yIG9ubHkgb24gdGhlIGxpc3Qgb2YgY3B1cyBwcm92aWRlZC4gTXVsdGlwbGUgQ1BVcyBjYW4gYmUgcHJvdmlkZWQgYXMgYQorY29tbWEtc3BlcmF0ZWQgbGlzdCB3aXRoIG5vIHNwYWNlOiAwLDEuIFJhbmdlcyBvZiBDUFVzIGFyZSBzcGVjaWZpZWQgd2l0aCAtOiAwLTIuCitEZWZhdWx0IGlzIHRvIG1vbml0b3IgYWxsIENQVVMuCiAKIC1kIDxzZWNvbmRzPjo6CiAtLWRlbGF5PTxzZWNvbmRzPjo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL01BTklGRVNUIGIvdG9vbHMvcGVyZi9NQU5JRkVTVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzdmYzBjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9NQU5JRkVTVApAQCAtMCwwICsxLDEyIEBACit0b29scy9wZXJmCitpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAoraW5jbHVkZS9saW51eC9yYnRyZWUuaAoraW5jbHVkZS9saW51eC9saXN0LmgKK2luY2x1ZGUvbGludXgvaGFzaC5oCitpbmNsdWRlL2xpbnV4L3N0cmluZ2lmeS5oCitsaWIvcmJ0cmVlLmMKK2luY2x1ZGUvbGludXgvc3dhYi5oCithcmNoLyovaW5jbHVkZS9hc20vdW5pc3RkKi5oCitpbmNsdWRlL2xpbnV4L3BvaXNvbi5oCitpbmNsdWRlL2xpbnV4L21hZ2ljLmgKK2luY2x1ZGUvbGludXgvaHdfYnJlYWtwb2ludC5oCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCBkNzVjMjhhLi4yNmY2MjZkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTI4NSwxNCArMjg1LDEwIEBACiAJUVVJRVRfU1RERVJSID0gIj4vZGV2L251bGwgMj4mMSIKIGVuZGlmCiAKLUJJVEJVQ0tFVCA9ICIvZGV2L251bGwiCistaW5jbHVkZSBmZWF0dXJlLXRlc3RzLm1hawogCi1pZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8c3RkaW8uaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IHJldHVybiBwdXRzKFwiaGlcIik7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKLQlCSVRCVUNLRVQgPSAucGVyZi5kZXYubnVsbAotZW5kaWYKLQotaWZlcSAoJChzaGVsbCBzaCAtYyAiZWNobyAnaW50IGZvbyh2b2lkKSB7Y2hhciBYWzJdOyByZXR1cm4gMzt9JyB8ICQoQ0MpIC14IGMgLWMgLVdlcnJvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwgLSAtbyAkKEJJVEJVQ0tFVCkgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCi0gIENGTEFHUyA6PSAkKENGTEFHUykgLWZzdGFjay1wcm90ZWN0b3ItYWxsCitpZmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0hFTExPKSwtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCkseSkKKwlDRkxBR1MgOj0gJChDRkxBR1MpIC1mc3RhY2stcHJvdGVjdG9yLWFsbAogZW5kaWYKIAogCkBAIC01MDgsNyArNTA0LDggQEAKIC1pbmNsdWRlIGNvbmZpZy5tYWsKIAogaWZuZGVmIE5PX0RXQVJGCi1pZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8ZHdhcmYuaD4nOyBlY2hvICdcI2luY2x1ZGUgPGxpYmR3Lmg+JzsgZWNobyAnXCNpbmNsdWRlIDx2ZXJzaW9uLmg+JzsgZWNobyAnXCNpZm5kZWYgX0VMRlVUSUxTX1BSRVJFUSc7IGVjaG8gJ1wjZXJyb3InOyBlY2hvICdcI2VuZGlmJzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBEd2FyZiAqZGJnOyBkYmcgPSBkd2FyZl9iZWdpbigwLCBEV0FSRl9DX1JFQUQpOyByZXR1cm4gKGxvbmcpZGJnOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtSS91c3IvaW5jbHVkZS9lbGZ1dGlscyAtbGR3IC1sZWxmIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQorRkxBR1NfRFdBUkY9JChBTExfQ0ZMQUdTKSAtSS91c3IvaW5jbHVkZS9lbGZ1dGlscyAtbGR3IC1sZWxmICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykKK2lmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0RXQVJGKSwkKEZMQUdTX0RXQVJGKSkseSkKIAltc2cgOj0gJCh3YXJuaW5nIE5vIGxpYmR3LmggZm91bmQgb3Igb2xkIGxpYmR3LmggZm91bmQgb3IgZWxmdXRpbHMgaXMgb2xkZXIgdGhhbiAwLjEzOCwgZGlzYWJsZXMgZHdhcmYgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgbmV3IGVsZnV0aWxzLWRldmVsL2xpYmR3LWRldik7CiAJTk9fRFdBUkYgOj0gMQogZW5kaWYgIyBEd2FyZiBzdXBwb3J0CkBAIC01MzYsMTYgKzUzMywxOCBAQAogCUJBU0lDX0NGTEFHUyArPSAtSSQoT1VUUFVUKQogZW5kaWYKIAotaWZlcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGNvbnN0IGNoYXIgKiB2ZXJzaW9uID0gZ251X2dldF9saWJjX3ZlcnNpb24oKTsgcmV0dXJuIChsb25nKXZlcnNpb247IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpLCB5KQotCW1zZyA6PSAkKGVycm9yIE5vIGdudS9saWJjLXZlcnNpb24uaCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgZ2xpYmMtZGV2W2VsXS9nbGliYy1zdGF0aWMpOworRkxBR1NfTElCRUxGPSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChFWFRMSUJTKQoraWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfTElCRUxGKSwkKEZMQUdTX0xJQkVMRikpLHkpCisJRkxBR1NfR0xJQkM9JChBTExfQ0ZMQUdTKSAkKEFMTF9MREZMQUdTKQorCWlmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0dMSUJDKSwkKEZMQUdTX0dMSUJDKSkseSkKKwkJbXNnIDo9ICQoZXJyb3IgTm8gZ251L2xpYmMtdmVyc2lvbi5oIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBnbGliYy1kZXZbZWxdL2dsaWJjLXN0YXRpYyk7CisJZWxzZQorCQltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsKTsKKwllbmRpZgogZW5kaWYKIAotCWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFEX01NQVAsIDApOyByZXR1cm4gKGxvbmcpZWxmOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKLQkJQkFTSUNfQ0ZMQUdTICs9IC1ETElCRUxGX05PX01NQVAKLQllbmRpZgotZWxzZQotCW1zZyA6PSAkKGVycm9yIE5vIGxpYmVsZi5oL2xpYmVsZiBmb3VuZCwgcGxlYXNlIGluc3RhbGwgbGliZWxmLWRldi9lbGZ1dGlscy1saWJlbGYtZGV2ZWwgYW5kIGdsaWJjLWRldltlbF0pOworaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfRUxGX01NQVApLCQoRkxBR1NfQ09NTU9OKSkseSkKKwlCQVNJQ19DRkxBR1MgKz0gLURMSUJFTEZfTk9fTU1BUAogZW5kaWYKIAogaWZuZGVmIE5PX0RXQVJGCkBAIC01NjEsNjQgKzU2MCw3MyBAQAogaWZkZWYgTk9fTkVXVAogCUJBU0lDX0NGTEFHUyArPSAtRE5PX05FV1RfU1VQUE9SVAogZWxzZQotaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPG5ld3QuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IG5ld3RJbml0KCk7IG5ld3RDbHMoKTsgcmV0dXJuIG5ld3RGaW5pc2hlZCgpOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtbG5ld3QgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCi0JbXNnIDo9ICQod2FybmluZyBuZXd0IG5vdCBmb3VuZCwgZGlzYWJsZXMgVFVJIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIG5ld3QtZGV2ZWwgb3IgbGlibmV3dC1kZXYpOwotCUJBU0lDX0NGTEFHUyArPSAtRE5PX05FV1RfU1VQUE9SVAotZWxzZQotCSMgRmVkb3JhIGhhcyAvdXNyL2luY2x1ZGUvc2xhbmcvc2xhbmcuaCwgYnV0IHVidW50dSAvdXNyL2luY2x1ZGUvc2xhbmcuaAotCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9zbGFuZwotCUVYVExJQlMgKz0gLWxuZXd0IC1sc2xhbmcKLQlMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL25ld3QubwotZW5kaWYKLWVuZGlmICMgTk9fTkVXVAotCi1pZm5kZWYgTk9fTElCUEVSTAotUEVSTF9FTUJFRF9MRE9QVFMgPSBgcGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBsZG9wdHMgMj4vZGV2L251bGxgCi1QRVJMX0VNQkVEX0NDT1BUUyA9IGBwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGNjb3B0cyAyPi9kZXYvbnVsbGAKKwlGTEFHU19ORVdUPSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbG5ld3QKKwlpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9ORVdUKSwkKEZMQUdTX05FV1QpKSx5KQorCQltc2cgOj0gJCh3YXJuaW5nIG5ld3Qgbm90IGZvdW5kLCBkaXNhYmxlcyBUVUkgc3VwcG9ydC4gUGxlYXNlIGluc3RhbGwgbmV3dC1kZXZlbCBvciBsaWJuZXd0LWRldik7CisJCUJBU0lDX0NGTEFHUyArPSAtRE5PX05FV1RfU1VQUE9SVAorCWVsc2UKKwkJIyBGZWRvcmEgaGFzIC91c3IvaW5jbHVkZS9zbGFuZy9zbGFuZy5oLCBidXQgdWJ1bnR1IC91c3IvaW5jbHVkZS9zbGFuZy5oCisJCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9zbGFuZworCQlFWFRMSUJTICs9IC1sbmV3dCAtbHNsYW5nCisJCUxJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvbmV3dC5vCisJZW5kaWYKIGVuZGlmCiAKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxFWFRFUk4uaD4nOyBlY2hvICdcI2luY2x1ZGUgPHBlcmwuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IHBlcmxfYWxsb2MoKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKFBFUkxfRU1CRURfQ0NPUFRTKSAtbyAkKEJJVEJVQ0tFVCkgJChQRVJMX0VNQkVEX0xET1BUUykgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHkiKSwgeSkKK2lmZGVmIE5PX0xJQlBFUkwKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQRVJMCiBlbHNlCi0JQUxMX0xERkxBR1MgKz0gJChQRVJMX0VNQkVEX0xET1BUUykKLQlMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXBlcmwubwotCUxJQl9PQkpTICs9ICQoT1VUUFVUKXNjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCisJUEVSTF9FTUJFRF9MRE9QVFMgPSBgcGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBsZG9wdHMgMj4vZGV2L251bGxgCisJUEVSTF9FTUJFRF9DQ09QVFMgPSBgcGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHMgMj4vZGV2L251bGxgCisJRkxBR1NfUEVSTF9FTUJFRD0kKFBFUkxfRU1CRURfQ0NPUFRTKSAkKFBFUkxfRU1CRURfTERPUFRTKQorCisJaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfUEVSTF9FTUJFRCksJChGTEFHU19QRVJMX0VNQkVEKSkseSkKKwkJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCUEVSTAorCWVsc2UKKwkJQUxMX0xERkxBR1MgKz0gJChQRVJMX0VNQkVEX0xET1BUUykKKwkJTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1wZXJsLm8KKwkJTElCX09CSlMgKz0gJChPVVRQVVQpc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KKwllbmRpZgogZW5kaWYKIAotaWZuZGVmIE5PX0xJQlBZVEhPTgotUFlUSE9OX0VNQkVEX0xET1BUUyA9IGBweXRob24tY29uZmlnIC0tbGRmbGFncyAyPi9kZXYvbnVsbGAKLVBZVEhPTl9FTUJFRF9DQ09QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKLWVuZGlmCi0KLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxQeXRob24uaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IFB5X0luaXRpYWxpemUoKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKFBZVEhPTl9FTUJFRF9DQ09QVFMpIC1vICQoQklUQlVDS0VUKSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCitpZmRlZiBOT19MSUJQWVRIT04KIAlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KIGVsc2UKLQlBTExfTERGTEFHUyArPSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCi0JTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24ubwotCUxJQl9PQkpTICs9ICQoT1VUUFVUKXNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KKwlQWVRIT05fRU1CRURfTERPUFRTID0gYHB5dGhvbi1jb25maWcgLS1sZGZsYWdzIDI+L2Rldi9udWxsYAorCVBZVEhPTl9FTUJFRF9DQ09QVFMgPSBgcHl0aG9uLWNvbmZpZyAtLWNmbGFncyAyPi9kZXYvbnVsbGAKKwlGTEFHU19QWVRIT05fRU1CRUQ9JChQWVRIT05fRU1CRURfQ0NPUFRTKSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCisJaWZuZXEgKCQoY2FsbCB0cnktY2MsJChTT1VSQ0VfUFlUSE9OX0VNQkVEKSwkKEZMQUdTX1BZVEhPTl9FTUJFRCkpLHkpCisJCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBZVEhPTgorCWVsc2UKKwkJQUxMX0xERkxBR1MgKz0gJChQWVRIT05fRU1CRURfTERPUFRTKQorCQlMSUJfT0JKUyArPSAkKE9VVFBVVCl1dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5vCisJCUxJQl9PQkpTICs9ICQoT1VUUFVUKXNjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0Lm8KKwllbmRpZgogZW5kaWYKIAogaWZkZWYgTk9fREVNQU5HTEUKIAlCQVNJQ19DRkxBR1MgKz0gLUROT19ERU1BTkdMRQogZWxzZQotCWlmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEUKKyAgICAgICAgaWZkZWYgSEFWRV9DUExVU19ERU1BTkdMRQogCQlFWFRMSUJTICs9IC1saWJlcnR5CiAJCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQ1BMVVNfREVNQU5HTEUKLQllbHNlCi0JCWhhc19iZmQgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKQotCisgICAgICAgIGVsc2UKKwkJRkxBR1NfQkZEPSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZAorCQloYXNfYmZkIDo9ICQoY2FsbCB0cnktY2MsJChTT1VSQ0VfQkZEKSwkKEZMQUdTX0JGRCkpCiAJCWlmZXEgKCQoaGFzX2JmZCkseSkKIAkJCUVYVExJQlMgKz0gLWxiZmQKIAkJZWxzZQotCQkJaGFzX2JmZF9pYmVydHkgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8YmZkLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBiZmRfZGVtYW5nbGUoMCwgMCwgMCk7IHJldHVybiAwOyB9JykgfCAkKENDKSAteCBjIC0gJChBTExfQ0ZMQUdTKSAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGJmZCAtbGliZXJ0eSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKQorCQkJRkxBR1NfQkZEX0lCRVJUWT0kKEZMQUdTX0JGRCkgLWxpYmVydHkKKwkJCWhhc19iZmRfaWJlcnR5IDo9ICQoY2FsbCB0cnktY2MsJChTT1VSQ0VfQkZEKSwkKEZMQUdTX0JGRF9JQkVSVFkpKQogCQkJaWZlcSAoJChoYXNfYmZkX2liZXJ0eSkseSkKIAkJCQlFWFRMSUJTICs9IC1sYmZkIC1saWJlcnR5CiAJCQllbHNlCi0JCQkJaGFzX2JmZF9pYmVydHlfeiA6PSAkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxiZmQuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IGJmZF9kZW1hbmdsZSgwLCAwLCAwKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1sYmZkIC1saWJlcnR5IC1seiAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKQorCQkJCUZMQUdTX0JGRF9JQkVSVFlfWj0kKEZMQUdTX0JGRF9JQkVSVFkpIC1segorCQkJCWhhc19iZmRfaWJlcnR5X3ogOj0gJChjYWxsIHRyeS1jYywkKFNPVVJDRV9CRkQpLCQoRkxBR1NfQkZEX0lCRVJUWV9aKSkKIAkJCQlpZmVxICgkKGhhc19iZmRfaWJlcnR5X3opLHkpCiAJCQkJCUVYVExJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CiAJCQkJZWxzZQotCQkJCQloYXNfY3BsdXNfZGVtYW5nbGUgOj0gJChzaGVsbCBzaCAtYyAiKGVjaG8gJ2V4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBjcGx1c19kZW1hbmdsZSgwLCAwKTsgcmV0dXJuIDA7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1vICQoQklUQlVDS0VUKSAkKEFMTF9MREZMQUdTKSAkKEVYVExJQlMpIC1saWJlcnR5ICIkKFFVSUVUX1NUREVSUikiICYmIGVjaG8geSIpCisJCQkJCUZMQUdTX0NQTFVTX0RFTUFOR0xFPSQoQUxMX0NGTEFHUykgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAtbGliZXJ0eQorCQkJCQloYXNfY3BsdXNfZGVtYW5nbGUgOj0gJChjYWxsIHRyeS1jYywkKFNPVVJDRV9DUExVU19ERU1BTkdMRSksJChGTEFHU19DUExVU19ERU1BTkdMRSkpCiAJCQkJCWlmZXEgKCQoaGFzX2NwbHVzX2RlbWFuZ2xlKSx5KQogCQkJCQkJRVhUTElCUyArPSAtbGliZXJ0eQogCQkJCQkJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9DUExVU19ERU1BTkdMRQpAQCAtODY3LDcgKzg3NSw3IEBACiAKIFNIRUxMID0gJChTSEVMTF9QQVRIKQogCi1hbGw6OiAucGVyZi5kZXYubnVsbCBzaGVsbF9jb21wYXRpYmlsaXR5X3Rlc3QgJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSAkKE9USEVSX1BST0dSQU1TKSAkKE9VVFBVVClQRVJGLUJVSUxELU9QVElPTlMKK2FsbDo6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdCAkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpICQoT1RIRVJfUFJPR1JBTVMpICQoT1VUUFVUKVBFUkYtQlVJTEQtT1BUSU9OUwogaWZuZXEgKCwkWCkKIAkkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIHBlcmYkWCkpLCB0ZXN0ICckcCcgLWVmICckcCRYJyB8fCAkKFJNKSAnJHAnOykKIGVuZGlmCkBAIC0xMTk3LDExICsxMjA1LDYgQEAKIC5QSE9OWTogLkZPUkNFLVBFUkYtVkVSU0lPTi1GSUxFIFRBR1MgdGFncyBjc2NvcGUgLkZPUkNFLVBFUkYtQ0ZMQUdTCiAuUEhPTlk6IC5GT1JDRS1QRVJGLUJVSUxELU9QVElPTlMKIAotLnBlcmYuZGV2Lm51bGw6Ci0JCXRvdWNoIC5wZXJmLmRldi5udWxsCi0KLS5JTlRFUk1FRElBVEU6CS5wZXJmLmRldi5udWxsCi0KICMjIyBNYWtlIHN1cmUgYnVpbHQtaW5zIGRvIG5vdCBoYXZlIGR1cHMgYW5kIGxpc3RlZCBpbiBwZXJmLmMKICMKIGNoZWNrLWJ1aWx0aW5zOjoKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYXJjaC9zaC9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvYXJjaC9zaC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTEzMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9hcmNoL3NoL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAoraWZuZGVmIE5PX0RXQVJGCitQRVJGX0hBVkVfRFdBUkZfUkVHUyA6PSAxCitMSUJfT0JKUyArPSAkKE9VVFBVVClhcmNoLyQoQVJDSCkvdXRpbC9kd2FyZi1yZWdzLm8KK2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2FyY2gvc2gvdXRpbC9kd2FyZi1yZWdzLmMgYi90b29scy9wZXJmL2FyY2gvc2gvdXRpbC9kd2FyZi1yZWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZWRiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvYXJjaC9zaC91dGlsL2R3YXJmLXJlZ3MuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogTWFwcGluZyBvZiBEV0FSRiBkZWJ1ZyByZWdpc3RlciBudW1iZXJzIGludG8gcmVnaXN0ZXIgbmFtZXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hdHQgRmxlbWluZyA8bWF0dEBjb25zb2xlLXBpbXBzLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGliaW8uaD4KKyNpbmNsdWRlIDxkd2FyZi1yZWdzLmg+CisKKy8qCisgKiBHZW5lcmljIGR3YXJmIGFuYWx5c2lzIGhlbHBlcnMKKyAqLworCisjZGVmaW5lIFNIX01BWF9SRUdTIDE4Citjb25zdCBjaGFyICpzaF9yZWdzX3RhYmxlW1NIX01BWF9SRUdTXSA9IHsKKwkicjAiLAorCSJyMSIsCisJInIyIiwKKwkicjMiLAorCSJyNCIsCisJInI1IiwKKwkicjYiLAorCSJyNyIsCisJInI4IiwKKwkicjkiLAorCSJyMTAiLAorCSJyMTEiLAorCSJyMTIiLAorCSJyMTMiLAorCSJyMTQiLAorCSJyMTUiLAorCSJwYyIsCisJInByIiwKK307CisKKy8qIFJldHVybiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHJlZ2lzdGVyIHN0cmluZyAoZm9yIGtwcm9iZS10cmFjZXIpICovCitjb25zdCBjaGFyICpnZXRfYXJjaF9yZWdzdHIodW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIChuIDw9IFNIX01BWF9SRUdTKSA/IHNoX3JlZ3NfdGFibGVbbl0gOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCA5NmRiNTI0Li5mZDIwNjcwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtNjEsMTEgKzYxLDkgQEAKIHN0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CisJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGE7CiAKLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkOiAlI0x4XG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBldmVudC0+aXAucGlkLCBldmVudC0+aXAuaXApOwotCi0JaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCBOVUxMKSA8IDApIHsKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLCAmYWwsICZkYXRhLCBOVUxMKSA8IDApIHsKIAkJcHJfd2FybmluZygicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQkgICBldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwppbmRleCBmOGUzZDE4Li4yOWFkMjBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTc4LDggKzc4LDcgQEAKIAlzdHJ1Y3Qgc3RyX25vZGUgKnBvczsKIAljaGFyIGRlYnVnZGlyW1BBVEhfTUFYXTsKIAotCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMvJXMiLCBnZXRlbnYoIkhPTUUiKSwKLQkJIERFQlVHX0NBQ0hFX0RJUik7CisJc25wcmludGYoZGVidWdkaXIsIHNpemVvZihkZWJ1Z2RpciksICIlcyIsIGJ1aWxkaWRfZGlyKTsKIAogCWlmIChhZGRfbmFtZV9saXN0X3N0cikgewogCQlsaXN0ID0gc3RybGlzdF9fbmV3KHRydWUsIGFkZF9uYW1lX2xpc3Rfc3RyKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWxpc3QuYwppbmRleCA5OTg5MDcyLi40NGE0N2UxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1saXN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtbGlzdC5jCkBAIC00MywxMCArNDMsOCBAQAogCWlmIChzZXNzaW9uID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAotCWlmICh3aXRoX2hpdHMpIHsKLQkJc3ltYm9sX2NvbmYuZnVsbF9wYXRocyA9IHRydWU7CisJaWYgKHdpdGhfaGl0cykKIAkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmYnVpbGRfaWRfX21hcmtfZHNvX2hpdF9vcHMpOwotCX0KIAogCXBlcmZfc2Vzc2lvbl9fZnByaW50Zl9kc29zX2J1aWxkaWQoc2Vzc2lvbiwgc3Rkb3V0LCB3aXRoX2hpdHMpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCBhNmUyZmRjLi5mY2ExZDQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTM1LDEwICszNSw3IEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3RydWN0IHNhbXBsZV9kYXRhIGRhdGEgPSB7IC5wZXJpb2QgPSAxLCB9OwogCi0JZHVtcF9wcmludGYoIihJUCwgJWQpOiAlZDogJSNMeFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCQkgICAgZXZlbnQtPmlwLnBpZCwgZXZlbnQtPmlwLmlwKTsKLQotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCAmZGF0YSwgTlVMTCkgPCAwKSB7CiAJCXByX3dhcm5pbmcoInByb2JsZW0gcHJvY2Vzc2luZyAlZCBldmVudCwgc2tpcHBpbmcgaXQuXG4iLAogCQkJICAgZXZlbnQtPmhlYWRlci50eXBlKTsKIAkJcmV0dXJuIC0xOwpAQCAtNDcsOCArNDQsNiBAQAogCWlmIChhbC5maWx0ZXJlZCB8fCBhbC5zeW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlldmVudF9fcGFyc2Vfc2FtcGxlKGV2ZW50LCBzZXNzaW9uLT5zYW1wbGVfdHlwZSwgJmRhdGEpOwotCiAJaWYgKGhpc3RzX19hZGRfZW50cnkoJnNlc3Npb24tPmhpc3RzLCAmYWwsIGRhdGEucGVyaW9kKSkgewogCQlwcl93YXJuaW5nKCJwcm9ibGVtIGluY3JlbWVudGluZyBzeW1ib2wgcGVyaW9kLCBza2lwcGluZyBldmVudFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTE4NSw4ICsxODAsNiBAQAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLCAiZG9uJ3QgY29tcGxhaW4sIGRvIGl0IiksCiAJT1BUX0JPT0xFQU4oJ20nLCAibW9kdWxlcyIsICZzeW1ib2xfY29uZi51c2VfbW9kdWxlcywKIAkJICAgICJsb2FkIG1vZHVsZSBzeW1ib2xzIC0gV0FSTklORzogdXNlIG9ubHkgd2l0aCAtayBhbmQgTElWRSBrZXJuZWwiKSwKLQlPUFRfQk9PTEVBTignUCcsICJmdWxsLXBhdGhzIiwgJnN5bWJvbF9jb25mLmZ1bGxfcGF0aHMsCi0JCSAgICAiRG9uJ3Qgc2hvcnRlbiB0aGUgcGF0aG5hbWVzIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN3ZCIpLAogCU9QVF9TVFJJTkcoJ2QnLCAiZHNvcyIsICZzeW1ib2xfY29uZi5kc29fbGlzdF9zdHIsICJkc29bLGRzby4uLl0iLAogCQkgICAib25seSBjb25zaWRlciBzeW1ib2xzIGluIHRoZXNlIGRzb3MiKSwKIAlPUFRfU1RSSU5HKCdDJywgImNvbW1zIiwgJnN5bWJvbF9jb25mLmNvbW1fbGlzdF9zdHIsICJjb21tWyxjb21tLi4uXSIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGU0YTRkYTMuLjE5OWQ1ZTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0xODIsNiArMTgyLDggQEAKIAkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCiAJT1BUX1NUUklORygnaycsICJ2bWxpbnV4IiwgJnN5bWJvbF9jb25mLnZtbGludXhfbmFtZSwKIAkJICAgImZpbGUiLCAidm1saW51eCBwYXRobmFtZSIpLAorCU9QVF9TVFJJTkcoJ3MnLCAic291cmNlIiwgJnN5bWJvbF9jb25mLnNvdXJjZV9wcmVmaXgsCisJCSAgICJkaXJlY3RvcnkiLCAicGF0aCB0byBrZXJuZWwgc291cmNlIiksCiAjZW5kaWYKIAlPUFRfX0RSWV9SVU4oJnByb2JlX2V2ZW50X2RyeV9ydW4pLAogCU9QVF9JTlRFR0VSKCdcMCcsICJtYXgtcHJvYmVzIiwgJnBhcmFtcy5tYXhfcHJvYmVfcG9pbnRzLApAQCAtMjY1LDQgKzI2NywzIEBACiAJfQogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggNzExNzQ1Zi4uZmY3N2I4MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIGludAkJCXJlYWx0aW1lX3ByaW8JCQk9ICAgICAgMDsKIHN0YXRpYyBib29sCQkJcmF3X3NhbXBsZXMJCQk9ICBmYWxzZTsKIHN0YXRpYyBib29sCQkJc3lzdGVtX3dpZGUJCQk9ICBmYWxzZTsKLXN0YXRpYyBpbnQJCQlwcm9maWxlX2NwdQkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3BpZAkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3RpZAkJCT0gICAgIC0xOwogc3RhdGljIHBpZF90CQkJKmFsbF90aWRzCQkJPSAgICAgIE5VTEw7CkBAIC02MSw2ICs2MCw3IEBACiBzdGF0aWMgYm9vbAkJCWluaGVyaXRfc3RhdAkJCT0gIGZhbHNlOwogc3RhdGljIGJvb2wJCQlub19zYW1wbGVzCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCXNhbXBsZV9hZGRyZXNzCQkJPSAgZmFsc2U7CitzdGF0aWMgYm9vbAkJCW5vX2J1aWxkaWQJCQk9ICBmYWxzZTsKIAogc3RhdGljIGxvbmcJCQlzYW1wbGVzCQkJCT0gICAgICAwOwogc3RhdGljIHU2NAkJCWJ5dGVzX3dyaXR0ZW4JCQk9ICAgICAgMDsKQEAgLTc0LDYgKzc0LDcgQEAKIHN0YXRpYyBvZmZfdAkJCXBvc3RfcHJvY2Vzc2luZ19vZmZzZXQ7CiAKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9zZXNzaW9uCSpzZXNzaW9uOworc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAogc3RydWN0IG1tYXBfZGF0YSB7CiAJaW50CQkJY291bnRlcjsKQEAgLTI2OCwxMiArMjY5LDE3IEBACiAJaWYgKGluaGVyaXRfc3RhdCkKIAkJYXR0ci0+aW5oZXJpdF9zdGF0ID0gMTsKIAotCWlmIChzYW1wbGVfYWRkcmVzcykKKwlpZiAoc2FtcGxlX2FkZHJlc3MpIHsKIAkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQUREUjsKKwkJYXR0ci0+bW1hcF9kYXRhID0gdHJhY2s7CisJfQogCiAJaWYgKGNhbGxfZ3JhcGgpCiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX0NBTExDSEFJTjsKIAorCWlmIChzeXN0ZW1fd2lkZSkKKwkJYXR0ci0+c2FtcGxlX3R5cGUJfD0gUEVSRl9TQU1QTEVfQ1BVOworCiAJaWYgKHJhd19zYW1wbGVzKSB7CiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1RJTUU7CiAJCWF0dHItPnNhbXBsZV90eXBlCXw9IFBFUkZfU0FNUExFX1JBVzsKQEAgLTMwMCw3ICszMDYsNyBAQAogCQkJCWRpZSgiUGVybWlzc2lvbiBlcnJvciAtIGFyZSB5b3Ugcm9vdD9cbiIKIAkJCQkJIlx0IENvbnNpZGVyIHR3ZWFraW5nIgogCQkJCQkiIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZC5cbiIpOwotCQkJZWxzZSBpZiAoZXJyID09ICBFTk9ERVYgJiYgcHJvZmlsZV9jcHUgIT0gLTEpIHsKKwkJCWVsc2UgaWYgKGVyciA9PSAgRU5PREVWICYmIGNwdV9saXN0KSB7CiAJCQkJZGllKCJObyBzdWNoIGRldmljZSAtIGRpZCB5b3Ugc3BlY2lmeSIKIAkJCQkJIiBhbiBvdXQtb2YtcmFuZ2UgcHJvZmlsZSBDUFU/XG4iKTsKIAkJCX0KQEAgLTQzMywxNCArNDM5LDE0IEBACiAKIAkJcHJvY2Vzc19idWlsZGlkcygpOwogCQlwZXJmX2hlYWRlcl9fd3JpdGUoJnNlc3Npb24tPmhlYWRlciwgb3V0cHV0LCB0cnVlKTsKKwkJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CisJCXN5bWJvbF9fZXhpdCgpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgZXZlbnRfX3N5bnRoZXNpemVfZ3Vlc3Rfb3Moc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IGVycjsKLQljaGFyICpndWVzdF9rYWxsc3ltczsKLQljaGFyIHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnBzZXNzaW9uID0gZGF0YTsKIAogCWlmIChtYWNoaW5lX19pc19ob3N0KG1hY2hpbmUpKQpAQCAtNDYwLDEzICs0NjYsNiBAQAogCQlwcl9lcnIoIkNvdWxkbid0IHJlY29yZCBndWVzdCBrZXJuZWwgWyVkXSdzIHJlZmVyZW5jZSIKIAkJICAgICAgICIgcmVsb2NhdGlvbiBzeW1ib2wuXG4iLCBtYWNoaW5lLT5waWQpOwogCi0JaWYgKG1hY2hpbmVfX2lzX2RlZmF1bHRfZ3Vlc3QobWFjaGluZSkpCi0JCWd1ZXN0X2thbGxzeW1zID0gKGNoYXIgKikgc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF9rYWxsc3ltczsKLQllbHNlIHsKLQkJc3ByaW50ZihwYXRoLCAiJXMvcHJvYy9rYWxsc3ltcyIsIG1hY2hpbmUtPnJvb3RfZGlyKTsKLQkJZ3Vlc3Rfa2FsbHN5bXMgPSBwYXRoOwotCX0KLQogCS8qCiAJICogV2UgdXNlIF9zdGV4dCBmb3IgZ3Vlc3Qga2VybmVsIGJlY2F1c2UgZ3Vlc3Qga2VybmVsJ3MgL3Byb2Mva2FsbHN5bXMKIAkgKiBoYXZlIG5vIF90ZXh0IHNvbWV0aW1lcy4KQEAgLTU2MSwxMiArNTYwLDE1IEBACiAJaWYgKCFmaWxlX25ldykgewogCQllcnIgPSBwZXJmX2hlYWRlcl9fcmVhZChzZXNzaW9uLCBvdXRwdXQpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIG91dF9kZWxldGVfc2Vzc2lvbjsKIAl9CiAKIAlpZiAoaGF2ZV90cmFjZXBvaW50cyhhdHRycywgbnJfY291bnRlcnMpKQogCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX1RSQUNFX0lORk8pOwogCisJLyoKKyAJICogcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbikgd2lsbCBiZSBjYWxsZWQgYXQgYXRleGl0X2hlYWRlcigpCisJICovCiAJYXRleGl0KGF0ZXhpdF9oZWFkZXIpOwogCiAJaWYgKGZvcmtzKSB7CkBAIC02MjIsMTAgKzYyNCwxNSBAQAogCQljbG9zZShjaGlsZF9yZWFkeV9waXBlWzBdKTsKIAl9CiAKLQlpZiAoKCFzeXN0ZW1fd2lkZSAmJiBub19pbmhlcml0KSB8fCBwcm9maWxlX2NwdSAhPSAtMSkgewotCQlvcGVuX2NvdW50ZXJzKHByb2ZpbGVfY3B1KTsKKwlucl9jcHVzID0gcmVhZF9jcHVfbWFwKGNwdV9saXN0KTsKKwlpZiAobnJfY3B1cyA8IDEpIHsKKwkJcGVycm9yKCJmYWlsZWQgdG8gY29sbGVjdCBudW1iZXIgb2YgQ1BVc1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoIXN5c3RlbV93aWRlICYmIG5vX2luaGVyaXQgJiYgIWNwdV9saXN0KSB7CisJCW9wZW5fY291bnRlcnMoLTEpOwogCX0gZWxzZSB7Ci0JCW5yX2NwdXMgPSByZWFkX2NwdV9tYXAoKTsKIAkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKIAkJCW9wZW5fY291bnRlcnMoY3B1bWFwW2ldKTsKIAl9CkBAIC03MDQsNyArNzExLDcgQEAKIAlpZiAocGVyZl9ndWVzdCkKIAkJcGVyZl9zZXNzaW9uX19wcm9jZXNzX21hY2hpbmVzKHNlc3Npb24sIGV2ZW50X19zeW50aGVzaXplX2d1ZXN0X29zKTsKIAotCWlmICghc3lzdGVtX3dpZGUgJiYgcHJvZmlsZV9jcHUgPT0gLTEpCisJaWYgKCFzeXN0ZW1fd2lkZSkKIAkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCiAJCQkJCSBzZXNzaW9uKTsKIAllbHNlCkBAIC03NjYsNiArNzczLDEwIEBACiAJCWJ5dGVzX3dyaXR0ZW4gLyAyNCk7CiAKIAlyZXR1cm4gMDsKKworb3V0X2RlbGV0ZV9zZXNzaW9uOgorCXBlcmZfc2Vzc2lvbl9fZGVsZXRlKHNlc3Npb24pOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVjb3JkX3VzYWdlW10gPSB7CkBAIC03OTQsOCArODA1LDggQEAKIAkJCSAgICAic3lzdGVtLXdpZGUgY29sbGVjdGlvbiBmcm9tIGFsbCBDUFVzIiksCiAJT1BUX0JPT0xFQU4oJ0EnLCAiYXBwZW5kIiwgJmFwcGVuZF9maWxlLAogCQkJICAgICJhcHBlbmQgdG8gdGhlIG91dHB1dCBmaWxlIHRvIGRvIGluY3JlbWVudGFsIHByb2ZpbGluZyIpLAotCU9QVF9JTlRFR0VSKCdDJywgInByb2ZpbGVfY3B1IiwgJnByb2ZpbGVfY3B1LAotCQkJICAgICJDUFUgdG8gcHJvZmlsZSBvbiIpLAorCU9QVF9TVFJJTkcoJ0MnLCAiY3B1IiwgJmNwdV9saXN0LCAiY3B1IiwKKwkJICAgICJsaXN0IG9mIGNwdXMgdG8gbW9uaXRvciIpLAogCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmZvcmNlLAogCQkJIm92ZXJ3cml0ZSBleGlzdGluZyBkYXRhIGZpbGUgKGRlcHJlY2F0ZWQpIiksCiAJT1BUX1U2NCgnYycsICJjb3VudCIsICZ1c2VyX2ludGVydmFsLCAiZXZlbnQgcGVyaW9kIHRvIHNhbXBsZSIpLApAQCAtODE1LDE3ICs4MjYsMTkgQEAKIAkJICAgICJTYW1wbGUgYWRkcmVzc2VzIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAibm8tc2FtcGxlcyIsICZub19zYW1wbGVzLAogCQkgICAgImRvbid0IHNhbXBsZSIpLAorCU9QVF9CT09MRUFOKCdOJywgIm5vLWJ1aWxkaWQtY2FjaGUiLCAmbm9fYnVpbGRpZCwKKwkJICAgICJkbyBub3QgdXBkYXRlIHRoZSBidWlsZGlkIGNhY2hlIiksCiAJT1BUX0VORCgpCiB9OwogCiBpbnQgY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCBfX3VzZWQpCiB7Ci0JaW50IGksajsKKwlpbnQgaSwgaiwgZXJyID0gLUVOT01FTTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHJlY29yZF91c2FnZSwKIAkJCSAgICBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAlpZiAoIWFyZ2MgJiYgdGFyZ2V0X3BpZCA9PSAtMSAmJiB0YXJnZXRfdGlkID09IC0xICYmCi0JCSFzeXN0ZW1fd2lkZSAmJiBwcm9maWxlX2NwdSA9PSAtMSkKKwkJIXN5c3RlbV93aWRlICYmICFjcHVfbGlzdCkKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKHJlY29yZF91c2FnZSwgb3B0aW9ucyk7CiAKIAlpZiAoZm9yY2UgJiYgYXBwZW5kX2ZpbGUpIHsKQEAgLTgzOSw2ICs4NTIsOCBAQAogCX0KIAogCXN5bWJvbF9faW5pdCgpOworCWlmIChub19idWlsZGlkKQorCQlkaXNhYmxlX2J1aWxkaWRfY2FjaGUoKTsKIAogCWlmICghbnJfY291bnRlcnMpIHsKIAkJbnJfY291bnRlcnMJPSAxOwpAQCAtODU3LDcgKzg3Miw3IEBACiAJfSBlbHNlIHsKIAkJYWxsX3RpZHM9bWFsbG9jKHNpemVvZihwaWRfdCkpOwogCQlpZiAoIWFsbF90aWRzKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG91dF9zeW1ib2xfZXhpdDsKIAogCQlhbGxfdGlkc1swXSA9IHRhcmdldF90aWQ7CiAJCXRocmVhZF9udW0gPSAxOwpAQCAtODY3LDEzICs4ODIsMTMgQEAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DT1VOVEVSUzsgaisrKSB7CiAJCQlmZFtpXVtqXSA9IG1hbGxvYyhzaXplb2YoaW50KSp0aHJlYWRfbnVtKTsKIAkJCWlmICghZmRbaV1bal0pCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJZ290byBvdXRfZnJlZV9mZDsKIAkJfQogCX0KIAlldmVudF9hcnJheSA9IG1hbGxvYygKIAkJc2l6ZW9mKHN0cnVjdCBwb2xsZmQpKk1BWF9OUl9DUFVTKk1BWF9DT1VOVEVSUyp0aHJlYWRfbnVtKTsKIAlpZiAoIWV2ZW50X2FycmF5KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9mZDsKIAogCWlmICh1c2VyX2ludGVydmFsICE9IFVMTE9OR19NQVgpCiAJCWRlZmF1bHRfaW50ZXJ2YWwgPSB1c2VyX2ludGVydmFsOwpAQCAtODg5LDggKzkwNCwyMiBAQAogCQlkZWZhdWx0X2ludGVydmFsID0gZnJlcTsKIAl9IGVsc2UgewogCQlmcHJpbnRmKHN0ZGVyciwgImZyZXF1ZW5jeSBhbmQgY291bnQgYXJlIHplcm8sIGFib3J0aW5nXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlX2V2ZW50X2FycmF5OwogCX0KIAotCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJZXJyID0gX19jbWRfcmVjb3JkKGFyZ2MsIGFyZ3YpOworCitvdXRfZnJlZV9ldmVudF9hcnJheToKKwlmcmVlKGV2ZW50X2FycmF5KTsKK291dF9mcmVlX2ZkOgorCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ1BVUzsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBNQVhfQ09VTlRFUlM7IGorKykKKwkJCWZyZWUoZmRbaV1bal0pOworCX0KKwlmcmVlKGFsbF90aWRzKTsKKwlhbGxfdGlkcyA9IE5VTEw7CitvdXRfc3ltYm9sX2V4aXQ6CisJc3ltYm9sX19leGl0KCk7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCBmZDc0MDdjLi4yZjRiOTI5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0xNTUsMzAgKzE1NSw3IEBACiAJc3RydWN0IGFkZHJfbG9jYXRpb24gYWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0cjsKIAotCWV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnQsIHNlc3Npb24tPnNhbXBsZV90eXBlLCAmZGF0YSk7Ci0KLQlkdW1wX3ByaW50ZigiKElQLCAlZCk6ICVkLyVkOiAlI0x4IHBlcmlvZDogJUxkXG4iLCBldmVudC0+aGVhZGVyLm1pc2MsCi0JCSAgICBkYXRhLnBpZCwgZGF0YS50aWQsIGRhdGEuaXAsIGRhdGEucGVyaW9kKTsKLQotCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgewotCQl1bnNpZ25lZCBpbnQgaTsKLQotCQlkdW1wX3ByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIGRhdGEuY2FsbGNoYWluLT5ucik7Ci0KLQkJaWYgKCFpcF9jYWxsY2hhaW5fX3ZhbGlkKGRhdGEuY2FsbGNoYWluLCBldmVudCkpIHsKLQkJCXByX2RlYnVnKCJjYWxsLWNoYWluIHByb2JsZW0gd2l0aCBldmVudCwgIgotCQkJCSAic2tpcHBpbmcgaXQuXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKGR1bXBfdHJhY2UpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBkYXRhLmNhbGxjaGFpbi0+bnI7IGkrKykKLQkJCQlkdW1wX3ByaW50ZigiLi4uLi4gJTJkOiAlMDE2THhcbiIsCi0JCQkJCSAgICBpLCBkYXRhLmNhbGxjaGFpbi0+aXBzW2ldKTsKLQkJfQotCX0KLQotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoZXZlbnQsIHNlc3Npb24sICZhbCwgTlVMTCkgPCAwKSB7CisJaWYgKGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShldmVudCwgc2Vzc2lvbiwgJmFsLCAmZGF0YSwgTlVMTCkgPCAwKSB7CiAJCWZwcmludGYoc3RkZXJyLCAicHJvYmxlbSBwcm9jZXNzaW5nICVkIGV2ZW50LCBza2lwcGluZyBpdC5cbiIsCiAJCQlldmVudC0+aGVhZGVyLnR5cGUpOwogCQlyZXR1cm4gLTE7CkBAIC00NjQsOCArNDQxLDYgQEAKIAkJICAgInByZXR0eSBwcmludGluZyBzdHlsZSBrZXk6IG5vcm1hbCByYXciKSwKIAlPUFRfU1RSSU5HKCdzJywgInNvcnQiLCAmc29ydF9vcmRlciwgImtleVssa2V5Mi4uLl0iLAogCQkgICAic29ydCBieSBrZXkocyk6IHBpZCwgY29tbSwgZHNvLCBzeW1ib2wsIHBhcmVudCIpLAotCU9QVF9CT09MRUFOKCdQJywgImZ1bGwtcGF0aHMiLCAmc3ltYm9sX2NvbmYuZnVsbF9wYXRocywKLQkJICAgICJEb24ndCBzaG9ydGVuIHRoZSBwYXRobmFtZXMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3dkIiksCiAJT1BUX0JPT0xFQU4oMCwgInNob3djcHV1dGlsaXphdGlvbiIsICZzeW1ib2xfY29uZi5zaG93X2NwdV91dGlsaXphdGlvbiwKIAkJICAgICJTaG93IHNhbXBsZSBwZXJjZW50YWdlIGZvciBkaWZmZXJlbnQgY3B1IG1vZGVzIiksCiAJT1BUX1NUUklORygncCcsICJwYXJlbnQiLCAmcGFyZW50X3BhdHRlcm4sICJyZWdleCIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCA5YTM5Y2EzLi5hNmI0ZDQ0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIH07CiAKIHN0YXRpYyBib29sCQkJc3lzdGVtX3dpZGUJCQk9ICBmYWxzZTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQJCW5yX2NwdXMJCQkJPSAgMDsKK3N0YXRpYyBpbnQJCQlucl9jcHVzCQkJCT0gIDA7CiBzdGF0aWMgaW50CQkJcnVuX2lkeAkJCQk9ICAwOwogCiBzdGF0aWMgaW50CQkJcnVuX2NvdW50CQkJPSAgMTsKQEAgLTgyLDYgKzgyLDcgQEAKIHN0YXRpYyBwaWRfdAkJCWNoaWxkX3BpZAkJCT0gLTE7CiBzdGF0aWMgYm9vbAkJCW51bGxfcnVuCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCWJpZ19udW0JCQkJPSAgZmFsc2U7CitzdGF0aWMgY29uc3QgY2hhcgkJKmNwdV9saXN0OwogCiAKIHN0YXRpYyBpbnQJCQkqZmRbTUFYX05SX0NQVVNdW01BWF9DT1VOVEVSU107CkBAIC0xNTgsNyArMTU5LDcgQEAKIAkJCQkgICAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HOwogCiAJaWYgKHN5c3RlbV93aWRlKSB7Ci0JCXVuc2lnbmVkIGludCBjcHU7CisJCWludCBjcHU7CiAKIAkJZm9yIChjcHUgPSAwOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgewogCQkJZmRbY3B1XVtjb3VudGVyXVswXSA9IHN5c19wZXJmX2V2ZW50X29wZW4oYXR0ciwKQEAgLTIwOCw3ICsyMDksNyBAQAogc3RhdGljIHZvaWQgcmVhZF9jb3VudGVyKGludCBjb3VudGVyKQogewogCXU2NCBjb3VudFszXSwgc2luZ2xlX2NvdW50WzNdOwotCXVuc2lnbmVkIGludCBjcHU7CisJaW50IGNwdTsKIAlzaXplX3QgcmVzLCBudjsKIAlpbnQgc2NhbGVkOwogCWludCBpLCB0aHJlYWQ7CkBAIC01NDIsNiArNTQzLDggQEAKIAkJICAgICJudWxsIHJ1biAtIGRvbnQgc3RhcnQgYW55IGNvdW50ZXJzIiksCiAJT1BUX0JPT0xFQU4oJ0InLCAiYmlnLW51bSIsICZiaWdfbnVtLAogCQkgICAgInByaW50IGxhcmdlIG51bWJlcnMgd2l0aCB0aG91c2FuZHNcJyBzZXBhcmF0b3JzIiksCisJT1BUX1NUUklORygnQycsICJjcHUiLCAmY3B1X2xpc3QsICJjcHUiLAorCQkgICAgImxpc3Qgb2YgY3B1cyB0byBtb25pdG9yIGluIHN5c3RlbS13aWRlIiksCiAJT1BUX0VORCgpCiB9OwogCkBAIC01NjYsMTAgKzU2OSwxMyBAQAogCX0KIAogCWlmIChzeXN0ZW1fd2lkZSkKLQkJbnJfY3B1cyA9IHJlYWRfY3B1X21hcCgpOworCQlucl9jcHVzID0gcmVhZF9jcHVfbWFwKGNwdV9saXN0KTsKIAllbHNlCiAJCW5yX2NwdXMgPSAxOwogCisJaWYgKG5yX2NwdXMgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMoc3RhdF91c2FnZSwgb3B0aW9ucyk7CisKIAlpZiAodGFyZ2V0X3BpZCAhPSAtMSkgewogCQl0YXJnZXRfdGlkID0gdGFyZ2V0X3BpZDsKIAkJdGhyZWFkX251bSA9IGZpbmRfYWxsX3RpZCh0YXJnZXRfcGlkLCAmYWxsX3RpZHMpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IGE2NmY0MjcuLmI1MTNlNDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogc3RhdGljIGludAkJCXN5bV9wY250X2ZpbHRlcgkJCT0gICAgICA1Owogc3RhdGljIGludAkJCXN5bV9jb3VudGVyCQkJPSAgICAgIDA7CiBzdGF0aWMgaW50CQkJZGlzcGxheV93ZWlnaHRlZAkJPSAgICAgLTE7CitzdGF0aWMgY29uc3QgY2hhcgkJKmNwdV9saXN0OwogCiAvKgogICogU3ltYm9scwpAQCAtOTgyLDYgKzk4Myw3IEBACiAJdTY0IGlwID0gc2VsZi0+aXAuaXA7CiAJc3RydWN0IHN5bV9lbnRyeSAqc3ltZTsKIAlzdHJ1Y3QgYWRkcl9sb2NhdGlvbiBhbDsKKwlzdHJ1Y3Qgc2FtcGxlX2RhdGEgZGF0YTsKIAlzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZTsKIAl1OCBvcmlnaW4gPSBzZWxmLT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfQ1BVTU9ERV9NQVNLOwogCkBAIC0xMDI0LDcgKzEwMjYsOCBAQAogCWlmIChzZWxmLT5oZWFkZXIubWlzYyAmIFBFUkZfUkVDT1JEX01JU0NfRVhBQ1RfSVApCiAJCWV4YWN0X3NhbXBsZXMrKzsKIAotCWlmIChldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoc2VsZiwgc2Vzc2lvbiwgJmFsLCBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKKwlpZiAoZXZlbnRfX3ByZXByb2Nlc3Nfc2FtcGxlKHNlbGYsIHNlc3Npb24sICZhbCwgJmRhdGEsCisJCQkJICAgICBzeW1ib2xfZmlsdGVyKSA8IDAgfHwKIAkgICAgYWwuZmlsdGVyZWQpCiAJCXJldHVybjsKIApAQCAtMTA3OSwyNiArMTA4Miw2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQotewotCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7Ci0JY2FzZSBQRVJGX1JFQ09SRF9DT01NOgotCQlldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50LCBzZXNzaW9uKTsKLQkJYnJlYWs7Ci0JY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgotCQlldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50LCBzZXNzaW9uKTsKLQkJYnJlYWs7Ci0JY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgotCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKLQkJZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudCwgc2Vzc2lvbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdHJ1Y3QgbW1hcF9kYXRhIHsKIAlpbnQJCQljb3VudGVyOwogCXZvaWQJCQkqYmFzZTsKQEAgLTEzNTEsOCArMTMzNCw4IEBACiAJCSAgICAicHJvZmlsZSBldmVudHMgb24gZXhpc3RpbmcgdGhyZWFkIGlkIiksCiAJT1BUX0JPT0xFQU4oJ2EnLCAiYWxsLWNwdXMiLCAmc3lzdGVtX3dpZGUsCiAJCQkgICAgInN5c3RlbS13aWRlIGNvbGxlY3Rpb24gZnJvbSBhbGwgQ1BVcyIpLAotCU9QVF9JTlRFR0VSKCdDJywgIkNQVSIsICZwcm9maWxlX2NwdSwKLQkJICAgICJDUFUgdG8gcHJvZmlsZSBvbiIpLAorCU9QVF9TVFJJTkcoJ0MnLCAiY3B1IiwgJmNwdV9saXN0LCAiY3B1IiwKKwkJICAgICJsaXN0IG9mIGNwdXMgdG8gbW9uaXRvciIpLAogCU9QVF9TVFJJTkcoJ2snLCAidm1saW51eCIsICZzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsCiAJCSAgICJmaWxlIiwgInZtbGludXggcGF0aG5hbWUiKSwKIAlPUFRfQk9PTEVBTignSycsICJoaWRlX2tlcm5lbF9zeW1ib2xzIiwgJmhpZGVfa2VybmVsX3N5bWJvbHMsCkBAIC0xNDI4LDEwICsxNDExLDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogQ1BVIGFuZCBQSUQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwotCWlmICh0YXJnZXRfdGlkID4gMCAmJiBwcm9maWxlX2NwdSAhPSAtMSkgeworCWlmICh0YXJnZXRfdGlkID4gMCAmJiBjcHVfbGlzdCkgewogCQlwcmludGYoIldBUk5JTkc6IFBJRCBzd2l0Y2ggb3ZlcnJpZGluZyBDUFVcbiIpOwogCQlzbGVlcCgxKTsKLQkJcHJvZmlsZV9jcHUgPSAtMTsKKwkJY3B1X2xpc3QgPSBOVUxMOwogCX0KIAogCWlmICghbnJfY291bnRlcnMpCkBAIC0xNDY5LDEwICsxNDUyLDEzIEBACiAJCWF0dHJzW2NvdW50ZXJdLnNhbXBsZV9wZXJpb2QgPSBkZWZhdWx0X2ludGVydmFsOwogCX0KIAotCWlmICh0YXJnZXRfdGlkICE9IC0xIHx8IHByb2ZpbGVfY3B1ICE9IC0xKQorCWlmICh0YXJnZXRfdGlkICE9IC0xKQogCQlucl9jcHVzID0gMTsKIAllbHNlCi0JCW5yX2NwdXMgPSByZWFkX2NwdV9tYXAoKTsKKwkJbnJfY3B1cyA9IHJlYWRfY3B1X21hcChjcHVfbGlzdCk7CisKKwlpZiAobnJfY3B1cyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh0b3BfdXNhZ2UsIG9wdGlvbnMpOwogCiAJZ2V0X3Rlcm1fZGltZW5zaW9ucygmd2luc2l6ZSk7CiAJaWYgKHByaW50X2VudHJpZXMgPT0gMCkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCBkZGRmM2YwLi4yOTRkYTcyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwpAQCAtMTEsOCArMTEsOSBAQAogCiBzdGF0aWMgY2hhciBjb25zdAkJKnNjcmlwdF9uYW1lOwogc3RhdGljIGNoYXIgY29uc3QJCSpnZW5lcmF0ZV9zY3JpcHRfbGFuZzsKLXN0YXRpYyBib29sCQkJZGVidWdfb3JkZXJpbmc7CitzdGF0aWMgYm9vbAkJCWRlYnVnX21vZGU7CiBzdGF0aWMgdTY0CQkJbGFzdF90aW1lc3RhbXA7CitzdGF0aWMgdTY0CQkJbnJfdW5vcmRlcmVkOwogCiBzdGF0aWMgaW50IGRlZmF1bHRfc3RhcnRfc2NyaXB0KGNvbnN0IGNoYXIgKnNjcmlwdCBfX3VudXNlZCwKIAkJCQlpbnQgYXJnYyBfX3VudXNlZCwKQEAgLTkxLDEzICs5MiwxNSBAQAogCX0KIAogCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1JBVykgewotCQlpZiAoZGVidWdfb3JkZXJpbmcpIHsKKwkJaWYgKGRlYnVnX21vZGUpIHsKIAkJCWlmIChkYXRhLnRpbWUgPCBsYXN0X3RpbWVzdGFtcCkgewogCQkJCXByX2VycigiU2FtcGxlcyBtaXNvcmRlcmVkLCBwcmV2aW91czogJWxsdSAiCiAJCQkJCSJ0aGlzOiAlbGx1XG4iLCBsYXN0X3RpbWVzdGFtcCwKIAkJCQkJZGF0YS50aW1lKTsKKwkJCQlucl91bm9yZGVyZWQrKzsKIAkJCX0KIAkJCWxhc3RfdGltZXN0YW1wID0gZGF0YS50aW1lOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJLyoKIAkJICogRklYTUU6IGJldHRlciByZXNvbHZlIGZyb20gcGlkIGZyb20gdGhlIHN0cnVjdCB0cmFjZV9lbnRyeQpAQCAtMTEzLDYgKzExNiwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IG5yX2xvc3Q7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19sb3N0X2V2ZW50KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uIF9fdXNlZCkKK3sKKwlucl9sb3N0ICs9IGV2ZW50LT5sb3N0Lmxvc3Q7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBldmVudF9vcHMgPSB7CiAJLnNhbXBsZQk9IHByb2Nlc3Nfc2FtcGxlX2V2ZW50LAogCS5jb21tCT0gZXZlbnRfX3Byb2Nlc3NfY29tbSwKQEAgLTEyMCw2ICsxMzIsNyBAQAogCS5ldmVudF90eXBlID0gZXZlbnRfX3Byb2Nlc3NfZXZlbnRfdHlwZSwKIAkudHJhY2luZ19kYXRhID0gZXZlbnRfX3Byb2Nlc3NfdHJhY2luZ19kYXRhLAogCS5idWlsZF9pZCA9IGV2ZW50X19wcm9jZXNzX2J1aWxkX2lkLAorCS5sb3N0ID0gcHJvY2Vzc19sb3N0X2V2ZW50LAogCS5vcmRlcmVkX3NhbXBsZXMgPSB0cnVlLAogfTsKIApAQCAtMTMyLDkgKzE0NSwxOCBAQAogCiBzdGF0aWMgaW50IF9fY21kX3RyYWNlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CisJaW50IHJldDsKKwogCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKIAotCXJldHVybiBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOworCXJldCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgJmV2ZW50X29wcyk7CisKKwlpZiAoZGVidWdfbW9kZSkgeworCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJWxsdVxuIiwgbnJfdW5vcmRlcmVkKTsKKwkJcHJfZXJyKCJMb3N0IGV2ZW50czogJWxsdVxuIiwgbnJfbG9zdCk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogc3RydWN0IHNjcmlwdF9zcGVjIHsKQEAgLTU0NCw4ICs1NjYsOCBAQAogCQkgICAiZ2VuZXJhdGUgcGVyZi10cmFjZS54eCBzY3JpcHQgaW4gc3BlY2lmaWVkIGxhbmd1YWdlIiksCiAJT1BUX1NUUklORygnaScsICJpbnB1dCIsICZpbnB1dF9uYW1lLCAiZmlsZSIsCiAJCSAgICAiaW5wdXQgZmlsZSBuYW1lIiksCi0JT1BUX0JPT0xFQU4oJ2QnLCAiZGVidWctb3JkZXJpbmciLCAmZGVidWdfb3JkZXJpbmcsCi0JCSAgICJjaGVjayB0aGF0IHNhbXBsZXMgdGltZSBvcmRlcmluZyBpcyBtb25vdG9uaWMiKSwKKwlPUFRfQk9PTEVBTignZCcsICJkZWJ1Zy1tb2RlIiwgJmRlYnVnX21vZGUsCisJCSAgICJkbyB2YXJpb3VzIGNoZWNrcyBsaWtlIHNhbXBsZXMgb3JkZXJpbmcgYW5kIGxvc3QgZXZlbnRzIiksCiAKIAlPUFRfRU5EKCkKIH07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2ZlYXR1cmUtdGVzdHMubWFrIGIvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI2OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9mZWF0dXJlLXRlc3RzLm1hawpAQCAtMCwwICsxLDExOSBAQAorZGVmaW5lIFNPVVJDRV9IRUxMTworI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbih2b2lkKQoreworCXJldHVybiBwdXRzKFwiaGlcIik7Cit9CitlbmRlZgorCitpZm5kZWYgTk9fRFdBUkYKK2RlZmluZSBTT1VSQ0VfRFdBUkYKKyNpbmNsdWRlIDxkd2FyZi5oPgorI2luY2x1ZGUgPGxpYmR3Lmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2lmbmRlZiBfRUxGVVRJTFNfUFJFUkVRCisjZXJyb3IKKyNlbmRpZgorCitpbnQgbWFpbih2b2lkKQoreworCUR3YXJmICpkYmcgPSBkd2FyZl9iZWdpbigwLCBEV0FSRl9DX1JFQUQpOworCXJldHVybiAobG9uZylkYmc7Cit9CitlbmRlZgorZW5kaWYKKworZGVmaW5lIFNPVVJDRV9MSUJFTEYKKyNpbmNsdWRlIDxsaWJlbGYuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwlFbGYgKmVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFELCAwKTsKKwlyZXR1cm4gKGxvbmcpZWxmOworfQorZW5kZWYKKworZGVmaW5lIFNPVVJDRV9HTElCQworI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KKworaW50IG1haW4odm9pZCkKK3sKKwljb25zdCBjaGFyICp2ZXJzaW9uID0gZ251X2dldF9saWJjX3ZlcnNpb24oKTsKKwlyZXR1cm4gKGxvbmcpdmVyc2lvbjsKK30KK2VuZGVmCisKK2RlZmluZSBTT1VSQ0VfRUxGX01NQVAKKyNpbmNsdWRlIDxsaWJlbGYuaD4KK2ludCBtYWluKHZvaWQpCit7CisJRWxmICplbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRF9NTUFQLCAwKTsKKwlyZXR1cm4gKGxvbmcpZWxmOworfQorZW5kZWYKKworaWZuZGVmIE5PX05FV1QKK2RlZmluZSBTT1VSQ0VfTkVXVAorI2luY2x1ZGUgPG5ld3QuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwluZXd0SW5pdCgpOworCW5ld3RDbHMoKTsKKwlyZXR1cm4gbmV3dEZpbmlzaGVkKCk7Cit9CitlbmRlZgorZW5kaWYKKworaWZuZGVmIE5PX0xJQlBFUkwKK2RlZmluZSBTT1VSQ0VfUEVSTF9FTUJFRAorI2luY2x1ZGUgPEVYVEVSTi5oPgorI2luY2x1ZGUgPHBlcmwuaD4KKworaW50IG1haW4odm9pZCkKK3sKK3BlcmxfYWxsb2MoKTsKK3JldHVybiAwOworfQorZW5kZWYKK2VuZGlmCisKK2lmbmRlZiBOT19MSUJQWVRIT04KK2RlZmluZSBTT1VSQ0VfUFlUSE9OX0VNQkVECisjaW5jbHVkZSA8UHl0aG9uLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJUHlfSW5pdGlhbGl6ZSgpOworCXJldHVybiAwOworfQorZW5kZWYKK2VuZGlmCisKK2RlZmluZSBTT1VSQ0VfQkZECisjaW5jbHVkZSA8YmZkLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisJYmZkX2RlbWFuZ2xlKDAsIDAsIDApOworCXJldHVybiAwOworfQorZW5kZWYKKworZGVmaW5lIFNPVVJDRV9DUExVU19ERU1BTkdMRQorZXh0ZXJuIGNoYXIgKmNwbHVzX2RlbWFuZ2xlKGNvbnN0IGNoYXIgKiwgaW50KTsKKworaW50IG1haW4odm9pZCkKK3sKKwljcGx1c19kZW1hbmdsZSgwLCAwKTsKKwlyZXR1cm4gMDsKK30KK2VuZGVmCisKKyMgdHJ5LWNjCisjIFVzYWdlOiBvcHRpb24gPSAkKGNhbGwgdHJ5LWNjLCBzb3VyY2UtdG8tYnVpbGQsIGNjLW9wdGlvbnMpCit0cnktY2MgPSAkKHNoZWxsIHNoIC1jCQkJCQkJICBcCisJJ1RNUD0iJChUTVBPVVQpLiQkJCQiOwkJCSAJCSAgXAorCSBlY2hvICIkKDEpIiB8CQkJCQkJICBcCisJICQoQ0MpIC14IGMgLSAkKDIpIC1vICIkJFRNUCIgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHk7IFwKKwkgcm0gLWYgIiQkVE1QIicpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3BlcmYtYXJjaGl2ZS5zaCBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCmluZGV4IDJlN2E0ZjQuLjY3N2U1OWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCisrKyBiL3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoCkBAIC03LDcgKzcsMTcgQEAKIAlQRVJGX0RBVEE9JDEKIGZpCiAKLURFQlVHRElSPX4vLmRlYnVnLworIworIyBQRVJGX0JVSUxESURfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCBieSBwZXJmCisjIHBhdGggdG8gYnVpbGRpZCBkaXJlY3RvcnksIGRlZmF1bHQgdG8gJEhPTUUvLmRlYnVnCisjCitpZiBbIC16ICRQRVJGX0JVSUxESURfRElSIF07IHRoZW4KKwlQRVJGX0JVSUxESURfRElSPX4vLmRlYnVnLworZWxzZQorICAgICAgICAjIGFwcGVuZCAvIHRvIG1ha2Ugc3Vic3RpdHV0aW9ucyB3b3JrCisgICAgICAgIFBFUkZfQlVJTERJRF9ESVI9JFBFUkZfQlVJTERJRF9ESVIvCitmaQorCiBCVUlMRElEUz0kKG1rdGVtcCAvdG1wL3BlcmYtYXJjaGl2ZS1idWlsZGlkcy5YWFhYWFgpCiBOT0JVSUxESUQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogCkBAIC0yMiwxMyArMzIsMTMgQEAKIAogY3V0IC1kICcgJyAtZiAxICRCVUlMRElEUyB8IFwKIHdoaWxlIHJlYWQgYnVpbGRfaWQgOyBkbwotCWxpbmtuYW1lPSRERUJVR0RJUi5idWlsZC1pZC8ke2J1aWxkX2lkOjA6Mn0vJHtidWlsZF9pZDoyfQorCWxpbmtuYW1lPSRQRVJGX0JVSUxESURfRElSLmJ1aWxkLWlkLyR7YnVpbGRfaWQ6MDoyfS8ke2J1aWxkX2lkOjJ9CiAJZmlsZW5hbWU9JChyZWFkbGluayAtZiAkbGlua25hbWUpCi0JZWNobyAke2xpbmtuYW1lIyRERUJVR0RJUn0gPj4gJE1BTklGRVNUCi0JZWNobyAke2ZpbGVuYW1lIyRERUJVR0RJUn0gPj4gJE1BTklGRVNUCisJZWNobyAke2xpbmtuYW1lIyRQRVJGX0JVSUxESURfRElSfSA+PiAkTUFOSUZFU1QKKwllY2hvICR7ZmlsZW5hbWUjJFBFUkZfQlVJTERJRF9ESVJ9ID4+ICRNQU5JRkVTVAogZG9uZQogCi10YXIgY2ZqICRQRVJGX0RBVEEudGFyLmJ6MiAtQyAkREVCVUdESVIgLVQgJE1BTklGRVNUCit0YXIgY2ZqICRQRVJGX0RBVEEudGFyLmJ6MiAtQyAkUEVSRl9CVUlMRElEX0RJUiAtVCAkTUFOSUZFU1QKIHJtIC1mICRNQU5JRkVTVCAkQlVJTERJRFMKIGVjaG8gLWUgIk5vdyBwbGVhc2UgcnVuOlxuIgogZWNobyAtZSAiJCB0YXIgeHZmICRQRVJGX0RBVEEudGFyLmJ6MiAtQyB+Ly5kZWJ1Z1xuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmMgYi90b29scy9wZXJmL3BlcmYuYwppbmRleCA2ZTQ4NzExLi5jZGQ2YzAzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuYworKysgYi90b29scy9wZXJmL3BlcmYuYwpAQCAtNDU4LDYgKzQ1OCw4IEBACiAJaGFuZGxlX29wdGlvbnMoJmFyZ3YsICZhcmdjLCBOVUxMKTsKIAljb21taXRfcGFnZXJfY2hvaWNlKCk7CiAJc2V0X2RlYnVnZnNfcGF0aCgpOworCXNldF9idWlsZGlkX2RpcigpOworCiAJaWYgKGFyZ2MgPiAwKSB7CiAJCWlmICghcHJlZml4Y21wKGFyZ3ZbMF0sICItLSIpKQogCQkJYXJndlswXSArPSAyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vUGVyZi1UcmFjZS1VdGlsL2xpYi9QZXJmL1RyYWNlL0NvcmUucHkKaW5kZXggMWRjNDY0ZS4uYWFkNzUyNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvQ29yZS5weQorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9Db3JlLnB5CkBAIC04OSwzICs4OSwzMyBAQAogCSAgICB2YWx1ZSAmPSB+aWR4CiAKICAgICByZXR1cm4gc3RyaW5nCisKKworZGVmIHRhc2tTdGF0ZShzdGF0ZSk6CisJc3RhdGVzID0geworCQkwIDogIlIiLAorCQkxIDogIlMiLAorCQkyIDogIkQiLAorCQk2NDogIkRFQUQiCisJfQorCisJaWYgc3RhdGUgbm90IGluIHN0YXRlczoKKwkJcmV0dXJuICJVbmtub3duIgorCisJcmV0dXJuIHN0YXRlc1tzdGF0ZV0KKworCitjbGFzcyBFdmVudEhlYWRlcnM6CisJZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCSAgICAgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pOgorCQlzZWxmLmNwdSA9IGNvbW1vbl9jcHUKKwkJc2VsZi5zZWNzID0gY29tbW9uX3NlY3MKKwkJc2VsZi5uc2VjcyA9IGNvbW1vbl9uc2VjcworCQlzZWxmLnBpZCA9IGNvbW1vbl9waWQKKwkJc2VsZi5jb21tID0gY29tbW9uX2NvbW0KKworCWRlZiB0cyhzZWxmKToKKwkJcmV0dXJuIChzZWxmLnNlY3MgKiAoMTAgKiogOSkpICsgc2VsZi5uc2VjcworCisJZGVmIHRzX2Zvcm1hdChzZWxmKToKKwkJcmV0dXJuICIlZC4lZCIgJSAoc2VsZi5zZWNzLCBpbnQoc2VsZi5uc2VjcyAvIDEwMDApKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL1BlcmYtVHJhY2UtVXRpbC9saWIvUGVyZi9UcmFjZS9TY2hlZEd1aS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTlhNTZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UvU2NoZWRHdWkucHkKQEAgLTAsMCArMSwxODQgQEAKKyMgU2NoZWRHdWkucHkgLSBQeXRob24gZXh0ZW5zaW9uIGZvciBwZXJmIHRyYWNlLCBiYXNpYyBHVUkgY29kZSBmb3IKKyMJCXRyYWNlcyBkcmF3aW5nIGFuZCBvdmVydmlldy4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIGJ5IEZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCisKK3RyeToKKwlpbXBvcnQgd3gKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKwlyYWlzZSBJbXBvcnRFcnJvciwgIllvdSBuZWVkIHRvIGluc3RhbGwgdGhlIHd4cHl0aG9uIGxpYiBmb3IgdGhpcyBzY3JpcHQiCisKKworY2xhc3MgUm9vdEZyYW1lKHd4LkZyYW1lKToKKwlZX09GRlNFVCA9IDEwMAorCVJFQ1RfSEVJR0hUID0gMTAwCisJUkVDVF9TUEFDRSA9IDUwCisJRVZFTlRfTUFSS0lOR19XSURUSCA9IDUKKworCWRlZiBfX2luaXRfXyhzZWxmLCBzY2hlZF90cmFjZXIsIHRpdGxlLCBwYXJlbnQgPSBOb25lLCBpZCA9IC0xKToKKwkJd3guRnJhbWUuX19pbml0X18oc2VsZiwgcGFyZW50LCBpZCwgdGl0bGUpCisKKwkJKHNlbGYuc2NyZWVuX3dpZHRoLCBzZWxmLnNjcmVlbl9oZWlnaHQpID0gd3guR2V0RGlzcGxheVNpemUoKQorCQlzZWxmLnNjcmVlbl93aWR0aCAtPSAxMAorCQlzZWxmLnNjcmVlbl9oZWlnaHQgLT0gMTAKKwkJc2VsZi56b29tID0gMC41CisJCXNlbGYuc2Nyb2xsX3NjYWxlID0gMjAKKwkJc2VsZi5zY2hlZF90cmFjZXIgPSBzY2hlZF90cmFjZXIKKwkJc2VsZi5zY2hlZF90cmFjZXIuc2V0X3Jvb3Rfd2luKHNlbGYpCisJCShzZWxmLnRzX3N0YXJ0LCBzZWxmLnRzX2VuZCkgPSBzY2hlZF90cmFjZXIuaW50ZXJ2YWwoKQorCQlzZWxmLnVwZGF0ZV93aWR0aF92aXJ0dWFsKCkKKwkJc2VsZi5ucl9yZWN0cyA9IHNjaGVkX3RyYWNlci5ucl9yZWN0YW5nbGVzKCkgKyAxCisJCXNlbGYuaGVpZ2h0X3ZpcnR1YWwgPSBSb290RnJhbWUuWV9PRkZTRVQgKyAoc2VsZi5ucl9yZWN0cyAqIChSb290RnJhbWUuUkVDVF9IRUlHSFQgKyBSb290RnJhbWUuUkVDVF9TUEFDRSkpCisKKwkJIyB3aG9sZSB3aW5kb3cgcGFuZWwKKwkJc2VsZi5wYW5lbCA9IHd4LlBhbmVsKHNlbGYsIHNpemU9KHNlbGYuc2NyZWVuX3dpZHRoLCBzZWxmLnNjcmVlbl9oZWlnaHQpKQorCisJCSMgc2Nyb2xsYWJsZSBjb250YWluZXIKKwkJc2VsZi5zY3JvbGwgPSB3eC5TY3JvbGxlZFdpbmRvdyhzZWxmLnBhbmVsKQorCQlzZWxmLnNjcm9sbC5TZXRTY3JvbGxiYXJzKHNlbGYuc2Nyb2xsX3NjYWxlLCBzZWxmLnNjcm9sbF9zY2FsZSwgc2VsZi53aWR0aF92aXJ0dWFsIC8gc2VsZi5zY3JvbGxfc2NhbGUsIHNlbGYuaGVpZ2h0X3ZpcnR1YWwgLyBzZWxmLnNjcm9sbF9zY2FsZSkKKwkJc2VsZi5zY3JvbGwuRW5hYmxlU2Nyb2xsaW5nKFRydWUsIFRydWUpCisJCXNlbGYuc2Nyb2xsLlNldEZvY3VzKCkKKworCQkjIHNjcm9sbGFibGUgZHJhd2luZyBhcmVhCisJCXNlbGYuc2Nyb2xsX3BhbmVsID0gd3guUGFuZWwoc2VsZi5zY3JvbGwsIHNpemU9KHNlbGYuc2NyZWVuX3dpZHRoIC0gMTUsIHNlbGYuc2NyZWVuX2hlaWdodCAvIDIpKQorCQlzZWxmLnNjcm9sbF9wYW5lbC5CaW5kKHd4LkVWVF9QQUlOVCwgc2VsZi5vbl9wYWludCkKKwkJc2VsZi5zY3JvbGxfcGFuZWwuQmluZCh3eC5FVlRfS0VZX0RPV04sIHNlbGYub25fa2V5X3ByZXNzKQorCQlzZWxmLnNjcm9sbF9wYW5lbC5CaW5kKHd4LkVWVF9MRUZUX0RPV04sIHNlbGYub25fbW91c2VfZG93bikKKwkJc2VsZi5zY3JvbGwuQmluZCh3eC5FVlRfUEFJTlQsIHNlbGYub25fcGFpbnQpCisJCXNlbGYuc2Nyb2xsLkJpbmQod3guRVZUX0tFWV9ET1dOLCBzZWxmLm9uX2tleV9wcmVzcykKKwkJc2VsZi5zY3JvbGwuQmluZCh3eC5FVlRfTEVGVF9ET1dOLCBzZWxmLm9uX21vdXNlX2Rvd24pCisKKwkJc2VsZi5zY3JvbGwuRml0KCkKKwkJc2VsZi5GaXQoKQorCisJCXNlbGYuc2Nyb2xsX3BhbmVsLlNldERpbWVuc2lvbnMoLTEsIC0xLCBzZWxmLndpZHRoX3ZpcnR1YWwsIHNlbGYuaGVpZ2h0X3ZpcnR1YWwsIHd4LlNJWkVfVVNFX0VYSVNUSU5HKQorCisJCXNlbGYudHh0ID0gTm9uZQorCisJCXNlbGYuU2hvdyhUcnVlKQorCisJZGVmIHVzX3RvX3B4KHNlbGYsIHZhbCk6CisJCXJldHVybiB2YWwgLyAoMTAgKiogMykgKiBzZWxmLnpvb20KKworCWRlZiBweF90b191cyhzZWxmLCB2YWwpOgorCQlyZXR1cm4gKHZhbCAvIHNlbGYuem9vbSkgKiAoMTAgKiogMykKKworCWRlZiBzY3JvbGxfc3RhcnQoc2VsZik6CisJCSh4LCB5KSA9IHNlbGYuc2Nyb2xsLkdldFZpZXdTdGFydCgpCisJCXJldHVybiAoeCAqIHNlbGYuc2Nyb2xsX3NjYWxlLCB5ICogc2VsZi5zY3JvbGxfc2NhbGUpCisKKwlkZWYgc2Nyb2xsX3N0YXJ0X3VzKHNlbGYpOgorCQkoeCwgeSkgPSBzZWxmLnNjcm9sbF9zdGFydCgpCisJCXJldHVybiBzZWxmLnB4X3RvX3VzKHgpCisKKwlkZWYgcGFpbnRfcmVjdGFuZ2xlX3pvbmUoc2VsZiwgbnIsIGNvbG9yLCB0b3BfY29sb3IsIHN0YXJ0LCBlbmQpOgorCQlvZmZzZXRfcHggPSBzZWxmLnVzX3RvX3B4KHN0YXJ0IC0gc2VsZi50c19zdGFydCkKKwkJd2lkdGhfcHggPSBzZWxmLnVzX3RvX3B4KGVuZCAtIHNlbGYudHNfc3RhcnQpCisKKwkJb2Zmc2V0X3B5ID0gUm9vdEZyYW1lLllfT0ZGU0VUICsgKG5yICogKFJvb3RGcmFtZS5SRUNUX0hFSUdIVCArIFJvb3RGcmFtZS5SRUNUX1NQQUNFKSkKKwkJd2lkdGhfcHkgPSBSb290RnJhbWUuUkVDVF9IRUlHSFQKKworCQlkYyA9IHNlbGYuZGMKKworCQlpZiB0b3BfY29sb3IgaXMgbm90IE5vbmU6CisJCQkociwgZywgYikgPSB0b3BfY29sb3IKKwkJCXRvcF9jb2xvciA9IHd4LkNvbG91cihyLCBnLCBiKQorCQkJYnJ1c2ggPSB3eC5CcnVzaCh0b3BfY29sb3IsIHd4LlNPTElEKQorCQkJZGMuU2V0QnJ1c2goYnJ1c2gpCisJCQlkYy5EcmF3UmVjdGFuZ2xlKG9mZnNldF9weCwgb2Zmc2V0X3B5LCB3aWR0aF9weCwgUm9vdEZyYW1lLkVWRU5UX01BUktJTkdfV0lEVEgpCisJCQl3aWR0aF9weSAtPSBSb290RnJhbWUuRVZFTlRfTUFSS0lOR19XSURUSAorCQkJb2Zmc2V0X3B5ICs9IFJvb3RGcmFtZS5FVkVOVF9NQVJLSU5HX1dJRFRICisKKwkJKHIgLGcsIGIpID0gY29sb3IKKwkJY29sb3IgPSB3eC5Db2xvdXIociwgZywgYikKKwkJYnJ1c2ggPSB3eC5CcnVzaChjb2xvciwgd3guU09MSUQpCisJCWRjLlNldEJydXNoKGJydXNoKQorCQlkYy5EcmF3UmVjdGFuZ2xlKG9mZnNldF9weCwgb2Zmc2V0X3B5LCB3aWR0aF9weCwgd2lkdGhfcHkpCisKKwlkZWYgdXBkYXRlX3JlY3RhbmdsZXMoc2VsZiwgZGMsIHN0YXJ0LCBlbmQpOgorCQlzdGFydCArPSBzZWxmLnRzX3N0YXJ0CisJCWVuZCArPSBzZWxmLnRzX3N0YXJ0CisJCXNlbGYuc2NoZWRfdHJhY2VyLmZpbGxfem9uZShzdGFydCwgZW5kKQorCisJZGVmIG9uX3BhaW50KHNlbGYsIGV2ZW50KToKKwkJZGMgPSB3eC5QYWludERDKHNlbGYuc2Nyb2xsX3BhbmVsKQorCQlzZWxmLmRjID0gZGMKKworCQl3aWR0aCA9IG1pbihzZWxmLndpZHRoX3ZpcnR1YWwsIHNlbGYuc2NyZWVuX3dpZHRoKQorCQkoeCwgeSkgPSBzZWxmLnNjcm9sbF9zdGFydCgpCisJCXN0YXJ0ID0gc2VsZi5weF90b191cyh4KQorCQllbmQgPSBzZWxmLnB4X3RvX3VzKHggKyB3aWR0aCkKKwkJc2VsZi51cGRhdGVfcmVjdGFuZ2xlcyhkYywgc3RhcnQsIGVuZCkKKworCWRlZiByZWN0X2Zyb21feXBpeGVsKHNlbGYsIHkpOgorCQl5IC09IFJvb3RGcmFtZS5ZX09GRlNFVAorCQlyZWN0ID0geSAvIChSb290RnJhbWUuUkVDVF9IRUlHSFQgKyBSb290RnJhbWUuUkVDVF9TUEFDRSkKKwkJaGVpZ2h0ID0geSAlIChSb290RnJhbWUuUkVDVF9IRUlHSFQgKyBSb290RnJhbWUuUkVDVF9TUEFDRSkKKworCQlpZiByZWN0IDwgMCBvciByZWN0ID4gc2VsZi5ucl9yZWN0cyAtIDEgb3IgaGVpZ2h0ID4gUm9vdEZyYW1lLlJFQ1RfSEVJR0hUOgorCQkJcmV0dXJuIC0xCisKKwkJcmV0dXJuIHJlY3QKKworCWRlZiB1cGRhdGVfc3VtbWFyeShzZWxmLCB0eHQpOgorCQlpZiBzZWxmLnR4dDoKKwkJCXNlbGYudHh0LkRlc3Ryb3koKQorCQlzZWxmLnR4dCA9IHd4LlN0YXRpY1RleHQoc2VsZi5wYW5lbCwgLTEsIHR4dCwgKDAsIChzZWxmLnNjcmVlbl9oZWlnaHQgLyAyKSArIDUwKSkKKworCisJZGVmIG9uX21vdXNlX2Rvd24oc2VsZiwgZXZlbnQpOgorCQkoeCwgeSkgPSBldmVudC5HZXRQb3NpdGlvblR1cGxlKCkKKwkJcmVjdCA9IHNlbGYucmVjdF9mcm9tX3lwaXhlbCh5KQorCQlpZiByZWN0ID09IC0xOgorCQkJcmV0dXJuCisKKwkJdCA9IHNlbGYucHhfdG9fdXMoeCkgKyBzZWxmLnRzX3N0YXJ0CisKKwkJc2VsZi5zY2hlZF90cmFjZXIubW91c2VfZG93bihyZWN0LCB0KQorCisKKwlkZWYgdXBkYXRlX3dpZHRoX3ZpcnR1YWwoc2VsZik6CisJCXNlbGYud2lkdGhfdmlydHVhbCA9IHNlbGYudXNfdG9fcHgoc2VsZi50c19lbmQgLSBzZWxmLnRzX3N0YXJ0KQorCisJZGVmIF9fem9vbShzZWxmLCB4KToKKwkJc2VsZi51cGRhdGVfd2lkdGhfdmlydHVhbCgpCisJCSh4cG9zLCB5cG9zKSA9IHNlbGYuc2Nyb2xsLkdldFZpZXdTdGFydCgpCisJCXhwb3MgPSBzZWxmLnVzX3RvX3B4KHgpIC8gc2VsZi5zY3JvbGxfc2NhbGUKKwkJc2VsZi5zY3JvbGwuU2V0U2Nyb2xsYmFycyhzZWxmLnNjcm9sbF9zY2FsZSwgc2VsZi5zY3JvbGxfc2NhbGUsIHNlbGYud2lkdGhfdmlydHVhbCAvIHNlbGYuc2Nyb2xsX3NjYWxlLCBzZWxmLmhlaWdodF92aXJ0dWFsIC8gc2VsZi5zY3JvbGxfc2NhbGUsIHhwb3MsIHlwb3MpCisJCXNlbGYuUmVmcmVzaCgpCisKKwlkZWYgem9vbV9pbihzZWxmKToKKwkJeCA9IHNlbGYuc2Nyb2xsX3N0YXJ0X3VzKCkKKwkJc2VsZi56b29tICo9IDIKKwkJc2VsZi5fX3pvb20oeCkKKworCWRlZiB6b29tX291dChzZWxmKToKKwkJeCA9IHNlbGYuc2Nyb2xsX3N0YXJ0X3VzKCkKKwkJc2VsZi56b29tIC89IDIKKwkJc2VsZi5fX3pvb20oeCkKKworCisJZGVmIG9uX2tleV9wcmVzcyhzZWxmLCBldmVudCk6CisJCWtleSA9IGV2ZW50LkdldFJhd0tleUNvZGUoKQorCQlpZiBrZXkgPT0gb3JkKCIrIik6CisJCQlzZWxmLnpvb21faW4oKQorCQkJcmV0dXJuCisJCWlmIGtleSA9PSBvcmQoIi0iKToKKwkJCXNlbGYuem9vbV9vdXQoKQorCQkJcmV0dXJuCisKKwkJa2V5ID0gZXZlbnQuR2V0S2V5Q29kZSgpCisJCSh4LCB5KSA9IHNlbGYuc2Nyb2xsLkdldFZpZXdTdGFydCgpCisJCWlmIGtleSA9PSB3eC5XWEtfUklHSFQ6CisJCQlzZWxmLnNjcm9sbC5TY3JvbGwoeCArIDEsIHkpCisJCWVsaWYga2V5ID09IHd4LldYS19MRUZUOgorCQkJc2VsZi5zY3JvbGwuU2Nyb2xsKHggLSAxLCB5KQorCQllbGlmIGtleSA9PSB3eC5XWEtfRE9XTjoKKwkJCXNlbGYuc2Nyb2xsLlNjcm9sbCh4LCB5ICsgMSkKKwkJZWxpZiBrZXkgPT0gd3guV1hLX1VQOgorCQkJc2VsZi5zY3JvbGwuU2Nyb2xsKHgsIHkgLSAxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc2NoZWQtbWlncmF0aW9uLXJlY29yZCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZWNvcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhM2U5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZWNvcmQKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vYmFzaAorcGVyZiByZWNvcmQgLW0gMTYzODQgLWEgLWUgc2NoZWQ6c2NoZWRfd2FrZXVwIC1lIHNjaGVkOnNjaGVkX3dha2V1cF9uZXcgLWUgc2NoZWQ6c2NoZWRfc3dpdGNoIC1lIHNjaGVkOnNjaGVkX21pZ3JhdGVfdGFzayAkQApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3B5dGhvbi9iaW4vc2NoZWQtbWlncmF0aW9uLXJlcG9ydCBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZXBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkMDVmNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vYmluL3NjaGVkLW1pZ3JhdGlvbi1yZXBvcnQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vYmFzaAorIyBkZXNjcmlwdGlvbjogc2NoZWQgbWlncmF0aW9uIG92ZXJ2aWV3CitwZXJmIHRyYWNlICRAIC1zIH4vbGliZXhlYy9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weSBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9weXRob24vc2NoZWQtbWlncmF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzQzODMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3NjcmlwdHMvcHl0aG9uL3NjaGVkLW1pZ3JhdGlvbi5weQpAQCAtMCwwICsxLDQ2MSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMKKyMgQ3B1IHRhc2sgbWlncmF0aW9uIG92ZXJ2aWV3IHRveQorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorIworIyBwZXJmIHRyYWNlIGV2ZW50IGhhbmRsZXJzIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgcGVyZiB0cmFjZSAtZyBweXRob24KKyMKKyMgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisjIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLgorCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAorZnJvbSBVc2VyTGlzdCBpbXBvcnQgVXNlckxpc3QKKworc3lzLnBhdGguYXBwZW5kKG9zLmVudmlyb25bJ1BFUkZfRVhFQ19QQVRIJ10gKyBcCisJJy9zY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorc3lzLnBhdGguYXBwZW5kKCdzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvbGliL1BlcmYvVHJhY2UnKQorCitmcm9tIHBlcmZfdHJhY2VfY29udGV4dCBpbXBvcnQgKgorZnJvbSBDb3JlIGltcG9ydCAqCitmcm9tIFNjaGVkR3VpIGltcG9ydCAqCisKKwordGhyZWFkcyA9IHsgMCA6ICJpZGxlIn0KKworZGVmIHRocmVhZF9uYW1lKHBpZCk6CisJcmV0dXJuICIlczolZCIgJSAodGhyZWFkc1twaWRdLCBwaWQpCisKK2NsYXNzIFJ1bnF1ZXVlRXZlbnRVbmtub3duOgorCUBzdGF0aWNtZXRob2QKKwlkZWYgY29sb3IoKToKKwkJcmV0dXJuIE5vbmUKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICJ1bmtub3duIgorCitjbGFzcyBSdW5xdWV1ZUV2ZW50U2xlZXA6CisJQHN0YXRpY21ldGhvZAorCWRlZiBjb2xvcigpOgorCQlyZXR1cm4gKDAsIDAsIDB4ZmYpCisKKwlkZWYgX19pbml0X18oc2VsZiwgc2xlZXBlcik6CisJCXNlbGYuc2xlZXBlciA9IHNsZWVwZXIKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICIlcyBnb25lIHRvIHNsZWVwIiAlIHRocmVhZF9uYW1lKHNlbGYuc2xlZXBlcikKKworY2xhc3MgUnVucXVldWVFdmVudFdha2V1cDoKKwlAc3RhdGljbWV0aG9kCisJZGVmIGNvbG9yKCk6CisJCXJldHVybiAoMHhmZiwgMHhmZiwgMCkKKworCWRlZiBfX2luaXRfXyhzZWxmLCB3YWtlZSk6CisJCXNlbGYud2FrZWUgPSB3YWtlZQorCisJZGVmIF9fcmVwcl9fKHNlbGYpOgorCQlyZXR1cm4gIiVzIHdva2UgdXAiICUgdGhyZWFkX25hbWUoc2VsZi53YWtlZSkKKworY2xhc3MgUnVucXVldWVFdmVudEZvcms6CisJQHN0YXRpY21ldGhvZAorCWRlZiBjb2xvcigpOgorCQlyZXR1cm4gKDAsIDB4ZmYsIDApCisKKwlkZWYgX19pbml0X18oc2VsZiwgY2hpbGQpOgorCQlzZWxmLmNoaWxkID0gY2hpbGQKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICJuZXcgZm9ya2VkIHRhc2sgJXMiICUgdGhyZWFkX25hbWUoc2VsZi5jaGlsZCkKKworY2xhc3MgUnVucXVldWVNaWdyYXRlSW46CisJQHN0YXRpY21ldGhvZAorCWRlZiBjb2xvcigpOgorCQlyZXR1cm4gKDAsIDB4ZjAsIDB4ZmYpCisKKwlkZWYgX19pbml0X18oc2VsZiwgbmV3KToKKwkJc2VsZi5uZXcgPSBuZXcKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICJ0YXNrIG1pZ3JhdGVkIGluICVzIiAlIHRocmVhZF9uYW1lKHNlbGYubmV3KQorCitjbGFzcyBSdW5xdWV1ZU1pZ3JhdGVPdXQ6CisJQHN0YXRpY21ldGhvZAorCWRlZiBjb2xvcigpOgorCQlyZXR1cm4gKDB4ZmYsIDAsIDB4ZmYpCisKKwlkZWYgX19pbml0X18oc2VsZiwgb2xkKToKKwkJc2VsZi5vbGQgPSBvbGQKKworCWRlZiBfX3JlcHJfXyhzZWxmKToKKwkJcmV0dXJuICJ0YXNrIG1pZ3JhdGVkIG91dCAlcyIgJSB0aHJlYWRfbmFtZShzZWxmLm9sZCkKKworY2xhc3MgUnVucXVldWVTbmFwc2hvdDoKKwlkZWYgX19pbml0X18oc2VsZiwgdGFza3MgPSBbMF0sIGV2ZW50ID0gUnVucXVldWVFdmVudFVua25vd24oKSk6CisJCXNlbGYudGFza3MgPSB0dXBsZSh0YXNrcykKKwkJc2VsZi5ldmVudCA9IGV2ZW50CisKKwlkZWYgc2NoZWRfc3dpdGNoKHNlbGYsIHByZXYsIHByZXZfc3RhdGUsIG5leHQpOgorCQlldmVudCA9IFJ1bnF1ZXVlRXZlbnRVbmtub3duKCkKKworCQlpZiB0YXNrU3RhdGUocHJldl9zdGF0ZSkgPT0gIlIiIGFuZCBuZXh0IGluIHNlbGYudGFza3MgXAorCQkJYW5kIHByZXYgaW4gc2VsZi50YXNrczoKKwkJCXJldHVybiBzZWxmCisKKwkJaWYgdGFza1N0YXRlKHByZXZfc3RhdGUpICE9ICJSIjoKKwkJCWV2ZW50ID0gUnVucXVldWVFdmVudFNsZWVwKHByZXYpCisKKwkJbmV4dF90YXNrcyA9IGxpc3Qoc2VsZi50YXNrc1s6XSkKKwkJaWYgcHJldiBpbiBzZWxmLnRhc2tzOgorCQkJaWYgdGFza1N0YXRlKHByZXZfc3RhdGUpICE9ICJSIjoKKwkJCQluZXh0X3Rhc2tzLnJlbW92ZShwcmV2KQorCQllbGlmIHRhc2tTdGF0ZShwcmV2X3N0YXRlKSA9PSAiUiI6CisJCQluZXh0X3Rhc2tzLmFwcGVuZChwcmV2KQorCisJCWlmIG5leHQgbm90IGluIG5leHRfdGFza3M6CisJCQluZXh0X3Rhc2tzLmFwcGVuZChuZXh0KQorCisJCXJldHVybiBSdW5xdWV1ZVNuYXBzaG90KG5leHRfdGFza3MsIGV2ZW50KQorCisJZGVmIG1pZ3JhdGVfb3V0KHNlbGYsIG9sZCk6CisJCWlmIG9sZCBub3QgaW4gc2VsZi50YXNrczoKKwkJCXJldHVybiBzZWxmCisJCW5leHRfdGFza3MgPSBbdGFzayBmb3IgdGFzayBpbiBzZWxmLnRhc2tzIGlmIHRhc2sgIT0gb2xkXQorCisJCXJldHVybiBSdW5xdWV1ZVNuYXBzaG90KG5leHRfdGFza3MsIFJ1bnF1ZXVlTWlncmF0ZU91dChvbGQpKQorCisJZGVmIF9fbWlncmF0ZV9pbihzZWxmLCBuZXcsIGV2ZW50KToKKwkJaWYgbmV3IGluIHNlbGYudGFza3M6CisJCQlzZWxmLmV2ZW50ID0gZXZlbnQKKwkJCXJldHVybiBzZWxmCisJCW5leHRfdGFza3MgPSBzZWxmLnRhc2tzWzpdICsgdHVwbGUoW25ld10pCisKKwkJcmV0dXJuIFJ1bnF1ZXVlU25hcHNob3QobmV4dF90YXNrcywgZXZlbnQpCisKKwlkZWYgbWlncmF0ZV9pbihzZWxmLCBuZXcpOgorCQlyZXR1cm4gc2VsZi5fX21pZ3JhdGVfaW4obmV3LCBSdW5xdWV1ZU1pZ3JhdGVJbihuZXcpKQorCisJZGVmIHdha2VfdXAoc2VsZiwgbmV3KToKKwkJcmV0dXJuIHNlbGYuX19taWdyYXRlX2luKG5ldywgUnVucXVldWVFdmVudFdha2V1cChuZXcpKQorCisJZGVmIHdha2VfdXBfbmV3KHNlbGYsIG5ldyk6CisJCXJldHVybiBzZWxmLl9fbWlncmF0ZV9pbihuZXcsIFJ1bnF1ZXVlRXZlbnRGb3JrKG5ldykpCisKKwlkZWYgbG9hZChzZWxmKToKKwkJIiIiIFByb3ZpZGUgdGhlIG51bWJlciBvZiB0YXNrcyBvbiB0aGUgcnVucXVldWUuCisJCSAgICBEb24ndCBjb3VudCBpZGxlIiIiCisJCXJldHVybiBsZW4oc2VsZi50YXNrcykgLSAxCisKKwlkZWYgX19yZXByX18oc2VsZik6CisJCXJldCA9IHNlbGYudGFza3MuX19yZXByX18oKQorCQlyZXQgKz0gc2VsZi5vcmlnaW5fdG9zdHJpbmcoKQorCisJCXJldHVybiByZXQKKworY2xhc3MgVGltZVNsaWNlOgorCWRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgcHJldik6CisJCXNlbGYuc3RhcnQgPSBzdGFydAorCQlzZWxmLnByZXYgPSBwcmV2CisJCXNlbGYuZW5kID0gc3RhcnQKKwkJIyBjcHVzIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudAorCQlzZWxmLmV2ZW50X2NwdXMgPSBbXQorCQlpZiBwcmV2IGlzIG5vdCBOb25lOgorCQkJc2VsZi50b3RhbF9sb2FkID0gcHJldi50b3RhbF9sb2FkCisJCQlzZWxmLnJxcyA9IHByZXYucnFzLmNvcHkoKQorCQllbHNlOgorCQkJc2VsZi5ycXMgPSBkZWZhdWx0ZGljdChSdW5xdWV1ZVNuYXBzaG90KQorCQkJc2VsZi50b3RhbF9sb2FkID0gMAorCisJZGVmIF9fdXBkYXRlX3RvdGFsX2xvYWQoc2VsZiwgb2xkX3JxLCBuZXdfcnEpOgorCQlkaWZmID0gbmV3X3JxLmxvYWQoKSAtIG9sZF9ycS5sb2FkKCkKKwkJc2VsZi50b3RhbF9sb2FkICs9IGRpZmYKKworCWRlZiBzY2hlZF9zd2l0Y2goc2VsZiwgdHNfbGlzdCwgcHJldiwgcHJldl9zdGF0ZSwgbmV4dCwgY3B1KToKKwkJb2xkX3JxID0gc2VsZi5wcmV2LnJxc1tjcHVdCisJCW5ld19ycSA9IG9sZF9ycS5zY2hlZF9zd2l0Y2gocHJldiwgcHJldl9zdGF0ZSwgbmV4dCkKKworCQlpZiBvbGRfcnEgaXMgbmV3X3JxOgorCQkJcmV0dXJuCisKKwkJc2VsZi5ycXNbY3B1XSA9IG5ld19ycQorCQlzZWxmLl9fdXBkYXRlX3RvdGFsX2xvYWQob2xkX3JxLCBuZXdfcnEpCisJCXRzX2xpc3QuYXBwZW5kKHNlbGYpCisJCXNlbGYuZXZlbnRfY3B1cyA9IFtjcHVdCisKKwlkZWYgbWlncmF0ZShzZWxmLCB0c19saXN0LCBuZXcsIG9sZF9jcHUsIG5ld19jcHUpOgorCQlpZiBvbGRfY3B1ID09IG5ld19jcHU6CisJCQlyZXR1cm4KKwkJb2xkX3JxID0gc2VsZi5wcmV2LnJxc1tvbGRfY3B1XQorCQlvdXRfcnEgPSBvbGRfcnEubWlncmF0ZV9vdXQobmV3KQorCQlzZWxmLnJxc1tvbGRfY3B1XSA9IG91dF9ycQorCQlzZWxmLl9fdXBkYXRlX3RvdGFsX2xvYWQob2xkX3JxLCBvdXRfcnEpCisKKwkJbmV3X3JxID0gc2VsZi5wcmV2LnJxc1tuZXdfY3B1XQorCQlpbl9ycSA9IG5ld19ycS5taWdyYXRlX2luKG5ldykKKwkJc2VsZi5ycXNbbmV3X2NwdV0gPSBpbl9ycQorCQlzZWxmLl9fdXBkYXRlX3RvdGFsX2xvYWQobmV3X3JxLCBpbl9ycSkKKworCQl0c19saXN0LmFwcGVuZChzZWxmKQorCisJCWlmIG9sZF9ycSBpcyBub3Qgb3V0X3JxOgorCQkJc2VsZi5ldmVudF9jcHVzLmFwcGVuZChvbGRfY3B1KQorCQlzZWxmLmV2ZW50X2NwdXMuYXBwZW5kKG5ld19jcHUpCisKKwlkZWYgd2FrZV91cChzZWxmLCB0c19saXN0LCBwaWQsIGNwdSwgZm9yayk6CisJCW9sZF9ycSA9IHNlbGYucHJldi5ycXNbY3B1XQorCQlpZiBmb3JrOgorCQkJbmV3X3JxID0gb2xkX3JxLndha2VfdXBfbmV3KHBpZCkKKwkJZWxzZToKKwkJCW5ld19ycSA9IG9sZF9ycS53YWtlX3VwKHBpZCkKKworCQlpZiBuZXdfcnEgaXMgb2xkX3JxOgorCQkJcmV0dXJuCisJCXNlbGYucnFzW2NwdV0gPSBuZXdfcnEKKwkJc2VsZi5fX3VwZGF0ZV90b3RhbF9sb2FkKG9sZF9ycSwgbmV3X3JxKQorCQl0c19saXN0LmFwcGVuZChzZWxmKQorCQlzZWxmLmV2ZW50X2NwdXMgPSBbY3B1XQorCisJZGVmIG5leHQoc2VsZiwgdCk6CisJCXNlbGYuZW5kID0gdAorCQlyZXR1cm4gVGltZVNsaWNlKHQsIHNlbGYpCisKK2NsYXNzIFRpbWVTbGljZUxpc3QoVXNlckxpc3QpOgorCWRlZiBfX2luaXRfXyhzZWxmLCBhcmcgPSBbXSk6CisJCXNlbGYuZGF0YSA9IGFyZworCisJZGVmIGdldF90aW1lX3NsaWNlKHNlbGYsIHRzKToKKwkJaWYgbGVuKHNlbGYuZGF0YSkgPT0gMDoKKwkJCXNsaWNlID0gVGltZVNsaWNlKHRzLCBUaW1lU2xpY2UoLTEsIE5vbmUpKQorCQllbHNlOgorCQkJc2xpY2UgPSBzZWxmLmRhdGFbLTFdLm5leHQodHMpCisJCXJldHVybiBzbGljZQorCisJZGVmIGZpbmRfdGltZV9zbGljZShzZWxmLCB0cyk6CisJCXN0YXJ0ID0gMAorCQllbmQgPSBsZW4oc2VsZi5kYXRhKQorCQlmb3VuZCA9IC0xCisJCXNlYXJjaGluZyA9IFRydWUKKwkJd2hpbGUgc2VhcmNoaW5nOgorCQkJaWYgc3RhcnQgPT0gZW5kIG9yIHN0YXJ0ID09IGVuZCAtIDE6CisJCQkJc2VhcmNoaW5nID0gRmFsc2UKKworCQkJaSA9IChlbmQgKyBzdGFydCkgLyAyCisJCQlpZiBzZWxmLmRhdGFbaV0uc3RhcnQgPD0gdHMgYW5kIHNlbGYuZGF0YVtpXS5lbmQgPj0gdHM6CisJCQkJZm91bmQgPSBpCisJCQkJZW5kID0gaQorCQkJCWNvbnRpbnVlCisKKwkJCWlmIHNlbGYuZGF0YVtpXS5lbmQgPCB0czoKKwkJCQlzdGFydCA9IGkKKworCQkJZWxpZiBzZWxmLmRhdGFbaV0uc3RhcnQgPiB0czoKKwkJCQllbmQgPSBpCisKKwkJcmV0dXJuIGZvdW5kCisKKwlkZWYgc2V0X3Jvb3Rfd2luKHNlbGYsIHdpbik6CisJCXNlbGYucm9vdF93aW4gPSB3aW4KKworCWRlZiBtb3VzZV9kb3duKHNlbGYsIGNwdSwgdCk6CisJCWlkeCA9IHNlbGYuZmluZF90aW1lX3NsaWNlKHQpCisJCWlmIGlkeCA9PSAtMToKKwkJCXJldHVybgorCisJCXRzID0gc2VsZltpZHhdCisJCXJxID0gdHMucnFzW2NwdV0KKwkJcmF3ID0gIkNQVTogJWRcbiIgJSBjcHUKKwkJcmF3ICs9ICJMYXN0IGV2ZW50IDogJXNcbiIgJSBycS5ldmVudC5fX3JlcHJfXygpCisJCXJhdyArPSAiVGltZXN0YW1wIDogJWQuJTA2ZFxuIiAlICh0cy5zdGFydCAvICgxMCAqKiA5KSwgKHRzLnN0YXJ0ICUgKDEwICoqIDkpKSAvIDEwMDApCisJCXJhdyArPSAiRHVyYXRpb24gOiAlNmQgdXNcbiIgJSAoKHRzLmVuZCAtIHRzLnN0YXJ0KSAvICgxMCAqKiA2KSkKKwkJcmF3ICs9ICJMb2FkID0gJWRcbiIgJSBycS5sb2FkKCkKKwkJZm9yIHQgaW4gcnEudGFza3M6CisJCQlyYXcgKz0gIiVzIFxuIiAlIHRocmVhZF9uYW1lKHQpCisKKwkJc2VsZi5yb290X3dpbi51cGRhdGVfc3VtbWFyeShyYXcpCisKKwlkZWYgdXBkYXRlX3JlY3RhbmdsZV9jcHUoc2VsZiwgc2xpY2UsIGNwdSk6CisJCXJxID0gc2xpY2UucnFzW2NwdV0KKworCQlpZiBzbGljZS50b3RhbF9sb2FkICE9IDA6CisJCQlsb2FkX3JhdGUgPSBycS5sb2FkKCkgLyBmbG9hdChzbGljZS50b3RhbF9sb2FkKQorCQllbHNlOgorCQkJbG9hZF9yYXRlID0gMAorCisJCXJlZF9wb3dlciA9IGludCgweGZmIC0gKDB4ZmYgKiBsb2FkX3JhdGUpKQorCQljb2xvciA9ICgweGZmLCByZWRfcG93ZXIsIHJlZF9wb3dlcikKKworCQl0b3BfY29sb3IgPSBOb25lCisKKwkJaWYgY3B1IGluIHNsaWNlLmV2ZW50X2NwdXM6CisJCQl0b3BfY29sb3IgPSBycS5ldmVudC5jb2xvcigpCisKKwkJc2VsZi5yb290X3dpbi5wYWludF9yZWN0YW5nbGVfem9uZShjcHUsIGNvbG9yLCB0b3BfY29sb3IsIHNsaWNlLnN0YXJ0LCBzbGljZS5lbmQpCisKKwlkZWYgZmlsbF96b25lKHNlbGYsIHN0YXJ0LCBlbmQpOgorCQlpID0gc2VsZi5maW5kX3RpbWVfc2xpY2Uoc3RhcnQpCisJCWlmIGkgPT0gLTE6CisJCQlyZXR1cm4KKworCQlmb3IgaSBpbiB4cmFuZ2UoaSwgbGVuKHNlbGYuZGF0YSkpOgorCQkJdGltZXNsaWNlID0gc2VsZi5kYXRhW2ldCisJCQlpZiB0aW1lc2xpY2Uuc3RhcnQgPiBlbmQ6CisJCQkJcmV0dXJuCisKKwkJCWZvciBjcHUgaW4gdGltZXNsaWNlLnJxczoKKwkJCQlzZWxmLnVwZGF0ZV9yZWN0YW5nbGVfY3B1KHRpbWVzbGljZSwgY3B1KQorCisJZGVmIGludGVydmFsKHNlbGYpOgorCQlpZiBsZW4oc2VsZi5kYXRhKSA9PSAwOgorCQkJcmV0dXJuICgwLCAwKQorCisJCXJldHVybiAoc2VsZi5kYXRhWzBdLnN0YXJ0LCBzZWxmLmRhdGFbLTFdLmVuZCkKKworCWRlZiBucl9yZWN0YW5nbGVzKHNlbGYpOgorCQlsYXN0X3RzID0gc2VsZi5kYXRhWy0xXQorCQltYXhfY3B1ID0gMAorCQlmb3IgY3B1IGluIGxhc3RfdHMucnFzOgorCQkJaWYgY3B1ID4gbWF4X2NwdToKKwkJCQltYXhfY3B1ID0gY3B1CisJCXJldHVybiBtYXhfY3B1CisKKworY2xhc3MgU2NoZWRFdmVudFByb3h5OgorCWRlZiBfX2luaXRfXyhzZWxmKToKKwkJc2VsZi5jdXJyZW50X3RzayA9IGRlZmF1bHRkaWN0KGxhbWJkYSA6IC0xKQorCQlzZWxmLnRpbWVzbGljZXMgPSBUaW1lU2xpY2VMaXN0KCkKKworCWRlZiBzY2hlZF9zd2l0Y2goc2VsZiwgaGVhZGVycywgcHJldl9jb21tLCBwcmV2X3BpZCwgcHJldl9wcmlvLCBwcmV2X3N0YXRlLAorCQkJIG5leHRfY29tbSwgbmV4dF9waWQsIG5leHRfcHJpbyk6CisJCSIiIiBFbnN1cmUgdGhlIHRhc2sgd2Ugc2NoZWQgb3V0IHRoaXMgY3B1IGlzIHJlYWxseSB0aGUgb25lCisJCSAgICB3ZSBsb2dnZWQuIE90aGVyd2lzZSB3ZSBtYXkgaGF2ZSBtaXNzZWQgdHJhY2VzICIiIgorCisJCW9uX2NwdV90YXNrID0gc2VsZi5jdXJyZW50X3Rza1toZWFkZXJzLmNwdV0KKworCQlpZiBvbl9jcHVfdGFzayAhPSAtMSBhbmQgb25fY3B1X3Rhc2sgIT0gcHJldl9waWQ6CisJCQlwcmludCAiU2NoZWQgc3dpdGNoIGV2ZW50IHJlamVjdGVkIHRzOiAlcyBjcHU6ICVkIHByZXY6ICVzKCVkKSBuZXh0OiAlcyglZCkiICUgXAorCQkJCShoZWFkZXJzLnRzX2Zvcm1hdCgpLCBoZWFkZXJzLmNwdSwgcHJldl9jb21tLCBwcmV2X3BpZCwgbmV4dF9jb21tLCBuZXh0X3BpZCkKKworCQl0aHJlYWRzW3ByZXZfcGlkXSA9IHByZXZfY29tbQorCQl0aHJlYWRzW25leHRfcGlkXSA9IG5leHRfY29tbQorCQlzZWxmLmN1cnJlbnRfdHNrW2hlYWRlcnMuY3B1XSA9IG5leHRfcGlkCisKKwkJdHMgPSBzZWxmLnRpbWVzbGljZXMuZ2V0X3RpbWVfc2xpY2UoaGVhZGVycy50cygpKQorCQl0cy5zY2hlZF9zd2l0Y2goc2VsZi50aW1lc2xpY2VzLCBwcmV2X3BpZCwgcHJldl9zdGF0ZSwgbmV4dF9waWQsIGhlYWRlcnMuY3B1KQorCisJZGVmIG1pZ3JhdGUoc2VsZiwgaGVhZGVycywgcGlkLCBwcmlvLCBvcmlnX2NwdSwgZGVzdF9jcHUpOgorCQl0cyA9IHNlbGYudGltZXNsaWNlcy5nZXRfdGltZV9zbGljZShoZWFkZXJzLnRzKCkpCisJCXRzLm1pZ3JhdGUoc2VsZi50aW1lc2xpY2VzLCBwaWQsIG9yaWdfY3B1LCBkZXN0X2NwdSkKKworCWRlZiB3YWtlX3VwKHNlbGYsIGhlYWRlcnMsIGNvbW0sIHBpZCwgc3VjY2VzcywgdGFyZ2V0X2NwdSwgZm9yayk6CisJCWlmIHN1Y2Nlc3MgPT0gMDoKKwkJCXJldHVybgorCQl0cyA9IHNlbGYudGltZXNsaWNlcy5nZXRfdGltZV9zbGljZShoZWFkZXJzLnRzKCkpCisJCXRzLndha2VfdXAoc2VsZi50aW1lc2xpY2VzLCBwaWQsIHRhcmdldF9jcHUsIGZvcmspCisKKworZGVmIHRyYWNlX2JlZ2luKCk6CisJZ2xvYmFsIHBhcnNlcgorCXBhcnNlciA9IFNjaGVkRXZlbnRQcm94eSgpCisKK2RlZiB0cmFjZV9lbmQoKToKKwlhcHAgPSB3eC5BcHAoRmFsc2UpCisJdGltZXNsaWNlcyA9IHBhcnNlci50aW1lc2xpY2VzCisJZnJhbWUgPSBSb290RnJhbWUodGltZXNsaWNlcywgIk1pZ3JhdGlvbiIpCisJYXBwLk1haW5Mb29wKCkKKworZGVmIHNjaGVkX19zY2hlZF9zdGF0X3J1bnRpbWUoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIHJ1bnRpbWUsIHZydW50aW1lKToKKwlwYXNzCisKK2RlZiBzY2hlZF9fc2NoZWRfc3RhdF9pb3dhaXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIGRlbGF5KToKKwlwYXNzCisKK2RlZiBzY2hlZF9fc2NoZWRfc3RhdF9zbGVlcChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgZGVsYXkpOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9zdGF0X3dhaXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQsIGRlbGF5KToKKwlwYXNzCisKK2RlZiBzY2hlZF9fc2NoZWRfcHJvY2Vzc19mb3JrKGV2ZW50X25hbWUsIGNvbnRleHQsIGNvbW1vbl9jcHUsCisJY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywgY29tbW9uX3BpZCwgY29tbW9uX2NvbW0sCisJcGFyZW50X2NvbW0sIHBhcmVudF9waWQsIGNoaWxkX2NvbW0sIGNoaWxkX3BpZCk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3Byb2Nlc3Nfd2FpdChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbyk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3Byb2Nlc3NfZXhpdChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbyk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX3Byb2Nlc3NfZnJlZShldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbyk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX21pZ3JhdGVfdGFzayhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbywgb3JpZ19jcHUsCisJZGVzdF9jcHUpOgorCWhlYWRlcnMgPSBFdmVudEhlYWRlcnMoY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKwlwYXJzZXIubWlncmF0ZShoZWFkZXJzLCBwaWQsIHByaW8sIG9yaWdfY3B1LCBkZXN0X2NwdSkKKworZGVmIHNjaGVkX19zY2hlZF9zd2l0Y2goZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlwcmV2X2NvbW0sIHByZXZfcGlkLCBwcmV2X3ByaW8sIHByZXZfc3RhdGUsCisJbmV4dF9jb21tLCBuZXh0X3BpZCwgbmV4dF9wcmlvKToKKworCWhlYWRlcnMgPSBFdmVudEhlYWRlcnMoY29tbW9uX2NwdSwgY29tbW9uX3NlY3MsIGNvbW1vbl9uc2VjcywKKwkJCQljb21tb25fcGlkLCBjb21tb25fY29tbSkKKwlwYXJzZXIuc2NoZWRfc3dpdGNoKGhlYWRlcnMsIHByZXZfY29tbSwgcHJldl9waWQsIHByZXZfcHJpbywgcHJldl9zdGF0ZSwKKwkJCSBuZXh0X2NvbW0sIG5leHRfcGlkLCBuZXh0X3ByaW8pCisKK2RlZiBzY2hlZF9fc2NoZWRfd2FrZXVwX25ldyhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbywgc3VjY2VzcywKKwl0YXJnZXRfY3B1KToKKwloZWFkZXJzID0gRXZlbnRIZWFkZXJzKGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisJcGFyc2VyLndha2VfdXAoaGVhZGVycywgY29tbSwgcGlkLCBzdWNjZXNzLCB0YXJnZXRfY3B1LCAxKQorCitkZWYgc2NoZWRfX3NjaGVkX3dha2V1cChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbywgc3VjY2VzcywKKwl0YXJnZXRfY3B1KToKKwloZWFkZXJzID0gRXZlbnRIZWFkZXJzKGNvbW1vbl9jcHUsIGNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsCisJCQkJY29tbW9uX3BpZCwgY29tbW9uX2NvbW0pCisJcGFyc2VyLndha2VfdXAoaGVhZGVycywgY29tbSwgcGlkLCBzdWNjZXNzLCB0YXJnZXRfY3B1LCAwKQorCitkZWYgc2NoZWRfX3NjaGVkX3dhaXRfdGFzayhldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LAorCWNvbW1vbl9zZWNzLCBjb21tb25fbnNlY3MsIGNvbW1vbl9waWQsIGNvbW1vbl9jb21tLAorCWNvbW0sIHBpZCwgcHJpbyk6CisJcGFzcworCitkZWYgc2NoZWRfX3NjaGVkX2t0aHJlYWRfc3RvcF9yZXQoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwlyZXQpOgorCXBhc3MKKworZGVmIHNjaGVkX19zY2hlZF9rdGhyZWFkX3N0b3AoZXZlbnRfbmFtZSwgY29udGV4dCwgY29tbW9uX2NwdSwKKwljb21tb25fc2VjcywgY29tbW9uX25zZWNzLCBjb21tb25fcGlkLCBjb21tb25fY29tbSwKKwljb21tLCBwaWQpOgorCXBhc3MKKworZGVmIHRyYWNlX3VuaGFuZGxlZChldmVudF9uYW1lLCBjb250ZXh0LCBjb21tb25fY3B1LCBjb21tb25fc2VjcywgY29tbW9uX25zZWNzLAorCQljb21tb25fcGlkLCBjb21tb25fY29tbSk6CisJcGFzcwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2J1aWxkLWlkLmMgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwppbmRleCA3MGM1Y2Y4Li5lNDM3ZWRiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYworKysgYi90b29scy9wZXJmL3V0aWwvYnVpbGQtaWQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSAiZGVidWcuaCIKIAogc3RhdGljIGludCBidWlsZF9pZF9fbWFya19kc29faGl0KGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewpAQCAtMzQsMjggKzM1LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXZlbnRfX2V4aXRfZGVsX3RocmVhZChldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCB0aHJlYWQgKnRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5mb3JrLnRpZCk7CisKKwlkdW1wX3ByaW50ZigiKCVkOiVkKTooJWQ6JWQpXG4iLCBzZWxmLT5mb3JrLnBpZCwgc2VsZi0+Zm9yay50aWQsCisJCSAgICBzZWxmLT5mb3JrLnBwaWQsIHNlbGYtPmZvcmsucHRpZCk7CisKKwlpZiAodGhyZWFkKSB7CisJCXJiX2VyYXNlKCZ0aHJlYWQtPnJiX25vZGUsICZzZXNzaW9uLT50aHJlYWRzKTsKKwkJc2Vzc2lvbi0+bGFzdF9tYXRjaCA9IE5VTEw7CisJCXRocmVhZF9fZGVsZXRlKHRocmVhZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBwZXJmX2V2ZW50X29wcyBidWlsZF9pZF9fbWFya19kc29faGl0X29wcyA9IHsKIAkuc2FtcGxlCT0gYnVpbGRfaWRfX21hcmtfZHNvX2hpdCwKIAkubW1hcAk9IGV2ZW50X19wcm9jZXNzX21tYXAsCiAJLmZvcmsJPSBldmVudF9fcHJvY2Vzc190YXNrLAorCS5leGl0CT0gZXZlbnRfX2V4aXRfZGVsX3RocmVhZCwKIH07CiAKIGNoYXIgKmRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqYmYsIHNpemVfdCBzaXplKQogewogCWNoYXIgYnVpbGRfaWRfaGV4W0JVSUxEX0lEX1NJWkUgKiAyICsgMV07Ci0JY29uc3QgY2hhciAqaG9tZTsKIAogCWlmICghc2VsZi0+aGFzX2J1aWxkX2lkKQogCQlyZXR1cm4gTlVMTDsKIAogCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLCBidWlsZF9pZF9oZXgpOwotCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKIAlpZiAoYmYgPT0gTlVMTCkgewotCQlpZiAoYXNwcmludGYoJmJmLCAiJXMvJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLCBob21lLAotCQkJICAgICBERUJVR19DQUNIRV9ESVIsIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMikgPCAwKQorCQlpZiAoYXNwcmludGYoJmJmLCAiJXMvLmJ1aWxkLWlkLyUuMnMvJXMiLCBidWlsZGlkX2RpciwKKwkJCSAgICAgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKSA8IDApCiAJCQlyZXR1cm4gTlVMTDsKIAl9IGVsc2UKLQkJc25wcmludGYoYmYsIHNpemUsICIlcy8lcy8uYnVpbGQtaWQvJS4ycy8lcyIsIGhvbWUsCi0JCQkgREVCVUdfQ0FDSEVfRElSLCBidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOworCQlzbnByaW50ZihiZiwgc2l6ZSwgIiVzLy5idWlsZC1pZC8lLjJzLyVzIiwgYnVpbGRpZF9kaXIsCisJCQkgYnVpbGRfaWRfaGV4LCBidWlsZF9pZF9oZXggKyAyKTsKIAlyZXR1cm4gYmY7CiB9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY2FjaGUuaCBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCmluZGV4IDY1ZmU2NjQuLjI3ZTllYmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWNoZS5oCkBAIC0yMyw2ICsyMyw3IEBACiBleHRlcm4gaW50IHBlcmZfY29uZmlnX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IHBlcmZfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBjb25maWdfZXJyb3Jfbm9uYm9vbChjb25zdCBjaGFyICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBlcmZfY29uZmlnX2Rpcm5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogCiAvKiBwYWdlci5jICovCiBleHRlcm4gdm9pZCBzZXR1cF9wYWdlcih2b2lkKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYwppbmRleCA1MmM3NzdlLi5mMjMxZjQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSAidXRpbC5oIgogI2luY2x1ZGUgImNhbGxjaGFpbi5oIgogCi1ib29sIGlwX2NhbGxjaGFpbl9fdmFsaWQoc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sIGV2ZW50X3QgKmV2ZW50KQorYm9vbCBpcF9jYWxsY2hhaW5fX3ZhbGlkKHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLCBjb25zdCBldmVudF90ICpldmVudCkKIHsKIAl1bnNpZ25lZCBpbnQgY2hhaW5fc2l6ZSA9IGV2ZW50LT5oZWFkZXIuc2l6ZTsKIAljaGFpbl9zaXplIC09ICh1bnNpZ25lZCBsb25nKSZldmVudC0+aXAuX19tb3JlX2RhdGEgLSAodW5zaWduZWQgbG9uZylldmVudDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaCBiL3Rvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaAppbmRleCBmMmU5ZWUxLi42MjRhOTZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvY2FsbGNoYWluLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NhbGxjaGFpbi5oCkBAIC02Myw1ICs2Myw1IEBACiBpbnQgYXBwZW5kX2NoYWluKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqcm9vdCwgc3RydWN0IGlwX2NhbGxjaGFpbiAqY2hhaW4sCiAJCSBzdHJ1Y3QgbWFwX3N5bWJvbCAqc3ltcywgdTY0IHBlcmlvZCk7CiAKLWJvb2wgaXBfY2FsbGNoYWluX192YWxpZChzdHJ1Y3QgaXBfY2FsbGNoYWluICpjaGFpbiwgZXZlbnRfdCAqZXZlbnQpOworYm9vbCBpcF9jYWxsY2hhaW5fX3ZhbGlkKHN0cnVjdCBpcF9jYWxsY2hhaW4gKmNoYWluLCBjb25zdCBldmVudF90ICpldmVudCk7CiAjZW5kaWYJLyogX19QRVJGX0NBTExDSEFJTl9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY29uZmlnLmMgYi90b29scy9wZXJmL3V0aWwvY29uZmlnLmMKaW5kZXggZGFiZTg5Mi4uZTAyZDc4YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbmZpZy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jb25maWcuYwpAQCAtMTEsNiArMTEsMTEgQEAKIAogI2RlZmluZSBNQVhOQU1FICgyNTYpCiAKKyNkZWZpbmUgREVCVUdfQ0FDSEVfRElSICIuZGVidWciCisKKworY2hhciBidWlsZGlkX2RpcltNQVhQQVRITEVOXTsgLyogcm9vdCBkaXIgZm9yIGJ1aWxkaWQsIGJpbmFyeSBjYWNoZSAqLworCiBzdGF0aWMgRklMRSAqY29uZmlnX2ZpbGU7CiBzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2ZpbGVfbmFtZTsKIHN0YXRpYyBpbnQgY29uZmlnX2xpbmVucjsKQEAgLTEyNyw3ICsxMzIsNyBAQAogCQkJYnJlYWs7CiAJCWlmICghaXNrZXljaGFyKGMpKQogCQkJYnJlYWs7Ci0JCW5hbWVbbGVuKytdID0gdG9sb3dlcihjKTsKKwkJbmFtZVtsZW4rK10gPSBjOwogCQlpZiAobGVuID49IE1BWE5BTUUpCiAJCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzI3LDYgKzMzMiwxMyBAQAogCXJldHVybiAhIXBlcmZfY29uZmlnX2Jvb2xfb3JfaW50KG5hbWUsIHZhbHVlLCAmZGlzY2FyZCk7CiB9CiAKK2NvbnN0IGNoYXIgKnBlcmZfY29uZmlnX2Rpcm5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdmFsdWU7Cit9CisKIHN0YXRpYyBpbnQgcGVyZl9kZWZhdWx0X2NvcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciBfX3VzZWQsIGNvbnN0IGNoYXIgKnZhbHVlIF9fdXNlZCkKIHsKIAkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCkBAIC00MjgsMyArNDQwLDUzIEBACiB7CiAJcmV0dXJuIGVycm9yKCJNaXNzaW5nIHZhbHVlIGZvciAnJXMnIiwgdmFyKTsKIH0KKworc3RydWN0IGJ1aWxkaWRfZGlyX2NvbmZpZyB7CisJY2hhciAqZGlyOworfTsKKworc3RhdGljIGludCBidWlsZGlkX2Rpcl9jb21tYW5kX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJ1aWxkaWRfZGlyX2NvbmZpZyAqYyA9IGRhdGE7CisJY29uc3QgY2hhciAqdjsKKworCS8qIHNhbWUgZGlyIGZvciBhbGwgY29tbWFuZHMgKi8KKwlpZiAoIXByZWZpeGNtcCh2YXIsICJidWlsZGlkLiIpICYmICFzdHJjbXAodmFyICsgOCwgImRpciIpKSB7CisJCXYgPSBwZXJmX2NvbmZpZ19kaXJuYW1lKHZhciwgdmFsdWUpOworCQlpZiAoIXYpCisJCQlyZXR1cm4gLTE7CisJCXN0cm5jcHkoYy0+ZGlyLCB2LCBNQVhQQVRITEVOLTEpOworCQljLT5kaXJbTUFYUEFUSExFTi0xXSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19idWlsZGlkX2Rpcl9jb25maWcodm9pZCkKK3sKKwlzdHJ1Y3QgYnVpbGRpZF9kaXJfY29uZmlnIGM7CisJYy5kaXIgPSBidWlsZGlkX2RpcjsKKwlwZXJmX2NvbmZpZyhidWlsZGlkX2Rpcl9jb21tYW5kX2NvbmZpZywgJmMpOworfQorCit2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKQoreworCWJ1aWxkaWRfZGlyWzBdID0gJ1wwJzsKKworCS8qIHRyeSBjb25maWcgZmlsZSAqLworCWNoZWNrX2J1aWxkaWRfZGlyX2NvbmZpZygpOworCisJLyogZGVmYXVsdCB0byAkSE9NRS8uZGVidWcgKi8KKwlpZiAoYnVpbGRpZF9kaXJbMF0gPT0gJ1wwJykgeworCQljaGFyICp2ID0gZ2V0ZW52KCJIT01FIik7CisJCWlmICh2KSB7CisJCQlzbnByaW50ZihidWlsZGlkX2RpciwgTUFYUEFUSExFTi0xLCAiJXMvJXMiLAorCQkJCSB2LCBERUJVR19DQUNIRV9ESVIpOworCQl9IGVsc2UgeworCQkJc3RybmNweShidWlsZGlkX2RpciwgREVCVUdfQ0FDSEVfRElSLCBNQVhQQVRITEVOLTEpOworCQl9CisJCWJ1aWxkaWRfZGlyW01BWFBBVEhMRU4tMV0gPSAnXDAnOworCX0KKwkvKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGV4dGVybmFsIGNvbW1hbmRzICovCisJc2V0ZW52KCJQRVJGX0JVSUxESURfRElSIiwgYnVpbGRpZF9kaXIsIDEpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jIGIvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5jCmluZGV4IDRlMDE0OTAuLjBmOWI4ZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAlyZXR1cm4gbnJfY3B1czsKIH0KIAotaW50IHJlYWRfY3B1X21hcCh2b2lkKQorc3RhdGljIGludCByZWFkX2FsbF9jcHVfbWFwKHZvaWQpCiB7CiAJRklMRSAqb25sbmY7CiAJaW50IG5yX2NwdXMgPSAwOwpAQCAtNTcsMyArNTcsNTggQEAKIAogCXJldHVybiBkZWZhdWx0X2NwdV9tYXAoKTsKIH0KKworaW50IHJlYWRfY3B1X21hcChjb25zdCBjaGFyICpjcHVfbGlzdCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2NwdSwgZW5kX2NwdSA9IDA7CisJY2hhciAqcCA9IE5VTEw7CisJaW50IGksIG5yX2NwdXMgPSAwOworCisJaWYgKCFjcHVfbGlzdCkKKwkJcmV0dXJuIHJlYWRfYWxsX2NwdV9tYXAoKTsKKworCWlmICghaXNkaWdpdCgqY3B1X2xpc3QpKQorCQlnb3RvIGludmFsaWQ7CisKKwl3aGlsZSAoaXNkaWdpdCgqY3B1X2xpc3QpKSB7CisJCXAgPSBOVUxMOworCQlzdGFydF9jcHUgPSBzdHJ0b3VsKGNwdV9saXN0LCAmcCwgMCk7CisJCWlmIChzdGFydF9jcHUgPj0gSU5UX01BWAorCQkgICAgfHwgKCpwICE9ICdcMCcgJiYgKnAgIT0gJywnICYmICpwICE9ICctJykpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJaWYgKCpwID09ICctJykgeworCQkJY3B1X2xpc3QgPSArK3A7CisJCQlwID0gTlVMTDsKKwkJCWVuZF9jcHUgPSBzdHJ0b3VsKGNwdV9saXN0LCAmcCwgMCk7CisKKwkJCWlmIChlbmRfY3B1ID49IElOVF9NQVggfHwgKCpwICE9ICdcMCcgJiYgKnAgIT0gJywnKSkKKwkJCQlnb3RvIGludmFsaWQ7CisKKwkJCWlmIChlbmRfY3B1IDwgc3RhcnRfY3B1KQorCQkJCWdvdG8gaW52YWxpZDsKKwkJfSBlbHNlIHsKKwkJCWVuZF9jcHUgPSBzdGFydF9jcHU7CisJCX0KKworCQlmb3IgKDsgc3RhcnRfY3B1IDw9IGVuZF9jcHU7IHN0YXJ0X2NwdSsrKSB7CisJCQkvKiBjaGVjayBmb3IgZHVwbGljYXRlcyAqLworCQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdXM7IGkrKykKKwkJCQlpZiAoY3B1bWFwW2ldID09IChpbnQpc3RhcnRfY3B1KQorCQkJCQlnb3RvIGludmFsaWQ7CisKKwkJCWFzc2VydChucl9jcHVzIDwgTUFYX05SX0NQVVMpOworCQkJY3B1bWFwW25yX2NwdXMrK10gPSAoaW50KXN0YXJ0X2NwdTsKKwkJfQorCQlpZiAoKnApCisJCQkrK3A7CisKKwkJY3B1X2xpc3QgPSBwOworCX0KKwlpZiAobnJfY3B1cyA+IDApCisJCXJldHVybiBucl9jcHVzOworCisJcmV0dXJuIGRlZmF1bHRfY3B1X21hcCgpOworaW52YWxpZDoKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY3B1bWFwLmggYi90b29scy9wZXJmL3V0aWwvY3B1bWFwLmgKaW5kZXggODZjNzhiYi4uM2U2MGY1NiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NwdW1hcC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jcHVtYXAuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX19QRVJGX0NQVU1BUF9ICiAjZGVmaW5lIF9fUEVSRl9DUFVNQVBfSAogCi1leHRlcm4gaW50IHJlYWRfY3B1X21hcCh2b2lkKTsKK2V4dGVybiBpbnQgcmVhZF9jcHVfbWFwKGNvbnN0IGNoYXIgKmNwdV9saXN0KTsKIGV4dGVybiBpbnQgY3B1bWFwW107CiAKICNlbmRpZiAvKiBfX1BFUkZfQ1BVTUFQX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9kZWJ1Zy5jIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKaW5kZXggNmNkZGZmMi4uMzE4ZGFiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2RlYnVnLmMKQEAgLTg2LDEyICs4NiwxMCBAQAogCQkJZHVtcF9wcmludGZfY29sb3IoIiAgIiwgY29sb3IpOwogCQkJZm9yIChqID0gMDsgaiA8IDE1LShpICYgMTUpOyBqKyspCiAJCQkJZHVtcF9wcmludGZfY29sb3IoIiAgICIsIGNvbG9yKTsKLQkJCWZvciAoaiA9IDA7IGogPCAoaSAmIDE1KTsgaisrKSB7Ci0JCQkJaWYgKGlzcHJpbnQocmF3X2V2ZW50W2ktMTUral0pKQotCQkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKLQkJCQkJCQkgIHJhd19ldmVudFtpLTE1K2pdKTsKLQkJCQllbHNlCi0JCQkJCWR1bXBfcHJpbnRmX2NvbG9yKCIuIiwgY29sb3IpOworCQkJZm9yIChqID0gaSAmIH4xNTsgaiA8PSBpOyBqKyspIHsKKwkJCQlkdW1wX3ByaW50Zl9jb2xvcigiJWMiLCBjb2xvciwKKwkJCQkJCWlzcHJpbnQocmF3X2V2ZW50W2pdKSA/CisJCQkJCQlyYXdfZXZlbnRbal0gOiAnLicpOwogCQkJfQogCQkJZHVtcF9wcmludGZfY29sb3IoIlxuIiwgY29sb3IpOwogCQl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCmluZGV4IDJmYmY2YTQuLmRhYjllNzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jCkBAIC0xNTEsNyArMTUxLDYgQEAKIAkJCWNvbnRpbnVlOwogCQlwYmYgKz0gbiArIDM7CiAJCWlmICgqcGJmID09ICd4JykgeyAvKiB2bV9leGVjICovCi0JCQl1NjQgdm1fcGdvZmY7CiAJCQljaGFyICpleGVjbmFtZSA9IHN0cmNocihiZiwgJy8nKTsKIAogCQkJLyogQ2F0Y2ggVkRTTyAqLwpAQCAtMTYyLDEyICsxNjEsNyBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlwYmYgKz0gMzsKLQkJCW4gPSBoZXgydTY0KHBiZiwgJnZtX3Bnb2ZmKTsKLQkJCS8qIHBnb2ZmIGlzIGluIGJ5dGVzLCBub3QgcGFnZXMgKi8KLQkJCWlmIChuID49IDApCi0JCQkJZXYubW1hcC5wZ29mZiA9IHZtX3Bnb2ZmIDw8IGdldHBhZ2VzaXplKCk7Ci0JCQllbHNlCi0JCQkJZXYubW1hcC5wZ29mZiA9IDA7CisJCQluID0gaGV4MnU2NChwYmYsICZldi5tbWFwLnBnb2ZmKTsKIAogCQkJc2l6ZSA9IHN0cmxlbihleGVjbmFtZSk7CiAJCQlleGVjbmFtZVtzaXplIC0gMV0gPSAnXDAnOyAvKiBSZW1vdmUgXG4gKi8KQEAgLTM0MCwzMCArMzM0LDI5IEBACiAJcmV0dXJuIHByb2Nlc3MoJmV2LCBzZXNzaW9uKTsKIH0KIAotc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmKQorc3RhdGljIHZvaWQgdGhyZWFkX19jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBzdHJ1Y3QgaGlzdHMgKmhpc3RzKQogewogCWNoYXIgKmNvbW0gPSBzZWxmLT5jb21tOwogCiAJaWYgKCFzeW1ib2xfY29uZi5jb2xfd2lkdGhfbGlzdF9zdHIgJiYgIXN5bWJvbF9jb25mLmZpZWxkX3NlcCAmJgogCSAgICAoIXN5bWJvbF9jb25mLmNvbW1fbGlzdCB8fAogCSAgICAgc3RybGlzdF9faGFzX2VudHJ5KHN5bWJvbF9jb25mLmNvbW1fbGlzdCwgY29tbSkpKSB7Ci0JCXVuc2lnbmVkIGludCBzbGVuID0gc3RybGVuKGNvbW0pOworCQl1MTYgc2xlbiA9IHN0cmxlbihjb21tKTsKIAotCQlpZiAoc2xlbiA+IGNvbW1zX19jb2xfd2lkdGgpIHsKLQkJCWNvbW1zX19jb2xfd2lkdGggPSBzbGVuOwotCQkJdGhyZWFkc19fY29sX3dpZHRoID0gc2xlbiArIDY7Ci0JCX0KKwkJaWYgKGhpc3RzX19uZXdfY29sX2xlbihoaXN0cywgSElTVENfQ09NTSwgc2xlbikpCisJCQloaXN0c19fc2V0X2NvbF9sZW4oaGlzdHMsIEhJU1RDX1RIUkVBRCwgc2xlbiArIDYpOwogCX0KIH0KIAotc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQorc3RhdGljIGludCB0aHJlYWRfX3NldF9jb21tX2FkanVzdChzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tLAorCQkJCSAgIHN0cnVjdCBoaXN0cyAqaGlzdHMpCiB7CiAJaW50IHJldCA9IHRocmVhZF9fc2V0X2NvbW0oc2VsZiwgY29tbSk7CiAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JdGhyZWFkX19jb21tX2FkanVzdChzZWxmKTsKKwl0aHJlYWRfX2NvbW1fYWRqdXN0KHNlbGYsIGhpc3RzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzc0LDcgKzM2Nyw4IEBACiAKIAlkdW1wX3ByaW50ZigiOiAlczolZFxuIiwgc2VsZi0+Y29tbS5jb21tLCBzZWxmLT5jb21tLnRpZCk7CiAKLQlpZiAodGhyZWFkID09IE5VTEwgfHwgdGhyZWFkX19zZXRfY29tbV9hZGp1c3QodGhyZWFkLCBzZWxmLT5jb21tLmNvbW0pKSB7CisJaWYgKHRocmVhZCA9PSBOVUxMIHx8IHRocmVhZF9fc2V0X2NvbW1fYWRqdXN0KHRocmVhZCwgc2VsZi0+Y29tbS5jb21tLAorCQkJCQkJICAgICAgJnNlc3Npb24tPmhpc3RzKSkgewogCQlkdW1wX3ByaW50ZigicHJvYmxlbSBwcm9jZXNzaW5nIFBFUkZfUkVDT1JEX0NPTU0sIHNraXBwaW5nIGV2ZW50LlxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00NTYsNiArNDUwLDcgQEAKIAkJCWdvdG8gb3V0X3Byb2JsZW07CiAKIAkJbWFwLT5kc28tPnNob3J0X25hbWUgPSBuYW1lOworCQltYXAtPmRzby0+c25hbWVfYWxsb2MgPSAxOwogCQltYXAtPmVuZCA9IG1hcC0+c3RhcnQgKyBzZWxmLT5tbWFwLmxlbjsKIAl9IGVsc2UgaWYgKGlzX2tlcm5lbF9tbWFwKSB7CiAJCWNvbnN0IGNoYXIgKnN5bWJvbF9uYW1lID0gKHNlbGYtPm1tYXAuZmlsZW5hbWUgKwpAQCAtNTE0LDEyICs1MDksMTMgQEAKIAlpZiAobWFjaGluZSA9PSBOVUxMKQogCQlnb3RvIG91dF9wcm9ibGVtOwogCXRocmVhZCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzZWxmLT5tbWFwLnBpZCk7CisJaWYgKHRocmVhZCA9PSBOVUxMKQorCQlnb3RvIG91dF9wcm9ibGVtOwogCW1hcCA9IG1hcF9fbmV3KCZtYWNoaW5lLT51c2VyX2Rzb3MsIHNlbGYtPm1tYXAuc3RhcnQsCiAJCQlzZWxmLT5tbWFwLmxlbiwgc2VsZi0+bW1hcC5wZ29mZiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLmZpbGVuYW1lLAotCQkJTUFQX19GVU5DVElPTiwgc2Vzc2lvbi0+Y3dkLCBzZXNzaW9uLT5jd2RsZW4pOwotCi0JaWYgKHRocmVhZCA9PSBOVUxMIHx8IG1hcCA9PSBOVUxMKQorCQkJTUFQX19GVU5DVElPTik7CisJaWYgKG1hcCA9PSBOVUxMKQogCQlnb3RvIG91dF9wcm9ibGVtOwogCiAJdGhyZWFkX19pbnNlcnRfbWFwKHRocmVhZCwgbWFwKTsKQEAgLTU1Miw2ICs1NDgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGV2ZW50X19wcm9jZXNzKGV2ZW50X3QgKmV2ZW50LCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN3aXRjaCAoZXZlbnQtPmhlYWRlci50eXBlKSB7CisJY2FzZSBQRVJGX1JFQ09SRF9DT01NOgorCQlldmVudF9fcHJvY2Vzc19jb21tKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX1JFQ09SRF9NTUFQOgorCQlldmVudF9fcHJvY2Vzc19tbWFwKGV2ZW50LCBzZXNzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBQRVJGX1JFQ09SRF9GT1JLOgorCWNhc2UgUEVSRl9SRUNPUkRfRVhJVDoKKwkJZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudCwgc2Vzc2lvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiB2b2lkIHRocmVhZF9fZmluZF9hZGRyX21hcChzdHJ1Y3QgdGhyZWFkICpzZWxmLAogCQkJICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY3B1bW9kZSwKIAkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgcGlkX3QgcGlkLCB1NjQgYWRkciwKQEAgLTY0MSwyNyArNjU3LDQ5IEBACiAJCWFsLT5zeW0gPSBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX2NhbGNfY29sX3dpZHRoKHN0cnVjdCBkc28gKnNlbGYpCitzdGF0aWMgdm9pZCBkc29fX2NhbGNfY29sX3dpZHRoKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBoaXN0cyAqaGlzdHMpCiB7CiAJaWYgKCFzeW1ib2xfY29uZi5jb2xfd2lkdGhfbGlzdF9zdHIgJiYgIXN5bWJvbF9jb25mLmZpZWxkX3NlcCAmJgogCSAgICAoIXN5bWJvbF9jb25mLmRzb19saXN0IHx8CiAJICAgICBzdHJsaXN0X19oYXNfZW50cnkoc3ltYm9sX2NvbmYuZHNvX2xpc3QsIHNlbGYtPm5hbWUpKSkgewotCQl1MTYgc2xlbiA9IHNlbGYtPnNob3J0X25hbWVfbGVuOwotCQlpZiAodmVyYm9zZSkKLQkJCXNsZW4gPSBzZWxmLT5sb25nX25hbWVfbGVuOwotCQlpZiAoZHNvc19fY29sX3dpZHRoIDwgc2xlbikKLQkJCWRzb3NfX2NvbF93aWR0aCA9IHNsZW47CisJCXUxNiBzbGVuID0gZHNvX19uYW1lX2xlbihzZWxmKTsKKwkJaGlzdHNfX25ld19jb2xfbGVuKGhpc3RzLCBISVNUQ19EU08sIHNsZW4pOwogCX0KIAogCXNlbGYtPnNsZW5fY2FsY3VsYXRlZCA9IDE7CiB9CiAKIGludCBldmVudF9fcHJlcHJvY2Vzc19zYW1wbGUoY29uc3QgZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCSAgICAgc3RydWN0IGFkZHJfbG9jYXRpb24gKmFsLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1OCBjcHVtb2RlID0gc2VsZi0+aGVhZGVyLm1pc2MgJiBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSzsKLQlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+aXAucGlkKTsKKwlzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CiAKKwlldmVudF9fcGFyc2Vfc2FtcGxlKHNlbGYsIHNlc3Npb24tPnNhbXBsZV90eXBlLCBkYXRhKTsKKworCWR1bXBfcHJpbnRmKCIoSVAsICVkKTogJWQvJWQ6ICUjTHggcGVyaW9kOiAlTGQgY3B1OiVkXG4iLAorCQkgICAgc2VsZi0+aGVhZGVyLm1pc2MsIGRhdGEtPnBpZCwgZGF0YS0+dGlkLCBkYXRhLT5pcCwKKwkJICAgIGRhdGEtPnBlcmlvZCwgZGF0YS0+Y3B1KTsKKworCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlkdW1wX3ByaW50ZigiLi4uIGNoYWluOiBucjolTHVcbiIsIGRhdGEtPmNhbGxjaGFpbi0+bnIpOworCisJCWlmICghaXBfY2FsbGNoYWluX192YWxpZChkYXRhLT5jYWxsY2hhaW4sIHNlbGYpKSB7CisJCQlwcl9kZWJ1ZygiY2FsbC1jaGFpbiBwcm9ibGVtIHdpdGggZXZlbnQsICIKKwkJCQkgInNraXBwaW5nIGl0LlxuIik7CisJCQlnb3RvIG91dF9maWx0ZXJlZDsKKwkJfQorCisJCWlmIChkdW1wX3RyYWNlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+Y2FsbGNoYWluLT5ucjsgaSsrKQorCQkJCWR1bXBfcHJpbnRmKCIuLi4uLiAlMmQ6ICUwMTZMeFxuIiwKKwkJCQkJICAgIGksIGRhdGEtPmNhbGxjaGFpbi0+aXBzW2ldKTsKKwkJfQorCX0KKwl0aHJlYWQgPSBwZXJmX3Nlc3Npb25fX2ZpbmRuZXcoc2Vzc2lvbiwgc2VsZi0+aXAucGlkKTsKIAlpZiAodGhyZWFkID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAtNjg3LDYgKzcyNSw3IEBACiAJCSAgICBhbC0+bWFwID8gYWwtPm1hcC0+ZHNvLT5sb25nX25hbWUgOgogCQkJYWwtPmxldmVsID09ICdIJyA/ICJbaHlwZXJ2aXNvcl0iIDogIjxub3QgZm91bmQ+Iik7CiAJYWwtPnN5bSA9IE5VTEw7CisJYWwtPmNwdSA9IGRhdGEtPmNwdTsKIAogCWlmIChhbC0+bWFwKSB7CiAJCWlmIChzeW1ib2xfY29uZi5kc29fbGlzdCAmJgpAQCAtNzAzLDE2ICs3NDIsMTcgQEAKIAkJICogc2FtcGxlZC4KIAkJICovCiAJCWlmICghc29ydF9kc28uZWxpZGUgJiYgIWFsLT5tYXAtPmRzby0+c2xlbl9jYWxjdWxhdGVkKQotCQkJZHNvX19jYWxjX2NvbF93aWR0aChhbC0+bWFwLT5kc28pOworCQkJZHNvX19jYWxjX2NvbF93aWR0aChhbC0+bWFwLT5kc28sICZzZXNzaW9uLT5oaXN0cyk7CiAKIAkJYWwtPnN5bSA9IG1hcF9fZmluZF9zeW1ib2woYWwtPm1hcCwgYWwtPmFkZHIsIGZpbHRlcik7CiAJfSBlbHNlIHsKIAkJY29uc3QgdW5zaWduZWQgaW50IHVucmVzb2x2ZWRfY29sX3dpZHRoID0gQklUU19QRVJfTE9ORyAvIDQ7CiAKLQkJaWYgKGRzb3NfX2NvbF93aWR0aCA8IHVucmVzb2x2ZWRfY29sX3dpZHRoICYmCisJCWlmIChoaXN0c19fY29sX2xlbigmc2Vzc2lvbi0+aGlzdHMsIEhJU1RDX0RTTykgPCB1bnJlc29sdmVkX2NvbF93aWR0aCAmJgogCQkgICAgIXN5bWJvbF9jb25mLmNvbF93aWR0aF9saXN0X3N0ciAmJiAhc3ltYm9sX2NvbmYuZmllbGRfc2VwICYmCiAJCSAgICAhc3ltYm9sX2NvbmYuZHNvX2xpc3QpCi0JCQlkc29zX19jb2xfd2lkdGggPSB1bnJlc29sdmVkX2NvbF93aWR0aDsKKwkJCWhpc3RzX19zZXRfY29sX2xlbigmc2Vzc2lvbi0+aGlzdHMsIEhJU1RDX0RTTywKKwkJCQkJICAgdW5yZXNvbHZlZF9jb2xfd2lkdGgpOwogCX0KIAogCWlmIChzeW1ib2xfY29uZi5zeW1fbGlzdCAmJiBhbC0+c3ltICYmCkBAIC03MjYsOSArNzY2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnRfdCAqZXZlbnQsIHU2NCB0eXBlLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKmRhdGEpCitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSkKIHsKLQl1NjQgKmFycmF5ID0gZXZlbnQtPnNhbXBsZS5hcnJheTsKKwljb25zdCB1NjQgKmFycmF5ID0gZXZlbnQtPnNhbXBsZS5hcnJheTsKIAogCWlmICh0eXBlICYgUEVSRl9TQU1QTEVfSVApIHsKIAkJZGF0YS0+aXAgPSBldmVudC0+aXAuaXA7CkBAIC03NjcsNyArODA3LDggQEAKIAkJdTMyICpwID0gKHUzMiAqKWFycmF5OwogCQlkYXRhLT5jcHUgPSAqcDsKIAkJYXJyYXkrKzsKLQl9CisJfSBlbHNlCisJCWRhdGEtPmNwdSA9IC0xOwogCiAJaWYgKHR5cGUgJiBQRVJGX1NBTVBMRV9QRVJJT0QpIHsKIAkJZGF0YS0+cGVyaW9kID0gKmFycmF5OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCA4NTc3MDg1Li44ZTc5MGRhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTU0LDExICsxNTQsMTMgQEAKIGludCBldmVudF9fcHJvY2Vzc19sb3N0KGV2ZW50X3QgKnNlbGYsIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19wcm9jZXNzX21tYXAoZXZlbnRfdCAqc2VsZiwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3Byb2Nlc3NfdGFzayhldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fcHJvY2VzcyhldmVudF90ICpldmVudCwgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKIHN0cnVjdCBhZGRyX2xvY2F0aW9uOwogaW50IGV2ZW50X19wcmVwcm9jZXNzX3NhbXBsZShjb25zdCBldmVudF90ICpzZWxmLCBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IGV2ZW50X19wYXJzZV9zYW1wbGUoZXZlbnRfdCAqZXZlbnQsIHU2NCB0eXBlLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKmRhdGEpOworCQkJICAgICBzdHJ1Y3QgYWRkcl9sb2NhdGlvbiAqYWwsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSwKKwkJCSAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZXZlbnRfX3BhcnNlX3NhbXBsZShjb25zdCBldmVudF90ICpldmVudCwgdTY0IHR5cGUsIHN0cnVjdCBzYW1wbGVfZGF0YSAqZGF0YSk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpldmVudF9fbmFtZVtdOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKaW5kZXggMWY2MjQzNS4uZDdlNjdiMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKK3N0YXRpYyBib29sIG5vX2J1aWxkaWRfY2FjaGUgPSBmYWxzZTsKKwogLyoKICAqIENyZWF0ZSBuZXcgcGVyZi5kYXRhIGhlYWRlciBhdHRyaWJ1dGU6CiAgKi8KQEAgLTM4NSw4ICszODcsNyBAQAogCWludCByZXQ7CiAJY2hhciBkZWJ1Z2RpcltQQVRIX01BWF07CiAKLQlzbnByaW50ZihkZWJ1Z2Rpciwgc2l6ZW9mKGRlYnVnZGlyKSwgIiVzLyVzIiwgZ2V0ZW52KCJIT01FIiksCi0JCSBERUJVR19DQUNIRV9ESVIpOworCXNucHJpbnRmKGRlYnVnZGlyLCBzaXplb2YoZGVidWdkaXIpLCAiJXMiLCBidWlsZGlkX2Rpcik7CiAKIAlpZiAobWtkaXIoZGVidWdkaXIsIDA3NTUpICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKQogCQlyZXR1cm4gLTE7CkBAIC00NzEsNyArNDcyLDggQEAKIAkJfQogCQlidWlsZGlkX3NlYy0+c2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUikgLQogCQkJCQkgIGJ1aWxkaWRfc2VjLT5vZmZzZXQ7Ci0JCXBlcmZfc2Vzc2lvbl9fY2FjaGVfYnVpbGRfaWRzKHNlc3Npb24pOworCQlpZiAoIW5vX2J1aWxkaWRfY2FjaGUpCisJCQlwZXJmX3Nlc3Npb25fX2NhY2hlX2J1aWxkX2lkcyhzZXNzaW9uKTsKIAl9CiAKIAlsc2VlayhmZCwgc2VjX3N0YXJ0LCBTRUVLX1NFVCk7CkBAIC0xMTkwLDMgKzExOTIsOCBAQAogCQkJCSBzZXNzaW9uKTsKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBkaXNhYmxlX2J1aWxkaWRfY2FjaGUodm9pZCkKK3sKKwlub19idWlsZGlkX2NhY2hlID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IDc4NGVlMGIuLmU3MjYzZDQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwpAQCAtNSwxMSArNSw2MSBAQAogI2luY2x1ZGUgInNvcnQuaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKK2VudW0gaGlzdF9maWx0ZXIgeworCUhJU1RfRklMVEVSX19EU08sCisJSElTVF9GSUxURVJfX1RIUkVBRCwKKwlISVNUX0ZJTFRFUl9fUEFSRU5ULAorfTsKKwogc3RydWN0IGNhbGxjaGFpbl9wYXJhbQljYWxsY2hhaW5fcGFyYW0gPSB7CiAJLm1vZGUJPSBDSEFJTl9HUkFQSF9SRUwsCiAJLm1pbl9wZXJjZW50ID0gMC41CiB9OwogCit1MTYgaGlzdHNfX2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBlbnVtIGhpc3RfY29sdW1uIGNvbCkKK3sKKwlyZXR1cm4gc2VsZi0+Y29sX2xlbltjb2xdOworfQorCit2b2lkIGhpc3RzX19zZXRfY29sX2xlbihzdHJ1Y3QgaGlzdHMgKnNlbGYsIGVudW0gaGlzdF9jb2x1bW4gY29sLCB1MTYgbGVuKQoreworCXNlbGYtPmNvbF9sZW5bY29sXSA9IGxlbjsKK30KKworYm9vbCBoaXN0c19fbmV3X2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBlbnVtIGhpc3RfY29sdW1uIGNvbCwgdTE2IGxlbikKK3sKKwlpZiAobGVuID4gaGlzdHNfX2NvbF9sZW4oc2VsZiwgY29sKSkgeworCQloaXN0c19fc2V0X2NvbF9sZW4oc2VsZiwgY29sLCBsZW4pOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBoaXN0c19fcmVzZXRfY29sX2xlbihzdHJ1Y3QgaGlzdHMgKnNlbGYpCit7CisJZW51bSBoaXN0X2NvbHVtbiBjb2w7CisKKwlmb3IgKGNvbCA9IDA7IGNvbCA8IEhJU1RDX05SX0NPTFM7ICsrY29sKQorCQloaXN0c19fc2V0X2NvbF9sZW4oc2VsZiwgY29sLCAwKTsKK30KKworc3RhdGljIHZvaWQgaGlzdHNfX2NhbGNfY29sX2xlbihzdHJ1Y3QgaGlzdHMgKnNlbGYsIHN0cnVjdCBoaXN0X2VudHJ5ICpoKQoreworCXUxNiBsZW47CisKKwlpZiAoaC0+bXMuc3ltKQorCQloaXN0c19fbmV3X2NvbF9sZW4oc2VsZiwgSElTVENfU1lNQk9MLCBoLT5tcy5zeW0tPm5hbWVsZW4pOworCisJbGVuID0gdGhyZWFkX19jb21tX2xlbihoLT50aHJlYWQpOworCWlmIChoaXN0c19fbmV3X2NvbF9sZW4oc2VsZiwgSElTVENfQ09NTSwgbGVuKSkKKwkJaGlzdHNfX3NldF9jb2xfbGVuKHNlbGYsIEhJU1RDX1RIUkVBRCwgbGVuICsgNik7CisKKwlpZiAoaC0+bXMubWFwKSB7CisJCWxlbiA9IGRzb19fbmFtZV9sZW4oaC0+bXMubWFwLT5kc28pOworCQloaXN0c19fbmV3X2NvbF9sZW4oc2VsZiwgSElTVENfRFNPLCBsZW4pOworCX0KK30KKwogc3RhdGljIHZvaWQgaGlzdF9lbnRyeV9fYWRkX2NwdW1vZGVfcGVyaW9kKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgY3B1bW9kZSwgdTY0IHBlcmlvZCkKIHsKQEAgLTQzLDYgKzkzLDggQEAKIAlpZiAoc2VsZiAhPSBOVUxMKSB7CiAJCSpzZWxmID0gKnRlbXBsYXRlOwogCQlzZWxmLT5ucl9ldmVudHMgPSAxOworCQlpZiAoc2VsZi0+bXMubWFwKQorCQkJc2VsZi0+bXMubWFwLT5yZWZlcmVuY2VkID0gdHJ1ZTsKIAkJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCiAJCQljYWxsY2hhaW5faW5pdChzZWxmLT5jYWxsY2hhaW4pOwogCX0KQEAgLTUwLDExICsxMDIsMTkgQEAKIAlyZXR1cm4gc2VsZjsKIH0KIAotc3RhdGljIHZvaWQgaGlzdHNfX2luY19ucl9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqc2VsZiwgc3RydWN0IGhpc3RfZW50cnkgKmVudHJ5KQorc3RhdGljIHZvaWQgaGlzdHNfX2luY19ucl9lbnRyaWVzKHN0cnVjdCBoaXN0cyAqc2VsZiwgc3RydWN0IGhpc3RfZW50cnkgKmgpCiB7Ci0JaWYgKGVudHJ5LT5tcy5zeW0gJiYgc2VsZi0+bWF4X3N5bV9uYW1lbGVuIDwgZW50cnktPm1zLnN5bS0+bmFtZWxlbikKLQkJc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gZW50cnktPm1zLnN5bS0+bmFtZWxlbjsKLQkrK3NlbGYtPm5yX2VudHJpZXM7CisJaWYgKCFoLT5maWx0ZXJlZCkgeworCQloaXN0c19fY2FsY19jb2xfbGVuKHNlbGYsIGgpOworCQkrK3NlbGYtPm5yX2VudHJpZXM7CisJfQorfQorCitzdGF0aWMgdTggc3ltYm9sX19wYXJlbnRfZmlsdGVyKGNvbnN0IHN0cnVjdCBzeW1ib2wgKnBhcmVudCkKK3sKKwlpZiAoc3ltYm9sX2NvbmYuZXhjbHVkZV9vdGhlciAmJiBwYXJlbnQgPT0gTlVMTCkKKwkJcmV0dXJuIDEgPDwgSElTVF9GSUxURVJfX1BBUkVOVDsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGhpc3RfZW50cnkgKl9faGlzdHNfX2FkZF9lbnRyeShzdHJ1Y3QgaGlzdHMgKnNlbGYsCkBAIC03MCwxMCArMTMwLDEyIEBACiAJCQkubWFwCT0gYWwtPm1hcCwKIAkJCS5zeW0JPSBhbC0+c3ltLAogCQl9LAorCQkuY3B1CT0gYWwtPmNwdSwKIAkJLmlwCT0gYWwtPmFkZHIsCiAJCS5sZXZlbAk9IGFsLT5sZXZlbCwKIAkJLnBlcmlvZAk9IHBlcmlvZCwKIAkJLnBhcmVudCA9IHN5bV9wYXJlbnQsCisJCS5maWx0ZXJlZCA9IHN5bWJvbF9fcGFyZW50X2ZpbHRlcihzeW1fcGFyZW50KSwKIAl9OwogCWludCBjbXA7CiAKQEAgLTE5MSw3ICsyNTMsNyBAQAogCXRtcCA9IFJCX1JPT1Q7CiAJbmV4dCA9IHJiX2ZpcnN0KCZzZWxmLT5lbnRyaWVzKTsKIAlzZWxmLT5ucl9lbnRyaWVzID0gMDsKLQlzZWxmLT5tYXhfc3ltX25hbWVsZW4gPSAwOworCWhpc3RzX19yZXNldF9jb2xfbGVuKHNlbGYpOwogCiAJd2hpbGUgKG5leHQpIHsKIAkJbiA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKQEAgLTI0OCw3ICszMTAsNyBAQAogCW5leHQgPSByYl9maXJzdCgmc2VsZi0+ZW50cmllcyk7CiAKIAlzZWxmLT5ucl9lbnRyaWVzID0gMDsKLQlzZWxmLT5tYXhfc3ltX25hbWVsZW4gPSAwOworCWhpc3RzX19yZXNldF9jb2xfbGVuKHNlbGYpOwogCiAJd2hpbGUgKG5leHQpIHsKIAkJbiA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKQEAgLTUxNSw4ICs1NzcsOSBAQAogfQogCiBpbnQgaGlzdF9lbnRyeV9fc25wcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIGNoYXIgKnMsIHNpemVfdCBzaXplLAotCQkJIHN0cnVjdCBoaXN0cyAqcGFpcl9oaXN0cywgYm9vbCBzaG93X2Rpc3BsYWNlbWVudCwKLQkJCSBsb25nIGRpc3BsYWNlbWVudCwgYm9vbCBjb2xvciwgdTY0IHNlc3Npb25fdG90YWwpCisJCQkgc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IGhpc3RzICpwYWlyX2hpc3RzLAorCQkJIGJvb2wgc2hvd19kaXNwbGFjZW1lbnQsIGxvbmcgZGlzcGxhY2VtZW50LAorCQkJIGJvb2wgY29sb3IsIHU2NCBzZXNzaW9uX3RvdGFsKQogewogCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKIAl1NjQgcGVyaW9kLCB0b3RhbCwgcGVyaW9kX3N5cywgcGVyaW9kX3VzLCBwZXJpb2RfZ3Vlc3Rfc3lzLCBwZXJpb2RfZ3Vlc3RfdXM7CkBAIC02MjAsMjkgKzY4MywyNSBAQAogCiAJCXJldCArPSBzbnByaW50ZihzICsgcmV0LCBzaXplIC0gcmV0LCAiJXMiLCBzZXAgPzogIiAgIik7CiAJCXJldCArPSBzZS0+c2Vfc25wcmludGYoc2VsZiwgcyArIHJldCwgc2l6ZSAtIHJldCwKLQkJCQkgICAgICAgc2UtPnNlX3dpZHRoID8gKnNlLT5zZV93aWR0aCA6IDApOworCQkJCSAgICAgICBoaXN0c19fY29sX2xlbihoaXN0cywgc2UtPnNlX3dpZHRoX2lkeCkpOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLWludCBoaXN0X2VudHJ5X19mcHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsCi0JCQlib29sIHNob3dfZGlzcGxhY2VtZW50LCBsb25nIGRpc3BsYWNlbWVudCwgRklMRSAqZnAsCi0JCQl1NjQgc2Vzc2lvbl90b3RhbCkKK2ludCBoaXN0X2VudHJ5X19mcHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBzdHJ1Y3QgaGlzdHMgKmhpc3RzLAorCQkJc3RydWN0IGhpc3RzICpwYWlyX2hpc3RzLCBib29sIHNob3dfZGlzcGxhY2VtZW50LAorCQkJbG9uZyBkaXNwbGFjZW1lbnQsIEZJTEUgKmZwLCB1NjQgc2Vzc2lvbl90b3RhbCkKIHsKIAljaGFyIGJmWzUxMl07Ci0JaW50IHJldDsKLQotCXJldCA9IGhpc3RfZW50cnlfX3NucHJpbnRmKHNlbGYsIGJmLCBzaXplb2YoYmYpLCBwYWlyX2hpc3RzLAotCQkJCSAgIHNob3dfZGlzcGxhY2VtZW50LCBkaXNwbGFjZW1lbnQsCi0JCQkJICAgdHJ1ZSwgc2Vzc2lvbl90b3RhbCk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAwOwotCisJaGlzdF9lbnRyeV9fc25wcmludGYoc2VsZiwgYmYsIHNpemVvZihiZiksIGhpc3RzLCBwYWlyX2hpc3RzLAorCQkJICAgICBzaG93X2Rpc3BsYWNlbWVudCwgZGlzcGxhY2VtZW50LAorCQkJICAgICB0cnVlLCBzZXNzaW9uX3RvdGFsKTsKIAlyZXR1cm4gZnByaW50ZihmcCwgIiVzXG4iLCBiZik7CiB9CiAKLXN0YXRpYyBzaXplX3QgaGlzdF9lbnRyeV9fZnByaW50Zl9jYWxsY2hhaW4oc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIEZJTEUgKmZwLAorc3RhdGljIHNpemVfdCBoaXN0X2VudHJ5X19mcHJpbnRmX2NhbGxjaGFpbihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwKKwkJCQkJICAgIHN0cnVjdCBoaXN0cyAqaGlzdHMsIEZJTEUgKmZwLAogCQkJCQkgICAgdTY0IHNlc3Npb25fdG90YWwpCiB7CiAJaW50IGxlZnRfbWFyZ2luID0gMDsKQEAgLTY1MCw3ICs3MDksNyBAQAogCWlmIChzb3J0X19maXJzdF9kaW1lbnNpb24gPT0gU09SVF9DT01NKSB7CiAJCXN0cnVjdCBzb3J0X2VudHJ5ICpzZSA9IGxpc3RfZmlyc3RfZW50cnkoJmhpc3RfZW50cnlfX3NvcnRfbGlzdCwKIAkJCQkJCQkgdHlwZW9mKCpzZSksIGxpc3QpOwotCQlsZWZ0X21hcmdpbiA9IHNlLT5zZV93aWR0aCA/ICpzZS0+c2Vfd2lkdGggOiAwOworCQlsZWZ0X21hcmdpbiA9IGhpc3RzX19jb2xfbGVuKGhpc3RzLCBzZS0+c2Vfd2lkdGhfaWR4KTsKIAkJbGVmdF9tYXJnaW4gLT0gdGhyZWFkX19jb21tX2xlbihzZWxmLT50aHJlYWQpOwogCX0KIApAQCAtNzIxLDE3ICs3ODAsMTcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXdpZHRoID0gc3RybGVuKHNlLT5zZV9oZWFkZXIpOwotCQlpZiAoc2UtPnNlX3dpZHRoKSB7Ci0JCQlpZiAoc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyKSB7Ci0JCQkJaWYgKGNvbF93aWR0aCkgewotCQkJCQkqc2UtPnNlX3dpZHRoID0gYXRvaShjb2xfd2lkdGgpOwotCQkJCQljb2xfd2lkdGggPSBzdHJjaHIoY29sX3dpZHRoLCAnLCcpOwotCQkJCQlpZiAoY29sX3dpZHRoKQotCQkJCQkJKytjb2xfd2lkdGg7Ci0JCQkJfQorCQlpZiAoc3ltYm9sX2NvbmYuY29sX3dpZHRoX2xpc3Rfc3RyKSB7CisJCQlpZiAoY29sX3dpZHRoKSB7CisJCQkJaGlzdHNfX3NldF9jb2xfbGVuKHNlbGYsIHNlLT5zZV93aWR0aF9pZHgsCisJCQkJCQkgICBhdG9pKGNvbF93aWR0aCkpOworCQkJCWNvbF93aWR0aCA9IHN0cmNocihjb2xfd2lkdGgsICcsJyk7CisJCQkJaWYgKGNvbF93aWR0aCkKKwkJCQkJKytjb2xfd2lkdGg7CiAJCQl9Ci0JCQl3aWR0aCA9ICpzZS0+c2Vfd2lkdGggPSBtYXgoKnNlLT5zZV93aWR0aCwgd2lkdGgpOwogCQl9CisJCWlmICghaGlzdHNfX25ld19jb2xfbGVuKHNlbGYsIHNlLT5zZV93aWR0aF9pZHgsIHdpZHRoKSkKKwkJCXdpZHRoID0gaGlzdHNfX2NvbF9sZW4oc2VsZiwgc2UtPnNlX3dpZHRoX2lkeCk7CiAJCWZwcmludGYoZnAsICIgICUqcyIsIHdpZHRoLCBzZS0+c2VfaGVhZGVyKTsKIAl9CiAJZnByaW50ZihmcCwgIlxuIik7CkBAIC03NTQsOSArODEzLDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWZwcmludGYoZnAsICIgICIpOwotCQlpZiAoc2UtPnNlX3dpZHRoKQotCQkJd2lkdGggPSAqc2UtPnNlX3dpZHRoOwotCQllbHNlCisJCXdpZHRoID0gaGlzdHNfX2NvbF9sZW4oc2VsZiwgc2UtPnNlX3dpZHRoX2lkeCk7CisJCWlmICh3aWR0aCA9PSAwKQogCQkJd2lkdGggPSBzdHJsZW4oc2UtPnNlX2hlYWRlcik7CiAJCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQogCQkJZnByaW50ZihmcCwgIi4iKTsKQEAgLTc2Nyw3ICs4MjUsNiBAQAogcHJpbnRfZW50cmllczoKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPmVudHJpZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7Ci0JCWludCBjbnQ7CiAKIAkJaWYgKHNob3dfZGlzcGxhY2VtZW50KSB7CiAJCQlpZiAoaC0+cGFpciAhPSBOVUxMKQpAQCAtNzc3LDE3ICs4MzQsMTIgQEAKIAkJCQlkaXNwbGFjZW1lbnQgPSAwOwogCQkJKytwb3NpdGlvbjsKIAkJfQotCQljbnQgPSBoaXN0X2VudHJ5X19mcHJpbnRmKGgsIHBhaXIsIHNob3dfZGlzcGxhY2VtZW50LAotCQkJCQkgIGRpc3BsYWNlbWVudCwgZnAsIHNlbGYtPnN0YXRzLnRvdGFsX3BlcmlvZCk7Ci0JCS8qIElnbm9yZSB0aG9zZSB0aGF0IGRpZG4ndCBtYXRjaCB0aGUgcGFyZW50IGZpbHRlciAqLwotCQlpZiAoIWNudCkKLQkJCWNvbnRpbnVlOwotCi0JCXJldCArPSBjbnQ7CisJCXJldCArPSBoaXN0X2VudHJ5X19mcHJpbnRmKGgsIHNlbGYsIHBhaXIsIHNob3dfZGlzcGxhY2VtZW50LAorCQkJCQkgICBkaXNwbGFjZW1lbnQsIGZwLCBzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QpOwogCiAJCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQotCQkJcmV0ICs9IGhpc3RfZW50cnlfX2ZwcmludGZfY2FsbGNoYWluKGgsIGZwLCBzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QpOwotCisJCQlyZXQgKz0gaGlzdF9lbnRyeV9fZnByaW50Zl9jYWxsY2hhaW4oaCwgc2VsZiwgZnAsCisJCQkJCQkJICAgICBzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QpOwogCQlpZiAoaC0+bXMubWFwID09IE5VTEwgJiYgdmVyYm9zZSA+IDEpIHsKIAkJCV9fbWFwX2dyb3Vwc19fZnByaW50Zl9tYXBzKCZoLT50aHJlYWQtPm1nLAogCQkJCQkJICAgTUFQX19GVU5DVElPTiwgdmVyYm9zZSwgZnApOwpAQCAtODAwLDEwICs4NTIsNDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1lbnVtIGhpc3RfZmlsdGVyIHsKLQlISVNUX0ZJTFRFUl9fRFNPLAotCUhJU1RfRklMVEVSX19USFJFQUQsCi19OworLyoKKyAqIFNlZSBoaXN0c19fZnByaW50ZiB0byBtYXRjaCB0aGUgY29sdW1uIHdpZHRocworICovCit1bnNpZ25lZCBpbnQgaGlzdHNfX3NvcnRfbGlzdF93aWR0aChzdHJ1Y3QgaGlzdHMgKnNlbGYpCit7CisJc3RydWN0IHNvcnRfZW50cnkgKnNlOworCWludCByZXQgPSA5OyAvKiB0b3RhbCAlICovCisKKwlpZiAoc3ltYm9sX2NvbmYuc2hvd19jcHVfdXRpbGl6YXRpb24pIHsKKwkJcmV0ICs9IDc7IC8qIGNvdW50X3N5cyAlICovCisJCXJldCArPSA2OyAvKiBjb3VudF91cyAlICovCisJCWlmIChwZXJmX2d1ZXN0KSB7CisJCQlyZXQgKz0gMTM7IC8qIGNvdW50X2d1ZXN0X3N5cyAlICovCisJCQlyZXQgKz0gMTI7IC8qIGNvdW50X2d1ZXN0X3VzICUgKi8KKwkJfQorCX0KKworCWlmIChzeW1ib2xfY29uZi5zaG93X25yX3NhbXBsZXMpCisJCXJldCArPSAxMTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2UsICZoaXN0X2VudHJ5X19zb3J0X2xpc3QsIGxpc3QpCisJCWlmICghc2UtPmVsaWRlKQorCQkJcmV0ICs9IDIgKyBoaXN0c19fY29sX2xlbihzZWxmLCBzZS0+c2Vfd2lkdGhfaWR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhpc3RzX19yZW1vdmVfZW50cnlfZmlsdGVyKHN0cnVjdCBoaXN0cyAqc2VsZiwgc3RydWN0IGhpc3RfZW50cnkgKmgsCisJCQkJICAgICAgIGVudW0gaGlzdF9maWx0ZXIgZmlsdGVyKQoreworCWgtPmZpbHRlcmVkICY9IH4oMSA8PCBmaWx0ZXIpOworCWlmIChoLT5maWx0ZXJlZCkKKwkJcmV0dXJuOworCisJKytzZWxmLT5ucl9lbnRyaWVzOworCWlmIChoLT5tcy51bmZvbGRlZCkKKwkJc2VsZi0+bnJfZW50cmllcyArPSBoLT5ucl9yb3dzOworCWgtPnJvd19vZmZzZXQgPSAwOworCXNlbGYtPnN0YXRzLnRvdGFsX3BlcmlvZCArPSBoLT5wZXJpb2Q7CisJc2VsZi0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gKz0gaC0+bnJfZXZlbnRzOworCisJaGlzdHNfX2NhbGNfY29sX2xlbihzZWxmLCBoKTsKK30KIAogdm9pZCBoaXN0c19fZmlsdGVyX2J5X2RzbyhzdHJ1Y3QgaGlzdHMgKnNlbGYsIGNvbnN0IHN0cnVjdCBkc28gKmRzbykKIHsKQEAgLTgxMSw3ICs5MDIsNyBAQAogCiAJc2VsZi0+bnJfZW50cmllcyA9IHNlbGYtPnN0YXRzLnRvdGFsX3BlcmlvZCA9IDA7CiAJc2VsZi0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gPSAwOwotCXNlbGYtPm1heF9zeW1fbmFtZWxlbiA9IDA7CisJaGlzdHNfX3Jlc2V0X2NvbF9sZW4oc2VsZik7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPmVudHJpZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CkBAIC04MjQsMTUgKzkxNSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWgtPmZpbHRlcmVkICY9IH4oMSA8PCBISVNUX0ZJTFRFUl9fRFNPKTsKLQkJaWYgKCFoLT5maWx0ZXJlZCkgewotCQkJKytzZWxmLT5ucl9lbnRyaWVzOwotCQkJc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kICs9IGgtPnBlcmlvZDsKLQkJCXNlbGYtPnN0YXRzLm5yX2V2ZW50c1tQRVJGX1JFQ09SRF9TQU1QTEVdICs9IGgtPm5yX2V2ZW50czsKLQkJCWlmIChoLT5tcy5zeW0gJiYKLQkJCSAgICBzZWxmLT5tYXhfc3ltX25hbWVsZW4gPCBoLT5tcy5zeW0tPm5hbWVsZW4pCi0JCQkJc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gaC0+bXMuc3ltLT5uYW1lbGVuOwotCQl9CisJCWhpc3RzX19yZW1vdmVfZW50cnlfZmlsdGVyKHNlbGYsIGgsIEhJU1RfRklMVEVSX19EU08pOwogCX0KIH0KIApAQCAtODQyLDcgKzkyNSw3IEBACiAKIAlzZWxmLT5ucl9lbnRyaWVzID0gc2VsZi0+c3RhdHMudG90YWxfcGVyaW9kID0gMDsKIAlzZWxmLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXSA9IDA7Ci0Jc2VsZi0+bWF4X3N5bV9uYW1lbGVuID0gMDsKKwloaXN0c19fcmVzZXRfY29sX2xlbihzZWxmKTsKIAogCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+ZW50cmllcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKQEAgLTg1MSwxNSArOTM0LDggQEAKIAkJCWgtPmZpbHRlcmVkIHw9ICgxIDw8IEhJU1RfRklMVEVSX19USFJFQUQpOwogCQkJY29udGludWU7CiAJCX0KLQkJaC0+ZmlsdGVyZWQgJj0gfigxIDw8IEhJU1RfRklMVEVSX19USFJFQUQpOwotCQlpZiAoIWgtPmZpbHRlcmVkKSB7Ci0JCQkrK3NlbGYtPm5yX2VudHJpZXM7Ci0JCQlzZWxmLT5zdGF0cy50b3RhbF9wZXJpb2QgKz0gaC0+cGVyaW9kOwotCQkJc2VsZi0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV0gKz0gaC0+bnJfZXZlbnRzOwotCQkJaWYgKGgtPm1zLnN5bSAmJgotCQkJICAgIHNlbGYtPm1heF9zeW1fbmFtZWxlbiA8IGgtPm1zLnN5bS0+bmFtZWxlbikKLQkJCQlzZWxmLT5tYXhfc3ltX25hbWVsZW4gPSBoLT5tcy5zeW0tPm5hbWVsZW47Ci0JCX0KKworCQloaXN0c19fcmVtb3ZlX2VudHJ5X2ZpbHRlcihzZWxmLCBoLCBISVNUX0ZJTFRFUl9fVEhSRUFEKTsKIAl9CiB9CiAKQEAgLTEwNTIsNyArMTEyOCw3IEBACiAJCSBkc28sIGRzby0+bG9uZ19uYW1lLCBzeW0sIHN5bS0+bmFtZSk7CiAKIAlzbnByaW50Zihjb21tYW5kLCBzaXplb2YoY29tbWFuZCksCi0JCSAib2JqZHVtcCAtLXN0YXJ0LWFkZHJlc3M9MHglMDE2THggLS1zdG9wLWFkZHJlc3M9MHglMDE2THggLWRTICVzfGdyZXAgLXYgJXN8ZXhwYW5kIiwKKwkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQkgZmlsZW5hbWUsIGZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmggYi90b29scy9wZXJmL3V0aWwvaGlzdC5oCmluZGV4IDgzZmEzM2EuLjY1YTQ4ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaApAQCAtNTYsNiArNTYsMTYgQEAKIAl1MzIgbnJfdW5rbm93bl9ldmVudHM7CiB9OwogCitlbnVtIGhpc3RfY29sdW1uIHsKKwlISVNUQ19TWU1CT0wsCisJSElTVENfRFNPLAorCUhJU1RDX1RIUkVBRCwKKwlISVNUQ19DT01NLAorCUhJU1RDX1BBUkVOVCwKKwlISVNUQ19DUFUsCisJSElTVENfTlJfQ09MUywgLyogTGFzdCBlbnRyeSAqLworfTsKKwogc3RydWN0IGhpc3RzIHsKIAlzdHJ1Y3QgcmJfbm9kZQkJcmJfbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdAkJZW50cmllczsKQEAgLTY0LDcgKzc0LDcgQEAKIAl1NjQJCQljb25maWc7CiAJdTY0CQkJZXZlbnRfc3RyZWFtOwogCXUzMgkJCXR5cGU7Ci0JdTMyCQkJbWF4X3N5bV9uYW1lbGVuOworCXUxNgkJCWNvbF9sZW5bSElTVENfTlJfQ09MU107CiB9OwogCiBzdHJ1Y3QgaGlzdF9lbnRyeSAqX19oaXN0c19fYWRkX2VudHJ5KHN0cnVjdCBoaXN0cyAqc2VsZiwKQEAgLTcyLDEyICs4MiwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBzeW1ib2wgKnBhcmVudCwgdTY0IHBlcmlvZCk7CiBleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiBleHRlcm4gaW50NjRfdCBoaXN0X2VudHJ5X19jb2xsYXBzZShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKLWludCBoaXN0X2VudHJ5X19mcHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsCi0JCQlib29sIHNob3dfZGlzcGxhY2VtZW50LCBsb25nIGRpc3BsYWNlbWVudCwgRklMRSAqZnAsCi0JCQl1NjQgdG90YWwpOworaW50IGhpc3RfZW50cnlfX2ZwcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIHN0cnVjdCBoaXN0cyAqaGlzdHMsCisJCQlzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsIGJvb2wgc2hvd19kaXNwbGFjZW1lbnQsCisJCQlsb25nIGRpc3BsYWNlbWVudCwgRklMRSAqZnAsIHU2NCB0b3RhbCk7CiBpbnQgaGlzdF9lbnRyeV9fc25wcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIGNoYXIgKmJmLCBzaXplX3Qgc2l6ZSwKLQkJCSBzdHJ1Y3QgaGlzdHMgKnBhaXJfaGlzdHMsIGJvb2wgc2hvd19kaXNwbGFjZW1lbnQsCi0JCQkgbG9uZyBkaXNwbGFjZW1lbnQsIGJvb2wgY29sb3IsIHU2NCB0b3RhbCk7CisJCQkgc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IGhpc3RzICpwYWlyX2hpc3RzLAorCQkJIGJvb2wgc2hvd19kaXNwbGFjZW1lbnQsIGxvbmcgZGlzcGxhY2VtZW50LAorCQkJIGJvb2wgY29sb3IsIHU2NCB0b3RhbCk7CiB2b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKik7CiAKIHZvaWQgaGlzdHNfX291dHB1dF9yZXNvcnQoc3RydWN0IGhpc3RzICpzZWxmKTsKQEAgLTk1LDYgKzEwNiwxMCBAQAogdm9pZCBoaXN0c19fZmlsdGVyX2J5X2RzbyhzdHJ1Y3QgaGlzdHMgKnNlbGYsIGNvbnN0IHN0cnVjdCBkc28gKmRzbyk7CiB2b2lkIGhpc3RzX19maWx0ZXJfYnlfdGhyZWFkKHN0cnVjdCBoaXN0cyAqc2VsZiwgY29uc3Qgc3RydWN0IHRocmVhZCAqdGhyZWFkKTsKIAordTE2IGhpc3RzX19jb2xfbGVuKHN0cnVjdCBoaXN0cyAqc2VsZiwgZW51bSBoaXN0X2NvbHVtbiBjb2wpOwordm9pZCBoaXN0c19fc2V0X2NvbF9sZW4oc3RydWN0IGhpc3RzICpzZWxmLCBlbnVtIGhpc3RfY29sdW1uIGNvbCwgdTE2IGxlbik7Citib29sIGhpc3RzX19uZXdfY29sX2xlbihzdHJ1Y3QgaGlzdHMgKnNlbGYsIGVudW0gaGlzdF9jb2x1bW4gY29sLCB1MTYgbGVuKTsKKwogI2lmZGVmIE5PX05FV1RfU1VQUE9SVAogc3RhdGljIGlubGluZSBpbnQgaGlzdHNfX2Jyb3dzZShzdHJ1Y3QgaGlzdHMgKnNlbGYgX191c2VkLAogCQkJCWNvbnN0IGNoYXIgKmhlbHBsaW5lIF9fdXNlZCwKQEAgLTEyNiw0ICsxNDEsNyBAQAogCiBpbnQgaGlzdHNfX3R1aV9icm93c2VfdHJlZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgY29uc3QgY2hhciAqaGVscCk7CiAjZW5kaWYKKwordW5zaWduZWQgaW50IGhpc3RzX19zb3J0X2xpc3Rfd2lkdGgoc3RydWN0IGhpc3RzICpzZWxmKTsKKwogI2VuZGlmCS8qIF9fUEVSRl9ISVNUX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYwppbmRleCBlNjcyZjJmLi4zYTdlYjZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCkBAIC0xNywxNiArMTcsNiBAQAogCXJldHVybiBzdHJjbXAoZmlsZW5hbWUsICIvL2Fub24iKSA9PSAwOwogfQogCi1zdGF0aWMgaW50IHN0cmNvbW1vbihjb25zdCBjaGFyICpwYXRobmFtZSwgY2hhciAqY3dkLCBpbnQgY3dkbGVuKQotewotCWludCBuID0gMDsKLQotCXdoaWxlIChuIDwgY3dkbGVuICYmIHBhdGhuYW1lW25dID09IGN3ZFtuXSkKLQkJKytuOwotCi0JcmV0dXJuIG47Ci19Ci0KIHZvaWQgbWFwX19pbml0KHN0cnVjdCBtYXAgKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkgICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgcGdvZmYsIHN0cnVjdCBkc28gKmRzbykKIHsKQEAgLTM5LDExICsyOSwxMiBAQAogCXNlbGYtPnVubWFwX2lwID0gbWFwX191bm1hcF9pcDsKIAlSQl9DTEVBUl9OT0RFKCZzZWxmLT5yYl9ub2RlKTsKIAlzZWxmLT5ncm91cHMgICA9IE5VTEw7CisJc2VsZi0+cmVmZXJlbmNlZCA9IGZhbHNlOwogfQogCiBzdHJ1Y3QgbWFwICptYXBfX25ldyhzdHJ1Y3QgbGlzdF9oZWFkICpkc29zX19saXN0LCB1NjQgc3RhcnQsIHU2NCBsZW4sCiAJCSAgICAgdTY0IHBnb2ZmLCB1MzIgcGlkLCBjaGFyICpmaWxlbmFtZSwKLQkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUsIGNoYXIgKmN3ZCwgaW50IGN3ZGxlbikKKwkJICAgICBlbnVtIG1hcF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IG1hcCAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsKIApAQCAtNTIsMTYgKzQzLDYgQEAKIAkJc3RydWN0IGRzbyAqZHNvOwogCQlpbnQgYW5vbjsKIAotCQlpZiAoY3dkKSB7Ci0JCQlpbnQgbiA9IHN0cmNvbW1vbihmaWxlbmFtZSwgY3dkLCBjd2RsZW4pOwotCi0JCQlpZiAobiA9PSBjd2RsZW4pIHsKLQkJCQlzbnByaW50ZihuZXdmaWxlbmFtZSwgc2l6ZW9mKG5ld2ZpbGVuYW1lKSwKLQkJCQkJICIuJXMiLCBmaWxlbmFtZSArIG4pOwotCQkJCWZpbGVuYW1lID0gbmV3ZmlsZW5hbWU7Ci0JCQl9Ci0JCX0KLQogCQlhbm9uID0gaXNfYW5vbl9tZW1vcnkoZmlsZW5hbWUpOwogCiAJCWlmIChhbm9uKSB7CkBAIC0yNDgsNiArMjI5LDM5IEBACiAJc2VsZi0+bWFjaGluZSA9IE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIG1hcHNfX2RlbGV0ZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHNlbGYpOworCisJd2hpbGUgKG5leHQpIHsKKwkJc3RydWN0IG1hcCAqcG9zID0gcmJfZW50cnkobmV4dCwgc3RydWN0IG1hcCwgcmJfbm9kZSk7CisKKwkJbmV4dCA9IHJiX25leHQoJnBvcy0+cmJfbm9kZSk7CisJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIHNlbGYpOworCQltYXBfX2RlbGV0ZShwb3MpOworCX0KK30KKworc3RhdGljIHZvaWQgbWFwc19fZGVsZXRlX3JlbW92ZWQoc3RydWN0IGxpc3RfaGVhZCAqc2VsZikKK3sKKwlzdHJ1Y3QgbWFwICpwb3MsICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgc2VsZiwgbm9kZSkgeworCQlsaXN0X2RlbCgmcG9zLT5ub2RlKTsKKwkJbWFwX19kZWxldGUocG9zKTsKKwl9Cit9CisKK3ZvaWQgbWFwX2dyb3Vwc19fZXhpdChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpIHsKKwkJbWFwc19fZGVsZXRlKCZzZWxmLT5tYXBzW2ldKTsKKwkJbWFwc19fZGVsZXRlX3JlbW92ZWQoJnNlbGYtPnJlbW92ZWRfbWFwc1tpXSk7CisJfQorfQorCiB2b2lkIG1hcF9ncm91cHNfX2ZsdXNoKHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKQogewogCWludCB0eXBlOwpAQCAtMzc0LDYgKzM4OCw3IEBACiB7CiAJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmc2VsZi0+bWFwc1ttYXAtPnR5cGVdOwogCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qocm9vdCk7CisJaW50IGVyciA9IDA7CiAKIAl3aGlsZSAobmV4dCkgewogCQlzdHJ1Y3QgbWFwICpwb3MgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKQEAgLTM5MCwyMCArNDA1LDE2IEBACiAKIAkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgcm9vdCk7CiAJCS8qCi0JCSAqIFdlIG1heSBoYXZlIHJlZmVyZW5jZXMgdG8gdGhpcyBtYXAsIGZvciBpbnN0YW5jZSBpbiBzb21lCi0JCSAqIGhpc3RfZW50cnkgaW5zdGFuY2VzLCBzbyBqdXN0IG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlCi0JCSAqIGxpc3QuCi0JCSAqLwotCQlsaXN0X2FkZF90YWlsKCZwb3MtPm5vZGUsICZzZWxmLT5yZW1vdmVkX21hcHNbbWFwLT50eXBlXSk7Ci0JCS8qCiAJCSAqIE5vdyBjaGVjayBpZiB3ZSBuZWVkIHRvIGNyZWF0ZSBuZXcgbWFwcyBmb3IgYXJlYXMgbm90CiAJCSAqIG92ZXJsYXBwZWQgYnkgdGhlIG5ldyBtYXA6CiAJCSAqLwogCQlpZiAobWFwLT5zdGFydCA+IHBvcy0+c3RhcnQpIHsKIAkJCXN0cnVjdCBtYXAgKmJlZm9yZSA9IG1hcF9fY2xvbmUocG9zKTsKIAotCQkJaWYgKGJlZm9yZSA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWYgKGJlZm9yZSA9PSBOVUxMKSB7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIG1vdmVfbWFwOworCQkJfQogCiAJCQliZWZvcmUtPmVuZCA9IG1hcC0+c3RhcnQgLSAxOwogCQkJbWFwX2dyb3Vwc19faW5zZXJ0KHNlbGYsIGJlZm9yZSk7CkBAIC00MTQsMTQgKzQyNSwyNyBAQAogCQlpZiAobWFwLT5lbmQgPCBwb3MtPmVuZCkgewogCQkJc3RydWN0IG1hcCAqYWZ0ZXIgPSBtYXBfX2Nsb25lKHBvcyk7CiAKLQkJCWlmIChhZnRlciA9PSBOVUxMKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWYgKGFmdGVyID09IE5VTEwpIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gbW92ZV9tYXA7CisJCQl9CiAKIAkJCWFmdGVyLT5zdGFydCA9IG1hcC0+ZW5kICsgMTsKIAkJCW1hcF9ncm91cHNfX2luc2VydChzZWxmLCBhZnRlcik7CiAJCQlpZiAodmVyYm9zZSA+PSAyKQogCQkJCW1hcF9fZnByaW50ZihhZnRlciwgZnApOwogCQl9Cittb3ZlX21hcDoKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSByZWZlcmVuY2VzLCBqdXN0IG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGxpc3QuCisJCSAqLworCQlpZiAocG9zLT5yZWZlcmVuY2VkKQorCQkJbGlzdF9hZGRfdGFpbCgmcG9zLT5ub2RlLCAmc2VsZi0+cmVtb3ZlZF9tYXBzW21hcC0+dHlwZV0pOworCQllbHNlCisJCQltYXBfX2RlbGV0ZShwb3MpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDkzLDYgKzUxNywxMSBAQAogCXJiX2luc2VydF9jb2xvcigmbWFwLT5yYl9ub2RlLCBtYXBzKTsKIH0KIAordm9pZCBtYXBzX19yZW1vdmUoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCkKK3sKKwlyYl9lcmFzZSgmbWFwLT5yYl9ub2RlLCBzZWxmKTsKK30KKwogc3RydWN0IG1hcCAqbWFwc19fZmluZChzdHJ1Y3QgcmJfcm9vdCAqbWFwcywgdTY0IGlwKQogewogCXN0cnVjdCByYl9ub2RlICoqcCA9ICZtYXBzLT5yYl9ub2RlOwpAQCAtNTI2LDYgKzU1NSwzMSBAQAogCXJldHVybiBzZWxmLT5yb290X2RpciA9PSBOVUxMID8gLUVOT01FTSA6IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRzb3NfX2RlbGV0ZShzdHJ1Y3QgbGlzdF9oZWFkICpzZWxmKQoreworCXN0cnVjdCBkc28gKnBvcywgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBzZWxmLCBub2RlKSB7CisJCWxpc3RfZGVsKCZwb3MtPm5vZGUpOworCQlkc29fX2RlbGV0ZShwb3MpOworCX0KK30KKwordm9pZCBtYWNoaW5lX19leGl0KHN0cnVjdCBtYWNoaW5lICpzZWxmKQoreworCW1hcF9ncm91cHNfX2V4aXQoJnNlbGYtPmttYXBzKTsKKwlkc29zX19kZWxldGUoJnNlbGYtPnVzZXJfZHNvcyk7CisJZHNvc19fZGVsZXRlKCZzZWxmLT5rZXJuZWxfZHNvcyk7CisJZnJlZShzZWxmLT5yb290X2Rpcik7CisJc2VsZi0+cm9vdF9kaXIgPSBOVUxMOworfQorCit2b2lkIG1hY2hpbmVfX2RlbGV0ZShzdHJ1Y3QgbWFjaGluZSAqc2VsZikKK3sKKwltYWNoaW5lX19leGl0KHNlbGYpOworCWZyZWUoc2VsZik7Cit9CisKIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lc19fYWRkKHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQsCiAJCQkgICAgICBjb25zdCBjaGFyICpyb290X2RpcikKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaCBiL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAppbmRleCBmMzkxMzQ1Li43ODU3NTc5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbWFwLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCkBAIC0yOSw3ICsyOSw4IEBACiAJfTsKIAl1NjQJCQlzdGFydDsKIAl1NjQJCQllbmQ7Ci0JZW51bSBtYXBfdHlwZQkJdHlwZTsKKwl1OCAvKiBlbnVtIG1hcF90eXBlICovCXR5cGU7CisJYm9vbAkJCXJlZmVyZW5jZWQ7CiAJdTMyCQkJcHJpdjsKIAl1NjQJCQlwZ29mZjsKIApAQCAtMTA2LDcgKzEwNyw3IEBACiAJICAgICAgIHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHBnb2ZmLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RydWN0IG1hcCAqbWFwX19uZXcoc3RydWN0IGxpc3RfaGVhZCAqZHNvc19fbGlzdCwgdTY0IHN0YXJ0LCB1NjQgbGVuLAogCQkgICAgIHU2NCBwZ29mZiwgdTMyIHBpZCwgY2hhciAqZmlsZW5hbWUsCi0JCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjaGFyICpjd2QsIGludCBjd2RsZW4pOworCQkgICAgIGVudW0gbWFwX3R5cGUgdHlwZSk7CiB2b2lkIG1hcF9fZGVsZXRlKHN0cnVjdCBtYXAgKnNlbGYpOwogc3RydWN0IG1hcCAqbWFwX19jbG9uZShzdHJ1Y3QgbWFwICpzZWxmKTsKIGludCBtYXBfX292ZXJsYXAoc3RydWN0IG1hcCAqbCwgc3RydWN0IG1hcCAqcik7CkBAIC0xMjUsOCArMTI2LDEwIEBACiBzaXplX3QgX19tYXBfZ3JvdXBzX19mcHJpbnRmX21hcHMoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCQkJICBlbnVtIG1hcF90eXBlIHR5cGUsIGludCB2ZXJib3NlLCBGSUxFICpmcCk7CiB2b2lkIG1hcHNfX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqbWFwcywgc3RydWN0IG1hcCAqbWFwKTsKK3ZvaWQgbWFwc19fcmVtb3ZlKHN0cnVjdCByYl9yb290ICpzZWxmLCBzdHJ1Y3QgbWFwICptYXApOwogc3RydWN0IG1hcCAqbWFwc19fZmluZChzdHJ1Y3QgcmJfcm9vdCAqbWFwcywgdTY0IGFkZHIpOwogdm9pZCBtYXBfZ3JvdXBzX19pbml0KHN0cnVjdCBtYXBfZ3JvdXBzICpzZWxmKTsKK3ZvaWQgbWFwX2dyb3Vwc19fZXhpdChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZik7CiBpbnQgbWFwX2dyb3Vwc19fY2xvbmUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCSAgICAgIHN0cnVjdCBtYXBfZ3JvdXBzICpwYXJlbnQsIGVudW0gbWFwX3R5cGUgdHlwZSk7CiBzaXplX3QgbWFwX2dyb3Vwc19fZnByaW50ZihzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgaW50IHZlcmJvc2UsIEZJTEUgKmZwKTsKQEAgLTE0Miw2ICsxNDUsOCBAQAogc3RydWN0IG1hY2hpbmUgKm1hY2hpbmVzX19maW5kbmV3KHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQpOwogY2hhciAqbWFjaGluZV9fbW1hcF9uYW1lKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBjaGFyICpiZiwgc2l6ZV90IHNpemUpOwogaW50IG1hY2hpbmVfX2luaXQoc3RydWN0IG1hY2hpbmUgKnNlbGYsIGNvbnN0IGNoYXIgKnJvb3RfZGlyLCBwaWRfdCBwaWQpOwordm9pZCBtYWNoaW5lX19leGl0KHN0cnVjdCBtYWNoaW5lICpzZWxmKTsKK3ZvaWQgbWFjaGluZV9fZGVsZXRlKHN0cnVjdCBtYWNoaW5lICpzZWxmKTsKIAogLyoKICAqIERlZmF1bHQgZ3Vlc3Qga2VybmVsIGlzIGRlZmluZWQgYnkgcGFyYW1ldGVyIC0tZ3Vlc3RrYWxsc3ltcwpAQCAtMTYzLDYgKzE2OCwxMSBAQAogCW1hcC0+Z3JvdXBzID0gc2VsZjsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG1hcF9ncm91cHNfX3JlbW92ZShzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwKQoreworCW1hcHNfX3JlbW92ZSgmc2VsZi0+bWFwc1ttYXAtPnR5cGVdLCBtYXApOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXAgKm1hcF9ncm91cHNfX2ZpbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCiAJCQkJCSAgIGVudW0gbWFwX3R5cGUgdHlwZSwgdTY0IGFkZHIpCiB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvbmV3dC5jIGIvdG9vbHMvcGVyZi91dGlsL25ld3QuYwppbmRleCA3NTM3Y2ExLi45MWRlOTliIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvbmV3dC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9uZXd0LmMKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgSEFWRV9MT05HX0xPTkcgX19HTElCQ19IQVZFX0xPTkdfTE9ORwogI2VuZGlmCiAjaW5jbHVkZSA8c2xhbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxuZXd0Lmg+CiAjaW5jbHVkZSA8c3lzL3R0eWRlZmF1bHRzLmg+CkBAIC0yNzgsOSArMjc5LDQ4IEBACiAJdm9pZAkJKmZpcnN0X3Zpc2libGVfZW50cnksICplbnRyaWVzOwogCXUxNgkJdG9wLCBsZWZ0LCB3aWR0aCwgaGVpZ2h0OwogCXZvaWQJCSpwcml2OworCXVuc2lnbmVkIGludAkoKnJlZnJlc2hfZW50cmllcykoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYpOworCXZvaWQJCSgqc2Vlaykoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsCisJCQkJb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKIAl1MzIJCW5yX2VudHJpZXM7CiB9OwogCitzdGF0aWMgdm9pZCB1aV9icm93c2VyX19saXN0X2hlYWRfc2VlayhzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwKKwkJCQkgICAgICAgb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBzZWxmLT5lbnRyaWVzOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSBTRUVLX1NFVDoKKwkJcG9zID0gaGVhZC0+bmV4dDsKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0NVUjoKKwkJcG9zID0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeTsKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0VORDoKKwkJcG9zID0gaGVhZC0+cHJldjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCWlmIChvZmZzZXQgPiAwKSB7CisJCXdoaWxlIChvZmZzZXQtLSAhPSAwKQorCQkJcG9zID0gcG9zLT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChvZmZzZXQrKyAhPSAwKQorCQkJcG9zID0gcG9zLT5wcmV2OworCX0KKworCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBwb3M7Cit9CisKK3N0YXRpYyBib29sIHVpX2Jyb3dzZXJfX2lzX2N1cnJlbnRfZW50cnkoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsIHVuc2lnbmVkIHJvdykKK3sKKwlyZXR1cm4gKHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4ICsgcm93KSA9PSBzZWxmLT5pbmRleDsKK30KKwogc3RhdGljIHZvaWQgdWlfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHN0cnVjdCB1aV9icm93c2VyICpzZWxmKQogewogCWludCBjb2xzLCByb3dzOwpAQCAtMjk3LDggKzMzNywzNiBAQAogCiBzdGF0aWMgdm9pZCB1aV9icm93c2VyX19yZXNldF9pbmRleChzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZikKIHsKLSAgICAgICAgc2VsZi0+aW5kZXggPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCA9IDA7Ci0gICAgICAgIHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBOVUxMOworCXNlbGYtPmluZGV4ID0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggPSAwOworCXNlbGYtPnNlZWsoc2VsZiwgMCwgU0VFS19TRVQpOworfQorCitzdGF0aWMgaW50IHVpX2Jyb3dzZXJfX3Nob3coc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsIGNvbnN0IGNoYXIgKnRpdGxlKQoreworCWlmIChzZWxmLT5mb3JtICE9IE5VTEwpIHsKKwkJbmV3dEZvcm1EZXN0cm95KHNlbGYtPmZvcm0pOworCQluZXd0UG9wV2luZG93KCk7CisJfQorCXVpX2Jyb3dzZXJfX3JlZnJlc2hfZGltZW5zaW9ucyhzZWxmKTsKKwluZXd0Q2VudGVyZWRXaW5kb3coc2VsZi0+d2lkdGgsIHNlbGYtPmhlaWdodCwgdGl0bGUpOworCXNlbGYtPmZvcm0gPSBuZXd0X2Zvcm1fX25ldygpOworCWlmIChzZWxmLT5mb3JtID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXNlbGYtPnNiID0gbmV3dFZlcnRpY2FsU2Nyb2xsYmFyKHNlbGYtPndpZHRoLCAwLCBzZWxmLT5oZWlnaHQsCisJCQkJCSBIRV9DT0xPUlNFVF9OT1JNQUwsCisJCQkJCSBIRV9DT0xPUlNFVF9TRUxFQ1RFRCk7CisJaWYgKHNlbGYtPnNiID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1VQKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9ET1dOKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9QR1VQKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9QR0ROKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9IT01FKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9FTkQpOworCW5ld3RGb3JtQWRkQ29tcG9uZW50KHNlbGYtPmZvcm0sIHNlbGYtPnNiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvYmpkdW1wX2xpbmVfX3Nob3coc3RydWN0IG9iamR1bXBfbGluZSAqc2VsZiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKQEAgLTM1MiwyNiArNDIwLDEwIEBACiAKIHN0YXRpYyBpbnQgdWlfYnJvd3Nlcl9fcmVmcmVzaF9lbnRyaWVzKHN0cnVjdCB1aV9icm93c2VyICpzZWxmKQogewotCXN0cnVjdCBvYmpkdW1wX2xpbmUgKnBvczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gc2VsZi0+ZW50cmllczsKLQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBzZWxmLT5wcml2OwotCWludCByb3cgPSAwOwotCWludCBsZW4gPSBoZS0+bXMuc3ltLT5lbmQgLSBoZS0+bXMuc3ltLT5zdGFydDsKKwlpbnQgcm93OwogCi0JaWYgKHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPT0gTlVMTCB8fCBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID09IHNlbGYtPmVudHJpZXMpCi0gICAgICAgICAgICAgICAgc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IGhlYWQtPm5leHQ7Ci0KLQlwb3MgPSBsaXN0X2VudHJ5KHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnksIHN0cnVjdCBvYmpkdW1wX2xpbmUsIG5vZGUpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHBvcywgaGVhZCwgbm9kZSkgewotCQlib29sIGN1cnJlbnRfZW50cnkgPSAoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggKyByb3cpID09IHNlbGYtPmluZGV4OwotCQlTTHNtZ19nb3RvcmMoc2VsZi0+dG9wICsgcm93LCBzZWxmLT5sZWZ0KTsKLQkJb2JqZHVtcF9saW5lX19zaG93KHBvcywgaGVhZCwgc2VsZi0+d2lkdGgsCi0JCQkJICAgaGUsIGxlbiwgY3VycmVudF9lbnRyeSk7Ci0JCWlmICgrK3JvdyA9PSBzZWxmLT5oZWlnaHQpCi0JCQlicmVhazsKLQl9Ci0KKwluZXd0U2Nyb2xsYmFyU2V0KHNlbGYtPnNiLCBzZWxmLT5pbmRleCwgc2VsZi0+bnJfZW50cmllcyAtIDEpOworCXJvdyA9IHNlbGYtPnJlZnJlc2hfZW50cmllcyhzZWxmKTsKIAlTTHNtZ19zZXRfY29sb3IoSEVfQ09MT1JTRVRfTk9STUFMKTsKIAlTTHNtZ19maWxsX3JlZ2lvbihzZWxmLT50b3AgKyByb3csIHNlbGYtPmxlZnQsCiAJCQkgIHNlbGYtPmhlaWdodCAtIHJvdywgc2VsZi0+d2lkdGgsICcgJyk7CkBAIC0zNzksNDIgKzQzMSwxMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVpX2Jyb3dzZXJfX3J1bihzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZiwgY29uc3QgY2hhciAqdGl0bGUsCi0JCQkgICBzdHJ1Y3QgbmV3dEV4aXRTdHJ1Y3QgKmVzKQorc3RhdGljIGludCB1aV9icm93c2VyX19ydW4oc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYsIHN0cnVjdCBuZXd0RXhpdFN0cnVjdCAqZXMpCiB7Ci0JaWYgKHNlbGYtPmZvcm0pIHsKLQkJbmV3dEZvcm1EZXN0cm95KHNlbGYtPmZvcm0pOwotCQluZXd0UG9wV2luZG93KCk7Ci0JfQotCi0JdWlfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHNlbGYpOwotCW5ld3RDZW50ZXJlZFdpbmRvdyhzZWxmLT53aWR0aCArIDIsIHNlbGYtPmhlaWdodCwgdGl0bGUpOwotCXNlbGYtPmZvcm0gPSBuZXd0X2Zvcm1fX25ldygpOwotCWlmIChzZWxmLT5mb3JtID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXNlbGYtPnNiID0gbmV3dFZlcnRpY2FsU2Nyb2xsYmFyKHNlbGYtPndpZHRoICsgMSwgMCwgc2VsZi0+aGVpZ2h0LAotCQkJCQkgSEVfQ09MT1JTRVRfTk9STUFMLAotCQkJCQkgSEVfQ09MT1JTRVRfU0VMRUNURUQpOwotCWlmIChzZWxmLT5zYiA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9VUCk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfRE9XTik7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfUEdVUCk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfUEdETik7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJyAnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9IT01FKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9FTkQpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1RBQik7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfUklHSFQpOwotCiAJaWYgKHVpX2Jyb3dzZXJfX3JlZnJlc2hfZW50cmllcyhzZWxmKSA8IDApCiAJCXJldHVybiAtMTsKLQluZXd0Rm9ybUFkZENvbXBvbmVudChzZWxmLT5mb3JtLCBzZWxmLT5zYik7CiAKIAl3aGlsZSAoMSkgewotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCQlvZmZfdCBvZmZzZXQ7CiAKIAkJbmV3dEZvcm1SdW4oc2VsZi0+Zm9ybSwgZXMpOwogCkBAIC00MjgsOSArNDUxLDggQEAKIAkJCQlicmVhazsKIAkJCSsrc2VsZi0+aW5kZXg7CiAJCQlpZiAoc2VsZi0+aW5kZXggPT0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggKyBzZWxmLT5oZWlnaHQpIHsKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OwogCQkJCSsrc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHg7Ci0JCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvcy0+bmV4dDsKKwkJCQlzZWxmLT5zZWVrKHNlbGYsICsxLCBTRUVLX0NVUik7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORVdUX0tFWV9VUDoKQEAgLTQzOCw5ICs0NjAsOCBAQAogCQkJCWJyZWFrOwogCQkJLS1zZWxmLT5pbmRleDsKIAkJCWlmIChzZWxmLT5pbmRleCA8IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4KSB7Ci0JCQkJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeTsKIAkJCQktLXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4OwotCQkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBwb3MtPnByZXY7CisJCQkJc2VsZi0+c2VlayhzZWxmLCAtMSwgU0VFS19DVVIpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgTkVXVF9LRVlfUEdETjoKQEAgLTQ1MywxMiArNDc0LDcgQEAKIAkJCQlvZmZzZXQgPSBzZWxmLT5ucl9lbnRyaWVzIC0gMSAtIHNlbGYtPmluZGV4OwogCQkJc2VsZi0+aW5kZXggKz0gb2Zmc2V0OwogCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggKz0gb2Zmc2V0OwotCi0JCQl3aGlsZSAob2Zmc2V0LS0pIHsKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OwotCQkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBwb3MtPm5leHQ7Ci0JCQl9Ci0KKwkJCXNlbGYtPnNlZWsoc2VsZiwgK29mZnNldCwgU0VFS19DVVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgTkVXVF9LRVlfUEdVUDoKIAkJCWlmIChzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCA9PSAwKQpAQCAtNDcxLDM2ICs0ODcsMjIgQEAKIAogCQkJc2VsZi0+aW5kZXggLT0gb2Zmc2V0OwogCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeV9pZHggLT0gb2Zmc2V0OwotCi0JCQl3aGlsZSAob2Zmc2V0LS0pIHsKLQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OwotCQkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBwb3MtPnByZXY7Ci0JCQl9CisJCQlzZWxmLT5zZWVrKHNlbGYsIC1vZmZzZXQsIFNFRUtfQ1VSKTsKIAkJCWJyZWFrOwogCQljYXNlIE5FV1RfS0VZX0hPTUU6CiAJCQl1aV9icm93c2VyX19yZXNldF9pbmRleChzZWxmKTsKIAkJCWJyZWFrOwotCQljYXNlIE5FV1RfS0VZX0VORDogewotCQkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IHNlbGYtPmVudHJpZXM7CisJCWNhc2UgTkVXVF9LRVlfRU5EOgogCQkJb2Zmc2V0ID0gc2VsZi0+aGVpZ2h0IC0gMTsKKwkJCWlmIChvZmZzZXQgPj0gc2VsZi0+bnJfZW50cmllcykKKwkJCQlvZmZzZXQgPSBzZWxmLT5ucl9lbnRyaWVzIC0gMTsKIAotCQkJaWYgKG9mZnNldCA+IHNlbGYtPm5yX2VudHJpZXMpCi0JCQkJb2Zmc2V0ID0gc2VsZi0+bnJfZW50cmllczsKLQotCQkJc2VsZi0+aW5kZXggPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5X2lkeCA9IHNlbGYtPm5yX2VudHJpZXMgLSAxIC0gb2Zmc2V0OwotCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IGhlYWQtPnByZXY7Ci0JCQl3aGlsZSAob2Zmc2V0LS0gIT0gMCkgewotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnk7Ci0JCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IHBvcy0+cHJldjsKLQkJCX0KLQkJfQorCQkJc2VsZi0+aW5kZXggPSBzZWxmLT5ucl9lbnRyaWVzIC0gMTsKKwkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnlfaWR4ID0gc2VsZi0+aW5kZXggLSBvZmZzZXQ7CisJCQlzZWxmLT5zZWVrKHNlbGYsIC1vZmZzZXQsIFNFRUtfRU5EKTsKIAkJCWJyZWFrOwotCQljYXNlIE5FV1RfS0VZX1JJR0hUOgotCQljYXNlIE5FV1RfS0VZX0xFRlQ6Ci0JCWNhc2UgTkVXVF9LRVlfVEFCOgotCQkJcmV0dXJuIGVzLT51LmtleTsKIAkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIGVzLT51LmtleTsKIAkJfQogCQlpZiAodWlfYnJvd3Nlcl9fcmVmcmVzaF9lbnRyaWVzKHNlbGYpIDwgMCkKIAkJCXJldHVybiAtMTsKQEAgLTUwOCwzOCArNTEwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFdoZW4gZGVidWdnaW5nIG5ld3QgcHJvYmxlbXMgaXQgd2FzIHVzZWZ1bCB0byBiZSBhYmxlIHRvICJ1bnJvbGwiCi0gKiB0aGUgY2FsbHMgdG8gbmV3dENoZWNrQm94VHJlZUFkZHtBcnJheSxJdGVtfSwgc28gdGhhdCB3ZSBjYW4gZ2VuZXJhdGUKLSAqIGEgc291cmNlIGZpbGUgd2l0aCB0aGUgc2VxdWVuY2Ugb2YgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcywgdG8gdGhlbgotICogdHdlYWsgdGhlIGFycmF5cyB0byBnZXQgdGhlIGludGVuZGVkIHJlc3VsdHMsIHNvIEknbSBrZWVwaW5nIHRoaXMgY29kZQotICogaGVyZSwgbWF5IGJlIHVzZWZ1bCBhZ2FpbiBpbiB0aGUgZnV0dXJlLgotICovCi0jdW5kZWYgTkVXVF9ERUJVRwotCi1zdGF0aWMgdm9pZCBuZXd0X2NoZWNrYm94X3RyZWVfX2FkZChuZXd0Q29tcG9uZW50IHRyZWUsIGNvbnN0IGNoYXIgKnN0ciwKLQkJCQkgICAgdm9pZCAqcHJpdiwgaW50ICppbmRleGVzKQotewotI2lmZGVmIE5FV1RfREVCVUcKLQkvKiBQcmludCB0aGUgbmV3dENoZWNrYm94VHJlZUFkZEFycmF5IHRvIHRpbmtlciB3aXRoIGl0cyBpbmRleCBhcnJheXMgKi8KLQlpbnQgaSA9IDAsIGxlbiA9IDQwIC0gc3RybGVuKHN0cik7Ci0KLQlmcHJpbnRmKHN0ZGVyciwKLQkJIlx0bmV3dENoZWNrYm94VHJlZUFkZEl0ZW0odHJlZSwgJSouKnNcIiVzXCIsICh2b2lkICopJXAsIDAsICIsCi0JCWxlbiwgbGVuLCAiICIsIHN0ciwgcHJpdik7Ci0Jd2hpbGUgKGluZGV4ZXNbaV0gIT0gTkVXVF9BUkdfTEFTVCkgewotCQlpZiAoaW5kZXhlc1tpXSAhPSBORVdUX0FSR19BUFBFTkQpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiAlZCwiLCBpbmRleGVzW2ldKTsKLQkJZWxzZQotCQkJZnByaW50ZihzdGRlcnIsICIgJXMsIiwgIk5FV1RfQVJHX0FQUEVORCIpOwotCQkrK2k7Ci0JfQotCWZwcmludGYoc3RkZXJyLCAiICVzIiwgIiBORVdUX0FSR19MQVNUKTtcbiIpOwotCWZmbHVzaChzdGRlcnIpOwotI2VuZGlmCi0JbmV3dENoZWNrYm94VHJlZUFkZEFycmF5KHRyZWUsIHN0ciwgcHJpdiwgMCwgaW5kZXhlcyk7Ci19Ci0KIHN0YXRpYyBjaGFyICpjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoc3RydWN0IGNhbGxjaGFpbl9saXN0ICpzZWxmLAogCQkJCSAgICAgIGNoYXIgKmJmLCBzaXplX3QgYmZzaXplKQogewpAQCAtNTUwLDE0NCArNTIwLDI5IEBACiAJcmV0dXJuIGJmOwogfQogCi1zdGF0aWMgdm9pZCBfX2NhbGxjaGFpbl9fYXBwZW5kX2dyYXBoX2Jyb3dzZXIoc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAotCQkJCQkgICAgICBuZXd0Q29tcG9uZW50IHRyZWUsIHU2NCB0b3RhbCwKLQkJCQkJICAgICAgaW50ICppbmRleGVzLCBpbnQgZGVwdGgpCitzdGF0aWMgdW5zaWduZWQgaW50IGhpc3RfZW50cnlfX2Fubm90YXRlX2Jyb3dzZXJfcmVmcmVzaChzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZikKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKLQl1NjQgbmV3X3RvdGFsLCByZW1haW5pbmc7Ci0JaW50IGlkeCA9IDA7CisJc3RydWN0IG9iamR1bXBfbGluZSAqcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBzZWxmLT5lbnRyaWVzOworCXN0cnVjdCBoaXN0X2VudHJ5ICpoZSA9IHNlbGYtPnByaXY7CisJaW50IHJvdyA9IDA7CisJaW50IGxlbiA9IGhlLT5tcy5zeW0tPmVuZCAtIGhlLT5tcy5zeW0tPnN0YXJ0OwogCi0JaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlID09IENIQUlOX0dSQVBIX1JFTCkKLQkJbmV3X3RvdGFsID0gc2VsZi0+Y2hpbGRyZW5faGl0OwotCWVsc2UKLQkJbmV3X3RvdGFsID0gdG90YWw7CisJaWYgKHNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPT0gTlVMTCB8fCBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID09IHNlbGYtPmVudHJpZXMpCisgICAgICAgICAgICAgICAgc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IGhlYWQtPm5leHQ7CiAKLQlyZW1haW5pbmcgPSBuZXdfdG90YWw7Ci0Jbm9kZSA9IHJiX2ZpcnN0KCZzZWxmLT5yYl9yb290KTsKLQl3aGlsZSAobm9kZSkgewotCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKLQkJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9uZXh0KG5vZGUpOwotCQl1NjQgY3VtdWwgPSBjdW11bF9oaXRzKGNoaWxkKTsKLQkJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKLQkJaW50IGZpcnN0ID0gdHJ1ZSwgcHJpbnRlZCA9IDA7Ci0JCWludCBjaGFpbl9pZHggPSAtMTsKLQkJcmVtYWluaW5nIC09IGN1bXVsOworCXBvcyA9IGxpc3RfZW50cnkoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSwgc3RydWN0IG9iamR1bXBfbGluZSwgbm9kZSk7CiAKLQkJaW5kZXhlc1tkZXB0aF0gPSBORVdUX0FSR19BUFBFTkQ7Ci0JCWluZGV4ZXNbZGVwdGggKyAxXSA9IE5FV1RfQVJHX0xBU1Q7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJmNoaWxkLT52YWwsIGxpc3QpIHsKLQkJCWNoYXIgaXBzdHJbQklUU19QRVJfTE9ORyAvIDQgKyAxXSwKLQkJCSAgICAgKmFsbG9jX3N0ciA9IE5VTEw7Ci0JCQljb25zdCBjaGFyICpzdHIgPSBjYWxsY2hhaW5fbGlzdF9fc3ltX25hbWUoY2hhaW4sIGlwc3RyLCBzaXplb2YoaXBzdHIpKTsKLQotCQkJaWYgKGZpcnN0KSB7Ci0JCQkJZG91YmxlIHBlcmNlbnQgPSBjdW11bCAqIDEwMC4wIC8gbmV3X3RvdGFsOwotCi0JCQkJZmlyc3QgPSBmYWxzZTsKLQkJCQlpZiAoYXNwcmludGYoJmFsbG9jX3N0ciwgIiUyLjJmJSUgJXMiLCBwZXJjZW50LCBzdHIpIDwgMCkKLQkJCQkJc3RyID0gIk5vdCBlbm91Z2ggbWVtb3J5ISI7Ci0JCQkJZWxzZQotCQkJCQlzdHIgPSBhbGxvY19zdHI7Ci0JCQl9IGVsc2UgewotCQkJCWluZGV4ZXNbZGVwdGhdID0gaWR4OwotCQkJCWluZGV4ZXNbZGVwdGggKyAxXSA9IE5FV1RfQVJHX0FQUEVORDsKLQkJCQlpbmRleGVzW2RlcHRoICsgMl0gPSBORVdUX0FSR19MQVNUOwotCQkJCSsrY2hhaW5faWR4OwotCQkJfQotCQkJbmV3dF9jaGVja2JveF90cmVlX19hZGQodHJlZSwgc3RyLCAmY2hhaW4tPm1zLCBpbmRleGVzKTsKLQkJCWZyZWUoYWxsb2Nfc3RyKTsKLQkJCSsrcHJpbnRlZDsKLQkJfQotCi0JCWluZGV4ZXNbZGVwdGhdID0gaWR4OwotCQlpZiAoY2hhaW5faWR4ICE9IC0xKQotCQkJaW5kZXhlc1tkZXB0aCArIDFdID0gY2hhaW5faWR4OwotCQlpZiAocHJpbnRlZCAhPSAwKQotCQkJKytpZHg7Ci0JCV9fY2FsbGNoYWluX19hcHBlbmRfZ3JhcGhfYnJvd3NlcihjaGlsZCwgdHJlZSwgbmV3X3RvdGFsLCBpbmRleGVzLAotCQkJCQkJICBkZXB0aCArIChjaGFpbl9pZHggIT0gLTEgPyAyIDogMSkpOwotCQlub2RlID0gbmV4dDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbGxjaGFpbl9fYXBwZW5kX2dyYXBoX2Jyb3dzZXIoc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmLAotCQkJCQkgICAgbmV3dENvbXBvbmVudCB0cmVlLCB1NjQgdG90YWwsCi0JCQkJCSAgICBpbnQgKmluZGV4ZXMsIGludCBwYXJlbnRfaWR4KQotewotCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47Ci0JaW50IGkgPSAwOwotCi0JaW5kZXhlc1sxXSA9IE5FV1RfQVJHX0FQUEVORDsKLQlpbmRleGVzWzJdID0gTkVXVF9BUkdfTEFTVDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZzZWxmLT52YWwsIGxpc3QpIHsKLQkJY2hhciBpcHN0cltCSVRTX1BFUl9MT05HIC8gNCArIDFdLCAqc3RyOwotCi0JCWlmIChjaGFpbi0+aXAgPj0gUEVSRl9DT05URVhUX01BWCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghaSsrICYmIHNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9PSBTT1JUX1NZTSkKLQkJCWNvbnRpbnVlOwotCi0JCXN0ciA9IGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgaXBzdHIsIHNpemVvZihpcHN0cikpOwotCQluZXd0X2NoZWNrYm94X3RyZWVfX2FkZCh0cmVlLCBzdHIsICZjaGFpbi0+bXMsIGluZGV4ZXMpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShwb3MsIGhlYWQsIG5vZGUpIHsKKwkJYm9vbCBjdXJyZW50X2VudHJ5ID0gdWlfYnJvd3Nlcl9faXNfY3VycmVudF9lbnRyeShzZWxmLCByb3cpOworCQlTTHNtZ19nb3RvcmMoc2VsZi0+dG9wICsgcm93LCBzZWxmLT5sZWZ0KTsKKwkJb2JqZHVtcF9saW5lX19zaG93KHBvcywgaGVhZCwgc2VsZi0+d2lkdGgsCisJCQkJICAgaGUsIGxlbiwgY3VycmVudF9lbnRyeSk7CisJCWlmICgrK3JvdyA9PSBzZWxmLT5oZWlnaHQpCisJCQlicmVhazsKIAl9CiAKLQlpbmRleGVzWzFdID0gcGFyZW50X2lkeDsKLQlpbmRleGVzWzJdID0gTkVXVF9BUkdfQVBQRU5EOwotCWluZGV4ZXNbM10gPSBORVdUX0FSR19MQVNUOwotCV9fY2FsbGNoYWluX19hcHBlbmRfZ3JhcGhfYnJvd3NlcihzZWxmLCB0cmVlLCB0b3RhbCwgaW5kZXhlcywgMik7Ci19Ci0KLXN0YXRpYyB2b2lkIGhpc3RfZW50cnlfX2FwcGVuZF9jYWxsY2hhaW5fYnJvd3NlcihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwKLQkJCQkJCSBuZXd0Q29tcG9uZW50IHRyZWUsIHU2NCB0b3RhbCwgaW50IHBhcmVudF9pZHgpCi17Ci0Jc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Ci0JaW50IGluZGV4ZXNbMTAyNF0gPSB7IFswXSA9IHBhcmVudF9pZHgsIH07Ci0JaW50IGlkeCA9IDA7Ci0Jc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGFpbjsKLQotCXJiX25vZGUgPSByYl9maXJzdCgmc2VsZi0+c29ydGVkX2NoYWluKTsKLQl3aGlsZSAocmJfbm9kZSkgewotCQljaGFpbiA9IHJiX2VudHJ5KHJiX25vZGUsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7Ci0JCXN3aXRjaCAoY2FsbGNoYWluX3BhcmFtLm1vZGUpIHsKLQkJY2FzZSBDSEFJTl9GTEFUOgotCQkJYnJlYWs7Ci0JCWNhc2UgQ0hBSU5fR1JBUEhfQUJTOiAvKiBmYWxsZG93biAqLwotCQljYXNlIENIQUlOX0dSQVBIX1JFTDoKLQkJCWNhbGxjaGFpbl9fYXBwZW5kX2dyYXBoX2Jyb3dzZXIoY2hhaW4sIHRyZWUsIHRvdGFsLCBpbmRleGVzLCBpZHgrKyk7Ci0JCQlicmVhazsKLQkJY2FzZSBDSEFJTl9OT05FOgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7Ci0JfQotfQotCi1zdGF0aWMgc2l6ZV90IGhpc3RfZW50cnlfX2FwcGVuZF9icm93c2VyKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLAotCQkJCQkgbmV3dENvbXBvbmVudCB0cmVlLCB1NjQgdG90YWwpCi17Ci0JY2hhciBzWzI1Nl07Ci0Jc2l6ZV90IHJldDsKLQotCWlmIChzeW1ib2xfY29uZi5leGNsdWRlX290aGVyICYmICFzZWxmLT5wYXJlbnQpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gaGlzdF9lbnRyeV9fc25wcmludGYoc2VsZiwgcywgc2l6ZW9mKHMpLCBOVUxMLAotCQkJCSAgIGZhbHNlLCAwLCBmYWxzZSwgdG90YWwpOwotCWlmIChzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKSB7Ci0JCWludCBpbmRleGVzWzJdOwotCi0JCWluZGV4ZXNbMF0gPSBORVdUX0FSR19BUFBFTkQ7Ci0JCWluZGV4ZXNbMV0gPSBORVdUX0FSR19MQVNUOwotCQluZXd0X2NoZWNrYm94X3RyZWVfX2FkZCh0cmVlLCBzLCAmc2VsZi0+bXMsIGluZGV4ZXMpOwotCX0gZWxzZQotCQluZXd0TGlzdGJveEFwcGVuZEVudHJ5KHRyZWUsIHMsICZzZWxmLT5tcyk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiByb3c7CiB9CiAKIGludCBoaXN0X2VudHJ5X190dWlfYW5ub3RhdGUoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCkBAIC03MTIsNyArNTY3LDkgQEAKIAl1aV9oZWxwbGluZV9fcHVzaCgiUHJlc3MgPC0gb3IgRVNDIHRvIGV4aXQiKTsKIAogCW1lbXNldCgmYnJvd3NlciwgMCwgc2l6ZW9mKGJyb3dzZXIpKTsKLQlicm93c2VyLmVudHJpZXMgPSAmaGVhZDsKKwlicm93c2VyLmVudHJpZXMJCT0gJmhlYWQ7CisJYnJvd3Nlci5yZWZyZXNoX2VudHJpZXMgPSBoaXN0X2VudHJ5X19hbm5vdGF0ZV9icm93c2VyX3JlZnJlc2g7CisJYnJvd3Nlci5zZWVrCQk9IHVpX2Jyb3dzZXJfX2xpc3RfaGVhZF9zZWVrOwogCWJyb3dzZXIucHJpdiA9IHNlbGY7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZoZWFkLCBub2RlKSB7CiAJCXNpemVfdCBsaW5lX2xlbiA9IHN0cmxlbihwb3MtPmxpbmUpOwpAQCAtNzIyLDcgKzU3OSw5IEBACiAJfQogCiAJYnJvd3Nlci53aWR0aCArPSAxODsgLyogUGVyY2VudGFnZSAqLwotCXJldCA9IHVpX2Jyb3dzZXJfX3J1bigmYnJvd3Nlciwgc2VsZi0+bXMuc3ltLT5uYW1lLCAmZXMpOworCXVpX2Jyb3dzZXJfX3Nob3coJmJyb3dzZXIsIHNlbGYtPm1zLnN5bS0+bmFtZSk7CisJbmV3dEZvcm1BZGRIb3RLZXkoYnJvd3Nlci5mb3JtLCAnICcpOworCXJldCA9IHVpX2Jyb3dzZXJfX3J1bigmYnJvd3NlciwgJmVzKTsKIAluZXd0Rm9ybURlc3Ryb3koYnJvd3Nlci5mb3JtKTsKIAluZXd0UG9wV2luZG93KCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmhlYWQsIG5vZGUpIHsKQEAgLTczMywxNTcgKzU5Miw0OCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCB2b2lkICpuZXd0X19zeW1ib2xfdHJlZV9nZXRfY3VycmVudChuZXd0Q29tcG9uZW50IHNlbGYpCi17Ci0JaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCi0JCXJldHVybiBuZXd0Q2hlY2tib3hUcmVlR2V0Q3VycmVudChzZWxmKTsKLQlyZXR1cm4gbmV3dExpc3Rib3hHZXRDdXJyZW50KHNlbGYpOwotfQotCi1zdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3NlbGVjdGlvbihuZXd0Q29tcG9uZW50IHNlbGYsIHZvaWQgKmRhdGEpCi17Ci0JY29uc3Qgc3RydWN0IG1hcF9zeW1ib2wgKipzeW1ib2xfcHRyID0gZGF0YTsKLQkqc3ltYm9sX3B0ciA9IG5ld3RfX3N5bWJvbF90cmVlX2dldF9jdXJyZW50KHNlbGYpOwotfQotCiBzdHJ1Y3QgaGlzdF9icm93c2VyIHsKLQluZXd0Q29tcG9uZW50CQlmb3JtLCB0cmVlOwotCWNvbnN0IHN0cnVjdCBtYXBfc3ltYm9sICpzZWxlY3Rpb247CisJc3RydWN0IHVpX2Jyb3dzZXIgICBiOworCXN0cnVjdCBoaXN0cwkgICAgKmhpc3RzOworCXN0cnVjdCBoaXN0X2VudHJ5ICAgKmhlX3NlbGVjdGlvbjsKKwlzdHJ1Y3QgbWFwX3N5bWJvbCAgICpzZWxlY3Rpb247CiB9OwogCi1zdGF0aWMgc3RydWN0IGhpc3RfYnJvd3NlciAqaGlzdF9icm93c2VyX19uZXcodm9pZCkKLXsKLQlzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOworc3RhdGljIHZvaWQgaGlzdF9icm93c2VyX19yZXNldChzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmKTsKK3N0YXRpYyBpbnQgaGlzdF9icm93c2VyX19ydW4oc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwgY29uc3QgY2hhciAqdGl0bGUsCisJCQkgICAgIHN0cnVjdCBuZXd0RXhpdFN0cnVjdCAqZXMpOworc3RhdGljIHVuc2lnbmVkIGludCBoaXN0X2Jyb3dzZXJfX3JlZnJlc2hfZW50cmllcyhzdHJ1Y3QgdWlfYnJvd3NlciAqc2VsZik7CitzdGF0aWMgdm9pZCB1aV9icm93c2VyX19oaXN0c19zZWVrKHN0cnVjdCB1aV9icm93c2VyICpzZWxmLAorCQkJCSAgIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSk7CiAKLQlpZiAoc2VsZiAhPSBOVUxMKQotCQlzZWxmLT5mb3JtID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgaGlzdF9icm93c2VyICpoaXN0X2Jyb3dzZXJfX25ldyhzdHJ1Y3QgaGlzdHMgKmhpc3RzKQoreworCXN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYgPSB6YWxsb2Moc2l6ZW9mKCpzZWxmKSk7CisKKwlpZiAoc2VsZikgeworCQlzZWxmLT5oaXN0cyA9IGhpc3RzOworCQlzZWxmLT5iLnJlZnJlc2hfZW50cmllcyA9IGhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9lbnRyaWVzOworCQlzZWxmLT5iLnNlZWsgPSB1aV9icm93c2VyX19oaXN0c19zZWVrOworCX0KIAogCXJldHVybiBzZWxmOwogfQogCiBzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX2RlbGV0ZShzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmKQogewotCW5ld3RGb3JtRGVzdHJveShzZWxmLT5mb3JtKTsKKwluZXd0Rm9ybURlc3Ryb3koc2VsZi0+Yi5mb3JtKTsKIAluZXd0UG9wV2luZG93KCk7CiAJZnJlZShzZWxmKTsKIH0KIAotc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3BvcHVsYXRlKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYsIHN0cnVjdCBoaXN0cyAqaGlzdHMsCi0JCQkJICBjb25zdCBjaGFyICp0aXRsZSkKLXsKLQlpbnQgbWF4X2xlbiA9IDAsIGlkeCwgY29scywgcm93czsKLQlzdHJ1Y3QgdWlfcHJvZ3Jlc3MgKnByb2dyZXNzOwotCXN0cnVjdCByYl9ub2RlICpuZDsKLQl1NjQgY3Vycl9oaXN0ID0gMDsKLQljaGFyIHNlcVtdID0gIi4iLCB1bml0OwotCWNoYXIgc3RyWzI1Nl07Ci0JdW5zaWduZWQgbG9uZyBucl9ldmVudHMgPSBoaXN0cy0+c3RhdHMubnJfZXZlbnRzW1BFUkZfUkVDT1JEX1NBTVBMRV07Ci0KLQlpZiAoc2VsZi0+Zm9ybSkgewotCQluZXd0Rm9ybURlc3Ryb3koc2VsZi0+Zm9ybSk7Ci0JCW5ld3RQb3BXaW5kb3coKTsKLQl9Ci0KLQlucl9ldmVudHMgPSBjb252ZXJ0X3VuaXQobnJfZXZlbnRzLCAmdW5pdCk7Ci0Jc25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIkV2ZW50czogJWx1JWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLQkJIG5yX2V2ZW50cywgdW5pdCk7Ci0JbmV3dERyYXdSb290VGV4dCgwLCAwLCBzdHIpOwotCi0JbmV3dEdldFNjcmVlblNpemUoTlVMTCwgJnJvd3MpOwotCi0JaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pCi0JCXNlbGYtPnRyZWUgPSBuZXd0Q2hlY2tib3hUcmVlTXVsdGkoMCwgMCwgcm93cyAtIDUsIHNlcSwKLQkJCQkJCSAgIE5FV1RfRkxBR19TQ1JPTEwpOwotCWVsc2UKLQkJc2VsZi0+dHJlZSA9IG5ld3RMaXN0Ym94KDAsIDAsIHJvd3MgLSA1LAotCQkJCQkoTkVXVF9GTEFHX1NDUk9MTCB8Ci0JCQkJCSBORVdUX0ZMQUdfUkVUVVJORVhJVCkpOwotCi0JbmV3dENvbXBvbmVudEFkZENhbGxiYWNrKHNlbGYtPnRyZWUsIGhpc3RfYnJvd3Nlcl9fc2VsZWN0aW9uLAotCQkJCSAmc2VsZi0+c2VsZWN0aW9uKTsKLQotCXByb2dyZXNzID0gdWlfcHJvZ3Jlc3NfX25ldygiQWRkaW5nIGVudHJpZXMgdG8gdGhlIGJyb3dzZXIuLi4iLAotCQkJCSAgICBoaXN0cy0+bnJfZW50cmllcyk7Ci0JaWYgKHByb2dyZXNzID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCWlkeCA9IDA7Ci0JZm9yIChuZCA9IHJiX2ZpcnN0KCZoaXN0cy0+ZW50cmllcyk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7Ci0JCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJaW50IGxlbjsKLQotCQlpZiAoaC0+ZmlsdGVyZWQpCi0JCQljb250aW51ZTsKLQotCQlsZW4gPSBoaXN0X2VudHJ5X19hcHBlbmRfYnJvd3NlcihoLCBzZWxmLT50cmVlLCBoaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kKTsKLQkJaWYgKGxlbiA+IG1heF9sZW4pCi0JCQltYXhfbGVuID0gbGVuOwotCQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikKLQkJCWhpc3RfZW50cnlfX2FwcGVuZF9jYWxsY2hhaW5fYnJvd3NlcihoLCBzZWxmLT50cmVlLAotCQkJCQkJCSAgICAgaGlzdHMtPnN0YXRzLnRvdGFsX3BlcmlvZCwgaWR4KyspOwotCQkrK2N1cnJfaGlzdDsKLQkJaWYgKGN1cnJfaGlzdCAlIDUpCi0JCQl1aV9wcm9ncmVzc19fdXBkYXRlKHByb2dyZXNzLCBjdXJyX2hpc3QpOwotCX0KLQotCXVpX3Byb2dyZXNzX19kZWxldGUocHJvZ3Jlc3MpOwotCi0JbmV3dEdldFNjcmVlblNpemUoJmNvbHMsICZyb3dzKTsKLQotCWlmIChtYXhfbGVuID4gY29scykKLQkJbWF4X2xlbiA9IGNvbHMgLSAzOwotCi0JaWYgKCFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQotCQluZXd0TGlzdGJveFNldFdpZHRoKHNlbGYtPnRyZWUsIG1heF9sZW4pOwotCi0JbmV3dENlbnRlcmVkV2luZG93KG1heF9sZW4gKyAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbiA/IDUgOiAwKSwKLQkJCSAgIHJvd3MgLSA1LCB0aXRsZSk7Ci0Jc2VsZi0+Zm9ybSA9IG5ld3RfZm9ybV9fbmV3KCk7Ci0JaWYgKHNlbGYtPmZvcm0gPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJ0EnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnYScpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICdEJyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJ2QnKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnVCcpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICd0Jyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgJz8nKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCAnSCcpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sICdoJyk7Ci0JbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Zm9ybSwgTkVXVF9LRVlfRjEpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1JJR0hUKTsKLQluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5mb3JtLCBORVdUX0tFWV9UQUIpOwotCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmZvcm0sIE5FV1RfS0VZX1VOVEFCKTsKLQluZXd0Rm9ybUFkZENvbXBvbmVudHMoc2VsZi0+Zm9ybSwgc2VsZi0+dHJlZSwgTlVMTCk7Ci0Jc2VsZi0+c2VsZWN0aW9uID0gbmV3dF9fc3ltYm9sX3RyZWVfZ2V0X2N1cnJlbnQoc2VsZi0+dHJlZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBoaXN0X2VudHJ5ICpoaXN0X2Jyb3dzZXJfX3NlbGVjdGVkX2VudHJ5KHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYpCiB7Ci0JaW50ICppbmRleGVzOwotCi0JaWYgKCFzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluKQotCQlnb3RvIG91dDsKLQotCWluZGV4ZXMgPSBuZXd0Q2hlY2tib3hUcmVlRmluZEl0ZW0oc2VsZi0+dHJlZSwgKHZvaWQgKilzZWxmLT5zZWxlY3Rpb24pOwotCWlmIChpbmRleGVzKSB7Ci0JCWJvb2wgaXNfaGlzdF9lbnRyeSA9IGluZGV4ZXNbMV0gPT0gTkVXVF9BUkdfTEFTVDsKLQkJZnJlZShpbmRleGVzKTsKLQkJaWYgKGlzX2hpc3RfZW50cnkpCi0JCQlnb3RvIG91dDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci1vdXQ6Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihzZWxmLT5zZWxlY3Rpb24sIHN0cnVjdCBoaXN0X2VudHJ5LCBtcyk7CisJcmV0dXJuIHNlbGYtPmhlX3NlbGVjdGlvbjsKIH0KIAogc3RhdGljIHN0cnVjdCB0aHJlYWQgKmhpc3RfYnJvd3Nlcl9fc2VsZWN0ZWRfdGhyZWFkKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYpCiB7Ci0Jc3RydWN0IGhpc3RfZW50cnkgKmhlID0gaGlzdF9icm93c2VyX19zZWxlY3RlZF9lbnRyeShzZWxmKTsKLQlyZXR1cm4gaGUgPyBoZS0+dGhyZWFkIDogTlVMTDsKKwlyZXR1cm4gc2VsZi0+aGVfc2VsZWN0aW9uLT50aHJlYWQ7CiB9CiAKIHN0YXRpYyBpbnQgaGlzdF9icm93c2VyX190aXRsZShjaGFyICpiZiwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmV2X25hbWUsCkBAIC05MDUsNyArNjU1LDcgQEAKIAogaW50IGhpc3RzX19icm93c2Uoc3RydWN0IGhpc3RzICpzZWxmLCBjb25zdCBjaGFyICpoZWxwbGluZSwgY29uc3QgY2hhciAqZXZfbmFtZSkKIHsKLQlzdHJ1Y3QgaGlzdF9icm93c2VyICpicm93c2VyID0gaGlzdF9icm93c2VyX19uZXcoKTsKKwlzdHJ1Y3QgaGlzdF9icm93c2VyICpicm93c2VyID0gaGlzdF9icm93c2VyX19uZXcoc2VsZik7CiAJc3RydWN0IHBzdGFjayAqZnN0YWNrOwogCWNvbnN0IHN0cnVjdCB0aHJlYWQgKnRocmVhZF9maWx0ZXIgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBkc28gKmRzb19maWx0ZXIgPSBOVUxMOwpAQCAtOTI0LDggKzY3NCw2IEBACiAKIAloaXN0X2Jyb3dzZXJfX3RpdGxlKG1zZywgc2l6ZW9mKG1zZyksIGV2X25hbWUsCiAJCQkgICAgZHNvX2ZpbHRlciwgdGhyZWFkX2ZpbHRlcik7Ci0JaWYgKGhpc3RfYnJvd3Nlcl9fcG9wdWxhdGUoYnJvd3Nlciwgc2VsZiwgbXNnKSA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfc3RhY2s7CiAKIAl3aGlsZSAoMSkgewogCQljb25zdCBzdHJ1Y3QgdGhyZWFkICp0aHJlYWQ7CkBAIC05MzQsNyArNjgyLDggQEAKIAkJaW50IG5yX29wdGlvbnMgPSAwLCBjaG9pY2UgPSAwLCBpLAogCQkgICAgYW5ub3RhdGUgPSAtMiwgem9vbV9kc28gPSAtMiwgem9vbV90aHJlYWQgPSAtMjsKIAotCQluZXd0Rm9ybVJ1bihicm93c2VyLT5mb3JtLCAmZXMpOworCQlpZiAoaGlzdF9icm93c2VyX19ydW4oYnJvd3NlciwgbXNnLCAmZXMpKQorCQkJYnJlYWs7CiAKIAkJdGhyZWFkID0gaGlzdF9icm93c2VyX19zZWxlY3RlZF90aHJlYWQoYnJvd3Nlcik7CiAJCWRzbyA9IGJyb3dzZXItPnNlbGVjdGlvbi0+bWFwID8gYnJvd3Nlci0+c2VsZWN0aW9uLT5tYXAtPmRzbyA6IE5VTEw7CkBAIC0xMDY5LDggKzgxOCw3IEBACiAJCQloaXN0c19fZmlsdGVyX2J5X2RzbyhzZWxmLCBkc29fZmlsdGVyKTsKIAkJCWhpc3RfYnJvd3Nlcl9fdGl0bGUobXNnLCBzaXplb2YobXNnKSwgZXZfbmFtZSwKIAkJCQkJICAgIGRzb19maWx0ZXIsIHRocmVhZF9maWx0ZXIpOwotCQkJaWYgKGhpc3RfYnJvd3Nlcl9fcG9wdWxhdGUoYnJvd3Nlciwgc2VsZiwgbXNnKSA8IDApCi0JCQkJZ290byBvdXQ7CisJCQloaXN0X2Jyb3dzZXJfX3Jlc2V0KGJyb3dzZXIpOwogCQl9IGVsc2UgaWYgKGNob2ljZSA9PSB6b29tX3RocmVhZCkgewogem9vbV90aHJlYWQ6CiAJCQlpZiAodGhyZWFkX2ZpbHRlcikgewpAQCAtMTA4OCw4ICs4MzYsNyBAQAogCQkJaGlzdHNfX2ZpbHRlcl9ieV90aHJlYWQoc2VsZiwgdGhyZWFkX2ZpbHRlcik7CiAJCQloaXN0X2Jyb3dzZXJfX3RpdGxlKG1zZywgc2l6ZW9mKG1zZyksIGV2X25hbWUsCiAJCQkJCSAgICBkc29fZmlsdGVyLCB0aHJlYWRfZmlsdGVyKTsKLQkJCWlmIChoaXN0X2Jyb3dzZXJfX3BvcHVsYXRlKGJyb3dzZXIsIHNlbGYsIG1zZykgPCAwKQotCQkJCWdvdG8gb3V0OworCQkJaGlzdF9icm93c2VyX19yZXNldChicm93c2VyKTsKIAkJfQogCX0KIG91dF9mcmVlX3N0YWNrOgpAQCAtMTE0NSw2ICs4OTIsMTMgQEAKIAkiYmx1ZSIsCSAgICAgImxpZ2h0Z3JheSIsCiB9OwogCitzdGF0aWMgdm9pZCBuZXd0X3N1c3BlbmQodm9pZCAqZCBfX3VzZWQpCit7CisJbmV3dFN1c3BlbmQoKTsKKwlyYWlzZShTSUdUU1RQKTsKKwluZXd0UmVzdW1lKCk7Cit9CisKIHZvaWQgc2V0dXBfYnJvd3Nlcih2b2lkKQogewogCXN0cnVjdCBuZXd0UGVyY2VudFRyZWVDb2xvcnMgKmMgPSAmZGVmYXVsdFBlcmNlbnRUcmVlQ29sb3JzOwpAQCAtMTE1OCw2ICs5MTIsNyBAQAogCXVzZV9icm93c2VyID0gMTsKIAluZXd0SW5pdCgpOwogCW5ld3RDbHMoKTsKKwluZXd0U2V0U3VzcGVuZENhbGxiYWNrKG5ld3Rfc3VzcGVuZCwgTlVMTCk7CiAJdWlfaGVscGxpbmVfX3B1dHMoIiAiKTsKIAlzbHR0X3NldF9jb2xvcihIRV9DT0xPUlNFVF9UT1AsIE5VTEwsIGMtPnRvcENvbG9yRmcsIGMtPnRvcENvbG9yQmcpOwogCXNsdHRfc2V0X2NvbG9yKEhFX0NPTE9SU0VUX01FRElVTSwgTlVMTCwgYy0+bWVkaXVtQ29sb3JGZywgYy0+bWVkaXVtQ29sb3JCZyk7CkBAIC0xMTc2LDMgKzkzMSw2MzggQEAKIAkJbmV3dEZpbmlzaGVkKCk7CiAJfQogfQorCitzdGF0aWMgdm9pZCBoaXN0X2Jyb3dzZXJfX3JlZnJlc2hfZGltZW5zaW9ucyhzdHJ1Y3QgaGlzdF9icm93c2VyICpzZWxmKQoreworCS8qIDMgPT0gKy8tIHRvZ2dsZSBzeW1ib2wgYmVmb3JlIGFjdHVhbCBoaXN0X2VudHJ5IHJlbmRlcmluZyAqLworCXNlbGYtPmIud2lkdGggPSAzICsgKGhpc3RzX19zb3J0X2xpc3Rfd2lkdGgoc2VsZi0+aGlzdHMpICsKKwkJCSAgICAgc2l6ZW9mKCJba10iKSk7Cit9CisKK3N0YXRpYyB2b2lkIGhpc3RfYnJvd3Nlcl9fcmVzZXQoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZikKK3sKKwlzZWxmLT5iLm5yX2VudHJpZXMgPSBzZWxmLT5oaXN0cy0+bnJfZW50cmllczsKKwloaXN0X2Jyb3dzZXJfX3JlZnJlc2hfZGltZW5zaW9ucyhzZWxmKTsKKwl1aV9icm93c2VyX19yZXNldF9pbmRleCgmc2VsZi0+Yik7Cit9CisKK3N0YXRpYyBjaGFyIHRyZWVfX2ZvbGRlZF9zaWduKGJvb2wgdW5mb2xkZWQpCit7CisJcmV0dXJuIHVuZm9sZGVkID8gJy0nIDogJysnOworfQorCitzdGF0aWMgY2hhciBtYXBfc3ltYm9sX19mb2xkZWQoY29uc3Qgc3RydWN0IG1hcF9zeW1ib2wgKnNlbGYpCit7CisJcmV0dXJuIHNlbGYtPmhhc19jaGlsZHJlbiA/IHRyZWVfX2ZvbGRlZF9zaWduKHNlbGYtPnVuZm9sZGVkKSA6ICcgJzsKK30KKworc3RhdGljIGNoYXIgaGlzdF9lbnRyeV9fZm9sZGVkKGNvbnN0IHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmKQoreworCXJldHVybiBtYXBfc3ltYm9sX19mb2xkZWQoJnNlbGYtPm1zKTsKK30KKworc3RhdGljIGNoYXIgY2FsbGNoYWluX2xpc3RfX2ZvbGRlZChjb25zdCBzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKnNlbGYpCit7CisJcmV0dXJuIG1hcF9zeW1ib2xfX2ZvbGRlZCgmc2VsZi0+bXMpOworfQorCitzdGF0aWMgYm9vbCBtYXBfc3ltYm9sX190b2dnbGVfZm9sZChzdHJ1Y3QgbWFwX3N5bWJvbCAqc2VsZikKK3sKKwlpZiAoIXNlbGYtPmhhc19jaGlsZHJlbikKKwkJcmV0dXJuIGZhbHNlOworCisJc2VsZi0+dW5mb2xkZWQgPSAhc2VsZi0+dW5mb2xkZWQ7CisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZpbmUgTEVWRUxfT0ZGU0VUX1NURVAgMworCitzdGF0aWMgaW50IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW5fbm9kZV9yYl90cmVlKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYsCisJCQkJCQkgICAgIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqY2hhaW5fbm9kZSwKKwkJCQkJCSAgICAgdTY0IHRvdGFsLCBpbnQgbGV2ZWwsCisJCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHJvdywKKwkJCQkJCSAgICAgb2ZmX3QgKnJvd19vZmZzZXQsCisJCQkJCQkgICAgIGJvb2wgKmlzX2N1cnJlbnRfZW50cnkpCit7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJaW50IGZpcnN0X3JvdyA9IHJvdywgd2lkdGgsIG9mZnNldCA9IGxldmVsICogTEVWRUxfT0ZGU0VUX1NURVA7CisJdTY0IG5ld190b3RhbCwgcmVtYWluaW5nOworCisJaWYgKGNhbGxjaGFpbl9wYXJhbS5tb2RlID09IENIQUlOX0dSQVBIX1JFTCkKKwkJbmV3X3RvdGFsID0gY2hhaW5fbm9kZS0+Y2hpbGRyZW5faGl0OworCWVsc2UKKwkJbmV3X3RvdGFsID0gdG90YWw7CisKKwlyZW1haW5pbmcgPSBuZXdfdG90YWw7CisJbm9kZSA9IHJiX2ZpcnN0KCZjaGFpbl9ub2RlLT5yYl9yb290KTsKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGNhbGxjaGFpbl9ub2RlLCByYl9ub2RlKTsKKwkJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9uZXh0KG5vZGUpOworCQl1NjQgY3VtdWwgPSBjdW11bF9oaXRzKGNoaWxkKTsKKwkJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKwkJY2hhciBmb2xkZWRfc2lnbiA9ICcgJzsKKwkJaW50IGZpcnN0ID0gdHJ1ZTsKKwkJaW50IGV4dHJhX29mZnNldCA9IDA7CisKKwkJcmVtYWluaW5nIC09IGN1bXVsOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZjaGlsZC0+dmFsLCBsaXN0KSB7CisJCQljaGFyIGlwc3RyW0JJVFNfUEVSX0xPTkcgLyA0ICsgMV0sICphbGxvY19zdHI7CisJCQljb25zdCBjaGFyICpzdHI7CisJCQlpbnQgY29sb3I7CisJCQlib29sIHdhc19maXJzdCA9IGZpcnN0OworCisJCQlpZiAoZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWNoYWluLT5tcy5oYXNfY2hpbGRyZW4gPSBjaGFpbi0+bGlzdC5uZXh0ICE9ICZjaGlsZC0+dmFsIHx8CisJCQkJCQkJIHJiX2ZpcnN0KCZjaGlsZC0+cmJfcm9vdCkgIT0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJZXh0cmFfb2Zmc2V0ID0gTEVWRUxfT0ZGU0VUX1NURVA7CisJCQkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGNoYWluLT5saXN0Lm5leHQgPT0gJmNoaWxkLT52YWwgJiYKKwkJCQkJCQkgcmJfZmlyc3QoJmNoaWxkLT5yYl9yb290KSAhPSBOVUxMOworCQkJfQorCisJCQlmb2xkZWRfc2lnbiA9IGNhbGxjaGFpbl9saXN0X19mb2xkZWQoY2hhaW4pOworCQkJaWYgKCpyb3dfb2Zmc2V0ICE9IDApIHsKKwkJCQktLSpyb3dfb2Zmc2V0OworCQkJCWdvdG8gZG9fbmV4dDsKKwkJCX0KKworCQkJYWxsb2Nfc3RyID0gTlVMTDsKKwkJCXN0ciA9IGNhbGxjaGFpbl9saXN0X19zeW1fbmFtZShjaGFpbiwgaXBzdHIsIHNpemVvZihpcHN0cikpOworCQkJaWYgKHdhc19maXJzdCkgeworCQkJCWRvdWJsZSBwZXJjZW50ID0gY3VtdWwgKiAxMDAuMCAvIG5ld190b3RhbDsKKworCQkJCWlmIChhc3ByaW50ZigmYWxsb2Nfc3RyLCAiJTIuMmYlJSAlcyIsIHBlcmNlbnQsIHN0cikgPCAwKQorCQkJCQlzdHIgPSAiTm90IGVub3VnaCBtZW1vcnkhIjsKKwkJCQllbHNlCisJCQkJCXN0ciA9IGFsbG9jX3N0cjsKKwkJCX0KKworCQkJY29sb3IgPSBIRV9DT0xPUlNFVF9OT1JNQUw7CisJCQl3aWR0aCA9IHNlbGYtPmIud2lkdGggLSAob2Zmc2V0ICsgZXh0cmFfb2Zmc2V0ICsgMik7CisJCQlpZiAodWlfYnJvd3Nlcl9faXNfY3VycmVudF9lbnRyeSgmc2VsZi0+Yiwgcm93KSkgeworCQkJCXNlbGYtPnNlbGVjdGlvbiA9ICZjaGFpbi0+bXM7CisJCQkJY29sb3IgPSBIRV9DT0xPUlNFVF9TRUxFQ1RFRDsKKwkJCQkqaXNfY3VycmVudF9lbnRyeSA9IHRydWU7CisJCQl9CisKKwkJCVNMc21nX3NldF9jb2xvcihjb2xvcik7CisJCQlTTHNtZ19nb3RvcmMoc2VsZi0+Yi50b3AgKyByb3csIHNlbGYtPmIubGVmdCk7CisJCQlzbHNtZ193cml0ZV9uc3RyaW5nKCIgIiwgb2Zmc2V0ICsgZXh0cmFfb2Zmc2V0KTsKKwkJCXNsc21nX3ByaW50ZigiJWMgIiwgZm9sZGVkX3NpZ24pOworCQkJc2xzbWdfd3JpdGVfbnN0cmluZyhzdHIsIHdpZHRoKTsKKwkJCWZyZWUoYWxsb2Nfc3RyKTsKKworCQkJaWYgKCsrcm93ID09IHNlbGYtPmIuaGVpZ2h0KQorCQkJCWdvdG8gb3V0OworZG9fbmV4dDoKKwkJCWlmIChmb2xkZWRfc2lnbiA9PSAnKycpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZm9sZGVkX3NpZ24gPT0gJy0nKSB7CisJCQljb25zdCBpbnQgbmV3X2xldmVsID0gbGV2ZWwgKyAoZXh0cmFfb2Zmc2V0ID8gMiA6IDEpOworCQkJcm93ICs9IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW5fbm9kZV9yYl90cmVlKHNlbGYsIGNoaWxkLCBuZXdfdG90YWwsCisJCQkJCQkJCQkgbmV3X2xldmVsLCByb3csIHJvd19vZmZzZXQsCisJCQkJCQkJCQkgaXNfY3VycmVudF9lbnRyeSk7CisJCX0KKwkJaWYgKHJvdyA9PSBzZWxmLT5iLmhlaWdodCkKKwkJCWdvdG8gb3V0OworCQlub2RlID0gbmV4dDsKKwl9CitvdXQ6CisJcmV0dXJuIHJvdyAtIGZpcnN0X3JvdzsKK30KKworc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluX25vZGUoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwKKwkJCQkJICAgICBzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUsCisJCQkJCSAgICAgaW50IGxldmVsLCB1bnNpZ25lZCBzaG9ydCByb3csCisJCQkJCSAgICAgb2ZmX3QgKnJvd19vZmZzZXQsCisJCQkJCSAgICAgYm9vbCAqaXNfY3VycmVudF9lbnRyeSkKK3sKKwlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCWludCBmaXJzdF9yb3cgPSByb3csCisJICAgICBvZmZzZXQgPSBsZXZlbCAqIExFVkVMX09GRlNFVF9TVEVQLAorCSAgICAgd2lkdGggPSBzZWxmLT5iLndpZHRoIC0gb2Zmc2V0OworCWNoYXIgZm9sZGVkX3NpZ24gPSAnICc7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmbm9kZS0+dmFsLCBsaXN0KSB7CisJCWNoYXIgaXBzdHJbQklUU19QRVJfTE9ORyAvIDQgKyAxXSwgKnM7CisJCWludCBjb2xvcjsKKwkJLyoKKwkJICogRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIHNvbWV3aGVyZSBlbHNlLAorCQkgKiBwcm9iYWJseSB3aGVuIHRoZSBjYWxsY2hhaW4gaXMgY3JlYXRlZCwgc28gYXMgbm90IHRvCisJCSAqIHRyYXZlcnNlIGl0IGFsbCBvdmVyIGFnYWluCisJCSAqLworCQljaGFpbi0+bXMuaGFzX2NoaWxkcmVuID0gcmJfZmlyc3QoJm5vZGUtPnJiX3Jvb3QpICE9IE5VTEw7CisJCWZvbGRlZF9zaWduID0gY2FsbGNoYWluX2xpc3RfX2ZvbGRlZChjaGFpbik7CisKKwkJaWYgKCpyb3dfb2Zmc2V0ICE9IDApIHsKKwkJCS0tKnJvd19vZmZzZXQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbG9yID0gSEVfQ09MT1JTRVRfTk9STUFMOworCQlpZiAodWlfYnJvd3Nlcl9faXNfY3VycmVudF9lbnRyeSgmc2VsZi0+Yiwgcm93KSkgeworCQkJc2VsZi0+c2VsZWN0aW9uID0gJmNoYWluLT5tczsKKwkJCWNvbG9yID0gSEVfQ09MT1JTRVRfU0VMRUNURUQ7CisJCQkqaXNfY3VycmVudF9lbnRyeSA9IHRydWU7CisJCX0KKworCQlzID0gY2FsbGNoYWluX2xpc3RfX3N5bV9uYW1lKGNoYWluLCBpcHN0ciwgc2l6ZW9mKGlwc3RyKSk7CisJCVNMc21nX2dvdG9yYyhzZWxmLT5iLnRvcCArIHJvdywgc2VsZi0+Yi5sZWZ0KTsKKwkJU0xzbWdfc2V0X2NvbG9yKGNvbG9yKTsKKwkJc2xzbWdfd3JpdGVfbnN0cmluZygiICIsIG9mZnNldCk7CisJCXNsc21nX3ByaW50ZigiJWMgIiwgZm9sZGVkX3NpZ24pOworCQlzbHNtZ193cml0ZV9uc3RyaW5nKHMsIHdpZHRoIC0gMik7CisKKwkJaWYgKCsrcm93ID09IHNlbGYtPmIuaGVpZ2h0KQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKGZvbGRlZF9zaWduID09ICctJykKKwkJcm93ICs9IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW5fbm9kZV9yYl90cmVlKHNlbGYsIG5vZGUsCisJCQkJCQkJCSBzZWxmLT5oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kLAorCQkJCQkJCQkgbGV2ZWwgKyAxLCByb3csCisJCQkJCQkJCSByb3dfb2Zmc2V0LAorCQkJCQkJCQkgaXNfY3VycmVudF9lbnRyeSk7CitvdXQ6CisJcmV0dXJuIHJvdyAtIGZpcnN0X3JvdzsKK30KKworc3RhdGljIGludCBoaXN0X2Jyb3dzZXJfX3Nob3dfY2FsbGNoYWluKHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYsCisJCQkJCXN0cnVjdCByYl9yb290ICpjaGFpbiwKKwkJCQkJaW50IGxldmVsLCB1bnNpZ25lZCBzaG9ydCByb3csCisJCQkJCW9mZl90ICpyb3dfb2Zmc2V0LAorCQkJCQlib29sICppc19jdXJyZW50X2VudHJ5KQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKwlpbnQgZmlyc3Rfcm93ID0gcm93OworCisJZm9yIChuZCA9IHJiX2ZpcnN0KGNoYWluKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlID0gcmJfZW50cnkobmQsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisKKwkJcm93ICs9IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW5fbm9kZShzZWxmLCBub2RlLCBsZXZlbCwKKwkJCQkJCQkgcm93LCByb3dfb2Zmc2V0LAorCQkJCQkJCSBpc19jdXJyZW50X2VudHJ5KTsKKwkJaWYgKHJvdyA9PSBzZWxmLT5iLmhlaWdodCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByb3cgLSBmaXJzdF9yb3c7Cit9CisKK3N0YXRpYyBpbnQgaGlzdF9icm93c2VyX19zaG93X2VudHJ5KHN0cnVjdCBoaXN0X2Jyb3dzZXIgKnNlbGYsCisJCQkJICAgIHN0cnVjdCBoaXN0X2VudHJ5ICplbnRyeSwKKwkJCQkgICAgdW5zaWduZWQgc2hvcnQgcm93KQoreworCWNoYXIgc1syNTZdOworCWRvdWJsZSBwZXJjZW50OworCWludCBwcmludGVkID0gMDsKKwlpbnQgY29sb3IsIHdpZHRoID0gc2VsZi0+Yi53aWR0aDsKKwljaGFyIGZvbGRlZF9zaWduID0gJyAnOworCWJvb2wgY3VycmVudF9lbnRyeSA9IHVpX2Jyb3dzZXJfX2lzX2N1cnJlbnRfZW50cnkoJnNlbGYtPmIsIHJvdyk7CisJb2ZmX3Qgcm93X29mZnNldCA9IGVudHJ5LT5yb3dfb2Zmc2V0OworCisJaWYgKGN1cnJlbnRfZW50cnkpIHsKKwkJc2VsZi0+aGVfc2VsZWN0aW9uID0gZW50cnk7CisJCXNlbGYtPnNlbGVjdGlvbiA9ICZlbnRyeS0+bXM7CisJfQorCisJaWYgKHN5bWJvbF9jb25mLnVzZV9jYWxsY2hhaW4pIHsKKwkJZW50cnktPm1zLmhhc19jaGlsZHJlbiA9ICFSQl9FTVBUWV9ST09UKCZlbnRyeS0+c29ydGVkX2NoYWluKTsKKwkJZm9sZGVkX3NpZ24gPSBoaXN0X2VudHJ5X19mb2xkZWQoZW50cnkpOworCX0KKworCWlmIChyb3dfb2Zmc2V0ID09IDApIHsKKwkJaGlzdF9lbnRyeV9fc25wcmludGYoZW50cnksIHMsIHNpemVvZihzKSwgc2VsZi0+aGlzdHMsIE5VTEwsIGZhbHNlLAorCQkJCSAgICAgMCwgZmFsc2UsIHNlbGYtPmhpc3RzLT5zdGF0cy50b3RhbF9wZXJpb2QpOworCQlwZXJjZW50ID0gKGVudHJ5LT5wZXJpb2QgKiAxMDAuMCkgLyBzZWxmLT5oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOworCisJCWNvbG9yID0gSEVfQ09MT1JTRVRfU0VMRUNURUQ7CisJCWlmICghY3VycmVudF9lbnRyeSkgeworCQkJaWYgKHBlcmNlbnQgPj0gTUlOX1JFRCkKKwkJCQljb2xvciA9IEhFX0NPTE9SU0VUX1RPUDsKKwkJCWVsc2UgaWYgKHBlcmNlbnQgPj0gTUlOX0dSRUVOKQorCQkJCWNvbG9yID0gSEVfQ09MT1JTRVRfTUVESVVNOworCQkJZWxzZQorCQkJCWNvbG9yID0gSEVfQ09MT1JTRVRfTk9STUFMOworCQl9CisKKwkJU0xzbWdfc2V0X2NvbG9yKGNvbG9yKTsKKwkJU0xzbWdfZ290b3JjKHNlbGYtPmIudG9wICsgcm93LCBzZWxmLT5iLmxlZnQpOworCQlpZiAoc3ltYm9sX2NvbmYudXNlX2NhbGxjaGFpbikgeworCQkJc2xzbWdfcHJpbnRmKCIlYyAiLCBmb2xkZWRfc2lnbik7CisJCQl3aWR0aCAtPSAyOworCQl9CisJCXNsc21nX3dyaXRlX25zdHJpbmcocywgd2lkdGgpOworCQkrK3JvdzsKKwkJKytwcmludGVkOworCX0gZWxzZQorCQktLXJvd19vZmZzZXQ7CisKKwlpZiAoZm9sZGVkX3NpZ24gPT0gJy0nICYmIHJvdyAhPSBzZWxmLT5iLmhlaWdodCkgeworCQlwcmludGVkICs9IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hhaW4oc2VsZiwgJmVudHJ5LT5zb3J0ZWRfY2hhaW4sCisJCQkJCQkJMSwgcm93LCAmcm93X29mZnNldCwKKwkJCQkJCQkmY3VycmVudF9lbnRyeSk7CisJCWlmIChjdXJyZW50X2VudHJ5KQorCQkJc2VsZi0+aGVfc2VsZWN0aW9uID0gZW50cnk7CisJfQorCisJcmV0dXJuIHByaW50ZWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGlzdF9icm93c2VyX19yZWZyZXNoX2VudHJpZXMoc3RydWN0IHVpX2Jyb3dzZXIgKnNlbGYpCit7CisJdW5zaWduZWQgcm93ID0gMDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJc3RydWN0IGhpc3RfYnJvd3NlciAqaGIgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGhpc3RfYnJvd3NlciwgYik7CisKKwlpZiAoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9PSBOVUxMKQorCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gcmJfZmlyc3QoJmhiLT5oaXN0cy0+ZW50cmllcyk7CisKKwlmb3IgKG5kID0gc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCisJCWlmIChoLT5maWx0ZXJlZCkKKwkJCWNvbnRpbnVlOworCisJCXJvdyArPSBoaXN0X2Jyb3dzZXJfX3Nob3dfZW50cnkoaGIsIGgsIHJvdyk7CisJCWlmIChyb3cgPT0gc2VsZi0+aGVpZ2h0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJvdzsKK30KKworc3RhdGljIHZvaWQgY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbl9yYl90cmVlKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQgPSByYl9maXJzdCgmc2VsZi0+cmJfcm9vdCk7CisKKwlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCQlzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKmNoaWxkID0gcmJfZW50cnkobmQsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisJCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CisJCWludCBmaXJzdCA9IHRydWU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJmNoaWxkLT52YWwsIGxpc3QpIHsKKwkJCWlmIChmaXJzdCkgeworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGNoYWluLT5saXN0Lm5leHQgIT0gJmNoaWxkLT52YWwgfHwKKwkJCQkJCQkgcmJfZmlyc3QoJmNoaWxkLT5yYl9yb290KSAhPSBOVUxMOworCQkJfSBlbHNlCisJCQkJY2hhaW4tPm1zLmhhc19jaGlsZHJlbiA9IGNoYWluLT5saXN0Lm5leHQgPT0gJmNoaWxkLT52YWwgJiYKKwkJCQkJCQkgcmJfZmlyc3QoJmNoaWxkLT5yYl9yb290KSAhPSBOVUxMOworCQl9CisKKwkJY2FsbGNoYWluX25vZGVfX2luaXRfaGF2ZV9jaGlsZHJlbl9yYl90cmVlKGNoaWxkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IGNhbGxjaGFpbl9ub2RlICpzZWxmKQoreworCXN0cnVjdCBjYWxsY2hhaW5fbGlzdCAqY2hhaW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYWluLCAmc2VsZi0+dmFsLCBsaXN0KQorCQljaGFpbi0+bXMuaGFzX2NoaWxkcmVuID0gcmJfZmlyc3QoJnNlbGYtPnJiX3Jvb3QpICE9IE5VTEw7CisKKwljYWxsY2hhaW5fbm9kZV9faW5pdF9oYXZlX2NoaWxkcmVuX3JiX3RyZWUoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIGNhbGxjaGFpbl9faW5pdF9oYXZlX2NoaWxkcmVuKHN0cnVjdCByYl9yb290ICpzZWxmKQoreworCXN0cnVjdCByYl9ub2RlICpuZDsKKworCWZvciAobmQgPSByYl9maXJzdChzZWxmKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlID0gcmJfZW50cnkobmQsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisJCWNhbGxjaGFpbl9ub2RlX19pbml0X2hhdmVfY2hpbGRyZW4obm9kZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoaXN0X2VudHJ5X19pbml0X2hhdmVfY2hpbGRyZW4oc3RydWN0IGhpc3RfZW50cnkgKnNlbGYpCit7CisJaWYgKCFzZWxmLT5pbml0X2hhdmVfY2hpbGRyZW4pIHsKKwkJY2FsbGNoYWluX19pbml0X2hhdmVfY2hpbGRyZW4oJnNlbGYtPnNvcnRlZF9jaGFpbik7CisJCXNlbGYtPmluaXRfaGF2ZV9jaGlsZHJlbiA9IHRydWU7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJiX25vZGUgKmhpc3RzX19maWx0ZXJfZW50cmllcyhzdHJ1Y3QgcmJfbm9kZSAqbmQpCit7CisJd2hpbGUgKG5kICE9IE5VTEwpIHsKKwkJc3RydWN0IGhpc3RfZW50cnkgKmggPSByYl9lbnRyeShuZCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCQlpZiAoIWgtPmZpbHRlcmVkKQorCQkJcmV0dXJuIG5kOworCisJCW5kID0gcmJfbmV4dChuZCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqaGlzdHNfX2ZpbHRlcl9wcmV2X2VudHJpZXMoc3RydWN0IHJiX25vZGUgKm5kKQoreworCXdoaWxlIChuZCAhPSBOVUxMKSB7CisJCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJaWYgKCFoLT5maWx0ZXJlZCkKKwkJCXJldHVybiBuZDsKKworCQluZCA9IHJiX3ByZXYobmQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1aV9icm93c2VyX19oaXN0c19zZWVrKHN0cnVjdCB1aV9icm93c2VyICpzZWxmLAorCQkJCSAgIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqaDsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJYm9vbCBmaXJzdCA9IHRydWU7CisKKwlzd2l0Y2ggKHdoZW5jZSkgeworCWNhc2UgU0VFS19TRVQ6CisJCW5kID0gaGlzdHNfX2ZpbHRlcl9lbnRyaWVzKHJiX2ZpcnN0KHNlbGYtPmVudHJpZXMpKTsKKwkJYnJlYWs7CisJY2FzZSBTRUVLX0NVUjoKKwkJbmQgPSBzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5OworCQlnb3RvIGRvX29mZnNldDsKKwljYXNlIFNFRUtfRU5EOgorCQluZCA9IGhpc3RzX19maWx0ZXJfcHJldl9lbnRyaWVzKHJiX2xhc3Qoc2VsZi0+ZW50cmllcykpOworCQlmaXJzdCA9IGZhbHNlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBNb3ZlcyBub3QgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IHZpc2libGUgZW50cnkgaW52YWxpZGF0ZXMgaXRzCisJICogcm93X29mZnNldDoKKwkgKi8KKwloID0gcmJfZW50cnkoc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOworCWgtPnJvd19vZmZzZXQgPSAwOworCisJLyoKKwkgKiBIZXJlIHdlIGhhdmUgdG8gY2hlY2sgaWYgbmQgaXMgZXhwYW5kZWQgKCspLCBpZiBpdCBpcyB3ZSBjYW4ndCBnbworCSAqIHRoZSBuZXh0IHRvcCBsZXZlbCBoaXN0X2VudHJ5LCBpbnN0ZWFkIHdlIG11c3QgY29tcHV0ZSBhbiBvZmZzZXQgb2YKKwkgKiB3aGF0IF9ub3RfIHRvIHNob3cgYW5kIG5vdCBjaGFuZ2UgdGhlIGZpcnN0IHZpc2libGUgZW50cnkuCisJICoKKwkgKiBUaGlzIG9mZnNldCBpbmNyZW1lbnRzIHdoZW4gd2UgYXJlIGdvaW5nIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQKKwkgKiBkZWNyZWFzZXMgd2hlbiB3ZSdyZSBnb2luZyBmcm9tIGJvdHRvbSB0byB0b3AuCisJICoKKwkgKiBBcyB3ZSBkb24ndCBoYXZlIGJhY2twb2ludGVycyB0byB0aGUgdG9wIGxldmVsIGluIHRoZSBjYWxsY2hhaW5zCisJICogc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGFsd2F5cyBwcmludCB0aGUgd2hvbGUgaGlzdF9lbnRyeSBjYWxsY2hhaW4sCisJICogc2tpcHBpbmcgdGhlIGZpcnN0IG9uZXMgdGhhdCBhcmUgYmVmb3JlIHRoZSBmaXJzdCB2aXNpYmxlIGVudHJ5CisJICogYW5kIHN0b3Agd2hlbiB3ZSBwcmludGVkIGVub3VnaCBsaW5lcyB0byBmaWxsIHRoZSBzY3JlZW4uCisJICovCitkb19vZmZzZXQ6CisJaWYgKG9mZnNldCA+IDApIHsKKwkJZG8geworCQkJaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCQlpZiAoaC0+bXMudW5mb2xkZWQpIHsKKwkJCQl1MTYgcmVtYWluaW5nID0gaC0+bnJfcm93cyAtIGgtPnJvd19vZmZzZXQ7CisJCQkJaWYgKG9mZnNldCA+IHJlbWFpbmluZykgeworCQkJCQlvZmZzZXQgLT0gcmVtYWluaW5nOworCQkJCQloLT5yb3dfb2Zmc2V0ID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQloLT5yb3dfb2Zmc2V0ICs9IG9mZnNldDsKKwkJCQkJb2Zmc2V0ID0gMDsKKwkJCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IG5kOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQluZCA9IGhpc3RzX19maWx0ZXJfZW50cmllcyhyYl9uZXh0KG5kKSk7CisJCQlpZiAobmQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCS0tb2Zmc2V0OworCQkJc2VsZi0+Zmlyc3RfdmlzaWJsZV9lbnRyeSA9IG5kOworCQl9IHdoaWxlIChvZmZzZXQgIT0gMCk7CisJfSBlbHNlIGlmIChvZmZzZXQgPCAwKSB7CisJCXdoaWxlICgxKSB7CisJCQloID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJCWlmIChoLT5tcy51bmZvbGRlZCkgeworCQkJCWlmIChmaXJzdCkgeworCQkJCQlpZiAoLW9mZnNldCA+IGgtPnJvd19vZmZzZXQpIHsKKwkJCQkJCW9mZnNldCArPSBoLT5yb3dfb2Zmc2V0OworCQkJCQkJaC0+cm93X29mZnNldCA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQloLT5yb3dfb2Zmc2V0ICs9IG9mZnNldDsKKwkJCQkJCW9mZnNldCA9IDA7CisJCQkJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gbmQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmICgtb2Zmc2V0ID4gaC0+bnJfcm93cykgeworCQkJCQkJb2Zmc2V0ICs9IGgtPm5yX3Jvd3M7CisJCQkJCQloLT5yb3dfb2Zmc2V0ID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWgtPnJvd19vZmZzZXQgPSBoLT5ucl9yb3dzICsgb2Zmc2V0OworCQkJCQkJb2Zmc2V0ID0gMDsKKwkJCQkJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBuZDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQluZCA9IGhpc3RzX19maWx0ZXJfcHJldl9lbnRyaWVzKHJiX3ByZXYobmQpKTsKKwkJCWlmIChuZCA9PSBOVUxMKQorCQkJCWJyZWFrOworCQkJKytvZmZzZXQ7CisJCQlzZWxmLT5maXJzdF92aXNpYmxlX2VudHJ5ID0gbmQ7CisJCQlpZiAob2Zmc2V0ID09IDApIHsKKwkJCQkvKgorCQkJCSAqIExhc3QgdW5maWx0ZXJlZCBoaXN0X2VudHJ5LCBjaGVjayBpZiBpdCBpcworCQkJCSAqIHVuZm9sZGVkLCBpZiBpdCBpcyB0aGVuIHdlIHNob3VsZCBoYXZlCisJCQkJICogcm93X29mZnNldCBhdCBpdHMgbGFzdCBlbnRyeS4KKwkJCQkgKi8KKwkJCQloID0gcmJfZW50cnkobmQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJCQlpZiAoaC0+bXMudW5mb2xkZWQpCisJCQkJCWgtPnJvd19vZmZzZXQgPSBoLT5ucl9yb3dzOworCQkJCWJyZWFrOworCQkJfQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQorCX0gZWxzZSB7CisJCXNlbGYtPmZpcnN0X3Zpc2libGVfZW50cnkgPSBuZDsKKwkJaCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZSk7CisJCWgtPnJvd19vZmZzZXQgPSAwOworCX0KK30KKworc3RhdGljIGludCBjYWxsY2hhaW5fbm9kZV9fY291bnRfcm93c19yYl90cmVlKHN0cnVjdCBjYWxsY2hhaW5fbm9kZSAqc2VsZikKK3sKKwlpbnQgbiA9IDA7CisJc3RydWN0IHJiX25vZGUgKm5kOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KCZzZWxmLT5yYl9yb290KTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpjaGlsZCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgY2FsbGNoYWluX25vZGUsIHJiX25vZGUpOworCQlzdHJ1Y3QgY2FsbGNoYWluX2xpc3QgKmNoYWluOworCQljaGFyIGZvbGRlZF9zaWduID0gJyAnOyAvKiBObyBjaGlsZHJlbiAqLworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZjaGlsZC0+dmFsLCBsaXN0KSB7CisJCQkrK247CisJCQkvKiBXZSBuZWVkIHRoaXMgYmVjYXVzZSB3ZSBtYXkgbm90IGhhdmUgY2hpbGRyZW4gKi8KKwkJCWZvbGRlZF9zaWduID0gY2FsbGNoYWluX2xpc3RfX2ZvbGRlZChjaGFpbik7CisJCQlpZiAoZm9sZGVkX3NpZ24gPT0gJysnKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGZvbGRlZF9zaWduID09ICctJykgLyogSGF2ZSBjaGlsZHJlbiBhbmQgdGhleSdyZSB1bmZvbGRlZCAqLworCQkJbiArPSBjYWxsY2hhaW5fbm9kZV9fY291bnRfcm93c19yYl90cmVlKGNoaWxkKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBjYWxsY2hhaW5fbm9kZV9fY291bnRfcm93cyhzdHJ1Y3QgY2FsbGNoYWluX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGNhbGxjaGFpbl9saXN0ICpjaGFpbjsKKwlib29sIHVuZm9sZGVkID0gZmFsc2U7CisJaW50IG4gPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFpbiwgJm5vZGUtPnZhbCwgbGlzdCkgeworCQkrK247CisJCXVuZm9sZGVkID0gY2hhaW4tPm1zLnVuZm9sZGVkOworCX0KKworCWlmICh1bmZvbGRlZCkKKwkJbiArPSBjYWxsY2hhaW5fbm9kZV9fY291bnRfcm93c19yYl90cmVlKG5vZGUpOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgY2FsbGNoYWluX19jb3VudF9yb3dzKHN0cnVjdCByYl9yb290ICpjaGFpbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CisJaW50IG4gPSAwOworCisJZm9yIChuZCA9IHJiX2ZpcnN0KGNoYWluKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwkJc3RydWN0IGNhbGxjaGFpbl9ub2RlICpub2RlID0gcmJfZW50cnkobmQsIHN0cnVjdCBjYWxsY2hhaW5fbm9kZSwgcmJfbm9kZSk7CisJCW4gKz0gY2FsbGNoYWluX25vZGVfX2NvdW50X3Jvd3Mobm9kZSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBib29sIGhpc3RfYnJvd3Nlcl9fdG9nZ2xlX2ZvbGQoc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZikKK3sKKwlpZiAobWFwX3N5bWJvbF9fdG9nZ2xlX2ZvbGQoc2VsZi0+c2VsZWN0aW9uKSkgeworCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUgPSBzZWxmLT5oZV9zZWxlY3Rpb247CisKKwkJaGlzdF9lbnRyeV9faW5pdF9oYXZlX2NoaWxkcmVuKGhlKTsKKwkJc2VsZi0+aGlzdHMtPm5yX2VudHJpZXMgLT0gaGUtPm5yX3Jvd3M7CisKKwkJaWYgKGhlLT5tcy51bmZvbGRlZCkKKwkJCWhlLT5ucl9yb3dzID0gY2FsbGNoYWluX19jb3VudF9yb3dzKCZoZS0+c29ydGVkX2NoYWluKTsKKwkJZWxzZQorCQkJaGUtPm5yX3Jvd3MgPSAwOworCQlzZWxmLT5oaXN0cy0+bnJfZW50cmllcyArPSBoZS0+bnJfcm93czsKKwkJc2VsZi0+Yi5ucl9lbnRyaWVzID0gc2VsZi0+aGlzdHMtPm5yX2VudHJpZXM7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogSWYgaXQgZG9lc24ndCBoYXZlIGNoaWxkcmVuLCBubyB0b2dnbGluZyBwZXJmb3JtZWQgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgaGlzdF9icm93c2VyX19ydW4oc3RydWN0IGhpc3RfYnJvd3NlciAqc2VsZiwgY29uc3QgY2hhciAqdGl0bGUsCisJCQkgICAgIHN0cnVjdCBuZXd0RXhpdFN0cnVjdCAqZXMpCit7CisJY2hhciBzdHJbMjU2XSwgdW5pdDsKKwl1bnNpZ25lZCBsb25nIG5yX2V2ZW50cyA9IHNlbGYtPmhpc3RzLT5zdGF0cy5ucl9ldmVudHNbUEVSRl9SRUNPUkRfU0FNUExFXTsKKworCXNlbGYtPmIuZW50cmllcyA9ICZzZWxmLT5oaXN0cy0+ZW50cmllczsKKwlzZWxmLT5iLm5yX2VudHJpZXMgPSBzZWxmLT5oaXN0cy0+bnJfZW50cmllczsKKworCWhpc3RfYnJvd3Nlcl9fcmVmcmVzaF9kaW1lbnNpb25zKHNlbGYpOworCisJbnJfZXZlbnRzID0gY29udmVydF91bml0KG5yX2V2ZW50cywgJnVuaXQpOworCXNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJFdmVudHM6ICVsdSVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCisJCSBucl9ldmVudHMsIHVuaXQpOworCW5ld3REcmF3Um9vdFRleHQoMCwgMCwgc3RyKTsKKworCWlmICh1aV9icm93c2VyX19zaG93KCZzZWxmLT5iLCB0aXRsZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sICdBJyk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCAnYScpOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmIuZm9ybSwgJz8nKTsKKwluZXd0Rm9ybUFkZEhvdEtleShzZWxmLT5iLmZvcm0sICdoJyk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCAnSCcpOworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmIuZm9ybSwgJ2QnKTsKKworCW5ld3RGb3JtQWRkSG90S2V5KHNlbGYtPmIuZm9ybSwgTkVXVF9LRVlfTEVGVCk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCBORVdUX0tFWV9SSUdIVCk7CisJbmV3dEZvcm1BZGRIb3RLZXkoc2VsZi0+Yi5mb3JtLCBORVdUX0tFWV9FTlRFUik7CisKKwl3aGlsZSAoMSkgeworCQl1aV9icm93c2VyX19ydW4oJnNlbGYtPmIsIGVzKTsKKworCQlpZiAoZXMtPnJlYXNvbiAhPSBORVdUX0VYSVRfSE9US0VZKQorCQkJYnJlYWs7CisJCXN3aXRjaCAoZXMtPnUua2V5KSB7CisJCWNhc2UgJ2QnOiB7IC8qIERlYnVnICovCisJCQlzdGF0aWMgaW50IHNlcTsKKwkJCXN0cnVjdCBoaXN0X2VudHJ5ICpoID0gcmJfZW50cnkoc2VsZi0+Yi5maXJzdF92aXNpYmxlX2VudHJ5LAorCQkJCQkJCXN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKKwkJCXVpX2hlbHBsaW5lX19wb3AoKTsKKwkJCXVpX2hlbHBsaW5lX19mcHVzaCgiJWQ6IG5yX2VudD0oJWQsJWQpLCBoZWlnaHQ9JWQsIGlkeD0lZCwgZnZlOiBpZHg9JWQsIHJvd19vZmY9JWQsIG5yb3dzPSVkIiwKKwkJCQkJICAgc2VxKyssIHNlbGYtPmIubnJfZW50cmllcywKKwkJCQkJICAgc2VsZi0+aGlzdHMtPm5yX2VudHJpZXMsCisJCQkJCSAgIHNlbGYtPmIuaGVpZ2h0LAorCQkJCQkgICBzZWxmLT5iLmluZGV4LAorCQkJCQkgICBzZWxmLT5iLmZpcnN0X3Zpc2libGVfZW50cnlfaWR4LAorCQkJCQkgICBoLT5yb3dfb2Zmc2V0LCBoLT5ucl9yb3dzKTsKKwkJfQorCQkJY29udGludWU7CisJCWNhc2UgTkVXVF9LRVlfRU5URVI6CisJCQlpZiAoaGlzdF9icm93c2VyX190b2dnbGVfZm9sZChzZWxmKSkKKwkJCQlicmVhazsKKwkJCS8qIGZhbGwgdGhydSAqLworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKaW5kZXggOWJmMGY0MC4uNGFmNWJkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwpAQCAtNjAyLDggKzYwMiwxNSBAQAogCQkJcmV0dXJuIEVWVF9GQUlMRUQ7CiAJfQogCi0JLyogV2Ugc2hvdWxkIGZpbmQgYSBuaWNlIHdheSB0byBvdmVycmlkZSB0aGUgYWNjZXNzIHR5cGUgKi8KLQlhdHRyLT5icF9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl80OworCS8qCisJICogV2Ugc2hvdWxkIGZpbmQgYSBuaWNlIHdheSB0byBvdmVycmlkZSB0aGUgYWNjZXNzIGxlbmd0aAorCSAqIFByb3ZpZGUgc29tZSBkZWZhdWx0cyBmb3Igbm93CisJICovCisJaWYgKGF0dHItPmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9YKQorCQlhdHRyLT5icF9sZW4gPSBzaXplb2YobG9uZyk7CisJZWxzZQorCQlhdHRyLT5icF9sZW4gPSBIV19CUkVBS1BPSU5UX0xFTl80OworCiAJYXR0ci0+dHlwZSA9IFBFUkZfVFlQRV9CUkVBS1BPSU5UOwogCiAJcmV0dXJuIEVWVF9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCA5MTRjNjcwLi4yZTY2NWNiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBwcm9iZS1ldmVudC5jIDogcGVyZi1wcm9iZSBkZWZpbml0aW9uIHRvIGtwcm9iZV9ldmVudHMgZm9ybWF0IGNvbnZlcnRlcgorICogcHJvYmUtZXZlbnQuYyA6IHBlcmYtcHJvYmUgZGVmaW5pdGlvbiB0byBwcm9iZV9ldmVudHMgZm9ybWF0IGNvbnZlcnRlcgogICoKICAqIFdyaXR0ZW4gYnkgTWFzYW1pIEhpcmFtYXRzdSA8bWhpcmFtYXRAcmVkaGF0LmNvbT4KICAqCkBAIC0xMjAsOCArMTIwLDExIEBACiAJcmV0dXJuIG9wZW4obWFjaGluZS52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmRzby0+bG9uZ19uYW1lLCBPX1JET05MWSk7CiB9CiAKLS8qIENvbnZlcnQgdHJhY2UgcG9pbnQgdG8gcHJvYmUgcG9pbnQgd2l0aCBkZWJ1Z2luZm8gKi8KLXN0YXRpYyBpbnQgY29udmVydF90b19wZXJmX3Byb2JlX3BvaW50KHN0cnVjdCBrcHJvYmVfdHJhY2VfcG9pbnQgKnRwLAorLyoKKyAqIENvbnZlcnQgdHJhY2UgcG9pbnQgdG8gcHJvYmUgcG9pbnQgd2l0aCBkZWJ1Z2luZm8KKyAqIEN1cnJlbnRseSBvbmx5IGhhbmRsZXMga3Byb2Jlcy4KKyAqLworc3RhdGljIGludCBrcHJvYmVfY29udmVydF90b19wZXJmX3Byb2JlKHN0cnVjdCBwcm9iZV90cmFjZV9wb2ludCAqdHAsCiAJCQkJICAgICAgIHN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCkKIHsKIAlzdHJ1Y3Qgc3ltYm9sICpzeW07CkBAIC0xNTEsOCArMTU0LDggQEAKIH0KIAogLyogVHJ5IHRvIGZpbmQgcGVyZl9wcm9iZV9ldmVudCB3aXRoIGRlYnVnaW5mbyAqLwotc3RhdGljIGludCB0cnlfdG9fZmluZF9rcHJvYmVfdHJhY2VfZXZlbnRzKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkJCSAgIHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzLAorc3RhdGljIGludCB0cnlfdG9fZmluZF9wcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCQkJICAgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywKIAkJCQkJICAgaW50IG1heF90ZXZzKQogewogCWJvb2wgbmVlZF9kd2FyZiA9IHBlcmZfcHJvYmVfZXZlbnRfbmVlZF9kd2FyZihwZXYpOwpAQCAtMTY5LDExICsxNzIsMTEgQEAKIAl9CiAKIAkvKiBTZWFyY2hpbmcgdHJhY2UgZXZlbnRzIGNvcnJlc3BvbmRpbmcgdG8gcHJvYmUgZXZlbnQgKi8KLQludGV2cyA9IGZpbmRfa3Byb2JlX3RyYWNlX2V2ZW50cyhmZCwgcGV2LCB0ZXZzLCBtYXhfdGV2cyk7CisJbnRldnMgPSBmaW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhmZCwgcGV2LCB0ZXZzLCBtYXhfdGV2cyk7CiAJY2xvc2UoZmQpOwogCiAJaWYgKG50ZXZzID4gMCkgewkvKiBTdWNjZWVkZWQgdG8gZmluZCB0cmFjZSBldmVudHMgKi8KLQkJcHJfZGVidWcoImZpbmQgJWQga3Byb2JlX3RyYWNlX2V2ZW50cy5cbiIsIG50ZXZzKTsKKwkJcHJfZGVidWcoImZpbmQgJWQgcHJvYmVfdHJhY2VfZXZlbnRzLlxuIiwgbnRldnMpOwogCQlyZXR1cm4gbnRldnM7CiAJfQogCkBAIC0xOTUsNiArMTk4LDY1IEBACiAJcmV0dXJuIG50ZXZzOwogfQogCisvKgorICogRmluZCBhIHNyYyBmaWxlIGZyb20gYSBEV0FSRiB0YWcgcGF0aC4gUHJlcGVuZCBvcHRpb25hbCBzb3VyY2UgcGF0aCBwcmVmaXgKKyAqIGFuZCBjaG9wIG9mZiBsZWFkaW5nIGRpcmVjdG9yaWVzIHRoYXQgZG8gbm90IGV4aXN0LiBSZXN1bHQgaXMgcGFzc2VkIGJhY2sgYXMKKyAqIGEgbmV3bHkgYWxsb2NhdGVkIHBhdGggb24gc3VjY2Vzcy4KKyAqIFJldHVybiAwIGlmIGZpbGUgd2FzIGZvdW5kIGFuZCByZWFkYWJsZSwgLWVycm5vIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBnZXRfcmVhbF9wYXRoKGNvbnN0IGNoYXIgKnJhd19wYXRoLCBjb25zdCBjaGFyICpjb21wX2RpciwKKwkJCSBjaGFyICoqbmV3X3BhdGgpCit7CisJY29uc3QgY2hhciAqcHJlZml4ID0gc3ltYm9sX2NvbmYuc291cmNlX3ByZWZpeDsKKworCWlmICghcHJlZml4KSB7CisJCWlmIChyYXdfcGF0aFswXSAhPSAnLycgJiYgY29tcF9kaXIpCisJCQkvKiBJZiBub3QgYW4gYWJzb2x1dGUgcGF0aCwgdHJ5IHRvIHVzZSBjb21wX2RpciAqLworCQkJcHJlZml4ID0gY29tcF9kaXI7CisJCWVsc2UgeworCQkJaWYgKGFjY2VzcyhyYXdfcGF0aCwgUl9PSykgPT0gMCkgeworCQkJCSpuZXdfcGF0aCA9IHN0cmR1cChyYXdfcGF0aCk7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLWVycm5vOworCQl9CisJfQorCisJKm5ld19wYXRoID0gbWFsbG9jKChzdHJsZW4ocHJlZml4KSArIHN0cmxlbihyYXdfcGF0aCkgKyAyKSk7CisJaWYgKCEqbmV3X3BhdGgpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yICg7OykgeworCQlzcHJpbnRmKCpuZXdfcGF0aCwgIiVzLyVzIiwgcHJlZml4LCByYXdfcGF0aCk7CisKKwkJaWYgKGFjY2VzcygqbmV3X3BhdGgsIFJfT0spID09IDApCisJCQlyZXR1cm4gMDsKKworCQlpZiAoIXN5bWJvbF9jb25mLnNvdXJjZV9wcmVmaXgpCisJCQkvKiBJbiBjYXNlIG9mIHNlYXJjaGluZyBjb21wX2RpciwgZG9uJ3QgcmV0cnkgKi8KKwkJCXJldHVybiAtZXJybm87CisKKwkJc3dpdGNoIChlcnJubykgeworCQljYXNlIEVOQU1FVE9PTE9ORzoKKwkJY2FzZSBFTk9FTlQ6CisJCWNhc2UgRVJPRlM6CisJCWNhc2UgRUZBVUxUOgorCQkJcmF3X3BhdGggPSBzdHJjaHIoKytyYXdfcGF0aCwgJy8nKTsKKwkJCWlmICghcmF3X3BhdGgpIHsKKwkJCQlmcmVlKCpuZXdfcGF0aCk7CisJCQkJKm5ld19wYXRoID0gTlVMTDsKKwkJCQlyZXR1cm4gLUVOT0VOVDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCisJCWRlZmF1bHQ6CisJCQlmcmVlKCpuZXdfcGF0aCk7CisJCQkqbmV3X3BhdGggPSBOVUxMOworCQkJcmV0dXJuIC1lcnJubzsKKwkJfQorCX0KK30KKwogI2RlZmluZSBMSU5FQlVGX1NJWkUgMjU2CiAjZGVmaW5lIE5SX0FERElUSU9OQUxfTElORVMgMgogCkBAIC0yNDQsNiArMzA2LDcgQEAKIAlzdHJ1Y3QgbGluZV9ub2RlICpsbjsKIAlGSUxFICpmcDsKIAlpbnQgZmQsIHJldDsKKwljaGFyICp0bXA7CiAKIAkvKiBTZWFyY2ggYSBsaW5lIHJhbmdlICovCiAJcmV0ID0gaW5pdF92bWxpbnV4KCk7CkBAIC0yNjYsNiArMzI5LDE1IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogQ29udmVydCBzb3VyY2UgZmlsZSBwYXRoICovCisJdG1wID0gbHItPnBhdGg7CisJcmV0ID0gZ2V0X3JlYWxfcGF0aCh0bXAsIGxyLT5jb21wX2RpciwgJmxyLT5wYXRoKTsKKwlmcmVlKHRtcCk7CS8qIEZyZWUgb2xkIHBhdGggKi8KKwlpZiAocmV0IDwgMCkgeworCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCBzb3VyY2UgZmlsZS4gKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAlzZXR1cF9wYWdlcigpOwogCiAJaWYgKGxyLT5mdW5jdGlvbikKQEAgLTMwOCw4ICszODAsOCBAQAogCiAjZWxzZQkvKiAhRFdBUkZfU1VQUE9SVCAqLwogCi1zdGF0aWMgaW50IGNvbnZlcnRfdG9fcGVyZl9wcm9iZV9wb2ludChzdHJ1Y3Qga3Byb2JlX3RyYWNlX3BvaW50ICp0cCwKLQkJCQkJc3RydWN0IHBlcmZfcHJvYmVfcG9pbnQgKnBwKQorc3RhdGljIGludCBrcHJvYmVfY29udmVydF90b19wZXJmX3Byb2JlKHN0cnVjdCBwcm9iZV90cmFjZV9wb2ludCAqdHAsCisJCQkJICAgICAgIHN0cnVjdCBwZXJmX3Byb2JlX3BvaW50ICpwcCkKIHsKIAlwcC0+ZnVuY3Rpb24gPSBzdHJkdXAodHAtPnN5bWJvbCk7CiAJaWYgKHBwLT5mdW5jdGlvbiA9PSBOVUxMKQpAQCAtMzIwLDggKzM5Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RvX2ZpbmRfa3Byb2JlX3RyYWNlX2V2ZW50cyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAotCQkJCXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzIF9fdW51c2VkLAorc3RhdGljIGludCB0cnlfdG9fZmluZF9wcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCQlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKip0ZXZzIF9fdW51c2VkLAogCQkJCWludCBtYXhfdGV2cyBfX3VudXNlZCkKIHsKIAlpZiAocGVyZl9wcm9iZV9ldmVudF9uZWVkX2R3YXJmKHBldikpIHsKQEAgLTU1Nyw3ICs2MjksNyBAQAogLyogUGFyc2UgcGVyZi1wcm9iZSBldmVudCBhcmd1bWVudCAqLwogc3RhdGljIGludCBwYXJzZV9wZXJmX3Byb2JlX2FyZyhjaGFyICpzdHIsIHN0cnVjdCBwZXJmX3Byb2JlX2FyZyAqYXJnKQogewotCWNoYXIgKnRtcDsKKwljaGFyICp0bXAsICpnb29kbmFtZTsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9hcmdfZmllbGQgKipmaWVsZHA7CiAKIAlwcl9kZWJ1ZygicGFyc2luZyBhcmc6ICVzIGludG8gIiwgc3RyKTsKQEAgLTU4MCw3ICs2NTIsNyBAQAogCQlwcl9kZWJ1ZygidHlwZTolcyAiLCBhcmctPnR5cGUpOwogCX0KIAotCXRtcCA9IHN0cnBicmsoc3RyLCAiLS4iKTsKKwl0bXAgPSBzdHJwYnJrKHN0ciwgIi0uWyIpOwogCWlmICghaXNfY192YXJuYW1lKHN0cikgfHwgIXRtcCkgewogCQkvKiBBIHZhcmlhYmxlLCByZWdpc3Rlciwgc3ltYm9sIG9yIHNwZWNpYWwgdmFsdWUgKi8KIAkJYXJnLT52YXIgPSBzdHJkdXAoc3RyKTsKQEAgLTU5MCwxMCArNjYyLDExIEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIFN0cnVjdHVyZSBmaWVsZHMgKi8KKwkvKiBTdHJ1Y3R1cmUgZmllbGRzIG9yIGFycmF5IGVsZW1lbnQgKi8KIAlhcmctPnZhciA9IHN0cm5kdXAoc3RyLCB0bXAgLSBzdHIpOwogCWlmIChhcmctPnZhciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKKwlnb29kbmFtZSA9IGFyZy0+dmFyOwogCXByX2RlYnVnKCIlcywgIiwgYXJnLT52YXIpOwogCWZpZWxkcCA9ICZhcmctPmZpZWxkOwogCkBAIC02MDEsMjIgKzY3NCwzOCBAQAogCQkqZmllbGRwID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcGVyZl9wcm9iZV9hcmdfZmllbGQpKTsKIAkJaWYgKCpmaWVsZHAgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoKnRtcCA9PSAnLicpIHsKLQkJCXN0ciA9IHRtcCArIDE7Ci0JCQkoKmZpZWxkcCktPnJlZiA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKHRtcFsxXSA9PSAnPicpIHsKLQkJCXN0ciA9IHRtcCArIDI7CisJCWlmICgqdG1wID09ICdbJykgewkvKiBBcnJheSAqLworCQkJc3RyID0gdG1wOworCQkJKCpmaWVsZHApLT5pbmRleCA9IHN0cnRvbChzdHIgKyAxLCAmdG1wLCAwKTsKIAkJCSgqZmllbGRwKS0+cmVmID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCXNlbWFudGljX2Vycm9yKCJBcmd1bWVudCBwYXJzZSBlcnJvcjogJXNcbiIsIHN0cik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmICgqdG1wICE9ICddJyB8fCB0bXAgPT0gc3RyICsgMSkgeworCQkJCXNlbWFudGljX2Vycm9yKCJBcnJheSBpbmRleCBtdXN0IGJlIGEiCisJCQkJCQkiIG51bWJlci5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJdG1wKys7CisJCQlpZiAoKnRtcCA9PSAnXDAnKQorCQkJCXRtcCA9IE5VTEw7CisJCX0gZWxzZSB7CQkvKiBTdHJ1Y3R1cmUgKi8KKwkJCWlmICgqdG1wID09ICcuJykgeworCQkJCXN0ciA9IHRtcCArIDE7CisJCQkJKCpmaWVsZHApLT5yZWYgPSBmYWxzZTsKKwkJCX0gZWxzZSBpZiAodG1wWzFdID09ICc+JykgeworCQkJCXN0ciA9IHRtcCArIDI7CisJCQkJKCpmaWVsZHApLT5yZWYgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQlzZW1hbnRpY19lcnJvcigiQXJndW1lbnQgcGFyc2UgZXJyb3I6ICVzXG4iLAorCQkJCQkgICAgICAgc3RyKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXRtcCA9IHN0cnBicmsoc3RyLCAiLS5bIik7CiAJCX0KLQotCQl0bXAgPSBzdHJwYnJrKHN0ciwgIi0uIik7CiAJCWlmICh0bXApIHsKIAkJCSgqZmllbGRwKS0+bmFtZSA9IHN0cm5kdXAoc3RyLCB0bXAgLSBzdHIpOwogCQkJaWYgKCgqZmllbGRwKS0+bmFtZSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOworCQkJaWYgKCpzdHIgIT0gJ1snKQorCQkJCWdvb2RuYW1lID0gKCpmaWVsZHApLT5uYW1lOwogCQkJcHJfZGVidWcoIiVzKCVkKSwgIiwgKCpmaWVsZHApLT5uYW1lLCAoKmZpZWxkcCktPnJlZik7CiAJCQlmaWVsZHAgPSAmKCpmaWVsZHApLT5uZXh0OwogCQl9CkBAIC02MjQsMTEgKzcxMywxMyBAQAogCSgqZmllbGRwKS0+bmFtZSA9IHN0cmR1cChzdHIpOwogCWlmICgoKmZpZWxkcCktPm5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCpzdHIgIT0gJ1snKQorCQlnb29kbmFtZSA9ICgqZmllbGRwKS0+bmFtZTsKIAlwcl9kZWJ1ZygiJXMoJWQpXG4iLCAoKmZpZWxkcCktPm5hbWUsICgqZmllbGRwKS0+cmVmKTsKIAotCS8qIElmIG5vIG5hbWUgaXMgc3BlY2lmaWVkLCBzZXQgdGhlIGxhc3QgZmllbGQgbmFtZSAqLworCS8qIElmIG5vIG5hbWUgaXMgc3BlY2lmaWVkLCBzZXQgdGhlIGxhc3QgZmllbGQgbmFtZSAobm90IGFycmF5IGluZGV4KSovCiAJaWYgKCFhcmctPm5hbWUpIHsKLQkJYXJnLT5uYW1lID0gc3RyZHVwKCgqZmllbGRwKS0+bmFtZSk7CisJCWFyZy0+bmFtZSA9IHN0cmR1cChnb29kbmFtZSk7CiAJCWlmIChhcmctPm5hbWUgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTY5MywxNiArNzg0LDE3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBQYXJzZSBrcHJvYmVfZXZlbnRzIGV2ZW50IGludG8gc3RydWN0IHByb2JlX3BvaW50ICovCi1pbnQgcGFyc2Vfa3Byb2JlX3RyYWNlX2NvbW1hbmQoY29uc3QgY2hhciAqY21kLCBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCisvKiBQYXJzZSBwcm9iZV9ldmVudHMgZXZlbnQgaW50byBzdHJ1Y3QgcHJvYmVfcG9pbnQgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcHJvYmVfdHJhY2VfY29tbWFuZChjb25zdCBjaGFyICpjbWQsCisJCQkJCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2KQogewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfcG9pbnQgKnRwID0gJnRldi0+cG9pbnQ7CisJc3RydWN0IHByb2JlX3RyYWNlX3BvaW50ICp0cCA9ICZ0ZXYtPnBvaW50OwogCWNoYXIgcHI7CiAJY2hhciAqcDsKIAlpbnQgcmV0LCBpLCBhcmdjOwogCWNoYXIgKiphcmd2OwogCi0JcHJfZGVidWcoIlBhcnNpbmcga3Byb2JlX2V2ZW50czogJXNcbiIsIGNtZCk7CisJcHJfZGVidWcoIlBhcnNpbmcgcHJvYmVfZXZlbnRzOiAlc1xuIiwgY21kKTsKIAlhcmd2ID0gYXJndl9zcGxpdChjbWQsICZhcmdjKTsKIAlpZiAoIWFyZ3YpIHsKIAkJcHJfZGVidWcoIkZhaWxlZCB0byBzcGxpdCBhcmd1bWVudHMuXG4iKTsKQEAgLTczNCw3ICs4MjYsNyBAQAogCQl0cC0+b2Zmc2V0ID0gMDsKIAogCXRldi0+bmFyZ3MgPSBhcmdjIC0gMjsKLQl0ZXYtPmFyZ3MgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnKSAqIHRldi0+bmFyZ3MpOworCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZykgKiB0ZXYtPm5hcmdzKTsKIAlpZiAodGV2LT5hcmdzID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC03NzYsOCArODY4LDExIEBACiAJbGVuIC09IHJldDsKIAogCXdoaWxlIChmaWVsZCkgewotCQlyZXQgPSBlX3NucHJpbnRmKHRtcCwgbGVuLCAiJXMlcyIsIGZpZWxkLT5yZWYgPyAiLT4iIDogIi4iLAotCQkJCSBmaWVsZC0+bmFtZSk7CisJCWlmIChmaWVsZC0+bmFtZVswXSA9PSAnWycpCisJCQlyZXQgPSBlX3NucHJpbnRmKHRtcCwgbGVuLCAiJXMiLCBmaWVsZC0+bmFtZSk7CisJCWVsc2UKKwkJCXJldCA9IGVfc25wcmludGYodG1wLCBsZW4sICIlcyVzIiwKKwkJCQkJIGZpZWxkLT5yZWYgPyAiLT4iIDogIi4iLCBmaWVsZC0+bmFtZSk7CiAJCWlmIChyZXQgPD0gMCkKIAkJCWdvdG8gZXJyb3I7CiAJCXRtcCArPSByZXQ7CkBAIC04NzcsMTMgKzk3MiwxMyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19zeW50aGVzaXplX2twcm9iZV90cmFjZV9hcmdfcmVmKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmLAorc3RhdGljIGludCBfX3N5bnRoZXNpemVfcHJvYmVfdHJhY2VfYXJnX3JlZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmLAogCQkJCQkgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuLAogCQkJCQkgICAgIGludCBkZXB0aCkKIHsKIAlpbnQgcmV0OwogCWlmIChyZWYtPm5leHQpIHsKLQkJZGVwdGggPSBfX3N5bnRoZXNpemVfa3Byb2JlX3RyYWNlX2FyZ19yZWYocmVmLT5uZXh0LCBidWYsCisJCWRlcHRoID0gX19zeW50aGVzaXplX3Byb2JlX3RyYWNlX2FyZ19yZWYocmVmLT5uZXh0LCBidWYsCiAJCQkJCQkJIGJ1ZmxlbiwgZGVwdGggKyAxKTsKIAkJaWYgKGRlcHRoIDwgMCkKIAkJCWdvdG8gb3V0OwpAQCAtOTAxLDkgKzk5NiwxMCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfYXJnKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnICphcmcsCitzdGF0aWMgaW50IHN5bnRoZXNpemVfcHJvYmVfdHJhY2VfYXJnKHN0cnVjdCBwcm9iZV90cmFjZV9hcmcgKmFyZywKIAkJCQkgICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQogeworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICpyZWYgPSBhcmctPnJlZjsKIAlpbnQgcmV0LCBkZXB0aCA9IDA7CiAJY2hhciAqdG1wID0gYnVmOwogCkBAIC05MTcsMTYgKzEwMTMsMjQgQEAKIAlidWYgKz0gcmV0OwogCWJ1ZmxlbiAtPSByZXQ7CiAKKwkvKiBTcGVjaWFsIGNhc2U6IEBYWFggKi8KKwlpZiAoYXJnLT52YWx1ZVswXSA9PSAnQCcgJiYgYXJnLT5yZWYpCisJCQlyZWYgPSByZWYtPm5leHQ7CisKIAkvKiBEZXJlZmVyZW5jaW5nIGFyZ3VtZW50cyAqLwotCWlmIChhcmctPnJlZikgewotCQlkZXB0aCA9IF9fc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfYXJnX3JlZihhcmctPnJlZiwgJmJ1ZiwKKwlpZiAocmVmKSB7CisJCWRlcHRoID0gX19zeW50aGVzaXplX3Byb2JlX3RyYWNlX2FyZ19yZWYocmVmLCAmYnVmLAogCQkJCQkJCSAgJmJ1ZmxlbiwgMSk7CiAJCWlmIChkZXB0aCA8IDApCiAJCQlyZXR1cm4gZGVwdGg7CiAJfQogCiAJLyogUHJpbnQgYXJndW1lbnQgdmFsdWUgKi8KLQlyZXQgPSBlX3NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMiLCBhcmctPnZhbHVlKTsKKwlpZiAoYXJnLT52YWx1ZVswXSA9PSAnQCcgJiYgYXJnLT5yZWYpCisJCXJldCA9IGVfc25wcmludGYoYnVmLCBidWZsZW4sICIlcyUrbGQiLCBhcmctPnZhbHVlLAorCQkJCSBhcmctPnJlZi0+b2Zmc2V0KTsKKwllbHNlCisJCXJldCA9IGVfc25wcmludGYoYnVmLCBidWZsZW4sICIlcyIsIGFyZy0+dmFsdWUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCWJ1ZiArPSByZXQ7CkBAIC05NTEsOSArMTA1NSw5IEBACiAJcmV0dXJuIGJ1ZiAtIHRtcDsKIH0KIAotY2hhciAqc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfY29tbWFuZChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCitjaGFyICpzeW50aGVzaXplX3Byb2JlX3RyYWNlX2NvbW1hbmQoc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCiB7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9wb2ludCAqdHAgPSAmdGV2LT5wb2ludDsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgKnRwID0gJnRldi0+cG9pbnQ7CiAJY2hhciAqYnVmOwogCWludCBpLCBsZW4sIHJldDsKIApAQCAtOTY5LDcgKzEwNzMsNyBAQAogCQlnb3RvIGVycm9yOwogCiAJZm9yIChpID0gMDsgaSA8IHRldi0+bmFyZ3M7IGkrKykgewotCQlyZXQgPSBzeW50aGVzaXplX2twcm9iZV90cmFjZV9hcmcoJnRldi0+YXJnc1tpXSwgYnVmICsgbGVuLAorCQlyZXQgPSBzeW50aGVzaXplX3Byb2JlX3RyYWNlX2FyZygmdGV2LT5hcmdzW2ldLCBidWYgKyBsZW4sCiAJCQkJCQkgIE1BWF9DTURMRU4gLSBsZW4pOwogCQlpZiAocmV0IDw9IDApCiAJCQlnb3RvIGVycm9yOwpAQCAtOTgyLDcgKzEwODYsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgY29udmVydF90b19wZXJmX3Byb2JlX2V2ZW50KHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldiwKK3N0YXRpYyBpbnQgY29udmVydF90b19wZXJmX3Byb2JlX2V2ZW50KHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2LAogCQkJCXN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYpCiB7CiAJY2hhciBidWZbNjRdID0gIiI7CkBAIC05OTUsNyArMTA5OSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogQ29udmVydCB0cmFjZV9wb2ludCB0byBwcm9iZV9wb2ludCAqLwotCXJldCA9IGNvbnZlcnRfdG9fcGVyZl9wcm9iZV9wb2ludCgmdGV2LT5wb2ludCwgJnBldi0+cG9pbnQpOworCXJldCA9IGtwcm9iZV9jb252ZXJ0X3RvX3BlcmZfcHJvYmUoJnRldi0+cG9pbnQsICZwZXYtPnBvaW50KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTAwOCw3ICsxMTEyLDcgQEAKIAkJaWYgKHRldi0+YXJnc1tpXS5uYW1lKQogCQkJcGV2LT5hcmdzW2ldLm5hbWUgPSBzdHJkdXAodGV2LT5hcmdzW2ldLm5hbWUpOwogCQllbHNlIHsKLQkJCXJldCA9IHN5bnRoZXNpemVfa3Byb2JlX3RyYWNlX2FyZygmdGV2LT5hcmdzW2ldLAorCQkJcmV0ID0gc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9hcmcoJnRldi0+YXJnc1tpXSwKIAkJCQkJCQkgIGJ1ZiwgNjQpOwogCQkJcGV2LT5hcmdzW2ldLm5hbWUgPSBzdHJkdXAoYnVmKTsKIAkJfQpAQCAtMTA1OSw5ICsxMTYzLDkgQEAKIAltZW1zZXQocGV2LCAwLCBzaXplb2YoKnBldikpOwogfQogCi12b2lkIGNsZWFyX2twcm9iZV90cmFjZV9ldmVudChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCitzdGF0aWMgdm9pZCBjbGVhcl9wcm9iZV90cmFjZV9ldmVudChzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldikKIHsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYgKnJlZiwgKm5leHQ7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgKnJlZiwgKm5leHQ7CiAJaW50IGk7CiAKIAlpZiAodGV2LT5ldmVudCkKQEAgLTExMjIsNyArMTIyNiw3IEBACiB9CiAKIC8qIEdldCByYXcgc3RyaW5nIGxpc3Qgb2YgY3VycmVudCBrcHJvYmVfZXZlbnRzICovCi1zdGF0aWMgc3RydWN0IHN0cmxpc3QgKmdldF9rcHJvYmVfdHJhY2VfY29tbWFuZF9yYXdsaXN0KGludCBmZCkKK3N0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X3Byb2JlX3RyYWNlX2NvbW1hbmRfcmF3bGlzdChpbnQgZmQpCiB7CiAJaW50IHJldCwgaWR4OwogCUZJTEUgKmZwOwpAQCAtMTE5MCw3ICsxMjk0LDcgQEAKIGludCBzaG93X3BlcmZfcHJvYmVfZXZlbnRzKHZvaWQpCiB7CiAJaW50IGZkLCByZXQ7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCB0ZXY7CisJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50IHRldjsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCBwZXY7CiAJc3RydWN0IHN0cmxpc3QgKnJhd2xpc3Q7CiAJc3RydWN0IHN0cl9ub2RlICplbnQ7CkBAIC0xMjA3LDIwICsxMzExLDIwIEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIGZkOwogCi0JcmF3bGlzdCA9IGdldF9rcHJvYmVfdHJhY2VfY29tbWFuZF9yYXdsaXN0KGZkKTsKKwlyYXdsaXN0ID0gZ2V0X3Byb2JlX3RyYWNlX2NvbW1hbmRfcmF3bGlzdChmZCk7CiAJY2xvc2UoZmQpOwogCWlmICghcmF3bGlzdCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlzdHJsaXN0X19mb3JfZWFjaChlbnQsIHJhd2xpc3QpIHsKLQkJcmV0ID0gcGFyc2Vfa3Byb2JlX3RyYWNlX2NvbW1hbmQoZW50LT5zLCAmdGV2KTsKKwkJcmV0ID0gcGFyc2VfcHJvYmVfdHJhY2VfY29tbWFuZChlbnQtPnMsICZ0ZXYpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCXJldCA9IGNvbnZlcnRfdG9fcGVyZl9wcm9iZV9ldmVudCgmdGV2LCAmcGV2KTsKIAkJCWlmIChyZXQgPj0gMCkKIAkJCQlyZXQgPSBzaG93X3BlcmZfcHJvYmVfZXZlbnQoJnBldik7CiAJCX0KIAkJY2xlYXJfcGVyZl9wcm9iZV9ldmVudCgmcGV2KTsKLQkJY2xlYXJfa3Byb2JlX3RyYWNlX2V2ZW50KCZ0ZXYpOworCQljbGVhcl9wcm9iZV90cmFjZV9ldmVudCgmdGV2KTsKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKIAl9CkBAIC0xMjMwLDIwICsxMzM0LDE5IEBACiB9CiAKIC8qIEdldCBjdXJyZW50IHBlcmYtcHJvYmUgZXZlbnQgbmFtZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X2twcm9iZV90cmFjZV9ldmVudF9uYW1lcyhpbnQgZmQsIGJvb2wgaW5jbHVkZV9ncm91cCkKK3N0YXRpYyBzdHJ1Y3Qgc3RybGlzdCAqZ2V0X3Byb2JlX3RyYWNlX2V2ZW50X25hbWVzKGludCBmZCwgYm9vbCBpbmNsdWRlX2dyb3VwKQogewogCWNoYXIgYnVmWzEyOF07CiAJc3RydWN0IHN0cmxpc3QgKnNsLCAqcmF3bGlzdDsKIAlzdHJ1Y3Qgc3RyX25vZGUgKmVudDsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50IHRldjsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgdGV2OwogCWludCByZXQgPSAwOwogCiAJbWVtc2V0KCZ0ZXYsIDAsIHNpemVvZih0ZXYpKTsKLQotCXJhd2xpc3QgPSBnZXRfa3Byb2JlX3RyYWNlX2NvbW1hbmRfcmF3bGlzdChmZCk7CisJcmF3bGlzdCA9IGdldF9wcm9iZV90cmFjZV9jb21tYW5kX3Jhd2xpc3QoZmQpOwogCXNsID0gc3RybGlzdF9fbmV3KHRydWUsIE5VTEwpOwogCXN0cmxpc3RfX2Zvcl9lYWNoKGVudCwgcmF3bGlzdCkgewotCQlyZXQgPSBwYXJzZV9rcHJvYmVfdHJhY2VfY29tbWFuZChlbnQtPnMsICZ0ZXYpOworCQlyZXQgPSBwYXJzZV9wcm9iZV90cmFjZV9jb21tYW5kKGVudC0+cywgJnRldik7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJCWlmIChpbmNsdWRlX2dyb3VwKSB7CkBAIC0xMjUzLDcgKzEzNTYsNyBAQAogCQkJCXJldCA9IHN0cmxpc3RfX2FkZChzbCwgYnVmKTsKIAkJfSBlbHNlCiAJCQlyZXQgPSBzdHJsaXN0X19hZGQoc2wsIHRldi5ldmVudCk7Ci0JCWNsZWFyX2twcm9iZV90cmFjZV9ldmVudCgmdGV2KTsKKwkJY2xlYXJfcHJvYmVfdHJhY2VfZXZlbnQoJnRldik7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CiAJfQpAQCAtMTI2NiwxMyArMTM2OSwxMyBAQAogCXJldHVybiBzbDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9rcHJvYmVfdHJhY2VfZXZlbnQoaW50IGZkLCBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCitzdGF0aWMgaW50IHdyaXRlX3Byb2JlX3RyYWNlX2V2ZW50KGludCBmZCwgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYpCiB7CiAJaW50IHJldCA9IDA7Ci0JY2hhciAqYnVmID0gc3ludGhlc2l6ZV9rcHJvYmVfdHJhY2VfY29tbWFuZCh0ZXYpOworCWNoYXIgKmJ1ZiA9IHN5bnRoZXNpemVfcHJvYmVfdHJhY2VfY29tbWFuZCh0ZXYpOwogCiAJaWYgKCFidWYpIHsKLQkJcHJfZGVidWcoIkZhaWxlZCB0byBzeW50aGVzaXplIGtwcm9iZSB0cmFjZSBldmVudC5cbiIpOworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIHN5bnRoZXNpemUgcHJvYmUgdHJhY2UgZXZlbnQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMzI1LDEyICsxNDI4LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2FkZF9rcHJvYmVfdHJhY2VfZXZlbnRzKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkJICAgICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXZzLAorc3RhdGljIGludCBfX2FkZF9wcm9iZV90cmFjZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCQkgICAgIHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2cywKIAkJCQkgICAgIGludCBudGV2cywgYm9vbCBhbGxvd19zdWZmaXgpCiB7CiAJaW50IGksIGZkLCByZXQ7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldiA9IE5VTEw7CiAJY2hhciBidWZbNjRdOwogCWNvbnN0IGNoYXIgKmV2ZW50LCAqZ3JvdXA7CiAJc3RydWN0IHN0cmxpc3QgKm5hbWVsaXN0OwpAQCAtMTMzOSw3ICsxNDQyLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlyZXR1cm4gZmQ7CiAJLyogR2V0IGN1cnJlbnQgZXZlbnQgbmFtZXMgKi8KLQluYW1lbGlzdCA9IGdldF9rcHJvYmVfdHJhY2VfZXZlbnRfbmFtZXMoZmQsIGZhbHNlKTsKKwluYW1lbGlzdCA9IGdldF9wcm9iZV90cmFjZV9ldmVudF9uYW1lcyhmZCwgZmFsc2UpOwogCWlmICghbmFtZWxpc3QpIHsKIAkJcHJfZGVidWcoIkZhaWxlZCB0byBnZXQgY3VycmVudCBldmVudCBsaXN0LlxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMTM3NCw3ICsxNDc3LDcgQEAKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlicmVhazsKIAkJfQotCQlyZXQgPSB3cml0ZV9rcHJvYmVfdHJhY2VfZXZlbnQoZmQsIHRldik7CisJCXJldCA9IHdyaXRlX3Byb2JlX3RyYWNlX2V2ZW50KGZkLCB0ZXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCQkvKiBBZGQgYWRkZWQgZXZlbnQgbmFtZSB0byBuYW1lbGlzdCAqLwpAQCAtMTQxMSwyMSArMTUxNCwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY29udmVydF90b19rcHJvYmVfdHJhY2VfZXZlbnRzKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCi0JCQkJCSAgc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqKnRldnMsCitzdGF0aWMgaW50IGNvbnZlcnRfdG9fcHJvYmVfdHJhY2VfZXZlbnRzKHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCisJCQkJCSAgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywKIAkJCQkJICBpbnQgbWF4X3RldnMpCiB7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwogCWludCByZXQgPSAwLCBpOwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldjsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldjsKIAogCS8qIENvbnZlcnQgcGVyZl9wcm9iZV9ldmVudCB3aXRoIGRlYnVnaW5mbyAqLwotCXJldCA9IHRyeV90b19maW5kX2twcm9iZV90cmFjZV9ldmVudHMocGV2LCB0ZXZzLCBtYXhfdGV2cyk7CisJcmV0ID0gdHJ5X3RvX2ZpbmRfcHJvYmVfdHJhY2VfZXZlbnRzKHBldiwgdGV2cywgbWF4X3RldnMpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIEFsbG9jYXRlIHRyYWNlIGV2ZW50IGJ1ZmZlciAqLwotCXRldiA9ICp0ZXZzID0gemFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50KSk7CisJdGV2ID0gKnRldnMgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCkpOwogCWlmICh0ZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE0MzgsNyArMTU0MSw3IEBACiAJdGV2LT5wb2ludC5vZmZzZXQgPSBwZXYtPnBvaW50Lm9mZnNldDsKIAl0ZXYtPm5hcmdzID0gcGV2LT5uYXJnczsKIAlpZiAodGV2LT5uYXJncykgewotCQl0ZXYtPmFyZ3MgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnKQorCQl0ZXYtPmFyZ3MgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9hcmcpCiAJCQkJICAgKiB0ZXYtPm5hcmdzKTsKIAkJaWYgKHRldi0+YXJncyA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTQ3OSw3ICsxNTgyLDcgQEAKIAogCXJldHVybiAxOwogZXJyb3I6Ci0JY2xlYXJfa3Byb2JlX3RyYWNlX2V2ZW50KHRldik7CisJY2xlYXJfcHJvYmVfdHJhY2VfZXZlbnQodGV2KTsKIAlmcmVlKHRldik7CiAJKnRldnMgPSBOVUxMOwogCXJldHVybiByZXQ7CkBAIC0xNDg3LDcgKzE1OTAsNyBAQAogCiBzdHJ1Y3QgX19ldmVudF9wYWNrYWdlIHsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudAkJKnBldjsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50CSp0ZXZzOworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudAkqdGV2czsKIAlpbnQJCQkJbnRldnM7CiB9OwogCkBAIC0xNTEwLDcgKzE2MTMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBucGV2czsgaSsrKSB7CiAJCXBrZ3NbaV0ucGV2ID0gJnBldnNbaV07CiAJCS8qIENvbnZlcnQgd2l0aCBvciB3aXRob3V0IGRlYnVnaW5mbyAqLwotCQlyZXQgID0gY29udmVydF90b19rcHJvYmVfdHJhY2VfZXZlbnRzKHBrZ3NbaV0ucGV2LAorCQlyZXQgID0gY29udmVydF90b19wcm9iZV90cmFjZV9ldmVudHMocGtnc1tpXS5wZXYsCiAJCQkJCQkgICAgICAmcGtnc1tpXS50ZXZzLCBtYXhfdGV2cyk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlbmQ7CkBAIC0xNTE5LDI0ICsxNjIyLDI0IEBACiAKIAkvKiBMb29wIDI6IGFkZCBhbGwgZXZlbnRzICovCiAJZm9yIChpID0gMDsgaSA8IG5wZXZzICYmIHJldCA+PSAwOyBpKyspCi0JCXJldCA9IF9fYWRkX2twcm9iZV90cmFjZV9ldmVudHMocGtnc1tpXS5wZXYsIHBrZ3NbaV0udGV2cywKKwkJcmV0ID0gX19hZGRfcHJvYmVfdHJhY2VfZXZlbnRzKHBrZ3NbaV0ucGV2LCBwa2dzW2ldLnRldnMsCiAJCQkJCQlwa2dzW2ldLm50ZXZzLCBmb3JjZV9hZGQpOwogZW5kOgogCS8qIExvb3AgMzogY2xlYW51cCB0cmFjZSBldmVudHMgICovCiAJZm9yIChpID0gMDsgaSA8IG5wZXZzOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCBwa2dzW2ldLm50ZXZzOyBqKyspCi0JCQljbGVhcl9rcHJvYmVfdHJhY2VfZXZlbnQoJnBrZ3NbaV0udGV2c1tqXSk7CisJCQljbGVhcl9wcm9iZV90cmFjZV9ldmVudCgmcGtnc1tpXS50ZXZzW2pdKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGludCBmZCwgc3RydWN0IHN0cl9ub2RlICplbnQpCitzdGF0aWMgaW50IF9fZGVsX3RyYWNlX3Byb2JlX2V2ZW50KGludCBmZCwgc3RydWN0IHN0cl9ub2RlICplbnQpCiB7CiAJY2hhciAqcDsKIAljaGFyIGJ1ZlsxMjhdOwogCWludCByZXQ7CiAKLQkvKiBDb252ZXJ0IGZyb20gcGVyZi1wcm9iZSBldmVudCB0byB0cmFjZS1rcHJvYmUgZXZlbnQgKi8KKwkvKiBDb252ZXJ0IGZyb20gcGVyZi1wcm9iZSBldmVudCB0byB0cmFjZS1wcm9iZSBldmVudCAqLwogCXJldCA9IGVfc25wcmludGYoYnVmLCAxMjgsICItOiVzIiwgZW50LT5zKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKQEAgLTE1NjIsNyArMTY2NSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBkZWxfdHJhY2Vfa3Byb2JlX2V2ZW50KGludCBmZCwgY29uc3QgY2hhciAqZ3JvdXAsCitzdGF0aWMgaW50IGRlbF90cmFjZV9wcm9iZV9ldmVudChpbnQgZmQsIGNvbnN0IGNoYXIgKmdyb3VwLAogCQkJCSAgY29uc3QgY2hhciAqZXZlbnQsIHN0cnVjdCBzdHJsaXN0ICpuYW1lbGlzdCkKIHsKIAljaGFyIGJ1ZlsxMjhdOwpAQCAtMTU3OSw3ICsxNjgyLDcgQEAKIAkJc3RybGlzdF9fZm9yX2VhY2hfc2FmZShlbnQsIG4sIG5hbWVsaXN0KQogCQkJaWYgKHN0cmdsb2JtYXRjaChlbnQtPnMsIGJ1ZikpIHsKIAkJCQlmb3VuZCsrOwotCQkJCXJldCA9IF9fZGVsX3RyYWNlX2twcm9iZV9ldmVudChmZCwgZW50KTsKKwkJCQlyZXQgPSBfX2RlbF90cmFjZV9wcm9iZV9ldmVudChmZCwgZW50KTsKIAkJCQlpZiAocmV0IDwgMCkKIAkJCQkJYnJlYWs7CiAJCQkJc3RybGlzdF9fcmVtb3ZlKG5hbWVsaXN0LCBlbnQpOwpAQCAtMTU4OCw3ICsxNjkxLDcgQEAKIAkJZW50ID0gc3RybGlzdF9fZmluZChuYW1lbGlzdCwgYnVmKTsKIAkJaWYgKGVudCkgewogCQkJZm91bmQrKzsKLQkJCXJldCA9IF9fZGVsX3RyYWNlX2twcm9iZV9ldmVudChmZCwgZW50KTsKKwkJCXJldCA9IF9fZGVsX3RyYWNlX3Byb2JlX2V2ZW50KGZkLCBlbnQpOwogCQkJaWYgKHJldCA+PSAwKQogCQkJCXN0cmxpc3RfX3JlbW92ZShuYW1lbGlzdCwgZW50KTsKIAkJfQpAQCAtMTYxMiw3ICsxNzE1LDcgQEAKIAkJcmV0dXJuIGZkOwogCiAJLyogR2V0IGN1cnJlbnQgZXZlbnQgbmFtZXMgKi8KLQluYW1lbGlzdCA9IGdldF9rcHJvYmVfdHJhY2VfZXZlbnRfbmFtZXMoZmQsIHRydWUpOworCW5hbWVsaXN0ID0gZ2V0X3Byb2JlX3RyYWNlX2V2ZW50X25hbWVzKGZkLCB0cnVlKTsKIAlpZiAobmFtZWxpc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE2MzMsNyArMTczNiw3IEBACiAJCQlldmVudCA9IHN0cjsKIAkJfQogCQlwcl9kZWJ1ZygiR3JvdXA6ICVzLCBFdmVudDogJXNcbiIsIGdyb3VwLCBldmVudCk7Ci0JCXJldCA9IGRlbF90cmFjZV9rcHJvYmVfZXZlbnQoZmQsIGdyb3VwLCBldmVudCwgbmFtZWxpc3QpOworCQlyZXQgPSBkZWxfdHJhY2VfcHJvYmVfZXZlbnQoZmQsIGdyb3VwLCBldmVudCwgbmFtZWxpc3QpOwogCQlmcmVlKHN0cik7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCmluZGV4IGU5ZGIxYTIuLjVhZjM5MjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5oCkBAIC03LDMzICs3LDMzIEBACiBleHRlcm4gYm9vbCBwcm9iZV9ldmVudF9kcnlfcnVuOwogCiAvKiBrcHJvYmUtdHJhY2VyIHRyYWNpbmcgcG9pbnQgKi8KLXN0cnVjdCBrcHJvYmVfdHJhY2VfcG9pbnQgeworc3RydWN0IHByb2JlX3RyYWNlX3BvaW50IHsKIAljaGFyCQkqc3ltYm9sOwkvKiBCYXNlIHN5bWJvbCAqLwogCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OwkJLyogT2Zmc2V0IGZyb20gc3ltYm9sICovCiAJYm9vbAkJcmV0cHJvYmU7CS8qIFJldHVybiBwcm9iZSBmbGFnICovCiB9OwogCi0vKiBrcHJvYmUtdHJhY2VyIHRyYWNpbmcgYXJndW1lbnQgcmVmZXJlbmNpbmcgb2Zmc2V0ICovCi1zdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYgewotCXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZgkqbmV4dDsJLyogTmV4dCByZWZlcmVuY2UgKi8KKy8qIHByb2JlLXRyYWNlciB0cmFjaW5nIGFyZ3VtZW50IHJlZmVyZW5jaW5nIG9mZnNldCAqLworc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYgeworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmCSpuZXh0OwkvKiBOZXh0IHJlZmVyZW5jZSAqLwogCWxvbmcJCQkJb2Zmc2V0OwkvKiBPZmZzZXQgdmFsdWUgKi8KIH07CiAKIC8qIGtwcm9iZS10cmFjZXIgdHJhY2luZyBhcmd1bWVudCAqLwotc3RydWN0IGtwcm9iZV90cmFjZV9hcmcgeworc3RydWN0IHByb2JlX3RyYWNlX2FyZyB7CiAJY2hhcgkJCQkqbmFtZTsJLyogQXJndW1lbnQgbmFtZSAqLwogCWNoYXIJCQkJKnZhbHVlOwkvKiBCYXNlIHZhbHVlICovCiAJY2hhcgkJCQkqdHlwZTsJLyogVHlwZSBuYW1lICovCi0Jc3RydWN0IGtwcm9iZV90cmFjZV9hcmdfcmVmCSpyZWY7CS8qIFJlZmVyZW5jaW5nIG9mZnNldCAqLworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmCSpyZWY7CS8qIFJlZmVyZW5jaW5nIG9mZnNldCAqLwogfTsKIAogLyoga3Byb2JlLXRyYWNlciB0cmFjaW5nIGV2ZW50IChwb2ludCArIGFyZykgKi8KLXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgeworc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50IHsKIAljaGFyCQkJCSpldmVudDsJLyogRXZlbnQgbmFtZSAqLwogCWNoYXIJCQkJKmdyb3VwOwkvKiBHcm91cCBuYW1lICovCi0Jc3RydWN0IGtwcm9iZV90cmFjZV9wb2ludAlwb2ludDsJLyogVHJhY2UgcG9pbnQgKi8KKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQJcG9pbnQ7CS8qIFRyYWNlIHBvaW50ICovCiAJaW50CQkJCW5hcmdzOwkvKiBOdW1iZXIgb2YgYXJncyAqLwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnCQkqYXJnczsJLyogQXJndW1lbnRzICovCisJc3RydWN0IHByb2JlX3RyYWNlX2FyZwkJKmFyZ3M7CS8qIEFyZ3VtZW50cyAqLwogfTsKIAogLyogUGVyZiBwcm9iZSBwcm9iaW5nIHBvaW50ICovCkBAIC01MCw2ICs1MCw3IEBACiBzdHJ1Y3QgcGVyZl9wcm9iZV9hcmdfZmllbGQgewogCXN0cnVjdCBwZXJmX3Byb2JlX2FyZ19maWVsZAkqbmV4dDsJLyogTmV4dCBmaWVsZCAqLwogCWNoYXIJCQkJKm5hbWU7CS8qIE5hbWUgb2YgdGhlIGZpZWxkICovCisJbG9uZwkJCQlpbmRleDsJLyogQXJyYXkgaW5kZXggbnVtYmVyICovCiAJYm9vbAkJCQlyZWY7CS8qIFJlZmVyZW5jaW5nIGZsYWcgKi8KIH07CiAKQEAgLTg1LDMxICs4NiwyNSBAQAogCWludAkJCWVuZDsJCS8qIEVuZCBsaW5lIG51bWJlciAqLwogCWludAkJCW9mZnNldDsJCS8qIFN0YXJ0IGxpbmUgb2Zmc2V0ICovCiAJY2hhcgkJCSpwYXRoOwkJLyogUmVhbCBwYXRoIG5hbWUgKi8KKwljaGFyCQkJKmNvbXBfZGlyOwkvKiBDb21waWxlIGRpcmVjdG9yeSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJbGluZV9saXN0OwkvKiBWaXNpYmxlIGxpbmVzICovCiB9OwogCiAvKiBDb21tYW5kIHN0cmluZyB0byBldmVudHMgKi8KIGV4dGVybiBpbnQgcGFyc2VfcGVyZl9wcm9iZV9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKIAkJCQkgICAgc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldik7Ci1leHRlcm4gaW50IHBhcnNlX2twcm9iZV90cmFjZV9jb21tYW5kKGNvbnN0IGNoYXIgKmNtZCwKLQkJCQkgICAgICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpOwogCiAvKiBFdmVudHMgdG8gY29tbWFuZCBzdHJpbmcgKi8KIGV4dGVybiBjaGFyICpzeW50aGVzaXplX3BlcmZfcHJvYmVfY29tbWFuZChzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2KTsKLWV4dGVybiBjaGFyICpzeW50aGVzaXplX2twcm9iZV90cmFjZV9jb21tYW5kKHN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldik7CitleHRlcm4gY2hhciAqc3ludGhlc2l6ZV9wcm9iZV90cmFjZV9jb21tYW5kKHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2KTsKIGV4dGVybiBpbnQgc3ludGhlc2l6ZV9wZXJmX3Byb2JlX2FyZyhzdHJ1Y3QgcGVyZl9wcm9iZV9hcmcgKnBhLCBjaGFyICpidWYsCiAJCQkJICAgICBzaXplX3QgbGVuKTsKIAogLyogQ2hlY2sgdGhlIHBlcmZfcHJvYmVfZXZlbnQgbmVlZHMgZGVidWdpbmZvICovCiBleHRlcm4gYm9vbCBwZXJmX3Byb2JlX2V2ZW50X25lZWRfZHdhcmYoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldik7CiAKLS8qIENvbnZlcnQgZnJvbSBrcHJvYmVfdHJhY2VfZXZlbnQgdG8gcGVyZl9wcm9iZV9ldmVudCAqLwotZXh0ZXJuIGludCBjb252ZXJ0X3RvX3BlcmZfcHJvYmVfZXZlbnQoc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2KTsKLQogLyogUmVsZWFzZSBldmVudCBjb250ZW50cyAqLwogZXh0ZXJuIHZvaWQgY2xlYXJfcGVyZl9wcm9iZV9ldmVudChzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2KTsKLWV4dGVybiB2b2lkIGNsZWFyX2twcm9iZV90cmFjZV9ldmVudChzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICp0ZXYpOwogCiAvKiBDb21tYW5kIHN0cmluZyB0byBsaW5lLXJhbmdlICovCiBleHRlcm4gaW50IHBhcnNlX2xpbmVfcmFuZ2VfZGVzYyhjb25zdCBjaGFyICpjbWQsIHN0cnVjdCBsaW5lX3JhbmdlICpscik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKaW5kZXggZDk2NGNiMS4uODQwZjFhYSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImV2ZW50LmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSAicHJvYmUtZmluZGVyLmgiCiAKIC8qIEtwcm9iZSB0cmFjZXIgYmFzaWMgdHlwZSBpcyB1cCB0byB1NjQgKi8KQEAgLTE0MywxMiArMTQ0LDIxIEBACiAJcmV0dXJuIHNyYzsKIH0KIAorLyogR2V0IERXX0FUX2NvbXBfZGlyIChzaG91bGQgYmUgTlVMTCB3aXRoIG9sZGVyIGdjYykgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpjdV9nZXRfY29tcF9kaXIoRHdhcmZfRGllICpjdV9kaWUpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJaWYgKGR3YXJmX2F0dHIoY3VfZGllLCBEV19BVF9jb21wX2RpciwgJmF0dHIpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCXJldHVybiBkd2FyZl9mb3Jtc3RyaW5nKCZhdHRyKTsKK30KKwogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwogc3RhdGljIGJvb2wgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgKmR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAluYW1lID0gZHdhcmZfZGllbmFtZShkd19kaWUpOwotCXJldHVybiBuYW1lID8gc3RyY21wKHRuYW1lLCBuYW1lKSA6IC0xOworCXJldHVybiBuYW1lID8gKHN0cmNtcCh0bmFtZSwgbmFtZSkgPT0gMCkgOiBmYWxzZTsKIH0KIAogLyogR2V0IHR5cGUgZGllLCBidXQgc2tpcCBxdWFsaWZpZXJzIGFuZCB0eXBlZGVmICovCkBAIC0zMTksNyArMzI5LDcgQEAKIAl0YWcgPSBkd2FyZl90YWcoZGllX21lbSk7CiAJaWYgKCh0YWcgPT0gRFdfVEFHX2Zvcm1hbF9wYXJhbWV0ZXIgfHwKIAkgICAgIHRhZyA9PSBEV19UQUdfdmFyaWFibGUpICYmCi0JICAgIChkaWVfY29tcGFyZV9uYW1lKGRpZV9tZW0sIG5hbWUpID09IDApKQorCSAgICBkaWVfY29tcGFyZV9uYW1lKGRpZV9tZW0sIG5hbWUpKQogCQlyZXR1cm4gRElFX0ZJTkRfQ0JfRk9VTkQ7CiAKIAlyZXR1cm4gRElFX0ZJTkRfQ0JfQ09OVElOVUU7CkBAIC0zMzgsNyArMzQ4LDcgQEAKIAljb25zdCBjaGFyICpuYW1lID0gZGF0YTsKIAogCWlmICgoZHdhcmZfdGFnKGRpZV9tZW0pID09IERXX1RBR19tZW1iZXIpICYmCi0JICAgIChkaWVfY29tcGFyZV9uYW1lKGRpZV9tZW0sIG5hbWUpID09IDApKQorCSAgICBkaWVfY29tcGFyZV9uYW1lKGRpZV9tZW0sIG5hbWUpKQogCQlyZXR1cm4gRElFX0ZJTkRfQ0JfRk9VTkQ7CiAKIAlyZXR1cm4gRElFX0ZJTkRfQ0JfU0lCTElORzsKQEAgLTM1NiwxNCArMzY2LDUwIEBACiAgKiBQcm9iZSBmaW5kZXIgcmVsYXRlZCBmdW5jdGlvbnMKICAqLwogCi0vKiBTaG93IGEgbG9jYXRpb24gKi8KLXN0YXRpYyBpbnQgY29udmVydF9sb2NhdGlvbihEd2FyZl9PcCAqb3AsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICphbGxvY190cmFjZV9hcmdfcmVmKGxvbmcgb2ZmcykKIHsKKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZiAqcmVmOworCXJlZiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYpKTsKKwlpZiAocmVmICE9IE5VTEwpCisJCXJlZi0+b2Zmc2V0ID0gb2ZmczsKKwlyZXR1cm4gcmVmOworfQorCisvKiBTaG93IGEgbG9jYXRpb24gKi8KK3N0YXRpYyBpbnQgY29udmVydF92YXJpYWJsZV9sb2NhdGlvbihEd2FyZl9EaWUgKnZyX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCit7CisJRHdhcmZfQXR0cmlidXRlIGF0dHI7CisJRHdhcmZfT3AgKm9wOworCXNpemVfdCBub3BzOwogCXVuc2lnbmVkIGludCByZWduOwogCUR3YXJmX1dvcmQgb2ZmcyA9IDA7CiAJYm9vbCByZWYgPSBmYWxzZTsKIAljb25zdCBjaGFyICpyZWdzOwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnICp0dmFyID0gcGYtPnR2YXI7CisJc3RydWN0IHByb2JlX3RyYWNlX2FyZyAqdHZhciA9IHBmLT50dmFyOworCWludCByZXQ7CisKKwkvKiBUT0RPOiBoYW5kbGUgbW9yZSB0aGFuIDEgZXhwcnMgKi8KKwlpZiAoZHdhcmZfYXR0cih2cl9kaWUsIERXX0FUX2xvY2F0aW9uLCAmYXR0cikgPT0gTlVMTCB8fAorCSAgICBkd2FyZl9nZXRsb2NhdGlvbl9hZGRyKCZhdHRyLCBwZi0+YWRkciwgJm9wLCAmbm9wcywgMSkgPD0gMCB8fAorCSAgICBub3BzID09IDApIHsKKwkJLyogVE9ETzogU3VwcG9ydCBjb25zdF92YWx1ZSAqLworCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiAlcyBhdCB0aGlzIGFkZHJlc3MuXG4iCisJCSAgICAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+cHZhci0+dmFyKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKG9wLT5hdG9tID09IERXX09QX2FkZHIpIHsKKwkJLyogU3RhdGljIHZhcmlhYmxlcyBvbiBtZW1vcnkgKG5vdCBzdGFjayksIG1ha2UgQHZhcm5hbWUgKi8KKwkJcmV0ID0gc3RybGVuKGR3YXJmX2RpZW5hbWUodnJfZGllKSk7CisJCXR2YXItPnZhbHVlID0gemFsbG9jKHJldCArIDIpOworCQlpZiAodHZhci0+dmFsdWUgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzbnByaW50Zih0dmFyLT52YWx1ZSwgcmV0ICsgMiwgIkAlcyIsIGR3YXJmX2RpZW5hbWUodnJfZGllKSk7CisJCXR2YXItPnJlZiA9IGFsbG9jX3RyYWNlX2FyZ19yZWYoKGxvbmcpb2Zmcyk7CisJCWlmICh0dmFyLT5yZWYgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBJZiB0aGlzIGlzIGJhc2VkIG9uIGZyYW1lIGJ1ZmZlciwgc2V0IHRoZSBvZmZzZXQgKi8KIAlpZiAob3AtPmF0b20gPT0gRFdfT1BfZmJyZWcpIHsKQEAgLTQwNSwyNyArNDUxLDcyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKHJlZikgewotCQl0dmFyLT5yZWYgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnX3JlZikpOworCQl0dmFyLT5yZWYgPSBhbGxvY190cmFjZV9hcmdfcmVmKChsb25nKW9mZnMpOwogCQlpZiAodHZhci0+cmVmID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJdHZhci0+cmVmLT5vZmZzZXQgPSAobG9uZylvZmZzOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjb252ZXJ0X3ZhcmlhYmxlX3R5cGUoRHdhcmZfRGllICp2cl9kaWUsCi0JCQkJIHN0cnVjdCBrcHJvYmVfdHJhY2VfYXJnICp0YXJnKQorCQkJCSBzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnICp0dmFyLAorCQkJCSBjb25zdCBjaGFyICpjYXN0KQogeworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICoqcmVmX3B0ciA9ICZ0dmFyLT5yZWY7CiAJRHdhcmZfRGllIHR5cGU7CiAJY2hhciBidWZbMTZdOwogCWludCByZXQ7CiAKKwkvKiBUT0RPOiBjaGVjayBhbGwgdHlwZXMgKi8KKwlpZiAoY2FzdCAmJiBzdHJjbXAoY2FzdCwgInN0cmluZyIpICE9IDApIHsKKwkJLyogTm9uIHN0cmluZyB0eXBlIGlzIE9LICovCisJCXR2YXItPnR5cGUgPSBzdHJkdXAoY2FzdCk7CisJCXJldHVybiAodHZhci0+dHlwZSA9PSBOVUxMKSA/IC1FTk9NRU0gOiAwOworCX0KKwogCWlmIChkaWVfZ2V0X3JlYWxfdHlwZSh2cl9kaWUsICZ0eXBlKSA9PSBOVUxMKSB7CiAJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYSB0eXBlIGluZm9ybWF0aW9uIG9mICVzLlxuIiwKIAkJCSAgIGR3YXJmX2RpZW5hbWUodnJfZGllKSk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAorCXByX2RlYnVnKCIlcyB0eXBlIGlzICVzLlxuIiwKKwkJIGR3YXJmX2RpZW5hbWUodnJfZGllKSwgZHdhcmZfZGllbmFtZSgmdHlwZSkpOworCisJaWYgKGNhc3QgJiYgc3RyY21wKGNhc3QsICJzdHJpbmciKSA9PSAwKSB7CS8qIFN0cmluZyB0eXBlICovCisJCXJldCA9IGR3YXJmX3RhZygmdHlwZSk7CisJCWlmIChyZXQgIT0gRFdfVEFHX3BvaW50ZXJfdHlwZSAmJgorCQkgICAgcmV0ICE9IERXX1RBR19hcnJheV90eXBlKSB7CisJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gY2FzdCBpbnRvIHN0cmluZzogIgorCQkJCSAgICIlcyglcykgaXMgbm90IGEgcG9pbnRlciBub3IgYXJyYXkuIiwKKwkJCQkgICBkd2FyZl9kaWVuYW1lKHZyX2RpZSksIGR3YXJmX2RpZW5hbWUoJnR5cGUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyZXQgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSkgeworCQkJaWYgKGRpZV9nZXRfcmVhbF90eXBlKCZ0eXBlLCAmdHlwZSkgPT0gTlVMTCkgeworCQkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYSB0eXBlIGluZm9ybWF0aW9uLiIpOworCQkJCXJldHVybiAtRU5PRU5UOworCQkJfQorCQkJd2hpbGUgKCpyZWZfcHRyKQorCQkJCXJlZl9wdHIgPSAmKCpyZWZfcHRyKS0+bmV4dDsKKwkJCS8qIEFkZCBuZXcgcmVmZXJlbmNlIHdpdGggb2Zmc2V0ICswICovCisJCQkqcmVmX3B0ciA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2FyZ19yZWYpKTsKKwkJCWlmICgqcmVmX3B0ciA9PSBOVUxMKSB7CisJCQkJcHJfd2FybmluZygiT3V0IG9mIG1lbW9yeSBlcnJvclxuIik7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwkJaWYgKCFkaWVfY29tcGFyZV9uYW1lKCZ0eXBlLCAiY2hhciIpICYmCisJCSAgICAhZGllX2NvbXBhcmVfbmFtZSgmdHlwZSwgInVuc2lnbmVkIGNoYXIiKSkgeworCQkJcHJfd2FybmluZygiRmFpbGVkIHRvIGNhc3QgaW50byBzdHJpbmc6ICIKKwkJCQkgICAiJXMgaXMgbm90ICh1bnNpZ25lZCkgY2hhciAqLiIsCisJCQkJICAgZHdhcmZfZGllbmFtZSh2cl9kaWUpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXR2YXItPnR5cGUgPSBzdHJkdXAoY2FzdCk7CisJCXJldHVybiAodHZhci0+dHlwZSA9PSBOVUxMKSA/IC1FTk9NRU0gOiAwOworCX0KKwogCXJldCA9IGRpZV9nZXRfYnl0ZV9zaXplKCZ0eXBlKSAqIDg7CiAJaWYgKHJldCkgewogCQkvKiBDaGVjayB0aGUgYml0d2lkdGggKi8KQEAgLTQ0NSw4ICs1MzYsOCBAQAogCQkJCSAgIHN0cmVycm9yKC1yZXQpKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KLQkJdGFyZy0+dHlwZSA9IHN0cmR1cChidWYpOwotCQlpZiAodGFyZy0+dHlwZSA9PSBOVUxMKQorCQl0dmFyLT50eXBlID0gc3RyZHVwKGJ1Zik7CisJCWlmICh0dmFyLT50eXBlID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTQsMjIgKzU0NSw1MCBAQAogCiBzdGF0aWMgaW50IGNvbnZlcnRfdmFyaWFibGVfZmllbGRzKER3YXJmX0RpZSAqdnJfZGllLCBjb25zdCBjaGFyICp2YXJuYW1lLAogCQkJCSAgICBzdHJ1Y3QgcGVyZl9wcm9iZV9hcmdfZmllbGQgKmZpZWxkLAotCQkJCSAgICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYgKipyZWZfcHRyLAorCQkJCSAgICBzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZiAqKnJlZl9wdHIsCiAJCQkJICAgIER3YXJmX0RpZSAqZGllX21lbSkKIHsKLQlzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYgKnJlZiA9ICpyZWZfcHRyOworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmICpyZWYgPSAqcmVmX3B0cjsKIAlEd2FyZl9EaWUgdHlwZTsKIAlEd2FyZl9Xb3JkIG9mZnM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB0YWc7CiAKIAlwcl9kZWJ1ZygiY29udmVydGluZyAlcyBpbiAlc1xuIiwgZmllbGQtPm5hbWUsIHZhcm5hbWUpOwogCWlmIChkaWVfZ2V0X3JlYWxfdHlwZSh2cl9kaWUsICZ0eXBlKSA9PSBOVUxMKSB7CiAJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgdGhlIHR5cGUgb2YgJXMuXG4iLCB2YXJuYW1lKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQorCXByX2RlYnVnMigiVmFyIHJlYWwgdHlwZTogKCV4KVxuIiwgKHVuc2lnbmVkKWR3YXJmX2RpZW9mZnNldCgmdHlwZSkpOworCXRhZyA9IGR3YXJmX3RhZygmdHlwZSk7CiAKLQkvKiBDaGVjayB0aGUgcG9pbnRlciBhbmQgZGVyZWZlcmVuY2UgKi8KLQlpZiAoZHdhcmZfdGFnKCZ0eXBlKSA9PSBEV19UQUdfcG9pbnRlcl90eXBlKSB7CisJaWYgKGZpZWxkLT5uYW1lWzBdID09ICdbJyAmJgorCSAgICAodGFnID09IERXX1RBR19hcnJheV90eXBlIHx8IHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlKSkgeworCQlpZiAoZmllbGQtPm5leHQpCisJCQkvKiBTYXZlIG9yaWdpbmFsIHR5cGUgZm9yIG5leHQgZmllbGQgKi8KKwkJCW1lbWNweShkaWVfbWVtLCAmdHlwZSwgc2l6ZW9mKCpkaWVfbWVtKSk7CisJCS8qIEdldCB0aGUgdHlwZSBvZiB0aGlzIGFycmF5ICovCisJCWlmIChkaWVfZ2V0X3JlYWxfdHlwZSgmdHlwZSwgJnR5cGUpID09IE5VTEwpIHsKKwkJCXByX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgdGhlIHR5cGUgb2YgJXMuXG4iLCB2YXJuYW1lKTsKKwkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCXByX2RlYnVnMigiQXJyYXkgcmVhbCB0eXBlOiAoJXgpXG4iLAorCQkJICh1bnNpZ25lZClkd2FyZl9kaWVvZmZzZXQoJnR5cGUpKTsKKwkJaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlKSB7CisJCQlyZWYgPSB6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9iZV90cmFjZV9hcmdfcmVmKSk7CisJCQlpZiAocmVmID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoKnJlZl9wdHIpCisJCQkJKCpyZWZfcHRyKS0+bmV4dCA9IHJlZjsKKwkJCWVsc2UKKwkJCQkqcmVmX3B0ciA9IHJlZjsKKwkJfQorCQlyZWYtPm9mZnNldCArPSBkaWVfZ2V0X2J5dGVfc2l6ZSgmdHlwZSkgKiBmaWVsZC0+aW5kZXg7CisJCWlmICghZmllbGQtPm5leHQpCisJCQkvKiBTYXZlIHZyX2RpZSBmb3IgY29udmVydGluZyB0eXBlcyAqLworCQkJbWVtY3B5KGRpZV9tZW0sIHZyX2RpZSwgc2l6ZW9mKCpkaWVfbWVtKSk7CisJCWdvdG8gbmV4dDsKKwl9IGVsc2UgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlKSB7CisJCS8qIENoZWNrIHRoZSBwb2ludGVyIGFuZCBkZXJlZmVyZW5jZSAqLwogCQlpZiAoIWZpZWxkLT5yZWYpIHsKIAkJCXByX2VycigiU2VtYW50aWMgZXJyb3I6ICVzIG11c3QgYmUgcmVmZXJyZWQgYnkgJy0+J1xuIiwKIAkJCSAgICAgICBmaWVsZC0+bmFtZSk7CkBAIC00ODYsNyArNjA1LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJcmVmID0gemFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlX3RyYWNlX2FyZ19yZWYpKTsKKwkJcmVmID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnX3JlZikpOwogCQlpZiAocmVmID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJaWYgKCpyZWZfcHRyKQpAQCAtNDk1LDEwICs2MTQsMTUgQEAKIAkJCSpyZWZfcHRyID0gcmVmOwogCX0gZWxzZSB7CiAJCS8qIFZlcmlmeSBpdCBpcyBhIGRhdGEgc3RydWN0dXJlICAqLwotCQlpZiAoZHdhcmZfdGFnKCZ0eXBlKSAhPSBEV19UQUdfc3RydWN0dXJlX3R5cGUpIHsKKwkJaWYgKHRhZyAhPSBEV19UQUdfc3RydWN0dXJlX3R5cGUpIHsKIAkJCXByX3dhcm5pbmcoIiVzIGlzIG5vdCBhIGRhdGEgc3RydWN0dXJlLlxuIiwgdmFybmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQlpZiAoZmllbGQtPm5hbWVbMF0gPT0gJ1snKSB7CisJCQlwcl9lcnIoIlNlbWFudGljIGVycm9yOiAlcyBpcyBub3QgYSBwb2ludG9yIG5vciBhcnJheS4iLAorCQkJICAgICAgIHZhcm5hbWUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAkJaWYgKGZpZWxkLT5yZWYpIHsKIAkJCXByX2VycigiU2VtYW50aWMgZXJyb3I6ICVzIG11c3QgYmUgcmVmZXJyZWQgYnkgJy4nXG4iLAogCQkJICAgICAgIGZpZWxkLT5uYW1lKTsKQEAgLTUyNSw2ICs2NDksNyBAQAogCX0KIAlyZWYtPm9mZnNldCArPSAobG9uZylvZmZzOwogCituZXh0OgogCS8qIENvbnZlcnRpbmcgbmV4dCBmaWVsZCAqLwogCWlmIChmaWVsZC0+bmV4dCkKIAkJcmV0dXJuIGNvbnZlcnRfdmFyaWFibGVfZmllbGRzKGRpZV9tZW0sIGZpZWxkLT5uYW1lLApAQCAtNTM2LDUxICs2NjEsMzIgQEAKIC8qIFNob3cgYSB2YXJpYWJsZXMgaW4ga3Byb2JlIGV2ZW50IGZvcm1hdCAqLwogc3RhdGljIGludCBjb252ZXJ0X3ZhcmlhYmxlKER3YXJmX0RpZSAqdnJfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKIHsKLQlEd2FyZl9BdHRyaWJ1dGUgYXR0cjsKIAlEd2FyZl9EaWUgZGllX21lbTsKLQlEd2FyZl9PcCAqZXhwcjsKLQlzaXplX3QgbmV4cHI7CiAJaW50IHJldDsKIAotCWlmIChkd2FyZl9hdHRyKHZyX2RpZSwgRFdfQVRfbG9jYXRpb24sICZhdHRyKSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOwotCS8qIFRPRE86IGhhbmRsZSBtb3JlIHRoYW4gMSBleHBycyAqLwotCXJldCA9IGR3YXJmX2dldGxvY2F0aW9uX2FkZHIoJmF0dHIsIHBmLT5hZGRyLCAmZXhwciwgJm5leHByLCAxKTsKLQlpZiAocmV0IDw9IDAgfHwgbmV4cHIgPT0gMCkKLQkJZ290byBlcnJvcjsKKwlwcl9kZWJ1ZygiQ29udmVydGluZyB2YXJpYWJsZSAlcyBpbnRvIHRyYWNlIGV2ZW50LlxuIiwKKwkJIGR3YXJmX2RpZW5hbWUodnJfZGllKSk7CiAKLQlyZXQgPSBjb252ZXJ0X2xvY2F0aW9uKGV4cHIsIHBmKTsKKwlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlX2xvY2F0aW9uKHZyX2RpZSwgcGYpOwogCWlmIChyZXQgPT0gMCAmJiBwZi0+cHZhci0+ZmllbGQpIHsKIAkJcmV0ID0gY29udmVydF92YXJpYWJsZV9maWVsZHModnJfZGllLCBwZi0+cHZhci0+dmFyLAogCQkJCQkgICAgICBwZi0+cHZhci0+ZmllbGQsICZwZi0+dHZhci0+cmVmLAogCQkJCQkgICAgICAmZGllX21lbSk7CiAJCXZyX2RpZSA9ICZkaWVfbWVtOwogCX0KLQlpZiAocmV0ID09IDApIHsKLQkJaWYgKHBmLT5wdmFyLT50eXBlKSB7Ci0JCQlwZi0+dHZhci0+dHlwZSA9IHN0cmR1cChwZi0+cHZhci0+dHlwZSk7Ci0JCQlpZiAocGYtPnR2YXItPnR5cGUgPT0gTlVMTCkKLQkJCQlyZXQgPSAtRU5PTUVNOwotCQl9IGVsc2UKLQkJCXJldCA9IGNvbnZlcnRfdmFyaWFibGVfdHlwZSh2cl9kaWUsIHBmLT50dmFyKTsKLQl9CisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlX3R5cGUodnJfZGllLCBwZi0+dHZhciwgcGYtPnB2YXItPnR5cGUpOwogCS8qICpleHByIHdpbGwgYmUgY2FjaGVkIGluIGxpYmR3LiBEb24ndCBmcmVlIGl0LiAqLwogCXJldHVybiByZXQ7Ci1lcnJvcjoKLQkvKiBUT0RPOiBTdXBwb3J0IGNvbnN0X3ZhbHVlICovCi0JcHJfZXJyKCJGYWlsZWQgdG8gZmluZCB0aGUgbG9jYXRpb24gb2YgJXMgYXQgdGhpcyBhZGRyZXNzLlxuIgotCSAgICAgICAiIFBlcmhhcHMsIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuXG4iLCBwZi0+cHZhci0+dmFyKTsKLQlyZXR1cm4gLUVOT0VOVDsKIH0KIAogLyogRmluZCBhIHZhcmlhYmxlIGluIGEgc3VicHJvZ3JhbSBkaWUgKi8KIHN0YXRpYyBpbnQgZmluZF92YXJpYWJsZShEd2FyZl9EaWUgKnNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7Ci0JRHdhcmZfRGllIHZyX2RpZTsKKwlEd2FyZl9EaWUgdnJfZGllLCAqc2NvcGVzOwogCWNoYXIgYnVmWzMyXSwgKnB0cjsKLQlpbnQgcmV0OworCWludCByZXQsIG5zY29wZXM7CiAKLQkvKiBUT0RPOiBTdXBwb3J0IGFycmF5cyAqLwogCWlmIChwZi0+cHZhci0+bmFtZSkKIAkJcGYtPnR2YXItPm5hbWUgPSBzdHJkdXAocGYtPnB2YXItPm5hbWUpOwogCWVsc2UgewpAQCAtNjA3LDE4ICs3MTMsMzIgQEAKIAlwcl9kZWJ1ZygiU2VhcmNoaW5nICclcycgdmFyaWFibGUgaW4gY29udGV4dC5cbiIsCiAJCSBwZi0+cHZhci0+dmFyKTsKIAkvKiBTZWFyY2ggY2hpbGQgZGllIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuICovCi0JaWYgKCFkaWVfZmluZF92YXJpYWJsZShzcF9kaWUsIHBmLT5wdmFyLT52YXIsICZ2cl9kaWUpKSB7CisJaWYgKGRpZV9maW5kX3ZhcmlhYmxlKHNwX2RpZSwgcGYtPnB2YXItPnZhciwgJnZyX2RpZSkpCisJCXJldCA9IGNvbnZlcnRfdmFyaWFibGUoJnZyX2RpZSwgcGYpOworCWVsc2UgeworCQkvKiBTZWFyY2ggdXBwZXIgY2xhc3MgKi8KKwkJbnNjb3BlcyA9IGR3YXJmX2dldHNjb3Blc19kaWUoc3BfZGllLCAmc2NvcGVzKTsKKwkJaWYgKG5zY29wZXMgPiAwKSB7CisJCQlyZXQgPSBkd2FyZl9nZXRzY29wZXZhcihzY29wZXMsIG5zY29wZXMsIHBmLT5wdmFyLT52YXIsCisJCQkJCQkwLCBOVUxMLCAwLCAwLCAmdnJfZGllKTsKKwkJCWlmIChyZXQgPj0gMCkKKwkJCQlyZXQgPSBjb252ZXJ0X3ZhcmlhYmxlKCZ2cl9kaWUsIHBmKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJZnJlZShzY29wZXMpOworCQl9IGVsc2UKKwkJCXJldCA9IC1FTk9FTlQ7CisJfQorCWlmIChyZXQgPCAwKQogCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gZmluZCAnJXMnIGluIHRoaXMgZnVuY3Rpb24uXG4iLAogCQkJICAgcGYtPnB2YXItPnZhcik7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQlyZXR1cm4gY29udmVydF92YXJpYWJsZSgmdnJfZGllLCBwZik7CisJcmV0dXJuIHJldDsKIH0KIAogLyogU2hvdyBhIHByb2JlIHBvaW50IHRvIG91dHB1dCBidWZmZXIgKi8KIHN0YXRpYyBpbnQgY29udmVydF9wcm9iZV9wb2ludChEd2FyZl9EaWUgKnNwX2RpZSwgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7Ci0Jc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCAqdGV2OworCXN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqdGV2OwogCUR3YXJmX0FkZHIgZWFkZHI7CiAJRHdhcmZfRGllIGRpZV9tZW07CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTY4Myw3ICs4MDMsNyBAQAogCiAJLyogRmluZCBlYWNoIGFyZ3VtZW50ICovCiAJdGV2LT5uYXJncyA9IHBmLT5wZXYtPm5hcmdzOwotCXRldi0+YXJncyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGtwcm9iZV90cmFjZV9hcmcpICogdGV2LT5uYXJncyk7CisJdGV2LT5hcmdzID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvYmVfdHJhY2VfYXJnKSAqIHRldi0+bmFyZ3MpOwogCWlmICh0ZXYtPmFyZ3MgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZm9yIChpID0gMDsgaSA8IHBmLT5wZXYtPm5hcmdzOyBpKyspIHsKQEAgLTg5Nyw3ICsxMDE3LDcgQEAKIAogCS8qIENoZWNrIHRhZyBhbmQgZGllbmFtZSAqLwogCWlmIChkd2FyZl90YWcoc3BfZGllKSAhPSBEV19UQUdfc3VicHJvZ3JhbSB8fAotCSAgICBkaWVfY29tcGFyZV9uYW1lKHNwX2RpZSwgcHAtPmZ1bmN0aW9uKSAhPSAwKQorCSAgICAhZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIHBwLT5mdW5jdGlvbikpCiAJCXJldHVybiBEV0FSRl9DQl9PSzsKIAogCXBmLT5mbmFtZSA9IGR3YXJmX2RlY2xfZmlsZShzcF9kaWUpOwpAQCAtOTQwLDkgKzEwNjAsOSBAQAogCXJldHVybiBfcGFyYW0ucmV0dmFsOwogfQogCi0vKiBGaW5kIGtwcm9iZV90cmFjZV9ldmVudHMgc3BlY2lmaWVkIGJ5IHBlcmZfcHJvYmVfZXZlbnQgZnJvbSBkZWJ1Z2luZm8gKi8KLWludCBmaW5kX2twcm9iZV90cmFjZV9ldmVudHMoaW50IGZkLCBzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAotCQkJICAgICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywgaW50IG1heF90ZXZzKQorLyogRmluZCBwcm9iZV90cmFjZV9ldmVudHMgc3BlY2lmaWVkIGJ5IHBlcmZfcHJvYmVfZXZlbnQgZnJvbSBkZWJ1Z2luZm8gKi8KK2ludCBmaW5kX3Byb2JlX3RyYWNlX2V2ZW50cyhpbnQgZmQsIHN0cnVjdCBwZXJmX3Byb2JlX2V2ZW50ICpwZXYsCisJCQkgICAgIHN0cnVjdCBwcm9iZV90cmFjZV9ldmVudCAqKnRldnMsIGludCBtYXhfdGV2cykKIHsKIAlzdHJ1Y3QgcHJvYmVfZmluZGVyIHBmID0gey5wZXYgPSBwZXYsIC5tYXhfdGV2cyA9IG1heF90ZXZzfTsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAgPSAmcGV2LT5wb2ludDsKQEAgLTk1Miw3ICsxMDcyLDcgQEAKIAlEd2FyZiAqZGJnOwogCWludCByZXQgPSAwOwogCi0JcGYudGV2cyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGtwcm9iZV90cmFjZV9ldmVudCkgKiBtYXhfdGV2cyk7CisJcGYudGV2cyA9IHphbGxvYyhzaXplb2Yoc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50KSAqIG1heF90ZXZzKTsKIAlpZiAocGYudGV2cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAkqdGV2cyA9IHBmLnRldnM7CkBAIC0xMDk2LDcgKzEyMTYsNyBAQAogc3RhdGljIGludCBsaW5lX3JhbmdlX2FkZF9saW5lKGNvbnN0IGNoYXIgKnNyYywgdW5zaWduZWQgaW50IGxpbmVubywKIAkJCSAgICAgICBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCiB7Ci0JLyogQ29weSByZWFsIHBhdGggKi8KKwkvKiBDb3B5IHNvdXJjZSBwYXRoICovCiAJaWYgKCFsci0+cGF0aCkgewogCQlsci0+cGF0aCA9IHN0cmR1cChzcmMpOwogCQlpZiAobHItPnBhdGggPT0gTlVMTCkKQEAgLTEyMjAsNyArMTM0MCw3IEBACiAJc3RydWN0IGxpbmVfcmFuZ2UgKmxyID0gbGYtPmxyOwogCiAJaWYgKGR3YXJmX3RhZyhzcF9kaWUpID09IERXX1RBR19zdWJwcm9ncmFtICYmCi0JICAgIGRpZV9jb21wYXJlX25hbWUoc3BfZGllLCBsci0+ZnVuY3Rpb24pID09IDApIHsKKwkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIGxyLT5mdW5jdGlvbikpIHsKIAkJbGYtPmZuYW1lID0gZHdhcmZfZGVjbF9maWxlKHNwX2RpZSk7CiAJCWR3YXJmX2RlY2xfbGluZShzcF9kaWUsICZsci0+b2Zmc2V0KTsKIAkJcHJfZGVidWcoImZuYW1lOiAlcywgbGluZW5vOiVkXG4iLCBsZi0+Zm5hbWUsIGxyLT5vZmZzZXQpOwpAQCAtMTI2Myw2ICsxMzgzLDcgQEAKIAlzaXplX3QgY3VobDsKIAlEd2FyZl9EaWUgKmRpZXA7CiAJRHdhcmYgKmRiZzsKKwljb25zdCBjaGFyICpjb21wX2RpcjsKIAogCWRiZyA9IGR3YXJmX2JlZ2luKGZkLCBEV0FSRl9DX1JFQUQpOwogCWlmICghZGJnKSB7CkBAIC0xMjk4LDcgKzE0MTksMTggQEAKIAkJfQogCQlvZmYgPSBub2ZmOwogCX0KLQlwcl9kZWJ1ZygicGF0aDogJWx4XG4iLCAodW5zaWduZWQgbG9uZylsci0+cGF0aCk7CisKKwkvKiBTdG9yZSBjb21wX2RpciAqLworCWlmIChsZi5mb3VuZCkgeworCQljb21wX2RpciA9IGN1X2dldF9jb21wX2RpcigmbGYuY3VfZGllKTsKKwkJaWYgKGNvbXBfZGlyKSB7CisJCQlsci0+Y29tcF9kaXIgPSBzdHJkdXAoY29tcF9kaXIpOworCQkJaWYgKCFsci0+Y29tcF9kaXIpCisJCQkJcmV0ID0gLUVOT01FTTsKKwkJfQorCX0KKworCXByX2RlYnVnKCJwYXRoOiAlc1xuIiwgbHItPnBhdGgpOwogCWR3YXJmX2VuZChkYmcpOwogCiAJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IGxmLmZvdW5kOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCmluZGV4IGUxZjYxZGMuLjQ1MDdkNTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAorKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKQEAgLTE2LDkgKzE2LDkgQEAKIH0KIAogI2lmZGVmIERXQVJGX1NVUFBPUlQKLS8qIEZpbmQga3Byb2JlX3RyYWNlX2V2ZW50cyBzcGVjaWZpZWQgYnkgcGVyZl9wcm9iZV9ldmVudCBmcm9tIGRlYnVnaW5mbyAqLwotZXh0ZXJuIGludCBmaW5kX2twcm9iZV90cmFjZV9ldmVudHMoaW50IGZkLCBzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2LAotCQkJCSAgICBzdHJ1Y3Qga3Byb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywKKy8qIEZpbmQgcHJvYmVfdHJhY2VfZXZlbnRzIHNwZWNpZmllZCBieSBwZXJmX3Byb2JlX2V2ZW50IGZyb20gZGVidWdpbmZvICovCitleHRlcm4gaW50IGZpbmRfcHJvYmVfdHJhY2VfZXZlbnRzKGludCBmZCwgc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldiwKKwkJCQkgICAgc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICoqdGV2cywKIAkJCQkgICAgaW50IG1heF90ZXZzKTsKIAogLyogRmluZCBhIHBlcmZfcHJvYmVfcG9pbnQgZnJvbSBkZWJ1Z2luZm8gKi8KQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RydWN0IHByb2JlX2ZpbmRlciB7CiAJc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQJKnBldjsJCS8qIFRhcmdldCBwcm9iZSBldmVudCAqLwotCXN0cnVjdCBrcHJvYmVfdHJhY2VfZXZlbnQgKnRldnM7CS8qIFJlc3VsdCB0cmFjZSBldmVudHMgKi8KKwlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldnM7CQkvKiBSZXN1bHQgdHJhY2UgZXZlbnRzICovCiAJaW50CQkJbnRldnM7CQkvKiBOdW1iZXIgb2YgdHJhY2UgZXZlbnRzICovCiAJaW50CQkJbWF4X3RldnM7CS8qIE1heCBudW1iZXIgb2YgdHJhY2UgZXZlbnRzICovCiAKQEAgLTUwLDcgKzUwLDcgQEAKICNlbmRpZgogCUR3YXJmX09wCQkqZmJfb3BzOwkvKiBGcmFtZSBiYXNlIGF0dHJpYnV0ZSAqLwogCXN0cnVjdCBwZXJmX3Byb2JlX2FyZwkqcHZhcjsJCS8qIEN1cnJlbnQgdGFyZ2V0IHZhcmlhYmxlICovCi0Jc3RydWN0IGtwcm9iZV90cmFjZV9hcmcJKnR2YXI7CQkvKiBDdXJyZW50IHJlc3VsdCB2YXJpYWJsZSAqLworCXN0cnVjdCBwcm9iZV90cmFjZV9hcmcJKnR2YXI7CQkvKiBDdXJyZW50IHJlc3VsdCB2YXJpYWJsZSAqLwogfTsKIAogc3RydWN0IGxpbmVfZmluZGVyIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGM0MjJjZDYuLmZhOWQ2NTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMjcsOCArMjcsMTAgQEAKIAogCXNlbGYtPmZkID0gb3BlbihzZWxmLT5maWxlbmFtZSwgT19SRE9OTFkpOwogCWlmIChzZWxmLT5mZCA8IDApIHsKLQkJcHJfZXJyKCJmYWlsZWQgdG8gb3BlbiBmaWxlOiAlcyIsIHNlbGYtPmZpbGVuYW1lKTsKLQkJaWYgKCFzdHJjbXAoc2VsZi0+ZmlsZW5hbWUsICJwZXJmLmRhdGEiKSkKKwkJaW50IGVyciA9IGVycm5vOworCisJCXByX2VycigiZmFpbGVkIHRvIG9wZW4gJXM6ICVzIiwgc2VsZi0+ZmlsZW5hbWUsIHN0cmVycm9yKGVycikpOworCQlpZiAoZXJyID09IEVOT0VOVCAmJiAhc3RyY21wKHNlbGYtPmZpbGVuYW1lLCAicGVyZi5kYXRhIikpCiAJCQlwcl9lcnIoIiAgKHRyeSAncGVyZiByZWNvcmQnIGZpcnN0KSIpOwogCQlwcl9lcnIoIlxuIik7CiAJCXJldHVybiAtZXJybm87CkBAIC03Nyw2ICs3OSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fZGVzdHJveV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCW1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoJnNlbGYtPmhvc3RfbWFjaGluZSk7CisJbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoJnNlbGYtPm1hY2hpbmVzKTsKK30KKwogc3RydWN0IHBlcmZfc2Vzc2lvbiAqcGVyZl9zZXNzaW9uX19uZXcoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBtb2RlLCBib29sIGZvcmNlLCBib29sIHJlcGlwZSkKIHsKIAlzaXplX3QgbGVuID0gZmlsZW5hbWUgPyBzdHJsZW4oZmlsZW5hbWUpICsgMSA6IDA7CkBAIC05NCw4ICsxMDIsNiBAQAogCXNlbGYtPmhpc3RzX3RyZWUgPSBSQl9ST09UOwogCXNlbGYtPmxhc3RfbWF0Y2ggPSBOVUxMOwogCXNlbGYtPm1tYXBfd2luZG93ID0gMzI7Ci0Jc2VsZi0+Y3dkID0gTlVMTDsKLQlzZWxmLT5jd2RsZW4gPSAwOwogCXNlbGYtPm1hY2hpbmVzID0gUkJfUk9PVDsKIAlzZWxmLT5yZXBpcGUgPSByZXBpcGU7CiAJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm9yZGVyZWRfc2FtcGxlcy5zYW1wbGVzX2hlYWQpOwpAQCAtMTI0LDE2ICsxMzAsNDMgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19kZWxldGVfZGVhZF90aHJlYWRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYpCit7CisJc3RydWN0IHRocmVhZCAqbiwgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodCwgbiwgJnNlbGYtPmRlYWRfdGhyZWFkcywgbm9kZSkgeworCQlsaXN0X2RlbCgmdC0+bm9kZSk7CisJCXRocmVhZF9fZGVsZXRlKHQpOworCX0KK30KKworc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19kZWxldGVfdGhyZWFkcyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQoreworCXN0cnVjdCByYl9ub2RlICpuZCA9IHJiX2ZpcnN0KCZzZWxmLT50aHJlYWRzKTsKKworCXdoaWxlIChuZCkgeworCQlzdHJ1Y3QgdGhyZWFkICp0ID0gcmJfZW50cnkobmQsIHN0cnVjdCB0aHJlYWQsIHJiX25vZGUpOworCisJCXJiX2VyYXNlKCZ0LT5yYl9ub2RlLCAmc2VsZi0+dGhyZWFkcyk7CisJCW5kID0gcmJfbmV4dChuZCk7CisJCXRocmVhZF9fZGVsZXRlKHQpOworCX0KK30KKwogdm9pZCBwZXJmX3Nlc3Npb25fX2RlbGV0ZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXBlcmZfaGVhZGVyX19leGl0KCZzZWxmLT5oZWFkZXIpOworCXBlcmZfc2Vzc2lvbl9fZGVzdHJveV9rZXJuZWxfbWFwcyhzZWxmKTsKKwlwZXJmX3Nlc3Npb25fX2RlbGV0ZV9kZWFkX3RocmVhZHMoc2VsZik7CisJcGVyZl9zZXNzaW9uX19kZWxldGVfdGhyZWFkcyhzZWxmKTsKKwltYWNoaW5lX19leGl0KCZzZWxmLT5ob3N0X21hY2hpbmUpOwogCWNsb3NlKHNlbGYtPmZkKTsKLQlmcmVlKHNlbGYtPmN3ZCk7CiAJZnJlZShzZWxmKTsKIH0KIAogdm9pZCBwZXJmX3Nlc3Npb25fX3JlbW92ZV90aHJlYWQoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2VsZiwgc3RydWN0IHRocmVhZCAqdGgpCiB7CisJc2VsZi0+bGFzdF9tYXRjaCA9IE5VTEw7CiAJcmJfZXJhc2UoJnRoLT5yYl9ub2RlLCAmc2VsZi0+dGhyZWFkcyk7CiAJLyoKIAkgKiBXZSBtYXkgaGF2ZSByZWZlcmVuY2VzIHRvIHRoaXMgdGhyZWFkLCBmb3IgaW5zdGFuY2UgaW4gc29tZSBoaXN0X2VudHJ5CkBAIC04MzAsMjMgKzg2Myw2IEBACiAJaWYgKHBlcmZfc2Vzc2lvbl9fcmVnaXN0ZXJfaWRsZV90aHJlYWQoc2VsZikgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIXN5bWJvbF9jb25mLmZ1bGxfcGF0aHMpIHsKLQkJY2hhciBiZltQQVRIX01BWF07Ci0KLQkJaWYgKGdldGN3ZChiZiwgc2l6ZW9mKGJmKSkgPT0gTlVMTCkgewotCQkJZXJyID0gLWVycm5vOwotb3V0X2dldGN3ZF9lcnI6Ci0JCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkJCWdvdG8gb3V0X2VycjsKLQkJfQotCQlzZWxmLT5jd2QgPSBzdHJkdXAoYmYpOwotCQlpZiAoc2VsZi0+Y3dkID09IE5VTEwpIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9nZXRjd2RfZXJyOwotCQl9Ci0JCXNlbGYtPmN3ZGxlbiA9IHN0cmxlbihzZWxmLT5jd2QpOwotCX0KLQogCWlmICghc2VsZi0+ZmRfcGlwZSkKIAkJZXJyID0gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlbGYsCiAJCQkJCQkgICAgIHNlbGYtPmhlYWRlci5kYXRhX29mZnNldCwKQEAgLTg1NCw3ICs4NzAsNyBAQAogCQkJCQkJICAgICBzZWxmLT5zaXplLCBvcHMpOwogCWVsc2UKIAkJZXJyID0gX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfcGlwZV9ldmVudHMoc2VsZiwgb3BzKTsKLW91dF9lcnI6CisKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc29ydC5jIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuYwppbmRleCAyMzE2Y2I1Li4xYzYxYTRmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc29ydC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSAic29ydC5oIgorI2luY2x1ZGUgImhpc3QuaCIKIAogcmVnZXhfdAkJcGFyZW50X3JlZ2V4OwogY29uc3QgY2hhcglkZWZhdWx0X3BhcmVudF9wYXR0ZXJuW10gPSAiXnN5c198XmRvX3BhZ2VfZmF1bHQiOwpAQCAtMTAsMTAgKzExLDYgQEAKIAogZW51bSBzb3J0X3R5cGUJc29ydF9fZmlyc3RfZGltZW5zaW9uOwogCi11bnNpZ25lZCBpbnQgZHNvc19fY29sX3dpZHRoOwotdW5zaWduZWQgaW50IGNvbW1zX19jb2xfd2lkdGg7Ci11bnNpZ25lZCBpbnQgdGhyZWFkc19fY29sX3dpZHRoOwotc3RhdGljIHVuc2lnbmVkIGludCBwYXJlbnRfc3ltYm9sX19jb2xfd2lkdGg7CiBjaGFyICogZmllbGRfc2VwOwogCiBMSVNUX0hFQUQoaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKQEAgLTI4LDEyICsyNSwxNCBAQAogCQkJCSAgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHdpZHRoKTsKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fcGFyZW50X3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpzZWxmLCBjaGFyICpiZiwKIAkJCQkgICAgICAgc2l6ZV90IHNpemUsIHVuc2lnbmVkIGludCB3aWR0aCk7CitzdGF0aWMgaW50IGhpc3RfZW50cnlfX2NwdV9zbnByaW50ZihzdHJ1Y3QgaGlzdF9lbnRyeSAqc2VsZiwgY2hhciAqYmYsCisJCQkJICAgIHNpemVfdCBzaXplLCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogCiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X3RocmVhZCA9IHsKIAkuc2VfaGVhZGVyCT0gIkNvbW1hbmQ6ICBQaWQiLAogCS5zZV9jbXAJCT0gc29ydF9fdGhyZWFkX2NtcCwKIAkuc2Vfc25wcmludGYJPSBoaXN0X2VudHJ5X190aHJlYWRfc25wcmludGYsCi0JLnNlX3dpZHRoCT0gJnRocmVhZHNfX2NvbF93aWR0aCwKKwkuc2Vfd2lkdGhfaWR4CT0gSElTVENfVEhSRUFELAogfTsKIAogc3RydWN0IHNvcnRfZW50cnkgc29ydF9jb21tID0gewpAQCAtNDEsMjcgKzQwLDM1IEBACiAJLnNlX2NtcAkJPSBzb3J0X19jb21tX2NtcCwKIAkuc2VfY29sbGFwc2UJPSBzb3J0X19jb21tX2NvbGxhcHNlLAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX2NvbW1fc25wcmludGYsCi0JLnNlX3dpZHRoCT0gJmNvbW1zX19jb2xfd2lkdGgsCisJLnNlX3dpZHRoX2lkeAk9IEhJU1RDX0NPTU0sCiB9OwogCiBzdHJ1Y3Qgc29ydF9lbnRyeSBzb3J0X2RzbyA9IHsKIAkuc2VfaGVhZGVyCT0gIlNoYXJlZCBPYmplY3QiLAogCS5zZV9jbXAJCT0gc29ydF9fZHNvX2NtcCwKIAkuc2Vfc25wcmludGYJPSBoaXN0X2VudHJ5X19kc29fc25wcmludGYsCi0JLnNlX3dpZHRoCT0gJmRzb3NfX2NvbF93aWR0aCwKKwkuc2Vfd2lkdGhfaWR4CT0gSElTVENfRFNPLAogfTsKIAogc3RydWN0IHNvcnRfZW50cnkgc29ydF9zeW0gPSB7CiAJLnNlX2hlYWRlcgk9ICJTeW1ib2wiLAogCS5zZV9jbXAJCT0gc29ydF9fc3ltX2NtcCwKIAkuc2Vfc25wcmludGYJPSBoaXN0X2VudHJ5X19zeW1fc25wcmludGYsCisJLnNlX3dpZHRoX2lkeAk9IEhJU1RDX1NZTUJPTCwKIH07CiAKIHN0cnVjdCBzb3J0X2VudHJ5IHNvcnRfcGFyZW50ID0gewogCS5zZV9oZWFkZXIJPSAiUGFyZW50IHN5bWJvbCIsCiAJLnNlX2NtcAkJPSBzb3J0X19wYXJlbnRfY21wLAogCS5zZV9zbnByaW50Zgk9IGhpc3RfZW50cnlfX3BhcmVudF9zbnByaW50ZiwKLQkuc2Vfd2lkdGgJPSAmcGFyZW50X3N5bWJvbF9fY29sX3dpZHRoLAorCS5zZV93aWR0aF9pZHgJPSBISVNUQ19QQVJFTlQsCit9OworIAorc3RydWN0IHNvcnRfZW50cnkgc29ydF9jcHUgPSB7CisJLnNlX2hlYWRlciAgICAgID0gIkNQVSIsCisJLnNlX2NtcAkgICAgICAgID0gc29ydF9fY3B1X2NtcCwKKwkuc2Vfc25wcmludGYgICAgPSBoaXN0X2VudHJ5X19jcHVfc25wcmludGYsCisJLnNlX3dpZHRoX2lkeAk9IEhJU1RDX0NQVSwKIH07CiAKIHN0cnVjdCBzb3J0X2RpbWVuc2lvbiB7CkBAIC03Niw2ICs4Myw3IEBACiAJeyAubmFtZSA9ICJkc28iLAkuZW50cnkgPSAmc29ydF9kc28sCX0sCiAJeyAubmFtZSA9ICJzeW1ib2wiLAkuZW50cnkgPSAmc29ydF9zeW0sCX0sCiAJeyAubmFtZSA9ICJwYXJlbnQiLAkuZW50cnkgPSAmc29ydF9wYXJlbnQsCX0sCisJeyAubmFtZSA9ICJjcHUiLAkuZW50cnkgPSAmc29ydF9jcHUsCX0sCiB9OwogCiBpbnQ2NF90IGNtcF9udWxsKHZvaWQgKmwsIHZvaWQgKnIpCkBAIC0yNDIsNiArMjUwLDIwIEBACiAJCQkgICAgICBzZWxmLT5wYXJlbnQgPyBzZWxmLT5wYXJlbnQtPm5hbWUgOiAiW290aGVyXSIpOwogfQogCisvKiAtLXNvcnQgY3B1ICovCisKK2ludDY0X3QKK3NvcnRfX2NwdV9jbXAoc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlyZXR1cm4gcmlnaHQtPmNwdSAtIGxlZnQtPmNwdTsKK30KKworc3RhdGljIGludCBoaXN0X2VudHJ5X19jcHVfc25wcmludGYoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIGNoYXIgKmJmLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgaW50IHdpZHRoKQoreworCXJldHVybiByZXBzZXBfc25wcmludGYoYmYsIHNpemUsICIlLSpkIiwgd2lkdGgsIHNlbGYtPmNwdSk7Cit9CisKIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKnRvaykKIHsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTI4MSw2ICszMDMsOCBAQAogCQkJCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IFNPUlRfU1lNOwogCQkJZWxzZSBpZiAoIXN0cmNtcChzZC0+bmFtZSwgInBhcmVudCIpKQogCQkJCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IFNPUlRfUEFSRU5UOworCQkJZWxzZSBpZiAoIXN0cmNtcChzZC0+bmFtZSwgImNwdSIpKQorCQkJCXNvcnRfX2ZpcnN0X2RpbWVuc2lvbiA9IFNPUlRfQ1BVOwogCQl9CiAKIAkJbGlzdF9hZGRfdGFpbCgmc2QtPmVudHJ5LT5saXN0LCAmaGlzdF9lbnRyeV9fc29ydF9saXN0KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmggYi90b29scy9wZXJmL3V0aWwvc29ydC5oCmluZGV4IDBkNjFjNDAuLjQ2ZTUzMWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NvcnQuaApAQCAtMzYsMTEgKzM2LDE0IEBACiBleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF9kc287CiBleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF9zeW07CiBleHRlcm4gc3RydWN0IHNvcnRfZW50cnkgc29ydF9wYXJlbnQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IGRzb3NfX2NvbF93aWR0aDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgY29tbXNfX2NvbF93aWR0aDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdGhyZWFkc19fY29sX3dpZHRoOwogZXh0ZXJuIGVudW0gc29ydF90eXBlIHNvcnRfX2ZpcnN0X2RpbWVuc2lvbjsKIAorLyoqCisgKiBzdHJ1Y3QgaGlzdF9lbnRyeSAtIGhpc3RvZ3JhbSBlbnRyeQorICoKKyAqIEByb3dfb2Zmc2V0IC0gb2Zmc2V0IGZyb20gdGhlIGZpcnN0IGNhbGxjaGFpbiBleHBhbmRlZCB0byBhcHBlYXIgb24gc2NyZWVuCisgKiBAbnJfcm93cyAtIHJvd3MgZXhwYW5kZWQgaW4gY2FsbGNoYWluLCByZWNhbGN1bGF0ZWQgb24gZm9sZGluZy91bmZvbGRpbmcKKyAqLwogc3RydWN0IGhpc3RfZW50cnkgewogCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOwogCXU2NAkJCXBlcmlvZDsKQEAgLTUxLDcgKzU0LDE0IEBACiAJc3RydWN0IG1hcF9zeW1ib2wJbXM7CiAJc3RydWN0IHRocmVhZAkJKnRocmVhZDsKIAl1NjQJCQlpcDsKKwlzMzIJCQljcHU7CiAJdTMyCQkJbnJfZXZlbnRzOworCisJLyogWFhYIFRoZXNlIHR3byBzaG91bGQgbW92ZSB0byBzb21lIHRyZWUgd2lkZ2V0IGxpYiAqLworCXUxNgkJCXJvd19vZmZzZXQ7CisJdTE2CQkJbnJfcm93czsKKworCWJvb2wJCQlpbml0X2hhdmVfY2hpbGRyZW47CiAJY2hhcgkJCWxldmVsOwogCXU4CQkJZmlsdGVyZWQ7CiAJc3RydWN0IHN5bWJvbAkJKnBhcmVudDsKQEAgLTY4LDcgKzc4LDggQEAKIAlTT1JUX0NPTU0sCiAJU09SVF9EU08sCiAJU09SVF9TWU0sCi0JU09SVF9QQVJFTlQKKwlTT1JUX1BBUkVOVCwKKwlTT1JUX0NQVSwKIH07CiAKIC8qCkBAIC04NCw3ICs5NSw3IEBACiAJaW50NjRfdCAoKnNlX2NvbGxhcHNlKShzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKIAlpbnQJKCpzZV9zbnByaW50Zikoc3RydWN0IGhpc3RfZW50cnkgKnNlbGYsIGNoYXIgKmJmLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgpOwotCXVuc2lnbmVkIGludCAqc2Vfd2lkdGg7CisJdTgJc2Vfd2lkdGhfaWR4OwogCWJvb2wJZWxpZGU7CiB9OwogCkBAIC0xMDQsNiArMTE1LDcgQEAKIGV4dGVybiBpbnQ2NF90IHNvcnRfX2Rzb19jbXAoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CiBleHRlcm4gaW50NjRfdCBzb3J0X19zeW1fY21wKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOwogZXh0ZXJuIGludDY0X3Qgc29ydF9fcGFyZW50X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqKTsKK2ludDY0X3Qgc29ydF9fY3B1X2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KTsKIGV4dGVybiBzaXplX3Qgc29ydF9fcGFyZW50X3ByaW50KEZJTEUgKiwgc3RydWN0IGhpc3RfZW50cnkgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgc29ydF9kaW1lbnNpb25fX2FkZChjb25zdCBjaGFyICopOwogdm9pZCBzb3J0X2VudHJ5X19zZXR1cF9lbGlkZShzdHJ1Y3Qgc29ydF9lbnRyeSAqc2VsZiwgc3RydWN0IHN0cmxpc3QgKmxpc3QsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggNWIyNzY4My4uNmYwZGQ5MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSAiYnVpbGQtaWQuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInN5bWJvbC5oIgogI2luY2x1ZGUgInN0cmxpc3QuaCIKIApAQCAtMjUsNiArMjYsOCBAQAogI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMwogI2VuZGlmCiAKK3N0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgdTggKmJ1aWxkX2lkKTsKK3N0YXRpYyBpbnQgZWxmX3JlYWRfYnVpbGRfaWQoRWxmICplbGYsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSk7CiBzdGF0aWMgdm9pZCBkc29zX19hZGQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRzbyAqZHNvKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwICptYXBfX25ldzIodTY0IHN0YXJ0LCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSk7CiBzdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKQEAgLTQwLDYgKzQzLDE0IEBACiAJLnRyeV92bWxpbnV4X3BhdGggPSB0cnVlLAogfTsKIAoraW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZikKK3sKKwlpZiAodmVyYm9zZSkKKwkJcmV0dXJuIHNlbGYtPmxvbmdfbmFtZV9sZW47CisKKwlyZXR1cm4gc2VsZi0+c2hvcnRfbmFtZV9sZW47Cit9CisKIGJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKQogewogCXJldHVybiBzZWxmLT5sb2FkZWQgJiAoMSA8PCB0eXBlKTsKQEAgLTIxNSw3ICsyMjYsOSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBNQVBfX05SX1RZUEVTOyArK2kpCiAJCXN5bWJvbHNfX2RlbGV0ZSgmc2VsZi0+c3ltYm9sc1tpXSk7Ci0JaWYgKHNlbGYtPmxvbmdfbmFtZSAhPSBzZWxmLT5uYW1lKQorCWlmIChzZWxmLT5zbmFtZV9hbGxvYykKKwkJZnJlZSgoY2hhciAqKXNlbGYtPnNob3J0X25hbWUpOworCWlmIChzZWxmLT5sbmFtZV9hbGxvYykKIAkJZnJlZShzZWxmLT5sb25nX25hbWUpOwogCWZyZWUoc2VsZik7CiB9CkBAIC05MzMsOCArOTQ2LDI4IEBACiAJfQogfQogCitzdGF0aWMgc2l6ZV90IGVsZl9hZGRyX3RvX2luZGV4KEVsZiAqZWxmLCBHRWxmX0FkZHIgYWRkcikKK3sKKwlFbGZfU2NuICpzZWMgPSBOVUxMOworCUdFbGZfU2hkciBzaGRyOworCXNpemVfdCBjbnQgPSAxOworCisJd2hpbGUgKChzZWMgPSBlbGZfbmV4dHNjbihlbGYsIHNlYykpICE9IE5VTEwpIHsKKwkJZ2VsZl9nZXRzaGRyKHNlYywgJnNoZHIpOworCisJCWlmICgoYWRkciA+PSBzaGRyLnNoX2FkZHIpICYmCisJCSAgICAoYWRkciA8IChzaGRyLnNoX2FkZHIgKyBzaGRyLnNoX3NpemUpKSkKKwkJCXJldHVybiBjbnQ7CisKKwkJKytjbnQ7CisJfQorCisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgaW50IGRzb19fbG9hZF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLCBjb25zdCBjaGFyICpuYW1lLAotCQkJIGludCBmZCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlciwgaW50IGttb2R1bGUpCisJCQkgaW50IGZkLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyLCBpbnQga21vZHVsZSwKKwkJCSBpbnQgd2FudF9zeW10YWIpCiB7CiAJc3RydWN0IGttYXAgKmttYXAgPSBzZWxmLT5rZXJuZWwgPyBtYXBfX2ttYXAobWFwKSA6IE5VTEw7CiAJc3RydWN0IG1hcCAqY3Vycl9tYXAgPSBtYXA7CkBAIC05NDQsMzEgKzk3Nyw1MSBAQAogCWludCBlcnIgPSAtMTsKIAl1aW50MzJfdCBpZHg7CiAJR0VsZl9FaGRyIGVoZHI7Ci0JR0VsZl9TaGRyIHNoZHI7Ci0JRWxmX0RhdGEgKnN5bXM7CisJR0VsZl9TaGRyIHNoZHIsIG9wZHNoZHI7CisJRWxmX0RhdGEgKnN5bXMsICpvcGRkYXRhID0gTlVMTDsKIAlHRWxmX1N5bSBzeW07Ci0JRWxmX1NjbiAqc2VjLCAqc2VjX3N0cm5keDsKKwlFbGZfU2NuICpzZWMsICpzZWNfc3RybmR4LCAqb3Bkc2VjOwogCUVsZiAqZWxmOwogCWludCBuciA9IDA7CisJc2l6ZV90IG9wZGlkeCA9IDA7CiAKIAllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpIHsKLQkJcHJfZXJyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgbmFtZSk7CisJCXByX2RlYnVnKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgbmFtZSk7CiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAogCWlmIChnZWxmX2dldGVoZHIoZWxmLCAmZWhkcikgPT0gTlVMTCkgewotCQlwcl9lcnIoIiVzOiBjYW5ub3QgZ2V0IGVsZiBoZWFkZXIuXG4iLCBfX2Z1bmNfXyk7CisJCXByX2RlYnVnKCIlczogY2Fubm90IGdldCBlbGYgaGVhZGVyLlxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIAorCS8qIEFsd2F5cyByZWplY3QgaW1hZ2VzIHdpdGggYSBtaXNtYXRjaGVkIGJ1aWxkLWlkOiAqLworCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKKwkJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07CisKKwkJaWYgKGVsZl9yZWFkX2J1aWxkX2lkKGVsZiwgYnVpbGRfaWQsCisJCQkJICAgICAgQlVJTERfSURfU0laRSkgIT0gQlVJTERfSURfU0laRSkKKwkJCWdvdG8gb3V0X2VsZl9lbmQ7CisKKwkJaWYgKCFkc29fX2J1aWxkX2lkX2VxdWFsKHNlbGYsIGJ1aWxkX2lkKSkKKwkJCWdvdG8gb3V0X2VsZl9lbmQ7CisJfQorCiAJc2VjID0gZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwgIi5zeW10YWIiLCBOVUxMKTsKIAlpZiAoc2VjID09IE5VTEwpIHsKKwkJaWYgKHdhbnRfc3ltdGFiKQorCQkJZ290byBvdXRfZWxmX2VuZDsKKwogCQlzZWMgPSBlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLCAiLmR5bnN5bSIsIE5VTEwpOwogCQlpZiAoc2VjID09IE5VTEwpCiAJCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIAorCW9wZHNlYyA9IGVsZl9zZWN0aW9uX2J5X25hbWUoZWxmLCAmZWhkciwgJm9wZHNoZHIsICIub3BkIiwgJm9wZGlkeCk7CisJaWYgKG9wZHNlYykKKwkJb3BkZGF0YSA9IGVsZl9yYXdkYXRhKG9wZHNlYywgTlVMTCk7CisKIAlzeW1zID0gZWxmX2dldGRhdGEoc2VjLCBOVUxMKTsKIAlpZiAoc3ltcyA9PSBOVUxMKQogCQlnb3RvIG91dF9lbGZfZW5kOwpAQCAtMTAxMyw2ICsxMDY2LDEzIEBACiAJCWlmICghaXNfbGFiZWwgJiYgIWVsZl9zeW1fX2lzX2EoJnN5bSwgbWFwLT50eXBlKSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChvcGRzZWMgJiYgc3ltLnN0X3NobmR4ID09IG9wZGlkeCkgeworCQkJdTMyIG9mZnNldCA9IHN5bS5zdF92YWx1ZSAtIG9wZHNoZHIuc2hfYWRkcjsKKwkJCXU2NCAqb3BkID0gb3BkZGF0YS0+ZF9idWYgKyBvZmZzZXQ7CisJCQlzeW0uc3RfdmFsdWUgPSAqb3BkOworCQkJc3ltLnN0X3NobmR4ID0gZWxmX2FkZHJfdG9faW5kZXgoZWxmLCBzeW0uc3RfdmFsdWUpOworCQl9CisKIAkJc2VjID0gZWxmX2dldHNjbihlbGYsIHN5bS5zdF9zaG5keCk7CiAJCWlmICghc2VjKQogCQkJZ290byBvdXRfZWxmX2VuZDsKQEAgLTExNTEsMzcgKzEyMTEsMjYgQEAKICAqLwogI2RlZmluZSBOT1RFX0FMSUdOKG4pICgoKG4pICsgMykgJiAtNFUpCiAKLWludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKQorc3RhdGljIGludCBlbGZfcmVhZF9idWlsZF9pZChFbGYgKmVsZiwgdm9pZCAqYmYsIHNpemVfdCBzaXplKQogewotCWludCBmZCwgZXJyID0gLTE7CisJaW50IGVyciA9IC0xOwogCUdFbGZfRWhkciBlaGRyOwogCUdFbGZfU2hkciBzaGRyOwogCUVsZl9EYXRhICpkYXRhOwogCUVsZl9TY24gKnNlYzsKIAlFbGZfS2luZCBlazsKIAl2b2lkICpwdHI7Ci0JRWxmICplbGY7CiAKIAlpZiAoc2l6ZSA8IEJVSUxEX0lEX1NJWkUpCiAJCWdvdG8gb3V0OwogCi0JZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGZkIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKLQlpZiAoZWxmID09IE5VTEwpIHsKLQkJcHJfZGVidWcyKCIlczogY2Fubm90IHJlYWQgJXMgRUxGIGZpbGUuXG4iLCBfX2Z1bmNfXywgZmlsZW5hbWUpOwotCQlnb3RvIG91dF9jbG9zZTsKLQl9Ci0KIAllayA9IGVsZl9raW5kKGVsZik7CiAJaWYgKGVrICE9IEVMRl9LX0VMRikKLQkJZ290byBvdXRfZWxmX2VuZDsKKwkJZ290byBvdXQ7CiAKIAlpZiAoZ2VsZl9nZXRlaGRyKGVsZiwgJmVoZHIpID09IE5VTEwpIHsKIAkJcHJfZXJyKCIlczogY2Fubm90IGdldCBlbGYgaGVhZGVyLlxuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9lbGZfZW5kOworCQlnb3RvIG91dDsKIAl9CiAKIAlzZWMgPSBlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLApAQCAtMTE5MCwxMiArMTIzOSwxMiBAQAogCQlzZWMgPSBlbGZfc2VjdGlvbl9ieV9uYW1lKGVsZiwgJmVoZHIsICZzaGRyLAogCQkJCQkgICIubm90ZXMiLCBOVUxMKTsKIAkJaWYgKHNlYyA9PSBOVUxMKQotCQkJZ290byBvdXRfZWxmX2VuZDsKKwkJCWdvdG8gb3V0OwogCX0KIAogCWRhdGEgPSBlbGZfZ2V0ZGF0YShzZWMsIE5VTEwpOwogCWlmIChkYXRhID09IE5VTEwpCi0JCWdvdG8gb3V0X2VsZl9lbmQ7CisJCWdvdG8gb3V0OwogCiAJcHRyID0gZGF0YS0+ZF9idWY7CiAJd2hpbGUgKHB0ciA8IChkYXRhLT5kX2J1ZiArIGRhdGEtPmRfc2l6ZSkpIHsKQEAgLTEyMTcsNyArMTI2NiwzMSBAQAogCQl9CiAJCXB0ciArPSBkZXNjc3o7CiAJfQotb3V0X2VsZl9lbmQ6CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmJmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgZmQsIGVyciA9IC0xOworCUVsZiAqZWxmOworCisJaWYgKHNpemUgPCBCVUlMRF9JRF9TSVpFKQorCQlnb3RvIG91dDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWdvdG8gb3V0OworCisJZWxmID0gZWxmX2JlZ2luKGZkLCBQRVJGX0VMRl9DX1JFQURfTU1BUCwgTlVMTCk7CisJaWYgKGVsZiA9PSBOVUxMKSB7CisJCXByX2RlYnVnMigiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwgX19mdW5jX18sIGZpbGVuYW1lKTsKKwkJZ290byBvdXRfY2xvc2U7CisJfQorCisJZXJyID0gZWxmX3JlYWRfYnVpbGRfaWQoZWxmLCBiZiwgc2l6ZSk7CisKIAllbGZfZW5kKGVsZik7CiBvdXRfY2xvc2U6CiAJY2xvc2UoZmQpOwpAQCAtMTI5MywxMSArMTM2NiwxMSBAQAogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKLQl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAlpbnQgcmV0ID0gLTE7CiAJaW50IGZkOwogCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lOwogCWNvbnN0IGNoYXIgKnJvb3RfZGlyOworCWludCB3YW50X3N5bXRhYjsKIAogCWRzb19fc2V0X2xvYWRlZChzZWxmLCBtYXAtPnR5cGUpOwogCkBAIC0xMzI0LDEzICsxMzk3LDE4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOwotCWlmIChkc29fX2J1aWxkX2lkX2ZpbGVuYW1lKHNlbGYsIG5hbWUsIHNpemUpICE9IE5VTEwpCi0JCWdvdG8gb3Blbl9maWxlOwotbW9yZToKLQlkbyB7Ci0JCXNlbGYtPm9yaWdpbisrOworCS8qIEl0ZXJhdGUgb3ZlciBjYW5kaWRhdGUgZGVidWcgaW1hZ2VzLgorCSAqIE9uIHRoZSBmaXJzdCBwYXNzLCBvbmx5IGxvYWQgaW1hZ2VzIGlmIHRoZXkgaGF2ZSBhIGZ1bGwgc3ltdGFiLgorCSAqIEZhaWxpbmcgdGhhdCwgZG8gYSBzZWNvbmQgcGFzcyB3aGVyZSB3ZSBhY2NlcHQgLmR5bnN5bSBhbHNvCisJICovCisJZm9yIChzZWxmLT5vcmlnaW4gPSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEUsIHdhbnRfc3ltdGFiID0gMTsKKwkgICAgIHNlbGYtPm9yaWdpbiAhPSBEU09fX09SSUdfTk9UX0ZPVU5EOworCSAgICAgc2VsZi0+b3JpZ2luKyspIHsKIAkJc3dpdGNoIChzZWxmLT5vcmlnaW4pIHsKKwkJY2FzZSBEU09fX09SSUdfQlVJTERfSURfQ0FDSEU6CisJCQlpZiAoZHNvX19idWlsZF9pZF9maWxlbmFtZShzZWxmLCBuYW1lLCBzaXplKSA9PSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CiAJCWNhc2UgRFNPX19PUklHX0ZFRE9SQToKIAkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIvdXNyL2xpYi9kZWJ1ZyVzLmRlYnVnIiwKIAkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKQEAgLTEzMzksMjEgKzE0MTcsMjAgQEAKIAkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIvdXNyL2xpYi9kZWJ1ZyVzIiwKIAkJCQkgc2VsZi0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwotCQljYXNlIERTT19fT1JJR19CVUlMRElEOgotCQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHNlbGYtPmxvbmdfbmFtZSwgYnVpbGRfaWQsCi0JCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkpIHsKLQkJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwotCQkJCWJ1aWxkX2lkX19zcHJpbnRmKGJ1aWxkX2lkLCBzaXplb2YoYnVpbGRfaWQpLAotCQkJCQkJICBidWlsZF9pZF9oZXgpOwotCQkJCXNucHJpbnRmKG5hbWUsIHNpemUsCi0JCQkJCSAiL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkLyUuMnMvJXMuZGVidWciLAotCQkJCQlidWlsZF9pZF9oZXgsIGJ1aWxkX2lkX2hleCArIDIpOwotCQkJCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpCi0JCQkJCWdvdG8gY29tcGFyZV9idWlsZF9pZDsKLQkJCQlicmVhazsKKwkJY2FzZSBEU09fX09SSUdfQlVJTERJRDogeworCQkJY2hhciBidWlsZF9pZF9oZXhbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKKworCQkJaWYgKCFzZWxmLT5oYXNfYnVpbGRfaWQpCisJCQkJY29udGludWU7CisKKwkJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLAorCQkJCQkgIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQkJCSAgYnVpbGRfaWRfaGV4KTsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemUsCisJCQkJICIvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQtaWQvJS4ycy8lcy5kZWJ1ZyIsCisJCQkJIGJ1aWxkX2lkX2hleCwgYnVpbGRfaWRfaGV4ICsgMik7CiAJCQl9Ci0JCQlzZWxmLT5vcmlnaW4rKzsKLQkJCS8qIEZhbGwgdGhydSAqLworCQkJYnJlYWs7CiAJCWNhc2UgRFNPX19PUklHX0RTTzoKIAkJCXNucHJpbnRmKG5hbWUsIHNpemUsICIlcyIsIHNlbGYtPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKQEAgLTEzNjYsMzYgKzE0NDMsNDEgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dDsKKwkJCS8qCisJCQkgKiBJZiB3ZSB3YW50ZWQgYSBmdWxsIHN5bXRhYiBidXQgbm8gaW1hZ2UgaGFkIG9uZSwKKwkJCSAqIHJlbGF4IG91ciByZXF1aXJlbWVudHMgYW5kIHJlcGVhdCB0aGUgc2VhcmNoLgorCQkJICovCisJCQlpZiAod2FudF9zeW10YWIpIHsKKwkJCQl3YW50X3N5bXRhYiA9IDA7CisJCQkJc2VsZi0+b3JpZ2luID0gRFNPX19PUklHX0JVSUxEX0lEX0NBQ0hFOworCQkJfSBlbHNlCisJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoc2VsZi0+aGFzX2J1aWxkX2lkKSB7Ci0JCQlpZiAoZmlsZW5hbWVfX3JlYWRfYnVpbGRfaWQobmFtZSwgYnVpbGRfaWQsCi0JCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKQotCQkJCWdvdG8gbW9yZTsKLWNvbXBhcmVfYnVpbGRfaWQ6Ci0JCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQotCQkJCWdvdG8gbW9yZTsKLQkJfQotb3Blbl9maWxlOgorCQkvKiBOYW1lIGlzIG5vdyB0aGUgbmFtZSBvZiB0aGUgbmV4dCBpbWFnZSB0byB0cnkgKi8KIAkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKLQl9IHdoaWxlIChmZCA8IDApOworCQlpZiAoZmQgPCAwKQorCQkJY29udGludWU7CiAKLQlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCk7Ci0JY2xvc2UoZmQpOworCQlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCwKKwkJCQkgICAgd2FudF9zeW10YWIpOworCQljbG9zZShmZCk7CiAKLQkvKgotCSAqIFNvbWUgcGVvcGxlIHNlZW0gdG8gaGF2ZSBkZWJ1Z2luZm8gZmlsZXMgX1dJVEhPVVRfIGRlYnVnIGluZm8hPyE/Ci0JICovCi0JaWYgKCFyZXQpCi0JCWdvdG8gbW9yZTsKKwkJLyoKKwkJICogU29tZSBwZW9wbGUgc2VlbSB0byBoYXZlIGRlYnVnaW5mbyBmaWxlcyBfV0lUSE9VVF8gZGVidWcKKwkJICogaW5mbyE/IT8KKwkJICovCisJCWlmICghcmV0KQorCQkJY29udGludWU7CiAKLQlpZiAocmV0ID4gMCkgewotCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHNlbGYsIG1hcCwgZmlsdGVyKTsKLQkJaWYgKG5yX3BsdCA+IDApCi0JCQlyZXQgKz0gbnJfcGx0OworCQlpZiAocmV0ID4gMCkgeworCQkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCBtYXAsIGZpbHRlcik7CisJCQlpZiAobnJfcGx0ID4gMCkKKwkJCQlyZXQgKz0gbnJfcGx0OworCQkJYnJlYWs7CisJCX0KIAl9Ci1vdXQ6CisKIAlmcmVlKG5hbWUpOwogCWlmIChyZXQgPCAwICYmIHN0cnN0cihzZWxmLT5uYW1lLCAiIChkZWxldGVkKSIpICE9IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMTQ5NCw2ICsxNTc2LDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWRzb19fc2V0X2xvbmdfbmFtZShtYXAtPmRzbywgbG9uZ19uYW1lKTsKKwkJCW1hcC0+ZHNvLT5sbmFtZV9hbGxvYyA9IDE7CiAJCQlkc29fX2tlcm5lbF9tb2R1bGVfZ2V0X2J1aWxkX2lkKG1hcC0+ZHNvLCAiIik7CiAJCX0KIAl9CkBAIC0xNjU2LDM2ICsxNzM5LDEyIEBACiB7CiAJaW50IGVyciA9IC0xLCBmZDsKIAotCWlmIChzZWxmLT5oYXNfYnVpbGRfaWQpIHsKLQkJdTggYnVpbGRfaWRbQlVJTERfSURfU0laRV07Ci0KLQkJaWYgKGZpbGVuYW1lX19yZWFkX2J1aWxkX2lkKHZtbGludXgsIGJ1aWxkX2lkLAotCQkJCQkgICAgc2l6ZW9mKGJ1aWxkX2lkKSkgPCAwKSB7Ci0JCQlwcl9kZWJ1ZygiTm8gYnVpbGRfaWQgaW4gJXMsIGlnbm9yaW5nIGl0XG4iLCB2bWxpbnV4KTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKSB7Ci0JCQljaGFyIGV4cGVjdGVkX2J1aWxkX2lkW0JVSUxEX0lEX1NJWkUgKiAyICsgMV0sCi0JCQkgICAgIHZtbGludXhfYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKLQotCQkJYnVpbGRfaWRfX3NwcmludGYoc2VsZi0+YnVpbGRfaWQsCi0JCQkJCSAgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKLQkJCQkJICBleHBlY3RlZF9idWlsZF9pZCk7Ci0JCQlidWlsZF9pZF9fc3ByaW50ZihidWlsZF9pZCwgc2l6ZW9mKGJ1aWxkX2lkKSwKLQkJCQkJICB2bWxpbnV4X2J1aWxkX2lkKTsKLQkJCXByX2RlYnVnKCJidWlsZF9pZCBpbiAlcyBpcyAlcyB3aGlsZSBleHBlY3RlZCBpcyAlcywgIgotCQkJCSAiaWdub3JpbmcgaXRcbiIsIHZtbGludXgsIHZtbGludXhfYnVpbGRfaWQsCi0JCQkJIGV4cGVjdGVkX2J1aWxkX2lkKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQogCWZkID0gb3Blbih2bWxpbnV4LCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCiAJZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7Ci0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHZtbGludXgsIGZkLCBmaWx0ZXIsIDApOworCWVyciA9IGRzb19fbG9hZF9zeW0oc2VsZiwgbWFwLCB2bWxpbnV4LCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CiAKIAlpZiAoZXJyID4gMCkKQEAgLTIwNDgsNiArMjEwNywzNiBAQAogCXJldHVybiAwOwogfQogCit2b2lkIG1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCit7CisJZW51bSBtYXBfdHlwZSB0eXBlOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BUF9fTlJfVFlQRVM7ICsrdHlwZSkgeworCQlzdHJ1Y3Qga21hcCAqa21hcDsKKworCQlpZiAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlrbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCW1hcF9ncm91cHNfX3JlbW92ZSgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCWlmIChrbWFwLT5yZWZfcmVsb2Nfc3ltKSB7CisJCQkvKgorCQkJICogcmVmX3JlbG9jX3N5bSBpcyBzaGFyZWQgYW1vbmcgYWxsIG1hcHMsIHNvIGZyZWUganVzdAorCQkJICogb24gb25lIG9mIHRoZW0uCisJCQkgKi8KKwkJCWlmICh0eXBlID09IE1BUF9fRlVOQ1RJT04pIHsKKwkJCQlmcmVlKChjaGFyICopa21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSk7CisJCQkJa21hcC0+cmVmX3JlbG9jX3N5bS0+bmFtZSA9IE5VTEw7CisJCQkJZnJlZShrbWFwLT5yZWZfcmVsb2Nfc3ltKTsKKwkJCX0KKwkJCWttYXAtPnJlZl9yZWxvY19zeW0gPSBOVUxMOworCQl9CisKKwkJbWFwX19kZWxldGUoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKKwl9Cit9CisKIGludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCiB7CiAJc3RydWN0IGRzbyAqa2VybmVsID0gbWFjaGluZV9fY3JlYXRlX2tlcm5lbChzZWxmKTsKQEAgLTIxODksNiArMjI3OCwxNSBAQAogCXJldHVybiAtMTsKIH0KIAordm9pZCBzeW1ib2xfX2V4aXQodm9pZCkKK3sKKwlzdHJsaXN0X19kZWxldGUoc3ltYm9sX2NvbmYuc3ltX2xpc3QpOworCXN0cmxpc3RfX2RlbGV0ZShzeW1ib2xfY29uZi5kc29fbGlzdCk7CisJc3RybGlzdF9fZGVsZXRlKHN5bWJvbF9jb25mLmNvbW1fbGlzdCk7CisJdm1saW51eF9wYXRoX19leGl0KCk7CisJc3ltYm9sX2NvbmYuc3ltX2xpc3QgPSBzeW1ib2xfY29uZi5kc29fbGlzdCA9IHN5bWJvbF9jb25mLmNvbW1fbGlzdCA9IE5VTEw7Cit9CisKIGludCBtYWNoaW5lc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQpCiB7CiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtYWNoaW5lc19fZmluZG5ldyhzZWxmLCBwaWQpOwpAQCAtMjI4Myw2ICsyMzgxLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCBtYWNoaW5lc19fZGVzdHJveV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHNlbGYpOworCisJd2hpbGUgKG5leHQpIHsKKwkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKKworCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKKwkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCW1hY2hpbmVfX2RlbGV0ZShwb3MpOworCX0KK30KKwogaW50IG1hY2hpbmVfX2xvYWRfa2FsbHN5bXMoc3RydWN0IG1hY2hpbmUgKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkJICAgZW51bSBtYXBfdHlwZSB0eXBlLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCmluZGV4IDVlMDJkMmMuLjkwNmJlMjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAorKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKQEAgLTksOCArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2RlZmluZSBERUJVR19DQUNIRV9ESVIgIi5kZWJ1ZyIKLQogI2lmZGVmIEhBVkVfQ1BMVVNfREVNQU5HTEUKIGV4dGVybiBjaGFyICpjcGx1c19kZW1hbmdsZShjb25zdCBjaGFyICosIGludCk7CiAKQEAgLTcwLDkgKzY4LDkgQEAKIAkJCXNob3dfbnJfc2FtcGxlcywKIAkJCXVzZV9jYWxsY2hhaW4sCiAJCQlleGNsdWRlX290aGVyLAotCQkJZnVsbF9wYXRocywKIAkJCXNob3dfY3B1X3V0aWxpemF0aW9uOwogCWNvbnN0IGNoYXIJKnZtbGludXhfbmFtZSwKKwkJCSpzb3VyY2VfcHJlZml4LAogCQkJKmZpZWxkX3NlcDsKIAljb25zdCBjaGFyCSpkZWZhdWx0X2d1ZXN0X3ZtbGludXhfbmFtZSwKIAkJCSpkZWZhdWx0X2d1ZXN0X2thbGxzeW1zLApAQCAtMTAzLDYgKzEwMSw4IEBACiBzdHJ1Y3QgbWFwX3N5bWJvbCB7CiAJc3RydWN0IG1hcCAgICAqbWFwOwogCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlib29sCSAgICAgIHVuZm9sZGVkOworCWJvb2wJICAgICAgaGFzX2NoaWxkcmVuOwogfTsKIAogc3RydWN0IGFkZHJfbG9jYXRpb24gewpAQCAtMTEyLDcgKzExMiw4IEBACiAJdTY0CSAgICAgIGFkZHI7CiAJY2hhcgkgICAgICBsZXZlbDsKIAlib29sCSAgICAgIGZpbHRlcmVkOwotCXVuc2lnbmVkIGludCAgY3B1bW9kZTsKKwl1OAkgICAgICBjcHVtb2RlOworCXMzMgkgICAgICBjcHU7CiB9OwogCiBlbnVtIGRzb19rZXJuZWxfdHlwZSB7CkBAIC0xMjUsMTIgKzEyNiwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sc1tNQVBfX05SX1RZUEVTXTsKIAlzdHJ1Y3QgcmJfcm9vdAkgc3ltYm9sX25hbWVzW01BUF9fTlJfVFlQRVNdOworCWVudW0gZHNvX2tlcm5lbF90eXBlCWtlcm5lbDsKIAl1OAkJIGFkanVzdF9zeW1ib2xzOjE7CiAJdTgJCSBzbGVuX2NhbGN1bGF0ZWQ6MTsKIAl1OAkJIGhhc19idWlsZF9pZDoxOwotCWVudW0gZHNvX2tlcm5lbF90eXBlCWtlcm5lbDsKIAl1OAkJIGhpdDoxOwogCXU4CQkgYW5ub3RhdGVfd2FybmVkOjE7CisJdTgJCSBzbmFtZV9hbGxvYzoxOworCXU4CQkgbG5hbWVfYWxsb2M6MTsKIAl1bnNpZ25lZCBjaGFyCSBvcmlnaW47CiAJdTgJCSBzb3J0ZWRfYnlfbmFtZTsKIAl1OAkJIGxvYWRlZDsKQEAgLTE0Niw2ICsxNDksOCBAQAogc3RydWN0IGRzbyAqZHNvX19uZXdfa2VybmVsKGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpzZWxmKTsKIAoraW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZik7CisKIGJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKIGJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCkBAIC0yMDcsMTMgKzIxMiwxNiBAQAogCQkgICAgaW50ICgqcHJvY2Vzc19zeW1ib2wpKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJICBjaGFyIHR5cGUsIHU2NCBzdGFydCkpOwogCit2b2lkIG1hY2hpbmVfX2Rlc3Ryb3lfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwogaW50IF9fbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBzdHJ1Y3QgZHNvICprZXJuZWwpOwogaW50IG1hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZik7CiAKIGludCBtYWNoaW5lc19fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmLCBwaWRfdCBwaWQpOwogaW50IG1hY2hpbmVzX19jcmVhdGVfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpOwordm9pZCBtYWNoaW5lc19fZGVzdHJveV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZik7CiAKIGludCBzeW1ib2xfX2luaXQodm9pZCk7Cit2b2lkIHN5bWJvbF9fZXhpdCh2b2lkKTsKIGJvb2wgc3ltYm9sX3R5cGVfX2lzX2EoY2hhciBzeW1ib2xfdHlwZSwgZW51bSBtYXBfdHlwZSBtYXBfdHlwZSk7CiAKIHNpemVfdCBtYWNoaW5lX19mcHJpbnRmX3ZtbGludXhfcGF0aChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jIGIvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5jCmluZGV4IDlhNDQ4YjQuLjhjNzJkODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuYworKysgYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmMKQEAgLTYyLDYgKzYyLDEzIEBACiAJcmV0dXJuIHNlbGY7CiB9CiAKK3ZvaWQgdGhyZWFkX19kZWxldGUoc3RydWN0IHRocmVhZCAqc2VsZikKK3sKKwltYXBfZ3JvdXBzX19leGl0KCZzZWxmLT5tZyk7CisJZnJlZShzZWxmLT5jb21tKTsKKwlmcmVlKHNlbGYpOworfQorCiBpbnQgdGhyZWFkX19zZXRfY29tbShzdHJ1Y3QgdGhyZWFkICpzZWxmLCBjb25zdCBjaGFyICpjb21tKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvdGhyZWFkLmggYi90b29scy9wZXJmL3V0aWwvdGhyZWFkLmgKaW5kZXggZWU2YmJjZi4uNjg4NTAwZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3RocmVhZC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC90aHJlYWQuaApAQCAtMjAsNiArMjAsOCBAQAogCiBzdHJ1Y3QgcGVyZl9zZXNzaW9uOwogCit2b2lkIHRocmVhZF9fZGVsZXRlKHN0cnVjdCB0aHJlYWQgKnNlbGYpOworCiBpbnQgZmluZF9hbGxfdGlkKGludCBwaWQsIHBpZF90ICoqIGFsbF90aWQpOwogaW50IHRocmVhZF9fc2V0X2NvbW0oc3RydWN0IHRocmVhZCAqc2VsZiwgY29uc3QgY2hhciAqY29tbSk7CiBpbnQgdGhyZWFkX19jb21tX2xlbihzdHJ1Y3QgdGhyZWFkICpzZWxmKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmggYi90b29scy9wZXJmL3V0aWwvdXRpbC5oCmluZGV4IDRlOGI2YjAuLmYzODBmZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91dGlsLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3V0aWwuaApAQCAtODksNiArODksNyBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqZ3JhcGhfbGluZTsKIGV4dGVybiBjb25zdCBjaGFyICpncmFwaF9kb3R0ZWRfbGluZTsKK2V4dGVybiBjaGFyIGJ1aWxkaWRfZGlyW107CiAKIC8qIE9uIG1vc3Qgc3lzdGVtcyA8bGltaXRzLmg+IHdvdWxkIGhhdmUgZ2l2ZW4gdXMgdGhpcywgYnV0CiAgKiBub3Qgb24gc29tZSBzeXN0ZW1zIChlLmcuIEdOVS9IdXJkKS4KQEAgLTE1Miw2ICsxNTMsOCBAQAogZXh0ZXJuIHZvaWQgc2V0X2RpZV9yb3V0aW5lKHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSBOT1JFVFVSTik7CiAKIGV4dGVybiBpbnQgcHJlZml4Y21wKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiB2b2lkIHNldF9idWlsZGlkX2Rpcih2b2lkKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfYnVpbGRpZF9jYWNoZSh2b2lkKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpza2lwX3ByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsK